<?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>82784</bug_id>
          
          <creation_ts>2012-03-30 14:51:53 -0700</creation_ts>
          <short_desc>Rename first/second to key/value in HashMap iterators</short_desc>
          <delta_ts>2012-10-15 14:26:27 -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>Web Template Framework</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>92137</dependson>
    
    <dependson>95163</dependson>
    
    <dependson>95239</dependson>
          <blocked>99367</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Caio Marcelo de Oliveira Filho">cmarcelo</reporter>
          <assigned_to name="Caio Marcelo de Oliveira Filho">cmarcelo</assigned_to>
          <cc>abarth</cc>
    
    <cc>abecsi</cc>
    
    <cc>andersca</cc>
    
    <cc>ap</cc>
    
    <cc>benjamin</cc>
    
    <cc>cc-bugs</cc>
    
    <cc>cc-bugs</cc>
    
    <cc>cgarcia</cc>
    
    <cc>danw</cc>
    
    <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dino</cc>
    
    <cc>enne</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>eric</cc>
    
    <cc>feature-media-reviews</cc>
    
    <cc>fmalita</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>haraken</cc>
    
    <cc>jamesr</cc>
    
    <cc>japhet</cc>
    
    <cc>jochen</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>mifenton</cc>
    
    <cc>mjs</cc>
    
    <cc>mrobinson</cc>
    
    <cc>noam</cc>
    
    <cc>pdr</cc>
    
    <cc>peter+ews</cc>
    
    <cc>philn</cc>
    
    <cc>rakuco</cc>
    
    <cc>rniwa</cc>
    
    <cc>rwlbuis</cc>
    
    <cc>schenney</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>tkent</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>yutak</cc>
    
    <cc>zoltan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>592517</commentid>
    <comment_count>0</comment_count>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-03-30 14:51:53 -0700</bug_when>
    <thetext>As suggested in comment https://bugs.webkit.org/show_bug.cgi?id=71063#c2 it would be better (more readable at callsites) to have &apos;it-&gt;key&apos; and &apos;it-&gt;value&apos; instead of &apos;it-&gt;first&apos; and &apos;it-&gt;second&apos;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592592</commentid>
    <comment_count>1</comment_count>
      <attachid>134905</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-03-30 15:56:27 -0700</bug_when>
    <thetext>Created attachment 134905
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592600</commentid>
    <comment_count>2</comment_count>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-03-30 15:59:01 -0700</bug_when>
    <thetext>Darin Adler, could you take a look at this one? The most interesting bits are in Source/WTF, in particular HashTraits.h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592601</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-30 15:59:37 -0700</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592608</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-30 16:01:45 -0700</bug_when>
    <thetext>Attachment 134905 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/API/JSCallbackObject...&quot; exit_code: 1
Tools/DumpRenderTree/win/AccessibilityControllerWin.cpp:319:  Use 0 instead of NULL.  [readability/null] [5]
Total errors found: 1 in 352 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592635</commentid>
    <comment_count>5</comment_count>
      <attachid>134905</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-03-30 16:25:39 -0700</bug_when>
    <thetext>Comment on attachment 134905
Patch

Attachment 134905 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/12266568</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592664</commentid>
    <comment_count>6</comment_count>
      <attachid>134905</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-03-30 17:04:23 -0700</bug_when>
    <thetext>Comment on attachment 134905
Patch

Attachment 134905 did not pass win-ews (win):
Output: http://queues.webkit.org/results/12253515</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>593228</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-04-02 00:32:11 -0700</bug_when>
    <thetext>The patch looks great in general but it seems like you still have to fix some builds. And I&apos;d differ the review of traits changes to veteran WTF reviewers :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>593511</commentid>
    <comment_count>8</comment_count>
      <attachid>135113</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-04-02 09:02:45 -0700</bug_when>
    <thetext>Created attachment 135113
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>593516</commentid>
    <comment_count>9</comment_count>
      <attachid>135116</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-04-02 09:08:20 -0700</bug_when>
    <thetext>Created attachment 135116
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>593539</commentid>
    <comment_count>10</comment_count>
      <attachid>135116</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-04-02 09:43:20 -0700</bug_when>
    <thetext>Comment on attachment 135116
Patch

Attachment 135116 did not pass win-ews (win):
Output: http://queues.webkit.org/results/12306757</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>593545</commentid>
    <comment_count>11</comment_count>
      <attachid>135122</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-04-02 09:49:29 -0700</bug_when>
    <thetext>Created attachment 135122
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>601337</commentid>
    <comment_count>12</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-04-12 10:39:43 -0700</bug_when>
    <thetext>Ideally maciej/darin would take a look at this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>606910</commentid>
    <comment_count>13</comment_count>
      <attachid>135122</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2012-04-20 14:29:26 -0700</bug_when>
    <thetext>Comment on attachment 135122
Patch

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

&gt; Source/WTF/ChangeLog:9
&gt; +        HashMapEntry. In HashMap the ValueType serve as &quot;contents&quot; of the iterators.

I would suggest naming this KeyValuePair instead of HashMapEntry. It seems like in principle it could be useful in other contexts where you have a key/value pair and want better names than first/second.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>610051</commentid>
    <comment_count>14</comment_count>
      <attachid>138874</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-04-25 14:31:54 -0700</bug_when>
    <thetext>Created attachment 138874
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>610053</commentid>
    <comment_count>15</comment_count>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-04-25 14:35:28 -0700</bug_when>
    <thetext>New rebased version of the patch. I also changed HashMapEntry to KeyValuePair, but kept it defined in HashTraits.h for now. If we decided to go with it, I can create a separate file for KeyValuePair in this or a different patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>663083</commentid>
    <comment_count>16</comment_count>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-07-04 11:49:09 -0700</bug_when>
    <thetext>Ping?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>663096</commentid>
    <comment_count>17</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-07-04 12:31:27 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; Ping?

You probably need to update the patch for ToT.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>663704</commentid>
    <comment_count>18</comment_count>
      <attachid>138874</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-07-05 13:23:55 -0700</bug_when>
    <thetext>Comment on attachment 138874
Patch

Removing r? until I upload a new rebased version.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>677009</commentid>
    <comment_count>19</comment_count>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-07-24 10:46:00 -0700</bug_when>
    <thetext>Created bug 92137 for the non-mechanical bits of this change. I hope that bug is more &quot;reviewable&quot; :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681221</commentid>
    <comment_count>20</comment_count>
      <attachid>155084</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-07-27 16:20:40 -0700</bug_when>
    <thetext>Created attachment 155084
Patch for the EWS, not ready for review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681222</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-27 16:24:36 -0700</bug_when>
    <thetext>Attachment 155084 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/API/JSCallbackObject...&quot; exit_code: 1
Tools/DumpRenderTree/win/AccessibilityControllerWin.cpp:319:  Use 0 instead of NULL.  [readability/null] [5]
Total errors found: 1 in 363 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681247</commentid>
    <comment_count>22</comment_count>
      <attachid>155084</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-07-27 17:05:07 -0700</bug_when>
    <thetext>Comment on attachment 155084
Patch for the EWS, not ready for review

Attachment 155084 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/13372755</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681303</commentid>
    <comment_count>23</comment_count>
      <attachid>155084</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-07-27 19:13:03 -0700</bug_when>
    <thetext>Comment on attachment 155084
Patch for the EWS, not ready for review

Attachment 155084 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/13381108</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681305</commentid>
    <comment_count>24</comment_count>
      <attachid>155084</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-07-27 19:57:31 -0700</bug_when>
    <thetext>Comment on attachment 155084
Patch for the EWS, not ready for review

Attachment 155084 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/13380489</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681381</commentid>
    <comment_count>25</comment_count>
      <attachid>155084</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-07-28 02:16:40 -0700</bug_when>
    <thetext>Comment on attachment 155084
Patch for the EWS, not ready for review

Attachment 155084 did not pass win-ews (win):
Output: http://queues.webkit.org/results/13368931</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681935</commentid>
    <comment_count>26</comment_count>
      <attachid>155275</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-07-30 06:00:02 -0700</bug_when>
    <thetext>Created attachment 155275
Patch for EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681954</commentid>
    <comment_count>27</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-30 06:19:47 -0700</bug_when>
    <thetext>Attachment 155275 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/API/JSCallbackObject...&quot; exit_code: 1
Tools/DumpRenderTree/win/AccessibilityControllerWin.cpp:319:  Use 0 instead of NULL.  [readability/null] [5]
Total errors found: 1 in 371 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681983</commentid>
    <comment_count>28</comment_count>
      <attachid>155275</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-07-30 06:59:57 -0700</bug_when>
    <thetext>Comment on attachment 155275
Patch for EWS

Attachment 155275 did not pass win-ews (win):
Output: http://queues.webkit.org/results/13392340</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682152</commentid>
    <comment_count>29</comment_count>
      <attachid>155275</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-30 10:31:54 -0700</bug_when>
    <thetext>Comment on attachment 155275
Patch for EWS

Attachment 155275 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/13396337</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682168</commentid>
    <comment_count>30</comment_count>
      <attachid>155317</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-07-30 10:42:40 -0700</bug_when>
    <thetext>Created attachment 155317
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682352</commentid>
    <comment_count>31</comment_count>
      <attachid>155317</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-07-30 13:58:08 -0700</bug_when>
    <thetext>Comment on attachment 155317
Patch

These are the mechanical changes only now, the most important thing to review is whether this API change for HashMap iterators is something we want or not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682384</commentid>
    <comment_count>32</comment_count>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-07-30 14:28:06 -0700</bug_when>
    <thetext>Maciej, ping?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702476</commentid>
    <comment_count>33</comment_count>
      <attachid>155317</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-08-22 15:50:27 -0700</bug_when>
    <thetext>Comment on attachment 155317
Patch

LGTM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702481</commentid>
    <comment_count>34</comment_count>
      <attachid>155317</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-22 15:53:14 -0700</bug_when>
    <thetext>Comment on attachment 155317
Patch

Rejecting attachment 155317 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
ndle.cpp
patching file Tools/TestWebKitAPI/Tests/WebKit2/DOMWindowExtensionNoCache_Bundle.cpp
patching file Tools/WebKitTestRunner/InjectedBundle/LayoutTestController.cpp
Hunk #1 FAILED at 452.
Hunk #2 FAILED at 467.
2 out of 2 hunks FAILED -- saving rejects to file Tools/WebKitTestRunner/InjectedBundle/LayoutTestController.cpp.rej

Failed to run &quot;[u&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/svn-apply&apos;, u&apos;--force&apos;, u&apos;--reviewer&apos;, u&apos;Eric Seidel&apos;]&quot; exit_code: 1 cwd: /mnt/git/webkit-commit-queue/

Full output: http://queues.webkit.org/results/13574146</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>705309</commentid>
    <comment_count>35</comment_count>
      <attachid>160729</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-08-27 08:57:31 -0700</bug_when>
    <thetext>Created attachment 160729
For EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>705311</commentid>
    <comment_count>36</comment_count>
      <attachid>160729</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-08-27 08:58:25 -0700</bug_when>
    <thetext>Comment on attachment 160729
For EWS

Rebased patch to trunk, double checking builds with EWSs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>705324</commentid>
    <comment_count>37</comment_count>
      <attachid>160729</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-08-27 09:36:16 -0700</bug_when>
    <thetext>Comment on attachment 160729
For EWS

Attachment 160729 did not pass win-ews (win):
Output: http://queues.webkit.org/results/13609407</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>705376</commentid>
    <comment_count>38</comment_count>
      <attachid>160729</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-08-27 10:31:05 -0700</bug_when>
    <thetext>Comment on attachment 160729
For EWS

Attachment 160729 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/13609416</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>705379</commentid>
    <comment_count>39</comment_count>
      <attachid>160729</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-08-27 10:35:13 -0700</bug_when>
    <thetext>Comment on attachment 160729
For EWS

Attachment 160729 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/13623096</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>705735</commentid>
    <comment_count>40</comment_count>
      <attachid>160821</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-08-27 15:13:03 -0700</bug_when>
    <thetext>Created attachment 160821
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>705839</commentid>
    <comment_count>41</comment_count>
      <attachid>160821</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-27 16:13:54 -0700</bug_when>
    <thetext>Comment on attachment 160821
Patch

Rejecting attachment 160821 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
commit-queue/Source/WebKit/chromium/third_party/v8-i18n --revision 117 --non-interactive --force --accept theirs-conflict --ignore-externals&apos; in &apos;/mnt/git/webkit-commit-queue/Source/WebKit/chromium&apos;
48&gt;At revision 117.

________ running &apos;/usr/bin/python tools/clang/scripts/update.py --mac-only&apos; in &apos;/mnt/git/webkit-commit-queue/Source/WebKit/chromium&apos;

________ running &apos;/usr/bin/python gyp_webkit&apos; in &apos;/mnt/git/webkit-commit-queue/Source/WebKit/chromium&apos;
Updating webkit projects from gyp files...

Full output: http://queues.webkit.org/results/13641065</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>705852</commentid>
    <comment_count>42</comment_count>
      <attachid>160850</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-08-27 16:22:11 -0700</bug_when>
    <thetext>Created attachment 160850
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>705856</commentid>
    <comment_count>43</comment_count>
      <attachid>160852</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-08-27 16:23:32 -0700</bug_when>
    <thetext>Created attachment 160852
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>705931</commentid>
    <comment_count>44</comment_count>
      <attachid>160852</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-27 17:46:10 -0700</bug_when>
    <thetext>Comment on attachment 160852
Patch for landing

Rejecting attachment 160852 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
/ChangeLog
Failed to merge in the changes.
Patch failed at 0001 Gardening: skipping tests due to WebCore::JSEventListener::jsFunction(WebCore::ScriptExecutionContext*) crashes.

When you have resolved this problem run &quot;git rebase --continue&quot;.
If you would prefer to skip this patch, instead run &quot;git rebase --skip&quot;.
To restore the original branch and stop rebasing run &quot;git rebase --abort&quot;.

rebase refs/remotes/origin/master: command returned error: 1

Died at Tools/Scripts/update-webkit line 164.

Full output: http://queues.webkit.org/results/13636116</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>705995</commentid>
    <comment_count>45</comment_count>
      <attachid>160852</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-27 19:14:06 -0700</bug_when>
    <thetext>Comment on attachment 160852
Patch for landing

Clearing flags on attachment: 160852

Committed r126836: &lt;http://trac.webkit.org/changeset/126836&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>705996</commentid>
    <comment_count>46</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-27 19:14:14 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>706001</commentid>
    <comment_count>47</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-27 19:30:01 -0700</bug_when>
    <thetext>Re-opened since this is blocked by 95163</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>706006</commentid>
    <comment_count>48</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-08-27 19:42:23 -0700</bug_when>
    <thetext>Looks like there are also many more hidden behind #ifdefs.

Please grep for -&gt;first, -&gt;second, ).first, ).second and check if they come from maps or pairs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>706009</commentid>
    <comment_count>49</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-08-27 19:47:35 -0700</bug_when>
    <thetext>Sorry, we should have let the EWS chew on it first.  My bad.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>706016</commentid>
    <comment_count>50</comment_count>
      <attachid>160852</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-08-27 19:58:58 -0700</bug_when>
    <thetext>Comment on attachment 160852
Patch for landing

Attachment 160852 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/13651040</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>706022</commentid>
    <comment_count>51</comment_count>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-08-27 20:09:17 -0700</bug_when>
    <thetext>This patch gets outdated too quickly, in this case a patch added code to JSC using first/second while CQ was processing it.

I&apos;ll land this manually tomorrow, and double check the potential cases behind development flags.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>706027</commentid>
    <comment_count>52</comment_count>
      <attachid>160852</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-08-27 20:34:50 -0700</bug_when>
    <thetext>Comment on attachment 160852
Patch for landing

Attachment 160852 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/13646189</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>706050</commentid>
    <comment_count>53</comment_count>
      <attachid>160852</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-08-27 21:30:16 -0700</bug_when>
    <thetext>Comment on attachment 160852
Patch for landing

Attachment 160852 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/13656027</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>706109</commentid>
    <comment_count>54</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-08-27 23:32:37 -0700</bug_when>
    <thetext>&gt; This patch gets outdated too quickly, in this case a patch added code to JSC using first/second while CQ was processing it.
&gt; 
&gt; I&apos;ll land this manually tomorrow, and double check the potential cases behind development flags.

You can ping me before your land. I&apos;ll help you if the patch breaks the Mac bots again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>706641</commentid>
    <comment_count>55</comment_count>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-08-28 12:42:43 -0700</bug_when>
    <thetext>Committed r126914: &lt;http://trac.webkit.org/changeset/126914&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>706675</commentid>
    <comment_count>56</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-08-28 13:28:26 -0700</bug_when>
    <thetext>How can this massive patch have been landed with zero justification described in the changelog and commit message?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>706677</commentid>
    <comment_count>57</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-28 13:28:40 -0700</bug_when>
    <thetext>Re-opened since this is blocked by 95239</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>720811</commentid>
    <comment_count>58</comment_count>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-09-14 08:50:16 -0700</bug_when>
    <thetext>For the record, there was a discussion in the mailing list after the rollout.

http://lists.webkit.org/pipermail/webkit-dev/2012-August/022095.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>721117</commentid>
    <comment_count>59</comment_count>
      <attachid>164222</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-09-14 14:09:41 -0700</bug_when>
    <thetext>Created attachment 164222
For EWS consumption</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>721120</commentid>
    <comment_count>60</comment_count>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-09-14 14:11:26 -0700</bug_when>
    <thetext>Chromium is expected to fail in this last patch since now there&apos;s code in chromium repo (outside WebKit) that uses WTF::HashMap.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>721142</commentid>
    <comment_count>61</comment_count>
      <attachid>164222</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-14 14:36:53 -0700</bug_when>
    <thetext>Comment on attachment 164222
For EWS consumption

Attachment 164222 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/13841908</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>721146</commentid>
    <comment_count>62</comment_count>
      <attachid>164222</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-09-14 14:43:11 -0700</bug_when>
    <thetext>Comment on attachment 164222
For EWS consumption

Attachment 164222 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/13845730</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>721195</commentid>
    <comment_count>63</comment_count>
      <attachid>164222</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-09-14 15:34:06 -0700</bug_when>
    <thetext>Comment on attachment 164222
For EWS consumption

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

&gt; Source/WTF/wtf/HashTraits.h:209
&gt; -        // TODO: Rename these to key and value. See https://bugs.webkit.org/show_bug.cgi?id=82784.
&gt; -        KeyTypeArg first;
&gt; -        ValueTypeArg second;
&gt; +        KeyTypeArg key;
&gt; +        ValueTypeArg value;

No luck with the fancy anonymous union stuff?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>721205</commentid>
    <comment_count>64</comment_count>
      <attachid>164222</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-09-14 15:44:13 -0700</bug_when>
    <thetext>Comment on attachment 164222
For EWS consumption

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

&gt;&gt; Source/WTF/wtf/HashTraits.h:209
&gt;&gt; +        ValueTypeArg value;
&gt; 
&gt; No luck with the fancy anonymous union stuff?

It works but requires C++11 feature called &quot;unrestricted unions&quot;. For Apple builds it is supported only in Clang &gt;= 3.1. Since they still use a previous version, the union solution wouldn&apos;t help.

The current plan is: Benjamin will help me probably next week to land this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>721216</commentid>
    <comment_count>65</comment_count>
      <attachid>164222</attachid>
    <who name="Peter Beverloo (cr-android ews)">peter+ews</who>
    <bug_when>2012-09-14 15:55:11 -0700</bug_when>
    <thetext>Comment on attachment 164222
For EWS consumption

Attachment 164222 did not pass cr-android-ews (chromium-android):
Output: http://queues.webkit.org/results/13841918</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>722363</commentid>
    <comment_count>66</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-09-17 16:27:38 -0700</bug_when>
    <thetext>(In reply to comment #60)
&gt; Chromium is expected to fail in this last patch since now there&apos;s code in chromium repo (outside WebKit) that uses WTF::HashMap.

If you add &quot;#define WTF_NEW_HASHMAP_ITERATORS_INTERFACE 1&quot; to your patch, Chromium should compile after http://codereview.chromium.org/10914327/ lands.

Once this lands, and that revision rolls into Chromium, I&apos;ll take care of removing the #define.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>724748</commentid>
    <comment_count>67</comment_count>
      <attachid>164965</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-09-20 12:18:49 -0700</bug_when>
    <thetext>Created attachment 164965
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>724780</commentid>
    <comment_count>68</comment_count>
      <attachid>164965</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-20 13:09:46 -0700</bug_when>
    <thetext>Comment on attachment 164965
Patch

Attachment 164965 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/13955297</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>724791</commentid>
    <comment_count>69</comment_count>
      <attachid>164965</attachid>
    <who name="Peter Beverloo (cr-android ews)">peter+ews</who>
    <bug_when>2012-09-20 13:21:20 -0700</bug_when>
    <thetext>Comment on attachment 164965
Patch

Attachment 164965 did not pass cr-android-ews (chromium-android):
Output: http://queues.webkit.org/results/13975025</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>724808</commentid>
    <comment_count>70</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-09-20 13:29:58 -0700</bug_when>
    <thetext>http://codereview.chromium.org/10914327/ has landed but hasn&apos;t rolled into WebKit yet, so this won&apos;t compile yet.  See Source/WebKit/chromium/DEPS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>726290</commentid>
    <comment_count>71</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-09-23 12:53:18 -0700</bug_when>
    <thetext>(In reply to comment #70)
&gt; http://codereview.chromium.org/10914327/ has landed but hasn&apos;t rolled into WebKit yet, so this won&apos;t compile yet.  See Source/WebKit/chromium/DEPS

I am considering fixing this on Apple side today.
Can the patch be landed as is without breaking the Google side of the Universe?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>726717</commentid>
    <comment_count>72</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-09-24 08:49:09 -0700</bug_when>
    <thetext>(In reply to comment #71)
&gt; (In reply to comment #70)
&gt; &gt; http://codereview.chromium.org/10914327/ has landed but hasn&apos;t rolled into WebKit yet, so this won&apos;t compile yet.  See Source/WebKit/chromium/DEPS
&gt; 
&gt; I am considering fixing this on Apple side today.
&gt; Can the patch be landed as is without breaking the Google side of the Universe?

The DEPS revision for Chromium has rolled past this change, so this patch should theoretically build cleanly on Chromium.

Please run it by the cr-linux EWS bot first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>726900</commentid>
    <comment_count>73</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-09-24 12:03:10 -0700</bug_when>
    <thetext>&gt; The DEPS revision for Chromium has rolled past this change, so this patch should theoretically build cleanly on Chromium.
&gt; 
&gt; Please run it by the cr-linux EWS bot first.

Next weekend I guess.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735966</commentid>
    <comment_count>74</comment_count>
      <attachid>167381</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-10-05 14:37:21 -0700</bug_when>
    <thetext>Created attachment 167381
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735975</commentid>
    <comment_count>75</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-05 14:41:28 -0700</bug_when>
    <thetext>Attachment 167381 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/API/JSCallbackObject...&quot; exit_code: 1
Source/WebCore/svg/graphics/filters/SVGFilterBuilder.h:70:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/dfg/DFGStructureCheckHoistingPhase.cpp:210:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebCore/page/SpeechInput.cpp:65:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Tools/DumpRenderTree/chromium/NotificationPresenter.cpp:92:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/inspector/InspectorMemoryAgent.cpp:238:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/inspector/InspectorMemoryAgent.cpp:249:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 6 in 400 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736034</commentid>
    <comment_count>76</comment_count>
      <attachid>167381</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-10-05 15:27:47 -0700</bug_when>
    <thetext>Comment on attachment 167381
Patch

Attachment 167381 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/14172896</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736414</commentid>
    <comment_count>77</comment_count>
      <attachid>167488</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-10-07 14:09:31 -0700</bug_when>
    <thetext>Created attachment 167488
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736420</commentid>
    <comment_count>78</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-07 14:24:15 -0700</bug_when>
    <thetext>Attachment 167488 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/API/JSCallbackObject...&quot; exit_code: 1
Source/WebCore/svg/graphics/filters/SVGFilterBuilder.h:70:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/dfg/DFGStructureCheckHoistingPhase.cpp:210:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebCore/page/SpeechInput.cpp:65:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Tools/DumpRenderTree/chromium/NotificationPresenter.cpp:92:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/inspector/InspectorMemoryAgent.cpp:238:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/inspector/InspectorMemoryAgent.cpp:249:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 6 in 401 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736443</commentid>
    <comment_count>79</comment_count>
      <attachid>167488</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-10-07 16:11:55 -0700</bug_when>
    <thetext>Comment on attachment 167488
Patch

Clearing flags on attachment: 167488

Committed r130612: &lt;http://trac.webkit.org/changeset/130612&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736444</commentid>
    <comment_count>80</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-10-07 16:12:09 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134905</attachid>
            <date>2012-03-30 15:56:27 -0700</date>
            <delta_ts>2012-04-02 09:02:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-82784-20120330195624.patch</filename>
            <type>text/plain</type>
            <size>614090</size>
            <attacher name="Caio Marcelo de Oliveira Filho">cmarcelo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyNzI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
NTM2NDdiNGM2YzlkODY1YjQ1M2ViNzY5MjQ5MWFjODE1ODY1MWQzLi40YjNiZTg3OWU1NzRhMjU4
ZDdmOWI1ZTM2YTJhODdiMTVlNzA4ODhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMTYgQEAKKzIwMTItMDMtMzAgIENhaW8gTWFyY2VsbyBkZSBPbGl2ZWlyYSBGaWxobyAg
PGNhaW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KKworICAgICAgICBJbXByb3ZlIGludGVyZmFj
ZSBvZiBIYXNoTWFwIGl0ZXJhdG9ycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9ODI3ODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBVcGRhdGUgY29kZSB0byBhY2Nlc3Mga2V5L3ZhbHVlIGluc3RlYWQgb2Yg
Zmlyc3Qvc2Vjb25kIHdoZW4gdXNpbmcgSGFzaE1hcCBpdGVyYXRvcnMuCisKKyAgICAgICAgKiBB
UEkvSlNDYWxsYmFja09iamVjdC5oOgorICAgICAgICAoSlNDOjpKU0NhbGxiYWNrT2JqZWN0RGF0
YTo6SlNQcml2YXRlUHJvcGVydHlNYXA6OmdldFByaXZhdGVQcm9wZXJ0eSk6CisgICAgICAgIChK
U0M6OkpTQ2FsbGJhY2tPYmplY3REYXRhOjpKU1ByaXZhdGVQcm9wZXJ0eU1hcDo6c2V0UHJpdmF0
ZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNDYWxsYmFja09iamVjdERhdGE6OkpTUHJpdmF0
ZVByb3BlcnR5TWFwOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBBUEkvSlNDYWxsYmFja09i
amVjdEZ1bmN0aW9ucy5oOgorICAgICAgICAoSlNDOjo6OmdldE93blByb3BlcnR5TmFtZXMpOgor
ICAgICAgICAqIEFQSS9KU0NsYXNzUmVmLmNwcDoKKyAgICAgICAgKE9wYXF1ZUpTQ2xhc3M6On5P
cGFxdWVKU0NsYXNzKToKKyAgICAgICAgKE9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YTo6T3BhcXVl
SlNDbGFzc0NvbnRleHREYXRhKToKKyAgICAgICAgKE9wYXF1ZUpTQ2xhc3M6OmNvbnRleHREYXRh
KToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OmR1bXApOgorICAgICAgICAoSlNDOjpFdmFsQ29kZUNhY2hlOjp2aXNpdEFnZ3JlZ2F0
ZSk6CisgICAgICAgICogYnl0ZWNvZGUvSnVtcFRhYmxlLmg6CisgICAgICAgIChKU0M6OlN0cmlu
Z0p1bXBUYWJsZTo6b2Zmc2V0Rm9yVmFsdWUpOgorICAgICAgICAoSlNDOjpTdHJpbmdKdW1wVGFi
bGU6OmN0aUZvclZhbHVlKToKKyAgICAgICAgKiBieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJv
ZmlsZS5jcHA6CisgICAgICAgIChKU0M6OkxhenlPcGVyYW5kVmFsdWVQcm9maWxlUGFyc2VyOjpn
ZXRJZlByZXNlbnQpOgorICAgICAgICAqIGJ5dGVjb2RlL1ByZWRpY3Rpb25UcmFja2VyLmg6Cisg
ICAgICAgIChKU0M6OlByZWRpY3Rpb25UcmFja2VyOjpwcmVkaWN0R2xvYmFsVmFyKToKKyAgICAg
ICAgKEpTQzo6UHJlZGljdGlvblRyYWNrZXI6OmdldEdsb2JhbFZhclByZWRpY3Rpb24pOgorICAg
ICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6
OkJ5dGVjb2RlR2VuZXJhdG9yOjphZGRWYXIpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVy
YXRvcjo6YWRkR2xvYmFsVmFyKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmFk
ZENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmFkZENvbnN0YW50
VmFsdWUpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdExvYWQpOgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6YWRkU3RyaW5nQ29uc3RhbnQpOgorICAgICAg
ICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdExhenlOZXdGdW5jdGlvbik6CisgICAgICAg
ICogYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHA6CisgICAgICAgIChKU0M6OlByb3BlcnR5
TGlzdE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgICogZGVidWdnZXIvRGVidWdnZXIuY3Bw
OgorICAgICAgICAqIGRmZy9ERkdBc3NlbWJseUhlbHBlcnMuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkFzc2VtYmx5SGVscGVyczo6ZGVjb2RlZENvZGVNYXBGb3IpOgorICAgICAgICAqIGRmZy9E
RkdCeXRlQ29kZUNhY2hlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVDYWNoZTo6fkJ5
dGVDb2RlQ2FjaGUpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlQ2FjaGU6OmdldCk6Cisg
ICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6Y2VsbENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29k
ZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lU3RhY2tFbnRyeSk6CisgICAgICAgICog
aGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6bWFya1Byb3RlY3RlZE9iamVjdHMp
OgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAgICAoSlNDOjpIZWFwOjpmb3JFYWNoUHJv
dGVjdGVkQ2VsbCk6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6
cHJpdmF0ZUNvbXBpbGUpOgorICAgICAgICAqIGppdC9KSVRTdHVicy5jcHA6CisgICAgICAgIChK
U0M6OkpJVFRodW5rczo6Y3RpU3R1Yik6CisgICAgICAgIChKU0M6OkpJVFRodW5rczo6aG9zdEZ1
bmN0aW9uU3R1Yik6CisgICAgICAgICogcGFyc2VyL1BhcnNlci5jcHA6CisgICAgICAgIChKU0M6
Ojo6cGFyc2VTdHJpY3RPYmplY3RMaXRlcmFsKToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxl
LmNwcDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uTmFtZUNvdW50RW50
cnlDb21wYXJhdG9yKToKKyAgICAgICAgKEpTQzo6UHJvZmlsZTo6ZGVidWdQcmludERhdGFTYW1w
bGVTdHlsZSk6CisgICAgICAgIFRoaXMgY29kZSBrZXB0IGEgdmVjdG9yIG9mIHRoZSBwYWlycyB0
aGF0IHdlcmUgdGhlICJjb250ZW50cyIgb2YgdGhlCisgICAgICAgIGl0ZXJhdG9ycy4gVGhpcyBp
cyBjaGFuZ2VkIHRvIHVzZSBhIEhhc2hNYXBFbnRyeS4gV2UgbWFrZSB1c2UgSGFzaENvdW50J3MK
KyAgICAgICAgVmFsdWVUeXBlICh3aGljaCByZXByZXNlbnRzIG9ubHkgdGhlIGtleSkgdG8gZ2V0
IHRoZSBwcm9wZXIga2V5IHBhcmFtZXRlciBmb3IKKyAgICAgICAgSGFzaE1hcEVudHJ5LgorCisg
ICAgICAgICogcnVudGltZS9JZGVudGlmaWVyLmNwcDoKKyAgICAgICAgKEpTQzo6SWRlbnRpZmll
cjo6YWRkKToKKyAgICAgICAgKiBydW50aW1lL0pTQWN0aXZhdGlvbi5jcHA6CisgICAgICAgIChK
U0M6OkpTQWN0aXZhdGlvbjo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6OkpT
QWN0aXZhdGlvbjo6c3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRlcyk6CisgICAgICAgICogcnVu
dGltZS9KU0FycmF5LmNwcDoKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6cHV0
KToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6cHV0RGlyZWN0KToKKyAgICAg
ICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChK
U0M6OkpTQXJyYXk6OmVudGVyRGljdGlvbmFyeU1vZGUpOgorICAgICAgICAoSlNDOjpKU0FycmF5
OjpkZWZpbmVPd25OdW1lcmljUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpnZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6Z2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6cHV0QnlJbmRleEJleW9u
ZFZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnB1dERpcmVjdEluZGV4QmV5
b25kVmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6ZGVsZXRlUHJvcGVydHlC
eUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6Z2V0T3duUHJvcGVydHlOYW1lcyk6Cisg
ICAgICAgIChKU0M6OkpTQXJyYXk6OnNldExlbmd0aCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6
OnNvcnQpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpjb21wYWN0Rm9yU29ydGluZyk6CisgICAg
ICAgIChKU0M6OkpTQXJyYXk6OmNoZWNrQ29uc2lzdGVuY3kpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNWYXJpYWJsZU9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTVmFyaWFibGVPYmplY3Q6Omdl
dE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5o
OgorICAgICAgICAoSlNDOjpKU1ZhcmlhYmxlT2JqZWN0OjpzeW1ib2xUYWJsZVB1dFdpdGhBdHRy
aWJ1dGVzKToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cENhY2hlLmNwcDoKKyAgICAgICAgKEpT
Qzo6UmVnRXhwQ2FjaGU6Omxvb2t1cE9yQ3JlYXRlKToKKyAgICAgICAgKEpTQzo6UmVnRXhwQ2Fj
aGU6OmludmFsaWRhdGVDb2RlKToKKyAgICAgICAgKiBydW50aW1lL1dlYWtHQ01hcC5oOgorICAg
ICAgICAoSlNDOjpXZWFrR0NNYXA6Oml0ZXJhdG9yOjpnZXQpOgorICAgICAgICAoSlNDOjpXZWFr
R0NNYXA6OmNsZWFyKToKKyAgICAgICAgKEpTQzo6V2Vha0dDTWFwOjpyZW1vdmUpOgorICAgICAg
ICAoSlNDOjpXZWFrR0NNYXA6OmFkZCk6CisgICAgICAgIChKU0M6OldlYWtHQ01hcDo6c2V0KToK
KyAgICAgICAgKiB0b29scy9Qcm9maWxlVHJlZU5vZGUuaDoKKyAgICAgICAgKFByb2ZpbGVUcmVl
Tm9kZSk6CisgICAgICAgIChKU0M6OlByb2ZpbGVUcmVlTm9kZTo6c2FtcGxlQ2hpbGQpOgorICAg
ICAgICAoSlNDOjpQcm9maWxlVHJlZU5vZGU6OmNoaWxkQ291bnQpOgorICAgICAgICAoSlNDOjpQ
cm9maWxlVHJlZU5vZGU6OmR1bXBJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OlByb2ZpbGVUcmVl
Tm9kZTo6Y29tcGFyZUVudHJpZXMpOgorICAgICAgICBNYXBFbnRyeSBpcyBzdXBwb3NlZCB0byBi
ZSBkZWZpbmVkIGFzIHRoZSBWYWx1ZVR5cGUgb2YgdGhlIEhhc2hNYXAgKHR5cGUKKyAgICAgICAg
ImNvbnRlbnRzIiBvZiBpdGVyYXRvcnMsIGluIHRoaXMgY2FzZSkuIENoYW5nZSB0aGUgY29kZSB0
byBtYWtlIHVzZSBvZgorICAgICAgICBIYXNoTWFwOjpWYWx1ZVR5cGUgZGlyZWN0bHksIHdoaWNo
IG5vdyBpcyBhIEhhc2hNYXBFbnRyeSB0eXBlLgorCiAyMDEyLTAzLTMwICBEYXZpZCBCYXJyICA8
ZGF2aWRiYXJyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBTcGxpdCB1cCB0b3AtbGV2ZWwgLmdp
dGlnbm9yZSBhbmQgLmdpdGF0dHJpYnV0ZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdl
TG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggZmQ0OGY3NWIzNGZhNDE0MjE3ZGM1MGYw
MzRkZjE5MTU4NjI0NDQxZC4uOTdjMjU4MjI5ZGJkNmFiMzllMWIzZmFiNDAzZTBjNjNiMzZiZTEy
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw3MyBAQAorMjAxMi0wMy0zMCAgQ2FpbyBNYXJjZWxvIGRlIE9saXZl
aXJhIEZpbGhvICA8Y2Fpby5vbGl2ZWlyYUBvcGVuYm9zc2Eub3JnPgorCisgICAgICAgIEltcHJv
dmUgaW50ZXJmYWNlIG9mIEhhc2hNYXAgaXRlcmF0b3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Mjc4NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEluIEhhc2hNYXAgd2UgY2hhbmdlIHRoZSBWYWx1ZVR5
cGUgZnJvbSBzdGQ6OnBhaXIgdG8gYSBuZXcgc3BlY2lhbGl6ZWQgc3RydWN0CisgICAgICAgIEhh
c2hNYXBFbnRyeS4gVGhlIGJhc2ljIGRpZmZlcmVuY2UgaXMgdGhhdCB0aGUgbWVtYmVycyBhcmUg
Y2FsbGVkICdrZXknIGFuZAorICAgICAgICAndmFsdWUnIGluc3RlYWQgb2YgJ2ZpcnN0JyBhbmQg
J3NlY29uZCcuIEFsc28gYWRkIHRoZSBhcHByb3ByaWF0ZWQgSGFzaFRyYWl0cy4KKyAgICAgICAg
SW4gSGFzaE1hcCB0aGUgVmFsdWVUeXBlIHNlcnZlIGFzICJjb250ZW50cyIgb2YgdGhlIGl0ZXJh
dG9ycy4KKworICAgICAgICBUaGUgcmVzdCBvZiB0aGUgcGF0Y2ggaXMganVzdCBjaGFuZ2luZyB0
aGUgY2FsbHNpdGVzIHRvIHVzZSB0aGUgbmV3IG5hbWVzLiBOb3RlCisgICAgICAgIHRoYXQgSGFz
aENvdW50ZWRTZXQgZXhwb3NlcyBIYXNoTWFwIGl0ZXJhdG9ycyBhcyB0aGVpciBvd24sIHNvIEhh
c2hDb3VudGVkU2V0CisgICAgICAgIGludGVyZmFjZSBpcyBhbHNvIGNoYW5nZWQuCisKKyAgICAg
ICAgKiB3dGYvSGFzaENvdW50ZWRTZXQuaDoKKyAgICAgICAgKFdURjo6OjphZGQpOgorICAgICAg
ICAoV1RGOjo6OnJlbW92ZSk6CisgICAgICAgIChXVEY6OmNvcHlUb1ZlY3Rvcik6CisgICAgICAg
ICogd3RmL0hhc2hJdGVyYXRvcnMuaDoKKyAgICAgICAgKEhhc2hUYWJsZUNvbnN0S2V5c0l0ZXJh
dG9yKToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlQ29uc3RLZXlzSXRlcmF0b3I6OmdldCk6Cisg
ICAgICAgIChIYXNoVGFibGVDb25zdFZhbHVlc0l0ZXJhdG9yKToKKyAgICAgICAgKFdURjo6SGFz
aFRhYmxlQ29uc3RWYWx1ZXNJdGVyYXRvcjo6Z2V0KToKKyAgICAgICAgKEhhc2hUYWJsZUtleXNJ
dGVyYXRvcik6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZUtleXNJdGVyYXRvcjo6Z2V0KToKKyAg
ICAgICAgKEhhc2hUYWJsZVZhbHVlc0l0ZXJhdG9yKToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxl
VmFsdWVzSXRlcmF0b3I6OmdldCk6CisgICAgICAgICogd3RmL0hhc2hNYXAuaDoKKyAgICAgICAg
KFdURjo6SGFzaE1hcEVudHJ5S2V5RXh0cmFjdG9yOjpleHRyYWN0KToKKyAgICAgICAgKFdURik6
CisgICAgICAgIChIYXNoTWFwKToKKyAgICAgICAgKFdURjo6SGFzaE1hcFRyYW5zbGF0b3I6OnRy
YW5zbGF0ZSk6CisgICAgICAgIChXVEY6Okhhc2hNYXBUcmFuc2xhdG9yQWRhcHRlcjo6dHJhbnNs
YXRlKToKKyAgICAgICAgKFdURjo6OjpzZXQpOgorICAgICAgICAoV1RGOjo6OmdldCk6CisgICAg
ICAgIChXVEY6Ojo6dGFrZSk6CisgICAgICAgIChXVEY6Om9wZXJhdG9yPT0pOgorICAgICAgICAo
V1RGOjpkZWxldGVBbGxQYWlyU2Vjb25kcyk6CisgICAgICAgIChXVEY6OmRlbGV0ZUFsbFBhaXJG
aXJzdHMpOgorICAgICAgICAqIHd0Zi9IYXNoVGFibGUuaDoKKyAgICAgICAgKFdURjo6aGFzaFRh
YmxlU3dhcCk6CisgICAgICAgIChXVEYpOgorICAgICAgICAoV1RGOjo6OmNoZWNrVGFibGVDb25z
aXN0ZW5jeUV4Y2VwdFNpemUpOgorICAgICAgICAqIHd0Zi9IYXNoVHJhaXRzLmg6CisgICAgICAg
IChIYXNoTWFwRW50cnkpOgorICAgICAgICAoV1RGOjpIYXNoTWFwRW50cnk6Okhhc2hNYXBFbnRy
eSk6CisgICAgICAgIChXVEYpOgorICAgICAgICAoSGFzaE1hcEVudHJ5VHJhaXRzKToKKyAgICAg
ICAgKFdURjo6SGFzaE1hcEVudHJ5VHJhaXRzOjplbXB0eVZhbHVlKToKKyAgICAgICAgKFdURjo6
SGFzaE1hcEVudHJ5VHJhaXRzOjpjb25zdHJ1Y3REZWxldGVkVmFsdWUpOgorICAgICAgICAoV1RG
OjpIYXNoTWFwRW50cnlUcmFpdHM6OmlzRGVsZXRlZFZhbHVlKToKKyAgICAgICAgKiB3dGYvTWV0
YUFsbG9jYXRvci5jcHA6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmFkZEZyZWVTcGFj
ZSk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmluY3JlbWVudFBhZ2VPY2N1cGFuY3kp
OgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjpkZWNyZW1lbnRQYWdlT2NjdXBhbmN5KToK
KyAgICAgICAgKiB3dGYvUmVmQ291bnRlZExlYWtDb3VudGVyLmNwcDoKKyAgICAgICAgKFdURjo6
UmVmQ291bnRlZExlYWtDb3VudGVyOjp+UmVmQ291bnRlZExlYWtDb3VudGVyKToKKyAgICAgICAg
KiB3dGYvUmVmUHRySGFzaE1hcC5oOgorICAgICAgICAoV1RGOjo6OnNldCk6CisgICAgICAgIChX
VEY6Ojo6Z2V0KToKKyAgICAgICAgKFdURjo6OjppbmxpbmVHZXQpOgorICAgICAgICAoV1RGOjo6
OnRha2UpOgorICAgICAgICAqIHd0Zi9TcGVjdHJ1bS5oOgorICAgICAgICAoV1RGOjpTcGVjdHJ1
bTo6YWRkKToKKyAgICAgICAgKFdURjo6U3BlY3RydW06OmJ1aWxkTGlzdCk6CisgICAgICAgICog
d3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcDoKKyAgICAgICAgKFdURjo6aWRlbnRpZmllckJ5UHRo
cmVhZEhhbmRsZSk6CisKIDIwMTItMDMtMzAgIERhdmlkIEJhcnIgIDxkYXZpZGJhcnJAY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFNwbGl0IHVwIHRvcC1sZXZlbCAuZ2l0aWdub3JlIGFuZCAuZ2l0
YXR0cmlidXRlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGM0MGJlNTZjNDNiMTdkMDc1ZGU4ODNhZWNiMTI0OGM4
ZjExNGQ2MzYuLmExY2M3ODZhM2Y2Mjg4NDQ2NTY5YjMxNDg0MjBjNmI2NmJkZDlkYmYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw3NzUgQEAKKzIwMTItMDMtMzAgIENhaW8gTWFyY2VsbyBkZSBPbGl2
ZWlyYSBGaWxobyAgPGNhaW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KKworICAgICAgICBJbXBy
b3ZlIGludGVyZmFjZSBvZiBIYXNoTWFwIGl0ZXJhdG9ycworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI3ODQKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGUgY29kZSB0byBhY2Nlc3Mga2V5L3ZhbHVl
IGluc3RlYWQgb2YgZmlyc3Qvc2Vjb25kIHdoZW4gdXNpbmcgSGFzaE1hcCBpdGVyYXRvcnMuCisg
ICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gZnVuY3Rpb25hbGl0eSBjaGFuZ2UgaW50ZW5kZWQuCisK
KyAgICAgICAgKiBNb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Okdlb2xvY2F0aW9uOjpXYXRjaGVyczo6ZmluZCk6CisgICAgICAgIChXZWJDb3Jl
OjpHZW9sb2NhdGlvbjo6V2F0Y2hlcnM6OnJlbW92ZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRl
eGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJE
YXRhYmFzZUJhY2tlbmRJbXBsOjpvYmplY3RTdG9yZU5hbWVzKToKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SURCRmFjdG9yeUJhY2tlbmRJbXBsOjpkZWxldGVEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW5CYWNraW5nU3RvcmUpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuSW50ZXJuYWwpOgorICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklE
Qk9iamVjdFN0b3JlOjppbmRleCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjppbmRleE5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OnB1dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjpwdXRJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpkZWxldGVJbnRlcm5hbCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvSURCVHJhbnNhY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246
Om9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpkaXNwYXRj
aEV2ZW50KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0Fic3RyYWN0RGF0YWJhc2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6cGVyZm9ybU9wZW5BbmRW
ZXJpZnkpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6aW50ZXJydXB0QWxsRGF0YWJh
c2VzRm9yQ29udGV4dCk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9PcmlnaW5Vc2Fn
ZVJlY29yZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpPcmlnaW5Vc2FnZVJlY29yZDo6ZGlza1Vz
YWdlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQ29vcmRp
bmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6
YWNxdWlyZUxvY2spOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25Db29yZGluYXRv
cjo6cmVsZWFzZUxvY2spOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25Db29yZGlu
YXRvcjo6c2h1dGRvd24pOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvY2hyb21pdW0v
RGF0YWJhc2VUcmFja2VyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VU
cmFja2VyOjppbnRlcnJ1cHRBbGxEYXRhYmFzZXNGb3JDb250ZXh0KToKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL1F1b3RhVHJhY2tlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpRdW90YVRyYWNrZXI6OmdldERhdGFiYXNlU2l6ZUFuZFNwYWNlQXZhaWxhYmxlVG9Pcmln
aW4pOgorICAgICAgICAoV2ViQ29yZTo6UXVvdGFUcmFja2VyOjp1cGRhdGVEYXRhYmFzZVNpemUp
OgorICAgICAgICAqIE1vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXREZWZsYXRlRnJhbWVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldEV4dGVuc2lvbkRlZmxhdGVGcmFtZTo6cHJv
Y2Vzc1Jlc3BvbnNlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0RXh0
ZW5zaW9uRGlzcGF0Y2hlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRFeHRlbnNp
b25EaXNwYXRjaGVyOjphcHBlbmRBY2NlcHRlZEV4dGVuc2lvbik6CisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2Fj
aGU6On5BWE9iamVjdENhY2hlKToKKyAgICAgICAgKiBiaW5kaW5ncy9nb2JqZWN0L0RPTU9iamVj
dENhY2hlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmNsZWFyQnlGcmFt
ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvRE9NT2JqZWN0SGFzaFRhYmxlTWFwLmg6CisgICAg
ICAgIChXZWJDb3JlOjpET01PYmplY3RIYXNoVGFibGVNYXA6On5ET01PYmplY3RIYXNoVGFibGVN
YXApOgorICAgICAgICAoV2ViQ29yZTo6RE9NT2JqZWN0SGFzaFRhYmxlTWFwOjpnZXQpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0RPTVdyYXBwZXJXb3JsZC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpKU1N0cmluZ093bmVyOjpmaW5hbGl6ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01C
aW5kaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNhY2hlRE9NU3RydWN0dXJlKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaDoKKyAgICAgICAgKFdlYkNvcmU6OnVuY2Fj
aGVXcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzU3RyaW5nKToKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTUds
b2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01H
bG9iYWxPYmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OmdldERPTUNvbnN0cnVjdG9yKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UGFnZVNjcmlwdERlYnVnU2VydmVyOjphZGRMaXN0ZW5lcik6CisgICAgICAgIChX
ZWJDb3JlOjpQYWdlU2NyaXB0RGVidWdTZXJ2ZXI6OnJlbW92ZUxpc3RlbmVyKToKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9TY3JpcHRDYWNoZWRGcmFtZURhdGEuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U2NyaXB0Q2FjaGVkRnJhbWVEYXRhOjpTY3JpcHRDYWNoZWRGcmFtZURhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6U2NyaXB0Q2FjaGVkRnJhbWVEYXRhOjpyZXN0b3JlKToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlw
dENvbnRyb2xsZXI6On5TY3JpcHRDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlw
dENvbnRyb2xsZXI6OmNsZWFyV2luZG93U2hlbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0
Q29udHJvbGxlcjo6YXR0YWNoRGVidWdnZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29u
dHJvbGxlcjo6dXBkYXRlRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJv
bGxlcjo6Y3JlYXRlUm9vdE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9s
bGVyOjpjbGVhbnVwU2NyaXB0T2JqZWN0c0ZvclBsdWdpbik6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JpcHRDb250cm9sbGVyOjpjbGVhclNjcmlwdE9iamVjdHMpOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL1NjcmlwdENvbnRyb2xsZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xs
ZXI6OndpbmRvd1NoZWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmV4
aXN0aW5nV2luZG93U2hlbGwpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2Vy
dmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpzZXRCcmVha3Bv
aW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpyZW1vdmVCcmVha3Bv
aW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpoYXNCcmVha3BvaW50
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q2xvbmVTZXJpYWxpemVyOjpzdGFydE9iamVjdEludGVybmFsKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNsb25lU2VyaWFsaXplcjo6ZHVtcElmVGVybWluYWwpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2xvbmVTZXJpYWxpemVyOjp3cml0ZSk6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06CisgICAgICAgIChHZW5lcmF0ZUltcGxlbWVudGF0
aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhGbG9hdDY0QXJyYXku
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhGbG9hdDY0QXJyYXk6OkdldFJhd1RlbXBsYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlY4RmxvYXQ2NEFycmF5OjpHZXRUZW1wbGF0ZSk6CisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEFjdGl2ZURPTU9iamVjdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpWOFRlc3RBY3RpdmVET01PYmplY3Q6OkdldFJhd1RlbXBsYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdEFjdGl2ZURPTU9iamVjdDo6R2V0VGVtcGxhdGUpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RDdXN0b21OYW1lZEdldHRl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RDdXN0b21OYW1lZEdldHRlcjo6R2V0UmF3
VGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI6Okdl
dFRlbXBsYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZl
bnRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RFdmVudENvbnN0cnVj
dG9yOjpHZXRSYXdUZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RFdmVudENvbnN0
cnVjdG9yOjpHZXRUZW1wbGF0ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4
L1Y4VGVzdEV2ZW50VGFyZ2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdEV2ZW50VGFy
Z2V0OjpHZXRSYXdUZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RFdmVudFRhcmdl
dDo6R2V0VGVtcGxhdGUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3RJbnRlcmZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0SW50ZXJmYWNlOjpHZXRS
YXdUZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RJbnRlcmZhY2U6OkdldFRlbXBs
YXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TWVkaWFRdWVy
eUxpc3RMaXN0ZW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RNZWRpYVF1ZXJ5TGlz
dExpc3RlbmVyOjpHZXRSYXdUZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RNZWRp
YVF1ZXJ5TGlzdExpc3RlbmVyOjpHZXRUZW1wbGF0ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Y4L1Y4VGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6VjhUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6R2V0UmF3VGVtcGxhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6VjhUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6R2V0VGVtcGxhdGUpOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VjhUZXN0T2JqOjpHZXRSYXdUZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RPYmo6
OkdldFRlbXBsYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6R2V0UmF3VGVtcGxhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6VjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpHZXRU
ZW1wbGF0ZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvTlBWOE9iamVjdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpmcmVlVjhOUE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpucENyZWF0ZVY4
U2NyaXB0T2JqZWN0KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmNsZWFyU2NyaXB0T2JqZWN0
cyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpjbGVhbnVwU2NyaXB0T2Jq
ZWN0c0ZvclBsdWdpbik6CisgICAgICAgICogYmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZh
bHVlLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOERPTU1hcC5oOgorICAgICAgICAoV2Vi
Q29yZTo6V2Vha1JlZmVyZW5jZU1hcDo6cmVtb3ZlSWZQcmVzZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OldlYWtSZWZlcmVuY2VNYXA6OnZpc2l0KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOERP
TVdpbmRvd1NoZWxsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV2luZG93U2hlbGw6OmRp
c3Bvc2VDb250ZXh0SGFuZGxlcyk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xs
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZW51bWVyYXRlR2xvYmFsSGFuZGxlcyk6CisgICAg
ICAgICogYmluZGluZ3MvdjgvVjhQcm94eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOFByb3h5
OjpldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCk6CisgICAgICAgIChXZWJDb3JlOjpWOFByb3h5Ojpz
ZXRJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6VjhQcm94
eTo6cmVzZXRJc29sYXRlZFdvcmxkcyk6CisgICAgICAgICogYmluZGluZ3MvdjgvbnBydW50aW1l
LmNwcDoKKyAgICAgICAgKiBicmlkZ2UvSWRlbnRpZmllclJlcC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJZGVudGlmaWVyUmVwOjpnZXQpOgorICAgICAgICAqIGJyaWRnZS9OUF9qc29iamVjdC5j
cHA6CisgICAgICAgIChPYmplY3RNYXA6OmFkZCk6CisgICAgICAgIChPYmplY3RNYXA6OnJlbW92
ZSk6CisgICAgICAgICogYnJpZGdlL2puaS9qc2MvSmF2YUNsYXNzSlNDLmNwcDoKKyAgICAgICAg
KEphdmFDbGFzczo6fkphdmFDbGFzcyk6CisgICAgICAgICogYnJpZGdlL3J1bnRpbWVfcm9vdC5j
cHA6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpSb290T2JqZWN0OjppbnZhbGlkYXRlKToKKyAg
ICAgICAgKiBjc3MvQ1NTQ2FudmFzVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2Fu
dmFzVmFsdWU6OmNhbnZhc0NoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FudmFzVmFs
dWU6OmNhbnZhc1Jlc2l6ZWQpOgorICAgICAgICAqIGNzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFy
YXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y291bnRlclRvQ1NTVmFsdWUpOgorICAgICAg
ICAqIGNzcy9DU1NDcm9zc2ZhZGVWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NDcm9z
c2ZhZGVWYWx1ZTo6Y3Jvc3NmYWRlQ2hhbmdlZCk6CisgICAgICAgICogY3NzL0NTU0ZvbnRGYWNl
U291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlU291cmNlOjpnZXRGb250
RGF0YSk6CisgICAgICAgICogY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDU1NGb250U2VsZWN0b3I6OmFkZEZvbnRGYWNlUnVsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NGb250U2VsZWN0b3I6OmdldEZvbnREYXRhKToKKyAgICAgICAgKiBjc3MvQ1NTSW1hZ2VH
ZW5lcmF0b3JWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NJbWFnZUdlbmVyYXRvclZh
bHVlOjphZGRDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1
ZTo6cmVtb3ZlQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ltYWdlR2VuZXJhdG9yVmFs
dWU6OmdldEltYWdlKToKKyAgICAgICAgKiBjc3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTU2VnbWVudGVkRm9udEZhY2U6OmdldEZvbnREYXRhKToKKyAg
ICAgICAgKiBjc3MvQ1NTU2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU2VsZWN0
b3I6OnBhcnNlUHNldWRvVHlwZSk6CisgICAgICAgICogY3NzL0NTU1N0eWxlQXBwbHlQcm9wZXJ0
eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Q291bnRlcjo6YXBwbHlJbmhl
cml0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUNvdW50ZXI6OmFwcGx5
VmFsdWUpOgorICAgICAgICAqIGNzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmNvbGxlY3RGZWF0dXJlcyk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpydWxlU2V0Rm9yU2NvcGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6YXBwZW5kQXV0aG9yU3R5bGVzaGVldHMpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6c3dlZXBNYXRjaGVkUHJvcGVydGllc0NhY2hlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmNvbGxlY3RNYXRjaGluZ1J1bGVz
Rm9yTGlzdCk6CisgICAgICAgICogY3NzL0NTU1ZhbHVlUG9vbC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDU1NWYWx1ZVBvb2w6OmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NWYWx1ZVBvb2w6OmNyZWF0ZUNvbG9yVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTVmFsdWVQb29sOjpjcmVhdGVWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NWYWx1ZVBv
b2w6OmNyZWF0ZUZvbnRGYW1pbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NWYWx1ZVBv
b2w6OmNyZWF0ZUZvbnRGYWNlVmFsdWUpOgorICAgICAgICAqIGNzcy9TdHlsZVByb3BlcnR5U2V0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUHJvcGVydHlTZXQ6OlN0eWxlUHJvcGVydHlT
ZXQpOgorICAgICAgICAqIGRvbS9DaGVja2VkUmFkaW9CdXR0b25zLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNoZWNrZWRSYWRpb0J1dHRvbnM6OmFkZEJ1dHRvbik6CisgICAgICAgIChXZWJDb3Jl
OjpDaGVja2VkUmFkaW9CdXR0b25zOjpyZW1vdmVCdXR0b24pOgorICAgICAgICAqIGRvbS9DaGls
ZExpc3RNdXRhdGlvblNjb3BlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdE11dGF0
aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVyOjpjaGlsZEFkZGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0aW9u
Um91dGVyOjp3aWxsUmVtb3ZlQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6Q2hpbGRMaXN0TXV0
YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXI6OmluY3JlbWVudFNjb3BpbmdM
ZXZlbCk6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlv
bkFjY3VtdWxhdGlvblJvdXRlcjo6ZGVjcmVtZW50U2NvcGluZ0xldmVsKToKKyAgICAgICAgKiBk
b20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnBhZ2VHcm91cFVz
ZXJTaGVldHMpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OndpbmRvd05hbWVkSXRlbXMp
OgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmRvY3VtZW50TmFtZWRJdGVtcyk6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2V0U3RhdGVGb3JOZXdGb3JtRWxlbWVudHMpOgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnRha2VTdGF0ZUZvckZvcm1FbGVtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRvY3VtZW50OjpnZXRDU1NDYW52YXNFbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50OjpnZXRJdGVtcyk6CisgICAgICAgICogZG9tL0RvY3VtZW50TWFya2Vy
Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXI6Om1hcmtlckNvbnRhaW5pbmdQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1h
cmtlckNvbnRyb2xsZXI6OnJlbmRlcmVkUmVjdHNGb3JNYXJrZXJzKToKKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVtb3ZlTWFya2Vycyk6CisgICAgICAgIChX
ZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlcGFpbnRNYXJrZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6aW52YWxpZGF0ZVJlbmRlcmVk
UmVjdHNGb3JNYXJrZXJzSW5SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2Vy
Q29udHJvbGxlcjo6c2hvd01hcmtlcnMpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudE9yZGVyZWRN
YXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRPcmRlcmVkTWFwOjpyZW1vdmUpOgor
ICAgICAgICAqIGRvbS9FdmVudExpc3RlbmVyTWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2
ZW50TGlzdGVuZXJNYXA6OmV2ZW50VHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRMaXN0
ZW5lck1hcDo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50TGlzdGVuZXJNYXA6OnJlbW92
ZSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudExpc3RlbmVyTWFwOjpmaW5kKToKKyAgICAgICAg
KFdlYkNvcmU6OkV2ZW50TGlzdGVuZXJNYXA6OnJlbW92ZUZpcnN0RXZlbnRMaXN0ZW5lckNyZWF0
ZWRGcm9tTWFya3VwKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50TGlzdGVuZXJNYXA6OmNvcHlF
dmVudExpc3RlbmVyc05vdENyZWF0ZWRGcm9tTWFya3VwVG9UYXJnZXQpOgorICAgICAgICAoV2Vi
Q29yZTo6RXZlbnRMaXN0ZW5lckl0ZXJhdG9yOjpuZXh0TGlzdGVuZXIpOgorICAgICAgICAqIGRv
bS9NdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpN
dXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cDo6aXNPbGRWYWx1ZVJlcXVlc3RlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpNdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cDo6ZW5xdWV1ZU11dGF0
aW9uUmVjb3JkKToKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpO
b2RlOjpkdW1wU3RhdGlzdGljcyk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpjbGVhclJhcmVE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmdldEVsZW1lbnRzQnlUYWdOYW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok5vZGU6OmdldEVsZW1lbnRzQnlUYWdOYW1lTlMpOgorICAgICAgICAo
V2ViQ29yZTo6Tm9kZTo6Z2V0RWxlbWVudHNCeU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Tm9k
ZTo6Z2V0RWxlbWVudHNCeUNsYXNzTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlTGlzdHNO
b2RlRGF0YTo6aW52YWxpZGF0ZUNhY2hlcyk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlTGlzdHNO
b2RlRGF0YTo6aW52YWxpZGF0ZUNhY2hlc1RoYXREZXBlbmRPbkF0dHJpYnV0ZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6Tm9kZTo6Y29sbGVjdE1hdGNoaW5nT2JzZXJ2ZXJzRm9yTXV0YXRpb24pOgor
ICAgICAgICAqIGRvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UHJvY2Vzc2luZ0luc3RydWN0aW9uOjpjaGVja1N0eWxlU2hlZXQpOgorICAgICAgICAqIGRv
bS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQ6OmNhblN1c3BlbmRBY3RpdmVET01PYmplY3RzKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnN1c3BlbmRBY3RpdmVET01PYmplY3RzKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnJlc3VtZUFjdGl2ZURP
TU9iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6c3Rv
cEFjdGl2ZURPTU9iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29u
dGV4dDo6YWRqdXN0TWluaW11bVRpbWVySW50ZXJ2YWwpOgorICAgICAgICAqIGRvbS9TcGFjZVNw
bGl0U3RyaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNwYWNlU3BsaXRTdHJpbmdEYXRhOjpj
cmVhdGUpOgorICAgICAgICAqIGRvbS9TdHlsZWRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlZEVsZW1lbnQ6OnVwZGF0ZUF0dHJpYnV0ZVN0eWxlKToKKyAgICAgICAgKiBodG1s
L0hUTUxDb2xsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uOjph
cHBlbmQpOgorICAgICAgICAqIGluc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5Ogor
ICAgICAgICAqIGluc3BlY3Rvci9ET01QYXRjaFN1cHBvcnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RE9NUGF0Y2hTdXBwb3J0OjpkaWZmKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVBhdGNoU3Vw
cG9ydDo6aW5uZXJQYXRjaENoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVBhdGNoU3Vw
cG9ydDo6cmVtb3ZlQ2hpbGRBbmRNb3ZlVG9OZXcpOgorICAgICAgICAqIGluc3BlY3Rvci9Jbmpl
Y3RlZFNjcmlwdE1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyOjpkaXNjYXJkSW5qZWN0ZWRTY3JpcHRzKToKKyAgICAgICAgKFdlYkNvcmU6OkluamVj
dGVkU2NyaXB0TWFuYWdlcjo6ZGlzY2FyZEluamVjdGVkU2NyaXB0c0Zvcik6CisgICAgICAgIChX
ZWJDb3JlOjpJbmplY3RlZFNjcmlwdE1hbmFnZXI6OnJlbGVhc2VPYmplY3RHcm91cCk6CisgICAg
ICAgICogaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckFnZW50OjplbmFibGUpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDU1NB
Z2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvclByb2ZpbGU6OmNvbW1pdFNlbGVj
dG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yUHJvZmlsZTo6Y29tbWl0U2VsZWN0b3JU
aW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yUHJvZmlsZTo6dG9JbnNwZWN0b3JPYmpl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OmFzSW5zcGVjdG9yU3R5
bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6YXNzZXJ0U3R5
bGVTaGVldEZvcklkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpkaWRS
ZW1vdmVET01Ob2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpkaWRN
b2RpZnlET01BdHRyKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29uc29sZUFnZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnNvbGVBZ2VudDo6c3RvcFRpbWlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmNvdW50KToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yRE9NQWdlbnQ6Om5vZGVGb3JJZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JET01BZ2VudDo6cGVyZm9ybVNlYXJjaCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JET01BZ2VudDo6Z2V0U2VhcmNoUmVzdWx0cyk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3Bl
Y3RvckRPTURlYnVnZ2VyQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9N
RGVidWdnZXJBZ2VudDo6d2lsbFNlbmRYTUxIdHRwUmVxdWVzdCk6CisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JET01TdG9yYWdlQWdlbnQ6OmNsZWFyRnJvbnRlbmQpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjplbmFibGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yRE9NU3RvcmFnZUFnZW50OjpzdG9yYWdlSWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yRE9NU3RvcmFnZUFnZW50OjpnZXRET01TdG9yYWdlUmVzb3VyY2VGb3JJZCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmRpZFVzZURPTVN0b3JhZ2Up
OgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmVuYWJsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjpkYXRhYmFzZUlkKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmZpbmRCeUZpbGVOYW1lKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmRhdGFiYXNlRm9ySWQpOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnRCeVVybCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZW1vdmVCcmVha3BvaW50KToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnJlc29sdmVCcmVha3BvaW50
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNlYXJjaEluQ29u
dGVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpnZXRTY3Jp
cHRTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlk
UGFyc2VTb3VyY2UpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JNZW1vcnlBZ2VudC5j
cHA6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpjYWNoZWRSZXNvdXJjZXNGb3JGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JQYWdlQWdlbnQ6OmRpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6OmZyYW1lRGV0YWNoZWQpOgorICAgICAgICAq
IGluc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmdldFByb2ZpbGVIZWFkZXJzKToKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6Z2V0UHJv
ZmlsZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6YnVpbGRPYmplY3RGb3JIZWFkZXJzKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvclJlc291cmNlQWdlbnQ6OndpbGxTZW5kUmVxdWVzdCk6CisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
clN0YXRlOjpnZXRCb29sZWFuKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0YXRlOjpn
ZXRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3RhdGU6OmdldExvbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3RhdGU6OmdldE9iamVjdCk6CisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yU3R5bGU6OnN0eWxlV2l0aFByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yU3R5bGVTaGVldDo6aW5zcGVjdG9yU3R5bGVGb3JJZCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JTdHlsZVNoZWV0OjplbnN1cmVTb3VyY2VEYXRhKToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck9i
amVjdDo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck9iamVjdDo6d3JpdGVKU09O
KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yV29ya2VyQWdlbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yV29ya2VyQWdlbnQ6OndvcmtlckNvbnRleHRUZXJtaW5hdGVk
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvcldvcmtlckFnZW50OjpjcmVhdGVXb3JrZXJG
cm9udGVuZENoYW5uZWxzRm9yRXhpc3RpbmdXb3JrZXJzKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvcldvcmtlckFnZW50OjpkZXN0cm95V29ya2VyRnJvbnRlbmRDaGFubmVscyk6CisgICAg
ICAgICogaW5zcGVjdG9yL05ldHdvcmtSZXNvdXJjZXNEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Ok5ldHdvcmtSZXNvdXJjZXNEYXRhOjpjbGVhcik6CisgICAgICAgICogbG9hZGVyL0Nyb3Nz
T3JpZ2luQWNjZXNzQ29udHJvbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc1NpbXBsZUNyb3Nz
T3JpZ2luQWNjZXNzUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVBY2Nlc3NDb250
cm9sUHJlZmxpZ2h0UmVxdWVzdCk6CisgICAgICAgICogbG9hZGVyL0Nyb3NzT3JpZ2luUHJlZmxp
Z2h0UmVzdWx0Q2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3Jvc3NPcmlnaW5QcmVmbGln
aHRSZXN1bHRDYWNoZUl0ZW06OmFsbG93c0Nyb3NzT3JpZ2luSGVhZGVycyk6CisgICAgICAgIChX
ZWJDb3JlOjpDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlOjpjYW5Ta2lwUHJlZmxpZ2h0
KToKKyAgICAgICAgKiBsb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnRMb2FkZXI6OmdldFN1YnJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudExvYWRlcjo6c3Vic3RpdHV0ZVJlc291cmNlRGVsaXZlcnlUaW1lckZpcmVkKToKKyAg
ICAgICAgKiBsb2FkZXIvTWFpblJlc291cmNlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Ok1haW5SZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKiBsb2Fk
ZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNl
TG9hZFNjaGVkdWxlcjo6c2VydmVQZW5kaW5nUmVxdWVzdHMpOgorICAgICAgICAqIGxvYWRlci9T
dWJmcmFtZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdWJmcmFtZUxvYWRlcjo6Y3Jl
YXRlSmF2YUFwcGxldFdpZGdldCk6CisgICAgICAgICogbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0
aW9uQ2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZTo6cmVtb3Zl
UmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZTo6Y2xlYXJTdG9y
YWdlSUQpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZTo6ZHVtcCk6CisgICAg
ICAgICogbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVHcm91cC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmRpZEZpbmlzaExvYWRpbmdNYW5pZmVz
dCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OnN0YXJ0TG9hZGlu
Z0VudHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6YWRkRW50
cnkpOgorICAgICAgICAqIGxvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlSG9zdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlSG9zdDo6ZmlsbFJlc291cmNlTGlz
dCk6CisgICAgICAgICogbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OmVzdGltYXRl
ZFNpemVJblN0b3JhZ2UpOgorICAgICAgICAqIGxvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNh
Y2hlU3RvcmFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFn
ZTo6ZmluZE9yQ3JlYXRlQ2FjaGVHcm91cCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlv
bkNhY2hlU3RvcmFnZTo6Y2FjaGVHcm91cEZvclVSTCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBs
aWNhdGlvbkNhY2hlU3RvcmFnZTo6ZmFsbGJhY2tDYWNoZUdyb3VwRm9yVVJMKToKKyAgICAgICAg
KFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZSk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZW1wdHkpOgorICAgICAgICAoV2ViQ29yZTo6
QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlQ29weU9mQ2FjaGUpOgorICAgICAgICAqIGxv
YWRlci9hcmNoaXZlL0FyY2hpdmVGYWN0b3J5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFyY2hp
dmVGYWN0b3J5OjpyZWdpc3Rlcktub3duQXJjaGl2ZU1JTUVUeXBlcyk6CisgICAgICAgICogbG9h
ZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hl
ZFJhd1Jlc291cmNlOjpjYW5SZXVzZSk6CisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFJl
c291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlOjpzd2l0Y2hDbGll
bnRzVG9SZXZhbGlkYXRlZFJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291
cmNlOjp1cGRhdGVSZXNwb25zZUFmdGVyUmV2YWxpZGF0aW9uKToKKyAgICAgICAgKiBsb2FkZXIv
Y2FjaGUvQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNh
Y2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyOjpDYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlcik6Cisg
ICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNhY2hlZFJlc291cmNlTG9hZGVyOjp+Q2FjaGVkUmVzb3VyY2VMb2FkZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RSZXNvdXJjZSk6
CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZUxvYWRlcjo6c2V0QXV0b0xvYWRJbWFn
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlbW92ZUNhY2hl
ZFJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlTG9hZGVyOjpnYXJi
YWdlQ29sbGVjdERvY3VtZW50UmVzb3VyY2VzVGltZXJGaXJlZCk6CisgICAgICAgICogbG9hZGVy
L2NhY2hlL01lbW9yeUNhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lbW9yeUNhY2hlOjpy
ZW1vdmVSZXNvdXJjZXNXaXRoT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lbW9yeUNhY2hl
OjpnZXRPcmlnaW5zV2l0aENhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lbW9yeUNhY2hlOjpn
ZXRTdGF0aXN0aWNzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lbW9yeUNhY2hlOjpzZXREaXNhYmxl
ZCk6CisgICAgICAgICogbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Okljb25EYXRhYmFzZTo6cmVtb3ZlQWxsSWNvbnMpOgorICAgICAgICAoV2ViQ29yZTo6
SWNvbkRhdGFiYXNlOjppY29uUmVjb3JkQ291bnRXaXRoRGF0YSk6CisgICAgICAgICogcGFnZS9E
T01XaW5kb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93OjpkaXNwYXRjaEFsbFBl
bmRpbmdCZWZvcmVVbmxvYWRFdmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93Ojpk
aXNwYXRjaEFsbFBlbmRpbmdVbmxvYWRFdmVudHMpOgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5k
bGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlVG91Y2hFdmVu
dCk6CisgICAgICAgICogcGFnZS9GcmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6
aW5qZWN0VXNlclNjcmlwdHMpOgorICAgICAgICAqIHBhZ2UvUGFnZUdyb3VwLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlBhZ2VHcm91cDo6cGFnZUdyb3VwKToKKyAgICAgICAgKFdlYkNvcmU6OlBh
Z2VHcm91cDo6Y2xvc2VMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUdyb3Vw
OjpjbGVhckxvY2FsU3RvcmFnZUZvckFsbE9yaWdpbnMpOgorICAgICAgICAoV2ViQ29yZTo6UGFn
ZUdyb3VwOjpjbGVhckxvY2FsU3RvcmFnZUZvck9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpQ
YWdlR3JvdXA6OnN5bmNMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUdyb3Vw
OjphZGRVc2VyU2NyaXB0VG9Xb3JsZCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlR3JvdXA6OmFk
ZFVzZXJTdHlsZVNoZWV0VG9Xb3JsZCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlR3JvdXA6OnJl
bW92ZVVzZXJTY3JpcHRGcm9tV29ybGQpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUdyb3VwOjpy
ZW1vdmVVc2VyU3R5bGVTaGVldEZyb21Xb3JsZCk6CisgICAgICAgICogcGFnZS9QYWdlU2VyaWFs
aXplci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlU2VyaWFsaXplcjo6dXJsRm9yQmxhbmtG
cmFtZSk6CisgICAgICAgICogcGFnZS9TZWN1cml0eVBvbGljeS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTZWN1cml0eVBvbGljeTo6YWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkpOgorICAg
ICAgICAoV2ViQ29yZTo6U2VjdXJpdHlQb2xpY3k6OnJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlz
dEVudHJ5KToKKyAgICAgICAgKiBwYWdlL1NldHRpbmdzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OnNldEdlbmVyaWNGb250RmFtaWx5TWFwKToKKyAgICAgICAgKFdlYkNvcmU6OmdldEdlbmVyaWNG
b250RmFtaWx5Rm9yU2NyaXB0KToKKyAgICAgICAgKiBwYWdlL1NwZWVjaElucHV0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNwZWVjaElucHV0OjpyZWdpc3Rlckxpc3RlbmVyKToKKyAgICAgICAg
KiBwYWdlL1dpbmRvd0ZlYXR1cmVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldpbmRvd0ZlYXR1
cmVzOjpib29sRmVhdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpXaW5kb3dGZWF0dXJlczo6Zmxv
YXRGZWF0dXJlKToKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjp1cGRh
dGVBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkNvbnRyb2xsZXJQcml2
YXRlOjpzdXNwZW5kQW5pbWF0aW9uc0ZvckRvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkFu
aW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpyZXN1bWVBbmltYXRpb25zRm9yRG9jdW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6Om51bWJlck9mQWN0
aXZlQW5pbWF0aW9ucyk6CisgICAgICAgICogcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0
aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlvbjo6Y2xlYXJSZW5k
ZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb246OnVwZGF0ZVRyYW5z
aXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlS2V5
ZnJhbWVBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlvbjo6
YW5pbWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb246OmdldEFuaW1h
dGVkU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjpzZXRBbmlt
YXRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjp0aW1lVG9OZXh0
U2VydmljZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb246OmdldEFuaW1h
dGlvbkZvclByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlvbjo6
c3VzcGVuZEFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9u
OjpyZXN1bWVBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlv
bjo6b3ZlcnJpZGVJbXBsaWNpdEFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9z
aXRlQW5pbWF0aW9uOjpyZXN1bWVPdmVycmlkZGVuSW1wbGljaXRBbmltYXRpb25zKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlvbjo6aXNBbmltYXRpbmdQcm9wZXJ0eSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb246Om51bWJlck9mQWN0aXZlQW5pbWF0
aW9ucyk6CisgICAgICAgICogcGxhdGZvcm0vTGFuZ3VhZ2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6bGFuZ3VhZ2VEaWRDaGFuZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL0hSVEZFbGV2
YXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0Q29uY2F0ZW5hdGVkSW1wdWxzZVJlc3Bv
bnNlc0ZvclN1YmplY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2JsYWNrYmVycnkvQ29va2llTWFu
YWdlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVNYW5hZ2VyOjpnZW5lcmF0ZUh0bWxG
cmFnbWVudEZvckNvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llTWFuYWdlcjo6cmVt
b3ZlQWxsQ29va2llcyk6CisgICAgICAgICogcGxhdGZvcm0vYmxhY2tiZXJyeS9Db29raWVNYXAu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llTWFwOjpyZW1vdmVPbGRlc3RDb29raWUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29va2llTWFwOjpnZXRBbGxDaGlsZENvb2tpZXMpOgorICAgICAg
ICAqIHBsYXRmb3JtL2NmL0JpbmFyeVByb3BlcnR5TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpCaW5hcnlQcm9wZXJ0eUxpc3RQbGFuOjp3cml0ZUludGVnZXJBcnJheSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRD
YWNoZTo6Z2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250
Q2FjaGU6OmdldENhY2hlZEZvbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6
cmVsZWFzZUZvbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6cHVyZ2VJbmFj
dGl2ZUZvbnREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2VUcmVl
Tm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaFBhZ2VUcmVlTm9kZTo6dHJlZUdseXBo
UGFnZUNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoUGFnZVRyZWVOb2RlOjpwYWdlQ291
bnQpOgorICAgICAgICAoV2ViQ29yZTo6R2x5cGhQYWdlVHJlZU5vZGU6OnBydW5lVHJlZUN1c3Rv
bUZvbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoUGFnZVRyZWVOb2RlOjpwcnVuZVRy
ZWVGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaFBhZ2VUcmVlTm9kZTo6cHJ1bmVD
dXN0b21Gb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaFBhZ2VUcmVlTm9kZTo6cHJ1
bmVGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaFBhZ2VUcmVlTm9kZTo6c2hvd1N1
YnRyZWUpOgorICAgICAgICAoc2hvd0dseXBoUGFnZVRyZWVzKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUaWxl
ZEJhY2tpbmdTdG9yZTo6dXBkYXRlVGlsZUJ1ZmZlcnMpOgorICAgICAgICAoV2ViQ29yZTo6VGls
ZWRCYWNraW5nU3RvcmU6OnJlc2l6ZUVkZ2VUaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpUaWxl
ZEJhY2tpbmdTdG9yZTo6c2V0S2VlcFJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2F2Zm91bmRhdGlvbi9jZi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25DRi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpBVkZXcmFwcGVyOjphdmZXcmFwcGVyRm9yQ2FsbGJhY2tDb250ZXh0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyVGlsZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlcjo6dXBsb2FkVGV4dHVyZXNJZk5lZWRlZCk6
CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyOjphZGRUaWxlSm9iKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyVGlsZXI6OmJpbmRDb250ZW50c1RleHR1cmUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0xheWVyQ0E6Om1vdmVPckNvcHlBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJDQTo6cGF1c2VBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllckNBOjpsYXllckRpZERpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NMYXllckNBOjp1cGRhdGVHZW9tZXRyeSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xh
eWVyQ0E6OnVwZGF0ZVRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVy
Q0E6OnVwZGF0ZUNoaWxkcmVuVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXJDQTo6dXBkYXRlTWFza3NUb0JvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0xheWVyQ0E6OnVwZGF0ZUNvbnRlbnRzVmlzaWJpbGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0xheWVyQ0E6OnVwZGF0ZUNvbnRlbnRzT3BhcXVlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlQmFja2ZhY2VWaXNpYmlsaXR5KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlRmlsdGVycyk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0xheWVyQ0E6OmVuc3VyZVN0cnVjdHVyYWxMYXllcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUxheWVyRHJhd3NDb250ZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlQ29udGVudHNJbWFnZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUNvbnRlbnRzUmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZU1hc2tMYXllcik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUxheWVyQW5pbWF0aW9ucyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnNldEFuaW1hdGlvbk9uTGF5ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjpyZW1vdmVDQUFuaW1hdGlvbkZyb21MYXllcik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnBhdXNlQ0FBbmltYXRpb25Pbkxh
eWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6c3VzcGVuZEFuaW1hdGlv
bnMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjpyZXN1bWVBbmltYXRpb25z
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6ZmluZE9yTWFrZUNsb25lKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6c2V0T3BhY2l0eUludGVybmFsKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlT3BhY2l0eU9uTGF5ZXIp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9UaWxlQ2FjaGUubW06CisgICAg
ICAgIChXZWJDb3JlOjpUaWxlQ2FjaGU6OnNldFNjYWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlRp
bGVDYWNoZTo6c2V0QWNjZWxlcmF0ZXNEcmF3aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVD
YWNoZTo6c2V0VGlsZURlYnVnQm9yZGVyV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZUNh
Y2hlOjpzZXRUaWxlRGVidWdCb3JkZXJDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpUaWxlQ2Fj
aGU6OnJldmFsaWRhdGVUaWxlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2lu
L1BsYXRmb3JtQ0FMYXllcldpbi5jcHA6CisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXI6OmFuaW1h
dGlvblN0YXJ0ZWQpOgorICAgICAgICAocmVzdWJtaXRBbGxBbmltYXRpb25zKToKKyAgICAgICAg
KFBsYXRmb3JtQ0FMYXllcjo6YW5pbWF0aW9uRm9yS2V5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9Gb250Q2FjaGVDaHJvbWl1bVdpbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpMb29rdXBBbHROYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OmZvbnRDb250YWluc0NoYXJh
Y3Rlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFV0aWxzQ2hy
b21pdW1XaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0RGVyaXZlZEZvbnREYXRhKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjptYXBBbmltYXRp
b25OYW1lVG9JZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVy
ZU1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hbmFnZXI6OnJlbGVhc2VU
b2tlbik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFuYWdlcjo6dW5wcm90ZWN0VGV4dHVy
ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFuYWdlcjo6dW5wcm90ZWN0QWxsVGV4dHVy
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hbmFnZXI6OmFsbG9jYXRlVGV4dHVyZSk6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFuYWdlcjo6cmVxdWVzdFRleHR1cmUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8p
OgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjpzZXRMYXllclRyZWVIb3N0
KToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6aW52YWxpZGF0ZVJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjpyZXNldFVwZGF0ZVN0YXRl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RhbWFnZVRyYWNr
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NEYW1hZ2VUcmFja2VyOjp0cmFja0RhbWFnZUZy
b21MZWZ0b3ZlclJlY3RzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVGlsaW5nRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVGlsaW5n
RGF0YTo6c2V0Qm91bmRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0
OjpzdGFydFJhdGVMaW1pdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6
c3RvcFJhdGVMaW1pdGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1
c3RvbUZpbHRlclByb2dyYW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRmlsdGVyUHJv
Z3JhbTo6bm90aWZ5Q2xpZW50cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dM
Q29udGV4dEd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHTENvbnRleHQ6OmdldENvbnRleHRG
b3JXaWRnZXQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6
U2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRDYWNoZWRIYXJmYnV6ekZhY2UpOgorICAg
ICAgICAoV2ViQ29yZTo6cmVsZWFzZUNhY2hlZEhhcmZidXp6RmFjZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckFUU1VJLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmluaXRpYWxpemVBVFNVU3R5bGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL21hYy9TaW1wbGVGb250RGF0YUNvcmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNpbXBsZUZvbnREYXRhOjpnZXRDRlN0cmluZ0F0dHJpYnV0ZXMpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6
OlNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybURlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6U2lt
cGxlRm9udERhdGE6OmNhblJlbmRlckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21t
b24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNvbXBpbGVTaGFk
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlcml2KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJJbmZvTG9nKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJTb3VyY2UpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9u
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJBbmltYXRpb25zOjpoYXNBY3Rp
dmVBbmltYXRpb25zT2ZUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJBbmlt
YXRpb25zOjpoYXNSdW5uaW5nQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyQW5pbWF0aW9uczo6cGF1c2UpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBl
ckFuaW1hdGlvbnM6OmFwcGx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlckdMLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTERh
dGE6OlNoYXJlZEdMRGF0YTo6Y3VycmVudFNoYXJlZEdMRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFyZWRHTERhdGE6On5TaGFyZWRHTERhdGEpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
ci5oOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OmdldFNo
YWRlclByb2dyYW0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRQbGF0
Zm9ybURhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rml4ZWRTaXplRm9udERhdGE6OmNyZWF0
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL0RhdGFPYmplY3RHdGsuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RGF0YU9iamVjdEd0azo6Zm9yQ2xpcGJvYXJkKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ndGsvR3RrRHJhZ0FuZERyb3BIZWxwZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3RrRHJh
Z0FuZERyb3BIZWxwZXI6OmhhbmRsZUdldERyYWdEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Okd0
a0RyYWdBbmREcm9wSGVscGVyOjpoYW5kbGVEcmFnTGVhdmUpOgorICAgICAgICAoV2ViQ29yZTo6
R3RrRHJhZ0FuZERyb3BIZWxwZXI6OmhhbmRsZURyYWdNb3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6R3RrRHJhZ0FuZERyb3BIZWxwZXI6OmhhbmRsZURyYWdEYXRhUmVjZWl2ZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3RrRHJhZ0FuZERyb3BIZWxwZXI6OmhhbmRsZURyYWdEcm9wKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGszLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Omd0a1N0eWxlQ2hhbmdlZENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OmdldFN0eWxlQ29u
dGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFsU3RvcmFnZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDcmVkZW50aWFsU3RvcmFnZTo6c2V0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNyZWRlbnRpYWxTdG9yYWdlOjpnZXQpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdv
cmsvSFRUUEhlYWRlck1hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVFRQSGVhZGVyTWFwOjpj
b3B5RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpIVFRQSGVhZGVyTWFwOjpnZXQpOgorICAgICAg
ICAqIHBsYXRmb3JtL25ldHdvcmsvTUlNRUhlYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpN
SU1FSGVhZGVyOjpwYXJzZUhlYWRlcik6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNv
dXJjZUhhbmRsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6Y3JlYXRl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6YWRkSFRUUEhlYWRlckZpZWxk
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OmFkZEhUVFBIZWFkZXJG
aWVsZHMpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9OZXR3b3JrSm9i
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtKb2I6Om5vdGlmeUhlYWRlcnNSZWNlaXZl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrSm9iOjpoYW5kbGVOb3RpZnlNdWx0aXBhcnRI
ZWFkZXJSZWNlaXZlZCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jl
c291cmNlUmVxdWVzdEJsYWNrQmVycnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0Ojppbml0aWFsaXplUGxhdGZvcm1SZXF1ZXN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9u
ZXR3b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZOZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bWFr
ZUZpbmFsUmVxdWVzdCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZVJl
cXVlc3RDRk5ldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRIZWFkZXJGaWVsZHMpOgorICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1hbmFnZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjppbml0aWFsaXplSGFuZGxl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZVJlcXVlc3RNYWMubW06
CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q6OmRvVXBkYXRlUGxhdGZvcm1SZXF1
ZXN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3F0L1Jlc291cmNlUmVxdWVzdFF0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdDo6dG9OZXR3b3JrUmVxdWVzdCk6
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVzdFNvdXAuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Ojp1cGRhdGVTb3VwTWVzc2FnZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q6OnRvU291cE1lc3NhZ2UpOgorICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlc3BvbnNlU291cC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlOjp0b1NvdXBNZXNzYWdlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3dpbi9SZXNvdXJjZUhhbmRsZVdpbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6c3RhcnQpOgorICAgICAgICAqIHBsYXRmb3JtL3F0
L1J1bkxvb3BRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSdW5Mb29wOjpUaW1lckJhc2U6OnRp
bWVyRmlyZWQpOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvTG9jYWxlVG9TY3JpcHRNYXBwaW5n
RGVmYXVsdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzY3JpcHROYW1lVG9Db2RlKToKKyAgICAg
ICAgKFdlYkNvcmU6OmxvY2FsZVRvU2NyaXB0Q29kZUZvckZvbnRTZWxlY3Rpb24pOgorICAgICAg
ICAqIHBsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnkuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6cHJ1bmVCbGFja2xpc3RlZENvZGVjcyk6CisgICAgICAgIChXZWJDb3JlOjpkdW1wVGV4
dEVuY29kaW5nTmFtZU1hcCk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC90cmFuc2NvZGVyL0Zv
bnRUcmFuc2NvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRUcmFuc2NvZGVyOjpjb252
ZXJ0ZXJUeXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L3dpbmNlL1RleHRDb2RlY1dpbkNF
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okxhbmd1YWdlTWFuYWdlcjo6TGFuZ3VhZ2VNYW5hZ2Vy
KToKKyAgICAgICAgKFdlYkNvcmU6OmdldENvZGVQYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHRDb2RlY1dpbkNFOjpyZWdpc3RlckV4dGVuZGVkRW5jb2RpbmdOYW1lcyk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0Q29kZWNXaW5DRTo6cmVnaXN0ZXJFeHRlbmRlZENvZGVjcyk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0Q29kZWNXaW5DRTo6ZW51bWVyYXRlU3VwcG9ydGVkRW5jb2RpbmdzKToK
KyAgICAgICAgKiBwbGF0Zm9ybS93aW4vQ2xpcGJvYXJkVXRpbGl0aWVzV2luLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmdldERhdGFNYXBJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OmdldENsaXBi
b2FyZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6c2V0Q2xpcGJvYXJkRGF0YSk6CisgICAgICAg
ICogcGxhdGZvcm0vd2luL0ZpbGVTeXN0ZW1XaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2Fj
aGVkU3RvcmFnZURpcmVjdG9yeSk6CisgICAgICAgICogcGxhdGZvcm0vd2luL1J1bkxvb3BXaW4u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UnVuTG9vcDo6VGltZXJCYXNlOjp0aW1lckZpcmVkKToK
KyAgICAgICAgKiBwbGF0Zm9ybS93aW4vV0NEYXRhT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OldDRGF0YU9iamVjdDo6Y3JlYXRlSW5zdGFuY2UpOgorICAgICAgICAqIHBsYXRmb3JtL3dp
bmNlL01JTUVUeXBlUmVnaXN0cnlXaW5DRS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNSU1FVHlw
ZVJlZ2lzdHJ5OjpnZXRQcmVmZXJyZWRFeHRlbnNpb25Gb3JNSU1FVHlwZSk6CisgICAgICAgICog
cGxhdGZvcm0vd3gvQ29udGV4dE1lbnVXeC5jcHA6CisgICAgICAgIChDb250ZXh0TWVudTo6YXBw
ZW5kSXRlbSk6CisgICAgICAgICogcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6cmVmcmVzaCk6CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5EYXRhYmFzZTo6TUlNRVR5cGVGb3JFeHRlbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6
UGx1Z2luRGF0YWJhc2U6OnJlbW92ZSk6CisgICAgICAgICogcGx1Z2lucy9QbHVnaW5NYWluVGhy
ZWFkU2NoZWR1bGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbk1haW5UaHJlYWRTY2hl
ZHVsZXI6OnNjaGVkdWxlQ2FsbCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5NYWluVGhyZWFk
U2NoZWR1bGVyOjpkaXNwYXRjaENhbGxzKToKKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpblN0cmVh
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5TdHJlYW06OnN0YXJ0U3RyZWFtKToKKyAg
ICAgICAgKiBwbHVnaW5zL2JsYWNrYmVycnkvUGx1Z2luRGF0YUJsYWNrQmVycnkuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YTo6aW5pdFBsdWdpbnMpOgorICAgICAgICAqIHBsdWdp
bnMvZWZsL1BsdWdpbkRhdGFFZmwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YTo6
aW5pdFBsdWdpbnMpOgorICAgICAgICAqIHBsdWdpbnMvd3gvUGx1Z2luRGF0YVd4LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGE6OmluaXRQbHVnaW5zKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvSW5saW5lRmxvd0JveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVGbG93Qm94
OjpyZXF1aXJlc0lkZW9ncmFwaGljQmFzZWxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5l
Rmxvd0JveDo6YWRkVGV4dEJveFZpc3VhbE92ZXJmbG93KToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmNsZWFyRmxv
YXRzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnNldExvZ2ljYWxXaWR0aEZvclRleHRSdW4pOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpjYWNo
ZWRTaXplRm9yT3ZlcmZsb3dDbGlwKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9k
ZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VRdWFsaXR5Q29udHJvbGxlcjo6
aGlnaFF1YWxpdHlSZXBhaW50VGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVF1
YWxpdHlDb250cm9sbGVyOjpzaG91bGRQYWludEF0TG93UXVhbGl0eSk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQ291bnRl
cjo6ZGVzdHJveUNvdW50ZXJOb2Rlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJDb3VudGVy
OjpkZXN0cm95Q291bnRlck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6dXBkYXRlQ291bnRlcnMp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQ291bnRlcjo6cmVuZGVyZXJTdHlsZUNoYW5nZWQp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OnNldFJlZ2lvblJhbmdlRm9yQm94KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OmdldFJlZ2lvblJhbmdlRm9yQm94KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXI6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OnBlcmZvcm1PdmVybGFwVGVzdHMpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTmFtZWRGbG93VGhyZWFkOjpkZXBlbmRzT24pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTmFtZWRGbG93VGhyZWFkOjpwdXNoRGVwZW5kZW5jaWVzKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJl
Z2lvbjo6c2V0UmVnaW9uQm94ZXNSZWdpb25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJSZWdpb246OnJlc3RvcmVSZWdpb25Cb3hlc09yaWdpbmFsU3R5bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyUmVnaW9uOjpzZXRSZW5kZXJCb3hSZWdpb25JbmZvKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclJlZ2lvbjo6cmVuZGVyQm94UmVnaW9uU3R5bGUpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGFibGVTZWN0aW9uOjpjYWNoZWRDb2xsYXBzZWRCb3JkZXIpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJUaGVtZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpz
eXN0ZW1Db2xvcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6c2VsZWN0aW9uQm91bmRzKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclZpZXc6OnNldFNlbGVjdGlvbik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
cldpZGdldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJXaWRnZXQ6OnJlc3VtZVdpZGdl
dEhpZXJhcmNoeVVwZGF0ZXMpOgorICAgICAgICAqIHJlbmRlcmluZy9Sb290SW5saW5lQm94LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJvb3RJbmxpbmVCb3g6OmFzY2VudEFuZERlc2NlbnRGb3JC
b3gpOgorICAgICAgICAqIHJlbmRlcmluZy9WZXJ0aWNhbFBvc2l0aW9uQ2FjaGUuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlZlcnRpY2FsUG9zaXRpb25DYWNoZTo6Z2V0KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU1ZHSW5saW5lVGV4dDo6Y2hhcmFjdGVyU3RhcnRzTmV3VGV4dENodW5rKToKKyAgICAgICAg
KiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2Vk
KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudDo6YXBwbHlSZXNv
dXJjZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuOjphcHBseVJl
c291cmNlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlc0NhY2hlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1Jlc291cmNlc0NhY2hlOjpyZXNvdXJjZURlc3Ryb3llZCk6
CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSb290SW5saW5lQm94LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OnN3YXBJdGVtc0luTGF5b3V0QXR0cmlidXRlcyk6CisgICAgICAgICogcmVuZGVy
aW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRlcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdUZXh0TGF5b3V0QXR0cmlidXRlczo6ZHVtcCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9T
VkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
VGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyOjpidWlsZExheW91dEF0dHJpYnV0ZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyOjpmaWxsQ2hhcmFj
dGVyRGF0YU1hcCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5l
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRMYXlvdXRFbmdpbmU6OmxheW91dFRleHRP
bkxpbmVPclBhdGgpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3NCdWls
ZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRNZXRyaWNzQnVpbGRlcjo6bWVhc3Vy
ZVRleHRSZW5kZXJlcik6CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFTeW5jOjpzeW5jVGltZXJGaXJlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYVN5bmM6OnBlcmZvcm1JbXBvcnQpOgorICAgICAgICAo
V2ViQ29yZTo6U3RvcmFnZUFyZWFTeW5jOjpzeW5jKToKKyAgICAgICAgKiBzdG9yYWdlL1N0b3Jh
Z2VNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU1hcDo6a2V5KToKKyAgICAgICAg
KFdlYkNvcmU6OlN0b3JhZ2VNYXA6OnNldEl0ZW0pOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFn
ZU5hbWVzcGFjZUltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU5hbWVzcGFjZUlt
cGw6OmxvY2FsU3RvcmFnZU5hbWVzcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlTmFt
ZXNwYWNlSW1wbDo6Y29weSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNlSW1w
bDo6Y2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU5hbWVzcGFjZUltcGw6OmNsZWFy
QWxsT3JpZ2luc0ZvckRlbGV0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VOYW1lc3Bh
Y2VJbXBsOjpzeW5jKToKKyAgICAgICAgKiBzdmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlQW5pbWF0aW9u
RWxlbWVudEZyb21UYXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRG9jdW1lbnRFeHRlbnNp
b25zOjphZGRQZW5kaW5nUmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRG9jdW1lbnRF
eHRlbnNpb25zOjppc0VsZW1lbnRQZW5kaW5nUmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlRWxlbWVudEZyb21QZW5kaW5nUmVzb3VyY2Vz
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0RvY3VtZW50RXh0ZW5zaW9uczo6c2V0T2ZFbGVtZW50
c1JlZmVyZW5jaW5nVGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0RvY3VtZW50RXh0ZW5z
aW9uczo6cmVtb3ZlQWxsVGFyZ2V0UmVmZXJlbmNlc0ZvckVsZW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZW1vdmVBbGxFbGVtZW50UmVmZXJlbmNlc0Zv
clRhcmdldCk6CisgICAgICAgICogc3ZnL1NWR0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHRWxlbWVudDo6flNWR0VsZW1lbnQpOgorICAgICAgICAqIHN2Zy9hbmltYXRpb24vU01J
TFRpbWVDb250YWluZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWVDb250YWluZXI6
OmJhc2VWYWx1ZUZvcik6CisgICAgICAgIChXZWJDb3JlOjpTTUlMVGltZUNvbnRhaW5lcjo6dXBk
YXRlQW5pbWF0aW9ucyk6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR0ltYWdlQ2FjaGUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2VDYWNoZTo6flNWR0ltYWdlQ2FjaGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2VDYWNoZTo6cmVtb3ZlUmVuZGVyZXJGcm9tQ2FjaGUpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2VDYWNoZTo6cmVxdWVzdGVkU2l6ZUFuZFpvb20pOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2VDYWNoZTo6aW1hZ2VDb250ZW50Q2hhbmdlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZUNhY2hlOjpyZWRyYXcpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHSW1hZ2VDYWNoZTo6bG9va3VwT3JDcmVhdGVCaXRtYXBJbWFnZUZvclJlbmRlcmVyKToK
KyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjplZmZlY3RSZWZlcmVuY2VzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmFkZEJ1aWx0aW5FZmZlY3RzKToKKyAgICAg
ICAgKiBzdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5Lmg6CisgICAgICAgIChXZWJD
b3JlOjpTVkdBbmltYXRlZFByb3BlcnR5Ojp+U1ZHQW5pbWF0ZWRQcm9wZXJ0eSk6CisgICAgICAg
ICogc3ZnL3Byb3BlcnRpZXMvU1ZHQXR0cmlidXRlVG9Qcm9wZXJ0eU1hcC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdBdHRyaWJ1dGVUb1Byb3BlcnR5TWFwOjphZGRQcm9wZXJ0aWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0F0dHJpYnV0ZVRvUHJvcGVydHlNYXA6OnN5bmNocm9uaXplUHJv
cGVydGllcyk6CisgICAgICAgICogd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OldvcmtlckNvbnRleHQ6Omhhc1BlbmRpbmdBY3Rpdml0eSk6CisgICAgICAgICog
d29ya2Vycy9Xb3JrZXJFdmVudFF1ZXVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckV2
ZW50UXVldWU6OmNsb3NlKToKKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OnNldFJlcXVlc3RIZWFkZXJJbnRlcm5hbCk6
CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6Z2V0QWxsUmVzcG9uc2VIZWFkZXJz
KToKKyAgICAgICAgKiB4bWwvWFBhdGhGdW5jdGlvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
WFBhdGg6OmNyZWF0ZUZ1bmN0aW9uKToKKyAgICAgICAgKiB4bWwvWFBhdGhQYXJzZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OmlzQXhpc05hbWUpOgorICAgICAgICAqIHhtbC9YU0xU
UHJvY2Vzc29yTGlieHNsdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp4c2x0UGFyYW1BcnJheUZy
b21QYXJhbWV0ZXJNYXApOgorICAgICAgICAqIHhtbC9YU0xUUHJvY2Vzc29yUXQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6WFNMVFByb2Nlc3Nvcjo6dHJhbnNmb3JtVG9TdHJpbmcpOgorCiAyMDEy
LTAzLTMwICBOYXRlIENoYXBpbiAgPGphcGhldEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgTWVy
Z2UgRnJhbWVMb2FkZXI6OmZpbmlzaGVkTG9hZGluZygpIGludG8gRG9jdW1lbnRMb2FkZXI6OmZp
bmlzaGVkTG9hZGluZygpLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFuZ2VMb2cKaW5kZXggZTlhY2Y5
OTU5YTBhNDRmY2NhNWQzNzk5NzQ3ODM4MmI4MjgzZDEwOS4uNGY0NGU0OWRjMzFhMGZjYmZlMGRk
OGEwZWNkNWRmNGYyZTdlNGY5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMzEgQEAKKzIwMTItMDMtMzAgIENhaW8gTWFyY2VsbyBkZSBPbGl2ZWlyYSBGaWxobyAg
PGNhaW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KKworICAgICAgICBJbXByb3ZlIGludGVyZmFj
ZSBvZiBIYXNoTWFwIGl0ZXJhdG9ycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9ODI3ODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBVcGRhdGUgY29kZSB0byBhY2Nlc3Mga2V5L3ZhbHVlIGluc3RlYWQgb2Yg
Zmlyc3Qvc2Vjb25kIHdoZW4gdXNpbmcgSGFzaE1hcCBpdGVyYXRvcnMuCisKKyAgICAgICAgKiBB
cGkvQmFja2luZ1N0b3JlLmNwcDoKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6QmFja2lu
Z1N0b3JlUHJpdmF0ZTo6c2V0QmFja2luZ1N0b3JlUmVjdCk6CisgICAgICAgIChCbGFja0JlcnJ5
OjpXZWJLaXQ6OkJhY2tpbmdTdG9yZVByaXZhdGU6OnZpc2libGVUaWxlc1JlY3QpOgorICAgICAg
ICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpCYWNraW5nU3RvcmVQcml2YXRlOjpyZXNldFRpbGVzKToK
KyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6QmFja2luZ1N0b3JlUHJpdmF0ZTo6dXBkYXRl
VGlsZXMpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpCYWNraW5nU3RvcmVQcml2YXRl
Ojp1cGRhdGVUaWxlc0ZvclNjcm9sbE9yTm90UmVuZGVyZWRSZWdpb24pOgorICAgICAgICAoQmxh
Y2tCZXJyeTo6V2ViS2l0OjpCYWNraW5nU3RvcmVQcml2YXRlOjptYXBGcm9tVHJhbnNmb3JtZWRD
b250ZW50c1RvVGlsZXMpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xp
ZW50QmxhY2tCZXJyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEJs
YWNrQmVycnk6OmRpc3BhdGNoV2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKiBXZWJDb3JlU3Vw
cG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5v
dGlmaWNhdGlvblByZXNlbnRlckltcGw6OmNhbmNlbCk6CisgICAgICAgIChXZWJDb3JlOjpOb3Rp
ZmljYXRpb25QcmVzZW50ZXJJbXBsOjpvblBlcm1pc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6
Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6bm90aWZpY2F0aW9uQ2xpY2tlZCk6CisgICAgICAg
ICogV2ViS2l0U3VwcG9ydC9GYXRGaW5nZXJzLmNwcDoKKyAgICAgICAgKEJsYWNrQmVycnk6Oldl
YktpdDo6RmF0RmluZ2Vyczo6ZmluZEJlc3RQb2ludCk6CisgICAgICAgICogV2ViS2l0U3VwcG9y
dC9GcmFtZUxheWVycy5jcHA6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkZyYW1lTGF5
ZXJzOjpyZW1vdmVMYXllckJ5RnJhbWUpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpG
cmFtZUxheWVyczo6Y29tbWl0T25XZWJLaXRUaHJlYWQpOgorCiAyMDEyLTAzLTMwICBNaWtlIEZl
bnRvbiAgPG1pZmVudG9uQHJpbS5jb20+CiAKICAgICAgICAgW0JsYWNrQmVycnldIFNwZWVkIHVw
IHByb2Nlc3Npbmcgb2YgU2VsZWN0aW9uIHJlZ2lvbiBnZW5lcmF0aW9uLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwppbmRleCAzODg5NTczMTdmNjM0OGYxNjdlYTM2ZWY2OTMyYzhiZjZjMDlkMDJl
Li4yNTdhZWQ0ODI1Mjg3MDQ4YjdhZTY4ZDY1MTYxNDJmZDAyOTNiMjg5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDEyLTAzLTMwICBDYWlvIE1hcmNlbG8g
ZGUgT2xpdmVpcmEgRmlsaG8gIDxjYWlvLm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+CisKKyAgICAg
ICAgSW1wcm92ZSBpbnRlcmZhY2Ugb2YgSGFzaE1hcCBpdGVyYXRvcnMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyNzg0CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlIGNvZGUgdG8gYWNjZXNzIGtl
eS92YWx1ZSBpbnN0ZWFkIG9mIGZpcnN0L3NlY29uZCB3aGVuIHVzaW5nIEhhc2hNYXAgaXRlcmF0
b3JzLgorCisgICAgICAgICogc3JjL1dlYkdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5h
Z2VyLmNwcDoKKyAgICAgICAgKFdlYkdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2Vy
OjpyZW1vdmUpOgorICAgICAgICAqIHNyYy9XZWJIVFRQTG9hZEluZm8uY3BwOgorICAgICAgICAo
V2ViS2l0OjphZGRIZWFkZXIpOgorICAgICAgICAqIHNyYy9XZWJVUkxSZXF1ZXN0LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViVVJMUmVxdWVzdDo6dmlzaXRIVFRQSGVhZGVyRmllbGRzKToKKyAg
ICAgICAgKiBzcmMvV2ViVVJMUmVzcG9uc2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxS
ZXNwb25zZTo6YWRkSFRUUEhlYWRlckZpZWxkKToKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMUmVz
cG9uc2U6OnZpc2l0SFRUUEhlYWRlckZpZWxkcyk6CisgICAgICAgICogdGVzdHMvV2ViU29ja2V0
RXh0ZW5zaW9uRGlzcGF0Y2hlclRlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VEVTVF9GKToK
KwogMjAxMi0wMy0zMCAgTWFyayBQaWxncmltICA8cGlsZ3JpbUBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgR0VPTE9DQVRJT04gc2hvdWxkIGJlIGltcGxlbWVudGVkIGFzIFBhZ2UgU3VwcGxlbWVu
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dC9ndGsvQ2hhbmdlTG9nCmluZGV4IDY4NWQ3OTQzNWIwY2ZiNGQ1MjY1MGYzNWQ2ZGUyNDVkNDUw
ZTYwNTkuLjg0ZDA3NjZmMjYwYWUwZTI4OWFmNjlhOWNjMWUyNjY1N2FiOTdjYTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAxMi0wMy0zMCAgQ2FpbyBNYXJjZWxvIGRlIE9s
aXZlaXJhIEZpbGhvICA8Y2Fpby5vbGl2ZWlyYUBvcGVuYm9zc2Eub3JnPgorCisgICAgICAgIElt
cHJvdmUgaW50ZXJmYWNlIG9mIEhhc2hNYXAgaXRlcmF0b3JzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Mjc4NAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZSBjb2RlIHRvIGFjY2VzcyBrZXkvdmFs
dWUgaW5zdGVhZCBvZiBmaXJzdC9zZWNvbmQgd2hlbiB1c2luZyBIYXNoTWFwIGl0ZXJhdG9ycy4K
KworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc0d0ay5jcHA6Cisg
ICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNHdGs6OmdldFBsdWdpbkluZm8pOgorICAgICAgICAq
IHdlYmtpdC93ZWJraXRmYXZpY29uZGF0YWJhc2UuY3BwOgorICAgICAgICAod2Via2l0RmF2aWNv
bkRhdGFiYXNlSW1wb3J0RmluaXNoZWQpOgorICAgICAgICAqIHdlYmtpdC93ZWJraXR3ZWJwbHVn
aW4uY3BwOgorICAgICAgICAod2Via2l0X3dlYl9wbHVnaW5fZ2V0X21pbWV0eXBlcyk6CisKIDIw
MTItMDMtMzAgIE1hcmsgUGlsZ3JpbSAgPHBpbGdyaW1AY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IEdFT0xPQ0FUSU9OIHNob3VsZCBiZSBpbXBsZW1lbnRlZCBhcyBQYWdlIFN1cHBsZW1lbnQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvbWFj
L0NoYW5nZUxvZwppbmRleCBmMDA1OWE3M2U3ZTE0ZDE1ZWU0ZmIyNDBiNTViZWQzNTIyOTg2Mzdj
Li44ZDNmYThhODU4YmNmNTljMjIxYTI4NGRkMzc1OTU3NDM3ZTI5MGVkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsNDYgQEAKKzIwMTItMDMtMzAgIENhaW8gTWFyY2VsbyBkZSBPbGl2ZWly
YSBGaWxobyAgPGNhaW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KKworICAgICAgICBJbXByb3Zl
IGludGVyZmFjZSBvZiBIYXNoTWFwIGl0ZXJhdG9ycworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI3ODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGUgY29kZSB0byBhY2Nlc3Mga2V5L3ZhbHVlIGlu
c3RlYWQgb2YgZmlyc3Qvc2Vjb25kIHdoZW4gdXNpbmcgSGFzaE1hcCBpdGVyYXRvcnMuCisKKyAg
ICAgICAgKiBIaXN0b3J5L1dlYkhpc3RvcnkubW06CisgICAgICAgICgtW1dlYkhpc3RvcnlQcml2
YXRlIHJlbW92ZUl0ZW1Gcm9tRGF0ZUNhY2hlczpdKToKKyAgICAgICAgKC1bV2ViSGlzdG9yeVBy
aXZhdGUgb3JkZXJlZExhc3RWaXNpdGVkRGF5c10pOgorICAgICAgICAoV2ViSGlzdG9yeVdyaXRl
cjo6V2ViSGlzdG9yeVdyaXRlcik6CisgICAgICAgICogTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5t
bToKKyAgICAgICAgKCtbV2ViQ29yZVN0YXRpc3RpY3MgamF2YVNjcmlwdFByb3RlY3RlZE9iamVj
dFR5cGVDb3VudHNdKToKKyAgICAgICAgKCtbV2ViQ29yZVN0YXRpc3RpY3MgamF2YVNjcmlwdE9i
amVjdFR5cGVDb3VudHNdKToKKyAgICAgICAgKiBQbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdp
bkhvc3RNYW5hZ2VyLm1tOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkhvc3RNYW5h
Z2VyOjpob3N0Rm9yUGx1Z2luKToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5Ib3N0
TWFuYWdlcjo6cGx1Z2luSG9zdERpZWQpOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdp
bkhvc3RNYW5hZ2VyOjpkaWRDcmVhdGVXaW5kb3cpOgorICAgICAgICAqIFBsdWdpbnMvSG9zdGVk
L05ldHNjYXBlUGx1Z2luSG9zdFByb3h5Lm1tOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBs
dWdpbkhvc3RQcm94eTo6cGx1Z2luSG9zdERpZWQpOgorICAgICAgICAqIFBsdWdpbnMvSG9zdGVk
L05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5tbToKKyAgICAgICAgKFdlYktpdDo6TmV0c2Nh
cGVQbHVnaW5JbnN0YW5jZVByb3h5OjpMb2NhbE9iamVjdE1hcDo6aWRGb3JPYmplY3QpOgorICAg
ICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OkxvY2FsT2JqZWN0TWFw
OjpyZXRhaW4pOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6
OkxvY2FsT2JqZWN0TWFwOjpyZWxlYXNlKToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVn
aW5JbnN0YW5jZVByb3h5OjpMb2NhbE9iamVjdE1hcDo6Zm9yZ2V0KToKKyAgICAgICAgKFdlYktp
dDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpkZXN0cm95KToKKyAgICAgICAgKFdlYktp
dDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Ojp3ZWJGcmFtZURpZEZpbmlzaExvYWRXaXRo
UmVhc29uKToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Ojpj
YW5jZWxDaGVja0lmQWxsb3dlZFRvTG9hZFVSTCk6CisgICAgICAgICogUGx1Z2lucy9Ib3N0ZWQv
UHJveHlJbnN0YW5jZS5tbToKKyAgICAgICAgKFdlYktpdDo6UHJveHlJbnN0YW5jZTo6bWV0aG9k
c05hbWVkKToKKyAgICAgICAgKFdlYktpdDo6UHJveHlJbnN0YW5jZTo6ZmllbGROYW1lZCk6Cisg
ICAgICAgICogUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblZpZXcubW06CisgICAgICAgICgtW1dl
Yk5ldHNjYXBlUGx1Z2luVmlldyBzdG9wVGltZXJzXSk6CisgICAgICAgICgtW1dlYk5ldHNjYXBl
UGx1Z2luVmlldyBzdGFydFRpbWVyc10pOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYk5v
dGlmaWNhdGlvbkNsaWVudC5tbToKKyAgICAgICAgKFdlYk5vdGlmaWNhdGlvbkNsaWVudDo6c2hv
dyk6CisgICAgICAgIChXZWJOb3RpZmljYXRpb25DbGllbnQ6OmNsZWFyTm90aWZpY2F0aW9ucyk6
CisgICAgICAgIChXZWJOb3RpZmljYXRpb25DbGllbnQ6Om5vdGlmaWNhdGlvbk9iamVjdERlc3Ry
b3llZCk6CisgICAgICAgICogV2ViVmlldy9XZWJIVE1MVmlldy5tbToKKyAgICAgICAgKGNvbW1h
bmROYW1lRm9yU2VsZWN0b3IpOgorCiAyMDEyLTAzLTMwICBNYXJrIFBpbGdyaW0gIDxwaWxncmlt
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBHRU9MT0NBVElPTiBzaG91bGQgYmUgaW1wbGVtZW50
ZWQgYXMgUGFnZSBTdXBwbGVtZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCmluZGV4IGE0OTc5ZmJkNmY3NDRjMWNi
M2JlYTFhZDEzNmQzZjdlMjY5NTdkMTUuLjcwN2EwM2Y5YjUxMzI0MTJkMzliNTM0MDQwYjIxMTIz
NGIzYWFhNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTItMDMtMzAgIENh
aW8gTWFyY2VsbyBkZSBPbGl2ZWlyYSBGaWxobyAgPGNhaW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9y
Zz4KKworICAgICAgICBJbXByb3ZlIGludGVyZmFjZSBvZiBIYXNoTWFwIGl0ZXJhdG9ycworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI3ODQKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGUgY29kZSB0
byBhY2Nlc3Mga2V5L3ZhbHVlIGluc3RlYWQgb2YgZmlyc3Qvc2Vjb25kIHdoZW4gdXNpbmcgSGFz
aE1hcCBpdGVyYXRvcnMuCisKKyAgICAgICAgKiBBcGkvcXdlYnBhZ2UuY3BwOgorICAgICAgICAo
ZXh0cmFjdENvbnRlbnRUeXBlRnJvbVBsdWdpblZlY3Rvcik6CisgICAgICAgICogQXBpL3F3ZWJw
bHVnaW5kYXRhYmFzZS5jcHA6CisgICAgICAgIChRV2ViUGx1Z2luSW5mbzo6bWltZVR5cGVzKToK
KyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNRdC5jcHA6CisgICAg
ICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNRdDo6Z2V0UGx1Z2luSW5mbyk6CisKIDIwMTItMDMtMzAg
IE1hcmsgUGlsZ3JpbSAgPHBpbGdyaW1AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEdFT0xPQ0FU
SU9OIHNob3VsZCBiZSBpbXBsZW1lbnRlZCBhcyBQYWdlIFN1cHBsZW1lbnQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxv
ZwppbmRleCAzZDc1MTAwNzY4MmIzMjQ3YThlNWM5MjlkOWY5ZjNiNWQzYzc4ZDk5Li45MGIzM2Nk
M2JkNDMzNWJlNmJkNGJlM2Q2ZDQzZjRjMmU3ZDRkYzU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L3dpbi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMjMgQEAKKzIwMTItMDMtMzAgIENhaW8gTWFyY2VsbyBkZSBPbGl2ZWlyYSBGaWxobyAg
PGNhaW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KKworICAgICAgICBJbXByb3ZlIGludGVyZmFj
ZSBvZiBIYXNoTWFwIGl0ZXJhdG9ycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9ODI3ODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBVcGRhdGUgY29kZSB0byBhY2Nlc3Mga2V5L3ZhbHVlIGluc3RlYWQgb2Yg
Zmlyc3Qvc2Vjb25kIHdoZW4gdXNpbmcgSGFzaE1hcCBpdGVyYXRvcnMuCisKKyAgICAgICAgKiBD
T01Qcm9wZXJ0eUJhZy5oOgorICAgICAgICAoOjpSZWFkKToKKyAgICAgICAgKiBXZWJDb3JlU3Vw
cG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwOgorICAgICAgICAoV2ViUGxhdGZvcm1TdHJh
dGVnaWVzOjpnZXRQbHVnaW5JbmZvKToKKyAgICAgICAgKiBXZWJLaXRDT01BUEkuY3BwOgorICAg
ICAgICAoY2xhc3NGYWN0b3J5KToKKyAgICAgICAgKiBXZWJOb3RpZmljYXRpb25DZW50ZXIuY3Bw
OgorICAgICAgICAoV2ViTm90aWZpY2F0aW9uQ2VudGVyOjpwb3N0Tm90aWZpY2F0aW9uSW50ZXJu
YWwpOgorICAgICAgICAoV2ViTm90aWZpY2F0aW9uQ2VudGVyOjphZGRPYnNlcnZlcik6CisgICAg
ICAgIChXZWJOb3RpZmljYXRpb25DZW50ZXI6OnJlbW92ZU9ic2VydmVyKToKKwogMjAxMi0wMy0z
MCAgTWFyayBQaWxncmltICA8cGlsZ3JpbUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgR0VPTE9D
QVRJT04gc2hvdWxkIGJlIGltcGxlbWVudGVkIGFzIFBhZ2UgU3VwcGxlbWVudApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC93aW5jZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L3dpbmNlL0No
YW5nZUxvZwppbmRleCAzOGIxYjZmNzhkYjJjZDM1MzFlMzU3NTFjNjI5YzFkNjc1NTc2MWNiLi4x
YTI1N2ZjMTAzY2MxNGYxYmM4ZWRhZjY5ZDExNmFhZWNhZjE1NzY4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L3dpbmNlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L3dpbmNlL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEyLTAzLTMwICBDYWlvIE1hcmNlbG8gZGUgT2xpdmVp
cmEgRmlsaG8gIDxjYWlvLm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+CisKKyAgICAgICAgSW1wcm92
ZSBpbnRlcmZhY2Ugb2YgSGFzaE1hcCBpdGVyYXRvcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyNzg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlIGNvZGUgdG8gYWNjZXNzIGtleS92YWx1ZSBp
bnN0ZWFkIG9mIGZpcnN0L3NlY29uZCB3aGVuIHVzaW5nIEhhc2hNYXAgaXRlcmF0b3JzLgorCisg
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuY3BwOgorICAg
ICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OmdldFBsdWdpbkluZm8pOgorCiAyMDEyLTAz
LTMwICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQub3JnPgogCiAgICAgICAgIFtX
aW5DRV0gQ29ycmVjdCA8d3RmLyouaD4gaW5jbHVkZSBwYXRocy4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA5NGZk
MTNlNjJkMmM1OTE0YzZhODM2N2JjY2M5ZWJmNmVkZDhjOTMzLi45M2RlOGExYTFlYzdlOWU5ZTE0
NmJhZjkzNTY5N2NiOGNjNjBhNTE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTcgQEAKKzIwMTIt
MDMtMzAgIENhaW8gTWFyY2VsbyBkZSBPbGl2ZWlyYSBGaWxobyAgPGNhaW8ub2xpdmVpcmFAb3Bl
bmJvc3NhLm9yZz4KKworICAgICAgICBJbXByb3ZlIGludGVyZmFjZSBvZiBIYXNoTWFwIGl0ZXJh
dG9ycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI3
ODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQg
QXJndW1lbnRDb2RlciBmb3IgSGFzaE1hcEVudHJ5IHR5cGVzLiBVcGRhdGUgY29kZSB0byBhY2Nl
c3Mga2V5L3ZhbHVlIGluc3RlYWQKKyAgICAgICAgb2YgZmlyc3Qvc2Vjb25kIHdoZW4gdXNpbmcg
SGFzaE1hcCBpdGVyYXRvcnMuCisKKyAgICAgICAgKiBQbGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50
Q29kZXJzLmg6CisgICAgICAgICogUGxhdGZvcm0vQ29yZUlQQy9Db25uZWN0aW9uLmNwcDoKKyAg
ICAgICAgKENvcmVJUEM6OkNvbm5lY3Rpb246OlN5bmNNZXNzYWdlU3RhdGU6OmdldE9yQ3JlYXRl
KToKKyAgICAgICAgKENvcmVJUEM6OkNvbm5lY3Rpb246OndhaXRGb3JNZXNzYWdlKToKKyAgICAg
ICAgKENvcmVJUEM6OkNvbm5lY3Rpb246OnByb2Nlc3NJbmNvbWluZ01lc3NhZ2UpOgorICAgICAg
ICAqIFBsYXRmb3JtL2d0ay9Xb3JrUXVldWVHdGsuY3BwOgorICAgICAgICAoV29ya1F1ZXVlOjpy
ZWdpc3RlckV2ZW50U291cmNlSGFuZGxlcik6CisgICAgICAgIChXb3JrUXVldWU6OnVucmVnaXN0
ZXJFdmVudFNvdXJjZUhhbmRsZXIpOgorICAgICAgICAqIFBsYXRmb3JtL21hYy9Xb3JrUXVldWVN
YWMuY3BwOgorICAgICAgICAoV29ya1F1ZXVlOjp1bnJlZ2lzdGVyTWFjaFBvcnRFdmVudEhhbmRs
ZXIpOgorICAgICAgICAqIFNoYXJlZC9QbHVnaW5zL05QUmVtb3RlT2JqZWN0TWFwLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6TlBSZW1vdGVPYmplY3RNYXA6OnBsdWdpbkRlc3Ryb3llZCk6CisgICAg
ICAgICogU2hhcmVkL1VzZXJNZXNzYWdlQ29kZXJzLmg6CisgICAgICAgIChXZWJLaXQ6OlVzZXJN
ZXNzYWdlRW5jb2Rlcjo6YmFzZUVuY29kZSk6CisgICAgICAgICogU2hhcmVkL1dlYlByZWZlcmVu
Y2VzU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0Ojp2YWx1ZUZvcktleSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlByZWZlcmVuY2VzU3RvcmU6OmdldEJvb2xWYWx1ZUZvcktleSk6CisgICAgICAg
ICogU2hhcmVkL2d0ay9XZWJDb3JlQXJndW1lbnRDb2RlcnNHdGsuY3BwOgorICAgICAgICAoQ29y
ZUlQQzo6OjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9xdC9Bcmd1bWVudENvZGVyc1F0LmNw
cDoKKyAgICAgICAgKENvcmVJUEM6Ojo6ZGVjb2RlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRXZWJWaWV3LmNwcDoKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19nZXRfc3Vi
cmVzb3VyY2VzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVx
dWVzdE1hbmFnZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Okdlb2xvY2F0aW9uUGVybWlz
c2lvblJlcXVlc3RNYW5hZ2VyUHJveHk6OmludmFsaWRhdGVSZXF1ZXN0cyk6CisgICAgICAgICog
VUlQcm9jZXNzL05vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5h
Z2VyUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVx
dWVzdE1hbmFnZXJQcm94eTo6aW52YWxpZGF0ZVJlcXVlc3RzKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpQbHVn
aW5Qcm9jZXNzUHJveHk6OnBsdWdpblByb2Nlc3NDcmFzaGVkT3JGYWlsZWRUb0xhdW5jaCk6Cisg
ICAgICAgICogVUlQcm9jZXNzL1dlYkNvbnRleHQuY3BwOgorICAgICAgICAoV2ViS2l0OjpjcmVh
dGVEaWN0aW9uYXJ5RnJvbUhhc2hNYXApOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJJY29uRGF0
YWJhc2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJJY29uRGF0YWJhc2U6OmRpZEZpbmlzaFVS
TEltcG9ydCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVyLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnN5bmNMYXllclBhcmFtZXRl
cnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVSZW5kZXJlcjo6YXNzaWduSW1hZ2VU
b0xheWVyKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpjaGVja1VSTFJlY2VpdmVkRnJvbVdlYlByb2Nl
c3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OmFkZEJhY2tGb3J3YXJkSXRl
bSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6ZnJhbWVDb3VudEluUGFnZSk6
CisgICAgICAgICogVUlQcm9jZXNzL3F0L0xheWVyQmFja2luZ1N0b3JlLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6TGF5ZXJCYWNraW5nU3RvcmU6OnVwZGF0ZVRpbGUpOgorICAgICAgICAoV2ViS2l0
OjpMYXllckJhY2tpbmdTdG9yZTo6dGV4dHVyZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyQmFj
a2luZ1N0b3JlOjpwYWludFRvVGV4dHVyZU1hcHBlcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVy
QmFja2luZ1N0b3JlOjpjb21taXRUaWxlT3BlcmF0aW9ucyk6CisgICAgICAgICogV2ViUHJvY2Vz
cy9HZW9sb2NhdGlvbi9HZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6Okdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyOjpjYW5j
ZWxSZXF1ZXN0Rm9yR2VvbG9jYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpHZW9sb2NhdGlvblBl
cm1pc3Npb25SZXF1ZXN0TWFuYWdlcjo6ZGlkUmVjZWl2ZUdlb2xvY2F0aW9uUGVybWlzc2lvbkRl
Y2lzaW9uKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3Rl
ZEJ1bmRsZU5vZGVIYW5kbGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZU5v
ZGVIYW5kbGU6OmdldE9yQ3JlYXRlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0RPTS9JbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6Z2V0T3JDcmVhdGUpOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvTm90aWZpY2F0aW9ucy9XZWJOb3RpZmljYXRpb25NYW5hZ2VyLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViTm90aWZpY2F0aW9uTWFuYWdlcjo6cG9saWN5Rm9yT3JpZ2luKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViTm90aWZpY2F0aW9uTWFuYWdlcjo6c2hvdyk6CisgICAgICAgIChXZWJL
aXQ6OldlYk5vdGlmaWNhdGlvbk1hbmFnZXI6OmNsZWFyTm90aWZpY2F0aW9ucyk6CisgICAgICAg
IChXZWJLaXQ6OldlYk5vdGlmaWNhdGlvbk1hbmFnZXI6OnJlbW92ZU5vdGlmaWNhdGlvbkZyb21D
b250ZXh0TWFwKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50
aW1lT2JqZWN0TWFwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TlBSdW50aW1lT2JqZWN0TWFwOjpp
bnZhbGlkYXRlKToKKyAgICAgICAgKFdlYktpdDo6TlBSdW50aW1lT2JqZWN0TWFwOjpmaW5hbGl6
ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2lu
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW46OmRlc3Ryb3lTdHJlYW0pOgor
ICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbjo6dW5zY2hlZHVsZVRpbWVyKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW46OmZyYW1lRGlkRmluaXNoTG9hZGluZyk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luOjpmcmFtZURpZEZhaWwpOgorICAgICAgICAqIFdl
YlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcDoKKyAgICAgICAgKFdlYktpdDo6YnVpbGRI
VFRQSGVhZGVycyk6CisgICAgICAgIChXZWJLaXQ6OlBsdWdpblZpZXc6On5QbHVnaW5WaWV3KToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6bGF5ZXJCeUlEKToKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFja0ZvcndhcmRMaXN0UHJveHkuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3RQcm94eTo6cmVtb3ZlSXRlbSk6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5jcHA6CisgICAgICAg
IChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6YWRvcHRJbWFnZUJhY2tpbmdTdG9yZSk6CisgICAg
ICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6cmVsZWFzZUltYWdlQmFja2luZ1N0b3JlKToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzOjp2aXNpdGVkTGlua1N0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlByb2Nlc3M6OmFsbFZpc2l0ZWRMaW5rU3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUHJvY2Vzczo6Zm9jdXNlZFdlYlBhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
OjpjcmVhdGVXZWJQYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6d2ViUGFnZUdy
b3VwKToKKyAgICAgICAgKFdlYktpdDo6ZnJvbUNvdW50ZWRTZXRUb0hhc2hNYXApOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpzZXRUZXh0Q2hlY2tlclN0YXRlKToKKwogMjAxMi0wMy0z
MCAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBM
aW9uIGJ1aWxkLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxi
YWNrT2JqZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3Qu
aAppbmRleCA5YWNhMGM3ZTE4Y2E1Y2NjY2VlNzM1OWVhMzkxYzI4MzRiMGExYWM4Li5hYzAxNTlk
OThhOGIzMjRkNWZmODgyMDBiOTUzZTFlYzA2YTAzYTBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaApAQCAtODMsMTMgKzgzLDEzIEBAIHN0cnVjdCBK
U0NhbGxiYWNrT2JqZWN0RGF0YSA6IFdlYWtIYW5kbGVPd25lciB7CiAgICAgICAgICAgICBQcml2
YXRlUHJvcGVydHlNYXA6OmNvbnN0X2l0ZXJhdG9yIGxvY2F0aW9uID0gbV9wcm9wZXJ0eU1hcC5m
aW5kKHByb3BlcnR5TmFtZS5pbXBsKCkpOwogICAgICAgICAgICAgaWYgKGxvY2F0aW9uID09IG1f
cHJvcGVydHlNYXAuZW5kKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKLSAg
ICAgICAgICAgIHJldHVybiBsb2NhdGlvbi0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgcmV0
dXJuIGxvY2F0aW9uLT52YWx1ZS5nZXQoKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAg
dm9pZCBzZXRQcml2YXRlUHJvcGVydHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0NlbGwq
IG93bmVyLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBlbXB0eTsKLSAgICAg
ICAgICAgIG1fcHJvcGVydHlNYXAuYWRkKHByb3BlcnR5TmFtZS5pbXBsKCksIGVtcHR5KS5pdGVy
YXRvci0+c2Vjb25kLnNldChnbG9iYWxEYXRhLCBvd25lciwgdmFsdWUpOworICAgICAgICAgICAg
bV9wcm9wZXJ0eU1hcC5hZGQocHJvcGVydHlOYW1lLmltcGwoKSwgZW1wdHkpLml0ZXJhdG9yLT52
YWx1ZS5zZXQoZ2xvYmFsRGF0YSwgb3duZXIsIHZhbHVlKTsKICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgdm9pZCBkZWxldGVQcml2YXRlUHJvcGVydHkoY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lKQpAQCAtMTAwLDggKzEwMCw4IEBAIHN0cnVjdCBKU0NhbGxiYWNrT2JqZWN0RGF0
YSA6IFdlYWtIYW5kbGVPd25lciB7CiAgICAgICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90Vmlz
aXRvciYgdmlzaXRvcikKICAgICAgICAgewogICAgICAgICAgICAgZm9yIChQcml2YXRlUHJvcGVy
dHlNYXA6Oml0ZXJhdG9yIHB0ciA9IG1fcHJvcGVydHlNYXAuYmVnaW4oKTsgcHRyICE9IG1fcHJv
cGVydHlNYXAuZW5kKCk7ICsrcHRyKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHB0ci0+c2Vjb25k
KQotICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgmcHRyLT5zZWNvbmQpOworICAg
ICAgICAgICAgICAgIGlmIChwdHItPnZhbHVlKQorICAgICAgICAgICAgICAgICAgICB2aXNpdG9y
LmFwcGVuZCgmcHRyLT52YWx1ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25z
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMu
aAppbmRleCBlNmJiODg0NGM3NDg1YWJkZmJiYzE5ZWZiZDk1YWZmZjNmNzRmNjcxLi5iZjkwNDg0
ZWJjODQ4Y2EwYjYyNjc5MGFlYzkwMzFjMWQ1YjlkZWM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaApAQCAtNDYyLDgg
KzQ2Miw4IEBAIHZvaWQgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpnZXRPd25Qcm9wZXJ0eU5h
bWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSoKICAgICAgICAgICAgIHR5cGVkZWYgT3Bh
cXVlSlNDbGFzc1N0YXRpY1ZhbHVlc1RhYmxlOjpjb25zdF9pdGVyYXRvciBpdGVyYXRvcjsKICAg
ICAgICAgICAgIGl0ZXJhdG9yIGVuZCA9IHN0YXRpY1ZhbHVlcy0+ZW5kKCk7CiAgICAgICAgICAg
ICBmb3IgKGl0ZXJhdG9yIGl0ID0gc3RhdGljVmFsdWVzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKLSAgICAgICAgICAgICAgICBTdHJpbmdJbXBsKiBuYW1lID0gaXQtPmZpcnN0LmdldCgp
OwotICAgICAgICAgICAgICAgIFN0YXRpY1ZhbHVlRW50cnkqIGVudHJ5ID0gaXQtPnNlY29uZC5n
ZXQoKTsKKyAgICAgICAgICAgICAgICBTdHJpbmdJbXBsKiBuYW1lID0gaXQtPmtleS5nZXQoKTsK
KyAgICAgICAgICAgICAgICBTdGF0aWNWYWx1ZUVudHJ5KiBlbnRyeSA9IGl0LT52YWx1ZS5nZXQo
KTsKICAgICAgICAgICAgICAgICBpZiAoZW50cnktPmdldFByb3BlcnR5ICYmICghKGVudHJ5LT5h
dHRyaWJ1dGVzICYga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RW51bSkgfHwgKG1vZGUgPT0gSW5j
bHVkZURvbnRFbnVtUHJvcGVydGllcykpKQogICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5h
bWVzLmFkZChJZGVudGlmaWVyKGV4ZWMsIG5hbWUpKTsKICAgICAgICAgICAgIH0KQEAgLTQ3Myw4
ICs0NzMsOCBAQCB2b2lkIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6Z2V0T3duUHJvcGVydHlO
YW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqCiAgICAgICAgICAgICB0eXBlZGVmIE9w
YXF1ZUpTQ2xhc3NTdGF0aWNGdW5jdGlvbnNUYWJsZTo6Y29uc3RfaXRlcmF0b3IgaXRlcmF0b3I7
CiAgICAgICAgICAgICBpdGVyYXRvciBlbmQgPSBzdGF0aWNGdW5jdGlvbnMtPmVuZCgpOwogICAg
ICAgICAgICAgZm9yIChpdGVyYXRvciBpdCA9IHN0YXRpY0Z1bmN0aW9ucy0+YmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nSW1wbCogbmFtZSA9IGl0LT5m
aXJzdC5nZXQoKTsKLSAgICAgICAgICAgICAgICBTdGF0aWNGdW5jdGlvbkVudHJ5KiBlbnRyeSA9
IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICAgICAgU3RyaW5nSW1wbCogbmFtZSA9IGl0
LT5rZXkuZ2V0KCk7CisgICAgICAgICAgICAgICAgU3RhdGljRnVuY3Rpb25FbnRyeSogZW50cnkg
PSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICAgICAgaWYgKCEoZW50cnktPmF0dHJpYnV0
ZXMgJiBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRFbnVtKSB8fCAobW9kZSA9PSBJbmNsdWRlRG9u
dEVudW1Qcm9wZXJ0aWVzKSkKICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQo
SWRlbnRpZmllcihleGVjLCBuYW1lKSk7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2xhc3NSZWYuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU0NsYXNzUmVmLmNwcAppbmRleCAxMzUzNGQwNzhjNmI5Yjg3ODFmMDk5NmE2YmI5
ODhiMzdmNGRiZDNjLi4yZjMzM2MyYjg1ODBkYTMyMzU5MGJhNjk4MzhjODMyYjI5OGQyYzA3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2xhc3NSZWYuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDbGFzc1JlZi5jcHAKQEAgLTEwNywxMyArMTA3
LDEzIEBAIE9wYXF1ZUpTQ2xhc3M6On5PcGFxdWVKU0NsYXNzKCkKICAgICBpZiAobV9zdGF0aWNW
YWx1ZXMpIHsKICAgICAgICAgT3BhcXVlSlNDbGFzc1N0YXRpY1ZhbHVlc1RhYmxlOjpjb25zdF9p
dGVyYXRvciBlbmQgPSBtX3N0YXRpY1ZhbHVlcy0+ZW5kKCk7CiAgICAgICAgIGZvciAoT3BhcXVl
SlNDbGFzc1N0YXRpY1ZhbHVlc1RhYmxlOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fc3RhdGljVmFs
dWVzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBBU1NFUlQoIWl0LT5m
aXJzdC0+aXNJZGVudGlmaWVyKCkpOworICAgICAgICAgICAgQVNTRVJUKCFpdC0+a2V5LT5pc0lk
ZW50aWZpZXIoKSk7CiAgICAgfQogCiAgICAgaWYgKG1fc3RhdGljRnVuY3Rpb25zKSB7CiAgICAg
ICAgIE9wYXF1ZUpTQ2xhc3NTdGF0aWNGdW5jdGlvbnNUYWJsZTo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gbV9zdGF0aWNGdW5jdGlvbnMtPmVuZCgpOwogICAgICAgICBmb3IgKE9wYXF1ZUpTQ2xhc3NT
dGF0aWNGdW5jdGlvbnNUYWJsZTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3N0YXRpY0Z1bmN0aW9u
cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgQVNTRVJUKCFpdC0+Zmly
c3QtPmlzSWRlbnRpZmllcigpKTsKKyAgICAgICAgICAgIEFTU0VSVCghaXQtPmtleS0+aXNJZGVu
dGlmaWVyKCkpOwogICAgIH0KICNlbmRpZgogICAgIApAQCAtMTQ3LDggKzE0Nyw4IEBAIE9wYXF1
ZUpTQ2xhc3NDb250ZXh0RGF0YTo6T3BhcXVlSlNDbGFzc0NvbnRleHREYXRhKEpTQzo6SlNHbG9i
YWxEYXRhJiwgT3BhcXVlSlNDCiAgICAgICAgIHN0YXRpY1ZhbHVlcyA9IGFkb3B0UHRyKG5ldyBP
cGFxdWVKU0NsYXNzU3RhdGljVmFsdWVzVGFibGUpOwogICAgICAgICBPcGFxdWVKU0NsYXNzU3Rh
dGljVmFsdWVzVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGpzQ2xhc3MtPm1fc3RhdGljVmFs
dWVzLT5lbmQoKTsKICAgICAgICAgZm9yIChPcGFxdWVKU0NsYXNzU3RhdGljVmFsdWVzVGFibGU6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0ganNDbGFzcy0+bV9zdGF0aWNWYWx1ZXMtPmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgQVNTRVJUKCFpdC0+Zmlyc3QtPmlzSWRlbnRp
ZmllcigpKTsKLSAgICAgICAgICAgIHN0YXRpY1ZhbHVlcy0+YWRkKFN0cmluZ0ltcGw6OmNyZWF0
ZShpdC0+Zmlyc3QtPmNoYXJhY3RlcnMoKSwgaXQtPmZpcnN0LT5sZW5ndGgoKSksIGFkb3B0UHRy
KG5ldyBTdGF0aWNWYWx1ZUVudHJ5KGl0LT5zZWNvbmQtPmdldFByb3BlcnR5LCBpdC0+c2Vjb25k
LT5zZXRQcm9wZXJ0eSwgaXQtPnNlY29uZC0+YXR0cmlidXRlcykpKTsKKyAgICAgICAgICAgIEFT
U0VSVCghaXQtPmtleS0+aXNJZGVudGlmaWVyKCkpOworICAgICAgICAgICAgc3RhdGljVmFsdWVz
LT5hZGQoU3RyaW5nSW1wbDo6Y3JlYXRlKGl0LT5rZXktPmNoYXJhY3RlcnMoKSwgaXQtPmtleS0+
bGVuZ3RoKCkpLCBhZG9wdFB0cihuZXcgU3RhdGljVmFsdWVFbnRyeShpdC0+dmFsdWUtPmdldFBy
b3BlcnR5LCBpdC0+dmFsdWUtPnNldFByb3BlcnR5LCBpdC0+dmFsdWUtPmF0dHJpYnV0ZXMpKSk7
CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE1NiwxNSArMTU2LDE1IEBAIE9wYXF1ZUpTQ2xhc3ND
b250ZXh0RGF0YTo6T3BhcXVlSlNDbGFzc0NvbnRleHREYXRhKEpTQzo6SlNHbG9iYWxEYXRhJiwg
T3BhcXVlSlNDCiAgICAgICAgIHN0YXRpY0Z1bmN0aW9ucyA9IGFkb3B0UHRyKG5ldyBPcGFxdWVK
U0NsYXNzU3RhdGljRnVuY3Rpb25zVGFibGUpOwogICAgICAgICBPcGFxdWVKU0NsYXNzU3RhdGlj
RnVuY3Rpb25zVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGpzQ2xhc3MtPm1fc3RhdGljRnVu
Y3Rpb25zLT5lbmQoKTsKICAgICAgICAgZm9yIChPcGFxdWVKU0NsYXNzU3RhdGljRnVuY3Rpb25z
VGFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0ganNDbGFzcy0+bV9zdGF0aWNGdW5jdGlvbnMtPmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgQVNTRVJUKCFpdC0+Zmlyc3Qt
PmlzSWRlbnRpZmllcigpKTsKLSAgICAgICAgICAgIHN0YXRpY0Z1bmN0aW9ucy0+YWRkKFN0cmlu
Z0ltcGw6OmNyZWF0ZShpdC0+Zmlyc3QtPmNoYXJhY3RlcnMoKSwgaXQtPmZpcnN0LT5sZW5ndGgo
KSksIGFkb3B0UHRyKG5ldyBTdGF0aWNGdW5jdGlvbkVudHJ5KGl0LT5zZWNvbmQtPmNhbGxBc0Z1
bmN0aW9uLCBpdC0+c2Vjb25kLT5hdHRyaWJ1dGVzKSkpOworICAgICAgICAgICAgQVNTRVJUKCFp
dC0+a2V5LT5pc0lkZW50aWZpZXIoKSk7CisgICAgICAgICAgICBzdGF0aWNGdW5jdGlvbnMtPmFk
ZChTdHJpbmdJbXBsOjpjcmVhdGUoaXQtPmtleS0+Y2hhcmFjdGVycygpLCBpdC0+a2V5LT5sZW5n
dGgoKSksIGFkb3B0UHRyKG5ldyBTdGF0aWNGdW5jdGlvbkVudHJ5KGl0LT52YWx1ZS0+Y2FsbEFz
RnVuY3Rpb24sIGl0LT52YWx1ZS0+YXR0cmlidXRlcykpKTsKICAgICAgICAgfQogICAgIH0KIH0K
IAogT3BhcXVlSlNDbGFzc0NvbnRleHREYXRhJiBPcGFxdWVKU0NsYXNzOjpjb250ZXh0RGF0YShF
eGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgT3duUHRyPE9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YT4m
IGNvbnRleHREYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpLm9wYXF1ZUpTQ2xhc3NEYXRhLmFkZCh0
aGlzLCBudWxscHRyKS5pdGVyYXRvci0+c2Vjb25kOworICAgIE93blB0cjxPcGFxdWVKU0NsYXNz
Q29udGV4dERhdGE+JiBjb250ZXh0RGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKS5vcGFxdWVKU0Ns
YXNzRGF0YS5hZGQodGhpcywgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghY29u
dGV4dERhdGEpCiAgICAgICAgIGNvbnRleHREYXRhID0gYWRvcHRQdHIobmV3IE9wYXF1ZUpTQ2xh
c3NDb250ZXh0RGF0YShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMpKTsKICAgICByZXR1cm4gKmNv
bnRleHREYXRhOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAppbmRleCA2ZDhkMGNiNzg4N2JlMGRiZjFkYjM5ZWRhMWNjNGM0MDUwZmJkNzMzLi5mNjQxYWVi
NWYzZDQwZGQwNmE4ZDNhN2I1ZGRlM2Q3MjY4ODliMmQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcApAQCAtNDgwLDcgKzQ4MCw3IEBAIHZvaWQgQ29k
ZUJsb2NrOjpkdW1wKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKICAgICAgICAgICAgIGRhdGFMb2co
IiAgJTFkID0ge1xuIiwgaSk7CiAgICAgICAgICAgICBTdHJpbmdKdW1wVGFibGU6OlN0cmluZ09m
ZnNldFRhYmxlOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRj
aEp1bXBUYWJsZXNbaV0ub2Zmc2V0VGFibGUuZW5kKCk7CiAgICAgICAgICAgICBmb3IgKFN0cmlu
Z0p1bXBUYWJsZTo6U3RyaW5nT2Zmc2V0VGFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX3Jh
cmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbaV0ub2Zmc2V0VGFibGUuYmVnaW4oKTsg
aXRlciAhPSBlbmQ7ICsraXRlcikKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCJcdFx0XCIlc1wi
ID0+ICUwNGRcbiIsIFVTdHJpbmcoaXRlci0+Zmlyc3QpLnV0ZjgoKS5kYXRhKCksIGl0ZXItPnNl
Y29uZC5icmFuY2hPZmZzZXQpOworICAgICAgICAgICAgICAgIGRhdGFMb2coIlx0XHRcIiVzXCIg
PT4gJTA0ZFxuIiwgVVN0cmluZyhpdGVyLT5rZXkpLnV0ZjgoKS5kYXRhKCksIGl0ZXItPnZhbHVl
LmJyYW5jaE9mZnNldCk7CiAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICB9XG4iKTsKICAgICAg
ICAgICAgICsraTsKICAgICAgICAgfSB3aGlsZSAoaSA8IG1fcmFyZURhdGEtPm1fc3RyaW5nU3dp
dGNoSnVtcFRhYmxlcy5zaXplKCkpOwpAQCAtMTYxNCw3ICsxNjE0LDcgQEAgdm9pZCBFdmFsQ29k
ZUNhY2hlOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBFdmFs
Q2FjaGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fY2FjaGVNYXAuZW5kKCk7CiAgICAgZm9yIChFdmFs
Q2FjaGVNYXA6Oml0ZXJhdG9yIHB0ciA9IG1fY2FjaGVNYXAuYmVnaW4oKTsgcHRyICE9IGVuZDsg
KytwdHIpCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kKCZwdHItPnNlY29uZCk7CisgICAgICAgIHZp
c2l0b3IuYXBwZW5kKCZwdHItPnZhbHVlKTsKIH0KIAogdm9pZCBDb2RlQmxvY2s6OnZpc2l0QWdn
cmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0p1bXBUYWJsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0p1bXBUYWJsZS5oCmluZGV4IDViYmUwNDcxMDdmNWIwMWMwMjg5YmVhMzMxODZlMWY4NGEz
YWFmYzcuLjYwMzZjZGE1MWQ1YmNmNTY1ZWFlOTdlOGRiMjY1NTFjOTAyNTVjNzMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9KdW1wVGFibGUuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSnVtcFRhYmxlLmgKQEAgLTU3LDcgKzU3LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBTdHJpbmdPZmZzZXRUYWJsZTo6Y29uc3RfaXRl
cmF0b3IgbG9jID0gb2Zmc2V0VGFibGUuZmluZCh2YWx1ZSk7CiAgICAgICAgICAgICBpZiAobG9j
ID09IGVuZCkKICAgICAgICAgICAgICAgICByZXR1cm4gZGVmYXVsdE9mZnNldDsKLSAgICAgICAg
ICAgIHJldHVybiBsb2MtPnNlY29uZC5icmFuY2hPZmZzZXQ7CisgICAgICAgICAgICByZXR1cm4g
bG9jLT52YWx1ZS5icmFuY2hPZmZzZXQ7CiAgICAgICAgIH0KIAogI2lmIEVOQUJMRShKSVQpCkBA
IC02Nyw3ICs2Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgU3RyaW5nT2Zmc2V0
VGFibGU6OmNvbnN0X2l0ZXJhdG9yIGxvYyA9IG9mZnNldFRhYmxlLmZpbmQodmFsdWUpOwogICAg
ICAgICAgICAgaWYgKGxvYyA9PSBlbmQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGN0aURlZmF1
bHQ7Ci0gICAgICAgICAgICByZXR1cm4gbG9jLT5zZWNvbmQuY3RpT2Zmc2V0OworICAgICAgICAg
ICAgcmV0dXJuIGxvYy0+dmFsdWUuY3RpT2Zmc2V0OwogICAgICAgICB9CiAjZW5kaWYKICAgICB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xhenlPcGVyYW5k
VmFsdWVQcm9maWxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MYXp5T3Bl
cmFuZFZhbHVlUHJvZmlsZS5jcHAKaW5kZXggZjE5OWI2OTIzMGE5YmEwMDllNjU5MWYzZDQ5MDE3
NGM5NWU2MTU3ZC4uZWQyYjZiNmQxN2MzNzgwMWUwNTA0MzNhMzQ1YTliYzBjMWJiMDM2MCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xhenlPcGVyYW5kVmFsdWVQ
cm9maWxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGF6eU9wZXJh
bmRWYWx1ZVByb2ZpbGUuY3BwCkBAIC04MSw3ICs4MSw3IEBAIExhenlPcGVyYW5kVmFsdWVQcm9m
aWxlKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZVBhcnNlcjo6Z2V0SWZQcmVzZW50KAogICAgIGlm
IChpdGVyID09IG1fbWFwLmVuZCgpKQogICAgICAgICByZXR1cm4gMDsKICAgICAKLSAgICByZXR1
cm4gaXRlci0+c2Vjb25kOworICAgIHJldHVybiBpdGVyLT52YWx1ZTsKIH0KIAogUHJlZGljdGVk
VHlwZSBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZVBhcnNlcjo6cHJlZGljdGlvbigKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVkaWN0aW9uVHJhY2tlci5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWRpY3Rpb25UcmFja2VyLmgKaW5kZXgg
NzU1MWNkM2YzZmZiNjQ2M2M0MTVhNThkNjQxNjNmMjQzMTllZGE5Yi4uODViZDcxOWNlNzFlZWUw
MjY4YmExOGQ5N2JkNzE3YmFmZWZlM2EzZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1ByZWRpY3Rpb25UcmFja2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1ByZWRpY3Rpb25UcmFja2VyLmgKQEAgLTU1LDcgKzU1LDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgbV9nbG9iYWxWYXJzLmFkZCh2YXJOdW1iZXIgKyAxLCBwcmVkaWN0aW9u
U2xvdCk7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiBtZXJnZVByZWRpY3Rpb24oaXRlci0+c2Vjb25kLm1fdmFsdWUsIHByZWRpY3Rpb24pOwor
ICAgICAgICByZXR1cm4gbWVyZ2VQcmVkaWN0aW9uKGl0ZXItPnZhbHVlLm1fdmFsdWUsIHByZWRp
Y3Rpb24pOwogICAgIH0KICAgICAKICAgICBQcmVkaWN0ZWRUeXBlIGdldEdsb2JhbFZhclByZWRp
Y3Rpb24odW5zaWduZWQgdmFyTnVtYmVyKQpAQCAtNjMsNyArNjMsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIEhhc2hNYXA8dW5zaWduZWQsIFByZWRpY3Rpb25TbG90Pjo6aXRlcmF0b3IgaXRlciA9IG1f
Z2xvYmFsVmFycy5maW5kKHZhck51bWJlciArIDEpOwogICAgICAgICBpZiAoaXRlciA9PSBtX2ds
b2JhbFZhcnMuZW5kKCkpCiAgICAgICAgICAgICByZXR1cm4gUHJlZGljdE5vbmU7Ci0gICAgICAg
IHJldHVybiBpdGVyLT5zZWNvbmQubV92YWx1ZTsKKyAgICAgICAgcmV0dXJuIGl0ZXItPnZhbHVl
Lm1fdmFsdWU7CiAgICAgfQogICAgIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKaW5kZXggMGYw
ODU3OTUzMzY0MDRjNWEwNGZhMWU3YmNkYzE2YTAyN2UxZjFkYy4uZGJmMjNmZGVlNTliY2ZhM2Zk
NWU5OTg2NDlmZTg4Njg1OTE0MjAxMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKQEAgLTIwMyw3ICsyMDMs
NyBAQCBib29sIEJ5dGVjb2RlR2VuZXJhdG9yOjphZGRWYXIoY29uc3QgSWRlbnRpZmllciYgaWRl
bnQsIGJvb2wgaXNDb25zdGFudCwgUmVnaXN0ZQogICAgIFN5bWJvbFRhYmxlOjpBZGRSZXN1bHQg
cmVzdWx0ID0gc3ltYm9sVGFibGUoKS5hZGQoaWRlbnQuaW1wbCgpLCBuZXdFbnRyeSk7CiAKICAg
ICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIHIwID0gJnJlZ2lzdGVyRm9yKHJl
c3VsdC5pdGVyYXRvci0+c2Vjb25kLmdldEluZGV4KCkpOworICAgICAgICByMCA9ICZyZWdpc3Rl
ckZvcihyZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldEluZGV4KCkpOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogCkBAIC0yMTcsNyArMjE3LDcgQEAgaW50IEJ5dGVjb2RlR2VuZXJhdG9y
OjphZGRHbG9iYWxWYXIoY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGJvb2wgaXNDb25zdGFudCkK
ICAgICBTeW1ib2xUYWJsZUVudHJ5IG5ld0VudHJ5KGluZGV4LCBpc0NvbnN0YW50ID8gUmVhZE9u
bHkgOiAwKTsKICAgICBTeW1ib2xUYWJsZTo6QWRkUmVzdWx0IHJlc3VsdCA9IHN5bWJvbFRhYmxl
KCkuYWRkKGlkZW50LmltcGwoKSwgbmV3RW50cnkpOwogICAgIGlmICghcmVzdWx0LmlzTmV3RW50
cnkpCi0gICAgICAgIGluZGV4ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQuZ2V0SW5kZXgoKTsK
KyAgICAgICAgaW5kZXggPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldEluZGV4KCk7CiAgICAg
cmV0dXJuIGluZGV4OwogfQogCkBAIC05NzIsNyArOTcyLDcgQEAgdW5zaWduZWQgQnl0ZWNvZGVH
ZW5lcmF0b3I6OmFkZENvbnN0YW50KGNvbnN0IElkZW50aWZpZXImIGlkZW50KQogICAgIGlmIChy
ZXN1bHQuaXNOZXdFbnRyeSkKICAgICAgICAgbV9jb2RlQmxvY2stPmFkZElkZW50aWZpZXIoSWRl
bnRpZmllcihtX2dsb2JhbERhdGEsIHJlcCkpOwogCi0gICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRv
ci0+c2Vjb25kOworICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogfQogCiBSZWdp
c3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6YWRkQ29uc3RhbnRWYWx1ZShKU1ZhbHVlIHYpCkBA
IC05ODUsNyArOTg1LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmFkZENvbnN0
YW50VmFsdWUoSlNWYWx1ZSB2KQogICAgICAgICArK21fbmV4dENvbnN0YW50T2Zmc2V0OwogICAg
ICAgICBtX2NvZGVCbG9jay0+YWRkQ29uc3RhbnQoSlNWYWx1ZSh2KSk7CiAgICAgfSBlbHNlCi0g
ICAgICAgIGluZGV4ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgIGluZGV4ID0g
cmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIAogICAgIHJldHVybiAmbV9jb25zdGFudFBvb2xSZWdp
c3RlcnNbaW5kZXhdOwogfQpAQCAtMTEzMiw3ICsxMTMyLDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaXRMb2FkKFJlZ2lzdGVySUQqIGRzdCwgZG91YmxlIG51bWJlcikKICAg
ICAvLyB3b3JrIGNvcnJlY3RseSB3aXRoIE5hTiBhcyBhIGtleS4KICAgICBpZiAoaXNuYW4obnVt
YmVyKSB8fCBudW1iZXIgPT0gSGFzaFRyYWl0czxkb3VibGU+OjplbXB0eVZhbHVlKCkgfHwgSGFz
aFRyYWl0czxkb3VibGU+Ojppc0RlbGV0ZWRWYWx1ZShudW1iZXIpKQogICAgICAgICByZXR1cm4g
ZW1pdExvYWQoZHN0LCBqc051bWJlcihudW1iZXIpKTsKLSAgICBKU1ZhbHVlJiB2YWx1ZUluTWFw
ID0gbV9udW1iZXJNYXAuYWRkKG51bWJlciwgSlNWYWx1ZSgpKS5pdGVyYXRvci0+c2Vjb25kOwor
ICAgIEpTVmFsdWUmIHZhbHVlSW5NYXAgPSBtX251bWJlck1hcC5hZGQobnVtYmVyLCBKU1ZhbHVl
KCkpLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoIXZhbHVlSW5NYXApCiAgICAgICAgIHZhbHVl
SW5NYXAgPSBqc051bWJlcihudW1iZXIpOwogICAgIHJldHVybiBlbWl0TG9hZChkc3QsIHZhbHVl
SW5NYXApOwpAQCAtMTE0MCw3ICsxMTQwLDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0
b3I6OmVtaXRMb2FkKFJlZ2lzdGVySUQqIGRzdCwgZG91YmxlIG51bWJlcikKIAogUmVnaXN0ZXJJ
RCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRMb2FkKFJlZ2lzdGVySUQqIGRzdCwgY29uc3QgSWRl
bnRpZmllciYgaWRlbnRpZmllcikKIHsKLSAgICBKU1N0cmluZyomIHN0cmluZ0luTWFwID0gbV9z
dHJpbmdNYXAuYWRkKGlkZW50aWZpZXIuaW1wbCgpLCAwKS5pdGVyYXRvci0+c2Vjb25kOworICAg
IEpTU3RyaW5nKiYgc3RyaW5nSW5NYXAgPSBtX3N0cmluZ01hcC5hZGQoaWRlbnRpZmllci5pbXBs
KCksIDApLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoIXN0cmluZ0luTWFwKQogICAgICAgICBz
dHJpbmdJbk1hcCA9IGpzT3duZWRTdHJpbmcoZ2xvYmFsRGF0YSgpLCBpZGVudGlmaWVyLnVzdHJp
bmcoKSk7CiAgICAgcmV0dXJuIGVtaXRMb2FkKGRzdCwgSlNWYWx1ZShzdHJpbmdJbk1hcCkpOwpA
QCAtMTY0OCw3ICsxNjQ4LDcgQEAgdW5zaWduZWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmFkZENvbnN0
YW50QnVmZmVyKHVuc2lnbmVkIGxlbmd0aCkKIAogSlNTdHJpbmcqIEJ5dGVjb2RlR2VuZXJhdG9y
OjphZGRTdHJpbmdDb25zdGFudChjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKQogewotICAg
IEpTU3RyaW5nKiYgc3RyaW5nSW5NYXAgPSBtX3N0cmluZ01hcC5hZGQoaWRlbnRpZmllci5pbXBs
KCksIDApLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgSlNTdHJpbmcqJiBzdHJpbmdJbk1hcCA9IG1f
c3RyaW5nTWFwLmFkZChpZGVudGlmaWVyLmltcGwoKSwgMCkuaXRlcmF0b3ItPnZhbHVlOwogICAg
IGlmICghc3RyaW5nSW5NYXApIHsKICAgICAgICAgc3RyaW5nSW5NYXAgPSBqc1N0cmluZyhnbG9i
YWxEYXRhKCksIGlkZW50aWZpZXIudXN0cmluZygpKTsKICAgICAgICAgYWRkQ29uc3RhbnRWYWx1
ZShzdHJpbmdJbk1hcCk7CkBAIC0xNzIwLDggKzE3MjAsOCBAQCBSZWdpc3RlcklEKiBCeXRlY29k
ZUdlbmVyYXRvcjo6ZW1pdExhenlOZXdGdW5jdGlvbihSZWdpc3RlcklEKiBkc3QsIEZ1bmN0aW9u
Qm9keQogewogICAgIEZ1bmN0aW9uT2Zmc2V0TWFwOjpBZGRSZXN1bHQgcHRyID0gbV9mdW5jdGlv
bk9mZnNldHMuYWRkKGZ1bmN0aW9uLCAwKTsKICAgICBpZiAocHRyLmlzTmV3RW50cnkpCi0gICAg
ICAgIHB0ci5pdGVyYXRvci0+c2Vjb25kID0gbV9jb2RlQmxvY2stPmFkZEZ1bmN0aW9uRGVjbCht
YWtlRnVuY3Rpb24obV9nbG9iYWxEYXRhLCBmdW5jdGlvbikpOwotICAgIHJldHVybiBlbWl0TmV3
RnVuY3Rpb25JbnRlcm5hbChkc3QsIHB0ci5pdGVyYXRvci0+c2Vjb25kLCB0cnVlKTsKKyAgICAg
ICAgcHRyLml0ZXJhdG9yLT52YWx1ZSA9IG1fY29kZUJsb2NrLT5hZGRGdW5jdGlvbkRlY2wobWFr
ZUZ1bmN0aW9uKG1fZ2xvYmFsRGF0YSwgZnVuY3Rpb24pKTsKKyAgICByZXR1cm4gZW1pdE5ld0Z1
bmN0aW9uSW50ZXJuYWwoZHN0LCBwdHIuaXRlcmF0b3ItPnZhbHVlLCB0cnVlKTsKIH0KIAogUmVn
aXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXROZXdGdW5jdGlvbkludGVybmFsKFJlZ2lz
dGVySUQqIGRzdCwgdW5zaWduZWQgaW5kZXgsIGJvb2wgZG9OdWxsQ2hlY2spCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKaW5kZXgg
Y2Q5ZGUyMmYwNTk4Nzk4ZTI3YjI3NzFiOWI4N2U0NTEzNmE5NzhjZC4uNmIzZjdlNTVlNGEzNWEy
OWY4ZWFlMjM0NzJmZjYzMTAxNDIwMTg3OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcApAQCAtMjU4LDcgKzI1OCw3IEBAIFJl
Z2lzdGVySUQqIFByb3BlcnR5TGlzdE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRv
ciYgZ2VuZXJhdG9yLCBSZWdpc3RlCiAgICAgICAgICAgICBHZXR0ZXJTZXR0ZXJQYWlyIHBhaXIo
bm9kZSwgc3RhdGljX2Nhc3Q8UHJvcGVydHlOb2RlKj4oMCkpOwogICAgICAgICAgICAgR2V0dGVy
U2V0dGVyTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbWFwLmFkZChub2RlLT5uYW1lKCkuaW1wbCgp
LCBwYWlyKTsKICAgICAgICAgICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgICAg
ICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQuc2Vjb25kID0gbm9kZTsKKyAgICAgICAgICAg
ICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLnNlY29uZCA9IG5vZGU7CiAgICAgICAgIH0KIAog
ICAgICAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIHJlbWFpbmluZyBwcm9wZXJ0aWVzIGluIHRoZSBs
aXN0LgpAQCAtMjc2LDcgKzI3Niw3IEBAIFJlZ2lzdGVySUQqIFByb3BlcnR5TGlzdE5vZGU6OmVt
aXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlCiAgICAgICAg
ICAgICBBU1NFUlQobm9kZS0+bV90eXBlID09IFByb3BlcnR5Tm9kZTo6R2V0dGVyIHx8IG5vZGUt
Pm1fdHlwZSA9PSBQcm9wZXJ0eU5vZGU6OlNldHRlcik7CiAgICAgICAgICAgICBHZXR0ZXJTZXR0
ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLmZpbmQobm9kZS0+bmFtZSgpLmltcGwoKSk7CiAgICAg
ICAgICAgICBBU1NFUlQoaXQgIT0gbWFwLmVuZCgpKTsKLSAgICAgICAgICAgIEdldHRlclNldHRl
clBhaXImIHBhaXIgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgR2V0dGVyU2V0dGVyUGFpciYg
cGFpciA9IGl0LT52YWx1ZTsKIAogICAgICAgICAgICAgLy8gV2FzIHRoaXMgYWxyZWFkeSBnZW5l
cmF0ZWQgYXMgYSBwYXJ0IG9mIGl0cyBwYXJ0bmVyPwogICAgICAgICAgICAgaWYgKHBhaXIuc2Vj
b25kID09IG5vZGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIv
RGVidWdnZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNw
cAppbmRleCBlZGU4YTliYTI0OGI5YTg5NGI3OTE3NGVkNWQzMjBmODhmNWNjYjNlLi4xNDZiYWQx
NTY2OTJiNTEwNDYwMTFlM2EzNzRmY2VkNTU5ZTFhODcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAKQEAgLTU5LDcgKzU5LDcgQEAgaW5saW5lIFJlY29t
cGlsZXI6On5SZWNvbXBpbGVyKCkKICAgICAvLyBKYXZhU2NyaXB0IGluIHRoZSBpbnNwZWN0b3Iu
CiAgICAgU291cmNlUHJvdmlkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fc291cmNlUHJv
dmlkZXJzLmVuZCgpOwogICAgIGZvciAoU291cmNlUHJvdmlkZXJNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ZXIgPSBtX3NvdXJjZVByb3ZpZGVycy5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQot
ICAgICAgICBtX2RlYnVnZ2VyLT5zb3VyY2VQYXJzZWQoaXRlci0+c2Vjb25kLCBpdGVyLT5maXJz
dCwgLTEsIFVTdHJpbmcoKSk7CisgICAgICAgIG1fZGVidWdnZXItPnNvdXJjZVBhcnNlZChpdGVy
LT52YWx1ZSwgaXRlci0+a2V5LCAtMSwgVVN0cmluZygpKTsKIH0KIAogaW5saW5lIHZvaWQgUmVj
b21waWxlcjo6b3BlcmF0b3IoKShKU0NlbGwqIGNlbGwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5jcHAKaW5kZXggYWMyYzNkYjIxY2Y3NGExYTRk
NjRiNDY4OWZmMTZmZWZlN2JkMWViMy4uZjhmNTYwMzhlOWQxZTFhNWZhOTA2NWY2MDE4MzQ1MGZl
ZjQzM2U1MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBc3NlbWJs
eUhlbHBlcnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXNzZW1ibHlI
ZWxwZXJzLmNwcApAQCAtNDEsOSArNDEsOSBAQCBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zm
c2V0PiYgQXNzZW1ibHlIZWxwZXJzOjpkZWNvZGVkQ29kZU1hcEZvcihDb2RlQmxvY2sqCiAgICAg
SGFzaE1hcDxDb2RlQmxvY2sqLCBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiA+OjpB
ZGRSZXN1bHQgcmVzdWx0ID0gbV9kZWNvZGVkQ29kZU1hcHMuYWRkKGNvZGVCbG9jaywgVmVjdG9y
PEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4oKSk7CiAgICAgCiAgICAgaWYgKHJlc3VsdC5pc05l
d0VudHJ5KQotICAgICAgICBjb2RlQmxvY2stPmppdENvZGVNYXAoKS0+ZGVjb2RlKHJlc3VsdC5p
dGVyYXRvci0+c2Vjb25kKTsKKyAgICAgICAgY29kZUJsb2NrLT5qaXRDb2RlTWFwKCktPmRlY29k
ZShyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKICAgICAKLSAgICByZXR1cm4gcmVzdWx0Lml0ZXJh
dG9yLT5zZWNvbmQ7CisgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiB9CiAKICNp
ZiBFTkFCTEUoU0FNUExJTkdfRkxBR1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0J5dGVDb2RlQ2FjaGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Qnl0ZUNvZGVDYWNoZS5oCmluZGV4IGY2YTc0NWM2NjU4NzEzM2IxMmNiZDQ0ZmYzYTkyOWE5M2Mx
YmExMDcuLjhlZDE1NzhmMjZkM2E0ZTc1ZTIzYTlkOGVlZmYwOWFiNGFiNjAwOWMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVDYWNoZS5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVDYWNoZS5oCkBAIC0xMzIsMTAgKzEz
MiwxMCBAQCBwdWJsaWM6CiAgICAgICAgIE1hcDo6aXRlcmF0b3IgYmVnaW4gPSBtX21hcC5iZWdp
bigpOwogICAgICAgICBNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fbWFwLmVuZCgpOwogICAgICAgICBm
b3IgKE1hcDo6aXRlcmF0b3IgaXRlciA9IGJlZ2luOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0g
ICAgICAgICAgICBpZiAoIWl0ZXItPnNlY29uZC5jb2RlQmxvY2spCisgICAgICAgICAgICBpZiAo
IWl0ZXItPnZhbHVlLmNvZGVCbG9jaykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgIGlmIChpdGVyLT5zZWNvbmQub3duZWQpIHsKLSAgICAgICAgICAgICAgICBkZWxldGUg
aXRlci0+c2Vjb25kLmNvZGVCbG9jazsKKyAgICAgICAgICAgIGlmIChpdGVyLT52YWx1ZS5vd25l
ZCkgeworICAgICAgICAgICAgICAgIGRlbGV0ZSBpdGVyLT52YWx1ZS5jb2RlQmxvY2s7CiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE0NSw3
ICsxNDUsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBt
X21hcC5maW5kKGtleSk7CiAgICAgICAgIGlmIChpdGVyICE9IG1fbWFwLmVuZCgpKQotICAgICAg
ICAgICAgcmV0dXJuIGl0ZXItPnNlY29uZC5jb2RlQmxvY2s7CisgICAgICAgICAgICByZXR1cm4g
aXRlci0+dmFsdWUuY29kZUJsb2NrOwogICAgICAgICAKICAgICAgICAgQnl0ZUNvZGVDYWNoZVZh
bHVlIHZhbHVlOwogICAgICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
eXRlQ29kZVBhcnNlci5jcHAKaW5kZXggZjBkYTZjYzAxYjcwZTg3OWJiOTA5NzhjOGJhODcwNmZh
ZDg2OGQxZS4uMmE0NGFiMjU5MThmMzE3NjRjNWZlN2ZiYjZkZDZlNTJmOWJmMTQ2MyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKQEAgLTU1
Myw5ICs1NTMsOSBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgSGFzaE1hcDxKU0NlbGwqLCBO
b2RlSW5kZXg+OjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9jZWxsQ29uc3RhbnROb2Rlcy5hZGQoY2Vs
bCwgTm9Ob2RlKTsKICAgICAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICAgICAg
cmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBhZGRUb0dyYXBoKFdlYWtKU0NvbnN0YW50LCBPcElu
Zm8oY2VsbCkpOworICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGFkZFRvR3Jh
cGgoV2Vha0pTQ29uc3RhbnQsIE9wSW5mbyhjZWxsKSk7CiAgICAgICAgIAotICAgICAgICByZXR1
cm4gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQuaXRlcmF0
b3ItPnZhbHVlOwogICAgIH0KICAgICAKICAgICBDb2RlT3JpZ2luIGN1cnJlbnRDb2RlT3JpZ2lu
KCkKQEAgLTI1OTgsNyArMjU5OCw3IEBAIEJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5
OjpJbmxpbmVTdGFja0VudHJ5KEJ5dGVDb2RlUGFyc2VyKiBieXRlQ29kZVBhcnNlCiAgICAgICAg
ICAgICBJZGVudGlmaWVyTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gYnl0ZUNvZGVQYXJzZXItPm1f
aWRlbnRpZmllck1hcC5hZGQocmVwLCBieXRlQ29kZVBhcnNlci0+bV9jb2RlQmxvY2stPm51bWJl
ck9mSWRlbnRpZmllcnMoKSk7CiAgICAgICAgICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpCiAg
ICAgICAgICAgICAgICAgYnl0ZUNvZGVQYXJzZXItPm1fY29kZUJsb2NrLT5hZGRJZGVudGlmaWVy
KElkZW50aWZpZXIoYnl0ZUNvZGVQYXJzZXItPm1fZ2xvYmFsRGF0YSwgcmVwKSk7Ci0gICAgICAg
ICAgICBtX2lkZW50aWZpZXJSZW1hcFtpXSA9IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAg
ICAgICAgICAgbV9pZGVudGlmaWVyUmVtYXBbaV0gPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwog
ICAgICAgICB9CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29kZUJsb2NrLT5udW1i
ZXJPZkNvbnN0YW50UmVnaXN0ZXJzKCk7ICsraSkgewogICAgICAgICAgICAgSlNWYWx1ZSB2YWx1
ZSA9IGNvZGVCbG9jay0+Z2V0Q29uc3RhbnQoaSArIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4
KTsKQEAgLTI2MTYsNyArMjYxNiw3IEBAIEJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5
OjpJbmxpbmVTdGFja0VudHJ5KEJ5dGVDb2RlUGFyc2VyKiBieXRlQ29kZVBhcnNlCiAgICAgICAg
ICAgICAgICAgYnl0ZUNvZGVQYXJzZXItPm1fY29kZUJsb2NrLT5hZGRDb25zdGFudCh2YWx1ZSk7
CiAgICAgICAgICAgICAgICAgYnl0ZUNvZGVQYXJzZXItPm1fY29uc3RhbnRzLmFwcGVuZChDb25z
dGFudFJlY29yZCgpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fY29uc3RhbnRSZW1h
cFtpXSA9IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICAgICAgbV9jb25zdGFudFJl
bWFwW2ldID0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgbV9jYWxsc2l0ZUJsb2NrSGVhZE5lZWRzTGlua2luZyA9IHRydWU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuY3BwCmluZGV4IGM1NGJhNzdiNmU0ZmJhOTMyNmRjZWI5MWU1NTVhYmI2
NGYwMmJmNzEuLjM0MjEwYWIxOWQ2ZWVkODI4ZDAwMTc1NTAyZGQzNDkwNjY2YjRlNzMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCkBAIC01MDIsNyArNTAyLDcgQEAgdm9pZCBIZWFw
OjptYXJrUHJvdGVjdGVkT2JqZWN0cyhIZWFwUm9vdFZpc2l0b3ImIGhlYXBSb290VmlzaXRvcikK
IHsKICAgICBQcm90ZWN0Q291bnRTZXQ6Oml0ZXJhdG9yIGVuZCA9IG1fcHJvdGVjdGVkVmFsdWVz
LmVuZCgpOwogICAgIGZvciAoUHJvdGVjdENvdW50U2V0OjppdGVyYXRvciBpdCA9IG1fcHJvdGVj
dGVkVmFsdWVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaGVhcFJvb3RWaXNp
dG9yLnZpc2l0KCZpdC0+Zmlyc3QpOworICAgICAgICBoZWFwUm9vdFZpc2l0b3IudmlzaXQoJml0
LT5rZXkpOwogfQogCiB2b2lkIEhlYXA6OnB1c2hUZW1wU29ydFZlY3RvcihWZWN0b3I8VmFsdWVT
dHJpbmdQYWlyPiogdGVtcFZlY3RvcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAppbmRleCBj
NzhjODU2MjhhMTRkYzdhZjdmOTVkNzU4NzA2ZDA2ZGRjMGQxY2JkLi41NDdjYTQ4NjY0MTYyYzRl
ZjMxN2E5ZjA4MDc0YzFhMjg1ZjlkMjYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCkBA
IC0zNTAsNyArMzUwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgewogICAgICAgICBQcm90ZWN0
Q291bnRTZXQ6Oml0ZXJhdG9yIGVuZCA9IG1fcHJvdGVjdGVkVmFsdWVzLmVuZCgpOwogICAgICAg
ICBmb3IgKFByb3RlY3RDb3VudFNldDo6aXRlcmF0b3IgaXQgPSBtX3Byb3RlY3RlZFZhbHVlcy5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBmdW5jdG9yKGl0LT5maXJzdCk7
CisgICAgICAgICAgICBmdW5jdG9yKGl0LT5rZXkpOwogICAgICAgICBtX2hhbmRsZUhlYXAuZm9y
RWFjaFN0cm9uZ0hhbmRsZShmdW5jdG9yLCBtX3Byb3RlY3RlZFZhbHVlcyk7CiAKICAgICAgICAg
cmV0dXJuIGZ1bmN0b3IucmV0dXJuVmFsdWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcApp
bmRleCA1NDFjYzg5NmEzMjg5MGY2YzVlZjYxYjRiNjViNzI0ZTY4ZWU2YjQxLi5lNGM3MmYxZWI2
NDc4MTI2OGJhNWQ0NGNkYjE5YjI5ODM0NDM1NDk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
Y3BwCkBAIC02NDMsOCArNjQzLDggQEAgSklUQ29kZSBKSVQ6OnByaXZhdGVDb21waWxlKENvZGVQ
dHIqIGZ1bmN0aW9uRW50cnlBcml0eUNoZWNrLCBKSVRDb21waWxhdGlvbkVmZm8KIAogICAgICAg
ICAgICAgU3RyaW5nSnVtcFRhYmxlOjpTdHJpbmdPZmZzZXRUYWJsZTo6aXRlcmF0b3IgZW5kID0g
cmVjb3JkLmp1bXBUYWJsZS5zdHJpbmdKdW1wVGFibGUtPm9mZnNldFRhYmxlLmVuZCgpOyAgICAg
ICAgICAgIAogICAgICAgICAgICAgZm9yIChTdHJpbmdKdW1wVGFibGU6OlN0cmluZ09mZnNldFRh
YmxlOjppdGVyYXRvciBpdCA9IHJlY29yZC5qdW1wVGFibGUuc3RyaW5nSnVtcFRhYmxlLT5vZmZz
ZXRUYWJsZS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgICAgICB1bnNp
Z25lZCBvZmZzZXQgPSBpdC0+c2Vjb25kLmJyYW5jaE9mZnNldDsKLSAgICAgICAgICAgICAgICBp
dC0+c2Vjb25kLmN0aU9mZnNldCA9IG9mZnNldCA/IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YobV9s
YWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyBvZmZzZXRdKSA6IHJlY29yZC5qdW1wVGFibGUuc3RyaW5n
SnVtcFRhYmxlLT5jdGlEZWZhdWx0OworICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9
IGl0LT52YWx1ZS5icmFuY2hPZmZzZXQ7CisgICAgICAgICAgICAgICAgaXQtPnZhbHVlLmN0aU9m
ZnNldCA9IG9mZnNldCA/IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YobV9sYWJlbHNbYnl0ZWNvZGVP
ZmZzZXQgKyBvZmZzZXRdKSA6IHJlY29yZC5qdW1wVGFibGUuc3RyaW5nSnVtcFRhYmxlLT5jdGlE
ZWZhdWx0OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFN0dWJzLmNwcAppbmRleCA4MmY2ZGY3ZDEyYThlZjI3NDQwNTUxNmRlNjZjNTUz
NjM4YjRmZGQwLi5jYjkwZjQyMzMzYWU5Y2JkNmFjZWNmN2Q2MTRhZTk1NGY5NGI5MTQ1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcApAQCAtMzU2MCwyMiArMzU2MCwyMiBA
QCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgSklUVGh1bmtzOjpjdGlTdHViKEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSwgVGh1bmtHZW5lcmF0bwogewogICAgIENUSVN0dWJNYXA6OkFkZFJlc3VsdCBl
bnRyeSA9IG1fY3RpU3R1Yk1hcC5hZGQoZ2VuZXJhdG9yLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYo
KSk7CiAgICAgaWYgKGVudHJ5LmlzTmV3RW50cnkpCi0gICAgICAgIGVudHJ5Lml0ZXJhdG9yLT5z
ZWNvbmQgPSBnZW5lcmF0b3IoZ2xvYmFsRGF0YSk7Ci0gICAgcmV0dXJuIGVudHJ5Lml0ZXJhdG9y
LT5zZWNvbmQ7CisgICAgICAgIGVudHJ5Lml0ZXJhdG9yLT52YWx1ZSA9IGdlbmVyYXRvcihnbG9i
YWxEYXRhKTsKKyAgICByZXR1cm4gZW50cnkuaXRlcmF0b3ItPnZhbHVlOwogfQogCiBOYXRpdmVF
eGVjdXRhYmxlKiBKSVRUaHVua3M6Omhvc3RGdW5jdGlvblN0dWIoSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhLCBOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0
b3IpCiB7CiAgICAgSG9zdEZ1bmN0aW9uU3R1Yk1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1faG9z
dEZ1bmN0aW9uU3R1Yk1hcC0+YWRkKGZ1bmN0aW9uLCBQYXNzV2VhazxOYXRpdmVFeGVjdXRhYmxl
PigpKTsKLSAgICBpZiAoIXJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKQotICAgICAgICByZXN1bHQu
aXRlcmF0b3ItPnNlY29uZCA9IFBhc3NXZWFrPE5hdGl2ZUV4ZWN1dGFibGU+KCpnbG9iYWxEYXRh
LCBOYXRpdmVFeGVjdXRhYmxlOjpjcmVhdGUoKmdsb2JhbERhdGEsIEpJVDo6Y29tcGlsZUNUSU5h
dGl2ZUNhbGwoZ2xvYmFsRGF0YSwgZnVuY3Rpb24pLCBmdW5jdGlvbiwgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoY3RpTmF0aXZlQ29uc3RydWN0KCkpLCBj
b25zdHJ1Y3RvciwgTm9JbnRyaW5zaWMpKTsKLSAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT5z
ZWNvbmQuZ2V0KCk7CisgICAgaWYgKCFyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKQorICAgICAgICBy
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gUGFzc1dlYWs8TmF0aXZlRXhlY3V0YWJsZT4oKmdsb2Jh
bERhdGEsIE5hdGl2ZUV4ZWN1dGFibGU6OmNyZWF0ZSgqZ2xvYmFsRGF0YSwgSklUOjpjb21waWxl
Q1RJTmF0aXZlQ2FsbChnbG9iYWxEYXRhLCBmdW5jdGlvbiksIGZ1bmN0aW9uLCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihjdGlOYXRpdmVDb25zdHJ1Y3Qo
KSksIGNvbnN0cnVjdG9yLCBOb0ludHJpbnNpYykpOworICAgIHJldHVybiByZXN1bHQuaXRlcmF0
b3ItPnZhbHVlLmdldCgpOwogfQogCiBOYXRpdmVFeGVjdXRhYmxlKiBKSVRUaHVua3M6Omhvc3RG
dW5jdGlvblN0dWIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBOYXRpdmVGdW5jdGlvbiBmdW5j
dGlvbiwgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yLCBJbnRyaW5zaWMgaW50cmluc2ljKQogewog
ICAgIEhvc3RGdW5jdGlvblN0dWJNYXA6OkFkZFJlc3VsdCBlbnRyeSA9IG1faG9zdEZ1bmN0aW9u
U3R1Yk1hcC0+YWRkKGZ1bmN0aW9uLCBQYXNzV2VhazxOYXRpdmVFeGVjdXRhYmxlPigpKTsKLSAg
ICBpZiAoISplbnRyeS5pdGVyYXRvci0+c2Vjb25kKSB7CisgICAgaWYgKCEqZW50cnkuaXRlcmF0
b3ItPnZhbHVlKSB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb2RlOwogICAgICAg
ICBpZiAoZ2VuZXJhdG9yKSB7CiAgICAgICAgICAgICBpZiAoZ2xvYmFsRGF0YS0+Y2FuVXNlSklU
KCkpCkBAIC0zNTg0LDkgKzM1ODQsOSBAQCBOYXRpdmVFeGVjdXRhYmxlKiBKSVRUaHVua3M6Omhv
c3RGdW5jdGlvblN0dWIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBOYXRpdmVGdQogICAgICAg
ICAgICAgICAgIGNvZGUgPSBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoKTsKICAgICAgICAgfSBlbHNl
CiAgICAgICAgICAgICBjb2RlID0gSklUOjpjb21waWxlQ1RJTmF0aXZlQ2FsbChnbG9iYWxEYXRh
LCBmdW5jdGlvbik7Ci0gICAgICAgIGVudHJ5Lml0ZXJhdG9yLT5zZWNvbmQgPSBQYXNzV2VhazxO
YXRpdmVFeGVjdXRhYmxlPigqZ2xvYmFsRGF0YSwgTmF0aXZlRXhlY3V0YWJsZTo6Y3JlYXRlKCpn
bG9iYWxEYXRhLCBjb2RlLCBmdW5jdGlvbiwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVT
ZWxmTWFuYWdlZENvZGVSZWYoY3RpTmF0aXZlQ29uc3RydWN0KCkpLCBjYWxsSG9zdEZ1bmN0aW9u
QXNDb25zdHJ1Y3RvciwgaW50cmluc2ljKSk7CisgICAgICAgIGVudHJ5Lml0ZXJhdG9yLT52YWx1
ZSA9IFBhc3NXZWFrPE5hdGl2ZUV4ZWN1dGFibGU+KCpnbG9iYWxEYXRhLCBOYXRpdmVFeGVjdXRh
YmxlOjpjcmVhdGUoKmdsb2JhbERhdGEsIGNvZGUsIGZ1bmN0aW9uLCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihjdGlOYXRpdmVDb25zdHJ1Y3QoKSksIGNh
bGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yLCBpbnRyaW5zaWMpKTsKICAgICB9Ci0gICAgcmV0
dXJuIGVudHJ5Lml0ZXJhdG9yLT5zZWNvbmQuZ2V0KCk7CisgICAgcmV0dXJuIGVudHJ5Lml0ZXJh
dG9yLT52YWx1ZS5nZXQoKTsKIH0KIAogdm9pZCBKSVRUaHVua3M6OmNsZWFySG9zdEZ1bmN0aW9u
U3R1YnMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCmluZGV4IDY5NDM5
NzdhODVhNmZmN2M5MTFhNzJhNGM4MzliNjljMWQ3NDM4YWQuLjAzYzY2NWM3ZjU2MDAyZjY0Nzkx
YmEyOGRjNTFiZWFkNDZiYjEzZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
YXJzZXIvUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNl
ci5jcHAKQEAgLTEzMjUsMTAgKzEzMjUsMTAgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVy
PiBUcmVlRXhwcmVzc2lvbiBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VTdHJpY3RPYmplY3QKICAg
ICAgICAgaWYgKCFtX3N5bnRheEFscmVhZHlWYWxpZGF0ZWQpIHsKICAgICAgICAgICAgIE9iamVj
dFZhbGlkYXRpb25NYXA6OkFkZFJlc3VsdCBwcm9wZXJ0eUVudHJ5ID0gb2JqZWN0VmFsaWRhdG9y
LmFkZChjb250ZXh0LmdldE5hbWUocHJvcGVydHkpLmltcGwoKSwgY29udGV4dC5nZXRUeXBlKHBy
b3BlcnR5KSk7CiAgICAgICAgICAgICBpZiAoIXByb3BlcnR5RW50cnkuaXNOZXdFbnRyeSkgewot
ICAgICAgICAgICAgICAgIGZhaWxJZlRydWUocHJvcGVydHlFbnRyeS5pdGVyYXRvci0+c2Vjb25k
ID09IFByb3BlcnR5Tm9kZTo6Q29uc3RhbnQpOworICAgICAgICAgICAgICAgIGZhaWxJZlRydWUo
cHJvcGVydHlFbnRyeS5pdGVyYXRvci0+dmFsdWUgPT0gUHJvcGVydHlOb2RlOjpDb25zdGFudCk7
CiAgICAgICAgICAgICAgICAgZmFpbElmVHJ1ZShjb250ZXh0LmdldFR5cGUocHJvcGVydHkpID09
IFByb3BlcnR5Tm9kZTo6Q29uc3RhbnQpOwotICAgICAgICAgICAgICAgIGZhaWxJZlRydWUoY29u
dGV4dC5nZXRUeXBlKHByb3BlcnR5KSAmIHByb3BlcnR5RW50cnkuaXRlcmF0b3ItPnNlY29uZCk7
Ci0gICAgICAgICAgICAgICAgcHJvcGVydHlFbnRyeS5pdGVyYXRvci0+c2Vjb25kIHw9IGNvbnRl
eHQuZ2V0VHlwZShwcm9wZXJ0eSk7CisgICAgICAgICAgICAgICAgZmFpbElmVHJ1ZShjb250ZXh0
LmdldFR5cGUocHJvcGVydHkpICYgcHJvcGVydHlFbnRyeS5pdGVyYXRvci0+dmFsdWUpOworICAg
ICAgICAgICAgICAgIHByb3BlcnR5RW50cnkuaXRlcmF0b3ItPnZhbHVlIHw9IGNvbnRleHQuZ2V0
VHlwZShwcm9wZXJ0eSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgdGFpbCA9
IGNvbnRleHQuY3JlYXRlUHJvcGVydHlMaXN0KG1fbGV4ZXItPmxhc3RMaW5lTnVtYmVyKCksIHBy
b3BlcnR5LCB0YWlsKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxl
ci9Qcm9maWxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlLmNw
cAppbmRleCA0OWQ2ZGU5N2E5OGFiMGM1M2ZlZWE2NWIzODk2OWZkMzAxMTMzOTk3Li4xM2RmODM3
ZjIzNTI3MGUxNDI0MTc1MzJlZDgxNTc0Njk5ZTdiYThlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3Byb2ZpbGVyL1Byb2ZpbGUuY3BwCkBAIC0xMDcsMjggKzEwNywyOCBAQCB2b2lkIFByb2Zp
bGU6OmRlYnVnUHJpbnREYXRhKCkgY29uc3QKICAgICBtX2hlYWQtPmRlYnVnUHJpbnREYXRhKDAp
OwogfQogCi10eXBlZGVmIHBhaXI8U3RyaW5nSW1wbCosIHVuc2lnbmVkPiBOYW1lQ291bnRQYWly
OwordHlwZWRlZiBXVEY6Okhhc2hNYXBFbnRyeTxGdW5jdGlvbkNhbGxIYXNoQ291bnQ6OlZhbHVl
VHlwZSwgdW5zaWduZWQ+IE5hbWVDb3VudEVudHJ5OwogCi1zdGF0aWMgaW5saW5lIGJvb2wgZnVu
Y3Rpb25OYW1lQ291bnRQYWlyQ29tcGFyYXRvcihjb25zdCBOYW1lQ291bnRQYWlyJiBhLCBjb25z
dCBOYW1lQ291bnRQYWlyJiBiKQorc3RhdGljIGlubGluZSBib29sIGZ1bmN0aW9uTmFtZUNvdW50
RW50cnlDb21wYXJhdG9yKGNvbnN0IE5hbWVDb3VudEVudHJ5JiBhLCBjb25zdCBOYW1lQ291bnRF
bnRyeSYgYikKIHsKLSAgICByZXR1cm4gYS5zZWNvbmQgPiBiLnNlY29uZDsKKyAgICByZXR1cm4g
YS52YWx1ZSA+IGIudmFsdWU7CiB9CiAKIHZvaWQgUHJvZmlsZTo6ZGVidWdQcmludERhdGFTYW1w
bGVTdHlsZSgpIGNvbnN0CiB7Ci0gICAgdHlwZWRlZiBWZWN0b3I8TmFtZUNvdW50UGFpcj4gTmFt
ZUNvdW50UGFpclZlY3RvcjsKKyAgICB0eXBlZGVmIFZlY3RvcjxOYW1lQ291bnRFbnRyeT4gTmFt
ZUNvdW50RW50cnlWZWN0b3I7CiAKICAgICBGdW5jdGlvbkNhbGxIYXNoQ291bnQgY291bnRlZEZ1
bmN0aW9uczsKICAgICBkYXRhTG9nKCJDYWxsIGdyYXBoOlxuIik7CiAgICAgbV9oZWFkLT5kZWJ1
Z1ByaW50RGF0YVNhbXBsZVN0eWxlKDAsIGNvdW50ZWRGdW5jdGlvbnMpOwogCiAgICAgZGF0YUxv
ZygiXG5Ub3RhbCBudW1iZXIgaW4gc3RhY2s6XG4iKTsKLSAgICBOYW1lQ291bnRQYWlyVmVjdG9y
IHNvcnRlZEZ1bmN0aW9ucyhjb3VudGVkRnVuY3Rpb25zLnNpemUoKSk7CisgICAgTmFtZUNvdW50
RW50cnlWZWN0b3Igc29ydGVkRnVuY3Rpb25zKGNvdW50ZWRGdW5jdGlvbnMuc2l6ZSgpKTsKICAg
ICBjb3B5VG9WZWN0b3IoY291bnRlZEZ1bmN0aW9ucywgc29ydGVkRnVuY3Rpb25zKTsKIAotICAg
IHN0ZDo6c29ydChzb3J0ZWRGdW5jdGlvbnMuYmVnaW4oKSwgc29ydGVkRnVuY3Rpb25zLmVuZCgp
LCBmdW5jdGlvbk5hbWVDb3VudFBhaXJDb21wYXJhdG9yKTsKLSAgICBmb3IgKE5hbWVDb3VudFBh
aXJWZWN0b3I6Oml0ZXJhdG9yIGl0ID0gc29ydGVkRnVuY3Rpb25zLmJlZ2luKCk7IGl0ICE9IHNv
cnRlZEZ1bmN0aW9ucy5lbmQoKTsgKytpdCkKLSAgICAgICAgZGF0YUxvZygiICAgICAgICAlLTEy
ZCVzXG4iLCAoKml0KS5zZWNvbmQsIFVTdHJpbmcoKCppdCkuZmlyc3QpLnV0ZjgoKS5kYXRhKCkp
OworICAgIHN0ZDo6c29ydChzb3J0ZWRGdW5jdGlvbnMuYmVnaW4oKSwgc29ydGVkRnVuY3Rpb25z
LmVuZCgpLCBmdW5jdGlvbk5hbWVDb3VudEVudHJ5Q29tcGFyYXRvcik7CisgICAgZm9yIChOYW1l
Q291bnRFbnRyeVZlY3Rvcjo6aXRlcmF0b3IgaXQgPSBzb3J0ZWRGdW5jdGlvbnMuYmVnaW4oKTsg
aXQgIT0gc29ydGVkRnVuY3Rpb25zLmVuZCgpOyArK2l0KQorICAgICAgICBkYXRhTG9nKCIgICAg
ICAgICUtMTJkJXNcbiIsICgqaXQpLnZhbHVlLCBVU3RyaW5nKCgqaXQpLmtleSkudXRmOCgpLmRh
dGEoKSk7CiAKICAgICBkYXRhTG9nKCJcblNvcnQgYnkgdG9wIG9mIHN0YWNrLCBzYW1lIGNvbGxh
cHNlZCAod2hlbiA+PSA1KTpcbiIpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSWRlbnRpZmllci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JZGVudGlmaWVyLmNwcAppbmRleCAxODJiY2M0NjIwMjJiNGVjMmNiYWM2ODU1YzUwMjlmNjRj
NzExZmZmLi45MjJjYWEyYjYwMDAwYmNjMTI3YzMzYzA5NTFmODNmZWRmNmIzMjUzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmNwcApAQCAtMTA4LDcgKzEw
OCw3IEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gSWRlbnRpZmllcjo6YWRkKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSwgY29uc3QgY2hhciogYykKIAogICAgIGNvbnN0IExpdGVyYWxJZGVudGlm
aWVyVGFibGU6Oml0ZXJhdG9yJiBpdGVyID0gbGl0ZXJhbElkZW50aWZpZXJUYWJsZS5maW5kKGMp
OwogICAgIGlmIChpdGVyICE9IGxpdGVyYWxJZGVudGlmaWVyVGFibGUuZW5kKCkpCi0gICAgICAg
IHJldHVybiBpdGVyLT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBpdGVyLT52YWx1ZTsKIAogICAg
IEhhc2hTZXQ8U3RyaW5nSW1wbCo+OjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gaWRlbnRpZmllclRh
YmxlLmFkZDxjb25zdCBMQ2hhciosIElkZW50aWZpZXJDU3RyaW5nVHJhbnNsYXRvcj4ocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KGMpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5jcHAKaW5kZXggM2UwNTczOGViNTRjN2IwNGNlZjcyYzE1
YjNiYzI3ZTkzOGE4YzU1NC4uOWVjNjliM2M2MTI1MTNkNDMzZDA2ZmE5ODViZDNhMDM1ZDA5ZWE3
ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9u
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uY3Bw
CkBAIC0xMjIsMTEgKzEyMiwxMSBAQCB2b2lkIEpTQWN0aXZhdGlvbjo6Z2V0T3duUHJvcGVydHlO
YW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcgogICAgIEpTQWN0
aXZhdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FjdGl2YXRpb24qPihvYmplY3QpOwogICAg
IFN5bWJvbFRhYmxlOjpjb25zdF9pdGVyYXRvciBlbmQgPSB0aGlzT2JqZWN0LT5zeW1ib2xUYWJs
ZSgpLmVuZCgpOwogICAgIGZvciAoU3ltYm9sVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdGhp
c09iamVjdC0+c3ltYm9sVGFibGUoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgaWYgKGl0LT5zZWNvbmQuZ2V0QXR0cmlidXRlcygpICYgRG9udEVudW0gJiYgbW9kZSAhPSBJ
bmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKQorICAgICAgICBpZiAoaXQtPnZhbHVlLmdldEF0dHJp
YnV0ZXMoKSAmIERvbnRFbnVtICYmIG1vZGUgIT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykK
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoaXQtPnNlY29uZC5nZXRJbmRleCgp
ID49IHRoaXNPYmplY3QtPm1fbnVtQ2FwdHVyZWRWYXJzKQorICAgICAgICBpZiAoaXQtPnZhbHVl
LmdldEluZGV4KCkgPj0gdGhpc09iamVjdC0+bV9udW1DYXB0dXJlZFZhcnMpCiAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihleGVjLCBp
dC0+Zmlyc3QuZ2V0KCkpKTsKKyAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihl
eGVjLCBpdC0+a2V5LmdldCgpKSk7CiAgICAgfQogICAgIC8vIFNraXAgdGhlIEpTVmFyaWFibGVP
YmplY3QgaW1wbGVtZW50YXRpb24gb2YgZ2V0T3duUHJvcGVydHlOYW1lcwogICAgIEpTT2JqZWN0
OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1v
ZGUpOwpAQCAtMTM5LDcgKzEzOSw3IEBAIGlubGluZSBib29sIEpTQWN0aXZhdGlvbjo6c3ltYm9s
VGFibGVQdXRXaXRoQXR0cmlidXRlcyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsCiAgICAgU3lt
Ym9sVGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSBzeW1ib2xUYWJsZSgpLmZpbmQocHJvcGVydHlOYW1l
LmltcGwoKSk7CiAgICAgaWYgKGl0ZXIgPT0gc3ltYm9sVGFibGUoKS5lbmQoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIFN5bWJvbFRhYmxlRW50cnkmIGVudHJ5ID0gaXRlci0+c2Vjb25k
OworICAgIFN5bWJvbFRhYmxlRW50cnkmIGVudHJ5ID0gaXRlci0+dmFsdWU7CiAgICAgQVNTRVJU
KCFlbnRyeS5pc051bGwoKSk7CiAgICAgaWYgKGVudHJ5LmdldEluZGV4KCkgPj0gbV9udW1DYXB0
dXJlZFZhcnMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBcnJheS5jcHAKaW5kZXggMGZmYTA3NmNlYWYwOTYwNGZhYmFiYzBmNjk1N2MxNTZm
MWYxYWUzMS4uMjA2NWU3NjBiYmViNmUyZTljNDc4ZDI3YTBlYTQ0NGViNDM4YjViMCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKQEAgLTIxMCw3ICsyMTAsNyBA
QCBpbmxpbmUgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6QWRkUmVzdWx0IFNwYXJzZUFycmF5VmFsdWVN
YXA6OmFkZChKU0FycmF5KiBhcnJheSwgdQogaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1h
cDo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJheSogYXJyYXksIHVuc2lnbmVkIGksIEpTVmFs
dWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCiB7CiAgICAgQWRkUmVzdWx0IHJlc3VsdCA9IGFk
ZChhcnJheSwgaSk7Ci0gICAgU3BhcnNlQXJyYXlFbnRyeSYgZW50cnkgPSByZXN1bHQuaXRlcmF0
b3ItPnNlY29uZDsKKyAgICBTcGFyc2VBcnJheUVudHJ5JiBlbnRyeSA9IHJlc3VsdC5pdGVyYXRv
ci0+dmFsdWU7CiAKICAgICAvLyBUbyBzYXZlIGEgc2VwYXJhdGUgZmluZCAmIGFkZCwgd2UgZmly
c3QgYWx3YXlzIGFkZCB0byB0aGUgc3BhcnNlIG1hcC4KICAgICAvLyBJbiB0aGUgdW5jb21tb24g
Y2FzZSB0aGF0IHRoaXMgaXMgYSBuZXcgcHJvcGVydHksIGFuZCB0aGUgYXJyYXkgaXMgbm90CkBA
IC0yNTMsNyArMjUzLDcgQEAgaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6cHV0KEV4
ZWNTdGF0ZSogZXhlYywgSlNBcnJheSogYXJyYXksIHVuc2lnbmVkIGkKIGlubGluZSBib29sIFNw
YXJzZUFycmF5VmFsdWVNYXA6OnB1dERpcmVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTQXJyYXkqIGFy
cmF5LCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQogewogICAg
IEFkZFJlc3VsdCByZXN1bHQgPSBhZGQoYXJyYXksIGkpOwotICAgIFNwYXJzZUFycmF5RW50cnkm
IGVudHJ5ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgU3BhcnNlQXJyYXlFbnRyeSYg
ZW50cnkgPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogCiAgICAgLy8gVG8gc2F2ZSBhIHNlcGFy
YXRlIGZpbmQgJiBhZGQsIHdlIGZpcnN0IGFsd2F5cyBhZGQgdG8gdGhlIHNwYXJzZSBtYXAuCiAg
ICAgLy8gSW4gdGhlIHVuY29tbW9uIGNhc2UgdGhhdCB0aGlzIGlzIGEgbmV3IHByb3BlcnR5LCBh
bmQgdGhlIGFycmF5IGlzIG5vdApAQCAtMzE5LDcgKzMxOSw3IEBAIGlubGluZSB2b2lkIFNwYXJz
ZUFycmF5VmFsdWVNYXA6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgaXRlcmF0b3IgZW5kID0gbV9tYXAuZW5kKCk7CiAgICAgZm9yIChpdGVyYXRvciBpdCA9IG1f
bWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgdmlzaXRvci5hcHBlbmQoJml0
LT5zZWNvbmQpOworICAgICAgICB2aXNpdG9yLmFwcGVuZCgmaXQtPnZhbHVlKTsKIH0KIAogdm9p
ZCBKU0FycmF5OjphbGxvY2F0ZVNwYXJzZU1hcChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCkBA
IC0zNTUsNyArMzU1LDcgQEAgdm9pZCBKU0FycmF5OjplbnRlckRpY3Rpb25hcnlNb2RlKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSkKICAgICAgICAgLy8gVGhpcyB3aWxsIGFsd2F5cyBiZSBhIG5l
dyBlbnRyeSBpbiB0aGUgbWFwLCBzbyBubyBuZWVkIHRvIGNoZWNrIHdlIGNhbiB3cml0ZSwKICAg
ICAgICAgLy8gYW5kIGF0dHJpYnV0ZXMgYXJlIGRlZmF1bHQgc28gbm8gbmVlZCB0byBzZXQgdGhl
bS4KICAgICAgICAgaWYgKHZhbHVlKQotICAgICAgICAgICAgbWFwLT5hZGQodGhpcywgaSkuaXRl
cmF0b3ItPnNlY29uZC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgICAgICAgICAg
bWFwLT5hZGQodGhpcywgaSkuaXRlcmF0b3ItPnZhbHVlLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2
YWx1ZSk7CiAgICAgfQogCiAgICAgdm9pZCogbmV3UmF3U3RvcmFnZSA9IDA7CkBAIC00MzEsNyAr
NDMxLDcgQEAgYm9vbCBKU0FycmF5OjpkZWZpbmVPd25OdW1lcmljUHJvcGVydHkoRXhlY1N0YXRl
KiBleGVjLCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHkKIAogICAgIC8vIDEuIExldCBjdXJyZW50
IGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tHZXRPd25Qcm9wZXJ0eV1dIGludGVybmFs
IG1ldGhvZCBvZiBPIHdpdGggcHJvcGVydHkgbmFtZSBQLgogICAgIFNwYXJzZUFycmF5VmFsdWVN
YXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtYXAtPmFkZCh0aGlzLCBpbmRleCk7Ci0gICAgU3BhcnNl
QXJyYXlFbnRyeSogZW50cnlJbk1hcCA9ICZyZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBT
cGFyc2VBcnJheUVudHJ5KiBlbnRyeUluTWFwID0gJnJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAK
ICAgICAvLyAyLiBMZXQgZXh0ZW5zaWJsZSBiZSB0aGUgdmFsdWUgb2YgdGhlIFtbRXh0ZW5zaWJs
ZV1dIGludGVybmFsIHByb3BlcnR5IG9mIE8uCiAgICAgLy8gMy4gSWYgY3VycmVudCBpcyB1bmRl
ZmluZWQgYW5kIGV4dGVuc2libGUgaXMgZmFsc2UsIHRoZW4gUmVqZWN0LgpAQCAtNjYzLDcgKzY2
Myw3IEBAIGJvb2wgSlNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0NlbGwqIGNl
bGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQKICAgICB9IGVsc2UgaWYgKFNwYXJzZUFycmF5
VmFsdWVNYXAqIG1hcCA9IHRoaXNPYmplY3QtPm1fc3BhcnNlVmFsdWVNYXApIHsKICAgICAgICAg
U3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAtPmZpbmQoaSk7CiAgICAgICAg
IGlmIChpdCAhPSBtYXAtPm5vdEZvdW5kKCkpIHsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQuZ2V0
KHNsb3QpOworICAgICAgICAgICAgaXQtPnZhbHVlLmdldChzbG90KTsKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQpAQCAtNzExLDcgKzcxMSw3IEBAIGJvb2wgSlNB
cnJheTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QKICAgICAgICAgfSBlbHNlIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBt
YXAgPSB0aGlzT2JqZWN0LT5tX3NwYXJzZVZhbHVlTWFwKSB7CiAgICAgICAgICAgICBTcGFyc2VB
cnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+ZmluZChpKTsKICAgICAgICAgICAgIGlm
IChpdCAhPSBtYXAtPm5vdEZvdW5kKCkpIHsKLSAgICAgICAgICAgICAgICBpdC0+c2Vjb25kLmdl
dChkZXNjcmlwdG9yKTsKKyAgICAgICAgICAgICAgICBpdC0+dmFsdWUuZ2V0KGRlc2NyaXB0b3Ip
OwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9
CkBAIC04NDQsNyArODQ0LDcgQEAgdm9pZCBKU0FycmF5OjpwdXRCeUluZGV4QmV5b25kVmVjdG9y
TGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZQogICAgIFdyaXRlQmFy
cmllcjxVbmtub3duPiogdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7CiAgICAgU3BhcnNlQXJy
YXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKICAgICBmb3IgKFNw
YXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCi0gICAgICAgIHZlY3RvcltpdC0+Zmlyc3RdLnNldChnbG9iYWxEYXRhLCB0
aGlzLCBpdC0+c2Vjb25kLmdldE5vblNwYXJzZU1vZGUoKSk7CisgICAgICAgIHZlY3RvcltpdC0+
a2V5XS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgaXQtPnZhbHVlLmdldE5vblNwYXJzZU1vZGUoKSk7
CiAgICAgZGVhbGxvY2F0ZVNwYXJzZU1hcCgpOwogCiAgICAgLy8gU3RvcmUgdGhlIG5ldyBwcm9w
ZXJ0eSBpbnRvIHRoZSB2ZWN0b3IuCkBAIC05MTQsNyArOTE0LDcgQEAgYm9vbCBKU0FycmF5Ojpw
dXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVk
IGksIEpTVmEKICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvciA9IHN0b3JhZ2UtPm1f
dmVjdG9yOwogICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1h
cC0+ZW5kKCk7CiAgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICB2ZWN0b3JbaXQtPmZp
cnN0XS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCkp
OworICAgICAgICB2ZWN0b3JbaXQtPmtleV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIGl0LT52YWx1
ZS5nZXROb25TcGFyc2VNb2RlKCkpOwogICAgIGRlYWxsb2NhdGVTcGFyc2VNYXAoKTsKIAogICAg
IC8vIFN0b3JlIHRoZSBuZXcgcHJvcGVydHkgaW50byB0aGUgdmVjdG9yLgpAQCAtOTU4LDcgKzk1
OCw3IEBAIGJvb2wgSlNBcnJheTo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCogY2VsbCwg
RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpKQogICAgIH0gZWxzZSBpZiAoU3BhcnNlQXJyYXlW
YWx1ZU1hcCogbWFwID0gdGhpc09iamVjdC0+bV9zcGFyc2VWYWx1ZU1hcCkgewogICAgICAgICBT
cGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+ZmluZChpKTsKICAgICAgICAg
aWYgKGl0ICE9IG1hcC0+bm90Rm91bmQoKSkgewotICAgICAgICAgICAgaWYgKGl0LT5zZWNvbmQu
YXR0cmlidXRlcyAmIERvbnREZWxldGUpCisgICAgICAgICAgICBpZiAoaXQtPnZhbHVlLmF0dHJp
YnV0ZXMgJiBEb250RGVsZXRlKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgICAgIG1hcC0+cmVtb3ZlKGl0KTsKICAgICAgICAgfQpAQCAtOTk2LDggKzk5Niw4IEBAIHZv
aWQgSlNBcnJheTo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtCiAgICAgICAgIAogICAgICAgICBTcGFyc2VBcnJheVZhbHVl
TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwogICAgICAgICBmb3IgKFNwYXJz
ZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3Bl
cnRpZXMgfHwgIShpdC0+c2Vjb25kLmF0dHJpYnV0ZXMgJiBEb250RW51bSkpCi0gICAgICAgICAg
ICAgICAga2V5cy5hcHBlbmQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGl0LT5maXJzdCkpOworICAg
ICAgICAgICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcyB8fCAhKGl0LT52
YWx1ZS5hdHRyaWJ1dGVzICYgRG9udEVudW0pKQorICAgICAgICAgICAgICAgIGtleXMuYXBwZW5k
KHN0YXRpY19jYXN0PHVuc2lnbmVkPihpdC0+a2V5KSk7CiAgICAgICAgIH0KIAogICAgICAgICBx
c29ydChrZXlzLmJlZ2luKCksIGtleXMuc2l6ZSgpLCBzaXplb2YodW5zaWduZWQpLCBjb21wYXJl
S2V5c0ZvclFTb3J0KTsKQEAgLTExOTAsNyArMTE5MCw3IEBAIGJvb2wgSlNBcnJheTo6c2V0TGVu
Z3RoKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgbmV3TGVuZ3RoLCBib29sIHRocm93RXhjZXB0
aW9uCiAgICAgICAgICAgICBrZXlzLnJlc2VydmVDYXBhY2l0eShtaW4obWFwLT5zaXplKCksIHN0
YXRpY19jYXN0PHNpemVfdD4obGVuZ3RoIC0gbmV3TGVuZ3RoKSkpOwogICAgICAgICAgICAgU3Bh
cnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKICAgICAg
ICAgICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAt
PmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu
ZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGl0LT5maXJzdCk7CisgICAgICAgICAgICAgICAg
dW5zaWduZWQgaW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaXQtPmtleSk7CiAgICAgICAg
ICAgICAgICAgaWYgKGluZGV4IDwgbGVuZ3RoICYmIGluZGV4ID49IG5ld0xlbmd0aCkKICAgICAg
ICAgICAgICAgICAgICAga2V5cy5hcHBlbmQoaW5kZXgpOwogICAgICAgICAgICAgfQpAQCAtMTIw
NSw3ICsxMjA1LDcgQEAgYm9vbCBKU0FycmF5OjpzZXRMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCB1
bnNpZ25lZCBuZXdMZW5ndGgsIGJvb2wgdGhyb3dFeGNlcHRpb24KICAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgaW5kZXggPSBrZXlzWy0taV07CiAgICAgICAgICAgICAgICAgICAgIFNwYXJz
ZUFycmF5VmFsdWVNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLT5maW5kKGluZGV4KTsKICAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKGl0ICE9IG1hcC0+bm90Rm91bmQoKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChpdC0+c2Vjb25kLmF0dHJpYnV0ZXMgJiBEb250RGVsZXRlKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChpdC0+dmFsdWUuYXR0cmlidXRlcyAmIERvbnREZWxldGUpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UtPm1fbGVuZ3RoID0gaW5kZXggKyAxOwogICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwg
IlVuYWJsZSB0byBkZWxldGUgcHJvcGVydHkuIik7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAg
LTE2NzAsNyArMTY3MCw3IEBAIHZvaWQgSlNBcnJheTo6c29ydChFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgY29tcGFyZUZ1bmN0aW9uLCBDYWxsVHlwZSBjYWxsVHlwZSwKIAogICAgICAgICBTcGFy
c2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwogICAgICAg
ICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1f
bm9kZXNbbnVtRGVmaW5lZF0udmFsdWUgPSBpdC0+c2Vjb25kLmdldE5vblNwYXJzZU1vZGUoKTsK
KyAgICAgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbbnVtRGVmaW5lZF0udmFsdWUg
PSBpdC0+dmFsdWUuZ2V0Tm9uU3BhcnNlTW9kZSgpOwogICAgICAgICAgICAgdHJlZS5pbnNlcnQo
bnVtRGVmaW5lZCk7CiAgICAgICAgICAgICArK251bURlZmluZWQ7CiAgICAgICAgIH0KQEAgLTE3
ODUsNyArMTc4NSw3IEBAIHVuc2lnbmVkIEpTQXJyYXk6OmNvbXBhY3RGb3JTb3J0aW5nKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSkKIAogICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25z
dF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwogICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFs
dWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
Ci0gICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltudW1EZWZpbmVkKytdLnNldFdpdGhvdXRX
cml0ZUJhcnJpZXIoaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCkpOworICAgICAgICAgICAg
c3RvcmFnZS0+bV92ZWN0b3JbbnVtRGVmaW5lZCsrXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGl0
LT52YWx1ZS5nZXROb25TcGFyc2VNb2RlKCkpOwogCiAgICAgICAgIGRlYWxsb2NhdGVTcGFyc2VN
YXAoKTsKICAgICB9CkBAIC0xODQyLDEzICsxODQyLDEzIEBAIHZvaWQgSlNBcnJheTo6Y2hlY2tD
b25zaXN0ZW5jeShDb25zaXN0ZW5jeUNoZWNrVHlwZSB0eXBlKQogICAgIGlmIChtX3NwYXJzZVZh
bHVlTWFwKSB7CiAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1f
c3BhcnNlVmFsdWVNYXAtPmVuZCgpOwogICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6
Oml0ZXJhdG9yIGl0ID0gbV9zcGFyc2VWYWx1ZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGl0LT5maXJzdDsKKyAgICAgICAgICAg
IHVuc2lnbmVkIGluZGV4ID0gaXQtPmtleTsKICAgICAgICAgICAgIEFTU0VSVChpbmRleCA8IHN0
b3JhZ2UtPm1fbGVuZ3RoKTsKICAgICAgICAgICAgIEFTU0VSVChpbmRleCA+PSBzdG9yYWdlLT5t
X3ZlY3Rvckxlbmd0aCk7CiAgICAgICAgICAgICBBU1NFUlQoaW5kZXggPD0gTUFYX0FSUkFZX0lO
REVYKTsKLSAgICAgICAgICAgIEFTU0VSVChpdC0+c2Vjb25kKTsKKyAgICAgICAgICAgIEFTU0VS
VChpdC0+dmFsdWUpOwogICAgICAgICAgICAgaWYgKHR5cGUgIT0gRGVzdHJ1Y3RvckNvbnNpc3Rl
bmN5Q2hlY2spCi0gICAgICAgICAgICAgICAgaXQtPnNlY29uZC5pc1VuZGVmaW5lZCgpOyAvLyBM
aWtlbHkgdG8gY3Jhc2ggaWYgdGhlIG9iamVjdCB3YXMgZGVhbGxvY2F0ZWQuCisgICAgICAgICAg
ICAgICAgaXQtPnZhbHVlLmlzVW5kZWZpbmVkKCk7IC8vIExpa2VseSB0byBjcmFzaCBpZiB0aGUg
b2JqZWN0IHdhcyBkZWFsbG9jYXRlZC4KICAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFyaWFibGVPYmplY3QuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5jcHAKaW5kZXggOGNh
Njk1MDc0NTExOWMwNDk2ZjdkNmUwMWRjMWNlYzhmMjg5NGQ5OC4uN2MyZjZhM2IyNjAwZjA3YjM3
NGM0ZWViNGU5NTNjOWMzODBjN2NlMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5jcHAKQEAgLTU2LDggKzU2LDggQEAgdm9pZCBKU1Zh
cmlhYmxlT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogZXhlYywgUHIKICAgICBKU1ZhcmlhYmxlT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTVmFyaWFibGVPYmplY3QqPihvYmplY3QpOwogICAgIFN5bWJvbFRhYmxlOjpjb25zdF9pdGVy
YXRvciBlbmQgPSB0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgpLmVuZCgpOwogICAgIGZvciAoU3lt
Ym9sVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKCEoaXQtPnNlY29uZC5nZXRB
dHRyaWJ1dGVzKCkgJiBEb250RW51bSkgfHwgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVy
dGllcykpCi0gICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyKGV4ZWMsIGl0
LT5maXJzdC5nZXQoKSkpOworICAgICAgICBpZiAoIShpdC0+dmFsdWUuZ2V0QXR0cmlidXRlcygp
ICYgRG9udEVudW0pIHx8IChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpKQorICAg
ICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihleGVjLCBpdC0+a2V5LmdldCgp
KSk7CiAgICAgfQogICAgIAogICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNP
YmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5oCmluZGV4IGJjZmU0YWI4OTVmNjBhOTky
OGM0MjE5YTRiNDFkMzZlMTczYzRjYWQuLmFlM2ExZGY1ZDFlYmM3OTczNzZkZWQ1ODYyZWEyNTI1
ZjdiMzgwNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFy
aWFibGVPYmplY3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Zhcmlh
YmxlT2JqZWN0LmgKQEAgLTE0NSw3ICsxNDUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
U3ltYm9sVGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSBzeW1ib2xUYWJsZSgpLmZpbmQocHJvcGVydHlO
YW1lLmltcGwoKSk7CiAgICAgICAgIGlmIChpdGVyID09IHN5bWJvbFRhYmxlKCkuZW5kKCkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIFN5bWJvbFRhYmxlRW50cnkmIGVudHJ5
ID0gaXRlci0+c2Vjb25kOworICAgICAgICBTeW1ib2xUYWJsZUVudHJ5JiBlbnRyeSA9IGl0ZXIt
PnZhbHVlOwogICAgICAgICBBU1NFUlQoIWVudHJ5LmlzTnVsbCgpKTsKICAgICAgICAgZW50cnku
c2V0QXR0cmlidXRlcyhhdHRyaWJ1dGVzKTsKICAgICAgICAgcmVnaXN0ZXJBdChlbnRyeS5nZXRJ
bmRleCgpKS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGUuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGUuY3BwCmluZGV4IGQ1ZWRiYmM3ZjM0NmJmMjNmMjVk
MGYwMTYxY2JiZjU3M2Y0NDA1ZDAuLjQzYjQ3YWJlOTJkMzQ4YmE0NzUyMWJmMGM4MTJlMTk0N2Zi
YmRiNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENh
Y2hlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZS5j
cHAKQEAgLTM4LDcgKzM4LDcgQEAgUmVnRXhwKiBSZWdFeHBDYWNoZTo6bG9va3VwT3JDcmVhdGUo
Y29uc3QgVVN0cmluZyYgcGF0dGVyblN0cmluZywgUmVnRXhwRmxhZ3MgZmwKICAgICBSZWdFeHBL
ZXkga2V5KGZsYWdzLCBwYXR0ZXJuU3RyaW5nKTsKICAgICBSZWdFeHBDYWNoZU1hcDo6aXRlcmF0
b3IgcmVzdWx0ID0gbV93ZWFrQ2FjaGUuZmluZChrZXkpOwogICAgIGlmIChyZXN1bHQgIT0gbV93
ZWFrQ2FjaGUuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZC5nZXQoKTsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWUuZ2V0KCk7CiAgICAgUmVnRXhwKiByZWdFeHAgPSBS
ZWdFeHA6OmNyZWF0ZVdpdGhvdXRDYWNoaW5nKCptX2dsb2JhbERhdGEsIHBhdHRlcm5TdHJpbmcs
IGZsYWdzKTsKICNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCiAgICAgbV9nbG9iYWxEYXRhLT5h
ZGRSZWdFeHBUb1RyYWNlKHJlZ0V4cCk7CkBAIC04MSw3ICs4MSw3IEBAIHZvaWQgUmVnRXhwQ2Fj
aGU6OmludmFsaWRhdGVDb2RlKCkKICAgICBtX25leHRFbnRyeUluU3Ryb25nQ2FjaGUgPSAwOwog
ICAgIFJlZ0V4cENhY2hlTWFwOjppdGVyYXRvciBlbmQgPSBtX3dlYWtDYWNoZS5lbmQoKTsKICAg
ICBmb3IgKFJlZ0V4cENhY2hlTWFwOjppdGVyYXRvciBwdHIgPSBtX3dlYWtDYWNoZS5iZWdpbigp
OyBwdHIgIT0gZW5kOyArK3B0cikKLSAgICAgICAgcHRyLT5zZWNvbmQtPmludmFsaWRhdGVDb2Rl
KCk7CisgICAgICAgIHB0ci0+dmFsdWUtPmludmFsaWRhdGVDb2RlKCk7CiB9CiAKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ01hcC5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha0dDTWFwLmgKaW5kZXggZjAxYTBjODI2YjFjNDdm
Nzc0YmEzNzFiMzMyYzZhZTNkNzRiYzgwNS4uMjUyZTg0ZjkwYWE2YjJjNWVlMjZkZjdjODI2Zjk1
MDE1ZmZmMmU2YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vh
a0dDTWFwLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha0dDTWFwLmgK
QEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogICAgICAgICB7CiAgICAgICAgIH0KICAgICAgICAg
Ci0gICAgICAgIHN0ZDo6cGFpcjxLZXlUeXBlLCBFeHRlcm5hbFR5cGU+IGdldCgpIGNvbnN0IHsg
cmV0dXJuIHN0ZDo6bWFrZV9wYWlyKG1faXRlcmF0b3ItPmZpcnN0LCBIYW5kbGVUeXBlczxNYXBw
ZWRUeXBlPjo6Z2V0RnJvbVNsb3QobV9pdGVyYXRvci0+c2Vjb25kKSk7IH0KKyAgICAgICAgc3Rk
OjpwYWlyPEtleVR5cGUsIEV4dGVybmFsVHlwZT4gZ2V0KCkgY29uc3QgeyByZXR1cm4gc3RkOjpt
YWtlX3BhaXIobV9pdGVyYXRvci0+a2V5LCBIYW5kbGVUeXBlczxNYXBwZWRUeXBlPjo6Z2V0RnJv
bVNsb3QobV9pdGVyYXRvci0+dmFsdWUpKTsgfQogICAgICAgICBzdGQ6OnBhaXI8S2V5VHlwZSwg
SGFuZGxlU2xvdD4gZ2V0U2xvdCgpIGNvbnN0IHsgcmV0dXJuICptX2l0ZXJhdG9yOyB9CiAgICAg
ICAgIAogICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpIHsgKyttX2l0ZXJhdG9yOyByZXR1
cm4gKnRoaXM7IH0KQEAgLTkwLDcgKzkwLDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgbWFw
X2l0ZXJhdG9yIGVuZCA9IG1fbWFwLmVuZCgpOwogICAgICAgICBmb3IgKG1hcF9pdGVyYXRvciBw
dHIgPSBtX21hcC5iZWdpbigpOyBwdHIgIT0gZW5kOyArK3B0cikKLSAgICAgICAgICAgIEhhbmRs
ZUhlYXA6OmhlYXBGb3IocHRyLT5zZWNvbmQpLT5kZWFsbG9jYXRlKHB0ci0+c2Vjb25kKTsKKyAg
ICAgICAgICAgIEhhbmRsZUhlYXA6OmhlYXBGb3IocHRyLT52YWx1ZSktPmRlYWxsb2NhdGUocHRy
LT52YWx1ZSk7CiAgICAgICAgIG1fbWFwLmNsZWFyKCk7CiAgICAgfQogCkBAIC0xMDcsNyArMTA3
LDcgQEAgcHVibGljOgogICAgIHZvaWQgcmVtb3ZlKGl0ZXJhdG9yIGl0ZXIpCiAgICAgewogICAg
ICAgICBBU1NFUlQoaXRlci5tX2l0ZXJhdG9yICE9IG1fbWFwLmVuZCgpKTsKLSAgICAgICAgSGFu
ZGxlU2xvdCBzbG90ID0gaXRlci5tX2l0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgIEhhbmRsZVNs
b3Qgc2xvdCA9IGl0ZXIubV9pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgIEFTU0VSVChzbG90KTsK
ICAgICAgICAgSGFuZGxlSGVhcDo6aGVhcEZvcihzbG90KS0+ZGVhbGxvY2F0ZShzbG90KTsKICAg
ICAgICAgbV9tYXAucmVtb3ZlKGl0ZXIubV9pdGVyYXRvcik7CkBAIC0xMjgsNyArMTI4LDcgQEAg
cHVibGljOgogICAgICAgICB0eXBlbmFtZSBNYXBUeXBlOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9t
YXAuYWRkKGtleSwgMCk7CiAgICAgICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkgewogICAgICAg
ICAgICAgSGFuZGxlU2xvdCBzbG90ID0gZ2xvYmFsRGF0YS5oZWFwLmhhbmRsZUhlYXAoKS0+YWxs
b2NhdGUoKTsKLSAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gc2xvdDsKKyAg
ICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBzbG90OwogICAgICAgICAgICAgSGFu
ZGxlSGVhcDo6aGVhcEZvcihzbG90KS0+bWFrZVdlYWsoc2xvdCwgdGhpcywgRmluYWxpemVyQ2Fs
bGJhY2s6OmZpbmFsaXplckNvbnRleHRGb3Ioa2V5KSk7CiAgICAgICAgICAgICBIYW5kbGVIZWFw
OjpoZWFwRm9yKHNsb3QpLT53cml0ZUJhcnJpZXIoc2xvdCwgdmFsdWUpOwogICAgICAgICAgICAg
KnNsb3QgPSB2YWx1ZTsKQEAgLTEzOSw3ICsxMzksNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9p
ZCBzZXQoaXRlcmF0b3IgaXRlciwgRXh0ZXJuYWxUeXBlIHZhbHVlKQogICAgIHsKLSAgICAgICAg
SGFuZGxlU2xvdCBzbG90ID0gaXRlci5tX2l0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgIEhhbmRs
ZVNsb3Qgc2xvdCA9IGl0ZXIubV9pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgIEFTU0VSVChzbG90
KTsKICAgICAgICAgSGFuZGxlSGVhcDo6aGVhcEZvcihzbG90KS0+d3JpdGVCYXJyaWVyKHNsb3Qs
IHZhbHVlKTsKICAgICAgICAgKnNsb3QgPSB2YWx1ZTsKQEAgLTE0OCwxMSArMTQ4LDExIEBAIHB1
YmxpYzoKICAgICB2b2lkIHNldChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IEtleVR5
cGUmIGtleSwgRXh0ZXJuYWxUeXBlIHZhbHVlKQogICAgIHsKICAgICAgICAgdHlwZW5hbWUgTWFw
VHlwZTo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fbWFwLmFkZChrZXksIDApOwotICAgICAgICBIYW5k
bGVTbG90IHNsb3QgPSByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgSGFuZGxlU2xv
dCBzbG90ID0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgaWYgKHJlc3VsdC5pc05l
d0VudHJ5KSB7CiAgICAgICAgICAgICBzbG90ID0gZ2xvYmFsRGF0YS5oZWFwLmhhbmRsZUhlYXAo
KS0+YWxsb2NhdGUoKTsKICAgICAgICAgICAgIEhhbmRsZUhlYXA6OmhlYXBGb3Ioc2xvdCktPm1h
a2VXZWFrKHNsb3QsIHRoaXMsIGtleSk7Ci0gICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNl
Y29uZCA9IHNsb3Q7CisgICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gc2xvdDsK
ICAgICAgICAgfQogICAgICAgICBIYW5kbGVIZWFwOjpoZWFwRm9yKHNsb3QpLT53cml0ZUJhcnJp
ZXIoc2xvdCwgdmFsdWUpOwogICAgICAgICAqc2xvdCA9IHZhbHVlOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1Byb2ZpbGVUcmVlTm9kZS5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rvb2xzL1Byb2ZpbGVUcmVlTm9kZS5oCmluZGV4IDlkZTM5YWQ4YTI5ODYyMmM0
MzNhNjdlYjY0YTcyMjA0ZGUxOWU2YzIuLmUyZjkzMjNhMmE1NjVmYTkyNzZkNDA5YjI5ZGI1YjNl
N2YxYzQyM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Qcm9maWxl
VHJlZU5vZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvUHJvZmlsZVRyZWVO
b2RlLmgKQEAgLTMwLDcgKzMwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIFByb2ZpbGVU
cmVlTm9kZSB7CiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUHJvZmlsZVRyZWVOb2RlPiBN
YXA7Ci0gICAgdHlwZWRlZiBzdGQ6OnBhaXI8U3RyaW5nLCBQcm9maWxlVHJlZU5vZGU+IE1hcEVu
dHJ5OworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFByb2ZpbGVUcmVlTm9kZT46OlZhbHVl
VHlwZSBNYXBFbnRyeTsKIAogcHVibGljOgogICAgIFByb2ZpbGVUcmVlTm9kZSgpCkBAIC01MSw3
ICs1MSw3IEBAIHB1YmxpYzoKICAgICAKICAgICAgICAgUHJvZmlsZVRyZWVOb2RlIG5ld0VudHJ5
OwogICAgICAgICBNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX2NoaWxkcmVuLT5hZGQoU3RyaW5n
KG5hbWUpLCBuZXdFbnRyeSk7Ci0gICAgICAgIFByb2ZpbGVUcmVlTm9kZSogY2hpbGRJbk1hcCA9
ICZyZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgUHJvZmlsZVRyZWVOb2RlKiBjaGls
ZEluTWFwID0gJnJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgICsrY2hpbGRJbk1hcC0+
bV9jb3VudDsKICAgICAgICAgcmV0dXJuIGNoaWxkSW5NYXA7CiAgICAgfQpAQCAtNzIsNyArNzIs
NyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgdWludDY0X3QgY2hp
bGRDb3VudCA9IDA7CiAgICAgICAgIGZvciAoTWFwOjppdGVyYXRvciBpdCA9IG1fY2hpbGRyZW4t
PmJlZ2luKCk7IGl0ICE9IG1fY2hpbGRyZW4tPmVuZCgpOyArK2l0KQotICAgICAgICAgICAgY2hp
bGRDb3VudCArPSBpdC0+c2Vjb25kLmNvdW50KCk7CisgICAgICAgICAgICBjaGlsZENvdW50ICs9
IGl0LT52YWx1ZS5jb3VudCgpOwogICAgICAgICByZXR1cm4gY2hpbGRDb3VudDsKICAgICB9CiAg
ICAgCkBAIC05NywxOSArOTcsMTkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBpbmRlbnQ7ICsraSkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAg
Iik7CiAgICAgICAgICAgICBkYXRhTG9nKCIlIDhsbGQ6ICVzICglbGxkIHN0YWNrIHRvcClcbiIs
Ci0gICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihlbnRyeS0+c2Vjb25kLmNv
dW50KCkpLAotICAgICAgICAgICAgICAgIGVudHJ5LT5maXJzdC51dGY4KCkuZGF0YSgpLAotICAg
ICAgICAgICAgICAgIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oZW50cnktPnNlY29uZC5jb3VudCgp
IC0gZW50cnktPnNlY29uZC5jaGlsZENvdW50KCkpKTsKKyAgICAgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxsb25nIGxvbmc+KGVudHJ5LT52YWx1ZS5jb3VudCgpKSwKKyAgICAgICAgICAgICAgICBl
bnRyeS0+a2V5LnV0ZjgoKS5kYXRhKCksCisgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8bG9u
ZyBsb25nPihlbnRyeS0+dmFsdWUuY291bnQoKSAtIGVudHJ5LT52YWx1ZS5jaGlsZENvdW50KCkp
KTsKIAogICAgICAgICAgICAgLy8gUmVjdXJzaXZlbHkgZHVtcCB0aGUgY2hpbGQgbm9kZXMuCi0g
ICAgICAgICAgICBlbnRyeS0+c2Vjb25kLmR1bXBJbnRlcm5hbChpbmRlbnQgKyAxKTsKKyAgICAg
ICAgICAgIGVudHJ5LT52YWx1ZS5kdW1wSW50ZXJuYWwoaW5kZW50ICsgMSk7CiAgICAgICAgIH0K
ICAgICB9CiAKICAgICBzdGF0aWMgaW50IGNvbXBhcmVFbnRyaWVzKGNvbnN0IHZvaWQqIGEsIGNv
bnN0IHZvaWQqIGIpCiAgICAgewotICAgICAgICB1aW50NjRfdCBkYSA9ICgqc3RhdGljX2Nhc3Q8
TWFwRW50cnkqIGNvbnN0ICo+KGEpKS0+c2Vjb25kLmNvdW50KCk7Ci0gICAgICAgIHVpbnQ2NF90
IGRiID0gKCpzdGF0aWNfY2FzdDxNYXBFbnRyeSogY29uc3QgKj4oYikpLT5zZWNvbmQuY291bnQo
KTsKKyAgICAgICAgdWludDY0X3QgZGEgPSAoKnN0YXRpY19jYXN0PE1hcEVudHJ5KiBjb25zdCAq
PihhKSktPnZhbHVlLmNvdW50KCk7CisgICAgICAgIHVpbnQ2NF90IGRiID0gKCpzdGF0aWNfY2Fz
dDxNYXBFbnRyeSogY29uc3QgKj4oYikpLT52YWx1ZS5jb3VudCgpOwogICAgICAgICByZXR1cm4g
KGRhIDwgZGIpIC0gKGRhID4gZGIpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvSGFzaENvdW50ZWRTZXQuaCBiL1NvdXJjZS9XVEYvd3RmL0hhc2hDb3VudGVkU2V0LmgKaW5k
ZXggZDdkOWU0M2E5YTU1YTFmZGZhODgzZjc4OTdhMTA3Nzk5YTVjZmY3NC4uNGY5NmEzOTk1MmZm
NTMwZmQ2Mzk4ZWJjYThhN2ZkYjYyMTRiYTFmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYv
SGFzaENvdW50ZWRTZXQuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoQ291bnRlZFNldC5oCkBA
IC0xNDYsNyArMTQ2LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgaW5saW5lIHR5cGVuYW1lIEhh
c2hDb3VudGVkU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+OjpBZGRSZXN1bHQgSGFz
aENvdW50ZWRTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OmFkZChjb25zdCBWYWx1
ZVR5cGUgJnZhbHVlKQogICAgIHsKICAgICAgICAgQWRkUmVzdWx0IHJlc3VsdCA9IG1faW1wbC5h
ZGQodmFsdWUsIDApOwotICAgICAgICArK3Jlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgICAg
ICArK3Jlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAg
fQogICAgIApAQCAtMTYyLDExICsxNjIsMTEgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIGlm
IChpdCA9PSBlbmQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICB1bnNp
Z25lZCBvbGRWYWwgPSBpdC0+c2Vjb25kOworICAgICAgICB1bnNpZ25lZCBvbGRWYWwgPSBpdC0+
dmFsdWU7CiAgICAgICAgIEFTU0VSVChvbGRWYWwpOwogICAgICAgICB1bnNpZ25lZCBuZXdWYWwg
PSBvbGRWYWwgLSAxOwogICAgICAgICBpZiAobmV3VmFsKSB7Ci0gICAgICAgICAgICBpdC0+c2Vj
b25kID0gbmV3VmFsOworICAgICAgICAgICAgaXQtPnZhbHVlID0gbmV3VmFsOwogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKQEAgLTIxOCw3ICsyMTgsNyBAQCBuYW1lc3Bh
Y2UgV1RGIHsKICAgICAgICAgaXRlcmF0b3IgaXQgPSBjb2xsZWN0aW9uLmJlZ2luKCk7CiAgICAg
ICAgIGl0ZXJhdG9yIGVuZCA9IGNvbGxlY3Rpb24uZW5kKCk7CiAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGl0ICE9IGVuZDsgKytpdCwgKytpKQotICAgICAgICAgICAgdmVjdG9yW2ldID0g
KCppdCkuZmlyc3Q7CisgICAgICAgICAgICB2ZWN0b3JbaV0gPSAoKml0KS5rZXk7CiAgICAgfQog
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0hhc2hJdGVyYXRvcnMuaCBiL1NvdXJjZS9X
VEYvd3RmL0hhc2hJdGVyYXRvcnMuaAppbmRleCA2YWZhMmZhNTdlNzBhZDAzMjA4NTBmMzczM2Rj
ZDc5OTcxNGIwMDgzLi4yNDI5YzZkMDRhYmVkMjJkNTdjZmNjZTgzYjNkNTc4Mjk0M2MyOTFmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoSXRlcmF0b3JzLmgKKysrIGIvU291cmNlL1dU
Ri93dGYvSGFzaEl0ZXJhdG9ycy5oCkBAIC0zMyw5ICszMyw5IEBAIG5hbWVzcGFjZSBXVEYgewog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZVR5cGUsIHR5cGVuYW1lIEtleVR5cGUsIHR5
cGVuYW1lIE1hcHBlZFR5cGU+IHN0cnVjdCBIYXNoVGFibGVLZXlzSXRlcmF0b3I7CiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlVHlwZSwgdHlwZW5hbWUgS2V5VHlwZSwgdHlwZW5hbWUg
TWFwcGVkVHlwZT4gc3RydWN0IEhhc2hUYWJsZVZhbHVlc0l0ZXJhdG9yOwogCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgSGFzaFRhYmxlVHlwZSwgdHlwZW5hbWUgS2V5VHlwZSwgdHlwZW5hbWUgTWFw
cGVkVHlwZT4gc3RydWN0IEhhc2hUYWJsZUNvbnN0SXRlcmF0b3JBZGFwdGVyPEhhc2hUYWJsZVR5
cGUsIHN0ZDo6cGFpcjxLZXlUeXBlLCBNYXBwZWRUeXBlPiA+IHsKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBIYXNoVGFibGVUeXBlLCB0eXBlbmFtZSBLZXlUeXBlLCB0eXBlbmFtZSBNYXBwZWRUeXBl
PiBzdHJ1Y3QgSGFzaFRhYmxlQ29uc3RJdGVyYXRvckFkYXB0ZXI8SGFzaFRhYmxlVHlwZSwgSGFz
aE1hcEVudHJ5PEtleVR5cGUsIE1hcHBlZFR5cGU+ID4gewogICAgIHByaXZhdGU6Ci0gICAgICAg
IHR5cGVkZWYgc3RkOjpwYWlyPEtleVR5cGUsIE1hcHBlZFR5cGU+IFZhbHVlVHlwZTsKKyAgICAg
ICAgdHlwZWRlZiBIYXNoTWFwRW50cnk8S2V5VHlwZSwgTWFwcGVkVHlwZT4gVmFsdWVUeXBlOwog
ICAgIHB1YmxpYzoKICAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVDb25zdEtleXNJdGVyYXRvcjxI
YXNoVGFibGVUeXBlLCBLZXlUeXBlLCBNYXBwZWRUeXBlPiBLZXlzOwogICAgICAgICB0eXBlZGVm
IEhhc2hUYWJsZUNvbnN0VmFsdWVzSXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5VHlwZSwgTWFw
cGVkVHlwZT4gVmFsdWVzOwpAQCAtNTYsOSArNTYsOSBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAg
ICAgdHlwZW5hbWUgSGFzaFRhYmxlVHlwZTo6Y29uc3RfaXRlcmF0b3IgbV9pbXBsOwogICAgIH07
CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGVUeXBlLCB0eXBlbmFtZSBLZXlUeXBl
LCB0eXBlbmFtZSBNYXBwZWRUeXBlPiBzdHJ1Y3QgSGFzaFRhYmxlSXRlcmF0b3JBZGFwdGVyPEhh
c2hUYWJsZVR5cGUsIHN0ZDo6cGFpcjxLZXlUeXBlLCBNYXBwZWRUeXBlPiA+IHsKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBIYXNoVGFibGVUeXBlLCB0eXBlbmFtZSBLZXlUeXBlLCB0eXBlbmFtZSBN
YXBwZWRUeXBlPiBzdHJ1Y3QgSGFzaFRhYmxlSXRlcmF0b3JBZGFwdGVyPEhhc2hUYWJsZVR5cGUs
IEhhc2hNYXBFbnRyeTxLZXlUeXBlLCBNYXBwZWRUeXBlPiA+IHsKICAgICBwcml2YXRlOgotICAg
ICAgICB0eXBlZGVmIHN0ZDo6cGFpcjxLZXlUeXBlLCBNYXBwZWRUeXBlPiBWYWx1ZVR5cGU7Cisg
ICAgICAgIHR5cGVkZWYgSGFzaE1hcEVudHJ5PEtleVR5cGUsIE1hcHBlZFR5cGU+IFZhbHVlVHlw
ZTsKICAgICBwdWJsaWM6CiAgICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlS2V5c0l0ZXJhdG9yPEhh
c2hUYWJsZVR5cGUsIEtleVR5cGUsIE1hcHBlZFR5cGU+IEtleXM7CiAgICAgICAgIHR5cGVkZWYg
SGFzaFRhYmxlVmFsdWVzSXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5VHlwZSwgTWFwcGVkVHlw
ZT4gVmFsdWVzOwpAQCAtODYsMTIgKzg2LDEyIEBAIG5hbWVzcGFjZSBXVEYgewogCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlVHlwZSwgdHlwZW5hbWUgS2V5VHlwZSwgdHlwZW5hbWUg
TWFwcGVkVHlwZT4gc3RydWN0IEhhc2hUYWJsZUNvbnN0S2V5c0l0ZXJhdG9yIHsKICAgICBwcml2
YXRlOgotICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3JBZGFwdGVyPEhhc2hU
YWJsZVR5cGUsIHN0ZDo6cGFpcjxLZXlUeXBlLCBNYXBwZWRUeXBlPiA+IENvbnN0SXRlcmF0b3I7
CisgICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlQ29uc3RJdGVyYXRvckFkYXB0ZXI8SGFzaFRhYmxl
VHlwZSwgSGFzaE1hcEVudHJ5PEtleVR5cGUsIE1hcHBlZFR5cGU+ID4gQ29uc3RJdGVyYXRvcjsK
IAogICAgIHB1YmxpYzoKICAgICAgICAgSGFzaFRhYmxlQ29uc3RLZXlzSXRlcmF0b3IoY29uc3Qg
Q29uc3RJdGVyYXRvciYgaW1wbCkgOiBtX2ltcGwoaW1wbCkge30KICAgICAgICAgCi0gICAgICAg
IGNvbnN0IEtleVR5cGUqIGdldCgpIGNvbnN0IHsgcmV0dXJuICYobV9pbXBsLmdldCgpLT5maXJz
dCk7IH0KKyAgICAgICAgY29uc3QgS2V5VHlwZSogZ2V0KCkgY29uc3QgeyByZXR1cm4gJihtX2lt
cGwuZ2V0KCktPmtleSk7IH0KICAgICAgICAgY29uc3QgS2V5VHlwZSYgb3BlcmF0b3IqKCkgY29u
c3QgeyByZXR1cm4gKmdldCgpOyB9CiAgICAgICAgIGNvbnN0IEtleVR5cGUqIG9wZXJhdG9yLT4o
KSBjb25zdCB7IHJldHVybiBnZXQoKTsgfQogCkBAIC0xMDMsMTIgKzEwMywxMiBAQCBuYW1lc3Bh
Y2UgV1RGIHsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZVR5cGUsIHR5cGVuYW1l
IEtleVR5cGUsIHR5cGVuYW1lIE1hcHBlZFR5cGU+IHN0cnVjdCBIYXNoVGFibGVDb25zdFZhbHVl
c0l0ZXJhdG9yIHsKICAgICBwcml2YXRlOgotICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUNvbnN0
SXRlcmF0b3JBZGFwdGVyPEhhc2hUYWJsZVR5cGUsIHN0ZDo6cGFpcjxLZXlUeXBlLCBNYXBwZWRU
eXBlPiA+IENvbnN0SXRlcmF0b3I7CisgICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlQ29uc3RJdGVy
YXRvckFkYXB0ZXI8SGFzaFRhYmxlVHlwZSwgSGFzaE1hcEVudHJ5PEtleVR5cGUsIE1hcHBlZFR5
cGU+ID4gQ29uc3RJdGVyYXRvcjsKIAogICAgIHB1YmxpYzoKICAgICAgICAgSGFzaFRhYmxlQ29u
c3RWYWx1ZXNJdGVyYXRvcihjb25zdCBDb25zdEl0ZXJhdG9yJiBpbXBsKSA6IG1faW1wbChpbXBs
KSB7fQogICAgICAgICAKLSAgICAgICAgY29uc3QgTWFwcGVkVHlwZSogZ2V0KCkgY29uc3QgeyBy
ZXR1cm4gJihtX2ltcGwuZ2V0KCktPnNlY29uZCk7IH0KKyAgICAgICAgY29uc3QgTWFwcGVkVHlw
ZSogZ2V0KCkgY29uc3QgeyByZXR1cm4gJihtX2ltcGwuZ2V0KCktPnZhbHVlKTsgfQogICAgICAg
ICBjb25zdCBNYXBwZWRUeXBlJiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqZ2V0KCk7IH0K
ICAgICAgICAgY29uc3QgTWFwcGVkVHlwZSogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIGdl
dCgpOyB9CiAKQEAgLTEyMCwxMyArMTIwLDEzIEBAIG5hbWVzcGFjZSBXVEYgewogCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlVHlwZSwgdHlwZW5hbWUgS2V5VHlwZSwgdHlwZW5hbWUg
TWFwcGVkVHlwZT4gc3RydWN0IEhhc2hUYWJsZUtleXNJdGVyYXRvciB7CiAgICAgcHJpdmF0ZToK
LSAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVJdGVyYXRvckFkYXB0ZXI8SGFzaFRhYmxlVHlwZSwg
c3RkOjpwYWlyPEtleVR5cGUsIE1hcHBlZFR5cGU+ID4gSXRlcmF0b3I7Ci0gICAgICAgIHR5cGVk
ZWYgSGFzaFRhYmxlQ29uc3RJdGVyYXRvckFkYXB0ZXI8SGFzaFRhYmxlVHlwZSwgc3RkOjpwYWly
PEtleVR5cGUsIE1hcHBlZFR5cGU+ID4gQ29uc3RJdGVyYXRvcjsKKyAgICAgICAgdHlwZWRlZiBI
YXNoVGFibGVJdGVyYXRvckFkYXB0ZXI8SGFzaFRhYmxlVHlwZSwgSGFzaE1hcEVudHJ5PEtleVR5
cGUsIE1hcHBlZFR5cGU+ID4gSXRlcmF0b3I7CisgICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlQ29u
c3RJdGVyYXRvckFkYXB0ZXI8SGFzaFRhYmxlVHlwZSwgSGFzaE1hcEVudHJ5PEtleVR5cGUsIE1h
cHBlZFR5cGU+ID4gQ29uc3RJdGVyYXRvcjsKIAogICAgIHB1YmxpYzoKICAgICAgICAgSGFzaFRh
YmxlS2V5c0l0ZXJhdG9yKGNvbnN0IEl0ZXJhdG9yJiBpbXBsKSA6IG1faW1wbChpbXBsKSB7fQog
ICAgICAgICAKLSAgICAgICAgS2V5VHlwZSogZ2V0KCkgY29uc3QgeyByZXR1cm4gJihtX2ltcGwu
Z2V0KCktPmZpcnN0KTsgfQorICAgICAgICBLZXlUeXBlKiBnZXQoKSBjb25zdCB7IHJldHVybiAm
KG1faW1wbC5nZXQoKS0+a2V5KTsgfQogICAgICAgICBLZXlUeXBlJiBvcGVyYXRvciooKSBjb25z
dCB7IHJldHVybiAqZ2V0KCk7IH0KICAgICAgICAgS2V5VHlwZSogb3BlcmF0b3ItPigpIGNvbnN0
IHsgcmV0dXJuIGdldCgpOyB9CiAKQEAgLTE0MywxMyArMTQzLDEzIEBAIG5hbWVzcGFjZSBXVEYg
ewogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlVHlwZSwgdHlwZW5hbWUgS2V5VHlw
ZSwgdHlwZW5hbWUgTWFwcGVkVHlwZT4gc3RydWN0IEhhc2hUYWJsZVZhbHVlc0l0ZXJhdG9yIHsK
ICAgICBwcml2YXRlOgotICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUl0ZXJhdG9yQWRhcHRlcjxI
YXNoVGFibGVUeXBlLCBzdGQ6OnBhaXI8S2V5VHlwZSwgTWFwcGVkVHlwZT4gPiBJdGVyYXRvcjsK
LSAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVDb25zdEl0ZXJhdG9yQWRhcHRlcjxIYXNoVGFibGVU
eXBlLCBzdGQ6OnBhaXI8S2V5VHlwZSwgTWFwcGVkVHlwZT4gPiBDb25zdEl0ZXJhdG9yOworICAg
ICAgICB0eXBlZGVmIEhhc2hUYWJsZUl0ZXJhdG9yQWRhcHRlcjxIYXNoVGFibGVUeXBlLCBIYXNo
TWFwRW50cnk8S2V5VHlwZSwgTWFwcGVkVHlwZT4gPiBJdGVyYXRvcjsKKyAgICAgICAgdHlwZWRl
ZiBIYXNoVGFibGVDb25zdEl0ZXJhdG9yQWRhcHRlcjxIYXNoVGFibGVUeXBlLCBIYXNoTWFwRW50
cnk8S2V5VHlwZSwgTWFwcGVkVHlwZT4gPiBDb25zdEl0ZXJhdG9yOwogCiAgICAgcHVibGljOgog
ICAgICAgICBIYXNoVGFibGVWYWx1ZXNJdGVyYXRvcihjb25zdCBJdGVyYXRvciYgaW1wbCkgOiBt
X2ltcGwoaW1wbCkge30KICAgICAgICAgCi0gICAgICAgIE1hcHBlZFR5cGUqIGdldCgpIGNvbnN0
IHsgcmV0dXJuICYobV9pbXBsLmdldCgpLT5zZWNvbmQpOyB9CisgICAgICAgIE1hcHBlZFR5cGUq
IGdldCgpIGNvbnN0IHsgcmV0dXJuICYobV9pbXBsLmdldCgpLT52YWx1ZSk7IH0KICAgICAgICAg
TWFwcGVkVHlwZSYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKmdldCgpOyB9CiAgICAgICAg
IE1hcHBlZFR5cGUqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBnZXQoKTsgfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoTWFwLmggYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoTWFw
LmgKaW5kZXggMjZhOWQ5YzVjYjE1OGQzYTVmZWI3MmVjNWNjODUwYThlNjAxNjNkZC4uYmE1OTMx
ZWZiN2ZmZjk4NWE5MDA5ODVkZDIwZTljYjM2NTNlNTdiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvSGFzaE1hcC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0hhc2hNYXAuaApAQCAtMjUsOCAr
MjUsNiBAQAogCiBuYW1lc3BhY2UgV1RGIHsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFBhaXJU
eXBlPiBzdHJ1Y3QgUGFpckZpcnN0RXh0cmFjdG9yOwotCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IFJlZmVyZW5jZVR5cGVNYWtlciB7CiAgICAgICAgIHR5cGVkZWYgVCYgUmVmZXJl
bmNlVHlwZTsKICAgICB9OwpAQCAtMzQsNiArMzIsMTAgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAg
ICAgIHR5cGVkZWYgVCYgUmVmZXJlbmNlVHlwZTsKICAgICB9OwogCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgSGFzaE1hcEVudHJ5VHlwZT4gc3RydWN0IEhhc2hNYXBFbnRyeUtleUV4dHJhY3RvciB7
CisgICAgICAgIHN0YXRpYyBjb25zdCB0eXBlbmFtZSBIYXNoTWFwRW50cnlUeXBlOjpLZXlUeXBl
JiBleHRyYWN0KGNvbnN0IEhhc2hNYXBFbnRyeVR5cGUmIHApIHsgcmV0dXJuIHAua2V5OyB9Cisg
ICAgfTsKKwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJn
LCB0eXBlbmFtZSBIYXNoQXJnID0gdHlwZW5hbWUgRGVmYXVsdEhhc2g8S2V5QXJnPjo6SGFzaCwK
ICAgICAgICAgdHlwZW5hbWUgS2V5VHJhaXRzQXJnID0gSGFzaFRyYWl0czxLZXlBcmc+LCB0eXBl
bmFtZSBNYXBwZWRUcmFpdHNBcmcgPSBIYXNoVHJhaXRzPE1hcHBlZEFyZz4gPgogICAgIGNsYXNz
IEhhc2hNYXAgewpAQCAtNDEsNyArNDMsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICBwcml2YXRl
OgogICAgICAgICB0eXBlZGVmIEtleVRyYWl0c0FyZyBLZXlUcmFpdHM7CiAgICAgICAgIHR5cGVk
ZWYgTWFwcGVkVHJhaXRzQXJnIE1hcHBlZFRyYWl0czsKLSAgICAgICAgdHlwZWRlZiBQYWlySGFz
aFRyYWl0czxLZXlUcmFpdHMsIE1hcHBlZFRyYWl0cz4gVmFsdWVUcmFpdHM7CisgICAgICAgIHR5
cGVkZWYgSGFzaE1hcEVudHJ5VHJhaXRzPEtleVRyYWl0cywgTWFwcGVkVHJhaXRzPiBWYWx1ZVRy
YWl0czsKIAogICAgIHB1YmxpYzoKICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBLZXlUcmFpdHM6
OlRyYWl0VHlwZSBLZXlUeXBlOwpAQCAtNTcsNyArNTksNyBAQCBuYW1lc3BhY2UgV1RGIHsKIAog
ICAgICAgICB0eXBlZGVmIEhhc2hBcmcgSGFzaEZ1bmN0aW9uczsKIAotICAgICAgICB0eXBlZGVm
IEhhc2hUYWJsZTxLZXlUeXBlLCBWYWx1ZVR5cGUsIFBhaXJGaXJzdEV4dHJhY3RvcjxWYWx1ZVR5
cGU+LAorICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZTxLZXlUeXBlLCBWYWx1ZVR5cGUsIEhhc2hN
YXBFbnRyeUtleUV4dHJhY3RvcjxWYWx1ZVR5cGU+LAogICAgICAgICAgICAgSGFzaEZ1bmN0aW9u
cywgVmFsdWVUcmFpdHMsIEtleVRyYWl0cz4gSGFzaFRhYmxlVHlwZTsKIAogICAgICAgICBjbGFz
cyBIYXNoTWFwS2V5c1Byb3h5OwpAQCAtMjAzLDE4ICsyMDUsMTQgQEAgbmFtZXNwYWNlIFdURiB7
CiAgICAgICAgIEhhc2hUYWJsZVR5cGUgbV9pbXBsOwogICAgIH07CiAKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBQYWlyVHlwZT4gc3RydWN0IFBhaXJGaXJzdEV4dHJhY3RvciB7Ci0gICAgICAgIHN0
YXRpYyBjb25zdCB0eXBlbmFtZSBQYWlyVHlwZTo6Zmlyc3RfdHlwZSYgZXh0cmFjdChjb25zdCBQ
YWlyVHlwZSYgcCkgeyByZXR1cm4gcC5maXJzdDsgfQotICAgIH07Ci0KICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBWYWx1ZVRyYWl0cywgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucz4KICAgICBzdHJ1Y3Qg
SGFzaE1hcFRyYW5zbGF0b3IgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMg
dW5zaWduZWQgaGFzaChjb25zdCBUJiBrZXkpIHsgcmV0dXJuIEhhc2hGdW5jdGlvbnM6Omhhc2go
a2V5KTsgfQogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBzdGF0aWMg
Ym9vbCBlcXVhbChjb25zdCBUJiBhLCBjb25zdCBVJiBiKSB7IHJldHVybiBIYXNoRnVuY3Rpb25z
OjplcXVhbChhLCBiKTsgfQogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
LCB0eXBlbmFtZSBWPiBzdGF0aWMgdm9pZCB0cmFuc2xhdGUoVCYgbG9jYXRpb24sIGNvbnN0IFUm
IGtleSwgY29uc3QgViYgbWFwcGVkKQogICAgICAgICB7Ci0gICAgICAgICAgICBsb2NhdGlvbi5m
aXJzdCA9IGtleTsKLSAgICAgICAgICAgIFZhbHVlVHJhaXRzOjpTZWNvbmRUcmFpdHM6OnN0b3Jl
KG1hcHBlZCwgbG9jYXRpb24uc2Vjb25kKTsKKyAgICAgICAgICAgIGxvY2F0aW9uLmtleSA9IGtl
eTsKKyAgICAgICAgICAgIFZhbHVlVHJhaXRzOjpNYXBwZWRUcmFpdHM6OnN0b3JlKG1hcHBlZCwg
bG9jYXRpb24udmFsdWUpOwogICAgICAgICB9CiAgICAgfTsKIApAQCAtMjI0LDggKzIyMiw4IEBA
IG5hbWVzcGFjZSBXVEYgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
PiBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBUJiBhLCBjb25zdCBVJiBiKSB7IHJldHVybiBUcmFu
c2xhdG9yOjplcXVhbChhLCBiKTsgfQogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVLCB0eXBlbmFtZSBWPiBzdGF0aWMgdm9pZCB0cmFuc2xhdGUoVCYgbG9jYXRpb24sIGNv
bnN0IFUmIGtleSwgY29uc3QgViYgbWFwcGVkLCB1bnNpZ25lZCBoYXNoQ29kZSkKICAgICAgICAg
ewotICAgICAgICAgICAgVHJhbnNsYXRvcjo6dHJhbnNsYXRlKGxvY2F0aW9uLmZpcnN0LCBrZXks
IGhhc2hDb2RlKTsKLSAgICAgICAgICAgIFZhbHVlVHJhaXRzOjpTZWNvbmRUcmFpdHM6OnN0b3Jl
KG1hcHBlZCwgbG9jYXRpb24uc2Vjb25kKTsKKyAgICAgICAgICAgIFRyYW5zbGF0b3I6OnRyYW5z
bGF0ZShsb2NhdGlvbi5rZXksIGtleSwgaGFzaENvZGUpOworICAgICAgICAgICAgVmFsdWVUcmFp
dHM6Ok1hcHBlZFRyYWl0czo6c3RvcmUobWFwcGVkLCBsb2NhdGlvbi52YWx1ZSk7CiAgICAgICAg
IH0KICAgICB9OwogCkBAIC0zMzMsNyArMzMxLDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAg
IEFkZFJlc3VsdCByZXN1bHQgPSBpbmxpbmVBZGQoa2V5LCBtYXBwZWQpOwogICAgICAgICBpZiAo
IXJlc3VsdC5pc05ld0VudHJ5KSB7CiAgICAgICAgICAgICAvLyBUaGUgaW5saW5lQWRkIGNhbGwg
YWJvdmUgZm91bmQgYW4gZXhpc3RpbmcgaGFzaCB0YWJsZSBlbnRyeTsgd2UgbmVlZCB0byBzZXQg
dGhlIG1hcHBlZCB2YWx1ZS4KLSAgICAgICAgICAgIE1hcHBlZFRyYWl0czo6c3RvcmUobWFwcGVk
LCByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7CisgICAgICAgICAgICBNYXBwZWRUcmFpdHM6OnN0
b3JlKG1hcHBlZCwgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CiAgICAgICAgIH0KICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICB9CkBAIC0zNjAsNyArMzU4LDcgQEAgbmFtZXNwYWNlIFdURiB7
CiAgICAgICAgIFZhbHVlVHlwZSogZW50cnkgPSBjb25zdF9jYXN0PEhhc2hUYWJsZVR5cGUmPiht
X2ltcGwpLmxvb2t1cChrZXkpOwogICAgICAgICBpZiAoIWVudHJ5KQogICAgICAgICAgICAgcmV0
dXJuIE1hcHBlZFRyYWl0czo6cGVlayhNYXBwZWRUcmFpdHM6OmVtcHR5VmFsdWUoKSk7Ci0gICAg
ICAgIHJldHVybiBNYXBwZWRUcmFpdHM6OnBlZWsoZW50cnktPnNlY29uZCk7CisgICAgICAgIHJl
dHVybiBNYXBwZWRUcmFpdHM6OnBlZWsoZW50cnktPnZhbHVlKTsKICAgICB9CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBl
bmFtZSBYPgpAQCAtMzkxLDcgKzM4OSw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBpdGVy
YXRvciBpdCA9IGZpbmQoa2V5KTsKICAgICAgICAgaWYgKGl0ID09IGVuZCgpKQogICAgICAgICAg
ICAgcmV0dXJuIE1hcHBlZFRyYWl0czo6cGFzc091dChNYXBwZWRUcmFpdHM6OmVtcHR5VmFsdWUo
KSk7Ci0gICAgICAgIE1hcHBlZFBhc3NPdXRUeXBlIHJlc3VsdCA9IE1hcHBlZFRyYWl0czo6cGFz
c091dChpdC0+c2Vjb25kKTsKKyAgICAgICAgTWFwcGVkUGFzc091dFR5cGUgcmVzdWx0ID0gTWFw
cGVkVHJhaXRzOjpwYXNzT3V0KGl0LT52YWx1ZSk7CiAgICAgICAgIHJlbW92ZShpdCk7CiAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpAQCAtNDEzLDggKzQxMSw4IEBAIG5hbWVzcGFjZSBX
VEYgewogICAgICAgICBjb25zdF9pdGVyYXRvciBlbmQgPSBhLmVuZCgpOwogICAgICAgICBjb25z
dF9pdGVyYXRvciBub3RGb3VuZCA9IGIuZW5kKCk7CiAgICAgICAgIGZvciAoY29uc3RfaXRlcmF0
b3IgaXQgPSBhLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgY29uc3Rf
aXRlcmF0b3IgYlBvcyA9IGIuZmluZChpdC0+Zmlyc3QpOwotICAgICAgICAgICAgaWYgKGJQb3Mg
PT0gbm90Rm91bmQgfHwgaXQtPnNlY29uZCAhPSBiUG9zLT5zZWNvbmQpCisgICAgICAgICAgICBj
b25zdF9pdGVyYXRvciBiUG9zID0gYi5maW5kKGl0LT5rZXkpOworICAgICAgICAgICAgaWYgKGJQ
b3MgPT0gbm90Rm91bmQgfHwgaXQtPnZhbHVlICE9IGJQb3MtPnZhbHVlKQogICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCkBAIC00MzMsNyArNDMxLDcgQEAgbmFtZXNw
YWNlIFdURiB7CiAgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgSGFzaFRhYmxlVHlwZTo6Y29uc3Rf
aXRlcmF0b3IgaXRlcmF0b3I7CiAgICAgICAgIGl0ZXJhdG9yIGVuZCA9IGNvbGxlY3Rpb24uZW5k
KCk7CiAgICAgICAgIGZvciAoaXRlcmF0b3IgaXQgPSBjb2xsZWN0aW9uLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkKLSAgICAgICAgICAgIGRlbGV0ZSBpdC0+c2Vjb25kOworICAgICAgICAgICAg
ZGVsZXRlIGl0LT52YWx1ZTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgpAQCAtNDQ4LDcgKzQ0
Niw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIEhhc2hUYWJs
ZVR5cGU6OmNvbnN0X2l0ZXJhdG9yIGl0ZXJhdG9yOwogICAgICAgICBpdGVyYXRvciBlbmQgPSBj
b2xsZWN0aW9uLmVuZCgpOwogICAgICAgICBmb3IgKGl0ZXJhdG9yIGl0ID0gY29sbGVjdGlvbi5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBkZWxldGUgaXQtPmZpcnN0Owor
ICAgICAgICAgICAgZGVsZXRlIGl0LT5rZXk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oIGIvU291cmNlL1dURi93dGYvSGFz
aFRhYmxlLmgKaW5kZXggOWJkNTQ4MmZhY2ViNzIwOTQ0Y2U0YzUzMTE3NDc0MGJlNDNiYjZjZi4u
ZjkyYjVlNGNkN2Q4ZWQ1ZDE4MmU4MjE1OTE4OGVlYzYxOTg4NTFiNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi93dGYvSGFzaFRhYmxlLmgKKysrIGIvU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmgK
QEAgLTI4NSw2ICsyODUsMTIgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIHN3YXAoYS5zZWNv
bmQsIGIuc2Vjb25kKTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVPiBpbmxpbmUgdm9pZCBoYXNoVGFibGVTd2FwKEhhc2hNYXBFbnRyeTxULCBVPiYgYSwgSGFz
aE1hcEVudHJ5PFQsIFU+JiBiKQorICAgIHsKKyAgICAgICAgc3dhcChhLmtleSwgYi5rZXkpOwor
ICAgICAgICBzd2FwKGEudmFsdWUsIGIudmFsdWUpOworICAgIH0KKwogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIGJvb2wgdXNlU3dhcD4gc3RydWN0IE1vdmVyOwogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBNb3ZlcjxULCB0cnVlPiB7IHN0YXRpYyB2b2lkIG1vdmUoVCYgZnJvbSwg
VCYgdG8pIHsgaGFzaFRhYmxlU3dhcChmcm9tLCB0byk7IH0gfTsKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdHJ1Y3QgTW92ZXI8VCwgZmFsc2U+IHsgc3RhdGljIHZvaWQgbW92ZShUJiBmcm9t
LCBUJiB0bykgeyB0byA9IGZyb207IH0gfTsKQEAgLTEwODIsNyArMTA4OCw3IEBAIG5hbWVzcGFj
ZSBXVEYgewogICAgICAgICAgICAgQVNTRVJUKGVudHJ5ID09IGl0Lm1fcG9zaXRpb24pOwogICAg
ICAgICAgICAgKytjb3VudDsKIAotICAgICAgICAgICAgVmFsdWVDaGVjazxLZXk+OjpjaGVja0Nv
bnNpc3RlbmN5KGl0LT5maXJzdCk7CisgICAgICAgICAgICBWYWx1ZUNoZWNrPEtleT46OmNoZWNr
Q29uc2lzdGVuY3koaXQtPmtleSk7CiAgICAgICAgIH0KIAogICAgICAgICBBU1NFUlQoY291bnQg
PT0gbV9rZXlDb3VudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoVHJhaXRzLmgg
Yi9Tb3VyY2UvV1RGL3d0Zi9IYXNoVHJhaXRzLmgKaW5kZXggMTBmMTRkMWFmOTkwODczNjdmODFh
YmM2NTJlYWVkNjFjYjU3MWZkMi4uZWE2NWViMmM0MGUzZjBjY2QxMDUyMDIxNTE2MTdkZDBlMjIy
MzA3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvSGFzaFRyYWl0cy5oCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL0hhc2hUcmFpdHMuaApAQCAtMTYzLDYgKzE2Myw0MSBAQCBuYW1lc3BhY2UgV1RG
IHsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGaXJzdCwgdHlwZW5hbWUgU2Vjb25kPgogICAgIHN0
cnVjdCBIYXNoVHJhaXRzPHBhaXI8Rmlyc3QsIFNlY29uZD4gPiA6IHB1YmxpYyBQYWlySGFzaFRy
YWl0czxIYXNoVHJhaXRzPEZpcnN0PiwgSGFzaFRyYWl0czxTZWNvbmQ+ID4geyB9OwogCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgS2V5VHlwZUFyZywgdHlwZW5hbWUgTWFwcGVkVHlwZUFyZz4KKyAg
ICBzdHJ1Y3QgSGFzaE1hcEVudHJ5IHsKKyAgICAgICAgdHlwZWRlZiBLZXlUeXBlQXJnIEtleVR5
cGU7CisKKyAgICAgICAgSGFzaE1hcEVudHJ5KCkgOiBrZXkoKSwgdmFsdWUoKSB7IH0KKyAgICAg
ICAgSGFzaE1hcEVudHJ5KGNvbnN0IEtleVR5cGVBcmcmIGtleSwgY29uc3QgTWFwcGVkVHlwZUFy
ZyYgdmFsdWUpIDoga2V5KGtleSksIHZhbHVlKHZhbHVlKSB7IH0KKworICAgICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgT3RoZXJLZXlUeXBlLCB0eXBlbmFtZSBPdGhlck1hcHBlZFR5cGU+CisgICAg
ICAgIEhhc2hNYXBFbnRyeShjb25zdCBIYXNoTWFwRW50cnk8T3RoZXJLZXlUeXBlLCBPdGhlck1h
cHBlZFR5cGU+JiBvdGhlcikgOiBrZXkob3RoZXIua2V5KSwgdmFsdWUob3RoZXIudmFsdWUpIHsg
fQorCisgICAgICAgIEtleVR5cGVBcmcga2V5OworICAgICAgICBNYXBwZWRUeXBlQXJnIHZhbHVl
OworICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1l
IE1hcHBlZFRyYWl0c0FyZz4KKyAgICBzdHJ1Y3QgSGFzaE1hcEVudHJ5VHJhaXRzIDogR2VuZXJp
Y0hhc2hUcmFpdHM8SGFzaE1hcEVudHJ5PHR5cGVuYW1lIEtleVRyYWl0c0FyZzo6VHJhaXRUeXBl
LCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc6OlRyYWl0VHlwZT4gPiB7CisgICAgICAgIHR5cGVk
ZWYgS2V5VHJhaXRzQXJnIEtleVRyYWl0czsKKyAgICAgICAgdHlwZWRlZiBNYXBwZWRUcmFpdHNB
cmcgTWFwcGVkVHJhaXRzOworICAgICAgICB0eXBlZGVmIEhhc2hNYXBFbnRyeTx0eXBlbmFtZSBL
ZXlUcmFpdHM6OlRyYWl0VHlwZSwgdHlwZW5hbWUgTWFwcGVkVHJhaXRzOjpUcmFpdFR5cGU+IFRy
YWl0VHlwZTsKKyAgICAgICAgdHlwZWRlZiBIYXNoTWFwRW50cnk8dHlwZW5hbWUgS2V5VHJhaXRz
OjpFbXB0eVZhbHVlVHlwZSwgdHlwZW5hbWUgTWFwcGVkVHJhaXRzOjpFbXB0eVZhbHVlVHlwZT4g
RW1wdHlWYWx1ZVR5cGU7CisKKyAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgZW1wdHlWYWx1ZUlz
WmVybyA9IEtleVRyYWl0czo6ZW1wdHlWYWx1ZUlzWmVybyAmJiBNYXBwZWRUcmFpdHM6OmVtcHR5
VmFsdWVJc1plcm87CisgICAgICAgIHN0YXRpYyBFbXB0eVZhbHVlVHlwZSBlbXB0eVZhbHVlKCkg
eyByZXR1cm4gSGFzaE1hcEVudHJ5PHR5cGVuYW1lIEtleVRyYWl0czo6RW1wdHlWYWx1ZVR5cGUs
IHR5cGVuYW1lIE1hcHBlZFRyYWl0czo6RW1wdHlWYWx1ZVR5cGU+KEtleVRyYWl0czo6ZW1wdHlW
YWx1ZSgpLCBNYXBwZWRUcmFpdHM6OmVtcHR5VmFsdWUoKSk7IH0KKworICAgICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gS2V5VHJhaXRzOjpuZWVkc0Rlc3RydWN0aW9u
IHx8IE1hcHBlZFRyYWl0czo6bmVlZHNEZXN0cnVjdGlvbjsKKworICAgICAgICBzdGF0aWMgY29u
c3QgaW50IG1pbmltdW1UYWJsZVNpemUgPSBLZXlUcmFpdHM6Om1pbmltdW1UYWJsZVNpemU7CisK
KyAgICAgICAgc3RhdGljIHZvaWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKFRyYWl0VHlwZSYgc2xv
dCkgeyBLZXlUcmFpdHM6OmNvbnN0cnVjdERlbGV0ZWRWYWx1ZShzbG90LmtleSk7IH0KKyAgICAg
ICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUoY29uc3QgVHJhaXRUeXBlJiB2YWx1ZSkgeyBy
ZXR1cm4gS2V5VHJhaXRzOjppc0RlbGV0ZWRWYWx1ZSh2YWx1ZS5rZXkpOyB9CisgICAgfTsKKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgTWFwcGVkPgorICAgIHN0cnVjdCBI
YXNoVHJhaXRzPEhhc2hNYXBFbnRyeTxLZXksIE1hcHBlZD4gPiA6IHB1YmxpYyBIYXNoTWFwRW50
cnlUcmFpdHM8SGFzaFRyYWl0czxLZXk+LCBIYXNoVHJhaXRzPE1hcHBlZD4gPiB7IH07CisKIH0g
Ly8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6Okhhc2hUcmFpdHM7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9yLmNwcCBiL1NvdXJjZS9XVEYvd3RmL01ldGFBbGxv
Y2F0b3IuY3BwCmluZGV4IDIwMjM3ZjIxODFkZjQ5NWI4OTY0ZTUzMTg4NzJlNWYzZTE4Mzk3NTAu
Ljg2ZTkzN2FhM2UwMWY3ZmQzMzNmNjQ4YzliOGYwMWNiY2NkYjY1NDYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3IuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL01ldGFB
bGxvY2F0b3IuY3BwCkBAIC0zMDQsOSArMzA0LDkgQEAgdm9pZCBNZXRhQWxsb2NhdG9yOjphZGRG
cmVlU3BhY2Uodm9pZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRlcykKICAgICAgICAgLy8gV2Ug
aGF2ZSBzb21ldGhpbmcgd2UgY2FuIGNvYWxlc2NlIHdpdGggb24gdGhlIGxlZnQuIFJlbW92ZSBp
dCBmcm9tIHRoZSB0cmVlLCBhbmQKICAgICAgICAgLy8gcmVtb3ZlIGl0cyBlbmQgZnJvbSB0aGUg
ZW5kIGFkZHJlc3MgbWFwLgogICAgICAgICAKLSAgICAgICAgQVNTRVJUKHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihsZWZ0TmVpZ2hib3ItPnNlY29u
ZC0+bV9zdGFydCkgKyBsZWZ0TmVpZ2hib3ItPnNlY29uZC0+bV9zaXplSW5CeXRlcykgPT0gbGVm
dE5laWdoYm9yLT5maXJzdCk7CisgICAgICAgIEFTU0VSVChyZWludGVycHJldF9jYXN0PHZvaWQq
PihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obGVmdE5laWdoYm9yLT52YWx1ZS0+bV9zdGFy
dCkgKyBsZWZ0TmVpZ2hib3ItPnZhbHVlLT5tX3NpemVJbkJ5dGVzKSA9PSBsZWZ0TmVpZ2hib3It
PmtleSk7CiAgICAgICAgIAotICAgICAgICBGcmVlU3BhY2VOb2RlKiBsZWZ0Tm9kZSA9IGxlZnRO
ZWlnaGJvci0+c2Vjb25kOworICAgICAgICBGcmVlU3BhY2VOb2RlKiBsZWZ0Tm9kZSA9IGxlZnRO
ZWlnaGJvci0+dmFsdWU7CiAgICAgICAgIAogICAgICAgICB2b2lkKiBsZWZ0U3RhcnQgPSBsZWZ0
Tm9kZS0+bV9zdGFydDsKICAgICAgICAgc2l6ZV90IGxlZnRTaXplID0gbGVmdE5vZGUtPm1fc2l6
ZUluQnl0ZXM7CkBAIC0zMjIsMTAgKzMyMiwxMCBAQCB2b2lkIE1ldGFBbGxvY2F0b3I6OmFkZEZy
ZWVTcGFjZSh2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVzKQogICAgICAgICAgICAgLy8g
RnJlZWluZyBzb21ldGhpbmcgaW4gdGhlIG1pZGRsZSBvZiBmcmVlIGJsb2Nrcy4gQ29hbGVzY2Ug
Ym90aCBsZWZ0IGFuZAogICAgICAgICAgICAgLy8gcmlnaHQsIHdoaWxzdCByZW1vdmluZyB0aGUg
cmlnaHQgbmVpZ2hib3IgZnJvbSB0aGUgbWFwcy4KICAgICAgICAgICAgIAotICAgICAgICAgICAg
QVNTRVJUKHJpZ2h0TmVpZ2hib3ItPnNlY29uZC0+bV9zdGFydCA9PSByaWdodE5laWdoYm9yLT5m
aXJzdCk7CisgICAgICAgICAgICBBU1NFUlQocmlnaHROZWlnaGJvci0+dmFsdWUtPm1fc3RhcnQg
PT0gcmlnaHROZWlnaGJvci0+a2V5KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgRnJlZVNw
YWNlTm9kZSogcmlnaHROb2RlID0gcmlnaHROZWlnaGJvci0+c2Vjb25kOwotICAgICAgICAgICAg
dm9pZCogcmlnaHRTdGFydCA9IHJpZ2h0TmVpZ2hib3ItPmZpcnN0OworICAgICAgICAgICAgRnJl
ZVNwYWNlTm9kZSogcmlnaHROb2RlID0gcmlnaHROZWlnaGJvci0+dmFsdWU7CisgICAgICAgICAg
ICB2b2lkKiByaWdodFN0YXJ0ID0gcmlnaHROZWlnaGJvci0+a2V5OwogICAgICAgICAgICAgc2l6
ZV90IHJpZ2h0U2l6ZSA9IHJpZ2h0Tm9kZS0+bV9zaXplSW5CeXRlczsKICAgICAgICAgICAgIHZv
aWQqIHJpZ2h0RW5kID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1
aW50cHRyX3Q+KHJpZ2h0U3RhcnQpICsgcmlnaHRTaXplKTsKICAgICAgICAgICAgIApAQCAtMzUy
LDggKzM1Miw4IEBAIHZvaWQgTWV0YUFsbG9jYXRvcjo6YWRkRnJlZVNwYWNlKHZvaWQqIHN0YXJ0
LCBzaXplX3Qgc2l6ZUluQnl0ZXMpCiAgICAgICAgIC8vIENhbm5vdCBjb2FsZXNjZSB3aXRoIGxl
ZnQ7IHRyeSB0byBzZWUgaWYgd2UgY2FuIGNvYWxlc2NlIHdpdGggcmlnaHQuCiAgICAgICAgIAog
ICAgICAgICBpZiAocmlnaHROZWlnaGJvciAhPSBtX2ZyZWVTcGFjZVN0YXJ0QWRkcmVzc01hcC5l
bmQoKSkgewotICAgICAgICAgICAgRnJlZVNwYWNlTm9kZSogcmlnaHROb2RlID0gcmlnaHROZWln
aGJvci0+c2Vjb25kOwotICAgICAgICAgICAgdm9pZCogcmlnaHRTdGFydCA9IHJpZ2h0TmVpZ2hi
b3ItPmZpcnN0OworICAgICAgICAgICAgRnJlZVNwYWNlTm9kZSogcmlnaHROb2RlID0gcmlnaHRO
ZWlnaGJvci0+dmFsdWU7CisgICAgICAgICAgICB2b2lkKiByaWdodFN0YXJ0ID0gcmlnaHROZWln
aGJvci0+a2V5OwogICAgICAgICAgICAgc2l6ZV90IHJpZ2h0U2l6ZSA9IHJpZ2h0Tm9kZS0+bV9z
aXplSW5CeXRlczsKICAgICAgICAgICAgIHZvaWQqIHJpZ2h0RW5kID0gcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHJpZ2h0U3RhcnQpICsgcmlnaHRT
aXplKTsKICAgICAgICAgICAgIApAQCAtMzk1LDcgKzM5NSw3IEBAIHZvaWQgTWV0YUFsbG9jYXRv
cjo6aW5jcmVtZW50UGFnZU9jY3VwYW5jeSh2b2lkKiBhZGRyZXNzLCBzaXplX3Qgc2l6ZUluQnl0
ZXMpCiAgICAgICAgICAgICBtX2J5dGVzQ29tbWl0dGVkICs9IG1fcGFnZVNpemU7CiAgICAgICAg
ICAgICBub3RpZnlOZWVkUGFnZShyZWludGVycHJldF9jYXN0PHZvaWQqPihwYWdlIDw8IG1fbG9n
UGFnZVNpemUpKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBpdGVyLT5zZWNvbmQrKzsK
KyAgICAgICAgICAgIGl0ZXItPnZhbHVlKys7CiAgICAgfQogfQogCkBAIC00MDcsNyArNDA3LDcg
QEAgdm9pZCBNZXRhQWxsb2NhdG9yOjpkZWNyZW1lbnRQYWdlT2NjdXBhbmN5KHZvaWQqIGFkZHJl
c3MsIHNpemVfdCBzaXplSW5CeXRlcykKICAgICBmb3IgKHVpbnRwdHJfdCBwYWdlID0gZmlyc3RQ
YWdlOyBwYWdlIDw9IGxhc3RQYWdlOyArK3BhZ2UpIHsKICAgICAgICAgSGFzaE1hcDx1aW50cHRy
X3QsIHNpemVfdD46Oml0ZXJhdG9yIGl0ZXIgPSBtX3BhZ2VPY2N1cGFuY3lNYXAuZmluZChwYWdl
KTsKICAgICAgICAgQVNTRVJUKGl0ZXIgIT0gbV9wYWdlT2NjdXBhbmN5TWFwLmVuZCgpKTsKLSAg
ICAgICAgaWYgKCEtLShpdGVyLT5zZWNvbmQpKSB7CisgICAgICAgIGlmICghLS0oaXRlci0+dmFs
dWUpKSB7CiAgICAgICAgICAgICBtX3BhZ2VPY2N1cGFuY3lNYXAucmVtb3ZlKGl0ZXIpOwogICAg
ICAgICAgICAgbV9ieXRlc0NvbW1pdHRlZCAtPSBtX3BhZ2VTaXplOwogICAgICAgICAgICAgbm90
aWZ5UGFnZUlzRnJlZShyZWludGVycHJldF9jYXN0PHZvaWQqPihwYWdlIDw8IG1fbG9nUGFnZVNp
emUpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1JlZkNvdW50ZWRMZWFrQ291bnRlci5j
cHAgYi9Tb3VyY2UvV1RGL3d0Zi9SZWZDb3VudGVkTGVha0NvdW50ZXIuY3BwCmluZGV4IDY3MGYy
YTBjZWM1OTljNmQ0ZjMxNjQ0ZWJlYjU4NzQxNWVmNDMyMWEuLjRhMDQ1MjgyNDg5ZmU5NWExN2Uy
MzkxOTc3M2QzN2NiMjQ0MTBiZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1JlZkNvdW50
ZWRMZWFrQ291bnRlci5jcHAKKysrIGIvU291cmNlL1dURi93dGYvUmVmQ291bnRlZExlYWtDb3Vu
dGVyLmNwcApAQCAtNzEsNyArNzEsNyBAQCBSZWZDb3VudGVkTGVha0NvdW50ZXI6On5SZWZDb3Vu
dGVkTGVha0NvdW50ZXIoKQogICAgICAgICAgICAgTE9HKFJlZkNvdW50ZWRMZWFrcywgIkxFQUs6
ICV1ICVzIiwgbV9jb3VudCwgbV9kZXNjcmlwdGlvbik7CiAgICAgICAgIGVsc2UgaWYgKCFsb2dn
ZWRTdXBwcmVzc2lvblJlYXNvbikgewogICAgICAgICAgICAgLy8gVGhpcyBsb2dzIG9ubHkgb25l
IHJlYXNvbi4gTGF0ZXIgd2UgY291bGQgY2hhbmdlIGl0IHNvIHdlIGxvZyBhbGwgdGhlIHJlYXNv
bnMuCi0gICAgICAgICAgICBMT0coUmVmQ291bnRlZExlYWtzLCAiTm8gbGVhayBjaGVja2luZyBk
b25lOiAlcyIsIGxlYWtNZXNzYWdlU3VwcHJlc3Npb25SZWFzb25zLT5iZWdpbigpLT5maXJzdCk7
CisgICAgICAgICAgICBMT0coUmVmQ291bnRlZExlYWtzLCAiTm8gbGVhayBjaGVja2luZyBkb25l
OiAlcyIsIGxlYWtNZXNzYWdlU3VwcHJlc3Npb25SZWFzb25zLT5iZWdpbigpLT5rZXkpOwogICAg
ICAgICAgICAgbG9nZ2VkU3VwcHJlc3Npb25SZWFzb24gPSB0cnVlOwogICAgICAgICB9CiAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUmVmUHRySGFzaE1hcC5oIGIvU291cmNlL1dU
Ri93dGYvUmVmUHRySGFzaE1hcC5oCmluZGV4IDBhZjM2YmU2MDI3ZmI1MDBiYmZlYTVjMjFkYzZl
MDhjZGYwMTlmOGIuLmFmM2UwZDI1NWM1MjQ0ZTVkZDBlNGRhYTlmNjA5OGI2OTVjYWEyMzIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1JlZlB0ckhhc2hNYXAuaAorKysgYi9Tb3VyY2UvV1RG
L3d0Zi9SZWZQdHJIYXNoTWFwLmgKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAg
ICAgcHJpdmF0ZToKICAgICAgICAgdHlwZWRlZiBLZXlUcmFpdHNBcmcgS2V5VHJhaXRzOwogICAg
ICAgICB0eXBlZGVmIE1hcHBlZFRyYWl0c0FyZyBNYXBwZWRUcmFpdHM7Ci0gICAgICAgIHR5cGVk
ZWYgUGFpckhhc2hUcmFpdHM8S2V5VHJhaXRzLCBNYXBwZWRUcmFpdHM+IFZhbHVlVHJhaXRzOwor
ICAgICAgICB0eXBlZGVmIEhhc2hNYXBFbnRyeVRyYWl0czxLZXlUcmFpdHMsIE1hcHBlZFRyYWl0
cz4gVmFsdWVUcmFpdHM7CiAKICAgICBwdWJsaWM6CiAgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
S2V5VHJhaXRzOjpUcmFpdFR5cGUgS2V5VHlwZTsKQEAgLTUxLDcgKzUxLDcgQEAgbmFtZXNwYWNl
IFdURiB7CiAgICAgICAgIAogICAgICAgICB0eXBlZGVmIEhhc2hBcmcgSGFzaEZ1bmN0aW9uczsK
IAotICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZTxLZXlUeXBlLCBWYWx1ZVR5cGUsIFBhaXJGaXJz
dEV4dHJhY3RvcjxWYWx1ZVR5cGU+LAorICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZTxLZXlUeXBl
LCBWYWx1ZVR5cGUsIEhhc2hNYXBFbnRyeUtleUV4dHJhY3RvcjxWYWx1ZVR5cGU+LAogICAgICAg
ICAgICAgSGFzaEZ1bmN0aW9ucywgVmFsdWVUcmFpdHMsIEtleVRyYWl0cz4gSGFzaFRhYmxlVHlw
ZTsKIAogICAgICAgICB0eXBlZGVmIEhhc2hNYXBUcmFuc2xhdG9yPFZhbHVlVHJhaXRzLCBIYXNo
RnVuY3Rpb25zPgpAQCAtMjE2LDcgKzIxNiw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBB
ZGRSZXN1bHQgcmVzdWx0ID0gaW5saW5lQWRkKGtleSwgbWFwcGVkKTsKICAgICAgICAgaWYgKCFy
ZXN1bHQuaXNOZXdFbnRyeSkgewogICAgICAgICAgICAgLy8gVGhlIGlubGluZUFkZCBjYWxsIGFi
b3ZlIGZvdW5kIGFuIGV4aXN0aW5nIGhhc2ggdGFibGUgZW50cnk7IHdlIG5lZWQgdG8gc2V0IHRo
ZSBtYXBwZWQgdmFsdWUuCi0gICAgICAgICAgICBNYXBwZWRUcmFpdHM6OnN0b3JlKG1hcHBlZCwg
cmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOworICAgICAgICAgICAgTWFwcGVkVHJhaXRzOjpzdG9y
ZShtYXBwZWQsIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwogICAgICAgICB9CiAgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAgICAgfQpAQCAtMjI4LDcgKzIyOCw3IEBAIG5hbWVzcGFjZSBXVEYgewog
ICAgICAgICBBZGRSZXN1bHQgcmVzdWx0ID0gaW5saW5lQWRkKGtleSwgbWFwcGVkKTsKICAgICAg
ICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkgewogICAgICAgICAgICAgLy8gVGhlIGlubGluZUFk
ZCBjYWxsIGFib3ZlIGZvdW5kIGFuIGV4aXN0aW5nIGhhc2ggdGFibGUgZW50cnk7IHdlIG5lZWQg
dG8gc2V0IHRoZSBtYXBwZWQgdmFsdWUuCi0gICAgICAgICAgICBNYXBwZWRUcmFpdHM6OnN0b3Jl
KG1hcHBlZCwgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOworICAgICAgICAgICAgTWFwcGVkVHJh
aXRzOjpzdG9yZShtYXBwZWQsIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwogICAgICAgICB9CiAg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpAQCAtMjU0LDcgKzI1NCw3IEBAIG5hbWVzcGFj
ZSBXVEYgewogICAgICAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gY29uc3RfY2FzdDxIYXNoVGFibGVU
eXBlJj4obV9pbXBsKS5sb29rdXAoa2V5KTsKICAgICAgICAgaWYgKCFlbnRyeSkKICAgICAgICAg
ICAgIHJldHVybiBNYXBwZWRUcmFpdHM6OnBlZWsoTWFwcGVkVHJhaXRzOjplbXB0eVZhbHVlKCkp
OwotICAgICAgICByZXR1cm4gTWFwcGVkVHJhaXRzOjpwZWVrKGVudHJ5LT5zZWNvbmQpOworICAg
ICAgICByZXR1cm4gTWFwcGVkVHJhaXRzOjpwZWVrKGVudHJ5LT52YWx1ZSk7CiAgICAgfQogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUg
VywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzPgpAQCAtMjY0LDcgKzI2NCw3IEBAIG5hbWVzcGFjZSBX
VEYgewogICAgICAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gY29uc3RfY2FzdDxIYXNoVGFibGVUeXBl
Jj4obV9pbXBsKS50ZW1wbGF0ZSBsb29rdXA8VHJhbnNsYXRvcj4oa2V5KTsKICAgICAgICAgaWYg
KCFlbnRyeSkKICAgICAgICAgICAgIHJldHVybiBNYXBwZWRUcmFpdHM6OnBlZWsoTWFwcGVkVHJh
aXRzOjplbXB0eVZhbHVlKCkpOwotICAgICAgICByZXR1cm4gTWFwcGVkVHJhaXRzOjpwZWVrKGVu
dHJ5LT5zZWNvbmQpOworICAgICAgICByZXR1cm4gTWFwcGVkVHJhaXRzOjpwZWVrKGVudHJ5LT52
YWx1ZSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlw
ZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzPgpAQCAtMzA4LDcgKzMw
OCw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBpdGVyYXRvciBpdCA9IGZpbmQoa2V5KTsK
ICAgICAgICAgaWYgKGl0ID09IGVuZCgpKQogICAgICAgICAgICAgcmV0dXJuIE1hcHBlZFRyYWl0
czo6cGFzc091dChNYXBwZWRUcmFpdHM6OmVtcHR5VmFsdWUoKSk7Ci0gICAgICAgIE1hcHBlZFBh
c3NPdXRUeXBlIHJlc3VsdCA9IE1hcHBlZFRyYWl0czo6cGFzc091dChpdC0+c2Vjb25kKTsKKyAg
ICAgICAgTWFwcGVkUGFzc091dFR5cGUgcmVzdWx0ID0gTWFwcGVkVHJhaXRzOjpwYXNzT3V0KGl0
LT52YWx1ZSk7CiAgICAgICAgIHJlbW92ZShpdCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICAgfQpAQCAtMzIwLDcgKzMyMCw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBpdGVyYXRv
ciBpdCA9IGZpbmQoa2V5KTsKICAgICAgICAgaWYgKGl0ID09IGVuZCgpKQogICAgICAgICAgICAg
cmV0dXJuIE1hcHBlZFRyYWl0czo6cGFzc091dChNYXBwZWRUcmFpdHM6OmVtcHR5VmFsdWUoKSk7
Ci0gICAgICAgIE1hcHBlZFBhc3NPdXRUeXBlIHJlc3VsdCA9IE1hcHBlZFRyYWl0czo6cGFzc091
dChpdC0+c2Vjb25kKTsKKyAgICAgICAgTWFwcGVkUGFzc091dFR5cGUgcmVzdWx0ID0gTWFwcGVk
VHJhaXRzOjpwYXNzT3V0KGl0LT52YWx1ZSk7CiAgICAgICAgIHJlbW92ZShpdCk7CiAgICAgICAg
IHJldHVybiByZXN1bHQ7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvU3BlY3Ry
dW0uaCBiL1NvdXJjZS9XVEYvd3RmL1NwZWN0cnVtLmgKaW5kZXggNWU3YTQ4NGNkODc2NmJjYWYy
MmNhNGM5M2RkY2U5NzBkZDJiYTIxMy4uZjBmMTllYjFjYmZhZTJhM2ZhZDkyYThlMjlkZDhlYTI5
ODliNDQ1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvU3BlY3RydW0uaAorKysgYi9Tb3Vy
Y2UvV1RGL3d0Zi9TcGVjdHJ1bS5oCkBAIC00NCw3ICs0NCw3IEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgICAgIHR5cGVuYW1lIEhhc2hNYXA8VCwgdW5zaWduZWQgbG9uZz46OkFkZFJlc3VsdCByZXN1
bHQgPSBtX21hcC5hZGQoa2V5LCBjb3VudCk7CiAgICAgICAgIGlmICghcmVzdWx0LmlzTmV3RW50
cnkpCi0gICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCArPSBjb3VudDsKKyAgICAg
ICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgKz0gY291bnQ7CiAgICAgfQogICAgIAogICAg
IHVuc2lnbmVkIGxvbmcgZ2V0KGNvbnN0IFQmIGtleSkgY29uc3QKQEAgLTg4LDcgKzg4LDcgQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgVmVjdG9yPEtleUFuZENvdW50PiBsaXN0OwogICAgICAg
ICBmb3IgKGNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBiZWdpbigpOyBpdGVyICE9IGVuZCgpOyArK2l0
ZXIpCi0gICAgICAgICAgICBsaXN0LmFwcGVuZChLZXlBbmRDb3VudChpdGVyLT5maXJzdCwgaXRl
ci0+c2Vjb25kKSk7CisgICAgICAgICAgICBsaXN0LmFwcGVuZChLZXlBbmRDb3VudChpdGVyLT5r
ZXksIGl0ZXItPnZhbHVlKSk7CiAgICAgICAgIAogICAgICAgICBzdGQ6OnNvcnQobGlzdC5iZWdp
bigpLCBsaXN0LmVuZCgpKTsKICAgICAgICAgcmV0dXJuIGxpc3Q7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRp
bmdQdGhyZWFkcy5jcHAKaW5kZXggYWJkMzUwZGJiYTNhMTgzMjNhNTE3MzNjOGYxNWQ2ZmQ0OGMx
YmM3NS4uNzQzYzk0YTNiMDlkYzAyM2I3YWVkMjY1MjEyODYwMzExZTY3YmQwMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwCisrKyBiL1NvdXJjZS9XVEYv
d3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcApAQCAtMTE5LDggKzExOSw4IEBAIHN0YXRpYyBUaHJl
YWRJZGVudGlmaWVyIGlkZW50aWZpZXJCeVB0aHJlYWRIYW5kbGUoY29uc3QgcHRocmVhZF90JiBw
dGhyZWFkSGFuZGxlCiAKICAgICBUaHJlYWRNYXA6Oml0ZXJhdG9yIGkgPSB0aHJlYWRNYXAoKS5i
ZWdpbigpOwogICAgIGZvciAoOyBpICE9IHRocmVhZE1hcCgpLmVuZCgpOyArK2kpIHsKLSAgICAg
ICAgaWYgKHB0aHJlYWRfZXF1YWwoaS0+c2Vjb25kLCBwdGhyZWFkSGFuZGxlKSkKLSAgICAgICAg
ICAgIHJldHVybiBpLT5maXJzdDsKKyAgICAgICAgaWYgKHB0aHJlYWRfZXF1YWwoaS0+dmFsdWUs
IHB0aHJlYWRIYW5kbGUpKQorICAgICAgICAgICAgcmV0dXJuIGktPmtleTsKICAgICB9CiAKICAg
ICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRp
b24vR2VvbG9jYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9H
ZW9sb2NhdGlvbi5jcHAKaW5kZXggZTJjYzg5YzYzNjhjNGU3OWUyYjVlY2U4OTY3OGVmOGYwNjVj
MWNmZi4uNTBiNzU1NDliYjQ5YmQ0OWIyNjA0ZDRhOTc5MmYzOWJmZTU2NjcxYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlvbi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlvbi5jcHAKQEAg
LTE5NCw3ICsxOTQsNyBAQCBHZW9sb2NhdGlvbjo6R2VvTm90aWZpZXIqIEdlb2xvY2F0aW9uOjpX
YXRjaGVyczo6ZmluZChpbnQgaWQpCiAgICAgSWRUb05vdGlmaWVyTWFwOjppdGVyYXRvciBpdGVy
ID0gbV9pZFRvTm90aWZpZXJNYXAuZmluZChpZCk7CiAgICAgaWYgKGl0ZXIgPT0gbV9pZFRvTm90
aWZpZXJNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBpdGVyLT5zZWNv
bmQuZ2V0KCk7CisgICAgcmV0dXJuIGl0ZXItPnZhbHVlLmdldCgpOwogfQogCiB2b2lkIEdlb2xv
Y2F0aW9uOjpXYXRjaGVyczo6cmVtb3ZlKGludCBpZCkKQEAgLTIwMyw3ICsyMDMsNyBAQCB2b2lk
IEdlb2xvY2F0aW9uOjpXYXRjaGVyczo6cmVtb3ZlKGludCBpZCkKICAgICBJZFRvTm90aWZpZXJN
YXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2lkVG9Ob3RpZmllck1hcC5maW5kKGlkKTsKICAgICBpZiAo
aXRlciA9PSBtX2lkVG9Ob3RpZmllck1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIG1f
bm90aWZpZXJUb0lkTWFwLnJlbW92ZShpdGVyLT5zZWNvbmQpOworICAgIG1fbm90aWZpZXJUb0lk
TWFwLnJlbW92ZShpdGVyLT52YWx1ZSk7CiAgICAgbV9pZFRvTm90aWZpZXJNYXAucmVtb3ZlKGl0
ZXIpOwogfQogCkBAIC0yMTIsNyArMjEyLDcgQEAgdm9pZCBHZW9sb2NhdGlvbjo6V2F0Y2hlcnM6
OnJlbW92ZShHZW9Ob3RpZmllciogbm90aWZpZXIpCiAgICAgTm90aWZpZXJUb0lkTWFwOjppdGVy
YXRvciBpdGVyID0gbV9ub3RpZmllclRvSWRNYXAuZmluZChub3RpZmllcik7CiAgICAgaWYgKGl0
ZXIgPT0gbV9ub3RpZmllclRvSWRNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBtX2lk
VG9Ob3RpZmllck1hcC5yZW1vdmUoaXRlci0+c2Vjb25kKTsKKyAgICBtX2lkVG9Ob3RpZmllck1h
cC5yZW1vdmUoaXRlci0+dmFsdWUpOwogICAgIG1fbm90aWZpZXJUb0lkTWFwLnJlbW92ZShpdGVy
KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
RGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcAppbmRleCBiMDViMzI4NjNkMDcyZmI2NTdkY2E5
YzhkNjRlMGI4NTFhZDA5MjQ1Li4zNzA0M2ZkNTVhZjJiNGI3OTA4MjU0ZTlmMjFkNzI5YzUxNTMy
MWRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRh
YmFzZUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcApAQCAtMTMyLDcgKzEzMiw3IEBAIFBhc3NSZWZQ
dHI8RE9NU3RyaW5nTGlzdD4gSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6b2JqZWN0U3RvcmVOYW1l
cygpIGNvbnN0CiB7CiAgICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+IG9iamVjdFN0b3JlTmFtZXMg
PSBET01TdHJpbmdMaXN0OjpjcmVhdGUoKTsKICAgICBmb3IgKE9iamVjdFN0b3JlTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IG1fb2JqZWN0U3RvcmVzLmJlZ2luKCk7IGl0ICE9IG1fb2JqZWN0U3Rv
cmVzLmVuZCgpOyArK2l0KQotICAgICAgICBvYmplY3RTdG9yZU5hbWVzLT5hcHBlbmQoaXQtPmZp
cnN0KTsKKyAgICAgICAgb2JqZWN0U3RvcmVOYW1lcy0+YXBwZW5kKGl0LT5rZXkpOwogICAgIG9i
amVjdFN0b3JlTmFtZXMtPnNvcnQoKTsKICAgICByZXR1cm4gb2JqZWN0U3RvcmVOYW1lcy5yZWxl
YXNlKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJGYWN0b3J5QmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcAppbmRleCBmNWI5Yzg3NzQwNjc0M2YwZTVhNjA5
YTRjY2U5ZDVlNGRhMjlhMzFjLi4yOTYwYjAyY2IyZTZiOGQ2NzE0YzIwN2E5OWQ1NzU4MWY3MDVk
ZTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0
b3J5QmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKQEAgLTExNyw3ICsxMTcsNyBAQCB2b2lkIElEQkZh
Y3RvcnlCYWNrZW5kSW1wbDo6ZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNz
UmVmUHRyPElEQkNhbAogICAgIGlmIChpdCAhPSBtX2RhdGFiYXNlQmFja2VuZE1hcC5lbmQoKSkg
ewogICAgICAgICAvLyBJZiB0aGVyZSBhcmUgYW55IGNvbm5lY3Rpb25zIHRvIHRoZSBkYXRhYmFz
ZSwgZGlyZWN0bHkgZGVsZXRlIHRoZQogICAgICAgICAvLyBkYXRhYmFzZS4KLSAgICAgICAgaXQt
PnNlY29uZC0+ZGVsZXRlRGF0YWJhc2UoY2FsbGJhY2tzKTsKKyAgICAgICAgaXQtPnZhbHVlLT5k
ZWxldGVEYXRhYmFzZShjYWxsYmFja3MpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0x
NDAsNyArMTQwLDcgQEAgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IElEQkZhY3RvcnlCYWNr
ZW5kSW1wbDo6b3BlbkJhY2tpbmdTdG9yZShQYXNzUmVmUHRyPFMKICAgICBSZWZQdHI8SURCQmFj
a2luZ1N0b3JlPiBiYWNraW5nU3RvcmU7CiAgICAgSURCQmFja2luZ1N0b3JlTWFwOjppdGVyYXRv
ciBpdDIgPSBtX2JhY2tpbmdTdG9yZU1hcC5maW5kKGZpbGVJZGVudGlmaWVyKTsKICAgICBpZiAo
aXQyICE9IG1fYmFja2luZ1N0b3JlTWFwLmVuZCgpKQotICAgICAgICBiYWNraW5nU3RvcmUgPSBp
dDItPnNlY29uZDsKKyAgICAgICAgYmFja2luZ1N0b3JlID0gaXQyLT52YWx1ZTsKICAgICBlbHNl
IHsKICNpZiBVU0UoTEVWRUxEQikKICAgICAgICAgYmFja2luZ1N0b3JlID0gSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZTo6b3BlbihzZWN1cml0eU9yaWdpbi5nZXQoKSwgZGF0YURpcmVjdG9yeSwgZmls
ZUlkZW50aWZpZXIsIHRoaXMpOwpAQCAtMTY1LDcgKzE2NSw3IEBAIHZvaWQgSURCRmFjdG9yeUJh
Y2tlbmRJbXBsOjpvcGVuSW50ZXJuYWwoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJDYWxsYmFja3Mq
IGNhbGxiCiAgICAgaWYgKGl0ICE9IG1fZGF0YWJhc2VCYWNrZW5kTWFwLmVuZCgpKSB7CiAgICAg
ICAgIC8vIElmIGl0J3MgYWxyZWFkeSBiZWVuIG9wZW5lZCwgd2UgaGF2ZSB0byB3YWl0IGZvciBh
bnkgcGVuZGluZwogICAgICAgICAvLyBzZXRWZXJzaW9uIGNhbGxzIHRvIGNvbXBsZXRlLgotICAg
ICAgICBpdC0+c2Vjb25kLT5vcGVuQ29ubmVjdGlvbihjYWxsYmFja3MpOworICAgICAgICBpdC0+
dmFsdWUtPm9wZW5Db25uZWN0aW9uKGNhbGxiYWNrcyk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVj
dFN0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0
b3JlLmNwcAppbmRleCBkZjkyNmY0NTljNjQ4YjNiZTVjYjI2MmU3MTMxMWMwYmQ1ZGI4YTZhLi45
MzU4MTY1YWE3ZWJiMjEzY2U3NDg1ZTA4NTQ4N2MxOTFlNmI3MDRkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCkBAIC0yMjQs
NyArMjI0LDcgQEAgUGFzc1JlZlB0cjxJREJJbmRleD4gSURCT2JqZWN0U3RvcmU6OmluZGV4KGNv
bnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMKIAogICAgIElEQkluZGV4TWFwOjpp
dGVyYXRvciBpdCA9IG1faW5kZXhNYXAuZmluZChuYW1lKTsKICAgICBpZiAoaXQgIT0gbV9pbmRl
eE1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBp
dC0+dmFsdWU7CiAKICAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBpbmRleEJh
Y2tlbmQgPSBtX2JhY2tlbmQtPmluZGV4KG5hbWUsIGVjKTsKICAgICBBU1NFUlQoIWluZGV4QmFj
a2VuZCAhPSAhZWMpOyAvLyBJZiB3ZSBkaWRuJ3QgZ2V0IGFuIGluZGV4LCB3ZSBzaG91bGQgaGF2
ZSBnb3R0ZW4gYW4gZXhjZXB0aW9uIGNvZGUuIEFuZCB2aWNlIHZlcnNhLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsLmNwcAppbmRleCAyZTJmMGZhOTZkZTg5ODRkMzdmYTk3ZTQyMTQ0ZDZiNzRkYjNh
OGU3Li45Zjk1ZmI5YmU1YTJmYTMyODhkOWY2NzNjZGE4ZjY5MGQ4ZDE5MzMwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsLmNwcApAQCAtNzgsNyArNzgsNyBAQCBQYXNzUmVmUHRyPERPTVN0cmlu
Z0xpc3Q+IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmluZGV4TmFtZXMoKSBjb25zdAogewog
ICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiBpbmRleE5hbWVzID0gRE9NU3RyaW5nTGlzdDo6Y3Jl
YXRlKCk7CiAgICAgZm9yIChJbmRleE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2luZGV4ZXMu
YmVnaW4oKTsgaXQgIT0gbV9pbmRleGVzLmVuZCgpOyArK2l0KQotICAgICAgICBpbmRleE5hbWVz
LT5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgaW5kZXhOYW1lcy0+YXBwZW5kKGl0LT5rZXkp
OwogICAgIGluZGV4TmFtZXMtPnNvcnQoKTsKICAgICByZXR1cm4gaW5kZXhOYW1lcy5yZWxlYXNl
KCk7CiB9CkBAIC0xNzQsNyArMTc0LDcgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
OjpwdXQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlLAogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGZvciAoSW5kZXhNYXA6Oml0ZXJhdG9y
IGl0ID0gbV9pbmRleGVzLmJlZ2luKCk7IGl0ICE9IG1faW5kZXhlcy5lbmQoKTsgKytpdCkgewot
ICAgICAgICAgICAgY29uc3QgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+JiBpbmRleCA9IGl0
LT5zZWNvbmQ7CisgICAgICAgICAgICBjb25zdCBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4m
IGluZGV4ID0gaXQtPnZhbHVlOwogICAgICAgICAgICAgUmVmUHRyPElEQktleT4gaW5kZXhLZXkg
PSBmZXRjaEtleUZyb21LZXlQYXRoKHZhbHVlLmdldCgpLCBpbmRleC0+a2V5UGF0aCgpKTsKICAg
ICAgICAgICAgIGlmIChpbmRleEtleSAmJiAhaW5kZXhLZXktPnZhbGlkKCkpIHsKICAgICAgICAg
ICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKQEAgLTI1NCw3ICsy
NTQsNyBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPAogCiAgICAgVmVjdG9yPFJlZlB0cjxJREJL
ZXk+ID4gaW5kZXhLZXlzOwogICAgIGZvciAoSW5kZXhNYXA6Oml0ZXJhdG9yIGl0ID0gb2JqZWN0
U3RvcmUtPm1faW5kZXhlcy5iZWdpbigpOyBpdCAhPSBvYmplY3RTdG9yZS0+bV9pbmRleGVzLmVu
ZCgpOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiYg
aW5kZXggPSBpdC0+c2Vjb25kOworICAgICAgICBjb25zdCBSZWZQdHI8SURCSW5kZXhCYWNrZW5k
SW1wbD4mIGluZGV4ID0gaXQtPnZhbHVlOwogCiAgICAgICAgIFJlZlB0cjxJREJLZXk+IGluZGV4
S2V5ID0gZmV0Y2hLZXlGcm9tS2V5UGF0aCh2YWx1ZS5nZXQoKSwgaW5kZXgtPmtleVBhdGgoKSk7
CiAgICAgICAgIGlmICghaW5kZXhLZXkpIHsKQEAgLTI5Myw3ICsyOTMsNyBAQCB2b2lkIElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBQYXNzUmVmUHRyPAogCiAgICAgaW50IGkgPSAwOwogICAgIGZvciAoSW5kZXhNYXA6Oml0ZXJh
dG9yIGl0ID0gb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5iZWdpbigpOyBpdCAhPSBvYmplY3RTdG9y
ZS0+bV9pbmRleGVzLmVuZCgpOyArK2l0LCArK2kpIHsKLSAgICAgICAgUmVmUHRyPElEQkluZGV4
QmFja2VuZEltcGw+JiBpbmRleCA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFJlZlB0cjxJREJJbmRl
eEJhY2tlbmRJbXBsPiYgaW5kZXggPSBpdC0+dmFsdWU7CiAgICAgICAgIGlmICghaW5kZXgtPmhh
c1ZhbGlkSWQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBUaGUgaW5kZXggb2JqZWN0IGhh
cyBiZWVuIGNyZWF0ZWQsIGJ1dCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgZGF0YWJhc2UgeWV0Lgog
CkBAIC0zNzYsMTAgKzM3NiwxMCBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRl
bGV0ZUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUAogICAgICAgICAg
ICAgcmVjb3JkSWRlbnRpZmllciA9IGJhY2tpbmdTdG9yZUN1cnNvci0+b2JqZWN0U3RvcmVSZWNv
cmRJZGVudGlmaWVyKCk7CiAKICAgICAgICAgICAgIGZvciAoSW5kZXhNYXA6Oml0ZXJhdG9yIGl0
ID0gb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5iZWdpbigpOyBpdCAhPSBvYmplY3RTdG9yZS0+bV9p
bmRleGVzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFpdC0+c2Vjb25kLT5o
YXNWYWxpZElkKCkpCisgICAgICAgICAgICAgICAgaWYgKCFpdC0+dmFsdWUtPmhhc1ZhbGlkSWQo
KSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7IC8vIFRoZSBpbmRleCBvYmplY3QgaGFz
IGJlZW4gY3JlYXRlZCwgYnV0IGRvZXMgbm90IGV4aXN0IGluIHRoZSBkYXRhYmFzZSB5ZXQuCiAK
LSAgICAgICAgICAgICAgICBib29sIHN1Y2Nlc3MgPSBvYmplY3RTdG9yZS0+bV9iYWNraW5nU3Rv
cmUtPmRlbGV0ZUluZGV4RGF0YUZvclJlY29yZChvYmplY3RTdG9yZS0+bV9kYXRhYmFzZUlkLCBv
YmplY3RTdG9yZS0+aWQoKSwgaXQtPnNlY29uZC0+aWQoKSwgcmVjb3JkSWRlbnRpZmllci5nZXQo
KSk7CisgICAgICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gb2JqZWN0U3RvcmUtPm1fYmFja2lu
Z1N0b3JlLT5kZWxldGVJbmRleERhdGFGb3JSZWNvcmQob2JqZWN0U3RvcmUtPm1fZGF0YWJhc2VJ
ZCwgb2JqZWN0U3RvcmUtPmlkKCksIGl0LT52YWx1ZS0+aWQoKSwgcmVjb3JkSWRlbnRpZmllci5n
ZXQoKSk7CiAgICAgICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsK
ICAgICAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCVHJhbnNhY3Rpb24uY3BwCmluZGV4IDllMGIzYThmNzI5YzRiNjFkMDg0YzdhZGNkMjBj
MWExYTYyYzg1MWUuLmJhYmM3MWE4OTk5NDhjM2M0ZDcxMmNiOGNkOWU2YmFmMjYwMTFiYTcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9u
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlv
bi5jcHAKQEAgLTkzLDcgKzkzLDcgQEAgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gSURCVHJh
bnNhY3Rpb246Om9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXAKIAogICAgIElE
Qk9iamVjdFN0b3JlTWFwOjppdGVyYXRvciBpdCA9IG1fb2JqZWN0U3RvcmVNYXAuZmluZChuYW1l
KTsKICAgICBpZiAoaXQgIT0gbV9vYmplY3RTdG9yZU1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJu
IGl0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBpdC0+dmFsdWU7CiAKICAgICBSZWZQdHI8SURC
T2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBvYmplY3RTdG9yZUJhY2tlbmQgPSBtX2JhY2tl
bmQtPm9iamVjdFN0b3JlKG5hbWUsIGVjKTsKICAgICBpZiAoIW9iamVjdFN0b3JlQmFja2VuZCkg
ewpAQCAtMjI3LDcgKzIyNyw3IEBAIGJvb2wgSURCVHJhbnNhY3Rpb246OmRpc3BhdGNoRXZlbnQo
UGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCiAKICAgICAvLyBCcmVhayByZWZlcmVuY2UgY3ljbGVz
LgogICAgIGZvciAoSURCT2JqZWN0U3RvcmVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9vYmplY3RTdG9y
ZU1hcC5iZWdpbigpOyBpdCAhPSBtX29iamVjdFN0b3JlTWFwLmVuZCgpOyArK2l0KQotICAgICAg
ICBpdC0+c2Vjb25kLT50cmFuc2FjdGlvbkZpbmlzaGVkKCk7CisgICAgICAgIGl0LT52YWx1ZS0+
dHJhbnNhY3Rpb25GaW5pc2hlZCgpOwogICAgIG1fb2JqZWN0U3RvcmVNYXAuY2xlYXIoKTsKIAog
ICAgIFZlY3RvcjxSZWZQdHI8RXZlbnRUYXJnZXQ+ID4gdGFyZ2V0czsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvQWJzdHJhY3REYXRhYmFzZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Fic3RyYWN0RGF0YWJhc2UuY3BwCmlu
ZGV4IGU1MWMyNDQ0ODY2YTZjY2NiZDliNGE5Zjk3ZDY5ZGIyMjUzMmFmZDIuLmYwNGJjZDg5YjFh
ZmFmZDI2OGQ2MjJlZjc4ZTBiOTY4Njg5NmRlY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZGF0YWJhc2UvQWJzdHJhY3REYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9BYnN0cmFjdERhdGFiYXNlLmNwcApAQCAtMjgyLDcg
KzI4Miw3IEBAIGJvb2wgQWJzdHJhY3REYXRhYmFzZTo6cGVyZm9ybU9wZW5BbmRWZXJpZnkoYm9v
bCBzaG91bGRTZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwKICAgICAgICAgR3VpZFZlcnNpb25NYXA6
Oml0ZXJhdG9yIGVudHJ5ID0gZ3VpZFRvVmVyc2lvbk1hcCgpLmZpbmQobV9ndWlkKTsKICAgICAg
ICAgaWYgKGVudHJ5ICE9IGd1aWRUb1ZlcnNpb25NYXAoKS5lbmQoKSkgewogICAgICAgICAgICAg
Ly8gTWFwIG51bGwgc3RyaW5nIHRvIGVtcHR5IHN0cmluZyAoc2VlIHVwZGF0ZUd1aWRWZXJzaW9u
TWFwKCkpLgotICAgICAgICAgICAgY3VycmVudFZlcnNpb24gPSBlbnRyeS0+c2Vjb25kLmlzTnVs
bCgpID8gU3RyaW5nKCIiKSA6IGVudHJ5LT5zZWNvbmQuaXNvbGF0ZWRDb3B5KCk7CisgICAgICAg
ICAgICBjdXJyZW50VmVyc2lvbiA9IGVudHJ5LT52YWx1ZS5pc051bGwoKSA/IFN0cmluZygiIikg
OiBlbnRyeS0+dmFsdWUuaXNvbGF0ZWRDb3B5KCk7CiAgICAgICAgICAgICBMT0coU3RvcmFnZUFQ
SSwgIkN1cnJlbnQgY2FjaGVkIHZlcnNpb24gZm9yIGd1aWQgJWkgaXMgJXMiLCBtX2d1aWQsIGN1
cnJlbnRWZXJzaW9uLmFzY2lpKCkuZGF0YSgpKTsKIAogI2lmIFBMQVRGT1JNKENIUk9NSVVNKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRy
YWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRy
YWNrZXIuY3BwCmluZGV4IDIzM2IzNzIxYjZlMzYwZDE4NjU5NWNjMDkyNzljNGE4OGUzYzZkNWEu
LjNjZmNmZmVlN2IxYmFiZjhkZjc0MzA4NDVmNGEwMzZiMTUzYjdhMmIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5jcHAK
QEAgLTI1Miw3ICsyNTIsNyBAQCB2b2lkIERhdGFiYXNlVHJhY2tlcjo6aW50ZXJydXB0QWxsRGF0
YWJhc2VzRm9yQ29udGV4dChjb25zdCBTY3JpcHRFeGVjdXRpb25Db250ZQogCiAgICAgICAgIERh
dGFiYXNlTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgZGJOYW1lTWFwRW5kSXQgPSBuYW1lTWFwLT5l
bmQoKTsKICAgICAgICAgZm9yIChEYXRhYmFzZU5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGRiTmFt
ZU1hcEl0ID0gbmFtZU1hcC0+YmVnaW4oKTsgZGJOYW1lTWFwSXQgIT0gZGJOYW1lTWFwRW5kSXQ7
ICsrZGJOYW1lTWFwSXQpIHsKLSAgICAgICAgICAgIERhdGFiYXNlU2V0KiBkYXRhYmFzZVNldCA9
IGRiTmFtZU1hcEl0LT5zZWNvbmQ7CisgICAgICAgICAgICBEYXRhYmFzZVNldCogZGF0YWJhc2VT
ZXQgPSBkYk5hbWVNYXBJdC0+dmFsdWU7CiAgICAgICAgICAgICBEYXRhYmFzZVNldDo6Y29uc3Rf
aXRlcmF0b3IgZGJTZXRFbmRJdCA9IGRhdGFiYXNlU2V0LT5lbmQoKTsKICAgICAgICAgICAgIGZv
ciAoRGF0YWJhc2VTZXQ6OmNvbnN0X2l0ZXJhdG9yIGRiU2V0SXQgPSBkYXRhYmFzZVNldC0+YmVn
aW4oKTsgZGJTZXRJdCAhPSBkYlNldEVuZEl0OyArK2RiU2V0SXQpIHsKICAgICAgICAgICAgICAg
ICBpZiAoKCpkYlNldEl0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpID09IGNvbnRleHQpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL09yaWdpblVzYWdl
UmVjb3JkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvT3JpZ2luVXNh
Z2VSZWNvcmQuY3BwCmluZGV4IDQ0MzU1MGE1NzMwOWYzMzYzZjBmY2E5OGY1MDhjMDI3NmQwZDk5
ZGIuLjJiZjhhZjRhZTAwOTkyODBhY2ExNzU3NzQ4YmEyMWNmOTBiNzAyZGIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvT3JpZ2luVXNhZ2VSZWNvcmQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvT3JpZ2luVXNhZ2VSZWNv
cmQuY3BwCkBAIC05Myw3ICs5Myw3IEBAIHVuc2lnbmVkIGxvbmcgbG9uZyBPcmlnaW5Vc2FnZVJl
Y29yZDo6ZGlza1VzYWdlKCkKICAgICBIYXNoTWFwPFN0cmluZywgRGF0YWJhc2VFbnRyeT46Oml0
ZXJhdG9yIGlEYXRhYmFzZSA9IG1fZGF0YWJhc2VNYXAuYmVnaW4oKTsKICAgICBIYXNoTWFwPFN0
cmluZywgRGF0YWJhc2VFbnRyeT46Oml0ZXJhdG9yIGVuZERhdGFiYXNlID0gbV9kYXRhYmFzZU1h
cC5lbmQoKTsKICAgICBmb3IgKDsgaURhdGFiYXNlICE9IGVuZERhdGFiYXNlOyArK2lEYXRhYmFz
ZSkKLSAgICAgICAgbV9jYWNoZWREaXNrVXNhZ2UgKz0gaURhdGFiYXNlLT5zZWNvbmQuc2l6ZTsK
KyAgICAgICAgbV9jYWNoZWREaXNrVXNhZ2UgKz0gaURhdGFiYXNlLT52YWx1ZS5zaXplOwogCiAg
ICAgbV9jYWNoZWREaXNrVXNhZ2VJc1ZhbGlkID0gdHJ1ZTsKICAgICByZXR1cm4gbV9jYWNoZWRE
aXNrVXNhZ2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNl
L1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcAppbmRleCA4MzdiOGZiZDIy
MDVhZGM5NzQ4NmRkM2YwZThmMDIwNzM4MGY4ZDliLi5kYTNhN2VlNzViOGMwMTI1OTQ2NmVjNGE3
ZWFkYTk3YmQxYzIzYmY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRh
dGFiYXNlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAKQEAgLTc4
LDcgKzc4LDcgQEAgdm9pZCBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjphY3F1aXJlTG9jayhT
UUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCiAgICAgICAgIGNvb3JkaW5hdGlvbkluZm9JdGVy
YXRvciA9IG1fY29vcmRpbmF0aW9uSW5mb01hcC5hZGQoZGJJZGVudGlmaWVyLCBDb29yZGluYXRp
b25JbmZvKCkpLml0ZXJhdG9yOwogICAgIH0KIAotICAgIENvb3JkaW5hdGlvbkluZm8mIGluZm8g
PSBjb29yZGluYXRpb25JbmZvSXRlcmF0b3ItPnNlY29uZDsKKyAgICBDb29yZGluYXRpb25JbmZv
JiBpbmZvID0gY29vcmRpbmF0aW9uSW5mb0l0ZXJhdG9yLT52YWx1ZTsKICAgICBpbmZvLnBlbmRp
bmdUcmFuc2FjdGlvbnMuYXBwZW5kKHRyYW5zYWN0aW9uKTsKICAgICBwcm9jZXNzUGVuZGluZ1Ry
YW5zYWN0aW9ucyhpbmZvKTsKIH0KQEAgLTkyLDcgKzkyLDcgQEAgdm9pZCBTUUxUcmFuc2FjdGlv
bkNvb3JkaW5hdG9yOjpyZWxlYXNlTG9jayhTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCiAK
ICAgICBDb29yZGluYXRpb25JbmZvTWFwOjppdGVyYXRvciBjb29yZGluYXRpb25JbmZvSXRlcmF0
b3IgPSBtX2Nvb3JkaW5hdGlvbkluZm9NYXAuZmluZChkYklkZW50aWZpZXIpOwogICAgIEFTU0VS
VChjb29yZGluYXRpb25JbmZvSXRlcmF0b3IgIT0gbV9jb29yZGluYXRpb25JbmZvTWFwLmVuZCgp
KTsKLSAgICBDb29yZGluYXRpb25JbmZvJiBpbmZvID0gY29vcmRpbmF0aW9uSW5mb0l0ZXJhdG9y
LT5zZWNvbmQ7CisgICAgQ29vcmRpbmF0aW9uSW5mbyYgaW5mbyA9IGNvb3JkaW5hdGlvbkluZm9J
dGVyYXRvci0+dmFsdWU7CiAKICAgICBpZiAodHJhbnNhY3Rpb24tPmlzUmVhZE9ubHkoKSkgewog
ICAgICAgICBBU1NFUlQoaW5mby5hY3RpdmVSZWFkVHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5z
YWN0aW9uKSk7CkBAIC0xMTAsNyArMTEwLDcgQEAgdm9pZCBTUUxUcmFuc2FjdGlvbkNvb3JkaW5h
dG9yOjpzaHV0ZG93bigpCiAgICAgLy8gTm90aWZ5IGFsbCB0cmFuc2FjdGlvbnMgaW4gcHJvZ3Jl
c3MgdGhhdCB0aGUgZGF0YWJhc2UgdGhyZWFkIGlzIHNodXR0aW5nIGRvd24KICAgICBmb3IgKENv
b3JkaW5hdGlvbkluZm9NYXA6Oml0ZXJhdG9yIGNvb3JkaW5hdGlvbkluZm9JdGVyYXRvciA9IG1f
Y29vcmRpbmF0aW9uSW5mb01hcC5iZWdpbigpOwogICAgICAgICAgY29vcmRpbmF0aW9uSW5mb0l0
ZXJhdG9yICE9IG1fY29vcmRpbmF0aW9uSW5mb01hcC5lbmQoKTsgKytjb29yZGluYXRpb25JbmZv
SXRlcmF0b3IpIHsKLSAgICAgICAgQ29vcmRpbmF0aW9uSW5mbyYgaW5mbyA9IGNvb3JkaW5hdGlv
bkluZm9JdGVyYXRvci0+c2Vjb25kOworICAgICAgICBDb29yZGluYXRpb25JbmZvJiBpbmZvID0g
Y29vcmRpbmF0aW9uSW5mb0l0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgaWYgKGluZm8uYWN0aXZl
V3JpdGVUcmFuc2FjdGlvbikKICAgICAgICAgICAgIGluZm8uYWN0aXZlV3JpdGVUcmFuc2FjdGlv
bi0+bm90aWZ5RGF0YWJhc2VUaHJlYWRJc1NodXR0aW5nRG93bigpOwogICAgICAgICBmb3IgKEhh
c2hTZXQ8UmVmUHRyPFNRTFRyYW5zYWN0aW9uPiA+OjppdGVyYXRvciBhY3RpdmVSZWFkVHJhbnNh
Y3Rpb25zSXRlcmF0b3IgPQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9jaHJvbWl1bS9EYXRhYmFzZVRyYWNrZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL0RhdGFiYXNlVHJhY2tlckNocm9taXVt
LmNwcAppbmRleCAxMTdmZGJlZWQzMWQ2M2I2NGI5NDE4MDNiOGVhZGNkOTk4NWNlZWZjLi42MGE3
NmNhNWM5NTk4MmJlYTk0Y2UwN2JhZjY2ZWRhNWQ4MjdjNWFiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL0RhdGFiYXNlVHJhY2tlckNocm9t
aXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVt
L0RhdGFiYXNlVHJhY2tlckNocm9taXVtLmNwcApAQCAtMTgwLDcgKzE4MCw3IEBAIHZvaWQgRGF0
YWJhc2VUcmFja2VyOjppbnRlcnJ1cHRBbGxEYXRhYmFzZXNGb3JDb250ZXh0KGNvbnN0IFNjcmlw
dEV4ZWN1dGlvbkNvbnRlCiAKICAgICBEYXRhYmFzZU5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGRi
TmFtZU1hcEVuZEl0ID0gbmFtZU1hcC0+ZW5kKCk7CiAgICAgZm9yIChEYXRhYmFzZU5hbWVNYXA6
OmNvbnN0X2l0ZXJhdG9yIGRiTmFtZU1hcEl0ID0gbmFtZU1hcC0+YmVnaW4oKTsgZGJOYW1lTWFw
SXQgIT0gZGJOYW1lTWFwRW5kSXQ7ICsrZGJOYW1lTWFwSXQpIHsKLSAgICAgICAgRGF0YWJhc2VT
ZXQqIGRhdGFiYXNlU2V0ID0gZGJOYW1lTWFwSXQtPnNlY29uZDsKKyAgICAgICAgRGF0YWJhc2VT
ZXQqIGRhdGFiYXNlU2V0ID0gZGJOYW1lTWFwSXQtPnZhbHVlOwogICAgICAgICBEYXRhYmFzZVNl
dDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gZGF0YWJhc2VTZXQtPmVuZCgpOwogICAgICAgICBmb3Ig
KERhdGFiYXNlU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IGRhdGFiYXNlU2V0LT5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIGlmICgoKml0KS0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpID09IGNvbnRleHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmRhdGFiYXNlL2Nocm9taXVtL1F1b3RhVHJhY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL1F1b3RhVHJhY2tlci5jcHAKaW5kZXggMTBiMDhh
MmI3MjNjZGEyOTIwZDQzZGVmYTE4YzMxMTVlZmExYjIyOC4uM2YyNDJhMjIxNTI3MGRhZTZmZWRk
ODcxZWE2MDM2NTJiNWQyMjlkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJkYXRhYmFzZS9jaHJvbWl1bS9RdW90YVRyYWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZGF0YWJhc2UvY2hyb21pdW0vUXVvdGFUcmFja2VyLmNwcApAQCAtNTMsOCAr
NTMsOCBAQCB2b2lkIFF1b3RhVHJhY2tlcjo6Z2V0RGF0YWJhc2VTaXplQW5kU3BhY2VBdmFpbGFi
bGVUb09yaWdpbigKICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGEobV9kYXRhR3VhcmQpOwog
ICAgICAgICBBU1NFUlQobV9kYXRhYmFzZVNpemVzLmNvbnRhaW5zKG9yaWdpbklkZW50aWZpZXIp
KTsKICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFNpemVNYXA+Ojpjb25zdF9pdGVyYXRvciBpdCA9
IG1fZGF0YWJhc2VTaXplcy5maW5kKG9yaWdpbklkZW50aWZpZXIpOwotICAgICAgICBBU1NFUlQo
aXQtPnNlY29uZC5jb250YWlucyhkYXRhYmFzZU5hbWUpKTsKLSAgICAgICAgKmRhdGFiYXNlU2l6
ZSA9IGl0LT5zZWNvbmQuZ2V0KGRhdGFiYXNlTmFtZSk7CisgICAgICAgIEFTU0VSVChpdC0+dmFs
dWUuY29udGFpbnMoZGF0YWJhc2VOYW1lKSk7CisgICAgICAgICpkYXRhYmFzZVNpemUgPSBpdC0+
dmFsdWUuZ2V0KGRhdGFiYXNlTmFtZSk7CiAKICAgICAgICAgaWYgKG1fc3BhY2VBdmFpbGFibGVU
b09yaWdpbnMuY29udGFpbnMob3JpZ2luSWRlbnRpZmllcikpIHsKICAgICAgICAgICAgICpzcGFj
ZUF2YWlsYWJsZSA9IG1fc3BhY2VBdmFpbGFibGVUb09yaWdpbnMuZ2V0KG9yaWdpbklkZW50aWZp
ZXIpOwpAQCAtNzIsNyArNzIsNyBAQCB2b2lkIFF1b3RhVHJhY2tlcjo6dXBkYXRlRGF0YWJhc2VT
aXplKAogewogICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhKG1fZGF0YUd1YXJkKTsKICAgICBIYXNo
TWFwPFN0cmluZywgU2l6ZU1hcD46Oml0ZXJhdG9yIGl0ID0gbV9kYXRhYmFzZVNpemVzLmFkZChv
cmlnaW5JZGVudGlmaWVyLCBTaXplTWFwKCkpLml0ZXJhdG9yOwotICAgIGl0LT5zZWNvbmQuc2V0
KGRhdGFiYXNlTmFtZSwgZGF0YWJhc2VTaXplKTsKKyAgICBpdC0+dmFsdWUuc2V0KGRhdGFiYXNl
TmFtZSwgZGF0YWJhc2VTaXplKTsKIH0KIAogdm9pZCBRdW90YVRyYWNrZXI6OnVwZGF0ZVNwYWNl
QXZhaWxhYmxlVG9PcmlnaW4oY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyLCB1bnNpZ25l
ZCBsb25nIGxvbmcgc3BhY2VBdmFpbGFibGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0RGVmbGF0ZUZyYW1lci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0RGVmbGF0ZUZyYW1lci5jcHAKaW5kZXgg
NjdmOTUzM2FiZWVlZGUwYmM4MDMyNjUxNDgyOTcxNDZjNDcyNTY4Yi4uN2QyNGUyN2E5MmZjYmQ2
ZGJkODg3YzBkYThlMmIwNmY4YWZkYWZkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldERlZmxhdGVGcmFtZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXREZWZsYXRlRnJhbWVyLmNwcApAQCAt
ODcsNyArODcsNyBAQCBib29sIFdlYlNvY2tldEV4dGVuc2lvbkRlZmxhdGVGcmFtZTo6cHJvY2Vz
c1Jlc3BvbnNlKGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbgogICAgIGludCB3aW5kb3dCaXRz
ID0gMTU7CiAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIHBhcmFt
ZXRlciA9IHNlcnZlclBhcmFtZXRlcnMuZmluZCgibWF4X3dpbmRvd19iaXRzIik7CiAgICAgaWYg
KHBhcmFtZXRlciAhPSBzZXJ2ZXJQYXJhbWV0ZXJzLmVuZCgpKSB7Ci0gICAgICAgIHdpbmRvd0Jp
dHMgPSBwYXJhbWV0ZXItPnNlY29uZC50b0ludCgpOworICAgICAgICB3aW5kb3dCaXRzID0gcGFy
YW1ldGVyLT52YWx1ZS50b0ludCgpOwogICAgICAgICBpZiAod2luZG93Qml0cyA8IDggfHwgd2lu
ZG93Qml0cyA+IDE1KSB7CiAgICAgICAgICAgICBtX2ZhaWx1cmVSZWFzb24gPSAiUmVjZWl2ZWQg
aW52YWxpZCBtYXhfd2luZG93X2JpdHMgcGFyYW1ldGVyIjsKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKQEAgLTk4LDcgKzk4LDcgQEAgYm9vbCBXZWJTb2NrZXRFeHRlbnNpb25EZWZsYXRlRnJh
bWU6OnByb2Nlc3NSZXNwb25zZShjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW4KICAgICBXZWJT
b2NrZXREZWZsYXRlcjo6Q29udGV4dFRha2VPdmVyTW9kZSBtb2RlID0gV2ViU29ja2V0RGVmbGF0
ZXI6OlRha2VPdmVyQ29udGV4dDsKICAgICBwYXJhbWV0ZXIgPSBzZXJ2ZXJQYXJhbWV0ZXJzLmZp
bmQoIm5vX2NvbnRleHRfdGFrZW92ZXIiKTsKICAgICBpZiAocGFyYW1ldGVyICE9IHNlcnZlclBh
cmFtZXRlcnMuZW5kKCkpIHsKLSAgICAgICAgaWYgKCFwYXJhbWV0ZXItPnNlY29uZC5pc051bGwo
KSkgeworICAgICAgICBpZiAoIXBhcmFtZXRlci0+dmFsdWUuaXNOdWxsKCkpIHsKICAgICAgICAg
ICAgIG1fZmFpbHVyZVJlYXNvbiA9ICJSZWNlaXZlZCBpbnZhbGlkIG5vX2NvbnRleHRfdGFrZW92
ZXIgcGFyYW1ldGVyIjsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEV4dGVu
c2lvbkRpc3BhdGNoZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dl
YlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXIuY3BwCmluZGV4IDdjNTkyYWQxYmYyODA2OGM4MzAz
MzY5YjYwNjU2NzNiNmJhN2U5NzQuLjU2MDlmNjU4MWFhYjk3NDJiMGZkODVmZjE1ZDE1ZmE1MGVk
MjlmNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJT
b2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYnNvY2tldHMvV2ViU29ja2V0RXh0ZW5zaW9uRGlzcGF0Y2hlci5jcHAKQEAgLTE4MSwxMCAr
MTgxLDEwIEBAIHZvaWQgV2ViU29ja2V0RXh0ZW5zaW9uRGlzcGF0Y2hlcjo6YXBwZW5kQWNjZXB0
ZWRFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBleHRlbnNpCiAgICAgLy8gRklYTUU6IFNob3VsZCB1
c2UgTGlzdEhhc2hTZXQgdG8ga2VlcCB0aGUgb3JkZXIgb2YgdGhlIHBhcmFtZXRlcnMuCiAgICAg
Zm9yIChIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXRlcmF0b3IgPSBl
eHRlbnNpb25QYXJhbWV0ZXJzLmJlZ2luKCk7IGl0ZXJhdG9yICE9IGV4dGVuc2lvblBhcmFtZXRl
cnMuZW5kKCk7ICsraXRlcmF0b3IpIHsKICAgICAgICAgbV9hY2NlcHRlZEV4dGVuc2lvbnNCdWls
ZGVyLmFwcGVuZCgiOyAiKTsKLSAgICAgICAgbV9hY2NlcHRlZEV4dGVuc2lvbnNCdWlsZGVyLmFw
cGVuZChpdGVyYXRvci0+Zmlyc3QpOwotICAgICAgICBpZiAoIWl0ZXJhdG9yLT5zZWNvbmQuaXNO
dWxsKCkpIHsKKyAgICAgICAgbV9hY2NlcHRlZEV4dGVuc2lvbnNCdWlsZGVyLmFwcGVuZChpdGVy
YXRvci0+a2V5KTsKKyAgICAgICAgaWYgKCFpdGVyYXRvci0+dmFsdWUuaXNOdWxsKCkpIHsKICAg
ICAgICAgICAgIG1fYWNjZXB0ZWRFeHRlbnNpb25zQnVpbGRlci5hcHBlbmQoIj0iKTsKLSAgICAg
ICAgICAgIG1fYWNjZXB0ZWRFeHRlbnNpb25zQnVpbGRlci5hcHBlbmQoaXRlcmF0b3ItPnNlY29u
ZCk7CisgICAgICAgICAgICBtX2FjY2VwdGVkRXh0ZW5zaW9uc0J1aWxkZXIuYXBwZW5kKGl0ZXJh
dG9yLT52YWx1ZSk7CiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAppbmRleCAwMmQ1YmZiMjM5ZWU2YmRhNGU4ODBi
MDNlOTIzZmMzOWVlNjVhM2E2Li41ZTk1MzUzYjY2MTAyNDExNjRmZDUwZWQ5MGE1MzI2OWEwNTA3
YWI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2Fj
aGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5j
cHAKQEAgLTkxLDcgKzkxLDcgQEAgQVhPYmplY3RDYWNoZTo6fkFYT2JqZWN0Q2FjaGUoKQogewog
ICAgIEhhc2hNYXA8QVhJRCwgUmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+ID46Oml0ZXJhdG9y
IGVuZCA9IG1fb2JqZWN0cy5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8QVhJRCwgUmVmUHRyPEFj
Y2Vzc2liaWxpdHlPYmplY3Q+ID46Oml0ZXJhdG9yIGl0ID0gbV9vYmplY3RzLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgewotICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmogPSAoKml0
KS5zZWNvbmQuZ2V0KCk7CisgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iaiA9ICgqaXQp
LnZhbHVlLmdldCgpOwogICAgICAgICBkZXRhY2hXcmFwcGVyKG9iaik7CiAgICAgICAgIG9iai0+
ZGV0YWNoKCk7CiAgICAgICAgIHJlbW92ZUFYSUQob2JqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvRE9NT2JqZWN0Q2FjaGUuY3BwIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvZ29iamVjdC9ET01PYmplY3RDYWNoZS5jcHAKaW5kZXggMmU3ZjEwNmU3OWUz
MWM3MzE1NGFiOWNmYWExOWE1ODllOWRlN2RkNS4uZGQ3ZDA0OTcxOGM4MTIyZjI0YjM4ZGI4ODNl
NWI2YjY0ZTJlYzA2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVj
dC9ET01PYmplY3RDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVj
dC9ET01PYmplY3RDYWNoZS5jcHAKQEAgLTc0LDcgKzc0LDcgQEAgdm9pZCBET01PYmplY3RDYWNo
ZTo6Y2xlYXJCeUZyYW1lKFdlYkNvcmU6OkZyYW1lKiBmcmFtZSkKICAgICAvLyBpdGVyYXRpbmcg
dGhlIGNhY2hlIGl0c2VsZi4KICAgICBET01PYmplY3RNYXA6Oml0ZXJhdG9yIGVuZCA9IGRvbU9i
amVjdHMoKS5lbmQoKTsKICAgICBmb3IgKERPTU9iamVjdE1hcDo6aXRlcmF0b3IgaXRlciA9IGRv
bU9iamVjdHMoKS5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0gICAgICAgIERPTU9i
amVjdENhY2hlRGF0YSogZGF0YSA9IGl0ZXItPnNlY29uZDsKKyAgICAgICAgRE9NT2JqZWN0Q2Fj
aGVEYXRhKiBkYXRhID0gaXRlci0+dmFsdWU7CiAgICAgICAgIEFTU0VSVChkYXRhKTsKICAgICAg
ICAgaWYgKCghZnJhbWUgfHwgZGF0YS0+ZnJhbWUgPT0gZnJhbWUpICYmIGRhdGEtPnRpbWVzUmV0
dXJuZWQpCiAgICAgICAgICAgICB0b1VucmVmLmFwcGVuZChkYXRhKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTU9iamVjdEhhc2hUYWJsZU1hcC5oIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvRE9NT2JqZWN0SGFzaFRhYmxlTWFwLmgKaW5kZXggMjE2Yjk0
NWM0OWI5MTFlM2Y0NWVmZTVhN2U0YzEzMjk2ZjMwZWIxYi4uZWRkODcwMjI5Y2JkZjYzZDkxOWJh
ODU5Y2VlYTVkOWM0MTkzYzYxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvRE9NT2JqZWN0SGFzaFRhYmxlTWFwLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvRE9NT2JqZWN0SGFzaFRhYmxlTWFwLmgKQEAgLTM5LDE1ICszOSwxNSBAQCBwdWJsaWM6CiAg
ICAgfkRPTU9iamVjdEhhc2hUYWJsZU1hcCgpCiAgICAgewogICAgICAgICBmb3IgKEhhc2hNYXA8
Y29uc3QgSlNDOjpIYXNoVGFibGUqLCBKU0M6Okhhc2hUYWJsZT46Oml0ZXJhdG9yIGl0ZXIgPSBt
X21hcC5iZWdpbigpOyBpdGVyICE9IG1fbWFwLmVuZCgpOyArK2l0ZXIpCi0gICAgICAgICAgICBp
dGVyLT5zZWNvbmQuZGVsZXRlVGFibGUoKTsKKyAgICAgICAgICAgIGl0ZXItPnZhbHVlLmRlbGV0
ZVRhYmxlKCk7CiAgICAgfQogCiAgICAgY29uc3QgSlNDOjpIYXNoVGFibGUqIGdldChjb25zdCBK
U0M6Okhhc2hUYWJsZSogc3RhdGljVGFibGUpCiAgICAgewogICAgICAgICBIYXNoTWFwPGNvbnN0
IEpTQzo6SGFzaFRhYmxlKiwgSlNDOjpIYXNoVGFibGU+OjppdGVyYXRvciBpdGVyID0gbV9tYXAu
ZmluZChzdGF0aWNUYWJsZSk7CiAgICAgICAgIGlmIChpdGVyICE9IG1fbWFwLmVuZCgpKQotICAg
ICAgICAgICAgcmV0dXJuICZpdGVyLT5zZWNvbmQ7Ci0gICAgICAgIHJldHVybiAmbV9tYXAuc2V0
KHN0YXRpY1RhYmxlLCBKU0M6Okhhc2hUYWJsZSgqc3RhdGljVGFibGUpKS5pdGVyYXRvci0+c2Vj
b25kOworICAgICAgICAgICAgcmV0dXJuICZpdGVyLT52YWx1ZTsKKyAgICAgICAgcmV0dXJuICZt
X21hcC5zZXQoc3RhdGljVGFibGUsIEpTQzo6SGFzaFRhYmxlKCpzdGF0aWNUYWJsZSkpLml0ZXJh
dG9yLT52YWx1ZTsKICAgICB9CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9ET01XcmFwcGVyV29ybGQuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvRE9NV3JhcHBlcldvcmxkLmNwcAppbmRleCA4MTI1NDliYzM2MTk1YTc3NWVkNmE5NGMz
OTAwOWQzMjk1ZmUxMTE5Li4zMTY0MWQ1OTYyYzI1MWQ2ODRhOWM2YzgwMTRhMmM4NDZmNzZkZjE5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01XcmFwcGVyV29ybGQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTVdyYXBwZXJXb3JsZC5jcHAK
QEAgLTM0LDcgKzM0LDcgQEAgdm9pZCBKU1N0cmluZ093bmVyOjpmaW5hbGl6ZShKU0M6OkhhbmRs
ZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCogY29udGV4dCkKIHsKICAgICBKU1N0cmluZyog
anNTdHJpbmcgPSBzdGF0aWNfY2FzdDxKU1N0cmluZyo+KGhhbmRsZS5nZXQoKS5hc0NlbGwoKSk7
CiAgICAgU3RyaW5nSW1wbCogc3RyaW5nSW1wbCA9IHN0YXRpY19jYXN0PFN0cmluZ0ltcGwqPihj
b250ZXh0KTsKLSAgICBBU1NFUlRfVU5VU0VEKGpzU3RyaW5nLCBtX3dvcmxkLT5tX3N0cmluZ0Nh
Y2hlLmZpbmQoc3RyaW5nSW1wbCktPnNlY29uZC5nZXQoKSA9PSBqc1N0cmluZyk7CisgICAgQVNT
RVJUX1VOVVNFRChqc1N0cmluZywgbV93b3JsZC0+bV9zdHJpbmdDYWNoZS5maW5kKHN0cmluZ0lt
cGwpLT52YWx1ZS5nZXQoKSA9PSBqc1N0cmluZyk7CiAgICAgbV93b3JsZC0+bV9zdHJpbmdDYWNo
ZS5yZW1vdmUoc3RyaW5nSW1wbCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTUJpbmRpbmcuY3BwCmluZGV4IGMxMWY2MDEwMzhhNjYwMDY5YmFhNWQ5OTI2Y2MyNWQyYmVk
MDQ4NmMuLjk0NzBjNDQ0MWExMjRlMmI3YjI1ODA5MTllY2UzN2MzOGY5N2VhOWYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcApAQCAtMjU4LDcgKzI1OCw3
IEBAIFN0cnVjdHVyZSogY2FjaGVET01TdHJ1Y3R1cmUoSlNET01HbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1CiB7CiAgICAgSlNET01TdHJ1Y3R1cmVNYXAmIHN0
cnVjdHVyZXMgPSBnbG9iYWxPYmplY3QtPnN0cnVjdHVyZXMoKTsKICAgICBBU1NFUlQoIXN0cnVj
dHVyZXMuY29udGFpbnMoY2xhc3NJbmZvKSk7Ci0gICAgcmV0dXJuIHN0cnVjdHVyZXMuc2V0KGNs
YXNzSW5mbywgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4oZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRh
KCksIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKSkuaXRlcmF0b3ItPnNlY29uZC5nZXQoKTsKKyAg
ICByZXR1cm4gc3RydWN0dXJlcy5zZXQoY2xhc3NJbmZvLCBXcml0ZUJhcnJpZXI8U3RydWN0dXJl
PihnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpKS5p
dGVyYXRvci0+dmFsdWUuZ2V0KCk7CiB9CiAKIEpTQzo6SlNPYmplY3QqIHRvSlNTZXF1ZW5jZShF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkJiBsZW5ndGgpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCmluZGV4IDdlZWJjNzdkNDAxMWI4NDI4
ZTFhMzdkZGI4YmM0OTQ2YjNmN2VmYTUuLmFkNGI4ZmUzYzI1MTIzYWFkYjEzMDM4OTZlZjljMDRh
OWQ5ODgxYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmlu
ZGluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCkBA
IC0xNTAsNyArMTUwLDcgQEAgZW51bSBQYXJhbWV0ZXJEZWZhdWx0UG9saWN5IHsKICAgICB7CiAg
ICAgICAgIGlmIChjbGVhcklubGluZUNhY2hlZFdyYXBwZXIod29ybGQsIGRvbU9iamVjdCwgd3Jh
cHBlcikpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEFTU0VSVCh3b3JsZC0+bV93cmFw
cGVycy5maW5kKGRvbU9iamVjdCktPnNlY29uZC5nZXQoKSA9PSB3cmFwcGVyKTsKKyAgICAgICAg
QVNTRVJUKHdvcmxkLT5tX3dyYXBwZXJzLmZpbmQoZG9tT2JqZWN0KS0+dmFsdWUuZ2V0KCkgPT0g
d3JhcHBlcik7CiAgICAgICAgIHdvcmxkLT5tX3dyYXBwZXJzLnJlbW92ZShkb21PYmplY3QpOwog
ICAgIH0KICAgICAKQEAgLTM0OSw3ICszNDksNyBAQCBlbnVtIFBhcmFtZXRlckRlZmF1bHRQb2xp
Y3kgewogICAgICAgICBKU1N0cmluZ0NhY2hlJiBzdHJpbmdDYWNoZSA9IGN1cnJlbnRXb3JsZChl
eGVjKS0+bV9zdHJpbmdDYWNoZTsKICAgICAgICAgSlNTdHJpbmdDYWNoZTo6aXRlcmF0b3IgaXQg
PSBzdHJpbmdDYWNoZS5maW5kKHN0cmluZ0ltcGwpOwogICAgICAgICBpZiAoaXQgIT0gc3RyaW5n
Q2FjaGUuZW5kKCkpCi0gICAgICAgICAgICByZXR1cm4gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAg
ICAgICAgIHJldHVybiBpdC0+dmFsdWUuZ2V0KCk7CiAKICAgICAgICAgcmV0dXJuIGpzU3RyaW5n
U2xvd0Nhc2UoZXhlYywgc3RyaW5nQ2FjaGUsIHN0cmluZ0ltcGwpOwogICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAppbmRleCAzMWZm
YjU0ZDQ1ZmJkYTRhMTY3ZWFiNTQxODMxOTFmYTY4MWI4ODVjLi5lNDA1OGI4YWU3ZGVhMGIyOTI4
ZjU5NTRjZWE3MDhlZGZhMTA5ZWVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01HbG9iYWxPYmplY3QuY3BwCkBAIC04OCwxMSArODgsMTEgQEAgdm9pZCBKU0RPTUds
b2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQogCiAgICAgSlNET01TdHJ1Y3R1cmVNYXA6Oml0ZXJhdG9yIGVuZCA9IHRoaXNPYmplY3Qt
PnN0cnVjdHVyZXMoKS5lbmQoKTsKICAgICBmb3IgKEpTRE9NU3RydWN0dXJlTWFwOjppdGVyYXRv
ciBpdCA9IHRoaXNPYmplY3QtPnN0cnVjdHVyZXMoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5kKCZpdC0+c2Vjb25kKTsKKyAgICAgICAgdmlzaXRvci5h
cHBlbmQoJml0LT52YWx1ZSk7CiAKICAgICBKU0RPTUNvbnN0cnVjdG9yTWFwOjppdGVyYXRvciBl
bmQyID0gdGhpc09iamVjdC0+Y29uc3RydWN0b3JzKCkuZW5kKCk7CiAgICAgZm9yIChKU0RPTUNv
bnN0cnVjdG9yTWFwOjppdGVyYXRvciBpdDIgPSB0aGlzT2JqZWN0LT5jb25zdHJ1Y3RvcnMoKS5i
ZWdpbigpOyBpdDIgIT0gZW5kMjsgKytpdDIpCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kKCZpdDIt
PnNlY29uZCk7CisgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZpdDItPnZhbHVlKTsKIAogICAgIGlm
ICh0aGlzT2JqZWN0LT5tX2luamVjdGVkU2NyaXB0KQogICAgICAgICB2aXNpdG9yLmFwcGVuZCgm
dGhpc09iamVjdC0+bV9pbmplY3RlZFNjcmlwdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01HbG9iYWxPYmplY3QuaAppbmRleCA3NGYzNWIwYjc5MmMxYzA2MDM3ZDFhZGVm
M2IyMzEzNjU4YTkyZGFkLi40OWE5YjFhNjJlZjY3NmQxMTFkNTcxOGRlZGI3MGVkOWY0ODNiMDUy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVj
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmgK
QEAgLTk1LDcgKzk1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBKU0M6OkpTT2Jq
ZWN0KiBjb25zdHJ1Y3RvciA9IENvbnN0cnVjdG9yQ2xhc3M6OmNyZWF0ZShleGVjLCBDb25zdHJ1
Y3RvckNsYXNzOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBjb25zdF9jYXN0
PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQ
cm90b3R5cGUoKSksIGNvbnN0X2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3Qp
KTsKICAgICAgICAgQVNTRVJUKCFjb25zdF9jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFs
T2JqZWN0KS0+Y29uc3RydWN0b3JzKCkuY29udGFpbnMoJkNvbnN0cnVjdG9yQ2xhc3M6OnNfaW5m
bykpOwogICAgICAgICBKU0M6OldyaXRlQmFycmllcjxKU0M6OkpTT2JqZWN0PiB0ZW1wOwotICAg
ICAgICBjb25zdF9jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KS0+Y29uc3Ry
dWN0b3JzKCkuYWRkKCZDb25zdHJ1Y3RvckNsYXNzOjpzX2luZm8sIHRlbXApLml0ZXJhdG9yLT5z
ZWNvbmQuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LCBjb25zdHJ1Y3Rvcik7
CisgICAgICAgIGNvbnN0X2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpLT5j
b25zdHJ1Y3RvcnMoKS5hZGQoJkNvbnN0cnVjdG9yQ2xhc3M6OnNfaW5mbywgdGVtcCkuaXRlcmF0
b3ItPnZhbHVlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdCwgY29uc3RydWN0
b3IpOwogICAgICAgICByZXR1cm4gY29uc3RydWN0b3I7CiAgICAgfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUGFnZVNjcmlwdERlYnVnU2VydmVyLmNwcAppbmRleCBi
ZGVlNDY4N2Q2YzA0MjExNjNlZTg5YzNiMDEwYzZhNGI4ZTdkZWVhLi45NmViNzljNzRkN2M5ZTQw
ZDY1MDNhNGY4NWY4OWQ5OTMwZDFmYjIwIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHAKQEAgLTg0LDkgKzg0LDkgQEAgdm9p
ZCBQYWdlU2NyaXB0RGVidWdTZXJ2ZXI6OmFkZExpc3RlbmVyKFNjcmlwdERlYnVnTGlzdGVuZXIq
IGxpc3RlbmVyLCBQYWdlKiBwYWcKIAogICAgIFBhZ2VMaXN0ZW5lcnNNYXA6OkFkZFJlc3VsdCBy
ZXN1bHQgPSBtX3BhZ2VMaXN0ZW5lcnNNYXAuYWRkKHBhZ2UsIDApOwogICAgIGlmIChyZXN1bHQu
aXNOZXdFbnRyeSkKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBuZXcgTGlzdGVu
ZXJTZXQ7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBuZXcgTGlzdGVuZXJTZXQ7
CiAKLSAgICBMaXN0ZW5lclNldCogbGlzdGVuZXJzID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7
CisgICAgTGlzdGVuZXJTZXQqIGxpc3RlbmVycyA9IHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAg
ICAgbGlzdGVuZXJzLT5hZGQobGlzdGVuZXIpOwogCiAgICAgcmVjb21waWxlQWxsSlNGdW5jdGlv
bnNTb29uKCk7CkBAIC0xMDIsNyArMTAyLDcgQEAgdm9pZCBQYWdlU2NyaXB0RGVidWdTZXJ2ZXI6
OnJlbW92ZUxpc3RlbmVyKFNjcmlwdERlYnVnTGlzdGVuZXIqIGxpc3RlbmVyLCBQYWdlKgogICAg
IGlmIChpdCA9PSBtX3BhZ2VMaXN0ZW5lcnNNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIExpc3RlbmVyU2V0KiBsaXN0ZW5lcnMgPSBpdC0+c2Vjb25kOworICAgIExpc3RlbmVyU2V0
KiBsaXN0ZW5lcnMgPSBpdC0+dmFsdWU7CiAgICAgbGlzdGVuZXJzLT5yZW1vdmUobGlzdGVuZXIp
OwogICAgIGlmIChsaXN0ZW5lcnMtPmlzRW1wdHkoKSkgewogICAgICAgICBtX3BhZ2VMaXN0ZW5l
cnNNYXAucmVtb3ZlKGl0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NjcmlwdENhY2hlZEZyYW1lRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
Y3JpcHRDYWNoZWRGcmFtZURhdGEuY3BwCmluZGV4IDIxMDBjNmIwMjYxYjJkZmQyNWY3M2E0ZDdh
YjM5MzlhNWUyMjg2M2QuLmQyNDI2YTIwYmEyYzcyYWE0YzIzZmI1YjIxYjM5MGE4YWYyNmIyZDYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENhY2hlZEZyYW1l
RGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q2FjaGVkRnJh
bWVEYXRhLmNwcApAQCAtNTMsOCArNTMsOCBAQCBTY3JpcHRDYWNoZWRGcmFtZURhdGE6OlNjcmlw
dENhY2hlZEZyYW1lRGF0YShGcmFtZSogZnJhbWUpCiAKICAgICBTY3JpcHRDb250cm9sbGVyOjpT
aGVsbE1hcDo6aXRlcmF0b3Igd2luZG93U2hlbGxzRW5kID0gd2luZG93U2hlbGxzLmVuZCgpOwog
ICAgIGZvciAoU2NyaXB0Q29udHJvbGxlcjo6U2hlbGxNYXA6Oml0ZXJhdG9yIGl0ZXIgPSB3aW5k
b3dTaGVsbHMuYmVnaW4oKTsgaXRlciAhPSB3aW5kb3dTaGVsbHNFbmQ7ICsraXRlcikgewotICAg
ICAgICBKU0RPTVdpbmRvdyogd2luZG93ID0gaXRlci0+c2Vjb25kLT53aW5kb3coKTsKLSAgICAg
ICAgbV93aW5kb3dzLmFkZChpdGVyLT5maXJzdC5nZXQoKSwgU3Ryb25nPEpTRE9NV2luZG93Pih3
aW5kb3ctPmdsb2JhbERhdGEoKSwgd2luZG93KSk7CisgICAgICAgIEpTRE9NV2luZG93KiB3aW5k
b3cgPSBpdGVyLT52YWx1ZS0+d2luZG93KCk7CisgICAgICAgIG1fd2luZG93cy5hZGQoaXRlci0+
a2V5LmdldCgpLCBTdHJvbmc8SlNET01XaW5kb3c+KHdpbmRvdy0+Z2xvYmFsRGF0YSgpLCB3aW5k
b3cpKTsKICAgICB9CiAKICAgICBzY3JpcHRDb250cm9sbGVyLT5hdHRhY2hEZWJ1Z2dlcigwKTsK
QEAgLTc0LDggKzc0LDggQEAgdm9pZCBTY3JpcHRDYWNoZWRGcmFtZURhdGE6OnJlc3RvcmUoRnJh
bWUqIGZyYW1lKQogCiAgICAgU2NyaXB0Q29udHJvbGxlcjo6U2hlbGxNYXA6Oml0ZXJhdG9yIHdp
bmRvd1NoZWxsc0VuZCA9IHdpbmRvd1NoZWxscy5lbmQoKTsKICAgICBmb3IgKFNjcmlwdENvbnRy
b2xsZXI6OlNoZWxsTWFwOjppdGVyYXRvciBpdGVyID0gd2luZG93U2hlbGxzLmJlZ2luKCk7IGl0
ZXIgIT0gd2luZG93U2hlbGxzRW5kOyArK2l0ZXIpIHsKLSAgICAgICAgRE9NV3JhcHBlcldvcmxk
KiB3b3JsZCA9IGl0ZXItPmZpcnN0LmdldCgpOwotICAgICAgICBKU0RPTVdpbmRvd1NoZWxsKiB3
aW5kb3dTaGVsbCA9IGl0ZXItPnNlY29uZC5nZXQoKTsKKyAgICAgICAgRE9NV3JhcHBlcldvcmxk
KiB3b3JsZCA9IGl0ZXItPmtleS5nZXQoKTsKKyAgICAgICAgSlNET01XaW5kb3dTaGVsbCogd2lu
ZG93U2hlbGwgPSBpdGVyLT52YWx1ZS5nZXQoKTsKIAogICAgICAgICBpZiAoSlNET01XaW5kb3cq
IHdpbmRvdyA9IG1fd2luZG93cy5nZXQod29ybGQpLmdldCgpKQogICAgICAgICAgICAgd2luZG93
U2hlbGwtPnNldFdpbmRvdyh3aW5kb3ctPmdsb2JhbERhdGEoKSwgd2luZG93KTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAKaW5kZXggNDE0M2Y0
NGI1MTRmNjllZGNkYzNiMzBlMzViYzBkNjY5ZDkyNTZkMy4uZTI3ODJlNDY5NGJlOTViNTRkNTA2
MDJmZTdjZGE4ZTYzNTg1ZmQ2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2NyaXB0Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2NyaXB0Q29udHJvbGxlci5jcHAKQEAgLTkzLDcgKzkzLDcgQEAgU2NyaXB0Q29udHJvbGxlcjo6
flNjcmlwdENvbnRyb2xsZXIoKQogICAgIC8vIEl0J3MgbGlrZWx5IHRoYXQgZGVzdHJveWluZyBt
X3dpbmRvd1NoZWxscyB3aWxsIGNyZWF0ZSBhIGxvdCBvZiBnYXJiYWdlLgogICAgIGlmICghbV93
aW5kb3dTaGVsbHMuaXNFbXB0eSgpKSB7CiAgICAgICAgIHdoaWxlICghbV93aW5kb3dTaGVsbHMu
aXNFbXB0eSgpKQotICAgICAgICAgICAgZGVzdHJveVdpbmRvd1NoZWxsKG1fd2luZG93U2hlbGxz
LmJlZ2luKCktPmZpcnN0LmdldCgpKTsKKyAgICAgICAgICAgIGRlc3Ryb3lXaW5kb3dTaGVsbCht
X3dpbmRvd1NoZWxscy5iZWdpbigpLT5rZXkuZ2V0KCkpOwogICAgICAgICBnY0NvbnRyb2xsZXIo
KS5nYXJiYWdlQ29sbGVjdFNvb24oKTsKICAgICB9CiB9CkBAIC0xODAsNyArMTgwLDcgQEAgdm9p
ZCBTY3JpcHRDb250cm9sbGVyOjpjbGVhcldpbmRvd1NoZWxsKGJvb2wgZ29pbmdJbnRvUGFnZUNh
Y2hlKQogICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAKICAgICBmb3Ig
KFNoZWxsTWFwOjppdGVyYXRvciBpdGVyID0gbV93aW5kb3dTaGVsbHMuYmVnaW4oKTsgaXRlciAh
PSBtX3dpbmRvd1NoZWxscy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIEpTRE9NV2luZG93U2hl
bGwqIHdpbmRvd1NoZWxsID0gaXRlci0+c2Vjb25kLmdldCgpOworICAgICAgICBKU0RPTVdpbmRv
d1NoZWxsKiB3aW5kb3dTaGVsbCA9IGl0ZXItPnZhbHVlLmdldCgpOwogCiAgICAgICAgIC8vIENs
ZWFyIHRoZSBkZWJ1Z2dlciBmcm9tIHRoZSBjdXJyZW50IHdpbmRvdyBiZWZvcmUgc2V0dGluZyB0
aGUgbmV3IHdpbmRvdy4KICAgICAgICAgYXR0YWNoRGVidWdnZXIod2luZG93U2hlbGwsIDApOwpA
QCAtMjU2LDcgKzI1Niw3IEBAIGJvb2wgU2NyaXB0Q29udHJvbGxlcjo6Y2FuQWNjZXNzRnJvbUN1
cnJlbnRPcmlnaW4oRnJhbWUgKmZyYW1lKQogdm9pZCBTY3JpcHRDb250cm9sbGVyOjphdHRhY2hE
ZWJ1Z2dlcihKU0M6OkRlYnVnZ2VyKiBkZWJ1Z2dlcikKIHsKICAgICBmb3IgKFNoZWxsTWFwOjpp
dGVyYXRvciBpdGVyID0gbV93aW5kb3dTaGVsbHMuYmVnaW4oKTsgaXRlciAhPSBtX3dpbmRvd1No
ZWxscy5lbmQoKTsgKytpdGVyKQotICAgICAgICBhdHRhY2hEZWJ1Z2dlcihpdGVyLT5zZWNvbmQu
Z2V0KCksIGRlYnVnZ2VyKTsKKyAgICAgICAgYXR0YWNoRGVidWdnZXIoaXRlci0+dmFsdWUuZ2V0
KCksIGRlYnVnZ2VyKTsKIH0KIAogdm9pZCBTY3JpcHRDb250cm9sbGVyOjphdHRhY2hEZWJ1Z2dl
cihKU0RPTVdpbmRvd1NoZWxsKiBzaGVsbCwgSlNDOjpEZWJ1Z2dlciogZGVidWdnZXIpCkBAIC0y
NzgsNyArMjc4LDcgQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjp1cGRhdGVEb2N1bWVudCgpCiAK
ICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIGZvciAoU2hlbGxN
YXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3dpbmRvd1NoZWxscy5iZWdpbigpOyBpdGVyICE9IG1fd2lu
ZG93U2hlbGxzLmVuZCgpOyArK2l0ZXIpCi0gICAgICAgIGl0ZXItPnNlY29uZC0+d2luZG93KCkt
PnVwZGF0ZURvY3VtZW50KCk7CisgICAgICAgIGl0ZXItPnZhbHVlLT53aW5kb3coKS0+dXBkYXRl
RG9jdW1lbnQoKTsKIH0KIAogdm9pZCBTY3JpcHRDb250cm9sbGVyOjp1cGRhdGVTZWN1cml0eU9y
aWdpbigpCkBAIC0zMTQsNyArMzE0LDcgQEAgUGFzc1JlZlB0cjxCaW5kaW5nczo6Um9vdE9iamVj
dD4gU2NyaXB0Q29udHJvbGxlcjo6Y3JlYXRlUm9vdE9iamVjdCh2b2lkKiBuYXRpdmUKIHsKICAg
ICBSb290T2JqZWN0TWFwOjppdGVyYXRvciBpdCA9IG1fcm9vdE9iamVjdHMuZmluZChuYXRpdmVI
YW5kbGUpOwogICAgIGlmIChpdCAhPSBtX3Jvb3RPYmplY3RzLmVuZCgpKQotICAgICAgICByZXR1
cm4gaXQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKIAogICAgIFJlZlB0cjxC
aW5kaW5nczo6Um9vdE9iamVjdD4gcm9vdE9iamVjdCA9IEJpbmRpbmdzOjpSb290T2JqZWN0Ojpj
cmVhdGUobmF0aXZlSGFuZGxlLCBnbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSkpOwogCkBAIC0z
OTksNyArMzk5LDcgQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpjbGVhbnVwU2NyaXB0T2JqZWN0
c0ZvclBsdWdpbih2b2lkKiBuYXRpdmVIYW5kbGUpCiAgICAgaWYgKGl0ID09IG1fcm9vdE9iamVj
dHMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGl0LT5zZWNvbmQtPmludmFsaWRhdGUo
KTsKKyAgICBpdC0+dmFsdWUtPmludmFsaWRhdGUoKTsKICAgICBtX3Jvb3RPYmplY3RzLnJlbW92
ZShpdCk7CiB9CiAKQEAgLTQwOSw3ICs0MDksNyBAQCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmNs
ZWFyU2NyaXB0T2JqZWN0cygpCiAKICAgICBSb290T2JqZWN0TWFwOjpjb25zdF9pdGVyYXRvciBl
bmQgPSBtX3Jvb3RPYmplY3RzLmVuZCgpOwogICAgIGZvciAoUm9vdE9iamVjdE1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX3Jvb3RPYmplY3RzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAg
ICAgICAgaXQtPnNlY29uZC0+aW52YWxpZGF0ZSgpOworICAgICAgICBpdC0+dmFsdWUtPmludmFs
aWRhdGUoKTsKIAogICAgIG1fcm9vdE9iamVjdHMuY2xlYXIoKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5oIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5oCmluZGV4IDVlMTUxYWFlMzNmODE2MGUw
NmQ0Nzg1YTJkZTlkMDlkYWFhYTgyMWMuLmY2NGY4OTA5YTYwZDczYTFlMmNiZjUwOTBkZDlhODUw
NmMyMGViNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENv
bnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9s
bGVyLmgKQEAgLTcyLDEyICs3MiwxMiBAQCBwdWJsaWM6CiAgICAgSlNET01XaW5kb3dTaGVsbCog
d2luZG93U2hlbGwoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCkKICAgICB7CiAgICAgICAgIFNoZWxs
TWFwOjppdGVyYXRvciBpdGVyID0gbV93aW5kb3dTaGVsbHMuZmluZCh3b3JsZCk7Ci0gICAgICAg
IHJldHVybiAoaXRlciAhPSBtX3dpbmRvd1NoZWxscy5lbmQoKSkgPyBpdGVyLT5zZWNvbmQuZ2V0
KCkgOiBpbml0U2NyaXB0KHdvcmxkKTsKKyAgICAgICAgcmV0dXJuIChpdGVyICE9IG1fd2luZG93
U2hlbGxzLmVuZCgpKSA/IGl0ZXItPnZhbHVlLmdldCgpIDogaW5pdFNjcmlwdCh3b3JsZCk7CiAg
ICAgfQogICAgIEpTRE9NV2luZG93U2hlbGwqIGV4aXN0aW5nV2luZG93U2hlbGwoRE9NV3JhcHBl
cldvcmxkKiB3b3JsZCkgY29uc3QKICAgICB7CiAgICAgICAgIFNoZWxsTWFwOjpjb25zdF9pdGVy
YXRvciBpdGVyID0gbV93aW5kb3dTaGVsbHMuZmluZCh3b3JsZCk7Ci0gICAgICAgIHJldHVybiAo
aXRlciAhPSBtX3dpbmRvd1NoZWxscy5lbmQoKSkgPyBpdGVyLT5zZWNvbmQuZ2V0KCkgOiAwOwor
ICAgICAgICByZXR1cm4gKGl0ZXIgIT0gbV93aW5kb3dTaGVsbHMuZW5kKCkpID8gaXRlci0+dmFs
dWUuZ2V0KCkgOiAwOwogICAgIH0KICAgICBKU0RPTVdpbmRvdyogZ2xvYmFsT2JqZWN0KERPTVdy
YXBwZXJXb3JsZCogd29ybGQpCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCmluZGV4IDEwZGVkNzAwNzA3OTQwMjNkYzdlZDIxMjk5
ZmNmYjI0ODYxMjE3ZDAuLjg5NGNkZTJmYzdiMjNjODE4MDg2Yjc0OWQ2N2VkNmViZGZkODFjMjAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5j
cHAKQEAgLTc2LDkgKzc2LDkgQEAgU3RyaW5nIFNjcmlwdERlYnVnU2VydmVyOjpzZXRCcmVha3Bv
aW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIGNvbnN0IFNjcmlwdEJyZWEKICAgICBTb3VyY2VJ
ZFRvQnJlYWtwb2ludHNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zb3VyY2VJZFRvQnJlYWtwb2ludHMu
ZmluZChzb3VyY2VJRFZhbHVlKTsKICAgICBpZiAoaXQgPT0gbV9zb3VyY2VJZFRvQnJlYWtwb2lu
dHMuZW5kKCkpCiAgICAgICAgIGl0ID0gbV9zb3VyY2VJZFRvQnJlYWtwb2ludHMuc2V0KHNvdXJj
ZUlEVmFsdWUsIExpbmVUb0JyZWFrcG9pbnRNYXAoKSkuaXRlcmF0b3I7Ci0gICAgaWYgKGl0LT5z
ZWNvbmQuY29udGFpbnMoc2NyaXB0QnJlYWtwb2ludC5saW5lTnVtYmVyICsgMSkpCisgICAgaWYg
KGl0LT52YWx1ZS5jb250YWlucyhzY3JpcHRCcmVha3BvaW50LmxpbmVOdW1iZXIgKyAxKSkKICAg
ICAgICAgcmV0dXJuICIiOwotICAgIGl0LT5zZWNvbmQuc2V0KHNjcmlwdEJyZWFrcG9pbnQubGlu
ZU51bWJlciArIDEsIHNjcmlwdEJyZWFrcG9pbnQpOworICAgIGl0LT52YWx1ZS5zZXQoc2NyaXB0
QnJlYWtwb2ludC5saW5lTnVtYmVyICsgMSwgc2NyaXB0QnJlYWtwb2ludCk7CiAgICAgKmFjdHVh
bExpbmVOdW1iZXIgPSBzY3JpcHRCcmVha3BvaW50LmxpbmVOdW1iZXI7CiAgICAgLy8gRklYTUUo
V0s1MzAwMyk6IGltcGxlbWVudCBzZXR0aW5nIGJyZWFrcG9pbnRzIGJ5IGxpbmU6Y29sdW1uLgog
ICAgICphY3R1YWxDb2x1bW5OdW1iZXIgPSAwOwpAQCAtMTAwLDcgKzEwMCw3IEBAIHZvaWQgU2Ny
aXB0RGVidWdTZXJ2ZXI6OnJlbW92ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBicmVha3BvaW50
SWQpCiAgICAgICAgIHJldHVybjsKICAgICBTb3VyY2VJZFRvQnJlYWtwb2ludHNNYXA6Oml0ZXJh
dG9yIGl0ID0gbV9zb3VyY2VJZFRvQnJlYWtwb2ludHMuZmluZChzb3VyY2VJRFZhbHVlKTsKICAg
ICBpZiAoaXQgIT0gbV9zb3VyY2VJZFRvQnJlYWtwb2ludHMuZW5kKCkpCi0gICAgICAgIGl0LT5z
ZWNvbmQucmVtb3ZlKGxpbmVOdW1iZXIgKyAxKTsKKyAgICAgICAgaXQtPnZhbHVlLnJlbW92ZShs
aW5lTnVtYmVyICsgMSk7CiB9CiAKIGJvb2wgU2NyaXB0RGVidWdTZXJ2ZXI6Omhhc0JyZWFrcG9p
bnQoaW50cHRyX3Qgc291cmNlSUQsIGNvbnN0IFRleHRQb3NpdGlvbiYgcG9zaXRpb24pIGNvbnN0
CkBAIC0xMTQsMTYgKzExNCwxNiBAQCBib29sIFNjcmlwdERlYnVnU2VydmVyOjpoYXNCcmVha3Bv
aW50KGludHB0cl90IHNvdXJjZUlELCBjb25zdCBUZXh0UG9zaXRpb24mIHBvcwogICAgIGludCBs
aW5lTnVtYmVyID0gcG9zaXRpb24ubV9saW5lLm9uZUJhc2VkSW50KCk7CiAgICAgaWYgKGxpbmVO
dW1iZXIgPD0gMCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIExpbmVUb0JyZWFrcG9pbnRN
YXA6OmNvbnN0X2l0ZXJhdG9yIGJyZWFrSXQgPSBpdC0+c2Vjb25kLmZpbmQobGluZU51bWJlcik7
Ci0gICAgaWYgKGJyZWFrSXQgPT0gaXQtPnNlY29uZC5lbmQoKSkKKyAgICBMaW5lVG9CcmVha3Bv
aW50TWFwOjpjb25zdF9pdGVyYXRvciBicmVha0l0ID0gaXQtPnZhbHVlLmZpbmQobGluZU51bWJl
cik7CisgICAgaWYgKGJyZWFrSXQgPT0gaXQtPnZhbHVlLmVuZCgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICAvLyBBbiBlbXB0eSBjb25kaXRpb24gY291bnRzIGFzIG5vIGNvbmRpdGlv
biB3aGljaCBpcyBlcXVpdmFsZW50IHRvICJ0cnVlIi4KLSAgICBpZiAoYnJlYWtJdC0+c2Vjb25k
LmNvbmRpdGlvbi5pc0VtcHR5KCkpCisgICAgaWYgKGJyZWFrSXQtPnZhbHVlLmNvbmRpdGlvbi5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgSlNWYWx1ZSBleGNlcHRpb247
Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBtX2N1cnJlbnRDYWxsRnJhbWUtPmV2YWx1YXRlKHN0cmlu
Z1RvVVN0cmluZyhicmVha0l0LT5zZWNvbmQuY29uZGl0aW9uKSwgZXhjZXB0aW9uKTsKKyAgICBK
U1ZhbHVlIHJlc3VsdCA9IG1fY3VycmVudENhbGxGcmFtZS0+ZXZhbHVhdGUoc3RyaW5nVG9VU3Ry
aW5nKGJyZWFrSXQtPnZhbHVlLmNvbmRpdGlvbiksIGV4Y2VwdGlvbik7CiAgICAgaWYgKGV4Y2Vw
dGlvbikgewogICAgICAgICAvLyBBbiBlcnJvbmVvdXMgY29uZGl0aW9uIGNvdW50cyBhcyAiZmFs
c2UiLgogICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAppbmRleCA3YWMxNTVjY2U2Y2MyYTRk
ZDlhYjdiYWM3N2QxNTA5NDhlYWZjMDAwLi43MjVlNjk4NDRmYmFmMWRmMTY4YjMzZGJlYmVjYjkw
NzRiMDI1M2UwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxp
emVkU2NyaXB0VmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nlcmlh
bGl6ZWRTY3JpcHRWYWx1ZS5jcHAKQEAgLTM5Nyw4ICszOTcsOCBAQCBwcml2YXRlOgogICAgICAg
ICAvLyBIYW5kbGUgZHVwbGljYXRlIHJlZmVyZW5jZXMKICAgICAgICAgaWYgKCFhZGRSZXN1bHQu
aXNOZXdFbnRyeSkgewogICAgICAgICAgICAgd3JpdGUoT2JqZWN0UmVmZXJlbmNlVGFnKTsKLSAg
ICAgICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQzMl90PihhZGRSZXN1bHQuaXRlcmF0b3It
PnNlY29uZCkgPCBtX29iamVjdFBvb2wuc2l6ZSgpKTsKLSAgICAgICAgICAgIHdyaXRlT2JqZWN0
SW5kZXgoYWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOworICAgICAgICAgICAgQVNTRVJUKHN0
YXRpY19jYXN0PGludDMyX3Q+KGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUpIDwgbV9vYmplY3RQ
b29sLnNpemUoKSk7CisgICAgICAgICAgICB3cml0ZU9iamVjdEluZGV4KGFkZFJlc3VsdC5pdGVy
YXRvci0+dmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAg
ICAgIApAQCAtNjE4LDcgKzYxOCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgT2JqZWN0
UG9vbDo6aXRlcmF0b3IgaW5kZXggPSBtX3RyYW5zZmVycmVkTWVzc2FnZVBvcnRzLmZpbmQob2Jq
KTsKICAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT0gbV90cmFuc2ZlcnJlZE1lc3NhZ2VQb3J0
cy5lbmQoKSkgewogICAgICAgICAgICAgICAgICAgICB3cml0ZShNZXNzYWdlUG9ydFJlZmVyZW5j
ZVRhZyk7Ci0gICAgICAgICAgICAgICAgICAgIHdyaXRlKGluZGV4LT5zZWNvbmQpOworICAgICAg
ICAgICAgICAgICAgICB3cml0ZShpbmRleC0+dmFsdWUpOwogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtNjMyLDcgKzYzMiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgT2JqZWN0
UG9vbDo6aXRlcmF0b3IgaW5kZXggPSBtX3RyYW5zZmVycmVkQXJyYXlCdWZmZXJzLmZpbmQob2Jq
KTsKICAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT0gbV90cmFuc2ZlcnJlZEFycmF5QnVmZmVy
cy5lbmQoKSkgewogICAgICAgICAgICAgICAgICAgICB3cml0ZShBcnJheUJ1ZmZlclRyYW5zZmVy
VGFnKTsKLSAgICAgICAgICAgICAgICAgICAgd3JpdGUoaW5kZXgtPnNlY29uZCk7CisgICAgICAg
ICAgICAgICAgICAgIHdyaXRlKGluZGV4LT52YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoIXN0YXJ0
T2JqZWN0SW50ZXJuYWwob2JqKSkgLy8gaGFuZGxlIGR1cGxpY2F0ZXMKQEAgLTcyOSw3ICs3Mjks
NyBAQCBwcml2YXRlOgogICAgICAgICBTdHJpbmdDb25zdGFudFBvb2w6OkFkZFJlc3VsdCBhZGRS
ZXN1bHQgPSBtX2NvbnN0YW50UG9vbC5hZGQoc3RyLmltcGwoKSwgbV9jb25zdGFudFBvb2wuc2l6
ZSgpKTsKICAgICAgICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSkgewogICAgICAgICAgICAg
d3JpdGUoU3RyaW5nUG9vbFRhZyk7Ci0gICAgICAgICAgICB3cml0ZVN0cmluZ0luZGV4KGFkZFJl
c3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKKyAgICAgICAgICAgIHdyaXRlU3RyaW5nSW5kZXgoYWRk
UmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9yVjgucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JW
OC5wbQppbmRleCBjOTRmOGQ0YzFiYjBiOTliZDYyYzAzNTgzYWVkZTIwODUzNTVhODQyLi5lODA1
NTQyMmJlMWExNzI1MDliYTc0YzVkOTU3NDNmOGI1MjJkOWJiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQpAQCAtMjc5MSw3ICsy
NzkxLDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+ICR7Y2xhc3NOYW1l
fTo6R2V0UmF3VGVtcGxhdGUoKQogICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhKiBkYXRhID0g
VjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOEJpbmRpbmdQZXJJc29s
YXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnJhd1RlbXBsYXRl
TWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT5yYXdUZW1wbGF0ZU1h
cCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVy
biByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAg
IHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9IGNyZWF0ZVJhd1Rl
bXBsYXRlKCk7CkBAIC0yODA0LDcgKzI4MDQsNyBAQCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rp
b25UZW1wbGF0ZT4gJHtjbGFzc05hbWV9OjpHZXRUZW1wbGF0ZSgpCiAgICAgVjhCaW5kaW5nUGVy
SXNvbGF0ZURhdGEqIGRhdGEgPSBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwog
ICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0
ID0gZGF0YS0+dGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRh
dGEtPnRlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFu
ZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBs
ID0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9W
OEZsb2F0NjRBcnJheS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VjgvVjhGbG9hdDY0QXJyYXkuY3BwCmluZGV4IDdhMzY5N2JiZjYwZjlmZmE2YmFhMTdjYmRkZTU0
MzQ4NjEyZGQyMTIuLmRiZmFjMDE3YjNjN2Q4MjIxZGRmYmVhY2I2MTA4NDcwNGExZTBjY2UgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOEZsb2F0
NjRBcnJheS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4
L1Y4RmxvYXQ2NEFycmF5LmNwcApAQCAtOTIsNyArOTIsNyBAQCB2ODo6UGVyc2lzdGVudDx2ODo6
RnVuY3Rpb25UZW1wbGF0ZT4gVjhGbG9hdDY0QXJyYXk6OkdldFJhd1RlbXBsYXRlKCkKICAgICBW
OEJpbmRpbmdQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpj
dXJyZW50KCk7CiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVy
YXRvciByZXN1bHQgPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwogICAgIGlm
IChyZXN1bHQgIT0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJu
IHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAogICAgIHY4
OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rp
b25UZW1wbGF0ZT4gdGVtcGwgPSBjcmVhdGVSYXdUZW1wbGF0ZSgpOwpAQCAtMTA1LDcgKzEwNSw3
IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOEZsb2F0NjRBcnJheTo6
R2V0VGVtcGxhdGUoKQogICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhKiBkYXRhID0gVjhCaW5k
aW5nUGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0
YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZmlu
ZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmVuZCgpKQot
ICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZh
bHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0
ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RBY3RpdmVET01P
YmplY3QuY3BwCmluZGV4IDZmNWU4ZTdkYjRiYzA4ZWYxY2M3ZWYwOWEyNjdmM2VhNjNhNDYwOGYu
LjEyODYwYjUzNzIxNjQwM2FjM2M3ZDdmNjUxNzQ0NmQ0YjU1MTRiYzggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RBY3RpdmVET01PYmpl
Y3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3RBY3RpdmVET01PYmplY3QuY3BwCkBAIC0xMzAsNyArMTMwLDcgQEAgdjg6OlBlcnNpc3RlbnQ8
djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdEFjdGl2ZURPTU9iamVjdDo6R2V0UmF3VGVtcGxh
dGUoKQogICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhKiBkYXRhID0gVjhCaW5kaW5nUGVySXNv
bGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6VGVtcGxh
dGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZmluZCgmaW5m
byk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAg
ICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVl
OwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50
PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9IGNyZWF0ZVJhd1RlbXBsYXRlKCk7CkBAIC0x
NDMsNyArMTQzLDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVz
dEFjdGl2ZURPTU9iamVjdDo6R2V0VGVtcGxhdGUoKQogICAgIFY4QmluZGluZ1Blcklzb2xhdGVE
YXRhKiBkYXRhID0gVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOEJp
bmRpbmdQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEt
PnRlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT50ZW1w
bGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAg
IHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3Bl
OwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Q3Vz
dG9tTmFtZWRHZXR0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Y4L1Y4VGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcAppbmRleCA0Y2ZkNTM0NjUxMzAyZGViMzU5
NTVlM2E5NDk0ZWQ4NTI1ZTE2NmM3Li5hNGM2MDgyNTViNTkxNjE5NTA5MDZiOTFlZDA1ZGY3Mzdl
MzhlMGY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VjgvVjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RDdXN0b21OYW1lZEdldHRlci5jcHAKQEAgLTgyLDcg
KzgyLDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdEN1c3Rv
bU5hbWVkR2V0dGVyOjpHZXRSYXdUZW1wbGF0ZSgpCiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURh
dGEqIGRhdGEgPSBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4Qmlu
ZGluZ1Blcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+
cmF3VGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnJh
d1RlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxl
U2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0g
Y3JlYXRlUmF3VGVtcGxhdGUoKTsKQEAgLTk1LDcgKzk1LDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6
OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdEN1c3RvbU5hbWVkR2V0dGVyOjpHZXRUZW1wbGF0ZSgp
CiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOEJpbmRpbmdQZXJJc29sYXRl
RGF0YTo6Y3VycmVudCgpOwogICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1h
cDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+dGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAg
ICBpZiAocmVzdWx0ICE9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVy
biByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2
ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0
aW9uVGVtcGxhdGU+IHRlbXBsID0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudENvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudENvbnN0cnVjdG9yLmNwcApp
bmRleCA5MTlkMWZmY2Y2MDVhMzc5OTMxY2ViNTZiNDBlOGRlZjlmNzEwZGJjLi5lNWNmMjVmOGFl
ZTk4YWFkZTA5MmU0ZWNlZDIzNmU4ODI1ZjJkN2ExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50Q29u
c3RydWN0b3IuY3BwCkBAIC0xMTcsNyArMTE3LDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0
aW9uVGVtcGxhdGU+IFY4VGVzdEV2ZW50Q29uc3RydWN0b3I6OkdldFJhd1RlbXBsYXRlKCkKICAg
ICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4QmluZGluZ1Blcklzb2xhdGVEYXRh
OjpjdXJyZW50KCk7CiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjpp
dGVyYXRvciByZXN1bHQgPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwogICAg
IGlmIChyZXN1bHQgIT0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0
dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAogICAg
IHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVu
Y3Rpb25UZW1wbGF0ZT4gdGVtcGwgPSBjcmVhdGVSYXdUZW1wbGF0ZSgpOwpAQCAtMTMwLDcgKzEz
MCw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3RFdmVudENv
bnN0cnVjdG9yOjpHZXRUZW1wbGF0ZSgpCiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGEqIGRh
dGEgPSBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4QmluZGluZ1Bl
cklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+dGVtcGxh
dGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnRlbXBsYXRlTWFw
KCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAg
djg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudFRhcmdl
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZl
bnRUYXJnZXQuY3BwCmluZGV4IDBlODAzYzIxOGNmNTI0OWU3ODcyYzA3ZTdkNWNkOWE1YThiZWZj
NmUuLmYyMDhlMGE5MDcyZjZjN2NlM2JjNDM1OTcwMDRkMDMwN2E3MzcxOTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudFRhcmdl
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVz
dEV2ZW50VGFyZ2V0LmNwcApAQCAtMTQ1LDcgKzE0NSw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpG
dW5jdGlvblRlbXBsYXRlPiBWOFRlc3RFdmVudFRhcmdldDo6R2V0UmF3VGVtcGxhdGUoKQogICAg
IFY4QmluZGluZ1Blcklzb2xhdGVEYXRhKiBkYXRhID0gVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6
OmN1cnJlbnQoKTsKICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0
ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAg
aWYgKHJlc3VsdCAhPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1
cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAg
djg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5j
dGlvblRlbXBsYXRlPiB0ZW1wbCA9IGNyZWF0ZVJhd1RlbXBsYXRlKCk7CkBAIC0xNTgsNyArMTU4
LDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdEV2ZW50VGFy
Z2V0OjpHZXRUZW1wbGF0ZSgpCiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGEqIGRhdGEgPSBW
OEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4QmluZGluZ1Blcklzb2xh
dGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+dGVtcGxhdGVNYXAo
KS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZW5k
KCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBl
cnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RJbnRlcmZhY2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEludGVyZmFjZS5j
cHAKaW5kZXggZDJiYjgxZmZiZGE0NzRkZGNkN2IxZDQ1Y2RlNjcyY2I4MTNmOTRkZS4uYWVkYmRl
OWU2MjMzNmVhMDg4NzZmOGMwODkwNDM0ZDdiNGY5NDkwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEludGVyZmFjZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEludGVyZmFjZS5j
cHAKQEAgLTI3Myw3ICsyNzMsNyBAQCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0
ZT4gVjhUZXN0SW50ZXJmYWNlOjpHZXRSYXdUZW1wbGF0ZSgpCiAgICAgVjhCaW5kaW5nUGVySXNv
bGF0ZURhdGEqIGRhdGEgPSBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAg
IFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0g
ZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRh
dGEtPnJhd1RlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29u
ZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUg
aGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRl
bXBsID0gY3JlYXRlUmF3VGVtcGxhdGUoKTsKQEAgLTI4Niw3ICsyODYsNyBAQCB2ODo6UGVyc2lz
dGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0SW50ZXJmYWNlOjpHZXRUZW1wbGF0ZSgp
CiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOEJpbmRpbmdQZXJJc29sYXRl
RGF0YTo6Y3VycmVudCgpOwogICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1h
cDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+dGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAg
ICBpZiAocmVzdWx0ICE9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVy
biByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2
ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0
aW9uVGVtcGxhdGU+IHRlbXBsID0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RNZWRpYVF1ZXJ5TGlzdExp
c3RlbmVyLmNwcAppbmRleCA5MWM5ZmFhNTEzY2YwMzJhNWY5ZTBiNjE0NDkyYmIzZTdkNmMxNmM1
Li4xMjRmNzhiZGY5NDE0NWQzZWEwMjM1MmU2MTBmYjJjYjA5YjEzYjZkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Y4L1Y4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCkBAIC04Miw3ICs4Miw3IEBAIHY4
OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3RNZWRpYVF1ZXJ5TGlzdExp
c3RlbmVyOjpHZXRSYXdUZW1wbGF0CiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGEqIGRhdGEg
PSBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4QmluZGluZ1Blcklz
b2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+cmF3VGVtcGxh
dGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnJhd1RlbXBsYXRl
TWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAg
ICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0gY3JlYXRlUmF3
VGVtcGxhdGUoKTsKQEAgLTk1LDcgKzk1LDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9u
VGVtcGxhdGU+IFY4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI6OkdldFRlbXBsYXRlKCkKICAg
ICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4QmluZGluZ1Blcklzb2xhdGVEYXRh
OjpjdXJyZW50KCk7CiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjpp
dGVyYXRvciByZXN1bHQgPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwogICAgIGlm
IChyZXN1bHQgIT0gZGF0YS0+dGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHJl
c3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAogICAgIHY4OjpI
YW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25U
ZW1wbGF0ZT4gdGVtcGwgPQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Y4L1Y4VGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwCmluZGV4
IDhlZTQwZTQwODQwYWVmOTQyNzFjNTNkMDZhYjBiMWUzMmY1NjZhNmUuLjc1OGFmZDUwODhhNDYx
Njk3NWQwYWQxNzA0YjdiNzdlODFiMzQzZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROYW1lZENvbnN0cnVjdG9yLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TmFtZWRDb25zdHJ1
Y3Rvci5jcHAKQEAgLTEyMiw3ICsxMjIsNyBAQCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25U
ZW1wbGF0ZT4gVjhUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6R2V0UmF3VGVtcGxhdGUoKQogICAgIFY4
QmluZGluZ1Blcklzb2xhdGVEYXRhKiBkYXRhID0gVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OmN1
cnJlbnQoKTsKICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJh
dG9yIHJlc3VsdCA9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYg
KHJlc3VsdCAhPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4g
cmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6
OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlv
blRlbXBsYXRlPiB0ZW1wbCA9IGNyZWF0ZVJhd1RlbXBsYXRlKCk7CkBAIC0xMzUsNyArMTM1LDcg
QEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdE5hbWVkQ29uc3Ry
dWN0b3I6OkdldFRlbXBsYXRlKCkKICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YSogZGF0YSA9
IFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhCaW5kaW5nUGVySXNv
bGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT50ZW1wbGF0ZU1h
cCgpLmZpbmQoJmluZm8pOwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+dGVtcGxhdGVNYXAoKS5l
bmQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVz
dWx0LT52YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6
UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcAppbmRleCA4
YWFmYThmNmUyMDhhNTU5MzM1YmYyM2I3Y2FkMzcyZTA2MzFhYmQ5Li5mNTgwODQ0ZWRiOTNhNzU3
N2ExMjc0MjhlYWY2Y2RjZTI2ODE0YTliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcApAQCAtMjEzMSw3ICsyMTMxLDcg
QEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdE9iajo6R2V0UmF3
VGVtcGxhdGUoKQogICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhKiBkYXRhID0gVjhCaW5kaW5n
UGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6
VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZmlu
ZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmVuZCgp
KQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQt
PnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJz
aXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9IGNyZWF0ZVJhd1RlbXBsYXRlKCk7
CkBAIC0yMTQ0LDcgKzIxNDQsNyBAQCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0
ZT4gVjhUZXN0T2JqOjpHZXRUZW1wbGF0ZSgpCiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGEq
IGRhdGEgPSBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4QmluZGlu
Z1Blcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+dGVt
cGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnRlbXBsYXRl
TWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAg
ICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Y4L1Y4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKaW5k
ZXggMzQxMTdmYWVjOTExOWU4NGIzYWQ4NmM1NzcwYzU3Yjg3YTNkZjM3OC4uM2QyZmQ2MTc4MTky
YzZlZmIyZGQwYzQ1ZWE2MGY5OTc4MGEzNzI0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKQEAgLTI0OCw3ICsyNDgsNyBA
QCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlOjpHZXRSYQogICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhKiBk
YXRhID0gVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOEJpbmRpbmdQ
ZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnJhd1Rl
bXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT5yYXdUZW1w
bGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAg
IHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3Bl
OwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9IGNyZWF0
ZVJhd1RlbXBsYXRlKCk7CkBAIC0yNjEsNyArMjYxLDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1
bmN0aW9uVGVtcGxhdGU+IFY4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6R2V0
VGUKICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4QmluZGluZ1Blcklzb2xh
dGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OlRlbXBsYXRl
TWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwog
ICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+dGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0
dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAogICAg
IHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVu
Y3Rpb25UZW1wbGF0ZT4gdGVtcGwgPQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvTlBWOE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9OUFY4T2Jq
ZWN0LmNwcAppbmRleCA1YzMzNTkzNzcwNWVmMjNjODZkNjY3MGJiMWNiOTM4N2FmMzY4MTI0Li41
NjgwNzMwYjQyZDA4YjVjMzdiYTcxODk0NDA2YjJlMGI5YTkyYWU1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9OUFY4T2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9OUFY4T2JqZWN0LmNwcApAQCAtNzgsNyArNzgsNyBAQCBzdGF0aWMgdm9p
ZCBmcmVlVjhOUE9iamVjdChOUE9iamVjdCogbnBPYmplY3QpCiAgICAgaWYgKGludCB2OE9iamVj
dEhhc2ggPSB2OE5wT2JqZWN0LT52OE9iamVjdC0+R2V0SWRlbnRpdHlIYXNoKCkpIHsKICAgICAg
ICAgVjhOUE9iamVjdE1hcDo6aXRlcmF0b3IgaXRlciA9IHN0YXRpY1Y4TlBPYmplY3RNYXAoKS0+
ZmluZCh2OE9iamVjdEhhc2gpOwogICAgICAgICBpZiAoaXRlciAhPSBzdGF0aWNWOE5QT2JqZWN0
TWFwKCktPmVuZCgpKSB7Ci0gICAgICAgICAgICBWOE5QT2JqZWN0VmVjdG9yJiBvYmplY3RzID0g
aXRlci0+c2Vjb25kOworICAgICAgICAgICAgVjhOUE9iamVjdFZlY3RvciYgb2JqZWN0cyA9IGl0
ZXItPnZhbHVlOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG9i
amVjdHMuc2l6ZSgpOyArK2luZGV4KSB7CiAgICAgICAgICAgICAgICAgaWYgKG9iamVjdHMuYXQo
aW5kZXgpID09IHY4TnBPYmplY3QpIHsKICAgICAgICAgICAgICAgICAgICAgb2JqZWN0cy5yZW1v
dmUoaW5kZXgpOwpAQCAtMTUzLDcgKzE1Myw3IEBAIE5QT2JqZWN0KiBucENyZWF0ZVY4U2NyaXB0
T2JqZWN0KE5QUCBucHAsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0LCBET01XaW5kCiAg
ICAgQVNTRVJUKHY4T2JqZWN0SGFzaCk7CiAgICAgVjhOUE9iamVjdE1hcDo6aXRlcmF0b3IgaXRl
ciA9IHN0YXRpY1Y4TlBPYmplY3RNYXAoKS0+ZmluZCh2OE9iamVjdEhhc2gpOwogICAgIGlmIChp
dGVyICE9IHN0YXRpY1Y4TlBPYmplY3RNYXAoKS0+ZW5kKCkpIHsKLSAgICAgICAgVjhOUE9iamVj
dFZlY3RvciYgb2JqZWN0cyA9IGl0ZXItPnNlY29uZDsKKyAgICAgICAgVjhOUE9iamVjdFZlY3Rv
ciYgb2JqZWN0cyA9IGl0ZXItPnZhbHVlOwogICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7
IGluZGV4IDwgb2JqZWN0cy5zaXplKCk7ICsraW5kZXgpIHsKICAgICAgICAgICAgIFY4TlBPYmpl
Y3QqIHY4bnBPYmplY3QgPSBvYmplY3RzLmF0KGluZGV4KTsKICAgICAgICAgICAgIGlmICh2OG5w
T2JqZWN0LT5yb290T2JqZWN0ID09IHJvb3QpIHsKQEAgLTE3Myw3ICsxNzMsNyBAQCBOUE9iamVj
dCogbnBDcmVhdGVWOFNjcmlwdE9iamVjdChOUFAgbnBwLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IG9iamVjdCwgRE9NV2luZAogI2VuZGlmCiAgICAgdjhucE9iamVjdC0+cm9vdE9iamVjdCA9IHJv
b3Q7CiAKLSAgICBpdGVyLT5zZWNvbmQuYXBwZW5kKHY4bnBPYmplY3QpOworICAgIGl0ZXItPnZh
bHVlLmFwcGVuZCh2OG5wT2JqZWN0KTsKIAogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PE5Q
T2JqZWN0Kj4odjhucE9iamVjdCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1NjcmlwdENvbnRyb2xsZXIuY3BwCmluZGV4IDhkZTk1NTM3YWQ3ZjJjZmQxYWY2NGY4MmU5ZGFk
ZmE4ZDI3ZGM5ZGMuLjc3N2Y3OTc3N2E1MDUxYzhhYzBmNTI4YTI1MGFjYTRmMWFmMTc2MjMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwCkBA
IC0xMjEsOCArMTIxLDggQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpjbGVhclNjcmlwdE9iamVj
dHMoKQogewogICAgIFBsdWdpbk9iamVjdE1hcDo6aXRlcmF0b3IgaXQgPSBtX3BsdWdpbk9iamVj
dHMuYmVnaW4oKTsKICAgICBmb3IgKDsgaXQgIT0gbV9wbHVnaW5PYmplY3RzLmVuZCgpOyArK2l0
KSB7Ci0gICAgICAgIF9OUE5fVW5yZWdpc3Rlck9iamVjdChpdC0+c2Vjb25kKTsKLSAgICAgICAg
X05QTl9SZWxlYXNlT2JqZWN0KGl0LT5zZWNvbmQpOworICAgICAgICBfTlBOX1VucmVnaXN0ZXJP
YmplY3QoaXQtPnZhbHVlKTsKKyAgICAgICAgX05QTl9SZWxlYXNlT2JqZWN0KGl0LT52YWx1ZSk7
CiAgICAgfQogICAgIG1fcGx1Z2luT2JqZWN0cy5jbGVhcigpOwogCkBAIC0zMjMsOCArMzIzLDgg
QEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpjbGVhbnVwU2NyaXB0T2JqZWN0c0ZvclBsdWdpbihX
aWRnZXQqIG5hdGl2ZUhhbmRsZSkKICAgICBQbHVnaW5PYmplY3RNYXA6Oml0ZXJhdG9yIGl0ID0g
bV9wbHVnaW5PYmplY3RzLmZpbmQobmF0aXZlSGFuZGxlKTsKICAgICBpZiAoaXQgPT0gbV9wbHVn
aW5PYmplY3RzLmVuZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgX05QTl9VbnJlZ2lzdGVyT2Jq
ZWN0KGl0LT5zZWNvbmQpOwotICAgIF9OUE5fUmVsZWFzZU9iamVjdChpdC0+c2Vjb25kKTsKKyAg
ICBfTlBOX1VucmVnaXN0ZXJPYmplY3QoaXQtPnZhbHVlKTsKKyAgICBfTlBOX1JlbGVhc2VPYmpl
Y3QoaXQtPnZhbHVlKTsKICAgICBtX3BsdWdpbk9iamVjdHMucmVtb3ZlKGl0KTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5j
cHAKaW5kZXggZjYwZDM2NmE4N2Y2YTFkMTJiNTk0NDg5OWY3OTY2MjEzNTIwZWExYS4uMDI5MjM4
MTBkZTc0NjdiZThkMzM5NjhhOThlZmIyZTExMDAwNThmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCkBAIC0xMDYsNyAr
MTA2LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgdHlwZW5hbWUgSGFuZGxlVG9UOjppdGVy
YXRvciByZXN1bHQgPSBtX21hcC5maW5kKCpoYW5kbGUpOwogICAgICAgICBpZiAocmVzdWx0ICE9
IG1fbWFwLmVuZCgpKSB7Ci0gICAgICAgICAgICAqdmFsdWVPdXQgPSByZXN1bHQtPnNlY29uZDsK
KyAgICAgICAgICAgICp2YWx1ZU91dCA9IHJlc3VsdC0+dmFsdWU7CiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTU1hcC5oIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhET01NYXAuaAppbmRleCAxMzYzYTc5NzUwNDg2ZWE1OTFjZTAxOTk4NjliM2Q3
NDllMjE5ZWI1Li5jOTBjYjE0MTMxNTVmM2IyYjg3NWY0NTMxYWJhNjlhYmFhMzk3MjJlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTU1hcC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NTWFwLmgKQEAgLTEwOCw3ICsxMDgsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgcmVtb3ZlSWZQcmVzZW50KEtleVR5cGUqIGtl
eSwgdjg6OlBlcnNpc3RlbnQ8VmFsdWVUeXBlPiB2YWx1ZSkKICAgICAgICAgewogICAgICAgICAg
ICAgdHlwZW5hbWUgSGFzaE1hcDxLZXlUeXBlKiwgVmFsdWVUeXBlKj46Oml0ZXJhdG9yIGl0ID0g
bV9tYXAuZmluZChrZXkpOwotICAgICAgICAgICAgaWYgKGl0ID09IG1fbWFwLmVuZCgpIHx8IGl0
LT5zZWNvbmQgIT0gKnZhbHVlKQorICAgICAgICAgICAgaWYgKGl0ID09IG1fbWFwLmVuZCgpIHx8
IGl0LT52YWx1ZSAhPSAqdmFsdWUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgICAgICAgICBtX21hcC5yZW1vdmUoaXQpOwpAQCAtMTI4LDcgKzEyOCw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgICAgIHZpc2l0b3ItPnN0YXJ0TWFwKCk7CiAgICAgICAgICAg
ICB0eXBlbmFtZSBIYXNoTWFwPEtleVR5cGUqLCBWYWx1ZVR5cGUqPjo6aXRlcmF0b3IgaXQgPSBt
X21hcC5iZWdpbigpOwogICAgICAgICAgICAgZm9yICg7IGl0ICE9IG1fbWFwLmVuZCgpOyArK2l0
KQotICAgICAgICAgICAgICAgIHZpc2l0b3ItPnZpc2l0RE9NV3JhcHBlcihzdG9yZSwgaXQtPmZp
cnN0LCB2ODo6UGVyc2lzdGVudDxWYWx1ZVR5cGU+KGl0LT5zZWNvbmQpKTsKKyAgICAgICAgICAg
ICAgICB2aXNpdG9yLT52aXNpdERPTVdyYXBwZXIoc3RvcmUsIGl0LT5rZXksIHY4OjpQZXJzaXN0
ZW50PFZhbHVlVHlwZT4oaXQtPnZhbHVlKSk7CiAgICAgICAgICAgICB2aXNpdG9yLT5lbmRNYXAo
KTsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9W
OERPTVdpbmRvd1NoZWxsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV2lu
ZG93U2hlbGwuY3BwCmluZGV4IGM0YzYwNTQwYWI5YjY4YTY5M2NkYjZmYzFlNzdmZjA5NGM0MzQx
YTUuLjE3YjVkNmM5ZmE1NDBkYjBjMjUxNTQzMzM4ZWE3M2ZjNWZhY2I1NWUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwuY3BwCkBAIC0xODYsNyAr
MTg2LDcgQEAgdm9pZCBWOERPTVdpbmRvd1NoZWxsOjpkaXNwb3NlQ29udGV4dEhhbmRsZXMoKQog
CiAgICAgV3JhcHBlckJvaWxlcnBsYXRlTWFwOjppdGVyYXRvciBpdCA9IG1fd3JhcHBlckJvaWxl
cnBsYXRlcy5iZWdpbigpOwogICAgIGZvciAoOyBpdCAhPSBtX3dyYXBwZXJCb2lsZXJwbGF0ZXMu
ZW5kKCk7ICsraXQpIHsKLSAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBl
ciA9IGl0LT5zZWNvbmQ7CisgICAgICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBw
ZXIgPSBpdC0+dmFsdWU7CiAgICAgICAgIHdyYXBwZXIuRGlzcG9zZSgpOwogICAgICAgICB3cmFw
cGVyLkNsZWFyKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhHQ0NvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhHQ0Nv
bnRyb2xsZXIuY3BwCmluZGV4IDFiODEyMzRlZDA0ZWIyMTZjZDcyNmE0YzM3M2JhOGQzNTI5NmUz
MmMuLjViNjEyMGQwODAzZWJlZjAxMmI1NjA2NmI3OWM5NTRhOGMyYmZlZmYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEdDQ29udHJvbGxlci5jcHAKQEAgLTkzLDkgKzkzLDkg
QEAgc3RhdGljIHZvaWQgZW51bWVyYXRlR2xvYmFsSGFuZGxlcygpCiB7CiAgICAgR2xvYmFsSGFu
ZGxlTWFwJiBnbG9iYWxIYW5kbGVNYXAgPSBjdXJyZW50R2xvYmFsSGFuZGxlTWFwKCk7CiAgICAg
Zm9yIChHbG9iYWxIYW5kbGVNYXA6Oml0ZXJhdG9yIGl0ID0gZ2xvYmFsSGFuZGxlTWFwLmJlZ2lu
KCksIGVuZCA9IGdsb2JhbEhhbmRsZU1hcC5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAg
ICAgIEdsb2JhbEhhbmRsZUluZm8qIGluZm8gPSBpdC0+c2Vjb25kOworICAgICAgICBHbG9iYWxI
YW5kbGVJbmZvKiBpbmZvID0gaXQtPnZhbHVlOwogICAgICAgICBVTlVTRURfUEFSQU0oaW5mbyk7
Ci0gICAgICAgIHY4OjpWYWx1ZSogaGFuZGxlID0gaXQtPmZpcnN0OworICAgICAgICB2ODo6VmFs
dWUqIGhhbmRsZSA9IGl0LT5rZXk7CiAgICAgICAgIFVOVVNFRF9QQVJBTShoYW5kbGUpOwogICAg
IH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAKaW5kZXggNDI2NjMzNDhh
MmI2ZmJhYWFkNTY4NTVhNDliODQ4MTliODIzNzAxYS4uMDczZTU0MDhmYmFhNTc5MTE2M2UyMGVj
MjA0ZWUwNmU0Zjk2NzAwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
VjhQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAK
QEAgLTIyOSw3ICsyMjksNyBAQCB2b2lkIFY4UHJveHk6OmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxk
KGludCB3b3JsZElELCBjb25zdCBWZWN0b3I8U2NyaXB0U291cmNlQ29kZQogICAgIGlmICh3b3Js
ZElEID4gMCkgewogICAgICAgICBJc29sYXRlZFdvcmxkTWFwOjppdGVyYXRvciBpdGVyID0gbV9p
c29sYXRlZFdvcmxkcy5maW5kKHdvcmxkSUQpOwogICAgICAgICBpZiAoaXRlciAhPSBtX2lzb2xh
dGVkV29ybGRzLmVuZCgpKSB7Ci0gICAgICAgICAgICBpc29sYXRlZENvbnRleHQgPSBpdGVyLT5z
ZWNvbmQ7CisgICAgICAgICAgICBpc29sYXRlZENvbnRleHQgPSBpdGVyLT52YWx1ZTsKICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlzb2xhdGVkQ29udGV4dCA9IG5ldyBWOElzb2xhdGVk
Q29udGV4dCh0aGlzLCBleHRlbnNpb25Hcm91cCwgd29ybGRJRCk7CiAgICAgICAgICAgICBpZiAo
aXNvbGF0ZWRDb250ZXh0LT5jb250ZXh0KCkuSXNFbXB0eSgpKSB7CkBAIC0yNTAsNyArMjUwLDcg
QEAgdm9pZCBWOFByb3h5OjpldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZChpbnQgd29ybGRJRCwgY29u
c3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGUKICAgICAgICAgCiAgICAgICAgIElzb2xhdGVkV29y
bGRTZWN1cml0eU9yaWdpbk1hcDo6aXRlcmF0b3Igc2VjdXJpdHlPcmlnaW5JdGVyID0gbV9pc29s
YXRlZFdvcmxkU2VjdXJpdHlPcmlnaW5zLmZpbmQod29ybGRJRCk7CiAgICAgICAgIGlmIChzZWN1
cml0eU9yaWdpbkl0ZXIgIT0gbV9pc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW5zLmVuZCgpKQot
ICAgICAgICAgICAgaXNvbGF0ZWRDb250ZXh0LT5zZXRTZWN1cml0eU9yaWdpbihzZWN1cml0eU9y
aWdpbkl0ZXItPnNlY29uZCk7CisgICAgICAgICAgICBpc29sYXRlZENvbnRleHQtPnNldFNlY3Vy
aXR5T3JpZ2luKHNlY3VyaXR5T3JpZ2luSXRlci0+dmFsdWUpOwogICAgIH0gZWxzZSB7CiAgICAg
ICAgIGlzb2xhdGVkQ29udGV4dCA9IG5ldyBWOElzb2xhdGVkQ29udGV4dCh0aGlzLCBleHRlbnNp
b25Hcm91cCwgd29ybGRJRCk7CiAgICAgICAgIGlmIChpc29sYXRlZENvbnRleHQtPmNvbnRleHQo
KS5Jc0VtcHR5KCkpIHsKQEAgLTI3NSw3ICsyNzUsNyBAQCB2b2lkIFY4UHJveHk6OnNldElzb2xh
dGVkV29ybGRTZWN1cml0eU9yaWdpbihpbnQgd29ybGRJRCwgUGFzc1JlZlB0cjxTZWN1cml0eU9y
aQogICAgIG1faXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2lucy5zZXQod29ybGRJRCwgc2VjdXJp
dHlPcmlnaW4pOwogICAgIElzb2xhdGVkV29ybGRNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2lzb2xh
dGVkV29ybGRzLmZpbmQod29ybGRJRCk7CiAgICAgaWYgKGl0ZXIgIT0gbV9pc29sYXRlZFdvcmxk
cy5lbmQoKSkKLSAgICAgICAgaXRlci0+c2Vjb25kLT5zZXRTZWN1cml0eU9yaWdpbihzZWN1cml0
eU9yaWdpbik7CisgICAgICAgIGl0ZXItPnZhbHVlLT5zZXRTZWN1cml0eU9yaWdpbihzZWN1cml0
eU9yaWdpbik7CiB9CiAKIGJvb2wgVjhQcm94eTo6c2V0SW5qZWN0ZWRTY3JpcHRDb250ZXh0RGVi
dWdJZCh2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiB0YXJnZXRDb250ZXh0KQpAQCAtNTQwLDcgKzU0
MCw3IEBAIHZvaWQgVjhQcm94eTo6cmVzZXRJc29sYXRlZFdvcmxkcygpCiB7CiAgICAgZm9yIChJ
c29sYXRlZFdvcmxkTWFwOjppdGVyYXRvciBpdGVyID0gbV9pc29sYXRlZFdvcmxkcy5iZWdpbigp
OwogICAgICAgICAgaXRlciAhPSBtX2lzb2xhdGVkV29ybGRzLmVuZCgpOyArK2l0ZXIpIHsKLSAg
ICAgICAgaXRlci0+c2Vjb25kLT5kZXN0cm95KCk7CisgICAgICAgIGl0ZXItPnZhbHVlLT5kZXN0
cm95KCk7CiAgICAgfQogICAgIG1faXNvbGF0ZWRXb3JsZHMuY2xlYXIoKTsKICAgICBtX2lzb2xh
dGVkV29ybGRTZWN1cml0eU9yaWdpbnMuY2xlYXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L25wcnVudGltZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9ucHJ1bnRpbWUuY3BwCmluZGV4IDhkODBjZjkzMzE4NmU4NTQ3YzE4NTE4M2Q3ZTc0ODRiY2Ux
ZTg0YTMuLjJiMDM2N2NkMTVmMmE0ZmIxMTNkNGNjMGJmNzY3ZWM4Y2YxYjBhNWUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L25wcnVudGltZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvbnBydW50aW1lLmNwcApAQCAtMTY0LDcgKzE2NCw3IEBAIE5Q
SWRlbnRpZmllciBfTlBOX0dldFN0cmluZ0lkZW50aWZpZXIoY29uc3QgTlBVVEY4KiBuYW1lKQog
ICAgICAgICBTdHJpbmdJZGVudGlmaWVyTWFwKiBpZGVudE1hcCA9IGdldFN0cmluZ0lkZW50aWZp
ZXJNYXAoKTsKICAgICAgICAgU3RyaW5nSWRlbnRpZmllck1hcDo6aXRlcmF0b3IgaXRlciA9IGlk
ZW50TWFwLT5maW5kKGtleSk7CiAgICAgICAgIGlmIChpdGVyICE9IGlkZW50TWFwLT5lbmQoKSkK
LSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxOUElkZW50aWZpZXI+KGl0ZXItPnNlY29u
ZCk7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TlBJZGVudGlmaWVyPihpdGVyLT52
YWx1ZSk7CiAKICAgICAgICAgc2l6ZV90IG5hbWVMZW4gPSBrZXkubV9sZW5ndGg7CiAKQEAgLTIx
MSw3ICsyMTEsNyBAQCBOUElkZW50aWZpZXIgX05QTl9HZXRJbnRJZGVudGlmaWVyKGludDMyX3Qg
aW50SWQpCiAgICAgSW50SWRlbnRpZmllck1hcCogaWRlbnRNYXAgPSBnZXRJbnRJZGVudGlmaWVy
TWFwKCk7CiAgICAgSW50SWRlbnRpZmllck1hcDo6aXRlcmF0b3IgaXRlciA9IGlkZW50TWFwLT5m
aW5kKGludElkKTsKICAgICBpZiAoaXRlciAhPSBpZGVudE1hcC0+ZW5kKCkpCi0gICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxOUElkZW50aWZpZXI+KGl0ZXItPnNlY29uZCk7CisgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxOUElkZW50aWZpZXI+KGl0ZXItPnZhbHVlKTsKIAogICAgIC8vIFdl
IG5ldmVyIHJlbGVhc2UgaWRlbnRpZmllcnMsIHNvIHRoaXMgZGljdGlvbmFyeSB3aWxsIGdyb3cu
CiAgICAgUHJpdmF0ZUlkZW50aWZpZXIqIGlkZW50aWZpZXIgPSByZWludGVycHJldF9jYXN0PFBy
aXZhdGVJZGVudGlmaWVyKj4obWFsbG9jKHNpemVvZihQcml2YXRlSWRlbnRpZmllcikpKTsKQEAg
LTM4OCw3ICszODgsNyBAQCB2b2lkIF9OUE5fUmVnaXN0ZXJPYmplY3QoTlBPYmplY3QqIG5wT2Jq
ZWN0LCBOUE9iamVjdCogb3duZXIpCiAgICAgICAgIE5QT2JqZWN0TWFwOjppdGVyYXRvciBvd25l
ckVudHJ5ID0gbGl2ZU9iamVjdE1hcCgpLmZpbmQob3duZXIpOwogICAgICAgICBOUE9iamVjdCog
cGFyZW50ID0gMDsKICAgICAgICAgaWYgKGxpdmVPYmplY3RNYXAoKS5lbmQoKSAhPSBvd25lckVu
dHJ5KQotICAgICAgICAgICAgcGFyZW50ID0gb3duZXJFbnRyeS0+c2Vjb25kOworICAgICAgICAg
ICAgcGFyZW50ID0gb3duZXJFbnRyeS0+dmFsdWU7CiAKICAgICAgICAgaWYgKHBhcmVudCkKICAg
ICAgICAgICAgIG93bmVyID0gcGFyZW50OwpAQCAtNDA4LDcgKzQwOCw3IEBAIHZvaWQgX05QTl9V
bnJlZ2lzdGVyT2JqZWN0KE5QT2JqZWN0KiBucE9iamVjdCkKIAogICAgIE5QT2JqZWN0KiBvd25l
ciA9IDA7CiAgICAgaWYgKGxpdmVPYmplY3RNYXAoKS5maW5kKG5wT2JqZWN0KSAhPSBsaXZlT2Jq
ZWN0TWFwKCkuZW5kKCkpCi0gICAgICAgIG93bmVyID0gbGl2ZU9iamVjdE1hcCgpLmZpbmQobnBP
YmplY3QpLT5zZWNvbmQ7CisgICAgICAgIG93bmVyID0gbGl2ZU9iamVjdE1hcCgpLmZpbmQobnBP
YmplY3QpLT52YWx1ZTsKIAogICAgIGlmICghb3duZXIpIHsKICAgICAgICAgLy8gVW5yZWdpc3Rl
cmluZyBhIG93bmVyIG9iamVjdDsgYWxzbyB1bnJlZ2lzdGVyIGl0J3MgZGVzY2VuZGFudHMuCkBA
IC00NDMsNyArNDQzLDcgQEAgdm9pZCBfTlBOX1VucmVnaXN0ZXJPYmplY3QoTlBPYmplY3QqIG5w
T2JqZWN0KQogICAgIH0gZWxzZSB7CiAgICAgICAgIE5QUm9vdE9iamVjdE1hcDo6aXRlcmF0b3Ig
b3duZXJFbnRyeSA9IHJvb3RPYmplY3RNYXAoKS5maW5kKG93bmVyKTsKICAgICAgICAgaWYgKG93
bmVyRW50cnkgIT0gcm9vdE9iamVjdE1hcCgpLmVuZCgpKSB7Ci0gICAgICAgICAgICBOUE9iamVj
dFNldCogbGlzdCA9IG93bmVyRW50cnktPnNlY29uZDsKKyAgICAgICAgICAgIE5QT2JqZWN0U2V0
KiBsaXN0ID0gb3duZXJFbnRyeS0+dmFsdWU7CiAgICAgICAgICAgICBBU1NFUlQobGlzdC0+Zmlu
ZChucE9iamVjdCkgIT0gbGlzdC0+ZW5kKCkpOwogICAgICAgICAgICAgbGlzdC0+cmVtb3ZlKG5w
T2JqZWN0KTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL0lk
ZW50aWZpZXJSZXAuY3BwIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL0lkZW50aWZpZXJSZXAuY3Bw
CmluZGV4IDJhY2YxNDE1M2QxZGI5ZTEyYjcyNTU4YTUzODhkOTg2ZmY4YTVlODUuLjFkZjU4YTll
NDE1ODFjM2JlYzMxNTFmZjIxYmNlYWEyNDcyZGMxZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JyaWRnZS9JZGVudGlmaWVyUmVwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
SWRlbnRpZmllclJlcC5jcHAKQEAgLTY5LDEzICs2OSwxMyBAQCBJZGVudGlmaWVyUmVwKiBJZGVu
dGlmaWVyUmVwOjpnZXQoaW50IGludElEKQogICAgIAogICAgIEludElkZW50aWZpZXJNYXA6OkFk
ZFJlc3VsdCByZXN1bHQgPSBpbnRJZGVudGlmaWVyTWFwKCkuYWRkKGludElELCAwKTsKICAgICBp
ZiAocmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgQVNTRVJUKCFyZXN1bHQuaXRlcmF0b3It
PnNlY29uZCk7Ci0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gbmV3IElkZW50aWZp
ZXJSZXAoaW50SUQpOworICAgICAgICBBU1NFUlQoIXJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwor
ICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gbmV3IElkZW50aWZpZXJSZXAoaW50SUQp
OwogICAgICAgICAKLSAgICAgICAgaWRlbnRpZmllclNldCgpLmFkZChyZXN1bHQuaXRlcmF0b3It
PnNlY29uZCk7CisgICAgICAgIGlkZW50aWZpZXJTZXQoKS5hZGQocmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZSk7CiAgICAgfQogICAgIAotICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsK
KyAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIAogdHlwZWRlZiBIYXNoTWFw
PFJlZlB0cjxTdHJpbmdJbXBsPiwgSWRlbnRpZmllclJlcCo+IFN0cmluZ0lkZW50aWZpZXJNYXA7
CkBAIC05NSwxMyArOTUsMTMgQEAgSWRlbnRpZmllclJlcCogSWRlbnRpZmllclJlcDo6Z2V0KGNv
bnN0IGNoYXIqIG5hbWUpCiAgICAgVVN0cmluZyBzdHJpbmcgPSBzdHJpbmdUb1VTdHJpbmcoU3Ry
aW5nOjpmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayhuYW1lLCBzdHJsZW4obmFtZSkpKTsKICAg
ICBTdHJpbmdJZGVudGlmaWVyTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gc3RyaW5nSWRlbnRpZmll
ck1hcCgpLmFkZChzdHJpbmcuaW1wbCgpLCAwKTsKICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkp
IHsKLSAgICAgICAgQVNTRVJUKCFyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7Ci0gICAgICAgIHJl
c3VsdC5pdGVyYXRvci0+c2Vjb25kID0gbmV3IElkZW50aWZpZXJSZXAobmFtZSk7CisgICAgICAg
IEFTU0VSVCghcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRv
ci0+dmFsdWUgPSBuZXcgSWRlbnRpZmllclJlcChuYW1lKTsKICAgICAgICAgCi0gICAgICAgIGlk
ZW50aWZpZXJTZXQoKS5hZGQocmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOworICAgICAgICBpZGVu
dGlmaWVyU2V0KCkuYWRkKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwogICAgIH0KICAgICAKLSAg
ICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgcmV0dXJuIHJlc3VsdC5pdGVy
YXRvci0+dmFsdWU7CiB9CiAKIGJvb2wgSWRlbnRpZmllclJlcDo6aXNWYWxpZChJZGVudGlmaWVy
UmVwKiBpZGVudGlmaWVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL05QX2pz
b2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9OUF9qc29iamVjdC5jcHAKaW5kZXgg
ODM5ODZhZjU4M2M1OTA0MmYxYmY3Nzc1MTIwN2E4MDM1M2FkMTNlYS4uMzQ2ODczZDY1MzI5NGYz
YTBlMjIwYmIwZjM2ZTBiZDhkMDg3NGU1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYnJp
ZGdlL05QX2pzb2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvTlBfanNvYmpl
Y3QuY3BwCkBAIC02Niw4ICs2Niw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGl0ZXIgPSBtX21h
cC5hZGQocm9vdE9iamVjdCwgSlNUb05QT2JqZWN0TWFwKCkpLml0ZXJhdG9yOwogICAgICAgICB9
CiAKLSAgICAgICAgQVNTRVJUKGl0ZXItPnNlY29uZC5maW5kKGpzT2JqZWN0KSA9PSBpdGVyLT5z
ZWNvbmQuZW5kKCkpOwotICAgICAgICBpdGVyLT5zZWNvbmQuYWRkKGpzT2JqZWN0LCBucE9iamVj
dCk7CisgICAgICAgIEFTU0VSVChpdGVyLT52YWx1ZS5maW5kKGpzT2JqZWN0KSA9PSBpdGVyLT52
YWx1ZS5lbmQoKSk7CisgICAgICAgIGl0ZXItPnZhbHVlLmFkZChqc09iamVjdCwgbnBPYmplY3Qp
OwogICAgIH0KIAogICAgIHZvaWQgcmVtb3ZlKFJvb3RPYmplY3QqIHJvb3RPYmplY3QpCkBAIC04
MSw5ICs4MSw5IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIEhhc2hNYXA8Um9vdE9iamVjdCos
IEpTVG9OUE9iamVjdE1hcD46Oml0ZXJhdG9yIGl0ZXIgPSBtX21hcC5maW5kKHJvb3RPYmplY3Qp
OwogICAgICAgICBBU1NFUlQoaXRlciAhPSBtX21hcC5lbmQoKSk7Ci0gICAgICAgIEFTU0VSVChp
dGVyLT5zZWNvbmQuZmluZChqc09iamVjdCkgIT0gaXRlci0+c2Vjb25kLmVuZCgpKTsKKyAgICAg
ICAgQVNTRVJUKGl0ZXItPnZhbHVlLmZpbmQoanNPYmplY3QpICE9IGl0ZXItPnZhbHVlLmVuZCgp
KTsKIAotICAgICAgICBpdGVyLT5zZWNvbmQucmVtb3ZlKGpzT2JqZWN0KTsKKyAgICAgICAgaXRl
ci0+dmFsdWUucmVtb3ZlKGpzT2JqZWN0KTsKICAgICB9CiAKIHByaXZhdGU6CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhQ2xhc3NKU0MuY3BwIGIvU291cmNl
L1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YUNsYXNzSlNDLmNwcAppbmRleCA5NzU2ZTdkZjYw
NWMwOTUzZThiYjRlMjg1NGIxZTU0NDkxYTllZjE1Li41ZGFiM2U0MWYyMzliMTA0YWEyOWJmODQw
MWNlMzkzYWYyYjU4MzFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pz
Yy9KYXZhQ2xhc3NKU0MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0ph
dmFDbGFzc0pTQy5jcHAKQEAgLTEwNyw3ICsxMDcsNyBAQCBKYXZhQ2xhc3M6On5KYXZhQ2xhc3Mo
KQogCiAgICAgTWV0aG9kTGlzdE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9tZXRob2RzLmVu
ZCgpOwogICAgIGZvciAoTWV0aG9kTGlzdE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX21ldGhv
ZHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IE1ldGhvZExpc3Qq
IG1ldGhvZExpc3QgPSBpdC0+c2Vjb25kOworICAgICAgICBjb25zdCBNZXRob2RMaXN0KiBtZXRo
b2RMaXN0ID0gaXQtPnZhbHVlOwogICAgICAgICBkZWxldGVBbGxWYWx1ZXMoKm1ldGhvZExpc3Qp
OwogICAgICAgICBkZWxldGUgbWV0aG9kTGlzdDsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9icmlkZ2UvcnVudGltZV9yb290LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9y
dW50aW1lX3Jvb3QuY3BwCmluZGV4IGU4ODRlNjFiMTM4NzZlODc3YTZjOTllNjgzZWRiOTk0MTI3
ZTNkZjEuLjlkZGI5NTVlMTljYmUyNmM5ODM2ZGQ5NDg5ZTAyZGMwMTA4YWU3MmIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX3Jvb3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JyaWRnZS9ydW50aW1lX3Jvb3QuY3BwCkBAIC0xMDUsNyArMTA1LDcgQEAgdm9pZCBS
b290T2JqZWN0OjppbnZhbGlkYXRlKCkKICAgICB7CiAgICAgICAgIEhhc2hNYXA8UnVudGltZU9i
amVjdCosIEpTQzo6V2VhazxSdW50aW1lT2JqZWN0PiA+OjppdGVyYXRvciBlbmQgPSBtX3J1bnRp
bWVPYmplY3RzLmVuZCgpOwogICAgICAgICBmb3IgKEhhc2hNYXA8UnVudGltZU9iamVjdCosIEpT
Qzo6V2VhazxSdW50aW1lT2JqZWN0PiA+OjppdGVyYXRvciBpdCA9IG1fcnVudGltZU9iamVjdHMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLmdldCgp
LT5pbnZhbGlkYXRlKCk7CisgICAgICAgICAgICBpdC0+dmFsdWUuZ2V0KCktPmludmFsaWRhdGUo
KTsKICAgICAgICAgfQogCiAgICAgICAgIG1fcnVudGltZU9iamVjdHMuY2xlYXIoKTsKQEAgLTEy
Niw3ICsxMjYsNyBAQCB2b2lkIFJvb3RPYmplY3Q6OmludmFsaWRhdGUoKQogCiAgICAgUHJvdGVj
dENvdW50U2V0OjppdGVyYXRvciBlbmQgPSBtX3Byb3RlY3RDb3VudFNldC5lbmQoKTsKICAgICBm
b3IgKFByb3RlY3RDb3VudFNldDo6aXRlcmF0b3IgaXQgPSBtX3Byb3RlY3RDb3VudFNldC5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIEpTQzo6Z2NVbnByb3RlY3QoaXQtPmZpcnN0
KTsKKyAgICAgICAgSlNDOjpnY1VucHJvdGVjdChpdC0+a2V5KTsKICAgICBtX3Byb3RlY3RDb3Vu
dFNldC5jbGVhcigpOwogCiAgICAgcm9vdE9iamVjdFNldCgpLT5yZW1vdmUodGhpcyk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FudmFzVmFsdWUuY3BwIGIvU291cmNlL1dl
YkNvcmUvY3NzL0NTU0NhbnZhc1ZhbHVlLmNwcAppbmRleCA3ODNjZWVmODJiNTBmODg1ZTM3MDU5
ZTc1ZGUxNTZkZWRmMjdkMTYxLi45YTk1NTQwZDk2ZWNjYzE5NzA3Mjg0YjU3YjZiMmQxYzY5MGIx
NjQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FudmFzVmFsdWUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYW52YXNWYWx1ZS5jcHAKQEAgLTQ5LDE0ICs0OSwx
NCBAQCB2b2lkIENTU0NhbnZhc1ZhbHVlOjpjYW52YXNDaGFuZ2VkKEhUTUxDYW52YXNFbGVtZW50
KiwgY29uc3QgRmxvYXRSZWN0JiBjaGFuZ2VkUgogICAgIEludFJlY3QgaW1hZ2VDaGFuZ2VSZWN0
ID0gZW5jbG9zaW5nSW50UmVjdChjaGFuZ2VkUmVjdCk7CiAgICAgUmVuZGVyT2JqZWN0U2l6ZUNv
dW50TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBjbGllbnRzKCkuZW5kKCk7CiAgICAgZm9yIChS
ZW5kZXJPYmplY3RTaXplQ291bnRNYXA6OmNvbnN0X2l0ZXJhdG9yIGN1cnIgPSBjbGllbnRzKCku
YmVnaW4oKTsgY3VyciAhPSBlbmQ7ICsrY3VycikKLSAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJP
YmplY3QqPihjdXJyLT5maXJzdCktPmltYWdlQ2hhbmdlZChzdGF0aWNfY2FzdDxXcmFwcGVkSW1h
Z2VQdHI+KHRoaXMpLCAmaW1hZ2VDaGFuZ2VSZWN0KTsKKyAgICAgICAgY29uc3RfY2FzdDxSZW5k
ZXJPYmplY3QqPihjdXJyLT5rZXkpLT5pbWFnZUNoYW5nZWQoc3RhdGljX2Nhc3Q8V3JhcHBlZElt
YWdlUHRyPih0aGlzKSwgJmltYWdlQ2hhbmdlUmVjdCk7CiB9CiAKIHZvaWQgQ1NTQ2FudmFzVmFs
dWU6OmNhbnZhc1Jlc2l6ZWQoSFRNTENhbnZhc0VsZW1lbnQqKQogewogICAgIFJlbmRlck9iamVj
dFNpemVDb3VudE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY2xpZW50cygpLmVuZCgpOwogICAg
IGZvciAoUmVuZGVyT2JqZWN0U2l6ZUNvdW50TWFwOjpjb25zdF9pdGVyYXRvciBjdXJyID0gY2xp
ZW50cygpLmJlZ2luKCk7IGN1cnIgIT0gZW5kOyArK2N1cnIpCi0gICAgICAgIGNvbnN0X2Nhc3Q8
UmVuZGVyT2JqZWN0Kj4oY3Vyci0+Zmlyc3QpLT5pbWFnZUNoYW5nZWQoc3RhdGljX2Nhc3Q8V3Jh
cHBlZEltYWdlUHRyPih0aGlzKSk7CisgICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyT2JqZWN0Kj4o
Y3Vyci0+a2V5KS0+aW1hZ2VDaGFuZ2VkKHN0YXRpY19jYXN0PFdyYXBwZWRJbWFnZVB0cj4odGhp
cykpOwogfQogCiB2b2lkIENTU0NhbnZhc1ZhbHVlOjpjYW52YXNEZXN0cm95ZWQoSFRNTENhbnZh
c0VsZW1lbnQqIGVsZW1lbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29t
cHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRl
ZFN0eWxlRGVjbGFyYXRpb24uY3BwCmluZGV4IDhkMmNmMzYzMDNhMWM5NWU4ODkwYmM5MzUyNzIw
MWE4MTI5ZGM0MWYuLjNlNzgxMjQzNzIwMmUzMzgxZWM2ZjkyZjhmY2U2NmYzYjIxYTViMDAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24u
Y3BwCkBAIC0xMjM3LDggKzEyMzcsOCBAQCBzdGF0aWMgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gY291
bnRlclRvQ1NTVmFsdWUoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBpbnQgcHJvcAogCiAgICAg
UmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBh
cmF0ZWQoKTsKICAgICBmb3IgKENvdW50ZXJEaXJlY3RpdmVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBtYXAtPmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGxpc3Qt
PmFwcGVuZChjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKGl0LT5maXJzdC5nZXQoKSwgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpKTsKLSAgICAgICAgc2hvcnQgbnVtYmVyID0gcHJvcGVy
dHlJRCA9PSBDU1NQcm9wZXJ0eUNvdW50ZXJJbmNyZW1lbnQgPyBpdC0+c2Vjb25kLm1faW5jcmVt
ZW50VmFsdWUgOiBpdC0+c2Vjb25kLm1fcmVzZXRWYWx1ZTsKKyAgICAgICAgbGlzdC0+YXBwZW5k
KGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoaXQtPmtleS5nZXQoKSwgQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19TVFJJTkcpKTsKKyAgICAgICAgc2hvcnQgbnVtYmVyID0gcHJvcGVydHlJRCA9PSBD
U1NQcm9wZXJ0eUNvdW50ZXJJbmNyZW1lbnQgPyBpdC0+dmFsdWUubV9pbmNyZW1lbnRWYWx1ZSA6
IGl0LT52YWx1ZS5tX3Jlc2V0VmFsdWU7CiAgICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBv
b2wtPmNyZWF0ZVZhbHVlKChkb3VibGUpbnVtYmVyLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05V
TUJFUikpOwogICAgIH0KICAgICByZXR1cm4gbGlzdC5yZWxlYXNlKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Jvc3NmYWRlVmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0Nyb3NzZmFkZVZhbHVlLmNwcAppbmRleCA0ZmYwOGFmY2E1ZmQ0YTEwNTVmNWVkMTVm
ZDFlOGZhOTI0MDRhNmUyLi5kYzQ5NDMwOTUwMmZmY2Q4ZWEwOThmMzQ1ZjY0Y2RlY2E4NmUzZTdh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Jvc3NmYWRlVmFsdWUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDcm9zc2ZhZGVWYWx1ZS5jcHAKQEAgLTE2MSw3ICsx
NjEsNyBAQCB2b2lkIENTU0Nyb3NzZmFkZVZhbHVlOjpjcm9zc2ZhZGVDaGFuZ2VkKGNvbnN0IElu
dFJlY3QmKQogewogICAgIFJlbmRlck9iamVjdFNpemVDb3VudE1hcDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gY2xpZW50cygpLmVuZCgpOwogICAgIGZvciAoUmVuZGVyT2JqZWN0U2l6ZUNvdW50TWFw
Ojpjb25zdF9pdGVyYXRvciBjdXJyID0gY2xpZW50cygpLmJlZ2luKCk7IGN1cnIgIT0gZW5kOyAr
K2N1cnIpIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiBjbGllbnQgPSBjb25zdF9jYXN0PFJlbmRl
ck9iamVjdCo+KGN1cnItPmZpcnN0KTsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBjbGllbnQgPSBj
b25zdF9jYXN0PFJlbmRlck9iamVjdCo+KGN1cnItPmtleSk7CiAgICAgICAgIGNsaWVudC0+aW1h
Z2VDaGFuZ2VkKHN0YXRpY19jYXN0PFdyYXBwZWRJbWFnZVB0cj4odGhpcykpOwogICAgIH0KIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuY3BwCmluZGV4IGRkOTA0ZDM3ZmI5
NTRlNDRkYmE2NTM4NzY3MzU4MzExOThmYWQzZDcuLmNlNDUzNjdhYzMzMjM3MmEwZmI5ZWM4YzVh
NTJmYjlmMDg4OWVkZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFj
ZVNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU291cmNlLmNw
cApAQCAtMTE0LDcgKzExNCw3IEBAIFNpbXBsZUZvbnREYXRhKiBDU1NGb250RmFjZVNvdXJjZTo6
Z2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpCiAgICAgdW5zaWdu
ZWQgaGFzaEtleSA9IChmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSArIDEpIDw8
IDYgfCBmb250RGVzY3JpcHRpb24ud2lkdGhWYXJpYW50KCkgPDwgNAogICAgICAgICAgICAgICAg
ICAgICAgICB8IChmb250RGVzY3JpcHRpb24udGV4dE9yaWVudGF0aW9uKCkgPT0gVGV4dE9yaWVu
dGF0aW9uVXByaWdodCA/IDggOiAwKSB8IChmb250RGVzY3JpcHRpb24ub3JpZW50YXRpb24oKSA9
PSBWZXJ0aWNhbCA/IDQgOiAwKSB8IChzeW50aGV0aWNCb2xkID8gMiA6IDApIHwgKHN5bnRoZXRp
Y0l0YWxpYyA/IDEgOiAwKTsKIAotICAgIFNpbXBsZUZvbnREYXRhKiYgY2FjaGVkRGF0YSA9IG1f
Zm9udERhdGFUYWJsZS5hZGQoaGFzaEtleSwgMCkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBTaW1w
bGVGb250RGF0YSomIGNhY2hlZERhdGEgPSBtX2ZvbnREYXRhVGFibGUuYWRkKGhhc2hLZXksIDAp
Lml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoY2FjaGVkRGF0YSkKICAgICAgICAgcmV0dXJuIGNh
Y2hlZERhdGE7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0
b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAKaW5kZXggZTAw
MmYyZjhmMDE3MGU5OGNhNTZkNzFmZTVjZGI5N2JiZWE2MmI4NS4uYjkwYmJlOGY1OTczYWQ3MjQy
NzM1ODFhNTNhZWE0NzIzOTUyMDVmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0ZvbnRTZWxlY3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rv
ci5jcHAKQEAgLTI4NSw3ICsyODUsNyBAQCB2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6YWRkRm9udEZh
Y2VSdWxlKGNvbnN0IENTU0ZvbnRGYWNlUnVsZSogZm9udEZhY2VSdWxlKQogICAgICAgICBpZiAo
ZmFtaWx5TmFtZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBP
d25QdHI8VmVjdG9yPFJlZlB0cjxDU1NGb250RmFjZT4gPiA+JiBmYW1pbHlGb250RmFjZXMgPSBt
X2ZvbnRGYWNlcy5hZGQoZmFtaWx5TmFtZSwgbnVsbHB0cikuaXRlcmF0b3ItPnNlY29uZDsKKyAg
ICAgICAgT3duUHRyPFZlY3RvcjxSZWZQdHI8Q1NTRm9udEZhY2U+ID4gPiYgZmFtaWx5Rm9udEZh
Y2VzID0gbV9mb250RmFjZXMuYWRkKGZhbWlseU5hbWUsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1
ZTsKICAgICAgICAgaWYgKCFmYW1pbHlGb250RmFjZXMpIHsKICAgICAgICAgICAgIGZhbWlseUZv
bnRGYWNlcyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8UmVmUHRyPENTU0ZvbnRGYWNlPiA+KTsKIApA
QCAtNDg3LDEzICs0ODcsMTMgQEAgRm9udERhdGEqIENTU0ZvbnRTZWxlY3Rvcjo6Z2V0Rm9udERh
dGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGMKICAgICAgICAgcmV0
dXJuIGZvbnREYXRhRm9yR2VuZXJpY0ZhbWlseShtX2RvY3VtZW50LCBmb250RGVzY3JpcHRpb24s
IGZhbWlseU5hbWUpOwogICAgIH0KIAotICAgIE93blB0cjxIYXNoTWFwPHVuc2lnbmVkLCBSZWZQ
dHI8Q1NTU2VnbWVudGVkRm9udEZhY2U+ID4gPiYgc2VnbWVudGVkRm9udEZhY2VDYWNoZSA9IG1f
Zm9udHMuYWRkKGZhbWlseSwgbnVsbHB0cikuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBPd25QdHI8
SGFzaE1hcDx1bnNpZ25lZCwgUmVmUHRyPENTU1NlZ21lbnRlZEZvbnRGYWNlPiA+ID4mIHNlZ21l
bnRlZEZvbnRGYWNlQ2FjaGUgPSBtX2ZvbnRzLmFkZChmYW1pbHksIG51bGxwdHIpLml0ZXJhdG9y
LT52YWx1ZTsKICAgICBpZiAoIXNlZ21lbnRlZEZvbnRGYWNlQ2FjaGUpCiAgICAgICAgIHNlZ21l
bnRlZEZvbnRGYWNlQ2FjaGUgPSBhZG9wdFB0cihuZXcgSGFzaE1hcDx1bnNpZ25lZCwgUmVmUHRy
PENTU1NlZ21lbnRlZEZvbnRGYWNlPiA+KTsKIAogICAgIEZvbnRUcmFpdHNNYXNrIHRyYWl0c01h
c2sgPSBmb250RGVzY3JpcHRpb24udHJhaXRzTWFzaygpOwogCi0gICAgUmVmUHRyPENTU1NlZ21l
bnRlZEZvbnRGYWNlPiYgZmFjZSA9IHNlZ21lbnRlZEZvbnRGYWNlQ2FjaGUtPmFkZCh0cmFpdHNN
YXNrLCAwKS5pdGVyYXRvci0+c2Vjb25kOworICAgIFJlZlB0cjxDU1NTZWdtZW50ZWRGb250RmFj
ZT4mIGZhY2UgPSBzZWdtZW50ZWRGb250RmFjZUNhY2hlLT5hZGQodHJhaXRzTWFzaywgMCkuaXRl
cmF0b3ItPnZhbHVlOwogICAgIGlmICghZmFjZSkgewogICAgICAgICBmYWNlID0gQ1NTU2VnbWVu
dGVkRm9udEZhY2U6OmNyZWF0ZSh0aGlzKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0lt
YWdlR2VuZXJhdG9yVmFsdWUuY3BwCmluZGV4IDliZTQ0NmJkMGZiODViMDY0ZDY5ZjE4NjMyNjk5
YTAzOWEwYWMxZDYuLmEzNDFlMmZjYWU1NzliZDcyOTIxZDZiZjM4MjdkOTJmMmYwYTlhNTkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZUdlbmVyYXRvclZhbHVlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5jcHAKQEAgLTU2
LDcgKzU2LDcgQEAgdm9pZCBDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjphZGRDbGllbnQoUmVuZGVy
T2JqZWN0KiByZW5kZXJlciwgY29uc3QgSW50U2l6ZSYgc2kKICAgICBpZiAoaXQgPT0gbV9jbGll
bnRzLmVuZCgpKQogICAgICAgICBtX2NsaWVudHMuYWRkKHJlbmRlcmVyLCBTaXplQW5kQ291bnQo
c2l6ZSwgMSkpOwogICAgIGVsc2UgewotICAgICAgICBTaXplQW5kQ291bnQmIHNpemVDb3VudCA9
IGl0LT5zZWNvbmQ7CisgICAgICAgIFNpemVBbmRDb3VudCYgc2l6ZUNvdW50ID0gaXQtPnZhbHVl
OwogICAgICAgICArK3NpemVDb3VudC5jb3VudDsKICAgICB9CiB9CkBAIC02OCw3ICs2OCw3IEBA
IHZvaWQgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6cmVtb3ZlQ2xpZW50KFJlbmRlck9iamVjdCog
cmVuZGVyZXIpCiAgICAgQVNTRVJUKGl0ICE9IG1fY2xpZW50cy5lbmQoKSk7CiAKICAgICBJbnRT
aXplIHJlbW92ZWRJbWFnZVNpemU7Ci0gICAgU2l6ZUFuZENvdW50JiBzaXplQ291bnQgPSBpdC0+
c2Vjb25kOworICAgIFNpemVBbmRDb3VudCYgc2l6ZUNvdW50ID0gaXQtPnZhbHVlOwogICAgIElu
dFNpemUgc2l6ZSA9IHNpemVDb3VudC5zaXplOwogICAgIGlmICghc2l6ZS5pc0VtcHR5KCkpIHsK
ICAgICAgICAgbV9zaXplcy5yZW1vdmUoc2l6ZSk7CkBAIC04Niw3ICs4Niw3IEBAIEltYWdlKiBD
U1NJbWFnZUdlbmVyYXRvclZhbHVlOjpnZXRJbWFnZShSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBj
b25zdCBJbnRTaXplJiBzCiB7CiAgICAgUmVuZGVyT2JqZWN0U2l6ZUNvdW50TWFwOjppdGVyYXRv
ciBpdCA9IG1fY2xpZW50cy5maW5kKHJlbmRlcmVyKTsKICAgICBpZiAoaXQgIT0gbV9jbGllbnRz
LmVuZCgpKSB7Ci0gICAgICAgIFNpemVBbmRDb3VudCYgc2l6ZUNvdW50ID0gaXQtPnNlY29uZDsK
KyAgICAgICAgU2l6ZUFuZENvdW50JiBzaXplQ291bnQgPSBpdC0+dmFsdWU7CiAgICAgICAgIElu
dFNpemUgb2xkU2l6ZSA9IHNpemVDb3VudC5zaXplOwogICAgICAgICBpZiAob2xkU2l6ZSAhPSBz
aXplKSB7CiAgICAgICAgICAgICBSZWZQdHI8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4gcHJvdGVj
dCh0aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWdtZW50ZWRGb250
RmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuY3BwCmlu
ZGV4IGJiMDBkMDIyMGRlYmM3MTIwZDMyZDM3MDcxY2E2ZWYzMzJlNjA2NTUuLjZkNGYxZDhlNTFm
MTY4MmI1NmUwYTE2YjhkNDNhY2Y4YzJjNTk1YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1NlZ21lbnRlZEZvbnRGYWNlLmNwcApAQCAtODksNyArODksNyBAQCBGb250RGF0YSogQ1NTU2Vn
bWVudGVkRm9udEZhY2U6OmdldEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERl
c2NyaXB0aQogICAgIEZvbnRUcmFpdHNNYXNrIGRlc2lyZWRUcmFpdHNNYXNrID0gZm9udERlc2Ny
aXB0aW9uLnRyYWl0c01hc2soKTsKICAgICB1bnNpZ25lZCBoYXNoS2V5ID0gKChmb250RGVzY3Jp
cHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSArIDEpIDw8IChGb250VHJhaXRzTWFza1dpZHRoICsg
MSkpIHwgKChmb250RGVzY3JpcHRpb24ub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCA/IDEgOiAw
KSA8PCBGb250VHJhaXRzTWFza1dpZHRoKSB8IGRlc2lyZWRUcmFpdHNNYXNrOwogCi0gICAgU2Vn
bWVudGVkRm9udERhdGEqJiBmb250RGF0YSA9IG1fZm9udERhdGFUYWJsZS5hZGQoaGFzaEtleSwg
MCkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBTZWdtZW50ZWRGb250RGF0YSomIGZvbnREYXRhID0g
bV9mb250RGF0YVRhYmxlLmFkZChoYXNoS2V5LCAwKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYg
KGZvbnREYXRhKQogICAgICAgICByZXR1cm4gZm9udERhdGE7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2Vs
ZWN0b3IuY3BwCmluZGV4IGFlZTE5ZjZlOWIwNDhiNDRmYWZhYjYzZGQ4NTU4ZTgxYmIyMTBmYWYu
LmQwZjU1MDQwZTViODhhMzhjYTk2Y2YzMGMxM2Q1YjhlNjgxMWY3YmYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1NlbGVjdG9yLmNwcApAQCAtMzg4LDcgKzM4OCw3IEBAIENTU1NlbGVjdG9yOjpQc2V1ZG9U
eXBlIENTU1NlbGVjdG9yOjpwYXJzZVBzZXVkb1R5cGUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1l
KQogICAgICAgICByZXR1cm4gUHNldWRvVW5rbm93bjsKICAgICBIYXNoTWFwPEF0b21pY1N0cmlu
Z0ltcGwqLCBDU1NTZWxlY3Rvcjo6UHNldWRvVHlwZT4qIG5hbWVUb1BzZXVkb1R5cGUgPSBuYW1l
VG9Qc2V1ZG9UeXBlTWFwKCk7CiAgICAgSGFzaE1hcDxBdG9taWNTdHJpbmdJbXBsKiwgQ1NTU2Vs
ZWN0b3I6OlBzZXVkb1R5cGU+OjppdGVyYXRvciBzbG90ID0gbmFtZVRvUHNldWRvVHlwZS0+Zmlu
ZChuYW1lLmltcGwoKSk7Ci0gICAgcmV0dXJuIHNsb3QgPT0gbmFtZVRvUHNldWRvVHlwZS0+ZW5k
KCkgPyBQc2V1ZG9Vbmtub3duIDogc2xvdC0+c2Vjb25kOworICAgIHJldHVybiBzbG90ID09IG5h
bWVUb1BzZXVkb1R5cGUtPmVuZCgpID8gUHNldWRvVW5rbm93biA6IHNsb3QtPnZhbHVlOwogfQog
CiBib29sIENTU1NlbGVjdG9yOjppc1Vua25vd25Qc2V1ZG9UeXBlKGNvbnN0IEF0b21pY1N0cmlu
ZyYgbmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZUFwcGx5UHJv
cGVydHkuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlQXBwbHlQcm9wZXJ0eS5jcHAK
aW5kZXggMDQxZDZjODI0NTIzZDJmMjliNTYyZmIxYzI0NGY1MjQwYzA2YzE4Yy4uMjUxNThhNTY3
NzZjN2I5ZmUyYWM2MTlmODQyZmI0YjJmZTg4ZTNjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3NzL0NTU1N0eWxlQXBwbHlQcm9wZXJ0eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1N0eWxlQXBwbHlQcm9wZXJ0eS5jcHAKQEAgLTEwMDQsMjEgKzEwMDQsMjEgQEAgcHVibGlj
OgogICAgICAgICB0eXBlZGVmIENvdW50ZXJEaXJlY3RpdmVNYXA6Oml0ZXJhdG9yIEl0ZXJhdG9y
OwogICAgICAgICBJdGVyYXRvciBlbmQgPSBwYXJlbnRNYXAuZW5kKCk7CiAgICAgICAgIGZvciAo
SXRlcmF0b3IgaXQgPSBwYXJlbnRNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAg
ICAgICAgICBDb3VudGVyRGlyZWN0aXZlcyYgZGlyZWN0aXZlcyA9IG1hcC5hZGQoaXQtPmZpcnN0
LCBDb3VudGVyRGlyZWN0aXZlcygpKS5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICAgICAgQ291
bnRlckRpcmVjdGl2ZXMmIGRpcmVjdGl2ZXMgPSBtYXAuYWRkKGl0LT5rZXksIENvdW50ZXJEaXJl
Y3RpdmVzKCkpLml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgICAgIGlmIChjb3VudGVyQmVoYXZp
b3IgPT0gUmVzZXQpIHsKLSAgICAgICAgICAgICAgICBkaXJlY3RpdmVzLm1fcmVzZXQgPSBpdC0+
c2Vjb25kLm1fcmVzZXQ7Ci0gICAgICAgICAgICAgICAgZGlyZWN0aXZlcy5tX3Jlc2V0VmFsdWUg
PSBpdC0+c2Vjb25kLm1fcmVzZXRWYWx1ZTsKKyAgICAgICAgICAgICAgICBkaXJlY3RpdmVzLm1f
cmVzZXQgPSBpdC0+dmFsdWUubV9yZXNldDsKKyAgICAgICAgICAgICAgICBkaXJlY3RpdmVzLm1f
cmVzZXRWYWx1ZSA9IGl0LT52YWx1ZS5tX3Jlc2V0VmFsdWU7CiAgICAgICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgICAgIC8vIEluaGVyaXRpbmcgYSBjb3VudGVyLWluY3JlbWVudCBtZWFu
cyB0YWtpbmcgdGhlIHBhcmVudCdzIGN1cnJlbnQgdmFsdWUgZm9yIHRoZSBjb3VudGVyCiAgICAg
ICAgICAgICAgICAgLy8gYW5kIGFkZGluZyBpdCB0byBpdHNlbGYuCi0gICAgICAgICAgICAgICAg
ZGlyZWN0aXZlcy5tX2luY3JlbWVudCA9IGl0LT5zZWNvbmQubV9pbmNyZW1lbnQ7CisgICAgICAg
ICAgICAgICAgZGlyZWN0aXZlcy5tX2luY3JlbWVudCA9IGl0LT52YWx1ZS5tX2luY3JlbWVudDsK
ICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzLm1faW5jcmVtZW50VmFsdWUgPSAwOwogICAgICAg
ICAgICAgICAgIGlmIChkaXJlY3RpdmVzLm1faW5jcmVtZW50KSB7CiAgICAgICAgICAgICAgICAg
ICAgIGZsb2F0IGluY3JlbWVudFZhbHVlID0gZGlyZWN0aXZlcy5tX2luY3JlbWVudFZhbHVlOwot
ICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzLm1faW5jcmVtZW50VmFsdWUgPSBjbGFtcFRv
SW50ZWdlcihpbmNyZW1lbnRWYWx1ZSArIGl0LT5zZWNvbmQubV9pbmNyZW1lbnRWYWx1ZSk7Cisg
ICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXMubV9pbmNyZW1lbnRWYWx1ZSA9IGNsYW1wVG9J
bnRlZ2VyKGluY3JlbWVudFZhbHVlICsgaXQtPnZhbHVlLm1faW5jcmVtZW50VmFsdWUpOwogICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXMubV9p
bmNyZW1lbnQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzLm1faW5jcmVt
ZW50VmFsdWUgPSBpdC0+c2Vjb25kLm1faW5jcmVtZW50VmFsdWU7CisgICAgICAgICAgICAgICAg
ICAgIGRpcmVjdGl2ZXMubV9pbmNyZW1lbnRWYWx1ZSA9IGl0LT52YWx1ZS5tX2luY3JlbWVudFZh
bHVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTAz
Niw5ICsxMDM2LDkgQEAgcHVibGljOgogICAgICAgICBJdGVyYXRvciBlbmQgPSBtYXAuZW5kKCk7
CiAgICAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSBtYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KQogICAgICAgICAgICAgaWYgKGNvdW50ZXJCZWhhdmlvciA9PSBSZXNldCkKLSAgICAgICAgICAg
ICAgICBpdC0+c2Vjb25kLm1fcmVzZXQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBpdC0+dmFs
dWUubV9yZXNldCA9IGZhbHNlOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGl0
LT5zZWNvbmQubV9pbmNyZW1lbnQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBpdC0+dmFsdWUu
bV9pbmNyZW1lbnQgPSBmYWxzZTsKIAogICAgICAgICBpbnQgbGVuZ3RoID0gbGlzdCA/IGxpc3Qt
Pmxlbmd0aCgpIDogMDsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkg
ewpAQCAtMTA1Miw3ICsxMDUyLDcgQEAgcHVibGljOgogCiAgICAgICAgICAgICBBdG9taWNTdHJp
bmcgaWRlbnRpZmllciA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4ocGFpci0+Zmly
c3QoKSktPmdldFN0cmluZ1ZhbHVlKCk7CiAgICAgICAgICAgICBpbnQgdmFsdWUgPSBzdGF0aWNf
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHBhaXItPnNlY29uZCgpKS0+Z2V0SW50VmFsdWUoKTsK
LSAgICAgICAgICAgIENvdW50ZXJEaXJlY3RpdmVzJiBkaXJlY3RpdmVzID0gbWFwLmFkZChpZGVu
dGlmaWVyLmltcGwoKSwgQ291bnRlckRpcmVjdGl2ZXMoKSkuaXRlcmF0b3ItPnNlY29uZDsKKyAg
ICAgICAgICAgIENvdW50ZXJEaXJlY3RpdmVzJiBkaXJlY3RpdmVzID0gbWFwLmFkZChpZGVudGlm
aWVyLmltcGwoKSwgQ291bnRlckRpcmVjdGl2ZXMoKSkuaXRlcmF0b3ItPnZhbHVlOwogICAgICAg
ICAgICAgaWYgKGNvdW50ZXJCZWhhdmlvciA9PSBSZXNldCkgewogICAgICAgICAgICAgICAgIGRp
cmVjdGl2ZXMubV9yZXNldCA9IHRydWU7CiAgICAgICAgICAgICAgICAgZGlyZWN0aXZlcy5tX3Jl
c2V0VmFsdWUgPSB2YWx1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHls
ZVNlbGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcApp
bmRleCBiZWU1OGE5YmNkOTQwNDNhOGE1MjUxY2M3ODM3N2Q1MGFmMDgxNjlkLi40YWYzMzJiZDE4
YWRmMTg4Mzk2ZDU0MzBiZDA5NWZiYjdhMzllMDFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0
eWxlU2VsZWN0b3IuY3BwCkBAIC00NDUsNyArNDQ1LDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9y
Ojpjb2xsZWN0RmVhdHVyZXMoKQogICAgIG1fZmVhdHVyZXMuYWRkKG1fYXV0aG9yU3R5bGUtPmZl
YXR1cmVzKCkpOwogI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCiAgICAgZm9yIChTY29wZWRSdWxl
U2V0TWFwOjppdGVyYXRvciBpdCA9IG1fc2NvcGVkQXV0aG9yU3R5bGVzLmJlZ2luKCk7IGl0ICE9
IG1fc2NvcGVkQXV0aG9yU3R5bGVzLmVuZCgpOyArK2l0KQotICAgICAgICBtX2ZlYXR1cmVzLmFk
ZChpdC0+c2Vjb25kLT5mZWF0dXJlcygpKTsKKyAgICAgICAgbV9mZWF0dXJlcy5hZGQoaXQtPnZh
bHVlLT5mZWF0dXJlcygpKTsKICNlbmRpZgogICAgIGlmIChtX3VzZXJTdHlsZSkKICAgICAgICAg
bV9mZWF0dXJlcy5hZGQobV91c2VyU3R5bGUtPmZlYXR1cmVzKCkpOwpAQCAtNDgyLDcgKzQ4Miw3
IEBAIGlubGluZSBSdWxlU2V0KiBDU1NTdHlsZVNlbGVjdG9yOjpydWxlU2V0Rm9yU2NvcGUoY29u
c3QgQ29udGFpbmVyTm9kZSogc2NvcGUpIGNvCiAgICAgaWYgKCFzY29wZS0+aGFzU2NvcGVkSFRN
TFN0eWxlQ2hpbGQoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgU2NvcGVkUnVsZVNldE1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Njb3BlZEF1dGhvclN0eWxlcy5maW5kKHNjb3BlKTsKLSAg
ICByZXR1cm4gaXQgIT0gbV9zY29wZWRBdXRob3JTdHlsZXMuZW5kKCkgPyBpdC0+c2Vjb25kLmdl
dCgpIDogMDsgCisgICAgcmV0dXJuIGl0ICE9IG1fc2NvcGVkQXV0aG9yU3R5bGVzLmVuZCgpID8g
aXQtPnZhbHVlLmdldCgpIDogMDsgCiB9CiAjZW5kaWYKIApAQCAtNTAwLDggKzUwMCw4IEBAIHZv
aWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwZW5kQXV0aG9yU3R5bGVzaGVldHModW5zaWduZWQgZmly
c3ROZXcsIGNvbnN0IFZlY3RvcjxSCiAgICAgICAgIGlmIChzY29wZSkgewogICAgICAgICAgICAg
U2NvcGVkUnVsZVNldE1hcDo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IG1fc2NvcGVkQXV0aG9yU3R5
bGVzLmFkZChzY29wZSwgbnVsbHB0cik7CiAgICAgICAgICAgICBpZiAoYWRkUmVzdWx0LmlzTmV3
RW50cnkpCi0gICAgICAgICAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBhZG9w
dFB0cihuZXcgUnVsZVNldCgpKTsKLSAgICAgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+c2Vj
b25kLT5hZGRSdWxlc0Zyb21TaGVldChjc3NTaGVldCwgKm1fbWVkaXVtLCB0aGlzLCBzY29wZSk7
CisgICAgICAgICAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGFkb3B0UHRyKG5l
dyBSdWxlU2V0KCkpOworICAgICAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+YWRk
UnVsZXNGcm9tU2hlZXQoY3NzU2hlZXQsICptX21lZGl1bSwgdGhpcywgc2NvcGUpOwogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIH0KICNlbmRpZgpAQCAtNjIwLDEwICs2MjAsMTAgQEAg
dm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpzd2VlcE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUoKQogICAg
IE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGU6Oml0ZXJhdG9yIGl0ID0gbV9tYXRjaGVkUHJvcGVydGll
c0NhY2hlLmJlZ2luKCk7CiAgICAgTWF0Y2hlZFByb3BlcnRpZXNDYWNoZTo6aXRlcmF0b3IgZW5k
ID0gbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlLmVuZCgpOwogICAgIGZvciAoOyBpdCAhPSBlbmQ7
ICsraXQpIHsKLSAgICAgICAgVmVjdG9yPE1hdGNoZWRQcm9wZXJ0aWVzPiYgbWF0Y2hlZFByb3Bl
cnRpZXMgPSBpdC0+c2Vjb25kLm1hdGNoZWRQcm9wZXJ0aWVzOworICAgICAgICBWZWN0b3I8TWF0
Y2hlZFByb3BlcnRpZXM+JiBtYXRjaGVkUHJvcGVydGllcyA9IGl0LT52YWx1ZS5tYXRjaGVkUHJv
cGVydGllczsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXRjaGVkUHJvcGVydGll
cy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgaWYgKG1hdGNoZWRQcm9wZXJ0aWVzW2ldLnBy
b3BlcnRpZXMtPmhhc09uZVJlZigpKSB7Ci0gICAgICAgICAgICAgICAgdG9SZW1vdmUuYXBwZW5k
KGl0LT5maXJzdCk7CisgICAgICAgICAgICAgICAgdG9SZW1vdmUuYXBwZW5kKGl0LT5rZXkpOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xNzAy
LDcgKzE3MDIsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmtleWZyYW1lU3R5bGVzRm9yQW5p
bWF0aW9uKEVsZW1lbnQqIGUsIGNvbnN0IFJlbmRlclN0eWxlKgogICAgIGlmIChpdCA9PSBtX2tl
eWZyYW1lc1J1bGVNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNvbnN0IFdlYktp
dENTU0tleWZyYW1lc1J1bGUqIGtleWZyYW1lc1J1bGUgPSBpdC0+c2Vjb25kLmdldCgpOworICAg
IGNvbnN0IFdlYktpdENTU0tleWZyYW1lc1J1bGUqIGtleWZyYW1lc1J1bGUgPSBpdC0+dmFsdWUu
Z2V0KCk7CiAKICAgICAvLyBDb25zdHJ1Y3QgYW5kIHBvcHVsYXRlIHRoZSBzdHlsZSBmb3IgZWFj
aCBrZXlmcmFtZQogICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVLZXlmcmFtZT4gPiYga2V5
ZnJhbWVzID0ga2V5ZnJhbWVzUnVsZS0+a2V5ZnJhbWVzKCk7CkBAIC0yMzgzLDcgKzIzODMsNyBA
QCB2b2lkIFJ1bGVTZXQ6OmFkZFRvUnVsZVNldChBdG9taWNTdHJpbmdJbXBsKiBrZXksIEF0b21S
dWxlTWFwJiBtYXAsIGNvbnN0IFJ1bGVEYQogewogICAgIGlmICgha2V5KQogICAgICAgICByZXR1
cm47Ci0gICAgT3duUHRyPFZlY3RvcjxSdWxlRGF0YT4gPiYgcnVsZXMgPSBtYXAuYWRkKGtleSwg
bnVsbHB0cikuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBPd25QdHI8VmVjdG9yPFJ1bGVEYXRhPiA+
JiBydWxlcyA9IG1hcC5hZGQoa2V5LCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYg
KCFydWxlcykKICAgICAgICAgcnVsZXMgPSBhZG9wdFB0cihuZXcgVmVjdG9yPFJ1bGVEYXRhPik7
CiAgICAgcnVsZXMtPmFwcGVuZChydWxlRGF0YSk7CkBAIC0yNTQzLDcgKzI1NDMsNyBAQCBzdGF0
aWMgaW5saW5lIHZvaWQgc2hyaW5rTWFwVmVjdG9yc1RvRml0KFJ1bGVTZXQ6OkF0b21SdWxlTWFw
JiBtYXApCiB7CiAgICAgUnVsZVNldDo6QXRvbVJ1bGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1hcC5l
bmQoKTsKICAgICBmb3IgKFJ1bGVTZXQ6OkF0b21SdWxlTWFwOjppdGVyYXRvciBpdCA9IG1hcC5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPnNocmlua1RvRml0
KCk7CisgICAgICAgIGl0LT52YWx1ZS0+c2hyaW5rVG9GaXQoKTsKIH0KIAogdm9pZCBSdWxlU2V0
OjpzaHJpbmtUb0ZpdCgpCkBAIC0yNjc5LDcgKzI2NzksNyBAQCBjb25zdCBDU1NTdHlsZVNlbGVj
dG9yOjpNYXRjaGVkUHJvcGVydGllc0NhY2hlSXRlbSogQ1NTU3R5bGVTZWxlY3Rvcjo6ZmluZEZy
b21NYQogICAgIE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGU6Oml0ZXJhdG9yIGl0ID0gbV9tYXRjaGVk
UHJvcGVydGllc0NhY2hlLmZpbmQoaGFzaCk7CiAgICAgaWYgKGl0ID09IG1fbWF0Y2hlZFByb3Bl
cnRpZXNDYWNoZS5lbmQoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgTWF0Y2hlZFByb3BlcnRp
ZXNDYWNoZUl0ZW0mIGNhY2hlSXRlbSA9IGl0LT5zZWNvbmQ7CisgICAgTWF0Y2hlZFByb3BlcnRp
ZXNDYWNoZUl0ZW0mIGNhY2hlSXRlbSA9IGl0LT52YWx1ZTsKIAogICAgIHNpemVfdCBzaXplID0g
bWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpOwogICAgIGlmIChzaXplICE9IGNh
Y2hlSXRlbS5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTVmFsdWVQb29sLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZVBv
b2wuY3BwCmluZGV4IDA1YmE1NDk1MDJhZmI4NzY3N2YyNTMxMmJmMTNhYjY0OTc2OWE0NjEuLjFj
NDYxMDM4ODhjNGUyY2U2OTBmY2ZjZDFhODkxZjlmMGE1NDMzMTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZVBvb2wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NWYWx1ZVBvb2wuY3BwCkBAIC01Nyw4ICs1Nyw4IEBAIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+IENTU1ZhbHVlUG9vbDo6Y3JlYXRlSWRlbnRpZmllclZhbHVlKGludCBpZGVudCkKICAg
ICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGR1bW15VmFsdWU7CiAgICAgSWRlbnRpZmllclZh
bHVlQ2FjaGU6OkFkZFJlc3VsdCBlbnRyeSA9IG1faWRlbnRpZmllclZhbHVlQ2FjaGUuYWRkKGlk
ZW50LCBkdW1teVZhbHVlKTsKICAgICBpZiAoZW50cnkuaXNOZXdFbnRyeSkKLSAgICAgICAgZW50
cnkuaXRlcmF0b3ItPnNlY29uZCA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVudGlmaWVy
KGlkZW50KTsKLSAgICByZXR1cm4gZW50cnkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgZW50
cnkuaXRlcmF0b3ItPnZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIo
aWRlbnQpOworICAgIHJldHVybiBlbnRyeS5pdGVyYXRvci0+dmFsdWU7CiB9CiAKIFBhc3NSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IENTU1ZhbHVlUG9vbDo6Y3JlYXRlQ29sb3JWYWx1ZSh1bnNp
Z25lZCByZ2JWYWx1ZSkKQEAgLTgwLDggKzgwLDggQEAgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gQ1NTVmFsdWVQb29sOjpjcmVhdGVDb2xvclZhbHVlKHVuc2lnbmVkIHJnYlZhbHVlKQog
ICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gZHVtbXlWYWx1ZTsKICAgICBDb2xvclZhbHVl
Q2FjaGU6OkFkZFJlc3VsdCBlbnRyeSA9IG1fY29sb3JWYWx1ZUNhY2hlLmFkZChyZ2JWYWx1ZSwg
ZHVtbXlWYWx1ZSk7CiAgICAgaWYgKGVudHJ5LmlzTmV3RW50cnkpCi0gICAgICAgIGVudHJ5Lml0
ZXJhdG9yLT5zZWNvbmQgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlQ29sb3IocmdiVmFsdWUp
OwotICAgIHJldHVybiBlbnRyeS5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICBlbnRyeS5pdGVy
YXRvci0+dmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlQ29sb3IocmdiVmFsdWUpOwor
ICAgIHJldHVybiBlbnRyeS5pdGVyYXRvci0+dmFsdWU7CiB9CiAKIFBhc3NSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IENTU1ZhbHVlUG9vbDo6Y3JlYXRlVmFsdWUoZG91YmxlIHZhbHVlLCBDU1NQ
cmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzIHR5cGUpCkBAIC0xMTksMTMgKzExOSwxMyBAQCBQYXNz
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NWYWx1ZVBvb2w6OmNyZWF0ZVZhbHVlKGRvdWJs
ZSB2YWx1ZSwgQ1NTUHJpbWl0aQogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gZHVtbXlW
YWx1ZTsKICAgICBJbnRlZ2VyVmFsdWVDYWNoZTo6QWRkUmVzdWx0IGVudHJ5ID0gY2FjaGUtPmFk
ZChpbnRWYWx1ZSwgZHVtbXlWYWx1ZSk7CiAgICAgaWYgKGVudHJ5LmlzTmV3RW50cnkpCi0gICAg
ICAgIGVudHJ5Lml0ZXJhdG9yLT5zZWNvbmQgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZh
bHVlLCB0eXBlKTsKLSAgICByZXR1cm4gZW50cnkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAg
ZW50cnkuaXRlcmF0b3ItPnZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2YWx1ZSwg
dHlwZSk7CisgICAgcmV0dXJuIGVudHJ5Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIAogUGFzc1JlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NTVmFsdWVQb29sOjpjcmVhdGVGb250RmFtaWx5VmFsdWUo
Y29uc3QgU3RyaW5nJiBmYW1pbHlOYW1lKQogewotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4mIHZhbHVlID0gbV9mb250RmFtaWx5VmFsdWVDYWNoZS5hZGQoZmFtaWx5TmFtZSwgMCkuaXRl
cmF0b3ItPnNlY29uZDsKKyAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiB2YWx1ZSA9IG1f
Zm9udEZhbWlseVZhbHVlQ2FjaGUuYWRkKGZhbWlseU5hbWUsIDApLml0ZXJhdG9yLT52YWx1ZTsK
ICAgICBpZiAoIXZhbHVlKQogICAgICAgICB2YWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVh
dGUoZmFtaWx5TmFtZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpOwogICAgIHJldHVy
biB2YWx1ZTsKQEAgLTEzOCw3ICsxMzgsNyBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4gQ1NT
VmFsdWVQb29sOjpjcmVhdGVGb250RmFjZVZhbHVlKGNvbnN0IEF0b21pY1N0cmluZyYgcwogICAg
IGlmIChtX2ZvbnRGYWNlVmFsdWVDYWNoZS5zaXplKCkgPiBtYXhpbXVtRm9udEZhY2VDYWNoZVNp
emUpCiAgICAgICAgIG1fZm9udEZhY2VWYWx1ZUNhY2hlLmNsZWFyKCk7CiAKLSAgICBSZWZQdHI8
Q1NTVmFsdWVMaXN0PiYgdmFsdWUgPSBtX2ZvbnRGYWNlVmFsdWVDYWNoZS5hZGQoc3RyaW5nLCAw
KS5pdGVyYXRvci0+c2Vjb25kOworICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+JiB2YWx1ZSA9IG1f
Zm9udEZhY2VWYWx1ZUNhY2hlLmFkZChzdHJpbmcsIDApLml0ZXJhdG9yLT52YWx1ZTsKICAgICBp
ZiAoIXZhbHVlKQogICAgICAgICB2YWx1ZSA9IENTU1BhcnNlcjo6cGFyc2VGb250RmFjZVZhbHVl
KHN0cmluZywgY29udGV4dFN0eWxlU2hlZXQpOwogICAgIHJldHVybiB2YWx1ZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnR5U2V0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZVByb3BlcnR5U2V0LmNwcAppbmRleCA0YTkzYmJiOTJlMDBmZTJjNGZhMTM2
YTQ1YzljOGQ3YTE0NWJjNWQwLi4wMmE0YjkyMTgwMzUxMjAxNTU0M2I0NjQ3YzEwMDJkMDdkODMy
Mjg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0eVNldC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydHlTZXQuY3BwCkBAIC03Miw3ICs3
Miw3IEBAIFN0eWxlUHJvcGVydHlTZXQ6OlN0eWxlUHJvcGVydHlTZXQoY29uc3QgQ1NTUHJvcGVy
dHkqIHByb3BlcnRpZXMsIGludCBudW1Qcm9wZXJ0CiAKICAgICAgICAgSGFzaE1hcDxpbnQsIGJv
b2w+OjppdGVyYXRvciBpdCA9IGNhbmRpZGF0ZXMuZmluZChwcm9wZXJ0eS5pZCgpKTsKICAgICAg
ICAgaWYgKGl0ICE9IGNhbmRpZGF0ZXMuZW5kKCkpIHsKLSAgICAgICAgICAgIGlmICghaW1wb3J0
YW50ICYmIGl0LT5zZWNvbmQpCisgICAgICAgICAgICBpZiAoIWltcG9ydGFudCAmJiBpdC0+dmFs
dWUpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICByZW1vdmVQcm9wZXJ0
eShwcm9wZXJ0eS5pZCgpKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL0NoZWNrZWRSYWRpb0J1dHRvbnMuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0NoZWNrZWRS
YWRpb0J1dHRvbnMuY3BwCmluZGV4IGU2NzIzMjlhZjhkZTM3OGJlZmRmYzE0ZjhhY2JkMGYyZWMw
Yzc0MDUuLjlmYTUwOWJiOTUxZDM4MDkxNDAwMDAxMWVlNWNlNjUxNGE5OGQ0NmIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGVja2VkUmFkaW9CdXR0b25zLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vQ2hlY2tlZFJhZGlvQnV0dG9ucy5jcHAKQEAgLTE4NSw3ICsxODUsNyBA
QCB2b2lkIENoZWNrZWRSYWRpb0J1dHRvbnM6OmFkZEJ1dHRvbihIVE1MSW5wdXRFbGVtZW50KiBl
bGVtZW50KQogICAgIGlmICghbV9uYW1lVG9Hcm91cE1hcCkKICAgICAgICAgbV9uYW1lVG9Hcm91
cE1hcCA9IGFkb3B0UHRyKG5ldyBOYW1lVG9Hcm91cE1hcCk7CiAKLSAgICBPd25QdHI8UmFkaW9C
dXR0b25Hcm91cD4mIGdyb3VwID0gbV9uYW1lVG9Hcm91cE1hcC0+YWRkKGVsZW1lbnQtPm5hbWUo
KS5pbXBsKCksIFBhc3NPd25QdHI8UmFkaW9CdXR0b25Hcm91cD4oKSkuaXRlcmF0b3ItPnNlY29u
ZDsKKyAgICBPd25QdHI8UmFkaW9CdXR0b25Hcm91cD4mIGdyb3VwID0gbV9uYW1lVG9Hcm91cE1h
cC0+YWRkKGVsZW1lbnQtPm5hbWUoKS5pbXBsKCksIFBhc3NPd25QdHI8UmFkaW9CdXR0b25Hcm91
cD4oKSkuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghZ3JvdXApCiAgICAgICAgIGdyb3VwID0g
UmFkaW9CdXR0b25Hcm91cDo6Y3JlYXRlKCk7CiAgICAgZ3JvdXAtPmFkZChlbGVtZW50KTsKQEAg
LTI0Niw4ICsyNDYsOCBAQCB2b2lkIENoZWNrZWRSYWRpb0J1dHRvbnM6OnJlbW92ZUJ1dHRvbihI
VE1MSW5wdXRFbGVtZW50KiBlbGVtZW50KQogICAgIE5hbWVUb0dyb3VwTWFwOjppdGVyYXRvciBp
dCA9IG1fbmFtZVRvR3JvdXBNYXAtPmZpbmQoZWxlbWVudC0+bmFtZSgpLmltcGwoKSk7CiAgICAg
aWYgKGl0ID09IG1fbmFtZVRvR3JvdXBNYXAtPmVuZCgpKQogICAgICAgICByZXR1cm47Ci0gICAg
aXQtPnNlY29uZC0+cmVtb3ZlKGVsZW1lbnQpOwotICAgIGlmIChpdC0+c2Vjb25kLT5pc0VtcHR5
KCkpIHsKKyAgICBpdC0+dmFsdWUtPnJlbW92ZShlbGVtZW50KTsKKyAgICBpZiAoaXQtPnZhbHVl
LT5pc0VtcHR5KCkpIHsKICAgICAgICAgLy8gRklYTUU6IFdlIG1heSBza2lwIGRlYWxsb2NhdGlu
ZyB0aGUgZW1wdHkgUmFkaW9CdXR0b25Hcm91cCBmb3IKICAgICAgICAgLy8gcGVyZm9ybWFuY2Ug
aW1wcm92ZW1lbnQuIElmIHdlIGRvIHNvLCB3ZSBuZWVkIHRvIGNoYW5nZSB0aGUga2V5IHR5cGUK
ICAgICAgICAgLy8gb2YgbV9uYW1lVG9Hcm91cE1hcCBmcm9tIEF0b21pY1N0cmluZ0ltcGwqIHRv
IFJlZlB0cjxBdG9taWNTdHJpbmdJbXBsPi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9DaGlsZExpc3RNdXRhdGlvblNjb3BlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZExp
c3RNdXRhdGlvblNjb3BlLmNwcAppbmRleCBjNWNiM2FkOWY2ZWFiNzhkODllNWQ2N2VhOWM0MzUy
MzIyOTdlMDdlLi41MzdkYTQxMmE1NWI4ODRiY2VmOWUxN2YwNGY5NDc1ZTA3NjNhMmEwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL0NoaWxkTGlzdE11dGF0aW9uU2NvcGUuY3BwCkBAIC0xOTMs
MjcgKzE5MywyNyBAQCB2b2lkIENoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11
bGF0aW9uUm91dGVyOjpjaGlsZEFkZGVkKE5vZGUqIHRhcmdldAogewogICAgIEhhc2hNYXA8Tm9k
ZSosIE93blB0cjxDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdG9yPiA+
OjppdGVyYXRvciBpdGVyID0gbV9hY2N1bXVsYXRpb25zLmZpbmQodGFyZ2V0KTsKICAgICBBU1NF
UlQoaXRlciAhPSBtX2FjY3VtdWxhdGlvbnMuZW5kKCkpOwotICAgIGlmIChpdGVyID09IG1fYWNj
dW11bGF0aW9ucy5lbmQoKSB8fCAhaXRlci0+c2Vjb25kKQorICAgIGlmIChpdGVyID09IG1fYWNj
dW11bGF0aW9ucy5lbmQoKSB8fCAhaXRlci0+dmFsdWUpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGl0ZXItPnNlY29uZC0+Y2hpbGRBZGRlZChjaGlsZCk7CisgICAgaXRlci0+dmFsdWUtPmNoaWxk
QWRkZWQoY2hpbGQpOwogfQogCiB2b2lkIENoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9u
QWNjdW11bGF0aW9uUm91dGVyOjp3aWxsUmVtb3ZlQ2hpbGQoTm9kZSogdGFyZ2V0LCBOb2RlKiBj
aGlsZCkKIHsKICAgICBIYXNoTWFwPE5vZGUqLCBPd25QdHI8Q2hpbGRMaXN0TXV0YXRpb25TY29w
ZTo6TXV0YXRpb25BY2N1bXVsYXRvcj4gPjo6aXRlcmF0b3IgaXRlciA9IG1fYWNjdW11bGF0aW9u
cy5maW5kKHRhcmdldCk7CiAgICAgQVNTRVJUKGl0ZXIgIT0gbV9hY2N1bXVsYXRpb25zLmVuZCgp
KTsKLSAgICBpZiAoaXRlciA9PSBtX2FjY3VtdWxhdGlvbnMuZW5kKCkgfHwgIWl0ZXItPnNlY29u
ZCkKKyAgICBpZiAoaXRlciA9PSBtX2FjY3VtdWxhdGlvbnMuZW5kKCkgfHwgIWl0ZXItPnZhbHVl
KQogICAgICAgICByZXR1cm47CiAKLSAgICBpdGVyLT5zZWNvbmQtPndpbGxSZW1vdmVDaGlsZChj
aGlsZCk7CisgICAgaXRlci0+dmFsdWUtPndpbGxSZW1vdmVDaGlsZChjaGlsZCk7CiB9CiAKIHZv
aWQgQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXI6Omlu
Y3JlbWVudFNjb3BpbmdMZXZlbChOb2RlKiB0YXJnZXQpCiB7CiAgICAgU2NvcGluZ0xldmVsTWFw
OjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9zY29waW5nTGV2ZWxzLmFkZCh0YXJnZXQsIDEpOwogICAg
IGlmICghcmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgKysocmVzdWx0Lml0ZXJhdG9yLT5z
ZWNvbmQpOworICAgICAgICArKyhyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIApAQCAtMjMwLDggKzIzMCw4IEBAIHZvaWQgQ2hpbGRMaXN0TXV0YXRpb25T
Y29wZTo6TXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXI6OmRlY3JlbWVudFNjb3BpbmdMZXZlbChO
CiAgICAgU2NvcGluZ0xldmVsTWFwOjppdGVyYXRvciBpdGVyID0gbV9zY29waW5nTGV2ZWxzLmZp
bmQodGFyZ2V0KTsKICAgICBBU1NFUlQoaXRlciAhPSBtX3Njb3BpbmdMZXZlbHMuZW5kKCkpOwog
Ci0gICAgLS0oaXRlci0+c2Vjb25kKTsKLSAgICBpZiAoaXRlci0+c2Vjb25kID4gMCkKKyAgICAt
LShpdGVyLT52YWx1ZSk7CisgICAgaWYgKGl0ZXItPnZhbHVlID4gMCkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgbV9zY29waW5nTGV2ZWxzLnJlbW92ZShpdGVyKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQu
Y3BwCmluZGV4IDg2N2E4ZDZhNzEyMGU0N2RlNjJkMWM5ZDE4MGVlYWY0OWI1NjJkODUuLjE0N2Yy
M2RkZjcwNDZjMGJmYjhjMDlmOTIzMDI3ODFkYTFjYmY0NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
LmNwcApAQCAtMjcyMyw3ICsyNzIzLDcgQEAgY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNo
ZWV0PiA+KiBEb2N1bWVudDo6cGFnZUdyb3VwVXNlclNoZWV0cygpIGNvbnN0CiAKICAgICBVc2Vy
U3R5bGVTaGVldE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gc2hlZXRzTWFwLT5lbmQoKTsKICAg
ICBmb3IgKFVzZXJTdHlsZVNoZWV0TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHNoZWV0c01hcC0+
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IFVzZXJTdHlsZVNoZWV0
VmVjdG9yKiBzaGVldHMgPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICBjb25zdCBVc2VyU3R5
bGVTaGVldFZlY3Rvciogc2hlZXRzID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgc2hlZXRzLT5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgY29u
c3QgVXNlclN0eWxlU2hlZXQqIHNoZWV0ID0gc2hlZXRzLT5hdChpKS5nZXQoKTsKICAgICAgICAg
ICAgIGlmIChzaGVldC0+aW5qZWN0ZWRGcmFtZXMoKSA9PSBJbmplY3RJblRvcEZyYW1lT25seSAm
JiBvd25lckVsZW1lbnQoKSkKQEAgLTQ1MTksNyArNDUxOSw3IEBAIEhUTUxBbGxDb2xsZWN0aW9u
KiBEb2N1bWVudDo6YWxsKCkKIAogSFRNTENvbGxlY3Rpb24qIERvY3VtZW50Ojp3aW5kb3dOYW1l
ZEl0ZW1zKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkKIHsKLSAgICBPd25QdHI8SFRNTE5hbWVD
b2xsZWN0aW9uPiYgY29sbGVjdGlvbiA9IG1fd2luZG93TmFtZWRJdGVtQ29sbGVjdGlvbnMuYWRk
KG5hbWUuaW1wbCgpLCBudWxscHRyKS5pdGVyYXRvci0+c2Vjb25kOworICAgIE93blB0cjxIVE1M
TmFtZUNvbGxlY3Rpb24+JiBjb2xsZWN0aW9uID0gbV93aW5kb3dOYW1lZEl0ZW1Db2xsZWN0aW9u
cy5hZGQobmFtZS5pbXBsKCksIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoIWNv
bGxlY3Rpb24pCiAgICAgICAgIGNvbGxlY3Rpb24gPSBIVE1MTmFtZUNvbGxlY3Rpb246OmNyZWF0
ZSh0aGlzLCBXaW5kb3dOYW1lZEl0ZW1zLCBuYW1lKTsKICAgICByZXR1cm4gY29sbGVjdGlvbi5n
ZXQoKTsKQEAgLTQ1MjcsNyArNDUyNyw3IEBAIEhUTUxDb2xsZWN0aW9uKiBEb2N1bWVudDo6d2lu
ZG93TmFtZWRJdGVtcyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpCiAKIEhUTUxDb2xsZWN0aW9u
KiBEb2N1bWVudDo6ZG9jdW1lbnROYW1lZEl0ZW1zKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkK
IHsKLSAgICBPd25QdHI8SFRNTE5hbWVDb2xsZWN0aW9uPiYgY29sbGVjdGlvbiA9IG1fZG9jdW1l
bnROYW1lZEl0ZW1Db2xsZWN0aW9ucy5hZGQobmFtZS5pbXBsKCksIG51bGxwdHIpLml0ZXJhdG9y
LT5zZWNvbmQ7CisgICAgT3duUHRyPEhUTUxOYW1lQ29sbGVjdGlvbj4mIGNvbGxlY3Rpb24gPSBt
X2RvY3VtZW50TmFtZWRJdGVtQ29sbGVjdGlvbnMuYWRkKG5hbWUuaW1wbCgpLCBudWxscHRyKS5p
dGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCFjb2xsZWN0aW9uKQogICAgICAgICBjb2xsZWN0aW9u
ID0gSFRNTE5hbWVDb2xsZWN0aW9uOjpjcmVhdGUodGhpcywgRG9jdW1lbnROYW1lZEl0ZW1zLCBu
YW1lKTsKICAgICByZXR1cm4gY29sbGVjdGlvbi5nZXQoKTsKQEAgLTQ2MjIsNyArNDYyMiw3IEBA
IHZvaWQgRG9jdW1lbnQ6OnNldFN0YXRlRm9yTmV3Rm9ybUVsZW1lbnRzKGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBzdGF0ZVZlY3RvcikKICAgICAgICAgRm9ybUVsZW1lbnRLZXkga2V5KGEuaW1wbCgp
LCBiLmltcGwoKSk7CiAgICAgICAgIEl0ZXJhdG9yIGl0ID0gbV9zdGF0ZUZvck5ld0Zvcm1FbGVt
ZW50cy5maW5kKGtleSk7CiAgICAgICAgIGlmIChpdCAhPSBtX3N0YXRlRm9yTmV3Rm9ybUVsZW1l
bnRzLmVuZCgpKQotICAgICAgICAgICAgaXQtPnNlY29uZC5hcHBlbmQoYyk7CisgICAgICAgICAg
ICBpdC0+dmFsdWUuYXBwZW5kKGMpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIFZlY3Rv
cjxTdHJpbmc+IHYoMSk7CiAgICAgICAgICAgICB2WzBdID0gYzsKQEAgLTQ2NDIsMTAgKzQ2NDIs
MTAgQEAgYm9vbCBEb2N1bWVudDo6dGFrZVN0YXRlRm9yRm9ybUVsZW1lbnQoQXRvbWljU3RyaW5n
SW1wbCogbmFtZSwgQXRvbWljU3RyaW5nSW1wbCoKICAgICBJdGVyYXRvciBpdCA9IG1fc3RhdGVG
b3JOZXdGb3JtRWxlbWVudHMuZmluZChGb3JtRWxlbWVudEtleShuYW1lLCB0eXBlKSk7CiAgICAg
aWYgKGl0ID09IG1fc3RhdGVGb3JOZXdGb3JtRWxlbWVudHMuZW5kKCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBBU1NFUlQoaXQtPnNlY29uZC5zaXplKCkpOwotICAgIHN0YXRlID0gaXQt
PnNlY29uZC5sYXN0KCk7Ci0gICAgaWYgKGl0LT5zZWNvbmQuc2l6ZSgpID4gMSkKLSAgICAgICAg
aXQtPnNlY29uZC5yZW1vdmVMYXN0KCk7CisgICAgQVNTRVJUKGl0LT52YWx1ZS5zaXplKCkpOwor
ICAgIHN0YXRlID0gaXQtPnZhbHVlLmxhc3QoKTsKKyAgICBpZiAoaXQtPnZhbHVlLnNpemUoKSA+
IDEpCisgICAgICAgIGl0LT52YWx1ZS5yZW1vdmVMYXN0KCk7CiAgICAgZWxzZQogICAgICAgICBt
X3N0YXRlRm9yTmV3Rm9ybUVsZW1lbnRzLnJlbW92ZShpdCk7CiAgICAgcmV0dXJuIHRydWU7CkBA
IC00OTIwLDcgKzQ5MjAsNyBAQCBDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBEb2N1bWVudDo6Z2V0
Q1NTQ2FudmFzQ29udGV4dChjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0CiAKIEhUTUxDYW52YXNF
bGVtZW50KiBEb2N1bWVudDo6Z2V0Q1NTQ2FudmFzRWxlbWVudChjb25zdCBTdHJpbmcmIG5hbWUp
CiB7Ci0gICAgUmVmUHRyPEhUTUxDYW52YXNFbGVtZW50PiYgZWxlbWVudCA9IG1fY3NzQ2FudmFz
RWxlbWVudHMuYWRkKG5hbWUsIDApLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgUmVmUHRyPEhUTUxD
YW52YXNFbGVtZW50PiYgZWxlbWVudCA9IG1fY3NzQ2FudmFzRWxlbWVudHMuYWRkKG5hbWUsIDAp
Lml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoIWVsZW1lbnQpCiAgICAgICAgIGVsZW1lbnQgPSBI
VE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlKHRoaXMpOwogICAgIHJldHVybiBlbGVtZW50LmdldCgp
OwpAQCAtNTcyNSwxMCArNTcyNSwxMCBAQCBQYXNzUmVmUHRyPE5vZGVMaXN0PiBEb2N1bWVudDo6
Z2V0SXRlbXMoY29uc3QgU3RyaW5nJiB0eXBlTmFtZXMpCiAKICAgICBOb2RlTGlzdHNOb2RlRGF0
YTo6TWljcm9EYXRhSXRlbUxpc3RDYWNoZTo6QWRkUmVzdWx0IHJlc3VsdCA9IG5vZGVMaXN0cy0+
bV9taWNyb0RhdGFJdGVtTGlzdENhY2hlLmFkZChsb2NhbFR5cGVOYW1lcywgMCk7CiAgICAgaWYg
KCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgcmV0dXJuIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+
KHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKKyAgICAgICAgcmV0dXJuIFBhc3NSZWZQdHI8Tm9k
ZUxpc3Q+KHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwogCiAgICAgUmVmUHRyPE1pY3JvRGF0YUl0
ZW1MaXN0PiBsaXN0ID0gTWljcm9EYXRhSXRlbUxpc3Q6OmNyZWF0ZSh0aGlzLCB0eXBlTmFtZXMp
OwotICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gbGlzdC5nZXQoKTsKKyAgICByZXN1bHQu
aXRlcmF0b3ItPnZhbHVlID0gbGlzdC5nZXQoKTsKICAgICByZXR1cm4gbGlzdC5yZWxlYXNlKCk7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRy
b2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5j
cHAKaW5kZXggYzI1MDIzZjJiOGYxODczYzQwZGE2YTdjODA0YzUzODBkMTYyZmY3MS4uZmJkM2Yx
OGY0MmFlNTIzZGEzZjRkYTc2ZTVhMDMwNmU5MDEyNjVhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAKQEAgLTMwMSw3ICszMDEsNyBAQCBE
b2N1bWVudE1hcmtlciogRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjptYXJrZXJDb250YWluaW5n
UG9pbnQoY29uc3QgTGF5b3V0UG9pbgogICAgIE1hcmtlck1hcDo6aXRlcmF0b3IgZW5kID0gbV9t
YXJrZXJzLmVuZCgpOwogICAgIGZvciAoTWFya2VyTWFwOjppdGVyYXRvciBub2RlSXRlcmF0b3Ig
PSBtX21hcmtlcnMuYmVnaW4oKTsgbm9kZUl0ZXJhdG9yICE9IGVuZDsgKytub2RlSXRlcmF0b3Ip
IHsKICAgICAgICAgLy8gaW5uZXIgbG9vcDsgcHJvY2VzcyBlYWNoIG1hcmtlciBpbiB0aGlzIG5v
ZGUKLSAgICAgICAgTWFya2VyTGlzdCogbGlzdCA9IG5vZGVJdGVyYXRvci0+c2Vjb25kOworICAg
ICAgICBNYXJrZXJMaXN0KiBsaXN0ID0gbm9kZUl0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgdW5z
aWduZWQgbWFya2VyQ291bnQgPSBsaXN0LT5zaXplKCk7CiAgICAgICAgIGZvciAodW5zaWduZWQg
bWFya2VySW5kZXggPSAwOyBtYXJrZXJJbmRleCA8IG1hcmtlckNvdW50OyArK21hcmtlckluZGV4
KSB7CiAgICAgICAgICAgICBSZW5kZXJlZERvY3VtZW50TWFya2VyJiBtYXJrZXIgPSBsaXN0LT5h
dChtYXJrZXJJbmRleCk7CkBAIC0zODksNyArMzg5LDcgQEAgVmVjdG9yPEludFJlY3Q+IERvY3Vt
ZW50TWFya2VyQ29udHJvbGxlcjo6cmVuZGVyZWRSZWN0c0Zvck1hcmtlcnMoRG9jdW1lbnRNYXJr
ZXIKICAgICBNYXJrZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fbWFya2Vycy5lbmQoKTsKICAgICBm
b3IgKE1hcmtlck1hcDo6aXRlcmF0b3Igbm9kZUl0ZXJhdG9yID0gbV9tYXJrZXJzLmJlZ2luKCk7
IG5vZGVJdGVyYXRvciAhPSBlbmQ7ICsrbm9kZUl0ZXJhdG9yKSB7CiAgICAgICAgIC8vIGlubmVy
IGxvb3A7IHByb2Nlc3MgZWFjaCBtYXJrZXIgaW4gdGhpcyBub2RlCi0gICAgICAgIE1hcmtlckxp
c3QqIGxpc3QgPSBub2RlSXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgTWFya2VyTGlzdCogbGlz
dCA9IG5vZGVJdGVyYXRvci0+dmFsdWU7CiAgICAgICAgIHVuc2lnbmVkIG1hcmtlckNvdW50ID0g
bGlzdC0+c2l6ZSgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIG1hcmtlckluZGV4ID0gMDsgbWFy
a2VySW5kZXggPCBtYXJrZXJDb3VudDsgKyttYXJrZXJJbmRleCkgewogICAgICAgICAgICAgY29u
c3QgUmVuZGVyZWREb2N1bWVudE1hcmtlciYgbWFya2VyID0gbGlzdC0+YXQobWFya2VySW5kZXgp
OwpAQCAtNDE2LDcgKzQxNiw3IEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW1v
dmVNYXJrZXJzKE5vZGUqIG5vZGUsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUCiAgICAgCiAgICAg
TWFya2VyTWFwOjppdGVyYXRvciBpdGVyYXRvciA9IG1fbWFya2Vycy5maW5kKG5vZGUpOwogICAg
IGlmIChpdGVyYXRvciAhPSBtX21hcmtlcnMuZW5kKCkpCi0gICAgICAgIHJlbW92ZU1hcmtlcnNG
cm9tTGlzdChub2RlLCBpdGVyYXRvci0+c2Vjb25kLCBtYXJrZXJUeXBlcyk7CisgICAgICAgIHJl
bW92ZU1hcmtlcnNGcm9tTGlzdChub2RlLCBpdGVyYXRvci0+dmFsdWUsIG1hcmtlclR5cGVzKTsK
IH0KIAogdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbW92ZU1hcmtlcnMoRG9jdW1l
bnRNYXJrZXI6Ok1hcmtlclR5cGVzIG1hcmtlclR5cGVzKQpAQCAtNDI5LDcgKzQyOSw3IEBAIHZv
aWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW1vdmVNYXJrZXJzKERvY3VtZW50TWFya2Vy
OjpNYXJrZXJUeXBlcyBtYXJrZXJUCiAgICAgTWFya2VyTWFwIG1hcmtlck1hcENvcHkgPSBtX21h
cmtlcnM7CiAgICAgTWFya2VyTWFwOjppdGVyYXRvciBlbmQgPSBtYXJrZXJNYXBDb3B5LmVuZCgp
OwogICAgIGZvciAoTWFya2VyTWFwOjppdGVyYXRvciBpID0gbWFya2VyTWFwQ29weS5iZWdpbigp
OyBpICE9IGVuZDsgKytpKQotICAgICAgICByZW1vdmVNYXJrZXJzRnJvbUxpc3QoaS0+Zmlyc3Qu
Z2V0KCksIGktPnNlY29uZCwgbWFya2VyVHlwZXMpOworICAgICAgICByZW1vdmVNYXJrZXJzRnJv
bUxpc3QoaS0+a2V5LmdldCgpLCBpLT52YWx1ZSwgbWFya2VyVHlwZXMpOwogICAgIG1fcG9zc2li
bHlFeGlzdGluZ01hcmtlclR5cGVzLnJlbW92ZShtYXJrZXJUeXBlcyk7CiB9CiAKQEAgLTQ4NSwx
MCArNDg1LDEwIEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZXBhaW50TWFya2Vy
cyhEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZXMgbWFya2VyCiAgICAgLy8gb3V0ZXIgbG9vcDog
cHJvY2VzcyBlYWNoIG1hcmtlcmVkIG5vZGUgaW4gdGhlIGRvY3VtZW50CiAgICAgTWFya2VyTWFw
OjppdGVyYXRvciBlbmQgPSBtX21hcmtlcnMuZW5kKCk7CiAgICAgZm9yIChNYXJrZXJNYXA6Oml0
ZXJhdG9yIGkgPSBtX21hcmtlcnMuYmVnaW4oKTsgaSAhPSBlbmQ7ICsraSkgewotICAgICAgICBO
b2RlKiBub2RlID0gaS0+Zmlyc3QuZ2V0KCk7CisgICAgICAgIE5vZGUqIG5vZGUgPSBpLT5rZXku
Z2V0KCk7CiAKICAgICAgICAgLy8gaW5uZXIgbG9vcDogcHJvY2VzcyBlYWNoIG1hcmtlciBpbiB0
aGUgY3VycmVudCBub2RlCi0gICAgICAgIE1hcmtlckxpc3QqIGxpc3QgPSBpLT5zZWNvbmQ7Cisg
ICAgICAgIE1hcmtlckxpc3QqIGxpc3QgPSBpLT52YWx1ZTsKICAgICAgICAgYm9vbCBub2RlTmVl
ZHNSZXBhaW50ID0gZmFsc2U7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpICE9IGxpc3Qt
PnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBEb2N1bWVudE1hcmtlciBtYXJrZXIgPSBsaXN0
LT5hdChpKTsKQEAgLTUxNiw3ICs1MTYsNyBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxl
cjo6aW52YWxpZGF0ZVJlbmRlcmVkUmVjdHNGb3JNYXJrZXJzSW5SZWN0KGNvbnN0IExheQogICAg
IGZvciAoTWFya2VyTWFwOjppdGVyYXRvciBpID0gbV9tYXJrZXJzLmJlZ2luKCk7IGkgIT0gZW5k
OyArK2kpIHsKIAogICAgICAgICAvLyBpbm5lciBsb29wOiBwcm9jZXNzIGVhY2ggcmVjdCBpbiB0
aGUgY3VycmVudCBub2RlCi0gICAgICAgIE1hcmtlckxpc3QqIGxpc3QgPSBpLT5zZWNvbmQ7Cisg
ICAgICAgIE1hcmtlckxpc3QqIGxpc3QgPSBpLT52YWx1ZTsKICAgICAgICAgZm9yIChzaXplX3Qg
bGlzdEluZGV4ID0gMDsgbGlzdEluZGV4IDwgbGlzdC0+c2l6ZSgpOyArK2xpc3RJbmRleCkKICAg
ICAgICAgICAgIGxpc3QtPmF0KGxpc3RJbmRleCkuaW52YWxpZGF0ZShyKTsKICAgICB9CkBAIC02
NjUsOSArNjY1LDkgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnNob3dNYXJrZXJz
KCkgY29uc3QKICAgICBmcHJpbnRmKHN0ZGVyciwgIiVkIG5vZGVzIGhhdmUgbWFya2VyczpcbiIs
IG1fbWFya2Vycy5zaXplKCkpOwogICAgIE1hcmtlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
bV9tYXJrZXJzLmVuZCgpOwogICAgIGZvciAoTWFya2VyTWFwOjpjb25zdF9pdGVyYXRvciBub2Rl
SXRlcmF0b3IgPSBtX21hcmtlcnMuYmVnaW4oKTsgbm9kZUl0ZXJhdG9yICE9IGVuZDsgKytub2Rl
SXRlcmF0b3IpIHsKLSAgICAgICAgTm9kZSogbm9kZSA9IG5vZGVJdGVyYXRvci0+Zmlyc3QuZ2V0
KCk7CisgICAgICAgIE5vZGUqIG5vZGUgPSBub2RlSXRlcmF0b3ItPmtleS5nZXQoKTsKICAgICAg
ICAgZnByaW50ZihzdGRlcnIsICIlcCIsIG5vZGUpOwotICAgICAgICBNYXJrZXJMaXN0KiBsaXN0
ID0gbm9kZUl0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgIE1hcmtlckxpc3QqIGxpc3QgPSBub2Rl
SXRlcmF0b3ItPnZhbHVlOwogICAgICAgICBmb3IgKHVuc2lnbmVkIG1hcmtlckluZGV4ID0gMDsg
bWFya2VySW5kZXggPCBsaXN0LT5zaXplKCk7ICsrbWFya2VySW5kZXgpIHsKICAgICAgICAgICAg
IGNvbnN0IERvY3VtZW50TWFya2VyJiBtYXJrZXIgPSBsaXN0LT5hdChtYXJrZXJJbmRleCk7CiAg
ICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAlZDpbJWQ6JWRdKCVkKSIsIG1hcmtlci50eXBl
KCksIG1hcmtlci5zdGFydE9mZnNldCgpLCBtYXJrZXIuZW5kT2Zmc2V0KCksIG1hcmtlci5hY3Rp
dmVNYXRjaCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE9yZGVy
ZWRNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50T3JkZXJlZE1hcC5jcHAKaW5k
ZXggMDgyYWEwNzQwYTcxY2NkZjUwZTFkNDJkMjNkMzE3ZTYzYWYyZjRkYS4uMTI5N2U1MTAyZmI0
ZTc5Y2UzZGIxMTIzNTcwMjFlM2RkMDU1NGE1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50T3JkZXJlZE1hcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50T3JkZXJlZE1hcC5jcHAKQEAgLTk4LDcgKzk4LDcgQEAgdm9pZCBEb2N1bWVudE9yZGVyZWRN
YXA6OnJlbW92ZShBdG9taWNTdHJpbmdJbXBsKiBrZXksIEVsZW1lbnQqIGVsZW1lbnQpCiAKICAg
ICBtX21hcC5jaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgTWFwOjppdGVyYXRvciBjYWNoZWRJdGVt
ID0gbV9tYXAuZmluZChrZXkpOwotICAgIGlmIChjYWNoZWRJdGVtICE9IG1fbWFwLmVuZCgpICYm
IGNhY2hlZEl0ZW0tPnNlY29uZCA9PSBlbGVtZW50KQorICAgIGlmIChjYWNoZWRJdGVtICE9IG1f
bWFwLmVuZCgpICYmIGNhY2hlZEl0ZW0tPnZhbHVlID09IGVsZW1lbnQpCiAgICAgICAgIG1fbWFw
LnJlbW92ZShjYWNoZWRJdGVtKTsKICAgICBlbHNlCiAgICAgICAgIG1fZHVwbGljYXRlQ291bnRz
LnJlbW92ZShrZXkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TGlzdGVu
ZXJNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TGlzdGVuZXJNYXAuY3BwCmluZGV4
IGMxZmQ0ZDdjOTU3YTY0YmZmNzg4ZjkwMWU2MWRlMDFjYTA5MjI3N2UuLmFmOGM0OGFlZGU1NTEz
NmY3NGZlMTg0NzgxZDA1MjhiNDFkN2NjYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9FdmVudExpc3RlbmVyTWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRMaXN0
ZW5lck1hcC5jcHAKQEAgLTEwMiw3ICsxMDIsNyBAQCBWZWN0b3I8QXRvbWljU3RyaW5nPiBFdmVu
dExpc3RlbmVyTWFwOjpldmVudFR5cGVzKCkgY29uc3QKICAgICAgICAgRXZlbnRMaXN0ZW5lckhh
c2hNYXA6Oml0ZXJhdG9yIGl0ID0gbV9oYXNoTWFwLT5iZWdpbigpOwogICAgICAgICBFdmVudExp
c3RlbmVySGFzaE1hcDo6aXRlcmF0b3IgZW5kID0gbV9oYXNoTWFwLT5lbmQoKTsKICAgICAgICAg
Zm9yICg7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIHR5cGVzLmFwcGVuZChpdC0+Zmly
c3QpOworICAgICAgICAgICAgdHlwZXMuYXBwZW5kKGl0LT5rZXkpOwogICAgIH0gZWxzZSBpZiAo
bV9zaW5nbGVFdmVudExpc3RlbmVyVmVjdG9yKQogICAgICAgICB0eXBlcy5hcHBlbmQobV9zaW5n
bGVFdmVudExpc3RlbmVyVHlwZSk7CiAKQEAgLTEzNiw5ICsxMzYsOSBAQCBib29sIEV2ZW50TGlz
dGVuZXJNYXA6OmFkZChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxF
dmVudExpc3RlbgogICAgIGlmIChtX2hhc2hNYXApIHsKICAgICAgICAgRXZlbnRMaXN0ZW5lckhh
c2hNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX2hhc2hNYXAtPmFkZChldmVudFR5cGUsIG51bGxw
dHIpOwogICAgICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgICAgICByZXN1bHQu
aXRlcmF0b3ItPnNlY29uZCA9IGFkb3B0UHRyKG5ldyBFdmVudExpc3RlbmVyVmVjdG9yKTsKKyAg
ICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBhZG9wdFB0cihuZXcgRXZlbnRMaXN0
ZW5lclZlY3Rvcik7CiAKLSAgICAgICAgcmV0dXJuIGFkZExpc3RlbmVyVG9WZWN0b3IocmVzdWx0
Lml0ZXJhdG9yLT5zZWNvbmQuZ2V0KCksIGxpc3RlbmVyLCB1c2VDYXB0dXJlKTsKKyAgICAgICAg
cmV0dXJuIGFkZExpc3RlbmVyVG9WZWN0b3IocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKSwg
bGlzdGVuZXIsIHVzZUNhcHR1cmUpOwogICAgIH0KIAogICAgIGlmICghbV9zaW5nbGVFdmVudExp
c3RlbmVyVmVjdG9yKSB7CkBAIC0xNzksOCArMTc5LDggQEAgYm9vbCBFdmVudExpc3RlbmVyTWFw
OjpyZW1vdmUoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIqIGxp
c3QKICAgICBpZiAoaXQgPT0gbV9oYXNoTWFwLT5lbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgYm9vbCB3YXNSZW1vdmVkID0gcmVtb3ZlTGlzdGVuZXJGcm9tVmVjdG9yKGl0LT5z
ZWNvbmQuZ2V0KCksIGxpc3RlbmVyLCB1c2VDYXB0dXJlLCBpbmRleE9mUmVtb3ZlZExpc3RlbmVy
KTsKLSAgICBpZiAoaXQtPnNlY29uZC0+aXNFbXB0eSgpKQorICAgIGJvb2wgd2FzUmVtb3ZlZCA9
IHJlbW92ZUxpc3RlbmVyRnJvbVZlY3RvcihpdC0+dmFsdWUuZ2V0KCksIGxpc3RlbmVyLCB1c2VD
YXB0dXJlLCBpbmRleE9mUmVtb3ZlZExpc3RlbmVyKTsKKyAgICBpZiAoaXQtPnZhbHVlLT5pc0Vt
cHR5KCkpCiAgICAgICAgIG1faGFzaE1hcC0+cmVtb3ZlKGl0KTsKICAgICByZXR1cm4gd2FzUmVt
b3ZlZDsKIH0KQEAgLTE5Myw3ICsxOTMsNyBAQCBFdmVudExpc3RlbmVyVmVjdG9yKiBFdmVudExp
c3RlbmVyTWFwOjpmaW5kKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKQogICAgICAgICBF
dmVudExpc3RlbmVySGFzaE1hcDo6aXRlcmF0b3IgaXQgPSBtX2hhc2hNYXAtPmZpbmQoZXZlbnRU
eXBlKTsKICAgICAgICAgaWYgKGl0ID09IG1faGFzaE1hcC0+ZW5kKCkpCiAgICAgICAgICAgICBy
ZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIHJldHVy
biBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgfQogCiAgICAgaWYgKG1fc2luZ2xlRXZlbnRMaXN0ZW5l
clR5cGUgPT0gZXZlbnRUeXBlKQpAQCAtMjI3LDcgKzIyNyw3IEBAIHZvaWQgRXZlbnRMaXN0ZW5l
ck1hcDo6cmVtb3ZlRmlyc3RFdmVudExpc3RlbmVyQ3JlYXRlZEZyb21NYXJrdXAoY29uc3QgQXRv
bWljU3RyCiAgICAgICAgIEV2ZW50TGlzdGVuZXJIYXNoTWFwOjppdGVyYXRvciByZXN1bHQgPSBt
X2hhc2hNYXAtPmZpbmQoZXZlbnRUeXBlKTsKICAgICAgICAgQVNTRVJUKHJlc3VsdCAhPSBtX2hh
c2hNYXAtPmVuZCgpKTsKIAotICAgICAgICBFdmVudExpc3RlbmVyVmVjdG9yKiBsaXN0ZW5lclZl
Y3RvciA9IHJlc3VsdC0+c2Vjb25kLmdldCgpOworICAgICAgICBFdmVudExpc3RlbmVyVmVjdG9y
KiBsaXN0ZW5lclZlY3RvciA9IHJlc3VsdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgIEFTU0VSVChs
aXN0ZW5lclZlY3Rvcik7CiAKICAgICAgICAgcmVtb3ZlRmlyc3RMaXN0ZW5lckNyZWF0ZWRGcm9t
TWFya3VwKGxpc3RlbmVyVmVjdG9yKTsKQEAgLTI2NSw3ICsyNjUsNyBAQCB2b2lkIEV2ZW50TGlz
dGVuZXJNYXA6OmNvcHlFdmVudExpc3RlbmVyc05vdENyZWF0ZWRGcm9tTWFya3VwVG9UYXJnZXQo
RXZlbnRUYXJnZQogICAgIGlmIChtX2hhc2hNYXApIHsKICAgICAgICAgRXZlbnRMaXN0ZW5lckhh
c2hNYXA6Oml0ZXJhdG9yIGVuZCA9IG1faGFzaE1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAoRXZl
bnRMaXN0ZW5lckhhc2hNYXA6Oml0ZXJhdG9yIGl0ID0gbV9oYXNoTWFwLT5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBjb3B5TGlzdGVuZXJzTm90Q3JlYXRlZEZyb21NYXJr
dXBUb1RhcmdldChpdC0+Zmlyc3QsIGl0LT5zZWNvbmQuZ2V0KCksIHRhcmdldCk7CisgICAgICAg
ICAgICBjb3B5TGlzdGVuZXJzTm90Q3JlYXRlZEZyb21NYXJrdXBUb1RhcmdldChpdC0+a2V5LCBp
dC0+dmFsdWUuZ2V0KCksIHRhcmdldCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTMy
NSw3ICszMjUsNyBAQCBFdmVudExpc3RlbmVyKiBFdmVudExpc3RlbmVySXRlcmF0b3I6Om5leHRM
aXN0ZW5lcigpCiAKICAgICBpZiAobV9tYXAtPm1faGFzaE1hcCkgewogICAgICAgICBmb3IgKDsg
bV9tYXBJdGVyYXRvciAhPSBtX21hcEVuZDsgKyttX21hcEl0ZXJhdG9yKSB7Ci0gICAgICAgICAg
ICBFdmVudExpc3RlbmVyVmVjdG9yJiBsaXN0ZW5lcnMgPSAqbV9tYXBJdGVyYXRvci0+c2Vjb25k
OworICAgICAgICAgICAgRXZlbnRMaXN0ZW5lclZlY3RvciYgbGlzdGVuZXJzID0gKm1fbWFwSXRl
cmF0b3ItPnZhbHVlOwogICAgICAgICAgICAgaWYgKG1faW5kZXggPCBsaXN0ZW5lcnMuc2l6ZSgp
KQogICAgICAgICAgICAgICAgIHJldHVybiBsaXN0ZW5lcnNbbV9pbmRleCsrXS5saXN0ZW5lci5n
ZXQoKTsKICAgICAgICAgICAgIG1faW5kZXggPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL011dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3VwLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9NdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cC5jcHAKaW5kZXggNjk5ODc1MmNkNWIw
MDkxZWFkOGJkYjBjMDFiOTU1NzhiNmU4YzVlNC4uOGE1OWFiYWZlNWNiZGZmNTNhM2I3N2YyYzJk
ODg5NzVlNjcwMWY3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uT2Jz
ZXJ2ZXJJbnRlcmVzdEdyb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25P
YnNlcnZlckludGVyZXN0R3JvdXAuY3BwCkBAIC02MSw3ICs2MSw3IEBAIE11dGF0aW9uT2JzZXJ2
ZXJJbnRlcmVzdEdyb3VwOjpNdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cChIYXNoTWFwPFdl
YktpdE11dGF0CiBib29sIE11dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3VwOjppc09sZFZhbHVl
UmVxdWVzdGVkKCkKIHsKICAgICBmb3IgKEhhc2hNYXA8V2ViS2l0TXV0YXRpb25PYnNlcnZlcios
IE11dGF0aW9uUmVjb3JkRGVsaXZlcnlPcHRpb25zPjo6aXRlcmF0b3IgaXRlciA9IG1fb2JzZXJ2
ZXJzLmJlZ2luKCk7IGl0ZXIgIT0gbV9vYnNlcnZlcnMuZW5kKCk7ICsraXRlcikgewotICAgICAg
ICBpZiAoaGFzT2xkVmFsdWUoaXRlci0+c2Vjb25kKSkKKyAgICAgICAgaWYgKGhhc09sZFZhbHVl
KGl0ZXItPnZhbHVlKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1
cm4gZmFsc2U7CkBAIC03Miw4ICs3Miw4IEBAIHZvaWQgTXV0YXRpb25PYnNlcnZlckludGVyZXN0
R3JvdXA6OmVucXVldWVNdXRhdGlvblJlY29yZChQYXNzUmVmUHRyPE11dGF0aW9uUmVjCiAgICAg
UmVmUHRyPE11dGF0aW9uUmVjb3JkPiBtdXRhdGlvbiA9IHBycE11dGF0aW9uOwogICAgIFJlZlB0
cjxNdXRhdGlvblJlY29yZD4gbXV0YXRpb25XaXRoTnVsbE9sZFZhbHVlOwogICAgIGZvciAoSGFz
aE1hcDxXZWJLaXRNdXRhdGlvbk9ic2VydmVyKiwgTXV0YXRpb25SZWNvcmREZWxpdmVyeU9wdGlv
bnM+OjppdGVyYXRvciBpdGVyID0gbV9vYnNlcnZlcnMuYmVnaW4oKTsgaXRlciAhPSBtX29ic2Vy
dmVycy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIqIG9i
c2VydmVyID0gaXRlci0+Zmlyc3Q7Ci0gICAgICAgIGlmIChoYXNPbGRWYWx1ZShpdGVyLT5zZWNv
bmQpKSB7CisgICAgICAgIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIqIG9ic2VydmVyID0gaXRlci0+
a2V5OworICAgICAgICBpZiAoaGFzT2xkVmFsdWUoaXRlci0+dmFsdWUpKSB7CiAgICAgICAgICAg
ICBvYnNlcnZlci0+ZW5xdWV1ZU11dGF0aW9uUmVjb3JkKG11dGF0aW9uKTsKICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9k
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKaW5kZXggMDQwNzUyN2IyMGQ5OTcw
ZjAwZDViMTI0N2E3OWI1ZWM1YWFhZGZhNS4uOTg5MTFmMTAxNTkyN2Y3ZjAxNGZkZDg3NmExMWVk
MDdlZmFmNTk2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcApAQCAtMTg3LDcgKzE4Nyw3IEBAIHZvaWQgTm9k
ZTo6ZHVtcFN0YXRpc3RpY3MoKQogICAgICAgICAgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBz
dGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSk7CiAgICAgICAgICAgICAgICAgSGFzaE1hcDxTdHJp
bmcsIHNpemVfdD46OkFkZFJlc3VsdCByZXN1bHQgPSBwZXJUYWdDb3VudC5hZGQoZWxlbWVudC0+
dGFnTmFtZSgpLCAxKTsKICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQot
ICAgICAgICAgICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCsrOworICAgICAgICAg
ICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlKys7CiAKICAgICAgICAgICAgICAgICBp
ZiAoRWxlbWVudEF0dHJpYnV0ZURhdGEqIGF0dHJpYnV0ZURhdGEgPSBlbGVtZW50LT5hdHRyaWJ1
dGVEYXRhKCkpIHsKICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcyArPSBhdHRyaWJ1dGVE
YXRhLT5sZW5ndGgoKTsKQEAgLTI3NSw3ICsyNzUsNyBAQCB2b2lkIE5vZGU6OmR1bXBTdGF0aXN0
aWNzKCkKIAogICAgIHByaW50ZigiRWxlbWVudCB0YWcgbmFtZSBkaXN0aWJ1dGlvbjpcbiIpOwog
ICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIHNpemVfdD46Oml0ZXJhdG9yIGl0ID0gcGVyVGFnQ291
bnQuYmVnaW4oKTsgaXQgIT0gcGVyVGFnQ291bnQuZW5kKCk7ICsraXQpCi0gICAgICAgIHByaW50
ZigiICBOdW1iZXIgb2YgPCVzPiB0YWdzOiAlenVcbiIsIGl0LT5maXJzdC51dGY4KCkuZGF0YSgp
LCBpdC0+c2Vjb25kKTsKKyAgICAgICAgcHJpbnRmKCIgIE51bWJlciBvZiA8JXM+IHRhZ3M6ICV6
dVxuIiwgaXQtPmtleS51dGY4KCkuZGF0YSgpLCBpdC0+dmFsdWUpOwogCiAgICAgcHJpbnRmKCJB
dHRyaWJ1dGVzOlxuIik7CiAgICAgcHJpbnRmKCIgIE51bWJlciBvZiBBdHRyaWJ1dGVzIChub24t
Tm9kZSBhbmQgTm9kZSk6ICV6dSBbJXp1XVxuIiwgYXR0cmlidXRlcywgc2l6ZW9mKEF0dHJpYnV0
ZSkpOwpAQCAtNDk2LDcgKzQ5Niw3IEBAIHZvaWQgTm9kZTo6Y2xlYXJSYXJlRGF0YSgpCiAgICAg
Tm9kZVJhcmVEYXRhOjpOb2RlUmFyZURhdGFNYXAmIGRhdGFNYXAgPSBOb2RlUmFyZURhdGE6OnJh
cmVEYXRhTWFwKCk7CiAgICAgTm9kZVJhcmVEYXRhOjpOb2RlUmFyZURhdGFNYXA6Oml0ZXJhdG9y
IGl0ID0gZGF0YU1hcC5maW5kKHRoaXMpOwogICAgIEFTU0VSVChpdCAhPSBkYXRhTWFwLmVuZCgp
KTsKLSAgICBkZWxldGUgaXQtPnNlY29uZDsKKyAgICBkZWxldGUgaXQtPnZhbHVlOwogICAgIGRh
dGFNYXAucmVtb3ZlKGl0KTsKICAgICBjbGVhckZsYWcoSGFzUmFyZURhdGFGbGFnKTsKIH0KQEAg
LTE2MTQsMTAgKzE2MTQsMTAgQEAgUGFzc1JlZlB0cjxOb2RlTGlzdD4gTm9kZTo6Z2V0RWxlbWVu
dHNCeVRhZ05hbWUoY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUpCiAKICAgICBOb2RlTGlz
dHNOb2RlRGF0YTo6VGFnTm9kZUxpc3RDYWNoZTo6QWRkUmVzdWx0IHJlc3VsdCA9IGVuc3VyZVJh
cmVEYXRhKCktPmVuc3VyZU5vZGVMaXN0cyh0aGlzKS0+bV90YWdOb2RlTGlzdENhY2hlLmFkZChs
b2NhbE5hbWVBdG9tLCAwKTsKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICBy
ZXR1cm4gUGFzc1JlZlB0cjxUYWdOb2RlTGlzdD4ocmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOwor
ICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxUYWdOb2RlTGlzdD4ocmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZSk7CiAKICAgICBSZWZQdHI8VGFnTm9kZUxpc3Q+IGxpc3QgPSBUYWdOb2RlTGlzdDo6Y3Jl
YXRlKHRoaXMsIHN0YXJBdG9tLCBsb2NhbE5hbWVBdG9tKTsKLSAgICByZXN1bHQuaXRlcmF0b3It
PnNlY29uZCA9IGxpc3QuZ2V0KCk7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGxpc3Qu
Z2V0KCk7CiAgICAgcmV0dXJuIGxpc3QucmVsZWFzZSgpOyAgIAogfQogCkBAIC0xNjM4LDEwICsx
NjM4LDEwIEBAIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IE5vZGU6OmdldEVsZW1lbnRzQnlUYWdOYW1l
TlMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVCiAgICAgTm9kZUxpc3RzTm9kZURhdGE6
OlRhZ05vZGVMaXN0Q2FjaGVOUzo6QWRkUmVzdWx0IHJlc3VsdAogICAgICAgICA9IGVuc3VyZVJh
cmVEYXRhKCktPmVuc3VyZU5vZGVMaXN0cyh0aGlzKS0+bV90YWdOb2RlTGlzdENhY2hlTlMuYWRk
KFF1YWxpZmllZE5hbWUobnVsbEF0b20sIGxvY2FsTmFtZUF0b20sIG5hbWVzcGFjZVVSSSkuaW1w
bCgpLCAwKTsKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXR1cm4gUGFz
c1JlZlB0cjxUYWdOb2RlTGlzdD4ocmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOworICAgICAgICBy
ZXR1cm4gUGFzc1JlZlB0cjxUYWdOb2RlTGlzdD4ocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CiAK
ICAgICBSZWZQdHI8VGFnTm9kZUxpc3Q+IGxpc3QgPSBUYWdOb2RlTGlzdDo6Y3JlYXRlKHRoaXMs
IG5hbWVzcGFjZVVSSS5pc0VtcHR5KCkgPyBudWxsQXRvbSA6IG5hbWVzcGFjZVVSSSwgbG9jYWxO
YW1lQXRvbSk7Ci0gICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBsaXN0LmdldCgpOworICAg
IHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBsaXN0LmdldCgpOwogICAgIHJldHVybiBsaXN0LnJl
bGVhc2UoKTsKIH0KIApAQCAtMTY0OSwxMCArMTY0OSwxMCBAQCBQYXNzUmVmUHRyPE5vZGVMaXN0
PiBOb2RlOjpnZXRFbGVtZW50c0J5TmFtZShjb25zdCBTdHJpbmcmIGVsZW1lbnROYW1lKQogewog
ICAgIE5vZGVMaXN0c05vZGVEYXRhOjpOYW1lTm9kZUxpc3RDYWNoZTo6QWRkUmVzdWx0IHJlc3Vs
dCA9IGVuc3VyZVJhcmVEYXRhKCktPmVuc3VyZU5vZGVMaXN0cyh0aGlzKS0+bV9uYW1lTm9kZUxp
c3RDYWNoZS5hZGQoZWxlbWVudE5hbWUsIDApOwogICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkp
Ci0gICAgICAgIHJldHVybiBQYXNzUmVmUHRyPE5vZGVMaXN0PihyZXN1bHQuaXRlcmF0b3ItPnNl
Y29uZCk7CisgICAgICAgIHJldHVybiBQYXNzUmVmUHRyPE5vZGVMaXN0PihyZXN1bHQuaXRlcmF0
b3ItPnZhbHVlKTsKIAogICAgIFJlZlB0cjxOYW1lTm9kZUxpc3Q+IGxpc3QgPSBOYW1lTm9kZUxp
c3Q6OmNyZWF0ZSh0aGlzLCBlbGVtZW50TmFtZSk7Ci0gICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNv
bmQgPSBsaXN0LmdldCgpOworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBsaXN0LmdldCgp
OwogICAgIHJldHVybiBsaXN0LnJlbGVhc2UoKTsKIH0KIApAQCAtMTY2MSwxMCArMTY2MSwxMCBA
QCBQYXNzUmVmUHRyPE5vZGVMaXN0PiBOb2RlOjpnZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNvbnN0
IFN0cmluZyYgY2xhc3NOYW1lcykKICAgICBOb2RlTGlzdHNOb2RlRGF0YTo6Q2xhc3NOb2RlTGlz
dENhY2hlOjpBZGRSZXN1bHQgcmVzdWx0CiAgICAgICAgID0gZW5zdXJlUmFyZURhdGEoKS0+ZW5z
dXJlTm9kZUxpc3RzKHRoaXMpLT5tX2NsYXNzTm9kZUxpc3RDYWNoZS5hZGQoY2xhc3NOYW1lcywg
MCk7CiAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgcmV0dXJuIFBhc3NSZWZQ
dHI8Tm9kZUxpc3Q+KHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKKyAgICAgICAgcmV0dXJuIFBh
c3NSZWZQdHI8Tm9kZUxpc3Q+KHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwogCiAgICAgUmVmUHRy
PENsYXNzTm9kZUxpc3Q+IGxpc3QgPSBDbGFzc05vZGVMaXN0OjpjcmVhdGUodGhpcywgY2xhc3NO
YW1lcyk7Ci0gICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBsaXN0LmdldCgpOworICAgIHJl
c3VsdC5pdGVyYXRvci0+dmFsdWUgPSBsaXN0LmdldCgpOwogICAgIHJldHVybiBsaXN0LnJlbGVh
c2UoKTsKIH0KIApAQCAtMjMwOCwxMCArMjMwOCwxMCBAQCB2b2lkIE5vZGVMaXN0c05vZGVEYXRh
OjppbnZhbGlkYXRlQ2FjaGVzKCkKIHsKICAgICBUYWdOb2RlTGlzdENhY2hlOjpjb25zdF9pdGVy
YXRvciB0YWdDYWNoZUVuZCA9IG1fdGFnTm9kZUxpc3RDYWNoZS5lbmQoKTsKICAgICBmb3IgKFRh
Z05vZGVMaXN0Q2FjaGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90YWdOb2RlTGlzdENhY2hlLmJl
Z2luKCk7IGl0ICE9IHRhZ0NhY2hlRW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5pbnZh
bGlkYXRlQ2FjaGUoKTsKKyAgICAgICAgaXQtPnZhbHVlLT5pbnZhbGlkYXRlQ2FjaGUoKTsKICAg
ICBUYWdOb2RlTGlzdENhY2hlTlM6OmNvbnN0X2l0ZXJhdG9yIHRhZ0NhY2hlTlNFbmQgPSBtX3Rh
Z05vZGVMaXN0Q2FjaGVOUy5lbmQoKTsKICAgICBmb3IgKFRhZ05vZGVMaXN0Q2FjaGVOUzo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtX3RhZ05vZGVMaXN0Q2FjaGVOUy5iZWdpbigpOyBpdCAhPSB0YWdD
YWNoZU5TRW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5pbnZhbGlkYXRlQ2FjaGUoKTsK
KyAgICAgICAgaXQtPnZhbHVlLT5pbnZhbGlkYXRlQ2FjaGUoKTsKICAgICBpbnZhbGlkYXRlQ2Fj
aGVzVGhhdERlcGVuZE9uQXR0cmlidXRlcygpOwogfQogCkBAIC0yMzI0LDE4ICsyMzI0LDE4IEBA
IHZvaWQgTm9kZUxpc3RzTm9kZURhdGE6OmludmFsaWRhdGVDYWNoZXNUaGF0RGVwZW5kT25BdHRy
aWJ1dGVzKCkKIAogICAgIENsYXNzTm9kZUxpc3RDYWNoZTo6aXRlcmF0b3IgY2xhc3NDYWNoZUVu
ZCA9IG1fY2xhc3NOb2RlTGlzdENhY2hlLmVuZCgpOwogICAgIGZvciAoQ2xhc3NOb2RlTGlzdENh
Y2hlOjppdGVyYXRvciBpdCA9IG1fY2xhc3NOb2RlTGlzdENhY2hlLmJlZ2luKCk7IGl0ICE9IGNs
YXNzQ2FjaGVFbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPmludmFsaWRhdGVDYWNoZSgp
OworICAgICAgICBpdC0+dmFsdWUtPmludmFsaWRhdGVDYWNoZSgpOwogCiAgICAgTmFtZU5vZGVM
aXN0Q2FjaGU6Oml0ZXJhdG9yIG5hbWVDYWNoZUVuZCA9IG1fbmFtZU5vZGVMaXN0Q2FjaGUuZW5k
KCk7CiAgICAgZm9yIChOYW1lTm9kZUxpc3RDYWNoZTo6aXRlcmF0b3IgaXQgPSBtX25hbWVOb2Rl
TGlzdENhY2hlLmJlZ2luKCk7IGl0ICE9IG5hbWVDYWNoZUVuZDsgKytpdCkKLSAgICAgICAgaXQt
PnNlY29uZC0+aW52YWxpZGF0ZUNhY2hlKCk7CisgICAgICAgIGl0LT52YWx1ZS0+aW52YWxpZGF0
ZUNhY2hlKCk7CiAgICAgaWYgKG1fbGFiZWxzTm9kZUxpc3RDYWNoZSkKICAgICAgICAgbV9sYWJl
bHNOb2RlTGlzdENhY2hlLT5pbnZhbGlkYXRlQ2FjaGUoKTsKIAogI2lmIEVOQUJMRShNSUNST0RB
VEEpCiAgICAgTWljcm9EYXRhSXRlbUxpc3RDYWNoZTo6aXRlcmF0b3IgaXRlbUxpc3RDYWNoZUVu
ZCA9IG1fbWljcm9EYXRhSXRlbUxpc3RDYWNoZS5lbmQoKTsKICAgICBmb3IgKE1pY3JvRGF0YUl0
ZW1MaXN0Q2FjaGU6Oml0ZXJhdG9yIGl0ID0gbV9taWNyb0RhdGFJdGVtTGlzdENhY2hlLmJlZ2lu
KCk7IGl0ICE9IGl0ZW1MaXN0Q2FjaGVFbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPmlu
dmFsaWRhdGVDYWNoZSgpOworICAgICAgICBpdC0+dmFsdWUtPmludmFsaWRhdGVDYWNoZSgpOwog
I2VuZGlmCiB9CiAKQEAgLTI1OTMsNyArMjU5Myw3IEBAIHZvaWQgTm9kZTo6Y29sbGVjdE1hdGNo
aW5nT2JzZXJ2ZXJzRm9yTXV0YXRpb24oSGFzaE1hcDxXZWJLaXRNdXRhdGlvbk9ic2VydmVyKiwK
ICAgICAgICAgICAgICAgICBNdXRhdGlvblJlY29yZERlbGl2ZXJ5T3B0aW9ucyBkZWxpdmVyeU9w
dGlvbnMgPSByZWdpc3RyYXRpb24tPmRlbGl2ZXJ5T3B0aW9ucygpOwogICAgICAgICAgICAgICAg
IEhhc2hNYXA8V2ViS2l0TXV0YXRpb25PYnNlcnZlciosIE11dGF0aW9uUmVjb3JkRGVsaXZlcnlP
cHRpb25zPjo6QWRkUmVzdWx0IHJlc3VsdCA9IG9ic2VydmVycy5hZGQocmVnaXN0cmF0aW9uLT5v
YnNlcnZlcigpLCBkZWxpdmVyeU9wdGlvbnMpOwogICAgICAgICAgICAgICAgIGlmICghcmVzdWx0
LmlzTmV3RW50cnkpCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25k
IHw9IGRlbGl2ZXJ5T3B0aW9uczsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZSB8PSBkZWxpdmVyeU9wdGlvbnM7CiAKICAgICAgICAgICAgIH0KICAgICAgICAgfQpA
QCAtMjYwNiw3ICsyNjA2LDcgQEAgdm9pZCBOb2RlOjpjb2xsZWN0TWF0Y2hpbmdPYnNlcnZlcnNG
b3JNdXRhdGlvbihIYXNoTWFwPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIqLAogICAgICAgICAgICAg
ICAgIE11dGF0aW9uUmVjb3JkRGVsaXZlcnlPcHRpb25zIGRlbGl2ZXJ5T3B0aW9ucyA9IHJlZ2lz
dHJhdGlvbi0+ZGVsaXZlcnlPcHRpb25zKCk7CiAgICAgICAgICAgICAgICAgSGFzaE1hcDxXZWJL
aXRNdXRhdGlvbk9ic2VydmVyKiwgTXV0YXRpb25SZWNvcmREZWxpdmVyeU9wdGlvbnM+OjpBZGRS
ZXN1bHQgcmVzdWx0ID0gb2JzZXJ2ZXJzLmFkZChyZWdpc3RyYXRpb24tPm9ic2VydmVyKCksIGRl
bGl2ZXJ5T3B0aW9ucyk7CiAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkK
LSAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgfD0gZGVsaXZlcnlP
cHRpb25zOworICAgICAgICAgICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlIHw9IGRl
bGl2ZXJ5T3B0aW9uczsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwIGIvU291cmNl
L1dlYkNvcmUvZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHAKaW5kZXggMDE4MDA0YmY1ZDFj
Y2MzYjNiMmU2ZDQ2NDlmZWY0YjdlZmM4MTgyMi4uNzIwMTkwMWMzY2U1Yzk4OTgyNmRiZDZjNDE2
NTk3M2Q1YWU4OTllYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1Byb2Nlc3NpbmdJ
bnN0cnVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1Byb2Nlc3NpbmdJbnN0cnVj
dGlvbi5jcHAKQEAgLTExNiw3ICsxMTYsNyBAQCB2b2lkIFByb2Nlc3NpbmdJbnN0cnVjdGlvbjo6
Y2hlY2tTdHlsZVNoZWV0KCkKICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0
X2l0ZXJhdG9yIGkgPSBhdHRycy5maW5kKCJ0eXBlIik7CiAgICAgICAgIFN0cmluZyB0eXBlOwog
ICAgICAgICBpZiAoaSAhPSBhdHRycy5lbmQoKSkKLSAgICAgICAgICAgIHR5cGUgPSBpLT5zZWNv
bmQ7CisgICAgICAgICAgICB0eXBlID0gaS0+dmFsdWU7CiAKICAgICAgICAgbV9pc0NTUyA9IHR5
cGUuaXNFbXB0eSgpIHx8IHR5cGUgPT0gInRleHQvY3NzIjsKICNpZiBFTkFCTEUoWFNMVCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcAppbmRleCA5MjQ0
NWNhODBkYWY2MzMyMzlkMmY3OWNlZTk4ZGQ5ZGQ0NDFiMzIzLi41MzViNTcwYjVkN2RlOWY0YWY5
MzU4M2U3YzcxZDEyYjJkNzUzNWE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQuY3BwCkBAIC0xNzMsOSArMTczLDkgQEAgYm9vbCBTY3JpcHRFeGVjdXRp
b25Db250ZXh0OjpjYW5TdXNwZW5kQWN0aXZlRE9NT2JqZWN0cygpCiAgICAgbV9pdGVyYXRpbmdB
Y3RpdmVET01PYmplY3RzID0gdHJ1ZTsKICAgICBIYXNoTWFwPEFjdGl2ZURPTU9iamVjdCosIHZv
aWQqPjo6aXRlcmF0b3IgYWN0aXZlT2JqZWN0c0VuZCA9IG1fYWN0aXZlRE9NT2JqZWN0cy5lbmQo
KTsKICAgICBmb3IgKEhhc2hNYXA8QWN0aXZlRE9NT2JqZWN0Kiwgdm9pZCo+OjppdGVyYXRvciBp
dGVyID0gbV9hY3RpdmVET01PYmplY3RzLmJlZ2luKCk7IGl0ZXIgIT0gYWN0aXZlT2JqZWN0c0Vu
ZDsgKytpdGVyKSB7Ci0gICAgICAgIEFTU0VSVChpdGVyLT5maXJzdC0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpID09IHRoaXMpOwotICAgICAgICBBU1NFUlQoaXRlci0+Zmlyc3QtPnN1c3BlbmRJ
Zk5lZWRlZENhbGxlZCgpKTsKLSAgICAgICAgaWYgKCFpdGVyLT5maXJzdC0+Y2FuU3VzcGVuZCgp
KSB7CisgICAgICAgIEFTU0VSVChpdGVyLT5rZXktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSA9
PSB0aGlzKTsKKyAgICAgICAgQVNTRVJUKGl0ZXItPmtleS0+c3VzcGVuZElmTmVlZGVkQ2FsbGVk
KCkpOworICAgICAgICBpZiAoIWl0ZXItPmtleS0+Y2FuU3VzcGVuZCgpKSB7CiAgICAgICAgICAg
ICBtX2l0ZXJhdGluZ0FjdGl2ZURPTU9iamVjdHMgPSBmYWxzZTsKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgfQpAQCAtMTkwLDkgKzE5MCw5IEBAIHZvaWQgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dDo6c3VzcGVuZEFjdGl2ZURPTU9iamVjdHMoQWN0aXZlRE9NT2JqZWN0OjpSZWFz
b25Gb3JTCiAgICAgbV9pdGVyYXRpbmdBY3RpdmVET01PYmplY3RzID0gdHJ1ZTsKICAgICBIYXNo
TWFwPEFjdGl2ZURPTU9iamVjdCosIHZvaWQqPjo6aXRlcmF0b3IgYWN0aXZlT2JqZWN0c0VuZCA9
IG1fYWN0aXZlRE9NT2JqZWN0cy5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8QWN0aXZlRE9NT2Jq
ZWN0Kiwgdm9pZCo+OjppdGVyYXRvciBpdGVyID0gbV9hY3RpdmVET01PYmplY3RzLmJlZ2luKCk7
IGl0ZXIgIT0gYWN0aXZlT2JqZWN0c0VuZDsgKytpdGVyKSB7Ci0gICAgICAgIEFTU0VSVChpdGVy
LT5maXJzdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpID09IHRoaXMpOwotICAgICAgICBBU1NF
UlQoaXRlci0+Zmlyc3QtPnN1c3BlbmRJZk5lZWRlZENhbGxlZCgpKTsKLSAgICAgICAgaXRlci0+
Zmlyc3QtPnN1c3BlbmQod2h5KTsKKyAgICAgICAgQVNTRVJUKGl0ZXItPmtleS0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpID09IHRoaXMpOworICAgICAgICBBU1NFUlQoaXRlci0+a2V5LT5zdXNw
ZW5kSWZOZWVkZWRDYWxsZWQoKSk7CisgICAgICAgIGl0ZXItPmtleS0+c3VzcGVuZCh3aHkpOwog
ICAgIH0KICAgICBtX2l0ZXJhdGluZ0FjdGl2ZURPTU9iamVjdHMgPSBmYWxzZTsKICAgICBtX2Fj
dGl2ZURPTU9iamVjdHNBcmVTdXNwZW5kZWQgPSB0cnVlOwpAQCAtMjA2LDkgKzIwNiw5IEBAIHZv
aWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6cmVzdW1lQWN0aXZlRE9NT2JqZWN0cygpCiAgICAg
bV9pdGVyYXRpbmdBY3RpdmVET01PYmplY3RzID0gdHJ1ZTsKICAgICBIYXNoTWFwPEFjdGl2ZURP
TU9iamVjdCosIHZvaWQqPjo6aXRlcmF0b3IgYWN0aXZlT2JqZWN0c0VuZCA9IG1fYWN0aXZlRE9N
T2JqZWN0cy5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8QWN0aXZlRE9NT2JqZWN0Kiwgdm9pZCo+
OjppdGVyYXRvciBpdGVyID0gbV9hY3RpdmVET01PYmplY3RzLmJlZ2luKCk7IGl0ZXIgIT0gYWN0
aXZlT2JqZWN0c0VuZDsgKytpdGVyKSB7Ci0gICAgICAgIEFTU0VSVChpdGVyLT5maXJzdC0+c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpID09IHRoaXMpOwotICAgICAgICBBU1NFUlQoaXRlci0+Zmly
c3QtPnN1c3BlbmRJZk5lZWRlZENhbGxlZCgpKTsKLSAgICAgICAgaXRlci0+Zmlyc3QtPnJlc3Vt
ZSgpOworICAgICAgICBBU1NFUlQoaXRlci0+a2V5LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkg
PT0gdGhpcyk7CisgICAgICAgIEFTU0VSVChpdGVyLT5rZXktPnN1c3BlbmRJZk5lZWRlZENhbGxl
ZCgpKTsKKyAgICAgICAgaXRlci0+a2V5LT5yZXN1bWUoKTsKICAgICB9CiAgICAgbV9pdGVyYXRp
bmdBY3RpdmVET01PYmplY3RzID0gZmFsc2U7CiB9CkBAIC0yMjAsOSArMjIwLDkgQEAgdm9pZCBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0OjpzdG9wQWN0aXZlRE9NT2JqZWN0cygpCiAgICAgbV9pdGVy
YXRpbmdBY3RpdmVET01PYmplY3RzID0gdHJ1ZTsKICAgICBIYXNoTWFwPEFjdGl2ZURPTU9iamVj
dCosIHZvaWQqPjo6aXRlcmF0b3IgYWN0aXZlT2JqZWN0c0VuZCA9IG1fYWN0aXZlRE9NT2JqZWN0
cy5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8QWN0aXZlRE9NT2JqZWN0Kiwgdm9pZCo+OjppdGVy
YXRvciBpdGVyID0gbV9hY3RpdmVET01PYmplY3RzLmJlZ2luKCk7IGl0ZXIgIT0gYWN0aXZlT2Jq
ZWN0c0VuZDsgKytpdGVyKSB7Ci0gICAgICAgIEFTU0VSVChpdGVyLT5maXJzdC0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpID09IHRoaXMpOwotICAgICAgICBBU1NFUlQoaXRlci0+Zmlyc3QtPnN1
c3BlbmRJZk5lZWRlZENhbGxlZCgpKTsKLSAgICAgICAgaXRlci0+Zmlyc3QtPnN0b3AoKTsKKyAg
ICAgICAgQVNTRVJUKGl0ZXItPmtleS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpID09IHRoaXMp
OworICAgICAgICBBU1NFUlQoaXRlci0+a2V5LT5zdXNwZW5kSWZOZWVkZWRDYWxsZWQoKSk7Cisg
ICAgICAgIGl0ZXItPmtleS0+c3RvcCgpOwogICAgIH0KICAgICBtX2l0ZXJhdGluZ0FjdGl2ZURP
TU9iamVjdHMgPSBmYWxzZTsKIApAQCAtMzgwLDcgKzM4MCw3IEBAIHZvaWQgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dDo6YWRqdXN0TWluaW11bVRpbWVySW50ZXJ2YWwoZG91YmxlIG9sZE1pbmltdW1U
aW1lckluCiB7CiAgICAgaWYgKG1pbmltdW1UaW1lckludGVydmFsKCkgIT0gb2xkTWluaW11bVRp
bWVySW50ZXJ2YWwpIHsKICAgICAgICAgZm9yIChUaW1lb3V0TWFwOjppdGVyYXRvciBpdGVyID0g
bV90aW1lb3V0cy5iZWdpbigpOyBpdGVyICE9IG1fdGltZW91dHMuZW5kKCk7ICsraXRlcikgewot
ICAgICAgICAgICAgRE9NVGltZXIqIHRpbWVyID0gaXRlci0+c2Vjb25kOworICAgICAgICAgICAg
RE9NVGltZXIqIHRpbWVyID0gaXRlci0+dmFsdWU7CiAgICAgICAgICAgICB0aW1lci0+YWRqdXN0
TWluaW11bVRpbWVySW50ZXJ2YWwob2xkTWluaW11bVRpbWVySW50ZXJ2YWwpOwogICAgICAgICB9
CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NwYWNlU3BsaXRTdHJpbmcu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1NwYWNlU3BsaXRTdHJpbmcuY3BwCmluZGV4IDljY2U3
ZDk1YjVlMTA0NDNjMDNlZGE1YjcyZjExMmM1NzA1MmU1MTIuLjFkYzFmYjBkZGUxZjAyM2YzZjhh
NjUzYjIzYWMzZDg3MzhlOGMzNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TcGFj
ZVNwbGl0U3RyaW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU3BhY2VTcGxpdFN0cmlu
Zy5jcHAKQEAgLTE1MCw3ICsxNTAsNyBAQCBTcGFjZVNwbGl0U3RyaW5nRGF0YTo6flNwYWNlU3Bs
aXRTdHJpbmdEYXRhKCkKIAogUGFzc1JlZlB0cjxTcGFjZVNwbGl0U3RyaW5nRGF0YT4gU3BhY2VT
cGxpdFN0cmluZ0RhdGE6OmNyZWF0ZShjb25zdCBBdG9taWNTdHJpbmcmIHN0cmluZykKIHsKLSAg
ICBTcGFjZVNwbGl0U3RyaW5nRGF0YSomIGRhdGEgPSBzaGFyZWREYXRhTWFwKCkuYWRkKHN0cmlu
ZywgMCkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBTcGFjZVNwbGl0U3RyaW5nRGF0YSomIGRhdGEg
PSBzaGFyZWREYXRhTWFwKCkuYWRkKHN0cmluZywgMCkuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlm
ICghZGF0YSkgewogICAgICAgICBkYXRhID0gbmV3IFNwYWNlU3BsaXRTdHJpbmdEYXRhKHN0cmlu
Zyk7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihkYXRhKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRF
bGVtZW50LmNwcAppbmRleCAyMjhhYTg2ZTM1YWE2MzEzODgwOGY5MGVjYzk2OWMyNmRhY2M0MDEz
Li40NWU4NGI5ZjBiOTRlMmI0ODU4ZjI3OTIxNmRkMWE3ZjkwYWU5OGU0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL1N0eWxlZEVsZW1lbnQuY3BwCkBAIC0yMzcsMTQgKzIzNywxNCBAQCB2b2lkIFN0eWxlZEVs
ZW1lbnQ6OnVwZGF0ZUF0dHJpYnV0ZVN0eWxlKCkKICAgICBQcmVzZW50YXRpb25BdHRyaWJ1dGVD
YWNoZTo6aXRlcmF0b3IgY2FjaGVJdGVyYXRvcjsKICAgICBpZiAoY2FjaGVIYXNoKSB7CiAgICAg
ICAgIGNhY2hlSXRlcmF0b3IgPSBwcmVzZW50YXRpb25BdHRyaWJ1dGVDYWNoZSgpLmFkZChjYWNo
ZUhhc2gsIG51bGxwdHIpLml0ZXJhdG9yOwotICAgICAgICBpZiAoY2FjaGVJdGVyYXRvci0+c2Vj
b25kICYmIGNhY2hlSXRlcmF0b3ItPnNlY29uZC0+a2V5ICE9IGNhY2hlS2V5KQorICAgICAgICBp
ZiAoY2FjaGVJdGVyYXRvci0+dmFsdWUgJiYgY2FjaGVJdGVyYXRvci0+dmFsdWUtPmtleSAhPSBj
YWNoZUtleSkKICAgICAgICAgICAgIGNhY2hlSGFzaCA9IDA7CiAgICAgfSBlbHNlCiAgICAgICAg
IGNhY2hlSXRlcmF0b3IgPSBwcmVzZW50YXRpb25BdHRyaWJ1dGVDYWNoZSgpLmVuZCgpOwogCiAg
ICAgUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IHN0eWxlOwotICAgIGlmIChjYWNoZUhhc2ggJiYg
Y2FjaGVJdGVyYXRvci0+c2Vjb25kKSAKLSAgICAgICAgc3R5bGUgPSBjYWNoZUl0ZXJhdG9yLT5z
ZWNvbmQtPnZhbHVlOworICAgIGlmIChjYWNoZUhhc2ggJiYgY2FjaGVJdGVyYXRvci0+dmFsdWUp
CisgICAgICAgIHN0eWxlID0gY2FjaGVJdGVyYXRvci0+dmFsdWUtPnZhbHVlOwogICAgIGVsc2Ug
ewogICAgICAgICBzdHlsZSA9IFN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZSgpOwogICAgICAgICB1
bnNpZ25lZCBzaXplID0gYXR0cmlidXRlQ291bnQoKTsKQEAgLTI2Miw3ICsyNjIsNyBAQCB2b2lk
IFN0eWxlZEVsZW1lbnQ6OnVwZGF0ZUF0dHJpYnV0ZVN0eWxlKCkKICAgICAgICAgYXR0cmlidXRl
RGF0YSgpLT5zZXRBdHRyaWJ1dGVTdHlsZShzdHlsZSk7CiAgICAgfQogCi0gICAgaWYgKCFjYWNo
ZUhhc2ggfHwgY2FjaGVJdGVyYXRvci0+c2Vjb25kKQorICAgIGlmICghY2FjaGVIYXNoIHx8IGNh
Y2hlSXRlcmF0b3ItPnZhbHVlKQogICAgICAgICByZXR1cm47CiAKICAgICBPd25QdHI8UHJlc2Vu
dGF0aW9uQXR0cmlidXRlQ2FjaGVFbnRyeT4gbmV3RW50cnkgPSBhZG9wdFB0cihuZXcgUHJlc2Vu
dGF0aW9uQXR0cmlidXRlQ2FjaGVFbnRyeSk7CkBAIC0yNzUsNyArMjc1LDcgQEAgdm9pZCBTdHls
ZWRFbGVtZW50Ojp1cGRhdGVBdHRyaWJ1dGVTdHlsZSgpCiAgICAgICAgIHByZXNlbnRhdGlvbkF0
dHJpYnV0ZUNhY2hlKCkuY2xlYXIoKTsKICAgICAgICAgcHJlc2VudGF0aW9uQXR0cmlidXRlQ2Fj
aGUoKS5zZXQoY2FjaGVIYXNoLCBuZXdFbnRyeS5yZWxlYXNlKCkpOwogICAgIH0gZWxzZQotICAg
ICAgICBjYWNoZUl0ZXJhdG9yLT5zZWNvbmQgPSBuZXdFbnRyeS5yZWxlYXNlKCk7CisgICAgICAg
IGNhY2hlSXRlcmF0b3ItPnZhbHVlID0gbmV3RW50cnkucmVsZWFzZSgpOwogfQogCiB2b2lkIFN0
eWxlZEVsZW1lbnQ6OmFkZFByb3BlcnR5VG9BdHRyaWJ1dGVTdHlsZShTdHlsZVByb3BlcnR5U2V0
KiBzdHlsZSwgaW50IHByb3BlcnR5SUQsIGludCBpZGVudGlmaWVyKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxDb2xsZWN0aW9uLmNwcAppbmRleCBjM2E3MTUzY2FlNDVhZDYwMWE4NWM4NTA5OWUzZjE1
MTg5OTcyN2M5Li43NGI5OGM2ZmI0MWU3OTA3NzkzNjc2YmUzMGE4NzYyMzljNTM4MjQyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmNwcApAQCAtMzU5LDcgKzM1OSw3IEBAIFBh
c3NSZWZQdHI8Tm9kZUxpc3Q+IEhUTUxDb2xsZWN0aW9uOjp0YWdzKGNvbnN0IFN0cmluZyYgbmFt
ZSkKIAogdm9pZCBIVE1MQ29sbGVjdGlvbjo6YXBwZW5kKE5vZGVDYWNoZU1hcCYgbWFwLCBjb25z
dCBBdG9taWNTdHJpbmcmIGtleSwgRWxlbWVudCogZWxlbWVudCkKIHsKLSAgICBPd25QdHI8VmVj
dG9yPEVsZW1lbnQqPiA+JiB2ZWN0b3IgPSBtYXAuYWRkKGtleS5pbXBsKCksIG51bGxwdHIpLml0
ZXJhdG9yLT5zZWNvbmQ7CisgICAgT3duUHRyPFZlY3RvcjxFbGVtZW50Kj4gPiYgdmVjdG9yID0g
bWFwLmFkZChrZXkuaW1wbCgpLCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCF2
ZWN0b3IpCiAgICAgICAgIHZlY3RvciA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8RWxlbWVudCo+KTsK
ICAgICB2ZWN0b3ItPmFwcGVuZChlbGVtZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5IGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKaW5kZXggMGVhZTk0N2Q0ZTdjMDYyY2E0
ZWNjNWRmYTM0OGY0OTMwOWI5YjUwZi4uOWNiN2VkYjA5M2FhN2ExMjk5MWU4NWJlMGMxZTcxNzM0
NTY4ZDRhYyAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0
b3JJbnNwZWN0b3IucHkKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0
b3JJbnNwZWN0b3IucHkKQEAgLTEyOTksNyArMTI5OSw3IEBAIGNsYXNzIFR5cGVCaW5kaW5nczoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVy
Lm5ld2xpbmUoIiAgICAgICAgSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciAlcztcbiIgJSBpdF9u
YW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93
cml0ZXIubmV3bGluZSgiICAgICAgICAlcyA9IG9iamVjdC0+ZmluZChcIiVzXCIpO1xuIiAlIChp
dF9uYW1lLCBwcm9wX2RhdGEucFsibmFtZSJdKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgQVNTRVJUKCVz
ICE9IG9iamVjdC0+ZW5kKCkpO1xuIiAlIGl0X25hbWUpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgICAgICVzKCVz
LT5zZWNvbmQuZ2V0KCkpO1xuIiAlIChwcm9wX2RhdGEucGFyYW1fdHlwZV9iaW5kaW5nLmdldF92
YWxpZGF0b3JfY2FsbF90ZXh0KCksIGl0X25hbWUpKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgICAgICAlcyglcy0+
dmFsdWUuZ2V0KCkpO1xuIiAlIChwcm9wX2RhdGEucGFyYW1fdHlwZV9iaW5kaW5nLmdldF92YWxp
ZGF0b3JfY2FsbF90ZXh0KCksIGl0X25hbWUpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgIH1cbiIpCiAKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgi
ICAgIGludCBmb3VuZFByb3BlcnRpZXNDb3VudCA9ICVzO1xuIiAlIGxlbihyZXNvbHZlX2RhdGEu
bWFpbl9wcm9wZXJ0aWVzKSkKQEAgLTEzMTAsNyArMTMxMCw3IEBAIGNsYXNzIFR5cGVCaW5kaW5n
czoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3Jp
dGVyLm5ld2xpbmUoIiAgICAgICAgSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciAlcztcbiIgJSBp
dF9uYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRv
cl93cml0ZXIubmV3bGluZSgiICAgICAgICAlcyA9IG9iamVjdC0+ZmluZChcIiVzXCIpO1xuIiAl
IChpdF9uYW1lLCBwcm9wX2RhdGEucFsibmFtZSJdKSkKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgaWYgKCVz
ICE9IG9iamVjdC0+ZW5kKCkpIHtcbiIgJSBpdF9uYW1lKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgICAgICAgICAg
JXMoJXMtPnNlY29uZC5nZXQoKSk7XG4iICUgKHByb3BfZGF0YS5wYXJhbV90eXBlX2JpbmRpbmcu
Z2V0X3ZhbGlkYXRvcl9jYWxsX3RleHQoKSwgaXRfbmFtZSkpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgICAgICAg
ICAlcyglcy0+dmFsdWUuZ2V0KCkpO1xuIiAlIChwcm9wX2RhdGEucGFyYW1fdHlwZV9iaW5kaW5n
LmdldF92YWxpZGF0b3JfY2FsbF90ZXh0KCksIGl0X25hbWUpKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgICAgICAg
ICAgKytmb3VuZFByb3BlcnRpZXNDb3VudDtcbiIpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgICAgIH1cbiIpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5u
ZXdsaW5lKCIgICAgfVxuIikKQEAgLTE5NzAsNyArMTk3MCw3IEBAICRtZXNzYWdlSGFuZGxlcnMK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgICgoKnRoaXMpLippdC0+c2Vjb25kKShjYWxs
SWQsIG1lc3NhZ2VPYmplY3QuZ2V0KCkpOworICAgICgoKnRoaXMpLippdC0+dmFsdWUpKGNhbGxJ
ZCwgbWVzc2FnZU9iamVjdC5nZXQoKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXJJbXBsOjpzZW5kUmVzcG9uc2UobG9uZyBjYWxsSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiByZXN1bHQsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBQYXNzUmVmUHRyPElu
c3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycywgRXJyb3JTdHJpbmcgaW52b2NhdGlvbkVycm9y
KQpAQCAtMjA1Myw3ICsyMDUzLDcgQEAgUiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6
OmdldFByb3BlcnR5VmFsdWVJbXBsKEluc3BlY3Rvck9iamVjdCogb2JqZWN0LAogICAgICAgICBy
ZXR1cm4gdmFsdWU7CiAgICAgfQogCi0gICAgaWYgKCFhc19tZXRob2QodmFsdWVJdGVyYXRvci0+
c2Vjb25kLmdldCgpLCAmdmFsdWUpKQorICAgIGlmICghYXNfbWV0aG9kKHZhbHVlSXRlcmF0b3It
PnZhbHVlLmdldCgpLCAmdmFsdWUpKQogICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmlu
ZyhTdHJpbmc6OmZvcm1hdCgiUGFyYW1ldGVyICclcycgaGFzIHdyb25nIHR5cGUuIEl0IG11c3Qg
YmUgJyVzJy4iLCBuYW1lLnV0ZjgoKS5kYXRhKCksIHR5cGVfbmFtZSkpOwogICAgIGVsc2UKICAg
ICAgICAgaWYgKHZhbHVlRm91bmQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01QYXRj
aFN1cHBvcnQuY3BwCmluZGV4IGQ3ZmNiOWFhYzA4ZTg4NTM2ODZjZmRkYjUxZmExZTEwZDI5OTQ5
Y2QuLjA3MTE1MzNiNzk3ZTA5OTUxMjk0N2IyMmM1YTQxN2NiZjdhNDgxNjAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01QYXRjaFN1cHBvcnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9ET01QYXRjaFN1cHBvcnQuY3BwCkBAIC0yMzQsMjQgKzIzNCwy
NCBAQCBET01QYXRjaFN1cHBvcnQ6OmRpZmYoY29uc3QgVmVjdG9yPE93blB0cjxEaWdlc3Q+ID4m
IG9sZExpc3QsIGNvbnN0IFZlY3RvcjxPd25QdAogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBuZXdMaXN0LnNpemUoKTsgKytpKSB7CiAgICAgICAgIERpZmZUYWJsZTo6aXRlcmF0b3IgaXQg
PSBuZXdUYWJsZS5hZGQobmV3TGlzdFtpXS0+bV9zaGExLCBWZWN0b3I8c2l6ZV90PigpKS5pdGVy
YXRvcjsKLSAgICAgICAgaXQtPnNlY29uZC5hcHBlbmQoaSk7CisgICAgICAgIGl0LT52YWx1ZS5h
cHBlbmQoaSk7CiAgICAgfQogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvbGRMaXN0LnNp
emUoKTsgKytpKSB7CiAgICAgICAgIERpZmZUYWJsZTo6aXRlcmF0b3IgaXQgPSBvbGRUYWJsZS5h
ZGQob2xkTGlzdFtpXS0+bV9zaGExLCBWZWN0b3I8c2l6ZV90PigpKS5pdGVyYXRvcjsKLSAgICAg
ICAgaXQtPnNlY29uZC5hcHBlbmQoaSk7CisgICAgICAgIGl0LT52YWx1ZS5hcHBlbmQoaSk7CiAg
ICAgfQogCiAgICAgZm9yIChEaWZmVGFibGU6Oml0ZXJhdG9yIG5ld0l0ID0gbmV3VGFibGUuYmVn
aW4oKTsgbmV3SXQgIT0gbmV3VGFibGUuZW5kKCk7ICsrbmV3SXQpIHsKLSAgICAgICAgaWYgKG5l
d0l0LT5zZWNvbmQuc2l6ZSgpICE9IDEpCisgICAgICAgIGlmIChuZXdJdC0+dmFsdWUuc2l6ZSgp
ICE9IDEpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBEaWZmVGFibGU6Oml0ZXJh
dG9yIG9sZEl0ID0gb2xkVGFibGUuZmluZChuZXdJdC0+Zmlyc3QpOwotICAgICAgICBpZiAob2xk
SXQgPT0gb2xkVGFibGUuZW5kKCkgfHwgb2xkSXQtPnNlY29uZC5zaXplKCkgIT0gMSkKKyAgICAg
ICAgRGlmZlRhYmxlOjppdGVyYXRvciBvbGRJdCA9IG9sZFRhYmxlLmZpbmQobmV3SXQtPmtleSk7
CisgICAgICAgIGlmIChvbGRJdCA9PSBvbGRUYWJsZS5lbmQoKSB8fCBvbGRJdC0+dmFsdWUuc2l6
ZSgpICE9IDEpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBuZXdNYXBbbmV3SXQt
PnNlY29uZFswXV0gPSBtYWtlX3BhaXIobmV3TGlzdFtuZXdJdC0+c2Vjb25kWzBdXS5nZXQoKSwg
b2xkSXQtPnNlY29uZFswXSk7Ci0gICAgICAgIG9sZE1hcFtvbGRJdC0+c2Vjb25kWzBdXSA9IG1h
a2VfcGFpcihvbGRMaXN0W29sZEl0LT5zZWNvbmRbMF1dLmdldCgpLCBuZXdJdC0+c2Vjb25kWzBd
KTsKKyAgICAgICAgbmV3TWFwW25ld0l0LT52YWx1ZVswXV0gPSBtYWtlX3BhaXIobmV3TGlzdFtu
ZXdJdC0+dmFsdWVbMF1dLmdldCgpLCBvbGRJdC0+dmFsdWVbMF0pOworICAgICAgICBvbGRNYXBb
b2xkSXQtPnZhbHVlWzBdXSA9IG1ha2VfcGFpcihvbGRMaXN0W29sZEl0LT52YWx1ZVswXV0uZ2V0
KCksIG5ld0l0LT52YWx1ZVswXSk7CiAgICAgfQogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IG5l
d0xpc3Quc2l6ZSgpID4gMCAmJiBpIDwgbmV3TGlzdC5zaXplKCkgLSAxOyArK2kpIHsKQEAgLTM2
MSw3ICszNjEsNyBAQCBib29sIERPTVBhdGNoU3VwcG9ydDo6aW5uZXJQYXRjaENoaWxkcmVuKENv
bnRhaW5lck5vZGUqIHBhcmVudE5vZGUsIGNvbnN0IFZlY3RvcgogCiAgICAgLy8gMi4gUGF0Y2gg
bm9kZXMgbWFya2VkIGZvciBtZXJnZS4KICAgICBmb3IgKEhhc2hNYXA8RGlnZXN0KiwgRGlnZXN0
Kj46Oml0ZXJhdG9yIGl0ID0gbWVyZ2VzLmJlZ2luKCk7IGl0ICE9IG1lcmdlcy5lbmQoKTsgKytp
dCkgewotICAgICAgICBpZiAoIWlubmVyUGF0Y2hOb2RlKGl0LT5zZWNvbmQsIGl0LT5maXJzdCwg
ZWMpKQorICAgICAgICBpZiAoIWlubmVyUGF0Y2hOb2RlKGl0LT52YWx1ZSwgaXQtPmtleSwgZWMp
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtNDYwLDcgKzQ2MCw3IEBA
IGJvb2wgRE9NUGF0Y2hTdXBwb3J0OjpyZW1vdmVDaGlsZEFuZE1vdmVUb05ldyhEaWdlc3QqIG9s
ZERpZ2VzdCwgRXhjZXB0aW9uQ29kZSYKICAgICAvLyBoaWdoIHRoYXQgaXQgd2lsbCBnZXQgbWVy
Z2VkIGJhY2sgaW50byB0aGUgb3JpZ2luYWwgRE9NIGR1cmluZyB0aGUgZnVydGhlciBwYXRjaGlu
Zy4KICAgICBVbnVzZWROb2Rlc01hcDo6aXRlcmF0b3IgaXQgPSBtX3VudXNlZE5vZGVzTWFwLmZp
bmQob2xkRGlnZXN0LT5tX3NoYTEpOwogICAgIGlmIChpdCAhPSBtX3VudXNlZE5vZGVzTWFwLmVu
ZCgpKSB7Ci0gICAgICAgIERpZ2VzdCogbmV3RGlnZXN0ID0gaXQtPnNlY29uZDsKKyAgICAgICAg
RGlnZXN0KiBuZXdEaWdlc3QgPSBpdC0+dmFsdWU7CiAgICAgICAgIE5vZGUqIG5ld05vZGUgPSBu
ZXdEaWdlc3QtPm1fbm9kZTsKICAgICAgICAgaWYgKCFtX2RvbUVkaXRvci0+cmVwbGFjZUNoaWxk
KG5ld05vZGUtPnBhcmVudE5vZGUoKSwgb2xkTm9kZSwgbmV3Tm9kZSwgZWMpKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
amVjdGVkU2NyaXB0TWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0
ZWRTY3JpcHRNYW5hZ2VyLmNwcAppbmRleCA2MDUxNzEzNWQ4NTlhOTNhYzZjZTRhMzFiZTZjY2M1
MDU2MjJiZDJlLi43M2EzZTEzODVhODM5Y2ZiMTUyOWE3NGY3ZDNhNzczNDI4ZTFiNGUxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNw
cApAQCAtOTgsNyArOTgsNyBAQCB2b2lkIEluamVjdGVkU2NyaXB0TWFuYWdlcjo6ZGlzY2FyZElu
amVjdGVkU2NyaXB0cygpCiB7CiAgICAgSWRUb0luamVjdGVkU2NyaXB0TWFwOjppdGVyYXRvciBl
bmQgPSBtX2lkVG9JbmplY3RlZFNjcmlwdC5lbmQoKTsKICAgICBmb3IgKElkVG9JbmplY3RlZFNj
cmlwdE1hcDo6aXRlcmF0b3IgaXQgPSBtX2lkVG9JbmplY3RlZFNjcmlwdC5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCi0gICAgICAgIGRpc2NhcmRJbmplY3RlZFNjcmlwdChpdC0+c2Vjb25kLnNj
cmlwdFN0YXRlKCkpOworICAgICAgICBkaXNjYXJkSW5qZWN0ZWRTY3JpcHQoaXQtPnZhbHVlLnNj
cmlwdFN0YXRlKCkpOwogICAgIG1faWRUb0luamVjdGVkU2NyaXB0LmNsZWFyKCk7CiB9CiAKQEAg
LTEwNywxMSArMTA3LDExIEBAIHZvaWQgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjpkaXNjYXJkSW5q
ZWN0ZWRTY3JpcHRzRm9yKERPTVdpbmRvdyogd2luZG93KQogICAgIFZlY3Rvcjxsb25nPiBpZHNU
b1JlbW92ZTsKICAgICBJZFRvSW5qZWN0ZWRTY3JpcHRNYXA6Oml0ZXJhdG9yIGVuZCA9IG1faWRU
b0luamVjdGVkU2NyaXB0LmVuZCgpOwogICAgIGZvciAoSWRUb0luamVjdGVkU2NyaXB0TWFwOjpp
dGVyYXRvciBpdCA9IG1faWRUb0luamVjdGVkU2NyaXB0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgewotICAgICAgICBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUgPSBpdC0+c2Vjb25kLnNjcmlw
dFN0YXRlKCk7CisgICAgICAgIFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSA9IGl0LT52YWx1ZS5z
Y3JpcHRTdGF0ZSgpOwogICAgICAgICBpZiAod2luZG93ICE9IGRvbVdpbmRvd0Zyb21TY3JpcHRT
dGF0ZShzY3JpcHRTdGF0ZSkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgZGlzY2Fy
ZEluamVjdGVkU2NyaXB0KHNjcmlwdFN0YXRlKTsKLSAgICAgICAgaWRzVG9SZW1vdmUuYXBwZW5k
KGl0LT5maXJzdCk7CisgICAgICAgIGlkc1RvUmVtb3ZlLmFwcGVuZChpdC0+a2V5KTsKICAgICB9
CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGlkc1RvUmVtb3ZlLnNpemUoKTsgaSsrKQpA
QCAtMTI2LDcgKzEyNiw3IEBAIGJvb2wgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjpjYW5BY2Nlc3NJ
bnNwZWN0ZWRXb3JrZXJDb250ZXh0KFNjcmlwdFN0YXRlKikKIHZvaWQgSW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyOjpyZWxlYXNlT2JqZWN0R3JvdXAoY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCkKIHsK
ICAgICBmb3IgKElkVG9JbmplY3RlZFNjcmlwdE1hcDo6aXRlcmF0b3IgaXQgPSBtX2lkVG9Jbmpl
Y3RlZFNjcmlwdC5iZWdpbigpOyBpdCAhPSBtX2lkVG9JbmplY3RlZFNjcmlwdC5lbmQoKTsgKytp
dCkKLSAgICAgICAgaXQtPnNlY29uZC5yZWxlYXNlT2JqZWN0R3JvdXAob2JqZWN0R3JvdXApOwor
ICAgICAgICBpdC0+dmFsdWUucmVsZWFzZU9iamVjdEdyb3VwKG9iamVjdEdyb3VwKTsKIH0KIAog
U3RyaW5nIEluamVjdGVkU2NyaXB0TWFuYWdlcjo6aW5qZWN0ZWRTY3JpcHRTb3VyY2UoKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5jcHAKaW5kZXggMTIzN2JlMDc1
MjlhNWU0ZTA3ODEwMGRmZmM0MmRjZTFkODU3YTZmNC4uYmI1Nzc2NGFiZDRkMzA3NjJlODcxOGZi
OWEzOGYzYjE2MDkwY2RlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
QWdlbnQuY3BwCkBAIC0xMzEsNyArMTMxLDcgQEAgdm9pZCBJbnNwZWN0b3JBZ2VudDo6ZW5hYmxl
KEVycm9yU3RyaW5nKikKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikgJiYgRU5BQkxF
KFdPUktFUlMpCiAgICAgV29ya2Vyc01hcDo6aXRlcmF0b3Igd29ya2Vyc0VuZCA9IG1fd29ya2Vy
cy5lbmQoKTsKICAgICBmb3IgKFdvcmtlcnNNYXA6Oml0ZXJhdG9yIGl0ID0gbV93b3JrZXJzLmJl
Z2luKCk7IGl0ICE9IHdvcmtlcnNFbmQ7ICsraXQpIHsKLSAgICAgICAgSW5zcGVjdG9yV29ya2Vy
UmVzb3VyY2UqIHdvcmtlciA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIEluc3BlY3Rvcldv
cmtlclJlc291cmNlKiB3b3JrZXIgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgIG1fZnJvbnRl
bmQtPmluc3BlY3RvcigpLT5kaWRDcmVhdGVXb3JrZXIod29ya2VyLT5pZCgpLCB3b3JrZXItPnVy
bCgpLCB3b3JrZXItPmlzU2hhcmVkV29ya2VyKCkpOwogICAgIH0KICNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKaW5kZXggMDY0Yjg2MmM5
MGI3NTVlOWY4M2IyYTBmN2NhODFlNDFmMTU0MTg5Ny4uZWQ5MzkwNWUxMWYxZTJlYTBiYmNkZWEx
NTRkNDhiYWI0N2JjYmUwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNTU0FnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQ1NTQWdlbnQuY3BwCkBAIC0xODMsMTAgKzE4MywxMCBAQCBpbmxpbmUgdm9pZCBTZWxlY3Rv
clByb2ZpbGU6OmNvbW1pdFNlbGVjdG9yKGJvb2wgbWF0Y2hlZCkKIAogICAgIFJ1bGVNYXRjaGlu
Z1N0YXRzTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9ydWxlTWF0Y2hpbmdTdGF0cy5hZGQobWFr
ZUtleSgpLCBSdWxlTWF0Y2hpbmdTdGF0cyhtX2N1cnJlbnRNYXRjaERhdGEsIG1hdGNoVGltZU1z
LCAxLCBtYXRjaGVkID8gMSA6IDApKTsKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KSB7Ci0g
ICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLnRvdGFsVGltZSArPSBtYXRjaFRpbWVNczsK
LSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQuaGl0cyArPSAxOworICAgICAgICByZXN1
bHQuaXRlcmF0b3ItPnZhbHVlLnRvdGFsVGltZSArPSBtYXRjaFRpbWVNczsKKyAgICAgICAgcmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZS5oaXRzICs9IDE7CiAgICAgICAgIGlmIChtYXRjaGVkKQotICAg
ICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQubWF0Y2hlcyArPSAxOworICAgICAgICAg
ICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5tYXRjaGVzICs9IDE7CiAgICAgfQogfQogCkBAIC0x
OTksNyArMTk5LDcgQEAgaW5saW5lIHZvaWQgU2VsZWN0b3JQcm9maWxlOjpjb21taXRTZWxlY3Rv
clRpbWUoKQogICAgIGlmIChpdCA9PSBtX3J1bGVNYXRjaGluZ1N0YXRzLmVuZCgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBpdC0+c2Vjb25kLnRvdGFsVGltZSArPSBwcm9jZXNzaW5nVGltZU1z
OworICAgIGl0LT52YWx1ZS50b3RhbFRpbWUgKz0gcHJvY2Vzc2luZ1RpbWVNczsKIH0KIAogUGFz
c1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpTZWxlY3RvclByb2ZpbGU+IFNlbGVjdG9yUHJvZmls
ZTo6dG9JbnNwZWN0b3JPYmplY3QoKSBjb25zdApAQCAtMjA3LDEyICsyMDcsMTIgQEAgUGFzc1Jl
ZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpTZWxlY3RvclByb2ZpbGU+IFNlbGVjdG9yUHJvZmlsZTo6
dG9JbnNwZWN0b3JPYmplY3QKICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWls
ZGVyOjpDU1M6OlNlbGVjdG9yUHJvZmlsZUVudHJ5PiA+IHNlbGVjdG9yUHJvZmlsZURhdGEgPSBU
eXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkNTUzo6U2VsZWN0b3JQcm9maWxlRW50cnk+
OjpjcmVhdGUoKTsKICAgICBmb3IgKFJ1bGVNYXRjaGluZ1N0YXRzTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fcnVsZU1hdGNoaW5nU3RhdHMuYmVnaW4oKTsgaXQgIT0gbV9ydWxlTWF0Y2hpbmdT
dGF0cy5lbmQoKTsgKytpdCkgewogICAgICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6U2Vs
ZWN0b3JQcm9maWxlRW50cnk+IGVudHJ5ID0gVHlwZUJ1aWxkZXI6OkNTUzo6U2VsZWN0b3JQcm9m
aWxlRW50cnk6OmNyZWF0ZSgpCi0gICAgICAgICAgICAuc2V0U2VsZWN0b3IoaXQtPnNlY29uZC5z
ZWxlY3RvcikKLSAgICAgICAgICAgIC5zZXRVcmwoaXQtPnNlY29uZC51cmwpCi0gICAgICAgICAg
ICAuc2V0TGluZU51bWJlcihpdC0+c2Vjb25kLmxpbmVOdW1iZXIpCi0gICAgICAgICAgICAuc2V0
VGltZShpdC0+c2Vjb25kLnRvdGFsVGltZSkKLSAgICAgICAgICAgIC5zZXRIaXRDb3VudChpdC0+
c2Vjb25kLmhpdHMpCi0gICAgICAgICAgICAuc2V0TWF0Y2hDb3VudChpdC0+c2Vjb25kLm1hdGNo
ZXMpOworICAgICAgICAgICAgLnNldFNlbGVjdG9yKGl0LT52YWx1ZS5zZWxlY3RvcikKKyAgICAg
ICAgICAgIC5zZXRVcmwoaXQtPnZhbHVlLnVybCkKKyAgICAgICAgICAgIC5zZXRMaW5lTnVtYmVy
KGl0LT52YWx1ZS5saW5lTnVtYmVyKQorICAgICAgICAgICAgLnNldFRpbWUoaXQtPnZhbHVlLnRv
dGFsVGltZSkKKyAgICAgICAgICAgIC5zZXRIaXRDb3VudChpdC0+dmFsdWUuaGl0cykKKyAgICAg
ICAgICAgIC5zZXRNYXRjaENvdW50KGl0LT52YWx1ZS5tYXRjaGVzKTsKICAgICAgICAgc2VsZWN0
b3JQcm9maWxlRGF0YS0+YWRkSXRlbShlbnRyeS5yZWxlYXNlKCkpOwogICAgIH0KIApAQCAtODMy
LDcgKzgzMiw3IEBAIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZSogSW5zcGVjdG9y
Q1NTQWdlbnQ6OmFzSW5zcGVjdG9yU3R5bGVTaGVldChFbGVtCiAgICAgICAgIHJldHVybiBpbnNw
ZWN0b3JTdHlsZVNoZWV0LmdldCgpOwogICAgIH0KIAotICAgIHJldHVybiBpdC0+c2Vjb25kLmdl
dCgpOworICAgIHJldHVybiBpdC0+dmFsdWUuZ2V0KCk7CiB9CiAKIEVsZW1lbnQqIEluc3BlY3Rv
ckNTU0FnZW50OjplbGVtZW50Rm9ySWQoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBpbnQgbm9k
ZUlkKQpAQCAtOTI2LDcgKzkyNiw3IEBAIEluc3BlY3RvclN0eWxlU2hlZXQqIEluc3BlY3RvckNT
U0FnZW50Ojphc3NlcnRTdHlsZVNoZWV0Rm9ySWQoRXJyb3JTdHJpbmcqIGVycm9yCiAgICAgICAg
ICplcnJvclN0cmluZyA9ICJObyBzdHlsZSBzaGVldCB3aXRoIGdpdmVuIGlkIGZvdW5kIjsKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIHJldHVybiBpdC0+c2Vjb25kLmdldCgpOworICAg
IHJldHVybiBpdC0+dmFsdWUuZ2V0KCk7CiB9CiAKIFN0cmluZyBJbnNwZWN0b3JDU1NBZ2VudDo6
ZGV0ZWN0T3JpZ2luKENTU1N0eWxlU2hlZXQqIHBhZ2VTdHlsZVNoZWV0LCBEb2N1bWVudCogb3du
ZXJEb2N1bWVudCkKQEAgLTk5OCw3ICs5OTgsNyBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50Ojpk
aWRSZW1vdmVET01Ob2RlKE5vZGUqIG5vZGUpCiAgICAgaWYgKGl0ID09IG1fbm9kZVRvSW5zcGVj
dG9yU3R5bGVTaGVldC5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9pZFRvSW5zcGVj
dG9yU3R5bGVTaGVldC5yZW1vdmUoaXQtPnNlY29uZC0+aWQoKSk7CisgICAgbV9pZFRvSW5zcGVj
dG9yU3R5bGVTaGVldC5yZW1vdmUoaXQtPnZhbHVlLT5pZCgpKTsKICAgICBtX25vZGVUb0luc3Bl
Y3RvclN0eWxlU2hlZXQucmVtb3ZlKG5vZGUpOwogfQogCkBAIC0xMDExLDcgKzEwMTEsNyBAQCB2
b2lkIEluc3BlY3RvckNTU0FnZW50OjpkaWRNb2RpZnlET01BdHRyKEVsZW1lbnQqIGVsZW1lbnQp
CiAgICAgaWYgKGl0ID09IG1fbm9kZVRvSW5zcGVjdG9yU3R5bGVTaGVldC5lbmQoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgaXQtPnNlY29uZC0+ZGlkTW9kaWZ5RWxlbWVudEF0dHJpYnV0ZSgp
OworICAgIGl0LT52YWx1ZS0+ZGlkTW9kaWZ5RWxlbWVudEF0dHJpYnV0ZSgpOwogfQogCiB2b2lk
IEluc3BlY3RvckNTU0FnZW50OjpzdHlsZVNoZWV0Q2hhbmdlZChJbnNwZWN0b3JTdHlsZVNoZWV0
KiBzdHlsZVNoZWV0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNvbnNvbGVBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Q29uc29sZUFnZW50LmNwcAppbmRleCAxNmM5MDllNGQwNTdiOWVmOTA1ZjE4MzA5YTlmYzlhZWM4
NTM5MmFkLi45ZTZjMDM1YzEwMWViYzU5Y2E0NGFmNmM0ODYxODNhMGUyM2ViMDE4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcApA
QCAtMTY5LDcgKzE2OSw3IEBAIHZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50OjpzdG9wVGltaW5n
KGNvbnN0IFN0cmluZyYgdGl0bGUsIFBhc3NSZWZQdHI8U2NyaXB0Q2FsCiAgICAgaWYgKGl0ID09
IG1fdGltZXMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGRvdWJsZSBzdGFydFRpbWUg
PSBpdC0+c2Vjb25kOworICAgIGRvdWJsZSBzdGFydFRpbWUgPSBpdC0+dmFsdWU7CiAgICAgbV90
aW1lcy5yZW1vdmUoaXQpOwogCiAgICAgZG91YmxlIGVsYXBzZWQgPSBjdXJyZW50VGltZSgpICog
MTAwMCAtIHN0YXJ0VGltZTsKQEAgLTE5Miw3ICsxOTIsNyBAQCB2b2lkIEluc3BlY3RvckNvbnNv
bGVBZ2VudDo6Y291bnQoUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+IGFyZ3VtZW50cywgUGFz
c1JlZgogICAgIGlmIChpdCA9PSBtX2NvdW50cy5lbmQoKSkKICAgICAgICAgY291bnQgPSAxOwog
ICAgIGVsc2UgewotICAgICAgICBjb3VudCA9IGl0LT5zZWNvbmQgKyAxOworICAgICAgICBjb3Vu
dCA9IGl0LT52YWx1ZSArIDE7CiAgICAgICAgIG1fY291bnRzLnJlbW92ZShpdCk7CiAgICAgfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAppbmRl
eCA4YjlhZDkyZTg3NDE0NTM1NDRiYjhkYmNkYmY0MGIzMWFlMDg0ZTZkLi42NzI4OTlkZTUwODlh
ZjYwYjI3NjM5NjkxMGQ3NDQyMTZlZDgxYmU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKQEAgLTQ2MCw3ICs0NjAsNyBAQCBOb2RlKiBJbnNw
ZWN0b3JET01BZ2VudDo6bm9kZUZvcklkKGludCBpZCkKIAogICAgIEhhc2hNYXA8aW50LCBOb2Rl
Kj46Oml0ZXJhdG9yIGl0ID0gbV9pZFRvTm9kZS5maW5kKGlkKTsKICAgICBpZiAoaXQgIT0gbV9p
ZFRvTm9kZS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgIHJldHVy
biBpdC0+dmFsdWU7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTg4NCw5ICs4ODQsOSBAQCB2b2lk
IEluc3BlY3RvckRPTUFnZW50OjpwZXJmb3JtU2VhcmNoKEVycm9yU3RyaW5nKiwgY29uc3QgU3Ry
aW5nJiB3aGl0ZXNwYWNlVHJpbQogICAgIFNlYXJjaFJlc3VsdHM6Oml0ZXJhdG9yIHJlc3VsdHNJ
dCA9IG1fc2VhcmNoUmVzdWx0cy5hZGQoKnNlYXJjaElkLCBWZWN0b3I8UmVmUHRyPE5vZGU+ID4o
KSkuaXRlcmF0b3I7CiAKICAgICBmb3IgKExpc3RIYXNoU2V0PE5vZGUqPjo6aXRlcmF0b3IgaXQg
PSByZXN1bHRDb2xsZWN0b3IuYmVnaW4oKTsgaXQgIT0gcmVzdWx0Q29sbGVjdG9yLmVuZCgpOyAr
K2l0KQotICAgICAgICByZXN1bHRzSXQtPnNlY29uZC5hcHBlbmQoKml0KTsKKyAgICAgICAgcmVz
dWx0c0l0LT52YWx1ZS5hcHBlbmQoKml0KTsKIAotICAgICpyZXN1bHRDb3VudCA9IHJlc3VsdHNJ
dC0+c2Vjb25kLnNpemUoKTsKKyAgICAqcmVzdWx0Q291bnQgPSByZXN1bHRzSXQtPnZhbHVlLnNp
emUoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0U2VhcmNoUmVzdWx0cyhFcnJv
clN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgc2VhcmNoSWQsIGludCBmcm9tSW5k
ZXgsIGludCB0b0luZGV4LCBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PGludD4gPiYgbm9kZUlk
cykKQEAgLTg5Nyw3ICs4OTcsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRTZWFyY2hS
ZXN1bHRzKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJgogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgaW50IHNpemUgPSBpdC0+c2Vjb25kLnNpemUoKTsKKyAgICBp
bnQgc2l6ZSA9IGl0LT52YWx1ZS5zaXplKCk7CiAgICAgaWYgKGZyb21JbmRleCA8IDAgfHwgdG9J
bmRleCA+IHNpemUgfHwgZnJvbUluZGV4ID49IHRvSW5kZXgpIHsKICAgICAgICAgKmVycm9yU3Ry
aW5nID0gIkludmFsaWQgc2VhcmNoIHJlc3VsdCByYW5nZSI7CiAgICAgICAgIHJldHVybjsKQEAg
LTkwNSw3ICs5MDUsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRTZWFyY2hSZXN1bHRz
KEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJgogCiAgICAgbm9kZUlkcyA9
IFR5cGVCdWlsZGVyOjpBcnJheTxpbnQ+OjpjcmVhdGUoKTsKICAgICBmb3IgKGludCBpID0gZnJv
bUluZGV4OyBpIDwgdG9JbmRleDsgKytpKQotICAgICAgICBub2RlSWRzLT5hZGRJdGVtKHB1c2hO
b2RlUGF0aFRvRnJvbnRlbmQoKGl0LT5zZWNvbmQpW2ldLmdldCgpKSk7CisgICAgICAgIG5vZGVJ
ZHMtPmFkZEl0ZW0ocHVzaE5vZGVQYXRoVG9Gcm9udGVuZCgoaXQtPnZhbHVlKVtpXS5nZXQoKSkp
OwogfQogCiB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaXNjYXJkU2VhcmNoUmVzdWx0cyhFcnJv
clN0cmluZyosIGNvbnN0IFN0cmluZyYgc2VhcmNoSWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudC5jcHAKaW5kZXggMWQ2NDkz
N2ZlNDBlOWE0YWQ4MzA1YTZjMGE5ZTU1NGIyNzlmY2YyYS4uYWM2NGFjYjY4NjhjNGQxYmE2YTk5
MzM3ZTM1OTNlN2ZjYTAyNzE1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50LmNwcApAQCAtNDAxLDggKzQwMSw4IEBAIHZv
aWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6d2lsbFNlbmRYTUxIdHRwUmVxdWVzdChjb25z
dCBTdHJpbmcmIHVybCkKICAgICBlbHNlIHsKICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4geGhyQnJlYWtwb2ludHMgPSBtX3N0YXRlLT5nZXRPYmplY3QoRE9NRGVidWdnZXJBZ2VudFN0
YXRlOjp4aHJCcmVha3BvaW50cyk7CiAgICAgICAgIGZvciAoSW5zcGVjdG9yT2JqZWN0OjppdGVy
YXRvciBpdCA9IHhockJyZWFrcG9pbnRzLT5iZWdpbigpOyBpdCAhPSB4aHJCcmVha3BvaW50cy0+
ZW5kKCk7ICsraXQpIHsKLSAgICAgICAgICAgIGlmICh1cmwuY29udGFpbnMoaXQtPmZpcnN0KSkg
ewotICAgICAgICAgICAgICAgIGJyZWFrcG9pbnRVUkwgPSBpdC0+Zmlyc3Q7CisgICAgICAgICAg
ICBpZiAodXJsLmNvbnRhaW5zKGl0LT5rZXkpKSB7CisgICAgICAgICAgICAgICAgYnJlYWtwb2lu
dFVSTCA9IGl0LT5rZXk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JE
T01TdG9yYWdlQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRP
TVN0b3JhZ2VBZ2VudC5jcHAKaW5kZXggNjU4ZWIyZDI0ODM2MzA2YmFhN2NkODA0ZTNiNjRmNDg5
NjdiMjFkZi4uZmUzY2U3ZWIxMGJmNjYxNjIyYTY0YjMyYjIwMzYzZjdjM2E3MTY2YiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2Vu
dC5jcHAKQEAgLTc4LDcgKzc4LDcgQEAgdm9pZCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmNs
ZWFyRnJvbnRlbmQoKQogewogICAgIERPTVN0b3JhZ2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGRv
bVN0b3JhZ2VFbmQgPSBtX3Jlc291cmNlcy5lbmQoKTsKICAgICBmb3IgKERPTVN0b3JhZ2VSZXNv
dXJjZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZG9tU3Rv
cmFnZUVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+dW5iaW5kKCk7CisgICAgICAgIGl0
LT52YWx1ZS0+dW5iaW5kKCk7CiAgICAgbV9mcm9udGVuZCA9IDA7CiAgICAgZGlzYWJsZSgwKTsK
IH0KQEAgLTk3LDcgKzk3LDcgQEAgdm9pZCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmVuYWJs
ZShFcnJvclN0cmluZyopCiAKICAgICBET01TdG9yYWdlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBy
ZXNvdXJjZXNFbmQgPSBtX3Jlc291cmNlcy5lbmQoKTsKICAgICBmb3IgKERPTVN0b3JhZ2VSZXNv
dXJjZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gcmVzb3Vy
Y2VzRW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5iaW5kKG1fZnJvbnRlbmQpOworICAg
ICAgICBpdC0+dmFsdWUtPmJpbmQobV9mcm9udGVuZCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRE9N
U3RvcmFnZUFnZW50OjpkaXNhYmxlKEVycm9yU3RyaW5nKikKQEAgLTE1Niw4ICsxNTYsOCBAQCBp
bnQgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpzdG9yYWdlSWQoU3RvcmFnZSogc3RvcmFnZSkK
ICAgICBib29sIGlzTG9jYWxTdG9yYWdlID0gKGZyYW1lLT5kb21XaW5kb3coKS0+bG9jYWxTdG9y
YWdlKGVjKSA9PSBzdG9yYWdlICYmICFlYyk7CiAgICAgRE9NU3RvcmFnZVJlc291cmNlc01hcDo6
aXRlcmF0b3IgZG9tU3RvcmFnZUVuZCA9IG1fcmVzb3VyY2VzLmVuZCgpOwogICAgIGZvciAoRE9N
U3RvcmFnZVJlc291cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5iZWdpbigpOyBp
dCAhPSBkb21TdG9yYWdlRW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kLT5pc1Nh
bWVIb3N0QW5kVHlwZShmcmFtZSwgaXNMb2NhbFN0b3JhZ2UpKQotICAgICAgICAgICAgcmV0dXJu
IGl0LT5maXJzdDsKKyAgICAgICAgaWYgKGl0LT52YWx1ZS0+aXNTYW1lSG9zdEFuZFR5cGUoZnJh
bWUsIGlzTG9jYWxTdG9yYWdlKSkKKyAgICAgICAgICAgIHJldHVybiBpdC0+a2V5OwogICAgIH0K
ICAgICByZXR1cm4gMDsKIH0KQEAgLTE2NywxNCArMTY3LDE0IEBAIEluc3BlY3RvckRPTVN0b3Jh
Z2VSZXNvdXJjZSogSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpnZXRET01TdG9yYWdlUmVzb3Vy
Y2VGb3JJCiAgICAgRE9NU3RvcmFnZVJlc291cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291
cmNlcy5maW5kKHN0b3JhZ2VJZCk7CiAgICAgaWYgKGl0ID09IG1fcmVzb3VyY2VzLmVuZCgpKQog
ICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gaXQtPnNlY29uZC5nZXQoKTsKKyAgICByZXR1
cm4gaXQtPnZhbHVlLmdldCgpOwogfQogCiB2b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6
ZGlkVXNlRE9NU3RvcmFnZShTdG9yYWdlQXJlYSogc3RvcmFnZUFyZWEsIGJvb2wgaXNMb2NhbFN0
b3JhZ2UsIEZyYW1lKiBmcmFtZSkKIHsKICAgICBET01TdG9yYWdlUmVzb3VyY2VzTWFwOjppdGVy
YXRvciBkb21TdG9yYWdlRW5kID0gbV9yZXNvdXJjZXMuZW5kKCk7CiAgICAgZm9yIChET01TdG9y
YWdlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9
IGRvbVN0b3JhZ2VFbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQtPmlzU2FtZUhv
c3RBbmRUeXBlKGZyYW1lLCBpc0xvY2FsU3RvcmFnZSkpCisgICAgICAgIGlmIChpdC0+dmFsdWUt
PmlzU2FtZUhvc3RBbmRUeXBlKGZyYW1lLCBpc0xvY2FsU3RvcmFnZSkpCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRGF0YWJhc2VBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRGF0YWJhc2VBZ2VudC5jcHAKaW5kZXggMDZmNjUyNDg4ZWM2NGFhNzlhMWE2OWEyNmE5NDAw
MWQxMzBmOGZjOC4uOWIxZjFmYTdlMTY1ODI1MzhiMGViNmZmZWJiMmVjNGEyNDFkYzMxNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlQWdlbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50
LmNwcApAQCAtMjc1LDcgKzI3NSw3IEBAIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6ZW5h
YmxlKEVycm9yU3RyaW5nKikKIAogICAgIERhdGFiYXNlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBk
YXRhYmFzZXNFbmQgPSBtX3Jlc291cmNlcy5lbmQoKTsKICAgICBmb3IgKERhdGFiYXNlUmVzb3Vy
Y2VzTWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGRhdGFiYXNl
c0VuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+YmluZChtX2Zyb250ZW5kUHJvdmlkZXIt
PmZyb250ZW5kKCkpOworICAgICAgICBpdC0+dmFsdWUtPmJpbmQobV9mcm9udGVuZFByb3ZpZGVy
LT5mcm9udGVuZCgpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjpkaXNhYmxl
KEVycm9yU3RyaW5nKikKQEAgLTMzMSw4ICszMzEsOCBAQCB2b2lkIEluc3BlY3RvckRhdGFiYXNl
QWdlbnQ6OmV4ZWN1dGVTUUwoRXJyb3JTdHJpbmcqIGVycm9yLCBpbnQgZGF0YWJhc2VJZCwgY29u
cwogaW50IEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmRhdGFiYXNlSWQoRGF0YWJhc2UqIGRhdGFi
YXNlKQogewogICAgIGZvciAoRGF0YWJhc2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9y
ZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gbV9yZXNvdXJjZXMuZW5kKCk7ICsraXQpIHsKLSAgICAg
ICAgaWYgKGl0LT5zZWNvbmQtPmRhdGFiYXNlKCkgPT0gZGF0YWJhc2UpCi0gICAgICAgICAgICBy
ZXR1cm4gaXQtPmZpcnN0OworICAgICAgICBpZiAoaXQtPnZhbHVlLT5kYXRhYmFzZSgpID09IGRh
dGFiYXNlKQorICAgICAgICAgICAgcmV0dXJuIGl0LT5rZXk7CiAgICAgfQogICAgIHJldHVybiAw
OwogfQpAQCAtMzQwLDggKzM0MCw4IEBAIGludCBJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjpkYXRh
YmFzZUlkKERhdGFiYXNlKiBkYXRhYmFzZSkKIEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UqIElu
c3BlY3RvckRhdGFiYXNlQWdlbnQ6OmZpbmRCeUZpbGVOYW1lKGNvbnN0IFN0cmluZyYgZmlsZU5h
bWUpCiB7CiAgICAgZm9yIChEYXRhYmFzZVJlc291cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBtX3Jl
c291cmNlcy5iZWdpbigpOyBpdCAhPSBtX3Jlc291cmNlcy5lbmQoKTsgKytpdCkgewotICAgICAg
ICBpZiAoaXQtPnNlY29uZC0+ZGF0YWJhc2UoKS0+ZmlsZU5hbWUoKSA9PSBmaWxlTmFtZSkKLSAg
ICAgICAgICAgIHJldHVybiBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICBpZiAoaXQtPnZhbHVl
LT5kYXRhYmFzZSgpLT5maWxlTmFtZSgpID09IGZpbGVOYW1lKQorICAgICAgICAgICAgcmV0dXJu
IGl0LT52YWx1ZS5nZXQoKTsKICAgICB9CiAgICAgcmV0dXJuIDA7CiB9CkBAIC0zNTEsNyArMzUx
LDcgQEAgRGF0YWJhc2UqIEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmRhdGFiYXNlRm9ySWQoaW50
IGRhdGFiYXNlSWQpCiAgICAgRGF0YWJhc2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9y
ZXNvdXJjZXMuZmluZChkYXRhYmFzZUlkKTsKICAgICBpZiAoaXQgPT0gbV9yZXNvdXJjZXMuZW5k
KCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBpdC0+c2Vjb25kLT5kYXRhYmFzZSgp
OworICAgIHJldHVybiBpdC0+dmFsdWUtPmRhdGFiYXNlKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1
Z2dlckFnZW50LmNwcAppbmRleCA5MjRiZTM4NDI5Zjc0MDk2MjNiMjY3NzkyYmFkMDQ1NjMzZGM4
OGY4Li4wNzQzNTAwZGEzOGE1NjliYWFjNDkwOWRhNjNlYWQzYjYyMzY1YzFlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCkBA
IC0yNDAsOSArMjQwLDkgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRCcmVha3Bv
aW50QnlVcmwoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBpbnQgbGkKIAogICAgIFNjcmlwdEJy
ZWFrcG9pbnQgYnJlYWtwb2ludChsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIGNvbmRpdGlvbik7
CiAgICAgZm9yIChTY3JpcHRzTWFwOjppdGVyYXRvciBpdCA9IG1fc2NyaXB0cy5iZWdpbigpOyBp
dCAhPSBtX3NjcmlwdHMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgaWYgKCFtYXRjaGVzKGl0LT5z
ZWNvbmQudXJsLCB1cmwsIGlzUmVnZXgpKQorICAgICAgICBpZiAoIW1hdGNoZXMoaXQtPnZhbHVl
LnVybCwgdXJsLCBpc1JlZ2V4KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBsb2NhdGlvbiA9IHJlc29sdmVCcmVha3BvaW50KGJyZWFrcG9p
bnRJZCwgaXQtPmZpcnN0LCBicmVha3BvaW50KTsKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gbG9jYXRpb24gPSByZXNvbHZlQnJlYWtwb2ludChicmVha3BvaW50SWQsIGl0LT5rZXks
IGJyZWFrcG9pbnQpOwogICAgICAgICBpZiAobG9jYXRpb24pCiAgICAgICAgICAgICBsb2NhdGlv
bnMtPnB1c2hPYmplY3QobG9jYXRpb24pOwogICAgIH0KQEAgLTI5Miw4ICsyOTIsOCBAQCB2b2lk
IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnJlbW92ZUJyZWFrcG9pbnQoRXJyb3JTdHJpbmcqLCBj
b25zdCBTdHJpbmcmIGJyZWFrcAogICAgIEJyZWFrcG9pbnRJZFRvRGVidWdTZXJ2ZXJCcmVha3Bv
aW50SWRzTWFwOjppdGVyYXRvciBkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNJdGVyYXRvciA9IG1f
YnJlYWtwb2ludElkVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHMuZmluZChicmVha3BvaW50SWQp
OwogICAgIGlmIChkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNJdGVyYXRvciA9PSBtX2JyZWFrcG9p
bnRJZFRvRGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzLmVuZCgpKQogICAgICAgICByZXR1cm47Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNJdGVyYXRv
ci0+c2Vjb25kLnNpemUoKTsgKytpKQotICAgICAgICBzY3JpcHREZWJ1Z1NlcnZlcigpLnJlbW92
ZUJyZWFrcG9pbnQoZGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzSXRlcmF0b3ItPnNlY29uZFtpXSk7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNJdGVy
YXRvci0+dmFsdWUuc2l6ZSgpOyArK2kpCisgICAgICAgIHNjcmlwdERlYnVnU2VydmVyKCkucmVt
b3ZlQnJlYWtwb2ludChkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNJdGVyYXRvci0+dmFsdWVbaV0p
OwogICAgIG1fYnJlYWtwb2ludElkVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHMucmVtb3ZlKGRl
YnVnU2VydmVyQnJlYWtwb2ludElkc0l0ZXJhdG9yKTsKIH0KIApAQCAtMzIxLDcgKzMyMSw3IEBA
IFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj4gSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudDo6cmVzb2x2ZUJyZWFrCiAgICAgU2NyaXB0c01hcDo6aXRlcmF0b3Igc2NyaXB0
SXRlcmF0b3IgPSBtX3NjcmlwdHMuZmluZChzY3JpcHRJZCk7CiAgICAgaWYgKHNjcmlwdEl0ZXJh
dG9yID09IG1fc2NyaXB0cy5lbmQoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgU2NyaXB0JiBz
Y3JpcHQgPSBzY3JpcHRJdGVyYXRvci0+c2Vjb25kOworICAgIFNjcmlwdCYgc2NyaXB0ID0gc2Ny
aXB0SXRlcmF0b3ItPnZhbHVlOwogICAgIGlmIChicmVha3BvaW50LmxpbmVOdW1iZXIgPCBzY3Jp
cHQuc3RhcnRMaW5lIHx8IHNjcmlwdC5lbmRMaW5lIDwgYnJlYWtwb2ludC5saW5lTnVtYmVyKQog
ICAgICAgICByZXR1cm4gMDsKIApAQCAtMzM0LDcgKzMzNCw3IEBAIFBhc3NSZWZQdHI8VHlwZUJ1
aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6cmVzb2x2
ZUJyZWFrCiAgICAgQnJlYWtwb2ludElkVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNNYXA6Oml0
ZXJhdG9yIGRlYnVnU2VydmVyQnJlYWtwb2ludElkc0l0ZXJhdG9yID0gbV9icmVha3BvaW50SWRU
b0RlYnVnU2VydmVyQnJlYWtwb2ludElkcy5maW5kKGJyZWFrcG9pbnRJZCk7CiAgICAgaWYgKGRl
YnVnU2VydmVyQnJlYWtwb2ludElkc0l0ZXJhdG9yID09IG1fYnJlYWtwb2ludElkVG9EZWJ1Z1Nl
cnZlckJyZWFrcG9pbnRJZHMuZW5kKCkpCiAgICAgICAgIGRlYnVnU2VydmVyQnJlYWtwb2ludElk
c0l0ZXJhdG9yID0gbV9icmVha3BvaW50SWRUb0RlYnVnU2VydmVyQnJlYWtwb2ludElkcy5zZXQo
YnJlYWtwb2ludElkLCBWZWN0b3I8U3RyaW5nPigpKS5pdGVyYXRvcjsKLSAgICBkZWJ1Z1NlcnZl
ckJyZWFrcG9pbnRJZHNJdGVyYXRvci0+c2Vjb25kLmFwcGVuZChkZWJ1Z1NlcnZlckJyZWFrcG9p
bnRJZCk7CisgICAgZGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzSXRlcmF0b3ItPnZhbHVlLmFwcGVu
ZChkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZCk7CiAKICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkRl
YnVnZ2VyOjpMb2NhdGlvbj4gbG9jYXRpb24gPSBUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0
aW9uOjpjcmVhdGUoKQogICAgICAgICAuc2V0U2NyaXB0SWQoc2NyaXB0SWQpCkBAIC0zNjAsNyAr
MzYwLDcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZWFyY2hJbkNvbnRlbnQoRXJy
b3JTdHJpbmcqIGVycm9yLCBjb25zdCBTdHJpbmcmIHMKIAogICAgIFNjcmlwdHNNYXA6Oml0ZXJh
dG9yIGl0ID0gbV9zY3JpcHRzLmZpbmQoc2NyaXB0SWQpOwogICAgIGlmIChpdCAhPSBtX3Njcmlw
dHMuZW5kKCkpCi0gICAgICAgIHJlc3VsdHMgPSBDb250ZW50U2VhcmNoVXRpbHM6OnNlYXJjaElu
VGV4dEJ5TGluZXMoaXQtPnNlY29uZC5zb3VyY2UsIHF1ZXJ5LCBjYXNlU2Vuc2l0aXZlLCBpc1Jl
Z2V4KTsKKyAgICAgICAgcmVzdWx0cyA9IENvbnRlbnRTZWFyY2hVdGlsczo6c2VhcmNoSW5UZXh0
QnlMaW5lcyhpdC0+dmFsdWUuc291cmNlLCBxdWVyeSwgY2FzZVNlbnNpdGl2ZSwgaXNSZWdleCk7
CiAgICAgZWxzZQogICAgICAgICAqZXJyb3IgPSAiTm8gc2NyaXB0IGZvciBpZDogIiArIHNjcmlw
dElkOwogfQpAQCAtMzgxLDcgKzM4MSw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
Z2V0U2NyaXB0U291cmNlKEVycm9yU3RyaW5nKiBlcnJvciwgY29uc3QgU3RyaW5nJiBzCiB7CiAg
ICAgU2NyaXB0c01hcDo6aXRlcmF0b3IgaXQgPSBtX3NjcmlwdHMuZmluZChzY3JpcHRJZCk7CiAg
ICAgaWYgKGl0ICE9IG1fc2NyaXB0cy5lbmQoKSkKLSAgICAgICAgKnNjcmlwdFNvdXJjZSA9IGl0
LT5zZWNvbmQuc291cmNlOworICAgICAgICAqc2NyaXB0U291cmNlID0gaXQtPnZhbHVlLnNvdXJj
ZTsKICAgICBlbHNlCiAgICAgICAgICplcnJvciA9ICJObyBzY3JpcHQgZm9yIGlkOiAiICsgc2Ny
aXB0SWQ7CiB9CkBAIC01MzYsNyArNTM2LDcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpkaWRQYXJzZVNvdXJjZShjb25zdCBTdHJpbmcmIHNjcmlwdElkLCBjb25zdCBTY3JpcHQKIAog
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJyZWFrcG9pbnRzQ29va2llID0gbV9zdGF0ZS0+
Z2V0T2JqZWN0KERlYnVnZ2VyQWdlbnRTdGF0ZTo6amF2YVNjcmlwdEJyZWFrcG9pbnRzKTsKICAg
ICBmb3IgKEluc3BlY3Rvck9iamVjdDo6aXRlcmF0b3IgaXQgPSBicmVha3BvaW50c0Nvb2tpZS0+
YmVnaW4oKTsgaXQgIT0gYnJlYWtwb2ludHNDb29raWUtPmVuZCgpOyArK2l0KSB7Ci0gICAgICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJyZWFrcG9pbnRPYmplY3QgPSBpdC0+c2Vjb25kLT5h
c09iamVjdCgpOworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBicmVha3BvaW50T2Jq
ZWN0ID0gaXQtPnZhbHVlLT5hc09iamVjdCgpOwogICAgICAgICBib29sIGlzUmVnZXg7CiAgICAg
ICAgIGJyZWFrcG9pbnRPYmplY3QtPmdldEJvb2xlYW4oImlzUmVnZXgiLCAmaXNSZWdleCk7CiAg
ICAgICAgIFN0cmluZyB1cmw7CkBAIC01NDcsOSArNTQ3LDkgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1
Z2dlckFnZW50OjpkaWRQYXJzZVNvdXJjZShjb25zdCBTdHJpbmcmIHNjcmlwdElkLCBjb25zdCBT
Y3JpcHQKICAgICAgICAgYnJlYWtwb2ludE9iamVjdC0+Z2V0TnVtYmVyKCJsaW5lTnVtYmVyIiwg
JmJyZWFrcG9pbnQubGluZU51bWJlcik7CiAgICAgICAgIGJyZWFrcG9pbnRPYmplY3QtPmdldE51
bWJlcigiY29sdW1uTnVtYmVyIiwgJmJyZWFrcG9pbnQuY29sdW1uTnVtYmVyKTsKICAgICAgICAg
YnJlYWtwb2ludE9iamVjdC0+Z2V0U3RyaW5nKCJjb25kaXRpb24iLCAmYnJlYWtwb2ludC5jb25k
aXRpb24pOwotICAgICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj4g
bG9jYXRpb24gPSByZXNvbHZlQnJlYWtwb2ludChpdC0+Zmlyc3QsIHNjcmlwdElkLCBicmVha3Bv
aW50KTsKKyAgICAgICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRpb24+IGxv
Y2F0aW9uID0gcmVzb2x2ZUJyZWFrcG9pbnQoaXQtPmtleSwgc2NyaXB0SWQsIGJyZWFrcG9pbnQp
OwogICAgICAgICBpZiAobG9jYXRpb24pCi0gICAgICAgICAgICBtX2Zyb250ZW5kLT5icmVha3Bv
aW50UmVzb2x2ZWQoaXQtPmZpcnN0LCBsb2NhdGlvbik7CisgICAgICAgICAgICBtX2Zyb250ZW5k
LT5icmVha3BvaW50UmVzb2x2ZWQoaXQtPmtleSwgbG9jYXRpb24pOwogICAgIH0KIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck1lbW9yeUFnZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JNZW1vcnlBZ2VudC5jcHAKaW5k
ZXggNWU0M2NiOWQxZTE4NTRkOWY3ZjllODRiMTA2YjNiNTA2NmVmNGY4Yi4uZDRhZmZkYmEzNjMz
M2YwOTYzZjc2MzIxM2JkNDllZmQxMWEwZjJhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3Rvck1lbW9yeUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yTWVtb3J5QWdlbnQuY3BwCkBAIC0xMjAsOCArMTIwLDggQEAgcHVi
bGljOgogICAgIHsKICAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBjaGlsZHJlblN0YXRz
ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwogICAgICAgICBmb3IgKEhhc2hNYXA8U3RyaW5n
LCBpbnQ+OjppdGVyYXRvciBpdCA9IG1fbm9kZU5hbWVUb0NvdW50LmJlZ2luKCk7IGl0ICE9IG1f
bm9kZU5hbWVUb0NvdW50LmVuZCgpOyArK2l0KSB7Ci0gICAgICAgICAgICBSZWZQdHI8Tm9kZUNv
dW50PiBub2RlQ291bnQgPSBOb2RlQ291bnQ6OmNyZWF0ZSgpLnNldE5vZGVOYW1lKGl0LT5maXJz
dCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAuc2V0Q291bnQoaXQtPnNlY29uZCk7CisgICAgICAgICAgICBSZWZQdHI8Tm9kZUNv
dW50PiBub2RlQ291bnQgPSBOb2RlQ291bnQ6OmNyZWF0ZSgpLnNldE5vZGVOYW1lKGl0LT5rZXkp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLnNldENvdW50KGl0LT52YWx1ZSk7CiAgICAgICAgICAgICBjaGlsZHJlblN0YXRzLT5w
dXNoT2JqZWN0KG5vZGVDb3VudCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGNoaWxkcmVu
U3RhdHMucmVsZWFzZSgpOwpAQCAtMTMxLDggKzEzMSw4IEBAIHB1YmxpYzoKICAgICB7CiAgICAg
ICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gbGlzdGVuZXJTdGF0cyA9IEluc3BlY3RvckFycmF5
OjpjcmVhdGUoKTsKICAgICAgICAgZm9yIChIYXNoTWFwPEF0b21pY1N0cmluZywgaW50Pjo6aXRl
cmF0b3IgaXQgPSBtX2V2ZW50VHlwZVRvQ291bnQuYmVnaW4oKTsgaXQgIT0gbV9ldmVudFR5cGVU
b0NvdW50LmVuZCgpOyArK2l0KSB7Ci0gICAgICAgICAgICBSZWZQdHI8TGlzdGVuZXJDb3VudD4g
bGlzdGVuZXJDb3VudCA9IExpc3RlbmVyQ291bnQ6OmNyZWF0ZSgpLnNldFR5cGUoaXQtPmZpcnN0
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC5zZXRDb3VudChpdC0+c2Vjb25kKTsKKyAgICAgICAgICAgIFJl
ZlB0cjxMaXN0ZW5lckNvdW50PiBsaXN0ZW5lckNvdW50ID0gTGlzdGVuZXJDb3VudDo6Y3JlYXRl
KCkuc2V0VHlwZShpdC0+a2V5KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRDb3VudChpdC0+dmFsdWUp
OwogICAgICAgICAgICAgbGlzdGVuZXJTdGF0cy0+cHVzaE9iamVjdChsaXN0ZW5lckNvdW50KTsK
ICAgICAgICAgfQogICAgICAgICByZXR1cm4gbGlzdGVuZXJTdGF0cy5yZWxlYXNlKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCmluZGV4IDQ1
ODJlOGI4OWM4N2ViZWRhOTZmMmJjMzBlYWMxZDhmNDFlNDU5MDYuLmZjNjhkNDM2OGYwNDIyOTY1
YjczYjk0MGM2NTFlNjVhOGM5Mzc4NDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCkBAIC00MjgsNyArNDI4LDcgQEAgc3RhdGljIFZlY3Rv
cjxDYWNoZWRSZXNvdXJjZSo+IGNhY2hlZFJlc291cmNlc0ZvckZyYW1lKEZyYW1lKiBmcmFtZSkK
ICAgICBjb25zdCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6RG9jdW1lbnRSZXNvdXJjZU1hcCYgYWxs
UmVzb3VyY2VzID0gZnJhbWUtPmRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCktPmFs
bENhY2hlZFJlc291cmNlcygpOwogICAgIENhY2hlZFJlc291cmNlTG9hZGVyOjpEb2N1bWVudFJl
c291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBhbGxSZXNvdXJjZXMuZW5kKCk7CiAgICAg
Zm9yIChDYWNoZWRSZXNvdXJjZUxvYWRlcjo6RG9jdW1lbnRSZXNvdXJjZU1hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBhbGxSZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAg
ICAgIENhY2hlZFJlc291cmNlKiBjYWNoZWRSZXNvdXJjZSA9IGl0LT5zZWNvbmQuZ2V0KCk7Cisg
ICAgICAgIENhY2hlZFJlc291cmNlKiBjYWNoZWRSZXNvdXJjZSA9IGl0LT52YWx1ZS5nZXQoKTsK
IAogICAgICAgICBzd2l0Y2ggKGNhY2hlZFJlc291cmNlLT50eXBlKCkpIHsKICAgICAgICAgY2Fz
ZSBDYWNoZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJjZToKQEAgLTY4MSw3ICs2ODEsNyBAQCB2b2lk
IEluc3BlY3RvclBhZ2VBZ2VudDo6ZGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxkKEZyYW1lKiBm
cmFtZSwgRE9NV3JhcHBlcldvcgogICAgICAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IHNjcmlwdHMtPmVuZCgpOwogICAgICAgICBmb3IgKEluc3BlY3Rvck9iamVjdDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBzY3JpcHRzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
ICAgICAgICAgICAgIFN0cmluZyBzY3JpcHRUZXh0OwotICAgICAgICAgICAgaWYgKGl0LT5zZWNv
bmQtPmFzU3RyaW5nKCZzY3JpcHRUZXh0KSkKKyAgICAgICAgICAgIGlmIChpdC0+dmFsdWUtPmFz
U3RyaW5nKCZzY3JpcHRUZXh0KSkKICAgICAgICAgICAgICAgICBtX2luamVjdGVkU2NyaXB0TWFu
YWdlci0+aW5qZWN0U2NyaXB0KHNjcmlwdFRleHQsIG1haW5Xb3JsZFNjcmlwdFN0YXRlKGZyYW1l
KSk7CiAgICAgICAgIH0KICAgICB9CkBAIC03MTIsOCArNzEyLDggQEAgdm9pZCBJbnNwZWN0b3JQ
YWdlQWdlbnQ6OmZyYW1lRGV0YWNoZWQoRnJhbWUqIGZyYW1lKQogewogICAgIEhhc2hNYXA8RnJh
bWUqLCBTdHJpbmc+OjppdGVyYXRvciBpdGVyYXRvciA9IG1fZnJhbWVUb0lkZW50aWZpZXIuZmlu
ZChmcmFtZSk7CiAgICAgaWYgKGl0ZXJhdG9yICE9IG1fZnJhbWVUb0lkZW50aWZpZXIuZW5kKCkp
IHsKLSAgICAgICAgbV9mcm9udGVuZC0+ZnJhbWVEZXRhY2hlZChpdGVyYXRvci0+c2Vjb25kKTsK
LSAgICAgICAgbV9pZGVudGlmaWVyVG9GcmFtZS5yZW1vdmUoaXRlcmF0b3ItPnNlY29uZCk7Cisg
ICAgICAgIG1fZnJvbnRlbmQtPmZyYW1lRGV0YWNoZWQoaXRlcmF0b3ItPnZhbHVlKTsKKyAgICAg
ICAgbV9pZGVudGlmaWVyVG9GcmFtZS5yZW1vdmUoaXRlcmF0b3ItPnZhbHVlKTsKICAgICAgICAg
bV9mcmFtZVRvSWRlbnRpZmllci5yZW1vdmUoaXRlcmF0b3IpOwogICAgIH0KIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcAppbmRl
eCA5ZTRmNzFiMzg5YjBiNzk0ZTZlYjJhY2ZjYTBmMmFiMjgzZDY0NmY3Li4wMGVkOWRkMmQzZDNm
NTc5NTZiYzRhZThjY2ZmZDU5MDU1ODQ1ZTYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwCkBAIC0yNDQsMTAgKzI0NCwxMCBA
QCB2b2lkIEluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmdldFByb2ZpbGVIZWFkZXJzKEVycm9yU3Ry
aW5nKiwgUmVmUHRyPEluc3BlY3RvckFycgogewogICAgIFByb2ZpbGVzTWFwOjppdGVyYXRvciBw
cm9maWxlc0VuZCA9IG1fcHJvZmlsZXMuZW5kKCk7CiAgICAgZm9yIChQcm9maWxlc01hcDo6aXRl
cmF0b3IgaXQgPSBtX3Byb2ZpbGVzLmJlZ2luKCk7IGl0ICE9IHByb2ZpbGVzRW5kOyArK2l0KQot
ICAgICAgICBoZWFkZXJzLT5wdXNoT2JqZWN0KGNyZWF0ZVByb2ZpbGVIZWFkZXIoKml0LT5zZWNv
bmQpKTsKKyAgICAgICAgaGVhZGVycy0+cHVzaE9iamVjdChjcmVhdGVQcm9maWxlSGVhZGVyKCpp
dC0+dmFsdWUpKTsKICAgICBIZWFwU25hcHNob3RzTWFwOjppdGVyYXRvciBzbmFwc2hvdHNFbmQg
PSBtX3NuYXBzaG90cy5lbmQoKTsKICAgICBmb3IgKEhlYXBTbmFwc2hvdHNNYXA6Oml0ZXJhdG9y
IGl0ID0gbV9zbmFwc2hvdHMuYmVnaW4oKTsgaXQgIT0gc25hcHNob3RzRW5kOyArK2l0KQotICAg
ICAgICBoZWFkZXJzLT5wdXNoT2JqZWN0KGNyZWF0ZVNuYXBzaG90SGVhZGVyKCppdC0+c2Vjb25k
KSk7CisgICAgICAgIGhlYWRlcnMtPnB1c2hPYmplY3QoY3JlYXRlU25hcHNob3RIZWFkZXIoKml0
LT52YWx1ZSkpOwogfQogCiBuYW1lc3BhY2UgewpAQCAtMjcxLDE1ICsyNzEsMTUgQEAgdm9pZCBJ
bnNwZWN0b3JQcm9maWxlckFnZW50OjpnZXRQcm9maWxlKEVycm9yU3RyaW5nKiwgY29uc3QgU3Ry
aW5nJiB0eXBlLCBpbnQgcmEKICAgICBpZiAodHlwZSA9PSBDUFVQcm9maWxlVHlwZSkgewogICAg
ICAgICBQcm9maWxlc01hcDo6aXRlcmF0b3IgaXQgPSBtX3Byb2ZpbGVzLmZpbmQodWlkKTsKICAg
ICAgICAgaWYgKGl0ICE9IG1fcHJvZmlsZXMuZW5kKCkpIHsKLSAgICAgICAgICAgIHByb2ZpbGVP
YmplY3QgPSBjcmVhdGVQcm9maWxlSGVhZGVyKCppdC0+c2Vjb25kKTsKLSAgICAgICAgICAgIHBy
b2ZpbGVPYmplY3QtPnNldE9iamVjdCgiaGVhZCIsIGl0LT5zZWNvbmQtPmJ1aWxkSW5zcGVjdG9y
T2JqZWN0Rm9ySGVhZCgpKTsKLSAgICAgICAgICAgIGlmIChpdC0+c2Vjb25kLT5ib3R0b21VcEhl
YWQoKSkKLSAgICAgICAgICAgICAgICBwcm9maWxlT2JqZWN0LT5zZXRPYmplY3QoImJvdHRvbVVw
SGVhZCIsIGl0LT5zZWNvbmQtPmJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9yQm90dG9tVXBIZWFkKCkp
OworICAgICAgICAgICAgcHJvZmlsZU9iamVjdCA9IGNyZWF0ZVByb2ZpbGVIZWFkZXIoKml0LT52
YWx1ZSk7CisgICAgICAgICAgICBwcm9maWxlT2JqZWN0LT5zZXRPYmplY3QoImhlYWQiLCBpdC0+
dmFsdWUtPmJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9ySGVhZCgpKTsKKyAgICAgICAgICAgIGlmIChp
dC0+dmFsdWUtPmJvdHRvbVVwSGVhZCgpKQorICAgICAgICAgICAgICAgIHByb2ZpbGVPYmplY3Qt
PnNldE9iamVjdCgiYm90dG9tVXBIZWFkIiwgaXQtPnZhbHVlLT5idWlsZEluc3BlY3Rvck9iamVj
dEZvckJvdHRvbVVwSGVhZCgpKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAodHlwZSA9PSBI
ZWFwUHJvZmlsZVR5cGUpIHsKICAgICAgICAgSGVhcFNuYXBzaG90c01hcDo6aXRlcmF0b3IgaXQg
PSBtX3NuYXBzaG90cy5maW5kKHVpZCk7CiAgICAgICAgIGlmIChpdCAhPSBtX3NuYXBzaG90cy5l
bmQoKSkgewotICAgICAgICAgICAgUmVmUHRyPFNjcmlwdEhlYXBTbmFwc2hvdD4gc25hcHNob3Qg
PSBpdC0+c2Vjb25kOworICAgICAgICAgICAgUmVmUHRyPFNjcmlwdEhlYXBTbmFwc2hvdD4gc25h
cHNob3QgPSBpdC0+dmFsdWU7CiAgICAgICAgICAgICBwcm9maWxlT2JqZWN0ID0gY3JlYXRlU25h
cHNob3RIZWFkZXIoKnNuYXBzaG90KTsKICAgICAgICAgICAgIGlmIChtX2Zyb250ZW5kKSB7CiAg
ICAgICAgICAgICAgICAgT3V0cHV0U3RyZWFtIHN0cmVhbShtX2Zyb250ZW5kLCB1aWQpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuY3Bw
CmluZGV4IDMwODg1NDBmZjc2YTI5YmJiOTJhMDljOTJjNzllMjM0MTdlMGMwMGIuLjAyYzUwNjZh
YzM4NzZhY2NhOWU4NWQ5YmY1ZDQ3ZGQzNTM4ZjU4ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5jcHAKQEAgLTEwMCw3ICsxMDAs
NyBAQCBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9ySGVh
ZGVycyhjb25zdCBIVFRQSGVhZGVyTWFwJiBoZQogICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IGhlYWRlcnNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIEhUVFBIZWFk
ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGhlYWRlcnMuZW5kKCk7CiAgICAgZm9yIChIVFRQ
SGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGhlYWRlcnMuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KQotICAgICAgICBoZWFkZXJzT2JqZWN0LT5zZXRTdHJpbmcoaXQtPmZpcnN0LnN0cmlu
ZygpLCBpdC0+c2Vjb25kKTsKKyAgICAgICAgaGVhZGVyc09iamVjdC0+c2V0U3RyaW5nKGl0LT5r
ZXkuc3RyaW5nKCksIGl0LT52YWx1ZSk7CiAgICAgcmV0dXJuIGhlYWRlcnNPYmplY3Q7CiB9CiAK
QEAgLTIxMSw4ICsyMTEsOCBAQCB2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OndpbGxTZW5k
UmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIERvY3VtZW50TAogICAgICAgICBJbnNw
ZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGhlYWRlcnMtPmVuZCgpOwogICAgICAg
ICBmb3IgKEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBoZWFkZXJzLT5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIFN0cmluZyB2YWx1ZTsKLSAgICAg
ICAgICAgIGlmIChpdC0+c2Vjb25kLT5hc1N0cmluZygmdmFsdWUpKQotICAgICAgICAgICAgICAg
IHJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKGl0LT5maXJzdCwgdmFsdWUpOworICAgICAgICAg
ICAgaWYgKGl0LT52YWx1ZS0+YXNTdHJpbmcoJnZhbHVlKSkKKyAgICAgICAgICAgICAgICByZXF1
ZXN0LnNldEhUVFBIZWFkZXJGaWVsZChpdC0+a2V5LCB2YWx1ZSk7CiAgICAgICAgIH0KICAgICB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUuY3BwCmluZGV4IDY3
NGY4NjZjM2I1M2Q1ZTlhZjQ0NjUxNTBiY2QyYmZjNzNiNzhhNDUuLjcwZTk1Y2NkOTM0YzViYWVj
ZWQxYTM3MGY2ZTQwYzk4N2VjZDkxYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JTdGF0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclN0YXRlLmNwcApAQCAtODAsNyArODAsNyBAQCBib29sIEluc3BlY3RvclN0YXRlOjpn
ZXRCb29sZWFuKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKQogICAgIEluc3BlY3Rvck9iamVj
dDo6aXRlcmF0b3IgaXQgPSBtX3Byb3BlcnRpZXMtPmZpbmQocHJvcGVydHlOYW1lKTsKICAgICBi
b29sIHZhbHVlID0gZmFsc2U7CiAgICAgaWYgKGl0ICE9IG1fcHJvcGVydGllcy0+ZW5kKCkpCi0g
ICAgICAgIGl0LT5zZWNvbmQtPmFzQm9vbGVhbigmdmFsdWUpOworICAgICAgICBpdC0+dmFsdWUt
PmFzQm9vbGVhbigmdmFsdWUpOwogICAgIHJldHVybiB2YWx1ZTsKIH0KIApAQCAtODksNyArODks
NyBAQCBTdHJpbmcgSW5zcGVjdG9yU3RhdGU6OmdldFN0cmluZyhjb25zdCBTdHJpbmcmIHByb3Bl
cnR5TmFtZSkKICAgICBJbnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9yIGl0ID0gbV9wcm9wZXJ0aWVz
LT5maW5kKHByb3BlcnR5TmFtZSk7CiAgICAgU3RyaW5nIHZhbHVlOwogICAgIGlmIChpdCAhPSBt
X3Byb3BlcnRpZXMtPmVuZCgpKQotICAgICAgICBpdC0+c2Vjb25kLT5hc1N0cmluZygmdmFsdWUp
OworICAgICAgICBpdC0+dmFsdWUtPmFzU3RyaW5nKCZ2YWx1ZSk7CiAgICAgcmV0dXJuIHZhbHVl
OwogfQogCkBAIC05OCw3ICs5OCw3IEBAIGxvbmcgSW5zcGVjdG9yU3RhdGU6OmdldExvbmcoY29u
c3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCiAgICAgSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciBp
dCA9IG1fcHJvcGVydGllcy0+ZmluZChwcm9wZXJ0eU5hbWUpOwogICAgIGxvbmcgdmFsdWUgPSAw
OwogICAgIGlmIChpdCAhPSBtX3Byb3BlcnRpZXMtPmVuZCgpKQotICAgICAgICBpdC0+c2Vjb25k
LT5hc051bWJlcigmdmFsdWUpOworICAgICAgICBpdC0+dmFsdWUtPmFzTnVtYmVyKCZ2YWx1ZSk7
CiAgICAgcmV0dXJuIHZhbHVlOwogfQogCkBAIC0xMDksNyArMTA5LDcgQEAgUGFzc1JlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvclN0YXRlOjpnZXRPYmplY3QoY29uc3QgU3RyaW5nJiBw
cm9wZXJ0eU5hbWUKICAgICAgICAgbV9wcm9wZXJ0aWVzLT5zZXRPYmplY3QocHJvcGVydHlOYW1l
LCBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKICAgICAgICAgaXQgPSBtX3Byb3BlcnRpZXMt
PmZpbmQocHJvcGVydHlOYW1lKTsKICAgICB9Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQtPmFzT2Jq
ZWN0KCk7CisgICAgcmV0dXJuIGl0LT52YWx1ZS0+YXNPYmplY3QoKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclN0eWxlU2hlZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0
eWxlU2hlZXQuY3BwCmluZGV4IDNiOWU0ZWViZWFlZjJlNzk0NWM0MDcxOGVlNDlmMjNlYmM1Yjlk
ZWIuLjg4OWVhNDU5MWE3MmYxOWIwN2VhYjRkZThmZTI1MDUyYjg4NGQ3NDkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKQEAgLTUxMCw3
ICs1MTAsNyBAQCBQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0
b3JTdHlsZTo6c3R5bGVXaXRoUHJvcGVydGllcygpIGNvbgogICAgICAgICAgICAgICAgICAgICAg
ICAgc2hvdWxkSW5hY3RpdmF0ZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGVsc2Ugewog
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmV2aW91c1BhcnNlZE9rOwotICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gYWN0aXZlSXQtPnNlY29uZC0+Z2V0Qm9vbGVh
bigicGFyc2VkT2siLCAmcHJldmlvdXNQYXJzZWRPayk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBib29sIHN1Y2Nlc3MgPSBhY3RpdmVJdC0+dmFsdWUtPmdldEJvb2xlYW4oInBhcnNlZE9rIiwg
JnByZXZpb3VzUGFyc2VkT2spOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3Mg
JiYgIXByZXZpb3VzUGFyc2VkT2spCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxk
SW5hY3RpdmF0ZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTUxOCw4ICs1MTgs
OCBAQCBQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JTdHls
ZTo6c3R5bGVXaXRoUHJvcGVydGllcygpIGNvbgogICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0
eU5hbWVUb1ByZXZpb3VzQWN0aXZlUHJvcGVydHkuc2V0KGNhbm9uaWNhbFByb3BlcnR5TmFtZSwg
cHJvcGVydHkpOwogCiAgICAgICAgICAgICAgICAgaWYgKHNob3VsZEluYWN0aXZhdGUpIHsKLSAg
ICAgICAgICAgICAgICAgICAgYWN0aXZlSXQtPnNlY29uZC0+c2V0U3RhdHVzKFR5cGVCdWlsZGVy
OjpDU1M6OkNTU1Byb3BlcnR5OjpTdGF0dXM6OkluYWN0aXZlKTsKLSAgICAgICAgICAgICAgICAg
ICAgYWN0aXZlSXQtPnNlY29uZC0+cmVtb3ZlKCJzaG9ydGhhbmROYW1lIik7CisgICAgICAgICAg
ICAgICAgICAgIGFjdGl2ZUl0LT52YWx1ZS0+c2V0U3RhdHVzKFR5cGVCdWlsZGVyOjpDU1M6OkNT
U1Byb3BlcnR5OjpTdGF0dXM6OkluYWN0aXZlKTsKKyAgICAgICAgICAgICAgICAgICAgYWN0aXZl
SXQtPnZhbHVlLT5yZW1vdmUoInNob3J0aGFuZE5hbWUiKTsKICAgICAgICAgICAgICAgICAgICAg
cHJvcGVydHlOYW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5LnNldChjYW5vbmljYWxQcm9wZXJ0
eU5hbWUsIHByb3BlcnR5KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2Ug
ewpAQCAtMTAxNCw3ICsxMDE0LDcgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3JTdHlsZT4gSW5zcGVj
dG9yU3R5bGVTaGVldDo6aW5zcGVjdG9yU3R5bGVGb3JJZChjb25zdCBJbnNwZWMKICAgICAgICAg
UmVmUHRyPEluc3BlY3RvclN0eWxlPiBpbnNwZWN0b3JTdHlsZSA9IEluc3BlY3RvclN0eWxlOjpj
cmVhdGUoaWQsIHN0eWxlLCB0aGlzKTsKICAgICAgICAgcmV0dXJuIGluc3BlY3RvclN0eWxlLnJl
bGVhc2UoKTsKICAgICB9Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgcmV0dXJuIGl0LT52
YWx1ZTsKIH0KIAogdm9pZCBJbnNwZWN0b3JTdHlsZVNoZWV0OjpyZW1lbWJlckluc3BlY3RvclN0
eWxlKFJlZlB0cjxJbnNwZWN0b3JTdHlsZT4gaW5zcGVjdG9yU3R5bGUpCkBAIC0xMDk5LDggKzEw
OTksOCBAQCBib29sIEluc3BlY3RvclN0eWxlU2hlZXQ6OmVuc3VyZVNvdXJjZURhdGEoKQogICAg
IGZvciAodW5zaWduZWQgaSA9IDAsIHNpemUgPSBydWxlcy5zaXplKCk7IGkgPCBzaXplOyArK2kp
IHsKICAgICAgICAgU3R5bGVSdWxlUmFuZ2VNYXA6Oml0ZXJhdG9yIGl0ID0gcnVsZVJhbmdlTWFw
LmZpbmQocnVsZXMuYXQoaSkpOwogICAgICAgICBpZiAoaXQgIT0gcnVsZVJhbmdlTWFwLmVuZCgp
KSB7Ci0gICAgICAgICAgICBmaXhVbnBhcnNlZFByb3BlcnR5UmFuZ2VzKGl0LT5zZWNvbmQuZ2V0
KCksIG1fcGFyc2VkU3R5bGVTaGVldC0+dGV4dCgpKTsKLSAgICAgICAgICAgIHJhbmdlc1ZlY3Rv
ci0+YXBwZW5kKGl0LT5zZWNvbmQpOworICAgICAgICAgICAgZml4VW5wYXJzZWRQcm9wZXJ0eVJh
bmdlcyhpdC0+dmFsdWUuZ2V0KCksIG1fcGFyc2VkU3R5bGVTaGVldC0+dGV4dCgpKTsKKyAgICAg
ICAgICAgIHJhbmdlc1ZlY3Rvci0+YXBwZW5kKGl0LT52YWx1ZSk7CiAgICAgICAgIH0KICAgICB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAKaW5kZXgg
Yjg5NTkzNzJiMGVmMzBiZGZmNWE4MDNlYWY5NzA5MDBmNzk4Nzc0MS4uMTQ4MzU0ZGFjZjM4ZGYy
ZTA2NjNkZDUxMGYxMzhkZWE3NDIyZmJlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvclZhbHVlcy5jcHAKQEAgLTcxMyw3ICs3MTMsNyBAQCBQYXNzUmVmUHRyPEluc3Bl
Y3RvclZhbHVlPiBJbnNwZWN0b3JPYmplY3Q6OmdldChjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0
CiAgICAgRGljdGlvbmFyeTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2RhdGEuZmluZChuYW1lKTsK
ICAgICBpZiAoaXQgPT0gbV9kYXRhLmVuZCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1
cm4gaXQtPnNlY29uZDsKKyAgICByZXR1cm4gaXQtPnZhbHVlOwogfQogCiB2b2lkIEluc3BlY3Rv
ck9iamVjdDo6cmVtb3ZlKGNvbnN0IFN0cmluZyYgbmFtZSkKQEAgLTczNSw5ICs3MzUsOSBAQCB2
b2lkIEluc3BlY3Rvck9iamVjdDo6d3JpdGVKU09OKFN0cmluZ0J1aWxkZXIqIG91dHB1dCkgY29u
c3QKICAgICAgICAgQVNTRVJUKGl0ICE9IG1fZGF0YS5lbmQoKSk7CiAgICAgICAgIGlmIChpKQog
ICAgICAgICAgICAgb3V0cHV0LT5hcHBlbmQoJywnKTsKLSAgICAgICAgZG91YmxlUXVvdGVTdHJp
bmcoaXQtPmZpcnN0LCBvdXRwdXQpOworICAgICAgICBkb3VibGVRdW90ZVN0cmluZyhpdC0+a2V5
LCBvdXRwdXQpOwogICAgICAgICBvdXRwdXQtPmFwcGVuZCgnOicpOwotICAgICAgICBpdC0+c2Vj
b25kLT53cml0ZUpTT04ob3V0cHV0KTsKKyAgICAgICAgaXQtPnZhbHVlLT53cml0ZUpTT04ob3V0
cHV0KTsKICAgICB9CiAgICAgb3V0cHV0LT5hcHBlbmQoJ30nKTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JXb3JrZXJBZ2VudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yV29ya2VyQWdlbnQuY3BwCmluZGV4IDFiMzg1OTU3
MWNhZmMyM2U0YzU0MWQzNDljMjYwZGExZmU0ZjNiOTYuLjA2MWY0NzRlZjEwNTAwNGNkODg2OGJm
NjVhN2FiYWRjNjVjZGNlYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JXb3JrZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvcldvcmtlckFnZW50LmNwcApAQCAtMTk5LDkgKzE5OSw5IEBAIHZvaWQgSW5zcGVjdG9y
V29ya2VyQWdlbnQ6OndvcmtlckNvbnRleHRUZXJtaW5hdGVkKFdvcmtlckNvbnRleHRQcm94eSog
cHJveHkpCiB7CiAgICAgbV9kZWRpY2F0ZWRXb3JrZXJzLnJlbW92ZShwcm94eSk7CiAgICAgZm9y
IChXb3JrZXJDaGFubmVsczo6aXRlcmF0b3IgaXQgPSBtX2lkVG9DaGFubmVsLmJlZ2luKCk7IGl0
ICE9IG1faWRUb0NoYW5uZWwuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgaWYgKHByb3h5ID09IGl0
LT5zZWNvbmQtPnByb3h5KCkpIHsKLSAgICAgICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmQtPndv
cmtlcigpLT53b3JrZXJUZXJtaW5hdGVkKGl0LT5maXJzdCk7Ci0gICAgICAgICAgICBkZWxldGUg
aXQtPnNlY29uZDsKKyAgICAgICAgaWYgKHByb3h5ID09IGl0LT52YWx1ZS0+cHJveHkoKSkgewor
ICAgICAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZC0+d29ya2VyKCktPndvcmtlclRlcm1pbmF0
ZWQoaXQtPmtleSk7CisgICAgICAgICAgICBkZWxldGUgaXQtPnZhbHVlOwogICAgICAgICAgICAg
bV9pZFRvQ2hhbm5lbC5yZW1vdmUoaXQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CkBAIC0yMTEsMTQgKzIxMSwxNCBAQCB2b2lkIEluc3BlY3RvcldvcmtlckFnZW50Ojp3b3JrZXJD
b250ZXh0VGVybWluYXRlZChXb3JrZXJDb250ZXh0UHJveHkqIHByb3h5KQogdm9pZCBJbnNwZWN0
b3JXb3JrZXJBZ2VudDo6Y3JlYXRlV29ya2VyRnJvbnRlbmRDaGFubmVsc0ZvckV4aXN0aW5nV29y
a2VycygpCiB7CiAgICAgZm9yIChEZWRpY2F0ZWRXb3JrZXJzOjppdGVyYXRvciBpdCA9IG1fZGVk
aWNhdGVkV29ya2Vycy5iZWdpbigpOyBpdCAhPSBtX2RlZGljYXRlZFdvcmtlcnMuZW5kKCk7ICsr
aXQpCi0gICAgICAgIGNyZWF0ZVdvcmtlckZyb250ZW5kQ2hhbm5lbChpdC0+Zmlyc3QsIGl0LT5z
ZWNvbmQpOworICAgICAgICBjcmVhdGVXb3JrZXJGcm9udGVuZENoYW5uZWwoaXQtPmtleSwgaXQt
PnZhbHVlKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JXb3JrZXJBZ2VudDo6ZGVzdHJveVdvcmtlckZy
b250ZW5kQ2hhbm5lbHMoKQogewogICAgIGZvciAoV29ya2VyQ2hhbm5lbHM6Oml0ZXJhdG9yIGl0
ID0gbV9pZFRvQ2hhbm5lbC5iZWdpbigpOyBpdCAhPSBtX2lkVG9DaGFubmVsLmVuZCgpOyArK2l0
KSB7Ci0gICAgICAgIGl0LT5zZWNvbmQtPmRpc2Nvbm5lY3RGcm9tV29ya2VyQ29udGV4dCgpOwot
ICAgICAgICBkZWxldGUgaXQtPnNlY29uZDsKKyAgICAgICAgaXQtPnZhbHVlLT5kaXNjb25uZWN0
RnJvbVdvcmtlckNvbnRleHQoKTsKKyAgICAgICAgZGVsZXRlIGl0LT52YWx1ZTsKICAgICB9CiAg
ICAgbV9pZFRvQ2hhbm5lbC5jbGVhcigpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL05ldHdvcmtSZXNvdXJjZXNEYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0YS5jcHAKaW5kZXggNTJlYmFmMzA3MDQ2ZGY0ZWE2NjUw
YTRiNDllNjBjOGUwMGQxYjczNi4uYzZlZDQ1NDZmMDYyYTExMTA1ZGY5MWI1YThiZGVmNTMwMjkz
YTJjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL05ldHdvcmtSZXNvdXJj
ZXNEYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvTmV0d29ya1Jlc291cmNl
c0RhdGEuY3BwCkBAIC0yNDYsOSArMjQ2LDkgQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VzRGF0YTo6
Y2xlYXIoY29uc3QgU3RyaW5nJiBwcmVzZXJ2ZWRMb2FkZXJJZCkKICAgICBSZXNvdXJjZURhdGFN
YXA6Oml0ZXJhdG9yIGl0OwogICAgIFJlc291cmNlRGF0YU1hcDo6aXRlcmF0b3IgZW5kID0gbV9y
ZXF1ZXN0SWRUb1Jlc291cmNlRGF0YU1hcC5lbmQoKTsKICAgICBmb3IgKGl0ID0gbV9yZXF1ZXN0
SWRUb1Jlc291cmNlRGF0YU1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAg
UmVzb3VyY2VEYXRhKiByZXNvdXJjZURhdGEgPSBpdC0+c2Vjb25kOworICAgICAgICBSZXNvdXJj
ZURhdGEqIHJlc291cmNlRGF0YSA9IGl0LT52YWx1ZTsKICAgICAgICAgaWYgKCFwcmVzZXJ2ZWRM
b2FkZXJJZC5pc051bGwoKSAmJiByZXNvdXJjZURhdGEtPmxvYWRlcklkKCkgPT0gcHJlc2VydmVk
TG9hZGVySWQpCi0gICAgICAgICAgICBwcmVzZXJ2ZWRNYXAuc2V0KGl0LT5maXJzdCwgaXQtPnNl
Y29uZCk7CisgICAgICAgICAgICBwcmVzZXJ2ZWRNYXAuc2V0KGl0LT5rZXksIGl0LT52YWx1ZSk7
CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGRlbGV0ZSByZXNvdXJjZURhdGE7CiAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luQWNjZXNzQ29udHJv
bC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmNw
cAppbmRleCBjMGY4OTQ1Y2Y4N2MzNTIwMmEyMzdiYjQyODU4MjU3MjJmNTQyNjYzLi45MDA3MzM1
Y2E1MjU0MmU5YzIxZjAzYzllMTA4OGJhZTMxNTdkMjA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmNwcApAQCAtNjgsNyArNjgsNyBA
QCBib29sIGlzU2ltcGxlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0KGNvbnN0IFN0cmluZyYgbWV0
aG9kLCBjb25zdCBIVFRQSGVhZGVyTWFwJgogCiAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gaGVhZGVyTWFwLmVuZCgpOwogICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBoZWFkZXJNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0g
ICAgICAgIGlmICghaXNPbkFjY2Vzc0NvbnRyb2xTaW1wbGVSZXF1ZXN0SGVhZGVyV2hpdGVsaXN0
KGl0LT5maXJzdCwgaXQtPnNlY29uZCkpCisgICAgICAgIGlmICghaXNPbkFjY2Vzc0NvbnRyb2xT
aW1wbGVSZXF1ZXN0SGVhZGVyV2hpdGVsaXN0KGl0LT5rZXksIGl0LT52YWx1ZSkpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0xMTYsMTQgKzExNiwxNCBAQCBSZXNvdXJj
ZVJlcXVlc3QgY3JlYXRlQWNjZXNzQ29udHJvbFByZWZsaWdodFJlcXVlc3QoY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZQogICAgIGlmIChyZXF1ZXN0SGVhZGVyRmllbGRzLnNpemUoKSA+IDAp
IHsKICAgICAgICAgU3RyaW5nQnVpbGRlciBoZWFkZXJCdWZmZXI7CiAgICAgICAgIEhUVFBIZWFk
ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcmVxdWVzdEhlYWRlckZpZWxkcy5iZWdpbigpOwot
ICAgICAgICBoZWFkZXJCdWZmZXIuYXBwZW5kKGl0LT5maXJzdCk7CisgICAgICAgIGhlYWRlckJ1
ZmZlci5hcHBlbmQoaXQtPmtleSk7CiAgICAgICAgICsraXQ7CiAKICAgICAgICAgSFRUUEhlYWRl
ck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcmVxdWVzdEhlYWRlckZpZWxkcy5lbmQoKTsKICAg
ICAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgaGVhZGVyQnVmZmVy
LmFwcGVuZCgnLCcpOwogICAgICAgICAgICAgaGVhZGVyQnVmZmVyLmFwcGVuZCgnICcpOwotICAg
ICAgICAgICAgaGVhZGVyQnVmZmVyLmFwcGVuZChpdC0+Zmlyc3QpOworICAgICAgICAgICAgaGVh
ZGVyQnVmZmVyLmFwcGVuZChpdC0+a2V5KTsKICAgICAgICAgfQogCiAgICAgICAgIHByZWZsaWdo
dFJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKCJBY2Nlc3MtQ29udHJvbC1SZXF1ZXN0LUhlYWRl
cnMiLCBoZWFkZXJCdWZmZXIudG9TdHJpbmcoKS5sb3dlcigpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmNwcApp
bmRleCAxOThkZGFmYTNjN2M2NzI5NTgyNWYwYTY4YjgyYzc4YjAwNDg3OThlLi4zMWM1YjVlYmRk
ZDMwODRlOWEwZTM2ZDM1NGIxMDk4YmQ5ZTc5ZTE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUuY3BwCkBAIC0x
MjcsOCArMTI3LDggQEAgYm9vbCBDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlSXRlbTo6
YWxsb3dzQ3Jvc3NPcmlnaW5IZWFkZXJzKGNvbnN0IEhUVFBIZWEKIHsKICAgICBIVFRQSGVhZGVy
TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSByZXF1ZXN0SGVhZGVycy5lbmQoKTsKICAgICBmb3Ig
KEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcmVxdWVzdEhlYWRlcnMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmICghbV9oZWFkZXJzLmNvbnRhaW5zKGl0
LT5maXJzdCkgJiYgIWlzT25BY2Nlc3NDb250cm9sU2ltcGxlUmVxdWVzdEhlYWRlcldoaXRlbGlz
dChpdC0+Zmlyc3QsIGl0LT5zZWNvbmQpKSB7Ci0gICAgICAgICAgICBlcnJvckRlc2NyaXB0aW9u
ID0gIlJlcXVlc3QgaGVhZGVyIGZpZWxkICIgKyBpdC0+Zmlyc3Quc3RyaW5nKCkgKyAiIGlzIG5v
dCBhbGxvd2VkIGJ5IEFjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnMuIjsKKyAgICAgICAgaWYg
KCFtX2hlYWRlcnMuY29udGFpbnMoaXQtPmtleSkgJiYgIWlzT25BY2Nlc3NDb250cm9sU2ltcGxl
UmVxdWVzdEhlYWRlcldoaXRlbGlzdChpdC0+a2V5LCBpdC0+dmFsdWUpKSB7CisgICAgICAgICAg
ICBlcnJvckRlc2NyaXB0aW9uID0gIlJlcXVlc3QgaGVhZGVyIGZpZWxkICIgKyBpdC0+a2V5LnN0
cmluZygpICsgIiBpcyBub3QgYWxsb3dlZCBieSBBY2Nlc3MtQ29udHJvbC1BbGxvdy1IZWFkZXJz
LiI7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CkBAIC0xNjks
NyArMTY5LDcgQEAgYm9vbCBDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlOjpjYW5Ta2lw
UHJlZmxpZ2h0KGNvbnN0IFN0cmluZyYgb3JpZ2luLCBjb24KICAgICBpZiAoY2FjaGVJdCA9PSBt
X3ByZWZsaWdodEhhc2hNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlm
IChjYWNoZUl0LT5zZWNvbmQtPmFsbG93c1JlcXVlc3QoaW5jbHVkZUNyZWRlbnRpYWxzLCBtZXRo
b2QsIHJlcXVlc3RIZWFkZXJzKSkKKyAgICBpZiAoY2FjaGVJdC0+dmFsdWUtPmFsbG93c1JlcXVl
c3QoaW5jbHVkZUNyZWRlbnRpYWxzLCBtZXRob2QsIHJlcXVlc3RIZWFkZXJzKSkKICAgICAgICAg
cmV0dXJuIHRydWU7CiAKICAgICBtX3ByZWZsaWdodEhhc2hNYXAucmVtb3ZlKGNhY2hlSXQpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAKaW5kZXggY2Q1MDUzZjZjOTE2
Y2YyNDJmZDYzODk4M2I4Y2M1NGZiNzk3MjljNC4uMWMxOTBkYWU2NDE4OTM3ZWMzN2MxODFhODE5
ODcwYTg1NjFlZTU5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50
TG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3Bw
CkBAIC01NTcsNyArNTU3LDcgQEAgdm9pZCBEb2N1bWVudExvYWRlcjo6Z2V0U3VicmVzb3VyY2Vz
KFZlY3RvcjxQYXNzUmVmUHRyPEFyY2hpdmVSZXNvdXJjZT4gPiYgc3VicmUKICAgICBjb25zdCBD
YWNoZWRSZXNvdXJjZUxvYWRlcjo6RG9jdW1lbnRSZXNvdXJjZU1hcCYgYWxsUmVzb3VyY2VzID0g
ZG9jdW1lbnQtPmNhY2hlZFJlc291cmNlTG9hZGVyKCktPmFsbENhY2hlZFJlc291cmNlcygpOwog
ICAgIENhY2hlZFJlc291cmNlTG9hZGVyOjpEb2N1bWVudFJlc291cmNlTWFwOjpjb25zdF9pdGVy
YXRvciBlbmQgPSBhbGxSZXNvdXJjZXMuZW5kKCk7CiAgICAgZm9yIChDYWNoZWRSZXNvdXJjZUxv
YWRlcjo6RG9jdW1lbnRSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBhbGxSZXNvdXJj
ZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFJlZlB0cjxBcmNoaXZlUmVz
b3VyY2U+IHN1YnJlc291cmNlID0gdGhpcy0+c3VicmVzb3VyY2UoS1VSTChQYXJzZWRVUkxTdHJp
bmcsIGl0LT5zZWNvbmQtPnVybCgpKSk7CisgICAgICAgIFJlZlB0cjxBcmNoaXZlUmVzb3VyY2U+
IHN1YnJlc291cmNlID0gdGhpcy0+c3VicmVzb3VyY2UoS1VSTChQYXJzZWRVUkxTdHJpbmcsIGl0
LT52YWx1ZS0+dXJsKCkpKTsKICAgICAgICAgaWYgKHN1YnJlc291cmNlKQogICAgICAgICAgICAg
c3VicmVzb3VyY2VzLmFwcGVuZChzdWJyZXNvdXJjZS5yZWxlYXNlKCkpOwogICAgIH0KQEAgLTU4
OSw4ICs1ODksOCBAQCB2b2lkIERvY3VtZW50TG9hZGVyOjpzdWJzdGl0dXRlUmVzb3VyY2VEZWxp
dmVyeVRpbWVyRmlyZWQoVGltZXI8RG9jdW1lbnRMb2FkZXI+KgogCiAgICAgU3Vic3RpdHV0ZVJl
c291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBjb3B5LmVuZCgpOwogICAgIGZvciAoU3Vi
c3RpdHV0ZVJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGNvcHkuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFJlZlB0cjxSZXNvdXJjZUxvYWRlcj4gbG9hZGVyID0g
aXQtPmZpcnN0OwotICAgICAgICBTdWJzdGl0dXRlUmVzb3VyY2UqIHJlc291cmNlID0gaXQtPnNl
Y29uZC5nZXQoKTsKKyAgICAgICAgUmVmUHRyPFJlc291cmNlTG9hZGVyPiBsb2FkZXIgPSBpdC0+
a2V5OworICAgICAgICBTdWJzdGl0dXRlUmVzb3VyY2UqIHJlc291cmNlID0gaXQtPnZhbHVlLmdl
dCgpOwogICAgICAgICAKICAgICAgICAgaWYgKHJlc291cmNlKSB7CiAgICAgICAgICAgICBTaGFy
ZWRCdWZmZXIqIGRhdGEgPSByZXNvdXJjZS0+ZGF0YSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvbG9hZGVyL01haW5SZXNvdXJjZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvTWFpblJlc291cmNlTG9hZGVyLmNwcAppbmRleCAzYTU3NjE1MjdmMmRiNTdjNWJiMDBkNjEx
MWUwYjFjZWZjMjM4OTUwLi42MjAxZjMwYWJmZDU2Y2Y1YjNjNmE5ZTM0OWZmZTU1NDY1MjYxNjVl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvTWFpblJlc291cmNlTG9hZGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvTWFpblJlc291cmNlTG9hZGVyLmNwcApAQCAt
MzY1LDcgKzM2NSw3IEBAIHZvaWQgTWFpblJlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9u
c2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcikKIAogICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gci5odHRwSGVhZGVyRmllbGRzKCkuZmluZChBdG9taWNTdHJpbmcoIngt
ZnJhbWUtb3B0aW9ucyIpKTsKICAgICBpZiAoaXQgIT0gci5odHRwSGVhZGVyRmllbGRzKCkuZW5k
KCkpIHsKLSAgICAgICAgU3RyaW5nIGNvbnRlbnQgPSBpdC0+c2Vjb25kOworICAgICAgICBTdHJp
bmcgY29udGVudCA9IGl0LT52YWx1ZTsKICAgICAgICAgaWYgKG1fZnJhbWUtPmxvYWRlcigpLT5z
aG91bGRJbnRlcnJ1cHRMb2FkRm9yWEZyYW1lT3B0aW9ucyhjb250ZW50LCByLnVybCgpKSkgewog
ICAgICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjb250aW51ZUFmdGVyWEZyYW1l
T3B0aW9uc0RlbmllZChtX2ZyYW1lLmdldCgpLCBkb2N1bWVudExvYWRlcigpLCBpZGVudGlmaWVy
KCksIHIpOwogICAgICAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGNvbnNvbGVN
ZXNzYWdlLCAoIlJlZnVzZWQgdG8gZGlzcGxheSBkb2N1bWVudCBiZWNhdXNlIGRpc3BsYXkgZm9y
YmlkZGVuIGJ5IFgtRnJhbWUtT3B0aW9ucy5cbiIpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL1Jlc291cmNlTG9hZFNjaGVkdWxlci5jcHAKaW5kZXggODAwNGQ4ZjJlYjJkOGJjMzYwNmEw
NjlmYzdlZWEzNTFhZmNmY2RhYS4uOGViNDRkNDlkMjlhNjg0NjY0ZDgzMjVjYTI2MWY1NzVjNjQx
MGI2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFNjaGVk
dWxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFNjaGVkdWxl
ci5jcHAKQEAgLTE3NCw3ICsxNzQsNyBAQCB2b2lkIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2Vy
dmVQZW5kaW5nUmVxdWVzdHMoUmVzb3VyY2VMb2FkUHJpb3JpdHkgbWluaW11bVByaQogICAgIG1f
aG9zdHMuY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgIEhvc3RNYXA6Oml0ZXJhdG9yIGVuZCA9IG1f
aG9zdHMuZW5kKCk7CiAgICAgZm9yIChIb3N0TWFwOjppdGVyYXRvciBpdGVyID0gbV9ob3N0cy5i
ZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQotICAgICAgICBob3N0c1RvU2VydmUuYXBwZW5k
KGl0ZXItPnNlY29uZCk7CisgICAgICAgIGhvc3RzVG9TZXJ2ZS5hcHBlbmQoaXRlci0+dmFsdWUp
OwogCiAgICAgaW50IHNpemUgPSBob3N0c1RvU2VydmUuc2l6ZSgpOwogICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgc2l6ZTsgKytpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
U3ViZnJhbWVMb2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1N1YmZyYW1lTG9hZGVy
LmNwcAppbmRleCAzZDdmNWM1ZThiZmY3YWUwZDhiMGJhYThmODEzMGNlZDU4MmUxZTNjLi5kZDEy
NDI3Zjk0YjE2MjkwM2JkMmE5ZGEwMGMwZWVjODEyMTEzOTI3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvU3ViZnJhbWVMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9TdWJmcmFtZUxvYWRlci5jcHAKQEAgLTE5OSwxMiArMTk5LDEyIEBAIFBhc3NSZWZQdHI8
V2lkZ2V0PiBTdWJmcmFtZUxvYWRlcjo6Y3JlYXRlSmF2YUFwcGxldFdpZGdldChjb25zdCBMYXlv
dXRTaXplJiBzaXplCiAgICAgVmVjdG9yPFN0cmluZz4gcGFyYW1WYWx1ZXM7CiAgICAgSGFzaE1h
cDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGFyZ3MuZW5kKCk7CiAgICAg
Zm9yIChIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBhcmdzLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2Uo
aXQtPmZpcnN0LCAiYmFzZXVybCIpKQotICAgICAgICAgICAgYmFzZVVSTFN0cmluZyA9IGl0LT5z
ZWNvbmQ7Ci0gICAgICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGl0LT5maXJzdCwgImNv
ZGViYXNlIikpCi0gICAgICAgICAgICBjb2RlQmFzZVVSTFN0cmluZyA9IGl0LT5zZWNvbmQ7Ci0g
ICAgICAgIHBhcmFtTmFtZXMuYXBwZW5kKGl0LT5maXJzdCk7Ci0gICAgICAgIHBhcmFtVmFsdWVz
LmFwcGVuZChpdC0+c2Vjb25kKTsKKyAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGl0LT5r
ZXksICJiYXNldXJsIikpCisgICAgICAgICAgICBiYXNlVVJMU3RyaW5nID0gaXQtPnZhbHVlOwor
ICAgICAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShpdC0+a2V5LCAiY29kZWJhc2UiKSkK
KyAgICAgICAgICAgIGNvZGVCYXNlVVJMU3RyaW5nID0gaXQtPnZhbHVlOworICAgICAgICBwYXJh
bU5hbWVzLmFwcGVuZChpdC0+a2V5KTsKKyAgICAgICAgcGFyYW1WYWx1ZXMuYXBwZW5kKGl0LT52
YWx1ZSk7CiAgICAgfQogCiAgICAgaWYgKCFjb2RlQmFzZVVSTFN0cmluZy5pc0VtcHR5KCkpIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNh
Y2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hl
LmNwcAppbmRleCA2M2NkN2JiYmZhODc4OWY0YWRiM2RmNTJjYjRlOWMxN2RkNzE1OTQ0Li5iN2Vh
NjUyNGM0MDM5NzVmZjBkZjk0NmEyZjBkMDExY2IxNzAwYTZhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGUuY3BwCkBAIC0xMDAsMTEg
KzEwMCwxMSBAQCB1bnNpZ25lZCBBcHBsaWNhdGlvbkNhY2hlOjpyZW1vdmVSZXNvdXJjZShjb25z
dCBTdHJpbmcmIHVybCkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAvLyBUaGUgcmVzb3VyY2Ug
ZXhpc3RzLCBnZXQgaXRzIHR5cGUgc28gd2UgY2FuIHJldHVybiBpdC4KLSAgICB1bnNpZ25lZCB0
eXBlID0gaXQtPnNlY29uZC0+dHlwZSgpOworICAgIHVuc2lnbmVkIHR5cGUgPSBpdC0+dmFsdWUt
PnR5cGUoKTsKIAogICAgIG1fcmVzb3VyY2VzLnJlbW92ZShpdCk7CiAKLSAgICBtX2VzdGltYXRl
ZFNpemVJblN0b3JhZ2UgLT0gaXQtPnNlY29uZC0+ZXN0aW1hdGVkU2l6ZUluU3RvcmFnZSgpOwor
ICAgIG1fZXN0aW1hdGVkU2l6ZUluU3RvcmFnZSAtPSBpdC0+dmFsdWUtPmVzdGltYXRlZFNpemVJ
blN0b3JhZ2UoKTsKIAogICAgIHJldHVybiB0eXBlOwogfSAgICAKQEAgLTE4MCw3ICsxODAsNyBA
QCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGU6OmNsZWFyU3RvcmFnZUlEKCkKICAgICAKICAgICBSZXNv
dXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9yZXNvdXJjZXMuZW5kKCk7CiAgICAgZm9y
IChSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPmNsZWFyU3RvcmFnZUlEKCk7Cisg
ICAgICAgIGl0LT52YWx1ZS0+Y2xlYXJTdG9yYWdlSUQoKTsKIH0KICAgICAKIHZvaWQgQXBwbGlj
YXRpb25DYWNoZTo6ZGVsZXRlQ2FjaGVGb3JPcmlnaW4oU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikK
QEAgLTIxOCw4ICsyMTgsOCBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGU6OmR1bXAoKQogICAgIEhh
c2hNYXA8U3RyaW5nLCBSZWZQdHI8QXBwbGljYXRpb25DYWNoZVJlc291cmNlPiA+Ojpjb25zdF9p
dGVyYXRvciBlbmQgPSBtX3Jlc291cmNlcy5lbmQoKTsKICAgICAKICAgICBmb3IgKEhhc2hNYXA8
U3RyaW5nLCBSZWZQdHI8QXBwbGljYXRpb25DYWNoZVJlc291cmNlPiA+Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBw
cmludGYoIiVzICIsIGl0LT5maXJzdC5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIEFwcGxpY2F0
aW9uQ2FjaGVSZXNvdXJjZTo6ZHVtcFR5cGUoaXQtPnNlY29uZC0+dHlwZSgpKTsKKyAgICAgICAg
cHJpbnRmKCIlcyAiLCBpdC0+a2V5LmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgQXBwbGljYXRp
b25DYWNoZVJlc291cmNlOjpkdW1wVHlwZShpdC0+dmFsdWUtPnR5cGUoKSk7CiAgICAgfQogfQog
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGlj
YXRpb25DYWNoZUdyb3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBs
aWNhdGlvbkNhY2hlR3JvdXAuY3BwCmluZGV4IDRlNDI5MzhiYjVkNTdkNjEyYmRmMzUwY2YxOTM0
MDQwMjQyNzlhZjkuLmQ2NDUwMzBlZjAwZTdkMDE3ODc5MGY3Nzk0MGM3YjBkYzhlM2EzMDMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hl
R3JvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlv
bkNhY2hlR3JvdXAuY3BwCkBAIC03NzUsOSArNzc1LDkgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hl
R3JvdXA6OmRpZEZpbmlzaExvYWRpbmdNYW5pZmVzdCgpCiAgICAgaWYgKGlzVXBncmFkZUF0dGVt
cHQpIHsKICAgICAgICAgQXBwbGljYXRpb25DYWNoZTo6UmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IG1fbmV3ZXN0Q2FjaGUtPmVuZCgpOwogICAgICAgICBmb3IgKEFwcGxpY2F0aW9u
Q2FjaGU6OlJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fbmV3ZXN0Q2FjaGUtPmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgdW5zaWduZWQgdHlwZSA9IGl0
LT5zZWNvbmQtPnR5cGUoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIHR5cGUgPSBpdC0+dmFsdWUt
PnR5cGUoKTsKICAgICAgICAgICAgIGlmICh0eXBlICYgQXBwbGljYXRpb25DYWNoZVJlc291cmNl
OjpNYXN0ZXIpCi0gICAgICAgICAgICAgICAgYWRkRW50cnkoaXQtPmZpcnN0LCB0eXBlKTsKKyAg
ICAgICAgICAgICAgICBhZGRFbnRyeShpdC0+a2V5LCB0eXBlKTsKICAgICAgICAgfQogICAgIH0K
ICAgICAKQEAgLTEwMTYsNyArMTAxNiw3IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpz
dGFydExvYWRpbmdFbnRyeSgpCiAKICAgICBBU1NFUlQoIW1fY3VycmVudEhhbmRsZSk7CiAgICAg
Ci0gICAgbV9jdXJyZW50SGFuZGxlID0gY3JlYXRlUmVzb3VyY2VIYW5kbGUoS1VSTChQYXJzZWRV
UkxTdHJpbmcsIGl0LT5maXJzdCksIG1fbmV3ZXN0Q2FjaGUgPyBtX25ld2VzdENhY2hlLT5yZXNv
dXJjZUZvclVSTChpdC0+Zmlyc3QpIDogMCk7CisgICAgbV9jdXJyZW50SGFuZGxlID0gY3JlYXRl
UmVzb3VyY2VIYW5kbGUoS1VSTChQYXJzZWRVUkxTdHJpbmcsIGl0LT5rZXkpLCBtX25ld2VzdENh
Y2hlID8gbV9uZXdlc3RDYWNoZS0+cmVzb3VyY2VGb3JVUkwoaXQtPmtleSkgOiAwKTsKIH0KIAog
dm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmRlbGl2ZXJEZWxheWVkTWFpblJlc291cmNlcygp
CkBAIC0xMDY1LDcgKzEwNjUsNyBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6YWRkRW50
cnkoY29uc3QgU3RyaW5nJiB1cmwsIHVuc2lnbmVkIHR5cGUpCiAgICAgRW50cnlNYXA6OkFkZFJl
c3VsdCByZXN1bHQgPSBtX3BlbmRpbmdFbnRyaWVzLmFkZCh1cmwsIHR5cGUpOwogICAgIAogICAg
IGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25k
IHw9IHR5cGU7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgfD0gdHlwZTsKIH0KIAog
dm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmFzc29jaWF0ZURvY3VtZW50TG9hZGVyV2l0aENh
Y2hlKERvY3VtZW50TG9hZGVyKiBsb2FkZXIsIEFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hlKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVI
b3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hl
SG9zdC5jcHAKaW5kZXggODAxYzFiMzY3MDMxYTMzOWRiNDQ3MDdhOTJkMWJjODBkNDFkOGM3OS4u
ZmU5ZjAxMGEwZmU2NTAzZDBiYzVlNWI5Mjc3MGEzZjdiNjQzNDRmZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVIb3N0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUhvc3QuY3Bw
CkBAIC0yODIsNyArMjgyLDcgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6ZmlsbFJlc291
cmNlTGlzdChSZXNvdXJjZUluZm9MaXN0KiByZXNvdXJjZXMpCiAgICAgIAogICAgIEFwcGxpY2F0
aW9uQ2FjaGU6OlJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBjYWNoZS0+ZW5kKCk7
CiAgICAgZm9yIChBcHBsaWNhdGlvbkNhY2hlOjpSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBjYWNoZS0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFJlZlB0cjxB
cHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+IHJlc291cmNlID0gaXQtPnNlY29uZDsKKyAgICAgICAg
UmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4gcmVzb3VyY2UgPSBpdC0+dmFsdWU7CiAg
ICAgICAgIHVuc2lnbmVkIHR5cGUgPSByZXNvdXJjZS0+dHlwZSgpOwogICAgICAgICBib29sIGlz
TWFzdGVyICAgPSB0eXBlICYgQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpNYXN0ZXI7CiAgICAg
ICAgIGJvb2wgaXNNYW5pZmVzdCA9IHR5cGUgJiBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6Ok1h
bmlmZXN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxp
Y2F0aW9uQ2FjaGVSZXNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUv
QXBwbGljYXRpb25DYWNoZVJlc291cmNlLmNwcAppbmRleCBkODMxNzg0YjQxOTZhZGYzODJjZjM1
NWUwZWVmMDJkNmE3YTgwNzkwLi45OTc2NmUzYTY2YmQzNmViNDJmZWQyYTkyNjlkMzRiMDY2MTk0
ZDdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRp
b25DYWNoZVJlc291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUv
QXBwbGljYXRpb25DYWNoZVJlc291cmNlLmNwcApAQCAtNTQsNyArNTQsNyBAQCBpbnQ2NF90IEFw
cGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6ZXN0aW1hdGVkU2l6ZUluU3RvcmFnZSgpCiAKICAgICBI
VFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSByZXNwb25zZSgpLmh0dHBIZWFkZXJG
aWVsZHMoKS5lbmQoKTsKICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gcmVzcG9uc2UoKS5odHRwSGVhZGVyRmllbGRzKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KQotICAgICAgICBtX2VzdGltYXRlZFNpemVJblN0b3JhZ2UgKz0gKGl0LT5maXJzdC5sZW5ndGgo
KSArIGl0LT5zZWNvbmQubGVuZ3RoKCkgKyAyKSAqIHNpemVvZihVQ2hhcik7CisgICAgICAgIG1f
ZXN0aW1hdGVkU2l6ZUluU3RvcmFnZSArPSAoaXQtPmtleS5sZW5ndGgoKSArIGl0LT52YWx1ZS5s
ZW5ndGgoKSArIDIpICogc2l6ZW9mKFVDaGFyKTsKIAogICAgIG1fZXN0aW1hdGVkU2l6ZUluU3Rv
cmFnZSArPSB1cmwoKS5zdHJpbmcoKS5sZW5ndGgoKSAqIHNpemVvZihVQ2hhcik7CiAgICAgbV9l
c3RpbWF0ZWRTaXplSW5TdG9yYWdlICs9IHNpemVvZihpbnQpOyAvLyByZXNwb25zZSgpLm1faHR0
cFN0YXR1c0NvZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9B
cHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2Fj
aGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwCmluZGV4IDVkMTAzYjJmZjdiNGNiYTU0ZTAz
N2JhNmM4Nzk2MjMwNGQwNWVlNjEuLjVhOTA4MWZmMmRlYzhmY2U2MjIzMTc4YjBlMDljNThmNWIy
ODk4ZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNh
dGlvbkNhY2hlU3RvcmFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hl
L0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcApAQCAtMTM3LDggKzEzNyw4IEBAIEFwcGxpY2F0
aW9uQ2FjaGVHcm91cCogQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmZpbmRPckNyZWF0ZUNhY2hl
R3JvdXAoY29uc3QgS1VSCiAgICAgQ2FjaGVHcm91cE1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1f
Y2FjaGVzSW5NZW1vcnkuYWRkKG1hbmlmZXN0VVJMLCAwKTsKICAgICAKICAgICBpZiAoIXJlc3Vs
dC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIEFTU0VSVChyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7
Ci0gICAgICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgQVNTRVJU
KHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOworICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZTsKICAgICB9CiAKICAgICAvLyBMb29rIHVwIHRoZSBncm91cCBpbiB0aGUgZGF0YWJh
c2UKQEAgLTE1MCw3ICsxNTAsNyBAQCBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIEFwcGxpY2F0aW9u
Q2FjaGVTdG9yYWdlOjpmaW5kT3JDcmVhdGVDYWNoZUdyb3VwKGNvbnN0IEtVUgogICAgICAgICBt
X2NhY2hlSG9zdFNldC5hZGQodXJsSG9zdEhhc2gobWFuaWZlc3RVUkwpKTsKICAgICB9CiAgICAg
Ci0gICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBncm91cDsKKyAgICByZXN1bHQuaXRlcmF0
b3ItPnZhbHVlID0gZ3JvdXA7CiAgICAgCiAgICAgcmV0dXJuIGdyb3VwOwogfQpAQCAtMTk3LDcg
KzE5Nyw3IEBAIEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6
OmNhY2hlR3JvdXBGb3JVUkwoY29uc3QgS1VSTCYgdXJsCiAgICAgLy8gQ2hlY2sgaWYgYSBjYWNo
ZSBhbHJlYWR5IGV4aXN0cyBpbiBtZW1vcnkuCiAgICAgQ2FjaGVHcm91cE1hcDo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gbV9jYWNoZXNJbk1lbW9yeS5lbmQoKTsKICAgICBmb3IgKENhY2hlR3JvdXBN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9jYWNoZXNJbk1lbW9yeS5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKLSAgICAgICAgQXBwbGljYXRpb25DYWNoZUdyb3VwKiBncm91cCA9IGl0LT5z
ZWNvbmQ7CisgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogZ3JvdXAgPSBpdC0+dmFsdWU7
CiAKICAgICAgICAgQVNTRVJUKCFncm91cC0+aXNPYnNvbGV0ZSgpKTsKIApAQCAtMjY4LDcgKzI2
OCw3IEBAIEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmZh
bGxiYWNrQ2FjaGVHcm91cEZvclVSTChjb25zdCBLCiAgICAgLy8gQ2hlY2sgaWYgYW4gYXBwcm9w
cmlhdGUgY2FjaGUgYWxyZWFkeSBleGlzdHMgaW4gbWVtb3J5LgogICAgIENhY2hlR3JvdXBNYXA6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fY2FjaGVzSW5NZW1vcnkuZW5kKCk7CiAgICAgZm9yIChD
YWNoZUdyb3VwTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fY2FjaGVzSW5NZW1vcnkuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogZ3Jv
dXAgPSBpdC0+c2Vjb25kOworICAgICAgICBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIGdyb3VwID0g
aXQtPnZhbHVlOwogICAgICAgICAKICAgICAgICAgQVNTRVJUKCFncm91cC0+aXNPYnNvbGV0ZSgp
KTsKIApAQCAtNzEzLDEzICs3MTMsMTMgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6
c3RvcmUoQXBwbGljYXRpb25DYWNoZSogY2FjaGUsIFJlc291cmNlU3RvcmFnZUlESm8KICAgICB7
CiAgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGU6OlJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBl
bmQgPSBjYWNoZS0+ZW5kKCk7CiAgICAgICAgIGZvciAoQXBwbGljYXRpb25DYWNoZTo6UmVzb3Vy
Y2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY2FjaGUtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgewotICAgICAgICAgICAgdW5zaWduZWQgb2xkU3RvcmFnZUlEID0gaXQtPnNlY29uZC0+c3Rv
cmFnZUlEKCk7Ci0gICAgICAgICAgICBpZiAoIXN0b3JlKGl0LT5zZWNvbmQuZ2V0KCksIGNhY2hl
U3RvcmFnZUlEKSkKKyAgICAgICAgICAgIHVuc2lnbmVkIG9sZFN0b3JhZ2VJRCA9IGl0LT52YWx1
ZS0+c3RvcmFnZUlEKCk7CisgICAgICAgICAgICBpZiAoIXN0b3JlKGl0LT52YWx1ZS5nZXQoKSwg
Y2FjaGVTdG9yYWdlSUQpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAg
ICAgICAgLy8gU3RvcmluZyB0aGUgcmVzb3VyY2Ugc3VjY2VlZGVkLiBMb2cgaXRzIG9sZCBzdG9y
YWdlSUQgaW4gY2FzZQogICAgICAgICAgICAgLy8gaXQgbmVlZHMgdG8gYmUgcmVzdG9yZWQgbGF0
ZXIuCi0gICAgICAgICAgICBzdG9yYWdlSURKb3VybmFsLT5hZGQoaXQtPnNlY29uZC5nZXQoKSwg
b2xkU3RvcmFnZUlEKTsKKyAgICAgICAgICAgIHN0b3JhZ2VJREpvdXJuYWwtPmFkZChpdC0+dmFs
dWUuZ2V0KCksIG9sZFN0b3JhZ2VJRCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC04Mzks
OSArODM5LDkgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmUoQXBwbGljYXRp
b25DYWNoZVJlc291cmNlKiByZXNvdXJjZSwgdW5zaWduZWQKICAgICAKICAgICBIVFRQSGVhZGVy
TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSByZXNvdXJjZS0+cmVzcG9uc2UoKS5odHRwSGVhZGVy
RmllbGRzKCkuZW5kKCk7CiAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IHJlc291cmNlLT5yZXNwb25zZSgpLmh0dHBIZWFkZXJGaWVsZHMoKS5iZWdpbigpOyBpdCE9
IGVuZDsgKytpdCkgewotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+Zmlyc3QpOwor
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+a2V5KTsKICAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQoKFVDaGFyKSc6Jyk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0
LT5zZWNvbmQpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+dmFsdWUpOwogICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgoVUNoYXIpJ1xuJyk7CiAgICAgfQogICAgIApAQCAt
MTI0MSw3ICsxMjQxLDcgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZW1wdHkoKQog
ICAgIC8vIHVudGlsIGEgY2FjaGUgdXBkYXRlIHByb2Nlc3MgaGFzIGJlZW4gaW5pdGlhdGVkLgog
ICAgIENhY2hlR3JvdXBNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fY2FjaGVzSW5NZW1vcnku
ZW5kKCk7CiAgICAgZm9yIChDYWNoZUdyb3VwTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fY2Fj
aGVzSW5NZW1vcnkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25k
LT5jbGVhclN0b3JhZ2VJRCgpOworICAgICAgICBpdC0+dmFsdWUtPmNsZWFyU3RvcmFnZUlEKCk7
CiAgICAgCiAgICAgY2hlY2tGb3JEZWxldGVkUmVzb3VyY2VzKCk7CiB9CkBAIC0xMzAzLDcgKzEz
MDMsNyBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZUNvcHlPZkNhY2hlKGNv
bnN0IFN0cmluZyYgY2FjaGVEaXJlY3RvcnksIEFwcAogICAgIC8vIFRyYXZlcnNlIHRoZSBjYWNo
ZSBhbmQgYWRkIGNvcGllcyBvZiBhbGwgcmVzb3VyY2VzLgogICAgIEFwcGxpY2F0aW9uQ2FjaGU6
OlJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBjYWNoZS0+ZW5kKCk7CiAgICAgZm9y
IChBcHBsaWNhdGlvbkNhY2hlOjpSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjYWNo
ZS0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVS
ZXNvdXJjZSogcmVzb3VyY2UgPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICBBcHBsaWNhdGlv
bkNhY2hlUmVzb3VyY2UqIHJlc291cmNlID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAKICAg
ICAgICAgUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4gcmVzb3VyY2VDb3B5ID0gQXBw
bGljYXRpb25DYWNoZVJlc291cmNlOjpjcmVhdGUocmVzb3VyY2UtPnVybCgpLCByZXNvdXJjZS0+
cmVzcG9uc2UoKSwgcmVzb3VyY2UtPnR5cGUoKSwgcmVzb3VyY2UtPmRhdGEoKSwgcmVzb3VyY2Ut
PnBhdGgoKSk7CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2Fy
Y2hpdmUvQXJjaGl2ZUZhY3RvcnkuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUv
QXJjaGl2ZUZhY3RvcnkuY3BwCmluZGV4IDUyMWRlYjFkNzA0NmI1MDVmNzA3NTRmZDJiYjVhZTg3
MGU3NDE0NTkuLjJmY2YzMjk0MDI1YWU3MzRlMzVlMGQxN2M2OWUyNTE2NDI3NzRlNzkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL0FyY2hpdmVGYWN0b3J5LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9BcmNoaXZlRmFjdG9yeS5jcHAKQEAg
LTkyLDcgKzkyLDcgQEAgdm9pZCBBcmNoaXZlRmFjdG9yeTo6cmVnaXN0ZXJLbm93bkFyY2hpdmVN
SU1FVHlwZXMoKQogICAgIEFyY2hpdmVNSU1FVHlwZXNNYXA6Oml0ZXJhdG9yIGVuZCA9IGFyY2hp
dmVNSU1FVHlwZXMoKS5lbmQoKTsKIAogICAgIGZvciAoOyBpICE9IGVuZDsgKytpKQotICAgICAg
ICBtaW1lVHlwZXMuYWRkKGktPmZpcnN0KTsKKyAgICAgICAgbWltZVR5cGVzLmFkZChpLT5rZXkp
OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVk
UmF3UmVzb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jl
c291cmNlLmNwcAppbmRleCBlNTA1Yzc4NDRhZDdlNWJhZTdlYjU4MWY5MTFmZWFhNDZkNzM0OTk1
Li5lNGYzY2IyYjFjOTIyOTBkOTFjZmY2MWQzNjQ4NzE1MmMyZjJmMjU1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5jcHAKQEAgLTE0OCw4
ICsxNDgsOCBAQCBib29sIENhY2hlZFJhd1Jlc291cmNlOjpjYW5SZXVzZShjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmIG5ld1JlcXVlc3QpIGNvbnN0CiAKICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9p
dGVyYXRvciBlbmQgPSBuZXdIZWFkZXJzLmVuZCgpOwogICAgIGZvciAoSFRUUEhlYWRlck1hcDo6
Y29uc3RfaXRlcmF0b3IgaSA9IG5ld0hlYWRlcnMuYmVnaW4oKTsgaSAhPSBlbmQ7ICsraSkgewot
ICAgICAgICBBdG9taWNTdHJpbmcgaGVhZGVyTmFtZSA9IGktPmZpcnN0OwotICAgICAgICBpZiAo
aS0+c2Vjb25kICE9IG9sZEhlYWRlcnMuZ2V0KGhlYWRlck5hbWUpKQorICAgICAgICBBdG9taWNT
dHJpbmcgaGVhZGVyTmFtZSA9IGktPmtleTsKKyAgICAgICAgaWYgKGktPnZhbHVlICE9IG9sZEhl
YWRlcnMuZ2V0KGhlYWRlck5hbWUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
ICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNo
ZS9DYWNoZWRSZXNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVk
UmVzb3VyY2UuY3BwCmluZGV4IDAzNjhhNzI0NTI1ZmFmZTY0OTA1ODdiZWIyYjRmNmU2ZTlmY2M2
ZTYuLjQ0YzRlNTJjY2I2NzI0ZjY0NDVjMWM4MTYyNDVmZjBiYzZhMjY2YmEgMTAwNzU1Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNwcApAQCAtNTkwLDggKzU5
MCw4IEBAIHZvaWQgQ2FjaGVkUmVzb3VyY2U6OnN3aXRjaENsaWVudHNUb1JldmFsaWRhdGVkUmVz
b3VyY2UoKQogICAgIFZlY3RvcjxDYWNoZWRSZXNvdXJjZUNsaWVudCo+IGNsaWVudHNUb01vdmU7
CiAgICAgSGFzaENvdW50ZWRTZXQ8Q2FjaGVkUmVzb3VyY2VDbGllbnQqPjo6aXRlcmF0b3IgZW5k
MiA9IG1fY2xpZW50cy5lbmQoKTsKICAgICBmb3IgKEhhc2hDb3VudGVkU2V0PENhY2hlZFJlc291
cmNlQ2xpZW50Kj46Oml0ZXJhdG9yIGl0ID0gbV9jbGllbnRzLmJlZ2luKCk7IGl0ICE9IGVuZDI7
ICsraXQpIHsKLSAgICAgICAgQ2FjaGVkUmVzb3VyY2VDbGllbnQqIGNsaWVudCA9IGl0LT5maXJz
dDsKLSAgICAgICAgdW5zaWduZWQgY291bnQgPSBpdC0+c2Vjb25kOworICAgICAgICBDYWNoZWRS
ZXNvdXJjZUNsaWVudCogY2xpZW50ID0gaXQtPmtleTsKKyAgICAgICAgdW5zaWduZWQgY291bnQg
PSBpdC0+dmFsdWU7CiAgICAgICAgIHdoaWxlIChjb3VudCkgewogICAgICAgICAgICAgY2xpZW50
c1RvTW92ZS5hcHBlbmQoY2xpZW50KTsKICAgICAgICAgICAgIC0tY291bnQ7CkBAIC02MjUsOSAr
NjI1LDkgQEAgdm9pZCBDYWNoZWRSZXNvdXJjZTo6dXBkYXRlUmVzcG9uc2VBZnRlclJldmFsaWRh
dGlvbihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiB2YWwKICAgICBIVFRQSGVhZGVyTWFwOjpjb25z
dF9pdGVyYXRvciBlbmQgPSBuZXdIZWFkZXJzLmVuZCgpOwogICAgIGZvciAoSFRUUEhlYWRlck1h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBuZXdIZWFkZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgewogICAgICAgICAvLyBEb24ndCBhbGxvdyAzMDQgcmVzcG9uc2UgdG8gdXBkYXRlIGNvbnRl
bnQgaGVhZGVycywgdGhlc2UgY2FuJ3QgY2hhbmdlIGJ1dCBzb21lIHNlcnZlcnMgc2VuZCB3cm9u
ZyB2YWx1ZXMuCi0gICAgICAgIGlmIChpdC0+Zmlyc3Quc3RhcnRzV2l0aChjb250ZW50SGVhZGVy
UHJlZml4LCBmYWxzZSkpCisgICAgICAgIGlmIChpdC0+a2V5LnN0YXJ0c1dpdGgoY29udGVudEhl
YWRlclByZWZpeCwgZmFsc2UpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIG1fcmVz
cG9uc2Uuc2V0SFRUUEhlYWRlckZpZWxkKGl0LT5maXJzdCwgaXQtPnNlY29uZCk7CisgICAgICAg
IG1fcmVzcG9uc2Uuc2V0SFRUUEhlYWRlckZpZWxkKGl0LT5rZXksIGl0LT52YWx1ZSk7CiAgICAg
fQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVz
b3VyY2VDbGllbnRXYWxrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRS
ZXNvdXJjZUNsaWVudFdhbGtlci5oCmluZGV4IDhiMzc4MGI1ZTY0YjIxNDM0NjI4OTZiZGEyYTZh
MjY1YTVhOGEwNzQuLjc5MzNiMGI4MTRjNTIxMjU2ZTA3NjBmODYxYjQzMTA5N2I4OWI1OWMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUNsaWVu
dFdhbGtlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJj
ZUNsaWVudFdhbGtlci5oCkBAIC00Miw3ICs0Miw3IEBAIHB1YmxpYzoKICAgICAgICAgSXRlcmF0
b3IgZW5kID0gc2V0LmVuZCgpOwogICAgICAgICBzaXplX3QgY2xpZW50SW5kZXggPSAwOwogICAg
ICAgICBmb3IgKEl0ZXJhdG9yIGN1cnJlbnQgPSBzZXQuYmVnaW4oKTsgY3VycmVudCAhPSBlbmQ7
ICsrY3VycmVudCkKLSAgICAgICAgICAgIG1fY2xpZW50VmVjdG9yW2NsaWVudEluZGV4KytdID0g
Y3VycmVudC0+Zmlyc3Q7CisgICAgICAgICAgICBtX2NsaWVudFZlY3RvcltjbGllbnRJbmRleCsr
XSA9IGN1cnJlbnQtPmtleTsKICAgICB9CiAKICAgICBUKiBuZXh0KCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwCmluZGV4IDll
OWU0MTA2YzgyZjhiNTBmNDMxMGI1Yzk2M2E0YTA0YTdjNjk3N2MuLmRlNmI2MjdjNGUzMjZlOTNm
MmEyMWJiMDQxYTk1OWRmODMxMjJlYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcApAQCAtMTI5LDcgKzEyOSw3IEBAIENh
Y2hlZFJlc291cmNlTG9hZGVyOjp+Q2FjaGVkUmVzb3VyY2VMb2FkZXIoKQogICAgIGNsZWFyUHJl
bG9hZHMoKTsKICAgICBEb2N1bWVudFJlc291cmNlTWFwOjppdGVyYXRvciBlbmQgPSBtX2RvY3Vt
ZW50UmVzb3VyY2VzLmVuZCgpOwogICAgIGZvciAoRG9jdW1lbnRSZXNvdXJjZU1hcDo6aXRlcmF0
b3IgaXQgPSBtX2RvY3VtZW50UmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAg
ICAgICAgaXQtPnNlY29uZC0+c2V0T3duaW5nQ2FjaGVkUmVzb3VyY2VMb2FkZXIoMCk7CisgICAg
ICAgIGl0LT52YWx1ZS0+c2V0T3duaW5nQ2FjaGVkUmVzb3VyY2VMb2FkZXIoMCk7CiAKICAgICAv
LyBNYWtlIHN1cmUgbm8gcmVxdWVzdHMgc3RpbGwgcG9pbnQgdG8gdGhpcyBDYWNoZWRSZXNvdXJj
ZUxvYWRlcgogICAgIEFTU0VSVChtX3JlcXVlc3RDb3VudCA9PSAwKTsKQEAgLTQyOSw3ICs0Mjks
NyBAQCBDYWNoZWRSZXNvdXJjZSogQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RSZXNvdXJj
ZShDYWNoZWRSZXNvdXJjZTo6VHlwZSB0eXBlLAogICAgIGlmIChtZW1vcnlDYWNoZSgpLT5kaXNh
YmxlZCgpKSB7CiAgICAgICAgIERvY3VtZW50UmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9k
b2N1bWVudFJlc291cmNlcy5maW5kKHVybC5zdHJpbmcoKSk7CiAgICAgICAgIGlmIChpdCAhPSBt
X2RvY3VtZW50UmVzb3VyY2VzLmVuZCgpKSB7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRP
d25pbmdDYWNoZWRSZXNvdXJjZUxvYWRlcigwKTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+c2V0
T3duaW5nQ2FjaGVkUmVzb3VyY2VMb2FkZXIoMCk7CiAgICAgICAgICAgICBtX2RvY3VtZW50UmVz
b3VyY2VzLnJlbW92ZShpdCk7CiAgICAgICAgIH0KICAgICB9CkBAIC02NTQsNyArNjU0LDcgQEAg
dm9pZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6c2V0QXV0b0xvYWRJbWFnZXMoYm9vbCBlbmFibGUp
CiAKICAgICBEb2N1bWVudFJlc291cmNlTWFwOjppdGVyYXRvciBlbmQgPSBtX2RvY3VtZW50UmVz
b3VyY2VzLmVuZCgpOwogICAgIGZvciAoRG9jdW1lbnRSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQg
PSBtX2RvY3VtZW50UmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAg
ICBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UgPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICBD
YWNoZWRSZXNvdXJjZSogcmVzb3VyY2UgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgIGlmIChy
ZXNvdXJjZS0+dHlwZSgpID09IENhY2hlZFJlc291cmNlOjpJbWFnZVJlc291cmNlKSB7CiAgICAg
ICAgICAgICBDYWNoZWRJbWFnZSogaW1hZ2UgPSBjb25zdF9jYXN0PENhY2hlZEltYWdlKj4oc3Rh
dGljX2Nhc3Q8Y29uc3QgQ2FjaGVkSW1hZ2UqPihyZXNvdXJjZSkpOwogCkBAIC02NzQsNyArNjc0
LDcgQEAgdm9pZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVtb3ZlQ2FjaGVkUmVzb3VyY2UoQ2Fj
aGVkUmVzb3VyY2UqIHJlc291cmNlKSBjb25zdAogI2lmbmRlZiBOREVCVUcKICAgICBEb2N1bWVu
dFJlc291cmNlTWFwOjppdGVyYXRvciBpdCA9IG1fZG9jdW1lbnRSZXNvdXJjZXMuZmluZChyZXNv
dXJjZS0+dXJsKCkpOwogICAgIGlmIChpdCAhPSBtX2RvY3VtZW50UmVzb3VyY2VzLmVuZCgpKQot
ICAgICAgICBBU1NFUlQoaXQtPnNlY29uZC5nZXQoKSA9PSByZXNvdXJjZSk7CisgICAgICAgIEFT
U0VSVChpdC0+dmFsdWUuZ2V0KCkgPT0gcmVzb3VyY2UpOwogI2VuZGlmCiAgICAgbV9kb2N1bWVu
dFJlc291cmNlcy5yZW1vdmUocmVzb3VyY2UtPnVybCgpKTsKIH0KQEAgLTcwNiw5ICs3MDYsOSBA
QCB2b2lkIENhY2hlZFJlc291cmNlTG9hZGVyOjpnYXJiYWdlQ29sbGVjdERvY3VtZW50UmVzb3Vy
Y2VzVGltZXJGaXJlZChUaW1lcjxDYWNoZQogICAgIFN0cmluZ1ZlY3RvciByZXNvdXJjZXNUb0Rl
bGV0ZTsKIAogICAgIGZvciAoRG9jdW1lbnRSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX2Rv
Y3VtZW50UmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IG1fZG9jdW1lbnRSZXNvdXJjZXMuZW5kKCk7
ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQtPmhhc09uZUhhbmRsZSgpKSB7Ci0gICAg
ICAgICAgICByZXNvdXJjZXNUb0RlbGV0ZS5hcHBlbmQoaXQtPmZpcnN0KTsKLSAgICAgICAgICAg
IGl0LT5zZWNvbmQtPnNldE93bmluZ0NhY2hlZFJlc291cmNlTG9hZGVyKDApOworICAgICAgICBp
ZiAoaXQtPnZhbHVlLT5oYXNPbmVIYW5kbGUoKSkgeworICAgICAgICAgICAgcmVzb3VyY2VzVG9E
ZWxldGUuYXBwZW5kKGl0LT5rZXkpOworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRPd25pbmdD
YWNoZWRSZXNvdXJjZUxvYWRlcigwKTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5jcHAKaW5kZXggMTEyNzVlMDZkODEyMjNjNDc0
MTg2ZTUzZjhkN2NiYjM2MWNmMGRlZS4uZDJkYjRkYTc3ZGM2ODk0Y2ZlYzVhZDY2OTY1OTY5ZWY0
NDA4Y2U1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL01lbW9yeUNh
Y2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuY3Bw
CkBAIC01MzgsNyArNTM4LDcgQEAgdm9pZCBNZW1vcnlDYWNoZTo6cmVtb3ZlUmVzb3VyY2VzV2l0
aE9yaWdpbihTZWN1cml0eU9yaWdpbiogb3JpZ2luKQogCiAgICAgQ2FjaGVkUmVzb3VyY2VNYXA6
Oml0ZXJhdG9yIGUgPSBtX3Jlc291cmNlcy5lbmQoKTsKICAgICBmb3IgKENhY2hlZFJlc291cmNl
TWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGU7ICsraXQpIHsK
LSAgICAgICAgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlID0gaXQtPnNlY29uZDsKKyAgICAgICAg
Q2FjaGVkUmVzb3VyY2UqIHJlc291cmNlID0gaXQtPnZhbHVlOwogICAgICAgICBSZWZQdHI8U2Vj
dXJpdHlPcmlnaW4+IHJlc291cmNlT3JpZ2luID0gU2VjdXJpdHlPcmlnaW46OmNyZWF0ZUZyb21T
dHJpbmcocmVzb3VyY2UtPnVybCgpKTsKICAgICAgICAgaWYgKCFyZXNvdXJjZU9yaWdpbikKICAg
ICAgICAgICAgIGNvbnRpbnVlOwpAQCAtNTU0LDcgKzU1NCw3IEBAIHZvaWQgTWVtb3J5Q2FjaGU6
OmdldE9yaWdpbnNXaXRoQ2FjaGUoU2VjdXJpdHlPcmlnaW5TZXQmIG9yaWdpbnMpCiB7CiAgICAg
Q2FjaGVkUmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGUgPSBtX3Jlc291cmNlcy5lbmQoKTsKICAgICBm
b3IgKENhY2hlZFJlc291cmNlTWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7
IGl0ICE9IGU7ICsraXQpCi0gICAgICAgIG9yaWdpbnMuYWRkKFNlY3VyaXR5T3JpZ2luOjpjcmVh
dGVGcm9tU3RyaW5nKGl0LT5zZWNvbmQtPnVybCgpKSk7CisgICAgICAgIG9yaWdpbnMuYWRkKFNl
Y3VyaXR5T3JpZ2luOjpjcmVhdGVGcm9tU3RyaW5nKGl0LT52YWx1ZS0+dXJsKCkpKTsKIH0KIAog
dm9pZCBNZW1vcnlDYWNoZTo6cmVtb3ZlRnJvbUxpdmVEZWNvZGVkUmVzb3VyY2VzTGlzdChDYWNo
ZWRSZXNvdXJjZSogcmVzb3VyY2UpCkBAIC02ODcsNyArNjg3LDcgQEAgTWVtb3J5Q2FjaGU6OlN0
YXRpc3RpY3MgTWVtb3J5Q2FjaGU6OmdldFN0YXRpc3RpY3MoKQogICAgIFN0YXRpc3RpY3Mgc3Rh
dHM7CiAgICAgQ2FjaGVkUmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGUgPSBtX3Jlc291cmNlcy5lbmQo
KTsKICAgICBmb3IgKENhY2hlZFJlc291cmNlTWFwOjppdGVyYXRvciBpID0gbV9yZXNvdXJjZXMu
YmVnaW4oKTsgaSAhPSBlOyArK2kpIHsKLSAgICAgICAgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNl
ID0gaS0+c2Vjb25kOworICAgICAgICBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UgPSBpLT52YWx1
ZTsKICAgICAgICAgc3dpdGNoIChyZXNvdXJjZS0+dHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQ2Fj
aGVkUmVzb3VyY2U6OkltYWdlUmVzb3VyY2U6CiAgICAgICAgICAgICBzdGF0cy5pbWFnZXMuYWRk
UmVzb3VyY2UocmVzb3VyY2UpOwpAQCAtNzIzLDcgKzcyMyw3IEBAIHZvaWQgTWVtb3J5Q2FjaGU6
OnNldERpc2FibGVkKGJvb2wgZGlzYWJsZWQpCiAgICAgICAgIENhY2hlZFJlc291cmNlTWFwOjpp
dGVyYXRvciBpID0gbV9yZXNvdXJjZXMuYmVnaW4oKTsKICAgICAgICAgaWYgKGkgPT0gbV9yZXNv
dXJjZXMuZW5kKCkpCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgZXZpY3QoaS0+c2Vjb25k
KTsKKyAgICAgICAgZXZpY3QoaS0+dmFsdWUpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9pY29uL0ljb25EYXRhYmFzZS5jcHAKaW5kZXggY2U0ZjAxMDQ2NmMwZmI4ZDFkZDZl
MmM1Y2YyY2QyZTlkMzEyZTY4Ni4uNWJkYTYzMzFlMjk0YjQ3ODRiNTU2Mjc1ZDMxMjVhYTRkZTEw
OGQ3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuY3BwCkBA
IC0xODUsNyArMTg1LDcgQEAgdm9pZCBJY29uRGF0YWJhc2U6OnJlbW92ZUFsbEljb25zKCkKICAg
ICAgICAgSGFzaE1hcDxTdHJpbmcsIFBhZ2VVUkxSZWNvcmQqPjo6aXRlcmF0b3IgaXRlciA9IG1f
cGFnZVVSTFRvUmVjb3JkTWFwLmJlZ2luKCk7CiAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBQYWdl
VVJMUmVjb3JkKj46Oml0ZXJhdG9yIGVuZCA9IG1fcGFnZVVSTFRvUmVjb3JkTWFwLmVuZCgpOwog
ICAgICAgICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlcikKLSAgICAgICAgICAgICgqaXRlciku
c2Vjb25kLT5zZXRJY29uUmVjb3JkKDApOworICAgICAgICAgICAgKCppdGVyKS52YWx1ZS0+c2V0
SWNvblJlY29yZCgwKTsKICAgICAgICAgICAgIAogICAgICAgICAvLyBDbGVhciB0aGUgaWNvblVS
TCAtPiBJY29uUmVjb3JkIG1hcAogICAgICAgICBtX2ljb25VUkxUb1JlY29yZE1hcC5jbGVhcigp
OwpAQCAtNzU0LDcgKzc1NCw3IEBAIHNpemVfdCBJY29uRGF0YWJhc2U6Omljb25SZWNvcmRDb3Vu
dFdpdGhEYXRhKCkKICAgICBIYXNoTWFwPFN0cmluZywgSWNvblJlY29yZCo+OjppdGVyYXRvciBl
bmQgPSBtX2ljb25VUkxUb1JlY29yZE1hcC5lbmQoKTsKICAgICAKICAgICBmb3IgKDsgaSAhPSBl
bmQ7ICsraSkKLSAgICAgICAgcmVzdWx0ICs9ICgoKmkpLnNlY29uZC0+aW1hZ2VEYXRhU3RhdHVz
KCkgPT0gSW1hZ2VEYXRhU3RhdHVzUHJlc2VudCk7CisgICAgICAgIHJlc3VsdCArPSAoKCppKS52
YWx1ZS0+aW1hZ2VEYXRhU3RhdHVzKCkgPT0gSW1hZ2VEYXRhU3RhdHVzUHJlc2VudCk7CiAgICAg
ICAgICAgICAKICAgICByZXR1cm4gcmVzdWx0OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9ET01XaW5kb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3Bw
CmluZGV4IDlkNGMzYjQxZjczZDQzY2FmMDRkODRhNjI4ZDk2NzM0Mzg1MTAxOTQuLjU3Njk1NjNm
ZGM2MmM4MmVlMGQ2MzNlNDZhYjk5YjNhOWNmMzRlNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRE9NV2luZG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRv
dy5jcHAKQEAgLTI0NSw3ICsyNDUsNyBAQCBib29sIERPTVdpbmRvdzo6ZGlzcGF0Y2hBbGxQZW5k
aW5nQmVmb3JlVW5sb2FkRXZlbnRzKCkKICAgICBWZWN0b3I8UmVmUHRyPERPTVdpbmRvdz4gPiB3
aW5kb3dzOwogICAgIERPTVdpbmRvd1NldDo6aXRlcmF0b3IgZW5kID0gc2V0LmVuZCgpOwogICAg
IGZvciAoRE9NV2luZG93U2V0OjppdGVyYXRvciBpdCA9IHNldC5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpCi0gICAgICAgIHdpbmRvd3MuYXBwZW5kKGl0LT5maXJzdCk7CisgICAgICAgIHdpbmRv
d3MuYXBwZW5kKGl0LT5rZXkpOwogCiAgICAgc2l6ZV90IHNpemUgPSB3aW5kb3dzLnNpemUoKTsK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewpAQCAtMjg3LDcgKzI4Nyw3
IEBAIHZvaWQgRE9NV2luZG93OjpkaXNwYXRjaEFsbFBlbmRpbmdVbmxvYWRFdmVudHMoKQogICAg
IFZlY3RvcjxSZWZQdHI8RE9NV2luZG93PiA+IHdpbmRvd3M7CiAgICAgRE9NV2luZG93U2V0Ojpp
dGVyYXRvciBlbmQgPSBzZXQuZW5kKCk7CiAgICAgZm9yIChET01XaW5kb3dTZXQ6Oml0ZXJhdG9y
IGl0ID0gc2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgd2luZG93cy5hcHBl
bmQoaXQtPmZpcnN0KTsKKyAgICAgICAgd2luZG93cy5hcHBlbmQoaXQtPmtleSk7CiAKICAgICBz
aXplX3Qgc2l6ZSA9IHdpbmRvd3Muc2l6ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
c2l6ZTsgKytpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKaW5kZXggMTY4M2Mz
ZGJkMjJlZjI3ODdhY2U1MzMzMmI2MjFkZTgyODhkM2VmNS4uMDU0MDcwYWI2MzA5YmVhOGZlZTEy
MDQ3YzMzYzNmYzg0YzMzOWYxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVu
dEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApA
QCAtMzUzMiw3ICszNTMyLDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZVRvdWNoRXZlbnQo
Y29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50JiBldmVudCkKICAgICAgICAgLy8gcmVsZWFzZWQgb3Ig
Y2FuY2VsbGVkIGl0IHdpbGwgb25seSBhcHBlYXIgaW4gdGhlIGNoYW5nZWRUb3VjaGVzIGxpc3Qu
CiAgICAgICAgIGlmIChwb2ludFN0YXRlICE9IFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hSZWxl
YXNlZCAmJiBwb2ludFN0YXRlICE9IFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hDYW5jZWxsZWQp
IHsKICAgICAgICAgICAgIHRvdWNoZXMtPmFwcGVuZCh0b3VjaCk7Ci0gICAgICAgICAgICB0YXJn
ZXRUb3VjaGVzSXRlcmF0b3ItPnNlY29uZC0+YXBwZW5kKHRvdWNoKTsKKyAgICAgICAgICAgIHRh
cmdldFRvdWNoZXNJdGVyYXRvci0+dmFsdWUtPmFwcGVuZCh0b3VjaCk7CiAgICAgICAgIH0KIAog
ICAgICAgICAvLyBOb3cgYnVpbGQgdXAgdGhlIGNvcnJlY3QgbGlzdCBmb3IgY2hhbmdlZFRvdWNo
ZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCmluZGV4IGQ1YzE3NmQyMWUyYjYxNmE1MDFlZTE0NDlkYjJl
MDU2YjJiOGRhODUuLmRlMmU5NDE5YmFmMGU5NzRmMTlkNTZmM2I0ZjNlZDdiMzVmNjI4ZjAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRnJhbWUuY3BwCkBAIC01NjcsNyArNTY3LDcgQEAgdm9pZCBGcmFtZTo6aW5qZWN0
VXNlclNjcmlwdHMoVXNlclNjcmlwdEluamVjdGlvblRpbWUgaW5qZWN0aW9uVGltZSkKICAgICAg
ICAgcmV0dXJuOwogICAgIFVzZXJTY3JpcHRNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHVzZXJT
Y3JpcHRzLT5lbmQoKTsKICAgICBmb3IgKFVzZXJTY3JpcHRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gdXNlclNjcmlwdHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaW5qZWN0
VXNlclNjcmlwdHNGb3JXb3JsZChpdC0+Zmlyc3QuZ2V0KCksICppdC0+c2Vjb25kLCBpbmplY3Rp
b25UaW1lKTsKKyAgICAgICAgaW5qZWN0VXNlclNjcmlwdHNGb3JXb3JsZChpdC0+a2V5LmdldCgp
LCAqaXQtPnZhbHVlLCBpbmplY3Rpb25UaW1lKTsKIH0KIAogdm9pZCBGcmFtZTo6aW5qZWN0VXNl
clNjcmlwdHNGb3JXb3JsZChET01XcmFwcGVyV29ybGQqIHdvcmxkLCBjb25zdCBVc2VyU2NyaXB0
VmVjdG9yJiB1c2VyU2NyaXB0cywgVXNlclNjcmlwdEluamVjdGlvblRpbWUgaW5qZWN0aW9uVGlt
ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmNwcAppbmRleCBmOTM5YzliZmQyYTM3NjE5ZjY1Nzdi
ZjdkMjVmZGYxNzJiM2EwNzM3Li42ODk2MGQxOTkxNTVkZTc0MjllODA0NTJiZGNlYmE1YjczOGQx
MzA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9QYWdlR3JvdXAuY3BwCkBAIC05MywxMiArOTMsMTIgQEAgUGFn
ZUdyb3VwKiBQYWdlR3JvdXA6OnBhZ2VHcm91cChjb25zdCBTdHJpbmcmIGdyb3VwTmFtZSkKICAg
ICBQYWdlR3JvdXBNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBwYWdlR3JvdXBzLT5hZGQoZ3JvdXBO
YW1lLCAwKTsKIAogICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICBBU1NFUlQo
IXJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNv
bmQgPSBuZXcgUGFnZUdyb3VwKGdyb3VwTmFtZSk7CisgICAgICAgIEFTU0VSVCghcmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZSk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBuZXcgUGFn
ZUdyb3VwKGdyb3VwTmFtZSk7CiAgICAgfQogCi0gICAgQVNTRVJUKHJlc3VsdC5pdGVyYXRvci0+
c2Vjb25kKTsKLSAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgQVNTRVJU
KHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOworICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZh
bHVlOwogfQogCiB2b2lkIFBhZ2VHcm91cDo6Y2xvc2VMb2NhbFN0b3JhZ2UoKQpAQCAtMTA5LDgg
KzEwOSw4IEBAIHZvaWQgUGFnZUdyb3VwOjpjbG9zZUxvY2FsU3RvcmFnZSgpCiAgICAgUGFnZUdy
b3VwTWFwOjppdGVyYXRvciBlbmQgPSBwYWdlR3JvdXBzLT5lbmQoKTsKIAogICAgIGZvciAoUGFn
ZUdyb3VwTWFwOjppdGVyYXRvciBpdCA9IHBhZ2VHcm91cHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgewotICAgICAgICBpZiAoaXQtPnNlY29uZC0+aGFzTG9jYWxTdG9yYWdlKCkpCi0gICAg
ICAgICAgICBpdC0+c2Vjb25kLT5sb2NhbFN0b3JhZ2UoKS0+Y2xvc2UoKTsKKyAgICAgICAgaWYg
KGl0LT52YWx1ZS0+aGFzTG9jYWxTdG9yYWdlKCkpCisgICAgICAgICAgICBpdC0+dmFsdWUtPmxv
Y2FsU3RvcmFnZSgpLT5jbG9zZSgpOwogICAgIH0KIH0KIApAQCAtMTIxLDggKzEyMSw4IEBAIHZv
aWQgUGFnZUdyb3VwOjpjbGVhckxvY2FsU3RvcmFnZUZvckFsbE9yaWdpbnMoKQogCiAgICAgUGFn
ZUdyb3VwTWFwOjppdGVyYXRvciBlbmQgPSBwYWdlR3JvdXBzLT5lbmQoKTsKICAgICBmb3IgKFBh
Z2VHcm91cE1hcDo6aXRlcmF0b3IgaXQgPSBwYWdlR3JvdXBzLT5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQtPmhhc0xvY2FsU3RvcmFnZSgpKQotICAg
ICAgICAgICAgaXQtPnNlY29uZC0+bG9jYWxTdG9yYWdlKCktPmNsZWFyQWxsT3JpZ2luc0ZvckRl
bGV0aW9uKCk7CisgICAgICAgIGlmIChpdC0+dmFsdWUtPmhhc0xvY2FsU3RvcmFnZSgpKQorICAg
ICAgICAgICAgaXQtPnZhbHVlLT5sb2NhbFN0b3JhZ2UoKS0+Y2xlYXJBbGxPcmlnaW5zRm9yRGVs
ZXRpb24oKTsKICAgICB9CiB9CiAKQEAgLTEzMyw4ICsxMzMsOCBAQCB2b2lkIFBhZ2VHcm91cDo6
Y2xlYXJMb2NhbFN0b3JhZ2VGb3JPcmlnaW4oU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKIAogICAg
IFBhZ2VHcm91cE1hcDo6aXRlcmF0b3IgZW5kID0gcGFnZUdyb3Vwcy0+ZW5kKCk7CiAgICAgZm9y
IChQYWdlR3JvdXBNYXA6Oml0ZXJhdG9yIGl0ID0gcGFnZUdyb3Vwcy0+YmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kLT5oYXNMb2NhbFN0b3JhZ2UoKSkK
LSAgICAgICAgICAgIGl0LT5zZWNvbmQtPmxvY2FsU3RvcmFnZSgpLT5jbGVhck9yaWdpbkZvckRl
bGV0aW9uKG9yaWdpbik7CisgICAgICAgIGlmIChpdC0+dmFsdWUtPmhhc0xvY2FsU3RvcmFnZSgp
KQorICAgICAgICAgICAgaXQtPnZhbHVlLT5sb2NhbFN0b3JhZ2UoKS0+Y2xlYXJPcmlnaW5Gb3JE
ZWxldGlvbihvcmlnaW4pOwogICAgIH0gICAgCiB9CiAgICAgCkBAIC0xNDUsOCArMTQ1LDggQEAg
dm9pZCBQYWdlR3JvdXA6OnN5bmNMb2NhbFN0b3JhZ2UoKQogCiAgICAgUGFnZUdyb3VwTWFwOjpp
dGVyYXRvciBlbmQgPSBwYWdlR3JvdXBzLT5lbmQoKTsKICAgICBmb3IgKFBhZ2VHcm91cE1hcDo6
aXRlcmF0b3IgaXQgPSBwYWdlR3JvdXBzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAg
ICAgICAgaWYgKGl0LT5zZWNvbmQtPmhhc0xvY2FsU3RvcmFnZSgpKQotICAgICAgICAgICAgaXQt
PnNlY29uZC0+bG9jYWxTdG9yYWdlKCktPnN5bmMoKTsKKyAgICAgICAgaWYgKGl0LT52YWx1ZS0+
aGFzTG9jYWxTdG9yYWdlKCkpCisgICAgICAgICAgICBpdC0+dmFsdWUtPmxvY2FsU3RvcmFnZSgp
LT5zeW5jKCk7CiAgICAgfQogfQogCkBAIC0yNjksNyArMjY5LDcgQEAgdm9pZCBQYWdlR3JvdXA6
OmFkZFVzZXJTY3JpcHRUb1dvcmxkKERPTVdyYXBwZXJXb3JsZCogd29ybGQsIGNvbnN0IFN0cmlu
ZyYgc291cmMKICAgICBPd25QdHI8VXNlclNjcmlwdD4gdXNlclNjcmlwdCA9IGFkb3B0UHRyKG5l
dyBVc2VyU2NyaXB0KHNvdXJjZSwgdXJsLCB3aGl0ZWxpc3QsIGJsYWNrbGlzdCwgaW5qZWN0aW9u
VGltZSwgaW5qZWN0ZWRGcmFtZXMpKTsKICAgICBpZiAoIW1fdXNlclNjcmlwdHMpCiAgICAgICAg
IG1fdXNlclNjcmlwdHMgPSBhZG9wdFB0cihuZXcgVXNlclNjcmlwdE1hcCk7Ci0gICAgT3duUHRy
PFVzZXJTY3JpcHRWZWN0b3I+JiBzY3JpcHRzSW5Xb3JsZCA9IG1fdXNlclNjcmlwdHMtPmFkZCh3
b3JsZCwgbnVsbHB0cikuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBPd25QdHI8VXNlclNjcmlwdFZl
Y3Rvcj4mIHNjcmlwdHNJbldvcmxkID0gbV91c2VyU2NyaXB0cy0+YWRkKHdvcmxkLCBudWxscHRy
KS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCFzY3JpcHRzSW5Xb3JsZCkKICAgICAgICAgc2Ny
aXB0c0luV29ybGQgPSBhZG9wdFB0cihuZXcgVXNlclNjcmlwdFZlY3Rvcik7CiAgICAgc2NyaXB0
c0luV29ybGQtPmFwcGVuZCh1c2VyU2NyaXB0LnJlbGVhc2UoKSk7CkBAIC0yODYsNyArMjg2LDcg
QEAgdm9pZCBQYWdlR3JvdXA6OmFkZFVzZXJTdHlsZVNoZWV0VG9Xb3JsZChET01XcmFwcGVyV29y
bGQqIHdvcmxkLCBjb25zdCBTdHJpbmcmIHMKICAgICBPd25QdHI8VXNlclN0eWxlU2hlZXQ+IHVz
ZXJTdHlsZVNoZWV0ID0gYWRvcHRQdHIobmV3IFVzZXJTdHlsZVNoZWV0KHNvdXJjZSwgdXJsLCB3
aGl0ZWxpc3QsIGJsYWNrbGlzdCwgaW5qZWN0ZWRGcmFtZXMsIGxldmVsKSk7CiAgICAgaWYgKCFt
X3VzZXJTdHlsZVNoZWV0cykKICAgICAgICAgbV91c2VyU3R5bGVTaGVldHMgPSBhZG9wdFB0cihu
ZXcgVXNlclN0eWxlU2hlZXRNYXApOwotICAgIE93blB0cjxVc2VyU3R5bGVTaGVldFZlY3Rvcj4m
IHN0eWxlU2hlZXRzSW5Xb3JsZCA9IG1fdXNlclN0eWxlU2hlZXRzLT5hZGQod29ybGQsIG51bGxw
dHIpLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgT3duUHRyPFVzZXJTdHlsZVNoZWV0VmVjdG9yPiYg
c3R5bGVTaGVldHNJbldvcmxkID0gbV91c2VyU3R5bGVTaGVldHMtPmFkZCh3b3JsZCwgbnVsbHB0
cikuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghc3R5bGVTaGVldHNJbldvcmxkKQogICAgICAg
ICBzdHlsZVNoZWV0c0luV29ybGQgPSBhZG9wdFB0cihuZXcgVXNlclN0eWxlU2hlZXRWZWN0b3Ip
OwogICAgIHN0eWxlU2hlZXRzSW5Xb3JsZC0+YXBwZW5kKHVzZXJTdHlsZVNoZWV0LnJlbGVhc2Uo
KSk7CkBAIC0zMDYsNyArMzA2LDcgQEAgdm9pZCBQYWdlR3JvdXA6OnJlbW92ZVVzZXJTY3JpcHRG
cm9tV29ybGQoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCwgY29uc3QgS1VSTCYgdXIKICAgICBpZiAo
aXQgPT0gbV91c2VyU2NyaXB0cy0+ZW5kKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBV
c2VyU2NyaXB0VmVjdG9yKiBzY3JpcHRzID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICBVc2VyU2Ny
aXB0VmVjdG9yKiBzY3JpcHRzID0gaXQtPnZhbHVlLmdldCgpOwogICAgIGZvciAoaW50IGkgPSBz
Y3JpcHRzLT5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgewogICAgICAgICBpZiAoc2NyaXB0cy0+
YXQoaSktPnVybCgpID09IHVybCkKICAgICAgICAgICAgIHNjcmlwdHMtPnJlbW92ZShpKTsKQEAg
LTMyOCw3ICszMjgsNyBAQCB2b2lkIFBhZ2VHcm91cDo6cmVtb3ZlVXNlclN0eWxlU2hlZXRGcm9t
V29ybGQoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCwgY29uc3QgS1VSTAogICAgIGlmIChpdCA9PSBt
X3VzZXJTdHlsZVNoZWV0cy0+ZW5kKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBVc2Vy
U3R5bGVTaGVldFZlY3Rvciogc3R5bGVzaGVldHMgPSBpdC0+c2Vjb25kLmdldCgpOworICAgIFVz
ZXJTdHlsZVNoZWV0VmVjdG9yKiBzdHlsZXNoZWV0cyA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICBm
b3IgKGludCBpID0gc3R5bGVzaGVldHMtPnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7CiAgICAg
ICAgIGlmIChzdHlsZXNoZWV0cy0+YXQoaSktPnVybCgpID09IHVybCkgewogICAgICAgICAgICAg
c3R5bGVzaGVldHMtPnJlbW92ZShpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
UGFnZVNlcmlhbGl6ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5j
cHAKaW5kZXggOWQ1MDIxMWNjMzhhZDg2NGYwMTliOGVhOGJmNGVhZTIwNTFmYjNhYS4uZTdjMTRj
N2ZlYzI4NDM3OWNlZmE3ZGFlODgwOWMzNzdiZmY0OGJiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Q
YWdlU2VyaWFsaXplci5jcHAKQEAgLTMzOSw3ICszMzksNyBAQCBLVVJMIFBhZ2VTZXJpYWxpemVy
Ojp1cmxGb3JCbGFua0ZyYW1lKEZyYW1lKiBmcmFtZSkKIHsKICAgICBIYXNoTWFwPEZyYW1lKiwg
S1VSTD46Oml0ZXJhdG9yIGl0ZXIgPSBtX2JsYW5rRnJhbWVVUkxzLmZpbmQoZnJhbWUpOwogICAg
IGlmIChpdGVyICE9IG1fYmxhbmtGcmFtZVVSTHMuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdGVy
LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBpdGVyLT52YWx1ZTsKICAgICBTdHJpbmcgdXJsID0g
Ind5Y2l3eWc6Ly9mcmFtZS8iICsgU3RyaW5nOjpudW1iZXIobV9ibGFua0ZyYW1lQ291bnRlcisr
KTsKICAgICBLVVJMIGZha2VVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmwpOwogICAgIG1fYmxhbmtG
cmFtZVVSTHMuYWRkKGZyYW1lLCBmYWtlVVJMKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvU2VjdXJpdHlQb2xpY3kuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eVBv
bGljeS5jcHAKaW5kZXggYzJhNWFiMTE0MzVlZjZkYjA1NzY4Yzc2Y2EwMzU3YjU2MjU4MzMxMi4u
NWIzNmY0ZjcxNmM0NGJmYjA5ZjIwZTYzMmNjMGQwMzg2ZjNjY2EzYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eVBvbGljeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9TZWN1cml0eVBvbGljeS5jcHAKQEAgLTEzMyw5ICsxMzMsOSBAQCB2b2lkIFNlY3VyaXR5
UG9saWN5OjphZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShjb25zdCBTZWN1cml0eU9yaWdp
biYgc291cmNlTwogICAgIFN0cmluZyBzb3VyY2VTdHJpbmcgPSBzb3VyY2VPcmlnaW4udG9TdHJp
bmcoKTsKICAgICBPcmlnaW5BY2Nlc3NNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBvcmlnaW5BY2Nl
c3NNYXAoKS5hZGQoc291cmNlU3RyaW5nLCBudWxscHRyKTsKICAgICBpZiAocmVzdWx0LmlzTmV3
RW50cnkpCi0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gYWRvcHRQdHIobmV3IE9y
aWdpbkFjY2Vzc1doaXRlTGlzdCk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBh
ZG9wdFB0cihuZXcgT3JpZ2luQWNjZXNzV2hpdGVMaXN0KTsKIAotICAgIE9yaWdpbkFjY2Vzc1do
aXRlTGlzdCogbGlzdCA9IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLmdldCgpOworICAgIE9yaWdp
bkFjY2Vzc1doaXRlTGlzdCogbGlzdCA9IHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7CiAg
ICAgbGlzdC0+YXBwZW5kKE9yaWdpbkFjY2Vzc0VudHJ5KGRlc3RpbmF0aW9uUHJvdG9jb2wsIGRl
c3RpbmF0aW9uRG9tYWluLCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucyA/IE9yaWdpbkFjY2Vz
c0VudHJ5OjpBbGxvd1N1YmRvbWFpbnMgOiBPcmlnaW5BY2Nlc3NFbnRyeTo6RGlzYWxsb3dTdWJk
b21haW5zKSk7CiB9CiAKQEAgLTE1Miw3ICsxNTIsNyBAQCB2b2lkIFNlY3VyaXR5UG9saWN5Ojpy
ZW1vdmVPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShjb25zdCBTZWN1cml0eU9yaWdpbiYgc291
cgogICAgIGlmIChpdCA9PSBtYXAuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIE9yaWdp
bkFjY2Vzc1doaXRlTGlzdCogbGlzdCA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgT3JpZ2luQWNj
ZXNzV2hpdGVMaXN0KiBsaXN0ID0gaXQtPnZhbHVlLmdldCgpOwogICAgIHNpemVfdCBpbmRleCA9
IGxpc3QtPmZpbmQoT3JpZ2luQWNjZXNzRW50cnkoZGVzdGluYXRpb25Qcm90b2NvbCwgZGVzdGlu
YXRpb25Eb21haW4sIGFsbG93RGVzdGluYXRpb25TdWJkb21haW5zID8gT3JpZ2luQWNjZXNzRW50
cnk6OkFsbG93U3ViZG9tYWlucyA6IE9yaWdpbkFjY2Vzc0VudHJ5OjpEaXNhbGxvd1N1YmRvbWFp
bnMpKTsKICAgICBpZiAoaW5kZXggPT0gbm90Rm91bmQpCiAgICAgICAgIHJldHVybjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9TZXR0aW5ncy5jcHAKaW5kZXggNjM3MjMxODQ5MzI3NjVkNzY4OTI1MWVlYThkNzYwNTc2
ZTMyODc1Yy4uNDE3NTljN2NiMDg5MDA3ZjAzZDEzMTVkZDZmNGFlNDhiYjAwM2I0MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9TZXR0aW5ncy5jcHAKQEAgLTYwLDcgKzYwLDcgQEAgc3RhdGljIGlubGluZSB2b2lk
IHNldEdlbmVyaWNGb250RmFtaWx5TWFwKFNjcmlwdEZvbnRGYW1pbHlNYXAmIGZvbnRNYXAsIGNv
bnN0IEEKICAgICAgICAgaWYgKGl0ID09IGZvbnRNYXAuZW5kKCkpCiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIGZvbnRNYXAucmVtb3ZlKGl0KTsKLSAgICB9IGVsc2UgaWYgKGl0ICE9IGZv
bnRNYXAuZW5kKCkgJiYgaXQtPnNlY29uZCA9PSBmYW1pbHkpCisgICAgfSBlbHNlIGlmIChpdCAh
PSBmb250TWFwLmVuZCgpICYmIGl0LT52YWx1ZSA9PSBmYW1pbHkpCiAgICAgICAgIHJldHVybjsK
ICAgICBlbHNlCiAgICAgICAgIGZvbnRNYXAuc2V0KHN0YXRpY19jYXN0PGludD4oc2NyaXB0KSwg
ZmFtaWx5KTsKQEAgLTcxLDcgKzcxLDcgQEAgc3RhdGljIGlubGluZSBjb25zdCBBdG9taWNTdHJp
bmcmIGdldEdlbmVyaWNGb250RmFtaWx5Rm9yU2NyaXB0KGNvbnN0IFNjcmlwdEZvbnQKIHsKICAg
ICBTY3JpcHRGb250RmFtaWx5TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGZvbnRNYXAuZmluZChz
dGF0aWNfY2FzdDxpbnQ+KHNjcmlwdCkpOwogICAgIGlmIChpdCAhPSBmb250TWFwLmVuZCgpKQot
ICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKICAg
ICBpZiAoc2NyaXB0ICE9IFVTQ1JJUFRfQ09NTU9OKQogICAgICAgICByZXR1cm4gZ2V0R2VuZXJp
Y0ZvbnRGYW1pbHlGb3JTY3JpcHQoZm9udE1hcCwgVVNDUklQVF9DT01NT04pOwogICAgIHJldHVy
biBlbXB0eUF0b207CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NwZWVjaElucHV0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU3BlZWNoSW5wdXQuY3BwCmluZGV4IDAxMjhlZjhh
NDBhNDI0MzU0YWI1ZjhlNTBiYThlY2M2MjI1N2IzYzkuLjgzMjhjNWQ0ZGYzMjk5NDJiNTlmM2Vj
YzIyNTM1NjhjZTJhOGExMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU3BlZWNo
SW5wdXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU3BlZWNoSW5wdXQuY3BwCkBAIC02
Miw3ICs2Miw3IEBAIGludCBTcGVlY2hJbnB1dDo6cmVnaXN0ZXJMaXN0ZW5lcihTcGVlY2hJbnB1
dExpc3RlbmVyKiBsaXN0ZW5lcikKICNpZiBkZWZpbmVkKERFQlVHKQogICAgIC8vIENoZWNrIGlm
IGFscmVhZHkgcHJlc2VudC4KICAgICBmb3IgKEhhc2hNYXA8aW50LCBTcGVlY2hJbnB1dExpc3Rl
bmVyKj46Oml0ZXJhdG9yIGl0ID0gbV9saXN0ZW5lcnMuYmVnaW4oKTsgaXQgIT0gbV9saXN0ZW5l
cnMuZW5kKCk7ICsraXQpCi0gICAgICBBU1NFUlQoaXQtPnNlY29uZCAhPSBsaXN0ZW5lcik7Cisg
ICAgICBBU1NFUlQoaXQtPnZhbHVlICE9IGxpc3RlbmVyKTsKICNlbmRpZgogCiAgICAgbV9saXN0
ZW5lcnMuYWRkKG1fbmV4dExpc3RlbmVySWQsIGxpc3RlbmVyKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvV2luZG93RmVhdHVyZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9X
aW5kb3dGZWF0dXJlcy5jcHAKaW5kZXggNzU2NDE1MjhkZmVjMmY0YmVjN2VlYTMzZDA3NDBhMGRj
N2Q3YmFjNC4uMWI2YjFkMGIxNjMyZTgyYTk0ZWYwNDY3OWQwYTdkNDdhZDMxY2I1MCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9XaW5kb3dGZWF0dXJlcy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9XaW5kb3dGZWF0dXJlcy5jcHAKQEAgLTIxMiw3ICsyMTIsNyBAQCBib29s
IFdpbmRvd0ZlYXR1cmVzOjpib29sRmVhdHVyZShjb25zdCBEaWFsb2dGZWF0dXJlc01hcCYgZmVh
dHVyZXMsIGNvbnN0IGNoYXIqCiAgICAgRGlhbG9nRmVhdHVyZXNNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gZmVhdHVyZXMuZmluZChrZXkpOwogICAgIGlmIChpdCA9PSBmZWF0dXJlcy5lbmQoKSkK
ICAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTsKLSAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0g
aXQtPnNlY29uZDsKKyAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0gaXQtPnZhbHVlOwogICAgIHJl
dHVybiB2YWx1ZS5pc051bGwoKSB8fCB2YWx1ZSA9PSAiMSIgfHwgdmFsdWUgPT0gInllcyIgfHwg
dmFsdWUgPT0gIm9uIjsKIH0KIApAQCAtMjI0LDcgKzIyNCw3IEBAIGZsb2F0IFdpbmRvd0ZlYXR1
cmVzOjpmbG9hdEZlYXR1cmUoY29uc3QgRGlhbG9nRmVhdHVyZXNNYXAmIGZlYXR1cmVzLCBjb25z
dCBjaGFyCiAgICAgLy8gRklYTUU6IFRoZSB0b0RvdWJsZSBmdW5jdGlvbiBkb2VzIG5vdCBvZmZl
ciBhIHdheSB0byB0ZWxsICIwcSIgZnJvbSBzdHJpbmcgd2l0aCBubyBkaWdpdHMgaW4gaXQ6IEJv
dGgKICAgICAvLyByZXR1cm4gdGhlIG51bWJlciAwIGFuZCBmYWxzZSBmb3Igb2suIEJ1dCAiMHEi
IHNob3VsZCB5aWVsZCB0aGUgbWluaW11bSByYXRoZXIgdGhhbiB0aGUgZGVmYXVsdC4KICAgICBi
b29sIG9rOwotICAgIGRvdWJsZSBwYXJzZWROdW1iZXIgPSBpdC0+c2Vjb25kLnRvRG91YmxlKCZv
ayk7CisgICAgZG91YmxlIHBhcnNlZE51bWJlciA9IGl0LT52YWx1ZS50b0RvdWJsZSgmb2spOwog
ICAgIGlmICgocGFyc2VkTnVtYmVyID09IDAgJiYgIW9rKSB8fCBpc25hbihwYXJzZWROdW1iZXIp
KQogICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlOwogICAgIGlmIChwYXJzZWROdW1iZXIgPCBt
aW4gfHwgbWF4IDw9IG1pbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0
aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRp
b24vQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKaW5kZXggMGYyMzMwMWExNTMwOGFlOWIyYWMzM2Y5
YzZlM2ZkMzQzMjU1NGVlMS4uZTE5NDI3ZDQ2OTI1ODU3MzQwYzI2NzBjNDY5MzBiMTllMzI4YjE1
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29u
dHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9u
Q29udHJvbGxlci5jcHAKQEAgLTkxLDE0ICs5MSwxNCBAQCBkb3VibGUgQW5pbWF0aW9uQ29udHJv
bGxlclByaXZhdGU6OnVwZGF0ZUFuaW1hdGlvbnMoU2V0Q2hhbmdlZCBjYWxsU2V0Q2hhbmdlZC8q
CiAKICAgICBSZW5kZXJPYmplY3RBbmltYXRpb25NYXA6OmNvbnN0X2l0ZXJhdG9yIGFuaW1hdGlv
bnNFbmQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuZW5kKCk7CiAgICAgZm9yIChSZW5kZXJPYmpl
Y3RBbmltYXRpb25NYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9jb21wb3NpdGVBbmltYXRpb25z
LmJlZ2luKCk7IGl0ICE9IGFuaW1hdGlvbnNFbmQ7ICsraXQpIHsKLSAgICAgICAgQ29tcG9zaXRl
QW5pbWF0aW9uKiBjb21wQW5pbSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIENvbXBvc2l0
ZUFuaW1hdGlvbiogY29tcEFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgIGlmICghY29t
cEFuaW0tPnN1c3BlbmRlZCgpICYmIGNvbXBBbmltLT5oYXNBbmltYXRpb25zKCkpIHsKICAgICAg
ICAgICAgIGRvdWJsZSB0ID0gY29tcEFuaW0tPnRpbWVUb05leHRTZXJ2aWNlKCk7CiAgICAgICAg
ICAgICBpZiAodCAhPSAtMSAmJiAodCA8IHRpbWVUb05leHRTZXJ2aWNlIHx8IHRpbWVUb05leHRT
ZXJ2aWNlID09IC0xKSkKICAgICAgICAgICAgICAgICB0aW1lVG9OZXh0U2VydmljZSA9IHQ7CiAg
ICAgICAgICAgICBpZiAoIXRpbWVUb05leHRTZXJ2aWNlKSB7CiAgICAgICAgICAgICAgICAgaWYg
KGNhbGxTZXRDaGFuZ2VkID09IENhbGxTZXRDaGFuZ2VkKSB7Ci0gICAgICAgICAgICAgICAgICAg
IE5vZGUqIG5vZGUgPSBpdC0+Zmlyc3QtPm5vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgTm9k
ZSogbm9kZSA9IGl0LT5rZXktPm5vZGUoKTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFu
b2RlIHx8IChub2RlLT5kb2N1bWVudCgpICYmICFub2RlLT5kb2N1bWVudCgpLT5pblBhZ2VDYWNo
ZSgpKSk7CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE5lZWRzU3R5bGVSZWNhbGMoU3lu
dGhldGljU3R5bGVDaGFuZ2UpOwogICAgICAgICAgICAgICAgICAgICBjYWxsZWRTZXRDaGFuZ2Vk
ID0gdHJ1ZTsKQEAgLTI4OCw5ICsyODgsOSBAQCB2b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2
YXRlOjpzdXNwZW5kQW5pbWF0aW9uc0ZvckRvY3VtZW50KERvY3VtZW50KiBkb2N1bWVudAogICAg
IAogICAgIFJlbmRlck9iamVjdEFuaW1hdGlvbk1hcDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9u
c0VuZCA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5lbmQoKTsKICAgICBmb3IgKFJlbmRlck9iamVj
dEFuaW1hdGlvbk1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMu
YmVnaW4oKTsgaXQgIT0gYW5pbWF0aW9uc0VuZDsgKytpdCkgewotICAgICAgICBSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyID0gaXQtPmZpcnN0OworICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVy
ID0gaXQtPmtleTsKICAgICAgICAgaWYgKHJlbmRlcmVyLT5kb2N1bWVudCgpID09IGRvY3VtZW50
KSB7Ci0gICAgICAgICAgICBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBBbmltID0gaXQtPnNlY29u
ZC5nZXQoKTsKKyAgICAgICAgICAgIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcEFuaW0gPSBpdC0+
dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBjb21wQW5pbS0+c3VzcGVuZEFuaW1hdGlvbnMoKTsK
ICAgICAgICAgfQogICAgIH0KQEAgLTMwNCw5ICszMDQsOSBAQCB2b2lkIEFuaW1hdGlvbkNvbnRy
b2xsZXJQcml2YXRlOjpyZXN1bWVBbmltYXRpb25zRm9yRG9jdW1lbnQoRG9jdW1lbnQqIGRvY3Vt
ZW50KQogICAgIAogICAgIFJlbmRlck9iamVjdEFuaW1hdGlvbk1hcDo6Y29uc3RfaXRlcmF0b3Ig
YW5pbWF0aW9uc0VuZCA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5lbmQoKTsKICAgICBmb3IgKFJl
bmRlck9iamVjdEFuaW1hdGlvbk1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2NvbXBvc2l0ZUFu
aW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gYW5pbWF0aW9uc0VuZDsgKytpdCkgewotICAgICAgICBS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gaXQtPmZpcnN0OworICAgICAgICBSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyID0gaXQtPmtleTsKICAgICAgICAgaWYgKHJlbmRlcmVyLT5kb2N1bWVudCgpID09
IGRvY3VtZW50KSB7Ci0gICAgICAgICAgICBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBBbmltID0g
aXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcEFu
aW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBjb21wQW5pbS0+cmVzdW1lQW5pbWF0
aW9ucygpOwogICAgICAgICB9CiAgICAgfQpAQCAtMzk1LDggKzM5NSw4IEBAIHVuc2lnbmVkIEFu
aW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoRG9jdW1l
bnQqIGRvY3VtZW50CiAgICAgCiAgICAgUmVuZGVyT2JqZWN0QW5pbWF0aW9uTWFwOjpjb25zdF9p
dGVyYXRvciBhbmltYXRpb25zRW5kID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmVuZCgpOwogICAg
IGZvciAoUmVuZGVyT2JqZWN0QW5pbWF0aW9uTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fY29t
cG9zaXRlQW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBhbmltYXRpb25zRW5kOyArK2l0KSB7Ci0g
ICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBpdC0+Zmlyc3Q7Ci0gICAgICAgIENvbXBv
c2l0ZUFuaW1hdGlvbiogY29tcEFuaW0gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICBSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyID0gaXQtPmtleTsKKyAgICAgICAgQ29tcG9zaXRlQW5pbWF0aW9u
KiBjb21wQW5pbSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgaWYgKHJlbmRlcmVyLT5kb2N1
bWVudCgpID09IGRvY3VtZW50KQogICAgICAgICAgICAgY291bnQgKz0gY29tcEFuaW0tPm51bWJl
ck9mQWN0aXZlQW5pbWF0aW9ucygpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uY3BwCmluZGV4IDcwZDYxOWI3ZTQ3YTk1
YmVlMTBkMWU1NzI0ODg3OWYzYjI5MWMxMzkuLjU0MmI1YTFmYmRhMzE3YjQ3MjNhZTc4MTgzZGQy
M2MyNGYwMjVhZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0Nv
bXBvc2l0ZUFuaW1hdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24v
Q29tcG9zaXRlQW5pbWF0aW9uLmNwcApAQCAtNTgsNyArNTgsNyBAQCB2b2lkIENvbXBvc2l0ZUFu
aW1hdGlvbjo6Y2xlYXJSZW5kZXJlcigpCiAgICAgICAgIC8vIGFuIGFuaW1hdGlvbiBjYWxsYmFj
ayAoc2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjA1MikKICAg
ICAgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgdHJhbnNpdGlv
bnNFbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOwogICAgICAgICBmb3IgKENTU1Byb3BlcnR5VHJh
bnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBp
dCAhPSB0cmFuc2l0aW9uc0VuZDsgKytpdCkgewotICAgICAgICAgICAgSW1wbGljaXRBbmltYXRp
b24qIHRyYW5zaXRpb24gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgSW1wbGljaXRB
bmltYXRpb24qIHRyYW5zaXRpb24gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBhbmlt
YXRpb25Db250cm9sbGVyKCktPmFuaW1hdGlvbldpbGxCZVJlbW92ZWQodHJhbnNpdGlvbik7CiAg
ICAgICAgICAgICB0cmFuc2l0aW9uLT5jbGVhcigpOwogICAgICAgICB9CkBAIC02Nyw3ICs2Nyw3
IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpjbGVhclJlbmRlcmVyKCkKICAgICAgICAgbV9r
ZXlmcmFtZUFuaW1hdGlvbnMuY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgICAgICBBbmltYXRpb25O
YW1lTWFwOjpjb25zdF9pdGVyYXRvciBhbmltYXRpb25zRW5kID0gbV9rZXlmcmFtZUFuaW1hdGlv
bnMuZW5kKCk7CiAgICAgICAgIGZvciAoQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBhbmltYXRpb25zRW5kOyAr
K2l0KSB7Ci0gICAgICAgICAgICBLZXlmcmFtZUFuaW1hdGlvbiogYW5pbSA9IGl0LT5zZWNvbmQu
Z2V0KCk7CisgICAgICAgICAgICBLZXlmcmFtZUFuaW1hdGlvbiogYW5pbSA9IGl0LT52YWx1ZS5n
ZXQoKTsKICAgICAgICAgICAgIGFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+YW5pbWF0aW9uV2lsbEJl
UmVtb3ZlZChhbmltKTsKICAgICAgICAgICAgIGFuaW0tPmNsZWFyKCk7CiAgICAgICAgIH0KQEAg
LTg0LDcgKzg0LDcgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnVwZGF0ZVRyYW5zaXRpb25z
KFJlbmRlck9iamVjdCogcmVuZGVyZXIsIFJlbmRlclN0eWxlKgogICAgIC8vIGluIHRoZSBuZXh0
IGxvb3AgYW5kIHRoZW4gdG9zcyB0aGUgb25lcyB0aGF0IGRpZG4ndCBnZXQgbWFya2VkLgogICAg
IENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fdHJhbnNp
dGlvbnMuZW5kKCk7CiAgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAg
ICAgICBpdC0+c2Vjb25kLT5zZXRBY3RpdmUoZmFsc2UpOworICAgICAgICBpdC0+dmFsdWUtPnNl
dEFjdGl2ZShmYWxzZSk7CiAgICAgICAgIAogICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbW9kaWZp
ZWRDdXJyZW50U3R5bGU7CiAgICAgCkBAIC0xODAsNyArMTgwLDcgQEAgdm9pZCBDb21wb3NpdGVB
bmltYXRpb246OnVwZGF0ZVRyYW5zaXRpb25zKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIFJlbmRl
clN0eWxlKgogICAgIFZlY3RvcjxpbnQ+IHRvQmVSZW1vdmVkOwogICAgIGVuZCA9IG1fdHJhbnNp
dGlvbnMuZW5kKCk7CiAgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0g
ICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAg
ICAgSW1wbGljaXRBbmltYXRpb24qIGFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgIGlm
ICghYW5pbS0+YWN0aXZlKCkpIHsKICAgICAgICAgICAgIGFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+
YW5pbWF0aW9uV2lsbEJlUmVtb3ZlZChhbmltKTsKICAgICAgICAgICAgIHRvQmVSZW1vdmVkLmFw
cGVuZChhbmltLT5hbmltYXRpbmdQcm9wZXJ0eSgpKTsKQEAgLTIwNiwxMyArMjA2LDEzIEBAIHZv
aWQgQ29tcG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVLZXlmcmFtZUFuaW1hdGlvbnMoUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlciwgUmVuZGVyCiAgICAgICAgIC8vIFRoZSBjdXJyZW50IGFuZCB0YXJnZXQg
YW5pbWF0aW9ucyBhcmUgdGhlIHNhbWUgc28gd2UganVzdCBuZWVkIHRvIHRvc3MgYW55IAogICAg
ICAgICAvLyBhbmltYXRpb24gd2hpY2ggaXMgZmluaXNoZWQgKHBvc3RBY3RpdmUpLgogICAgICAg
ICBmb3IgKEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFu
aW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0ga2ZlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGlmIChp
dC0+c2Vjb25kLT5wb3N0QWN0aXZlKCkpCi0gICAgICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0
SW5kZXgoLTEpOworICAgICAgICAgICAgaWYgKGl0LT52YWx1ZS0+cG9zdEFjdGl2ZSgpKQorICAg
ICAgICAgICAgICAgIGl0LT52YWx1ZS0+c2V0SW5kZXgoLTEpOwogICAgICAgICB9CiAgICAgfSBl
bHNlIHsKICAgICAgICAgLy8gTWFyayBhbGwgZXhpc3RpbmcgYW5pbWF0aW9ucyBhcyBubyBsb25n
ZXIgYWN0aXZlLgogICAgICAgICBmb3IgKEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0ga2ZlbmQ7ICsraXQpCi0g
ICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRJbmRleCgtMSk7CisgICAgICAgICAgICBpdC0+dmFs
dWUtPnNldEluZGV4KC0xKTsKICAgICAgICAgICAgIAogICAgICAgICAvLyBUb3NzIHRoZSBhbmlt
YXRpb24gb3JkZXIgbWFwLgogICAgICAgICBtX2tleWZyYW1lQW5pbWF0aW9uT3JkZXJNYXAuY2xl
YXIoKTsKQEAgLTI2MSw3ICsyNjEsNyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRl
S2V5ZnJhbWVBbmltYXRpb25zKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIFJlbmRlcgogICAgIFZl
Y3RvcjxBdG9taWNTdHJpbmdJbXBsKj4gYW5pbXNUb0JlUmVtb3ZlZDsKICAgICBrZmVuZCA9IG1f
a2V5ZnJhbWVBbmltYXRpb25zLmVuZCgpOwogICAgIGZvciAoQW5pbWF0aW9uTmFtZU1hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBrZmVu
ZDsgKytpdCkgewotICAgICAgICBLZXlmcmFtZUFuaW1hdGlvbioga2V5ZnJhbWVBbmltID0gaXQt
PnNlY29uZC5nZXQoKTsKKyAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24qIGtleWZyYW1lQW5pbSA9
IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgaWYgKGtleWZyYW1lQW5pbS0+aW5kZXgoKSA8IDAp
IHsKICAgICAgICAgICAgIGFuaW1zVG9CZVJlbW92ZWQuYXBwZW5kKGtleWZyYW1lQW5pbS0+bmFt
ZSgpLmltcGwoKSk7CiAgICAgICAgICAgICBhbmltYXRpb25Db250cm9sbGVyKCktPmFuaW1hdGlv
bldpbGxCZVJlbW92ZWQoa2V5ZnJhbWVBbmltKTsKQEAgLTI4OSw3ICsyODksNyBAQCBQYXNzUmVm
UHRyPFJlbmRlclN0eWxlPiBDb21wb3NpdGVBbmltYXRpb246OmFuaW1hdGUoUmVuZGVyT2JqZWN0
KiByZW5kZXJlciwgUmVuZAogICAgICAgICBpZiAoIW1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSB7
CiAgICAgICAgICAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBl
bmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOwogICAgICAgICAgICAgZm9yIChDU1NQcm9wZXJ0eVRy
YW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKEltcGxpY2l0QW5pbWF0aW9u
KiBhbmltID0gaXQtPnNlY29uZC5nZXQoKSkKKyAgICAgICAgICAgICAgICBpZiAoSW1wbGljaXRB
bmltYXRpb24qIGFuaW0gPSBpdC0+dmFsdWUuZ2V0KCkpCiAgICAgICAgICAgICAgICAgICAgIGFu
aW0tPmFuaW1hdGUodGhpcywgcmVuZGVyZXIsIGN1cnJlbnRTdHlsZSwgdGFyZ2V0U3R5bGUsIHJl
c3VsdFN0eWxlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMzExLDcgKzMxMSw3IEBA
IFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IENvbXBvc2l0ZUFuaW1hdGlvbjo6Z2V0QW5pbWF0ZWRT
dHlsZSgpIGNvbnN0CiAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiByZXN1bHRTdHlsZTsKICAgICBD
U1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3RyYW5zaXRp
b25zLmVuZCgpOwogICAgIGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAg
ICAgICBpZiAoSW1wbGljaXRBbmltYXRpb24qIGltcGxpY2l0QW5pbWF0aW9uID0gaXQtPnNlY29u
ZC5nZXQoKSkKKyAgICAgICAgaWYgKEltcGxpY2l0QW5pbWF0aW9uKiBpbXBsaWNpdEFuaW1hdGlv
biA9IGl0LT52YWx1ZS5nZXQoKSkKICAgICAgICAgICAgIGltcGxpY2l0QW5pbWF0aW9uLT5nZXRB
bmltYXRlZFN0eWxlKHJlc3VsdFN0eWxlKTsKICAgICB9CiAKQEAgLTMzMiw3ICszMzIsNyBAQCB2
b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6c2V0QW5pbWF0aW5nKGJvb2wgYW5pbWF0aW5nKQogICAg
IGlmICghbV90cmFuc2l0aW9ucy5pc0VtcHR5KCkpIHsKICAgICAgICAgQ1NTUHJvcGVydHlUcmFu
c2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgdHJhbnNpdGlvbnNFbmQgPSBtX3RyYW5zaXRpb25z
LmVuZCgpOwogICAgICAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSB0cmFuc2l0aW9uc0VuZDsg
KytpdCkgewotICAgICAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIHRyYW5zaXRpb24gPSBpdC0+
c2Vjb25kLmdldCgpOworICAgICAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIHRyYW5zaXRpb24g
PSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICB0cmFuc2l0aW9uLT5zZXRBbmltYXRpbmco
YW5pbWF0aW5nKTsKICAgICAgICAgfQogICAgIH0KQEAgLTM0MCw3ICszNDAsNyBAQCB2b2lkIENv
bXBvc2l0ZUFuaW1hdGlvbjo6c2V0QW5pbWF0aW5nKGJvb2wgYW5pbWF0aW5nKQogICAgICAgICBt
X2tleWZyYW1lQW5pbWF0aW9ucy5jaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgICAgIEFuaW1hdGlv
bk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGFuaW1hdGlvbnNFbmQgPSBtX2tleWZyYW1lQW5pbWF0
aW9ucy5lbmQoKTsKICAgICAgICAgZm9yIChBbmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGFuaW1hdGlvbnNFbmQ7
ICsraXQpIHsKLSAgICAgICAgICAgIEtleWZyYW1lQW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29u
ZC5nZXQoKTsKKyAgICAgICAgICAgIEtleWZyYW1lQW5pbWF0aW9uKiBhbmltID0gaXQtPnZhbHVl
LmdldCgpOwogICAgICAgICAgICAgYW5pbS0+c2V0QW5pbWF0aW5nKGFuaW1hdGluZyk7CiAgICAg
ICAgIH0KICAgICB9CkBAIC0zNTUsNyArMzU1LDcgQEAgZG91YmxlIENvbXBvc2l0ZUFuaW1hdGlv
bjo6dGltZVRvTmV4dFNlcnZpY2UoKSBjb25zdAogICAgIGlmICghbV90cmFuc2l0aW9ucy5pc0Vt
cHR5KCkpIHsKICAgICAgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0
b3IgdHJhbnNpdGlvbnNFbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOwogICAgICAgICBmb3IgKENT
U1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9u
cy5iZWdpbigpOyBpdCAhPSB0cmFuc2l0aW9uc0VuZDsgKytpdCkgewotICAgICAgICAgICAgSW1w
bGljaXRBbmltYXRpb24qIHRyYW5zaXRpb24gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAg
ICAgSW1wbGljaXRBbmltYXRpb24qIHRyYW5zaXRpb24gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAg
ICAgICAgICBkb3VibGUgdCA9IHRyYW5zaXRpb24gPyB0cmFuc2l0aW9uLT50aW1lVG9OZXh0U2Vy
dmljZSgpIDogLTE7CiAgICAgICAgICAgICBpZiAodCA8IG1pblQgfHwgbWluVCA9PSAtMSkKICAg
ICAgICAgICAgICAgICBtaW5UID0gdDsKQEAgLTM2Nyw3ICszNjcsNyBAQCBkb3VibGUgQ29tcG9z
aXRlQW5pbWF0aW9uOjp0aW1lVG9OZXh0U2VydmljZSgpIGNvbnN0CiAgICAgICAgIG1fa2V5ZnJh
bWVBbmltYXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsKICAgICAgICAgQW5pbWF0aW9uTmFtZU1h
cDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmVu
ZCgpOwogICAgICAgICBmb3IgKEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gYW5pbWF0aW9uc0VuZDsgKytpdCkg
ewotICAgICAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24qIGFuaW1hdGlvbiA9IGl0LT5zZWNvbmQu
Z2V0KCk7CisgICAgICAgICAgICBLZXlmcmFtZUFuaW1hdGlvbiogYW5pbWF0aW9uID0gaXQtPnZh
bHVlLmdldCgpOwogICAgICAgICAgICAgZG91YmxlIHQgPSBhbmltYXRpb24gPyBhbmltYXRpb24t
PnRpbWVUb05leHRTZXJ2aWNlKCkgOiAtMTsKICAgICAgICAgICAgIGlmICh0IDwgbWluVCB8fCBt
aW5UID09IC0xKQogICAgICAgICAgICAgICAgIG1pblQgPSB0OwpAQCAtMzg5LDcgKzM4OSw3IEBA
IFBhc3NSZWZQdHI8S2V5ZnJhbWVBbmltYXRpb24+IENvbXBvc2l0ZUFuaW1hdGlvbjo6Z2V0QW5p
bWF0aW9uRm9yUHJvcGVydHkoaW50IHByCiAgICAgICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zLmNo
ZWNrQ29uc2lzdGVuY3koKTsKICAgICAgICAgQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0
b3IgYW5pbWF0aW9uc0VuZCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmVuZCgpOwogICAgICAgICBm
b3IgKEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1h
dGlvbnMuYmVnaW4oKTsgaXQgIT0gYW5pbWF0aW9uc0VuZDsgKytpdCkgewotICAgICAgICAgICAg
UmVmUHRyPEtleWZyYW1lQW5pbWF0aW9uPiBhbmltID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAg
IFJlZlB0cjxLZXlmcmFtZUFuaW1hdGlvbj4gYW5pbSA9IGl0LT52YWx1ZTsKICAgICAgICAgICAg
IGlmIChhbmltLT5oYXNBbmltYXRpb25Gb3JQcm9wZXJ0eShwcm9wZXJ0eSkpCiAgICAgICAgICAg
ICAgICAgcmV0dmFsID0gYW5pbTsKICAgICAgICAgfQpAQCAtNDA5LDE0ICs0MDksMTQgQEAgdm9p
ZCBDb21wb3NpdGVBbmltYXRpb246OnN1c3BlbmRBbmltYXRpb25zKCkKICAgICAgICAgbV9rZXlm
cmFtZUFuaW1hdGlvbnMuY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgICAgICBBbmltYXRpb25OYW1l
TWFwOjpjb25zdF9pdGVyYXRvciBhbmltYXRpb25zRW5kID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMu
ZW5kKCk7CiAgICAgICAgIGZvciAoQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtX2tleWZyYW1lQW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBhbmltYXRpb25zRW5kOyArK2l0
KSB7Ci0gICAgICAgICAgICBpZiAoS2V5ZnJhbWVBbmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25k
LmdldCgpKQorICAgICAgICAgICAgaWYgKEtleWZyYW1lQW5pbWF0aW9uKiBhbmltID0gaXQtPnZh
bHVlLmdldCgpKQogICAgICAgICAgICAgICAgIGFuaW0tPnVwZGF0ZVBsYXlTdGF0ZShBbmltUGxh
eVN0YXRlUGF1c2VkKTsKICAgICAgICAgfQogICAgIH0KICAgICBpZiAoIW1fdHJhbnNpdGlvbnMu
aXNFbXB0eSgpKSB7CiAgICAgICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0
ZXJhdG9yIHRyYW5zaXRpb25zRW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKICAgICAgICAgZm9y
IChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNp
dGlvbnMuYmVnaW4oKTsgaXQgIT0gdHJhbnNpdGlvbnNFbmQ7ICsraXQpIHsKLSAgICAgICAgICAg
IEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAg
IEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAgICAg
aWYgKGFuaW0gJiYgYW5pbS0+aGFzU3R5bGUoKSkKICAgICAgICAgICAgICAgICBhbmltLT51cGRh
dGVQbGF5U3RhdGUoQW5pbVBsYXlTdGF0ZVBhdXNlZCk7CiAgICAgICAgIH0KQEAgLTQzNCw3ICs0
MzQsNyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6cmVzdW1lQW5pbWF0aW9ucygpCiAgICAg
ICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsKICAgICAgICAgQW5p
bWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fa2V5ZnJhbWVB
bmltYXRpb25zLmVuZCgpOwogICAgICAgICBmb3IgKEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gYW5pbWF0aW9u
c0VuZDsgKytpdCkgewotICAgICAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24qIGFuaW0gPSBpdC0+
c2Vjb25kLmdldCgpOworICAgICAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24qIGFuaW0gPSBpdC0+
dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoYW5pbSAmJiBhbmltLT5wbGF5U3RhdGVQbGF5
aW5nKCkpCiAgICAgICAgICAgICAgICAgYW5pbS0+dXBkYXRlUGxheVN0YXRlKEFuaW1QbGF5U3Rh
dGVQbGF5aW5nKTsKICAgICAgICAgfQpAQCAtNDQzLDcgKzQ0Myw3IEBAIHZvaWQgQ29tcG9zaXRl
QW5pbWF0aW9uOjpyZXN1bWVBbmltYXRpb25zKCkKICAgICBpZiAoIW1fdHJhbnNpdGlvbnMuaXNF
bXB0eSgpKSB7CiAgICAgICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJh
dG9yIHRyYW5zaXRpb25zRW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKICAgICAgICAgZm9yIChD
U1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlv
bnMuYmVnaW4oKTsgaXQgIT0gdHJhbnNpdGlvbnNFbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIElt
cGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgIElt
cGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAgICAgaWYg
KGFuaW0gJiYgYW5pbS0+aGFzU3R5bGUoKSkKICAgICAgICAgICAgICAgICBhbmltLT51cGRhdGVQ
bGF5U3RhdGUoQW5pbVBsYXlTdGF0ZVBsYXlpbmcpOwogICAgICAgICB9CkBAIC00NTUsNyArNDU1
LDcgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246Om92ZXJyaWRlSW1wbGljaXRBbmltYXRpb25z
KGludCBwcm9wZXJ0eSkKICAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVy
YXRvciBlbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOwogICAgIGlmICghbV90cmFuc2l0aW9ucy5p
c0VtcHR5KCkpIHsKICAgICAgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7
Ci0gICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT5zZWNvbmQuZ2V0KCk7
CisgICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT52YWx1ZS5nZXQoKTsK
ICAgICAgICAgICAgIGlmIChhbmltICYmIGFuaW0tPmFuaW1hdGluZ1Byb3BlcnR5KCkgPT0gcHJv
cGVydHkpCiAgICAgICAgICAgICAgICAgYW5pbS0+c2V0T3ZlcnJpZGRlbih0cnVlKTsKICAgICAg
ICAgfQpAQCAtNDY3LDcgKzQ2Nyw3IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpyZXN1bWVP
dmVycmlkZGVuSW1wbGljaXRBbmltYXRpb25zKGludCBwcm9wZXJ0eSkKICAgICBpZiAoIW1fdHJh
bnNpdGlvbnMuaXNFbXB0eSgpKSB7CiAgICAgICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fdHJhbnNpdGlvbnMuZW5kKCk7CiAgICAgICAgIGZvciAo
Q1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRp
b25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgSW1wbGljaXRBbmlt
YXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgSW1wbGljaXRBbmlt
YXRpb24qIGFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoYW5pbSAmJiBh
bmltLT5hbmltYXRpbmdQcm9wZXJ0eSgpID09IHByb3BlcnR5KQogICAgICAgICAgICAgICAgIGFu
aW0tPnNldE92ZXJyaWRkZW4oZmFsc2UpOwogICAgICAgICB9CkBAIC00ODAsNyArNDgwLDcgQEAg
Ym9vbCBDb21wb3NpdGVBbmltYXRpb246OmlzQW5pbWF0aW5nUHJvcGVydHkoaW50IHByb3BlcnR5
LCBib29sIGFjY2VsZXJhdGVkT25seSwKICAgICAgICAgbV9rZXlmcmFtZUFuaW1hdGlvbnMuY2hl
Y2tDb25zaXN0ZW5jeSgpOwogICAgICAgICBBbmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRv
ciBhbmltYXRpb25zRW5kID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuZW5kKCk7CiAgICAgICAgIGZv
ciAoQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lQW5pbWF0
aW9ucy5iZWdpbigpOyBpdCAhPSBhbmltYXRpb25zRW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBL
ZXlmcmFtZUFuaW1hdGlvbiogYW5pbSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBL
ZXlmcmFtZUFuaW1hdGlvbiogYW5pbSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGlm
IChhbmltICYmIGFuaW0tPmlzQW5pbWF0aW5nUHJvcGVydHkocHJvcGVydHksIGFjY2VsZXJhdGVk
T25seSwgaXNSdW5uaW5nTm93KSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgfQpAQCAtNDg5LDcgKzQ4OSw3IEBAIGJvb2wgQ29tcG9zaXRlQW5pbWF0aW9uOjppc0FuaW1h
dGluZ1Byb3BlcnR5KGludCBwcm9wZXJ0eSwgYm9vbCBhY2NlbGVyYXRlZE9ubHksCiAgICAgaWYg
KCFtX3RyYW5zaXRpb25zLmlzRW1wdHkoKSkgewogICAgICAgICBDU1NQcm9wZXJ0eVRyYW5zaXRp
b25zTWFwOjpjb25zdF9pdGVyYXRvciB0cmFuc2l0aW9uc0VuZCA9IG1fdHJhbnNpdGlvbnMuZW5k
KCk7CiAgICAgICAgIGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IHRyYW5zaXRpb25zRW5kOyArK2l0
KSB7Ci0gICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT5zZWNvbmQuZ2V0
KCk7CisgICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT52YWx1ZS5nZXQo
KTsKICAgICAgICAgICAgIGlmIChhbmltICYmIGFuaW0tPmlzQW5pbWF0aW5nUHJvcGVydHkocHJv
cGVydHksIGFjY2VsZXJhdGVkT25seSwgaXNSdW5uaW5nTm93KSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtNTU1LDcgKzU1NSw3IEBAIHVuc2lnbmVkIENvbXBv
c2l0ZUFuaW1hdGlvbjo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKCkgY29uc3QKICAgICAgICAg
bV9rZXlmcmFtZUFuaW1hdGlvbnMuY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgICAgICBBbmltYXRp
b25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBhbmltYXRpb25zRW5kID0gbV9rZXlmcmFtZUFuaW1h
dGlvbnMuZW5kKCk7CiAgICAgICAgIGZvciAoQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBhbmltYXRpb25zRW5k
OyArK2l0KSB7Ci0gICAgICAgICAgICBLZXlmcmFtZUFuaW1hdGlvbiogYW5pbSA9IGl0LT5zZWNv
bmQuZ2V0KCk7CisgICAgICAgICAgICBLZXlmcmFtZUFuaW1hdGlvbiogYW5pbSA9IGl0LT52YWx1
ZS5nZXQoKTsKICAgICAgICAgICAgIGlmIChhbmltLT5ydW5uaW5nKCkpCiAgICAgICAgICAgICAg
ICAgKytjb3VudDsKICAgICAgICAgfQpAQCAtNTY0LDcgKzU2NCw3IEBAIHVuc2lnbmVkIENvbXBv
c2l0ZUFuaW1hdGlvbjo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKCkgY29uc3QKICAgICBpZiAo
IW1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSB7CiAgICAgICAgIENTU1Byb3BlcnR5VHJhbnNpdGlv
bnNNYXA6OmNvbnN0X2l0ZXJhdG9yIHRyYW5zaXRpb25zRW5kID0gbV90cmFuc2l0aW9ucy5lbmQo
KTsKICAgICAgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gdHJhbnNpdGlvbnNFbmQ7ICsraXQp
IHsKLSAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZC5nZXQo
KTsKKyAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnZhbHVlLmdldCgp
OwogICAgICAgICAgICAgaWYgKGFuaW0tPnJ1bm5pbmcoKSkKICAgICAgICAgICAgICAgICArK2Nv
dW50OwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MYW5n
dWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MYW5ndWFnZS5jcHAKaW5kZXggNDdm
MDlmNjA5Mjk5NzFlMzE3MzU2ZTQ5ZmJjYjYzYjVkYjQxN2YzNy4uYjNmOTdiZWM5NzIxNWI4MDli
MzQxZWFjMDFhNjE3ZTgxYWE3YTA2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vTGFuZ3VhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xhbmd1YWdlLmNw
cApAQCAtNTMsNyArNTMsNyBAQCB2b2lkIGxhbmd1YWdlRGlkQ2hhbmdlKCkKIHsKICAgICBPYnNl
cnZlck1hcDo6aXRlcmF0b3IgZW5kID0gb2JzZXJ2ZXJNYXAoKS5lbmQoKTsKICAgICBmb3IgKE9i
c2VydmVyTWFwOjppdGVyYXRvciBpdGVyID0gb2JzZXJ2ZXJNYXAoKS5iZWdpbigpOyBpdGVyICE9
IGVuZDsgKytpdGVyKQotICAgICAgICBpdGVyLT5zZWNvbmQoaXRlci0+Zmlyc3QpOworICAgICAg
ICBpdGVyLT52YWx1ZShpdGVyLT5rZXkpOwogfQogCiBTdHJpbmcgZGVmYXVsdExhbmd1YWdlKCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0hSVEZFbGV2YXRpb24u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vSFJURkVsZXZhdGlvbi5jcHAKaW5k
ZXggZWIwN2Q0ZWM5ZjkyYjc0Mjg1MDIxODMyNTJiMTAxOTUyOWYyMThjMy4uMDdlMDAxODU4YzFi
NjIyNDFlNGI3NmFiM2NmZDY1MGE2ZGE0YWMzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYXVkaW8vSFJURkVsZXZhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYXVkaW8vSFJURkVsZXZhdGlvbi5jcHAKQEAgLTc5LDcgKzc5LDcgQEAgc3RhdGljIEF1
ZGlvQnVzKiBnZXRDb25jYXRlbmF0ZWRJbXB1bHNlUmVzcG9uc2VzRm9yU3ViamVjdChjb25zdCBT
dHJpbmcmIHN1YmplY3QKICAgICAgICAgYnVzID0gY29uY2F0ZW5hdGVkSW1wdWxzZVJlc3BvbnNl
cy5sZWFrUHRyKCk7CiAgICAgICAgIGF1ZGlvQnVzTWFwLnNldChzdWJqZWN0TmFtZSwgYnVzKTsK
ICAgICB9IGVsc2UKLSAgICAgICAgYnVzID0gaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgYnVz
ID0gaXRlcmF0b3ItPnZhbHVlOwogCiAgICAgc2l6ZV90IHJlc3BvbnNlTGVuZ3RoID0gYnVzLT5s
ZW5ndGgoKTsKICAgICBzaXplX3QgZXhwZWN0ZWRMZW5ndGggPSBzdGF0aWNfY2FzdDxzaXplX3Q+
KFRvdGFsTnVtYmVyT2ZSZXNwb25zZXMgKiBSZXNwb25zZUZyYW1lU2l6ZSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0Nvb2tpZU1hbmFnZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9Db29raWVNYW5hZ2VyLmNwcAppbmRl
eCBkOWViYmYzN2RmMjQ3Yzk3ZGI4NzMyNDBlY2IwMDJiZDE0ZjYxMDdiLi4xNTg2OWFhYzU1YWRj
Mjg4Y2NiODdkNzNiMDcyNzAyY2UxNzBmMGE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ibGFja2JlcnJ5L0Nvb2tpZU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2JsYWNrYmVycnkvQ29va2llTWFuYWdlci5jcHAKQEAgLTIyNCw3ICsyMjQsNyBA
QCBTdHJpbmcgQ29va2llTWFuYWdlcjo6Z2VuZXJhdGVIdG1sRnJhZ21lbnRGb3JDb29raWVzKCkK
IAogICAgIFZlY3RvcjxQYXJzZWRDb29raWUqPiBjb29raWVDYW5kaWRhdGVzOwogICAgIGZvciAo
SGFzaE1hcDxTdHJpbmcsIENvb2tpZU1hcCo+OjppdGVyYXRvciBpdCA9IG1fbWFuYWdlck1hcC5i
ZWdpbigpOyBpdCAhPSBtX21hbmFnZXJNYXAuZW5kKCk7ICsraXQpCi0gICAgICAgIGl0LT5zZWNv
bmQtPmdldEFsbENoaWxkQ29va2llcygmY29va2llQ2FuZGlkYXRlcyk7CisgICAgICAgIGl0LT52
YWx1ZS0+Z2V0QWxsQ2hpbGRDb29raWVzKCZjb29raWVDYW5kaWRhdGVzKTsKIAogICAgIFN0cmlu
ZyByZXN1bHQ7CiAgICAgUGFyc2VkQ29va2llKiBjb29raWUgPSAwOwpAQCAtMzQzLDcgKzM0Myw3
IEBAIHZvaWQgQ29va2llTWFuYWdlcjo6cmVtb3ZlQWxsQ29va2llcyhCYWNraW5nU3RvcmVSZW1v
dmFsUG9saWN5IGJhY2tpbmdTdG9yZVJlbW92CiAgICAgSGFzaE1hcDxTdHJpbmcsIENvb2tpZU1h
cCo+OjppdGVyYXRvciBmaXJzdCA9IG1fbWFuYWdlck1hcC5iZWdpbigpOwogICAgIEhhc2hNYXA8
U3RyaW5nLCBDb29raWVNYXAqPjo6aXRlcmF0b3IgZW5kID0gbV9tYW5hZ2VyTWFwLmVuZCgpOwog
ICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIENvb2tpZU1hcCo+OjppdGVyYXRvciBpdCA9IGZpcnN0
OyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPmRlbGV0ZUFsbENvb2tpZXNB
bmREb21haW5zKCk7CisgICAgICAgIGl0LT52YWx1ZS0+ZGVsZXRlQWxsQ29va2llc0FuZERvbWFp
bnMoKTsKIAogICAgIGlmIChiYWNraW5nU3RvcmVSZW1vdmFsID09IFJlbW92ZUZyb21CYWNraW5n
U3RvcmUpCiAgICAgICAgIG1fY29va2llQmFja2luZ1N0b3JlLT5yZW1vdmVBbGwoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvQ29va2llTWFwLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvQ29va2llTWFwLmNwcAppbmRleCBi
MjE3YjJlNDg0NTBlZDBmZDI1NGMzZDBjYWU3NTUzZjFlMTFhZTQwLi4yYjAzODBlNzlhYjc4MjRm
NjIyZTE0N2VmMmE5MzYxN2I5YWE4YzdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ibGFja2JlcnJ5L0Nvb2tpZU1hcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYmxhY2tiZXJyeS9Db29raWVNYXAuY3BwCkBAIC0xNjYsNyArMTY2LDcgQEAgUGFyc2VkQ29v
a2llKiBDb29raWVNYXA6OnJlbW92ZU9sZGVzdENvb2tpZSgpCiAgICAgICAgIENvb2tpZUxvZygi
Q29va2llTWFwIC0gbG9va2luZyBpbnRvIHN1YmRvbWFpbnMiKTsKIAogICAgICAgICBmb3IgKEhh
c2hNYXA8U3RyaW5nLCBDb29raWVNYXAqPjo6aXRlcmF0b3IgaXQgPSBtX3N1YmRvbWFpbnMuYmVn
aW4oKTsgaXQgIT0gbV9zdWJkb21haW5zLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgICAgICBvbGRl
c3RDb29raWUgPSBpdC0+c2Vjb25kLT5yZW1vdmVPbGRlc3RDb29raWUoKTsKKyAgICAgICAgICAg
IG9sZGVzdENvb2tpZSA9IGl0LT52YWx1ZS0+cmVtb3ZlT2xkZXN0Q29va2llKCk7CiAgICAgICAg
ICAgICBpZiAob2xkZXN0Q29va2llKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CkBAIC0yMDgsNyArMjA4LDcgQEAgdm9pZCBDb29raWVNYXA6OmdldEFsbENoaWxkQ29va2llcyhW
ZWN0b3I8UGFyc2VkQ29va2llKj4qIHN0YWNrT2ZDb29raWVzKQogICAgIENvb2tpZUxvZygiQ29v
a2llTWFwIC0gZ2V0QWxsQ2hpbGRDb29raWVzIGluIE1hcCAtICVzIiwgZ2V0TmFtZSgpLnV0Zjgo
KS5kYXRhKCkpOwogICAgIGdldEFsbENvb2tpZXMoc3RhY2tPZkNvb2tpZXMpOwogICAgIGZvciAo
SGFzaE1hcDxTdHJpbmcsIENvb2tpZU1hcCo+OjppdGVyYXRvciBpdCA9IG1fc3ViZG9tYWlucy5i
ZWdpbigpOyBpdCAhPSBtX3N1YmRvbWFpbnMuZW5kKCk7ICsraXQpCi0gICAgICAgIGl0LT5zZWNv
bmQtPmdldEFsbENoaWxkQ29va2llcyhzdGFja09mQ29va2llcyk7CisgICAgICAgIGl0LT52YWx1
ZS0+Z2V0QWxsQ2hpbGRDb29raWVzKHN0YWNrT2ZDb29raWVzKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2YvQmluYXJ5
UHJvcGVydHlMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL0JpbmFyeVByb3Bl
cnR5TGlzdC5jcHAKaW5kZXggNGJjN2MyZTYwN2VhYjNlMGI0NzM2MGE2MjI2ZTFhMjdhNTIwOGIw
OS4uNDhhMGY5MTdlOTNlZjg5MjE1NmVkNDcxMjEyOGQwMGY5YzBmNzlmNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2YvQmluYXJ5UHJvcGVydHlMaXN0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9CaW5hcnlQcm9wZXJ0eUxpc3QuY3BwCkBAIC0yMjks
NyArMjI5LDcgQEAgdm9pZCBCaW5hcnlQcm9wZXJ0eUxpc3RQbGFuOjp3cml0ZUludGVnZXJBcnJh
eShjb25zdCBpbnQqIGludGVnZXJzLCBzaXplX3Qgc2l6ZSkKICAgICAgICAgcmV0dXJuOwogICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQogICAgICAgICB3cml0ZUludGVnZXIo
aW50ZWdlcnNbaV0pOwotICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gbV9jdXJyZW50
T2JqZWN0UmVmZXJlbmNlKys7CisgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IG1fY3Vy
cmVudE9iamVjdFJlZmVyZW5jZSsrOwogICAgIHdyaXRlQXJyYXlPYmplY3Qoc2l6ZSk7CiAgICAg
bV9jdXJyZW50QWdncmVnYXRlU2l6ZSA9IHNhdmVkQWdncmVnYXRlU2l6ZTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCmluZGV4IDQ3ZjI1MWM4
NDE0YTFlMmRiNTlmMDA0YTkwNDRhYTBmOGMyZTlkNjUuLjdhNGU5YzdmZGIzNWZjYTc2OTQ1NjIx
NzRiZDlhN2Y2YzBlNzk5ZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhY2hlLmNwcApAQCAtMTk5LDcgKzE5OSw3IEBAIEZvbnRQbGF0Zm9ybURhdGEqIEZv
bnRDYWNoZTo6Z2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24m
IGZvCiAgICAgICAgIGdGb250UGxhdGZvcm1EYXRhQ2FjaGUtPnNldChrZXksIHJlc3VsdCk7CiAg
ICAgICAgIGZvdW5kUmVzdWx0ID0gcmVzdWx0OwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHJlc3Vs
dCA9IGl0LT5zZWNvbmQ7CisgICAgICAgIHJlc3VsdCA9IGl0LT52YWx1ZTsKICAgICAgICAgZm91
bmRSZXN1bHQgPSB0cnVlOwogICAgIH0KIApAQCAtMjk0LDIwICsyOTQsMjAgQEAgU2ltcGxlRm9u
dERhdGEqIEZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9udERhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0
YSogcGxhdGZvcm1EYXQKICAgICAgICAgcmV0dXJuIG5ld1ZhbHVlLmZpcnN0OwogICAgIH0KIAot
ICAgIGlmICghcmVzdWx0LmdldCgpLT5zZWNvbmQuc2Vjb25kKSB7Ci0gICAgICAgIEFTU0VSVChn
SW5hY3RpdmVGb250RGF0YS0+Y29udGFpbnMocmVzdWx0LmdldCgpLT5zZWNvbmQuZmlyc3QpKTsK
LSAgICAgICAgZ0luYWN0aXZlRm9udERhdGEtPnJlbW92ZShyZXN1bHQuZ2V0KCktPnNlY29uZC5m
aXJzdCk7CisgICAgaWYgKCFyZXN1bHQuZ2V0KCktPnZhbHVlLnNlY29uZCkgeworICAgICAgICBB
U1NFUlQoZ0luYWN0aXZlRm9udERhdGEtPmNvbnRhaW5zKHJlc3VsdC5nZXQoKS0+dmFsdWUuZmly
c3QpKTsKKyAgICAgICAgZ0luYWN0aXZlRm9udERhdGEtPnJlbW92ZShyZXN1bHQuZ2V0KCktPnZh
bHVlLmZpcnN0KTsKICAgICB9CiAKICAgICBpZiAoc2hvdWxkUmV0YWluID09IFJldGFpbikKLSAg
ICAgICAgcmVzdWx0LmdldCgpLT5zZWNvbmQuc2Vjb25kKys7Ci0gICAgZWxzZSBpZiAoIXJlc3Vs
dC5nZXQoKS0+c2Vjb25kLnNlY29uZCkgeworICAgICAgICByZXN1bHQuZ2V0KCktPnZhbHVlLnNl
Y29uZCsrOworICAgIGVsc2UgaWYgKCFyZXN1bHQuZ2V0KCktPnZhbHVlLnNlY29uZCkgewogICAg
ICAgICAvLyBJZiBzaG91bGRSZXRhaW4gaXMgRG9Ob3RSZXRhaW4gYW5kIGNvdW50IGlzIDAsIHdl
IHdhbnQgdG8gcmVtb3ZlIHRoZSBmb250RGF0YSBmcm9tIAogICAgICAgICAvLyBnSW5hY3RpdmVG
b250RGF0YSAoYWJvdmUpIGFuZCByZS1hZGQgaGVyZSB0byB1cGRhdGUgTFJVIHBvc2l0aW9uLgot
ICAgICAgICBnSW5hY3RpdmVGb250RGF0YS0+YWRkKHJlc3VsdC5nZXQoKS0+c2Vjb25kLmZpcnN0
KTsKKyAgICAgICAgZ0luYWN0aXZlRm9udERhdGEtPmFkZChyZXN1bHQuZ2V0KCktPnZhbHVlLmZp
cnN0KTsKICAgICB9CiAKLSAgICByZXR1cm4gcmVzdWx0LmdldCgpLT5zZWNvbmQuZmlyc3Q7Cisg
ICAgcmV0dXJuIHJlc3VsdC5nZXQoKS0+dmFsdWUuZmlyc3Q7CiB9CiAKIFNpbXBsZUZvbnREYXRh
KiBGb250Q2FjaGU6OmdldE5vblJldGFpbmVkTGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBG
b250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikKQEAgLTMyMyw4ICszMjMsOCBAQCB2b2lk
IEZvbnRDYWNoZTo6cmVsZWFzZUZvbnREYXRhKGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0
YSkKICAgICBGb250RGF0YUNhY2hlOjppdGVyYXRvciBpdCA9IGdGb250RGF0YUNhY2hlLT5maW5k
KGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKSk7CiAgICAgQVNTRVJUKGl0ICE9IGdGb250RGF0YUNh
Y2hlLT5lbmQoKSk7CiAKLSAgICBBU1NFUlQoaXQtPnNlY29uZC5zZWNvbmQpOwotICAgIGlmICgh
LS1pdC0+c2Vjb25kLnNlY29uZCkKKyAgICBBU1NFUlQoaXQtPnZhbHVlLnNlY29uZCk7CisgICAg
aWYgKCEtLWl0LT52YWx1ZS5zZWNvbmQpCiAgICAgICAgIGdJbmFjdGl2ZUZvbnREYXRhLT5hZGQo
Zm9udERhdGEpOwogfQogCkBAIC0zNzIsOCArMzcyLDggQEAgdm9pZCBGb250Q2FjaGU6OnB1cmdl
SW5hY3RpdmVGb250RGF0YShpbnQgY291bnQpCiAgICAgICAgIGtleXNUb1JlbW92ZS5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KGdGb250UGxhdGZvcm1EYXRhQ2FjaGUtPnNpemUoKSk7CiAgICAgICAg
IEZvbnRQbGF0Zm9ybURhdGFDYWNoZTo6aXRlcmF0b3IgcGxhdGZvcm1EYXRhRW5kID0gZ0ZvbnRQ
bGF0Zm9ybURhdGFDYWNoZS0+ZW5kKCk7CiAgICAgICAgIGZvciAoRm9udFBsYXRmb3JtRGF0YUNh
Y2hlOjppdGVyYXRvciBwbGF0Zm9ybURhdGEgPSBnRm9udFBsYXRmb3JtRGF0YUNhY2hlLT5iZWdp
bigpOyBwbGF0Zm9ybURhdGEgIT0gcGxhdGZvcm1EYXRhRW5kOyArK3BsYXRmb3JtRGF0YSkgewot
ICAgICAgICAgICAgaWYgKHBsYXRmb3JtRGF0YS0+c2Vjb25kICYmICFnRm9udERhdGFDYWNoZS0+
Y29udGFpbnMoKnBsYXRmb3JtRGF0YS0+c2Vjb25kKSkKLSAgICAgICAgICAgICAgICBrZXlzVG9S
ZW1vdmUuYXBwZW5kKHBsYXRmb3JtRGF0YS0+Zmlyc3QpOworICAgICAgICAgICAgaWYgKHBsYXRm
b3JtRGF0YS0+dmFsdWUgJiYgIWdGb250RGF0YUNhY2hlLT5jb250YWlucygqcGxhdGZvcm1EYXRh
LT52YWx1ZSkpCisgICAgICAgICAgICAgICAga2V5c1RvUmVtb3ZlLmFwcGVuZChwbGF0Zm9ybURh
dGEtPmtleSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHNpemVfdCBrZXlzVG9SZW1v
dmVDb3VudCA9IGtleXNUb1JlbW92ZS5zaXplKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2VUcmVlTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2VUcmVlTm9kZS5jcHAKaW5kZXggODdlOTNmZDk4
ZmY4ZGVmMDk0ODE2YTUyNDM0ZTkwMDVlODk5OTU5ZC4uNjM1ZWM3YjIyOWFiNGNhOTkxOGI1NWZl
ZGQ3ZmE5ODdiNDE5MjY1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR2x5cGhQYWdlVHJlZU5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dseXBoUGFnZVRyZWVOb2RlLmNwcApAQCAtNzQsNyArNzQsNyBAQCBzaXplX3Qg
R2x5cGhQYWdlVHJlZU5vZGU6OnRyZWVHbHlwaFBhZ2VDb3VudCgpCiAgICAgaWYgKHJvb3RzKSB7
CiAgICAgICAgIEhhc2hNYXA8aW50LCBHbHlwaFBhZ2VUcmVlTm9kZSo+OjppdGVyYXRvciBlbmQg
PSByb290cy0+ZW5kKCk7CiAgICAgICAgIGZvciAoSGFzaE1hcDxpbnQsIEdseXBoUGFnZVRyZWVO
b2RlKj46Oml0ZXJhdG9yIGl0ID0gcm9vdHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAg
ICAgICAgICAgIGNvdW50ICs9IGl0LT5zZWNvbmQtPnBhZ2VDb3VudCgpOworICAgICAgICAgICAg
Y291bnQgKz0gaXQtPnZhbHVlLT5wYWdlQ291bnQoKTsKICAgICB9CiAgICAgCiAgICAgaWYgKHBh
Z2VaZXJvUm9vdCkKQEAgLTg4LDcgKzg4LDcgQEAgc2l6ZV90IEdseXBoUGFnZVRyZWVOb2RlOjpw
YWdlQ291bnQoKSBjb25zdAogICAgIHNpemVfdCBjb3VudCA9IG1fcGFnZSAmJiBtX3BhZ2UtPm93
bmVyKCkgPT0gdGhpcyA/IDEgOiAwOwogICAgIEhhc2hNYXA8Y29uc3QgRm9udERhdGEqLCBHbHlw
aFBhZ2VUcmVlTm9kZSo+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2NoaWxkcmVuLmVuZCgpOwog
ICAgIGZvciAoSGFzaE1hcDxjb25zdCBGb250RGF0YSosIEdseXBoUGFnZVRyZWVOb2RlKj46OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbV9jaGlsZHJlbi5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0g
ICAgICAgIGNvdW50ICs9IGl0LT5zZWNvbmQtPnBhZ2VDb3VudCgpOworICAgICAgICBjb3VudCAr
PSBpdC0+dmFsdWUtPnBhZ2VDb3VudCgpOwogCiAgICAgcmV0dXJuIGNvdW50OwogfQpAQCAtOTks
NyArOTksNyBAQCB2b2lkIEdseXBoUGFnZVRyZWVOb2RlOjpwcnVuZVRyZWVDdXN0b21Gb250RGF0
YShjb25zdCBGb250RGF0YSogZm9udERhdGEpCiAgICAgaWYgKHJvb3RzKSB7CiAgICAgICAgIEhh
c2hNYXA8aW50LCBHbHlwaFBhZ2VUcmVlTm9kZSo+OjppdGVyYXRvciBlbmQgPSByb290cy0+ZW5k
KCk7CiAgICAgICAgIGZvciAoSGFzaE1hcDxpbnQsIEdseXBoUGFnZVRyZWVOb2RlKj46Oml0ZXJh
dG9yIGl0ID0gcm9vdHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIGl0
LT5zZWNvbmQtPnBydW5lQ3VzdG9tRm9udERhdGEoZm9udERhdGEpOworICAgICAgICAgICAgaXQt
PnZhbHVlLT5wcnVuZUN1c3RvbUZvbnREYXRhKGZvbnREYXRhKTsKICAgICB9CiAgICAgCiAgICAg
aWYgKHBhZ2VaZXJvUm9vdCkKQEAgLTExMSw3ICsxMTEsNyBAQCB2b2lkIEdseXBoUGFnZVRyZWVO
b2RlOjpwcnVuZVRyZWVGb250RGF0YShjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEpCiAg
ICAgaWYgKHJvb3RzKSB7CiAgICAgICAgIEhhc2hNYXA8aW50LCBHbHlwaFBhZ2VUcmVlTm9kZSo+
OjppdGVyYXRvciBlbmQgPSByb290cy0+ZW5kKCk7CiAgICAgICAgIGZvciAoSGFzaE1hcDxpbnQs
IEdseXBoUGFnZVRyZWVOb2RlKj46Oml0ZXJhdG9yIGl0ID0gcm9vdHMtPmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPnBydW5lRm9udERhdGEoZm9udERh
dGEpOworICAgICAgICAgICAgaXQtPnZhbHVlLT5wcnVuZUZvbnREYXRhKGZvbnREYXRhKTsKICAg
ICB9CiAgICAgCiAgICAgaWYgKHBhZ2VaZXJvUm9vdCkKQEAgLTM2Miw3ICszNjIsNyBAQCB2b2lk
IEdseXBoUGFnZVRyZWVOb2RlOjpwcnVuZUN1c3RvbUZvbnREYXRhKGNvbnN0IEZvbnREYXRhKiBm
b250RGF0YSkKICAgICAgICAgcmV0dXJuOwogICAgIEhhc2hNYXA8Y29uc3QgRm9udERhdGEqLCBH
bHlwaFBhZ2VUcmVlTm9kZSo+OjppdGVyYXRvciBlbmQgPSBtX2NoaWxkcmVuLmVuZCgpOwogICAg
IGZvciAoSGFzaE1hcDxjb25zdCBGb250RGF0YSosIEdseXBoUGFnZVRyZWVOb2RlKj46Oml0ZXJh
dG9yIGl0ID0gbV9jaGlsZHJlbi5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0
LT5zZWNvbmQtPnBydW5lQ3VzdG9tRm9udERhdGEoZm9udERhdGEpOworICAgICAgICBpdC0+dmFs
dWUtPnBydW5lQ3VzdG9tRm9udERhdGEoZm9udERhdGEpOwogfQogCiB2b2lkIEdseXBoUGFnZVRy
ZWVOb2RlOjpwcnVuZUZvbnREYXRhKGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwgdW5z
aWduZWQgbGV2ZWwpCkBAIC0zNzgsNyArMzc4LDcgQEAgdm9pZCBHbHlwaFBhZ2VUcmVlTm9kZTo6
cHJ1bmVGb250RGF0YShjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEsIHVuc2lnbmVkIGwK
ICAgICAvLyBQcnVuZSBhbnkgYnJhbmNoIHRoYXQgY29udGFpbnMgdGhpcyBGb250RGF0YS4KICAg
ICBIYXNoTWFwPGNvbnN0IEZvbnREYXRhKiwgR2x5cGhQYWdlVHJlZU5vZGUqPjo6aXRlcmF0b3Ig
Y2hpbGQgPSBtX2NoaWxkcmVuLmZpbmQoZm9udERhdGEpOwogICAgIGlmIChjaGlsZCAhPSBtX2No
aWxkcmVuLmVuZCgpKSB7Ci0gICAgICAgIEdseXBoUGFnZVRyZWVOb2RlKiBub2RlID0gY2hpbGQt
PnNlY29uZDsKKyAgICAgICAgR2x5cGhQYWdlVHJlZU5vZGUqIG5vZGUgPSBjaGlsZC0+dmFsdWU7
CiAgICAgICAgIG1fY2hpbGRyZW4ucmVtb3ZlKGZvbnREYXRhKTsKICAgICAgICAgdW5zaWduZWQg
Y3VzdG9tRm9udENvdW50ID0gbm9kZS0+bV9jdXN0b21Gb250Q291bnQ7CiAgICAgICAgIGRlbGV0
ZSBub2RlOwpAQCAtMzk0LDcgKzM5NCw3IEBAIHZvaWQgR2x5cGhQYWdlVHJlZU5vZGU6OnBydW5l
Rm9udERhdGEoY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhLCB1bnNpZ25lZCBsCiAKICAg
ICBIYXNoTWFwPGNvbnN0IEZvbnREYXRhKiwgR2x5cGhQYWdlVHJlZU5vZGUqPjo6aXRlcmF0b3Ig
ZW5kID0gbV9jaGlsZHJlbi5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8Y29uc3QgRm9udERhdGEq
LCBHbHlwaFBhZ2VUcmVlTm9kZSo+OjppdGVyYXRvciBpdCA9IG1fY2hpbGRyZW4uYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5wcnVuZUZvbnREYXRhKGZvbnRE
YXRhLCBsZXZlbCk7CisgICAgICAgIGl0LT52YWx1ZS0+cHJ1bmVGb250RGF0YShmb250RGF0YSwg
bGV2ZWwpOwogfQogCiAjaWZuZGVmIE5ERUJVRwpAQCAtNDA2LDggKzQwNiw4IEBAIHZvaWQgR2x5
cGhQYWdlVHJlZU5vZGU6OnBydW5lRm9udERhdGEoY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnRE
YXRhLCB1bnNpZ25lZCBsCiAKICAgICAgICAgSGFzaE1hcDxjb25zdCBGb250RGF0YSosIEdseXBo
UGFnZVRyZWVOb2RlKj46Oml0ZXJhdG9yIGVuZCA9IG1fY2hpbGRyZW4uZW5kKCk7CiAgICAgICAg
IGZvciAoSGFzaE1hcDxjb25zdCBGb250RGF0YSosIEdseXBoUGFnZVRyZWVOb2RlKj46Oml0ZXJh
dG9yIGl0ID0gbV9jaGlsZHJlbi5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAg
ICAgIHByaW50ZigiJXNcdCVwICVzXG4iLCBpbmRlbnQuZGF0YSgpLCBpdC0+Zmlyc3QsIGl0LT5m
aXJzdC0+ZGVzY3JpcHRpb24oKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgIGl0LT5zZWNv
bmQtPnNob3dTdWJ0cmVlKCk7CisgICAgICAgICAgICBwcmludGYoIiVzXHQlcCAlc1xuIiwgaW5k
ZW50LmRhdGEoKSwgaXQtPmtleSwgaXQtPmtleS0+ZGVzY3JpcHRpb24oKS51dGY4KCkuZGF0YSgp
KTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+c2hvd1N1YnRyZWUoKTsKICAgICAgICAgfQogICAg
ICAgICBpZiAobV9zeXN0ZW1GYWxsYmFja0NoaWxkKSB7CiAgICAgICAgICAgICBwcmludGYoIiVz
XHQqIGZhbGxiYWNrXG4iLCBpbmRlbnQuZGF0YSgpKTsKQEAgLTQyNSw4ICs0MjUsOCBAQCB2b2lk
IHNob3dHbHlwaFBhZ2VUcmVlcygpCiAgICAgc2hvd0dseXBoUGFnZVRyZWUoMCk7CiAgICAgSGFz
aE1hcDxpbnQsIFdlYkNvcmU6OkdseXBoUGFnZVRyZWVOb2RlKj46Oml0ZXJhdG9yIGVuZCA9IFdl
YkNvcmU6OkdseXBoUGFnZVRyZWVOb2RlOjpyb290cy0+ZW5kKCk7CiAgICAgZm9yIChIYXNoTWFw
PGludCwgV2ViQ29yZTo6R2x5cGhQYWdlVHJlZU5vZGUqPjo6aXRlcmF0b3IgaXQgPSBXZWJDb3Jl
OjpHbHlwaFBhZ2VUcmVlTm9kZTo6cm9vdHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewot
ICAgICAgICBwcmludGYoIlxuUGFnZSAlZDpcbiIsIGl0LT5maXJzdCk7Ci0gICAgICAgIHNob3dH
bHlwaFBhZ2VUcmVlKGl0LT5maXJzdCk7CisgICAgICAgIHByaW50ZigiXG5QYWdlICVkOlxuIiwg
aXQtPmtleSk7CisgICAgICAgIHNob3dHbHlwaFBhZ2VUcmVlKGl0LT5rZXkpOwogICAgIH0KIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNr
aW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNr
aW5nU3RvcmUuY3BwCmluZGV4IDU4NDMyY2VhZTNkZmFjYzFkZWNmNjZmMzE1OTNlOTI2ODVmNmQz
NWYuLjQ0NTVkYTNiNDcxZDJlMWMyNDA4MTQ3YzY5NjEyMjgwYTMxYjBjYzQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZS5j
cHAKQEAgLTExMiw5ICsxMTIsOSBAQCB2b2lkIFRpbGVkQmFja2luZ1N0b3JlOjp1cGRhdGVUaWxl
QnVmZmVycygpCiAgICAgVmVjdG9yPFJlZlB0cjxUaWxlPiA+IGRpcnR5VGlsZXM7CiAgICAgVGls
ZU1hcDo6aXRlcmF0b3IgZW5kID0gbV90aWxlcy5lbmQoKTsKICAgICBmb3IgKFRpbGVNYXA6Oml0
ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAg
aWYgKCFpdC0+c2Vjb25kLT5pc0RpcnR5KCkpCisgICAgICAgIGlmICghaXQtPnZhbHVlLT5pc0Rp
cnR5KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgZGlydHlUaWxlcy5hcHBlbmQo
aXQtPnNlY29uZCk7CisgICAgICAgIGRpcnR5VGlsZXMuYXBwZW5kKGl0LT52YWx1ZSk7CiAgICAg
fQogCiAgICAgaWYgKGRpcnR5VGlsZXMuaXNFbXB0eSgpKSB7CkBAIC0zOTcsMTMgKzM5NywxMyBA
QCBib29sIFRpbGVkQmFja2luZ1N0b3JlOjpyZXNpemVFZGdlVGlsZXMoKQogICAgIFZlY3RvcjxU
aWxlOjpDb29yZGluYXRlPiB0aWxlc1RvUmVtb3ZlOwogICAgIFRpbGVNYXA6Oml0ZXJhdG9yIGVu
ZCA9IG1fdGlsZXMuZW5kKCk7CiAgICAgZm9yIChUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1fdGls
ZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFRpbGU6OkNvb3JkaW5hdGUg
dGlsZUNvb3JkaW5hdGUgPSBpdC0+c2Vjb25kLT5jb29yZGluYXRlKCk7Ci0gICAgICAgIEludFJl
Y3QgdGlsZVJlY3QgPSBpdC0+c2Vjb25kLT5yZWN0KCk7CisgICAgICAgIFRpbGU6OkNvb3JkaW5h
dGUgdGlsZUNvb3JkaW5hdGUgPSBpdC0+dmFsdWUtPmNvb3JkaW5hdGUoKTsKKyAgICAgICAgSW50
UmVjdCB0aWxlUmVjdCA9IGl0LT52YWx1ZS0+cmVjdCgpOwogICAgICAgICBJbnRSZWN0IGV4cGVj
dGVkVGlsZVJlY3QgPSB0aWxlUmVjdEZvckNvb3JkaW5hdGUodGlsZUNvb3JkaW5hdGUpOwogICAg
ICAgICBpZiAoZXhwZWN0ZWRUaWxlUmVjdC5pc0VtcHR5KCkpCiAgICAgICAgICAgICB0aWxlc1Rv
UmVtb3ZlLmFwcGVuZCh0aWxlQ29vcmRpbmF0ZSk7CiAgICAgICAgIGVsc2UgaWYgKGV4cGVjdGVk
VGlsZVJlY3QgIT0gdGlsZVJlY3QpIHsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPnJlc2l6ZShl
eHBlY3RlZFRpbGVSZWN0LnNpemUoKSk7CisgICAgICAgICAgICBpdC0+dmFsdWUtPnJlc2l6ZShl
eHBlY3RlZFRpbGVSZWN0LnNpemUoKSk7CiAgICAgICAgICAgICB3YXNSZXNpemVkID0gdHJ1ZTsK
ICAgICAgICAgfQogICAgIH0KQEAgLTQyMiw4ICs0MjIsOCBAQCB2b2lkIFRpbGVkQmFja2luZ1N0
b3JlOjpzZXRLZWVwUmVjdChjb25zdCBJbnRSZWN0JiBrZWVwUmVjdCkKICAgICBWZWN0b3I8VGls
ZTo6Q29vcmRpbmF0ZT4gdG9SZW1vdmU7CiAgICAgVGlsZU1hcDo6aXRlcmF0b3IgZW5kID0gbV90
aWxlcy5lbmQoKTsKICAgICBmb3IgKFRpbGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgVGlsZTo6Q29vcmRpbmF0ZSBjb29yZGlu
YXRlID0gaXQtPnNlY29uZC0+Y29vcmRpbmF0ZSgpOwotICAgICAgICBGbG9hdFJlY3QgdGlsZVJl
Y3QgPSBpdC0+c2Vjb25kLT5yZWN0KCk7CisgICAgICAgIFRpbGU6OkNvb3JkaW5hdGUgY29vcmRp
bmF0ZSA9IGl0LT52YWx1ZS0+Y29vcmRpbmF0ZSgpOworICAgICAgICBGbG9hdFJlY3QgdGlsZVJl
Y3QgPSBpdC0+dmFsdWUtPnJlY3QoKTsKICAgICAgICAgaWYgKCF0aWxlUmVjdC5pbnRlcnNlY3Rz
KGtlZXBSZWN0RikpCiAgICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQoY29vcmRpbmF0ZSk7CiAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3Vu
ZGF0aW9uL2NmL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9jZi9NZWRpYVBsYXllclByaXZh
dGVBVkZvdW5kYXRpb25DRi5jcHAKaW5kZXggODc1ZDEyZGZiZTdiYjQyMjFiZTc1NTI0ZjgxYWNk
MjA3Y2EzYTc4MC4uMDM2ZDhmMzI2YzBiZjVjMmM4NzVhNDRiYjE0MDgwYTg2NGJkZjQyNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL2Nm
L01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vY2YvTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uQ0YuY3BwCkBAIC05MTIsNyArOTEyLDcgQEAgQVZGV3JhcHBlciogQVZGV3JhcHBl
cjo6YXZmV3JhcHBlckZvckNhbGxiYWNrQ29udGV4dCh2b2lkKiBjb250ZXh0KQogICAgIGlmIChp
dCA9PSBtYXAoKS5lbmQoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4gaXQtPnNl
Y29uZDsKKyAgICByZXR1cm4gaXQtPnZhbHVlOwogfQogCiB2b2lkIEFWRldyYXBwZXI6OnNjaGVk
dWxlRGlzY29ubmVjdEFuZERlbGV0ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyVGlsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclRpbGVyLmNwcAppbmRleCBkNTE3YWFh
N2I0MDI0NDg5MzJkZDQyYmY5ZGFiNDBkMTAyYThkMmM0Li5mNGNiZjQ3NzhiODk3MDNmYmY2MDFl
NDBjZGViMjIxMDg2ODdhMjQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ibGFja2JlcnJ5L0xheWVyVGlsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJUaWxlci5jcHAKQEAgLTM4MCwxOSArMzgw
LDE5IEBAIHZvaWQgTGF5ZXJUaWxlcjo6dXBsb2FkVGV4dHVyZXNJZk5lZWRlZCgpCiAgICAgZm9y
IChUaWxlSm9ic01hcDo6Y29uc3RfaXRlcmF0b3IgdGlsZUpvYnNJdGVyID0gdGlsZUpvYnNNYXAu
YmVnaW4oKTsgdGlsZUpvYnNJdGVyICE9IHRpbGVKb2JzSXRlckVuZDsgKyt0aWxlSm9ic0l0ZXIp
IHsKICAgICAgICAgSW50UG9pbnQgb3JpZ2luID0gb3JpZ2luT2ZUaWxlKHRpbGVKb2JzSXRlci0+
Zmlyc3QpOwogCi0gICAgICAgIExheWVyVGlsZSogdGlsZSA9IG1fdGlsZXNDb21wb3NpdGluZ1Ro
cmVhZC5nZXQodGlsZUpvYnNJdGVyLT5maXJzdCk7CisgICAgICAgIExheWVyVGlsZSogdGlsZSA9
IG1fdGlsZXNDb21wb3NpdGluZ1RocmVhZC5nZXQodGlsZUpvYnNJdGVyLT5rZXkpOwogICAgICAg
ICBpZiAoIXRpbGUpIHsKICAgICAgICAgICAgIGlmIChvcmlnaW4ueCgpID49IG1fcmVxdWlyZWRU
ZXh0dXJlU2l6ZS53aWR0aCgpIHx8IG9yaWdpbi55KCkgPj0gbV9yZXF1aXJlZFRleHR1cmVTaXpl
LmhlaWdodCgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgdGlsZSA9
IG5ldyBMYXllclRpbGUoKTsKLSAgICAgICAgICAgIG1fdGlsZXNDb21wb3NpdGluZ1RocmVhZC5h
ZGQodGlsZUpvYnNJdGVyLT5maXJzdCwgdGlsZSk7CisgICAgICAgICAgICBtX3RpbGVzQ29tcG9z
aXRpbmdUaHJlYWQuYWRkKHRpbGVKb2JzSXRlci0+a2V5LCB0aWxlKTsKICAgICAgICAgfQogCiAg
ICAgICAgIEludFJlY3QgdGlsZVJlY3Qob3JpZ2luLCB0aWxlU2l6ZSgpKTsKICAgICAgICAgdGls
ZVJlY3Quc2V0V2lkdGgobWluKG1fcmVxdWlyZWRUZXh0dXJlU2l6ZS53aWR0aCgpIC0gdGlsZVJl
Y3QueCgpLCB0aWxlUmVjdC53aWR0aCgpKSk7CiAgICAgICAgIHRpbGVSZWN0LnNldEhlaWdodCht
aW4obV9yZXF1aXJlZFRleHR1cmVTaXplLmhlaWdodCgpIC0gdGlsZVJlY3QueSgpLCB0aWxlUmVj
dC5oZWlnaHQoKSkpOwogCi0gICAgICAgIHBlcmZvcm1UaWxlSm9iKHRpbGUsICp0aWxlSm9ic0l0
ZXItPnNlY29uZCwgdGlsZVJlY3QpOworICAgICAgICBwZXJmb3JtVGlsZUpvYih0aWxlLCAqdGls
ZUpvYnNJdGVyLT52YWx1ZSwgdGlsZVJlY3QpOwogICAgIH0KIAogICAgIG1fdGV4dHVyZUpvYnMu
Y2xlYXIoKTsKQEAgLTQzNSwxMSArNDM1LDExIEBAIHZvaWQgTGF5ZXJUaWxlcjo6YWRkVGlsZUpv
Yihjb25zdCBUaWxlSW5kZXgmIGluZGV4LCBjb25zdCBUZXh0dXJlSm9iJiBqb2IsIFRpbGVKCiAg
ICAgICAgIHJldHVybjsKIAogICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBsZWF2ZSB0aGUgcHJldmlv
dXMgam9iLgotICAgIGlmIChqb2IubV90eXBlID09IFRleHR1cmVKb2I6OkRpcnR5Q29udGVudHMg
JiYgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQtPm1fdHlwZSA9PSBUZXh0dXJlSm9iOjpEaXNjYXJk
Q29udGVudHMpCisgICAgaWYgKGpvYi5tX3R5cGUgPT0gVGV4dHVyZUpvYjo6RGlydHlDb250ZW50
cyAmJiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5tX3R5cGUgPT0gVGV4dHVyZUpvYjo6RGlzY2Fy
ZENvbnRlbnRzKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBPdmVycmlkZSB0aGUgcHJldmlv
dXMgam9iLgotICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gJmpvYjsKKyAgICByZXN1bHQu
aXRlcmF0b3ItPnZhbHVlID0gJmpvYjsKIH0KIAogdm9pZCBMYXllclRpbGVyOjpwZXJmb3JtVGls
ZUpvYihMYXllclRpbGUqIHRpbGUsIGNvbnN0IFRleHR1cmVKb2ImIGpvYiwgY29uc3QgSW50UmVj
dCYgdGlsZVJlY3QpCkBAIC03MzMsNyArNzMzLDcgQEAgdm9pZCBMYXllclRpbGVyOjpiaW5kQ29u
dGVudHNUZXh0dXJlKCkKICAgICBpZiAobV90aWxlc0NvbXBvc2l0aW5nVGhyZWFkLnNpemUoKSAh
PSAxKQogICAgICAgICByZXR1cm47CiAKLSAgICBjb25zdCBMYXllclRpbGUqIHRpbGUgPSBtX3Rp
bGVzQ29tcG9zaXRpbmdUaHJlYWQuYmVnaW4oKS0+c2Vjb25kOworICAgIGNvbnN0IExheWVyVGls
ZSogdGlsZSA9IG1fdGlsZXNDb21wb3NpdGluZ1RocmVhZC5iZWdpbigpLT52YWx1ZTsKIAogICAg
IEFTU0VSVCh0aWxlLT5oYXNUZXh0dXJlKCkpOwogICAgIGlmICghdGlsZS0+aGFzVGV4dHVyZSgp
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhp
Y3NMYXllckNBLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBo
aWNzTGF5ZXJDQS5jcHAKaW5kZXggY2Y0N2JhNTkwMTZlYzYwN2UwZmI1Y2IzZmExZjJhOThkNTJh
MDFmNC4uYTBlZDU3ZDc5NGZhMDMxYTY1YjBiZGJlMDNhOGM4ZWMzN2U3M2RmOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVy
Q0EuY3BwCkBAIC00NjcsNyArNDY3LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6Om1vdmVPckNv
cHlBbmltYXRpb25zKE1vdmVPckNvcHkgb3BlcmF0aW9uLCBQbGF0Zm9ybUNBTGF5ZXIKICAgICAv
LyBMb29rIGZvciBydW5uaW5nIGFuaW1hdGlvbnMgYWZmZWN0aW5nIHRoaXMgcHJvcGVydHkuCiAg
ICAgQW5pbWF0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9ydW5uaW5nQW5pbWF0aW9u
cy5lbmQoKTsKICAgICBmb3IgKEFuaW1hdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9y
dW5uaW5nQW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgY29u
c3QgVmVjdG9yPExheWVyUHJvcGVydHlBbmltYXRpb24+JiBwcm9wZXJ0eUFuaW1hdGlvbnMgPSBp
dC0+c2Vjb25kOworICAgICAgICBjb25zdCBWZWN0b3I8TGF5ZXJQcm9wZXJ0eUFuaW1hdGlvbj4m
IHByb3BlcnR5QW5pbWF0aW9ucyA9IGl0LT52YWx1ZTsKICAgICAgICAgc2l6ZV90IG51bUFuaW1h
dGlvbnMgPSBwcm9wZXJ0eUFuaW1hdGlvbnMuc2l6ZSgpOwogICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG51bUFuaW1hdGlvbnM7ICsraSkgewogICAgICAgICAgICAgY29uc3QgTGF5ZXJQ
cm9wZXJ0eUFuaW1hdGlvbiYgY3VyckFuaW1hdGlvbiA9IHByb3BlcnR5QW5pbWF0aW9uc1tpXTsK
QEAgLTY5NCw3ICs2OTQsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6cGF1c2VBbmltYXRpb24o
Y29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZU9mZgogCiAgICAgQW5pbWF0
aW9uc1RvUHJvY2Vzc01hcDo6aXRlcmF0b3IgaXQgPSBtX2FuaW1hdGlvbnNUb1Byb2Nlc3MuZmlu
ZChhbmltYXRpb25OYW1lKTsKICAgICBpZiAoaXQgIT0gbV9hbmltYXRpb25zVG9Qcm9jZXNzLmVu
ZCgpKSB7Ci0gICAgICAgIEFuaW1hdGlvblByb2Nlc3NpbmdBY3Rpb24mIHByb2Nlc3NpbmdJbmZv
ID0gaXQtPnNlY29uZDsKKyAgICAgICAgQW5pbWF0aW9uUHJvY2Vzc2luZ0FjdGlvbiYgcHJvY2Vz
c2luZ0luZm8gPSBpdC0+dmFsdWU7CiAgICAgICAgIC8vIElmIGFuIGFuaW1hdGlvbiBpcyBzY2hl
ZHVsZWQgdG8gYmUgcmVtb3ZlZCwgZG9uJ3QgY2hhbmdlIHRoZSByZW1vdmUgdG8gYSBwYXVzZS4K
ICAgICAgICAgaWYgKHByb2Nlc3NpbmdJbmZvLmFjdGlvbiAhPSBSZW1vdmUpCiAgICAgICAgICAg
ICBwcm9jZXNzaW5nSW5mby5hY3Rpb24gPSBQYXVzZTsKQEAgLTgyOSw3ICs4MjksNyBAQCB2b2lk
IEdyYXBoaWNzTGF5ZXJDQTo6bGF5ZXJEaWREaXNwbGF5KFBsYXRmb3JtTGF5ZXIqIGxheWVyKQog
ICAgIGlmIChsYXllckNsb25lTWFwKSB7CiAgICAgICAgIExheWVyTWFwOjpjb25zdF9pdGVyYXRv
ciBlbmQgPSBsYXllckNsb25lTWFwLT5lbmQoKTsKICAgICAgICAgZm9yIChMYXllck1hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBsYXllckNsb25lTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKLSAgICAgICAgICAgIFBsYXRmb3JtQ0FMYXllciogY3VyckNsb25lID0gaXQtPnNlY29uZC5n
ZXQoKTsKKyAgICAgICAgICAgIFBsYXRmb3JtQ0FMYXllciogY3VyckNsb25lID0gaXQtPnZhbHVl
LmdldCgpOwogICAgICAgICAgICAgaWYgKCFjdXJyQ2xvbmUpCiAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAKQEAgLTExNzEsMTAgKzExNzEsMTAgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnVw
ZGF0ZUdlb21ldHJ5KGZsb2F0IHBhZ2VTY2FsZUZhY3RvciwgY29uc3QgRmxvYXRQb2ludCYgcG8K
ICAgICAgICAgaWYgKExheWVyTWFwKiBsYXllckNsb25lTWFwID0gbV9zdHJ1Y3R1cmFsTGF5ZXJD
bG9uZXMuZ2V0KCkpIHsKICAgICAgICAgICAgIExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQg
PSBsYXllckNsb25lTWFwLT5lbmQoKTsKICAgICAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7
Ci0gICAgICAgICAgICAgICAgUGxhdGZvcm1DQUxheWVyKiBjbG9uZSA9IGl0LT5zZWNvbmQuZ2V0
KCk7CisgICAgICAgICAgICAgICAgUGxhdGZvcm1DQUxheWVyKiBjbG9uZSA9IGl0LT52YWx1ZS5n
ZXQoKTsKICAgICAgICAgICAgICAgICBGbG9hdFBvaW50IGNsb25lUG9zaXRpb24gPSBsYXllclBv
c2l0aW9uOwogCi0gICAgICAgICAgICAgICAgaWYgKG1fcmVwbGljYUxheWVyICYmIGlzUmVwbGlj
YXRlZFJvb3RDbG9uZShpdC0+Zmlyc3QpKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fcmVwbGlj
YUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9uZShpdC0+a2V5KSkgewogICAgICAgICAgICAg
ICAgICAgICAvLyBNYWludGFpbiB0aGUgc3BlY2lhbC1jYXNlIHBvc2l0aW9uIGZvciB0aGUgcm9v
dCBvZiBhIGNsb25lIHN1YnRyZWUsCiAgICAgICAgICAgICAgICAgICAgIC8vIHdoaWNoIHdlIHNl
dCB1cCBpbiByZXBsaWNhdGVkTGF5ZXJSb290KCkuCiAgICAgICAgICAgICAgICAgICAgIGNsb25l
UG9zaXRpb24gPSBwb3NpdGlvbkZvckNsb25lUm9vdExheWVyKCk7CkBAIC0xMTk4LDEwICsxMTk4
LDEwIEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVHZW9tZXRyeShmbG9hdCBwYWdlU2Nh
bGVGYWN0b3IsIGNvbnN0IEZsb2F0UG9pbnQmIHBvCiAgICAgaWYgKExheWVyTWFwKiBsYXllckNs
b25lTWFwID0gbV9sYXllckNsb25lcy5nZXQoKSkgewogICAgICAgICBMYXllck1hcDo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAoTGF5ZXJN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7Ci0gICAgICAgICAgICBQbGF0Zm9ybUNBTGF5ZXIqIGNsb25lID0gaXQtPnNlY29u
ZC5nZXQoKTsKKyAgICAgICAgICAgIFBsYXRmb3JtQ0FMYXllciogY2xvbmUgPSBpdC0+dmFsdWUu
Z2V0KCk7CiAgICAgICAgICAgICBGbG9hdFBvaW50IGNsb25lUG9zaXRpb24gPSBhZGp1c3RlZFBv
c2l0aW9uOwogCi0gICAgICAgICAgICBpZiAoIW1fc3RydWN0dXJhbExheWVyICYmIG1fcmVwbGlj
YUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9uZShpdC0+Zmlyc3QpKSB7CisgICAgICAgICAg
ICBpZiAoIW1fc3RydWN0dXJhbExheWVyICYmIG1fcmVwbGljYUxheWVyICYmIGlzUmVwbGljYXRl
ZFJvb3RDbG9uZShpdC0+a2V5KSkgewogICAgICAgICAgICAgICAgIC8vIE1haW50YWluIHRoZSBz
cGVjaWFsLWNhc2UgcG9zaXRpb24gZm9yIHRoZSByb290IG9mIGEgY2xvbmUgc3VidHJlZSwKICAg
ICAgICAgICAgICAgICAvLyB3aGljaCB3ZSBzZXQgdXAgaW4gcmVwbGljYXRlZExheWVyUm9vdCgp
LgogICAgICAgICAgICAgICAgIGNsb25lUG9zaXRpb24gPSBwb3NpdGlvbkZvckNsb25lUm9vdExh
eWVyKCk7CkBAIC0xMjIxLDggKzEyMjEsOCBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRl
VHJhbnNmb3JtKCkKICAgICBpZiAoTGF5ZXJNYXAqIGxheWVyQ2xvbmVNYXAgPSBwcmltYXJ5TGF5
ZXJDbG9uZXMoKSkgewogICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5
ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAg
ICAgICBQbGF0Zm9ybUNBTGF5ZXIqIGN1cnJMYXllciA9IGl0LT5zZWNvbmQuZ2V0KCk7Ci0gICAg
ICAgICAgICBpZiAobV9yZXBsaWNhTGF5ZXIgJiYgaXNSZXBsaWNhdGVkUm9vdENsb25lKGl0LT5m
aXJzdCkpIHsKKyAgICAgICAgICAgIFBsYXRmb3JtQ0FMYXllciogY3VyckxheWVyID0gaXQtPnZh
bHVlLmdldCgpOworICAgICAgICAgICAgaWYgKG1fcmVwbGljYUxheWVyICYmIGlzUmVwbGljYXRl
ZFJvb3RDbG9uZShpdC0+a2V5KSkgewogICAgICAgICAgICAgICAgIC8vIE1haW50YWluIHRoZSBz
cGVjaWFsLWNhc2UgdHJhbnNmb3JtIGZvciB0aGUgcm9vdCBvZiBhIGNsb25lIHN1YnRyZWUsCiAg
ICAgICAgICAgICAgICAgLy8gd2hpY2ggd2Ugc2V0IHVwIGluIHJlcGxpY2F0ZWRMYXllclJvb3Qo
KS4KICAgICAgICAgICAgICAgICBjdXJyTGF5ZXItPnNldFRyYW5zZm9ybShUcmFuc2Zvcm1hdGlv
bk1hdHJpeCgpKTsKQEAgLTEyMzksNyArMTIzOSw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1
cGRhdGVDaGlsZHJlblRyYW5zZm9ybSgpCiAgICAgaWYgKExheWVyTWFwKiBsYXllckNsb25lTWFw
ID0gcHJpbWFyeUxheWVyQ2xvbmVzKCkpIHsKICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IGxheWVyQ2xvbmVNYXAtPmVuZCgpOwogICAgICAgICBmb3IgKExheWVyTWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IGxheWVyQ2xvbmVNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNldFN1YmxheWVyVHJhbnNmb3JtKG1fY2hpbGRy
ZW5UcmFuc2Zvcm0pOworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRTdWJsYXllclRyYW5zZm9y
bShtX2NoaWxkcmVuVHJhbnNmb3JtKTsKICAgICB9CiB9CiAKQEAgLTEyNTAsNyArMTI1MCw3IEBA
IHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVNYXNrc1RvQm91bmRzKCkKICAgICBpZiAoTGF5
ZXJNYXAqIGxheWVyQ2xvbmVNYXAgPSBtX2xheWVyQ2xvbmVzLmdldCgpKSB7CiAgICAgICAgIExh
eWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBsYXllckNsb25lTWFwLT5lbmQoKTsKICAgICAg
ICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXllckNsb25lTWFwLT5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRNYXNrc1Rv
Qm91bmRzKG1fbWFza3NUb0JvdW5kcyk7CisgICAgICAgICAgICBpdC0+dmFsdWUtPnNldE1hc2tz
VG9Cb3VuZHMobV9tYXNrc1RvQm91bmRzKTsKICAgICB9CiAKICAgICB1cGRhdGVEZWJ1Z0luZGlj
YXRvcnMoKTsKQEAgLTEyNjgsNyArMTI2OCw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRh
dGVDb250ZW50c1Zpc2liaWxpdHkoKQogICAgICAgICBpZiAoTGF5ZXJNYXAqIGxheWVyQ2xvbmVN
YXAgPSBtX2xheWVyQ2xvbmVzLmdldCgpKSB7CiAgICAgICAgICAgICBMYXllck1hcDo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAgICAgICAgICBmb3IgKExh
eWVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGxheWVyQ2xvbmVNYXAtPmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkKLSAgICAgICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRDb250ZW50cygwKTsK
KyAgICAgICAgICAgICAgICBpdC0+dmFsdWUtPnNldENvbnRlbnRzKDApOwogICAgICAgICB9CiAg
ICAgfQogfQpAQCAtMTI4MCw3ICsxMjgwLDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0
ZUNvbnRlbnRzT3BhcXVlKCkKICAgICBpZiAoTGF5ZXJNYXAqIGxheWVyQ2xvbmVNYXAgPSBtX2xh
eWVyQ2xvbmVzLmdldCgpKSB7CiAgICAgICAgIExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQg
PSBsYXllckNsb25lTWFwLT5lbmQoKTsKICAgICAgICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBsYXllckNsb25lTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAg
ICAgICAgICBpdC0+c2Vjb25kLT5zZXRPcGFxdWUobV9jb250ZW50c09wYXF1ZSk7CisgICAgICAg
ICAgICBpdC0+dmFsdWUtPnNldE9wYXF1ZShtX2NvbnRlbnRzT3BhcXVlKTsKICAgICB9CiB9CiAK
QEAgLTEyOTIsNyArMTI5Miw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVCYWNrZmFj
ZVZpc2liaWxpdHkoKQogICAgICAgICBpZiAoTGF5ZXJNYXAqIGxheWVyQ2xvbmVNYXAgPSBtX3N0
cnVjdHVyYWxMYXllckNsb25lcy5nZXQoKSkgewogICAgICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IGxheWVyQ2xvbmVNYXAtPmVuZCgpOwogICAgICAgICAgICAgZm9yIChM
YXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXllckNsb25lTWFwLT5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCi0gICAgICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0RG91YmxlU2lkZWQo
bV9iYWNrZmFjZVZpc2liaWxpdHkpOworICAgICAgICAgICAgICAgIGl0LT52YWx1ZS0+c2V0RG91
YmxlU2lkZWQobV9iYWNrZmFjZVZpc2liaWxpdHkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0x
MzAxLDcgKzEzMDEsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlQmFja2ZhY2VWaXNp
YmlsaXR5KCkKICAgICBpZiAoTGF5ZXJNYXAqIGxheWVyQ2xvbmVNYXAgPSBtX2xheWVyQ2xvbmVz
LmdldCgpKSB7CiAgICAgICAgIExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBsYXllckNs
b25lTWFwLT5lbmQoKTsKICAgICAgICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBsYXllckNsb25lTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBp
dC0+c2Vjb25kLT5zZXREb3VibGVTaWRlZChtX2JhY2tmYWNlVmlzaWJpbGl0eSk7CisgICAgICAg
ICAgICBpdC0+dmFsdWUtPnNldERvdWJsZVNpZGVkKG1fYmFja2ZhY2VWaXNpYmlsaXR5KTsKICAg
ICB9CiB9CiAKQEAgLTEzMTMsMTAgKzEzMTMsMTAgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnVw
ZGF0ZUZpbHRlcnMoKQogICAgIGlmIChMYXllck1hcCogbGF5ZXJDbG9uZU1hcCA9IHByaW1hcnlM
YXllckNsb25lcygpKSB7CiAgICAgICAgIExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBs
YXllckNsb25lTWFwLT5lbmQoKTsKICAgICAgICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBsYXllckNsb25lTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgICAgIGlmIChtX3JlcGxpY2FMYXllciAmJiBpc1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQtPmZp
cnN0KSkKKyAgICAgICAgICAgIGlmIChtX3JlcGxpY2FMYXllciAmJiBpc1JlcGxpY2F0ZWRSb290
Q2xvbmUoaXQtPmtleSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAg
IGl0LT5zZWNvbmQtPnNldEZpbHRlcnMobV9maWx0ZXJzKTsKKyAgICAgICAgICAgIGl0LT52YWx1
ZS0+c2V0RmlsdGVycyhtX2ZpbHRlcnMpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMTQwNCw3
ICsxNDA0LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OmVuc3VyZVN0cnVjdHVyYWxMYXllcihT
dHJ1Y3R1cmFsTGF5ZXJQdXJwb3NlIHB1cnBvc2UsIGZsb2EKICAgICBpZiAobV9sYXllckNsb25l
cykgewogICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9sYXllckNsb25l
cy0+ZW5kKCk7CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9s
YXllckNsb25lcy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBQbGF0
Zm9ybUNBTGF5ZXIqIGN1cnJMYXllciA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBQ
bGF0Zm9ybUNBTGF5ZXIqIGN1cnJMYXllciA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAg
IGN1cnJMYXllci0+c2V0UG9zaXRpb24ocG9pbnQpOwogICAgICAgICAgICAgY3VyckxheWVyLT5z
ZXRBbmNob3JQb2ludChhbmNob3JQb2ludCk7CiAgICAgICAgICAgICBjdXJyTGF5ZXItPnNldFRy
YW5zZm9ybShUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpKTsKQEAgLTE0NDksNyArMTQ0OSw3IEBAIHZv
aWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVMYXllckRyYXdzQ29udGVudChmbG9hdCBwYWdlU2Nh
bGVGYWN0b3IsIGNvbnN0IEZsb2F0CiAgICAgICAgIGlmIChtX2xheWVyQ2xvbmVzKSB7CiAgICAg
ICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9sYXllckNsb25lcy0+ZW5k
KCk7CiAgICAgICAgICAgICBmb3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fbGF5
ZXJDbG9uZXMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgICAgICBpdC0+
c2Vjb25kLT5zZXRDb250ZW50cygwKTsKKyAgICAgICAgICAgICAgICBpdC0+dmFsdWUtPnNldENv
bnRlbnRzKDApOwogICAgICAgICB9CiAgICAgfQogICAgIHVwZGF0ZURlYnVnSW5kaWNhdG9ycygp
OwpAQCAtMTUwMiw3ICsxNTAyLDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUNvbnRl
bnRzSW1hZ2UoKQogICAgICAgICBpZiAobV9jb250ZW50c0xheWVyQ2xvbmVzKSB7CiAgICAgICAg
ICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9jb250ZW50c0xheWVyQ2xvbmVz
LT5lbmQoKTsKICAgICAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bV9jb250ZW50c0xheWVyQ2xvbmVzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAg
ICAgICAgICAgaXQtPnNlY29uZC0+c2V0Q29udGVudHMobV9jb250ZW50c0xheWVyLT5jb250ZW50
cygpKTsKKyAgICAgICAgICAgICAgICBpdC0+dmFsdWUtPnNldENvbnRlbnRzKG1fY29udGVudHNM
YXllci0+Y29udGVudHMoKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHVwZGF0ZUNv
bnRlbnRzUmVjdCgpOwpAQCAtMTU0Niw4ICsxNTQ2LDggQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6
OnVwZGF0ZUNvbnRlbnRzUmVjdCgpCiAgICAgaWYgKG1fY29udGVudHNMYXllckNsb25lcykgewog
ICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9jb250ZW50c0xheWVyQ2xv
bmVzLT5lbmQoKTsKICAgICAgICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
X2NvbnRlbnRzTGF5ZXJDbG9uZXMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAg
ICAgICAgaXQtPnNlY29uZC0+c2V0UG9zaXRpb24ocG9pbnQpOwotICAgICAgICAgICAgaXQtPnNl
Y29uZC0+c2V0Qm91bmRzKHJlY3QpOworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRQb3NpdGlv
bihwb2ludCk7CisgICAgICAgICAgICBpdC0+dmFsdWUtPnNldEJvdW5kcyhyZWN0KTsKICAgICAg
ICAgfQogICAgIH0KIH0KQEAgLTE1NjIsOCArMTU2Miw4IEBAIHZvaWQgR3JhcGhpY3NMYXllckNB
Ojp1cGRhdGVNYXNrTGF5ZXIoKQogICAgIGlmIChMYXllck1hcCogbGF5ZXJDbG9uZU1hcCA9IG1f
bGF5ZXJDbG9uZXMuZ2V0KCkpIHsKICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IGxheWVyQ2xvbmVNYXAtPmVuZCgpOwogICAgICAgICBmb3IgKExheWVyTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IGxheWVyQ2xvbmVNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeyAg
ICAgICAgICAgIAotICAgICAgICAgICAgUGxhdGZvcm1DQUxheWVyKiBtYXNrQ2xvbmUgPSBtYXNr
TGF5ZXJDbG9uZU1hcCA/IG1hc2tMYXllckNsb25lTWFwLT5nZXQoaXQtPmZpcnN0KS5nZXQoKSA6
IDA7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRNYXNrKG1hc2tDbG9uZSk7CisgICAgICAg
ICAgICBQbGF0Zm9ybUNBTGF5ZXIqIG1hc2tDbG9uZSA9IG1hc2tMYXllckNsb25lTWFwID8gbWFz
a0xheWVyQ2xvbmVNYXAtPmdldChpdC0+a2V5KS5nZXQoKSA6IDA7CisgICAgICAgICAgICBpdC0+
dmFsdWUtPnNldE1hc2sobWFza0Nsb25lKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTE2Mjcs
MTMgKzE2MjcsMTMgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUxheWVyQW5pbWF0aW9u
cygpCiAgICAgaWYgKG1fYW5pbWF0aW9uc1RvUHJvY2Vzcy5zaXplKCkpIHsKICAgICAgICAgQW5p
bWF0aW9uc1RvUHJvY2Vzc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9hbmltYXRpb25zVG9Q
cm9jZXNzLmVuZCgpOwogICAgICAgICBmb3IgKEFuaW1hdGlvbnNUb1Byb2Nlc3NNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbV9hbmltYXRpb25zVG9Qcm9jZXNzLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgewotICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBjdXJyQW5pbWF0aW9uTmFtZSA9IGl0
LT5maXJzdDsKKyAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgY3VyckFuaW1hdGlvbk5hbWUgPSBp
dC0+a2V5OwogICAgICAgICAgICAgQW5pbWF0aW9uc01hcDo6aXRlcmF0b3IgYW5pbWF0aW9uSXQg
PSBtX3J1bm5pbmdBbmltYXRpb25zLmZpbmQoY3VyckFuaW1hdGlvbk5hbWUpOwogICAgICAgICAg
ICAgaWYgKGFuaW1hdGlvbkl0ID09IG1fcnVubmluZ0FuaW1hdGlvbnMuZW5kKCkpCiAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIGNvbnN0IEFuaW1hdGlvblByb2Nlc3Np
bmdBY3Rpb24mIHByb2Nlc3NpbmdJbmZvID0gaXQtPnNlY29uZDsKLSAgICAgICAgICAgIGNvbnN0
IFZlY3RvcjxMYXllclByb3BlcnR5QW5pbWF0aW9uPiYgYW5pbWF0aW9ucyA9IGFuaW1hdGlvbkl0
LT5zZWNvbmQ7CisgICAgICAgICAgICBjb25zdCBBbmltYXRpb25Qcm9jZXNzaW5nQWN0aW9uJiBw
cm9jZXNzaW5nSW5mbyA9IGl0LT52YWx1ZTsKKyAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxMYXll
clByb3BlcnR5QW5pbWF0aW9uPiYgYW5pbWF0aW9ucyA9IGFuaW1hdGlvbkl0LT52YWx1ZTsKICAg
ICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYW5pbWF0aW9ucy5zaXplKCk7ICsraSkg
ewogICAgICAgICAgICAgICAgIGNvbnN0IExheWVyUHJvcGVydHlBbmltYXRpb24mIGN1cnJBbmlt
YXRpb24gPSBhbmltYXRpb25zW2ldOwogICAgICAgICAgICAgICAgIHN3aXRjaCAocHJvY2Vzc2lu
Z0luZm8uYWN0aW9uKSB7CkBAIC0xNjY1LDcgKzE2NjUsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJD
QTo6dXBkYXRlTGF5ZXJBbmltYXRpb25zKCkKICAgICAgICAgICAgICAgICBhbmltYXRpb25zLmFw
cGVuZChwZW5kaW5nQW5pbWF0aW9uKTsKICAgICAgICAgICAgICAgICBtX3J1bm5pbmdBbmltYXRp
b25zLmFkZChwZW5kaW5nQW5pbWF0aW9uLm1fbmFtZSwgYW5pbWF0aW9ucyk7CiAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFZlY3RvcjxMYXllclByb3BlcnR5QW5pbWF0aW9u
PiYgYW5pbWF0aW9ucyA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICAgICAgVmVjdG9yPExheWVy
UHJvcGVydHlBbmltYXRpb24+JiBhbmltYXRpb25zID0gaXQtPnZhbHVlOwogICAgICAgICAgICAg
ICAgIGFuaW1hdGlvbnMuYXBwZW5kKHBlbmRpbmdBbmltYXRpb24pOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CkBAIC0xNjkwLDExICsxNjkwLDExIEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpz
ZXRBbmltYXRpb25PbkxheWVyKFBsYXRmb3JtQ0FBbmltYXRpb24qIGNhQW5pbSwgQW5pbWF0ZWRQ
CiAgICAgICAgIExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBsYXllckNsb25lTWFwLT5l
bmQoKTsKICAgICAgICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXllckNs
b25lTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIC8vIFNraXAg
aW1tZWRpYXRlIHJlcGxpY2FzLCBzaW5jZSB0aGV5IG1vdmUgd2l0aCB0aGUgb3JpZ2luYWwuCi0g
ICAgICAgICAgICBpZiAobV9yZXBsaWNhTGF5ZXIgJiYgaXNSZXBsaWNhdGVkUm9vdENsb25lKGl0
LT5maXJzdCkpCisgICAgICAgICAgICBpZiAobV9yZXBsaWNhTGF5ZXIgJiYgaXNSZXBsaWNhdGVk
Um9vdENsb25lKGl0LT5rZXkpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAg
ICAgICBpdC0+c2Vjb25kLT5yZW1vdmVBbmltYXRpb25Gb3JLZXkoYW5pbWF0aW9uSUQpOwotICAg
ICAgICAgICAgaXQtPnNlY29uZC0+YWRkQW5pbWF0aW9uRm9yS2V5KGFuaW1hdGlvbklELCBjYUFu
aW0pOworICAgICAgICAgICAgaXQtPnZhbHVlLT5yZW1vdmVBbmltYXRpb25Gb3JLZXkoYW5pbWF0
aW9uSUQpOworICAgICAgICAgICAgaXQtPnZhbHVlLT5hZGRBbmltYXRpb25Gb3JLZXkoYW5pbWF0
aW9uSUQsIGNhQW5pbSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0xNzI5LDEwICsxNzI5LDEw
IEBAIGJvb2wgR3JhcGhpY3NMYXllckNBOjpyZW1vdmVDQUFuaW1hdGlvbkZyb21MYXllcihBbmlt
YXRlZFByb3BlcnR5SUQgcHJvcGVydHksIGNvCiAgICAgICAgIExheWVyTWFwOjpjb25zdF9pdGVy
YXRvciBlbmQgPSBsYXllckNsb25lTWFwLT5lbmQoKTsKICAgICAgICAgZm9yIChMYXllck1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXllckNsb25lTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKICAgICAgICAgICAgIC8vIFNraXAgaW1tZWRpYXRlIHJlcGxpY2FzLCBzaW5jZSB0aGV5
IG1vdmUgd2l0aCB0aGUgb3JpZ2luYWwuCi0gICAgICAgICAgICBpZiAobV9yZXBsaWNhTGF5ZXIg
JiYgaXNSZXBsaWNhdGVkUm9vdENsb25lKGl0LT5maXJzdCkpCisgICAgICAgICAgICBpZiAobV9y
ZXBsaWNhTGF5ZXIgJiYgaXNSZXBsaWNhdGVkUm9vdENsb25lKGl0LT5rZXkpKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBpdC0+c2Vjb25kIC0+cmVtb3ZlQW5pbWF0
aW9uRm9yS2V5KGFuaW1hdGlvbklEKTsKKyAgICAgICAgICAgIGl0LT52YWx1ZSAtPnJlbW92ZUFu
aW1hdGlvbkZvcktleShhbmltYXRpb25JRCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJu
IHRydWU7CkBAIC0xNzYxLDkgKzE3NjEsOSBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6cGF1c2VD
QUFuaW1hdGlvbk9uTGF5ZXIoQW5pbWF0ZWRQcm9wZXJ0eUlEIHByb3BlcnR5LCBjb25zdAogICAg
ICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7
CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1h
cC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICAvLyBTa2lwIGltbWVk
aWF0ZSByZXBsaWNhcywgc2luY2UgdGhleSBtb3ZlIHdpdGggdGhlIG9yaWdpbmFsLgotICAgICAg
ICAgICAgaWYgKG1fcmVwbGljYUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9uZShpdC0+Zmly
c3QpKQorICAgICAgICAgICAgaWYgKG1fcmVwbGljYUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RD
bG9uZShpdC0+a2V5KSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGl0
LT5zZWNvbmQtPmFkZEFuaW1hdGlvbkZvcktleShhbmltYXRpb25JRCwgbmV3QW5pbS5nZXQoKSk7
CisgICAgICAgICAgICBpdC0+dmFsdWUtPmFkZEFuaW1hdGlvbkZvcktleShhbmltYXRpb25JRCwg
bmV3QW5pbS5nZXQoKSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0yMjY3LDggKzIyNjcsOCBA
QCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c3VzcGVuZEFuaW1hdGlvbnMoZG91YmxlIHRpbWUpCiAg
ICAgaWYgKExheWVyTWFwKiBsYXllckNsb25lTWFwID0gcHJpbWFyeUxheWVyQ2xvbmVzKCkpIHsK
ICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxheWVyQ2xvbmVNYXAtPmVu
ZCgpOwogICAgICAgICBmb3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGxheWVyQ2xv
bmVNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgaXQtPnNlY29u
ZC0+c2V0U3BlZWQoMCk7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRUaW1lT2Zmc2V0KHQp
OworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRTcGVlZCgwKTsKKyAgICAgICAgICAgIGl0LT52
YWx1ZS0+c2V0VGltZU9mZnNldCh0KTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTIyODIsOCAr
MjI4Miw4IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpyZXN1bWVBbmltYXRpb25zKCkKICAgICBp
ZiAoTGF5ZXJNYXAqIGxheWVyQ2xvbmVNYXAgPSBwcmltYXJ5TGF5ZXJDbG9uZXMoKSkgewogICAg
ICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7
CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1h
cC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLT5z
ZXRTcGVlZCgxKTsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNldFRpbWVPZmZzZXQoMCk7Cisg
ICAgICAgICAgICBpdC0+dmFsdWUtPnNldFNwZWVkKDEpOworICAgICAgICAgICAgaXQtPnZhbHVl
LT5zZXRUaW1lT2Zmc2V0KDApOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMjQ5MywxMyArMjQ5
MywxMyBAQCBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gR3JhcGhpY3NMYXllckNBOjpmaW5k
T3JNYWtlQ2xvbmUoQ2xvbmVJRCBjbG9uZUlELCBQbAogICAgIExheWVyTWFwOjpBZGRSZXN1bHQg
YWRkUmVzdWx0ID0gY2xvbmVzLT5hZGQoY2xvbmVJRCwgZHVtbXkpOwogICAgIGlmICghYWRkUmVz
dWx0LmlzTmV3RW50cnkpIHsKICAgICAgICAgLy8gVmFsdWUgd2FzIG5vdCBhZGRlZCwgc28gaXQg
ZXhpc3RzIGFscmVhZHkuCi0gICAgICAgIHJlc3VsdExheWVyID0gYWRkUmVzdWx0Lml0ZXJhdG9y
LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIHJlc3VsdExheWVyID0gYWRkUmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZS5nZXQoKTsKICAgICB9IGVsc2UgewogICAgICAgICByZXN1bHRMYXllciA9IGNsb25l
TGF5ZXIoc291cmNlTGF5ZXIsIGNsb25lTGV2ZWwpOwogI2lmbmRlZiBOREVCVUcKICAgICAgICAg
cmVzdWx0TGF5ZXItPnNldE5hbWUoU3RyaW5nOjpmb3JtYXQoIkNsb25lICVkIG9mIGxheWVyICVw
IiwgY2xvbmVJRFswVV0sIHNvdXJjZUxheWVyLT5wbGF0Zm9ybUxheWVyKCkpKTsKICNlbmRpZgot
ICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IHJlc3VsdExheWVyOworICAgICAg
ICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gcmVzdWx0TGF5ZXI7CiAgICAgfQogCiAgICAg
cmV0dXJuIHJlc3VsdExheWVyOwpAQCAtMjY5MSw5ICsyNjkxLDkgQEAgdm9pZCBHcmFwaGljc0xh
eWVyQ0E6OnNldE9wYWNpdHlJbnRlcm5hbChmbG9hdCBhY2N1bXVsYXRlZE9wYWNpdHkpCiAgICAg
aWYgKGxheWVyQ2xvbmVNYXApIHsKICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IGxheWVyQ2xvbmVNYXAtPmVuZCgpOwogICAgICAgICBmb3IgKExheWVyTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IGxheWVyQ2xvbmVNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewot
ICAgICAgICAgICAgaWYgKG1fcmVwbGljYUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9uZShp
dC0+Zmlyc3QpKQorICAgICAgICAgICAgaWYgKG1fcmVwbGljYUxheWVyICYmIGlzUmVwbGljYXRl
ZFJvb3RDbG9uZShpdC0+a2V5KSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgIGl0LT5zZWNvbmQtPnNldE9wYWNpdHkobV9vcGFjaXR5KTsKKyAgICAgICAgICAgIGl0LT52
YWx1ZS0+c2V0T3BhY2l0eShtX29wYWNpdHkpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMjcw
NSwxMCArMjcwNSwxMCBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlT3BhY2l0eU9uTGF5
ZXIoKQogICAgIGlmIChMYXllck1hcCogbGF5ZXJDbG9uZU1hcCA9IHByaW1hcnlMYXllckNsb25l
cygpKSB7CiAgICAgICAgIExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBsYXllckNsb25l
TWFwLT5lbmQoKTsKICAgICAgICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBs
YXllckNsb25lTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGlm
IChtX3JlcGxpY2FMYXllciAmJiBpc1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQtPmZpcnN0KSkKKyAg
ICAgICAgICAgIGlmIChtX3JlcGxpY2FMYXllciAmJiBpc1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQt
PmtleSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIGl0LT5zZWNv
bmQtPnNldE9wYWNpdHkobV9vcGFjaXR5KTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+c2V0T3Bh
Y2l0eShtX29wYWNpdHkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9UaWxlQ2FjaGUubW0gYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvVGlsZUNhY2hlLm1tCmluZGV4
IDA5N2RmYmZjNmMwNWI1N2ZiZTRiZDI3NTk1ZTg1YmMwNTBjOWE3YWYuLmJhMTMzNzBlOWIzNGZm
ODYyNDM0OGZlMmI1YjEyODgyYTdjNmZmMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL21hYy9UaWxlQ2FjaGUubW0KKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1RpbGVDYWNoZS5tbQpAQCAtMTkxLDcgKzE5MSw3IEBA
IHZvaWQgVGlsZUNhY2hlOjpzZXRTY2FsZShDR0Zsb2F0IHNjYWxlKQogICAgIHJldmFsaWRhdGVU
aWxlcygpOwogCiAgICAgZm9yIChUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGlsZXMu
YmVnaW4oKSwgZW5kID0gbV90aWxlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAg
IFtpdC0+c2Vjb25kLmdldCgpIHNldENvbnRlbnRzU2NhbGU6ZGV2aWNlU2NhbGVGYWN0b3JdOwor
ICAgICAgICBbaXQtPnZhbHVlLmdldCgpIHNldENvbnRlbnRzU2NhbGU6ZGV2aWNlU2NhbGVGYWN0
b3JdOwogCiAgICAgICAgIEludFJlY3QgdGlsZVJlY3QgPSByZWN0Rm9yVGlsZUluZGV4KGl0LT5m
aXJzdCk7CiAgICAgICAgIEZsb2F0UmVjdCBzY2FsZWRUaWxlUmVjdCA9IHRpbGVSZWN0OwpAQCAt
MjEzLDcgKzIxMyw3IEBAIHZvaWQgVGlsZUNhY2hlOjpzZXRBY2NlbGVyYXRlc0RyYXdpbmcoYm9v
bCBhY2NlbGVyYXRlc0RyYXdpbmcpCiAgICAgbV9hY2NlbGVyYXRlc0RyYXdpbmcgPSBhY2NlbGVy
YXRlc0RyYXdpbmc7CiAKICAgICBmb3IgKFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90
aWxlcy5iZWdpbigpLCBlbmQgPSBtX3RpbGVzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAg
ICAgIFtpdC0+c2Vjb25kLmdldCgpIHNldEFjY2VsZXJhdGVzRHJhd2luZzptX2FjY2VsZXJhdGVz
RHJhd2luZ107CisgICAgICAgIFtpdC0+dmFsdWUuZ2V0KCkgc2V0QWNjZWxlcmF0ZXNEcmF3aW5n
Om1fYWNjZWxlcmF0ZXNEcmF3aW5nXTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGFjY2VsZXJh
dGVzRHJhd2luZyk7CiAjZW5kaWYKQEAgLTI0OSw3ICsyNDksNyBAQCB2b2lkIFRpbGVDYWNoZTo6
c2V0VGlsZURlYnVnQm9yZGVyV2lkdGgoZmxvYXQgYm9yZGVyV2lkdGgpCiAKICAgICBtX3RpbGVE
ZWJ1Z0JvcmRlcldpZHRoID0gYm9yZGVyV2lkdGg7CiAgICAgZm9yIChUaWxlTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKSwgZW5kID0gbV90aWxlcy5lbmQoKTsgaXQgIT0g
ZW5kOyArK2l0KQotICAgICAgICBbaXQtPnNlY29uZC5nZXQoKSBzZXRCb3JkZXJXaWR0aDptX3Rp
bGVEZWJ1Z0JvcmRlcldpZHRoXTsKKyAgICAgICAgW2l0LT52YWx1ZS5nZXQoKSBzZXRCb3JkZXJX
aWR0aDptX3RpbGVEZWJ1Z0JvcmRlcldpZHRoXTsKIH0KIAogdm9pZCBUaWxlQ2FjaGU6OnNldFRp
bGVEZWJ1Z0JvcmRlckNvbG9yKENHQ29sb3JSZWYgYm9yZGVyQ29sb3IpCkBAIC0yNTksNyArMjU5
LDcgQEAgdm9pZCBUaWxlQ2FjaGU6OnNldFRpbGVEZWJ1Z0JvcmRlckNvbG9yKENHQ29sb3JSZWYg
Ym9yZGVyQ29sb3IpCiAKICAgICBtX3RpbGVEZWJ1Z0JvcmRlckNvbG9yID0gYm9yZGVyQ29sb3I7
CiAgICAgZm9yIChUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKSwg
ZW5kID0gbV90aWxlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBbaXQtPnNlY29u
ZC5nZXQoKSBzZXRCb3JkZXJDb2xvcjptX3RpbGVEZWJ1Z0JvcmRlckNvbG9yLmdldCgpXTsKKyAg
ICAgICAgW2l0LT52YWx1ZS5nZXQoKSBzZXRCb3JkZXJDb2xvcjptX3RpbGVEZWJ1Z0JvcmRlckNv
bG9yLmdldCgpXTsKIH0KIAogSW50UmVjdCBUaWxlQ2FjaGU6OmJvdW5kcygpIGNvbnN0CkBAIC0z
MzQsOSArMzM0LDkgQEAgdm9pZCBUaWxlQ2FjaGU6OnJldmFsaWRhdGVUaWxlcygpCiAgICAgVmVj
dG9yPFRpbGVJbmRleD4gdGlsZXNUb1JlbW92ZTsKIAogICAgIGZvciAoVGlsZU1hcDo6aXRlcmF0
b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCksIGVuZCA9IG1fdGlsZXMuZW5kKCk7IGl0ICE9IGVuZDsg
KytpdCkgewotICAgICAgICBjb25zdCBUaWxlSW5kZXgmIHRpbGVJbmRleCA9IGl0LT5maXJzdDsK
KyAgICAgICAgY29uc3QgVGlsZUluZGV4JiB0aWxlSW5kZXggPSBpdC0+a2V5OwogCi0gICAgICAg
IFdlYlRpbGVMYXllciogdGlsZUxheWVyID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgV2Vi
VGlsZUxheWVyKiB0aWxlTGF5ZXIgPSBpdC0+dmFsdWUuZ2V0KCk7CiAKICAgICAgICAgaWYgKCFy
ZWN0Rm9yVGlsZUluZGV4KHRpbGVJbmRleCkuaW50ZXJzZWN0cyh0aWxlQ292ZXJhZ2VSZWN0KSkg
ewogICAgICAgICAgICAgLy8gUmVtb3ZlIHRoaXMgbGF5ZXIuCkBAIC0zNjQsNyArMzY0LDcgQEAg
dm9pZCBUaWxlQ2FjaGU6OnJldmFsaWRhdGVUaWxlcygpCiAgICAgICAgICAgICBUaWxlSW5kZXgg
dGlsZUluZGV4KHgsIHkpOwogCiAgICAgICAgICAgICBJbnRSZWN0IHRpbGVSZWN0ID0gcmVjdEZv
clRpbGVJbmRleCh0aWxlSW5kZXgpOwotICAgICAgICAgICAgUmV0YWluUHRyPFdlYlRpbGVMYXll
cj4mIHRpbGVMYXllciA9IG1fdGlsZXMuYWRkKHRpbGVJbmRleCwgMCkuaXRlcmF0b3ItPnNlY29u
ZDsKKyAgICAgICAgICAgIFJldGFpblB0cjxXZWJUaWxlTGF5ZXI+JiB0aWxlTGF5ZXIgPSBtX3Rp
bGVzLmFkZCh0aWxlSW5kZXgsIDApLml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgICAgIGlmICgh
dGlsZUxheWVyKSB7CiAgICAgICAgICAgICAgICAgdGlsZUxheWVyID0gY3JlYXRlVGlsZUxheWVy
KHRpbGVSZWN0KTsKICAgICAgICAgICAgICAgICBbbV90aWxlQ29udGFpbmVyTGF5ZXIuZ2V0KCkg
YWRkU3VibGF5ZXI6dGlsZUxheWVyLmdldCgpXTsKQEAgLTM4Myw3ICszODMsNyBAQCB2b2lkIFRp
bGVDYWNoZTo6cmV2YWxpZGF0ZVRpbGVzKCkKIAogICAgIG1fdGlsZUNvdmVyYWdlUmVjdCA9IElu
dFJlY3QoKTsKICAgICBmb3IgKFRpbGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigp
LCBlbmQgPSBtX3RpbGVzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgY29uc3Qg
VGlsZUluZGV4JiB0aWxlSW5kZXggPSBpdC0+Zmlyc3Q7CisgICAgICAgIGNvbnN0IFRpbGVJbmRl
eCYgdGlsZUluZGV4ID0gaXQtPmtleTsKIAogICAgICAgICBtX3RpbGVDb3ZlcmFnZVJlY3QudW5p
dGUocmVjdEZvclRpbGVJbmRleCh0aWxlSW5kZXgpKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5
ZXJXaW4uY3BwCmluZGV4IDQ4YjIwZDBiOGJkMjQyYWI1NDliOGZlNDQyZGY0NGFiMzY3MmViODUu
LjcwMTY4YjIxMDRkYjM2OWRhMDc1N2ExMTQ0NjIyMTExYmMzMDYxZjAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9y
bUNBTGF5ZXJXaW4uY3BwCkBAIC0xNjcsNyArMTY3LDcgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6
OmFuaW1hdGlvblN0YXJ0ZWQoQ0ZUaW1lSW50ZXJ2YWwgYmVnaW5UaW1lKQogCiAgICAgSGFzaE1h
cDxTdHJpbmcsIFJlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiA+Ojpjb25zdF9pdGVyYXRvciBl
bmQgPSBtX2FuaW1hdGlvbnMuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPFN0cmluZywgUmVmUHRy
PFBsYXRmb3JtQ0FBbmltYXRpb24+ID46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9hbmltYXRpb25z
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+c2V0QWN0dWFs
U3RhcnRUaW1lSWZOZWVkZWQoY2FjZkJlZ2luVGltZSk7CisgICAgICAgIGl0LT52YWx1ZS0+c2V0
QWN0dWFsU3RhcnRUaW1lSWZOZWVkZWQoY2FjZkJlZ2luVGltZSk7CiAKICAgICBpZiAobV9vd25l
cikKICAgICAgICAgbV9vd25lci0+cGxhdGZvcm1DQUxheWVyQW5pbWF0aW9uU3RhcnRlZChiZWdp
blRpbWUpOwpAQCAtMTc3LDggKzE3Nyw4IEBAIHN0YXRpYyB2b2lkIHJlc3VibWl0QWxsQW5pbWF0
aW9ucyhQbGF0Zm9ybUNBTGF5ZXIqIGxheWVyKQogewogICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQ
dHI8UGxhdGZvcm1DQUFuaW1hdGlvbj4gPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXItPmFu
aW1hdGlvbnMoKS5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8UGxhdGZv
cm1DQUFuaW1hdGlvbj4gPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXllci0+YW5pbWF0aW9ucygp
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdS
ZWY+IHMoQWRvcHRDRiwgaXQtPmZpcnN0LmNyZWF0ZUNGU3RyaW5nKCkpOwotICAgICAgICBDQUNG
TGF5ZXJBZGRBbmltYXRpb24obGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSwgcy5nZXQoKSwgaXQtPnNl
Y29uZC0+cGxhdGZvcm1BbmltYXRpb24oKSk7CisgICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1Jl
Zj4gcyhBZG9wdENGLCBpdC0+a2V5LmNyZWF0ZUNGU3RyaW5nKCkpOworICAgICAgICBDQUNGTGF5
ZXJBZGRBbmltYXRpb24obGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSwgcy5nZXQoKSwgaXQtPnZhbHVl
LT5wbGF0Zm9ybUFuaW1hdGlvbigpKTsKICAgICB9CiB9CiAKQEAgLTMyOCw3ICszMjgsNyBAQCBQ
YXNzUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+IFBsYXRmb3JtQ0FMYXllcjo6YW5pbWF0aW9u
Rm9yS2V5KGNvbnN0IFN0cmluZyYgawogICAgIGlmIChpdCA9PSBtX2FuaW1hdGlvbnMuZW5kKCkp
CiAgICAgICAgIHJldHVybiAwOwogCi0gICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgcmV0dXJu
IGl0LT52YWx1ZTsKIH0KIAogUGxhdGZvcm1DQUxheWVyKiBQbGF0Zm9ybUNBTGF5ZXI6Om1hc2so
KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vRm9udENhY2hlQ2hyb21pdW1XaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vRm9udENhY2hlQ2hyb21pdW1XaW4uY3BwCmluZGV4IGQ0ZDU5MmUx
YmVlMmRkMzMwYjQ2MzFhMzgxZjI0MjllODFmZDM4MTAuLmFmZmQyYWFjZmYwYTM0YzljYzdkZDRi
ZGNkOTY4YmQzZmI0YjI1YzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUNocm9taXVtV2luLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2FjaGVDaHJvbWl1bVdpbi5jcHAK
QEAgLTIyMiwxMCArMjIyLDEwIEBAIHN0YXRpYyBib29sIExvb2t1cEFsdE5hbWUoY29uc3QgU3Ry
aW5nJiBuYW1lLCBTdHJpbmcmIGFsdE5hbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IHN0YXRpYyBpbnQgc3lzdGVtQ3AgPSA6OkdldEFDUCgpOwotICAgIGludCBmb250Q3AgPSBpdGVy
LT5zZWNvbmQtPmNvZGVQYWdlOworICAgIGludCBmb250Q3AgPSBpdGVyLT52YWx1ZS0+Y29kZVBh
Z2U7CiAKICAgICBpZiAoKGlzQXNjaWkgJiYgc3lzdGVtQ3AgPT0gZm9udENwKSB8fCAoIWlzQXNj
aWkgJiYgc3lzdGVtQ3AgIT0gZm9udENwKSkgewotICAgICAgICBhbHROYW1lID0gU3RyaW5nKGl0
ZXItPnNlY29uZC0+bmFtZSk7CisgICAgICAgIGFsdE5hbWUgPSBTdHJpbmcoaXRlci0+dmFsdWUt
Pm5hbWUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTI3Niw3ICsyNzYsNyBA
QCBzdGF0aWMgYm9vbCBmb250Q29udGFpbnNDaGFyYWN0ZXIoY29uc3QgRm9udFBsYXRmb3JtRGF0
YSogZm9udERhdGEsCiAKICAgICBIYXNoTWFwPGNvbnN0IHdjaGFyX3QqLCBpY3U6OlVuaWNvZGVT
ZXQqPjo6aXRlcmF0b3IgaXQgPSBmb250Q21hcENhY2hlLT5maW5kKGZhbWlseSk7CiAgICAgaWYg
KGl0ICE9IGZvbnRDbWFwQ2FjaGUtPmVuZCgpKSAKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQt
PmNvbnRhaW5zKGNoYXJhY3Rlcik7CisgICAgICAgIHJldHVybiBpdC0+dmFsdWUtPmNvbnRhaW5z
KGNoYXJhY3Rlcik7CiAgICAgCiAgICAgSEZPTlQgaGZvbnQgPSBmb250RGF0YS0+aGZvbnQoKTsg
CiAgICAgSFduZERDIGhkYygwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRVdGlsc0Nocm9taXVtV2luLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRVdGlsc0Nocm9taXVtV2luLmNwcApp
bmRleCBjYzUyYzUyZWI3MDU3ODJkZTFmOTY4ZGM4MDNjNDVlNGYyYWUyMjkyLi4yZmZhYmJiNzY4
MmRlYThhMGUxZmM5ZmRhZWU5YzcxODA1YTQyYTA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250VXRpbHNDaHJvbWl1bVdpbi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFV0aWxzQ2hy
b21pdW1XaW4uY3BwCkBAIC00MTUsNyArNDE1LDcgQEAgYm9vbCBnZXREZXJpdmVkRm9udERhdGEo
Y29uc3QgVUNoYXIqIGZhbWlseSwKICAgICAgICAgLy8gY2hlY2sgaXQgYWdhaW5zdCB3aGF0IHdl
IGFjdHVhbGx5IHdhbnQgKGFzIGlzIGRvbmUgaW4KICAgICAgICAgLy8gRm9udENhY2hlV2luLmNw
cCkKICAgICAgICAgRm9udERhdGFDYWNoZTo6QWRkUmVzdWx0IGVudHJ5ID0gZm9udERhdGFDYWNo
ZS5hZGQoZm9udEtleSwgRm9udERhdGEoKSk7Ci0gICAgICAgIGRlcml2ZWQgPSAmZW50cnkuaXRl
cmF0b3ItPnNlY29uZDsKKyAgICAgICAgZGVyaXZlZCA9ICZlbnRyeS5pdGVyYXRvci0+dmFsdWU7
CiAgICAgICAgIGRlcml2ZWQtPmhmb250ID0gQ3JlYXRlRm9udEluZGlyZWN0KGxvZ2ZvbnQpOwog
ICAgICAgICAvLyBHZXRBc2NlbnQgbWF5IHJldHVybiBrVW5kZWZpbmVkQXNjZW50LCBidXQgd2Ug
c3RpbGwgd2FudCB0bwogICAgICAgICAvLyBjYWNoZSBpdCBzbyB0aGF0IHdlIHdvbid0IGhhdmUg
dG8gY2FsbCBDcmVhdGVGb250SW5kaXJlY3Qgb25jZQpAQCAtNDIzLDcgKzQyMyw3IEBAIGJvb2wg
Z2V0RGVyaXZlZEZvbnREYXRhKGNvbnN0IFVDaGFyKiBmYW1pbHksCiAgICAgICAgIGRlcml2ZWQt
PmFzY2VudCA9IGdldEFzY2VudChkZXJpdmVkLT5oZm9udCk7CiAgICAgICAgIGRlcml2ZWQtPnNw
YWNlR2x5cGggPSBnZXRTcGFjZUdseXBoKGRlcml2ZWQtPmhmb250KTsKICAgICB9IGVsc2Ugewot
ICAgICAgICBkZXJpdmVkID0gJml0ZXItPnNlY29uZDsKKyAgICAgICAgZGVyaXZlZCA9ICZpdGVy
LT52YWx1ZTsKICAgICAgICAgLy8gTGFzdCB0aW1lLCBHZXRBc2NlbnQgZmFpbGVkIHNvIHRoYXQg
b25seSBIRk9OVCB3YXMKICAgICAgICAgLy8gY2FjaGVkLiBUcnkgb25jZSBtb3JlIGFzc3VtaW5n
IHRoYXQgVHJ5UHJlbG9hZEZvbnQKICAgICAgICAgLy8gd2FzIGNhbGxlZCBieSBhIGNhbGxlciBi
ZXR3ZWVuIGNhbGxzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXgg
ZGIwYmExYzJjOWQyMjQ5MmNjNTI5YmZjMTJhNTJkZTkzNjBmZjRiNy4uNGQ1ZWEwYjQ2NzE4YTM2
MmUwYjY5YjJjN2VjZjVlNWJkNGUwODE1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hy
b21pdW0uY3BwCkBAIC03NDAsNyArNzQwLDcgQEAgaW50IEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6
bWFwQW5pbWF0aW9uTmFtZVRvSWQoY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lKQogICAgIGlm
ICghbV9hbmltYXRpb25JZE1hcC5jb250YWlucyhhbmltYXRpb25OYW1lKSkKICAgICAgICAgbV9h
bmltYXRpb25JZE1hcC5hZGQoYW5pbWF0aW9uTmFtZSwgc19uZXh0QW5pbWF0aW9uSWQrKyk7CiAK
LSAgICByZXR1cm4gbV9hbmltYXRpb25JZE1hcC5maW5kKGFuaW1hdGlvbk5hbWUpLT5zZWNvbmQ7
CisgICAgcmV0dXJuIG1fYW5pbWF0aW9uSWRNYXAuZmluZChhbmltYXRpb25OYW1lKS0+dmFsdWU7
CiB9CiAKIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpub3RpZnlBbmltYXRpb25TdGFydGVk
KGRvdWJsZSBzdGFydFRpbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5jcHAKaW5kZXggMGM2ZmUxNGY5
YWQ2NWZjMDJmMmQ1ZTQ5ZWY1MjU0NTMyNDJmYTZmYi4uZjhhY2QyZDRkMGFiZTYxYWU4ZmM4Yjhl
ODQ5Mjk1YzdkMmRmOTQ1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmNwcApAQCAtMTQ3LDcgKzE0
Nyw3IEBAIHZvaWQgVGV4dHVyZU1hbmFnZXI6OnJlbGVhc2VUb2tlbihUZXh0dXJlVG9rZW4gdG9r
ZW4pCiB7CiAgICAgVGV4dHVyZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RleHR1cmVzLmZpbmQodG9r
ZW4pOwogICAgIGlmIChpdCAhPSBtX3RleHR1cmVzLmVuZCgpKQotICAgICAgICByZW1vdmVUZXh0
dXJlKHRva2VuLCBpdC0+c2Vjb25kKTsKKyAgICAgICAgcmVtb3ZlVGV4dHVyZSh0b2tlbiwgaXQt
PnZhbHVlKTsKIH0KIAogYm9vbCBUZXh0dXJlTWFuYWdlcjo6aGFzVGV4dHVyZShUZXh0dXJlVG9r
ZW4gdG9rZW4pCkBAIC0xNzUsMTMgKzE3NSwxMyBAQCB2b2lkIFRleHR1cmVNYW5hZ2VyOjp1bnBy
b3RlY3RUZXh0dXJlKFRleHR1cmVUb2tlbiB0b2tlbikKIHsKICAgICBUZXh0dXJlTWFwOjppdGVy
YXRvciBpdCA9IG1fdGV4dHVyZXMuZmluZCh0b2tlbik7CiAgICAgaWYgKGl0ICE9IG1fdGV4dHVy
ZXMuZW5kKCkpCi0gICAgICAgIGl0LT5zZWNvbmQuaXNQcm90ZWN0ZWQgPSBmYWxzZTsKKyAgICAg
ICAgaXQtPnZhbHVlLmlzUHJvdGVjdGVkID0gZmFsc2U7CiB9CiAKIHZvaWQgVGV4dHVyZU1hbmFn
ZXI6OnVucHJvdGVjdEFsbFRleHR1cmVzKCkKIHsKICAgICBmb3IgKFRleHR1cmVNYXA6Oml0ZXJh
dG9yIGl0ID0gbV90ZXh0dXJlcy5iZWdpbigpOyBpdCAhPSBtX3RleHR1cmVzLmVuZCgpOyArK2l0
KQotICAgICAgICBpdC0+c2Vjb25kLmlzUHJvdGVjdGVkID0gZmFsc2U7CisgICAgICAgIGl0LT52
YWx1ZS5pc1Byb3RlY3RlZCA9IGZhbHNlOwogfQogCiB2b2lkIFRleHR1cmVNYW5hZ2VyOjpldmlj
dFRleHR1cmUoVGV4dHVyZVRva2VuIHRva2VuLCBUZXh0dXJlSW5mbyBpbmZvKQpAQCAtMjYyLDcg
KzI2Miw3IEBAIHVuc2lnbmVkIFRleHR1cmVNYW5hZ2VyOjphbGxvY2F0ZVRleHR1cmUoVGV4dHVy
ZUFsbG9jYXRvciogYWxsb2NhdG9yLCBUZXh0dXJlVG9rCiB7CiAgICAgVGV4dHVyZU1hcDo6aXRl
cmF0b3IgaXQgPSBtX3RleHR1cmVzLmZpbmQodG9rZW4pOwogICAgIEFTU0VSVChpdCAhPSBtX3Rl
eHR1cmVzLmVuZCgpKTsKLSAgICBUZXh0dXJlSW5mbyogaW5mbyA9ICZpdC5nZXQoKS0+c2Vjb25k
OworICAgIFRleHR1cmVJbmZvKiBpbmZvID0gJml0LmdldCgpLT52YWx1ZTsKICAgICBBU1NFUlQo
aW5mby0+aXNQcm90ZWN0ZWQpOwogCiAgICAgdW5zaWduZWQgdGV4dHVyZUlkID0gYWxsb2NhdG9y
LT5jcmVhdGVUZXh0dXJlKGluZm8tPnNpemUsIGluZm8tPmZvcm1hdCk7CkBAIC0yODAsOCArMjgw
LDggQEAgYm9vbCBUZXh0dXJlTWFuYWdlcjo6cmVxdWVzdFRleHR1cmUoVGV4dHVyZVRva2VuIHRv
a2VuLCBJbnRTaXplIHNpemUsIHVuc2lnbmVkIGYKIAogICAgIFRleHR1cmVNYXA6Oml0ZXJhdG9y
IGl0ID0gbV90ZXh0dXJlcy5maW5kKHRva2VuKTsKICAgICBpZiAoaXQgIT0gbV90ZXh0dXJlcy5l
bmQoKSkgewotICAgICAgICBBU1NFUlQoaXQtPnNlY29uZC5zaXplICE9IHNpemUgfHwgaXQtPnNl
Y29uZC5mb3JtYXQgIT0gZm9ybWF0KTsKLSAgICAgICAgcmVtb3ZlVGV4dHVyZSh0b2tlbiwgaXQt
PnNlY29uZCk7CisgICAgICAgIEFTU0VSVChpdC0+dmFsdWUuc2l6ZSAhPSBzaXplIHx8IGl0LT52
YWx1ZS5mb3JtYXQgIT0gZm9ybWF0KTsKKyAgICAgICAgcmVtb3ZlVGV4dHVyZSh0b2tlbiwgaXQt
PnZhbHVlKTsKICAgICB9CiAKICAgICBzaXplX3QgbWVtb3J5UmVxdWlyZWRCeXRlcyA9IG1lbW9y
eVVzZUJ5dGVzKHNpemUsIGZvcm1hdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcApp
bmRleCAwMTBhNDMxOGM4M2FkYzg3OGU0YTdjMDcwYzNlMjk4ZThhOTEzY2UyLi5iNDc5YTdhN2Vm
MmI3MWU1ODAxMjQ5ODhhMzljOWUzM2MxODk3MGMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJv
bWl1bS5jcHAKQEAgLTI2Nyw5ICsyNjcsOSBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6cHVz
aFByb3BlcnRpZXNUbyhDQ0xheWVySW1wbCogbGF5ZXIpCiAgICAgVmVjdG9yPFVwZGF0YWJsZVRp
bGUqPiBpbnZhbGlkVGlsZXM7CiAKICAgICBmb3IgKENDTGF5ZXJUaWxpbmdEYXRhOjpUaWxlTWFw
Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gbV90aWxlci0+dGlsZXMoKS5iZWdpbigpOyBpdGVyICE9
IG1fdGlsZXItPnRpbGVzKCkuZW5kKCk7ICsraXRlcikgewotICAgICAgICBpbnQgaSA9IGl0ZXIt
PmZpcnN0LmZpcnN0OwotICAgICAgICBpbnQgaiA9IGl0ZXItPmZpcnN0LnNlY29uZDsKLSAgICAg
ICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHN0YXRpY19jYXN0PFVwZGF0YWJsZVRpbGUqPihpdGVy
LT5zZWNvbmQuZ2V0KCkpOworICAgICAgICBpbnQgaSA9IGl0ZXItPmtleS5maXJzdDsKKyAgICAg
ICAgaW50IGogPSBpdGVyLT5rZXkuc2Vjb25kOworICAgICAgICBVcGRhdGFibGVUaWxlKiB0aWxl
ID0gc3RhdGljX2Nhc3Q8VXBkYXRhYmxlVGlsZSo+KGl0ZXItPnZhbHVlLmdldCgpKTsKICAgICAg
ICAgaWYgKCF0aWxlLT5tYW5hZ2VkVGV4dHVyZSgpLT5pc1ZhbGlkKG1fdGlsZXItPnRpbGVTaXpl
KCksIG1fdGV4dHVyZUZvcm1hdCkpIHsKICAgICAgICAgICAgIGludmFsaWRUaWxlcy5hcHBlbmQo
dGlsZSk7CiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTI5NCw3ICsyOTQsNyBAQCB2b2lkIFRp
bGVkTGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJUcmVlSG9zdChDQ0xheWVyVHJlZUhvc3QqIGhvc3Qp
CiB7CiAgICAgaWYgKGhvc3QgJiYgaG9zdCAhPSBsYXllclRyZWVIb3N0KCkpIHsKICAgICAgICAg
Zm9yIChDQ0xheWVyVGlsaW5nRGF0YTo6VGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1f
dGlsZXItPnRpbGVzKCkuYmVnaW4oKTsgaXRlciAhPSBtX3RpbGVyLT50aWxlcygpLmVuZCgpOyAr
K2l0ZXIpIHsKLSAgICAgICAgICAgIFVwZGF0YWJsZVRpbGUqIHRpbGUgPSBzdGF0aWNfY2FzdDxV
cGRhdGFibGVUaWxlKj4oaXRlci0+c2Vjb25kLmdldCgpKTsKKyAgICAgICAgICAgIFVwZGF0YWJs
ZVRpbGUqIHRpbGUgPSBzdGF0aWNfY2FzdDxVcGRhdGFibGVUaWxlKj4oaXRlci0+dmFsdWUuZ2V0
KCkpOwogICAgICAgICAgICAgdGlsZS0+bWFuYWdlZFRleHR1cmUoKS0+c2V0VGV4dHVyZU1hbmFn
ZXIoaG9zdC0+Y29udGVudHNUZXh0dXJlTWFuYWdlcigpKTsKICAgICAgICAgfQogICAgIH0KQEAg
LTM0Niw3ICszNDYsNyBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6aW52YWxpZGF0ZVJlY3Qo
Y29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0KQogICAgICAgICByZXR1cm47CiAKICAgICBmb3IgKEND
TGF5ZXJUaWxpbmdEYXRhOjpUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbV90aWxlci0+
dGlsZXMoKS5iZWdpbigpOyBpdGVyICE9IG1fdGlsZXItPnRpbGVzKCkuZW5kKCk7ICsraXRlcikg
ewotICAgICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gc3RhdGljX2Nhc3Q8VXBkYXRhYmxlVGls
ZSo+KGl0ZXItPnNlY29uZC5nZXQoKSk7CisgICAgICAgIFVwZGF0YWJsZVRpbGUqIHRpbGUgPSBz
dGF0aWNfY2FzdDxVcGRhdGFibGVUaWxlKj4oaXRlci0+dmFsdWUuZ2V0KCkpOwogICAgICAgICBB
U1NFUlQodGlsZSk7CiAgICAgICAgIEludFJlY3QgYm91bmQgPSBtX3RpbGVyLT50aWxlUmVjdCh0
aWxlKTsKICAgICAgICAgYm91bmQuaW50ZXJzZWN0KGxheWVyUmVjdCk7CkBAIC01OTIsNyArNTky
LDcgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnJlc2V0VXBkYXRlU3RhdGUoKQogICAgIC8v
IFJlc2V0IG1fdXBkYXRlUmVjdCBmb3IgYWxsIHRpbGVzLgogICAgIENDTGF5ZXJUaWxpbmdEYXRh
OjpUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3RpbGVyLT50aWxlcygpLmVuZCgpOwog
ICAgIGZvciAoQ0NMYXllclRpbGluZ0RhdGE6OlRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIg
PSBtX3RpbGVyLT50aWxlcygpLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKLSAgICAg
ICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHN0YXRpY19jYXN0PFVwZGF0YWJsZVRpbGUqPihpdGVy
LT5zZWNvbmQuZ2V0KCkpOworICAgICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gc3RhdGljX2Nh
c3Q8VXBkYXRhYmxlVGlsZSo+KGl0ZXItPnZhbHVlLmdldCgpKTsKICAgICAgICAgdGlsZS0+bV91
cGRhdGVSZWN0ID0gSW50UmVjdCgpOwogICAgICAgICB0aWxlLT5tX3BhcnRpYWxVcGRhdGUgPSBm
YWxzZTsKICAgICAgICAgdGlsZS0+bV91cGRhdGVkID0gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RhbWFnZVRyYWNrZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1h
Z2VUcmFja2VyLmNwcAppbmRleCBkNGI0Y2Y5MTZiMTJiMTNhZjdkZmE2MmFkZTUzMjYzMDFmZmI5
YzE2Li5lNjRhM2Q3MGUzYTA3MjUxY2ZkZmZlNzI0MDE0MzE5ZjY2Yjk1NDVjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RhbWFnZVRy
YWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDRGFtYWdlVHJhY2tlci5jcHAKQEAgLTE5OCw3ICsxOTgsNyBAQCBGbG9hdFJlY3QgQ0NE
YW1hZ2VUcmFja2VyOjp0cmFja0RhbWFnZUZyb21MZWZ0b3ZlclJlY3RzKCkKICAgICBGbG9hdFJl
Y3QgZGFtYWdlUmVjdCA9IEZsb2F0UmVjdCgpOwogCiAgICAgZm9yIChSZWN0TWFwOjppdGVyYXRv
ciBpdCA9IG1fY3VycmVudFJlY3RIaXN0b3J5LT5iZWdpbigpOyBpdCAhPSBtX2N1cnJlbnRSZWN0
SGlzdG9yeS0+ZW5kKCk7ICsraXQpCi0gICAgICAgIGRhbWFnZVJlY3QudW5pdGUoaXQtPnNlY29u
ZCk7CisgICAgICAgIGRhbWFnZVJlY3QudW5pdGUoaXQtPnZhbHVlKTsKIAogICAgIG1fY3VycmVu
dFJlY3RIaXN0b3J5LT5jbGVhcigpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVGlsaW5nRGF0YS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVGlsaW5nRGF0YS5j
cHAKaW5kZXggNDJmMWU4ZDFhYjU5OGM4Mzc1ZDViNWMxN2RkMjVlNjBlODNiYjYzNS4uMDRlM2Q2
YTdiODQ0M2JjYjgyM2NjZGZkY2I3YjQ0NjY3OTUxOWViYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRpbGluZ0RhdGEuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUaWxpbmdEYXRhLmNwcApAQCAtMTM4LDggKzEzOCw4IEBAIHZvaWQgQ0NMYXllclRpbGluZ0Rh
dGE6OnNldEJvdW5kcyhjb25zdCBJbnRTaXplJiBzaXplKQogICAgIGxheWVyUmVjdFRvVGlsZUlu
ZGljZXMoSW50UmVjdChJbnRQb2ludCgpLCBzaXplKSwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9t
KTsKICAgICBWZWN0b3I8VGlsZU1hcEtleT4gaW52YWxpZFRpbGVLZXlzOwogICAgIGZvciAoVGls
ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IG1fdGlsZXMu
ZW5kKCk7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5maXJzdC5maXJzdCA+IHJpZ2h0IHx8IGl0
LT5maXJzdC5zZWNvbmQgPiBib3R0b20pCi0gICAgICAgICAgICBpbnZhbGlkVGlsZUtleXMuYXBw
ZW5kKGl0LT5maXJzdCk7CisgICAgICAgIGlmIChpdC0+a2V5LmZpcnN0ID4gcmlnaHQgfHwgaXQt
PmtleS5zZWNvbmQgPiBib3R0b20pCisgICAgICAgICAgICBpbnZhbGlkVGlsZUtleXMuYXBwZW5k
KGl0LT5rZXkpOwogICAgIH0KICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGludmFsaWRUaWxl
S2V5cy5zaXplKCk7ICsraSkKICAgICAgICAgbV90aWxlcy5yZW1vdmUoaW52YWxpZFRpbGVLZXlz
W2ldKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCmluZGV4IDU3NmZjMmIzMTkwYTJk
NjMwOTU3NTk4MTc1YzQzZWVmNGU3ODhjMjcuLjNjZGVhMjYyY2Y1NzM0OTM1ODU0YWFlOWJiNmMz
ZTdhMmZmNjNhOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcApAQCAtNjI5LDcg
KzYyOSw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpzdGFydFJhdGVMaW1pdGVyKEdyYXBoaWNz
Q29udGV4dDNEKiBjb250ZXh0KQogICAgIEFTU0VSVChjb250ZXh0KTsKICAgICBSYXRlTGltaXRl
ck1hcDo6aXRlcmF0b3IgaXQgPSBtX3JhdGVMaW1pdGVycy5maW5kKGNvbnRleHQpOwogICAgIGlm
IChpdCAhPSBtX3JhdGVMaW1pdGVycy5lbmQoKSkKLSAgICAgICAgaXQtPnNlY29uZC0+c3RhcnQo
KTsKKyAgICAgICAgaXQtPnZhbHVlLT5zdGFydCgpOwogICAgIGVsc2UgewogICAgICAgICBSZWZQ
dHI8UmF0ZUxpbWl0ZXI+IHJhdGVMaW1pdGVyID0gUmF0ZUxpbWl0ZXI6OmNyZWF0ZShjb250ZXh0
KTsKICAgICAgICAgbV9yYXRlTGltaXRlcnMuc2V0KGNvbnRleHQsIHJhdGVMaW1pdGVyKTsKQEAg
LTY0MSw3ICs2NDEsNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c3RvcFJhdGVMaW1pdGVyKEdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQogewogICAgIFJhdGVMaW1pdGVyTWFwOjppdGVyYXRv
ciBpdCA9IG1fcmF0ZUxpbWl0ZXJzLmZpbmQoY29udGV4dCk7CiAgICAgaWYgKGl0ICE9IG1fcmF0
ZUxpbWl0ZXJzLmVuZCgpKSB7Ci0gICAgICAgIGl0LT5zZWNvbmQtPnN0b3AoKTsKKyAgICAgICAg
aXQtPnZhbHVlLT5zdG9wKCk7CiAgICAgICAgIG1fcmF0ZUxpbWl0ZXJzLnJlbW92ZShpdCk7CiAg
ICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9DdXN0b21GaWx0ZXJQcm9ncmFtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyUHJvZ3JhbS5jcHAKaW5kZXggMTMwNDQxYTFjZDA3
NWVmNTc5NWI5M2MwYzk3YjdiMTEwZTlkNzJhZS4uNzg1OWM4YmJhNTdlNGIxYjU0YzI4Y2E0ZmZm
MGZhNWJiYzZkZWVkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9DdXN0b21GaWx0ZXJQcm9ncmFtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclByb2dyYW0uY3BwCkBAIC03Nyw3
ICs3Nyw3IEBAIHZvaWQgQ3VzdG9tRmlsdGVyUHJvZ3JhbTo6cmVtb3ZlQ2xpZW50KEN1c3RvbUZp
bHRlclByb2dyYW1DbGllbnQqIGNsaWVudCkKIHZvaWQgQ3VzdG9tRmlsdGVyUHJvZ3JhbTo6bm90
aWZ5Q2xpZW50cygpCiB7CiAgICAgZm9yIChDdXN0b21GaWx0ZXJQcm9ncmFtQ2xpZW50TGlzdDo6
aXRlcmF0b3IgaXRlciA9IG1fY2xpZW50cy5iZWdpbigpLCBlbmQgPSBtX2NsaWVudHMuZW5kKCk7
IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCi0gICAgICAgIGl0ZXItPmZpcnN0LT5ub3RpZnlDdXN0b21G
aWx0ZXJQcm9ncmFtTG9hZGVkKHRoaXMpOworICAgICAgICBpdGVyLT5rZXktPm5vdGlmeUN1c3Rv
bUZpbHRlclByb2dyYW1Mb2FkZWQodGhpcyk7CiB9CiAKICNpZiBFTkFCTEUoV0VCR0wpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR0xDb250ZXh0R3Rr
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HTENvbnRleHRHdGsu
Y3BwCmluZGV4IDZiMjQ2MWEwMzIxZWY2MGUyNjVkZjYxZDIyMzRjZTc1NzY5NTk1NTEuLmFkNmZi
Njk1NjEyOTMwY2MxMDZkODA4MzA3OWYzNWZlZTFkZWVjM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HTENvbnRleHRHdGsuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HTENvbnRleHRHdGsuY3BwCkBAIC00Nyw3
ICs0Nyw3IEBAIEdMQ29udGV4dCogR0xDb250ZXh0OjpnZXRDb250ZXh0Rm9yV2lkZ2V0KEd0a1dp
ZGdldCogd2lkZ2V0KQogICAgIFdpbmRvd0NvbnRleHRNYXAmIHdpbmRvd0NvbnRleHRzID0gd2lu
ZG93Q29udGV4dHNNYXAoKTsKICAgICBXaW5kb3dDb250ZXh0TWFwOjppdGVyYXRvciBpID0gd2lu
ZG93Q29udGV4dHNNYXAoKS5maW5kKHdpZGdldCk7CiAgICAgaWYgKGkgIT0gd2luZG93Q29udGV4
dHMuZW5kKCkpCi0gICAgICAgIHJldHVybiBpLT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIHJldHVy
biBpLT52YWx1ZS5nZXQoKTsKIAogICAgIC8vIEl0J3MgaW1wb3J0YW50IHRoYXQgdGhpcyBjb250
ZXh0IGRvZXNuJ3QgaGFuZyBhcm91bmQgYWZ0ZXIgdGhlIHdpbmRvdwogICAgIC8vIGlzIHVubWFw
cGVkLCBzbyB3ZSBtYWtlIHN1cmUgdG8gY2xlYW4gaXQgdXAgb25jZSB0aGF0IGhhcHBlbnMuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJm
QnV6elNraWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enov
SGFyZkJ1enpTa2lhLmNwcAppbmRleCBmNjhlYTYxOTI0NWY4NjZlNWJkMGQ1NzhkMDEwNDg0NDUy
NTg0YzJiLi4xZTg4NjdiYjc1N2YyMjQyZThmNDk2MmY4NzViMWJkZjdhZTk5MTJlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNr
aWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hh
cmZCdXp6U2tpYS5jcHAKQEAgLTI0NCwxOCArMjQ0LDE4IEBAIHN0YXRpYyBIQl9GYWNlUmVjXyog
Z2V0Q2FjaGVkSGFyZmJ1enpGYWNlKEZvbnRQbGF0Zm9ybURhdGEqIHBsYXRmb3JtRGF0YSkKICAg
ICAgICAgZ0hhcmZidXp6RmFjZUNhY2hlLT5zZXQodW5pcXVlSUQsIGVudHJ5KTsKICAgICAgICAg
cmV0dXJuIGVudHJ5LmZpcnN0OwogICAgIH0KLSAgICArKyhyZXN1bHQuZ2V0KCktPnNlY29uZC5z
ZWNvbmQpOwotICAgIHJldHVybiByZXN1bHQuZ2V0KCktPnNlY29uZC5maXJzdDsKKyAgICArKyhy
ZXN1bHQuZ2V0KCktPnZhbHVlLnNlY29uZCk7CisgICAgcmV0dXJuIHJlc3VsdC5nZXQoKS0+dmFs
dWUuZmlyc3Q7CiB9CiAKIHN0YXRpYyB2b2lkIHJlbGVhc2VDYWNoZWRIYXJmYnV6ekZhY2UoU2tG
b250SUQgdW5pcXVlSUQpCiB7CiAgICAgSGFyZmJ1enpGYWNlQ2FjaGU6Oml0ZXJhdG9yIHJlc3Vs
dCA9IGdIYXJmYnV6ekZhY2VDYWNoZS0+ZmluZCh1bmlxdWVJRCk7CiAgICAgQVNTRVJUKHJlc3Vs
dCAhPSBnSGFyZmJ1enpGYWNlQ2FjaGUtPmVuZCgpKTsKLSAgICBBU1NFUlQocmVzdWx0LmdldCgp
LT5zZWNvbmQuc2Vjb25kID4gMCk7Ci0gICAgLS0ocmVzdWx0LmdldCgpLT5zZWNvbmQuc2Vjb25k
KTsKLSAgICBpZiAoIShyZXN1bHQuZ2V0KCktPnNlY29uZC5zZWNvbmQpKSB7Ci0gICAgICAgIEhC
X0ZyZWVGYWNlKHJlc3VsdC5nZXQoKS0+c2Vjb25kLmZpcnN0KTsKKyAgICBBU1NFUlQocmVzdWx0
LmdldCgpLT52YWx1ZS5zZWNvbmQgPiAwKTsKKyAgICAtLShyZXN1bHQuZ2V0KCktPnZhbHVlLnNl
Y29uZCk7CisgICAgaWYgKCEocmVzdWx0LmdldCgpLT52YWx1ZS5zZWNvbmQpKSB7CisgICAgICAg
IEhCX0ZyZWVGYWNlKHJlc3VsdC5nZXQoKS0+dmFsdWUuZmlyc3QpOwogICAgICAgICBnSGFyZmJ1
enpGYWNlQ2FjaGUtPnJlbW92ZSh1bmlxdWVJRCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckFU
U1VJLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4
dENvbnRyb2xsZXJBVFNVSS5jcHAKaW5kZXggYmU5Zjc0MTA0ZmU3NDM0NDU3MTU2NDE2M2NmN2Fh
ZDcwZTA3MmM0Zi4uNjJlYTRiZWQxYmEwNWM0NWQ5YmIyM2EzMzMyNWY1YjRjYzI3MzU5NSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0
Q29udHJvbGxlckFUU1VJLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyQVRTVUkuY3BwCkBAIC0yNzksNyArMjc5LDcgQEAg
c3RhdGljIEFUU1VTdHlsZSBpbml0aWFsaXplQVRTVVN0eWxlKGNvbnN0IFNpbXBsZUZvbnREYXRh
KiBmb250RGF0YSwgVHlwZXNldHRpbmcKIHsKICAgICB1bnNpZ25lZCBrZXkgPSB0eXBlc2V0dGlu
Z0ZlYXR1cmVzICsgMTsKICAgICBIYXNoTWFwPHVuc2lnbmVkLCBBVFNVU3R5bGU+OjpBZGRSZXN1
bHQgYWRkUmVzdWx0ID0gZm9udERhdGEtPm1fQVRTVVN0eWxlTWFwLmFkZChrZXksIDApOwotICAg
IEFUU1VTdHlsZSYgYXRzdVN0eWxlID0gYWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAg
QVRTVVN0eWxlJiBhdHN1U3R5bGUgPSBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlm
ICghYWRkUmVzdWx0LmlzTmV3RW50cnkpCiAgICAgICAgIHJldHVybiBhdHN1U3R5bGU7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250
RGF0YUNvcmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9T
aW1wbGVGb250RGF0YUNvcmVUZXh0LmNwcAppbmRleCAwNTE5Mzc0MmM1ODUyZGJlOWM5Y2VkNjRi
OWEwN2FhZDJjMWVhNDc3Li4wYjcxMzM0N2Y2MDQ2MzU1NDllNTBkNTYzNjUyMThiMjM0NDI2YWNm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxl
Rm9udERhdGFDb3JlVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL1NpbXBsZUZvbnREYXRhQ29yZVRleHQuY3BwCkBAIC00Myw3ICs0Myw3IEBAIENGRGlj
dGlvbmFyeVJlZiBTaW1wbGVGb250RGF0YTo6Z2V0Q0ZTdHJpbmdBdHRyaWJ1dGVzKFR5cGVzZXR0
aW5nRmVhdHVyZXMgdHlwZXNlCiB7CiAgICAgdW5zaWduZWQga2V5ID0gdHlwZXNldHRpbmdGZWF0
dXJlcyArIDE7CiAgICAgSGFzaE1hcDx1bnNpZ25lZCwgUmV0YWluUHRyPENGRGljdGlvbmFyeVJl
Zj4gPjo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IG1fQ0ZTdHJpbmdBdHRyaWJ1dGVzLmFkZChrZXks
IFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+KCkpOwotICAgIFJldGFpblB0cjxDRkRpY3Rpb25h
cnlSZWY+JiBhdHRyaWJ1dGVzRGljdGlvbmFyeSA9IGFkZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25k
OworICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+JiBhdHRyaWJ1dGVzRGljdGlvbmFyeSA9
IGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRy
eSkKICAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZXNEaWN0aW9uYXJ5LmdldCgpOwogICAgIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnRE
YXRhTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZv
bnREYXRhTWFjLm1tCmluZGV4IDc0YjI2ODZkNmNlNjBiYmZhNzBhYTBiMjI1MzM1Yjk2MDMyMzY0
YzIuLmE3N2ViZTM4ZjJjZDQwMzMwZDI0NjU3ZDc1MjdiMjNmMmE1MjNkNjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YU1hYy5t
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERh
dGFNYWMubW0KQEAgLTI5Miw3ICsyOTIsNyBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9y
bURlc3Ryb3koKQogI2lmIFVTRShBVFNVSSkKICAgICBIYXNoTWFwPHVuc2lnbmVkLCBBVFNVU3R5
bGU+OjppdGVyYXRvciBlbmQgPSBtX0FUU1VTdHlsZU1hcC5lbmQoKTsKICAgICBmb3IgKEhhc2hN
YXA8dW5zaWduZWQsIEFUU1VTdHlsZT46Oml0ZXJhdG9yIGl0ID0gbV9BVFNVU3R5bGVNYXAuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBBVFNVRGlzcG9zZVN0eWxlKGl0LT5zZWNv
bmQpOworICAgICAgICBBVFNVRGlzcG9zZVN0eWxlKGl0LT52YWx1ZSk7CiAjZW5kaWYKIH0KIApA
QCAtNDQyLDcgKzQ0Miw3IEBAIGJvb2wgU2ltcGxlRm9udERhdGE6OmNhblJlbmRlckNvbWJpbmlu
Z0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzCiAKICAgICBXVEY6Okhh
c2hNYXA8U3RyaW5nLCBib29sPjo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IG1fY29tYmluaW5nQ2hh
cmFjdGVyU2VxdWVuY2VTdXBwb3J0LT5hZGQoU3RyaW5nKGNoYXJhY3RlcnMsIGxlbmd0aCksIGZh
bHNlKTsKICAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXR1cm4gYWRk
UmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBhZGRSZXN1bHQuaXRlcmF0
b3ItPnZhbHVlOwogCiAgICAgUmV0YWluUHRyPENHRm9udFJlZj4gY2dGb250KEFkb3B0Q0YsIENU
Rm9udENvcHlHcmFwaGljc0ZvbnQocGxhdGZvcm1EYXRhKCkuY3RGb250KCksIDApKTsKIApAQCAt
NDYyLDcgKzQ2Miw3IEBAIGJvb2wgU2ltcGxlRm9udERhdGE6OmNhblJlbmRlckNvbWJpbmluZ0No
YXJhY3RlclNlcXVlbmNlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogCi0gICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSB0cnVl
OworICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSB0cnVlOwogICAgIHJldHVybiB0cnVl
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcApp
bmRleCA5MTIzZWQwYjIwM2VmNDRmMGRkMzZlMmZjZmY3NzkwZGM2OTdmMjNmLi43MjRjMDQwNjIy
MDc1ZWIxNmI5YzJiNjhiOTVkZTBkZTE1MzgxZGE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGlj
c0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAKQEAgLTQ2NSw3ICs0NjUsNyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpjb21waWxlU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQogICAg
IGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIFNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3VsdC0+c2Vjb25kOworICAgIFNo
YWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3VsdC0+dmFsdWU7CiAKICAgICBTdHJpbmcgdHJh
bnNsYXRlZFNoYWRlclNvdXJjZTsKICAgICBTdHJpbmcgc2hhZGVySW5mb0xvZzsKQEAgLTExNzEs
NyArMTE3MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlcml2KFBsYXRmb3Jt
M0RPYmplY3Qgc2hhZGVyLCBHQzNEZW51bSBwbmFtZSwgR0MzCiAgICAgICAgICAgICAqdmFsdWUg
PSBzdGF0aWNfY2FzdDxpbnQ+KGZhbHNlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQotICAgICAgICAqdmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ+KHJlc3VsdC0+c2Vjb25kLmlzVmFs
aWQpOworICAgICAgICAqdmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ+KHJlc3VsdC0+dmFsdWUuaXNW
YWxpZCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSU5GT19MT0dfTEVOR1RIOgogICAgICAg
ICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKSB7CkBAIC0xMTk4LDcgKzEx
OTgsNyBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlckluZm9Mb2coUGxhdGZv
cm0zRE9iamVjdCBzaGFkZXIpCiAgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5l
bmQoKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOyAKIAotICAgIFNoYWRlclNvdXJjZUVudHJ5
IGVudHJ5ID0gcmVzdWx0LT5zZWNvbmQ7CisgICAgU2hhZGVyU291cmNlRW50cnkgZW50cnkgPSBy
ZXN1bHQtPnZhbHVlOwogICAgIGlmICghZW50cnkuaXNWYWxpZCkKICAgICAgICAgcmV0dXJuIGVu
dHJ5LmxvZzsKIApAQCAtMTIyNCw3ICsxMjI0LDcgQEAgU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNE
OjpnZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCiAgICAgaWYgKHJlc3Vs
dCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOyAK
IAotICAgIHJldHVybiByZXN1bHQtPnNlY29uZC5zb3VyY2U7CisgICAgcmV0dXJuIHJlc3VsdC0+
dmFsdWUuc291cmNlOwogfQogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmNwcApp
bmRleCA0YzkyYzU5N2QzZjg4ODg5M2I0YjYwZjVjZDg1MmI2NjFkYjMyMGY0Li5hOTU5MDUxZmMy
MDhiZDZiYzg0YTlkZDA4YTNlMGY0NWJlMThhNjQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJB
bmltYXRpb24uY3BwCkBAIC0xODIsNyArMTgyLDcgQEAgYm9vbCBUZXh0dXJlTWFwcGVyQW5pbWF0
aW9uczo6aGFzQWN0aXZlQW5pbWF0aW9uc09mVHlwZShBbmltYXRlZFByb3BlcnR5SUQgdHlwZSkK
IHsKICAgICBIYXNoTWFwPFN0cmluZywgVGV4dHVyZU1hcHBlckFuaW1hdGlvbj46OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IG1fYW5pbWF0aW9ucy5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8U3RyaW5n
LCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2FuaW1hdGlv
bnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IFRleHR1cmVNYXBw
ZXJBbmltYXRpb24mIGFuaW1hdGlvbiA9IGl0LT5zZWNvbmQ7CisgICAgICAgIGNvbnN0IFRleHR1
cmVNYXBwZXJBbmltYXRpb24mIGFuaW1hdGlvbiA9IGl0LT52YWx1ZTsKICAgICAgICAgaWYgKGFu
aW1hdGlvbi5pc0FjdGl2ZSgpICYmIGFuaW1hdGlvbi5wcm9wZXJ0eSgpID09IHR5cGUpCiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0xOTMsNyArMTkzLDcgQEAgYm9vbCBUZXh0
dXJlTWFwcGVyQW5pbWF0aW9uczo6aGFzUnVubmluZ0FuaW1hdGlvbnMoKSBjb25zdAogewogICAg
IEhhc2hNYXA8U3RyaW5nLCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uPjo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gbV9hbmltYXRpb25zLmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIFRleHR1
cmVNYXBwZXJBbmltYXRpb24+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fYW5pbWF0aW9ucy5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgY29uc3QgVGV4dHVyZU1hcHBlckFuaW1h
dGlvbiYgYW5pbWF0aW9uID0gaXQtPnNlY29uZDsKKyAgICAgICAgY29uc3QgVGV4dHVyZU1hcHBl
ckFuaW1hdGlvbiYgYW5pbWF0aW9uID0gaXQtPnZhbHVlOwogICAgICAgICBpZiAoYW5pbWF0aW9u
LnN0YXRlKCkgPT0gVGV4dHVyZU1hcHBlckFuaW1hdGlvbjo6UGxheWluZ1N0YXRlKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMjUyLDE0ICsyNTIsMTQgQEAgdm9pZCBUZXh0
dXJlTWFwcGVyQW5pbWF0aW9uczo6cGF1c2UoY29uc3QgU3RyaW5nJiBuYW1lLCBkb3VibGUgb2Zm
c2V0KQogICAgIEhhc2hNYXA8U3RyaW5nLCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uPjo6aXRlcmF0
b3IgaXQgPSBtX2FuaW1hdGlvbnMuZmluZChuYW1lKTsKICAgICBpZiAoaXQgPT0gbV9hbmltYXRp
b25zLmVuZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgaXQtPnNlY29uZC5wYXVzZShvZmZzZXQp
OworICAgIGl0LT52YWx1ZS5wYXVzZShvZmZzZXQpOwogfQogCiB2b2lkIFRleHR1cmVNYXBwZXJB
bmltYXRpb25zOjphcHBseShUZXh0dXJlTWFwcGVyQW5pbWF0aW9uQ2xpZW50KiBjbGllbnQpCiB7
CiAgICAgSGFzaE1hcDxTdHJpbmcsIFRleHR1cmVNYXBwZXJBbmltYXRpb24+OjppdGVyYXRvciBl
bmQgPSBtX2FuaW1hdGlvbnMuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPFN0cmluZywgVGV4dHVy
ZU1hcHBlckFuaW1hdGlvbj46Oml0ZXJhdG9yIGl0ID0gbV9hbmltYXRpb25zLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC5hcHBseShjbGllbnQpOworICAgICAg
ICBpdC0+dmFsdWUuYXBwbHkoY2xpZW50KTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcApp
bmRleCBiOGY4YjU0YmViODk2ZmQ3ZTYzMGNhZjc5MDUzMTBkNWFhMGE2NDk1Li4wMzFiMzYyZGU1
OGVkODU2YTZiMzMzMDBmYTg4NGEwNmI0NjcyMmM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcApA
QCAtMTE3LDcgKzExNyw3IEBAIHN0cnVjdCBUZXh0dXJlTWFwcGVyR0xEYXRhIHsKICAgICAgICAg
ICAgIEdMQ29udGV4dCBjdXJyZW50R0xDb25leHQgPSBnZXRDdXJyZW50R0xDb250ZXh0KCk7CiAg
ICAgICAgICAgICBHTENvbnRleHREYXRhTWFwOjppdGVyYXRvciBpdCA9IGdsQ29udGV4dERhdGFN
YXAoKS5maW5kKGN1cnJlbnRHTENvbmV4dCk7CiAgICAgICAgICAgICBpZiAoaXQgIT0gZ2xDb250
ZXh0RGF0YU1hcCgpLmVuZCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBpdC0+c2Vjb25kOwor
ICAgICAgICAgICAgICAgIHJldHVybiBpdC0+dmFsdWU7CiAKICAgICAgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgU2hhcmVkR0xEYXRhKGdldEN1cnJlbnRHTENvbnRleHQoKSkpOwogICAgICAg
ICB9CkBAIC0xODQsNyArMTg0LDcgQEAgc3RydWN0IFRleHR1cmVNYXBwZXJHTERhdGEgewogICAg
ICAgICAgICAgR0xDb250ZXh0RGF0YU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gZ2xDb250ZXh0
RGF0YU1hcCgpLmVuZCgpOwogICAgICAgICAgICAgR0xDb250ZXh0RGF0YU1hcDo6aXRlcmF0b3Ig
aXQ7CiAgICAgICAgICAgICBmb3IgKGl0ID0gZ2xDb250ZXh0RGF0YU1hcCgpLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgICAgIGlmIChpdC0+c2Vjb25kID09IHRoaXMp
CisgICAgICAgICAgICAgICAgaWYgKGl0LT52YWx1ZSA9PSB0aGlzKQogICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXIuaAppbmRleCBkODQzMjcyOThjM2NjNDJmOWIzOGRlZGQ2MmRmZjhlNTA1NjRhYmM1
Li40YWQ1OTgxM2VjZWE0MTAyZDQ2NzA0OTg2ZjM0NGEzNDcyMDJiNDUzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaApAQCAtMTA5LDcgKzEwOSw3IEBAIHB1YmxpYzoK
IAogICAgICAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU1hcDo6aXRlcmF0b3IgaXQgPSBt
X3RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtTWFwLmZpbmQoc2hhZGVyVHlwZSk7CiAgICAgICAg
IGlmIChpdCAhPSBtX3RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtTWFwLmVuZCgpKQotICAgICAg
ICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwog
CiAgICAgICAgIHN3aXRjaCAoc2hhZGVyVHlwZSkgewogICAgICAgICBjYXNlIFNpbXBsZToKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRQbGF0
Zm9ybURhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9u
dFBsYXRmb3JtRGF0YS5jcHAKaW5kZXggMTk3OTBhZDQ5YjMzMDNkZDdiNjJjN2U3YTBhODIzNjc3
YjRjZmY1MS4uMTlmNTI0NTVkMTFiMzU0Y2M0ZDQzZTY4Mzk5Y2U3OWFjOTliYzBiMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udFBsYXRmb3Jt
RGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9u
dFBsYXRmb3JtRGF0YS5jcHAKQEAgLTI4Nyw5ICsyODcsOSBAQCBzdGF0aWMgUGFzc1JlZlB0cjxG
aXhlZFNpemVGb250RGF0YT4gY3JlYXRlRml4ZWRTaXplRm9udERhdGEoY29uc3QgQXRvbWljU3Ry
aW5nJgogICAgIEZpeGVkU2l6ZUZvbnREYXRhS2V5IGtleShmYW1pbHksIHdlaWdodCwgaXRhbGlj
KTsKICAgICBGaXhlZFNpemVGb250Q2FjaGU6OkFkZFJlc3VsdCByZXN1bHQgPSBnX2ZpeGVkU2l6
ZUZvbnRDYWNoZS5hZGQoa2V5LCBSZWZQdHI8Rml4ZWRTaXplRm9udERhdGE+KCkpOwogICAgIGlm
IChyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBG
aXhlZFNpemVGb250RGF0YTo6Y3JlYXRlKGZhbWlseSwgd2VpZ2h0LCBpdGFsaWMpOworICAgICAg
ICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gRml4ZWRTaXplRm9udERhdGE6OmNyZWF0ZShmYW1p
bHksIHdlaWdodCwgaXRhbGljKTsKIAotICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnNlY29u
ZDsKKyAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIAogc3RhdGljIExPTkcg
dG9HRElGb250V2VpZ2h0KEZvbnRXZWlnaHQgZm9udFdlaWdodCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmNwcAppbmRleCAxYTg0ZjhiZDMxOTUyYjI4ZTI2
ODI3MWRkMmE1ZjU3ZjQ0ZDgyN2Q3Li5hZGZjNjZlMDE1ZTUwMjI2Nzg4YzIxNDc2OGExNWIyOTEz
Njg0M2I4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRGF0YU9iamVj
dEd0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RhdGFPYmplY3RHdGsu
Y3BwCkBAIC0xNzEsNyArMTcxLDcgQEAgRGF0YU9iamVjdEd0ayogRGF0YU9iamVjdEd0azo6Zm9y
Q2xpcGJvYXJkKEd0a0NsaXBib2FyZCogY2xpcGJvYXJkKQogICAgIH0KIAogICAgIEhhc2hNYXA8
R3RrQ2xpcGJvYXJkKiwgUmVmUHRyPERhdGFPYmplY3RHdGs+ID46Oml0ZXJhdG9yIGl0ID0gb2Jq
ZWN0TWFwLmZpbmQoY2xpcGJvYXJkKTsKLSAgICByZXR1cm4gaXQtPnNlY29uZC5nZXQoKTsKKyAg
ICByZXR1cm4gaXQtPnZhbHVlLmdldCgpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvR3RrRHJhZ0FuZERyb3BIZWxwZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL0d0a0RyYWdBbmREcm9wSGVscGVyLmNwcAppbmRleCA3NjNkMTIwZDA5
NDE2MjI3MjY2MGM2MDYzMmExOTI5ODZmNTQyZWE0Li5mYzJmNTZlNjE2NmViMWFhY2RiYWRhOGY1
MmZlZjNjNmRkODg2NGNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
R3RrRHJhZ0FuZERyb3BIZWxwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9HdGtEcmFnQW5kRHJvcEhlbHBlci5jcHAKQEAgLTcwLDcgKzcwLDcgQEAgdm9pZCBHdGtEcmFn
QW5kRHJvcEhlbHBlcjo6aGFuZGxlR2V0RHJhZ0RhdGEoR2RrRHJhZ0NvbnRleHQqIGNvbnRleHQs
IEd0a1NlbGVjdGkKICAgICBEcmFnZ2luZ0RhdGFPYmplY3RzTWFwOjppdGVyYXRvciBpdGVyYXRv
ciA9IG1fZHJhZ2dpbmdEYXRhT2JqZWN0cy5maW5kKGNvbnRleHQpOwogICAgIGlmIChpdGVyYXRv
ciA9PSBtX2RyYWdnaW5nRGF0YU9iamVjdHMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBQ
YXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT5maWxsU2VsZWN0aW9u
RGF0YShzZWxlY3Rpb25EYXRhLCBpbmZvLCBpdGVyYXRvci0+c2Vjb25kLmdldCgpKTsKKyAgICBQ
YXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT5maWxsU2VsZWN0aW9u
RGF0YShzZWxlY3Rpb25EYXRhLCBpbmZvLCBpdGVyYXRvci0+dmFsdWUuZ2V0KCkpOwogfQogCiBz
dHJ1Y3QgSGFuZGxlRHJhZ0xhdGVyRGF0YSB7CkBAIC0xMTYsNyArMTE2LDcgQEAgdm9pZCBHdGtE
cmFnQW5kRHJvcEhlbHBlcjo6aGFuZGxlRHJhZ0xlYXZlKEdka0RyYWdDb250ZXh0KiBnZGtDb250
ZXh0LCBEcmFnRXhpdGUKICAgICAvLyB0aGUgZHJhZy1kcm9wIHNpZ25hbC4gV2Ugd2FudCB0aGUg
YWN0aW9ucyBmb3IgZHJhZy1sZWF2ZSB0byBoYXBwZW4gYWZ0ZXIKICAgICAvLyB0aG9zZSBmb3Ig
ZHJhZy1kcm9wLCBzbyBzY2hlZHVsZSB0aGVtIHRvIGhhcHBlbiBhc3luY2hyb25vdXNseSBoZXJl
LgogICAgIEhhbmRsZURyYWdMYXRlckRhdGEqIGRhdGEgPSBuZXcgSGFuZGxlRHJhZ0xhdGVyRGF0
YTsKLSAgICBkYXRhLT5jb250ZXh0ID0gaXRlcmF0b3ItPnNlY29uZDsKKyAgICBkYXRhLT5jb250
ZXh0ID0gaXRlcmF0b3ItPnZhbHVlOwogICAgIGRhdGEtPmNvbnRleHQtPmV4aXRlZENhbGxiYWNr
ID0gZXhpdGVkQ2FsbGJhY2s7CiAgICAgZGF0YS0+Z2x1ZSA9IHRoaXM7CiAgICAgZ190aW1lb3V0
X2FkZCgwLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihoYW5kbGVEcmFnTGVhdmVMYXRl
ckNhbGxiYWNrKSwgZGF0YSk7CkBAIC0xNDAsNyArMTQwLDcgQEAgUGFzc093blB0cjxEcmFnRGF0
YT4gR3RrRHJhZ0FuZERyb3BIZWxwZXI6OmhhbmRsZURyYWdNb3Rpb24oR2RrRHJhZ0NvbnRleHQq
IGNvbnQKICAgICAgICAgbV9kcm9wcGluZ0NvbnRleHRzLnNldChjb250ZXh0LCBkcm9wcGluZ0Nv
bnRleHQpOwogICAgICAgICBxdWVyeU5ld0Ryb3BDb250ZXh0RGF0YShkcm9wcGluZ0NvbnRleHQs
IG1fd2lkZ2V0LCB0aW1lKTsKICAgICB9IGVsc2UgewotICAgICAgICBkcm9wcGluZ0NvbnRleHQg
PSBpdGVyYXRvci0+c2Vjb25kOworICAgICAgICBkcm9wcGluZ0NvbnRleHQgPSBpdGVyYXRvci0+
dmFsdWU7CiAgICAgICAgIGRyb3BwaW5nQ29udGV4dC0+bGFzdE1vdGlvblBvc2l0aW9uID0gcG9z
aXRpb247CiAgICAgfQogCkBAIC0xNjIsNyArMTYyLDcgQEAgUGFzc093blB0cjxEcmFnRGF0YT4g
R3RrRHJhZ0FuZERyb3BIZWxwZXI6OmhhbmRsZURyYWdEYXRhUmVjZWl2ZWQoR2RrRHJhZ0NvbnRl
eHQKICAgICBpZiAoaXRlcmF0b3IgPT0gbV9kcm9wcGluZ0NvbnRleHRzLmVuZCgpKQogICAgICAg
ICByZXR1cm4gYWRvcHRQdHIoc3RhdGljX2Nhc3Q8RHJhZ0RhdGEqPigwKSk7CiAKLSAgICBEcm9w
cGluZ0NvbnRleHQqIGRyb3BwaW5nQ29udGV4dCA9IGl0ZXJhdG9yLT5zZWNvbmQ7CisgICAgRHJv
cHBpbmdDb250ZXh0KiBkcm9wcGluZ0NvbnRleHQgPSBpdGVyYXRvci0+dmFsdWU7CiAgICAgZHJv
cHBpbmdDb250ZXh0LT5wZW5kaW5nRGF0YVJlcXVlc3RzLS07CiAgICAgUGFzdGVib2FyZEhlbHBl
cjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+ZmlsbERhdGFPYmplY3RGcm9tRHJvcERhdGEo
c2VsZWN0aW9uRGF0YSwgaW5mbywgZHJvcHBpbmdDb250ZXh0LT5kYXRhT2JqZWN0LmdldCgpKTsK
IApAQCAtMTg1LDcgKzE4NSw3IEBAIFBhc3NPd25QdHI8RHJhZ0RhdGE+IEd0a0RyYWdBbmREcm9w
SGVscGVyOjpoYW5kbGVEcmFnRHJvcChHZGtEcmFnQ29udGV4dCogY29udGV4CiAgICAgaWYgKGl0
ZXJhdG9yID09IG1fZHJvcHBpbmdDb250ZXh0cy5lbmQoKSkKICAgICAgICAgcmV0dXJuIGFkb3B0
UHRyKHN0YXRpY19jYXN0PERyYWdEYXRhKj4oMCkpOwogCi0gICAgRHJvcHBpbmdDb250ZXh0KiBk
cm9wcGluZ0NvbnRleHQgPSBpdGVyYXRvci0+c2Vjb25kOworICAgIERyb3BwaW5nQ29udGV4dCog
ZHJvcHBpbmdDb250ZXh0ID0gaXRlcmF0b3ItPnZhbHVlOwogICAgIGRyb3BwaW5nQ29udGV4dC0+
ZHJvcEhhcHBlbmVkID0gdHJ1ZTsKIAogICAgIHJldHVybiBhZG9wdFB0cihuZXcgRHJhZ0RhdGEo
ZHJvcHBpbmdDb250ZXh0LT5kYXRhT2JqZWN0LmdldCgpLCBwb3NpdGlvbiwgCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGszLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0azMuY3BwCmluZGV4IDcyMGYwZmQz
NjAxYWQ1NWM0MWYwNDhkYTM4ZTkwYjE0MGM3ODQyYTkuLmVlNDJkNWRjOTBhODNmNTY0ODg2MjZk
YzM5ZTU2NDczMjJlYWZhNzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9SZW5kZXJUaGVtZUd0azMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9S
ZW5kZXJUaGVtZUd0azMuY3BwCkBAIC01Niw3ICs1Niw3IEBAIHN0YXRpYyB2b2lkIGd0a1N0eWxl
Q2hhbmdlZENhbGxiYWNrKEdPYmplY3QqLCBHUGFyYW1TcGVjKikKIHsKICAgICBTdHlsZUNvbnRl
eHRNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHN0eWxlQ29udGV4dE1hcCgpLmVuZCgpOwogICAg
IGZvciAoU3R5bGVDb250ZXh0TWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gc3R5bGVDb250ZXh0
TWFwKCkuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikKLSAgICAgICAgZ3RrX3N0eWxlX2Nv
bnRleHRfaW52YWxpZGF0ZShpdGVyLT5zZWNvbmQuZ2V0KCkpOworICAgICAgICBndGtfc3R5bGVf
Y29udGV4dF9pbnZhbGlkYXRlKGl0ZXItPnZhbHVlLmdldCgpKTsKIAogICAgIFBhZ2U6OnNjaGVk
dWxlRm9yY2VkU3R5bGVSZWNhbGNGb3JBbGxQYWdlcygpOwogfQpAQCAtNzksNyArNzksNyBAQCBz
dGF0aWMgR3RrU3R5bGVDb250ZXh0KiBnZXRTdHlsZUNvbnRleHQoR1R5cGUgd2lkZ2V0VHlwZSkK
IHsKICAgICBTdHlsZUNvbnRleHRNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBzdHlsZUNvbnRleHRN
YXAoKS5hZGQod2lkZ2V0VHlwZSwgMCk7CiAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLmdldCgpOworICAgICAgICByZXR1
cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKIAogICAgIEd0a1dpZGdldFBhdGgqIHBh
dGggPSBndGtfd2lkZ2V0X3BhdGhfbmV3KCk7CiAgICAgZ3RrX3dpZGdldF9wYXRoX2FwcGVuZF90
eXBlKHBhdGgsIHdpZGdldFR5cGUpOwpAQCAtMTExLDcgKzExMSw3IEBAIHN0YXRpYyBHdGtTdHls
ZUNvbnRleHQqIGdldFN0eWxlQ29udGV4dChHVHlwZSB3aWRnZXRUeXBlKQogICAgIGd0a19zdHls
ZV9jb250ZXh0X3NldF9wYXRoKGNvbnRleHQuZ2V0KCksIHBhdGgpOwogICAgIGd0a193aWRnZXRf
cGF0aF9mcmVlKHBhdGgpOwogCi0gICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBjb250ZXh0
OworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBjb250ZXh0OwogICAgIHJldHVybiBjb250
ZXh0LmdldCgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL0NyZWRlbnRpYWxTdG9yYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvQ3JlZGVudGlhbFN0b3JhZ2UuY3BwCmluZGV4IGYwOTg0Zjg4NTU4ZDVjNzllMjgzNGUxYWNi
Mjg2ZDhhNzk3YTI1ZTUuLjI4MzdmZjYxMzkyZjBhNWIzMTVkYjc5YjIzOTE2MjE3ZmY3ODJjMDgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbFN0
b3JhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlh
bFN0b3JhZ2UuY3BwCkBAIC0xNDcsNyArMTQ3LDcgQEAgYm9vbCBDcmVkZW50aWFsU3RvcmFnZTo6
c2V0KGNvbnN0IENyZWRlbnRpYWwmIGNyZWRlbnRpYWwsIGNvbnN0IEtVUkwmIHVybCkKICAgICBp
ZiAoaXRlciA9PSBwYXRoVG9EZWZhdWx0UHJvdGVjdGlvblNwYWNlTWFwKCkuZW5kKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICBBU1NFUlQob3JpZ2luc1dpdGhDcmVkZW50aWFscygpLmNv
bnRhaW5zKG9yaWdpblN0cmluZ0Zyb21VUkwodXJsKSkpOwotICAgIHByb3RlY3Rpb25TcGFjZVRv
Q3JlZGVudGlhbE1hcCgpLnNldChpdGVyLT5zZWNvbmQsIGNyZWRlbnRpYWwpOworICAgIHByb3Rl
Y3Rpb25TcGFjZVRvQ3JlZGVudGlhbE1hcCgpLnNldChpdGVyLT52YWx1ZSwgY3JlZGVudGlhbCk7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE1Niw3ICsxNTYsNyBAQCBDcmVkZW50aWFsIENy
ZWRlbnRpYWxTdG9yYWdlOjpnZXQoY29uc3QgS1VSTCYgdXJsKQogICAgIFBhdGhUb0RlZmF1bHRQ
cm90ZWN0aW9uU3BhY2VNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBmaW5kRGVmYXVsdFByb3RlY3Rpb25T
cGFjZUZvclVSTCh1cmwpOwogICAgIGlmIChpdGVyID09IHBhdGhUb0RlZmF1bHRQcm90ZWN0aW9u
U3BhY2VNYXAoKS5lbmQoKSkKICAgICAgICAgcmV0dXJuIENyZWRlbnRpYWwoKTsKLSAgICByZXR1
cm4gcHJvdGVjdGlvblNwYWNlVG9DcmVkZW50aWFsTWFwKCkuZ2V0KGl0ZXItPnNlY29uZCk7Cisg
ICAgcmV0dXJuIHByb3RlY3Rpb25TcGFjZVRvQ3JlZGVudGlhbE1hcCgpLmdldChpdGVyLT52YWx1
ZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUEhlYWRlck1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL0hUVFBIZWFkZXJNYXAuY3BwCmluZGV4IDUwMDkxZTE5ZDNhZjU2ZmY0
YThkZjE3NWJmODk3ODcwMDc2MTQyODAuLmRlZmUxYWU4NGJmMGFkZjA3Nzk0OTU1YjExYTVkYzcz
ZWEwMjNlMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRU
UEhlYWRlck1hcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQ
SGVhZGVyTWFwLmNwcApAQCAtNTIsNyArNTIsNyBAQCBQYXNzT3duUHRyPENyb3NzVGhyZWFkSFRU
UEhlYWRlck1hcERhdGE+IEhUVFBIZWFkZXJNYXA6OmNvcHlEYXRhKCkgY29uc3QKIAogICAgIEhU
VFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZF9pdCA9IGVuZCgpOwogICAgIGZvciAoSFRU
UEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBiZWdpbigpOyBpdCAhPSBlbmRfaXQ7ICsr
aXQpIHsKLSAgICAgICAgZGF0YS0+YXBwZW5kKG1ha2VfcGFpcihpdC0+Zmlyc3Quc3RyaW5nKCku
aXNvbGF0ZWRDb3B5KCksIGl0LT5zZWNvbmQuaXNvbGF0ZWRDb3B5KCkpKTsKKyAgICAgICAgZGF0
YS0+YXBwZW5kKG1ha2VfcGFpcihpdC0+a2V5LnN0cmluZygpLmlzb2xhdGVkQ29weSgpLCBpdC0+
dmFsdWUuaXNvbGF0ZWRDb3B5KCkpKTsKICAgICB9CiAgICAgcmV0dXJuIGRhdGEucmVsZWFzZSgp
OwogfQpAQCAtMTAwLDcgKzEwMCw3IEBAIFN0cmluZyBIVFRQSGVhZGVyTWFwOjpnZXQoY29uc3Qg
Y2hhciogbmFtZSkgY29uc3QKICAgICBjb25zdF9pdGVyYXRvciBpID0gZmluZDxjb25zdCBjaGFy
KiwgQ2FzZUZvbGRpbmdDU3RyaW5nVHJhbnNsYXRvcj4obmFtZSk7CiAgICAgaWYgKGkgPT0gZW5k
KCkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICByZXR1cm4gaS0+c2Vjb25kOworICAg
IHJldHVybiBpLT52YWx1ZTsKIH0KICAgICAKIGJvb2wgSFRUUEhlYWRlck1hcDo6Y29udGFpbnMo
Y29uc3QgY2hhciogbmFtZSkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvTUlNRUhlYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL01JTUVIZWFkZXIuY3BwCmluZGV4IDVkNmI4NThmNDZlNDM4M2ZjYjJmZWE2Mjg1OGFmNzUz
MmQ0M2E1YWYuLmY0ZTNlYmY2NzRkZTZiZDFkMjRhOTU5MGE0ODE4YmViNmZkOGRlNjMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvTUlNRUhlYWRlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9NSU1FSGVhZGVyLmNwcApAQCAtODYs
NyArODYsNyBAQCBQYXNzUmVmUHRyPE1JTUVIZWFkZXI+IE1JTUVIZWFkZXI6OnBhcnNlSGVhZGVy
KFNoYXJlZEJ1ZmZlckNodW5rUmVhZGVyKiBidWZmZXIpCiAgICAgS2V5VmFsdWVNYXA6Oml0ZXJh
dG9yIG1pbWVQYXJhbWV0ZXJzSXRlcmF0b3IgPSBrZXlWYWx1ZVBhaXJzLmZpbmQoImNvbnRlbnQt
dHlwZSIpOwogICAgIGlmIChtaW1lUGFyYW1ldGVyc0l0ZXJhdG9yICE9IGtleVZhbHVlUGFpcnMu
ZW5kKCkpIHsKICAgICAgICAgLy8gRklYTUU6IG1ha2UgQ29udGVudFR5cGVQYXJzZXIgbW9yZSBm
bGV4aWJsZSBzbyB3ZSBkb24ndCBoYXZlIHRvIHN5bnRoZXNpemUgdGhlICJDb250ZW50LVR5cGU6
Ii4KLSAgICAgICAgQ29udGVudFR5cGVQYXJzZXIgY29udGVudFR5cGVQYXJzZXIobWFrZVN0cmlu
ZygiQ29udGVudC1UeXBlOiIsIG1pbWVQYXJhbWV0ZXJzSXRlcmF0b3ItPnNlY29uZCkpOworICAg
ICAgICBDb250ZW50VHlwZVBhcnNlciBjb250ZW50VHlwZVBhcnNlcihtYWtlU3RyaW5nKCJDb250
ZW50LVR5cGU6IiwgbWltZVBhcmFtZXRlcnNJdGVyYXRvci0+dmFsdWUpKTsKICAgICAgICAgbWlt
ZUhlYWRlci0+bV9jb250ZW50VHlwZSA9IGNvbnRlbnRUeXBlUGFyc2VyLm1pbWVUeXBlKCk7CiAg
ICAgICAgIGlmICghbWltZUhlYWRlci0+aXNNdWx0aXBhcnQoKSkKICAgICAgICAgICAgIG1pbWVI
ZWFkZXItPm1fY2hhcnNldCA9IGNvbnRlbnRUeXBlUGFyc2VyLmNoYXJzZXQoKS5zdHJpcFdoaXRl
U3BhY2UoKTsKQEAgLTEwNSwxMSArMTA1LDExIEBAIFBhc3NSZWZQdHI8TUlNRUhlYWRlcj4gTUlN
RUhlYWRlcjo6cGFyc2VIZWFkZXIoU2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXIqIGJ1ZmZlcikKIAog
ICAgIG1pbWVQYXJhbWV0ZXJzSXRlcmF0b3IgPSBrZXlWYWx1ZVBhaXJzLmZpbmQoImNvbnRlbnQt
dHJhbnNmZXItZW5jb2RpbmciKTsKICAgICBpZiAobWltZVBhcmFtZXRlcnNJdGVyYXRvciAhPSBr
ZXlWYWx1ZVBhaXJzLmVuZCgpKQotICAgICAgICBtaW1lSGVhZGVyLT5tX2NvbnRlbnRUcmFuc2Zl
ckVuY29kaW5nID0gcGFyc2VDb250ZW50VHJhbnNmZXJFbmNvZGluZyhtaW1lUGFyYW1ldGVyc0l0
ZXJhdG9yLT5zZWNvbmQpOworICAgICAgICBtaW1lSGVhZGVyLT5tX2NvbnRlbnRUcmFuc2ZlckVu
Y29kaW5nID0gcGFyc2VDb250ZW50VHJhbnNmZXJFbmNvZGluZyhtaW1lUGFyYW1ldGVyc0l0ZXJh
dG9yLT52YWx1ZSk7CiAKICAgICBtaW1lUGFyYW1ldGVyc0l0ZXJhdG9yID0ga2V5VmFsdWVQYWly
cy5maW5kKCJjb250ZW50LWxvY2F0aW9uIik7CiAgICAgaWYgKG1pbWVQYXJhbWV0ZXJzSXRlcmF0
b3IgIT0ga2V5VmFsdWVQYWlycy5lbmQoKSkKLSAgICAgICAgbWltZUhlYWRlci0+bV9jb250ZW50
TG9jYXRpb24gPSBtaW1lUGFyYW1ldGVyc0l0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgIG1pbWVI
ZWFkZXItPm1fY29udGVudExvY2F0aW9uID0gbWltZVBhcmFtZXRlcnNJdGVyYXRvci0+dmFsdWU7
CiAKICAgICByZXR1cm4gbWltZUhlYWRlci5yZWxlYXNlKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwCmluZGV4IDdkZGM0N2U0
ZWE3OTlhNDZkZWU2ZjMyY2ZkMDc4ZWY3NTE1NGYxZWUuLjZkMTJmOWQ4OWIwMjQ3NzQ2YTU3ZTFi
YmNhZmIyYzIxN2Q1OTEwMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwCkBAIC03MSw3ICs3MSw3IEBAIFBhc3NSZWZQdHI8UmVz
b3VyY2VIYW5kbGU+IFJlc291cmNlSGFuZGxlOjpjcmVhdGUoTmV0d29ya2luZ0NvbnRleHQqIGNv
bnRleHQsIGNvCiAgICAgQnVpbHRpblJlc291cmNlSGFuZGxlQ29uc3RydWN0b3JNYXA6Oml0ZXJh
dG9yIHByb3RvY29sTWFwSXRlbSA9IGJ1aWx0aW5SZXNvdXJjZUhhbmRsZUNvbnN0cnVjdG9yTWFw
KCkuZmluZChyZXF1ZXN0LnVybCgpLnByb3RvY29sKCkpOwogCiAgICAgaWYgKHByb3RvY29sTWFw
SXRlbSAhPSBidWlsdGluUmVzb3VyY2VIYW5kbGVDb25zdHJ1Y3Rvck1hcCgpLmVuZCgpKQotICAg
ICAgICByZXR1cm4gcHJvdG9jb2xNYXBJdGVtLT5zZWNvbmQocmVxdWVzdCwgY2xpZW50KTsKKyAg
ICAgICAgcmV0dXJuIHByb3RvY29sTWFwSXRlbS0+dmFsdWUocmVxdWVzdCwgY2xpZW50KTsKIAog
ICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4gbmV3SGFuZGxlKGFkb3B0UmVmKG5ldyBSZXNvdXJj
ZUhhbmRsZShyZXF1ZXN0LCBjbGllbnQsIGRlZmVyc0xvYWRpbmcsIHNob3VsZENvbnRlbnRTbmlm
ZikpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNv
dXJjZVJlcXVlc3RCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVz
b3VyY2VSZXF1ZXN0QmFzZS5jcHAKaW5kZXggMzUwOTc5MjkyNzhjNzYwNjRjNGIwZGViOWFmZTM5
ZmYxOWJlNGMyNC4uNTMxNWMxZTM3NmFmMjY4NjRmMzgxNjIyNTU5YjA5Yjk2YmExZTI3ZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RC
YXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVx
dWVzdEJhc2UuY3BwCkBAIC0zNzMsNyArMzczLDcgQEAgdm9pZCBSZXNvdXJjZVJlcXVlc3RCYXNl
OjphZGRIVFRQSGVhZGVyRmllbGQoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBjb25zdCBTdHIK
ICAgICB1cGRhdGVSZXNvdXJjZVJlcXVlc3QoKTsKICAgICBIVFRQSGVhZGVyTWFwOjpBZGRSZXN1
bHQgcmVzdWx0ID0gbV9odHRwSGVhZGVyRmllbGRzLmFkZChuYW1lLCB2YWx1ZSk7CiAgICAgaWYg
KCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgKz0g
IiwiICsgdmFsdWU7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgKz0gIiwiICsgdmFs
dWU7CiAKICAgICBpZiAodXJsKCkucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpKQogICAgICAgICBt
X3BsYXRmb3JtUmVxdWVzdFVwZGF0ZWQgPSBmYWxzZTsKQEAgLTM4Myw3ICszODMsNyBAQCB2b2lk
IFJlc291cmNlUmVxdWVzdEJhc2U6OmFkZEhUVFBIZWFkZXJGaWVsZHMoY29uc3QgSFRUUEhlYWRl
ck1hcCYgaGVhZGVyRmllbGRzKQogewogICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IGhlYWRlckZpZWxkcy5lbmQoKTsKICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gaGVhZGVyRmllbGRzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAg
ICAgICAgYWRkSFRUUEhlYWRlckZpZWxkKGl0LT5maXJzdCwgaXQtPnNlY29uZCk7CisgICAgICAg
IGFkZEhUVFBIZWFkZXJGaWVsZChpdC0+a2V5LCBpdC0+dmFsdWUpOwogfQogCiBib29sIGVxdWFs
SWdub3JpbmdIZWFkZXJGaWVsZHMoY29uc3QgUmVzb3VyY2VSZXF1ZXN0QmFzZSYgYSwgY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0QmFzZSYgYikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvYmxhY2tiZXJyeS9OZXR3b3JrSm9iLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9OZXR3b3JrSm9iLmNwcAppbmRleCA2YTE4OWNlMjlh
MTczZjVhZGIwYzU2MTJmYjc0NmU3ZmY0YjFiM2MxLi4wZTdhN2NkNmZlMGMyNDRiZjMxYjRjYjc3
YWMwMjQ5YWJlNjZlZjRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2JsYWNrYmVycnkvTmV0d29ya0pvYi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9ibGFja2JlcnJ5L05ldHdvcmtKb2IuY3BwCkBAIC0yNDUsOSArMjQ1LDkgQEAg
dm9pZCBOZXR3b3JrSm9iOjpub3RpZnlIZWFkZXJzUmVjZWl2ZWQoQmxhY2tCZXJyeTo6UGxhdGZv
cm06Ok5ldHdvcmtSZXF1ZXN0OjpIZWEKICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TmV0d29y
a1JlcXVlc3Q6OkhlYWRlckxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZEl0ID0gaGVhZGVycy5lbmQo
KTsKICAgICBmb3IgKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpOZXR3b3JrUmVxdWVzdDo6SGVhZGVy
TGlzdDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBoZWFkZXJzLmJlZ2luKCk7IGl0ICE9IGVuZEl0OyAr
K2l0KSB7CiAgICAgICAgIGlmIChzaG91bGREZWZlckxvYWRpbmcoKSkKLSAgICAgICAgICAgIG1f
ZGVmZXJyZWREYXRhLmRlZmVySGVhZGVyUmVjZWl2ZWQoaXQtPmZpcnN0LmNfc3RyKCksIGl0LT5z
ZWNvbmQuY19zdHIoKSk7CisgICAgICAgICAgICBtX2RlZmVycmVkRGF0YS5kZWZlckhlYWRlclJl
Y2VpdmVkKGl0LT5rZXkuY19zdHIoKSwgaXQtPnZhbHVlLmNfc3RyKCkpOwogICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgIFN0cmluZyBrZXlTdHJpbmcoaXQtPmZpcnN0LmNfc3RyKCkpOworICAg
ICAgICAgICAgU3RyaW5nIGtleVN0cmluZyhpdC0+a2V5LmNfc3RyKCkpOwogICAgICAgICAgICAg
U3RyaW5nIHZhbHVlU3RyaW5nOwogICAgICAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGtl
eVN0cmluZywgIkxvY2F0aW9uIikpIHsKICAgICAgICAgICAgICAgICAvLyBMb2NhdGlvbiwgbGlr
ZSBhbGwgaGVhZGVycywgaXMgc3VwcG9zZWQgdG8gYmUgTGF0aW4tMS4gQnV0IHNvbWUgc2l0ZXMg
KHdpa2lwZWRpYSkgc2VuZCBpdCBpbiBVVEYtOC4KQEAgLTI1OCwxMSArMjU4LDExIEBAIHZvaWQg
TmV0d29ya0pvYjo6bm90aWZ5SGVhZGVyc1JlY2VpdmVkKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpO
ZXR3b3JrUmVxdWVzdDo6SGVhCiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IG1heWJlIHdlIHNo
b3VsZCBkbyB0aGlzIHdpdGggb3RoZXIgaGVhZGVycz8KICAgICAgICAgICAgICAgICAvLyBTa2lw
IGl0IGZvciBub3cgLSB3ZSBkb24ndCB3YW50IHRvIHJld3JpdGUgcmFuZG9tIGJ5dGVzIHVubGVz
cyB3ZSdyZSBzdXJlLiAoRGVmaW5pdGVseSBkb24ndCB3YW50IHRvCiAgICAgICAgICAgICAgICAg
Ly8gcmV3cml0ZSBjb29raWVzLCBmb3IgaW5zdGFuY2UuKSBOZWVkcyBtb3JlIGludmVzdGlnYXRp
b24uCi0gICAgICAgICAgICAgICAgdmFsdWVTdHJpbmcgPSBTdHJpbmc6OmZyb21VVEY4KGl0LT5z
ZWNvbmQuY19zdHIoKSk7CisgICAgICAgICAgICAgICAgdmFsdWVTdHJpbmcgPSBTdHJpbmc6OmZy
b21VVEY4KGl0LT52YWx1ZS5jX3N0cigpKTsKICAgICAgICAgICAgICAgICBpZiAodmFsdWVTdHJp
bmcuaXNOdWxsKCkpCi0gICAgICAgICAgICAgICAgICAgIHZhbHVlU3RyaW5nID0gaXQtPnNlY29u
ZC5jX3N0cigpOworICAgICAgICAgICAgICAgICAgICB2YWx1ZVN0cmluZyA9IGl0LT52YWx1ZS5j
X3N0cigpOwogICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgdmFsdWVTdHJpbmcg
PSBpdC0+c2Vjb25kLmNfc3RyKCk7CisgICAgICAgICAgICAgICAgdmFsdWVTdHJpbmcgPSBpdC0+
dmFsdWUuY19zdHIoKTsKIAogICAgICAgICAgICAgaGFuZGxlTm90aWZ5SGVhZGVyUmVjZWl2ZWQo
a2V5U3RyaW5nLCB2YWx1ZVN0cmluZyk7CiAgICAgICAgIH0KQEAgLTM0MSwxNCArMzQxLDE0IEBA
IHZvaWQgTmV0d29ya0pvYjo6aGFuZGxlTm90aWZ5TXVsdGlwYXJ0SGVhZGVyUmVjZWl2ZWQoY29u
c3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0CiAgICAgICAgICAgICBib29sIG5lZWRzQ29weWZyb21P
cmlnaW5hbFJlc3BvbnNlID0gdHJ1ZTsKICAgICAgICAgICAgIGludCByZXBsYWNlSGVhZGVyc0lu
ZGV4ID0gMDsKICAgICAgICAgICAgIHdoaWxlIChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TXVsdGlw
YXJ0U3RyZWFtOjpyZXBsYWNlSGVhZGVyc1tyZXBsYWNlSGVhZGVyc0luZGV4XSkgewotICAgICAg
ICAgICAgICAgIGlmIChpdC0+Zmlyc3QubG93ZXIoKSA9PSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6
TXVsdGlwYXJ0U3RyZWFtOjpyZXBsYWNlSGVhZGVyc1tyZXBsYWNlSGVhZGVyc0luZGV4XSkgewor
ICAgICAgICAgICAgICAgIGlmIChpdC0+a2V5Lmxvd2VyKCkgPT0gQmxhY2tCZXJyeTo6UGxhdGZv
cm06Ok11bHRpcGFydFN0cmVhbTo6cmVwbGFjZUhlYWRlcnNbcmVwbGFjZUhlYWRlcnNJbmRleF0p
IHsKICAgICAgICAgICAgICAgICAgICAgbmVlZHNDb3B5ZnJvbU9yaWdpbmFsUmVzcG9uc2UgPSBm
YWxzZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIHJlcGxhY2VIZWFkZXJzSW5kZXgrKzsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGlmIChuZWVkc0NvcHlmcm9tT3JpZ2luYWxSZXNwb25zZSkKLSAgICAgICAgICAgICAg
ICBtX211bHRpcGFydFJlc3BvbnNlLT5zZXRIVFRQSGVhZGVyRmllbGQoaXQtPmZpcnN0LCBpdC0+
c2Vjb25kKTsKKyAgICAgICAgICAgICAgICBtX211bHRpcGFydFJlc3BvbnNlLT5zZXRIVFRQSGVh
ZGVyRmllbGQoaXQtPmtleSwgaXQtPnZhbHVlKTsKICAgICAgICAgfQogCiAgICAgICAgIG1fbXVs
dGlwYXJ0UmVzcG9uc2UtPnNldElzTXVsdGlwYXJ0UGF5bG9hZCh0cnVlKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJjZVJlcXVl
c3RCbGFja0JlcnJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2ti
ZXJyeS9SZXNvdXJjZVJlcXVlc3RCbGFja0JlcnJ5LmNwcAppbmRleCAyZjI5ZjAxNjQ5NzFjMDFl
NWU3NTAwMmY4MzFjNGFlZDVlZTgwYzJlLi43ZTQ5ZTY1YWY2MjlmYzdiMTNlZDNkZTliNjZiNzg4
ODQ0MzYwOGI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Js
YWNrYmVycnkvUmVzb3VyY2VSZXF1ZXN0QmxhY2tCZXJyeS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlUmVxdWVzdEJsYWNrQmVycnku
Y3BwCkBAIC0xNTAsOCArMTUwLDggQEAgdm9pZCBSZXNvdXJjZVJlcXVlc3Q6OmluaXRpYWxpemVQ
bGF0Zm9ybVJlcXVlc3QoTmV0d29ya1JlcXVlc3QmIHBsYXRmb3JtUmVxdWVzdCwKICAgICAgICAg
fQogCiAgICAgICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBodHRw
SGVhZGVyRmllbGRzKCkuYmVnaW4oKTsgaXQgIT0gaHR0cEhlYWRlckZpZWxkcygpLmVuZCgpOyAr
K2l0KSB7Ci0gICAgICAgICAgICBTdHJpbmcga2V5ID0gaXQtPmZpcnN0OwotICAgICAgICAgICAg
U3RyaW5nIHZhbHVlID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIFN0cmluZyBrZXkgPSBpdC0+
a2V5OworICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0gaXQtPnZhbHVlOwogICAgICAgICAgICAg
aWYgKCFrZXkuaXNFbXB0eSgpICYmICF2YWx1ZS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAg
ICAvLyBXZSBuZWVkIHRvIGNoZWNrIHRoZSBlbmNvZGluZyBhbmQgZW5jb2RlIHRoZSBjb29raWUn
cyB2YWx1ZSB1c2luZyBsYXRpbjEgb3IgdXRmOCB0byBzdXBwb3J0IHVuaWNvZGUgY2hhcmFjdGVy
cy4KICAgICAgICAgICAgICAgICAvLyBXZSB3byd0IHVzZSB0aGUgb2xkIGNvb2tpZXMgb2YgcmVz
b3VyY2VSZXF1ZXN0IGZvciBuZXcgbG9jYXRpb24gYmVjYXVzZSB0aGVzZSBjb29raWVzIG1heSBi
ZSBjaGFuZ2VkIGJ5IHJlZGlyZWN0aW9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRk5ldC5jcHAKaW5kZXggMGYzOWVi
MGJkOGM3NmQ1MTEwM2RhZmJlYzNmYjExYTVhZDZkNDRlYS4uMzc0NWY2MzFiYTBmMjE4ZTgyZWI0
ODgxMzgwZTgyMzkyYzA2MDIxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZOZXQuY3BwCkBAIC00MTgsNyArNDE4
LDcgQEAgc3RhdGljIENGVVJMUmVxdWVzdFJlZiBtYWtlRmluYWxSZXF1ZXN0KGNvbnN0IFJlc291
cmNlUmVxdWVzdCYgcmVxdWVzdCwgYm9vbCBzaG8KICAgICAgICAgaWYgKCFzc2xQcm9wcykKICAg
ICAgICAgICAgIHNzbFByb3BzLmFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlTXV0YWJsZShrQ0ZB
bGxvY2F0b3JEZWZhdWx0LCAwLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZU
eXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CiAjaWYgUExBVEZPUk0oV0lOKQotICAgICAg
ICB3a1NldENsaWVudENlcnRpZmljYXRlSW5TU0xQcm9wZXJ0aWVzKHNzbFByb3BzLmdldCgpLCAo
Y2xpZW50Q2VydC0+c2Vjb25kKS5nZXQoKSk7CisgICAgICAgIHdrU2V0Q2xpZW50Q2VydGlmaWNh
dGVJblNTTFByb3BlcnRpZXMoc3NsUHJvcHMuZ2V0KCksIChjbGllbnRDZXJ0LT52YWx1ZSkuZ2V0
KCkpOwogI2VuZGlmCiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2NmL1Jlc291cmNlUmVxdWVzdENGTmV0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0Q0ZOZXQuY3BwCmluZGV4IDI3OWQ3NTVi
MmM4YjIyNmJhZjgxY2I0NzE3NThiZjZjODc1ZTdhZjMuLmM0ZWFlMmVjNjVlMTYzZWFlOTBiOTdl
YjVlZTNjY2JmYjUyYjJlZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0Q0ZOZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0Q0ZOZXQuY3BwCkBAIC0xMjAsOCArMTIw
LDggQEAgc3RhdGljIGlubGluZSB2b2lkIHNldEhlYWRlckZpZWxkcyhDRk11dGFibGVVUkxSZXF1
ZXN0UmVmIHJlcXVlc3QsIGNvbnN0IEhUVFBIZWEKIAogICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IHJlcXVlc3RIZWFkZXJzLmVuZCgpOwogICAgIGZvciAoSFRUUEhlYWRl
ck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSByZXF1ZXN0SGVhZGVycy5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKLSAgICAgICAgQ0ZTdHJpbmdSZWYga2V5ID0gaXQtPmZpcnN0LmNyZWF0ZUNG
U3RyaW5nKCk7Ci0gICAgICAgIENGU3RyaW5nUmVmIHZhbHVlID0gaXQtPnNlY29uZC5jcmVhdGVD
RlN0cmluZygpOworICAgICAgICBDRlN0cmluZ1JlZiBrZXkgPSBpdC0+a2V5LmNyZWF0ZUNGU3Ry
aW5nKCk7CisgICAgICAgIENGU3RyaW5nUmVmIHZhbHVlID0gaXQtPnZhbHVlLmNyZWF0ZUNGU3Ry
aW5nKCk7CiAgICAgICAgIENGVVJMUmVxdWVzdFNldEhUVFBIZWFkZXJGaWVsZFZhbHVlKHJlcXVl
c3QsIGtleSwgdmFsdWUpOwogICAgICAgICBDRlJlbGVhc2Uoa2V5KTsKICAgICAgICAgQ0ZSZWxl
YXNlKHZhbHVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y3VybC9SZXNvdXJjZUhhbmRsZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHAKaW5kZXggZjBmZDQwM2Y4Y2Nj
MzFmMDFkNmZmOGQwMjk2NTVhNTkyMTBmMmFjYy4uMGY4ZTVhZDcxYmVjYTdiZGZlYzkzMzA5OGM5
ZGIzYjU0YmIxMDhjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHAKQEAgLTcwMyw4ICs3
MDMsOCBAQCB2b2lkIFJlc291cmNlSGFuZGxlTWFuYWdlcjo6aW5pdGlhbGl6ZUhhbmRsZShSZXNv
dXJjZUhhbmRsZSogam9iKQogICAgICAgICBIVFRQSGVhZGVyTWFwIGN1c3RvbUhlYWRlcnMgPSBq
b2ItPmZpcnN0UmVxdWVzdCgpLmh0dHBIZWFkZXJGaWVsZHMoKTsKICAgICAgICAgSFRUUEhlYWRl
ck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY3VzdG9tSGVhZGVycy5lbmQoKTsKICAgICAgICAg
Zm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGN1c3RvbUhlYWRlcnMuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBTdHJpbmcga2V5ID0gaXQtPmZp
cnN0OwotICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAg
IFN0cmluZyBrZXkgPSBpdC0+a2V5OworICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0gaXQtPnZh
bHVlOwogICAgICAgICAgICAgU3RyaW5nIGhlYWRlclN0cmluZyhrZXkpOwogICAgICAgICAgICAg
aGVhZGVyU3RyaW5nLmFwcGVuZCgiOiAiKTsKICAgICAgICAgICAgIGhlYWRlclN0cmluZy5hcHBl
bmQodmFsdWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9t
YWMvUmVzb3VyY2VSZXF1ZXN0TWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9tYWMvUmVzb3VyY2VSZXF1ZXN0TWFjLm1tCmluZGV4IDEyMGY0YWNiNTZiY2MwNGY1NTdjZmM4
YWYyNGRmNDhiOTMxZWQzZWEuLjIxNDYzY2ZkYTY5ZmQ4OTc1MzA4ZWNiZDdiMTQ4OWQ4MmRlOGQ4
ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291
cmNlUmVxdWVzdE1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21h
Yy9SZXNvdXJjZVJlcXVlc3RNYWMubW0KQEAgLTE1Miw3ICsxNTIsNyBAQCB2b2lkIFJlc291cmNl
UmVxdWVzdDo6ZG9VcGRhdGVQbGF0Zm9ybVJlcXVlc3QoKQogICAgICAgICBbbnNSZXF1ZXN0IHNl
dFZhbHVlOm5pbCBmb3JIVFRQSGVhZGVyRmllbGQ6W29sZEhlYWRlckZpZWxkTmFtZXMgb2JqZWN0
QXRJbmRleDppIC0gMV1dOwogICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IGh0dHBIZWFkZXJGaWVsZHMoKS5lbmQoKTsKICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gaHR0cEhlYWRlckZpZWxkcygpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkKLSAgICAgICAgW25zUmVxdWVzdCBzZXRWYWx1ZTppdC0+c2Vjb25kIGZvckhUVFBIZWFkZXJG
aWVsZDppdC0+Zmlyc3RdOworICAgICAgICBbbnNSZXF1ZXN0IHNldFZhbHVlOml0LT52YWx1ZSBm
b3JIVFRQSGVhZGVyRmllbGQ6aXQtPmtleV07CiAKICAgICAvLyBUaGUgYmVsb3cgY2hlY2sgY2Fu
IGJlIHJlbW92ZWQgb25jZSB3ZSByZXF1aXJlIGEgdmVyc2lvbiBvZiBGb3VuZGF0aW9uIHdpdGgg
LVtOU011dGFibGVVUkxSZXF1ZXN0IHNldENvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJh
Y2tBcnJheTpdIG1ldGhvZC4KICAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0NvbnRlbnREaXNwb3Np
dGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheSA9IFtOU011dGFibGVVUkxSZXF1ZXN0IGluc3RhbmNl
c1Jlc3BvbmRUb1NlbGVjdG9yOkBzZWxlY3RvcihzZXRDb250ZW50RGlzcG9zaXRpb25FbmNvZGlu
Z0ZhbGxiYWNrQXJyYXk6KV07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3F0L1Jlc291cmNlUmVxdWVzdFF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvcXQvUmVzb3VyY2VSZXF1ZXN0UXQuY3BwCmluZGV4IGJmYjI0MTQwYmRmNGY1ZWYx
OWI5ZDlhYTIxNWY1ZWI4MWRiMzAwMTkuLjRjMjJhNmEzYTg0MjMwMjM5N2U0N2RhZDkyYzNhMjNm
NTQ2ZGY1ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvcXQv
UmVzb3VyY2VSZXF1ZXN0UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvcXQvUmVzb3VyY2VSZXF1ZXN0UXQuY3BwCkBAIC00OSw4ICs0OSw4IEBAIFFOZXR3b3JrUmVx
dWVzdCBSZXNvdXJjZVJlcXVlc3Q6OnRvTmV0d29ya1JlcXVlc3QoTmV0d29ya2luZ0NvbnRleHQg
KmNvbnRleHQpIGNvCiAgICAgY29uc3QgSFRUUEhlYWRlck1hcCAmaGVhZGVycyA9IGh0dHBIZWFk
ZXJGaWVsZHMoKTsKICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
aGVhZGVycy5iZWdpbigpLCBlbmQgPSBoZWFkZXJzLmVuZCgpOwogICAgICAgICAgaXQgIT0gZW5k
OyArK2l0KSB7Ci0gICAgICAgIFFCeXRlQXJyYXkgbmFtZSA9IFFTdHJpbmcoaXQtPmZpcnN0KS50
b0FzY2lpKCk7Ci0gICAgICAgIFFCeXRlQXJyYXkgdmFsdWUgPSBRU3RyaW5nKGl0LT5zZWNvbmQp
LnRvQXNjaWkoKTsKKyAgICAgICAgUUJ5dGVBcnJheSBuYW1lID0gUVN0cmluZyhpdC0+a2V5KS50
b0FzY2lpKCk7CisgICAgICAgIFFCeXRlQXJyYXkgdmFsdWUgPSBRU3RyaW5nKGl0LT52YWx1ZSku
dG9Bc2NpaSgpOwogICAgICAgICAvLyBRTmV0d29ya1JlcXVlc3Q6OnNldFJhd0hlYWRlcigpIHdv
dWxkIHJlbW92ZSB0aGUgaGVhZGVyIGlmIHRoZSB2YWx1ZSBpcyBudWxsCiAgICAgICAgIC8vIE1h
a2Ugc3VyZSB0byBzZXQgYW4gZW1wdHkgaGVhZGVyIGluc3RlYWQgb2YgbnVsbCBoZWFkZXIuCiAg
ICAgICAgIGlmICghdmFsdWUuaXNOdWxsKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0U291cC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0U291cC5jcHAKaW5kZXgg
ZDcxMjdiNGI1YjhlNDU5YTRjYWVjNTVhNTUyN2JiY2YzYzgzNzc4NS4uNTdhYjRkNjQ3YjNiZmZj
MjViYTkyMzc3OGM3MWQ0ZjRiZWUxNWNiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVzdFNvdXAuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNwcApAQCAt
NDMsNyArNDMsNyBAQCB2b2lkIFJlc291cmNlUmVxdWVzdDo6dXBkYXRlU291cE1lc3NhZ2UoU291
cE1lc3NhZ2UqIHNvdXBNZXNzYWdlKSBjb25zdAogICAgIGlmICghaGVhZGVycy5pc0VtcHR5KCkp
IHsKICAgICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaGVhZGVycy5l
bmQoKTsKICAgICAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGhl
YWRlcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgc291cF9tZXNzYWdl
X2hlYWRlcnNfYXBwZW5kKHNvdXBIZWFkZXJzLCBpdC0+Zmlyc3Quc3RyaW5nKCkudXRmOCgpLmRh
dGEoKSwgaXQtPnNlY29uZC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIHNvdXBfbWVzc2Fn
ZV9oZWFkZXJzX2FwcGVuZChzb3VwSGVhZGVycywgaXQtPmtleS5zdHJpbmcoKS51dGY4KCkuZGF0
YSgpLCBpdC0+dmFsdWUudXRmOCgpLmRhdGEoKSk7CiAgICAgfQogCiAgICAgU3RyaW5nIGZpcnN0
UGFydHlTdHJpbmcgPSBmaXJzdFBhcnR5Rm9yQ29va2llcygpLnN0cmluZygpOwpAQCAtNjYsNyAr
NjYsNyBAQCBTb3VwTWVzc2FnZSogUmVzb3VyY2VSZXF1ZXN0Ojp0b1NvdXBNZXNzYWdlKCkgY29u
c3QKICAgICBpZiAoIWhlYWRlcnMuaXNFbXB0eSgpKSB7CiAgICAgICAgIEhUVFBIZWFkZXJNYXA6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGhlYWRlcnMuZW5kKCk7CiAgICAgICAgIGZvciAoSFRUUEhl
YWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBoZWFkZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkKLSAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChzb3VwSGVhZGVy
cywgaXQtPmZpcnN0LnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGl0LT5zZWNvbmQudXRmOCgpLmRh
dGEoKSk7CisgICAgICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQoc291cEhlYWRl
cnMsIGl0LT5rZXkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgaXQtPnZhbHVlLnV0ZjgoKS5kYXRh
KCkpOwogICAgIH0KIAogICAgIFN0cmluZyBmaXJzdFBhcnR5U3RyaW5nID0gZmlyc3RQYXJ0eUZv
ckNvb2tpZXMoKS5zdHJpbmcoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvc291cC9SZXNvdXJjZVJlc3BvbnNlU291cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXNwb25zZVNvdXAuY3BwCmluZGV4IDE1NTA0
OGIyYmYyZjI0NDAyYmJkODlmNDM0NDRmNDI0YjI2Y2FmY2MuLjJmZmViNTYzYWRlOGM0YjBjNzRl
Yzk1MTRkZTk5ZTcyMGM5OGQyMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvc291cC9SZXNvdXJjZVJlc3BvbnNlU291cC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVzcG9uc2VTb3VwLmNwcApAQCAtNDYs
NyArNDYsNyBAQCBTb3VwTWVzc2FnZSogUmVzb3VyY2VSZXNwb25zZTo6dG9Tb3VwTWVzc2FnZSgp
IGNvbnN0CiAgICAgaWYgKCFoZWFkZXJzLmlzRW1wdHkoKSkgewogICAgICAgICBIVFRQSGVhZGVy
TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBoZWFkZXJzLmVuZCgpOwogICAgICAgICBmb3IgKEhU
VFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaGVhZGVycy5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpCi0gICAgICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQoc291cEhl
YWRlcnMsIGl0LT5maXJzdC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBpdC0+c2Vjb25kLnV0Zjgo
KS5kYXRhKCkpOworICAgICAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKHNvdXBI
ZWFkZXJzLCBpdC0+a2V5LnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGl0LT52YWx1ZS51dGY4KCku
ZGF0YSgpKTsKICAgICB9CiAKICAgICBzb3VwX21lc3NhZ2Vfc2V0X2ZsYWdzKHNvdXBNZXNzYWdl
LCBtX3NvdXBGbGFncyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL3dpbi9SZXNvdXJjZUhhbmRsZVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3dpbi9SZXNvdXJjZUhhbmRsZVdpbi5jcHAKaW5kZXggMDIxMmQwY2RhOThjOWYxMzc5
MjhlNjEyZmRmOTUwMzY1YTAxZDBkNi4uZjI1MDUyNzc1YjBkZWRmZTIxYzc1NWQzZjgzOTk4NTNl
N2EwZjM5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay93aW4v
UmVzb3VyY2VIYW5kbGVXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvd2luL1Jlc291cmNlSGFuZGxlV2luLmNwcApAQCAtMzIzLDE1ICszMjMsMTUgQEAgYm9vbCBS
ZXNvdXJjZUhhbmRsZTo6c3RhcnQoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQpCiAgICAgY29u
c3QgSFRUUEhlYWRlck1hcCYgaHR0cEhlYWRlckZpZWxkcyA9IGZpcnN0UmVxdWVzdCgpLmh0dHBI
ZWFkZXJGaWVsZHMoKTsKIAogICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBodHRwSGVhZGVyRmllbGRzLmJlZ2luKCk7IGl0ICE9IGh0dHBIZWFkZXJGaWVsZHMuZW5k
KCk7ICsraXQpIHsKLSAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGl0LT5maXJzdCwgIkFj
Y2VwdCIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKGl0LT5maXJzdCwgIlJlZmVyZXIiKSB8fCBlcXVh
bElnbm9yaW5nQ2FzZShpdC0+Zmlyc3QsICJVc2VyLUFnZW50IikpCisgICAgICAgIGlmIChlcXVh
bElnbm9yaW5nQ2FzZShpdC0+a2V5LCAiQWNjZXB0IikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UoaXQt
PmtleSwgIlJlZmVyZXIiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShpdC0+a2V5LCAiVXNlci1BZ2Vu
dCIpKQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgaWYgKCFodHRwSGVhZGVycy5p
c0VtcHR5KCkpCiAgICAgICAgICAgICBodHRwSGVhZGVycy5hcHBlbmQoJ1xuJyk7CiAKLSAgICAg
ICAgaHR0cEhlYWRlcnMuYXBwZW5kKGl0LT5maXJzdC5jaGFyYWN0ZXJzKCksIGl0LT5maXJzdC5s
ZW5ndGgoKSk7CisgICAgICAgIGh0dHBIZWFkZXJzLmFwcGVuZChpdC0+a2V5LmNoYXJhY3RlcnMo
KSwgaXQtPmtleS5sZW5ndGgoKSk7CiAgICAgICAgIGh0dHBIZWFkZXJzLmFwcGVuZCgnOicpOwot
ICAgICAgICBodHRwSGVhZGVycy5hcHBlbmQoaXQtPnNlY29uZC5jaGFyYWN0ZXJzKCksIGl0LT5z
ZWNvbmQubGVuZ3RoKCkpOworICAgICAgICBodHRwSGVhZGVycy5hcHBlbmQoaXQtPnZhbHVlLmNo
YXJhY3RlcnMoKSwgaXQtPnZhbHVlLmxlbmd0aCgpKTsKICAgICB9CiAKICAgICBJTlRFUk5FVF9C
VUZGRVJTVyBpbnRlcm5ldEJ1ZmZlcnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9xdC9SdW5Mb29wUXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUnVuTG9v
cFF0LmNwcAppbmRleCAyOGFiNjdiZGUwMTU1YWM3ZjViODY3MjY2Mjg1ODk0NTQ0NDkyNGU2Li5m
YzdhMmQxY2I1YjcxYzMwOWI0Y2NjZTk2Mzg4NGNmYjFjYWVlOTQwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SdW5Mb29wUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3F0L1J1bkxvb3BRdC5jcHAKQEAgLTEyNyw3ICsxMjcsNyBAQCB2b2lkIFJ1bkxv
b3A6OlRpbWVyQmFzZTo6dGltZXJGaXJlZChSdW5Mb29wKiBydW5Mb29wLCBpbnQgSUQpCiB7CiAg
ICAgVGltZXJNYXA6Oml0ZXJhdG9yIGl0ID0gcnVuTG9vcC0+bV9hY3RpdmVUaW1lcnMuZmluZChJ
RCk7CiAgICAgQVNTRVJUKGl0ICE9IHJ1bkxvb3AtPm1fYWN0aXZlVGltZXJzLmVuZCgpKTsKLSAg
ICBUaW1lckJhc2UqIHRpbWVyID0gaXQtPnNlY29uZDsKKyAgICBUaW1lckJhc2UqIHRpbWVyID0g
aXQtPnZhbHVlOwogCiAgICAgaWYgKCF0aW1lci0+bV9pc1JlcGVhdGluZykgewogICAgICAgICAv
LyBTdG9wIHRoZSB0aW1lciAoY2FsbGluZyBzdG9wIHdvdWxkIG5lZWQgYW5vdGhlciBoYXNoIHRh
YmxlIGxvb2t1cCkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0xv
Y2FsZVRvU2NyaXB0TWFwcGluZ0RlZmF1bHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9Mb2NhbGVUb1NjcmlwdE1hcHBpbmdEZWZhdWx0LmNwcAppbmRleCA0ZWQwM2NlNGUwN2U1
ZDhjOTcxZjlkMWZlZDk1ZjAwOGJmNGE1NjE5Li41ZGM5M2ZmMDk0YTg4ZWU2ZTBmNTUxMTdkMDJj
YmM2ZjZiNGM0MjE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0xv
Y2FsZVRvU2NyaXB0TWFwcGluZ0RlZmF1bHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvTG9jYWxlVG9TY3JpcHRNYXBwaW5nRGVmYXVsdC5jcHAKQEAgLTE2MCw3ICsxNjAs
NyBAQCBVU2NyaXB0Q29kZSBzY3JpcHROYW1lVG9Db2RlKGNvbnN0IFN0cmluZyYgc2NyaXB0TmFt
ZSkKIAogICAgIEhhc2hNYXA8U3RyaW5nLCBVU2NyaXB0Q29kZT46Oml0ZXJhdG9yIGl0ID0gc2Ny
aXB0TmFtZUNvZGVNYXAuZmluZChzY3JpcHROYW1lLmxvd2VyKCkpOwogICAgIGlmIChpdCAhPSBz
Y3JpcHROYW1lQ29kZU1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAg
ICAgIHJldHVybiBpdC0+dmFsdWU7CiAgICAgcmV0dXJuIFVTQ1JJUFRfSU5WQUxJRF9DT0RFOwog
fQogCkBAIC0zODMsNyArMzgzLDcgQEAgVVNjcmlwdENvZGUgbG9jYWxlVG9TY3JpcHRDb2RlRm9y
Rm9udFNlbGVjdGlvbihjb25zdCBTdHJpbmcmIGxvY2FsZSkKICAgICB3aGlsZSAoIWNhbm9uaWNh
bExvY2FsZS5pc0VtcHR5KCkpIHsKICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFVTY3JpcHRDb2Rl
Pjo6aXRlcmF0b3IgaXQgPSBsb2NhbGVTY3JpcHRNYXAuZmluZChjYW5vbmljYWxMb2NhbGUpOwog
ICAgICAgICBpZiAoaXQgIT0gbG9jYWxlU2NyaXB0TWFwLmVuZCgpKQotICAgICAgICAgICAgcmV0
dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwogICAgICAgICBz
aXplX3QgcG9zID0gY2Fub25pY2FsTG9jYWxlLnJldmVyc2VGaW5kKCdfJyk7CiAgICAgICAgIGlm
IChwb3MgPT0gbm90Rm91bmQpCiAgICAgICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnkuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAKaW5kZXggMDUx
NTAwNTJmNTRkNTE3YTBhMDFmNjI2MDYxOGViMTU3ZDE4YTdlMy4uZjYwNWEwZjFiNjBlYzQ4YTE2
NjRiMzU3YTMzYWU0YTc0ODk3NmE2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAKQEAgLTE5Niw4ICsxOTYsOCBAQCBz
dGF0aWMgdm9pZCBwcnVuZUJsYWNrbGlzdGVkQ29kZWNzKCkKICAgICAgICAgVGV4dEVuY29kaW5n
TmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSB0ZXh0RW5jb2RpbmdOYW1lTWFwLT5iZWdpbigp
OwogICAgICAgICBUZXh0RW5jb2RpbmdOYW1lTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSB0ZXh0
RW5jb2RpbmdOYW1lTWFwLT5lbmQoKTsKICAgICAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkg
ewotICAgICAgICAgICAgaWYgKGl0LT5zZWNvbmQgPT0gYXRvbWljTmFtZSkKLSAgICAgICAgICAg
ICAgICBuYW1lcy5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgICAgIGlmIChpdC0+dmFsdWUg
PT0gYXRvbWljTmFtZSkKKyAgICAgICAgICAgICAgICBuYW1lcy5hcHBlbmQoaXQtPmtleSk7CiAg
ICAgICAgIH0KIAogICAgICAgICBzaXplX3QgbGVuZ3RoID0gbmFtZXMuc2l6ZSgpOwpAQCAtMzc5
LDcgKzM3OSw3IEBAIHZvaWQgZHVtcFRleHRFbmNvZGluZ05hbWVNYXAoKQogICAgIFRleHRFbmNv
ZGluZ05hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdGV4dEVuY29kaW5nTmFtZU1hcC0+YmVn
aW4oKTsKICAgICBUZXh0RW5jb2RpbmdOYW1lTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSB0ZXh0
RW5jb2RpbmdOYW1lTWFwLT5lbmQoKTsKICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KQotICAg
ICAgICBmcHJpbnRmKHN0ZGVyciwgIiclcycgPT4gJyVzJ1xuIiwgaXQtPmZpcnN0LCBpdC0+c2Vj
b25kKTsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICInJXMnID0+ICclcydcbiIsIGl0LT5rZXks
IGl0LT52YWx1ZSk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC90cmFuc2NvZGVyL0ZvbnRUcmFuc2NvZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvdHJhbnNjb2Rlci9Gb250VHJhbnNjb2Rlci5jcHAKaW5kZXggNGUwN2Y1
MGZiZGIwYzU3YzNlZWNhNmY4YmU3MWY3NTA1ZGI1M2JjMC4uNDg0MjI4Y2FhOGU3NjA3MWIzN2E5
ZDIwYTk5MmQ1MGExZDQxZjQwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC90cmFuc2NvZGVyL0ZvbnRUcmFuc2NvZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L3RyYW5zY29kZXIvRm9udFRyYW5zY29kZXIuY3BwCkBAIC02Niw3ICs2Niw3
IEBAIEZvbnRUcmFuc2NvZGVyOjpDb252ZXJ0ZXJUeXBlIEZvbnRUcmFuc2NvZGVyOjpjb252ZXJ0
ZXJUeXBlKGNvbnN0IEZvbnREZXNjcmlwdGlvCiAgICAgaWYgKCFmb250RmFtaWx5LmlzTnVsbCgp
KSB7CiAgICAgICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBDb252ZXJ0ZXJUeXBlPjo6Y29uc3Rf
aXRlcmF0b3IgZm91bmQgPSBtX2NvbnZlcnRlclR5cGVzLmZpbmQoZm9udEZhbWlseSk7CiAgICAg
ICAgIGlmIChmb3VuZCAhPSBtX2NvbnZlcnRlclR5cGVzLmVuZCgpKQotICAgICAgICAgICAgcmV0
dXJuIGZvdW5kLT5zZWNvbmQ7CisgICAgICAgICAgICByZXR1cm4gZm91bmQtPnZhbHVlOwogICAg
IH0KIAogICAgIC8vIElFJ3MgZGVmYXVsdCBmb250cyBmb3IgSmFwYW5lc2UgZW5jb2RpbmdzIGNo
YW5nZSBiYWNrc2xhc2hlcyBpbnRvIHllbiBzaWducy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvd2luY2UvVGV4dENvZGVjV2luQ0UuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC93aW5jZS9UZXh0Q29kZWNXaW5DRS5jcHAKaW5kZXggMGM0ZWM1MDEy
MTQ5YWQwMWNjNWMxOGIyNDE0M2RhMGNlMmI4ZjRjMy4uZjA1ZGUzMjQyOGM4NTBmZGU2YzBlNDMw
OWU2YmZlZjU5YzE1MjdkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC93aW5jZS9UZXh0Q29kZWNXaW5DRS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC93aW5jZS9UZXh0Q29kZWNXaW5DRS5jcHAKQEAgLTEwMSwxNyArMTAxLDE3IEBAIExhbmd1
YWdlTWFuYWdlcjo6TGFuZ3VhZ2VNYW5hZ2VyKCkKICAgICAgICAgICAgICAgICBpID0gY29kZVBh
Z2VDaGFyc2V0cygpLnNldChjcEluZm8udWlDb2RlUGFnZSwgbmFtZSkuaXRlcmF0b3I7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBpZiAoaSAhPSBjb2RlUGFnZUNoYXJzZXRzKCkuZW5kKCkp
IHsKLSAgICAgICAgICAgICAgICBIYXNoTWFwPFN0cmluZywgQ2hhcnNldEluZm8+OjppdGVyYXRv
ciBqID0ga25vd25DaGFyc2V0cygpLmZpbmQoU3RyaW5nKGktPnNlY29uZC5kYXRhKCksIGktPnNl
Y29uZC5sZW5ndGgoKSkpOworICAgICAgICAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBDaGFyc2V0
SW5mbz46Oml0ZXJhdG9yIGogPSBrbm93bkNoYXJzZXRzKCkuZmluZChTdHJpbmcoaS0+dmFsdWUu
ZGF0YSgpLCBpLT52YWx1ZS5sZW5ndGgoKSkpOwogICAgICAgICAgICAgICAgIEFTU0VSVChqICE9
IGtub3duQ2hhcnNldHMoKS5lbmQoKSk7Ci0gICAgICAgICAgICAgICAgQ2hhcnNldEluZm8mIGlu
Zm8gPSBqLT5zZWNvbmQ7Ci0gICAgICAgICAgICAgICAgaW5mby5tX25hbWUgPSBpLT5zZWNvbmQu
ZGF0YSgpOworICAgICAgICAgICAgICAgIENoYXJzZXRJbmZvJiBpbmZvID0gai0+dmFsdWU7Cisg
ICAgICAgICAgICAgICAgaW5mby5tX25hbWUgPSBpLT52YWx1ZS5kYXRhKCk7CiAgICAgICAgICAg
ICAgICAgaW5mby5tX2ZyaWVuZGx5TmFtZSA9IGNwSW5mby53c3pEZXNjcmlwdGlvbjsKICAgICAg
ICAgICAgICAgICBpbmZvLm1fYWxpYXNlcy5hcHBlbmQobmFtZSk7CiAgICAgICAgICAgICAgICAg
aW5mby5tX2FsaWFzZXMuYXBwZW5kKFN0cmluZyhjcEluZm8ud3N6SGVhZGVyQ2hhcnNldCkubGF0
aW4xKCkpOwogICAgICAgICAgICAgICAgIGluZm8ubV9hbGlhc2VzLmFwcGVuZChTdHJpbmcoY3BJ
bmZvLndzekJvZHlDaGFyc2V0KS5sYXRpbjEoKSk7CiAgICAgICAgICAgICAgICAgU3RyaW5nIGNw
TmFtZSA9ICJjcCIgKyBTdHJpbmc6Om51bWJlcihjcEluZm8udWlDb2RlUGFnZSk7CiAgICAgICAg
ICAgICAgICAgaW5mby5tX2FsaWFzZXMuYXBwZW5kKGNwTmFtZS5sYXRpbjEoKSk7Ci0gICAgICAg
ICAgICAgICAgc3VwcG9ydGVkQ2hhcnNldHMoKS5hZGQoaS0+c2Vjb25kLmRhdGEoKSk7CisgICAg
ICAgICAgICAgICAgc3VwcG9ydGVkQ2hhcnNldHMoKS5hZGQoaS0+dmFsdWUuZGF0YSgpKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBlbnVtSW50ZXJmYWNlLT5SZWxlYXNlKCk7
CkBAIC0xMjQsNyArMTI0LDcgQEAgc3RhdGljIFVJTlQgZ2V0Q29kZVBhZ2UoY29uc3QgY2hhciog
bmFtZSkKICAgICAvLyBzYXlpbmcgIj09IiBpcyBub3QgZm91bmQgZm9yIGNvbnN0X2l0ZXJhdG9y
IGFuZCBpdGVyYXRvcgogICAgIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBDaGFyc2V0SW5mbz4mIGNo
YXJzZXRzID0ga25vd25DaGFyc2V0cygpOwogICAgIEhhc2hNYXA8U3RyaW5nLCBDaGFyc2V0SW5m
bz46OmNvbnN0X2l0ZXJhdG9yIGkgPSBjaGFyc2V0cy5maW5kKG5hbWUpOwotICAgIHJldHVybiBp
ID09IGNoYXJzZXRzLmVuZCgpID8gQ1BfQUNQIDogaS0+c2Vjb25kLm1fY29kZVBhZ2U7CisgICAg
cmV0dXJuIGkgPT0gY2hhcnNldHMuZW5kKCkgPyBDUF9BQ1AgOiBpLT52YWx1ZS5tX2NvZGVQYWdl
OwogfQogCiBzdGF0aWMgUGFzc093blB0cjxUZXh0Q29kZWM+IG5ld1RleHRDb2RlY1dpbkNFKGNv
bnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcsIGNvbnN0IHZvaWQqKQpAQCAtMTQ3LDkgKzE0Nyw5
IEBAIHZvaWQgVGV4dENvZGVjV2luQ0U6OnJlZ2lzdGVyRXh0ZW5kZWRFbmNvZGluZ05hbWVzKEVu
Y29kaW5nTmFtZVJlZ2lzdHJhciByZWdpc3RyCiAgICAgZm9yIChDaGFyc2V0U2V0OjppdGVyYXRv
ciBpID0gc3VwcG9ydGVkQ2hhcnNldHMoKS5iZWdpbigpOyBpICE9IHN1cHBvcnRlZENoYXJzZXRz
KCkuZW5kKCk7ICsraSkgewogICAgICAgICBIYXNoTWFwPFN0cmluZywgQ2hhcnNldEluZm8+Ojpp
dGVyYXRvciBqID0ga25vd25DaGFyc2V0cygpLmZpbmQoKmkpOwogICAgICAgICBpZiAoaiAhPSBr
bm93bkNoYXJzZXRzKCkuZW5kKCkpIHsKLSAgICAgICAgICAgIHJlZ2lzdHJhcihqLT5zZWNvbmQu
bV9uYW1lLmRhdGEoKSwgai0+c2Vjb25kLm1fbmFtZS5kYXRhKCkpOwotICAgICAgICAgICAgZm9y
IChWZWN0b3I8Q1N0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGFsaWFzID0gai0+c2Vjb25kLm1fYWxp
YXNlcy5iZWdpbigpOyBhbGlhcyAhPSBqLT5zZWNvbmQubV9hbGlhc2VzLmVuZCgpOyArK2FsaWFz
KQotICAgICAgICAgICAgICAgIHJlZ2lzdHJhcihhbGlhcy0+ZGF0YSgpLCBqLT5zZWNvbmQubV9u
YW1lLmRhdGEoKSk7CisgICAgICAgICAgICByZWdpc3RyYXIoai0+dmFsdWUubV9uYW1lLmRhdGEo
KSwgai0+dmFsdWUubV9uYW1lLmRhdGEoKSk7CisgICAgICAgICAgICBmb3IgKFZlY3RvcjxDU3Ry
aW5nPjo6Y29uc3RfaXRlcmF0b3IgYWxpYXMgPSBqLT52YWx1ZS5tX2FsaWFzZXMuYmVnaW4oKTsg
YWxpYXMgIT0gai0+dmFsdWUubV9hbGlhc2VzLmVuZCgpOyArK2FsaWFzKQorICAgICAgICAgICAg
ICAgIHJlZ2lzdHJhcihhbGlhcy0+ZGF0YSgpLCBqLT52YWx1ZS5tX25hbWUuZGF0YSgpKTsKICAg
ICAgICAgfQogICAgIH0KIH0KQEAgLTE2MCw3ICsxNjAsNyBAQCB2b2lkIFRleHRDb2RlY1dpbkNF
OjpyZWdpc3RlckV4dGVuZGVkQ29kZWNzKFRleHRDb2RlY1JlZ2lzdHJhciByZWdpc3RyYXIpCiAg
ICAgZm9yIChDaGFyc2V0U2V0OjppdGVyYXRvciBpID0gc3VwcG9ydGVkQ2hhcnNldHMoKS5iZWdp
bigpOyBpICE9IHN1cHBvcnRlZENoYXJzZXRzKCkuZW5kKCk7ICsraSkgewogICAgICAgICBIYXNo
TWFwPFN0cmluZywgQ2hhcnNldEluZm8+OjppdGVyYXRvciBqID0ga25vd25DaGFyc2V0cygpLmZp
bmQoKmkpOwogICAgICAgICBpZiAoaiAhPSBrbm93bkNoYXJzZXRzKCkuZW5kKCkpCi0gICAgICAg
ICAgICByZWdpc3RyYXIoai0+c2Vjb25kLm1fbmFtZS5kYXRhKCksIG5ld1RleHRDb2RlY1dpbkNF
LCAwKTsKKyAgICAgICAgICAgIHJlZ2lzdHJhcihqLT52YWx1ZS5tX25hbWUuZGF0YSgpLCBuZXdU
ZXh0Q29kZWNXaW5DRSwgMCk7CiAgICAgfQogfQogCkBAIC0yOTksNyArMjk5LDcgQEAgdm9pZCBU
ZXh0Q29kZWNXaW5DRTo6ZW51bWVyYXRlU3VwcG9ydGVkRW5jb2RpbmdzKEVuY29kaW5nUmVjZWl2
ZXImIHJlY2VpdmVyKQogICAgIGxhbmd1YWdlTWFuYWdlcigpOwogICAgIGZvciAoQ2hhcnNldFNl
dDo6aXRlcmF0b3IgaSA9IHN1cHBvcnRlZENoYXJzZXRzKCkuYmVnaW4oKTsgaSAhPSBzdXBwb3J0
ZWRDaGFyc2V0cygpLmVuZCgpOyArK2kpIHsKICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIENoYXJz
ZXRJbmZvPjo6aXRlcmF0b3IgaiA9IGtub3duQ2hhcnNldHMoKS5maW5kKCppKTsKLSAgICAgICAg
aWYgKGogIT0ga25vd25DaGFyc2V0cygpLmVuZCgpICYmICFyZWNlaXZlci5yZWNlaXZlKGotPnNl
Y29uZC5tX25hbWUuZGF0YSgpLCBqLT5zZWNvbmQubV9mcmllbmRseU5hbWUuY2hhcmFjdGVyc1dp
dGhOdWxsVGVybWluYXRpb24oKSwgai0+c2Vjb25kLm1fY29kZVBhZ2UpKQorICAgICAgICBpZiAo
aiAhPSBrbm93bkNoYXJzZXRzKCkuZW5kKCkgJiYgIXJlY2VpdmVyLnJlY2VpdmUoai0+dmFsdWUu
bV9uYW1lLmRhdGEoKSwgai0+dmFsdWUubV9mcmllbmRseU5hbWUuY2hhcmFjdGVyc1dpdGhOdWxs
VGVybWluYXRpb24oKSwgai0+dmFsdWUubV9jb2RlUGFnZSkpCiAgICAgICAgICAgICBicmVhazsK
ICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xpcGJv
YXJkVXRpbGl0aWVzV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9h
cmRVdGlsaXRpZXNXaW4uY3BwCmluZGV4IGQ2MWMwMTQzMjRhZDY2ZWM3MWJiYWNjNDgyZDBiYjc3
NjYxYzIyMWYuLjI1Mjc3YjczMTA4Mjk2ODM4Yjg5MjY5NjllN2U5ZWEwNjNkNGZjM2YgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRVdGlsaXRpZXNXaW4u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRVdGlsaXRpZXNX
aW4uY3BwCkBAIC03NSw3ICs3NSw3IEBAIHN0YXRpYyBib29sIGdldERhdGFNYXBJdGVtKGNvbnN0
IERyYWdEYXRhTWFwKiBkYXRhT2JqZWN0LCBGT1JNQVRFVEMqIGZvcm1hdCwgU3RyCiAgICAgRHJh
Z0RhdGFNYXA6OmNvbnN0X2l0ZXJhdG9yIGZvdW5kID0gZGF0YU9iamVjdC0+ZmluZChmb3JtYXQt
PmNmRm9ybWF0KTsKICAgICBpZiAoZm91bmQgPT0gZGF0YU9iamVjdC0+ZW5kKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBpdGVtID0gZm91bmQtPnNlY29uZFswXTsKKyAgICBpdGVtID0g
Zm91bmQtPnZhbHVlWzBdOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC04MTksNyArODE5LDcg
QEAgdm9pZCBnZXRDbGlwYm9hcmREYXRhKElEYXRhT2JqZWN0KiBkYXRhT2JqZWN0LCBGT1JNQVRF
VEMqIGZvcm1hdCwgVmVjdG9yPFN0cmluZz4KICAgICBDbGlwYm9hcmRGb3JtYXRNYXA6OmNvbnN0
X2l0ZXJhdG9yIGZvdW5kID0gZm9ybWF0TWFwLmZpbmQoZm9ybWF0LT5jZkZvcm1hdCk7CiAgICAg
aWYgKGZvdW5kID09IGZvcm1hdE1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGZvdW5k
LT5zZWNvbmQtPmdldFN0cmluZyhkYXRhT2JqZWN0LCBmb3VuZC0+c2Vjb25kLT5mb3JtYXQsIGRh
dGFTdHJpbmdzKTsKKyAgICBmb3VuZC0+dmFsdWUtPmdldFN0cmluZyhkYXRhT2JqZWN0LCBmb3Vu
ZC0+dmFsdWUtPmZvcm1hdCwgZGF0YVN0cmluZ3MpOwogfQogCiB2b2lkIHNldENsaXBib2FyZERh
dGEoSURhdGFPYmplY3QqIGRhdGFPYmplY3QsIFVJTlQgZm9ybWF0LCBjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgZGF0YVN0cmluZ3MpCkBAIC04MjgsNyArODI4LDcgQEAgdm9pZCBzZXRDbGlwYm9hcmRE
YXRhKElEYXRhT2JqZWN0KiBkYXRhT2JqZWN0LCBVSU5UIGZvcm1hdCwgY29uc3QgVmVjdG9yPFN0
cmluZz4KICAgICBDbGlwYm9hcmRGb3JtYXRNYXA6OmNvbnN0X2l0ZXJhdG9yIGZvdW5kID0gZm9y
bWF0TWFwLmZpbmQoZm9ybWF0KTsKICAgICBpZiAoZm91bmQgPT0gZm9ybWF0TWFwLmVuZCgpKQog
ICAgICAgICByZXR1cm47Ci0gICAgZm91bmQtPnNlY29uZC0+c2V0U3RyaW5nKGRhdGFPYmplY3Qs
IGZvdW5kLT5zZWNvbmQtPmZvcm1hdCwgZGF0YVN0cmluZ3MpOworICAgIGZvdW5kLT52YWx1ZS0+
c2V0U3RyaW5nKGRhdGFPYmplY3QsIGZvdW5kLT52YWx1ZS0+Zm9ybWF0LCBkYXRhU3RyaW5ncyk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3dpbi9GaWxlU3lzdGVtV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3dpbi9GaWxlU3lzdGVtV2luLmNwcAppbmRleCA0Y2U1MTg3NzEyMzUzZTkwYzBkMTU2Zjg1NDE5
ZmNiMDVkYjM3ZmFjLi5iMTA0OTIyZTJmM2Y2MDM4MDQ0ZTgxYWUyNmU0MWE4YTVlZjgzYjdhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0ZpbGVTeXN0ZW1XaW4uY3BwCkBAIC0y
MDksNyArMjA5LDcgQEAgc3RhdGljIFN0cmluZyBjYWNoZWRTdG9yYWdlRGlyZWN0b3J5KERXT1JE
IHBhdGhJZGVudGlmaWVyKQogCiAgICAgSGFzaE1hcDxEV09SRCwgU3RyaW5nPjo6aXRlcmF0b3Ig
aXQgPSBkaXJlY3Rvcmllcy5maW5kKHBhdGhJZGVudGlmaWVyKTsKICAgICBpZiAoaXQgIT0gZGly
ZWN0b3JpZXMuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgICAgICByZXR1
cm4gaXQtPnZhbHVlOwogCiAgICAgU3RyaW5nIGRpcmVjdG9yeSA9IHN0b3JhZ2VEaXJlY3Rvcnko
cGF0aElkZW50aWZpZXIpOwogICAgIGRpcmVjdG9yaWVzLmFkZChwYXRoSWRlbnRpZmllciwgZGly
ZWN0b3J5KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9SdW5Mb29w
V2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9SdW5Mb29wV2luLmNwcAppbmRl
eCAxNjYzYjY2MTMzYWJjMmNiM2ZkMDA1N2QxOTY3MTIzN2QwZTc5OWRhLi4xN2Q2ODQ1ZTlmZmRj
MzkyOGMwNjdjN2MxNTg4M2FhYjkwZDI5YTY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS93aW4vUnVuTG9vcFdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
d2luL1J1bkxvb3BXaW4uY3BwCkBAIC0xMjYsNyArMTI2LDcgQEAgdm9pZCBSdW5Mb29wOjpUaW1l
ckJhc2U6OnRpbWVyRmlyZWQoUnVuTG9vcCogcnVuTG9vcCwgdWludDY0X3QgSUQpCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBUaW1lckJhc2UqIHRpbWVyID0gaXQtPnNlY29uZDsKKyAg
ICBUaW1lckJhc2UqIHRpbWVyID0gaXQtPnZhbHVlOwogCiAgICAgaWYgKCF0aW1lci0+bV9pc1Jl
cGVhdGluZykgewogICAgICAgICBydW5Mb29wLT5tX2FjdGl2ZVRpbWVycy5yZW1vdmUoaXQpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1dDRGF0YU9iamVjdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vV0NEYXRhT2JqZWN0LmNwcAppbmRleCAwYzAz
Y2UwMGYyMjFhZTBhYzgxYjhlZTcyY2ZlMGQwNTRhMDU2NjU0Li5kZmJkMDA1ZmM0MzZmOGQ3MjE2
YTIxNzQ2Njk5YjdkZjgxYjU4MDQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS93aW4vV0NEYXRhT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4v
V0NEYXRhT2JqZWN0LmNwcApAQCAtMTY5LDcgKzE2OSw3IEBAIEhSRVNVTFQgV0NEYXRhT2JqZWN0
OjpjcmVhdGVJbnN0YW5jZShXQ0RhdGFPYmplY3QqKiByZXN1bHQsIGNvbnN0IERyYWdEYXRhTWFw
JiBkCiAgICAgKnJlc3VsdCA9IG5ldyBXQ0RhdGFPYmplY3Q7CiAKICAgICBmb3IgKERyYWdEYXRh
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGRhdGFNYXAuYmVnaW4oKTsgaXQgIT0gZGF0YU1hcC5l
bmQoKTsgKytpdCkKLSAgICAgICAgc2V0Q2xpcGJvYXJkRGF0YSgqcmVzdWx0LCBpdC0+Zmlyc3Qs
IGl0LT5zZWNvbmQpOworICAgICAgICBzZXRDbGlwYm9hcmREYXRhKCpyZXN1bHQsIGl0LT5rZXks
IGl0LT52YWx1ZSk7CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3dpbmNlL01JTUVUeXBlUmVnaXN0cnlXaW5DRS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS93aW5jZS9NSU1FVHlwZVJlZ2lzdHJ5V2luQ0UuY3BwCmluZGV4IDhh
MGQzZDJiNjE2MmI0NmRiYjdkNjJmMjJjYTAzMjZkYzdmY2VkYzUuLmU5NmZiMmJhN2Q5OTljZTJk
M2FjYjBkMGY5YzRjMjQ4NzQ3ZmU1ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3dpbmNlL01JTUVUeXBlUmVnaXN0cnlXaW5DRS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vd2luY2UvTUlNRVR5cGVSZWdpc3RyeVdpbkNFLmNwcApAQCAtMTAxLDggKzEwMSw4
IEBAIFN0cmluZyBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRQcmVmZXJyZWRFeHRlbnNpb25Gb3JNSU1F
VHlwZShjb25zdCBTdHJpbmcmIHR5cGUpCiAgICAgaW5pdE1JTUVUeXBlRW50ZW5zaW9uTWFwKCk7
CiAKICAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+OjppdGVyYXRvciBpID0gbWltZXR5
cGVNYXAuYmVnaW4oKTsgaSAhPSBtaW1ldHlwZU1hcC5lbmQoKTsgKytpKSB7Ci0gICAgICAgIGlm
IChlcXVhbElnbm9yaW5nQ2FzZShpLT5zZWNvbmQsIHR5cGUpKQotICAgICAgICAgICAgcmV0dXJu
IGktPmZpcnN0OworICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoaS0+dmFsdWUsIHR5cGUp
KQorICAgICAgICAgICAgcmV0dXJuIGktPmtleTsKICAgICB9CiAKICAgICByZXR1cm4gU3RyaW5n
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC9Db250ZXh0TWVudVd4
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L0NvbnRleHRNZW51V3guY3BwCmluZGV4
IGY3MjI3NjlmYWEwM2FkY2UyNGRhM2MwZWE3MzU5MzNhODYyNDcxNjQuLjgwMTkyZjM4Y2QxZDMx
YTAyMGQ4MTI1MWQyNDQ2NWQzMjBkY2Y3MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3d4L0NvbnRleHRNZW51V3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3d4L0NvbnRleHRNZW51V3guY3BwCkBAIC02Niw4ICs2Niw4IEBAIHZvaWQgQ29udGV4dE1lbnU6
OmFwcGVuZEl0ZW0oQ29udGV4dE1lbnVJdGVtJiBpdGVtKQogCiAgICAgSXRlbUFjdGlvbk1hcDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gc19pdGVtQWN0aW9ucy5lbmQoKTsKICAgICBmb3IgKEl0ZW1B
Y3Rpb25NYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gc19pdGVtQWN0aW9ucy5iZWdpbigpOyAgaXQg
IT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kID09IGl0ZW1EZXNjcmlwdGlv
bi5hY3Rpb24pCi0gICAgICAgICAgICBpZFd4ID0gaXQtPmZpcnN0OworICAgICAgICBpZiAoaXQt
PnZhbHVlID09IGl0ZW1EZXNjcmlwdGlvbi5hY3Rpb24pCisgICAgICAgICAgICBpZFd4ID0gaXQt
PmtleTsKICAgICB9CiAKICAgICBpZiAoaXRlbURlc2NyaXB0aW9uLnN1Yk1lbnUpIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAKaW5kZXggNmU4MTRhZWI1ZWY5ZDYz
ZTA2MjBmYWI4MmI2YjJkNzM2NjZmMzVjNS4uYWY5M2NiOGNjMGJiN2EyZmRkYWNjZjgzODg1MjVi
MmFkMDI1NTlmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRh
YmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAK
QEAgLTE2Miw3ICsxNjIsNyBAQCBib29sIFBsdWdpbkRhdGFiYXNlOjpyZWZyZXNoKCkKICAgICAg
ICAgTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBtYXBfaXQgPSAoKml0KS0+
bWltZVRvRGVzY3JpcHRpb25zKCkuYmVnaW4oKTsKICAgICAgICAgTUlNRVRvRGVzY3JpcHRpb25z
TWFwOjpjb25zdF9pdGVyYXRvciBtYXBfZW5kID0gKCppdCktPm1pbWVUb0Rlc2NyaXB0aW9ucygp
LmVuZCgpOwogICAgICAgICBmb3IgKDsgbWFwX2l0ICE9IG1hcF9lbmQ7ICsrbWFwX2l0KQotICAg
ICAgICAgICAgbV9yZWdpc3RlcmVkTUlNRVR5cGVzLmFkZChtYXBfaXQtPmZpcnN0KTsKKyAgICAg
ICAgICAgIG1fcmVnaXN0ZXJlZE1JTUVUeXBlcy5hZGQobWFwX2l0LT5rZXkpOwogICAgIH0KIAog
ICAgIHJldHVybiB0cnVlOwpAQCAtMjQzLDkgKzI0Myw5IEBAIFN0cmluZyBQbHVnaW5EYXRhYmFz
ZTo6TUlNRVR5cGVGb3JFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBleHRlbnNpb24pIGNvbnN0CiAg
ICAgICAgIE1JTUVUb0V4dGVuc2lvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIG1pbWVfZW5kID0gKCpp
dCktPm1pbWVUb0V4dGVuc2lvbnMoKS5lbmQoKTsKIAogICAgICAgICBmb3IgKE1JTUVUb0V4dGVu
c2lvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIG1pbWVfaXQgPSAoKml0KS0+bWltZVRvRXh0ZW5zaW9u
cygpLmJlZ2luKCk7IG1pbWVfaXQgIT0gbWltZV9lbmQ7ICsrbWltZV9pdCkgewotICAgICAgICAg
ICAgbWltZVR5cGUgPSBtaW1lX2l0LT5maXJzdDsKKyAgICAgICAgICAgIG1pbWVUeXBlID0gbWlt
ZV9pdC0+a2V5OwogICAgICAgICAgICAgUGx1Z2luUGFja2FnZSogcHJlZmVycmVkUGx1Z2luID0g
bV9wcmVmZXJyZWRQbHVnaW5zLmdldChtaW1lVHlwZSkuZ2V0KCk7Ci0gICAgICAgICAgICBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgZXh0ZW5zaW9ucyA9IG1pbWVfaXQtPnNlY29uZDsKKyAgICAgICAg
ICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBleHRlbnNpb25zID0gbWltZV9pdC0+dmFsdWU7CiAg
ICAgICAgICAgICBib29sIGZvdW5kTWFwcGluZyA9IGZhbHNlOwogICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGV4dGVuc2lvbnMuc2l6ZSgpOyBpKyspIHsKICAgICAgICAgICAg
ICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZXh0ZW5zaW9uc1tpXSwgZXh0ZW5zaW9uKSkgewpA
QCAtMzM1LDggKzMzNSw4IEBAIHZvaWQgUGx1Z2luRGF0YWJhc2U6OnJlbW92ZShQbHVnaW5QYWNr
YWdlKiBwYWNrYWdlKQogICAgIE1JTUVUb0V4dGVuc2lvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gcGFja2FnZS0+bWltZVRvRXh0ZW5zaW9ucygpLmJlZ2luKCk7CiAgICAgTUlNRVRvRXh0ZW5z
aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcGFja2FnZS0+bWltZVRvRXh0ZW5zaW9ucygp
LmVuZCgpOwogICAgIGZvciAoIDsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFBsdWdpblBh
Y2thZ2VCeU5hbWVNYXA6Oml0ZXJhdG9yIHBhY2thZ2VJbk1hcCA9IG1fcHJlZmVycmVkUGx1Z2lu
cy5maW5kKGl0LT5maXJzdCk7Ci0gICAgICAgIGlmIChwYWNrYWdlSW5NYXAgIT0gbV9wcmVmZXJy
ZWRQbHVnaW5zLmVuZCgpICYmIHBhY2thZ2VJbk1hcC0+c2Vjb25kID09IHBhY2thZ2UpCisgICAg
ICAgIFBsdWdpblBhY2thZ2VCeU5hbWVNYXA6Oml0ZXJhdG9yIHBhY2thZ2VJbk1hcCA9IG1fcHJl
ZmVycmVkUGx1Z2lucy5maW5kKGl0LT5rZXkpOworICAgICAgICBpZiAocGFja2FnZUluTWFwICE9
IG1fcHJlZmVycmVkUGx1Z2lucy5lbmQoKSAmJiBwYWNrYWdlSW5NYXAtPnZhbHVlID09IHBhY2th
Z2UpCiAgICAgICAgICAgICBtX3ByZWZlcnJlZFBsdWdpbnMucmVtb3ZlKHBhY2thZ2VJbk1hcCk7
CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbk1haW5U
aHJlYWRTY2hlZHVsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5NYWluVGhy
ZWFkU2NoZWR1bGVyLmNwcAppbmRleCA3NTI4Njc2YjEyYWE4YmRhOGYzM2IzMmVmNDBjYzg3NjU3
NjZkMzFhLi4zOWFlNzk0ZTJmYjA5NzIxOWE1MjIzZWJmYmVlZGY2OWI2ZTI4NjJjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luTWFpblRocmVhZFNjaGVkdWxlci5j
cHAKQEAgLTQ5LDcgKzQ5LDcgQEAgdm9pZCBQbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyOjpzY2hl
ZHVsZUNhbGwoTlBQIG5wcCwgTWFpblRocmVhZEZ1bmN0aW9uIGZ1bmN0aW8KICAgICBpZiAoaXQg
PT0gbV9jYWxsUXVldWVNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGl0LT5zZWNv
bmQuYXBwZW5kKENhbGwoZnVuY3Rpb24sIHVzZXJEYXRhKSk7CisgICAgaXQtPnZhbHVlLmFwcGVu
ZChDYWxsKGZ1bmN0aW9uLCB1c2VyRGF0YSkpOwogCiAgICAgaWYgKCFtX2NhbGxQZW5kaW5nKSB7
CiAgICAgICAgIGNhbGxPbk1haW5UaHJlYWQobWFpblRocmVhZENhbGxiYWNrLCB0aGlzKTsKQEAg
LTk3LDcgKzk3LDcgQEAgdm9pZCBQbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyOjpkaXNwYXRjaENh
bGxzKCkKICAgICAgICAgLy8gRW1wdHkgYWxsIHRoZSBxdWV1ZXMgaW4gdGhlIG9yaWdpbmFsIG1h
cAogICAgICAgICBDYWxsUXVldWVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fY2FsbFF1ZXVlTWFwLmVu
ZCgpOwogICAgICAgICBmb3IgKENhbGxRdWV1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtX2NhbGxRdWV1
ZU1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBpdC0+c2Vjb25kLmNs
ZWFyKCk7CisgICAgICAgICAgICBpdC0+dmFsdWUuY2xlYXIoKTsKICAgICB9CiAKICAgICBtX2Nh
bGxQZW5kaW5nID0gZmFsc2U7CkBAIC0xMDUsNyArMTA1LDcgQEAgdm9pZCBQbHVnaW5NYWluVGhy
ZWFkU2NoZWR1bGVyOjpkaXNwYXRjaENhbGxzKCkKIAogICAgIENhbGxRdWV1ZU1hcDo6aXRlcmF0
b3IgZW5kID0gY29weS5lbmQoKTsKICAgICBmb3IgKENhbGxRdWV1ZU1hcDo6aXRlcmF0b3IgaXQg
PSBjb3B5LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgZGlzcGF0Y2hDYWxsc0Zv
clBsdWdpbihpdC0+Zmlyc3QsIGl0LT5zZWNvbmQpOworICAgICAgICBkaXNwYXRjaENhbGxzRm9y
UGx1Z2luKGl0LT5rZXksIGl0LT52YWx1ZSk7CiB9CiAKIHZvaWQgUGx1Z2luTWFpblRocmVhZFNj
aGVkdWxlcjo6bWFpblRocmVhZENhbGxiYWNrKHZvaWQqIGNvbnRleHQpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblN0cmVhbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bHVnaW5zL1BsdWdpblN0cmVhbS5jcHAKaW5kZXggMDAyMzgwZjVmOTUzZjliZWUyYzU2NWU5Y2E1
YzEzMmFkNGMwYWY0YS4uZmRiNzg2MDM1YjBkMTY1NDgyMWZjYjQ2MGFkNGUyZDNhNzFhNWEzNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5TdHJlYW0uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luU3RyZWFtLmNwcApAQCAtMTQ3LDkgKzE0Nyw5
IEBAIHZvaWQgUGx1Z2luU3RyZWFtOjpzdGFydFN0cmVhbSgpCiAKICAgICAgICAgSFRUUEhlYWRl
ck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9yZXNvdXJjZVJlc3BvbnNlLmh0dHBIZWFkZXJG
aWVsZHMoKS5lbmQoKTsKICAgICAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fcmVzb3VyY2VSZXNwb25zZS5odHRwSGVhZGVyRmllbGRzKCkuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+Zmly
c3QpOworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPmtleSk7CiAgICAgICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChzZXBhcmF0b3IpOwotICAgICAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQoaXQtPnNlY29uZCk7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZChpdC0+dmFsdWUpOwogICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7
CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ibGFja2Jl
cnJ5L1BsdWdpbkRhdGFCbGFja0JlcnJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvYmxh
Y2tiZXJyeS9QbHVnaW5EYXRhQmxhY2tCZXJyeS5jcHAKaW5kZXggZDkyMGQxZmJkNWExMTI0NjAz
YThjZDk4ZmExMzQzNTZlNzMwNmI1OS4uNDc0NjYxNmRlMzM1ZmE4M2NlYzk2ZDkzMGUyMGQ4YzI4
ZTk0YzNiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ibGFja2JlcnJ5L1Bs
dWdpbkRhdGFCbGFja0JlcnJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2JsYWNr
YmVycnkvUGx1Z2luRGF0YUJsYWNrQmVycnkuY3BwCkBAIC00MSw4ICs0MSw4IEBAIHZvaWQgUGx1
Z2luRGF0YTo6aW5pdFBsdWdpbnMoY29uc3QgUGFnZSopCiAgICAgICAgIE1JTUVUb0Rlc2NyaXB0
aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWltZVRvRGVzY3JpcHRpb25zLmVuZCgpOwog
ICAgICAgICBmb3IgKE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
aW1lVG9EZXNjcmlwdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAg
ICBNaW1lQ2xhc3NJbmZvIG1pbWU7Ci0gICAgICAgICAgICBtaW1lLnR5cGUgPSBpdC0+Zmlyc3Q7
Ci0gICAgICAgICAgICBtaW1lLmRlc2MgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgbWltZS50
eXBlID0gaXQtPmtleTsKKyAgICAgICAgICAgIG1pbWUuZGVzYyA9IGl0LT52YWx1ZTsKICAgICAg
ICAgICAgIG1pbWUuZXh0ZW5zaW9ucyA9IHBhY2thZ2UtPm1pbWVUb0V4dGVuc2lvbnMoKS5nZXQo
bWltZS50eXBlKTsKICAgICAgICAgICAgIGluZm8ubWltZXMuYXBwZW5kKG1pbWUpOwogICAgICAg
ICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9QbHVnaW5EYXRhRWZs
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1BsdWdpbkRhdGFFZmwuY3BwCmluZGV4
IGMyMWQ1MWIxOWQ3YjI0YjJjMTU5YzJkZGIzN2JmN2ZlNWRkOGQ5NGMuLjQ3NWY5ZmU1ODMzYmFj
NDU3NjVkOTNhNWZiNDZhMjZiNzYxOTNkZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
dWdpbnMvZWZsL1BsdWdpbkRhdGFFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMv
ZWZsL1BsdWdpbkRhdGFFZmwuY3BwCkBAIC00Nyw4ICs0Nyw4IEBAIHZvaWQgUGx1Z2luRGF0YTo6
aW5pdFBsdWdpbnMoY29uc3QgUGFnZSopCiAgICAgICAgIGZvciAoTUlNRVRvRGVzY3JpcHRpb25z
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIE1pbWVDbGFzc0luZm8gbWltZTsKIAotICAgICAg
ICAgICAgbWltZS50eXBlID0gaXQtPmZpcnN0OwotICAgICAgICAgICAgbWltZS5kZXNjID0gaXQt
PnNlY29uZDsKKyAgICAgICAgICAgIG1pbWUudHlwZSA9IGl0LT5rZXk7CisgICAgICAgICAgICBt
aW1lLmRlc2MgPSBpdC0+dmFsdWU7CiAgICAgICAgICAgICBtaW1lLmV4dGVuc2lvbnMgPSBwYWNr
YWdlLT5taW1lVG9FeHRlbnNpb25zKCkuZ2V0KG1pbWUudHlwZSk7CiAKICAgICAgICAgICAgIGlu
Zm8ubWltZXMuYXBwZW5kKG1pbWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lu
cy93eC9QbHVnaW5EYXRhV3guY3BwIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy93eC9QbHVnaW5E
YXRhV3guY3BwCmluZGV4IDBlYjg5MGZlZjA1YTExNWVhY2U0MjYzNzY4MGEzZDZhMTJmNTc3Mjku
LjI3OTUyYzRhZThiZmE0OWU5OGIxMWFlOTk1OWZjNzU0ZTRkYjIzYmUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsdWdpbnMvd3gvUGx1Z2luRGF0YVd4LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbHVnaW5zL3d4L1BsdWdpbkRhdGFXeC5jcHAKQEAgLTUxLDggKzUxLDggQEAgdm9pZCBQ
bHVnaW5EYXRhOjppbml0UGx1Z2lucyhjb25zdCBQYWdlKikKICAgICAgICAgZm9yIChNSU1FVG9E
ZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWltZVRvRGVzY3JpcHRpb25zLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgTWltZUNsYXNzSW5mbyBtaW1l
OwogCi0gICAgICAgICAgICBtaW1lLnR5cGUgPSBpdC0+Zmlyc3Q7Ci0gICAgICAgICAgICBtaW1l
LmRlc2MgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgbWltZS50eXBlID0gaXQtPmtleTsKKyAg
ICAgICAgICAgIG1pbWUuZGVzYyA9IGl0LT52YWx1ZTsKICAgICAgICAgICAgIG1pbWUuZXh0ZW5z
aW9ucyA9IHBhY2thZ2UtPm1pbWVUb0V4dGVuc2lvbnMoKS5nZXQobWltZS50eXBlKTsKIAogICAg
ICAgICAgICAgaW5mby5taW1lcy5hcHBlbmQobWltZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSW5saW5lRmxvd0JveC5jcHAKaW5kZXggMjA4MWM2ODJkZWQ1ZTdmNTRlOWI2M2NiZmEzYjY4
YTJjZGI4MjBlOC4uZWZiMGU0ZmU0YjBiYjlhNmVlYzBjYzU5N2U4Zjk2NmI1NjQ0NzQ0YSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcApAQCAtNDQ5LDcgKzQ0
OSw3IEBAIGJvb2wgSW5saW5lRmxvd0JveDo6cmVxdWlyZXNJZGVvZ3JhcGhpY0Jhc2VsaW5lKGNv
bnN0IEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvCiAgICAgICAgICAgICBjb25zdCBWZWN0b3I8
Y29uc3QgU2ltcGxlRm9udERhdGEqPiogdXNlZEZvbnRzID0gMDsKICAgICAgICAgICAgIGlmIChj
dXJyLT5pc0lubGluZVRleHRCb3goKSkgewogICAgICAgICAgICAgICAgIEdseXBoT3ZlcmZsb3dB
bmRGYWxsYmFja0ZvbnRzTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHRleHRCb3hEYXRhTWFwLmZp
bmQodG9JbmxpbmVUZXh0Qm94KGN1cnIpKTsKLSAgICAgICAgICAgICAgICB1c2VkRm9udHMgPSBp
dCA9PSB0ZXh0Qm94RGF0YU1hcC5lbmQoKSA/IDAgOiAmaXQtPnNlY29uZC5maXJzdDsKKyAgICAg
ICAgICAgICAgICB1c2VkRm9udHMgPSBpdCA9PSB0ZXh0Qm94RGF0YU1hcC5lbmQoKSA/IDAgOiAm
aXQtPnZhbHVlLmZpcnN0OwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAodXNlZEZv
bnRzKSB7CkBAIC04MTIsNyArODEyLDcgQEAgaW5saW5lIHZvaWQgSW5saW5lRmxvd0JveDo6YWRk
VGV4dEJveFZpc3VhbE92ZXJmbG93KElubGluZVRleHRCb3gqIHRleHRCb3gsIEdseXAKICAgICBS
ZW5kZXJTdHlsZSogc3R5bGUgPSB0ZXh0Qm94LT5yZW5kZXJlcigpLT5zdHlsZShpc0ZpcnN0TGlu
ZVN0eWxlKCkpOwogICAgIAogICAgIEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFwOjpp
dGVyYXRvciBpdCA9IHRleHRCb3hEYXRhTWFwLmZpbmQodGV4dEJveCk7Ci0gICAgR2x5cGhPdmVy
ZmxvdyogZ2x5cGhPdmVyZmxvdyA9IGl0ID09IHRleHRCb3hEYXRhTWFwLmVuZCgpID8gMCA6ICZp
dC0+c2Vjb25kLnNlY29uZDsKKyAgICBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93ID0gaXQg
PT0gdGV4dEJveERhdGFNYXAuZW5kKCkgPyAwIDogJml0LT52YWx1ZS5zZWNvbmQ7CiAgICAgYm9v
bCBpc0ZsaXBwZWRMaW5lID0gc3R5bGUtPmlzRmxpcHBlZExpbmVzV3JpdGluZ01vZGUoKTsKIAog
ICAgIGludCB0b3BHbHlwaEVkZ2UgPSBnbHlwaE92ZXJmbG93ID8gKGlzRmxpcHBlZExpbmUgPyBn
bHlwaE92ZXJmbG93LT5ib3R0b20gOiBnbHlwaE92ZXJmbG93LT50b3ApIDogMDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCmluZGV4IDQzNzE2Yjk5MmZkMDI2NTE2MWMx
ZjM0M2UxMDcyYzEwNTZkYzE1ODkuLmE4NzFiMmQ0ZWYxNDcxZDdkNTZjNzc3ODQyYjU0YzM3YWNi
OGY2ZDAgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcApAQCAtNDI2
Miw3ICs0MjYyLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6Y2xlYXJGbG9hdHMoQmxvY2tMYXlvdXRQ
YXNzIGxheW91dFBhc3MpCiAKICAgICAgICAgUmVuZGVyZXJUb0Zsb2F0SW5mb01hcDo6aXRlcmF0
b3IgZW5kID0gZmxvYXRNYXAuZW5kKCk7CiAgICAgICAgIGZvciAoUmVuZGVyZXJUb0Zsb2F0SW5m
b01hcDo6aXRlcmF0b3IgaXQgPSBmbG9hdE1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
LSAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCA9ICgqaXQpLnNlY29u
ZDsKKyAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCA9ICgqaXQpLnZh
bHVlOwogICAgICAgICAgICAgaWYgKCFmbG9hdGluZ09iamVjdC0+aXNEZXNjZW5kYW50KCkpIHsK
ICAgICAgICAgICAgICAgICBjaGFuZ2VMb2dpY2FsVG9wID0gMDsKICAgICAgICAgICAgICAgICBj
aGFuZ2VMb2dpY2FsQm90dG9tID0gbWF4KGNoYW5nZUxvZ2ljYWxCb3R0b20sIGxvZ2ljYWxCb3R0
b21Gb3JGbG9hdChmbG9hdGluZ09iamVjdCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAppbmRleCA5ZGQyMTgxMjUwMjVmMjkzYTg2
YjU2NTk3YzhiNzZmMjE4NGNkNWYyLi5mZTdiZWZkMDBjM2Y5ODM2Yjg4ZGUyOGNiYzgyY2FjNmRm
MjE0NjNmIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tM
aW5lTGF5b3V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tM
aW5lTGF5b3V0LmNwcApAQCAtNjYzLDE0ICs2NjMsMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIHNl
dExvZ2ljYWxXaWR0aEZvclRleHRSdW4oUm9vdElubGluZUJveCogbGluZUJveCwgQmlkaVJ1biog
cnUKICAgICBpZiAoIWZhbGxiYWNrRm9udHMuaXNFbXB0eSgpKSB7CiAgICAgICAgIEFTU0VSVChy
dW4tPm1fYm94LT5pc1RleHQoKSk7CiAgICAgICAgIEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0Zv
bnRzTWFwOjppdGVyYXRvciBpdCA9IHRleHRCb3hEYXRhTWFwLmFkZCh0b0lubGluZVRleHRCb3go
cnVuLT5tX2JveCksIG1ha2VfcGFpcihWZWN0b3I8Y29uc3QgU2ltcGxlRm9udERhdGEqPigpLCBH
bHlwaE92ZXJmbG93KCkpKS5pdGVyYXRvcjsKLSAgICAgICAgQVNTRVJUKGl0LT5zZWNvbmQuZmly
c3QuaXNFbXB0eSgpKTsKLSAgICAgICAgY29weVRvVmVjdG9yKGZhbGxiYWNrRm9udHMsIGl0LT5z
ZWNvbmQuZmlyc3QpOworICAgICAgICBBU1NFUlQoaXQtPnZhbHVlLmZpcnN0LmlzRW1wdHkoKSk7
CisgICAgICAgIGNvcHlUb1ZlY3RvcihmYWxsYmFja0ZvbnRzLCBpdC0+dmFsdWUuZmlyc3QpOwog
ICAgICAgICBydW4tPm1fYm94LT5wYXJlbnQoKS0+Y2xlYXJEZXNjZW5kYW50c0hhdmVTYW1lTGlu
ZUhlaWdodEFuZEJhc2VsaW5lKCk7CiAgICAgfQogICAgIGlmICgoZ2x5cGhPdmVyZmxvdy50b3Ag
fHwgZ2x5cGhPdmVyZmxvdy5ib3R0b20gfHwgZ2x5cGhPdmVyZmxvdy5sZWZ0IHx8IGdseXBoT3Zl
cmZsb3cucmlnaHQpKSB7CiAgICAgICAgIEFTU0VSVChydW4tPm1fYm94LT5pc1RleHQoKSk7CiAg
ICAgICAgIEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFwOjppdGVyYXRvciBpdCA9IHRl
eHRCb3hEYXRhTWFwLmFkZCh0b0lubGluZVRleHRCb3gocnVuLT5tX2JveCksIG1ha2VfcGFpcihW
ZWN0b3I8Y29uc3QgU2ltcGxlRm9udERhdGEqPigpLCBHbHlwaE92ZXJmbG93KCkpKS5pdGVyYXRv
cjsKLSAgICAgICAgaXQtPnNlY29uZC5zZWNvbmQgPSBnbHlwaE92ZXJmbG93OworICAgICAgICBp
dC0+dmFsdWUuc2Vjb25kID0gZ2x5cGhPdmVyZmxvdzsKICAgICAgICAgcnVuLT5tX2JveC0+Y2xl
YXJLbm93blRvSGF2ZU5vT3ZlcmZsb3coKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCb3guY3BwCmluZGV4IGE3NmI0YzQ2YTIxNjA1YWQzY2JhNDY5ZjZmYzMyNGY4NWE1
Nzg1NzAuLmVkNTFiYzNjZDBmMGM4YWIwMTA1ZmVmZmU1MDEzODEzNzE1MmE3NmMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCkBAIC03ODUsNyArNzg1LDcgQEAgSW50U2l6
ZSBSZW5kZXJCb3g6OmNhY2hlZFNpemVGb3JPdmVyZmxvd0NsaXAoKSBjb25zdAogICAgIGlmIChp
dCA9PSBjYWNoZWRTaXplRm9yT3ZlcmZsb3dDbGlwTWFwKCkuZW5kKCkpCiAgICAgICAgIHJldHVy
biBMYXlvdXRTaXplKCk7CiAKLSAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICByZXR1cm4gaXQt
PnZhbHVlOwogfQogCiB2b2lkIFJlbmRlckJveDo6dXBkYXRlQ2FjaGVkU2l6ZUZvck92ZXJmbG93
Q2xpcCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9k
ZWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2Jq
ZWN0LmNwcAppbmRleCA2ZjQwMGQ5NGNjNTVhM2FlZTRjMzg4YzNiYjMxNmMzZTc5NjE0NWIwLi40
YjBlZTUwY2U3M2E4NzhmNTQwYmU5NmI5NmVkMmJhYzViODhjZjMxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKQEAgLTEzMiw3ICsx
MzIsNyBAQCB2b2lkIEltYWdlUXVhbGl0eUNvbnRyb2xsZXI6OmhpZ2hRdWFsaXR5UmVwYWludFRp
bWVyRmlyZWQoVGltZXI8SW1hZ2VRdWFsaXR5Q29udAogICAgIGlmIChtX2FuaW1hdGVkUmVzaXpl
SXNBY3RpdmUpIHsKICAgICAgICAgbV9hbmltYXRlZFJlc2l6ZUlzQWN0aXZlID0gZmFsc2U7CiAg
ICAgICAgIGZvciAoT2JqZWN0TGF5ZXJTaXplTWFwOjppdGVyYXRvciBpdCA9IG1fb2JqZWN0TGF5
ZXJTaXplTWFwLmJlZ2luKCk7IGl0ICE9IG1fb2JqZWN0TGF5ZXJTaXplTWFwLmVuZCgpOyArK2l0
KQotICAgICAgICAgICAgaXQtPmZpcnN0LT5yZXBhaW50KCk7CisgICAgICAgICAgICBpdC0+a2V5
LT5yZXBhaW50KCk7CiAgICAgfQogfQogCkBAIC0xNTcsMTQgKzE1NywxNCBAQCBib29sIEltYWdl
UXVhbGl0eUNvbnRyb2xsZXI6OnNob3VsZFBhaW50QXRMb3dRdWFsaXR5KEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgUgogCiAgICAgLy8gTG9vayBvdXJzZWx2ZXMgdXAgaW4gdGhlIGhhc2h0YWJs
ZXMuCiAgICAgT2JqZWN0TGF5ZXJTaXplTWFwOjppdGVyYXRvciBpID0gbV9vYmplY3RMYXllclNp
emVNYXAuZmluZChvYmplY3QpOwotICAgIExheWVyU2l6ZU1hcCogaW5uZXJNYXAgPSBpICE9IG1f
b2JqZWN0TGF5ZXJTaXplTWFwLmVuZCgpID8gJmktPnNlY29uZCA6IDA7CisgICAgTGF5ZXJTaXpl
TWFwKiBpbm5lck1hcCA9IGkgIT0gbV9vYmplY3RMYXllclNpemVNYXAuZW5kKCkgPyAmaS0+dmFs
dWUgOiAwOwogICAgIExheW91dFNpemUgb2xkU2l6ZTsKICAgICBib29sIGlzRmlyc3RSZXNpemUg
PSB0cnVlOwogICAgIGlmIChpbm5lck1hcCkgewogICAgICAgICBMYXllclNpemVNYXA6Oml0ZXJh
dG9yIGogPSBpbm5lck1hcC0+ZmluZChsYXllcik7CiAgICAgICAgIGlmIChqICE9IGlubmVyTWFw
LT5lbmQoKSkgewogICAgICAgICAgICAgaXNGaXJzdFJlc2l6ZSA9IGZhbHNlOwotICAgICAgICAg
ICAgb2xkU2l6ZSA9IGotPnNlY29uZDsKKyAgICAgICAgICAgIG9sZFNpemUgPSBqLT52YWx1ZTsK
ICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckNvdW50ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50
ZXIuY3BwCmluZGV4IDA4MDdlYTlkZDk3ODE2YTNmNjdiY2EwZmM1ODg4YjU4Y2Q3ZjFkNGUuLmRj
NDM4YmUyOGEzYmRjYTViM2VlMGYwMTI3ZWI0NDliZjFhMmJiNzAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb3VudGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQ291bnRlci5jcHAKQEAgLTU2MywxMSArNTYzLDExIEBAIHZvaWQg
UmVuZGVyQ291bnRlcjo6ZGVzdHJveUNvdW50ZXJOb2RlcyhSZW5kZXJPYmplY3QqIG93bmVyKQog
ICAgIENvdW50ZXJNYXBzOjppdGVyYXRvciBtYXBzSXRlcmF0b3IgPSBtYXBzLmZpbmQob3duZXIp
OwogICAgIGlmIChtYXBzSXRlcmF0b3IgPT0gbWFwcy5lbmQoKSkKICAgICAgICAgcmV0dXJuOwot
ICAgIENvdW50ZXJNYXAqIG1hcCA9IG1hcHNJdGVyYXRvci0+c2Vjb25kOworICAgIENvdW50ZXJN
YXAqIG1hcCA9IG1hcHNJdGVyYXRvci0+dmFsdWU7CiAgICAgQ291bnRlck1hcDo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKICAgICBmb3IgKENvdW50ZXJNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgQXRvbWlj
U3RyaW5nIGlkZW50aWZpZXIoaXQtPmZpcnN0LmdldCgpKTsKLSAgICAgICAgZGVzdHJveUNvdW50
ZXJOb2RlV2l0aG91dE1hcFJlbW92YWwoaWRlbnRpZmllciwgaXQtPnNlY29uZC5nZXQoKSk7Cisg
ICAgICAgIEF0b21pY1N0cmluZyBpZGVudGlmaWVyKGl0LT5rZXkuZ2V0KCkpOworICAgICAgICBk
ZXN0cm95Q291bnRlck5vZGVXaXRob3V0TWFwUmVtb3ZhbChpZGVudGlmaWVyLCBpdC0+dmFsdWUu
Z2V0KCkpOwogICAgIH0KICAgICBtYXBzLnJlbW92ZShtYXBzSXRlcmF0b3IpOwogICAgIGRlbGV0
ZSBtYXA7CkBAIC01ODIsNyArNTgyLDcgQEAgdm9pZCBSZW5kZXJDb3VudGVyOjpkZXN0cm95Q291
bnRlck5vZGUoUmVuZGVyT2JqZWN0KiBvd25lciwgY29uc3QgQXRvbWljU3RyaW5nJgogICAgIENv
dW50ZXJNYXA6Oml0ZXJhdG9yIG1hcEl0ZXJhdG9yID0gbWFwLT5maW5kKGlkZW50aWZpZXIuaW1w
bCgpKTsKICAgICBpZiAobWFwSXRlcmF0b3IgPT0gbWFwLT5lbmQoKSkKICAgICAgICAgcmV0dXJu
OwotICAgIGRlc3Ryb3lDb3VudGVyTm9kZVdpdGhvdXRNYXBSZW1vdmFsKGlkZW50aWZpZXIsIG1h
cEl0ZXJhdG9yLT5zZWNvbmQuZ2V0KCkpOworICAgIGRlc3Ryb3lDb3VudGVyTm9kZVdpdGhvdXRN
YXBSZW1vdmFsKGlkZW50aWZpZXIsIG1hcEl0ZXJhdG9yLT52YWx1ZS5nZXQoKSk7CiAgICAgbWFw
LT5yZW1vdmUobWFwSXRlcmF0b3IpOwogICAgIC8vIFdlIGRvIG5vdCBkZWxldGUgIm1hcCIgaGVy
ZSBldmVuIGlmIGVtcHR5IGJlY2F1c2Ugd2UgZXhwZWN0IHRvIHJldXNlCiAgICAgLy8gaXQgc29v
bi4gSW4gb3JkZXIgZm9yIGEgcmVuZGVyZXIgdG8gbG9zZSBhbGwgaXRzIGNvdW50ZXJzIHBlcm1h
bmVudGx5LApAQCAtNjE5LDIyICs2MTksMjIgQEAgc3RhdGljIHZvaWQgdXBkYXRlQ291bnRlcnMo
UmVuZGVyT2JqZWN0KiByZW5kZXJlcikKICAgICBDb3VudGVyRGlyZWN0aXZlTWFwOjpjb25zdF9p
dGVyYXRvciBlbmQgPSBkaXJlY3RpdmVNYXAtPmVuZCgpOwogICAgIGlmICghcmVuZGVyZXItPmhh
c0NvdW50ZXJOb2RlTWFwKCkpIHsKICAgICAgICAgZm9yIChDb3VudGVyRGlyZWN0aXZlTWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IGRpcmVjdGl2ZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KQotICAgICAgICAgICAgbWFrZUNvdW50ZXJOb2RlKHJlbmRlcmVyLCBBdG9taWNTdHJpbmcoaXQt
PmZpcnN0LmdldCgpKSwgZmFsc2UpOworICAgICAgICAgICAgbWFrZUNvdW50ZXJOb2RlKHJlbmRl
cmVyLCBBdG9taWNTdHJpbmcoaXQtPmtleS5nZXQoKSksIGZhbHNlKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICBDb3VudGVyTWFwKiBjb3VudGVyTWFwID0gY291bnRlck1hcHMoKS5nZXQo
cmVuZGVyZXIpOwogICAgIEFTU0VSVChjb3VudGVyTWFwKTsKICAgICBmb3IgKENvdW50ZXJEaXJl
Y3RpdmVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZGlyZWN0aXZlTWFwLT5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKLSAgICAgICAgUmVmUHRyPENvdW50ZXJOb2RlPiBub2RlID0gY291bnRl
ck1hcC0+Z2V0KGl0LT5maXJzdC5nZXQoKSk7CisgICAgICAgIFJlZlB0cjxDb3VudGVyTm9kZT4g
bm9kZSA9IGNvdW50ZXJNYXAtPmdldChpdC0+a2V5LmdldCgpKTsKICAgICAgICAgaWYgKCFub2Rl
KSB7Ci0gICAgICAgICAgICBtYWtlQ291bnRlck5vZGUocmVuZGVyZXIsIEF0b21pY1N0cmluZyhp
dC0+Zmlyc3QuZ2V0KCkpLCBmYWxzZSk7CisgICAgICAgICAgICBtYWtlQ291bnRlck5vZGUocmVu
ZGVyZXIsIEF0b21pY1N0cmluZyhpdC0+a2V5LmdldCgpKSwgZmFsc2UpOwogICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgUmVmUHRyPENvdW50ZXJOb2RlPiBuZXdQYXJl
bnQgPSAwOwogICAgICAgICBSZWZQdHI8Q291bnRlck5vZGU+IG5ld1ByZXZpb3VzU2libGluZyA9
IDA7CiAgICAgICAgIAotICAgICAgICBmaW5kUGxhY2VGb3JDb3VudGVyKHJlbmRlcmVyLCBBdG9t
aWNTdHJpbmcoaXQtPmZpcnN0LmdldCgpKSwgbm9kZS0+aGFzUmVzZXRUeXBlKCksIG5ld1BhcmVu
dCwgbmV3UHJldmlvdXNTaWJsaW5nKTsKLSAgICAgICAgaWYgKG5vZGUgIT0gY291bnRlck1hcC0+
Z2V0KGl0LT5maXJzdC5nZXQoKSkpCisgICAgICAgIGZpbmRQbGFjZUZvckNvdW50ZXIocmVuZGVy
ZXIsIEF0b21pY1N0cmluZyhpdC0+a2V5LmdldCgpKSwgbm9kZS0+aGFzUmVzZXRUeXBlKCksIG5l
d1BhcmVudCwgbmV3UHJldmlvdXNTaWJsaW5nKTsKKyAgICAgICAgaWYgKG5vZGUgIT0gY291bnRl
ck1hcC0+Z2V0KGl0LT5rZXkuZ2V0KCkpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IENvdW50ZXJOb2RlKiBwYXJlbnQgPSBub2RlLT5wYXJlbnQoKTsKICAgICAgICAgaWYgKG5ld1Bh
cmVudCA9PSBwYXJlbnQgJiYgbmV3UHJldmlvdXNTaWJsaW5nID09IG5vZGUtPnByZXZpb3VzU2li
bGluZygpKQpAQCAtNjQyLDcgKzY0Miw3IEBAIHN0YXRpYyB2b2lkIHVwZGF0ZUNvdW50ZXJzKFJl
bmRlck9iamVjdCogcmVuZGVyZXIpCiAgICAgICAgIGlmIChwYXJlbnQpCiAgICAgICAgICAgICBw
YXJlbnQtPnJlbW92ZUNoaWxkKG5vZGUuZ2V0KCkpOwogICAgICAgICBpZiAobmV3UGFyZW50KQot
ICAgICAgICAgICAgbmV3UGFyZW50LT5pbnNlcnRBZnRlcihub2RlLmdldCgpLCBuZXdQcmV2aW91
c1NpYmxpbmcuZ2V0KCksIGl0LT5maXJzdC5nZXQoKSk7CisgICAgICAgICAgICBuZXdQYXJlbnQt
Pmluc2VydEFmdGVyKG5vZGUuZ2V0KCksIG5ld1ByZXZpb3VzU2libGluZy5nZXQoKSwgaXQtPmtl
eS5nZXQoKSk7CiAgICAgfQogfQogCkBAIC02NzEsMjEgKzY3MSwyMSBAQCB2b2lkIFJlbmRlckNv
dW50ZXI6OnJlbmRlcmVyU3R5bGVDaGFuZ2VkKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0
IFJlbmRlclN0eQogICAgICAgICAgICAgQ291bnRlckRpcmVjdGl2ZU1hcDo6Y29uc3RfaXRlcmF0
b3IgbmV3TWFwRW5kID0gbmV3Q291bnRlckRpcmVjdGl2ZXMtPmVuZCgpOwogICAgICAgICAgICAg
Q291bnRlckRpcmVjdGl2ZU1hcDo6Y29uc3RfaXRlcmF0b3Igb2xkTWFwRW5kID0gb2xkQ291bnRl
ckRpcmVjdGl2ZXMtPmVuZCgpOwogICAgICAgICAgICAgZm9yIChDb3VudGVyRGlyZWN0aXZlTWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG5ld0NvdW50ZXJEaXJlY3RpdmVzLT5iZWdpbigpOyBpdCAh
PSBuZXdNYXBFbmQ7ICsraXQpIHsKLSAgICAgICAgICAgICAgICBDb3VudGVyRGlyZWN0aXZlTWFw
Ojpjb25zdF9pdGVyYXRvciBvbGRNYXBJdCA9IG9sZENvdW50ZXJEaXJlY3RpdmVzLT5maW5kKGl0
LT5maXJzdCk7CisgICAgICAgICAgICAgICAgQ291bnRlckRpcmVjdGl2ZU1hcDo6Y29uc3RfaXRl
cmF0b3Igb2xkTWFwSXQgPSBvbGRDb3VudGVyRGlyZWN0aXZlcy0+ZmluZChpdC0+a2V5KTsKICAg
ICAgICAgICAgICAgICBpZiAob2xkTWFwSXQgIT0gb2xkTWFwRW5kKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChvbGRNYXBJdC0+c2Vjb25kID09IGl0LT5zZWNvbmQpCisgICAgICAgICAgICAg
ICAgICAgIGlmIChvbGRNYXBJdC0+dmFsdWUgPT0gaXQtPnZhbHVlKQogICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIFJlbmRlckNvdW50ZXI6OmRl
c3Ryb3lDb3VudGVyTm9kZShyZW5kZXJlciwgaXQtPmZpcnN0LmdldCgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgUmVuZGVyQ291bnRlcjo6ZGVzdHJveUNvdW50ZXJOb2RlKHJlbmRlcmVyLCBpdC0+
a2V5LmdldCgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgLy8gV2UgbXVz
dCBjcmVhdGUgdGhpcyBub2RlIGhlcmUsIGJlY2F1c2UgdGhlIGNoYW5nZWQgbm9kZSBtYXkgYmUg
YSBub2RlIHdpdGggbm8gZGlzcGxheSBzdWNoIGFzCiAgICAgICAgICAgICAgICAgLy8gYXMgdGhv
c2UgY3JlYXRlZCBieSB0aGUgaW5jcmVtZW50IG9yIHJlc2V0IGRpcmVjdGl2ZXMgYW5kIHRoZSBy
ZS1sYXlvdXQgdGhhdCB3aWxsIGhhcHBlbiB3aWxsCiAgICAgICAgICAgICAgICAgLy8gbm90IGNh
dGNoIHRoZSBjaGFuZ2UgaWYgdGhlIG5vZGUgaGFkIG5vIGNoaWxkcmVuLgotICAgICAgICAgICAg
ICAgIG1ha2VDb3VudGVyTm9kZShyZW5kZXJlciwgaXQtPmZpcnN0LmdldCgpLCBmYWxzZSk7Cisg
ICAgICAgICAgICAgICAgbWFrZUNvdW50ZXJOb2RlKHJlbmRlcmVyLCBpdC0+a2V5LmdldCgpLCBm
YWxzZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyBEZXN0cm95aW5nIG9sZCBjb3Vu
dGVycyB0aGF0IGRvIG5vdCBleGlzdCBpbiB0aGUgbmV3IGNvdW50ZXJEaXJlY3RpdmUgbWFwLgog
ICAgICAgICAgICAgZm9yIChDb3VudGVyRGlyZWN0aXZlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9
IG9sZENvdW50ZXJEaXJlY3RpdmVzLT5iZWdpbigpOyBpdCAhPW9sZE1hcEVuZDsgKytpdCkgewot
ICAgICAgICAgICAgICAgIGlmICghbmV3Q291bnRlckRpcmVjdGl2ZXMtPmNvbnRhaW5zKGl0LT5m
aXJzdCkpCi0gICAgICAgICAgICAgICAgICAgIFJlbmRlckNvdW50ZXI6OmRlc3Ryb3lDb3VudGVy
Tm9kZShyZW5kZXJlciwgaXQtPmZpcnN0LmdldCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoIW5l
d0NvdW50ZXJEaXJlY3RpdmVzLT5jb250YWlucyhpdC0+a2V5KSkKKyAgICAgICAgICAgICAgICAg
ICAgUmVuZGVyQ291bnRlcjo6ZGVzdHJveUNvdW50ZXJOb2RlKHJlbmRlcmVyLCBpdC0+a2V5Lmdl
dCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChy
ZW5kZXJlci0+aGFzQ291bnRlck5vZGVNYXAoKSkKQEAgLTY5Nyw3ICs2OTcsNyBAQCB2b2lkIFJl
bmRlckNvdW50ZXI6OnJlbmRlcmVyU3R5bGVDaGFuZ2VkKFJlbmRlck9iamVjdCogcmVuZGVyZXIs
IGNvbnN0IFJlbmRlclN0eQogICAgICAgICAgICAgLy8gV2UgbXVzdCBjcmVhdGUgdGhpcyBub2Rl
IGhlcmUsIGJlY2F1c2UgdGhlIGFkZGVkIG5vZGUgbWF5IGJlIGEgbm9kZSB3aXRoIG5vIGRpc3Bs
YXkgc3VjaCBhcwogICAgICAgICAgICAgLy8gYXMgdGhvc2UgY3JlYXRlZCBieSB0aGUgaW5jcmVt
ZW50IG9yIHJlc2V0IGRpcmVjdGl2ZXMgYW5kIHRoZSByZS1sYXlvdXQgdGhhdCB3aWxsIGhhcHBl
biB3aWxsCiAgICAgICAgICAgICAvLyBub3QgY2F0Y2ggdGhlIGNoYW5nZSBpZiB0aGUgbm9kZSBo
YWQgbm8gY2hpbGRyZW4uCi0gICAgICAgICAgICBtYWtlQ291bnRlck5vZGUocmVuZGVyZXIsIGl0
LT5maXJzdC5nZXQoKSwgZmFsc2UpOworICAgICAgICAgICAgbWFrZUNvdW50ZXJOb2RlKHJlbmRl
cmVyLCBpdC0+a2V5LmdldCgpLCBmYWxzZSk7CiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAKaW5kZXggMGY5ZjZkM2Vj
N2M5OTE2ZDk2ZTZhNzZiZjAzODdiMDEwNTNjOGI3NS4uOWUzYjUxYWE1YzdiNDU1NjVlYmQyNzI4
ZDkyMDUzMjM3NmM5NjkxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckZsb3dUaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJG
bG93VGhyZWFkLmNwcApAQCAtNjU1LDcgKzY1NSw3IEBAIHZvaWQgUmVuZGVyRmxvd1RocmVhZDo6
c2V0UmVnaW9uUmFuZ2VGb3JCb3goY29uc3QgUmVuZGVyQm94KiBib3gsIExheW91dFVuaXQgb2Zm
CiAgICAgfQogCiAgICAgLy8gSWYgbm90aGluZyBjaGFuZ2VkLCBqdXN0IGJhaWwuCi0gICAgUmVu
ZGVyUmVnaW9uUmFuZ2UmIHJhbmdlID0gaXQtPnNlY29uZDsKKyAgICBSZW5kZXJSZWdpb25SYW5n
ZSYgcmFuZ2UgPSBpdC0+dmFsdWU7CiAgICAgaWYgKHJhbmdlLnN0YXJ0UmVnaW9uKCkgPT0gc3Rh
cnRSZWdpb24gJiYgcmFuZ2UuZW5kUmVnaW9uKCkgPT0gZW5kUmVnaW9uKQogICAgICAgICByZXR1
cm47CiAKQEAgLTY4NSw3ICs2ODUsNyBAQCB2b2lkIFJlbmRlckZsb3dUaHJlYWQ6OmdldFJlZ2lv
blJhbmdlRm9yQm94KGNvbnN0IFJlbmRlckJveCogYm94LCBSZW5kZXJSZWdpb24qJgogICAgIGlm
IChpdCA9PSBtX3JlZ2lvblJhbmdlTWFwLmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBj
b25zdCBSZW5kZXJSZWdpb25SYW5nZSYgcmFuZ2UgPSBpdC0+c2Vjb25kOworICAgIGNvbnN0IFJl
bmRlclJlZ2lvblJhbmdlJiByYW5nZSA9IGl0LT52YWx1ZTsKICAgICBzdGFydFJlZ2lvbiA9IHJh
bmdlLnN0YXJ0UmVnaW9uKCk7CiAgICAgZW5kUmVnaW9uID0gcmFuZ2UuZW5kUmVnaW9uKCk7CiAg
ICAgQVNTRVJUKG1fcmVnaW9uTGlzdC5jb250YWlucyhzdGFydFJlZ2lvbikgJiYgbV9yZWdpb25M
aXN0LmNvbnRhaW5zKGVuZFJlZ2lvbikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllci5jcHAKaW5kZXggNGIxNzVkODVjMjJhMzA2OTMwNTJmYWQ3Mjg3MzVmMGVmNjhlZGZiZi4u
NjJlMmQ5YzUxZTE0ZDg1Yzk3M2EwMDFhZTE2YmIwNzNlMzNjOGYwZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCkBAIC0yNjM3LDcgKzI2MzcsNyBAQCB2b2lkIFJl
bmRlckxheWVyOjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IExheW91dFJl
Y3QmIGRhbWFnZVJlY3QsCiAgICAgcGFpbnRMYXllcih0aGlzLCBjb250ZXh0LCBkYW1hZ2VSZWN0
LCBwYWludEJlaGF2aW9yLCBwYWludGluZ1Jvb3QsIHJlZ2lvbiwgJm92ZXJsYXBUZXN0UmVxdWVz
dHMsIHBhaW50RmxhZ3MpOwogICAgIE92ZXJsYXBUZXN0UmVxdWVzdE1hcDo6aXRlcmF0b3IgZW5k
ID0gb3ZlcmxhcFRlc3RSZXF1ZXN0cy5lbmQoKTsKICAgICBmb3IgKE92ZXJsYXBUZXN0UmVxdWVz
dE1hcDo6aXRlcmF0b3IgaXQgPSBvdmVybGFwVGVzdFJlcXVlc3RzLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkKLSAgICAgICAgaXQtPmZpcnN0LT5zZXRPdmVybGFwVGVzdFJlc3VsdChmYWxzZSk7
CisgICAgICAgIGl0LT5rZXktPnNldE92ZXJsYXBUZXN0UmVzdWx0KGZhbHNlKTsKIH0KIAogdm9p
ZCBSZW5kZXJMYXllcjo6cGFpbnRPdmVybGF5U2Nyb2xsYmFycyhHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QsIFBhaW50QmVoYXZpb3IgcGFpbnRC
ZWhhdmlvciwgUmVuZGVyT2JqZWN0KiBwYWludGluZ1Jvb3QpCkBAIC0yNzA2LDExICsyNzA2LDEx
IEBAIHN0YXRpYyB2b2lkIHBlcmZvcm1PdmVybGFwVGVzdHMoT3ZlcmxhcFRlc3RSZXF1ZXN0TWFw
JiBvdmVybGFwVGVzdFJlcXVlc3RzLCBjb25zCiAgICAgT3ZlcmxhcFRlc3RSZXF1ZXN0TWFwOjpp
dGVyYXRvciBlbmQgPSBvdmVybGFwVGVzdFJlcXVlc3RzLmVuZCgpOwogICAgIExheW91dFJlY3Qg
Ym91bmRpbmdCb3ggPSBsYXllci0+Ym91bmRpbmdCb3gocm9vdExheWVyKTsKICAgICBmb3IgKE92
ZXJsYXBUZXN0UmVxdWVzdE1hcDo6aXRlcmF0b3IgaXQgPSBvdmVybGFwVGVzdFJlcXVlc3RzLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoIWJvdW5kaW5nQm94LmludGVy
c2VjdHMoaXQtPnNlY29uZCkpCisgICAgICAgIGlmICghYm91bmRpbmdCb3guaW50ZXJzZWN0cyhp
dC0+dmFsdWUpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaXQtPmZpcnN0LT5z
ZXRPdmVybGFwVGVzdFJlc3VsdCh0cnVlKTsKLSAgICAgICAgb3ZlcmxhcHBlZFJlcXVlc3RDbGll
bnRzLmFwcGVuZChpdC0+Zmlyc3QpOworICAgICAgICBpdC0+a2V5LT5zZXRPdmVybGFwVGVzdFJl
c3VsdCh0cnVlKTsKKyAgICAgICAgb3ZlcmxhcHBlZFJlcXVlc3RDbGllbnRzLmFwcGVuZChpdC0+
a2V5KTsKICAgICB9CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvdmVybGFwcGVkUmVxdWVz
dENsaWVudHMuc2l6ZSgpOyArK2kpCiAgICAgICAgIG92ZXJsYXBUZXN0UmVxdWVzdHMucmVtb3Zl
KG92ZXJsYXBwZWRSZXF1ZXN0Q2xpZW50c1tpXSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93VGhyZWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3BwCmluZGV4IGRhYjVkN2IyMWU3YWU5ZjBk
ZDljMDBhNTg3NDAyYWRhMWFjN2ZjMDQuLjM2ZjBhYmJiNGI5ODllMGExMmRiYzA0MWRjMmJhZDM5
MDU4NTg1ZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1l
ZEZsb3dUaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1l
ZEZsb3dUaHJlYWQuY3BwCkBAIC0xMTAsNyArMTEwLDcgQEAgYm9vbCBSZW5kZXJOYW1lZEZsb3dU
aHJlYWQ6OmRlcGVuZHNPbihSZW5kZXJOYW1lZEZsb3dUaHJlYWQqIG90aGVyUmVuZGVyRmxvd1Ro
cmUKICAgICBSZW5kZXJOYW1lZEZsb3dUaHJlYWRDb3VudGVkU2V0Ojpjb25zdF9pdGVyYXRvciBp
dGVyYXRvciA9IG1fbGF5b3V0QmVmb3JlVGhyZWFkc1NldC5iZWdpbigpOwogICAgIFJlbmRlck5h
bWVkRmxvd1RocmVhZENvdW50ZWRTZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fbGF5b3V0QmVm
b3JlVGhyZWFkc1NldC5lbmQoKTsKICAgICBmb3IgKDsgaXRlcmF0b3IgIT0gZW5kOyArK2l0ZXJh
dG9yKSB7Ci0gICAgICAgIGNvbnN0IFJlbmRlck5hbWVkRmxvd1RocmVhZCogYmVmb3JlRmxvd1Ro
cmVhZCA9ICgqaXRlcmF0b3IpLmZpcnN0OworICAgICAgICBjb25zdCBSZW5kZXJOYW1lZEZsb3dU
aHJlYWQqIGJlZm9yZUZsb3dUaHJlYWQgPSAoKml0ZXJhdG9yKS5rZXk7CiAgICAgICAgIGlmIChi
ZWZvcmVGbG93VGhyZWFkLT5kZXBlbmRzT24ob3RoZXJSZW5kZXJGbG93VGhyZWFkKSkKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTIzNiw3ICsyMzYsNyBAQCB2b2lkIFJlbmRl
ck5hbWVkRmxvd1RocmVhZDo6cmVtb3ZlRGVwZW5kZW5jeU9uRmxvd1RocmVhZChSZW5kZXJOYW1l
ZEZsb3dUaHJlYWQqCiB2b2lkIFJlbmRlck5hbWVkRmxvd1RocmVhZDo6cHVzaERlcGVuZGVuY2ll
cyhSZW5kZXJOYW1lZEZsb3dUaHJlYWRMaXN0JiBsaXN0KQogewogICAgIGZvciAoUmVuZGVyTmFt
ZWRGbG93VGhyZWFkQ291bnRlZFNldDo6aXRlcmF0b3IgaXRlciA9IG1fbGF5b3V0QmVmb3JlVGhy
ZWFkc1NldC5iZWdpbigpOyBpdGVyICE9IG1fbGF5b3V0QmVmb3JlVGhyZWFkc1NldC5lbmQoKTsg
KytpdGVyKSB7Ci0gICAgICAgIFJlbmRlck5hbWVkRmxvd1RocmVhZCogZmxvd1RocmVhZCA9ICgq
aXRlcikuZmlyc3Q7CisgICAgICAgIFJlbmRlck5hbWVkRmxvd1RocmVhZCogZmxvd1RocmVhZCA9
ICgqaXRlcikua2V5OwogICAgICAgICBpZiAobGlzdC5jb250YWlucyhmbG93VGhyZWFkKSkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBmbG93VGhyZWFkLT5wdXNoRGVwZW5kZW5jaWVz
KGxpc3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lv
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcAppbmRleCBk
ZTk4ZmY4OTE4ODQ1NDQxODZhNjg3NjQ1NWQ5MzczMmZlZDAxNTJiLi5lNjhlMDJjMWQ2NjMyNTI1
MmY1Y2I0MGFkYjQ0ZjZkMjAyZWU0Mjg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyUmVnaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyUmVnaW9uLmNwcApAQCAtMTAyLDcgKzEwMiw3IEBAIHZvaWQgUmVuZGVyUmVnaW9uOjpzZXRS
ZWdpb25Cb3hlc1JlZ2lvblN0eWxlKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgZm9yIChSZW5k
ZXJCb3hSZWdpb25JbmZvTWFwOjppdGVyYXRvciBpdGVyID0gbV9yZW5kZXJCb3hSZWdpb25JbmZv
LmJlZ2luKCksIGVuZCA9IG1fcmVuZGVyQm94UmVnaW9uSW5mby5lbmQoKTsgaXRlciAhPSBlbmQ7
ICsraXRlcikgewotICAgICAgICBjb25zdCBSZW5kZXJCb3gqIGJveCA9IGl0ZXItPmZpcnN0Owor
ICAgICAgICBjb25zdCBSZW5kZXJCb3gqIGJveCA9IGl0ZXItPmtleTsKICAgICAgICAgaWYgKCFi
b3gtPmNhbkhhdmVSZWdpb25TdHlsZSgpKQogICAgICAgICAgICAgY29udGludWU7CiAKQEAgLTEy
MiwxNCArMTIyLDE0IEBAIHZvaWQgUmVuZGVyUmVnaW9uOjpyZXN0b3JlUmVnaW9uQm94ZXNPcmln
aW5hbFN0eWxlKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgZm9yIChSZW5kZXJCb3hSZWdpb25J
bmZvTWFwOjppdGVyYXRvciBpdGVyID0gbV9yZW5kZXJCb3hSZWdpb25JbmZvLmJlZ2luKCksIGVu
ZCA9IG1fcmVuZGVyQm94UmVnaW9uSW5mby5lbmQoKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewot
ICAgICAgICBjb25zdCBSZW5kZXJCb3gqIGJveCA9IGl0ZXItPmZpcnN0OworICAgICAgICBjb25z
dCBSZW5kZXJCb3gqIGJveCA9IGl0ZXItPmtleTsKICAgICAgICAgUmVuZGVyQm94UmVnaW9uU3R5
bGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZW5kZXJCb3hSZWdpb25TdHlsZS5maW5kKGJveCk7CiAg
ICAgICAgIGlmIChpdCA9PSBtX3JlbmRlckJveFJlZ2lvblN0eWxlLmVuZCgpKQogICAgICAgICAg
ICAgY29udGludWU7CiAKICAgICAgICAgLy8gUmVzdG9yZSB0aGUgYm94IHN0eWxlIHRvIHRoZSBv
cmlnaW5hbCBzdHlsZSBhbmQgc3RvcmUgdGhlIGJveCBzdHlsZSBpbiByZWdpb24gZm9yIGxhdGVy
IHVzZS4KICAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBib3hSZWdpb25TdHlsZSA9IGJveC0+
c3R5bGUoKTsKLSAgICAgICAgKGNvbnN0X2Nhc3Q8UmVuZGVyQm94Kj4oYm94KSktPnNldFN0eWxl
SW50ZXJuYWwoaXQtPnNlY29uZCk7CisgICAgICAgIChjb25zdF9jYXN0PFJlbmRlckJveCo+KGJv
eCkpLT5zZXRTdHlsZUludGVybmFsKGl0LT52YWx1ZSk7CiAgICAgICAgIG1fcmVuZGVyQm94UmVn
aW9uU3R5bGUuc2V0KGJveCwgYm94UmVnaW9uU3R5bGUpOwogICAgIH0KIH0KQEAgLTI0Niw3ICsy
NDYsNyBAQCBSZW5kZXJCb3hSZWdpb25JbmZvKiBSZW5kZXJSZWdpb246OnNldFJlbmRlckJveFJl
Z2lvbkluZm8oY29uc3QgUmVuZGVyQm94KiBib3gsCiAgICAgaWYgKCFtX2lzVmFsaWQgfHwgIW1f
Zmxvd1RocmVhZCkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBPd25QdHI8UmVuZGVyQm94UmVn
aW9uSW5mbz4mIGJveEluZm8gPSBtX3JlbmRlckJveFJlZ2lvbkluZm8uYWRkKGJveCwgbnVsbHB0
cikuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBPd25QdHI8UmVuZGVyQm94UmVnaW9uSW5mbz4mIGJv
eEluZm8gPSBtX3JlbmRlckJveFJlZ2lvbkluZm8uYWRkKGJveCwgbnVsbHB0cikuaXRlcmF0b3It
PnZhbHVlOwogICAgIGlmIChib3hJbmZvKQogICAgICAgICAqYm94SW5mbyA9IFJlbmRlckJveFJl
Z2lvbkluZm8obG9naWNhbExlZnRJbnNldCwgbG9naWNhbFJpZ2h0SW5zZXQsIGNvbnRhaW5pbmdC
bG9ja0NoYWluSXNJbnNldCk7CiAgICAgZWxzZQpAQCAtMjg3LDcgKzI4Nyw3IEBAIFBhc3NSZWZQ
dHI8UmVuZGVyU3R5bGU+IFJlbmRlclJlZ2lvbjo6cmVuZGVyQm94UmVnaW9uU3R5bGUoY29uc3Qg
UmVuZGVyQm94KiByZW5kCiAKICAgICBSZW5kZXJCb3hSZWdpb25TdHlsZU1hcDo6aXRlcmF0b3Ig
aXQgPSBtX3JlbmRlckJveFJlZ2lvblN0eWxlLmZpbmQocmVuZGVyQm94KTsKICAgICBpZiAoaXQg
IT0gbV9yZW5kZXJCb3hSZWdpb25TdHlsZS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNv
bmQ7CisgICAgICAgIHJldHVybiBpdC0+dmFsdWU7CiAgICAgcmV0dXJuIGNvbXB1dGVTdHlsZUlu
UmVnaW9uKHJlbmRlckJveCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRhYmxlU2VjdGlvbi5jcHAKaW5kZXggOTBjYzdkM2VlNzVhMzBmN2QwOWRhYjM5ZTg3YTIz
NmM2ZTIxMDdkMS4uNzMyOTAyNDY1ZTlhOGFmNzY4OWQzYjlhNTg4ZTA3M2NiZGYwNDlmNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKQEAg
LTE0MTQsNyArMTQxNCw3IEBAIENvbGxhcHNlZEJvcmRlclZhbHVlJiBSZW5kZXJUYWJsZVNlY3Rp
b246OmNhY2hlZENvbGxhcHNlZEJvcmRlcihjb25zdCBSZW5kZXJUYWJsCiAgICAgQVNTRVJUKHRh
YmxlKCktPmNvbGxhcHNlQm9yZGVycygpKTsKICAgICBIYXNoTWFwPHBhaXI8Y29uc3QgUmVuZGVy
VGFibGVDZWxsKiwgaW50PiwgQ29sbGFwc2VkQm9yZGVyVmFsdWU+OjppdGVyYXRvciBpdCA9IG1f
Y2VsbHNDb2xsYXBzZWRCb3JkZXJzLmZpbmQobWFrZV9wYWlyKGNlbGwsIHNpZGUpKTsKICAgICBB
U1NFUlQoaXQgIT0gbV9jZWxsc0NvbGxhcHNlZEJvcmRlcnMuZW5kKCkpOwotICAgIHJldHVybiBp
dC0+c2Vjb25kOworICAgIHJldHVybiBpdC0+dmFsdWU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1h
Yy5tbSBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQppbmRleCBk
OWUyZTg2N2NjMDYwYzYzNmUyYWY2ZjQ1NDMyYTc2ZTg0YzJkOWM0Li5iZDIxMTY0M2Q3YThjOWUy
OTQ1YmM1NTM4YzgwN2I2YmYyNWUyNjlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lTWFjLm1tCkBAIC0zNjAsNyArMzYwLDcgQEAgQ29sb3IgUmVuZGVyVGhlbWVNYWM6
OnN5c3RlbUNvbG9yKGludCBjc3NWYWx1ZUlkKSBjb25zdAogICAgIHsKICAgICAgICAgSGFzaE1h
cDxpbnQsIFJHQkEzMj46Oml0ZXJhdG9yIGl0ID0gbV9zeXN0ZW1Db2xvckNhY2hlLmZpbmQoY3Nz
VmFsdWVJZCk7CiAgICAgICAgIGlmIChpdCAhPSBtX3N5c3RlbUNvbG9yQ2FjaGUuZW5kKCkpCi0g
ICAgICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIHJldHVybiBpdC0+dmFs
dWU7CiAgICAgfQogCiAgICAgQ29sb3IgY29sb3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVmlldy5jcHAKaW5kZXggZmNhM2RjYTdhMzM5ZDhhMzJmNTU0MzYwMTFmMDY0MDRkY2M3ZmI5
Yy4uMDlhNjYzOTdkZWIzZjkzMjlmNzM2YTI2NWE0MDczZWNkNzM4YmFjZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcApAQCAtNDIzLDcgKzQyMyw3IEBAIEludFJlY3Qg
UmVuZGVyVmlldzo6c2VsZWN0aW9uQm91bmRzKGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRlbnQpIGNv
bnN0CiAgICAgSW50UmVjdCBzZWxSZWN0OwogICAgIFNlbGVjdGlvbk1hcDo6aXRlcmF0b3IgZW5k
ID0gc2VsZWN0ZWRPYmplY3RzLmVuZCgpOwogICAgIGZvciAoU2VsZWN0aW9uTWFwOjppdGVyYXRv
ciBpID0gc2VsZWN0ZWRPYmplY3RzLmJlZ2luKCk7IGkgIT0gZW5kOyArK2kpIHsKLSAgICAgICAg
UmVuZGVyU2VsZWN0aW9uSW5mbyogaW5mbyA9IGktPnNlY29uZDsKKyAgICAgICAgUmVuZGVyU2Vs
ZWN0aW9uSW5mbyogaW5mbyA9IGktPnZhbHVlOwogICAgICAgICAvLyBSZW5kZXJTZWxlY3Rpb25J
bmZvOjpyZWN0KCkgaXMgaW4gdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSByZXBhaW50Q29udGFpbmVy
LCBzbyBtYXAgdG8gcGFnZSBjb29yZGluYXRlcy4KICAgICAgICAgSW50UmVjdCBjdXJyUmVjdCA9
IGluZm8tPnJlY3QoKTsKICAgICAgICAgaWYgKFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50
Q29udGFpbmVyID0gaW5mby0+cmVwYWludENvbnRhaW5lcigpKSB7CkBAIC01MDQsNyArNTA0LDcg
QEAgdm9pZCBSZW5kZXJWaWV3OjpzZXRTZWxlY3Rpb24oUmVuZGVyT2JqZWN0KiBzdGFydCwgaW50
IHN0YXJ0UG9zLCBSZW5kZXJPYmplY3QqIGUKICAgICAvLyBOb3cgY2xlYXIgdGhlIHNlbGVjdGlv
bi4KICAgICBTZWxlY3RlZE9iamVjdE1hcDo6aXRlcmF0b3Igb2xkT2JqZWN0c0VuZCA9IG9sZFNl
bGVjdGVkT2JqZWN0cy5lbmQoKTsKICAgICBmb3IgKFNlbGVjdGVkT2JqZWN0TWFwOjppdGVyYXRv
ciBpID0gb2xkU2VsZWN0ZWRPYmplY3RzLmJlZ2luKCk7IGkgIT0gb2xkT2JqZWN0c0VuZDsgKytp
KQotICAgICAgICBpLT5maXJzdC0+c2V0U2VsZWN0aW9uU3RhdGVJZk5lZWRlZChTZWxlY3Rpb25O
b25lKTsKKyAgICAgICAgaS0+a2V5LT5zZXRTZWxlY3Rpb25TdGF0ZUlmTmVlZGVkKFNlbGVjdGlv
bk5vbmUpOwogCiAgICAgLy8gc2V0IHNlbGVjdGlvbiBzdGFydCBhbmQgZW5kCiAgICAgbV9zZWxl
Y3Rpb25TdGFydCA9IHN0YXJ0OwpAQCAtNTY3LDkgKzU2Nyw5IEBAIHZvaWQgUmVuZGVyVmlldzo6
c2V0U2VsZWN0aW9uKFJlbmRlck9iamVjdCogc3RhcnQsIGludCBzdGFydFBvcywgUmVuZGVyT2Jq
ZWN0KiBlCiAKICAgICAvLyBIYXZlIGFueSBvZiB0aGUgb2xkIHNlbGVjdGVkIG9iamVjdHMgY2hh
bmdlZCBjb21wYXJlZCB0byB0aGUgbmV3IHNlbGVjdGlvbj8KICAgICBmb3IgKFNlbGVjdGVkT2Jq
ZWN0TWFwOjppdGVyYXRvciBpID0gb2xkU2VsZWN0ZWRPYmplY3RzLmJlZ2luKCk7IGkgIT0gb2xk
T2JqZWN0c0VuZDsgKytpKSB7Ci0gICAgICAgIFJlbmRlck9iamVjdCogb2JqID0gaS0+Zmlyc3Q7
CisgICAgICAgIFJlbmRlck9iamVjdCogb2JqID0gaS0+a2V5OwogICAgICAgICBSZW5kZXJTZWxl
Y3Rpb25JbmZvKiBuZXdJbmZvID0gbmV3U2VsZWN0ZWRPYmplY3RzLmdldChvYmopOwotICAgICAg
ICBSZW5kZXJTZWxlY3Rpb25JbmZvKiBvbGRJbmZvID0gaS0+c2Vjb25kOworICAgICAgICBSZW5k
ZXJTZWxlY3Rpb25JbmZvKiBvbGRJbmZvID0gaS0+dmFsdWU7CiAgICAgICAgIGlmICghbmV3SW5m
byB8fCBvbGRJbmZvLT5yZWN0KCkgIT0gbmV3SW5mby0+cmVjdCgpIHx8IG9sZEluZm8tPnN0YXRl
KCkgIT0gbmV3SW5mby0+c3RhdGUoKSB8fAogICAgICAgICAgICAgKG1fc2VsZWN0aW9uU3RhcnQg
PT0gb2JqICYmIG9sZFN0YXJ0UG9zICE9IG1fc2VsZWN0aW9uU3RhcnRQb3MpIHx8CiAgICAgICAg
ICAgICAobV9zZWxlY3Rpb25FbmQgPT0gb2JqICYmIG9sZEVuZFBvcyAhPSBtX3NlbGVjdGlvbkVu
ZFBvcykpIHsKQEAgLTU4Niw3ICs1ODYsNyBAQCB2b2lkIFJlbmRlclZpZXc6OnNldFNlbGVjdGlv
bihSZW5kZXJPYmplY3QqIHN0YXJ0LCBpbnQgc3RhcnRQb3MsIFJlbmRlck9iamVjdCogZQogICAg
IC8vIEFueSBuZXcgb2JqZWN0cyB0aGF0IHJlbWFpbiB3ZXJlIG5vdCBmb3VuZCBpbiB0aGUgb2xk
IG9iamVjdHMgZGljdCwgYW5kIHNvIHRoZXkgbmVlZCB0byBiZSB1cGRhdGVkLgogICAgIFNlbGVj
dGVkT2JqZWN0TWFwOjppdGVyYXRvciBuZXdPYmplY3RzRW5kID0gbmV3U2VsZWN0ZWRPYmplY3Rz
LmVuZCgpOwogICAgIGZvciAoU2VsZWN0ZWRPYmplY3RNYXA6Oml0ZXJhdG9yIGkgPSBuZXdTZWxl
Y3RlZE9iamVjdHMuYmVnaW4oKTsgaSAhPSBuZXdPYmplY3RzRW5kOyArK2kpIHsKLSAgICAgICAg
UmVuZGVyU2VsZWN0aW9uSW5mbyogbmV3SW5mbyA9IGktPnNlY29uZDsKKyAgICAgICAgUmVuZGVy
U2VsZWN0aW9uSW5mbyogbmV3SW5mbyA9IGktPnZhbHVlOwogICAgICAgICBuZXdJbmZvLT5yZXBh
aW50KCk7CiAgICAgICAgIGRlbGV0ZSBuZXdJbmZvOwogICAgIH0KQEAgLTU5NCw5ICs1OTQsOSBA
QCB2b2lkIFJlbmRlclZpZXc6OnNldFNlbGVjdGlvbihSZW5kZXJPYmplY3QqIHN0YXJ0LCBpbnQg
c3RhcnRQb3MsIFJlbmRlck9iamVjdCogZQogICAgIC8vIEhhdmUgYW55IG9mIHRoZSBvbGQgYmxv
Y2tzIGNoYW5nZWQ/CiAgICAgU2VsZWN0ZWRCbG9ja01hcDo6aXRlcmF0b3Igb2xkQmxvY2tzRW5k
ID0gb2xkU2VsZWN0ZWRCbG9ja3MuZW5kKCk7CiAgICAgZm9yIChTZWxlY3RlZEJsb2NrTWFwOjpp
dGVyYXRvciBpID0gb2xkU2VsZWN0ZWRCbG9ja3MuYmVnaW4oKTsgaSAhPSBvbGRCbG9ja3NFbmQ7
ICsraSkgewotICAgICAgICBSZW5kZXJCbG9jayogYmxvY2sgPSBpLT5maXJzdDsKKyAgICAgICAg
UmVuZGVyQmxvY2sqIGJsb2NrID0gaS0+a2V5OwogICAgICAgICBSZW5kZXJCbG9ja1NlbGVjdGlv
bkluZm8qIG5ld0luZm8gPSBuZXdTZWxlY3RlZEJsb2Nrcy5nZXQoYmxvY2spOwotICAgICAgICBS
ZW5kZXJCbG9ja1NlbGVjdGlvbkluZm8qIG9sZEluZm8gPSBpLT5zZWNvbmQ7CisgICAgICAgIFJl
bmRlckJsb2NrU2VsZWN0aW9uSW5mbyogb2xkSW5mbyA9IGktPnZhbHVlOwogICAgICAgICBpZiAo
IW5ld0luZm8gfHwgb2xkSW5mby0+cmVjdHMoKSAhPSBuZXdJbmZvLT5yZWN0cygpIHx8IG9sZElu
Zm8tPnN0YXRlKCkgIT0gbmV3SW5mby0+c3RhdGUoKSkgewogICAgICAgICAgICAgb2xkSW5mby0+
cmVwYWludCgpOwogICAgICAgICAgICAgaWYgKG5ld0luZm8pIHsKQEAgLTYxMSw3ICs2MTEsNyBA
QCB2b2lkIFJlbmRlclZpZXc6OnNldFNlbGVjdGlvbihSZW5kZXJPYmplY3QqIHN0YXJ0LCBpbnQg
c3RhcnRQb3MsIFJlbmRlck9iamVjdCogZQogICAgIC8vIEFueSBuZXcgYmxvY2tzIHRoYXQgcmVt
YWluIHdlcmUgbm90IGZvdW5kIGluIHRoZSBvbGQgYmxvY2tzIGRpY3QsIGFuZCBzbyB0aGV5IG5l
ZWQgdG8gYmUgdXBkYXRlZC4KICAgICBTZWxlY3RlZEJsb2NrTWFwOjppdGVyYXRvciBuZXdCbG9j
a3NFbmQgPSBuZXdTZWxlY3RlZEJsb2Nrcy5lbmQoKTsKICAgICBmb3IgKFNlbGVjdGVkQmxvY2tN
YXA6Oml0ZXJhdG9yIGkgPSBuZXdTZWxlY3RlZEJsb2Nrcy5iZWdpbigpOyBpICE9IG5ld0Jsb2Nr
c0VuZDsgKytpKSB7Ci0gICAgICAgIFJlbmRlckJsb2NrU2VsZWN0aW9uSW5mbyogbmV3SW5mbyA9
IGktPnNlY29uZDsKKyAgICAgICAgUmVuZGVyQmxvY2tTZWxlY3Rpb25JbmZvKiBuZXdJbmZvID0g
aS0+dmFsdWU7CiAgICAgICAgIG5ld0luZm8tPnJlcGFpbnQoKTsKICAgICAgICAgZGVsZXRlIG5l
d0luZm87CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
cldpZGdldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcApp
bmRleCBkYTg3YTk3YmU1N2E5ZDdlMWZhODZmMGY5ZTQ0ZWU4YjQ4MWE0ZjY1Li4xYTMxNzIzZjFh
YjE4MmJkNDc5MGQ3NmI3OTE1NjdkOWQ4ZTk3MDI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyV2lkZ2V0LmNwcApAQCAtNzAsOSArNzAsOSBAQCB2b2lkIFJlbmRlcldpZGdldDo6
cmVzdW1lV2lkZ2V0SGllcmFyY2h5VXBkYXRlcygpCiAgICAgICAgIHdpZGdldE5ld1BhcmVudE1h
cCgpLmNsZWFyKCk7CiAgICAgICAgIFdpZGdldFRvUGFyZW50TWFwOjppdGVyYXRvciBlbmQgPSBt
YXAuZW5kKCk7CiAgICAgICAgIGZvciAoV2lkZ2V0VG9QYXJlbnRNYXA6Oml0ZXJhdG9yIGl0ID0g
bWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgV2lkZ2V0KiBjaGls
ZCA9IGl0LT5maXJzdC5nZXQoKTsKKyAgICAgICAgICAgIFdpZGdldCogY2hpbGQgPSBpdC0+a2V5
LmdldCgpOwogICAgICAgICAgICAgU2Nyb2xsVmlldyogY3VycmVudFBhcmVudCA9IGNoaWxkLT5w
YXJlbnQoKTsKLSAgICAgICAgICAgIEZyYW1lVmlldyogbmV3UGFyZW50ID0gaXQtPnNlY29uZDsK
KyAgICAgICAgICAgIEZyYW1lVmlldyogbmV3UGFyZW50ID0gaXQtPnZhbHVlOwogICAgICAgICAg
ICAgaWYgKG5ld1BhcmVudCAhPSBjdXJyZW50UGFyZW50KSB7CiAgICAgICAgICAgICAgICAgaWYg
KGN1cnJlbnRQYXJlbnQpCiAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYXJlbnQtPnJlbW92
ZUNoaWxkKGNoaWxkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290
SW5saW5lQm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNw
cAppbmRleCBlNDBmZmJmY2M2NzQ4ODljYTMwOTIwNTgwOTQzMzNmNDVjY2NjYzczLi5hZWQwN2Q1
YWYyZTdlNzYwODg2YWM5MmE2ZjhiM2MzMTk2MGNlYzgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCkBAIC03MjAsOCArNzIwLDggQEAgdm9pZCBSb290SW5s
aW5lQm94Ojphc2NlbnRBbmREZXNjZW50Rm9yQm94KElubGluZUJveCogYm94LCBHbHlwaE92ZXJm
bG93QW5kRmFsbGIKICAgICBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93ID0gMDsKICAgICBp
ZiAoYm94LT5pc1RleHQoKSkgewogICAgICAgICBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250
c01hcDo6aXRlcmF0b3IgaXQgPSB0ZXh0Qm94RGF0YU1hcC5maW5kKHRvSW5saW5lVGV4dEJveChi
b3gpKTsKLSAgICAgICAgdXNlZEZvbnRzID0gaXQgPT0gdGV4dEJveERhdGFNYXAuZW5kKCkgPyAw
IDogJml0LT5zZWNvbmQuZmlyc3Q7Ci0gICAgICAgIGdseXBoT3ZlcmZsb3cgPSBpdCA9PSB0ZXh0
Qm94RGF0YU1hcC5lbmQoKSA/IDAgOiAmaXQtPnNlY29uZC5zZWNvbmQ7CisgICAgICAgIHVzZWRG
b250cyA9IGl0ID09IHRleHRCb3hEYXRhTWFwLmVuZCgpID8gMCA6ICZpdC0+dmFsdWUuZmlyc3Q7
CisgICAgICAgIGdseXBoT3ZlcmZsb3cgPSBpdCA9PSB0ZXh0Qm94RGF0YU1hcC5lbmQoKSA/IDAg
OiAmaXQtPnZhbHVlLnNlY29uZDsKICAgICB9CiAgICAgICAgIAogICAgIGJvb2wgaW5jbHVkZUxl
YWRpbmcgPSBpbmNsdWRlTGVhZGluZ0ZvckJveChib3gpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1ZlcnRpY2FsUG9zaXRpb25DYWNoZS5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1ZlcnRpY2FsUG9zaXRpb25DYWNoZS5oCmluZGV4IGJiMzk4Nzc3MjFkYTcwNWMz
N2JkM2I4ODE5MDI0Y2QyN2UzNmU1Y2UuLmI3Y2Q3ZTA4NWU3ZjliZWRiNTI4ZjYyZGVlZjU3YTdi
YjhhYTViZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9WZXJ0aWNhbFBv
c2l0aW9uQ2FjaGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVmVydGljYWxQb3Np
dGlvbkNhY2hlLmgKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgogICAgICAgICBjb25zdCBIYXNo
TWFwPFJlbmRlck9iamVjdCosIGludD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwVG9DaGVjay5m
aW5kKHJlbmRlcmVyKTsKICAgICAgICAgaWYgKGl0ID09IG1hcFRvQ2hlY2suZW5kKCkpCiAgICAg
ICAgICAgICByZXR1cm4gUG9zaXRpb25VbmRlZmluZWQ7Ci0gICAgICAgIHJldHVybiBpdC0+c2Vj
b25kOworICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwogICAgIH0KICAgICAKICAgICB2b2lkIHNl
dChSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBGb250QmFzZWxpbmUgYmFzZWxpbmVUeXBlLCBpbnQg
cG9zaXRpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR0lubGluZVRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdJbmxpbmVUZXh0LmNwcAppbmRleCBhNTViMGYwYjVkZjRhYTU0NWU1YWIzODI1NmM5ZmU0OTAy
MTMxZGNhLi43MTg1NDk3ZmQ0NjNmNGRmYjc0OTM2YTk5MDQ3ZDM2NmVlNmEzMWY1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5j
cHAKQEAgLTE4Myw3ICsxODMsNyBAQCBib29sIFJlbmRlclNWR0lubGluZVRleHQ6OmNoYXJhY3Rl
clN0YXJ0c05ld1RleHRDaHVuayhpbnQgcG9zaXRpb24pIGNvbnN0CiAgICAgaWYgKGl0ID09IG1f
bGF5b3V0QXR0cmlidXRlcy5jaGFyYWN0ZXJEYXRhTWFwKCkuZW5kKCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIHJldHVybiBpdC0+c2Vjb25kLnggIT0gU1ZHVGV4dExheW91dEF0dHJp
YnV0ZXM6OmVtcHR5VmFsdWUoKSB8fCBpdC0+c2Vjb25kLnkgIT0gU1ZHVGV4dExheW91dEF0dHJp
YnV0ZXM6OmVtcHR5VmFsdWUoKTsKKyAgICByZXR1cm4gaXQtPnZhbHVlLnggIT0gU1ZHVGV4dExh
eW91dEF0dHJpYnV0ZXM6OmVtcHR5VmFsdWUoKSB8fCBpdC0+dmFsdWUueSAhPSBTVkdUZXh0TGF5
b3V0QXR0cmlidXRlczo6ZW1wdHlWYWx1ZSgpOwogfQogCiBWaXNpYmxlUG9zaXRpb24gUmVuZGVy
U1ZHSW5saW5lVGV4dDo6cG9zaXRpb25Gb3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXIuY3BwCmluZGV4IGQ1ZDc5MmRlZDYwZGRmODc1MGJhM2Q4NGE1NGRmNDk1Yjk2
YTY3M2MuLmExZThiOGMxZjk3YTU4MzIzZTcyMjFjY2EzNTMzOTUyNWI2N2Q5MzUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VG
aWx0ZXIuY3BwCkBAIC0zMzksNyArMzM5LDcgQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRl
cjo6cHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZChSZW5kZXJPYmplY3QqIG9iamVjdCwgY28KICAg
ICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMqIHByaW1pdHZlID0gc3RhdGlj
X2Nhc3Q8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKj4ob2JqZWN0LT5ub2Rl
KCkpOwogCiAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBGaWx0ZXJEYXRh
KiBmaWx0ZXJEYXRhID0gaXQtPnNlY29uZDsKKyAgICAgICAgRmlsdGVyRGF0YSogZmlsdGVyRGF0
YSA9IGl0LT52YWx1ZTsKICAgICAgICAgaWYgKCFmaWx0ZXJEYXRhLT5idWlsZGVkKQogICAgICAg
ICAgICAgY29udGludWU7CiAKQEAgLTM1NCw3ICszNTQsNyBAQCB2b2lkIFJlbmRlclNWR1Jlc291
cmNlRmlsdGVyOjpwcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKFJlbmRlck9iamVjdCogb2JqZWN0
LCBjbwogICAgICAgICBidWlsZGVyLT5jbGVhclJlc3VsdHNSZWN1cnNpdmUoZWZmZWN0KTsKIAog
ICAgICAgICAvLyBSZXBhaW50IHRoZSBpbWFnZSBvbiB0aGUgc2NyZWVuLgotICAgICAgICBtYXJr
Q2xpZW50Rm9ySW52YWxpZGF0aW9uKGl0LT5maXJzdCwgUmVwYWludEludmFsaWRhdGlvbik7Cisg
ICAgICAgIG1hcmtDbGllbnRGb3JJbnZhbGlkYXRpb24oaXQtPmtleSwgUmVwYWludEludmFsaWRh
dGlvbik7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcAppbmRleCBmOGY0OTNkYjg1YTBk
ZGI3YTY5YzFmMTZjYjE3NWY3MGFkOWRjYjgzLi4zNTMzYjM1YzE4NjllZmU5ZTQ1ZTVkMDc4NTM2
NTMxMjA0NWJkOGY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAKQEAgLTE0MCw3ICsxNDAsNyBAQCBi
b29sIFJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQ6OmFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0
KiBvYmplY3QsIFJlbmRlclN0eWxlKgogICAgIGlmIChncmFkaWVudFVuaXRzKCkgPT0gU1ZHVW5p
dFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YICYmIG9iamVjdEJvdW5kaW5n
Qm94LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgT3duUHRyPEdyYWRp
ZW50RGF0YT4mIGdyYWRpZW50RGF0YSA9IG1fZ3JhZGllbnRNYXAuYWRkKG9iamVjdCwgbnVsbHB0
cikuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBPd25QdHI8R3JhZGllbnREYXRhPiYgZ3JhZGllbnRE
YXRhID0gbV9ncmFkaWVudE1hcC5hZGQob2JqZWN0LCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7
CiAgICAgaWYgKCFncmFkaWVudERhdGEpCiAgICAgICAgIGdyYWRpZW50RGF0YSA9IGFkb3B0UHRy
KG5ldyBHcmFkaWVudERhdGEpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAKaW5kZXggNGRjNTAxYjgwNmIz
ZDhkZjI1NDc0NTQzYmNmY2ZmMzg3NjBkNjI2OS4uNWIzODNlMjNhNDI0NTk0NzMwY2Y5NzcwYjEy
MTNhYTI3NWJkY2E4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcApAQCAtODMsNyArODMsNyBAQCBib29s
IFJlbmRlclNWR1Jlc291cmNlUGF0dGVybjo6YXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqIG9i
amVjdCwgUmVuZGVyU3R5bGUqCiAgICAgaWYgKG1fYXR0cmlidXRlcy5wYXR0ZXJuVW5pdHMoKSA9
PSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1ggJiYgb2JqZWN0
Qm91bmRpbmdCb3guaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBPd25Q
dHI8UGF0dGVybkRhdGE+JiBwYXR0ZXJuRGF0YSA9IG1fcGF0dGVybk1hcC5hZGQob2JqZWN0LCBu
dWxscHRyKS5pdGVyYXRvci0+c2Vjb25kOworICAgIE93blB0cjxQYXR0ZXJuRGF0YT4mIHBhdHRl
cm5EYXRhID0gbV9wYXR0ZXJuTWFwLmFkZChvYmplY3QsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1
ZTsKICAgICBpZiAoIXBhdHRlcm5EYXRhKQogICAgICAgICBwYXR0ZXJuRGF0YSA9IGFkb3B0UHRy
KG5ldyBQYXR0ZXJuRGF0YSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHUmVzb3VyY2VzQ2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdSZXNvdXJjZXNDYWNoZS5jcHAKaW5kZXggMDNlNmM3YjRiZTU2ZjUwOWMxMjFiYmE1NWVk
MjJkNjUzOTBjODlmOC4uMDA3M2I3MzU0ZDExOWU3NDAyNjdjMDcxM2RjZDE2OTU0MzEzYTllYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXNDYWNo
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXNDYWNo
ZS5jcHAKQEAgLTE3MiwxMSArMTcyLDExIEBAIHZvaWQgU1ZHUmVzb3VyY2VzQ2FjaGU6OnJlc291
cmNlRGVzdHJveWVkKFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKiByZXNvdXJjZSkKIAogICAg
IEhhc2hNYXA8UmVuZGVyT2JqZWN0KiwgU1ZHUmVzb3VyY2VzKj46Oml0ZXJhdG9yIGVuZCA9IGNh
Y2hlLT5tX2NhY2hlLmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDxSZW5kZXJPYmplY3QqLCBTVkdS
ZXNvdXJjZXMqPjo6aXRlcmF0b3IgaXQgPSBjYWNoZS0+bV9jYWNoZS5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKLSAgICAgICAgaXQtPnNlY29uZC0+cmVzb3VyY2VEZXN0cm95ZWQocmVzb3Vy
Y2UpOworICAgICAgICBpdC0+dmFsdWUtPnJlc291cmNlRGVzdHJveWVkKHJlc291cmNlKTsKIAog
ICAgICAgICAvLyBNYXJrIHVzZXJzIG9mIGRlc3Ryb3llZCByZXNvdXJjZXMgYXMgcGVuZGluZyBy
ZXNvbHV0aW9uIGJhc2VkIG9uIHRoZSBpZCBvZiB0aGUgb2xkIHJlc291cmNlLgogICAgICAgICBF
bGVtZW50KiByZXNvdXJjZUVsZW1lbnQgPSB0b0VsZW1lbnQocmVzb3VyY2UtPm5vZGUoKSk7Ci0g
ICAgICAgIFNWR1N0eWxlZEVsZW1lbnQqIGNsaWVudEVsZW1lbnQgPSB0b1NWR1N0eWxlZEVsZW1l
bnQoaXQtPmZpcnN0LT5ub2RlKCkpOworICAgICAgICBTVkdTdHlsZWRFbGVtZW50KiBjbGllbnRF
bGVtZW50ID0gdG9TVkdTdHlsZWRFbGVtZW50KGl0LT5rZXktPm5vZGUoKSk7CiAgICAgICAgIFNW
R0RvY3VtZW50RXh0ZW5zaW9ucyogZXh0ZW5zaW9ucyA9IGNsaWVudEVsZW1lbnQtPmRvY3VtZW50
KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKTsKIAogICAgICAgICBleHRlbnNpb25zLT5hZGRQZW5k
aW5nUmVzb3VyY2UocmVzb3VyY2VFbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKEhUTUxOYW1lczo6
aWRBdHRyKSwgY2xpZW50RWxlbWVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR1Jvb3RJbmxpbmVCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdSb290SW5saW5lQm94LmNwcAppbmRleCA1NzE0NmM5MGM4MzhhYjY1MzNhNDNlNzM4
MDU2ZTM4MmU1ZTg1YzlmLi5hNDI4YzYxNGRkZjEyNDVhMDM4NThlNTM1YzEyMDAwZGM2NzhjNzMw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jvb3RJbmxpbmVC
b3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUm9vdElubGluZUJv
eC5jcHAKQEAgLTIyNywxNyArMjI3LDE3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzd2FwSXRlbXNJ
bkxheW91dEF0dHJpYnV0ZXMoU1ZHVGV4dExheW91dEF0dHJpYnV0ZXMqIGZpcnN0QXR0CiAgICAg
ICAgIHJldHVybjsKIAogICAgIGlmIChmaXJzdFByZXNlbnQgJiYgbGFzdFByZXNlbnQpIHsKLSAg
ICAgICAgc3RkOjpzd2FwKGl0Rmlyc3QtPnNlY29uZCwgaXRMYXN0LT5zZWNvbmQpOworICAgICAg
ICBzdGQ6OnN3YXAoaXRGaXJzdC0+dmFsdWUsIGl0TGFzdC0+dmFsdWUpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCiAgICAgaWYgKGZpcnN0UHJlc2VudCAmJiAhbGFzdFByZXNlbnQpIHsKLSAg
ICAgICAgbGFzdEF0dHJpYnV0ZXMtPmNoYXJhY3RlckRhdGFNYXAoKS5zZXQobGFzdFBvc2l0aW9u
ICsgMSwgaXRGaXJzdC0+c2Vjb25kKTsKKyAgICAgICAgbGFzdEF0dHJpYnV0ZXMtPmNoYXJhY3Rl
ckRhdGFNYXAoKS5zZXQobGFzdFBvc2l0aW9uICsgMSwgaXRGaXJzdC0+dmFsdWUpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAgICAgLy8gIWZpcnN0UHJlc2VudCAmJiBsYXN0UHJlc2VudAot
ICAgIGZpcnN0QXR0cmlidXRlcy0+Y2hhcmFjdGVyRGF0YU1hcCgpLnNldChmaXJzdFBvc2l0aW9u
ICsgMSwgaXRMYXN0LT5zZWNvbmQpOworICAgIGZpcnN0QXR0cmlidXRlcy0+Y2hhcmFjdGVyRGF0
YU1hcCgpLnNldChmaXJzdFBvc2l0aW9uICsgMSwgaXRMYXN0LT52YWx1ZSk7CiB9CiAKIHN0YXRp
YyBpbmxpbmUgdm9pZCBmaW5kRmlyc3RBbmRMYXN0QXR0cmlidXRlc0luVmVjdG9yKFZlY3RvcjxT
VkdUZXh0TGF5b3V0QXR0cmlidXRlcyo+JiBhdHRyaWJ1dGVzLCBSZW5kZXJTVkdJbmxpbmVUZXh0
KiBmaXJzdENvbnRleHQsIFJlbmRlclNWR0lubGluZVRleHQqIGxhc3RDb250ZXh0LApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRl
cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1
dGVzLmNwcAppbmRleCBhOTI1OTZjZWVlZGJlMjVhZjc3N2RmNGE0YzgzY2QzZWY5N2I5Y2U4Li42
N2ZhMGZhOTgyYWQ2MGJhNzI2NTFhODQ1NDk1ODFmN2ViNTBjZDBhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1dGVzLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1dGVzLmNw
cApAQCAtNjIsOCArNjIsOCBAQCB2b2lkIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzOjpkdW1wKCkg
Y29uc3QKICAgICBmcHJpbnRmKHN0ZGVyciwgImNvbnRleHQ6ICVwXG4iLCBtX2NvbnRleHQpOwog
ICAgIGNvbnN0IFNWR0NoYXJhY3RlckRhdGFNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fY2hh
cmFjdGVyRGF0YU1hcC5lbmQoKTsKICAgICBmb3IgKFNWR0NoYXJhY3RlckRhdGFNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbV9jaGFyYWN0ZXJEYXRhTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgewotICAgICAgICBjb25zdCBTVkdDaGFyYWN0ZXJEYXRhJiBkYXRhID0gaXQtPnNlY29uZDsK
LSAgICAgICAgZnByaW50ZihzdGRlcnIsICIgLS0tPiBwb3M9JWksIGRhdGE9eyIsIGl0LT5maXJz
dCk7CisgICAgICAgIGNvbnN0IFNWR0NoYXJhY3RlckRhdGEmIGRhdGEgPSBpdC0+dmFsdWU7Cisg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiIC0tLT4gcG9zPSVpLCBkYXRhPXsiLCBpdC0+a2V5KTsK
ICAgICAgICAgZHVtcFNWR0NoYXJhY3RlckRhdGFNYXBWYWx1ZSgieCIsIGRhdGEueCk7CiAgICAg
ICAgIGR1bXBTVkdDaGFyYWN0ZXJEYXRhTWFwVmFsdWUoInkiLCBkYXRhLnkpOwogICAgICAgICBk
dW1wU1ZHQ2hhcmFjdGVyRGF0YU1hcFZhbHVlKCJkeCIsIGRhdGEuZHgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxk
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmli
dXRlc0J1aWxkZXIuY3BwCmluZGV4IDAyYTIxMjNlYjY2N2VjY2Y3M2YwODBmNmJiNGU2ZmVjYTVk
MmYzZTYuLmYyMDllZTQ4YjE1ZTVlOTkyNWFkNjc1NWJjYzQ0NzY1ZTRkYjVmYmUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNC
dWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlv
dXRBdHRyaWJ1dGVzQnVpbGRlci5jcHAKQEAgLTE2Miw3ICsxNjIsNyBAQCB2b2lkIFNWR1RleHRM
YXlvdXRBdHRyaWJ1dGVzQnVpbGRlcjo6YnVpbGRMYXlvdXRBdHRyaWJ1dGVzKFJlbmRlclNWR1Rl
eHQqIHRleHRSbwogICAgICAgICBkYXRhLnkgPSAwOwogICAgICAgICBtX2NoYXJhY3RlckRhdGFN
YXAuc2V0KDEsIGRhdGEpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIFNWR0NoYXJhY3RlckRhdGEm
IGRhdGEgPSBpdC0+c2Vjb25kOworICAgICAgICBTVkdDaGFyYWN0ZXJEYXRhJiBkYXRhID0gaXQt
PnZhbHVlOwogICAgICAgICBpZiAoZGF0YS54ID09IFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzOjpl
bXB0eVZhbHVlKCkpCiAgICAgICAgICAgICBkYXRhLnggPSAwOwogICAgICAgICBpZiAoZGF0YS55
ID09IFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzOjplbXB0eVZhbHVlKCkpCkBAIC0yMzEsNyArMjMx
LDcgQEAgdm9pZCBTVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXI6OmZpbGxDaGFyYWN0ZXJE
YXRhTWFwKGNvbnN0IFRleHRQb3NpdGlvbiYgcG8KICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICB9CiAKLSAgICAgICAgdXBkYXRlQ2hhcmFjdGVyRGF0YShpLCBsYXN0Um90YXRpb24sIGl0
LT5zZWNvbmQsIGxlbmd0aENvbnRleHQsIHhMaXN0UHRyLCB5TGlzdFB0ciwgZHhMaXN0UHRyLCBk
eUxpc3RQdHIsIHJvdGF0ZUxpc3RQdHIpOworICAgICAgICB1cGRhdGVDaGFyYWN0ZXJEYXRhKGks
IGxhc3RSb3RhdGlvbiwgaXQtPnZhbHVlLCBsZW5ndGhDb250ZXh0LCB4TGlzdFB0ciwgeUxpc3RQ
dHIsIGR4TGlzdFB0ciwgZHlMaXN0UHRyLCByb3RhdGVMaXN0UHRyKTsKICAgICB9CiAKICAgICAv
LyBUaGUgbGFzdCByb3RhdGlvbiB2YWx1ZSBhbHdheXMgc3BhbnMgdGhlIHdob2xlIHNjb3BlLgpA
QCAtMjQ3LDcgKzI0Nyw3IEBAIHZvaWQgU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyOjpm
aWxsQ2hhcmFjdGVyRGF0YU1hcChjb25zdCBUZXh0UG9zaXRpb24mIHBvCiAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIGl0LT5zZWNvbmQucm90YXRlID0gbGFzdFJv
dGF0aW9uOworICAgICAgICBpdC0+dmFsdWUucm90YXRlID0gbGFzdFJvdGF0aW9uOwogICAgIH0K
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5
b3V0RW5naW5lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91
dEVuZ2luZS5jcHAKaW5kZXggNWM1NDliMjFjODc1MjA4NDcyNDZhZjI1NGZkMDU5ZjJlM2I5YjVl
OC4uYmEyYjc2MzlkM2Y5NWI3Mzg5NDc1ZmEyZGMwMGM5YTZhYTg1YjMxNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmUuY3BwCkBA
IC00NzUsNyArNDc1LDcgQEAgdm9pZCBTVkdUZXh0TGF5b3V0RW5naW5lOjpsYXlvdXRUZXh0T25M
aW5lT3JQYXRoKFNWR0lubGluZVRleHRCb3gqIHRleHRCb3gsIFJlbmQKICAgICAgICAgU1ZHQ2hh
cmFjdGVyRGF0YSBkYXRhOwogICAgICAgICBTVkdDaGFyYWN0ZXJEYXRhTWFwOjppdGVyYXRvciBp
dCA9IGNoYXJhY3RlckRhdGFNYXAuZmluZChtX2xvZ2ljYWxDaGFyYWN0ZXJPZmZzZXQgKyAxKTsK
ICAgICAgICAgaWYgKGl0ICE9IGNoYXJhY3RlckRhdGFNYXAuZW5kKCkpCi0gICAgICAgICAgICBk
YXRhID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIGRhdGEgPSBpdC0+dmFsdWU7CiAKICAgICAg
ICAgZmxvYXQgeCA9IGRhdGEueDsKICAgICAgICAgZmxvYXQgeSA9IGRhdGEueTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3NCdWlsZGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3NCdWlsZGVyLmNw
cAppbmRleCBjOTRmMGM3NGE0YjY5YjhlZWM2NjA1NmFkYzBiYmYxMTZiNmU0NjlmLi5kMDk3OWIx
ZDk3YzkzZmUzNjk5OGM3Y2ExZDVmZDgxOGNmOWJjYWQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNzQnVpbGRlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljc0J1aWxkZXIuY3BwCkBAIC0xNzAs
NyArMTcwLDcgQEAgdm9pZCBTVkdUZXh0TWV0cmljc0J1aWxkZXI6Om1lYXN1cmVUZXh0UmVuZGVy
ZXIoUmVuZGVyU1ZHSW5saW5lVGV4dCogdGV4dCwgTWVhc3UKICAgICAgICAgICAgIGlmIChkYXRh
LT5hbGxDaGFyYWN0ZXJzTWFwKSB7CiAgICAgICAgICAgICAgICAgY29uc3QgU1ZHQ2hhcmFjdGVy
RGF0YU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBkYXRhLT5hbGxDaGFyYWN0ZXJzTWFwLT5maW5k
KGRhdGEtPnZhbHVlTGlzdFBvc2l0aW9uICsgbV90ZXh0UG9zaXRpb24gLSBkYXRhLT5za2lwcGVk
Q2hhcmFjdGVycyArIDEpOwogICAgICAgICAgICAgICAgIGlmIChpdCAhPSBkYXRhLT5hbGxDaGFy
YWN0ZXJzTWFwLT5lbmQoKSkKLSAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcy0+Y2hhcmFj
dGVyRGF0YU1hcCgpLnNldChtX3RleHRQb3NpdGlvbiArIDEsIGl0LT5zZWNvbmQpOworICAgICAg
ICAgICAgICAgICAgICBhdHRyaWJ1dGVzLT5jaGFyYWN0ZXJEYXRhTWFwKCkuc2V0KG1fdGV4dFBv
c2l0aW9uICsgMSwgaXQtPnZhbHVlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHRleHRN
ZXRyaWNzVmFsdWVzLT5hcHBlbmQobV9jdXJyZW50TWV0cmljcyk7CiAgICAgICAgIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmNwcAppbmRleCAzMDQ5MDU4NjMxNjVl
ODYzMjQzNDBjZThkYmVmYmIwYTc2YjM3NGY5Li4yZjk4MWNlYjk1ZjUwNjg4ZmE1MjUxYmMwNTg5
NTI3NWU1YTY1MThjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VB
cmVhU3luYy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMu
Y3BwCkBAIC0xODgsNyArMTg4LDcgQEAgdm9pZCBTdG9yYWdlQXJlYVN5bmM6OnN5bmNUaW1lckZp
cmVkKFRpbWVyPFN0b3JhZ2VBcmVhU3luYz4qKQogICAgICAgICAgICAgICAgIHBhcnRpYWxTeW5j
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIG1faXRlbXNQZW5kaW5nU3luYy5zZXQoY2hhbmdlZF9pdC0+Zmlyc3QuaXNvbGF0ZWRDb3B5
KCksIGNoYW5nZWRfaXQtPnNlY29uZC5pc29sYXRlZENvcHkoKSk7CisgICAgICAgICAgICBtX2l0
ZW1zUGVuZGluZ1N5bmMuc2V0KGNoYW5nZWRfaXQtPmtleS5pc29sYXRlZENvcHkoKSwgY2hhbmdl
ZF9pdC0+dmFsdWUuaXNvbGF0ZWRDb3B5KCkpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKHBh
cnRpYWxTeW5jKSB7CkBAIC0xOTgsNyArMTk4LDcgQEAgdm9pZCBTdG9yYWdlQXJlYVN5bmM6OnN5
bmNUaW1lckZpcmVkKFRpbWVyPFN0b3JhZ2VBcmVhU3luYz4qKQogICAgICAgICAgICAgSGFzaE1h
cDxTdHJpbmcsIFN0cmluZz46Oml0ZXJhdG9yIHBlbmRpbmdfaXQgPSBtX2l0ZW1zUGVuZGluZ1N5
bmMuYmVnaW4oKTsKICAgICAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+OjppdGVyYXRv
ciBwZW5kaW5nX2VuZCA9IG1faXRlbXNQZW5kaW5nU3luYy5lbmQoKTsKICAgICAgICAgICAgIGZv
ciAoOyBwZW5kaW5nX2l0ICE9IHBlbmRpbmdfZW5kOyArK3BlbmRpbmdfaXQpCi0gICAgICAgICAg
ICAgICAgbV9jaGFuZ2VkSXRlbXMucmVtb3ZlKHBlbmRpbmdfaXQtPmZpcnN0KTsKKyAgICAgICAg
ICAgICAgICBtX2NoYW5nZWRJdGVtcy5yZW1vdmUocGVuZGluZ19pdC0+a2V5KTsKICAgICAgICAg
fQogCiAgICAgICAgIGlmICghbV9zeW5jU2NoZWR1bGVkKSB7CkBAIC0zNDUsNyArMzQ1LDcgQEAg
dm9pZCBTdG9yYWdlQXJlYVN5bmM6OnBlcmZvcm1JbXBvcnQoKQogICAgIEhhc2hNYXA8U3RyaW5n
LCBTdHJpbmc+OjppdGVyYXRvciBlbmQgPSBpdGVtTWFwLmVuZCgpOwogCiAgICAgZm9yICg7IGl0
ICE9IGVuZDsgKytpdCkKLSAgICAgICAgbV9zdG9yYWdlQXJlYS0+aW1wb3J0SXRlbShpdC0+Zmly
c3QsIGl0LT5zZWNvbmQpOworICAgICAgICBtX3N0b3JhZ2VBcmVhLT5pbXBvcnRJdGVtKGl0LT5r
ZXksIGl0LT52YWx1ZSk7CiAKICAgICBtYXJrSW1wb3J0ZWQoKTsKIH0KQEAgLTQzMywxMyArNDMz
LDEzIEBAIHZvaWQgU3RvcmFnZUFyZWFTeW5jOjpzeW5jKGJvb2wgY2xlYXJJdGVtcywgY29uc3Qg
SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIGl0ZW1zCiAgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsK
ICAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGl0
ZW1zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAvLyBCYXNlZCBvbiB0aGUg
bnVsbC1uZXNzIG9mIHRoZSBzZWNvbmQgYXJndW1lbnQsIGRlY2lkZSB3aGV0aGVyIHRoaXMgaXMg
YW4gaW5zZXJ0IG9yIGEgZGVsZXRlLgotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQmIHF1ZXJ5ID0g
aXQtPnNlY29uZC5pc051bGwoKSA/IHJlbW92ZSA6IGluc2VydDsKKyAgICAgICAgU1FMaXRlU3Rh
dGVtZW50JiBxdWVyeSA9IGl0LT52YWx1ZS5pc051bGwoKSA/IHJlbW92ZSA6IGluc2VydDsKIAot
ICAgICAgICBxdWVyeS5iaW5kVGV4dCgxLCBpdC0+Zmlyc3QpOworICAgICAgICBxdWVyeS5iaW5k
VGV4dCgxLCBpdC0+a2V5KTsKIAogICAgICAgICAvLyBJZiB0aGUgc2Vjb25kIGFyZ3VtZW50IGlz
IG5vbi1udWxsLCB3ZSdyZSBkb2luZyBhbiBpbnNlcnQsIHNvIGJpbmQgaXQgYXMgdGhlIHZhbHVl
LgotICAgICAgICBpZiAoIWl0LT5zZWNvbmQuaXNOdWxsKCkpCi0gICAgICAgICAgICBxdWVyeS5i
aW5kQmxvYigyLCBpdC0+c2Vjb25kKTsKKyAgICAgICAgaWYgKCFpdC0+dmFsdWUuaXNOdWxsKCkp
CisgICAgICAgICAgICBxdWVyeS5iaW5kQmxvYigyLCBpdC0+dmFsdWUpOwogCiAgICAgICAgIGlu
dCByZXN1bHQgPSBxdWVyeS5zdGVwKCk7CiAgICAgICAgIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0
RG9uZSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTWFwLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU1hcC5jcHAKaW5kZXggOGU0MmQyZjE3
NmRkM2IxMTEyYTAxYTUxZDhkYjYyZjRiMzhiYmEzNS4uNDBlMWEzOGYxY2E0YTc5ZjBjZTI0NzAx
MTUzNDdhZGI5MjlmNDk4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9y
YWdlTWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VNYXAuY3BwCkBA
IC04OSw3ICs4OSw3IEBAIFN0cmluZyBTdG9yYWdlTWFwOjprZXkodW5zaWduZWQgaW5kZXgpCiAg
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAogICAgIHNldEl0ZXJhdG9yVG9JbmRleChpbmRleCk7
Ci0gICAgcmV0dXJuIG1faXRlcmF0b3ItPmZpcnN0OworICAgIHJldHVybiBtX2l0ZXJhdG9yLT5r
ZXk7CiB9CiAKIFN0cmluZyBTdG9yYWdlTWFwOjpnZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5KSBj
b25zdApAQCAtMTMzLDcgKzEzMyw3IEBAIFBhc3NSZWZQdHI8U3RvcmFnZU1hcD4gU3RvcmFnZU1h
cDo6c2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1CiAKICAgICBI
YXNoTWFwPFN0cmluZywgU3RyaW5nPjo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IG1fbWFwLmFkZChr
ZXksIHZhbHVlKTsKICAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICBhZGRS
ZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IHZhbHVlOworICAgICAgICBhZGRSZXN1bHQuaXRlcmF0
b3ItPnZhbHVlID0gdmFsdWU7CiAKICAgICBpbnZhbGlkYXRlSXRlcmF0b3IoKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcAppbmRleCA1NGI2
NDBjZTUyZjVkYTkxMWQ3MmQ2YzU3NjMwZGI1MTY1ZGNkYWIzLi5jOGFjMmJkM2E4MTQyMTY1NDlm
MGY5OTUxZWQ4ZGExNzE4NTg3YmZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0
b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcApAQCAtNTUsNyArNTUsNyBAQCBQYXNzUmVmUHRyPFN0b3Jh
Z2VOYW1lc3BhY2U+IFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpsb2NhbFN0b3JhZ2VOYW1lc3BhY2Uo
Y29uc3QgUwogICAgICAgICByZXR1cm4gc3RvcmFnZU5hbWVzcGFjZS5yZWxlYXNlKCk7CiAgICAg
fQogCi0gICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgcmV0dXJuIGl0LT52YWx1ZTsKIH0KIAog
UGFzc1JlZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6c2Vzc2lv
blN0b3JhZ2VOYW1lc3BhY2UodW5zaWduZWQgcXVvdGEpCkBAIC05Nyw3ICs5Nyw3IEBAIFBhc3NS
ZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gU3RvcmFnZU5hbWVzcGFjZUltcGw6OmNvcHkoKQogCiAg
ICAgU3RvcmFnZUFyZWFNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fc3RvcmFnZUFyZWFNYXAuZW5kKCk7
CiAgICAgZm9yIChTdG9yYWdlQXJlYU1hcDo6aXRlcmF0b3IgaSA9IG1fc3RvcmFnZUFyZWFNYXAu
YmVnaW4oKTsgaSAhPSBlbmQ7ICsraSkKLSAgICAgICAgbmV3TmFtZXNwYWNlLT5tX3N0b3JhZ2VB
cmVhTWFwLnNldChpLT5maXJzdCwgaS0+c2Vjb25kLT5jb3B5KCkpOworICAgICAgICBuZXdOYW1l
c3BhY2UtPm1fc3RvcmFnZUFyZWFNYXAuc2V0KGktPmtleSwgaS0+dmFsdWUtPmNvcHkoKSk7CiAg
ICAgcmV0dXJuIG5ld05hbWVzcGFjZS5yZWxlYXNlKCk7CiB9CiAKQEAgLTEzMSw3ICsxMzEsNyBA
QCB2b2lkIFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpjbG9zZSgpCiAKICAgICBTdG9yYWdlQXJlYU1h
cDo6aXRlcmF0b3IgZW5kID0gbV9zdG9yYWdlQXJlYU1hcC5lbmQoKTsKICAgICBmb3IgKFN0b3Jh
Z2VBcmVhTWFwOjppdGVyYXRvciBpdCA9IG1fc3RvcmFnZUFyZWFNYXAuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5jbG9zZSgpOworICAgICAgICBpdC0+dmFs
dWUtPmNsb3NlKCk7CiAKICAgICBpZiAobV9zeW5jTWFuYWdlcikKICAgICAgICAgbV9zeW5jTWFu
YWdlci0+Y2xvc2UoKTsKQEAgLTE1NCw3ICsxNTQsNyBAQCB2b2lkIFN0b3JhZ2VOYW1lc3BhY2VJ
bXBsOjpjbGVhckFsbE9yaWdpbnNGb3JEZWxldGlvbigpCiAKICAgICBTdG9yYWdlQXJlYU1hcDo6
aXRlcmF0b3IgZW5kID0gbV9zdG9yYWdlQXJlYU1hcC5lbmQoKTsKICAgICBmb3IgKFN0b3JhZ2VB
cmVhTWFwOjppdGVyYXRvciBpdCA9IG1fc3RvcmFnZUFyZWFNYXAuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5jbGVhckZvck9yaWdpbkRlbGV0aW9uKCk7Cisg
ICAgICAgIGl0LT52YWx1ZS0+Y2xlYXJGb3JPcmlnaW5EZWxldGlvbigpOwogfQogICAgIAogdm9p
ZCBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6c3luYygpCkBAIC0xNjIsNyArMTYyLDcgQEAgdm9pZCBT
dG9yYWdlTmFtZXNwYWNlSW1wbDo6c3luYygpCiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
ICAgICBTdG9yYWdlQXJlYU1hcDo6aXRlcmF0b3IgZW5kID0gbV9zdG9yYWdlQXJlYU1hcC5lbmQo
KTsKICAgICBmb3IgKFN0b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBpdCA9IG1fc3RvcmFnZUFyZWFN
YXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5zeW5jKCk7
CisgICAgICAgIGl0LT52YWx1ZS0+c3luYygpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwCmluZGV4IDNm
NTk3MDViMTcxNTQzN2JiYjc3NWU4OWMzYjQ5MjQwMzBiNjgzYzUuLjNkN2QwMjczOWQzZDYyMzRj
NTUwZGRlMTdiOGM5YmVkYTkxMTU1ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1
bWVudEV4dGVuc2lvbnMuY3BwCkBAIC0xNTYsNyArMTU2LDcgQEAgdm9pZCBTVkdEb2N1bWVudEV4
dGVuc2lvbnM6OnJlbW92ZUFuaW1hdGlvbkVsZW1lbnRGcm9tVGFyZ2V0KFNWR1NNSUxFbGVtZW50
KiBhbmkKICAgICBIYXNoTWFwPFNWR0VsZW1lbnQqLCBIYXNoU2V0PFNWR1NNSUxFbGVtZW50Kj4q
ID46Oml0ZXJhdG9yIGl0ID0gbV9hbmltYXRlZEVsZW1lbnRzLmZpbmQodGFyZ2V0RWxlbWVudCk7
CiAgICAgQVNTRVJUKGl0ICE9IG1fYW5pbWF0ZWRFbGVtZW50cy5lbmQoKSk7CiAgICAgCi0gICAg
SGFzaFNldDxTVkdTTUlMRWxlbWVudCo+KiBhbmltYXRpb25FbGVtZW50c0ZvclRhcmdldCA9IGl0
LT5zZWNvbmQ7CisgICAgSGFzaFNldDxTVkdTTUlMRWxlbWVudCo+KiBhbmltYXRpb25FbGVtZW50
c0ZvclRhcmdldCA9IGl0LT52YWx1ZTsKICAgICBBU1NFUlQoIWFuaW1hdGlvbkVsZW1lbnRzRm9y
VGFyZ2V0LT5pc0VtcHR5KCkpOwogCiAgICAgYW5pbWF0aW9uRWxlbWVudHNGb3JUYXJnZXQtPnJl
bW92ZShhbmltYXRpb25FbGVtZW50KTsKQEAgLTIxMyw5ICsyMTMsOSBAQCB2b2lkIFNWR0RvY3Vt
ZW50RXh0ZW5zaW9uczo6YWRkUGVuZGluZ1Jlc291cmNlKGNvbnN0IEF0b21pY1N0cmluZyYgaWQs
IFNWR1N0eWxlZAogCiAgICAgLy8gVGhlIEhhc2hNYXAgYWRkIGZ1bmN0aW9uIGxlYXZlcyB0aGUg
bWFwIGFsb25lIGFuZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgZWxlbWVudCBpbiB0aGUKICAg
ICAvLyBtYXAgaWYgdGhlIGVsZW1lbnQgYWxyZWFkeSBleGlzdHMuIFNvIHdlIGFkZCB3aXRoIGEg
dmFsdWUgb2YgMCwgYW5kIGl0IGVpdGhlciBmaW5kcyB0aGUKLSAgICAvLyBleGlzdGluZyBlbGVt
ZW50IG9yIGFkZHMgYSBuZXcgb25lIGluIGEgc2luZ2xlIG9wZXJhdGlvbi4gVGhlICIuaXRlcmF0
b3ItPnNlY29uZCIgaWRpb20gZ2V0cworICAgIC8vIGV4aXN0aW5nIGVsZW1lbnQgb3IgYWRkcyBh
IG5ldyBvbmUgaW4gYSBzaW5nbGUgb3BlcmF0aW9uLiBUaGUgIi5pdGVyYXRvci0+dmFsdWUiIGlk
aW9tIGdldHMKICAgICAvLyB1cyB0byB0aGUgaXRlcmF0b3IgZnJvbSBhZGQncyByZXN1bHQsIGFu
ZCB0aGVuIHRvIHRoZSB2YWx1ZSBpbnNpZGUgdGhlIGhhc2ggdGFibGUuCi0gICAgU1ZHUGVuZGlu
Z0VsZW1lbnRzKiYgc2V0ID0gbV9wZW5kaW5nUmVzb3VyY2VzLmFkZChpZCwgMCkuaXRlcmF0b3It
PnNlY29uZDsKKyAgICBTVkdQZW5kaW5nRWxlbWVudHMqJiBzZXQgPSBtX3BlbmRpbmdSZXNvdXJj
ZXMuYWRkKGlkLCAwKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCFzZXQpCiAgICAgICAgIHNl
dCA9IG5ldyBTVkdQZW5kaW5nRWxlbWVudHM7CiAgICAgc2V0LT5hZGQoZWxlbWVudCk7CkBAIC0y
NDAsNyArMjQwLDcgQEAgYm9vbCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OmlzRWxlbWVudFBlbmRp
bmdSZXNvdXJjZXMoU1ZHU3R5bGVkRWxlbWVudCogZWxlbWVudCkKIAogICAgIEhhc2hNYXA8QXRv
bWljU3RyaW5nLCBTVkdQZW5kaW5nRWxlbWVudHMqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9w
ZW5kaW5nUmVzb3VyY2VzLmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDxBdG9taWNTdHJpbmcsIFNW
R1BlbmRpbmdFbGVtZW50cyo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGVuZGluZ1Jlc291cmNl
cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgU1ZHUGVuZGluZ0VsZW1lbnRz
KiBlbGVtZW50cyA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFNWR1BlbmRpbmdFbGVtZW50cyogZWxl
bWVudHMgPSBpdC0+dmFsdWU7CiAgICAgICAgIEFTU0VSVChlbGVtZW50cyk7CiAKICAgICAgICAg
aWYgKGVsZW1lbnRzLT5jb250YWlucyhlbGVtZW50KSkKQEAgLTI2OCwxMyArMjY4LDEzIEBAIHZv
aWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZW1vdmVFbGVtZW50RnJvbVBlbmRpbmdSZXNvdXJj
ZXMoU1ZHU3R5bGVkRWxlbWVudCoKICAgICAgICAgVmVjdG9yPEF0b21pY1N0cmluZz4gdG9CZVJl
bW92ZWQ7CiAgICAgICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBTVkdQZW5kaW5nRWxlbWVudHMq
Pjo6aXRlcmF0b3IgZW5kID0gbV9wZW5kaW5nUmVzb3VyY2VzLmVuZCgpOwogICAgICAgICBmb3Ig
KEhhc2hNYXA8QXRvbWljU3RyaW5nLCBTVkdQZW5kaW5nRWxlbWVudHMqPjo6aXRlcmF0b3IgaXQg
PSBtX3BlbmRpbmdSZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAg
ICAgICBTVkdQZW5kaW5nRWxlbWVudHMqIGVsZW1lbnRzID0gaXQtPnNlY29uZDsKKyAgICAgICAg
ICAgIFNWR1BlbmRpbmdFbGVtZW50cyogZWxlbWVudHMgPSBpdC0+dmFsdWU7CiAgICAgICAgICAg
ICBBU1NFUlQoZWxlbWVudHMpOwogICAgICAgICAgICAgQVNTRVJUKCFlbGVtZW50cy0+aXNFbXB0
eSgpKTsKIAogICAgICAgICAgICAgZWxlbWVudHMtPnJlbW92ZShlbGVtZW50KTsKICAgICAgICAg
ICAgIGlmIChlbGVtZW50cy0+aXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHRvQmVSZW1vdmVk
LmFwcGVuZChpdC0+Zmlyc3QpOworICAgICAgICAgICAgICAgIHRvQmVSZW1vdmVkLmFwcGVuZChp
dC0+a2V5KTsKICAgICAgICAgfQogCiAgICAgICAgIGVsZW1lbnQtPmNsZWFySGFzUGVuZGluZ1Jl
c291cmNlc0lmUG9zc2libGUoKTsKQEAgLTI5MCwxMyArMjkwLDEzIEBAIHZvaWQgU1ZHRG9jdW1l
bnRFeHRlbnNpb25zOjpyZW1vdmVFbGVtZW50RnJvbVBlbmRpbmdSZXNvdXJjZXMoU1ZHU3R5bGVk
RWxlbWVudCoKICAgICAgICAgVmVjdG9yPEF0b21pY1N0cmluZz4gdG9CZVJlbW92ZWQ7CiAgICAg
ICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBTVkdQZW5kaW5nRWxlbWVudHMqPjo6aXRlcmF0b3Ig
ZW5kID0gbV9wZW5kaW5nUmVzb3VyY2VzRm9yUmVtb3ZhbC5lbmQoKTsKICAgICAgICAgZm9yIChI
YXNoTWFwPEF0b21pY1N0cmluZywgU1ZHUGVuZGluZ0VsZW1lbnRzKj46Oml0ZXJhdG9yIGl0ID0g
bV9wZW5kaW5nUmVzb3VyY2VzRm9yUmVtb3ZhbC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
LSAgICAgICAgICAgIFNWR1BlbmRpbmdFbGVtZW50cyogZWxlbWVudHMgPSBpdC0+c2Vjb25kOwor
ICAgICAgICAgICAgU1ZHUGVuZGluZ0VsZW1lbnRzKiBlbGVtZW50cyA9IGl0LT52YWx1ZTsKICAg
ICAgICAgICAgIEFTU0VSVChlbGVtZW50cyk7CiAgICAgICAgICAgICBBU1NFUlQoIWVsZW1lbnRz
LT5pc0VtcHR5KCkpOwogCiAgICAgICAgICAgICBlbGVtZW50cy0+cmVtb3ZlKGVsZW1lbnQpOwog
ICAgICAgICAgICAgaWYgKGVsZW1lbnRzLT5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgdG9C
ZVJlbW92ZWQuYXBwZW5kKGl0LT5maXJzdCk7CisgICAgICAgICAgICAgICAgdG9CZVJlbW92ZWQu
YXBwZW5kKGl0LT5rZXkpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gV2UgdXNlIHRoZSByZW1v
dmVQZW5kaW5nUmVzb3VyY2VGb3JSZW1vdmFsIGZ1bmN0aW9uIGhlcmUgYmVjYXVzZSBpdCBkZWFs
cyB3aXRoIHNldCBsaWZldGltZSBjb3JyZWN0bHkuCkBAIC0zNTYsNyArMzU2LDcgQEAgSGFzaFNl
dDxTVkdFbGVtZW50Kj4qIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6c2V0T2ZFbGVtZW50c1JlZmVy
ZW5jaW5nVGFyZ2V0KFNWR0UKICAgICBjb25zdCBIYXNoTWFwPFNWR0VsZW1lbnQqLCBPd25QdHI8
SGFzaFNldDxTVkdFbGVtZW50Kj4gPiA+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fZWxlbWVudERl
cGVuZGVuY2llcy5maW5kKHJlZmVyZW5jZWRFbGVtZW50KTsKICAgICBpZiAoaXQgPT0gbV9lbGVt
ZW50RGVwZW5kZW5jaWVzLmVuZCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gaXQt
PnNlY29uZC5nZXQoKTsKKyAgICByZXR1cm4gaXQtPnZhbHVlLmdldCgpOwogfQogCiB2b2lkIFNW
R0RvY3VtZW50RXh0ZW5zaW9uczo6YWRkRWxlbWVudFJlZmVyZW5jaW5nVGFyZ2V0KFNWR0VsZW1l
bnQqIHJlZmVyZW5jaW5nRWxlbWVudCwgU1ZHRWxlbWVudCogcmVmZXJlbmNlZEVsZW1lbnQpCkBA
IC0zODAsOCArMzgwLDggQEAgdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlbW92ZUFsbFRh
cmdldFJlZmVyZW5jZXNGb3JFbGVtZW50KFNWR0VsZW1lbnQqIHJlZmUKIAogICAgIEhhc2hNYXA8
U1ZHRWxlbWVudCosIE93blB0cjxIYXNoU2V0PFNWR0VsZW1lbnQqPiA+ID46Oml0ZXJhdG9yIGVu
ZCA9IG1fZWxlbWVudERlcGVuZGVuY2llcy5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8U1ZHRWxl
bWVudCosIE93blB0cjxIYXNoU2V0PFNWR0VsZW1lbnQqPiA+ID46Oml0ZXJhdG9yIGl0ID0gbV9l
bGVtZW50RGVwZW5kZW5jaWVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBT
VkdFbGVtZW50KiByZWZlcmVuY2VkRWxlbWVudCA9IGl0LT5maXJzdDsKLSAgICAgICAgSGFzaFNl
dDxTVkdFbGVtZW50Kj4qIHJlZmVyZW5jaW5nRWxlbWVudHMgPSBpdC0+c2Vjb25kLmdldCgpOwor
ICAgICAgICBTVkdFbGVtZW50KiByZWZlcmVuY2VkRWxlbWVudCA9IGl0LT5rZXk7CisgICAgICAg
IEhhc2hTZXQ8U1ZHRWxlbWVudCo+KiByZWZlcmVuY2luZ0VsZW1lbnRzID0gaXQtPnZhbHVlLmdl
dCgpOwogICAgICAgICBIYXNoU2V0PFNWR0VsZW1lbnQqPjo6aXRlcmF0b3Igc2V0SXQgPSByZWZl
cmVuY2luZ0VsZW1lbnRzLT5maW5kKHJlZmVyZW5jaW5nRWxlbWVudCk7CiAgICAgICAgIGlmIChz
ZXRJdCA9PSByZWZlcmVuY2luZ0VsZW1lbnRzLT5lbmQoKSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwpAQCAtNDAyLDEwICs0MDIsMTAgQEAgdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlbW92
ZUFsbEVsZW1lbnRSZWZlcmVuY2VzRm9yVGFyZ2V0KFNWR0VsZW1lbnQqIHJlZmUKICAgICBIYXNo
TWFwPFNWR0VsZW1lbnQqLCBPd25QdHI8SGFzaFNldDxTVkdFbGVtZW50Kj4gPiA+OjppdGVyYXRv
ciBpdCA9IG1fZWxlbWVudERlcGVuZGVuY2llcy5maW5kKHJlZmVyZW5jZWRFbGVtZW50KTsKICAg
ICBpZiAoaXQgPT0gbV9lbGVtZW50RGVwZW5kZW5jaWVzLmVuZCgpKQogICAgICAgICByZXR1cm47
Ci0gICAgQVNTRVJUKGl0LT5maXJzdCA9PSByZWZlcmVuY2VkRWxlbWVudCk7CisgICAgQVNTRVJU
KGl0LT5rZXkgPT0gcmVmZXJlbmNlZEVsZW1lbnQpOwogICAgIFZlY3RvcjxTVkdFbGVtZW50Kj4g
dG9CZU5vdGlmaWVkOwogCi0gICAgSGFzaFNldDxTVkdFbGVtZW50Kj4qIHJlZmVyZW5jaW5nRWxl
bWVudHMgPSBpdC0+c2Vjb25kLmdldCgpOworICAgIEhhc2hTZXQ8U1ZHRWxlbWVudCo+KiByZWZl
cmVuY2luZ0VsZW1lbnRzID0gaXQtPnZhbHVlLmdldCgpOwogICAgIEhhc2hTZXQ8U1ZHRWxlbWVu
dCo+OjppdGVyYXRvciBzZXRFbmQgPSByZWZlcmVuY2luZ0VsZW1lbnRzLT5lbmQoKTsKICAgICBm
b3IgKEhhc2hTZXQ8U1ZHRWxlbWVudCo+OjppdGVyYXRvciBzZXRJdCA9IHJlZmVyZW5jaW5nRWxl
bWVudHMtPmJlZ2luKCk7IHNldEl0ICE9IHNldEVuZDsgKytzZXRJdCkKICAgICAgICAgdG9CZU5v
dGlmaWVkLmFwcGVuZCgqc2V0SXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCmluZGV4IGYw
NDg2YThhMjQ4MGZhMWMzMmUyOGY4ZWZlZTk2OThiYzY1MDMxMmIuLjc0YWZhY2EyOTcwNDVhYWFi
MDAwMzBmOTczZGIzMWQwYzY5YzBiYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAKQEAg
LTc3LDcgKzc3LDcgQEAgU1ZHRWxlbWVudDo6flNWR0VsZW1lbnQoKQogICAgICAgICBTVkdFbGVt
ZW50UmFyZURhdGE6OlNWR0VsZW1lbnRSYXJlRGF0YU1hcDo6aXRlcmF0b3IgaXQgPSByYXJlRGF0
YU1hcC5maW5kKHRoaXMpOwogICAgICAgICBBU1NFUlQoaXQgIT0gcmFyZURhdGFNYXAuZW5kKCkp
OwogCi0gICAgICAgIFNWR0VsZW1lbnRSYXJlRGF0YSogcmFyZURhdGEgPSBpdC0+c2Vjb25kOwor
ICAgICAgICBTVkdFbGVtZW50UmFyZURhdGEqIHJhcmVEYXRhID0gaXQtPnZhbHVlOwogICAgICAg
ICByYXJlRGF0YS0+ZGVzdHJveUFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygpOwogICAgICAg
ICBpZiAoU1ZHQ3Vyc29yRWxlbWVudCogY3Vyc29yRWxlbWVudCA9IHJhcmVEYXRhLT5jdXJzb3JF
bGVtZW50KCkpCiAgICAgICAgICAgICBjdXJzb3JFbGVtZW50LT5yZW1vdmVDbGllbnQodGhpcyk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFp
bmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIu
Y3BwCmluZGV4IGM0OTYzODM4OTg1N2UwNWU5NzkwN2RjMDM4Zjc4ZTBhMmU5Mzg3ZjguLjMyN2Qy
MjdhNzk1NTMwNWIzZDAxZGNiODE4MmQ1MmE4MTYxZDc1OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuY3BwCkBAIC0yMTEsNyArMjEx
LDcgQEAgU3RyaW5nIFNNSUxUaW1lQ29udGFpbmVyOjpiYXNlVmFsdWVGb3IoRWxlbWVudEF0dHJp
YnV0ZVBhaXIga2V5KQogICAgIC8vIEN1cnJlbnRseSBhbmltYXRpb24gb3ZlcndyaXRlcyB0aGVt
IHNvIHdlIG5lZWQgdG8gc2F2ZSB0aGVtIHNvbWV3aGVyZS4KICAgICBCYXNlVmFsdWVNYXA6Oml0
ZXJhdG9yIGl0ID0gbV9zYXZlZEJhc2VWYWx1ZXMuZmluZChrZXkpOwogICAgIGlmIChpdCAhPSBt
X3NhdmVkQmFzZVZhbHVlcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAg
ICAgIHJldHVybiBpdC0+dmFsdWU7CiAgICAgCiAgICAgU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVu
dCA9IGtleS5maXJzdDsKICAgICBRdWFsaWZpZWROYW1lIGF0dHJpYnV0ZU5hbWUgPSBrZXkuc2Vj
b25kOwpAQCAtMjg0LDcgKzI4NCw3IEBAIHZvaWQgU01JTFRpbWVDb250YWluZXI6OnVwZGF0ZUFu
aW1hdGlvbnMoU01JTFRpbWUgZWxhcHNlZCkKICAgICBWZWN0b3I8U1ZHU01JTEVsZW1lbnQqPiBh
bmltYXRpb25zVG9BcHBseTsKICAgICBSZXN1bHRFbGVtZW50TWFwOjppdGVyYXRvciBlbmQgPSBy
ZXN1bHRzRWxlbWVudHMuZW5kKCk7CiAgICAgZm9yIChSZXN1bHRFbGVtZW50TWFwOjppdGVyYXRv
ciBpdCA9IHJlc3VsdHNFbGVtZW50cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAg
IGFuaW1hdGlvbnNUb0FwcGx5LmFwcGVuZChpdC0+c2Vjb25kLmdldCgpKTsKKyAgICAgICAgYW5p
bWF0aW9uc1RvQXBwbHkuYXBwZW5kKGl0LT52YWx1ZS5nZXQoKSk7CiAKICAgICAvLyBTb3J0IDxh
bmltYXRlVHJhbmZvcm0+IHRvIGJlIHRoZSBsYXN0IG9uZSB0byBiZSBhcHBsaWVkLiA8YW5pbWF0
ZT4gbWF5IGNoYW5nZSB0cmFuc2Zvcm0gYXR0cmlidXRlIGFzCiAgICAgLy8gd2VsbCAoZGlyZWN0
bHkgb3IgaW5kaXJlY3RseSBieSBtb2RpZnlpbmcgPHVzZT4geC95KSBhbmQgdGhpcyB3YXkgdHJh
bnNmb3JtcyBjb21iaW5lIHByb3Blcmx5LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Zn
L2dyYXBoaWNzL1NWR0ltYWdlQ2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNz
L1NWR0ltYWdlQ2FjaGUuY3BwCmluZGV4IGZiMzhmZDU1NGI2Mjc2ZTA2ZDZjYTQ4YWU2NTIxNzJi
MGQ2ODhjNGQuLjg4OTlmMTIxMzYxYTBjOTQ2NDExZWQ0NWY2NjI1NWU2ZmU3ODRiOTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZUNhY2hlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VDYWNoZS5jcHAKQEAgLTQyLDcg
KzQyLDcgQEAgU1ZHSW1hZ2VDYWNoZTo6flNWR0ltYWdlQ2FjaGUoKQogCiAgICAgSW1hZ2VEYXRh
TWFwOjppdGVyYXRvciBlbmQgPSBtX2ltYWdlRGF0YU1hcC5lbmQoKTsKICAgICBmb3IgKEltYWdl
RGF0YU1hcDo6aXRlcmF0b3IgaXQgPSBtX2ltYWdlRGF0YU1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpCi0gICAgICAgIGRlbGV0ZSBpdC0+c2Vjb25kLmJ1ZmZlcjsKKyAgICAgICAgZGVsZXRl
IGl0LT52YWx1ZS5idWZmZXI7CiAKICAgICBtX2ltYWdlRGF0YU1hcC5jbGVhcigpOwogfQpAQCAt
NTYsNyArNTYsNyBAQCB2b2lkIFNWR0ltYWdlQ2FjaGU6OnJlbW92ZVJlbmRlcmVyRnJvbUNhY2hl
KGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiAgICAgaWYgKGl0ID09IG1faW1hZ2VEYXRh
TWFwLmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBkZWxldGUgaXQtPnNlY29uZC5idWZm
ZXI7CisgICAgZGVsZXRlIGl0LT52YWx1ZS5idWZmZXI7CiAgICAgbV9pbWFnZURhdGFNYXAucmVt
b3ZlKGl0KTsKIH0KIApAQCAtNzMsMTQgKzczLDE0IEBAIFNWR0ltYWdlQ2FjaGU6OlNpemVBbmRa
b29tIFNWR0ltYWdlQ2FjaGU6OnJlcXVlc3RlZFNpemVBbmRab29tKGNvbnN0IFJlbmRlck9iamVj
CiAgICAgU2l6ZUFuZFpvb21NYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zaXplQW5kWm9vbU1h
cC5maW5kKHJlbmRlcmVyKTsKICAgICBpZiAoaXQgPT0gbV9zaXplQW5kWm9vbU1hcC5lbmQoKSkK
ICAgICAgICAgcmV0dXJuIFNpemVBbmRab29tKCk7Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQ7Cisg
ICAgcmV0dXJuIGl0LT52YWx1ZTsKIH0KIAogdm9pZCBTVkdJbWFnZUNhY2hlOjppbWFnZUNvbnRl
bnRDaGFuZ2VkKCkKIHsKICAgICBJbWFnZURhdGFNYXA6Oml0ZXJhdG9yIGVuZCA9IG1faW1hZ2VE
YXRhTWFwLmVuZCgpOwogICAgIGZvciAoSW1hZ2VEYXRhTWFwOjppdGVyYXRvciBpdCA9IG1faW1h
Z2VEYXRhTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC5p
bWFnZU5lZWRzVXBkYXRlID0gdHJ1ZTsKKyAgICAgICAgaXQtPnZhbHVlLmltYWdlTmVlZHNVcGRh
dGUgPSB0cnVlOwogCiAgICAgLy8gSWYgd2UncmUgaW4gdGhlIG1pZGRsZSBvZiBsYXlvdXQsIHN0
YXJ0IHJlZHJhd2luZyBkaXJ0eQogICAgIC8vIGltYWdlcyBvbiBhIHRpbWVyOyBvdGhlcndpc2Ug
aXQncyBzYWZlIHRvIGRyYXcgaW1tZWRpYXRlbHkuCkBAIC05Nyw3ICs5Nyw3IEBAIHZvaWQgU1ZH
SW1hZ2VDYWNoZTo6cmVkcmF3KCkKIHsKICAgICBJbWFnZURhdGFNYXA6Oml0ZXJhdG9yIGVuZCA9
IG1faW1hZ2VEYXRhTWFwLmVuZCgpOwogICAgIGZvciAoSW1hZ2VEYXRhTWFwOjppdGVyYXRvciBp
dCA9IG1faW1hZ2VEYXRhTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBJ
bWFnZURhdGEmIGRhdGEgPSBpdC0+c2Vjb25kOworICAgICAgICBJbWFnZURhdGEmIGRhdGEgPSBp
dC0+dmFsdWU7CiAgICAgICAgIGlmICghZGF0YS5pbWFnZU5lZWRzVXBkYXRlKQogICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgIC8vIElmIHRoZSBjb250ZW50IGNoYW5nZWQgd2UgcmVkcmF3
IHVzaW5nIG91ciBleGlzdGluZyBJbWFnZUJ1ZmZlci4KQEAgLTEyNSwxNCArMTI1LDE0IEBAIElt
YWdlKiBTVkdJbWFnZUNhY2hlOjpsb29rdXBPckNyZWF0ZUJpdG1hcEltYWdlRm9yUmVuZGVyZXIo
Y29uc3QgUmVuZGVyT2JqZWN0KiByCiAgICAgaWYgKHNpemVJdCA9PSBtX3NpemVBbmRab29tTWFw
LmVuZCgpKQogICAgICAgICByZXR1cm4gSW1hZ2U6Om51bGxJbWFnZSgpOwogCi0gICAgSW50U2l6
ZSBzaXplID0gc2l6ZUl0LT5zZWNvbmQuc2l6ZTsKLSAgICBmbG9hdCB6b29tID0gc2l6ZUl0LT5z
ZWNvbmQuem9vbTsKKyAgICBJbnRTaXplIHNpemUgPSBzaXplSXQtPnZhbHVlLnNpemU7CisgICAg
ZmxvYXQgem9vbSA9IHNpemVJdC0+dmFsdWUuem9vbTsKICAgICBBU1NFUlQoIXNpemUuaXNFbXB0
eSgpKTsKIAogICAgIC8vIExvb2t1cCBpbWFnZSBmb3IgcmVuZGVyZXIgaW4gY2FjaGUgYW5kIGV2
ZW50dWFsbHkgdXBkYXRlIGl0LgogICAgIEltYWdlRGF0YU1hcDo6aXRlcmF0b3IgaXQgPSBtX2lt
YWdlRGF0YU1hcC5maW5kKHJlbmRlcmVyKTsKICAgICBpZiAoaXQgIT0gbV9pbWFnZURhdGFNYXAu
ZW5kKCkpIHsKLSAgICAgICAgSW1hZ2VEYXRhJiBkYXRhID0gaXQtPnNlY29uZDsKKyAgICAgICAg
SW1hZ2VEYXRhJiBkYXRhID0gaXQtPnZhbHVlOwogCiAgICAgICAgIC8vIENvbW1vbiBjYXNlOiBp
bWFnZSBzaXplICYgem9vbSByZW1haW5lZCB0aGUgc2FtZS4KICAgICAgICAgaWYgKGRhdGEuc2l6
ZUFuZFpvb20uc2l6ZSA9PSBzaXplICYmIGRhdGEuc2l6ZUFuZFpvb20uem9vbSA9PSB6b29tKQpA
QCAtMTU0LDcgKzE1NCw3IEBAIEltYWdlKiBTVkdJbWFnZUNhY2hlOjpsb29rdXBPckNyZWF0ZUJp
dG1hcEltYWdlRm9yUmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0KiByCiAgICAgSW1hZ2UqIG5l
d0ltYWdlUHRyID0gbmV3SW1hZ2UuZ2V0KCk7CiAgICAgQVNTRVJUKG5ld0ltYWdlUHRyKTsKIAot
ICAgIG1faW1hZ2VEYXRhTWFwLmFkZChyZW5kZXJlciwgSW1hZ2VEYXRhKG5ld0J1ZmZlci5sZWFr
UHRyKCksIG5ld0ltYWdlLnJlbGVhc2UoKSwgc2l6ZUl0LT5zZWNvbmQpKTsKKyAgICBtX2ltYWdl
RGF0YU1hcC5hZGQocmVuZGVyZXIsIEltYWdlRGF0YShuZXdCdWZmZXIubGVha1B0cigpLCBuZXdJ
bWFnZS5yZWxlYXNlKCksIHNpemVJdC0+dmFsdWUpKTsKICAgICByZXR1cm4gbmV3SW1hZ2VQdHI7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZpbHRlckJ1aWxkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZpbHRlckJ1aWxkZXIuaAppbmRleCA3MTMyNDFjOGU4OTQxNTQyNjFhOTc4MWE3YzZmNGQ1Y2Jl
NTFmNmUyLi5iOTFkZjA0MmRkNTI0ZmU3YzkyYmUwOWFkY2U0YjFlYjZkMDM2MzljIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVp
bGRlci5oCkBAIC01MCw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIC8vIE9ubHkg
YWxsb3dlZCBmb3IgZWZmZWN0cyBiZWxvbmdzIHRvIHRoaXMgYnVpbGRlci4KICAgICAgICAgQVNT
RVJUKG1fZWZmZWN0UmVmZXJlbmNlcy5jb250YWlucyhlZmZlY3QpKTsKLSAgICAgICAgcmV0dXJu
IG1fZWZmZWN0UmVmZXJlbmNlcy5maW5kKGVmZmVjdCktPnNlY29uZDsKKyAgICAgICAgcmV0dXJu
IG1fZWZmZWN0UmVmZXJlbmNlcy5maW5kKGVmZmVjdCktPnZhbHVlOwogICAgIH0KIAogICAgIC8v
IFJlcXVpcmVkIHRvIGNoYW5nZSB0aGUgYXR0cmlidXRlcyBvZiBhIGZpbHRlciBkdXJpbmcgYW4g
c3ZnQXR0cmlidXRlQ2hhbmdlZC4KQEAgLTY2LDcgKzY2LDcgQEAgcHJpdmF0ZToKICAgICB7CiAg
ICAgICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBSZWZQdHI8RmlsdGVyRWZmZWN0PiA+OjppdGVy
YXRvciBlbmQgPSBtX2J1aWx0aW5FZmZlY3RzLmVuZCgpOwogICAgICAgICBmb3IgKEhhc2hNYXA8
QXRvbWljU3RyaW5nLCBSZWZQdHI8RmlsdGVyRWZmZWN0PiA+OjppdGVyYXRvciBpdGVyYXRvciA9
IG1fYnVpbHRpbkVmZmVjdHMuYmVnaW4oKTsgaXRlcmF0b3IgIT0gZW5kOyArK2l0ZXJhdG9yKQot
ICAgICAgICAgICAgIG1fZWZmZWN0UmVmZXJlbmNlcy5hZGQoaXRlcmF0b3ItPnNlY29uZCwgRmls
dGVyRWZmZWN0U2V0KCkpOworICAgICAgICAgICAgIG1fZWZmZWN0UmVmZXJlbmNlcy5hZGQoaXRl
cmF0b3ItPnZhbHVlLCBGaWx0ZXJFZmZlY3RTZXQoKSk7CiAgICAgfQogCiAgICAgSGFzaE1hcDxB
dG9taWNTdHJpbmcsIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+ID4gbV9idWlsdGluRWZmZWN0czsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVy
dHkuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHku
aAppbmRleCA3MTRlZjE2OTgzNmU5NDY3ZGFkNmU5YmZkNDRiNzZiOTMzM2FjZDJhLi42ZGE0ZjY5
YjNhMDZkMDY0MzIzNmUyNjlmMWI5MTRkOTllYTM1ZTU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eS5oCkBAIC01NSw4ICs1NSw4
IEBAIHB1YmxpYzoKICAgICAgICAgQ2FjaGUqIGNhY2hlID0gYW5pbWF0ZWRQcm9wZXJ0eUNhY2hl
KCk7CiAgICAgICAgIGNvbnN0IENhY2hlOjpjb25zdF9pdGVyYXRvciBlbmQgPSBjYWNoZS0+ZW5k
KCk7CiAgICAgICAgIGZvciAoQ2FjaGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY2FjaGUtPmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgaWYgKGl0LT5zZWNvbmQgPT0gdGhp
cykgewotICAgICAgICAgICAgICAgIGNhY2hlLT5yZW1vdmUoaXQtPmZpcnN0KTsKKyAgICAgICAg
ICAgIGlmIChpdC0+dmFsdWUgPT0gdGhpcykgeworICAgICAgICAgICAgICAgIGNhY2hlLT5yZW1v
dmUoaXQtPmtleSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0F0dHJp
YnV0ZVRvUHJvcGVydHlNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZH
QXR0cmlidXRlVG9Qcm9wZXJ0eU1hcC5jcHAKaW5kZXggYmUzMWNjM2M3ZGEyZjUwZjUxZjY5YjU1
NDQwMjY1ZGIxMzViNTI4Yy4uY2M0NmNjZmEwODFmZmM4ODMwOWI3ZWYyMmQ2M2YwZjM0ZWZkODE3
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQXR0cmlidXRl
VG9Qcm9wZXJ0eU1hcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZH
QXR0cmlidXRlVG9Qcm9wZXJ0eU1hcC5jcHAKQEAgLTMxLDcgKzMxLDcgQEAgdm9pZCBTVkdBdHRy
aWJ1dGVUb1Byb3BlcnR5TWFwOjphZGRQcm9wZXJ0aWVzKFNWR0F0dHJpYnV0ZVRvUHJvcGVydHlN
YXAmIG1hcCkKIHsKICAgICBBdHRyaWJ1dGVUb1Byb3BlcnRpZXNNYXA6Oml0ZXJhdG9yIGVuZCA9
IG1hcC5tX21hcC5lbmQoKTsKICAgICBmb3IgKEF0dHJpYnV0ZVRvUHJvcGVydGllc01hcDo6aXRl
cmF0b3IgaXQgPSBtYXAubV9tYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAg
IFByb3BlcnRpZXNWZWN0b3IqIHZlY3RvciA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFByb3BlcnRp
ZXNWZWN0b3IqIHZlY3RvciA9IGl0LT52YWx1ZTsKICAgICAgICAgQVNTRVJUKHZlY3Rvcik7CiAK
ICAgICAgICAgUHJvcGVydGllc1ZlY3Rvcjo6aXRlcmF0b3IgdmVjdG9yRW5kID0gdmVjdG9yLT5l
bmQoKTsKQEAgLTgxLDEyICs4MSwxMiBAQCB2b2lkIFNWR0F0dHJpYnV0ZVRvUHJvcGVydHlNYXA6
OnN5bmNocm9uaXplUHJvcGVydGllcyhTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudAogICAgIEFT
U0VSVChjb250ZXh0RWxlbWVudCk7CiAgICAgQXR0cmlidXRlVG9Qcm9wZXJ0aWVzTWFwOjppdGVy
YXRvciBlbmQgPSBtX21hcC5lbmQoKTsKICAgICBmb3IgKEF0dHJpYnV0ZVRvUHJvcGVydGllc01h
cDo6aXRlcmF0b3IgaXQgPSBtX21hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgUHJvcGVydGllc1ZlY3RvciogdmVjdG9yID0gaXQtPnNlY29uZDsKKyAgICAgICAgUHJvcGVy
dGllc1ZlY3RvciogdmVjdG9yID0gaXQtPnZhbHVlOwogICAgICAgICBBU1NFUlQodmVjdG9yKTsK
IAogICAgICAgICBQcm9wZXJ0aWVzVmVjdG9yOjppdGVyYXRvciB2ZWN0b3JFbmQgPSB2ZWN0b3It
PmVuZCgpOwogICAgICAgICBmb3IgKFByb3BlcnRpZXNWZWN0b3I6Oml0ZXJhdG9yIHZlY3Rvckl0
ID0gdmVjdG9yLT5iZWdpbigpOyB2ZWN0b3JJdCAhPSB2ZWN0b3JFbmQ7ICsrdmVjdG9ySXQpCi0g
ICAgICAgICAgICBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnRleHRFbGVtZW50LCBpdC0+Zmlyc3Qs
ICp2ZWN0b3JJdCk7CisgICAgICAgICAgICBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnRleHRFbGVt
ZW50LCBpdC0+a2V5LCAqdmVjdG9ySXQpOwogICAgIH0gCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS93b3Jr
ZXJzL1dvcmtlckNvbnRleHQuY3BwCmluZGV4IGIxMGMxNDcwZWQ0OGViOGI4MGY4ZmM5YTJlNTc5
NjE5ZjE5ZGRkY2MuLjBlZWFlM2Y4ODA3ZWQ4ZjdkYTlmNjVmMTkxOWRjODU5OWRjMWNhNTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcApAQCAtMTc4LDcgKzE3OCw3
IEBAIGJvb2wgV29ya2VyQ29udGV4dDo6aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QKICAgICBB
Y3RpdmVET01PYmplY3RzTWFwJiBhY3RpdmVPYmplY3RzID0gYWN0aXZlRE9NT2JqZWN0cygpOwog
ICAgIEFjdGl2ZURPTU9iamVjdHNNYXA6OmNvbnN0X2l0ZXJhdG9yIGFjdGl2ZU9iamVjdHNFbmQg
PSBhY3RpdmVPYmplY3RzLmVuZCgpOwogICAgIGZvciAoQWN0aXZlRE9NT2JqZWN0c01hcDo6Y29u
c3RfaXRlcmF0b3IgaXRlciA9IGFjdGl2ZU9iamVjdHMuYmVnaW4oKTsgaXRlciAhPSBhY3RpdmVP
YmplY3RzRW5kOyArK2l0ZXIpIHsKLSAgICAgICAgaWYgKGl0ZXItPmZpcnN0LT5oYXNQZW5kaW5n
QWN0aXZpdHkoKSkKKyAgICAgICAgaWYgKGl0ZXItPmtleS0+aGFzUGVuZGluZ0FjdGl2aXR5KCkp
CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3dvcmtlcnMvV29ya2VyRXZlbnRRdWV1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS93b3Jr
ZXJzL1dvcmtlckV2ZW50UXVldWUuY3BwCmluZGV4IGY1MWQyZGM1M2IzOGY3NWRmYTk3NzRhNzFi
ZTNiYTBlMTQwY2Q5OWIuLmEwZWI3NjEzNjVjM2YxZWYzOGJlZTc0OWUyZjIxNGY4NGFhMDUzMWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyRXZlbnRRdWV1ZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJFdmVudFF1ZXVlLmNwcApAQCAtMTIw
LDcgKzEyMCw3IEBAIHZvaWQgV29ya2VyRXZlbnRRdWV1ZTo6Y2xvc2UoKQogewogICAgIG1faXND
bG9zZWQgPSB0cnVlOwogICAgIGZvciAoRXZlbnRUYXNrTWFwOjppdGVyYXRvciBpdCA9IG1fZXZl
bnRUYXNrTWFwLmJlZ2luKCk7IGl0ICE9IG1fZXZlbnRUYXNrTWFwLmVuZCgpOyArK2l0KSB7Ci0g
ICAgICAgIEV2ZW50RGlzcGF0Y2hlclRhc2sqIHRhc2sgPSBpdC0+c2Vjb25kOworICAgICAgICBF
dmVudERpc3BhdGNoZXJUYXNrKiB0YXNrID0gaXQtPnZhbHVlOwogICAgICAgICB0YXNrLT5jYW5j
ZWwoKTsKICAgICB9CiAgICAgbV9ldmVudFRhc2tNYXAuY2xlYXIoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwv
WE1MSHR0cFJlcXVlc3QuY3BwCmluZGV4IGE3MWM0NDU1NTM4N2Y1ZmY4Njg0NDM1Mjk4NzQyNDQ0
MmM2ODg1MDEuLjk5NjdiMjJhZTk2ZTJiMWRiNzliMmUyN2IzYTA3MGI3MzQwMWJlYTggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcApAQCAtOTAxLDcgKzkwMSw3IEBAIHZvaWQg
WE1MSHR0cFJlcXVlc3Q6OnNldFJlcXVlc3RIZWFkZXJJbnRlcm5hbChjb25zdCBBdG9taWNTdHJp
bmcmIG5hbWUsIGNvbnN0IFN0CiB7CiAgICAgSFRUUEhlYWRlck1hcDo6QWRkUmVzdWx0IHJlc3Vs
dCA9IG1fcmVxdWVzdEhlYWRlcnMuYWRkKG5hbWUsIHZhbHVlKTsKICAgICBpZiAoIXJlc3VsdC5p
c05ld0VudHJ5KQotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCArPSAiLCAiICsgdmFs
dWU7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgKz0gIiwgIiArIHZhbHVlOwogfQog
CiBTdHJpbmcgWE1MSHR0cFJlcXVlc3Q6OmdldFJlcXVlc3RIZWFkZXIoY29uc3QgQXRvbWljU3Ry
aW5nJiBuYW1lKSBjb25zdApAQCAtOTI4LDE2ICs5MjgsMTYgQEAgU3RyaW5nIFhNTEh0dHBSZXF1
ZXN0OjpnZXRBbGxSZXNwb25zZUhlYWRlcnMoRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiAgICAg
ICAgIC8vICAgICAyKSBUaGVyZSdzIG5vIGtub3duIGhhcm0gaW4gaGlkaW5nIFNldC1Db29raWUg
aGVhZGVyIGZpZWxkcyBlbnRpcmVseTsgd2UgZG9uJ3QKICAgICAgICAgLy8gICAgICAgIGtub3cg
YW55IHdpZGVseSB1c2VkIHRlY2huaXF1ZSB0aGF0IHJlcXVpcmVzIGFjY2VzcyB0byB0aGVtLgog
ICAgICAgICAvLyAgICAgMykgRmlyZWZveCBoYXMgaW1wbGVtZW50ZWQgdGhpcyBwb2xpY3kuCi0g
ICAgICAgIGlmIChpc1NldENvb2tpZUhlYWRlcihpdC0+Zmlyc3QpICYmICFzZWN1cml0eU9yaWdp
bigpLT5jYW5Mb2FkTG9jYWxSZXNvdXJjZXMoKSkKKyAgICAgICAgaWYgKGlzU2V0Q29va2llSGVh
ZGVyKGl0LT5rZXkpICYmICFzZWN1cml0eU9yaWdpbigpLT5jYW5Mb2FkTG9jYWxSZXNvdXJjZXMo
KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGlmICghbV9zYW1lT3JpZ2luUmVx
dWVzdCAmJiAhaXNPbkFjY2Vzc0NvbnRyb2xSZXNwb25zZUhlYWRlcldoaXRlbGlzdChpdC0+Zmly
c3QpICYmICFhY2Nlc3NDb250cm9sRXhwb3NlSGVhZGVyU2V0LmNvbnRhaW5zKGl0LT5maXJzdCkp
CisgICAgICAgIGlmICghbV9zYW1lT3JpZ2luUmVxdWVzdCAmJiAhaXNPbkFjY2Vzc0NvbnRyb2xS
ZXNwb25zZUhlYWRlcldoaXRlbGlzdChpdC0+a2V5KSAmJiAhYWNjZXNzQ29udHJvbEV4cG9zZUhl
YWRlclNldC5jb250YWlucyhpdC0+a2V5KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5maXJzdCk7CisgICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKGl0LT5rZXkpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnOicpOwog
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnICcpOwotICAgICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZChpdC0+c2Vjb25kKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPnZh
bHVlKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xyJyk7CiAgICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKCdcbicpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3htbC9YUGF0aEZ1bmN0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhGdW5jdGlv
bnMuY3BwCmluZGV4IDcwN2NjN2ZjZTJjNzM2MThlODI5ODZkZDZiOTZjNWZlZjczOThlY2IuLmVj
YjlmZjk4MTI5M2M5MzRlNmE2MmNiYmM2ZjA5ODYzYmRmYjhiNzIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3htbC9YUGF0aEZ1bmN0aW9ucy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1s
L1hQYXRoRnVuY3Rpb25zLmNwcApAQCAtNzIzLDcgKzcyMyw3IEBAIEZ1bmN0aW9uKiBjcmVhdGVG
dW5jdGlvbihjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uKj4mIGFy
Z3MpCiAgICAgSGFzaE1hcDxTdHJpbmcsIEZ1bmN0aW9uUmVjPjo6aXRlcmF0b3IgZnVuY3Rpb25N
YXBJdGVyID0gZnVuY3Rpb25NYXAtPmZpbmQobmFtZSk7CiAgICAgRnVuY3Rpb25SZWMqIGZ1bmN0
aW9uUmVjID0gMDsKIAotICAgIGlmIChmdW5jdGlvbk1hcEl0ZXIgPT0gZnVuY3Rpb25NYXAtPmVu
ZCgpIHx8ICEoZnVuY3Rpb25SZWMgPSAmZnVuY3Rpb25NYXBJdGVyLT5zZWNvbmQpLT5hcmdzLmNv
bnRhaW5zKGFyZ3Muc2l6ZSgpKSkKKyAgICBpZiAoZnVuY3Rpb25NYXBJdGVyID09IGZ1bmN0aW9u
TWFwLT5lbmQoKSB8fCAhKGZ1bmN0aW9uUmVjID0gJmZ1bmN0aW9uTWFwSXRlci0+dmFsdWUpLT5h
cmdzLmNvbnRhaW5zKGFyZ3Muc2l6ZSgpKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBGdW5j
dGlvbiogZnVuY3Rpb24gPSBmdW5jdGlvblJlYy0+ZmFjdG9yeUZuKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS94bWwvWFBhdGhQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUveG1sL1hQ
YXRoUGFyc2VyLmNwcAppbmRleCA2MmQ4ZWUzN2ZkNmViYjc0YTU4MGEwMGM1OWJlYjZjZDQwYzVh
OGI3Li4xMDk4ZTU0YTIyOTA3NzlmMWUwOGU5ODAyMTAxMzAzN2U2NmRhODlmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3htbC9YUGF0aFBhcnNlci5jcHAKQEAgLTEwNiw3ICsxMDYsNyBAQCBzdGF0aWMgYm9vbCBpc0F4
aXNOYW1lKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RlcDo6QXhpcyYgdHlwZSkKICAgICBBeGlzTmFt
ZXNNYXA6Oml0ZXJhdG9yIGl0ID0gYXhpc05hbWVzLmZpbmQobmFtZSk7CiAgICAgaWYgKGl0ID09
IGF4aXNOYW1lcy5lbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHR5cGUgPSBpdC0+
c2Vjb25kOworICAgIHR5cGUgPSBpdC0+dmFsdWU7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yTGlieHNsdC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwCmluZGV4IDA3NmE4NTJk
MDZkODM3MTAzNzYyMjY0NWIwMTE5NDUyZWNiZTI0ZDQuLjllYTJhYTcyMTA1Y2Y3YTgwNDkzNmQz
MDcxMjQ5ODhmNGM0MjFlNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YU0xUUHJv
Y2Vzc29yTGlieHNsdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JM
aWJ4c2x0LmNwcApAQCAtMjI1LDggKzIyNSw4IEBAIHN0YXRpYyBjb25zdCBjaGFyKiogeHNsdFBh
cmFtQXJyYXlGcm9tUGFyYW1ldGVyTWFwKFhTTFRQcm9jZXNzb3I6OlBhcmFtZXRlck1hcCYKICAg
ICBYU0xUUHJvY2Vzc29yOjpQYXJhbWV0ZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IHBhcmFtZXRlcnMu
ZW5kKCk7CiAgICAgdW5zaWduZWQgaW5kZXggPSAwOwogICAgIGZvciAoWFNMVFByb2Nlc3Nvcjo6
UGFyYW1ldGVyTWFwOjppdGVyYXRvciBpdCA9IHBhcmFtZXRlcnMuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7Ci0gICAgICAgIHBhcmFtZXRlckFycmF5W2luZGV4KytdID0gZmFzdFN0ckR1cChp
dC0+Zmlyc3QudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIHBhcmFtZXRlckFycmF5W2luZGV4Kytd
ID0gZmFzdFN0ckR1cChpdC0+c2Vjb25kLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBwYXJhbWV0
ZXJBcnJheVtpbmRleCsrXSA9IGZhc3RTdHJEdXAoaXQtPmtleS51dGY4KCkuZGF0YSgpKTsKKyAg
ICAgICAgcGFyYW1ldGVyQXJyYXlbaW5kZXgrK10gPSBmYXN0U3RyRHVwKGl0LT52YWx1ZS51dGY4
KCkuZGF0YSgpKTsKICAgICB9CiAgICAgcGFyYW1ldGVyQXJyYXlbaW5kZXhdID0gMDsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JRdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvclF0LmNwcAppbmRleCBjMGFiNGQ2OTMxN2Q1YzMxYzM2
Y2I0YWEwM2RiZTcwNmMxNTNhOTk4Li5hNGM5ZDc0Y2QyYWE1YWU1YjdkM2M3OWZmMTU4MGQxNjNm
NTcwOGY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvclF0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvclF0LmNwcApAQCAtMTQzLDcg
KzE0Myw3IEBAIGJvb2wgWFNMVFByb2Nlc3Nvcjo6dHJhbnNmb3JtVG9TdHJpbmcoTm9kZSogc291
cmNlTm9kZSwgU3RyaW5nJiwgU3RyaW5nJiByZXN1bHRTCiAKICAgICBYU0xUUHJvY2Vzc29yOjpQ
YXJhbWV0ZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fcGFyYW1ldGVycy5lbmQoKTsKICAgICBmb3Ig
KFhTTFRQcm9jZXNzb3I6OlBhcmFtZXRlck1hcDo6aXRlcmF0b3IgaXQgPSBtX3BhcmFtZXRlcnMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBxdWVyeS5iaW5kVmFyaWFibGUoUVN0
cmluZyhpdC0+Zmlyc3QpLCBRWG1sSXRlbShRVmFyaWFudChRU3RyaW5nKGl0LT5zZWNvbmQpKSkp
OworICAgICAgICBxdWVyeS5iaW5kVmFyaWFibGUoUVN0cmluZyhpdC0+a2V5KSwgUVhtbEl0ZW0o
UVZhcmlhbnQoUVN0cmluZyhpdC0+dmFsdWUpKSkpOwogCiAgICAgUVN0cmluZyBzb3VyY2U7CiAg
ICAgaWYgKHNvdXJjZUlzRG9jdW1lbnQgJiYgb3duZXJEb2N1bWVudC0+dHJhbnNmb3JtU291cmNl
KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL0JhY2tpbmdTdG9y
ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL0JhY2tpbmdTdG9yZS5jcHAKaW5k
ZXggOWMzMjFlZDI2NTI4OGI3YTg0M2MzNzgxYjlkMGRmMTBlZDFiNjFiYy4uYzc3MmYxYjlhMjVh
NzU0ZTI5OGUyNWI0Y2UzMGU3NzMwNWZkYThjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9i
bGFja2JlcnJ5L0FwaS9CYWNraW5nU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2ti
ZXJyeS9BcGkvQmFja2luZ1N0b3JlLmNwcApAQCAtNzIzLDggKzcyMyw4IEBAIHZvaWQgQmFja2lu
Z1N0b3JlUHJpdmF0ZTo6c2V0QmFja2luZ1N0b3JlUmVjdChjb25zdCBQbGF0Zm9ybTo6SW50UmVj
dCYgYmFja2luZ1N0CiAgICAgLy8gb3VyIG5ldyBiYWNraW5nIHN0b3JlIHJlY3QuCiAgICAgVGls
ZU1hcDo6Y29uc3RfaXRlcmF0b3IgdGlsZU1hcEVuZCA9IGN1cnJlbnRNYXAuZW5kKCk7CiAgICAg
Zm9yIChUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGN1cnJlbnRNYXAuYmVnaW4oKTsgaXQg
IT0gdGlsZU1hcEVuZDsgKytpdCkgewotICAgICAgICBUaWxlSW5kZXggb2xkSW5kZXggPSBpdC0+
Zmlyc3Q7Ci0gICAgICAgIEJhY2tpbmdTdG9yZVRpbGUqIHRpbGUgPSBpdC0+c2Vjb25kOworICAg
ICAgICBUaWxlSW5kZXggb2xkSW5kZXggPSBpdC0+a2V5OworICAgICAgICBCYWNraW5nU3RvcmVU
aWxlKiB0aWxlID0gaXQtPnZhbHVlOwogCiAgICAgICAgIC8vIFJlc2V0IHRoZSBvbGQgaW5kZXgu
CiAgICAgICAgIHJlc2V0VGlsZShvbGRJbmRleCwgdGlsZSwgZmFsc2UgLypyZXNldEJhY2tncm91
bmQqLyk7CkBAIC03ODAsOCArNzgwLDggQEAgdm9pZCBCYWNraW5nU3RvcmVQcml2YXRlOjpzZXRC
YWNraW5nU3RvcmVSZWN0KGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0JiBiYWNraW5nU3QKICAgICBz
aXplX3QgaSA9IDA7CiAgICAgVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgbGVmdE92ZXJFbmQgPSBs
ZWZ0T3ZlclRpbGVzLmVuZCgpOwogICAgIGZvciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBsZWZ0T3ZlclRpbGVzLmJlZ2luKCk7IGl0ICE9IGxlZnRPdmVyRW5kOyArK2l0KSB7Ci0gICAg
ICAgIFRpbGVJbmRleCBvbGRJbmRleCA9IGl0LT5maXJzdDsKLSAgICAgICAgQmFja2luZ1N0b3Jl
VGlsZSogdGlsZSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFRpbGVJbmRleCBvbGRJbmRleCA9IGl0
LT5rZXk7CisgICAgICAgIEJhY2tpbmdTdG9yZVRpbGUqIHRpbGUgPSBpdC0+dmFsdWU7CiAgICAg
ICAgIGlmIChpID49IGluZGV4ZXNUb0ZpbGwuc2l6ZSgpKSB7CiAgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTY3NSw3ICsxNjc1LDcgQEAg
UGxhdGZvcm06OkludFJlY3QgQmFja2luZ1N0b3JlUHJpdmF0ZTo6dmlzaWJsZVRpbGVzUmVjdCgp
IGNvbnN0CiAgICAgVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY3VycmVudE1hcC5lbmQo
KTsKICAgICBmb3IgKFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY3VycmVudE1hcC5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgVGlsZVJlY3QgdGlsZVJlY3Q7Ci0gICAg
ICAgIHRpbGVSZWN0LmZpcnN0ID0gaXQtPmZpcnN0OworICAgICAgICB0aWxlUmVjdC5maXJzdCA9
IGl0LT5rZXk7CiAgICAgICAgIHRpbGVSZWN0LnNlY29uZCA9IHRoaXMtPnRpbGVSZWN0KCk7CiAg
ICAgICAgIFBsYXRmb3JtOjpJbnRSZWN0IHRpbGUgPSBtYXBGcm9tVGlsZXNUb1RyYW5zZm9ybWVk
Q29udGVudHModGlsZVJlY3QpOwogICAgICAgICBpZiAodGlsZS5pbnRlcnNlY3RzKHZpc2libGVD
b250ZW50c1JlY3QoKSkpCkBAIC0xNzM2LDcgKzE3MzYsNyBAQCB2b2lkIEJhY2tpbmdTdG9yZVBy
aXZhdGU6OnJlc2V0VGlsZXMoYm9vbCByZXNldEJhY2tncm91bmQpCiAKICAgICBUaWxlTWFwOjpj
b25zdF9pdGVyYXRvciBlbmQgPSBjdXJyZW50TWFwLmVuZCgpOwogICAgIGZvciAoVGlsZU1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBjdXJyZW50TWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkK
LSAgICAgICAgcmVzZXRUaWxlKGl0LT5maXJzdCwgaXQtPnNlY29uZCwgcmVzZXRCYWNrZ3JvdW5k
KTsKKyAgICAgICAgcmVzZXRUaWxlKGl0LT5rZXksIGl0LT52YWx1ZSwgcmVzZXRCYWNrZ3JvdW5k
KTsKIH0KIAogdm9pZCBCYWNraW5nU3RvcmVQcml2YXRlOjp1cGRhdGVUaWxlcyhib29sIHVwZGF0
ZVZpc2libGUsIGJvb2wgaW1tZWRpYXRlKQpAQCAtMTc0OSwxMCArMTc0OSwxMCBAQCB2b2lkIEJh
Y2tpbmdTdG9yZVByaXZhdGU6OnVwZGF0ZVRpbGVzKGJvb2wgdXBkYXRlVmlzaWJsZSwgYm9vbCBp
bW1lZGlhdGUpCiAKICAgICBUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBjdXJyZW50TWFw
LmVuZCgpOwogICAgIGZvciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjdXJyZW50TWFw
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBib29sIGlzVmlzaWJsZSA9IGlz
VGlsZVZpc2libGUoaXQtPmZpcnN0KTsKKyAgICAgICAgYm9vbCBpc1Zpc2libGUgPSBpc1RpbGVW
aXNpYmxlKGl0LT5rZXkpOwogICAgICAgICBpZiAoIXVwZGF0ZVZpc2libGUgJiYgaXNWaXNpYmxl
KQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHVwZGF0ZVRpbGUoaXQtPmZpcnN0LCBp
bW1lZGlhdGUpOworICAgICAgICB1cGRhdGVUaWxlKGl0LT5rZXksIGltbWVkaWF0ZSk7CiAgICAg
fQogfQogCkBAIC0xNzczLDggKzE3NzMsOCBAQCB2b2lkIEJhY2tpbmdTdG9yZVByaXZhdGU6OnVw
ZGF0ZVRpbGVzRm9yU2Nyb2xsT3JOb3RSZW5kZXJlZFJlZ2lvbihib29sIGNoZWNrTG9hZAogCiAg
ICAgVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY3VycmVudE1hcC5lbmQoKTsKICAgICBm
b3IgKFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY3VycmVudE1hcC5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKLSAgICAgICAgVGlsZUluZGV4IGluZGV4ID0gaXQtPmZpcnN0OwotICAg
ICAgICBCYWNraW5nU3RvcmVUaWxlKiB0aWxlID0gaXQtPnNlY29uZDsKKyAgICAgICAgVGlsZUlu
ZGV4IGluZGV4ID0gaXQtPmtleTsKKyAgICAgICAgQmFja2luZ1N0b3JlVGlsZSogdGlsZSA9IGl0
LT52YWx1ZTsKICAgICAgICAgYm9vbCBpc1Zpc2libGUgPSBpc1RpbGVWaXNpYmxlKGluZGV4KTsK
ICAgICAgICAgLy8gVGhlIHJlY3QgaW4gdHJhbnNmb3JtZWQgY29udGVudHMgY29vcmRpbmF0ZXMu
CiAgICAgICAgIFBsYXRmb3JtOjpJbnRSZWN0IHJlY3Qob3JpZ2luT2ZUaWxlKGluZGV4KSwgdGls
ZVNpemUoKSk7CkBAIC0xOTE3LDggKzE5MTcsOCBAQCBCYWNraW5nU3RvcmVQcml2YXRlOjpUaWxl
UmVjdExpc3QgQmFja2luZ1N0b3JlUHJpdmF0ZTo6bWFwRnJvbVRyYW5zZm9ybWVkQ29udGVudAog
ICAgIFRpbGVSZWN0TGlzdCB0aWxlUmVjdExpc3Q7CiAgICAgVGlsZU1hcDo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gdGlsZU1hcC5lbmQoKTsKICAgICBmb3IgKFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gdGlsZU1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgVGlsZUlu
ZGV4IGluZGV4ID0gaXQtPmZpcnN0OwotICAgICAgICBCYWNraW5nU3RvcmVUaWxlKiB0aWxlID0g
aXQtPnNlY29uZDsKKyAgICAgICAgVGlsZUluZGV4IGluZGV4ID0gaXQtPmtleTsKKyAgICAgICAg
QmFja2luZ1N0b3JlVGlsZSogdGlsZSA9IGl0LT52YWx1ZTsKIAogICAgICAgICAvLyBOZWVkIHRv
IG1hcCB0aGUgcmVjdCB0byB0aWxlIGNvb3JkaW5hdGVzLgogICAgICAgICBQbGF0Zm9ybTo6SW50
UmVjdCByID0gcmVjdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJD
b3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnkuY3BwIGIvU291cmNlL1dlYktp
dC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50QmxhY2tCZXJyeS5j
cHAKaW5kZXggNjQ1Zjk1MTVjOTExNzEyNjJiMzZiNmI3MGEzNmM5NTg1YzNmNGZlNy4uZjJlYTg2
YTZjNWU0MGRmN2ExODY3NmNiYzcwZDA2MWQ2Njk1OWQ1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50QmxhY2tCZXJy
eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L0ZyYW1l
TG9hZGVyQ2xpZW50QmxhY2tCZXJyeS5jcHAKQEAgLTkzNyw4ICs5MzcsOCBAQCB2b2lkIEZyYW1l
TG9hZGVyQ2xpZW50QmxhY2tCZXJyeTo6ZGlzcGF0Y2hXaWxsU2VuZFJlcXVlc3QoRG9jdW1lbnRM
b2FkZXIqIGRvY0xvYQogICAgIG1fd2ViUGFnZVByaXZhdGUtPm1fY2xpZW50LT5wb3B1bGF0ZUN1
c3RvbUhlYWRlcnMocGxhdGZvcm1SZXF1ZXN0KTsKICAgICBjb25zdCBCbGFja0JlcnJ5OjpQbGF0
Zm9ybTo6TmV0d29ya1JlcXVlc3Q6OkhlYWRlckxpc3QmIGhlYWRlckxpc3RzID0gcGxhdGZvcm1S
ZXF1ZXN0LmdldEhlYWRlckxpc3RSZWYoKTsKICAgICBmb3IgKEJsYWNrQmVycnk6OlBsYXRmb3Jt
OjpOZXR3b3JrUmVxdWVzdDo6SGVhZGVyTGlzdDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBoZWFkZXJM
aXN0cy5iZWdpbigpOyBpdCAhPSBoZWFkZXJMaXN0cy5lbmQoKTsgKytpdCkgewotICAgICAgICBz
dGQ6OnN0cmluZyBoZWFkZXJTdHJpbmcgPSBpdC0+Zmlyc3Q7Ci0gICAgICAgIHN0ZDo6c3RyaW5n
IGhlYWRlclZhbHVlU3RyaW5nID0gaXQtPnNlY29uZDsKKyAgICAgICAgc3RkOjpzdHJpbmcgaGVh
ZGVyU3RyaW5nID0gaXQtPmtleTsKKyAgICAgICAgc3RkOjpzdHJpbmcgaGVhZGVyVmFsdWVTdHJp
bmcgPSBpdC0+dmFsdWU7CiAgICAgICAgIHJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKFN0cmlu
Zzo6ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2soaGVhZGVyU3RyaW5nLmRhdGEoKSwgaGVhZGVy
U3RyaW5nLmxlbmd0aCgpKSwgU3RyaW5nOjpmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayhoZWFk
ZXJWYWx1ZVN0cmluZy5kYXRhKCksIGhlYWRlclZhbHVlU3RyaW5nLmxlbmd0aCgpKSk7CiAgICAg
fQogICAgIGlmICghaXNNYWluUmVzb3VyY2VMb2FkKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9u
UHJlc2VudGVySW1wbC5jcHAKaW5kZXggNmIyOTIxMDI5NDYyNzdkYTI4ZTc5OGQ3ZWVkZjhiOTM5
YzUzMTljNy4uNDhjY2YzYWM1MWFiZGUzNjVhYjAyNzU5ZDFkYWRjNDE2ZmMwMGY1NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlv
blByZXNlbnRlckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3Jl
U3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmNwcApAQCAtODEsNyArODEsNyBAQCB2
b2lkIE5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6OmNhbmNlbChOb3RpZmljYXRpb24qIG5vdGlm
aWNhdGlvbikKICAgICBpZiAoaXQgPT0gbV9ub3RpZmljYXRpb25zLmVuZCgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBtX3BsYXRmb3JtUHJlc2VudGVyLT5jYW5jZWwoc3RkOjpzdHJpbmcoaXQt
PnNlY29uZC51dGY4KCkuZGF0YSgpKSk7CisgICAgbV9wbGF0Zm9ybVByZXNlbnRlci0+Y2FuY2Vs
KHN0ZDo6c3RyaW5nKGl0LT52YWx1ZS51dGY4KCkuZGF0YSgpKSk7CiAgICAgbV9ub3RpZmljYXRp
b25zLnJlbW92ZShpdCk7CiB9CiAKQEAgLTEwOCwxMiArMTA4LDEyIEBAIHZvaWQgTm90aWZpY2F0
aW9uUHJlc2VudGVySW1wbDo6b25QZXJtaXNzaW9uKGNvbnN0IHN0ZDo6c3RyaW5nJiBkb21haW4s
IGJvb2wgaXNBCiAgICAgU3RyaW5nIGRvbWFpblN0cmluZyA9IFN0cmluZzo6ZnJvbVVURjgoZG9t
YWluLmNfc3RyKCkpOwogICAgIFBlcm1pc3Npb25SZXF1ZXN0TWFwOjppdGVyYXRvciBpdCA9IG1f
cGVybWlzc2lvblJlcXVlc3RzLmJlZ2luKCk7CiAgICAgZm9yICg7IGl0ICE9IG1fcGVybWlzc2lv
blJlcXVlc3RzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+Zmlyc3QtPnVybCgpLmhv
c3QoKSAhPSBkb21haW5TdHJpbmcpCisgICAgICAgIGlmIChpdC0+a2V5LT51cmwoKS5ob3N0KCkg
IT0gZG9tYWluU3RyaW5nKQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgaWYgKGlz
QWxsb3dlZCkgewogICAgICAgICAgICAgbV9hbGxvd2VkRG9tYWlucy5hZGQoZG9tYWluU3RyaW5n
KTsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPmhhbmRsZUV2ZW50KCk7CisgICAgICAgICAgICBp
dC0+dmFsdWUtPmhhbmRsZUV2ZW50KCk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbV9h
bGxvd2VkRG9tYWlucy5yZW1vdmUoZG9tYWluU3RyaW5nKTsKIApAQCAtMTQ0LDkgKzE0NCw5IEBA
IHZvaWQgTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6bm90aWZpY2F0aW9uQ2xpY2tlZChjb25z
dCBzdGQ6OnN0cmluZyYgaWQpCiAgICAgU3RyaW5nIGlkU3RyaW5nID0gU3RyaW5nOjpmcm9tVVRG
OChpZC5jX3N0cigpKTsKICAgICBOb3RpZmljYXRpb25NYXA6Oml0ZXJhdG9yIGl0ID0gbV9ub3Rp
ZmljYXRpb25zLmJlZ2luKCk7CiAgICAgZm9yICg7IGl0ICE9IG1fbm90aWZpY2F0aW9ucy5lbmQo
KTsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnNlY29uZCA9PSBpZFN0cmluZyAmJiBpdC0+Zmly
c3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkgewotICAgICAgICAgICAgUmVmUHRyPE5vdGlm
aWNhdGlvbj4gbm90aWZpY2F0aW9uID0gaXQtPmZpcnN0OwotICAgICAgICAgICAgaXQtPmZpcnN0
LT5kaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmNsaWNrRXZlbnQsIGZh
bHNlLCB0cnVlKSk7CisgICAgICAgIGlmIChpdC0+dmFsdWUgPT0gaWRTdHJpbmcgJiYgaXQtPmtl
eS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSB7CisgICAgICAgICAgICBSZWZQdHI8Tm90aWZp
Y2F0aW9uPiBub3RpZmljYXRpb24gPSBpdC0+a2V5OworICAgICAgICAgICAgaXQtPmtleS0+ZGlz
cGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50LCBmYWxzZSwg
dHJ1ZSkpOwogICAgICAgICAgICAgbV9ub3RpZmljYXRpb25zLnJlbW92ZShub3RpZmljYXRpb24p
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9GYXRGaW5nZXJzLmNwcCBiL1NvdXJjZS9XZWJL
aXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0ZhdEZpbmdlcnMuY3BwCmluZGV4IGI0OWUyNDg1
Y2Q3MzE5NGNjMGQ1ZjVjZDg5ZGYzODAzMDg3ZGU0NzYuLmU4MmMwMjZhNzllYWU3N2Q0NzZlODJh
MGY3MzhhMTZjOWFlODg0ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9X
ZWJLaXRTdXBwb3J0L0ZhdEZpbmdlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJy
eS9XZWJLaXRTdXBwb3J0L0ZhdEZpbmdlcnMuY3BwCkBAIC0yMjksOCArMjI5LDggQEAgY29uc3Qg
RmF0RmluZ2Vyc1Jlc3VsdCBGYXRGaW5nZXJzOjpmaW5kQmVzdFBvaW50KCkKIAogICAgIFZlY3Rv
cjxJbnRlcnNlY3RpbmdSZWdpb24+Ojpjb25zdF9pdGVyYXRvciBlbmRJdCA9IGludGVyc2VjdGlu
Z1JlZ2lvbnMuZW5kKCk7CiAgICAgZm9yIChWZWN0b3I8SW50ZXJzZWN0aW5nUmVnaW9uPjo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBpbnRlcnNlY3RpbmdSZWdpb25zLmJlZ2luKCk7IGl0ICE9IGVuZEl0
OyArK2l0KSB7Ci0gICAgICAgIE5vZGUqIGN1cnJlbnROb2RlID0gaXQtPmZpcnN0OwotICAgICAg
ICBQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbiBjdXJyZW50SW50ZXJzZWN0aW9uUmVnaW9uID0gaXQt
PnNlY29uZDsKKyAgICAgICAgTm9kZSogY3VycmVudE5vZGUgPSBpdC0+a2V5OworICAgICAgICBQ
bGF0Zm9ybTo6SW50UmVjdFJlZ2lvbiBjdXJyZW50SW50ZXJzZWN0aW9uUmVnaW9uID0gaXQtPnZh
bHVlOwogCiAgICAgICAgIGludCBjdXJyZW50SW50ZXJzZWN0aW9uUmVnaW9uQXJlYSA9IGN1cnJl
bnRJbnRlcnNlY3Rpb25SZWdpb24uYXJlYSgpOwogICAgICAgICBpZiAoY3VycmVudEludGVyc2Vj
dGlvblJlZ2lvbkFyZWEgPiBsYXJnZXN0SW50ZXJzZWN0aW9uUmVnaW9uQXJlYQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvRnJhbWVMYXllcnMuY3Bw
IGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvRnJhbWVMYXllcnMuY3Bw
CmluZGV4IGI4NzU2NDZkYTRmOWFjOTYyZGMzMjkwYTQ2Mjk3MWUyNmJjZDQ0OTEuLjg3ZDdiNWIw
YjM4YmI2MGE5ZGZmODcxMWNkN2ViMzM5NGQ5YjUwNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0ZyYW1lTGF5ZXJzLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9GcmFtZUxheWVycy5jcHAKQEAgLTkxLDcg
KzkxLDcgQEAgdm9pZCBGcmFtZUxheWVyczo6cmVtb3ZlTGF5ZXJCeUZyYW1lKEZyYW1lKiBmcmFt
ZSkKICAgICBBU1NFUlQoZnJhbWUpOwogICAgIEZyYW1lTGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0g
bV9mcmFtZUxheWVycy5maW5kKGZyYW1lKTsKICAgICBpZiAoaXQgIT0gbV9mcmFtZUxheWVycy5l
bmQoKSkgewotICAgICAgICBMYXllcldlYktpdFRocmVhZCogbGF5ZXIgPSBpdC0+c2Vjb25kOwor
ICAgICAgICBMYXllcldlYktpdFRocmVhZCogbGF5ZXIgPSBpdC0+dmFsdWU7CiAgICAgICAgIGlm
IChsYXllci0+c3VwZXJsYXllcigpKQogICAgICAgICAgICAgbGF5ZXItPnJlbW92ZUZyb21TdXBl
cmxheWVyKCk7CiAgICAgICAgIG1fZnJhbWVMYXllcnMucmVtb3ZlKGl0KTsKQEAgLTEwNCw3ICsx
MDQsNyBAQCB2b2lkIEZyYW1lTGF5ZXJzOjpjb21taXRPbldlYktpdFRocmVhZChkb3VibGUgc2Nh
bGUpCiAgICAgQVNTRVJUKG1fcm9vdExheWVyKTsKICAgICBpZiAoIWlzUm9vdExheWVyTWFpbkZy
YW1lTGF5ZXIoKSkgewogICAgICAgICBmb3IgKEZyYW1lTGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0g
bV9mcmFtZUxheWVycy5iZWdpbigpOyBpdCAhPSBtX2ZyYW1lTGF5ZXJzLmVuZCgpOyArK2l0KQot
ICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0QWJzb2x1dGVPZmZzZXQoZnJhbWVMYXllckFic29s
dXRlT2Zmc2V0KGl0LT5maXJzdCkpOworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRBYnNvbHV0
ZU9mZnNldChmcmFtZUxheWVyQWJzb2x1dGVPZmZzZXQoaXQtPmtleSkpOwogICAgIH0KICAgICBt
X3Jvb3RMYXllci0+Y29tbWl0T25XZWJLaXRUaHJlYWQoc2NhbGUpOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVz
dE1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViR2VvbG9jYXRpb25Q
ZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuY3BwCmluZGV4IDRjMGVkOWNkNzE3YjZmNGQ1YWE2YWZh
Zjk3MGJlYjY5Njc5Njg5ZDMuLjFlZWFjNjY3YmRmNjZiM2YxOTNmYjMzNWEzODcxMjhmYmM5MTI2
NzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdlb2xvY2F0aW9u
UGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5jcHAKQEAgLTY0LDcg
KzY0LDcgQEAgYm9vbCBXZWJHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlcjo6cmVt
b3ZlKGNvbnN0IFdlYktpdDo6V2ViR2VvbG9jYXRpb24KICAgICBHZW9sb2NhdGlvbklkTWFwOjpp
dGVyYXRvciBpdCA9IG1fcHJpdmF0ZS0+bV9nZW9sb2NhdGlvbklkTWFwLmZpbmQoZ2VvbG9jYXRp
b24pOwogICAgIGlmIChpdCA9PSBtX3ByaXZhdGUtPm1fZ2VvbG9jYXRpb25JZE1hcC5lbmQoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlkID0gaXQtPnNlY29uZDsKKyAgICBpZCA9IGl0
LT52YWx1ZTsKICAgICBtX3ByaXZhdGUtPm1fZ2VvbG9jYXRpb25JZE1hcC5yZW1vdmUoaXQpOwog
ICAgIG1fcHJpdmF0ZS0+bV9pZEdlb2xvY2F0aW9uTWFwLnJlbW92ZShpZCk7CiAgICAgcmV0dXJu
IHRydWU7CkBAIC03NSw3ICs3NSw3IEBAIGJvb2wgV2ViR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVx
dWVzdE1hbmFnZXI6OnJlbW92ZShpbnQgaWQsIFdlYktpdDo6V2ViR2VvbG9jYXRpCiAgICAgSWRH
ZW9sb2NhdGlvbk1hcDo6aXRlcmF0b3IgaXQgPSBtX3ByaXZhdGUtPm1faWRHZW9sb2NhdGlvbk1h
cC5maW5kKGlkKTsKICAgICBpZiAoaXQgPT0gbV9wcml2YXRlLT5tX2lkR2VvbG9jYXRpb25NYXAu
ZW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBHZW9sb2NhdGlvbiogZ2VvbG9jYXRp
b24gPSBpdC0+c2Vjb25kOworICAgIEdlb2xvY2F0aW9uKiBnZW9sb2NhdGlvbiA9IGl0LT52YWx1
ZTsKICAgICBwZXJtaXNzaW9uUmVxdWVzdCA9IFdlYkdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVl
c3QoZ2VvbG9jYXRpb24pOwogICAgIG1fcHJpdmF0ZS0+bV9pZEdlb2xvY2F0aW9uTWFwLnJlbW92
ZShpdCk7CiAgICAgbV9wcml2YXRlLT5tX2dlb2xvY2F0aW9uSWRNYXAucmVtb3ZlKGdlb2xvY2F0
aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkhUVFBMb2Fk
SW5mby5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJIVFRQTG9hZEluZm8uY3Bw
CmluZGV4IDNjMGNmMTVkNWM5YzczYWM2NTc4YzliYTc3NmNlOWJlOTM0YWVlMTMuLjZmZmNlOWM2
ODcwNmI3N2E1MzFlMTVmOGMxODE3NWQyNDRmMGUzODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkhUVFBMb2FkSW5mby5jcHAKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViSFRUUExvYWRJbmZvLmNwcApAQCAtMTA1LDcgKzEwNSw3IEBAIHN0YXRp
YyB2b2lkIGFkZEhlYWRlcihIVFRQSGVhZGVyTWFwKiBtYXAsIGNvbnN0IFdlYlN0cmluZyYgbmFt
ZSwgY29uc3QgV2ViU3RyaW5nCiB7CiAgICAgSFRUUEhlYWRlck1hcDo6QWRkUmVzdWx0IHJlc3Vs
dCA9IG1hcC0+YWRkKG5hbWUsIHZhbHVlKTsKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQot
ICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCArPSAiLCAiICsgU3RyaW5nKHZhbHVlKTsK
KyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSArPSAiLCAiICsgU3RyaW5nKHZhbHVlKTsK
IH0KIAogdm9pZCBXZWJIVFRQTG9hZEluZm86OmFkZFJlcXVlc3RIZWFkZXIoY29uc3QgV2ViU3Ry
aW5nJiBuYW1lLCBjb25zdCBXZWJTdHJpbmcmIHZhbHVlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViVVJMUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJVUkxSZXF1ZXN0LmNwcAppbmRleCBjYmFjODI0N2Q0YTNhN2Y2MTFlYjliN2Q1
NTM3ZDQ5YmRhYTg4N2RhLi44MDY3ZDdkOTM0NTAyZjc5MzA4OWJjNDg1ZjExYWIyNDMzZDE3MmI4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJVUkxSZXF1ZXN0LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJVUkxSZXF1ZXN0LmNwcApAQCAt
MTk2LDcgKzE5Niw3IEBAIHZvaWQgV2ViVVJMUmVxdWVzdDo6dmlzaXRIVFRQSGVhZGVyRmllbGRz
KFdlYkhUVFBIZWFkZXJWaXNpdG9yKiB2aXNpdG9yKSBjb25zdAogewogICAgIGNvbnN0IEhUVFBI
ZWFkZXJNYXAmIG1hcCA9IG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlcXVlc3QtPmh0dHBIZWFkZXJG
aWVsZHMoKTsKICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFw
LmJlZ2luKCk7IGl0ICE9IG1hcC5lbmQoKTsgKytpdCkKLSAgICAgICAgdmlzaXRvci0+dmlzaXRI
ZWFkZXIoaXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsKKyAgICAgICAgdmlzaXRvci0+dmlzaXRIZWFk
ZXIoaXQtPmtleSwgaXQtPnZhbHVlKTsKIH0KIAogV2ViSFRUUEJvZHkgV2ViVVJMUmVxdWVzdDo6
aHR0cEJvZHkoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViVVJMUmVzcG9uc2UuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVVJMUmVz
cG9uc2UuY3BwCmluZGV4IDA3ZDVhNDVmODhjZTljOGEzNDM3NDkzM2MyYjQzNzY5ZTRhMDA3N2Mu
LjMxZTgyNTI3MmY3NmI3YmMzNDQ1OGE2NDc1OWFiM2FiNzEyNmU0NGYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlVSTFJlc3BvbnNlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJVUkxSZXNwb25zZS5jcHAKQEAgLTI1Myw3ICsyNTMsNyBA
QCB2b2lkIFdlYlVSTFJlc3BvbnNlOjphZGRIVFRQSGVhZGVyRmllbGQoY29uc3QgV2ViU3RyaW5n
JiBuYW1lLCBjb25zdCBXZWJTdHJpbmcmCiAgICAgSFRUUEhlYWRlck1hcDo6QWRkUmVzdWx0IHJl
c3VsdCA9CiAgICAgICAgIGNvbnN0X2Nhc3Q8SFRUUEhlYWRlck1hcCo+KCZtYXApLT5hZGQobmFt
ZSwgdmFsdWVTdHIpOwogICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJlc3Vs
dC5pdGVyYXRvci0+c2Vjb25kICs9ICIsICIgKyB2YWx1ZVN0cjsKKyAgICAgICAgcmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZSArPSAiLCAiICsgdmFsdWVTdHI7CiB9CiAKIHZvaWQgV2ViVVJMUmVzcG9u
c2U6OmNsZWFySFRUUEhlYWRlckZpZWxkKGNvbnN0IFdlYlN0cmluZyYgbmFtZSkKQEAgLTI2Nyw3
ICsyNjcsNyBAQCB2b2lkIFdlYlVSTFJlc3BvbnNlOjp2aXNpdEhUVFBIZWFkZXJGaWVsZHMoV2Vi
SFRUUEhlYWRlclZpc2l0b3IqIHZpc2l0b3IpIGNvbnN0CiB7CiAgICAgY29uc3QgSFRUUEhlYWRl
ck1hcCYgbWFwID0gbV9wcml2YXRlLT5tX3Jlc291cmNlUmVzcG9uc2UtPmh0dHBIZWFkZXJGaWVs
ZHMoKTsKICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLmJl
Z2luKCk7IGl0ICE9IG1hcC5lbmQoKTsgKytpdCkKLSAgICAgICAgdmlzaXRvci0+dmlzaXRIZWFk
ZXIoaXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsKKyAgICAgICAgdmlzaXRvci0+dmlzaXRIZWFkZXIo
aXQtPmtleSwgaXQtPnZhbHVlKTsKIH0KIAogZG91YmxlIFdlYlVSTFJlc3BvbnNlOjpsYXN0TW9k
aWZpZWREYXRlKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvV2ViU29ja2V0RXh0ZW5zaW9uRGlzcGF0Y2hlclRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9XZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyVGVzdC5jcHAKaW5kZXgg
MzU4OTgzYjgzOTkzMTRjZGEwMzdjOGMwMzI0OWVlOWI2NzJlOTY3Yi4uMjQ1MTRjZDU4ZmJmZDAw
YWFhODg3MjQyYTFhYzM2MzMxY2FlYjc4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9XZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyVGVzdC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyVGVz
dC5jcHAKQEAgLTEwMywxMCArMTAzLDEwIEBAIFRFU1RfRihXZWJTb2NrZXRFeHRlbnNpb25EaXNw
YXRjaGVyVGVzdCwgVGVzdFBhcmFtZXRlcnMpCiAgICAgRVhQRUNUX0VRKDIsIG1fcGFyc2VkUGFy
YW1ldGVyc1swXS5zaXplKCkpOwogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+OjppdGVyYXRv
ciBwYXJhbWV0ZXIgPSBtX3BhcnNlZFBhcmFtZXRlcnNbMF0uZmluZCgibWF4LWNoYW5uZWxzIik7
CiAgICAgRVhQRUNUX1RSVUUocGFyYW1ldGVyICE9IG1fcGFyc2VkUGFyYW1ldGVyc1swXS5lbmQo
KSk7Ci0gICAgRVhQRUNUX0VRKCI0IiwgcGFyYW1ldGVyLT5zZWNvbmQpOworICAgIEVYUEVDVF9F
USgiNCIsIHBhcmFtZXRlci0+dmFsdWUpOwogICAgIHBhcmFtZXRlciA9IG1fcGFyc2VkUGFyYW1l
dGVyc1swXS5maW5kKCJmbG93LWNvbnRyb2wiKTsKICAgICBFWFBFQ1RfVFJVRShwYXJhbWV0ZXIg
IT0gbV9wYXJzZWRQYXJhbWV0ZXJzWzBdLmVuZCgpKTsKLSAgICBFWFBFQ1RfVFJVRShwYXJhbWV0
ZXItPnNlY29uZC5pc051bGwoKSk7CisgICAgRVhQRUNUX1RSVUUocGFyYW1ldGVyLT52YWx1ZS5p
c051bGwoKSk7CiB9CiAKIFRFU1RfRihXZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyVGVzdCwg
VGVzdE11bHRpcGxlKQpAQCAtMTMxLDEyICsxMzEsMTIgQEAgVEVTVF9GKFdlYlNvY2tldEV4dGVu
c2lvbkRpc3BhdGNoZXJUZXN0LCBUZXN0TXVsdGlwbGUpCiAgICAgICAgIGNvbnN0IEhhc2hNYXA8
U3RyaW5nLCBTdHJpbmc+JiBwYXJzZWRQYXJhbWV0ZXJzID0gbV9wYXJzZWRQYXJhbWV0ZXJzW2ld
OwogICAgICAgICBFWFBFQ1RfRVEoZXhwZWN0ZWRbaV0ucGFyYW1ldGVycy5zaXplKCksIG1fcGFy
c2VkUGFyYW1ldGVyc1tpXS5zaXplKCkpOwogICAgICAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBT
dHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdGVyYXRvciA9IGV4cGVjdGVkUGFyYW1ldGVycy5iZWdp
bigpOyBpdGVyYXRvciAhPSBleHBlY3RlZFBhcmFtZXRlcnMuZW5kKCk7ICsraXRlcmF0b3IpIHsK
LSAgICAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBwYXJz
ZWQgPSBwYXJzZWRQYXJhbWV0ZXJzLmZpbmQoaXRlcmF0b3ItPmZpcnN0KTsKKyAgICAgICAgICAg
IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBwYXJzZWQgPSBwYXJzZWRQ
YXJhbWV0ZXJzLmZpbmQoaXRlcmF0b3ItPmtleSk7CiAgICAgICAgICAgICBFWFBFQ1RfVFJVRShw
YXJzZWQgIT0gcGFyc2VkUGFyYW1ldGVycy5lbmQoKSk7Ci0gICAgICAgICAgICBpZiAoaXRlcmF0
b3ItPnNlY29uZC5pc051bGwoKSkKLSAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShwYXJzZWQt
PnNlY29uZC5pc051bGwoKSk7CisgICAgICAgICAgICBpZiAoaXRlcmF0b3ItPnZhbHVlLmlzTnVs
bCgpKQorICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVFKHBhcnNlZC0+dmFsdWUuaXNOdWxsKCkp
OwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIEVYUEVDVF9FUShpdGVyYXRvci0+
c2Vjb25kLCBwYXJzZWQtPnNlY29uZCk7CisgICAgICAgICAgICAgICAgRVhQRUNUX0VRKGl0ZXJh
dG9yLT52YWx1ZSwgcGFyc2VkLT52YWx1ZSk7CiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNH
dGsuY3BwIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVn
aWVzR3RrLmNwcAppbmRleCAyOTIxNzNhZTI5MmY1MTIxMTg3ZThiZTUwNTAzOTNkN2MzMzg0YzVh
Li45MTAzYzg0NjA5NGQ1MWY4ZjViOTQ4NzRjZDY3YWYwNDc5OTA5YWUwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNHdGsuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2ll
c0d0ay5jcHAKQEAgLTg4LDggKzg4LDggQEAgdm9pZCBQbGF0Zm9ybVN0cmF0ZWdpZXNHdGs6Omdl
dFBsdWdpbkluZm8oY29uc3QgUGFnZSogcGFnZSwgVmVjdG9yPFBsdWdpbkluZm8+JgogICAgICAg
ICBNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1pbWVUb0Rlc2Ny
aXB0aW9ucy5lbmQoKTsKICAgICAgICAgZm9yIChNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbWltZVRvRGVzY3JpcHRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgewogICAgICAgICAgICAgTWltZUNsYXNzSW5mbyBtaW1lOwotICAgICAgICAgICAgbWltZS50
eXBlID0gaXQtPmZpcnN0OwotICAgICAgICAgICAgbWltZS5kZXNjID0gaXQtPnNlY29uZDsKKyAg
ICAgICAgICAgIG1pbWUudHlwZSA9IGl0LT5rZXk7CisgICAgICAgICAgICBtaW1lLmRlc2MgPSBp
dC0+dmFsdWU7CiAgICAgICAgICAgICBtaW1lLmV4dGVuc2lvbnMgPSBwYWNrYWdlLT5taW1lVG9F
eHRlbnNpb25zKCkuZ2V0KG1pbWUudHlwZSk7CiAgICAgICAgICAgICBwbHVnaW5JbmZvLm1pbWVz
LmFwcGVuZChtaW1lKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdGZhdmljb25kYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0ZmF2aWNvbmRhdGFiYXNlLmNwcAppbmRleCBhMWZkMzdhMWUzMWRlZTg4MmZmNGNi
OGNmNmM2ZjMwOTRiMWM1NjFkLi4wMDZhYjJiN2YzNDFhZTZhNDBjMmMwMjJjNWMwY2M1NzRjN2Vm
NjQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZmF2aWNvbmRh
dGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZmF2aWNvbmRh
dGFiYXNlLmNwcApAQCAtNjExLDE4ICs2MTEsMTggQEAgc3RhdGljIHZvaWQgd2Via2l0RmF2aWNv
bkRhdGFiYXNlSW1wb3J0RmluaXNoZWQoV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSkK
ICAgICBWZWN0b3I8U3RyaW5nPiB0b0RlbGV0ZVVSTHM7CiAgICAgUGVuZGluZ0ljb25SZXF1ZXN0
TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBkYXRhYmFzZS0+cHJpdi0+cGVuZGluZ0ljb25SZXF1
ZXN0cy5lbmQoKTsKICAgICBmb3IgKFBlbmRpbmdJY29uUmVxdWVzdE1hcDo6Y29uc3RfaXRlcmF0
b3IgaXRlciA9IGRhdGFiYXNlLT5wcml2LT5wZW5kaW5nSWNvblJlcXVlc3RzLmJlZ2luKCk7IGl0
ZXIgIT0gZW5kOyArK2l0ZXIpIHsKLSAgICAgICAgU3RyaW5nIGljb25VUkwgPSBpY29uRGF0YWJh
c2UoKS5zeW5jaHJvbm91c0ljb25VUkxGb3JQYWdlVVJMKGl0ZXItPmZpcnN0KTsKKyAgICAgICAg
U3RyaW5nIGljb25VUkwgPSBpY29uRGF0YWJhc2UoKS5zeW5jaHJvbm91c0ljb25VUkxGb3JQYWdl
VVJMKGl0ZXItPmtleSk7CiAgICAgICAgIGlmICghaWNvblVSTC5pc0VtcHR5KCkpCiAgICAgICAg
ICAgICBjb250aW51ZTsKIAotICAgICAgICBQZW5kaW5nSWNvblJlcXVlc3RWZWN0b3IqIGljb25z
ID0gaXRlci0+c2Vjb25kOworICAgICAgICBQZW5kaW5nSWNvblJlcXVlc3RWZWN0b3IqIGljb25z
ID0gaXRlci0+dmFsdWU7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaWNvbnMtPnNp
emUoKTsgKytpKSB7CiAgICAgICAgICAgICBQZW5kaW5nSWNvblJlcXVlc3QqIHJlcXVlc3QgPSBp
Y29ucy0+YXQoaSkuZ2V0KCk7CiAgICAgICAgICAgICBpZiAocmVxdWVzdC0+YXN5bmNSZXN1bHQo
KSkKICAgICAgICAgICAgICAgICByZXF1ZXN0LT5hc3luY1Jlc3VsdENvbXBsZXRlKDApOwogICAg
ICAgICB9CiAKLSAgICAgICAgdG9EZWxldGVVUkxzLmFwcGVuZChpdGVyLT5maXJzdCk7CisgICAg
ICAgIHRvRGVsZXRlVVJMcy5hcHBlbmQoaXRlci0+a2V5KTsKICAgICB9CiAKICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHRvRGVsZXRlVVJMcy5zaXplKCk7ICsraSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJwbHVnaW4uY3BwIGIvU291cmNlL1dlYktp
dC9ndGsvd2Via2l0L3dlYmtpdHdlYnBsdWdpbi5jcHAKaW5kZXggZTAzYjFlYTZkYTMzYjdlMmYw
MDIyNTVjZTg3Nzc4NjI0Y2RhNzA4Yy4uMDFkMGJiNWYyYmZkNzAwZjZiM2M5ZmM0ZjhlNDIwYzU3
MjQ4NmVjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnBs
dWdpbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnBsdWdpbi5j
cHAKQEAgLTIzNywxMCArMjM3LDEwIEBAIEdTTGlzdCogd2Via2l0X3dlYl9wbHVnaW5fZ2V0X21p
bWV0eXBlcyhXZWJLaXRXZWJQbHVnaW4qIHBsdWdpbikKIAogICAgIGZvciAoTUlNRVRvRGVzY3Jp
cHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgV2ViS2l0V2ViUGx1Z2luTUlNRVR5cGUqIG1p
bWVUeXBlID0gZ19zbGljZV9uZXcwKFdlYktpdFdlYlBsdWdpbk1JTUVUeXBlKTsKLSAgICAgICAg
bWltZVR5cGUtPm5hbWUgPSBnX3N0cmR1cChpdC0+Zmlyc3QudXRmOCgpLmRhdGEoKSk7Ci0gICAg
ICAgIG1pbWVUeXBlLT5kZXNjcmlwdGlvbiA9IGdfc3RyZHVwKGl0LT5zZWNvbmQudXRmOCgpLmRh
dGEoKSk7CisgICAgICAgIG1pbWVUeXBlLT5uYW1lID0gZ19zdHJkdXAoaXQtPmtleS51dGY4KCku
ZGF0YSgpKTsKKyAgICAgICAgbWltZVR5cGUtPmRlc2NyaXB0aW9uID0gZ19zdHJkdXAoaXQtPnZh
bHVlLnV0ZjgoKS5kYXRhKCkpOwogCi0gICAgICAgIFZlY3RvcjxTdHJpbmc+IGV4dGVuc2lvbnMg
PSBwcml2LT5jb3JlUGx1Z2luLT5taW1lVG9FeHRlbnNpb25zKCkuZ2V0KGl0LT5maXJzdCk7Cisg
ICAgICAgIFZlY3RvcjxTdHJpbmc+IGV4dGVuc2lvbnMgPSBwcml2LT5jb3JlUGx1Z2luLT5taW1l
VG9FeHRlbnNpb25zKCkuZ2V0KGl0LT5rZXkpOwogICAgICAgICBtaW1lVHlwZS0+ZXh0ZW5zaW9u
cyA9IHN0YXRpY19jYXN0PGdjaGFyKio+KGdfbWFsbG9jMChzaXplb2YoY2hhciopICogKGV4dGVu
c2lvbnMuc2l6ZSgpICsgMSkpKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4
dGVuc2lvbnMuc2l6ZSgpOyBpKyspCiAgICAgICAgICAgICBtaW1lVHlwZS0+ZXh0ZW5zaW9uc1tp
XSA9IGdfc3RyZHVwKGV4dGVuc2lvbnNbaV0udXRmOCgpLmRhdGEoKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L21hYy9IaXN0b3J5L1dlYkhpc3RvcnkubW0gYi9Tb3VyY2UvV2ViS2l0L21h
Yy9IaXN0b3J5L1dlYkhpc3RvcnkubW0KaW5kZXggNjk2NGZjOTQ5YjUxMjE3M2E2YmRjNWU3MGI1
NjE4ZDMxY2I2NzdhMy4uZTc4MWQzMmZkMWRlOTUwZDkxNGFmNDgzNDk3NjQyMGRmNTg3ZGFmNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvSGlzdG9yeS9XZWJIaXN0b3J5Lm1tCisrKyBi
L1NvdXJjZS9XZWJLaXQvbWFjL0hpc3RvcnkvV2ViSGlzdG9yeS5tbQpAQCAtMjM4LDcgKzIzOCw3
IEBAIHN0YXRpYyBpbmxpbmUgV2ViSGlzdG9yeURhdGVLZXkgZGF0ZUtleShOU1RpbWVJbnRlcnZh
bCBkYXRlKQogICAgICAgICByZXR1cm4gTk87CiAKICAgICBEYXRlVG9FbnRyaWVzTWFwOjppdGVy
YXRvciBpdCA9IF9lbnRyaWVzQnlEYXRlLT5maW5kKGRhdGVLZXkpOwotICAgIE5TTXV0YWJsZUFy
cmF5ICplbnRyaWVzRm9yRGF0ZSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgTlNNdXRhYmxlQXJy
YXkgKmVudHJpZXNGb3JEYXRlID0gaXQtPnZhbHVlLmdldCgpOwogICAgIFtlbnRyaWVzRm9yRGF0
ZSByZW1vdmVPYmplY3RJZGVudGljYWxUbzplbnRyeV07CiAgICAgCiAgICAgLy8gcmVtb3ZlIHRo
aXMgZGF0ZSBlbnRpcmVseSBpZiB0aGVyZSBhcmUgbm8gb3RoZXIgZW50cmllcyBvbiBpdApAQCAt
NDQwLDcgKzQ0MCw3IEBAIHN0YXRpYyBpbmxpbmUgV2ViSGlzdG9yeURhdGVLZXkgZGF0ZUtleShO
U1RpbWVJbnRlcnZhbCBkYXRlKQogICAgICAgICBkYXlzQXNUaW1lSW50ZXJ2YWxzLnJlc2VydmVD
YXBhY2l0eShfZW50cmllc0J5RGF0ZS0+c2l6ZSgpKTsKICAgICAgICAgRGF0ZVRvRW50cmllc01h
cDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gX2VudHJpZXNCeURhdGUtPmVuZCgpOwogICAgICAgICBm
b3IgKERhdGVUb0VudHJpZXNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gX2VudHJpZXNCeURhdGUt
PmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIGRheXNBc1RpbWVJbnRlcnZh
bHMuYXBwZW5kKGl0LT5maXJzdCk7CisgICAgICAgICAgICBkYXlzQXNUaW1lSW50ZXJ2YWxzLmFw
cGVuZChpdC0+a2V5KTsKIAogICAgICAgICBzb3J0KGRheXNBc1RpbWVJbnRlcnZhbHMuYmVnaW4o
KSwgZGF5c0FzVGltZUludGVydmFscy5lbmQoKSk7CiAgICAgICAgIHNpemVfdCBjb3VudCA9IGRh
eXNBc1RpbWVJbnRlcnZhbHMuc2l6ZSgpOwpAQCAtODk3LDcgKzg5Nyw3IEBAIFdlYkhpc3RvcnlX
cml0ZXI6OldlYkhpc3RvcnlXcml0ZXIoRGF0ZVRvRW50cmllc01hcCogZW50cmllc0J5RGF0ZSkK
ICAgICBtX2RhdGVLZXlzLnJlc2VydmVDYXBhY2l0eShtX2VudHJpZXNCeURhdGUtPnNpemUoKSk7
CiAgICAgRGF0ZVRvRW50cmllc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9lbnRyaWVzQnlE
YXRlLT5lbmQoKTsKICAgICBmb3IgKERhdGVUb0VudHJpZXNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV9lbnRyaWVzQnlEYXRlLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIG1f
ZGF0ZUtleXMuYXBwZW5kKGl0LT5maXJzdCk7CisgICAgICAgIG1fZGF0ZUtleXMuYXBwZW5kKGl0
LT5rZXkpOwogICAgIHNvcnQobV9kYXRlS2V5cy5iZWdpbigpLCBtX2RhdGVLZXlzLmVuZCgpKTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGlj
cy5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW0KaW5kZXgg
ZDU5M2Y4Y2FmMWVjM2FjY2E1YjRiMzBhODNjYmQ2YjJjMTk1NDE1Mi4uMDczZDU5MDNmYWFiMTU0
ZDk2NjU4ZmU0YjYzYzU3MGNiYzVmYzdhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMv
TWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dl
YkNvcmVTdGF0aXN0aWNzLm1tCkBAIC04OSw4ICs4OSw4IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwogICAgIE93blB0cjxUeXBlQ291bnRTZXQ+IGNvdW50cyhKU0RPTVdpbmRvdzo6Y29tbW9u
SlNHbG9iYWxEYXRhKCktPmhlYXAucHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50cygpKTsKICAgICBI
YXNoQ291bnRlZFNldDxjb25zdCBjaGFyKj46Oml0ZXJhdG9yIGVuZCA9IGNvdW50cy0+ZW5kKCk7
CiAgICAgZm9yIChIYXNoQ291bnRlZFNldDxjb25zdCBjaGFyKj46Oml0ZXJhdG9yIGl0ID0gY291
bnRzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBpdC0+c2Vjb25kOyArK2kpCi0gICAgICAgICAgICBbcmVzdWx0IGFkZE9iamVjdDpb
TlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6aXQtPmZpcnN0XV07CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBpdC0+dmFsdWU7ICsraSkKKyAgICAgICAgICAgIFtyZXN1bHQg
YWRkT2JqZWN0OltOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzppdC0+a2V5XV07CiAgICAg
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTEwNCw4ICsxMDQsOCBAQCB1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKICAgICBPd25QdHI8VHlwZUNvdW50U2V0PiBjb3VudHMoSlNET01XaW5kb3c6
OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLm9iamVjdFR5cGVDb3VudHMoKSk7CiAgICAgSGFz
aENvdW50ZWRTZXQ8Y29uc3QgY2hhcio+OjppdGVyYXRvciBlbmQgPSBjb3VudHMtPmVuZCgpOwog
ICAgIGZvciAoSGFzaENvdW50ZWRTZXQ8Y29uc3QgY2hhcio+OjppdGVyYXRvciBpdCA9IGNvdW50
cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgaXQtPnNlY29uZDsgKytpKQotICAgICAgICAgICAgW3Jlc3VsdCBhZGRPYmplY3Q6W05T
U3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOml0LT5maXJzdF1dOworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgaXQtPnZhbHVlOyArK2kpCisgICAgICAgICAgICBbcmVzdWx0IGFk
ZE9iamVjdDpbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6aXQtPmtleV1dOwogICAgIAog
ICAgIHJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9QbHVn
aW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyLm1tIGIvU291cmNlL1dlYktpdC9t
YWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlci5tbQppbmRleCBjNTEw
YTlhOTNkNWIxNzQzMTFlMmQ3MzMwZjIxYjU5NGJhMDU3MmJlLi5hODIxMjlmMjg2OWFjZDJkNjc5
ZjdmYmVhNjZiNjEwNTg5MDM1MDM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9QbHVn
aW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyLm1tCisrKyBiL1NvdXJjZS9XZWJL
aXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXIubW0KQEAgLTcz
LDcgKzczLDcgQEAgTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkqIE5ldHNjYXBlUGx1Z2luSG9zdE1h
bmFnZXI6Omhvc3RGb3JQbHVnaW4oY29uc3QgV1RGOjpTdHIKICAgICAKICAgICAvLyBUaGUgcGFj
a2FnZSB3YXMgYWxyZWFkeSBpbiB0aGUgbWFwLCBqdXN0IHJldHVybiBpdC4KICAgICBpZiAoIXJl
c3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7
CisgICAgICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogICAgICAgICAKICAgICBt
YWNoX3BvcnRfdCBjbGllbnRQb3J0OwogICAgIGlmIChtYWNoX3BvcnRfYWxsb2NhdGUobWFjaF90
YXNrX3NlbGYoKSwgTUFDSF9QT1JUX1JJR0hUX1JFQ0VJVkUsICZjbGllbnRQb3J0KSAhPSBLRVJO
X1NVQ0NFU1MpIHsKQEAgLTk1LDcgKzk1LDcgQEAgTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkqIE5l
dHNjYXBlUGx1Z2luSG9zdE1hbmFnZXI6Omhvc3RGb3JQbHVnaW4oY29uc3QgV1RGOjpTdHIKICAg
ICAKICAgICBOZXRzY2FwZVBsdWdpbkhvc3RQcm94eSogaG9zdFByb3h5ID0gbmV3IE5ldHNjYXBl
UGx1Z2luSG9zdFByb3h5KGNsaWVudFBvcnQsIHBsdWdpbkhvc3RQb3J0LCBwbHVnaW5Ib3N0UFNO
LCBzaG91bGRDYWNoZU1pc3NpbmdQcm9wZXJ0aWVzQW5kTWV0aG9kcyk7CiAgICAgCi0gICAgcmVz
dWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBob3N0UHJveHk7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZSA9IGhvc3RQcm94eTsKICAgICAKICAgICByZXR1cm4gaG9zdFByb3h5OwogfQpAQCAtMjA0
LDcgKzIwNCw3IEBAIHZvaWQgTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlcjo6cGx1Z2luSG9zdERp
ZWQoTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkqIHBsdWdpbkhvCiAKICAgICAvLyBUaGlzIGhhcyBP
KG4pIGNvbXBsZXhpdHkgYnV0IHRoZSBudW1iZXIgb2YgYWN0aXZlIHBsdWctaW4gaG9zdHMgaXMg
dmVyeSBzbWFsbCBzbyBpdCBzaG91bGRuJ3QgbWF0dGVyLgogICAgIGZvciAoUGx1Z2luSG9zdE1h
cDo6aXRlcmF0b3IgaXQgPSBtX3BsdWdpbkhvc3RzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewotICAgICAgICBpZiAoaXQtPnNlY29uZCA9PSBwbHVnaW5Ib3N0KSB7CisgICAgICAgIGlmIChp
dC0+dmFsdWUgPT0gcGx1Z2luSG9zdCkgewogICAgICAgICAgICAgbV9wbHVnaW5Ib3N0cy5yZW1v
dmUoaXQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0zMDQsNyArMzA0LDcg
QEAgdm9pZCBOZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyOjpkaWRDcmVhdGVXaW5kb3coKQogICAg
IC8vIFNlZSBpZiBhbnkgb2Ygb3VyIGhvc3RzIGFyZSBpbiBmdWxsLXNjcmVlbiBtb2RlLgogICAg
IFBsdWdpbkhvc3RNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fcGx1Z2luSG9zdHMuZW5kKCk7CiAgICAg
Zm9yIChQbHVnaW5Ib3N0TWFwOjppdGVyYXRvciBpdCA9IG1fcGx1Z2luSG9zdHMuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5KiBob3N0
UHJveHkgPSBpdC0+c2Vjb25kOworICAgICAgICBOZXRzY2FwZVBsdWdpbkhvc3RQcm94eSogaG9z
dFByb3h5ID0gaXQtPnZhbHVlOwogICAgICAgICAKICAgICAgICAgaWYgKCFob3N0UHJveHktPmlz
TWVudUJhclZpc2libGUoKSkgewogICAgICAgICAgICAgLy8gTWFrZSBvdXJzZWx2ZXMgdGhlIGZy
b250IHByb2Nlc3MuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3Rl
ZC9OZXRzY2FwZVBsdWdpbkhvc3RQcm94eS5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMv
SG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdFByb3h5Lm1tCmluZGV4IGFmNmYyYmU5OTY5Y2IxMWNi
MzNhNTYzMTdmZGRhOGMyY2Y2MWNmNWUuLjBmYjI2ZDBhOWI4NDc1MjI2YmVmY2MzNDk2OGI5ZjUw
NmViOTE1YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05l
dHNjYXBlUGx1Z2luSG9zdFByb3h5Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMv
SG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdFByb3h5Lm1tCkBAIC0xNDQsNyArMTQ0LDcgQEAgdm9p
ZCBOZXRzY2FwZVBsdWdpbkhvc3RQcm94eTo6cGx1Z2luSG9zdERpZWQoKQogICAKICAgICBQbHVn
aW5JbnN0YW5jZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaW5zdGFuY2VzLmVuZCgpOwogICAg
IGZvciAoUGx1Z2luSW5zdGFuY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaW5zdGFuY2VzLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+cGx1Z2luSG9zdERp
ZWQoKTsKKyAgICAgICAgaXQtPnZhbHVlLT5wbHVnaW5Ib3N0RGllZCgpOwogICAgIAogICAgIE5l
dHNjYXBlUGx1Z2luSG9zdE1hbmFnZXI6OnNoYXJlZCgpLnBsdWdpbkhvc3REaWVkKHRoaXMpOwog
ICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2Nh
cGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tIGIvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0
ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tCmluZGV4IGViODZhMmVmMTk1YjFmODBi
YWQ4NDRhMmFkNTdjNzY1OWVlNGU1ZjAuLmUxZGNlNDI3OGQzZjY2Yjg3ODNhNDIzN2YxNjU1YjRl
MjgxNjYxYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05l
dHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9QbHVn
aW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW0KQEAgLTE0NSw3ICsxNDUs
NyBAQCB1aW50MzJfdCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OkxvY2FsT2JqZWN0TWFw
OjppZEZvck9iamVjdChKU0dsb2JhbERhdGEmCiAgICAgCiAgICAgSGFzaE1hcDxKU0M6OkpTT2Jq
ZWN0KiwgcGFpcjx1aW50MzJfdCwgdWludDMyX3Q+ID46Oml0ZXJhdG9yIGl0ZXIgPSBtX2pzT2Jq
ZWN0VG9JRE1hcC5maW5kKG9iamVjdCk7CiAgICAgaWYgKGl0ZXIgIT0gbV9qc09iamVjdFRvSURN
YXAuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdGVyLT5zZWNvbmQuZmlyc3Q7CisgICAgICAgIHJl
dHVybiBpdGVyLT52YWx1ZS5maXJzdDsKICAgICAKICAgICBkbyB7CiAgICAgICAgIG9iamVjdElE
ID0gKyttX29iamVjdElEQ291bnRlcjsKQEAgLTE2Miw3ICsxNjIsNyBAQCB2b2lkIE5ldHNjYXBl
UGx1Z2luSW5zdGFuY2VQcm94eTo6TG9jYWxPYmplY3RNYXA6OnJldGFpbihKU0M6OkpTT2JqZWN0
KiBvYmplY3QpCiAgICAgSGFzaE1hcDxKU0M6OkpTT2JqZWN0KiwgcGFpcjx1aW50MzJfdCwgdWlu
dDMyX3Q+ID46Oml0ZXJhdG9yIGl0ZXIgPSBtX2pzT2JqZWN0VG9JRE1hcC5maW5kKG9iamVjdCk7
CiAgICAgQVNTRVJUKGl0ZXIgIT0gbV9qc09iamVjdFRvSURNYXAuZW5kKCkpOwogCi0gICAgaXRl
ci0+c2Vjb25kLnNlY29uZCA9IGl0ZXItPnNlY29uZC5zZWNvbmQgKyAxOworICAgIGl0ZXItPnZh
bHVlLnNlY29uZCA9IGl0ZXItPnZhbHVlLnNlY29uZCArIDE7CiB9CiAKIHZvaWQgTmV0c2NhcGVQ
bHVnaW5JbnN0YW5jZVByb3h5OjpMb2NhbE9iamVjdE1hcDo6cmVsZWFzZShKU0M6OkpTT2JqZWN0
KiBvYmplY3QpCkBAIC0xNzAsMTAgKzE3MCwxMCBAQCB2b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFu
Y2VQcm94eTo6TG9jYWxPYmplY3RNYXA6OnJlbGVhc2UoSlNDOjpKU09iamVjdCogb2JqZWN0KQog
ICAgIEhhc2hNYXA8SlNDOjpKU09iamVjdCosIHBhaXI8dWludDMyX3QsIHVpbnQzMl90PiA+Ojpp
dGVyYXRvciBpdGVyID0gbV9qc09iamVjdFRvSURNYXAuZmluZChvYmplY3QpOwogICAgIEFTU0VS
VChpdGVyICE9IG1fanNPYmplY3RUb0lETWFwLmVuZCgpKTsKIAotICAgIEFTU0VSVChpdGVyLT5z
ZWNvbmQuc2Vjb25kID4gMCk7Ci0gICAgaXRlci0+c2Vjb25kLnNlY29uZCA9IGl0ZXItPnNlY29u
ZC5zZWNvbmQgLSAxOwotICAgIGlmICghaXRlci0+c2Vjb25kLnNlY29uZCkgewotICAgICAgICBt
X2lkVG9KU09iamVjdE1hcC5yZW1vdmUoaXRlci0+c2Vjb25kLmZpcnN0KTsKKyAgICBBU1NFUlQo
aXRlci0+dmFsdWUuc2Vjb25kID4gMCk7CisgICAgaXRlci0+dmFsdWUuc2Vjb25kID0gaXRlci0+
dmFsdWUuc2Vjb25kIC0gMTsKKyAgICBpZiAoIWl0ZXItPnZhbHVlLnNlY29uZCkgeworICAgICAg
ICBtX2lkVG9KU09iamVjdE1hcC5yZW1vdmUoaXRlci0+dmFsdWUuZmlyc3QpOwogICAgICAgICBt
X2pzT2JqZWN0VG9JRE1hcC5yZW1vdmUoaXRlcik7CiAgICAgfQogfQpAQCAtMTk3LDEwICsxOTcs
MTAgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OkxvY2FsT2JqZWN0TWFwOjpm
b3JnZXQodWludDMyX3Qgb2JqZWN0SUQpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAot
ICAgIEhhc2hNYXA8SlNDOjpKU09iamVjdCosIHBhaXI8dWludDMyX3QsIHVpbnQzMl90PiA+Ojpp
dGVyYXRvciBySXRlciA9IG1fanNPYmplY3RUb0lETWFwLmZpbmQoaXRlci0+c2Vjb25kLmdldCgp
KTsKKyAgICBIYXNoTWFwPEpTQzo6SlNPYmplY3QqLCBwYWlyPHVpbnQzMl90LCB1aW50MzJfdD4g
Pjo6aXRlcmF0b3Igckl0ZXIgPSBtX2pzT2JqZWN0VG9JRE1hcC5maW5kKGl0ZXItPnZhbHVlLmdl
dCgpKTsKIAogICAgIC8vIElmIHRoZSBvYmplY3QgaXMgYmVpbmcgc2VudCB0byBwbHVnLWluIHJp
Z2h0IG5vdywgdGhlbiBpdCdzIG5vdCB0aGUgdGltZSB0byBmb3JnZXQuCi0gICAgaWYgKHJJdGVy
LT5zZWNvbmQuc2Vjb25kICE9IDEpCisgICAgaWYgKHJJdGVyLT52YWx1ZS5zZWNvbmQgIT0gMSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgbV9qc09iamVjdFRvSURNYXAucmVtb3ZlKHJJ
dGVyKTsKQEAgLTMzMCw3ICszMzAsNyBAQCB2b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94
eTo6ZGVzdHJveSgpCiAgICAgCiAgICAgRnJhbWVMb2FkTWFwOjppdGVyYXRvciBlbmQgPSBtX3Bl
bmRpbmdGcmFtZUxvYWRzLmVuZCgpOwogICAgIGZvciAoRnJhbWVMb2FkTWFwOjppdGVyYXRvciBp
dCA9IG1fcGVuZGluZ0ZyYW1lTG9hZHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAg
ICBbKGl0LT5maXJzdCkgX3NldEludGVybmFsTG9hZERlbGVnYXRlOm5pbF07CisgICAgICAgIFso
aXQtPmtleSkgX3NldEludGVybmFsTG9hZERlbGVnYXRlOm5pbF07CiAKICAgICBfV0tQSERlc3Ry
b3lQbHVnaW5JbnN0YW5jZShtX3BsdWdpbkhvc3RQcm94eS0+cG9ydCgpLCBtX3BsdWdpbklELCBy
ZXF1ZXN0SUQpOwogIApAQCAtNjc4LDcgKzY3OCw3IEBAIHZvaWQgTmV0c2NhcGVQbHVnaW5JbnN0
YW5jZVByb3h5Ojp3ZWJGcmFtZURpZEZpbmlzaExvYWRXaXRoUmVhc29uKFdlYkZyYW1lKiB3ZWJG
CiAgICAgRnJhbWVMb2FkTWFwOjppdGVyYXRvciBpdCA9IG1fcGVuZGluZ0ZyYW1lTG9hZHMuZmlu
ZCh3ZWJGcmFtZSk7CiAgICAgQVNTRVJUKGl0ICE9IG1fcGVuZGluZ0ZyYW1lTG9hZHMuZW5kKCkp
OwogICAgICAgICAKLSAgICBQbHVnaW5SZXF1ZXN0KiBwbHVnaW5SZXF1ZXN0ID0gaXQtPnNlY29u
ZC5nZXQoKTsKKyAgICBQbHVnaW5SZXF1ZXN0KiBwbHVnaW5SZXF1ZXN0ID0gaXQtPnZhbHVlLmdl
dCgpOwogICAgIF9XS1BITG9hZFVSTE5vdGlmeShtX3BsdWdpbkhvc3RQcm94eS0+cG9ydCgpLCBt
X3BsdWdpbklELCBwbHVnaW5SZXF1ZXN0LT5yZXF1ZXN0SUQoKSwgcmVhc29uKTsKICAKICAgICBt
X3BlbmRpbmdGcmFtZUxvYWRzLnJlbW92ZShpdCk7CkBAIC0xNjM4LDcgKzE2MzgsNyBAQCB2b2lk
IE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6Y2FuY2VsQ2hlY2tJZkFsbG93ZWRUb0xvYWRV
UkwodWludDMyX3QgY2hlY2tJRAogICAgIGlmIChpdCA9PSBtX3VybENoZWNrcy5lbmQoKSkKICAg
ICAgICAgcmV0dXJuOwogICAgIAotICAgIFdlYlBsdWdpbkNvbnRhaW5lckNoZWNrICpjaGVjayA9
IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgV2ViUGx1Z2luQ29udGFpbmVyQ2hlY2sgKmNoZWNrID0g
aXQtPnZhbHVlLmdldCgpOwogICAgIFtjaGVjayBjYW5jZWxdOwogICAgIG1fdXJsQ2hlY2tzLnJl
bW92ZShpdCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3Rl
ZC9Qcm94eUluc3RhbmNlLm1tIGIvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvUHJv
eHlJbnN0YW5jZS5tbQppbmRleCAwOTQ0M2RjMTYyOGE2NjhmMmZiMjE0ZjNiNTMxN2M2YjU0NDQ0
MWNhLi42MmI2MDhlNjVkZTNlMDNjMzUyOGIzMzc5OGJiNDQ2NzZkZjJlNWZhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9Qcm94eUluc3RhbmNlLm1tCisrKyBi
L1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL1Byb3h5SW5zdGFuY2UubW0KQEAgLTM1
NSw4ICszNTUsOCBAQCBNZXRob2RMaXN0IFByb3h5SW5zdGFuY2U6Om1ldGhvZHNOYW1lZChjb25z
dCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKQogICAgIE1ldGhvZE1hcDo6aXRlcmF0b3IgZXhpc3Rp
bmdNYXBFbnRyeSA9IG1fbWV0aG9kcy5maW5kKGlkZW50aWZpZXIuaW1wbCgpKTsKICAgICBpZiAo
ZXhpc3RpbmdNYXBFbnRyeSAhPSBtX21ldGhvZHMuZW5kKCkpIHsKICAgICAgICAgTWV0aG9kTGlz
dCBtZXRob2RMaXN0OwotICAgICAgICBpZiAoZXhpc3RpbmdNYXBFbnRyeS0+c2Vjb25kKQotICAg
ICAgICAgICAgbWV0aG9kTGlzdC5hcHBlbmQoZXhpc3RpbmdNYXBFbnRyeS0+c2Vjb25kKTsKKyAg
ICAgICAgaWYgKGV4aXN0aW5nTWFwRW50cnktPnZhbHVlKQorICAgICAgICAgICAgbWV0aG9kTGlz
dC5hcHBlbmQoZXhpc3RpbmdNYXBFbnRyeS0+dmFsdWUpOwogICAgICAgICByZXR1cm4gbWV0aG9k
TGlzdDsKICAgICB9CiAgICAgCkBAIC0zNzgsMTEgKzM3OCwxMSBAQCBNZXRob2RMaXN0IFByb3h5
SW5zdGFuY2U6Om1ldGhvZHNOYW1lZChjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKQogICAg
IC8vIEFkZCBhIG5ldyBlbnRyeSB0byB0aGUgbWFwIHVubGVzcyBhbiBlbnRyeSB3YXMgYWRkZWQg
d2hpbGUgd2Ugd2VyZSBpbiB3YWl0Rm9yUmVwbHkuCiAgICAgTWV0aG9kTWFwOjpBZGRSZXN1bHQg
bWFwQWRkUmVzdWx0ID0gbV9tZXRob2RzLmFkZChpZGVudGlmaWVyLmltcGwoKSwgMCk7CiAgICAg
aWYgKG1hcEFkZFJlc3VsdC5pc05ld0VudHJ5ICYmIHJlcGx5LT5tX3Jlc3VsdCkKLSAgICAgICAg
bWFwQWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBuZXcgUHJveHlNZXRob2QobWV0aG9kTmFt
ZSk7CisgICAgICAgIG1hcEFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBuZXcgUHJveHlNZXRo
b2QobWV0aG9kTmFtZSk7CiAKICAgICBNZXRob2RMaXN0IG1ldGhvZExpc3Q7Ci0gICAgaWYgKG1h
cEFkZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKQotICAgICAgICBtZXRob2RMaXN0LmFwcGVuZCht
YXBBZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7CisgICAgaWYgKG1hcEFkZFJlc3VsdC5pdGVy
YXRvci0+dmFsdWUpCisgICAgICAgIG1ldGhvZExpc3QuYXBwZW5kKG1hcEFkZFJlc3VsdC5pdGVy
YXRvci0+dmFsdWUpOwogICAgIHJldHVybiBtZXRob2RMaXN0OwogfQogCkBAIC0zOTQsNyArMzk0
LDcgQEAgRmllbGQqIFByb3h5SW5zdGFuY2U6OmZpZWxkTmFtZWQoY29uc3QgSWRlbnRpZmllciYg
aWRlbnRpZmllcikKICAgICAvLyBJZiB3ZSBhbHJlYWR5IGhhdmUgYW4gZW50cnkgaW4gdGhlIG1h
cCwgdXNlIGl0LgogICAgIEZpZWxkTWFwOjppdGVyYXRvciBleGlzdGluZ01hcEVudHJ5ID0gbV9m
aWVsZHMuZmluZChpZGVudGlmaWVyLmltcGwoKSk7CiAgICAgaWYgKGV4aXN0aW5nTWFwRW50cnkg
IT0gbV9maWVsZHMuZW5kKCkpCi0gICAgICAgIHJldHVybiBleGlzdGluZ01hcEVudHJ5LT5zZWNv
bmQ7CisgICAgICAgIHJldHVybiBleGlzdGluZ01hcEVudHJ5LT52YWx1ZTsKICAgICAKICAgICB1
aW50NjRfdCBwcm9wZXJ0eU5hbWUgPSByZWludGVycHJldF9jYXN0PHVpbnQ2NF90PihfTlBOX0dl
dFN0cmluZ0lkZW50aWZpZXIoaWRlbnRpZmllci5hc2NpaSgpLmRhdGEoKSkpOwogICAgIHVpbnQz
Ml90IHJlcXVlc3RJRCA9IG1faW5zdGFuY2VQcm94eS0+bmV4dFJlcXVlc3RJRCgpOwpAQCAtNDE0
LDggKzQxNCw4IEBAIEZpZWxkKiBQcm94eUluc3RhbmNlOjpmaWVsZE5hbWVkKGNvbnN0IElkZW50
aWZpZXImIGlkZW50aWZpZXIpCiAgICAgLy8gQWRkIGEgbmV3IGVudHJ5IHRvIHRoZSBtYXAgdW5s
ZXNzIGFuIGVudHJ5IHdhcyBhZGRlZCB3aGlsZSB3ZSB3ZXJlIGluIHdhaXRGb3JSZXBseS4KICAg
ICBGaWVsZE1hcDo6QWRkUmVzdWx0IG1hcEFkZFJlc3VsdCA9IG1fZmllbGRzLmFkZChpZGVudGlm
aWVyLmltcGwoKSwgMCk7CiAgICAgaWYgKG1hcEFkZFJlc3VsdC5pc05ld0VudHJ5ICYmIHJlcGx5
LT5tX3Jlc3VsdCkKLSAgICAgICAgbWFwQWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBuZXcg
UHJveHlGaWVsZChwcm9wZXJ0eU5hbWUpOwotICAgIHJldHVybiBtYXBBZGRSZXN1bHQuaXRlcmF0
b3ItPnNlY29uZDsKKyAgICAgICAgbWFwQWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IG5ldyBQ
cm94eUZpZWxkKHByb3BlcnR5TmFtZSk7CisgICAgcmV0dXJuIG1hcEFkZFJlc3VsdC5pdGVyYXRv
ci0+dmFsdWU7CiB9CiAKIEpTQzo6SlNWYWx1ZSBQcm94eUluc3RhbmNlOjpmaWVsZFZhbHVlKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgRmllbGQqIGZpZWxkKSBjb25zdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblZpZXcubW0gYi9Tb3VyY2Uv
V2ViS2l0L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5tbQppbmRleCA1ZjFmNTU2
OTQxYTk0YzEwZjRkNWI3MWIyODMzODM5ZWEyNWJlMDQzLi4xZTliMDExMWQ3MGMwNWNiNzJlNWM4
ZGU2OTdlYmE0ZjA4Zjk3ODhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5z
L1dlYk5ldHNjYXBlUGx1Z2luVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5z
L1dlYk5ldHNjYXBlUGx1Z2luVmlldy5tbQpAQCAtNzEwLDcgKzcxMCw3IEBAIHN0YXRpYyBpbmxp
bmUgdm9pZCBnZXROUFJlY3QoY29uc3QgTlNSZWN0JiBuciwgTlBSZWN0JiBucHIpCiAKICAgICBI
YXNoTWFwPHVpbnQzMl90LCBQbHVnaW5UaW1lcio+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSB0aW1l
cnMtPmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDx1aW50MzJfdCwgUGx1Z2luVGltZXIqPjo6Y29u
c3RfaXRlcmF0b3IgaXQgPSB0aW1lcnMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAg
ICAgICBQbHVnaW5UaW1lciogdGltZXIgPSBpdC0+c2Vjb25kOworICAgICAgICBQbHVnaW5UaW1l
ciogdGltZXIgPSBpdC0+dmFsdWU7CiAgICAgICAgIHRpbWVyLT5zdG9wKCk7CiAgICAgfSAgICAK
IH0KQEAgLTcyOCw3ICs3MjgsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZ2V0TlBSZWN0KGNvbnN0
IE5TUmVjdCYgbnIsIE5QUmVjdCYgbnByKQogICAgIAogICAgIEhhc2hNYXA8dWludDMyX3QsIFBs
dWdpblRpbWVyKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHRpbWVycy0+ZW5kKCk7CiAgICAgZm9y
IChIYXNoTWFwPHVpbnQzMl90LCBQbHVnaW5UaW1lcio+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHRp
bWVycy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFBsdWdpblRpbWVyKiB0
aW1lciA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFBsdWdpblRpbWVyKiB0aW1lciA9IGl0LT52YWx1
ZTsKICAgICAgICAgQVNTRVJUKCF0aW1lci0+aXNBY3RpdmUoKSk7CiAgICAgICAgIHRpbWVyLT5z
dGFydChfaXNDb21wbGV0ZWx5T2JzY3VyZWQpOwogICAgIH0gICAgCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJOb3RpZmljYXRpb25DbGllbnQubW0gYi9T
b3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJOb3RpZmljYXRpb25DbGllbnQubW0K
aW5kZXggODEyMDkzNjAxNjM3NDliNzY2ZmM3YjhkM2Q3MDYwMjdjYjI3ZDZkYS4uOGJjNzcwZWQw
YjVkZTNhYTNkNDZiYjNhOTk5ZmRhYTk3ODkxYzVlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViTm90aWZpY2F0aW9uQ2xpZW50Lm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYk5vdGlmaWNhdGlvbkNsaWVudC5tbQpAQCAt
NzIsNyArNzIsNyBAQCBib29sIFdlYk5vdGlmaWNhdGlvbkNsaWVudDo6c2hvdyhOb3RpZmljYXRp
b24qIG5vdGlmaWNhdGlvbikKICAgICBtX25vdGlmaWNhdGlvbk1hcC5zZXQobm90aWZpY2F0aW9u
LCB3ZWJOb3RpZmljYXRpb24pOwogCiAgICAgTm90aWZpY2F0aW9uQ29udGV4dE1hcDo6aXRlcmF0
b3IgaXQgPSBtX25vdGlmaWNhdGlvbkNvbnRleHRNYXAuYWRkKG5vdGlmaWNhdGlvbi0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpLCBWZWN0b3I8UmV0YWluUHRyPFdlYk5vdGlmaWNhdGlvbj4gPigp
KS5pdGVyYXRvcjsKLSAgICBpdC0+c2Vjb25kLmFwcGVuZCh3ZWJOb3RpZmljYXRpb24pOworICAg
IGl0LT52YWx1ZS5hcHBlbmQod2ViTm90aWZpY2F0aW9uKTsKIAogICAgIFtbbV93ZWJWaWV3IF9u
b3RpZmljYXRpb25Qcm92aWRlcl0gc2hvd05vdGlmaWNhdGlvbjp3ZWJOb3RpZmljYXRpb24uZ2V0
KCkgZnJvbVdlYlZpZXc6bV93ZWJWaWV3XTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEwMiw3ICsx
MDIsNyBAQCB2b2lkIFdlYk5vdGlmaWNhdGlvbkNsaWVudDo6Y2xlYXJOb3RpZmljYXRpb25zKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCiAgICAgaWYgKGl0ID09IG1fbm90aWZpY2F0
aW9uQ29udGV4dE1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIFZlY3RvcjxS
ZXRhaW5QdHI8V2ViTm90aWZpY2F0aW9uPiA+JiB3ZWJOb3RpZmljYXRpb25zID0gaXQtPnNlY29u
ZDsKKyAgICBWZWN0b3I8UmV0YWluUHRyPFdlYk5vdGlmaWNhdGlvbj4gPiYgd2ViTm90aWZpY2F0
aW9ucyA9IGl0LT52YWx1ZTsKICAgICBOU011dGFibGVBcnJheSAqbnNJRHMgPSBbTlNNdXRhYmxl
QXJyYXkgYXJyYXldOwogICAgIHNpemVfdCBjb3VudCA9IHdlYk5vdGlmaWNhdGlvbnMuc2l6ZSgp
OwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewpAQCAtMTI3LDEwICsx
MjcsMTAgQEAgdm9pZCBXZWJOb3RpZmljYXRpb25DbGllbnQ6Om5vdGlmaWNhdGlvbk9iamVjdERl
c3Ryb3llZChOb3RpZmljYXRpb24qIG5vdGlmaWNhdGkKIAogICAgIE5vdGlmaWNhdGlvbkNvbnRl
eHRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9ub3RpZmljYXRpb25Db250ZXh0TWFwLmZpbmQobm90aWZp
Y2F0aW9uLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwogICAgIEFTU0VSVChpdCAhPSBtX25v
dGlmaWNhdGlvbkNvbnRleHRNYXAuZW5kKCkpOwotICAgIHNpemVfdCBpbmRleCA9IGl0LT5zZWNv
bmQuZmluZCh3ZWJOb3RpZmljYXRpb24pOworICAgIHNpemVfdCBpbmRleCA9IGl0LT52YWx1ZS5m
aW5kKHdlYk5vdGlmaWNhdGlvbik7CiAgICAgQVNTRVJUKGluZGV4ICE9IG5vdEZvdW5kKTsKLSAg
ICBpdC0+c2Vjb25kLnJlbW92ZShpbmRleCk7Ci0gICAgaWYgKGl0LT5zZWNvbmQuaXNFbXB0eSgp
KQorICAgIGl0LT52YWx1ZS5yZW1vdmUoaW5kZXgpOworICAgIGlmIChpdC0+dmFsdWUuaXNFbXB0
eSgpKQogICAgICAgICBtX25vdGlmaWNhdGlvbkNvbnRleHRNYXAucmVtb3ZlKGl0KTsKIAogICAg
IFtbbV93ZWJWaWV3IF9ub3RpZmljYXRpb25Qcm92aWRlcl0gbm90aWZpY2F0aW9uRGVzdHJveWVk
OndlYk5vdGlmaWNhdGlvbi5nZXQoKV07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYkhUTUxWaWV3Lm1tIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1M
Vmlldy5tbQppbmRleCBhOWIyOTFlNDk5ZjgwMjk3Y2M3NTY3OWYzOTBlZjZiZGUwNjFjNGE0Li4y
MTY5NWU0NTI1YmQ2YmYxNTJiNDYyODUyMDAwZDVkYTBhOTE0M2FhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQv
bWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0KQEAgLTIzNzAsNyArMjM3MCw3IEBAIHN0YXRpYyBT
dHJpbmcgY29tbWFuZE5hbWVGb3JTZWxlY3RvcihTRUwgc2VsZWN0b3IpCiAgICAgc3RhdGljIGNv
bnN0IFNlbGVjdG9yTmFtZU1hcCogZXhjZXB0aW9uTWFwID0gY3JlYXRlU2VsZWN0b3JFeGNlcHRp
b25NYXAoKTsKICAgICBTZWxlY3Rvck5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZXhjZXB0
aW9uTWFwLT5maW5kKHNlbGVjdG9yKTsKICAgICBpZiAoaXQgIT0gZXhjZXB0aW9uTWFwLT5lbmQo
KSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBpdC0+dmFsdWU7
CiAKICAgICAvLyBSZW1vdmUgdGhlIHRyYWlsaW5nIGNvbG9uLgogICAgIC8vIE5vIG5lZWQgdG8g
Y2FwaXRhbGl6ZSB0aGUgY29tbWFuZCBuYW1lIHNpbmNlIEVkaXRvciBjb21tYW5kIG5hbWVzIGFy
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwIGIvU291cmNl
L1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCmluZGV4IDUxMDU4MjcyYWQ5MGFjYWRjOWZhZjhm
YzdkY2FjYWM2NGUyYmI0YjguLmVmMDAwNzE0NmI4MzhlNzVlZDcyYThiODlmMmE0ODY5OTI4MDcw
NjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAKQEAgLTIyMzAsNyArMjIzMCw3IEBAIHN0
YXRpYyB2b2lkIGV4dHJhY3RDb250ZW50VHlwZUZyb21QbHVnaW5WZWN0b3IoY29uc3QgVmVjdG9y
PFBsdWdpblBhY2thZ2UqPiYgcGx1CiAgICAgICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29u
c3RfaXRlcmF0b3IgbWFwX2l0ID0gcGx1Z2luc1tpXS0+bWltZVRvRGVzY3JpcHRpb25zKCkuYmVn
aW4oKTsKICAgICAgICAgTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBtYXBf
ZW5kID0gcGx1Z2luc1tpXS0+bWltZVRvRGVzY3JpcHRpb25zKCkuZW5kKCk7CiAgICAgICAgIGZv
ciAoOyBtYXBfaXQgIT0gbWFwX2VuZDsgKyttYXBfaXQpCi0gICAgICAgICAgICAqbGlzdCA8PCBt
YXBfaXQtPmZpcnN0OworICAgICAgICAgICAgKmxpc3QgPDwgbWFwX2l0LT5rZXk7CiAgICAgfQog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGx1Z2luZGF0YWJhc2Uu
Y3BwIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBsdWdpbmRhdGFiYXNlLmNwcAppbmRleCBh
N2EzYjVmMmMxZTg5ZjQ3NDM3YzA4YTk3ZmNiMjk2Nzg2YmY4ZTU4Li5jNTMyOGM4ZjY3NWYyYzY2
ZjdiOWI0MjBkNjUxMzdmZDlmODZiODk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0Fw
aS9xd2VicGx1Z2luZGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJw
bHVnaW5kYXRhYmFzZS5jcHAKQEAgLTEyMiw4ICsxMjIsOCBAQCBRTGlzdDxRV2ViUGx1Z2luSW5m
bzo6TWltZVR5cGU+IFFXZWJQbHVnaW5JbmZvOjptaW1lVHlwZXMoKSBjb25zdAogCiAgICAgICAg
IGZvciAoTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1pbWVUb0Rl
c2NyaXB0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIE1pbWVU
eXBlIG1pbWVUeXBlOwotICAgICAgICAgICAgbWltZVR5cGUubmFtZSA9IGl0LT5maXJzdDsKLSAg
ICAgICAgICAgIG1pbWVUeXBlLmRlc2NyaXB0aW9uID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAg
IG1pbWVUeXBlLm5hbWUgPSBpdC0+a2V5OworICAgICAgICAgICAgbWltZVR5cGUuZGVzY3JpcHRp
b24gPSBpdC0+dmFsdWU7CiAKICAgICAgICAgICAgIFFTdHJpbmdMaXN0IGZpbGVFeHRlbnNpb25z
OwogICAgICAgICAgICAgVmVjdG9yPFN0cmluZz4gZXh0ZW5zaW9ucyA9IG1fcGFja2FnZS0+bWlt
ZVRvRXh0ZW5zaW9ucygpLmdldChtaW1lVHlwZS5uYW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzUXQuY3BwIGIvU291cmNl
L1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNRdC5jcHAKaW5kZXgg
Y2Q0YWIwZDcyZDg2ODEyNWRjODZlZTk4N2JjY2U2ZWYzYWIxYWQ4OS4uN2Q0YjBiNzVmOWQyYzRl
NzY3OWRiM2QwN2I1NjE3YTQyMTQwNGM1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9X
ZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNRdC5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9xdC9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNRdC5jcHAKQEAgLTEzMyw4ICsx
MzMsOCBAQCB2b2lkIFBsYXRmb3JtU3RyYXRlZ2llc1F0OjpnZXRQbHVnaW5JbmZvKGNvbnN0IFdl
YkNvcmU6OlBhZ2UqIHBhZ2UsIFZlY3RvcjxXZWJDbwogICAgICAgICBmb3IgKE1JTUVUb0Rlc2Ny
aXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBNaW1lQ2xhc3NJbmZvIG1pbWU7CiAK
LSAgICAgICAgICAgIG1pbWUudHlwZSA9IGl0LT5maXJzdDsKLSAgICAgICAgICAgIG1pbWUuZGVz
YyA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICBtaW1lLnR5cGUgPSBpdC0+a2V5OworICAgICAg
ICAgICAgbWltZS5kZXNjID0gaXQtPnZhbHVlOwogICAgICAgICAgICAgbWltZS5leHRlbnNpb25z
ID0gcGFja2FnZS0+bWltZVRvRXh0ZW5zaW9ucygpLmdldChtaW1lLnR5cGUpOwogCiAgICAgICAg
ICAgICBpbmZvLm1pbWVzLmFwcGVuZChtaW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
d2luL0NPTVByb3BlcnR5QmFnLmggYi9Tb3VyY2UvV2ViS2l0L3dpbi9DT01Qcm9wZXJ0eUJhZy5o
CmluZGV4IGRkMGE4YzQyZjRkMWNlYzJjOTQyODk4NTIzNTZhMGYyYmRkYTFiNWMuLmYwY2QwYzM3
MTNlMGFhMDQzY2U2ZmY5ZTFkZjU4ZGJlY2RkMzU2ZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvd2luL0NPTVByb3BlcnR5QmFnLmgKKysrIGIvU291cmNlL1dlYktpdC93aW4vQ09NUHJvcGVy
dHlCYWcuaApAQCAtMTQ1LDkgKzE0NSw5IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgQ09N
UHJvcGVydHlCYWc8VmFsdWVUeXBlLCBLZXlUeXBlLCBIYXNoVHlwZT46OlJlYWQoTFBDCiAKICAg
ICBWQVJUWVBFIHJlcXVlc3RlZFR5cGUgPSBWX1ZUKHBWYXIpOwogICAgIFZfVlQocFZhcikgPSBW
VF9FTVBUWTsKLSAgICBDT01WYXJpYW50U2V0dGVyPFZhbHVlVHlwZT46OnNldFZhcmlhbnQocFZh
ciwgaXQtPnNlY29uZCk7CisgICAgQ09NVmFyaWFudFNldHRlcjxWYWx1ZVR5cGU+OjpzZXRWYXJp
YW50KHBWYXIsIGl0LT52YWx1ZSk7CiAKLSAgICBpZiAocmVxdWVzdGVkVHlwZSAhPSBDT01WYXJp
YW50U2V0dGVyPFZhbHVlVHlwZT46OnZhcmlhbnRUeXBlKGl0LT5zZWNvbmQpICYmIHJlcXVlc3Rl
ZFR5cGUgIT0gVlRfRU1QVFkpCisgICAgaWYgKHJlcXVlc3RlZFR5cGUgIT0gQ09NVmFyaWFudFNl
dHRlcjxWYWx1ZVR5cGU+Ojp2YXJpYW50VHlwZShpdC0+dmFsdWUpICYmIHJlcXVlc3RlZFR5cGUg
IT0gVlRfRU1QVFkpCiAgICAgICAgIHJldHVybiA6OlZhcmlhbnRDaGFuZ2VUeXBlKHBWYXIsIHBW
YXIsIFZBUklBTlRfTk9VU0VST1ZFUlJJREUgfCBWQVJJQU5UX0FMUEhBQk9PTCwgcmVxdWVzdGVk
VHlwZSk7CiAKICAgICByZXR1cm4gU19PSzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2lu
L1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAgYi9Tb3VyY2UvV2ViS2l0
L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCmluZGV4IDIzMGYz
MzIzZjU0MjkxZDAxZTE0MTk4MTc4ZmEyMTZhNDhjMGNmNWIuLmYxMzBmNzZiZDJhNjc2OTdhZGU3
YTM2Nzg4NDUyNDNhOWY2YTcxYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYkNv
cmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC93
aW4vV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcApAQCAtOTMsOCArOTMs
OCBAQCB2b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Z2V0UGx1Z2luSW5mbyhjb25zdCBXZWJD
b3JlOjpQYWdlKiwgVmVjdG9yPFdlYkNvcmU6OgogICAgICAgICBmb3IgKE1JTUVUb0Rlc2NyaXB0
aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBNaW1lQ2xhc3NJbmZvIG1pbWU7CiAKLSAg
ICAgICAgICAgIG1pbWUudHlwZSA9IGl0LT5maXJzdDsKLSAgICAgICAgICAgIG1pbWUuZGVzYyA9
IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICBtaW1lLnR5cGUgPSBpdC0+a2V5OworICAgICAgICAg
ICAgbWltZS5kZXNjID0gaXQtPnZhbHVlOwogICAgICAgICAgICAgbWltZS5leHRlbnNpb25zID0g
cGFja2FnZS0+bWltZVRvRXh0ZW5zaW9ucygpLmdldChtaW1lLnR5cGUpOwogCiAgICAgICAgICAg
ICBpbmZvLm1pbWVzLmFwcGVuZChtaW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2lu
L1dlYktpdENPTUFQSS5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJLaXRDT01BUEkuY3BwCmlu
ZGV4IDljOWNjMDI2YjQ3YjRmZWE5NjBjNjM5ODQ2ZTBlYmE1MWM0NjUzYzIuLjRkOGZmMDk1YmRh
OTYwN2QyOWExNDViODU3Yzc4ZGRmZjhlMzVlN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
d2luL1dlYktpdENPTUFQSS5jcHAKKysrIGIvU291cmNlL1dlYktpdC93aW4vV2ViS2l0Q09NQVBJ
LmNwcApAQCAtNTIsNyArNTIsNyBAQCBzdGF0aWMgQ09NUHRyPElDbGFzc0ZhY3Rvcnk+IGNsYXNz
RmFjdG9yeShjb25zdCBDTFNJRCYgY2xzaWQpCiAgICAgc3RhdGljIEZhY3RvcnlNYXAmIGZhY3Rv
cmllcyA9ICpuZXcgRmFjdG9yeU1hcDsKIAogICAgIEZhY3RvcnlNYXA6OkFkZFJlc3VsdCByZXN1
bHQgPSBmYWN0b3JpZXMuYWRkKGNsc2lkLCAwKTsKLSAgICBDT01QdHI8SUNsYXNzRmFjdG9yeT4m
IGZhY3RvcnkgPSByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBDT01QdHI8SUNsYXNzRmFj
dG9yeT4mIGZhY3RvcnkgPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmIChyZXN1bHQu
aXNOZXdFbnRyeSAmJiBGQUlMRUQoRGxsR2V0Q2xhc3NPYmplY3QoY2xzaWQsIF9fdXVpZG9mKGZh
Y3RvcnkpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJmZhY3RvcnkpKSkpCiAgICAgICAgIGZh
Y3RvcnkgPSAwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJOb3RpZmljYXRp
b25DZW50ZXIuY3BwIGIvU291cmNlL1dlYktpdC93aW4vV2ViTm90aWZpY2F0aW9uQ2VudGVyLmNw
cAppbmRleCBjNzE5MmQ4ZDNjZGIyY2RhZTJiYWE3MWFlNjBmN2JhOWQ4MWVkN2VhLi4zMWM4MTE5
YTUwMmI5Y2VlNjVlNDIwYmY1MTdlZTc5YWExMjg0MWIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L3dpbi9XZWJOb3RpZmljYXRpb25DZW50ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvd2lu
L1dlYk5vdGlmaWNhdGlvbkNlbnRlci5jcHAKQEAgLTEyMCw3ICsxMjAsNyBAQCB2b2lkIFdlYk5v
dGlmaWNhdGlvbkNlbnRlcjo6cG9zdE5vdGlmaWNhdGlvbkludGVybmFsKElXZWJOb3RpZmljYXRp
b24qIG5vdGlmaWNhdAogCiAgICAgLy8gSW50ZW50aW9uYWxseSBtYWtlIGEgY29weSBvZiB0aGUg
bGlzdCB0byBhdm9pZCB0aGUgcG9zc2liaWxpdHkgb2YgZXJyb3JzCiAgICAgLy8gZnJvbSBhIG11
dGF0aW9uIG9mIHRoZSBsaXN0IGluIHRoZSBvbk5vdGlmeSBjYWxsYmFjay4KLSAgICBPYmplY3RP
YnNlcnZlckxpc3QgbGlzdCA9IGl0LT5zZWNvbmQ7CisgICAgT2JqZWN0T2JzZXJ2ZXJMaXN0IGxp
c3QgPSBpdC0+dmFsdWU7CiAKICAgICBPYnNlcnZlckxpc3RJdGVyYXRvciBlbmQgPSBsaXN0LmVu
ZCgpOwogICAgIGZvciAoT2JzZXJ2ZXJMaXN0SXRlcmF0b3IgaXQyID0gbGlzdC5iZWdpbigpOyBp
dDIgIT0gZW5kOyArK2l0MikgewpAQCAtMTQ5LDcgKzE0OSw3IEBAIEhSRVNVTFQgU1RETUVUSE9E
Q0FMTFRZUEUgV2ViTm90aWZpY2F0aW9uQ2VudGVyOjphZGRPYnNlcnZlcigKICAgICBTdHJpbmcg
bmFtZShub3RpZmljYXRpb25OYW1lLCBTeXNTdHJpbmdMZW4obm90aWZpY2F0aW9uTmFtZSkpOwog
ICAgIE1hcHBlZE9ic2VydmVyczo6aXRlcmF0b3IgaXQgPSBkLT5tX21hcHBlZE9ic2VydmVycy5m
aW5kKG5hbWUpOwogICAgIGlmIChpdCAhPSBkLT5tX21hcHBlZE9ic2VydmVycy5lbmQoKSkKLSAg
ICAgICAgaXQtPnNlY29uZC5hcHBlbmQoT2JqZWN0T2JzZXJ2ZXJQYWlyKGFuT2JqZWN0LCBvYnNl
cnZlcikpOworICAgICAgICBpdC0+dmFsdWUuYXBwZW5kKE9iamVjdE9ic2VydmVyUGFpcihhbk9i
amVjdCwgb2JzZXJ2ZXIpKTsKICAgICBlbHNlIHsKICAgICAgICAgT2JqZWN0T2JzZXJ2ZXJMaXN0
IGxpc3Q7CiAgICAgICAgIGxpc3QuYXBwZW5kKE9iamVjdE9ic2VydmVyUGFpcihhbk9iamVjdCwg
b2JzZXJ2ZXIpKTsKQEAgLTE5OCw3ICsxOTgsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IFdlYk5vdGlmaWNhdGlvbkNlbnRlcjo6cmVtb3ZlT2JzZXJ2ZXIoCiAgICAgaWYgKGl0ID09IGQt
Pm1fbWFwcGVkT2JzZXJ2ZXJzLmVuZCgpKQogICAgICAgICByZXR1cm4gRV9GQUlMOwogCi0gICAg
T2JqZWN0T2JzZXJ2ZXJMaXN0JiBvYnNlcnZlckxpc3QgPSBpdC0+c2Vjb25kOworICAgIE9iamVj
dE9ic2VydmVyTGlzdCYgb2JzZXJ2ZXJMaXN0ID0gaXQtPnZhbHVlOwogICAgIE9ic2VydmVyTGlz
dEl0ZXJhdG9yIGVuZCA9IG9ic2VydmVyTGlzdC5lbmQoKTsKIAogICAgIGludCBpID0gMDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJh
dGVnaWVzV2luQ0UuY3BwIGIvU291cmNlL1dlYktpdC93aW5jZS9XZWJDb3JlU3VwcG9ydC9QbGF0
Zm9ybVN0cmF0ZWdpZXNXaW5DRS5jcHAKaW5kZXggM2Y4YzkwN2M3MzlmMDhjZGI5OTE2ZTgzNmY5
YjA4ZGU2Nzg0NTFjZi4uZDU1Nzk3MjMxMTYxNTkxZDVmZGIxNzE1ODA0NDU4ZGI3ODJjOTFmMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW5jZS9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0
cmF0ZWdpZXNXaW5DRS5jcHAKKysrIGIvU291cmNlL1dlYktpdC93aW5jZS9XZWJDb3JlU3VwcG9y
dC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5jcHAKQEAgLTk0LDggKzk0LDggQEAgdm9pZCBQbGF0
Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6Z2V0UGx1Z2luSW5mbyhjb25zdCBQYWdlKiwgVmVjdG9yPFBs
dWdpbkluZm8+JiBvdXQKICAgICAgICAgZm9yIChNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbWltZVRvRGVzY3JpcHRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgewogICAgICAgICAgICAgTWltZUNsYXNzSW5mbyBtaW1lOwogCi0gICAgICAgICAgICBtaW1l
LnR5cGUgPSBpdC0+Zmlyc3Q7Ci0gICAgICAgICAgICBtaW1lLmRlc2MgPSBpdC0+c2Vjb25kOwor
ICAgICAgICAgICAgbWltZS50eXBlID0gaXQtPmtleTsKKyAgICAgICAgICAgIG1pbWUuZGVzYyA9
IGl0LT52YWx1ZTsKICAgICAgICAgICAgIG1pbWUuZXh0ZW5zaW9ucyA9IHBhY2thZ2UtPm1pbWVU
b0V4dGVuc2lvbnMoKS5nZXQobWltZS50eXBlKTsKIAogICAgICAgICAgICAgaW5mby5taW1lcy5h
cHBlbmQobWltZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBD
L0FyZ3VtZW50Q29kZXJzLmggYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0FyZ3Vt
ZW50Q29kZXJzLmgKaW5kZXggMDcwZjQ1ODMwNzlmN2I0ZWViZmNmNGEyYTg4ODQ3ODZkOGM1NTQw
YS4uNDdiZGRkZjY5YzljYWYzYjdhMjZlODIyYzc3MTM5YzQyNzBlZTc4MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVudENvZGVycy5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQXJndW1lbnRDb2RlcnMuaApAQCAtNzIsNiAr
NzIsMjkgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gc3RydWN0IEFyZ3VtZW50
Q29kZXI8c3RkOjpwYWlyPFQsIFU+ID4gewogICAgIH0KIH07CiAKK3RlbXBsYXRlPHR5cGVuYW1l
IEtleVR5cGUsIHR5cGVuYW1lIE1hcHBlZFR5cGU+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdURjo6
SGFzaE1hcEVudHJ5PEtleVR5cGUsIE1hcHBlZFR5cGU+ID4geworICAgIHN0YXRpYyB2b2lkIGVu
Y29kZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0IFdURjo6SGFzaE1hcEVudHJ5PEtl
eVR5cGUsIE1hcHBlZFR5cGU+JiBoYXNoTWFwRW50cnkpCisgICAgeworICAgICAgICBlbmNvZGVy
LT5lbmNvZGUoaGFzaE1hcEVudHJ5LmtleSk7CisgICAgICAgIGVuY29kZXItPmVuY29kZShoYXNo
TWFwRW50cnkudmFsdWUpOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVu
dERlY29kZXIqIGRlY29kZXIsIFdURjo6SGFzaE1hcEVudHJ5PEtleVR5cGUsIE1hcHBlZFR5cGU+
JiBoYXNoTWFwRW50cnkpCisgICAgeworICAgICAgICBLZXlUeXBlIGtleTsKKyAgICAgICAgaWYg
KCFkZWNvZGVyLT5kZWNvZGUoa2V5KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
ICAgICBNYXBwZWRUeXBlIHZhbHVlOworICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZSh2YWx1
ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaGFzaE1hcEVudHJ5Lmtl
eSA9IGtleTsKKyAgICAgICAgaGFzaE1hcEVudHJ5LnZhbHVlID0gdmFsdWU7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KK307CisKIHRlbXBsYXRlPGJvb2wgZml4ZWRTaXplRWxlbWVudHMs
IHR5cGVuYW1lIFQ+IHN0cnVjdCBWZWN0b3JBcmd1bWVudENvZGVyOwogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdHJ1Y3QgVmVjdG9yQXJndW1lbnRDb2RlcjxmYWxzZSwgVD4gewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Db25uZWN0aW9uLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5jcHAKaW5kZXggZjdjMzcyM2Y3
ZWY3ZGQyMjkxZWE1OTE1MDYwMDkzZGMxYzQxOGJiNS4uOTMyYWJiMjNjYjQwMjNlYzkzNjViN2Zl
ZjM5NDU0OWZmZDYwODYzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29y
ZUlQQy9Db25uZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBD
L0Nvbm5lY3Rpb24uY3BwCkBAIC0xMDMsMTIgKzEwMywxMiBAQCBQYXNzUmVmUHRyPENvbm5lY3Rp
b246OlN5bmNNZXNzYWdlU3RhdGU+IENvbm5lY3Rpb246OlN5bmNNZXNzYWdlU3RhdGU6OmdldE9y
Q3JlYQogICAgIFN5bmNNZXNzYWdlU3RhdGVNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBzeW5jTWVz
c2FnZVN0YXRlTWFwKCkuYWRkKHJ1bkxvb3AsIDApOwogCiAgICAgaWYgKCFyZXN1bHQuaXNOZXdF
bnRyeSkgewotICAgICAgICBBU1NFUlQocmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOwotICAgICAg
ICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgIEFTU0VSVChyZXN1bHQu
aXRlcmF0b3ItPnZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7
CiAgICAgfQogCiAgICAgUmVmUHRyPFN5bmNNZXNzYWdlU3RhdGU+IHN5bmNNZXNzYWdlU3RhdGUg
PSBhZG9wdFJlZihuZXcgU3luY01lc3NhZ2VTdGF0ZShydW5Mb29wKSk7Ci0gICAgcmVzdWx0Lml0
ZXJhdG9yLT5zZWNvbmQgPSBzeW5jTWVzc2FnZVN0YXRlLmdldCgpOworICAgIHJlc3VsdC5pdGVy
YXRvci0+dmFsdWUgPSBzeW5jTWVzc2FnZVN0YXRlLmdldCgpOwogCiAgICAgcmV0dXJuIHN5bmNN
ZXNzYWdlU3RhdGUucmVsZWFzZSgpOwogfQpAQCAtMzYzLDEwICszNjMsMTAgQEAgUGFzc093blB0
cjxBcmd1bWVudERlY29kZXI+IENvbm5lY3Rpb246OndhaXRGb3JNZXNzYWdlKE1lc3NhZ2VJRCBt
ZXNzYWdlSUQsIHVpbnQKICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fd2FpdEZvck1lc3Nh
Z2VNdXRleCk7CiAKICAgICAgICAgSGFzaE1hcDxzdGQ6OnBhaXI8dW5zaWduZWQsIHVpbnQ2NF90
PiwgQXJndW1lbnREZWNvZGVyKj46Oml0ZXJhdG9yIGl0ID0gbV93YWl0Rm9yTWVzc2FnZU1hcC5m
aW5kKG1lc3NhZ2VBbmREZXN0aW5hdGlvbik7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kKSB7Cisg
ICAgICAgIGlmIChpdC0+dmFsdWUpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBtX3dhaXRGb3JN
ZXNzYWdlTWFwIHNob3VsZCByZWFsbHkgaG9sZCBPd25QdHJzIHRvCiAgICAgICAgICAgICAvLyBB
cmd1bWVudERlY29kZXJzLCBidXQgSGFzaE1hcCBkb2Vzbid0IGN1cnJlbnRseSBzdXBwb3J0IE93
blB0cnMuCi0gICAgICAgICAgICBPd25QdHI8QXJndW1lbnREZWNvZGVyPiBhcmd1bWVudHMgPSBh
ZG9wdFB0cihpdC0+c2Vjb25kKTsKKyAgICAgICAgICAgIE93blB0cjxBcmd1bWVudERlY29kZXI+
IGFyZ3VtZW50cyA9IGFkb3B0UHRyKGl0LT52YWx1ZSk7CiAgICAgICAgICAgICBtX3dhaXRGb3JN
ZXNzYWdlTWFwLnJlbW92ZShpdCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHJldHVybiBh
cmd1bWVudHMucmVsZWFzZSgpOwpAQCAtNTQwLDggKzU0MCw4IEBAIHZvaWQgQ29ubmVjdGlvbjo6
cHJvY2Vzc0luY29taW5nTWVzc2FnZShNZXNzYWdlSUQgbWVzc2FnZUlELCBQYXNzT3duUHRyPEFy
Z3VtZW50CiAgICAgICAgIAogICAgICAgICBIYXNoTWFwPHN0ZDo6cGFpcjx1bnNpZ25lZCwgdWlu
dDY0X3Q+LCBBcmd1bWVudERlY29kZXIqPjo6aXRlcmF0b3IgaXQgPSBtX3dhaXRGb3JNZXNzYWdl
TWFwLmZpbmQoc3RkOjptYWtlX3BhaXIobWVzc2FnZUlELnRvSW50KCksIGluY29taW5nTWVzc2Fn
ZS5kZXN0aW5hdGlvbklEKCkpKTsKICAgICAgICAgaWYgKGl0ICE9IG1fd2FpdEZvck1lc3NhZ2VN
YXAuZW5kKCkpIHsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQgPSBpbmNvbWluZ01lc3NhZ2UucmVs
ZWFzZUFyZ3VtZW50cygpLmxlYWtQdHIoKTsKLSAgICAgICAgICAgIEFTU0VSVChpdC0+c2Vjb25k
KTsKKyAgICAgICAgICAgIGl0LT52YWx1ZSA9IGluY29taW5nTWVzc2FnZS5yZWxlYXNlQXJndW1l
bnRzKCkubGVha1B0cigpOworICAgICAgICAgICAgQVNTRVJUKGl0LT52YWx1ZSk7CiAgICAgICAg
IAogICAgICAgICAgICAgbV93YWl0Rm9yTWVzc2FnZUNvbmRpdGlvbi5zaWduYWwoKTsKICAgICAg
ICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2d0ay9X
b3JrUXVldWVHdGsuY3BwIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vZ3RrL1dvcmtRdWV1ZUd0
ay5jcHAKaW5kZXggMWRmYWI4M2NjZmIyNGM5ZjAwZWU0MGQyZGFhMWM5NWIxNjM4MmE0My4uNjg4
NWQ0ODViZDExNmQzMjhkZWNkMDJhYWY1NGM5MTg3ODJiMmYxNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvUGxhdGZvcm0vZ3RrL1dvcmtRdWV1ZUd0ay5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvUGxhdGZvcm0vZ3RrL1dvcmtRdWV1ZUd0ay5jcHAKQEAgLTE2Niw3ICsxNjYsNyBAQCB2b2lk
IFdvcmtRdWV1ZTo6cmVnaXN0ZXJFdmVudFNvdXJjZUhhbmRsZXIoaW50IGZpbGVEZXNjcmlwdG9y
LCBpbnQgY29uZGl0aW9uLCBjbwogICAgICAgICBWZWN0b3I8RXZlbnRTb3VyY2UqPiBzb3VyY2Vz
OwogICAgICAgICBFdmVudFNvdXJjZUl0ZXJhdG9yIGl0ID0gbV9ldmVudFNvdXJjZXMuZmluZChm
aWxlRGVzY3JpcHRvcik7CiAgICAgICAgIGlmIChpdCAhPSBtX2V2ZW50U291cmNlcy5lbmQoKSkg
Ci0gICAgICAgICAgICBzb3VyY2VzID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIHNvdXJjZXMg
PSBpdC0+dmFsdWU7CiAKICAgICAgICAgc291cmNlcy5hcHBlbmQoZXZlbnRTb3VyY2UpOwogICAg
ICAgICBtX2V2ZW50U291cmNlcy5zZXQoZmlsZURlc2NyaXB0b3IsIHNvdXJjZXMpOwpAQCAtMTg2
LDcgKzE4Niw3IEBAIHZvaWQgV29ya1F1ZXVlOjp1bnJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVy
KGludCBmaWxlRGVzY3JpcHRvcikKICAgICBBU1NFUlQobV9ldmVudFNvdXJjZXMuY29udGFpbnMo
ZmlsZURlc2NyaXB0b3IpKTsKIAogICAgIGlmIChpdCAhPSBtX2V2ZW50U291cmNlcy5lbmQoKSkg
ewotICAgICAgICBWZWN0b3I8RXZlbnRTb3VyY2UqPiBzb3VyY2VzID0gaXQtPnNlY29uZDsKKyAg
ICAgICAgVmVjdG9yPEV2ZW50U291cmNlKj4gc291cmNlcyA9IGl0LT52YWx1ZTsKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNvdXJjZXMuc2l6ZSgpOyBpKyspCiAgICAgICAgICAg
ICBzb3VyY2VzW2ldLT5jYW5jZWwoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxh
dGZvcm0vbWFjL1dvcmtRdWV1ZU1hYy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9tYWMv
V29ya1F1ZXVlTWFjLmNwcAppbmRleCBhZTQ3M2VlNWNjODRlNTg0MjliMDQzOWNjZDkyMWFjMmM0
OTJmZmFhLi42ZTU0Y2VlMGI3MDk4NDBhNTRmNzZjZGFhNDI0ZmVlYjQ2MjkwOWIxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9tYWMvV29ya1F1ZXVlTWFjLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9tYWMvV29ya1F1ZXVlTWFjLmNwcApAQCAtMTUzLDcgKzE1
Myw3IEBAIHZvaWQgV29ya1F1ZXVlOjp1bnJlZ2lzdGVyTWFjaFBvcnRFdmVudEhhbmRsZXIobWFj
aF9wb3J0X3QgbWFjaFBvcnQpCiAgICAgCiAgICAgQVNTRVJUKG1fZXZlbnRTb3VyY2VzLmNvbnRh
aW5zKG1hY2hQb3J0KSk7CiAKLSAgICBFdmVudFNvdXJjZSogZXZlbnRTb3VyY2UgPSBpdC0+c2Vj
b25kOworICAgIEV2ZW50U291cmNlKiBldmVudFNvdXJjZSA9IGl0LT52YWx1ZTsKICAgICAvLyBD
YW5jZWwgYW5kIHJlbGVhc2UgdGhlIHNvdXJjZS4gSXQgd2lsbCBiZSBkZWxldGVkIGluIGl0cyBm
aW5hbGl6ZSBoYW5kbGVyLgogICAgIGRpc3BhdGNoX3NvdXJjZV9jYW5jZWwoZXZlbnRTb3VyY2Ut
PmRpc3BhdGNoU291cmNlKCkpOwogICAgIGRpc3BhdGNoX3JlbGVhc2UoZXZlbnRTb3VyY2UtPmRp
c3BhdGNoU291cmNlKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1BsdWdp
bnMvTlBSZW1vdGVPYmplY3RNYXAuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1BsdWdpbnMv
TlBSZW1vdGVPYmplY3RNYXAuY3BwCmluZGV4IDc2NDFhZjVlOGM4OTJkMWQzN2VlOTZkYTliN2U2
MDU4OTk3M2U4OGEuLmI1ZWMyZDlkYTM5ZjI2ZGNiNDMyMGQ5NWUwM2YyZmNhZTRlN2Q3ZGYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9QbHVnaW5zL05QUmVtb3RlT2JqZWN0TWFw
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvUGx1Z2lucy9OUFJlbW90ZU9iamVjdE1h
cC5jcHAKQEAgLTIwMCw3ICsyMDAsNyBAQCB2b2lkIE5QUmVtb3RlT2JqZWN0TWFwOjpwbHVnaW5E
ZXN0cm95ZWQoUGx1Z2luKiBwbHVnaW4pCiAKICAgICAvLyBHYXRoZXIgdGhlIHJlY2VpdmVycyBh
c3NvY2lhdGVkIHdpdGggdGhpcyBwbHVnLWluLgogICAgIGZvciAoSGFzaE1hcDx1aW50NjRfdCwg
TlBPYmplY3RNZXNzYWdlUmVjZWl2ZXIqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3JlZ2lzdGVy
ZWROUE9iamVjdHMuYmVnaW4oKSwgZW5kID0gbV9yZWdpc3RlcmVkTlBPYmplY3RzLmVuZCgpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgTlBPYmplY3RNZXNzYWdlUmVjZWl2ZXIqIG5wT2Jq
ZWN0TWVzc2FnZVJlY2VpdmVyID0gaXQtPnNlY29uZDsKKyAgICAgICAgTlBPYmplY3RNZXNzYWdl
UmVjZWl2ZXIqIG5wT2JqZWN0TWVzc2FnZVJlY2VpdmVyID0gaXQtPnZhbHVlOwogICAgICAgICBp
ZiAobnBPYmplY3RNZXNzYWdlUmVjZWl2ZXItPnBsdWdpbigpID09IHBsdWdpbikKICAgICAgICAg
ICAgIG1lc3NhZ2VSZWNlaXZlcnMuYXBwZW5kKG5wT2JqZWN0TWVzc2FnZVJlY2VpdmVyKTsKICAg
ICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvVXNlck1lc3NhZ2VDb2RlcnMu
aCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Vc2VyTWVzc2FnZUNvZGVycy5oCmluZGV4IGFjZTcy
ZmQyZTMzZTNiYzExN2ZjMmZhNDU1ZjE1ZDg3NzdmYzAwM2YuLjU3YzBjMTZiMTJhMGU1MTZkOTk3
MTU2OGEyOTM0OWE2OTk3N2UzYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9V
c2VyTWVzc2FnZUNvZGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Vc2VyTWVzc2Fn
ZUNvZGVycy5oCkBAIC05Myw4ICs5Myw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIEltbXV0YWJs
ZURpY3Rpb25hcnk6Ok1hcFR5cGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLmJlZ2luKCk7CiAg
ICAgICAgICAgICBJbW11dGFibGVEaWN0aW9uYXJ5OjpNYXBUeXBlOjpjb25zdF9pdGVyYXRvciBl
bmQgPSBtYXAuZW5kKCk7CiAgICAgICAgICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7Ci0g
ICAgICAgICAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKGl0LT5maXJzdCk7Ci0gICAgICAgICAgICAg
ICAgZW5jb2Rlci0+ZW5jb2RlKE93bmVyKGl0LT5zZWNvbmQuZ2V0KCkpKTsKKyAgICAgICAgICAg
ICAgICBlbmNvZGVyLT5lbmNvZGUoaXQtPmtleSk7CisgICAgICAgICAgICAgICAgZW5jb2Rlci0+
ZW5jb2RlKE93bmVyKGl0LT52YWx1ZS5nZXQoKSkpOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9XZWJQcmVmZXJlbmNlc1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQ
cmVmZXJlbmNlc1N0b3JlLmNwcAppbmRleCA4NjY4YmVjMGMwYTRmYzgxMDE5ZTc3NzBkMDYwZDMy
NWFjYmEzNWJhLi45Nzg0ZTVmZDgxMGM1ODQ2ZTIyODYwOTg0YjQzN2UxNTQ5OGU5YmMyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByZWZlcmVuY2VzU3RvcmUuY3BwCkBAIC0xNTEs
NyArMTUxLDcgQEAgc3RhdGljIHR5cGVuYW1lIE1hcFR5cGU6Ok1hcHBlZFR5cGUgdmFsdWVGb3JL
ZXkoY29uc3QgTWFwVHlwZSYgbWFwLCBjb25zdCB0eXBlbmEKIHsKICAgICB0eXBlbmFtZSBNYXBU
eXBlOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC5maW5kKGtleSk7CiAgICAgaWYgKGl0ICE9IG1h
cC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBpdC0+
dmFsdWU7CiAKICAgICByZXR1cm4gZGVmYXVsdFZhbHVlRm9yS2V5PHR5cGVuYW1lIE1hcFR5cGU6
Ok1hcHBlZFR5cGU+KGtleSk7CiB9CkBAIC0xODcsNyArMTg3LDcgQEAgYm9vbCBXZWJQcmVmZXJl
bmNlc1N0b3JlOjpnZXRCb29sVmFsdWVGb3JLZXkoY29uc3QgU3RyaW5nJiBrZXkpIGNvbnN0CiAg
ICAgLy8gRklYTUU6IEV4dGVuZCBvdmVycmlkaW5nIHRvIG90aGVyIGtleSB0eXBlcyB1c2VkIGZy
b20gTGF5b3V0VGVzdENvbnRyb2xsZXIuCiAgICAgQm9vbE92ZXJyaWRlc01hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBib29sVGVzdFJ1bm5lck92ZXJyaWRlc01hcCgpLmZpbmQoa2V5KTsKICAgICBp
ZiAoaXQgIT0gYm9vbFRlc3RSdW5uZXJPdmVycmlkZXNNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0
dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBpdC0+dmFsdWU7CiAgICAgcmV0dXJuIHZh
bHVlRm9yS2V5KG1fYm9vbFZhbHVlcywga2V5KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvU2hhcmVkL2d0ay9XZWJDb3JlQXJndW1lbnRDb2RlcnNHdGsuY3BwIGIvU291cmNlL1dl
YktpdDIvU2hhcmVkL2d0ay9XZWJDb3JlQXJndW1lbnRDb2RlcnNHdGsuY3BwCmluZGV4IDlkNmUy
NWM2NmQ4NmIzZTJmMWQ5NDM3NDM3YmEyZmFiNDYwMjVhM2IuLjQxMzcwYmFlNzM5YTJlMDc2NjIz
NjEwOWJkNjAzODk5NGFiYzJkMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9n
dGsvV2ViQ29yZUFyZ3VtZW50Q29kZXJzR3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvZ3RrL1dlYkNvcmVBcmd1bWVudENvZGVyc0d0ay5jcHAKQEAgLTE0NCw3ICsxNDQsNyBAQCBi
b29sIEFyZ3VtZW50Q29kZXI8UmVzb3VyY2VSZXNwb25zZT46OmRlY29kZShBcmd1bWVudERlY29k
ZXIqIGRlY29kZXIsIFJlc291cmNlUgogICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGhlYWRlcnMp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IGhlYWRlcnMuYmVnaW4oKSwgZW5kID0gaGVhZGVycy5lbmQoKTsgaXQgIT0g
ZW5kOyArK2l0KQotICAgICAgICByZXNwb25zZS5zZXRIVFRQSGVhZGVyRmllbGQoaXQtPmZpcnN0
LCBpdC0+c2Vjb25kKTsKKyAgICAgICAgcmVzcG9uc2Uuc2V0SFRUUEhlYWRlckZpZWxkKGl0LT5r
ZXksIGl0LT52YWx1ZSk7CiAKICAgICB1aW50MzJfdCBzb3VwTWVzc2FnZUZsYWdzOwogICAgIGlm
ICghZGVjb2Rlci0+ZGVjb2RlKHNvdXBNZXNzYWdlRmxhZ3MpKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvU2hhcmVkL3F0L0FyZ3VtZW50Q29kZXJzUXQuY3BwIGIvU291cmNlL1dlYktpdDIv
U2hhcmVkL3F0L0FyZ3VtZW50Q29kZXJzUXQuY3BwCmluZGV4IGM4OWJmNDRmMTcxOTBiMDJjNDEx
MmJjYmVkNmUwYzQxZmEzYzY3NWYuLmE0MzljYWZmMWU0ODhlMTAyYzU1MGFkMDRmMzQ2ZDU5OTZk
ZDE4OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9Bcmd1bWVudENvZGVy
c1F0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvQXJndW1lbnRDb2RlcnNRdC5j
cHAKQEAgLTg2LDggKzg2LDggQEAgYm9vbCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkRyYWdEYXRh
Pjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgRHJhZ0RhdGEKICAgICAgICAgTUlN
RURhdGFIYXNoTWFwOjppdGVyYXRvciBpdCA9IG1hcC5iZWdpbigpOwogICAgICAgICBNSU1FRGF0
YUhhc2hNYXA6Oml0ZXJhdG9yIGVuZCA9IG1hcC5lbmQoKTsKICAgICAgICAgZm9yICg7IGl0ICE9
IGVuZDsgKytpdCkgewotICAgICAgICAgICAgUUJ5dGVBcnJheSBieXRlcygoY2hhciopaXQtPnNl
Y29uZC5kYXRhKCksIGl0LT5zZWNvbmQuc2l6ZSgpKTsKLSAgICAgICAgICAgIG1pbWVEYXRhLT5z
ZXREYXRhKGl0LT5maXJzdCwgYnl0ZXMpOworICAgICAgICAgICAgUUJ5dGVBcnJheSBieXRlcygo
Y2hhciopaXQtPnZhbHVlLmRhdGEoKSwgaXQtPnZhbHVlLnNpemUoKSk7CisgICAgICAgICAgICBt
aW1lRGF0YS0+c2V0RGF0YShpdC0+a2V5LCBieXRlcyk7CiAgICAgICAgIH0KICAgICB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcu
Y3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAK
aW5kZXggMWI0M2VhNTM2YzFkZjQyOGZiYjYwMzRjMTEyNDVjNmEyMTA1ZTU1Yy4uMmI2MmExZjYx
MDI3OWMxOGE5MTkyYmVmYTkyNDg3ZjNkZDEwNmUzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKQEAgLTE3MTUsNyArMTcxNSw3
IEBAIEdMaXN0KiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3N1YnJlc291cmNlcyhXZWJLaXRXZWJWaWV3
KiB3ZWJWaWV3KQogICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiBwcml2ID0gd2ViVmlldy0+cHJp
djsKICAgICBSZXNvdXJjZXNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHByaXYtPnN1YnJlc291
cmNlc01hcC5lbmQoKTsKICAgICBmb3IgKFJlc291cmNlc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBwcml2LT5zdWJyZXNvdXJjZXNNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAg
ICBzdWJyZXNvdXJjZXMgPSBnX2xpc3RfcHJlcGVuZChzdWJyZXNvdXJjZXMsIGl0LT5zZWNvbmQu
Z2V0KCkpOworICAgICAgICBzdWJyZXNvdXJjZXMgPSBnX2xpc3RfcHJlcGVuZChzdWJyZXNvdXJj
ZXMsIGl0LT52YWx1ZS5nZXQoKSk7CiAKICAgICByZXR1cm4gZ19saXN0X3JldmVyc2Uoc3VicmVz
b3VyY2VzKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9HZW9sb2Nh
dGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9HZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcAppbmRl
eCA3MWJlYWY1YTVjMzFkNDU1Y2E4ZDJiMWEyODgxY2EyYTcyNzE0N2IyLi4wZDQxNjM1NTQ2NWZm
OTBkYTZiY2YwOGVjMzViODRjMTcxYTUzOTk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RN
YW5hZ2VyUHJveHkuY3BwCkBAIC00Miw3ICs0Miw3IEBAIHZvaWQgR2VvbG9jYXRpb25QZXJtaXNz
aW9uUmVxdWVzdE1hbmFnZXJQcm94eTo6aW52YWxpZGF0ZVJlcXVlc3RzKCkKICAgICBQZW5kaW5n
UmVxdWVzdE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BlbmRpbmdSZXF1ZXN0cy5iZWdpbigp
OwogICAgIFBlbmRpbmdSZXF1ZXN0TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BlbmRpbmdS
ZXF1ZXN0cy5lbmQoKTsKICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+
c2Vjb25kLT5pbnZhbGlkYXRlKCk7CisgICAgICAgIGl0LT52YWx1ZS0+aW52YWxpZGF0ZSgpOwog
CiAgICAgbV9wZW5kaW5nUmVxdWVzdHMuY2xlYXIoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9Ob3RpZmljYXRpb25zL05vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1
ZXN0TWFuYWdlclByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Ob3RpZmljYXRp
b25zL05vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcAppbmRleCAw
NzkyMjk4NWU0NTY1ZjNjNzNjYWRjM2EwY2Y0NTUyMTdjNjE5OTY5Li40YTBjNDc1MjkzN2I4NzJk
NWRlMjY5YzkxNjk0ZTIyMThkMzIwZTFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvTm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQ
cm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL05vdGlmaWNhdGlvbnMvTm90
aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuY3BwCkBAIC00Myw3ICs0Myw3
IEBAIHZvaWQgTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHk6OmludmFs
aWRhdGVSZXF1ZXN0cygpCiAgICAgUGVuZGluZ1JlcXVlc3RNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV9wZW5kaW5nUmVxdWVzdHMuYmVnaW4oKTsKICAgICBQZW5kaW5nUmVxdWVzdE1hcDo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gbV9wZW5kaW5nUmVxdWVzdHMuZW5kKCk7CiAgICAgZm9yICg7IGl0
ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+aW52YWxpZGF0ZSgpOworICAgICAg
ICBpdC0+dmFsdWUtPmludmFsaWRhdGUoKTsKICAgICAKICAgICBtX3BlbmRpbmdSZXF1ZXN0cy5j
bGVhcigpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMv
UGx1Z2luUHJvY2Vzc1Byb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5z
L1BsdWdpblByb2Nlc3NQcm94eS5jcHAKaW5kZXggNDNmYTJmNGNiYjA0MDkyYjJjMTkwMmJlOTBj
YTkxZThkNDQ2MDg3NS4uMzY5YWRlMmRkYzI2NTMwM2Q4MDQyZDVlMzMyZjAyY2E0MDI0N2RjYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vz
c1Byb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Q
cm9jZXNzUHJveHkuY3BwCkBAIC0xNDYsMTAgKzE0NiwxMCBAQCB2b2lkIFBsdWdpblByb2Nlc3NQ
cm94eTo6cGx1Z2luUHJvY2Vzc0NyYXNoZWRPckZhaWxlZFRvTGF1bmNoKCkKICAgICB9CiAKICAg
ICB3aGlsZSAoIW1fcGVuZGluZ0dldFNpdGVzUmVwbGllcy5pc0VtcHR5KCkpCi0gICAgICAgIGRp
ZEdldFNpdGVzV2l0aERhdGEoVmVjdG9yPFN0cmluZz4oKSwgbV9wZW5kaW5nR2V0U2l0ZXNSZXBs
aWVzLmJlZ2luKCktPmZpcnN0KTsKKyAgICAgICAgZGlkR2V0U2l0ZXNXaXRoRGF0YShWZWN0b3I8
U3RyaW5nPigpLCBtX3BlbmRpbmdHZXRTaXRlc1JlcGxpZXMuYmVnaW4oKS0+a2V5KTsKIAogICAg
IHdoaWxlICghbV9wZW5kaW5nQ2xlYXJTaXRlRGF0YVJlcGxpZXMuaXNFbXB0eSgpKQotICAgICAg
ICBkaWRDbGVhclNpdGVEYXRhKG1fcGVuZGluZ0NsZWFyU2l0ZURhdGFSZXBsaWVzLmJlZ2luKCkt
PmZpcnN0KTsKKyAgICAgICAgZGlkQ2xlYXJTaXRlRGF0YShtX3BlbmRpbmdDbGVhclNpdGVEYXRh
UmVwbGllcy5iZWdpbigpLT5rZXkpOwogCiAgICAgLy8gVGVsbCB0aGUgcGx1Zy1pbiBwcm9jZXNz
IG1hbmFnZXIgdG8gZm9yZ2V0IGFib3V0IHRoaXMgcGx1Zy1pbiBwcm9jZXNzIHByb3h5LiBUaGlz
IG1heSBjYXVzZSB1cyB0byBiZSBkZWxldGVkLgogICAgIG1fcGx1Z2luUHJvY2Vzc01hbmFnZXIt
PnJlbW92ZVBsdWdpblByb2Nlc3NQcm94eSh0aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJDb250ZXh0LmNwcAppbmRleCAyZWNmZjlkNGIwNzcxOTRiMDU4NWEzZjFkOTQyMDY1ZWEyZjJi
NTVjLi4yZjMzMzhmNWI5MWZiZTBjYWQyNDI1MGY3NDA3MjYzNjg0YmU1NmQ2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHQuY3BwCkBAIC04NzAsNyArODcwLDcgQEAgc3RhdGlj
IFBhc3NSZWZQdHI8TXV0YWJsZURpY3Rpb25hcnk+IGNyZWF0ZURpY3Rpb25hcnlGcm9tSGFzaE1h
cChjb25zdCBIYXNoTWFwPFMKICAgICBSZWZQdHI8TXV0YWJsZURpY3Rpb25hcnk+IHJlc3VsdCA9
IE11dGFibGVEaWN0aW9uYXJ5OjpjcmVhdGUoKTsKICAgICBIYXNoTWFwPFN0cmluZywgdWludDY0
X3Q+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPFN0
cmluZywgdWludDY0X3Q+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpCi0gICAgICAgIHJlc3VsdC0+c2V0KGl0LT5maXJzdCwgUmVmUHRyPFdlYlVJbnQ2
ND4oV2ViVUludDY0OjpjcmVhdGUoaXQtPnNlY29uZCkpLmdldCgpKTsKKyAgICAgICAgcmVzdWx0
LT5zZXQoaXQtPmtleSwgUmVmUHRyPFdlYlVJbnQ2ND4oV2ViVUludDY0OjpjcmVhdGUoaXQtPnZh
bHVlKSkuZ2V0KCkpOwogICAgIAogICAgIHJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViSWNvbkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJJY29uRGF0YWJhc2UuY3BwCmluZGV4IDgwMTZjZmJkNmU3ZTFmNzY4
YWE4ZDE2YzI1ZWNjN2Y2YjA3OTM1ZmMuLmVmMzMyZmEyYWM2ZDg3ZDc1ZjM1Y2Y0MWZlOGYwYzgw
NzliNWIxNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJY29uRGF0
YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJY29uRGF0YWJhc2Uu
Y3BwCkBAIC0yNTAsMTQgKzI1MCwxNCBAQCB2b2lkIFdlYkljb25EYXRhYmFzZTo6ZGlkRmluaXNo
VVJMSW1wb3J0KCkKICAgICBIYXNoTWFwPHVpbnQ2NF90LCBTdHJpbmc+OjppdGVyYXRvciBlbmQg
PSBtX3BlbmRpbmdMb2FkRGVjaXNpb25VUkxNYXAuZW5kKCk7CiAgICAgCiAgICAgZm9yICg7IGkg
IT0gZW5kOyArK2kpIHsKLSAgICAgICAgTE9HKEljb25EYXRhYmFzZSwgIldLMiBVSVByb2Nlc3Mg
cGVyZm9ybWluZyBkZWxheWVkIGNhbGxiYWNrIG9uIGNhbGxiYWNrIElEICVpIGZvciBwYWdlIHVy
bCAlcyIsIChpbnQpaS0+Zmlyc3QsIGktPnNlY29uZC5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAg
IEljb25Mb2FkRGVjaXNpb24gZGVjaXNpb24gPSBtX2ljb25EYXRhYmFzZUltcGwtPnN5bmNocm9u
b3VzTG9hZERlY2lzaW9uRm9ySWNvblVSTChpLT5zZWNvbmQsIDApOworICAgICAgICBMT0coSWNv
bkRhdGFiYXNlLCAiV0syIFVJUHJvY2VzcyBwZXJmb3JtaW5nIGRlbGF5ZWQgY2FsbGJhY2sgb24g
Y2FsbGJhY2sgSUQgJWkgZm9yIHBhZ2UgdXJsICVzIiwgKGludClpLT5rZXksIGktPnZhbHVlLmFz
Y2lpKCkuZGF0YSgpKTsKKyAgICAgICAgSWNvbkxvYWREZWNpc2lvbiBkZWNpc2lvbiA9IG1faWNv
bkRhdGFiYXNlSW1wbC0+c3luY2hyb25vdXNMb2FkRGVjaXNpb25Gb3JJY29uVVJMKGktPnZhbHVl
LCAwKTsKIAogICAgICAgICAvLyBEZWNpc2lvbnMgc2hvdWxkIG5ldmVyIGJlIHVua25vd24gYWZ0
ZXIgdGhlIGluaXRhbCBpbXBvcnQgaXMgY29tcGxldGUKICAgICAgICAgQVNTRVJUKGRlY2lzaW9u
ICE9IEljb25Mb2FkVW5rbm93bik7CiAKICAgICAgICAgLy8gRklYTUUgKE11bHRpLVdlYlByb2Nl
c3MpOiBXZSBuZWVkIHRvIGtub3cgd2hpY2ggY29ubmVjdGlvbiB0byBzZW5kIHRoaXMgbWVzc2Fn
ZSB0by4KLSAgICAgICAgbV93ZWJDb250ZXh0LT5zZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6
OldlYkljb25EYXRhYmFzZVByb3h5OjpSZWNlaXZlZEljb25Mb2FkRGVjaXNpb24oc3RhdGljX2Nh
c3Q8aW50PihkZWNpc2lvbiksIGktPmZpcnN0KSk7CisgICAgICAgIG1fd2ViQ29udGV4dC0+c2Vu
ZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJJY29uRGF0YWJhc2VQcm94eTo6UmVjZWl2ZWRJ
Y29uTG9hZERlY2lzaW9uKHN0YXRpY19jYXN0PGludD4oZGVjaXNpb24pLCBpLT5rZXkpKTsKICAg
ICB9CiAgICAgCiAgICAgbV9wZW5kaW5nTG9hZERlY2lzaW9uVVJMTWFwLmNsZWFyKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVyLmNwcAppbmRl
eCBkNzc2Mjg3ZTAxZDc4OTFhNTM2Mzk2MGUyYjEzNjI0YTVjMzc3ZTFkLi5kMzQzMjRiNTQyODRm
NDIyNDBmZGYxNTEwZTkzYzUzMWU3NzQ0ZjM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJlci5jcHAKQEAgLTE3Miw3ICsxNzIsNyBAQCB2b2lk
IFdlYkxheWVyVHJlZVJlbmRlcmVyOjpzeW5jTGF5ZXJQYXJhbWV0ZXJzKGNvbnN0IFdlYkxheWVy
SW5mbyYgbGF5ZXJJbmZvKQogICAgIFdlYkxheWVySUQgaWQgPSBsYXllckluZm8uaWQ7CiAgICAg
ZW5zdXJlTGF5ZXIoaWQpOwogICAgIExheWVyTWFwOjppdGVyYXRvciBpdCA9IG1fbGF5ZXJzLmZp
bmQoaWQpOwotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gaXQtPnNlY29uZDsKKyAgICBHcmFw
aGljc0xheWVyKiBsYXllciA9IGl0LT52YWx1ZTsKIAogICAgIGxheWVyLT5zZXROYW1lKGxheWVy
SW5mby5uYW1lKTsKIApAQCAtMzIzLDcgKzMyMyw3IEBAIHZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVy
ZXI6OmFzc2lnbkltYWdlVG9MYXllcihHcmFwaGljc0xheWVyKiBsYXllciwgaW50NjRfdCBpbWFn
CiAKICAgICBIYXNoTWFwPGludDY0X3QsIFJlZlB0cjxUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3Jl
PiA+OjppdGVyYXRvciBpdCA9IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmZpbmQoaW1hZ2VJ
RCk7CiAgICAgQVNTRVJUKGl0ICE9IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmVuZCgpKTsK
LSAgICBsYXllci0+c2V0Q29udGVudHNUb01lZGlhKGl0LT5zZWNvbmQuZ2V0KCkpOworICAgIGxh
eWVyLT5zZXRDb250ZW50c1RvTWVkaWEoaXQtPnZhbHVlLmdldCgpKTsKIH0KIAogdm9pZCBXZWJM
YXllclRyZWVSZW5kZXJlcjo6Y29tbWl0VGlsZU9wZXJhdGlvbnMoKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAppbmRleCBlOGRmZDgxNjhjN2EyNzEyNjRh
Y2Y1YzcxZGQ5MDJjMGE3NDU1Yjg2Li40YWIyNTQzMjhlNWQzNjU0ZjNjMWRjN2JjMTVlZmZlYzFl
ZTJkYTdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1By
b3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNw
cApAQCAtMjQ4LDkgKzI0OCw5IEBAIGJvb2wgV2ViUHJvY2Vzc1Byb3h5OjpjaGVja1VSTFJlY2Vp
dmVkRnJvbVdlYlByb2Nlc3MoY29uc3QgS1VSTCYgdXJsKQogICAgIC8vIEl0ZW1zIGluIGJhY2sv
Zm9yd2FyZCBsaXN0IGhhdmUgYmVlbiBhbHJlYWR5IGNoZWNrZWQuCiAgICAgLy8gT25lIGNhc2Ug
d2hlcmUgd2UgZG9uJ3QgaGF2ZSBzYW5kYm94IGV4dGVuc2lvbnMgZm9yIGZpbGUgVVJMcyBpbiBi
L2YgbGlzdCBpcyBpZiB0aGUgbGlzdCBoYXMgYmVlbiByZWluc3RhdGVkIGFmdGVyIGEgY3Jhc2gg
b3IgYSBicm93c2VyIHJlc3RhcnQuCiAgICAgZm9yIChXZWJCYWNrRm9yd2FyZExpc3RJdGVtTWFw
OjppdGVyYXRvciBpdGVyID0gbV9iYWNrRm9yd2FyZExpc3RJdGVtTWFwLmJlZ2luKCksIGVuZCA9
IG1fYmFja0ZvcndhcmRMaXN0SXRlbU1hcC5lbmQoKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewot
ICAgICAgICBpZiAoS1VSTChLVVJMKCksIGl0ZXItPnNlY29uZC0+dXJsKCkpLmZpbGVTeXN0ZW1Q
YXRoKCkgPT0gcGF0aCkKKyAgICAgICAgaWYgKEtVUkwoS1VSTCgpLCBpdGVyLT52YWx1ZS0+dXJs
KCkpLmZpbGVTeXN0ZW1QYXRoKCkgPT0gcGF0aCkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICBpZiAoS1VSTChLVVJMKCksIGl0ZXItPnNlY29uZC0+b3JpZ2luYWxVUkwoKSkuZmls
ZVN5c3RlbVBhdGgoKSA9PSBwYXRoKQorICAgICAgICBpZiAoS1VSTChLVVJMKCksIGl0ZXItPnZh
bHVlLT5vcmlnaW5hbFVSTCgpKS5maWxlU3lzdGVtUGF0aCgpID09IHBhdGgpCiAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTI3MywxNSArMjczLDE1IEBAIHZvaWQgV2ViUHJv
Y2Vzc1Byb3h5OjphZGRCYWNrRm9yd2FyZEl0ZW0odWludDY0X3QgaXRlbUlELCBjb25zdCBTdHJp
bmcmIG9yaWdpbmFsCiAKICAgICBXZWJCYWNrRm9yd2FyZExpc3RJdGVtTWFwOjpBZGRSZXN1bHQg
cmVzdWx0ID0gbV9iYWNrRm9yd2FyZExpc3RJdGVtTWFwLmFkZChpdGVtSUQsIDApOwogICAgIGlm
IChyZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9
IFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW06OmNyZWF0ZShvcmlnaW5hbFVSTCwgdXJsLCB0aXRsZSwg
YmFja0ZvcndhcmREYXRhLmRhdGEoKSwgYmFja0ZvcndhcmREYXRhLnNpemUoKSwgaXRlbUlEKTsK
KyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW06
OmNyZWF0ZShvcmlnaW5hbFVSTCwgdXJsLCB0aXRsZSwgYmFja0ZvcndhcmREYXRhLmRhdGEoKSwg
YmFja0ZvcndhcmREYXRhLnNpemUoKSwgaXRlbUlEKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAogICAgIC8vIFVwZGF0ZSBleGlzdGluZyBpdGVtLgotICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vj
b25kLT5zZXRPcmlnaW5hbFVSTChvcmlnaW5hbFVSTCk7Ci0gICAgcmVzdWx0Lml0ZXJhdG9yLT5z
ZWNvbmQtPnNldFVSTCh1cmwpOwotICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLT5zZXRUaXRs
ZSh0aXRsZSk7Ci0gICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQtPnNldEJhY2tGb3J3YXJkRGF0
YShiYWNrRm9yd2FyZERhdGEuZGF0YSgpLCBiYWNrRm9yd2FyZERhdGEuc2l6ZSgpKTsKKyAgICBy
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5zZXRPcmlnaW5hbFVSTChvcmlnaW5hbFVSTCk7CisgICAg
cmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+c2V0VVJMKHVybCk7CisgICAgcmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZS0+c2V0VGl0bGUodGl0bGUpOworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPnNl
dEJhY2tGb3J3YXJkRGF0YShiYWNrRm9yd2FyZERhdGEuZGF0YSgpLCBiYWNrRm9yd2FyZERhdGEu
c2l6ZSgpKTsKIH0KIAogI2lmIEVOQUJMRShQTFVHSU5fUFJPQ0VTUykKQEAgLTQ3Miw3ICs0NzIs
NyBAQCBzaXplX3QgV2ViUHJvY2Vzc1Byb3h5OjpmcmFtZUNvdW50SW5QYWdlKFdlYlBhZ2VQcm94
eSogcGFnZSkgY29uc3QKIHsKICAgICBzaXplX3QgcmVzdWx0ID0gMDsKICAgICBmb3IgKEhhc2hN
YXA8dWludDY0X3QsIFJlZlB0cjxXZWJGcmFtZVByb3h5PiA+Ojpjb25zdF9pdGVyYXRvciBpdGVy
ID0gbV9mcmFtZU1hcC5iZWdpbigpOyBpdGVyICE9IG1fZnJhbWVNYXAuZW5kKCk7ICsraXRlcikg
ewotICAgICAgICBpZiAoaXRlci0+c2Vjb25kLT5wYWdlKCkgPT0gcGFnZSkKKyAgICAgICAgaWYg
KGl0ZXItPnZhbHVlLT5wYWdlKCkgPT0gcGFnZSkKICAgICAgICAgICAgICsrcmVzdWx0OwogICAg
IH0KICAgICByZXR1cm4gcmVzdWx0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL3F0L0xheWVyQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9x
dC9MYXllckJhY2tpbmdTdG9yZS5jcHAKaW5kZXggM2Y4YThjODkyMjFhZDg0OTIyYmM1MzcyNGEy
N2ZiZGM2ODI5YTMyNy4uMGVkZDRjZjIwZDc3NDE2MjU0MmI0ZGJkN2MxODFlMjZmMTM4YmZiNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVyQmFja2luZ1N0b3Jl
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJCYWNraW5nU3RvcmUu
Y3BwCkBAIC04MCwxNCArODAsMTQgQEAgdm9pZCBMYXllckJhY2tpbmdTdG9yZTo6dXBkYXRlVGls
ZShpbnQgaWQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFIKIHsKICAgICBI
YXNoTWFwPGludCwgTGF5ZXJCYWNraW5nU3RvcmVUaWxlPjo6aXRlcmF0b3IgaXQgPSBtX3RpbGVz
LmZpbmQoaWQpOwogICAgIEFTU0VSVChpdCAhPSBtX3RpbGVzLmVuZCgpKTsKLSAgICBpdC0+c2Vj
b25kLnNldEJhY2tCdWZmZXIodGFyZ2V0UmVjdCwgc291cmNlUmVjdCwgYmFja0J1ZmZlcik7Cisg
ICAgaXQtPnZhbHVlLnNldEJhY2tCdWZmZXIodGFyZ2V0UmVjdCwgc291cmNlUmVjdCwgYmFja0J1
ZmZlcik7CiB9CiAKIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gTGF5ZXJCYWNraW5nU3RvcmU6
OnRleHR1cmUoKSBjb25zdAogewogICAgIEhhc2hNYXA8aW50LCBMYXllckJhY2tpbmdTdG9yZVRp
bGU+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3RpbGVzLmVuZCgpOwogICAgIGZvciAoSGFzaE1h
cDxpbnQsIExheWVyQmFja2luZ1N0b3JlVGlsZT46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90aWxl
cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgUmVmUHRyPEJpdG1hcFRleHR1
cmU+IHRleHR1cmUgPSBpdC0+c2Vjb25kLnRleHR1cmUoKTsKKyAgICAgICAgUmVmUHRyPEJpdG1h
cFRleHR1cmU+IHRleHR1cmUgPSBpdC0+dmFsdWUudGV4dHVyZSgpOwogICAgICAgICBpZiAodGV4
dHVyZSkKICAgICAgICAgICAgIHJldHVybiB0ZXh0dXJlOwogICAgIH0KQEAgLTEwMyw3ICsxMDMs
NyBAQCB2b2lkIExheWVyQmFja2luZ1N0b3JlOjpwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJl
TWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBjb25zdAogICAgIEhhc2hNYXA8aW50LCBMYXllckJhY2tp
bmdTdG9yZVRpbGU+OjppdGVyYXRvciBlbmQgPSBtX3RpbGVzLmVuZCgpOwogICAgIEZsb2F0UmVj
dCBjb3ZlcmVkUmVjdDsKICAgICBmb3IgKEhhc2hNYXA8aW50LCBMYXllckJhY2tpbmdTdG9yZVRp
bGU+OjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0g
ICAgICAgIExheWVyQmFja2luZ1N0b3JlVGlsZSYgdGlsZSA9IGl0LT5zZWNvbmQ7CisgICAgICAg
IExheWVyQmFja2luZ1N0b3JlVGlsZSYgdGlsZSA9IGl0LT52YWx1ZTsKICAgICAgICAgaWYgKCF0
aWxlLnRleHR1cmUoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCkBAIC0xMzQsNyArMTM0LDcg
QEAgdm9pZCBMYXllckJhY2tpbmdTdG9yZTo6Y29tbWl0VGlsZU9wZXJhdGlvbnMoVGV4dHVyZU1h
cHBlciogdGV4dHVyZU1hcHBlcikKIAogICAgIEhhc2hNYXA8aW50LCBMYXllckJhY2tpbmdTdG9y
ZVRpbGU+OjppdGVyYXRvciB0aWxlc0VuZCA9IG1fdGlsZXMuZW5kKCk7CiAgICAgZm9yIChIYXNo
TWFwPGludCwgTGF5ZXJCYWNraW5nU3RvcmVUaWxlPjo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJl
Z2luKCk7IGl0ICE9IHRpbGVzRW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLnN3YXBCdWZm
ZXJzKHRleHR1cmVNYXBwZXIpOworICAgICAgICBpdC0+dmFsdWUuc3dhcEJ1ZmZlcnModGV4dHVy
ZU1hcHBlcik7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
R2VvbG9jYXRpb24vR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuY3BwIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9HZW9sb2NhdGlvbi9HZW9sb2NhdGlvblBlcm1pc3Npb25S
ZXF1ZXN0TWFuYWdlci5jcHAKaW5kZXggZDZiZGI4ZTE1MzE0NTBiMTJhYmM4MmQ4NmIyZmMwMTNm
MTM1NDNiNy4uZmNhNzFhMWQwOTVmZWVmYWJhMDVhNmE3MjVmZGI0MzYzNTgxNGI2NiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9HZW9sb2NhdGlvbi9HZW9sb2NhdGlvblBl
cm1pc3Npb25SZXF1ZXN0TWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9HZW9sb2NhdGlvbi9HZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5jcHAKQEAg
LTc0LDcgKzc0LDcgQEAgdm9pZCBHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlcjo6
Y2FuY2VsUmVxdWVzdEZvckdlb2xvY2F0aW9uKEdlb2xvY2F0aW8KICAgICAgICAgcmV0dXJuOwog
CiAgICAgbV9nZW9sb2NhdGlvblRvSURNYXAucmVtb3ZlKGl0KTsKLSAgICBtX2lkVG9HZW9sb2Nh
dGlvbk1hcC5yZW1vdmUoaXQtPnNlY29uZCk7CisgICAgbV9pZFRvR2VvbG9jYXRpb25NYXAucmVt
b3ZlKGl0LT52YWx1ZSk7CiB9CiAKIHZvaWQgR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1h
bmFnZXI6OmRpZFJlY2VpdmVHZW9sb2NhdGlvblBlcm1pc3Npb25EZWNpc2lvbih1aW50NjRfdCBn
ZW9sb2NhdGlvbklELCBib29sIGFsbG93ZWQpCkBAIC04Myw3ICs4Myw3IEBAIHZvaWQgR2VvbG9j
YXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXI6OmRpZFJlY2VpdmVHZW9sb2NhdGlvblBlcm1p
c3Npb25EZWNpc2lvCiAgICAgaWYgKGl0ID09IG1faWRUb0dlb2xvY2F0aW9uTWFwLmVuZCgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBHZW9sb2NhdGlvbiogZ2VvbG9jYXRpb24gPSBpdC0+c2Vj
b25kOworICAgIEdlb2xvY2F0aW9uKiBnZW9sb2NhdGlvbiA9IGl0LT52YWx1ZTsKICAgICBnZW9s
b2NhdGlvbi0+c2V0SXNBbGxvd2VkKGFsbG93ZWQpOwogCiAgICAgbV9pZFRvR2VvbG9jYXRpb25N
YXAucmVtb3ZlKGl0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxlTm9kZUhhbmRsZS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZU5vZGVIYW5k
bGUuY3BwCmluZGV4IDdkNzMwNWVkYmMzMGNkZTA5MWZhZmNmM2VjOWMzMjBlNThjNmUzNjcuLjgy
MDA1MWVlMWEzYjE3YjkyYTRjYWNlMzE4MWVhYWIyNWRkMDZmMTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxlTm9k
ZUhhbmRsZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9ET00vSW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlLmNwcApAQCAtNjksMTAgKzY5LDEwIEBAIFBh
c3NSZWZQdHI8SW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlPiBJbmplY3RlZEJ1bmRsZU5vZGVIYW5k
bGU6OmdldE9yQ3JlYXRlKE5vZGUqCiAKICAgICBET01IYW5kbGVDYWNoZTo6QWRkUmVzdWx0IHJl
c3VsdCA9IGRvbUhhbmRsZUNhY2hlKCkuYWRkKG5vZGUsIDApOwogICAgIGlmICghcmVzdWx0Lmlz
TmV3RW50cnkpCi0gICAgICAgIHJldHVybiBQYXNzUmVmUHRyPEluamVjdGVkQnVuZGxlTm9kZUhh
bmRsZT4ocmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOworICAgICAgICByZXR1cm4gUGFzc1JlZlB0
cjxJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU+KHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwogCiAg
ICAgUmVmUHRyPEluamVjdGVkQnVuZGxlTm9kZUhhbmRsZT4gbm9kZUhhbmRsZSA9IEluamVjdGVk
QnVuZGxlTm9kZUhhbmRsZTo6Y3JlYXRlKG5vZGUpOwotICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vj
b25kID0gbm9kZUhhbmRsZS5nZXQoKTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gbm9k
ZUhhbmRsZS5nZXQoKTsKICAgICByZXR1cm4gbm9kZUhhbmRsZS5yZWxlYXNlKCk7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0lu
amVjdGVkQnVuZGxlUmFuZ2VIYW5kbGUuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5jcHAKaW5kZXggMWI3
NGYwMTI0MDA4ZGIzYzA3ODI4ZWE2ZjZkMmMwNWFjMDU5YzMwNi4uZDYwMDBhYjkxMzMyOWNkNTdk
YWIzZTNmZDY0MDE0Yzc2ZTk1MmRjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRC
dW5kbGVSYW5nZUhhbmRsZS5jcHAKQEAgLTQ4LDEwICs0OCwxMCBAQCBQYXNzUmVmUHRyPEluamVj
dGVkQnVuZGxlUmFuZ2VIYW5kbGU+IEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OmdldE9yQ3Jl
YXRlKFJhbgogCiAgICAgRE9NSGFuZGxlQ2FjaGU6OkFkZFJlc3VsdCByZXN1bHQgPSBkb21IYW5k
bGVDYWNoZSgpLmFkZChyYW5nZSwgMCk7CiAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAg
ICAgICAgcmV0dXJuIFBhc3NSZWZQdHI8SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZT4ocmVzdWx0
Lml0ZXJhdG9yLT5zZWNvbmQpOworICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxJbmplY3RlZEJ1
bmRsZVJhbmdlSGFuZGxlPihyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKIAogICAgIFJlZlB0cjxJ
bmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlPiByYW5nZUhhbmRsZSA9IEluamVjdGVkQnVuZGxlUmFu
Z2VIYW5kbGU6OmNyZWF0ZShyYW5nZSk7Ci0gICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBy
YW5nZUhhbmRsZS5nZXQoKTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gcmFuZ2VIYW5k
bGUuZ2V0KCk7CiAgICAgcmV0dXJuIHJhbmdlSGFuZGxlLnJlbGVhc2UoKTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Ob3RpZmljYXRpb25zL1dlYk5vdGlmaWNh
dGlvbk1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Ob3RpZmljYXRpb25z
L1dlYk5vdGlmaWNhdGlvbk1hbmFnZXIuY3BwCmluZGV4IDI2ZTU0MDc0NGJkNTI3NGM5YjZkYWNl
ZWE1YmY5NGZhM2FlMDQ5NzMuLmI4ZTNhNmVkNjY2MmYxZjEwZThiY2MwZDc4ODUzODJmZmRlZmQw
YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTm90aWZpY2F0aW9ucy9X
ZWJOb3RpZmljYXRpb25NYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L05vdGlmaWNhdGlvbnMvV2ViTm90aWZpY2F0aW9uTWFuYWdlci5jcHAKQEAgLTk5LDcgKzk5LDcg
QEAgTm90aWZpY2F0aW9uQ2xpZW50OjpQZXJtaXNzaW9uIFdlYk5vdGlmaWNhdGlvbk1hbmFnZXI6
OnBvbGljeUZvck9yaWdpbihXZWJDb3JlOjoKICAgICBBU1NFUlQoIW9yaWdpbi0+aXNVbmlxdWUo
KSk7CiAgICAgSGFzaE1hcDxTdHJpbmcsIGJvb2w+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGVy
bWlzc2lvbnNNYXAuZmluZChvcmlnaW4tPnRvUmF3U3RyaW5nKCkpOwogICAgIGlmIChpdCAhPSBt
X3Blcm1pc3Npb25zTWFwLmVuZCgpKQotICAgICAgICByZXR1cm4gaXQtPnNlY29uZCA/IE5vdGlm
aWNhdGlvbkNsaWVudDo6UGVybWlzc2lvbkFsbG93ZWQgOiBOb3RpZmljYXRpb25DbGllbnQ6OlBl
cm1pc3Npb25EZW5pZWQ7CisgICAgICAgIHJldHVybiBpdC0+dmFsdWUgPyBOb3RpZmljYXRpb25D
bGllbnQ6OlBlcm1pc3Npb25BbGxvd2VkIDogTm90aWZpY2F0aW9uQ2xpZW50OjpQZXJtaXNzaW9u
RGVuaWVkOwogI2VuZGlmCiAgICAgCiAgICAgcmV0dXJuIE5vdGlmaWNhdGlvbkNsaWVudDo6UGVy
bWlzc2lvbk5vdEFsbG93ZWQ7CkBAIC0xMTYsNyArMTE2LDcgQEAgYm9vbCBXZWJOb3RpZmljYXRp
b25NYW5hZ2VyOjpzaG93KE5vdGlmaWNhdGlvbiogbm90aWZpY2F0aW9uLCBXZWJQYWdlKiBwYWdl
KQogICAgIG1fbm90aWZpY2F0aW9uSURNYXAuc2V0KG5vdGlmaWNhdGlvbklELCBub3RpZmljYXRp
b24pOwogICAgIAogICAgIE5vdGlmaWNhdGlvbkNvbnRleHRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9u
b3RpZmljYXRpb25Db250ZXh0TWFwLmFkZChub3RpZmljYXRpb24tPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSwgVmVjdG9yPHVpbnQ2NF90PigpKS5pdGVyYXRvcjsKLSAgICBpdC0+c2Vjb25kLmFw
cGVuZChub3RpZmljYXRpb25JRCk7CisgICAgaXQtPnZhbHVlLmFwcGVuZChub3RpZmljYXRpb25J
RCk7CiAgICAgCiAgICAgbV9wcm9jZXNzLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2VQcm94eTo6U2hvd05vdGlmaWNhdGlvbihub3RpZmljYXRpb24tPnRpdGxlKCksIG5vdGlm
aWNhdGlvbi0+Ym9keSgpLCBub3RpZmljYXRpb24tPmljb25VUkwoKS5zdHJpbmcoKSwgbm90aWZp
Y2F0aW9uLT5yZXBsYWNlSWQoKSwgbm90aWZpY2F0aW9uLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCktPnNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCksIG5vdGlmaWNhdGlvbklEKSwgcGFnZS0+
cGFnZUlEKCkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMTQ2LDcgKzE0Niw3IEBAIHZvaWQgV2Vi
Tm90aWZpY2F0aW9uTWFuYWdlcjo6Y2xlYXJOb3RpZmljYXRpb25zKFdlYkNvcmU6OlNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqCiAgICAgaWYgKGl0ID09IG1fbm90aWZpY2F0aW9uQ29udGV4dE1hcC5l
bmQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIFZlY3Rvcjx1aW50NjRfdD4mIG5vdGlm
aWNhdGlvbklEcyA9IGl0LT5zZWNvbmQ7CisgICAgVmVjdG9yPHVpbnQ2NF90PiYgbm90aWZpY2F0
aW9uSURzID0gaXQtPnZhbHVlOwogICAgIG1fcHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5zZW5kKE1l
c3NhZ2VzOjpXZWJOb3RpZmljYXRpb25NYW5hZ2VyUHJveHk6OkNsZWFyTm90aWZpY2F0aW9ucyhu
b3RpZmljYXRpb25JRHMpLCBwYWdlLT5wYWdlSUQoKSk7CiAgICAgc2l6ZV90IGNvdW50ID0gbm90
aWZpY2F0aW9uSURzLnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyAr
K2kpIHsKQEAgLTIyOCwxMCArMjI4LDEwIEBAIHZvaWQgV2ViTm90aWZpY2F0aW9uTWFuYWdlcjo6
cmVtb3ZlTm90aWZpY2F0aW9uRnJvbUNvbnRleHRNYXAodWludDY0X3Qgbm90aWZpY2F0CiAgICAg
Ly8gVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiBmb3IgbWFuYWdpbmcgdGhlIGhhc2ggbWFwcy4K
ICAgICBOb3RpZmljYXRpb25Db250ZXh0TWFwOjppdGVyYXRvciBpdCA9IG1fbm90aWZpY2F0aW9u
Q29udGV4dE1hcC5maW5kKG5vdGlmaWNhdGlvbi0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsK
ICAgICBBU1NFUlQoaXQgIT0gbV9ub3RpZmljYXRpb25Db250ZXh0TWFwLmVuZCgpKTsKLSAgICBz
aXplX3QgaW5kZXggPSBpdC0+c2Vjb25kLmZpbmQobm90aWZpY2F0aW9uSUQpOworICAgIHNpemVf
dCBpbmRleCA9IGl0LT52YWx1ZS5maW5kKG5vdGlmaWNhdGlvbklEKTsKICAgICBBU1NFUlQoaW5k
ZXggIT0gbm90Rm91bmQpOwotICAgIGl0LT5zZWNvbmQucmVtb3ZlKGluZGV4KTsKLSAgICBpZiAo
aXQtPnNlY29uZC5pc0VtcHR5KCkpCisgICAgaXQtPnZhbHVlLnJlbW92ZShpbmRleCk7CisgICAg
aWYgKGl0LT52YWx1ZS5pc0VtcHR5KCkpCiAgICAgICAgIG1fbm90aWZpY2F0aW9uQ29udGV4dE1h
cC5yZW1vdmUoaXQpOwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0TWFwLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3Bw
CmluZGV4IDAxZTczZjk1ZmViYzZjODY3ZDBmNDBmMDAxMjlkMTE4ODQzMjBjYzUuLmI4NGZiMjY1
ZjI4YmM5M2QwNTg4MzU3NzlmODE2ZTU4MTllZmQxMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVP
YmplY3RNYXAuY3BwCkBAIC0yMTEsNyArMjExLDcgQEAgdm9pZCBOUFJ1bnRpbWVPYmplY3RNYXA6
OmludmFsaWRhdGUoKQogICAgIFZlY3RvcjxOUE9iamVjdCo+IG9iamVjdHM7CiAKICAgICBmb3Ig
KEhhc2hNYXA8TlBPYmplY3QqLCBKU0M6OldlYWs8SlNOUE9iamVjdD4gPjo6aXRlcmF0b3IgcHRy
ID0gbV9qc05QT2JqZWN0cy5iZWdpbigpLCBlbmQgPSBtX2pzTlBPYmplY3RzLmVuZCgpOyBwdHIg
IT0gZW5kOyArK3B0cikKLSAgICAgICAgb2JqZWN0cy5hcHBlbmQocHRyLT5zZWNvbmQtPmxlYWtO
UE9iamVjdCgpKTsKKyAgICAgICAgb2JqZWN0cy5hcHBlbmQocHRyLT52YWx1ZS0+bGVha05QT2Jq
ZWN0KCkpOwogCiAgICAgbV9qc05QT2JqZWN0cy5jbGVhcigpOwogCkBAIC0yOTIsOCArMjkyLDgg
QEAgdm9pZCBOUFJ1bnRpbWVPYmplY3RNYXA6OmZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5r
bm93bj4gaGFuZGxlLCB2b2lkKiBjb250ZXgKIHsKICAgICBIYXNoTWFwPE5QT2JqZWN0KiwgSlND
OjpXZWFrPEpTTlBPYmplY3Q+ID46Oml0ZXJhdG9yIGZvdW5kID0gbV9qc05QT2JqZWN0cy5maW5k
KHN0YXRpY19jYXN0PE5QT2JqZWN0Kj4oY29udGV4dCkpOwogICAgIEFTU0VSVChmb3VuZCAhPSBt
X2pzTlBPYmplY3RzLmVuZCgpKTsKLSAgICBBU1NFUlRfVU5VU0VEKGhhbmRsZSwgYXNPYmplY3Qo
aGFuZGxlLmdldCgpKSA9PSBmb3VuZC0+c2Vjb25kKTsKLSAgICBKU05QT2JqZWN0KiBvYmplY3Qg
PSBmb3VuZC0+c2Vjb25kLmdldCgpOworICAgIEFTU0VSVF9VTlVTRUQoaGFuZGxlLCBhc09iamVj
dChoYW5kbGUuZ2V0KCkpID09IGZvdW5kLT52YWx1ZSk7CisgICAgSlNOUE9iamVjdCogb2JqZWN0
ID0gZm91bmQtPnZhbHVlLmdldCgpOwogICAgIG1fanNOUE9iamVjdHMucmVtb3ZlKGZvdW5kKTsK
ICAgICBhZGRUb0ludmFsaWRhdGlvblF1ZXVlKG9iamVjdC0+bGVha05QT2JqZWN0KCkpOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05l
dHNjYXBlUGx1Z2luLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRz
Y2FwZS9OZXRzY2FwZVBsdWdpbi5jcHAKaW5kZXggNjIxMDE5NzIzOTg5MmM1MjhhMDlmZjA3YjVi
ZjJhOWQ1MmFmYzljNi4uMjBhY2QxZGU5OWVjMTlkNTlkY2ZiMzAwYWUwMTBlZmIwMzIxYTQ1OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05l
dHNjYXBlUGx1Z2luLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMv
TmV0c2NhcGUvTmV0c2NhcGVQbHVnaW4uY3BwCkBAIC0xOTAsOCArMTkwLDggQEAgTlBFcnJvciBO
ZXRzY2FwZVBsdWdpbjo6ZGVzdHJveVN0cmVhbShOUFN0cmVhbSogc3RyZWFtLCBOUFJlYXNvbiBy
ZWFzb24pCiAgICAgTmV0c2NhcGVQbHVnaW5TdHJlYW0qIHBsdWdpblN0cmVhbSA9IDA7CiAKICAg
ICBmb3IgKFN0cmVhbXNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zdHJlYW1zLmJlZ2luKCks
IGVuZCA9IG1fc3RyZWFtcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChp
dC0+c2Vjb25kLT5ucFN0cmVhbSgpID09IHN0cmVhbSkgewotICAgICAgICAgICAgcGx1Z2luU3Ry
ZWFtID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgaWYgKGl0LT52YWx1ZS0+bnBTdHJlYW0o
KSA9PSBzdHJlYW0pIHsKKyAgICAgICAgICAgIHBsdWdpblN0cmVhbSA9IGl0LT52YWx1ZS5nZXQo
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQpAQCAtMzc4LDcgKzM3OCw3
IEBAIHZvaWQgTmV0c2NhcGVQbHVnaW46OnVuc2NoZWR1bGVUaW1lcih1bnNpZ25lZCB0aW1lcklE
KQogICAgIGlmIChpdCA9PSBtX3RpbWVycy5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
T3duUHRyPFRpbWVyPiB0aW1lciA9IGFkb3B0UHRyKGl0LT5zZWNvbmQpOworICAgIE93blB0cjxU
aW1lcj4gdGltZXIgPSBhZG9wdFB0cihpdC0+dmFsdWUpOwogICAgIG1fdGltZXJzLnJlbW92ZShp
dCk7CiAKICAgICB0aW1lci0+c3RvcCgpOwpAQCAtNzEzLDggKzcxMyw4IEBAIHZvaWQgTmV0c2Nh
cGVQbHVnaW46OmZyYW1lRGlkRmluaXNoTG9hZGluZyh1aW50NjRfdCByZXF1ZXN0SUQpCiAgICAg
aWYgKGl0ID09IG1fcGVuZGluZ1VSTE5vdGlmaWNhdGlvbnMuZW5kKCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIFN0cmluZyB1cmwgPSBpdC0+c2Vjb25kLmZpcnN0OwotICAgIHZvaWQqIG5vdGlm
aWNhdGlvbkRhdGEgPSBpdC0+c2Vjb25kLnNlY29uZDsKKyAgICBTdHJpbmcgdXJsID0gaXQtPnZh
bHVlLmZpcnN0OworICAgIHZvaWQqIG5vdGlmaWNhdGlvbkRhdGEgPSBpdC0+dmFsdWUuc2Vjb25k
OwogCiAgICAgbV9wZW5kaW5nVVJMTm90aWZpY2F0aW9ucy5yZW1vdmUoaXQpOwogICAgIApAQCAt
NzI5LDggKzcyOSw4IEBAIHZvaWQgTmV0c2NhcGVQbHVnaW46OmZyYW1lRGlkRmFpbCh1aW50NjRf
dCByZXF1ZXN0SUQsIGJvb2wgd2FzQ2FuY2VsbGVkKQogICAgIGlmIChpdCA9PSBtX3BlbmRpbmdV
UkxOb3RpZmljYXRpb25zLmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBTdHJpbmcgdXJs
ID0gaXQtPnNlY29uZC5maXJzdDsKLSAgICB2b2lkKiBub3RpZmljYXRpb25EYXRhID0gaXQtPnNl
Y29uZC5zZWNvbmQ7CisgICAgU3RyaW5nIHVybCA9IGl0LT52YWx1ZS5maXJzdDsKKyAgICB2b2lk
KiBub3RpZmljYXRpb25EYXRhID0gaXQtPnZhbHVlLnNlY29uZDsKIAogICAgIG1fcGVuZGluZ1VS
TE5vdGlmaWNhdGlvbnMucmVtb3ZlKGl0KTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAppbmRleCBkMzQ2NTY4YjdkMzE0OGQwMzI1
ZDFmMWFmZGY4MTRlNjg2NzFiYWRlLi5iYzA3NDliZDZiY2YyNjIyMjBmYTJlOTE5OWJiMjBmZWRh
ZmZmOTE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1
Z2luVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdp
blZpZXcuY3BwCkBAIC0xNzAsOSArMTcwLDkgQEAgc3RhdGljIFN0cmluZyBidWlsZEhUVFBIZWFk
ZXJzKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBsb25nIGxvbmcmIGV4cGUKICAg
ICAKICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSByZXNwb25zZS5odHRw
SGVhZGVyRmllbGRzKCkuZW5kKCk7CiAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMoKS5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPmZpcnN0LmNoYXJhY3Rl
cnMoKSwgaXQtPmZpcnN0Lmxlbmd0aCgpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
aXQtPmtleS5jaGFyYWN0ZXJzKCksIGl0LT5rZXkubGVuZ3RoKCkpOwogICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZChzZXBhcmF0b3IuY2hhcmFjdGVycygpLCBzZXBhcmF0b3IubGVuZ3RoKCkp
OwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+c2Vjb25kLmNoYXJhY3RlcnMoKSwg
aXQtPnNlY29uZC5sZW5ndGgoKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT52
YWx1ZS5jaGFyYWN0ZXJzKCksIGl0LT52YWx1ZS5sZW5ndGgoKSk7CiAgICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKCdcbicpOwogICAgIH0KICAgICAKQEAgLTI4Miw3ICsyODIsNyBAQCBQbHVn
aW5WaWV3Ojp+UGx1Z2luVmlldygpCiAKICAgICAvLyBDYW5jZWwgYWxsIHBlbmRpbmcgZnJhbWUg
bG9hZHMuCiAgICAgZm9yIChGcmFtZUxvYWRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wZW5kaW5nRnJh
bWVMb2Fkcy5iZWdpbigpLCBlbmQgPSBtX3BlbmRpbmdGcmFtZUxvYWRzLmVuZCgpOyBpdCAhPSBl
bmQ7ICsraXQpCi0gICAgICAgIGl0LT5maXJzdC0+c2V0TG9hZExpc3RlbmVyKDApOworICAgICAg
ICBpdC0+a2V5LT5zZXRMb2FkTGlzdGVuZXIoMCk7CiAKICAgICBpZiAobV9wbHVnaW4gJiYgbV9p
c0luaXRpYWxpemVkKSB7CiAgICAgICAgIG1faXNCZWluZ0Rlc3Ryb3llZCA9IHRydWU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBo
aWNzTGF5ZXIuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJHcmFwaGljc0xheWVyLmNwcAppbmRleCBkNmNlOWNjZjMzYTJlODI5YWUyZGY1M2E1ZmY3MmU0
NmQ3MzhkMTk0Li42N2U4ZjI0YzEyMjc2ZGY0YzUyOWZiNzkzODEwNWU3YTRjN2U0YzRiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBo
aWNzTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViR3JhcGhpY3NMYXllci5jcHAKQEAgLTUzLDcgKzUzLDcgQEAgV2ViR3JhcGhpY3NMYXll
ciogV2ViR3JhcGhpY3NMYXllcjo6bGF5ZXJCeUlEKFdlYktpdDo6V2ViTGF5ZXJJRCBpZCkKICAg
ICBIYXNoTWFwPFdlYkxheWVySUQsIFdlYkdyYXBoaWNzTGF5ZXIqPjo6aXRlcmF0b3IgaXQgPSB0
YWJsZS5maW5kKGlkKTsKICAgICBpZiAoaXQgPT0gdGFibGUuZW5kKCkpCiAgICAgICAgIHJldHVy
biAwOwotICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgIHJldHVybiBpdC0+dmFsdWU7CiB9CiAK
IHN0YXRpYyBXZWJMYXllcklEIHRvV2ViTGF5ZXJJRChHcmFwaGljc0xheWVyKiBsYXllcikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9yd2Fy
ZExpc3RQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFj
a0ZvcndhcmRMaXN0UHJveHkuY3BwCmluZGV4IGNiZGMwNjZkYTVjMGQ1Yzg4ZDM4ZDIwMTc5ZTg0
ZjE4YTY4NjNmMmMuLmUwZTE4ZjczZTNlYjE1NzMyM2Q3YzdiZjhjZGNlZDI3MzYxZjBjODUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9yd2Fy
ZExpc3RQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YkJhY2tGb3J3YXJkTGlzdFByb3h5LmNwcApAQCAtMTI4LDcgKzEyOCw3IEBAIHZvaWQgV2ViQmFj
a0ZvcndhcmRMaXN0UHJveHk6OnJlbW92ZUl0ZW0odWludDY0X3QgaXRlbUlEKQogICAgIElEVG9I
aXN0b3J5SXRlbU1hcDo6aXRlcmF0b3IgaXQgPSBpZFRvSGlzdG9yeUl0ZW1NYXAoKS5maW5kKGl0
ZW1JRCk7CiAgICAgaWYgKGl0ID09IGlkVG9IaXN0b3J5SXRlbU1hcCgpLmVuZCgpKQogICAgICAg
ICByZXR1cm47Ci0gICAgaGlzdG9yeUl0ZW1Ub0lETWFwKCkucmVtb3ZlKGl0LT5zZWNvbmQpOwor
ICAgIGhpc3RvcnlJdGVtVG9JRE1hcCgpLnJlbW92ZShpdC0+dmFsdWUpOwogICAgIGlkVG9IaXN0
b3J5SXRlbU1hcCgpLnJlbW92ZShpdCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQuY3BwIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5jcHAKaW5kZXggY2E3NGYx
MTQwYjJiNTg1OWY3NTE5MTdmODhhYzkwMjU3Y2NjYTQ0My4uNjA4YzU0YjMyNDgxMTlhNjNhZWYx
YzJlNzJlNWMzYTYzZjI4NzdhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5jcHAKQEAgLTMyNSw3ICszMjUsNyBA
QCBpbnQ2NF90IExheWVyVHJlZUhvc3RRdDo6YWRvcHRJbWFnZUJhY2tpbmdTdG9yZShJbWFnZSog
aW1hZ2UpCiAgICAgSGFzaE1hcDxpbnQ2NF90LCBpbnQ+OjppdGVyYXRvciBpdCA9IG1fZGlyZWN0
bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMuZmluZChrZXkpOwogCiAgICAgaWYgKGl0ICE9IG1f
ZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMuZW5kKCkpIHsKLSAgICAgICAgKysoaXQt
PnNlY29uZCk7CisgICAgICAgICsrKGl0LT52YWx1ZSk7CiAgICAgICAgIHJldHVybiBrZXk7CiAg
ICAgfQogCkBAIC0zNTAsOSArMzUwLDkgQEAgdm9pZCBMYXllclRyZWVIb3N0UXQ6OnJlbGVhc2VJ
bWFnZUJhY2tpbmdTdG9yZShpbnQ2NF90IGtleSkKICAgICBpZiAoaXQgPT0gbV9kaXJlY3RseUNv
bXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaXQt
PnNlY29uZC0tOworICAgIGl0LT52YWx1ZS0tOwogCi0gICAgaWYgKGl0LT5zZWNvbmQpCisgICAg
aWYgKGl0LT52YWx1ZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9kaXJlY3RseUNvbXBvc2l0
ZWRJbWFnZVJlZkNvdW50cy5yZW1vdmUoaXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UHJvY2Vzcy5jcHAKaW5kZXggMmRmY2RlMDgzYjljMTRiMWM0MTEyNjNiNjYyMzAzODlmZTFiZjMz
MS4uOTIxMWM1MTQ2ZjkwNjhiZTM5N2FhNTJlMmZhMDRhZDlmNjMxOTZiNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCkBAIC0zMTQsNyArMzE0LDcgQEAgdm9pZCBX
ZWJQcm9jZXNzOjp2aXNpdGVkTGlua1N0YXRlQ2hhbmdlZChjb25zdCBWZWN0b3I8V2ViQ29yZTo6
TGlua0hhc2g+JiBsaW5rSGEKICAgICAgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPFdlYlBh
Z2VHcm91cFByb3h5PiA+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGFnZUdyb3VwTWFwLmJlZ2lu
KCk7CiAgICAgICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxXZWJQYWdlR3JvdXBQcm94eT4g
Pjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wYWdlR3JvdXBNYXAuZW5kKCk7CiAgICAgICAgIGZv
ciAoOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBQYWdlOjp2aXNpdGVkU3RhdGVDaGFu
Z2VkKFBhZ2VHcm91cDo6cGFnZUdyb3VwKGl0LT5zZWNvbmQtPmlkZW50aWZpZXIoKSksIGxpbmtI
YXNoZXNbaV0pOworICAgICAgICAgICAgUGFnZTo6dmlzaXRlZFN0YXRlQ2hhbmdlZChQYWdlR3Jv
dXA6OnBhZ2VHcm91cChpdC0+dmFsdWUtPmlkZW50aWZpZXIoKSksIGxpbmtIYXNoZXNbaV0pOwog
ICAgIH0KIAogICAgIHBhZ2VDYWNoZSgpLT5tYXJrUGFnZXNGb3JWaXN0ZWRMaW5rU3R5bGVSZWNh
bGMoKTsKQEAgLTMyNiw3ICszMjYsNyBAQCB2b2lkIFdlYlByb2Nlc3M6OmFsbFZpc2l0ZWRMaW5r
U3RhdGVDaGFuZ2VkKCkKICAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8V2ViUGFnZUdyb3Vw
UHJveHk+ID46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wYWdlR3JvdXBNYXAuYmVnaW4oKTsKICAg
ICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8V2ViUGFnZUdyb3VwUHJveHk+ID46OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IG1fcGFnZUdyb3VwTWFwLmVuZCgpOwogICAgIGZvciAoOyBpdCAhPSBlbmQ7
ICsraXQpCi0gICAgICAgIFBhZ2U6OmFsbFZpc2l0ZWRTdGF0ZUNoYW5nZWQoUGFnZUdyb3VwOjpw
YWdlR3JvdXAoaXQtPnNlY29uZC0+aWRlbnRpZmllcigpKSk7CisgICAgICAgIFBhZ2U6OmFsbFZp
c2l0ZWRTdGF0ZUNoYW5nZWQoUGFnZUdyb3VwOjpwYWdlR3JvdXAoaXQtPnZhbHVlLT5pZGVudGlm
aWVyKCkpKTsKIAogICAgIHBhZ2VDYWNoZSgpLT5tYXJrUGFnZXNGb3JWaXN0ZWRMaW5rU3R5bGVS
ZWNhbGMoKTsKIH0KQEAgLTUwMiw3ICs1MDIsNyBAQCBXZWJQYWdlKiBXZWJQcm9jZXNzOjpmb2N1
c2VkV2ViUGFnZSgpIGNvbnN0CiB7ICAgIAogICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxX
ZWJQYWdlPiA+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BhZ2VNYXAuZW5kKCk7CiAgICAgZm9y
IChIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8V2ViUGFnZT4gPjo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtX3BhZ2VNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFdlYlBhZ2Uq
IHBhZ2UgPSAoKml0KS5zZWNvbmQuZ2V0KCk7CisgICAgICAgIFdlYlBhZ2UqIHBhZ2UgPSAoKml0
KS52YWx1ZS5nZXQoKTsKICAgICAgICAgaWYgKHBhZ2UtPndpbmRvd0lzRm9jdXNlZCgpKQogICAg
ICAgICAgICAgcmV0dXJuIHBhZ2U7CiAgICAgfQpAQCAtNTIwLDE0ICs1MjAsMTQgQEAgdm9pZCBX
ZWJQcm9jZXNzOjpjcmVhdGVXZWJQYWdlKHVpbnQ2NF90IHBhZ2VJRCwgY29uc3QgV2ViUGFnZUNy
ZWF0aW9uUGFyYW1ldGVycyYKICAgICAvLyBsaW5rKSB0aGUgV2ViUGFnZSBnZXRzIGNyZWF0ZWQg
Ym90aCBpbiB0aGUgc3luY2hyb25vdXMgaGFuZGxlciBhbmQgdGhyb3VnaCB0aGUgbm9ybWFsIHdh
eS4gCiAgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPFdlYlBhZ2U+ID46OkFkZFJlc3VsdCBy
ZXN1bHQgPSBtX3BhZ2VNYXAuYWRkKHBhZ2VJRCwgMCk7CiAgICAgaWYgKHJlc3VsdC5pc05ld0Vu
dHJ5KSB7Ci0gICAgICAgIEFTU0VSVCghcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOwotICAgICAg
ICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IFdlYlBhZ2U6OmNyZWF0ZShwYWdlSUQsIHBhcmFt
ZXRlcnMpOworICAgICAgICBBU1NFUlQoIXJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOworICAgICAg
ICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gV2ViUGFnZTo6Y3JlYXRlKHBhZ2VJRCwgcGFyYW1l
dGVycyk7CiAKICAgICAgICAgLy8gQmFsYW5jZWQgYnkgYW4gZW5hYmxlVGVybWluYXRpb24gaW4g
cmVtb3ZlV2ViUGFnZS4KICAgICAgICAgZGlzYWJsZVRlcm1pbmF0aW9uKCk7CiAgICAgfQogCi0g
ICAgQVNTRVJUKHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKKyAgICBBU1NFUlQocmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzczo6cmVtb3ZlV2ViUGFnZSh1aW50
NjRfdCBwYWdlSUQpCkBAIC03NDEsMTEgKzc0MSwxMSBAQCBXZWJQYWdlR3JvdXBQcm94eSogV2Vi
UHJvY2Vzczo6d2ViUGFnZUdyb3VwKGNvbnN0IFdlYlBhZ2VHcm91cERhdGEmIHBhZ2VHcm91cERh
dAogewogICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxXZWJQYWdlR3JvdXBQcm94eT4gPjo6
QWRkUmVzdWx0IHJlc3VsdCA9IG1fcGFnZUdyb3VwTWFwLmFkZChwYWdlR3JvdXBEYXRhLnBhZ2VH
cm91cElELCAwKTsKICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgQVNTRVJU
KCFyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7Ci0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vj
b25kID0gV2ViUGFnZUdyb3VwUHJveHk6OmNyZWF0ZShwYWdlR3JvdXBEYXRhKTsKKyAgICAgICAg
QVNTRVJUKCFyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZSA9IFdlYlBhZ2VHcm91cFByb3h5OjpjcmVhdGUocGFnZUdyb3VwRGF0YSk7CiAgICAg
fQogCi0gICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLmdldCgpOworICAgIHJldHVy
biByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpOwogfQogCiBzdGF0aWMgYm9vbCBjYW5QbHVn
aW5IYW5kbGVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKQEAgLTgz
OSw3ICs4MzksNyBAQCBzdGF0aWMgdm9pZCBmcm9tQ291bnRlZFNldFRvSGFzaE1hcChUeXBlQ291
bnRTZXQqIGNvdW50ZWRTZXQsIEhhc2hNYXA8U3RyaW5nLCB1aQogewogICAgIFR5cGVDb3VudFNl
dDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY291bnRlZFNldC0+ZW5kKCk7CiAgICAgZm9yIChUeXBl
Q291bnRTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY291bnRlZFNldC0+YmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KQotICAgICAgICBtYXAuc2V0KGl0LT5maXJzdCwgaXQtPnNlY29uZCk7CisgICAg
ICAgIG1hcC5zZXQoaXQtPmtleSwgaXQtPnZhbHVlKTsKIH0KIAogc3RhdGljIHZvaWQgZ2V0V2Vi
Q29yZU1lbW9yeUNhY2hlU3RhdGlzdGljcyhWZWN0b3I8SGFzaE1hcDxTdHJpbmcsIHVpbnQ2NF90
PiA+JiByZXN1bHQpCkBAIC0xMDA5LDcgKzEwMDksNyBAQCB2b2lkIFdlYlByb2Nlc3M6OnNldFRl
eHRDaGVja2VyU3RhdGUoY29uc3QgVGV4dENoZWNrZXJTdGF0ZSYgdGV4dENoZWNrZXJTdGF0ZSkK
IAogICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxXZWJQYWdlPiA+OjppdGVyYXRvciBlbmQg
PSBtX3BhZ2VNYXAuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8V2Vi
UGFnZT4gPjo6aXRlcmF0b3IgaXQgPSBtX3BhZ2VNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7Ci0gICAgICAgIFdlYlBhZ2UqIHBhZ2UgPSAoKml0KS5zZWNvbmQuZ2V0KCk7CisgICAgICAg
IFdlYlBhZ2UqIHBhZ2UgPSAoKml0KS52YWx1ZS5nZXQoKTsKICAgICAgICAgaWYgKGNvbnRpbnVv
dXNTcGVsbENoZWNraW5nVHVybmVkT2ZmKQogICAgICAgICAgICAgcGFnZS0+dW5tYXJrQWxsTWlz
c3BlbGxpbmdzKCk7CiAgICAgICAgIGlmIChncmFtbWFyQ2hlY2tpbmdUdXJuZWRPZmYpCmRpZmYg
LS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZjU2NzI1ZGRi
YWRjMGFmYzE2MmE2ZTVjN2QxZWE0MWJmMzRhZWM1Mi4uMzliMjAwYzdjMTM1YWEyMWMyYzViY2I2
Mjk4ZDg4NjEwZmM2NWZhNiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDEyLTAzLTMwICBDYWlvIE1hcmNlbG8gZGUg
T2xpdmVpcmEgRmlsaG8gIDxjYWlvLm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+CisKKyAgICAgICAg
SW1wcm92ZSBpbnRlcmZhY2Ugb2YgSGFzaE1hcCBpdGVyYXRvcnMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyNzg0CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlIGNvZGUgdG8gYWNjZXNzIGtleS92
YWx1ZSBpbnN0ZWFkIG9mIGZpcnN0L3NlY29uZCB3aGVuIHVzaW5nIEhhc2hNYXAgaXRlcmF0b3Jz
LgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vQ3BwQm91bmRDbGFzcy5jcHA6
CisgICAgICAgIChDcHBCb3VuZENsYXNzOjp+Q3BwQm91bmRDbGFzcyk6CisgICAgICAgIChDcHBC
b3VuZENsYXNzOjppbnZva2UpOgorICAgICAgICAoQ3BwQm91bmRDbGFzczo6Z2V0UHJvcGVydHkp
OgorICAgICAgICAoQ3BwQm91bmRDbGFzczo6c2V0UHJvcGVydHkpOgorICAgICAgICAoQ3BwQm91
bmRDbGFzczo6YmluZENhbGxiYWNrKToKKyAgICAgICAgKENwcEJvdW5kQ2xhc3M6OmJpbmRQcm9w
ZXJ0eSk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTW9ja1dlYlNwZWVjaElu
cHV0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVy
OjphZGRNb2NrUmVjb2duaXRpb25SZXN1bHQpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2No
cm9taXVtL05vdGlmaWNhdGlvblByZXNlbnRlci5jcHA6CisgICAgICAgIChOb3RpZmljYXRpb25Q
cmVzZW50ZXI6OnNpbXVsYXRlQ2xpY2spOgorICAgICAgICAoTm90aWZpY2F0aW9uUHJlc2VudGVy
OjpzaG93KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNl
cy5jcHA6CisgICAgICAgIChhcHBseUZvbnRNYXApOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcDoKKyAgICAgICAgKFdlYlZpZXdIb3N0OjpwcmludFJl
c291cmNlRGVzY3JpcHRpb24pOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9BY2Nlc3Np
YmlsaXR5Q29udHJvbGxlcldpbi5jcHA6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5Q29udHJvbGxl
cjo6fkFjY2Vzc2liaWxpdHlDb250cm9sbGVyKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlDb250
cm9sbGVyOjp3aW5Ob3RpZmljYXRpb25SZWNlaXZlZCk6CisgICAgICAgICogRHVtcFJlbmRlclRy
ZWUvd2luL0xheW91dFRlc3RDb250cm9sbGVyV2luLmNwcDoKKyAgICAgICAgKHdvcmxkSURGb3JX
b3JsZCk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklz
b2xhdGVkV29ybGQpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9SZXNvdXJjZUxvYWRE
ZWxlZ2F0ZS5jcHA6CisgICAgICAgIChSZXNvdXJjZUxvYWREZWxlZ2F0ZTo6ZGVzY3JpcHRpb25T
dWl0YWJsZUZvclRlc3RSZXN1bHQpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV1RSOjpMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6d29ybGRJREZvcldvcmxkKToKKyAgICAgICAgKFdUUjo6TGF5b3V0VGVz
dENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKToKKwogMjAxMi0wMy0z
MCAgQ2hhbmcgU2h1ICA8Y3NodUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIFVw
ZGF0ZSBteSBlbWFpbC4KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L0NwcEJvdW5kQ2xhc3MuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vQ3BwQm91
bmRDbGFzcy5jcHAKaW5kZXggOWI0YTNiNjQ2NDVkMDU3YjQxNzJlMWM3ZGZhMDdjN2E2MmU3N2Nm
OC4uMWIyOWQyYjBmNTVkMDFmNzM4NzE0NTc4NzdmOWRiZGYwNmYxYjQ5MSAxMDA2NDQKLS0tIGEv
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vQ3BwQm91bmRDbGFzcy5jcHAKKysrIGIvVG9v
bHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vQ3BwQm91bmRDbGFzcy5jcHAKQEAgLTIwMywxMCAr
MjAzLDEwIEBAIGJvb2wgQ3BwTlBPYmplY3Q6OnNldFByb3BlcnR5KE5QT2JqZWN0KiBucE9iaiwg
TlBJZGVudGlmaWVyIGlkZW50LCBjb25zdCBOUFZhcmlhCiBDcHBCb3VuZENsYXNzOjp+Q3BwQm91
bmRDbGFzcygpCiB7CiAgICAgZm9yIChNZXRob2RMaXN0OjppdGVyYXRvciBpID0gbV9tZXRob2Rz
LmJlZ2luKCk7IGkgIT0gbV9tZXRob2RzLmVuZCgpOyArK2kpCi0gICAgICAgIGRlbGV0ZSBpLT5z
ZWNvbmQ7CisgICAgICAgIGRlbGV0ZSBpLT52YWx1ZTsKIAogICAgIGZvciAoUHJvcGVydHlMaXN0
OjppdGVyYXRvciBpID0gbV9wcm9wZXJ0aWVzLmJlZ2luKCk7IGkgIT0gbV9wcm9wZXJ0aWVzLmVu
ZCgpOyArK2kpCi0gICAgICAgIGRlbGV0ZSBpLT5zZWNvbmQ7CisgICAgICAgIGRlbGV0ZSBpLT52
YWx1ZTsKIAogICAgIC8vIFVucmVnaXN0ZXIgb3Vyc2VsdmVzIGlmIHdlIHdlcmUgYm91bmQgdG8g
YSBmcmFtZS4KICAgICBpZiAobV9ib3VuZFRvRnJhbWUpCkBAIC0yMzcsNyArMjM3LDcgQEAgYm9v
bCBDcHBCb3VuZENsYXNzOjppbnZva2UoTlBJZGVudGlmaWVyIGlkZW50LAogICAgICAgICB9CiAg
ICAgICAgIGNhbGxiYWNrID0gbV9mYWxsYmFja0NhbGxiYWNrLmdldCgpOwogICAgIH0gZWxzZQot
ICAgICAgICBjYWxsYmFjayA9ICgqbWV0aG9kKS5zZWNvbmQ7CisgICAgICAgIGNhbGxiYWNrID0g
KCptZXRob2QpLnZhbHVlOwogCiAgICAgLy8gQnVpbGQgYSBDcHBBcmd1bWVudExpc3QgYXJndW1l
bnQgdmVjdG9yIGZyb20gdGhlIE5QVmFyaWFudHMgY29taW5nIGluLgogICAgIENwcEFyZ3VtZW50
TGlzdCBjcHBBcmd1bWVudHMoYXJndW1lbnRDb3VudCk7CkBAIC0yNjAsNyArMjYwLDcgQEAgYm9v
bCBDcHBCb3VuZENsYXNzOjpnZXRQcm9wZXJ0eShOUElkZW50aWZpZXIgaWRlbnQsIE5QVmFyaWFu
dCogcmVzdWx0KSBjb25zdAogICAgIH0KIAogICAgIENwcFZhcmlhbnQgY3BwVmFsdWU7Ci0gICAg
aWYgKCFjYWxsYmFjay0+c2Vjb25kLT5nZXRWYWx1ZSgmY3BwVmFsdWUpKQorICAgIGlmICghY2Fs
bGJhY2stPnZhbHVlLT5nZXRWYWx1ZSgmY3BwVmFsdWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgY3BwVmFsdWUuY29weVRvTlBWYXJpYW50KHJlc3VsdCk7CiAgICAgcmV0dXJuIHRydWU7
CkBAIC0yNzQsNyArMjc0LDcgQEAgYm9vbCBDcHBCb3VuZENsYXNzOjpzZXRQcm9wZXJ0eShOUElk
ZW50aWZpZXIgaWRlbnQsIGNvbnN0IE5QVmFyaWFudCogdmFsdWUpCiAKICAgICBDcHBWYXJpYW50
IGNwcFZhbHVlOwogICAgIGNwcFZhbHVlLnNldCgqdmFsdWUpOwotICAgIHJldHVybiAoKmNhbGxi
YWNrKS5zZWNvbmQtPnNldFZhbHVlKGNwcFZhbHVlKTsKKyAgICByZXR1cm4gKCpjYWxsYmFjayku
dmFsdWUtPnNldFZhbHVlKGNwcFZhbHVlKTsKIH0KIAogdm9pZCBDcHBCb3VuZENsYXNzOjpiaW5k
Q2FsbGJhY2soY29uc3Qgc3RyaW5nJiBuYW1lLCBDYWxsYmFjayogY2FsbGJhY2spCkBAIC0yODIs
NyArMjgyLDcgQEAgdm9pZCBDcHBCb3VuZENsYXNzOjpiaW5kQ2FsbGJhY2soY29uc3Qgc3RyaW5n
JiBuYW1lLCBDYWxsYmFjayogY2FsbGJhY2spCiAgICAgTlBJZGVudGlmaWVyIGlkZW50ID0gV2Vi
QmluZGluZ3M6OmdldFN0cmluZ0lkZW50aWZpZXIobmFtZS5jX3N0cigpKTsKICAgICBNZXRob2RM
aXN0OjppdGVyYXRvciBvbGRDYWxsYmFjayA9IG1fbWV0aG9kcy5maW5kKGlkZW50KTsKICAgICBp
ZiAob2xkQ2FsbGJhY2sgIT0gbV9tZXRob2RzLmVuZCgpKSB7Ci0gICAgICAgIGRlbGV0ZSBvbGRD
YWxsYmFjay0+c2Vjb25kOworICAgICAgICBkZWxldGUgb2xkQ2FsbGJhY2stPnZhbHVlOwogICAg
ICAgICBpZiAoIWNhbGxiYWNrKSB7CiAgICAgICAgICAgICBtX21ldGhvZHMucmVtb3ZlKG9sZENh
bGxiYWNrKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTMwOSw3ICszMDksNyBAQCB2b2lkIENw
cEJvdW5kQ2xhc3M6OmJpbmRQcm9wZXJ0eShjb25zdCBzdHJpbmcmIG5hbWUsIFByb3BlcnR5Q2Fs
bGJhY2sqIGNhbGxiYWNrKQogICAgIE5QSWRlbnRpZmllciBpZGVudCA9IFdlYkJpbmRpbmdzOjpn
ZXRTdHJpbmdJZGVudGlmaWVyKG5hbWUuY19zdHIoKSk7CiAgICAgUHJvcGVydHlMaXN0OjppdGVy
YXRvciBvbGRDYWxsYmFjayA9IG1fcHJvcGVydGllcy5maW5kKGlkZW50KTsKICAgICBpZiAob2xk
Q2FsbGJhY2sgIT0gbV9wcm9wZXJ0aWVzLmVuZCgpKSB7Ci0gICAgICAgIGRlbGV0ZSBvbGRDYWxs
YmFjay0+c2Vjb25kOworICAgICAgICBkZWxldGUgb2xkQ2FsbGJhY2stPnZhbHVlOwogICAgICAg
ICBpZiAoIWNhbGxiYWNrKSB7CiAgICAgICAgICAgICBtX3Byb3BlcnRpZXMucmVtb3ZlKG9sZENh
bGxiYWNrKTsKICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL01vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIuY3BwIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlci5jcHAK
aW5kZXggYTVmZTNlZGE2N2M3ZmVjYjRlZmQ4ZWE4ZTdjM2NlYmNlNzZiN2U0Yi4uOGZjYzA4NDU5
YmI0MDlhM2VjZDQ1Y2U1ZWVmNGFmYWVlZWUxNDk0YSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlci5jcHAKKysrIGIv
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxl
ci5jcHAKQEAgLTUwLDcgKzUwLDcgQEAgdm9pZCBNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVy
OjphZGRNb2NrUmVjb2duaXRpb25SZXN1bHQoY29uc3QgV2ViU3RyaW5nJiByZXMKICAgICAgICAg
U3RyaW5nIGxhbmdTdHJpbmcgPSBTdHJpbmc6OmZyb21VVEY4KGxhbmd1YWdlLnV0ZjgoKS5kYXRh
KCkpOwogICAgICAgICBpZiAoIW1fcmVjb2duaXRpb25SZXN1bHRzLmNvbnRhaW5zKGxhbmdTdHJp
bmcpKQogICAgICAgICAgICAgbV9yZWNvZ25pdGlvblJlc3VsdHMuc2V0KGxhbmdTdHJpbmcsIFZl
Y3RvcjxXZWJTcGVlY2hJbnB1dFJlc3VsdD4oKSk7Ci0gICAgICAgIG1fcmVjb2duaXRpb25SZXN1
bHRzLmZpbmQobGFuZ1N0cmluZyktPnNlY29uZC5hcHBlbmQocmVzKTsKKyAgICAgICAgbV9yZWNv
Z25pdGlvblJlc3VsdHMuZmluZChsYW5nU3RyaW5nKS0+dmFsdWUuYXBwZW5kKHJlcyk7CiAgICAg
fQogfQogCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9Ob3RpZmlj
YXRpb25QcmVzZW50ZXIuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTm90aWZp
Y2F0aW9uUHJlc2VudGVyLmNwcAppbmRleCAwYzU0MDBmNWU5ZThmNzE3MGVjZjU5OWE4MWJkNDI2
ZmJkNzcyOTFkLi5hMjE1ODhmNzQ0ZTVjM2Y1YWI3MGRiZGIwM2MyNzVjNTA3MDhmMDNhIDEwMDY0
NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9Ob3RpZmljYXRpb25QcmVzZW50
ZXIuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL05vdGlmaWNhdGlvblBy
ZXNlbnRlci5jcHAKQEAgLTc1LDcgKzc1LDcgQEAgYm9vbCBOb3RpZmljYXRpb25QcmVzZW50ZXI6
OnNpbXVsYXRlQ2xpY2soY29uc3QgV2ViU3RyaW5nJiB0aXRsZSkKICAgICBpZiAobV9hY3RpdmVO
b3RpZmljYXRpb25zLmZpbmQoaWQpID09IG1fYWN0aXZlTm90aWZpY2F0aW9ucy5lbmQoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIGNvbnN0IFdlYk5vdGlmaWNhdGlvbiYgbm90
aWZpY2F0aW9uID0gbV9hY3RpdmVOb3RpZmljYXRpb25zLmZpbmQoaWQpLT5zZWNvbmQ7CisgICAg
Y29uc3QgV2ViTm90aWZpY2F0aW9uJiBub3RpZmljYXRpb24gPSBtX2FjdGl2ZU5vdGlmaWNhdGlv
bnMuZmluZChpZCktPnZhbHVlOwogICAgIFdlYk5vdGlmaWNhdGlvbiBldmVudFRhcmdldChub3Rp
ZmljYXRpb24pOwogICAgIGV2ZW50VGFyZ2V0LmRpc3BhdGNoQ2xpY2tFdmVudCgpOwogICAgIHJl
dHVybiB0cnVlOwpAQCAtODksNyArODksNyBAQCBib29sIE5vdGlmaWNhdGlvblByZXNlbnRlcjo6
c2hvdyhjb25zdCBXZWJOb3RpZmljYXRpb24mIG5vdGlmaWNhdGlvbikKICAgICAgICAgV1RGOjpT
dHJpbmcgcmVwbGFjZUlkKG5vdGlmaWNhdGlvbi5yZXBsYWNlSWQoKS5kYXRhKCksIG5vdGlmaWNh
dGlvbi5yZXBsYWNlSWQoKS5sZW5ndGgoKSk7CiAgICAgICAgIGlmIChtX3JlcGxhY2VtZW50cy5m
aW5kKHJlcGxhY2VJZCkgIT0gbV9yZXBsYWNlbWVudHMuZW5kKCkpCiAgICAgICAgICAgICBwcmlu
dGYoIlJFUExBQ0lORyBOT1RJRklDQVRJT04gJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgbV9y
ZXBsYWNlbWVudHMuZmluZChyZXBsYWNlSWQpLT5zZWNvbmQudXRmOCgpLmRhdGEoKSk7CisgICAg
ICAgICAgICAgICAgICAgbV9yZXBsYWNlbWVudHMuZmluZChyZXBsYWNlSWQpLT52YWx1ZS51dGY4
KCkuZGF0YSgpKTsKIAogICAgICAgICBtX3JlcGxhY2VtZW50cy5zZXQocmVwbGFjZUlkLCBXVEY6
OlN0cmluZyhpZGVudGlmaWVyLmRhdGEoKSwgaWRlbnRpZmllci5sZW5ndGgoKSkpOwogICAgIH0K
ZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZlcmVuY2Vz
LmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZlcmVuY2VzLmNwcApp
bmRleCBlOTljOThlYzFlM2IzYmNjYmNhNjE3MzZiMTQ0Mzc2NWIyNzMxNDc0Li5iNTAyMWMzNWY5
MTNhN2NlODUxZGRhN2Y2NWI4YWUyMjg0NjFiOTkzIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vV2ViUHJlZmVyZW5jZXMuY3BwCkBAIC0xNTcsOSArMTU3LDkgQEAgdHlw
ZWRlZiB2b2lkICgqU2V0Rm9udEZhbWlseVdyYXBwZXIpKFdlYlNldHRpbmdzKiwgY29uc3QgV2Vi
U3RyaW5nJiwgVVNjcmlwdENvZGUKIHN0YXRpYyB2b2lkIGFwcGx5Rm9udE1hcChXZWJTZXR0aW5n
cyogc2V0dGluZ3MsIGNvbnN0IFdlYlByZWZlcmVuY2VzOjpTY3JpcHRGb250RmFtaWx5TWFwJiBt
YXAsIFNldEZvbnRGYW1pbHlXcmFwcGVyIHNldHRlcikKIHsKICAgICBmb3IgKFdlYlByZWZlcmVu
Y2VzOjpTY3JpcHRGb250RmFtaWx5TWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbWFwLmJlZ2lu
KCk7IGl0ZXIgIT0gbWFwLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgY29uc3QgV2ViU3RyaW5n
JiBmb250ID0gaXRlci0+c2Vjb25kOworICAgICAgICBjb25zdCBXZWJTdHJpbmcmIGZvbnQgPSBp
dGVyLT52YWx1ZTsKICAgICAgICAgaWYgKCFmb250LmlzTnVsbCgpICYmICFmb250LmlzRW1wdHko
KSkKLSAgICAgICAgICAgICgqc2V0dGVyKShzZXR0aW5ncywgZm9udCwgc3RhdGljX2Nhc3Q8VVNj
cmlwdENvZGU+KGl0ZXItPmZpcnN0KSk7CisgICAgICAgICAgICAoKnNldHRlcikoc2V0dGluZ3Ms
IGZvbnQsIHN0YXRpY19jYXN0PFVTY3JpcHRDb2RlPihpdGVyLT5rZXkpKTsKICAgICB9CiB9CiAK
ZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmNw
cCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcAppbmRleCBi
M2U5ZGRhMDE2NDkwMGQwZGVhODllMWM3N2FjNzhkNTMwOWExZGFjLi4wMmM5MmMwNDAwMThkMGU2
ZGM3YWQzM2RhYzAwOTIzNjgxNjcyN2EwIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vV2ViVmlld0hvc3QuY3BwCkBAIC0xNjQyLDcgKzE2NDIsNyBAQCB2b2lkIFdlYlZpZXdI
b3N0OjpwcmludEZyYW1lVXNlckdlc3R1cmVTdGF0dXMoV2ViRnJhbWUqIHdlYmZyYW1lLCBjb25z
dCBjaGFyKiBtcwogdm9pZCBXZWJWaWV3SG9zdDo6cHJpbnRSZXNvdXJjZURlc2NyaXB0aW9uKHVu
c2lnbmVkIGlkZW50aWZpZXIpCiB7CiAgICAgUmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9y
ZXNvdXJjZUlkZW50aWZpZXJNYXAuZmluZChpZGVudGlmaWVyKTsKLSAgICBwcmludGYoIiVzIiwg
aXQgIT0gbV9yZXNvdXJjZUlkZW50aWZpZXJNYXAuZW5kKCkgPyBpdC0+c2Vjb25kLmNfc3RyKCkg
OiAiPHVua25vd24+Iik7CisgICAgcHJpbnRmKCIlcyIsIGl0ICE9IG1fcmVzb3VyY2VJZGVudGlm
aWVyTWFwLmVuZCgpID8gaXQtPnZhbHVlLmNfc3RyKCkgOiAiPHVua25vd24+Iik7CiB9CiAKIHZv
aWQgV2ViVmlld0hvc3Q6OnNldFBlbmRpbmdFeHRyYURhdGEoUGFzc093blB0cjxUZXN0U2hlbGxF
eHRyYURhdGE+IGV4dHJhRGF0YSkKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dp
bi9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlcldpbi5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS93
aW4vQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJXaW4uY3BwCmluZGV4IDdmOWFhNmNjMmVlOTI5YjJi
ZjhlYTQxNmY1ZDY1YmIwNTZlM2VhZDEuLjRmNTZlZmQxZDRiOGQ0NDRlZWRlZThjZjk2Y2UyMDEx
ZTE3YTQ5YTEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9BY2Nlc3NpYmls
aXR5Q29udHJvbGxlcldpbi5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0FjY2Vz
c2liaWxpdHlDb250cm9sbGVyV2luLmNwcApAQCAtNTgsNyArNTgsNyBAQCBBY2Nlc3NpYmlsaXR5
Q29udHJvbGxlcjo6fkFjY2Vzc2liaWxpdHlDb250cm9sbGVyKCkKICAgICAgICAgVW5ob29rV2lu
RXZlbnQobV9ub3RpZmljYXRpb25zRXZlbnRIb29rKTsKIAogICAgIGZvciAoSGFzaE1hcDxQbGF0
Zm9ybVVJRWxlbWVudCwgSlNPYmplY3RSZWY+OjppdGVyYXRvciBpdCA9IG1fbm90aWZpY2F0aW9u
TGlzdGVuZXJzLmJlZ2luKCk7IGl0ICE9IG1fbm90aWZpY2F0aW9uTGlzdGVuZXJzLmVuZCgpOyAr
K2l0KQotICAgICAgICBKU1ZhbHVlVW5wcm90ZWN0KGZyYW1lLT5nbG9iYWxDb250ZXh0KCksIGl0
LT5zZWNvbmQpOworICAgICAgICBKU1ZhbHVlVW5wcm90ZWN0KGZyYW1lLT5nbG9iYWxDb250ZXh0
KCksIGl0LT52YWx1ZSk7CiB9CiAKIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXI6OmVsZW1lbnRBdFBvaW50KGludCB4LCBpbnQgeSkKQEAgLTI5Myw3ICsyOTMs
NyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpyZW1vdmVOb3RpZmljYXRpb25MaXN0
ZW5lcigpCiB2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjp3aW5Ob3RpZmljYXRpb25SZWNl
aXZlZChQbGF0Zm9ybVVJRWxlbWVudCBlbGVtZW50LCBjb25zdCBzdHJpbmcmIGV2ZW50TmFtZSkK
IHsKICAgICBmb3IgKEhhc2hNYXA8UGxhdGZvcm1VSUVsZW1lbnQsIEpTT2JqZWN0UmVmPjo6aXRl
cmF0b3IgaXQgPSBtX25vdGlmaWNhdGlvbkxpc3RlbmVycy5iZWdpbigpOyBpdCAhPSBtX25vdGlm
aWNhdGlvbkxpc3RlbmVycy5lbmQoKTsgKytpdCkgewotICAgICAgICBDT01QdHI8SVNlcnZpY2VQ
cm92aWRlcj4gdGhpc1NlcnZpY2VQcm92aWRlcihRdWVyeSwgaXQtPmZpcnN0KTsKKyAgICAgICAg
Q09NUHRyPElTZXJ2aWNlUHJvdmlkZXI+IHRoaXNTZXJ2aWNlUHJvdmlkZXIoUXVlcnksIGl0LT5r
ZXkpOwogICAgICAgICBpZiAoIXRoaXNTZXJ2aWNlUHJvdmlkZXIpCiAgICAgICAgICAgICBjb250
aW51ZTsKIApAQCAtMzE2LDcgKzMxNiw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6
Ondpbk5vdGlmaWNhdGlvblJlY2VpdmVkKFBsYXRmb3JtVUlFbGVtZW50IGVsZW1lbnQsCiAKICAg
ICAgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGpzTm90aWZpY2F0aW9uKEFkb3B0LCBKU1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhldmVudE5hbWUuY19zdHIoKSkpOwogICAgICAgICBK
U1ZhbHVlUmVmIGFyZ3VtZW50ID0gSlNWYWx1ZU1ha2VTdHJpbmcoZnJhbWUtPmdsb2JhbENvbnRl
eHQoKSwganNOb3RpZmljYXRpb24uZ2V0KCkpOwotICAgICAgICBKU09iamVjdENhbGxBc0Z1bmN0
aW9uKGZyYW1lLT5nbG9iYWxDb250ZXh0KCksIGl0LT5zZWNvbmQsIE5VTEwsIDEsICZhcmd1bWVu
dCwgTlVMTCk7CisgICAgICAgIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24oZnJhbWUtPmdsb2JhbENv
bnRleHQoKSwgaXQtPnZhbHVlLCBOVUxMLCAxLCAmYXJndW1lbnQsIE5VTEwpOwogICAgIH0KIH0K
IApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0xheW91dFRlc3RDb250cm9s
bGVyV2luLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9MYXlvdXRUZXN0Q29udHJvbGxl
cldpbi5jcHAKaW5kZXggMWI2YTQxNTdjNDhlNjY2NWQ1MzljYWM4YWQ3ODgwOTMyM2M3MjBmNS4u
ZGNjYTgxYjg1ZGVhNTY1N2FkMzFmMzlmNTc5Nzg5NWM3MzBkOTJkZiAxMDA2NDQKLS0tIGEvVG9v
bHMvRHVtcFJlbmRlclRyZWUvd2luL0xheW91dFRlc3RDb250cm9sbGVyV2luLmNwcAorKysgYi9U
b29scy9EdW1wUmVuZGVyVHJlZS93aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJXaW4uY3BwCkBAIC0x
MjgyLDggKzEyODIsOCBAQCB1bnNpZ25lZCB3b3JsZElERm9yV29ybGQoSVdlYlNjcmlwdFdvcmxk
KiB3b3JsZCkKIHsKICAgICBXb3JsZE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gd29ybGRNYXAo
KS5lbmQoKTsKICAgICBmb3IgKFdvcmxkTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHdvcmxkTWFw
KCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kID09
IHdvcmxkKQotICAgICAgICAgICAgcmV0dXJuIGl0LT5maXJzdDsKKyAgICAgICAgaWYgKGl0LT52
YWx1ZSA9PSB3b3JsZCkKKyAgICAgICAgICAgIHJldHVybiBpdC0+a2V5OwogICAgIH0KIAogICAg
IHJldHVybiAwOwpAQCAtMTMwMiw3ICsxMzAyLDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQodW5zaWduZWQgd29ybGRJRCwgSlNPYmoK
ICAgICAgICAgaWYgKEZBSUxFRChXZWJLaXRDcmVhdGVJbnN0YW5jZShfX3V1aWRvZihXZWJTY3Jp
cHRXb3JsZCksIDAsIF9fdXVpZG9mKHdvcmxkKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZ3
b3JsZCkpKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9IGVsc2UgewotICAgICAgICBDT01Q
dHI8SVdlYlNjcmlwdFdvcmxkPiYgd29ybGRTbG90ID0gd29ybGRNYXAoKS5hZGQod29ybGRJRCwg
MCkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgQ09NUHRyPElXZWJTY3JpcHRXb3JsZD4mIHdv
cmxkU2xvdCA9IHdvcmxkTWFwKCkuYWRkKHdvcmxkSUQsIDApLml0ZXJhdG9yLT52YWx1ZTsKICAg
ICAgICAgaWYgKCF3b3JsZFNsb3QgJiYgRkFJTEVEKFdlYktpdENyZWF0ZUluc3RhbmNlKF9fdXVp
ZG9mKFdlYlNjcmlwdFdvcmxkKSwgMCwgX191dWlkb2Yod29ybGRTbG90KSwgcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKio+KCZ3b3JsZFNsb3QpKSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IHdvcmxkID0gd29ybGRTbG90OwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2lu
L1Jlc291cmNlTG9hZERlbGVnYXRlLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9SZXNv
dXJjZUxvYWREZWxlZ2F0ZS5jcHAKaW5kZXggMjZiNzIyYTRlYTVjZGM2NGYxMzdjZWY3NzJjMzQ4
ZjY5NTQ4OTc2NC4uYThjZDNiZDBjMTA2YmYyMmI0NmRhYTljMTMyZjYzMTg2N2I1ZTFmOCAxMDA2
NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1Jlc291cmNlTG9hZERlbGVnYXRlLmNw
cAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vUmVzb3VyY2VMb2FkRGVsZWdhdGUuY3Bw
CkBAIC02Niw3ICs2Niw3IEBAIHdzdHJpbmcgUmVzb3VyY2VMb2FkRGVsZWdhdGU6OmRlc2NyaXB0
aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KHVuc2lnbmVkIGxvbmcgaWRlCiAgICAgaWYgKGl0ID09
IG1fdXJsTWFwLmVuZCgpKQogICAgICAgICByZXR1cm4gTCI8dW5rbm93bj4iOwogCi0gICAgcmV0
dXJuIHVybFN1aXRhYmxlRm9yVGVzdFJlc3VsdChpdC0+c2Vjb25kKTsKKyAgICByZXR1cm4gdXJs
U3VpdGFibGVGb3JUZXN0UmVzdWx0KGl0LT52YWx1ZSk7CiB9CiAKIHdzdHJpbmcgUmVzb3VyY2VM
b2FkRGVsZWdhdGU6OmRlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KElXZWJVUkxSZXF1
ZXN0KiByZXF1ZXN0KQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcAppbmRleCBjZWM0MzQ0ZGQy
Y2YzNDU2ZjdiNTJkNzdiOTdkMzBjN2VkMjUwMGVjLi40ZDFkNDE0OGYyNjQwZjFmZDA1ZmNhMjQ5
NTJjZjM0ODIxMDQ3NzEzIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcApAQCAtNDg5LDgg
KzQ4OSw4IEBAIHVuc2lnbmVkIExheW91dFRlc3RDb250cm9sbGVyOjp3b3JsZElERm9yV29ybGQo
V0tCdW5kbGVTY3JpcHRXb3JsZFJlZiB3b3JsZCkKIHsKICAgICBXb3JsZE1hcDo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gd29ybGRNYXAoKS5lbmQoKTsKICAgICBmb3IgKFdvcmxkTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IHdvcmxkTWFwKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAg
ICAgIGlmIChpdC0+c2Vjb25kID09IHdvcmxkKQotICAgICAgICAgICAgcmV0dXJuIGl0LT5maXJz
dDsKKyAgICAgICAgaWYgKGl0LT52YWx1ZSA9PSB3b3JsZCkKKyAgICAgICAgICAgIHJldHVybiBp
dC0+a2V5OwogICAgIH0KIAogICAgIHJldHVybiAwOwpAQCAtNTA0LDcgKzUwNCw3IEBAIHZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKEpTQ29u
dGV4dFJlZiBjb250ZXh0LCB1CiAgICAgaWYgKCF3b3JsZElEKQogICAgICAgICB3b3JsZC5hZG9w
dChXS0J1bmRsZVNjcmlwdFdvcmxkQ3JlYXRlV29ybGQoKSk7CiAgICAgZWxzZSB7Ci0gICAgICAg
IFdLUmV0YWluUHRyPFdLQnVuZGxlU2NyaXB0V29ybGRSZWY+JiB3b3JsZFNsb3QgPSB3b3JsZE1h
cCgpLmFkZCh3b3JsZElELCAwKS5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICBXS1JldGFpblB0
cjxXS0J1bmRsZVNjcmlwdFdvcmxkUmVmPiYgd29ybGRTbG90ID0gd29ybGRNYXAoKS5hZGQod29y
bGRJRCwgMCkuaXRlcmF0b3ItPnZhbHVlOwogICAgICAgICBpZiAoIXdvcmxkU2xvdCkKICAgICAg
ICAgICAgIHdvcmxkU2xvdC5hZG9wdChXS0J1bmRsZVNjcmlwdFdvcmxkQ3JlYXRlV29ybGQoKSk7
CiAgICAgICAgIHdvcmxkID0gd29ybGRTbG90Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>135113</attachid>
            <date>2012-04-02 09:02:45 -0700</date>
            <delta_ts>2012-04-02 09:08:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-82784-20120402130247.patch</filename>
            <type>text/plain</type>
            <size>621249</size>
            <attacher name="Caio Marcelo de Oliveira Filho">cmarcelo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyODkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
MGI3YjdmNDZmMGJjOTI2MDkwNjhlMjQ5MWE1MDEzZTliZDAyOTllLi5kMzQ2MjhiNTMwNzRlZmFi
NmNjZmU0MGUzOTI4MzU5Yjg1ZjA3NjgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMTQgQEAKKzIwMTItMDQtMDIgIENhaW8gTWFyY2VsbyBkZSBPbGl2ZWlyYSBGaWxobyAg
PGNhaW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KKworICAgICAgICBSZW5hbWUgZmlyc3Qvc2Vj
b25kIHRvIGtleS92YWx1ZSBpbiBIYXNoTWFwIGl0ZXJhdG9ycworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI3ODQKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0Lmg6Cisg
ICAgICAgIChKU0M6OkpTQ2FsbGJhY2tPYmplY3REYXRhOjpKU1ByaXZhdGVQcm9wZXJ0eU1hcDo6
Z2V0UHJpdmF0ZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNDYWxsYmFja09iamVjdERhdGE6
OkpTUHJpdmF0ZVByb3BlcnR5TWFwOjpzZXRQcml2YXRlUHJvcGVydHkpOgorICAgICAgICAoSlND
OjpKU0NhbGxiYWNrT2JqZWN0RGF0YTo6SlNQcml2YXRlUHJvcGVydHlNYXA6OnZpc2l0Q2hpbGRy
ZW4pOgorICAgICAgICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmg6CisgICAgICAg
IChKU0M6Ojo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgICogQVBJL0pTQ2xhc3NSZWYu
Y3BwOgorICAgICAgICAoT3BhcXVlSlNDbGFzczo6fk9wYXF1ZUpTQ2xhc3MpOgorICAgICAgICAo
T3BhcXVlSlNDbGFzc0NvbnRleHREYXRhOjpPcGFxdWVKU0NsYXNzQ29udGV4dERhdGEpOgorICAg
ICAgICAoT3BhcXVlSlNDbGFzczo6Y29udGV4dERhdGEpOgorICAgICAgICAqIGJ5dGVjb2RlL0Nv
ZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcCk6CisgICAgICAgIChK
U0M6OkV2YWxDb2RlQ2FjaGU6OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKiBieXRlY29kZS9K
dW1wVGFibGUuaDoKKyAgICAgICAgKEpTQzo6U3RyaW5nSnVtcFRhYmxlOjpvZmZzZXRGb3JWYWx1
ZSk6CisgICAgICAgIChKU0M6OlN0cmluZ0p1bXBUYWJsZTo6Y3RpRm9yVmFsdWUpOgorICAgICAg
ICAqIGJ5dGVjb2RlL0xhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcDoKKyAgICAgICAgKEpTQzo6
TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVQYXJzZXI6OmdldElmUHJlc2VudCk6CisgICAgICAgICog
Ynl0ZWNvZGUvUHJlZGljdGlvblRyYWNrZXIuaDoKKyAgICAgICAgKEpTQzo6UHJlZGljdGlvblRy
YWNrZXI6OnByZWRpY3RHbG9iYWxWYXIpOgorICAgICAgICAoSlNDOjpQcmVkaWN0aW9uVHJhY2tl
cjo6Z2V0R2xvYmFsVmFyUHJlZGljdGlvbik6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmFkZFZh
cik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjphZGRHbG9iYWxWYXIpOgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6YWRkQ29uc3RhbnQpOgorICAgICAgICAoSlND
OjpCeXRlY29kZUdlbmVyYXRvcjo6YWRkQ29uc3RhbnRWYWx1ZSk6CisgICAgICAgIChKU0M6OkJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0TG9hZCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJh
dG9yOjphZGRTdHJpbmdDb25zdGFudCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0TGF6eU5ld0Z1bmN0aW9uKToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvTm9kZXNDb2Rl
Z2VuLmNwcDoKKyAgICAgICAgKEpTQzo6UHJvcGVydHlMaXN0Tm9kZTo6ZW1pdEJ5dGVjb2RlKToK
KyAgICAgICAgKiBkZWJ1Z2dlci9EZWJ1Z2dlci5jcHA6CisgICAgICAgICogZGZnL0RGR0Fzc2Vt
Ymx5SGVscGVycy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QXNzZW1ibHlIZWxwZXJzOjpkZWNv
ZGVkQ29kZU1hcEZvcik6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlQ2FjaGUuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZUNhY2hlOjp+Qnl0ZUNvZGVDYWNoZSk6CisgICAgICAgIChK
U0M6OkRGRzo6Qnl0ZUNvZGVDYWNoZTo6Z2V0KToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpjZWxsQ29uc3Rh
bnQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5
OjpJbmxpbmVTdGFja0VudHJ5KToKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAo
SlNDOjpIZWFwOjptYXJrUHJvdGVjdGVkT2JqZWN0cyk6CisgICAgICAgICogaGVhcC9IZWFwLmg6
CisgICAgICAgIChKU0M6OkhlYXA6OmZvckVhY2hQcm90ZWN0ZWRDZWxsKToKKyAgICAgICAgKiBq
aXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZSk6CisgICAgICAg
ICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpjdGlTdHViKToK
KyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpob3N0RnVuY3Rpb25TdHViKToKKyAgICAgICAgKiBw
YXJzZXIvUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6OjpwYXJzZVN0cmljdE9iamVjdExpdGVy
YWwpOgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGUuY3BwOgorICAgICAgICAoSlNDKToKKyAg
ICAgICAgKEpTQzo6ZnVuY3Rpb25OYW1lQ291bnRFbnRyeUNvbXBhcmF0b3IpOgorICAgICAgICAo
SlNDOjpQcm9maWxlOjpkZWJ1Z1ByaW50RGF0YVNhbXBsZVN0eWxlKToKKyAgICAgICAgVGhpcyBj
b2RlIGtlcHQgYSB2ZWN0b3Igb2YgdGhlIHBhaXJzIHRoYXQgd2VyZSB0aGUgImNvbnRlbnRzIiBv
ZiB0aGUKKyAgICAgICAgaXRlcmF0b3JzLiBUaGlzIGlzIGNoYW5nZWQgdG8gdXNlIGEgSGFzaE1h
cEVudHJ5LiBXZSBtYWtlIHVzZSBIYXNoQ291bnQncworICAgICAgICBWYWx1ZVR5cGUgKHdoaWNo
IHJlcHJlc2VudHMgb25seSB0aGUga2V5KSB0byBnZXQgdGhlIHByb3BlciBrZXkgcGFyYW1ldGVy
IGZvcgorICAgICAgICBIYXNoTWFwRW50cnkuCisKKyAgICAgICAgKiBydW50aW1lL0lkZW50aWZp
ZXIuY3BwOgorICAgICAgICAoSlNDOjpJZGVudGlmaWVyOjphZGQpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNBY3RpdmF0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6SlNBY3RpdmF0aW9uOjpnZXRPd25Q
cm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNBY3RpdmF0aW9uOjpzeW1ib2xUYWJsZVB1
dFdpdGhBdHRyaWJ1dGVzKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgorICAgICAg
ICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpwdXQpOgorICAgICAgICAoSlNDOjpTcGFyc2VB
cnJheVZhbHVlTWFwOjpwdXREaXJlY3QpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVl
TWFwOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6ZW50ZXJEaWN0aW9u
YXJ5TW9kZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmRlZmluZU93bk51bWVyaWNQcm9wZXJ0
eSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgpOgor
ICAgICAgICAoSlNDOjpKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpOgorICAgICAg
ICAoSlNDOjpKU0FycmF5OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKToKKyAgICAgICAg
KEpTQzo6SlNBcnJheTo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgpOgorICAgICAg
ICAoSlNDOjpKU0FycmF5OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgpOgorICAgICAgICAoSlNDOjpK
U0FycmF5OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c2V0
TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c29ydCk6CisgICAgICAgIChKU0M6OkpT
QXJyYXk6OmNvbXBhY3RGb3JTb3J0aW5nKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6Y2hlY2tD
b25zaXN0ZW5jeSk6CisgICAgICAgICogcnVudGltZS9KU1ZhcmlhYmxlT2JqZWN0LmNwcDoKKyAg
ICAgICAgKEpTQzo6SlNWYXJpYWJsZU9iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAg
ICAgICogcnVudGltZS9KU1ZhcmlhYmxlT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTVmFyaWFi
bGVPYmplY3Q6OnN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMpOgorICAgICAgICAqIHJ1bnRp
bWUvUmVnRXhwQ2FjaGUuY3BwOgorICAgICAgICAoSlNDOjpSZWdFeHBDYWNoZTo6bG9va3VwT3JD
cmVhdGUpOgorICAgICAgICAoSlNDOjpSZWdFeHBDYWNoZTo6aW52YWxpZGF0ZUNvZGUpOgorICAg
ICAgICAqIHJ1bnRpbWUvV2Vha0dDTWFwLmg6CisgICAgICAgIChKU0M6OldlYWtHQ01hcDo6aXRl
cmF0b3I6OmdldCk6CisgICAgICAgIChKU0M6OldlYWtHQ01hcDo6Y2xlYXIpOgorICAgICAgICAo
SlNDOjpXZWFrR0NNYXA6OnJlbW92ZSk6CisgICAgICAgIChKU0M6OldlYWtHQ01hcDo6YWRkKToK
KyAgICAgICAgKEpTQzo6V2Vha0dDTWFwOjpzZXQpOgorICAgICAgICAqIHRvb2xzL1Byb2ZpbGVU
cmVlTm9kZS5oOgorICAgICAgICAoUHJvZmlsZVRyZWVOb2RlKToKKyAgICAgICAgKEpTQzo6UHJv
ZmlsZVRyZWVOb2RlOjpzYW1wbGVDaGlsZCk6CisgICAgICAgIChKU0M6OlByb2ZpbGVUcmVlTm9k
ZTo6Y2hpbGRDb3VudCk6CisgICAgICAgIChKU0M6OlByb2ZpbGVUcmVlTm9kZTo6ZHVtcEludGVy
bmFsKToKKyAgICAgICAgKEpTQzo6UHJvZmlsZVRyZWVOb2RlOjpjb21wYXJlRW50cmllcyk6Cisg
ICAgICAgIE1hcEVudHJ5IGlzIHN1cHBvc2VkIHRvIGJlIGRlZmluZWQgYXMgdGhlIFZhbHVlVHlw
ZSBvZiB0aGUgSGFzaE1hcCAodHlwZQorICAgICAgICAiY29udGVudHMiIG9mIGl0ZXJhdG9ycywg
aW4gdGhpcyBjYXNlKS4gQ2hhbmdlIHRoZSBjb2RlIHRvIG1ha2UgdXNlIG9mCisgICAgICAgIEhh
c2hNYXA6OlZhbHVlVHlwZSBkaXJlY3RseSwgd2hpY2ggbm93IGlzIGEgSGFzaE1hcEVudHJ5IHR5
cGUuCisKIDIwMTItMDQtMDIgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEu
Y29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIEZpeCBtYWtlIGRpc3RjaGVjayBpc3N1ZXMuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmlu
ZGV4IGZkNDhmNzViMzRmYTQxNDIxN2RjNTBmMDM0ZGYxOTE1ODYyNDQ0MWQuLjY0OWM5ODJmYTQ1
NzU4OTFmMzVlZmVkZTY0ZjYzMGYxZmQ3NDk3YTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzMgQEAKKzIwMTIt
MDQtMDIgIENhaW8gTWFyY2VsbyBkZSBPbGl2ZWlyYSBGaWxobyAgPGNhaW8ub2xpdmVpcmFAb3Bl
bmJvc3NhLm9yZz4KKworICAgICAgICBSZW5hbWUgZmlyc3Qvc2Vjb25kIHRvIGtleS92YWx1ZSBp
biBIYXNoTWFwIGl0ZXJhdG9ycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9ODI3ODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBDaGFuZ2UgaW4gSGFzaE1hcCB0aGUgVmFsdWVUeXBlIGZyb20gc3RkOjpwYWly
IHRvIGEgbmV3IHNwZWNpYWxpemVkIHN0cnVjdAorICAgICAgICBIYXNoTWFwRW50cnkuIEluIEhh
c2hNYXAgdGhlIFZhbHVlVHlwZSBzZXJ2ZSBhcyAiY29udGVudHMiIG9mIHRoZSBpdGVyYXRvcnMu
CisgICAgICAgIFRoZSBkaWZmZXJlbmNlIGlzIHRoYXQgbm93IHRoZSBtZW1iZXJzIGFyZSBjYWxs
ZWQgJ2tleScgYW5kICd2YWx1ZScgaW5zdGVhZCBvZgorICAgICAgICAnZmlyc3QnIGFuZCAnc2Vj
b25kJy4gQWxzbyBhZGQgdGhlIGFwcHJvcHJpYXRlZCBIYXNoVHJhaXRzLgorCisgICAgICAgIFRo
ZSByZXN0IG9mIHRoZSBwYXRjaCBpcyBqdXN0IGNoYW5naW5nIHRoZSBjYWxsc2l0ZXMgdG8gdXNl
IHRoZSBuZXcgbmFtZXMuIE5vdGUKKyAgICAgICAgdGhhdCBIYXNoQ291bnRlZFNldCBleHBvc2Vz
IEhhc2hNYXAgaXRlcmF0b3JzIGFzIHRoZWlyIG93biwgc28gSGFzaENvdW50ZWRTZXQKKyAgICAg
ICAgaW50ZXJmYWNlIGlzIGFsc28gY2hhbmdlZC4KKworICAgICAgICAqIHd0Zi9IYXNoQ291bnRl
ZFNldC5oOgorICAgICAgICAoV1RGOjo6OmFkZCk6CisgICAgICAgIChXVEY6Ojo6cmVtb3ZlKToK
KyAgICAgICAgKFdURjo6Y29weVRvVmVjdG9yKToKKyAgICAgICAgKiB3dGYvSGFzaEl0ZXJhdG9y
cy5oOgorICAgICAgICAoSGFzaFRhYmxlQ29uc3RLZXlzSXRlcmF0b3IpOgorICAgICAgICAoV1RG
OjpIYXNoVGFibGVDb25zdEtleXNJdGVyYXRvcjo6Z2V0KToKKyAgICAgICAgKEhhc2hUYWJsZUNv
bnN0VmFsdWVzSXRlcmF0b3IpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGVDb25zdFZhbHVlc0l0
ZXJhdG9yOjpnZXQpOgorICAgICAgICAoSGFzaFRhYmxlS2V5c0l0ZXJhdG9yKToKKyAgICAgICAg
KFdURjo6SGFzaFRhYmxlS2V5c0l0ZXJhdG9yOjpnZXQpOgorICAgICAgICAoSGFzaFRhYmxlVmFs
dWVzSXRlcmF0b3IpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGVWYWx1ZXNJdGVyYXRvcjo6Z2V0
KToKKyAgICAgICAgKiB3dGYvSGFzaE1hcC5oOgorICAgICAgICAoV1RGOjpIYXNoTWFwRW50cnlL
ZXlFeHRyYWN0b3I6OmV4dHJhY3QpOgorICAgICAgICAoV1RGKToKKyAgICAgICAgKEhhc2hNYXAp
OgorICAgICAgICAoV1RGOjpIYXNoTWFwVHJhbnNsYXRvcjo6dHJhbnNsYXRlKToKKyAgICAgICAg
KFdURjo6SGFzaE1hcFRyYW5zbGF0b3JBZGFwdGVyOjp0cmFuc2xhdGUpOgorICAgICAgICAoV1RG
Ojo6OnNldCk6CisgICAgICAgIChXVEY6Ojo6Z2V0KToKKyAgICAgICAgKFdURjo6Ojp0YWtlKToK
KyAgICAgICAgKFdURjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXVEY6OmRlbGV0ZUFsbFBhaXJT
ZWNvbmRzKToKKyAgICAgICAgKFdURjo6ZGVsZXRlQWxsUGFpckZpcnN0cyk6CisgICAgICAgICog
d3RmL0hhc2hUYWJsZS5oOgorICAgICAgICAoV1RGOjpoYXNoVGFibGVTd2FwKToKKyAgICAgICAg
KFdURik6CisgICAgICAgIChXVEY6Ojo6Y2hlY2tUYWJsZUNvbnNpc3RlbmN5RXhjZXB0U2l6ZSk6
CisgICAgICAgICogd3RmL0hhc2hUcmFpdHMuaDoKKyAgICAgICAgKEhhc2hNYXBFbnRyeSk6Cisg
ICAgICAgIChXVEY6Okhhc2hNYXBFbnRyeTo6SGFzaE1hcEVudHJ5KToKKyAgICAgICAgKFdURik6
CisgICAgICAgIChIYXNoTWFwRW50cnlUcmFpdHMpOgorICAgICAgICAoV1RGOjpIYXNoTWFwRW50
cnlUcmFpdHM6OmVtcHR5VmFsdWUpOgorICAgICAgICAoV1RGOjpIYXNoTWFwRW50cnlUcmFpdHM6
OmNvbnN0cnVjdERlbGV0ZWRWYWx1ZSk6CisgICAgICAgIChXVEY6Okhhc2hNYXBFbnRyeVRyYWl0
czo6aXNEZWxldGVkVmFsdWUpOgorICAgICAgICAqIHd0Zi9NZXRhQWxsb2NhdG9yLmNwcDoKKyAg
ICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6YWRkRnJlZVNwYWNlKToKKyAgICAgICAgKFdURjo6
TWV0YUFsbG9jYXRvcjo6aW5jcmVtZW50UGFnZU9jY3VwYW5jeSk6CisgICAgICAgIChXVEY6Ok1l
dGFBbGxvY2F0b3I6OmRlY3JlbWVudFBhZ2VPY2N1cGFuY3kpOgorICAgICAgICAqIHd0Zi9SZWZD
b3VudGVkTGVha0NvdW50ZXIuY3BwOgorICAgICAgICAoV1RGOjpSZWZDb3VudGVkTGVha0NvdW50
ZXI6On5SZWZDb3VudGVkTGVha0NvdW50ZXIpOgorICAgICAgICAqIHd0Zi9SZWZQdHJIYXNoTWFw
Lmg6CisgICAgICAgIChXVEY6Ojo6c2V0KToKKyAgICAgICAgKFdURjo6OjpnZXQpOgorICAgICAg
ICAoV1RGOjo6OmlubGluZUdldCk6CisgICAgICAgIChXVEY6Ojo6dGFrZSk6CisgICAgICAgICog
d3RmL1NwZWN0cnVtLmg6CisgICAgICAgIChXVEY6OlNwZWN0cnVtOjphZGQpOgorICAgICAgICAo
V1RGOjpTcGVjdHJ1bTo6YnVpbGRMaXN0KToKKyAgICAgICAgKiB3dGYvVGhyZWFkaW5nUHRocmVh
ZHMuY3BwOgorICAgICAgICAoV1RGOjppZGVudGlmaWVyQnlQdGhyZWFkSGFuZGxlKToKKwogMjAx
Mi0wMy0zMCAgRGF2aWQgQmFyciAgPGRhdmlkYmFyckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
U3BsaXQgdXAgdG9wLWxldmVsIC5naXRpZ25vcmUgYW5kIC5naXRhdHRyaWJ1dGVzCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
aW5kZXggZmNjM2NhNjk2MjJkNDU5NDA3YzZhOTNjNmVmYjdkMDU2NjUzNzZhYi4uMDI2ZjQzNGJh
ZTk0MDdjYzgyMzUzOTlhZWQ5ZWE3OTY1ZDAxZjE1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc4
NiBAQAorMjAxMi0wNC0wMiAgQ2FpbyBNYXJjZWxvIGRlIE9saXZlaXJhIEZpbGhvICA8Y2Fpby5v
bGl2ZWlyYUBvcGVuYm9zc2Eub3JnPgorCisgICAgICAgIFJlbmFtZSBmaXJzdC9zZWNvbmQgdG8g
a2V5L3ZhbHVlIGluIEhhc2hNYXAgaXRlcmF0b3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Mjc4NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gZnVuY3Rpb25hbGl0eSBjaGFu
Z2UgaW50ZW5kZWQuCisKKyAgICAgICAgKiBNb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9u
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uOjpXYXRjaGVyczo6ZmluZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvbjo6V2F0Y2hlcnM6OnJlbW92ZSk6CisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpvYmplY3RTdG9yZU5hbWVzKToKKyAg
ICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SURCRmFjdG9yeUJhY2tlbmRJbXBsOjpkZWxldGVEYXRhYmFzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW5CYWNraW5nU3RvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6SURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuSW50ZXJuYWwp
OgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjppbmRleCk6CisgICAgICAgICogTW9kdWxlcy9p
bmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjppbmRleE5hbWVzKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dCk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJbnRlcm5hbCk6CisgICAgICAgICog
TW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SURCVHJhbnNhY3Rpb246Om9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5z
YWN0aW9uOjpkaXNwYXRjaEV2ZW50KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0Fi
c3RyYWN0RGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6
cGVyZm9ybU9wZW5BbmRWZXJpZnkpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0
YWJhc2VUcmFja2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6aW50
ZXJydXB0QWxsRGF0YWJhc2VzRm9yQ29udGV4dCk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRh
YmFzZS9PcmlnaW5Vc2FnZVJlY29yZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpPcmlnaW5Vc2Fn
ZVJlY29yZDo6ZGlza1VzYWdlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRy
YW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rp
b25Db29yZGluYXRvcjo6YWNxdWlyZUxvY2spOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNh
Y3Rpb25Db29yZGluYXRvcjo6cmVsZWFzZUxvY2spOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJh
bnNhY3Rpb25Db29yZGluYXRvcjo6c2h1dGRvd24pOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0
YWJhc2UvY2hyb21pdW0vRGF0YWJhc2VUcmFja2VyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RGF0YWJhc2VUcmFja2VyOjppbnRlcnJ1cHRBbGxEYXRhYmFzZXNGb3JDb250ZXh0KToK
KyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL1F1b3RhVHJhY2tlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpRdW90YVRyYWNrZXI6OmdldERhdGFiYXNlU2l6ZUFuZFNwYWNl
QXZhaWxhYmxlVG9PcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6UXVvdGFUcmFja2VyOjp1cGRh
dGVEYXRhYmFzZVNpemUpOgorICAgICAgICAqIE1vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRE
ZWZsYXRlRnJhbWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldEV4dGVuc2lvbkRl
ZmxhdGVGcmFtZTo6cHJvY2Vzc1Jlc3BvbnNlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYnNvY2tl
dHMvV2ViU29ja2V0RXh0ZW5zaW9uRGlzcGF0Y2hlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyOjphcHBlbmRBY2NlcHRlZEV4dGVuc2lvbik6Cisg
ICAgICAgICogYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkFYT2JqZWN0Q2FjaGU6On5BWE9iamVjdENhY2hlKToKKyAgICAgICAgKiBiaW5kaW5ncy9n
b2JqZWN0L0RPTU9iamVjdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RE9NT2JqZWN0Q2Fj
aGU6OmNsZWFyQnlGcmFtZSk6CisgICAgICAgICogYmluZGluZ3MvanMvRE9NT2JqZWN0SGFzaFRh
YmxlTWFwLmg6CisgICAgICAgIChXZWJDb3JlOjpET01PYmplY3RIYXNoVGFibGVNYXA6On5ET01P
YmplY3RIYXNoVGFibGVNYXApOgorICAgICAgICAoV2ViQ29yZTo6RE9NT2JqZWN0SGFzaFRhYmxl
TWFwOjpnZXQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0RPTVdyYXBwZXJXb3JsZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1N0cmluZ093bmVyOjpmaW5hbGl6ZSk6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNhY2hlRE9NU3Ry
dWN0dXJlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaDoKKyAgICAgICAg
KFdlYkNvcmU6OnVuY2FjaGVXcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzU3RyaW5nKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpKU0RPTUdsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OmdldERPTUNv
bnN0cnVjdG9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZVNjcmlwdERlYnVnU2VydmVyOjphZGRMaXN0ZW5l
cik6CisgICAgICAgIChXZWJDb3JlOjpQYWdlU2NyaXB0RGVidWdTZXJ2ZXI6OnJlbW92ZUxpc3Rl
bmVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDYWNoZWRGcmFtZURhdGEuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FjaGVkRnJhbWVEYXRhOjpTY3JpcHRDYWNoZWRGcmFt
ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FjaGVkRnJhbWVEYXRhOjpyZXN0b3Jl
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6On5TY3JpcHRDb250cm9sbGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmNsZWFyV2luZG93U2hlbGwpOgorICAgICAgICAo
V2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6YXR0YWNoRGVidWdnZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6U2NyaXB0Q29udHJvbGxlcjo6dXBkYXRlRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6U2NyaXB0Q29udHJvbGxlcjo6Y3JlYXRlUm9vdE9iamVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JpcHRDb250cm9sbGVyOjpjbGVhbnVwU2NyaXB0T2JqZWN0c0ZvclBsdWdpbik6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpjbGVhclNjcmlwdE9iamVjdHMpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlNjcmlwdENvbnRyb2xsZXI6OndpbmRvd1NoZWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlw
dENvbnRyb2xsZXI6OmV4aXN0aW5nV2luZG93U2hlbGwpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L1NjcmlwdERlYnVnU2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2Vy
dmVyOjpzZXRCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVy
OjpyZW1vdmVCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVy
OjpoYXNCcmVha3BvaW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0
VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVTZXJpYWxpemVyOjpzdGFydE9iamVj
dEludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lU2VyaWFsaXplcjo6ZHVtcElmVGVy
bWluYWwpOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVTZXJpYWxpemVyOjp3cml0ZSk6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06CisgICAgICAgIChHZW5l
cmF0ZUltcGxlbWVudGF0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgv
VjhGbG9hdDY0QXJyYXkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhGbG9hdDY0QXJyYXk6Okdl
dFJhd1RlbXBsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RmxvYXQ2NEFycmF5OjpHZXRUZW1w
bGF0ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEFjdGl2ZURP
TU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RBY3RpdmVET01PYmplY3Q6Okdl
dFJhd1RlbXBsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdEFjdGl2ZURPTU9iamVjdDo6
R2V0VGVtcGxhdGUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RD
dXN0b21OYW1lZEdldHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RDdXN0b21OYW1l
ZEdldHRlcjo6R2V0UmF3VGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0Q3VzdG9t
TmFtZWRHZXR0ZXI6OkdldFRlbXBsYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVjgvVjhUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOFRl
c3RFdmVudENvbnN0cnVjdG9yOjpHZXRSYXdUZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpW
OFRlc3RFdmVudENvbnN0cnVjdG9yOjpHZXRUZW1wbGF0ZSk6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50VGFyZ2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlY4VGVzdEV2ZW50VGFyZ2V0OjpHZXRSYXdUZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpW
OFRlc3RFdmVudFRhcmdldDo6R2V0VGVtcGxhdGUpOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9WOC9WOFRlc3RJbnRlcmZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0
SW50ZXJmYWNlOjpHZXRSYXdUZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RJbnRl
cmZhY2U6OkdldFRlbXBsYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgv
VjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOFRl
c3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjpHZXRSYXdUZW1wbGF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpWOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjpHZXRUZW1wbGF0ZSk6CisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6VjhUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6R2V0UmF3VGVtcGxhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6R2V0VGVtcGxhdGUp
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VjhUZXN0T2JqOjpHZXRSYXdUZW1wbGF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpWOFRlc3RPYmo6OkdldFRlbXBsYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlY4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6R2V0UmF3
VGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlOjpHZXRUZW1wbGF0ZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvTlBWOE9iamVj
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmcmVlVjhOUE9iamVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpucENyZWF0ZVY4U2NyaXB0T2JqZWN0KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3Jp
cHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmNs
ZWFyU2NyaXB0T2JqZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpj
bGVhbnVwU2NyaXB0T2JqZWN0c0ZvclBsdWdpbik6CisgICAgICAgICogYmluZGluZ3MvdjgvU2Vy
aWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOERPTU1hcC5o
OgorICAgICAgICAoV2ViQ29yZTo6V2Vha1JlZmVyZW5jZU1hcDo6cmVtb3ZlSWZQcmVzZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OldlYWtSZWZlcmVuY2VNYXA6OnZpc2l0KToKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9N
V2luZG93U2hlbGw6OmRpc3Bvc2VDb250ZXh0SGFuZGxlcyk6CisgICAgICAgICogYmluZGluZ3Mv
djgvVjhHQ0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZW51bWVyYXRlR2xvYmFs
SGFuZGxlcyk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhQcm94eS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpWOFByb3h5OjpldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCk6CisgICAgICAgIChXZWJD
b3JlOjpWOFByb3h5OjpzZXRJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4pOgorICAgICAgICAo
V2ViQ29yZTo6VjhQcm94eTo6cmVzZXRJc29sYXRlZFdvcmxkcyk6CisgICAgICAgICogYmluZGlu
Z3MvdjgvbnBydW50aW1lLmNwcDoKKyAgICAgICAgKiBicmlkZ2UvSWRlbnRpZmllclJlcC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJZGVudGlmaWVyUmVwOjpnZXQpOgorICAgICAgICAqIGJyaWRn
ZS9OUF9qc29iamVjdC5jcHA6CisgICAgICAgIChPYmplY3RNYXA6OmFkZCk6CisgICAgICAgIChP
YmplY3RNYXA6OnJlbW92ZSk6CisgICAgICAgICogYnJpZGdlL2puaS9qc2MvSmF2YUNsYXNzSlND
LmNwcDoKKyAgICAgICAgKEphdmFDbGFzczo6fkphdmFDbGFzcyk6CisgICAgICAgICogYnJpZGdl
L3J1bnRpbWVfcm9vdC5jcHA6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpSb290T2JqZWN0Ojpp
bnZhbGlkYXRlKToKKyAgICAgICAgKiBjc3MvQ1NTQ2FudmFzVmFsdWUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTQ2FudmFzVmFsdWU6OmNhbnZhc0NoYW5nZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTQ2FudmFzVmFsdWU6OmNhbnZhc1Jlc2l6ZWQpOgorICAgICAgICAqIGNzcy9DU1NDb21w
dXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y291bnRlclRvQ1NT
VmFsdWUpOgorICAgICAgICAqIGNzcy9DU1NDcm9zc2ZhZGVWYWx1ZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NDcm9zc2ZhZGVWYWx1ZTo6Y3Jvc3NmYWRlQ2hhbmdlZCk6CisgICAgICAgICog
Y3NzL0NTU0ZvbnRGYWNlU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNl
U291cmNlOjpnZXRGb250RGF0YSk6CisgICAgICAgICogY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250U2VsZWN0b3I6OmFkZEZvbnRGYWNlUnVsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NGb250U2VsZWN0b3I6OmdldEZvbnREYXRhKToKKyAgICAgICAg
KiBjc3MvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NJ
bWFnZUdlbmVyYXRvclZhbHVlOjphZGRDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTSW1h
Z2VHZW5lcmF0b3JWYWx1ZTo6cmVtb3ZlQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0lt
YWdlR2VuZXJhdG9yVmFsdWU6OmdldEltYWdlKToKKyAgICAgICAgKiBjc3MvQ1NTU2VnbWVudGVk
Rm9udEZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU2VnbWVudGVkRm9udEZhY2U6Omdl
dEZvbnREYXRhKToKKyAgICAgICAgKiBjc3MvQ1NTU2VsZWN0b3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTU2VsZWN0b3I6OnBhcnNlUHNldWRvVHlwZSk6CisgICAgICAgICogY3NzL0NTU1N0
eWxlQXBwbHlQcm9wZXJ0eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Q291
bnRlcjo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0
eUNvdW50ZXI6OmFwcGx5VmFsdWUpOgorICAgICAgICAqIGNzcy9DU1NTdHlsZVNlbGVjdG9yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmNvbGxlY3RGZWF0dXJlcyk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpydWxlU2V0Rm9yU2NvcGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6YXBwZW5kQXV0aG9yU3R5bGVzaGVl
dHMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6c3dlZXBNYXRjaGVkUHJv
cGVydGllc0NhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmNvbGxl
Y3RNYXRjaGluZ1J1bGVzRm9yTGlzdCk6CisgICAgICAgICogY3NzL0NTU1ZhbHVlUG9vbC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDU1NWYWx1ZVBvb2w6OmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NWYWx1ZVBvb2w6OmNyZWF0ZUNvbG9yVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTVmFsdWVQb29sOjpjcmVhdGVWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NWYWx1ZVBvb2w6OmNyZWF0ZUZvbnRGYW1pbHlWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NWYWx1ZVBvb2w6OmNyZWF0ZUZvbnRGYWNlVmFsdWUpOgorICAgICAgICAqIGNzcy9T
dHlsZVByb3BlcnR5U2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUHJvcGVydHlTZXQ6
OlN0eWxlUHJvcGVydHlTZXQpOgorICAgICAgICAqIGRvbS9DaGVja2VkUmFkaW9CdXR0b25zLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNoZWNrZWRSYWRpb0J1dHRvbnM6OmFkZEJ1dHRvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpDaGVja2VkUmFkaW9CdXR0b25zOjpyZW1vdmVCdXR0b24pOgorICAg
ICAgICAqIGRvbS9DaGlsZExpc3RNdXRhdGlvblNjb3BlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVyOjpjaGls
ZEFkZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0
aW9uQWNjdW11bGF0aW9uUm91dGVyOjp3aWxsUmVtb3ZlQ2hpbGQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXI6Omlu
Y3JlbWVudFNjb3BpbmdMZXZlbCk6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RNdXRhdGlv
blNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlcjo6ZGVjcmVtZW50U2NvcGluZ0xldmVs
KToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnQ6OnBhZ2VHcm91cFVzZXJTaGVldHMpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6Ondp
bmRvd05hbWVkSXRlbXMpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmRvY3VtZW50TmFt
ZWRJdGVtcyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2V0U3RhdGVGb3JOZXdGb3Jt
RWxlbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnRha2VTdGF0ZUZvckZvcm1F
bGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpnZXRDU1NDYW52YXNFbGVtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpnZXRJdGVtcyk6CisgICAgICAgICogZG9t
L0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVu
dE1hcmtlckNvbnRyb2xsZXI6Om1hcmtlckNvbnRhaW5pbmdQb2ludCk6CisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbmRlcmVkUmVjdHNGb3JNYXJrZXJzKToK
KyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVtb3ZlTWFya2Vy
cyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlcGFpbnRN
YXJrZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6aW52
YWxpZGF0ZVJlbmRlcmVkUmVjdHNGb3JNYXJrZXJzSW5SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6c2hvd01hcmtlcnMpOgorICAgICAgICAqIGRvbS9E
b2N1bWVudE9yZGVyZWRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRPcmRlcmVk
TWFwOjpyZW1vdmUpOgorICAgICAgICAqIGRvbS9FdmVudExpc3RlbmVyTWFwLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50TGlzdGVuZXJNYXA6OmV2ZW50VHlwZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6RXZlbnRMaXN0ZW5lck1hcDo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50TGlz
dGVuZXJNYXA6OnJlbW92ZSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudExpc3RlbmVyTWFwOjpm
aW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50TGlzdGVuZXJNYXA6OnJlbW92ZUZpcnN0RXZl
bnRMaXN0ZW5lckNyZWF0ZWRGcm9tTWFya3VwKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50TGlz
dGVuZXJNYXA6OmNvcHlFdmVudExpc3RlbmVyc05vdENyZWF0ZWRGcm9tTWFya3VwVG9UYXJnZXQp
OgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRMaXN0ZW5lckl0ZXJhdG9yOjpuZXh0TGlzdGVuZXIp
OgorICAgICAgICAqIGRvbS9NdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpNdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cDo6aXNPbGRWYWx1ZVJl
cXVlc3RlZCk6CisgICAgICAgIChXZWJDb3JlOjpNdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91
cDo6ZW5xdWV1ZU11dGF0aW9uUmVjb3JkKToKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpOb2RlOjpkdW1wU3RhdGlzdGljcyk6CisgICAgICAgIChXZWJDb3JlOjpO
b2RlOjpjbGVhclJhcmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmdldEVsZW1lbnRz
QnlUYWdOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmdldEVsZW1lbnRzQnlUYWdOYW1l
TlMpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Z2V0RWxlbWVudHNCeU5hbWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Tm9kZTo6Z2V0RWxlbWVudHNCeUNsYXNzTmFtZSk6CisgICAgICAgIChXZWJD
b3JlOjpOb2RlTGlzdHNOb2RlRGF0YTo6aW52YWxpZGF0ZUNhY2hlcyk6CisgICAgICAgIChXZWJD
b3JlOjpOb2RlTGlzdHNOb2RlRGF0YTo6aW52YWxpZGF0ZUNhY2hlc1RoYXREZXBlbmRPbkF0dHJp
YnV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Y29sbGVjdE1hdGNoaW5nT2JzZXJ2ZXJz
Rm9yTXV0YXRpb24pOgorICAgICAgICAqIGRvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UHJvY2Vzc2luZ0luc3RydWN0aW9uOjpjaGVja1N0eWxlU2hlZXQp
OgorICAgICAgICAqIGRvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OmNhblN1c3BlbmRBY3RpdmVET01PYmplY3Rz
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnN1c3BlbmRBY3Rp
dmVET01PYmplY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6
OnJlc3VtZUFjdGl2ZURPTU9iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0
aW9uQ29udGV4dDo6c3RvcEFjdGl2ZURPTU9iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
aXB0RXhlY3V0aW9uQ29udGV4dDo6YWRqdXN0TWluaW11bVRpbWVySW50ZXJ2YWwpOgorICAgICAg
ICAqIGRvbS9TcGFjZVNwbGl0U3RyaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNwYWNlU3Bs
aXRTdHJpbmdEYXRhOjpjcmVhdGUpOgorICAgICAgICAqIGRvbS9TdHlsZWRFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlZEVsZW1lbnQ6OnVwZGF0ZUF0dHJpYnV0ZVN0eWxlKToK
KyAgICAgICAgKiBodG1sL0hUTUxDb2xsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxDb2xsZWN0aW9uOjphcHBlbmQpOgorICAgICAgICAqIGluc3BlY3Rvci9Db2RlR2VuZXJhdG9y
SW5zcGVjdG9yLnB5OgorICAgICAgICAqIGluc3BlY3Rvci9ET01QYXRjaFN1cHBvcnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RE9NUGF0Y2hTdXBwb3J0OjpkaWZmKToKKyAgICAgICAgKFdlYkNv
cmU6OkRPTVBhdGNoU3VwcG9ydDo6aW5uZXJQYXRjaENoaWxkcmVuKToKKyAgICAgICAgKFdlYkNv
cmU6OkRPTVBhdGNoU3VwcG9ydDo6cmVtb3ZlQ2hpbGRBbmRNb3ZlVG9OZXcpOgorICAgICAgICAq
IGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjpkaXNjYXJkSW5qZWN0ZWRTY3JpcHRzKToKKyAgICAgICAg
KFdlYkNvcmU6OkluamVjdGVkU2NyaXB0TWFuYWdlcjo6ZGlzY2FyZEluamVjdGVkU2NyaXB0c0Zv
cik6CisgICAgICAgIChXZWJDb3JlOjpJbmplY3RlZFNjcmlwdE1hbmFnZXI6OnJlbGVhc2VPYmpl
Y3RHcm91cCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjplbmFibGUpOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JDU1NBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvclByb2Zp
bGU6OmNvbW1pdFNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yUHJvZmlsZTo6
Y29tbWl0U2VsZWN0b3JUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yUHJvZmlsZTo6
dG9JbnNwZWN0b3JPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6
OmFzSW5zcGVjdG9yU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NB
Z2VudDo6YXNzZXJ0U3R5bGVTaGVldEZvcklkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckNTU0FnZW50OjpkaWRSZW1vdmVET01Ob2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckNTU0FnZW50OjpkaWRNb2RpZnlET01BdHRyKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVj
dG9yQ29uc29sZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnNvbGVB
Z2VudDo6c3RvcFRpbWluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb25zb2xlQWdl
bnQ6OmNvdW50KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6Om5vZGVGb3JJZCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6cGVyZm9ybVNlYXJjaCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6Z2V0U2VhcmNoUmVzdWx0cyk6CisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6d2lsbFNlbmRYTUxIdHRwUmVxdWVzdCk6Cisg
ICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmNsZWFyRnJvbnRlbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjplbmFibGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpzdG9yYWdlSWQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpnZXRET01TdG9yYWdlUmVzb3Vy
Y2VGb3JJZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmRp
ZFVzZURPTVN0b3JhZ2UpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFn
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmVuYWJs
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjpkYXRhYmFzZUlk
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmZpbmRCeUZpbGVO
YW1lKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmRhdGFiYXNl
Rm9ySWQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnRC
eVVybCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZW1vdmVC
cmVha3BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnJl
c29sdmVCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ6OnNlYXJjaEluQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50OjpnZXRTY3JpcHRTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVi
dWdnZXJBZ2VudDo6ZGlkUGFyc2VTb3VyY2UpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0
b3JNZW1vcnlBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2Vu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjYWNoZWRSZXNvdXJjZXNGb3JGcmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6OmRpZENsZWFyV2luZG93T2JqZWN0SW5X
b3JsZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6OmZyYW1lRGV0YWNo
ZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmdldFByb2ZpbGVIZWFkZXJz
KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUHJvZmls
ZXJBZ2VudDo6Z2V0UHJvZmlsZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclJlc291
cmNlQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRPYmplY3RGb3JIZWFkZXJzKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlc291cmNlQWdlbnQ6OndpbGxTZW5kUmVxdWVz
dCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvclN0YXRlOjpnZXRCb29sZWFuKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvclN0YXRlOjpnZXRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3Rh
dGU6OmdldExvbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3RhdGU6OmdldERvdWJs
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdGF0ZTo6Z2V0T2JqZWN0KToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JTdHlsZTo6c3R5bGVXaXRoUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JTdHlsZVNoZWV0OjppbnNwZWN0b3JTdHlsZUZvcklkKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXQ6OmVuc3VyZVNvdXJjZURhdGEpOgorICAgICAgICAq
IGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yT2JqZWN0OjpnZXQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT2JqZWN0Ojp3cml0
ZUpTT04pOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JXb3JrZXJBZ2VudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JXb3JrZXJBZ2VudDo6d29ya2VyQ29udGV4dFRlcm1p
bmF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yV29ya2VyQWdlbnQ6OmNyZWF0ZVdv
cmtlckZyb250ZW5kQ2hhbm5lbHNGb3JFeGlzdGluZ1dvcmtlcnMpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yV29ya2VyQWdlbnQ6OmRlc3Ryb3lXb3JrZXJGcm9udGVuZENoYW5uZWxzKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvTmV0d29ya1Jlc291cmNlc0RhdGEuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TmV0d29ya1Jlc291cmNlc0RhdGE6OmNsZWFyKToKKyAgICAgICAgKiBsb2FkZXIv
Q3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzU2ltcGxl
Q3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUFjY2Vz
c0NvbnRyb2xQcmVmbGlnaHRSZXF1ZXN0KToKKyAgICAgICAgKiBsb2FkZXIvQ3Jvc3NPcmlnaW5Q
cmVmbGlnaHRSZXN1bHRDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcm9zc09yaWdpblBy
ZWZsaWdodFJlc3VsdENhY2hlSXRlbTo6YWxsb3dzQ3Jvc3NPcmlnaW5IZWFkZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGU6OmNhblNraXBQcmVm
bGlnaHQpOgorICAgICAgICAqIGxvYWRlci9Eb2N1bWVudExvYWRlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6Z2V0U3VicmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50TG9hZGVyOjpzdWJzdGl0dXRlUmVzb3VyY2VEZWxpdmVyeVRpbWVyRmlyZWQp
OgorICAgICAgICAqIGxvYWRlci9NYWluUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6TWFpblJlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAq
IGxvYWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVz
b3VyY2VMb2FkU2NoZWR1bGVyOjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyk6CisgICAgICAgICogbG9h
ZGVyL1N1YmZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN1YmZyYW1lTG9hZGVy
OjpjcmVhdGVKYXZhQXBwbGV0V2lkZ2V0KToKKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBw
bGljYXRpb25DYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlOjpy
ZW1vdmVSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlOjpjbGVh
clN0b3JhZ2VJRCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlOjpkdW1wKToK
KyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6ZGlkRmluaXNoTG9hZGluZ01h
bmlmZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6c3RhcnRM
b2FkaW5nRW50cnkpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUdyb3VwOjph
ZGRFbnRyeSk6CisgICAgICAgICogbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVIb3N0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpmaWxsUmVzb3Vy
Y2VMaXN0KToKKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVJlc291
cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6ZXN0
aW1hdGVkU2l6ZUluU3RvcmFnZSk6CisgICAgICAgICogbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0
aW9uQ2FjaGVTdG9yYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVT
dG9yYWdlOjpmaW5kT3JDcmVhdGVDYWNoZUdyb3VwKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxp
Y2F0aW9uQ2FjaGVTdG9yYWdlOjpjYWNoZUdyb3VwRm9yVVJMKToKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpmYWxsYmFja0NhY2hlR3JvdXBGb3JVUkwpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjplbXB0eSk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmVDb3B5T2ZDYWNoZSk6CisgICAgICAg
ICogbG9hZGVyL2FyY2hpdmUvQXJjaGl2ZUZhY3RvcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
QXJjaGl2ZUZhY3Rvcnk6OnJlZ2lzdGVyS25vd25BcmNoaXZlTUlNRVR5cGVzKToKKyAgICAgICAg
KiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q2FjaGVkUmF3UmVzb3VyY2U6OmNhblJldXNlKToKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2Fj
aGVkUmVzb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2U6OnN3aXRj
aENsaWVudHNUb1JldmFsaWRhdGVkUmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVk
UmVzb3VyY2U6OnVwZGF0ZVJlc3BvbnNlQWZ0ZXJSZXZhbGlkYXRpb24pOgorICAgICAgICAqIGxv
YWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlci5oOgorICAgICAgICAoV2ViQ29y
ZTo6Q2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXI6OkNhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2Vy
KToKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6On5DYWNoZWRSZXNvdXJjZUxvYWRl
cik6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVzdFJlc291
cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlTG9hZGVyOjpzZXRBdXRvTG9h
ZEltYWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVtb3Zl
Q2FjaGVkUmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6
OmdhcmJhZ2VDb2xsZWN0RG9jdW1lbnRSZXNvdXJjZXNUaW1lckZpcmVkKToKKyAgICAgICAgKiBs
b2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVtb3J5Q2Fj
aGU6OnJlbW92ZVJlc291cmNlc1dpdGhPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6TWVtb3J5
Q2FjaGU6OmdldE9yaWdpbnNXaXRoQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVtb3J5Q2Fj
aGU6OmdldFN0YXRpc3RpY3MpOgorICAgICAgICAoV2ViQ29yZTo6TWVtb3J5Q2FjaGU6OnNldERp
c2FibGVkKToKKyAgICAgICAgKiBsb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SWNvbkRhdGFiYXNlOjpyZW1vdmVBbGxJY29ucyk6CisgICAgICAgIChXZWJD
b3JlOjpJY29uRGF0YWJhc2U6Omljb25SZWNvcmRDb3VudFdpdGhEYXRhKToKKyAgICAgICAgKiBw
YWdlL0RPTVdpbmRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01XaW5kb3c6OmRpc3BhdGNo
QWxsUGVuZGluZ0JlZm9yZVVubG9hZEV2ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpET01XaW5k
b3c6OmRpc3BhdGNoQWxsUGVuZGluZ1VubG9hZEV2ZW50cyk6CisgICAgICAgICogcGFnZS9FdmVu
dEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpoYW5kbGVUb3Vj
aEV2ZW50KToKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lOjppbmplY3RVc2VyU2NyaXB0cyk6CisgICAgICAgICogcGFnZS9QYWdlR3JvdXAuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UGFnZUdyb3VwOjpwYWdlR3JvdXApOgorICAgICAgICAoV2ViQ29y
ZTo6UGFnZUdyb3VwOjpjbG9zZUxvY2FsU3RvcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpQYWdl
R3JvdXA6OmNsZWFyTG9jYWxTdG9yYWdlRm9yQWxsT3JpZ2lucyk6CisgICAgICAgIChXZWJDb3Jl
OjpQYWdlR3JvdXA6OmNsZWFyTG9jYWxTdG9yYWdlRm9yT3JpZ2luKToKKyAgICAgICAgKFdlYkNv
cmU6OlBhZ2VHcm91cDo6c3luY0xvY2FsU3RvcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpQYWdl
R3JvdXA6OmFkZFVzZXJTY3JpcHRUb1dvcmxkKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VHcm91
cDo6YWRkVXNlclN0eWxlU2hlZXRUb1dvcmxkKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VHcm91
cDo6cmVtb3ZlVXNlclNjcmlwdEZyb21Xb3JsZCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlR3Jv
dXA6OnJlbW92ZVVzZXJTdHlsZVNoZWV0RnJvbVdvcmxkKToKKyAgICAgICAgKiBwYWdlL1BhZ2VT
ZXJpYWxpemVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VTZXJpYWxpemVyOjp1cmxGb3JC
bGFua0ZyYW1lKToKKyAgICAgICAgKiBwYWdlL1NlY3VyaXR5UG9saWN5LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNlY3VyaXR5UG9saWN5OjphZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeSk6
CisgICAgICAgIChXZWJDb3JlOjpTZWN1cml0eVBvbGljeTo6cmVtb3ZlT3JpZ2luQWNjZXNzV2hp
dGVsaXN0RW50cnkpOgorICAgICAgICAqIHBhZ2UvU2V0dGluZ3MuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6c2V0R2VuZXJpY0ZvbnRGYW1pbHlNYXApOgorICAgICAgICAoV2ViQ29yZTo6Z2V0R2Vu
ZXJpY0ZvbnRGYW1pbHlGb3JTY3JpcHQpOgorICAgICAgICAqIHBhZ2UvU3BlZWNoSW5wdXQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U3BlZWNoSW5wdXQ6OnJlZ2lzdGVyTGlzdGVuZXIpOgorICAg
ICAgICAqIHBhZ2UvV2luZG93RmVhdHVyZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2luZG93
RmVhdHVyZXM6OmJvb2xGZWF0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OldpbmRvd0ZlYXR1cmVz
OjpmbG9hdEZlYXR1cmUpOgorICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRy
b2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6
OnVwZGF0ZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQ29udHJvbGxl
clByaXZhdGU6OnN1c3BlbmRBbmltYXRpb25zRm9yRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnJlc3VtZUFuaW1hdGlvbnNGb3JEb2N1bWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6bnVtYmVy
T2ZBY3RpdmVBbmltYXRpb25zKToKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVB
bmltYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjpjbGVh
clJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRl
VHJhbnNpdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjp1cGRh
dGVLZXlmcmFtZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0
aW9uOjphbmltYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlvbjo6Z2V0
QW5pbWF0ZWRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb246OnNl
dEFuaW1hdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb246OnRpbWVU
b05leHRTZXJ2aWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlvbjo6Z2V0
QW5pbWF0aW9uRm9yUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0
aW9uOjpzdXNwZW5kQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmlt
YXRpb246OnJlc3VtZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5p
bWF0aW9uOjpvdmVycmlkZUltcGxpY2l0QW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpD
b21wb3NpdGVBbmltYXRpb246OnJlc3VtZU92ZXJyaWRkZW5JbXBsaWNpdEFuaW1hdGlvbnMpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjppc0FuaW1hdGluZ1Byb3BlcnR5
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlvbjo6bnVtYmVyT2ZBY3RpdmVB
bmltYXRpb25zKToKKyAgICAgICAgKiBwbGF0Zm9ybS9MYW5ndWFnZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpsYW5ndWFnZURpZENoYW5nZSk6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vSFJU
RkVsZXZhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRDb25jYXRlbmF0ZWRJbXB1bHNl
UmVzcG9uc2VzRm9yU3ViamVjdCk6CisgICAgICAgICogcGxhdGZvcm0vYmxhY2tiZXJyeS9Db29r
aWVNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZU1hbmFnZXI6OmdlbmVyYXRl
SHRtbEZyYWdtZW50Rm9yQ29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVNYW5hZ2Vy
OjpyZW1vdmVBbGxDb29raWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ibGFja2JlcnJ5L0Nvb2tp
ZU1hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVNYXA6OnJlbW92ZU9sZGVzdENvb2tp
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVNYXA6OmdldEFsbENoaWxkQ29va2llcyk6Cisg
ICAgICAgICogcGxhdGZvcm0vY2YvQmluYXJ5UHJvcGVydHlMaXN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkJpbmFyeVByb3BlcnR5TGlzdFBsYW46OndyaXRlSW50ZWdlckFycmF5KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYkhUVFBMb2FkSW5mby5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OmFkZEhlYWRlcik6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vc3Vw
cG9ydC9XZWJVUkxSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMUmVxdWVzdDo6
dmlzaXRIVFRQSGVhZGVyRmllbGRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9zdXBw
b3J0L1dlYlVSTFJlc3BvbnNlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMUmVzcG9uc2U6
OmFkZEhUVFBIZWFkZXJGaWVsZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFJlc3BvbnNlOjp2
aXNpdEhUVFBIZWFkZXJGaWVsZHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRD
YWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldENhY2hlZEZvbnRQbGF0
Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRDYWNoZWRGb250RGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnJlbGVhc2VGb250RGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlVHJlZU5vZGUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6R2x5cGhQYWdlVHJlZU5vZGU6OnRyZWVHbHlwaFBhZ2VDb3VudCk6CisgICAgICAgIChX
ZWJDb3JlOjpHbHlwaFBhZ2VUcmVlTm9kZTo6cGFnZUNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkdseXBoUGFnZVRyZWVOb2RlOjpwcnVuZVRyZWVDdXN0b21Gb250RGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpHbHlwaFBhZ2VUcmVlTm9kZTo6cHJ1bmVUcmVlRm9udERhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6R2x5cGhQYWdlVHJlZU5vZGU6OnBydW5lQ3VzdG9tRm9udERhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6R2x5cGhQYWdlVHJlZU5vZGU6OnBydW5lRm9udERhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6R2x5cGhQYWdlVHJlZU5vZGU6OnNob3dTdWJ0cmVlKToKKyAgICAgICAgKHNob3dH
bHlwaFBhZ2VUcmVlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5n
U3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRCYWNraW5nU3RvcmU6OnVwZGF0ZVRp
bGVCdWZmZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkQmFja2luZ1N0b3JlOjpyZXNpemVF
ZGdlVGlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRCYWNraW5nU3RvcmU6OnNldEtlZXBS
ZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vY2YvTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0YuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QVZGV3Jh
cHBlcjo6YXZmV3JhcHBlckZvckNhbGxiYWNrQ29udGV4dCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclRpbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyVGlsZXI6OnVwbG9hZFRleHR1cmVzSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJUaWxlcjo6YWRkVGlsZUpvYik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyOjpiaW5k
Q29udGVudHNUZXh0dXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGlj
c0xheWVyQ0EuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjptb3ZlT3JD
b3B5QW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnBhdXNl
QW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6bGF5ZXJEaWRE
aXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlR2VvbWV0
cnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjp1cGRhdGVUcmFuc2Zvcm0p
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjp1cGRhdGVDaGlsZHJlblRyYW5z
Zm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZU1hc2tzVG9C
b3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjp1cGRhdGVDb250ZW50
c1Zpc2liaWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjp1cGRhdGVD
b250ZW50c09wYXF1ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnVwZGF0
ZUJhY2tmYWNlVmlzaWJpbGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6
OnVwZGF0ZUZpbHRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjplbnN1
cmVTdHJ1Y3R1cmFsTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjp1
cGRhdGVMYXllckRyYXdzQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVy
Q0E6OnVwZGF0ZUNvbnRlbnRzSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXll
ckNBOjp1cGRhdGVDb250ZW50c1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXll
ckNBOjp1cGRhdGVNYXNrTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNB
Ojp1cGRhdGVMYXllckFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXll
ckNBOjpzZXRBbmltYXRpb25PbkxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXJDQTo6cmVtb3ZlQ0FBbmltYXRpb25Gcm9tTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllckNBOjpwYXVzZUNBQW5pbWF0aW9uT25MYXllcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0xheWVyQ0E6OnN1c3BlbmRBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJDQTo6cmVzdW1lQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0xheWVyQ0E6OmZpbmRPck1ha2VDbG9uZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0xheWVyQ0E6OnNldE9wYWNpdHlJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0xheWVyQ0E6OnVwZGF0ZU9wYWNpdHlPbkxheWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jYS9tYWMvVGlsZUNhY2hlLm1tOgorICAgICAgICAoV2ViQ29yZTo6VGlsZUNhY2hl
OjpzZXRTY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlQ2FjaGU6OnNldEFjY2VsZXJhdGVz
RHJhd2luZyk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlQ2FjaGU6OnNldFRpbGVEZWJ1Z0JvcmRl
cldpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVDYWNoZTo6c2V0VGlsZURlYnVnQm9yZGVy
Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZUNhY2hlOjpyZXZhbGlkYXRlVGlsZXMpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3Bw
OgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyOjphbmltYXRpb25TdGFydGVkKToKKyAgICAgICAg
KHJlc3VibWl0QWxsQW5pbWF0aW9ucyk6CisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXI6OmFuaW1h
dGlvbkZvcktleSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENh
Y2hlQ2hyb21pdW1XaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TG9va3VwQWx0TmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpmb250Q29udGFpbnNDaGFyYWN0ZXIpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRVdGlsc0Nocm9taXVtV2luLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmdldERlcml2ZWRGb250RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6bWFwQW5pbWF0aW9uTmFtZVRvSWQpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYW5hZ2VyOjpyZWxlYXNlVG9rZW4pOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dHVyZU1hbmFnZXI6OnVucHJvdGVjdFRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hbmFnZXI6OnVucHJvdGVjdEFsbFRleHR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYW5hZ2VyOjphbGxvY2F0ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dHVyZU1hbmFnZXI6OnJlcXVlc3RUZXh0dXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGls
ZWRMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKToKKyAgICAgICAgKFdlYkNvcmU6OlRp
bGVkTGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJUcmVlSG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpU
aWxlZExheWVyQ2hyb21pdW06OmludmFsaWRhdGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRp
bGVkTGF5ZXJDaHJvbWl1bTo6cmVzZXRVcGRhdGVTdGF0ZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1hZ2VUcmFja2VyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNDRGFtYWdlVHJhY2tlcjo6dHJhY2tEYW1hZ2VGcm9tTGVmdG92ZXJSZWN0cyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRpbGluZ0RhdGEuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRpbGluZ0RhdGE6OnNldEJvdW5kcyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6c3RhcnRSYXRlTGltaXRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnN0b3BSYXRlTGltaXRlcik6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJQcm9ncmFtLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUZpbHRlclByb2dyYW06Om5vdGlmeUNsaWVudHMpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9HTENvbnRleHRHdGsuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6R0xDb250ZXh0OjpnZXRDb250ZXh0Rm9yV2lkZ2V0KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNraWEuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Z2V0Q2FjaGVkSGFyZmJ1enpGYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OnJlbGVhc2VD
YWNoZWRIYXJmYnV6ekZhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21w
bGV4VGV4dENvbnRyb2xsZXJBVFNVSS5jcHA6CisgICAgICAgIChXZWJDb3JlOjppbml0aWFsaXpl
QVRTVVN0eWxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERh
dGFDb3JlVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6Z2V0Q0ZT
dHJpbmdBdHRyaWJ1dGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxl
Rm9udERhdGFNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6cGxhdGZv
cm1EZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpjYW5SZW5kZXJD
b21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjb21waWxlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6Z2V0U2hhZGVySW5mb0xvZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6Z2V0U2hhZGVyU291cmNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyQW5pbWF0aW9uczo6aGFzQWN0aXZlQW5pbWF0aW9uc09mVHlwZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQW5pbWF0aW9uczo6aGFzUnVubmluZ0FuaW1h
dGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckFuaW1hdGlvbnM6OnBhdXNl
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJBbmltYXRpb25zOjphcHBseSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFyZWRHTERhdGE6OmN1cnJl
bnRTaGFyZWRHTERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMRGF0YTo6
U2hhcmVkR0xEYXRhOjp+U2hhcmVkR0xEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpnZXRTaGFkZXJQcm9ncmFtKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250UGxhdGZvcm1EYXRhLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZpeGVkU2l6ZUZvbnREYXRhOjpjcmVhdGUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2d0ay9EYXRhT2JqZWN0R3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFPYmplY3RHdGs6
OmZvckNsaXBib2FyZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL0d0a0RyYWdBbmREcm9wSGVs
cGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okd0a0RyYWdBbmREcm9wSGVscGVyOjpoYW5kbGVH
ZXREcmFnRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHdGtEcmFnQW5kRHJvcEhlbHBlcjo6aGFu
ZGxlRHJhZ0xlYXZlKToKKyAgICAgICAgKFdlYkNvcmU6Okd0a0RyYWdBbmREcm9wSGVscGVyOjpo
YW5kbGVEcmFnTW90aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Okd0a0RyYWdBbmREcm9wSGVscGVy
OjpoYW5kbGVEcmFnRGF0YVJlY2VpdmVkKToKKyAgICAgICAgKFdlYkNvcmU6Okd0a0RyYWdBbmRE
cm9wSGVscGVyOjpoYW5kbGVEcmFnRHJvcCk6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL1JlbmRl
clRoZW1lR3RrMy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpndGtTdHlsZUNoYW5nZWRDYWxsYmFj
ayk6CisgICAgICAgIChXZWJDb3JlOjpnZXRTdHlsZUNvbnRleHQpOgorICAgICAgICAqIHBsYXRm
b3JtL21hYy9TY3JvbGxiYXJUaGVtZU1hYy5tbToKKyAgICAgICAgKCtbV2ViU2Nyb2xsYmFyUHJl
ZnNPYnNlcnZlciBhcHBlYXJhbmNlUHJlZnNDaGFuZ2VkOl0pOgorICAgICAgICAqIHBsYXRmb3Jt
L25ldHdvcmsvQ3JlZGVudGlhbFN0b3JhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3JlZGVu
dGlhbFN0b3JhZ2U6OnNldCk6CisgICAgICAgIChXZWJDb3JlOjpDcmVkZW50aWFsU3RvcmFnZTo6
Z2V0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0hUVFBIZWFkZXJNYXAuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRUUEhlYWRlck1hcDo6Y29weURhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRUUEhlYWRlck1hcDo6Z2V0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL01JTUVI
ZWFkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TUlNRUhlYWRlcjo6cGFyc2VIZWFkZXIpOgor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdEJhc2U6OmFkZEhUVFBIZWFkZXJGaWVsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3RCYXNlOjphZGRIVFRQSGVhZGVyRmllbGRzKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9uZXR3b3JrL2JsYWNrYmVycnkvTmV0d29ya0pvYi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpO
ZXR3b3JrSm9iOjpub3RpZnlIZWFkZXJzUmVjZWl2ZWQpOgorICAgICAgICAoV2ViQ29yZTo6TmV0
d29ya0pvYjo6aGFuZGxlTm90aWZ5TXVsdGlwYXJ0SGVhZGVyUmVjZWl2ZWQpOgorICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJjZVJlcXVlc3RCbGFja0JlcnJ5LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdDo6aW5pdGlhbGl6ZVBsYXRmb3Jt
UmVxdWVzdCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNG
TmV0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VGaW5hbFJlcXVlc3QpOgorICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0Q0ZOZXQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6c2V0SGVhZGVyRmllbGRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1
cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNl
SGFuZGxlTWFuYWdlcjo6aW5pdGlhbGl6ZUhhbmRsZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9tYWMvUmVzb3VyY2VSZXF1ZXN0TWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0Ojpkb1VwZGF0ZVBsYXRmb3JtUmVxdWVzdCk6CisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9xdC9SZXNvdXJjZVJlcXVlc3RRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3Q6OnRvTmV0d29ya1JlcXVlc3QpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdv
cmsvc291cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlUmVxdWVzdDo6dXBkYXRlU291cE1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0Ojp0b1NvdXBNZXNzYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvUmVzb3VyY2VSZXNwb25zZVNvdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VS
ZXNwb25zZTo6dG9Tb3VwTWVzc2FnZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay93aW4v
UmVzb3VyY2VIYW5kbGVXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6
OnN0YXJ0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9SdW5Mb29wUXQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UnVuTG9vcDo6VGltZXJCYXNlOjp0aW1lckZpcmVkKToKKyAgICAgICAgKiBwbGF0
Zm9ybS90ZXh0L0xvY2FsZVRvU2NyaXB0TWFwcGluZ0RlZmF1bHQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6c2NyaXB0TmFtZVRvQ29kZSk6CisgICAgICAgIChXZWJDb3JlOjpsb2NhbGVUb1Njcmlw
dENvZGVGb3JGb250U2VsZWN0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRFbmNv
ZGluZ1JlZ2lzdHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBydW5lQmxhY2tsaXN0ZWRDb2Rl
Y3MpOgorICAgICAgICAoV2ViQ29yZTo6ZHVtcFRleHRFbmNvZGluZ05hbWVNYXApOgorICAgICAg
ICAqIHBsYXRmb3JtL3RleHQvdHJhbnNjb2Rlci9Gb250VHJhbnNjb2Rlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGb250VHJhbnNjb2Rlcjo6Y29udmVydGVyVHlwZSk6CisgICAgICAgICogcGxh
dGZvcm0vdGV4dC93aW5jZS9UZXh0Q29kZWNXaW5DRS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpM
YW5ndWFnZU1hbmFnZXI6Okxhbmd1YWdlTWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpnZXRD
b2RlUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNXaW5DRTo6cmVnaXN0ZXJFeHRl
bmRlZEVuY29kaW5nTmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjV2luQ0U6OnJl
Z2lzdGVyRXh0ZW5kZWRDb2RlY3MpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjV2luQ0U6
OmVudW1lcmF0ZVN1cHBvcnRlZEVuY29kaW5ncyk6CisgICAgICAgICogcGxhdGZvcm0vd2luL0Ns
aXBib2FyZFV0aWxpdGllc1dpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXREYXRhTWFwSXRl
bSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRDbGlwYm9hcmREYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OnNldENsaXBib2FyZERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9DbGlwYm9hcmRX
aW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkV2luOjp0eXBlcyk6CisgICAgICAg
ICogcGxhdGZvcm0vd2luL0ZpbGVTeXN0ZW1XaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2Fj
aGVkU3RvcmFnZURpcmVjdG9yeSk6CisgICAgICAgICogcGxhdGZvcm0vd2luL1J1bkxvb3BXaW4u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UnVuTG9vcDo6VGltZXJCYXNlOjp0aW1lckZpcmVkKToK
KyAgICAgICAgKiBwbGF0Zm9ybS93aW4vV0NEYXRhT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OldDRGF0YU9iamVjdDo6Y3JlYXRlSW5zdGFuY2UpOgorICAgICAgICAqIHBsYXRmb3JtL3dp
bmNlL01JTUVUeXBlUmVnaXN0cnlXaW5DRS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNSU1FVHlw
ZVJlZ2lzdHJ5OjpnZXRQcmVmZXJyZWRFeHRlbnNpb25Gb3JNSU1FVHlwZSk6CisgICAgICAgICog
cGxhdGZvcm0vd3gvQ29udGV4dE1lbnVXeC5jcHA6CisgICAgICAgIChDb250ZXh0TWVudTo6YXBw
ZW5kSXRlbSk6CisgICAgICAgICogcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6cmVmcmVzaCk6CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5EYXRhYmFzZTo6TUlNRVR5cGVGb3JFeHRlbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6
UGx1Z2luRGF0YWJhc2U6OnJlbW92ZSk6CisgICAgICAgICogcGx1Z2lucy9QbHVnaW5NYWluVGhy
ZWFkU2NoZWR1bGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbk1haW5UaHJlYWRTY2hl
ZHVsZXI6OnNjaGVkdWxlQ2FsbCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5NYWluVGhyZWFk
U2NoZWR1bGVyOjpkaXNwYXRjaENhbGxzKToKKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpblN0cmVh
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5TdHJlYW06OnN0YXJ0U3RyZWFtKToKKyAg
ICAgICAgKiBwbHVnaW5zL2JsYWNrYmVycnkvUGx1Z2luRGF0YUJsYWNrQmVycnkuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YTo6aW5pdFBsdWdpbnMpOgorICAgICAgICAqIHBsdWdp
bnMvZWZsL1BsdWdpbkRhdGFFZmwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YTo6
aW5pdFBsdWdpbnMpOgorICAgICAgICAqIHBsdWdpbnMvd3gvUGx1Z2luRGF0YVd4LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGE6OmluaXRQbHVnaW5zKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvSW5saW5lRmxvd0JveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVGbG93Qm94
OjpyZXF1aXJlc0lkZW9ncmFwaGljQmFzZWxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5l
Rmxvd0JveDo6YWRkVGV4dEJveFZpc3VhbE92ZXJmbG93KToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmNsZWFyRmxv
YXRzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnNldExvZ2ljYWxXaWR0aEZvclRleHRSdW4pOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpjYWNo
ZWRTaXplRm9yT3ZlcmZsb3dDbGlwKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9k
ZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VRdWFsaXR5Q29udHJvbGxlcjo6
aGlnaFF1YWxpdHlSZXBhaW50VGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVF1
YWxpdHlDb250cm9sbGVyOjpzaG91bGRQYWludEF0TG93UXVhbGl0eSk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQ291bnRl
cjo6ZGVzdHJveUNvdW50ZXJOb2Rlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJDb3VudGVy
OjpkZXN0cm95Q291bnRlck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6dXBkYXRlQ291bnRlcnMp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQ291bnRlcjo6cmVuZGVyZXJTdHlsZUNoYW5nZWQp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OnNldFJlZ2lvblJhbmdlRm9yQm94KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OmdldFJlZ2lvblJhbmdlRm9yQm94KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXI6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OnBlcmZvcm1PdmVybGFwVGVzdHMpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTmFtZWRGbG93VGhyZWFkOjpkZXBlbmRzT24pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTmFtZWRGbG93VGhyZWFkOjpwdXNoRGVwZW5kZW5jaWVzKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJl
Z2lvbjo6c2V0UmVnaW9uQm94ZXNSZWdpb25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJSZWdpb246OnJlc3RvcmVSZWdpb25Cb3hlc09yaWdpbmFsU3R5bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyUmVnaW9uOjpzZXRSZW5kZXJCb3hSZWdpb25JbmZvKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclJlZ2lvbjo6cmVuZGVyQm94UmVnaW9uU3R5bGUpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGFibGVTZWN0aW9uOjpjYWNoZWRDb2xsYXBzZWRCb3JkZXIpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJUaGVtZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpz
eXN0ZW1Db2xvcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6c2VsZWN0aW9uQm91bmRzKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclZpZXc6OnNldFNlbGVjdGlvbik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
cldpZGdldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJXaWRnZXQ6OnJlc3VtZVdpZGdl
dEhpZXJhcmNoeVVwZGF0ZXMpOgorICAgICAgICAqIHJlbmRlcmluZy9Sb290SW5saW5lQm94LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJvb3RJbmxpbmVCb3g6OmFzY2VudEFuZERlc2NlbnRGb3JC
b3gpOgorICAgICAgICAqIHJlbmRlcmluZy9WZXJ0aWNhbFBvc2l0aW9uQ2FjaGUuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlZlcnRpY2FsUG9zaXRpb25DYWNoZTo6Z2V0KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU1ZHSW5saW5lVGV4dDo6Y2hhcmFjdGVyU3RhcnRzTmV3VGV4dENodW5rKToKKyAgICAgICAg
KiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2Vk
KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudDo6YXBwbHlSZXNv
dXJjZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuOjphcHBseVJl
c291cmNlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlc0NhY2hlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1Jlc291cmNlc0NhY2hlOjpyZXNvdXJjZURlc3Ryb3llZCk6
CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSb290SW5saW5lQm94LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OnN3YXBJdGVtc0luTGF5b3V0QXR0cmlidXRlcyk6CisgICAgICAgICogcmVuZGVy
aW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRlcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdUZXh0TGF5b3V0QXR0cmlidXRlczo6ZHVtcCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9T
VkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
VGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyOjpidWlsZExheW91dEF0dHJpYnV0ZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyOjpmaWxsQ2hhcmFj
dGVyRGF0YU1hcCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5l
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRMYXlvdXRFbmdpbmU6OmxheW91dFRleHRP
bkxpbmVPclBhdGgpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3NCdWls
ZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRNZXRyaWNzQnVpbGRlcjo6bWVhc3Vy
ZVRleHRSZW5kZXJlcik6CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFTeW5jOjpzeW5jVGltZXJGaXJlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYVN5bmM6OnBlcmZvcm1JbXBvcnQpOgorICAgICAgICAo
V2ViQ29yZTo6U3RvcmFnZUFyZWFTeW5jOjpzeW5jKToKKyAgICAgICAgKiBzdG9yYWdlL1N0b3Jh
Z2VNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU1hcDo6a2V5KToKKyAgICAgICAg
KFdlYkNvcmU6OlN0b3JhZ2VNYXA6OnNldEl0ZW0pOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFn
ZU5hbWVzcGFjZUltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU5hbWVzcGFjZUlt
cGw6OmxvY2FsU3RvcmFnZU5hbWVzcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlTmFt
ZXNwYWNlSW1wbDo6Y29weSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNlSW1w
bDo6Y2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU5hbWVzcGFjZUltcGw6OmNsZWFy
QWxsT3JpZ2luc0ZvckRlbGV0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VOYW1lc3Bh
Y2VJbXBsOjpzeW5jKToKKyAgICAgICAgKiBzdmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlQW5pbWF0aW9u
RWxlbWVudEZyb21UYXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRG9jdW1lbnRFeHRlbnNp
b25zOjphZGRQZW5kaW5nUmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRG9jdW1lbnRF
eHRlbnNpb25zOjppc0VsZW1lbnRQZW5kaW5nUmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlRWxlbWVudEZyb21QZW5kaW5nUmVzb3VyY2Vz
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0RvY3VtZW50RXh0ZW5zaW9uczo6c2V0T2ZFbGVtZW50
c1JlZmVyZW5jaW5nVGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0RvY3VtZW50RXh0ZW5z
aW9uczo6cmVtb3ZlQWxsVGFyZ2V0UmVmZXJlbmNlc0ZvckVsZW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZW1vdmVBbGxFbGVtZW50UmVmZXJlbmNlc0Zv
clRhcmdldCk6CisgICAgICAgICogc3ZnL1NWR0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHRWxlbWVudDo6flNWR0VsZW1lbnQpOgorICAgICAgICAqIHN2Zy9hbmltYXRpb24vU01J
TFRpbWVDb250YWluZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWVDb250YWluZXI6
OmJhc2VWYWx1ZUZvcik6CisgICAgICAgIChXZWJDb3JlOjpTTUlMVGltZUNvbnRhaW5lcjo6dXBk
YXRlQW5pbWF0aW9ucyk6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR0ltYWdlQ2FjaGUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2VDYWNoZTo6flNWR0ltYWdlQ2FjaGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2VDYWNoZTo6cmVtb3ZlUmVuZGVyZXJGcm9tQ2FjaGUpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2VDYWNoZTo6cmVxdWVzdGVkU2l6ZUFuZFpvb20pOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2VDYWNoZTo6aW1hZ2VDb250ZW50Q2hhbmdlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZUNhY2hlOjpyZWRyYXcpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHSW1hZ2VDYWNoZTo6bG9va3VwT3JDcmVhdGVCaXRtYXBJbWFnZUZvclJlbmRlcmVyKToK
KyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjplZmZlY3RSZWZlcmVuY2VzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmFkZEJ1aWx0aW5FZmZlY3RzKToKKyAgICAg
ICAgKiBzdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5Lmg6CisgICAgICAgIChXZWJD
b3JlOjpTVkdBbmltYXRlZFByb3BlcnR5Ojp+U1ZHQW5pbWF0ZWRQcm9wZXJ0eSk6CisgICAgICAg
ICogc3ZnL3Byb3BlcnRpZXMvU1ZHQXR0cmlidXRlVG9Qcm9wZXJ0eU1hcC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdBdHRyaWJ1dGVUb1Byb3BlcnR5TWFwOjphZGRQcm9wZXJ0aWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0F0dHJpYnV0ZVRvUHJvcGVydHlNYXA6OnN5bmNocm9uaXplUHJv
cGVydGllcyk6CisgICAgICAgICogd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OldvcmtlckNvbnRleHQ6Omhhc1BlbmRpbmdBY3Rpdml0eSk6CisgICAgICAgICog
d29ya2Vycy9Xb3JrZXJFdmVudFF1ZXVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckV2
ZW50UXVldWU6OmNsb3NlKToKKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OnNldFJlcXVlc3RIZWFkZXJJbnRlcm5hbCk6
CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6Z2V0QWxsUmVzcG9uc2VIZWFkZXJz
KToKKyAgICAgICAgKiB4bWwvWFBhdGhGdW5jdGlvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
WFBhdGg6OmNyZWF0ZUZ1bmN0aW9uKToKKyAgICAgICAgKiB4bWwvWFBhdGhQYXJzZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OmlzQXhpc05hbWUpOgorICAgICAgICAqIHhtbC9YU0xU
UHJvY2Vzc29yTGlieHNsdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp4c2x0UGFyYW1BcnJheUZy
b21QYXJhbWV0ZXJNYXApOgorICAgICAgICAqIHhtbC9YU0xUUHJvY2Vzc29yUXQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6WFNMVFByb2Nlc3Nvcjo6dHJhbnNmb3JtVG9TdHJpbmcpOgorCiAyMDEy
LTA0LTAyICBBbGV4YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgV2ViIEluc3BlY3RvcjogSW1wbGVtZW50IGZyb250ZW5kIGZvciBkZXZpY2UgbWV0cmljcyBl
bXVsYXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQ2hhbmdlTG9nCmluZGV4IGQyM2ZlOTY1NmYzMjA3
YWI3NDc3OTM5NDhkNjQwMjdmYzZmN2QwZmYuLmU4YTdmODY0ZmU0MGI4MjEwMTA2YTkzZTk2MWUy
MTdmMDUyZWUwYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5
IEBACisyMDEyLTA0LTAyICBDYWlvIE1hcmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gIDxjYWlvLm9s
aXZlaXJhQG9wZW5ib3NzYS5vcmc+CisKKyAgICAgICAgUmVuYW1lIGZpcnN0L3NlY29uZCB0byBr
ZXkvdmFsdWUgaW4gSGFzaE1hcCBpdGVyYXRvcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTgyNzg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBBcGkvQmFja2luZ1N0b3JlLmNwcDoKKyAgICAgICAgKEJs
YWNrQmVycnk6OldlYktpdDo6QmFja2luZ1N0b3JlUHJpdmF0ZTo6c2V0QmFja2luZ1N0b3JlUmVj
dCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkJhY2tpbmdTdG9yZVByaXZhdGU6OnZp
c2libGVUaWxlc1JlY3QpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpCYWNraW5nU3Rv
cmVQcml2YXRlOjpyZXNldFRpbGVzKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6QmFj
a2luZ1N0b3JlUHJpdmF0ZTo6dXBkYXRlVGlsZXMpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2Vi
S2l0OjpCYWNraW5nU3RvcmVQcml2YXRlOjp1cGRhdGVUaWxlc0ZvclNjcm9sbE9yTm90UmVuZGVy
ZWRSZWdpb24pOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpCYWNraW5nU3RvcmVQcml2
YXRlOjptYXBGcm9tVHJhbnNmb3JtZWRDb250ZW50c1RvVGlsZXMpOgorICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50QmxhY2tCZXJyeS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnk6OmRpc3BhdGNoV2lsbFNlbmRSZXF1ZXN0
KToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6OmNhbmNlbCk6
CisgICAgICAgIChXZWJDb3JlOjpOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpvblBlcm1pc3Np
b24pOgorICAgICAgICAoV2ViQ29yZTo6Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6bm90aWZp
Y2F0aW9uQ2xpY2tlZCk6CisgICAgICAgICogV2ViS2l0U3VwcG9ydC9GYXRGaW5nZXJzLmNwcDoK
KyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6RmF0RmluZ2Vyczo6ZmluZEJlc3RQb2ludCk6
CisgICAgICAgICogV2ViS2l0U3VwcG9ydC9GcmFtZUxheWVycy5jcHA6CisgICAgICAgIChCbGFj
a0JlcnJ5OjpXZWJLaXQ6OkZyYW1lTGF5ZXJzOjpyZW1vdmVMYXllckJ5RnJhbWUpOgorICAgICAg
ICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpGcmFtZUxheWVyczo6Y29tbWl0T25XZWJLaXRUaHJlYWQp
OgorCiAyMDEyLTA0LTAxICBBcnZpZCBOaWxzc29uICA8YW5pbHNzb25AcmltLmNvbT4KIAogICAg
ICAgICBbQmxhY2tCZXJyeV0gU2ltcGxpZnkgdGhlIGNvZGUgdGhhdCBnZXRzIGFjY2VsZXJhdGVk
IGNvbXBvc2l0aW5nIG91dHB1dCBvbnRvIHRoZSBzY3JlZW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKaW5kZXggNmE3ODcyMzJjNzk2NDBmMWNkZDQxZWYxYTM0Mzg3NTE0MTEzNDdhZS4uOWM0Njlh
NzYyZWQ1OGEzYTI1YzQ1YTI5YjA3MGQwZGE4NGMzZDc3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMi0wNC0wMiAgQ2FpbyBNYXJjZWxvIGRlIE9saXZl
aXJhIEZpbGhvICA8Y2Fpby5vbGl2ZWlyYUBvcGVuYm9zc2Eub3JnPgorCisgICAgICAgIFJlbmFt
ZSBmaXJzdC9zZWNvbmQgdG8ga2V5L3ZhbHVlIGluIEhhc2hNYXAgaXRlcmF0b3JzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Mjc4NAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3JjL1dlYkdlb2xvY2F0
aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkdlb2xvY2F0aW9u
UGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyOjpyZW1vdmUpOgorICAgICAgICAqIHRlc3RzL1dlYlNv
Y2tldEV4dGVuc2lvbkRpc3BhdGNoZXJUZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRFU1Rf
Rik6CisKIDIwMTItMDQtMDIgIEtpbnVrbyBZYXN1ZGEgIDxraW51a29AY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgY2hyb21pdW0gREVQUy4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxv
ZwppbmRleCA2ODVkNzk0MzViMGNmYjRkNTI2NTBmMzVkNmRlMjQ1ZDQ1MGU2MDU5Li5hNDg5OTA3
MzdkNTQzZDVkNWVkNzM3Y2EzY2FmZTRiMjcyODcwZmQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2d0ay9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTcgQEAKKzIwMTItMDQtMDIgIENhaW8gTWFyY2VsbyBkZSBPbGl2ZWlyYSBGaWxobyAg
PGNhaW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KKworICAgICAgICBSZW5hbWUgZmlyc3Qvc2Vj
b25kIHRvIGtleS92YWx1ZSBpbiBIYXNoTWFwIGl0ZXJhdG9ycworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI3ODQKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3Ry
YXRlZ2llc0d0ay5jcHA6CisgICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNHdGs6OmdldFBsdWdp
bkluZm8pOgorICAgICAgICAqIHdlYmtpdC93ZWJraXRmYXZpY29uZGF0YWJhc2UuY3BwOgorICAg
ICAgICAod2Via2l0RmF2aWNvbkRhdGFiYXNlSW1wb3J0RmluaXNoZWQpOgorICAgICAgICAqIHdl
YmtpdC93ZWJraXR3ZWJwbHVnaW4uY3BwOgorICAgICAgICAod2Via2l0X3dlYl9wbHVnaW5fZ2V0
X21pbWV0eXBlcyk6CisKIDIwMTItMDMtMzAgIE1hcmsgUGlsZ3JpbSAgPHBpbGdyaW1AY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIEdFT0xPQ0FUSU9OIHNob3VsZCBiZSBpbXBsZW1lbnRlZCBhcyBQ
YWdlIFN1cHBsZW1lbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwppbmRleCBiZjZmOTYxOWVlYWVlNjVmYjk2Y2Qy
OGM5ZmRiNzc2ODlkNjhkMDE2Li5jMjA4MTRmMGYyNWMwMWI1YjQwMDZmODc3MmIxYTlkODdhY2Nm
ZDI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdC9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDQgQEAKKzIwMTItMDQtMDIgIENhaW8g
TWFyY2VsbyBkZSBPbGl2ZWlyYSBGaWxobyAgPGNhaW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4K
KworICAgICAgICBSZW5hbWUgZmlyc3Qvc2Vjb25kIHRvIGtleS92YWx1ZSBpbiBIYXNoTWFwIGl0
ZXJhdG9ycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
ODI3ODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IEhpc3RvcnkvV2ViSGlzdG9yeS5tbToKKyAgICAgICAgKC1bV2ViSGlzdG9yeVByaXZhdGUgcmVt
b3ZlSXRlbUZyb21EYXRlQ2FjaGVzOl0pOgorICAgICAgICAoLVtXZWJIaXN0b3J5UHJpdmF0ZSBv
cmRlcmVkTGFzdFZpc2l0ZWREYXlzXSk6CisgICAgICAgIChXZWJIaXN0b3J5V3JpdGVyOjpXZWJI
aXN0b3J5V3JpdGVyKToKKyAgICAgICAgKiBNaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tOgorICAg
ICAgICAoK1tXZWJDb3JlU3RhdGlzdGljcyBqYXZhU2NyaXB0UHJvdGVjdGVkT2JqZWN0VHlwZUNv
dW50c10pOgorICAgICAgICAoK1tXZWJDb3JlU3RhdGlzdGljcyBqYXZhU2NyaXB0T2JqZWN0VHlw
ZUNvdW50c10pOgorICAgICAgICAqIFBsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdE1h
bmFnZXIubW06CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXI6Omhv
c3RGb3JQbHVnaW4pOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2Vy
OjpwbHVnaW5Ib3N0RGllZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSG9zdE1h
bmFnZXI6OmRpZENyZWF0ZVdpbmRvdyk6CisgICAgICAgICogUGx1Z2lucy9Ib3N0ZWQvTmV0c2Nh
cGVQbHVnaW5Ib3N0UHJveHkubW06CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSG9z
dFByb3h5OjpwbHVnaW5Ib3N0RGllZCk6CisgICAgICAgICogUGx1Z2lucy9Ib3N0ZWQvTmV0c2Nh
cGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdp
bkluc3RhbmNlUHJveHk6OkxvY2FsT2JqZWN0TWFwOjppZEZvck9iamVjdCk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6TG9jYWxPYmplY3RNYXA6OnJldGFp
bik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6TG9jYWxP
YmplY3RNYXA6OnJlbGVhc2UpOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3Rh
bmNlUHJveHk6OkxvY2FsT2JqZWN0TWFwOjpmb3JnZXQpOgorICAgICAgICAoV2ViS2l0OjpOZXRz
Y2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmRlc3Ryb3kpOgorICAgICAgICAoV2ViS2l0OjpOZXRz
Y2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OndlYkZyYW1lRGlkRmluaXNoTG9hZFdpdGhSZWFzb24p
OgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmNhbmNlbENo
ZWNrSWZBbGxvd2VkVG9Mb2FkVVJMKToKKyAgICAgICAgKiBQbHVnaW5zL0hvc3RlZC9Qcm94eUlu
c3RhbmNlLm1tOgorICAgICAgICAoV2ViS2l0OjpQcm94eUluc3RhbmNlOjptZXRob2RzTmFtZWQp
OgorICAgICAgICAoV2ViS2l0OjpQcm94eUluc3RhbmNlOjpmaWVsZE5hbWVkKToKKyAgICAgICAg
KiBQbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5tbToKKyAgICAgICAgKC1bV2ViTmV0c2Nh
cGVQbHVnaW5WaWV3IHN0b3BUaW1lcnNdKToKKyAgICAgICAgKC1bV2ViTmV0c2NhcGVQbHVnaW5W
aWV3IHN0YXJ0VGltZXJzXSk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViTm90aWZpY2F0
aW9uQ2xpZW50Lm1tOgorICAgICAgICAoV2ViTm90aWZpY2F0aW9uQ2xpZW50OjpzaG93KToKKyAg
ICAgICAgKFdlYk5vdGlmaWNhdGlvbkNsaWVudDo6Y2xlYXJOb3RpZmljYXRpb25zKToKKyAgICAg
ICAgKFdlYk5vdGlmaWNhdGlvbkNsaWVudDo6bm90aWZpY2F0aW9uT2JqZWN0RGVzdHJveWVkKToK
KyAgICAgICAgKiBXZWJWaWV3L1dlYkhUTUxWaWV3Lm1tOgorICAgICAgICAoY29tbWFuZE5hbWVG
b3JTZWxlY3Rvcik6CisKIDIwMTItMDQtMDEgIEpvbiBMZWUgIDxqb25sZWVAYXBwbGUuY29tPgog
CiAgICAgICAgIFJlbmFtZSBub3RpZmljYXRpb24gcHJvcGVydGllcyBhbmQgZnVuY3Rpb25zCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvcXQv
Q2hhbmdlTG9nCmluZGV4IGFlYTZkNTM3N2NkMThjNzY5MWVkNGQ3M2E0Yjg2NzU0YzlhYzNlZGMu
LjdkMmJjYjAwZTMzODRiNDZhZmMyNWMxNzk5YjFiNDAyYTE1ZThkMGMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTcgQEAKKzIwMTItMDQtMDIgIENhaW8gTWFyY2VsbyBkZSBPbGl2ZWlyYSBG
aWxobyAgPGNhaW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KKworICAgICAgICBSZW5hbWUgZmly
c3Qvc2Vjb25kIHRvIGtleS92YWx1ZSBpbiBIYXNoTWFwIGl0ZXJhdG9ycworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI3ODQKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEFwaS9xd2VicGFnZS5jcHA6Cisg
ICAgICAgIChleHRyYWN0Q29udGVudFR5cGVGcm9tUGx1Z2luVmVjdG9yKToKKyAgICAgICAgKiBB
cGkvcXdlYnBsdWdpbmRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFFXZWJQbHVnaW5JbmZvOjptaW1l
VHlwZXMpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1F0LmNw
cDoKKyAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc1F0OjpnZXRQbHVnaW5JbmZvKToKKwogMjAx
Mi0wNC0wMiAgQ2FzcGVyIHZhbiBEb25kZXJlbiAgPGNhc3Blci52YW5kb25kZXJlbkBub2tpYS5j
b20+CiAKICAgICAgICAgUXQ6IERvYzogRml4IHR5cG8gd2hpY2ggbWFya3MgZG9jdW1lbnQgdG8g
YmUgcHJpbnRlZCBpbiBjb25zb2xlIGZvbnQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dp
bi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKaW5kZXggM2Q3NTEwMDc2
ODJiMzI0N2E4ZTVjOTI5ZDlmOWYzYjVkM2M3OGQ5OS4uNTU0NzZiYzM3YTNkMGFjZDRiZDVlMzRh
MTYzNDQ2MGM3NTBmNTU4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDEy
LTA0LTAyICBDYWlvIE1hcmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gIDxjYWlvLm9saXZlaXJhQG9w
ZW5ib3NzYS5vcmc+CisKKyAgICAgICAgUmVuYW1lIGZpcnN0L3NlY29uZCB0byBrZXkvdmFsdWUg
aW4gSGFzaE1hcCBpdGVyYXRvcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTgyNzg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBDT01Qcm9wZXJ0eUJhZy5oOgorICAgICAgICAoOjpSZWFkKToKKyAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwOgorICAgICAgICAo
V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpnZXRQbHVnaW5JbmZvKToKKyAgICAgICAgKiBXZWJLaXRD
T01BUEkuY3BwOgorICAgICAgICAoY2xhc3NGYWN0b3J5KToKKyAgICAgICAgKiBXZWJOb3RpZmlj
YXRpb25DZW50ZXIuY3BwOgorICAgICAgICAoV2ViTm90aWZpY2F0aW9uQ2VudGVyOjpwb3N0Tm90
aWZpY2F0aW9uSW50ZXJuYWwpOgorICAgICAgICAoV2ViTm90aWZpY2F0aW9uQ2VudGVyOjphZGRP
YnNlcnZlcik6CisgICAgICAgIChXZWJOb3RpZmljYXRpb25DZW50ZXI6OnJlbW92ZU9ic2VydmVy
KToKKwogMjAxMi0wMy0zMCAgTWFyayBQaWxncmltICA8cGlsZ3JpbUBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgR0VPTE9DQVRJT04gc2hvdWxkIGJlIGltcGxlbWVudGVkIGFzIFBhZ2UgU3VwcGxl
bWVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW5jZS9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0L3dpbmNlL0NoYW5nZUxvZwppbmRleCAzOGIxYjZmNzhkYjJjZDM1MzFlMzU3NTFjNjI5
YzFkNjc1NTc2MWNiLi5kNGFlMWJjYjM2M2JlNjhhNDZjYzY4YmZhM2M4ZWU5ZDNlM2FiMzljIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbmNlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0L3dpbmNlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDEyLTA0LTAyICBDYWlvIE1h
cmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gIDxjYWlvLm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+CisK
KyAgICAgICAgUmVuYW1lIGZpcnN0L3NlY29uZCB0byBrZXkvdmFsdWUgaW4gSGFzaE1hcCBpdGVy
YXRvcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgy
Nzg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5jcHA6CisgICAgICAgIChQbGF0
Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6Z2V0UGx1Z2luSW5mbyk6CisKIDIwMTItMDMtMzAgIFBhdHJp
Y2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW1dpbkNFXSBDb3Jy
ZWN0IDx3dGYvKi5oPiBpbmNsdWRlIHBhdGhzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDAwMTAxODE0M2U0MDQ2
YmEyYjY1OWIwOWU2YTNmMmZlNWNlNzcwNzkuLmFlODZmODJlNTE2NmM0NGQzMmZjMzk3NmIyNTQx
NjU4MmMzNTI1MjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMDUgQEAKKzIwMTItMDQtMDIgIENh
aW8gTWFyY2VsbyBkZSBPbGl2ZWlyYSBGaWxobyAgPGNhaW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9y
Zz4KKworICAgICAgICBSZW5hbWUgZmlyc3Qvc2Vjb25kIHRvIGtleS92YWx1ZSBpbiBIYXNoTWFw
IGl0ZXJhdG9ycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9ODI3ODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFBsYXRmb3JtL0NvcmVJUEMvQXJndW1lbnRDb2RlcnMuaDogQWRkIEFyZ3VtZW50Q29kZXIg
Zm9yIEhhc2hNYXBFbnRyeSB0eXBlcy4KKyAgICAgICAgKiBQbGF0Zm9ybS9Db3JlSVBDL0Nvbm5l
Y3Rpb24uY3BwOgorICAgICAgICAoQ29yZUlQQzo6Q29ubmVjdGlvbjo6U3luY01lc3NhZ2VTdGF0
ZTo6Z2V0T3JDcmVhdGUpOgorICAgICAgICAoQ29yZUlQQzo6Q29ubmVjdGlvbjo6d2FpdEZvck1l
c3NhZ2UpOgorICAgICAgICAoQ29yZUlQQzo6Q29ubmVjdGlvbjo6cHJvY2Vzc0luY29taW5nTWVz
c2FnZSk6CisgICAgICAgICogUGxhdGZvcm0vZ3RrL1dvcmtRdWV1ZUd0ay5jcHA6CisgICAgICAg
IChXb3JrUXVldWU6OnJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKToKKyAgICAgICAgKFdvcmtR
dWV1ZTo6dW5yZWdpc3RlckV2ZW50U291cmNlSGFuZGxlcik6CisgICAgICAgICogUGxhdGZvcm0v
bWFjL1dvcmtRdWV1ZU1hYy5jcHA6CisgICAgICAgIChXb3JrUXVldWU6OnVucmVnaXN0ZXJNYWNo
UG9ydEV2ZW50SGFuZGxlcik6CisgICAgICAgICogU2hhcmVkL1BsdWdpbnMvTlBSZW1vdGVPYmpl
Y3RNYXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpOUFJlbW90ZU9iamVjdE1hcDo6cGx1Z2luRGVz
dHJveWVkKToKKyAgICAgICAgKiBTaGFyZWQvVXNlck1lc3NhZ2VDb2RlcnMuaDoKKyAgICAgICAg
KFdlYktpdDo6VXNlck1lc3NhZ2VFbmNvZGVyOjpiYXNlRW5jb2RlKToKKyAgICAgICAgKiBTaGFy
ZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OnZhbHVlRm9yS2V5
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJlZmVyZW5jZXNTdG9yZTo6Z2V0Qm9vbFZhbHVlRm9y
S2V5KToKKyAgICAgICAgKiBTaGFyZWQvZ3RrL1dlYkNvcmVBcmd1bWVudENvZGVyc0d0ay5jcHA6
CisgICAgICAgIChDb3JlSVBDOjo6OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL21hYy9XZWJD
b3JlQXJndW1lbnRDb2RlcnNNYWMubW06CisgICAgICAgIChDb3JlSVBDOjo6OmRlY29kZSk6Cisg
ICAgICAgICogU2hhcmVkL3F0L0FyZ3VtZW50Q29kZXJzUXQuY3BwOgorICAgICAgICAoQ29yZUlQ
Qzo6OjpkZWNvZGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcu
Y3BwOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2dldF9zdWJyZXNvdXJjZXMpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dLUHJpbnRpbmdWaWV3Lm1tOgorICAgICAgICAoLVtXS1By
aW50aW5nVmlldyBfZXhwZWN0ZWRQcmV2aWV3Q2FsbGJhY2tGb3JSZWN0Ol0pOgorICAgICAgICAo
cGFnZURpZERyYXdUb1BERik6CisgICAgICAgICgtW1dLUHJpbnRpbmdWaWV3IF9kcmF3UHJldmll
dzpdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW06CisgICAgICAgIChj
b21tYW5kTmFtZUZvclNlbGVjdG9yKToKKyAgICAgICAgKC1bV0tWaWV3IHZhbGlkYXRlVXNlcklu
dGVyZmFjZUl0ZW06XSk6CisgICAgICAgICogVUlQcm9jZXNzL0dlb2xvY2F0aW9uUGVybWlzc2lv
blJlcXVlc3RNYW5hZ2VyUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpHZW9sb2NhdGlvblBl
cm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5OjppbnZhbGlkYXRlUmVxdWVzdHMpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9Ob3RpZmljYXRpb25zL05vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0
TWFuYWdlclByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6Tm90aWZpY2F0aW9uUGVybWlzc2lv
blJlcXVlc3RNYW5hZ2VyUHJveHk6OmludmFsaWRhdGVSZXF1ZXN0cyk6CisgICAgICAgICogVUlQ
cm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
UGx1Z2luUHJvY2Vzc1Byb3h5OjpwbHVnaW5Qcm9jZXNzQ3Jhc2hlZE9yRmFpbGVkVG9MYXVuY2gp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
Y3JlYXRlRGljdGlvbmFyeUZyb21IYXNoTWFwKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViSWNv
bkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViSWNvbkRhdGFiYXNlOjpkaWRGaW5p
c2hVUkxJbXBvcnQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJlci5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVJlbmRlcmVyOjpzeW5jTGF5ZXJQYXJh
bWV0ZXJzKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmFzc2lnbklt
YWdlVG9MYXllcik6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6Y2hlY2tVUkxSZWNlaXZlZEZyb21XZWJQ
cm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjphZGRCYWNrRm9yd2Fy
ZEl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OmZyYW1lQ291bnRJblBh
Z2UpOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9MYXllckJhY2tpbmdTdG9yZS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OkxheWVyQmFja2luZ1N0b3JlOjp1cGRhdGVUaWxlKToKKyAgICAgICAgKFdl
YktpdDo6TGF5ZXJCYWNraW5nU3RvcmU6OnRleHR1cmUpOgorICAgICAgICAoV2ViS2l0OjpMYXll
ckJhY2tpbmdTdG9yZTo6cGFpbnRUb1RleHR1cmVNYXBwZXIpOgorICAgICAgICAoV2ViS2l0OjpM
YXllckJhY2tpbmdTdG9yZTo6Y29tbWl0VGlsZU9wZXJhdGlvbnMpOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvR2VvbG9jYXRpb24vR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlcjo6
Y2FuY2VsUmVxdWVzdEZvckdlb2xvY2F0aW9uKToKKyAgICAgICAgKFdlYktpdDo6R2VvbG9jYXRp
b25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXI6OmRpZFJlY2VpdmVHZW9sb2NhdGlvblBlcm1pc3Np
b25EZWNpc2lvbik6CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5q
ZWN0ZWRCdW5kbGVOb2RlSGFuZGxlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5k
bGVOb2RlSGFuZGxlOjpnZXRPckNyZWF0ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5jcHA6CisgICAgICAgIChXZWJL
aXQ6OkluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OmdldE9yQ3JlYXRlKToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL05vdGlmaWNhdGlvbnMvV2ViTm90aWZpY2F0aW9uTWFuYWdlci5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYk5vdGlmaWNhdGlvbk1hbmFnZXI6OnBvbGljeUZvck9yaWdpbik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYk5vdGlmaWNhdGlvbk1hbmFnZXI6OnNob3cpOgorICAgICAgICAo
V2ViS2l0OjpXZWJOb3RpZmljYXRpb25NYW5hZ2VyOjpjbGVhck5vdGlmaWNhdGlvbnMpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJOb3RpZmljYXRpb25NYW5hZ2VyOjpyZW1vdmVOb3RpZmljYXRpb25G
cm9tQ29udGV4dE1hcCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05Q
UnVudGltZU9iamVjdE1hcC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5QUnVudGltZU9iamVjdE1h
cDo6aW52YWxpZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5QUnVudGltZU9iamVjdE1hcDo6Zmlu
YWxpemUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBs
dWdpbi5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luOjpkZXN0cm95U3RyZWFt
KToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW46OnVuc2NoZWR1bGVUaW1lcik6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luOjpmcmFtZURpZEZpbmlzaExvYWRpbmcpOgor
ICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbjo6ZnJhbWVEaWRGYWlsKToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHA6CisgICAgICAgIChXZWJLaXQ6OmJ1
aWxkSFRUUEhlYWRlcnMpOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3Ojp+UGx1Z2luVmll
dyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OmxheWVyQnlJRCk6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFByb3h5LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViQmFja0ZvcndhcmRMaXN0UHJveHk6OnJlbW92ZUl0ZW0pOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbToKKyAgICAgICAg
KFdlYktpdDo6Y29tbWFuZE5hbWVGb3JTZWxlY3Rvck5hbWUpOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQuY3BwOgorICAgICAgICAoV2ViS2l0OjpMYXll
clRyZWVIb3N0UXQ6OmFkb3B0SW1hZ2VCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpM
YXllclRyZWVIb3N0UXQ6OnJlbGVhc2VJbWFnZUJhY2tpbmdTdG9yZSk6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6dmlz
aXRlZExpbmtTdGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjphbGxW
aXNpdGVkTGlua1N0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OmZv
Y3VzZWRXZWJQYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6Y3JlYXRlV2ViUGFn
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OndlYlBhZ2VHcm91cCk6CisgICAgICAg
IChXZWJLaXQ6OmZyb21Db3VudGVkU2V0VG9IYXNoTWFwKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzczo6c2V0VGV4dENoZWNrZXJTdGF0ZSk6CisKIDIwMTItMDQtMDIgIEJhbGF6cyBLZWxl
bWVuICA8a2JhbGF6c0B3ZWJraXQub3JnPgogCiAgICAgICAgIFtRdF1bV0syXSBTZXQgdXAgcGx1
Z2luIHByb2Nlc3Mgb24gVW5peApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU0NhbGxiYWNrT2JqZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJh
Y2tPYmplY3QuaAppbmRleCA5YWNhMGM3ZTE4Y2E1Y2NjY2VlNzM1OWVhMzkxYzI4MzRiMGExYWM4
Li5hYzAxNTlkOThhOGIzMjRkNWZmODgyMDBiOTUzZTFlYzA2YTAzYTBlIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaApAQCAtODMsMTMgKzgzLDEzIEBA
IHN0cnVjdCBKU0NhbGxiYWNrT2JqZWN0RGF0YSA6IFdlYWtIYW5kbGVPd25lciB7CiAgICAgICAg
ICAgICBQcml2YXRlUHJvcGVydHlNYXA6OmNvbnN0X2l0ZXJhdG9yIGxvY2F0aW9uID0gbV9wcm9w
ZXJ0eU1hcC5maW5kKHByb3BlcnR5TmFtZS5pbXBsKCkpOwogICAgICAgICAgICAgaWYgKGxvY2F0
aW9uID09IG1fcHJvcGVydHlNYXAuZW5kKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFs
dWUoKTsKLSAgICAgICAgICAgIHJldHVybiBsb2NhdGlvbi0+c2Vjb25kLmdldCgpOworICAgICAg
ICAgICAgcmV0dXJuIGxvY2F0aW9uLT52YWx1ZS5nZXQoKTsKICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgdm9pZCBzZXRQcml2YXRlUHJvcGVydHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBKU0NlbGwqIG93bmVyLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUg
dmFsdWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBlbXB0
eTsKLSAgICAgICAgICAgIG1fcHJvcGVydHlNYXAuYWRkKHByb3BlcnR5TmFtZS5pbXBsKCksIGVt
cHR5KS5pdGVyYXRvci0+c2Vjb25kLnNldChnbG9iYWxEYXRhLCBvd25lciwgdmFsdWUpOworICAg
ICAgICAgICAgbV9wcm9wZXJ0eU1hcC5hZGQocHJvcGVydHlOYW1lLmltcGwoKSwgZW1wdHkpLml0
ZXJhdG9yLT52YWx1ZS5zZXQoZ2xvYmFsRGF0YSwgb3duZXIsIHZhbHVlKTsKICAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgdm9pZCBkZWxldGVQcml2YXRlUHJvcGVydHkoY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lKQpAQCAtMTAwLDggKzEwMCw4IEBAIHN0cnVjdCBKU0NhbGxiYWNr
T2JqZWN0RGF0YSA6IFdlYWtIYW5kbGVPd25lciB7CiAgICAgICAgIHZvaWQgdmlzaXRDaGlsZHJl
bihTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICAgICAgewogICAgICAgICAgICAgZm9yIChQcml2
YXRlUHJvcGVydHlNYXA6Oml0ZXJhdG9yIHB0ciA9IG1fcHJvcGVydHlNYXAuYmVnaW4oKTsgcHRy
ICE9IG1fcHJvcGVydHlNYXAuZW5kKCk7ICsrcHRyKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHB0
ci0+c2Vjb25kKQotICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgmcHRyLT5zZWNv
bmQpOworICAgICAgICAgICAgICAgIGlmIChwdHItPnZhbHVlKQorICAgICAgICAgICAgICAgICAg
ICB2aXNpdG9yLmFwcGVuZCgmcHRyLT52YWx1ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0
RnVuY3Rpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RG
dW5jdGlvbnMuaAppbmRleCBlNmJiODg0NGM3NDg1YWJkZmJiYzE5ZWZiZDk1YWZmZjNmNzRmNjcx
Li5iZjkwNDg0ZWJjODQ4Y2EwYjYyNjc5MGFlYzkwMzFjMWQ1YjlkZWM5IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaApA
QCAtNDYyLDggKzQ2Miw4IEBAIHZvaWQgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpnZXRPd25Q
cm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSoKICAgICAgICAgICAgIHR5
cGVkZWYgT3BhcXVlSlNDbGFzc1N0YXRpY1ZhbHVlc1RhYmxlOjpjb25zdF9pdGVyYXRvciBpdGVy
YXRvcjsKICAgICAgICAgICAgIGl0ZXJhdG9yIGVuZCA9IHN0YXRpY1ZhbHVlcy0+ZW5kKCk7CiAg
ICAgICAgICAgICBmb3IgKGl0ZXJhdG9yIGl0ID0gc3RhdGljVmFsdWVzLT5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgICAgICBTdHJpbmdJbXBsKiBuYW1lID0gaXQtPmZp
cnN0LmdldCgpOwotICAgICAgICAgICAgICAgIFN0YXRpY1ZhbHVlRW50cnkqIGVudHJ5ID0gaXQt
PnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgICAgICBTdHJpbmdJbXBsKiBuYW1lID0gaXQtPmtl
eS5nZXQoKTsKKyAgICAgICAgICAgICAgICBTdGF0aWNWYWx1ZUVudHJ5KiBlbnRyeSA9IGl0LT52
YWx1ZS5nZXQoKTsKICAgICAgICAgICAgICAgICBpZiAoZW50cnktPmdldFByb3BlcnR5ICYmICgh
KGVudHJ5LT5hdHRyaWJ1dGVzICYga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RW51bSkgfHwgKG1v
ZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykpKQogICAgICAgICAgICAgICAgICAgICBw
cm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyKGV4ZWMsIG5hbWUpKTsKICAgICAgICAgICAgIH0K
QEAgLTQ3Myw4ICs0NzMsOCBAQCB2b2lkIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6Z2V0T3du
UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqCiAgICAgICAgICAgICB0
eXBlZGVmIE9wYXF1ZUpTQ2xhc3NTdGF0aWNGdW5jdGlvbnNUYWJsZTo6Y29uc3RfaXRlcmF0b3Ig
aXRlcmF0b3I7CiAgICAgICAgICAgICBpdGVyYXRvciBlbmQgPSBzdGF0aWNGdW5jdGlvbnMtPmVu
ZCgpOwogICAgICAgICAgICAgZm9yIChpdGVyYXRvciBpdCA9IHN0YXRpY0Z1bmN0aW9ucy0+YmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nSW1wbCogbmFt
ZSA9IGl0LT5maXJzdC5nZXQoKTsKLSAgICAgICAgICAgICAgICBTdGF0aWNGdW5jdGlvbkVudHJ5
KiBlbnRyeSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICAgICAgU3RyaW5nSW1wbCog
bmFtZSA9IGl0LT5rZXkuZ2V0KCk7CisgICAgICAgICAgICAgICAgU3RhdGljRnVuY3Rpb25FbnRy
eSogZW50cnkgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICAgICAgaWYgKCEoZW50cnkt
PmF0dHJpYnV0ZXMgJiBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRFbnVtKSB8fCAobW9kZSA9PSBJ
bmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKSkKICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlO
YW1lcy5hZGQoSWRlbnRpZmllcihleGVjLCBuYW1lKSk7CiAgICAgICAgICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2xhc3NSZWYuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0NsYXNzUmVmLmNwcAppbmRleCAxMzUzNGQwNzhjNmI5Yjg3ODFm
MDk5NmE2YmI5ODhiMzdmNGRiZDNjLi4yZjMzM2MyYjg1ODBkYTMyMzU5MGJhNjk4MzhjODMyYjI5
OGQyYzA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2xhc3NSZWYu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDbGFzc1JlZi5jcHAKQEAgLTEw
NywxMyArMTA3LDEzIEBAIE9wYXF1ZUpTQ2xhc3M6On5PcGFxdWVKU0NsYXNzKCkKICAgICBpZiAo
bV9zdGF0aWNWYWx1ZXMpIHsKICAgICAgICAgT3BhcXVlSlNDbGFzc1N0YXRpY1ZhbHVlc1RhYmxl
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3N0YXRpY1ZhbHVlcy0+ZW5kKCk7CiAgICAgICAgIGZv
ciAoT3BhcXVlSlNDbGFzc1N0YXRpY1ZhbHVlc1RhYmxlOjpjb25zdF9pdGVyYXRvciBpdCA9IG1f
c3RhdGljVmFsdWVzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBBU1NF
UlQoIWl0LT5maXJzdC0+aXNJZGVudGlmaWVyKCkpOworICAgICAgICAgICAgQVNTRVJUKCFpdC0+
a2V5LT5pc0lkZW50aWZpZXIoKSk7CiAgICAgfQogCiAgICAgaWYgKG1fc3RhdGljRnVuY3Rpb25z
KSB7CiAgICAgICAgIE9wYXF1ZUpTQ2xhc3NTdGF0aWNGdW5jdGlvbnNUYWJsZTo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gbV9zdGF0aWNGdW5jdGlvbnMtPmVuZCgpOwogICAgICAgICBmb3IgKE9wYXF1
ZUpTQ2xhc3NTdGF0aWNGdW5jdGlvbnNUYWJsZTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3N0YXRp
Y0Z1bmN0aW9ucy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgQVNTRVJU
KCFpdC0+Zmlyc3QtPmlzSWRlbnRpZmllcigpKTsKKyAgICAgICAgICAgIEFTU0VSVCghaXQtPmtl
eS0+aXNJZGVudGlmaWVyKCkpOwogICAgIH0KICNlbmRpZgogICAgIApAQCAtMTQ3LDggKzE0Nyw4
IEBAIE9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YTo6T3BhcXVlSlNDbGFzc0NvbnRleHREYXRhKEpT
Qzo6SlNHbG9iYWxEYXRhJiwgT3BhcXVlSlNDCiAgICAgICAgIHN0YXRpY1ZhbHVlcyA9IGFkb3B0
UHRyKG5ldyBPcGFxdWVKU0NsYXNzU3RhdGljVmFsdWVzVGFibGUpOwogICAgICAgICBPcGFxdWVK
U0NsYXNzU3RhdGljVmFsdWVzVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGpzQ2xhc3MtPm1f
c3RhdGljVmFsdWVzLT5lbmQoKTsKICAgICAgICAgZm9yIChPcGFxdWVKU0NsYXNzU3RhdGljVmFs
dWVzVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0ganNDbGFzcy0+bV9zdGF0aWNWYWx1ZXMtPmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgQVNTRVJUKCFpdC0+Zmlyc3Qt
PmlzSWRlbnRpZmllcigpKTsKLSAgICAgICAgICAgIHN0YXRpY1ZhbHVlcy0+YWRkKFN0cmluZ0lt
cGw6OmNyZWF0ZShpdC0+Zmlyc3QtPmNoYXJhY3RlcnMoKSwgaXQtPmZpcnN0LT5sZW5ndGgoKSks
IGFkb3B0UHRyKG5ldyBTdGF0aWNWYWx1ZUVudHJ5KGl0LT5zZWNvbmQtPmdldFByb3BlcnR5LCBp
dC0+c2Vjb25kLT5zZXRQcm9wZXJ0eSwgaXQtPnNlY29uZC0+YXR0cmlidXRlcykpKTsKKyAgICAg
ICAgICAgIEFTU0VSVCghaXQtPmtleS0+aXNJZGVudGlmaWVyKCkpOworICAgICAgICAgICAgc3Rh
dGljVmFsdWVzLT5hZGQoU3RyaW5nSW1wbDo6Y3JlYXRlKGl0LT5rZXktPmNoYXJhY3RlcnMoKSwg
aXQtPmtleS0+bGVuZ3RoKCkpLCBhZG9wdFB0cihuZXcgU3RhdGljVmFsdWVFbnRyeShpdC0+dmFs
dWUtPmdldFByb3BlcnR5LCBpdC0+dmFsdWUtPnNldFByb3BlcnR5LCBpdC0+dmFsdWUtPmF0dHJp
YnV0ZXMpKSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE1NiwxNSArMTU2LDE1IEBAIE9wYXF1
ZUpTQ2xhc3NDb250ZXh0RGF0YTo6T3BhcXVlSlNDbGFzc0NvbnRleHREYXRhKEpTQzo6SlNHbG9i
YWxEYXRhJiwgT3BhcXVlSlNDCiAgICAgICAgIHN0YXRpY0Z1bmN0aW9ucyA9IGFkb3B0UHRyKG5l
dyBPcGFxdWVKU0NsYXNzU3RhdGljRnVuY3Rpb25zVGFibGUpOwogICAgICAgICBPcGFxdWVKU0Ns
YXNzU3RhdGljRnVuY3Rpb25zVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGpzQ2xhc3MtPm1f
c3RhdGljRnVuY3Rpb25zLT5lbmQoKTsKICAgICAgICAgZm9yIChPcGFxdWVKU0NsYXNzU3RhdGlj
RnVuY3Rpb25zVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0ganNDbGFzcy0+bV9zdGF0aWNGdW5j
dGlvbnMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgQVNTRVJUKCFp
dC0+Zmlyc3QtPmlzSWRlbnRpZmllcigpKTsKLSAgICAgICAgICAgIHN0YXRpY0Z1bmN0aW9ucy0+
YWRkKFN0cmluZ0ltcGw6OmNyZWF0ZShpdC0+Zmlyc3QtPmNoYXJhY3RlcnMoKSwgaXQtPmZpcnN0
LT5sZW5ndGgoKSksIGFkb3B0UHRyKG5ldyBTdGF0aWNGdW5jdGlvbkVudHJ5KGl0LT5zZWNvbmQt
PmNhbGxBc0Z1bmN0aW9uLCBpdC0+c2Vjb25kLT5hdHRyaWJ1dGVzKSkpOworICAgICAgICAgICAg
QVNTRVJUKCFpdC0+a2V5LT5pc0lkZW50aWZpZXIoKSk7CisgICAgICAgICAgICBzdGF0aWNGdW5j
dGlvbnMtPmFkZChTdHJpbmdJbXBsOjpjcmVhdGUoaXQtPmtleS0+Y2hhcmFjdGVycygpLCBpdC0+
a2V5LT5sZW5ndGgoKSksIGFkb3B0UHRyKG5ldyBTdGF0aWNGdW5jdGlvbkVudHJ5KGl0LT52YWx1
ZS0+Y2FsbEFzRnVuY3Rpb24sIGl0LT52YWx1ZS0+YXR0cmlidXRlcykpKTsKICAgICAgICAgfQog
ICAgIH0KIH0KIAogT3BhcXVlSlNDbGFzc0NvbnRleHREYXRhJiBPcGFxdWVKU0NsYXNzOjpjb250
ZXh0RGF0YShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgT3duUHRyPE9wYXF1ZUpTQ2xhc3NDb250
ZXh0RGF0YT4mIGNvbnRleHREYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpLm9wYXF1ZUpTQ2xhc3NE
YXRhLmFkZCh0aGlzLCBudWxscHRyKS5pdGVyYXRvci0+c2Vjb25kOworICAgIE93blB0cjxPcGFx
dWVKU0NsYXNzQ29udGV4dERhdGE+JiBjb250ZXh0RGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKS5v
cGFxdWVKU0NsYXNzRGF0YS5hZGQodGhpcywgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwogICAg
IGlmICghY29udGV4dERhdGEpCiAgICAgICAgIGNvbnRleHREYXRhID0gYWRvcHRQdHIobmV3IE9w
YXF1ZUpTQ2xhc3NDb250ZXh0RGF0YShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMpKTsKICAgICBy
ZXR1cm4gKmNvbnRleHREYXRhOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcAppbmRleCA2ZDhkMGNiNzg4N2JlMGRiZjFkYjM5ZWRhMWNjNGM0MDUwZmJkNzMz
Li5mNjQxYWViNWYzZDQwZGQwNmE4ZDNhN2I1ZGRlM2Q3MjY4ODliMmQ4IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcApAQCAtNDgwLDcgKzQ4MCw3IEBA
IHZvaWQgQ29kZUJsb2NrOjpkdW1wKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKICAgICAgICAgICAg
IGRhdGFMb2coIiAgJTFkID0ge1xuIiwgaSk7CiAgICAgICAgICAgICBTdHJpbmdKdW1wVGFibGU6
OlN0cmluZ09mZnNldFRhYmxlOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3JhcmVEYXRhLT5tX3N0
cmluZ1N3aXRjaEp1bXBUYWJsZXNbaV0ub2Zmc2V0VGFibGUuZW5kKCk7CiAgICAgICAgICAgICBm
b3IgKFN0cmluZ0p1bXBUYWJsZTo6U3RyaW5nT2Zmc2V0VGFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0
ZXIgPSBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbaV0ub2Zmc2V0VGFibGUu
YmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCJc
dFx0XCIlc1wiID0+ICUwNGRcbiIsIFVTdHJpbmcoaXRlci0+Zmlyc3QpLnV0ZjgoKS5kYXRhKCks
IGl0ZXItPnNlY29uZC5icmFuY2hPZmZzZXQpOworICAgICAgICAgICAgICAgIGRhdGFMb2coIlx0
XHRcIiVzXCIgPT4gJTA0ZFxuIiwgVVN0cmluZyhpdGVyLT5rZXkpLnV0ZjgoKS5kYXRhKCksIGl0
ZXItPnZhbHVlLmJyYW5jaE9mZnNldCk7CiAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICB9XG4i
KTsKICAgICAgICAgICAgICsraTsKICAgICAgICAgfSB3aGlsZSAoaSA8IG1fcmFyZURhdGEtPm1f
c3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5zaXplKCkpOwpAQCAtMTYxNCw3ICsxNjE0LDcgQEAgdm9p
ZCBFdmFsQ29kZUNhY2hlOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBFdmFsQ2FjaGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fY2FjaGVNYXAuZW5kKCk7CiAgICAg
Zm9yIChFdmFsQ2FjaGVNYXA6Oml0ZXJhdG9yIHB0ciA9IG1fY2FjaGVNYXAuYmVnaW4oKTsgcHRy
ICE9IGVuZDsgKytwdHIpCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kKCZwdHItPnNlY29uZCk7Cisg
ICAgICAgIHZpc2l0b3IuYXBwZW5kKCZwdHItPnZhbHVlKTsKIH0KIAogdm9pZCBDb2RlQmxvY2s6
OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0p1bXBUYWJsZS5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0p1bXBUYWJsZS5oCmluZGV4IDViYmUwNDcxMDdmNWIwMWMwMjg5YmVhMzMx
ODZlMWY4NGEzYWFmYzcuLjYwMzZjZGE1MWQ1YmNmNTY1ZWFlOTdlOGRiMjY1NTFjOTAyNTVjNzMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9KdW1wVGFibGUuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSnVtcFRhYmxlLmgKQEAgLTU3LDcg
KzU3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBTdHJpbmdPZmZzZXRUYWJsZTo6
Y29uc3RfaXRlcmF0b3IgbG9jID0gb2Zmc2V0VGFibGUuZmluZCh2YWx1ZSk7CiAgICAgICAgICAg
ICBpZiAobG9jID09IGVuZCkKICAgICAgICAgICAgICAgICByZXR1cm4gZGVmYXVsdE9mZnNldDsK
LSAgICAgICAgICAgIHJldHVybiBsb2MtPnNlY29uZC5icmFuY2hPZmZzZXQ7CisgICAgICAgICAg
ICByZXR1cm4gbG9jLT52YWx1ZS5icmFuY2hPZmZzZXQ7CiAgICAgICAgIH0KIAogI2lmIEVOQUJM
RShKSVQpCkBAIC02Nyw3ICs2Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgU3Ry
aW5nT2Zmc2V0VGFibGU6OmNvbnN0X2l0ZXJhdG9yIGxvYyA9IG9mZnNldFRhYmxlLmZpbmQodmFs
dWUpOwogICAgICAgICAgICAgaWYgKGxvYyA9PSBlbmQpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IGN0aURlZmF1bHQ7Ci0gICAgICAgICAgICByZXR1cm4gbG9jLT5zZWNvbmQuY3RpT2Zmc2V0Owor
ICAgICAgICAgICAgcmV0dXJuIGxvYy0+dmFsdWUuY3RpT2Zmc2V0OwogICAgICAgICB9CiAjZW5k
aWYKICAgICB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xh
enlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5jcHAKaW5kZXggZjE5OWI2OTIzMGE5YmEwMDllNjU5
MWYzZDQ5MDE3NGM5NWU2MTU3ZC4uZWQyYjZiNmQxN2MzNzgwMWUwNTA0MzNhMzQ1YTliYzBjMWJi
MDM2MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xhenlPcGVy
YW5kVmFsdWVQcm9maWxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3BwCkBAIC04MSw3ICs4MSw3IEBAIExhenlPcGVyYW5k
VmFsdWVQcm9maWxlKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZVBhcnNlcjo6Z2V0SWZQcmVzZW50
KAogICAgIGlmIChpdGVyID09IG1fbWFwLmVuZCgpKQogICAgICAgICByZXR1cm4gMDsKICAgICAK
LSAgICByZXR1cm4gaXRlci0+c2Vjb25kOworICAgIHJldHVybiBpdGVyLT52YWx1ZTsKIH0KIAog
UHJlZGljdGVkVHlwZSBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZVBhcnNlcjo6cHJlZGljdGlvbigK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVkaWN0aW9uVHJh
Y2tlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWRpY3Rpb25UcmFja2Vy
LmgKaW5kZXggNzU1MWNkM2YzZmZiNjQ2M2M0MTVhNThkNjQxNjNmMjQzMTllZGE5Yi4uODViZDcx
OWNlNzFlZWUwMjY4YmExOGQ5N2JkNzE3YmFmZWZlM2EzZSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWRpY3Rpb25UcmFja2VyLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWRpY3Rpb25UcmFja2VyLmgKQEAgLTU1LDcgKzU1LDcg
QEAgcHVibGljOgogICAgICAgICAgICAgbV9nbG9iYWxWYXJzLmFkZCh2YXJOdW1iZXIgKyAxLCBw
cmVkaWN0aW9uU2xvdCk7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiBtZXJnZVByZWRpY3Rpb24oaXRlci0+c2Vjb25kLm1fdmFsdWUsIHByZWRp
Y3Rpb24pOworICAgICAgICByZXR1cm4gbWVyZ2VQcmVkaWN0aW9uKGl0ZXItPnZhbHVlLm1fdmFs
dWUsIHByZWRpY3Rpb24pOwogICAgIH0KICAgICAKICAgICBQcmVkaWN0ZWRUeXBlIGdldEdsb2Jh
bFZhclByZWRpY3Rpb24odW5zaWduZWQgdmFyTnVtYmVyKQpAQCAtNjMsNyArNjMsNyBAQCBwdWJs
aWM6CiAgICAgICAgIEhhc2hNYXA8dW5zaWduZWQsIFByZWRpY3Rpb25TbG90Pjo6aXRlcmF0b3Ig
aXRlciA9IG1fZ2xvYmFsVmFycy5maW5kKHZhck51bWJlciArIDEpOwogICAgICAgICBpZiAoaXRl
ciA9PSBtX2dsb2JhbFZhcnMuZW5kKCkpCiAgICAgICAgICAgICByZXR1cm4gUHJlZGljdE5vbmU7
Ci0gICAgICAgIHJldHVybiBpdGVyLT5zZWNvbmQubV92YWx1ZTsKKyAgICAgICAgcmV0dXJuIGl0
ZXItPnZhbHVlLm1fdmFsdWU7CiAgICAgfQogICAgIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAK
aW5kZXggMGYwODU3OTUzMzY0MDRjNWEwNGZhMWU3YmNkYzE2YTAyN2UxZjFkYy4uZGJmMjNmZGVl
NTliY2ZhM2ZkNWU5OTg2NDlmZTg4Njg1OTE0MjAxMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKQEAgLTIw
Myw3ICsyMDMsNyBAQCBib29sIEJ5dGVjb2RlR2VuZXJhdG9yOjphZGRWYXIoY29uc3QgSWRlbnRp
ZmllciYgaWRlbnQsIGJvb2wgaXNDb25zdGFudCwgUmVnaXN0ZQogICAgIFN5bWJvbFRhYmxlOjpB
ZGRSZXN1bHQgcmVzdWx0ID0gc3ltYm9sVGFibGUoKS5hZGQoaWRlbnQuaW1wbCgpLCBuZXdFbnRy
eSk7CiAKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIHIwID0gJnJlZ2lz
dGVyRm9yKHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLmdldEluZGV4KCkpOworICAgICAgICByMCA9
ICZyZWdpc3RlckZvcihyZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldEluZGV4KCkpOwogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0yMTcsNyArMjE3LDcgQEAgaW50IEJ5dGVjb2Rl
R2VuZXJhdG9yOjphZGRHbG9iYWxWYXIoY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGJvb2wgaXND
b25zdGFudCkKICAgICBTeW1ib2xUYWJsZUVudHJ5IG5ld0VudHJ5KGluZGV4LCBpc0NvbnN0YW50
ID8gUmVhZE9ubHkgOiAwKTsKICAgICBTeW1ib2xUYWJsZTo6QWRkUmVzdWx0IHJlc3VsdCA9IHN5
bWJvbFRhYmxlKCkuYWRkKGlkZW50LmltcGwoKSwgbmV3RW50cnkpOwogICAgIGlmICghcmVzdWx0
LmlzTmV3RW50cnkpCi0gICAgICAgIGluZGV4ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQuZ2V0
SW5kZXgoKTsKKyAgICAgICAgaW5kZXggPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldEluZGV4
KCk7CiAgICAgcmV0dXJuIGluZGV4OwogfQogCkBAIC05NzIsNyArOTcyLDcgQEAgdW5zaWduZWQg
Qnl0ZWNvZGVHZW5lcmF0b3I6OmFkZENvbnN0YW50KGNvbnN0IElkZW50aWZpZXImIGlkZW50KQog
ICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKICAgICAgICAgbV9jb2RlQmxvY2stPmFkZElkZW50
aWZpZXIoSWRlbnRpZmllcihtX2dsb2JhbERhdGEsIHJlcCkpOwogCi0gICAgcmV0dXJuIHJlc3Vs
dC5pdGVyYXRvci0+c2Vjb25kOworICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwog
fQogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6YWRkQ29uc3RhbnRWYWx1ZShKU1Zh
bHVlIHYpCkBAIC05ODUsNyArOTg1LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6
OmFkZENvbnN0YW50VmFsdWUoSlNWYWx1ZSB2KQogICAgICAgICArK21fbmV4dENvbnN0YW50T2Zm
c2V0OwogICAgICAgICBtX2NvZGVCbG9jay0+YWRkQ29uc3RhbnQoSlNWYWx1ZSh2KSk7CiAgICAg
fSBlbHNlCi0gICAgICAgIGluZGV4ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAg
IGluZGV4ID0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIAogICAgIHJldHVybiAmbV9jb25zdGFu
dFBvb2xSZWdpc3RlcnNbaW5kZXhdOwogfQpAQCAtMTEzMiw3ICsxMTMyLDcgQEAgUmVnaXN0ZXJJ
RCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRMb2FkKFJlZ2lzdGVySUQqIGRzdCwgZG91YmxlIG51
bWJlcikKICAgICAvLyB3b3JrIGNvcnJlY3RseSB3aXRoIE5hTiBhcyBhIGtleS4KICAgICBpZiAo
aXNuYW4obnVtYmVyKSB8fCBudW1iZXIgPT0gSGFzaFRyYWl0czxkb3VibGU+OjplbXB0eVZhbHVl
KCkgfHwgSGFzaFRyYWl0czxkb3VibGU+Ojppc0RlbGV0ZWRWYWx1ZShudW1iZXIpKQogICAgICAg
ICByZXR1cm4gZW1pdExvYWQoZHN0LCBqc051bWJlcihudW1iZXIpKTsKLSAgICBKU1ZhbHVlJiB2
YWx1ZUluTWFwID0gbV9udW1iZXJNYXAuYWRkKG51bWJlciwgSlNWYWx1ZSgpKS5pdGVyYXRvci0+
c2Vjb25kOworICAgIEpTVmFsdWUmIHZhbHVlSW5NYXAgPSBtX251bWJlck1hcC5hZGQobnVtYmVy
LCBKU1ZhbHVlKCkpLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoIXZhbHVlSW5NYXApCiAgICAg
ICAgIHZhbHVlSW5NYXAgPSBqc051bWJlcihudW1iZXIpOwogICAgIHJldHVybiBlbWl0TG9hZChk
c3QsIHZhbHVlSW5NYXApOwpAQCAtMTE0MCw3ICsxMTQwLDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaXRMb2FkKFJlZ2lzdGVySUQqIGRzdCwgZG91YmxlIG51bWJlcikKIAog
UmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRMb2FkKFJlZ2lzdGVySUQqIGRzdCwg
Y29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllcikKIHsKLSAgICBKU1N0cmluZyomIHN0cmluZ0lu
TWFwID0gbV9zdHJpbmdNYXAuYWRkKGlkZW50aWZpZXIuaW1wbCgpLCAwKS5pdGVyYXRvci0+c2Vj
b25kOworICAgIEpTU3RyaW5nKiYgc3RyaW5nSW5NYXAgPSBtX3N0cmluZ01hcC5hZGQoaWRlbnRp
Zmllci5pbXBsKCksIDApLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoIXN0cmluZ0luTWFwKQog
ICAgICAgICBzdHJpbmdJbk1hcCA9IGpzT3duZWRTdHJpbmcoZ2xvYmFsRGF0YSgpLCBpZGVudGlm
aWVyLnVzdHJpbmcoKSk7CiAgICAgcmV0dXJuIGVtaXRMb2FkKGRzdCwgSlNWYWx1ZShzdHJpbmdJ
bk1hcCkpOwpAQCAtMTY0OCw3ICsxNjQ4LDcgQEAgdW5zaWduZWQgQnl0ZWNvZGVHZW5lcmF0b3I6
OmFkZENvbnN0YW50QnVmZmVyKHVuc2lnbmVkIGxlbmd0aCkKIAogSlNTdHJpbmcqIEJ5dGVjb2Rl
R2VuZXJhdG9yOjphZGRTdHJpbmdDb25zdGFudChjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVy
KQogewotICAgIEpTU3RyaW5nKiYgc3RyaW5nSW5NYXAgPSBtX3N0cmluZ01hcC5hZGQoaWRlbnRp
Zmllci5pbXBsKCksIDApLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgSlNTdHJpbmcqJiBzdHJpbmdJ
bk1hcCA9IG1fc3RyaW5nTWFwLmFkZChpZGVudGlmaWVyLmltcGwoKSwgMCkuaXRlcmF0b3ItPnZh
bHVlOwogICAgIGlmICghc3RyaW5nSW5NYXApIHsKICAgICAgICAgc3RyaW5nSW5NYXAgPSBqc1N0
cmluZyhnbG9iYWxEYXRhKCksIGlkZW50aWZpZXIudXN0cmluZygpKTsKICAgICAgICAgYWRkQ29u
c3RhbnRWYWx1ZShzdHJpbmdJbk1hcCk7CkBAIC0xNzIwLDggKzE3MjAsOCBAQCBSZWdpc3RlcklE
KiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdExhenlOZXdGdW5jdGlvbihSZWdpc3RlcklEKiBkc3Qs
IEZ1bmN0aW9uQm9keQogewogICAgIEZ1bmN0aW9uT2Zmc2V0TWFwOjpBZGRSZXN1bHQgcHRyID0g
bV9mdW5jdGlvbk9mZnNldHMuYWRkKGZ1bmN0aW9uLCAwKTsKICAgICBpZiAocHRyLmlzTmV3RW50
cnkpCi0gICAgICAgIHB0ci5pdGVyYXRvci0+c2Vjb25kID0gbV9jb2RlQmxvY2stPmFkZEZ1bmN0
aW9uRGVjbChtYWtlRnVuY3Rpb24obV9nbG9iYWxEYXRhLCBmdW5jdGlvbikpOwotICAgIHJldHVy
biBlbWl0TmV3RnVuY3Rpb25JbnRlcm5hbChkc3QsIHB0ci5pdGVyYXRvci0+c2Vjb25kLCB0cnVl
KTsKKyAgICAgICAgcHRyLml0ZXJhdG9yLT52YWx1ZSA9IG1fY29kZUJsb2NrLT5hZGRGdW5jdGlv
bkRlY2wobWFrZUZ1bmN0aW9uKG1fZ2xvYmFsRGF0YSwgZnVuY3Rpb24pKTsKKyAgICByZXR1cm4g
ZW1pdE5ld0Z1bmN0aW9uSW50ZXJuYWwoZHN0LCBwdHIuaXRlcmF0b3ItPnZhbHVlLCB0cnVlKTsK
IH0KIAogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXROZXdGdW5jdGlvbkludGVy
bmFsKFJlZ2lzdGVySUQqIGRzdCwgdW5zaWduZWQgaW5kZXgsIGJvb2wgZG9OdWxsQ2hlY2spCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdl
bi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5j
cHAKaW5kZXggY2Q5ZGUyMmYwNTk4Nzk4ZTI3YjI3NzFiOWI4N2U0NTEzNmE5NzhjZC4uNmIzZjdl
NTVlNGEzNWEyOWY4ZWFlMjM0NzJmZjYzMTAxNDIwMTg3OSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcApAQCAtMjU4LDcgKzI1
OCw3IEBAIFJlZ2lzdGVySUQqIFByb3BlcnR5TGlzdE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29k
ZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlCiAgICAgICAgICAgICBHZXR0ZXJTZXR0ZXJQ
YWlyIHBhaXIobm9kZSwgc3RhdGljX2Nhc3Q8UHJvcGVydHlOb2RlKj4oMCkpOwogICAgICAgICAg
ICAgR2V0dGVyU2V0dGVyTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbWFwLmFkZChub2RlLT5uYW1l
KCkuaW1wbCgpLCBwYWlyKTsKICAgICAgICAgICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0g
ICAgICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQuc2Vjb25kID0gbm9kZTsKKyAg
ICAgICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLnNlY29uZCA9IG5vZGU7CiAgICAg
ICAgIH0KIAogICAgICAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIHJlbWFpbmluZyBwcm9wZXJ0aWVz
IGluIHRoZSBsaXN0LgpAQCAtMjc2LDcgKzI3Niw3IEBAIFJlZ2lzdGVySUQqIFByb3BlcnR5TGlz
dE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3Rl
CiAgICAgICAgICAgICBBU1NFUlQobm9kZS0+bV90eXBlID09IFByb3BlcnR5Tm9kZTo6R2V0dGVy
IHx8IG5vZGUtPm1fdHlwZSA9PSBQcm9wZXJ0eU5vZGU6OlNldHRlcik7CiAgICAgICAgICAgICBH
ZXR0ZXJTZXR0ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLmZpbmQobm9kZS0+bmFtZSgpLmltcGwo
KSk7CiAgICAgICAgICAgICBBU1NFUlQoaXQgIT0gbWFwLmVuZCgpKTsKLSAgICAgICAgICAgIEdl
dHRlclNldHRlclBhaXImIHBhaXIgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgR2V0dGVyU2V0
dGVyUGFpciYgcGFpciA9IGl0LT52YWx1ZTsKIAogICAgICAgICAgICAgLy8gV2FzIHRoaXMgYWxy
ZWFkeSBnZW5lcmF0ZWQgYXMgYSBwYXJ0IG9mIGl0cyBwYXJ0bmVyPwogICAgICAgICAgICAgaWYg
KHBhaXIuc2Vjb25kID09IG5vZGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGVidWdnZXIvRGVidWdnZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0Rl
YnVnZ2VyLmNwcAppbmRleCBlZGU4YTliYTI0OGI5YTg5NGI3OTE3NGVkNWQzMjBmODhmNWNjYjNl
Li4xNDZiYWQxNTY2OTJiNTEwNDYwMTFlM2EzNzRmY2VkNTU5ZTFhODcwIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAKQEAgLTU5LDcgKzU5LDcgQEAgaW5s
aW5lIFJlY29tcGlsZXI6On5SZWNvbXBpbGVyKCkKICAgICAvLyBKYXZhU2NyaXB0IGluIHRoZSBp
bnNwZWN0b3IuCiAgICAgU291cmNlUHJvdmlkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1f
c291cmNlUHJvdmlkZXJzLmVuZCgpOwogICAgIGZvciAoU291cmNlUHJvdmlkZXJNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ZXIgPSBtX3NvdXJjZVByb3ZpZGVycy5iZWdpbigpOyBpdGVyICE9IGVuZDsg
KytpdGVyKQotICAgICAgICBtX2RlYnVnZ2VyLT5zb3VyY2VQYXJzZWQoaXRlci0+c2Vjb25kLCBp
dGVyLT5maXJzdCwgLTEsIFVTdHJpbmcoKSk7CisgICAgICAgIG1fZGVidWdnZXItPnNvdXJjZVBh
cnNlZChpdGVyLT52YWx1ZSwgaXRlci0+a2V5LCAtMSwgVVN0cmluZygpKTsKIH0KIAogaW5saW5l
IHZvaWQgUmVjb21waWxlcjo6b3BlcmF0b3IoKShKU0NlbGwqIGNlbGwpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5jcHAKaW5kZXggYWMyYzNkYjIx
Y2Y3NGExYTRkNjRiNDY4OWZmMTZmZWZlN2JkMWViMy4uZjhmNTYwMzhlOWQxZTFhNWZhOTA2NWY2
MDE4MzQ1MGZlZjQzM2U1MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBc3NlbWJseUhlbHBlcnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXNzZW1ibHlIZWxwZXJzLmNwcApAQCAtNDEsOSArNDEsOSBAQCBWZWN0b3I8Qnl0ZWNvZGVBbmRN
YWNoaW5lT2Zmc2V0PiYgQXNzZW1ibHlIZWxwZXJzOjpkZWNvZGVkQ29kZU1hcEZvcihDb2RlQmxv
Y2sqCiAgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zm
c2V0PiA+OjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9kZWNvZGVkQ29kZU1hcHMuYWRkKGNvZGVCbG9j
aywgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4oKSk7CiAgICAgCiAgICAgaWYgKHJl
c3VsdC5pc05ld0VudHJ5KQotICAgICAgICBjb2RlQmxvY2stPmppdENvZGVNYXAoKS0+ZGVjb2Rl
KHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKKyAgICAgICAgY29kZUJsb2NrLT5qaXRDb2RlTWFw
KCktPmRlY29kZShyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKICAgICAKLSAgICByZXR1cm4gcmVz
dWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7
CiB9CiAKICNpZiBFTkFCTEUoU0FNUExJTkdfRkxBR1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlQ2FjaGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQnl0ZUNvZGVDYWNoZS5oCmluZGV4IGY2YTc0NWM2NjU4NzEzM2IxMmNiZDQ0ZmYz
YTkyOWE5M2MxYmExMDcuLjhlZDE1NzhmMjZkM2E0ZTc1ZTIzYTlkOGVlZmYwOWFiNGFiNjAwOWMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVDYWNoZS5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVDYWNoZS5oCkBAIC0x
MzIsMTAgKzEzMiwxMCBAQCBwdWJsaWM6CiAgICAgICAgIE1hcDo6aXRlcmF0b3IgYmVnaW4gPSBt
X21hcC5iZWdpbigpOwogICAgICAgICBNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fbWFwLmVuZCgpOwog
ICAgICAgICBmb3IgKE1hcDo6aXRlcmF0b3IgaXRlciA9IGJlZ2luOyBpdGVyICE9IGVuZDsgKytp
dGVyKSB7Ci0gICAgICAgICAgICBpZiAoIWl0ZXItPnNlY29uZC5jb2RlQmxvY2spCisgICAgICAg
ICAgICBpZiAoIWl0ZXItPnZhbHVlLmNvZGVCbG9jaykKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIGlmIChpdGVyLT5zZWNvbmQub3duZWQpIHsKLSAgICAgICAgICAgICAg
ICBkZWxldGUgaXRlci0+c2Vjb25kLmNvZGVCbG9jazsKKyAgICAgICAgICAgIGlmIChpdGVyLT52
YWx1ZS5vd25lZCkgeworICAgICAgICAgICAgICAgIGRlbGV0ZSBpdGVyLT52YWx1ZS5jb2RlQmxv
Y2s7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
QEAgLTE0NSw3ICsxNDUsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBNYXA6Oml0ZXJhdG9y
IGl0ZXIgPSBtX21hcC5maW5kKGtleSk7CiAgICAgICAgIGlmIChpdGVyICE9IG1fbWFwLmVuZCgp
KQotICAgICAgICAgICAgcmV0dXJuIGl0ZXItPnNlY29uZC5jb2RlQmxvY2s7CisgICAgICAgICAg
ICByZXR1cm4gaXRlci0+dmFsdWUuY29kZUJsb2NrOwogICAgICAgICAKICAgICAgICAgQnl0ZUNv
ZGVDYWNoZVZhbHVlIHZhbHVlOwogICAgICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKaW5kZXggZjBkYTZjYzAxYjcwZTg3OWJiOTA5Nzhj
OGJhODcwNmZhZDg2OGQxZS4uMmE0NGFiMjU5MThmMzE3NjRjNWZlN2ZiYjZkZDZlNTJmOWJmMTQ2
MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAKQEAgLTU1Myw5ICs1NTMsOSBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgSGFzaE1hcDxK
U0NlbGwqLCBOb2RlSW5kZXg+OjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9jZWxsQ29uc3RhbnROb2Rl
cy5hZGQoY2VsbCwgTm9Ob2RlKTsKICAgICAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQotICAg
ICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBhZGRUb0dyYXBoKFdlYWtKU0NvbnN0
YW50LCBPcEluZm8oY2VsbCkpOworICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9
IGFkZFRvR3JhcGgoV2Vha0pTQ29uc3RhbnQsIE9wSW5mbyhjZWxsKSk7CiAgICAgICAgIAotICAg
ICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1
bHQuaXRlcmF0b3ItPnZhbHVlOwogICAgIH0KICAgICAKICAgICBDb2RlT3JpZ2luIGN1cnJlbnRD
b2RlT3JpZ2luKCkKQEAgLTI1OTgsNyArMjU5OCw3IEBAIEJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVT
dGFja0VudHJ5OjpJbmxpbmVTdGFja0VudHJ5KEJ5dGVDb2RlUGFyc2VyKiBieXRlQ29kZVBhcnNl
CiAgICAgICAgICAgICBJZGVudGlmaWVyTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gYnl0ZUNvZGVQ
YXJzZXItPm1faWRlbnRpZmllck1hcC5hZGQocmVwLCBieXRlQ29kZVBhcnNlci0+bV9jb2RlQmxv
Y2stPm51bWJlck9mSWRlbnRpZmllcnMoKSk7CiAgICAgICAgICAgICBpZiAocmVzdWx0LmlzTmV3
RW50cnkpCiAgICAgICAgICAgICAgICAgYnl0ZUNvZGVQYXJzZXItPm1fY29kZUJsb2NrLT5hZGRJ
ZGVudGlmaWVyKElkZW50aWZpZXIoYnl0ZUNvZGVQYXJzZXItPm1fZ2xvYmFsRGF0YSwgcmVwKSk7
Ci0gICAgICAgICAgICBtX2lkZW50aWZpZXJSZW1hcFtpXSA9IHJlc3VsdC5pdGVyYXRvci0+c2Vj
b25kOworICAgICAgICAgICAgbV9pZGVudGlmaWVyUmVtYXBbaV0gPSByZXN1bHQuaXRlcmF0b3It
PnZhbHVlOwogICAgICAgICB9CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29kZUJs
b2NrLT5udW1iZXJPZkNvbnN0YW50UmVnaXN0ZXJzKCk7ICsraSkgewogICAgICAgICAgICAgSlNW
YWx1ZSB2YWx1ZSA9IGNvZGVCbG9jay0+Z2V0Q29uc3RhbnQoaSArIEZpcnN0Q29uc3RhbnRSZWdp
c3RlckluZGV4KTsKQEAgLTI2MTYsNyArMjYxNiw3IEBAIEJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVT
dGFja0VudHJ5OjpJbmxpbmVTdGFja0VudHJ5KEJ5dGVDb2RlUGFyc2VyKiBieXRlQ29kZVBhcnNl
CiAgICAgICAgICAgICAgICAgYnl0ZUNvZGVQYXJzZXItPm1fY29kZUJsb2NrLT5hZGRDb25zdGFu
dCh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgYnl0ZUNvZGVQYXJzZXItPm1fY29uc3RhbnRzLmFw
cGVuZChDb25zdGFudFJlY29yZCgpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fY29u
c3RhbnRSZW1hcFtpXSA9IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICAgICAgbV9j
b25zdGFudFJlbWFwW2ldID0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgfQogICAg
ICAgICAKICAgICAgICAgbV9jYWxsc2l0ZUJsb2NrSGVhZE5lZWRzTGlua2luZyA9IHRydWU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCmluZGV4IGM1NGJhNzdiNmU0ZmJhOTMyNmRjZWI5
MWU1NTVhYmI2NGYwMmJmNzEuLjM0MjEwYWIxOWQ2ZWVkODI4ZDAwMTc1NTAyZGQzNDkwNjY2YjRl
NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCkBAIC01MDIsNyArNTAyLDcgQEAg
dm9pZCBIZWFwOjptYXJrUHJvdGVjdGVkT2JqZWN0cyhIZWFwUm9vdFZpc2l0b3ImIGhlYXBSb290
VmlzaXRvcikKIHsKICAgICBQcm90ZWN0Q291bnRTZXQ6Oml0ZXJhdG9yIGVuZCA9IG1fcHJvdGVj
dGVkVmFsdWVzLmVuZCgpOwogICAgIGZvciAoUHJvdGVjdENvdW50U2V0OjppdGVyYXRvciBpdCA9
IG1fcHJvdGVjdGVkVmFsdWVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaGVh
cFJvb3RWaXNpdG9yLnZpc2l0KCZpdC0+Zmlyc3QpOworICAgICAgICBoZWFwUm9vdFZpc2l0b3Iu
dmlzaXQoJml0LT5rZXkpOwogfQogCiB2b2lkIEhlYXA6OnB1c2hUZW1wU29ydFZlY3RvcihWZWN0
b3I8VmFsdWVTdHJpbmdQYWlyPiogdGVtcFZlY3RvcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
aAppbmRleCBjNzhjODU2MjhhMTRkYzdhZjdmOTVkNzU4NzA2ZDA2ZGRjMGQxY2JkLi41NDdjYTQ4
NjY0MTYyYzRlZjMxN2E5ZjA4MDc0YzFhMjg1ZjlkMjYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcC5oCkBAIC0zNTAsNyArMzUwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgewogICAgICAg
ICBQcm90ZWN0Q291bnRTZXQ6Oml0ZXJhdG9yIGVuZCA9IG1fcHJvdGVjdGVkVmFsdWVzLmVuZCgp
OwogICAgICAgICBmb3IgKFByb3RlY3RDb3VudFNldDo6aXRlcmF0b3IgaXQgPSBtX3Byb3RlY3Rl
ZFZhbHVlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBmdW5jdG9yKGl0
LT5maXJzdCk7CisgICAgICAgICAgICBmdW5jdG9yKGl0LT5rZXkpOwogICAgICAgICBtX2hhbmRs
ZUhlYXAuZm9yRWFjaFN0cm9uZ0hhbmRsZShmdW5jdG9yLCBtX3Byb3RlY3RlZFZhbHVlcyk7CiAK
ICAgICAgICAgcmV0dXJuIGZ1bmN0b3IucmV0dXJuVmFsdWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmNwcAppbmRleCA1NDFjYzg5NmEzMjg5MGY2YzVlZjYxYjRiNjViNzI0ZTY4ZWU2YjQxLi5l
NGM3MmYxZWI2NDc4MTI2OGJhNWQ0NGNkYjE5YjI5ODM0NDM1NDk2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuY3BwCkBAIC02NDMsOCArNjQzLDggQEAgSklUQ29kZSBKSVQ6OnByaXZhdGVDb21w
aWxlKENvZGVQdHIqIGZ1bmN0aW9uRW50cnlBcml0eUNoZWNrLCBKSVRDb21waWxhdGlvbkVmZm8K
IAogICAgICAgICAgICAgU3RyaW5nSnVtcFRhYmxlOjpTdHJpbmdPZmZzZXRUYWJsZTo6aXRlcmF0
b3IgZW5kID0gcmVjb3JkLmp1bXBUYWJsZS5zdHJpbmdKdW1wVGFibGUtPm9mZnNldFRhYmxlLmVu
ZCgpOyAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yIChTdHJpbmdKdW1wVGFibGU6OlN0cmlu
Z09mZnNldFRhYmxlOjppdGVyYXRvciBpdCA9IHJlY29yZC5qdW1wVGFibGUuc3RyaW5nSnVtcFRh
YmxlLT5vZmZzZXRUYWJsZS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBvZmZzZXQgPSBpdC0+c2Vjb25kLmJyYW5jaE9mZnNldDsKLSAgICAgICAg
ICAgICAgICBpdC0+c2Vjb25kLmN0aU9mZnNldCA9IG9mZnNldCA/IHBhdGNoQnVmZmVyLmxvY2F0
aW9uT2YobV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyBvZmZzZXRdKSA6IHJlY29yZC5qdW1wVGFi
bGUuc3RyaW5nSnVtcFRhYmxlLT5jdGlEZWZhdWx0OworICAgICAgICAgICAgICAgIHVuc2lnbmVk
IG9mZnNldCA9IGl0LT52YWx1ZS5icmFuY2hPZmZzZXQ7CisgICAgICAgICAgICAgICAgaXQtPnZh
bHVlLmN0aU9mZnNldCA9IG9mZnNldCA/IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YobV9sYWJlbHNb
Ynl0ZWNvZGVPZmZzZXQgKyBvZmZzZXRdKSA6IHJlY29yZC5qdW1wVGFibGUuc3RyaW5nSnVtcFRh
YmxlLT5jdGlEZWZhdWx0OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAppbmRleCA4MmY2ZGY3ZDEyYThlZjI3NDQwNTUx
NmRlNjZjNTUzNjM4YjRmZGQwLi5jYjkwZjQyMzMzYWU5Y2JkNmFjZWNmN2Q2MTRhZTk1NGY5NGI5
MTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcApAQCAtMzU2MCwyMiAr
MzU2MCwyMiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgSklUVGh1bmtzOjpjdGlTdHViKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSwgVGh1bmtHZW5lcmF0bwogewogICAgIENUSVN0dWJNYXA6OkFk
ZFJlc3VsdCBlbnRyeSA9IG1fY3RpU3R1Yk1hcC5hZGQoZ2VuZXJhdG9yLCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYoKSk7CiAgICAgaWYgKGVudHJ5LmlzTmV3RW50cnkpCi0gICAgICAgIGVudHJ5Lml0
ZXJhdG9yLT5zZWNvbmQgPSBnZW5lcmF0b3IoZ2xvYmFsRGF0YSk7Ci0gICAgcmV0dXJuIGVudHJ5
Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgIGVudHJ5Lml0ZXJhdG9yLT52YWx1ZSA9IGdlbmVy
YXRvcihnbG9iYWxEYXRhKTsKKyAgICByZXR1cm4gZW50cnkuaXRlcmF0b3ItPnZhbHVlOwogfQog
CiBOYXRpdmVFeGVjdXRhYmxlKiBKSVRUaHVua3M6Omhvc3RGdW5jdGlvblN0dWIoSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhLCBOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgTmF0aXZlRnVuY3Rpb24g
Y29uc3RydWN0b3IpCiB7CiAgICAgSG9zdEZ1bmN0aW9uU3R1Yk1hcDo6QWRkUmVzdWx0IHJlc3Vs
dCA9IG1faG9zdEZ1bmN0aW9uU3R1Yk1hcC0+YWRkKGZ1bmN0aW9uLCBQYXNzV2VhazxOYXRpdmVF
eGVjdXRhYmxlPigpKTsKLSAgICBpZiAoIXJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKQotICAgICAg
ICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IFBhc3NXZWFrPE5hdGl2ZUV4ZWN1dGFibGU+KCpn
bG9iYWxEYXRhLCBOYXRpdmVFeGVjdXRhYmxlOjpjcmVhdGUoKmdsb2JhbERhdGEsIEpJVDo6Y29t
cGlsZUNUSU5hdGl2ZUNhbGwoZ2xvYmFsRGF0YSwgZnVuY3Rpb24pLCBmdW5jdGlvbiwgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoY3RpTmF0aXZlQ29uc3Ry
dWN0KCkpLCBjb25zdHJ1Y3RvciwgTm9JbnRyaW5zaWMpKTsKLSAgICByZXR1cm4gcmVzdWx0Lml0
ZXJhdG9yLT5zZWNvbmQuZ2V0KCk7CisgICAgaWYgKCFyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKQor
ICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gUGFzc1dlYWs8TmF0aXZlRXhlY3V0YWJs
ZT4oKmdsb2JhbERhdGEsIE5hdGl2ZUV4ZWN1dGFibGU6OmNyZWF0ZSgqZ2xvYmFsRGF0YSwgSklU
Ojpjb21waWxlQ1RJTmF0aXZlQ2FsbChnbG9iYWxEYXRhLCBmdW5jdGlvbiksIGZ1bmN0aW9uLCBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihjdGlOYXRpdmVD
b25zdHJ1Y3QoKSksIGNvbnN0cnVjdG9yLCBOb0ludHJpbnNpYykpOworICAgIHJldHVybiByZXN1
bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpOwogfQogCiBOYXRpdmVFeGVjdXRhYmxlKiBKSVRUaHVu
a3M6Omhvc3RGdW5jdGlvblN0dWIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBOYXRpdmVGdW5j
dGlvbiBmdW5jdGlvbiwgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yLCBJbnRyaW5zaWMgaW50cmlu
c2ljKQogewogICAgIEhvc3RGdW5jdGlvblN0dWJNYXA6OkFkZFJlc3VsdCBlbnRyeSA9IG1faG9z
dEZ1bmN0aW9uU3R1Yk1hcC0+YWRkKGZ1bmN0aW9uLCBQYXNzV2VhazxOYXRpdmVFeGVjdXRhYmxl
PigpKTsKLSAgICBpZiAoISplbnRyeS5pdGVyYXRvci0+c2Vjb25kKSB7CisgICAgaWYgKCEqZW50
cnkuaXRlcmF0b3ItPnZhbHVlKSB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb2Rl
OwogICAgICAgICBpZiAoZ2VuZXJhdG9yKSB7CiAgICAgICAgICAgICBpZiAoZ2xvYmFsRGF0YS0+
Y2FuVXNlSklUKCkpCkBAIC0zNTg0LDkgKzM1ODQsOSBAQCBOYXRpdmVFeGVjdXRhYmxlKiBKSVRU
aHVua3M6Omhvc3RGdW5jdGlvblN0dWIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBOYXRpdmVG
dQogICAgICAgICAgICAgICAgIGNvZGUgPSBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoKTsKICAgICAg
ICAgfSBlbHNlCiAgICAgICAgICAgICBjb2RlID0gSklUOjpjb21waWxlQ1RJTmF0aXZlQ2FsbChn
bG9iYWxEYXRhLCBmdW5jdGlvbik7Ci0gICAgICAgIGVudHJ5Lml0ZXJhdG9yLT5zZWNvbmQgPSBQ
YXNzV2VhazxOYXRpdmVFeGVjdXRhYmxlPigqZ2xvYmFsRGF0YSwgTmF0aXZlRXhlY3V0YWJsZTo6
Y3JlYXRlKCpnbG9iYWxEYXRhLCBjb2RlLCBmdW5jdGlvbiwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoY3RpTmF0aXZlQ29uc3RydWN0KCkpLCBjYWxsSG9z
dEZ1bmN0aW9uQXNDb25zdHJ1Y3RvciwgaW50cmluc2ljKSk7CisgICAgICAgIGVudHJ5Lml0ZXJh
dG9yLT52YWx1ZSA9IFBhc3NXZWFrPE5hdGl2ZUV4ZWN1dGFibGU+KCpnbG9iYWxEYXRhLCBOYXRp
dmVFeGVjdXRhYmxlOjpjcmVhdGUoKmdsb2JhbERhdGEsIGNvZGUsIGZ1bmN0aW9uLCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihjdGlOYXRpdmVDb25zdHJ1
Y3QoKSksIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yLCBpbnRyaW5zaWMpKTsKICAgICB9
Ci0gICAgcmV0dXJuIGVudHJ5Lml0ZXJhdG9yLT5zZWNvbmQuZ2V0KCk7CisgICAgcmV0dXJuIGVu
dHJ5Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKIH0KIAogdm9pZCBKSVRUaHVua3M6OmNsZWFySG9z
dEZ1bmN0aW9uU3R1YnMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9QYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCmlu
ZGV4IDY5NDM5NzdhODVhNmZmN2M5MTFhNzJhNGM4MzliNjljMWQ3NDM4YWQuLjAzYzY2NWM3ZjU2
MDAyZjY0NzkxYmEyOGRjNTFiZWFkNDZiYjEzZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL1BhcnNlci5jcHAKQEAgLTEzMjUsMTAgKzEzMjUsMTAgQEAgdGVtcGxhdGUgPGNsYXNzIFRy
ZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VTdHJpY3RP
YmplY3QKICAgICAgICAgaWYgKCFtX3N5bnRheEFscmVhZHlWYWxpZGF0ZWQpIHsKICAgICAgICAg
ICAgIE9iamVjdFZhbGlkYXRpb25NYXA6OkFkZFJlc3VsdCBwcm9wZXJ0eUVudHJ5ID0gb2JqZWN0
VmFsaWRhdG9yLmFkZChjb250ZXh0LmdldE5hbWUocHJvcGVydHkpLmltcGwoKSwgY29udGV4dC5n
ZXRUeXBlKHByb3BlcnR5KSk7CiAgICAgICAgICAgICBpZiAoIXByb3BlcnR5RW50cnkuaXNOZXdF
bnRyeSkgewotICAgICAgICAgICAgICAgIGZhaWxJZlRydWUocHJvcGVydHlFbnRyeS5pdGVyYXRv
ci0+c2Vjb25kID09IFByb3BlcnR5Tm9kZTo6Q29uc3RhbnQpOworICAgICAgICAgICAgICAgIGZh
aWxJZlRydWUocHJvcGVydHlFbnRyeS5pdGVyYXRvci0+dmFsdWUgPT0gUHJvcGVydHlOb2RlOjpD
b25zdGFudCk7CiAgICAgICAgICAgICAgICAgZmFpbElmVHJ1ZShjb250ZXh0LmdldFR5cGUocHJv
cGVydHkpID09IFByb3BlcnR5Tm9kZTo6Q29uc3RhbnQpOwotICAgICAgICAgICAgICAgIGZhaWxJ
ZlRydWUoY29udGV4dC5nZXRUeXBlKHByb3BlcnR5KSAmIHByb3BlcnR5RW50cnkuaXRlcmF0b3It
PnNlY29uZCk7Ci0gICAgICAgICAgICAgICAgcHJvcGVydHlFbnRyeS5pdGVyYXRvci0+c2Vjb25k
IHw9IGNvbnRleHQuZ2V0VHlwZShwcm9wZXJ0eSk7CisgICAgICAgICAgICAgICAgZmFpbElmVHJ1
ZShjb250ZXh0LmdldFR5cGUocHJvcGVydHkpICYgcHJvcGVydHlFbnRyeS5pdGVyYXRvci0+dmFs
dWUpOworICAgICAgICAgICAgICAgIHByb3BlcnR5RW50cnkuaXRlcmF0b3ItPnZhbHVlIHw9IGNv
bnRleHQuZ2V0VHlwZShwcm9wZXJ0eSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAg
ICAgdGFpbCA9IGNvbnRleHQuY3JlYXRlUHJvcGVydHlMaXN0KG1fbGV4ZXItPmxhc3RMaW5lTnVt
YmVyKCksIHByb3BlcnR5LCB0YWlsKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wcm9maWxlci9Qcm9maWxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Q
cm9maWxlLmNwcAppbmRleCA0OWQ2ZGU5N2E5OGFiMGM1M2ZlZWE2NWIzODk2OWZkMzAxMTMzOTk3
Li4xM2RmODM3ZjIzNTI3MGUxNDI0MTc1MzJlZDgxNTc0Njk5ZTdiYThlIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZS5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGUuY3BwCkBAIC0xMDcsMjggKzEwNywyOCBAQCB2
b2lkIFByb2ZpbGU6OmRlYnVnUHJpbnREYXRhKCkgY29uc3QKICAgICBtX2hlYWQtPmRlYnVnUHJp
bnREYXRhKDApOwogfQogCi10eXBlZGVmIHBhaXI8U3RyaW5nSW1wbCosIHVuc2lnbmVkPiBOYW1l
Q291bnRQYWlyOwordHlwZWRlZiBXVEY6Okhhc2hNYXBFbnRyeTxGdW5jdGlvbkNhbGxIYXNoQ291
bnQ6OlZhbHVlVHlwZSwgdW5zaWduZWQ+IE5hbWVDb3VudEVudHJ5OwogCi1zdGF0aWMgaW5saW5l
IGJvb2wgZnVuY3Rpb25OYW1lQ291bnRQYWlyQ29tcGFyYXRvcihjb25zdCBOYW1lQ291bnRQYWly
JiBhLCBjb25zdCBOYW1lQ291bnRQYWlyJiBiKQorc3RhdGljIGlubGluZSBib29sIGZ1bmN0aW9u
TmFtZUNvdW50RW50cnlDb21wYXJhdG9yKGNvbnN0IE5hbWVDb3VudEVudHJ5JiBhLCBjb25zdCBO
YW1lQ291bnRFbnRyeSYgYikKIHsKLSAgICByZXR1cm4gYS5zZWNvbmQgPiBiLnNlY29uZDsKKyAg
ICByZXR1cm4gYS52YWx1ZSA+IGIudmFsdWU7CiB9CiAKIHZvaWQgUHJvZmlsZTo6ZGVidWdQcmlu
dERhdGFTYW1wbGVTdHlsZSgpIGNvbnN0CiB7Ci0gICAgdHlwZWRlZiBWZWN0b3I8TmFtZUNvdW50
UGFpcj4gTmFtZUNvdW50UGFpclZlY3RvcjsKKyAgICB0eXBlZGVmIFZlY3RvcjxOYW1lQ291bnRF
bnRyeT4gTmFtZUNvdW50RW50cnlWZWN0b3I7CiAKICAgICBGdW5jdGlvbkNhbGxIYXNoQ291bnQg
Y291bnRlZEZ1bmN0aW9uczsKICAgICBkYXRhTG9nKCJDYWxsIGdyYXBoOlxuIik7CiAgICAgbV9o
ZWFkLT5kZWJ1Z1ByaW50RGF0YVNhbXBsZVN0eWxlKDAsIGNvdW50ZWRGdW5jdGlvbnMpOwogCiAg
ICAgZGF0YUxvZygiXG5Ub3RhbCBudW1iZXIgaW4gc3RhY2s6XG4iKTsKLSAgICBOYW1lQ291bnRQ
YWlyVmVjdG9yIHNvcnRlZEZ1bmN0aW9ucyhjb3VudGVkRnVuY3Rpb25zLnNpemUoKSk7CisgICAg
TmFtZUNvdW50RW50cnlWZWN0b3Igc29ydGVkRnVuY3Rpb25zKGNvdW50ZWRGdW5jdGlvbnMuc2l6
ZSgpKTsKICAgICBjb3B5VG9WZWN0b3IoY291bnRlZEZ1bmN0aW9ucywgc29ydGVkRnVuY3Rpb25z
KTsKIAotICAgIHN0ZDo6c29ydChzb3J0ZWRGdW5jdGlvbnMuYmVnaW4oKSwgc29ydGVkRnVuY3Rp
b25zLmVuZCgpLCBmdW5jdGlvbk5hbWVDb3VudFBhaXJDb21wYXJhdG9yKTsKLSAgICBmb3IgKE5h
bWVDb3VudFBhaXJWZWN0b3I6Oml0ZXJhdG9yIGl0ID0gc29ydGVkRnVuY3Rpb25zLmJlZ2luKCk7
IGl0ICE9IHNvcnRlZEZ1bmN0aW9ucy5lbmQoKTsgKytpdCkKLSAgICAgICAgZGF0YUxvZygiICAg
ICAgICAlLTEyZCVzXG4iLCAoKml0KS5zZWNvbmQsIFVTdHJpbmcoKCppdCkuZmlyc3QpLnV0Zjgo
KS5kYXRhKCkpOworICAgIHN0ZDo6c29ydChzb3J0ZWRGdW5jdGlvbnMuYmVnaW4oKSwgc29ydGVk
RnVuY3Rpb25zLmVuZCgpLCBmdW5jdGlvbk5hbWVDb3VudEVudHJ5Q29tcGFyYXRvcik7CisgICAg
Zm9yIChOYW1lQ291bnRFbnRyeVZlY3Rvcjo6aXRlcmF0b3IgaXQgPSBzb3J0ZWRGdW5jdGlvbnMu
YmVnaW4oKTsgaXQgIT0gc29ydGVkRnVuY3Rpb25zLmVuZCgpOyArK2l0KQorICAgICAgICBkYXRh
TG9nKCIgICAgICAgICUtMTJkJXNcbiIsICgqaXQpLnZhbHVlLCBVU3RyaW5nKCgqaXQpLmtleSku
dXRmOCgpLmRhdGEoKSk7CiAKICAgICBkYXRhTG9nKCJcblNvcnQgYnkgdG9wIG9mIHN0YWNrLCBz
YW1lIGNvbGxhcHNlZCAod2hlbiA+PSA1KTpcbiIpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JZGVudGlmaWVyLmNwcAppbmRleCAxODJiY2M0NjIwMjJiNGVjMmNiYWM2ODU1
YzUwMjlmNjRjNzExZmZmLi45MjJjYWEyYjYwMDAwYmNjMTI3YzMzYzA5NTFmODNmZWRmNmIzMjUz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmNwcApAQCAt
MTA4LDcgKzEwOCw3IEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gSWRlbnRpZmllcjo6YWRkKEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgY2hhciogYykKIAogICAgIGNvbnN0IExpdGVy
YWxJZGVudGlmaWVyVGFibGU6Oml0ZXJhdG9yJiBpdGVyID0gbGl0ZXJhbElkZW50aWZpZXJUYWJs
ZS5maW5kKGMpOwogICAgIGlmIChpdGVyICE9IGxpdGVyYWxJZGVudGlmaWVyVGFibGUuZW5kKCkp
Ci0gICAgICAgIHJldHVybiBpdGVyLT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBpdGVyLT52YWx1
ZTsKIAogICAgIEhhc2hTZXQ8U3RyaW5nSW1wbCo+OjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gaWRl
bnRpZmllclRhYmxlLmFkZDxjb25zdCBMQ2hhciosIElkZW50aWZpZXJDU3RyaW5nVHJhbnNsYXRv
cj4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KGMpKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5jcHAKaW5kZXggM2UwNTczOGViNTRjN2Iw
NGNlZjcyYzE1YjNiYzI3ZTkzOGE4YzU1NC4uOWVjNjliM2M2MTI1MTNkNDMzZDA2ZmE5ODViZDNh
MDM1ZDA5ZWE3ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
Y3RpdmF0aW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2
YXRpb24uY3BwCkBAIC0xMjIsMTEgKzEyMiwxMSBAQCB2b2lkIEpTQWN0aXZhdGlvbjo6Z2V0T3du
UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3Blcgog
ICAgIEpTQWN0aXZhdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FjdGl2YXRpb24qPihvYmpl
Y3QpOwogICAgIFN5bWJvbFRhYmxlOjpjb25zdF9pdGVyYXRvciBlbmQgPSB0aGlzT2JqZWN0LT5z
eW1ib2xUYWJsZSgpLmVuZCgpOwogICAgIGZvciAoU3ltYm9sVGFibGU6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQuZ2V0QXR0cmlidXRlcygpICYgRG9udEVudW0gJiYg
bW9kZSAhPSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKQorICAgICAgICBpZiAoaXQtPnZhbHVl
LmdldEF0dHJpYnV0ZXMoKSAmIERvbnRFbnVtICYmIG1vZGUgIT0gSW5jbHVkZURvbnRFbnVtUHJv
cGVydGllcykKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoaXQtPnNlY29uZC5n
ZXRJbmRleCgpID49IHRoaXNPYmplY3QtPm1fbnVtQ2FwdHVyZWRWYXJzKQorICAgICAgICBpZiAo
aXQtPnZhbHVlLmdldEluZGV4KCkgPj0gdGhpc09iamVjdC0+bV9udW1DYXB0dXJlZFZhcnMpCiAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmll
cihleGVjLCBpdC0+Zmlyc3QuZ2V0KCkpKTsKKyAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRl
bnRpZmllcihleGVjLCBpdC0+a2V5LmdldCgpKSk7CiAgICAgfQogICAgIC8vIFNraXAgdGhlIEpT
VmFyaWFibGVPYmplY3QgaW1wbGVtZW50YXRpb24gb2YgZ2V0T3duUHJvcGVydHlOYW1lcwogICAg
IEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5
TmFtZXMsIG1vZGUpOwpAQCAtMTM5LDcgKzEzOSw3IEBAIGlubGluZSBib29sIEpTQWN0aXZhdGlv
bjo6c3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRlcyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
CiAgICAgU3ltYm9sVGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSBzeW1ib2xUYWJsZSgpLmZpbmQocHJv
cGVydHlOYW1lLmltcGwoKSk7CiAgICAgaWYgKGl0ZXIgPT0gc3ltYm9sVGFibGUoKS5lbmQoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFN5bWJvbFRhYmxlRW50cnkmIGVudHJ5ID0gaXRl
ci0+c2Vjb25kOworICAgIFN5bWJvbFRhYmxlRW50cnkmIGVudHJ5ID0gaXRlci0+dmFsdWU7CiAg
ICAgQVNTRVJUKCFlbnRyeS5pc051bGwoKSk7CiAgICAgaWYgKGVudHJ5LmdldEluZGV4KCkgPj0g
bV9udW1DYXB0dXJlZFZhcnMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKaW5kZXggMGZmYTA3NmNlYWYwOTYwNGZhYmFiYzBm
Njk1N2MxNTZmMWYxYWUzMS4uMjA2NWU3NjBiYmViNmUyZTljNDc4ZDI3YTBlYTQ0NGViNDM4YjVi
MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKQEAgLTIxMCw3
ICsyMTAsNyBAQCBpbmxpbmUgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6QWRkUmVzdWx0IFNwYXJzZUFy
cmF5VmFsdWVNYXA6OmFkZChKU0FycmF5KiBhcnJheSwgdQogaW5saW5lIHZvaWQgU3BhcnNlQXJy
YXlWYWx1ZU1hcDo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJheSogYXJyYXksIHVuc2lnbmVk
IGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCiB7CiAgICAgQWRkUmVzdWx0IHJl
c3VsdCA9IGFkZChhcnJheSwgaSk7Ci0gICAgU3BhcnNlQXJyYXlFbnRyeSYgZW50cnkgPSByZXN1
bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBTcGFyc2VBcnJheUVudHJ5JiBlbnRyeSA9IHJlc3Vs
dC5pdGVyYXRvci0+dmFsdWU7CiAKICAgICAvLyBUbyBzYXZlIGEgc2VwYXJhdGUgZmluZCAmIGFk
ZCwgd2UgZmlyc3QgYWx3YXlzIGFkZCB0byB0aGUgc3BhcnNlIG1hcC4KICAgICAvLyBJbiB0aGUg
dW5jb21tb24gY2FzZSB0aGF0IHRoaXMgaXMgYSBuZXcgcHJvcGVydHksIGFuZCB0aGUgYXJyYXkg
aXMgbm90CkBAIC0yNTMsNyArMjUzLDcgQEAgaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1h
cDo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJheSogYXJyYXksIHVuc2lnbmVkIGkKIGlubGlu
ZSBib29sIFNwYXJzZUFycmF5VmFsdWVNYXA6OnB1dERpcmVjdChFeGVjU3RhdGUqIGV4ZWMsIEpT
QXJyYXkqIGFycmF5LCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93
KQogewogICAgIEFkZFJlc3VsdCByZXN1bHQgPSBhZGQoYXJyYXksIGkpOwotICAgIFNwYXJzZUFy
cmF5RW50cnkmIGVudHJ5ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgU3BhcnNlQXJy
YXlFbnRyeSYgZW50cnkgPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogCiAgICAgLy8gVG8gc2F2
ZSBhIHNlcGFyYXRlIGZpbmQgJiBhZGQsIHdlIGZpcnN0IGFsd2F5cyBhZGQgdG8gdGhlIHNwYXJz
ZSBtYXAuCiAgICAgLy8gSW4gdGhlIHVuY29tbW9uIGNhc2UgdGhhdCB0aGlzIGlzIGEgbmV3IHBy
b3BlcnR5LCBhbmQgdGhlIGFycmF5IGlzIG5vdApAQCAtMzE5LDcgKzMxOSw3IEBAIGlubGluZSB2
b2lkIFNwYXJzZUFycmF5VmFsdWVNYXA6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgaXRlcmF0b3IgZW5kID0gbV9tYXAuZW5kKCk7CiAgICAgZm9yIChpdGVyYXRv
ciBpdCA9IG1fbWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgdmlzaXRvci5h
cHBlbmQoJml0LT5zZWNvbmQpOworICAgICAgICB2aXNpdG9yLmFwcGVuZCgmaXQtPnZhbHVlKTsK
IH0KIAogdm9pZCBKU0FycmF5OjphbGxvY2F0ZVNwYXJzZU1hcChKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEpCkBAIC0zNTUsNyArMzU1LDcgQEAgdm9pZCBKU0FycmF5OjplbnRlckRpY3Rpb25hcnlN
b2RlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKICAgICAgICAgLy8gVGhpcyB3aWxsIGFsd2F5
cyBiZSBhIG5ldyBlbnRyeSBpbiB0aGUgbWFwLCBzbyBubyBuZWVkIHRvIGNoZWNrIHdlIGNhbiB3
cml0ZSwKICAgICAgICAgLy8gYW5kIGF0dHJpYnV0ZXMgYXJlIGRlZmF1bHQgc28gbm8gbmVlZCB0
byBzZXQgdGhlbS4KICAgICAgICAgaWYgKHZhbHVlKQotICAgICAgICAgICAgbWFwLT5hZGQodGhp
cywgaSkuaXRlcmF0b3ItPnNlY29uZC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAg
ICAgICAgICAgbWFwLT5hZGQodGhpcywgaSkuaXRlcmF0b3ItPnZhbHVlLnNldChnbG9iYWxEYXRh
LCB0aGlzLCB2YWx1ZSk7CiAgICAgfQogCiAgICAgdm9pZCogbmV3UmF3U3RvcmFnZSA9IDA7CkBA
IC00MzEsNyArNDMxLDcgQEAgYm9vbCBKU0FycmF5OjpkZWZpbmVPd25OdW1lcmljUHJvcGVydHko
RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHkKIAogICAgIC8vIDEuIExl
dCBjdXJyZW50IGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tHZXRPd25Qcm9wZXJ0eV1d
IGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggcHJvcGVydHkgbmFtZSBQLgogICAgIFNwYXJzZUFy
cmF5VmFsdWVNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtYXAtPmFkZCh0aGlzLCBpbmRleCk7Ci0g
ICAgU3BhcnNlQXJyYXlFbnRyeSogZW50cnlJbk1hcCA9ICZyZXN1bHQuaXRlcmF0b3ItPnNlY29u
ZDsKKyAgICBTcGFyc2VBcnJheUVudHJ5KiBlbnRyeUluTWFwID0gJnJlc3VsdC5pdGVyYXRvci0+
dmFsdWU7CiAKICAgICAvLyAyLiBMZXQgZXh0ZW5zaWJsZSBiZSB0aGUgdmFsdWUgb2YgdGhlIFtb
RXh0ZW5zaWJsZV1dIGludGVybmFsIHByb3BlcnR5IG9mIE8uCiAgICAgLy8gMy4gSWYgY3VycmVu
dCBpcyB1bmRlZmluZWQgYW5kIGV4dGVuc2libGUgaXMgZmFsc2UsIHRoZW4gUmVqZWN0LgpAQCAt
NjYzLDcgKzY2Myw3IEBAIGJvb2wgSlNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChK
U0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQKICAgICB9IGVsc2UgaWYgKFNw
YXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHRoaXNPYmplY3QtPm1fc3BhcnNlVmFsdWVNYXApIHsK
ICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAtPmZpbmQoaSk7
CiAgICAgICAgIGlmIChpdCAhPSBtYXAtPm5vdEZvdW5kKCkpIHsKLSAgICAgICAgICAgIGl0LT5z
ZWNvbmQuZ2V0KHNsb3QpOworICAgICAgICAgICAgaXQtPnZhbHVlLmdldChzbG90KTsKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQpAQCAtNzExLDcgKzcxMSw3IEBA
IGJvb2wgSlNBcnJheTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3Qs
IEV4ZWNTdGF0ZSogZXhlYywgY29uc3QKICAgICAgICAgfSBlbHNlIGlmIChTcGFyc2VBcnJheVZh
bHVlTWFwKiBtYXAgPSB0aGlzT2JqZWN0LT5tX3NwYXJzZVZhbHVlTWFwKSB7CiAgICAgICAgICAg
ICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+ZmluZChpKTsKICAgICAg
ICAgICAgIGlmIChpdCAhPSBtYXAtPm5vdEZvdW5kKCkpIHsKLSAgICAgICAgICAgICAgICBpdC0+
c2Vjb25kLmdldChkZXNjcmlwdG9yKTsKKyAgICAgICAgICAgICAgICBpdC0+dmFsdWUuZ2V0KGRl
c2NyaXB0b3IpOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CkBAIC04NDQsNyArODQ0LDcgQEAgdm9pZCBKU0FycmF5OjpwdXRCeUluZGV4QmV5
b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZQogICAg
IFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7CiAgICAg
U3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKICAg
ICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHZlY3RvcltpdC0+Zmlyc3RdLnNldChnbG9i
YWxEYXRhLCB0aGlzLCBpdC0+c2Vjb25kLmdldE5vblNwYXJzZU1vZGUoKSk7CisgICAgICAgIHZl
Y3RvcltpdC0+a2V5XS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgaXQtPnZhbHVlLmdldE5vblNwYXJz
ZU1vZGUoKSk7CiAgICAgZGVhbGxvY2F0ZVNwYXJzZU1hcCgpOwogCiAgICAgLy8gU3RvcmUgdGhl
IG5ldyBwcm9wZXJ0eSBpbnRvIHRoZSB2ZWN0b3IuCkBAIC05MTQsNyArOTE0LDcgQEAgYm9vbCBK
U0FycmF5OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqIGV4ZWMs
IHVuc2lnbmVkIGksIEpTVmEKICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvciA9IHN0
b3JhZ2UtPm1fdmVjdG9yOwogICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IG1hcC0+ZW5kKCk7CiAgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICB2ZWN0
b3JbaXQtPmZpcnN0XS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgaXQtPnNlY29uZC5nZXROb25TcGFy
c2VNb2RlKCkpOworICAgICAgICB2ZWN0b3JbaXQtPmtleV0uc2V0KGdsb2JhbERhdGEsIHRoaXMs
IGl0LT52YWx1ZS5nZXROb25TcGFyc2VNb2RlKCkpOwogICAgIGRlYWxsb2NhdGVTcGFyc2VNYXAo
KTsKIAogICAgIC8vIFN0b3JlIHRoZSBuZXcgcHJvcGVydHkgaW50byB0aGUgdmVjdG9yLgpAQCAt
OTU4LDcgKzk1OCw3IEBAIGJvb2wgSlNBcnJheTo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2Vs
bCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpKQogICAgIH0gZWxzZSBpZiAoU3Bh
cnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gdGhpc09iamVjdC0+bV9zcGFyc2VWYWx1ZU1hcCkgewog
ICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+ZmluZChpKTsK
ICAgICAgICAgaWYgKGl0ICE9IG1hcC0+bm90Rm91bmQoKSkgewotICAgICAgICAgICAgaWYgKGl0
LT5zZWNvbmQuYXR0cmlidXRlcyAmIERvbnREZWxldGUpCisgICAgICAgICAgICBpZiAoaXQtPnZh
bHVlLmF0dHJpYnV0ZXMgJiBEb250RGVsZXRlKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgICAgIG1hcC0+cmVtb3ZlKGl0KTsKICAgICAgICAgfQpAQCAtOTk2LDggKzk5
Niw4IEBAIHZvaWQgSlNBcnJheTo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0
LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtCiAgICAgICAgIAogICAgICAgICBTcGFyc2VB
cnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwogICAgICAgICBm
b3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250
RW51bVByb3BlcnRpZXMgfHwgIShpdC0+c2Vjb25kLmF0dHJpYnV0ZXMgJiBEb250RW51bSkpCi0g
ICAgICAgICAgICAgICAga2V5cy5hcHBlbmQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGl0LT5maXJz
dCkpOworICAgICAgICAgICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcyB8
fCAhKGl0LT52YWx1ZS5hdHRyaWJ1dGVzICYgRG9udEVudW0pKQorICAgICAgICAgICAgICAgIGtl
eXMuYXBwZW5kKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpdC0+a2V5KSk7CiAgICAgICAgIH0KIAog
ICAgICAgICBxc29ydChrZXlzLmJlZ2luKCksIGtleXMuc2l6ZSgpLCBzaXplb2YodW5zaWduZWQp
LCBjb21wYXJlS2V5c0ZvclFTb3J0KTsKQEAgLTExOTAsNyArMTE5MCw3IEBAIGJvb2wgSlNBcnJh
eTo6c2V0TGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgbmV3TGVuZ3RoLCBib29sIHRo
cm93RXhjZXB0aW9uCiAgICAgICAgICAgICBrZXlzLnJlc2VydmVDYXBhY2l0eShtaW4obWFwLT5z
aXplKCksIHN0YXRpY19jYXN0PHNpemVfdD4obGVuZ3RoIC0gbmV3TGVuZ3RoKSkpOwogICAgICAg
ICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQo
KTsKICAgICAgICAgICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGl0LT5maXJzdCk7CisgICAgICAg
ICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaXQtPmtleSk7
CiAgICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgbGVuZ3RoICYmIGluZGV4ID49IG5ld0xlbmd0
aCkKICAgICAgICAgICAgICAgICAgICAga2V5cy5hcHBlbmQoaW5kZXgpOwogICAgICAgICAgICAg
fQpAQCAtMTIwNSw3ICsxMjA1LDcgQEAgYm9vbCBKU0FycmF5OjpzZXRMZW5ndGgoRXhlY1N0YXRl
KiBleGVjLCB1bnNpZ25lZCBuZXdMZW5ndGgsIGJvb2wgdGhyb3dFeGNlcHRpb24KICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBrZXlzWy0taV07CiAgICAgICAgICAgICAgICAg
ICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLT5maW5kKGluZGV4KTsK
ICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGl0ICE9IG1hcC0+bm90Rm91bmQoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChpdC0+c2Vjb25kLmF0dHJpYnV0ZXMgJiBEb250RGVsZXRlKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmIChpdC0+dmFsdWUuYXR0cmlidXRlcyAmIERvbnREZWxl
dGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UtPm1fbGVuZ3RoID0gaW5kZXgg
KyAxOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4
Y2VwdGlvbiwgIlVuYWJsZSB0byBkZWxldGUgcHJvcGVydHkuIik7CiAgICAgICAgICAgICAgICAg
ICAgIH0KQEAgLTE2NzAsNyArMTY3MCw3IEBAIHZvaWQgSlNBcnJheTo6c29ydChFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgY29tcGFyZUZ1bmN0aW9uLCBDYWxsVHlwZSBjYWxsVHlwZSwKIAogICAg
ICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgp
OwogICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIHRyZWUuYWJzdHJh
Y3RvcigpLm1fbm9kZXNbbnVtRGVmaW5lZF0udmFsdWUgPSBpdC0+c2Vjb25kLmdldE5vblNwYXJz
ZU1vZGUoKTsKKyAgICAgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbbnVtRGVmaW5l
ZF0udmFsdWUgPSBpdC0+dmFsdWUuZ2V0Tm9uU3BhcnNlTW9kZSgpOwogICAgICAgICAgICAgdHJl
ZS5pbnNlcnQobnVtRGVmaW5lZCk7CiAgICAgICAgICAgICArK251bURlZmluZWQ7CiAgICAgICAg
IH0KQEAgLTE3ODUsNyArMTc4NSw3IEBAIHVuc2lnbmVkIEpTQXJyYXk6OmNvbXBhY3RGb3JTb3J0
aW5nKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKIAogICAgICAgICBTcGFyc2VBcnJheVZhbHVl
TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwogICAgICAgICBmb3IgKFNwYXJz
ZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpCi0gICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltudW1EZWZpbmVkKytdLnNl
dFdpdGhvdXRXcml0ZUJhcnJpZXIoaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCkpOworICAg
ICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbbnVtRGVmaW5lZCsrXS5zZXRXaXRob3V0V3JpdGVC
YXJyaWVyKGl0LT52YWx1ZS5nZXROb25TcGFyc2VNb2RlKCkpOwogCiAgICAgICAgIGRlYWxsb2Nh
dGVTcGFyc2VNYXAoKTsKICAgICB9CkBAIC0xODQyLDEzICsxODQyLDEzIEBAIHZvaWQgSlNBcnJh
eTo6Y2hlY2tDb25zaXN0ZW5jeShDb25zaXN0ZW5jeUNoZWNrVHlwZSB0eXBlKQogICAgIGlmICht
X3NwYXJzZVZhbHVlTWFwKSB7CiAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6Oml0ZXJhdG9y
IGVuZCA9IG1fc3BhcnNlVmFsdWVNYXAtPmVuZCgpOwogICAgICAgICBmb3IgKFNwYXJzZUFycmF5
VmFsdWVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zcGFyc2VWYWx1ZU1hcC0+YmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGl0LT5maXJzdDsKKyAg
ICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gaXQtPmtleTsKICAgICAgICAgICAgIEFTU0VSVChp
bmRleCA8IHN0b3JhZ2UtPm1fbGVuZ3RoKTsKICAgICAgICAgICAgIEFTU0VSVChpbmRleCA+PSBz
dG9yYWdlLT5tX3ZlY3Rvckxlbmd0aCk7CiAgICAgICAgICAgICBBU1NFUlQoaW5kZXggPD0gTUFY
X0FSUkFZX0lOREVYKTsKLSAgICAgICAgICAgIEFTU0VSVChpdC0+c2Vjb25kKTsKKyAgICAgICAg
ICAgIEFTU0VSVChpdC0+dmFsdWUpOwogICAgICAgICAgICAgaWYgKHR5cGUgIT0gRGVzdHJ1Y3Rv
ckNvbnNpc3RlbmN5Q2hlY2spCi0gICAgICAgICAgICAgICAgaXQtPnNlY29uZC5pc1VuZGVmaW5l
ZCgpOyAvLyBMaWtlbHkgdG8gY3Jhc2ggaWYgdGhlIG9iamVjdCB3YXMgZGVhbGxvY2F0ZWQuCisg
ICAgICAgICAgICAgICAgaXQtPnZhbHVlLmlzVW5kZWZpbmVkKCk7IC8vIExpa2VseSB0byBjcmFz
aCBpZiB0aGUgb2JqZWN0IHdhcyBkZWFsbG9jYXRlZC4KICAgICAgICAgfQogICAgIH0KIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFyaWFibGVPYmplY3Qu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5jcHAK
aW5kZXggOGNhNjk1MDc0NTExOWMwNDk2ZjdkNmUwMWRjMWNlYzhmMjg5NGQ5OC4uN2MyZjZhM2Iy
NjAwZjA3YjM3NGM0ZWViNGU5NTNjOWMzODBjN2NlMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5jcHAKQEAgLTU2LDggKzU2LDggQEAg
dm9pZCBKU1ZhcmlhYmxlT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmpl
Y3QsIEV4ZWNTdGF0ZSogZXhlYywgUHIKICAgICBKU1ZhcmlhYmxlT2JqZWN0KiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTVmFyaWFibGVPYmplY3QqPihvYmplY3QpOwogICAgIFN5bWJvbFRhYmxlOjpj
b25zdF9pdGVyYXRvciBlbmQgPSB0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgpLmVuZCgpOwogICAg
IGZvciAoU3ltYm9sVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdGhpc09iamVjdC0+c3ltYm9s
VGFibGUoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKCEoaXQtPnNl
Y29uZC5nZXRBdHRyaWJ1dGVzKCkgJiBEb250RW51bSkgfHwgKG1vZGUgPT0gSW5jbHVkZURvbnRF
bnVtUHJvcGVydGllcykpCi0gICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVy
KGV4ZWMsIGl0LT5maXJzdC5nZXQoKSkpOworICAgICAgICBpZiAoIShpdC0+dmFsdWUuZ2V0QXR0
cmlidXRlcygpICYgRG9udEVudW0pIHx8IChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRp
ZXMpKQorICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihleGVjLCBpdC0+
a2V5LmdldCgpKSk7CiAgICAgfQogICAgIAogICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5h
bWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5oCmluZGV4IGJjZmU0YWI4
OTVmNjBhOTkyOGM0MjE5YTRiNDFkMzZlMTczYzRjYWQuLmFlM2ExZGY1ZDFlYmM3OTczNzZkZWQ1
ODYyZWEyNTI1ZjdiMzgwNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTVmFyaWFibGVPYmplY3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1ZhcmlhYmxlT2JqZWN0LmgKQEAgLTE0NSw3ICsxNDUsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgU3ltYm9sVGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSBzeW1ib2xUYWJsZSgpLmZpbmQo
cHJvcGVydHlOYW1lLmltcGwoKSk7CiAgICAgICAgIGlmIChpdGVyID09IHN5bWJvbFRhYmxlKCku
ZW5kKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIFN5bWJvbFRhYmxlRW50
cnkmIGVudHJ5ID0gaXRlci0+c2Vjb25kOworICAgICAgICBTeW1ib2xUYWJsZUVudHJ5JiBlbnRy
eSA9IGl0ZXItPnZhbHVlOwogICAgICAgICBBU1NFUlQoIWVudHJ5LmlzTnVsbCgpKTsKICAgICAg
ICAgZW50cnkuc2V0QXR0cmlidXRlcyhhdHRyaWJ1dGVzKTsKICAgICAgICAgcmVnaXN0ZXJBdChl
bnRyeS5nZXRJbmRleCgpKS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGUuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGUuY3BwCmluZGV4IGQ1ZWRiYmM3ZjM0
NmJmMjNmMjVkMGYwMTYxY2JiZjU3M2Y0NDA1ZDAuLjQzYjQ3YWJlOTJkMzQ4YmE0NzUyMWJmMGM4
MTJlMTk0N2ZiYmRiNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1JlZ0V4cENhY2hlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdF
eHBDYWNoZS5jcHAKQEAgLTM4LDcgKzM4LDcgQEAgUmVnRXhwKiBSZWdFeHBDYWNoZTo6bG9va3Vw
T3JDcmVhdGUoY29uc3QgVVN0cmluZyYgcGF0dGVyblN0cmluZywgUmVnRXhwRmxhZ3MgZmwKICAg
ICBSZWdFeHBLZXkga2V5KGZsYWdzLCBwYXR0ZXJuU3RyaW5nKTsKICAgICBSZWdFeHBDYWNoZU1h
cDo6aXRlcmF0b3IgcmVzdWx0ID0gbV93ZWFrQ2FjaGUuZmluZChrZXkpOwogICAgIGlmIChyZXN1
bHQgIT0gbV93ZWFrQ2FjaGUuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZC5n
ZXQoKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWUuZ2V0KCk7CiAgICAgUmVnRXhwKiBy
ZWdFeHAgPSBSZWdFeHA6OmNyZWF0ZVdpdGhvdXRDYWNoaW5nKCptX2dsb2JhbERhdGEsIHBhdHRl
cm5TdHJpbmcsIGZsYWdzKTsKICNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCiAgICAgbV9nbG9i
YWxEYXRhLT5hZGRSZWdFeHBUb1RyYWNlKHJlZ0V4cCk7CkBAIC04MSw3ICs4MSw3IEBAIHZvaWQg
UmVnRXhwQ2FjaGU6OmludmFsaWRhdGVDb2RlKCkKICAgICBtX25leHRFbnRyeUluU3Ryb25nQ2Fj
aGUgPSAwOwogICAgIFJlZ0V4cENhY2hlTWFwOjppdGVyYXRvciBlbmQgPSBtX3dlYWtDYWNoZS5l
bmQoKTsKICAgICBmb3IgKFJlZ0V4cENhY2hlTWFwOjppdGVyYXRvciBwdHIgPSBtX3dlYWtDYWNo
ZS5iZWdpbigpOyBwdHIgIT0gZW5kOyArK3B0cikKLSAgICAgICAgcHRyLT5zZWNvbmQtPmludmFs
aWRhdGVDb2RlKCk7CisgICAgICAgIHB0ci0+dmFsdWUtPmludmFsaWRhdGVDb2RlKCk7CiB9CiAK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ01hcC5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha0dDTWFwLmgKaW5kZXggZjAxYTBj
ODI2YjFjNDdmNzc0YmEzNzFiMzMyYzZhZTNkNzRiYzgwNS4uMjUyZTg0ZjkwYWE2YjJjNWVlMjZk
ZjdjODI2Zjk1MDE1ZmZmMmU2YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvV2Vha0dDTWFwLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vh
a0dDTWFwLmgKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogICAgICAgICB7CiAgICAgICAgIH0K
ICAgICAgICAgCi0gICAgICAgIHN0ZDo6cGFpcjxLZXlUeXBlLCBFeHRlcm5hbFR5cGU+IGdldCgp
IGNvbnN0IHsgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKG1faXRlcmF0b3ItPmZpcnN0LCBIYW5kbGVU
eXBlczxNYXBwZWRUeXBlPjo6Z2V0RnJvbVNsb3QobV9pdGVyYXRvci0+c2Vjb25kKSk7IH0KKyAg
ICAgICAgc3RkOjpwYWlyPEtleVR5cGUsIEV4dGVybmFsVHlwZT4gZ2V0KCkgY29uc3QgeyByZXR1
cm4gc3RkOjptYWtlX3BhaXIobV9pdGVyYXRvci0+a2V5LCBIYW5kbGVUeXBlczxNYXBwZWRUeXBl
Pjo6Z2V0RnJvbVNsb3QobV9pdGVyYXRvci0+dmFsdWUpKTsgfQogICAgICAgICBzdGQ6OnBhaXI8
S2V5VHlwZSwgSGFuZGxlU2xvdD4gZ2V0U2xvdCgpIGNvbnN0IHsgcmV0dXJuICptX2l0ZXJhdG9y
OyB9CiAgICAgICAgIAogICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpIHsgKyttX2l0ZXJh
dG9yOyByZXR1cm4gKnRoaXM7IH0KQEAgLTkwLDcgKzkwLDcgQEAgcHVibGljOgogICAgIHsKICAg
ICAgICAgbWFwX2l0ZXJhdG9yIGVuZCA9IG1fbWFwLmVuZCgpOwogICAgICAgICBmb3IgKG1hcF9p
dGVyYXRvciBwdHIgPSBtX21hcC5iZWdpbigpOyBwdHIgIT0gZW5kOyArK3B0cikKLSAgICAgICAg
ICAgIEhhbmRsZUhlYXA6OmhlYXBGb3IocHRyLT5zZWNvbmQpLT5kZWFsbG9jYXRlKHB0ci0+c2Vj
b25kKTsKKyAgICAgICAgICAgIEhhbmRsZUhlYXA6OmhlYXBGb3IocHRyLT52YWx1ZSktPmRlYWxs
b2NhdGUocHRyLT52YWx1ZSk7CiAgICAgICAgIG1fbWFwLmNsZWFyKCk7CiAgICAgfQogCkBAIC0x
MDcsNyArMTA3LDcgQEAgcHVibGljOgogICAgIHZvaWQgcmVtb3ZlKGl0ZXJhdG9yIGl0ZXIpCiAg
ICAgewogICAgICAgICBBU1NFUlQoaXRlci5tX2l0ZXJhdG9yICE9IG1fbWFwLmVuZCgpKTsKLSAg
ICAgICAgSGFuZGxlU2xvdCBzbG90ID0gaXRlci5tX2l0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAg
IEhhbmRsZVNsb3Qgc2xvdCA9IGl0ZXIubV9pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgIEFTU0VS
VChzbG90KTsKICAgICAgICAgSGFuZGxlSGVhcDo6aGVhcEZvcihzbG90KS0+ZGVhbGxvY2F0ZShz
bG90KTsKICAgICAgICAgbV9tYXAucmVtb3ZlKGl0ZXIubV9pdGVyYXRvcik7CkBAIC0xMjgsNyAr
MTI4LDcgQEAgcHVibGljOgogICAgICAgICB0eXBlbmFtZSBNYXBUeXBlOjpBZGRSZXN1bHQgcmVz
dWx0ID0gbV9tYXAuYWRkKGtleSwgMCk7CiAgICAgICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkg
ewogICAgICAgICAgICAgSGFuZGxlU2xvdCBzbG90ID0gZ2xvYmFsRGF0YS5oZWFwLmhhbmRsZUhl
YXAoKS0+YWxsb2NhdGUoKTsKLSAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0g
c2xvdDsKKyAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBzbG90OwogICAgICAg
ICAgICAgSGFuZGxlSGVhcDo6aGVhcEZvcihzbG90KS0+bWFrZVdlYWsoc2xvdCwgdGhpcywgRmlu
YWxpemVyQ2FsbGJhY2s6OmZpbmFsaXplckNvbnRleHRGb3Ioa2V5KSk7CiAgICAgICAgICAgICBI
YW5kbGVIZWFwOjpoZWFwRm9yKHNsb3QpLT53cml0ZUJhcnJpZXIoc2xvdCwgdmFsdWUpOwogICAg
ICAgICAgICAgKnNsb3QgPSB2YWx1ZTsKQEAgLTEzOSw3ICsxMzksNyBAQCBwdWJsaWM6CiAgICAg
CiAgICAgdm9pZCBzZXQoaXRlcmF0b3IgaXRlciwgRXh0ZXJuYWxUeXBlIHZhbHVlKQogICAgIHsK
LSAgICAgICAgSGFuZGxlU2xvdCBzbG90ID0gaXRlci5tX2l0ZXJhdG9yLT5zZWNvbmQ7CisgICAg
ICAgIEhhbmRsZVNsb3Qgc2xvdCA9IGl0ZXIubV9pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgIEFT
U0VSVChzbG90KTsKICAgICAgICAgSGFuZGxlSGVhcDo6aGVhcEZvcihzbG90KS0+d3JpdGVCYXJy
aWVyKHNsb3QsIHZhbHVlKTsKICAgICAgICAgKnNsb3QgPSB2YWx1ZTsKQEAgLTE0OCwxMSArMTQ4
LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNv
bnN0IEtleVR5cGUmIGtleSwgRXh0ZXJuYWxUeXBlIHZhbHVlKQogICAgIHsKICAgICAgICAgdHlw
ZW5hbWUgTWFwVHlwZTo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fbWFwLmFkZChrZXksIDApOwotICAg
ICAgICBIYW5kbGVTbG90IHNsb3QgPSByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAg
SGFuZGxlU2xvdCBzbG90ID0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgaWYgKHJl
c3VsdC5pc05ld0VudHJ5KSB7CiAgICAgICAgICAgICBzbG90ID0gZ2xvYmFsRGF0YS5oZWFwLmhh
bmRsZUhlYXAoKS0+YWxsb2NhdGUoKTsKICAgICAgICAgICAgIEhhbmRsZUhlYXA6OmhlYXBGb3Io
c2xvdCktPm1ha2VXZWFrKHNsb3QsIHRoaXMsIGtleSk7Ci0gICAgICAgICAgICByZXN1bHQuaXRl
cmF0b3ItPnNlY29uZCA9IHNsb3Q7CisgICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVl
ID0gc2xvdDsKICAgICAgICAgfQogICAgICAgICBIYW5kbGVIZWFwOjpoZWFwRm9yKHNsb3QpLT53
cml0ZUJhcnJpZXIoc2xvdCwgdmFsdWUpOwogICAgICAgICAqc2xvdCA9IHZhbHVlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1Byb2ZpbGVUcmVlTm9kZS5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1Byb2ZpbGVUcmVlTm9kZS5oCmluZGV4IDlkZTM5YWQ4
YTI5ODYyMmM0MzNhNjdlYjY0YTcyMjA0ZGUxOWU2YzIuLmUyZjkzMjNhMmE1NjVmYTkyNzZkNDA5
YjI5ZGI1YjNlN2YxYzQyM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29s
cy9Qcm9maWxlVHJlZU5vZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvUHJv
ZmlsZVRyZWVOb2RlLmgKQEAgLTMwLDcgKzMwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNz
IFByb2ZpbGVUcmVlTm9kZSB7CiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUHJvZmlsZVRy
ZWVOb2RlPiBNYXA7Ci0gICAgdHlwZWRlZiBzdGQ6OnBhaXI8U3RyaW5nLCBQcm9maWxlVHJlZU5v
ZGU+IE1hcEVudHJ5OworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFByb2ZpbGVUcmVlTm9k
ZT46OlZhbHVlVHlwZSBNYXBFbnRyeTsKIAogcHVibGljOgogICAgIFByb2ZpbGVUcmVlTm9kZSgp
CkBAIC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICAKICAgICAgICAgUHJvZmlsZVRyZWVOb2Rl
IG5ld0VudHJ5OwogICAgICAgICBNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX2NoaWxkcmVuLT5h
ZGQoU3RyaW5nKG5hbWUpLCBuZXdFbnRyeSk7Ci0gICAgICAgIFByb2ZpbGVUcmVlTm9kZSogY2hp
bGRJbk1hcCA9ICZyZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgUHJvZmlsZVRyZWVO
b2RlKiBjaGlsZEluTWFwID0gJnJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgICsrY2hp
bGRJbk1hcC0+bV9jb3VudDsKICAgICAgICAgcmV0dXJuIGNoaWxkSW5NYXA7CiAgICAgfQpAQCAt
NzIsNyArNzIsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgdWlu
dDY0X3QgY2hpbGRDb3VudCA9IDA7CiAgICAgICAgIGZvciAoTWFwOjppdGVyYXRvciBpdCA9IG1f
Y2hpbGRyZW4tPmJlZ2luKCk7IGl0ICE9IG1fY2hpbGRyZW4tPmVuZCgpOyArK2l0KQotICAgICAg
ICAgICAgY2hpbGRDb3VudCArPSBpdC0+c2Vjb25kLmNvdW50KCk7CisgICAgICAgICAgICBjaGls
ZENvdW50ICs9IGl0LT52YWx1ZS5jb3VudCgpOwogICAgICAgICByZXR1cm4gY2hpbGRDb3VudDsK
ICAgICB9CiAgICAgCkBAIC05NywxOSArOTcsMTkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbmRlbnQ7ICsraSkKICAgICAgICAgICAgICAgICBkYXRh
TG9nKCIgICAgIik7CiAgICAgICAgICAgICBkYXRhTG9nKCIlIDhsbGQ6ICVzICglbGxkIHN0YWNr
IHRvcClcbiIsCi0gICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihlbnRyeS0+
c2Vjb25kLmNvdW50KCkpLAotICAgICAgICAgICAgICAgIGVudHJ5LT5maXJzdC51dGY4KCkuZGF0
YSgpLAotICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oZW50cnktPnNlY29u
ZC5jb3VudCgpIC0gZW50cnktPnNlY29uZC5jaGlsZENvdW50KCkpKTsKKyAgICAgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KGVudHJ5LT52YWx1ZS5jb3VudCgpKSwKKyAgICAgICAg
ICAgICAgICBlbnRyeS0+a2V5LnV0ZjgoKS5kYXRhKCksCisgICAgICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8bG9uZyBsb25nPihlbnRyeS0+dmFsdWUuY291bnQoKSAtIGVudHJ5LT52YWx1ZS5jaGls
ZENvdW50KCkpKTsKIAogICAgICAgICAgICAgLy8gUmVjdXJzaXZlbHkgZHVtcCB0aGUgY2hpbGQg
bm9kZXMuCi0gICAgICAgICAgICBlbnRyeS0+c2Vjb25kLmR1bXBJbnRlcm5hbChpbmRlbnQgKyAx
KTsKKyAgICAgICAgICAgIGVudHJ5LT52YWx1ZS5kdW1wSW50ZXJuYWwoaW5kZW50ICsgMSk7CiAg
ICAgICAgIH0KICAgICB9CiAKICAgICBzdGF0aWMgaW50IGNvbXBhcmVFbnRyaWVzKGNvbnN0IHZv
aWQqIGEsIGNvbnN0IHZvaWQqIGIpCiAgICAgewotICAgICAgICB1aW50NjRfdCBkYSA9ICgqc3Rh
dGljX2Nhc3Q8TWFwRW50cnkqIGNvbnN0ICo+KGEpKS0+c2Vjb25kLmNvdW50KCk7Ci0gICAgICAg
IHVpbnQ2NF90IGRiID0gKCpzdGF0aWNfY2FzdDxNYXBFbnRyeSogY29uc3QgKj4oYikpLT5zZWNv
bmQuY291bnQoKTsKKyAgICAgICAgdWludDY0X3QgZGEgPSAoKnN0YXRpY19jYXN0PE1hcEVudHJ5
KiBjb25zdCAqPihhKSktPnZhbHVlLmNvdW50KCk7CisgICAgICAgIHVpbnQ2NF90IGRiID0gKCpz
dGF0aWNfY2FzdDxNYXBFbnRyeSogY29uc3QgKj4oYikpLT52YWx1ZS5jb3VudCgpOwogICAgICAg
ICByZXR1cm4gKGRhIDwgZGIpIC0gKGRhID4gZGIpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvSGFzaENvdW50ZWRTZXQuaCBiL1NvdXJjZS9XVEYvd3RmL0hhc2hDb3VudGVk
U2V0LmgKaW5kZXggZDdkOWU0M2E5YTU1YTFmZGZhODgzZjc4OTdhMTA3Nzk5YTVjZmY3NC4uNGY5
NmEzOTk1MmZmNTMwZmQ2Mzk4ZWJjYThhN2ZkYjYyMTRiYTFmNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvSGFzaENvdW50ZWRTZXQuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoQ291bnRl
ZFNldC5oCkBAIC0xNDYsNyArMTQ2LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgaW5saW5lIHR5
cGVuYW1lIEhhc2hDb3VudGVkU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+OjpBZGRS
ZXN1bHQgSGFzaENvdW50ZWRTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OmFkZChj
b25zdCBWYWx1ZVR5cGUgJnZhbHVlKQogICAgIHsKICAgICAgICAgQWRkUmVzdWx0IHJlc3VsdCA9
IG1faW1wbC5hZGQodmFsdWUsIDApOwotICAgICAgICArK3Jlc3VsdC5pdGVyYXRvci0+c2Vjb25k
OworICAgICAgICArK3Jlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgIHJldHVybiByZXN1
bHQ7CiAgICAgfQogICAgIApAQCAtMTYyLDExICsxNjIsMTEgQEAgbmFtZXNwYWNlIFdURiB7CiAg
ICAgICAgIGlmIChpdCA9PSBlbmQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
ICAgICB1bnNpZ25lZCBvbGRWYWwgPSBpdC0+c2Vjb25kOworICAgICAgICB1bnNpZ25lZCBvbGRW
YWwgPSBpdC0+dmFsdWU7CiAgICAgICAgIEFTU0VSVChvbGRWYWwpOwogICAgICAgICB1bnNpZ25l
ZCBuZXdWYWwgPSBvbGRWYWwgLSAxOwogICAgICAgICBpZiAobmV3VmFsKSB7Ci0gICAgICAgICAg
ICBpdC0+c2Vjb25kID0gbmV3VmFsOworICAgICAgICAgICAgaXQtPnZhbHVlID0gbmV3VmFsOwog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKQEAgLTIxOCw3ICsyMTgsNyBA
QCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgaXRlcmF0b3IgaXQgPSBjb2xsZWN0aW9uLmJlZ2lu
KCk7CiAgICAgICAgIGl0ZXJhdG9yIGVuZCA9IGNvbGxlY3Rpb24uZW5kKCk7CiAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGl0ICE9IGVuZDsgKytpdCwgKytpKQotICAgICAgICAgICAgdmVj
dG9yW2ldID0gKCppdCkuZmlyc3Q7CisgICAgICAgICAgICB2ZWN0b3JbaV0gPSAoKml0KS5rZXk7
CiAgICAgfQogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0hhc2hJdGVyYXRvcnMuaCBi
L1NvdXJjZS9XVEYvd3RmL0hhc2hJdGVyYXRvcnMuaAppbmRleCA2YWZhMmZhNTdlNzBhZDAzMjA4
NTBmMzczM2RjZDc5OTcxNGIwMDgzLi4yNDI5YzZkMDRhYmVkMjJkNTdjZmNjZTgzYjNkNTc4Mjk0
M2MyOTFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoSXRlcmF0b3JzLmgKKysrIGIv
U291cmNlL1dURi93dGYvSGFzaEl0ZXJhdG9ycy5oCkBAIC0zMyw5ICszMyw5IEBAIG5hbWVzcGFj
ZSBXVEYgewogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZVR5cGUsIHR5cGVuYW1lIEtl
eVR5cGUsIHR5cGVuYW1lIE1hcHBlZFR5cGU+IHN0cnVjdCBIYXNoVGFibGVLZXlzSXRlcmF0b3I7
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlVHlwZSwgdHlwZW5hbWUgS2V5VHlwZSwg
dHlwZW5hbWUgTWFwcGVkVHlwZT4gc3RydWN0IEhhc2hUYWJsZVZhbHVlc0l0ZXJhdG9yOwogCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlVHlwZSwgdHlwZW5hbWUgS2V5VHlwZSwgdHlw
ZW5hbWUgTWFwcGVkVHlwZT4gc3RydWN0IEhhc2hUYWJsZUNvbnN0SXRlcmF0b3JBZGFwdGVyPEhh
c2hUYWJsZVR5cGUsIHN0ZDo6cGFpcjxLZXlUeXBlLCBNYXBwZWRUeXBlPiA+IHsKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBIYXNoVGFibGVUeXBlLCB0eXBlbmFtZSBLZXlUeXBlLCB0eXBlbmFtZSBN
YXBwZWRUeXBlPiBzdHJ1Y3QgSGFzaFRhYmxlQ29uc3RJdGVyYXRvckFkYXB0ZXI8SGFzaFRhYmxl
VHlwZSwgSGFzaE1hcEVudHJ5PEtleVR5cGUsIE1hcHBlZFR5cGU+ID4gewogICAgIHByaXZhdGU6
Ci0gICAgICAgIHR5cGVkZWYgc3RkOjpwYWlyPEtleVR5cGUsIE1hcHBlZFR5cGU+IFZhbHVlVHlw
ZTsKKyAgICAgICAgdHlwZWRlZiBIYXNoTWFwRW50cnk8S2V5VHlwZSwgTWFwcGVkVHlwZT4gVmFs
dWVUeXBlOwogICAgIHB1YmxpYzoKICAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVDb25zdEtleXNJ
dGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXlUeXBlLCBNYXBwZWRUeXBlPiBLZXlzOwogICAgICAg
ICB0eXBlZGVmIEhhc2hUYWJsZUNvbnN0VmFsdWVzSXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5
VHlwZSwgTWFwcGVkVHlwZT4gVmFsdWVzOwpAQCAtNTYsOSArNTYsOSBAQCBuYW1lc3BhY2UgV1RG
IHsKICAgICAgICAgdHlwZW5hbWUgSGFzaFRhYmxlVHlwZTo6Y29uc3RfaXRlcmF0b3IgbV9pbXBs
OwogICAgIH07CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGVUeXBlLCB0eXBlbmFt
ZSBLZXlUeXBlLCB0eXBlbmFtZSBNYXBwZWRUeXBlPiBzdHJ1Y3QgSGFzaFRhYmxlSXRlcmF0b3JB
ZGFwdGVyPEhhc2hUYWJsZVR5cGUsIHN0ZDo6cGFpcjxLZXlUeXBlLCBNYXBwZWRUeXBlPiA+IHsK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGVUeXBlLCB0eXBlbmFtZSBLZXlUeXBlLCB0
eXBlbmFtZSBNYXBwZWRUeXBlPiBzdHJ1Y3QgSGFzaFRhYmxlSXRlcmF0b3JBZGFwdGVyPEhhc2hU
YWJsZVR5cGUsIEhhc2hNYXBFbnRyeTxLZXlUeXBlLCBNYXBwZWRUeXBlPiA+IHsKICAgICBwcml2
YXRlOgotICAgICAgICB0eXBlZGVmIHN0ZDo6cGFpcjxLZXlUeXBlLCBNYXBwZWRUeXBlPiBWYWx1
ZVR5cGU7CisgICAgICAgIHR5cGVkZWYgSGFzaE1hcEVudHJ5PEtleVR5cGUsIE1hcHBlZFR5cGU+
IFZhbHVlVHlwZTsKICAgICBwdWJsaWM6CiAgICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlS2V5c0l0
ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleVR5cGUsIE1hcHBlZFR5cGU+IEtleXM7CiAgICAgICAg
IHR5cGVkZWYgSGFzaFRhYmxlVmFsdWVzSXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5VHlwZSwg
TWFwcGVkVHlwZT4gVmFsdWVzOwpAQCAtODYsMTIgKzg2LDEyIEBAIG5hbWVzcGFjZSBXVEYgewog
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlVHlwZSwgdHlwZW5hbWUgS2V5VHlwZSwg
dHlwZW5hbWUgTWFwcGVkVHlwZT4gc3RydWN0IEhhc2hUYWJsZUNvbnN0S2V5c0l0ZXJhdG9yIHsK
ICAgICBwcml2YXRlOgotICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3JBZGFw
dGVyPEhhc2hUYWJsZVR5cGUsIHN0ZDo6cGFpcjxLZXlUeXBlLCBNYXBwZWRUeXBlPiA+IENvbnN0
SXRlcmF0b3I7CisgICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlQ29uc3RJdGVyYXRvckFkYXB0ZXI8
SGFzaFRhYmxlVHlwZSwgSGFzaE1hcEVudHJ5PEtleVR5cGUsIE1hcHBlZFR5cGU+ID4gQ29uc3RJ
dGVyYXRvcjsKIAogICAgIHB1YmxpYzoKICAgICAgICAgSGFzaFRhYmxlQ29uc3RLZXlzSXRlcmF0
b3IoY29uc3QgQ29uc3RJdGVyYXRvciYgaW1wbCkgOiBtX2ltcGwoaW1wbCkge30KICAgICAgICAg
Ci0gICAgICAgIGNvbnN0IEtleVR5cGUqIGdldCgpIGNvbnN0IHsgcmV0dXJuICYobV9pbXBsLmdl
dCgpLT5maXJzdCk7IH0KKyAgICAgICAgY29uc3QgS2V5VHlwZSogZ2V0KCkgY29uc3QgeyByZXR1
cm4gJihtX2ltcGwuZ2V0KCktPmtleSk7IH0KICAgICAgICAgY29uc3QgS2V5VHlwZSYgb3BlcmF0
b3IqKCkgY29uc3QgeyByZXR1cm4gKmdldCgpOyB9CiAgICAgICAgIGNvbnN0IEtleVR5cGUqIG9w
ZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBnZXQoKTsgfQogCkBAIC0xMDMsMTIgKzEwMywxMiBA
QCBuYW1lc3BhY2UgV1RGIHsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZVR5cGUs
IHR5cGVuYW1lIEtleVR5cGUsIHR5cGVuYW1lIE1hcHBlZFR5cGU+IHN0cnVjdCBIYXNoVGFibGVD
b25zdFZhbHVlc0l0ZXJhdG9yIHsKICAgICBwcml2YXRlOgotICAgICAgICB0eXBlZGVmIEhhc2hU
YWJsZUNvbnN0SXRlcmF0b3JBZGFwdGVyPEhhc2hUYWJsZVR5cGUsIHN0ZDo6cGFpcjxLZXlUeXBl
LCBNYXBwZWRUeXBlPiA+IENvbnN0SXRlcmF0b3I7CisgICAgICAgIHR5cGVkZWYgSGFzaFRhYmxl
Q29uc3RJdGVyYXRvckFkYXB0ZXI8SGFzaFRhYmxlVHlwZSwgSGFzaE1hcEVudHJ5PEtleVR5cGUs
IE1hcHBlZFR5cGU+ID4gQ29uc3RJdGVyYXRvcjsKIAogICAgIHB1YmxpYzoKICAgICAgICAgSGFz
aFRhYmxlQ29uc3RWYWx1ZXNJdGVyYXRvcihjb25zdCBDb25zdEl0ZXJhdG9yJiBpbXBsKSA6IG1f
aW1wbChpbXBsKSB7fQogICAgICAgICAKLSAgICAgICAgY29uc3QgTWFwcGVkVHlwZSogZ2V0KCkg
Y29uc3QgeyByZXR1cm4gJihtX2ltcGwuZ2V0KCktPnNlY29uZCk7IH0KKyAgICAgICAgY29uc3Qg
TWFwcGVkVHlwZSogZ2V0KCkgY29uc3QgeyByZXR1cm4gJihtX2ltcGwuZ2V0KCktPnZhbHVlKTsg
fQogICAgICAgICBjb25zdCBNYXBwZWRUeXBlJiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiAq
Z2V0KCk7IH0KICAgICAgICAgY29uc3QgTWFwcGVkVHlwZSogb3BlcmF0b3ItPigpIGNvbnN0IHsg
cmV0dXJuIGdldCgpOyB9CiAKQEAgLTEyMCwxMyArMTIwLDEzIEBAIG5hbWVzcGFjZSBXVEYgewog
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlVHlwZSwgdHlwZW5hbWUgS2V5VHlwZSwg
dHlwZW5hbWUgTWFwcGVkVHlwZT4gc3RydWN0IEhhc2hUYWJsZUtleXNJdGVyYXRvciB7CiAgICAg
cHJpdmF0ZToKLSAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVJdGVyYXRvckFkYXB0ZXI8SGFzaFRh
YmxlVHlwZSwgc3RkOjpwYWlyPEtleVR5cGUsIE1hcHBlZFR5cGU+ID4gSXRlcmF0b3I7Ci0gICAg
ICAgIHR5cGVkZWYgSGFzaFRhYmxlQ29uc3RJdGVyYXRvckFkYXB0ZXI8SGFzaFRhYmxlVHlwZSwg
c3RkOjpwYWlyPEtleVR5cGUsIE1hcHBlZFR5cGU+ID4gQ29uc3RJdGVyYXRvcjsKKyAgICAgICAg
dHlwZWRlZiBIYXNoVGFibGVJdGVyYXRvckFkYXB0ZXI8SGFzaFRhYmxlVHlwZSwgSGFzaE1hcEVu
dHJ5PEtleVR5cGUsIE1hcHBlZFR5cGU+ID4gSXRlcmF0b3I7CisgICAgICAgIHR5cGVkZWYgSGFz
aFRhYmxlQ29uc3RJdGVyYXRvckFkYXB0ZXI8SGFzaFRhYmxlVHlwZSwgSGFzaE1hcEVudHJ5PEtl
eVR5cGUsIE1hcHBlZFR5cGU+ID4gQ29uc3RJdGVyYXRvcjsKIAogICAgIHB1YmxpYzoKICAgICAg
ICAgSGFzaFRhYmxlS2V5c0l0ZXJhdG9yKGNvbnN0IEl0ZXJhdG9yJiBpbXBsKSA6IG1faW1wbChp
bXBsKSB7fQogICAgICAgICAKLSAgICAgICAgS2V5VHlwZSogZ2V0KCkgY29uc3QgeyByZXR1cm4g
JihtX2ltcGwuZ2V0KCktPmZpcnN0KTsgfQorICAgICAgICBLZXlUeXBlKiBnZXQoKSBjb25zdCB7
IHJldHVybiAmKG1faW1wbC5nZXQoKS0+a2V5KTsgfQogICAgICAgICBLZXlUeXBlJiBvcGVyYXRv
ciooKSBjb25zdCB7IHJldHVybiAqZ2V0KCk7IH0KICAgICAgICAgS2V5VHlwZSogb3BlcmF0b3It
PigpIGNvbnN0IHsgcmV0dXJuIGdldCgpOyB9CiAKQEAgLTE0MywxMyArMTQzLDEzIEBAIG5hbWVz
cGFjZSBXVEYgewogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlVHlwZSwgdHlwZW5h
bWUgS2V5VHlwZSwgdHlwZW5hbWUgTWFwcGVkVHlwZT4gc3RydWN0IEhhc2hUYWJsZVZhbHVlc0l0
ZXJhdG9yIHsKICAgICBwcml2YXRlOgotICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUl0ZXJhdG9y
QWRhcHRlcjxIYXNoVGFibGVUeXBlLCBzdGQ6OnBhaXI8S2V5VHlwZSwgTWFwcGVkVHlwZT4gPiBJ
dGVyYXRvcjsKLSAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVDb25zdEl0ZXJhdG9yQWRhcHRlcjxI
YXNoVGFibGVUeXBlLCBzdGQ6OnBhaXI8S2V5VHlwZSwgTWFwcGVkVHlwZT4gPiBDb25zdEl0ZXJh
dG9yOworICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUl0ZXJhdG9yQWRhcHRlcjxIYXNoVGFibGVU
eXBlLCBIYXNoTWFwRW50cnk8S2V5VHlwZSwgTWFwcGVkVHlwZT4gPiBJdGVyYXRvcjsKKyAgICAg
ICAgdHlwZWRlZiBIYXNoVGFibGVDb25zdEl0ZXJhdG9yQWRhcHRlcjxIYXNoVGFibGVUeXBlLCBI
YXNoTWFwRW50cnk8S2V5VHlwZSwgTWFwcGVkVHlwZT4gPiBDb25zdEl0ZXJhdG9yOwogCiAgICAg
cHVibGljOgogICAgICAgICBIYXNoVGFibGVWYWx1ZXNJdGVyYXRvcihjb25zdCBJdGVyYXRvciYg
aW1wbCkgOiBtX2ltcGwoaW1wbCkge30KICAgICAgICAgCi0gICAgICAgIE1hcHBlZFR5cGUqIGdl
dCgpIGNvbnN0IHsgcmV0dXJuICYobV9pbXBsLmdldCgpLT5zZWNvbmQpOyB9CisgICAgICAgIE1h
cHBlZFR5cGUqIGdldCgpIGNvbnN0IHsgcmV0dXJuICYobV9pbXBsLmdldCgpLT52YWx1ZSk7IH0K
ICAgICAgICAgTWFwcGVkVHlwZSYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKmdldCgpOyB9
CiAgICAgICAgIE1hcHBlZFR5cGUqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBnZXQoKTsg
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoTWFwLmggYi9Tb3VyY2UvV1RGL3d0
Zi9IYXNoTWFwLmgKaW5kZXggMjZhOWQ5YzVjYjE1OGQzYTVmZWI3MmVjNWNjODUwYThlNjAxNjNk
ZC4uYmE1OTMxZWZiN2ZmZjk4NWE5MDA5ODVkZDIwZTljYjM2NTNlNTdiYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi93dGYvSGFzaE1hcC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0hhc2hNYXAuaApA
QCAtMjUsOCArMjUsNiBAQAogCiBuYW1lc3BhY2UgV1RGIHsKIAotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFBhaXJUeXBlPiBzdHJ1Y3QgUGFpckZpcnN0RXh0cmFjdG9yOwotCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IFJlZmVyZW5jZVR5cGVNYWtlciB7CiAgICAgICAgIHR5cGVkZWYg
VCYgUmVmZXJlbmNlVHlwZTsKICAgICB9OwpAQCAtMzQsNiArMzIsMTAgQEAgbmFtZXNwYWNlIFdU
RiB7CiAgICAgICAgIHR5cGVkZWYgVCYgUmVmZXJlbmNlVHlwZTsKICAgICB9OwogCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgSGFzaE1hcEVudHJ5VHlwZT4gc3RydWN0IEhhc2hNYXBFbnRyeUtleUV4
dHJhY3RvciB7CisgICAgICAgIHN0YXRpYyBjb25zdCB0eXBlbmFtZSBIYXNoTWFwRW50cnlUeXBl
OjpLZXlUeXBlJiBleHRyYWN0KGNvbnN0IEhhc2hNYXBFbnRyeVR5cGUmIHApIHsgcmV0dXJuIHAu
a2V5OyB9CisgICAgfTsKKwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUg
TWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnID0gdHlwZW5hbWUgRGVmYXVsdEhhc2g8S2V5QXJn
Pjo6SGFzaCwKICAgICAgICAgdHlwZW5hbWUgS2V5VHJhaXRzQXJnID0gSGFzaFRyYWl0czxLZXlB
cmc+LCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcgPSBIYXNoVHJhaXRzPE1hcHBlZEFyZz4gPgog
ICAgIGNsYXNzIEhhc2hNYXAgewpAQCAtNDEsNyArNDMsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAg
ICBwcml2YXRlOgogICAgICAgICB0eXBlZGVmIEtleVRyYWl0c0FyZyBLZXlUcmFpdHM7CiAgICAg
ICAgIHR5cGVkZWYgTWFwcGVkVHJhaXRzQXJnIE1hcHBlZFRyYWl0czsKLSAgICAgICAgdHlwZWRl
ZiBQYWlySGFzaFRyYWl0czxLZXlUcmFpdHMsIE1hcHBlZFRyYWl0cz4gVmFsdWVUcmFpdHM7Cisg
ICAgICAgIHR5cGVkZWYgSGFzaE1hcEVudHJ5VHJhaXRzPEtleVRyYWl0cywgTWFwcGVkVHJhaXRz
PiBWYWx1ZVRyYWl0czsKIAogICAgIHB1YmxpYzoKICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBL
ZXlUcmFpdHM6OlRyYWl0VHlwZSBLZXlUeXBlOwpAQCAtNTcsNyArNTksNyBAQCBuYW1lc3BhY2Ug
V1RGIHsKIAogICAgICAgICB0eXBlZGVmIEhhc2hBcmcgSGFzaEZ1bmN0aW9uczsKIAotICAgICAg
ICB0eXBlZGVmIEhhc2hUYWJsZTxLZXlUeXBlLCBWYWx1ZVR5cGUsIFBhaXJGaXJzdEV4dHJhY3Rv
cjxWYWx1ZVR5cGU+LAorICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZTxLZXlUeXBlLCBWYWx1ZVR5
cGUsIEhhc2hNYXBFbnRyeUtleUV4dHJhY3RvcjxWYWx1ZVR5cGU+LAogICAgICAgICAgICAgSGFz
aEZ1bmN0aW9ucywgVmFsdWVUcmFpdHMsIEtleVRyYWl0cz4gSGFzaFRhYmxlVHlwZTsKIAogICAg
ICAgICBjbGFzcyBIYXNoTWFwS2V5c1Byb3h5OwpAQCAtMjAzLDE4ICsyMDUsMTQgQEAgbmFtZXNw
YWNlIFdURiB7CiAgICAgICAgIEhhc2hUYWJsZVR5cGUgbV9pbXBsOwogICAgIH07CiAKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBQYWlyVHlwZT4gc3RydWN0IFBhaXJGaXJzdEV4dHJhY3RvciB7Ci0g
ICAgICAgIHN0YXRpYyBjb25zdCB0eXBlbmFtZSBQYWlyVHlwZTo6Zmlyc3RfdHlwZSYgZXh0cmFj
dChjb25zdCBQYWlyVHlwZSYgcCkgeyByZXR1cm4gcC5maXJzdDsgfQotICAgIH07Ci0KICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVRyYWl0cywgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucz4KICAg
ICBzdHJ1Y3QgSGFzaE1hcFRyYW5zbGF0b3IgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBUJiBrZXkpIHsgcmV0dXJuIEhhc2hGdW5jdGlv
bnM6Omhhc2goa2V5KTsgfQogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
PiBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBUJiBhLCBjb25zdCBVJiBiKSB7IHJldHVybiBIYXNo
RnVuY3Rpb25zOjplcXVhbChhLCBiKTsgfQogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVLCB0eXBlbmFtZSBWPiBzdGF0aWMgdm9pZCB0cmFuc2xhdGUoVCYgbG9jYXRpb24s
IGNvbnN0IFUmIGtleSwgY29uc3QgViYgbWFwcGVkKQogICAgICAgICB7Ci0gICAgICAgICAgICBs
b2NhdGlvbi5maXJzdCA9IGtleTsKLSAgICAgICAgICAgIFZhbHVlVHJhaXRzOjpTZWNvbmRUcmFp
dHM6OnN0b3JlKG1hcHBlZCwgbG9jYXRpb24uc2Vjb25kKTsKKyAgICAgICAgICAgIGxvY2F0aW9u
LmtleSA9IGtleTsKKyAgICAgICAgICAgIFZhbHVlVHJhaXRzOjpNYXBwZWRUcmFpdHM6OnN0b3Jl
KG1hcHBlZCwgbG9jYXRpb24udmFsdWUpOwogICAgICAgICB9CiAgICAgfTsKIApAQCAtMjI0LDgg
KzIyMiw4IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVPiBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBUJiBhLCBjb25zdCBVJiBiKSB7IHJl
dHVybiBUcmFuc2xhdG9yOjplcXVhbChhLCBiKTsgfQogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPiBzdGF0aWMgdm9pZCB0cmFuc2xhdGUoVCYgbG9j
YXRpb24sIGNvbnN0IFUmIGtleSwgY29uc3QgViYgbWFwcGVkLCB1bnNpZ25lZCBoYXNoQ29kZSkK
ICAgICAgICAgewotICAgICAgICAgICAgVHJhbnNsYXRvcjo6dHJhbnNsYXRlKGxvY2F0aW9uLmZp
cnN0LCBrZXksIGhhc2hDb2RlKTsKLSAgICAgICAgICAgIFZhbHVlVHJhaXRzOjpTZWNvbmRUcmFp
dHM6OnN0b3JlKG1hcHBlZCwgbG9jYXRpb24uc2Vjb25kKTsKKyAgICAgICAgICAgIFRyYW5zbGF0
b3I6OnRyYW5zbGF0ZShsb2NhdGlvbi5rZXksIGtleSwgaGFzaENvZGUpOworICAgICAgICAgICAg
VmFsdWVUcmFpdHM6Ok1hcHBlZFRyYWl0czo6c3RvcmUobWFwcGVkLCBsb2NhdGlvbi52YWx1ZSk7
CiAgICAgICAgIH0KICAgICB9OwogCkBAIC0zMzMsNyArMzMxLDcgQEAgbmFtZXNwYWNlIFdURiB7
CiAgICAgICAgIEFkZFJlc3VsdCByZXN1bHQgPSBpbmxpbmVBZGQoa2V5LCBtYXBwZWQpOwogICAg
ICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KSB7CiAgICAgICAgICAgICAvLyBUaGUgaW5saW5l
QWRkIGNhbGwgYWJvdmUgZm91bmQgYW4gZXhpc3RpbmcgaGFzaCB0YWJsZSBlbnRyeTsgd2UgbmVl
ZCB0byBzZXQgdGhlIG1hcHBlZCB2YWx1ZS4KLSAgICAgICAgICAgIE1hcHBlZFRyYWl0czo6c3Rv
cmUobWFwcGVkLCByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7CisgICAgICAgICAgICBNYXBwZWRU
cmFpdHM6OnN0b3JlKG1hcHBlZCwgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CiAgICAgICAgIH0K
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CkBAIC0zNjAsNyArMzU4LDcgQEAgbmFtZXNw
YWNlIFdURiB7CiAgICAgICAgIFZhbHVlVHlwZSogZW50cnkgPSBjb25zdF9jYXN0PEhhc2hUYWJs
ZVR5cGUmPihtX2ltcGwpLmxvb2t1cChrZXkpOwogICAgICAgICBpZiAoIWVudHJ5KQogICAgICAg
ICAgICAgcmV0dXJuIE1hcHBlZFRyYWl0czo6cGVlayhNYXBwZWRUcmFpdHM6OmVtcHR5VmFsdWUo
KSk7Ci0gICAgICAgIHJldHVybiBNYXBwZWRUcmFpdHM6OnBlZWsoZW50cnktPnNlY29uZCk7Cisg
ICAgICAgIHJldHVybiBNYXBwZWRUcmFpdHM6OnBlZWsoZW50cnktPnZhbHVlKTsKICAgICB9CiAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFt
ZSBXLCB0eXBlbmFtZSBYPgpAQCAtMzkxLDcgKzM4OSw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAg
ICAgICBpdGVyYXRvciBpdCA9IGZpbmQoa2V5KTsKICAgICAgICAgaWYgKGl0ID09IGVuZCgpKQog
ICAgICAgICAgICAgcmV0dXJuIE1hcHBlZFRyYWl0czo6cGFzc091dChNYXBwZWRUcmFpdHM6OmVt
cHR5VmFsdWUoKSk7Ci0gICAgICAgIE1hcHBlZFBhc3NPdXRUeXBlIHJlc3VsdCA9IE1hcHBlZFRy
YWl0czo6cGFzc091dChpdC0+c2Vjb25kKTsKKyAgICAgICAgTWFwcGVkUGFzc091dFR5cGUgcmVz
dWx0ID0gTWFwcGVkVHJhaXRzOjpwYXNzT3V0KGl0LT52YWx1ZSk7CiAgICAgICAgIHJlbW92ZShp
dCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpAQCAtNDEzLDggKzQxMSw4IEBAIG5h
bWVzcGFjZSBXVEYgewogICAgICAgICBjb25zdF9pdGVyYXRvciBlbmQgPSBhLmVuZCgpOwogICAg
ICAgICBjb25zdF9pdGVyYXRvciBub3RGb3VuZCA9IGIuZW5kKCk7CiAgICAgICAgIGZvciAoY29u
c3RfaXRlcmF0b3IgaXQgPSBhLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAg
ICAgY29uc3RfaXRlcmF0b3IgYlBvcyA9IGIuZmluZChpdC0+Zmlyc3QpOwotICAgICAgICAgICAg
aWYgKGJQb3MgPT0gbm90Rm91bmQgfHwgaXQtPnNlY29uZCAhPSBiUG9zLT5zZWNvbmQpCisgICAg
ICAgICAgICBjb25zdF9pdGVyYXRvciBiUG9zID0gYi5maW5kKGl0LT5rZXkpOworICAgICAgICAg
ICAgaWYgKGJQb3MgPT0gbm90Rm91bmQgfHwgaXQtPnZhbHVlICE9IGJQb3MtPnZhbHVlKQogICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCkBAIC00MzMsNyArNDMxLDcg
QEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgSGFzaFRhYmxlVHlw
ZTo6Y29uc3RfaXRlcmF0b3IgaXRlcmF0b3I7CiAgICAgICAgIGl0ZXJhdG9yIGVuZCA9IGNvbGxl
Y3Rpb24uZW5kKCk7CiAgICAgICAgIGZvciAoaXRlcmF0b3IgaXQgPSBjb2xsZWN0aW9uLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIGRlbGV0ZSBpdC0+c2Vjb25kOworICAg
ICAgICAgICAgZGVsZXRlIGl0LT52YWx1ZTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgpAQCAt
NDQ4LDcgKzQ0Niw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICB0eXBlZGVmIHR5cGVuYW1l
IEhhc2hUYWJsZVR5cGU6OmNvbnN0X2l0ZXJhdG9yIGl0ZXJhdG9yOwogICAgICAgICBpdGVyYXRv
ciBlbmQgPSBjb2xsZWN0aW9uLmVuZCgpOwogICAgICAgICBmb3IgKGl0ZXJhdG9yIGl0ID0gY29s
bGVjdGlvbi5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBkZWxldGUgaXQt
PmZpcnN0OworICAgICAgICAgICAgZGVsZXRlIGl0LT5rZXk7CiAgICAgfQogCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5h
bWUgWD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oIGIvU291cmNlL1dU
Ri93dGYvSGFzaFRhYmxlLmgKaW5kZXggOWJkNTQ4MmZhY2ViNzIwOTQ0Y2U0YzUzMTE3NDc0MGJl
NDNiYjZjZi4uZjkyYjVlNGNkN2Q4ZWQ1ZDE4MmU4MjE1OTE4OGVlYzYxOTg4NTFiNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmgKKysrIGIvU291cmNlL1dURi93dGYvSGFz
aFRhYmxlLmgKQEAgLTI4NSw2ICsyODUsMTIgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIHN3
YXAoYS5zZWNvbmQsIGIuc2Vjb25kKTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVPiBpbmxpbmUgdm9pZCBoYXNoVGFibGVTd2FwKEhhc2hNYXBFbnRyeTxULCBV
PiYgYSwgSGFzaE1hcEVudHJ5PFQsIFU+JiBiKQorICAgIHsKKyAgICAgICAgc3dhcChhLmtleSwg
Yi5rZXkpOworICAgICAgICBzd2FwKGEudmFsdWUsIGIudmFsdWUpOworICAgIH0KKwogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQsIGJvb2wgdXNlU3dhcD4gc3RydWN0IE1vdmVyOwogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBNb3ZlcjxULCB0cnVlPiB7IHN0YXRpYyB2b2lkIG1vdmUo
VCYgZnJvbSwgVCYgdG8pIHsgaGFzaFRhYmxlU3dhcChmcm9tLCB0byk7IH0gfTsKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgTW92ZXI8VCwgZmFsc2U+IHsgc3RhdGljIHZvaWQgbW92
ZShUJiBmcm9tLCBUJiB0bykgeyB0byA9IGZyb207IH0gfTsKQEAgLTEwODIsNyArMTA4OCw3IEBA
IG5hbWVzcGFjZSBXVEYgewogICAgICAgICAgICAgQVNTRVJUKGVudHJ5ID09IGl0Lm1fcG9zaXRp
b24pOwogICAgICAgICAgICAgKytjb3VudDsKIAotICAgICAgICAgICAgVmFsdWVDaGVjazxLZXk+
OjpjaGVja0NvbnNpc3RlbmN5KGl0LT5maXJzdCk7CisgICAgICAgICAgICBWYWx1ZUNoZWNrPEtl
eT46OmNoZWNrQ29uc2lzdGVuY3koaXQtPmtleSk7CiAgICAgICAgIH0KIAogICAgICAgICBBU1NF
UlQoY291bnQgPT0gbV9rZXlDb3VudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9IYXNo
VHJhaXRzLmggYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoVHJhaXRzLmgKaW5kZXggMTBmMTRkMWFmOTkw
ODczNjdmODFhYmM2NTJlYWVkNjFjYjU3MWZkMi4uZWE2NWViMmM0MGUzZjBjY2QxMDUyMDIxNTE2
MTdkZDBlMjIyMzA3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvSGFzaFRyYWl0cy5oCisr
KyBiL1NvdXJjZS9XVEYvd3RmL0hhc2hUcmFpdHMuaApAQCAtMTYzLDYgKzE2Myw0MSBAQCBuYW1l
c3BhY2UgV1RGIHsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGaXJzdCwgdHlwZW5hbWUgU2Vjb25k
PgogICAgIHN0cnVjdCBIYXNoVHJhaXRzPHBhaXI8Rmlyc3QsIFNlY29uZD4gPiA6IHB1YmxpYyBQ
YWlySGFzaFRyYWl0czxIYXNoVHJhaXRzPEZpcnN0PiwgSGFzaFRyYWl0czxTZWNvbmQ+ID4geyB9
OwogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5VHlwZUFyZywgdHlwZW5hbWUgTWFwcGVkVHlw
ZUFyZz4KKyAgICBzdHJ1Y3QgSGFzaE1hcEVudHJ5IHsKKyAgICAgICAgdHlwZWRlZiBLZXlUeXBl
QXJnIEtleVR5cGU7CisKKyAgICAgICAgSGFzaE1hcEVudHJ5KCkgOiBrZXkoKSwgdmFsdWUoKSB7
IH0KKyAgICAgICAgSGFzaE1hcEVudHJ5KGNvbnN0IEtleVR5cGVBcmcmIGtleSwgY29uc3QgTWFw
cGVkVHlwZUFyZyYgdmFsdWUpIDoga2V5KGtleSksIHZhbHVlKHZhbHVlKSB7IH0KKworICAgICAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3RoZXJLZXlUeXBlLCB0eXBlbmFtZSBPdGhlck1hcHBlZFR5
cGU+CisgICAgICAgIEhhc2hNYXBFbnRyeShjb25zdCBIYXNoTWFwRW50cnk8T3RoZXJLZXlUeXBl
LCBPdGhlck1hcHBlZFR5cGU+JiBvdGhlcikgOiBrZXkob3RoZXIua2V5KSwgdmFsdWUob3RoZXIu
dmFsdWUpIHsgfQorCisgICAgICAgIEtleVR5cGVBcmcga2V5OworICAgICAgICBNYXBwZWRUeXBl
QXJnIHZhbHVlOworICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlUcmFpdHNBcmcs
IHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZz4KKyAgICBzdHJ1Y3QgSGFzaE1hcEVudHJ5VHJhaXRz
IDogR2VuZXJpY0hhc2hUcmFpdHM8SGFzaE1hcEVudHJ5PHR5cGVuYW1lIEtleVRyYWl0c0FyZzo6
VHJhaXRUeXBlLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc6OlRyYWl0VHlwZT4gPiB7CisgICAg
ICAgIHR5cGVkZWYgS2V5VHJhaXRzQXJnIEtleVRyYWl0czsKKyAgICAgICAgdHlwZWRlZiBNYXBw
ZWRUcmFpdHNBcmcgTWFwcGVkVHJhaXRzOworICAgICAgICB0eXBlZGVmIEhhc2hNYXBFbnRyeTx0
eXBlbmFtZSBLZXlUcmFpdHM6OlRyYWl0VHlwZSwgdHlwZW5hbWUgTWFwcGVkVHJhaXRzOjpUcmFp
dFR5cGU+IFRyYWl0VHlwZTsKKyAgICAgICAgdHlwZWRlZiBIYXNoTWFwRW50cnk8dHlwZW5hbWUg
S2V5VHJhaXRzOjpFbXB0eVZhbHVlVHlwZSwgdHlwZW5hbWUgTWFwcGVkVHJhaXRzOjpFbXB0eVZh
bHVlVHlwZT4gRW1wdHlWYWx1ZVR5cGU7CisKKyAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgZW1w
dHlWYWx1ZUlzWmVybyA9IEtleVRyYWl0czo6ZW1wdHlWYWx1ZUlzWmVybyAmJiBNYXBwZWRUcmFp
dHM6OmVtcHR5VmFsdWVJc1plcm87CisgICAgICAgIHN0YXRpYyBFbXB0eVZhbHVlVHlwZSBlbXB0
eVZhbHVlKCkgeyByZXR1cm4gSGFzaE1hcEVudHJ5PHR5cGVuYW1lIEtleVRyYWl0czo6RW1wdHlW
YWx1ZVR5cGUsIHR5cGVuYW1lIE1hcHBlZFRyYWl0czo6RW1wdHlWYWx1ZVR5cGU+KEtleVRyYWl0
czo6ZW1wdHlWYWx1ZSgpLCBNYXBwZWRUcmFpdHM6OmVtcHR5VmFsdWUoKSk7IH0KKworICAgICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gS2V5VHJhaXRzOjpuZWVkc0Rl
c3RydWN0aW9uIHx8IE1hcHBlZFRyYWl0czo6bmVlZHNEZXN0cnVjdGlvbjsKKworICAgICAgICBz
dGF0aWMgY29uc3QgaW50IG1pbmltdW1UYWJsZVNpemUgPSBLZXlUcmFpdHM6Om1pbmltdW1UYWJs
ZVNpemU7CisKKyAgICAgICAgc3RhdGljIHZvaWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKFRyYWl0
VHlwZSYgc2xvdCkgeyBLZXlUcmFpdHM6OmNvbnN0cnVjdERlbGV0ZWRWYWx1ZShzbG90LmtleSk7
IH0KKyAgICAgICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUoY29uc3QgVHJhaXRUeXBlJiB2
YWx1ZSkgeyByZXR1cm4gS2V5VHJhaXRzOjppc0RlbGV0ZWRWYWx1ZSh2YWx1ZS5rZXkpOyB9Cisg
ICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgTWFwcGVkPgorICAg
IHN0cnVjdCBIYXNoVHJhaXRzPEhhc2hNYXBFbnRyeTxLZXksIE1hcHBlZD4gPiA6IHB1YmxpYyBI
YXNoTWFwRW50cnlUcmFpdHM8SGFzaFRyYWl0czxLZXk+LCBIYXNoVHJhaXRzPE1hcHBlZD4gPiB7
IH07CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6Okhhc2hUcmFpdHM7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9yLmNwcCBiL1NvdXJjZS9XVEYvd3Rm
L01ldGFBbGxvY2F0b3IuY3BwCmluZGV4IDIwMjM3ZjIxODFkZjQ5NWI4OTY0ZTUzMTg4NzJlNWYz
ZTE4Mzk3NTAuLjg2ZTkzN2FhM2UwMWY3ZmQzMzNmNjQ4YzliOGYwMWNiY2NkYjY1NDYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3IuY3BwCisrKyBiL1NvdXJjZS9XVEYv
d3RmL01ldGFBbGxvY2F0b3IuY3BwCkBAIC0zMDQsOSArMzA0LDkgQEAgdm9pZCBNZXRhQWxsb2Nh
dG9yOjphZGRGcmVlU3BhY2Uodm9pZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRlcykKICAgICAg
ICAgLy8gV2UgaGF2ZSBzb21ldGhpbmcgd2UgY2FuIGNvYWxlc2NlIHdpdGggb24gdGhlIGxlZnQu
IFJlbW92ZSBpdCBmcm9tIHRoZSB0cmVlLCBhbmQKICAgICAgICAgLy8gcmVtb3ZlIGl0cyBlbmQg
ZnJvbSB0aGUgZW5kIGFkZHJlc3MgbWFwLgogICAgICAgICAKLSAgICAgICAgQVNTRVJUKHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihsZWZ0TmVpZ2hi
b3ItPnNlY29uZC0+bV9zdGFydCkgKyBsZWZ0TmVpZ2hib3ItPnNlY29uZC0+bV9zaXplSW5CeXRl
cykgPT0gbGVmdE5laWdoYm9yLT5maXJzdCk7CisgICAgICAgIEFTU0VSVChyZWludGVycHJldF9j
YXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obGVmdE5laWdoYm9yLT52YWx1
ZS0+bV9zdGFydCkgKyBsZWZ0TmVpZ2hib3ItPnZhbHVlLT5tX3NpemVJbkJ5dGVzKSA9PSBsZWZ0
TmVpZ2hib3ItPmtleSk7CiAgICAgICAgIAotICAgICAgICBGcmVlU3BhY2VOb2RlKiBsZWZ0Tm9k
ZSA9IGxlZnROZWlnaGJvci0+c2Vjb25kOworICAgICAgICBGcmVlU3BhY2VOb2RlKiBsZWZ0Tm9k
ZSA9IGxlZnROZWlnaGJvci0+dmFsdWU7CiAgICAgICAgIAogICAgICAgICB2b2lkKiBsZWZ0U3Rh
cnQgPSBsZWZ0Tm9kZS0+bV9zdGFydDsKICAgICAgICAgc2l6ZV90IGxlZnRTaXplID0gbGVmdE5v
ZGUtPm1fc2l6ZUluQnl0ZXM7CkBAIC0zMjIsMTAgKzMyMiwxMCBAQCB2b2lkIE1ldGFBbGxvY2F0
b3I6OmFkZEZyZWVTcGFjZSh2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVzKQogICAgICAg
ICAgICAgLy8gRnJlZWluZyBzb21ldGhpbmcgaW4gdGhlIG1pZGRsZSBvZiBmcmVlIGJsb2Nrcy4g
Q29hbGVzY2UgYm90aCBsZWZ0IGFuZAogICAgICAgICAgICAgLy8gcmlnaHQsIHdoaWxzdCByZW1v
dmluZyB0aGUgcmlnaHQgbmVpZ2hib3IgZnJvbSB0aGUgbWFwcy4KICAgICAgICAgICAgIAotICAg
ICAgICAgICAgQVNTRVJUKHJpZ2h0TmVpZ2hib3ItPnNlY29uZC0+bV9zdGFydCA9PSByaWdodE5l
aWdoYm9yLT5maXJzdCk7CisgICAgICAgICAgICBBU1NFUlQocmlnaHROZWlnaGJvci0+dmFsdWUt
Pm1fc3RhcnQgPT0gcmlnaHROZWlnaGJvci0+a2V5KTsKICAgICAgICAgICAgIAotICAgICAgICAg
ICAgRnJlZVNwYWNlTm9kZSogcmlnaHROb2RlID0gcmlnaHROZWlnaGJvci0+c2Vjb25kOwotICAg
ICAgICAgICAgdm9pZCogcmlnaHRTdGFydCA9IHJpZ2h0TmVpZ2hib3ItPmZpcnN0OworICAgICAg
ICAgICAgRnJlZVNwYWNlTm9kZSogcmlnaHROb2RlID0gcmlnaHROZWlnaGJvci0+dmFsdWU7Cisg
ICAgICAgICAgICB2b2lkKiByaWdodFN0YXJ0ID0gcmlnaHROZWlnaGJvci0+a2V5OwogICAgICAg
ICAgICAgc2l6ZV90IHJpZ2h0U2l6ZSA9IHJpZ2h0Tm9kZS0+bV9zaXplSW5CeXRlczsKICAgICAg
ICAgICAgIHZvaWQqIHJpZ2h0RW5kID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnBy
ZXRfY2FzdDx1aW50cHRyX3Q+KHJpZ2h0U3RhcnQpICsgcmlnaHRTaXplKTsKICAgICAgICAgICAg
IApAQCAtMzUyLDggKzM1Miw4IEBAIHZvaWQgTWV0YUFsbG9jYXRvcjo6YWRkRnJlZVNwYWNlKHZv
aWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMpCiAgICAgICAgIC8vIENhbm5vdCBjb2FsZXNj
ZSB3aXRoIGxlZnQ7IHRyeSB0byBzZWUgaWYgd2UgY2FuIGNvYWxlc2NlIHdpdGggcmlnaHQuCiAg
ICAgICAgIAogICAgICAgICBpZiAocmlnaHROZWlnaGJvciAhPSBtX2ZyZWVTcGFjZVN0YXJ0QWRk
cmVzc01hcC5lbmQoKSkgewotICAgICAgICAgICAgRnJlZVNwYWNlTm9kZSogcmlnaHROb2RlID0g
cmlnaHROZWlnaGJvci0+c2Vjb25kOwotICAgICAgICAgICAgdm9pZCogcmlnaHRTdGFydCA9IHJp
Z2h0TmVpZ2hib3ItPmZpcnN0OworICAgICAgICAgICAgRnJlZVNwYWNlTm9kZSogcmlnaHROb2Rl
ID0gcmlnaHROZWlnaGJvci0+dmFsdWU7CisgICAgICAgICAgICB2b2lkKiByaWdodFN0YXJ0ID0g
cmlnaHROZWlnaGJvci0+a2V5OwogICAgICAgICAgICAgc2l6ZV90IHJpZ2h0U2l6ZSA9IHJpZ2h0
Tm9kZS0+bV9zaXplSW5CeXRlczsKICAgICAgICAgICAgIHZvaWQqIHJpZ2h0RW5kID0gcmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHJpZ2h0U3RhcnQp
ICsgcmlnaHRTaXplKTsKICAgICAgICAgICAgIApAQCAtMzk1LDcgKzM5NSw3IEBAIHZvaWQgTWV0
YUFsbG9jYXRvcjo6aW5jcmVtZW50UGFnZU9jY3VwYW5jeSh2b2lkKiBhZGRyZXNzLCBzaXplX3Qg
c2l6ZUluQnl0ZXMpCiAgICAgICAgICAgICBtX2J5dGVzQ29tbWl0dGVkICs9IG1fcGFnZVNpemU7
CiAgICAgICAgICAgICBub3RpZnlOZWVkUGFnZShyZWludGVycHJldF9jYXN0PHZvaWQqPihwYWdl
IDw8IG1fbG9nUGFnZVNpemUpKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBpdGVyLT5z
ZWNvbmQrKzsKKyAgICAgICAgICAgIGl0ZXItPnZhbHVlKys7CiAgICAgfQogfQogCkBAIC00MDcs
NyArNDA3LDcgQEAgdm9pZCBNZXRhQWxsb2NhdG9yOjpkZWNyZW1lbnRQYWdlT2NjdXBhbmN5KHZv
aWQqIGFkZHJlc3MsIHNpemVfdCBzaXplSW5CeXRlcykKICAgICBmb3IgKHVpbnRwdHJfdCBwYWdl
ID0gZmlyc3RQYWdlOyBwYWdlIDw9IGxhc3RQYWdlOyArK3BhZ2UpIHsKICAgICAgICAgSGFzaE1h
cDx1aW50cHRyX3QsIHNpemVfdD46Oml0ZXJhdG9yIGl0ZXIgPSBtX3BhZ2VPY2N1cGFuY3lNYXAu
ZmluZChwYWdlKTsKICAgICAgICAgQVNTRVJUKGl0ZXIgIT0gbV9wYWdlT2NjdXBhbmN5TWFwLmVu
ZCgpKTsKLSAgICAgICAgaWYgKCEtLShpdGVyLT5zZWNvbmQpKSB7CisgICAgICAgIGlmICghLS0o
aXRlci0+dmFsdWUpKSB7CiAgICAgICAgICAgICBtX3BhZ2VPY2N1cGFuY3lNYXAucmVtb3ZlKGl0
ZXIpOwogICAgICAgICAgICAgbV9ieXRlc0NvbW1pdHRlZCAtPSBtX3BhZ2VTaXplOwogICAgICAg
ICAgICAgbm90aWZ5UGFnZUlzRnJlZShyZWludGVycHJldF9jYXN0PHZvaWQqPihwYWdlIDw8IG1f
bG9nUGFnZVNpemUpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1JlZkNvdW50ZWRMZWFr
Q291bnRlci5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9SZWZDb3VudGVkTGVha0NvdW50ZXIuY3BwCmlu
ZGV4IDY3MGYyYTBjZWM1OTljNmQ0ZjMxNjQ0ZWJlYjU4NzQxNWVmNDMyMWEuLjRhMDQ1MjgyNDg5
ZmU5NWExN2UyMzkxOTc3M2QzN2NiMjQ0MTBiZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3Rm
L1JlZkNvdW50ZWRMZWFrQ291bnRlci5jcHAKKysrIGIvU291cmNlL1dURi93dGYvUmVmQ291bnRl
ZExlYWtDb3VudGVyLmNwcApAQCAtNzEsNyArNzEsNyBAQCBSZWZDb3VudGVkTGVha0NvdW50ZXI6
On5SZWZDb3VudGVkTGVha0NvdW50ZXIoKQogICAgICAgICAgICAgTE9HKFJlZkNvdW50ZWRMZWFr
cywgIkxFQUs6ICV1ICVzIiwgbV9jb3VudCwgbV9kZXNjcmlwdGlvbik7CiAgICAgICAgIGVsc2Ug
aWYgKCFsb2dnZWRTdXBwcmVzc2lvblJlYXNvbikgewogICAgICAgICAgICAgLy8gVGhpcyBsb2dz
IG9ubHkgb25lIHJlYXNvbi4gTGF0ZXIgd2UgY291bGQgY2hhbmdlIGl0IHNvIHdlIGxvZyBhbGwg
dGhlIHJlYXNvbnMuCi0gICAgICAgICAgICBMT0coUmVmQ291bnRlZExlYWtzLCAiTm8gbGVhayBj
aGVja2luZyBkb25lOiAlcyIsIGxlYWtNZXNzYWdlU3VwcHJlc3Npb25SZWFzb25zLT5iZWdpbigp
LT5maXJzdCk7CisgICAgICAgICAgICBMT0coUmVmQ291bnRlZExlYWtzLCAiTm8gbGVhayBjaGVj
a2luZyBkb25lOiAlcyIsIGxlYWtNZXNzYWdlU3VwcHJlc3Npb25SZWFzb25zLT5iZWdpbigpLT5r
ZXkpOwogICAgICAgICAgICAgbG9nZ2VkU3VwcHJlc3Npb25SZWFzb24gPSB0cnVlOwogICAgICAg
ICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUmVmUHRySGFzaE1hcC5oIGIv
U291cmNlL1dURi93dGYvUmVmUHRySGFzaE1hcC5oCmluZGV4IDBhZjM2YmU2MDI3ZmI1MDBiYmZl
YTVjMjFkYzZlMDhjZGYwMTlmOGIuLmFmM2UwZDI1NWM1MjQ0ZTVkZDBlNGRhYTlmNjA5OGI2OTVj
YWEyMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1JlZlB0ckhhc2hNYXAuaAorKysgYi9T
b3VyY2UvV1RGL3d0Zi9SZWZQdHJIYXNoTWFwLmgKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNwYWNl
IFdURiB7CiAgICAgcHJpdmF0ZToKICAgICAgICAgdHlwZWRlZiBLZXlUcmFpdHNBcmcgS2V5VHJh
aXRzOwogICAgICAgICB0eXBlZGVmIE1hcHBlZFRyYWl0c0FyZyBNYXBwZWRUcmFpdHM7Ci0gICAg
ICAgIHR5cGVkZWYgUGFpckhhc2hUcmFpdHM8S2V5VHJhaXRzLCBNYXBwZWRUcmFpdHM+IFZhbHVl
VHJhaXRzOworICAgICAgICB0eXBlZGVmIEhhc2hNYXBFbnRyeVRyYWl0czxLZXlUcmFpdHMsIE1h
cHBlZFRyYWl0cz4gVmFsdWVUcmFpdHM7CiAKICAgICBwdWJsaWM6CiAgICAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgS2V5VHJhaXRzOjpUcmFpdFR5cGUgS2V5VHlwZTsKQEAgLTUxLDcgKzUxLDcgQEAg
bmFtZXNwYWNlIFdURiB7CiAgICAgICAgIAogICAgICAgICB0eXBlZGVmIEhhc2hBcmcgSGFzaEZ1
bmN0aW9uczsKIAotICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZTxLZXlUeXBlLCBWYWx1ZVR5cGUs
IFBhaXJGaXJzdEV4dHJhY3RvcjxWYWx1ZVR5cGU+LAorICAgICAgICB0eXBlZGVmIEhhc2hUYWJs
ZTxLZXlUeXBlLCBWYWx1ZVR5cGUsIEhhc2hNYXBFbnRyeUtleUV4dHJhY3RvcjxWYWx1ZVR5cGU+
LAogICAgICAgICAgICAgSGFzaEZ1bmN0aW9ucywgVmFsdWVUcmFpdHMsIEtleVRyYWl0cz4gSGFz
aFRhYmxlVHlwZTsKIAogICAgICAgICB0eXBlZGVmIEhhc2hNYXBUcmFuc2xhdG9yPFZhbHVlVHJh
aXRzLCBIYXNoRnVuY3Rpb25zPgpAQCAtMjE2LDcgKzIxNiw3IEBAIG5hbWVzcGFjZSBXVEYgewog
ICAgICAgICBBZGRSZXN1bHQgcmVzdWx0ID0gaW5saW5lQWRkKGtleSwgbWFwcGVkKTsKICAgICAg
ICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkgewogICAgICAgICAgICAgLy8gVGhlIGlubGluZUFk
ZCBjYWxsIGFib3ZlIGZvdW5kIGFuIGV4aXN0aW5nIGhhc2ggdGFibGUgZW50cnk7IHdlIG5lZWQg
dG8gc2V0IHRoZSBtYXBwZWQgdmFsdWUuCi0gICAgICAgICAgICBNYXBwZWRUcmFpdHM6OnN0b3Jl
KG1hcHBlZCwgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOworICAgICAgICAgICAgTWFwcGVkVHJh
aXRzOjpzdG9yZShtYXBwZWQsIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwogICAgICAgICB9CiAg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpAQCAtMjI4LDcgKzIyOCw3IEBAIG5hbWVzcGFj
ZSBXVEYgewogICAgICAgICBBZGRSZXN1bHQgcmVzdWx0ID0gaW5saW5lQWRkKGtleSwgbWFwcGVk
KTsKICAgICAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkgewogICAgICAgICAgICAgLy8gVGhl
IGlubGluZUFkZCBjYWxsIGFib3ZlIGZvdW5kIGFuIGV4aXN0aW5nIGhhc2ggdGFibGUgZW50cnk7
IHdlIG5lZWQgdG8gc2V0IHRoZSBtYXBwZWQgdmFsdWUuCi0gICAgICAgICAgICBNYXBwZWRUcmFp
dHM6OnN0b3JlKG1hcHBlZCwgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOworICAgICAgICAgICAg
TWFwcGVkVHJhaXRzOjpzdG9yZShtYXBwZWQsIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwogICAg
ICAgICB9CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpAQCAtMjU0LDcgKzI1NCw3IEBA
IG5hbWVzcGFjZSBXVEYgewogICAgICAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gY29uc3RfY2FzdDxI
YXNoVGFibGVUeXBlJj4obV9pbXBsKS5sb29rdXAoa2V5KTsKICAgICAgICAgaWYgKCFlbnRyeSkK
ICAgICAgICAgICAgIHJldHVybiBNYXBwZWRUcmFpdHM6OnBlZWsoTWFwcGVkVHJhaXRzOjplbXB0
eVZhbHVlKCkpOwotICAgICAgICByZXR1cm4gTWFwcGVkVHJhaXRzOjpwZWVrKGVudHJ5LT5zZWNv
bmQpOworICAgICAgICByZXR1cm4gTWFwcGVkVHJhaXRzOjpwZWVrKGVudHJ5LT52YWx1ZSk7CiAg
ICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwg
dHlwZW5hbWUgVywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzPgpAQCAtMjY0LDcgKzI2NCw3IEBAIG5h
bWVzcGFjZSBXVEYgewogICAgICAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gY29uc3RfY2FzdDxIYXNo
VGFibGVUeXBlJj4obV9pbXBsKS50ZW1wbGF0ZSBsb29rdXA8VHJhbnNsYXRvcj4oa2V5KTsKICAg
ICAgICAgaWYgKCFlbnRyeSkKICAgICAgICAgICAgIHJldHVybiBNYXBwZWRUcmFpdHM6OnBlZWso
TWFwcGVkVHJhaXRzOjplbXB0eVZhbHVlKCkpOwotICAgICAgICByZXR1cm4gTWFwcGVkVHJhaXRz
OjpwZWVrKGVudHJ5LT5zZWNvbmQpOworICAgICAgICByZXR1cm4gTWFwcGVkVHJhaXRzOjpwZWVr
KGVudHJ5LT52YWx1ZSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzPgpAQCAt
MzA4LDcgKzMwOCw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBpdGVyYXRvciBpdCA9IGZp
bmQoa2V5KTsKICAgICAgICAgaWYgKGl0ID09IGVuZCgpKQogICAgICAgICAgICAgcmV0dXJuIE1h
cHBlZFRyYWl0czo6cGFzc091dChNYXBwZWRUcmFpdHM6OmVtcHR5VmFsdWUoKSk7Ci0gICAgICAg
IE1hcHBlZFBhc3NPdXRUeXBlIHJlc3VsdCA9IE1hcHBlZFRyYWl0czo6cGFzc091dChpdC0+c2Vj
b25kKTsKKyAgICAgICAgTWFwcGVkUGFzc091dFR5cGUgcmVzdWx0ID0gTWFwcGVkVHJhaXRzOjpw
YXNzT3V0KGl0LT52YWx1ZSk7CiAgICAgICAgIHJlbW92ZShpdCk7CiAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICAgfQpAQCAtMzIwLDcgKzMyMCw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAg
ICBpdGVyYXRvciBpdCA9IGZpbmQoa2V5KTsKICAgICAgICAgaWYgKGl0ID09IGVuZCgpKQogICAg
ICAgICAgICAgcmV0dXJuIE1hcHBlZFRyYWl0czo6cGFzc091dChNYXBwZWRUcmFpdHM6OmVtcHR5
VmFsdWUoKSk7Ci0gICAgICAgIE1hcHBlZFBhc3NPdXRUeXBlIHJlc3VsdCA9IE1hcHBlZFRyYWl0
czo6cGFzc091dChpdC0+c2Vjb25kKTsKKyAgICAgICAgTWFwcGVkUGFzc091dFR5cGUgcmVzdWx0
ID0gTWFwcGVkVHJhaXRzOjpwYXNzT3V0KGl0LT52YWx1ZSk7CiAgICAgICAgIHJlbW92ZShpdCk7
CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvU3BlY3RydW0uaCBiL1NvdXJjZS9XVEYvd3RmL1NwZWN0cnVtLmgKaW5kZXggNWU3YTQ4NGNk
ODc2NmJjYWYyMmNhNGM5M2RkY2U5NzBkZDJiYTIxMy4uZjBmMTllYjFjYmZhZTJhM2ZhZDkyYThl
MjlkZDhlYTI5ODliNDQ1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvU3BlY3RydW0uaAor
KysgYi9Tb3VyY2UvV1RGL3d0Zi9TcGVjdHJ1bS5oCkBAIC00NCw3ICs0NCw3IEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgICAgIHR5cGVuYW1lIEhhc2hNYXA8VCwgdW5zaWduZWQgbG9uZz46OkFkZFJl
c3VsdCByZXN1bHQgPSBtX21hcC5hZGQoa2V5LCBjb3VudCk7CiAgICAgICAgIGlmICghcmVzdWx0
LmlzTmV3RW50cnkpCi0gICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCArPSBjb3Vu
dDsKKyAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgKz0gY291bnQ7CiAgICAgfQog
ICAgIAogICAgIHVuc2lnbmVkIGxvbmcgZ2V0KGNvbnN0IFQmIGtleSkgY29uc3QKQEAgLTg4LDcg
Kzg4LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgVmVjdG9yPEtleUFuZENvdW50PiBsaXN0
OwogICAgICAgICBmb3IgKGNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBiZWdpbigpOyBpdGVyICE9IGVu
ZCgpOyArK2l0ZXIpCi0gICAgICAgICAgICBsaXN0LmFwcGVuZChLZXlBbmRDb3VudChpdGVyLT5m
aXJzdCwgaXRlci0+c2Vjb25kKSk7CisgICAgICAgICAgICBsaXN0LmFwcGVuZChLZXlBbmRDb3Vu
dChpdGVyLT5rZXksIGl0ZXItPnZhbHVlKSk7CiAgICAgICAgIAogICAgICAgICBzdGQ6OnNvcnQo
bGlzdC5iZWdpbigpLCBsaXN0LmVuZCgpKTsKICAgICAgICAgcmV0dXJuIGxpc3Q7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHAgYi9Tb3VyY2UvV1RGL3d0
Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHAKaW5kZXggYWJkMzUwZGJiYTNhMTgzMjNhNTE3MzNjOGYx
NWQ2ZmQ0OGMxYmM3NS4uNzQzYzk0YTNiMDlkYzAyM2I3YWVkMjY1MjEyODYwMzExZTY3YmQwMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcApAQCAtMTE5LDggKzExOSw4IEBAIHN0
YXRpYyBUaHJlYWRJZGVudGlmaWVyIGlkZW50aWZpZXJCeVB0aHJlYWRIYW5kbGUoY29uc3QgcHRo
cmVhZF90JiBwdGhyZWFkSGFuZGxlCiAKICAgICBUaHJlYWRNYXA6Oml0ZXJhdG9yIGkgPSB0aHJl
YWRNYXAoKS5iZWdpbigpOwogICAgIGZvciAoOyBpICE9IHRocmVhZE1hcCgpLmVuZCgpOyArK2kp
IHsKLSAgICAgICAgaWYgKHB0aHJlYWRfZXF1YWwoaS0+c2Vjb25kLCBwdGhyZWFkSGFuZGxlKSkK
LSAgICAgICAgICAgIHJldHVybiBpLT5maXJzdDsKKyAgICAgICAgaWYgKHB0aHJlYWRfZXF1YWwo
aS0+dmFsdWUsIHB0aHJlYWRIYW5kbGUpKQorICAgICAgICAgICAgcmV0dXJuIGktPmtleTsKICAg
ICB9CiAKICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
Z2VvbG9jYXRpb24vR2VvbG9jYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9s
b2NhdGlvbi9HZW9sb2NhdGlvbi5jcHAKaW5kZXggZTJjYzg5YzYzNjhjNGU3OWUyYjVlY2U4OTY3
OGVmOGYwNjVjMWNmZi4uNTBiNzU1NDliYjQ5YmQ0OWIyNjA0ZDRhOTc5MmYzOWJmZTU2NjcxYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlv
bi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlv
bi5jcHAKQEAgLTE5NCw3ICsxOTQsNyBAQCBHZW9sb2NhdGlvbjo6R2VvTm90aWZpZXIqIEdlb2xv
Y2F0aW9uOjpXYXRjaGVyczo6ZmluZChpbnQgaWQpCiAgICAgSWRUb05vdGlmaWVyTWFwOjppdGVy
YXRvciBpdGVyID0gbV9pZFRvTm90aWZpZXJNYXAuZmluZChpZCk7CiAgICAgaWYgKGl0ZXIgPT0g
bV9pZFRvTm90aWZpZXJNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBp
dGVyLT5zZWNvbmQuZ2V0KCk7CisgICAgcmV0dXJuIGl0ZXItPnZhbHVlLmdldCgpOwogfQogCiB2
b2lkIEdlb2xvY2F0aW9uOjpXYXRjaGVyczo6cmVtb3ZlKGludCBpZCkKQEAgLTIwMyw3ICsyMDMs
NyBAQCB2b2lkIEdlb2xvY2F0aW9uOjpXYXRjaGVyczo6cmVtb3ZlKGludCBpZCkKICAgICBJZFRv
Tm90aWZpZXJNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2lkVG9Ob3RpZmllck1hcC5maW5kKGlkKTsK
ICAgICBpZiAoaXRlciA9PSBtX2lkVG9Ob3RpZmllck1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJu
OwotICAgIG1fbm90aWZpZXJUb0lkTWFwLnJlbW92ZShpdGVyLT5zZWNvbmQpOworICAgIG1fbm90
aWZpZXJUb0lkTWFwLnJlbW92ZShpdGVyLT52YWx1ZSk7CiAgICAgbV9pZFRvTm90aWZpZXJNYXAu
cmVtb3ZlKGl0ZXIpOwogfQogCkBAIC0yMTIsNyArMjEyLDcgQEAgdm9pZCBHZW9sb2NhdGlvbjo6
V2F0Y2hlcnM6OnJlbW92ZShHZW9Ob3RpZmllciogbm90aWZpZXIpCiAgICAgTm90aWZpZXJUb0lk
TWFwOjppdGVyYXRvciBpdGVyID0gbV9ub3RpZmllclRvSWRNYXAuZmluZChub3RpZmllcik7CiAg
ICAgaWYgKGl0ZXIgPT0gbV9ub3RpZmllclRvSWRNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybjsK
LSAgICBtX2lkVG9Ob3RpZmllck1hcC5yZW1vdmUoaXRlci0+c2Vjb25kKTsKKyAgICBtX2lkVG9O
b3RpZmllck1hcC5yZW1vdmUoaXRlci0+dmFsdWUpOwogICAgIG1fbm90aWZpZXJUb0lkTWFwLnJl
bW92ZShpdGVyKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcAppbmRleCBiMDViMzI4NjNkMDcy
ZmI2NTdkY2E5YzhkNjRlMGI4NTFhZDA5MjQ1Li4zNzA0M2ZkNTVhZjJiNGI3OTA4MjU0ZTlmMjFk
NzI5YzUxNTMyMWRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcApAQCAtMTMyLDcgKzEzMiw3IEBA
IFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6b2JqZWN0
U3RvcmVOYW1lcygpIGNvbnN0CiB7CiAgICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+IG9iamVjdFN0
b3JlTmFtZXMgPSBET01TdHJpbmdMaXN0OjpjcmVhdGUoKTsKICAgICBmb3IgKE9iamVjdFN0b3Jl
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fb2JqZWN0U3RvcmVzLmJlZ2luKCk7IGl0ICE9IG1f
b2JqZWN0U3RvcmVzLmVuZCgpOyArK2l0KQotICAgICAgICBvYmplY3RTdG9yZU5hbWVzLT5hcHBl
bmQoaXQtPmZpcnN0KTsKKyAgICAgICAgb2JqZWN0U3RvcmVOYW1lcy0+YXBwZW5kKGl0LT5rZXkp
OwogICAgIG9iamVjdFN0b3JlTmFtZXMtPnNvcnQoKTsKICAgICByZXR1cm4gb2JqZWN0U3RvcmVO
YW1lcy5yZWxlYXNlKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcAppbmRleCBmNWI5Yzg3NzQwNjc0
M2YwZTVhNjA5YTRjY2U5ZDVlNGRhMjlhMzFjLi4yOTYwYjAyY2IyZTZiOGQ2NzE0YzIwN2E5OWQ1
NzU4MWY3MDVkZTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKQEAgLTExNyw3ICsxMTcsNyBAQCB2
b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6ZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBu
YW1lLCBQYXNzUmVmUHRyPElEQkNhbAogICAgIGlmIChpdCAhPSBtX2RhdGFiYXNlQmFja2VuZE1h
cC5lbmQoKSkgewogICAgICAgICAvLyBJZiB0aGVyZSBhcmUgYW55IGNvbm5lY3Rpb25zIHRvIHRo
ZSBkYXRhYmFzZSwgZGlyZWN0bHkgZGVsZXRlIHRoZQogICAgICAgICAvLyBkYXRhYmFzZS4KLSAg
ICAgICAgaXQtPnNlY29uZC0+ZGVsZXRlRGF0YWJhc2UoY2FsbGJhY2tzKTsKKyAgICAgICAgaXQt
PnZhbHVlLT5kZWxldGVEYXRhYmFzZShjYWxsYmFja3MpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCkBAIC0xNDAsNyArMTQwLDcgQEAgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IElEQkZh
Y3RvcnlCYWNrZW5kSW1wbDo6b3BlbkJhY2tpbmdTdG9yZShQYXNzUmVmUHRyPFMKICAgICBSZWZQ
dHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmU7CiAgICAgSURCQmFja2luZ1N0b3JlTWFw
OjppdGVyYXRvciBpdDIgPSBtX2JhY2tpbmdTdG9yZU1hcC5maW5kKGZpbGVJZGVudGlmaWVyKTsK
ICAgICBpZiAoaXQyICE9IG1fYmFja2luZ1N0b3JlTWFwLmVuZCgpKQotICAgICAgICBiYWNraW5n
U3RvcmUgPSBpdDItPnNlY29uZDsKKyAgICAgICAgYmFja2luZ1N0b3JlID0gaXQyLT52YWx1ZTsK
ICAgICBlbHNlIHsKICNpZiBVU0UoTEVWRUxEQikKICAgICAgICAgYmFja2luZ1N0b3JlID0gSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbihzZWN1cml0eU9yaWdpbi5nZXQoKSwgZGF0YURpcmVj
dG9yeSwgZmlsZUlkZW50aWZpZXIsIHRoaXMpOwpAQCAtMTY1LDcgKzE2NSw3IEBAIHZvaWQgSURC
RmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuSW50ZXJuYWwoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJD
YWxsYmFja3MqIGNhbGxiCiAgICAgaWYgKGl0ICE9IG1fZGF0YWJhc2VCYWNrZW5kTWFwLmVuZCgp
KSB7CiAgICAgICAgIC8vIElmIGl0J3MgYWxyZWFkeSBiZWVuIG9wZW5lZCwgd2UgaGF2ZSB0byB3
YWl0IGZvciBhbnkgcGVuZGluZwogICAgICAgICAvLyBzZXRWZXJzaW9uIGNhbGxzIHRvIGNvbXBs
ZXRlLgotICAgICAgICBpdC0+c2Vjb25kLT5vcGVuQ29ubmVjdGlvbihjYWxsYmFja3MpOworICAg
ICAgICBpdC0+dmFsdWUtPm9wZW5Db25uZWN0aW9uKGNhbGxiYWNrcyk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQk9iamVjdFN0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
Qk9iamVjdFN0b3JlLmNwcAppbmRleCBkZjkyNmY0NTljNjQ4YjNiZTVjYjI2MmU3MTMxMWMwYmQ1
ZGI4YTZhLi45MzU4MTY1YWE3ZWJiMjEzY2U3NDg1ZTA4NTQ4N2MxOTFlNmI3MDRkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3Bw
CkBAIC0yMjQsNyArMjI0LDcgQEAgUGFzc1JlZlB0cjxJREJJbmRleD4gSURCT2JqZWN0U3RvcmU6
OmluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMKIAogICAgIElEQklu
ZGV4TWFwOjppdGVyYXRvciBpdCA9IG1faW5kZXhNYXAuZmluZChuYW1lKTsKICAgICBpZiAoaXQg
IT0gbV9pbmRleE1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAg
IHJldHVybiBpdC0+dmFsdWU7CiAKICAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNl
PiBpbmRleEJhY2tlbmQgPSBtX2JhY2tlbmQtPmluZGV4KG5hbWUsIGVjKTsKICAgICBBU1NFUlQo
IWluZGV4QmFja2VuZCAhPSAhZWMpOyAvLyBJZiB3ZSBkaWRuJ3QgZ2V0IGFuIGluZGV4LCB3ZSBz
aG91bGQgaGF2ZSBnb3R0ZW4gYW4gZXhjZXB0aW9uIGNvZGUuIEFuZCB2aWNlIHZlcnNhLgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsLmNwcAppbmRleCAyZTJmMGZhOTZkZTg5ODRkMzdmYTk3ZTQyMTQ0
ZDZiNzRkYjNhOGU3Li45Zjk1ZmI5YmU1YTJmYTMyODhkOWY2NzNjZGE4ZjY5MGQ4ZDE5MzMwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcApAQCAtNzgsNyArNzgsNyBAQCBQYXNzUmVmUHRy
PERPTVN0cmluZ0xpc3Q+IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmluZGV4TmFtZXMoKSBj
b25zdAogewogICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiBpbmRleE5hbWVzID0gRE9NU3RyaW5n
TGlzdDo6Y3JlYXRlKCk7CiAgICAgZm9yIChJbmRleE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
X2luZGV4ZXMuYmVnaW4oKTsgaXQgIT0gbV9pbmRleGVzLmVuZCgpOyArK2l0KQotICAgICAgICBp
bmRleE5hbWVzLT5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgaW5kZXhOYW1lcy0+YXBwZW5k
KGl0LT5rZXkpOwogICAgIGluZGV4TmFtZXMtPnNvcnQoKTsKICAgICByZXR1cm4gaW5kZXhOYW1l
cy5yZWxlYXNlKCk7CiB9CkBAIC0xNzQsNyArMTc0LDcgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjpwdXQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVl
LAogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGZvciAoSW5kZXhNYXA6
Oml0ZXJhdG9yIGl0ID0gbV9pbmRleGVzLmJlZ2luKCk7IGl0ICE9IG1faW5kZXhlcy5lbmQoKTsg
KytpdCkgewotICAgICAgICAgICAgY29uc3QgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+JiBp
bmRleCA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICBjb25zdCBSZWZQdHI8SURCSW5kZXhCYWNr
ZW5kSW1wbD4mIGluZGV4ID0gaXQtPnZhbHVlOwogICAgICAgICAgICAgUmVmUHRyPElEQktleT4g
aW5kZXhLZXkgPSBmZXRjaEtleUZyb21LZXlQYXRoKHZhbHVlLmdldCgpLCBpbmRleC0+a2V5UGF0
aCgpKTsKICAgICAgICAgICAgIGlmIChpbmRleEtleSAmJiAhaW5kZXhLZXktPnZhbGlkKCkpIHsK
ICAgICAgICAgICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKQEAg
LTI1NCw3ICsyNTQsNyBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVy
bmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPAogCiAgICAgVmVjdG9yPFJl
ZlB0cjxJREJLZXk+ID4gaW5kZXhLZXlzOwogICAgIGZvciAoSW5kZXhNYXA6Oml0ZXJhdG9yIGl0
ID0gb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5iZWdpbigpOyBpdCAhPSBvYmplY3RTdG9yZS0+bV9p
bmRleGVzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IFJlZlB0cjxJREJJbmRleEJhY2tl
bmRJbXBsPiYgaW5kZXggPSBpdC0+c2Vjb25kOworICAgICAgICBjb25zdCBSZWZQdHI8SURCSW5k
ZXhCYWNrZW5kSW1wbD4mIGluZGV4ID0gaXQtPnZhbHVlOwogCiAgICAgICAgIFJlZlB0cjxJREJL
ZXk+IGluZGV4S2V5ID0gZmV0Y2hLZXlGcm9tS2V5UGF0aCh2YWx1ZS5nZXQoKSwgaW5kZXgtPmtl
eVBhdGgoKSk7CiAgICAgICAgIGlmICghaW5kZXhLZXkpIHsKQEAgLTI5Myw3ICsyOTMsNyBAQCB2
b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBQYXNzUmVmUHRyPAogCiAgICAgaW50IGkgPSAwOwogICAgIGZvciAoSW5kZXhN
YXA6Oml0ZXJhdG9yIGl0ID0gb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5iZWdpbigpOyBpdCAhPSBv
YmplY3RTdG9yZS0+bV9pbmRleGVzLmVuZCgpOyArK2l0LCArK2kpIHsKLSAgICAgICAgUmVmUHRy
PElEQkluZGV4QmFja2VuZEltcGw+JiBpbmRleCA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFJlZlB0
cjxJREJJbmRleEJhY2tlbmRJbXBsPiYgaW5kZXggPSBpdC0+dmFsdWU7CiAgICAgICAgIGlmICgh
aW5kZXgtPmhhc1ZhbGlkSWQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBUaGUgaW5kZXgg
b2JqZWN0IGhhcyBiZWVuIGNyZWF0ZWQsIGJ1dCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgZGF0YWJh
c2UgeWV0LgogCkBAIC0zNzYsMTAgKzM3NiwxMCBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6OmRlbGV0ZUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUAog
ICAgICAgICAgICAgcmVjb3JkSWRlbnRpZmllciA9IGJhY2tpbmdTdG9yZUN1cnNvci0+b2JqZWN0
U3RvcmVSZWNvcmRJZGVudGlmaWVyKCk7CiAKICAgICAgICAgICAgIGZvciAoSW5kZXhNYXA6Oml0
ZXJhdG9yIGl0ID0gb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5iZWdpbigpOyBpdCAhPSBvYmplY3RT
dG9yZS0+bV9pbmRleGVzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFpdC0+
c2Vjb25kLT5oYXNWYWxpZElkKCkpCisgICAgICAgICAgICAgICAgaWYgKCFpdC0+dmFsdWUtPmhh
c1ZhbGlkSWQoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7IC8vIFRoZSBpbmRleCBv
YmplY3QgaGFzIGJlZW4gY3JlYXRlZCwgYnV0IGRvZXMgbm90IGV4aXN0IGluIHRoZSBkYXRhYmFz
ZSB5ZXQuCiAKLSAgICAgICAgICAgICAgICBib29sIHN1Y2Nlc3MgPSBvYmplY3RTdG9yZS0+bV9i
YWNraW5nU3RvcmUtPmRlbGV0ZUluZGV4RGF0YUZvclJlY29yZChvYmplY3RTdG9yZS0+bV9kYXRh
YmFzZUlkLCBvYmplY3RTdG9yZS0+aWQoKSwgaXQtPnNlY29uZC0+aWQoKSwgcmVjb3JkSWRlbnRp
Zmllci5nZXQoKSk7CisgICAgICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gb2JqZWN0U3RvcmUt
Pm1fYmFja2luZ1N0b3JlLT5kZWxldGVJbmRleERhdGFGb3JSZWNvcmQob2JqZWN0U3RvcmUtPm1f
ZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmUtPmlkKCksIGl0LT52YWx1ZS0+aWQoKSwgcmVjb3JkSWRl
bnRpZmllci5nZXQoKSk7CiAgICAgICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBz
dWNjZXNzKTsKICAgICAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwCmluZGV4IDllMGIzYThmNzI5YzRiNjFkMDg0
YzdhZGNkMjBjMWExYTYyYzg1MWUuLmJhYmM3MWE4OTk5NDhjM2M0ZDcxMmNiOGNkOWU2YmFmMjYw
MTFiYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRy
YW5zYWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJU
cmFuc2FjdGlvbi5jcHAKQEAgLTkzLDcgKzkzLDcgQEAgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9y
ZT4gSURCVHJhbnNhY3Rpb246Om9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXAK
IAogICAgIElEQk9iamVjdFN0b3JlTWFwOjppdGVyYXRvciBpdCA9IG1fb2JqZWN0U3RvcmVNYXAu
ZmluZChuYW1lKTsKICAgICBpZiAoaXQgIT0gbV9vYmplY3RTdG9yZU1hcC5lbmQoKSkKLSAgICAg
ICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBpdC0+dmFsdWU7CiAKICAgICBS
ZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBvYmplY3RTdG9yZUJhY2tlbmQg
PSBtX2JhY2tlbmQtPm9iamVjdFN0b3JlKG5hbWUsIGVjKTsKICAgICBpZiAoIW9iamVjdFN0b3Jl
QmFja2VuZCkgewpAQCAtMjI3LDcgKzIyNyw3IEBAIGJvb2wgSURCVHJhbnNhY3Rpb246OmRpc3Bh
dGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCiAKICAgICAvLyBCcmVhayByZWZlcmVu
Y2UgY3ljbGVzLgogICAgIGZvciAoSURCT2JqZWN0U3RvcmVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9v
YmplY3RTdG9yZU1hcC5iZWdpbigpOyBpdCAhPSBtX29iamVjdFN0b3JlTWFwLmVuZCgpOyArK2l0
KQotICAgICAgICBpdC0+c2Vjb25kLT50cmFuc2FjdGlvbkZpbmlzaGVkKCk7CisgICAgICAgIGl0
LT52YWx1ZS0+dHJhbnNhY3Rpb25GaW5pc2hlZCgpOwogICAgIG1fb2JqZWN0U3RvcmVNYXAuY2xl
YXIoKTsKIAogICAgIFZlY3RvcjxSZWZQdHI8RXZlbnRUYXJnZXQ+ID4gdGFyZ2V0czsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvQWJzdHJhY3REYXRhYmFz
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Fic3RyYWN0RGF0YWJh
c2UuY3BwCmluZGV4IGU1MWMyNDQ0ODY2YTZjY2NiZDliNGE5Zjk3ZDY5ZGIyMjUzMmFmZDIuLmYw
NGJjZDg5YjFhZmFmZDI2OGQ2MjJlZjc4ZTBiOTY4Njg5NmRlY2EgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvQWJzdHJhY3REYXRhYmFzZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9BYnN0cmFjdERhdGFiYXNlLmNwcApA
QCAtMjgyLDcgKzI4Miw3IEBAIGJvb2wgQWJzdHJhY3REYXRhYmFzZTo6cGVyZm9ybU9wZW5BbmRW
ZXJpZnkoYm9vbCBzaG91bGRTZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwKICAgICAgICAgR3VpZFZl
cnNpb25NYXA6Oml0ZXJhdG9yIGVudHJ5ID0gZ3VpZFRvVmVyc2lvbk1hcCgpLmZpbmQobV9ndWlk
KTsKICAgICAgICAgaWYgKGVudHJ5ICE9IGd1aWRUb1ZlcnNpb25NYXAoKS5lbmQoKSkgewogICAg
ICAgICAgICAgLy8gTWFwIG51bGwgc3RyaW5nIHRvIGVtcHR5IHN0cmluZyAoc2VlIHVwZGF0ZUd1
aWRWZXJzaW9uTWFwKCkpLgotICAgICAgICAgICAgY3VycmVudFZlcnNpb24gPSBlbnRyeS0+c2Vj
b25kLmlzTnVsbCgpID8gU3RyaW5nKCIiKSA6IGVudHJ5LT5zZWNvbmQuaXNvbGF0ZWRDb3B5KCk7
CisgICAgICAgICAgICBjdXJyZW50VmVyc2lvbiA9IGVudHJ5LT52YWx1ZS5pc051bGwoKSA/IFN0
cmluZygiIikgOiBlbnRyeS0+dmFsdWUuaXNvbGF0ZWRDb3B5KCk7CiAgICAgICAgICAgICBMT0co
U3RvcmFnZUFQSSwgIkN1cnJlbnQgY2FjaGVkIHZlcnNpb24gZm9yIGd1aWQgJWkgaXMgJXMiLCBt
X2d1aWQsIGN1cnJlbnRWZXJzaW9uLmFzY2lpKCkuZGF0YSgpKTsKIAogI2lmIFBMQVRGT1JNKENI
Uk9NSVVNKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9E
YXRhYmFzZVRyYWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9E
YXRhYmFzZVRyYWNrZXIuY3BwCmluZGV4IDIzM2IzNzIxYjZlMzYwZDE4NjU5NWNjMDkyNzljNGE4
OGUzYzZkNWEuLjNjZmNmZmVlN2IxYmFiZjhkZjc0MzA4NDVmNGEwMzZiMTUzYjdhMmIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2Vy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJh
Y2tlci5jcHAKQEAgLTI1Miw3ICsyNTIsNyBAQCB2b2lkIERhdGFiYXNlVHJhY2tlcjo6aW50ZXJy
dXB0QWxsRGF0YWJhc2VzRm9yQ29udGV4dChjb25zdCBTY3JpcHRFeGVjdXRpb25Db250ZQogCiAg
ICAgICAgIERhdGFiYXNlTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgZGJOYW1lTWFwRW5kSXQgPSBu
YW1lTWFwLT5lbmQoKTsKICAgICAgICAgZm9yIChEYXRhYmFzZU5hbWVNYXA6OmNvbnN0X2l0ZXJh
dG9yIGRiTmFtZU1hcEl0ID0gbmFtZU1hcC0+YmVnaW4oKTsgZGJOYW1lTWFwSXQgIT0gZGJOYW1l
TWFwRW5kSXQ7ICsrZGJOYW1lTWFwSXQpIHsKLSAgICAgICAgICAgIERhdGFiYXNlU2V0KiBkYXRh
YmFzZVNldCA9IGRiTmFtZU1hcEl0LT5zZWNvbmQ7CisgICAgICAgICAgICBEYXRhYmFzZVNldCog
ZGF0YWJhc2VTZXQgPSBkYk5hbWVNYXBJdC0+dmFsdWU7CiAgICAgICAgICAgICBEYXRhYmFzZVNl
dDo6Y29uc3RfaXRlcmF0b3IgZGJTZXRFbmRJdCA9IGRhdGFiYXNlU2V0LT5lbmQoKTsKICAgICAg
ICAgICAgIGZvciAoRGF0YWJhc2VTZXQ6OmNvbnN0X2l0ZXJhdG9yIGRiU2V0SXQgPSBkYXRhYmFz
ZVNldC0+YmVnaW4oKTsgZGJTZXRJdCAhPSBkYlNldEVuZEl0OyArK2RiU2V0SXQpIHsKICAgICAg
ICAgICAgICAgICBpZiAoKCpkYlNldEl0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpID09IGNv
bnRleHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL09y
aWdpblVzYWdlUmVjb3JkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2Uv
T3JpZ2luVXNhZ2VSZWNvcmQuY3BwCmluZGV4IDQ0MzU1MGE1NzMwOWYzMzYzZjBmY2E5OGY1MDhj
MDI3NmQwZDk5ZGIuLjJiZjhhZjRhZTAwOTkyODBhY2ExNzU3NzQ4YmEyMWNmOTBiNzAyZGIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvT3JpZ2luVXNhZ2VS
ZWNvcmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvT3JpZ2lu
VXNhZ2VSZWNvcmQuY3BwCkBAIC05Myw3ICs5Myw3IEBAIHVuc2lnbmVkIGxvbmcgbG9uZyBPcmln
aW5Vc2FnZVJlY29yZDo6ZGlza1VzYWdlKCkKICAgICBIYXNoTWFwPFN0cmluZywgRGF0YWJhc2VF
bnRyeT46Oml0ZXJhdG9yIGlEYXRhYmFzZSA9IG1fZGF0YWJhc2VNYXAuYmVnaW4oKTsKICAgICBI
YXNoTWFwPFN0cmluZywgRGF0YWJhc2VFbnRyeT46Oml0ZXJhdG9yIGVuZERhdGFiYXNlID0gbV9k
YXRhYmFzZU1hcC5lbmQoKTsKICAgICBmb3IgKDsgaURhdGFiYXNlICE9IGVuZERhdGFiYXNlOyAr
K2lEYXRhYmFzZSkKLSAgICAgICAgbV9jYWNoZWREaXNrVXNhZ2UgKz0gaURhdGFiYXNlLT5zZWNv
bmQuc2l6ZTsKKyAgICAgICAgbV9jYWNoZWREaXNrVXNhZ2UgKz0gaURhdGFiYXNlLT52YWx1ZS5z
aXplOwogCiAgICAgbV9jYWNoZWREaXNrVXNhZ2VJc1ZhbGlkID0gdHJ1ZTsKICAgICByZXR1cm4g
bV9jYWNoZWREaXNrVXNhZ2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcAppbmRleCA4
MzdiOGZiZDIyMDVhZGM5NzQ4NmRkM2YwZThmMDIwNzM4MGY4ZDliLi5kYTNhN2VlNzViOGMwMTI1
OTQ2NmVjNGE3ZWFkYTk3YmQxYzIzYmY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5j
cHAKQEAgLTc4LDcgKzc4LDcgQEAgdm9pZCBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjphY3F1
aXJlTG9jayhTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCiAgICAgICAgIGNvb3JkaW5hdGlv
bkluZm9JdGVyYXRvciA9IG1fY29vcmRpbmF0aW9uSW5mb01hcC5hZGQoZGJJZGVudGlmaWVyLCBD
b29yZGluYXRpb25JbmZvKCkpLml0ZXJhdG9yOwogICAgIH0KIAotICAgIENvb3JkaW5hdGlvbklu
Zm8mIGluZm8gPSBjb29yZGluYXRpb25JbmZvSXRlcmF0b3ItPnNlY29uZDsKKyAgICBDb29yZGlu
YXRpb25JbmZvJiBpbmZvID0gY29vcmRpbmF0aW9uSW5mb0l0ZXJhdG9yLT52YWx1ZTsKICAgICBp
bmZvLnBlbmRpbmdUcmFuc2FjdGlvbnMuYXBwZW5kKHRyYW5zYWN0aW9uKTsKICAgICBwcm9jZXNz
UGVuZGluZ1RyYW5zYWN0aW9ucyhpbmZvKTsKIH0KQEAgLTkyLDcgKzkyLDcgQEAgdm9pZCBTUUxU
cmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpyZWxlYXNlTG9jayhTUUxUcmFuc2FjdGlvbiogdHJhbnNh
Y3Rpb24pCiAKICAgICBDb29yZGluYXRpb25JbmZvTWFwOjppdGVyYXRvciBjb29yZGluYXRpb25J
bmZvSXRlcmF0b3IgPSBtX2Nvb3JkaW5hdGlvbkluZm9NYXAuZmluZChkYklkZW50aWZpZXIpOwog
ICAgIEFTU0VSVChjb29yZGluYXRpb25JbmZvSXRlcmF0b3IgIT0gbV9jb29yZGluYXRpb25JbmZv
TWFwLmVuZCgpKTsKLSAgICBDb29yZGluYXRpb25JbmZvJiBpbmZvID0gY29vcmRpbmF0aW9uSW5m
b0l0ZXJhdG9yLT5zZWNvbmQ7CisgICAgQ29vcmRpbmF0aW9uSW5mbyYgaW5mbyA9IGNvb3JkaW5h
dGlvbkluZm9JdGVyYXRvci0+dmFsdWU7CiAKICAgICBpZiAodHJhbnNhY3Rpb24tPmlzUmVhZE9u
bHkoKSkgewogICAgICAgICBBU1NFUlQoaW5mby5hY3RpdmVSZWFkVHJhbnNhY3Rpb25zLmNvbnRh
aW5zKHRyYW5zYWN0aW9uKSk7CkBAIC0xMTAsNyArMTEwLDcgQEAgdm9pZCBTUUxUcmFuc2FjdGlv
bkNvb3JkaW5hdG9yOjpzaHV0ZG93bigpCiAgICAgLy8gTm90aWZ5IGFsbCB0cmFuc2FjdGlvbnMg
aW4gcHJvZ3Jlc3MgdGhhdCB0aGUgZGF0YWJhc2UgdGhyZWFkIGlzIHNodXR0aW5nIGRvd24KICAg
ICBmb3IgKENvb3JkaW5hdGlvbkluZm9NYXA6Oml0ZXJhdG9yIGNvb3JkaW5hdGlvbkluZm9JdGVy
YXRvciA9IG1fY29vcmRpbmF0aW9uSW5mb01hcC5iZWdpbigpOwogICAgICAgICAgY29vcmRpbmF0
aW9uSW5mb0l0ZXJhdG9yICE9IG1fY29vcmRpbmF0aW9uSW5mb01hcC5lbmQoKTsgKytjb29yZGlu
YXRpb25JbmZvSXRlcmF0b3IpIHsKLSAgICAgICAgQ29vcmRpbmF0aW9uSW5mbyYgaW5mbyA9IGNv
b3JkaW5hdGlvbkluZm9JdGVyYXRvci0+c2Vjb25kOworICAgICAgICBDb29yZGluYXRpb25JbmZv
JiBpbmZvID0gY29vcmRpbmF0aW9uSW5mb0l0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgaWYgKGlu
Zm8uYWN0aXZlV3JpdGVUcmFuc2FjdGlvbikKICAgICAgICAgICAgIGluZm8uYWN0aXZlV3JpdGVU
cmFuc2FjdGlvbi0+bm90aWZ5RGF0YWJhc2VUaHJlYWRJc1NodXR0aW5nRG93bigpOwogICAgICAg
ICBmb3IgKEhhc2hTZXQ8UmVmUHRyPFNRTFRyYW5zYWN0aW9uPiA+OjppdGVyYXRvciBhY3RpdmVS
ZWFkVHJhbnNhY3Rpb25zSXRlcmF0b3IgPQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJkYXRhYmFzZS9jaHJvbWl1bS9EYXRhYmFzZVRyYWNrZXJDaHJvbWl1bS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL0RhdGFiYXNlVHJhY2tl
ckNocm9taXVtLmNwcAppbmRleCAxMTdmZGJlZWQzMWQ2M2I2NGI5NDE4MDNiOGVhZGNkOTk4NWNl
ZWZjLi42MGE3NmNhNWM5NTk4MmJlYTk0Y2UwN2JhZjY2ZWRhNWQ4MjdjNWFiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL0RhdGFiYXNlVHJh
Y2tlckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNl
L2Nocm9taXVtL0RhdGFiYXNlVHJhY2tlckNocm9taXVtLmNwcApAQCAtMTgwLDcgKzE4MCw3IEBA
IHZvaWQgRGF0YWJhc2VUcmFja2VyOjppbnRlcnJ1cHRBbGxEYXRhYmFzZXNGb3JDb250ZXh0KGNv
bnN0IFNjcmlwdEV4ZWN1dGlvbkNvbnRlCiAKICAgICBEYXRhYmFzZU5hbWVNYXA6OmNvbnN0X2l0
ZXJhdG9yIGRiTmFtZU1hcEVuZEl0ID0gbmFtZU1hcC0+ZW5kKCk7CiAgICAgZm9yIChEYXRhYmFz
ZU5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGRiTmFtZU1hcEl0ID0gbmFtZU1hcC0+YmVnaW4oKTsg
ZGJOYW1lTWFwSXQgIT0gZGJOYW1lTWFwRW5kSXQ7ICsrZGJOYW1lTWFwSXQpIHsKLSAgICAgICAg
RGF0YWJhc2VTZXQqIGRhdGFiYXNlU2V0ID0gZGJOYW1lTWFwSXQtPnNlY29uZDsKKyAgICAgICAg
RGF0YWJhc2VTZXQqIGRhdGFiYXNlU2V0ID0gZGJOYW1lTWFwSXQtPnZhbHVlOwogICAgICAgICBE
YXRhYmFzZVNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gZGF0YWJhc2VTZXQtPmVuZCgpOwogICAg
ICAgICBmb3IgKERhdGFiYXNlU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IGRhdGFiYXNlU2V0LT5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIGlmICgoKml0KS0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpID09IGNvbnRleHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL1F1b3RhVHJhY2tlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL1F1b3RhVHJhY2tlci5jcHAKaW5k
ZXggMTBiMDhhMmI3MjNjZGEyOTIwZDQzZGVmYTE4YzMxMTVlZmExYjIyOC4uM2YyNDJhMjIxNTI3
MGRhZTZmZWRkODcxZWE2MDM2NTJiNWQyMjlkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJkYXRhYmFzZS9jaHJvbWl1bS9RdW90YVRyYWNrZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvY2hyb21pdW0vUXVvdGFUcmFja2VyLmNwcApA
QCAtNTMsOCArNTMsOCBAQCB2b2lkIFF1b3RhVHJhY2tlcjo6Z2V0RGF0YWJhc2VTaXplQW5kU3Bh
Y2VBdmFpbGFibGVUb09yaWdpbigKICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGEobV9kYXRh
R3VhcmQpOwogICAgICAgICBBU1NFUlQobV9kYXRhYmFzZVNpemVzLmNvbnRhaW5zKG9yaWdpbklk
ZW50aWZpZXIpKTsKICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFNpemVNYXA+Ojpjb25zdF9pdGVy
YXRvciBpdCA9IG1fZGF0YWJhc2VTaXplcy5maW5kKG9yaWdpbklkZW50aWZpZXIpOwotICAgICAg
ICBBU1NFUlQoaXQtPnNlY29uZC5jb250YWlucyhkYXRhYmFzZU5hbWUpKTsKLSAgICAgICAgKmRh
dGFiYXNlU2l6ZSA9IGl0LT5zZWNvbmQuZ2V0KGRhdGFiYXNlTmFtZSk7CisgICAgICAgIEFTU0VS
VChpdC0+dmFsdWUuY29udGFpbnMoZGF0YWJhc2VOYW1lKSk7CisgICAgICAgICpkYXRhYmFzZVNp
emUgPSBpdC0+dmFsdWUuZ2V0KGRhdGFiYXNlTmFtZSk7CiAKICAgICAgICAgaWYgKG1fc3BhY2VB
dmFpbGFibGVUb09yaWdpbnMuY29udGFpbnMob3JpZ2luSWRlbnRpZmllcikpIHsKICAgICAgICAg
ICAgICpzcGFjZUF2YWlsYWJsZSA9IG1fc3BhY2VBdmFpbGFibGVUb09yaWdpbnMuZ2V0KG9yaWdp
bklkZW50aWZpZXIpOwpAQCAtNzIsNyArNzIsNyBAQCB2b2lkIFF1b3RhVHJhY2tlcjo6dXBkYXRl
RGF0YWJhc2VTaXplKAogewogICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhKG1fZGF0YUd1YXJkKTsK
ICAgICBIYXNoTWFwPFN0cmluZywgU2l6ZU1hcD46Oml0ZXJhdG9yIGl0ID0gbV9kYXRhYmFzZVNp
emVzLmFkZChvcmlnaW5JZGVudGlmaWVyLCBTaXplTWFwKCkpLml0ZXJhdG9yOwotICAgIGl0LT5z
ZWNvbmQuc2V0KGRhdGFiYXNlTmFtZSwgZGF0YWJhc2VTaXplKTsKKyAgICBpdC0+dmFsdWUuc2V0
KGRhdGFiYXNlTmFtZSwgZGF0YWJhc2VTaXplKTsKIH0KIAogdm9pZCBRdW90YVRyYWNrZXI6OnVw
ZGF0ZVNwYWNlQXZhaWxhYmxlVG9PcmlnaW4oY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVy
LCB1bnNpZ25lZCBsb25nIGxvbmcgc3BhY2VBdmFpbGFibGUpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0RGVmbGF0ZUZyYW1lci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0RGVmbGF0ZUZyYW1lci5j
cHAKaW5kZXggNzZjMDQwZDFjOTM3MmFiNzBlMjI2NDYwYTg3ZDJhNTVmMmM4OGZmMC4uNjdiYjNk
YWExMjk5ODg0NTExMTA2OTBlMTkyZWEwZGEwMDc2NmNkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldERlZmxhdGVGcmFtZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXREZWZsYXRlRnJhbWVy
LmNwcApAQCAtODcsNyArODcsNyBAQCBib29sIFdlYlNvY2tldEV4dGVuc2lvbkRlZmxhdGVGcmFt
ZTo6cHJvY2Vzc1Jlc3BvbnNlKGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbgogICAgIGludCB3
aW5kb3dCaXRzID0gMTU7CiAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJh
dG9yIHBhcmFtZXRlciA9IHNlcnZlclBhcmFtZXRlcnMuZmluZCgibWF4X3dpbmRvd19iaXRzIik7
CiAgICAgaWYgKHBhcmFtZXRlciAhPSBzZXJ2ZXJQYXJhbWV0ZXJzLmVuZCgpKSB7Ci0gICAgICAg
IHdpbmRvd0JpdHMgPSBwYXJhbWV0ZXItPnNlY29uZC50b0ludCgpOworICAgICAgICB3aW5kb3dC
aXRzID0gcGFyYW1ldGVyLT52YWx1ZS50b0ludCgpOwogICAgICAgICBpZiAod2luZG93Qml0cyA8
IDggfHwgd2luZG93Qml0cyA+IDE1KSB7CiAgICAgICAgICAgICBtX2ZhaWx1cmVSZWFzb24gPSAi
UmVjZWl2ZWQgaW52YWxpZCBtYXhfd2luZG93X2JpdHMgcGFyYW1ldGVyIjsKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKQEAgLTk4LDcgKzk4LDcgQEAgYm9vbCBXZWJTb2NrZXRFeHRlbnNpb25E
ZWZsYXRlRnJhbWU6OnByb2Nlc3NSZXNwb25zZShjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW4K
ICAgICBXZWJTb2NrZXREZWZsYXRlcjo6Q29udGV4dFRha2VPdmVyTW9kZSBtb2RlID0gV2ViU29j
a2V0RGVmbGF0ZXI6OlRha2VPdmVyQ29udGV4dDsKICAgICBwYXJhbWV0ZXIgPSBzZXJ2ZXJQYXJh
bWV0ZXJzLmZpbmQoIm5vX2NvbnRleHRfdGFrZW92ZXIiKTsKICAgICBpZiAocGFyYW1ldGVyICE9
IHNlcnZlclBhcmFtZXRlcnMuZW5kKCkpIHsKLSAgICAgICAgaWYgKCFwYXJhbWV0ZXItPnNlY29u
ZC5pc051bGwoKSkgeworICAgICAgICBpZiAoIXBhcmFtZXRlci0+dmFsdWUuaXNOdWxsKCkpIHsK
ICAgICAgICAgICAgIG1fZmFpbHVyZVJlYXNvbiA9ICJSZWNlaXZlZCBpbnZhbGlkIG5vX2NvbnRl
eHRfdGFrZW92ZXIgcGFyYW1ldGVyIjsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNv
Y2tldEV4dGVuc2lvbkRpc3BhdGNoZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJz
b2NrZXRzL1dlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXIuY3BwCmluZGV4IDdjNTkyYWQxYmYy
ODA2OGM4MzAzMzY5YjYwNjU2NzNiNmJhN2U5NzQuLjU2MDlmNjU4MWFhYjk3NDJiMGZkODVmZjE1
ZDE1ZmE1MGVkMjlmNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29j
a2V0cy9XZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0RXh0ZW5zaW9uRGlzcGF0Y2hlci5jcHAKQEAg
LTE4MSwxMCArMTgxLDEwIEBAIHZvaWQgV2ViU29ja2V0RXh0ZW5zaW9uRGlzcGF0Y2hlcjo6YXBw
ZW5kQWNjZXB0ZWRFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBleHRlbnNpCiAgICAgLy8gRklYTUU6
IFNob3VsZCB1c2UgTGlzdEhhc2hTZXQgdG8ga2VlcCB0aGUgb3JkZXIgb2YgdGhlIHBhcmFtZXRl
cnMuCiAgICAgZm9yIChIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXRl
cmF0b3IgPSBleHRlbnNpb25QYXJhbWV0ZXJzLmJlZ2luKCk7IGl0ZXJhdG9yICE9IGV4dGVuc2lv
blBhcmFtZXRlcnMuZW5kKCk7ICsraXRlcmF0b3IpIHsKICAgICAgICAgbV9hY2NlcHRlZEV4dGVu
c2lvbnNCdWlsZGVyLmFwcGVuZCgiOyAiKTsKLSAgICAgICAgbV9hY2NlcHRlZEV4dGVuc2lvbnNC
dWlsZGVyLmFwcGVuZChpdGVyYXRvci0+Zmlyc3QpOwotICAgICAgICBpZiAoIWl0ZXJhdG9yLT5z
ZWNvbmQuaXNOdWxsKCkpIHsKKyAgICAgICAgbV9hY2NlcHRlZEV4dGVuc2lvbnNCdWlsZGVyLmFw
cGVuZChpdGVyYXRvci0+a2V5KTsKKyAgICAgICAgaWYgKCFpdGVyYXRvci0+dmFsdWUuaXNOdWxs
KCkpIHsKICAgICAgICAgICAgIG1fYWNjZXB0ZWRFeHRlbnNpb25zQnVpbGRlci5hcHBlbmQoIj0i
KTsKLSAgICAgICAgICAgIG1fYWNjZXB0ZWRFeHRlbnNpb25zQnVpbGRlci5hcHBlbmQoaXRlcmF0
b3ItPnNlY29uZCk7CisgICAgICAgICAgICBtX2FjY2VwdGVkRXh0ZW5zaW9uc0J1aWxkZXIuYXBw
ZW5kKGl0ZXJhdG9yLT52YWx1ZSk7CiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAppbmRleCBjZmU2ZDhlMmUyYjg5
ZTJlY2I4ZjlmYzE1ZDhkNmI1MzY1YzQ3YjhmLi5lZWUxMDk2MWIxNmQ3ZDdlYjYxODYxZmJmMWM2
ZDY5YzBlZWFmYjc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FY
T2JqZWN0Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmpl
Y3RDYWNoZS5jcHAKQEAgLTkzLDcgKzkzLDcgQEAgQVhPYmplY3RDYWNoZTo6fkFYT2JqZWN0Q2Fj
aGUoKQogewogICAgIEhhc2hNYXA8QVhJRCwgUmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+ID46
Oml0ZXJhdG9yIGVuZCA9IG1fb2JqZWN0cy5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8QVhJRCwg
UmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+ID46Oml0ZXJhdG9yIGl0ID0gbV9vYmplY3RzLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBv
YmogPSAoKml0KS5zZWNvbmQuZ2V0KCk7CisgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG9i
aiA9ICgqaXQpLnZhbHVlLmdldCgpOwogICAgICAgICBkZXRhY2hXcmFwcGVyKG9iaik7CiAgICAg
ICAgIG9iai0+ZGV0YWNoKCk7CiAgICAgICAgIHJlbW92ZUFYSUQob2JqKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvRE9NT2JqZWN0Q2FjaGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9ET01PYmplY3RDYWNoZS5jcHAKaW5kZXggMmU3
ZjEwNmU3OWUzMWM3MzE1NGFiOWNmYWExOWE1ODllOWRlN2RkNS4uZGQ3ZDA0OTcxOGM4MTIyZjI0
YjM4ZGI4ODNlNWI2YjY0ZTJlYzA2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvZ29iamVjdC9ET01PYmplY3RDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvZ29iamVjdC9ET01PYmplY3RDYWNoZS5jcHAKQEAgLTc0LDcgKzc0LDcgQEAgdm9pZCBET01P
YmplY3RDYWNoZTo6Y2xlYXJCeUZyYW1lKFdlYkNvcmU6OkZyYW1lKiBmcmFtZSkKICAgICAvLyBp
dGVyYXRpbmcgdGhlIGNhY2hlIGl0c2VsZi4KICAgICBET01PYmplY3RNYXA6Oml0ZXJhdG9yIGVu
ZCA9IGRvbU9iamVjdHMoKS5lbmQoKTsKICAgICBmb3IgKERPTU9iamVjdE1hcDo6aXRlcmF0b3Ig
aXRlciA9IGRvbU9iamVjdHMoKS5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0gICAg
ICAgIERPTU9iamVjdENhY2hlRGF0YSogZGF0YSA9IGl0ZXItPnNlY29uZDsKKyAgICAgICAgRE9N
T2JqZWN0Q2FjaGVEYXRhKiBkYXRhID0gaXRlci0+dmFsdWU7CiAgICAgICAgIEFTU0VSVChkYXRh
KTsKICAgICAgICAgaWYgKCghZnJhbWUgfHwgZGF0YS0+ZnJhbWUgPT0gZnJhbWUpICYmIGRhdGEt
PnRpbWVzUmV0dXJuZWQpCiAgICAgICAgICAgICB0b1VucmVmLmFwcGVuZChkYXRhKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTU9iamVjdEhhc2hUYWJsZU1hcC5o
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NT2JqZWN0SGFzaFRhYmxlTWFwLmgKaW5k
ZXggMjE2Yjk0NWM0OWI5MTFlM2Y0NWVmZTVhN2U0YzEzMjk2ZjMwZWIxYi4uZWRkODcwMjI5Y2Jk
ZjYzZDkxOWJhODU5Y2VlYTVkOWM0MTkzYzYxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvRE9NT2JqZWN0SGFzaFRhYmxlTWFwLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvRE9NT2JqZWN0SGFzaFRhYmxlTWFwLmgKQEAgLTM5LDE1ICszOSwxNSBAQCBw
dWJsaWM6CiAgICAgfkRPTU9iamVjdEhhc2hUYWJsZU1hcCgpCiAgICAgewogICAgICAgICBmb3Ig
KEhhc2hNYXA8Y29uc3QgSlNDOjpIYXNoVGFibGUqLCBKU0M6Okhhc2hUYWJsZT46Oml0ZXJhdG9y
IGl0ZXIgPSBtX21hcC5iZWdpbigpOyBpdGVyICE9IG1fbWFwLmVuZCgpOyArK2l0ZXIpCi0gICAg
ICAgICAgICBpdGVyLT5zZWNvbmQuZGVsZXRlVGFibGUoKTsKKyAgICAgICAgICAgIGl0ZXItPnZh
bHVlLmRlbGV0ZVRhYmxlKCk7CiAgICAgfQogCiAgICAgY29uc3QgSlNDOjpIYXNoVGFibGUqIGdl
dChjb25zdCBKU0M6Okhhc2hUYWJsZSogc3RhdGljVGFibGUpCiAgICAgewogICAgICAgICBIYXNo
TWFwPGNvbnN0IEpTQzo6SGFzaFRhYmxlKiwgSlNDOjpIYXNoVGFibGU+OjppdGVyYXRvciBpdGVy
ID0gbV9tYXAuZmluZChzdGF0aWNUYWJsZSk7CiAgICAgICAgIGlmIChpdGVyICE9IG1fbWFwLmVu
ZCgpKQotICAgICAgICAgICAgcmV0dXJuICZpdGVyLT5zZWNvbmQ7Ci0gICAgICAgIHJldHVybiAm
bV9tYXAuc2V0KHN0YXRpY1RhYmxlLCBKU0M6Okhhc2hUYWJsZSgqc3RhdGljVGFibGUpKS5pdGVy
YXRvci0+c2Vjb25kOworICAgICAgICAgICAgcmV0dXJuICZpdGVyLT52YWx1ZTsKKyAgICAgICAg
cmV0dXJuICZtX21hcC5zZXQoc3RhdGljVGFibGUsIEpTQzo6SGFzaFRhYmxlKCpzdGF0aWNUYWJs
ZSkpLml0ZXJhdG9yLT52YWx1ZTsKICAgICB9CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01XcmFwcGVyV29ybGQuY3BwIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvRE9NV3JhcHBlcldvcmxkLmNwcAppbmRleCA4MTI1NDliYzM2MTk1YTc3
NWVkNmE5NGMzOTAwOWQzMjk1ZmUxMTE5Li4zMTY0MWQ1OTYyYzI1MWQ2ODRhOWM2YzgwMTRhMmM4
NDZmNzZkZjE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01XcmFw
cGVyV29ybGQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTVdyYXBwZXJX
b3JsZC5jcHAKQEAgLTM0LDcgKzM0LDcgQEAgdm9pZCBKU1N0cmluZ093bmVyOjpmaW5hbGl6ZShK
U0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCogY29udGV4dCkKIHsKICAgICBK
U1N0cmluZyoganNTdHJpbmcgPSBzdGF0aWNfY2FzdDxKU1N0cmluZyo+KGhhbmRsZS5nZXQoKS5h
c0NlbGwoKSk7CiAgICAgU3RyaW5nSW1wbCogc3RyaW5nSW1wbCA9IHN0YXRpY19jYXN0PFN0cmlu
Z0ltcGwqPihjb250ZXh0KTsKLSAgICBBU1NFUlRfVU5VU0VEKGpzU3RyaW5nLCBtX3dvcmxkLT5t
X3N0cmluZ0NhY2hlLmZpbmQoc3RyaW5nSW1wbCktPnNlY29uZC5nZXQoKSA9PSBqc1N0cmluZyk7
CisgICAgQVNTRVJUX1VOVVNFRChqc1N0cmluZywgbV93b3JsZC0+bV9zdHJpbmdDYWNoZS5maW5k
KHN0cmluZ0ltcGwpLT52YWx1ZS5nZXQoKSA9PSBqc1N0cmluZyk7CiAgICAgbV93b3JsZC0+bV9z
dHJpbmdDYWNoZS5yZW1vdmUoc3RyaW5nSW1wbCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCmluZGV4IGMxMWY2MDEwMzhhNjYwMDY5YmFhNWQ5OTI2
Y2MyNWQyYmVkMDQ4NmMuLjk0NzBjNDQ0MWExMjRlMmI3YjI1ODA5MTllY2UzN2MzOGY5N2VhOWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcApAQCAtMjU4
LDcgKzI1OCw3IEBAIFN0cnVjdHVyZSogY2FjaGVET01TdHJ1Y3R1cmUoSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1CiB7CiAgICAgSlNET01TdHJ1Y3R1
cmVNYXAmIHN0cnVjdHVyZXMgPSBnbG9iYWxPYmplY3QtPnN0cnVjdHVyZXMoKTsKICAgICBBU1NF
UlQoIXN0cnVjdHVyZXMuY29udGFpbnMoY2xhc3NJbmZvKSk7Ci0gICAgcmV0dXJuIHN0cnVjdHVy
ZXMuc2V0KGNsYXNzSW5mbywgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4oZ2xvYmFsT2JqZWN0LT5n
bG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKSkuaXRlcmF0b3ItPnNlY29uZC5n
ZXQoKTsKKyAgICByZXR1cm4gc3RydWN0dXJlcy5zZXQoY2xhc3NJbmZvLCBXcml0ZUJhcnJpZXI8
U3RydWN0dXJlPihnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LCBzdHJ1
Y3R1cmUpKS5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7CiB9CiAKIEpTQzo6SlNPYmplY3QqIHRvSlNT
ZXF1ZW5jZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkJiBsZW5ndGgp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCmluZGV4IDdlZWJjNzdk
NDAxMWI4NDI4ZTFhMzdkZGI4YmM0OTQ2YjNmN2VmYTUuLmFkNGI4ZmUzYzI1MTIzYWFkYjEzMDM4
OTZlZjljMDRhOWQ5ODgxYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NQmluZGluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmlu
ZGluZy5oCkBAIC0xNTAsNyArMTUwLDcgQEAgZW51bSBQYXJhbWV0ZXJEZWZhdWx0UG9saWN5IHsK
ICAgICB7CiAgICAgICAgIGlmIChjbGVhcklubGluZUNhY2hlZFdyYXBwZXIod29ybGQsIGRvbU9i
amVjdCwgd3JhcHBlcikpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEFTU0VSVCh3b3Js
ZC0+bV93cmFwcGVycy5maW5kKGRvbU9iamVjdCktPnNlY29uZC5nZXQoKSA9PSB3cmFwcGVyKTsK
KyAgICAgICAgQVNTRVJUKHdvcmxkLT5tX3dyYXBwZXJzLmZpbmQoZG9tT2JqZWN0KS0+dmFsdWUu
Z2V0KCkgPT0gd3JhcHBlcik7CiAgICAgICAgIHdvcmxkLT5tX3dyYXBwZXJzLnJlbW92ZShkb21P
YmplY3QpOwogICAgIH0KICAgICAKQEAgLTM0OSw3ICszNDksNyBAQCBlbnVtIFBhcmFtZXRlckRl
ZmF1bHRQb2xpY3kgewogICAgICAgICBKU1N0cmluZ0NhY2hlJiBzdHJpbmdDYWNoZSA9IGN1cnJl
bnRXb3JsZChleGVjKS0+bV9zdHJpbmdDYWNoZTsKICAgICAgICAgSlNTdHJpbmdDYWNoZTo6aXRl
cmF0b3IgaXQgPSBzdHJpbmdDYWNoZS5maW5kKHN0cmluZ0ltcGwpOwogICAgICAgICBpZiAoaXQg
IT0gc3RyaW5nQ2FjaGUuZW5kKCkpCi0gICAgICAgICAgICByZXR1cm4gaXQtPnNlY29uZC5nZXQo
KTsKKyAgICAgICAgICAgIHJldHVybiBpdC0+dmFsdWUuZ2V0KCk7CiAKICAgICAgICAgcmV0dXJu
IGpzU3RyaW5nU2xvd0Nhc2UoZXhlYywgc3RyaW5nQ2FjaGUsIHN0cmluZ0ltcGwpOwogICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcApp
bmRleCAzMWZmYjU0ZDQ1ZmJkYTRhMTY3ZWFiNTQxODMxOTFmYTY4MWI4ODVjLi5lNDA1OGI4YWU3
ZGVhMGIyOTI4ZjU5NTRjZWE3MDhlZGZhMTA5ZWVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwCkBAIC04OCwxMSArODgsMTEgQEAgdm9p
ZCBKU0RPTUdsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQogCiAgICAgSlNET01TdHJ1Y3R1cmVNYXA6Oml0ZXJhdG9yIGVuZCA9IHRo
aXNPYmplY3QtPnN0cnVjdHVyZXMoKS5lbmQoKTsKICAgICBmb3IgKEpTRE9NU3RydWN0dXJlTWFw
OjppdGVyYXRvciBpdCA9IHRoaXNPYmplY3QtPnN0cnVjdHVyZXMoKS5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kKCZpdC0+c2Vjb25kKTsKKyAgICAgICAg
dmlzaXRvci5hcHBlbmQoJml0LT52YWx1ZSk7CiAKICAgICBKU0RPTUNvbnN0cnVjdG9yTWFwOjpp
dGVyYXRvciBlbmQyID0gdGhpc09iamVjdC0+Y29uc3RydWN0b3JzKCkuZW5kKCk7CiAgICAgZm9y
IChKU0RPTUNvbnN0cnVjdG9yTWFwOjppdGVyYXRvciBpdDIgPSB0aGlzT2JqZWN0LT5jb25zdHJ1
Y3RvcnMoKS5iZWdpbigpOyBpdDIgIT0gZW5kMjsgKytpdDIpCi0gICAgICAgIHZpc2l0b3IuYXBw
ZW5kKCZpdDItPnNlY29uZCk7CisgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZpdDItPnZhbHVlKTsK
IAogICAgIGlmICh0aGlzT2JqZWN0LT5tX2luamVjdGVkU2NyaXB0KQogICAgICAgICB2aXNpdG9y
LmFwcGVuZCgmdGhpc09iamVjdC0+bV9pbmplY3RlZFNjcmlwdCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuaAppbmRleCA3NGYzNWIwYjc5MmMxYzA2
MDM3ZDFhZGVmM2IyMzEzNjU4YTkyZGFkLi40OWE5YjFhNjJlZjY3NmQxMTFkNTcxOGRlZGI3MGVk
OWY0ODNiMDUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUds
b2JhbE9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFs
T2JqZWN0LmgKQEAgLTk1LDcgKzk1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBK
U0M6OkpTT2JqZWN0KiBjb25zdHJ1Y3RvciA9IENvbnN0cnVjdG9yQ2xhc3M6OmNyZWF0ZShleGVj
LCBDb25zdHJ1Y3RvckNsYXNzOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBj
b25zdF9jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSwgZ2xvYmFsT2JqZWN0
LT5vYmplY3RQcm90b3R5cGUoKSksIGNvbnN0X2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9i
YWxPYmplY3QpKTsKICAgICAgICAgQVNTRVJUKCFjb25zdF9jYXN0PEpTRE9NR2xvYmFsT2JqZWN0
Kj4oZ2xvYmFsT2JqZWN0KS0+Y29uc3RydWN0b3JzKCkuY29udGFpbnMoJkNvbnN0cnVjdG9yQ2xh
c3M6OnNfaW5mbykpOwogICAgICAgICBKU0M6OldyaXRlQmFycmllcjxKU0M6OkpTT2JqZWN0PiB0
ZW1wOwotICAgICAgICBjb25zdF9jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0
KS0+Y29uc3RydWN0b3JzKCkuYWRkKCZDb25zdHJ1Y3RvckNsYXNzOjpzX2luZm8sIHRlbXApLml0
ZXJhdG9yLT5zZWNvbmQuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LCBjb25z
dHJ1Y3Rvcik7CisgICAgICAgIGNvbnN0X2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxP
YmplY3QpLT5jb25zdHJ1Y3RvcnMoKS5hZGQoJkNvbnN0cnVjdG9yQ2xhc3M6OnNfaW5mbywgdGVt
cCkuaXRlcmF0b3ItPnZhbHVlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdCwg
Y29uc3RydWN0b3IpOwogICAgICAgICByZXR1cm4gY29uc3RydWN0b3I7CiAgICAgfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUGFnZVNjcmlwdERlYnVnU2VydmVyLmNw
cAppbmRleCA2ZGEwODY5Nzg0MTNkMTVlZTBkMGRlNTgyY2Y4YjM1OGJlMDA3MTJjLi40YWE3Y2Ez
MzJhMGJiM2RkODliNGIzZjFkN2U5NjQ4NWI3YTlmZWIwIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHAKQEAgLTg0LDkgKzg0
LDkgQEAgdm9pZCBQYWdlU2NyaXB0RGVidWdTZXJ2ZXI6OmFkZExpc3RlbmVyKFNjcmlwdERlYnVn
TGlzdGVuZXIqIGxpc3RlbmVyLCBQYWdlKiBwYWcKIAogICAgIFBhZ2VMaXN0ZW5lcnNNYXA6OkFk
ZFJlc3VsdCByZXN1bHQgPSBtX3BhZ2VMaXN0ZW5lcnNNYXAuYWRkKHBhZ2UsIDApOwogICAgIGlm
IChyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBu
ZXcgTGlzdGVuZXJTZXQ7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBuZXcgTGlz
dGVuZXJTZXQ7CiAKLSAgICBMaXN0ZW5lclNldCogbGlzdGVuZXJzID0gcmVzdWx0Lml0ZXJhdG9y
LT5zZWNvbmQ7CisgICAgTGlzdGVuZXJTZXQqIGxpc3RlbmVycyA9IHJlc3VsdC5pdGVyYXRvci0+
dmFsdWU7CiAgICAgbGlzdGVuZXJzLT5hZGQobGlzdGVuZXIpOwogCiAgICAgcmVjb21waWxlQWxs
SlNGdW5jdGlvbnNTb29uKCk7CkBAIC0xMDIsNyArMTAyLDcgQEAgdm9pZCBQYWdlU2NyaXB0RGVi
dWdTZXJ2ZXI6OnJlbW92ZUxpc3RlbmVyKFNjcmlwdERlYnVnTGlzdGVuZXIqIGxpc3RlbmVyLCBQ
YWdlKgogICAgIGlmIChpdCA9PSBtX3BhZ2VMaXN0ZW5lcnNNYXAuZW5kKCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIExpc3RlbmVyU2V0KiBsaXN0ZW5lcnMgPSBpdC0+c2Vjb25kOworICAgIExp
c3RlbmVyU2V0KiBsaXN0ZW5lcnMgPSBpdC0+dmFsdWU7CiAgICAgbGlzdGVuZXJzLT5yZW1vdmUo
bGlzdGVuZXIpOwogICAgIGlmIChsaXN0ZW5lcnMtPmlzRW1wdHkoKSkgewogICAgICAgICBtX3Bh
Z2VMaXN0ZW5lcnNNYXAucmVtb3ZlKGl0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdENhY2hlZEZyYW1lRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY3JpcHRDYWNoZWRGcmFtZURhdGEuY3BwCmluZGV4IDIxMDBjNmIwMjYxYjJkZmQy
NWY3M2E0ZDdhYjM5MzlhNWUyMjg2M2QuLmQyNDI2YTIwYmEyYzcyYWE0YzIzZmI1YjIxYjM5MGE4
YWYyNmIyZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENh
Y2hlZEZyYW1lRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0
Q2FjaGVkRnJhbWVEYXRhLmNwcApAQCAtNTMsOCArNTMsOCBAQCBTY3JpcHRDYWNoZWRGcmFtZURh
dGE6OlNjcmlwdENhY2hlZEZyYW1lRGF0YShGcmFtZSogZnJhbWUpCiAKICAgICBTY3JpcHRDb250
cm9sbGVyOjpTaGVsbE1hcDo6aXRlcmF0b3Igd2luZG93U2hlbGxzRW5kID0gd2luZG93U2hlbGxz
LmVuZCgpOwogICAgIGZvciAoU2NyaXB0Q29udHJvbGxlcjo6U2hlbGxNYXA6Oml0ZXJhdG9yIGl0
ZXIgPSB3aW5kb3dTaGVsbHMuYmVnaW4oKTsgaXRlciAhPSB3aW5kb3dTaGVsbHNFbmQ7ICsraXRl
cikgewotICAgICAgICBKU0RPTVdpbmRvdyogd2luZG93ID0gaXRlci0+c2Vjb25kLT53aW5kb3co
KTsKLSAgICAgICAgbV93aW5kb3dzLmFkZChpdGVyLT5maXJzdC5nZXQoKSwgU3Ryb25nPEpTRE9N
V2luZG93Pih3aW5kb3ctPmdsb2JhbERhdGEoKSwgd2luZG93KSk7CisgICAgICAgIEpTRE9NV2lu
ZG93KiB3aW5kb3cgPSBpdGVyLT52YWx1ZS0+d2luZG93KCk7CisgICAgICAgIG1fd2luZG93cy5h
ZGQoaXRlci0+a2V5LmdldCgpLCBTdHJvbmc8SlNET01XaW5kb3c+KHdpbmRvdy0+Z2xvYmFsRGF0
YSgpLCB3aW5kb3cpKTsKICAgICB9CiAKICAgICBzY3JpcHRDb250cm9sbGVyLT5hdHRhY2hEZWJ1
Z2dlcigwKTsKQEAgLTc0LDggKzc0LDggQEAgdm9pZCBTY3JpcHRDYWNoZWRGcmFtZURhdGE6OnJl
c3RvcmUoRnJhbWUqIGZyYW1lKQogCiAgICAgU2NyaXB0Q29udHJvbGxlcjo6U2hlbGxNYXA6Oml0
ZXJhdG9yIHdpbmRvd1NoZWxsc0VuZCA9IHdpbmRvd1NoZWxscy5lbmQoKTsKICAgICBmb3IgKFNj
cmlwdENvbnRyb2xsZXI6OlNoZWxsTWFwOjppdGVyYXRvciBpdGVyID0gd2luZG93U2hlbGxzLmJl
Z2luKCk7IGl0ZXIgIT0gd2luZG93U2hlbGxzRW5kOyArK2l0ZXIpIHsKLSAgICAgICAgRE9NV3Jh
cHBlcldvcmxkKiB3b3JsZCA9IGl0ZXItPmZpcnN0LmdldCgpOwotICAgICAgICBKU0RPTVdpbmRv
d1NoZWxsKiB3aW5kb3dTaGVsbCA9IGl0ZXItPnNlY29uZC5nZXQoKTsKKyAgICAgICAgRE9NV3Jh
cHBlcldvcmxkKiB3b3JsZCA9IGl0ZXItPmtleS5nZXQoKTsKKyAgICAgICAgSlNET01XaW5kb3dT
aGVsbCogd2luZG93U2hlbGwgPSBpdGVyLT52YWx1ZS5nZXQoKTsKIAogICAgICAgICBpZiAoSlNE
T01XaW5kb3cqIHdpbmRvdyA9IG1fd2luZG93cy5nZXQod29ybGQpLmdldCgpKQogICAgICAgICAg
ICAgd2luZG93U2hlbGwtPnNldFdpbmRvdyh3aW5kb3ctPmdsb2JhbERhdGEoKSwgd2luZG93KTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAKaW5k
ZXggNDE0M2Y0NGI1MTRmNjllZGNkYzNiMzBlMzViYzBkNjY5ZDkyNTZkMy4uZTI3ODJlNDY5NGJl
OTViNTRkNTA2MDJmZTdjZGE4ZTYzNTg1ZmQ2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAKQEAgLTkzLDcgKzkzLDcgQEAgU2NyaXB0Q29u
dHJvbGxlcjo6flNjcmlwdENvbnRyb2xsZXIoKQogICAgIC8vIEl0J3MgbGlrZWx5IHRoYXQgZGVz
dHJveWluZyBtX3dpbmRvd1NoZWxscyB3aWxsIGNyZWF0ZSBhIGxvdCBvZiBnYXJiYWdlLgogICAg
IGlmICghbV93aW5kb3dTaGVsbHMuaXNFbXB0eSgpKSB7CiAgICAgICAgIHdoaWxlICghbV93aW5k
b3dTaGVsbHMuaXNFbXB0eSgpKQotICAgICAgICAgICAgZGVzdHJveVdpbmRvd1NoZWxsKG1fd2lu
ZG93U2hlbGxzLmJlZ2luKCktPmZpcnN0LmdldCgpKTsKKyAgICAgICAgICAgIGRlc3Ryb3lXaW5k
b3dTaGVsbChtX3dpbmRvd1NoZWxscy5iZWdpbigpLT5rZXkuZ2V0KCkpOwogICAgICAgICBnY0Nv
bnRyb2xsZXIoKS5nYXJiYWdlQ29sbGVjdFNvb24oKTsKICAgICB9CiB9CkBAIC0xODAsNyArMTgw
LDcgQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpjbGVhcldpbmRvd1NoZWxsKGJvb2wgZ29pbmdJ
bnRvUGFnZUNhY2hlKQogICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAK
ICAgICBmb3IgKFNoZWxsTWFwOjppdGVyYXRvciBpdGVyID0gbV93aW5kb3dTaGVsbHMuYmVnaW4o
KTsgaXRlciAhPSBtX3dpbmRvd1NoZWxscy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIEpTRE9N
V2luZG93U2hlbGwqIHdpbmRvd1NoZWxsID0gaXRlci0+c2Vjb25kLmdldCgpOworICAgICAgICBK
U0RPTVdpbmRvd1NoZWxsKiB3aW5kb3dTaGVsbCA9IGl0ZXItPnZhbHVlLmdldCgpOwogCiAgICAg
ICAgIC8vIENsZWFyIHRoZSBkZWJ1Z2dlciBmcm9tIHRoZSBjdXJyZW50IHdpbmRvdyBiZWZvcmUg
c2V0dGluZyB0aGUgbmV3IHdpbmRvdy4KICAgICAgICAgYXR0YWNoRGVidWdnZXIod2luZG93U2hl
bGwsIDApOwpAQCAtMjU2LDcgKzI1Niw3IEBAIGJvb2wgU2NyaXB0Q29udHJvbGxlcjo6Y2FuQWNj
ZXNzRnJvbUN1cnJlbnRPcmlnaW4oRnJhbWUgKmZyYW1lKQogdm9pZCBTY3JpcHRDb250cm9sbGVy
OjphdHRhY2hEZWJ1Z2dlcihKU0M6OkRlYnVnZ2VyKiBkZWJ1Z2dlcikKIHsKICAgICBmb3IgKFNo
ZWxsTWFwOjppdGVyYXRvciBpdGVyID0gbV93aW5kb3dTaGVsbHMuYmVnaW4oKTsgaXRlciAhPSBt
X3dpbmRvd1NoZWxscy5lbmQoKTsgKytpdGVyKQotICAgICAgICBhdHRhY2hEZWJ1Z2dlcihpdGVy
LT5zZWNvbmQuZ2V0KCksIGRlYnVnZ2VyKTsKKyAgICAgICAgYXR0YWNoRGVidWdnZXIoaXRlci0+
dmFsdWUuZ2V0KCksIGRlYnVnZ2VyKTsKIH0KIAogdm9pZCBTY3JpcHRDb250cm9sbGVyOjphdHRh
Y2hEZWJ1Z2dlcihKU0RPTVdpbmRvd1NoZWxsKiBzaGVsbCwgSlNDOjpEZWJ1Z2dlciogZGVidWdn
ZXIpCkBAIC0yNzgsNyArMjc4LDcgQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjp1cGRhdGVEb2N1
bWVudCgpCiAKICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIGZv
ciAoU2hlbGxNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3dpbmRvd1NoZWxscy5iZWdpbigpOyBpdGVy
ICE9IG1fd2luZG93U2hlbGxzLmVuZCgpOyArK2l0ZXIpCi0gICAgICAgIGl0ZXItPnNlY29uZC0+
d2luZG93KCktPnVwZGF0ZURvY3VtZW50KCk7CisgICAgICAgIGl0ZXItPnZhbHVlLT53aW5kb3co
KS0+dXBkYXRlRG9jdW1lbnQoKTsKIH0KIAogdm9pZCBTY3JpcHRDb250cm9sbGVyOjp1cGRhdGVT
ZWN1cml0eU9yaWdpbigpCkBAIC0zMTQsNyArMzE0LDcgQEAgUGFzc1JlZlB0cjxCaW5kaW5nczo6
Um9vdE9iamVjdD4gU2NyaXB0Q29udHJvbGxlcjo6Y3JlYXRlUm9vdE9iamVjdCh2b2lkKiBuYXRp
dmUKIHsKICAgICBSb290T2JqZWN0TWFwOjppdGVyYXRvciBpdCA9IG1fcm9vdE9iamVjdHMuZmlu
ZChuYXRpdmVIYW5kbGUpOwogICAgIGlmIChpdCAhPSBtX3Jvb3RPYmplY3RzLmVuZCgpKQotICAg
ICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKIAogICAg
IFJlZlB0cjxCaW5kaW5nczo6Um9vdE9iamVjdD4gcm9vdE9iamVjdCA9IEJpbmRpbmdzOjpSb290
T2JqZWN0OjpjcmVhdGUobmF0aXZlSGFuZGxlLCBnbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSkp
OwogCkBAIC0zOTksNyArMzk5LDcgQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpjbGVhbnVwU2Ny
aXB0T2JqZWN0c0ZvclBsdWdpbih2b2lkKiBuYXRpdmVIYW5kbGUpCiAgICAgaWYgKGl0ID09IG1f
cm9vdE9iamVjdHMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGl0LT5zZWNvbmQtPmlu
dmFsaWRhdGUoKTsKKyAgICBpdC0+dmFsdWUtPmludmFsaWRhdGUoKTsKICAgICBtX3Jvb3RPYmpl
Y3RzLnJlbW92ZShpdCk7CiB9CiAKQEAgLTQwOSw3ICs0MDksNyBAQCB2b2lkIFNjcmlwdENvbnRy
b2xsZXI6OmNsZWFyU2NyaXB0T2JqZWN0cygpCiAKICAgICBSb290T2JqZWN0TWFwOjpjb25zdF9p
dGVyYXRvciBlbmQgPSBtX3Jvb3RPYmplY3RzLmVuZCgpOwogICAgIGZvciAoUm9vdE9iamVjdE1h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Jvb3RPYmplY3RzLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+aW52YWxpZGF0ZSgpOworICAgICAgICBpdC0+dmFs
dWUtPmludmFsaWRhdGUoKTsKIAogICAgIG1fcm9vdE9iamVjdHMuY2xlYXIoKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5oIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5oCmluZGV4IDVlMTUxYWFl
MzNmODE2MGUwNmQ0Nzg1YTJkZTlkMDlkYWFhYTgyMWMuLmY2NGY4OTA5YTYwZDczYTFlMmNiZjUw
OTBkZDlhODUwNmMyMGViNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NjcmlwdENvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3Jp
cHRDb250cm9sbGVyLmgKQEAgLTcyLDEyICs3MiwxMiBAQCBwdWJsaWM6CiAgICAgSlNET01XaW5k
b3dTaGVsbCogd2luZG93U2hlbGwoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCkKICAgICB7CiAgICAg
ICAgIFNoZWxsTWFwOjppdGVyYXRvciBpdGVyID0gbV93aW5kb3dTaGVsbHMuZmluZCh3b3JsZCk7
Ci0gICAgICAgIHJldHVybiAoaXRlciAhPSBtX3dpbmRvd1NoZWxscy5lbmQoKSkgPyBpdGVyLT5z
ZWNvbmQuZ2V0KCkgOiBpbml0U2NyaXB0KHdvcmxkKTsKKyAgICAgICAgcmV0dXJuIChpdGVyICE9
IG1fd2luZG93U2hlbGxzLmVuZCgpKSA/IGl0ZXItPnZhbHVlLmdldCgpIDogaW5pdFNjcmlwdCh3
b3JsZCk7CiAgICAgfQogICAgIEpTRE9NV2luZG93U2hlbGwqIGV4aXN0aW5nV2luZG93U2hlbGwo
RE9NV3JhcHBlcldvcmxkKiB3b3JsZCkgY29uc3QKICAgICB7CiAgICAgICAgIFNoZWxsTWFwOjpj
b25zdF9pdGVyYXRvciBpdGVyID0gbV93aW5kb3dTaGVsbHMuZmluZCh3b3JsZCk7Ci0gICAgICAg
IHJldHVybiAoaXRlciAhPSBtX3dpbmRvd1NoZWxscy5lbmQoKSkgPyBpdGVyLT5zZWNvbmQuZ2V0
KCkgOiAwOworICAgICAgICByZXR1cm4gKGl0ZXIgIT0gbV93aW5kb3dTaGVsbHMuZW5kKCkpID8g
aXRlci0+dmFsdWUuZ2V0KCkgOiAwOwogICAgIH0KICAgICBKU0RPTVdpbmRvdyogZ2xvYmFsT2Jq
ZWN0KERPTVdyYXBwZXJXb3JsZCogd29ybGQpCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCmluZGV4IDEwZGVkNzAwNzA3OTQwMjNk
YzdlZDIxMjk5ZmNmYjI0ODYxMjE3ZDAuLjg5NGNkZTJmYzdiMjNjODE4MDg2Yjc0OWQ2N2VkNmVi
ZGZkODFjMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERl
YnVnU2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1
Z1NlcnZlci5jcHAKQEAgLTc2LDkgKzc2LDkgQEAgU3RyaW5nIFNjcmlwdERlYnVnU2VydmVyOjpz
ZXRCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIGNvbnN0IFNjcmlwdEJyZWEKICAg
ICBTb3VyY2VJZFRvQnJlYWtwb2ludHNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zb3VyY2VJZFRvQnJl
YWtwb2ludHMuZmluZChzb3VyY2VJRFZhbHVlKTsKICAgICBpZiAoaXQgPT0gbV9zb3VyY2VJZFRv
QnJlYWtwb2ludHMuZW5kKCkpCiAgICAgICAgIGl0ID0gbV9zb3VyY2VJZFRvQnJlYWtwb2ludHMu
c2V0KHNvdXJjZUlEVmFsdWUsIExpbmVUb0JyZWFrcG9pbnRNYXAoKSkuaXRlcmF0b3I7Ci0gICAg
aWYgKGl0LT5zZWNvbmQuY29udGFpbnMoc2NyaXB0QnJlYWtwb2ludC5saW5lTnVtYmVyICsgMSkp
CisgICAgaWYgKGl0LT52YWx1ZS5jb250YWlucyhzY3JpcHRCcmVha3BvaW50LmxpbmVOdW1iZXIg
KyAxKSkKICAgICAgICAgcmV0dXJuICIiOwotICAgIGl0LT5zZWNvbmQuc2V0KHNjcmlwdEJyZWFr
cG9pbnQubGluZU51bWJlciArIDEsIHNjcmlwdEJyZWFrcG9pbnQpOworICAgIGl0LT52YWx1ZS5z
ZXQoc2NyaXB0QnJlYWtwb2ludC5saW5lTnVtYmVyICsgMSwgc2NyaXB0QnJlYWtwb2ludCk7CiAg
ICAgKmFjdHVhbExpbmVOdW1iZXIgPSBzY3JpcHRCcmVha3BvaW50LmxpbmVOdW1iZXI7CiAgICAg
Ly8gRklYTUUoV0s1MzAwMyk6IGltcGxlbWVudCBzZXR0aW5nIGJyZWFrcG9pbnRzIGJ5IGxpbmU6
Y29sdW1uLgogICAgICphY3R1YWxDb2x1bW5OdW1iZXIgPSAwOwpAQCAtMTAwLDcgKzEwMCw3IEBA
IHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnJlbW92ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBi
cmVha3BvaW50SWQpCiAgICAgICAgIHJldHVybjsKICAgICBTb3VyY2VJZFRvQnJlYWtwb2ludHNN
YXA6Oml0ZXJhdG9yIGl0ID0gbV9zb3VyY2VJZFRvQnJlYWtwb2ludHMuZmluZChzb3VyY2VJRFZh
bHVlKTsKICAgICBpZiAoaXQgIT0gbV9zb3VyY2VJZFRvQnJlYWtwb2ludHMuZW5kKCkpCi0gICAg
ICAgIGl0LT5zZWNvbmQucmVtb3ZlKGxpbmVOdW1iZXIgKyAxKTsKKyAgICAgICAgaXQtPnZhbHVl
LnJlbW92ZShsaW5lTnVtYmVyICsgMSk7CiB9CiAKIGJvb2wgU2NyaXB0RGVidWdTZXJ2ZXI6Omhh
c0JyZWFrcG9pbnQoaW50cHRyX3Qgc291cmNlSUQsIGNvbnN0IFRleHRQb3NpdGlvbiYgcG9zaXRp
b24pIGNvbnN0CkBAIC0xMTQsMTYgKzExNCwxNiBAQCBib29sIFNjcmlwdERlYnVnU2VydmVyOjpo
YXNCcmVha3BvaW50KGludHB0cl90IHNvdXJjZUlELCBjb25zdCBUZXh0UG9zaXRpb24mIHBvcwog
ICAgIGludCBsaW5lTnVtYmVyID0gcG9zaXRpb24ubV9saW5lLm9uZUJhc2VkSW50KCk7CiAgICAg
aWYgKGxpbmVOdW1iZXIgPD0gMCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIExpbmVUb0Jy
ZWFrcG9pbnRNYXA6OmNvbnN0X2l0ZXJhdG9yIGJyZWFrSXQgPSBpdC0+c2Vjb25kLmZpbmQobGlu
ZU51bWJlcik7Ci0gICAgaWYgKGJyZWFrSXQgPT0gaXQtPnNlY29uZC5lbmQoKSkKKyAgICBMaW5l
VG9CcmVha3BvaW50TWFwOjpjb25zdF9pdGVyYXRvciBicmVha0l0ID0gaXQtPnZhbHVlLmZpbmQo
bGluZU51bWJlcik7CisgICAgaWYgKGJyZWFrSXQgPT0gaXQtPnZhbHVlLmVuZCgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBBbiBlbXB0eSBjb25kaXRpb24gY291bnRzIGFzIG5v
IGNvbmRpdGlvbiB3aGljaCBpcyBlcXVpdmFsZW50IHRvICJ0cnVlIi4KLSAgICBpZiAoYnJlYWtJ
dC0+c2Vjb25kLmNvbmRpdGlvbi5pc0VtcHR5KCkpCisgICAgaWYgKGJyZWFrSXQtPnZhbHVlLmNv
bmRpdGlvbi5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgSlNWYWx1ZSBl
eGNlcHRpb247Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBtX2N1cnJlbnRDYWxsRnJhbWUtPmV2YWx1
YXRlKHN0cmluZ1RvVVN0cmluZyhicmVha0l0LT5zZWNvbmQuY29uZGl0aW9uKSwgZXhjZXB0aW9u
KTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IG1fY3VycmVudENhbGxGcmFtZS0+ZXZhbHVhdGUoc3Ry
aW5nVG9VU3RyaW5nKGJyZWFrSXQtPnZhbHVlLmNvbmRpdGlvbiksIGV4Y2VwdGlvbik7CiAgICAg
aWYgKGV4Y2VwdGlvbikgewogICAgICAgICAvLyBBbiBlcnJvbmVvdXMgY29uZGl0aW9uIGNvdW50
cyBhcyAiZmFsc2UiLgogICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAppbmRleCA3YWMxNTVj
Y2U2Y2MyYTRkZDlhYjdiYWM3N2QxNTA5NDhlYWZjMDAwLi43MjVlNjk4NDRmYmFmMWRmMTY4YjMz
ZGJlYmVjYjkwNzRiMDI1M2UwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKQEAgLTM5Nyw4ICszOTcsOCBAQCBwcml2YXRl
OgogICAgICAgICAvLyBIYW5kbGUgZHVwbGljYXRlIHJlZmVyZW5jZXMKICAgICAgICAgaWYgKCFh
ZGRSZXN1bHQuaXNOZXdFbnRyeSkgewogICAgICAgICAgICAgd3JpdGUoT2JqZWN0UmVmZXJlbmNl
VGFnKTsKLSAgICAgICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQzMl90PihhZGRSZXN1bHQu
aXRlcmF0b3ItPnNlY29uZCkgPCBtX29iamVjdFBvb2wuc2l6ZSgpKTsKLSAgICAgICAgICAgIHdy
aXRlT2JqZWN0SW5kZXgoYWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOworICAgICAgICAgICAg
QVNTRVJUKHN0YXRpY19jYXN0PGludDMyX3Q+KGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUpIDwg
bV9vYmplY3RQb29sLnNpemUoKSk7CisgICAgICAgICAgICB3cml0ZU9iamVjdEluZGV4KGFkZFJl
c3VsdC5pdGVyYXRvci0+dmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICB9CiAgICAgICAgIApAQCAtNjE4LDcgKzYxOCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgT2JqZWN0UG9vbDo6aXRlcmF0b3IgaW5kZXggPSBtX3RyYW5zZmVycmVkTWVzc2FnZVBvcnRz
LmZpbmQob2JqKTsKICAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT0gbV90cmFuc2ZlcnJlZE1l
c3NhZ2VQb3J0cy5lbmQoKSkgewogICAgICAgICAgICAgICAgICAgICB3cml0ZShNZXNzYWdlUG9y
dFJlZmVyZW5jZVRhZyk7Ci0gICAgICAgICAgICAgICAgICAgIHdyaXRlKGluZGV4LT5zZWNvbmQp
OworICAgICAgICAgICAgICAgICAgICB3cml0ZShpbmRleC0+dmFsdWUpOwogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtNjMyLDcgKzYzMiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgT2JqZWN0UG9vbDo6aXRlcmF0b3IgaW5kZXggPSBtX3RyYW5zZmVycmVkQXJyYXlCdWZmZXJz
LmZpbmQob2JqKTsKICAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT0gbV90cmFuc2ZlcnJlZEFy
cmF5QnVmZmVycy5lbmQoKSkgewogICAgICAgICAgICAgICAgICAgICB3cml0ZShBcnJheUJ1ZmZl
clRyYW5zZmVyVGFnKTsKLSAgICAgICAgICAgICAgICAgICAgd3JpdGUoaW5kZXgtPnNlY29uZCk7
CisgICAgICAgICAgICAgICAgICAgIHdyaXRlKGluZGV4LT52YWx1ZSk7CiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBp
ZiAoIXN0YXJ0T2JqZWN0SW50ZXJuYWwob2JqKSkgLy8gaGFuZGxlIGR1cGxpY2F0ZXMKQEAgLTcy
OSw3ICs3MjksNyBAQCBwcml2YXRlOgogICAgICAgICBTdHJpbmdDb25zdGFudFBvb2w6OkFkZFJl
c3VsdCBhZGRSZXN1bHQgPSBtX2NvbnN0YW50UG9vbC5hZGQoc3RyLmltcGwoKSwgbV9jb25zdGFu
dFBvb2wuc2l6ZSgpKTsKICAgICAgICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSkgewogICAg
ICAgICAgICAgd3JpdGUoU3RyaW5nUG9vbFRhZyk7Ci0gICAgICAgICAgICB3cml0ZVN0cmluZ0lu
ZGV4KGFkZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKKyAgICAgICAgICAgIHdyaXRlU3RyaW5n
SW5kZXgoYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9yVjgucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JWOC5wbQppbmRleCBhODFmYTQ2NDlkODg4MjgwYmUwYTNhMmYyMGRmMzM5M2NlNjUz
ZWQwLi5kNjNhOGVlYzY4ZmI2NjgzOTg3ODdlYTZhOTk3ZjE3MjhjODQ5YTNjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQpAQCAt
Mjc5MSw3ICsyNzkxLDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+ICR7
Y2xhc3NOYW1lfTo6R2V0UmF3VGVtcGxhdGUoKQogICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRh
KiBkYXRhID0gVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOEJpbmRp
bmdQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnJh
d1RlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT5yYXdU
ZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAg
ICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNj
b3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9IGNy
ZWF0ZVJhd1RlbXBsYXRlKCk7CkBAIC0yODA0LDcgKzI4MDQsNyBAQCB2ODo6UGVyc2lzdGVudDx2
ODo6RnVuY3Rpb25UZW1wbGF0ZT4gJHtjbGFzc05hbWV9OjpHZXRUZW1wbGF0ZSgpCiAgICAgVjhC
aW5kaW5nUGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6Y3Vy
cmVudCgpOwogICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0
b3IgcmVzdWx0ID0gZGF0YS0+dGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVz
dWx0ICE9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQt
PnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxl
U2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxh
dGU+IHRlbXBsID0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOEZsb2F0NjRBcnJheS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVjgvVjhGbG9hdDY0QXJyYXkuY3BwCmluZGV4IDdhMzY5N2JiZjYwZjlmZmE2YmFh
MTdjYmRkZTU0MzQ4NjEyZGQyMTIuLmRiZmFjMDE3YjNjN2Q4MjIxZGRmYmVhY2I2MTA4NDcwNGEx
ZTBjY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9W
OC9WOEZsb2F0NjRBcnJheS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Y4L1Y4RmxvYXQ2NEFycmF5LmNwcApAQCAtOTIsNyArOTIsNyBAQCB2ODo6UGVyc2lz
dGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhGbG9hdDY0QXJyYXk6OkdldFJhd1RlbXBsYXRl
KCkKICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4QmluZGluZ1Blcklzb2xh
dGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OlRlbXBsYXRl
TWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8p
OwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAg
ICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsK
IAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2
ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPSBjcmVhdGVSYXdUZW1wbGF0ZSgpOwpAQCAtMTA1
LDcgKzEwNSw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOEZsb2F0
NjRBcnJheTo6R2V0VGVtcGxhdGUoKQogICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhKiBkYXRh
ID0gVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOEJpbmRpbmdQZXJJ
c29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnRlbXBsYXRl
TWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT50ZW1wbGF0ZU1hcCgp
LmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBy
ZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4
OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0QWN0aXZlRE9NT2Jq
ZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RB
Y3RpdmVET01PYmplY3QuY3BwCmluZGV4IDZmNWU4ZTdkYjRiYzA4ZWYxY2M3ZWYwOWEyNjdmM2Vh
NjNhNDYwOGYuLjEyODYwYjUzNzIxNjQwM2FjM2M3ZDdmNjUxNzQ0NmQ0YjU1MTRiYzggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RBY3Rp
dmVET01PYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9WOC9WOFRlc3RBY3RpdmVET01PYmplY3QuY3BwCkBAIC0xMzAsNyArMTMwLDcgQEAgdjg6OlBl
cnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdEFjdGl2ZURPTU9iamVjdDo6R2V0
UmF3VGVtcGxhdGUoKQogICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhKiBkYXRhID0gVjhCaW5k
aW5nUGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0
YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCku
ZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmVu
ZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1
bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQ
ZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9IGNyZWF0ZVJhd1RlbXBsYXRl
KCk7CkBAIC0xNDMsNyArMTQzLDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxh
dGU+IFY4VGVzdEFjdGl2ZURPTU9iamVjdDo6R2V0VGVtcGxhdGUoKQogICAgIFY4QmluZGluZ1Bl
cklzb2xhdGVEYXRhKiBkYXRhID0gVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsK
ICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3Vs
dCA9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBk
YXRhLT50ZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7
CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhh
bmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1w
bCA9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgv
VjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Y4L1Y4VGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcAppbmRleCA0Y2ZkNTM0NjUx
MzAyZGViMzU5NTVlM2E5NDk0ZWQ4NTI1ZTE2NmM3Li5hNGM2MDgyNTViNTkxNjE5NTA5MDZiOTFl
ZDA1ZGY3MzdlMzhlMGY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVjgvVjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RDdXN0b21OYW1lZEdldHRlci5jcHAK
QEAgLTgyLDcgKzgyLDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4
VGVzdEN1c3RvbU5hbWVkR2V0dGVyOjpHZXRSYXdUZW1wbGF0ZSgpCiAgICAgVjhCaW5kaW5nUGVy
SXNvbGF0ZURhdGEqIGRhdGEgPSBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwog
ICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0
ID0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9
IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNl
Y29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2Nv
cGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+
IHRlbXBsID0gY3JlYXRlUmF3VGVtcGxhdGUoKTsKQEAgLTk1LDcgKzk1LDcgQEAgdjg6OlBlcnNp
c3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdEN1c3RvbU5hbWVkR2V0dGVyOjpHZXRU
ZW1wbGF0ZSgpCiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOEJpbmRpbmdQ
ZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpU
ZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+dGVtcGxhdGVNYXAoKS5maW5kKCZp
bmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAg
ICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7
CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8
djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudENvbnN0cnVjdG9yLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudENvbnN0cnVj
dG9yLmNwcAppbmRleCA5MTlkMWZmY2Y2MDVhMzc5OTMxY2ViNTZiNDBlOGRlZjlmNzEwZGJjLi5l
NWNmMjVmOGFlZTk4YWFkZTA5MmU0ZWNlZDIzNmU4ODI1ZjJkN2ExIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRDb25zdHJ1Y3Rv
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVz
dEV2ZW50Q29uc3RydWN0b3IuY3BwCkBAIC0xMTcsNyArMTE3LDcgQEAgdjg6OlBlcnNpc3RlbnQ8
djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdEV2ZW50Q29uc3RydWN0b3I6OkdldFJhd1RlbXBs
YXRlKCkKICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4QmluZGluZ1Blcklz
b2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OlRlbXBs
YXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmZpbmQoJmlu
Zm8pOwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1
ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVu
dDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPSBjcmVhdGVSYXdUZW1wbGF0ZSgpOwpAQCAt
MTMwLDcgKzEzMCw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRl
c3RFdmVudENvbnN0cnVjdG9yOjpHZXRUZW1wbGF0ZSgpCiAgICAgVjhCaW5kaW5nUGVySXNvbGF0
ZURhdGEqIGRhdGEgPSBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4
QmluZGluZ1Blcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0
YS0+dGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnRl
bXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2Nv
cGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RF
dmVudFRhcmdldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgv
VjhUZXN0RXZlbnRUYXJnZXQuY3BwCmluZGV4IDBlODAzYzIxOGNmNTI0OWU3ODcyYzA3ZTdkNWNk
OWE1YThiZWZjNmUuLmYyMDhlMGE5MDcyZjZjN2NlM2JjNDM1OTcwMDRkMDMwN2E3MzcxOTYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RF
dmVudFRhcmdldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Y4L1Y4VGVzdEV2ZW50VGFyZ2V0LmNwcApAQCAtMTQ1LDcgKzE0NSw3IEBAIHY4OjpQZXJzaXN0
ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3RFdmVudFRhcmdldDo6R2V0UmF3VGVtcGxh
dGUoKQogICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhKiBkYXRhID0gVjhCaW5kaW5nUGVySXNv
bGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6VGVtcGxh
dGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZmluZCgmaW5m
byk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAg
ICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVl
OwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50
PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9IGNyZWF0ZVJhd1RlbXBsYXRlKCk7CkBAIC0x
NTgsNyArMTU4LDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVz
dEV2ZW50VGFyZ2V0OjpHZXRUZW1wbGF0ZSgpCiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGEq
IGRhdGEgPSBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4QmluZGlu
Z1Blcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+dGVt
cGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnRlbXBsYXRl
TWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAg
ICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RJbnRlcmZh
Y2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdElu
dGVyZmFjZS5jcHAKaW5kZXggZDJiYjgxZmZiZGE0NzRkZGNkN2IxZDQ1Y2RlNjcyY2I4MTNmOTRk
ZS4uYWVkYmRlOWU2MjMzNmVhMDg4NzZmOGMwODkwNDM0ZDdiNGY5NDkwZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEludGVyZmFjZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdElu
dGVyZmFjZS5jcHAKQEAgLTI3Myw3ICsyNzMsNyBAQCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rp
b25UZW1wbGF0ZT4gVjhUZXN0SW50ZXJmYWNlOjpHZXRSYXdUZW1wbGF0ZSgpCiAgICAgVjhCaW5k
aW5nUGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6Y3VycmVu
dCgpOwogICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3Ig
cmVzdWx0ID0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVz
dWx0ICE9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1
bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFu
ZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVt
cGxhdGU+IHRlbXBsID0gY3JlYXRlUmF3VGVtcGxhdGUoKTsKQEAgLTI4Niw3ICsyODYsNyBAQCB2
ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0SW50ZXJmYWNlOjpHZXRU
ZW1wbGF0ZSgpCiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOEJpbmRpbmdQ
ZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpU
ZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+dGVtcGxhdGVNYXAoKS5maW5kKCZp
bmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAg
ICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7
CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8
djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RNZWRpYVF1
ZXJ5TGlzdExpc3RlbmVyLmNwcAppbmRleCA5MWM5ZmFhNTEzY2YwMzJhNWY5ZTBiNjE0NDkyYmIz
ZTdkNmMxNmM1Li4xMjRmNzhiZGY5NDE0NWQzZWEwMjM1MmU2MTBmYjJjYjA5YjEzYjZkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TWVk
aWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Y4L1Y4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCkBAIC04Miw3ICs4
Miw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3RNZWRpYVF1
ZXJ5TGlzdExpc3RlbmVyOjpHZXRSYXdUZW1wbGF0CiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURh
dGEqIGRhdGEgPSBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4Qmlu
ZGluZ1Blcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+
cmF3VGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnJh
d1RlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxl
U2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0g
Y3JlYXRlUmF3VGVtcGxhdGUoKTsKQEAgLTk1LDcgKzk1LDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6
OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI6OkdldFRlbXBs
YXRlKCkKICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4QmluZGluZ1Blcklz
b2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OlRlbXBs
YXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8p
OwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+dGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAg
cmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAog
ICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6
RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5hbWVkQ29uc3RydWN0b3Iu
Y3BwCmluZGV4IDhlZTQwZTQwODQwYWVmOTQyNzFjNTNkMDZhYjBiMWUzMmY1NjZhNmUuLjc1OGFm
ZDUwODhhNDYxNjk3NWQwYWQxNzA0YjdiNzdlODFiMzQzZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROYW1lZENvbnN0cnVjdG9yLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TmFt
ZWRDb25zdHJ1Y3Rvci5jcHAKQEAgLTEyMiw3ICsxMjIsNyBAQCB2ODo6UGVyc2lzdGVudDx2ODo6
RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6R2V0UmF3VGVtcGxhdGUo
KQogICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhKiBkYXRhID0gVjhCaW5kaW5nUGVySXNvbGF0
ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVN
YXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7
CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAg
ICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwog
CiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4
OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9IGNyZWF0ZVJhd1RlbXBsYXRlKCk7CkBAIC0xMzUs
NyArMTM1LDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdE5h
bWVkQ29uc3RydWN0b3I6OkdldFRlbXBsYXRlKCkKICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0
YSogZGF0YSA9IFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhCaW5k
aW5nUGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT50
ZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+dGVtcGxh
dGVNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICBy
ZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsK
ICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNw
cAppbmRleCA4YWFmYThmNmUyMDhhNTU5MzM1YmYyM2I3Y2FkMzcyZTA2MzFhYmQ5Li5mNTgwODQ0
ZWRiOTNhNzU3N2ExMjc0MjhlYWY2Y2RjZTI2ODE0YTliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcApAQCAtMjEzMSw3
ICsyMTMxLDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdE9i
ajo6R2V0UmF3VGVtcGxhdGUoKQogICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhKiBkYXRhID0g
VjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOEJpbmRpbmdQZXJJc29s
YXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnJhd1RlbXBsYXRl
TWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT5yYXdUZW1wbGF0ZU1h
cCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVy
biByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAg
IHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9IGNyZWF0ZVJhd1Rl
bXBsYXRlKCk7CkBAIC0yMTQ0LDcgKzIxNDQsNyBAQCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rp
b25UZW1wbGF0ZT4gVjhUZXN0T2JqOjpHZXRUZW1wbGF0ZSgpCiAgICAgVjhCaW5kaW5nUGVySXNv
bGF0ZURhdGEqIGRhdGEgPSBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAg
IFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0g
ZGF0YS0+dGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEt
PnRlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxl
U2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZS5jcHAKaW5kZXggMzQxMTdmYWVjOTExOWU4NGIzYWQ4NmM1NzcwYzU3Yjg3YTNkZjM3OC4uM2Qy
ZmQ2MTc4MTkyYzZlZmIyZGQwYzQ1ZWE2MGY5OTc4MGEzNzI0MSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Y4L1Y4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKQEAgLTI0OCw3
ICsyNDgsNyBAQCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpHZXRSYQogICAgIFY4QmluZGluZ1Blcklzb2xh
dGVEYXRhKiBkYXRhID0gVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBW
OEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRh
dGEtPnJhd1RlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRh
LT5yYXdUZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7
CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhh
bmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1w
bCA9IGNyZWF0ZVJhd1RlbXBsYXRlKCk7CkBAIC0yNjEsNyArMjYxLDcgQEAgdjg6OlBlcnNpc3Rl
bnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZTo6R2V0VGUKICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4QmluZGlu
Z1Blcklzb2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6
OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmZpbmQo
JmluZm8pOwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+dGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1
ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVu
dDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvTlBWOE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9OUFY4T2JqZWN0LmNwcAppbmRleCA1YzMzNTkzNzcwNWVmMjNjODZkNjY3MGJiMWNiOTM4N2Fm
MzY4MTI0Li41NjgwNzMwYjQyZDA4YjVjMzdiYTcxODk0NDA2YjJlMGI5YTkyYWU1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9OUFY4T2JqZWN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9OUFY4T2JqZWN0LmNwcApAQCAtNzgsNyArNzgsNyBAQCBz
dGF0aWMgdm9pZCBmcmVlVjhOUE9iamVjdChOUE9iamVjdCogbnBPYmplY3QpCiAgICAgaWYgKGlu
dCB2OE9iamVjdEhhc2ggPSB2OE5wT2JqZWN0LT52OE9iamVjdC0+R2V0SWRlbnRpdHlIYXNoKCkp
IHsKICAgICAgICAgVjhOUE9iamVjdE1hcDo6aXRlcmF0b3IgaXRlciA9IHN0YXRpY1Y4TlBPYmpl
Y3RNYXAoKS0+ZmluZCh2OE9iamVjdEhhc2gpOwogICAgICAgICBpZiAoaXRlciAhPSBzdGF0aWNW
OE5QT2JqZWN0TWFwKCktPmVuZCgpKSB7Ci0gICAgICAgICAgICBWOE5QT2JqZWN0VmVjdG9yJiBv
YmplY3RzID0gaXRlci0+c2Vjb25kOworICAgICAgICAgICAgVjhOUE9iamVjdFZlY3RvciYgb2Jq
ZWN0cyA9IGl0ZXItPnZhbHVlOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBp
bmRleCA8IG9iamVjdHMuc2l6ZSgpOyArK2luZGV4KSB7CiAgICAgICAgICAgICAgICAgaWYgKG9i
amVjdHMuYXQoaW5kZXgpID09IHY4TnBPYmplY3QpIHsKICAgICAgICAgICAgICAgICAgICAgb2Jq
ZWN0cy5yZW1vdmUoaW5kZXgpOwpAQCAtMTUzLDcgKzE1Myw3IEBAIE5QT2JqZWN0KiBucENyZWF0
ZVY4U2NyaXB0T2JqZWN0KE5QUCBucHAsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0LCBE
T01XaW5kCiAgICAgQVNTRVJUKHY4T2JqZWN0SGFzaCk7CiAgICAgVjhOUE9iamVjdE1hcDo6aXRl
cmF0b3IgaXRlciA9IHN0YXRpY1Y4TlBPYmplY3RNYXAoKS0+ZmluZCh2OE9iamVjdEhhc2gpOwog
ICAgIGlmIChpdGVyICE9IHN0YXRpY1Y4TlBPYmplY3RNYXAoKS0+ZW5kKCkpIHsKLSAgICAgICAg
VjhOUE9iamVjdFZlY3RvciYgb2JqZWN0cyA9IGl0ZXItPnNlY29uZDsKKyAgICAgICAgVjhOUE9i
amVjdFZlY3RvciYgb2JqZWN0cyA9IGl0ZXItPnZhbHVlOwogICAgICAgICBmb3IgKHNpemVfdCBp
bmRleCA9IDA7IGluZGV4IDwgb2JqZWN0cy5zaXplKCk7ICsraW5kZXgpIHsKICAgICAgICAgICAg
IFY4TlBPYmplY3QqIHY4bnBPYmplY3QgPSBvYmplY3RzLmF0KGluZGV4KTsKICAgICAgICAgICAg
IGlmICh2OG5wT2JqZWN0LT5yb290T2JqZWN0ID09IHJvb3QpIHsKQEAgLTE3Myw3ICsxNzMsNyBA
QCBOUE9iamVjdCogbnBDcmVhdGVWOFNjcmlwdE9iamVjdChOUFAgbnBwLCB2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+IG9iamVjdCwgRE9NV2luZAogI2VuZGlmCiAgICAgdjhucE9iamVjdC0+cm9vdE9i
amVjdCA9IHJvb3Q7CiAKLSAgICBpdGVyLT5zZWNvbmQuYXBwZW5kKHY4bnBPYmplY3QpOworICAg
IGl0ZXItPnZhbHVlLmFwcGVuZCh2OG5wT2JqZWN0KTsKIAogICAgIHJldHVybiByZWludGVycHJl
dF9jYXN0PE5QT2JqZWN0Kj4odjhucE9iamVjdCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwCmluZGV4IDhkZTk1NTM3YWQ3ZjJjZmQxYWY2
NGY4MmU5ZGFkZmE4ZDI3ZGM5ZGMuLjc3N2Y3OTc3N2E1MDUxYzhhYzBmNTI4YTI1MGFjYTRmMWFm
MTc2MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRy
b2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xs
ZXIuY3BwCkBAIC0xMjEsOCArMTIxLDggQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpjbGVhclNj
cmlwdE9iamVjdHMoKQogewogICAgIFBsdWdpbk9iamVjdE1hcDo6aXRlcmF0b3IgaXQgPSBtX3Bs
dWdpbk9iamVjdHMuYmVnaW4oKTsKICAgICBmb3IgKDsgaXQgIT0gbV9wbHVnaW5PYmplY3RzLmVu
ZCgpOyArK2l0KSB7Ci0gICAgICAgIF9OUE5fVW5yZWdpc3Rlck9iamVjdChpdC0+c2Vjb25kKTsK
LSAgICAgICAgX05QTl9SZWxlYXNlT2JqZWN0KGl0LT5zZWNvbmQpOworICAgICAgICBfTlBOX1Vu
cmVnaXN0ZXJPYmplY3QoaXQtPnZhbHVlKTsKKyAgICAgICAgX05QTl9SZWxlYXNlT2JqZWN0KGl0
LT52YWx1ZSk7CiAgICAgfQogICAgIG1fcGx1Z2luT2JqZWN0cy5jbGVhcigpOwogCkBAIC0zMjMs
OCArMzIzLDggQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpjbGVhbnVwU2NyaXB0T2JqZWN0c0Zv
clBsdWdpbihXaWRnZXQqIG5hdGl2ZUhhbmRsZSkKICAgICBQbHVnaW5PYmplY3RNYXA6Oml0ZXJh
dG9yIGl0ID0gbV9wbHVnaW5PYmplY3RzLmZpbmQobmF0aXZlSGFuZGxlKTsKICAgICBpZiAoaXQg
PT0gbV9wbHVnaW5PYmplY3RzLmVuZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgX05QTl9VbnJl
Z2lzdGVyT2JqZWN0KGl0LT5zZWNvbmQpOwotICAgIF9OUE5fUmVsZWFzZU9iamVjdChpdC0+c2Vj
b25kKTsKKyAgICBfTlBOX1VucmVnaXN0ZXJPYmplY3QoaXQtPnZhbHVlKTsKKyAgICBfTlBOX1Jl
bGVhc2VPYmplY3QoaXQtPnZhbHVlKTsKICAgICBtX3BsdWdpbk9iamVjdHMucmVtb3ZlKGl0KTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2VyaWFsaXplZFNj
cmlwdFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZS5jcHAKaW5kZXggZjYwZDM2NmE4N2Y2YTFkMTJiNTk0NDg5OWY3OTY2MjEzNTIwZWEx
YS4uMDI5MjM4MTBkZTc0NjdiZThkMzM5NjhhOThlZmIyZTExMDAwNThmMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCkBA
IC0xMDYsNyArMTA2LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgdHlwZW5hbWUgSGFuZGxl
VG9UOjppdGVyYXRvciByZXN1bHQgPSBtX21hcC5maW5kKCpoYW5kbGUpOwogICAgICAgICBpZiAo
cmVzdWx0ICE9IG1fbWFwLmVuZCgpKSB7Ci0gICAgICAgICAgICAqdmFsdWVPdXQgPSByZXN1bHQt
PnNlY29uZDsKKyAgICAgICAgICAgICp2YWx1ZU91dCA9IHJlc3VsdC0+dmFsdWU7CiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTU1hcC5oIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvVjhET01NYXAuaAppbmRleCAxMzYzYTc5NzUwNDg2ZWE1OTFjZTAx
OTk4NjliM2Q3NDllMjE5ZWI1Li5jOTBjYjE0MTMxNTVmM2IyYjg3NWY0NTMxYWJhNjlhYmFhMzk3
MjJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTU1hcC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NTWFwLmgKQEAgLTEwOCw3ICsxMDgs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgcmVtb3ZlSWZQcmVzZW50KEtl
eVR5cGUqIGtleSwgdjg6OlBlcnNpc3RlbnQ8VmFsdWVUeXBlPiB2YWx1ZSkKICAgICAgICAgewog
ICAgICAgICAgICAgdHlwZW5hbWUgSGFzaE1hcDxLZXlUeXBlKiwgVmFsdWVUeXBlKj46Oml0ZXJh
dG9yIGl0ID0gbV9tYXAuZmluZChrZXkpOwotICAgICAgICAgICAgaWYgKGl0ID09IG1fbWFwLmVu
ZCgpIHx8IGl0LT5zZWNvbmQgIT0gKnZhbHVlKQorICAgICAgICAgICAgaWYgKGl0ID09IG1fbWFw
LmVuZCgpIHx8IGl0LT52YWx1ZSAhPSAqdmFsdWUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgICAgICAgICBtX21hcC5yZW1vdmUoaXQpOwpAQCAtMTI4LDcgKzEyOCw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIHZpc2l0b3ItPnN0YXJ0TWFwKCk7CiAg
ICAgICAgICAgICB0eXBlbmFtZSBIYXNoTWFwPEtleVR5cGUqLCBWYWx1ZVR5cGUqPjo6aXRlcmF0
b3IgaXQgPSBtX21hcC5iZWdpbigpOwogICAgICAgICAgICAgZm9yICg7IGl0ICE9IG1fbWFwLmVu
ZCgpOyArK2l0KQotICAgICAgICAgICAgICAgIHZpc2l0b3ItPnZpc2l0RE9NV3JhcHBlcihzdG9y
ZSwgaXQtPmZpcnN0LCB2ODo6UGVyc2lzdGVudDxWYWx1ZVR5cGU+KGl0LT5zZWNvbmQpKTsKKyAg
ICAgICAgICAgICAgICB2aXNpdG9yLT52aXNpdERPTVdyYXBwZXIoc3RvcmUsIGl0LT5rZXksIHY4
OjpQZXJzaXN0ZW50PFZhbHVlVHlwZT4oaXQtPnZhbHVlKSk7CiAgICAgICAgICAgICB2aXNpdG9y
LT5lbmRNYXAoKTsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9WOERPTVdpbmRvd1NoZWxsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1Y4RE9NV2luZG93U2hlbGwuY3BwCmluZGV4IGM0YzYwNTQwYWI5YjY4YTY5M2NkYjZmYzFlNzdm
ZjA5NGM0MzQxYTUuLjE3YjVkNmM5ZmE1NDBkYjBjMjUxNTQzMzM4ZWE3M2ZjNWZhY2I1NWUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwuY3BwCkBA
IC0xODYsNyArMTg2LDcgQEAgdm9pZCBWOERPTVdpbmRvd1NoZWxsOjpkaXNwb3NlQ29udGV4dEhh
bmRsZXMoKQogCiAgICAgV3JhcHBlckJvaWxlcnBsYXRlTWFwOjppdGVyYXRvciBpdCA9IG1fd3Jh
cHBlckJvaWxlcnBsYXRlcy5iZWdpbigpOwogICAgIGZvciAoOyBpdCAhPSBtX3dyYXBwZXJCb2ls
ZXJwbGF0ZXMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVj
dD4gd3JhcHBlciA9IGl0LT5zZWNvbmQ7CisgICAgICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmpl
Y3Q+IHdyYXBwZXIgPSBpdC0+dmFsdWU7CiAgICAgICAgIHdyYXBwZXIuRGlzcG9zZSgpOwogICAg
ICAgICB3cmFwcGVyLkNsZWFyKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhHQ0NvbnRyb2xsZXIuY3BwCmluZGV4IDFiODEyMzRlZDA0ZWIyMTZjZDcyNmE0YzM3M2Jh
OGQzNTI5NmUzMmMuLjViNjEyMGQwODAzZWJlZjAxMmI1NjA2NmI3OWM5NTRhOGMyYmZlZmYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEdDQ29udHJvbGxlci5jcHAKQEAgLTkz
LDkgKzkzLDkgQEAgc3RhdGljIHZvaWQgZW51bWVyYXRlR2xvYmFsSGFuZGxlcygpCiB7CiAgICAg
R2xvYmFsSGFuZGxlTWFwJiBnbG9iYWxIYW5kbGVNYXAgPSBjdXJyZW50R2xvYmFsSGFuZGxlTWFw
KCk7CiAgICAgZm9yIChHbG9iYWxIYW5kbGVNYXA6Oml0ZXJhdG9yIGl0ID0gZ2xvYmFsSGFuZGxl
TWFwLmJlZ2luKCksIGVuZCA9IGdsb2JhbEhhbmRsZU1hcC5lbmQoKTsgaXQgIT0gZW5kOyArK2l0
KSB7Ci0gICAgICAgIEdsb2JhbEhhbmRsZUluZm8qIGluZm8gPSBpdC0+c2Vjb25kOworICAgICAg
ICBHbG9iYWxIYW5kbGVJbmZvKiBpbmZvID0gaXQtPnZhbHVlOwogICAgICAgICBVTlVTRURfUEFS
QU0oaW5mbyk7Ci0gICAgICAgIHY4OjpWYWx1ZSogaGFuZGxlID0gaXQtPmZpcnN0OworICAgICAg
ICB2ODo6VmFsdWUqIGhhbmRsZSA9IGl0LT5rZXk7CiAgICAgICAgIFVOVVNFRF9QQVJBTShoYW5k
bGUpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
UHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAKaW5kZXgg
NDI2NjMzNDhhMmI2ZmJhYWFkNTY4NTVhNDliODQ4MTliODIzNzAxYS4uMDczZTU0MDhmYmFhNTc5
MTE2M2UyMGVjMjA0ZWUwNmU0Zjk2NzAwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQ
cm94eS5jcHAKQEAgLTIyOSw3ICsyMjksNyBAQCB2b2lkIFY4UHJveHk6OmV2YWx1YXRlSW5Jc29s
YXRlZFdvcmxkKGludCB3b3JsZElELCBjb25zdCBWZWN0b3I8U2NyaXB0U291cmNlQ29kZQogICAg
IGlmICh3b3JsZElEID4gMCkgewogICAgICAgICBJc29sYXRlZFdvcmxkTWFwOjppdGVyYXRvciBp
dGVyID0gbV9pc29sYXRlZFdvcmxkcy5maW5kKHdvcmxkSUQpOwogICAgICAgICBpZiAoaXRlciAh
PSBtX2lzb2xhdGVkV29ybGRzLmVuZCgpKSB7Ci0gICAgICAgICAgICBpc29sYXRlZENvbnRleHQg
PSBpdGVyLT5zZWNvbmQ7CisgICAgICAgICAgICBpc29sYXRlZENvbnRleHQgPSBpdGVyLT52YWx1
ZTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlzb2xhdGVkQ29udGV4dCA9IG5ldyBW
OElzb2xhdGVkQ29udGV4dCh0aGlzLCBleHRlbnNpb25Hcm91cCwgd29ybGRJRCk7CiAgICAgICAg
ICAgICBpZiAoaXNvbGF0ZWRDb250ZXh0LT5jb250ZXh0KCkuSXNFbXB0eSgpKSB7CkBAIC0yNTAs
NyArMjUwLDcgQEAgdm9pZCBWOFByb3h5OjpldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZChpbnQgd29y
bGRJRCwgY29uc3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGUKICAgICAgICAgCiAgICAgICAgIElz
b2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbk1hcDo6aXRlcmF0b3Igc2VjdXJpdHlPcmlnaW5JdGVy
ID0gbV9pc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW5zLmZpbmQod29ybGRJRCk7CiAgICAgICAg
IGlmIChzZWN1cml0eU9yaWdpbkl0ZXIgIT0gbV9pc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW5z
LmVuZCgpKQotICAgICAgICAgICAgaXNvbGF0ZWRDb250ZXh0LT5zZXRTZWN1cml0eU9yaWdpbihz
ZWN1cml0eU9yaWdpbkl0ZXItPnNlY29uZCk7CisgICAgICAgICAgICBpc29sYXRlZENvbnRleHQt
PnNldFNlY3VyaXR5T3JpZ2luKHNlY3VyaXR5T3JpZ2luSXRlci0+dmFsdWUpOwogICAgIH0gZWxz
ZSB7CiAgICAgICAgIGlzb2xhdGVkQ29udGV4dCA9IG5ldyBWOElzb2xhdGVkQ29udGV4dCh0aGlz
LCBleHRlbnNpb25Hcm91cCwgd29ybGRJRCk7CiAgICAgICAgIGlmIChpc29sYXRlZENvbnRleHQt
PmNvbnRleHQoKS5Jc0VtcHR5KCkpIHsKQEAgLTI3NSw3ICsyNzUsNyBAQCB2b2lkIFY4UHJveHk6
OnNldElzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbihpbnQgd29ybGRJRCwgUGFzc1JlZlB0cjxT
ZWN1cml0eU9yaQogICAgIG1faXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2lucy5zZXQod29ybGRJ
RCwgc2VjdXJpdHlPcmlnaW4pOwogICAgIElzb2xhdGVkV29ybGRNYXA6Oml0ZXJhdG9yIGl0ZXIg
PSBtX2lzb2xhdGVkV29ybGRzLmZpbmQod29ybGRJRCk7CiAgICAgaWYgKGl0ZXIgIT0gbV9pc29s
YXRlZFdvcmxkcy5lbmQoKSkKLSAgICAgICAgaXRlci0+c2Vjb25kLT5zZXRTZWN1cml0eU9yaWdp
bihzZWN1cml0eU9yaWdpbik7CisgICAgICAgIGl0ZXItPnZhbHVlLT5zZXRTZWN1cml0eU9yaWdp
bihzZWN1cml0eU9yaWdpbik7CiB9CiAKIGJvb2wgVjhQcm94eTo6c2V0SW5qZWN0ZWRTY3JpcHRD
b250ZXh0RGVidWdJZCh2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiB0YXJnZXRDb250ZXh0KQpAQCAt
NTQwLDcgKzU0MCw3IEBAIHZvaWQgVjhQcm94eTo6cmVzZXRJc29sYXRlZFdvcmxkcygpCiB7CiAg
ICAgZm9yIChJc29sYXRlZFdvcmxkTWFwOjppdGVyYXRvciBpdGVyID0gbV9pc29sYXRlZFdvcmxk
cy5iZWdpbigpOwogICAgICAgICAgaXRlciAhPSBtX2lzb2xhdGVkV29ybGRzLmVuZCgpOyArK2l0
ZXIpIHsKLSAgICAgICAgaXRlci0+c2Vjb25kLT5kZXN0cm95KCk7CisgICAgICAgIGl0ZXItPnZh
bHVlLT5kZXN0cm95KCk7CiAgICAgfQogICAgIG1faXNvbGF0ZWRXb3JsZHMuY2xlYXIoKTsKICAg
ICBtX2lzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbnMuY2xlYXIoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L25wcnVudGltZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9ucHJ1bnRpbWUuY3BwCmluZGV4IDhkODBjZjkzMzE4NmU4NTQ3YzE4NTE4M2Q3
ZTc0ODRiY2UxZTg0YTMuLjJiMDM2N2NkMTVmMmE0ZmIxMTNkNGNjMGJmNzY3ZWM4Y2YxYjBhNWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L25wcnVudGltZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvbnBydW50aW1lLmNwcApAQCAtMTY0LDcgKzE2
NCw3IEBAIE5QSWRlbnRpZmllciBfTlBOX0dldFN0cmluZ0lkZW50aWZpZXIoY29uc3QgTlBVVEY4
KiBuYW1lKQogICAgICAgICBTdHJpbmdJZGVudGlmaWVyTWFwKiBpZGVudE1hcCA9IGdldFN0cmlu
Z0lkZW50aWZpZXJNYXAoKTsKICAgICAgICAgU3RyaW5nSWRlbnRpZmllck1hcDo6aXRlcmF0b3Ig
aXRlciA9IGlkZW50TWFwLT5maW5kKGtleSk7CiAgICAgICAgIGlmIChpdGVyICE9IGlkZW50TWFw
LT5lbmQoKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxOUElkZW50aWZpZXI+KGl0
ZXItPnNlY29uZCk7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TlBJZGVudGlmaWVy
PihpdGVyLT52YWx1ZSk7CiAKICAgICAgICAgc2l6ZV90IG5hbWVMZW4gPSBrZXkubV9sZW5ndGg7
CiAKQEAgLTIxMSw3ICsyMTEsNyBAQCBOUElkZW50aWZpZXIgX05QTl9HZXRJbnRJZGVudGlmaWVy
KGludDMyX3QgaW50SWQpCiAgICAgSW50SWRlbnRpZmllck1hcCogaWRlbnRNYXAgPSBnZXRJbnRJ
ZGVudGlmaWVyTWFwKCk7CiAgICAgSW50SWRlbnRpZmllck1hcDo6aXRlcmF0b3IgaXRlciA9IGlk
ZW50TWFwLT5maW5kKGludElkKTsKICAgICBpZiAoaXRlciAhPSBpZGVudE1hcC0+ZW5kKCkpCi0g
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxOUElkZW50aWZpZXI+KGl0ZXItPnNlY29uZCk7Cisg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxOUElkZW50aWZpZXI+KGl0ZXItPnZhbHVlKTsKIAog
ICAgIC8vIFdlIG5ldmVyIHJlbGVhc2UgaWRlbnRpZmllcnMsIHNvIHRoaXMgZGljdGlvbmFyeSB3
aWxsIGdyb3cuCiAgICAgUHJpdmF0ZUlkZW50aWZpZXIqIGlkZW50aWZpZXIgPSByZWludGVycHJl
dF9jYXN0PFByaXZhdGVJZGVudGlmaWVyKj4obWFsbG9jKHNpemVvZihQcml2YXRlSWRlbnRpZmll
cikpKTsKQEAgLTM4OCw3ICszODgsNyBAQCB2b2lkIF9OUE5fUmVnaXN0ZXJPYmplY3QoTlBPYmpl
Y3QqIG5wT2JqZWN0LCBOUE9iamVjdCogb3duZXIpCiAgICAgICAgIE5QT2JqZWN0TWFwOjppdGVy
YXRvciBvd25lckVudHJ5ID0gbGl2ZU9iamVjdE1hcCgpLmZpbmQob3duZXIpOwogICAgICAgICBO
UE9iamVjdCogcGFyZW50ID0gMDsKICAgICAgICAgaWYgKGxpdmVPYmplY3RNYXAoKS5lbmQoKSAh
PSBvd25lckVudHJ5KQotICAgICAgICAgICAgcGFyZW50ID0gb3duZXJFbnRyeS0+c2Vjb25kOwor
ICAgICAgICAgICAgcGFyZW50ID0gb3duZXJFbnRyeS0+dmFsdWU7CiAKICAgICAgICAgaWYgKHBh
cmVudCkKICAgICAgICAgICAgIG93bmVyID0gcGFyZW50OwpAQCAtNDA4LDcgKzQwOCw3IEBAIHZv
aWQgX05QTl9VbnJlZ2lzdGVyT2JqZWN0KE5QT2JqZWN0KiBucE9iamVjdCkKIAogICAgIE5QT2Jq
ZWN0KiBvd25lciA9IDA7CiAgICAgaWYgKGxpdmVPYmplY3RNYXAoKS5maW5kKG5wT2JqZWN0KSAh
PSBsaXZlT2JqZWN0TWFwKCkuZW5kKCkpCi0gICAgICAgIG93bmVyID0gbGl2ZU9iamVjdE1hcCgp
LmZpbmQobnBPYmplY3QpLT5zZWNvbmQ7CisgICAgICAgIG93bmVyID0gbGl2ZU9iamVjdE1hcCgp
LmZpbmQobnBPYmplY3QpLT52YWx1ZTsKIAogICAgIGlmICghb3duZXIpIHsKICAgICAgICAgLy8g
VW5yZWdpc3RlcmluZyBhIG93bmVyIG9iamVjdDsgYWxzbyB1bnJlZ2lzdGVyIGl0J3MgZGVzY2Vu
ZGFudHMuCkBAIC00NDMsNyArNDQzLDcgQEAgdm9pZCBfTlBOX1VucmVnaXN0ZXJPYmplY3QoTlBP
YmplY3QqIG5wT2JqZWN0KQogICAgIH0gZWxzZSB7CiAgICAgICAgIE5QUm9vdE9iamVjdE1hcDo6
aXRlcmF0b3Igb3duZXJFbnRyeSA9IHJvb3RPYmplY3RNYXAoKS5maW5kKG93bmVyKTsKICAgICAg
ICAgaWYgKG93bmVyRW50cnkgIT0gcm9vdE9iamVjdE1hcCgpLmVuZCgpKSB7Ci0gICAgICAgICAg
ICBOUE9iamVjdFNldCogbGlzdCA9IG93bmVyRW50cnktPnNlY29uZDsKKyAgICAgICAgICAgIE5Q
T2JqZWN0U2V0KiBsaXN0ID0gb3duZXJFbnRyeS0+dmFsdWU7CiAgICAgICAgICAgICBBU1NFUlQo
bGlzdC0+ZmluZChucE9iamVjdCkgIT0gbGlzdC0+ZW5kKCkpOwogICAgICAgICAgICAgbGlzdC0+
cmVtb3ZlKG5wT2JqZWN0KTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YnJpZGdlL0lkZW50aWZpZXJSZXAuY3BwIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL0lkZW50aWZp
ZXJSZXAuY3BwCmluZGV4IDJhY2YxNDE1M2QxZGI5ZTEyYjcyNTU4YTUzODhkOTg2ZmY4YTVlODUu
LjFkZjU4YTllNDE1ODFjM2JlYzMxNTFmZjIxYmNlYWEyNDcyZGMxZjUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JyaWRnZS9JZGVudGlmaWVyUmVwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9icmlkZ2UvSWRlbnRpZmllclJlcC5jcHAKQEAgLTY5LDEzICs2OSwxMyBAQCBJZGVudGlmaWVy
UmVwKiBJZGVudGlmaWVyUmVwOjpnZXQoaW50IGludElEKQogICAgIAogICAgIEludElkZW50aWZp
ZXJNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBpbnRJZGVudGlmaWVyTWFwKCkuYWRkKGludElELCAw
KTsKICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgQVNTRVJUKCFyZXN1bHQu
aXRlcmF0b3ItPnNlY29uZCk7Ci0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gbmV3
IElkZW50aWZpZXJSZXAoaW50SUQpOworICAgICAgICBBU1NFUlQoIXJlc3VsdC5pdGVyYXRvci0+
dmFsdWUpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gbmV3IElkZW50aWZpZXJS
ZXAoaW50SUQpOwogICAgICAgICAKLSAgICAgICAgaWRlbnRpZmllclNldCgpLmFkZChyZXN1bHQu
aXRlcmF0b3ItPnNlY29uZCk7CisgICAgICAgIGlkZW50aWZpZXJTZXQoKS5hZGQocmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZSk7CiAgICAgfQogICAgIAotICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3It
PnNlY29uZDsKKyAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIAogdHlwZWRl
ZiBIYXNoTWFwPFJlZlB0cjxTdHJpbmdJbXBsPiwgSWRlbnRpZmllclJlcCo+IFN0cmluZ0lkZW50
aWZpZXJNYXA7CkBAIC05NSwxMyArOTUsMTMgQEAgSWRlbnRpZmllclJlcCogSWRlbnRpZmllclJl
cDo6Z2V0KGNvbnN0IGNoYXIqIG5hbWUpCiAgICAgVVN0cmluZyBzdHJpbmcgPSBzdHJpbmdUb1VT
dHJpbmcoU3RyaW5nOjpmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayhuYW1lLCBzdHJsZW4obmFt
ZSkpKTsKICAgICBTdHJpbmdJZGVudGlmaWVyTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gc3RyaW5n
SWRlbnRpZmllck1hcCgpLmFkZChzdHJpbmcuaW1wbCgpLCAwKTsKICAgICBpZiAocmVzdWx0Lmlz
TmV3RW50cnkpIHsKLSAgICAgICAgQVNTRVJUKCFyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7Ci0g
ICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gbmV3IElkZW50aWZpZXJSZXAobmFtZSk7
CisgICAgICAgIEFTU0VSVCghcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CisgICAgICAgIHJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUgPSBuZXcgSWRlbnRpZmllclJlcChuYW1lKTsKICAgICAgICAgCi0g
ICAgICAgIGlkZW50aWZpZXJTZXQoKS5hZGQocmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOworICAg
ICAgICBpZGVudGlmaWVyU2V0KCkuYWRkKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwogICAgIH0K
ICAgICAKLSAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgcmV0dXJuIHJl
c3VsdC5pdGVyYXRvci0+dmFsdWU7CiB9CiAKIGJvb2wgSWRlbnRpZmllclJlcDo6aXNWYWxpZChJ
ZGVudGlmaWVyUmVwKiBpZGVudGlmaWVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJp
ZGdlL05QX2pzb2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9OUF9qc29iamVjdC5j
cHAKaW5kZXggODM5ODZhZjU4M2M1OTA0MmYxYmY3Nzc1MTIwN2E4MDM1M2FkMTNlYS4uMzQ2ODcz
ZDY1MzI5NGYzYTBlMjIwYmIwZjM2ZTBiZDhkMDg3NGU1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYnJpZGdlL05QX2pzb2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
TlBfanNvYmplY3QuY3BwCkBAIC02Niw4ICs2Niw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGl0
ZXIgPSBtX21hcC5hZGQocm9vdE9iamVjdCwgSlNUb05QT2JqZWN0TWFwKCkpLml0ZXJhdG9yOwog
ICAgICAgICB9CiAKLSAgICAgICAgQVNTRVJUKGl0ZXItPnNlY29uZC5maW5kKGpzT2JqZWN0KSA9
PSBpdGVyLT5zZWNvbmQuZW5kKCkpOwotICAgICAgICBpdGVyLT5zZWNvbmQuYWRkKGpzT2JqZWN0
LCBucE9iamVjdCk7CisgICAgICAgIEFTU0VSVChpdGVyLT52YWx1ZS5maW5kKGpzT2JqZWN0KSA9
PSBpdGVyLT52YWx1ZS5lbmQoKSk7CisgICAgICAgIGl0ZXItPnZhbHVlLmFkZChqc09iamVjdCwg
bnBPYmplY3QpOwogICAgIH0KIAogICAgIHZvaWQgcmVtb3ZlKFJvb3RPYmplY3QqIHJvb3RPYmpl
Y3QpCkBAIC04MSw5ICs4MSw5IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIEhhc2hNYXA8Um9v
dE9iamVjdCosIEpTVG9OUE9iamVjdE1hcD46Oml0ZXJhdG9yIGl0ZXIgPSBtX21hcC5maW5kKHJv
b3RPYmplY3QpOwogICAgICAgICBBU1NFUlQoaXRlciAhPSBtX21hcC5lbmQoKSk7Ci0gICAgICAg
IEFTU0VSVChpdGVyLT5zZWNvbmQuZmluZChqc09iamVjdCkgIT0gaXRlci0+c2Vjb25kLmVuZCgp
KTsKKyAgICAgICAgQVNTRVJUKGl0ZXItPnZhbHVlLmZpbmQoanNPYmplY3QpICE9IGl0ZXItPnZh
bHVlLmVuZCgpKTsKIAotICAgICAgICBpdGVyLT5zZWNvbmQucmVtb3ZlKGpzT2JqZWN0KTsKKyAg
ICAgICAgaXRlci0+dmFsdWUucmVtb3ZlKGpzT2JqZWN0KTsKICAgICB9CiAKIHByaXZhdGU6CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhQ2xhc3NKU0MuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YUNsYXNzSlNDLmNwcAppbmRleCA5
NzU2ZTdkZjYwNWMwOTUzZThiYjRlMjg1NGIxZTU0NDkxYTllZjE1Li41ZGFiM2U0MWYyMzliMTA0
YWEyOWJmODQwMWNlMzkzYWYyYjU4MzFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9icmlk
Z2Uvam5pL2pzYy9KYXZhQ2xhc3NKU0MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9q
bmkvanNjL0phdmFDbGFzc0pTQy5jcHAKQEAgLTEwNyw3ICsxMDcsNyBAQCBKYXZhQ2xhc3M6On5K
YXZhQ2xhc3MoKQogCiAgICAgTWV0aG9kTGlzdE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9t
ZXRob2RzLmVuZCgpOwogICAgIGZvciAoTWV0aG9kTGlzdE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtX21ldGhvZHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IE1l
dGhvZExpc3QqIG1ldGhvZExpc3QgPSBpdC0+c2Vjb25kOworICAgICAgICBjb25zdCBNZXRob2RM
aXN0KiBtZXRob2RMaXN0ID0gaXQtPnZhbHVlOwogICAgICAgICBkZWxldGVBbGxWYWx1ZXMoKm1l
dGhvZExpc3QpOwogICAgICAgICBkZWxldGUgbWV0aG9kTGlzdDsKICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9yb290LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JyaWRnZS9ydW50aW1lX3Jvb3QuY3BwCmluZGV4IGU4ODRlNjFiMTM4NzZlODc3YTZjOTllNjgz
ZWRiOTk0MTI3ZTNkZjEuLjlkZGI5NTVlMTljYmUyNmM5ODM2ZGQ5NDg5ZTAyZGMwMTA4YWU3MmIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX3Jvb3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX3Jvb3QuY3BwCkBAIC0xMDUsNyArMTA1LDcg
QEAgdm9pZCBSb290T2JqZWN0OjppbnZhbGlkYXRlKCkKICAgICB7CiAgICAgICAgIEhhc2hNYXA8
UnVudGltZU9iamVjdCosIEpTQzo6V2VhazxSdW50aW1lT2JqZWN0PiA+OjppdGVyYXRvciBlbmQg
PSBtX3J1bnRpbWVPYmplY3RzLmVuZCgpOwogICAgICAgICBmb3IgKEhhc2hNYXA8UnVudGltZU9i
amVjdCosIEpTQzo6V2VhazxSdW50aW1lT2JqZWN0PiA+OjppdGVyYXRvciBpdCA9IG1fcnVudGlt
ZU9iamVjdHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBpdC0+c2Vj
b25kLmdldCgpLT5pbnZhbGlkYXRlKCk7CisgICAgICAgICAgICBpdC0+dmFsdWUuZ2V0KCktPmlu
dmFsaWRhdGUoKTsKICAgICAgICAgfQogCiAgICAgICAgIG1fcnVudGltZU9iamVjdHMuY2xlYXIo
KTsKQEAgLTEyNiw3ICsxMjYsNyBAQCB2b2lkIFJvb3RPYmplY3Q6OmludmFsaWRhdGUoKQogCiAg
ICAgUHJvdGVjdENvdW50U2V0OjppdGVyYXRvciBlbmQgPSBtX3Byb3RlY3RDb3VudFNldC5lbmQo
KTsKICAgICBmb3IgKFByb3RlY3RDb3VudFNldDo6aXRlcmF0b3IgaXQgPSBtX3Byb3RlY3RDb3Vu
dFNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIEpTQzo6Z2NVbnByb3RlY3Qo
aXQtPmZpcnN0KTsKKyAgICAgICAgSlNDOjpnY1VucHJvdGVjdChpdC0+a2V5KTsKICAgICBtX3By
b3RlY3RDb3VudFNldC5jbGVhcigpOwogCiAgICAgcm9vdE9iamVjdFNldCgpLT5yZW1vdmUodGhp
cyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FudmFzVmFsdWUuY3BwIGIv
U291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbnZhc1ZhbHVlLmNwcAppbmRleCA3ODNjZWVmODJiNTBm
ODg1ZTM3MDU5ZTc1ZGUxNTZkZWRmMjdkMTYxLi45YTk1NTQwZDk2ZWNjYzE5NzA3Mjg0YjU3YjZi
MmQxYzY5MGIxNjQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FudmFzVmFs
dWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYW52YXNWYWx1ZS5jcHAKQEAgLTQ5
LDE0ICs0OSwxNCBAQCB2b2lkIENTU0NhbnZhc1ZhbHVlOjpjYW52YXNDaGFuZ2VkKEhUTUxDYW52
YXNFbGVtZW50KiwgY29uc3QgRmxvYXRSZWN0JiBjaGFuZ2VkUgogICAgIEludFJlY3QgaW1hZ2VD
aGFuZ2VSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChjaGFuZ2VkUmVjdCk7CiAgICAgUmVuZGVyT2Jq
ZWN0U2l6ZUNvdW50TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBjbGllbnRzKCkuZW5kKCk7CiAg
ICAgZm9yIChSZW5kZXJPYmplY3RTaXplQ291bnRNYXA6OmNvbnN0X2l0ZXJhdG9yIGN1cnIgPSBj
bGllbnRzKCkuYmVnaW4oKTsgY3VyciAhPSBlbmQ7ICsrY3VycikKLSAgICAgICAgY29uc3RfY2Fz
dDxSZW5kZXJPYmplY3QqPihjdXJyLT5maXJzdCktPmltYWdlQ2hhbmdlZChzdGF0aWNfY2FzdDxX
cmFwcGVkSW1hZ2VQdHI+KHRoaXMpLCAmaW1hZ2VDaGFuZ2VSZWN0KTsKKyAgICAgICAgY29uc3Rf
Y2FzdDxSZW5kZXJPYmplY3QqPihjdXJyLT5rZXkpLT5pbWFnZUNoYW5nZWQoc3RhdGljX2Nhc3Q8
V3JhcHBlZEltYWdlUHRyPih0aGlzKSwgJmltYWdlQ2hhbmdlUmVjdCk7CiB9CiAKIHZvaWQgQ1NT
Q2FudmFzVmFsdWU6OmNhbnZhc1Jlc2l6ZWQoSFRNTENhbnZhc0VsZW1lbnQqKQogewogICAgIFJl
bmRlck9iamVjdFNpemVDb3VudE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY2xpZW50cygpLmVu
ZCgpOwogICAgIGZvciAoUmVuZGVyT2JqZWN0U2l6ZUNvdW50TWFwOjpjb25zdF9pdGVyYXRvciBj
dXJyID0gY2xpZW50cygpLmJlZ2luKCk7IGN1cnIgIT0gZW5kOyArK2N1cnIpCi0gICAgICAgIGNv
bnN0X2Nhc3Q8UmVuZGVyT2JqZWN0Kj4oY3Vyci0+Zmlyc3QpLT5pbWFnZUNoYW5nZWQoc3RhdGlj
X2Nhc3Q8V3JhcHBlZEltYWdlUHRyPih0aGlzKSk7CisgICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVy
T2JqZWN0Kj4oY3Vyci0+a2V5KS0+aW1hZ2VDaGFuZ2VkKHN0YXRpY19jYXN0PFdyYXBwZWRJbWFn
ZVB0cj4odGhpcykpOwogfQogCiB2b2lkIENTU0NhbnZhc1ZhbHVlOjpjYW52YXNEZXN0cm95ZWQo
SFRNTENhbnZhc0VsZW1lbnQqIGVsZW1lbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCmluZGV4IGM1MGI1MmZjNGNlOGM5MjhmYjY0
Njc0ZjIyM2ZjZGE5ZmNkOTM5YjYuLjY2MzMwYzgxODI4MjlmNDBjODFlYjdmZTRkMzlmMWQyYTc2
NDRkYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVj
bGFyYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVj
bGFyYXRpb24uY3BwCkBAIC0xMjM5LDggKzEyMzksOCBAQCBzdGF0aWMgUGFzc1JlZlB0cjxDU1NW
YWx1ZT4gY291bnRlclRvQ1NTVmFsdWUoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBpbnQgcHJv
cAogCiAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRl
U3BhY2VTZXBhcmF0ZWQoKTsKICAgICBmb3IgKENvdW50ZXJEaXJlY3RpdmVNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBtYXAtPmVuZCgpOyArK2l0KSB7Ci0gICAg
ICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKGl0LT5maXJzdC5nZXQo
KSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpKTsKLSAgICAgICAgc2hvcnQgbnVtYmVy
ID0gcHJvcGVydHlJRCA9PSBDU1NQcm9wZXJ0eUNvdW50ZXJJbmNyZW1lbnQgPyBpdC0+c2Vjb25k
Lm1faW5jcmVtZW50VmFsdWUgOiBpdC0+c2Vjb25kLm1fcmVzZXRWYWx1ZTsKKyAgICAgICAgbGlz
dC0+YXBwZW5kKGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoaXQtPmtleS5nZXQoKSwgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpKTsKKyAgICAgICAgc2hvcnQgbnVtYmVyID0gcHJvcGVy
dHlJRCA9PSBDU1NQcm9wZXJ0eUNvdW50ZXJJbmNyZW1lbnQgPyBpdC0+dmFsdWUubV9pbmNyZW1l
bnRWYWx1ZSA6IGl0LT52YWx1ZS5tX3Jlc2V0VmFsdWU7CiAgICAgICAgIGxpc3QtPmFwcGVuZChj
c3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKChkb3VibGUpbnVtYmVyLCBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX05VTUJFUikpOwogICAgIH0KICAgICByZXR1cm4gbGlzdC5yZWxlYXNlKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Jvc3NmYWRlVmFsdWUuY3BwIGIvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0Nyb3NzZmFkZVZhbHVlLmNwcAppbmRleCA0ZmYwOGFmY2E1ZmQ0YTEw
NTVmNWVkMTVmZDFlOGZhOTI0MDRhNmUyLi5kYzQ5NDMwOTUwMmZmY2Q4ZWEwOThmMzQ1ZjY0Y2Rl
Y2E4NmUzZTdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Jvc3NmYWRlVmFs
dWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDcm9zc2ZhZGVWYWx1ZS5jcHAKQEAg
LTE2MSw3ICsxNjEsNyBAQCB2b2lkIENTU0Nyb3NzZmFkZVZhbHVlOjpjcm9zc2ZhZGVDaGFuZ2Vk
KGNvbnN0IEludFJlY3QmKQogewogICAgIFJlbmRlck9iamVjdFNpemVDb3VudE1hcDo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gY2xpZW50cygpLmVuZCgpOwogICAgIGZvciAoUmVuZGVyT2JqZWN0U2l6
ZUNvdW50TWFwOjpjb25zdF9pdGVyYXRvciBjdXJyID0gY2xpZW50cygpLmJlZ2luKCk7IGN1cnIg
IT0gZW5kOyArK2N1cnIpIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiBjbGllbnQgPSBjb25zdF9j
YXN0PFJlbmRlck9iamVjdCo+KGN1cnItPmZpcnN0KTsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBj
bGllbnQgPSBjb25zdF9jYXN0PFJlbmRlck9iamVjdCo+KGN1cnItPmtleSk7CiAgICAgICAgIGNs
aWVudC0+aW1hZ2VDaGFuZ2VkKHN0YXRpY19jYXN0PFdyYXBwZWRJbWFnZVB0cj4odGhpcykpOwog
ICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNvdXJj
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuY3BwCmluZGV4IGRk
OTA0ZDM3ZmI5NTRlNDRkYmE2NTM4NzY3MzU4MzExOThmYWQzZDcuLmNlNDUzNjdhYzMzMjM3MmEw
ZmI5ZWM4YzVhNTJmYjlmMDg4OWVkZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NGb250RmFjZVNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNl
U291cmNlLmNwcApAQCAtMTE0LDcgKzExNCw3IEBAIFNpbXBsZUZvbnREYXRhKiBDU1NGb250RmFj
ZVNvdXJjZTo6Z2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpCiAg
ICAgdW5zaWduZWQgaGFzaEtleSA9IChmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUo
KSArIDEpIDw8IDYgfCBmb250RGVzY3JpcHRpb24ud2lkdGhWYXJpYW50KCkgPDwgNAogICAgICAg
ICAgICAgICAgICAgICAgICB8IChmb250RGVzY3JpcHRpb24udGV4dE9yaWVudGF0aW9uKCkgPT0g
VGV4dE9yaWVudGF0aW9uVXByaWdodCA/IDggOiAwKSB8IChmb250RGVzY3JpcHRpb24ub3JpZW50
YXRpb24oKSA9PSBWZXJ0aWNhbCA/IDQgOiAwKSB8IChzeW50aGV0aWNCb2xkID8gMiA6IDApIHwg
KHN5bnRoZXRpY0l0YWxpYyA/IDEgOiAwKTsKIAotICAgIFNpbXBsZUZvbnREYXRhKiYgY2FjaGVk
RGF0YSA9IG1fZm9udERhdGFUYWJsZS5hZGQoaGFzaEtleSwgMCkuaXRlcmF0b3ItPnNlY29uZDsK
KyAgICBTaW1wbGVGb250RGF0YSomIGNhY2hlZERhdGEgPSBtX2ZvbnREYXRhVGFibGUuYWRkKGhh
c2hLZXksIDApLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoY2FjaGVkRGF0YSkKICAgICAgICAg
cmV0dXJuIGNhY2hlZERhdGE7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NG
b250U2VsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAK
aW5kZXggZTAwMmYyZjhmMDE3MGU5OGNhNTZkNzFmZTVjZGI5N2JiZWE2MmI4NS4uYjkwYmJlOGY1
OTczYWQ3MjQyNzM1ODFhNTNhZWE0NzIzOTUyMDVmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Zv
bnRTZWxlY3Rvci5jcHAKQEAgLTI4NSw3ICsyODUsNyBAQCB2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6
YWRkRm9udEZhY2VSdWxlKGNvbnN0IENTU0ZvbnRGYWNlUnVsZSogZm9udEZhY2VSdWxlKQogICAg
ICAgICBpZiAoZmFtaWx5TmFtZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAot
ICAgICAgICBPd25QdHI8VmVjdG9yPFJlZlB0cjxDU1NGb250RmFjZT4gPiA+JiBmYW1pbHlGb250
RmFjZXMgPSBtX2ZvbnRGYWNlcy5hZGQoZmFtaWx5TmFtZSwgbnVsbHB0cikuaXRlcmF0b3ItPnNl
Y29uZDsKKyAgICAgICAgT3duUHRyPFZlY3RvcjxSZWZQdHI8Q1NTRm9udEZhY2U+ID4gPiYgZmFt
aWx5Rm9udEZhY2VzID0gbV9mb250RmFjZXMuYWRkKGZhbWlseU5hbWUsIG51bGxwdHIpLml0ZXJh
dG9yLT52YWx1ZTsKICAgICAgICAgaWYgKCFmYW1pbHlGb250RmFjZXMpIHsKICAgICAgICAgICAg
IGZhbWlseUZvbnRGYWNlcyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8UmVmUHRyPENTU0ZvbnRGYWNl
PiA+KTsKIApAQCAtNDg3LDEzICs0ODcsMTMgQEAgRm9udERhdGEqIENTU0ZvbnRTZWxlY3Rvcjo6
Z2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGMKICAg
ICAgICAgcmV0dXJuIGZvbnREYXRhRm9yR2VuZXJpY0ZhbWlseShtX2RvY3VtZW50LCBmb250RGVz
Y3JpcHRpb24sIGZhbWlseU5hbWUpOwogICAgIH0KIAotICAgIE93blB0cjxIYXNoTWFwPHVuc2ln
bmVkLCBSZWZQdHI8Q1NTU2VnbWVudGVkRm9udEZhY2U+ID4gPiYgc2VnbWVudGVkRm9udEZhY2VD
YWNoZSA9IG1fZm9udHMuYWRkKGZhbWlseSwgbnVsbHB0cikuaXRlcmF0b3ItPnNlY29uZDsKKyAg
ICBPd25QdHI8SGFzaE1hcDx1bnNpZ25lZCwgUmVmUHRyPENTU1NlZ21lbnRlZEZvbnRGYWNlPiA+
ID4mIHNlZ21lbnRlZEZvbnRGYWNlQ2FjaGUgPSBtX2ZvbnRzLmFkZChmYW1pbHksIG51bGxwdHIp
Lml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoIXNlZ21lbnRlZEZvbnRGYWNlQ2FjaGUpCiAgICAg
ICAgIHNlZ21lbnRlZEZvbnRGYWNlQ2FjaGUgPSBhZG9wdFB0cihuZXcgSGFzaE1hcDx1bnNpZ25l
ZCwgUmVmUHRyPENTU1NlZ21lbnRlZEZvbnRGYWNlPiA+KTsKIAogICAgIEZvbnRUcmFpdHNNYXNr
IHRyYWl0c01hc2sgPSBmb250RGVzY3JpcHRpb24udHJhaXRzTWFzaygpOwogCi0gICAgUmVmUHRy
PENTU1NlZ21lbnRlZEZvbnRGYWNlPiYgZmFjZSA9IHNlZ21lbnRlZEZvbnRGYWNlQ2FjaGUtPmFk
ZCh0cmFpdHNNYXNrLCAwKS5pdGVyYXRvci0+c2Vjb25kOworICAgIFJlZlB0cjxDU1NTZWdtZW50
ZWRGb250RmFjZT4mIGZhY2UgPSBzZWdtZW50ZWRGb250RmFjZUNhY2hlLT5hZGQodHJhaXRzTWFz
aywgMCkuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghZmFjZSkgewogICAgICAgICBmYWNlID0g
Q1NTU2VnbWVudGVkRm9udEZhY2U6OmNyZWF0ZSh0aGlzKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUuY3BwCmluZGV4IDliZTQ0NmJkMGZiODViMDY0ZDY5
ZjE4NjMyNjk5YTAzOWEwYWMxZDYuLmEzNDFlMmZjYWU1NzliZDcyOTIxZDZiZjM4MjdkOTJmMmYw
YTlhNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZUdlbmVyYXRvclZh
bHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5j
cHAKQEAgLTU2LDcgKzU2LDcgQEAgdm9pZCBDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjphZGRDbGll
bnQoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgSW50U2l6ZSYgc2kKICAgICBpZiAoaXQg
PT0gbV9jbGllbnRzLmVuZCgpKQogICAgICAgICBtX2NsaWVudHMuYWRkKHJlbmRlcmVyLCBTaXpl
QW5kQ291bnQoc2l6ZSwgMSkpOwogICAgIGVsc2UgewotICAgICAgICBTaXplQW5kQ291bnQmIHNp
emVDb3VudCA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFNpemVBbmRDb3VudCYgc2l6ZUNvdW50ID0g
aXQtPnZhbHVlOwogICAgICAgICArK3NpemVDb3VudC5jb3VudDsKICAgICB9CiB9CkBAIC02OCw3
ICs2OCw3IEBAIHZvaWQgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6cmVtb3ZlQ2xpZW50KFJlbmRl
ck9iamVjdCogcmVuZGVyZXIpCiAgICAgQVNTRVJUKGl0ICE9IG1fY2xpZW50cy5lbmQoKSk7CiAK
ICAgICBJbnRTaXplIHJlbW92ZWRJbWFnZVNpemU7Ci0gICAgU2l6ZUFuZENvdW50JiBzaXplQ291
bnQgPSBpdC0+c2Vjb25kOworICAgIFNpemVBbmRDb3VudCYgc2l6ZUNvdW50ID0gaXQtPnZhbHVl
OwogICAgIEludFNpemUgc2l6ZSA9IHNpemVDb3VudC5zaXplOwogICAgIGlmICghc2l6ZS5pc0Vt
cHR5KCkpIHsKICAgICAgICAgbV9zaXplcy5yZW1vdmUoc2l6ZSk7CkBAIC04Niw3ICs4Niw3IEBA
IEltYWdlKiBDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjpnZXRJbWFnZShSZW5kZXJPYmplY3QqIHJl
bmRlcmVyLCBjb25zdCBJbnRTaXplJiBzCiB7CiAgICAgUmVuZGVyT2JqZWN0U2l6ZUNvdW50TWFw
OjppdGVyYXRvciBpdCA9IG1fY2xpZW50cy5maW5kKHJlbmRlcmVyKTsKICAgICBpZiAoaXQgIT0g
bV9jbGllbnRzLmVuZCgpKSB7Ci0gICAgICAgIFNpemVBbmRDb3VudCYgc2l6ZUNvdW50ID0gaXQt
PnNlY29uZDsKKyAgICAgICAgU2l6ZUFuZENvdW50JiBzaXplQ291bnQgPSBpdC0+dmFsdWU7CiAg
ICAgICAgIEludFNpemUgb2xkU2l6ZSA9IHNpemVDb3VudC5zaXplOwogICAgICAgICBpZiAob2xk
U2l6ZSAhPSBzaXplKSB7CiAgICAgICAgICAgICBSZWZQdHI8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1
ZT4gcHJvdGVjdCh0aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWdt
ZW50ZWRGb250RmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VnbWVudGVkRm9udEZh
Y2UuY3BwCmluZGV4IGNmOWVjOWUyZWQyZjlmZWYyYmJkOTRmZjY1ZTBhYWUzMmEzODQxMDIuLmFk
MmU5ZTI1YjA0MDA0MGQ0NmE3ZWZmYzdjMDgyYWE1NTA5NWY5NDggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmNwcApAQCAtMTA2LDcgKzEwNiw3IEBAIEZvbnRE
YXRhKiBDU1NTZWdtZW50ZWRGb250RmFjZTo6Z2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0
aW9uJiBmb250RGVzY3JpcHRpCiAgICAgRm9udFRyYWl0c01hc2sgZGVzaXJlZFRyYWl0c01hc2sg
PSBmb250RGVzY3JpcHRpb24udHJhaXRzTWFzaygpOwogICAgIHVuc2lnbmVkIGhhc2hLZXkgPSAo
KGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpICsgMSkgPDwgKEZvbnRUcmFpdHNN
YXNrV2lkdGggKyAxKSkgfCAoKGZvbnREZXNjcmlwdGlvbi5vcmllbnRhdGlvbigpID09IFZlcnRp
Y2FsID8gMSA6IDApIDw8IEZvbnRUcmFpdHNNYXNrV2lkdGgpIHwgZGVzaXJlZFRyYWl0c01hc2s7
CiAKLSAgICBTZWdtZW50ZWRGb250RGF0YSomIGZvbnREYXRhID0gbV9mb250RGF0YVRhYmxlLmFk
ZChoYXNoS2V5LCAwKS5pdGVyYXRvci0+c2Vjb25kOworICAgIFNlZ21lbnRlZEZvbnREYXRhKiYg
Zm9udERhdGEgPSBtX2ZvbnREYXRhVGFibGUuYWRkKGhhc2hLZXksIDApLml0ZXJhdG9yLT52YWx1
ZTsKICAgICBpZiAoZm9udERhdGEpCiAgICAgICAgIHJldHVybiBmb250RGF0YTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlbGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NTZWxlY3Rvci5jcHAKaW5kZXggYWVlMTlmNmU5YjA0OGI0NGZhZmFiNjNkZDg1NThl
ODFiYjIxMGZhZi4uZDBmNTUwNDBlNWI4OGEzOGNhOTZjZjMwYzEzZDViOGU2ODExZjdiZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlbGVjdG9yLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTU2VsZWN0b3IuY3BwCkBAIC0zODgsNyArMzg4LDcgQEAgQ1NTU2VsZWN0
b3I6OlBzZXVkb1R5cGUgQ1NTU2VsZWN0b3I6OnBhcnNlUHNldWRvVHlwZShjb25zdCBBdG9taWNT
dHJpbmcmIG5hbWUpCiAgICAgICAgIHJldHVybiBQc2V1ZG9Vbmtub3duOwogICAgIEhhc2hNYXA8
QXRvbWljU3RyaW5nSW1wbCosIENTU1NlbGVjdG9yOjpQc2V1ZG9UeXBlPiogbmFtZVRvUHNldWRv
VHlwZSA9IG5hbWVUb1BzZXVkb1R5cGVNYXAoKTsKICAgICBIYXNoTWFwPEF0b21pY1N0cmluZ0lt
cGwqLCBDU1NTZWxlY3Rvcjo6UHNldWRvVHlwZT46Oml0ZXJhdG9yIHNsb3QgPSBuYW1lVG9Qc2V1
ZG9UeXBlLT5maW5kKG5hbWUuaW1wbCgpKTsKLSAgICByZXR1cm4gc2xvdCA9PSBuYW1lVG9Qc2V1
ZG9UeXBlLT5lbmQoKSA/IFBzZXVkb1Vua25vd24gOiBzbG90LT5zZWNvbmQ7CisgICAgcmV0dXJu
IHNsb3QgPT0gbmFtZVRvUHNldWRvVHlwZS0+ZW5kKCkgPyBQc2V1ZG9Vbmtub3duIDogc2xvdC0+
dmFsdWU7CiB9CiAKIGJvb2wgQ1NTU2VsZWN0b3I6OmlzVW5rbm93blBzZXVkb1R5cGUoY29uc3Qg
QXRvbWljU3RyaW5nJiBuYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0
eWxlQXBwbHlQcm9wZXJ0eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVBcHBseVBy
b3BlcnR5LmNwcAppbmRleCAzMDYxZjA1NWZiN2UxYzlhOTIzOThkMzlkZTYxMzllOTQxZTNiNTU2
Li44YzNkYmI3ZWZiMWQ5MTFhMWFhMWUxY2M5Y2ZhOWU0NmM0NDc3M2VjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVBcHBseVByb3BlcnR5LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTU3R5bGVBcHBseVByb3BlcnR5LmNwcApAQCAtMTAwNCwyMSArMTAwNCwy
MSBAQCBwdWJsaWM6CiAgICAgICAgIHR5cGVkZWYgQ291bnRlckRpcmVjdGl2ZU1hcDo6aXRlcmF0
b3IgSXRlcmF0b3I7CiAgICAgICAgIEl0ZXJhdG9yIGVuZCA9IHBhcmVudE1hcC5lbmQoKTsKICAg
ICAgICAgZm9yIChJdGVyYXRvciBpdCA9IHBhcmVudE1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKLSAgICAgICAgICAgIENvdW50ZXJEaXJlY3RpdmVzJiBkaXJlY3RpdmVzID0gbWFwLmFk
ZChpdC0+Zmlyc3QsIENvdW50ZXJEaXJlY3RpdmVzKCkpLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAg
ICAgICAgICBDb3VudGVyRGlyZWN0aXZlcyYgZGlyZWN0aXZlcyA9IG1hcC5hZGQoaXQtPmtleSwg
Q291bnRlckRpcmVjdGl2ZXMoKSkuaXRlcmF0b3ItPnZhbHVlOwogICAgICAgICAgICAgaWYgKGNv
dW50ZXJCZWhhdmlvciA9PSBSZXNldCkgewotICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXMubV9y
ZXNldCA9IGl0LT5zZWNvbmQubV9yZXNldDsKLSAgICAgICAgICAgICAgICBkaXJlY3RpdmVzLm1f
cmVzZXRWYWx1ZSA9IGl0LT5zZWNvbmQubV9yZXNldFZhbHVlOworICAgICAgICAgICAgICAgIGRp
cmVjdGl2ZXMubV9yZXNldCA9IGl0LT52YWx1ZS5tX3Jlc2V0OworICAgICAgICAgICAgICAgIGRp
cmVjdGl2ZXMubV9yZXNldFZhbHVlID0gaXQtPnZhbHVlLm1fcmVzZXRWYWx1ZTsKICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gSW5oZXJpdGluZyBhIGNvdW50ZXItaW5j
cmVtZW50IG1lYW5zIHRha2luZyB0aGUgcGFyZW50J3MgY3VycmVudCB2YWx1ZSBmb3IgdGhlIGNv
dW50ZXIKICAgICAgICAgICAgICAgICAvLyBhbmQgYWRkaW5nIGl0IHRvIGl0c2VsZi4KLSAgICAg
ICAgICAgICAgICBkaXJlY3RpdmVzLm1faW5jcmVtZW50ID0gaXQtPnNlY29uZC5tX2luY3JlbWVu
dDsKKyAgICAgICAgICAgICAgICBkaXJlY3RpdmVzLm1faW5jcmVtZW50ID0gaXQtPnZhbHVlLm1f
aW5jcmVtZW50OwogICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXMubV9pbmNyZW1lbnRWYWx1ZSA9
IDA7CiAgICAgICAgICAgICAgICAgaWYgKGRpcmVjdGl2ZXMubV9pbmNyZW1lbnQpIHsKICAgICAg
ICAgICAgICAgICAgICAgZmxvYXQgaW5jcmVtZW50VmFsdWUgPSBkaXJlY3RpdmVzLm1faW5jcmVt
ZW50VmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXMubV9pbmNyZW1lbnRWYWx1
ZSA9IGNsYW1wVG9JbnRlZ2VyKGluY3JlbWVudFZhbHVlICsgaXQtPnNlY29uZC5tX2luY3JlbWVu
dFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlcy5tX2luY3JlbWVudFZhbHVl
ID0gY2xhbXBUb0ludGVnZXIoaW5jcmVtZW50VmFsdWUgKyBpdC0+dmFsdWUubV9pbmNyZW1lbnRW
YWx1ZSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgZGly
ZWN0aXZlcy5tX2luY3JlbWVudCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2
ZXMubV9pbmNyZW1lbnRWYWx1ZSA9IGl0LT5zZWNvbmQubV9pbmNyZW1lbnRWYWx1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgZGlyZWN0aXZlcy5tX2luY3JlbWVudFZhbHVlID0gaXQtPnZhbHVlLm1f
aW5jcmVtZW50VmFsdWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAg
ICB9CkBAIC0xMDM2LDkgKzEwMzYsOSBAQCBwdWJsaWM6CiAgICAgICAgIEl0ZXJhdG9yIGVuZCA9
IG1hcC5lbmQoKTsKICAgICAgICAgZm9yIChJdGVyYXRvciBpdCA9IG1hcC5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCiAgICAgICAgICAgICBpZiAoY291bnRlckJlaGF2aW9yID09IFJlc2V0KQot
ICAgICAgICAgICAgICAgIGl0LT5zZWNvbmQubV9yZXNldCA9IGZhbHNlOworICAgICAgICAgICAg
ICAgIGl0LT52YWx1ZS5tX3Jlc2V0ID0gZmFsc2U7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgaXQtPnNlY29uZC5tX2luY3JlbWVudCA9IGZhbHNlOworICAgICAgICAgICAgICAg
IGl0LT52YWx1ZS5tX2luY3JlbWVudCA9IGZhbHNlOwogCiAgICAgICAgIGludCBsZW5ndGggPSBs
aXN0ID8gbGlzdC0+bGVuZ3RoKCkgOiAwOwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxl
bmd0aDsgKytpKSB7CkBAIC0xMDUyLDcgKzEwNTIsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgICAg
IEF0b21pY1N0cmluZyBpZGVudGlmaWVyID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUq
PihwYWlyLT5maXJzdCgpKS0+Z2V0U3RyaW5nVmFsdWUoKTsKICAgICAgICAgICAgIGludCB2YWx1
ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4ocGFpci0+c2Vjb25kKCkpLT5nZXRJ
bnRWYWx1ZSgpOwotICAgICAgICAgICAgQ291bnRlckRpcmVjdGl2ZXMmIGRpcmVjdGl2ZXMgPSBt
YXAuYWRkKGlkZW50aWZpZXIuaW1wbCgpLCBDb3VudGVyRGlyZWN0aXZlcygpKS5pdGVyYXRvci0+
c2Vjb25kOworICAgICAgICAgICAgQ291bnRlckRpcmVjdGl2ZXMmIGRpcmVjdGl2ZXMgPSBtYXAu
YWRkKGlkZW50aWZpZXIuaW1wbCgpLCBDb3VudGVyRGlyZWN0aXZlcygpKS5pdGVyYXRvci0+dmFs
dWU7CiAgICAgICAgICAgICBpZiAoY291bnRlckJlaGF2aW9yID09IFJlc2V0KSB7CiAgICAgICAg
ICAgICAgICAgZGlyZWN0aXZlcy5tX3Jlc2V0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBkaXJl
Y3RpdmVzLm1fcmVzZXRWYWx1ZSA9IHZhbHVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2Vs
ZWN0b3IuY3BwCmluZGV4IDhmYzYzOTIyMTQxMzVkZGMzNzU3YTExYmJiNWE2YTRlOTI0ZWZkMDcu
LmE4MDNlNDgyYmY5NWQ4NDU4YzY4YzA4NGRkMzJlNWMzMTJkM2RhYmEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKQEAgLTQ1NSw3ICs0NTUsNyBAQCB2b2lkIENTU1N0
eWxlU2VsZWN0b3I6OmNvbGxlY3RGZWF0dXJlcygpCiAgICAgbV9mZWF0dXJlcy5hZGQobV9hdXRo
b3JTdHlsZS0+ZmVhdHVyZXMoKSk7CiAjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKICAgICBmb3Ig
KFNjb3BlZFJ1bGVTZXRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zY29wZWRBdXRob3JTdHlsZXMuYmVn
aW4oKTsgaXQgIT0gbV9zY29wZWRBdXRob3JTdHlsZXMuZW5kKCk7ICsraXQpCi0gICAgICAgIG1f
ZmVhdHVyZXMuYWRkKGl0LT5zZWNvbmQtPmZlYXR1cmVzKCkpOworICAgICAgICBtX2ZlYXR1cmVz
LmFkZChpdC0+dmFsdWUtPmZlYXR1cmVzKCkpOwogI2VuZGlmCiAgICAgaWYgKG1fdXNlclN0eWxl
KQogICAgICAgICBtX2ZlYXR1cmVzLmFkZChtX3VzZXJTdHlsZS0+ZmVhdHVyZXMoKSk7CkBAIC00
OTIsNyArNDkyLDcgQEAgaW5saW5lIFJ1bGVTZXQqIENTU1N0eWxlU2VsZWN0b3I6OnJ1bGVTZXRG
b3JTY29wZShjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSkgY28KICAgICBpZiAoIXNjb3BlLT5o
YXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpKQogICAgICAgICByZXR1cm4gMDsKICAgICBTY29wZWRS
dWxlU2V0TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fc2NvcGVkQXV0aG9yU3R5bGVzLmZpbmQo
c2NvcGUpOwotICAgIHJldHVybiBpdCAhPSBtX3Njb3BlZEF1dGhvclN0eWxlcy5lbmQoKSA/IGl0
LT5zZWNvbmQuZ2V0KCkgOiAwOyAKKyAgICByZXR1cm4gaXQgIT0gbV9zY29wZWRBdXRob3JTdHls
ZXMuZW5kKCkgPyBpdC0+dmFsdWUuZ2V0KCkgOiAwOyAKIH0KICNlbmRpZgogCkBAIC01MTAsOCAr
NTEwLDggQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBlbmRBdXRob3JTdHlsZXNoZWV0cyh1
bnNpZ25lZCBmaXJzdE5ldywgY29uc3QgVmVjdG9yPFIKICAgICAgICAgaWYgKHNjb3BlKSB7CiAg
ICAgICAgICAgICBTY29wZWRSdWxlU2V0TWFwOjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gbV9zY29w
ZWRBdXRob3JTdHlsZXMuYWRkKHNjb3BlLCBudWxscHRyKTsKICAgICAgICAgICAgIGlmIChhZGRS
ZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnNl
Y29uZCA9IFJ1bGVTZXQ6OmNyZWF0ZSgpOwotICAgICAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9y
LT5zZWNvbmQtPmFkZFJ1bGVzRnJvbVNoZWV0KGNzc1NoZWV0LCAqbV9tZWRpdW0sIHRoaXMsIHNj
b3BlKTsKKyAgICAgICAgICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gUnVsZVNl
dDo6Y3JlYXRlKCk7CisgICAgICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5hZGRS
dWxlc0Zyb21TaGVldChjc3NTaGVldCwgKm1fbWVkaXVtLCB0aGlzLCBzY29wZSk7CiAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgfQogI2VuZGlmCkBAIC02MzIsMTAgKzYzMiwxMCBAQCB2
b2lkIENTU1N0eWxlU2VsZWN0b3I6OnN3ZWVwTWF0Y2hlZFByb3BlcnRpZXNDYWNoZSgpCiAgICAg
TWF0Y2hlZFByb3BlcnRpZXNDYWNoZTo6aXRlcmF0b3IgaXQgPSBtX21hdGNoZWRQcm9wZXJ0aWVz
Q2FjaGUuYmVnaW4oKTsKICAgICBNYXRjaGVkUHJvcGVydGllc0NhY2hlOjppdGVyYXRvciBlbmQg
PSBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUuZW5kKCk7CiAgICAgZm9yICg7IGl0ICE9IGVuZDsg
KytpdCkgewotICAgICAgICBWZWN0b3I8TWF0Y2hlZFByb3BlcnRpZXM+JiBtYXRjaGVkUHJvcGVy
dGllcyA9IGl0LT5zZWNvbmQubWF0Y2hlZFByb3BlcnRpZXM7CisgICAgICAgIFZlY3RvcjxNYXRj
aGVkUHJvcGVydGllcz4mIG1hdGNoZWRQcm9wZXJ0aWVzID0gaXQtPnZhbHVlLm1hdGNoZWRQcm9w
ZXJ0aWVzOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1hdGNoZWRQcm9wZXJ0aWVz
LnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBpZiAobWF0Y2hlZFByb3BlcnRpZXNbaV0ucHJv
cGVydGllcy0+aGFzT25lUmVmKCkpIHsKLSAgICAgICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQo
aXQtPmZpcnN0KTsKKyAgICAgICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQoaXQtPmtleSk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE3MDQs
NyArMTcwNCw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6a2V5ZnJhbWVTdHlsZXNGb3JBbmlt
YXRpb24oRWxlbWVudCogZSwgY29uc3QgUmVuZGVyU3R5bGUqCiAgICAgaWYgKGl0ID09IG1fa2V5
ZnJhbWVzUnVsZU1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY29uc3QgV2ViS2l0
Q1NTS2V5ZnJhbWVzUnVsZSoga2V5ZnJhbWVzUnVsZSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAg
Y29uc3QgV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZSoga2V5ZnJhbWVzUnVsZSA9IGl0LT52YWx1ZS5n
ZXQoKTsKIAogICAgIC8vIENvbnN0cnVjdCBhbmQgcG9wdWxhdGUgdGhlIHN0eWxlIGZvciBlYWNo
IGtleWZyYW1lCiAgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZUtleWZyYW1lPiA+JiBrZXlm
cmFtZXMgPSBrZXlmcmFtZXNSdWxlLT5rZXlmcmFtZXMoKTsKQEAgLTIzODUsNyArMjM4NSw3IEBA
IHZvaWQgUnVsZVNldDo6YWRkVG9SdWxlU2V0KEF0b21pY1N0cmluZ0ltcGwqIGtleSwgQXRvbVJ1
bGVNYXAmIG1hcCwgY29uc3QgUnVsZURhCiB7CiAgICAgaWYgKCFrZXkpCiAgICAgICAgIHJldHVy
bjsKLSAgICBPd25QdHI8VmVjdG9yPFJ1bGVEYXRhPiA+JiBydWxlcyA9IG1hcC5hZGQoa2V5LCBu
dWxscHRyKS5pdGVyYXRvci0+c2Vjb25kOworICAgIE93blB0cjxWZWN0b3I8UnVsZURhdGE+ID4m
IHJ1bGVzID0gbWFwLmFkZChrZXksIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAo
IXJ1bGVzKQogICAgICAgICBydWxlcyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8UnVsZURhdGE+KTsK
ICAgICBydWxlcy0+YXBwZW5kKHJ1bGVEYXRhKTsKQEAgLTI1NDUsNyArMjU0NSw3IEBAIHN0YXRp
YyBpbmxpbmUgdm9pZCBzaHJpbmtNYXBWZWN0b3JzVG9GaXQoUnVsZVNldDo6QXRvbVJ1bGVNYXAm
IG1hcCkKIHsKICAgICBSdWxlU2V0OjpBdG9tUnVsZU1hcDo6aXRlcmF0b3IgZW5kID0gbWFwLmVu
ZCgpOwogICAgIGZvciAoUnVsZVNldDo6QXRvbVJ1bGVNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+c2hyaW5rVG9GaXQo
KTsKKyAgICAgICAgaXQtPnZhbHVlLT5zaHJpbmtUb0ZpdCgpOwogfQogCiB2b2lkIFJ1bGVTZXQ6
OnNocmlua1RvRml0KCkKQEAgLTI2ODEsNyArMjY4MSw3IEBAIGNvbnN0IENTU1N0eWxlU2VsZWN0
b3I6Ok1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVJdGVtKiBDU1NTdHlsZVNlbGVjdG9yOjpmaW5kRnJv
bU1hCiAgICAgTWF0Y2hlZFByb3BlcnRpZXNDYWNoZTo6aXRlcmF0b3IgaXQgPSBtX21hdGNoZWRQ
cm9wZXJ0aWVzQ2FjaGUuZmluZChoYXNoKTsKICAgICBpZiAoaXQgPT0gbV9tYXRjaGVkUHJvcGVy
dGllc0NhY2hlLmVuZCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBNYXRjaGVkUHJvcGVydGll
c0NhY2hlSXRlbSYgY2FjaGVJdGVtID0gaXQtPnNlY29uZDsKKyAgICBNYXRjaGVkUHJvcGVydGll
c0NhY2hlSXRlbSYgY2FjaGVJdGVtID0gaXQtPnZhbHVlOwogCiAgICAgc2l6ZV90IHNpemUgPSBt
YXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCk7CiAgICAgaWYgKHNpemUgIT0gY2Fj
aGVJdGVtLm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NWYWx1ZVBvb2wuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlUG9v
bC5jcHAKaW5kZXggMDViYTU0OTUwMmFmYjg3Njc3ZjI1MzEyYmYxM2FiNjQ5NzY5YTQ2MS4uMWM0
NjEwMzg4OGM0ZTJjZTY5MGZjZmNkMWE4OTFmOWYwYTU0MzMxOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvY3NzL0NTU1ZhbHVlUG9vbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1ZhbHVlUG9vbC5jcHAKQEAgLTU3LDggKzU3LDggQEAgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gQ1NTVmFsdWVQb29sOjpjcmVhdGVJZGVudGlmaWVyVmFsdWUoaW50IGlkZW50KQogICAg
IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gZHVtbXlWYWx1ZTsKICAgICBJZGVudGlmaWVyVmFs
dWVDYWNoZTo6QWRkUmVzdWx0IGVudHJ5ID0gbV9pZGVudGlmaWVyVmFsdWVDYWNoZS5hZGQoaWRl
bnQsIGR1bW15VmFsdWUpOwogICAgIGlmIChlbnRyeS5pc05ld0VudHJ5KQotICAgICAgICBlbnRy
eS5pdGVyYXRvci0+c2Vjb25kID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIo
aWRlbnQpOwotICAgIHJldHVybiBlbnRyeS5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICBlbnRy
eS5pdGVyYXRvci0+dmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcihp
ZGVudCk7CisgICAgcmV0dXJuIGVudHJ5Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIAogUGFzc1JlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NTVmFsdWVQb29sOjpjcmVhdGVDb2xvclZhbHVlKHVuc2ln
bmVkIHJnYlZhbHVlKQpAQCAtODAsOCArODAsOCBAQCBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBDU1NWYWx1ZVBvb2w6OmNyZWF0ZUNvbG9yVmFsdWUodW5zaWduZWQgcmdiVmFsdWUpCiAg
ICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBkdW1teVZhbHVlOwogICAgIENvbG9yVmFsdWVD
YWNoZTo6QWRkUmVzdWx0IGVudHJ5ID0gbV9jb2xvclZhbHVlQ2FjaGUuYWRkKHJnYlZhbHVlLCBk
dW1teVZhbHVlKTsKICAgICBpZiAoZW50cnkuaXNOZXdFbnRyeSkKLSAgICAgICAgZW50cnkuaXRl
cmF0b3ItPnNlY29uZCA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVDb2xvcihyZ2JWYWx1ZSk7
Ci0gICAgcmV0dXJuIGVudHJ5Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgIGVudHJ5Lml0ZXJh
dG9yLT52YWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVDb2xvcihyZ2JWYWx1ZSk7Cisg
ICAgcmV0dXJuIGVudHJ5Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIAogUGFzc1JlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4gQ1NTVmFsdWVQb29sOjpjcmVhdGVWYWx1ZShkb3VibGUgdmFsdWUsIENTU1By
aW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMgdHlwZSkKQEAgLTExOSwxMyArMTE5LDEzIEBAIFBhc3NS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IENTU1ZhbHVlUG9vbDo6Y3JlYXRlVmFsdWUoZG91Ymxl
IHZhbHVlLCBDU1NQcmltaXRpCiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBkdW1teVZh
bHVlOwogICAgIEludGVnZXJWYWx1ZUNhY2hlOjpBZGRSZXN1bHQgZW50cnkgPSBjYWNoZS0+YWRk
KGludFZhbHVlLCBkdW1teVZhbHVlKTsKICAgICBpZiAoZW50cnkuaXNOZXdFbnRyeSkKLSAgICAg
ICAgZW50cnkuaXRlcmF0b3ItPnNlY29uZCA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFs
dWUsIHR5cGUpOwotICAgIHJldHVybiBlbnRyeS5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICBl
bnRyeS5pdGVyYXRvci0+dmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZhbHVlLCB0
eXBlKTsKKyAgICByZXR1cm4gZW50cnkuaXRlcmF0b3ItPnZhbHVlOwogfQogCiBQYXNzUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NWYWx1ZVBvb2w6OmNyZWF0ZUZvbnRGYW1pbHlWYWx1ZShj
b25zdCBTdHJpbmcmIGZhbWlseU5hbWUpCiB7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiYgdmFsdWUgPSBtX2ZvbnRGYW1pbHlWYWx1ZUNhY2hlLmFkZChmYW1pbHlOYW1lLCAwKS5pdGVy
YXRvci0+c2Vjb25kOworICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mIHZhbHVlID0gbV9m
b250RmFtaWx5VmFsdWVDYWNoZS5hZGQoZmFtaWx5TmFtZSwgMCkuaXRlcmF0b3ItPnZhbHVlOwog
ICAgIGlmICghdmFsdWUpCiAgICAgICAgIHZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0
ZShmYW1pbHlOYW1lLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORyk7CiAgICAgcmV0dXJu
IHZhbHVlOwpAQCAtMTM4LDcgKzEzOCw3IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWVMaXN0PiBDU1NW
YWx1ZVBvb2w6OmNyZWF0ZUZvbnRGYWNlVmFsdWUoY29uc3QgQXRvbWljU3RyaW5nJiBzCiAgICAg
aWYgKG1fZm9udEZhY2VWYWx1ZUNhY2hlLnNpemUoKSA+IG1heGltdW1Gb250RmFjZUNhY2hlU2l6
ZSkKICAgICAgICAgbV9mb250RmFjZVZhbHVlQ2FjaGUuY2xlYXIoKTsKIAotICAgIFJlZlB0cjxD
U1NWYWx1ZUxpc3Q+JiB2YWx1ZSA9IG1fZm9udEZhY2VWYWx1ZUNhY2hlLmFkZChzdHJpbmcsIDAp
Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4mIHZhbHVlID0gbV9m
b250RmFjZVZhbHVlQ2FjaGUuYWRkKHN0cmluZywgMCkuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlm
ICghdmFsdWUpCiAgICAgICAgIHZhbHVlID0gQ1NTUGFyc2VyOjpwYXJzZUZvbnRGYWNlVmFsdWUo
c3RyaW5nLCBjb250ZXh0U3R5bGVTaGVldCk7CiAgICAgcmV0dXJuIHZhbHVlOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydHlTZXQuY3BwIGIvU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlUHJvcGVydHlTZXQuY3BwCmluZGV4IDg3MzQ5OGRlYzQ2Mzg5ZTZlMzU1Njlh
N2EyYjY5YTExZGY0N2VjMzMuLjNhMzQ4ZjE4YjRlMjdjM2Q0MDcyYWZkOGM5ODFlYzdmYTQ4ODIz
ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnR5U2V0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0eVNldC5jcHAKQEAgLTcxLDcgKzcx
LDcgQEAgU3R5bGVQcm9wZXJ0eVNldDo6U3R5bGVQcm9wZXJ0eVNldChjb25zdCBDU1NQcm9wZXJ0
eSogcHJvcGVydGllcywgaW50IG51bVByb3BlcnQKIAogICAgICAgICBIYXNoTWFwPGludCwgYm9v
bD46Oml0ZXJhdG9yIGl0ID0gY2FuZGlkYXRlcy5maW5kKHByb3BlcnR5LmlkKCkpOwogICAgICAg
ICBpZiAoaXQgIT0gY2FuZGlkYXRlcy5lbmQoKSkgewotICAgICAgICAgICAgaWYgKCFpbXBvcnRh
bnQgJiYgaXQtPnNlY29uZCkKKyAgICAgICAgICAgIGlmICghaW1wb3J0YW50ICYmIGl0LT52YWx1
ZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIHJlbW92ZVByb3BlcnR5
KHByb3BlcnR5LmlkKCkpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vQ2hlY2tlZFJhZGlvQnV0dG9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hlY2tlZFJh
ZGlvQnV0dG9ucy5jcHAKaW5kZXggZTY3MjMyOWFmOGRlMzc4YmVmZGZjMTRmOGFjYmQwZjJlYzBj
NzQwNS4uOWZhNTA5YmI5NTFkMzgwOTE0MDAwMDExZWU1Y2U2NTE0YTk4ZDQ2YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL0NoZWNrZWRSYWRpb0J1dHRvbnMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9DaGVja2VkUmFkaW9CdXR0b25zLmNwcApAQCAtMTg1LDcgKzE4NSw3IEBA
IHZvaWQgQ2hlY2tlZFJhZGlvQnV0dG9uczo6YWRkQnV0dG9uKEhUTUxJbnB1dEVsZW1lbnQqIGVs
ZW1lbnQpCiAgICAgaWYgKCFtX25hbWVUb0dyb3VwTWFwKQogICAgICAgICBtX25hbWVUb0dyb3Vw
TWFwID0gYWRvcHRQdHIobmV3IE5hbWVUb0dyb3VwTWFwKTsKIAotICAgIE93blB0cjxSYWRpb0J1
dHRvbkdyb3VwPiYgZ3JvdXAgPSBtX25hbWVUb0dyb3VwTWFwLT5hZGQoZWxlbWVudC0+bmFtZSgp
LmltcGwoKSwgUGFzc093blB0cjxSYWRpb0J1dHRvbkdyb3VwPigpKS5pdGVyYXRvci0+c2Vjb25k
OworICAgIE93blB0cjxSYWRpb0J1dHRvbkdyb3VwPiYgZ3JvdXAgPSBtX25hbWVUb0dyb3VwTWFw
LT5hZGQoZWxlbWVudC0+bmFtZSgpLmltcGwoKSwgUGFzc093blB0cjxSYWRpb0J1dHRvbkdyb3Vw
PigpKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCFncm91cCkKICAgICAgICAgZ3JvdXAgPSBS
YWRpb0J1dHRvbkdyb3VwOjpjcmVhdGUoKTsKICAgICBncm91cC0+YWRkKGVsZW1lbnQpOwpAQCAt
MjQ2LDggKzI0Niw4IEBAIHZvaWQgQ2hlY2tlZFJhZGlvQnV0dG9uczo6cmVtb3ZlQnV0dG9uKEhU
TUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgTmFtZVRvR3JvdXBNYXA6Oml0ZXJhdG9yIGl0
ID0gbV9uYW1lVG9Hcm91cE1hcC0+ZmluZChlbGVtZW50LT5uYW1lKCkuaW1wbCgpKTsKICAgICBp
ZiAoaXQgPT0gbV9uYW1lVG9Hcm91cE1hcC0+ZW5kKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBp
dC0+c2Vjb25kLT5yZW1vdmUoZWxlbWVudCk7Ci0gICAgaWYgKGl0LT5zZWNvbmQtPmlzRW1wdHko
KSkgeworICAgIGl0LT52YWx1ZS0+cmVtb3ZlKGVsZW1lbnQpOworICAgIGlmIChpdC0+dmFsdWUt
PmlzRW1wdHkoKSkgewogICAgICAgICAvLyBGSVhNRTogV2UgbWF5IHNraXAgZGVhbGxvY2F0aW5n
IHRoZSBlbXB0eSBSYWRpb0J1dHRvbkdyb3VwIGZvcgogICAgICAgICAvLyBwZXJmb3JtYW5jZSBp
bXByb3ZlbWVudC4gSWYgd2UgZG8gc28sIHdlIG5lZWQgdG8gY2hhbmdlIHRoZSBrZXkgdHlwZQog
ICAgICAgICAvLyBvZiBtX25hbWVUb0dyb3VwTWFwIGZyb20gQXRvbWljU3RyaW5nSW1wbCogdG8g
UmVmUHRyPEF0b21pY1N0cmluZ0ltcGw+LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L0NoaWxkTGlzdE11dGF0aW9uU2NvcGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0NoaWxkTGlz
dE11dGF0aW9uU2NvcGUuY3BwCmluZGV4IGM1Y2IzYWQ5ZjZlYWI3OGQ4OWU1ZDY3ZWE5YzQzNTIz
MjI5N2UwN2UuLjUzN2RhNDEyYTU1Yjg4NGJjZWY5ZTE3ZjA0Zjk0NzVlMDc2M2EyYTAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZExpc3RNdXRhdGlvblNjb3BlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5jcHAKQEAgLTE5Mywy
NyArMTkzLDI3IEBAIHZvaWQgQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVs
YXRpb25Sb3V0ZXI6OmNoaWxkQWRkZWQoTm9kZSogdGFyZ2V0CiB7CiAgICAgSGFzaE1hcDxOb2Rl
KiwgT3duUHRyPENoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0b3I+ID46
Oml0ZXJhdG9yIGl0ZXIgPSBtX2FjY3VtdWxhdGlvbnMuZmluZCh0YXJnZXQpOwogICAgIEFTU0VS
VChpdGVyICE9IG1fYWNjdW11bGF0aW9ucy5lbmQoKSk7Ci0gICAgaWYgKGl0ZXIgPT0gbV9hY2N1
bXVsYXRpb25zLmVuZCgpIHx8ICFpdGVyLT5zZWNvbmQpCisgICAgaWYgKGl0ZXIgPT0gbV9hY2N1
bXVsYXRpb25zLmVuZCgpIHx8ICFpdGVyLT52YWx1ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
aXRlci0+c2Vjb25kLT5jaGlsZEFkZGVkKGNoaWxkKTsKKyAgICBpdGVyLT52YWx1ZS0+Y2hpbGRB
ZGRlZChjaGlsZCk7CiB9CiAKIHZvaWQgQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25B
Y2N1bXVsYXRpb25Sb3V0ZXI6OndpbGxSZW1vdmVDaGlsZChOb2RlKiB0YXJnZXQsIE5vZGUqIGNo
aWxkKQogewogICAgIEhhc2hNYXA8Tm9kZSosIE93blB0cjxDaGlsZExpc3RNdXRhdGlvblNjb3Bl
OjpNdXRhdGlvbkFjY3VtdWxhdG9yPiA+OjppdGVyYXRvciBpdGVyID0gbV9hY2N1bXVsYXRpb25z
LmZpbmQodGFyZ2V0KTsKICAgICBBU1NFUlQoaXRlciAhPSBtX2FjY3VtdWxhdGlvbnMuZW5kKCkp
OwotICAgIGlmIChpdGVyID09IG1fYWNjdW11bGF0aW9ucy5lbmQoKSB8fCAhaXRlci0+c2Vjb25k
KQorICAgIGlmIChpdGVyID09IG1fYWNjdW11bGF0aW9ucy5lbmQoKSB8fCAhaXRlci0+dmFsdWUp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGl0ZXItPnNlY29uZC0+d2lsbFJlbW92ZUNoaWxkKGNo
aWxkKTsKKyAgICBpdGVyLT52YWx1ZS0+d2lsbFJlbW92ZUNoaWxkKGNoaWxkKTsKIH0KIAogdm9p
ZCBDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlcjo6aW5j
cmVtZW50U2NvcGluZ0xldmVsKE5vZGUqIHRhcmdldCkKIHsKICAgICBTY29waW5nTGV2ZWxNYXA6
OkFkZFJlc3VsdCByZXN1bHQgPSBtX3Njb3BpbmdMZXZlbHMuYWRkKHRhcmdldCwgMSk7CiAgICAg
aWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICArKyhyZXN1bHQuaXRlcmF0b3ItPnNl
Y29uZCk7CisgICAgICAgICsrKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCkBAIC0yMzAsOCArMjMwLDggQEAgdm9pZCBDaGlsZExpc3RNdXRhdGlvblNj
b3BlOjpNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlcjo6ZGVjcmVtZW50U2NvcGluZ0xldmVsKE4K
ICAgICBTY29waW5nTGV2ZWxNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3Njb3BpbmdMZXZlbHMuZmlu
ZCh0YXJnZXQpOwogICAgIEFTU0VSVChpdGVyICE9IG1fc2NvcGluZ0xldmVscy5lbmQoKSk7CiAK
LSAgICAtLShpdGVyLT5zZWNvbmQpOwotICAgIGlmIChpdGVyLT5zZWNvbmQgPiAwKQorICAgIC0t
KGl0ZXItPnZhbHVlKTsKKyAgICBpZiAoaXRlci0+dmFsdWUgPiAwKQogICAgICAgICByZXR1cm47
CiAKICAgICBtX3Njb3BpbmdMZXZlbHMucmVtb3ZlKGl0ZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5j
cHAKaW5kZXggNjdlZDkyMzEzMDVlOGFlNjRlZjllMzdmODE0OTk4ODdiYmQzNjU2Yy4uYTkyNmUw
MjJiZjU5NGU5MGYzZTAyYmZiMjlhODc3MzFkNzU5NzkwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQu
Y3BwCkBAIC0yNzM0LDcgKzI3MzQsNyBAQCBjb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hl
ZXQ+ID4qIERvY3VtZW50OjpwYWdlR3JvdXBVc2VyU2hlZXRzKCkgY29uc3QKIAogICAgIFVzZXJT
dHlsZVNoZWV0TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBzaGVldHNNYXAtPmVuZCgpOwogICAg
IGZvciAoVXNlclN0eWxlU2hlZXRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gc2hlZXRzTWFwLT5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgY29uc3QgVXNlclN0eWxlU2hlZXRW
ZWN0b3IqIHNoZWV0cyA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIGNvbnN0IFVzZXJTdHls
ZVNoZWV0VmVjdG9yKiBzaGVldHMgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBzaGVldHMtPnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBjb25z
dCBVc2VyU3R5bGVTaGVldCogc2hlZXQgPSBzaGVldHMtPmF0KGkpLmdldCgpOwogICAgICAgICAg
ICAgaWYgKHNoZWV0LT5pbmplY3RlZEZyYW1lcygpID09IEluamVjdEluVG9wRnJhbWVPbmx5ICYm
IG93bmVyRWxlbWVudCgpKQpAQCAtNDUzMCw3ICs0NTMwLDcgQEAgSFRNTEFsbENvbGxlY3Rpb24q
IERvY3VtZW50OjphbGwoKQogCiBIVE1MQ29sbGVjdGlvbiogRG9jdW1lbnQ6OndpbmRvd05hbWVk
SXRlbXMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKQogewotICAgIE93blB0cjxIVE1MTmFtZUNv
bGxlY3Rpb24+JiBjb2xsZWN0aW9uID0gbV93aW5kb3dOYW1lZEl0ZW1Db2xsZWN0aW9ucy5hZGQo
bmFtZS5pbXBsKCksIG51bGxwdHIpLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgT3duUHRyPEhUTUxO
YW1lQ29sbGVjdGlvbj4mIGNvbGxlY3Rpb24gPSBtX3dpbmRvd05hbWVkSXRlbUNvbGxlY3Rpb25z
LmFkZChuYW1lLmltcGwoKSwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghY29s
bGVjdGlvbikKICAgICAgICAgY29sbGVjdGlvbiA9IEhUTUxOYW1lQ29sbGVjdGlvbjo6Y3JlYXRl
KHRoaXMsIFdpbmRvd05hbWVkSXRlbXMsIG5hbWUpOwogICAgIHJldHVybiBjb2xsZWN0aW9uLmdl
dCgpOwpAQCAtNDUzOCw3ICs0NTM4LDcgQEAgSFRNTENvbGxlY3Rpb24qIERvY3VtZW50Ojp3aW5k
b3dOYW1lZEl0ZW1zKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkKIAogSFRNTENvbGxlY3Rpb24q
IERvY3VtZW50Ojpkb2N1bWVudE5hbWVkSXRlbXMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKQog
ewotICAgIE93blB0cjxIVE1MTmFtZUNvbGxlY3Rpb24+JiBjb2xsZWN0aW9uID0gbV9kb2N1bWVu
dE5hbWVkSXRlbUNvbGxlY3Rpb25zLmFkZChuYW1lLmltcGwoKSwgbnVsbHB0cikuaXRlcmF0b3It
PnNlY29uZDsKKyAgICBPd25QdHI8SFRNTE5hbWVDb2xsZWN0aW9uPiYgY29sbGVjdGlvbiA9IG1f
ZG9jdW1lbnROYW1lZEl0ZW1Db2xsZWN0aW9ucy5hZGQobmFtZS5pbXBsKCksIG51bGxwdHIpLml0
ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoIWNvbGxlY3Rpb24pCiAgICAgICAgIGNvbGxlY3Rpb24g
PSBIVE1MTmFtZUNvbGxlY3Rpb246OmNyZWF0ZSh0aGlzLCBEb2N1bWVudE5hbWVkSXRlbXMsIG5h
bWUpOwogICAgIHJldHVybiBjb2xsZWN0aW9uLmdldCgpOwpAQCAtNDYzMyw3ICs0NjMzLDcgQEAg
dm9pZCBEb2N1bWVudDo6c2V0U3RhdGVGb3JOZXdGb3JtRWxlbWVudHMoY29uc3QgVmVjdG9yPFN0
cmluZz4mIHN0YXRlVmVjdG9yKQogICAgICAgICBGb3JtRWxlbWVudEtleSBrZXkoYS5pbXBsKCks
IGIuaW1wbCgpKTsKICAgICAgICAgSXRlcmF0b3IgaXQgPSBtX3N0YXRlRm9yTmV3Rm9ybUVsZW1l
bnRzLmZpbmQoa2V5KTsKICAgICAgICAgaWYgKGl0ICE9IG1fc3RhdGVGb3JOZXdGb3JtRWxlbWVu
dHMuZW5kKCkpCi0gICAgICAgICAgICBpdC0+c2Vjb25kLmFwcGVuZChjKTsKKyAgICAgICAgICAg
IGl0LT52YWx1ZS5hcHBlbmQoYyk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgVmVjdG9y
PFN0cmluZz4gdigxKTsKICAgICAgICAgICAgIHZbMF0gPSBjOwpAQCAtNDY1MywxMCArNDY1Mywx
MCBAQCBib29sIERvY3VtZW50Ojp0YWtlU3RhdGVGb3JGb3JtRWxlbWVudChBdG9taWNTdHJpbmdJ
bXBsKiBuYW1lLCBBdG9taWNTdHJpbmdJbXBsKgogICAgIEl0ZXJhdG9yIGl0ID0gbV9zdGF0ZUZv
ck5ld0Zvcm1FbGVtZW50cy5maW5kKEZvcm1FbGVtZW50S2V5KG5hbWUsIHR5cGUpKTsKICAgICBp
ZiAoaXQgPT0gbV9zdGF0ZUZvck5ld0Zvcm1FbGVtZW50cy5lbmQoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIEFTU0VSVChpdC0+c2Vjb25kLnNpemUoKSk7Ci0gICAgc3RhdGUgPSBpdC0+
c2Vjb25kLmxhc3QoKTsKLSAgICBpZiAoaXQtPnNlY29uZC5zaXplKCkgPiAxKQotICAgICAgICBp
dC0+c2Vjb25kLnJlbW92ZUxhc3QoKTsKKyAgICBBU1NFUlQoaXQtPnZhbHVlLnNpemUoKSk7Cisg
ICAgc3RhdGUgPSBpdC0+dmFsdWUubGFzdCgpOworICAgIGlmIChpdC0+dmFsdWUuc2l6ZSgpID4g
MSkKKyAgICAgICAgaXQtPnZhbHVlLnJlbW92ZUxhc3QoKTsKICAgICBlbHNlCiAgICAgICAgIG1f
c3RhdGVGb3JOZXdGb3JtRWxlbWVudHMucmVtb3ZlKGl0KTsKICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTQ5MzEsNyArNDkzMSw3IEBAIENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIERvY3VtZW50OjpnZXRD
U1NDYW52YXNDb250ZXh0KGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QKIAogSFRNTENhbnZhc0Vs
ZW1lbnQqIERvY3VtZW50OjpnZXRDU1NDYW52YXNFbGVtZW50KGNvbnN0IFN0cmluZyYgbmFtZSkK
IHsKLSAgICBSZWZQdHI8SFRNTENhbnZhc0VsZW1lbnQ+JiBlbGVtZW50ID0gbV9jc3NDYW52YXNF
bGVtZW50cy5hZGQobmFtZSwgMCkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBSZWZQdHI8SFRNTENh
bnZhc0VsZW1lbnQ+JiBlbGVtZW50ID0gbV9jc3NDYW52YXNFbGVtZW50cy5hZGQobmFtZSwgMCku
aXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghZWxlbWVudCkKICAgICAgICAgZWxlbWVudCA9IEhU
TUxDYW52YXNFbGVtZW50OjpjcmVhdGUodGhpcyk7CiAgICAgcmV0dXJuIGVsZW1lbnQuZ2V0KCk7
CkBAIC01NzM2LDEwICs1NzM2LDEwIEBAIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IERvY3VtZW50Ojpn
ZXRJdGVtcyhjb25zdCBTdHJpbmcmIHR5cGVOYW1lcykKIAogICAgIE5vZGVMaXN0c05vZGVEYXRh
OjpNaWNyb0RhdGFJdGVtTGlzdENhY2hlOjpBZGRSZXN1bHQgcmVzdWx0ID0gbm9kZUxpc3RzLT5t
X21pY3JvRGF0YUl0ZW1MaXN0Q2FjaGUuYWRkKGxvY2FsVHlwZU5hbWVzLCAwKTsKICAgICBpZiAo
IXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxOb2RlTGlzdD4o
cmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOworICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxOb2Rl
TGlzdD4ocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CiAKICAgICBSZWZQdHI8TWljcm9EYXRhSXRl
bUxpc3Q+IGxpc3QgPSBNaWNyb0RhdGFJdGVtTGlzdDo6Y3JlYXRlKHRoaXMsIHR5cGVOYW1lcyk7
Ci0gICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBsaXN0LmdldCgpOworICAgIHJlc3VsdC5p
dGVyYXRvci0+dmFsdWUgPSBsaXN0LmdldCgpOwogICAgIHJldHVybiBsaXN0LnJlbGVhc2UoKTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJv
bGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNw
cAppbmRleCBjMjUwMjNmMmI4ZjE4NzNjNDBkYTZhN2M4MDRjNTM4MGQxNjJmZjcxLi5mYmQzZjE4
ZjQyYWU1MjNkYTNmNGRhNzZlNWEwMzA2ZTkwMTI2NWE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcApAQCAtMzAxLDcgKzMwMSw3IEBAIERv
Y3VtZW50TWFya2VyKiBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Om1hcmtlckNvbnRhaW5pbmdQ
b2ludChjb25zdCBMYXlvdXRQb2luCiAgICAgTWFya2VyTWFwOjppdGVyYXRvciBlbmQgPSBtX21h
cmtlcnMuZW5kKCk7CiAgICAgZm9yIChNYXJrZXJNYXA6Oml0ZXJhdG9yIG5vZGVJdGVyYXRvciA9
IG1fbWFya2Vycy5iZWdpbigpOyBub2RlSXRlcmF0b3IgIT0gZW5kOyArK25vZGVJdGVyYXRvcikg
ewogICAgICAgICAvLyBpbm5lciBsb29wOyBwcm9jZXNzIGVhY2ggbWFya2VyIGluIHRoaXMgbm9k
ZQotICAgICAgICBNYXJrZXJMaXN0KiBsaXN0ID0gbm9kZUl0ZXJhdG9yLT5zZWNvbmQ7CisgICAg
ICAgIE1hcmtlckxpc3QqIGxpc3QgPSBub2RlSXRlcmF0b3ItPnZhbHVlOwogICAgICAgICB1bnNp
Z25lZCBtYXJrZXJDb3VudCA9IGxpc3QtPnNpemUoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBt
YXJrZXJJbmRleCA9IDA7IG1hcmtlckluZGV4IDwgbWFya2VyQ291bnQ7ICsrbWFya2VySW5kZXgp
IHsKICAgICAgICAgICAgIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXImIG1hcmtlciA9IGxpc3QtPmF0
KG1hcmtlckluZGV4KTsKQEAgLTM4OSw3ICszODksNyBAQCBWZWN0b3I8SW50UmVjdD4gRG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyOjpyZW5kZXJlZFJlY3RzRm9yTWFya2VycyhEb2N1bWVudE1hcmtl
cgogICAgIE1hcmtlck1hcDo6aXRlcmF0b3IgZW5kID0gbV9tYXJrZXJzLmVuZCgpOwogICAgIGZv
ciAoTWFya2VyTWFwOjppdGVyYXRvciBub2RlSXRlcmF0b3IgPSBtX21hcmtlcnMuYmVnaW4oKTsg
bm9kZUl0ZXJhdG9yICE9IGVuZDsgKytub2RlSXRlcmF0b3IpIHsKICAgICAgICAgLy8gaW5uZXIg
bG9vcDsgcHJvY2VzcyBlYWNoIG1hcmtlciBpbiB0aGlzIG5vZGUKLSAgICAgICAgTWFya2VyTGlz
dCogbGlzdCA9IG5vZGVJdGVyYXRvci0+c2Vjb25kOworICAgICAgICBNYXJrZXJMaXN0KiBsaXN0
ID0gbm9kZUl0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgdW5zaWduZWQgbWFya2VyQ291bnQgPSBs
aXN0LT5zaXplKCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgbWFya2VySW5kZXggPSAwOyBtYXJr
ZXJJbmRleCA8IG1hcmtlckNvdW50OyArK21hcmtlckluZGV4KSB7CiAgICAgICAgICAgICBjb25z
dCBSZW5kZXJlZERvY3VtZW50TWFya2VyJiBtYXJrZXIgPSBsaXN0LT5hdChtYXJrZXJJbmRleCk7
CkBAIC00MTYsNyArNDE2LDcgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbW92
ZU1hcmtlcnMoTm9kZSogbm9kZSwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclQKICAgICAKICAgICBN
YXJrZXJNYXA6Oml0ZXJhdG9yIGl0ZXJhdG9yID0gbV9tYXJrZXJzLmZpbmQobm9kZSk7CiAgICAg
aWYgKGl0ZXJhdG9yICE9IG1fbWFya2Vycy5lbmQoKSkKLSAgICAgICAgcmVtb3ZlTWFya2Vyc0Zy
b21MaXN0KG5vZGUsIGl0ZXJhdG9yLT5zZWNvbmQsIG1hcmtlclR5cGVzKTsKKyAgICAgICAgcmVt
b3ZlTWFya2Vyc0Zyb21MaXN0KG5vZGUsIGl0ZXJhdG9yLT52YWx1ZSwgbWFya2VyVHlwZXMpOwog
fQogCiB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVtb3ZlTWFya2VycyhEb2N1bWVu
dE1hcmtlcjo6TWFya2VyVHlwZXMgbWFya2VyVHlwZXMpCkBAIC00MjksNyArNDI5LDcgQEAgdm9p
ZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbW92ZU1hcmtlcnMoRG9jdW1lbnRNYXJrZXI6
Ok1hcmtlclR5cGVzIG1hcmtlclQKICAgICBNYXJrZXJNYXAgbWFya2VyTWFwQ29weSA9IG1fbWFy
a2VyczsKICAgICBNYXJrZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IG1hcmtlck1hcENvcHkuZW5kKCk7
CiAgICAgZm9yIChNYXJrZXJNYXA6Oml0ZXJhdG9yIGkgPSBtYXJrZXJNYXBDb3B5LmJlZ2luKCk7
IGkgIT0gZW5kOyArK2kpCi0gICAgICAgIHJlbW92ZU1hcmtlcnNGcm9tTGlzdChpLT5maXJzdC5n
ZXQoKSwgaS0+c2Vjb25kLCBtYXJrZXJUeXBlcyk7CisgICAgICAgIHJlbW92ZU1hcmtlcnNGcm9t
TGlzdChpLT5rZXkuZ2V0KCksIGktPnZhbHVlLCBtYXJrZXJUeXBlcyk7CiAgICAgbV9wb3NzaWJs
eUV4aXN0aW5nTWFya2VyVHlwZXMucmVtb3ZlKG1hcmtlclR5cGVzKTsKIH0KIApAQCAtNDg1LDEw
ICs0ODUsMTAgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlcGFpbnRNYXJrZXJz
KERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlcyBtYXJrZXIKICAgICAvLyBvdXRlciBsb29wOiBw
cm9jZXNzIGVhY2ggbWFya2VyZWQgbm9kZSBpbiB0aGUgZG9jdW1lbnQKICAgICBNYXJrZXJNYXA6
Oml0ZXJhdG9yIGVuZCA9IG1fbWFya2Vycy5lbmQoKTsKICAgICBmb3IgKE1hcmtlck1hcDo6aXRl
cmF0b3IgaSA9IG1fbWFya2Vycy5iZWdpbigpOyBpICE9IGVuZDsgKytpKSB7Ci0gICAgICAgIE5v
ZGUqIG5vZGUgPSBpLT5maXJzdC5nZXQoKTsKKyAgICAgICAgTm9kZSogbm9kZSA9IGktPmtleS5n
ZXQoKTsKIAogICAgICAgICAvLyBpbm5lciBsb29wOiBwcm9jZXNzIGVhY2ggbWFya2VyIGluIHRo
ZSBjdXJyZW50IG5vZGUKLSAgICAgICAgTWFya2VyTGlzdCogbGlzdCA9IGktPnNlY29uZDsKKyAg
ICAgICAgTWFya2VyTGlzdCogbGlzdCA9IGktPnZhbHVlOwogICAgICAgICBib29sIG5vZGVOZWVk
c1JlcGFpbnQgPSBmYWxzZTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgIT0gbGlzdC0+
c2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIERvY3VtZW50TWFya2VyIG1hcmtlciA9IGxpc3Qt
PmF0KGkpOwpAQCAtNTE2LDcgKzUxNiw3IEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
OjppbnZhbGlkYXRlUmVuZGVyZWRSZWN0c0Zvck1hcmtlcnNJblJlY3QoY29uc3QgTGF5CiAgICAg
Zm9yIChNYXJrZXJNYXA6Oml0ZXJhdG9yIGkgPSBtX21hcmtlcnMuYmVnaW4oKTsgaSAhPSBlbmQ7
ICsraSkgewogCiAgICAgICAgIC8vIGlubmVyIGxvb3A6IHByb2Nlc3MgZWFjaCByZWN0IGluIHRo
ZSBjdXJyZW50IG5vZGUKLSAgICAgICAgTWFya2VyTGlzdCogbGlzdCA9IGktPnNlY29uZDsKKyAg
ICAgICAgTWFya2VyTGlzdCogbGlzdCA9IGktPnZhbHVlOwogICAgICAgICBmb3IgKHNpemVfdCBs
aXN0SW5kZXggPSAwOyBsaXN0SW5kZXggPCBsaXN0LT5zaXplKCk7ICsrbGlzdEluZGV4KQogICAg
ICAgICAgICAgbGlzdC0+YXQobGlzdEluZGV4KS5pbnZhbGlkYXRlKHIpOwogICAgIH0KQEAgLTY2
NSw5ICs2NjUsOSBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6c2hvd01hcmtlcnMo
KSBjb25zdAogICAgIGZwcmludGYoc3RkZXJyLCAiJWQgbm9kZXMgaGF2ZSBtYXJrZXJzOlxuIiwg
bV9tYXJrZXJzLnNpemUoKSk7CiAgICAgTWFya2VyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBt
X21hcmtlcnMuZW5kKCk7CiAgICAgZm9yIChNYXJrZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIG5vZGVJ
dGVyYXRvciA9IG1fbWFya2Vycy5iZWdpbigpOyBub2RlSXRlcmF0b3IgIT0gZW5kOyArK25vZGVJ
dGVyYXRvcikgewotICAgICAgICBOb2RlKiBub2RlID0gbm9kZUl0ZXJhdG9yLT5maXJzdC5nZXQo
KTsKKyAgICAgICAgTm9kZSogbm9kZSA9IG5vZGVJdGVyYXRvci0+a2V5LmdldCgpOwogICAgICAg
ICBmcHJpbnRmKHN0ZGVyciwgIiVwIiwgbm9kZSk7Ci0gICAgICAgIE1hcmtlckxpc3QqIGxpc3Qg
PSBub2RlSXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgTWFya2VyTGlzdCogbGlzdCA9IG5vZGVJ
dGVyYXRvci0+dmFsdWU7CiAgICAgICAgIGZvciAodW5zaWduZWQgbWFya2VySW5kZXggPSAwOyBt
YXJrZXJJbmRleCA8IGxpc3QtPnNpemUoKTsgKyttYXJrZXJJbmRleCkgewogICAgICAgICAgICAg
Y29uc3QgRG9jdW1lbnRNYXJrZXImIG1hcmtlciA9IGxpc3QtPmF0KG1hcmtlckluZGV4KTsKICAg
ICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiICVkOlslZDolZF0oJWQpIiwgbWFya2VyLnR5cGUo
KSwgbWFya2VyLnN0YXJ0T2Zmc2V0KCksIG1hcmtlci5lbmRPZmZzZXQoKSwgbWFya2VyLmFjdGl2
ZU1hdGNoKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50T3JkZXJl
ZE1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRPcmRlcmVkTWFwLmNwcAppbmRl
eCAwODJhYTA3NDBhNzFjY2RmNTBlMWQ0MmQyM2QzMTdlNjNhZjJmNGRhLi4xMjk3ZTUxMDJmYjRl
NzljZTNkYjExMjM1NzAyMWUzZGQwNTU0YTUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnRPcmRlcmVkTWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnRPcmRlcmVkTWFwLmNwcApAQCAtOTgsNyArOTgsNyBAQCB2b2lkIERvY3VtZW50T3JkZXJlZE1h
cDo6cmVtb3ZlKEF0b21pY1N0cmluZ0ltcGwqIGtleSwgRWxlbWVudCogZWxlbWVudCkKIAogICAg
IG1fbWFwLmNoZWNrQ29uc2lzdGVuY3koKTsKICAgICBNYXA6Oml0ZXJhdG9yIGNhY2hlZEl0ZW0g
PSBtX21hcC5maW5kKGtleSk7Ci0gICAgaWYgKGNhY2hlZEl0ZW0gIT0gbV9tYXAuZW5kKCkgJiYg
Y2FjaGVkSXRlbS0+c2Vjb25kID09IGVsZW1lbnQpCisgICAgaWYgKGNhY2hlZEl0ZW0gIT0gbV9t
YXAuZW5kKCkgJiYgY2FjaGVkSXRlbS0+dmFsdWUgPT0gZWxlbWVudCkKICAgICAgICAgbV9tYXAu
cmVtb3ZlKGNhY2hlZEl0ZW0pOwogICAgIGVsc2UKICAgICAgICAgbV9kdXBsaWNhdGVDb3VudHMu
cmVtb3ZlKGtleSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRMaXN0ZW5l
ck1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRMaXN0ZW5lck1hcC5jcHAKaW5kZXgg
YzFmZDRkN2M5NTdhNjRiZmY3ODhmOTAxZTYxZGUwMWNhMDkyMjc3ZS4uYWY4YzQ4YWVkZTU1MTM2
Zjc0ZmUxODQ3ODFkMDUyOGI0MWQ3Y2NhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L0V2ZW50TGlzdGVuZXJNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudExpc3Rl
bmVyTWFwLmNwcApAQCAtMTAyLDcgKzEwMiw3IEBAIFZlY3RvcjxBdG9taWNTdHJpbmc+IEV2ZW50
TGlzdGVuZXJNYXA6OmV2ZW50VHlwZXMoKSBjb25zdAogICAgICAgICBFdmVudExpc3RlbmVySGFz
aE1hcDo6aXRlcmF0b3IgaXQgPSBtX2hhc2hNYXAtPmJlZ2luKCk7CiAgICAgICAgIEV2ZW50TGlz
dGVuZXJIYXNoTWFwOjppdGVyYXRvciBlbmQgPSBtX2hhc2hNYXAtPmVuZCgpOwogICAgICAgICBm
b3IgKDsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgdHlwZXMuYXBwZW5kKGl0LT5maXJz
dCk7CisgICAgICAgICAgICB0eXBlcy5hcHBlbmQoaXQtPmtleSk7CiAgICAgfSBlbHNlIGlmICht
X3NpbmdsZUV2ZW50TGlzdGVuZXJWZWN0b3IpCiAgICAgICAgIHR5cGVzLmFwcGVuZChtX3Npbmds
ZUV2ZW50TGlzdGVuZXJUeXBlKTsKIApAQCAtMTM2LDkgKzEzNiw5IEBAIGJvb2wgRXZlbnRMaXN0
ZW5lck1hcDo6YWRkKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2
ZW50TGlzdGVuCiAgICAgaWYgKG1faGFzaE1hcCkgewogICAgICAgICBFdmVudExpc3RlbmVySGFz
aE1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1faGFzaE1hcC0+YWRkKGV2ZW50VHlwZSwgbnVsbHB0
cik7CiAgICAgICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgIHJlc3VsdC5p
dGVyYXRvci0+c2Vjb25kID0gYWRvcHRQdHIobmV3IEV2ZW50TGlzdGVuZXJWZWN0b3IpOworICAg
ICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGFkb3B0UHRyKG5ldyBFdmVudExpc3Rl
bmVyVmVjdG9yKTsKIAotICAgICAgICByZXR1cm4gYWRkTGlzdGVuZXJUb1ZlY3RvcihyZXN1bHQu
aXRlcmF0b3ItPnNlY29uZC5nZXQoKSwgbGlzdGVuZXIsIHVzZUNhcHR1cmUpOworICAgICAgICBy
ZXR1cm4gYWRkTGlzdGVuZXJUb1ZlY3RvcihyZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpLCBs
aXN0ZW5lciwgdXNlQ2FwdHVyZSk7CiAgICAgfQogCiAgICAgaWYgKCFtX3NpbmdsZUV2ZW50TGlz
dGVuZXJWZWN0b3IpIHsKQEAgLTE3OSw4ICsxNzksOCBAQCBib29sIEV2ZW50TGlzdGVuZXJNYXA6
OnJlbW92ZShjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciogbGlz
dAogICAgIGlmIChpdCA9PSBtX2hhc2hNYXAtPmVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBib29sIHdhc1JlbW92ZWQgPSByZW1vdmVMaXN0ZW5lckZyb21WZWN0b3IoaXQtPnNl
Y29uZC5nZXQoKSwgbGlzdGVuZXIsIHVzZUNhcHR1cmUsIGluZGV4T2ZSZW1vdmVkTGlzdGVuZXIp
OwotICAgIGlmIChpdC0+c2Vjb25kLT5pc0VtcHR5KCkpCisgICAgYm9vbCB3YXNSZW1vdmVkID0g
cmVtb3ZlTGlzdGVuZXJGcm9tVmVjdG9yKGl0LT52YWx1ZS5nZXQoKSwgbGlzdGVuZXIsIHVzZUNh
cHR1cmUsIGluZGV4T2ZSZW1vdmVkTGlzdGVuZXIpOworICAgIGlmIChpdC0+dmFsdWUtPmlzRW1w
dHkoKSkKICAgICAgICAgbV9oYXNoTWFwLT5yZW1vdmUoaXQpOwogICAgIHJldHVybiB3YXNSZW1v
dmVkOwogfQpAQCAtMTkzLDcgKzE5Myw3IEBAIEV2ZW50TGlzdGVuZXJWZWN0b3IqIEV2ZW50TGlz
dGVuZXJNYXA6OmZpbmQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUpCiAgICAgICAgIEV2
ZW50TGlzdGVuZXJIYXNoTWFwOjppdGVyYXRvciBpdCA9IG1faGFzaE1hcC0+ZmluZChldmVudFR5
cGUpOwogICAgICAgICBpZiAoaXQgPT0gbV9oYXNoTWFwLT5lbmQoKSkKICAgICAgICAgICAgIHJl
dHVybiAwOwotICAgICAgICByZXR1cm4gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgcmV0dXJu
IGl0LT52YWx1ZS5nZXQoKTsKICAgICB9CiAKICAgICBpZiAobV9zaW5nbGVFdmVudExpc3RlbmVy
VHlwZSA9PSBldmVudFR5cGUpCkBAIC0yMjcsNyArMjI3LDcgQEAgdm9pZCBFdmVudExpc3RlbmVy
TWFwOjpyZW1vdmVGaXJzdEV2ZW50TGlzdGVuZXJDcmVhdGVkRnJvbU1hcmt1cChjb25zdCBBdG9t
aWNTdHIKICAgICAgICAgRXZlbnRMaXN0ZW5lckhhc2hNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IG1f
aGFzaE1hcC0+ZmluZChldmVudFR5cGUpOwogICAgICAgICBBU1NFUlQocmVzdWx0ICE9IG1faGFz
aE1hcC0+ZW5kKCkpOwogCi0gICAgICAgIEV2ZW50TGlzdGVuZXJWZWN0b3IqIGxpc3RlbmVyVmVj
dG9yID0gcmVzdWx0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIEV2ZW50TGlzdGVuZXJWZWN0b3Iq
IGxpc3RlbmVyVmVjdG9yID0gcmVzdWx0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgQVNTRVJUKGxp
c3RlbmVyVmVjdG9yKTsKIAogICAgICAgICByZW1vdmVGaXJzdExpc3RlbmVyQ3JlYXRlZEZyb21N
YXJrdXAobGlzdGVuZXJWZWN0b3IpOwpAQCAtMjY1LDcgKzI2NSw3IEBAIHZvaWQgRXZlbnRMaXN0
ZW5lck1hcDo6Y29weUV2ZW50TGlzdGVuZXJzTm90Q3JlYXRlZEZyb21NYXJrdXBUb1RhcmdldChF
dmVudFRhcmdlCiAgICAgaWYgKG1faGFzaE1hcCkgewogICAgICAgICBFdmVudExpc3RlbmVySGFz
aE1hcDo6aXRlcmF0b3IgZW5kID0gbV9oYXNoTWFwLT5lbmQoKTsKICAgICAgICAgZm9yIChFdmVu
dExpc3RlbmVySGFzaE1hcDo6aXRlcmF0b3IgaXQgPSBtX2hhc2hNYXAtPmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkKLSAgICAgICAgICAgIGNvcHlMaXN0ZW5lcnNOb3RDcmVhdGVkRnJvbU1hcmt1
cFRvVGFyZ2V0KGl0LT5maXJzdCwgaXQtPnNlY29uZC5nZXQoKSwgdGFyZ2V0KTsKKyAgICAgICAg
ICAgIGNvcHlMaXN0ZW5lcnNOb3RDcmVhdGVkRnJvbU1hcmt1cFRvVGFyZ2V0KGl0LT5rZXksIGl0
LT52YWx1ZS5nZXQoKSwgdGFyZ2V0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMzI1
LDcgKzMyNSw3IEBAIEV2ZW50TGlzdGVuZXIqIEV2ZW50TGlzdGVuZXJJdGVyYXRvcjo6bmV4dExp
c3RlbmVyKCkKIAogICAgIGlmIChtX21hcC0+bV9oYXNoTWFwKSB7CiAgICAgICAgIGZvciAoOyBt
X21hcEl0ZXJhdG9yICE9IG1fbWFwRW5kOyArK21fbWFwSXRlcmF0b3IpIHsKLSAgICAgICAgICAg
IEV2ZW50TGlzdGVuZXJWZWN0b3ImIGxpc3RlbmVycyA9ICptX21hcEl0ZXJhdG9yLT5zZWNvbmQ7
CisgICAgICAgICAgICBFdmVudExpc3RlbmVyVmVjdG9yJiBsaXN0ZW5lcnMgPSAqbV9tYXBJdGVy
YXRvci0+dmFsdWU7CiAgICAgICAgICAgICBpZiAobV9pbmRleCA8IGxpc3RlbmVycy5zaXplKCkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGxpc3RlbmVyc1ttX2luZGV4KytdLmxpc3RlbmVyLmdl
dCgpOwogICAgICAgICAgICAgbV9pbmRleCA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vTXV0YXRpb25PYnNlcnZlckludGVyZXN0R3JvdXAuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZG9tL011dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3VwLmNwcAppbmRleCA2OTk4NzUyY2Q1YjAw
OTFlYWQ4YmRiMGMwMWI5NTU3OGI2ZThjNWU0Li44YTU5YWJhZmU1Y2JkZmY1M2EzYjc3ZjJjMmQ4
ODk3NWU2NzAxZjdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25PYnNl
cnZlckludGVyZXN0R3JvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvbk9i
c2VydmVySW50ZXJlc3RHcm91cC5jcHAKQEAgLTYxLDcgKzYxLDcgQEAgTXV0YXRpb25PYnNlcnZl
ckludGVyZXN0R3JvdXA6Ok11dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3VwKEhhc2hNYXA8V2Vi
S2l0TXV0YXQKIGJvb2wgTXV0YXRpb25PYnNlcnZlckludGVyZXN0R3JvdXA6OmlzT2xkVmFsdWVS
ZXF1ZXN0ZWQoKQogewogICAgIGZvciAoSGFzaE1hcDxXZWJLaXRNdXRhdGlvbk9ic2VydmVyKiwg
TXV0YXRpb25SZWNvcmREZWxpdmVyeU9wdGlvbnM+OjppdGVyYXRvciBpdGVyID0gbV9vYnNlcnZl
cnMuYmVnaW4oKTsgaXRlciAhPSBtX29ic2VydmVycy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAg
IGlmIChoYXNPbGRWYWx1ZShpdGVyLT5zZWNvbmQpKQorICAgICAgICBpZiAoaGFzT2xkVmFsdWUo
aXRlci0+dmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVy
biBmYWxzZTsKQEAgLTcyLDggKzcyLDggQEAgdm9pZCBNdXRhdGlvbk9ic2VydmVySW50ZXJlc3RH
cm91cDo6ZW5xdWV1ZU11dGF0aW9uUmVjb3JkKFBhc3NSZWZQdHI8TXV0YXRpb25SZWMKICAgICBS
ZWZQdHI8TXV0YXRpb25SZWNvcmQ+IG11dGF0aW9uID0gcHJwTXV0YXRpb247CiAgICAgUmVmUHRy
PE11dGF0aW9uUmVjb3JkPiBtdXRhdGlvbldpdGhOdWxsT2xkVmFsdWU7CiAgICAgZm9yIChIYXNo
TWFwPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIqLCBNdXRhdGlvblJlY29yZERlbGl2ZXJ5T3B0aW9u
cz46Oml0ZXJhdG9yIGl0ZXIgPSBtX29ic2VydmVycy5iZWdpbigpOyBpdGVyICE9IG1fb2JzZXJ2
ZXJzLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgV2ViS2l0TXV0YXRpb25PYnNlcnZlciogb2Jz
ZXJ2ZXIgPSBpdGVyLT5maXJzdDsKLSAgICAgICAgaWYgKGhhc09sZFZhbHVlKGl0ZXItPnNlY29u
ZCkpIHsKKyAgICAgICAgV2ViS2l0TXV0YXRpb25PYnNlcnZlciogb2JzZXJ2ZXIgPSBpdGVyLT5r
ZXk7CisgICAgICAgIGlmIChoYXNPbGRWYWx1ZShpdGVyLT52YWx1ZSkpIHsKICAgICAgICAgICAg
IG9ic2VydmVyLT5lbnF1ZXVlTXV0YXRpb25SZWNvcmQobXV0YXRpb24pOwogICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2Rl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAppbmRleCAwNDA3NTI3YjIwZDk5NzBm
MDBkNWIxMjQ3YTc5YjVlYzVhYWFkZmE1Li45ODkxMWYxMDE1OTI3ZjdmMDE0ZmRkODc2YTExZWQw
N2VmYWY1OTYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCkBAIC0xODcsNyArMTg3LDcgQEAgdm9pZCBOb2Rl
OjpkdW1wU3RhdGlzdGljcygpCiAgICAgICAgICAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IHN0
YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKTsKICAgICAgICAgICAgICAgICBIYXNoTWFwPFN0cmlu
Zywgc2l6ZV90Pjo6QWRkUmVzdWx0IHJlc3VsdCA9IHBlclRhZ0NvdW50LmFkZChlbGVtZW50LT50
YWdOYW1lKCksIDEpOwogICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0g
ICAgICAgICAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKys7CisgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUrKzsKIAogICAgICAgICAgICAgICAgIGlm
IChFbGVtZW50QXR0cmlidXRlRGF0YSogYXR0cmlidXRlRGF0YSA9IGVsZW1lbnQtPmF0dHJpYnV0
ZURhdGEoKSkgewogICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzICs9IGF0dHJpYnV0ZURh
dGEtPmxlbmd0aCgpOwpAQCAtMjc1LDcgKzI3NSw3IEBAIHZvaWQgTm9kZTo6ZHVtcFN0YXRpc3Rp
Y3MoKQogCiAgICAgcHJpbnRmKCJFbGVtZW50IHRhZyBuYW1lIGRpc3RpYnV0aW9uOlxuIik7CiAg
ICAgZm9yIChIYXNoTWFwPFN0cmluZywgc2l6ZV90Pjo6aXRlcmF0b3IgaXQgPSBwZXJUYWdDb3Vu
dC5iZWdpbigpOyBpdCAhPSBwZXJUYWdDb3VudC5lbmQoKTsgKytpdCkKLSAgICAgICAgcHJpbnRm
KCIgIE51bWJlciBvZiA8JXM+IHRhZ3M6ICV6dVxuIiwgaXQtPmZpcnN0LnV0ZjgoKS5kYXRhKCks
IGl0LT5zZWNvbmQpOworICAgICAgICBwcmludGYoIiAgTnVtYmVyIG9mIDwlcz4gdGFnczogJXp1
XG4iLCBpdC0+a2V5LnV0ZjgoKS5kYXRhKCksIGl0LT52YWx1ZSk7CiAKICAgICBwcmludGYoIkF0
dHJpYnV0ZXM6XG4iKTsKICAgICBwcmludGYoIiAgTnVtYmVyIG9mIEF0dHJpYnV0ZXMgKG5vbi1O
b2RlIGFuZCBOb2RlKTogJXp1IFslenVdXG4iLCBhdHRyaWJ1dGVzLCBzaXplb2YoQXR0cmlidXRl
KSk7CkBAIC00OTYsNyArNDk2LDcgQEAgdm9pZCBOb2RlOjpjbGVhclJhcmVEYXRhKCkKICAgICBO
b2RlUmFyZURhdGE6Ok5vZGVSYXJlRGF0YU1hcCYgZGF0YU1hcCA9IE5vZGVSYXJlRGF0YTo6cmFy
ZURhdGFNYXAoKTsKICAgICBOb2RlUmFyZURhdGE6Ok5vZGVSYXJlRGF0YU1hcDo6aXRlcmF0b3Ig
aXQgPSBkYXRhTWFwLmZpbmQodGhpcyk7CiAgICAgQVNTRVJUKGl0ICE9IGRhdGFNYXAuZW5kKCkp
OwotICAgIGRlbGV0ZSBpdC0+c2Vjb25kOworICAgIGRlbGV0ZSBpdC0+dmFsdWU7CiAgICAgZGF0
YU1hcC5yZW1vdmUoaXQpOwogICAgIGNsZWFyRmxhZyhIYXNSYXJlRGF0YUZsYWcpOwogfQpAQCAt
MTYxNCwxMCArMTYxNCwxMCBAQCBQYXNzUmVmUHRyPE5vZGVMaXN0PiBOb2RlOjpnZXRFbGVtZW50
c0J5VGFnTmFtZShjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSkKIAogICAgIE5vZGVMaXN0
c05vZGVEYXRhOjpUYWdOb2RlTGlzdENhY2hlOjpBZGRSZXN1bHQgcmVzdWx0ID0gZW5zdXJlUmFy
ZURhdGEoKS0+ZW5zdXJlTm9kZUxpc3RzKHRoaXMpLT5tX3RhZ05vZGVMaXN0Q2FjaGUuYWRkKGxv
Y2FsTmFtZUF0b20sIDApOwogICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJl
dHVybiBQYXNzUmVmUHRyPFRhZ05vZGVMaXN0PihyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7Cisg
ICAgICAgIHJldHVybiBQYXNzUmVmUHRyPFRhZ05vZGVMaXN0PihyZXN1bHQuaXRlcmF0b3ItPnZh
bHVlKTsKIAogICAgIFJlZlB0cjxUYWdOb2RlTGlzdD4gbGlzdCA9IFRhZ05vZGVMaXN0OjpjcmVh
dGUodGhpcywgc3RhckF0b20sIGxvY2FsTmFtZUF0b20pOwotICAgIHJlc3VsdC5pdGVyYXRvci0+
c2Vjb25kID0gbGlzdC5nZXQoKTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gbGlzdC5n
ZXQoKTsKICAgICByZXR1cm4gbGlzdC5yZWxlYXNlKCk7ICAgCiB9CiAKQEAgLTE2MzgsMTAgKzE2
MzgsMTAgQEAgUGFzc1JlZlB0cjxOb2RlTGlzdD4gTm9kZTo6Z2V0RWxlbWVudHNCeVRhZ05hbWVO
Uyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVUKICAgICBOb2RlTGlzdHNOb2RlRGF0YTo6
VGFnTm9kZUxpc3RDYWNoZU5TOjpBZGRSZXN1bHQgcmVzdWx0CiAgICAgICAgID0gZW5zdXJlUmFy
ZURhdGEoKS0+ZW5zdXJlTm9kZUxpc3RzKHRoaXMpLT5tX3RhZ05vZGVMaXN0Q2FjaGVOUy5hZGQo
UXVhbGlmaWVkTmFtZShudWxsQXRvbSwgbG9jYWxOYW1lQXRvbSwgbmFtZXNwYWNlVVJJKS5pbXBs
KCksIDApOwogICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJldHVybiBQYXNz
UmVmUHRyPFRhZ05vZGVMaXN0PihyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7CisgICAgICAgIHJl
dHVybiBQYXNzUmVmUHRyPFRhZ05vZGVMaXN0PihyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKIAog
ICAgIFJlZlB0cjxUYWdOb2RlTGlzdD4gbGlzdCA9IFRhZ05vZGVMaXN0OjpjcmVhdGUodGhpcywg
bmFtZXNwYWNlVVJJLmlzRW1wdHkoKSA/IG51bGxBdG9tIDogbmFtZXNwYWNlVVJJLCBsb2NhbE5h
bWVBdG9tKTsKLSAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IGxpc3QuZ2V0KCk7CisgICAg
cmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGxpc3QuZ2V0KCk7CiAgICAgcmV0dXJuIGxpc3QucmVs
ZWFzZSgpOwogfQogCkBAIC0xNjQ5LDEwICsxNjQ5LDEwIEBAIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+
IE5vZGU6OmdldEVsZW1lbnRzQnlOYW1lKGNvbnN0IFN0cmluZyYgZWxlbWVudE5hbWUpCiB7CiAg
ICAgTm9kZUxpc3RzTm9kZURhdGE6Ok5hbWVOb2RlTGlzdENhY2hlOjpBZGRSZXN1bHQgcmVzdWx0
ID0gZW5zdXJlUmFyZURhdGEoKS0+ZW5zdXJlTm9kZUxpc3RzKHRoaXMpLT5tX25hbWVOb2RlTGlz
dENhY2hlLmFkZChlbGVtZW50TmFtZSwgMCk7CiAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkK
LSAgICAgICAgcmV0dXJuIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+KHJlc3VsdC5pdGVyYXRvci0+c2Vj
b25kKTsKKyAgICAgICAgcmV0dXJuIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+KHJlc3VsdC5pdGVyYXRv
ci0+dmFsdWUpOwogCiAgICAgUmVmUHRyPE5hbWVOb2RlTGlzdD4gbGlzdCA9IE5hbWVOb2RlTGlz
dDo6Y3JlYXRlKHRoaXMsIGVsZW1lbnROYW1lKTsKLSAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29u
ZCA9IGxpc3QuZ2V0KCk7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGxpc3QuZ2V0KCk7
CiAgICAgcmV0dXJuIGxpc3QucmVsZWFzZSgpOwogfQogCkBAIC0xNjYxLDEwICsxNjYxLDEwIEBA
IFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IE5vZGU6OmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY29uc3Qg
U3RyaW5nJiBjbGFzc05hbWVzKQogICAgIE5vZGVMaXN0c05vZGVEYXRhOjpDbGFzc05vZGVMaXN0
Q2FjaGU6OkFkZFJlc3VsdCByZXN1bHQKICAgICAgICAgPSBlbnN1cmVSYXJlRGF0YSgpLT5lbnN1
cmVOb2RlTGlzdHModGhpcyktPm1fY2xhc3NOb2RlTGlzdENhY2hlLmFkZChjbGFzc05hbWVzLCAw
KTsKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXR1cm4gUGFzc1JlZlB0
cjxOb2RlTGlzdD4ocmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOworICAgICAgICByZXR1cm4gUGFz
c1JlZlB0cjxOb2RlTGlzdD4ocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CiAKICAgICBSZWZQdHI8
Q2xhc3NOb2RlTGlzdD4gbGlzdCA9IENsYXNzTm9kZUxpc3Q6OmNyZWF0ZSh0aGlzLCBjbGFzc05h
bWVzKTsKLSAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IGxpc3QuZ2V0KCk7CisgICAgcmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGxpc3QuZ2V0KCk7CiAgICAgcmV0dXJuIGxpc3QucmVsZWFz
ZSgpOwogfQogCkBAIC0yMzA4LDEwICsyMzA4LDEwIEBAIHZvaWQgTm9kZUxpc3RzTm9kZURhdGE6
OmludmFsaWRhdGVDYWNoZXMoKQogewogICAgIFRhZ05vZGVMaXN0Q2FjaGU6OmNvbnN0X2l0ZXJh
dG9yIHRhZ0NhY2hlRW5kID0gbV90YWdOb2RlTGlzdENhY2hlLmVuZCgpOwogICAgIGZvciAoVGFn
Tm9kZUxpc3RDYWNoZTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RhZ05vZGVMaXN0Q2FjaGUuYmVn
aW4oKTsgaXQgIT0gdGFnQ2FjaGVFbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPmludmFs
aWRhdGVDYWNoZSgpOworICAgICAgICBpdC0+dmFsdWUtPmludmFsaWRhdGVDYWNoZSgpOwogICAg
IFRhZ05vZGVMaXN0Q2FjaGVOUzo6Y29uc3RfaXRlcmF0b3IgdGFnQ2FjaGVOU0VuZCA9IG1fdGFn
Tm9kZUxpc3RDYWNoZU5TLmVuZCgpOwogICAgIGZvciAoVGFnTm9kZUxpc3RDYWNoZU5TOjpjb25z
dF9pdGVyYXRvciBpdCA9IG1fdGFnTm9kZUxpc3RDYWNoZU5TLmJlZ2luKCk7IGl0ICE9IHRhZ0Nh
Y2hlTlNFbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPmludmFsaWRhdGVDYWNoZSgpOwor
ICAgICAgICBpdC0+dmFsdWUtPmludmFsaWRhdGVDYWNoZSgpOwogICAgIGludmFsaWRhdGVDYWNo
ZXNUaGF0RGVwZW5kT25BdHRyaWJ1dGVzKCk7CiB9CiAKQEAgLTIzMjQsMTggKzIzMjQsMTggQEAg
dm9pZCBOb2RlTGlzdHNOb2RlRGF0YTo6aW52YWxpZGF0ZUNhY2hlc1RoYXREZXBlbmRPbkF0dHJp
YnV0ZXMoKQogCiAgICAgQ2xhc3NOb2RlTGlzdENhY2hlOjppdGVyYXRvciBjbGFzc0NhY2hlRW5k
ID0gbV9jbGFzc05vZGVMaXN0Q2FjaGUuZW5kKCk7CiAgICAgZm9yIChDbGFzc05vZGVMaXN0Q2Fj
aGU6Oml0ZXJhdG9yIGl0ID0gbV9jbGFzc05vZGVMaXN0Q2FjaGUuYmVnaW4oKTsgaXQgIT0gY2xh
c3NDYWNoZUVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+aW52YWxpZGF0ZUNhY2hlKCk7
CisgICAgICAgIGl0LT52YWx1ZS0+aW52YWxpZGF0ZUNhY2hlKCk7CiAKICAgICBOYW1lTm9kZUxp
c3RDYWNoZTo6aXRlcmF0b3IgbmFtZUNhY2hlRW5kID0gbV9uYW1lTm9kZUxpc3RDYWNoZS5lbmQo
KTsKICAgICBmb3IgKE5hbWVOb2RlTGlzdENhY2hlOjppdGVyYXRvciBpdCA9IG1fbmFtZU5vZGVM
aXN0Q2FjaGUuYmVnaW4oKTsgaXQgIT0gbmFtZUNhY2hlRW5kOyArK2l0KQotICAgICAgICBpdC0+
c2Vjb25kLT5pbnZhbGlkYXRlQ2FjaGUoKTsKKyAgICAgICAgaXQtPnZhbHVlLT5pbnZhbGlkYXRl
Q2FjaGUoKTsKICAgICBpZiAobV9sYWJlbHNOb2RlTGlzdENhY2hlKQogICAgICAgICBtX2xhYmVs
c05vZGVMaXN0Q2FjaGUtPmludmFsaWRhdGVDYWNoZSgpOwogCiAjaWYgRU5BQkxFKE1JQ1JPREFU
QSkKICAgICBNaWNyb0RhdGFJdGVtTGlzdENhY2hlOjppdGVyYXRvciBpdGVtTGlzdENhY2hlRW5k
ID0gbV9taWNyb0RhdGFJdGVtTGlzdENhY2hlLmVuZCgpOwogICAgIGZvciAoTWljcm9EYXRhSXRl
bUxpc3RDYWNoZTo6aXRlcmF0b3IgaXQgPSBtX21pY3JvRGF0YUl0ZW1MaXN0Q2FjaGUuYmVnaW4o
KTsgaXQgIT0gaXRlbUxpc3RDYWNoZUVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+aW52
YWxpZGF0ZUNhY2hlKCk7CisgICAgICAgIGl0LT52YWx1ZS0+aW52YWxpZGF0ZUNhY2hlKCk7CiAj
ZW5kaWYKIH0KIApAQCAtMjU5Myw3ICsyNTkzLDcgQEAgdm9pZCBOb2RlOjpjb2xsZWN0TWF0Y2hp
bmdPYnNlcnZlcnNGb3JNdXRhdGlvbihIYXNoTWFwPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIqLAog
ICAgICAgICAgICAgICAgIE11dGF0aW9uUmVjb3JkRGVsaXZlcnlPcHRpb25zIGRlbGl2ZXJ5T3B0
aW9ucyA9IHJlZ2lzdHJhdGlvbi0+ZGVsaXZlcnlPcHRpb25zKCk7CiAgICAgICAgICAgICAgICAg
SGFzaE1hcDxXZWJLaXRNdXRhdGlvbk9ic2VydmVyKiwgTXV0YXRpb25SZWNvcmREZWxpdmVyeU9w
dGlvbnM+OjpBZGRSZXN1bHQgcmVzdWx0ID0gb2JzZXJ2ZXJzLmFkZChyZWdpc3RyYXRpb24tPm9i
c2VydmVyKCksIGRlbGl2ZXJ5T3B0aW9ucyk7CiAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQu
aXNOZXdFbnRyeSkKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQg
fD0gZGVsaXZlcnlPcHRpb25zOworICAgICAgICAgICAgICAgICAgICByZXN1bHQuaXRlcmF0b3It
PnZhbHVlIHw9IGRlbGl2ZXJ5T3B0aW9uczsKIAogICAgICAgICAgICAgfQogICAgICAgICB9CkBA
IC0yNjA2LDcgKzI2MDYsNyBAQCB2b2lkIE5vZGU6OmNvbGxlY3RNYXRjaGluZ09ic2VydmVyc0Zv
ck11dGF0aW9uKEhhc2hNYXA8V2ViS2l0TXV0YXRpb25PYnNlcnZlciosCiAgICAgICAgICAgICAg
ICAgTXV0YXRpb25SZWNvcmREZWxpdmVyeU9wdGlvbnMgZGVsaXZlcnlPcHRpb25zID0gcmVnaXN0
cmF0aW9uLT5kZWxpdmVyeU9wdGlvbnMoKTsKICAgICAgICAgICAgICAgICBIYXNoTWFwPFdlYktp
dE11dGF0aW9uT2JzZXJ2ZXIqLCBNdXRhdGlvblJlY29yZERlbGl2ZXJ5T3B0aW9ucz46OkFkZFJl
c3VsdCByZXN1bHQgPSBvYnNlcnZlcnMuYWRkKHJlZ2lzdHJhdGlvbi0+b2JzZXJ2ZXIoKSwgZGVs
aXZlcnlPcHRpb25zKTsKICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQot
ICAgICAgICAgICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCB8PSBkZWxpdmVyeU9w
dGlvbnM7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgfD0gZGVs
aXZlcnlPcHRpb25zOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmNwcAppbmRleCAwMTgwMDRiZjVkMWNj
YzNiM2IyZTZkNDY0OWZlZjRiN2VmYzgxODIyLi43MjAxOTAxYzNjZTVjOTg5ODI2ZGJkNmM0MTY1
OTczZDVhZTg5OWVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUHJvY2Vzc2luZ0lu
c3RydWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUHJvY2Vzc2luZ0luc3RydWN0
aW9uLmNwcApAQCAtMTE2LDcgKzExNiw3IEBAIHZvaWQgUHJvY2Vzc2luZ0luc3RydWN0aW9uOjpj
aGVja1N0eWxlU2hlZXQoKQogICAgICAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3Rf
aXRlcmF0b3IgaSA9IGF0dHJzLmZpbmQoInR5cGUiKTsKICAgICAgICAgU3RyaW5nIHR5cGU7CiAg
ICAgICAgIGlmIChpICE9IGF0dHJzLmVuZCgpKQotICAgICAgICAgICAgdHlwZSA9IGktPnNlY29u
ZDsKKyAgICAgICAgICAgIHR5cGUgPSBpLT52YWx1ZTsKIAogICAgICAgICBtX2lzQ1NTID0gdHlw
ZS5pc0VtcHR5KCkgfHwgdHlwZSA9PSAidGV4dC9jc3MiOwogI2lmIEVOQUJMRShYU0xUKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwIGIv
U291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwCmluZGV4IDkyNDQ1
Y2E4MGRhZjYzMzIzOWQyZjc5Y2VlOThkZDlkZDQ0MWIzMjMuLjUzNWI1NzBiNWQ3ZGU5ZjRhZjkz
NTgzZTdjNzFkMTJiMmQ3NTM1YTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3Jp
cHRFeGVjdXRpb25Db250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC5jcHAKQEAgLTE3Myw5ICsxNzMsOSBAQCBib29sIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQ6OmNhblN1c3BlbmRBY3RpdmVET01PYmplY3RzKCkKICAgICBtX2l0ZXJhdGluZ0Fj
dGl2ZURPTU9iamVjdHMgPSB0cnVlOwogICAgIEhhc2hNYXA8QWN0aXZlRE9NT2JqZWN0Kiwgdm9p
ZCo+OjppdGVyYXRvciBhY3RpdmVPYmplY3RzRW5kID0gbV9hY3RpdmVET01PYmplY3RzLmVuZCgp
OwogICAgIGZvciAoSGFzaE1hcDxBY3RpdmVET01PYmplY3QqLCB2b2lkKj46Oml0ZXJhdG9yIGl0
ZXIgPSBtX2FjdGl2ZURPTU9iamVjdHMuYmVnaW4oKTsgaXRlciAhPSBhY3RpdmVPYmplY3RzRW5k
OyArK2l0ZXIpIHsKLSAgICAgICAgQVNTRVJUKGl0ZXItPmZpcnN0LT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkgPT0gdGhpcyk7Ci0gICAgICAgIEFTU0VSVChpdGVyLT5maXJzdC0+c3VzcGVuZElm
TmVlZGVkQ2FsbGVkKCkpOwotICAgICAgICBpZiAoIWl0ZXItPmZpcnN0LT5jYW5TdXNwZW5kKCkp
IHsKKyAgICAgICAgQVNTRVJUKGl0ZXItPmtleS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpID09
IHRoaXMpOworICAgICAgICBBU1NFUlQoaXRlci0+a2V5LT5zdXNwZW5kSWZOZWVkZWRDYWxsZWQo
KSk7CisgICAgICAgIGlmICghaXRlci0+a2V5LT5jYW5TdXNwZW5kKCkpIHsKICAgICAgICAgICAg
IG1faXRlcmF0aW5nQWN0aXZlRE9NT2JqZWN0cyA9IGZhbHNlOwogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICB9CkBAIC0xOTAsOSArMTkwLDkgQEAgdm9pZCBTY3JpcHRFeGVjdXRp
b25Db250ZXh0OjpzdXNwZW5kQWN0aXZlRE9NT2JqZWN0cyhBY3RpdmVET01PYmplY3Q6OlJlYXNv
bkZvclMKICAgICBtX2l0ZXJhdGluZ0FjdGl2ZURPTU9iamVjdHMgPSB0cnVlOwogICAgIEhhc2hN
YXA8QWN0aXZlRE9NT2JqZWN0Kiwgdm9pZCo+OjppdGVyYXRvciBhY3RpdmVPYmplY3RzRW5kID0g
bV9hY3RpdmVET01PYmplY3RzLmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDxBY3RpdmVET01PYmpl
Y3QqLCB2b2lkKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX2FjdGl2ZURPTU9iamVjdHMuYmVnaW4oKTsg
aXRlciAhPSBhY3RpdmVPYmplY3RzRW5kOyArK2l0ZXIpIHsKLSAgICAgICAgQVNTRVJUKGl0ZXIt
PmZpcnN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgPT0gdGhpcyk7Ci0gICAgICAgIEFTU0VS
VChpdGVyLT5maXJzdC0+c3VzcGVuZElmTmVlZGVkQ2FsbGVkKCkpOwotICAgICAgICBpdGVyLT5m
aXJzdC0+c3VzcGVuZCh3aHkpOworICAgICAgICBBU1NFUlQoaXRlci0+a2V5LT5zY3JpcHRFeGVj
dXRpb25Db250ZXh0KCkgPT0gdGhpcyk7CisgICAgICAgIEFTU0VSVChpdGVyLT5rZXktPnN1c3Bl
bmRJZk5lZWRlZENhbGxlZCgpKTsKKyAgICAgICAgaXRlci0+a2V5LT5zdXNwZW5kKHdoeSk7CiAg
ICAgfQogICAgIG1faXRlcmF0aW5nQWN0aXZlRE9NT2JqZWN0cyA9IGZhbHNlOwogICAgIG1fYWN0
aXZlRE9NT2JqZWN0c0FyZVN1c3BlbmRlZCA9IHRydWU7CkBAIC0yMDYsOSArMjA2LDkgQEAgdm9p
ZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpyZXN1bWVBY3RpdmVET01PYmplY3RzKCkKICAgICBt
X2l0ZXJhdGluZ0FjdGl2ZURPTU9iamVjdHMgPSB0cnVlOwogICAgIEhhc2hNYXA8QWN0aXZlRE9N
T2JqZWN0Kiwgdm9pZCo+OjppdGVyYXRvciBhY3RpdmVPYmplY3RzRW5kID0gbV9hY3RpdmVET01P
YmplY3RzLmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDxBY3RpdmVET01PYmplY3QqLCB2b2lkKj46
Oml0ZXJhdG9yIGl0ZXIgPSBtX2FjdGl2ZURPTU9iamVjdHMuYmVnaW4oKTsgaXRlciAhPSBhY3Rp
dmVPYmplY3RzRW5kOyArK2l0ZXIpIHsKLSAgICAgICAgQVNTRVJUKGl0ZXItPmZpcnN0LT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCkgPT0gdGhpcyk7Ci0gICAgICAgIEFTU0VSVChpdGVyLT5maXJz
dC0+c3VzcGVuZElmTmVlZGVkQ2FsbGVkKCkpOwotICAgICAgICBpdGVyLT5maXJzdC0+cmVzdW1l
KCk7CisgICAgICAgIEFTU0VSVChpdGVyLT5rZXktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSA9
PSB0aGlzKTsKKyAgICAgICAgQVNTRVJUKGl0ZXItPmtleS0+c3VzcGVuZElmTmVlZGVkQ2FsbGVk
KCkpOworICAgICAgICBpdGVyLT5rZXktPnJlc3VtZSgpOwogICAgIH0KICAgICBtX2l0ZXJhdGlu
Z0FjdGl2ZURPTU9iamVjdHMgPSBmYWxzZTsKIH0KQEAgLTIyMCw5ICsyMjAsOSBAQCB2b2lkIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnN0b3BBY3RpdmVET01PYmplY3RzKCkKICAgICBtX2l0ZXJh
dGluZ0FjdGl2ZURPTU9iamVjdHMgPSB0cnVlOwogICAgIEhhc2hNYXA8QWN0aXZlRE9NT2JqZWN0
Kiwgdm9pZCo+OjppdGVyYXRvciBhY3RpdmVPYmplY3RzRW5kID0gbV9hY3RpdmVET01PYmplY3Rz
LmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDxBY3RpdmVET01PYmplY3QqLCB2b2lkKj46Oml0ZXJh
dG9yIGl0ZXIgPSBtX2FjdGl2ZURPTU9iamVjdHMuYmVnaW4oKTsgaXRlciAhPSBhY3RpdmVPYmpl
Y3RzRW5kOyArK2l0ZXIpIHsKLSAgICAgICAgQVNTRVJUKGl0ZXItPmZpcnN0LT5zY3JpcHRFeGVj
dXRpb25Db250ZXh0KCkgPT0gdGhpcyk7Ci0gICAgICAgIEFTU0VSVChpdGVyLT5maXJzdC0+c3Vz
cGVuZElmTmVlZGVkQ2FsbGVkKCkpOwotICAgICAgICBpdGVyLT5maXJzdC0+c3RvcCgpOworICAg
ICAgICBBU1NFUlQoaXRlci0+a2V5LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgPT0gdGhpcyk7
CisgICAgICAgIEFTU0VSVChpdGVyLT5rZXktPnN1c3BlbmRJZk5lZWRlZENhbGxlZCgpKTsKKyAg
ICAgICAgaXRlci0+a2V5LT5zdG9wKCk7CiAgICAgfQogICAgIG1faXRlcmF0aW5nQWN0aXZlRE9N
T2JqZWN0cyA9IGZhbHNlOwogCkBAIC0zODAsNyArMzgwLDcgQEAgdm9pZCBTY3JpcHRFeGVjdXRp
b25Db250ZXh0OjphZGp1c3RNaW5pbXVtVGltZXJJbnRlcnZhbChkb3VibGUgb2xkTWluaW11bVRp
bWVySW4KIHsKICAgICBpZiAobWluaW11bVRpbWVySW50ZXJ2YWwoKSAhPSBvbGRNaW5pbXVtVGlt
ZXJJbnRlcnZhbCkgewogICAgICAgICBmb3IgKFRpbWVvdXRNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBt
X3RpbWVvdXRzLmJlZ2luKCk7IGl0ZXIgIT0gbV90aW1lb3V0cy5lbmQoKTsgKytpdGVyKSB7Ci0g
ICAgICAgICAgICBET01UaW1lciogdGltZXIgPSBpdGVyLT5zZWNvbmQ7CisgICAgICAgICAgICBE
T01UaW1lciogdGltZXIgPSBpdGVyLT52YWx1ZTsKICAgICAgICAgICAgIHRpbWVyLT5hZGp1c3RN
aW5pbXVtVGltZXJJbnRlcnZhbChvbGRNaW5pbXVtVGltZXJJbnRlcnZhbCk7CiAgICAgICAgIH0K
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU3BhY2VTcGxpdFN0cmluZy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU3BhY2VTcGxpdFN0cmluZy5jcHAKaW5kZXggOWNjZTdk
OTViNWUxMDQ0M2MwM2VkYTViNzJmMTEyYzU3MDUyZTUxMi4uMWRjMWZiMGRkZTFmMDIzZjNmOGE2
NTNiMjNhYzNkODczOGU4YzM0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NwYWNl
U3BsaXRTdHJpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TcGFjZVNwbGl0U3RyaW5n
LmNwcApAQCAtMTUwLDcgKzE1MCw3IEBAIFNwYWNlU3BsaXRTdHJpbmdEYXRhOjp+U3BhY2VTcGxp
dFN0cmluZ0RhdGEoKQogCiBQYXNzUmVmUHRyPFNwYWNlU3BsaXRTdHJpbmdEYXRhPiBTcGFjZVNw
bGl0U3RyaW5nRGF0YTo6Y3JlYXRlKGNvbnN0IEF0b21pY1N0cmluZyYgc3RyaW5nKQogewotICAg
IFNwYWNlU3BsaXRTdHJpbmdEYXRhKiYgZGF0YSA9IHNoYXJlZERhdGFNYXAoKS5hZGQoc3RyaW5n
LCAwKS5pdGVyYXRvci0+c2Vjb25kOworICAgIFNwYWNlU3BsaXRTdHJpbmdEYXRhKiYgZGF0YSA9
IHNoYXJlZERhdGFNYXAoKS5hZGQoc3RyaW5nLCAwKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYg
KCFkYXRhKSB7CiAgICAgICAgIGRhdGEgPSBuZXcgU3BhY2VTcGxpdFN0cmluZ0RhdGEoc3RyaW5n
KTsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKGRhdGEpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVs
ZW1lbnQuY3BwCmluZGV4IDU1YmM0MWQ0MzUxY2E2ODM2YmI1NDRlMTc1NDI1MGQ5NDFkYWM3MTEu
LmM3MGIzODFlZWVkYTBmZmNmZjA4NDA5Y2IxYTlkMGVhNmY0YmEwMTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vU3R5bGVkRWxlbWVudC5jcHAKQEAgLTIzNywxNCArMjM3LDE0IEBAIHZvaWQgU3R5bGVkRWxl
bWVudDo6dXBkYXRlQXR0cmlidXRlU3R5bGUoKQogICAgIFByZXNlbnRhdGlvbkF0dHJpYnV0ZUNh
Y2hlOjppdGVyYXRvciBjYWNoZUl0ZXJhdG9yOwogICAgIGlmIChjYWNoZUhhc2gpIHsKICAgICAg
ICAgY2FjaGVJdGVyYXRvciA9IHByZXNlbnRhdGlvbkF0dHJpYnV0ZUNhY2hlKCkuYWRkKGNhY2hl
SGFzaCwgbnVsbHB0cikuaXRlcmF0b3I7Ci0gICAgICAgIGlmIChjYWNoZUl0ZXJhdG9yLT5zZWNv
bmQgJiYgY2FjaGVJdGVyYXRvci0+c2Vjb25kLT5rZXkgIT0gY2FjaGVLZXkpCisgICAgICAgIGlm
IChjYWNoZUl0ZXJhdG9yLT52YWx1ZSAmJiBjYWNoZUl0ZXJhdG9yLT52YWx1ZS0+a2V5ICE9IGNh
Y2hlS2V5KQogICAgICAgICAgICAgY2FjaGVIYXNoID0gMDsKICAgICB9IGVsc2UKICAgICAgICAg
Y2FjaGVJdGVyYXRvciA9IHByZXNlbnRhdGlvbkF0dHJpYnV0ZUNhY2hlKCkuZW5kKCk7CiAKICAg
ICBSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gc3R5bGU7Ci0gICAgaWYgKGNhY2hlSGFzaCAmJiBj
YWNoZUl0ZXJhdG9yLT5zZWNvbmQpIAotICAgICAgICBzdHlsZSA9IGNhY2hlSXRlcmF0b3ItPnNl
Y29uZC0+dmFsdWU7CisgICAgaWYgKGNhY2hlSGFzaCAmJiBjYWNoZUl0ZXJhdG9yLT52YWx1ZSkK
KyAgICAgICAgc3R5bGUgPSBjYWNoZUl0ZXJhdG9yLT52YWx1ZS0+dmFsdWU7CiAgICAgZWxzZSB7
CiAgICAgICAgIHN0eWxlID0gU3R5bGVQcm9wZXJ0eVNldDo6Y3JlYXRlKGlzU1ZHRWxlbWVudCgp
ID8gU1ZHQXR0cmlidXRlTW9kZSA6IENTU1F1aXJrc01vZGUpOwogICAgICAgICB1bnNpZ25lZCBz
aXplID0gYXR0cmlidXRlQ291bnQoKTsKQEAgLTI2Miw3ICsyNjIsNyBAQCB2b2lkIFN0eWxlZEVs
ZW1lbnQ6OnVwZGF0ZUF0dHJpYnV0ZVN0eWxlKCkKICAgICAgICAgYXR0cmlidXRlRGF0YSgpLT5z
ZXRBdHRyaWJ1dGVTdHlsZShzdHlsZSk7CiAgICAgfQogCi0gICAgaWYgKCFjYWNoZUhhc2ggfHwg
Y2FjaGVJdGVyYXRvci0+c2Vjb25kKQorICAgIGlmICghY2FjaGVIYXNoIHx8IGNhY2hlSXRlcmF0
b3ItPnZhbHVlKQogICAgICAgICByZXR1cm47CiAKICAgICBPd25QdHI8UHJlc2VudGF0aW9uQXR0
cmlidXRlQ2FjaGVFbnRyeT4gbmV3RW50cnkgPSBhZG9wdFB0cihuZXcgUHJlc2VudGF0aW9uQXR0
cmlidXRlQ2FjaGVFbnRyeSk7CkBAIC0yNzUsNyArMjc1LDcgQEAgdm9pZCBTdHlsZWRFbGVtZW50
Ojp1cGRhdGVBdHRyaWJ1dGVTdHlsZSgpCiAgICAgICAgIHByZXNlbnRhdGlvbkF0dHJpYnV0ZUNh
Y2hlKCkuY2xlYXIoKTsKICAgICAgICAgcHJlc2VudGF0aW9uQXR0cmlidXRlQ2FjaGUoKS5zZXQo
Y2FjaGVIYXNoLCBuZXdFbnRyeS5yZWxlYXNlKCkpOwogICAgIH0gZWxzZQotICAgICAgICBjYWNo
ZUl0ZXJhdG9yLT5zZWNvbmQgPSBuZXdFbnRyeS5yZWxlYXNlKCk7CisgICAgICAgIGNhY2hlSXRl
cmF0b3ItPnZhbHVlID0gbmV3RW50cnkucmVsZWFzZSgpOwogfQogCiB2b2lkIFN0eWxlZEVsZW1l
bnQ6OmFkZFByb3BlcnR5VG9BdHRyaWJ1dGVTdHlsZShTdHlsZVByb3BlcnR5U2V0KiBzdHlsZSwg
aW50IHByb3BlcnR5SUQsIGludCBpZGVudGlmaWVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDb2xs
ZWN0aW9uLmNwcAppbmRleCBjM2E3MTUzY2FlNDVhZDYwMWE4NWM4NTA5OWUzZjE1MTg5OTcyN2M5
Li43NGI5OGM2ZmI0MWU3OTA3NzkzNjc2YmUzMGE4NzYyMzljNTM4MjQyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxDb2xsZWN0aW9uLmNwcApAQCAtMzU5LDcgKzM1OSw3IEBAIFBhc3NSZWZQdHI8
Tm9kZUxpc3Q+IEhUTUxDb2xsZWN0aW9uOjp0YWdzKGNvbnN0IFN0cmluZyYgbmFtZSkKIAogdm9p
ZCBIVE1MQ29sbGVjdGlvbjo6YXBwZW5kKE5vZGVDYWNoZU1hcCYgbWFwLCBjb25zdCBBdG9taWNT
dHJpbmcmIGtleSwgRWxlbWVudCogZWxlbWVudCkKIHsKLSAgICBPd25QdHI8VmVjdG9yPEVsZW1l
bnQqPiA+JiB2ZWN0b3IgPSBtYXAuYWRkKGtleS5pbXBsKCksIG51bGxwdHIpLml0ZXJhdG9yLT5z
ZWNvbmQ7CisgICAgT3duUHRyPFZlY3RvcjxFbGVtZW50Kj4gPiYgdmVjdG9yID0gbWFwLmFkZChr
ZXkuaW1wbCgpLCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCF2ZWN0b3IpCiAg
ICAgICAgIHZlY3RvciA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8RWxlbWVudCo+KTsKICAgICB2ZWN0
b3ItPmFwcGVuZChlbGVtZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0Nv
ZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKaW5kZXggMGVhZTk0N2Q0ZTdjMDYyY2E0ZWNjNWRmYTM0
OGY0OTMwOWI5YjUwZi4uOWNiN2VkYjA5M2FhN2ExMjk5MWU4NWJlMGMxZTcxNzM0NTY4ZDRhYyAx
MDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0
b3IucHkKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0
b3IucHkKQEAgLTEyOTksNyArMTI5OSw3IEBAIGNsYXNzIFR5cGVCaW5kaW5nczoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUo
IiAgICAgICAgSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciAlcztcbiIgJSBpdF9uYW1lKQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3
bGluZSgiICAgICAgICAlcyA9IG9iamVjdC0+ZmluZChcIiVzXCIpO1xuIiAlIChpdF9uYW1lLCBw
cm9wX2RhdGEucFsibmFtZSJdKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgQVNTRVJUKCVzICE9IG9iamVj
dC0+ZW5kKCkpO1xuIiAlIGl0X25hbWUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgICAgICVzKCVzLT5zZWNvbmQu
Z2V0KCkpO1xuIiAlIChwcm9wX2RhdGEucGFyYW1fdHlwZV9iaW5kaW5nLmdldF92YWxpZGF0b3Jf
Y2FsbF90ZXh0KCksIGl0X25hbWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgICAgICAlcyglcy0+dmFsdWUuZ2V0
KCkpO1xuIiAlIChwcm9wX2RhdGEucGFyYW1fdHlwZV9iaW5kaW5nLmdldF92YWxpZGF0b3JfY2Fs
bF90ZXh0KCksIGl0X25hbWUpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgIH1cbiIpCiAKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgIGludCBm
b3VuZFByb3BlcnRpZXNDb3VudCA9ICVzO1xuIiAlIGxlbihyZXNvbHZlX2RhdGEubWFpbl9wcm9w
ZXJ0aWVzKSkKQEAgLTEzMTAsNyArMTMxMCw3IEBAIGNsYXNzIFR5cGVCaW5kaW5nczoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xp
bmUoIiAgICAgICAgSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciAlcztcbiIgJSBpdF9uYW1lKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIu
bmV3bGluZSgiICAgICAgICAlcyA9IG9iamVjdC0+ZmluZChcIiVzXCIpO1xuIiAlIChpdF9uYW1l
LCBwcm9wX2RhdGEucFsibmFtZSJdKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgaWYgKCVzICE9IG9iamVj
dC0+ZW5kKCkpIHtcbiIgJSBpdF9uYW1lKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgICAgICAgICAgJXMoJXMtPnNl
Y29uZC5nZXQoKSk7XG4iICUgKHByb3BfZGF0YS5wYXJhbV90eXBlX2JpbmRpbmcuZ2V0X3ZhbGlk
YXRvcl9jYWxsX3RleHQoKSwgaXRfbmFtZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgICAgICAgICAlcyglcy0+
dmFsdWUuZ2V0KCkpO1xuIiAlIChwcm9wX2RhdGEucGFyYW1fdHlwZV9iaW5kaW5nLmdldF92YWxp
ZGF0b3JfY2FsbF90ZXh0KCksIGl0X25hbWUpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgICAgICAgICAgKytmb3Vu
ZFByb3BlcnRpZXNDb3VudDtcbiIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgICAgIH1cbiIpCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIg
ICAgfVxuIikKQEAgLTE5NzAsNyArMTk3MCw3IEBAICRtZXNzYWdlSGFuZGxlcnMKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgICgoKnRoaXMpLippdC0+c2Vjb25kKShjYWxsSWQsIG1lc3Nh
Z2VPYmplY3QuZ2V0KCkpOworICAgICgoKnRoaXMpLippdC0+dmFsdWUpKGNhbGxJZCwgbWVzc2Fn
ZU9iamVjdC5nZXQoKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBs
OjpzZW5kUmVzcG9uc2UobG9uZyBjYWxsSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBy
ZXN1bHQsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBQYXNzUmVmUHRyPEluc3BlY3RvckFy
cmF5PiBwcm90b2NvbEVycm9ycywgRXJyb3JTdHJpbmcgaW52b2NhdGlvbkVycm9yKQpAQCAtMjA1
Myw3ICsyMDUzLDcgQEAgUiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OmdldFByb3Bl
cnR5VmFsdWVJbXBsKEluc3BlY3Rvck9iamVjdCogb2JqZWN0LAogICAgICAgICByZXR1cm4gdmFs
dWU7CiAgICAgfQogCi0gICAgaWYgKCFhc19tZXRob2QodmFsdWVJdGVyYXRvci0+c2Vjb25kLmdl
dCgpLCAmdmFsdWUpKQorICAgIGlmICghYXNfbWV0aG9kKHZhbHVlSXRlcmF0b3ItPnZhbHVlLmdl
dCgpLCAmdmFsdWUpKQogICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6
OmZvcm1hdCgiUGFyYW1ldGVyICclcycgaGFzIHdyb25nIHR5cGUuIEl0IG11c3QgYmUgJyVzJy4i
LCBuYW1lLnV0ZjgoKS5kYXRhKCksIHR5cGVfbmFtZSkpOwogICAgIGVsc2UKICAgICAgICAgaWYg
KHZhbHVlRm91bmQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NUGF0
Y2hTdXBwb3J0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01QYXRjaFN1cHBvcnQu
Y3BwCmluZGV4IGQ3ZmNiOWFhYzA4ZTg4NTM2ODZjZmRkYjUxZmExZTEwZDI5OTQ5Y2QuLjA3MTE1
MzNiNzk3ZTA5OTUxMjk0N2IyMmM1YTQxN2NiZjdhNDgxNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9ET01QYXRjaFN1cHBvcnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9ET01QYXRjaFN1cHBvcnQuY3BwCkBAIC0yMzQsMjQgKzIzNCwyNCBAQCBET01Q
YXRjaFN1cHBvcnQ6OmRpZmYoY29uc3QgVmVjdG9yPE93blB0cjxEaWdlc3Q+ID4mIG9sZExpc3Qs
IGNvbnN0IFZlY3RvcjxPd25QdAogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuZXdMaXN0
LnNpemUoKTsgKytpKSB7CiAgICAgICAgIERpZmZUYWJsZTo6aXRlcmF0b3IgaXQgPSBuZXdUYWJs
ZS5hZGQobmV3TGlzdFtpXS0+bV9zaGExLCBWZWN0b3I8c2l6ZV90PigpKS5pdGVyYXRvcjsKLSAg
ICAgICAgaXQtPnNlY29uZC5hcHBlbmQoaSk7CisgICAgICAgIGl0LT52YWx1ZS5hcHBlbmQoaSk7
CiAgICAgfQogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvbGRMaXN0LnNpemUoKTsgKytp
KSB7CiAgICAgICAgIERpZmZUYWJsZTo6aXRlcmF0b3IgaXQgPSBvbGRUYWJsZS5hZGQob2xkTGlz
dFtpXS0+bV9zaGExLCBWZWN0b3I8c2l6ZV90PigpKS5pdGVyYXRvcjsKLSAgICAgICAgaXQtPnNl
Y29uZC5hcHBlbmQoaSk7CisgICAgICAgIGl0LT52YWx1ZS5hcHBlbmQoaSk7CiAgICAgfQogCiAg
ICAgZm9yIChEaWZmVGFibGU6Oml0ZXJhdG9yIG5ld0l0ID0gbmV3VGFibGUuYmVnaW4oKTsgbmV3
SXQgIT0gbmV3VGFibGUuZW5kKCk7ICsrbmV3SXQpIHsKLSAgICAgICAgaWYgKG5ld0l0LT5zZWNv
bmQuc2l6ZSgpICE9IDEpCisgICAgICAgIGlmIChuZXdJdC0+dmFsdWUuc2l6ZSgpICE9IDEpCiAg
ICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBEaWZmVGFibGU6Oml0ZXJhdG9yIG9sZEl0
ID0gb2xkVGFibGUuZmluZChuZXdJdC0+Zmlyc3QpOwotICAgICAgICBpZiAob2xkSXQgPT0gb2xk
VGFibGUuZW5kKCkgfHwgb2xkSXQtPnNlY29uZC5zaXplKCkgIT0gMSkKKyAgICAgICAgRGlmZlRh
YmxlOjppdGVyYXRvciBvbGRJdCA9IG9sZFRhYmxlLmZpbmQobmV3SXQtPmtleSk7CisgICAgICAg
IGlmIChvbGRJdCA9PSBvbGRUYWJsZS5lbmQoKSB8fCBvbGRJdC0+dmFsdWUuc2l6ZSgpICE9IDEp
CiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBuZXdNYXBbbmV3SXQtPnNlY29uZFsw
XV0gPSBtYWtlX3BhaXIobmV3TGlzdFtuZXdJdC0+c2Vjb25kWzBdXS5nZXQoKSwgb2xkSXQtPnNl
Y29uZFswXSk7Ci0gICAgICAgIG9sZE1hcFtvbGRJdC0+c2Vjb25kWzBdXSA9IG1ha2VfcGFpcihv
bGRMaXN0W29sZEl0LT5zZWNvbmRbMF1dLmdldCgpLCBuZXdJdC0+c2Vjb25kWzBdKTsKKyAgICAg
ICAgbmV3TWFwW25ld0l0LT52YWx1ZVswXV0gPSBtYWtlX3BhaXIobmV3TGlzdFtuZXdJdC0+dmFs
dWVbMF1dLmdldCgpLCBvbGRJdC0+dmFsdWVbMF0pOworICAgICAgICBvbGRNYXBbb2xkSXQtPnZh
bHVlWzBdXSA9IG1ha2VfcGFpcihvbGRMaXN0W29sZEl0LT52YWx1ZVswXV0uZ2V0KCksIG5ld0l0
LT52YWx1ZVswXSk7CiAgICAgfQogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IG5ld0xpc3Quc2l6
ZSgpID4gMCAmJiBpIDwgbmV3TGlzdC5zaXplKCkgLSAxOyArK2kpIHsKQEAgLTM2MSw3ICszNjEs
NyBAQCBib29sIERPTVBhdGNoU3VwcG9ydDo6aW5uZXJQYXRjaENoaWxkcmVuKENvbnRhaW5lck5v
ZGUqIHBhcmVudE5vZGUsIGNvbnN0IFZlY3RvcgogCiAgICAgLy8gMi4gUGF0Y2ggbm9kZXMgbWFy
a2VkIGZvciBtZXJnZS4KICAgICBmb3IgKEhhc2hNYXA8RGlnZXN0KiwgRGlnZXN0Kj46Oml0ZXJh
dG9yIGl0ID0gbWVyZ2VzLmJlZ2luKCk7IGl0ICE9IG1lcmdlcy5lbmQoKTsgKytpdCkgewotICAg
ICAgICBpZiAoIWlubmVyUGF0Y2hOb2RlKGl0LT5zZWNvbmQsIGl0LT5maXJzdCwgZWMpKQorICAg
ICAgICBpZiAoIWlubmVyUGF0Y2hOb2RlKGl0LT52YWx1ZSwgaXQtPmtleSwgZWMpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtNDYwLDcgKzQ2MCw3IEBAIGJvb2wgRE9N
UGF0Y2hTdXBwb3J0OjpyZW1vdmVDaGlsZEFuZE1vdmVUb05ldyhEaWdlc3QqIG9sZERpZ2VzdCwg
RXhjZXB0aW9uQ29kZSYKICAgICAvLyBoaWdoIHRoYXQgaXQgd2lsbCBnZXQgbWVyZ2VkIGJhY2sg
aW50byB0aGUgb3JpZ2luYWwgRE9NIGR1cmluZyB0aGUgZnVydGhlciBwYXRjaGluZy4KICAgICBV
bnVzZWROb2Rlc01hcDo6aXRlcmF0b3IgaXQgPSBtX3VudXNlZE5vZGVzTWFwLmZpbmQob2xkRGln
ZXN0LT5tX3NoYTEpOwogICAgIGlmIChpdCAhPSBtX3VudXNlZE5vZGVzTWFwLmVuZCgpKSB7Ci0g
ICAgICAgIERpZ2VzdCogbmV3RGlnZXN0ID0gaXQtPnNlY29uZDsKKyAgICAgICAgRGlnZXN0KiBu
ZXdEaWdlc3QgPSBpdC0+dmFsdWU7CiAgICAgICAgIE5vZGUqIG5ld05vZGUgPSBuZXdEaWdlc3Qt
Pm1fbm9kZTsKICAgICAgICAgaWYgKCFtX2RvbUVkaXRvci0+cmVwbGFjZUNoaWxkKG5ld05vZGUt
PnBhcmVudE5vZGUoKSwgb2xkTm9kZSwgbmV3Tm9kZSwgZWMpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2Ny
aXB0TWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyLmNwcAppbmRleCA2MDUxNzEzNWQ4NTlhOTNhYzZjZTRhMzFiZTZjY2M1MDU2MjJiZDJl
Li43M2EzZTEzODVhODM5Y2ZiMTUyOWE3NGY3ZDNhNzczNDI4ZTFiNGUxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcApAQCAtOTgs
NyArOTgsNyBAQCB2b2lkIEluamVjdGVkU2NyaXB0TWFuYWdlcjo6ZGlzY2FyZEluamVjdGVkU2Ny
aXB0cygpCiB7CiAgICAgSWRUb0luamVjdGVkU2NyaXB0TWFwOjppdGVyYXRvciBlbmQgPSBtX2lk
VG9JbmplY3RlZFNjcmlwdC5lbmQoKTsKICAgICBmb3IgKElkVG9JbmplY3RlZFNjcmlwdE1hcDo6
aXRlcmF0b3IgaXQgPSBtX2lkVG9JbmplY3RlZFNjcmlwdC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpCi0gICAgICAgIGRpc2NhcmRJbmplY3RlZFNjcmlwdChpdC0+c2Vjb25kLnNjcmlwdFN0YXRl
KCkpOworICAgICAgICBkaXNjYXJkSW5qZWN0ZWRTY3JpcHQoaXQtPnZhbHVlLnNjcmlwdFN0YXRl
KCkpOwogICAgIG1faWRUb0luamVjdGVkU2NyaXB0LmNsZWFyKCk7CiB9CiAKQEAgLTEwNywxMSAr
MTA3LDExIEBAIHZvaWQgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjpkaXNjYXJkSW5qZWN0ZWRTY3Jp
cHRzRm9yKERPTVdpbmRvdyogd2luZG93KQogICAgIFZlY3Rvcjxsb25nPiBpZHNUb1JlbW92ZTsK
ICAgICBJZFRvSW5qZWN0ZWRTY3JpcHRNYXA6Oml0ZXJhdG9yIGVuZCA9IG1faWRUb0luamVjdGVk
U2NyaXB0LmVuZCgpOwogICAgIGZvciAoSWRUb0luamVjdGVkU2NyaXB0TWFwOjppdGVyYXRvciBp
dCA9IG1faWRUb0luamVjdGVkU2NyaXB0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAg
ICAgICBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUgPSBpdC0+c2Vjb25kLnNjcmlwdFN0YXRlKCk7
CisgICAgICAgIFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSA9IGl0LT52YWx1ZS5zY3JpcHRTdGF0
ZSgpOwogICAgICAgICBpZiAod2luZG93ICE9IGRvbVdpbmRvd0Zyb21TY3JpcHRTdGF0ZShzY3Jp
cHRTdGF0ZSkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgZGlzY2FyZEluamVjdGVk
U2NyaXB0KHNjcmlwdFN0YXRlKTsKLSAgICAgICAgaWRzVG9SZW1vdmUuYXBwZW5kKGl0LT5maXJz
dCk7CisgICAgICAgIGlkc1RvUmVtb3ZlLmFwcGVuZChpdC0+a2V5KTsKICAgICB9CiAKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGlkc1RvUmVtb3ZlLnNpemUoKTsgaSsrKQpAQCAtMTI2LDcg
KzEyNiw3IEBAIGJvb2wgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjpjYW5BY2Nlc3NJbnNwZWN0ZWRX
b3JrZXJDb250ZXh0KFNjcmlwdFN0YXRlKikKIHZvaWQgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjpy
ZWxlYXNlT2JqZWN0R3JvdXAoY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCkKIHsKICAgICBmb3Ig
KElkVG9JbmplY3RlZFNjcmlwdE1hcDo6aXRlcmF0b3IgaXQgPSBtX2lkVG9JbmplY3RlZFNjcmlw
dC5iZWdpbigpOyBpdCAhPSBtX2lkVG9JbmplY3RlZFNjcmlwdC5lbmQoKTsgKytpdCkKLSAgICAg
ICAgaXQtPnNlY29uZC5yZWxlYXNlT2JqZWN0R3JvdXAob2JqZWN0R3JvdXApOworICAgICAgICBp
dC0+dmFsdWUucmVsZWFzZU9iamVjdEdyb3VwKG9iamVjdEdyb3VwKTsKIH0KIAogU3RyaW5nIElu
amVjdGVkU2NyaXB0TWFuYWdlcjo6aW5qZWN0ZWRTY3JpcHRTb3VyY2UoKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5jcHAKaW5kZXggMTIzN2JlMDc1MjlhNWU0ZTA3
ODEwMGRmZmM0MmRjZTFkODU3YTZmNC4uYmI1Nzc2NGFiZDRkMzA3NjJlODcxOGZiOWEzOGYzYjE2
MDkwY2RlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFn
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnQuY3Bw
CkBAIC0xMzEsNyArMTMxLDcgQEAgdm9pZCBJbnNwZWN0b3JBZ2VudDo6ZW5hYmxlKEVycm9yU3Ry
aW5nKikKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikgJiYgRU5BQkxFKFdPUktFUlMp
CiAgICAgV29ya2Vyc01hcDo6aXRlcmF0b3Igd29ya2Vyc0VuZCA9IG1fd29ya2Vycy5lbmQoKTsK
ICAgICBmb3IgKFdvcmtlcnNNYXA6Oml0ZXJhdG9yIGl0ID0gbV93b3JrZXJzLmJlZ2luKCk7IGl0
ICE9IHdvcmtlcnNFbmQ7ICsraXQpIHsKLSAgICAgICAgSW5zcGVjdG9yV29ya2VyUmVzb3VyY2Uq
IHdvcmtlciA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIEluc3BlY3RvcldvcmtlclJlc291
cmNlKiB3b3JrZXIgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgIG1fZnJvbnRlbmQtPmluc3Bl
Y3RvcigpLT5kaWRDcmVhdGVXb3JrZXIod29ya2VyLT5pZCgpLCB3b3JrZXItPnVybCgpLCB3b3Jr
ZXItPmlzU2hhcmVkV29ya2VyKCkpOwogICAgIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKaW5kZXggMTYxMGNkNzAyODU4YWY3MmEw
MTc3ZjExYTRjYTM3ZTkyYzEwMDc2YS4uNzBhN2Q1ZWYxMzhhZmJkMTYxNGUxZTJkZmJmODhiZDAw
ZDI2ZWJhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNT
U0FnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdl
bnQuY3BwCkBAIC0xODMsMTAgKzE4MywxMCBAQCBpbmxpbmUgdm9pZCBTZWxlY3RvclByb2ZpbGU6
OmNvbW1pdFNlbGVjdG9yKGJvb2wgbWF0Y2hlZCkKIAogICAgIFJ1bGVNYXRjaGluZ1N0YXRzTWFw
OjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9ydWxlTWF0Y2hpbmdTdGF0cy5hZGQobWFrZUtleSgpLCBS
dWxlTWF0Y2hpbmdTdGF0cyhtX2N1cnJlbnRNYXRjaERhdGEsIG1hdGNoVGltZU1zLCAxLCBtYXRj
aGVkID8gMSA6IDApKTsKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIHJl
c3VsdC5pdGVyYXRvci0+c2Vjb25kLnRvdGFsVGltZSArPSBtYXRjaFRpbWVNczsKLSAgICAgICAg
cmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQuaGl0cyArPSAxOworICAgICAgICByZXN1bHQuaXRlcmF0
b3ItPnZhbHVlLnRvdGFsVGltZSArPSBtYXRjaFRpbWVNczsKKyAgICAgICAgcmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZS5oaXRzICs9IDE7CiAgICAgICAgIGlmIChtYXRjaGVkKQotICAgICAgICAgICAg
cmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQubWF0Y2hlcyArPSAxOworICAgICAgICAgICAgcmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZS5tYXRjaGVzICs9IDE7CiAgICAgfQogfQogCkBAIC0xOTksNyArMTk5
LDcgQEAgaW5saW5lIHZvaWQgU2VsZWN0b3JQcm9maWxlOjpjb21taXRTZWxlY3RvclRpbWUoKQog
ICAgIGlmIChpdCA9PSBtX3J1bGVNYXRjaGluZ1N0YXRzLmVuZCgpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBpdC0+c2Vjb25kLnRvdGFsVGltZSArPSBwcm9jZXNzaW5nVGltZU1zOworICAgIGl0
LT52YWx1ZS50b3RhbFRpbWUgKz0gcHJvY2Vzc2luZ1RpbWVNczsKIH0KIAogUGFzc1JlZlB0cjxU
eXBlQnVpbGRlcjo6Q1NTOjpTZWxlY3RvclByb2ZpbGU+IFNlbGVjdG9yUHJvZmlsZTo6dG9JbnNw
ZWN0b3JPYmplY3QoKSBjb25zdApAQCAtMjA3LDEyICsyMDcsMTIgQEAgUGFzc1JlZlB0cjxUeXBl
QnVpbGRlcjo6Q1NTOjpTZWxlY3RvclByb2ZpbGU+IFNlbGVjdG9yUHJvZmlsZTo6dG9JbnNwZWN0
b3JPYmplY3QKICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpDU1M6
OlNlbGVjdG9yUHJvZmlsZUVudHJ5PiA+IHNlbGVjdG9yUHJvZmlsZURhdGEgPSBUeXBlQnVpbGRl
cjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkNTUzo6U2VsZWN0b3JQcm9maWxlRW50cnk+OjpjcmVhdGUo
KTsKICAgICBmb3IgKFJ1bGVNYXRjaGluZ1N0YXRzTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1f
cnVsZU1hdGNoaW5nU3RhdHMuYmVnaW4oKTsgaXQgIT0gbV9ydWxlTWF0Y2hpbmdTdGF0cy5lbmQo
KTsgKytpdCkgewogICAgICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6U2VsZWN0b3JQcm9m
aWxlRW50cnk+IGVudHJ5ID0gVHlwZUJ1aWxkZXI6OkNTUzo6U2VsZWN0b3JQcm9maWxlRW50cnk6
OmNyZWF0ZSgpCi0gICAgICAgICAgICAuc2V0U2VsZWN0b3IoaXQtPnNlY29uZC5zZWxlY3RvcikK
LSAgICAgICAgICAgIC5zZXRVcmwoaXQtPnNlY29uZC51cmwpCi0gICAgICAgICAgICAuc2V0TGlu
ZU51bWJlcihpdC0+c2Vjb25kLmxpbmVOdW1iZXIpCi0gICAgICAgICAgICAuc2V0VGltZShpdC0+
c2Vjb25kLnRvdGFsVGltZSkKLSAgICAgICAgICAgIC5zZXRIaXRDb3VudChpdC0+c2Vjb25kLmhp
dHMpCi0gICAgICAgICAgICAuc2V0TWF0Y2hDb3VudChpdC0+c2Vjb25kLm1hdGNoZXMpOworICAg
ICAgICAgICAgLnNldFNlbGVjdG9yKGl0LT52YWx1ZS5zZWxlY3RvcikKKyAgICAgICAgICAgIC5z
ZXRVcmwoaXQtPnZhbHVlLnVybCkKKyAgICAgICAgICAgIC5zZXRMaW5lTnVtYmVyKGl0LT52YWx1
ZS5saW5lTnVtYmVyKQorICAgICAgICAgICAgLnNldFRpbWUoaXQtPnZhbHVlLnRvdGFsVGltZSkK
KyAgICAgICAgICAgIC5zZXRIaXRDb3VudChpdC0+dmFsdWUuaGl0cykKKyAgICAgICAgICAgIC5z
ZXRNYXRjaENvdW50KGl0LT52YWx1ZS5tYXRjaGVzKTsKICAgICAgICAgc2VsZWN0b3JQcm9maWxl
RGF0YS0+YWRkSXRlbShlbnRyeS5yZWxlYXNlKCkpOwogICAgIH0KIApAQCAtODMyLDcgKzgzMiw3
IEBAIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZSogSW5zcGVjdG9yQ1NTQWdlbnQ6
OmFzSW5zcGVjdG9yU3R5bGVTaGVldChFbGVtCiAgICAgICAgIHJldHVybiBpbnNwZWN0b3JTdHls
ZVNoZWV0LmdldCgpOwogICAgIH0KIAotICAgIHJldHVybiBpdC0+c2Vjb25kLmdldCgpOworICAg
IHJldHVybiBpdC0+dmFsdWUuZ2V0KCk7CiB9CiAKIEVsZW1lbnQqIEluc3BlY3RvckNTU0FnZW50
OjplbGVtZW50Rm9ySWQoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkKQpAQCAt
OTI2LDcgKzkyNiw3IEBAIEluc3BlY3RvclN0eWxlU2hlZXQqIEluc3BlY3RvckNTU0FnZW50Ojph
c3NlcnRTdHlsZVNoZWV0Rm9ySWQoRXJyb3JTdHJpbmcqIGVycm9yCiAgICAgICAgICplcnJvclN0
cmluZyA9ICJObyBzdHlsZSBzaGVldCB3aXRoIGdpdmVuIGlkIGZvdW5kIjsKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgfQotICAgIHJldHVybiBpdC0+c2Vjb25kLmdldCgpOworICAgIHJldHVybiBp
dC0+dmFsdWUuZ2V0KCk7CiB9CiAKIFN0cmluZyBJbnNwZWN0b3JDU1NBZ2VudDo6ZGV0ZWN0T3Jp
Z2luKENTU1N0eWxlU2hlZXQqIHBhZ2VTdHlsZVNoZWV0LCBEb2N1bWVudCogb3duZXJEb2N1bWVu
dCkKQEAgLTEwMDYsNyArMTAwNiw3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmRpZFJlbW92
ZURPTU5vZGUoTm9kZSogbm9kZSkKICAgICBpZiAoaXQgPT0gbV9ub2RlVG9JbnNwZWN0b3JTdHls
ZVNoZWV0LmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2lkVG9JbnNwZWN0b3JTdHls
ZVNoZWV0LnJlbW92ZShpdC0+c2Vjb25kLT5pZCgpKTsKKyAgICBtX2lkVG9JbnNwZWN0b3JTdHls
ZVNoZWV0LnJlbW92ZShpdC0+dmFsdWUtPmlkKCkpOwogICAgIG1fbm9kZVRvSW5zcGVjdG9yU3R5
bGVTaGVldC5yZW1vdmUobm9kZSk7CiB9CiAKQEAgLTEwMTksNyArMTAxOSw3IEBAIHZvaWQgSW5z
cGVjdG9yQ1NTQWdlbnQ6OmRpZE1vZGlmeURPTUF0dHIoRWxlbWVudCogZWxlbWVudCkKICAgICBp
ZiAoaXQgPT0gbV9ub2RlVG9JbnNwZWN0b3JTdHlsZVNoZWV0LmVuZCgpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBpdC0+c2Vjb25kLT5kaWRNb2RpZnlFbGVtZW50QXR0cmlidXRlKCk7CisgICAg
aXQtPnZhbHVlLT5kaWRNb2RpZnlFbGVtZW50QXR0cmlidXRlKCk7CiB9CiAKIHZvaWQgSW5zcGVj
dG9yQ1NTQWdlbnQ6OnN0eWxlU2hlZXRDaGFuZ2VkKEluc3BlY3RvclN0eWxlU2hlZXQqIHN0eWxl
U2hlZXQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29u
c29sZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb25zb2xl
QWdlbnQuY3BwCmluZGV4IDE2YzkwOWU0ZDA1N2I5ZWY5MDVmMTgzMDlhOWZjOWFlYzg1MzkyYWQu
LjllNmMwMzVjMTAxZWJjNTljYTQ0YWY2YzQ4NjE4M2EwZTIzZWIwMTggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb25zb2xlQWdlbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb25zb2xlQWdlbnQuY3BwCkBAIC0xNjks
NyArMTY5LDcgQEAgdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OnN0b3BUaW1pbmcoY29uc3Qg
U3RyaW5nJiB0aXRsZSwgUGFzc1JlZlB0cjxTY3JpcHRDYWwKICAgICBpZiAoaXQgPT0gbV90aW1l
cy5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZG91YmxlIHN0YXJ0VGltZSA9IGl0LT5z
ZWNvbmQ7CisgICAgZG91YmxlIHN0YXJ0VGltZSA9IGl0LT52YWx1ZTsKICAgICBtX3RpbWVzLnJl
bW92ZShpdCk7CiAKICAgICBkb3VibGUgZWxhcHNlZCA9IGN1cnJlbnRUaW1lKCkgKiAxMDAwIC0g
c3RhcnRUaW1lOwpAQCAtMTkyLDcgKzE5Miw3IEBAIHZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50
Ojpjb3VudChQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gYXJndW1lbnRzLCBQYXNzUmVmCiAg
ICAgaWYgKGl0ID09IG1fY291bnRzLmVuZCgpKQogICAgICAgICBjb3VudCA9IDE7CiAgICAgZWxz
ZSB7Ci0gICAgICAgIGNvdW50ID0gaXQtPnNlY29uZCArIDE7CisgICAgICAgIGNvdW50ID0gaXQt
PnZhbHVlICsgMTsKICAgICAgICAgbV9jb3VudHMucmVtb3ZlKGl0KTsKICAgICB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCmluZGV4IDhiOWFk
OTJlODc0MTQ1MzU0NGJiOGRiY2RiZjQwYjMxYWUwODRlNmQuLjY3Mjg5OWRlNTA4OWFmNjBiMjc2
Mzk2OTEwZDc0NDIxNmVkODFiZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JET01BZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckRPTUFnZW50LmNwcApAQCAtNDYwLDcgKzQ2MCw3IEBAIE5vZGUqIEluc3BlY3RvckRP
TUFnZW50Ojpub2RlRm9ySWQoaW50IGlkKQogCiAgICAgSGFzaE1hcDxpbnQsIE5vZGUqPjo6aXRl
cmF0b3IgaXQgPSBtX2lkVG9Ob2RlLmZpbmQoaWQpOwogICAgIGlmIChpdCAhPSBtX2lkVG9Ob2Rl
LmVuZCgpKQotICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGl0LT52
YWx1ZTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtODg0LDkgKzg4NCw5IEBAIHZvaWQgSW5zcGVj
dG9yRE9NQWdlbnQ6OnBlcmZvcm1TZWFyY2goRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIHdo
aXRlc3BhY2VUcmltCiAgICAgU2VhcmNoUmVzdWx0czo6aXRlcmF0b3IgcmVzdWx0c0l0ID0gbV9z
ZWFyY2hSZXN1bHRzLmFkZCgqc2VhcmNoSWQsIFZlY3RvcjxSZWZQdHI8Tm9kZT4gPigpKS5pdGVy
YXRvcjsKIAogICAgIGZvciAoTGlzdEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRvciBpdCA9IHJlc3Vs
dENvbGxlY3Rvci5iZWdpbigpOyBpdCAhPSByZXN1bHRDb2xsZWN0b3IuZW5kKCk7ICsraXQpCi0g
ICAgICAgIHJlc3VsdHNJdC0+c2Vjb25kLmFwcGVuZCgqaXQpOworICAgICAgICByZXN1bHRzSXQt
PnZhbHVlLmFwcGVuZCgqaXQpOwogCi0gICAgKnJlc3VsdENvdW50ID0gcmVzdWx0c0l0LT5zZWNv
bmQuc2l6ZSgpOworICAgICpyZXN1bHRDb3VudCA9IHJlc3VsdHNJdC0+dmFsdWUuc2l6ZSgpOwog
fQogCiB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRTZWFyY2hSZXN1bHRzKEVycm9yU3RyaW5n
KiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBzZWFyY2hJZCwgaW50IGZyb21JbmRleCwgaW50
IHRvSW5kZXgsIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8aW50PiA+JiBub2RlSWRzKQpAQCAt
ODk3LDcgKzg5Nyw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldFNlYXJjaFJlc3VsdHMo
RXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBpbnQgc2l6ZSA9IGl0LT5zZWNvbmQuc2l6ZSgpOworICAgIGludCBzaXpl
ID0gaXQtPnZhbHVlLnNpemUoKTsKICAgICBpZiAoZnJvbUluZGV4IDwgMCB8fCB0b0luZGV4ID4g
c2l6ZSB8fCBmcm9tSW5kZXggPj0gdG9JbmRleCkgewogICAgICAgICAqZXJyb3JTdHJpbmcgPSAi
SW52YWxpZCBzZWFyY2ggcmVzdWx0IHJhbmdlIjsKICAgICAgICAgcmV0dXJuOwpAQCAtOTA1LDcg
KzkwNSw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldFNlYXJjaFJlc3VsdHMoRXJyb3JT
dHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmCiAKICAgICBub2RlSWRzID0gVHlwZUJ1
aWxkZXI6OkFycmF5PGludD46OmNyZWF0ZSgpOwogICAgIGZvciAoaW50IGkgPSBmcm9tSW5kZXg7
IGkgPCB0b0luZGV4OyArK2kpCi0gICAgICAgIG5vZGVJZHMtPmFkZEl0ZW0ocHVzaE5vZGVQYXRo
VG9Gcm9udGVuZCgoaXQtPnNlY29uZClbaV0uZ2V0KCkpKTsKKyAgICAgICAgbm9kZUlkcy0+YWRk
SXRlbShwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKChpdC0+dmFsdWUpW2ldLmdldCgpKSk7CiB9CiAK
IHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpc2NhcmRTZWFyY2hSZXN1bHRzKEVycm9yU3RyaW5n
KiwgY29uc3QgU3RyaW5nJiBzZWFyY2hJZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50LmNwcAppbmRleCAxZDY0OTM3ZmU0MGU5
YTRhZDgzMDVhNmMwYTllNTU0YjI3OWZjZjJhLi5hYzY0YWNiNjg2OGM0ZDFiYTZhOTkzMzdlMzU5
M2U3ZmNhMDI3MTVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRE9NRGVidWdnZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckRPTURlYnVnZ2VyQWdlbnQuY3BwCkBAIC00MDEsOCArNDAxLDggQEAgdm9pZCBJbnNw
ZWN0b3JET01EZWJ1Z2dlckFnZW50Ojp3aWxsU2VuZFhNTEh0dHBSZXF1ZXN0KGNvbnN0IFN0cmlu
ZyYgdXJsKQogICAgIGVsc2UgewogICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB4aHJC
cmVha3BvaW50cyA9IG1fc3RhdGUtPmdldE9iamVjdChET01EZWJ1Z2dlckFnZW50U3RhdGU6Onho
ckJyZWFrcG9pbnRzKTsKICAgICAgICAgZm9yIChJbnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9yIGl0
ID0geGhyQnJlYWtwb2ludHMtPmJlZ2luKCk7IGl0ICE9IHhockJyZWFrcG9pbnRzLT5lbmQoKTsg
KytpdCkgewotICAgICAgICAgICAgaWYgKHVybC5jb250YWlucyhpdC0+Zmlyc3QpKSB7Ci0gICAg
ICAgICAgICAgICAgYnJlYWtwb2ludFVSTCA9IGl0LT5maXJzdDsKKyAgICAgICAgICAgIGlmICh1
cmwuY29udGFpbnMoaXQtPmtleSkpIHsKKyAgICAgICAgICAgICAgICBicmVha3BvaW50VVJMID0g
aXQtPmtleTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3Jh
Z2VBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFn
ZUFnZW50LmNwcAppbmRleCA2NThlYjJkMjQ4MzYzMDZiYWE3Y2Q4MDRlM2I2NGY0ODk2N2IyMWRm
Li5mZTNjZTdlYjEwYmY2NjE2MjJhNjRiMzJiMjAzNjNmN2MzYTcxNjZiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcApA
QCAtNzgsNyArNzgsNyBAQCB2b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6Y2xlYXJGcm9u
dGVuZCgpCiB7CiAgICAgRE9NU3RvcmFnZVJlc291cmNlc01hcDo6aXRlcmF0b3IgZG9tU3RvcmFn
ZUVuZCA9IG1fcmVzb3VyY2VzLmVuZCgpOwogICAgIGZvciAoRE9NU3RvcmFnZVJlc291cmNlc01h
cDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSBkb21TdG9yYWdlRW5k
OyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT51bmJpbmQoKTsKKyAgICAgICAgaXQtPnZhbHVl
LT51bmJpbmQoKTsKICAgICBtX2Zyb250ZW5kID0gMDsKICAgICBkaXNhYmxlKDApOwogfQpAQCAt
OTcsNyArOTcsNyBAQCB2b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6ZW5hYmxlKEVycm9y
U3RyaW5nKikKIAogICAgIERPTVN0b3JhZ2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIHJlc291cmNl
c0VuZCA9IG1fcmVzb3VyY2VzLmVuZCgpOwogICAgIGZvciAoRE9NU3RvcmFnZVJlc291cmNlc01h
cDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSByZXNvdXJjZXNFbmQ7
ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPmJpbmQobV9mcm9udGVuZCk7CisgICAgICAgIGl0
LT52YWx1ZS0+YmluZChtX2Zyb250ZW5kKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JET01TdG9yYWdl
QWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcqKQpAQCAtMTU2LDggKzE1Niw4IEBAIGludCBJbnNw
ZWN0b3JET01TdG9yYWdlQWdlbnQ6OnN0b3JhZ2VJZChTdG9yYWdlKiBzdG9yYWdlKQogICAgIGJv
b2wgaXNMb2NhbFN0b3JhZ2UgPSAoZnJhbWUtPmRvbVdpbmRvdygpLT5sb2NhbFN0b3JhZ2UoZWMp
ID09IHN0b3JhZ2UgJiYgIWVjKTsKICAgICBET01TdG9yYWdlUmVzb3VyY2VzTWFwOjppdGVyYXRv
ciBkb21TdG9yYWdlRW5kID0gbV9yZXNvdXJjZXMuZW5kKCk7CiAgICAgZm9yIChET01TdG9yYWdl
UmVzb3VyY2VzTWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGRv
bVN0b3JhZ2VFbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQtPmlzU2FtZUhvc3RB
bmRUeXBlKGZyYW1lLCBpc0xvY2FsU3RvcmFnZSkpCi0gICAgICAgICAgICByZXR1cm4gaXQtPmZp
cnN0OworICAgICAgICBpZiAoaXQtPnZhbHVlLT5pc1NhbWVIb3N0QW5kVHlwZShmcmFtZSwgaXNM
b2NhbFN0b3JhZ2UpKQorICAgICAgICAgICAgcmV0dXJuIGl0LT5rZXk7CiAgICAgfQogICAgIHJl
dHVybiAwOwogfQpAQCAtMTY3LDE0ICsxNjcsMTQgQEAgSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291
cmNlKiBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmdldERPTVN0b3JhZ2VSZXNvdXJjZUZvckkK
ICAgICBET01TdG9yYWdlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmZp
bmQoc3RvcmFnZUlkKTsKICAgICBpZiAoaXQgPT0gbV9yZXNvdXJjZXMuZW5kKCkpCiAgICAgICAg
IHJldHVybiAwOwotICAgIHJldHVybiBpdC0+c2Vjb25kLmdldCgpOworICAgIHJldHVybiBpdC0+
dmFsdWUuZ2V0KCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpkaWRVc2VE
T01TdG9yYWdlKFN0b3JhZ2VBcmVhKiBzdG9yYWdlQXJlYSwgYm9vbCBpc0xvY2FsU3RvcmFnZSwg
RnJhbWUqIGZyYW1lKQogewogICAgIERPTVN0b3JhZ2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGRv
bVN0b3JhZ2VFbmQgPSBtX3Jlc291cmNlcy5lbmQoKTsKICAgICBmb3IgKERPTVN0b3JhZ2VSZXNv
dXJjZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZG9tU3Rv
cmFnZUVuZDsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnNlY29uZC0+aXNTYW1lSG9zdEFuZFR5
cGUoZnJhbWUsIGlzTG9jYWxTdG9yYWdlKSkKKyAgICAgICAgaWYgKGl0LT52YWx1ZS0+aXNTYW1l
SG9zdEFuZFR5cGUoZnJhbWUsIGlzTG9jYWxTdG9yYWdlKSkKICAgICAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JE
YXRhYmFzZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRh
YmFzZUFnZW50LmNwcAppbmRleCAwNmY2NTI0ODhlYzY0YWE3OWExYTY5YTI2YTk0MDAxZDEzMGY4
ZmM4Li45YjFmMWZhN2UxNjU4MjUzOGIwZWI2ZmZlYmIyZWM0YTI0MWRjMzE1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuY3BwCkBA
IC0yNzUsNyArMjc1LDcgQEAgdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjplbmFibGUoRXJy
b3JTdHJpbmcqKQogCiAgICAgRGF0YWJhc2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGRhdGFiYXNl
c0VuZCA9IG1fcmVzb3VyY2VzLmVuZCgpOwogICAgIGZvciAoRGF0YWJhc2VSZXNvdXJjZXNNYXA6
Oml0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZGF0YWJhc2VzRW5kOyAr
K2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5iaW5kKG1fZnJvbnRlbmRQcm92aWRlci0+ZnJvbnRl
bmQoKSk7CisgICAgICAgIGl0LT52YWx1ZS0+YmluZChtX2Zyb250ZW5kUHJvdmlkZXItPmZyb250
ZW5kKCkpOwogfQogCiB2b2lkIEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmRpc2FibGUoRXJyb3JT
dHJpbmcqKQpAQCAtMzMxLDggKzMzMSw4IEBAIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6
ZXhlY3V0ZVNRTChFcnJvclN0cmluZyogZXJyb3IsIGludCBkYXRhYmFzZUlkLCBjb25zCiBpbnQg
SW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6ZGF0YWJhc2VJZChEYXRhYmFzZSogZGF0YWJhc2UpCiB7
CiAgICAgZm9yIChEYXRhYmFzZVJlc291cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNl
cy5iZWdpbigpOyBpdCAhPSBtX3Jlc291cmNlcy5lbmQoKTsgKytpdCkgewotICAgICAgICBpZiAo
aXQtPnNlY29uZC0+ZGF0YWJhc2UoKSA9PSBkYXRhYmFzZSkKLSAgICAgICAgICAgIHJldHVybiBp
dC0+Zmlyc3Q7CisgICAgICAgIGlmIChpdC0+dmFsdWUtPmRhdGFiYXNlKCkgPT0gZGF0YWJhc2Up
CisgICAgICAgICAgICByZXR1cm4gaXQtPmtleTsKICAgICB9CiAgICAgcmV0dXJuIDA7CiB9CkBA
IC0zNDAsOCArMzQwLDggQEAgaW50IEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmRhdGFiYXNlSWQo
RGF0YWJhc2UqIGRhdGFiYXNlKQogSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZSogSW5zcGVjdG9y
RGF0YWJhc2VBZ2VudDo6ZmluZEJ5RmlsZU5hbWUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSkKIHsK
ICAgICBmb3IgKERhdGFiYXNlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2Vz
LmJlZ2luKCk7IGl0ICE9IG1fcmVzb3VyY2VzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmIChp
dC0+c2Vjb25kLT5kYXRhYmFzZSgpLT5maWxlTmFtZSgpID09IGZpbGVOYW1lKQotICAgICAgICAg
ICAgcmV0dXJuIGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIGlmIChpdC0+dmFsdWUtPmRhdGFi
YXNlKCktPmZpbGVOYW1lKCkgPT0gZmlsZU5hbWUpCisgICAgICAgICAgICByZXR1cm4gaXQtPnZh
bHVlLmdldCgpOwogICAgIH0KICAgICByZXR1cm4gMDsKIH0KQEAgLTM1MSw3ICszNTEsNyBAQCBE
YXRhYmFzZSogSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6ZGF0YWJhc2VGb3JJZChpbnQgZGF0YWJh
c2VJZCkKICAgICBEYXRhYmFzZVJlc291cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNl
cy5maW5kKGRhdGFiYXNlSWQpOwogICAgIGlmIChpdCA9PSBtX3Jlc291cmNlcy5lbmQoKSkKICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQtPmRhdGFiYXNlKCk7CisgICAg
cmV0dXJuIGl0LT52YWx1ZS0+ZGF0YWJhc2UoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2Vy
QWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdl
bnQuY3BwCmluZGV4IDkyNGJlMzg0MjlmNzQwOTYyM2IyNjc3OTJiYWQwNDU2MzNkYzg4ZjguLjA3
NDM1MDBkYTM4YTU2OWJhYWM0OTA5ZGE2M2VhZDNiNjIzNjVjMWUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAKQEAgLTI0MCw5
ICsyNDAsOSBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnRCeVVy
bChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGludCBsaQogCiAgICAgU2NyaXB0QnJlYWtwb2lu
dCBicmVha3BvaW50KGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwgY29uZGl0aW9uKTsKICAgICBm
b3IgKFNjcmlwdHNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zY3JpcHRzLmJlZ2luKCk7IGl0ICE9IG1f
c2NyaXB0cy5lbmQoKTsgKytpdCkgewotICAgICAgICBpZiAoIW1hdGNoZXMoaXQtPnNlY29uZC51
cmwsIHVybCwgaXNSZWdleCkpCisgICAgICAgIGlmICghbWF0Y2hlcyhpdC0+dmFsdWUudXJsLCB1
cmwsIGlzUmVnZXgpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IGxvY2F0aW9uID0gcmVzb2x2ZUJyZWFrcG9pbnQoYnJlYWtwb2ludElkLCBp
dC0+Zmlyc3QsIGJyZWFrcG9pbnQpOworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBs
b2NhdGlvbiA9IHJlc29sdmVCcmVha3BvaW50KGJyZWFrcG9pbnRJZCwgaXQtPmtleSwgYnJlYWtw
b2ludCk7CiAgICAgICAgIGlmIChsb2NhdGlvbikKICAgICAgICAgICAgIGxvY2F0aW9ucy0+cHVz
aE9iamVjdChsb2NhdGlvbik7CiAgICAgfQpAQCAtMjkyLDggKzI5Miw4IEBAIHZvaWQgSW5zcGVj
dG9yRGVidWdnZXJBZ2VudDo6cmVtb3ZlQnJlYWtwb2ludChFcnJvclN0cmluZyosIGNvbnN0IFN0
cmluZyYgYnJlYWtwCiAgICAgQnJlYWtwb2ludElkVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNN
YXA6Oml0ZXJhdG9yIGRlYnVnU2VydmVyQnJlYWtwb2ludElkc0l0ZXJhdG9yID0gbV9icmVha3Bv
aW50SWRUb0RlYnVnU2VydmVyQnJlYWtwb2ludElkcy5maW5kKGJyZWFrcG9pbnRJZCk7CiAgICAg
aWYgKGRlYnVnU2VydmVyQnJlYWtwb2ludElkc0l0ZXJhdG9yID09IG1fYnJlYWtwb2ludElkVG9E
ZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGRlYnVnU2VydmVyQnJlYWtwb2ludElkc0l0ZXJhdG9yLT5zZWNv
bmQuc2l6ZSgpOyArK2kpCi0gICAgICAgIHNjcmlwdERlYnVnU2VydmVyKCkucmVtb3ZlQnJlYWtw
b2ludChkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNJdGVyYXRvci0+c2Vjb25kW2ldKTsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGRlYnVnU2VydmVyQnJlYWtwb2ludElkc0l0ZXJhdG9yLT52
YWx1ZS5zaXplKCk7ICsraSkKKyAgICAgICAgc2NyaXB0RGVidWdTZXJ2ZXIoKS5yZW1vdmVCcmVh
a3BvaW50KGRlYnVnU2VydmVyQnJlYWtwb2ludElkc0l0ZXJhdG9yLT52YWx1ZVtpXSk7CiAgICAg
bV9icmVha3BvaW50SWRUb0RlYnVnU2VydmVyQnJlYWtwb2ludElkcy5yZW1vdmUoZGVidWdTZXJ2
ZXJCcmVha3BvaW50SWRzSXRlcmF0b3IpOwogfQogCkBAIC0zMjEsNyArMzIxLDcgQEAgUGFzc1Jl
ZlB0cjxUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uPiBJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50OjpyZXNvbHZlQnJlYWsKICAgICBTY3JpcHRzTWFwOjppdGVyYXRvciBzY3JpcHRJdGVyYXRv
ciA9IG1fc2NyaXB0cy5maW5kKHNjcmlwdElkKTsKICAgICBpZiAoc2NyaXB0SXRlcmF0b3IgPT0g
bV9zY3JpcHRzLmVuZCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBTY3JpcHQmIHNjcmlwdCA9
IHNjcmlwdEl0ZXJhdG9yLT5zZWNvbmQ7CisgICAgU2NyaXB0JiBzY3JpcHQgPSBzY3JpcHRJdGVy
YXRvci0+dmFsdWU7CiAgICAgaWYgKGJyZWFrcG9pbnQubGluZU51bWJlciA8IHNjcmlwdC5zdGFy
dExpbmUgfHwgc2NyaXB0LmVuZExpbmUgPCBicmVha3BvaW50LmxpbmVOdW1iZXIpCiAgICAgICAg
IHJldHVybiAwOwogCkBAIC0zMzQsNyArMzM0LDcgQEAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6
RGVidWdnZXI6OkxvY2F0aW9uPiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZXNvbHZlQnJlYWsK
ICAgICBCcmVha3BvaW50SWRUb0RlYnVnU2VydmVyQnJlYWtwb2ludElkc01hcDo6aXRlcmF0b3Ig
ZGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzSXRlcmF0b3IgPSBtX2JyZWFrcG9pbnRJZFRvRGVidWdT
ZXJ2ZXJCcmVha3BvaW50SWRzLmZpbmQoYnJlYWtwb2ludElkKTsKICAgICBpZiAoZGVidWdTZXJ2
ZXJCcmVha3BvaW50SWRzSXRlcmF0b3IgPT0gbV9icmVha3BvaW50SWRUb0RlYnVnU2VydmVyQnJl
YWtwb2ludElkcy5lbmQoKSkKICAgICAgICAgZGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzSXRlcmF0
b3IgPSBtX2JyZWFrcG9pbnRJZFRvRGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzLnNldChicmVha3Bv
aW50SWQsIFZlY3RvcjxTdHJpbmc+KCkpLml0ZXJhdG9yOwotICAgIGRlYnVnU2VydmVyQnJlYWtw
b2ludElkc0l0ZXJhdG9yLT5zZWNvbmQuYXBwZW5kKGRlYnVnU2VydmVyQnJlYWtwb2ludElkKTsK
KyAgICBkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNJdGVyYXRvci0+dmFsdWUuYXBwZW5kKGRlYnVn
U2VydmVyQnJlYWtwb2ludElkKTsKIAogICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6RGVidWdnZXI6
OkxvY2F0aW9uPiBsb2NhdGlvbiA9IFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRpb246OmNy
ZWF0ZSgpCiAgICAgICAgIC5zZXRTY3JpcHRJZChzY3JpcHRJZCkKQEAgLTM2MCw3ICszNjAsNyBA
QCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNlYXJjaEluQ29udGVudChFcnJvclN0cmlu
ZyogZXJyb3IsIGNvbnN0IFN0cmluZyYgcwogCiAgICAgU2NyaXB0c01hcDo6aXRlcmF0b3IgaXQg
PSBtX3NjcmlwdHMuZmluZChzY3JpcHRJZCk7CiAgICAgaWYgKGl0ICE9IG1fc2NyaXB0cy5lbmQo
KSkKLSAgICAgICAgcmVzdWx0cyA9IENvbnRlbnRTZWFyY2hVdGlsczo6c2VhcmNoSW5UZXh0QnlM
aW5lcyhpdC0+c2Vjb25kLnNvdXJjZSwgcXVlcnksIGNhc2VTZW5zaXRpdmUsIGlzUmVnZXgpOwor
ICAgICAgICByZXN1bHRzID0gQ29udGVudFNlYXJjaFV0aWxzOjpzZWFyY2hJblRleHRCeUxpbmVz
KGl0LT52YWx1ZS5zb3VyY2UsIHF1ZXJ5LCBjYXNlU2Vuc2l0aXZlLCBpc1JlZ2V4KTsKICAgICBl
bHNlCiAgICAgICAgICplcnJvciA9ICJObyBzY3JpcHQgZm9yIGlkOiAiICsgc2NyaXB0SWQ7CiB9
CkBAIC0zODEsNyArMzgxLDcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpnZXRTY3Jp
cHRTb3VyY2UoRXJyb3JTdHJpbmcqIGVycm9yLCBjb25zdCBTdHJpbmcmIHMKIHsKICAgICBTY3Jp
cHRzTWFwOjppdGVyYXRvciBpdCA9IG1fc2NyaXB0cy5maW5kKHNjcmlwdElkKTsKICAgICBpZiAo
aXQgIT0gbV9zY3JpcHRzLmVuZCgpKQotICAgICAgICAqc2NyaXB0U291cmNlID0gaXQtPnNlY29u
ZC5zb3VyY2U7CisgICAgICAgICpzY3JpcHRTb3VyY2UgPSBpdC0+dmFsdWUuc291cmNlOwogICAg
IGVsc2UKICAgICAgICAgKmVycm9yID0gIk5vIHNjcmlwdCBmb3IgaWQ6ICIgKyBzY3JpcHRJZDsK
IH0KQEAgLTUzNiw3ICs1MzYsNyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBh
cnNlU291cmNlKGNvbnN0IFN0cmluZyYgc2NyaXB0SWQsIGNvbnN0IFNjcmlwdAogCiAgICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gYnJlYWtwb2ludHNDb29raWUgPSBtX3N0YXRlLT5nZXRPYmpl
Y3QoRGVidWdnZXJBZ2VudFN0YXRlOjpqYXZhU2NyaXB0QnJlYWtwb2ludHMpOwogICAgIGZvciAo
SW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciBpdCA9IGJyZWFrcG9pbnRzQ29va2llLT5iZWdpbigp
OyBpdCAhPSBicmVha3BvaW50c0Nvb2tpZS0+ZW5kKCk7ICsraXQpIHsKLSAgICAgICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gYnJlYWtwb2ludE9iamVjdCA9IGl0LT5zZWNvbmQtPmFzT2JqZWN0
KCk7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJyZWFrcG9pbnRPYmplY3QgPSBp
dC0+dmFsdWUtPmFzT2JqZWN0KCk7CiAgICAgICAgIGJvb2wgaXNSZWdleDsKICAgICAgICAgYnJl
YWtwb2ludE9iamVjdC0+Z2V0Qm9vbGVhbigiaXNSZWdleCIsICZpc1JlZ2V4KTsKICAgICAgICAg
U3RyaW5nIHVybDsKQEAgLTU0Nyw5ICs1NDcsOSBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ6OmRpZFBhcnNlU291cmNlKGNvbnN0IFN0cmluZyYgc2NyaXB0SWQsIGNvbnN0IFNjcmlwdAog
ICAgICAgICBicmVha3BvaW50T2JqZWN0LT5nZXROdW1iZXIoImxpbmVOdW1iZXIiLCAmYnJlYWtw
b2ludC5saW5lTnVtYmVyKTsKICAgICAgICAgYnJlYWtwb2ludE9iamVjdC0+Z2V0TnVtYmVyKCJj
b2x1bW5OdW1iZXIiLCAmYnJlYWtwb2ludC5jb2x1bW5OdW1iZXIpOwogICAgICAgICBicmVha3Bv
aW50T2JqZWN0LT5nZXRTdHJpbmcoImNvbmRpdGlvbiIsICZicmVha3BvaW50LmNvbmRpdGlvbik7
Ci0gICAgICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uPiBsb2NhdGlv
biA9IHJlc29sdmVCcmVha3BvaW50KGl0LT5maXJzdCwgc2NyaXB0SWQsIGJyZWFrcG9pbnQpOwor
ICAgICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj4gbG9jYXRpb24g
PSByZXNvbHZlQnJlYWtwb2ludChpdC0+a2V5LCBzY3JpcHRJZCwgYnJlYWtwb2ludCk7CiAgICAg
ICAgIGlmIChsb2NhdGlvbikKLSAgICAgICAgICAgIG1fZnJvbnRlbmQtPmJyZWFrcG9pbnRSZXNv
bHZlZChpdC0+Zmlyc3QsIGxvY2F0aW9uKTsKKyAgICAgICAgICAgIG1fZnJvbnRlbmQtPmJyZWFr
cG9pbnRSZXNvbHZlZChpdC0+a2V5LCBsb2NhdGlvbik7CiAgICAgfQogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTWVtb3J5QWdlbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck1lbW9yeUFnZW50LmNwcAppbmRleCA1ZTQz
Y2I5ZDFlMTg1NGQ5ZjdmOWU4NGIxMDZiM2I1MDY2ZWY0ZjhiLi5kNGFmZmRiYTM2MzMzZjA5NjNm
NzYzMjEzYmQ0OWVmZDExYTBmMmEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yTWVtb3J5QWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JNZW1vcnlBZ2VudC5jcHAKQEAgLTEyMCw4ICsxMjAsOCBAQCBwdWJsaWM6CiAg
ICAgewogICAgICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGNoaWxkcmVuU3RhdHMgPSBJbnNw
ZWN0b3JBcnJheTo6Y3JlYXRlKCk7CiAgICAgICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIGludD46
Oml0ZXJhdG9yIGl0ID0gbV9ub2RlTmFtZVRvQ291bnQuYmVnaW4oKTsgaXQgIT0gbV9ub2RlTmFt
ZVRvQ291bnQuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgICAgIFJlZlB0cjxOb2RlQ291bnQ+IG5v
ZGVDb3VudCA9IE5vZGVDb3VudDo6Y3JlYXRlKCkuc2V0Tm9kZU5hbWUoaXQtPmZpcnN0KQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC5zZXRDb3VudChpdC0+c2Vjb25kKTsKKyAgICAgICAgICAgIFJlZlB0cjxOb2RlQ291bnQ+IG5v
ZGVDb3VudCA9IE5vZGVDb3VudDo6Y3JlYXRlKCkuc2V0Tm9kZU5hbWUoaXQtPmtleSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAu
c2V0Q291bnQoaXQtPnZhbHVlKTsKICAgICAgICAgICAgIGNoaWxkcmVuU3RhdHMtPnB1c2hPYmpl
Y3Qobm9kZUNvdW50KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gY2hpbGRyZW5TdGF0cy5y
ZWxlYXNlKCk7CkBAIC0xMzEsOCArMTMxLDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgUmVm
UHRyPEluc3BlY3RvckFycmF5PiBsaXN0ZW5lclN0YXRzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0
ZSgpOwogICAgICAgICBmb3IgKEhhc2hNYXA8QXRvbWljU3RyaW5nLCBpbnQ+OjppdGVyYXRvciBp
dCA9IG1fZXZlbnRUeXBlVG9Db3VudC5iZWdpbigpOyBpdCAhPSBtX2V2ZW50VHlwZVRvQ291bnQu
ZW5kKCk7ICsraXQpIHsKLSAgICAgICAgICAgIFJlZlB0cjxMaXN0ZW5lckNvdW50PiBsaXN0ZW5l
ckNvdW50ID0gTGlzdGVuZXJDb3VudDo6Y3JlYXRlKCkuc2V0VHlwZShpdC0+Zmlyc3QpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLnNldENvdW50KGl0LT5zZWNvbmQpOworICAgICAgICAgICAgUmVmUHRyPExp
c3RlbmVyQ291bnQ+IGxpc3RlbmVyQ291bnQgPSBMaXN0ZW5lckNvdW50OjpjcmVhdGUoKS5zZXRU
eXBlKGl0LT5rZXkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldENvdW50KGl0LT52YWx1ZSk7CiAgICAg
ICAgICAgICBsaXN0ZW5lclN0YXRzLT5wdXNoT2JqZWN0KGxpc3RlbmVyQ291bnQpOwogICAgICAg
ICB9CiAgICAgICAgIHJldHVybiBsaXN0ZW5lclN0YXRzLnJlbGVhc2UoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKaW5kZXggOTBkNGYyNDhl
NzNlMWM1ZjI1ZDA2OWZjYTQ3MzU4YzM5NTBlOGUyMC4uYzYzNmRkNDFjZjY5NjU4ODAwZGZiYzFh
NzNkNTNhMjZmMmM5MDAyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclBhZ2VBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclBhZ2VBZ2VudC5jcHAKQEAgLTQzMSw3ICs0MzEsNyBAQCBzdGF0aWMgVmVjdG9yPENhY2hl
ZFJlc291cmNlKj4gY2FjaGVkUmVzb3VyY2VzRm9yRnJhbWUoRnJhbWUqIGZyYW1lKQogICAgIGNv
bnN0IENhY2hlZFJlc291cmNlTG9hZGVyOjpEb2N1bWVudFJlc291cmNlTWFwJiBhbGxSZXNvdXJj
ZXMgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS0+YWxsQ2FjaGVk
UmVzb3VyY2VzKCk7CiAgICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OkRvY3VtZW50UmVzb3VyY2VN
YXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGFsbFJlc291cmNlcy5lbmQoKTsKICAgICBmb3IgKENh
Y2hlZFJlc291cmNlTG9hZGVyOjpEb2N1bWVudFJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IGFsbFJlc291cmNlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgQ2Fj
aGVkUmVzb3VyY2UqIGNhY2hlZFJlc291cmNlID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAg
Q2FjaGVkUmVzb3VyY2UqIGNhY2hlZFJlc291cmNlID0gaXQtPnZhbHVlLmdldCgpOwogCiAgICAg
ICAgIHN3aXRjaCAoY2FjaGVkUmVzb3VyY2UtPnR5cGUoKSkgewogICAgICAgICBjYXNlIENhY2hl
ZFJlc291cmNlOjpJbWFnZVJlc291cmNlOgpAQCAtNzAxLDcgKzcwMSw3IEBAIHZvaWQgSW5zcGVj
dG9yUGFnZUFnZW50OjpkaWRDbGVhcldpbmRvd09iamVjdEluV29ybGQoRnJhbWUqIGZyYW1lLCBE
T01XcmFwcGVyV29yCiAgICAgICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gc2NyaXB0cy0+ZW5kKCk7CiAgICAgICAgIGZvciAoSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9p
dGVyYXRvciBpdCA9IHNjcmlwdHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAg
ICAgICAgU3RyaW5nIHNjcmlwdFRleHQ7Ci0gICAgICAgICAgICBpZiAoaXQtPnNlY29uZC0+YXNT
dHJpbmcoJnNjcmlwdFRleHQpKQorICAgICAgICAgICAgaWYgKGl0LT52YWx1ZS0+YXNTdHJpbmco
JnNjcmlwdFRleHQpKQogICAgICAgICAgICAgICAgIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLT5p
bmplY3RTY3JpcHQoc2NyaXB0VGV4dCwgbWFpbldvcmxkU2NyaXB0U3RhdGUoZnJhbWUpKTsKICAg
ICAgICAgfQogICAgIH0KQEAgLTczMyw4ICs3MzMsOCBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2Vu
dDo6ZnJhbWVEZXRhY2hlZChGcmFtZSogZnJhbWUpCiB7CiAgICAgSGFzaE1hcDxGcmFtZSosIFN0
cmluZz46Oml0ZXJhdG9yIGl0ZXJhdG9yID0gbV9mcmFtZVRvSWRlbnRpZmllci5maW5kKGZyYW1l
KTsKICAgICBpZiAoaXRlcmF0b3IgIT0gbV9mcmFtZVRvSWRlbnRpZmllci5lbmQoKSkgewotICAg
ICAgICBtX2Zyb250ZW5kLT5mcmFtZURldGFjaGVkKGl0ZXJhdG9yLT5zZWNvbmQpOwotICAgICAg
ICBtX2lkZW50aWZpZXJUb0ZyYW1lLnJlbW92ZShpdGVyYXRvci0+c2Vjb25kKTsKKyAgICAgICAg
bV9mcm9udGVuZC0+ZnJhbWVEZXRhY2hlZChpdGVyYXRvci0+dmFsdWUpOworICAgICAgICBtX2lk
ZW50aWZpZXJUb0ZyYW1lLnJlbW92ZShpdGVyYXRvci0+dmFsdWUpOwogICAgICAgICBtX2ZyYW1l
VG9JZGVudGlmaWVyLnJlbW92ZShpdGVyYXRvcik7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwCmluZGV4IGM3NmFh
ZTgxM2U4YjIyZjc1ZjE1YTZkOWExZWU0Y2UxNDE0ZmZlZmUuLjBkZWZjZmQwMWQzOGE5MDJkOWMx
NWY5OGM5NjEzYzcxM2NmZTU0ZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAKQEAgLTI0NCwxMCArMjQ0LDEwIEBAIHZvaWQg
SW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6Z2V0UHJvZmlsZUhlYWRlcnMoRXJyb3JTdHJpbmcqLCBS
ZWZQdHI8SW5zcGVjdG9yQXJyCiB7CiAgICAgUHJvZmlsZXNNYXA6Oml0ZXJhdG9yIHByb2ZpbGVz
RW5kID0gbV9wcm9maWxlcy5lbmQoKTsKICAgICBmb3IgKFByb2ZpbGVzTWFwOjppdGVyYXRvciBp
dCA9IG1fcHJvZmlsZXMuYmVnaW4oKTsgaXQgIT0gcHJvZmlsZXNFbmQ7ICsraXQpCi0gICAgICAg
IGhlYWRlcnMtPnB1c2hPYmplY3QoY3JlYXRlUHJvZmlsZUhlYWRlcigqaXQtPnNlY29uZCkpOwor
ICAgICAgICBoZWFkZXJzLT5wdXNoT2JqZWN0KGNyZWF0ZVByb2ZpbGVIZWFkZXIoKml0LT52YWx1
ZSkpOwogICAgIEhlYXBTbmFwc2hvdHNNYXA6Oml0ZXJhdG9yIHNuYXBzaG90c0VuZCA9IG1fc25h
cHNob3RzLmVuZCgpOwogICAgIGZvciAoSGVhcFNuYXBzaG90c01hcDo6aXRlcmF0b3IgaXQgPSBt
X3NuYXBzaG90cy5iZWdpbigpOyBpdCAhPSBzbmFwc2hvdHNFbmQ7ICsraXQpCi0gICAgICAgIGhl
YWRlcnMtPnB1c2hPYmplY3QoY3JlYXRlU25hcHNob3RIZWFkZXIoKml0LT5zZWNvbmQpKTsKKyAg
ICAgICAgaGVhZGVycy0+cHVzaE9iamVjdChjcmVhdGVTbmFwc2hvdEhlYWRlcigqaXQtPnZhbHVl
KSk7CiB9CiAKIG5hbWVzcGFjZSB7CkBAIC0yNzEsMTUgKzI3MSwxNSBAQCB2b2lkIEluc3BlY3Rv
clByb2ZpbGVyQWdlbnQ6OmdldFByb2ZpbGUoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIHR5
cGUsIGludCByYQogICAgIGlmICh0eXBlID09IENQVVByb2ZpbGVUeXBlKSB7CiAgICAgICAgIFBy
b2ZpbGVzTWFwOjppdGVyYXRvciBpdCA9IG1fcHJvZmlsZXMuZmluZCh1aWQpOwogICAgICAgICBp
ZiAoaXQgIT0gbV9wcm9maWxlcy5lbmQoKSkgewotICAgICAgICAgICAgcHJvZmlsZU9iamVjdCA9
IGNyZWF0ZVByb2ZpbGVIZWFkZXIoKml0LT5zZWNvbmQpOwotICAgICAgICAgICAgcHJvZmlsZU9i
amVjdC0+c2V0T2JqZWN0KCJoZWFkIiwgaXQtPnNlY29uZC0+YnVpbGRJbnNwZWN0b3JPYmplY3RG
b3JIZWFkKCkpOwotICAgICAgICAgICAgaWYgKGl0LT5zZWNvbmQtPmJvdHRvbVVwSGVhZCgpKQot
ICAgICAgICAgICAgICAgIHByb2ZpbGVPYmplY3QtPnNldE9iamVjdCgiYm90dG9tVXBIZWFkIiwg
aXQtPnNlY29uZC0+YnVpbGRJbnNwZWN0b3JPYmplY3RGb3JCb3R0b21VcEhlYWQoKSk7CisgICAg
ICAgICAgICBwcm9maWxlT2JqZWN0ID0gY3JlYXRlUHJvZmlsZUhlYWRlcigqaXQtPnZhbHVlKTsK
KyAgICAgICAgICAgIHByb2ZpbGVPYmplY3QtPnNldE9iamVjdCgiaGVhZCIsIGl0LT52YWx1ZS0+
YnVpbGRJbnNwZWN0b3JPYmplY3RGb3JIZWFkKCkpOworICAgICAgICAgICAgaWYgKGl0LT52YWx1
ZS0+Ym90dG9tVXBIZWFkKCkpCisgICAgICAgICAgICAgICAgcHJvZmlsZU9iamVjdC0+c2V0T2Jq
ZWN0KCJib3R0b21VcEhlYWQiLCBpdC0+dmFsdWUtPmJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9yQm90
dG9tVXBIZWFkKCkpOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmICh0eXBlID09IEhlYXBQcm9m
aWxlVHlwZSkgewogICAgICAgICBIZWFwU25hcHNob3RzTWFwOjppdGVyYXRvciBpdCA9IG1fc25h
cHNob3RzLmZpbmQodWlkKTsKICAgICAgICAgaWYgKGl0ICE9IG1fc25hcHNob3RzLmVuZCgpKSB7
Ci0gICAgICAgICAgICBSZWZQdHI8U2NyaXB0SGVhcFNuYXBzaG90PiBzbmFwc2hvdCA9IGl0LT5z
ZWNvbmQ7CisgICAgICAgICAgICBSZWZQdHI8U2NyaXB0SGVhcFNuYXBzaG90PiBzbmFwc2hvdCA9
IGl0LT52YWx1ZTsKICAgICAgICAgICAgIHByb2ZpbGVPYmplY3QgPSBjcmVhdGVTbmFwc2hvdEhl
YWRlcigqc25hcHNob3QpOwogICAgICAgICAgICAgaWYgKG1fZnJvbnRlbmQpIHsKICAgICAgICAg
ICAgICAgICBPdXRwdXRTdHJlYW0gc3RyZWFtKG1fZnJvbnRlbmQsIHVpZCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5jcHAKaW5kZXgg
MzA4ODU0MGZmNzZhMjliYmI5MmEwOWM5MmM3OWUyMzQxN2UwYzAwYi4uMDJjNTA2NmFjMzg3NmFj
Y2E5ZTg1ZDliZjVkNDdkZDM1MzhmNTg4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmNwcApAQCAtMTAwLDcgKzEwMCw3IEBAIHN0
YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JIZWFkZXJzKGNv
bnN0IEhUVFBIZWFkZXJNYXAmIGhlCiAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaGVhZGVy
c09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgSFRUUEhlYWRlck1hcDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gaGVhZGVycy5lbmQoKTsKICAgICBmb3IgKEhUVFBIZWFkZXJN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaGVhZGVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
Ci0gICAgICAgIGhlYWRlcnNPYmplY3QtPnNldFN0cmluZyhpdC0+Zmlyc3Quc3RyaW5nKCksIGl0
LT5zZWNvbmQpOworICAgICAgICBoZWFkZXJzT2JqZWN0LT5zZXRTdHJpbmcoaXQtPmtleS5zdHJp
bmcoKSwgaXQtPnZhbHVlKTsKICAgICByZXR1cm4gaGVhZGVyc09iamVjdDsKIH0KIApAQCAtMjEx
LDggKzIxMSw4IEBAIHZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6d2lsbFNlbmRSZXF1ZXN0
KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbnRMCiAgICAgICAgIEluc3BlY3Rvck9i
amVjdDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaGVhZGVycy0+ZW5kKCk7CiAgICAgICAgIGZvciAo
SW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciBpdCA9IGhlYWRlcnMtPmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgU3RyaW5nIHZhbHVlOwotICAgICAgICAgICAg
aWYgKGl0LT5zZWNvbmQtPmFzU3RyaW5nKCZ2YWx1ZSkpCi0gICAgICAgICAgICAgICAgcmVxdWVz
dC5zZXRIVFRQSGVhZGVyRmllbGQoaXQtPmZpcnN0LCB2YWx1ZSk7CisgICAgICAgICAgICBpZiAo
aXQtPnZhbHVlLT5hc1N0cmluZygmdmFsdWUpKQorICAgICAgICAgICAgICAgIHJlcXVlc3Quc2V0
SFRUUEhlYWRlckZpZWxkKGl0LT5rZXksIHZhbHVlKTsKICAgICAgICAgfQogICAgIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5jcHAKaW5kZXggN2UwMmViN2Ey
MWJlZGYxNzQ3ZjhmODc4YTQ3ODA3Y2I4MDlkNTdlNC4uZjQ4YWNiYTYzNjk5OTZjZDkxNmQzZmU1
MmRjM2FlN2FmNmVlZDAwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclN0YXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
U3RhdGUuY3BwCkBAIC04MCw3ICs4MCw3IEBAIGJvb2wgSW5zcGVjdG9yU3RhdGU6OmdldEJvb2xl
YW4oY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCiAgICAgSW5zcGVjdG9yT2JqZWN0OjppdGVy
YXRvciBpdCA9IG1fcHJvcGVydGllcy0+ZmluZChwcm9wZXJ0eU5hbWUpOwogICAgIGJvb2wgdmFs
dWUgPSBmYWxzZTsKICAgICBpZiAoaXQgIT0gbV9wcm9wZXJ0aWVzLT5lbmQoKSkKLSAgICAgICAg
aXQtPnNlY29uZC0+YXNCb29sZWFuKCZ2YWx1ZSk7CisgICAgICAgIGl0LT52YWx1ZS0+YXNCb29s
ZWFuKCZ2YWx1ZSk7CiAgICAgcmV0dXJuIHZhbHVlOwogfQogCkBAIC04OSw3ICs4OSw3IEBAIFN0
cmluZyBJbnNwZWN0b3JTdGF0ZTo6Z2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1l
KQogICAgIEluc3BlY3Rvck9iamVjdDo6aXRlcmF0b3IgaXQgPSBtX3Byb3BlcnRpZXMtPmZpbmQo
cHJvcGVydHlOYW1lKTsKICAgICBTdHJpbmcgdmFsdWU7CiAgICAgaWYgKGl0ICE9IG1fcHJvcGVy
dGllcy0+ZW5kKCkpCi0gICAgICAgIGl0LT5zZWNvbmQtPmFzU3RyaW5nKCZ2YWx1ZSk7CisgICAg
ICAgIGl0LT52YWx1ZS0+YXNTdHJpbmcoJnZhbHVlKTsKICAgICByZXR1cm4gdmFsdWU7CiB9CiAK
QEAgLTk4LDcgKzk4LDcgQEAgbG9uZyBJbnNwZWN0b3JTdGF0ZTo6Z2V0TG9uZyhjb25zdCBTdHJp
bmcmIHByb3BlcnR5TmFtZSkKICAgICBJbnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9yIGl0ID0gbV9w
cm9wZXJ0aWVzLT5maW5kKHByb3BlcnR5TmFtZSk7CiAgICAgbG9uZyB2YWx1ZSA9IDA7CiAgICAg
aWYgKGl0ICE9IG1fcHJvcGVydGllcy0+ZW5kKCkpCi0gICAgICAgIGl0LT5zZWNvbmQtPmFzTnVt
YmVyKCZ2YWx1ZSk7CisgICAgICAgIGl0LT52YWx1ZS0+YXNOdW1iZXIoJnZhbHVlKTsKICAgICBy
ZXR1cm4gdmFsdWU7CiB9CiAKQEAgLTEwNyw3ICsxMDcsNyBAQCBkb3VibGUgSW5zcGVjdG9yU3Rh
dGU6OmdldERvdWJsZShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSkKICAgICBJbnNwZWN0b3JP
YmplY3Q6Oml0ZXJhdG9yIGl0ID0gbV9wcm9wZXJ0aWVzLT5maW5kKHByb3BlcnR5TmFtZSk7CiAg
ICAgZG91YmxlIHZhbHVlID0gMDsKICAgICBpZiAoaXQgIT0gbV9wcm9wZXJ0aWVzLT5lbmQoKSkK
LSAgICAgICAgaXQtPnNlY29uZC0+YXNOdW1iZXIoJnZhbHVlKTsKKyAgICAgICAgaXQtPnZhbHVl
LT5hc051bWJlcigmdmFsdWUpOwogICAgIHJldHVybiB2YWx1ZTsKIH0KIApAQCAtMTE4LDcgKzEx
OCw3IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JTdGF0ZTo6Z2V0T2Jq
ZWN0KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lCiAgICAgICAgIG1fcHJvcGVydGllcy0+c2V0
T2JqZWN0KHByb3BlcnR5TmFtZSwgSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgICAg
IGl0ID0gbV9wcm9wZXJ0aWVzLT5maW5kKHByb3BlcnR5TmFtZSk7CiAgICAgfQotICAgIHJldHVy
biBpdC0+c2Vjb25kLT5hc09iamVjdCgpOworICAgIHJldHVybiBpdC0+dmFsdWUtPmFzT2JqZWN0
KCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcAppbmRleCAzYjllNGVlYmVhZWYyZTc5NDVj
NDA3MThlZTQ5ZjIzZWJjNWI5ZGViLi44ODllYTQ1OTFhNzJmMTliMDdlYWI0ZGU4ZmUyNTA1MmI4
ODRkNzQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5
bGVTaGVldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxl
U2hlZXQuY3BwCkBAIC01MTAsNyArNTEwLDcgQEAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NT
OjpDU1NTdHlsZT4gSW5zcGVjdG9yU3R5bGU6OnN0eWxlV2l0aFByb3BlcnRpZXMoKSBjb24KICAg
ICAgICAgICAgICAgICAgICAgICAgIHNob3VsZEluYWN0aXZhdGUgPSB0cnVlOwogICAgICAgICAg
ICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJldmlvdXNQ
YXJzZWRPazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc3VjY2VzcyA9IGFjdGl2ZUl0
LT5zZWNvbmQtPmdldEJvb2xlYW4oInBhcnNlZE9rIiwgJnByZXZpb3VzUGFyc2VkT2spOworICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gYWN0aXZlSXQtPnZhbHVlLT5nZXRC
b29sZWFuKCJwYXJzZWRPayIsICZwcmV2aW91c1BhcnNlZE9rKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChzdWNjZXNzICYmICFwcmV2aW91c1BhcnNlZE9rKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNob3VsZEluYWN0aXZhdGUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAg
ICB9CkBAIC01MTgsOCArNTE4LDggQEAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NT
dHlsZT4gSW5zcGVjdG9yU3R5bGU6OnN0eWxlV2l0aFByb3BlcnRpZXMoKSBjb24KICAgICAgICAg
ICAgICAgICAgICAgcHJvcGVydHlOYW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5LnNldChjYW5v
bmljYWxQcm9wZXJ0eU5hbWUsIHByb3BlcnR5KTsKIAogICAgICAgICAgICAgICAgIGlmIChzaG91
bGRJbmFjdGl2YXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFjdGl2ZUl0LT5zZWNvbmQtPnNl
dFN0YXR1cyhUeXBlQnVpbGRlcjo6Q1NTOjpDU1NQcm9wZXJ0eTo6U3RhdHVzOjpJbmFjdGl2ZSk7
Ci0gICAgICAgICAgICAgICAgICAgIGFjdGl2ZUl0LT5zZWNvbmQtPnJlbW92ZSgic2hvcnRoYW5k
TmFtZSIpOworICAgICAgICAgICAgICAgICAgICBhY3RpdmVJdC0+dmFsdWUtPnNldFN0YXR1cyhU
eXBlQnVpbGRlcjo6Q1NTOjpDU1NQcm9wZXJ0eTo6U3RhdHVzOjpJbmFjdGl2ZSk7CisgICAgICAg
ICAgICAgICAgICAgIGFjdGl2ZUl0LT52YWx1ZS0+cmVtb3ZlKCJzaG9ydGhhbmROYW1lIik7CiAg
ICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZVRvUHJldmlvdXNBY3RpdmVQcm9wZXJ0eS5z
ZXQoY2Fub25pY2FsUHJvcGVydHlOYW1lLCBwcm9wZXJ0eSk7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTEwMTQsNyArMTAxNCw3IEBAIFBhc3NSZWZQdHI8SW5z
cGVjdG9yU3R5bGU+IEluc3BlY3RvclN0eWxlU2hlZXQ6Omluc3BlY3RvclN0eWxlRm9ySWQoY29u
c3QgSW5zcGVjCiAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JTdHlsZT4gaW5zcGVjdG9yU3R5bGUg
PSBJbnNwZWN0b3JTdHlsZTo6Y3JlYXRlKGlkLCBzdHlsZSwgdGhpcyk7CiAgICAgICAgIHJldHVy
biBpbnNwZWN0b3JTdHlsZS5yZWxlYXNlKCk7CiAgICAgfQotICAgIHJldHVybiBpdC0+c2Vjb25k
OworICAgIHJldHVybiBpdC0+dmFsdWU7CiB9CiAKIHZvaWQgSW5zcGVjdG9yU3R5bGVTaGVldDo6
cmVtZW1iZXJJbnNwZWN0b3JTdHlsZShSZWZQdHI8SW5zcGVjdG9yU3R5bGU+IGluc3BlY3RvclN0
eWxlKQpAQCAtMTA5OSw4ICsxMDk5LDggQEAgYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0OjplbnN1
cmVTb3VyY2VEYXRhKCkKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBzaXplID0gcnVsZXMuc2l6
ZSgpOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIFN0eWxlUnVsZVJhbmdlTWFwOjppdGVyYXRv
ciBpdCA9IHJ1bGVSYW5nZU1hcC5maW5kKHJ1bGVzLmF0KGkpKTsKICAgICAgICAgaWYgKGl0ICE9
IHJ1bGVSYW5nZU1hcC5lbmQoKSkgewotICAgICAgICAgICAgZml4VW5wYXJzZWRQcm9wZXJ0eVJh
bmdlcyhpdC0+c2Vjb25kLmdldCgpLCBtX3BhcnNlZFN0eWxlU2hlZXQtPnRleHQoKSk7Ci0gICAg
ICAgICAgICByYW5nZXNWZWN0b3ItPmFwcGVuZChpdC0+c2Vjb25kKTsKKyAgICAgICAgICAgIGZp
eFVucGFyc2VkUHJvcGVydHlSYW5nZXMoaXQtPnZhbHVlLmdldCgpLCBtX3BhcnNlZFN0eWxlU2hl
ZXQtPnRleHQoKSk7CisgICAgICAgICAgICByYW5nZXNWZWN0b3ItPmFwcGVuZChpdC0+dmFsdWUp
OwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yVmFsdWVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JWYWx1ZXMuY3BwCmluZGV4IGI4OTU5MzcyYjBlZjMwYmRmZjVhODAzZWFmOTcwOTAwZjc5ODc3
NDEuLjE0ODM1NGRhY2YzOGRmMmUwNjYzZGQ1MTBmMTM4ZGVhNzQyMmZiZWIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwCkBAIC03MTMsNyArNzEzLDcg
QEAgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gSW5zcGVjdG9yT2JqZWN0OjpnZXQoY29uc3Qg
U3RyaW5nJiBuYW1lKSBjb25zdAogICAgIERpY3Rpb25hcnk6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bV9kYXRhLmZpbmQobmFtZSk7CiAgICAgaWYgKGl0ID09IG1fZGF0YS5lbmQoKSkKICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgcmV0dXJuIGl0LT52YWx1ZTsK
IH0KIAogdm9pZCBJbnNwZWN0b3JPYmplY3Q6OnJlbW92ZShjb25zdCBTdHJpbmcmIG5hbWUpCkBA
IC03MzUsOSArNzM1LDkgQEAgdm9pZCBJbnNwZWN0b3JPYmplY3Q6OndyaXRlSlNPTihTdHJpbmdC
dWlsZGVyKiBvdXRwdXQpIGNvbnN0CiAgICAgICAgIEFTU0VSVChpdCAhPSBtX2RhdGEuZW5kKCkp
OwogICAgICAgICBpZiAoaSkKICAgICAgICAgICAgIG91dHB1dC0+YXBwZW5kKCcsJyk7Ci0gICAg
ICAgIGRvdWJsZVF1b3RlU3RyaW5nKGl0LT5maXJzdCwgb3V0cHV0KTsKKyAgICAgICAgZG91Ymxl
UXVvdGVTdHJpbmcoaXQtPmtleSwgb3V0cHV0KTsKICAgICAgICAgb3V0cHV0LT5hcHBlbmQoJzon
KTsKLSAgICAgICAgaXQtPnNlY29uZC0+d3JpdGVKU09OKG91dHB1dCk7CisgICAgICAgIGl0LT52
YWx1ZS0+d3JpdGVKU09OKG91dHB1dCk7CiAgICAgfQogICAgIG91dHB1dC0+YXBwZW5kKCd9Jyk7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yV29ya2Vy
QWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvcldvcmtlckFnZW50
LmNwcAppbmRleCAxYjM4NTk1NzFjYWZjMjNlNGM1NDFkMzQ5YzI2MGRhMWZlNGYzYjk2Li4wNjFm
NDc0ZWYxMDUwMDRjZDg4NjhiZjY1YTdhYmFkYzY1Y2RjZWJkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yV29ya2VyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JXb3JrZXJBZ2VudC5jcHAKQEAgLTE5OSw5ICsxOTks
OSBAQCB2b2lkIEluc3BlY3RvcldvcmtlckFnZW50Ojp3b3JrZXJDb250ZXh0VGVybWluYXRlZChX
b3JrZXJDb250ZXh0UHJveHkqIHByb3h5KQogewogICAgIG1fZGVkaWNhdGVkV29ya2Vycy5yZW1v
dmUocHJveHkpOwogICAgIGZvciAoV29ya2VyQ2hhbm5lbHM6Oml0ZXJhdG9yIGl0ID0gbV9pZFRv
Q2hhbm5lbC5iZWdpbigpOyBpdCAhPSBtX2lkVG9DaGFubmVsLmVuZCgpOyArK2l0KSB7Ci0gICAg
ICAgIGlmIChwcm94eSA9PSBpdC0+c2Vjb25kLT5wcm94eSgpKSB7Ci0gICAgICAgICAgICBtX2lu
c3BlY3RvckZyb250ZW5kLT53b3JrZXIoKS0+d29ya2VyVGVybWluYXRlZChpdC0+Zmlyc3QpOwot
ICAgICAgICAgICAgZGVsZXRlIGl0LT5zZWNvbmQ7CisgICAgICAgIGlmIChwcm94eSA9PSBpdC0+
dmFsdWUtPnByb3h5KCkpIHsKKyAgICAgICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmQtPndvcmtl
cigpLT53b3JrZXJUZXJtaW5hdGVkKGl0LT5rZXkpOworICAgICAgICAgICAgZGVsZXRlIGl0LT52
YWx1ZTsKICAgICAgICAgICAgIG1faWRUb0NoYW5uZWwucmVtb3ZlKGl0KTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQpAQCAtMjExLDE0ICsyMTEsMTQgQEAgdm9pZCBJbnNwZWN0b3JX
b3JrZXJBZ2VudDo6d29ya2VyQ29udGV4dFRlcm1pbmF0ZWQoV29ya2VyQ29udGV4dFByb3h5KiBw
cm94eSkKIHZvaWQgSW5zcGVjdG9yV29ya2VyQWdlbnQ6OmNyZWF0ZVdvcmtlckZyb250ZW5kQ2hh
bm5lbHNGb3JFeGlzdGluZ1dvcmtlcnMoKQogewogICAgIGZvciAoRGVkaWNhdGVkV29ya2Vyczo6
aXRlcmF0b3IgaXQgPSBtX2RlZGljYXRlZFdvcmtlcnMuYmVnaW4oKTsgaXQgIT0gbV9kZWRpY2F0
ZWRXb3JrZXJzLmVuZCgpOyArK2l0KQotICAgICAgICBjcmVhdGVXb3JrZXJGcm9udGVuZENoYW5u
ZWwoaXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsKKyAgICAgICAgY3JlYXRlV29ya2VyRnJvbnRlbmRD
aGFubmVsKGl0LT5rZXksIGl0LT52YWx1ZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yV29ya2VyQWdl
bnQ6OmRlc3Ryb3lXb3JrZXJGcm9udGVuZENoYW5uZWxzKCkKIHsKICAgICBmb3IgKFdvcmtlckNo
YW5uZWxzOjppdGVyYXRvciBpdCA9IG1faWRUb0NoYW5uZWwuYmVnaW4oKTsgaXQgIT0gbV9pZFRv
Q2hhbm5lbC5lbmQoKTsgKytpdCkgewotICAgICAgICBpdC0+c2Vjb25kLT5kaXNjb25uZWN0RnJv
bVdvcmtlckNvbnRleHQoKTsKLSAgICAgICAgZGVsZXRlIGl0LT5zZWNvbmQ7CisgICAgICAgIGl0
LT52YWx1ZS0+ZGlzY29ubmVjdEZyb21Xb3JrZXJDb250ZXh0KCk7CisgICAgICAgIGRlbGV0ZSBp
dC0+dmFsdWU7CiAgICAgfQogICAgIG1faWRUb0NoYW5uZWwuY2xlYXIoKTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0YS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvTmV0d29ya1Jlc291cmNlc0RhdGEuY3BwCmluZGV4IDUy
ZWJhZjMwNzA0NmRmNGVhNjY1MGE0YjQ5ZTYwYzhlMDBkMWI3MzYuLmM2ZWQ0NTQ2ZjA2MmExMTEw
NWRmOTFiNWE4YmRlZjUzMDI5M2EyYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL05ldHdvcmtSZXNvdXJjZXNEYXRhLmNwcApAQCAtMjQ2LDkgKzI0Niw5IEBAIHZvaWQgTmV0
d29ya1Jlc291cmNlc0RhdGE6OmNsZWFyKGNvbnN0IFN0cmluZyYgcHJlc2VydmVkTG9hZGVySWQp
CiAgICAgUmVzb3VyY2VEYXRhTWFwOjppdGVyYXRvciBpdDsKICAgICBSZXNvdXJjZURhdGFNYXA6
Oml0ZXJhdG9yIGVuZCA9IG1fcmVxdWVzdElkVG9SZXNvdXJjZURhdGFNYXAuZW5kKCk7CiAgICAg
Zm9yIChpdCA9IG1fcmVxdWVzdElkVG9SZXNvdXJjZURhdGFNYXAuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7Ci0gICAgICAgIFJlc291cmNlRGF0YSogcmVzb3VyY2VEYXRhID0gaXQtPnNlY29u
ZDsKKyAgICAgICAgUmVzb3VyY2VEYXRhKiByZXNvdXJjZURhdGEgPSBpdC0+dmFsdWU7CiAgICAg
ICAgIGlmICghcHJlc2VydmVkTG9hZGVySWQuaXNOdWxsKCkgJiYgcmVzb3VyY2VEYXRhLT5sb2Fk
ZXJJZCgpID09IHByZXNlcnZlZExvYWRlcklkKQotICAgICAgICAgICAgcHJlc2VydmVkTWFwLnNl
dChpdC0+Zmlyc3QsIGl0LT5zZWNvbmQpOworICAgICAgICAgICAgcHJlc2VydmVkTWFwLnNldChp
dC0+a2V5LCBpdC0+dmFsdWUpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBkZWxldGUgcmVz
b3VyY2VEYXRhOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9z
c09yaWdpbkFjY2Vzc0NvbnRyb2wuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3Jp
Z2luQWNjZXNzQ29udHJvbC5jcHAKaW5kZXggYzBmODk0NWNmODdjMzUyMDJhMjM3YmI0Mjg1ODI1
NzIyZjU0MjY2My4uOTAwNzMzNWNhNTI1NDJlOWMyMWYwM2M5ZTEwODhiYWUzMTU3ZDIwOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luQWNjZXNzQ29udHJvbC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luQWNjZXNzQ29udHJvbC5j
cHAKQEAgLTY4LDcgKzY4LDcgQEAgYm9vbCBpc1NpbXBsZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVz
dChjb25zdCBTdHJpbmcmIG1ldGhvZCwgY29uc3QgSFRUUEhlYWRlck1hcCYKIAogICAgIEhUVFBI
ZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGhlYWRlck1hcC5lbmQoKTsKICAgICBmb3Ig
KEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaGVhZGVyTWFwLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoIWlzT25BY2Nlc3NDb250cm9sU2ltcGxlUmVx
dWVzdEhlYWRlcldoaXRlbGlzdChpdC0+Zmlyc3QsIGl0LT5zZWNvbmQpKQorICAgICAgICBpZiAo
IWlzT25BY2Nlc3NDb250cm9sU2ltcGxlUmVxdWVzdEhlYWRlcldoaXRlbGlzdChpdC0+a2V5LCBp
dC0+dmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtMTE2LDE0
ICsxMTYsMTQgQEAgUmVzb3VyY2VSZXF1ZXN0IGNyZWF0ZUFjY2Vzc0NvbnRyb2xQcmVmbGlnaHRS
ZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWUKICAgICBpZiAocmVxdWVzdEhlYWRl
ckZpZWxkcy5zaXplKCkgPiAwKSB7CiAgICAgICAgIFN0cmluZ0J1aWxkZXIgaGVhZGVyQnVmZmVy
OwogICAgICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHJlcXVlc3RIZWFk
ZXJGaWVsZHMuYmVnaW4oKTsKLSAgICAgICAgaGVhZGVyQnVmZmVyLmFwcGVuZChpdC0+Zmlyc3Qp
OworICAgICAgICBoZWFkZXJCdWZmZXIuYXBwZW5kKGl0LT5rZXkpOwogICAgICAgICArK2l0Owog
CiAgICAgICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHJlcXVlc3RIZWFk
ZXJGaWVsZHMuZW5kKCk7CiAgICAgICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAg
ICAgICAgIGhlYWRlckJ1ZmZlci5hcHBlbmQoJywnKTsKICAgICAgICAgICAgIGhlYWRlckJ1ZmZl
ci5hcHBlbmQoJyAnKTsKLSAgICAgICAgICAgIGhlYWRlckJ1ZmZlci5hcHBlbmQoaXQtPmZpcnN0
KTsKKyAgICAgICAgICAgIGhlYWRlckJ1ZmZlci5hcHBlbmQoaXQtPmtleSk7CiAgICAgICAgIH0K
IAogICAgICAgICBwcmVmbGlnaHRSZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZCgiQWNjZXNzLUNv
bnRyb2wtUmVxdWVzdC1IZWFkZXJzIiwgaGVhZGVyQnVmZmVyLnRvU3RyaW5nKCkubG93ZXIoKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5QcmVmbGlnaHRS
ZXN1bHRDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5QcmVmbGln
aHRSZXN1bHRDYWNoZS5jcHAKaW5kZXggMTk4ZGRhZmEzYzdjNjcyOTU4MjVmMGE2OGI4MmM3OGIw
MDQ4Nzk4ZS4uMzFjNWI1ZWJkZGQzMDg0ZTlhMGUzNmQzNTRiMTA5OGJkOWU3OWUxNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2Fj
aGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpblByZWZsaWdodFJl
c3VsdENhY2hlLmNwcApAQCAtMTI3LDggKzEyNyw4IEBAIGJvb2wgQ3Jvc3NPcmlnaW5QcmVmbGln
aHRSZXN1bHRDYWNoZUl0ZW06OmFsbG93c0Nyb3NzT3JpZ2luSGVhZGVycyhjb25zdCBIVFRQSGVh
CiB7CiAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcmVxdWVzdEhlYWRl
cnMuZW5kKCk7CiAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHJl
cXVlc3RIZWFkZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoIW1f
aGVhZGVycy5jb250YWlucyhpdC0+Zmlyc3QpICYmICFpc09uQWNjZXNzQ29udHJvbFNpbXBsZVJl
cXVlc3RIZWFkZXJXaGl0ZWxpc3QoaXQtPmZpcnN0LCBpdC0+c2Vjb25kKSkgewotICAgICAgICAg
ICAgZXJyb3JEZXNjcmlwdGlvbiA9ICJSZXF1ZXN0IGhlYWRlciBmaWVsZCAiICsgaXQtPmZpcnN0
LnN0cmluZygpICsgIiBpcyBub3QgYWxsb3dlZCBieSBBY2Nlc3MtQ29udHJvbC1BbGxvdy1IZWFk
ZXJzLiI7CisgICAgICAgIGlmICghbV9oZWFkZXJzLmNvbnRhaW5zKGl0LT5rZXkpICYmICFpc09u
QWNjZXNzQ29udHJvbFNpbXBsZVJlcXVlc3RIZWFkZXJXaGl0ZWxpc3QoaXQtPmtleSwgaXQtPnZh
bHVlKSkgeworICAgICAgICAgICAgZXJyb3JEZXNjcmlwdGlvbiA9ICJSZXF1ZXN0IGhlYWRlciBm
aWVsZCAiICsgaXQtPmtleS5zdHJpbmcoKSArICIgaXMgbm90IGFsbG93ZWQgYnkgQWNjZXNzLUNv
bnRyb2wtQWxsb3ctSGVhZGVycy4iOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICB9CiAgICAgfQpAQCAtMTY5LDcgKzE2OSw3IEBAIGJvb2wgQ3Jvc3NPcmlnaW5QcmVmbGlnaHRS
ZXN1bHRDYWNoZTo6Y2FuU2tpcFByZWZsaWdodChjb25zdCBTdHJpbmcmIG9yaWdpbiwgY29uCiAg
ICAgaWYgKGNhY2hlSXQgPT0gbV9wcmVmbGlnaHRIYXNoTWFwLmVuZCgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBpZiAoY2FjaGVJdC0+c2Vjb25kLT5hbGxvd3NSZXF1ZXN0KGluY2x1
ZGVDcmVkZW50aWFscywgbWV0aG9kLCByZXF1ZXN0SGVhZGVycykpCisgICAgaWYgKGNhY2hlSXQt
PnZhbHVlLT5hbGxvd3NSZXF1ZXN0KGluY2x1ZGVDcmVkZW50aWFscywgbWV0aG9kLCByZXF1ZXN0
SGVhZGVycykpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgbV9wcmVmbGlnaHRIYXNoTWFw
LnJlbW92ZShjYWNoZUl0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1
bWVudExvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3Bw
CmluZGV4IGNkNTA1M2Y2YzkxNmNmMjQyZmQ2Mzg5ODNiOGNjNTRmYjc5NzI5YzQuLjFjMTkwZGFl
NjQxODkzN2VjMzdjMTgxYTgxOTg3MGE4NTYxZWU1OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVy
L0RvY3VtZW50TG9hZGVyLmNwcApAQCAtNTU3LDcgKzU1Nyw3IEBAIHZvaWQgRG9jdW1lbnRMb2Fk
ZXI6OmdldFN1YnJlc291cmNlcyhWZWN0b3I8UGFzc1JlZlB0cjxBcmNoaXZlUmVzb3VyY2U+ID4m
IHN1YnJlCiAgICAgY29uc3QgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OkRvY3VtZW50UmVzb3VyY2VN
YXAmIGFsbFJlc291cmNlcyA9IGRvY3VtZW50LT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLT5hbGxD
YWNoZWRSZXNvdXJjZXMoKTsKICAgICBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6RG9jdW1lbnRSZXNv
dXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gYWxsUmVzb3VyY2VzLmVuZCgpOwogICAgIGZv
ciAoQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OkRvY3VtZW50UmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gYWxsUmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAg
ICBSZWZQdHI8QXJjaGl2ZVJlc291cmNlPiBzdWJyZXNvdXJjZSA9IHRoaXMtPnN1YnJlc291cmNl
KEtVUkwoUGFyc2VkVVJMU3RyaW5nLCBpdC0+c2Vjb25kLT51cmwoKSkpOworICAgICAgICBSZWZQ
dHI8QXJjaGl2ZVJlc291cmNlPiBzdWJyZXNvdXJjZSA9IHRoaXMtPnN1YnJlc291cmNlKEtVUkwo
UGFyc2VkVVJMU3RyaW5nLCBpdC0+dmFsdWUtPnVybCgpKSk7CiAgICAgICAgIGlmIChzdWJyZXNv
dXJjZSkKICAgICAgICAgICAgIHN1YnJlc291cmNlcy5hcHBlbmQoc3VicmVzb3VyY2UucmVsZWFz
ZSgpKTsKICAgICB9CkBAIC01ODksOCArNTg5LDggQEAgdm9pZCBEb2N1bWVudExvYWRlcjo6c3Vi
c3RpdHV0ZVJlc291cmNlRGVsaXZlcnlUaW1lckZpcmVkKFRpbWVyPERvY3VtZW50TG9hZGVyPioK
IAogICAgIFN1YnN0aXR1dGVSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY29weS5l
bmQoKTsKICAgICBmb3IgKFN1YnN0aXR1dGVSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBjb3B5LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBSZWZQdHI8UmVzb3Vy
Y2VMb2FkZXI+IGxvYWRlciA9IGl0LT5maXJzdDsKLSAgICAgICAgU3Vic3RpdHV0ZVJlc291cmNl
KiByZXNvdXJjZSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIFJlZlB0cjxSZXNvdXJjZUxv
YWRlcj4gbG9hZGVyID0gaXQtPmtleTsKKyAgICAgICAgU3Vic3RpdHV0ZVJlc291cmNlKiByZXNv
dXJjZSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgCiAgICAgICAgIGlmIChyZXNvdXJjZSkg
ewogICAgICAgICAgICAgU2hhcmVkQnVmZmVyKiBkYXRhID0gcmVzb3VyY2UtPmRhdGEoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9NYWluUmVzb3VyY2VMb2FkZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvbG9hZGVyL01haW5SZXNvdXJjZUxvYWRlci5jcHAKaW5kZXggM2E1NzYx
NTI3ZjJkYjU3YzViYjAwZDYxMTFlMGIxY2VmYzIzODk1MC4uNjIwMWYzMGFiZmQ1NmNmNWIzYzZh
OWUzNDlmZmU1NTQ2NTI2MTY1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL01h
aW5SZXNvdXJjZUxvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL01haW5SZXNv
dXJjZUxvYWRlci5jcHAKQEAgLTM2NSw3ICszNjUsNyBAQCB2b2lkIE1haW5SZXNvdXJjZUxvYWRl
cjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHIpCiAKICAgICBI
VFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHIuaHR0cEhlYWRlckZpZWxkcygpLmZp
bmQoQXRvbWljU3RyaW5nKCJ4LWZyYW1lLW9wdGlvbnMiKSk7CiAgICAgaWYgKGl0ICE9IHIuaHR0
cEhlYWRlckZpZWxkcygpLmVuZCgpKSB7Ci0gICAgICAgIFN0cmluZyBjb250ZW50ID0gaXQtPnNl
Y29uZDsKKyAgICAgICAgU3RyaW5nIGNvbnRlbnQgPSBpdC0+dmFsdWU7CiAgICAgICAgIGlmICht
X2ZyYW1lLT5sb2FkZXIoKS0+c2hvdWxkSW50ZXJydXB0TG9hZEZvclhGcmFtZU9wdGlvbnMoY29u
dGVudCwgci51cmwoKSkpIHsKICAgICAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
Y29udGludWVBZnRlclhGcmFtZU9wdGlvbnNEZW5pZWQobV9mcmFtZS5nZXQoKSwgZG9jdW1lbnRM
b2FkZXIoKSwgaWRlbnRpZmllcigpLCByKTsKICAgICAgICAgICAgIERFRklORV9TVEFUSUNfTE9D
QUwoU3RyaW5nLCBjb25zb2xlTWVzc2FnZSwgKCJSZWZ1c2VkIHRvIGRpc3BsYXkgZG9jdW1lbnQg
YmVjYXVzZSBkaXNwbGF5IGZvcmJpZGRlbiBieSBYLUZyYW1lLU9wdGlvbnMuXG4iKSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCmluZGV4IDgw
MDRkOGYyZWIyZDhiYzM2MDZhMDY5ZmM3ZWVhMzUxYWZjZmNkYWEuLjhlYjQ0ZDQ5ZDI5YTY4NDY2
NGQ4MzI1Y2EyNjFmNTc1YzY0MTBiNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9S
ZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCkBAIC0xNzQsNyArMTc0LDcgQEAgdm9pZCBSZXNvdXJj
ZUxvYWRTY2hlZHVsZXI6OnNlcnZlUGVuZGluZ1JlcXVlc3RzKFJlc291cmNlTG9hZFByaW9yaXR5
IG1pbmltdW1QcmkKICAgICBtX2hvc3RzLmNoZWNrQ29uc2lzdGVuY3koKTsKICAgICBIb3N0TWFw
OjppdGVyYXRvciBlbmQgPSBtX2hvc3RzLmVuZCgpOwogICAgIGZvciAoSG9zdE1hcDo6aXRlcmF0
b3IgaXRlciA9IG1faG9zdHMuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikKLSAgICAgICAg
aG9zdHNUb1NlcnZlLmFwcGVuZChpdGVyLT5zZWNvbmQpOworICAgICAgICBob3N0c1RvU2VydmUu
YXBwZW5kKGl0ZXItPnZhbHVlKTsKIAogICAgIGludCBzaXplID0gaG9zdHNUb1NlcnZlLnNpemUo
KTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkgewpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvbG9hZGVyL1N1YmZyYW1lTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9TdWJmcmFtZUxvYWRlci5jcHAKaW5kZXggNDU3NmM5NGJkM2QxZGIwMzk2MmJjNmM4NDhm
Yzk3ZDgzN2I2ZmEzNS4uNmE1YzFkNzkyMzY1NDM1ZjcyOTkwYjEzZDE5N2I2MTNhZjQ4ZThjNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1N1YmZyYW1lTG9hZGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvU3ViZnJhbWVMb2FkZXIuY3BwCkBAIC0xOTksMTIgKzE5
OSwxMiBAQCBQYXNzUmVmUHRyPFdpZGdldD4gU3ViZnJhbWVMb2FkZXI6OmNyZWF0ZUphdmFBcHBs
ZXRXaWRnZXQoY29uc3QgTGF5b3V0U2l6ZSYgc2l6ZQogICAgIFZlY3RvcjxTdHJpbmc+IHBhcmFt
VmFsdWVzOwogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBlbmQg
PSBhcmdzLmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gYXJncy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYg
KGVxdWFsSWdub3JpbmdDYXNlKGl0LT5maXJzdCwgImJhc2V1cmwiKSkKLSAgICAgICAgICAgIGJh
c2VVUkxTdHJpbmcgPSBpdC0+c2Vjb25kOwotICAgICAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5n
Q2FzZShpdC0+Zmlyc3QsICJjb2RlYmFzZSIpKQotICAgICAgICAgICAgY29kZUJhc2VVUkxTdHJp
bmcgPSBpdC0+c2Vjb25kOwotICAgICAgICBwYXJhbU5hbWVzLmFwcGVuZChpdC0+Zmlyc3QpOwot
ICAgICAgICBwYXJhbVZhbHVlcy5hcHBlbmQoaXQtPnNlY29uZCk7CisgICAgICAgIGlmIChlcXVh
bElnbm9yaW5nQ2FzZShpdC0+a2V5LCAiYmFzZXVybCIpKQorICAgICAgICAgICAgYmFzZVVSTFN0
cmluZyA9IGl0LT52YWx1ZTsKKyAgICAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoaXQt
PmtleSwgImNvZGViYXNlIikpCisgICAgICAgICAgICBjb2RlQmFzZVVSTFN0cmluZyA9IGl0LT52
YWx1ZTsKKyAgICAgICAgcGFyYW1OYW1lcy5hcHBlbmQoaXQtPmtleSk7CisgICAgICAgIHBhcmFt
VmFsdWVzLmFwcGVuZChpdC0+dmFsdWUpOwogICAgIH0KIAogICAgIGlmICghY29kZUJhc2VVUkxT
dHJpbmcuaXNFbXB0eSgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBw
Y2FjaGUvQXBwbGljYXRpb25DYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2Fj
aGUvQXBwbGljYXRpb25DYWNoZS5jcHAKaW5kZXggNjNjZDdiYmJmYTg3ODlmNGFkYjNkZjUyY2I0
ZTljMTdkZDcxNTk0NC4uYjdlYTY1MjRjNDAzOTc1ZmYwZGY5NDZhMmYwZDAxMWNiMTcwMGE2YSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2Fj
aGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNh
Y2hlLmNwcApAQCAtMTAwLDExICsxMDAsMTEgQEAgdW5zaWduZWQgQXBwbGljYXRpb25DYWNoZTo6
cmVtb3ZlUmVzb3VyY2UoY29uc3QgU3RyaW5nJiB1cmwpCiAgICAgICAgIHJldHVybiAwOwogCiAg
ICAgLy8gVGhlIHJlc291cmNlIGV4aXN0cywgZ2V0IGl0cyB0eXBlIHNvIHdlIGNhbiByZXR1cm4g
aXQuCi0gICAgdW5zaWduZWQgdHlwZSA9IGl0LT5zZWNvbmQtPnR5cGUoKTsKKyAgICB1bnNpZ25l
ZCB0eXBlID0gaXQtPnZhbHVlLT50eXBlKCk7CiAKICAgICBtX3Jlc291cmNlcy5yZW1vdmUoaXQp
OwogCi0gICAgbV9lc3RpbWF0ZWRTaXplSW5TdG9yYWdlIC09IGl0LT5zZWNvbmQtPmVzdGltYXRl
ZFNpemVJblN0b3JhZ2UoKTsKKyAgICBtX2VzdGltYXRlZFNpemVJblN0b3JhZ2UgLT0gaXQtPnZh
bHVlLT5lc3RpbWF0ZWRTaXplSW5TdG9yYWdlKCk7CiAKICAgICByZXR1cm4gdHlwZTsKIH0gICAg
CkBAIC0xODAsNyArMTgwLDcgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlOjpjbGVhclN0b3JhZ2VJ
RCgpCiAgICAgCiAgICAgUmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcmVzb3Vy
Y2VzLmVuZCgpOwogICAgIGZvciAoUmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9y
ZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5j
bGVhclN0b3JhZ2VJRCgpOworICAgICAgICBpdC0+dmFsdWUtPmNsZWFyU3RvcmFnZUlEKCk7CiB9
CiAgICAgCiB2b2lkIEFwcGxpY2F0aW9uQ2FjaGU6OmRlbGV0ZUNhY2hlRm9yT3JpZ2luKFNlY3Vy
aXR5T3JpZ2luKiBvcmlnaW4pCkBAIC0yMTgsOCArMjE4LDggQEAgdm9pZCBBcHBsaWNhdGlvbkNh
Y2hlOjpkdW1wKCkKICAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGVS
ZXNvdXJjZT4gPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9yZXNvdXJjZXMuZW5kKCk7CiAgICAg
CiAgICAgZm9yIChIYXNoTWFwPFN0cmluZywgUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJj
ZT4gPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKLSAgICAgICAgcHJpbnRmKCIlcyAiLCBpdC0+Zmlyc3QuYXNjaWkoKS5kYXRhKCkp
OwotICAgICAgICBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OmR1bXBUeXBlKGl0LT5zZWNvbmQt
PnR5cGUoKSk7CisgICAgICAgIHByaW50ZigiJXMgIiwgaXQtPmtleS5hc2NpaSgpLmRhdGEoKSk7
CisgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6ZHVtcFR5cGUoaXQtPnZhbHVlLT50
eXBlKCkpOwogICAgIH0KIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVHcm91cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmNwcAppbmRleCA0ZTQyOTM4YmI1
ZDU3ZDYxMmJkZjM1MGNmMTkzNDA0MDI0Mjc5YWY5Li5kNjQ1MDMwZWYwMGU3ZDAxNzg3OTBmNzc5
NDBjN2IwZGM4ZTNhMzAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2Fj
aGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
YXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmNwcApAQCAtNzc1LDkgKzc3NSw5IEBAIHZv
aWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpkaWRGaW5pc2hMb2FkaW5nTWFuaWZlc3QoKQogICAg
IGlmIChpc1VwZ3JhZGVBdHRlbXB0KSB7CiAgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGU6OlJlc291
cmNlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX25ld2VzdENhY2hlLT5lbmQoKTsKICAgICAg
ICAgZm9yIChBcHBsaWNhdGlvbkNhY2hlOjpSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtX25ld2VzdENhY2hlLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAg
IHVuc2lnbmVkIHR5cGUgPSBpdC0+c2Vjb25kLT50eXBlKCk7CisgICAgICAgICAgICB1bnNpZ25l
ZCB0eXBlID0gaXQtPnZhbHVlLT50eXBlKCk7CiAgICAgICAgICAgICBpZiAodHlwZSAmIEFwcGxp
Y2F0aW9uQ2FjaGVSZXNvdXJjZTo6TWFzdGVyKQotICAgICAgICAgICAgICAgIGFkZEVudHJ5KGl0
LT5maXJzdCwgdHlwZSk7CisgICAgICAgICAgICAgICAgYWRkRW50cnkoaXQtPmtleSwgdHlwZSk7
CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC0xMDE2LDcgKzEwMTYsNyBAQCB2b2lkIEFwcGxp
Y2F0aW9uQ2FjaGVHcm91cDo6c3RhcnRMb2FkaW5nRW50cnkoKQogCiAgICAgQVNTRVJUKCFtX2N1
cnJlbnRIYW5kbGUpOwogICAgIAotICAgIG1fY3VycmVudEhhbmRsZSA9IGNyZWF0ZVJlc291cmNl
SGFuZGxlKEtVUkwoUGFyc2VkVVJMU3RyaW5nLCBpdC0+Zmlyc3QpLCBtX25ld2VzdENhY2hlID8g
bV9uZXdlc3RDYWNoZS0+cmVzb3VyY2VGb3JVUkwoaXQtPmZpcnN0KSA6IDApOworICAgIG1fY3Vy
cmVudEhhbmRsZSA9IGNyZWF0ZVJlc291cmNlSGFuZGxlKEtVUkwoUGFyc2VkVVJMU3RyaW5nLCBp
dC0+a2V5KSwgbV9uZXdlc3RDYWNoZSA/IG1fbmV3ZXN0Q2FjaGUtPnJlc291cmNlRm9yVVJMKGl0
LT5rZXkpIDogMCk7CiB9CiAKIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpkZWxpdmVyRGVs
YXllZE1haW5SZXNvdXJjZXMoKQpAQCAtMTA2NSw3ICsxMDY1LDcgQEAgdm9pZCBBcHBsaWNhdGlv
bkNhY2hlR3JvdXA6OmFkZEVudHJ5KGNvbnN0IFN0cmluZyYgdXJsLCB1bnNpZ25lZCB0eXBlKQog
ICAgIEVudHJ5TWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9wZW5kaW5nRW50cmllcy5hZGQodXJs
LCB0eXBlKTsKICAgICAKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXN1
bHQuaXRlcmF0b3ItPnNlY29uZCB8PSB0eXBlOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZh
bHVlIHw9IHR5cGU7CiB9CiAKIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjphc3NvY2lhdGVE
b2N1bWVudExvYWRlcldpdGhDYWNoZShEb2N1bWVudExvYWRlciogbG9hZGVyLCBBcHBsaWNhdGlv
bkNhY2hlKiBjYWNoZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNo
ZS9BcHBsaWNhdGlvbkNhY2hlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2Fj
aGUvQXBwbGljYXRpb25DYWNoZUhvc3QuY3BwCmluZGV4IDgwMWMxYjM2NzAzMWEzMzlkYjQ0NzA3
YTkyZDFiYzgwZDQxZDhjNzkuLmZlOWYwMTBhMGZlNjUwM2QwYmM1ZTViOTI3NzBhM2Y3YjY0MzQ0
ZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlv
bkNhY2hlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxp
Y2F0aW9uQ2FjaGVIb3N0LmNwcApAQCAtMjgyLDcgKzI4Miw3IEBAIHZvaWQgQXBwbGljYXRpb25D
YWNoZUhvc3Q6OmZpbGxSZXNvdXJjZUxpc3QoUmVzb3VyY2VJbmZvTGlzdCogcmVzb3VyY2VzKQog
ICAgICAKICAgICBBcHBsaWNhdGlvbkNhY2hlOjpSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gY2FjaGUtPmVuZCgpOwogICAgIGZvciAoQXBwbGljYXRpb25DYWNoZTo6UmVzb3VyY2VN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY2FjaGUtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewotICAgICAgICBSZWZQdHI8QXBwbGljYXRpb25DYWNoZVJlc291cmNlPiByZXNvdXJjZSA9IGl0
LT5zZWNvbmQ7CisgICAgICAgIFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+IHJlc291
cmNlID0gaXQtPnZhbHVlOwogICAgICAgICB1bnNpZ25lZCB0eXBlID0gcmVzb3VyY2UtPnR5cGUo
KTsKICAgICAgICAgYm9vbCBpc01hc3RlciAgID0gdHlwZSAmIEFwcGxpY2F0aW9uQ2FjaGVSZXNv
dXJjZTo6TWFzdGVyOwogICAgICAgICBib29sIGlzTWFuaWZlc3QgPSB0eXBlICYgQXBwbGljYXRp
b25DYWNoZVJlc291cmNlOjpNYW5pZmVzdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuY3BwIGIvU291cmNlL1dlYkNv
cmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5jcHAKaW5kZXggZDgz
MTc4NGI0MTk2YWRmMzgyY2YzNTVlMGVlZjAyZDZhN2E4MDc5MC4uOTk3NjZlM2E2NmJkMzZlYjQy
ZmVkMmE5MjY5ZDM0YjA2NjE5NGQ3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVy
L2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5jcHAKQEAgLTU0LDcg
KzU0LDcgQEAgaW50NjRfdCBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OmVzdGltYXRlZFNpemVJ
blN0b3JhZ2UoKQogCiAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcmVz
cG9uc2UoKS5odHRwSGVhZGVyRmllbGRzKCkuZW5kKCk7CiAgICAgZm9yIChIVFRQSGVhZGVyTWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IHJlc3BvbnNlKCkuaHR0cEhlYWRlckZpZWxkcygpLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgbV9lc3RpbWF0ZWRTaXplSW5TdG9yYWdlICs9
IChpdC0+Zmlyc3QubGVuZ3RoKCkgKyBpdC0+c2Vjb25kLmxlbmd0aCgpICsgMikgKiBzaXplb2Yo
VUNoYXIpOworICAgICAgICBtX2VzdGltYXRlZFNpemVJblN0b3JhZ2UgKz0gKGl0LT5rZXkubGVu
Z3RoKCkgKyBpdC0+dmFsdWUubGVuZ3RoKCkgKyAyKSAqIHNpemVvZihVQ2hhcik7CiAKICAgICBt
X2VzdGltYXRlZFNpemVJblN0b3JhZ2UgKz0gdXJsKCkuc3RyaW5nKCkubGVuZ3RoKCkgKiBzaXpl
b2YoVUNoYXIpOwogICAgIG1fZXN0aW1hdGVkU2l6ZUluU3RvcmFnZSArPSBzaXplb2YoaW50KTsg
Ly8gcmVzcG9uc2UoKS5tX2h0dHBTdGF0dXNDb2RlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcAppbmRleCA1
ZDEwM2IyZmY3YjRjYmE1NGUwMzdiYTZjODc5NjIzMDRkMDVlZTYxLi41YTkwODFmZjJkZWM4ZmNl
NjIyMzE3OGIwZTA5YzU4ZjViMjg5OGY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAKQEAgLTEzNyw4
ICsxMzcsOCBAQCBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdl
OjpmaW5kT3JDcmVhdGVDYWNoZUdyb3VwKGNvbnN0IEtVUgogICAgIENhY2hlR3JvdXBNYXA6OkFk
ZFJlc3VsdCByZXN1bHQgPSBtX2NhY2hlc0luTWVtb3J5LmFkZChtYW5pZmVzdFVSTCwgMCk7CiAg
ICAgCiAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICBBU1NFUlQocmVzdWx0
Lml0ZXJhdG9yLT5zZWNvbmQpOwotICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT5zZWNv
bmQ7CisgICAgICAgIEFTU0VSVChyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAgICAgfQogCiAgICAgLy8gTG9vayB1cCB0aGUg
Z3JvdXAgaW4gdGhlIGRhdGFiYXNlCkBAIC0xNTAsNyArMTUwLDcgQEAgQXBwbGljYXRpb25DYWNo
ZUdyb3VwKiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZmluZE9yQ3JlYXRlQ2FjaGVHcm91cChj
b25zdCBLVVIKICAgICAgICAgbV9jYWNoZUhvc3RTZXQuYWRkKHVybEhvc3RIYXNoKG1hbmlmZXN0
VVJMKSk7CiAgICAgfQogICAgIAotICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gZ3JvdXA7
CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGdyb3VwOwogICAgIAogICAgIHJldHVybiBn
cm91cDsKIH0KQEAgLTE5Nyw3ICsxOTcsNyBAQCBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIEFwcGxp
Y2F0aW9uQ2FjaGVTdG9yYWdlOjpjYWNoZUdyb3VwRm9yVVJMKGNvbnN0IEtVUkwmIHVybAogICAg
IC8vIENoZWNrIGlmIGEgY2FjaGUgYWxyZWFkeSBleGlzdHMgaW4gbWVtb3J5LgogICAgIENhY2hl
R3JvdXBNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fY2FjaGVzSW5NZW1vcnkuZW5kKCk7CiAg
ICAgZm9yIChDYWNoZUdyb3VwTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fY2FjaGVzSW5NZW1v
cnkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVH
cm91cCogZ3JvdXAgPSBpdC0+c2Vjb25kOworICAgICAgICBBcHBsaWNhdGlvbkNhY2hlR3JvdXAq
IGdyb3VwID0gaXQtPnZhbHVlOwogCiAgICAgICAgIEFTU0VSVCghZ3JvdXAtPmlzT2Jzb2xldGUo
KSk7CiAKQEAgLTI2OCw3ICsyNjgsNyBAQCBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIEFwcGxpY2F0
aW9uQ2FjaGVTdG9yYWdlOjpmYWxsYmFja0NhY2hlR3JvdXBGb3JVUkwoY29uc3QgSwogICAgIC8v
IENoZWNrIGlmIGFuIGFwcHJvcHJpYXRlIGNhY2hlIGFscmVhZHkgZXhpc3RzIGluIG1lbW9yeS4K
ICAgICBDYWNoZUdyb3VwTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2NhY2hlc0luTWVtb3J5
LmVuZCgpOwogICAgIGZvciAoQ2FjaGVHcm91cE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2Nh
Y2hlc0luTWVtb3J5LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBBcHBsaWNh
dGlvbkNhY2hlR3JvdXAqIGdyb3VwID0gaXQtPnNlY29uZDsKKyAgICAgICAgQXBwbGljYXRpb25D
YWNoZUdyb3VwKiBncm91cCA9IGl0LT52YWx1ZTsKICAgICAgICAgCiAgICAgICAgIEFTU0VSVCgh
Z3JvdXAtPmlzT2Jzb2xldGUoKSk7CiAKQEAgLTcxMywxMyArNzEzLDEzIEBAIGJvb2wgQXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hlLCBSZXNvdXJj
ZVN0b3JhZ2VJREpvCiAgICAgewogICAgICAgICBBcHBsaWNhdGlvbkNhY2hlOjpSZXNvdXJjZU1h
cDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY2FjaGUtPmVuZCgpOwogICAgICAgICBmb3IgKEFwcGxp
Y2F0aW9uQ2FjaGU6OlJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGNhY2hlLT5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIG9sZFN0b3JhZ2VJ
RCA9IGl0LT5zZWNvbmQtPnN0b3JhZ2VJRCgpOwotICAgICAgICAgICAgaWYgKCFzdG9yZShpdC0+
c2Vjb25kLmdldCgpLCBjYWNoZVN0b3JhZ2VJRCkpCisgICAgICAgICAgICB1bnNpZ25lZCBvbGRT
dG9yYWdlSUQgPSBpdC0+dmFsdWUtPnN0b3JhZ2VJRCgpOworICAgICAgICAgICAgaWYgKCFzdG9y
ZShpdC0+dmFsdWUuZ2V0KCksIGNhY2hlU3RvcmFnZUlEKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICAgICAgICAgIC8vIFN0b3JpbmcgdGhlIHJlc291cmNlIHN1Y2NlZWRl
ZC4gTG9nIGl0cyBvbGQgc3RvcmFnZUlEIGluIGNhc2UKICAgICAgICAgICAgIC8vIGl0IG5lZWRz
IHRvIGJlIHJlc3RvcmVkIGxhdGVyLgotICAgICAgICAgICAgc3RvcmFnZUlESm91cm5hbC0+YWRk
KGl0LT5zZWNvbmQuZ2V0KCksIG9sZFN0b3JhZ2VJRCk7CisgICAgICAgICAgICBzdG9yYWdlSURK
b3VybmFsLT5hZGQoaXQtPnZhbHVlLmdldCgpLCBvbGRTdG9yYWdlSUQpOwogICAgICAgICB9CiAg
ICAgfQogICAgIApAQCAtODM5LDkgKzgzOSw5IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3Jh
Z2U6OnN0b3JlKEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2UsIHVuc2lnbmVkCiAg
ICAgCiAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcmVzb3VyY2UtPnJl
c3BvbnNlKCkuaHR0cEhlYWRlckZpZWxkcygpLmVuZCgpOwogICAgIGZvciAoSFRUUEhlYWRlck1h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSByZXNvdXJjZS0+cmVzcG9uc2UoKS5odHRwSGVhZGVyRmll
bGRzKCkuYmVnaW4oKTsgaXQhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPmtleSk7
CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKChVQ2hhciknOicpOwotICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZChpdC0+c2Vjb25kKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQoaXQtPnZhbHVlKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoKFVDaGFyKSdcbicp
OwogICAgIH0KICAgICAKQEAgLTEyNDEsNyArMTI0MSw3IEBAIHZvaWQgQXBwbGljYXRpb25DYWNo
ZVN0b3JhZ2U6OmVtcHR5KCkKICAgICAvLyB1bnRpbCBhIGNhY2hlIHVwZGF0ZSBwcm9jZXNzIGhh
cyBiZWVuIGluaXRpYXRlZC4KICAgICBDYWNoZUdyb3VwTWFwOjpjb25zdF9pdGVyYXRvciBlbmQg
PSBtX2NhY2hlc0luTWVtb3J5LmVuZCgpOwogICAgIGZvciAoQ2FjaGVHcm91cE1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX2NhY2hlc0luTWVtb3J5LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkK
LSAgICAgICAgaXQtPnNlY29uZC0+Y2xlYXJTdG9yYWdlSUQoKTsKKyAgICAgICAgaXQtPnZhbHVl
LT5jbGVhclN0b3JhZ2VJRCgpOwogICAgIAogICAgIGNoZWNrRm9yRGVsZXRlZFJlc291cmNlcygp
OwogfQpAQCAtMTMwMyw3ICsxMzAzLDcgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6
c3RvcmVDb3B5T2ZDYWNoZShjb25zdCBTdHJpbmcmIGNhY2hlRGlyZWN0b3J5LCBBcHAKICAgICAv
LyBUcmF2ZXJzZSB0aGUgY2FjaGUgYW5kIGFkZCBjb3BpZXMgb2YgYWxsIHJlc291cmNlcy4KICAg
ICBBcHBsaWNhdGlvbkNhY2hlOjpSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY2Fj
aGUtPmVuZCgpOwogICAgIGZvciAoQXBwbGljYXRpb25DYWNoZTo6UmVzb3VyY2VNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gY2FjaGUtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAg
ICBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqIHJlc291cmNlID0gaXQtPnNlY29uZC5nZXQoKTsK
KyAgICAgICAgQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJjZSA9IGl0LT52YWx1ZS5n
ZXQoKTsKICAgICAgICAgCiAgICAgICAgIFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+
IHJlc291cmNlQ29weSA9IEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6Y3JlYXRlKHJlc291cmNl
LT51cmwoKSwgcmVzb3VyY2UtPnJlc3BvbnNlKCksIHJlc291cmNlLT50eXBlKCksIHJlc291cmNl
LT5kYXRhKCksIHJlc291cmNlLT5wYXRoKCkpOwogICAgICAgICAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL0FyY2hpdmVGYWN0b3J5LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9hcmNoaXZlL0FyY2hpdmVGYWN0b3J5LmNwcAppbmRleCA1MjFkZWIxZDcwNDZi
NTA1ZjcwNzU0ZmQyYmI1YWU4NzBlNzQxNDU5Li4yZmNmMzI5NDAyNWFlNzM0ZTM1ZTBkMTdjNjll
MjUxNjQyNzc0ZTc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9B
cmNoaXZlRmFjdG9yeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvQXJj
aGl2ZUZhY3RvcnkuY3BwCkBAIC05Miw3ICs5Miw3IEBAIHZvaWQgQXJjaGl2ZUZhY3Rvcnk6OnJl
Z2lzdGVyS25vd25BcmNoaXZlTUlNRVR5cGVzKCkKICAgICBBcmNoaXZlTUlNRVR5cGVzTWFwOjpp
dGVyYXRvciBlbmQgPSBhcmNoaXZlTUlNRVR5cGVzKCkuZW5kKCk7CiAKICAgICBmb3IgKDsgaSAh
PSBlbmQ7ICsraSkKLSAgICAgICAgbWltZVR5cGVzLmFkZChpLT5maXJzdCk7CisgICAgICAgIG1p
bWVUeXBlcy5hZGQoaS0+a2V5KTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
bG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5jcHAKaW5kZXggZTUwNWM3ODQ0YWQ3ZTViYWU3ZWI1
ODFmOTExZmVhYTQ2ZDczNDk5NS4uZTRmM2NiMmIxYzkyMjkwZDkxY2ZmNjFkMzY0ODcxNTJjMmYy
ZjI1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jl
c291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmF3UmVz
b3VyY2UuY3BwCkBAIC0xNDgsOCArMTQ4LDggQEAgYm9vbCBDYWNoZWRSYXdSZXNvdXJjZTo6Y2Fu
UmV1c2UoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBuZXdSZXF1ZXN0KSBjb25zdAogCiAgICAgSFRU
UEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbmV3SGVhZGVycy5lbmQoKTsKICAgICBm
b3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGkgPSBuZXdIZWFkZXJzLmJlZ2luKCk7
IGkgIT0gZW5kOyArK2kpIHsKLSAgICAgICAgQXRvbWljU3RyaW5nIGhlYWRlck5hbWUgPSBpLT5m
aXJzdDsKLSAgICAgICAgaWYgKGktPnNlY29uZCAhPSBvbGRIZWFkZXJzLmdldChoZWFkZXJOYW1l
KSkKKyAgICAgICAgQXRvbWljU3RyaW5nIGhlYWRlck5hbWUgPSBpLT5rZXk7CisgICAgICAgIGlm
IChpLT52YWx1ZSAhPSBvbGRIZWFkZXJzLmdldChoZWFkZXJOYW1lKSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
bG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNwcAppbmRleCAwMzY4YTcyNDUyNWZhZmU2NDkw
NTg3YmViMmI0ZjZlNmU5ZmNjNmU2Li40NGM0ZTUyY2NiNjcyNGY2NDQ1YzFjODE2MjQ1ZmYwYmM2
YTI2NmJhIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVz
b3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJj
ZS5jcHAKQEAgLTU5MCw4ICs1OTAsOCBAQCB2b2lkIENhY2hlZFJlc291cmNlOjpzd2l0Y2hDbGll
bnRzVG9SZXZhbGlkYXRlZFJlc291cmNlKCkKICAgICBWZWN0b3I8Q2FjaGVkUmVzb3VyY2VDbGll
bnQqPiBjbGllbnRzVG9Nb3ZlOwogICAgIEhhc2hDb3VudGVkU2V0PENhY2hlZFJlc291cmNlQ2xp
ZW50Kj46Oml0ZXJhdG9yIGVuZDIgPSBtX2NsaWVudHMuZW5kKCk7CiAgICAgZm9yIChIYXNoQ291
bnRlZFNldDxDYWNoZWRSZXNvdXJjZUNsaWVudCo+OjppdGVyYXRvciBpdCA9IG1fY2xpZW50cy5i
ZWdpbigpOyBpdCAhPSBlbmQyOyArK2l0KSB7Ci0gICAgICAgIENhY2hlZFJlc291cmNlQ2xpZW50
KiBjbGllbnQgPSBpdC0+Zmlyc3Q7Ci0gICAgICAgIHVuc2lnbmVkIGNvdW50ID0gaXQtPnNlY29u
ZDsKKyAgICAgICAgQ2FjaGVkUmVzb3VyY2VDbGllbnQqIGNsaWVudCA9IGl0LT5rZXk7CisgICAg
ICAgIHVuc2lnbmVkIGNvdW50ID0gaXQtPnZhbHVlOwogICAgICAgICB3aGlsZSAoY291bnQpIHsK
ICAgICAgICAgICAgIGNsaWVudHNUb01vdmUuYXBwZW5kKGNsaWVudCk7CiAgICAgICAgICAgICAt
LWNvdW50OwpAQCAtNjI1LDkgKzYyNSw5IEBAIHZvaWQgQ2FjaGVkUmVzb3VyY2U6OnVwZGF0ZVJl
c3BvbnNlQWZ0ZXJSZXZhbGlkYXRpb24oY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgdmFsCiAgICAg
SFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbmV3SGVhZGVycy5lbmQoKTsKICAg
ICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbmV3SGVhZGVycy5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgLy8gRG9uJ3QgYWxsb3cgMzA0IHJlc3Bv
bnNlIHRvIHVwZGF0ZSBjb250ZW50IGhlYWRlcnMsIHRoZXNlIGNhbid0IGNoYW5nZSBidXQgc29t
ZSBzZXJ2ZXJzIHNlbmQgd3JvbmcgdmFsdWVzLgotICAgICAgICBpZiAoaXQtPmZpcnN0LnN0YXJ0
c1dpdGgoY29udGVudEhlYWRlclByZWZpeCwgZmFsc2UpKQorICAgICAgICBpZiAoaXQtPmtleS5z
dGFydHNXaXRoKGNvbnRlbnRIZWFkZXJQcmVmaXgsIGZhbHNlKSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICBtX3Jlc3BvbnNlLnNldEhUVFBIZWFkZXJGaWVsZChpdC0+Zmlyc3QsIGl0
LT5zZWNvbmQpOworICAgICAgICBtX3Jlc3BvbnNlLnNldEhUVFBIZWFkZXJGaWVsZChpdC0+a2V5
LCBpdC0+dmFsdWUpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuaAppbmRleCA4YjM3ODBiNWU2
NGIyMTQzNDYyODk2YmRhMmE2YTI2NWE1YThhMDc0Li43OTMzYjBiODE0YzUyMTI1NmUwNzYwZjg2
MWI0MzEwOTdiODliNTljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUv
Q2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
Y2FjaGUvQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuaApAQCAtNDIsNyArNDIsNyBAQCBwdWJs
aWM6CiAgICAgICAgIEl0ZXJhdG9yIGVuZCA9IHNldC5lbmQoKTsKICAgICAgICAgc2l6ZV90IGNs
aWVudEluZGV4ID0gMDsKICAgICAgICAgZm9yIChJdGVyYXRvciBjdXJyZW50ID0gc2V0LmJlZ2lu
KCk7IGN1cnJlbnQgIT0gZW5kOyArK2N1cnJlbnQpCi0gICAgICAgICAgICBtX2NsaWVudFZlY3Rv
cltjbGllbnRJbmRleCsrXSA9IGN1cnJlbnQtPmZpcnN0OworICAgICAgICAgICAgbV9jbGllbnRW
ZWN0b3JbY2xpZW50SW5kZXgrK10gPSBjdXJyZW50LT5rZXk7CiAgICAgfQogCiAgICAgVCogbmV4
dCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNl
TG9hZGVyLmNwcAppbmRleCA5ZTllNDEwNmM4MmY4YjUwZjQzMTBiNWM5NjNhNGEwNGE3YzY5Nzdj
Li5kZTZiNjI3YzRlMzI2ZTkzZjJhMjFiYjA0MWE5NTlkZjgzMTIyZWI3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAKQEAg
LTEyOSw3ICsxMjksNyBAQCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6fkNhY2hlZFJlc291cmNlTG9h
ZGVyKCkKICAgICBjbGVhclByZWxvYWRzKCk7CiAgICAgRG9jdW1lbnRSZXNvdXJjZU1hcDo6aXRl
cmF0b3IgZW5kID0gbV9kb2N1bWVudFJlc291cmNlcy5lbmQoKTsKICAgICBmb3IgKERvY3VtZW50
UmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9kb2N1bWVudFJlc291cmNlcy5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPnNldE93bmluZ0NhY2hlZFJlc291
cmNlTG9hZGVyKDApOworICAgICAgICBpdC0+dmFsdWUtPnNldE93bmluZ0NhY2hlZFJlc291cmNl
TG9hZGVyKDApOwogCiAgICAgLy8gTWFrZSBzdXJlIG5vIHJlcXVlc3RzIHN0aWxsIHBvaW50IHRv
IHRoaXMgQ2FjaGVkUmVzb3VyY2VMb2FkZXIKICAgICBBU1NFUlQobV9yZXF1ZXN0Q291bnQgPT0g
MCk7CkBAIC00MjksNyArNDI5LDcgQEAgQ2FjaGVkUmVzb3VyY2UqIENhY2hlZFJlc291cmNlTG9h
ZGVyOjpyZXF1ZXN0UmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2U6OlR5cGUgdHlwZSwKICAgICBpZiAo
bWVtb3J5Q2FjaGUoKS0+ZGlzYWJsZWQoKSkgewogICAgICAgICBEb2N1bWVudFJlc291cmNlTWFw
OjppdGVyYXRvciBpdCA9IG1fZG9jdW1lbnRSZXNvdXJjZXMuZmluZCh1cmwuc3RyaW5nKCkpOwog
ICAgICAgICBpZiAoaXQgIT0gbV9kb2N1bWVudFJlc291cmNlcy5lbmQoKSkgewotICAgICAgICAg
ICAgaXQtPnNlY29uZC0+c2V0T3duaW5nQ2FjaGVkUmVzb3VyY2VMb2FkZXIoMCk7CisgICAgICAg
ICAgICBpdC0+dmFsdWUtPnNldE93bmluZ0NhY2hlZFJlc291cmNlTG9hZGVyKDApOwogICAgICAg
ICAgICAgbV9kb2N1bWVudFJlc291cmNlcy5yZW1vdmUoaXQpOwogICAgICAgICB9CiAgICAgfQpA
QCAtNjU0LDcgKzY1NCw3IEBAIHZvaWQgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnNldEF1dG9Mb2Fk
SW1hZ2VzKGJvb2wgZW5hYmxlKQogCiAgICAgRG9jdW1lbnRSZXNvdXJjZU1hcDo6aXRlcmF0b3Ig
ZW5kID0gbV9kb2N1bWVudFJlc291cmNlcy5lbmQoKTsKICAgICBmb3IgKERvY3VtZW50UmVzb3Vy
Y2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9kb2N1bWVudFJlc291cmNlcy5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKLSAgICAgICAgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlID0gaXQtPnNlY29u
ZC5nZXQoKTsKKyAgICAgICAgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlID0gaXQtPnZhbHVlLmdl
dCgpOwogICAgICAgICBpZiAocmVzb3VyY2UtPnR5cGUoKSA9PSBDYWNoZWRSZXNvdXJjZTo6SW1h
Z2VSZXNvdXJjZSkgewogICAgICAgICAgICAgQ2FjaGVkSW1hZ2UqIGltYWdlID0gY29uc3RfY2Fz
dDxDYWNoZWRJbWFnZSo+KHN0YXRpY19jYXN0PGNvbnN0IENhY2hlZEltYWdlKj4ocmVzb3VyY2Up
KTsKIApAQCAtNjc0LDcgKzY3NCw3IEBAIHZvaWQgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlbW92
ZUNhY2hlZFJlc291cmNlKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSkgY29uc3QKICNpZm5kZWYg
TkRFQlVHCiAgICAgRG9jdW1lbnRSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX2RvY3VtZW50
UmVzb3VyY2VzLmZpbmQocmVzb3VyY2UtPnVybCgpKTsKICAgICBpZiAoaXQgIT0gbV9kb2N1bWVu
dFJlc291cmNlcy5lbmQoKSkKLSAgICAgICAgQVNTRVJUKGl0LT5zZWNvbmQuZ2V0KCkgPT0gcmVz
b3VyY2UpOworICAgICAgICBBU1NFUlQoaXQtPnZhbHVlLmdldCgpID09IHJlc291cmNlKTsKICNl
bmRpZgogICAgIG1fZG9jdW1lbnRSZXNvdXJjZXMucmVtb3ZlKHJlc291cmNlLT51cmwoKSk7CiB9
CkBAIC03MDYsOSArNzA2LDkgQEAgdm9pZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6Z2FyYmFnZUNv
bGxlY3REb2N1bWVudFJlc291cmNlc1RpbWVyRmlyZWQoVGltZXI8Q2FjaGUKICAgICBTdHJpbmdW
ZWN0b3IgcmVzb3VyY2VzVG9EZWxldGU7CiAKICAgICBmb3IgKERvY3VtZW50UmVzb3VyY2VNYXA6
Oml0ZXJhdG9yIGl0ID0gbV9kb2N1bWVudFJlc291cmNlcy5iZWdpbigpOyBpdCAhPSBtX2RvY3Vt
ZW50UmVzb3VyY2VzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kLT5oYXNP
bmVIYW5kbGUoKSkgewotICAgICAgICAgICAgcmVzb3VyY2VzVG9EZWxldGUuYXBwZW5kKGl0LT5m
aXJzdCk7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRPd25pbmdDYWNoZWRSZXNvdXJjZUxv
YWRlcigwKTsKKyAgICAgICAgaWYgKGl0LT52YWx1ZS0+aGFzT25lSGFuZGxlKCkpIHsKKyAgICAg
ICAgICAgIHJlc291cmNlc1RvRGVsZXRlLmFwcGVuZChpdC0+a2V5KTsKKyAgICAgICAgICAgIGl0
LT52YWx1ZS0+c2V0T3duaW5nQ2FjaGVkUmVzb3VyY2VMb2FkZXIoMCk7CiAgICAgICAgIH0KICAg
ICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNo
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuY3BwCmluZGV4
IDExMjc1ZTA2ZDgxMjIzYzQ3NDE4NmU1M2Y4ZDdjYmIzNjFjZjBkZWUuLmQyZGI0ZGE3N2RjNjg5
NGNmZWM1YWQ2Njk2NTk2OWVmNDQwOGNlNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9jYWNoZS9NZW1vcnlDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2Nh
Y2hlL01lbW9yeUNhY2hlLmNwcApAQCAtNTM4LDcgKzUzOCw3IEBAIHZvaWQgTWVtb3J5Q2FjaGU6
OnJlbW92ZVJlc291cmNlc1dpdGhPcmlnaW4oU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKIAogICAg
IENhY2hlZFJlc291cmNlTWFwOjppdGVyYXRvciBlID0gbV9yZXNvdXJjZXMuZW5kKCk7CiAgICAg
Zm9yIChDYWNoZWRSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5iZWdpbigp
OyBpdCAhPSBlOyArK2l0KSB7Ci0gICAgICAgIENhY2hlZFJlc291cmNlKiByZXNvdXJjZSA9IGl0
LT5zZWNvbmQ7CisgICAgICAgIENhY2hlZFJlc291cmNlKiByZXNvdXJjZSA9IGl0LT52YWx1ZTsK
ICAgICAgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiByZXNvdXJjZU9yaWdpbiA9IFNlY3VyaXR5
T3JpZ2luOjpjcmVhdGVGcm9tU3RyaW5nKHJlc291cmNlLT51cmwoKSk7CiAgICAgICAgIGlmICgh
cmVzb3VyY2VPcmlnaW4pCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTU1NCw3ICs1NTQsNyBA
QCB2b2lkIE1lbW9yeUNhY2hlOjpnZXRPcmlnaW5zV2l0aENhY2hlKFNlY3VyaXR5T3JpZ2luU2V0
JiBvcmlnaW5zKQogewogICAgIENhY2hlZFJlc291cmNlTWFwOjppdGVyYXRvciBlID0gbV9yZXNv
dXJjZXMuZW5kKCk7CiAgICAgZm9yIChDYWNoZWRSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBt
X3Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSBlOyArK2l0KQotICAgICAgICBvcmlnaW5zLmFkZChT
ZWN1cml0eU9yaWdpbjo6Y3JlYXRlRnJvbVN0cmluZyhpdC0+c2Vjb25kLT51cmwoKSkpOworICAg
ICAgICBvcmlnaW5zLmFkZChTZWN1cml0eU9yaWdpbjo6Y3JlYXRlRnJvbVN0cmluZyhpdC0+dmFs
dWUtPnVybCgpKSk7CiB9CiAKIHZvaWQgTWVtb3J5Q2FjaGU6OnJlbW92ZUZyb21MaXZlRGVjb2Rl
ZFJlc291cmNlc0xpc3QoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlKQpAQCAtNjg3LDcgKzY4Nyw3
IEBAIE1lbW9yeUNhY2hlOjpTdGF0aXN0aWNzIE1lbW9yeUNhY2hlOjpnZXRTdGF0aXN0aWNzKCkK
ICAgICBTdGF0aXN0aWNzIHN0YXRzOwogICAgIENhY2hlZFJlc291cmNlTWFwOjppdGVyYXRvciBl
ID0gbV9yZXNvdXJjZXMuZW5kKCk7CiAgICAgZm9yIChDYWNoZWRSZXNvdXJjZU1hcDo6aXRlcmF0
b3IgaSA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7IGkgIT0gZTsgKytpKSB7Ci0gICAgICAgIENhY2hl
ZFJlc291cmNlKiByZXNvdXJjZSA9IGktPnNlY29uZDsKKyAgICAgICAgQ2FjaGVkUmVzb3VyY2Uq
IHJlc291cmNlID0gaS0+dmFsdWU7CiAgICAgICAgIHN3aXRjaCAocmVzb3VyY2UtPnR5cGUoKSkg
ewogICAgICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpJbWFnZVJlc291cmNlOgogICAgICAgICAg
ICAgc3RhdHMuaW1hZ2VzLmFkZFJlc291cmNlKHJlc291cmNlKTsKQEAgLTcyMyw3ICs3MjMsNyBA
QCB2b2lkIE1lbW9yeUNhY2hlOjpzZXREaXNhYmxlZChib29sIGRpc2FibGVkKQogICAgICAgICBD
YWNoZWRSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaSA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7CiAgICAg
ICAgIGlmIChpID09IG1fcmVzb3VyY2VzLmVuZCgpKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGV2aWN0KGktPnNlY29uZCk7CisgICAgICAgIGV2aWN0KGktPnZhbHVlKTsKICAgICB9CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFzZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuY3BwCmluZGV4IGNl
NGYwMTA0NjZjMGZiOGQxZGQ2ZTJjNWNmMmNkMmU5ZDMxMmU2ODYuLjViZGE2MzMxZTI5NGI0Nzg0
YjU1NjI3NWQzMTI1YWE0ZGUxMDhkNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9pY29uL0ljb25EYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24v
SWNvbkRhdGFiYXNlLmNwcApAQCAtMTg1LDcgKzE4NSw3IEBAIHZvaWQgSWNvbkRhdGFiYXNlOjpy
ZW1vdmVBbGxJY29ucygpCiAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBQYWdlVVJMUmVjb3JkKj46
Oml0ZXJhdG9yIGl0ZXIgPSBtX3BhZ2VVUkxUb1JlY29yZE1hcC5iZWdpbigpOwogICAgICAgICBI
YXNoTWFwPFN0cmluZywgUGFnZVVSTFJlY29yZCo+OjppdGVyYXRvciBlbmQgPSBtX3BhZ2VVUkxU
b1JlY29yZE1hcC5lbmQoKTsKICAgICAgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCi0g
ICAgICAgICAgICAoKml0ZXIpLnNlY29uZC0+c2V0SWNvblJlY29yZCgwKTsKKyAgICAgICAgICAg
ICgqaXRlcikudmFsdWUtPnNldEljb25SZWNvcmQoMCk7CiAgICAgICAgICAgICAKICAgICAgICAg
Ly8gQ2xlYXIgdGhlIGljb25VUkwgLT4gSWNvblJlY29yZCBtYXAKICAgICAgICAgbV9pY29uVVJM
VG9SZWNvcmRNYXAuY2xlYXIoKTsKQEAgLTc1NCw3ICs3NTQsNyBAQCBzaXplX3QgSWNvbkRhdGFi
YXNlOjppY29uUmVjb3JkQ291bnRXaXRoRGF0YSgpCiAgICAgSGFzaE1hcDxTdHJpbmcsIEljb25S
ZWNvcmQqPjo6aXRlcmF0b3IgZW5kID0gbV9pY29uVVJMVG9SZWNvcmRNYXAuZW5kKCk7CiAgICAg
CiAgICAgZm9yICg7IGkgIT0gZW5kOyArK2kpCi0gICAgICAgIHJlc3VsdCArPSAoKCppKS5zZWNv
bmQtPmltYWdlRGF0YVN0YXR1cygpID09IEltYWdlRGF0YVN0YXR1c1ByZXNlbnQpOworICAgICAg
ICByZXN1bHQgKz0gKCgqaSkudmFsdWUtPmltYWdlRGF0YVN0YXR1cygpID09IEltYWdlRGF0YVN0
YXR1c1ByZXNlbnQpOwogICAgICAgICAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRE9NV2luZG93LmNwcAppbmRleCA5ZDRjM2I0MWY3M2Q0M2NhZjA0ZDg0YTYyOGQ5Njcz
NDM4NTEwMTk0Li41NzY5NTYzZmRjNjJjODJlZTBkNjMzZTQ2YWI5OWIzYTljZjM0ZTRmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCkBAIC0yNDUsNyArMjQ1LDcgQEAgYm9vbCBET01XaW5k
b3c6OmRpc3BhdGNoQWxsUGVuZGluZ0JlZm9yZVVubG9hZEV2ZW50cygpCiAgICAgVmVjdG9yPFJl
ZlB0cjxET01XaW5kb3c+ID4gd2luZG93czsKICAgICBET01XaW5kb3dTZXQ6Oml0ZXJhdG9yIGVu
ZCA9IHNldC5lbmQoKTsKICAgICBmb3IgKERPTVdpbmRvd1NldDo6aXRlcmF0b3IgaXQgPSBzZXQu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICB3aW5kb3dzLmFwcGVuZChpdC0+Zmly
c3QpOworICAgICAgICB3aW5kb3dzLmFwcGVuZChpdC0+a2V5KTsKIAogICAgIHNpemVfdCBzaXpl
ID0gd2luZG93cy5zaXplKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kp
IHsKQEAgLTI4Nyw3ICsyODcsNyBAQCB2b2lkIERPTVdpbmRvdzo6ZGlzcGF0Y2hBbGxQZW5kaW5n
VW5sb2FkRXZlbnRzKCkKICAgICBWZWN0b3I8UmVmUHRyPERPTVdpbmRvdz4gPiB3aW5kb3dzOwog
ICAgIERPTVdpbmRvd1NldDo6aXRlcmF0b3IgZW5kID0gc2V0LmVuZCgpOwogICAgIGZvciAoRE9N
V2luZG93U2V0OjppdGVyYXRvciBpdCA9IHNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0g
ICAgICAgIHdpbmRvd3MuYXBwZW5kKGl0LT5maXJzdCk7CisgICAgICAgIHdpbmRvd3MuYXBwZW5k
KGl0LT5rZXkpOwogCiAgICAgc2l6ZV90IHNpemUgPSB3aW5kb3dzLnNpemUoKTsKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRs
ZXIuY3BwCmluZGV4IDE2ODNjM2RiZDIyZWYyNzg3YWNlNTMzMzJiNjIxZGU4Mjg4ZDNlZjUuLjA1
NDA3MGFiNjMwOWJlYThmZWUxMjA0N2MzM2MzZmM4NGMzMzlmMTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0V2ZW50SGFuZGxlci5jcHAKQEAgLTM1MzIsNyArMzUzMiw3IEBAIGJvb2wgRXZlbnRIYW5kbGVy
OjpoYW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYgZXZlbnQpCiAgICAg
ICAgIC8vIHJlbGVhc2VkIG9yIGNhbmNlbGxlZCBpdCB3aWxsIG9ubHkgYXBwZWFyIGluIHRoZSBj
aGFuZ2VkVG91Y2hlcyBsaXN0LgogICAgICAgICBpZiAocG9pbnRTdGF0ZSAhPSBQbGF0Zm9ybVRv
dWNoUG9pbnQ6OlRvdWNoUmVsZWFzZWQgJiYgcG9pbnRTdGF0ZSAhPSBQbGF0Zm9ybVRvdWNoUG9p
bnQ6OlRvdWNoQ2FuY2VsbGVkKSB7CiAgICAgICAgICAgICB0b3VjaGVzLT5hcHBlbmQodG91Y2gp
OwotICAgICAgICAgICAgdGFyZ2V0VG91Y2hlc0l0ZXJhdG9yLT5zZWNvbmQtPmFwcGVuZCh0b3Vj
aCk7CisgICAgICAgICAgICB0YXJnZXRUb3VjaGVzSXRlcmF0b3ItPnZhbHVlLT5hcHBlbmQodG91
Y2gpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gTm93IGJ1aWxkIHVwIHRoZSBjb3JyZWN0IGxp
c3QgZm9yIGNoYW5nZWRUb3VjaGVzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9G
cmFtZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAppbmRleCBkNWMxNzZkMjFl
MmI2MTZhNTAxZWUxNDQ5ZGIyZTA1NmIyYjhkYTg1Li5kZTJlOTQxOWJhZjBlOTc0ZjE5ZDU2ZjNi
NGYzZWQ3YjM1ZjYyOGYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcApAQCAtNTY3LDcgKzU2Nyw3IEBA
IHZvaWQgRnJhbWU6OmluamVjdFVzZXJTY3JpcHRzKFVzZXJTY3JpcHRJbmplY3Rpb25UaW1lIGlu
amVjdGlvblRpbWUpCiAgICAgICAgIHJldHVybjsKICAgICBVc2VyU2NyaXB0TWFwOjpjb25zdF9p
dGVyYXRvciBlbmQgPSB1c2VyU2NyaXB0cy0+ZW5kKCk7CiAgICAgZm9yIChVc2VyU2NyaXB0TWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IHVzZXJTY3JpcHRzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpCi0gICAgICAgIGluamVjdFVzZXJTY3JpcHRzRm9yV29ybGQoaXQtPmZpcnN0LmdldCgpLCAq
aXQtPnNlY29uZCwgaW5qZWN0aW9uVGltZSk7CisgICAgICAgIGluamVjdFVzZXJTY3JpcHRzRm9y
V29ybGQoaXQtPmtleS5nZXQoKSwgKml0LT52YWx1ZSwgaW5qZWN0aW9uVGltZSk7CiB9CiAKIHZv
aWQgRnJhbWU6OmluamVjdFVzZXJTY3JpcHRzRm9yV29ybGQoRE9NV3JhcHBlcldvcmxkKiB3b3Js
ZCwgY29uc3QgVXNlclNjcmlwdFZlY3RvciYgdXNlclNjcmlwdHMsIFVzZXJTY3JpcHRJbmplY3Rp
b25UaW1lIGluamVjdGlvblRpbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Bh
Z2VHcm91cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5jcHAKaW5kZXggZjkz
OWM5YmZkMmEzNzYxOWY2NTc3YmY3ZDI1ZmRmMTcyYjNhMDczNy4uNjg5NjBkMTk5MTU1ZGU3NDI5
ZTgwNDUyYmRjZWJhNWI3MzhkMTMwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9Q
YWdlR3JvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmNwcApAQCAt
OTMsMTIgKzkzLDEyIEBAIFBhZ2VHcm91cCogUGFnZUdyb3VwOjpwYWdlR3JvdXAoY29uc3QgU3Ry
aW5nJiBncm91cE5hbWUpCiAgICAgUGFnZUdyb3VwTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gcGFn
ZUdyb3Vwcy0+YWRkKGdyb3VwTmFtZSwgMCk7CiAKICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkp
IHsKLSAgICAgICAgQVNTRVJUKCFyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7Ci0gICAgICAgIHJl
c3VsdC5pdGVyYXRvci0+c2Vjb25kID0gbmV3IFBhZ2VHcm91cChncm91cE5hbWUpOworICAgICAg
ICBBU1NFUlQoIXJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOworICAgICAgICByZXN1bHQuaXRlcmF0
b3ItPnZhbHVlID0gbmV3IFBhZ2VHcm91cChncm91cE5hbWUpOwogICAgIH0KIAotICAgIEFTU0VS
VChyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7Ci0gICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+
c2Vjb25kOworICAgIEFTU0VSVChyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKKyAgICByZXR1cm4g
cmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIAogdm9pZCBQYWdlR3JvdXA6OmNsb3NlTG9jYWxT
dG9yYWdlKCkKQEAgLTEwOSw4ICsxMDksOCBAQCB2b2lkIFBhZ2VHcm91cDo6Y2xvc2VMb2NhbFN0
b3JhZ2UoKQogICAgIFBhZ2VHcm91cE1hcDo6aXRlcmF0b3IgZW5kID0gcGFnZUdyb3Vwcy0+ZW5k
KCk7CiAKICAgICBmb3IgKFBhZ2VHcm91cE1hcDo6aXRlcmF0b3IgaXQgPSBwYWdlR3JvdXBzLT5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQtPmhhc0xv
Y2FsU3RvcmFnZSgpKQotICAgICAgICAgICAgaXQtPnNlY29uZC0+bG9jYWxTdG9yYWdlKCktPmNs
b3NlKCk7CisgICAgICAgIGlmIChpdC0+dmFsdWUtPmhhc0xvY2FsU3RvcmFnZSgpKQorICAgICAg
ICAgICAgaXQtPnZhbHVlLT5sb2NhbFN0b3JhZ2UoKS0+Y2xvc2UoKTsKICAgICB9CiB9CiAKQEAg
LTEyMSw4ICsxMjEsOCBAQCB2b2lkIFBhZ2VHcm91cDo6Y2xlYXJMb2NhbFN0b3JhZ2VGb3JBbGxP
cmlnaW5zKCkKIAogICAgIFBhZ2VHcm91cE1hcDo6aXRlcmF0b3IgZW5kID0gcGFnZUdyb3Vwcy0+
ZW5kKCk7CiAgICAgZm9yIChQYWdlR3JvdXBNYXA6Oml0ZXJhdG9yIGl0ID0gcGFnZUdyb3Vwcy0+
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kLT5oYXNM
b2NhbFN0b3JhZ2UoKSkKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPmxvY2FsU3RvcmFnZSgpLT5j
bGVhckFsbE9yaWdpbnNGb3JEZWxldGlvbigpOworICAgICAgICBpZiAoaXQtPnZhbHVlLT5oYXNM
b2NhbFN0b3JhZ2UoKSkKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+bG9jYWxTdG9yYWdlKCktPmNs
ZWFyQWxsT3JpZ2luc0ZvckRlbGV0aW9uKCk7CiAgICAgfQogfQogCkBAIC0xMzMsOCArMTMzLDgg
QEAgdm9pZCBQYWdlR3JvdXA6OmNsZWFyTG9jYWxTdG9yYWdlRm9yT3JpZ2luKFNlY3VyaXR5T3Jp
Z2luKiBvcmlnaW4pCiAKICAgICBQYWdlR3JvdXBNYXA6Oml0ZXJhdG9yIGVuZCA9IHBhZ2VHcm91
cHMtPmVuZCgpOwogICAgIGZvciAoUGFnZUdyb3VwTWFwOjppdGVyYXRvciBpdCA9IHBhZ2VHcm91
cHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnNlY29uZC0+
aGFzTG9jYWxTdG9yYWdlKCkpCi0gICAgICAgICAgICBpdC0+c2Vjb25kLT5sb2NhbFN0b3JhZ2Uo
KS0+Y2xlYXJPcmlnaW5Gb3JEZWxldGlvbihvcmlnaW4pOworICAgICAgICBpZiAoaXQtPnZhbHVl
LT5oYXNMb2NhbFN0b3JhZ2UoKSkKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+bG9jYWxTdG9yYWdl
KCktPmNsZWFyT3JpZ2luRm9yRGVsZXRpb24ob3JpZ2luKTsKICAgICB9ICAgIAogfQogICAgIApA
QCAtMTQ1LDggKzE0NSw4IEBAIHZvaWQgUGFnZUdyb3VwOjpzeW5jTG9jYWxTdG9yYWdlKCkKIAog
ICAgIFBhZ2VHcm91cE1hcDo6aXRlcmF0b3IgZW5kID0gcGFnZUdyb3Vwcy0+ZW5kKCk7CiAgICAg
Zm9yIChQYWdlR3JvdXBNYXA6Oml0ZXJhdG9yIGl0ID0gcGFnZUdyb3Vwcy0+YmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kLT5oYXNMb2NhbFN0b3JhZ2Uo
KSkKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPmxvY2FsU3RvcmFnZSgpLT5zeW5jKCk7CisgICAg
ICAgIGlmIChpdC0+dmFsdWUtPmhhc0xvY2FsU3RvcmFnZSgpKQorICAgICAgICAgICAgaXQtPnZh
bHVlLT5sb2NhbFN0b3JhZ2UoKS0+c3luYygpOwogICAgIH0KIH0KIApAQCAtMjY5LDcgKzI2OSw3
IEBAIHZvaWQgUGFnZUdyb3VwOjphZGRVc2VyU2NyaXB0VG9Xb3JsZChET01XcmFwcGVyV29ybGQq
IHdvcmxkLCBjb25zdCBTdHJpbmcmIHNvdXJjCiAgICAgT3duUHRyPFVzZXJTY3JpcHQ+IHVzZXJT
Y3JpcHQgPSBhZG9wdFB0cihuZXcgVXNlclNjcmlwdChzb3VyY2UsIHVybCwgd2hpdGVsaXN0LCBi
bGFja2xpc3QsIGluamVjdGlvblRpbWUsIGluamVjdGVkRnJhbWVzKSk7CiAgICAgaWYgKCFtX3Vz
ZXJTY3JpcHRzKQogICAgICAgICBtX3VzZXJTY3JpcHRzID0gYWRvcHRQdHIobmV3IFVzZXJTY3Jp
cHRNYXApOwotICAgIE93blB0cjxVc2VyU2NyaXB0VmVjdG9yPiYgc2NyaXB0c0luV29ybGQgPSBt
X3VzZXJTY3JpcHRzLT5hZGQod29ybGQsIG51bGxwdHIpLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAg
T3duUHRyPFVzZXJTY3JpcHRWZWN0b3I+JiBzY3JpcHRzSW5Xb3JsZCA9IG1fdXNlclNjcmlwdHMt
PmFkZCh3b3JsZCwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghc2NyaXB0c0lu
V29ybGQpCiAgICAgICAgIHNjcmlwdHNJbldvcmxkID0gYWRvcHRQdHIobmV3IFVzZXJTY3JpcHRW
ZWN0b3IpOwogICAgIHNjcmlwdHNJbldvcmxkLT5hcHBlbmQodXNlclNjcmlwdC5yZWxlYXNlKCkp
OwpAQCAtMjg2LDcgKzI4Niw3IEBAIHZvaWQgUGFnZUdyb3VwOjphZGRVc2VyU3R5bGVTaGVldFRv
V29ybGQoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCwgY29uc3QgU3RyaW5nJiBzCiAgICAgT3duUHRy
PFVzZXJTdHlsZVNoZWV0PiB1c2VyU3R5bGVTaGVldCA9IGFkb3B0UHRyKG5ldyBVc2VyU3R5bGVT
aGVldChzb3VyY2UsIHVybCwgd2hpdGVsaXN0LCBibGFja2xpc3QsIGluamVjdGVkRnJhbWVzLCBs
ZXZlbCkpOwogICAgIGlmICghbV91c2VyU3R5bGVTaGVldHMpCiAgICAgICAgIG1fdXNlclN0eWxl
U2hlZXRzID0gYWRvcHRQdHIobmV3IFVzZXJTdHlsZVNoZWV0TWFwKTsKLSAgICBPd25QdHI8VXNl
clN0eWxlU2hlZXRWZWN0b3I+JiBzdHlsZVNoZWV0c0luV29ybGQgPSBtX3VzZXJTdHlsZVNoZWV0
cy0+YWRkKHdvcmxkLCBudWxscHRyKS5pdGVyYXRvci0+c2Vjb25kOworICAgIE93blB0cjxVc2Vy
U3R5bGVTaGVldFZlY3Rvcj4mIHN0eWxlU2hlZXRzSW5Xb3JsZCA9IG1fdXNlclN0eWxlU2hlZXRz
LT5hZGQod29ybGQsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoIXN0eWxlU2hl
ZXRzSW5Xb3JsZCkKICAgICAgICAgc3R5bGVTaGVldHNJbldvcmxkID0gYWRvcHRQdHIobmV3IFVz
ZXJTdHlsZVNoZWV0VmVjdG9yKTsKICAgICBzdHlsZVNoZWV0c0luV29ybGQtPmFwcGVuZCh1c2Vy
U3R5bGVTaGVldC5yZWxlYXNlKCkpOwpAQCAtMzA2LDcgKzMwNiw3IEBAIHZvaWQgUGFnZUdyb3Vw
OjpyZW1vdmVVc2VyU2NyaXB0RnJvbVdvcmxkKERPTVdyYXBwZXJXb3JsZCogd29ybGQsIGNvbnN0
IEtVUkwmIHVyCiAgICAgaWYgKGl0ID09IG1fdXNlclNjcmlwdHMtPmVuZCgpKQogICAgICAgICBy
ZXR1cm47CiAgICAgCi0gICAgVXNlclNjcmlwdFZlY3Rvciogc2NyaXB0cyA9IGl0LT5zZWNvbmQu
Z2V0KCk7CisgICAgVXNlclNjcmlwdFZlY3Rvciogc2NyaXB0cyA9IGl0LT52YWx1ZS5nZXQoKTsK
ICAgICBmb3IgKGludCBpID0gc2NyaXB0cy0+c2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKICAg
ICAgICAgaWYgKHNjcmlwdHMtPmF0KGkpLT51cmwoKSA9PSB1cmwpCiAgICAgICAgICAgICBzY3Jp
cHRzLT5yZW1vdmUoaSk7CkBAIC0zMjgsNyArMzI4LDcgQEAgdm9pZCBQYWdlR3JvdXA6OnJlbW92
ZVVzZXJTdHlsZVNoZWV0RnJvbVdvcmxkKERPTVdyYXBwZXJXb3JsZCogd29ybGQsIGNvbnN0IEtV
UkwKICAgICBpZiAoaXQgPT0gbV91c2VyU3R5bGVTaGVldHMtPmVuZCgpKQogICAgICAgICByZXR1
cm47CiAgICAgCi0gICAgVXNlclN0eWxlU2hlZXRWZWN0b3IqIHN0eWxlc2hlZXRzID0gaXQtPnNl
Y29uZC5nZXQoKTsKKyAgICBVc2VyU3R5bGVTaGVldFZlY3Rvciogc3R5bGVzaGVldHMgPSBpdC0+
dmFsdWUuZ2V0KCk7CiAgICAgZm9yIChpbnQgaSA9IHN0eWxlc2hlZXRzLT5zaXplKCkgLSAxOyBp
ID49IDA7IC0taSkgewogICAgICAgICBpZiAoc3R5bGVzaGVldHMtPmF0KGkpLT51cmwoKSA9PSB1
cmwpIHsKICAgICAgICAgICAgIHN0eWxlc2hlZXRzLT5yZW1vdmUoaSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvUGFnZVNlcmlhbGl6ZXIuY3BwCmluZGV4IDlkNTAyMTFjYzM4YWQ4NjRmMDE5YjhlYThiZjRl
YWUyMDUxZmIzYWEuLmU3YzE0YzdmZWMyODQzNzljZWZhN2RhZTg4MDljMzc3YmZmNDhiYmMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCkBAIC0zMzksNyArMzM5LDcgQEAg
S1VSTCBQYWdlU2VyaWFsaXplcjo6dXJsRm9yQmxhbmtGcmFtZShGcmFtZSogZnJhbWUpCiB7CiAg
ICAgSGFzaE1hcDxGcmFtZSosIEtVUkw+OjppdGVyYXRvciBpdGVyID0gbV9ibGFua0ZyYW1lVVJM
cy5maW5kKGZyYW1lKTsKICAgICBpZiAoaXRlciAhPSBtX2JsYW5rRnJhbWVVUkxzLmVuZCgpKQot
ICAgICAgICByZXR1cm4gaXRlci0+c2Vjb25kOworICAgICAgICByZXR1cm4gaXRlci0+dmFsdWU7
CiAgICAgU3RyaW5nIHVybCA9ICJ3eWNpd3lnOi8vZnJhbWUvIiArIFN0cmluZzo6bnVtYmVyKG1f
YmxhbmtGcmFtZUNvdW50ZXIrKyk7CiAgICAgS1VSTCBmYWtlVVJMKFBhcnNlZFVSTFN0cmluZywg
dXJsKTsKICAgICBtX2JsYW5rRnJhbWVVUkxzLmFkZChmcmFtZSwgZmFrZVVSTCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5UG9saWN5LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvU2VjdXJpdHlQb2xpY3kuY3BwCmluZGV4IGMyYTVhYjExNDM1ZWY2ZGIwNTc2OGM3
NmNhMDM1N2I1NjI1ODMzMTIuLjViMzZmNGY3MTZjNDRiZmIwOWYyMGU2MzJjYzBkMDM4NmYzY2Nh
M2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlQb2xpY3kuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlQb2xpY3kuY3BwCkBAIC0xMzMsOSArMTMz
LDkgQEAgdm9pZCBTZWN1cml0eVBvbGljeTo6YWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnko
Y29uc3QgU2VjdXJpdHlPcmlnaW4mIHNvdXJjZU8KICAgICBTdHJpbmcgc291cmNlU3RyaW5nID0g
c291cmNlT3JpZ2luLnRvU3RyaW5nKCk7CiAgICAgT3JpZ2luQWNjZXNzTWFwOjpBZGRSZXN1bHQg
cmVzdWx0ID0gb3JpZ2luQWNjZXNzTWFwKCkuYWRkKHNvdXJjZVN0cmluZywgbnVsbHB0cik7CiAg
ICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29u
ZCA9IGFkb3B0UHRyKG5ldyBPcmlnaW5BY2Nlc3NXaGl0ZUxpc3QpOworICAgICAgICByZXN1bHQu
aXRlcmF0b3ItPnZhbHVlID0gYWRvcHRQdHIobmV3IE9yaWdpbkFjY2Vzc1doaXRlTGlzdCk7CiAK
LSAgICBPcmlnaW5BY2Nlc3NXaGl0ZUxpc3QqIGxpc3QgPSByZXN1bHQuaXRlcmF0b3ItPnNlY29u
ZC5nZXQoKTsKKyAgICBPcmlnaW5BY2Nlc3NXaGl0ZUxpc3QqIGxpc3QgPSByZXN1bHQuaXRlcmF0
b3ItPnZhbHVlLmdldCgpOwogICAgIGxpc3QtPmFwcGVuZChPcmlnaW5BY2Nlc3NFbnRyeShkZXN0
aW5hdGlvblByb3RvY29sLCBkZXN0aW5hdGlvbkRvbWFpbiwgYWxsb3dEZXN0aW5hdGlvblN1YmRv
bWFpbnMgPyBPcmlnaW5BY2Nlc3NFbnRyeTo6QWxsb3dTdWJkb21haW5zIDogT3JpZ2luQWNjZXNz
RW50cnk6OkRpc2FsbG93U3ViZG9tYWlucykpOwogfQogCkBAIC0xNTIsNyArMTUyLDcgQEAgdm9p
ZCBTZWN1cml0eVBvbGljeTo6cmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoY29uc3Qg
U2VjdXJpdHlPcmlnaW4mIHNvdXIKICAgICBpZiAoaXQgPT0gbWFwLmVuZCgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBPcmlnaW5BY2Nlc3NXaGl0ZUxpc3QqIGxpc3QgPSBpdC0+c2Vjb25kLmdl
dCgpOworICAgIE9yaWdpbkFjY2Vzc1doaXRlTGlzdCogbGlzdCA9IGl0LT52YWx1ZS5nZXQoKTsK
ICAgICBzaXplX3QgaW5kZXggPSBsaXN0LT5maW5kKE9yaWdpbkFjY2Vzc0VudHJ5KGRlc3RpbmF0
aW9uUHJvdG9jb2wsIGRlc3RpbmF0aW9uRG9tYWluLCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlu
cyA/IE9yaWdpbkFjY2Vzc0VudHJ5OjpBbGxvd1N1YmRvbWFpbnMgOiBPcmlnaW5BY2Nlc3NFbnRy
eTo6RGlzYWxsb3dTdWJkb21haW5zKSk7CiAgICAgaWYgKGluZGV4ID09IG5vdEZvdW5kKQogICAg
ICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCmluZGV4IDYzNzIzMTg0OTMyNzY1
ZDc2ODkyNTFlZWE4ZDc2MDU3NmUzMjg3NWMuLjQxNzU5YzdjYjA4OTAwN2YwM2QxMzE1ZGQ2ZjRh
ZTQ4YmIwMDNiNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCkBAIC02MCw3ICs2MCw3IEBA
IHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRHZW5lcmljRm9udEZhbWlseU1hcChTY3JpcHRGb250RmFt
aWx5TWFwJiBmb250TWFwLCBjb25zdCBBCiAgICAgICAgIGlmIChpdCA9PSBmb250TWFwLmVuZCgp
KQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBmb250TWFwLnJlbW92ZShpdCk7Ci0gICAg
fSBlbHNlIGlmIChpdCAhPSBmb250TWFwLmVuZCgpICYmIGl0LT5zZWNvbmQgPT0gZmFtaWx5KQor
ICAgIH0gZWxzZSBpZiAoaXQgIT0gZm9udE1hcC5lbmQoKSAmJiBpdC0+dmFsdWUgPT0gZmFtaWx5
KQogICAgICAgICByZXR1cm47CiAgICAgZWxzZQogICAgICAgICBmb250TWFwLnNldChzdGF0aWNf
Y2FzdDxpbnQ+KHNjcmlwdCksIGZhbWlseSk7CkBAIC03MSw3ICs3MSw3IEBAIHN0YXRpYyBpbmxp
bmUgY29uc3QgQXRvbWljU3RyaW5nJiBnZXRHZW5lcmljRm9udEZhbWlseUZvclNjcmlwdChjb25z
dCBTY3JpcHRGb250CiB7CiAgICAgU2NyaXB0Rm9udEZhbWlseU1hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBmb250TWFwLmZpbmQoc3RhdGljX2Nhc3Q8aW50PihzY3JpcHQpKTsKICAgICBpZiAoaXQg
IT0gZm9udE1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgIHJl
dHVybiBpdC0+dmFsdWU7CiAgICAgaWYgKHNjcmlwdCAhPSBVU0NSSVBUX0NPTU1PTikKICAgICAg
ICAgcmV0dXJuIGdldEdlbmVyaWNGb250RmFtaWx5Rm9yU2NyaXB0KGZvbnRNYXAsIFVTQ1JJUFRf
Q09NTU9OKTsKICAgICByZXR1cm4gZW1wdHlBdG9tOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9TcGVlY2hJbnB1dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NwZWVjaElucHV0
LmNwcAppbmRleCAwMTI4ZWY4YTQwYTQyNDM1NGFiNWY4ZTUwYmE4ZWNjNjIyNTdiM2M5Li44MzI4
YzVkNGRmMzI5OTQyYjU5ZjNlY2MyMjUzNTY4Y2UyYThhMTFkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1NwZWVjaElucHV0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Nw
ZWVjaElucHV0LmNwcApAQCAtNjIsNyArNjIsNyBAQCBpbnQgU3BlZWNoSW5wdXQ6OnJlZ2lzdGVy
TGlzdGVuZXIoU3BlZWNoSW5wdXRMaXN0ZW5lciogbGlzdGVuZXIpCiAjaWYgZGVmaW5lZChERUJV
RykKICAgICAvLyBDaGVjayBpZiBhbHJlYWR5IHByZXNlbnQuCiAgICAgZm9yIChIYXNoTWFwPGlu
dCwgU3BlZWNoSW5wdXRMaXN0ZW5lcio+OjppdGVyYXRvciBpdCA9IG1fbGlzdGVuZXJzLmJlZ2lu
KCk7IGl0ICE9IG1fbGlzdGVuZXJzLmVuZCgpOyArK2l0KQotICAgICAgQVNTRVJUKGl0LT5zZWNv
bmQgIT0gbGlzdGVuZXIpOworICAgICAgQVNTRVJUKGl0LT52YWx1ZSAhPSBsaXN0ZW5lcik7CiAj
ZW5kaWYKIAogICAgIG1fbGlzdGVuZXJzLmFkZChtX25leHRMaXN0ZW5lcklkLCBsaXN0ZW5lcik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1dpbmRvd0ZlYXR1cmVzLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvV2luZG93RmVhdHVyZXMuY3BwCmluZGV4IDc1NjQxNTI4ZGZlYzJm
NGJlYzdlZWEzM2QwNzQwYTBkYzdkN2JhYzQuLjFiNmIxZDBiMTYzMmU4MmE5NGVmMDQ2NzlkMGE3
ZDQ3YWQzMWNiNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvV2luZG93RmVhdHVy
ZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvV2luZG93RmVhdHVyZXMuY3BwCkBAIC0y
MTIsNyArMjEyLDcgQEAgYm9vbCBXaW5kb3dGZWF0dXJlczo6Ym9vbEZlYXR1cmUoY29uc3QgRGlh
bG9nRmVhdHVyZXNNYXAmIGZlYXR1cmVzLCBjb25zdCBjaGFyKgogICAgIERpYWxvZ0ZlYXR1cmVz
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGZlYXR1cmVzLmZpbmQoa2V5KTsKICAgICBpZiAoaXQg
PT0gZmVhdHVyZXMuZW5kKCkpCiAgICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7Ci0gICAgY29u
c3QgU3RyaW5nJiB2YWx1ZSA9IGl0LT5zZWNvbmQ7CisgICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9
IGl0LT52YWx1ZTsKICAgICByZXR1cm4gdmFsdWUuaXNOdWxsKCkgfHwgdmFsdWUgPT0gIjEiIHx8
IHZhbHVlID09ICJ5ZXMiIHx8IHZhbHVlID09ICJvbiI7CiB9CiAKQEAgLTIyNCw3ICsyMjQsNyBA
QCBmbG9hdCBXaW5kb3dGZWF0dXJlczo6ZmxvYXRGZWF0dXJlKGNvbnN0IERpYWxvZ0ZlYXR1cmVz
TWFwJiBmZWF0dXJlcywgY29uc3QgY2hhcgogICAgIC8vIEZJWE1FOiBUaGUgdG9Eb3VibGUgZnVu
Y3Rpb24gZG9lcyBub3Qgb2ZmZXIgYSB3YXkgdG8gdGVsbCAiMHEiIGZyb20gc3RyaW5nIHdpdGgg
bm8gZGlnaXRzIGluIGl0OiBCb3RoCiAgICAgLy8gcmV0dXJuIHRoZSBudW1iZXIgMCBhbmQgZmFs
c2UgZm9yIG9rLiBCdXQgIjBxIiBzaG91bGQgeWllbGQgdGhlIG1pbmltdW0gcmF0aGVyIHRoYW4g
dGhlIGRlZmF1bHQuCiAgICAgYm9vbCBvazsKLSAgICBkb3VibGUgcGFyc2VkTnVtYmVyID0gaXQt
PnNlY29uZC50b0RvdWJsZSgmb2spOworICAgIGRvdWJsZSBwYXJzZWROdW1iZXIgPSBpdC0+dmFs
dWUudG9Eb3VibGUoJm9rKTsKICAgICBpZiAoKHBhcnNlZE51bWJlciA9PSAwICYmICFvaykgfHwg
aXNuYW4ocGFyc2VkTnVtYmVyKSkKICAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTsKICAgICBp
ZiAocGFyc2VkTnVtYmVyIDwgbWluIHx8IG1heCA8PSBtaW4pCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCmluZGV4IDBmMjMz
MDFhMTUzMDhhZTliMmFjMzNmOWM2ZTNmZDM0MzI1NTRlZTEuLmUxOTQyN2Q0NjkyNTg1NzM0MGMy
NjcwYzQ2OTMwYjE5ZTMyOGIxNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5p
bWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
YW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCkBAIC05MSwxNCArOTEsMTQgQEAgZG91
YmxlIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjp1cGRhdGVBbmltYXRpb25zKFNldENoYW5n
ZWQgY2FsbFNldENoYW5nZWQvKgogCiAgICAgUmVuZGVyT2JqZWN0QW5pbWF0aW9uTWFwOjpjb25z
dF9pdGVyYXRvciBhbmltYXRpb25zRW5kID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmVuZCgpOwog
ICAgIGZvciAoUmVuZGVyT2JqZWN0QW5pbWF0aW9uTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1f
Y29tcG9zaXRlQW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBhbmltYXRpb25zRW5kOyArK2l0KSB7
Ci0gICAgICAgIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcEFuaW0gPSBpdC0+c2Vjb25kLmdldCgp
OworICAgICAgICBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBBbmltID0gaXQtPnZhbHVlLmdldCgp
OwogICAgICAgICBpZiAoIWNvbXBBbmltLT5zdXNwZW5kZWQoKSAmJiBjb21wQW5pbS0+aGFzQW5p
bWF0aW9ucygpKSB7CiAgICAgICAgICAgICBkb3VibGUgdCA9IGNvbXBBbmltLT50aW1lVG9OZXh0
U2VydmljZSgpOwogICAgICAgICAgICAgaWYgKHQgIT0gLTEgJiYgKHQgPCB0aW1lVG9OZXh0U2Vy
dmljZSB8fCB0aW1lVG9OZXh0U2VydmljZSA9PSAtMSkpCiAgICAgICAgICAgICAgICAgdGltZVRv
TmV4dFNlcnZpY2UgPSB0OwogICAgICAgICAgICAgaWYgKCF0aW1lVG9OZXh0U2VydmljZSkgewog
ICAgICAgICAgICAgICAgIGlmIChjYWxsU2V0Q2hhbmdlZCA9PSBDYWxsU2V0Q2hhbmdlZCkgewot
ICAgICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gaXQtPmZpcnN0LT5ub2RlKCk7CisgICAg
ICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBpdC0+a2V5LT5ub2RlKCk7CiAgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVCghbm9kZSB8fCAobm9kZS0+ZG9jdW1lbnQoKSAmJiAhbm9kZS0+ZG9j
dW1lbnQoKS0+aW5QYWdlQ2FjaGUoKSkpOwogICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRO
ZWVkc1N0eWxlUmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsKICAgICAgICAgICAgICAgICAg
ICAgY2FsbGVkU2V0Q2hhbmdlZCA9IHRydWU7CkBAIC0yODgsOSArMjg4LDkgQEAgdm9pZCBBbmlt
YXRpb25Db250cm9sbGVyUHJpdmF0ZTo6c3VzcGVuZEFuaW1hdGlvbnNGb3JEb2N1bWVudChEb2N1
bWVudCogZG9jdW1lbnQKICAgICAKICAgICBSZW5kZXJPYmplY3RBbmltYXRpb25NYXA6OmNvbnN0
X2l0ZXJhdG9yIGFuaW1hdGlvbnNFbmQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuZW5kKCk7CiAg
ICAgZm9yIChSZW5kZXJPYmplY3RBbmltYXRpb25NYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9j
b21wb3NpdGVBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGFuaW1hdGlvbnNFbmQ7ICsraXQpIHsK
LSAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGl0LT5maXJzdDsKKyAgICAgICAgUmVu
ZGVyT2JqZWN0KiByZW5kZXJlciA9IGl0LT5rZXk7CiAgICAgICAgIGlmIChyZW5kZXJlci0+ZG9j
dW1lbnQoKSA9PSBkb2N1bWVudCkgewotICAgICAgICAgICAgQ29tcG9zaXRlQW5pbWF0aW9uKiBj
b21wQW5pbSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBDb21wb3NpdGVBbmltYXRp
b24qIGNvbXBBbmltID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAgICAgY29tcEFuaW0tPnN1
c3BlbmRBbmltYXRpb25zKCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0zMDQsOSArMzA0LDkgQEAg
dm9pZCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6cmVzdW1lQW5pbWF0aW9uc0ZvckRvY3Vt
ZW50KERvY3VtZW50KiBkb2N1bWVudCkKICAgICAKICAgICBSZW5kZXJPYmplY3RBbmltYXRpb25N
YXA6OmNvbnN0X2l0ZXJhdG9yIGFuaW1hdGlvbnNFbmQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMu
ZW5kKCk7CiAgICAgZm9yIChSZW5kZXJPYmplY3RBbmltYXRpb25NYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGFuaW1hdGlvbnNFbmQ7
ICsraXQpIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGl0LT5maXJzdDsKKyAg
ICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGl0LT5rZXk7CiAgICAgICAgIGlmIChyZW5k
ZXJlci0+ZG9jdW1lbnQoKSA9PSBkb2N1bWVudCkgewotICAgICAgICAgICAgQ29tcG9zaXRlQW5p
bWF0aW9uKiBjb21wQW5pbSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBDb21wb3Np
dGVBbmltYXRpb24qIGNvbXBBbmltID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAgICAgY29t
cEFuaW0tPnJlc3VtZUFuaW1hdGlvbnMoKTsKICAgICAgICAgfQogICAgIH0KQEAgLTM5NSw4ICsz
OTUsOCBAQCB1bnNpZ25lZCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6bnVtYmVyT2ZBY3Rp
dmVBbmltYXRpb25zKERvY3VtZW50KiBkb2N1bWVudAogICAgIAogICAgIFJlbmRlck9iamVjdEFu
aW1hdGlvbk1hcDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fY29tcG9zaXRlQW5p
bWF0aW9ucy5lbmQoKTsKICAgICBmb3IgKFJlbmRlck9iamVjdEFuaW1hdGlvbk1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gYW5pbWF0
aW9uc0VuZDsgKytpdCkgewotICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gaXQtPmZp
cnN0OwotICAgICAgICBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBBbmltID0gaXQtPnNlY29uZC5n
ZXQoKTsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGl0LT5rZXk7CisgICAgICAg
IENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcEFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAg
IGlmIChyZW5kZXJlci0+ZG9jdW1lbnQoKSA9PSBkb2N1bWVudCkKICAgICAgICAgICAgIGNvdW50
ICs9IGNvbXBBbmltLT5udW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoKTsKICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmNwcApp
bmRleCAxMmY5Mzc5NDhkNzRmOTJmNjMxYTU0YTlmYzlmYjIxZWVhODFiZTY1Li40NmJjY2RmOWY3
Zjk2Yjc0YWM1YTQ1NzVmYTFmNWQyYWZjYTllOTEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHAKQEAgLTU3LDcgKzU3LDcg
QEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OmNsZWFyUmVuZGVyZXIoKQogICAgICAgICAvLyBh
biBhbmltYXRpb24gY2FsbGJhY2sgKHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjIwNTIpCiAgICAgICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0
X2l0ZXJhdG9yIHRyYW5zaXRpb25zRW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKICAgICAgICAg
Zm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJh
bnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gdHJhbnNpdGlvbnNFbmQ7ICsraXQpIHsKLSAgICAgICAg
ICAgIEltcGxpY2l0QW5pbWF0aW9uKiB0cmFuc2l0aW9uID0gaXQtPnNlY29uZC5nZXQoKTsKKyAg
ICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiB0cmFuc2l0aW9uID0gaXQtPnZhbHVlLmdldCgp
OwogICAgICAgICAgICAgYW5pbWF0aW9uQ29udHJvbGxlcigpLT5hbmltYXRpb25XaWxsQmVSZW1v
dmVkKHRyYW5zaXRpb24pOwogICAgICAgICAgICAgdHJhbnNpdGlvbi0+Y2xlYXIoKTsKICAgICAg
ICAgfQpAQCAtNjYsNyArNjYsNyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6Y2xlYXJSZW5k
ZXJlcigpCiAgICAgICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsK
ICAgICAgICAgQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9
IG1fa2V5ZnJhbWVBbmltYXRpb25zLmVuZCgpOwogICAgICAgICBmb3IgKEFuaW1hdGlvbk5hbWVN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQg
IT0gYW5pbWF0aW9uc0VuZDsgKytpdCkgewotICAgICAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24q
IGFuaW0gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24q
IGFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBhbmltYXRpb25Db250cm9sbGVy
KCktPmFuaW1hdGlvbldpbGxCZVJlbW92ZWQoYW5pbSk7CiAgICAgICAgICAgICBhbmltLT5jbGVh
cigpOwogICAgICAgICB9CkBAIC04Myw3ICs4Myw3IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9u
Ojp1cGRhdGVUcmFuc2l0aW9ucyhSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBSZW5kZXJTdHlsZSoK
ICAgICAvLyBpbiB0aGUgbmV4dCBsb29wIGFuZCB0aGVuIHRvc3MgdGhlIG9uZXMgdGhhdCBkaWRu
J3QgZ2V0IG1hcmtlZC4KICAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVy
YXRvciBlbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOwogICAgIGZvciAoQ1NTUHJvcGVydHlUcmFu
c2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+c2V0QWN0aXZlKGZhbHNlKTsKKyAg
ICAgICAgaXQtPnZhbHVlLT5zZXRBY3RpdmUoZmFsc2UpOwogICAgICAgICAKICAgICBSZWZQdHI8
UmVuZGVyU3R5bGU+IG1vZGlmaWVkQ3VycmVudFN0eWxlOwogICAgIApAQCAtMTc5LDcgKzE3OSw3
IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVUcmFuc2l0aW9ucyhSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyLCBSZW5kZXJTdHlsZSoKICAgICBWZWN0b3I8aW50PiB0b0JlUmVtb3ZlZDsK
ICAgICBlbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOwogICAgIGZvciAoQ1NTUHJvcGVydHlUcmFu
c2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgewotICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT5z
ZWNvbmQuZ2V0KCk7CisgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnZhbHVl
LmdldCgpOwogICAgICAgICBpZiAoIWFuaW0tPmFjdGl2ZSgpKSB7CiAgICAgICAgICAgICBhbmlt
YXRpb25Db250cm9sbGVyKCktPmFuaW1hdGlvbldpbGxCZVJlbW92ZWQoYW5pbSk7CiAgICAgICAg
ICAgICB0b0JlUmVtb3ZlZC5hcHBlbmQoYW5pbS0+YW5pbWF0aW5nUHJvcGVydHkoKSk7CkBAIC0y
MDUsMTMgKzIwNSwxMyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlS2V5ZnJhbWVB
bmltYXRpb25zKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIFJlbmRlcgogICAgICAgICAvLyBUaGUg
Y3VycmVudCBhbmQgdGFyZ2V0IGFuaW1hdGlvbnMgYXJlIHRoZSBzYW1lIHNvIHdlIGp1c3QgbmVl
ZCB0byB0b3NzIGFueSAKICAgICAgICAgLy8gYW5pbWF0aW9uIHdoaWNoIGlzIGZpbmlzaGVkIChw
b3N0QWN0aXZlKS4KICAgICAgICAgZm9yIChBbmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGtmZW5kOyArK2l0KSB7
Ci0gICAgICAgICAgICBpZiAoaXQtPnNlY29uZC0+cG9zdEFjdGl2ZSgpKQotICAgICAgICAgICAg
ICAgIGl0LT5zZWNvbmQtPnNldEluZGV4KC0xKTsKKyAgICAgICAgICAgIGlmIChpdC0+dmFsdWUt
PnBvc3RBY3RpdmUoKSkKKyAgICAgICAgICAgICAgICBpdC0+dmFsdWUtPnNldEluZGV4KC0xKTsK
ICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIE1hcmsgYWxsIGV4aXN0aW5nIGFu
aW1hdGlvbnMgYXMgbm8gbG9uZ2VyIGFjdGl2ZS4KICAgICAgICAgZm9yIChBbmltYXRpb25OYW1l
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmJlZ2luKCk7IGl0
ICE9IGtmZW5kOyArK2l0KQotICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0SW5kZXgoLTEpOwor
ICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRJbmRleCgtMSk7CiAgICAgICAgICAgICAKICAgICAg
ICAgLy8gVG9zcyB0aGUgYW5pbWF0aW9uIG9yZGVyIG1hcC4KICAgICAgICAgbV9rZXlmcmFtZUFu
aW1hdGlvbk9yZGVyTWFwLmNsZWFyKCk7CkBAIC0yNjAsNyArMjYwLDcgQEAgdm9pZCBDb21wb3Np
dGVBbmltYXRpb246OnVwZGF0ZUtleWZyYW1lQW5pbWF0aW9ucyhSZW5kZXJPYmplY3QqIHJlbmRl
cmVyLCBSZW5kZXIKICAgICBWZWN0b3I8QXRvbWljU3RyaW5nSW1wbCo+IGFuaW1zVG9CZVJlbW92
ZWQ7CiAgICAga2ZlbmQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5lbmQoKTsKICAgICBmb3IgKEFu
aW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMu
YmVnaW4oKTsgaXQgIT0ga2ZlbmQ7ICsraXQpIHsKLSAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24q
IGtleWZyYW1lQW5pbSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIEtleWZyYW1lQW5pbWF0
aW9uKiBrZXlmcmFtZUFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgIGlmIChrZXlmcmFt
ZUFuaW0tPmluZGV4KCkgPCAwKSB7CiAgICAgICAgICAgICBhbmltc1RvQmVSZW1vdmVkLmFwcGVu
ZChrZXlmcmFtZUFuaW0tPm5hbWUoKS5pbXBsKCkpOwogICAgICAgICAgICAgYW5pbWF0aW9uQ29u
dHJvbGxlcigpLT5hbmltYXRpb25XaWxsQmVSZW1vdmVkKGtleWZyYW1lQW5pbSk7CkBAIC0yODgs
NyArMjg4LDcgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gQ29tcG9zaXRlQW5pbWF0aW9uOjph
bmltYXRlKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIFJlbmQKICAgICAgICAgaWYgKCFtX3RyYW5z
aXRpb25zLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01h
cDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKICAgICAgICAgICAg
IGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Ry
YW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgICAgIGlm
IChJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT5zZWNvbmQuZ2V0KCkpCisgICAgICAgICAg
ICAgICAgaWYgKEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnZhbHVlLmdldCgpKQogICAg
ICAgICAgICAgICAgICAgICBhbmltLT5hbmltYXRlKHRoaXMsIHJlbmRlcmVyLCBjdXJyZW50U3R5
bGUsIHRhcmdldFN0eWxlLCByZXN1bHRTdHlsZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
QEAgLTMxMCw3ICszMTAsNyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBDb21wb3NpdGVBbmlt
YXRpb246OmdldEFuaW1hdGVkU3R5bGUoKSBjb25zdAogICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4g
cmVzdWx0U3R5bGU7CiAgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKICAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNp
dGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKEltcGxpY2l0QW5pbWF0aW9uKiBpbXBsaWNpdEFu
aW1hdGlvbiA9IGl0LT5zZWNvbmQuZ2V0KCkpCisgICAgICAgIGlmIChJbXBsaWNpdEFuaW1hdGlv
biogaW1wbGljaXRBbmltYXRpb24gPSBpdC0+dmFsdWUuZ2V0KCkpCiAgICAgICAgICAgICBpbXBs
aWNpdEFuaW1hdGlvbi0+Z2V0QW5pbWF0ZWRTdHlsZShyZXN1bHRTdHlsZSk7CiAgICAgfQogCkBA
IC0zMzEsNyArMzMxLDcgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnNldEFuaW1hdGluZyhi
b29sIGFuaW1hdGluZykKICAgICBpZiAoIW1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSB7CiAgICAg
ICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIHRyYW5zaXRpb25z
RW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKICAgICAgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5z
aXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQg
IT0gdHJhbnNpdGlvbnNFbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9u
KiB0cmFuc2l0aW9uID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgIEltcGxpY2l0QW5p
bWF0aW9uKiB0cmFuc2l0aW9uID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAgICAgdHJhbnNp
dGlvbi0+c2V0QW5pbWF0aW5nKGFuaW1hdGluZyk7CiAgICAgICAgIH0KICAgICB9CkBAIC0zMzks
NyArMzM5LDcgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnNldEFuaW1hdGluZyhib29sIGFu
aW1hdGluZykKICAgICAgICAgbV9rZXlmcmFtZUFuaW1hdGlvbnMuY2hlY2tDb25zaXN0ZW5jeSgp
OwogICAgICAgICBBbmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBhbmltYXRpb25zRW5k
ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuZW5kKCk7CiAgICAgICAgIGZvciAoQW5pbWF0aW9uTmFt
ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5iZWdpbigpOyBp
dCAhPSBhbmltYXRpb25zRW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBLZXlmcmFtZUFuaW1hdGlv
biogYW5pbSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBLZXlmcmFtZUFuaW1hdGlv
biogYW5pbSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGFuaW0tPnNldEFuaW1hdGlu
ZyhhbmltYXRpbmcpOwogICAgICAgICB9CiAgICAgfQpAQCAtMzU0LDcgKzM1NCw3IEBAIGRvdWJs
ZSBDb21wb3NpdGVBbmltYXRpb246OnRpbWVUb05leHRTZXJ2aWNlKCkgY29uc3QKICAgICBpZiAo
IW1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSB7CiAgICAgICAgIENTU1Byb3BlcnR5VHJhbnNpdGlv
bnNNYXA6OmNvbnN0X2l0ZXJhdG9yIHRyYW5zaXRpb25zRW5kID0gbV90cmFuc2l0aW9ucy5lbmQo
KTsKICAgICAgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gdHJhbnNpdGlvbnNFbmQ7ICsraXQp
IHsKLSAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiB0cmFuc2l0aW9uID0gaXQtPnNlY29u
ZC5nZXQoKTsKKyAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiB0cmFuc2l0aW9uID0gaXQt
PnZhbHVlLmdldCgpOwogICAgICAgICAgICAgZG91YmxlIHQgPSB0cmFuc2l0aW9uID8gdHJhbnNp
dGlvbi0+dGltZVRvTmV4dFNlcnZpY2UoKSA6IC0xOwogICAgICAgICAgICAgaWYgKHQgPCBtaW5U
IHx8IG1pblQgPT0gLTEpCiAgICAgICAgICAgICAgICAgbWluVCA9IHQ7CkBAIC0zNjYsNyArMzY2
LDcgQEAgZG91YmxlIENvbXBvc2l0ZUFuaW1hdGlvbjo6dGltZVRvTmV4dFNlcnZpY2UoKSBjb25z
dAogICAgICAgICBtX2tleWZyYW1lQW5pbWF0aW9ucy5jaGVja0NvbnNpc3RlbmN5KCk7CiAgICAg
ICAgIEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGFuaW1hdGlvbnNFbmQgPSBtX2tl
eWZyYW1lQW5pbWF0aW9ucy5lbmQoKTsKICAgICAgICAgZm9yIChBbmltYXRpb25OYW1lTWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGFu
aW1hdGlvbnNFbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIEtleWZyYW1lQW5pbWF0aW9uKiBhbmlt
YXRpb24gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24q
IGFuaW1hdGlvbiA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGRvdWJsZSB0ID0gYW5p
bWF0aW9uID8gYW5pbWF0aW9uLT50aW1lVG9OZXh0U2VydmljZSgpIDogLTE7CiAgICAgICAgICAg
ICBpZiAodCA8IG1pblQgfHwgbWluVCA9PSAtMSkKICAgICAgICAgICAgICAgICBtaW5UID0gdDsK
QEAgLTM4OCw3ICszODgsNyBAQCBQYXNzUmVmUHRyPEtleWZyYW1lQW5pbWF0aW9uPiBDb21wb3Np
dGVBbmltYXRpb246OmdldEFuaW1hdGlvbkZvclByb3BlcnR5KGludCBwcgogICAgICAgICBtX2tl
eWZyYW1lQW5pbWF0aW9ucy5jaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgICAgIEFuaW1hdGlvbk5h
bWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGFuaW1hdGlvbnNFbmQgPSBtX2tleWZyYW1lQW5pbWF0aW9u
cy5lbmQoKTsKICAgICAgICAgZm9yIChBbmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGFuaW1hdGlvbnNFbmQ7ICsr
aXQpIHsKLSAgICAgICAgICAgIFJlZlB0cjxLZXlmcmFtZUFuaW1hdGlvbj4gYW5pbSA9IGl0LT5z
ZWNvbmQ7CisgICAgICAgICAgICBSZWZQdHI8S2V5ZnJhbWVBbmltYXRpb24+IGFuaW0gPSBpdC0+
dmFsdWU7CiAgICAgICAgICAgICBpZiAoYW5pbS0+aGFzQW5pbWF0aW9uRm9yUHJvcGVydHkocHJv
cGVydHkpKQogICAgICAgICAgICAgICAgIHJldHZhbCA9IGFuaW07CiAgICAgICAgIH0KQEAgLTQw
OCwxNCArNDA4LDE0IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpzdXNwZW5kQW5pbWF0aW9u
cygpCiAgICAgICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsKICAg
ICAgICAgQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1f
a2V5ZnJhbWVBbmltYXRpb25zLmVuZCgpOwogICAgICAgICBmb3IgKEFuaW1hdGlvbk5hbWVNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0g
YW5pbWF0aW9uc0VuZDsgKytpdCkgewotICAgICAgICAgICAgaWYgKEtleWZyYW1lQW5pbWF0aW9u
KiBhbmltID0gaXQtPnNlY29uZC5nZXQoKSkKKyAgICAgICAgICAgIGlmIChLZXlmcmFtZUFuaW1h
dGlvbiogYW5pbSA9IGl0LT52YWx1ZS5nZXQoKSkKICAgICAgICAgICAgICAgICBhbmltLT51cGRh
dGVQbGF5U3RhdGUoQW5pbVBsYXlTdGF0ZVBhdXNlZCk7CiAgICAgICAgIH0KICAgICB9CiAgICAg
aWYgKCFtX3RyYW5zaXRpb25zLmlzRW1wdHkoKSkgewogICAgICAgICBDU1NQcm9wZXJ0eVRyYW5z
aXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciB0cmFuc2l0aW9uc0VuZCA9IG1fdHJhbnNpdGlvbnMu
ZW5kKCk7CiAgICAgICAgIGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IHRyYW5zaXRpb25zRW5kOyAr
K2l0KSB7Ci0gICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT5zZWNvbmQu
Z2V0KCk7CisgICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT52YWx1ZS5n
ZXQoKTsKICAgICAgICAgICAgIGlmIChhbmltICYmIGFuaW0tPmhhc1N0eWxlKCkpCiAgICAgICAg
ICAgICAgICAgYW5pbS0+dXBkYXRlUGxheVN0YXRlKEFuaW1QbGF5U3RhdGVQYXVzZWQpOwogICAg
ICAgICB9CkBAIC00MzMsNyArNDMzLDcgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnJlc3Vt
ZUFuaW1hdGlvbnMoKQogICAgICAgICBtX2tleWZyYW1lQW5pbWF0aW9ucy5jaGVja0NvbnNpc3Rl
bmN5KCk7CiAgICAgICAgIEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGFuaW1hdGlv
bnNFbmQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5lbmQoKTsKICAgICAgICAgZm9yIChBbmltYXRp
b25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmJlZ2lu
KCk7IGl0ICE9IGFuaW1hdGlvbnNFbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIEtleWZyYW1lQW5p
bWF0aW9uKiBhbmltID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgIEtleWZyYW1lQW5p
bWF0aW9uKiBhbmltID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAgICAgaWYgKGFuaW0gJiYg
YW5pbS0+cGxheVN0YXRlUGxheWluZygpKQogICAgICAgICAgICAgICAgIGFuaW0tPnVwZGF0ZVBs
YXlTdGF0ZShBbmltUGxheVN0YXRlUGxheWluZyk7CiAgICAgICAgIH0KQEAgLTQ0Miw3ICs0NDIs
NyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6cmVzdW1lQW5pbWF0aW9ucygpCiAgICAgaWYg
KCFtX3RyYW5zaXRpb25zLmlzRW1wdHkoKSkgewogICAgICAgICBDU1NQcm9wZXJ0eVRyYW5zaXRp
b25zTWFwOjpjb25zdF9pdGVyYXRvciB0cmFuc2l0aW9uc0VuZCA9IG1fdHJhbnNpdGlvbnMuZW5k
KCk7CiAgICAgICAgIGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IHRyYW5zaXRpb25zRW5kOyArK2l0
KSB7Ci0gICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT5zZWNvbmQuZ2V0
KCk7CisgICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT52YWx1ZS5nZXQo
KTsKICAgICAgICAgICAgIGlmIChhbmltICYmIGFuaW0tPmhhc1N0eWxlKCkpCiAgICAgICAgICAg
ICAgICAgYW5pbS0+dXBkYXRlUGxheVN0YXRlKEFuaW1QbGF5U3RhdGVQbGF5aW5nKTsKICAgICAg
ICAgfQpAQCAtNDU0LDcgKzQ1NCw3IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpvdmVycmlk
ZUltcGxpY2l0QW5pbWF0aW9ucyhpbnQgcHJvcGVydHkpCiAgICAgQ1NTUHJvcGVydHlUcmFuc2l0
aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKICAgICBp
ZiAoIW1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSB7CiAgICAgICAgIGZvciAoQ1NTUHJvcGVydHlU
cmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGFuaW0g
PSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGFuaW0g
PSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoYW5pbSAmJiBhbmltLT5hbmltYXRp
bmdQcm9wZXJ0eSgpID09IHByb3BlcnR5KQogICAgICAgICAgICAgICAgIGFuaW0tPnNldE92ZXJy
aWRkZW4odHJ1ZSk7CiAgICAgICAgIH0KQEAgLTQ2Niw3ICs0NjYsNyBAQCB2b2lkIENvbXBvc2l0
ZUFuaW1hdGlvbjo6cmVzdW1lT3ZlcnJpZGRlbkltcGxpY2l0QW5pbWF0aW9ucyhpbnQgcHJvcGVy
dHkpCiAgICAgaWYgKCFtX3RyYW5zaXRpb25zLmlzRW1wdHkoKSkgewogICAgICAgICBDU1NQcm9w
ZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3RyYW5zaXRpb25zLmVu
ZCgpOwogICAgICAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAg
ICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAg
ICAgICAgaWYgKGFuaW0gJiYgYW5pbS0+YW5pbWF0aW5nUHJvcGVydHkoKSA9PSBwcm9wZXJ0eSkK
ICAgICAgICAgICAgICAgICBhbmltLT5zZXRPdmVycmlkZGVuKGZhbHNlKTsKICAgICAgICAgfQpA
QCAtNDc5LDcgKzQ3OSw3IEBAIGJvb2wgQ29tcG9zaXRlQW5pbWF0aW9uOjppc0FuaW1hdGluZ1By
b3BlcnR5KGludCBwcm9wZXJ0eSwgYm9vbCBhY2NlbGVyYXRlZE9ubHksCiAgICAgICAgIG1fa2V5
ZnJhbWVBbmltYXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsKICAgICAgICAgQW5pbWF0aW9uTmFt
ZU1hcDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fa2V5ZnJhbWVBbmltYXRpb25z
LmVuZCgpOwogICAgICAgICBmb3IgKEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gYW5pbWF0aW9uc0VuZDsgKytp
dCkgewotICAgICAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kLmdl
dCgpOworICAgICAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24qIGFuaW0gPSBpdC0+dmFsdWUuZ2V0
KCk7CiAgICAgICAgICAgICBpZiAoYW5pbSAmJiBhbmltLT5pc0FuaW1hdGluZ1Byb3BlcnR5KHBy
b3BlcnR5LCBhY2NlbGVyYXRlZE9ubHksIGlzUnVubmluZ05vdykpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTQ4OCw3ICs0ODgsNyBAQCBib29sIENvbXBvc2l0
ZUFuaW1hdGlvbjo6aXNBbmltYXRpbmdQcm9wZXJ0eShpbnQgcHJvcGVydHksIGJvb2wgYWNjZWxl
cmF0ZWRPbmx5LAogICAgIGlmICghbV90cmFuc2l0aW9ucy5pc0VtcHR5KCkpIHsKICAgICAgICAg
Q1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgdHJhbnNpdGlvbnNFbmQg
PSBtX3RyYW5zaXRpb25zLmVuZCgpOwogICAgICAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlv
bnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSB0
cmFuc2l0aW9uc0VuZDsgKytpdCkgewotICAgICAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGFu
aW0gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGFu
aW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoYW5pbSAmJiBhbmltLT5pc0Fu
aW1hdGluZ1Byb3BlcnR5KHByb3BlcnR5LCBhY2NlbGVyYXRlZE9ubHksIGlzUnVubmluZ05vdykp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTU1NCw3ICs1NTQs
NyBAQCB1bnNpZ25lZCBDb21wb3NpdGVBbmltYXRpb246Om51bWJlck9mQWN0aXZlQW5pbWF0aW9u
cygpIGNvbnN0CiAgICAgICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zLmNoZWNrQ29uc2lzdGVuY3ko
KTsKICAgICAgICAgQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0Vu
ZCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmVuZCgpOwogICAgICAgICBmb3IgKEFuaW1hdGlvbk5h
bWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsg
aXQgIT0gYW5pbWF0aW9uc0VuZDsgKytpdCkgewotICAgICAgICAgICAgS2V5ZnJhbWVBbmltYXRp
b24qIGFuaW0gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgS2V5ZnJhbWVBbmltYXRp
b24qIGFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoYW5pbS0+cnVubmlu
ZygpKQogICAgICAgICAgICAgICAgICsrY291bnQ7CiAgICAgICAgIH0KQEAgLTU2Myw3ICs1NjMs
NyBAQCB1bnNpZ25lZCBDb21wb3NpdGVBbmltYXRpb246Om51bWJlck9mQWN0aXZlQW5pbWF0aW9u
cygpIGNvbnN0CiAgICAgaWYgKCFtX3RyYW5zaXRpb25zLmlzRW1wdHkoKSkgewogICAgICAgICBD
U1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciB0cmFuc2l0aW9uc0VuZCA9
IG1fdHJhbnNpdGlvbnMuZW5kKCk7CiAgICAgICAgIGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9u
c01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IHRy
YW5zaXRpb25zRW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5p
bSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5p
bSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGlmIChhbmltLT5ydW5uaW5nKCkpCiAg
ICAgICAgICAgICAgICAgKytjb3VudDsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vTGFuZ3VhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGFu
Z3VhZ2UuY3BwCmluZGV4IDQ3ZjA5ZjYwOTI5OTcxZTMxNzM1NmU0OWZiY2I2M2I1ZGI0MTdmMzcu
LmIzZjk3YmVjOTcyMTViODA5YjM0MWVhYzAxYTYxN2U4MWFhN2EwNmUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xhbmd1YWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9MYW5ndWFnZS5jcHAKQEAgLTUzLDcgKzUzLDcgQEAgdm9pZCBsYW5ndWFnZURpZENo
YW5nZSgpCiB7CiAgICAgT2JzZXJ2ZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IG9ic2VydmVyTWFwKCku
ZW5kKCk7CiAgICAgZm9yIChPYnNlcnZlck1hcDo6aXRlcmF0b3IgaXRlciA9IG9ic2VydmVyTWFw
KCkuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikKLSAgICAgICAgaXRlci0+c2Vjb25kKGl0
ZXItPmZpcnN0KTsKKyAgICAgICAgaXRlci0+dmFsdWUoaXRlci0+a2V5KTsKIH0KIAogU3RyaW5n
IGRlZmF1bHRMYW5ndWFnZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
dWRpby9IUlRGRWxldmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0hS
VEZFbGV2YXRpb24uY3BwCmluZGV4IGViMDdkNGVjOWY5MmI3NDI4NTAyMTgzMjUyYjEwMTk1Mjlm
MjE4YzMuLjA3ZTAwMTg1OGMxYjYyMjQxZTRiNzZhYjNjZmQ2NTBhNmRhNGFjM2MgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0hSVEZFbGV2YXRpb24uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0hSVEZFbGV2YXRpb24uY3BwCkBAIC03OSw3
ICs3OSw3IEBAIHN0YXRpYyBBdWRpb0J1cyogZ2V0Q29uY2F0ZW5hdGVkSW1wdWxzZVJlc3BvbnNl
c0ZvclN1YmplY3QoY29uc3QgU3RyaW5nJiBzdWJqZWN0CiAgICAgICAgIGJ1cyA9IGNvbmNhdGVu
YXRlZEltcHVsc2VSZXNwb25zZXMubGVha1B0cigpOwogICAgICAgICBhdWRpb0J1c01hcC5zZXQo
c3ViamVjdE5hbWUsIGJ1cyk7CiAgICAgfSBlbHNlCi0gICAgICAgIGJ1cyA9IGl0ZXJhdG9yLT5z
ZWNvbmQ7CisgICAgICAgIGJ1cyA9IGl0ZXJhdG9yLT52YWx1ZTsKIAogICAgIHNpemVfdCByZXNw
b25zZUxlbmd0aCA9IGJ1cy0+bGVuZ3RoKCk7CiAgICAgc2l6ZV90IGV4cGVjdGVkTGVuZ3RoID0g
c3RhdGljX2Nhc3Q8c2l6ZV90PihUb3RhbE51bWJlck9mUmVzcG9uc2VzICogUmVzcG9uc2VGcmFt
ZVNpemUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9D
b29raWVNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvQ29v
a2llTWFuYWdlci5jcHAKaW5kZXggZDllYmJmMzdkZjI0N2M5N2RiODczMjQwZWNiMDAyYmQxNGY2
MTA3Yi4uMTU4NjlhYWM1NWFkYzI4OGNjYjg3ZDczYjA3MjcwMmNlMTcwZjBhOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9Db29raWVNYW5hZ2VyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0Nvb2tpZU1hbmFnZXIuY3Bw
CkBAIC0yMjQsNyArMjI0LDcgQEAgU3RyaW5nIENvb2tpZU1hbmFnZXI6OmdlbmVyYXRlSHRtbEZy
YWdtZW50Rm9yQ29va2llcygpCiAKICAgICBWZWN0b3I8UGFyc2VkQ29va2llKj4gY29va2llQ2Fu
ZGlkYXRlczsKICAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBDb29raWVNYXAqPjo6aXRlcmF0b3Ig
aXQgPSBtX21hbmFnZXJNYXAuYmVnaW4oKTsgaXQgIT0gbV9tYW5hZ2VyTWFwLmVuZCgpOyArK2l0
KQotICAgICAgICBpdC0+c2Vjb25kLT5nZXRBbGxDaGlsZENvb2tpZXMoJmNvb2tpZUNhbmRpZGF0
ZXMpOworICAgICAgICBpdC0+dmFsdWUtPmdldEFsbENoaWxkQ29va2llcygmY29va2llQ2FuZGlk
YXRlcyk7CiAKICAgICBTdHJpbmcgcmVzdWx0OwogICAgIFBhcnNlZENvb2tpZSogY29va2llID0g
MDsKQEAgLTM0Myw3ICszNDMsNyBAQCB2b2lkIENvb2tpZU1hbmFnZXI6OnJlbW92ZUFsbENvb2tp
ZXMoQmFja2luZ1N0b3JlUmVtb3ZhbFBvbGljeSBiYWNraW5nU3RvcmVSZW1vdgogICAgIEhhc2hN
YXA8U3RyaW5nLCBDb29raWVNYXAqPjo6aXRlcmF0b3IgZmlyc3QgPSBtX21hbmFnZXJNYXAuYmVn
aW4oKTsKICAgICBIYXNoTWFwPFN0cmluZywgQ29va2llTWFwKj46Oml0ZXJhdG9yIGVuZCA9IG1f
bWFuYWdlck1hcC5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBDb29raWVNYXAqPjo6
aXRlcmF0b3IgaXQgPSBmaXJzdDsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25k
LT5kZWxldGVBbGxDb29raWVzQW5kRG9tYWlucygpOworICAgICAgICBpdC0+dmFsdWUtPmRlbGV0
ZUFsbENvb2tpZXNBbmREb21haW5zKCk7CiAKICAgICBpZiAoYmFja2luZ1N0b3JlUmVtb3ZhbCA9
PSBSZW1vdmVGcm9tQmFja2luZ1N0b3JlKQogICAgICAgICBtX2Nvb2tpZUJhY2tpbmdTdG9yZS0+
cmVtb3ZlQWxsKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2Jl
cnJ5L0Nvb2tpZU1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0Nv
b2tpZU1hcC5jcHAKaW5kZXggYjIxN2IyZTQ4NDUwZWQwZmQyNTRjM2QwY2FlNzU1M2YxZTExYWU0
MC4uMmIwMzgwZTc5YWI3ODI0ZjYyMmUxNDdlZjJhOTM2MTdiOWFhOGM3ZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9Db29raWVNYXAuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvQ29va2llTWFwLmNwcApAQCAtMTY2LDcg
KzE2Niw3IEBAIFBhcnNlZENvb2tpZSogQ29va2llTWFwOjpyZW1vdmVPbGRlc3RDb29raWUoKQog
ICAgICAgICBDb29raWVMb2coIkNvb2tpZU1hcCAtIGxvb2tpbmcgaW50byBzdWJkb21haW5zIik7
CiAKICAgICAgICAgZm9yIChIYXNoTWFwPFN0cmluZywgQ29va2llTWFwKj46Oml0ZXJhdG9yIGl0
ID0gbV9zdWJkb21haW5zLmJlZ2luKCk7IGl0ICE9IG1fc3ViZG9tYWlucy5lbmQoKTsgKytpdCkg
ewotICAgICAgICAgICAgb2xkZXN0Q29va2llID0gaXQtPnNlY29uZC0+cmVtb3ZlT2xkZXN0Q29v
a2llKCk7CisgICAgICAgICAgICBvbGRlc3RDb29raWUgPSBpdC0+dmFsdWUtPnJlbW92ZU9sZGVz
dENvb2tpZSgpOwogICAgICAgICAgICAgaWYgKG9sZGVzdENvb2tpZSkKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQpAQCAtMjA4LDcgKzIwOCw3IEBAIHZvaWQgQ29va2llTWFwOjpn
ZXRBbGxDaGlsZENvb2tpZXMoVmVjdG9yPFBhcnNlZENvb2tpZSo+KiBzdGFja09mQ29va2llcykK
ICAgICBDb29raWVMb2coIkNvb2tpZU1hcCAtIGdldEFsbENoaWxkQ29va2llcyBpbiBNYXAgLSAl
cyIsIGdldE5hbWUoKS51dGY4KCkuZGF0YSgpKTsKICAgICBnZXRBbGxDb29raWVzKHN0YWNrT2ZD
b29raWVzKTsKICAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBDb29raWVNYXAqPjo6aXRlcmF0b3Ig
aXQgPSBtX3N1YmRvbWFpbnMuYmVnaW4oKTsgaXQgIT0gbV9zdWJkb21haW5zLmVuZCgpOyArK2l0
KQotICAgICAgICBpdC0+c2Vjb25kLT5nZXRBbGxDaGlsZENvb2tpZXMoc3RhY2tPZkNvb2tpZXMp
OworICAgICAgICBpdC0+dmFsdWUtPmdldEFsbENoaWxkQ29va2llcyhzdGFja09mQ29va2llcyk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2NmL0JpbmFyeVByb3BlcnR5TGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jZi9CaW5hcnlQcm9wZXJ0eUxpc3QuY3BwCmluZGV4IDRiYzdjMmU2MDdlYWIzZTBiNDcz
NjBhNjIyNmUxYTI3YTUyMDhiMDkuLjQ4YTBmOTE3ZTkzZWY4OTIxNTZlZDQ3MTIxMjhkMDBmOWMw
Zjc5ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL0JpbmFyeVByb3Bl
cnR5TGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2YvQmluYXJ5UHJvcGVy
dHlMaXN0LmNwcApAQCAtMjI5LDcgKzIyOSw3IEBAIHZvaWQgQmluYXJ5UHJvcGVydHlMaXN0UGxh
bjo6d3JpdGVJbnRlZ2VyQXJyYXkoY29uc3QgaW50KiBpbnRlZ2Vycywgc2l6ZV90IHNpemUpCiAg
ICAgICAgIHJldHVybjsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKICAg
ICAgICAgd3JpdGVJbnRlZ2VyKGludGVnZXJzW2ldKTsKLSAgICBhZGRSZXN1bHQuaXRlcmF0b3It
PnNlY29uZCA9IG1fY3VycmVudE9iamVjdFJlZmVyZW5jZSsrOworICAgIGFkZFJlc3VsdC5pdGVy
YXRvci0+dmFsdWUgPSBtX2N1cnJlbnRPYmplY3RSZWZlcmVuY2UrKzsKICAgICB3cml0ZUFycmF5
T2JqZWN0KHNpemUpOwogICAgIG1fY3VycmVudEFnZ3JlZ2F0ZVNpemUgPSBzYXZlZEFnZ3JlZ2F0
ZVNpemU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9z
dXBwb3J0L1dlYkhUVFBMb2FkSW5mby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9zdXBwb3J0L1dlYkhUVFBMb2FkSW5mby5jcHAKaW5kZXggZDdkNTdmMjEyMTA0ZmU5OTA3
NTY2MzI1MGQ0NDIzYjFlNjI2YjYyNy4uODAwZjZhYzI5M2M2ZDk5OWIxZGE4ZmQyNGZjZTdjNGYx
MjNmZWZkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3Vw
cG9ydC9XZWJIVFRQTG9hZEluZm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2No
cm9taXVtL3N1cHBvcnQvV2ViSFRUUExvYWRJbmZvLmNwcApAQCAtMTA1LDcgKzEwNSw3IEBAIHN0
YXRpYyB2b2lkIGFkZEhlYWRlcihIVFRQSGVhZGVyTWFwKiBtYXAsIGNvbnN0IFdlYlN0cmluZyYg
bmFtZSwgY29uc3QgV2ViU3RyaW5nCiB7CiAgICAgSFRUUEhlYWRlck1hcDo6QWRkUmVzdWx0IHJl
c3VsdCA9IG1hcC0+YWRkKG5hbWUsIHZhbHVlKTsKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5
KQotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCArPSAiLCAiICsgU3RyaW5nKHZhbHVl
KTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSArPSAiLCAiICsgU3RyaW5nKHZhbHVl
KTsKIH0KIAogdm9pZCBXZWJIVFRQTG9hZEluZm86OmFkZFJlcXVlc3RIZWFkZXIoY29uc3QgV2Vi
U3RyaW5nJiBuYW1lLCBjb25zdCBXZWJTdHJpbmcmIHZhbHVlKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJVUkxSZXF1ZXN0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVVJMUmVxdWVzdC5jcHAK
aW5kZXggZjQzN2I1MTY0M2IyMzRiNjA5Zjc3MjVmYjhkNzZkNzMxZjU2MTdlYS4uZTM4NTEwMTRm
Y2RkNDViZmFjYjQ4Yjk3YmJhNzZlMzFkOGI0YTAxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJVUkxSZXF1ZXN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlVSTFJlcXVlc3QuY3BwCkBA
IC0xOTUsNyArMTk1LDcgQEAgdm9pZCBXZWJVUkxSZXF1ZXN0Ojp2aXNpdEhUVFBIZWFkZXJGaWVs
ZHMoV2ViSFRUUEhlYWRlclZpc2l0b3IqIHZpc2l0b3IpIGNvbnN0CiB7CiAgICAgY29uc3QgSFRU
UEhlYWRlck1hcCYgbWFwID0gbV9wcml2YXRlLT5tX3Jlc291cmNlUmVxdWVzdC0+aHR0cEhlYWRl
ckZpZWxkcygpOwogICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
YXAuYmVnaW4oKTsgaXQgIT0gbWFwLmVuZCgpOyArK2l0KQotICAgICAgICB2aXNpdG9yLT52aXNp
dEhlYWRlcihpdC0+Zmlyc3QsIGl0LT5zZWNvbmQpOworICAgICAgICB2aXNpdG9yLT52aXNpdEhl
YWRlcihpdC0+a2V5LCBpdC0+dmFsdWUpOwogfQogCiBXZWJIVFRQQm9keSBXZWJVUkxSZXF1ZXN0
OjpodHRwQm9keSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
aHJvbWl1bS9zdXBwb3J0L1dlYlVSTFJlc3BvbnNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVVJMUmVzcG9uc2UuY3BwCmluZGV4IDA1NjU4MDUwZDg5
NDhlNDJjODhiMjg3NTc2ZmNmOThjMWJmODM5YmYuLjA2ZTk0M2JlYjQ3ZmFhNTAzZjJkOWVkMzlj
MmVkNjdhZDYwZjNmYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9t
aXVtL3N1cHBvcnQvV2ViVVJMUmVzcG9uc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVVJMUmVzcG9uc2UuY3BwCkBAIC0yNTEsNyArMjUxLDcg
QEAgdm9pZCBXZWJVUkxSZXNwb25zZTo6YWRkSFRUUEhlYWRlckZpZWxkKGNvbnN0IFdlYlN0cmlu
ZyYgbmFtZSwgY29uc3QgV2ViU3RyaW5nJgogICAgIEhUVFBIZWFkZXJNYXA6OkFkZFJlc3VsdCBy
ZXN1bHQgPQogICAgICAgICBjb25zdF9jYXN0PEhUVFBIZWFkZXJNYXAqPigmbWFwKS0+YWRkKG5h
bWUsIHZhbHVlU3RyKTsKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXN1
bHQuaXRlcmF0b3ItPnNlY29uZCArPSAiLCAiICsgdmFsdWVTdHI7CisgICAgICAgIHJlc3VsdC5p
dGVyYXRvci0+dmFsdWUgKz0gIiwgIiArIHZhbHVlU3RyOwogfQogCiB2b2lkIFdlYlVSTFJlc3Bv
bnNlOjpjbGVhckhUVFBIZWFkZXJGaWVsZChjb25zdCBXZWJTdHJpbmcmIG5hbWUpCkBAIC0yNjUs
NyArMjY1LDcgQEAgdm9pZCBXZWJVUkxSZXNwb25zZTo6dmlzaXRIVFRQSGVhZGVyRmllbGRzKFdl
YkhUVFBIZWFkZXJWaXNpdG9yKiB2aXNpdG9yKSBjb25zdAogewogICAgIGNvbnN0IEhUVFBIZWFk
ZXJNYXAmIG1hcCA9IG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlc3BvbnNlLT5odHRwSGVhZGVyRmll
bGRzKCk7CiAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC5i
ZWdpbigpOyBpdCAhPSBtYXAuZW5kKCk7ICsraXQpCi0gICAgICAgIHZpc2l0b3ItPnZpc2l0SGVh
ZGVyKGl0LT5maXJzdCwgaXQtPnNlY29uZCk7CisgICAgICAgIHZpc2l0b3ItPnZpc2l0SGVhZGVy
KGl0LT5rZXksIGl0LT52YWx1ZSk7CiB9CiAKIGRvdWJsZSBXZWJVUkxSZXNwb25zZTo6bGFzdE1v
ZGlmaWVkRGF0ZSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250Q2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udENhY2hlLmNwcAppbmRleCA0N2YyNTFjODQxNGExZTJkYjU5ZjAwNGE5MDQ0YWEwZjhjMmU5
ZDY1Li43YTRlOWM3ZmRiMzVmY2E3Njk0NTYyMTc0YmQ5YTdmNmMwZTc5OWY4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAKQEAgLTE5OSw3ICsx
OTksNyBAQCBGb250UGxhdGZvcm1EYXRhKiBGb250Q2FjaGU6OmdldENhY2hlZEZvbnRQbGF0Zm9y
bURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmbwogICAgICAgICBnRm9udFBsYXRmb3JtRGF0
YUNhY2hlLT5zZXQoa2V5LCByZXN1bHQpOwogICAgICAgICBmb3VuZFJlc3VsdCA9IHJlc3VsdDsK
ICAgICB9IGVsc2UgewotICAgICAgICByZXN1bHQgPSBpdC0+c2Vjb25kOworICAgICAgICByZXN1
bHQgPSBpdC0+dmFsdWU7CiAgICAgICAgIGZvdW5kUmVzdWx0ID0gdHJ1ZTsKICAgICB9CiAKQEAg
LTI5NCwyMCArMjk0LDIwIEBAIFNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldENhY2hlZEZv
bnREYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEqIHBsYXRmb3JtRGF0CiAgICAgICAgIHJldHVy
biBuZXdWYWx1ZS5maXJzdDsKICAgICB9CiAKLSAgICBpZiAoIXJlc3VsdC5nZXQoKS0+c2Vjb25k
LnNlY29uZCkgewotICAgICAgICBBU1NFUlQoZ0luYWN0aXZlRm9udERhdGEtPmNvbnRhaW5zKHJl
c3VsdC5nZXQoKS0+c2Vjb25kLmZpcnN0KSk7Ci0gICAgICAgIGdJbmFjdGl2ZUZvbnREYXRhLT5y
ZW1vdmUocmVzdWx0LmdldCgpLT5zZWNvbmQuZmlyc3QpOworICAgIGlmICghcmVzdWx0LmdldCgp
LT52YWx1ZS5zZWNvbmQpIHsKKyAgICAgICAgQVNTRVJUKGdJbmFjdGl2ZUZvbnREYXRhLT5jb250
YWlucyhyZXN1bHQuZ2V0KCktPnZhbHVlLmZpcnN0KSk7CisgICAgICAgIGdJbmFjdGl2ZUZvbnRE
YXRhLT5yZW1vdmUocmVzdWx0LmdldCgpLT52YWx1ZS5maXJzdCk7CiAgICAgfQogCiAgICAgaWYg
KHNob3VsZFJldGFpbiA9PSBSZXRhaW4pCi0gICAgICAgIHJlc3VsdC5nZXQoKS0+c2Vjb25kLnNl
Y29uZCsrOwotICAgIGVsc2UgaWYgKCFyZXN1bHQuZ2V0KCktPnNlY29uZC5zZWNvbmQpIHsKKyAg
ICAgICAgcmVzdWx0LmdldCgpLT52YWx1ZS5zZWNvbmQrKzsKKyAgICBlbHNlIGlmICghcmVzdWx0
LmdldCgpLT52YWx1ZS5zZWNvbmQpIHsKICAgICAgICAgLy8gSWYgc2hvdWxkUmV0YWluIGlzIERv
Tm90UmV0YWluIGFuZCBjb3VudCBpcyAwLCB3ZSB3YW50IHRvIHJlbW92ZSB0aGUgZm9udERhdGEg
ZnJvbSAKICAgICAgICAgLy8gZ0luYWN0aXZlRm9udERhdGEgKGFib3ZlKSBhbmQgcmUtYWRkIGhl
cmUgdG8gdXBkYXRlIExSVSBwb3NpdGlvbi4KLSAgICAgICAgZ0luYWN0aXZlRm9udERhdGEtPmFk
ZChyZXN1bHQuZ2V0KCktPnNlY29uZC5maXJzdCk7CisgICAgICAgIGdJbmFjdGl2ZUZvbnREYXRh
LT5hZGQocmVzdWx0LmdldCgpLT52YWx1ZS5maXJzdCk7CiAgICAgfQogCi0gICAgcmV0dXJuIHJl
c3VsdC5nZXQoKS0+c2Vjb25kLmZpcnN0OworICAgIHJldHVybiByZXN1bHQuZ2V0KCktPnZhbHVl
LmZpcnN0OwogfQogCiBTaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXROb25SZXRhaW5lZExh
c3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24pCkBAIC0zMjMsOCArMzIzLDggQEAgdm9pZCBGb250Q2FjaGU6OnJlbGVhc2VGb250RGF0YShj
b25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEpCiAgICAgRm9udERhdGFDYWNoZTo6aXRlcmF0
b3IgaXQgPSBnRm9udERhdGFDYWNoZS0+ZmluZChmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkpOwog
ICAgIEFTU0VSVChpdCAhPSBnRm9udERhdGFDYWNoZS0+ZW5kKCkpOwogCi0gICAgQVNTRVJUKGl0
LT5zZWNvbmQuc2Vjb25kKTsKLSAgICBpZiAoIS0taXQtPnNlY29uZC5zZWNvbmQpCisgICAgQVNT
RVJUKGl0LT52YWx1ZS5zZWNvbmQpOworICAgIGlmICghLS1pdC0+dmFsdWUuc2Vjb25kKQogICAg
ICAgICBnSW5hY3RpdmVGb250RGF0YS0+YWRkKGZvbnREYXRhKTsKIH0KIApAQCAtMzcyLDggKzM3
Miw4IEBAIHZvaWQgRm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGEoaW50IGNvdW50KQog
ICAgICAgICBrZXlzVG9SZW1vdmUucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShnRm9udFBsYXRmb3Jt
RGF0YUNhY2hlLT5zaXplKCkpOwogICAgICAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGU6Oml0ZXJh
dG9yIHBsYXRmb3JtRGF0YUVuZCA9IGdGb250UGxhdGZvcm1EYXRhQ2FjaGUtPmVuZCgpOwogICAg
ICAgICBmb3IgKEZvbnRQbGF0Zm9ybURhdGFDYWNoZTo6aXRlcmF0b3IgcGxhdGZvcm1EYXRhID0g
Z0ZvbnRQbGF0Zm9ybURhdGFDYWNoZS0+YmVnaW4oKTsgcGxhdGZvcm1EYXRhICE9IHBsYXRmb3Jt
RGF0YUVuZDsgKytwbGF0Zm9ybURhdGEpIHsKLSAgICAgICAgICAgIGlmIChwbGF0Zm9ybURhdGEt
PnNlY29uZCAmJiAhZ0ZvbnREYXRhQ2FjaGUtPmNvbnRhaW5zKCpwbGF0Zm9ybURhdGEtPnNlY29u
ZCkpCi0gICAgICAgICAgICAgICAga2V5c1RvUmVtb3ZlLmFwcGVuZChwbGF0Zm9ybURhdGEtPmZp
cnN0KTsKKyAgICAgICAgICAgIGlmIChwbGF0Zm9ybURhdGEtPnZhbHVlICYmICFnRm9udERhdGFD
YWNoZS0+Y29udGFpbnMoKnBsYXRmb3JtRGF0YS0+dmFsdWUpKQorICAgICAgICAgICAgICAgIGtl
eXNUb1JlbW92ZS5hcHBlbmQocGxhdGZvcm1EYXRhLT5rZXkpOwogICAgICAgICB9CiAgICAgICAg
IAogICAgICAgICBzaXplX3Qga2V5c1RvUmVtb3ZlQ291bnQgPSBrZXlzVG9SZW1vdmUuc2l6ZSgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdl
VHJlZU5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdl
VHJlZU5vZGUuY3BwCmluZGV4IDg3ZTkzZmQ5OGZmOGRlZjA5NDgxNmE1MjQzNGU5MDA1ZTg5OTk1
OWQuLjYzNWVjN2IyMjlhYjRjYTk5MThiNTVmZWRkN2ZhOTg3YjQxOTI2NTEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZVRyZWVOb2RlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2VUcmVlTm9kZS5j
cHAKQEAgLTc0LDcgKzc0LDcgQEAgc2l6ZV90IEdseXBoUGFnZVRyZWVOb2RlOjp0cmVlR2x5cGhQ
YWdlQ291bnQoKQogICAgIGlmIChyb290cykgewogICAgICAgICBIYXNoTWFwPGludCwgR2x5cGhQ
YWdlVHJlZU5vZGUqPjo6aXRlcmF0b3IgZW5kID0gcm9vdHMtPmVuZCgpOwogICAgICAgICBmb3Ig
KEhhc2hNYXA8aW50LCBHbHlwaFBhZ2VUcmVlTm9kZSo+OjppdGVyYXRvciBpdCA9IHJvb3RzLT5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBjb3VudCArPSBpdC0+c2Vjb25k
LT5wYWdlQ291bnQoKTsKKyAgICAgICAgICAgIGNvdW50ICs9IGl0LT52YWx1ZS0+cGFnZUNvdW50
KCk7CiAgICAgfQogICAgIAogICAgIGlmIChwYWdlWmVyb1Jvb3QpCkBAIC04OCw3ICs4OCw3IEBA
IHNpemVfdCBHbHlwaFBhZ2VUcmVlTm9kZTo6cGFnZUNvdW50KCkgY29uc3QKICAgICBzaXplX3Qg
Y291bnQgPSBtX3BhZ2UgJiYgbV9wYWdlLT5vd25lcigpID09IHRoaXMgPyAxIDogMDsKICAgICBI
YXNoTWFwPGNvbnN0IEZvbnREYXRhKiwgR2x5cGhQYWdlVHJlZU5vZGUqPjo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gbV9jaGlsZHJlbi5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8Y29uc3QgRm9udERh
dGEqLCBHbHlwaFBhZ2VUcmVlTm9kZSo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fY2hpbGRyZW4u
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBjb3VudCArPSBpdC0+c2Vjb25kLT5w
YWdlQ291bnQoKTsKKyAgICAgICAgY291bnQgKz0gaXQtPnZhbHVlLT5wYWdlQ291bnQoKTsKIAog
ICAgIHJldHVybiBjb3VudDsKIH0KQEAgLTk5LDcgKzk5LDcgQEAgdm9pZCBHbHlwaFBhZ2VUcmVl
Tm9kZTo6cHJ1bmVUcmVlQ3VzdG9tRm9udERhdGEoY29uc3QgRm9udERhdGEqIGZvbnREYXRhKQog
ICAgIGlmIChyb290cykgewogICAgICAgICBIYXNoTWFwPGludCwgR2x5cGhQYWdlVHJlZU5vZGUq
Pjo6aXRlcmF0b3IgZW5kID0gcm9vdHMtPmVuZCgpOwogICAgICAgICBmb3IgKEhhc2hNYXA8aW50
LCBHbHlwaFBhZ2VUcmVlTm9kZSo+OjppdGVyYXRvciBpdCA9IHJvb3RzLT5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBpdC0+c2Vjb25kLT5wcnVuZUN1c3RvbUZvbnREYXRh
KGZvbnREYXRhKTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+cHJ1bmVDdXN0b21Gb250RGF0YShm
b250RGF0YSk7CiAgICAgfQogICAgIAogICAgIGlmIChwYWdlWmVyb1Jvb3QpCkBAIC0xMTEsNyAr
MTExLDcgQEAgdm9pZCBHbHlwaFBhZ2VUcmVlTm9kZTo6cHJ1bmVUcmVlRm9udERhdGEoY29uc3Qg
U2ltcGxlRm9udERhdGEqIGZvbnREYXRhKQogICAgIGlmIChyb290cykgewogICAgICAgICBIYXNo
TWFwPGludCwgR2x5cGhQYWdlVHJlZU5vZGUqPjo6aXRlcmF0b3IgZW5kID0gcm9vdHMtPmVuZCgp
OwogICAgICAgICBmb3IgKEhhc2hNYXA8aW50LCBHbHlwaFBhZ2VUcmVlTm9kZSo+OjppdGVyYXRv
ciBpdCA9IHJvb3RzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBpdC0+
c2Vjb25kLT5wcnVuZUZvbnREYXRhKGZvbnREYXRhKTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+
cHJ1bmVGb250RGF0YShmb250RGF0YSk7CiAgICAgfQogICAgIAogICAgIGlmIChwYWdlWmVyb1Jv
b3QpCkBAIC0zNjIsNyArMzYyLDcgQEAgdm9pZCBHbHlwaFBhZ2VUcmVlTm9kZTo6cHJ1bmVDdXN0
b21Gb250RGF0YShjb25zdCBGb250RGF0YSogZm9udERhdGEpCiAgICAgICAgIHJldHVybjsKICAg
ICBIYXNoTWFwPGNvbnN0IEZvbnREYXRhKiwgR2x5cGhQYWdlVHJlZU5vZGUqPjo6aXRlcmF0b3Ig
ZW5kID0gbV9jaGlsZHJlbi5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8Y29uc3QgRm9udERhdGEq
LCBHbHlwaFBhZ2VUcmVlTm9kZSo+OjppdGVyYXRvciBpdCA9IG1fY2hpbGRyZW4uYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5wcnVuZUN1c3RvbUZvbnREYXRh
KGZvbnREYXRhKTsKKyAgICAgICAgaXQtPnZhbHVlLT5wcnVuZUN1c3RvbUZvbnREYXRhKGZvbnRE
YXRhKTsKIH0KIAogdm9pZCBHbHlwaFBhZ2VUcmVlTm9kZTo6cHJ1bmVGb250RGF0YShjb25zdCBT
aW1wbGVGb250RGF0YSogZm9udERhdGEsIHVuc2lnbmVkIGxldmVsKQpAQCAtMzc4LDcgKzM3OCw3
IEBAIHZvaWQgR2x5cGhQYWdlVHJlZU5vZGU6OnBydW5lRm9udERhdGEoY29uc3QgU2ltcGxlRm9u
dERhdGEqIGZvbnREYXRhLCB1bnNpZ25lZCBsCiAgICAgLy8gUHJ1bmUgYW55IGJyYW5jaCB0aGF0
IGNvbnRhaW5zIHRoaXMgRm9udERhdGEuCiAgICAgSGFzaE1hcDxjb25zdCBGb250RGF0YSosIEds
eXBoUGFnZVRyZWVOb2RlKj46Oml0ZXJhdG9yIGNoaWxkID0gbV9jaGlsZHJlbi5maW5kKGZvbnRE
YXRhKTsKICAgICBpZiAoY2hpbGQgIT0gbV9jaGlsZHJlbi5lbmQoKSkgewotICAgICAgICBHbHlw
aFBhZ2VUcmVlTm9kZSogbm9kZSA9IGNoaWxkLT5zZWNvbmQ7CisgICAgICAgIEdseXBoUGFnZVRy
ZWVOb2RlKiBub2RlID0gY2hpbGQtPnZhbHVlOwogICAgICAgICBtX2NoaWxkcmVuLnJlbW92ZShm
b250RGF0YSk7CiAgICAgICAgIHVuc2lnbmVkIGN1c3RvbUZvbnRDb3VudCA9IG5vZGUtPm1fY3Vz
dG9tRm9udENvdW50OwogICAgICAgICBkZWxldGUgbm9kZTsKQEAgLTM5NCw3ICszOTQsNyBAQCB2
b2lkIEdseXBoUGFnZVRyZWVOb2RlOjpwcnVuZUZvbnREYXRhKGNvbnN0IFNpbXBsZUZvbnREYXRh
KiBmb250RGF0YSwgdW5zaWduZWQgbAogCiAgICAgSGFzaE1hcDxjb25zdCBGb250RGF0YSosIEds
eXBoUGFnZVRyZWVOb2RlKj46Oml0ZXJhdG9yIGVuZCA9IG1fY2hpbGRyZW4uZW5kKCk7CiAgICAg
Zm9yIChIYXNoTWFwPGNvbnN0IEZvbnREYXRhKiwgR2x5cGhQYWdlVHJlZU5vZGUqPjo6aXRlcmF0
b3IgaXQgPSBtX2NoaWxkcmVuLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQt
PnNlY29uZC0+cHJ1bmVGb250RGF0YShmb250RGF0YSwgbGV2ZWwpOworICAgICAgICBpdC0+dmFs
dWUtPnBydW5lRm9udERhdGEoZm9udERhdGEsIGxldmVsKTsKIH0KIAogI2lmbmRlZiBOREVCVUcK
QEAgLTQwNiw4ICs0MDYsOCBAQCB2b2lkIEdseXBoUGFnZVRyZWVOb2RlOjpwcnVuZUZvbnREYXRh
KGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwgdW5zaWduZWQgbAogCiAgICAgICAgIEhh
c2hNYXA8Y29uc3QgRm9udERhdGEqLCBHbHlwaFBhZ2VUcmVlTm9kZSo+OjppdGVyYXRvciBlbmQg
PSBtX2NoaWxkcmVuLmVuZCgpOwogICAgICAgICBmb3IgKEhhc2hNYXA8Y29uc3QgRm9udERhdGEq
LCBHbHlwaFBhZ2VUcmVlTm9kZSo+OjppdGVyYXRvciBpdCA9IG1fY2hpbGRyZW4uYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBwcmludGYoIiVzXHQlcCAlc1xuIiwgaW5k
ZW50LmRhdGEoKSwgaXQtPmZpcnN0LCBpdC0+Zmlyc3QtPmRlc2NyaXB0aW9uKCkudXRmOCgpLmRh
dGEoKSk7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLT5zaG93U3VidHJlZSgpOworICAgICAgICAg
ICAgcHJpbnRmKCIlc1x0JXAgJXNcbiIsIGluZGVudC5kYXRhKCksIGl0LT5rZXksIGl0LT5rZXkt
PmRlc2NyaXB0aW9uKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBpdC0+dmFsdWUtPnNo
b3dTdWJ0cmVlKCk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKG1fc3lzdGVtRmFsbGJhY2tDaGls
ZCkgewogICAgICAgICAgICAgcHJpbnRmKCIlc1x0KiBmYWxsYmFja1xuIiwgaW5kZW50LmRhdGEo
KSk7CkBAIC00MjUsOCArNDI1LDggQEAgdm9pZCBzaG93R2x5cGhQYWdlVHJlZXMoKQogICAgIHNo
b3dHbHlwaFBhZ2VUcmVlKDApOwogICAgIEhhc2hNYXA8aW50LCBXZWJDb3JlOjpHbHlwaFBhZ2VU
cmVlTm9kZSo+OjppdGVyYXRvciBlbmQgPSBXZWJDb3JlOjpHbHlwaFBhZ2VUcmVlTm9kZTo6cm9v
dHMtPmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDxpbnQsIFdlYkNvcmU6OkdseXBoUGFnZVRyZWVO
b2RlKj46Oml0ZXJhdG9yIGl0ID0gV2ViQ29yZTo6R2x5cGhQYWdlVHJlZU5vZGU6OnJvb3RzLT5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgcHJpbnRmKCJcblBhZ2UgJWQ6XG4i
LCBpdC0+Zmlyc3QpOwotICAgICAgICBzaG93R2x5cGhQYWdlVHJlZShpdC0+Zmlyc3QpOworICAg
ICAgICBwcmludGYoIlxuUGFnZSAlZDpcbiIsIGl0LT5rZXkpOworICAgICAgICBzaG93R2x5cGhQ
YWdlVHJlZShpdC0+a2V5KTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlLmNwcAppbmRleCA1ODQzMmNlYWUz
ZGZhY2MxZGVjZjY2ZjMxNTkzZTkyNjg1ZjZkMzVmLi40NDU1ZGEzYjQ3MWQyZTFjMjQwODE0N2M2
OTYxMjI4MGEzMWIwY2M0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9UaWxlZEJhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmUuY3BwCkBAIC0xMTIsOSArMTEyLDkgQEAgdm9pZCBU
aWxlZEJhY2tpbmdTdG9yZTo6dXBkYXRlVGlsZUJ1ZmZlcnMoKQogICAgIFZlY3RvcjxSZWZQdHI8
VGlsZT4gPiBkaXJ0eVRpbGVzOwogICAgIFRpbGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fdGlsZXMu
ZW5kKCk7CiAgICAgZm9yIChUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmICghaXQtPnNlY29uZC0+aXNEaXJ0eSgpKQor
ICAgICAgICBpZiAoIWl0LT52YWx1ZS0+aXNEaXJ0eSgpKQogICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIGRpcnR5VGlsZXMuYXBwZW5kKGl0LT5zZWNvbmQpOworICAgICAgICBkaXJ0eVRp
bGVzLmFwcGVuZChpdC0+dmFsdWUpOwogICAgIH0KIAogICAgIGlmIChkaXJ0eVRpbGVzLmlzRW1w
dHkoKSkgewpAQCAtMzk3LDEzICszOTcsMTMgQEAgYm9vbCBUaWxlZEJhY2tpbmdTdG9yZTo6cmVz
aXplRWRnZVRpbGVzKCkKICAgICBWZWN0b3I8VGlsZTo6Q29vcmRpbmF0ZT4gdGlsZXNUb1JlbW92
ZTsKICAgICBUaWxlTWFwOjppdGVyYXRvciBlbmQgPSBtX3RpbGVzLmVuZCgpOwogICAgIGZvciAo
VGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewotICAgICAgICBUaWxlOjpDb29yZGluYXRlIHRpbGVDb29yZGluYXRlID0gaXQtPnNlY29uZC0+
Y29vcmRpbmF0ZSgpOwotICAgICAgICBJbnRSZWN0IHRpbGVSZWN0ID0gaXQtPnNlY29uZC0+cmVj
dCgpOworICAgICAgICBUaWxlOjpDb29yZGluYXRlIHRpbGVDb29yZGluYXRlID0gaXQtPnZhbHVl
LT5jb29yZGluYXRlKCk7CisgICAgICAgIEludFJlY3QgdGlsZVJlY3QgPSBpdC0+dmFsdWUtPnJl
Y3QoKTsKICAgICAgICAgSW50UmVjdCBleHBlY3RlZFRpbGVSZWN0ID0gdGlsZVJlY3RGb3JDb29y
ZGluYXRlKHRpbGVDb29yZGluYXRlKTsKICAgICAgICAgaWYgKGV4cGVjdGVkVGlsZVJlY3QuaXNF
bXB0eSgpKQogICAgICAgICAgICAgdGlsZXNUb1JlbW92ZS5hcHBlbmQodGlsZUNvb3JkaW5hdGUp
OwogICAgICAgICBlbHNlIGlmIChleHBlY3RlZFRpbGVSZWN0ICE9IHRpbGVSZWN0KSB7Ci0gICAg
ICAgICAgICBpdC0+c2Vjb25kLT5yZXNpemUoZXhwZWN0ZWRUaWxlUmVjdC5zaXplKCkpOworICAg
ICAgICAgICAgaXQtPnZhbHVlLT5yZXNpemUoZXhwZWN0ZWRUaWxlUmVjdC5zaXplKCkpOwogICAg
ICAgICAgICAgd2FzUmVzaXplZCA9IHRydWU7CiAgICAgICAgIH0KICAgICB9CkBAIC00MjIsOCAr
NDIyLDggQEAgdm9pZCBUaWxlZEJhY2tpbmdTdG9yZTo6c2V0S2VlcFJlY3QoY29uc3QgSW50UmVj
dCYga2VlcFJlY3QpCiAgICAgVmVjdG9yPFRpbGU6OkNvb3JkaW5hdGU+IHRvUmVtb3ZlOwogICAg
IFRpbGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fdGlsZXMuZW5kKCk7CiAgICAgZm9yIChUaWxlTWFw
OjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAg
ICAgIFRpbGU6OkNvb3JkaW5hdGUgY29vcmRpbmF0ZSA9IGl0LT5zZWNvbmQtPmNvb3JkaW5hdGUo
KTsKLSAgICAgICAgRmxvYXRSZWN0IHRpbGVSZWN0ID0gaXQtPnNlY29uZC0+cmVjdCgpOworICAg
ICAgICBUaWxlOjpDb29yZGluYXRlIGNvb3JkaW5hdGUgPSBpdC0+dmFsdWUtPmNvb3JkaW5hdGUo
KTsKKyAgICAgICAgRmxvYXRSZWN0IHRpbGVSZWN0ID0gaXQtPnZhbHVlLT5yZWN0KCk7CiAgICAg
ICAgIGlmICghdGlsZVJlY3QuaW50ZXJzZWN0cyhrZWVwUmVjdEYpKQogICAgICAgICAgICAgdG9S
ZW1vdmUuYXBwZW5kKGNvb3JkaW5hdGUpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9jZi9NZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb25DRi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZv
dW5kYXRpb24vY2YvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0YuY3BwCmluZGV4IDg3
NWQxMmRmYmU3YmI0MjIxYmU3NTUyNGY4MWFjZDIwN2NhM2E3ODAuLjAzNmQ4ZjMyNmMwYmY1YzJj
ODc1YTQ0YmIxNDA4MGE4NjRiZGY0MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9jZi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRp
b25DRi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0
aW9uL2NmL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGLmNwcApAQCAtOTEyLDcgKzkx
Miw3IEBAIEFWRldyYXBwZXIqIEFWRldyYXBwZXI6OmF2ZldyYXBwZXJGb3JDYWxsYmFja0NvbnRl
eHQodm9pZCogY29udGV4dCkKICAgICBpZiAoaXQgPT0gbWFwKCkuZW5kKCkpCiAgICAgICAgIHJl
dHVybiAwOwogCi0gICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgcmV0dXJuIGl0LT52YWx1ZTsK
IH0KIAogdm9pZCBBVkZXcmFwcGVyOjpzY2hlZHVsZURpc2Nvbm5lY3RBbmREZWxldGUoKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXll
clRpbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkv
TGF5ZXJUaWxlci5jcHAKaW5kZXggZDUxN2FhYTdiNDAyNDQ4OTMyZGQ0MmJmOWRhYjQwZDEwMmE4
ZDJjNC4uZjRjYmY0Nzc4Yjg5NzAzZmJmNjAxZTQwY2RlYjIyMTA4Njg3YTI0NyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclRpbGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xh
eWVyVGlsZXIuY3BwCkBAIC0zODAsMTkgKzM4MCwxOSBAQCB2b2lkIExheWVyVGlsZXI6OnVwbG9h
ZFRleHR1cmVzSWZOZWVkZWQoKQogICAgIGZvciAoVGlsZUpvYnNNYXA6OmNvbnN0X2l0ZXJhdG9y
IHRpbGVKb2JzSXRlciA9IHRpbGVKb2JzTWFwLmJlZ2luKCk7IHRpbGVKb2JzSXRlciAhPSB0aWxl
Sm9ic0l0ZXJFbmQ7ICsrdGlsZUpvYnNJdGVyKSB7CiAgICAgICAgIEludFBvaW50IG9yaWdpbiA9
IG9yaWdpbk9mVGlsZSh0aWxlSm9ic0l0ZXItPmZpcnN0KTsKIAotICAgICAgICBMYXllclRpbGUq
IHRpbGUgPSBtX3RpbGVzQ29tcG9zaXRpbmdUaHJlYWQuZ2V0KHRpbGVKb2JzSXRlci0+Zmlyc3Qp
OworICAgICAgICBMYXllclRpbGUqIHRpbGUgPSBtX3RpbGVzQ29tcG9zaXRpbmdUaHJlYWQuZ2V0
KHRpbGVKb2JzSXRlci0+a2V5KTsKICAgICAgICAgaWYgKCF0aWxlKSB7CiAgICAgICAgICAgICBp
ZiAob3JpZ2luLngoKSA+PSBtX3JlcXVpcmVkVGV4dHVyZVNpemUud2lkdGgoKSB8fCBvcmlnaW4u
eSgpID49IG1fcmVxdWlyZWRUZXh0dXJlU2l6ZS5oZWlnaHQoKSkKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgIHRpbGUgPSBuZXcgTGF5ZXJUaWxlKCk7Ci0gICAgICAgICAg
ICBtX3RpbGVzQ29tcG9zaXRpbmdUaHJlYWQuYWRkKHRpbGVKb2JzSXRlci0+Zmlyc3QsIHRpbGUp
OworICAgICAgICAgICAgbV90aWxlc0NvbXBvc2l0aW5nVGhyZWFkLmFkZCh0aWxlSm9ic0l0ZXIt
PmtleSwgdGlsZSk7CiAgICAgICAgIH0KIAogICAgICAgICBJbnRSZWN0IHRpbGVSZWN0KG9yaWdp
biwgdGlsZVNpemUoKSk7CiAgICAgICAgIHRpbGVSZWN0LnNldFdpZHRoKG1pbihtX3JlcXVpcmVk
VGV4dHVyZVNpemUud2lkdGgoKSAtIHRpbGVSZWN0LngoKSwgdGlsZVJlY3Qud2lkdGgoKSkpOwog
ICAgICAgICB0aWxlUmVjdC5zZXRIZWlnaHQobWluKG1fcmVxdWlyZWRUZXh0dXJlU2l6ZS5oZWln
aHQoKSAtIHRpbGVSZWN0LnkoKSwgdGlsZVJlY3QuaGVpZ2h0KCkpKTsKIAotICAgICAgICBwZXJm
b3JtVGlsZUpvYih0aWxlLCAqdGlsZUpvYnNJdGVyLT5zZWNvbmQsIHRpbGVSZWN0KTsKKyAgICAg
ICAgcGVyZm9ybVRpbGVKb2IodGlsZSwgKnRpbGVKb2JzSXRlci0+dmFsdWUsIHRpbGVSZWN0KTsK
ICAgICB9CiAKICAgICBtX3RleHR1cmVKb2JzLmNsZWFyKCk7CkBAIC00MzUsMTEgKzQzNSwxMSBA
QCB2b2lkIExheWVyVGlsZXI6OmFkZFRpbGVKb2IoY29uc3QgVGlsZUluZGV4JiBpbmRleCwgY29u
c3QgVGV4dHVyZUpvYiYgam9iLCBUaWxlSgogICAgICAgICByZXR1cm47CiAKICAgICAvLyBJbiB0
aGlzIGNhc2Ugd2UgbGVhdmUgdGhlIHByZXZpb3VzIGpvYi4KLSAgICBpZiAoam9iLm1fdHlwZSA9
PSBUZXh0dXJlSm9iOjpEaXJ0eUNvbnRlbnRzICYmIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLT5t
X3R5cGUgPT0gVGV4dHVyZUpvYjo6RGlzY2FyZENvbnRlbnRzKQorICAgIGlmIChqb2IubV90eXBl
ID09IFRleHR1cmVKb2I6OkRpcnR5Q29udGVudHMgJiYgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+
bV90eXBlID09IFRleHR1cmVKb2I6OkRpc2NhcmRDb250ZW50cykKICAgICAgICAgcmV0dXJuOwog
CiAgICAgLy8gT3ZlcnJpZGUgdGhlIHByZXZpb3VzIGpvYi4KLSAgICByZXN1bHQuaXRlcmF0b3It
PnNlY29uZCA9ICZqb2I7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9ICZqb2I7CiB9CiAK
IHZvaWQgTGF5ZXJUaWxlcjo6cGVyZm9ybVRpbGVKb2IoTGF5ZXJUaWxlKiB0aWxlLCBjb25zdCBU
ZXh0dXJlSm9iJiBqb2IsIGNvbnN0IEludFJlY3QmIHRpbGVSZWN0KQpAQCAtNzMzLDcgKzczMyw3
IEBAIHZvaWQgTGF5ZXJUaWxlcjo6YmluZENvbnRlbnRzVGV4dHVyZSgpCiAgICAgaWYgKG1fdGls
ZXNDb21wb3NpdGluZ1RocmVhZC5zaXplKCkgIT0gMSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
Y29uc3QgTGF5ZXJUaWxlKiB0aWxlID0gbV90aWxlc0NvbXBvc2l0aW5nVGhyZWFkLmJlZ2luKCkt
PnNlY29uZDsKKyAgICBjb25zdCBMYXllclRpbGUqIHRpbGUgPSBtX3RpbGVzQ29tcG9zaXRpbmdU
aHJlYWQuYmVnaW4oKS0+dmFsdWU7CiAKICAgICBBU1NFUlQodGlsZS0+aGFzVGV4dHVyZSgpKTsK
ICAgICBpZiAoIXRpbGUtPmhhc1RleHR1cmUoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCmluZGV4IGNmNDdiYTU5
MDE2ZWM2MDdlMGZiNWNiM2ZhMWYyYTk4ZDUyYTAxZjQuLmEwZWQ1N2Q3OTRmYTAzMWE2NWIwYmRi
ZTAzYThjOGVjMzdlNzNkZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcApAQCAtNDY3LDcgKzQ2Nyw3IEBAIHZv
aWQgR3JhcGhpY3NMYXllckNBOjptb3ZlT3JDb3B5QW5pbWF0aW9ucyhNb3ZlT3JDb3B5IG9wZXJh
dGlvbiwgUGxhdGZvcm1DQUxheWVyCiAgICAgLy8gTG9vayBmb3IgcnVubmluZyBhbmltYXRpb25z
IGFmZmVjdGluZyB0aGlzIHByb3BlcnR5LgogICAgIEFuaW1hdGlvbnNNYXA6OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IG1fcnVubmluZ0FuaW1hdGlvbnMuZW5kKCk7CiAgICAgZm9yIChBbmltYXRpb25z
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fcnVubmluZ0FuaW1hdGlvbnMuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IFZlY3RvcjxMYXllclByb3BlcnR5QW5pbWF0
aW9uPiYgcHJvcGVydHlBbmltYXRpb25zID0gaXQtPnNlY29uZDsKKyAgICAgICAgY29uc3QgVmVj
dG9yPExheWVyUHJvcGVydHlBbmltYXRpb24+JiBwcm9wZXJ0eUFuaW1hdGlvbnMgPSBpdC0+dmFs
dWU7CiAgICAgICAgIHNpemVfdCBudW1BbmltYXRpb25zID0gcHJvcGVydHlBbmltYXRpb25zLnNp
emUoKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1BbmltYXRpb25zOyArK2kp
IHsKICAgICAgICAgICAgIGNvbnN0IExheWVyUHJvcGVydHlBbmltYXRpb24mIGN1cnJBbmltYXRp
b24gPSBwcm9wZXJ0eUFuaW1hdGlvbnNbaV07CkBAIC02OTQsNyArNjk0LDcgQEAgdm9pZCBHcmFw
aGljc0xheWVyQ0E6OnBhdXNlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwg
ZG91YmxlIHRpbWVPZmYKIAogICAgIEFuaW1hdGlvbnNUb1Byb2Nlc3NNYXA6Oml0ZXJhdG9yIGl0
ID0gbV9hbmltYXRpb25zVG9Qcm9jZXNzLmZpbmQoYW5pbWF0aW9uTmFtZSk7CiAgICAgaWYgKGl0
ICE9IG1fYW5pbWF0aW9uc1RvUHJvY2Vzcy5lbmQoKSkgewotICAgICAgICBBbmltYXRpb25Qcm9j
ZXNzaW5nQWN0aW9uJiBwcm9jZXNzaW5nSW5mbyA9IGl0LT5zZWNvbmQ7CisgICAgICAgIEFuaW1h
dGlvblByb2Nlc3NpbmdBY3Rpb24mIHByb2Nlc3NpbmdJbmZvID0gaXQtPnZhbHVlOwogICAgICAg
ICAvLyBJZiBhbiBhbmltYXRpb24gaXMgc2NoZWR1bGVkIHRvIGJlIHJlbW92ZWQsIGRvbid0IGNo
YW5nZSB0aGUgcmVtb3ZlIHRvIGEgcGF1c2UuCiAgICAgICAgIGlmIChwcm9jZXNzaW5nSW5mby5h
Y3Rpb24gIT0gUmVtb3ZlKQogICAgICAgICAgICAgcHJvY2Vzc2luZ0luZm8uYWN0aW9uID0gUGF1
c2U7CkBAIC04MjksNyArODI5LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OmxheWVyRGlkRGlz
cGxheShQbGF0Zm9ybUxheWVyKiBsYXllcikKICAgICBpZiAobGF5ZXJDbG9uZU1hcCkgewogICAg
ICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7
CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1h
cC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBQbGF0Zm9ybUNBTGF5
ZXIqIGN1cnJDbG9uZSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBQbGF0Zm9ybUNB
TGF5ZXIqIGN1cnJDbG9uZSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGlmICghY3Vy
ckNsb25lKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCkBAIC0xMTcxLDEwICsxMTcxLDEw
IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVHZW9tZXRyeShmbG9hdCBwYWdlU2NhbGVG
YWN0b3IsIGNvbnN0IEZsb2F0UG9pbnQmIHBvCiAgICAgICAgIGlmIChMYXllck1hcCogbGF5ZXJD
bG9uZU1hcCA9IG1fc3RydWN0dXJhbExheWVyQ2xvbmVzLmdldCgpKSB7CiAgICAgICAgICAgICBM
YXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAg
ICAgICAgICBmb3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGxheWVyQ2xvbmVNYXAt
PmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgICAgIFBsYXRmb3JtQ0FM
YXllciogY2xvbmUgPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgICAgIFBsYXRmb3Jt
Q0FMYXllciogY2xvbmUgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICAgICAgRmxvYXRQ
b2ludCBjbG9uZVBvc2l0aW9uID0gbGF5ZXJQb3NpdGlvbjsKIAotICAgICAgICAgICAgICAgIGlm
IChtX3JlcGxpY2FMYXllciAmJiBpc1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQtPmZpcnN0KSkgewor
ICAgICAgICAgICAgICAgIGlmIChtX3JlcGxpY2FMYXllciAmJiBpc1JlcGxpY2F0ZWRSb290Q2xv
bmUoaXQtPmtleSkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gTWFpbnRhaW4gdGhlIHNwZWNp
YWwtY2FzZSBwb3NpdGlvbiBmb3IgdGhlIHJvb3Qgb2YgYSBjbG9uZSBzdWJ0cmVlLAogICAgICAg
ICAgICAgICAgICAgICAvLyB3aGljaCB3ZSBzZXQgdXAgaW4gcmVwbGljYXRlZExheWVyUm9vdCgp
LgogICAgICAgICAgICAgICAgICAgICBjbG9uZVBvc2l0aW9uID0gcG9zaXRpb25Gb3JDbG9uZVJv
b3RMYXllcigpOwpAQCAtMTE5OCwxMCArMTE5OCwxMCBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6
dXBkYXRlR2VvbWV0cnkoZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBjb25zdCBGbG9hdFBvaW50JiBw
bwogICAgIGlmIChMYXllck1hcCogbGF5ZXJDbG9uZU1hcCA9IG1fbGF5ZXJDbG9uZXMuZ2V0KCkp
IHsKICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxheWVyQ2xvbmVNYXAt
PmVuZCgpOwogICAgICAgICBmb3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGxheWVy
Q2xvbmVNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgUGxhdGZv
cm1DQUxheWVyKiBjbG9uZSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBQbGF0Zm9y
bUNBTGF5ZXIqIGNsb25lID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAgICAgRmxvYXRQb2lu
dCBjbG9uZVBvc2l0aW9uID0gYWRqdXN0ZWRQb3NpdGlvbjsKIAotICAgICAgICAgICAgaWYgKCFt
X3N0cnVjdHVyYWxMYXllciAmJiBtX3JlcGxpY2FMYXllciAmJiBpc1JlcGxpY2F0ZWRSb290Q2xv
bmUoaXQtPmZpcnN0KSkgeworICAgICAgICAgICAgaWYgKCFtX3N0cnVjdHVyYWxMYXllciAmJiBt
X3JlcGxpY2FMYXllciAmJiBpc1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQtPmtleSkpIHsKICAgICAg
ICAgICAgICAgICAvLyBNYWludGFpbiB0aGUgc3BlY2lhbC1jYXNlIHBvc2l0aW9uIGZvciB0aGUg
cm9vdCBvZiBhIGNsb25lIHN1YnRyZWUsCiAgICAgICAgICAgICAgICAgLy8gd2hpY2ggd2Ugc2V0
IHVwIGluIHJlcGxpY2F0ZWRMYXllclJvb3QoKS4KICAgICAgICAgICAgICAgICBjbG9uZVBvc2l0
aW9uID0gcG9zaXRpb25Gb3JDbG9uZVJvb3RMYXllcigpOwpAQCAtMTIyMSw4ICsxMjIxLDggQEAg
dm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZVRyYW5zZm9ybSgpCiAgICAgaWYgKExheWVyTWFw
KiBsYXllckNsb25lTWFwID0gcHJpbWFyeUxheWVyQ2xvbmVzKCkpIHsKICAgICAgICAgTGF5ZXJN
YXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxheWVyQ2xvbmVNYXAtPmVuZCgpOwogICAgICAgICBm
b3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGxheWVyQ2xvbmVNYXAtPmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgUGxhdGZvcm1DQUxheWVyKiBjdXJyTGF5
ZXIgPSBpdC0+c2Vjb25kLmdldCgpOwotICAgICAgICAgICAgaWYgKG1fcmVwbGljYUxheWVyICYm
IGlzUmVwbGljYXRlZFJvb3RDbG9uZShpdC0+Zmlyc3QpKSB7CisgICAgICAgICAgICBQbGF0Zm9y
bUNBTGF5ZXIqIGN1cnJMYXllciA9IGl0LT52YWx1ZS5nZXQoKTsKKyAgICAgICAgICAgIGlmICht
X3JlcGxpY2FMYXllciAmJiBpc1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQtPmtleSkpIHsKICAgICAg
ICAgICAgICAgICAvLyBNYWludGFpbiB0aGUgc3BlY2lhbC1jYXNlIHRyYW5zZm9ybSBmb3IgdGhl
IHJvb3Qgb2YgYSBjbG9uZSBzdWJ0cmVlLAogICAgICAgICAgICAgICAgIC8vIHdoaWNoIHdlIHNl
dCB1cCBpbiByZXBsaWNhdGVkTGF5ZXJSb290KCkuCiAgICAgICAgICAgICAgICAgY3VyckxheWVy
LT5zZXRUcmFuc2Zvcm0oVHJhbnNmb3JtYXRpb25NYXRyaXgoKSk7CkBAIC0xMjM5LDcgKzEyMzks
NyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlQ2hpbGRyZW5UcmFuc2Zvcm0oKQogICAg
IGlmIChMYXllck1hcCogbGF5ZXJDbG9uZU1hcCA9IHByaW1hcnlMYXllckNsb25lcygpKSB7CiAg
ICAgICAgIExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBsYXllckNsb25lTWFwLT5lbmQo
KTsKICAgICAgICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXllckNsb25l
TWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBpdC0+c2Vjb25kLT5z
ZXRTdWJsYXllclRyYW5zZm9ybShtX2NoaWxkcmVuVHJhbnNmb3JtKTsKKyAgICAgICAgICAgIGl0
LT52YWx1ZS0+c2V0U3VibGF5ZXJUcmFuc2Zvcm0obV9jaGlsZHJlblRyYW5zZm9ybSk7CiAgICAg
fQogfQogCkBAIC0xMjUwLDcgKzEyNTAsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRl
TWFza3NUb0JvdW5kcygpCiAgICAgaWYgKExheWVyTWFwKiBsYXllckNsb25lTWFwID0gbV9sYXll
ckNsb25lcy5nZXQoKSkgewogICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
bGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAg
ICAgICAgaXQtPnNlY29uZC0+c2V0TWFza3NUb0JvdW5kcyhtX21hc2tzVG9Cb3VuZHMpOworICAg
ICAgICAgICAgaXQtPnZhbHVlLT5zZXRNYXNrc1RvQm91bmRzKG1fbWFza3NUb0JvdW5kcyk7CiAg
ICAgfQogCiAgICAgdXBkYXRlRGVidWdJbmRpY2F0b3JzKCk7CkBAIC0xMjY4LDcgKzEyNjgsNyBA
QCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlQ29udGVudHNWaXNpYmlsaXR5KCkKICAgICAg
ICAgaWYgKExheWVyTWFwKiBsYXllckNsb25lTWFwID0gbV9sYXllckNsb25lcy5nZXQoKSkgewog
ICAgICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxheWVyQ2xvbmVNYXAt
PmVuZCgpOwogICAgICAgICAgICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBs
YXllckNsb25lTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICAgICAg
aXQtPnNlY29uZC0+c2V0Q29udGVudHMoMCk7CisgICAgICAgICAgICAgICAgaXQtPnZhbHVlLT5z
ZXRDb250ZW50cygwKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTEyODAsNyArMTI4MCw3IEBA
IHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVDb250ZW50c09wYXF1ZSgpCiAgICAgaWYgKExh
eWVyTWFwKiBsYXllckNsb25lTWFwID0gbV9sYXllckNsb25lcy5nZXQoKSkgewogICAgICAgICBM
YXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAg
ICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0T3BhcXVl
KG1fY29udGVudHNPcGFxdWUpOworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRPcGFxdWUobV9j
b250ZW50c09wYXF1ZSk7CiAgICAgfQogfQogCkBAIC0xMjkyLDcgKzEyOTIsNyBAQCB2b2lkIEdy
YXBoaWNzTGF5ZXJDQTo6dXBkYXRlQmFja2ZhY2VWaXNpYmlsaXR5KCkKICAgICAgICAgaWYgKExh
eWVyTWFwKiBsYXllckNsb25lTWFwID0gbV9zdHJ1Y3R1cmFsTGF5ZXJDbG9uZXMuZ2V0KCkpIHsK
ICAgICAgICAgICAgIExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBsYXllckNsb25lTWFw
LT5lbmQoKTsKICAgICAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgICAg
IGl0LT5zZWNvbmQtPnNldERvdWJsZVNpZGVkKG1fYmFja2ZhY2VWaXNpYmlsaXR5KTsKKyAgICAg
ICAgICAgICAgICBpdC0+dmFsdWUtPnNldERvdWJsZVNpZGVkKG1fYmFja2ZhY2VWaXNpYmlsaXR5
KTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTMwMSw3ICsxMzAxLDcgQEAgdm9pZCBHcmFwaGlj
c0xheWVyQ0E6OnVwZGF0ZUJhY2tmYWNlVmlzaWJpbGl0eSgpCiAgICAgaWYgKExheWVyTWFwKiBs
YXllckNsb25lTWFwID0gbV9sYXllckNsb25lcy5nZXQoKSkgewogICAgICAgICBMYXllck1hcDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAo
TGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KQotICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0RG91YmxlU2lkZWQobV9i
YWNrZmFjZVZpc2liaWxpdHkpOworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXREb3VibGVTaWRl
ZChtX2JhY2tmYWNlVmlzaWJpbGl0eSk7CiAgICAgfQogfQogCkBAIC0xMzEzLDEwICsxMzEzLDEw
IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVGaWx0ZXJzKCkKICAgICBpZiAoTGF5ZXJN
YXAqIGxheWVyQ2xvbmVNYXAgPSBwcmltYXJ5TGF5ZXJDbG9uZXMoKSkgewogICAgICAgICBMYXll
ck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAgICAg
IGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAobV9yZXBsaWNhTGF5ZXIgJiYg
aXNSZXBsaWNhdGVkUm9vdENsb25lKGl0LT5maXJzdCkpCisgICAgICAgICAgICBpZiAobV9yZXBs
aWNhTGF5ZXIgJiYgaXNSZXBsaWNhdGVkUm9vdENsb25lKGl0LT5rZXkpKQogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRGaWx0ZXJzKG1fZmls
dGVycyk7CisgICAgICAgICAgICBpdC0+dmFsdWUtPnNldEZpbHRlcnMobV9maWx0ZXJzKTsKICAg
ICAgICAgfQogICAgIH0KIH0KQEAgLTE0MDQsNyArMTQwNCw3IEBAIHZvaWQgR3JhcGhpY3NMYXll
ckNBOjplbnN1cmVTdHJ1Y3R1cmFsTGF5ZXIoU3RydWN0dXJhbExheWVyUHVycG9zZSBwdXJwb3Nl
LCBmbG9hCiAgICAgaWYgKG1fbGF5ZXJDbG9uZXMpIHsKICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IG1fbGF5ZXJDbG9uZXMtPmVuZCgpOwogICAgICAgICBmb3IgKExheWVy
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fbGF5ZXJDbG9uZXMtPmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewotICAgICAgICAgICAgUGxhdGZvcm1DQUxheWVyKiBjdXJyTGF5ZXIgPSBpdC0+
c2Vjb25kLmdldCgpOworICAgICAgICAgICAgUGxhdGZvcm1DQUxheWVyKiBjdXJyTGF5ZXIgPSBp
dC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBjdXJyTGF5ZXItPnNldFBvc2l0aW9uKHBvaW50
KTsKICAgICAgICAgICAgIGN1cnJMYXllci0+c2V0QW5jaG9yUG9pbnQoYW5jaG9yUG9pbnQpOwog
ICAgICAgICAgICAgY3VyckxheWVyLT5zZXRUcmFuc2Zvcm0oVHJhbnNmb3JtYXRpb25NYXRyaXgo
KSk7CkBAIC0xNDQ5LDcgKzE0NDksNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlTGF5
ZXJEcmF3c0NvbnRlbnQoZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBjb25zdCBGbG9hdAogICAgICAg
ICBpZiAobV9sYXllckNsb25lcykgewogICAgICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IG1fbGF5ZXJDbG9uZXMtPmVuZCgpOwogICAgICAgICAgICAgZm9yIChMYXllck1h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2xheWVyQ2xvbmVzLT5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpCi0gICAgICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0Q29udGVudHMoMCk7CisgICAg
ICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRDb250ZW50cygwKTsKICAgICAgICAgfQogICAgIH0K
ICAgICB1cGRhdGVEZWJ1Z0luZGljYXRvcnMoKTsKQEAgLTE1MDIsNyArMTUwMiw3IEBAIHZvaWQg
R3JhcGhpY3NMYXllckNBOjp1cGRhdGVDb250ZW50c0ltYWdlKCkKICAgICAgICAgaWYgKG1fY29u
dGVudHNMYXllckNsb25lcykgewogICAgICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IG1fY29udGVudHNMYXllckNsb25lcy0+ZW5kKCk7CiAgICAgICAgICAgICBmb3IgKExh
eWVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fY29udGVudHNMYXllckNsb25lcy0+YmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNldENvbnRl
bnRzKG1fY29udGVudHNMYXllci0+Y29udGVudHMoKSk7CisgICAgICAgICAgICAgICAgaXQtPnZh
bHVlLT5zZXRDb250ZW50cyhtX2NvbnRlbnRzTGF5ZXItPmNvbnRlbnRzKCkpOwogICAgICAgICB9
CiAgICAgICAgIAogICAgICAgICB1cGRhdGVDb250ZW50c1JlY3QoKTsKQEAgLTE1NDYsOCArMTU0
Niw4IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVDb250ZW50c1JlY3QoKQogICAgIGlm
IChtX2NvbnRlbnRzTGF5ZXJDbG9uZXMpIHsKICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IG1fY29udGVudHNMYXllckNsb25lcy0+ZW5kKCk7CiAgICAgICAgIGZvciAoTGF5
ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9jb250ZW50c0xheWVyQ2xvbmVzLT5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNldFBvc2l0aW9u
KHBvaW50KTsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNldEJvdW5kcyhyZWN0KTsKKyAgICAg
ICAgICAgIGl0LT52YWx1ZS0+c2V0UG9zaXRpb24ocG9pbnQpOworICAgICAgICAgICAgaXQtPnZh
bHVlLT5zZXRCb3VuZHMocmVjdCk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0xNTYyLDggKzE1
NjIsOCBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlTWFza0xheWVyKCkKICAgICBpZiAo
TGF5ZXJNYXAqIGxheWVyQ2xvbmVNYXAgPSBtX2xheWVyQ2xvbmVzLmdldCgpKSB7CiAgICAgICAg
IExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBsYXllckNsb25lTWFwLT5lbmQoKTsKICAg
ICAgICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXllckNsb25lTWFwLT5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsgICAgICAgICAgICAKLSAgICAgICAgICAgIFBsYXRm
b3JtQ0FMYXllciogbWFza0Nsb25lID0gbWFza0xheWVyQ2xvbmVNYXAgPyBtYXNrTGF5ZXJDbG9u
ZU1hcC0+Z2V0KGl0LT5maXJzdCkuZ2V0KCkgOiAwOwotICAgICAgICAgICAgaXQtPnNlY29uZC0+
c2V0TWFzayhtYXNrQ2xvbmUpOworICAgICAgICAgICAgUGxhdGZvcm1DQUxheWVyKiBtYXNrQ2xv
bmUgPSBtYXNrTGF5ZXJDbG9uZU1hcCA/IG1hc2tMYXllckNsb25lTWFwLT5nZXQoaXQtPmtleSku
Z2V0KCkgOiAwOworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRNYXNrKG1hc2tDbG9uZSk7CiAg
ICAgICAgIH0KICAgICB9CiB9CkBAIC0xNjI3LDEzICsxNjI3LDEzIEBAIHZvaWQgR3JhcGhpY3NM
YXllckNBOjp1cGRhdGVMYXllckFuaW1hdGlvbnMoKQogICAgIGlmIChtX2FuaW1hdGlvbnNUb1By
b2Nlc3Muc2l6ZSgpKSB7CiAgICAgICAgIEFuaW1hdGlvbnNUb1Byb2Nlc3NNYXA6OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IG1fYW5pbWF0aW9uc1RvUHJvY2Vzcy5lbmQoKTsKICAgICAgICAgZm9yIChB
bmltYXRpb25zVG9Qcm9jZXNzTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fYW5pbWF0aW9uc1Rv
UHJvY2Vzcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGNvbnN0IFN0
cmluZyYgY3VyckFuaW1hdGlvbk5hbWUgPSBpdC0+Zmlyc3Q7CisgICAgICAgICAgICBjb25zdCBT
dHJpbmcmIGN1cnJBbmltYXRpb25OYW1lID0gaXQtPmtleTsKICAgICAgICAgICAgIEFuaW1hdGlv
bnNNYXA6Oml0ZXJhdG9yIGFuaW1hdGlvbkl0ID0gbV9ydW5uaW5nQW5pbWF0aW9ucy5maW5kKGN1
cnJBbmltYXRpb25OYW1lKTsKICAgICAgICAgICAgIGlmIChhbmltYXRpb25JdCA9PSBtX3J1bm5p
bmdBbmltYXRpb25zLmVuZCgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAg
ICAgICBjb25zdCBBbmltYXRpb25Qcm9jZXNzaW5nQWN0aW9uJiBwcm9jZXNzaW5nSW5mbyA9IGl0
LT5zZWNvbmQ7Ci0gICAgICAgICAgICBjb25zdCBWZWN0b3I8TGF5ZXJQcm9wZXJ0eUFuaW1hdGlv
bj4mIGFuaW1hdGlvbnMgPSBhbmltYXRpb25JdC0+c2Vjb25kOworICAgICAgICAgICAgY29uc3Qg
QW5pbWF0aW9uUHJvY2Vzc2luZ0FjdGlvbiYgcHJvY2Vzc2luZ0luZm8gPSBpdC0+dmFsdWU7Cisg
ICAgICAgICAgICBjb25zdCBWZWN0b3I8TGF5ZXJQcm9wZXJ0eUFuaW1hdGlvbj4mIGFuaW1hdGlv
bnMgPSBhbmltYXRpb25JdC0+dmFsdWU7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgICAgICBjb25zdCBMYXll
clByb3BlcnR5QW5pbWF0aW9uJiBjdXJyQW5pbWF0aW9uID0gYW5pbWF0aW9uc1tpXTsKICAgICAg
ICAgICAgICAgICBzd2l0Y2ggKHByb2Nlc3NpbmdJbmZvLmFjdGlvbikgewpAQCAtMTY2NSw3ICsx
NjY1LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUxheWVyQW5pbWF0aW9ucygpCiAg
ICAgICAgICAgICAgICAgYW5pbWF0aW9ucy5hcHBlbmQocGVuZGluZ0FuaW1hdGlvbik7CiAgICAg
ICAgICAgICAgICAgbV9ydW5uaW5nQW5pbWF0aW9ucy5hZGQocGVuZGluZ0FuaW1hdGlvbi5tX25h
bWUsIGFuaW1hdGlvbnMpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBW
ZWN0b3I8TGF5ZXJQcm9wZXJ0eUFuaW1hdGlvbj4mIGFuaW1hdGlvbnMgPSBpdC0+c2Vjb25kOwor
ICAgICAgICAgICAgICAgIFZlY3RvcjxMYXllclByb3BlcnR5QW5pbWF0aW9uPiYgYW5pbWF0aW9u
cyA9IGl0LT52YWx1ZTsKICAgICAgICAgICAgICAgICBhbmltYXRpb25zLmFwcGVuZChwZW5kaW5n
QW5pbWF0aW9uKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTY5MCwxMSArMTY5MCwx
MSBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c2V0QW5pbWF0aW9uT25MYXllcihQbGF0Zm9ybUNB
QW5pbWF0aW9uKiBjYUFuaW0sIEFuaW1hdGVkUAogICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7CiAgICAgICAgICAgICAvLyBTa2lwIGltbWVkaWF0ZSByZXBsaWNhcywgc2luY2UgdGhl
eSBtb3ZlIHdpdGggdGhlIG9yaWdpbmFsLgotICAgICAgICAgICAgaWYgKG1fcmVwbGljYUxheWVy
ICYmIGlzUmVwbGljYXRlZFJvb3RDbG9uZShpdC0+Zmlyc3QpKQorICAgICAgICAgICAgaWYgKG1f
cmVwbGljYUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9uZShpdC0+a2V5KSkKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgaXQtPnNlY29uZC0+cmVtb3ZlQW5pbWF0
aW9uRm9yS2V5KGFuaW1hdGlvbklEKTsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPmFkZEFuaW1h
dGlvbkZvcktleShhbmltYXRpb25JRCwgY2FBbmltKTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+
cmVtb3ZlQW5pbWF0aW9uRm9yS2V5KGFuaW1hdGlvbklEKTsKKyAgICAgICAgICAgIGl0LT52YWx1
ZS0+YWRkQW5pbWF0aW9uRm9yS2V5KGFuaW1hdGlvbklELCBjYUFuaW0pOwogICAgICAgICB9CiAg
ICAgfQogfQpAQCAtMTcyOSwxMCArMTcyOSwxMCBAQCBib29sIEdyYXBoaWNzTGF5ZXJDQTo6cmVt
b3ZlQ0FBbmltYXRpb25Gcm9tTGF5ZXIoQW5pbWF0ZWRQcm9wZXJ0eUlEIHByb3BlcnR5LCBjbwog
ICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5k
KCk7CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9u
ZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICAvLyBTa2lwIGlt
bWVkaWF0ZSByZXBsaWNhcywgc2luY2UgdGhleSBtb3ZlIHdpdGggdGhlIG9yaWdpbmFsLgotICAg
ICAgICAgICAgaWYgKG1fcmVwbGljYUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9uZShpdC0+
Zmlyc3QpKQorICAgICAgICAgICAgaWYgKG1fcmVwbGljYUxheWVyICYmIGlzUmVwbGljYXRlZFJv
b3RDbG9uZShpdC0+a2V5KSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAg
ICAgaXQtPnNlY29uZCAtPnJlbW92ZUFuaW1hdGlvbkZvcktleShhbmltYXRpb25JRCk7CisgICAg
ICAgICAgICBpdC0+dmFsdWUgLT5yZW1vdmVBbmltYXRpb25Gb3JLZXkoYW5pbWF0aW9uSUQpOwog
ICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiB0cnVlOwpAQCAtMTc2MSw5ICsxNzYxLDkgQEAg
dm9pZCBHcmFwaGljc0xheWVyQ0E6OnBhdXNlQ0FBbmltYXRpb25PbkxheWVyKEFuaW1hdGVkUHJv
cGVydHlJRCBwcm9wZXJ0eSwgY29uc3QKICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IGxheWVyQ2xvbmVNYXAtPmVuZCgpOwogICAgICAgICBmb3IgKExheWVyTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IGxheWVyQ2xvbmVNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewogICAgICAgICAgICAgLy8gU2tpcCBpbW1lZGlhdGUgcmVwbGljYXMsIHNpbmNlIHRoZXkgbW92
ZSB3aXRoIHRoZSBvcmlnaW5hbC4KLSAgICAgICAgICAgIGlmIChtX3JlcGxpY2FMYXllciAmJiBp
c1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQtPmZpcnN0KSkKKyAgICAgICAgICAgIGlmIChtX3JlcGxp
Y2FMYXllciAmJiBpc1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQtPmtleSkpCiAgICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLT5hZGRBbmltYXRpb25Gb3JLZXko
YW5pbWF0aW9uSUQsIG5ld0FuaW0uZ2V0KCkpOworICAgICAgICAgICAgaXQtPnZhbHVlLT5hZGRB
bmltYXRpb25Gb3JLZXkoYW5pbWF0aW9uSUQsIG5ld0FuaW0uZ2V0KCkpOwogICAgICAgICB9CiAg
ICAgfQogfQpAQCAtMjI2Nyw4ICsyMjY3LDggQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnN1c3Bl
bmRBbmltYXRpb25zKGRvdWJsZSB0aW1lKQogICAgIGlmIChMYXllck1hcCogbGF5ZXJDbG9uZU1h
cCA9IHByaW1hcnlMYXllckNsb25lcygpKSB7CiAgICAgICAgIExheWVyTWFwOjpjb25zdF9pdGVy
YXRvciBlbmQgPSBsYXllckNsb25lTWFwLT5lbmQoKTsKICAgICAgICAgZm9yIChMYXllck1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXllckNsb25lTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNldFNwZWVkKDApOwotICAgICAgICAgICAg
aXQtPnNlY29uZC0+c2V0VGltZU9mZnNldCh0KTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+c2V0
U3BlZWQoMCk7CisgICAgICAgICAgICBpdC0+dmFsdWUtPnNldFRpbWVPZmZzZXQodCk7CiAgICAg
ICAgIH0KICAgICB9CiB9CkBAIC0yMjgyLDggKzIyODIsOCBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJD
QTo6cmVzdW1lQW5pbWF0aW9ucygpCiAgICAgaWYgKExheWVyTWFwKiBsYXllckNsb25lTWFwID0g
cHJpbWFyeUxheWVyQ2xvbmVzKCkpIHsKICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IGxheWVyQ2xvbmVNYXAtPmVuZCgpOwogICAgICAgICBmb3IgKExheWVyTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IGxheWVyQ2xvbmVNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewotICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0U3BlZWQoMSk7Ci0gICAgICAgICAgICBpdC0+
c2Vjb25kLT5zZXRUaW1lT2Zmc2V0KDApOworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRTcGVl
ZCgxKTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+c2V0VGltZU9mZnNldCgwKTsKICAgICAgICAg
fQogICAgIH0KIH0KQEAgLTI0OTMsMTMgKzI0OTMsMTMgQEAgUGFzc1JlZlB0cjxQbGF0Zm9ybUNB
TGF5ZXI+IEdyYXBoaWNzTGF5ZXJDQTo6ZmluZE9yTWFrZUNsb25lKENsb25lSUQgY2xvbmVJRCwg
UGwKICAgICBMYXllck1hcDo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IGNsb25lcy0+YWRkKGNsb25l
SUQsIGR1bW15KTsKICAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5KSB7CiAgICAgICAgIC8v
IFZhbHVlIHdhcyBub3QgYWRkZWQsIHNvIGl0IGV4aXN0cyBhbHJlYWR5LgotICAgICAgICByZXN1
bHRMYXllciA9IGFkZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLmdldCgpOworICAgICAgICByZXN1
bHRMYXllciA9IGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7CiAgICAgfSBlbHNlIHsK
ICAgICAgICAgcmVzdWx0TGF5ZXIgPSBjbG9uZUxheWVyKHNvdXJjZUxheWVyLCBjbG9uZUxldmVs
KTsKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgIHJlc3VsdExheWVyLT5zZXROYW1lKFN0cmluZzo6
Zm9ybWF0KCJDbG9uZSAlZCBvZiBsYXllciAlcCIsIGNsb25lSURbMFVdLCBzb3VyY2VMYXllci0+
cGxhdGZvcm1MYXllcigpKSk7CiAjZW5kaWYKLSAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT5z
ZWNvbmQgPSByZXN1bHRMYXllcjsKKyAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9
IHJlc3VsdExheWVyOwogICAgIH0KIAogICAgIHJldHVybiByZXN1bHRMYXllcjsKQEAgLTI2OTEs
OSArMjY5MSw5IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpzZXRPcGFjaXR5SW50ZXJuYWwoZmxv
YXQgYWNjdW11bGF0ZWRPcGFjaXR5KQogICAgIGlmIChsYXllckNsb25lTWFwKSB7CiAgICAgICAg
IExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBsYXllckNsb25lTWFwLT5lbmQoKTsKICAg
ICAgICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXllckNsb25lTWFwLT5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGlmIChtX3JlcGxpY2FMYXll
ciAmJiBpc1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQtPmZpcnN0KSkKKyAgICAgICAgICAgIGlmICht
X3JlcGxpY2FMYXllciAmJiBpc1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQtPmtleSkpCiAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRPcGFjaXR5KG1f
b3BhY2l0eSk7CisgICAgICAgICAgICBpdC0+dmFsdWUtPnNldE9wYWNpdHkobV9vcGFjaXR5KTsK
ICAgICAgICAgfQogICAgIH0KIH0KQEAgLTI3MDUsMTAgKzI3MDUsMTAgQEAgdm9pZCBHcmFwaGlj
c0xheWVyQ0E6OnVwZGF0ZU9wYWNpdHlPbkxheWVyKCkKICAgICBpZiAoTGF5ZXJNYXAqIGxheWVy
Q2xvbmVNYXAgPSBwcmltYXJ5TGF5ZXJDbG9uZXMoKSkgewogICAgICAgICBMYXllck1hcDo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAoTGF5
ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAobV9yZXBsaWNhTGF5ZXIgJiYgaXNSZXBsaWNh
dGVkUm9vdENsb25lKGl0LT5maXJzdCkpCisgICAgICAgICAgICBpZiAobV9yZXBsaWNhTGF5ZXIg
JiYgaXNSZXBsaWNhdGVkUm9vdENsb25lKGl0LT5rZXkpKQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogCi0gICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRPcGFjaXR5KG1fb3BhY2l0eSk7Cisg
ICAgICAgICAgICBpdC0+dmFsdWUtPnNldE9wYWNpdHkobV9vcGFjaXR5KTsKICAgICAgICAgfQog
ICAgICAgICAKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYS9tYWMvVGlsZUNhY2hlLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2EvbWFjL1RpbGVDYWNoZS5tbQppbmRleCAwOTdkZmJmYzZjMDViNTdmYmU0YmQyNzU5NWU4
NWJjMDUwYzlhN2FmLi5lOWQ5Y2U0MGU4Njc1MTY0MDRjYjg3ZDg1MmVmMjdkMGU1NDk0Y2JjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvVGlsZUNh
Y2hlLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9UaWxl
Q2FjaGUubW0KQEAgLTE5MSw5ICsxOTEsOSBAQCB2b2lkIFRpbGVDYWNoZTo6c2V0U2NhbGUoQ0dG
bG9hdCBzY2FsZSkKICAgICByZXZhbGlkYXRlVGlsZXMoKTsKIAogICAgIGZvciAoVGlsZU1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCksIGVuZCA9IG1fdGlsZXMuZW5kKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBbaXQtPnNlY29uZC5nZXQoKSBzZXRDb250ZW50
c1NjYWxlOmRldmljZVNjYWxlRmFjdG9yXTsKKyAgICAgICAgW2l0LT52YWx1ZS5nZXQoKSBzZXRD
b250ZW50c1NjYWxlOmRldmljZVNjYWxlRmFjdG9yXTsKIAotICAgICAgICBJbnRSZWN0IHRpbGVS
ZWN0ID0gcmVjdEZvclRpbGVJbmRleChpdC0+Zmlyc3QpOworICAgICAgICBJbnRSZWN0IHRpbGVS
ZWN0ID0gcmVjdEZvclRpbGVJbmRleChpdC0+a2V5KTsKICAgICAgICAgRmxvYXRSZWN0IHNjYWxl
ZFRpbGVSZWN0ID0gdGlsZVJlY3Q7CiAKICAgICAgICAgc2NhbGVkVGlsZVJlY3Quc2NhbGUoMSAv
IG1fc2NhbGUpOwpAQCAtMjEzLDcgKzIxMyw3IEBAIHZvaWQgVGlsZUNhY2hlOjpzZXRBY2NlbGVy
YXRlc0RyYXdpbmcoYm9vbCBhY2NlbGVyYXRlc0RyYXdpbmcpCiAgICAgbV9hY2NlbGVyYXRlc0Ry
YXdpbmcgPSBhY2NlbGVyYXRlc0RyYXdpbmc7CiAKICAgICBmb3IgKFRpbGVNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpLCBlbmQgPSBtX3RpbGVzLmVuZCgpOyBpdCAhPSBl
bmQ7ICsraXQpCi0gICAgICAgIFtpdC0+c2Vjb25kLmdldCgpIHNldEFjY2VsZXJhdGVzRHJhd2lu
ZzptX2FjY2VsZXJhdGVzRHJhd2luZ107CisgICAgICAgIFtpdC0+dmFsdWUuZ2V0KCkgc2V0QWNj
ZWxlcmF0ZXNEcmF3aW5nOm1fYWNjZWxlcmF0ZXNEcmF3aW5nXTsKICNlbHNlCiAgICAgVU5VU0VE
X1BBUkFNKGFjY2VsZXJhdGVzRHJhd2luZyk7CiAjZW5kaWYKQEAgLTI0OSw3ICsyNDksNyBAQCB2
b2lkIFRpbGVDYWNoZTo6c2V0VGlsZURlYnVnQm9yZGVyV2lkdGgoZmxvYXQgYm9yZGVyV2lkdGgp
CiAKICAgICBtX3RpbGVEZWJ1Z0JvcmRlcldpZHRoID0gYm9yZGVyV2lkdGg7CiAgICAgZm9yIChU
aWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKSwgZW5kID0gbV90aWxl
cy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBbaXQtPnNlY29uZC5nZXQoKSBzZXRC
b3JkZXJXaWR0aDptX3RpbGVEZWJ1Z0JvcmRlcldpZHRoXTsKKyAgICAgICAgW2l0LT52YWx1ZS5n
ZXQoKSBzZXRCb3JkZXJXaWR0aDptX3RpbGVEZWJ1Z0JvcmRlcldpZHRoXTsKIH0KIAogdm9pZCBU
aWxlQ2FjaGU6OnNldFRpbGVEZWJ1Z0JvcmRlckNvbG9yKENHQ29sb3JSZWYgYm9yZGVyQ29sb3Ip
CkBAIC0yNTksNyArMjU5LDcgQEAgdm9pZCBUaWxlQ2FjaGU6OnNldFRpbGVEZWJ1Z0JvcmRlckNv
bG9yKENHQ29sb3JSZWYgYm9yZGVyQ29sb3IpCiAKICAgICBtX3RpbGVEZWJ1Z0JvcmRlckNvbG9y
ID0gYm9yZGVyQ29sb3I7CiAgICAgZm9yIChUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1f
dGlsZXMuYmVnaW4oKSwgZW5kID0gbV90aWxlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQotICAg
ICAgICBbaXQtPnNlY29uZC5nZXQoKSBzZXRCb3JkZXJDb2xvcjptX3RpbGVEZWJ1Z0JvcmRlckNv
bG9yLmdldCgpXTsKKyAgICAgICAgW2l0LT52YWx1ZS5nZXQoKSBzZXRCb3JkZXJDb2xvcjptX3Rp
bGVEZWJ1Z0JvcmRlckNvbG9yLmdldCgpXTsKIH0KIAogSW50UmVjdCBUaWxlQ2FjaGU6OmJvdW5k
cygpIGNvbnN0CkBAIC0zMzQsOSArMzM0LDkgQEAgdm9pZCBUaWxlQ2FjaGU6OnJldmFsaWRhdGVU
aWxlcygpCiAgICAgVmVjdG9yPFRpbGVJbmRleD4gdGlsZXNUb1JlbW92ZTsKIAogICAgIGZvciAo
VGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCksIGVuZCA9IG1fdGlsZXMuZW5k
KCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBjb25zdCBUaWxlSW5kZXgmIHRpbGVJbmRl
eCA9IGl0LT5maXJzdDsKKyAgICAgICAgY29uc3QgVGlsZUluZGV4JiB0aWxlSW5kZXggPSBpdC0+
a2V5OwogCi0gICAgICAgIFdlYlRpbGVMYXllciogdGlsZUxheWVyID0gaXQtPnNlY29uZC5nZXQo
KTsKKyAgICAgICAgV2ViVGlsZUxheWVyKiB0aWxlTGF5ZXIgPSBpdC0+dmFsdWUuZ2V0KCk7CiAK
ICAgICAgICAgaWYgKCFyZWN0Rm9yVGlsZUluZGV4KHRpbGVJbmRleCkuaW50ZXJzZWN0cyh0aWxl
Q292ZXJhZ2VSZWN0KSkgewogICAgICAgICAgICAgLy8gUmVtb3ZlIHRoaXMgbGF5ZXIuCkBAIC0z
NjQsNyArMzY0LDcgQEAgdm9pZCBUaWxlQ2FjaGU6OnJldmFsaWRhdGVUaWxlcygpCiAgICAgICAg
ICAgICBUaWxlSW5kZXggdGlsZUluZGV4KHgsIHkpOwogCiAgICAgICAgICAgICBJbnRSZWN0IHRp
bGVSZWN0ID0gcmVjdEZvclRpbGVJbmRleCh0aWxlSW5kZXgpOwotICAgICAgICAgICAgUmV0YWlu
UHRyPFdlYlRpbGVMYXllcj4mIHRpbGVMYXllciA9IG1fdGlsZXMuYWRkKHRpbGVJbmRleCwgMCku
aXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgICAgIFJldGFpblB0cjxXZWJUaWxlTGF5ZXI+JiB0
aWxlTGF5ZXIgPSBtX3RpbGVzLmFkZCh0aWxlSW5kZXgsIDApLml0ZXJhdG9yLT52YWx1ZTsKICAg
ICAgICAgICAgIGlmICghdGlsZUxheWVyKSB7CiAgICAgICAgICAgICAgICAgdGlsZUxheWVyID0g
Y3JlYXRlVGlsZUxheWVyKHRpbGVSZWN0KTsKICAgICAgICAgICAgICAgICBbbV90aWxlQ29udGFp
bmVyTGF5ZXIuZ2V0KCkgYWRkU3VibGF5ZXI6dGlsZUxheWVyLmdldCgpXTsKQEAgLTM4Myw3ICsz
ODMsNyBAQCB2b2lkIFRpbGVDYWNoZTo6cmV2YWxpZGF0ZVRpbGVzKCkKIAogICAgIG1fdGlsZUNv
dmVyYWdlUmVjdCA9IEludFJlY3QoKTsKICAgICBmb3IgKFRpbGVNYXA6Oml0ZXJhdG9yIGl0ID0g
bV90aWxlcy5iZWdpbigpLCBlbmQgPSBtX3RpbGVzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
LSAgICAgICAgY29uc3QgVGlsZUluZGV4JiB0aWxlSW5kZXggPSBpdC0+Zmlyc3Q7CisgICAgICAg
IGNvbnN0IFRpbGVJbmRleCYgdGlsZUluZGV4ID0gaXQtPmtleTsKIAogICAgICAgICBtX3RpbGVD
b3ZlcmFnZVJlY3QudW5pdGUocmVjdEZvclRpbGVJbmRleCh0aWxlSW5kZXgpKTsKICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZv
cm1DQUxheWVyV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dp
bi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwCmluZGV4IDQ4YjIwZDBiOGJkMjQyYWI1NDliOGZlNDQy
ZGY0NGFiMzY3MmViODUuLjcwMTY4YjIxMDRkYjM2OWRhMDc1N2ExMTQ0NjIyMTExYmMzMDYxZjAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0
Zm9ybUNBTGF5ZXJXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwCkBAIC0xNjcsNyArMTY3LDcgQEAgdm9pZCBQ
bGF0Zm9ybUNBTGF5ZXI6OmFuaW1hdGlvblN0YXJ0ZWQoQ0ZUaW1lSW50ZXJ2YWwgYmVnaW5UaW1l
KQogCiAgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiA+Ojpj
b25zdF9pdGVyYXRvciBlbmQgPSBtX2FuaW1hdGlvbnMuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFw
PFN0cmluZywgUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+ID46OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV9hbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNl
Y29uZC0+c2V0QWN0dWFsU3RhcnRUaW1lSWZOZWVkZWQoY2FjZkJlZ2luVGltZSk7CisgICAgICAg
IGl0LT52YWx1ZS0+c2V0QWN0dWFsU3RhcnRUaW1lSWZOZWVkZWQoY2FjZkJlZ2luVGltZSk7CiAK
ICAgICBpZiAobV9vd25lcikKICAgICAgICAgbV9vd25lci0+cGxhdGZvcm1DQUxheWVyQW5pbWF0
aW9uU3RhcnRlZChiZWdpblRpbWUpOwpAQCAtMTc3LDggKzE3Nyw4IEBAIHN0YXRpYyB2b2lkIHJl
c3VibWl0QWxsQW5pbWF0aW9ucyhQbGF0Zm9ybUNBTGF5ZXIqIGxheWVyKQogewogICAgIEhhc2hN
YXA8U3RyaW5nLCBSZWZQdHI8UGxhdGZvcm1DQUFuaW1hdGlvbj4gPjo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gbGF5ZXItPmFuaW1hdGlvbnMoKS5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8U3RyaW5n
LCBSZWZQdHI8UGxhdGZvcm1DQUFuaW1hdGlvbj4gPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXll
ci0+YW5pbWF0aW9ucygpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBSZXRh
aW5QdHI8Q0ZTdHJpbmdSZWY+IHMoQWRvcHRDRiwgaXQtPmZpcnN0LmNyZWF0ZUNGU3RyaW5nKCkp
OwotICAgICAgICBDQUNGTGF5ZXJBZGRBbmltYXRpb24obGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSwg
cy5nZXQoKSwgaXQtPnNlY29uZC0+cGxhdGZvcm1BbmltYXRpb24oKSk7CisgICAgICAgIFJldGFp
blB0cjxDRlN0cmluZ1JlZj4gcyhBZG9wdENGLCBpdC0+a2V5LmNyZWF0ZUNGU3RyaW5nKCkpOwor
ICAgICAgICBDQUNGTGF5ZXJBZGRBbmltYXRpb24obGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSwgcy5n
ZXQoKSwgaXQtPnZhbHVlLT5wbGF0Zm9ybUFuaW1hdGlvbigpKTsKICAgICB9CiB9CiAKQEAgLTMy
OCw3ICszMjgsNyBAQCBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+IFBsYXRmb3JtQ0FM
YXllcjo6YW5pbWF0aW9uRm9yS2V5KGNvbnN0IFN0cmluZyYgawogICAgIGlmIChpdCA9PSBtX2Fu
aW1hdGlvbnMuZW5kKCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgcmV0dXJuIGl0LT5zZWNv
bmQ7CisgICAgcmV0dXJuIGl0LT52YWx1ZTsKIH0KIAogUGxhdGZvcm1DQUxheWVyKiBQbGF0Zm9y
bUNBTGF5ZXI6Om1hc2soKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENhY2hlQ2hyb21pdW1XaW4uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENhY2hlQ2hyb21pdW1XaW4uY3Bw
CmluZGV4IGQ0ZDU5MmUxYmVlMmRkMzMwYjQ2MzFhMzgxZjI0MjllODFmZDM4MTAuLmFmZmQyYWFj
ZmYwYTM0YzljYzdkZDRiZGNkOTY4YmQzZmI0YjI1YzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUNocm9taXVtV2luLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2FjaGVD
aHJvbWl1bVdpbi5jcHAKQEAgLTIyMiwxMCArMjIyLDEwIEBAIHN0YXRpYyBib29sIExvb2t1cEFs
dE5hbWUoY29uc3QgU3RyaW5nJiBuYW1lLCBTdHJpbmcmIGFsdE5hbWUpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIHN0YXRpYyBpbnQgc3lzdGVtQ3AgPSA6OkdldEFDUCgpOwotICAgIGlu
dCBmb250Q3AgPSBpdGVyLT5zZWNvbmQtPmNvZGVQYWdlOworICAgIGludCBmb250Q3AgPSBpdGVy
LT52YWx1ZS0+Y29kZVBhZ2U7CiAKICAgICBpZiAoKGlzQXNjaWkgJiYgc3lzdGVtQ3AgPT0gZm9u
dENwKSB8fCAoIWlzQXNjaWkgJiYgc3lzdGVtQ3AgIT0gZm9udENwKSkgewotICAgICAgICBhbHRO
YW1lID0gU3RyaW5nKGl0ZXItPnNlY29uZC0+bmFtZSk7CisgICAgICAgIGFsdE5hbWUgPSBTdHJp
bmcoaXRlci0+dmFsdWUtPm5hbWUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAg
LTI3Niw3ICsyNzYsNyBAQCBzdGF0aWMgYm9vbCBmb250Q29udGFpbnNDaGFyYWN0ZXIoY29uc3Qg
Rm9udFBsYXRmb3JtRGF0YSogZm9udERhdGEsCiAKICAgICBIYXNoTWFwPGNvbnN0IHdjaGFyX3Qq
LCBpY3U6OlVuaWNvZGVTZXQqPjo6aXRlcmF0b3IgaXQgPSBmb250Q21hcENhY2hlLT5maW5kKGZh
bWlseSk7CiAgICAgaWYgKGl0ICE9IGZvbnRDbWFwQ2FjaGUtPmVuZCgpKSAKLSAgICAgICAgcmV0
dXJuIGl0LT5zZWNvbmQtPmNvbnRhaW5zKGNoYXJhY3Rlcik7CisgICAgICAgIHJldHVybiBpdC0+
dmFsdWUtPmNvbnRhaW5zKGNoYXJhY3Rlcik7CiAgICAgCiAgICAgSEZPTlQgaGZvbnQgPSBmb250
RGF0YS0+aGZvbnQoKTsgCiAgICAgSFduZERDIGhkYygwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRVdGlsc0Nocm9taXVtV2luLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRVdGlsc0No
cm9taXVtV2luLmNwcAppbmRleCBjYzUyYzUyZWI3MDU3ODJkZTFmOTY4ZGM4MDNjNDVlNGYyYWUy
MjkyLi4yZmZhYmJiNzY4MmRlYThhMGUxZmM5ZmRhZWU5YzcxODA1YTQyYTA4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250VXRpbHNDaHJv
bWl1bVdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vRm9udFV0aWxzQ2hyb21pdW1XaW4uY3BwCkBAIC00MTUsNyArNDE1LDcgQEAgYm9vbCBnZXRE
ZXJpdmVkRm9udERhdGEoY29uc3QgVUNoYXIqIGZhbWlseSwKICAgICAgICAgLy8gY2hlY2sgaXQg
YWdhaW5zdCB3aGF0IHdlIGFjdHVhbGx5IHdhbnQgKGFzIGlzIGRvbmUgaW4KICAgICAgICAgLy8g
Rm9udENhY2hlV2luLmNwcCkKICAgICAgICAgRm9udERhdGFDYWNoZTo6QWRkUmVzdWx0IGVudHJ5
ID0gZm9udERhdGFDYWNoZS5hZGQoZm9udEtleSwgRm9udERhdGEoKSk7Ci0gICAgICAgIGRlcml2
ZWQgPSAmZW50cnkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgZGVyaXZlZCA9ICZlbnRyeS5p
dGVyYXRvci0+dmFsdWU7CiAgICAgICAgIGRlcml2ZWQtPmhmb250ID0gQ3JlYXRlRm9udEluZGly
ZWN0KGxvZ2ZvbnQpOwogICAgICAgICAvLyBHZXRBc2NlbnQgbWF5IHJldHVybiBrVW5kZWZpbmVk
QXNjZW50LCBidXQgd2Ugc3RpbGwgd2FudCB0bwogICAgICAgICAvLyBjYWNoZSBpdCBzbyB0aGF0
IHdlIHdvbid0IGhhdmUgdG8gY2FsbCBDcmVhdGVGb250SW5kaXJlY3Qgb25jZQpAQCAtNDIzLDcg
KzQyMyw3IEBAIGJvb2wgZ2V0RGVyaXZlZEZvbnREYXRhKGNvbnN0IFVDaGFyKiBmYW1pbHksCiAg
ICAgICAgIGRlcml2ZWQtPmFzY2VudCA9IGdldEFzY2VudChkZXJpdmVkLT5oZm9udCk7CiAgICAg
ICAgIGRlcml2ZWQtPnNwYWNlR2x5cGggPSBnZXRTcGFjZUdseXBoKGRlcml2ZWQtPmhmb250KTsK
ICAgICB9IGVsc2UgewotICAgICAgICBkZXJpdmVkID0gJml0ZXItPnNlY29uZDsKKyAgICAgICAg
ZGVyaXZlZCA9ICZpdGVyLT52YWx1ZTsKICAgICAgICAgLy8gTGFzdCB0aW1lLCBHZXRBc2NlbnQg
ZmFpbGVkIHNvIHRoYXQgb25seSBIRk9OVCB3YXMKICAgICAgICAgLy8gY2FjaGVkLiBUcnkgb25j
ZSBtb3JlIGFzc3VtaW5nIHRoYXQgVHJ5UHJlbG9hZEZvbnQKICAgICAgICAgLy8gd2FzIGNhbGxl
ZCBieSBhIGNhbGxlciBiZXR3ZWVuIGNhbGxzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJv
bWl1bS5jcHAKaW5kZXggZGIwYmExYzJjOWQyMjQ5MmNjNTI5YmZjMTJhNTJkZTkzNjBmZjRiNy4u
NGQ1ZWEwYjQ2NzE4YTM2MmUwYjY5YjJjN2VjZjVlNWJkNGUwODE1MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9t
aXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9H
cmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCkBAIC03NDAsNyArNzQwLDcgQEAgaW50IEdyYXBoaWNz
TGF5ZXJDaHJvbWl1bTo6bWFwQW5pbWF0aW9uTmFtZVRvSWQoY29uc3QgU3RyaW5nJiBhbmltYXRp
b25OYW1lKQogICAgIGlmICghbV9hbmltYXRpb25JZE1hcC5jb250YWlucyhhbmltYXRpb25OYW1l
KSkKICAgICAgICAgbV9hbmltYXRpb25JZE1hcC5hZGQoYW5pbWF0aW9uTmFtZSwgc19uZXh0QW5p
bWF0aW9uSWQrKyk7CiAKLSAgICByZXR1cm4gbV9hbmltYXRpb25JZE1hcC5maW5kKGFuaW1hdGlv
bk5hbWUpLT5zZWNvbmQ7CisgICAgcmV0dXJuIG1fYW5pbWF0aW9uSWRNYXAuZmluZChhbmltYXRp
b25OYW1lKS0+dmFsdWU7CiB9CiAKIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpub3RpZnlB
bmltYXRpb25TdGFydGVkKGRvdWJsZSBzdGFydFRpbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5jcHAK
aW5kZXggMGM2ZmUxNGY5YWQ2NWZjMDJmMmQ1ZTQ5ZWY1MjU0NTMyNDJmYTZmYi4uZjhhY2QyZDRk
MGFiZTYxYWU4ZmM4YjhlODQ5Mjk1YzdkMmRmOTQ1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmNw
cApAQCAtMTQ3LDcgKzE0Nyw3IEBAIHZvaWQgVGV4dHVyZU1hbmFnZXI6OnJlbGVhc2VUb2tlbihU
ZXh0dXJlVG9rZW4gdG9rZW4pCiB7CiAgICAgVGV4dHVyZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3Rl
eHR1cmVzLmZpbmQodG9rZW4pOwogICAgIGlmIChpdCAhPSBtX3RleHR1cmVzLmVuZCgpKQotICAg
ICAgICByZW1vdmVUZXh0dXJlKHRva2VuLCBpdC0+c2Vjb25kKTsKKyAgICAgICAgcmVtb3ZlVGV4
dHVyZSh0b2tlbiwgaXQtPnZhbHVlKTsKIH0KIAogYm9vbCBUZXh0dXJlTWFuYWdlcjo6aGFzVGV4
dHVyZShUZXh0dXJlVG9rZW4gdG9rZW4pCkBAIC0xNzUsMTMgKzE3NSwxMyBAQCB2b2lkIFRleHR1
cmVNYW5hZ2VyOjp1bnByb3RlY3RUZXh0dXJlKFRleHR1cmVUb2tlbiB0b2tlbikKIHsKICAgICBU
ZXh0dXJlTWFwOjppdGVyYXRvciBpdCA9IG1fdGV4dHVyZXMuZmluZCh0b2tlbik7CiAgICAgaWYg
KGl0ICE9IG1fdGV4dHVyZXMuZW5kKCkpCi0gICAgICAgIGl0LT5zZWNvbmQuaXNQcm90ZWN0ZWQg
PSBmYWxzZTsKKyAgICAgICAgaXQtPnZhbHVlLmlzUHJvdGVjdGVkID0gZmFsc2U7CiB9CiAKIHZv
aWQgVGV4dHVyZU1hbmFnZXI6OnVucHJvdGVjdEFsbFRleHR1cmVzKCkKIHsKICAgICBmb3IgKFRl
eHR1cmVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90ZXh0dXJlcy5iZWdpbigpOyBpdCAhPSBtX3RleHR1
cmVzLmVuZCgpOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLmlzUHJvdGVjdGVkID0gZmFsc2U7
CisgICAgICAgIGl0LT52YWx1ZS5pc1Byb3RlY3RlZCA9IGZhbHNlOwogfQogCiB2b2lkIFRleHR1
cmVNYW5hZ2VyOjpldmljdFRleHR1cmUoVGV4dHVyZVRva2VuIHRva2VuLCBUZXh0dXJlSW5mbyBp
bmZvKQpAQCAtMjYyLDcgKzI2Miw3IEBAIHVuc2lnbmVkIFRleHR1cmVNYW5hZ2VyOjphbGxvY2F0
ZVRleHR1cmUoVGV4dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yLCBUZXh0dXJlVG9rCiB7CiAgICAg
VGV4dHVyZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RleHR1cmVzLmZpbmQodG9rZW4pOwogICAgIEFT
U0VSVChpdCAhPSBtX3RleHR1cmVzLmVuZCgpKTsKLSAgICBUZXh0dXJlSW5mbyogaW5mbyA9ICZp
dC5nZXQoKS0+c2Vjb25kOworICAgIFRleHR1cmVJbmZvKiBpbmZvID0gJml0LmdldCgpLT52YWx1
ZTsKICAgICBBU1NFUlQoaW5mby0+aXNQcm90ZWN0ZWQpOwogCiAgICAgdW5zaWduZWQgdGV4dHVy
ZUlkID0gYWxsb2NhdG9yLT5jcmVhdGVUZXh0dXJlKGluZm8tPnNpemUsIGluZm8tPmZvcm1hdCk7
CkBAIC0yODAsOCArMjgwLDggQEAgYm9vbCBUZXh0dXJlTWFuYWdlcjo6cmVxdWVzdFRleHR1cmUo
VGV4dHVyZVRva2VuIHRva2VuLCBJbnRTaXplIHNpemUsIHVuc2lnbmVkIGYKIAogICAgIFRleHR1
cmVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90ZXh0dXJlcy5maW5kKHRva2VuKTsKICAgICBpZiAoaXQg
IT0gbV90ZXh0dXJlcy5lbmQoKSkgewotICAgICAgICBBU1NFUlQoaXQtPnNlY29uZC5zaXplICE9
IHNpemUgfHwgaXQtPnNlY29uZC5mb3JtYXQgIT0gZm9ybWF0KTsKLSAgICAgICAgcmVtb3ZlVGV4
dHVyZSh0b2tlbiwgaXQtPnNlY29uZCk7CisgICAgICAgIEFTU0VSVChpdC0+dmFsdWUuc2l6ZSAh
PSBzaXplIHx8IGl0LT52YWx1ZS5mb3JtYXQgIT0gZm9ybWF0KTsKKyAgICAgICAgcmVtb3ZlVGV4
dHVyZSh0b2tlbiwgaXQtPnZhbHVlKTsKICAgICB9CiAKICAgICBzaXplX3QgbWVtb3J5UmVxdWly
ZWRCeXRlcyA9IG1lbW9yeVVzZUJ5dGVzKHNpemUsIGZvcm1hdCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXll
ckNocm9taXVtLmNwcAppbmRleCAwMTBhNDMxOGM4M2FkYzg3OGU0YTdjMDcwYzNlMjk4ZThhOTEz
Y2UyLi5iNDc5YTdhN2VmMmI3MWU1ODAxMjQ5ODhhMzljOWUzM2MxODk3MGMxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hy
b21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTI2Nyw5ICsyNjcsOSBAQCB2b2lkIFRpbGVkTGF5
ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyhDQ0xheWVySW1wbCogbGF5ZXIpCiAgICAgVmVj
dG9yPFVwZGF0YWJsZVRpbGUqPiBpbnZhbGlkVGlsZXM7CiAKICAgICBmb3IgKENDTGF5ZXJUaWxp
bmdEYXRhOjpUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbV90aWxlci0+dGlsZXMoKS5i
ZWdpbigpOyBpdGVyICE9IG1fdGlsZXItPnRpbGVzKCkuZW5kKCk7ICsraXRlcikgewotICAgICAg
ICBpbnQgaSA9IGl0ZXItPmZpcnN0LmZpcnN0OwotICAgICAgICBpbnQgaiA9IGl0ZXItPmZpcnN0
LnNlY29uZDsKLSAgICAgICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHN0YXRpY19jYXN0PFVwZGF0
YWJsZVRpbGUqPihpdGVyLT5zZWNvbmQuZ2V0KCkpOworICAgICAgICBpbnQgaSA9IGl0ZXItPmtl
eS5maXJzdDsKKyAgICAgICAgaW50IGogPSBpdGVyLT5rZXkuc2Vjb25kOworICAgICAgICBVcGRh
dGFibGVUaWxlKiB0aWxlID0gc3RhdGljX2Nhc3Q8VXBkYXRhYmxlVGlsZSo+KGl0ZXItPnZhbHVl
LmdldCgpKTsKICAgICAgICAgaWYgKCF0aWxlLT5tYW5hZ2VkVGV4dHVyZSgpLT5pc1ZhbGlkKG1f
dGlsZXItPnRpbGVTaXplKCksIG1fdGV4dHVyZUZvcm1hdCkpIHsKICAgICAgICAgICAgIGludmFs
aWRUaWxlcy5hcHBlbmQodGlsZSk7CiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTI5NCw3ICsy
OTQsNyBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJUcmVlSG9zdChDQ0xheWVy
VHJlZUhvc3QqIGhvc3QpCiB7CiAgICAgaWYgKGhvc3QgJiYgaG9zdCAhPSBsYXllclRyZWVIb3N0
KCkpIHsKICAgICAgICAgZm9yIChDQ0xheWVyVGlsaW5nRGF0YTo6VGlsZU1hcDo6Y29uc3RfaXRl
cmF0b3IgaXRlciA9IG1fdGlsZXItPnRpbGVzKCkuYmVnaW4oKTsgaXRlciAhPSBtX3RpbGVyLT50
aWxlcygpLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgICAgIFVwZGF0YWJsZVRpbGUqIHRpbGUg
PSBzdGF0aWNfY2FzdDxVcGRhdGFibGVUaWxlKj4oaXRlci0+c2Vjb25kLmdldCgpKTsKKyAgICAg
ICAgICAgIFVwZGF0YWJsZVRpbGUqIHRpbGUgPSBzdGF0aWNfY2FzdDxVcGRhdGFibGVUaWxlKj4o
aXRlci0+dmFsdWUuZ2V0KCkpOwogICAgICAgICAgICAgdGlsZS0+bWFuYWdlZFRleHR1cmUoKS0+
c2V0VGV4dHVyZU1hbmFnZXIoaG9zdC0+Y29udGVudHNUZXh0dXJlTWFuYWdlcigpKTsKICAgICAg
ICAgfQogICAgIH0KQEAgLTM0Niw3ICszNDYsNyBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6
aW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0KQogICAgICAgICByZXR1cm47
CiAKICAgICBmb3IgKENDTGF5ZXJUaWxpbmdEYXRhOjpUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBp
dGVyID0gbV90aWxlci0+dGlsZXMoKS5iZWdpbigpOyBpdGVyICE9IG1fdGlsZXItPnRpbGVzKCku
ZW5kKCk7ICsraXRlcikgewotICAgICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gc3RhdGljX2Nh
c3Q8VXBkYXRhYmxlVGlsZSo+KGl0ZXItPnNlY29uZC5nZXQoKSk7CisgICAgICAgIFVwZGF0YWJs
ZVRpbGUqIHRpbGUgPSBzdGF0aWNfY2FzdDxVcGRhdGFibGVUaWxlKj4oaXRlci0+dmFsdWUuZ2V0
KCkpOwogICAgICAgICBBU1NFUlQodGlsZSk7CiAgICAgICAgIEludFJlY3QgYm91bmQgPSBtX3Rp
bGVyLT50aWxlUmVjdCh0aWxlKTsKICAgICAgICAgYm91bmQuaW50ZXJzZWN0KGxheWVyUmVjdCk7
CkBAIC01OTIsNyArNTkyLDcgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnJlc2V0VXBkYXRl
U3RhdGUoKQogICAgIC8vIFJlc2V0IG1fdXBkYXRlUmVjdCBmb3IgYWxsIHRpbGVzLgogICAgIEND
TGF5ZXJUaWxpbmdEYXRhOjpUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3RpbGVyLT50
aWxlcygpLmVuZCgpOwogICAgIGZvciAoQ0NMYXllclRpbGluZ0RhdGE6OlRpbGVNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ZXIgPSBtX3RpbGVyLT50aWxlcygpLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyAr
K2l0ZXIpIHsKLSAgICAgICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHN0YXRpY19jYXN0PFVwZGF0
YWJsZVRpbGUqPihpdGVyLT5zZWNvbmQuZ2V0KCkpOworICAgICAgICBVcGRhdGFibGVUaWxlKiB0
aWxlID0gc3RhdGljX2Nhc3Q8VXBkYXRhYmxlVGlsZSo+KGl0ZXItPnZhbHVlLmdldCgpKTsKICAg
ICAgICAgdGlsZS0+bV91cGRhdGVSZWN0ID0gSW50UmVjdCgpOwogICAgICAgICB0aWxlLT5tX3Bh
cnRpYWxVcGRhdGUgPSBmYWxzZTsKICAgICAgICAgdGlsZS0+bV91cGRhdGVkID0gZmFsc2U7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0RhbWFnZVRyYWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NEYW1hZ2VUcmFja2VyLmNwcAppbmRleCBkNGI0Y2Y5MTZiMTJiMTNhZjdkZmE2
MmFkZTUzMjYzMDFmZmI5YzE2Li5lNjRhM2Q3MGUzYTA3MjUxY2ZkZmZlNzI0MDE0MzE5ZjY2Yjk1
NDVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0RhbWFnZVRyYWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDRGFtYWdlVHJhY2tlci5jcHAKQEAgLTE5OCw3ICsxOTgsNyBA
QCBGbG9hdFJlY3QgQ0NEYW1hZ2VUcmFja2VyOjp0cmFja0RhbWFnZUZyb21MZWZ0b3ZlclJlY3Rz
KCkKICAgICBGbG9hdFJlY3QgZGFtYWdlUmVjdCA9IEZsb2F0UmVjdCgpOwogCiAgICAgZm9yIChS
ZWN0TWFwOjppdGVyYXRvciBpdCA9IG1fY3VycmVudFJlY3RIaXN0b3J5LT5iZWdpbigpOyBpdCAh
PSBtX2N1cnJlbnRSZWN0SGlzdG9yeS0+ZW5kKCk7ICsraXQpCi0gICAgICAgIGRhbWFnZVJlY3Qu
dW5pdGUoaXQtPnNlY29uZCk7CisgICAgICAgIGRhbWFnZVJlY3QudW5pdGUoaXQtPnZhbHVlKTsK
IAogICAgIG1fY3VycmVudFJlY3RIaXN0b3J5LT5jbGVhcigpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVGlsaW5nRGF0
YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVGlsaW5nRGF0YS5jcHAKaW5kZXggNDJmMWU4ZDFhYjU5OGM4Mzc1ZDViNWMxN2RkMjVlNjBl
ODNiYjYzNS4uMDRlM2Q2YTdiODQ0M2JjYjgyM2NjZGZkY2I3YjQ0NjY3OTUxOWViYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRpbGluZ0RhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUaWxpbmdEYXRhLmNwcApAQCAtMTM4LDggKzEzOCw4IEBAIHZvaWQg
Q0NMYXllclRpbGluZ0RhdGE6OnNldEJvdW5kcyhjb25zdCBJbnRTaXplJiBzaXplKQogICAgIGxh
eWVyUmVjdFRvVGlsZUluZGljZXMoSW50UmVjdChJbnRQb2ludCgpLCBzaXplKSwgbGVmdCwgdG9w
LCByaWdodCwgYm90dG9tKTsKICAgICBWZWN0b3I8VGlsZU1hcEtleT4gaW52YWxpZFRpbGVLZXlz
OwogICAgIGZvciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7
IGl0ICE9IG1fdGlsZXMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5maXJzdC5maXJz
dCA+IHJpZ2h0IHx8IGl0LT5maXJzdC5zZWNvbmQgPiBib3R0b20pCi0gICAgICAgICAgICBpbnZh
bGlkVGlsZUtleXMuYXBwZW5kKGl0LT5maXJzdCk7CisgICAgICAgIGlmIChpdC0+a2V5LmZpcnN0
ID4gcmlnaHQgfHwgaXQtPmtleS5zZWNvbmQgPiBib3R0b20pCisgICAgICAgICAgICBpbnZhbGlk
VGlsZUtleXMuYXBwZW5kKGl0LT5rZXkpOwogICAgIH0KICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGludmFsaWRUaWxlS2V5cy5zaXplKCk7ICsraSkKICAgICAgICAgbV90aWxlcy5yZW1vdmUo
aW52YWxpZFRpbGVLZXlzW2ldKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCmluZGV4
IDU3NmZjMmIzMTkwYTJkNjMwOTU3NTk4MTc1YzQzZWVmNGU3ODhjMjcuLjNjZGVhMjYyY2Y1NzM0
OTM1ODU0YWFlOWJiNmMzZTdhMmZmNjNhOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
LmNwcApAQCAtNjI5LDcgKzYyOSw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpzdGFydFJhdGVM
aW1pdGVyKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQogICAgIEFTU0VSVChjb250ZXh0KTsK
ICAgICBSYXRlTGltaXRlck1hcDo6aXRlcmF0b3IgaXQgPSBtX3JhdGVMaW1pdGVycy5maW5kKGNv
bnRleHQpOwogICAgIGlmIChpdCAhPSBtX3JhdGVMaW1pdGVycy5lbmQoKSkKLSAgICAgICAgaXQt
PnNlY29uZC0+c3RhcnQoKTsKKyAgICAgICAgaXQtPnZhbHVlLT5zdGFydCgpOwogICAgIGVsc2Ug
ewogICAgICAgICBSZWZQdHI8UmF0ZUxpbWl0ZXI+IHJhdGVMaW1pdGVyID0gUmF0ZUxpbWl0ZXI6
OmNyZWF0ZShjb250ZXh0KTsKICAgICAgICAgbV9yYXRlTGltaXRlcnMuc2V0KGNvbnRleHQsIHJh
dGVMaW1pdGVyKTsKQEAgLTY0MSw3ICs2NDEsNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c3Rv
cFJhdGVMaW1pdGVyKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQogewogICAgIFJhdGVMaW1p
dGVyTWFwOjppdGVyYXRvciBpdCA9IG1fcmF0ZUxpbWl0ZXJzLmZpbmQoY29udGV4dCk7CiAgICAg
aWYgKGl0ICE9IG1fcmF0ZUxpbWl0ZXJzLmVuZCgpKSB7Ci0gICAgICAgIGl0LT5zZWNvbmQtPnN0
b3AoKTsKKyAgICAgICAgaXQtPnZhbHVlLT5zdG9wKCk7CiAgICAgICAgIG1fcmF0ZUxpbWl0ZXJz
LnJlbW92ZShpdCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJQcm9ncmFtLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyUHJvZ3JhbS5jcHAKaW5k
ZXggMTMwNDQxYTFjZDA3NWVmNTc5NWI5M2MwYzk3YjdiMTEwZTlkNzJhZS4uNzg1OWM4YmJhNTdl
NGIxYjU0YzI4Y2E0ZmZmMGZhNWJiYzZkZWVkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJQcm9ncmFtLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclByb2dy
YW0uY3BwCkBAIC03Nyw3ICs3Nyw3IEBAIHZvaWQgQ3VzdG9tRmlsdGVyUHJvZ3JhbTo6cmVtb3Zl
Q2xpZW50KEN1c3RvbUZpbHRlclByb2dyYW1DbGllbnQqIGNsaWVudCkKIHZvaWQgQ3VzdG9tRmls
dGVyUHJvZ3JhbTo6bm90aWZ5Q2xpZW50cygpCiB7CiAgICAgZm9yIChDdXN0b21GaWx0ZXJQcm9n
cmFtQ2xpZW50TGlzdDo6aXRlcmF0b3IgaXRlciA9IG1fY2xpZW50cy5iZWdpbigpLCBlbmQgPSBt
X2NsaWVudHMuZW5kKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCi0gICAgICAgIGl0ZXItPmZpcnN0
LT5ub3RpZnlDdXN0b21GaWx0ZXJQcm9ncmFtTG9hZGVkKHRoaXMpOworICAgICAgICBpdGVyLT5r
ZXktPm5vdGlmeUN1c3RvbUZpbHRlclByb2dyYW1Mb2FkZWQodGhpcyk7CiB9CiAKICNpZiBFTkFC
TEUoV0VCR0wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
dGsvR0xDb250ZXh0R3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0
ay9HTENvbnRleHRHdGsuY3BwCmluZGV4IDZiMjQ2MWEwMzIxZWY2MGUyNjVkZjYxZDIyMzRjZTc1
NzY5NTk1NTEuLmFkNmZiNjk1NjEyOTMwY2MxMDZkODA4MzA3OWYzNWZlZTFkZWVjM2IgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HTENvbnRleHRHdGsu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HTENvbnRleHRH
dGsuY3BwCkBAIC00Nyw3ICs0Nyw3IEBAIEdMQ29udGV4dCogR0xDb250ZXh0OjpnZXRDb250ZXh0
Rm9yV2lkZ2V0KEd0a1dpZGdldCogd2lkZ2V0KQogICAgIFdpbmRvd0NvbnRleHRNYXAmIHdpbmRv
d0NvbnRleHRzID0gd2luZG93Q29udGV4dHNNYXAoKTsKICAgICBXaW5kb3dDb250ZXh0TWFwOjpp
dGVyYXRvciBpID0gd2luZG93Q29udGV4dHNNYXAoKS5maW5kKHdpZGdldCk7CiAgICAgaWYgKGkg
IT0gd2luZG93Q29udGV4dHMuZW5kKCkpCi0gICAgICAgIHJldHVybiBpLT5zZWNvbmQuZ2V0KCk7
CisgICAgICAgIHJldHVybiBpLT52YWx1ZS5nZXQoKTsKIAogICAgIC8vIEl0J3MgaW1wb3J0YW50
IHRoYXQgdGhpcyBjb250ZXh0IGRvZXNuJ3QgaGFuZyBhcm91bmQgYWZ0ZXIgdGhlIHdpbmRvdwog
ICAgIC8vIGlzIHVubWFwcGVkLCBzbyB3ZSBtYWtlIHN1cmUgdG8gY2xlYW4gaXQgdXAgb25jZSB0
aGF0IGhhcHBlbnMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9oYXJmYnV6ei9IYXJmQnV6elNraWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTa2lhLmNwcAppbmRleCBmNjhlYTYxOTI0NWY4NjZlNWJk
MGQ1NzhkMDEwNDg0NDUyNTg0YzJiLi4xZTg4NjdiYjc1N2YyMjQyZThmNDk2MmY4NzViMWJkZjdh
ZTk5MTJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJm
YnV6ei9IYXJmQnV6elNraWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2hhcmZidXp6L0hhcmZCdXp6U2tpYS5jcHAKQEAgLTI0NCwxOCArMjQ0LDE4IEBAIHN0YXRp
YyBIQl9GYWNlUmVjXyogZ2V0Q2FjaGVkSGFyZmJ1enpGYWNlKEZvbnRQbGF0Zm9ybURhdGEqIHBs
YXRmb3JtRGF0YSkKICAgICAgICAgZ0hhcmZidXp6RmFjZUNhY2hlLT5zZXQodW5pcXVlSUQsIGVu
dHJ5KTsKICAgICAgICAgcmV0dXJuIGVudHJ5LmZpcnN0OwogICAgIH0KLSAgICArKyhyZXN1bHQu
Z2V0KCktPnNlY29uZC5zZWNvbmQpOwotICAgIHJldHVybiByZXN1bHQuZ2V0KCktPnNlY29uZC5m
aXJzdDsKKyAgICArKyhyZXN1bHQuZ2V0KCktPnZhbHVlLnNlY29uZCk7CisgICAgcmV0dXJuIHJl
c3VsdC5nZXQoKS0+dmFsdWUuZmlyc3Q7CiB9CiAKIHN0YXRpYyB2b2lkIHJlbGVhc2VDYWNoZWRI
YXJmYnV6ekZhY2UoU2tGb250SUQgdW5pcXVlSUQpCiB7CiAgICAgSGFyZmJ1enpGYWNlQ2FjaGU6
Oml0ZXJhdG9yIHJlc3VsdCA9IGdIYXJmYnV6ekZhY2VDYWNoZS0+ZmluZCh1bmlxdWVJRCk7CiAg
ICAgQVNTRVJUKHJlc3VsdCAhPSBnSGFyZmJ1enpGYWNlQ2FjaGUtPmVuZCgpKTsKLSAgICBBU1NF
UlQocmVzdWx0LmdldCgpLT5zZWNvbmQuc2Vjb25kID4gMCk7Ci0gICAgLS0ocmVzdWx0LmdldCgp
LT5zZWNvbmQuc2Vjb25kKTsKLSAgICBpZiAoIShyZXN1bHQuZ2V0KCktPnNlY29uZC5zZWNvbmQp
KSB7Ci0gICAgICAgIEhCX0ZyZWVGYWNlKHJlc3VsdC5nZXQoKS0+c2Vjb25kLmZpcnN0KTsKKyAg
ICBBU1NFUlQocmVzdWx0LmdldCgpLT52YWx1ZS5zZWNvbmQgPiAwKTsKKyAgICAtLShyZXN1bHQu
Z2V0KCktPnZhbHVlLnNlY29uZCk7CisgICAgaWYgKCEocmVzdWx0LmdldCgpLT52YWx1ZS5zZWNv
bmQpKSB7CisgICAgICAgIEhCX0ZyZWVGYWNlKHJlc3VsdC5nZXQoKS0+dmFsdWUuZmlyc3QpOwog
ICAgICAgICBnSGFyZmJ1enpGYWNlQ2FjaGUtPnJlbW92ZSh1bmlxdWVJRCk7CiAgICAgfQogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhU
ZXh0Q29udHJvbGxlckFUU1VJLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXJBVFNVSS5jcHAKaW5kZXggYmU5Zjc0MTA0ZmU3NDM0
NDU3MTU2NDE2M2NmN2FhZDcwZTA3MmM0Zi4uNjJlYTRiZWQxYmEwNWM0NWQ5YmIyM2EzMzMyNWY1
YjRjYzI3MzU5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckFUU1VJLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyQVRTVUkuY3BwCkBAIC0y
NzksNyArMjc5LDcgQEAgc3RhdGljIEFUU1VTdHlsZSBpbml0aWFsaXplQVRTVVN0eWxlKGNvbnN0
IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwgVHlwZXNldHRpbmcKIHsKICAgICB1bnNpZ25lZCBr
ZXkgPSB0eXBlc2V0dGluZ0ZlYXR1cmVzICsgMTsKICAgICBIYXNoTWFwPHVuc2lnbmVkLCBBVFNV
U3R5bGU+OjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gZm9udERhdGEtPm1fQVRTVVN0eWxlTWFwLmFk
ZChrZXksIDApOwotICAgIEFUU1VTdHlsZSYgYXRzdVN0eWxlID0gYWRkUmVzdWx0Lml0ZXJhdG9y
LT5zZWNvbmQ7CisgICAgQVRTVVN0eWxlJiBhdHN1U3R5bGUgPSBhZGRSZXN1bHQuaXRlcmF0b3It
PnZhbHVlOwogICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkpCiAgICAgICAgIHJldHVybiBh
dHN1U3R5bGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L21hYy9TaW1wbGVGb250RGF0YUNvcmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YUNvcmVUZXh0LmNwcAppbmRleCAwNTE5Mzc0MmM1
ODUyZGJlOWM5Y2VkNjRiOWEwN2FhZDJjMWVhNDc3Li4wYjcxMzM0N2Y2MDQ2MzU1NDllNTBkNTYz
NjUyMThiMjM0NDI2YWNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvU2ltcGxlRm9udERhdGFDb3JlVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhQ29yZVRleHQuY3BwCkBAIC00Myw3
ICs0Myw3IEBAIENGRGljdGlvbmFyeVJlZiBTaW1wbGVGb250RGF0YTo6Z2V0Q0ZTdHJpbmdBdHRy
aWJ1dGVzKFR5cGVzZXR0aW5nRmVhdHVyZXMgdHlwZXNlCiB7CiAgICAgdW5zaWduZWQga2V5ID0g
dHlwZXNldHRpbmdGZWF0dXJlcyArIDE7CiAgICAgSGFzaE1hcDx1bnNpZ25lZCwgUmV0YWluUHRy
PENGRGljdGlvbmFyeVJlZj4gPjo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IG1fQ0ZTdHJpbmdBdHRy
aWJ1dGVzLmFkZChrZXksIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+KCkpOwotICAgIFJldGFp
blB0cjxDRkRpY3Rpb25hcnlSZWY+JiBhdHRyaWJ1dGVzRGljdGlvbmFyeSA9IGFkZFJlc3VsdC5p
dGVyYXRvci0+c2Vjb25kOworICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+JiBhdHRyaWJ1
dGVzRGljdGlvbmFyeSA9IGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCFhZGRS
ZXN1bHQuaXNOZXdFbnRyeSkKICAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZXNEaWN0aW9uYXJ5Lmdl
dCgpOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL1NpbXBsZUZvbnREYXRhTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL1NpbXBsZUZvbnREYXRhTWFjLm1tCmluZGV4IGQ1ZDU1NjA2ZDRmZjI1MzAwNjM5ODc1
NjI3ZjUzNWZmMzcxYzBlZDYuLjhhMWZiZDEyMGYwNzFhOGQ0ZjE2NWZkMGRkMWNkYmZjYWE0MDdl
ODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1w
bGVGb250RGF0YU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9t
YWMvU2ltcGxlRm9udERhdGFNYWMubW0KQEAgLTMyMyw3ICszMjMsNyBAQCB2b2lkIFNpbXBsZUZv
bnREYXRhOjpwbGF0Zm9ybURlc3Ryb3koKQogI2lmIFVTRShBVFNVSSkKICAgICBIYXNoTWFwPHVu
c2lnbmVkLCBBVFNVU3R5bGU+OjppdGVyYXRvciBlbmQgPSBtX0FUU1VTdHlsZU1hcC5lbmQoKTsK
ICAgICBmb3IgKEhhc2hNYXA8dW5zaWduZWQsIEFUU1VTdHlsZT46Oml0ZXJhdG9yIGl0ID0gbV9B
VFNVU3R5bGVNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBBVFNVRGlzcG9z
ZVN0eWxlKGl0LT5zZWNvbmQpOworICAgICAgICBBVFNVRGlzcG9zZVN0eWxlKGl0LT52YWx1ZSk7
CiAjZW5kaWYKIH0KIApAQCAtNDczLDcgKzQ3Myw3IEBAIGJvb2wgU2ltcGxlRm9udERhdGE6OmNh
blJlbmRlckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
CiAKICAgICBXVEY6Okhhc2hNYXA8U3RyaW5nLCBib29sPjo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9
IG1fY29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2VTdXBwb3J0LT5hZGQoU3RyaW5nKGNoYXJhY3Rl
cnMsIGxlbmd0aCksIGZhbHNlKTsKICAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5KQotICAg
ICAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBh
ZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogCiAgICAgUmV0YWluUHRyPENHRm9udFJlZj4gY2dG
b250KEFkb3B0Q0YsIENURm9udENvcHlHcmFwaGljc0ZvbnQocGxhdGZvcm1EYXRhKCkuY3RGb250
KCksIDApKTsKIApAQCAtNDkzLDcgKzQ5Myw3IEBAIGJvb2wgU2ltcGxlRm9udERhdGE6OmNhblJl
bmRlckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgYWRkUmVzdWx0Lml0ZXJhdG9y
LT5zZWNvbmQgPSB0cnVlOworICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSB0cnVlOwog
ICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3Bl
bkdMQ29tbW9uLmNwcAppbmRleCA5MTIzZWQwYjIwM2VmNDRmMGRkMzZlMmZjZmY3NzkwZGM2OTdm
MjNmLi43MjRjMDQwNjIyMDc1ZWIxNmI5YzJiNjhiOTVkZTBkZTE1MzgxZGE4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
M0RPcGVuR0xDb21tb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAKQEAgLTQ2NSw3ICs0NjUs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb21waWxlU2hhZGVyKFBsYXRmb3JtM0RPYmpl
Y3Qgc2hhZGVyKQogICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIFNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3VsdC0+
c2Vjb25kOworICAgIFNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3VsdC0+dmFsdWU7CiAK
ICAgICBTdHJpbmcgdHJhbnNsYXRlZFNoYWRlclNvdXJjZTsKICAgICBTdHJpbmcgc2hhZGVySW5m
b0xvZzsKQEAgLTExNzEsNyArMTE3MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNo
YWRlcml2KFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyLCBHQzNEZW51bSBwbmFtZSwgR0MzCiAgICAg
ICAgICAgICAqdmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ+KGZhbHNlKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQotICAgICAgICAqdmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ+KHJlc3Vs
dC0+c2Vjb25kLmlzVmFsaWQpOworICAgICAgICAqdmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ+KHJl
c3VsdC0+dmFsdWUuaXNWYWxpZCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSU5GT19MT0df
TEVOR1RIOgogICAgICAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKSB7
CkBAIC0xMTk4LDcgKzExOTgsNyBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRl
ckluZm9Mb2coUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCiAgICAgaWYgKHJlc3VsdCA9PSBtX3No
YWRlclNvdXJjZU1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOyAKIAotICAgIFNo
YWRlclNvdXJjZUVudHJ5IGVudHJ5ID0gcmVzdWx0LT5zZWNvbmQ7CisgICAgU2hhZGVyU291cmNl
RW50cnkgZW50cnkgPSByZXN1bHQtPnZhbHVlOwogICAgIGlmICghZW50cnkuaXNWYWxpZCkKICAg
ICAgICAgcmV0dXJuIGVudHJ5LmxvZzsKIApAQCAtMTIyNCw3ICsxMjI0LDcgQEAgU3RyaW5nIEdy
YXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIp
CiAgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKICAgICAgICAgcmV0
dXJuIFN0cmluZygpOyAKIAotICAgIHJldHVybiByZXN1bHQtPnNlY29uZC5zb3VyY2U7CisgICAg
cmV0dXJuIHJlc3VsdC0+dmFsdWUuc291cmNlOwogfQogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
QW5pbWF0aW9uLmNwcAppbmRleCA0YzkyYzU5N2QzZjg4ODg5M2I0YjYwZjVjZDg1MmI2NjFkYjMy
MGY0Li5hOTU5MDUxZmMyMDhiZDZiYzg0YTlkZDA4YTNlMGY0NWJlMThhNjQ0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFu
aW1hdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJBbmltYXRpb24uY3BwCkBAIC0xODIsNyArMTgyLDcgQEAgYm9vbCBUZXh0
dXJlTWFwcGVyQW5pbWF0aW9uczo6aGFzQWN0aXZlQW5pbWF0aW9uc09mVHlwZShBbmltYXRlZFBy
b3BlcnR5SUQgdHlwZSkKIHsKICAgICBIYXNoTWFwPFN0cmluZywgVGV4dHVyZU1hcHBlckFuaW1h
dGlvbj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fYW5pbWF0aW9ucy5lbmQoKTsKICAgICBmb3Ig
KEhhc2hNYXA8U3RyaW5nLCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uPjo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtX2FuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGNv
bnN0IFRleHR1cmVNYXBwZXJBbmltYXRpb24mIGFuaW1hdGlvbiA9IGl0LT5zZWNvbmQ7CisgICAg
ICAgIGNvbnN0IFRleHR1cmVNYXBwZXJBbmltYXRpb24mIGFuaW1hdGlvbiA9IGl0LT52YWx1ZTsK
ICAgICAgICAgaWYgKGFuaW1hdGlvbi5pc0FjdGl2ZSgpICYmIGFuaW1hdGlvbi5wcm9wZXJ0eSgp
ID09IHR5cGUpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0xOTMsNyArMTkz
LDcgQEAgYm9vbCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uczo6aGFzUnVubmluZ0FuaW1hdGlvbnMo
KSBjb25zdAogewogICAgIEhhc2hNYXA8U3RyaW5nLCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uPjo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9hbmltYXRpb25zLmVuZCgpOwogICAgIGZvciAoSGFzaE1h
cDxTdHJpbmcsIFRleHR1cmVNYXBwZXJBbmltYXRpb24+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1f
YW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgY29uc3QgVGV4
dHVyZU1hcHBlckFuaW1hdGlvbiYgYW5pbWF0aW9uID0gaXQtPnNlY29uZDsKKyAgICAgICAgY29u
c3QgVGV4dHVyZU1hcHBlckFuaW1hdGlvbiYgYW5pbWF0aW9uID0gaXQtPnZhbHVlOwogICAgICAg
ICBpZiAoYW5pbWF0aW9uLnN0YXRlKCkgPT0gVGV4dHVyZU1hcHBlckFuaW1hdGlvbjo6UGxheWlu
Z1N0YXRlKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMjUyLDE0ICsyNTIs
MTQgQEAgdm9pZCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uczo6cGF1c2UoY29uc3QgU3RyaW5nJiBu
YW1lLCBkb3VibGUgb2Zmc2V0KQogICAgIEhhc2hNYXA8U3RyaW5nLCBUZXh0dXJlTWFwcGVyQW5p
bWF0aW9uPjo6aXRlcmF0b3IgaXQgPSBtX2FuaW1hdGlvbnMuZmluZChuYW1lKTsKICAgICBpZiAo
aXQgPT0gbV9hbmltYXRpb25zLmVuZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgaXQtPnNlY29u
ZC5wYXVzZShvZmZzZXQpOworICAgIGl0LT52YWx1ZS5wYXVzZShvZmZzZXQpOwogfQogCiB2b2lk
IFRleHR1cmVNYXBwZXJBbmltYXRpb25zOjphcHBseShUZXh0dXJlTWFwcGVyQW5pbWF0aW9uQ2xp
ZW50KiBjbGllbnQpCiB7CiAgICAgSGFzaE1hcDxTdHJpbmcsIFRleHR1cmVNYXBwZXJBbmltYXRp
b24+OjppdGVyYXRvciBlbmQgPSBtX2FuaW1hdGlvbnMuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFw
PFN0cmluZywgVGV4dHVyZU1hcHBlckFuaW1hdGlvbj46Oml0ZXJhdG9yIGl0ID0gbV9hbmltYXRp
b25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC5hcHBseShj
bGllbnQpOworICAgICAgICBpdC0+dmFsdWUuYXBwbHkoY2xpZW50KTsKIH0KIAogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJHTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlckdMLmNwcAppbmRleCBiOGY4YjU0YmViODk2ZmQ3ZTYzMGNhZjc5MDUzMTBkNWFhMGE2
NDk1Li4wMzFiMzYyZGU1OGVkODU2YTZiMzMzMDBmYTg4NGEwNmI0NjcyMmM0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdM
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlckdMLmNwcApAQCAtMTE3LDcgKzExNyw3IEBAIHN0cnVjdCBUZXh0dXJlTWFwcGVyR0xE
YXRhIHsKICAgICAgICAgICAgIEdMQ29udGV4dCBjdXJyZW50R0xDb25leHQgPSBnZXRDdXJyZW50
R0xDb250ZXh0KCk7CiAgICAgICAgICAgICBHTENvbnRleHREYXRhTWFwOjppdGVyYXRvciBpdCA9
IGdsQ29udGV4dERhdGFNYXAoKS5maW5kKGN1cnJlbnRHTENvbmV4dCk7CiAgICAgICAgICAgICBp
ZiAoaXQgIT0gZ2xDb250ZXh0RGF0YU1hcCgpLmVuZCgpKQotICAgICAgICAgICAgICAgIHJldHVy
biBpdC0+c2Vjb25kOworICAgICAgICAgICAgICAgIHJldHVybiBpdC0+dmFsdWU7CiAKICAgICAg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2hhcmVkR0xEYXRhKGdldEN1cnJlbnRHTENvbnRl
eHQoKSkpOwogICAgICAgICB9CkBAIC0xODQsNyArMTg0LDcgQEAgc3RydWN0IFRleHR1cmVNYXBw
ZXJHTERhdGEgewogICAgICAgICAgICAgR0xDb250ZXh0RGF0YU1hcDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gZ2xDb250ZXh0RGF0YU1hcCgpLmVuZCgpOwogICAgICAgICAgICAgR0xDb250ZXh0RGF0
YU1hcDo6aXRlcmF0b3IgaXQ7CiAgICAgICAgICAgICBmb3IgKGl0ID0gZ2xDb250ZXh0RGF0YU1h
cCgpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgICAgIGlmIChpdC0+
c2Vjb25kID09IHRoaXMpCisgICAgICAgICAgICAgICAgaWYgKGl0LT52YWx1ZSA9PSB0aGlzKQog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFk
ZXJNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaAppbmRleCBkODQzMjcyOThjM2NjNDJmOWIzOGRlZGQ2
MmRmZjhlNTA1NjRhYmM1Li40YWQ1OTgxM2VjZWE0MTAyZDQ2NzA0OTg2ZjM0NGEzNDcyMDJiNDUz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaApAQCAtMTA5LDcgKzEw
OSw3IEBAIHB1YmxpYzoKIAogICAgICAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU1hcDo6
aXRlcmF0b3IgaXQgPSBtX3RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtTWFwLmZpbmQoc2hhZGVy
VHlwZSk7CiAgICAgICAgIGlmIChpdCAhPSBtX3RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtTWFw
LmVuZCgpKQotICAgICAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgICAgICByZXR1
cm4gaXQtPnZhbHVlOwogCiAgICAgICAgIHN3aXRjaCAoc2hhZGVyVHlwZSkgewogICAgICAgICBj
YXNlIFNpbXBsZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbmNlL0ZvbnRQbGF0Zm9ybURhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luY2UvRm9udFBsYXRmb3JtRGF0YS5jcHAKaW5kZXggMTk3OTBhZDQ5YjMzMDNkZDdi
NjJjN2U3YTBhODIzNjc3YjRjZmY1MS4uMTlmNTI0NTVkMTFiMzU0Y2M0ZDQzZTY4Mzk5Y2U3OWFj
OTliYzBiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
Y2UvRm9udFBsYXRmb3JtRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luY2UvRm9udFBsYXRmb3JtRGF0YS5jcHAKQEAgLTI4Nyw5ICsyODcsOSBAQCBzdGF0
aWMgUGFzc1JlZlB0cjxGaXhlZFNpemVGb250RGF0YT4gY3JlYXRlRml4ZWRTaXplRm9udERhdGEo
Y29uc3QgQXRvbWljU3RyaW5nJgogICAgIEZpeGVkU2l6ZUZvbnREYXRhS2V5IGtleShmYW1pbHks
IHdlaWdodCwgaXRhbGljKTsKICAgICBGaXhlZFNpemVGb250Q2FjaGU6OkFkZFJlc3VsdCByZXN1
bHQgPSBnX2ZpeGVkU2l6ZUZvbnRDYWNoZS5hZGQoa2V5LCBSZWZQdHI8Rml4ZWRTaXplRm9udERh
dGE+KCkpOwogICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgcmVzdWx0Lml0ZXJh
dG9yLT5zZWNvbmQgPSBGaXhlZFNpemVGb250RGF0YTo6Y3JlYXRlKGZhbWlseSwgd2VpZ2h0LCBp
dGFsaWMpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gRml4ZWRTaXplRm9udERh
dGE6OmNyZWF0ZShmYW1pbHksIHdlaWdodCwgaXRhbGljKTsKIAotICAgIHJldHVybiByZXN1bHQu
aXRlcmF0b3ItPnNlY29uZDsKKyAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIH0K
IAogc3RhdGljIExPTkcgdG9HRElGb250V2VpZ2h0KEZvbnRXZWlnaHQgZm9udFdlaWdodCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmNwcAppbmRleCAxYTg0
ZjhiZDMxOTUyYjI4ZTI2ODI3MWRkMmE1ZjU3ZjQ0ZDgyN2Q3Li5hZGZjNjZlMDE1ZTUwMjI2Nzg4
YzIxNDc2OGExNWIyOTEzNjg0M2I4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvRGF0YU9iamVjdEd0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L0RhdGFPYmplY3RHdGsuY3BwCkBAIC0xNzEsNyArMTcxLDcgQEAgRGF0YU9iamVjdEd0ayogRGF0
YU9iamVjdEd0azo6Zm9yQ2xpcGJvYXJkKEd0a0NsaXBib2FyZCogY2xpcGJvYXJkKQogICAgIH0K
IAogICAgIEhhc2hNYXA8R3RrQ2xpcGJvYXJkKiwgUmVmUHRyPERhdGFPYmplY3RHdGs+ID46Oml0
ZXJhdG9yIGl0ID0gb2JqZWN0TWFwLmZpbmQoY2xpcGJvYXJkKTsKLSAgICByZXR1cm4gaXQtPnNl
Y29uZC5nZXQoKTsKKyAgICByZXR1cm4gaXQtPnZhbHVlLmdldCgpOwogfQogCiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrRHJhZ0FuZERyb3BIZWxwZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0RyYWdBbmREcm9wSGVscGVyLmNwcApp
bmRleCA3NjNkMTIwZDA5NDE2MjI3MjY2MGM2MDYzMmExOTI5ODZmNTQyZWE0Li5mYzJmNTZlNjE2
NmViMWFhY2RiYWRhOGY1MmZlZjNjNmRkODg2NGNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvR3RrRHJhZ0FuZERyb3BIZWxwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9HdGtEcmFnQW5kRHJvcEhlbHBlci5jcHAKQEAgLTcwLDcgKzcwLDcg
QEAgdm9pZCBHdGtEcmFnQW5kRHJvcEhlbHBlcjo6aGFuZGxlR2V0RHJhZ0RhdGEoR2RrRHJhZ0Nv
bnRleHQqIGNvbnRleHQsIEd0a1NlbGVjdGkKICAgICBEcmFnZ2luZ0RhdGFPYmplY3RzTWFwOjpp
dGVyYXRvciBpdGVyYXRvciA9IG1fZHJhZ2dpbmdEYXRhT2JqZWN0cy5maW5kKGNvbnRleHQpOwog
ICAgIGlmIChpdGVyYXRvciA9PSBtX2RyYWdnaW5nRGF0YU9iamVjdHMuZW5kKCkpCiAgICAgICAg
IHJldHVybjsKLSAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigp
LT5maWxsU2VsZWN0aW9uRGF0YShzZWxlY3Rpb25EYXRhLCBpbmZvLCBpdGVyYXRvci0+c2Vjb25k
LmdldCgpKTsKKyAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigp
LT5maWxsU2VsZWN0aW9uRGF0YShzZWxlY3Rpb25EYXRhLCBpbmZvLCBpdGVyYXRvci0+dmFsdWUu
Z2V0KCkpOwogfQogCiBzdHJ1Y3QgSGFuZGxlRHJhZ0xhdGVyRGF0YSB7CkBAIC0xMTYsNyArMTE2
LDcgQEAgdm9pZCBHdGtEcmFnQW5kRHJvcEhlbHBlcjo6aGFuZGxlRHJhZ0xlYXZlKEdka0RyYWdD
b250ZXh0KiBnZGtDb250ZXh0LCBEcmFnRXhpdGUKICAgICAvLyB0aGUgZHJhZy1kcm9wIHNpZ25h
bC4gV2Ugd2FudCB0aGUgYWN0aW9ucyBmb3IgZHJhZy1sZWF2ZSB0byBoYXBwZW4gYWZ0ZXIKICAg
ICAvLyB0aG9zZSBmb3IgZHJhZy1kcm9wLCBzbyBzY2hlZHVsZSB0aGVtIHRvIGhhcHBlbiBhc3lu
Y2hyb25vdXNseSBoZXJlLgogICAgIEhhbmRsZURyYWdMYXRlckRhdGEqIGRhdGEgPSBuZXcgSGFu
ZGxlRHJhZ0xhdGVyRGF0YTsKLSAgICBkYXRhLT5jb250ZXh0ID0gaXRlcmF0b3ItPnNlY29uZDsK
KyAgICBkYXRhLT5jb250ZXh0ID0gaXRlcmF0b3ItPnZhbHVlOwogICAgIGRhdGEtPmNvbnRleHQt
PmV4aXRlZENhbGxiYWNrID0gZXhpdGVkQ2FsbGJhY2s7CiAgICAgZGF0YS0+Z2x1ZSA9IHRoaXM7
CiAgICAgZ190aW1lb3V0X2FkZCgwLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihoYW5k
bGVEcmFnTGVhdmVMYXRlckNhbGxiYWNrKSwgZGF0YSk7CkBAIC0xNDAsNyArMTQwLDcgQEAgUGFz
c093blB0cjxEcmFnRGF0YT4gR3RrRHJhZ0FuZERyb3BIZWxwZXI6OmhhbmRsZURyYWdNb3Rpb24o
R2RrRHJhZ0NvbnRleHQqIGNvbnQKICAgICAgICAgbV9kcm9wcGluZ0NvbnRleHRzLnNldChjb250
ZXh0LCBkcm9wcGluZ0NvbnRleHQpOwogICAgICAgICBxdWVyeU5ld0Ryb3BDb250ZXh0RGF0YShk
cm9wcGluZ0NvbnRleHQsIG1fd2lkZ2V0LCB0aW1lKTsKICAgICB9IGVsc2UgewotICAgICAgICBk
cm9wcGluZ0NvbnRleHQgPSBpdGVyYXRvci0+c2Vjb25kOworICAgICAgICBkcm9wcGluZ0NvbnRl
eHQgPSBpdGVyYXRvci0+dmFsdWU7CiAgICAgICAgIGRyb3BwaW5nQ29udGV4dC0+bGFzdE1vdGlv
blBvc2l0aW9uID0gcG9zaXRpb247CiAgICAgfQogCkBAIC0xNjIsNyArMTYyLDcgQEAgUGFzc093
blB0cjxEcmFnRGF0YT4gR3RrRHJhZ0FuZERyb3BIZWxwZXI6OmhhbmRsZURyYWdEYXRhUmVjZWl2
ZWQoR2RrRHJhZ0NvbnRleHQKICAgICBpZiAoaXRlcmF0b3IgPT0gbV9kcm9wcGluZ0NvbnRleHRz
LmVuZCgpKQogICAgICAgICByZXR1cm4gYWRvcHRQdHIoc3RhdGljX2Nhc3Q8RHJhZ0RhdGEqPigw
KSk7CiAKLSAgICBEcm9wcGluZ0NvbnRleHQqIGRyb3BwaW5nQ29udGV4dCA9IGl0ZXJhdG9yLT5z
ZWNvbmQ7CisgICAgRHJvcHBpbmdDb250ZXh0KiBkcm9wcGluZ0NvbnRleHQgPSBpdGVyYXRvci0+
dmFsdWU7CiAgICAgZHJvcHBpbmdDb250ZXh0LT5wZW5kaW5nRGF0YVJlcXVlc3RzLS07CiAgICAg
UGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+ZmlsbERhdGFPYmpl
Y3RGcm9tRHJvcERhdGEoc2VsZWN0aW9uRGF0YSwgaW5mbywgZHJvcHBpbmdDb250ZXh0LT5kYXRh
T2JqZWN0LmdldCgpKTsKIApAQCAtMTg1LDcgKzE4NSw3IEBAIFBhc3NPd25QdHI8RHJhZ0RhdGE+
IEd0a0RyYWdBbmREcm9wSGVscGVyOjpoYW5kbGVEcmFnRHJvcChHZGtEcmFnQ29udGV4dCogY29u
dGV4CiAgICAgaWYgKGl0ZXJhdG9yID09IG1fZHJvcHBpbmdDb250ZXh0cy5lbmQoKSkKICAgICAg
ICAgcmV0dXJuIGFkb3B0UHRyKHN0YXRpY19jYXN0PERyYWdEYXRhKj4oMCkpOwogCi0gICAgRHJv
cHBpbmdDb250ZXh0KiBkcm9wcGluZ0NvbnRleHQgPSBpdGVyYXRvci0+c2Vjb25kOworICAgIERy
b3BwaW5nQ29udGV4dCogZHJvcHBpbmdDb250ZXh0ID0gaXRlcmF0b3ItPnZhbHVlOwogICAgIGRy
b3BwaW5nQ29udGV4dC0+ZHJvcEhhcHBlbmVkID0gdHJ1ZTsKIAogICAgIHJldHVybiBhZG9wdFB0
cihuZXcgRHJhZ0RhdGEoZHJvcHBpbmdDb250ZXh0LT5kYXRhT2JqZWN0LmdldCgpLCBwb3NpdGlv
biwgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVH
dGszLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0azMuY3Bw
CmluZGV4IDcyMGYwZmQzNjAxYWQ1NWM0MWYwNDhkYTM4ZTkwYjE0MGM3ODQyYTkuLmVlNDJkNWRj
OTBhODNmNTY0ODg2MjZkYzM5ZTU2NDczMjJlYWZhNzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0azMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0azMuY3BwCkBAIC01Niw3ICs1Niw3IEBAIHN0YXRp
YyB2b2lkIGd0a1N0eWxlQ2hhbmdlZENhbGxiYWNrKEdPYmplY3QqLCBHUGFyYW1TcGVjKikKIHsK
ICAgICBTdHlsZUNvbnRleHRNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHN0eWxlQ29udGV4dE1h
cCgpLmVuZCgpOwogICAgIGZvciAoU3R5bGVDb250ZXh0TWFwOjpjb25zdF9pdGVyYXRvciBpdGVy
ID0gc3R5bGVDb250ZXh0TWFwKCkuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikKLSAgICAg
ICAgZ3RrX3N0eWxlX2NvbnRleHRfaW52YWxpZGF0ZShpdGVyLT5zZWNvbmQuZ2V0KCkpOworICAg
ICAgICBndGtfc3R5bGVfY29udGV4dF9pbnZhbGlkYXRlKGl0ZXItPnZhbHVlLmdldCgpKTsKIAog
ICAgIFBhZ2U6OnNjaGVkdWxlRm9yY2VkU3R5bGVSZWNhbGNGb3JBbGxQYWdlcygpOwogfQpAQCAt
NzksNyArNzksNyBAQCBzdGF0aWMgR3RrU3R5bGVDb250ZXh0KiBnZXRTdHlsZUNvbnRleHQoR1R5
cGUgd2lkZ2V0VHlwZSkKIHsKICAgICBTdHlsZUNvbnRleHRNYXA6OkFkZFJlc3VsdCByZXN1bHQg
PSBzdHlsZUNvbnRleHRNYXAoKS5hZGQod2lkZ2V0VHlwZSwgMCk7CiAgICAgaWYgKCFyZXN1bHQu
aXNOZXdFbnRyeSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLmdldCgp
OworICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKIAogICAgIEd0
a1dpZGdldFBhdGgqIHBhdGggPSBndGtfd2lkZ2V0X3BhdGhfbmV3KCk7CiAgICAgZ3RrX3dpZGdl
dF9wYXRoX2FwcGVuZF90eXBlKHBhdGgsIHdpZGdldFR5cGUpOwpAQCAtMTExLDcgKzExMSw3IEBA
IHN0YXRpYyBHdGtTdHlsZUNvbnRleHQqIGdldFN0eWxlQ29udGV4dChHVHlwZSB3aWRnZXRUeXBl
KQogICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9wYXRoKGNvbnRleHQuZ2V0KCksIHBhdGgpOwog
ICAgIGd0a193aWRnZXRfcGF0aF9mcmVlKHBhdGgpOwogCi0gICAgcmVzdWx0Lml0ZXJhdG9yLT5z
ZWNvbmQgPSBjb250ZXh0OworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBjb250ZXh0Owog
ICAgIHJldHVybiBjb250ZXh0LmdldCgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMubW0KaW5kZXggZTQ3NDY4YmQ1NjAzODY1ODkyZTJj
MTRkOTRhMzEzZGFhMDc2YTJjMy4uMmM4MGEyOTg2ZmZjOTk3N2RmNWViMWIwZTZhNzgxMzVmYzE1
NzhmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbGJhclRo
ZW1lTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxiYXJUaGVt
ZU1hYy5tbQpAQCAtODUsOCArODUsOCBAQCBzdGF0aWMgU2Nyb2xsYmFyUGFpbnRlck1hcCogc2Ny
b2xsYmFyTWFwKCkKICAgICAgICAgcmV0dXJuOwogICAgIFNjcm9sbGJhclBhaW50ZXJNYXA6Oml0
ZXJhdG9yIGVuZCA9IHNjcm9sbGJhck1hcCgpLT5lbmQoKTsKICAgICBmb3IgKFNjcm9sbGJhclBh
aW50ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gc2Nyb2xsYmFyTWFwKCktPmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewotICAgICAgICBpdC0+Zmlyc3QtPnN0eWxlQ2hhbmdlZCgpOwotICAgICAgICBp
dC0+Zmlyc3QtPmludmFsaWRhdGUoKTsKKyAgICAgICAgaXQtPmtleS0+c3R5bGVDaGFuZ2VkKCk7
CisgICAgICAgIGl0LT5rZXktPmludmFsaWRhdGUoKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbFN0b3JhZ2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFsU3RvcmFnZS5jcHAKaW5k
ZXggZjA5ODRmODg1NThkNWM3OWUyODM0ZTFhY2IyODZkOGE3OTdhMjVlNS4uMjgzN2ZmNjEzOTJm
MGE1YjMxNWRiNzliMjM5MTYyMTdmZjc4MmMwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFsU3RvcmFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFsU3RvcmFnZS5jcHAKQEAgLTE0Nyw3ICsxNDcs
NyBAQCBib29sIENyZWRlbnRpYWxTdG9yYWdlOjpzZXQoY29uc3QgQ3JlZGVudGlhbCYgY3JlZGVu
dGlhbCwgY29uc3QgS1VSTCYgdXJsKQogICAgIGlmIChpdGVyID09IHBhdGhUb0RlZmF1bHRQcm90
ZWN0aW9uU3BhY2VNYXAoKS5lbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEFTU0VS
VChvcmlnaW5zV2l0aENyZWRlbnRpYWxzKCkuY29udGFpbnMob3JpZ2luU3RyaW5nRnJvbVVSTCh1
cmwpKSk7Ci0gICAgcHJvdGVjdGlvblNwYWNlVG9DcmVkZW50aWFsTWFwKCkuc2V0KGl0ZXItPnNl
Y29uZCwgY3JlZGVudGlhbCk7CisgICAgcHJvdGVjdGlvblNwYWNlVG9DcmVkZW50aWFsTWFwKCku
c2V0KGl0ZXItPnZhbHVlLCBjcmVkZW50aWFsKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAt
MTU2LDcgKzE1Niw3IEBAIENyZWRlbnRpYWwgQ3JlZGVudGlhbFN0b3JhZ2U6OmdldChjb25zdCBL
VVJMJiB1cmwpCiAgICAgUGF0aFRvRGVmYXVsdFByb3RlY3Rpb25TcGFjZU1hcDo6aXRlcmF0b3Ig
aXRlciA9IGZpbmREZWZhdWx0UHJvdGVjdGlvblNwYWNlRm9yVVJMKHVybCk7CiAgICAgaWYgKGl0
ZXIgPT0gcGF0aFRvRGVmYXVsdFByb3RlY3Rpb25TcGFjZU1hcCgpLmVuZCgpKQogICAgICAgICBy
ZXR1cm4gQ3JlZGVudGlhbCgpOwotICAgIHJldHVybiBwcm90ZWN0aW9uU3BhY2VUb0NyZWRlbnRp
YWxNYXAoKS5nZXQoaXRlci0+c2Vjb25kKTsKKyAgICByZXR1cm4gcHJvdGVjdGlvblNwYWNlVG9D
cmVkZW50aWFsTWFwKCkuZ2V0KGl0ZXItPnZhbHVlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQSGVh
ZGVyTWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUEhlYWRlck1h
cC5jcHAKaW5kZXggNTAwOTFlMTlkM2FmNTZmZjRhOGRmMTc1YmY4OTc4NzAwNzYxNDI4MC4uZGVm
ZTFhZTg0YmYwYWRmMDc3OTQ5NTViMTFhNWRjNzNlYTAyM2UyNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQSGVhZGVyTWFwLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBIZWFkZXJNYXAuY3BwCkBAIC01Miw3ICs1Miw3
IEBAIFBhc3NPd25QdHI8Q3Jvc3NUaHJlYWRIVFRQSGVhZGVyTWFwRGF0YT4gSFRUUEhlYWRlck1h
cDo6Y29weURhdGEoKSBjb25zdAogCiAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kX2l0ID0gZW5kKCk7CiAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IGJlZ2luKCk7IGl0ICE9IGVuZF9pdDsgKytpdCkgewotICAgICAgICBkYXRhLT5hcHBlbmQo
bWFrZV9wYWlyKGl0LT5maXJzdC5zdHJpbmcoKS5pc29sYXRlZENvcHkoKSwgaXQtPnNlY29uZC5p
c29sYXRlZENvcHkoKSkpOworICAgICAgICBkYXRhLT5hcHBlbmQobWFrZV9wYWlyKGl0LT5rZXku
c3RyaW5nKCkuaXNvbGF0ZWRDb3B5KCksIGl0LT52YWx1ZS5pc29sYXRlZENvcHkoKSkpOwogICAg
IH0KICAgICByZXR1cm4gZGF0YS5yZWxlYXNlKCk7CiB9CkBAIC0xMDAsNyArMTAwLDcgQEAgU3Ry
aW5nIEhUVFBIZWFkZXJNYXA6OmdldChjb25zdCBjaGFyKiBuYW1lKSBjb25zdAogICAgIGNvbnN0
X2l0ZXJhdG9yIGkgPSBmaW5kPGNvbnN0IGNoYXIqLCBDYXNlRm9sZGluZ0NTdHJpbmdUcmFuc2xh
dG9yPihuYW1lKTsKICAgICBpZiAoaSA9PSBlbmQoKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygp
OwotICAgIHJldHVybiBpLT5zZWNvbmQ7CisgICAgcmV0dXJuIGktPnZhbHVlOwogfQogICAgIAog
Ym9vbCBIVFRQSGVhZGVyTWFwOjpjb250YWlucyhjb25zdCBjaGFyKiBuYW1lKSBjb25zdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9NSU1FSGVhZGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvTUlNRUhlYWRlci5jcHAKaW5kZXggNWQ2
Yjg1OGY0NmU0MzgzZmNiMmZlYTYyODU4YWY3NTMyZDQzYTVhZi4uZjRlM2ViZjY3NGRlNmJkMWQy
NGE5NTkwYTQ4MThiZWI2ZmQ4ZGU2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9NSU1FSGVhZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL01JTUVIZWFkZXIuY3BwCkBAIC04Niw3ICs4Niw3IEBAIFBhc3NSZWZQdHI8TUlNRUhl
YWRlcj4gTUlNRUhlYWRlcjo6cGFyc2VIZWFkZXIoU2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXIqIGJ1
ZmZlcikKICAgICBLZXlWYWx1ZU1hcDo6aXRlcmF0b3IgbWltZVBhcmFtZXRlcnNJdGVyYXRvciA9
IGtleVZhbHVlUGFpcnMuZmluZCgiY29udGVudC10eXBlIik7CiAgICAgaWYgKG1pbWVQYXJhbWV0
ZXJzSXRlcmF0b3IgIT0ga2V5VmFsdWVQYWlycy5lbmQoKSkgewogICAgICAgICAvLyBGSVhNRTog
bWFrZSBDb250ZW50VHlwZVBhcnNlciBtb3JlIGZsZXhpYmxlIHNvIHdlIGRvbid0IGhhdmUgdG8g
c3ludGhlc2l6ZSB0aGUgIkNvbnRlbnQtVHlwZToiLgotICAgICAgICBDb250ZW50VHlwZVBhcnNl
ciBjb250ZW50VHlwZVBhcnNlcihtYWtlU3RyaW5nKCJDb250ZW50LVR5cGU6IiwgbWltZVBhcmFt
ZXRlcnNJdGVyYXRvci0+c2Vjb25kKSk7CisgICAgICAgIENvbnRlbnRUeXBlUGFyc2VyIGNvbnRl
bnRUeXBlUGFyc2VyKG1ha2VTdHJpbmcoIkNvbnRlbnQtVHlwZToiLCBtaW1lUGFyYW1ldGVyc0l0
ZXJhdG9yLT52YWx1ZSkpOwogICAgICAgICBtaW1lSGVhZGVyLT5tX2NvbnRlbnRUeXBlID0gY29u
dGVudFR5cGVQYXJzZXIubWltZVR5cGUoKTsKICAgICAgICAgaWYgKCFtaW1lSGVhZGVyLT5pc011
bHRpcGFydCgpKQogICAgICAgICAgICAgbWltZUhlYWRlci0+bV9jaGFyc2V0ID0gY29udGVudFR5
cGVQYXJzZXIuY2hhcnNldCgpLnN0cmlwV2hpdGVTcGFjZSgpOwpAQCAtMTA1LDExICsxMDUsMTEg
QEAgUGFzc1JlZlB0cjxNSU1FSGVhZGVyPiBNSU1FSGVhZGVyOjpwYXJzZUhlYWRlcihTaGFyZWRC
dWZmZXJDaHVua1JlYWRlciogYnVmZmVyKQogCiAgICAgbWltZVBhcmFtZXRlcnNJdGVyYXRvciA9
IGtleVZhbHVlUGFpcnMuZmluZCgiY29udGVudC10cmFuc2Zlci1lbmNvZGluZyIpOwogICAgIGlm
IChtaW1lUGFyYW1ldGVyc0l0ZXJhdG9yICE9IGtleVZhbHVlUGFpcnMuZW5kKCkpCi0gICAgICAg
IG1pbWVIZWFkZXItPm1fY29udGVudFRyYW5zZmVyRW5jb2RpbmcgPSBwYXJzZUNvbnRlbnRUcmFu
c2ZlckVuY29kaW5nKG1pbWVQYXJhbWV0ZXJzSXRlcmF0b3ItPnNlY29uZCk7CisgICAgICAgIG1p
bWVIZWFkZXItPm1fY29udGVudFRyYW5zZmVyRW5jb2RpbmcgPSBwYXJzZUNvbnRlbnRUcmFuc2Zl
ckVuY29kaW5nKG1pbWVQYXJhbWV0ZXJzSXRlcmF0b3ItPnZhbHVlKTsKIAogICAgIG1pbWVQYXJh
bWV0ZXJzSXRlcmF0b3IgPSBrZXlWYWx1ZVBhaXJzLmZpbmQoImNvbnRlbnQtbG9jYXRpb24iKTsK
ICAgICBpZiAobWltZVBhcmFtZXRlcnNJdGVyYXRvciAhPSBrZXlWYWx1ZVBhaXJzLmVuZCgpKQot
ICAgICAgICBtaW1lSGVhZGVyLT5tX2NvbnRlbnRMb2NhdGlvbiA9IG1pbWVQYXJhbWV0ZXJzSXRl
cmF0b3ItPnNlY29uZDsKKyAgICAgICAgbWltZUhlYWRlci0+bV9jb250ZW50TG9jYXRpb24gPSBt
aW1lUGFyYW1ldGVyc0l0ZXJhdG9yLT52YWx1ZTsKIAogICAgIHJldHVybiBtaW1lSGVhZGVyLnJl
bGVhc2UoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
UmVzb3VyY2VIYW5kbGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNv
dXJjZUhhbmRsZS5jcHAKaW5kZXggN2RkYzQ3ZTRlYTc5OWE0NmRlZTZmMzJjZmQwNzhlZjc1MTU0
ZjFlZS4uNmQxMmY5ZDg5YjAyNDc3NDZhNTdlMWJiY2FmYjJjMjE3ZDU5MTAzNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAKQEAg
LTcxLDcgKzcxLDcgQEAgUGFzc1JlZlB0cjxSZXNvdXJjZUhhbmRsZT4gUmVzb3VyY2VIYW5kbGU6
OmNyZWF0ZShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY28KICAgICBCdWlsdGluUmVzb3Vy
Y2VIYW5kbGVDb25zdHJ1Y3Rvck1hcDo6aXRlcmF0b3IgcHJvdG9jb2xNYXBJdGVtID0gYnVpbHRp
blJlc291cmNlSGFuZGxlQ29uc3RydWN0b3JNYXAoKS5maW5kKHJlcXVlc3QudXJsKCkucHJvdG9j
b2woKSk7CiAKICAgICBpZiAocHJvdG9jb2xNYXBJdGVtICE9IGJ1aWx0aW5SZXNvdXJjZUhhbmRs
ZUNvbnN0cnVjdG9yTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiBwcm90b2NvbE1hcEl0ZW0t
PnNlY29uZChyZXF1ZXN0LCBjbGllbnQpOworICAgICAgICByZXR1cm4gcHJvdG9jb2xNYXBJdGVt
LT52YWx1ZShyZXF1ZXN0LCBjbGllbnQpOwogCiAgICAgUmVmUHRyPFJlc291cmNlSGFuZGxlPiBu
ZXdIYW5kbGUoYWRvcHRSZWYobmV3IFJlc291cmNlSGFuZGxlKHJlcXVlc3QsIGNsaWVudCwgZGVm
ZXJzTG9hZGluZywgc2hvdWxkQ29udGVudFNuaWZmKSkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcAppbmRleCAz
NTA5NzkyOTI3OGM3NjA2NGM0YjBkZWI5YWZlMzlmZjE5YmU0YzI0Li41MzE1YzFlMzc2YWYyNjg2
NGYzODE2MjI1NTliMDliOTZiYTFlMjdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHAKQEAgLTM3Myw3ICszNzMs
NyBAQCB2b2lkIFJlc291cmNlUmVxdWVzdEJhc2U6OmFkZEhUVFBIZWFkZXJGaWVsZChjb25zdCBB
dG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cgogICAgIHVwZGF0ZVJlc291cmNlUmVxdWVzdCgp
OwogICAgIEhUVFBIZWFkZXJNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX2h0dHBIZWFkZXJGaWVs
ZHMuYWRkKG5hbWUsIHZhbHVlKTsKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAg
ICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCArPSAiLCIgKyB2YWx1ZTsKKyAgICAgICAgcmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZSArPSAiLCIgKyB2YWx1ZTsKIAogICAgIGlmICh1cmwoKS5wcm90b2Nv
bElzSW5IVFRQRmFtaWx5KCkpCiAgICAgICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZh
bHNlOwpAQCAtMzgzLDcgKzM4Myw3IEBAIHZvaWQgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6YWRkSFRU
UEhlYWRlckZpZWxkcyhjb25zdCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJGaWVsZHMpCiB7CiAgICAg
SFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaGVhZGVyRmllbGRzLmVuZCgpOwog
ICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBoZWFkZXJGaWVsZHMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBhZGRIVFRQSGVhZGVyRmllbGQoaXQt
PmZpcnN0LCBpdC0+c2Vjb25kKTsKKyAgICAgICAgYWRkSFRUUEhlYWRlckZpZWxkKGl0LT5rZXks
IGl0LT52YWx1ZSk7CiB9CiAKIGJvb2wgZXF1YWxJZ25vcmluZ0hlYWRlckZpZWxkcyhjb25zdCBS
ZXNvdXJjZVJlcXVlc3RCYXNlJiBhLCBjb25zdCBSZXNvdXJjZVJlcXVlc3RCYXNlJiBiKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L05ldHdv
cmtKb2IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L05l
dHdvcmtKb2IuY3BwCmluZGV4IGE0YmFmZDRjOThiNzkwYjVhM2Y0M2Y5ODIxNmVjZGM3MWUxNTc4
NmYuLjZhMmQxZTgzNTJjOWU3ZTVkNTJiYmNkYmE4ZTNlNmUxMGJjNjMzZjQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9OZXR3b3JrSm9iLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvTmV0d29y
a0pvYi5jcHAKQEAgLTI0NSw5ICsyNDUsOSBAQCB2b2lkIE5ldHdvcmtKb2I6Om5vdGlmeUhlYWRl
cnNSZWNlaXZlZChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TmV0d29ya1JlcXVlc3Q6OkhlYQogICAg
IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpOZXR3b3JrUmVxdWVzdDo6SGVhZGVyTGlzdDo6Y29uc3Rf
aXRlcmF0b3IgZW5kSXQgPSBoZWFkZXJzLmVuZCgpOwogICAgIGZvciAoQmxhY2tCZXJyeTo6UGxh
dGZvcm06Ok5ldHdvcmtSZXF1ZXN0OjpIZWFkZXJMaXN0Ojpjb25zdF9pdGVyYXRvciBpdCA9IGhl
YWRlcnMuYmVnaW4oKTsgaXQgIT0gZW5kSXQ7ICsraXQpIHsKICAgICAgICAgaWYgKHNob3VsZERl
ZmVyTG9hZGluZygpKQotICAgICAgICAgICAgbV9kZWZlcnJlZERhdGEuZGVmZXJIZWFkZXJSZWNl
aXZlZChpdC0+Zmlyc3QuY19zdHIoKSwgaXQtPnNlY29uZC5jX3N0cigpKTsKKyAgICAgICAgICAg
IG1fZGVmZXJyZWREYXRhLmRlZmVySGVhZGVyUmVjZWl2ZWQoaXQtPmtleS5jX3N0cigpLCBpdC0+
dmFsdWUuY19zdHIoKSk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgU3RyaW5nIGtleVN0
cmluZyhpdC0+Zmlyc3QuY19zdHIoKSk7CisgICAgICAgICAgICBTdHJpbmcga2V5U3RyaW5nKGl0
LT5rZXkuY19zdHIoKSk7CiAgICAgICAgICAgICBTdHJpbmcgdmFsdWVTdHJpbmc7CiAgICAgICAg
ICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2Uoa2V5U3RyaW5nLCAiTG9jYXRpb24iKSkgewogICAg
ICAgICAgICAgICAgIC8vIExvY2F0aW9uLCBsaWtlIGFsbCBoZWFkZXJzLCBpcyBzdXBwb3NlZCB0
byBiZSBMYXRpbi0xLiBCdXQgc29tZSBzaXRlcyAod2lraXBlZGlhKSBzZW5kIGl0IGluIFVURi04
LgpAQCAtMjU4LDExICsyNTgsMTEgQEAgdm9pZCBOZXR3b3JrSm9iOjpub3RpZnlIZWFkZXJzUmVj
ZWl2ZWQoQmxhY2tCZXJyeTo6UGxhdGZvcm06Ok5ldHdvcmtSZXF1ZXN0OjpIZWEKICAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogbWF5YmUgd2Ugc2hvdWxkIGRvIHRoaXMgd2l0aCBvdGhlciBoZWFk
ZXJzPwogICAgICAgICAgICAgICAgIC8vIFNraXAgaXQgZm9yIG5vdyAtIHdlIGRvbid0IHdhbnQg
dG8gcmV3cml0ZSByYW5kb20gYnl0ZXMgdW5sZXNzIHdlJ3JlIHN1cmUuIChEZWZpbml0ZWx5IGRv
bid0IHdhbnQgdG8KICAgICAgICAgICAgICAgICAvLyByZXdyaXRlIGNvb2tpZXMsIGZvciBpbnN0
YW5jZS4pIE5lZWRzIG1vcmUgaW52ZXN0aWdhdGlvbi4KLSAgICAgICAgICAgICAgICB2YWx1ZVN0
cmluZyA9IFN0cmluZzo6ZnJvbVVURjgoaXQtPnNlY29uZC5jX3N0cigpKTsKKyAgICAgICAgICAg
ICAgICB2YWx1ZVN0cmluZyA9IFN0cmluZzo6ZnJvbVVURjgoaXQtPnZhbHVlLmNfc3RyKCkpOwog
ICAgICAgICAgICAgICAgIGlmICh2YWx1ZVN0cmluZy5pc051bGwoKSkKLSAgICAgICAgICAgICAg
ICAgICAgdmFsdWVTdHJpbmcgPSBpdC0+c2Vjb25kLmNfc3RyKCk7CisgICAgICAgICAgICAgICAg
ICAgIHZhbHVlU3RyaW5nID0gaXQtPnZhbHVlLmNfc3RyKCk7CiAgICAgICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgICAgICB2YWx1ZVN0cmluZyA9IGl0LT5zZWNvbmQuY19zdHIoKTsKKyAgICAg
ICAgICAgICAgICB2YWx1ZVN0cmluZyA9IGl0LT52YWx1ZS5jX3N0cigpOwogCiAgICAgICAgICAg
ICBoYW5kbGVOb3RpZnlIZWFkZXJSZWNlaXZlZChrZXlTdHJpbmcsIHZhbHVlU3RyaW5nKTsKICAg
ICAgICAgfQpAQCAtMzM2LDE0ICszMzYsMTQgQEAgdm9pZCBOZXR3b3JrSm9iOjpoYW5kbGVOb3Rp
ZnlNdWx0aXBhcnRIZWFkZXJSZWNlaXZlZChjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3QKICAg
ICAgICAgICAgIGJvb2wgbmVlZHNDb3B5ZnJvbU9yaWdpbmFsUmVzcG9uc2UgPSB0cnVlOwogICAg
ICAgICAgICAgaW50IHJlcGxhY2VIZWFkZXJzSW5kZXggPSAwOwogICAgICAgICAgICAgd2hpbGUg
KEJsYWNrQmVycnk6OlBsYXRmb3JtOjpNdWx0aXBhcnRTdHJlYW06OnJlcGxhY2VIZWFkZXJzW3Jl
cGxhY2VIZWFkZXJzSW5kZXhdKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGl0LT5maXJzdC5sb3dl
cigpID09IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpNdWx0aXBhcnRTdHJlYW06OnJlcGxhY2VIZWFk
ZXJzW3JlcGxhY2VIZWFkZXJzSW5kZXhdKSB7CisgICAgICAgICAgICAgICAgaWYgKGl0LT5rZXku
bG93ZXIoKSA9PSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TXVsdGlwYXJ0U3RyZWFtOjpyZXBsYWNl
SGVhZGVyc1tyZXBsYWNlSGVhZGVyc0luZGV4XSkgewogICAgICAgICAgICAgICAgICAgICBuZWVk
c0NvcHlmcm9tT3JpZ2luYWxSZXNwb25zZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcmVwbGFjZUhlYWRlcnNJ
bmRleCsrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKG5lZWRzQ29weWZyb21Pcmln
aW5hbFJlc3BvbnNlKQotICAgICAgICAgICAgICAgIG1fbXVsdGlwYXJ0UmVzcG9uc2UtPnNldEhU
VFBIZWFkZXJGaWVsZChpdC0+Zmlyc3QsIGl0LT5zZWNvbmQpOworICAgICAgICAgICAgICAgIG1f
bXVsdGlwYXJ0UmVzcG9uc2UtPnNldEhUVFBIZWFkZXJGaWVsZChpdC0+a2V5LCBpdC0+dmFsdWUp
OwogICAgICAgICB9CiAKICAgICAgICAgbV9tdWx0aXBhcnRSZXNwb25zZS0+c2V0SXNNdWx0aXBh
cnRQYXlsb2FkKHRydWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9ibGFja2JlcnJ5L1Jlc291cmNlUmVxdWVzdEJsYWNrQmVycnkuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlUmVxdWVzdEJsYWNrQmVy
cnkuY3BwCmluZGV4IDI0ZTU2ZGJhYjNjNTljZDI5OWQ3M2E1YTQ0NzI1NjkzMWU1NzY3MmIuLjdl
NDllNjVhZjYyOWZjN2IxM2VkM2RlOWI2NmI3ODg4NDQzNjA4YjUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJjZVJlcXVlc3RCbGFj
a0JlcnJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVy
cnkvUmVzb3VyY2VSZXF1ZXN0QmxhY2tCZXJyeS5jcHAKQEAgLTE1MCw5ICsxNTAsOSBAQCB2b2lk
IFJlc291cmNlUmVxdWVzdDo6aW5pdGlhbGl6ZVBsYXRmb3JtUmVxdWVzdChOZXR3b3JrUmVxdWVz
dCYgcGxhdGZvcm1SZXF1ZXN0LAogICAgICAgICB9CiAKICAgICAgICAgZm9yIChIVFRQSGVhZGVy
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGh0dHBIZWFkZXJGaWVsZHMoKS5iZWdpbigpOyBpdCAh
PSBodHRwSGVhZGVyRmllbGRzKCkuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgICAgIFN0cmluZyBr
ZXkgPSBpdC0+Zmlyc3Q7Ci0gICAgICAgICAgICBTdHJpbmcgdmFsdWUgPSBpdC0+c2Vjb25kOwot
ICAgICAgICAgICAgaWYgKCFrZXkuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBTdHJpbmcga2V5
ID0gaXQtPmtleTsKKyAgICAgICAgICAgIFN0cmluZyB2YWx1ZSA9IGl0LT52YWx1ZTsKKyAgICAg
ICAgICAgIGlmICgha2V5LmlzRW1wdHkoKSAmJiAhdmFsdWUuaXNFbXB0eSgpKSB7CiAgICAgICAg
ICAgICAgICAgLy8gV2UgbmVlZCB0byBjaGVjayB0aGUgZW5jb2RpbmcgYW5kIGVuY29kZSB0aGUg
Y29va2llJ3MgdmFsdWUgdXNpbmcgbGF0aW4xIG9yIHV0ZjggdG8gc3VwcG9ydCB1bmljb2RlIGNo
YXJhY3RlcnMuCiAgICAgICAgICAgICAgICAgLy8gV2Ugd28ndCB1c2UgdGhlIG9sZCBjb29raWVz
IG9mIHJlc291cmNlUmVxdWVzdCBmb3IgbmV3IGxvY2F0aW9uIGJlY2F1c2UgdGhlc2UgY29va2ll
cyBtYXkgYmUgY2hhbmdlZCBieSByZWRpcmVjdGlvbi4KICAgICAgICAgICAgICAgICBpZiAoIWVx
dWFsSWdub3JpbmdDYXNlKGtleSwgIkNvb2tpZSIpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRk5ldC5jcHAKaW5kZXgg
MGYzOWViMGJkOGM3NmQ1MTEwM2RhZmJlYzNmYjExYTVhZDZkNDRlYS4uMzc0NWY2MzFiYTBmMjE4
ZTgyZWI0ODgxMzgwZTgyMzkyYzA2MDIxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZOZXQuY3BwCkBAIC00MTgs
NyArNDE4LDcgQEAgc3RhdGljIENGVVJMUmVxdWVzdFJlZiBtYWtlRmluYWxSZXF1ZXN0KGNvbnN0
IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgYm9vbCBzaG8KICAgICAgICAgaWYgKCFzc2xQcm9w
cykKICAgICAgICAgICAgIHNzbFByb3BzLmFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlTXV0YWJs
ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3Ms
ICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CiAjaWYgUExBVEZPUk0oV0lOKQot
ICAgICAgICB3a1NldENsaWVudENlcnRpZmljYXRlSW5TU0xQcm9wZXJ0aWVzKHNzbFByb3BzLmdl
dCgpLCAoY2xpZW50Q2VydC0+c2Vjb25kKS5nZXQoKSk7CisgICAgICAgIHdrU2V0Q2xpZW50Q2Vy
dGlmaWNhdGVJblNTTFByb3BlcnRpZXMoc3NsUHJvcHMuZ2V0KCksIChjbGllbnRDZXJ0LT52YWx1
ZSkuZ2V0KCkpOwogI2VuZGlmCiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlUmVxdWVzdENGTmV0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0Q0ZOZXQuY3BwCmluZGV4IDI3
OWQ3NTViMmM4YjIyNmJhZjgxY2I0NzE3NThiZjZjODc1ZTdhZjMuLmM0ZWFlMmVjNjVlMTYzZWFl
OTBiOTdlYjVlZTNjY2JmYjUyYjJlZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0Q0ZOZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0Q0ZOZXQuY3BwCkBAIC0xMjAs
OCArMTIwLDggQEAgc3RhdGljIGlubGluZSB2b2lkIHNldEhlYWRlckZpZWxkcyhDRk11dGFibGVV
UkxSZXF1ZXN0UmVmIHJlcXVlc3QsIGNvbnN0IEhUVFBIZWEKIAogICAgIEhUVFBIZWFkZXJNYXA6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHJlcXVlc3RIZWFkZXJzLmVuZCgpOwogICAgIGZvciAoSFRU
UEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSByZXF1ZXN0SGVhZGVycy5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgQ0ZTdHJpbmdSZWYga2V5ID0gaXQtPmZpcnN0LmNy
ZWF0ZUNGU3RyaW5nKCk7Ci0gICAgICAgIENGU3RyaW5nUmVmIHZhbHVlID0gaXQtPnNlY29uZC5j
cmVhdGVDRlN0cmluZygpOworICAgICAgICBDRlN0cmluZ1JlZiBrZXkgPSBpdC0+a2V5LmNyZWF0
ZUNGU3RyaW5nKCk7CisgICAgICAgIENGU3RyaW5nUmVmIHZhbHVlID0gaXQtPnZhbHVlLmNyZWF0
ZUNGU3RyaW5nKCk7CiAgICAgICAgIENGVVJMUmVxdWVzdFNldEhUVFBIZWFkZXJGaWVsZFZhbHVl
KHJlcXVlc3QsIGtleSwgdmFsdWUpOwogICAgICAgICBDRlJlbGVhc2Uoa2V5KTsKICAgICAgICAg
Q0ZSZWxlYXNlKHZhbHVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHAKaW5kZXggZjBmZDQw
M2Y4Y2NjMzFmMDFkNmZmOGQwMjk2NTVhNTkyMTBmMmFjYy4uMGY4ZTVhZDcxYmVjYTdiZGZlYzkz
MzA5OGM5ZGIzYjU0YmIxMDhjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHAKQEAgLTcw
Myw4ICs3MDMsOCBAQCB2b2lkIFJlc291cmNlSGFuZGxlTWFuYWdlcjo6aW5pdGlhbGl6ZUhhbmRs
ZShSZXNvdXJjZUhhbmRsZSogam9iKQogICAgICAgICBIVFRQSGVhZGVyTWFwIGN1c3RvbUhlYWRl
cnMgPSBqb2ItPmZpcnN0UmVxdWVzdCgpLmh0dHBIZWFkZXJGaWVsZHMoKTsKICAgICAgICAgSFRU
UEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY3VzdG9tSGVhZGVycy5lbmQoKTsKICAg
ICAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGN1c3RvbUhlYWRl
cnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBTdHJpbmcga2V5ID0g
aXQtPmZpcnN0OwotICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0gaXQtPnNlY29uZDsKKyAgICAg
ICAgICAgIFN0cmluZyBrZXkgPSBpdC0+a2V5OworICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0g
aXQtPnZhbHVlOwogICAgICAgICAgICAgU3RyaW5nIGhlYWRlclN0cmluZyhrZXkpOwogICAgICAg
ICAgICAgaGVhZGVyU3RyaW5nLmFwcGVuZCgiOiAiKTsKICAgICAgICAgICAgIGhlYWRlclN0cmlu
Zy5hcHBlbmQodmFsdWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9tYWMvUmVzb3VyY2VSZXF1ZXN0TWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9tYWMvUmVzb3VyY2VSZXF1ZXN0TWFjLm1tCmluZGV4IDEyMGY0YWNiNTZiY2MwNGY1
NTdjZmM4YWYyNGRmNDhiOTMxZWQzZWEuLjIxNDYzY2ZkYTY5ZmQ4OTc1MzA4ZWNiZDdiMTQ4OWQ4
MmRlOGQ4ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFj
L1Jlc291cmNlUmVxdWVzdE1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL21hYy9SZXNvdXJjZVJlcXVlc3RNYWMubW0KQEAgLTE1Miw3ICsxNTIsNyBAQCB2b2lkIFJl
c291cmNlUmVxdWVzdDo6ZG9VcGRhdGVQbGF0Zm9ybVJlcXVlc3QoKQogICAgICAgICBbbnNSZXF1
ZXN0IHNldFZhbHVlOm5pbCBmb3JIVFRQSGVhZGVyRmllbGQ6W29sZEhlYWRlckZpZWxkTmFtZXMg
b2JqZWN0QXRJbmRleDppIC0gMV1dOwogICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IGh0dHBIZWFkZXJGaWVsZHMoKS5lbmQoKTsKICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaHR0cEhlYWRlckZpZWxkcygpLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkKLSAgICAgICAgW25zUmVxdWVzdCBzZXRWYWx1ZTppdC0+c2Vjb25kIGZvckhUVFBI
ZWFkZXJGaWVsZDppdC0+Zmlyc3RdOworICAgICAgICBbbnNSZXF1ZXN0IHNldFZhbHVlOml0LT52
YWx1ZSBmb3JIVFRQSGVhZGVyRmllbGQ6aXQtPmtleV07CiAKICAgICAvLyBUaGUgYmVsb3cgY2hl
Y2sgY2FuIGJlIHJlbW92ZWQgb25jZSB3ZSByZXF1aXJlIGEgdmVyc2lvbiBvZiBGb3VuZGF0aW9u
IHdpdGggLVtOU011dGFibGVVUkxSZXF1ZXN0IHNldENvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5n
RmFsbGJhY2tBcnJheTpdIG1ldGhvZC4KICAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0NvbnRlbnRE
aXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheSA9IFtOU011dGFibGVVUkxSZXF1ZXN0IGlu
c3RhbmNlc1Jlc3BvbmRUb1NlbGVjdG9yOkBzZWxlY3RvcihzZXRDb250ZW50RGlzcG9zaXRpb25F
bmNvZGluZ0ZhbGxiYWNrQXJyYXk6KV07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3F0L1Jlc291cmNlUmVxdWVzdFF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvcXQvUmVzb3VyY2VSZXF1ZXN0UXQuY3BwCmluZGV4IGJmYjI0MTQwYmRm
NGY1ZWYxOWI5ZDlhYTIxNWY1ZWI4MWRiMzAwMTkuLjRjMjJhNmEzYTg0MjMwMjM5N2U0N2RhZDky
YzNhMjNmNTQ2ZGY1ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvcXQvUmVzb3VyY2VSZXF1ZXN0UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvcXQvUmVzb3VyY2VSZXF1ZXN0UXQuY3BwCkBAIC00OSw4ICs0OSw4IEBAIFFOZXR3
b3JrUmVxdWVzdCBSZXNvdXJjZVJlcXVlc3Q6OnRvTmV0d29ya1JlcXVlc3QoTmV0d29ya2luZ0Nv
bnRleHQgKmNvbnRleHQpIGNvCiAgICAgY29uc3QgSFRUUEhlYWRlck1hcCAmaGVhZGVycyA9IGh0
dHBIZWFkZXJGaWVsZHMoKTsKICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gaGVhZGVycy5iZWdpbigpLCBlbmQgPSBoZWFkZXJzLmVuZCgpOwogICAgICAgICAgaXQg
IT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFFCeXRlQXJyYXkgbmFtZSA9IFFTdHJpbmcoaXQtPmZp
cnN0KS50b0FzY2lpKCk7Ci0gICAgICAgIFFCeXRlQXJyYXkgdmFsdWUgPSBRU3RyaW5nKGl0LT5z
ZWNvbmQpLnRvQXNjaWkoKTsKKyAgICAgICAgUUJ5dGVBcnJheSBuYW1lID0gUVN0cmluZyhpdC0+
a2V5KS50b0FzY2lpKCk7CisgICAgICAgIFFCeXRlQXJyYXkgdmFsdWUgPSBRU3RyaW5nKGl0LT52
YWx1ZSkudG9Bc2NpaSgpOwogICAgICAgICAvLyBRTmV0d29ya1JlcXVlc3Q6OnNldFJhd0hlYWRl
cigpIHdvdWxkIHJlbW92ZSB0aGUgaGVhZGVyIGlmIHRoZSB2YWx1ZSBpcyBudWxsCiAgICAgICAg
IC8vIE1ha2Ugc3VyZSB0byBzZXQgYW4gZW1wdHkgaGVhZGVyIGluc3RlYWQgb2YgbnVsbCBoZWFk
ZXIuCiAgICAgICAgIGlmICghdmFsdWUuaXNOdWxsKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0U291cC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0U291cC5jcHAK
aW5kZXggZDcxMjdiNGI1YjhlNDU5YTRjYWVjNTVhNTUyN2JiY2YzYzgzNzc4NS4uNTdhYjRkNjQ3
YjNiZmZjMjViYTkyMzc3OGM3MWQ0ZjRiZWUxNWNiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVzdFNvdXAuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNw
cApAQCAtNDMsNyArNDMsNyBAQCB2b2lkIFJlc291cmNlUmVxdWVzdDo6dXBkYXRlU291cE1lc3Nh
Z2UoU291cE1lc3NhZ2UqIHNvdXBNZXNzYWdlKSBjb25zdAogICAgIGlmICghaGVhZGVycy5pc0Vt
cHR5KCkpIHsKICAgICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaGVh
ZGVycy5lbmQoKTsKICAgICAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IGhlYWRlcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgc291cF9t
ZXNzYWdlX2hlYWRlcnNfYXBwZW5kKHNvdXBIZWFkZXJzLCBpdC0+Zmlyc3Quc3RyaW5nKCkudXRm
OCgpLmRhdGEoKSwgaXQtPnNlY29uZC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIHNvdXBf
bWVzc2FnZV9oZWFkZXJzX2FwcGVuZChzb3VwSGVhZGVycywgaXQtPmtleS5zdHJpbmcoKS51dGY4
KCkuZGF0YSgpLCBpdC0+dmFsdWUudXRmOCgpLmRhdGEoKSk7CiAgICAgfQogCiAgICAgU3RyaW5n
IGZpcnN0UGFydHlTdHJpbmcgPSBmaXJzdFBhcnR5Rm9yQ29va2llcygpLnN0cmluZygpOwpAQCAt
NjYsNyArNjYsNyBAQCBTb3VwTWVzc2FnZSogUmVzb3VyY2VSZXF1ZXN0Ojp0b1NvdXBNZXNzYWdl
KCkgY29uc3QKICAgICBpZiAoIWhlYWRlcnMuaXNFbXB0eSgpKSB7CiAgICAgICAgIEhUVFBIZWFk
ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGhlYWRlcnMuZW5kKCk7CiAgICAgICAgIGZvciAo
SFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBoZWFkZXJzLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkKLSAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChzb3Vw
SGVhZGVycywgaXQtPmZpcnN0LnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGl0LT5zZWNvbmQudXRm
OCgpLmRhdGEoKSk7CisgICAgICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQoc291
cEhlYWRlcnMsIGl0LT5rZXkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgaXQtPnZhbHVlLnV0Zjgo
KS5kYXRhKCkpOwogICAgIH0KIAogICAgIFN0cmluZyBmaXJzdFBhcnR5U3RyaW5nID0gZmlyc3RQ
YXJ0eUZvckNvb2tpZXMoKS5zdHJpbmcoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlc3BvbnNlU291cC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXNwb25zZVNvdXAuY3BwCmluZGV4
IDE1NTA0OGIyYmYyZjI0NDAyYmJkODlmNDM0NDRmNDI0YjI2Y2FmY2MuLjJmZmViNTYzYWRlOGM0
YjBjNzRlYzk1MTRkZTk5ZTcyMGM5OGQyMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlc3BvbnNlU291cC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVzcG9uc2VTb3VwLmNwcApA
QCAtNDYsNyArNDYsNyBAQCBTb3VwTWVzc2FnZSogUmVzb3VyY2VSZXNwb25zZTo6dG9Tb3VwTWVz
c2FnZSgpIGNvbnN0CiAgICAgaWYgKCFoZWFkZXJzLmlzRW1wdHkoKSkgewogICAgICAgICBIVFRQ
SGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBoZWFkZXJzLmVuZCgpOwogICAgICAgICBm
b3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaGVhZGVycy5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQo
c291cEhlYWRlcnMsIGl0LT5maXJzdC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBpdC0+c2Vjb25k
LnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5k
KHNvdXBIZWFkZXJzLCBpdC0+a2V5LnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGl0LT52YWx1ZS51
dGY4KCkuZGF0YSgpKTsKICAgICB9CiAKICAgICBzb3VwX21lc3NhZ2Vfc2V0X2ZsYWdzKHNvdXBN
ZXNzYWdlLCBtX3NvdXBGbGFncyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3dpbi9SZXNvdXJjZUhhbmRsZVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3dpbi9SZXNvdXJjZUhhbmRsZVdpbi5jcHAKaW5kZXggMDIxMmQwY2RhOThj
OWYxMzc5MjhlNjEyZmRmOTUwMzY1YTAxZDBkNi4uZjI1MDUyNzc1YjBkZWRmZTIxYzc1NWQzZjgz
OTk4NTNlN2EwZjM5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay93aW4vUmVzb3VyY2VIYW5kbGVXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvd2luL1Jlc291cmNlSGFuZGxlV2luLmNwcApAQCAtMzIzLDE1ICszMjMsMTUgQEAg
Ym9vbCBSZXNvdXJjZUhhbmRsZTo6c3RhcnQoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQpCiAg
ICAgY29uc3QgSFRUUEhlYWRlck1hcCYgaHR0cEhlYWRlckZpZWxkcyA9IGZpcnN0UmVxdWVzdCgp
Lmh0dHBIZWFkZXJGaWVsZHMoKTsKIAogICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBodHRwSGVhZGVyRmllbGRzLmJlZ2luKCk7IGl0ICE9IGh0dHBIZWFkZXJGaWVs
ZHMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGl0LT5maXJz
dCwgIkFjY2VwdCIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKGl0LT5maXJzdCwgIlJlZmVyZXIiKSB8
fCBlcXVhbElnbm9yaW5nQ2FzZShpdC0+Zmlyc3QsICJVc2VyLUFnZW50IikpCisgICAgICAgIGlm
IChlcXVhbElnbm9yaW5nQ2FzZShpdC0+a2V5LCAiQWNjZXB0IikgfHwgZXF1YWxJZ25vcmluZ0Nh
c2UoaXQtPmtleSwgIlJlZmVyZXIiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShpdC0+a2V5LCAiVXNl
ci1BZ2VudCIpKQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgaWYgKCFodHRwSGVh
ZGVycy5pc0VtcHR5KCkpCiAgICAgICAgICAgICBodHRwSGVhZGVycy5hcHBlbmQoJ1xuJyk7CiAK
LSAgICAgICAgaHR0cEhlYWRlcnMuYXBwZW5kKGl0LT5maXJzdC5jaGFyYWN0ZXJzKCksIGl0LT5m
aXJzdC5sZW5ndGgoKSk7CisgICAgICAgIGh0dHBIZWFkZXJzLmFwcGVuZChpdC0+a2V5LmNoYXJh
Y3RlcnMoKSwgaXQtPmtleS5sZW5ndGgoKSk7CiAgICAgICAgIGh0dHBIZWFkZXJzLmFwcGVuZCgn
OicpOwotICAgICAgICBodHRwSGVhZGVycy5hcHBlbmQoaXQtPnNlY29uZC5jaGFyYWN0ZXJzKCks
IGl0LT5zZWNvbmQubGVuZ3RoKCkpOworICAgICAgICBodHRwSGVhZGVycy5hcHBlbmQoaXQtPnZh
bHVlLmNoYXJhY3RlcnMoKSwgaXQtPnZhbHVlLmxlbmd0aCgpKTsKICAgICB9CiAKICAgICBJTlRF
Uk5FVF9CVUZGRVJTVyBpbnRlcm5ldEJ1ZmZlcnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9xdC9SdW5Mb29wUXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQv
UnVuTG9vcFF0LmNwcAppbmRleCAyOGFiNjdiZGUwMTU1YWM3ZjViODY3MjY2Mjg1ODk0NTQ0NDky
NGU2Li5mYzdhMmQxY2I1YjcxYzMwOWI0Y2NjZTk2Mzg4NGNmYjFjYWVlOTQwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SdW5Mb29wUXQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3F0L1J1bkxvb3BRdC5jcHAKQEAgLTEyNyw3ICsxMjcsNyBAQCB2b2lk
IFJ1bkxvb3A6OlRpbWVyQmFzZTo6dGltZXJGaXJlZChSdW5Mb29wKiBydW5Mb29wLCBpbnQgSUQp
CiB7CiAgICAgVGltZXJNYXA6Oml0ZXJhdG9yIGl0ID0gcnVuTG9vcC0+bV9hY3RpdmVUaW1lcnMu
ZmluZChJRCk7CiAgICAgQVNTRVJUKGl0ICE9IHJ1bkxvb3AtPm1fYWN0aXZlVGltZXJzLmVuZCgp
KTsKLSAgICBUaW1lckJhc2UqIHRpbWVyID0gaXQtPnNlY29uZDsKKyAgICBUaW1lckJhc2UqIHRp
bWVyID0gaXQtPnZhbHVlOwogCiAgICAgaWYgKCF0aW1lci0+bV9pc1JlcGVhdGluZykgewogICAg
ICAgICAvLyBTdG9wIHRoZSB0aW1lciAoY2FsbGluZyBzdG9wIHdvdWxkIG5lZWQgYW5vdGhlciBo
YXNoIHRhYmxlIGxvb2t1cCkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L0xvY2FsZVRvU2NyaXB0TWFwcGluZ0RlZmF1bHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9Mb2NhbGVUb1NjcmlwdE1hcHBpbmdEZWZhdWx0LmNwcAppbmRleCA0ZWQwM2Nl
NGUwN2U1ZDhjOTcxZjlkMWZlZDk1ZjAwOGJmNGE1NjE5Li41ZGM5M2ZmMDk0YTg4ZWU2ZTBmNTUx
MTdkMDJjYmM2ZjZiNGM0MjE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L0xvY2FsZVRvU2NyaXB0TWFwcGluZ0RlZmF1bHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvTG9jYWxlVG9TY3JpcHRNYXBwaW5nRGVmYXVsdC5jcHAKQEAgLTE2MCw3
ICsxNjAsNyBAQCBVU2NyaXB0Q29kZSBzY3JpcHROYW1lVG9Db2RlKGNvbnN0IFN0cmluZyYgc2Ny
aXB0TmFtZSkKIAogICAgIEhhc2hNYXA8U3RyaW5nLCBVU2NyaXB0Q29kZT46Oml0ZXJhdG9yIGl0
ID0gc2NyaXB0TmFtZUNvZGVNYXAuZmluZChzY3JpcHROYW1lLmxvd2VyKCkpOwogICAgIGlmIChp
dCAhPSBzY3JpcHROYW1lQ29kZU1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7
CisgICAgICAgIHJldHVybiBpdC0+dmFsdWU7CiAgICAgcmV0dXJuIFVTQ1JJUFRfSU5WQUxJRF9D
T0RFOwogfQogCkBAIC0zODMsNyArMzgzLDcgQEAgVVNjcmlwdENvZGUgbG9jYWxlVG9TY3JpcHRD
b2RlRm9yRm9udFNlbGVjdGlvbihjb25zdCBTdHJpbmcmIGxvY2FsZSkKICAgICB3aGlsZSAoIWNh
bm9uaWNhbExvY2FsZS5pc0VtcHR5KCkpIHsKICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFVTY3Jp
cHRDb2RlPjo6aXRlcmF0b3IgaXQgPSBsb2NhbGVTY3JpcHRNYXAuZmluZChjYW5vbmljYWxMb2Nh
bGUpOwogICAgICAgICBpZiAoaXQgIT0gbG9jYWxlU2NyaXB0TWFwLmVuZCgpKQotICAgICAgICAg
ICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwogICAg
ICAgICBzaXplX3QgcG9zID0gY2Fub25pY2FsTG9jYWxlLnJldmVyc2VGaW5kKCdfJyk7CiAgICAg
ICAgIGlmIChwb3MgPT0gbm90Rm91bmQpCiAgICAgICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnkuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAKaW5k
ZXggMDUxNTAwNTJmNTRkNTE3YTBhMDFmNjI2MDYxOGViMTU3ZDE4YTdlMy4uZjYwNWEwZjFiNjBl
YzQ4YTE2NjRiMzU3YTMzYWU0YTc0ODk3NmE2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAKQEAgLTE5Niw4ICsxOTYs
OCBAQCBzdGF0aWMgdm9pZCBwcnVuZUJsYWNrbGlzdGVkQ29kZWNzKCkKICAgICAgICAgVGV4dEVu
Y29kaW5nTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSB0ZXh0RW5jb2RpbmdOYW1lTWFwLT5i
ZWdpbigpOwogICAgICAgICBUZXh0RW5jb2RpbmdOYW1lTWFwOjpjb25zdF9pdGVyYXRvciBlbmQg
PSB0ZXh0RW5jb2RpbmdOYW1lTWFwLT5lbmQoKTsKICAgICAgICAgZm9yICg7IGl0ICE9IGVuZDsg
KytpdCkgewotICAgICAgICAgICAgaWYgKGl0LT5zZWNvbmQgPT0gYXRvbWljTmFtZSkKLSAgICAg
ICAgICAgICAgICBuYW1lcy5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgICAgIGlmIChpdC0+
dmFsdWUgPT0gYXRvbWljTmFtZSkKKyAgICAgICAgICAgICAgICBuYW1lcy5hcHBlbmQoaXQtPmtl
eSk7CiAgICAgICAgIH0KIAogICAgICAgICBzaXplX3QgbGVuZ3RoID0gbmFtZXMuc2l6ZSgpOwpA
QCAtMzc5LDcgKzM3OSw3IEBAIHZvaWQgZHVtcFRleHRFbmNvZGluZ05hbWVNYXAoKQogICAgIFRl
eHRFbmNvZGluZ05hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdGV4dEVuY29kaW5nTmFtZU1h
cC0+YmVnaW4oKTsKICAgICBUZXh0RW5jb2RpbmdOYW1lTWFwOjpjb25zdF9pdGVyYXRvciBlbmQg
PSB0ZXh0RW5jb2RpbmdOYW1lTWFwLT5lbmQoKTsKICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0
KQotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiclcycgPT4gJyVzJ1xuIiwgaXQtPmZpcnN0LCBp
dC0+c2Vjb25kKTsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICInJXMnID0+ICclcydcbiIsIGl0
LT5rZXksIGl0LT52YWx1ZSk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC90cmFuc2NvZGVyL0ZvbnRUcmFuc2NvZGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvdHJhbnNjb2Rlci9Gb250VHJhbnNjb2Rlci5jcHAKaW5kZXgg
NGUwN2Y1MGZiZGIwYzU3YzNlZWNhNmY4YmU3MWY3NTA1ZGI1M2JjMC4uNDg0MjI4Y2FhOGU3NjA3
MWIzN2E5ZDIwYTk5MmQ1MGExZDQxZjQwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC90cmFuc2NvZGVyL0ZvbnRUcmFuc2NvZGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L3RyYW5zY29kZXIvRm9udFRyYW5zY29kZXIuY3BwCkBAIC02Niw3
ICs2Niw3IEBAIEZvbnRUcmFuc2NvZGVyOjpDb252ZXJ0ZXJUeXBlIEZvbnRUcmFuc2NvZGVyOjpj
b252ZXJ0ZXJUeXBlKGNvbnN0IEZvbnREZXNjcmlwdGlvCiAgICAgaWYgKCFmb250RmFtaWx5Lmlz
TnVsbCgpKSB7CiAgICAgICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBDb252ZXJ0ZXJUeXBlPjo6
Y29uc3RfaXRlcmF0b3IgZm91bmQgPSBtX2NvbnZlcnRlclR5cGVzLmZpbmQoZm9udEZhbWlseSk7
CiAgICAgICAgIGlmIChmb3VuZCAhPSBtX2NvbnZlcnRlclR5cGVzLmVuZCgpKQotICAgICAgICAg
ICAgcmV0dXJuIGZvdW5kLT5zZWNvbmQ7CisgICAgICAgICAgICByZXR1cm4gZm91bmQtPnZhbHVl
OwogICAgIH0KIAogICAgIC8vIElFJ3MgZGVmYXVsdCBmb250cyBmb3IgSmFwYW5lc2UgZW5jb2Rp
bmdzIGNoYW5nZSBiYWNrc2xhc2hlcyBpbnRvIHllbiBzaWducy4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvd2luY2UvVGV4dENvZGVjV2luQ0UuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC93aW5jZS9UZXh0Q29kZWNXaW5DRS5jcHAKaW5kZXggMGM0
ZWM1MDEyMTQ5YWQwMWNjNWMxOGIyNDE0M2RhMGNlMmI4ZjRjMy4uZjA1ZGUzMjQyOGM4NTBmZGU2
YzBlNDMwOWU2YmZlZjU5YzE1MjdkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC93aW5jZS9UZXh0Q29kZWNXaW5DRS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC93aW5jZS9UZXh0Q29kZWNXaW5DRS5jcHAKQEAgLTEwMSwxNyArMTAxLDE3IEBA
IExhbmd1YWdlTWFuYWdlcjo6TGFuZ3VhZ2VNYW5hZ2VyKCkKICAgICAgICAgICAgICAgICBpID0g
Y29kZVBhZ2VDaGFyc2V0cygpLnNldChjcEluZm8udWlDb2RlUGFnZSwgbmFtZSkuaXRlcmF0b3I7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoaSAhPSBjb2RlUGFnZUNoYXJzZXRzKCku
ZW5kKCkpIHsKLSAgICAgICAgICAgICAgICBIYXNoTWFwPFN0cmluZywgQ2hhcnNldEluZm8+Ojpp
dGVyYXRvciBqID0ga25vd25DaGFyc2V0cygpLmZpbmQoU3RyaW5nKGktPnNlY29uZC5kYXRhKCks
IGktPnNlY29uZC5sZW5ndGgoKSkpOworICAgICAgICAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBD
aGFyc2V0SW5mbz46Oml0ZXJhdG9yIGogPSBrbm93bkNoYXJzZXRzKCkuZmluZChTdHJpbmcoaS0+
dmFsdWUuZGF0YSgpLCBpLT52YWx1ZS5sZW5ndGgoKSkpOwogICAgICAgICAgICAgICAgIEFTU0VS
VChqICE9IGtub3duQ2hhcnNldHMoKS5lbmQoKSk7Ci0gICAgICAgICAgICAgICAgQ2hhcnNldElu
Zm8mIGluZm8gPSBqLT5zZWNvbmQ7Ci0gICAgICAgICAgICAgICAgaW5mby5tX25hbWUgPSBpLT5z
ZWNvbmQuZGF0YSgpOworICAgICAgICAgICAgICAgIENoYXJzZXRJbmZvJiBpbmZvID0gai0+dmFs
dWU7CisgICAgICAgICAgICAgICAgaW5mby5tX25hbWUgPSBpLT52YWx1ZS5kYXRhKCk7CiAgICAg
ICAgICAgICAgICAgaW5mby5tX2ZyaWVuZGx5TmFtZSA9IGNwSW5mby53c3pEZXNjcmlwdGlvbjsK
ICAgICAgICAgICAgICAgICBpbmZvLm1fYWxpYXNlcy5hcHBlbmQobmFtZSk7CiAgICAgICAgICAg
ICAgICAgaW5mby5tX2FsaWFzZXMuYXBwZW5kKFN0cmluZyhjcEluZm8ud3N6SGVhZGVyQ2hhcnNl
dCkubGF0aW4xKCkpOwogICAgICAgICAgICAgICAgIGluZm8ubV9hbGlhc2VzLmFwcGVuZChTdHJp
bmcoY3BJbmZvLndzekJvZHlDaGFyc2V0KS5sYXRpbjEoKSk7CiAgICAgICAgICAgICAgICAgU3Ry
aW5nIGNwTmFtZSA9ICJjcCIgKyBTdHJpbmc6Om51bWJlcihjcEluZm8udWlDb2RlUGFnZSk7CiAg
ICAgICAgICAgICAgICAgaW5mby5tX2FsaWFzZXMuYXBwZW5kKGNwTmFtZS5sYXRpbjEoKSk7Ci0g
ICAgICAgICAgICAgICAgc3VwcG9ydGVkQ2hhcnNldHMoKS5hZGQoaS0+c2Vjb25kLmRhdGEoKSk7
CisgICAgICAgICAgICAgICAgc3VwcG9ydGVkQ2hhcnNldHMoKS5hZGQoaS0+dmFsdWUuZGF0YSgp
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBlbnVtSW50ZXJmYWNlLT5SZWxl
YXNlKCk7CkBAIC0xMjQsNyArMTI0LDcgQEAgc3RhdGljIFVJTlQgZ2V0Q29kZVBhZ2UoY29uc3Qg
Y2hhciogbmFtZSkKICAgICAvLyBzYXlpbmcgIj09IiBpcyBub3QgZm91bmQgZm9yIGNvbnN0X2l0
ZXJhdG9yIGFuZCBpdGVyYXRvcgogICAgIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBDaGFyc2V0SW5m
bz4mIGNoYXJzZXRzID0ga25vd25DaGFyc2V0cygpOwogICAgIEhhc2hNYXA8U3RyaW5nLCBDaGFy
c2V0SW5mbz46OmNvbnN0X2l0ZXJhdG9yIGkgPSBjaGFyc2V0cy5maW5kKG5hbWUpOwotICAgIHJl
dHVybiBpID09IGNoYXJzZXRzLmVuZCgpID8gQ1BfQUNQIDogaS0+c2Vjb25kLm1fY29kZVBhZ2U7
CisgICAgcmV0dXJuIGkgPT0gY2hhcnNldHMuZW5kKCkgPyBDUF9BQ1AgOiBpLT52YWx1ZS5tX2Nv
ZGVQYWdlOwogfQogCiBzdGF0aWMgUGFzc093blB0cjxUZXh0Q29kZWM+IG5ld1RleHRDb2RlY1dp
bkNFKGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcsIGNvbnN0IHZvaWQqKQpAQCAtMTQ3LDkg
KzE0Nyw5IEBAIHZvaWQgVGV4dENvZGVjV2luQ0U6OnJlZ2lzdGVyRXh0ZW5kZWRFbmNvZGluZ05h
bWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJhciByZWdpc3RyCiAgICAgZm9yIChDaGFyc2V0U2V0Ojpp
dGVyYXRvciBpID0gc3VwcG9ydGVkQ2hhcnNldHMoKS5iZWdpbigpOyBpICE9IHN1cHBvcnRlZENo
YXJzZXRzKCkuZW5kKCk7ICsraSkgewogICAgICAgICBIYXNoTWFwPFN0cmluZywgQ2hhcnNldElu
Zm8+OjppdGVyYXRvciBqID0ga25vd25DaGFyc2V0cygpLmZpbmQoKmkpOwogICAgICAgICBpZiAo
aiAhPSBrbm93bkNoYXJzZXRzKCkuZW5kKCkpIHsKLSAgICAgICAgICAgIHJlZ2lzdHJhcihqLT5z
ZWNvbmQubV9uYW1lLmRhdGEoKSwgai0+c2Vjb25kLm1fbmFtZS5kYXRhKCkpOwotICAgICAgICAg
ICAgZm9yIChWZWN0b3I8Q1N0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGFsaWFzID0gai0+c2Vjb25k
Lm1fYWxpYXNlcy5iZWdpbigpOyBhbGlhcyAhPSBqLT5zZWNvbmQubV9hbGlhc2VzLmVuZCgpOyAr
K2FsaWFzKQotICAgICAgICAgICAgICAgIHJlZ2lzdHJhcihhbGlhcy0+ZGF0YSgpLCBqLT5zZWNv
bmQubV9uYW1lLmRhdGEoKSk7CisgICAgICAgICAgICByZWdpc3RyYXIoai0+dmFsdWUubV9uYW1l
LmRhdGEoKSwgai0+dmFsdWUubV9uYW1lLmRhdGEoKSk7CisgICAgICAgICAgICBmb3IgKFZlY3Rv
cjxDU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgYWxpYXMgPSBqLT52YWx1ZS5tX2FsaWFzZXMuYmVn
aW4oKTsgYWxpYXMgIT0gai0+dmFsdWUubV9hbGlhc2VzLmVuZCgpOyArK2FsaWFzKQorICAgICAg
ICAgICAgICAgIHJlZ2lzdHJhcihhbGlhcy0+ZGF0YSgpLCBqLT52YWx1ZS5tX25hbWUuZGF0YSgp
KTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTE2MCw3ICsxNjAsNyBAQCB2b2lkIFRleHRDb2Rl
Y1dpbkNFOjpyZWdpc3RlckV4dGVuZGVkQ29kZWNzKFRleHRDb2RlY1JlZ2lzdHJhciByZWdpc3Ry
YXIpCiAgICAgZm9yIChDaGFyc2V0U2V0OjppdGVyYXRvciBpID0gc3VwcG9ydGVkQ2hhcnNldHMo
KS5iZWdpbigpOyBpICE9IHN1cHBvcnRlZENoYXJzZXRzKCkuZW5kKCk7ICsraSkgewogICAgICAg
ICBIYXNoTWFwPFN0cmluZywgQ2hhcnNldEluZm8+OjppdGVyYXRvciBqID0ga25vd25DaGFyc2V0
cygpLmZpbmQoKmkpOwogICAgICAgICBpZiAoaiAhPSBrbm93bkNoYXJzZXRzKCkuZW5kKCkpCi0g
ICAgICAgICAgICByZWdpc3RyYXIoai0+c2Vjb25kLm1fbmFtZS5kYXRhKCksIG5ld1RleHRDb2Rl
Y1dpbkNFLCAwKTsKKyAgICAgICAgICAgIHJlZ2lzdHJhcihqLT52YWx1ZS5tX25hbWUuZGF0YSgp
LCBuZXdUZXh0Q29kZWNXaW5DRSwgMCk7CiAgICAgfQogfQogCkBAIC0yOTksNyArMjk5LDcgQEAg
dm9pZCBUZXh0Q29kZWNXaW5DRTo6ZW51bWVyYXRlU3VwcG9ydGVkRW5jb2RpbmdzKEVuY29kaW5n
UmVjZWl2ZXImIHJlY2VpdmVyKQogICAgIGxhbmd1YWdlTWFuYWdlcigpOwogICAgIGZvciAoQ2hh
cnNldFNldDo6aXRlcmF0b3IgaSA9IHN1cHBvcnRlZENoYXJzZXRzKCkuYmVnaW4oKTsgaSAhPSBz
dXBwb3J0ZWRDaGFyc2V0cygpLmVuZCgpOyArK2kpIHsKICAgICAgICAgSGFzaE1hcDxTdHJpbmcs
IENoYXJzZXRJbmZvPjo6aXRlcmF0b3IgaiA9IGtub3duQ2hhcnNldHMoKS5maW5kKCppKTsKLSAg
ICAgICAgaWYgKGogIT0ga25vd25DaGFyc2V0cygpLmVuZCgpICYmICFyZWNlaXZlci5yZWNlaXZl
KGotPnNlY29uZC5tX25hbWUuZGF0YSgpLCBqLT5zZWNvbmQubV9mcmllbmRseU5hbWUuY2hhcmFj
dGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgai0+c2Vjb25kLm1fY29kZVBhZ2UpKQorICAgICAg
ICBpZiAoaiAhPSBrbm93bkNoYXJzZXRzKCkuZW5kKCkgJiYgIXJlY2VpdmVyLnJlY2VpdmUoai0+
dmFsdWUubV9uYW1lLmRhdGEoKSwgai0+dmFsdWUubV9mcmllbmRseU5hbWUuY2hhcmFjdGVyc1dp
dGhOdWxsVGVybWluYXRpb24oKSwgai0+dmFsdWUubV9jb2RlUGFnZSkpCiAgICAgICAgICAgICBi
cmVhazsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4v
Q2xpcGJvYXJkVXRpbGl0aWVzV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9D
bGlwYm9hcmRVdGlsaXRpZXNXaW4uY3BwCmluZGV4IGQ2MWMwMTQzMjRhZDY2ZWM3MWJiYWNjNDgy
ZDBiYjc3NjYxYzIyMWYuLjI1Mjc3YjczMTA4Mjk2ODM4Yjg5MjY5NjllN2U5ZWEwNjNkNGZjM2Yg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRVdGlsaXRp
ZXNXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRVdGls
aXRpZXNXaW4uY3BwCkBAIC03NSw3ICs3NSw3IEBAIHN0YXRpYyBib29sIGdldERhdGFNYXBJdGVt
KGNvbnN0IERyYWdEYXRhTWFwKiBkYXRhT2JqZWN0LCBGT1JNQVRFVEMqIGZvcm1hdCwgU3RyCiAg
ICAgRHJhZ0RhdGFNYXA6OmNvbnN0X2l0ZXJhdG9yIGZvdW5kID0gZGF0YU9iamVjdC0+ZmluZChm
b3JtYXQtPmNmRm9ybWF0KTsKICAgICBpZiAoZm91bmQgPT0gZGF0YU9iamVjdC0+ZW5kKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpdGVtID0gZm91bmQtPnNlY29uZFswXTsKKyAgICBp
dGVtID0gZm91bmQtPnZhbHVlWzBdOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC04MTksNyAr
ODE5LDcgQEAgdm9pZCBnZXRDbGlwYm9hcmREYXRhKElEYXRhT2JqZWN0KiBkYXRhT2JqZWN0LCBG
T1JNQVRFVEMqIGZvcm1hdCwgVmVjdG9yPFN0cmluZz4KICAgICBDbGlwYm9hcmRGb3JtYXRNYXA6
OmNvbnN0X2l0ZXJhdG9yIGZvdW5kID0gZm9ybWF0TWFwLmZpbmQoZm9ybWF0LT5jZkZvcm1hdCk7
CiAgICAgaWYgKGZvdW5kID09IGZvcm1hdE1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuOwotICAg
IGZvdW5kLT5zZWNvbmQtPmdldFN0cmluZyhkYXRhT2JqZWN0LCBmb3VuZC0+c2Vjb25kLT5mb3Jt
YXQsIGRhdGFTdHJpbmdzKTsKKyAgICBmb3VuZC0+dmFsdWUtPmdldFN0cmluZyhkYXRhT2JqZWN0
LCBmb3VuZC0+dmFsdWUtPmZvcm1hdCwgZGF0YVN0cmluZ3MpOwogfQogCiB2b2lkIHNldENsaXBi
b2FyZERhdGEoSURhdGFPYmplY3QqIGRhdGFPYmplY3QsIFVJTlQgZm9ybWF0LCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgZGF0YVN0cmluZ3MpCkBAIC04MjgsNyArODI4LDcgQEAgdm9pZCBzZXRDbGlw
Ym9hcmREYXRhKElEYXRhT2JqZWN0KiBkYXRhT2JqZWN0LCBVSU5UIGZvcm1hdCwgY29uc3QgVmVj
dG9yPFN0cmluZz4KICAgICBDbGlwYm9hcmRGb3JtYXRNYXA6OmNvbnN0X2l0ZXJhdG9yIGZvdW5k
ID0gZm9ybWF0TWFwLmZpbmQoZm9ybWF0KTsKICAgICBpZiAoZm91bmQgPT0gZm9ybWF0TWFwLmVu
ZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgZm91bmQtPnNlY29uZC0+c2V0U3RyaW5nKGRhdGFP
YmplY3QsIGZvdW5kLT5zZWNvbmQtPmZvcm1hdCwgZGF0YVN0cmluZ3MpOworICAgIGZvdW5kLT52
YWx1ZS0+c2V0U3RyaW5nKGRhdGFPYmplY3QsIGZvdW5kLT52YWx1ZS0+Zm9ybWF0LCBkYXRhU3Ry
aW5ncyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vd2luL0NsaXBib2FyZFdpbi5jcHAKaW5kZXggMTJjYjhiZjAxZTMwZDVjMWQ2ZTIzNzZh
ZmQ5ODQ4MzhhNzMxMmVjYS4uODBlOWY4NGU3MTczYjI1ZmU1YjczMmFkN2MyYTk5YzJhNmY3NDMx
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFdpbi5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFdpbi5jcHAKQEAg
LTUyNSw3ICs1MjUsNyBAQCBIYXNoU2V0PFN0cmluZz4gQ2xpcGJvYXJkV2luOjp0eXBlcygpIGNv
bnN0CiAgICAgfSBlbHNlIHsKICAgICAgICAgZm9yIChEcmFnRGF0YU1hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtX2RyYWdEYXRhTWFwLmJlZ2luKCk7IGl0ICE9IG1fZHJhZ0RhdGFNYXAuZW5kKCk7
ICsraXQpIHsKICAgICAgICAgICAgIEZPUk1BVEVUQyBkYXRhOwotICAgICAgICAgICAgZGF0YS5j
ZkZvcm1hdCA9ICgqaXQpLmZpcnN0OworICAgICAgICAgICAgZGF0YS5jZkZvcm1hdCA9ICgqaXQp
LmtleTsKICAgICAgICAgICAgIGFkZE1pbWVUeXBlc0ZvckZvcm1hdChyZXN1bHRzLCBkYXRhKTsK
ICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dp
bi9GaWxlU3lzdGVtV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9GaWxlU3lz
dGVtV2luLmNwcAppbmRleCA0Y2U1MTg3NzEyMzUzZTkwYzBkMTU2Zjg1NDE5ZmNiMDVkYjM3ZmFj
Li5iMTA0OTIyZTJmM2Y2MDM4MDQ0ZTgxYWUyNmU0MWE4YTVlZjgzYjdhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vd2luL0ZpbGVTeXN0ZW1XaW4uY3BwCkBAIC0yMDksNyArMjA5LDcg
QEAgc3RhdGljIFN0cmluZyBjYWNoZWRTdG9yYWdlRGlyZWN0b3J5KERXT1JEIHBhdGhJZGVudGlm
aWVyKQogCiAgICAgSGFzaE1hcDxEV09SRCwgU3RyaW5nPjo6aXRlcmF0b3IgaXQgPSBkaXJlY3Rv
cmllcy5maW5kKHBhdGhJZGVudGlmaWVyKTsKICAgICBpZiAoaXQgIT0gZGlyZWN0b3JpZXMuZW5k
KCkpCi0gICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gaXQtPnZhbHVl
OwogCiAgICAgU3RyaW5nIGRpcmVjdG9yeSA9IHN0b3JhZ2VEaXJlY3RvcnkocGF0aElkZW50aWZp
ZXIpOwogICAgIGRpcmVjdG9yaWVzLmFkZChwYXRoSWRlbnRpZmllciwgZGlyZWN0b3J5KTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9SdW5Mb29wV2luLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9SdW5Mb29wV2luLmNwcAppbmRleCAxNjYzYjY2MTMz
YWJjMmNiM2ZkMDA1N2QxOTY3MTIzN2QwZTc5OWRhLi4xN2Q2ODQ1ZTlmZmRjMzkyOGMwNjdjN2Mx
NTg4M2FhYjkwZDI5YTY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4v
UnVuTG9vcFdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1J1bkxvb3BX
aW4uY3BwCkBAIC0xMjYsNyArMTI2LDcgQEAgdm9pZCBSdW5Mb29wOjpUaW1lckJhc2U6OnRpbWVy
RmlyZWQoUnVuTG9vcCogcnVuTG9vcCwgdWludDY0X3QgSUQpCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBUaW1lckJhc2UqIHRpbWVyID0gaXQtPnNlY29uZDsKKyAgICBUaW1lckJhc2Uq
IHRpbWVyID0gaXQtPnZhbHVlOwogCiAgICAgaWYgKCF0aW1lci0+bV9pc1JlcGVhdGluZykgewog
ICAgICAgICBydW5Mb29wLT5tX2FjdGl2ZVRpbWVycy5yZW1vdmUoaXQpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1dDRGF0YU9iamVjdC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS93aW4vV0NEYXRhT2JqZWN0LmNwcAppbmRleCAwYzAzY2UwMGYyMjFhZTBh
YzgxYjhlZTcyY2ZlMGQwNTRhMDU2NjU0Li5kZmJkMDA1ZmM0MzZmOGQ3MjE2YTIxNzQ2Njk5Yjdk
ZjgxYjU4MDQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vV0NEYXRh
T2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vV0NEYXRhT2JqZWN0
LmNwcApAQCAtMTY5LDcgKzE2OSw3IEBAIEhSRVNVTFQgV0NEYXRhT2JqZWN0OjpjcmVhdGVJbnN0
YW5jZShXQ0RhdGFPYmplY3QqKiByZXN1bHQsIGNvbnN0IERyYWdEYXRhTWFwJiBkCiAgICAgKnJl
c3VsdCA9IG5ldyBXQ0RhdGFPYmplY3Q7CiAKICAgICBmb3IgKERyYWdEYXRhTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IGRhdGFNYXAuYmVnaW4oKTsgaXQgIT0gZGF0YU1hcC5lbmQoKTsgKytpdCkK
LSAgICAgICAgc2V0Q2xpcGJvYXJkRGF0YSgqcmVzdWx0LCBpdC0+Zmlyc3QsIGl0LT5zZWNvbmQp
OworICAgICAgICBzZXRDbGlwYm9hcmREYXRhKCpyZXN1bHQsIGl0LT5rZXksIGl0LT52YWx1ZSk7
CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3dpbmNlL01JTUVUeXBlUmVnaXN0cnlXaW5DRS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93aW5jZS9NSU1FVHlwZVJlZ2lzdHJ5V2luQ0UuY3BwCmluZGV4IDhhMGQzZDJiNjE2MmI0
NmRiYjdkNjJmMjJjYTAzMjZkYzdmY2VkYzUuLmU5NmZiMmJhN2Q5OTljZTJkM2FjYjBkMGY5YzRj
MjQ4NzQ3ZmU1ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbmNlL01J
TUVUeXBlUmVnaXN0cnlXaW5DRS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2lu
Y2UvTUlNRVR5cGVSZWdpc3RyeVdpbkNFLmNwcApAQCAtMTAxLDggKzEwMSw4IEBAIFN0cmluZyBN
SU1FVHlwZVJlZ2lzdHJ5OjpnZXRQcmVmZXJyZWRFeHRlbnNpb25Gb3JNSU1FVHlwZShjb25zdCBT
dHJpbmcmIHR5cGUpCiAgICAgaW5pdE1JTUVUeXBlRW50ZW5zaW9uTWFwKCk7CiAKICAgICBmb3Ig
KEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+OjppdGVyYXRvciBpID0gbWltZXR5cGVNYXAuYmVnaW4o
KTsgaSAhPSBtaW1ldHlwZU1hcC5lbmQoKTsgKytpKSB7Ci0gICAgICAgIGlmIChlcXVhbElnbm9y
aW5nQ2FzZShpLT5zZWNvbmQsIHR5cGUpKQotICAgICAgICAgICAgcmV0dXJuIGktPmZpcnN0Owor
ICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoaS0+dmFsdWUsIHR5cGUpKQorICAgICAgICAg
ICAgcmV0dXJuIGktPmtleTsKICAgICB9CiAKICAgICByZXR1cm4gU3RyaW5nKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC9Db250ZXh0TWVudVd4LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3d4L0NvbnRleHRNZW51V3guY3BwCmluZGV4IGY3MjI3NjlmYWEw
M2FkY2UyNGRhM2MwZWE3MzU5MzNhODYyNDcxNjQuLjgwMTkyZjM4Y2QxZDMxYTAyMGQ4MTI1MWQy
NDQ2NWQzMjBkY2Y3MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L0Nv
bnRleHRNZW51V3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L0NvbnRleHRN
ZW51V3guY3BwCkBAIC02Niw4ICs2Niw4IEBAIHZvaWQgQ29udGV4dE1lbnU6OmFwcGVuZEl0ZW0o
Q29udGV4dE1lbnVJdGVtJiBpdGVtKQogCiAgICAgSXRlbUFjdGlvbk1hcDo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gc19pdGVtQWN0aW9ucy5lbmQoKTsKICAgICBmb3IgKEl0ZW1BY3Rpb25NYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gc19pdGVtQWN0aW9ucy5iZWdpbigpOyAgaXQgIT0gZW5kOyArK2l0
KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kID09IGl0ZW1EZXNjcmlwdGlvbi5hY3Rpb24pCi0g
ICAgICAgICAgICBpZFd4ID0gaXQtPmZpcnN0OworICAgICAgICBpZiAoaXQtPnZhbHVlID09IGl0
ZW1EZXNjcmlwdGlvbi5hY3Rpb24pCisgICAgICAgICAgICBpZFd4ID0gaXQtPmtleTsKICAgICB9
CiAKICAgICBpZiAoaXRlbURlc2NyaXB0aW9uLnN1Yk1lbnUpIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGx1
Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAKaW5kZXggNmU4MTRhZWI1ZWY5ZDYzZTA2MjBmYWI4MmI2
YjJkNzM2NjZmMzVjNS4uYWY5M2NiOGNjMGJiN2EyZmRkYWNjZjgzODg1MjViMmFkMDI1NTlmNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAKQEAgLTE2Miw3ICsx
NjIsNyBAQCBib29sIFBsdWdpbkRhdGFiYXNlOjpyZWZyZXNoKCkKICAgICAgICAgTUlNRVRvRGVz
Y3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBtYXBfaXQgPSAoKml0KS0+bWltZVRvRGVzY3Jp
cHRpb25zKCkuYmVnaW4oKTsKICAgICAgICAgTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9p
dGVyYXRvciBtYXBfZW5kID0gKCppdCktPm1pbWVUb0Rlc2NyaXB0aW9ucygpLmVuZCgpOwogICAg
ICAgICBmb3IgKDsgbWFwX2l0ICE9IG1hcF9lbmQ7ICsrbWFwX2l0KQotICAgICAgICAgICAgbV9y
ZWdpc3RlcmVkTUlNRVR5cGVzLmFkZChtYXBfaXQtPmZpcnN0KTsKKyAgICAgICAgICAgIG1fcmVn
aXN0ZXJlZE1JTUVUeXBlcy5hZGQobWFwX2l0LT5rZXkpOwogICAgIH0KIAogICAgIHJldHVybiB0
cnVlOwpAQCAtMjQzLDkgKzI0Myw5IEBAIFN0cmluZyBQbHVnaW5EYXRhYmFzZTo6TUlNRVR5cGVG
b3JFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBleHRlbnNpb24pIGNvbnN0CiAgICAgICAgIE1JTUVU
b0V4dGVuc2lvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIG1pbWVfZW5kID0gKCppdCktPm1pbWVUb0V4
dGVuc2lvbnMoKS5lbmQoKTsKIAogICAgICAgICBmb3IgKE1JTUVUb0V4dGVuc2lvbnNNYXA6OmNv
bnN0X2l0ZXJhdG9yIG1pbWVfaXQgPSAoKml0KS0+bWltZVRvRXh0ZW5zaW9ucygpLmJlZ2luKCk7
IG1pbWVfaXQgIT0gbWltZV9lbmQ7ICsrbWltZV9pdCkgewotICAgICAgICAgICAgbWltZVR5cGUg
PSBtaW1lX2l0LT5maXJzdDsKKyAgICAgICAgICAgIG1pbWVUeXBlID0gbWltZV9pdC0+a2V5Owog
ICAgICAgICAgICAgUGx1Z2luUGFja2FnZSogcHJlZmVycmVkUGx1Z2luID0gbV9wcmVmZXJyZWRQ
bHVnaW5zLmdldChtaW1lVHlwZSkuZ2V0KCk7Ci0gICAgICAgICAgICBjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgZXh0ZW5zaW9ucyA9IG1pbWVfaXQtPnNlY29uZDsKKyAgICAgICAgICAgIGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBleHRlbnNpb25zID0gbWltZV9pdC0+dmFsdWU7CiAgICAgICAgICAgICBi
b29sIGZvdW5kTWFwcGluZyA9IGZhbHNlOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGV4dGVuc2lvbnMuc2l6ZSgpOyBpKyspIHsKICAgICAgICAgICAgICAgICBpZiAoZXF1
YWxJZ25vcmluZ0Nhc2UoZXh0ZW5zaW9uc1tpXSwgZXh0ZW5zaW9uKSkgewpAQCAtMzM1LDggKzMz
NSw4IEBAIHZvaWQgUGx1Z2luRGF0YWJhc2U6OnJlbW92ZShQbHVnaW5QYWNrYWdlKiBwYWNrYWdl
KQogICAgIE1JTUVUb0V4dGVuc2lvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcGFja2FnZS0+
bWltZVRvRXh0ZW5zaW9ucygpLmJlZ2luKCk7CiAgICAgTUlNRVRvRXh0ZW5zaW9uc01hcDo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gcGFja2FnZS0+bWltZVRvRXh0ZW5zaW9ucygpLmVuZCgpOwogICAg
IGZvciAoIDsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFBsdWdpblBhY2thZ2VCeU5hbWVN
YXA6Oml0ZXJhdG9yIHBhY2thZ2VJbk1hcCA9IG1fcHJlZmVycmVkUGx1Z2lucy5maW5kKGl0LT5m
aXJzdCk7Ci0gICAgICAgIGlmIChwYWNrYWdlSW5NYXAgIT0gbV9wcmVmZXJyZWRQbHVnaW5zLmVu
ZCgpICYmIHBhY2thZ2VJbk1hcC0+c2Vjb25kID09IHBhY2thZ2UpCisgICAgICAgIFBsdWdpblBh
Y2thZ2VCeU5hbWVNYXA6Oml0ZXJhdG9yIHBhY2thZ2VJbk1hcCA9IG1fcHJlZmVycmVkUGx1Z2lu
cy5maW5kKGl0LT5rZXkpOworICAgICAgICBpZiAocGFja2FnZUluTWFwICE9IG1fcHJlZmVycmVk
UGx1Z2lucy5lbmQoKSAmJiBwYWNrYWdlSW5NYXAtPnZhbHVlID09IHBhY2thZ2UpCiAgICAgICAg
ICAgICBtX3ByZWZlcnJlZFBsdWdpbnMucmVtb3ZlKHBhY2thZ2VJbk1hcCk7CiAgICAgfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbk1haW5UaHJlYWRTY2hlZHVs
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVy
LmNwcAppbmRleCA3NTI4Njc2YjEyYWE4YmRhOGYzM2IzMmVmNDBjYzg3NjU3NjZkMzFhLi4zOWFl
Nzk0ZTJmYjA5NzIxOWE1MjIzZWJmYmVlZGY2OWI2ZTI4NjJjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbHVnaW5zL1BsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luTWFpblRocmVhZFNjaGVkdWxlci5jcHAKQEAgLTQ5LDcg
KzQ5LDcgQEAgdm9pZCBQbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyOjpzY2hlZHVsZUNhbGwoTlBQ
IG5wcCwgTWFpblRocmVhZEZ1bmN0aW9uIGZ1bmN0aW8KICAgICBpZiAoaXQgPT0gbV9jYWxsUXVl
dWVNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGl0LT5zZWNvbmQuYXBwZW5kKENh
bGwoZnVuY3Rpb24sIHVzZXJEYXRhKSk7CisgICAgaXQtPnZhbHVlLmFwcGVuZChDYWxsKGZ1bmN0
aW9uLCB1c2VyRGF0YSkpOwogCiAgICAgaWYgKCFtX2NhbGxQZW5kaW5nKSB7CiAgICAgICAgIGNh
bGxPbk1haW5UaHJlYWQobWFpblRocmVhZENhbGxiYWNrLCB0aGlzKTsKQEAgLTk3LDcgKzk3LDcg
QEAgdm9pZCBQbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyOjpkaXNwYXRjaENhbGxzKCkKICAgICAg
ICAgLy8gRW1wdHkgYWxsIHRoZSBxdWV1ZXMgaW4gdGhlIG9yaWdpbmFsIG1hcAogICAgICAgICBD
YWxsUXVldWVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fY2FsbFF1ZXVlTWFwLmVuZCgpOwogICAgICAg
ICBmb3IgKENhbGxRdWV1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtX2NhbGxRdWV1ZU1hcC5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBpdC0+c2Vjb25kLmNsZWFyKCk7CisgICAg
ICAgICAgICBpdC0+dmFsdWUuY2xlYXIoKTsKICAgICB9CiAKICAgICBtX2NhbGxQZW5kaW5nID0g
ZmFsc2U7CkBAIC0xMDUsNyArMTA1LDcgQEAgdm9pZCBQbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVy
OjpkaXNwYXRjaENhbGxzKCkKIAogICAgIENhbGxRdWV1ZU1hcDo6aXRlcmF0b3IgZW5kID0gY29w
eS5lbmQoKTsKICAgICBmb3IgKENhbGxRdWV1ZU1hcDo6aXRlcmF0b3IgaXQgPSBjb3B5LmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgZGlzcGF0Y2hDYWxsc0ZvclBsdWdpbihpdC0+
Zmlyc3QsIGl0LT5zZWNvbmQpOworICAgICAgICBkaXNwYXRjaENhbGxzRm9yUGx1Z2luKGl0LT5r
ZXksIGl0LT52YWx1ZSk7CiB9CiAKIHZvaWQgUGx1Z2luTWFpblRocmVhZFNjaGVkdWxlcjo6bWFp
blRocmVhZENhbGxiYWNrKHZvaWQqIGNvbnRleHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbHVnaW5zL1BsdWdpblN0cmVhbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdp
blN0cmVhbS5jcHAKaW5kZXggMDAyMzgwZjVmOTUzZjliZWUyYzU2NWU5Y2E1YzEzMmFkNGMwYWY0
YS4uZmRiNzg2MDM1YjBkMTY1NDgyMWZjYjQ2MGFkNGUyZDNhNzFhNWEzNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5TdHJlYW0uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsdWdpbnMvUGx1Z2luU3RyZWFtLmNwcApAQCAtMTQ3LDkgKzE0Nyw5IEBAIHZvaWQgUGx1
Z2luU3RyZWFtOjpzdGFydFN0cmVhbSgpCiAKICAgICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gbV9yZXNvdXJjZVJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMoKS5lbmQo
KTsKICAgICAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fcmVz
b3VyY2VSZXNwb25zZS5odHRwSGVhZGVyRmllbGRzKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+Zmlyc3QpOworICAgICAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPmtleSk7CiAgICAgICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZChzZXBhcmF0b3IpOwotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQoaXQtPnNlY29uZCk7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+dmFs
dWUpOwogICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7CiAgICAgICAgIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ibGFja2JlcnJ5L1BsdWdpbkRh
dGFCbGFja0JlcnJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvYmxhY2tiZXJyeS9QbHVn
aW5EYXRhQmxhY2tCZXJyeS5jcHAKaW5kZXggZDkyMGQxZmJkNWExMTI0NjAzYThjZDk4ZmExMzQz
NTZlNzMwNmI1OS4uNDc0NjYxNmRlMzM1ZmE4M2NlYzk2ZDkzMGUyMGQ4YzI4ZTk0YzNiNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ibGFja2JlcnJ5L1BsdWdpbkRhdGFCbGFj
a0JlcnJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2JsYWNrYmVycnkvUGx1Z2lu
RGF0YUJsYWNrQmVycnkuY3BwCkBAIC00MSw4ICs0MSw4IEBAIHZvaWQgUGx1Z2luRGF0YTo6aW5p
dFBsdWdpbnMoY29uc3QgUGFnZSopCiAgICAgICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gbWltZVRvRGVzY3JpcHRpb25zLmVuZCgpOwogICAgICAgICBmb3Ig
KE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtaW1lVG9EZXNjcmlw
dGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBNaW1lQ2xhc3NJ
bmZvIG1pbWU7Ci0gICAgICAgICAgICBtaW1lLnR5cGUgPSBpdC0+Zmlyc3Q7Ci0gICAgICAgICAg
ICBtaW1lLmRlc2MgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgbWltZS50eXBlID0gaXQtPmtl
eTsKKyAgICAgICAgICAgIG1pbWUuZGVzYyA9IGl0LT52YWx1ZTsKICAgICAgICAgICAgIG1pbWUu
ZXh0ZW5zaW9ucyA9IHBhY2thZ2UtPm1pbWVUb0V4dGVuc2lvbnMoKS5nZXQobWltZS50eXBlKTsK
ICAgICAgICAgICAgIGluZm8ubWltZXMuYXBwZW5kKG1pbWUpOwogICAgICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9QbHVnaW5EYXRhRWZsLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1BsdWdpbkRhdGFFZmwuY3BwCmluZGV4IGMyMWQ1MWIxOWQ3
YjI0YjJjMTU5YzJkZGIzN2JmN2ZlNWRkOGQ5NGMuLjQ3NWY5ZmU1ODMzYmFjNDU3NjVkOTNhNWZi
NDZhMjZiNzYxOTNkZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1Bs
dWdpbkRhdGFFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1BsdWdpbkRh
dGFFZmwuY3BwCkBAIC00Nyw4ICs0Nyw4IEBAIHZvaWQgUGx1Z2luRGF0YTo6aW5pdFBsdWdpbnMo
Y29uc3QgUGFnZSopCiAgICAgICAgIGZvciAoTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKICAgICAgICAgICAgIE1pbWVDbGFzc0luZm8gbWltZTsKIAotICAgICAgICAgICAgbWltZS50
eXBlID0gaXQtPmZpcnN0OwotICAgICAgICAgICAgbWltZS5kZXNjID0gaXQtPnNlY29uZDsKKyAg
ICAgICAgICAgIG1pbWUudHlwZSA9IGl0LT5rZXk7CisgICAgICAgICAgICBtaW1lLmRlc2MgPSBp
dC0+dmFsdWU7CiAgICAgICAgICAgICBtaW1lLmV4dGVuc2lvbnMgPSBwYWNrYWdlLT5taW1lVG9F
eHRlbnNpb25zKCkuZ2V0KG1pbWUudHlwZSk7CiAKICAgICAgICAgICAgIGluZm8ubWltZXMuYXBw
ZW5kKG1pbWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy93eC9QbHVnaW5E
YXRhV3guY3BwIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy93eC9QbHVnaW5EYXRhV3guY3BwCmlu
ZGV4IDBlYjg5MGZlZjA1YTExNWVhY2U0MjYzNzY4MGEzZDZhMTJmNTc3MjkuLjI3OTUyYzRhZThi
ZmE0OWU5OGIxMWFlOTk1OWZjNzU0ZTRkYjIzYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsdWdpbnMvd3gvUGx1Z2luRGF0YVd4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5z
L3d4L1BsdWdpbkRhdGFXeC5jcHAKQEAgLTUxLDggKzUxLDggQEAgdm9pZCBQbHVnaW5EYXRhOjpp
bml0UGx1Z2lucyhjb25zdCBQYWdlKikKICAgICAgICAgZm9yIChNSU1FVG9EZXNjcmlwdGlvbnNN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWltZVRvRGVzY3JpcHRpb25zLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgewogICAgICAgICAgICAgTWltZUNsYXNzSW5mbyBtaW1lOwogCi0gICAgICAg
ICAgICBtaW1lLnR5cGUgPSBpdC0+Zmlyc3Q7Ci0gICAgICAgICAgICBtaW1lLmRlc2MgPSBpdC0+
c2Vjb25kOworICAgICAgICAgICAgbWltZS50eXBlID0gaXQtPmtleTsKKyAgICAgICAgICAgIG1p
bWUuZGVzYyA9IGl0LT52YWx1ZTsKICAgICAgICAgICAgIG1pbWUuZXh0ZW5zaW9ucyA9IHBhY2th
Z2UtPm1pbWVUb0V4dGVuc2lvbnMoKS5nZXQobWltZS50eXBlKTsKIAogICAgICAgICAgICAgaW5m
by5taW1lcy5hcHBlbmQobWltZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSW5saW5lRmxvd0JveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxv
d0JveC5jcHAKaW5kZXggMjA4MWM2ODJkZWQ1ZTdmNTRlOWI2M2NiZmEzYjY4YTJjZGI4MjBlOC4u
ZWZiMGU0ZmU0YjBiYjlhNmVlYzBjYzU5N2U4Zjk2NmI1NjQ0NzQ0YSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcApAQCAtNDQ5LDcgKzQ0OSw3IEBAIGJvb2wg
SW5saW5lRmxvd0JveDo6cmVxdWlyZXNJZGVvZ3JhcGhpY0Jhc2VsaW5lKGNvbnN0IEdseXBoT3Zl
cmZsb3dBbmRGYWxsYmFja0ZvCiAgICAgICAgICAgICBjb25zdCBWZWN0b3I8Y29uc3QgU2ltcGxl
Rm9udERhdGEqPiogdXNlZEZvbnRzID0gMDsKICAgICAgICAgICAgIGlmIChjdXJyLT5pc0lubGlu
ZVRleHRCb3goKSkgewogICAgICAgICAgICAgICAgIEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0Zv
bnRzTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHRleHRCb3hEYXRhTWFwLmZpbmQodG9JbmxpbmVU
ZXh0Qm94KGN1cnIpKTsKLSAgICAgICAgICAgICAgICB1c2VkRm9udHMgPSBpdCA9PSB0ZXh0Qm94
RGF0YU1hcC5lbmQoKSA/IDAgOiAmaXQtPnNlY29uZC5maXJzdDsKKyAgICAgICAgICAgICAgICB1
c2VkRm9udHMgPSBpdCA9PSB0ZXh0Qm94RGF0YU1hcC5lbmQoKSA/IDAgOiAmaXQtPnZhbHVlLmZp
cnN0OwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAodXNlZEZvbnRzKSB7CkBAIC04
MTIsNyArODEyLDcgQEAgaW5saW5lIHZvaWQgSW5saW5lRmxvd0JveDo6YWRkVGV4dEJveFZpc3Vh
bE92ZXJmbG93KElubGluZVRleHRCb3gqIHRleHRCb3gsIEdseXAKICAgICBSZW5kZXJTdHlsZSog
c3R5bGUgPSB0ZXh0Qm94LT5yZW5kZXJlcigpLT5zdHlsZShpc0ZpcnN0TGluZVN0eWxlKCkpOwog
ICAgIAogICAgIEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFwOjppdGVyYXRvciBpdCA9
IHRleHRCb3hEYXRhTWFwLmZpbmQodGV4dEJveCk7Ci0gICAgR2x5cGhPdmVyZmxvdyogZ2x5cGhP
dmVyZmxvdyA9IGl0ID09IHRleHRCb3hEYXRhTWFwLmVuZCgpID8gMCA6ICZpdC0+c2Vjb25kLnNl
Y29uZDsKKyAgICBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93ID0gaXQgPT0gdGV4dEJveERh
dGFNYXAuZW5kKCkgPyAwIDogJml0LT52YWx1ZS5zZWNvbmQ7CiAgICAgYm9vbCBpc0ZsaXBwZWRM
aW5lID0gc3R5bGUtPmlzRmxpcHBlZExpbmVzV3JpdGluZ01vZGUoKTsKIAogICAgIGludCB0b3BH
bHlwaEVkZ2UgPSBnbHlwaE92ZXJmbG93ID8gKGlzRmxpcHBlZExpbmUgPyBnbHlwaE92ZXJmbG93
LT5ib3R0b20gOiBnbHlwaE92ZXJmbG93LT50b3ApIDogMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQmxvY2suY3BwCmluZGV4IDA0MzhkMWIxNjExYmNhYTRlOGU5OTdkMWIzMjIyNzQw
YmVhYjMzODQuLjgyMjZhZGQ3MzA4MzI1MGExZjJkNTBjMTA2YmIzMjkwMDBkMWQ0ZTEgMTAwNzU1
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcApAQCAtNDI2Miw3ICs0MjYyLDcg
QEAgdm9pZCBSZW5kZXJCbG9jazo6Y2xlYXJGbG9hdHMoQmxvY2tMYXlvdXRQYXNzIGxheW91dFBh
c3MpCiAKICAgICAgICAgUmVuZGVyZXJUb0Zsb2F0SW5mb01hcDo6aXRlcmF0b3IgZW5kID0gZmxv
YXRNYXAuZW5kKCk7CiAgICAgICAgIGZvciAoUmVuZGVyZXJUb0Zsb2F0SW5mb01hcDo6aXRlcmF0
b3IgaXQgPSBmbG9hdE1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAg
IEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCA9ICgqaXQpLnNlY29uZDsKKyAgICAgICAg
ICAgIEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCA9ICgqaXQpLnZhbHVlOwogICAgICAg
ICAgICAgaWYgKCFmbG9hdGluZ09iamVjdC0+aXNEZXNjZW5kYW50KCkpIHsKICAgICAgICAgICAg
ICAgICBjaGFuZ2VMb2dpY2FsVG9wID0gMDsKICAgICAgICAgICAgICAgICBjaGFuZ2VMb2dpY2Fs
Qm90dG9tID0gbWF4KGNoYW5nZUxvZ2ljYWxCb3R0b20sIGxvZ2ljYWxCb3R0b21Gb3JGbG9hdChm
bG9hdGluZ09iamVjdCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrTGluZUxheW91dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2tMaW5lTGF5b3V0LmNwcAppbmRleCA5ZGQyMTgxMjUwMjVmMjkzYTg2YjU2NTk3YzhiNzZm
MjE4NGNkNWYyLi5mZTdiZWZkMDBjM2Y5ODM2Yjg4ZGUyOGNiYzgyY2FjNmRmMjE0NjNmIDEwMDc1
NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNw
cApAQCAtNjYzLDE0ICs2NjMsMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldExvZ2ljYWxXaWR0
aEZvclRleHRSdW4oUm9vdElubGluZUJveCogbGluZUJveCwgQmlkaVJ1biogcnUKICAgICBpZiAo
IWZhbGxiYWNrRm9udHMuaXNFbXB0eSgpKSB7CiAgICAgICAgIEFTU0VSVChydW4tPm1fYm94LT5p
c1RleHQoKSk7CiAgICAgICAgIEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFwOjppdGVy
YXRvciBpdCA9IHRleHRCb3hEYXRhTWFwLmFkZCh0b0lubGluZVRleHRCb3gocnVuLT5tX2JveCks
IG1ha2VfcGFpcihWZWN0b3I8Y29uc3QgU2ltcGxlRm9udERhdGEqPigpLCBHbHlwaE92ZXJmbG93
KCkpKS5pdGVyYXRvcjsKLSAgICAgICAgQVNTRVJUKGl0LT5zZWNvbmQuZmlyc3QuaXNFbXB0eSgp
KTsKLSAgICAgICAgY29weVRvVmVjdG9yKGZhbGxiYWNrRm9udHMsIGl0LT5zZWNvbmQuZmlyc3Qp
OworICAgICAgICBBU1NFUlQoaXQtPnZhbHVlLmZpcnN0LmlzRW1wdHkoKSk7CisgICAgICAgIGNv
cHlUb1ZlY3RvcihmYWxsYmFja0ZvbnRzLCBpdC0+dmFsdWUuZmlyc3QpOwogICAgICAgICBydW4t
Pm1fYm94LT5wYXJlbnQoKS0+Y2xlYXJEZXNjZW5kYW50c0hhdmVTYW1lTGluZUhlaWdodEFuZEJh
c2VsaW5lKCk7CiAgICAgfQogICAgIGlmICgoZ2x5cGhPdmVyZmxvdy50b3AgfHwgZ2x5cGhPdmVy
Zmxvdy5ib3R0b20gfHwgZ2x5cGhPdmVyZmxvdy5sZWZ0IHx8IGdseXBoT3ZlcmZsb3cucmlnaHQp
KSB7CiAgICAgICAgIEFTU0VSVChydW4tPm1fYm94LT5pc1RleHQoKSk7CiAgICAgICAgIEdseXBo
T3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFwOjppdGVyYXRvciBpdCA9IHRleHRCb3hEYXRhTWFw
LmFkZCh0b0lubGluZVRleHRCb3gocnVuLT5tX2JveCksIG1ha2VfcGFpcihWZWN0b3I8Y29uc3Qg
U2ltcGxlRm9udERhdGEqPigpLCBHbHlwaE92ZXJmbG93KCkpKS5pdGVyYXRvcjsKLSAgICAgICAg
aXQtPnNlY29uZC5zZWNvbmQgPSBnbHlwaE92ZXJmbG93OworICAgICAgICBpdC0+dmFsdWUuc2Vj
b25kID0gZ2x5cGhPdmVyZmxvdzsKICAgICAgICAgcnVuLT5tX2JveC0+Y2xlYXJLbm93blRvSGF2
ZU5vT3ZlcmZsb3coKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3gu
Y3BwCmluZGV4IGUzYjgxYTc0OTkzM2JmYjNhM2YyMmI4NGU4NzNkMDY3MjgyNzgyYzYuLjRjMDRj
ZTdjNjZmYTljZjNlNDU2ZTYzY2RmODVlM2VhZjY5YWM4MzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCb3guY3BwCkBAIC03ODUsNyArNzg1LDcgQEAgSW50U2l6ZSBSZW5kZXJCb3g6
OmNhY2hlZFNpemVGb3JPdmVyZmxvd0NsaXAoKSBjb25zdAogICAgIGlmIChpdCA9PSBjYWNoZWRT
aXplRm9yT3ZlcmZsb3dDbGlwTWFwKCkuZW5kKCkpCiAgICAgICAgIHJldHVybiBMYXlvdXRTaXpl
KCk7CiAKLSAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICByZXR1cm4gaXQtPnZhbHVlOwogfQog
CiB2b2lkIFJlbmRlckJveDo6dXBkYXRlQ2FjaGVkU2l6ZUZvck92ZXJmbG93Q2xpcCgpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAppbmRl
eCAyZTU1ZTdmNzQ5MjQ2NDQ5NzdjNjMzZWU3ZTZlYmE0YTViOWFjYWU0Li5kNzAyNmE1NDAyOGRl
MDYxNzQ1NWZjMjZmNWI4NWZiNjgyZmJkZDUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKQEAgLTEzMiw3ICsxMzIsNyBAQCB2b2lk
IEltYWdlUXVhbGl0eUNvbnRyb2xsZXI6OmhpZ2hRdWFsaXR5UmVwYWludFRpbWVyRmlyZWQoVGlt
ZXI8SW1hZ2VRdWFsaXR5Q29udAogICAgIGlmIChtX2FuaW1hdGVkUmVzaXplSXNBY3RpdmUpIHsK
ICAgICAgICAgbV9hbmltYXRlZFJlc2l6ZUlzQWN0aXZlID0gZmFsc2U7CiAgICAgICAgIGZvciAo
T2JqZWN0TGF5ZXJTaXplTWFwOjppdGVyYXRvciBpdCA9IG1fb2JqZWN0TGF5ZXJTaXplTWFwLmJl
Z2luKCk7IGl0ICE9IG1fb2JqZWN0TGF5ZXJTaXplTWFwLmVuZCgpOyArK2l0KQotICAgICAgICAg
ICAgaXQtPmZpcnN0LT5yZXBhaW50KCk7CisgICAgICAgICAgICBpdC0+a2V5LT5yZXBhaW50KCk7
CiAgICAgfQogfQogCkBAIC0xNTcsMTQgKzE1NywxNCBAQCBib29sIEltYWdlUXVhbGl0eUNvbnRy
b2xsZXI6OnNob3VsZFBhaW50QXRMb3dRdWFsaXR5KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
UgogCiAgICAgLy8gTG9vayBvdXJzZWx2ZXMgdXAgaW4gdGhlIGhhc2h0YWJsZXMuCiAgICAgT2Jq
ZWN0TGF5ZXJTaXplTWFwOjppdGVyYXRvciBpID0gbV9vYmplY3RMYXllclNpemVNYXAuZmluZChv
YmplY3QpOwotICAgIExheWVyU2l6ZU1hcCogaW5uZXJNYXAgPSBpICE9IG1fb2JqZWN0TGF5ZXJT
aXplTWFwLmVuZCgpID8gJmktPnNlY29uZCA6IDA7CisgICAgTGF5ZXJTaXplTWFwKiBpbm5lck1h
cCA9IGkgIT0gbV9vYmplY3RMYXllclNpemVNYXAuZW5kKCkgPyAmaS0+dmFsdWUgOiAwOwogICAg
IExheW91dFNpemUgb2xkU2l6ZTsKICAgICBib29sIGlzRmlyc3RSZXNpemUgPSB0cnVlOwogICAg
IGlmIChpbm5lck1hcCkgewogICAgICAgICBMYXllclNpemVNYXA6Oml0ZXJhdG9yIGogPSBpbm5l
ck1hcC0+ZmluZChsYXllcik7CiAgICAgICAgIGlmIChqICE9IGlubmVyTWFwLT5lbmQoKSkgewog
ICAgICAgICAgICAgaXNGaXJzdFJlc2l6ZSA9IGZhbHNlOwotICAgICAgICAgICAgb2xkU2l6ZSA9
IGotPnNlY29uZDsKKyAgICAgICAgICAgIG9sZFNpemUgPSBqLT52YWx1ZTsKICAgICAgICAgfQog
ICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwCmluZGV4
IDA4MDdlYTlkZDk3ODE2YTNmNjdiY2EwZmM1ODg4YjU4Y2Q3ZjFkNGUuLmRjNDM4YmUyOGEzYmRj
YTViM2VlMGYwMTI3ZWI0NDliZjFhMmJiNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJDb3VudGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQ291bnRlci5jcHAKQEAgLTU2MywxMSArNTYzLDExIEBAIHZvaWQgUmVuZGVyQ291bnRl
cjo6ZGVzdHJveUNvdW50ZXJOb2RlcyhSZW5kZXJPYmplY3QqIG93bmVyKQogICAgIENvdW50ZXJN
YXBzOjppdGVyYXRvciBtYXBzSXRlcmF0b3IgPSBtYXBzLmZpbmQob3duZXIpOwogICAgIGlmICht
YXBzSXRlcmF0b3IgPT0gbWFwcy5lbmQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIENvdW50ZXJN
YXAqIG1hcCA9IG1hcHNJdGVyYXRvci0+c2Vjb25kOworICAgIENvdW50ZXJNYXAqIG1hcCA9IG1h
cHNJdGVyYXRvci0+dmFsdWU7CiAgICAgQ291bnRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
bWFwLT5lbmQoKTsKICAgICBmb3IgKENvdW50ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFw
LT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgQXRvbWljU3RyaW5nIGlkZW50
aWZpZXIoaXQtPmZpcnN0LmdldCgpKTsKLSAgICAgICAgZGVzdHJveUNvdW50ZXJOb2RlV2l0aG91
dE1hcFJlbW92YWwoaWRlbnRpZmllciwgaXQtPnNlY29uZC5nZXQoKSk7CisgICAgICAgIEF0b21p
Y1N0cmluZyBpZGVudGlmaWVyKGl0LT5rZXkuZ2V0KCkpOworICAgICAgICBkZXN0cm95Q291bnRl
ck5vZGVXaXRob3V0TWFwUmVtb3ZhbChpZGVudGlmaWVyLCBpdC0+dmFsdWUuZ2V0KCkpOwogICAg
IH0KICAgICBtYXBzLnJlbW92ZShtYXBzSXRlcmF0b3IpOwogICAgIGRlbGV0ZSBtYXA7CkBAIC01
ODIsNyArNTgyLDcgQEAgdm9pZCBSZW5kZXJDb3VudGVyOjpkZXN0cm95Q291bnRlck5vZGUoUmVu
ZGVyT2JqZWN0KiBvd25lciwgY29uc3QgQXRvbWljU3RyaW5nJgogICAgIENvdW50ZXJNYXA6Oml0
ZXJhdG9yIG1hcEl0ZXJhdG9yID0gbWFwLT5maW5kKGlkZW50aWZpZXIuaW1wbCgpKTsKICAgICBp
ZiAobWFwSXRlcmF0b3IgPT0gbWFwLT5lbmQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGRlc3Ry
b3lDb3VudGVyTm9kZVdpdGhvdXRNYXBSZW1vdmFsKGlkZW50aWZpZXIsIG1hcEl0ZXJhdG9yLT5z
ZWNvbmQuZ2V0KCkpOworICAgIGRlc3Ryb3lDb3VudGVyTm9kZVdpdGhvdXRNYXBSZW1vdmFsKGlk
ZW50aWZpZXIsIG1hcEl0ZXJhdG9yLT52YWx1ZS5nZXQoKSk7CiAgICAgbWFwLT5yZW1vdmUobWFw
SXRlcmF0b3IpOwogICAgIC8vIFdlIGRvIG5vdCBkZWxldGUgIm1hcCIgaGVyZSBldmVuIGlmIGVt
cHR5IGJlY2F1c2Ugd2UgZXhwZWN0IHRvIHJldXNlCiAgICAgLy8gaXQgc29vbi4gSW4gb3JkZXIg
Zm9yIGEgcmVuZGVyZXIgdG8gbG9zZSBhbGwgaXRzIGNvdW50ZXJzIHBlcm1hbmVudGx5LApAQCAt
NjE5LDIyICs2MTksMjIgQEAgc3RhdGljIHZvaWQgdXBkYXRlQ291bnRlcnMoUmVuZGVyT2JqZWN0
KiByZW5kZXJlcikKICAgICBDb3VudGVyRGlyZWN0aXZlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQg
PSBkaXJlY3RpdmVNYXAtPmVuZCgpOwogICAgIGlmICghcmVuZGVyZXItPmhhc0NvdW50ZXJOb2Rl
TWFwKCkpIHsKICAgICAgICAgZm9yIChDb3VudGVyRGlyZWN0aXZlTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IGRpcmVjdGl2ZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAg
ICAgbWFrZUNvdW50ZXJOb2RlKHJlbmRlcmVyLCBBdG9taWNTdHJpbmcoaXQtPmZpcnN0LmdldCgp
KSwgZmFsc2UpOworICAgICAgICAgICAgbWFrZUNvdW50ZXJOb2RlKHJlbmRlcmVyLCBBdG9taWNT
dHJpbmcoaXQtPmtleS5nZXQoKSksIGZhbHNlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICBDb3VudGVyTWFwKiBjb3VudGVyTWFwID0gY291bnRlck1hcHMoKS5nZXQocmVuZGVyZXIpOwog
ICAgIEFTU0VSVChjb3VudGVyTWFwKTsKICAgICBmb3IgKENvdW50ZXJEaXJlY3RpdmVNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gZGlyZWN0aXZlTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKLSAgICAgICAgUmVmUHRyPENvdW50ZXJOb2RlPiBub2RlID0gY291bnRlck1hcC0+Z2V0KGl0
LT5maXJzdC5nZXQoKSk7CisgICAgICAgIFJlZlB0cjxDb3VudGVyTm9kZT4gbm9kZSA9IGNvdW50
ZXJNYXAtPmdldChpdC0+a2V5LmdldCgpKTsKICAgICAgICAgaWYgKCFub2RlKSB7Ci0gICAgICAg
ICAgICBtYWtlQ291bnRlck5vZGUocmVuZGVyZXIsIEF0b21pY1N0cmluZyhpdC0+Zmlyc3QuZ2V0
KCkpLCBmYWxzZSk7CisgICAgICAgICAgICBtYWtlQ291bnRlck5vZGUocmVuZGVyZXIsIEF0b21p
Y1N0cmluZyhpdC0+a2V5LmdldCgpKSwgZmFsc2UpOwogICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgIH0KICAgICAgICAgUmVmUHRyPENvdW50ZXJOb2RlPiBuZXdQYXJlbnQgPSAwOwogICAg
ICAgICBSZWZQdHI8Q291bnRlck5vZGU+IG5ld1ByZXZpb3VzU2libGluZyA9IDA7CiAgICAgICAg
IAotICAgICAgICBmaW5kUGxhY2VGb3JDb3VudGVyKHJlbmRlcmVyLCBBdG9taWNTdHJpbmcoaXQt
PmZpcnN0LmdldCgpKSwgbm9kZS0+aGFzUmVzZXRUeXBlKCksIG5ld1BhcmVudCwgbmV3UHJldmlv
dXNTaWJsaW5nKTsKLSAgICAgICAgaWYgKG5vZGUgIT0gY291bnRlck1hcC0+Z2V0KGl0LT5maXJz
dC5nZXQoKSkpCisgICAgICAgIGZpbmRQbGFjZUZvckNvdW50ZXIocmVuZGVyZXIsIEF0b21pY1N0
cmluZyhpdC0+a2V5LmdldCgpKSwgbm9kZS0+aGFzUmVzZXRUeXBlKCksIG5ld1BhcmVudCwgbmV3
UHJldmlvdXNTaWJsaW5nKTsKKyAgICAgICAgaWYgKG5vZGUgIT0gY291bnRlck1hcC0+Z2V0KGl0
LT5rZXkuZ2V0KCkpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIENvdW50ZXJOb2Rl
KiBwYXJlbnQgPSBub2RlLT5wYXJlbnQoKTsKICAgICAgICAgaWYgKG5ld1BhcmVudCA9PSBwYXJl
bnQgJiYgbmV3UHJldmlvdXNTaWJsaW5nID09IG5vZGUtPnByZXZpb3VzU2libGluZygpKQpAQCAt
NjQyLDcgKzY0Miw3IEBAIHN0YXRpYyB2b2lkIHVwZGF0ZUNvdW50ZXJzKFJlbmRlck9iamVjdCog
cmVuZGVyZXIpCiAgICAgICAgIGlmIChwYXJlbnQpCiAgICAgICAgICAgICBwYXJlbnQtPnJlbW92
ZUNoaWxkKG5vZGUuZ2V0KCkpOwogICAgICAgICBpZiAobmV3UGFyZW50KQotICAgICAgICAgICAg
bmV3UGFyZW50LT5pbnNlcnRBZnRlcihub2RlLmdldCgpLCBuZXdQcmV2aW91c1NpYmxpbmcuZ2V0
KCksIGl0LT5maXJzdC5nZXQoKSk7CisgICAgICAgICAgICBuZXdQYXJlbnQtPmluc2VydEFmdGVy
KG5vZGUuZ2V0KCksIG5ld1ByZXZpb3VzU2libGluZy5nZXQoKSwgaXQtPmtleS5nZXQoKSk7CiAg
ICAgfQogfQogCkBAIC02NzEsMjEgKzY3MSwyMSBAQCB2b2lkIFJlbmRlckNvdW50ZXI6OnJlbmRl
cmVyU3R5bGVDaGFuZ2VkKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eQog
ICAgICAgICAgICAgQ291bnRlckRpcmVjdGl2ZU1hcDo6Y29uc3RfaXRlcmF0b3IgbmV3TWFwRW5k
ID0gbmV3Q291bnRlckRpcmVjdGl2ZXMtPmVuZCgpOwogICAgICAgICAgICAgQ291bnRlckRpcmVj
dGl2ZU1hcDo6Y29uc3RfaXRlcmF0b3Igb2xkTWFwRW5kID0gb2xkQ291bnRlckRpcmVjdGl2ZXMt
PmVuZCgpOwogICAgICAgICAgICAgZm9yIChDb3VudGVyRGlyZWN0aXZlTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IG5ld0NvdW50ZXJEaXJlY3RpdmVzLT5iZWdpbigpOyBpdCAhPSBuZXdNYXBFbmQ7
ICsraXQpIHsKLSAgICAgICAgICAgICAgICBDb3VudGVyRGlyZWN0aXZlTWFwOjpjb25zdF9pdGVy
YXRvciBvbGRNYXBJdCA9IG9sZENvdW50ZXJEaXJlY3RpdmVzLT5maW5kKGl0LT5maXJzdCk7Cisg
ICAgICAgICAgICAgICAgQ291bnRlckRpcmVjdGl2ZU1hcDo6Y29uc3RfaXRlcmF0b3Igb2xkTWFw
SXQgPSBvbGRDb3VudGVyRGlyZWN0aXZlcy0+ZmluZChpdC0+a2V5KTsKICAgICAgICAgICAgICAg
ICBpZiAob2xkTWFwSXQgIT0gb2xkTWFwRW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChv
bGRNYXBJdC0+c2Vjb25kID09IGl0LT5zZWNvbmQpCisgICAgICAgICAgICAgICAgICAgIGlmIChv
bGRNYXBJdC0+dmFsdWUgPT0gaXQtPnZhbHVlKQogICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICAgICAgICAgIFJlbmRlckNvdW50ZXI6OmRlc3Ryb3lDb3VudGVy
Tm9kZShyZW5kZXJlciwgaXQtPmZpcnN0LmdldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgUmVu
ZGVyQ291bnRlcjo6ZGVzdHJveUNvdW50ZXJOb2RlKHJlbmRlcmVyLCBpdC0+a2V5LmdldCgpKTsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgLy8gV2UgbXVzdCBjcmVhdGUgdGhp
cyBub2RlIGhlcmUsIGJlY2F1c2UgdGhlIGNoYW5nZWQgbm9kZSBtYXkgYmUgYSBub2RlIHdpdGgg
bm8gZGlzcGxheSBzdWNoIGFzCiAgICAgICAgICAgICAgICAgLy8gYXMgdGhvc2UgY3JlYXRlZCBi
eSB0aGUgaW5jcmVtZW50IG9yIHJlc2V0IGRpcmVjdGl2ZXMgYW5kIHRoZSByZS1sYXlvdXQgdGhh
dCB3aWxsIGhhcHBlbiB3aWxsCiAgICAgICAgICAgICAgICAgLy8gbm90IGNhdGNoIHRoZSBjaGFu
Z2UgaWYgdGhlIG5vZGUgaGFkIG5vIGNoaWxkcmVuLgotICAgICAgICAgICAgICAgIG1ha2VDb3Vu
dGVyTm9kZShyZW5kZXJlciwgaXQtPmZpcnN0LmdldCgpLCBmYWxzZSk7CisgICAgICAgICAgICAg
ICAgbWFrZUNvdW50ZXJOb2RlKHJlbmRlcmVyLCBpdC0+a2V5LmdldCgpLCBmYWxzZSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAvLyBEZXN0cm95aW5nIG9sZCBjb3VudGVycyB0aGF0IGRv
IG5vdCBleGlzdCBpbiB0aGUgbmV3IGNvdW50ZXJEaXJlY3RpdmUgbWFwLgogICAgICAgICAgICAg
Zm9yIChDb3VudGVyRGlyZWN0aXZlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG9sZENvdW50ZXJE
aXJlY3RpdmVzLT5iZWdpbigpOyBpdCAhPW9sZE1hcEVuZDsgKytpdCkgewotICAgICAgICAgICAg
ICAgIGlmICghbmV3Q291bnRlckRpcmVjdGl2ZXMtPmNvbnRhaW5zKGl0LT5maXJzdCkpCi0gICAg
ICAgICAgICAgICAgICAgIFJlbmRlckNvdW50ZXI6OmRlc3Ryb3lDb3VudGVyTm9kZShyZW5kZXJl
ciwgaXQtPmZpcnN0LmdldCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoIW5ld0NvdW50ZXJEaXJl
Y3RpdmVzLT5jb250YWlucyhpdC0+a2V5KSkKKyAgICAgICAgICAgICAgICAgICAgUmVuZGVyQ291
bnRlcjo6ZGVzdHJveUNvdW50ZXJOb2RlKHJlbmRlcmVyLCBpdC0+a2V5LmdldCgpKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChyZW5kZXJlci0+aGFz
Q291bnRlck5vZGVNYXAoKSkKQEAgLTY5Nyw3ICs2OTcsNyBAQCB2b2lkIFJlbmRlckNvdW50ZXI6
OnJlbmRlcmVyU3R5bGVDaGFuZ2VkKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IFJlbmRl
clN0eQogICAgICAgICAgICAgLy8gV2UgbXVzdCBjcmVhdGUgdGhpcyBub2RlIGhlcmUsIGJlY2F1
c2UgdGhlIGFkZGVkIG5vZGUgbWF5IGJlIGEgbm9kZSB3aXRoIG5vIGRpc3BsYXkgc3VjaCBhcwog
ICAgICAgICAgICAgLy8gYXMgdGhvc2UgY3JlYXRlZCBieSB0aGUgaW5jcmVtZW50IG9yIHJlc2V0
IGRpcmVjdGl2ZXMgYW5kIHRoZSByZS1sYXlvdXQgdGhhdCB3aWxsIGhhcHBlbiB3aWxsCiAgICAg
ICAgICAgICAvLyBub3QgY2F0Y2ggdGhlIGNoYW5nZSBpZiB0aGUgbm9kZSBoYWQgbm8gY2hpbGRy
ZW4uCi0gICAgICAgICAgICBtYWtlQ291bnRlck5vZGUocmVuZGVyZXIsIGl0LT5maXJzdC5nZXQo
KSwgZmFsc2UpOworICAgICAgICAgICAgbWFrZUNvdW50ZXJOb2RlKHJlbmRlcmVyLCBpdC0+a2V5
LmdldCgpLCBmYWxzZSk7CiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAKaW5kZXggMGY5ZjZkM2VjN2M5OTE2ZDk2ZTZh
NzZiZjAzODdiMDEwNTNjOGI3NS4uOWUzYjUxYWE1YzdiNDU1NjVlYmQyNzI4ZDkyMDUzMjM3NmM5
NjkxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJl
YWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNw
cApAQCAtNjU1LDcgKzY1NSw3IEBAIHZvaWQgUmVuZGVyRmxvd1RocmVhZDo6c2V0UmVnaW9uUmFu
Z2VGb3JCb3goY29uc3QgUmVuZGVyQm94KiBib3gsIExheW91dFVuaXQgb2ZmCiAgICAgfQogCiAg
ICAgLy8gSWYgbm90aGluZyBjaGFuZ2VkLCBqdXN0IGJhaWwuCi0gICAgUmVuZGVyUmVnaW9uUmFu
Z2UmIHJhbmdlID0gaXQtPnNlY29uZDsKKyAgICBSZW5kZXJSZWdpb25SYW5nZSYgcmFuZ2UgPSBp
dC0+dmFsdWU7CiAgICAgaWYgKHJhbmdlLnN0YXJ0UmVnaW9uKCkgPT0gc3RhcnRSZWdpb24gJiYg
cmFuZ2UuZW5kUmVnaW9uKCkgPT0gZW5kUmVnaW9uKQogICAgICAgICByZXR1cm47CiAKQEAgLTY4
NSw3ICs2ODUsNyBAQCB2b2lkIFJlbmRlckZsb3dUaHJlYWQ6OmdldFJlZ2lvblJhbmdlRm9yQm94
KGNvbnN0IFJlbmRlckJveCogYm94LCBSZW5kZXJSZWdpb24qJgogICAgIGlmIChpdCA9PSBtX3Jl
Z2lvblJhbmdlTWFwLmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBjb25zdCBSZW5kZXJS
ZWdpb25SYW5nZSYgcmFuZ2UgPSBpdC0+c2Vjb25kOworICAgIGNvbnN0IFJlbmRlclJlZ2lvblJh
bmdlJiByYW5nZSA9IGl0LT52YWx1ZTsKICAgICBzdGFydFJlZ2lvbiA9IHJhbmdlLnN0YXJ0UmVn
aW9uKCk7CiAgICAgZW5kUmVnaW9uID0gcmFuZ2UuZW5kUmVnaW9uKCk7CiAgICAgQVNTRVJUKG1f
cmVnaW9uTGlzdC5jb250YWlucyhzdGFydFJlZ2lvbikgJiYgbV9yZWdpb25MaXN0LmNvbnRhaW5z
KGVuZFJlZ2lvbikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKaW5k
ZXggMTYxN2MwNGYyYTFkOWE3ZmJkNGU5NTgyNmU2MmVlMGE2OTc0ODg0MS4uOGFkNmM4MjZmNmRl
NzM2ZDNiZWQ3NzQ5NmI4MzExMTg0Y2U0ODdmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXIuY3BwCkBAIC0yNzE4LDcgKzI3MTgsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpw
YWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJl
Y3QsCiAgICAgcGFpbnRMYXllcih0aGlzLCBjb250ZXh0LCBkYW1hZ2VSZWN0LCBwYWludEJlaGF2
aW9yLCBwYWludGluZ1Jvb3QsIHJlZ2lvbiwgJm92ZXJsYXBUZXN0UmVxdWVzdHMsIHBhaW50Rmxh
Z3MpOwogICAgIE92ZXJsYXBUZXN0UmVxdWVzdE1hcDo6aXRlcmF0b3IgZW5kID0gb3ZlcmxhcFRl
c3RSZXF1ZXN0cy5lbmQoKTsKICAgICBmb3IgKE92ZXJsYXBUZXN0UmVxdWVzdE1hcDo6aXRlcmF0
b3IgaXQgPSBvdmVybGFwVGVzdFJlcXVlc3RzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAg
ICAgICAgaXQtPmZpcnN0LT5zZXRPdmVybGFwVGVzdFJlc3VsdChmYWxzZSk7CisgICAgICAgIGl0
LT5rZXktPnNldE92ZXJsYXBUZXN0UmVzdWx0KGZhbHNlKTsKIH0KIAogdm9pZCBSZW5kZXJMYXll
cjo6cGFpbnRPdmVybGF5U2Nyb2xsYmFycyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0
IExheW91dFJlY3QmIGRhbWFnZVJlY3QsIFBhaW50QmVoYXZpb3IgcGFpbnRCZWhhdmlvciwgUmVu
ZGVyT2JqZWN0KiBwYWludGluZ1Jvb3QpCkBAIC0yNzg3LDExICsyNzg3LDExIEBAIHN0YXRpYyB2
b2lkIHBlcmZvcm1PdmVybGFwVGVzdHMoT3ZlcmxhcFRlc3RSZXF1ZXN0TWFwJiBvdmVybGFwVGVz
dFJlcXVlc3RzLCBjb25zCiAgICAgT3ZlcmxhcFRlc3RSZXF1ZXN0TWFwOjppdGVyYXRvciBlbmQg
PSBvdmVybGFwVGVzdFJlcXVlc3RzLmVuZCgpOwogICAgIExheW91dFJlY3QgYm91bmRpbmdCb3gg
PSBsYXllci0+Ym91bmRpbmdCb3gocm9vdExheWVyKTsKICAgICBmb3IgKE92ZXJsYXBUZXN0UmVx
dWVzdE1hcDo6aXRlcmF0b3IgaXQgPSBvdmVybGFwVGVzdFJlcXVlc3RzLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoIWJvdW5kaW5nQm94LmludGVyc2VjdHMoaXQtPnNl
Y29uZCkpCisgICAgICAgIGlmICghYm91bmRpbmdCb3guaW50ZXJzZWN0cyhpdC0+dmFsdWUpKQog
ICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaXQtPmZpcnN0LT5zZXRPdmVybGFwVGVz
dFJlc3VsdCh0cnVlKTsKLSAgICAgICAgb3ZlcmxhcHBlZFJlcXVlc3RDbGllbnRzLmFwcGVuZChp
dC0+Zmlyc3QpOworICAgICAgICBpdC0+a2V5LT5zZXRPdmVybGFwVGVzdFJlc3VsdCh0cnVlKTsK
KyAgICAgICAgb3ZlcmxhcHBlZFJlcXVlc3RDbGllbnRzLmFwcGVuZChpdC0+a2V5KTsKICAgICB9
CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvdmVybGFwcGVkUmVxdWVzdENsaWVudHMuc2l6
ZSgpOyArK2kpCiAgICAgICAgIG92ZXJsYXBUZXN0UmVxdWVzdHMucmVtb3ZlKG92ZXJsYXBwZWRS
ZXF1ZXN0Q2xpZW50c1tpXSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTmFtZWRGbG93VGhyZWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJOYW1lZEZsb3dUaHJlYWQuY3BwCmluZGV4IGRhYjVkN2IyMWU3YWU5ZjBkZDljMDBhNTg3NDAy
YWRhMWFjN2ZjMDQuLjM2ZjBhYmJiNGI5ODllMGExMmRiYzA0MWRjMmJhZDM5MDU4NTg1ZTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQu
Y3BwCkBAIC0xMTAsNyArMTEwLDcgQEAgYm9vbCBSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OmRlcGVu
ZHNPbihSZW5kZXJOYW1lZEZsb3dUaHJlYWQqIG90aGVyUmVuZGVyRmxvd1RocmUKICAgICBSZW5k
ZXJOYW1lZEZsb3dUaHJlYWRDb3VudGVkU2V0Ojpjb25zdF9pdGVyYXRvciBpdGVyYXRvciA9IG1f
bGF5b3V0QmVmb3JlVGhyZWFkc1NldC5iZWdpbigpOwogICAgIFJlbmRlck5hbWVkRmxvd1RocmVh
ZENvdW50ZWRTZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fbGF5b3V0QmVmb3JlVGhyZWFkc1Nl
dC5lbmQoKTsKICAgICBmb3IgKDsgaXRlcmF0b3IgIT0gZW5kOyArK2l0ZXJhdG9yKSB7Ci0gICAg
ICAgIGNvbnN0IFJlbmRlck5hbWVkRmxvd1RocmVhZCogYmVmb3JlRmxvd1RocmVhZCA9ICgqaXRl
cmF0b3IpLmZpcnN0OworICAgICAgICBjb25zdCBSZW5kZXJOYW1lZEZsb3dUaHJlYWQqIGJlZm9y
ZUZsb3dUaHJlYWQgPSAoKml0ZXJhdG9yKS5rZXk7CiAgICAgICAgIGlmIChiZWZvcmVGbG93VGhy
ZWFkLT5kZXBlbmRzT24ob3RoZXJSZW5kZXJGbG93VGhyZWFkKSkKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KQEAgLTIzNiw3ICsyMzYsNyBAQCB2b2lkIFJlbmRlck5hbWVkRmxvd1Ro
cmVhZDo6cmVtb3ZlRGVwZW5kZW5jeU9uRmxvd1RocmVhZChSZW5kZXJOYW1lZEZsb3dUaHJlYWQq
CiB2b2lkIFJlbmRlck5hbWVkRmxvd1RocmVhZDo6cHVzaERlcGVuZGVuY2llcyhSZW5kZXJOYW1l
ZEZsb3dUaHJlYWRMaXN0JiBsaXN0KQogewogICAgIGZvciAoUmVuZGVyTmFtZWRGbG93VGhyZWFk
Q291bnRlZFNldDo6aXRlcmF0b3IgaXRlciA9IG1fbGF5b3V0QmVmb3JlVGhyZWFkc1NldC5iZWdp
bigpOyBpdGVyICE9IG1fbGF5b3V0QmVmb3JlVGhyZWFkc1NldC5lbmQoKTsgKytpdGVyKSB7Ci0g
ICAgICAgIFJlbmRlck5hbWVkRmxvd1RocmVhZCogZmxvd1RocmVhZCA9ICgqaXRlcikuZmlyc3Q7
CisgICAgICAgIFJlbmRlck5hbWVkRmxvd1RocmVhZCogZmxvd1RocmVhZCA9ICgqaXRlcikua2V5
OwogICAgICAgICBpZiAobGlzdC5jb250YWlucyhmbG93VGhyZWFkKSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICBmbG93VGhyZWFkLT5wdXNoRGVwZW5kZW5jaWVzKGxpc3QpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcAppbmRleCAxNjFlNTA5YWJlM2U2
NTExMWUwMGExOTBlZjdmZThjMmRhN2RlNmM3Li4wNTczNDQ5N2IxMGNhNzYyMjEyY2QxNWVhN2Zh
YjM2OGZhNTc2ODQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
UmVnaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNw
cApAQCAtMTAyLDcgKzEwMiw3IEBAIHZvaWQgUmVuZGVyUmVnaW9uOjpzZXRSZWdpb25Cb3hlc1Jl
Z2lvblN0eWxlKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgZm9yIChSZW5kZXJCb3hSZWdpb25J
bmZvTWFwOjppdGVyYXRvciBpdGVyID0gbV9yZW5kZXJCb3hSZWdpb25JbmZvLmJlZ2luKCksIGVu
ZCA9IG1fcmVuZGVyQm94UmVnaW9uSW5mby5lbmQoKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewot
ICAgICAgICBjb25zdCBSZW5kZXJCb3gqIGJveCA9IGl0ZXItPmZpcnN0OworICAgICAgICBjb25z
dCBSZW5kZXJCb3gqIGJveCA9IGl0ZXItPmtleTsKICAgICAgICAgaWYgKCFib3gtPmNhbkhhdmVS
ZWdpb25TdHlsZSgpKQogICAgICAgICAgICAgY29udGludWU7CiAKQEAgLTEyMiwxNCArMTIyLDE0
IEBAIHZvaWQgUmVuZGVyUmVnaW9uOjpyZXN0b3JlUmVnaW9uQm94ZXNPcmlnaW5hbFN0eWxlKCkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgZm9yIChSZW5kZXJCb3hSZWdpb25JbmZvTWFwOjppdGVy
YXRvciBpdGVyID0gbV9yZW5kZXJCb3hSZWdpb25JbmZvLmJlZ2luKCksIGVuZCA9IG1fcmVuZGVy
Qm94UmVnaW9uSW5mby5lbmQoKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewotICAgICAgICBjb25z
dCBSZW5kZXJCb3gqIGJveCA9IGl0ZXItPmZpcnN0OworICAgICAgICBjb25zdCBSZW5kZXJCb3gq
IGJveCA9IGl0ZXItPmtleTsKICAgICAgICAgUmVuZGVyQm94UmVnaW9uU3R5bGVNYXA6Oml0ZXJh
dG9yIGl0ID0gbV9yZW5kZXJCb3hSZWdpb25TdHlsZS5maW5kKGJveCk7CiAgICAgICAgIGlmIChp
dCA9PSBtX3JlbmRlckJveFJlZ2lvblN0eWxlLmVuZCgpKQogICAgICAgICAgICAgY29udGludWU7
CiAKICAgICAgICAgLy8gUmVzdG9yZSB0aGUgYm94IHN0eWxlIHRvIHRoZSBvcmlnaW5hbCBzdHls
ZSBhbmQgc3RvcmUgdGhlIGJveCBzdHlsZSBpbiByZWdpb24gZm9yIGxhdGVyIHVzZS4KICAgICAg
ICAgUmVmUHRyPFJlbmRlclN0eWxlPiBib3hSZWdpb25TdHlsZSA9IGJveC0+c3R5bGUoKTsKLSAg
ICAgICAgKGNvbnN0X2Nhc3Q8UmVuZGVyQm94Kj4oYm94KSktPnNldFN0eWxlSW50ZXJuYWwoaXQt
PnNlY29uZCk7CisgICAgICAgIChjb25zdF9jYXN0PFJlbmRlckJveCo+KGJveCkpLT5zZXRTdHls
ZUludGVybmFsKGl0LT52YWx1ZSk7CiAgICAgICAgIG1fcmVuZGVyQm94UmVnaW9uU3R5bGUuc2V0
KGJveCwgYm94UmVnaW9uU3R5bGUpOwogICAgIH0KIH0KQEAgLTI0Niw3ICsyNDYsNyBAQCBSZW5k
ZXJCb3hSZWdpb25JbmZvKiBSZW5kZXJSZWdpb246OnNldFJlbmRlckJveFJlZ2lvbkluZm8oY29u
c3QgUmVuZGVyQm94KiBib3gsCiAgICAgaWYgKCFtX2lzVmFsaWQgfHwgIW1fZmxvd1RocmVhZCkK
ICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBPd25QdHI8UmVuZGVyQm94UmVnaW9uSW5mbz4mIGJv
eEluZm8gPSBtX3JlbmRlckJveFJlZ2lvbkluZm8uYWRkKGJveCwgbnVsbHB0cikuaXRlcmF0b3It
PnNlY29uZDsKKyAgICBPd25QdHI8UmVuZGVyQm94UmVnaW9uSW5mbz4mIGJveEluZm8gPSBtX3Jl
bmRlckJveFJlZ2lvbkluZm8uYWRkKGJveCwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwogICAg
IGlmIChib3hJbmZvKQogICAgICAgICAqYm94SW5mbyA9IFJlbmRlckJveFJlZ2lvbkluZm8obG9n
aWNhbExlZnRJbnNldCwgbG9naWNhbFJpZ2h0SW5zZXQsIGNvbnRhaW5pbmdCbG9ja0NoYWluSXNJ
bnNldCk7CiAgICAgZWxzZQpAQCAtMjg3LDcgKzI4Nyw3IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5
bGU+IFJlbmRlclJlZ2lvbjo6cmVuZGVyQm94UmVnaW9uU3R5bGUoY29uc3QgUmVuZGVyQm94KiBy
ZW5kCiAKICAgICBSZW5kZXJCb3hSZWdpb25TdHlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3JlbmRl
ckJveFJlZ2lvblN0eWxlLmZpbmQocmVuZGVyQm94KTsKICAgICBpZiAoaXQgIT0gbV9yZW5kZXJC
b3hSZWdpb25TdHlsZS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAg
IHJldHVybiBpdC0+dmFsdWU7CiAgICAgcmV0dXJuIGNvbXB1dGVTdHlsZUluUmVnaW9uKHJlbmRl
ckJveCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
YWJsZVNlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2Vj
dGlvbi5jcHAKaW5kZXggMzA2ZGRhNDFmMzE4ZWRhMjcwNDRkZjQxNDk5OTFlMGEzNjgyYWFmMy4u
NjE0NmNhNGFiNTRhM2Q0OTM2NDEzM2ZiZGYzZTA5YjE0NmNjMWI5YSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKQEAgLTE0MTQsNyArMTQx
NCw3IEBAIENvbGxhcHNlZEJvcmRlclZhbHVlJiBSZW5kZXJUYWJsZVNlY3Rpb246OmNhY2hlZENv
bGxhcHNlZEJvcmRlcihjb25zdCBSZW5kZXJUYWJsCiAgICAgQVNTRVJUKHRhYmxlKCktPmNvbGxh
cHNlQm9yZGVycygpKTsKICAgICBIYXNoTWFwPHBhaXI8Y29uc3QgUmVuZGVyVGFibGVDZWxsKiwg
aW50PiwgQ29sbGFwc2VkQm9yZGVyVmFsdWU+OjppdGVyYXRvciBpdCA9IG1fY2VsbHNDb2xsYXBz
ZWRCb3JkZXJzLmZpbmQobWFrZV9wYWlyKGNlbGwsIHNpZGUpKTsKICAgICBBU1NFUlQoaXQgIT0g
bV9jZWxsc0NvbGxhcHNlZEJvcmRlcnMuZW5kKCkpOwotICAgIHJldHVybiBpdC0+c2Vjb25kOwor
ICAgIHJldHVybiBpdC0+dmFsdWU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbSBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQppbmRleCBkOWUyZTg2N2NjMDYw
YzYzNmUyYWY2ZjQ1NDMyYTc2ZTg0YzJkOWM0Li5iZDIxMTY0M2Q3YThjOWUyOTQ1YmM1NTM4Yzgw
N2I2YmYyNWUyNjlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGhlbWVNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFj
Lm1tCkBAIC0zNjAsNyArMzYwLDcgQEAgQ29sb3IgUmVuZGVyVGhlbWVNYWM6OnN5c3RlbUNvbG9y
KGludCBjc3NWYWx1ZUlkKSBjb25zdAogICAgIHsKICAgICAgICAgSGFzaE1hcDxpbnQsIFJHQkEz
Mj46Oml0ZXJhdG9yIGl0ID0gbV9zeXN0ZW1Db2xvckNhY2hlLmZpbmQoY3NzVmFsdWVJZCk7CiAg
ICAgICAgIGlmIChpdCAhPSBtX3N5c3RlbUNvbG9yQ2FjaGUuZW5kKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIHJldHVybiBpdC0+dmFsdWU7CiAgICAgfQog
CiAgICAgQ29sb3IgY29sb3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAK
aW5kZXggZmNhM2RjYTdhMzM5ZDhhMzJmNTU0MzYwMTFmMDY0MDRkY2M3ZmI5Yy4uMDlhNjYzOTdk
ZWIzZjkzMjlmNzM2YTI2NWE0MDczZWNkNzM4YmFjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJWaWV3LmNwcApAQCAtNDIzLDcgKzQyMyw3IEBAIEludFJlY3QgUmVuZGVyVmlldzo6
c2VsZWN0aW9uQm91bmRzKGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRlbnQpIGNvbnN0CiAgICAgSW50
UmVjdCBzZWxSZWN0OwogICAgIFNlbGVjdGlvbk1hcDo6aXRlcmF0b3IgZW5kID0gc2VsZWN0ZWRP
YmplY3RzLmVuZCgpOwogICAgIGZvciAoU2VsZWN0aW9uTWFwOjppdGVyYXRvciBpID0gc2VsZWN0
ZWRPYmplY3RzLmJlZ2luKCk7IGkgIT0gZW5kOyArK2kpIHsKLSAgICAgICAgUmVuZGVyU2VsZWN0
aW9uSW5mbyogaW5mbyA9IGktPnNlY29uZDsKKyAgICAgICAgUmVuZGVyU2VsZWN0aW9uSW5mbyog
aW5mbyA9IGktPnZhbHVlOwogICAgICAgICAvLyBSZW5kZXJTZWxlY3Rpb25JbmZvOjpyZWN0KCkg
aXMgaW4gdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSByZXBhaW50Q29udGFpbmVyLCBzbyBtYXAgdG8g
cGFnZSBjb29yZGluYXRlcy4KICAgICAgICAgSW50UmVjdCBjdXJyUmVjdCA9IGluZm8tPnJlY3Qo
KTsKICAgICAgICAgaWYgKFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyID0g
aW5mby0+cmVwYWludENvbnRhaW5lcigpKSB7CkBAIC01MDQsNyArNTA0LDcgQEAgdm9pZCBSZW5k
ZXJWaWV3OjpzZXRTZWxlY3Rpb24oUmVuZGVyT2JqZWN0KiBzdGFydCwgaW50IHN0YXJ0UG9zLCBS
ZW5kZXJPYmplY3QqIGUKICAgICAvLyBOb3cgY2xlYXIgdGhlIHNlbGVjdGlvbi4KICAgICBTZWxl
Y3RlZE9iamVjdE1hcDo6aXRlcmF0b3Igb2xkT2JqZWN0c0VuZCA9IG9sZFNlbGVjdGVkT2JqZWN0
cy5lbmQoKTsKICAgICBmb3IgKFNlbGVjdGVkT2JqZWN0TWFwOjppdGVyYXRvciBpID0gb2xkU2Vs
ZWN0ZWRPYmplY3RzLmJlZ2luKCk7IGkgIT0gb2xkT2JqZWN0c0VuZDsgKytpKQotICAgICAgICBp
LT5maXJzdC0+c2V0U2VsZWN0aW9uU3RhdGVJZk5lZWRlZChTZWxlY3Rpb25Ob25lKTsKKyAgICAg
ICAgaS0+a2V5LT5zZXRTZWxlY3Rpb25TdGF0ZUlmTmVlZGVkKFNlbGVjdGlvbk5vbmUpOwogCiAg
ICAgLy8gc2V0IHNlbGVjdGlvbiBzdGFydCBhbmQgZW5kCiAgICAgbV9zZWxlY3Rpb25TdGFydCA9
IHN0YXJ0OwpAQCAtNTY3LDkgKzU2Nyw5IEBAIHZvaWQgUmVuZGVyVmlldzo6c2V0U2VsZWN0aW9u
KFJlbmRlck9iamVjdCogc3RhcnQsIGludCBzdGFydFBvcywgUmVuZGVyT2JqZWN0KiBlCiAKICAg
ICAvLyBIYXZlIGFueSBvZiB0aGUgb2xkIHNlbGVjdGVkIG9iamVjdHMgY2hhbmdlZCBjb21wYXJl
ZCB0byB0aGUgbmV3IHNlbGVjdGlvbj8KICAgICBmb3IgKFNlbGVjdGVkT2JqZWN0TWFwOjppdGVy
YXRvciBpID0gb2xkU2VsZWN0ZWRPYmplY3RzLmJlZ2luKCk7IGkgIT0gb2xkT2JqZWN0c0VuZDsg
KytpKSB7Ci0gICAgICAgIFJlbmRlck9iamVjdCogb2JqID0gaS0+Zmlyc3Q7CisgICAgICAgIFJl
bmRlck9iamVjdCogb2JqID0gaS0+a2V5OwogICAgICAgICBSZW5kZXJTZWxlY3Rpb25JbmZvKiBu
ZXdJbmZvID0gbmV3U2VsZWN0ZWRPYmplY3RzLmdldChvYmopOwotICAgICAgICBSZW5kZXJTZWxl
Y3Rpb25JbmZvKiBvbGRJbmZvID0gaS0+c2Vjb25kOworICAgICAgICBSZW5kZXJTZWxlY3Rpb25J
bmZvKiBvbGRJbmZvID0gaS0+dmFsdWU7CiAgICAgICAgIGlmICghbmV3SW5mbyB8fCBvbGRJbmZv
LT5yZWN0KCkgIT0gbmV3SW5mby0+cmVjdCgpIHx8IG9sZEluZm8tPnN0YXRlKCkgIT0gbmV3SW5m
by0+c3RhdGUoKSB8fAogICAgICAgICAgICAgKG1fc2VsZWN0aW9uU3RhcnQgPT0gb2JqICYmIG9s
ZFN0YXJ0UG9zICE9IG1fc2VsZWN0aW9uU3RhcnRQb3MpIHx8CiAgICAgICAgICAgICAobV9zZWxl
Y3Rpb25FbmQgPT0gb2JqICYmIG9sZEVuZFBvcyAhPSBtX3NlbGVjdGlvbkVuZFBvcykpIHsKQEAg
LTU4Niw3ICs1ODYsNyBAQCB2b2lkIFJlbmRlclZpZXc6OnNldFNlbGVjdGlvbihSZW5kZXJPYmpl
Y3QqIHN0YXJ0LCBpbnQgc3RhcnRQb3MsIFJlbmRlck9iamVjdCogZQogICAgIC8vIEFueSBuZXcg
b2JqZWN0cyB0aGF0IHJlbWFpbiB3ZXJlIG5vdCBmb3VuZCBpbiB0aGUgb2xkIG9iamVjdHMgZGlj
dCwgYW5kIHNvIHRoZXkgbmVlZCB0byBiZSB1cGRhdGVkLgogICAgIFNlbGVjdGVkT2JqZWN0TWFw
OjppdGVyYXRvciBuZXdPYmplY3RzRW5kID0gbmV3U2VsZWN0ZWRPYmplY3RzLmVuZCgpOwogICAg
IGZvciAoU2VsZWN0ZWRPYmplY3RNYXA6Oml0ZXJhdG9yIGkgPSBuZXdTZWxlY3RlZE9iamVjdHMu
YmVnaW4oKTsgaSAhPSBuZXdPYmplY3RzRW5kOyArK2kpIHsKLSAgICAgICAgUmVuZGVyU2VsZWN0
aW9uSW5mbyogbmV3SW5mbyA9IGktPnNlY29uZDsKKyAgICAgICAgUmVuZGVyU2VsZWN0aW9uSW5m
byogbmV3SW5mbyA9IGktPnZhbHVlOwogICAgICAgICBuZXdJbmZvLT5yZXBhaW50KCk7CiAgICAg
ICAgIGRlbGV0ZSBuZXdJbmZvOwogICAgIH0KQEAgLTU5NCw5ICs1OTQsOSBAQCB2b2lkIFJlbmRl
clZpZXc6OnNldFNlbGVjdGlvbihSZW5kZXJPYmplY3QqIHN0YXJ0LCBpbnQgc3RhcnRQb3MsIFJl
bmRlck9iamVjdCogZQogICAgIC8vIEhhdmUgYW55IG9mIHRoZSBvbGQgYmxvY2tzIGNoYW5nZWQ/
CiAgICAgU2VsZWN0ZWRCbG9ja01hcDo6aXRlcmF0b3Igb2xkQmxvY2tzRW5kID0gb2xkU2VsZWN0
ZWRCbG9ja3MuZW5kKCk7CiAgICAgZm9yIChTZWxlY3RlZEJsb2NrTWFwOjppdGVyYXRvciBpID0g
b2xkU2VsZWN0ZWRCbG9ja3MuYmVnaW4oKTsgaSAhPSBvbGRCbG9ja3NFbmQ7ICsraSkgewotICAg
ICAgICBSZW5kZXJCbG9jayogYmxvY2sgPSBpLT5maXJzdDsKKyAgICAgICAgUmVuZGVyQmxvY2sq
IGJsb2NrID0gaS0+a2V5OwogICAgICAgICBSZW5kZXJCbG9ja1NlbGVjdGlvbkluZm8qIG5ld0lu
Zm8gPSBuZXdTZWxlY3RlZEJsb2Nrcy5nZXQoYmxvY2spOwotICAgICAgICBSZW5kZXJCbG9ja1Nl
bGVjdGlvbkluZm8qIG9sZEluZm8gPSBpLT5zZWNvbmQ7CisgICAgICAgIFJlbmRlckJsb2NrU2Vs
ZWN0aW9uSW5mbyogb2xkSW5mbyA9IGktPnZhbHVlOwogICAgICAgICBpZiAoIW5ld0luZm8gfHwg
b2xkSW5mby0+cmVjdHMoKSAhPSBuZXdJbmZvLT5yZWN0cygpIHx8IG9sZEluZm8tPnN0YXRlKCkg
IT0gbmV3SW5mby0+c3RhdGUoKSkgewogICAgICAgICAgICAgb2xkSW5mby0+cmVwYWludCgpOwog
ICAgICAgICAgICAgaWYgKG5ld0luZm8pIHsKQEAgLTYxMSw3ICs2MTEsNyBAQCB2b2lkIFJlbmRl
clZpZXc6OnNldFNlbGVjdGlvbihSZW5kZXJPYmplY3QqIHN0YXJ0LCBpbnQgc3RhcnRQb3MsIFJl
bmRlck9iamVjdCogZQogICAgIC8vIEFueSBuZXcgYmxvY2tzIHRoYXQgcmVtYWluIHdlcmUgbm90
IGZvdW5kIGluIHRoZSBvbGQgYmxvY2tzIGRpY3QsIGFuZCBzbyB0aGV5IG5lZWQgdG8gYmUgdXBk
YXRlZC4KICAgICBTZWxlY3RlZEJsb2NrTWFwOjppdGVyYXRvciBuZXdCbG9ja3NFbmQgPSBuZXdT
ZWxlY3RlZEJsb2Nrcy5lbmQoKTsKICAgICBmb3IgKFNlbGVjdGVkQmxvY2tNYXA6Oml0ZXJhdG9y
IGkgPSBuZXdTZWxlY3RlZEJsb2Nrcy5iZWdpbigpOyBpICE9IG5ld0Jsb2Nrc0VuZDsgKytpKSB7
Ci0gICAgICAgIFJlbmRlckJsb2NrU2VsZWN0aW9uSW5mbyogbmV3SW5mbyA9IGktPnNlY29uZDsK
KyAgICAgICAgUmVuZGVyQmxvY2tTZWxlY3Rpb25JbmZvKiBuZXdJbmZvID0gaS0+dmFsdWU7CiAg
ICAgICAgIG5ld0luZm8tPnJlcGFpbnQoKTsKICAgICAgICAgZGVsZXRlIG5ld0luZm87CiAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcAppbmRleCBkYTg3YTk3
YmU1N2E5ZDdlMWZhODZmMGY5ZTQ0ZWU4YjQ4MWE0ZjY1Li4xYTMxNzIzZjFhYjE4MmJkNDc5MGQ3
NmI3OTE1NjdkOWQ4ZTk3MDI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyV2lkZ2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lk
Z2V0LmNwcApAQCAtNzAsOSArNzAsOSBAQCB2b2lkIFJlbmRlcldpZGdldDo6cmVzdW1lV2lkZ2V0
SGllcmFyY2h5VXBkYXRlcygpCiAgICAgICAgIHdpZGdldE5ld1BhcmVudE1hcCgpLmNsZWFyKCk7
CiAgICAgICAgIFdpZGdldFRvUGFyZW50TWFwOjppdGVyYXRvciBlbmQgPSBtYXAuZW5kKCk7CiAg
ICAgICAgIGZvciAoV2lkZ2V0VG9QYXJlbnRNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgV2lkZ2V0KiBjaGlsZCA9IGl0LT5maXJz
dC5nZXQoKTsKKyAgICAgICAgICAgIFdpZGdldCogY2hpbGQgPSBpdC0+a2V5LmdldCgpOwogICAg
ICAgICAgICAgU2Nyb2xsVmlldyogY3VycmVudFBhcmVudCA9IGNoaWxkLT5wYXJlbnQoKTsKLSAg
ICAgICAgICAgIEZyYW1lVmlldyogbmV3UGFyZW50ID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAg
IEZyYW1lVmlldyogbmV3UGFyZW50ID0gaXQtPnZhbHVlOwogICAgICAgICAgICAgaWYgKG5ld1Bh
cmVudCAhPSBjdXJyZW50UGFyZW50KSB7CiAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRQYXJl
bnQpCiAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYXJlbnQtPnJlbW92ZUNoaWxkKGNoaWxk
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAppbmRleCBlNDBm
ZmJmY2M2NzQ4ODljYTMwOTIwNTgwOTQzMzNmNDVjY2NjYzczLi5hZWQwN2Q1YWYyZTdlNzYwODg2
YWM5MmE2ZjhiM2MzMTk2MGNlYzgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUm9vdElubGluZUJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJ
bmxpbmVCb3guY3BwCkBAIC03MjAsOCArNzIwLDggQEAgdm9pZCBSb290SW5saW5lQm94Ojphc2Nl
bnRBbmREZXNjZW50Rm9yQm94KElubGluZUJveCogYm94LCBHbHlwaE92ZXJmbG93QW5kRmFsbGIK
ICAgICBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93ID0gMDsKICAgICBpZiAoYm94LT5pc1Rl
eHQoKSkgewogICAgICAgICBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcDo6aXRlcmF0
b3IgaXQgPSB0ZXh0Qm94RGF0YU1hcC5maW5kKHRvSW5saW5lVGV4dEJveChib3gpKTsKLSAgICAg
ICAgdXNlZEZvbnRzID0gaXQgPT0gdGV4dEJveERhdGFNYXAuZW5kKCkgPyAwIDogJml0LT5zZWNv
bmQuZmlyc3Q7Ci0gICAgICAgIGdseXBoT3ZlcmZsb3cgPSBpdCA9PSB0ZXh0Qm94RGF0YU1hcC5l
bmQoKSA/IDAgOiAmaXQtPnNlY29uZC5zZWNvbmQ7CisgICAgICAgIHVzZWRGb250cyA9IGl0ID09
IHRleHRCb3hEYXRhTWFwLmVuZCgpID8gMCA6ICZpdC0+dmFsdWUuZmlyc3Q7CisgICAgICAgIGds
eXBoT3ZlcmZsb3cgPSBpdCA9PSB0ZXh0Qm94RGF0YU1hcC5lbmQoKSA/IDAgOiAmaXQtPnZhbHVl
LnNlY29uZDsKICAgICB9CiAgICAgICAgIAogICAgIGJvb2wgaW5jbHVkZUxlYWRpbmcgPSBpbmNs
dWRlTGVhZGluZ0ZvckJveChib3gpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1ZlcnRpY2FsUG9zaXRpb25DYWNoZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Zl
cnRpY2FsUG9zaXRpb25DYWNoZS5oCmluZGV4IGJiMzk4Nzc3MjFkYTcwNWMzN2JkM2I4ODE5MDI0
Y2QyN2UzNmU1Y2UuLmI3Y2Q3ZTA4NWU3ZjliZWRiNTI4ZjYyZGVlZjU3YTdiYjhhYTViZTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9WZXJ0aWNhbFBvc2l0aW9uQ2FjaGUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVmVydGljYWxQb3NpdGlvbkNhY2hlLmgK
QEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgogICAgICAgICBjb25zdCBIYXNoTWFwPFJlbmRlck9i
amVjdCosIGludD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwVG9DaGVjay5maW5kKHJlbmRlcmVy
KTsKICAgICAgICAgaWYgKGl0ID09IG1hcFRvQ2hlY2suZW5kKCkpCiAgICAgICAgICAgICByZXR1
cm4gUG9zaXRpb25VbmRlZmluZWQ7Ci0gICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgICAg
ICByZXR1cm4gaXQtPnZhbHVlOwogICAgIH0KICAgICAKICAgICB2b2lkIHNldChSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyLCBGb250QmFzZWxpbmUgYmFzZWxpbmVUeXBlLCBpbnQgcG9zaXRpb24pCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRl
eHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0
LmNwcAppbmRleCBhNTViMGYwYjVkZjRhYTU0NWU1YWIzODI1NmM5ZmU0OTAyMTMxZGNhLi43MTg1
NDk3ZmQ0NjNmNGRmYjc0OTM2YTk5MDQ3ZDM2NmVlNmEzMWY1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAKQEAgLTE4Myw3
ICsxODMsNyBAQCBib29sIFJlbmRlclNWR0lubGluZVRleHQ6OmNoYXJhY3RlclN0YXJ0c05ld1Rl
eHRDaHVuayhpbnQgcG9zaXRpb24pIGNvbnN0CiAgICAgaWYgKGl0ID09IG1fbGF5b3V0QXR0cmli
dXRlcy5jaGFyYWN0ZXJEYXRhTWFwKCkuZW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIHJldHVybiBpdC0+c2Vjb25kLnggIT0gU1ZHVGV4dExheW91dEF0dHJpYnV0ZXM6OmVtcHR5
VmFsdWUoKSB8fCBpdC0+c2Vjb25kLnkgIT0gU1ZHVGV4dExheW91dEF0dHJpYnV0ZXM6OmVtcHR5
VmFsdWUoKTsKKyAgICByZXR1cm4gaXQtPnZhbHVlLnggIT0gU1ZHVGV4dExheW91dEF0dHJpYnV0
ZXM6OmVtcHR5VmFsdWUoKSB8fCBpdC0+dmFsdWUueSAhPSBTVkdUZXh0TGF5b3V0QXR0cmlidXRl
czo6ZW1wdHlWYWx1ZSgpOwogfQogCiBWaXNpYmxlUG9zaXRpb24gUmVuZGVyU1ZHSW5saW5lVGV4
dDo6cG9zaXRpb25Gb3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIu
Y3BwCmluZGV4IGQ1ZDc5MmRlZDYwZGRmODc1MGJhM2Q4NGE1NGRmNDk1Yjk2YTY3M2MuLmExZThi
OGMxZjk3YTU4MzIzZTcyMjFjY2EzNTMzOTUyNWI2N2Q5MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCkBA
IC0zMzksNyArMzM5LDcgQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cHJpbWl0aXZl
QXR0cmlidXRlQ2hhbmdlZChSZW5kZXJPYmplY3QqIG9iamVjdCwgY28KICAgICBTVkdGaWx0ZXJQ
cmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMqIHByaW1pdHZlID0gc3RhdGljX2Nhc3Q8U1ZHRmls
dGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKj4ob2JqZWN0LT5ub2RlKCkpOwogCiAgICAg
Zm9yICg7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBGaWx0ZXJEYXRhKiBmaWx0ZXJEYXRh
ID0gaXQtPnNlY29uZDsKKyAgICAgICAgRmlsdGVyRGF0YSogZmlsdGVyRGF0YSA9IGl0LT52YWx1
ZTsKICAgICAgICAgaWYgKCFmaWx0ZXJEYXRhLT5idWlsZGVkKQogICAgICAgICAgICAgY29udGlu
dWU7CiAKQEAgLTM1NCw3ICszNTQsNyBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpw
cmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKFJlbmRlck9iamVjdCogb2JqZWN0LCBjbwogICAgICAg
ICBidWlsZGVyLT5jbGVhclJlc3VsdHNSZWN1cnNpdmUoZWZmZWN0KTsKIAogICAgICAgICAvLyBS
ZXBhaW50IHRoZSBpbWFnZSBvbiB0aGUgc2NyZWVuLgotICAgICAgICBtYXJrQ2xpZW50Rm9ySW52
YWxpZGF0aW9uKGl0LT5maXJzdCwgUmVwYWludEludmFsaWRhdGlvbik7CisgICAgICAgIG1hcmtD
bGllbnRGb3JJbnZhbGlkYXRpb24oaXQtPmtleSwgUmVwYWludEludmFsaWRhdGlvbik7CiAgICAg
fQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlR3JhZGllbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcAppbmRleCBmOGY0OTNkYjg1YTBkZGI3YTY5YzFmMTZj
YjE3NWY3MGFkOWRjYjgzLi4zNTMzYjM1YzE4NjllZmU5ZTQ1ZTVkMDc4NTM2NTMxMjA0NWJkOGY2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlR3JhZGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAKQEAgLTE0MCw3ICsxNDAsNyBAQCBib29sIFJlbmRlclNW
R1Jlc291cmNlR3JhZGllbnQ6OmFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiBvYmplY3QsIFJl
bmRlclN0eWxlKgogICAgIGlmIChncmFkaWVudFVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdf
VU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YICYmIG9iamVjdEJvdW5kaW5nQm94LmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgT3duUHRyPEdyYWRpZW50RGF0YT4mIGdy
YWRpZW50RGF0YSA9IG1fZ3JhZGllbnRNYXAuYWRkKG9iamVjdCwgbnVsbHB0cikuaXRlcmF0b3It
PnNlY29uZDsKKyAgICBPd25QdHI8R3JhZGllbnREYXRhPiYgZ3JhZGllbnREYXRhID0gbV9ncmFk
aWVudE1hcC5hZGQob2JqZWN0LCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCFn
cmFkaWVudERhdGEpCiAgICAgICAgIGdyYWRpZW50RGF0YSA9IGFkb3B0UHRyKG5ldyBHcmFkaWVu
dERhdGEpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlUGF0dGVybi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAKaW5kZXggNGRjNTAxYjgwNmIzZDhkZjI1NDc0NTQz
YmNmY2ZmMzg3NjBkNjI2OS4uNWIzODNlMjNhNDI0NTk0NzMwY2Y5NzcwYjEyMTNhYTI3NWJkY2E4
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNv
dXJjZVBhdHRlcm4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcApAQCAtODMsNyArODMsNyBAQCBib29sIFJlbmRlclNWR1Jl
c291cmNlUGF0dGVybjo6YXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqIG9iamVjdCwgUmVuZGVy
U3R5bGUqCiAgICAgaWYgKG1fYXR0cmlidXRlcy5wYXR0ZXJuVW5pdHMoKSA9PSBTVkdVbml0VHlw
ZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1ggJiYgb2JqZWN0Qm91bmRpbmdCb3gu
aXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBPd25QdHI8UGF0dGVybkRh
dGE+JiBwYXR0ZXJuRGF0YSA9IG1fcGF0dGVybk1hcC5hZGQob2JqZWN0LCBudWxscHRyKS5pdGVy
YXRvci0+c2Vjb25kOworICAgIE93blB0cjxQYXR0ZXJuRGF0YT4mIHBhdHRlcm5EYXRhID0gbV9w
YXR0ZXJuTWFwLmFkZChvYmplY3QsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAo
IXBhdHRlcm5EYXRhKQogICAgICAgICBwYXR0ZXJuRGF0YSA9IGFkb3B0UHRyKG5ldyBQYXR0ZXJu
RGF0YSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVz
b3VyY2VzQ2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJj
ZXNDYWNoZS5jcHAKaW5kZXggMDNlNmM3YjRiZTU2ZjUwOWMxMjFiYmE1NWVkMjJkNjUzOTBjODlm
OC4uMDA3M2I3MzU0ZDExOWU3NDAyNjdjMDcxM2RjZDE2OTU0MzEzYTllYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXNDYWNoZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXNDYWNoZS5jcHAKQEAgLTE3
MiwxMSArMTcyLDExIEBAIHZvaWQgU1ZHUmVzb3VyY2VzQ2FjaGU6OnJlc291cmNlRGVzdHJveWVk
KFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKiByZXNvdXJjZSkKIAogICAgIEhhc2hNYXA8UmVu
ZGVyT2JqZWN0KiwgU1ZHUmVzb3VyY2VzKj46Oml0ZXJhdG9yIGVuZCA9IGNhY2hlLT5tX2NhY2hl
LmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDxSZW5kZXJPYmplY3QqLCBTVkdSZXNvdXJjZXMqPjo6
aXRlcmF0b3IgaXQgPSBjYWNoZS0+bV9jYWNoZS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
LSAgICAgICAgaXQtPnNlY29uZC0+cmVzb3VyY2VEZXN0cm95ZWQocmVzb3VyY2UpOworICAgICAg
ICBpdC0+dmFsdWUtPnJlc291cmNlRGVzdHJveWVkKHJlc291cmNlKTsKIAogICAgICAgICAvLyBN
YXJrIHVzZXJzIG9mIGRlc3Ryb3llZCByZXNvdXJjZXMgYXMgcGVuZGluZyByZXNvbHV0aW9uIGJh
c2VkIG9uIHRoZSBpZCBvZiB0aGUgb2xkIHJlc291cmNlLgogICAgICAgICBFbGVtZW50KiByZXNv
dXJjZUVsZW1lbnQgPSB0b0VsZW1lbnQocmVzb3VyY2UtPm5vZGUoKSk7Ci0gICAgICAgIFNWR1N0
eWxlZEVsZW1lbnQqIGNsaWVudEVsZW1lbnQgPSB0b1NWR1N0eWxlZEVsZW1lbnQoaXQtPmZpcnN0
LT5ub2RlKCkpOworICAgICAgICBTVkdTdHlsZWRFbGVtZW50KiBjbGllbnRFbGVtZW50ID0gdG9T
VkdTdHlsZWRFbGVtZW50KGl0LT5rZXktPm5vZGUoKSk7CiAgICAgICAgIFNWR0RvY3VtZW50RXh0
ZW5zaW9ucyogZXh0ZW5zaW9ucyA9IGNsaWVudEVsZW1lbnQtPmRvY3VtZW50KCktPmFjY2Vzc1NW
R0V4dGVuc2lvbnMoKTsKIAogICAgICAgICBleHRlbnNpb25zLT5hZGRQZW5kaW5nUmVzb3VyY2Uo
cmVzb3VyY2VFbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKEhUTUxOYW1lczo6aWRBdHRyKSwgY2xp
ZW50RWxlbWVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1Jvb3RJbmxpbmVCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSb290
SW5saW5lQm94LmNwcAppbmRleCA1NzE0NmM5MGM4MzhhYjY1MzNhNDNlNzM4MDU2ZTM4MmU1ZTg1
YzlmLi5hNDI4YzYxNGRkZjEyNDVhMDM4NThlNTM1YzEyMDAwZGM2NzhjNzMwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jvb3RJbmxpbmVCb3guY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUm9vdElubGluZUJveC5jcHAKQEAgLTIy
NywxNyArMjI3LDE3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzd2FwSXRlbXNJbkxheW91dEF0dHJp
YnV0ZXMoU1ZHVGV4dExheW91dEF0dHJpYnV0ZXMqIGZpcnN0QXR0CiAgICAgICAgIHJldHVybjsK
IAogICAgIGlmIChmaXJzdFByZXNlbnQgJiYgbGFzdFByZXNlbnQpIHsKLSAgICAgICAgc3RkOjpz
d2FwKGl0Rmlyc3QtPnNlY29uZCwgaXRMYXN0LT5zZWNvbmQpOworICAgICAgICBzdGQ6OnN3YXAo
aXRGaXJzdC0+dmFsdWUsIGl0TGFzdC0+dmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CiAgICAgaWYgKGZpcnN0UHJlc2VudCAmJiAhbGFzdFByZXNlbnQpIHsKLSAgICAgICAgbGFzdEF0
dHJpYnV0ZXMtPmNoYXJhY3RlckRhdGFNYXAoKS5zZXQobGFzdFBvc2l0aW9uICsgMSwgaXRGaXJz
dC0+c2Vjb25kKTsKKyAgICAgICAgbGFzdEF0dHJpYnV0ZXMtPmNoYXJhY3RlckRhdGFNYXAoKS5z
ZXQobGFzdFBvc2l0aW9uICsgMSwgaXRGaXJzdC0+dmFsdWUpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCiAgICAgLy8gIWZpcnN0UHJlc2VudCAmJiBsYXN0UHJlc2VudAotICAgIGZpcnN0QXR0
cmlidXRlcy0+Y2hhcmFjdGVyRGF0YU1hcCgpLnNldChmaXJzdFBvc2l0aW9uICsgMSwgaXRMYXN0
LT5zZWNvbmQpOworICAgIGZpcnN0QXR0cmlidXRlcy0+Y2hhcmFjdGVyRGF0YU1hcCgpLnNldChm
aXJzdFBvc2l0aW9uICsgMSwgaXRMYXN0LT52YWx1ZSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9p
ZCBmaW5kRmlyc3RBbmRMYXN0QXR0cmlidXRlc0luVmVjdG9yKFZlY3RvcjxTVkdUZXh0TGF5b3V0
QXR0cmlidXRlcyo+JiBhdHRyaWJ1dGVzLCBSZW5kZXJTVkdJbmxpbmVUZXh0KiBmaXJzdENvbnRl
eHQsIFJlbmRlclNWR0lubGluZVRleHQqIGxhc3RDb250ZXh0LApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRlcy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1dGVzLmNwcAppbmRl
eCBhOTI1OTZjZWVlZGJlMjVhZjc3N2RmNGE0YzgzY2QzZWY5N2I5Y2U4Li42N2ZhMGZhOTgyYWQ2
MGJhNzI2NTFhODQ1NDk1ODFmN2ViNTBjZDBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1dGVzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1dGVzLmNwcApAQCAtNjIsOCAr
NjIsOCBAQCB2b2lkIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzOjpkdW1wKCkgY29uc3QKICAgICBm
cHJpbnRmKHN0ZGVyciwgImNvbnRleHQ6ICVwXG4iLCBtX2NvbnRleHQpOwogICAgIGNvbnN0IFNW
R0NoYXJhY3RlckRhdGFNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fY2hhcmFjdGVyRGF0YU1h
cC5lbmQoKTsKICAgICBmb3IgKFNWR0NoYXJhY3RlckRhdGFNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV9jaGFyYWN0ZXJEYXRhTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAg
ICBjb25zdCBTVkdDaGFyYWN0ZXJEYXRhJiBkYXRhID0gaXQtPnNlY29uZDsKLSAgICAgICAgZnBy
aW50ZihzdGRlcnIsICIgLS0tPiBwb3M9JWksIGRhdGE9eyIsIGl0LT5maXJzdCk7CisgICAgICAg
IGNvbnN0IFNWR0NoYXJhY3RlckRhdGEmIGRhdGEgPSBpdC0+dmFsdWU7CisgICAgICAgIGZwcmlu
dGYoc3RkZXJyLCAiIC0tLT4gcG9zPSVpLCBkYXRhPXsiLCBpdC0+a2V5KTsKICAgICAgICAgZHVt
cFNWR0NoYXJhY3RlckRhdGFNYXBWYWx1ZSgieCIsIGRhdGEueCk7CiAgICAgICAgIGR1bXBTVkdD
aGFyYWN0ZXJEYXRhTWFwVmFsdWUoInkiLCBkYXRhLnkpOwogICAgICAgICBkdW1wU1ZHQ2hhcmFj
dGVyRGF0YU1hcFZhbHVlKCJkeCIsIGRhdGEuZHgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXIu
Y3BwCmluZGV4IDAyYTIxMjNlYjY2N2VjY2Y3M2YwODBmNmJiNGU2ZmVjYTVkMmYzZTYuLmYyMDll
ZTQ4YjE1ZTVlOTkyNWFkNjc1NWJjYzQ0NzY1ZTRkYjVmYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1dGVz
QnVpbGRlci5jcHAKQEAgLTE2Miw3ICsxNjIsNyBAQCB2b2lkIFNWR1RleHRMYXlvdXRBdHRyaWJ1
dGVzQnVpbGRlcjo6YnVpbGRMYXlvdXRBdHRyaWJ1dGVzKFJlbmRlclNWR1RleHQqIHRleHRSbwog
ICAgICAgICBkYXRhLnkgPSAwOwogICAgICAgICBtX2NoYXJhY3RlckRhdGFNYXAuc2V0KDEsIGRh
dGEpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIFNWR0NoYXJhY3RlckRhdGEmIGRhdGEgPSBpdC0+
c2Vjb25kOworICAgICAgICBTVkdDaGFyYWN0ZXJEYXRhJiBkYXRhID0gaXQtPnZhbHVlOwogICAg
ICAgICBpZiAoZGF0YS54ID09IFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzOjplbXB0eVZhbHVlKCkp
CiAgICAgICAgICAgICBkYXRhLnggPSAwOwogICAgICAgICBpZiAoZGF0YS55ID09IFNWR1RleHRM
YXlvdXRBdHRyaWJ1dGVzOjplbXB0eVZhbHVlKCkpCkBAIC0yMzEsNyArMjMxLDcgQEAgdm9pZCBT
VkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXI6OmZpbGxDaGFyYWN0ZXJEYXRhTWFwKGNvbnN0
IFRleHRQb3NpdGlvbiYgcG8KICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAg
ICAgICAgdXBkYXRlQ2hhcmFjdGVyRGF0YShpLCBsYXN0Um90YXRpb24sIGl0LT5zZWNvbmQsIGxl
bmd0aENvbnRleHQsIHhMaXN0UHRyLCB5TGlzdFB0ciwgZHhMaXN0UHRyLCBkeUxpc3RQdHIsIHJv
dGF0ZUxpc3RQdHIpOworICAgICAgICB1cGRhdGVDaGFyYWN0ZXJEYXRhKGksIGxhc3RSb3RhdGlv
biwgaXQtPnZhbHVlLCBsZW5ndGhDb250ZXh0LCB4TGlzdFB0ciwgeUxpc3RQdHIsIGR4TGlzdFB0
ciwgZHlMaXN0UHRyLCByb3RhdGVMaXN0UHRyKTsKICAgICB9CiAKICAgICAvLyBUaGUgbGFzdCBy
b3RhdGlvbiB2YWx1ZSBhbHdheXMgc3BhbnMgdGhlIHdob2xlIHNjb3BlLgpAQCAtMjQ3LDcgKzI0
Nyw3IEBAIHZvaWQgU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyOjpmaWxsQ2hhcmFjdGVy
RGF0YU1hcChjb25zdCBUZXh0UG9zaXRpb24mIHBvCiAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgfQogCi0gICAgICAgIGl0LT5zZWNvbmQucm90YXRlID0gbGFzdFJvdGF0aW9uOworICAg
ICAgICBpdC0+dmFsdWUucm90YXRlID0gbGFzdFJvdGF0aW9uOwogICAgIH0KIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZS5jcHAK
aW5kZXggNWM1NDliMjFjODc1MjA4NDcyNDZhZjI1NGZkMDU5ZjJlM2I5YjVlOC4uYmEyYjc2Mzlk
M2Y5NWI3Mzg5NDc1ZmEyZGMwMGM5YTZhYTg1YjMxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmUuY3BwCkBAIC00NzUsNyArNDc1
LDcgQEAgdm9pZCBTVkdUZXh0TGF5b3V0RW5naW5lOjpsYXlvdXRUZXh0T25MaW5lT3JQYXRoKFNW
R0lubGluZVRleHRCb3gqIHRleHRCb3gsIFJlbmQKICAgICAgICAgU1ZHQ2hhcmFjdGVyRGF0YSBk
YXRhOwogICAgICAgICBTVkdDaGFyYWN0ZXJEYXRhTWFwOjppdGVyYXRvciBpdCA9IGNoYXJhY3Rl
ckRhdGFNYXAuZmluZChtX2xvZ2ljYWxDaGFyYWN0ZXJPZmZzZXQgKyAxKTsKICAgICAgICAgaWYg
KGl0ICE9IGNoYXJhY3RlckRhdGFNYXAuZW5kKCkpCi0gICAgICAgICAgICBkYXRhID0gaXQtPnNl
Y29uZDsKKyAgICAgICAgICAgIGRhdGEgPSBpdC0+dmFsdWU7CiAKICAgICAgICAgZmxvYXQgeCA9
IGRhdGEueDsKICAgICAgICAgZmxvYXQgeSA9IGRhdGEueTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3NCdWlsZGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3NCdWlsZGVyLmNwcAppbmRleCBjOTRm
MGM3NGE0YjY5YjhlZWM2NjA1NmFkYzBiYmYxMTZiNmU0NjlmLi5kMDk3OWIxZDk3YzkzZmUzNjk5
OGM3Y2ExZDVmZDgxOGNmOWJjYWQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1RleHRNZXRyaWNzQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljc0J1aWxkZXIuY3BwCkBAIC0xNzAsNyArMTcwLDcgQEAg
dm9pZCBTVkdUZXh0TWV0cmljc0J1aWxkZXI6Om1lYXN1cmVUZXh0UmVuZGVyZXIoUmVuZGVyU1ZH
SW5saW5lVGV4dCogdGV4dCwgTWVhc3UKICAgICAgICAgICAgIGlmIChkYXRhLT5hbGxDaGFyYWN0
ZXJzTWFwKSB7CiAgICAgICAgICAgICAgICAgY29uc3QgU1ZHQ2hhcmFjdGVyRGF0YU1hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBkYXRhLT5hbGxDaGFyYWN0ZXJzTWFwLT5maW5kKGRhdGEtPnZhbHVl
TGlzdFBvc2l0aW9uICsgbV90ZXh0UG9zaXRpb24gLSBkYXRhLT5za2lwcGVkQ2hhcmFjdGVycyAr
IDEpOwogICAgICAgICAgICAgICAgIGlmIChpdCAhPSBkYXRhLT5hbGxDaGFyYWN0ZXJzTWFwLT5l
bmQoKSkKLSAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcy0+Y2hhcmFjdGVyRGF0YU1hcCgp
LnNldChtX3RleHRQb3NpdGlvbiArIDEsIGl0LT5zZWNvbmQpOworICAgICAgICAgICAgICAgICAg
ICBhdHRyaWJ1dGVzLT5jaGFyYWN0ZXJEYXRhTWFwKCkuc2V0KG1fdGV4dFBvc2l0aW9uICsgMSwg
aXQtPnZhbHVlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHRleHRNZXRyaWNzVmFsdWVz
LT5hcHBlbmQobV9jdXJyZW50TWV0cmljcyk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmNwcAppbmRleCAzMDQ5MDU4NjMxNjVlODYzMjQzNDBjZThk
YmVmYmIwYTc2YjM3NGY5Li4yZjk4MWNlYjk1ZjUwNjg4ZmE1MjUxYmMwNTg5NTI3NWU1YTY1MThj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCkBAIC0xODgs
NyArMTg4LDcgQEAgdm9pZCBTdG9yYWdlQXJlYVN5bmM6OnN5bmNUaW1lckZpcmVkKFRpbWVyPFN0
b3JhZ2VBcmVhU3luYz4qKQogICAgICAgICAgICAgICAgIHBhcnRpYWxTeW5jID0gdHJ1ZTsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1faXRlbXNQ
ZW5kaW5nU3luYy5zZXQoY2hhbmdlZF9pdC0+Zmlyc3QuaXNvbGF0ZWRDb3B5KCksIGNoYW5nZWRf
aXQtPnNlY29uZC5pc29sYXRlZENvcHkoKSk7CisgICAgICAgICAgICBtX2l0ZW1zUGVuZGluZ1N5
bmMuc2V0KGNoYW5nZWRfaXQtPmtleS5pc29sYXRlZENvcHkoKSwgY2hhbmdlZF9pdC0+dmFsdWUu
aXNvbGF0ZWRDb3B5KCkpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKHBhcnRpYWxTeW5jKSB7
CkBAIC0xOTgsNyArMTk4LDcgQEAgdm9pZCBTdG9yYWdlQXJlYVN5bmM6OnN5bmNUaW1lckZpcmVk
KFRpbWVyPFN0b3JhZ2VBcmVhU3luYz4qKQogICAgICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFN0
cmluZz46Oml0ZXJhdG9yIHBlbmRpbmdfaXQgPSBtX2l0ZW1zUGVuZGluZ1N5bmMuYmVnaW4oKTsK
ICAgICAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+OjppdGVyYXRvciBwZW5kaW5nX2Vu
ZCA9IG1faXRlbXNQZW5kaW5nU3luYy5lbmQoKTsKICAgICAgICAgICAgIGZvciAoOyBwZW5kaW5n
X2l0ICE9IHBlbmRpbmdfZW5kOyArK3BlbmRpbmdfaXQpCi0gICAgICAgICAgICAgICAgbV9jaGFu
Z2VkSXRlbXMucmVtb3ZlKHBlbmRpbmdfaXQtPmZpcnN0KTsKKyAgICAgICAgICAgICAgICBtX2No
YW5nZWRJdGVtcy5yZW1vdmUocGVuZGluZ19pdC0+a2V5KTsKICAgICAgICAgfQogCiAgICAgICAg
IGlmICghbV9zeW5jU2NoZWR1bGVkKSB7CkBAIC0zNDUsNyArMzQ1LDcgQEAgdm9pZCBTdG9yYWdl
QXJlYVN5bmM6OnBlcmZvcm1JbXBvcnQoKQogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpp
dGVyYXRvciBlbmQgPSBpdGVtTWFwLmVuZCgpOwogCiAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytp
dCkKLSAgICAgICAgbV9zdG9yYWdlQXJlYS0+aW1wb3J0SXRlbShpdC0+Zmlyc3QsIGl0LT5zZWNv
bmQpOworICAgICAgICBtX3N0b3JhZ2VBcmVhLT5pbXBvcnRJdGVtKGl0LT5rZXksIGl0LT52YWx1
ZSk7CiAKICAgICBtYXJrSW1wb3J0ZWQoKTsKIH0KQEAgLTQzMywxMyArNDMzLDEzIEBAIHZvaWQg
U3RvcmFnZUFyZWFTeW5jOjpzeW5jKGJvb2wgY2xlYXJJdGVtcywgY29uc3QgSGFzaE1hcDxTdHJp
bmcsIFN0cmluZz4mIGl0ZW1zCiAgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKICAgICBmb3IgKEhh
c2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGl0ZW1zLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAvLyBCYXNlZCBvbiB0aGUgbnVsbC1uZXNzIG9m
IHRoZSBzZWNvbmQgYXJndW1lbnQsIGRlY2lkZSB3aGV0aGVyIHRoaXMgaXMgYW4gaW5zZXJ0IG9y
IGEgZGVsZXRlLgotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQmIHF1ZXJ5ID0gaXQtPnNlY29uZC5p
c051bGwoKSA/IHJlbW92ZSA6IGluc2VydDsKKyAgICAgICAgU1FMaXRlU3RhdGVtZW50JiBxdWVy
eSA9IGl0LT52YWx1ZS5pc051bGwoKSA/IHJlbW92ZSA6IGluc2VydDsKIAotICAgICAgICBxdWVy
eS5iaW5kVGV4dCgxLCBpdC0+Zmlyc3QpOworICAgICAgICBxdWVyeS5iaW5kVGV4dCgxLCBpdC0+
a2V5KTsKIAogICAgICAgICAvLyBJZiB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIG5vbi1udWxsLCB3
ZSdyZSBkb2luZyBhbiBpbnNlcnQsIHNvIGJpbmQgaXQgYXMgdGhlIHZhbHVlLgotICAgICAgICBp
ZiAoIWl0LT5zZWNvbmQuaXNOdWxsKCkpCi0gICAgICAgICAgICBxdWVyeS5iaW5kQmxvYigyLCBp
dC0+c2Vjb25kKTsKKyAgICAgICAgaWYgKCFpdC0+dmFsdWUuaXNOdWxsKCkpCisgICAgICAgICAg
ICBxdWVyeS5iaW5kQmxvYigyLCBpdC0+dmFsdWUpOwogCiAgICAgICAgIGludCByZXN1bHQgPSBx
dWVyeS5zdGVwKCk7CiAgICAgICAgIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0RG9uZSkgewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTWFwLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU1hcC5jcHAKaW5kZXggOGU0MmQyZjE3NmRkM2IxMTEyYTAx
YTUxZDhkYjYyZjRiMzhiYmEzNS4uNDBlMWEzOGYxY2E0YTc5ZjBjZTI0NzAxMTUzNDdhZGI5Mjlm
NDk4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTWFwLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VNYXAuY3BwCkBAIC04OSw3ICs4OSw3
IEBAIFN0cmluZyBTdG9yYWdlTWFwOjprZXkodW5zaWduZWQgaW5kZXgpCiAgICAgICAgIHJldHVy
biBTdHJpbmcoKTsKIAogICAgIHNldEl0ZXJhdG9yVG9JbmRleChpbmRleCk7Ci0gICAgcmV0dXJu
IG1faXRlcmF0b3ItPmZpcnN0OworICAgIHJldHVybiBtX2l0ZXJhdG9yLT5rZXk7CiB9CiAKIFN0
cmluZyBTdG9yYWdlTWFwOjpnZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5KSBjb25zdApAQCAtMTMz
LDcgKzEzMyw3IEBAIFBhc3NSZWZQdHI8U3RvcmFnZU1hcD4gU3RvcmFnZU1hcDo6c2V0SXRlbShj
b25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1CiAKICAgICBIYXNoTWFwPFN0cmlu
ZywgU3RyaW5nPjo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IG1fbWFwLmFkZChrZXksIHZhbHVlKTsK
ICAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICBhZGRSZXN1bHQuaXRlcmF0
b3ItPnNlY29uZCA9IHZhbHVlOworICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0g
dmFsdWU7CiAKICAgICBpbnZhbGlkYXRlSXRlcmF0b3IoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcAppbmRleCA1NGI2NDBjZTUyZjVkYTkx
MWQ3MmQ2YzU3NjMwZGI1MTY1ZGNkYWIzLi5jOGFjMmJkM2E4MTQyMTY1NDlmMGY5OTUxZWQ4ZGEx
NzE4NTg3YmZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1l
c3BhY2VJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3Bh
Y2VJbXBsLmNwcApAQCAtNTUsNyArNTUsNyBAQCBQYXNzUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+
IFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpsb2NhbFN0b3JhZ2VOYW1lc3BhY2UoY29uc3QgUwogICAg
ICAgICByZXR1cm4gc3RvcmFnZU5hbWVzcGFjZS5yZWxlYXNlKCk7CiAgICAgfQogCi0gICAgcmV0
dXJuIGl0LT5zZWNvbmQ7CisgICAgcmV0dXJuIGl0LT52YWx1ZTsKIH0KIAogUGFzc1JlZlB0cjxT
dG9yYWdlTmFtZXNwYWNlPiBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6c2Vzc2lvblN0b3JhZ2VOYW1l
c3BhY2UodW5zaWduZWQgcXVvdGEpCkBAIC05Nyw3ICs5Nyw3IEBAIFBhc3NSZWZQdHI8U3RvcmFn
ZU5hbWVzcGFjZT4gU3RvcmFnZU5hbWVzcGFjZUltcGw6OmNvcHkoKQogCiAgICAgU3RvcmFnZUFy
ZWFNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fc3RvcmFnZUFyZWFNYXAuZW5kKCk7CiAgICAgZm9yIChT
dG9yYWdlQXJlYU1hcDo6aXRlcmF0b3IgaSA9IG1fc3RvcmFnZUFyZWFNYXAuYmVnaW4oKTsgaSAh
PSBlbmQ7ICsraSkKLSAgICAgICAgbmV3TmFtZXNwYWNlLT5tX3N0b3JhZ2VBcmVhTWFwLnNldChp
LT5maXJzdCwgaS0+c2Vjb25kLT5jb3B5KCkpOworICAgICAgICBuZXdOYW1lc3BhY2UtPm1fc3Rv
cmFnZUFyZWFNYXAuc2V0KGktPmtleSwgaS0+dmFsdWUtPmNvcHkoKSk7CiAgICAgcmV0dXJuIG5l
d05hbWVzcGFjZS5yZWxlYXNlKCk7CiB9CiAKQEAgLTEzMSw3ICsxMzEsNyBAQCB2b2lkIFN0b3Jh
Z2VOYW1lc3BhY2VJbXBsOjpjbG9zZSgpCiAKICAgICBTdG9yYWdlQXJlYU1hcDo6aXRlcmF0b3Ig
ZW5kID0gbV9zdG9yYWdlQXJlYU1hcC5lbmQoKTsKICAgICBmb3IgKFN0b3JhZ2VBcmVhTWFwOjpp
dGVyYXRvciBpdCA9IG1fc3RvcmFnZUFyZWFNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQot
ICAgICAgICBpdC0+c2Vjb25kLT5jbG9zZSgpOworICAgICAgICBpdC0+dmFsdWUtPmNsb3NlKCk7
CiAKICAgICBpZiAobV9zeW5jTWFuYWdlcikKICAgICAgICAgbV9zeW5jTWFuYWdlci0+Y2xvc2Uo
KTsKQEAgLTE1NCw3ICsxNTQsNyBAQCB2b2lkIFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpjbGVhckFs
bE9yaWdpbnNGb3JEZWxldGlvbigpCiAKICAgICBTdG9yYWdlQXJlYU1hcDo6aXRlcmF0b3IgZW5k
ID0gbV9zdG9yYWdlQXJlYU1hcC5lbmQoKTsKICAgICBmb3IgKFN0b3JhZ2VBcmVhTWFwOjppdGVy
YXRvciBpdCA9IG1fc3RvcmFnZUFyZWFNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAg
ICAgICBpdC0+c2Vjb25kLT5jbGVhckZvck9yaWdpbkRlbGV0aW9uKCk7CisgICAgICAgIGl0LT52
YWx1ZS0+Y2xlYXJGb3JPcmlnaW5EZWxldGlvbigpOwogfQogICAgIAogdm9pZCBTdG9yYWdlTmFt
ZXNwYWNlSW1wbDo6c3luYygpCkBAIC0xNjIsNyArMTYyLDcgQEAgdm9pZCBTdG9yYWdlTmFtZXNw
YWNlSW1wbDo6c3luYygpCiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBTdG9yYWdl
QXJlYU1hcDo6aXRlcmF0b3IgZW5kID0gbV9zdG9yYWdlQXJlYU1hcC5lbmQoKTsKICAgICBmb3Ig
KFN0b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBpdCA9IG1fc3RvcmFnZUFyZWFNYXAuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5zeW5jKCk7CisgICAgICAgIGl0
LT52YWx1ZS0+c3luYygpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwCmluZGV4IDNmNTk3MDViMTcxNTQz
N2JiYjc3NWU4OWMzYjQ5MjQwMzBiNjgzYzUuLjNkN2QwMjczOWQzZDYyMzRjNTUwZGRlMTdiOGM5
YmVkYTkxMTU1ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudEV4
dGVuc2lvbnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudEV4dGVuc2lv
bnMuY3BwCkBAIC0xNTYsNyArMTU2LDcgQEAgdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJl
bW92ZUFuaW1hdGlvbkVsZW1lbnRGcm9tVGFyZ2V0KFNWR1NNSUxFbGVtZW50KiBhbmkKICAgICBI
YXNoTWFwPFNWR0VsZW1lbnQqLCBIYXNoU2V0PFNWR1NNSUxFbGVtZW50Kj4qID46Oml0ZXJhdG9y
IGl0ID0gbV9hbmltYXRlZEVsZW1lbnRzLmZpbmQodGFyZ2V0RWxlbWVudCk7CiAgICAgQVNTRVJU
KGl0ICE9IG1fYW5pbWF0ZWRFbGVtZW50cy5lbmQoKSk7CiAgICAgCi0gICAgSGFzaFNldDxTVkdT
TUlMRWxlbWVudCo+KiBhbmltYXRpb25FbGVtZW50c0ZvclRhcmdldCA9IGl0LT5zZWNvbmQ7Cisg
ICAgSGFzaFNldDxTVkdTTUlMRWxlbWVudCo+KiBhbmltYXRpb25FbGVtZW50c0ZvclRhcmdldCA9
IGl0LT52YWx1ZTsKICAgICBBU1NFUlQoIWFuaW1hdGlvbkVsZW1lbnRzRm9yVGFyZ2V0LT5pc0Vt
cHR5KCkpOwogCiAgICAgYW5pbWF0aW9uRWxlbWVudHNGb3JUYXJnZXQtPnJlbW92ZShhbmltYXRp
b25FbGVtZW50KTsKQEAgLTIxMyw5ICsyMTMsOSBAQCB2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9u
czo6YWRkUGVuZGluZ1Jlc291cmNlKGNvbnN0IEF0b21pY1N0cmluZyYgaWQsIFNWR1N0eWxlZAog
CiAgICAgLy8gVGhlIEhhc2hNYXAgYWRkIGZ1bmN0aW9uIGxlYXZlcyB0aGUgbWFwIGFsb25lIGFu
ZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgZWxlbWVudCBpbiB0aGUKICAgICAvLyBtYXAgaWYg
dGhlIGVsZW1lbnQgYWxyZWFkeSBleGlzdHMuIFNvIHdlIGFkZCB3aXRoIGEgdmFsdWUgb2YgMCwg
YW5kIGl0IGVpdGhlciBmaW5kcyB0aGUKLSAgICAvLyBleGlzdGluZyBlbGVtZW50IG9yIGFkZHMg
YSBuZXcgb25lIGluIGEgc2luZ2xlIG9wZXJhdGlvbi4gVGhlICIuaXRlcmF0b3ItPnNlY29uZCIg
aWRpb20gZ2V0cworICAgIC8vIGV4aXN0aW5nIGVsZW1lbnQgb3IgYWRkcyBhIG5ldyBvbmUgaW4g
YSBzaW5nbGUgb3BlcmF0aW9uLiBUaGUgIi5pdGVyYXRvci0+dmFsdWUiIGlkaW9tIGdldHMKICAg
ICAvLyB1cyB0byB0aGUgaXRlcmF0b3IgZnJvbSBhZGQncyByZXN1bHQsIGFuZCB0aGVuIHRvIHRo
ZSB2YWx1ZSBpbnNpZGUgdGhlIGhhc2ggdGFibGUuCi0gICAgU1ZHUGVuZGluZ0VsZW1lbnRzKiYg
c2V0ID0gbV9wZW5kaW5nUmVzb3VyY2VzLmFkZChpZCwgMCkuaXRlcmF0b3ItPnNlY29uZDsKKyAg
ICBTVkdQZW5kaW5nRWxlbWVudHMqJiBzZXQgPSBtX3BlbmRpbmdSZXNvdXJjZXMuYWRkKGlkLCAw
KS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCFzZXQpCiAgICAgICAgIHNldCA9IG5ldyBTVkdQ
ZW5kaW5nRWxlbWVudHM7CiAgICAgc2V0LT5hZGQoZWxlbWVudCk7CkBAIC0yNDAsNyArMjQwLDcg
QEAgYm9vbCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OmlzRWxlbWVudFBlbmRpbmdSZXNvdXJjZXMo
U1ZHU3R5bGVkRWxlbWVudCogZWxlbWVudCkKIAogICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBT
VkdQZW5kaW5nRWxlbWVudHMqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wZW5kaW5nUmVzb3Vy
Y2VzLmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDxBdG9taWNTdHJpbmcsIFNWR1BlbmRpbmdFbGVt
ZW50cyo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGVuZGluZ1Jlc291cmNlcy5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgU1ZHUGVuZGluZ0VsZW1lbnRzKiBlbGVtZW50cyA9
IGl0LT5zZWNvbmQ7CisgICAgICAgIFNWR1BlbmRpbmdFbGVtZW50cyogZWxlbWVudHMgPSBpdC0+
dmFsdWU7CiAgICAgICAgIEFTU0VSVChlbGVtZW50cyk7CiAKICAgICAgICAgaWYgKGVsZW1lbnRz
LT5jb250YWlucyhlbGVtZW50KSkKQEAgLTI2OCwxMyArMjY4LDEzIEBAIHZvaWQgU1ZHRG9jdW1l
bnRFeHRlbnNpb25zOjpyZW1vdmVFbGVtZW50RnJvbVBlbmRpbmdSZXNvdXJjZXMoU1ZHU3R5bGVk
RWxlbWVudCoKICAgICAgICAgVmVjdG9yPEF0b21pY1N0cmluZz4gdG9CZVJlbW92ZWQ7CiAgICAg
ICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBTVkdQZW5kaW5nRWxlbWVudHMqPjo6aXRlcmF0b3Ig
ZW5kID0gbV9wZW5kaW5nUmVzb3VyY2VzLmVuZCgpOwogICAgICAgICBmb3IgKEhhc2hNYXA8QXRv
bWljU3RyaW5nLCBTVkdQZW5kaW5nRWxlbWVudHMqPjo6aXRlcmF0b3IgaXQgPSBtX3BlbmRpbmdS
ZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBTVkdQZW5k
aW5nRWxlbWVudHMqIGVsZW1lbnRzID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIFNWR1BlbmRp
bmdFbGVtZW50cyogZWxlbWVudHMgPSBpdC0+dmFsdWU7CiAgICAgICAgICAgICBBU1NFUlQoZWxl
bWVudHMpOwogICAgICAgICAgICAgQVNTRVJUKCFlbGVtZW50cy0+aXNFbXB0eSgpKTsKIAogICAg
ICAgICAgICAgZWxlbWVudHMtPnJlbW92ZShlbGVtZW50KTsKICAgICAgICAgICAgIGlmIChlbGVt
ZW50cy0+aXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHRvQmVSZW1vdmVkLmFwcGVuZChpdC0+
Zmlyc3QpOworICAgICAgICAgICAgICAgIHRvQmVSZW1vdmVkLmFwcGVuZChpdC0+a2V5KTsKICAg
ICAgICAgfQogCiAgICAgICAgIGVsZW1lbnQtPmNsZWFySGFzUGVuZGluZ1Jlc291cmNlc0lmUG9z
c2libGUoKTsKQEAgLTI5MCwxMyArMjkwLDEzIEBAIHZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25z
OjpyZW1vdmVFbGVtZW50RnJvbVBlbmRpbmdSZXNvdXJjZXMoU1ZHU3R5bGVkRWxlbWVudCoKICAg
ICAgICAgVmVjdG9yPEF0b21pY1N0cmluZz4gdG9CZVJlbW92ZWQ7CiAgICAgICAgIEhhc2hNYXA8
QXRvbWljU3RyaW5nLCBTVkdQZW5kaW5nRWxlbWVudHMqPjo6aXRlcmF0b3IgZW5kID0gbV9wZW5k
aW5nUmVzb3VyY2VzRm9yUmVtb3ZhbC5lbmQoKTsKICAgICAgICAgZm9yIChIYXNoTWFwPEF0b21p
Y1N0cmluZywgU1ZHUGVuZGluZ0VsZW1lbnRzKj46Oml0ZXJhdG9yIGl0ID0gbV9wZW5kaW5nUmVz
b3VyY2VzRm9yUmVtb3ZhbC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAg
IFNWR1BlbmRpbmdFbGVtZW50cyogZWxlbWVudHMgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAg
U1ZHUGVuZGluZ0VsZW1lbnRzKiBlbGVtZW50cyA9IGl0LT52YWx1ZTsKICAgICAgICAgICAgIEFT
U0VSVChlbGVtZW50cyk7CiAgICAgICAgICAgICBBU1NFUlQoIWVsZW1lbnRzLT5pc0VtcHR5KCkp
OwogCiAgICAgICAgICAgICBlbGVtZW50cy0+cmVtb3ZlKGVsZW1lbnQpOwogICAgICAgICAgICAg
aWYgKGVsZW1lbnRzLT5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgdG9CZVJlbW92ZWQuYXBw
ZW5kKGl0LT5maXJzdCk7CisgICAgICAgICAgICAgICAgdG9CZVJlbW92ZWQuYXBwZW5kKGl0LT5r
ZXkpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gV2UgdXNlIHRoZSByZW1vdmVQZW5kaW5nUmVz
b3VyY2VGb3JSZW1vdmFsIGZ1bmN0aW9uIGhlcmUgYmVjYXVzZSBpdCBkZWFscyB3aXRoIHNldCBs
aWZldGltZSBjb3JyZWN0bHkuCkBAIC0zNTYsNyArMzU2LDcgQEAgSGFzaFNldDxTVkdFbGVtZW50
Kj4qIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6c2V0T2ZFbGVtZW50c1JlZmVyZW5jaW5nVGFyZ2V0
KFNWR0UKICAgICBjb25zdCBIYXNoTWFwPFNWR0VsZW1lbnQqLCBPd25QdHI8SGFzaFNldDxTVkdF
bGVtZW50Kj4gPiA+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fZWxlbWVudERlcGVuZGVuY2llcy5m
aW5kKHJlZmVyZW5jZWRFbGVtZW50KTsKICAgICBpZiAoaXQgPT0gbV9lbGVtZW50RGVwZW5kZW5j
aWVzLmVuZCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gaXQtPnNlY29uZC5nZXQo
KTsKKyAgICByZXR1cm4gaXQtPnZhbHVlLmdldCgpOwogfQogCiB2b2lkIFNWR0RvY3VtZW50RXh0
ZW5zaW9uczo6YWRkRWxlbWVudFJlZmVyZW5jaW5nVGFyZ2V0KFNWR0VsZW1lbnQqIHJlZmVyZW5j
aW5nRWxlbWVudCwgU1ZHRWxlbWVudCogcmVmZXJlbmNlZEVsZW1lbnQpCkBAIC0zODAsOCArMzgw
LDggQEAgdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlbW92ZUFsbFRhcmdldFJlZmVyZW5j
ZXNGb3JFbGVtZW50KFNWR0VsZW1lbnQqIHJlZmUKIAogICAgIEhhc2hNYXA8U1ZHRWxlbWVudCos
IE93blB0cjxIYXNoU2V0PFNWR0VsZW1lbnQqPiA+ID46Oml0ZXJhdG9yIGVuZCA9IG1fZWxlbWVu
dERlcGVuZGVuY2llcy5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8U1ZHRWxlbWVudCosIE93blB0
cjxIYXNoU2V0PFNWR0VsZW1lbnQqPiA+ID46Oml0ZXJhdG9yIGl0ID0gbV9lbGVtZW50RGVwZW5k
ZW5jaWVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBTVkdFbGVtZW50KiBy
ZWZlcmVuY2VkRWxlbWVudCA9IGl0LT5maXJzdDsKLSAgICAgICAgSGFzaFNldDxTVkdFbGVtZW50
Kj4qIHJlZmVyZW5jaW5nRWxlbWVudHMgPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICBTVkdF
bGVtZW50KiByZWZlcmVuY2VkRWxlbWVudCA9IGl0LT5rZXk7CisgICAgICAgIEhhc2hTZXQ8U1ZH
RWxlbWVudCo+KiByZWZlcmVuY2luZ0VsZW1lbnRzID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAg
ICBIYXNoU2V0PFNWR0VsZW1lbnQqPjo6aXRlcmF0b3Igc2V0SXQgPSByZWZlcmVuY2luZ0VsZW1l
bnRzLT5maW5kKHJlZmVyZW5jaW5nRWxlbWVudCk7CiAgICAgICAgIGlmIChzZXRJdCA9PSByZWZl
cmVuY2luZ0VsZW1lbnRzLT5lbmQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtNDAyLDEw
ICs0MDIsMTAgQEAgdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlbW92ZUFsbEVsZW1lbnRS
ZWZlcmVuY2VzRm9yVGFyZ2V0KFNWR0VsZW1lbnQqIHJlZmUKICAgICBIYXNoTWFwPFNWR0VsZW1l
bnQqLCBPd25QdHI8SGFzaFNldDxTVkdFbGVtZW50Kj4gPiA+OjppdGVyYXRvciBpdCA9IG1fZWxl
bWVudERlcGVuZGVuY2llcy5maW5kKHJlZmVyZW5jZWRFbGVtZW50KTsKICAgICBpZiAoaXQgPT0g
bV9lbGVtZW50RGVwZW5kZW5jaWVzLmVuZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJU
KGl0LT5maXJzdCA9PSByZWZlcmVuY2VkRWxlbWVudCk7CisgICAgQVNTRVJUKGl0LT5rZXkgPT0g
cmVmZXJlbmNlZEVsZW1lbnQpOwogICAgIFZlY3RvcjxTVkdFbGVtZW50Kj4gdG9CZU5vdGlmaWVk
OwogCi0gICAgSGFzaFNldDxTVkdFbGVtZW50Kj4qIHJlZmVyZW5jaW5nRWxlbWVudHMgPSBpdC0+
c2Vjb25kLmdldCgpOworICAgIEhhc2hTZXQ8U1ZHRWxlbWVudCo+KiByZWZlcmVuY2luZ0VsZW1l
bnRzID0gaXQtPnZhbHVlLmdldCgpOwogICAgIEhhc2hTZXQ8U1ZHRWxlbWVudCo+OjppdGVyYXRv
ciBzZXRFbmQgPSByZWZlcmVuY2luZ0VsZW1lbnRzLT5lbmQoKTsKICAgICBmb3IgKEhhc2hTZXQ8
U1ZHRWxlbWVudCo+OjppdGVyYXRvciBzZXRJdCA9IHJlZmVyZW5jaW5nRWxlbWVudHMtPmJlZ2lu
KCk7IHNldEl0ICE9IHNldEVuZDsgKytzZXRJdCkKICAgICAgICAgdG9CZU5vdGlmaWVkLmFwcGVu
ZCgqc2V0SXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCmluZGV4IDE3NTNlY2U2NmM5OTky
OWY2ZDZjNzkzNjc3MDI0ZGUzYTljNzIzZTIuLjZhYTFhMTE5NTliMWU1NTdjZmMyZGM4YWRiMTc0
ZDhiMjk2NmVkZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAKQEAgLTc3LDcgKzc3LDcg
QEAgU1ZHRWxlbWVudDo6flNWR0VsZW1lbnQoKQogICAgICAgICBTVkdFbGVtZW50UmFyZURhdGE6
OlNWR0VsZW1lbnRSYXJlRGF0YU1hcDo6aXRlcmF0b3IgaXQgPSByYXJlRGF0YU1hcC5maW5kKHRo
aXMpOwogICAgICAgICBBU1NFUlQoaXQgIT0gcmFyZURhdGFNYXAuZW5kKCkpOwogCi0gICAgICAg
IFNWR0VsZW1lbnRSYXJlRGF0YSogcmFyZURhdGEgPSBpdC0+c2Vjb25kOworICAgICAgICBTVkdF
bGVtZW50UmFyZURhdGEqIHJhcmVEYXRhID0gaXQtPnZhbHVlOwogICAgICAgICByYXJlRGF0YS0+
ZGVzdHJveUFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygpOwogICAgICAgICBpZiAoU1ZHQ3Vy
c29yRWxlbWVudCogY3Vyc29yRWxlbWVudCA9IHJhcmVEYXRhLT5jdXJzb3JFbGVtZW50KCkpCiAg
ICAgICAgICAgICBjdXJzb3JFbGVtZW50LT5yZW1vdmVDbGllbnQodGhpcyk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuY3BwCmluZGV4IGM0
OTYzODM4OTg1N2UwNWU5NzkwN2RjMDM4Zjc4ZTBhMmU5Mzg3ZjguLjMyN2QyMjdhNzk1NTMwNWIz
ZDAxZGNiODE4MmQ1MmE4MTYxZDc1OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9h
bmltYXRpb24vU01JTFRpbWVDb250YWluZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9h
bmltYXRpb24vU01JTFRpbWVDb250YWluZXIuY3BwCkBAIC0yMTEsNyArMjExLDcgQEAgU3RyaW5n
IFNNSUxUaW1lQ29udGFpbmVyOjpiYXNlVmFsdWVGb3IoRWxlbWVudEF0dHJpYnV0ZVBhaXIga2V5
KQogICAgIC8vIEN1cnJlbnRseSBhbmltYXRpb24gb3ZlcndyaXRlcyB0aGVtIHNvIHdlIG5lZWQg
dG8gc2F2ZSB0aGVtIHNvbWV3aGVyZS4KICAgICBCYXNlVmFsdWVNYXA6Oml0ZXJhdG9yIGl0ID0g
bV9zYXZlZEJhc2VWYWx1ZXMuZmluZChrZXkpOwogICAgIGlmIChpdCAhPSBtX3NhdmVkQmFzZVZh
bHVlcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBp
dC0+dmFsdWU7CiAgICAgCiAgICAgU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCA9IGtleS5maXJz
dDsKICAgICBRdWFsaWZpZWROYW1lIGF0dHJpYnV0ZU5hbWUgPSBrZXkuc2Vjb25kOwpAQCAtMjg0
LDcgKzI4NCw3IEBAIHZvaWQgU01JTFRpbWVDb250YWluZXI6OnVwZGF0ZUFuaW1hdGlvbnMoU01J
TFRpbWUgZWxhcHNlZCkKICAgICBWZWN0b3I8U1ZHU01JTEVsZW1lbnQqPiBhbmltYXRpb25zVG9B
cHBseTsKICAgICBSZXN1bHRFbGVtZW50TWFwOjppdGVyYXRvciBlbmQgPSByZXN1bHRzRWxlbWVu
dHMuZW5kKCk7CiAgICAgZm9yIChSZXN1bHRFbGVtZW50TWFwOjppdGVyYXRvciBpdCA9IHJlc3Vs
dHNFbGVtZW50cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGFuaW1hdGlvbnNU
b0FwcGx5LmFwcGVuZChpdC0+c2Vjb25kLmdldCgpKTsKKyAgICAgICAgYW5pbWF0aW9uc1RvQXBw
bHkuYXBwZW5kKGl0LT52YWx1ZS5nZXQoKSk7CiAKICAgICAvLyBTb3J0IDxhbmltYXRlVHJhbmZv
cm0+IHRvIGJlIHRoZSBsYXN0IG9uZSB0byBiZSBhcHBsaWVkLiA8YW5pbWF0ZT4gbWF5IGNoYW5n
ZSB0cmFuc2Zvcm0gYXR0cmlidXRlIGFzCiAgICAgLy8gd2VsbCAoZGlyZWN0bHkgb3IgaW5kaXJl
Y3RseSBieSBtb2RpZnlpbmcgPHVzZT4geC95KSBhbmQgdGhpcyB3YXkgdHJhbnNmb3JtcyBjb21i
aW5lIHByb3Blcmx5LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NW
R0ltYWdlQ2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlQ2Fj
aGUuY3BwCmluZGV4IGZiMzhmZDU1NGI2Mjc2ZTA2ZDZjYTQ4YWU2NTIxNzJiMGQ2ODhjNGQuLjg4
OTlmMTIxMzYxYTBjOTQ2NDExZWQ0NWY2NjI1NWU2ZmU3ODRiOTEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZUNhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VDYWNoZS5jcHAKQEAgLTQyLDcgKzQyLDcgQEAgU1ZH
SW1hZ2VDYWNoZTo6flNWR0ltYWdlQ2FjaGUoKQogCiAgICAgSW1hZ2VEYXRhTWFwOjppdGVyYXRv
ciBlbmQgPSBtX2ltYWdlRGF0YU1hcC5lbmQoKTsKICAgICBmb3IgKEltYWdlRGF0YU1hcDo6aXRl
cmF0b3IgaXQgPSBtX2ltYWdlRGF0YU1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAg
ICAgIGRlbGV0ZSBpdC0+c2Vjb25kLmJ1ZmZlcjsKKyAgICAgICAgZGVsZXRlIGl0LT52YWx1ZS5i
dWZmZXI7CiAKICAgICBtX2ltYWdlRGF0YU1hcC5jbGVhcigpOwogfQpAQCAtNTYsNyArNTYsNyBA
QCB2b2lkIFNWR0ltYWdlQ2FjaGU6OnJlbW92ZVJlbmRlcmVyRnJvbUNhY2hlKGNvbnN0IFJlbmRl
ck9iamVjdCogcmVuZGVyZXIpCiAgICAgaWYgKGl0ID09IG1faW1hZ2VEYXRhTWFwLmVuZCgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBkZWxldGUgaXQtPnNlY29uZC5idWZmZXI7CisgICAgZGVs
ZXRlIGl0LT52YWx1ZS5idWZmZXI7CiAgICAgbV9pbWFnZURhdGFNYXAucmVtb3ZlKGl0KTsKIH0K
IApAQCAtNzMsMTQgKzczLDE0IEBAIFNWR0ltYWdlQ2FjaGU6OlNpemVBbmRab29tIFNWR0ltYWdl
Q2FjaGU6OnJlcXVlc3RlZFNpemVBbmRab29tKGNvbnN0IFJlbmRlck9iamVjCiAgICAgU2l6ZUFu
ZFpvb21NYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zaXplQW5kWm9vbU1hcC5maW5kKHJlbmRl
cmVyKTsKICAgICBpZiAoaXQgPT0gbV9zaXplQW5kWm9vbU1hcC5lbmQoKSkKICAgICAgICAgcmV0
dXJuIFNpemVBbmRab29tKCk7Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgcmV0dXJuIGl0
LT52YWx1ZTsKIH0KIAogdm9pZCBTVkdJbWFnZUNhY2hlOjppbWFnZUNvbnRlbnRDaGFuZ2VkKCkK
IHsKICAgICBJbWFnZURhdGFNYXA6Oml0ZXJhdG9yIGVuZCA9IG1faW1hZ2VEYXRhTWFwLmVuZCgp
OwogICAgIGZvciAoSW1hZ2VEYXRhTWFwOjppdGVyYXRvciBpdCA9IG1faW1hZ2VEYXRhTWFwLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC5pbWFnZU5lZWRzVXBk
YXRlID0gdHJ1ZTsKKyAgICAgICAgaXQtPnZhbHVlLmltYWdlTmVlZHNVcGRhdGUgPSB0cnVlOwog
CiAgICAgLy8gSWYgd2UncmUgaW4gdGhlIG1pZGRsZSBvZiBsYXlvdXQsIHN0YXJ0IHJlZHJhd2lu
ZyBkaXJ0eQogICAgIC8vIGltYWdlcyBvbiBhIHRpbWVyOyBvdGhlcndpc2UgaXQncyBzYWZlIHRv
IGRyYXcgaW1tZWRpYXRlbHkuCkBAIC05Nyw3ICs5Nyw3IEBAIHZvaWQgU1ZHSW1hZ2VDYWNoZTo6
cmVkcmF3KCkKIHsKICAgICBJbWFnZURhdGFNYXA6Oml0ZXJhdG9yIGVuZCA9IG1faW1hZ2VEYXRh
TWFwLmVuZCgpOwogICAgIGZvciAoSW1hZ2VEYXRhTWFwOjppdGVyYXRvciBpdCA9IG1faW1hZ2VE
YXRhTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBJbWFnZURhdGEmIGRh
dGEgPSBpdC0+c2Vjb25kOworICAgICAgICBJbWFnZURhdGEmIGRhdGEgPSBpdC0+dmFsdWU7CiAg
ICAgICAgIGlmICghZGF0YS5pbWFnZU5lZWRzVXBkYXRlKQogICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgIC8vIElmIHRoZSBjb250ZW50IGNoYW5nZWQgd2UgcmVkcmF3IHVzaW5nIG91ciBl
eGlzdGluZyBJbWFnZUJ1ZmZlci4KQEAgLTEyNSwxNCArMTI1LDE0IEBAIEltYWdlKiBTVkdJbWFn
ZUNhY2hlOjpsb29rdXBPckNyZWF0ZUJpdG1hcEltYWdlRm9yUmVuZGVyZXIoY29uc3QgUmVuZGVy
T2JqZWN0KiByCiAgICAgaWYgKHNpemVJdCA9PSBtX3NpemVBbmRab29tTWFwLmVuZCgpKQogICAg
ICAgICByZXR1cm4gSW1hZ2U6Om51bGxJbWFnZSgpOwogCi0gICAgSW50U2l6ZSBzaXplID0gc2l6
ZUl0LT5zZWNvbmQuc2l6ZTsKLSAgICBmbG9hdCB6b29tID0gc2l6ZUl0LT5zZWNvbmQuem9vbTsK
KyAgICBJbnRTaXplIHNpemUgPSBzaXplSXQtPnZhbHVlLnNpemU7CisgICAgZmxvYXQgem9vbSA9
IHNpemVJdC0+dmFsdWUuem9vbTsKICAgICBBU1NFUlQoIXNpemUuaXNFbXB0eSgpKTsKIAogICAg
IC8vIExvb2t1cCBpbWFnZSBmb3IgcmVuZGVyZXIgaW4gY2FjaGUgYW5kIGV2ZW50dWFsbHkgdXBk
YXRlIGl0LgogICAgIEltYWdlRGF0YU1hcDo6aXRlcmF0b3IgaXQgPSBtX2ltYWdlRGF0YU1hcC5m
aW5kKHJlbmRlcmVyKTsKICAgICBpZiAoaXQgIT0gbV9pbWFnZURhdGFNYXAuZW5kKCkpIHsKLSAg
ICAgICAgSW1hZ2VEYXRhJiBkYXRhID0gaXQtPnNlY29uZDsKKyAgICAgICAgSW1hZ2VEYXRhJiBk
YXRhID0gaXQtPnZhbHVlOwogCiAgICAgICAgIC8vIENvbW1vbiBjYXNlOiBpbWFnZSBzaXplICYg
em9vbSByZW1haW5lZCB0aGUgc2FtZS4KICAgICAgICAgaWYgKGRhdGEuc2l6ZUFuZFpvb20uc2l6
ZSA9PSBzaXplICYmIGRhdGEuc2l6ZUFuZFpvb20uem9vbSA9PSB6b29tKQpAQCAtMTU0LDcgKzE1
NCw3IEBAIEltYWdlKiBTVkdJbWFnZUNhY2hlOjpsb29rdXBPckNyZWF0ZUJpdG1hcEltYWdlRm9y
UmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0KiByCiAgICAgSW1hZ2UqIG5ld0ltYWdlUHRyID0g
bmV3SW1hZ2UuZ2V0KCk7CiAgICAgQVNTRVJUKG5ld0ltYWdlUHRyKTsKIAotICAgIG1faW1hZ2VE
YXRhTWFwLmFkZChyZW5kZXJlciwgSW1hZ2VEYXRhKG5ld0J1ZmZlci5sZWFrUHRyKCksIG5ld0lt
YWdlLnJlbGVhc2UoKSwgc2l6ZUl0LT5zZWNvbmQpKTsKKyAgICBtX2ltYWdlRGF0YU1hcC5hZGQo
cmVuZGVyZXIsIEltYWdlRGF0YShuZXdCdWZmZXIubGVha1B0cigpLCBuZXdJbWFnZS5yZWxlYXNl
KCksIHNpemVJdC0+dmFsdWUpKTsKICAgICByZXR1cm4gbmV3SW1hZ2VQdHI7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxk
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxk
ZXIuaAppbmRleCA3MTMyNDFjOGU4OTQxNTQyNjFhOTc4MWE3YzZmNGQ1Y2JlNTFmNmUyLi5iOTFk
ZjA0MmRkNTI0ZmU3YzkyYmUwOWFkY2U0YjFlYjZkMDM2MzljIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oCkBAIC01
MCw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIC8vIE9ubHkgYWxsb3dlZCBmb3Ig
ZWZmZWN0cyBiZWxvbmdzIHRvIHRoaXMgYnVpbGRlci4KICAgICAgICAgQVNTRVJUKG1fZWZmZWN0
UmVmZXJlbmNlcy5jb250YWlucyhlZmZlY3QpKTsKLSAgICAgICAgcmV0dXJuIG1fZWZmZWN0UmVm
ZXJlbmNlcy5maW5kKGVmZmVjdCktPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIG1fZWZmZWN0UmVm
ZXJlbmNlcy5maW5kKGVmZmVjdCktPnZhbHVlOwogICAgIH0KIAogICAgIC8vIFJlcXVpcmVkIHRv
IGNoYW5nZSB0aGUgYXR0cmlidXRlcyBvZiBhIGZpbHRlciBkdXJpbmcgYW4gc3ZnQXR0cmlidXRl
Q2hhbmdlZC4KQEAgLTY2LDcgKzY2LDcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIEhhc2hN
YXA8QXRvbWljU3RyaW5nLCBSZWZQdHI8RmlsdGVyRWZmZWN0PiA+OjppdGVyYXRvciBlbmQgPSBt
X2J1aWx0aW5FZmZlY3RzLmVuZCgpOwogICAgICAgICBmb3IgKEhhc2hNYXA8QXRvbWljU3RyaW5n
LCBSZWZQdHI8RmlsdGVyRWZmZWN0PiA+OjppdGVyYXRvciBpdGVyYXRvciA9IG1fYnVpbHRpbkVm
ZmVjdHMuYmVnaW4oKTsgaXRlcmF0b3IgIT0gZW5kOyArK2l0ZXJhdG9yKQotICAgICAgICAgICAg
IG1fZWZmZWN0UmVmZXJlbmNlcy5hZGQoaXRlcmF0b3ItPnNlY29uZCwgRmlsdGVyRWZmZWN0U2V0
KCkpOworICAgICAgICAgICAgIG1fZWZmZWN0UmVmZXJlbmNlcy5hZGQoaXRlcmF0b3ItPnZhbHVl
LCBGaWx0ZXJFZmZlY3RTZXQoKSk7CiAgICAgfQogCiAgICAgSGFzaE1hcDxBdG9taWNTdHJpbmcs
IFJlZlB0cjxGaWx0ZXJFZmZlY3Q+ID4gbV9idWlsdGluRWZmZWN0czsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHkuaCBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHkuaAppbmRleCA3MTRl
ZjE2OTgzNmU5NDY3ZGFkNmU5YmZkNDRiNzZiOTMzM2FjZDJhLi42ZGE0ZjY5YjNhMDZkMDY0MzIz
NmUyNjlmMWI5MTRkOTllYTM1ZTU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvcHJv
cGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL3By
b3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eS5oCkBAIC01NSw4ICs1NSw4IEBAIHB1YmxpYzoK
ICAgICAgICAgQ2FjaGUqIGNhY2hlID0gYW5pbWF0ZWRQcm9wZXJ0eUNhY2hlKCk7CiAgICAgICAg
IGNvbnN0IENhY2hlOjpjb25zdF9pdGVyYXRvciBlbmQgPSBjYWNoZS0+ZW5kKCk7CiAgICAgICAg
IGZvciAoQ2FjaGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY2FjaGUtPmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewotICAgICAgICAgICAgaWYgKGl0LT5zZWNvbmQgPT0gdGhpcykgewotICAgICAg
ICAgICAgICAgIGNhY2hlLT5yZW1vdmUoaXQtPmZpcnN0KTsKKyAgICAgICAgICAgIGlmIChpdC0+
dmFsdWUgPT0gdGhpcykgeworICAgICAgICAgICAgICAgIGNhY2hlLT5yZW1vdmUoaXQtPmtleSk7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0F0dHJpYnV0ZVRvUHJvcGVy
dHlNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQXR0cmlidXRlVG9Q
cm9wZXJ0eU1hcC5jcHAKaW5kZXggYmUzMWNjM2M3ZGEyZjUwZjUxZjY5YjU1NDQwMjY1ZGIxMzVi
NTI4Yy4uY2M0NmNjZmEwODFmZmM4ODMwOWI3ZWYyMmQ2M2YwZjM0ZWZkODE3YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQXR0cmlidXRlVG9Qcm9wZXJ0eU1h
cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQXR0cmlidXRlVG9Q
cm9wZXJ0eU1hcC5jcHAKQEAgLTMxLDcgKzMxLDcgQEAgdm9pZCBTVkdBdHRyaWJ1dGVUb1Byb3Bl
cnR5TWFwOjphZGRQcm9wZXJ0aWVzKFNWR0F0dHJpYnV0ZVRvUHJvcGVydHlNYXAmIG1hcCkKIHsK
ICAgICBBdHRyaWJ1dGVUb1Byb3BlcnRpZXNNYXA6Oml0ZXJhdG9yIGVuZCA9IG1hcC5tX21hcC5l
bmQoKTsKICAgICBmb3IgKEF0dHJpYnV0ZVRvUHJvcGVydGllc01hcDo6aXRlcmF0b3IgaXQgPSBt
YXAubV9tYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFByb3BlcnRpZXNW
ZWN0b3IqIHZlY3RvciA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFByb3BlcnRpZXNWZWN0b3IqIHZl
Y3RvciA9IGl0LT52YWx1ZTsKICAgICAgICAgQVNTRVJUKHZlY3Rvcik7CiAKICAgICAgICAgUHJv
cGVydGllc1ZlY3Rvcjo6aXRlcmF0b3IgdmVjdG9yRW5kID0gdmVjdG9yLT5lbmQoKTsKQEAgLTgx
LDEyICs4MSwxMiBAQCB2b2lkIFNWR0F0dHJpYnV0ZVRvUHJvcGVydHlNYXA6OnN5bmNocm9uaXpl
UHJvcGVydGllcyhTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudAogICAgIEFTU0VSVChjb250ZXh0
RWxlbWVudCk7CiAgICAgQXR0cmlidXRlVG9Qcm9wZXJ0aWVzTWFwOjppdGVyYXRvciBlbmQgPSBt
X21hcC5lbmQoKTsKICAgICBmb3IgKEF0dHJpYnV0ZVRvUHJvcGVydGllc01hcDo6aXRlcmF0b3Ig
aXQgPSBtX21hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgUHJvcGVydGll
c1ZlY3RvciogdmVjdG9yID0gaXQtPnNlY29uZDsKKyAgICAgICAgUHJvcGVydGllc1ZlY3Rvciog
dmVjdG9yID0gaXQtPnZhbHVlOwogICAgICAgICBBU1NFUlQodmVjdG9yKTsKIAogICAgICAgICBQ
cm9wZXJ0aWVzVmVjdG9yOjppdGVyYXRvciB2ZWN0b3JFbmQgPSB2ZWN0b3ItPmVuZCgpOwogICAg
ICAgICBmb3IgKFByb3BlcnRpZXNWZWN0b3I6Oml0ZXJhdG9yIHZlY3Rvckl0ID0gdmVjdG9yLT5i
ZWdpbigpOyB2ZWN0b3JJdCAhPSB2ZWN0b3JFbmQ7ICsrdmVjdG9ySXQpCi0gICAgICAgICAgICBz
eW5jaHJvbml6ZVByb3BlcnR5KGNvbnRleHRFbGVtZW50LCBpdC0+Zmlyc3QsICp2ZWN0b3JJdCk7
CisgICAgICAgICAgICBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnRleHRFbGVtZW50LCBpdC0+a2V5
LCAqdmVjdG9ySXQpOwogICAgIH0gCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dv
cmtlcnMvV29ya2VyQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNv
bnRleHQuY3BwCmluZGV4IGIxMGMxNDcwZWQ0OGViOGI4MGY4ZmM5YTJlNTc5NjE5ZjE5ZGRkY2Mu
LjBlZWFlM2Y4ODA3ZWQ4ZjdkYTlmNjVmMTkxOWRjODU5OWRjMWNhNTAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcApAQCAtMTc4LDcgKzE3OCw3IEBAIGJvb2wgV29y
a2VyQ29udGV4dDo6aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QKICAgICBBY3RpdmVET01PYmpl
Y3RzTWFwJiBhY3RpdmVPYmplY3RzID0gYWN0aXZlRE9NT2JqZWN0cygpOwogICAgIEFjdGl2ZURP
TU9iamVjdHNNYXA6OmNvbnN0X2l0ZXJhdG9yIGFjdGl2ZU9iamVjdHNFbmQgPSBhY3RpdmVPYmpl
Y3RzLmVuZCgpOwogICAgIGZvciAoQWN0aXZlRE9NT2JqZWN0c01hcDo6Y29uc3RfaXRlcmF0b3Ig
aXRlciA9IGFjdGl2ZU9iamVjdHMuYmVnaW4oKTsgaXRlciAhPSBhY3RpdmVPYmplY3RzRW5kOyAr
K2l0ZXIpIHsKLSAgICAgICAgaWYgKGl0ZXItPmZpcnN0LT5oYXNQZW5kaW5nQWN0aXZpdHkoKSkK
KyAgICAgICAgaWYgKGl0ZXItPmtleS0+aGFzUGVuZGluZ0FjdGl2aXR5KCkpCiAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtl
cnMvV29ya2VyRXZlbnRRdWV1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckV2
ZW50UXVldWUuY3BwCmluZGV4IGY1MWQyZGM1M2IzOGY3NWRmYTk3NzRhNzFiZTNiYTBlMTQwY2Q5
OWIuLmEwZWI3NjEzNjVjM2YxZWYzOGJlZTc0OWUyZjIxNGY4NGFhMDUzMWYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyRXZlbnRRdWV1ZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJFdmVudFF1ZXVlLmNwcApAQCAtMTIwLDcgKzEyMCw3IEBA
IHZvaWQgV29ya2VyRXZlbnRRdWV1ZTo6Y2xvc2UoKQogewogICAgIG1faXNDbG9zZWQgPSB0cnVl
OwogICAgIGZvciAoRXZlbnRUYXNrTWFwOjppdGVyYXRvciBpdCA9IG1fZXZlbnRUYXNrTWFwLmJl
Z2luKCk7IGl0ICE9IG1fZXZlbnRUYXNrTWFwLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIEV2ZW50
RGlzcGF0Y2hlclRhc2sqIHRhc2sgPSBpdC0+c2Vjb25kOworICAgICAgICBFdmVudERpc3BhdGNo
ZXJUYXNrKiB0YXNrID0gaXQtPnZhbHVlOwogICAgICAgICB0YXNrLT5jYW5jZWwoKTsKICAgICB9
CiAgICAgbV9ldmVudFRhc2tNYXAuY2xlYXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3htbC9YTUxIdHRwUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVl
c3QuY3BwCmluZGV4IGE3MWM0NDU1NTM4N2Y1ZmY4Njg0NDM1Mjk4NzQyNDQ0MmM2ODg1MDEuLjk5
NjdiMjJhZTk2ZTJiMWRiNzliMmUyN2IzYTA3MGI3MzQwMWJlYTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1s
L1hNTEh0dHBSZXF1ZXN0LmNwcApAQCAtOTAxLDcgKzkwMSw3IEBAIHZvaWQgWE1MSHR0cFJlcXVl
c3Q6OnNldFJlcXVlc3RIZWFkZXJJbnRlcm5hbChjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGNv
bnN0IFN0CiB7CiAgICAgSFRUUEhlYWRlck1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fcmVxdWVz
dEhlYWRlcnMuYWRkKG5hbWUsIHZhbHVlKTsKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQot
ICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCArPSAiLCAiICsgdmFsdWU7CisgICAgICAg
IHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgKz0gIiwgIiArIHZhbHVlOwogfQogCiBTdHJpbmcgWE1M
SHR0cFJlcXVlc3Q6OmdldFJlcXVlc3RIZWFkZXIoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKSBj
b25zdApAQCAtOTI4LDE2ICs5MjgsMTYgQEAgU3RyaW5nIFhNTEh0dHBSZXF1ZXN0OjpnZXRBbGxS
ZXNwb25zZUhlYWRlcnMoRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiAgICAgICAgIC8vICAgICAy
KSBUaGVyZSdzIG5vIGtub3duIGhhcm0gaW4gaGlkaW5nIFNldC1Db29raWUgaGVhZGVyIGZpZWxk
cyBlbnRpcmVseTsgd2UgZG9uJ3QKICAgICAgICAgLy8gICAgICAgIGtub3cgYW55IHdpZGVseSB1
c2VkIHRlY2huaXF1ZSB0aGF0IHJlcXVpcmVzIGFjY2VzcyB0byB0aGVtLgogICAgICAgICAvLyAg
ICAgMykgRmlyZWZveCBoYXMgaW1wbGVtZW50ZWQgdGhpcyBwb2xpY3kuCi0gICAgICAgIGlmIChp
c1NldENvb2tpZUhlYWRlcihpdC0+Zmlyc3QpICYmICFzZWN1cml0eU9yaWdpbigpLT5jYW5Mb2Fk
TG9jYWxSZXNvdXJjZXMoKSkKKyAgICAgICAgaWYgKGlzU2V0Q29va2llSGVhZGVyKGl0LT5rZXkp
ICYmICFzZWN1cml0eU9yaWdpbigpLT5jYW5Mb2FkTG9jYWxSZXNvdXJjZXMoKSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGlmICghbV9zYW1lT3JpZ2luUmVxdWVzdCAmJiAhaXNP
bkFjY2Vzc0NvbnRyb2xSZXNwb25zZUhlYWRlcldoaXRlbGlzdChpdC0+Zmlyc3QpICYmICFhY2Nl
c3NDb250cm9sRXhwb3NlSGVhZGVyU2V0LmNvbnRhaW5zKGl0LT5maXJzdCkpCisgICAgICAgIGlm
ICghbV9zYW1lT3JpZ2luUmVxdWVzdCAmJiAhaXNPbkFjY2Vzc0NvbnRyb2xSZXNwb25zZUhlYWRl
cldoaXRlbGlzdChpdC0+a2V5KSAmJiAhYWNjZXNzQ29udHJvbEV4cG9zZUhlYWRlclNldC5jb250
YWlucyhpdC0+a2V5KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKGl0LT5maXJzdCk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0
LT5rZXkpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnOicpOwogICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZCgnICcpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+
c2Vjb25kKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPnZhbHVlKTsKICAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xyJyk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKCdcbicpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aEZ1
bmN0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhGdW5jdGlvbnMuY3BwCmluZGV4
IDcwN2NjN2ZjZTJjNzM2MThlODI5ODZkZDZiOTZjNWZlZjczOThlY2IuLmVjYjlmZjk4MTI5M2M5
MzRlNmE2MmNiYmM2ZjA5ODYzYmRmYjhiNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3ht
bC9YUGF0aEZ1bmN0aW9ucy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoRnVuY3Rp
b25zLmNwcApAQCAtNzIzLDcgKzcyMyw3IEBAIEZ1bmN0aW9uKiBjcmVhdGVGdW5jdGlvbihjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uKj4mIGFyZ3MpCiAgICAgSGFz
aE1hcDxTdHJpbmcsIEZ1bmN0aW9uUmVjPjo6aXRlcmF0b3IgZnVuY3Rpb25NYXBJdGVyID0gZnVu
Y3Rpb25NYXAtPmZpbmQobmFtZSk7CiAgICAgRnVuY3Rpb25SZWMqIGZ1bmN0aW9uUmVjID0gMDsK
IAotICAgIGlmIChmdW5jdGlvbk1hcEl0ZXIgPT0gZnVuY3Rpb25NYXAtPmVuZCgpIHx8ICEoZnVu
Y3Rpb25SZWMgPSAmZnVuY3Rpb25NYXBJdGVyLT5zZWNvbmQpLT5hcmdzLmNvbnRhaW5zKGFyZ3Mu
c2l6ZSgpKSkKKyAgICBpZiAoZnVuY3Rpb25NYXBJdGVyID09IGZ1bmN0aW9uTWFwLT5lbmQoKSB8
fCAhKGZ1bmN0aW9uUmVjID0gJmZ1bmN0aW9uTWFwSXRlci0+dmFsdWUpLT5hcmdzLmNvbnRhaW5z
KGFyZ3Muc2l6ZSgpKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBGdW5jdGlvbiogZnVuY3Rp
b24gPSBmdW5jdGlvblJlYy0+ZmFjdG9yeUZuKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS94bWwvWFBhdGhQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoUGFyc2VyLmNw
cAppbmRleCA2MmQ4ZWUzN2ZkNmViYjc0YTU4MGEwMGM1OWJlYjZjZDQwYzVhOGI3Li4xMDk4ZTU0
YTIyOTA3NzlmMWUwOGU5ODAyMTAxMzAzN2U2NmRhODlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS94bWwvWFBhdGhQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aFBh
cnNlci5jcHAKQEAgLTEwNiw3ICsxMDYsNyBAQCBzdGF0aWMgYm9vbCBpc0F4aXNOYW1lKGNvbnN0
IFN0cmluZyYgbmFtZSwgU3RlcDo6QXhpcyYgdHlwZSkKICAgICBBeGlzTmFtZXNNYXA6Oml0ZXJh
dG9yIGl0ID0gYXhpc05hbWVzLmZpbmQobmFtZSk7CiAgICAgaWYgKGl0ID09IGF4aXNOYW1lcy5l
bmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHR5cGUgPSBpdC0+c2Vjb25kOworICAg
IHR5cGUgPSBpdC0+dmFsdWU7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yTGlieHNsdC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS94bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwCmluZGV4IDA3NmE4NTJkMDZkODM3MTAzNzYy
MjY0NWIwMTE5NDUyZWNiZTI0ZDQuLjllYTJhYTcyMTA1Y2Y3YTgwNDkzNmQzMDcxMjQ5ODhmNGM0
MjFlNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yTGlieHNs
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JMaWJ4c2x0LmNwcApA
QCAtMjI1LDggKzIyNSw4IEBAIHN0YXRpYyBjb25zdCBjaGFyKiogeHNsdFBhcmFtQXJyYXlGcm9t
UGFyYW1ldGVyTWFwKFhTTFRQcm9jZXNzb3I6OlBhcmFtZXRlck1hcCYKICAgICBYU0xUUHJvY2Vz
c29yOjpQYXJhbWV0ZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IHBhcmFtZXRlcnMuZW5kKCk7CiAgICAg
dW5zaWduZWQgaW5kZXggPSAwOwogICAgIGZvciAoWFNMVFByb2Nlc3Nvcjo6UGFyYW1ldGVyTWFw
OjppdGVyYXRvciBpdCA9IHBhcmFtZXRlcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0g
ICAgICAgIHBhcmFtZXRlckFycmF5W2luZGV4KytdID0gZmFzdFN0ckR1cChpdC0+Zmlyc3QudXRm
OCgpLmRhdGEoKSk7Ci0gICAgICAgIHBhcmFtZXRlckFycmF5W2luZGV4KytdID0gZmFzdFN0ckR1
cChpdC0+c2Vjb25kLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBwYXJhbWV0ZXJBcnJheVtpbmRl
eCsrXSA9IGZhc3RTdHJEdXAoaXQtPmtleS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgcGFyYW1l
dGVyQXJyYXlbaW5kZXgrK10gPSBmYXN0U3RyRHVwKGl0LT52YWx1ZS51dGY4KCkuZGF0YSgpKTsK
ICAgICB9CiAgICAgcGFyYW1ldGVyQXJyYXlbaW5kZXhdID0gMDsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwv
WFNMVFByb2Nlc3NvclF0LmNwcAppbmRleCBjMGFiNGQ2OTMxN2Q1YzMxYzM2Y2I0YWEwM2RiZTcw
NmMxNTNhOTk4Li5hNGM5ZDc0Y2QyYWE1YWU1YjdkM2M3OWZmMTU4MGQxNjNmNTcwOGY1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvclF0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvclF0LmNwcApAQCAtMTQzLDcgKzE0Myw3IEBAIGJv
b2wgWFNMVFByb2Nlc3Nvcjo6dHJhbnNmb3JtVG9TdHJpbmcoTm9kZSogc291cmNlTm9kZSwgU3Ry
aW5nJiwgU3RyaW5nJiByZXN1bHRTCiAKICAgICBYU0xUUHJvY2Vzc29yOjpQYXJhbWV0ZXJNYXA6
Oml0ZXJhdG9yIGVuZCA9IG1fcGFyYW1ldGVycy5lbmQoKTsKICAgICBmb3IgKFhTTFRQcm9jZXNz
b3I6OlBhcmFtZXRlck1hcDo6aXRlcmF0b3IgaXQgPSBtX3BhcmFtZXRlcnMuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KQotICAgICAgICBxdWVyeS5iaW5kVmFyaWFibGUoUVN0cmluZyhpdC0+Zmly
c3QpLCBRWG1sSXRlbShRVmFyaWFudChRU3RyaW5nKGl0LT5zZWNvbmQpKSkpOworICAgICAgICBx
dWVyeS5iaW5kVmFyaWFibGUoUVN0cmluZyhpdC0+a2V5KSwgUVhtbEl0ZW0oUVZhcmlhbnQoUVN0
cmluZyhpdC0+dmFsdWUpKSkpOwogCiAgICAgUVN0cmluZyBzb3VyY2U7CiAgICAgaWYgKHNvdXJj
ZUlzRG9jdW1lbnQgJiYgb3duZXJEb2N1bWVudC0+dHJhbnNmb3JtU291cmNlKCkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL0JhY2tpbmdTdG9yZS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL0JhY2tpbmdTdG9yZS5jcHAKaW5kZXggZGUzMjFiODVj
N2M4OTY1ZTBjZmUyYzBkNGY1Njc1ZmI0NDBlOTA4OS4uYTBmOGFhYWI2MTE3ODMyMDYyNDg3NTJl
NzE1ZjM0MDYxNWYyZDljMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0Fw
aS9CYWNraW5nU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvQmFj
a2luZ1N0b3JlLmNwcApAQCAtNzIzLDggKzcyMyw4IEBAIHZvaWQgQmFja2luZ1N0b3JlUHJpdmF0
ZTo6c2V0QmFja2luZ1N0b3JlUmVjdChjb25zdCBQbGF0Zm9ybTo6SW50UmVjdCYgYmFja2luZ1N0
CiAgICAgLy8gb3VyIG5ldyBiYWNraW5nIHN0b3JlIHJlY3QuCiAgICAgVGlsZU1hcDo6Y29uc3Rf
aXRlcmF0b3IgdGlsZU1hcEVuZCA9IGN1cnJlbnRNYXAuZW5kKCk7CiAgICAgZm9yIChUaWxlTWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IGN1cnJlbnRNYXAuYmVnaW4oKTsgaXQgIT0gdGlsZU1hcEVu
ZDsgKytpdCkgewotICAgICAgICBUaWxlSW5kZXggb2xkSW5kZXggPSBpdC0+Zmlyc3Q7Ci0gICAg
ICAgIEJhY2tpbmdTdG9yZVRpbGUqIHRpbGUgPSBpdC0+c2Vjb25kOworICAgICAgICBUaWxlSW5k
ZXggb2xkSW5kZXggPSBpdC0+a2V5OworICAgICAgICBCYWNraW5nU3RvcmVUaWxlKiB0aWxlID0g
aXQtPnZhbHVlOwogCiAgICAgICAgIC8vIFJlc2V0IHRoZSBvbGQgaW5kZXguCiAgICAgICAgIHJl
c2V0VGlsZShvbGRJbmRleCwgdGlsZSwgZmFsc2UgLypyZXNldEJhY2tncm91bmQqLyk7CkBAIC03
ODAsOCArNzgwLDggQEAgdm9pZCBCYWNraW5nU3RvcmVQcml2YXRlOjpzZXRCYWNraW5nU3RvcmVS
ZWN0KGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0JiBiYWNraW5nU3QKICAgICBzaXplX3QgaSA9IDA7
CiAgICAgVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgbGVmdE92ZXJFbmQgPSBsZWZ0T3ZlclRpbGVz
LmVuZCgpOwogICAgIGZvciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsZWZ0T3ZlclRp
bGVzLmJlZ2luKCk7IGl0ICE9IGxlZnRPdmVyRW5kOyArK2l0KSB7Ci0gICAgICAgIFRpbGVJbmRl
eCBvbGRJbmRleCA9IGl0LT5maXJzdDsKLSAgICAgICAgQmFja2luZ1N0b3JlVGlsZSogdGlsZSA9
IGl0LT5zZWNvbmQ7CisgICAgICAgIFRpbGVJbmRleCBvbGRJbmRleCA9IGl0LT5rZXk7CisgICAg
ICAgIEJhY2tpbmdTdG9yZVRpbGUqIHRpbGUgPSBpdC0+dmFsdWU7CiAgICAgICAgIGlmIChpID49
IGluZGV4ZXNUb0ZpbGwuc2l6ZSgpKSB7CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTY2Nyw3ICsxNjY3LDcgQEAgUGxhdGZvcm06Oklu
dFJlY3QgQmFja2luZ1N0b3JlUHJpdmF0ZTo6dmlzaWJsZVRpbGVzUmVjdCgpIGNvbnN0CiAgICAg
VGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY3VycmVudE1hcC5lbmQoKTsKICAgICBmb3Ig
KFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY3VycmVudE1hcC5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKICAgICAgICAgVGlsZVJlY3QgdGlsZVJlY3Q7Ci0gICAgICAgIHRpbGVSZWN0
LmZpcnN0ID0gaXQtPmZpcnN0OworICAgICAgICB0aWxlUmVjdC5maXJzdCA9IGl0LT5rZXk7CiAg
ICAgICAgIHRpbGVSZWN0LnNlY29uZCA9IHRoaXMtPnRpbGVSZWN0KCk7CiAgICAgICAgIFBsYXRm
b3JtOjpJbnRSZWN0IHRpbGUgPSBtYXBGcm9tVGlsZXNUb1RyYW5zZm9ybWVkQ29udGVudHModGls
ZVJlY3QpOwogICAgICAgICBpZiAodGlsZS5pbnRlcnNlY3RzKHZpc2libGVDb250ZW50c1JlY3Qo
KSkpCkBAIC0xNzI4LDcgKzE3MjgsNyBAQCB2b2lkIEJhY2tpbmdTdG9yZVByaXZhdGU6OnJlc2V0
VGlsZXMoYm9vbCByZXNldEJhY2tncm91bmQpCiAKICAgICBUaWxlTWFwOjpjb25zdF9pdGVyYXRv
ciBlbmQgPSBjdXJyZW50TWFwLmVuZCgpOwogICAgIGZvciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBjdXJyZW50TWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgcmVz
ZXRUaWxlKGl0LT5maXJzdCwgaXQtPnNlY29uZCwgcmVzZXRCYWNrZ3JvdW5kKTsKKyAgICAgICAg
cmVzZXRUaWxlKGl0LT5rZXksIGl0LT52YWx1ZSwgcmVzZXRCYWNrZ3JvdW5kKTsKIH0KIAogdm9p
ZCBCYWNraW5nU3RvcmVQcml2YXRlOjp1cGRhdGVUaWxlcyhib29sIHVwZGF0ZVZpc2libGUsIGJv
b2wgaW1tZWRpYXRlKQpAQCAtMTc0MSwxMCArMTc0MSwxMCBAQCB2b2lkIEJhY2tpbmdTdG9yZVBy
aXZhdGU6OnVwZGF0ZVRpbGVzKGJvb2wgdXBkYXRlVmlzaWJsZSwgYm9vbCBpbW1lZGlhdGUpCiAK
ICAgICBUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBjdXJyZW50TWFwLmVuZCgpOwogICAg
IGZvciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjdXJyZW50TWFwLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgewotICAgICAgICBib29sIGlzVmlzaWJsZSA9IGlzVGlsZVZpc2libGUo
aXQtPmZpcnN0KTsKKyAgICAgICAgYm9vbCBpc1Zpc2libGUgPSBpc1RpbGVWaXNpYmxlKGl0LT5r
ZXkpOwogICAgICAgICBpZiAoIXVwZGF0ZVZpc2libGUgJiYgaXNWaXNpYmxlKQogICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgIHVwZGF0ZVRpbGUoaXQtPmZpcnN0LCBpbW1lZGlhdGUpOwor
ICAgICAgICB1cGRhdGVUaWxlKGl0LT5rZXksIGltbWVkaWF0ZSk7CiAgICAgfQogfQogCkBAIC0x
NzY1LDggKzE3NjUsOCBAQCB2b2lkIEJhY2tpbmdTdG9yZVByaXZhdGU6OnVwZGF0ZVRpbGVzRm9y
U2Nyb2xsT3JOb3RSZW5kZXJlZFJlZ2lvbihib29sIGNoZWNrTG9hZAogCiAgICAgVGlsZU1hcDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gY3VycmVudE1hcC5lbmQoKTsKICAgICBmb3IgKFRpbGVNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY3VycmVudE1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKLSAgICAgICAgVGlsZUluZGV4IGluZGV4ID0gaXQtPmZpcnN0OwotICAgICAgICBCYWNraW5n
U3RvcmVUaWxlKiB0aWxlID0gaXQtPnNlY29uZDsKKyAgICAgICAgVGlsZUluZGV4IGluZGV4ID0g
aXQtPmtleTsKKyAgICAgICAgQmFja2luZ1N0b3JlVGlsZSogdGlsZSA9IGl0LT52YWx1ZTsKICAg
ICAgICAgYm9vbCBpc1Zpc2libGUgPSBpc1RpbGVWaXNpYmxlKGluZGV4KTsKICAgICAgICAgLy8g
VGhlIHJlY3QgaW4gdHJhbnNmb3JtZWQgY29udGVudHMgY29vcmRpbmF0ZXMuCiAgICAgICAgIFBs
YXRmb3JtOjpJbnRSZWN0IHJlY3Qob3JpZ2luT2ZUaWxlKGluZGV4KSwgdGlsZVNpemUoKSk7CkBA
IC0xOTA5LDggKzE5MDksOCBAQCBCYWNraW5nU3RvcmVQcml2YXRlOjpUaWxlUmVjdExpc3QgQmFj
a2luZ1N0b3JlUHJpdmF0ZTo6bWFwRnJvbVRyYW5zZm9ybWVkQ29udGVudAogICAgIFRpbGVSZWN0
TGlzdCB0aWxlUmVjdExpc3Q7CiAgICAgVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gdGls
ZU1hcC5lbmQoKTsKICAgICBmb3IgKFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdGlsZU1h
cC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgVGlsZUluZGV4IGluZGV4ID0g
aXQtPmZpcnN0OwotICAgICAgICBCYWNraW5nU3RvcmVUaWxlKiB0aWxlID0gaXQtPnNlY29uZDsK
KyAgICAgICAgVGlsZUluZGV4IGluZGV4ID0gaXQtPmtleTsKKyAgICAgICAgQmFja2luZ1N0b3Jl
VGlsZSogdGlsZSA9IGl0LT52YWx1ZTsKIAogICAgICAgICAvLyBOZWVkIHRvIG1hcCB0aGUgcmVj
dCB0byB0aWxlIGNvb3JkaW5hdGVzLgogICAgICAgICBQbGF0Zm9ybTo6SW50UmVjdCByID0gcmVj
dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9G
cmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnkuY3BwIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5
L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50QmxhY2tCZXJyeS5jcHAKaW5kZXggNjQ1
Zjk1MTVjOTExNzEyNjJiMzZiNmI3MGEzNmM5NTg1YzNmNGZlNy4uZjJlYTg2YTZjNWU0MGRmN2Ex
ODY3NmNiYzcwZDA2MWQ2Njk1OWQ1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ibGFja2Jl
cnJ5L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50QmxhY2tCZXJyeS5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50
QmxhY2tCZXJyeS5jcHAKQEAgLTkzNyw4ICs5MzcsOCBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50
QmxhY2tCZXJyeTo6ZGlzcGF0Y2hXaWxsU2VuZFJlcXVlc3QoRG9jdW1lbnRMb2FkZXIqIGRvY0xv
YQogICAgIG1fd2ViUGFnZVByaXZhdGUtPm1fY2xpZW50LT5wb3B1bGF0ZUN1c3RvbUhlYWRlcnMo
cGxhdGZvcm1SZXF1ZXN0KTsKICAgICBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TmV0d29y
a1JlcXVlc3Q6OkhlYWRlckxpc3QmIGhlYWRlckxpc3RzID0gcGxhdGZvcm1SZXF1ZXN0LmdldEhl
YWRlckxpc3RSZWYoKTsKICAgICBmb3IgKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpOZXR3b3JrUmVx
dWVzdDo6SGVhZGVyTGlzdDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBoZWFkZXJMaXN0cy5iZWdpbigp
OyBpdCAhPSBoZWFkZXJMaXN0cy5lbmQoKTsgKytpdCkgewotICAgICAgICBzdGQ6OnN0cmluZyBo
ZWFkZXJTdHJpbmcgPSBpdC0+Zmlyc3Q7Ci0gICAgICAgIHN0ZDo6c3RyaW5nIGhlYWRlclZhbHVl
U3RyaW5nID0gaXQtPnNlY29uZDsKKyAgICAgICAgc3RkOjpzdHJpbmcgaGVhZGVyU3RyaW5nID0g
aXQtPmtleTsKKyAgICAgICAgc3RkOjpzdHJpbmcgaGVhZGVyVmFsdWVTdHJpbmcgPSBpdC0+dmFs
dWU7CiAgICAgICAgIHJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKFN0cmluZzo6ZnJvbVVURjhX
aXRoTGF0aW4xRmFsbGJhY2soaGVhZGVyU3RyaW5nLmRhdGEoKSwgaGVhZGVyU3RyaW5nLmxlbmd0
aCgpKSwgU3RyaW5nOjpmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayhoZWFkZXJWYWx1ZVN0cmlu
Zy5kYXRhKCksIGhlYWRlclZhbHVlU3RyaW5nLmxlbmd0aCgpKSk7CiAgICAgfQogICAgIGlmICgh
aXNNYWluUmVzb3VyY2VMb2FkKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVy
cnkvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uUHJlc2VudGVySW1w
bC5jcHAKaW5kZXggNmIyOTIxMDI5NDYyNzdkYTI4ZTc5OGQ3ZWVkZjhiOTM5YzUzMTljNy4uNDhj
Y2YzYWM1MWFiZGUzNjVhYjAyNzU5ZDFkYWRjNDE2ZmMwMGY1NyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlcklt
cGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9Ob3Rp
ZmljYXRpb25QcmVzZW50ZXJJbXBsLmNwcApAQCAtODEsNyArODEsNyBAQCB2b2lkIE5vdGlmaWNh
dGlvblByZXNlbnRlckltcGw6OmNhbmNlbChOb3RpZmljYXRpb24qIG5vdGlmaWNhdGlvbikKICAg
ICBpZiAoaXQgPT0gbV9ub3RpZmljYXRpb25zLmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBtX3BsYXRmb3JtUHJlc2VudGVyLT5jYW5jZWwoc3RkOjpzdHJpbmcoaXQtPnNlY29uZC51dGY4
KCkuZGF0YSgpKSk7CisgICAgbV9wbGF0Zm9ybVByZXNlbnRlci0+Y2FuY2VsKHN0ZDo6c3RyaW5n
KGl0LT52YWx1ZS51dGY4KCkuZGF0YSgpKSk7CiAgICAgbV9ub3RpZmljYXRpb25zLnJlbW92ZShp
dCk7CiB9CiAKQEAgLTEwOCwxMiArMTA4LDEyIEBAIHZvaWQgTm90aWZpY2F0aW9uUHJlc2VudGVy
SW1wbDo6b25QZXJtaXNzaW9uKGNvbnN0IHN0ZDo6c3RyaW5nJiBkb21haW4sIGJvb2wgaXNBCiAg
ICAgU3RyaW5nIGRvbWFpblN0cmluZyA9IFN0cmluZzo6ZnJvbVVURjgoZG9tYWluLmNfc3RyKCkp
OwogICAgIFBlcm1pc3Npb25SZXF1ZXN0TWFwOjppdGVyYXRvciBpdCA9IG1fcGVybWlzc2lvblJl
cXVlc3RzLmJlZ2luKCk7CiAgICAgZm9yICg7IGl0ICE9IG1fcGVybWlzc2lvblJlcXVlc3RzLmVu
ZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+Zmlyc3QtPnVybCgpLmhvc3QoKSAhPSBkb21h
aW5TdHJpbmcpCisgICAgICAgIGlmIChpdC0+a2V5LT51cmwoKS5ob3N0KCkgIT0gZG9tYWluU3Ry
aW5nKQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgaWYgKGlzQWxsb3dlZCkgewog
ICAgICAgICAgICAgbV9hbGxvd2VkRG9tYWlucy5hZGQoZG9tYWluU3RyaW5nKTsKLSAgICAgICAg
ICAgIGl0LT5zZWNvbmQtPmhhbmRsZUV2ZW50KCk7CisgICAgICAgICAgICBpdC0+dmFsdWUtPmhh
bmRsZUV2ZW50KCk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbV9hbGxvd2VkRG9tYWlu
cy5yZW1vdmUoZG9tYWluU3RyaW5nKTsKIApAQCAtMTQ0LDkgKzE0NCw5IEBAIHZvaWQgTm90aWZp
Y2F0aW9uUHJlc2VudGVySW1wbDo6bm90aWZpY2F0aW9uQ2xpY2tlZChjb25zdCBzdGQ6OnN0cmlu
ZyYgaWQpCiAgICAgU3RyaW5nIGlkU3RyaW5nID0gU3RyaW5nOjpmcm9tVVRGOChpZC5jX3N0cigp
KTsKICAgICBOb3RpZmljYXRpb25NYXA6Oml0ZXJhdG9yIGl0ID0gbV9ub3RpZmljYXRpb25zLmJl
Z2luKCk7CiAgICAgZm9yICg7IGl0ICE9IG1fbm90aWZpY2F0aW9ucy5lbmQoKTsgKytpdCkgewot
ICAgICAgICBpZiAoaXQtPnNlY29uZCA9PSBpZFN0cmluZyAmJiBpdC0+Zmlyc3QtPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSkgewotICAgICAgICAgICAgUmVmUHRyPE5vdGlmaWNhdGlvbj4gbm90
aWZpY2F0aW9uID0gaXQtPmZpcnN0OwotICAgICAgICAgICAgaXQtPmZpcnN0LT5kaXNwYXRjaEV2
ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmNsaWNrRXZlbnQsIGZhbHNlLCB0cnVlKSk7
CisgICAgICAgIGlmIChpdC0+dmFsdWUgPT0gaWRTdHJpbmcgJiYgaXQtPmtleS0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpKSB7CisgICAgICAgICAgICBSZWZQdHI8Tm90aWZpY2F0aW9uPiBub3Rp
ZmljYXRpb24gPSBpdC0+a2V5OworICAgICAgICAgICAgaXQtPmtleS0+ZGlzcGF0Y2hFdmVudChF
dmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50LCBmYWxzZSwgdHJ1ZSkpOwogICAg
ICAgICAgICAgbV9ub3RpZmljYXRpb25zLnJlbW92ZShub3RpZmljYXRpb24pOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVy
cnkvV2ViS2l0U3VwcG9ydC9GYXRGaW5nZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJy
eS9XZWJLaXRTdXBwb3J0L0ZhdEZpbmdlcnMuY3BwCmluZGV4IGI0OWUyNDg1Y2Q3MzE5NGNjMGQ1
ZjVjZDg5ZGYzODAzMDg3ZGU0NzYuLmU4MmMwMjZhNzllYWU3N2Q0NzZlODJhMGY3MzhhMTZjOWFl
ODg0ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0
L0ZhdEZpbmdlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBw
b3J0L0ZhdEZpbmdlcnMuY3BwCkBAIC0yMjksOCArMjI5LDggQEAgY29uc3QgRmF0RmluZ2Vyc1Jl
c3VsdCBGYXRGaW5nZXJzOjpmaW5kQmVzdFBvaW50KCkKIAogICAgIFZlY3RvcjxJbnRlcnNlY3Rp
bmdSZWdpb24+Ojpjb25zdF9pdGVyYXRvciBlbmRJdCA9IGludGVyc2VjdGluZ1JlZ2lvbnMuZW5k
KCk7CiAgICAgZm9yIChWZWN0b3I8SW50ZXJzZWN0aW5nUmVnaW9uPjo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBpbnRlcnNlY3RpbmdSZWdpb25zLmJlZ2luKCk7IGl0ICE9IGVuZEl0OyArK2l0KSB7Ci0g
ICAgICAgIE5vZGUqIGN1cnJlbnROb2RlID0gaXQtPmZpcnN0OwotICAgICAgICBQbGF0Zm9ybTo6
SW50UmVjdFJlZ2lvbiBjdXJyZW50SW50ZXJzZWN0aW9uUmVnaW9uID0gaXQtPnNlY29uZDsKKyAg
ICAgICAgTm9kZSogY3VycmVudE5vZGUgPSBpdC0+a2V5OworICAgICAgICBQbGF0Zm9ybTo6SW50
UmVjdFJlZ2lvbiBjdXJyZW50SW50ZXJzZWN0aW9uUmVnaW9uID0gaXQtPnZhbHVlOwogCiAgICAg
ICAgIGludCBjdXJyZW50SW50ZXJzZWN0aW9uUmVnaW9uQXJlYSA9IGN1cnJlbnRJbnRlcnNlY3Rp
b25SZWdpb24uYXJlYSgpOwogICAgICAgICBpZiAoY3VycmVudEludGVyc2VjdGlvblJlZ2lvbkFy
ZWEgPiBsYXJnZXN0SW50ZXJzZWN0aW9uUmVnaW9uQXJlYQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvRnJhbWVMYXllcnMuY3BwIGIvU291cmNlL1dl
YktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvRnJhbWVMYXllcnMuY3BwCmluZGV4IGI4NzU2
NDZkYTRmOWFjOTYyZGMzMjkwYTQ2Mjk3MWUyNmJjZDQ0OTEuLjg3ZDdiNWIwYjM4YmI2MGE5ZGZm
ODcxMWNkN2ViMzM5NGQ5YjUwNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJy
eS9XZWJLaXRTdXBwb3J0L0ZyYW1lTGF5ZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNr
YmVycnkvV2ViS2l0U3VwcG9ydC9GcmFtZUxheWVycy5jcHAKQEAgLTkxLDcgKzkxLDcgQEAgdm9p
ZCBGcmFtZUxheWVyczo6cmVtb3ZlTGF5ZXJCeUZyYW1lKEZyYW1lKiBmcmFtZSkKICAgICBBU1NF
UlQoZnJhbWUpOwogICAgIEZyYW1lTGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9mcmFtZUxheWVy
cy5maW5kKGZyYW1lKTsKICAgICBpZiAoaXQgIT0gbV9mcmFtZUxheWVycy5lbmQoKSkgewotICAg
ICAgICBMYXllcldlYktpdFRocmVhZCogbGF5ZXIgPSBpdC0+c2Vjb25kOworICAgICAgICBMYXll
cldlYktpdFRocmVhZCogbGF5ZXIgPSBpdC0+dmFsdWU7CiAgICAgICAgIGlmIChsYXllci0+c3Vw
ZXJsYXllcigpKQogICAgICAgICAgICAgbGF5ZXItPnJlbW92ZUZyb21TdXBlcmxheWVyKCk7CiAg
ICAgICAgIG1fZnJhbWVMYXllcnMucmVtb3ZlKGl0KTsKQEAgLTEwNCw3ICsxMDQsNyBAQCB2b2lk
IEZyYW1lTGF5ZXJzOjpjb21taXRPbldlYktpdFRocmVhZChkb3VibGUgc2NhbGUpCiAgICAgQVNT
RVJUKG1fcm9vdExheWVyKTsKICAgICBpZiAoIWlzUm9vdExheWVyTWFpbkZyYW1lTGF5ZXIoKSkg
ewogICAgICAgICBmb3IgKEZyYW1lTGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9mcmFtZUxheWVy
cy5iZWdpbigpOyBpdCAhPSBtX2ZyYW1lTGF5ZXJzLmVuZCgpOyArK2l0KQotICAgICAgICAgICAg
aXQtPnNlY29uZC0+c2V0QWJzb2x1dGVPZmZzZXQoZnJhbWVMYXllckFic29sdXRlT2Zmc2V0KGl0
LT5maXJzdCkpOworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRBYnNvbHV0ZU9mZnNldChmcmFt
ZUxheWVyQWJzb2x1dGVPZmZzZXQoaXQtPmtleSkpOwogICAgIH0KICAgICBtX3Jvb3RMYXllci0+
Y29tbWl0T25XZWJLaXRUaHJlYWQoc2NhbGUpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuY3Bw
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVx
dWVzdE1hbmFnZXIuY3BwCmluZGV4IDRjMGVkOWNkNzE3YjZmNGQ1YWE2YWZhZjk3MGJlYjY5Njc5
Njg5ZDMuLjFlZWFjNjY3YmRmNjZiM2YxOTNmYjMzNWEzODcxMjhmYmM5MTI2NzQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdlb2xvY2F0aW9uUGVybWlzc2lvblJl
cXVlc3RNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHZW9s
b2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5jcHAKQEAgLTY0LDcgKzY0LDcgQEAgYm9v
bCBXZWJHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlcjo6cmVtb3ZlKGNvbnN0IFdl
YktpdDo6V2ViR2VvbG9jYXRpb24KICAgICBHZW9sb2NhdGlvbklkTWFwOjppdGVyYXRvciBpdCA9
IG1fcHJpdmF0ZS0+bV9nZW9sb2NhdGlvbklkTWFwLmZpbmQoZ2VvbG9jYXRpb24pOwogICAgIGlm
IChpdCA9PSBtX3ByaXZhdGUtPm1fZ2VvbG9jYXRpb25JZE1hcC5lbmQoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIGlkID0gaXQtPnNlY29uZDsKKyAgICBpZCA9IGl0LT52YWx1ZTsKICAg
ICBtX3ByaXZhdGUtPm1fZ2VvbG9jYXRpb25JZE1hcC5yZW1vdmUoaXQpOwogICAgIG1fcHJpdmF0
ZS0+bV9pZEdlb2xvY2F0aW9uTWFwLnJlbW92ZShpZCk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC03
NSw3ICs3NSw3IEBAIGJvb2wgV2ViR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXI6
OnJlbW92ZShpbnQgaWQsIFdlYktpdDo6V2ViR2VvbG9jYXRpCiAgICAgSWRHZW9sb2NhdGlvbk1h
cDo6aXRlcmF0b3IgaXQgPSBtX3ByaXZhdGUtPm1faWRHZW9sb2NhdGlvbk1hcC5maW5kKGlkKTsK
ICAgICBpZiAoaXQgPT0gbV9wcml2YXRlLT5tX2lkR2VvbG9jYXRpb25NYXAuZW5kKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBHZW9sb2NhdGlvbiogZ2VvbG9jYXRpb24gPSBpdC0+c2Vj
b25kOworICAgIEdlb2xvY2F0aW9uKiBnZW9sb2NhdGlvbiA9IGl0LT52YWx1ZTsKICAgICBwZXJt
aXNzaW9uUmVxdWVzdCA9IFdlYkdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3QoZ2VvbG9jYXRp
b24pOwogICAgIG1fcHJpdmF0ZS0+bV9pZEdlb2xvY2F0aW9uTWFwLnJlbW92ZShpdCk7CiAgICAg
bV9wcml2YXRlLT5tX2dlb2xvY2F0aW9uSWRNYXAucmVtb3ZlKGdlb2xvY2F0aW9uKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViU29ja2V0RXh0ZW5zaW9uRGlz
cGF0Y2hlclRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJTb2NrZXRF
eHRlbnNpb25EaXNwYXRjaGVyVGVzdC5jcHAKaW5kZXggMzU4OTgzYjgzOTkzMTRjZGEwMzdjOGMw
MzI0OWVlOWI2NzJlOTY3Yi4uMjQ1MTRjZDU4ZmJmZDAwYWFhODg3MjQyYTFhYzM2MzMxY2FlYjc4
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJTb2NrZXRFeHRl
bnNpb25EaXNwYXRjaGVyVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9XZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyVGVzdC5jcHAKQEAgLTEwMywxMCArMTAzLDEw
IEBAIFRFU1RfRihXZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyVGVzdCwgVGVzdFBhcmFtZXRl
cnMpCiAgICAgRVhQRUNUX0VRKDIsIG1fcGFyc2VkUGFyYW1ldGVyc1swXS5zaXplKCkpOwogICAg
IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+OjppdGVyYXRvciBwYXJhbWV0ZXIgPSBtX3BhcnNlZFBh
cmFtZXRlcnNbMF0uZmluZCgibWF4LWNoYW5uZWxzIik7CiAgICAgRVhQRUNUX1RSVUUocGFyYW1l
dGVyICE9IG1fcGFyc2VkUGFyYW1ldGVyc1swXS5lbmQoKSk7Ci0gICAgRVhQRUNUX0VRKCI0Iiwg
cGFyYW1ldGVyLT5zZWNvbmQpOworICAgIEVYUEVDVF9FUSgiNCIsIHBhcmFtZXRlci0+dmFsdWUp
OwogICAgIHBhcmFtZXRlciA9IG1fcGFyc2VkUGFyYW1ldGVyc1swXS5maW5kKCJmbG93LWNvbnRy
b2wiKTsKICAgICBFWFBFQ1RfVFJVRShwYXJhbWV0ZXIgIT0gbV9wYXJzZWRQYXJhbWV0ZXJzWzBd
LmVuZCgpKTsKLSAgICBFWFBFQ1RfVFJVRShwYXJhbWV0ZXItPnNlY29uZC5pc051bGwoKSk7Cisg
ICAgRVhQRUNUX1RSVUUocGFyYW1ldGVyLT52YWx1ZS5pc051bGwoKSk7CiB9CiAKIFRFU1RfRihX
ZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyVGVzdCwgVGVzdE11bHRpcGxlKQpAQCAtMTMxLDEy
ICsxMzEsMTIgQEAgVEVTVF9GKFdlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXJUZXN0LCBUZXN0
TXVsdGlwbGUpCiAgICAgICAgIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBwYXJzZWRQ
YXJhbWV0ZXJzID0gbV9wYXJzZWRQYXJhbWV0ZXJzW2ldOwogICAgICAgICBFWFBFQ1RfRVEoZXhw
ZWN0ZWRbaV0ucGFyYW1ldGVycy5zaXplKCksIG1fcGFyc2VkUGFyYW1ldGVyc1tpXS5zaXplKCkp
OwogICAgICAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBp
dGVyYXRvciA9IGV4cGVjdGVkUGFyYW1ldGVycy5iZWdpbigpOyBpdGVyYXRvciAhPSBleHBlY3Rl
ZFBhcmFtZXRlcnMuZW5kKCk7ICsraXRlcmF0b3IpIHsKLSAgICAgICAgICAgIEhhc2hNYXA8U3Ry
aW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBwYXJzZWQgPSBwYXJzZWRQYXJhbWV0ZXJzLmZp
bmQoaXRlcmF0b3ItPmZpcnN0KTsKKyAgICAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+
Ojpjb25zdF9pdGVyYXRvciBwYXJzZWQgPSBwYXJzZWRQYXJhbWV0ZXJzLmZpbmQoaXRlcmF0b3It
PmtleSk7CiAgICAgICAgICAgICBFWFBFQ1RfVFJVRShwYXJzZWQgIT0gcGFyc2VkUGFyYW1ldGVy
cy5lbmQoKSk7Ci0gICAgICAgICAgICBpZiAoaXRlcmF0b3ItPnNlY29uZC5pc051bGwoKSkKLSAg
ICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShwYXJzZWQtPnNlY29uZC5pc051bGwoKSk7CisgICAg
ICAgICAgICBpZiAoaXRlcmF0b3ItPnZhbHVlLmlzTnVsbCgpKQorICAgICAgICAgICAgICAgIEVY
UEVDVF9UUlVFKHBhcnNlZC0+dmFsdWUuaXNOdWxsKCkpOwogICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIEVYUEVDVF9FUShpdGVyYXRvci0+c2Vjb25kLCBwYXJzZWQtPnNlY29uZCk7
CisgICAgICAgICAgICAgICAgRVhQRUNUX0VRKGl0ZXJhdG9yLT52YWx1ZSwgcGFyc2VkLT52YWx1
ZSk7CiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9X
ZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNHdGsuY3BwIGIvU291cmNlL1dlYktpdC9n
dGsvV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzR3RrLmNwcAppbmRleCAyOTIxNzNh
ZTI5MmY1MTIxMTg3ZThiZTUwNTAzOTNkN2MzMzg0YzVhLi45MTAzYzg0NjA5NGQ1MWY4ZjViOTQ4
NzRjZDY3YWYwNDc5OTA5YWUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3Jl
U3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3Rr
L1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc0d0ay5jcHAKQEAgLTg4LDggKzg4LDgg
QEAgdm9pZCBQbGF0Zm9ybVN0cmF0ZWdpZXNHdGs6OmdldFBsdWdpbkluZm8oY29uc3QgUGFnZSog
cGFnZSwgVmVjdG9yPFBsdWdpbkluZm8+JgogICAgICAgICBNSU1FVG9EZXNjcmlwdGlvbnNNYXA6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5lbmQoKTsKICAgICAgICAg
Zm9yIChNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWltZVRvRGVz
Y3JpcHRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgTWltZUNs
YXNzSW5mbyBtaW1lOwotICAgICAgICAgICAgbWltZS50eXBlID0gaXQtPmZpcnN0OwotICAgICAg
ICAgICAgbWltZS5kZXNjID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIG1pbWUudHlwZSA9IGl0
LT5rZXk7CisgICAgICAgICAgICBtaW1lLmRlc2MgPSBpdC0+dmFsdWU7CiAgICAgICAgICAgICBt
aW1lLmV4dGVuc2lvbnMgPSBwYWNrYWdlLT5taW1lVG9FeHRlbnNpb25zKCkuZ2V0KG1pbWUudHlw
ZSk7CiAgICAgICAgICAgICBwbHVnaW5JbmZvLm1pbWVzLmFwcGVuZChtaW1lKTsKICAgICAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGZhdmljb25kYXRh
YmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZmF2aWNvbmRhdGFiYXNl
LmNwcAppbmRleCBhMWZkMzdhMWUzMWRlZTg4MmZmNGNiOGNmNmM2ZjMwOTRiMWM1NjFkLi4wMDZh
YjJiN2YzNDFhZTZhNDBjMmMwMjJjNWMwY2M1NzRjN2VmNjQwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZmF2aWNvbmRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZmF2aWNvbmRhdGFiYXNlLmNwcApAQCAtNjExLDE4ICs2
MTEsMTggQEAgc3RhdGljIHZvaWQgd2Via2l0RmF2aWNvbkRhdGFiYXNlSW1wb3J0RmluaXNoZWQo
V2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSkKICAgICBWZWN0b3I8U3RyaW5nPiB0b0Rl
bGV0ZVVSTHM7CiAgICAgUGVuZGluZ0ljb25SZXF1ZXN0TWFwOjpjb25zdF9pdGVyYXRvciBlbmQg
PSBkYXRhYmFzZS0+cHJpdi0+cGVuZGluZ0ljb25SZXF1ZXN0cy5lbmQoKTsKICAgICBmb3IgKFBl
bmRpbmdJY29uUmVxdWVzdE1hcDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGRhdGFiYXNlLT5wcml2
LT5wZW5kaW5nSWNvblJlcXVlc3RzLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKLSAg
ICAgICAgU3RyaW5nIGljb25VUkwgPSBpY29uRGF0YWJhc2UoKS5zeW5jaHJvbm91c0ljb25VUkxG
b3JQYWdlVVJMKGl0ZXItPmZpcnN0KTsKKyAgICAgICAgU3RyaW5nIGljb25VUkwgPSBpY29uRGF0
YWJhc2UoKS5zeW5jaHJvbm91c0ljb25VUkxGb3JQYWdlVVJMKGl0ZXItPmtleSk7CiAgICAgICAg
IGlmICghaWNvblVSTC5pc0VtcHR5KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAg
ICBQZW5kaW5nSWNvblJlcXVlc3RWZWN0b3IqIGljb25zID0gaXRlci0+c2Vjb25kOworICAgICAg
ICBQZW5kaW5nSWNvblJlcXVlc3RWZWN0b3IqIGljb25zID0gaXRlci0+dmFsdWU7CiAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaWNvbnMtPnNpemUoKTsgKytpKSB7CiAgICAgICAgICAg
ICBQZW5kaW5nSWNvblJlcXVlc3QqIHJlcXVlc3QgPSBpY29ucy0+YXQoaSkuZ2V0KCk7CiAgICAg
ICAgICAgICBpZiAocmVxdWVzdC0+YXN5bmNSZXN1bHQoKSkKICAgICAgICAgICAgICAgICByZXF1
ZXN0LT5hc3luY1Jlc3VsdENvbXBsZXRlKDApOwogICAgICAgICB9CiAKLSAgICAgICAgdG9EZWxl
dGVVUkxzLmFwcGVuZChpdGVyLT5maXJzdCk7CisgICAgICAgIHRvRGVsZXRlVVJMcy5hcHBlbmQo
aXRlci0+a2V5KTsKICAgICB9CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRvRGVsZXRl
VVJMcy5zaXplKCk7ICsraSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXR3ZWJwbHVnaW4uY3BwIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnBs
dWdpbi5jcHAKaW5kZXggZTAzYjFlYTZkYTMzYjdlMmYwMDIyNTVjZTg3Nzc4NjI0Y2RhNzA4Yy4u
MDFkMGJiNWYyYmZkNzAwZjZiM2M5ZmM0ZjhlNDIwYzU3MjQ4NmVjMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnBsdWdpbi5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnBsdWdpbi5jcHAKQEAgLTIzNywxMCArMjM3LDEwIEBA
IEdTTGlzdCogd2Via2l0X3dlYl9wbHVnaW5fZ2V0X21pbWV0eXBlcyhXZWJLaXRXZWJQbHVnaW4q
IHBsdWdpbikKIAogICAgIGZvciAoTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAg
ICAgICAgV2ViS2l0V2ViUGx1Z2luTUlNRVR5cGUqIG1pbWVUeXBlID0gZ19zbGljZV9uZXcwKFdl
YktpdFdlYlBsdWdpbk1JTUVUeXBlKTsKLSAgICAgICAgbWltZVR5cGUtPm5hbWUgPSBnX3N0cmR1
cChpdC0+Zmlyc3QudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIG1pbWVUeXBlLT5kZXNjcmlwdGlv
biA9IGdfc3RyZHVwKGl0LT5zZWNvbmQudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIG1pbWVUeXBl
LT5uYW1lID0gZ19zdHJkdXAoaXQtPmtleS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgbWltZVR5
cGUtPmRlc2NyaXB0aW9uID0gZ19zdHJkdXAoaXQtPnZhbHVlLnV0ZjgoKS5kYXRhKCkpOwogCi0g
ICAgICAgIFZlY3RvcjxTdHJpbmc+IGV4dGVuc2lvbnMgPSBwcml2LT5jb3JlUGx1Z2luLT5taW1l
VG9FeHRlbnNpb25zKCkuZ2V0KGl0LT5maXJzdCk7CisgICAgICAgIFZlY3RvcjxTdHJpbmc+IGV4
dGVuc2lvbnMgPSBwcml2LT5jb3JlUGx1Z2luLT5taW1lVG9FeHRlbnNpb25zKCkuZ2V0KGl0LT5r
ZXkpOwogICAgICAgICBtaW1lVHlwZS0+ZXh0ZW5zaW9ucyA9IHN0YXRpY19jYXN0PGdjaGFyKio+
KGdfbWFsbG9jMChzaXplb2YoY2hhciopICogKGV4dGVuc2lvbnMuc2l6ZSgpICsgMSkpKTsKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4dGVuc2lvbnMuc2l6ZSgpOyBpKyspCiAg
ICAgICAgICAgICBtaW1lVHlwZS0+ZXh0ZW5zaW9uc1tpXSA9IGdfc3RyZHVwKGV4dGVuc2lvbnNb
aV0udXRmOCgpLmRhdGEoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9IaXN0b3J5
L1dlYkhpc3RvcnkubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9IaXN0b3J5L1dlYkhpc3RvcnkubW0K
aW5kZXggNjk2NGZjOTQ5YjUxMjE3M2E2YmRjNWU3MGI1NjE4ZDMxY2I2NzdhMy4uZTc4MWQzMmZk
MWRlOTUwZDkxNGFmNDgzNDk3NjQyMGRmNTg3ZGFmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9tYWMvSGlzdG9yeS9XZWJIaXN0b3J5Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL0hpc3Rv
cnkvV2ViSGlzdG9yeS5tbQpAQCAtMjM4LDcgKzIzOCw3IEBAIHN0YXRpYyBpbmxpbmUgV2ViSGlz
dG9yeURhdGVLZXkgZGF0ZUtleShOU1RpbWVJbnRlcnZhbCBkYXRlKQogICAgICAgICByZXR1cm4g
Tk87CiAKICAgICBEYXRlVG9FbnRyaWVzTWFwOjppdGVyYXRvciBpdCA9IF9lbnRyaWVzQnlEYXRl
LT5maW5kKGRhdGVLZXkpOwotICAgIE5TTXV0YWJsZUFycmF5ICplbnRyaWVzRm9yRGF0ZSA9IGl0
LT5zZWNvbmQuZ2V0KCk7CisgICAgTlNNdXRhYmxlQXJyYXkgKmVudHJpZXNGb3JEYXRlID0gaXQt
PnZhbHVlLmdldCgpOwogICAgIFtlbnRyaWVzRm9yRGF0ZSByZW1vdmVPYmplY3RJZGVudGljYWxU
bzplbnRyeV07CiAgICAgCiAgICAgLy8gcmVtb3ZlIHRoaXMgZGF0ZSBlbnRpcmVseSBpZiB0aGVy
ZSBhcmUgbm8gb3RoZXIgZW50cmllcyBvbiBpdApAQCAtNDQwLDcgKzQ0MCw3IEBAIHN0YXRpYyBp
bmxpbmUgV2ViSGlzdG9yeURhdGVLZXkgZGF0ZUtleShOU1RpbWVJbnRlcnZhbCBkYXRlKQogICAg
ICAgICBkYXlzQXNUaW1lSW50ZXJ2YWxzLnJlc2VydmVDYXBhY2l0eShfZW50cmllc0J5RGF0ZS0+
c2l6ZSgpKTsKICAgICAgICAgRGF0ZVRvRW50cmllc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
X2VudHJpZXNCeURhdGUtPmVuZCgpOwogICAgICAgICBmb3IgKERhdGVUb0VudHJpZXNNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gX2VudHJpZXNCeURhdGUtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkKLSAgICAgICAgICAgIGRheXNBc1RpbWVJbnRlcnZhbHMuYXBwZW5kKGl0LT5maXJzdCk7Cisg
ICAgICAgICAgICBkYXlzQXNUaW1lSW50ZXJ2YWxzLmFwcGVuZChpdC0+a2V5KTsKIAogICAgICAg
ICBzb3J0KGRheXNBc1RpbWVJbnRlcnZhbHMuYmVnaW4oKSwgZGF5c0FzVGltZUludGVydmFscy5l
bmQoKSk7CiAgICAgICAgIHNpemVfdCBjb3VudCA9IGRheXNBc1RpbWVJbnRlcnZhbHMuc2l6ZSgp
OwpAQCAtODk3LDcgKzg5Nyw3IEBAIFdlYkhpc3RvcnlXcml0ZXI6OldlYkhpc3RvcnlXcml0ZXIo
RGF0ZVRvRW50cmllc01hcCogZW50cmllc0J5RGF0ZSkKICAgICBtX2RhdGVLZXlzLnJlc2VydmVD
YXBhY2l0eShtX2VudHJpZXNCeURhdGUtPnNpemUoKSk7CiAgICAgRGF0ZVRvRW50cmllc01hcDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9lbnRyaWVzQnlEYXRlLT5lbmQoKTsKICAgICBmb3IgKERh
dGVUb0VudHJpZXNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9lbnRyaWVzQnlEYXRlLT5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIG1fZGF0ZUtleXMuYXBwZW5kKGl0LT5maXJz
dCk7CisgICAgICAgIG1fZGF0ZUtleXMuYXBwZW5kKGl0LT5rZXkpOwogICAgIHNvcnQobV9kYXRl
S2V5cy5iZWdpbigpLCBtX2RhdGVLZXlzLmVuZCgpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbSBiL1NvdXJjZS9XZWJLaXQvbWFj
L01pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW0KaW5kZXggZDU5M2Y4Y2FmMWVjM2FjY2E1YjRiMzBh
ODNjYmQ2YjJjMTk1NDE1Mi4uMDczZDU5MDNmYWFiMTU0ZDk2NjU4ZmU0YjYzYzU3MGNiYzVmYzdh
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tCkBAIC04
OSw4ICs4OSw4IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogICAgIE93blB0cjxUeXBlQ291
bnRTZXQ+IGNvdW50cyhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAucHJv
dGVjdGVkT2JqZWN0VHlwZUNvdW50cygpKTsKICAgICBIYXNoQ291bnRlZFNldDxjb25zdCBjaGFy
Kj46Oml0ZXJhdG9yIGVuZCA9IGNvdW50cy0+ZW5kKCk7CiAgICAgZm9yIChIYXNoQ291bnRlZFNl
dDxjb25zdCBjaGFyKj46Oml0ZXJhdG9yIGl0ID0gY291bnRzLT5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdC0+c2Vjb25kOyArK2kp
Ci0gICAgICAgICAgICBbcmVzdWx0IGFkZE9iamVjdDpbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhT
dHJpbmc6aXQtPmZpcnN0XV07CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdC0+
dmFsdWU7ICsraSkKKyAgICAgICAgICAgIFtyZXN1bHQgYWRkT2JqZWN0OltOU1N0cmluZyBzdHJp
bmdXaXRoVVRGOFN0cmluZzppdC0+a2V5XV07CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
QEAgLTEwNCw4ICsxMDQsOCBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKICAgICBPd25QdHI8
VHlwZUNvdW50U2V0PiBjb3VudHMoSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5o
ZWFwLm9iamVjdFR5cGVDb3VudHMoKSk7CiAgICAgSGFzaENvdW50ZWRTZXQ8Y29uc3QgY2hhcio+
OjppdGVyYXRvciBlbmQgPSBjb3VudHMtPmVuZCgpOwogICAgIGZvciAoSGFzaENvdW50ZWRTZXQ8
Y29uc3QgY2hhcio+OjppdGVyYXRvciBpdCA9IGNvdW50cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXQtPnNlY29uZDsgKytpKQot
ICAgICAgICAgICAgW3Jlc3VsdCBhZGRPYmplY3Q6W05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3Ry
aW5nOml0LT5maXJzdF1dOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXQtPnZh
bHVlOyArK2kpCisgICAgICAgICAgICBbcmVzdWx0IGFkZE9iamVjdDpbTlNTdHJpbmcgc3RyaW5n
V2l0aFVURjhTdHJpbmc6aXQtPmtleV1dOwogICAgIAogICAgIHJldHVybiByZXN1bHQ7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdp
bkhvc3RNYW5hZ2VyLm1tIGIvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2Nh
cGVQbHVnaW5Ib3N0TWFuYWdlci5tbQppbmRleCBjNTEwYTlhOTNkNWIxNzQzMTFlMmQ3MzMwZjIx
YjU5NGJhMDU3MmJlLi5hODIxMjlmMjg2OWFjZDJkNjc5ZjdmYmVhNjZiNjEwNTg5MDM1MDM1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdp
bkhvc3RNYW5hZ2VyLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05l
dHNjYXBlUGx1Z2luSG9zdE1hbmFnZXIubW0KQEAgLTczLDcgKzczLDcgQEAgTmV0c2NhcGVQbHVn
aW5Ib3N0UHJveHkqIE5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXI6Omhvc3RGb3JQbHVnaW4oY29u
c3QgV1RGOjpTdHIKICAgICAKICAgICAvLyBUaGUgcGFja2FnZSB3YXMgYWxyZWFkeSBpbiB0aGUg
bWFwLCBqdXN0IHJldHVybiBpdC4KICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAg
ICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQu
aXRlcmF0b3ItPnZhbHVlOwogICAgICAgICAKICAgICBtYWNoX3BvcnRfdCBjbGllbnRQb3J0Owog
ICAgIGlmIChtYWNoX3BvcnRfYWxsb2NhdGUobWFjaF90YXNrX3NlbGYoKSwgTUFDSF9QT1JUX1JJ
R0hUX1JFQ0VJVkUsICZjbGllbnRQb3J0KSAhPSBLRVJOX1NVQ0NFU1MpIHsKQEAgLTk1LDcgKzk1
LDcgQEAgTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkqIE5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXI6
Omhvc3RGb3JQbHVnaW4oY29uc3QgV1RGOjpTdHIKICAgICAKICAgICBOZXRzY2FwZVBsdWdpbkhv
c3RQcm94eSogaG9zdFByb3h5ID0gbmV3IE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5KGNsaWVudFBv
cnQsIHBsdWdpbkhvc3RQb3J0LCBwbHVnaW5Ib3N0UFNOLCBzaG91bGRDYWNoZU1pc3NpbmdQcm9w
ZXJ0aWVzQW5kTWV0aG9kcyk7CiAgICAgCi0gICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBo
b3N0UHJveHk7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGhvc3RQcm94eTsKICAgICAK
ICAgICByZXR1cm4gaG9zdFByb3h5OwogfQpAQCAtMjA0LDcgKzIwNCw3IEBAIHZvaWQgTmV0c2Nh
cGVQbHVnaW5Ib3N0TWFuYWdlcjo6cGx1Z2luSG9zdERpZWQoTmV0c2NhcGVQbHVnaW5Ib3N0UHJv
eHkqIHBsdWdpbkhvCiAKICAgICAvLyBUaGlzIGhhcyBPKG4pIGNvbXBsZXhpdHkgYnV0IHRoZSBu
dW1iZXIgb2YgYWN0aXZlIHBsdWctaW4gaG9zdHMgaXMgdmVyeSBzbWFsbCBzbyBpdCBzaG91bGRu
J3QgbWF0dGVyLgogICAgIGZvciAoUGx1Z2luSG9zdE1hcDo6aXRlcmF0b3IgaXQgPSBtX3BsdWdp
bkhvc3RzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnNlY29u
ZCA9PSBwbHVnaW5Ib3N0KSB7CisgICAgICAgIGlmIChpdC0+dmFsdWUgPT0gcGx1Z2luSG9zdCkg
ewogICAgICAgICAgICAgbV9wbHVnaW5Ib3N0cy5yZW1vdmUoaXQpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CkBAIC0zMDQsNyArMzA0LDcgQEAgdm9pZCBOZXRzY2FwZVBsdWdpbkhv
c3RNYW5hZ2VyOjpkaWRDcmVhdGVXaW5kb3coKQogICAgIC8vIFNlZSBpZiBhbnkgb2Ygb3VyIGhv
c3RzIGFyZSBpbiBmdWxsLXNjcmVlbiBtb2RlLgogICAgIFBsdWdpbkhvc3RNYXA6Oml0ZXJhdG9y
IGVuZCA9IG1fcGx1Z2luSG9zdHMuZW5kKCk7CiAgICAgZm9yIChQbHVnaW5Ib3N0TWFwOjppdGVy
YXRvciBpdCA9IG1fcGx1Z2luSG9zdHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAg
ICAgIE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5KiBob3N0UHJveHkgPSBpdC0+c2Vjb25kOworICAg
ICAgICBOZXRzY2FwZVBsdWdpbkhvc3RQcm94eSogaG9zdFByb3h5ID0gaXQtPnZhbHVlOwogICAg
ICAgICAKICAgICAgICAgaWYgKCFob3N0UHJveHktPmlzTWVudUJhclZpc2libGUoKSkgewogICAg
ICAgICAgICAgLy8gTWFrZSBvdXJzZWx2ZXMgdGhlIGZyb250IHByb2Nlc3MuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkhvc3RQcm94
eS5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9z
dFByb3h5Lm1tCmluZGV4IGFmNmYyYmU5OTY5Y2IxMWNiMzNhNTYzMTdmZGRhOGMyY2Y2MWNmNWUu
LjBmYjI2ZDBhOWI4NDc1MjI2YmVmY2MzNDk2OGI5ZjUwNmViOTE1YmMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdFByb3h5Lm1t
CisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9z
dFByb3h5Lm1tCkBAIC0xNDQsNyArMTQ0LDcgQEAgdm9pZCBOZXRzY2FwZVBsdWdpbkhvc3RQcm94
eTo6cGx1Z2luSG9zdERpZWQoKQogICAKICAgICBQbHVnaW5JbnN0YW5jZU1hcDo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gaW5zdGFuY2VzLmVuZCgpOwogICAgIGZvciAoUGx1Z2luSW5zdGFuY2VNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaW5zdGFuY2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkK
LSAgICAgICAgaXQtPnNlY29uZC0+cGx1Z2luSG9zdERpZWQoKTsKKyAgICAgICAgaXQtPnZhbHVl
LT5wbHVnaW5Ib3N0RGllZCgpOwogICAgIAogICAgIE5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXI6
OnNoYXJlZCgpLnBsdWdpbkhvc3REaWVkKHRoaXMpOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1t
IGIvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5j
ZVByb3h5Lm1tCmluZGV4IGViODZhMmVmMTk1YjFmODBiYWQ4NDRhMmFkNTdjNzY1OWVlNGU1ZjAu
LmUxZGNlNDI3OGQzZjY2Yjg3ODNhNDIzN2YxNjU1YjRlMjgxNjYxYmQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94
eS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdp
bkluc3RhbmNlUHJveHkubW0KQEAgLTE0NSw3ICsxNDUsNyBAQCB1aW50MzJfdCBOZXRzY2FwZVBs
dWdpbkluc3RhbmNlUHJveHk6OkxvY2FsT2JqZWN0TWFwOjppZEZvck9iamVjdChKU0dsb2JhbERh
dGEmCiAgICAgCiAgICAgSGFzaE1hcDxKU0M6OkpTT2JqZWN0KiwgcGFpcjx1aW50MzJfdCwgdWlu
dDMyX3Q+ID46Oml0ZXJhdG9yIGl0ZXIgPSBtX2pzT2JqZWN0VG9JRE1hcC5maW5kKG9iamVjdCk7
CiAgICAgaWYgKGl0ZXIgIT0gbV9qc09iamVjdFRvSURNYXAuZW5kKCkpCi0gICAgICAgIHJldHVy
biBpdGVyLT5zZWNvbmQuZmlyc3Q7CisgICAgICAgIHJldHVybiBpdGVyLT52YWx1ZS5maXJzdDsK
ICAgICAKICAgICBkbyB7CiAgICAgICAgIG9iamVjdElEID0gKyttX29iamVjdElEQ291bnRlcjsK
QEAgLTE2Miw3ICsxNjIsNyBAQCB2b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6TG9j
YWxPYmplY3RNYXA6OnJldGFpbihKU0M6OkpTT2JqZWN0KiBvYmplY3QpCiAgICAgSGFzaE1hcDxK
U0M6OkpTT2JqZWN0KiwgcGFpcjx1aW50MzJfdCwgdWludDMyX3Q+ID46Oml0ZXJhdG9yIGl0ZXIg
PSBtX2pzT2JqZWN0VG9JRE1hcC5maW5kKG9iamVjdCk7CiAgICAgQVNTRVJUKGl0ZXIgIT0gbV9q
c09iamVjdFRvSURNYXAuZW5kKCkpOwogCi0gICAgaXRlci0+c2Vjb25kLnNlY29uZCA9IGl0ZXIt
PnNlY29uZC5zZWNvbmQgKyAxOworICAgIGl0ZXItPnZhbHVlLnNlY29uZCA9IGl0ZXItPnZhbHVl
LnNlY29uZCArIDE7CiB9CiAKIHZvaWQgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpMb2Nh
bE9iamVjdE1hcDo6cmVsZWFzZShKU0M6OkpTT2JqZWN0KiBvYmplY3QpCkBAIC0xNzAsMTAgKzE3
MCwxMCBAQCB2b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6TG9jYWxPYmplY3RNYXA6
OnJlbGVhc2UoSlNDOjpKU09iamVjdCogb2JqZWN0KQogICAgIEhhc2hNYXA8SlNDOjpKU09iamVj
dCosIHBhaXI8dWludDMyX3QsIHVpbnQzMl90PiA+OjppdGVyYXRvciBpdGVyID0gbV9qc09iamVj
dFRvSURNYXAuZmluZChvYmplY3QpOwogICAgIEFTU0VSVChpdGVyICE9IG1fanNPYmplY3RUb0lE
TWFwLmVuZCgpKTsKIAotICAgIEFTU0VSVChpdGVyLT5zZWNvbmQuc2Vjb25kID4gMCk7Ci0gICAg
aXRlci0+c2Vjb25kLnNlY29uZCA9IGl0ZXItPnNlY29uZC5zZWNvbmQgLSAxOwotICAgIGlmICgh
aXRlci0+c2Vjb25kLnNlY29uZCkgewotICAgICAgICBtX2lkVG9KU09iamVjdE1hcC5yZW1vdmUo
aXRlci0+c2Vjb25kLmZpcnN0KTsKKyAgICBBU1NFUlQoaXRlci0+dmFsdWUuc2Vjb25kID4gMCk7
CisgICAgaXRlci0+dmFsdWUuc2Vjb25kID0gaXRlci0+dmFsdWUuc2Vjb25kIC0gMTsKKyAgICBp
ZiAoIWl0ZXItPnZhbHVlLnNlY29uZCkgeworICAgICAgICBtX2lkVG9KU09iamVjdE1hcC5yZW1v
dmUoaXRlci0+dmFsdWUuZmlyc3QpOwogICAgICAgICBtX2pzT2JqZWN0VG9JRE1hcC5yZW1vdmUo
aXRlcik7CiAgICAgfQogfQpAQCAtMTk3LDEwICsxOTcsMTAgQEAgYm9vbCBOZXRzY2FwZVBsdWdp
bkluc3RhbmNlUHJveHk6OkxvY2FsT2JqZWN0TWFwOjpmb3JnZXQodWludDMyX3Qgb2JqZWN0SUQp
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIEhhc2hNYXA8SlNDOjpKU09iamVj
dCosIHBhaXI8dWludDMyX3QsIHVpbnQzMl90PiA+OjppdGVyYXRvciBySXRlciA9IG1fanNPYmpl
Y3RUb0lETWFwLmZpbmQoaXRlci0+c2Vjb25kLmdldCgpKTsKKyAgICBIYXNoTWFwPEpTQzo6SlNP
YmplY3QqLCBwYWlyPHVpbnQzMl90LCB1aW50MzJfdD4gPjo6aXRlcmF0b3Igckl0ZXIgPSBtX2pz
T2JqZWN0VG9JRE1hcC5maW5kKGl0ZXItPnZhbHVlLmdldCgpKTsKIAogICAgIC8vIElmIHRoZSBv
YmplY3QgaXMgYmVpbmcgc2VudCB0byBwbHVnLWluIHJpZ2h0IG5vdywgdGhlbiBpdCdzIG5vdCB0
aGUgdGltZSB0byBmb3JnZXQuCi0gICAgaWYgKHJJdGVyLT5zZWNvbmQuc2Vjb25kICE9IDEpCisg
ICAgaWYgKHJJdGVyLT52YWx1ZS5zZWNvbmQgIT0gMSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgbV9qc09iamVjdFRvSURNYXAucmVtb3ZlKHJJdGVyKTsKQEAgLTMzMCw3ICszMzAsNyBA
QCB2b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6ZGVzdHJveSgpCiAgICAgCiAgICAg
RnJhbWVMb2FkTWFwOjppdGVyYXRvciBlbmQgPSBtX3BlbmRpbmdGcmFtZUxvYWRzLmVuZCgpOwog
ICAgIGZvciAoRnJhbWVMb2FkTWFwOjppdGVyYXRvciBpdCA9IG1fcGVuZGluZ0ZyYW1lTG9hZHMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBbKGl0LT5maXJzdCkgX3NldEludGVy
bmFsTG9hZERlbGVnYXRlOm5pbF07CisgICAgICAgIFsoaXQtPmtleSkgX3NldEludGVybmFsTG9h
ZERlbGVnYXRlOm5pbF07CiAKICAgICBfV0tQSERlc3Ryb3lQbHVnaW5JbnN0YW5jZShtX3BsdWdp
bkhvc3RQcm94eS0+cG9ydCgpLCBtX3BsdWdpbklELCByZXF1ZXN0SUQpOwogIApAQCAtNjc4LDcg
KzY3OCw3IEBAIHZvaWQgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Ojp3ZWJGcmFtZURpZEZp
bmlzaExvYWRXaXRoUmVhc29uKFdlYkZyYW1lKiB3ZWJGCiAgICAgRnJhbWVMb2FkTWFwOjppdGVy
YXRvciBpdCA9IG1fcGVuZGluZ0ZyYW1lTG9hZHMuZmluZCh3ZWJGcmFtZSk7CiAgICAgQVNTRVJU
KGl0ICE9IG1fcGVuZGluZ0ZyYW1lTG9hZHMuZW5kKCkpOwogICAgICAgICAKLSAgICBQbHVnaW5S
ZXF1ZXN0KiBwbHVnaW5SZXF1ZXN0ID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICBQbHVnaW5SZXF1
ZXN0KiBwbHVnaW5SZXF1ZXN0ID0gaXQtPnZhbHVlLmdldCgpOwogICAgIF9XS1BITG9hZFVSTE5v
dGlmeShtX3BsdWdpbkhvc3RQcm94eS0+cG9ydCgpLCBtX3BsdWdpbklELCBwbHVnaW5SZXF1ZXN0
LT5yZXF1ZXN0SUQoKSwgcmVhc29uKTsKICAKICAgICBtX3BlbmRpbmdGcmFtZUxvYWRzLnJlbW92
ZShpdCk7CkBAIC0xNjM4LDcgKzE2MzgsNyBAQCB2b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQ
cm94eTo6Y2FuY2VsQ2hlY2tJZkFsbG93ZWRUb0xvYWRVUkwodWludDMyX3QgY2hlY2tJRAogICAg
IGlmIChpdCA9PSBtX3VybENoZWNrcy5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAg
IFdlYlBsdWdpbkNvbnRhaW5lckNoZWNrICpjaGVjayA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAg
V2ViUGx1Z2luQ29udGFpbmVyQ2hlY2sgKmNoZWNrID0gaXQtPnZhbHVlLmdldCgpOwogICAgIFtj
aGVjayBjYW5jZWxdOwogICAgIG1fdXJsQ2hlY2tzLnJlbW92ZShpdCk7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9Qcm94eUluc3RhbmNlLm1tIGIvU291
cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvUHJveHlJbnN0YW5jZS5tbQppbmRleCAwOTQ0
M2RjMTYyOGE2NjhmMmZiMjE0ZjNiNTMxN2M2YjU0NDQ0MWNhLi42MmI2MDhlNjVkZTNlMDNjMzUy
OGIzMzc5OGJiNDQ2NzZkZjJlNWZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9QbHVn
aW5zL0hvc3RlZC9Qcm94eUluc3RhbmNlLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdp
bnMvSG9zdGVkL1Byb3h5SW5zdGFuY2UubW0KQEAgLTM1NSw4ICszNTUsOCBAQCBNZXRob2RMaXN0
IFByb3h5SW5zdGFuY2U6Om1ldGhvZHNOYW1lZChjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVy
KQogICAgIE1ldGhvZE1hcDo6aXRlcmF0b3IgZXhpc3RpbmdNYXBFbnRyeSA9IG1fbWV0aG9kcy5m
aW5kKGlkZW50aWZpZXIuaW1wbCgpKTsKICAgICBpZiAoZXhpc3RpbmdNYXBFbnRyeSAhPSBtX21l
dGhvZHMuZW5kKCkpIHsKICAgICAgICAgTWV0aG9kTGlzdCBtZXRob2RMaXN0OwotICAgICAgICBp
ZiAoZXhpc3RpbmdNYXBFbnRyeS0+c2Vjb25kKQotICAgICAgICAgICAgbWV0aG9kTGlzdC5hcHBl
bmQoZXhpc3RpbmdNYXBFbnRyeS0+c2Vjb25kKTsKKyAgICAgICAgaWYgKGV4aXN0aW5nTWFwRW50
cnktPnZhbHVlKQorICAgICAgICAgICAgbWV0aG9kTGlzdC5hcHBlbmQoZXhpc3RpbmdNYXBFbnRy
eS0+dmFsdWUpOwogICAgICAgICByZXR1cm4gbWV0aG9kTGlzdDsKICAgICB9CiAgICAgCkBAIC0z
NzgsMTEgKzM3OCwxMSBAQCBNZXRob2RMaXN0IFByb3h5SW5zdGFuY2U6Om1ldGhvZHNOYW1lZChj
b25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKQogICAgIC8vIEFkZCBhIG5ldyBlbnRyeSB0byB0
aGUgbWFwIHVubGVzcyBhbiBlbnRyeSB3YXMgYWRkZWQgd2hpbGUgd2Ugd2VyZSBpbiB3YWl0Rm9y
UmVwbHkuCiAgICAgTWV0aG9kTWFwOjpBZGRSZXN1bHQgbWFwQWRkUmVzdWx0ID0gbV9tZXRob2Rz
LmFkZChpZGVudGlmaWVyLmltcGwoKSwgMCk7CiAgICAgaWYgKG1hcEFkZFJlc3VsdC5pc05ld0Vu
dHJ5ICYmIHJlcGx5LT5tX3Jlc3VsdCkKLSAgICAgICAgbWFwQWRkUmVzdWx0Lml0ZXJhdG9yLT5z
ZWNvbmQgPSBuZXcgUHJveHlNZXRob2QobWV0aG9kTmFtZSk7CisgICAgICAgIG1hcEFkZFJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUgPSBuZXcgUHJveHlNZXRob2QobWV0aG9kTmFtZSk7CiAKICAgICBN
ZXRob2RMaXN0IG1ldGhvZExpc3Q7Ci0gICAgaWYgKG1hcEFkZFJlc3VsdC5pdGVyYXRvci0+c2Vj
b25kKQotICAgICAgICBtZXRob2RMaXN0LmFwcGVuZChtYXBBZGRSZXN1bHQuaXRlcmF0b3ItPnNl
Y29uZCk7CisgICAgaWYgKG1hcEFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUpCisgICAgICAgIG1l
dGhvZExpc3QuYXBwZW5kKG1hcEFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwogICAgIHJldHVy
biBtZXRob2RMaXN0OwogfQogCkBAIC0zOTQsNyArMzk0LDcgQEAgRmllbGQqIFByb3h5SW5zdGFu
Y2U6OmZpZWxkTmFtZWQoY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllcikKICAgICAvLyBJZiB3
ZSBhbHJlYWR5IGhhdmUgYW4gZW50cnkgaW4gdGhlIG1hcCwgdXNlIGl0LgogICAgIEZpZWxkTWFw
OjppdGVyYXRvciBleGlzdGluZ01hcEVudHJ5ID0gbV9maWVsZHMuZmluZChpZGVudGlmaWVyLmlt
cGwoKSk7CiAgICAgaWYgKGV4aXN0aW5nTWFwRW50cnkgIT0gbV9maWVsZHMuZW5kKCkpCi0gICAg
ICAgIHJldHVybiBleGlzdGluZ01hcEVudHJ5LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBleGlz
dGluZ01hcEVudHJ5LT52YWx1ZTsKICAgICAKICAgICB1aW50NjRfdCBwcm9wZXJ0eU5hbWUgPSBy
ZWludGVycHJldF9jYXN0PHVpbnQ2NF90PihfTlBOX0dldFN0cmluZ0lkZW50aWZpZXIoaWRlbnRp
Zmllci5hc2NpaSgpLmRhdGEoKSkpOwogICAgIHVpbnQzMl90IHJlcXVlc3RJRCA9IG1faW5zdGFu
Y2VQcm94eS0+bmV4dFJlcXVlc3RJRCgpOwpAQCAtNDE0LDggKzQxNCw4IEBAIEZpZWxkKiBQcm94
eUluc3RhbmNlOjpmaWVsZE5hbWVkKGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIpCiAgICAg
Ly8gQWRkIGEgbmV3IGVudHJ5IHRvIHRoZSBtYXAgdW5sZXNzIGFuIGVudHJ5IHdhcyBhZGRlZCB3
aGlsZSB3ZSB3ZXJlIGluIHdhaXRGb3JSZXBseS4KICAgICBGaWVsZE1hcDo6QWRkUmVzdWx0IG1h
cEFkZFJlc3VsdCA9IG1fZmllbGRzLmFkZChpZGVudGlmaWVyLmltcGwoKSwgMCk7CiAgICAgaWYg
KG1hcEFkZFJlc3VsdC5pc05ld0VudHJ5ICYmIHJlcGx5LT5tX3Jlc3VsdCkKLSAgICAgICAgbWFw
QWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBuZXcgUHJveHlGaWVsZChwcm9wZXJ0eU5hbWUp
OwotICAgIHJldHVybiBtYXBBZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgbWFw
QWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IG5ldyBQcm94eUZpZWxkKHByb3BlcnR5TmFtZSk7
CisgICAgcmV0dXJuIG1hcEFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiB9CiAKIEpTQzo6SlNW
YWx1ZSBQcm94eUluc3RhbmNlOjpmaWVsZFZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgRmll
bGQqIGZpZWxkKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9X
ZWJOZXRzY2FwZVBsdWdpblZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5l
dHNjYXBlUGx1Z2luVmlldy5tbQppbmRleCA1ZjFmNTU2OTQxYTk0YzEwZjRkNWI3MWIyODMzODM5
ZWEyNWJlMDQzLi4xZTliMDExMWQ3MGMwNWNiNzJlNWM4ZGU2OTdlYmE0ZjA4Zjk3ODhhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5t
bQpAQCAtNzEwLDcgKzcxMCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBnZXROUFJlY3QoY29uc3Qg
TlNSZWN0JiBuciwgTlBSZWN0JiBucHIpCiAKICAgICBIYXNoTWFwPHVpbnQzMl90LCBQbHVnaW5U
aW1lcio+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSB0aW1lcnMtPmVuZCgpOwogICAgIGZvciAoSGFz
aE1hcDx1aW50MzJfdCwgUGx1Z2luVGltZXIqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSB0aW1lcnMt
PmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBQbHVnaW5UaW1lciogdGltZXIg
PSBpdC0+c2Vjb25kOworICAgICAgICBQbHVnaW5UaW1lciogdGltZXIgPSBpdC0+dmFsdWU7CiAg
ICAgICAgIHRpbWVyLT5zdG9wKCk7CiAgICAgfSAgICAKIH0KQEAgLTcyOCw3ICs3MjgsNyBAQCBz
dGF0aWMgaW5saW5lIHZvaWQgZ2V0TlBSZWN0KGNvbnN0IE5TUmVjdCYgbnIsIE5QUmVjdCYgbnBy
KQogICAgIAogICAgIEhhc2hNYXA8dWludDMyX3QsIFBsdWdpblRpbWVyKj46OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IHRpbWVycy0+ZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPHVpbnQzMl90LCBQbHVn
aW5UaW1lcio+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHRpbWVycy0+YmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7Ci0gICAgICAgIFBsdWdpblRpbWVyKiB0aW1lciA9IGl0LT5zZWNvbmQ7CisgICAg
ICAgIFBsdWdpblRpbWVyKiB0aW1lciA9IGl0LT52YWx1ZTsKICAgICAgICAgQVNTRVJUKCF0aW1l
ci0+aXNBY3RpdmUoKSk7CiAgICAgICAgIHRpbWVyLT5zdGFydChfaXNDb21wbGV0ZWx5T2JzY3Vy
ZWQpOwogICAgIH0gICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3Vw
cG9ydC9XZWJOb3RpZmljYXRpb25DbGllbnQubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3Jl
U3VwcG9ydC9XZWJOb3RpZmljYXRpb25DbGllbnQubW0KaW5kZXggODEyMDkzNjAxNjM3NDliNzY2
ZmM3YjhkM2Q3MDYwMjdjYjI3ZDZkYS4uOGJjNzcwZWQwYjVkZTNhYTNkNDZiYjNhOTk5ZmRhYTk3
ODkxYzVlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2Vi
Tm90aWZpY2F0aW9uQ2xpZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBw
b3J0L1dlYk5vdGlmaWNhdGlvbkNsaWVudC5tbQpAQCAtNzIsNyArNzIsNyBAQCBib29sIFdlYk5v
dGlmaWNhdGlvbkNsaWVudDo6c2hvdyhOb3RpZmljYXRpb24qIG5vdGlmaWNhdGlvbikKICAgICBt
X25vdGlmaWNhdGlvbk1hcC5zZXQobm90aWZpY2F0aW9uLCB3ZWJOb3RpZmljYXRpb24pOwogCiAg
ICAgTm90aWZpY2F0aW9uQ29udGV4dE1hcDo6aXRlcmF0b3IgaXQgPSBtX25vdGlmaWNhdGlvbkNv
bnRleHRNYXAuYWRkKG5vdGlmaWNhdGlvbi0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBWZWN0
b3I8UmV0YWluUHRyPFdlYk5vdGlmaWNhdGlvbj4gPigpKS5pdGVyYXRvcjsKLSAgICBpdC0+c2Vj
b25kLmFwcGVuZCh3ZWJOb3RpZmljYXRpb24pOworICAgIGl0LT52YWx1ZS5hcHBlbmQod2ViTm90
aWZpY2F0aW9uKTsKIAogICAgIFtbbV93ZWJWaWV3IF9ub3RpZmljYXRpb25Qcm92aWRlcl0gc2hv
d05vdGlmaWNhdGlvbjp3ZWJOb3RpZmljYXRpb24uZ2V0KCkgZnJvbVdlYlZpZXc6bV93ZWJWaWV3
XTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEwMiw3ICsxMDIsNyBAQCB2b2lkIFdlYk5vdGlmaWNh
dGlvbkNsaWVudDo6Y2xlYXJOb3RpZmljYXRpb25zKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQpCiAgICAgaWYgKGl0ID09IG1fbm90aWZpY2F0aW9uQ29udGV4dE1hcC5lbmQoKSkKICAg
ICAgICAgcmV0dXJuOwogICAgIAotICAgIFZlY3RvcjxSZXRhaW5QdHI8V2ViTm90aWZpY2F0aW9u
PiA+JiB3ZWJOb3RpZmljYXRpb25zID0gaXQtPnNlY29uZDsKKyAgICBWZWN0b3I8UmV0YWluUHRy
PFdlYk5vdGlmaWNhdGlvbj4gPiYgd2ViTm90aWZpY2F0aW9ucyA9IGl0LT52YWx1ZTsKICAgICBO
U011dGFibGVBcnJheSAqbnNJRHMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOwogICAgIHNpemVf
dCBjb3VudCA9IHdlYk5vdGlmaWNhdGlvbnMuc2l6ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgY291bnQ7ICsraSkgewpAQCAtMTI3LDEwICsxMjcsMTAgQEAgdm9pZCBXZWJOb3RpZmlj
YXRpb25DbGllbnQ6Om5vdGlmaWNhdGlvbk9iamVjdERlc3Ryb3llZChOb3RpZmljYXRpb24qIG5v
dGlmaWNhdGkKIAogICAgIE5vdGlmaWNhdGlvbkNvbnRleHRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9u
b3RpZmljYXRpb25Db250ZXh0TWFwLmZpbmQobm90aWZpY2F0aW9uLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkpOwogICAgIEFTU0VSVChpdCAhPSBtX25vdGlmaWNhdGlvbkNvbnRleHRNYXAuZW5k
KCkpOwotICAgIHNpemVfdCBpbmRleCA9IGl0LT5zZWNvbmQuZmluZCh3ZWJOb3RpZmljYXRpb24p
OworICAgIHNpemVfdCBpbmRleCA9IGl0LT52YWx1ZS5maW5kKHdlYk5vdGlmaWNhdGlvbik7CiAg
ICAgQVNTRVJUKGluZGV4ICE9IG5vdEZvdW5kKTsKLSAgICBpdC0+c2Vjb25kLnJlbW92ZShpbmRl
eCk7Ci0gICAgaWYgKGl0LT5zZWNvbmQuaXNFbXB0eSgpKQorICAgIGl0LT52YWx1ZS5yZW1vdmUo
aW5kZXgpOworICAgIGlmIChpdC0+dmFsdWUuaXNFbXB0eSgpKQogICAgICAgICBtX25vdGlmaWNh
dGlvbkNvbnRleHRNYXAucmVtb3ZlKGl0KTsKIAogICAgIFtbbV93ZWJWaWV3IF9ub3RpZmljYXRp
b25Qcm92aWRlcl0gbm90aWZpY2F0aW9uRGVzdHJveWVkOndlYk5vdGlmaWNhdGlvbi5nZXQoKV07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tIGIv
U291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQppbmRleCBhOWIyOTFlNDk5
ZjgwMjk3Y2M3NTY3OWYzOTBlZjZiZGUwNjFjNGE0Li4yMTY5NWU0NTI1YmQ2YmYxNTJiNDYyODUy
MDAwZDVkYTBhOTE0M2FhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dl
YkhUTUxWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcu
bW0KQEAgLTIzNzAsNyArMjM3MCw3IEBAIHN0YXRpYyBTdHJpbmcgY29tbWFuZE5hbWVGb3JTZWxl
Y3RvcihTRUwgc2VsZWN0b3IpCiAgICAgc3RhdGljIGNvbnN0IFNlbGVjdG9yTmFtZU1hcCogZXhj
ZXB0aW9uTWFwID0gY3JlYXRlU2VsZWN0b3JFeGNlcHRpb25NYXAoKTsKICAgICBTZWxlY3Rvck5h
bWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZXhjZXB0aW9uTWFwLT5maW5kKHNlbGVjdG9yKTsK
ICAgICBpZiAoaXQgIT0gZXhjZXB0aW9uTWFwLT5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5z
ZWNvbmQ7CisgICAgICAgIHJldHVybiBpdC0+dmFsdWU7CiAKICAgICAvLyBSZW1vdmUgdGhlIHRy
YWlsaW5nIGNvbG9uLgogICAgIC8vIE5vIG5lZWQgdG8gY2FwaXRhbGl6ZSB0aGUgY29tbWFuZCBu
YW1lIHNpbmNlIEVkaXRvciBjb21tYW5kIG5hbWVzIGFyZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2Uu
Y3BwCmluZGV4IGM3YmIxNDYwOTBlZTZjOTRjZDVjYjI2YzA5Y2M0NDRmN2I0NmM5NTMuLjdhODlh
OTMxODY0Yjg0MmUxMDQ4YjhjMDAxMGEyYmVkMDUwMjkyY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Vi
cGFnZS5jcHAKQEAgLTIyMzAsNyArMjIzMCw3IEBAIHN0YXRpYyB2b2lkIGV4dHJhY3RDb250ZW50
VHlwZUZyb21QbHVnaW5WZWN0b3IoY29uc3QgVmVjdG9yPFBsdWdpblBhY2thZ2UqPiYgcGx1CiAg
ICAgICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWFwX2l0ID0gcGx1
Z2luc1tpXS0+bWltZVRvRGVzY3JpcHRpb25zKCkuYmVnaW4oKTsKICAgICAgICAgTUlNRVRvRGVz
Y3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBtYXBfZW5kID0gcGx1Z2luc1tpXS0+bWltZVRv
RGVzY3JpcHRpb25zKCkuZW5kKCk7CiAgICAgICAgIGZvciAoOyBtYXBfaXQgIT0gbWFwX2VuZDsg
KyttYXBfaXQpCi0gICAgICAgICAgICAqbGlzdCA8PCBtYXBfaXQtPmZpcnN0OworICAgICAgICAg
ICAgKmxpc3QgPDwgbWFwX2l0LT5rZXk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L3F0L0FwaS9xd2VicGx1Z2luZGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYktpdC9xdC9B
cGkvcXdlYnBsdWdpbmRhdGFiYXNlLmNwcAppbmRleCBhN2EzYjVmMmMxZTg5ZjQ3NDM3YzA4YTk3
ZmNiMjk2Nzg2YmY4ZTU4Li5jNTMyOGM4ZjY3NWYyYzY2ZjdiOWI0MjBkNjUxMzdmZDlmODZiODk2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGx1Z2luZGF0YWJhc2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwbHVnaW5kYXRhYmFzZS5jcHAKQEAgLTEy
Miw4ICsxMjIsOCBAQCBRTGlzdDxRV2ViUGx1Z2luSW5mbzo6TWltZVR5cGU+IFFXZWJQbHVnaW5J
bmZvOjptaW1lVHlwZXMoKSBjb25zdAogCiAgICAgICAgIGZvciAoTUlNRVRvRGVzY3JpcHRpb25z
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIE1pbWVUeXBlIG1pbWVUeXBlOwotICAgICAgICAg
ICAgbWltZVR5cGUubmFtZSA9IGl0LT5maXJzdDsKLSAgICAgICAgICAgIG1pbWVUeXBlLmRlc2Ny
aXB0aW9uID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIG1pbWVUeXBlLm5hbWUgPSBpdC0+a2V5
OworICAgICAgICAgICAgbWltZVR5cGUuZGVzY3JpcHRpb24gPSBpdC0+dmFsdWU7CiAKICAgICAg
ICAgICAgIFFTdHJpbmdMaXN0IGZpbGVFeHRlbnNpb25zOwogICAgICAgICAgICAgVmVjdG9yPFN0
cmluZz4gZXh0ZW5zaW9ucyA9IG1fcGFja2FnZS0+bWltZVRvRXh0ZW5zaW9ucygpLmdldChtaW1l
VHlwZS5uYW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
UGxhdGZvcm1TdHJhdGVnaWVzUXQuY3BwIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9QbGF0Zm9ybVN0cmF0ZWdpZXNRdC5jcHAKaW5kZXggY2Q0YWIwZDcyZDg2ODEyNWRjODZlZTk4
N2JjY2U2ZWYzYWIxYWQ4OS4uN2Q0YjBiNzVmOWQyYzRlNzY3OWRiM2QwN2I1NjE3YTQyMTQwNGM1
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0
cmF0ZWdpZXNRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QbGF0
Zm9ybVN0cmF0ZWdpZXNRdC5jcHAKQEAgLTEzMyw4ICsxMzMsOCBAQCB2b2lkIFBsYXRmb3JtU3Ry
YXRlZ2llc1F0OjpnZXRQbHVnaW5JbmZvKGNvbnN0IFdlYkNvcmU6OlBhZ2UqIHBhZ2UsIFZlY3Rv
cjxXZWJDbwogICAgICAgICBmb3IgKE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAg
ICAgICAgICAgICBNaW1lQ2xhc3NJbmZvIG1pbWU7CiAKLSAgICAgICAgICAgIG1pbWUudHlwZSA9
IGl0LT5maXJzdDsKLSAgICAgICAgICAgIG1pbWUuZGVzYyA9IGl0LT5zZWNvbmQ7CisgICAgICAg
ICAgICBtaW1lLnR5cGUgPSBpdC0+a2V5OworICAgICAgICAgICAgbWltZS5kZXNjID0gaXQtPnZh
bHVlOwogICAgICAgICAgICAgbWltZS5leHRlbnNpb25zID0gcGFja2FnZS0+bWltZVRvRXh0ZW5z
aW9ucygpLmdldChtaW1lLnR5cGUpOwogCiAgICAgICAgICAgICBpbmZvLm1pbWVzLmFwcGVuZCht
aW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL0NPTVByb3BlcnR5QmFnLmggYi9T
b3VyY2UvV2ViS2l0L3dpbi9DT01Qcm9wZXJ0eUJhZy5oCmluZGV4IGRkMGE4YzQyZjRkMWNlYzJj
OTQyODk4NTIzNTZhMGYyYmRkYTFiNWMuLmYwY2QwYzM3MTNlMGFhMDQzY2U2ZmY5ZTFkZjU4ZGJl
Y2RkMzU2ZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL0NPTVByb3BlcnR5QmFnLmgK
KysrIGIvU291cmNlL1dlYktpdC93aW4vQ09NUHJvcGVydHlCYWcuaApAQCAtMTQ1LDkgKzE0NSw5
IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgQ09NUHJvcGVydHlCYWc8VmFsdWVUeXBlLCBL
ZXlUeXBlLCBIYXNoVHlwZT46OlJlYWQoTFBDCiAKICAgICBWQVJUWVBFIHJlcXVlc3RlZFR5cGUg
PSBWX1ZUKHBWYXIpOwogICAgIFZfVlQocFZhcikgPSBWVF9FTVBUWTsKLSAgICBDT01WYXJpYW50
U2V0dGVyPFZhbHVlVHlwZT46OnNldFZhcmlhbnQocFZhciwgaXQtPnNlY29uZCk7CisgICAgQ09N
VmFyaWFudFNldHRlcjxWYWx1ZVR5cGU+OjpzZXRWYXJpYW50KHBWYXIsIGl0LT52YWx1ZSk7CiAK
LSAgICBpZiAocmVxdWVzdGVkVHlwZSAhPSBDT01WYXJpYW50U2V0dGVyPFZhbHVlVHlwZT46OnZh
cmlhbnRUeXBlKGl0LT5zZWNvbmQpICYmIHJlcXVlc3RlZFR5cGUgIT0gVlRfRU1QVFkpCisgICAg
aWYgKHJlcXVlc3RlZFR5cGUgIT0gQ09NVmFyaWFudFNldHRlcjxWYWx1ZVR5cGU+Ojp2YXJpYW50
VHlwZShpdC0+dmFsdWUpICYmIHJlcXVlc3RlZFR5cGUgIT0gVlRfRU1QVFkpCiAgICAgICAgIHJl
dHVybiA6OlZhcmlhbnRDaGFuZ2VUeXBlKHBWYXIsIHBWYXIsIFZBUklBTlRfTk9VU0VST1ZFUlJJ
REUgfCBWQVJJQU5UX0FMUEhBQk9PTCwgcmVxdWVzdGVkVHlwZSk7CiAKICAgICByZXR1cm4gU19P
SzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRm
b3JtU3RyYXRlZ2llcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJQ
bGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCmluZGV4IDIzMGYzMzIzZjU0MjkxZDAxZTE0MTk4MTc4ZmEy
MTZhNDhjMGNmNWIuLmYxMzBmNzZiZDJhNjc2OTdhZGU3YTM2Nzg4NDUyNDNhOWY2YTcxYTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3Ry
YXRlZ2llcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViUGxh
dGZvcm1TdHJhdGVnaWVzLmNwcApAQCAtOTMsOCArOTMsOCBAQCB2b2lkIFdlYlBsYXRmb3JtU3Ry
YXRlZ2llczo6Z2V0UGx1Z2luSW5mbyhjb25zdCBXZWJDb3JlOjpQYWdlKiwgVmVjdG9yPFdlYkNv
cmU6OgogICAgICAgICBmb3IgKE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAg
ICAgICAgICBNaW1lQ2xhc3NJbmZvIG1pbWU7CiAKLSAgICAgICAgICAgIG1pbWUudHlwZSA9IGl0
LT5maXJzdDsKLSAgICAgICAgICAgIG1pbWUuZGVzYyA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAg
ICBtaW1lLnR5cGUgPSBpdC0+a2V5OworICAgICAgICAgICAgbWltZS5kZXNjID0gaXQtPnZhbHVl
OwogICAgICAgICAgICAgbWltZS5leHRlbnNpb25zID0gcGFja2FnZS0+bWltZVRvRXh0ZW5zaW9u
cygpLmdldChtaW1lLnR5cGUpOwogCiAgICAgICAgICAgICBpbmZvLm1pbWVzLmFwcGVuZChtaW1l
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYktpdENPTUFQSS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L3dpbi9XZWJLaXRDT01BUEkuY3BwCmluZGV4IDljOWNjMDI2YjQ3YjRmZWE5NjBj
NjM5ODQ2ZTBlYmE1MWM0NjUzYzIuLjRkOGZmMDk1YmRhOTYwN2QyOWExNDViODU3Yzc4ZGRmZjhl
MzVlN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYktpdENPTUFQSS5jcHAKKysr
IGIvU291cmNlL1dlYktpdC93aW4vV2ViS2l0Q09NQVBJLmNwcApAQCAtNTIsNyArNTIsNyBAQCBz
dGF0aWMgQ09NUHRyPElDbGFzc0ZhY3Rvcnk+IGNsYXNzRmFjdG9yeShjb25zdCBDTFNJRCYgY2xz
aWQpCiAgICAgc3RhdGljIEZhY3RvcnlNYXAmIGZhY3RvcmllcyA9ICpuZXcgRmFjdG9yeU1hcDsK
IAogICAgIEZhY3RvcnlNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBmYWN0b3JpZXMuYWRkKGNsc2lk
LCAwKTsKLSAgICBDT01QdHI8SUNsYXNzRmFjdG9yeT4mIGZhY3RvcnkgPSByZXN1bHQuaXRlcmF0
b3ItPnNlY29uZDsKKyAgICBDT01QdHI8SUNsYXNzRmFjdG9yeT4mIGZhY3RvcnkgPSByZXN1bHQu
aXRlcmF0b3ItPnZhbHVlOwogICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSAmJiBGQUlMRUQoRGxs
R2V0Q2xhc3NPYmplY3QoY2xzaWQsIF9fdXVpZG9mKGZhY3RvcnkpLCByZWludGVycHJldF9jYXN0
PHZvaWQqKj4oJmZhY3RvcnkpKSkpCiAgICAgICAgIGZhY3RvcnkgPSAwOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJOb3RpZmljYXRpb25DZW50ZXIuY3BwIGIvU291cmNlL1dl
YktpdC93aW4vV2ViTm90aWZpY2F0aW9uQ2VudGVyLmNwcAppbmRleCBjNzE5MmQ4ZDNjZGIyY2Rh
ZTJiYWE3MWFlNjBmN2JhOWQ4MWVkN2VhLi4zMWM4MTE5YTUwMmI5Y2VlNjVlNDIwYmY1MTdlZTc5
YWExMjg0MWIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJOb3RpZmljYXRpb25D
ZW50ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL1dlYk5vdGlmaWNhdGlvbkNlbnRlci5j
cHAKQEAgLTEyMCw3ICsxMjAsNyBAQCB2b2lkIFdlYk5vdGlmaWNhdGlvbkNlbnRlcjo6cG9zdE5v
dGlmaWNhdGlvbkludGVybmFsKElXZWJOb3RpZmljYXRpb24qIG5vdGlmaWNhdAogCiAgICAgLy8g
SW50ZW50aW9uYWxseSBtYWtlIGEgY29weSBvZiB0aGUgbGlzdCB0byBhdm9pZCB0aGUgcG9zc2li
aWxpdHkgb2YgZXJyb3JzCiAgICAgLy8gZnJvbSBhIG11dGF0aW9uIG9mIHRoZSBsaXN0IGluIHRo
ZSBvbk5vdGlmeSBjYWxsYmFjay4KLSAgICBPYmplY3RPYnNlcnZlckxpc3QgbGlzdCA9IGl0LT5z
ZWNvbmQ7CisgICAgT2JqZWN0T2JzZXJ2ZXJMaXN0IGxpc3QgPSBpdC0+dmFsdWU7CiAKICAgICBP
YnNlcnZlckxpc3RJdGVyYXRvciBlbmQgPSBsaXN0LmVuZCgpOwogICAgIGZvciAoT2JzZXJ2ZXJM
aXN0SXRlcmF0b3IgaXQyID0gbGlzdC5iZWdpbigpOyBpdDIgIT0gZW5kOyArK2l0MikgewpAQCAt
MTQ5LDcgKzE0OSw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViTm90aWZpY2F0aW9u
Q2VudGVyOjphZGRPYnNlcnZlcigKICAgICBTdHJpbmcgbmFtZShub3RpZmljYXRpb25OYW1lLCBT
eXNTdHJpbmdMZW4obm90aWZpY2F0aW9uTmFtZSkpOwogICAgIE1hcHBlZE9ic2VydmVyczo6aXRl
cmF0b3IgaXQgPSBkLT5tX21hcHBlZE9ic2VydmVycy5maW5kKG5hbWUpOwogICAgIGlmIChpdCAh
PSBkLT5tX21hcHBlZE9ic2VydmVycy5lbmQoKSkKLSAgICAgICAgaXQtPnNlY29uZC5hcHBlbmQo
T2JqZWN0T2JzZXJ2ZXJQYWlyKGFuT2JqZWN0LCBvYnNlcnZlcikpOworICAgICAgICBpdC0+dmFs
dWUuYXBwZW5kKE9iamVjdE9ic2VydmVyUGFpcihhbk9iamVjdCwgb2JzZXJ2ZXIpKTsKICAgICBl
bHNlIHsKICAgICAgICAgT2JqZWN0T2JzZXJ2ZXJMaXN0IGxpc3Q7CiAgICAgICAgIGxpc3QuYXBw
ZW5kKE9iamVjdE9ic2VydmVyUGFpcihhbk9iamVjdCwgb2JzZXJ2ZXIpKTsKQEAgLTE5OCw3ICsx
OTgsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYk5vdGlmaWNhdGlvbkNlbnRlcjo6
cmVtb3ZlT2JzZXJ2ZXIoCiAgICAgaWYgKGl0ID09IGQtPm1fbWFwcGVkT2JzZXJ2ZXJzLmVuZCgp
KQogICAgICAgICByZXR1cm4gRV9GQUlMOwogCi0gICAgT2JqZWN0T2JzZXJ2ZXJMaXN0JiBvYnNl
cnZlckxpc3QgPSBpdC0+c2Vjb25kOworICAgIE9iamVjdE9ic2VydmVyTGlzdCYgb2JzZXJ2ZXJM
aXN0ID0gaXQtPnZhbHVlOwogICAgIE9ic2VydmVyTGlzdEl0ZXJhdG9yIGVuZCA9IG9ic2VydmVy
TGlzdC5lbmQoKTsKIAogICAgIGludCBpID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
d2luY2UvV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuY3BwIGIvU291cmNl
L1dlYktpdC93aW5jZS9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5jcHAK
aW5kZXggM2Y4YzkwN2M3MzlmMDhjZGI5OTE2ZTgzNmY5YjA4ZGU2Nzg0NTFjZi4uZDU1Nzk3MjMx
MTYxNTkxZDVmZGIxNzE1ODA0NDU4ZGI3ODJjOTFmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC93aW5jZS9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5jcHAKKysrIGIv
U291cmNlL1dlYktpdC93aW5jZS9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5D
RS5jcHAKQEAgLTk0LDggKzk0LDggQEAgdm9pZCBQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6Z2V0
UGx1Z2luSW5mbyhjb25zdCBQYWdlKiwgVmVjdG9yPFBsdWdpbkluZm8+JiBvdXQKICAgICAgICAg
Zm9yIChNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWltZVRvRGVz
Y3JpcHRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgTWltZUNs
YXNzSW5mbyBtaW1lOwogCi0gICAgICAgICAgICBtaW1lLnR5cGUgPSBpdC0+Zmlyc3Q7Ci0gICAg
ICAgICAgICBtaW1lLmRlc2MgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgbWltZS50eXBlID0g
aXQtPmtleTsKKyAgICAgICAgICAgIG1pbWUuZGVzYyA9IGl0LT52YWx1ZTsKICAgICAgICAgICAg
IG1pbWUuZXh0ZW5zaW9ucyA9IHBhY2thZ2UtPm1pbWVUb0V4dGVuc2lvbnMoKS5nZXQobWltZS50
eXBlKTsKIAogICAgICAgICAgICAgaW5mby5taW1lcy5hcHBlbmQobWltZSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50Q29kZXJzLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50Q29kZXJzLmgKaW5kZXggMDcwZjQ1
ODMwNzlmN2I0ZWViZmNmNGEyYTg4ODQ3ODZkOGM1NTQwYS4uNDdiZGRkZjY5YzljYWYzYjdhMjZl
ODIyYzc3MTM5YzQyNzBlZTc4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0v
Q29yZUlQQy9Bcmd1bWVudENvZGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0Nv
cmVJUEMvQXJndW1lbnRDb2RlcnMuaApAQCAtNzIsNiArNzIsMjkgQEAgdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVT4gc3RydWN0IEFyZ3VtZW50Q29kZXI8c3RkOjpwYWlyPFQsIFU+ID4g
ewogICAgIH0KIH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEtleVR5cGUsIHR5cGVuYW1lIE1hcHBl
ZFR5cGU+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdURjo6SGFzaE1hcEVudHJ5PEtleVR5cGUsIE1h
cHBlZFR5cGU+ID4geworICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqIGVu
Y29kZXIsIGNvbnN0IFdURjo6SGFzaE1hcEVudHJ5PEtleVR5cGUsIE1hcHBlZFR5cGU+JiBoYXNo
TWFwRW50cnkpCisgICAgeworICAgICAgICBlbmNvZGVyLT5lbmNvZGUoaGFzaE1hcEVudHJ5Lmtl
eSk7CisgICAgICAgIGVuY29kZXItPmVuY29kZShoYXNoTWFwRW50cnkudmFsdWUpOworICAgIH0K
KworICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIFdURjo6
SGFzaE1hcEVudHJ5PEtleVR5cGUsIE1hcHBlZFR5cGU+JiBoYXNoTWFwRW50cnkpCisgICAgewor
ICAgICAgICBLZXlUeXBlIGtleTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoa2V5KSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBNYXBwZWRUeXBlIHZhbHVlOwor
ICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAgICAgaGFzaE1hcEVudHJ5LmtleSA9IGtleTsKKyAgICAgICAgaGFzaE1h
cEVudHJ5LnZhbHVlID0gdmFsdWU7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK307CisK
IHRlbXBsYXRlPGJvb2wgZml4ZWRTaXplRWxlbWVudHMsIHR5cGVuYW1lIFQ+IHN0cnVjdCBWZWN0
b3JBcmd1bWVudENvZGVyOwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgVmVjdG9yQXJn
dW1lbnRDb2RlcjxmYWxzZSwgVD4gewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZv
cm0vQ29yZUlQQy9Db25uZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJ
UEMvQ29ubmVjdGlvbi5jcHAKaW5kZXggZjdjMzcyM2Y3ZWY3ZGQyMjkxZWE1OTE1MDYwMDkzZGMx
YzQxOGJiNS4uOTMyYWJiMjNjYjQwMjNlYzkzNjViN2ZlZjM5NDU0OWZmZDYwODYzMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Db25uZWN0aW9uLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uY3BwCkBAIC0xMDMs
MTIgKzEwMywxMiBAQCBQYXNzUmVmUHRyPENvbm5lY3Rpb246OlN5bmNNZXNzYWdlU3RhdGU+IENv
bm5lY3Rpb246OlN5bmNNZXNzYWdlU3RhdGU6OmdldE9yQ3JlYQogICAgIFN5bmNNZXNzYWdlU3Rh
dGVNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBzeW5jTWVzc2FnZVN0YXRlTWFwKCkuYWRkKHJ1bkxv
b3AsIDApOwogCiAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICBBU1NFUlQo
cmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOwotICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9y
LT5zZWNvbmQ7CisgICAgICAgIEFTU0VSVChyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAgICAgfQogCiAgICAgUmVmUHRyPFN5
bmNNZXNzYWdlU3RhdGU+IHN5bmNNZXNzYWdlU3RhdGUgPSBhZG9wdFJlZihuZXcgU3luY01lc3Nh
Z2VTdGF0ZShydW5Mb29wKSk7Ci0gICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBzeW5jTWVz
c2FnZVN0YXRlLmdldCgpOworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBzeW5jTWVzc2Fn
ZVN0YXRlLmdldCgpOwogCiAgICAgcmV0dXJuIHN5bmNNZXNzYWdlU3RhdGUucmVsZWFzZSgpOwog
fQpAQCAtMzYzLDEwICszNjMsMTAgQEAgUGFzc093blB0cjxBcmd1bWVudERlY29kZXI+IENvbm5l
Y3Rpb246OndhaXRGb3JNZXNzYWdlKE1lc3NhZ2VJRCBtZXNzYWdlSUQsIHVpbnQKICAgICAgICAg
TXV0ZXhMb2NrZXIgbG9ja2VyKG1fd2FpdEZvck1lc3NhZ2VNdXRleCk7CiAKICAgICAgICAgSGFz
aE1hcDxzdGQ6OnBhaXI8dW5zaWduZWQsIHVpbnQ2NF90PiwgQXJndW1lbnREZWNvZGVyKj46Oml0
ZXJhdG9yIGl0ID0gbV93YWl0Rm9yTWVzc2FnZU1hcC5maW5kKG1lc3NhZ2VBbmREZXN0aW5hdGlv
bik7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kKSB7CisgICAgICAgIGlmIChpdC0+dmFsdWUpIHsK
ICAgICAgICAgICAgIC8vIEZJWE1FOiBtX3dhaXRGb3JNZXNzYWdlTWFwIHNob3VsZCByZWFsbHkg
aG9sZCBPd25QdHJzIHRvCiAgICAgICAgICAgICAvLyBBcmd1bWVudERlY29kZXJzLCBidXQgSGFz
aE1hcCBkb2Vzbid0IGN1cnJlbnRseSBzdXBwb3J0IE93blB0cnMuCi0gICAgICAgICAgICBPd25Q
dHI8QXJndW1lbnREZWNvZGVyPiBhcmd1bWVudHMgPSBhZG9wdFB0cihpdC0+c2Vjb25kKTsKKyAg
ICAgICAgICAgIE93blB0cjxBcmd1bWVudERlY29kZXI+IGFyZ3VtZW50cyA9IGFkb3B0UHRyKGl0
LT52YWx1ZSk7CiAgICAgICAgICAgICBtX3dhaXRGb3JNZXNzYWdlTWFwLnJlbW92ZShpdCk7CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIHJldHVybiBhcmd1bWVudHMucmVsZWFzZSgpOwpAQCAt
NTQwLDggKzU0MCw4IEBAIHZvaWQgQ29ubmVjdGlvbjo6cHJvY2Vzc0luY29taW5nTWVzc2FnZShN
ZXNzYWdlSUQgbWVzc2FnZUlELCBQYXNzT3duUHRyPEFyZ3VtZW50CiAgICAgICAgIAogICAgICAg
ICBIYXNoTWFwPHN0ZDo6cGFpcjx1bnNpZ25lZCwgdWludDY0X3Q+LCBBcmd1bWVudERlY29kZXIq
Pjo6aXRlcmF0b3IgaXQgPSBtX3dhaXRGb3JNZXNzYWdlTWFwLmZpbmQoc3RkOjptYWtlX3BhaXIo
bWVzc2FnZUlELnRvSW50KCksIGluY29taW5nTWVzc2FnZS5kZXN0aW5hdGlvbklEKCkpKTsKICAg
ICAgICAgaWYgKGl0ICE9IG1fd2FpdEZvck1lc3NhZ2VNYXAuZW5kKCkpIHsKLSAgICAgICAgICAg
IGl0LT5zZWNvbmQgPSBpbmNvbWluZ01lc3NhZ2UucmVsZWFzZUFyZ3VtZW50cygpLmxlYWtQdHIo
KTsKLSAgICAgICAgICAgIEFTU0VSVChpdC0+c2Vjb25kKTsKKyAgICAgICAgICAgIGl0LT52YWx1
ZSA9IGluY29taW5nTWVzc2FnZS5yZWxlYXNlQXJndW1lbnRzKCkubGVha1B0cigpOworICAgICAg
ICAgICAgQVNTRVJUKGl0LT52YWx1ZSk7CiAgICAgICAgIAogICAgICAgICAgICAgbV93YWl0Rm9y
TWVzc2FnZUNvbmRpdGlvbi5zaWduYWwoKTsKICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2d0ay9Xb3JrUXVldWVHdGsuY3BwIGIvU291cmNl
L1dlYktpdDIvUGxhdGZvcm0vZ3RrL1dvcmtRdWV1ZUd0ay5jcHAKaW5kZXggMWRmYWI4M2NjZmIy
NGM5ZjAwZWU0MGQyZGFhMWM5NWIxNjM4MmE0My4uNjg4NWQ0ODViZDExNmQzMjhkZWNkMDJhYWY1
NGM5MTg3ODJiMmYxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vZ3RrL1dv
cmtRdWV1ZUd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vZ3RrL1dvcmtRdWV1
ZUd0ay5jcHAKQEAgLTE2Niw3ICsxNjYsNyBAQCB2b2lkIFdvcmtRdWV1ZTo6cmVnaXN0ZXJFdmVu
dFNvdXJjZUhhbmRsZXIoaW50IGZpbGVEZXNjcmlwdG9yLCBpbnQgY29uZGl0aW9uLCBjbwogICAg
ICAgICBWZWN0b3I8RXZlbnRTb3VyY2UqPiBzb3VyY2VzOwogICAgICAgICBFdmVudFNvdXJjZUl0
ZXJhdG9yIGl0ID0gbV9ldmVudFNvdXJjZXMuZmluZChmaWxlRGVzY3JpcHRvcik7CiAgICAgICAg
IGlmIChpdCAhPSBtX2V2ZW50U291cmNlcy5lbmQoKSkgCi0gICAgICAgICAgICBzb3VyY2VzID0g
aXQtPnNlY29uZDsKKyAgICAgICAgICAgIHNvdXJjZXMgPSBpdC0+dmFsdWU7CiAKICAgICAgICAg
c291cmNlcy5hcHBlbmQoZXZlbnRTb3VyY2UpOwogICAgICAgICBtX2V2ZW50U291cmNlcy5zZXQo
ZmlsZURlc2NyaXB0b3IsIHNvdXJjZXMpOwpAQCAtMTg2LDcgKzE4Niw3IEBAIHZvaWQgV29ya1F1
ZXVlOjp1bnJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKGludCBmaWxlRGVzY3JpcHRvcikKICAg
ICBBU1NFUlQobV9ldmVudFNvdXJjZXMuY29udGFpbnMoZmlsZURlc2NyaXB0b3IpKTsKIAogICAg
IGlmIChpdCAhPSBtX2V2ZW50U291cmNlcy5lbmQoKSkgewotICAgICAgICBWZWN0b3I8RXZlbnRT
b3VyY2UqPiBzb3VyY2VzID0gaXQtPnNlY29uZDsKKyAgICAgICAgVmVjdG9yPEV2ZW50U291cmNl
Kj4gc291cmNlcyA9IGl0LT52YWx1ZTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHNvdXJjZXMuc2l6ZSgpOyBpKyspCiAgICAgICAgICAgICBzb3VyY2VzW2ldLT5jYW5jZWwoKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vbWFjL1dvcmtRdWV1ZU1hYy5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9tYWMvV29ya1F1ZXVlTWFjLmNwcAppbmRleCBh
ZTQ3M2VlNWNjODRlNTg0MjliMDQzOWNjZDkyMWFjMmM0OTJmZmFhLi42ZTU0Y2VlMGI3MDk4NDBh
NTRmNzZjZGFhNDI0ZmVlYjQ2MjkwOWIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybS9tYWMvV29ya1F1ZXVlTWFjLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9t
YWMvV29ya1F1ZXVlTWFjLmNwcApAQCAtMTUzLDcgKzE1Myw3IEBAIHZvaWQgV29ya1F1ZXVlOjp1
bnJlZ2lzdGVyTWFjaFBvcnRFdmVudEhhbmRsZXIobWFjaF9wb3J0X3QgbWFjaFBvcnQpCiAgICAg
CiAgICAgQVNTRVJUKG1fZXZlbnRTb3VyY2VzLmNvbnRhaW5zKG1hY2hQb3J0KSk7CiAKLSAgICBF
dmVudFNvdXJjZSogZXZlbnRTb3VyY2UgPSBpdC0+c2Vjb25kOworICAgIEV2ZW50U291cmNlKiBl
dmVudFNvdXJjZSA9IGl0LT52YWx1ZTsKICAgICAvLyBDYW5jZWwgYW5kIHJlbGVhc2UgdGhlIHNv
dXJjZS4gSXQgd2lsbCBiZSBkZWxldGVkIGluIGl0cyBmaW5hbGl6ZSBoYW5kbGVyLgogICAgIGRp
c3BhdGNoX3NvdXJjZV9jYW5jZWwoZXZlbnRTb3VyY2UtPmRpc3BhdGNoU291cmNlKCkpOwogICAg
IGRpc3BhdGNoX3JlbGVhc2UoZXZlbnRTb3VyY2UtPmRpc3BhdGNoU291cmNlKCkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1BsdWdpbnMvTlBSZW1vdGVPYmplY3RNYXAuY3Bw
IGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1BsdWdpbnMvTlBSZW1vdGVPYmplY3RNYXAuY3BwCmlu
ZGV4IDc2NDFhZjVlOGM4OTJkMWQzN2VlOTZkYTliN2U2MDU4OTk3M2U4OGEuLmI1ZWMyZDlkYTM5
ZjI2ZGNiNDMyMGQ5NWUwM2YyZmNhZTRlN2Q3ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9QbHVnaW5zL05QUmVtb3RlT2JqZWN0TWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvUGx1Z2lucy9OUFJlbW90ZU9iamVjdE1hcC5jcHAKQEAgLTIwMCw3ICsyMDAsNyBA
QCB2b2lkIE5QUmVtb3RlT2JqZWN0TWFwOjpwbHVnaW5EZXN0cm95ZWQoUGx1Z2luKiBwbHVnaW4p
CiAKICAgICAvLyBHYXRoZXIgdGhlIHJlY2VpdmVycyBhc3NvY2lhdGVkIHdpdGggdGhpcyBwbHVn
LWluLgogICAgIGZvciAoSGFzaE1hcDx1aW50NjRfdCwgTlBPYmplY3RNZXNzYWdlUmVjZWl2ZXIq
Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3JlZ2lzdGVyZWROUE9iamVjdHMuYmVnaW4oKSwgZW5k
ID0gbV9yZWdpc3RlcmVkTlBPYmplY3RzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgTlBPYmplY3RNZXNzYWdlUmVjZWl2ZXIqIG5wT2JqZWN0TWVzc2FnZVJlY2VpdmVyID0gaXQt
PnNlY29uZDsKKyAgICAgICAgTlBPYmplY3RNZXNzYWdlUmVjZWl2ZXIqIG5wT2JqZWN0TWVzc2Fn
ZVJlY2VpdmVyID0gaXQtPnZhbHVlOwogICAgICAgICBpZiAobnBPYmplY3RNZXNzYWdlUmVjZWl2
ZXItPnBsdWdpbigpID09IHBsdWdpbikKICAgICAgICAgICAgIG1lc3NhZ2VSZWNlaXZlcnMuYXBw
ZW5kKG5wT2JqZWN0TWVzc2FnZVJlY2VpdmVyKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvVXNlck1lc3NhZ2VDb2RlcnMuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9Vc2VyTWVzc2FnZUNvZGVycy5oCmluZGV4IGFjZTcyZmQyZTMzZTNiYzExN2ZjMmZhNDU1ZjE1
ZDg3NzdmYzAwM2YuLjU3YzBjMTZiMTJhMGU1MTZkOTk3MTU2OGEyOTM0OWE2OTk3N2UzYzUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Vc2VyTWVzc2FnZUNvZGVycy5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Vc2VyTWVzc2FnZUNvZGVycy5oCkBAIC05Myw4ICs5Myw4
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIEltbXV0YWJsZURpY3Rpb25hcnk6Ok1hcFR5cGU6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbWFwLmJlZ2luKCk7CiAgICAgICAgICAgICBJbW11dGFibGVEaWN0
aW9uYXJ5OjpNYXBUeXBlOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAuZW5kKCk7CiAgICAgICAg
ICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAgZW5jb2Rlci0+
ZW5jb2RlKGl0LT5maXJzdCk7Ci0gICAgICAgICAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKE93bmVy
KGl0LT5zZWNvbmQuZ2V0KCkpKTsKKyAgICAgICAgICAgICAgICBlbmNvZGVyLT5lbmNvZGUoaXQt
PmtleSk7CisgICAgICAgICAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKE93bmVyKGl0LT52YWx1ZS5n
ZXQoKSkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcmVmZXJlbmNlc1N0b3Jl
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcmVmZXJlbmNlc1N0b3JlLmNwcAppbmRl
eCA4NjY4YmVjMGMwYTRmYzgxMDE5ZTc3NzBkMDYwZDMyNWFjYmEzNWJhLi45Nzg0ZTVmZDgxMGM1
ODQ2ZTIyODYwOTg0YjQzN2UxNTQ5OGU5YmMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVk
L1dlYlByZWZlcmVuY2VzU3RvcmUuY3BwCkBAIC0xNTEsNyArMTUxLDcgQEAgc3RhdGljIHR5cGVu
YW1lIE1hcFR5cGU6Ok1hcHBlZFR5cGUgdmFsdWVGb3JLZXkoY29uc3QgTWFwVHlwZSYgbWFwLCBj
b25zdCB0eXBlbmEKIHsKICAgICB0eXBlbmFtZSBNYXBUeXBlOjpjb25zdF9pdGVyYXRvciBpdCA9
IG1hcC5maW5kKGtleSk7CiAgICAgaWYgKGl0ICE9IG1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJu
IGl0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBpdC0+dmFsdWU7CiAKICAgICByZXR1cm4gZGVm
YXVsdFZhbHVlRm9yS2V5PHR5cGVuYW1lIE1hcFR5cGU6Ok1hcHBlZFR5cGU+KGtleSk7CiB9CkBA
IC0xODcsNyArMTg3LDcgQEAgYm9vbCBXZWJQcmVmZXJlbmNlc1N0b3JlOjpnZXRCb29sVmFsdWVG
b3JLZXkoY29uc3QgU3RyaW5nJiBrZXkpIGNvbnN0CiAgICAgLy8gRklYTUU6IEV4dGVuZCBvdmVy
cmlkaW5nIHRvIG90aGVyIGtleSB0eXBlcyB1c2VkIGZyb20gTGF5b3V0VGVzdENvbnRyb2xsZXIu
CiAgICAgQm9vbE92ZXJyaWRlc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBib29sVGVzdFJ1bm5l
ck92ZXJyaWRlc01hcCgpLmZpbmQoa2V5KTsKICAgICBpZiAoaXQgIT0gYm9vbFRlc3RSdW5uZXJP
dmVycmlkZXNNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAg
IHJldHVybiBpdC0+dmFsdWU7CiAgICAgcmV0dXJuIHZhbHVlRm9yS2V5KG1fYm9vbFZhbHVlcywg
a2V5KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9XZWJDb3Jl
QXJndW1lbnRDb2RlcnNHdGsuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9XZWJDb3Jl
QXJndW1lbnRDb2RlcnNHdGsuY3BwCmluZGV4IDlkNmUyNWM2NmQ4NmIzZTJmMWQ5NDM3NDM3YmEy
ZmFiNDYwMjVhM2IuLjQxMzcwYmFlNzM5YTJlMDc2NjIzNjEwOWJkNjAzODk5NGFiYzJkMDEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvV2ViQ29yZUFyZ3VtZW50Q29kZXJz
R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL1dlYkNvcmVBcmd1bWVudENv
ZGVyc0d0ay5jcHAKQEAgLTE0NCw3ICsxNDQsNyBAQCBib29sIEFyZ3VtZW50Q29kZXI8UmVzb3Vy
Y2VSZXNwb25zZT46OmRlY29kZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIFJlc291cmNlUgog
ICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGhlYWRlcnMpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGhlYWRlcnMuYmVn
aW4oKSwgZW5kID0gaGVhZGVycy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICByZXNw
b25zZS5zZXRIVFRQSGVhZGVyRmllbGQoaXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsKKyAgICAgICAg
cmVzcG9uc2Uuc2V0SFRUUEhlYWRlckZpZWxkKGl0LT5rZXksIGl0LT52YWx1ZSk7CiAKICAgICB1
aW50MzJfdCBzb3VwTWVzc2FnZUZsYWdzOwogICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHNvdXBN
ZXNzYWdlRmxhZ3MpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9XZWJD
b3JlQXJndW1lbnRDb2RlcnNNYWMubW0gYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1dlYkNv
cmVBcmd1bWVudENvZGVyc01hYy5tbQppbmRleCAxOTZhYjExYzdhNzQzMTA3ZDM4MDBlMWZmOGZh
NWJlMWYyYjNiODE4Li4wZjlkM2Q4YTNiZmI3Mzc0M2IzOTMzNTMzNWRjNWY1OGMxZDE0NzgwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1dlYkNvcmVBcmd1bWVudENvZGVy
c01hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1dlYkNvcmVBcmd1bWVudENv
ZGVyc01hYy5tbQpAQCAtMTgzLDcgKzE4Myw3IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxSZXNvdXJj
ZUVycm9yPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgUmVzb3VyY2VFcnJvCiAg
ICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gc3RyaW5nVXNl
ckluZm9NYXAuYmVnaW4oKTsKICAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gc3RyaW5nVXNlckluZm9NYXAuZW5kKCk7CiAgICAgZm9yICg7IGl0ICE9IGVu
ZDsgKytpdCkKLSAgICAgICAgW3VzZXJJbmZvIHNldE9iamVjdDpuc1N0cmluZyhpdC0+c2Vjb25k
KSBmb3JLZXk6bnNTdHJpbmcoaXQtPmZpcnN0KV07CisgICAgICAgIFt1c2VySW5mbyBzZXRPYmpl
Y3Q6bnNTdHJpbmcoaXQtPnZhbHVlKSBmb3JLZXk6bnNTdHJpbmcoaXQtPmtleSldOwogCiAgICAg
aWYgKGNlcnRpZmljYXRlLmNlcnRpZmljYXRlQ2hhaW4oKSkKICAgICAgICAgW3VzZXJJbmZvIHNl
dE9iamVjdDooTlNBcnJheSAqKWNlcnRpZmljYXRlLmNlcnRpZmljYXRlQ2hhaW4oKSBmb3JLZXk6
QCJOU0Vycm9yUGVlckNlcnRpZmljYXRlQ2hhaW5LZXkiXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9xdC9Bcmd1bWVudENvZGVyc1F0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9xdC9Bcmd1bWVudENvZGVyc1F0LmNwcAppbmRleCBjODliZjQ0ZjE3MTkwYjAyYzQxMTJi
Y2JlZDZlMGM0MWZhM2M2NzVmLi5hNDM5Y2FmZjFlNDg4ZTEwMmM1NTBhZDA0ZjM0NmQ1OTk2ZGQx
ODkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvQXJndW1lbnRDb2RlcnNR
dC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL3F0L0FyZ3VtZW50Q29kZXJzUXQuY3Bw
CkBAIC04Niw4ICs4Niw4IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpEcmFnRGF0YT46
OmRlY29kZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIERyYWdEYXRhCiAgICAgICAgIE1JTUVE
YXRhSGFzaE1hcDo6aXRlcmF0b3IgaXQgPSBtYXAuYmVnaW4oKTsKICAgICAgICAgTUlNRURhdGFI
YXNoTWFwOjppdGVyYXRvciBlbmQgPSBtYXAuZW5kKCk7CiAgICAgICAgIGZvciAoOyBpdCAhPSBl
bmQ7ICsraXQpIHsKLSAgICAgICAgICAgIFFCeXRlQXJyYXkgYnl0ZXMoKGNoYXIqKWl0LT5zZWNv
bmQuZGF0YSgpLCBpdC0+c2Vjb25kLnNpemUoKSk7Ci0gICAgICAgICAgICBtaW1lRGF0YS0+c2V0
RGF0YShpdC0+Zmlyc3QsIGJ5dGVzKTsKKyAgICAgICAgICAgIFFCeXRlQXJyYXkgYnl0ZXMoKGNo
YXIqKWl0LT52YWx1ZS5kYXRhKCksIGl0LT52YWx1ZS5zaXplKCkpOworICAgICAgICAgICAgbWlt
ZURhdGEtPnNldERhdGEoaXQtPmtleSwgYnl0ZXMpOwogICAgICAgICB9CiAgICAgfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCmlu
ZGV4IDFiNDNlYTUzNmMxZGY0MjhmYmI2MDM0YzExMjQ1YzZhMjEwNWU1NWMuLjJiNjJhMWY2MTAy
NzljMThhOTE5MmJlZmE5MjQ4N2YzZGQxMDZlMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCkBAIC0xNzE1LDcgKzE3MTUsNyBA
QCBHTGlzdCogd2Via2l0X3dlYl92aWV3X2dldF9zdWJyZXNvdXJjZXMoV2ViS2l0V2ViVmlldyog
d2ViVmlldykKICAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogcHJpdiA9IHdlYlZpZXctPnByaXY7
CiAgICAgUmVzb3VyY2VzTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBwcml2LT5zdWJyZXNvdXJj
ZXNNYXAuZW5kKCk7CiAgICAgZm9yIChSZXNvdXJjZXNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
cHJpdi0+c3VicmVzb3VyY2VzTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAg
c3VicmVzb3VyY2VzID0gZ19saXN0X3ByZXBlbmQoc3VicmVzb3VyY2VzLCBpdC0+c2Vjb25kLmdl
dCgpKTsKKyAgICAgICAgc3VicmVzb3VyY2VzID0gZ19saXN0X3ByZXBlbmQoc3VicmVzb3VyY2Vz
LCBpdC0+dmFsdWUuZ2V0KCkpOwogCiAgICAgcmV0dXJuIGdfbGlzdF9yZXZlcnNlKHN1YnJlc291
cmNlcyk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9X
S1ByaW50aW5nVmlldy5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLUHJp
bnRpbmdWaWV3Lm1tCmluZGV4IDMxMjU4ZjIwMWI5ODI2ODQwMzkwNDhiNDA4YzZiMzcwNDU3MGE4
NTcuLjI0ZTczYzlkYTAzZTkwMDZjMWRiYmI1ZDNlYWIxOTliN2RhM2Q4ZWQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLUHJpbnRpbmdWaWV3Lm1tCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLUHJpbnRpbmdWaWV3Lm1tCkBAIC0x
OTMsOCArMTkzLDggQEAgc3RhdGljIEJPT0wgaXNGb3JjaW5nUHJldmlld1VwZGF0ZTsKIC0gKHVp
bnQ2NF90KV9leHBlY3RlZFByZXZpZXdDYWxsYmFja0ZvclJlY3Q6KGNvbnN0IEludFJlY3QmKXJl
Y3QKIHsKICAgICBmb3IgKEhhc2hNYXA8dWludDY0X3QsIFdlYkNvcmU6OkludFJlY3Q+OjppdGVy
YXRvciBpdGVyID0gX2V4cGVjdGVkUHJldmlld0NhbGxiYWNrcy5iZWdpbigpOyBpdGVyICE9IF9l
eHBlY3RlZFByZXZpZXdDYWxsYmFja3MuZW5kKCk7ICsraXRlcikgewotICAgICAgICBpZiAoaXRl
ci0+c2Vjb25kICA9PSByZWN0KQotICAgICAgICAgICAgcmV0dXJuIGl0ZXItPmZpcnN0OworICAg
ICAgICBpZiAoaXRlci0+dmFsdWUgID09IHJlY3QpCisgICAgICAgICAgICByZXR1cm4gaXRlci0+
a2V5OwogICAgIH0KICAgICByZXR1cm4gMDsKIH0KQEAgLTIyOCw4ICsyMjgsOCBAQCBzdGF0aWMg
dm9pZCBwYWdlRGlkRHJhd1RvUERGKFdLRGF0YVJlZiBkYXRhUmVmLCBXS0Vycm9yUmVmLCB2b2lk
KiB1bnR5cGVkQ29udGV4dAogICAgICAgICAgICAgQVNTRVJUKFt2aWV3IF9pc1ByaW50aW5nUHJl
dmlld10pOwogCiAgICAgICAgICAgICBpZiAoZGF0YSkgewotICAgICAgICAgICAgICAgIEhhc2hN
YXA8V2ViQ29yZTo6SW50UmVjdCwgVmVjdG9yPHVpbnQ4X3Q+ID46OkFkZFJlc3VsdCBlbnRyeSA9
IHZpZXctPl9wYWdlUHJldmlld3MuYWRkKGl0ZXItPnNlY29uZCwgVmVjdG9yPHVpbnQ4X3Q+KCkp
OwotICAgICAgICAgICAgICAgIGVudHJ5Lml0ZXJhdG9yLT5zZWNvbmQuYXBwZW5kKGRhdGEtPmJ5
dGVzKCksIGRhdGEtPnNpemUoKSk7CisgICAgICAgICAgICAgICAgSGFzaE1hcDxXZWJDb3JlOjpJ
bnRSZWN0LCBWZWN0b3I8dWludDhfdD4gPjo6QWRkUmVzdWx0IGVudHJ5ID0gdmlldy0+X3BhZ2VQ
cmV2aWV3cy5hZGQoaXRlci0+dmFsdWUsIFZlY3Rvcjx1aW50OF90PigpKTsKKyAgICAgICAgICAg
ICAgICBlbnRyeS5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKGRhdGEtPmJ5dGVzKCksIGRhdGEtPnNp
emUoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB2aWV3LT5fZXhwZWN0ZWRQcmV2aWV3
Q2FsbGJhY2tzLnJlbW92ZShjb250ZXh0LT5jYWxsYmFja0lEKTsKICAgICAgICAgICAgIGJvb2wg
cmVjZWl2ZWRSZXNwb25zZVRvTGF0ZXN0UmVxdWVzdCA9IHZpZXctPl9sYXRlc3RFeHBlY3RlZFBy
ZXZpZXdDYWxsYmFjayA9PSBjb250ZXh0LT5jYWxsYmFja0lEOwpAQCAtNTIwLDcgKzUyMCw3IEBA
IHN0YXRpYyBDbGFzcyBwZGZEb2N1bWVudENsYXNzKCkKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgcGRmRGF0YUJ5dGVzID0gcGFnZVByZXZpZXdJ
dGVyYXRvci0+c2Vjb25kOworICAgIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgcGRmRGF0YUJ5dGVz
ID0gcGFnZVByZXZpZXdJdGVyYXRvci0+dmFsdWU7CiAgICAgUmV0YWluUHRyPE5TRGF0YT4gcGRm
RGF0YShBZG9wdE5TLCBbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczpwZGZEYXRhQnl0ZXMu
ZGF0YSgpIGxlbmd0aDpwZGZEYXRhQnl0ZXMuc2l6ZSgpXSk7CiAgICAgUmV0YWluUHRyPFBERkRv
Y3VtZW50PiBwZGZEb2N1bWVudChBZG9wdE5TLCBbW3BkZkRvY3VtZW50Q2xhc3MoKSBhbGxvY10g
aW5pdFdpdGhEYXRhOnBkZkRhdGEuZ2V0KCldKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9tYWMvV0tWaWV3Lm1tCmluZGV4IDYxZTNiNjA3NWQ0MDgyNWNhM2VhNzYzYzgwMGNhNmVi
MWMyMTg1YTkuLjFjZDgyMDI1MGFlOTE4YzIxM2I4NWYyYzY2OTI0YTcyYmM5Yzk5Y2UgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0KQEAgLTQxNCw3ICs0MTQs
NyBAQCBzdGF0aWMgU3RyaW5nIGNvbW1hbmROYW1lRm9yU2VsZWN0b3IoU0VMIHNlbGVjdG9yKQog
ICAgIHN0YXRpYyBjb25zdCBTZWxlY3Rvck5hbWVNYXAqIGV4Y2VwdGlvbk1hcCA9IGNyZWF0ZVNl
bGVjdG9yRXhjZXB0aW9uTWFwKCk7CiAgICAgU2VsZWN0b3JOYW1lTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IGV4Y2VwdGlvbk1hcC0+ZmluZChzZWxlY3Rvcik7CiAgICAgaWYgKGl0ICE9IGV4Y2Vw
dGlvbk1hcC0+ZW5kKCkpCi0gICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgICAgICByZXR1
cm4gaXQtPnZhbHVlOwogICAgIAogICAgIC8vIFJlbW92ZSB0aGUgdHJhaWxpbmcgY29sb24uCiAg
ICAgLy8gTm8gbmVlZCB0byBjYXBpdGFsaXplIHRoZSBjb21tYW5kIG5hbWUgc2luY2UgRWRpdG9y
IGNvbW1hbmQgbmFtZXMgYXJlCkBAIC03MjIsNyArNzIyLDcgQEAgc3RhdGljIHZvaWQgdmFsaWRh
dGVDb21tYW5kQ2FsbGJhY2soV0tTdHJpbmdSZWYgY29tbWFuZE5hbWUsIGJvb2wgaXNFbmFibGVk
LCBpbnQKIAogICAgIC8vIEFkZCB0aGlzIGl0ZW0gdG8gdGhlIHZlY3RvciBvZiBpdGVtcyBmb3Ig
YSBnaXZlbiBjb21tYW5kIHRoYXQgYXJlIGF3YWl0aW5nIHZhbGlkYXRpb24uCiAgICAgVmFsaWRh
dGlvbk1hcDo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IF9kYXRhLT5fdmFsaWRhdGlvbk1hcC5hZGQo
Y29tbWFuZE5hbWUsIFZhbGlkYXRpb25WZWN0b3IoKSk7Ci0gICAgYWRkUmVzdWx0Lml0ZXJhdG9y
LT5zZWNvbmQuYXBwZW5kKGl0ZW0pOworICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYXBw
ZW5kKGl0ZW0pOwogICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkgewogICAgICAgICAvLyBJ
ZiB3ZSBhcmUgbm90IGFscmVhZHkgYXdhaXRpbmcgdmFsaWRhdGlvbiBmb3IgdGhpcyBjb21tYW5k
LCBzdGFydCB0aGUgYXN5bmNocm9ub3VzIHZhbGlkYXRpb24gcHJvY2Vzcy4KICAgICAgICAgLy8g
RklYTUU6IFRoZW9yZXRpY2FsbHksIHRoZXJlIGlzIGEgcmFjZSBoZXJlOyB3aGVuIHdlIGdldCB0
aGUgYW5zd2VyIGl0IG1pZ2h0IGJlIG9sZCwgZnJvbSBhIHByZXZpb3VzIHRpbWUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9HZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0
TWFuYWdlclByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9HZW9sb2NhdGlvblBl
cm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcAppbmRleCA3MWJlYWY1YTVjMzFkNDU1Y2E4
ZDJiMWEyODgxY2EyYTcyNzE0N2IyLi4wZDQxNjM1NTQ2NWZmOTBkYTZiY2YwOGVjMzViODRjMTcx
YTUzOTk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvR2VvbG9jYXRpb25Q
ZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuY3BwCkBAIC00
Miw3ICs0Miw3IEBAIHZvaWQgR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94
eTo6aW52YWxpZGF0ZVJlcXVlc3RzKCkKICAgICBQZW5kaW5nUmVxdWVzdE1hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX3BlbmRpbmdSZXF1ZXN0cy5iZWdpbigpOwogICAgIFBlbmRpbmdSZXF1ZXN0
TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BlbmRpbmdSZXF1ZXN0cy5lbmQoKTsKICAgICBm
b3IgKDsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5pbnZhbGlkYXRlKCk7
CisgICAgICAgIGl0LT52YWx1ZS0+aW52YWxpZGF0ZSgpOwogCiAgICAgbV9wZW5kaW5nUmVxdWVz
dHMuY2xlYXIoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Ob3Rp
ZmljYXRpb25zL05vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Ob3RpZmljYXRpb25zL05vdGlmaWNhdGlvblBlcm1p
c3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcAppbmRleCAwNzkyMjk4NWU0NTY1ZjNjNzNjYWRj
M2EwY2Y0NTUyMTdjNjE5OTY5Li40YTBjNDc1MjkzN2I4NzJkNWRlMjY5YzkxNjk0ZTIyMThkMzIw
ZTFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTm90aWZpY2F0aW9ucy9O
b3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL05vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uUGVybWlzc2lvblJl
cXVlc3RNYW5hZ2VyUHJveHkuY3BwCkBAIC00Myw3ICs0Myw3IEBAIHZvaWQgTm90aWZpY2F0aW9u
UGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHk6OmludmFsaWRhdGVSZXF1ZXN0cygpCiAgICAg
UGVuZGluZ1JlcXVlc3RNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wZW5kaW5nUmVxdWVzdHMu
YmVnaW4oKTsKICAgICBQZW5kaW5nUmVxdWVzdE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9w
ZW5kaW5nUmVxdWVzdHMuZW5kKCk7CiAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAg
ICAgaXQtPnNlY29uZC0+aW52YWxpZGF0ZSgpOworICAgICAgICBpdC0+dmFsdWUtPmludmFsaWRh
dGUoKTsKICAgICAKICAgICBtX3BlbmRpbmdSZXF1ZXN0cy5jbGVhcigpOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc1Byb3h5LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NQcm94eS5j
cHAKaW5kZXggNDNmYTJmNGNiYjA0MDkyYjJjMTkwMmJlOTBjYTkxZThkNDQ2MDg3NS4uMzY5YWRl
MmRkYzI2NTMwM2Q4MDQyZDVlMzMyZjAyY2E0MDI0N2RjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc1Byb3h5LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzUHJveHkuY3BwCkBAIC0x
NDYsMTAgKzE0NiwxMCBAQCB2b2lkIFBsdWdpblByb2Nlc3NQcm94eTo6cGx1Z2luUHJvY2Vzc0Ny
YXNoZWRPckZhaWxlZFRvTGF1bmNoKCkKICAgICB9CiAKICAgICB3aGlsZSAoIW1fcGVuZGluZ0dl
dFNpdGVzUmVwbGllcy5pc0VtcHR5KCkpCi0gICAgICAgIGRpZEdldFNpdGVzV2l0aERhdGEoVmVj
dG9yPFN0cmluZz4oKSwgbV9wZW5kaW5nR2V0U2l0ZXNSZXBsaWVzLmJlZ2luKCktPmZpcnN0KTsK
KyAgICAgICAgZGlkR2V0U2l0ZXNXaXRoRGF0YShWZWN0b3I8U3RyaW5nPigpLCBtX3BlbmRpbmdH
ZXRTaXRlc1JlcGxpZXMuYmVnaW4oKS0+a2V5KTsKIAogICAgIHdoaWxlICghbV9wZW5kaW5nQ2xl
YXJTaXRlRGF0YVJlcGxpZXMuaXNFbXB0eSgpKQotICAgICAgICBkaWRDbGVhclNpdGVEYXRhKG1f
cGVuZGluZ0NsZWFyU2l0ZURhdGFSZXBsaWVzLmJlZ2luKCktPmZpcnN0KTsKKyAgICAgICAgZGlk
Q2xlYXJTaXRlRGF0YShtX3BlbmRpbmdDbGVhclNpdGVEYXRhUmVwbGllcy5iZWdpbigpLT5rZXkp
OwogCiAgICAgLy8gVGVsbCB0aGUgcGx1Zy1pbiBwcm9jZXNzIG1hbmFnZXIgdG8gZm9yZ2V0IGFi
b3V0IHRoaXMgcGx1Zy1pbiBwcm9jZXNzIHByb3h5LiBUaGlzIG1heSBjYXVzZSB1cyB0byBiZSBk
ZWxldGVkLgogICAgIG1fcGx1Z2luUHJvY2Vzc01hbmFnZXItPnJlbW92ZVBsdWdpblByb2Nlc3NQ
cm94eSh0aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250
ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmNwcAppbmRleCAy
ZWNmZjlkNGIwNzcxOTRiMDU4NWEzZjFkOTQyMDY1ZWEyZjJiNTVjLi4yZjMzMzhmNWI5MWZiZTBj
YWQyNDI1MGY3NDA3MjYzNjg0YmU1NmQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNv
bnRleHQuY3BwCkBAIC04NzAsNyArODcwLDcgQEAgc3RhdGljIFBhc3NSZWZQdHI8TXV0YWJsZURp
Y3Rpb25hcnk+IGNyZWF0ZURpY3Rpb25hcnlGcm9tSGFzaE1hcChjb25zdCBIYXNoTWFwPFMKICAg
ICBSZWZQdHI8TXV0YWJsZURpY3Rpb25hcnk+IHJlc3VsdCA9IE11dGFibGVEaWN0aW9uYXJ5Ojpj
cmVhdGUoKTsKICAgICBIYXNoTWFwPFN0cmluZywgdWludDY0X3Q+Ojpjb25zdF9pdGVyYXRvciBl
bmQgPSBtYXAuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPFN0cmluZywgdWludDY0X3Q+Ojpjb25z
dF9pdGVyYXRvciBpdCA9IG1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHJl
c3VsdC0+c2V0KGl0LT5maXJzdCwgUmVmUHRyPFdlYlVJbnQ2ND4oV2ViVUludDY0OjpjcmVhdGUo
aXQtPnNlY29uZCkpLmdldCgpKTsKKyAgICAgICAgcmVzdWx0LT5zZXQoaXQtPmtleSwgUmVmUHRy
PFdlYlVJbnQ2ND4oV2ViVUludDY0OjpjcmVhdGUoaXQtPnZhbHVlKSkuZ2V0KCkpOwogICAgIAog
ICAgIHJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViSWNvbkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJY29u
RGF0YWJhc2UuY3BwCmluZGV4IDgwMTZjZmJkNmU3ZTFmNzY4YWE4ZDE2YzI1ZWNjN2Y2YjA3OTM1
ZmMuLmVmMzMyZmEyYWM2ZDg3ZDc1ZjM1Y2Y0MWZlOGYwYzgwNzliNWIxNjEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJY29uRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJY29uRGF0YWJhc2UuY3BwCkBAIC0yNTAsMTQgKzI1MCwx
NCBAQCB2b2lkIFdlYkljb25EYXRhYmFzZTo6ZGlkRmluaXNoVVJMSW1wb3J0KCkKICAgICBIYXNo
TWFwPHVpbnQ2NF90LCBTdHJpbmc+OjppdGVyYXRvciBlbmQgPSBtX3BlbmRpbmdMb2FkRGVjaXNp
b25VUkxNYXAuZW5kKCk7CiAgICAgCiAgICAgZm9yICg7IGkgIT0gZW5kOyArK2kpIHsKLSAgICAg
ICAgTE9HKEljb25EYXRhYmFzZSwgIldLMiBVSVByb2Nlc3MgcGVyZm9ybWluZyBkZWxheWVkIGNh
bGxiYWNrIG9uIGNhbGxiYWNrIElEICVpIGZvciBwYWdlIHVybCAlcyIsIChpbnQpaS0+Zmlyc3Qs
IGktPnNlY29uZC5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIEljb25Mb2FkRGVjaXNpb24gZGVj
aXNpb24gPSBtX2ljb25EYXRhYmFzZUltcGwtPnN5bmNocm9ub3VzTG9hZERlY2lzaW9uRm9ySWNv
blVSTChpLT5zZWNvbmQsIDApOworICAgICAgICBMT0coSWNvbkRhdGFiYXNlLCAiV0syIFVJUHJv
Y2VzcyBwZXJmb3JtaW5nIGRlbGF5ZWQgY2FsbGJhY2sgb24gY2FsbGJhY2sgSUQgJWkgZm9yIHBh
Z2UgdXJsICVzIiwgKGludClpLT5rZXksIGktPnZhbHVlLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAg
ICAgSWNvbkxvYWREZWNpc2lvbiBkZWNpc2lvbiA9IG1faWNvbkRhdGFiYXNlSW1wbC0+c3luY2hy
b25vdXNMb2FkRGVjaXNpb25Gb3JJY29uVVJMKGktPnZhbHVlLCAwKTsKIAogICAgICAgICAvLyBE
ZWNpc2lvbnMgc2hvdWxkIG5ldmVyIGJlIHVua25vd24gYWZ0ZXIgdGhlIGluaXRhbCBpbXBvcnQg
aXMgY29tcGxldGUKICAgICAgICAgQVNTRVJUKGRlY2lzaW9uICE9IEljb25Mb2FkVW5rbm93bik7
CiAKICAgICAgICAgLy8gRklYTUUgKE11bHRpLVdlYlByb2Nlc3MpOiBXZSBuZWVkIHRvIGtub3cg
d2hpY2ggY29ubmVjdGlvbiB0byBzZW5kIHRoaXMgbWVzc2FnZSB0by4KLSAgICAgICAgbV93ZWJD
b250ZXh0LT5zZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYkljb25EYXRhYmFzZVByb3h5
OjpSZWNlaXZlZEljb25Mb2FkRGVjaXNpb24oc3RhdGljX2Nhc3Q8aW50PihkZWNpc2lvbiksIGkt
PmZpcnN0KSk7CisgICAgICAgIG1fd2ViQ29udGV4dC0+c2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3Nh
Z2VzOjpXZWJJY29uRGF0YWJhc2VQcm94eTo6UmVjZWl2ZWRJY29uTG9hZERlY2lzaW9uKHN0YXRp
Y19jYXN0PGludD4oZGVjaXNpb24pLCBpLT5rZXkpKTsKICAgICB9CiAgICAgCiAgICAgbV9wZW5k
aW5nTG9hZERlY2lzaW9uVVJMTWFwLmNsZWFyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVyLmNwcAppbmRleCBkNzc2Mjg3ZTAxZDc4OTFhNTM2
Mzk2MGUyYjEzNjI0YTVjMzc3ZTFkLi5kMzQzMjRiNTQyODRmNDIyNDBmZGYxNTEwZTkzYzUzMWU3
NzQ0ZjM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViTGF5ZXJUcmVl
UmVuZGVyZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJMYXllclRyZWVS
ZW5kZXJlci5jcHAKQEAgLTE3Miw3ICsxNzIsNyBAQCB2b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVy
OjpzeW5jTGF5ZXJQYXJhbWV0ZXJzKGNvbnN0IFdlYkxheWVySW5mbyYgbGF5ZXJJbmZvKQogICAg
IFdlYkxheWVySUQgaWQgPSBsYXllckluZm8uaWQ7CiAgICAgZW5zdXJlTGF5ZXIoaWQpOwogICAg
IExheWVyTWFwOjppdGVyYXRvciBpdCA9IG1fbGF5ZXJzLmZpbmQoaWQpOwotICAgIEdyYXBoaWNz
TGF5ZXIqIGxheWVyID0gaXQtPnNlY29uZDsKKyAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IGl0
LT52YWx1ZTsKIAogICAgIGxheWVyLT5zZXROYW1lKGxheWVySW5mby5uYW1lKTsKIApAQCAtMzIz
LDcgKzMyMyw3IEBAIHZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmFzc2lnbkltYWdlVG9MYXll
cihHcmFwaGljc0xheWVyKiBsYXllciwgaW50NjRfdCBpbWFnCiAKICAgICBIYXNoTWFwPGludDY0
X3QsIFJlZlB0cjxUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlPiA+OjppdGVyYXRvciBpdCA9IG1f
ZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmZpbmQoaW1hZ2VJRCk7CiAgICAgQVNTRVJUKGl0ICE9
IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmVuZCgpKTsKLSAgICBsYXllci0+c2V0Q29udGVu
dHNUb01lZGlhKGl0LT5zZWNvbmQuZ2V0KCkpOworICAgIGxheWVyLT5zZXRDb250ZW50c1RvTWVk
aWEoaXQtPnZhbHVlLmdldCgpKTsKIH0KIAogdm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6Y29t
bWl0VGlsZU9wZXJhdGlvbnMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYlByb2Nlc3NQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vz
c1Byb3h5LmNwcAppbmRleCBlOGRmZDgxNjhjN2EyNzEyNjRhY2Y1YzcxZGQ5MDJjMGE3NDU1Yjg2
Li40YWIyNTQzMjhlNWQzNjU0ZjNjMWRjN2JjMTVlZmZlYzFlZTJkYTdjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcApAQCAtMjQ4LDkgKzI0OCw5IEBA
IGJvb2wgV2ViUHJvY2Vzc1Byb3h5OjpjaGVja1VSTFJlY2VpdmVkRnJvbVdlYlByb2Nlc3MoY29u
c3QgS1VSTCYgdXJsKQogICAgIC8vIEl0ZW1zIGluIGJhY2svZm9yd2FyZCBsaXN0IGhhdmUgYmVl
biBhbHJlYWR5IGNoZWNrZWQuCiAgICAgLy8gT25lIGNhc2Ugd2hlcmUgd2UgZG9uJ3QgaGF2ZSBz
YW5kYm94IGV4dGVuc2lvbnMgZm9yIGZpbGUgVVJMcyBpbiBiL2YgbGlzdCBpcyBpZiB0aGUgbGlz
dCBoYXMgYmVlbiByZWluc3RhdGVkIGFmdGVyIGEgY3Jhc2ggb3IgYSBicm93c2VyIHJlc3RhcnQu
CiAgICAgZm9yIChXZWJCYWNrRm9yd2FyZExpc3RJdGVtTWFwOjppdGVyYXRvciBpdGVyID0gbV9i
YWNrRm9yd2FyZExpc3RJdGVtTWFwLmJlZ2luKCksIGVuZCA9IG1fYmFja0ZvcndhcmRMaXN0SXRl
bU1hcC5lbmQoKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewotICAgICAgICBpZiAoS1VSTChLVVJM
KCksIGl0ZXItPnNlY29uZC0+dXJsKCkpLmZpbGVTeXN0ZW1QYXRoKCkgPT0gcGF0aCkKKyAgICAg
ICAgaWYgKEtVUkwoS1VSTCgpLCBpdGVyLT52YWx1ZS0+dXJsKCkpLmZpbGVTeXN0ZW1QYXRoKCkg
PT0gcGF0aCkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoS1VSTChLVVJM
KCksIGl0ZXItPnNlY29uZC0+b3JpZ2luYWxVUkwoKSkuZmlsZVN5c3RlbVBhdGgoKSA9PSBwYXRo
KQorICAgICAgICBpZiAoS1VSTChLVVJMKCksIGl0ZXItPnZhbHVlLT5vcmlnaW5hbFVSTCgpKS5m
aWxlU3lzdGVtUGF0aCgpID09IHBhdGgpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAKQEAgLTI3MywxNSArMjczLDE1IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5OjphZGRCYWNrRm9y
d2FyZEl0ZW0odWludDY0X3QgaXRlbUlELCBjb25zdCBTdHJpbmcmIG9yaWdpbmFsCiAKICAgICBX
ZWJCYWNrRm9yd2FyZExpc3RJdGVtTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9iYWNrRm9yd2Fy
ZExpc3RJdGVtTWFwLmFkZChpdGVtSUQsIDApOwogICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkg
ewotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IFdlYkJhY2tGb3J3YXJkTGlzdEl0
ZW06OmNyZWF0ZShvcmlnaW5hbFVSTCwgdXJsLCB0aXRsZSwgYmFja0ZvcndhcmREYXRhLmRhdGEo
KSwgYmFja0ZvcndhcmREYXRhLnNpemUoKSwgaXRlbUlEKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZSA9IFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW06OmNyZWF0ZShvcmlnaW5hbFVSTCwg
dXJsLCB0aXRsZSwgYmFja0ZvcndhcmREYXRhLmRhdGEoKSwgYmFja0ZvcndhcmREYXRhLnNpemUo
KSwgaXRlbUlEKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8vIFVwZGF0ZSBleGlz
dGluZyBpdGVtLgotICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLT5zZXRPcmlnaW5hbFVSTChv
cmlnaW5hbFVSTCk7Ci0gICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQtPnNldFVSTCh1cmwpOwot
ICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLT5zZXRUaXRsZSh0aXRsZSk7Ci0gICAgcmVzdWx0
Lml0ZXJhdG9yLT5zZWNvbmQtPnNldEJhY2tGb3J3YXJkRGF0YShiYWNrRm9yd2FyZERhdGEuZGF0
YSgpLCBiYWNrRm9yd2FyZERhdGEuc2l6ZSgpKTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVl
LT5zZXRPcmlnaW5hbFVSTChvcmlnaW5hbFVSTCk7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZS0+c2V0VVJMKHVybCk7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+c2V0VGl0bGUodGl0
bGUpOworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPnNldEJhY2tGb3J3YXJkRGF0YShiYWNr
Rm9yd2FyZERhdGEuZGF0YSgpLCBiYWNrRm9yd2FyZERhdGEuc2l6ZSgpKTsKIH0KIAogI2lmIEVO
QUJMRShQTFVHSU5fUFJPQ0VTUykKQEAgLTQ3Miw3ICs0NzIsNyBAQCBzaXplX3QgV2ViUHJvY2Vz
c1Byb3h5OjpmcmFtZUNvdW50SW5QYWdlKFdlYlBhZ2VQcm94eSogcGFnZSkgY29uc3QKIHsKICAg
ICBzaXplX3QgcmVzdWx0ID0gMDsKICAgICBmb3IgKEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxX
ZWJGcmFtZVByb3h5PiA+Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gbV9mcmFtZU1hcC5iZWdpbigp
OyBpdGVyICE9IG1fZnJhbWVNYXAuZW5kKCk7ICsraXRlcikgewotICAgICAgICBpZiAoaXRlci0+
c2Vjb25kLT5wYWdlKCkgPT0gcGFnZSkKKyAgICAgICAgaWYgKGl0ZXItPnZhbHVlLT5wYWdlKCkg
PT0gcGFnZSkKICAgICAgICAgICAgICsrcmVzdWx0OwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVyQmFja2luZ1N0
b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXllckJhY2tpbmdTdG9yZS5j
cHAKaW5kZXggM2Y4YThjODkyMjFhZDg0OTIyYmM1MzcyNGEyN2ZiZGM2ODI5YTMyNy4uMGVkZDRj
ZjIwZDc3NDE2MjU0MmI0ZGJkN2MxODFlMjZmMTM4YmZiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL3F0L0xheWVyQmFja2luZ1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJCYWNraW5nU3RvcmUuY3BwCkBAIC04MCwxNCArODAsMTQg
QEAgdm9pZCBMYXllckJhY2tpbmdTdG9yZTo6dXBkYXRlVGlsZShpbnQgaWQsIGNvbnN0IEludFJl
Y3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFIKIHsKICAgICBIYXNoTWFwPGludCwgTGF5ZXJCYWNr
aW5nU3RvcmVUaWxlPjo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmZpbmQoaWQpOwogICAgIEFTU0VS
VChpdCAhPSBtX3RpbGVzLmVuZCgpKTsKLSAgICBpdC0+c2Vjb25kLnNldEJhY2tCdWZmZXIodGFy
Z2V0UmVjdCwgc291cmNlUmVjdCwgYmFja0J1ZmZlcik7CisgICAgaXQtPnZhbHVlLnNldEJhY2tC
dWZmZXIodGFyZ2V0UmVjdCwgc291cmNlUmVjdCwgYmFja0J1ZmZlcik7CiB9CiAKIFBhc3NSZWZQ
dHI8Qml0bWFwVGV4dHVyZT4gTGF5ZXJCYWNraW5nU3RvcmU6OnRleHR1cmUoKSBjb25zdAogewog
ICAgIEhhc2hNYXA8aW50LCBMYXllckJhY2tpbmdTdG9yZVRpbGU+Ojpjb25zdF9pdGVyYXRvciBl
bmQgPSBtX3RpbGVzLmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDxpbnQsIExheWVyQmFja2luZ1N0
b3JlVGlsZT46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKLSAgICAgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IHRleHR1cmUgPSBpdC0+c2Vj
b25kLnRleHR1cmUoKTsKKyAgICAgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IHRleHR1cmUgPSBp
dC0+dmFsdWUudGV4dHVyZSgpOwogICAgICAgICBpZiAodGV4dHVyZSkKICAgICAgICAgICAgIHJl
dHVybiB0ZXh0dXJlOwogICAgIH0KQEAgLTEwMyw3ICsxMDMsNyBAQCB2b2lkIExheWVyQmFja2lu
Z1N0b3JlOjpwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVy
LCBjb25zdAogICAgIEhhc2hNYXA8aW50LCBMYXllckJhY2tpbmdTdG9yZVRpbGU+OjppdGVyYXRv
ciBlbmQgPSBtX3RpbGVzLmVuZCgpOwogICAgIEZsb2F0UmVjdCBjb3ZlcmVkUmVjdDsKICAgICBm
b3IgKEhhc2hNYXA8aW50LCBMYXllckJhY2tpbmdTdG9yZVRpbGU+OjppdGVyYXRvciBpdCA9IG1f
dGlsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIExheWVyQmFja2luZ1N0
b3JlVGlsZSYgdGlsZSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIExheWVyQmFja2luZ1N0b3JlVGls
ZSYgdGlsZSA9IGl0LT52YWx1ZTsKICAgICAgICAgaWYgKCF0aWxlLnRleHR1cmUoKSkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCkBAIC0xMzQsNyArMTM0LDcgQEAgdm9pZCBMYXllckJhY2tpbmdT
dG9yZTo6Y29tbWl0VGlsZU9wZXJhdGlvbnMoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlcikK
IAogICAgIEhhc2hNYXA8aW50LCBMYXllckJhY2tpbmdTdG9yZVRpbGU+OjppdGVyYXRvciB0aWxl
c0VuZCA9IG1fdGlsZXMuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPGludCwgTGF5ZXJCYWNraW5n
U3RvcmVUaWxlPjo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IHRpbGVzRW5k
OyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLnN3YXBCdWZmZXJzKHRleHR1cmVNYXBwZXIpOwor
ICAgICAgICBpdC0+dmFsdWUuc3dhcEJ1ZmZlcnModGV4dHVyZU1hcHBlcik7CiB9CiAKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvR2VvbG9jYXRpb24vR2VvbG9jYXRp
b25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9HZW9sb2NhdGlvbi9HZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5jcHAKaW5k
ZXggZDZiZGI4ZTE1MzE0NTBiMTJhYmM4MmQ4NmIyZmMwMTNmMTM1NDNiNy4uZmNhNzFhMWQwOTVm
ZWVmYWJhMDVhNmE3MjVmZGI0MzYzNTgxNGI2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9HZW9sb2NhdGlvbi9HZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdl
ci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9HZW9sb2NhdGlvbi9HZW9sb2Nh
dGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5jcHAKQEAgLTc0LDcgKzc0LDcgQEAgdm9pZCBH
ZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlcjo6Y2FuY2VsUmVxdWVzdEZvckdlb2xv
Y2F0aW9uKEdlb2xvY2F0aW8KICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9nZW9sb2NhdGlvblRv
SURNYXAucmVtb3ZlKGl0KTsKLSAgICBtX2lkVG9HZW9sb2NhdGlvbk1hcC5yZW1vdmUoaXQtPnNl
Y29uZCk7CisgICAgbV9pZFRvR2VvbG9jYXRpb25NYXAucmVtb3ZlKGl0LT52YWx1ZSk7CiB9CiAK
IHZvaWQgR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXI6OmRpZFJlY2VpdmVHZW9s
b2NhdGlvblBlcm1pc3Npb25EZWNpc2lvbih1aW50NjRfdCBnZW9sb2NhdGlvbklELCBib29sIGFs
bG93ZWQpCkBAIC04Myw3ICs4Myw3IEBAIHZvaWQgR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVz
dE1hbmFnZXI6OmRpZFJlY2VpdmVHZW9sb2NhdGlvblBlcm1pc3Npb25EZWNpc2lvCiAgICAgaWYg
KGl0ID09IG1faWRUb0dlb2xvY2F0aW9uTWFwLmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBHZW9sb2NhdGlvbiogZ2VvbG9jYXRpb24gPSBpdC0+c2Vjb25kOworICAgIEdlb2xvY2F0aW9u
KiBnZW9sb2NhdGlvbiA9IGl0LT52YWx1ZTsKICAgICBnZW9sb2NhdGlvbi0+c2V0SXNBbGxvd2Vk
KGFsbG93ZWQpOwogCiAgICAgbV9pZFRvR2VvbG9jYXRpb25NYXAucmVtb3ZlKGl0KTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVj
dGVkQnVuZGxlTm9kZUhhbmRsZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGUuY3BwCmluZGV4IDBjNDI5NWU2
MTJjZGQ3NmYwM2E1MzEzZDQ1ZTZjZWMxZmIxZTg1OTYuLjc3ZTAzMDkzZDVmZDBkOTY0MjRkMzE1
NGY3N2M5NGQ0MTk0YjE2ZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxlTm9kZUhhbmRsZS5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVO
b2RlSGFuZGxlLmNwcApAQCAtNjksMTAgKzY5LDEwIEBAIFBhc3NSZWZQdHI8SW5qZWN0ZWRCdW5k
bGVOb2RlSGFuZGxlPiBJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU6OmdldE9yQ3JlYXRlKE5vZGUq
CiAKICAgICBET01IYW5kbGVDYWNoZTo6QWRkUmVzdWx0IHJlc3VsdCA9IGRvbUhhbmRsZUNhY2hl
KCkuYWRkKG5vZGUsIDApOwogICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJl
dHVybiBQYXNzUmVmUHRyPEluamVjdGVkQnVuZGxlTm9kZUhhbmRsZT4ocmVzdWx0Lml0ZXJhdG9y
LT5zZWNvbmQpOworICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxJbmplY3RlZEJ1bmRsZU5vZGVI
YW5kbGU+KHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwogCiAgICAgUmVmUHRyPEluamVjdGVkQnVu
ZGxlTm9kZUhhbmRsZT4gbm9kZUhhbmRsZSA9IEluamVjdGVkQnVuZGxlTm9kZUhhbmRsZTo6Y3Jl
YXRlKG5vZGUpOwotICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gbm9kZUhhbmRsZS5nZXQo
KTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gbm9kZUhhbmRsZS5nZXQoKTsKICAgICBy
ZXR1cm4gbm9kZUhhbmRsZS5yZWxlYXNlKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxlUmFuZ2VIYW5k
bGUuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5q
ZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5jcHAKaW5kZXggMWI3NGYwMTI0MDA4ZGIzYzA3ODI4ZWE2
ZjZkMmMwNWFjMDU5YzMwNi4uZDYwMDBhYjkxMzMyOWNkNTdkYWIzZTNmZDY0MDE0Yzc2ZTk1MmRj
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9E
T00vSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5jcHAK
QEAgLTQ4LDEwICs0OCwxMCBAQCBQYXNzUmVmUHRyPEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU+
IEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OmdldE9yQ3JlYXRlKFJhbgogCiAgICAgRE9NSGFu
ZGxlQ2FjaGU6OkFkZFJlc3VsdCByZXN1bHQgPSBkb21IYW5kbGVDYWNoZSgpLmFkZChyYW5nZSwg
MCk7CiAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgcmV0dXJuIFBhc3NSZWZQ
dHI8SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZT4ocmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOwor
ICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlPihyZXN1
bHQuaXRlcmF0b3ItPnZhbHVlKTsKIAogICAgIFJlZlB0cjxJbmplY3RlZEJ1bmRsZVJhbmdlSGFu
ZGxlPiByYW5nZUhhbmRsZSA9IEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OmNyZWF0ZShyYW5n
ZSk7Ci0gICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSByYW5nZUhhbmRsZS5nZXQoKTsKKyAg
ICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gcmFuZ2VIYW5kbGUuZ2V0KCk7CiAgICAgcmV0dXJu
IHJhbmdlSGFuZGxlLnJlbGVhc2UoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9Ob3RpZmljYXRpb25zL1dlYk5vdGlmaWNhdGlvbk1hbmFnZXIuY3BwIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Ob3RpZmljYXRpb25zL1dlYk5vdGlmaWNhdGlvbk1hbmFn
ZXIuY3BwCmluZGV4IDI2ZTU0MDc0NGJkNTI3NGM5YjZkYWNlZWE1YmY5NGZhM2FlMDQ5NzMuLmI4
ZTNhNmVkNjY2MmYxZjEwZThiY2MwZDc4ODUzODJmZmRlZmQwYjcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvTm90aWZpY2F0aW9ucy9XZWJOb3RpZmljYXRpb25NYW5hZ2Vy
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05vdGlmaWNhdGlvbnMvV2ViTm90
aWZpY2F0aW9uTWFuYWdlci5jcHAKQEAgLTk5LDcgKzk5LDcgQEAgTm90aWZpY2F0aW9uQ2xpZW50
OjpQZXJtaXNzaW9uIFdlYk5vdGlmaWNhdGlvbk1hbmFnZXI6OnBvbGljeUZvck9yaWdpbihXZWJD
b3JlOjoKICAgICBBU1NFUlQoIW9yaWdpbi0+aXNVbmlxdWUoKSk7CiAgICAgSGFzaE1hcDxTdHJp
bmcsIGJvb2w+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGVybWlzc2lvbnNNYXAuZmluZChvcmln
aW4tPnRvUmF3U3RyaW5nKCkpOwogICAgIGlmIChpdCAhPSBtX3Blcm1pc3Npb25zTWFwLmVuZCgp
KQotICAgICAgICByZXR1cm4gaXQtPnNlY29uZCA/IE5vdGlmaWNhdGlvbkNsaWVudDo6UGVybWlz
c2lvbkFsbG93ZWQgOiBOb3RpZmljYXRpb25DbGllbnQ6OlBlcm1pc3Npb25EZW5pZWQ7CisgICAg
ICAgIHJldHVybiBpdC0+dmFsdWUgPyBOb3RpZmljYXRpb25DbGllbnQ6OlBlcm1pc3Npb25BbGxv
d2VkIDogTm90aWZpY2F0aW9uQ2xpZW50OjpQZXJtaXNzaW9uRGVuaWVkOwogI2VuZGlmCiAgICAg
CiAgICAgcmV0dXJuIE5vdGlmaWNhdGlvbkNsaWVudDo6UGVybWlzc2lvbk5vdEFsbG93ZWQ7CkBA
IC0xMTYsNyArMTE2LDcgQEAgYm9vbCBXZWJOb3RpZmljYXRpb25NYW5hZ2VyOjpzaG93KE5vdGlm
aWNhdGlvbiogbm90aWZpY2F0aW9uLCBXZWJQYWdlKiBwYWdlKQogICAgIG1fbm90aWZpY2F0aW9u
SURNYXAuc2V0KG5vdGlmaWNhdGlvbklELCBub3RpZmljYXRpb24pOwogICAgIAogICAgIE5vdGlm
aWNhdGlvbkNvbnRleHRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9ub3RpZmljYXRpb25Db250ZXh0TWFw
LmFkZChub3RpZmljYXRpb24tPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgVmVjdG9yPHVpbnQ2
NF90PigpKS5pdGVyYXRvcjsKLSAgICBpdC0+c2Vjb25kLmFwcGVuZChub3RpZmljYXRpb25JRCk7
CisgICAgaXQtPnZhbHVlLmFwcGVuZChub3RpZmljYXRpb25JRCk7CiAgICAgCiAgICAgbV9wcm9j
ZXNzLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2hvd05vdGlm
aWNhdGlvbihub3RpZmljYXRpb24tPnRpdGxlKCksIG5vdGlmaWNhdGlvbi0+Ym9keSgpLCBub3Rp
ZmljYXRpb24tPmljb25VUkwoKS5zdHJpbmcoKSwgbm90aWZpY2F0aW9uLT5yZXBsYWNlSWQoKSwg
bm90aWZpY2F0aW9uLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnNlY3VyaXR5T3JpZ2luKCkt
PnRvU3RyaW5nKCksIG5vdGlmaWNhdGlvbklEKSwgcGFnZS0+cGFnZUlEKCkpOwogICAgIHJldHVy
biB0cnVlOwpAQCAtMTQ2LDcgKzE0Niw3IEBAIHZvaWQgV2ViTm90aWZpY2F0aW9uTWFuYWdlcjo6
Y2xlYXJOb3RpZmljYXRpb25zKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqCiAgICAg
aWYgKGl0ID09IG1fbm90aWZpY2F0aW9uQ29udGV4dE1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJu
OwogICAgIAotICAgIFZlY3Rvcjx1aW50NjRfdD4mIG5vdGlmaWNhdGlvbklEcyA9IGl0LT5zZWNv
bmQ7CisgICAgVmVjdG9yPHVpbnQ2NF90PiYgbm90aWZpY2F0aW9uSURzID0gaXQtPnZhbHVlOwog
ICAgIG1fcHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJOb3RpZmljYXRp
b25NYW5hZ2VyUHJveHk6OkNsZWFyTm90aWZpY2F0aW9ucyhub3RpZmljYXRpb25JRHMpLCBwYWdl
LT5wYWdlSUQoKSk7CiAgICAgc2l6ZV90IGNvdW50ID0gbm90aWZpY2F0aW9uSURzLnNpemUoKTsK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKQEAgLTIyOCwxMCArMjI4
LDEwIEBAIHZvaWQgV2ViTm90aWZpY2F0aW9uTWFuYWdlcjo6cmVtb3ZlTm90aWZpY2F0aW9uRnJv
bUNvbnRleHRNYXAodWludDY0X3Qgbm90aWZpY2F0CiAgICAgLy8gVGhpcyBpcyBhIGhlbHBlciBm
dW5jdGlvbiBmb3IgbWFuYWdpbmcgdGhlIGhhc2ggbWFwcy4KICAgICBOb3RpZmljYXRpb25Db250
ZXh0TWFwOjppdGVyYXRvciBpdCA9IG1fbm90aWZpY2F0aW9uQ29udGV4dE1hcC5maW5kKG5vdGlm
aWNhdGlvbi0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKICAgICBBU1NFUlQoaXQgIT0gbV9u
b3RpZmljYXRpb25Db250ZXh0TWFwLmVuZCgpKTsKLSAgICBzaXplX3QgaW5kZXggPSBpdC0+c2Vj
b25kLmZpbmQobm90aWZpY2F0aW9uSUQpOworICAgIHNpemVfdCBpbmRleCA9IGl0LT52YWx1ZS5m
aW5kKG5vdGlmaWNhdGlvbklEKTsKICAgICBBU1NFUlQoaW5kZXggIT0gbm90Rm91bmQpOwotICAg
IGl0LT5zZWNvbmQucmVtb3ZlKGluZGV4KTsKLSAgICBpZiAoaXQtPnNlY29uZC5pc0VtcHR5KCkp
CisgICAgaXQtPnZhbHVlLnJlbW92ZShpbmRleCk7CisgICAgaWYgKGl0LT52YWx1ZS5pc0VtcHR5
KCkpCiAgICAgICAgIG1fbm90aWZpY2F0aW9uQ29udGV4dE1hcC5yZW1vdmUoaXQpOwogfQogI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2Nh
cGUvTlBSdW50aW1lT2JqZWN0TWFwLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1
Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3BwCmluZGV4IDAxZTczZjk1ZmViYzZj
ODY3ZDBmNDBmMDAxMjlkMTE4ODQzMjBjYzUuLmI4NGZiMjY1ZjI4YmM5M2QwNTg4MzU3NzlmODE2
ZTU4MTllZmQxMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lu
cy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3BwCkBAIC0yMTEs
NyArMjExLDcgQEAgdm9pZCBOUFJ1bnRpbWVPYmplY3RNYXA6OmludmFsaWRhdGUoKQogICAgIFZl
Y3RvcjxOUE9iamVjdCo+IG9iamVjdHM7CiAKICAgICBmb3IgKEhhc2hNYXA8TlBPYmplY3QqLCBK
U0M6OldlYWs8SlNOUE9iamVjdD4gPjo6aXRlcmF0b3IgcHRyID0gbV9qc05QT2JqZWN0cy5iZWdp
bigpLCBlbmQgPSBtX2pzTlBPYmplY3RzLmVuZCgpOyBwdHIgIT0gZW5kOyArK3B0cikKLSAgICAg
ICAgb2JqZWN0cy5hcHBlbmQocHRyLT5zZWNvbmQtPmxlYWtOUE9iamVjdCgpKTsKKyAgICAgICAg
b2JqZWN0cy5hcHBlbmQocHRyLT52YWx1ZS0+bGVha05QT2JqZWN0KCkpOwogCiAgICAgbV9qc05Q
T2JqZWN0cy5jbGVhcigpOwogCkBAIC0yOTIsOCArMjkyLDggQEAgdm9pZCBOUFJ1bnRpbWVPYmpl
Y3RNYXA6OmZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiBj
b250ZXgKIHsKICAgICBIYXNoTWFwPE5QT2JqZWN0KiwgSlNDOjpXZWFrPEpTTlBPYmplY3Q+ID46
Oml0ZXJhdG9yIGZvdW5kID0gbV9qc05QT2JqZWN0cy5maW5kKHN0YXRpY19jYXN0PE5QT2JqZWN0
Kj4oY29udGV4dCkpOwogICAgIEFTU0VSVChmb3VuZCAhPSBtX2pzTlBPYmplY3RzLmVuZCgpKTsK
LSAgICBBU1NFUlRfVU5VU0VEKGhhbmRsZSwgYXNPYmplY3QoaGFuZGxlLmdldCgpKSA9PSBmb3Vu
ZC0+c2Vjb25kKTsKLSAgICBKU05QT2JqZWN0KiBvYmplY3QgPSBmb3VuZC0+c2Vjb25kLmdldCgp
OworICAgIEFTU0VSVF9VTlVTRUQoaGFuZGxlLCBhc09iamVjdChoYW5kbGUuZ2V0KCkpID09IGZv
dW5kLT52YWx1ZSk7CisgICAgSlNOUE9iamVjdCogb2JqZWN0ID0gZm91bmQtPnZhbHVlLmdldCgp
OwogICAgIG1fanNOUE9iamVjdHMucmVtb3ZlKGZvdW5kKTsKICAgICBhZGRUb0ludmFsaWRhdGlv
blF1ZXVlKG9iamVjdC0+bGVha05QT2JqZWN0KCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbi5j
cHAKaW5kZXggNjIxMDE5NzIzOTg5MmM1MjhhMDlmZjA3YjViZjJhOWQ1MmFmYzljNi4uMjBhY2Qx
ZGU5OWVjMTlkNTlkY2ZiMzAwYWUwMTBlZmIwMzIxYTQ1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVn
aW4uY3BwCkBAIC0xOTAsOCArMTkwLDggQEAgTlBFcnJvciBOZXRzY2FwZVBsdWdpbjo6ZGVzdHJv
eVN0cmVhbShOUFN0cmVhbSogc3RyZWFtLCBOUFJlYXNvbiByZWFzb24pCiAgICAgTmV0c2NhcGVQ
bHVnaW5TdHJlYW0qIHBsdWdpblN0cmVhbSA9IDA7CiAKICAgICBmb3IgKFN0cmVhbXNNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbV9zdHJlYW1zLmJlZ2luKCksIGVuZCA9IG1fc3RyZWFtcy5lbmQo
KTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kLT5ucFN0cmVhbSgp
ID09IHN0cmVhbSkgewotICAgICAgICAgICAgcGx1Z2luU3RyZWFtID0gaXQtPnNlY29uZC5nZXQo
KTsKKyAgICAgICAgaWYgKGl0LT52YWx1ZS0+bnBTdHJlYW0oKSA9PSBzdHJlYW0pIHsKKyAgICAg
ICAgICAgIHBsdWdpblN0cmVhbSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgfQpAQCAtMzc4LDcgKzM3OCw3IEBAIHZvaWQgTmV0c2NhcGVQbHVn
aW46OnVuc2NoZWR1bGVUaW1lcih1bnNpZ25lZCB0aW1lcklEKQogICAgIGlmIChpdCA9PSBtX3Rp
bWVycy5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgT3duUHRyPFRpbWVyPiB0aW1lciA9
IGFkb3B0UHRyKGl0LT5zZWNvbmQpOworICAgIE93blB0cjxUaW1lcj4gdGltZXIgPSBhZG9wdFB0
cihpdC0+dmFsdWUpOwogICAgIG1fdGltZXJzLnJlbW92ZShpdCk7CiAKICAgICB0aW1lci0+c3Rv
cCgpOwpAQCAtNzEzLDggKzcxMyw4IEBAIHZvaWQgTmV0c2NhcGVQbHVnaW46OmZyYW1lRGlkRmlu
aXNoTG9hZGluZyh1aW50NjRfdCByZXF1ZXN0SUQpCiAgICAgaWYgKGl0ID09IG1fcGVuZGluZ1VS
TE5vdGlmaWNhdGlvbnMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFN0cmluZyB1cmwg
PSBpdC0+c2Vjb25kLmZpcnN0OwotICAgIHZvaWQqIG5vdGlmaWNhdGlvbkRhdGEgPSBpdC0+c2Vj
b25kLnNlY29uZDsKKyAgICBTdHJpbmcgdXJsID0gaXQtPnZhbHVlLmZpcnN0OworICAgIHZvaWQq
IG5vdGlmaWNhdGlvbkRhdGEgPSBpdC0+dmFsdWUuc2Vjb25kOwogCiAgICAgbV9wZW5kaW5nVVJM
Tm90aWZpY2F0aW9ucy5yZW1vdmUoaXQpOwogICAgIApAQCAtNzI5LDggKzcyOSw4IEBAIHZvaWQg
TmV0c2NhcGVQbHVnaW46OmZyYW1lRGlkRmFpbCh1aW50NjRfdCByZXF1ZXN0SUQsIGJvb2wgd2Fz
Q2FuY2VsbGVkKQogICAgIGlmIChpdCA9PSBtX3BlbmRpbmdVUkxOb3RpZmljYXRpb25zLmVuZCgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBTdHJpbmcgdXJsID0gaXQtPnNlY29uZC5maXJzdDsK
LSAgICB2b2lkKiBub3RpZmljYXRpb25EYXRhID0gaXQtPnNlY29uZC5zZWNvbmQ7CisgICAgU3Ry
aW5nIHVybCA9IGl0LT52YWx1ZS5maXJzdDsKKyAgICB2b2lkKiBub3RpZmljYXRpb25EYXRhID0g
aXQtPnZhbHVlLnNlY29uZDsKIAogICAgIG1fcGVuZGluZ1VSTE5vdGlmaWNhdGlvbnMucmVtb3Zl
KGl0KTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lu
cy9QbHVnaW5WaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVn
aW5WaWV3LmNwcAppbmRleCBkMzQ2NTY4YjdkMzE0OGQwMzI1ZDFmMWFmZGY4MTRlNjg2NzFiYWRl
Li5iYzA3NDliZDZiY2YyNjIyMjBmYTJlOTE5OWJiMjBmZWRhZmZmOTE3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCkBAIC0xNzAsOSAr
MTcwLDkgQEAgc3RhdGljIFN0cmluZyBidWlsZEhUVFBIZWFkZXJzKGNvbnN0IFJlc291cmNlUmVz
cG9uc2UmIHJlc3BvbnNlLCBsb25nIGxvbmcmIGV4cGUKICAgICAKICAgICBIVFRQSGVhZGVyTWFw
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSByZXNwb25zZS5odHRwSGVhZGVyRmllbGRzKCkuZW5kKCk7
CiAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHJlc3BvbnNlLmh0
dHBIZWFkZXJGaWVsZHMoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQoaXQtPmZpcnN0LmNoYXJhY3RlcnMoKSwgaXQtPmZpcnN0Lmxlbmd0
aCgpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPmtleS5jaGFyYWN0ZXJzKCks
IGl0LT5rZXkubGVuZ3RoKCkpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChzZXBhcmF0
b3IuY2hhcmFjdGVycygpLCBzZXBhcmF0b3IubGVuZ3RoKCkpOwotICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZChpdC0+c2Vjb25kLmNoYXJhY3RlcnMoKSwgaXQtPnNlY29uZC5sZW5ndGgoKSk7
CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT52YWx1ZS5jaGFyYWN0ZXJzKCksIGl0
LT52YWx1ZS5sZW5ndGgoKSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwog
ICAgIH0KICAgICAKQEAgLTI4Miw3ICsyODIsNyBAQCBQbHVnaW5WaWV3Ojp+UGx1Z2luVmlldygp
CiAKICAgICAvLyBDYW5jZWwgYWxsIHBlbmRpbmcgZnJhbWUgbG9hZHMuCiAgICAgZm9yIChGcmFt
ZUxvYWRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wZW5kaW5nRnJhbWVMb2Fkcy5iZWdpbigpLCBlbmQg
PSBtX3BlbmRpbmdGcmFtZUxvYWRzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0
LT5maXJzdC0+c2V0TG9hZExpc3RlbmVyKDApOworICAgICAgICBpdC0+a2V5LT5zZXRMb2FkTGlz
dGVuZXIoMCk7CiAKICAgICBpZiAobV9wbHVnaW4gJiYgbV9pc0luaXRpYWxpemVkKSB7CiAgICAg
ICAgIG1faXNCZWluZ0Rlc3Ryb3llZCA9IHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuY3BwIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmNwcApp
bmRleCBkNmNlOWNjZjMzYTJlODI5YWUyZGY1M2E1ZmY3MmU0NmQ3MzhkMTk0Li42N2U4ZjI0YzEy
Mjc2ZGY0YzUyOWZiNzkzODEwNWU3YTRjN2U0YzRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5j
cHAKQEAgLTUzLDcgKzUzLDcgQEAgV2ViR3JhcGhpY3NMYXllciogV2ViR3JhcGhpY3NMYXllcjo6
bGF5ZXJCeUlEKFdlYktpdDo6V2ViTGF5ZXJJRCBpZCkKICAgICBIYXNoTWFwPFdlYkxheWVySUQs
IFdlYkdyYXBoaWNzTGF5ZXIqPjo6aXRlcmF0b3IgaXQgPSB0YWJsZS5maW5kKGlkKTsKICAgICBp
ZiAoaXQgPT0gdGFibGUuZW5kKCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBpdC0+
c2Vjb25kOworICAgIHJldHVybiBpdC0+dmFsdWU7CiB9CiAKIHN0YXRpYyBXZWJMYXllcklEIHRv
V2ViTGF5ZXJJRChHcmFwaGljc0xheWVyKiBsYXllcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9yd2FyZExpc3RQcm94eS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFja0ZvcndhcmRMaXN0UHJveHkuY3Bw
CmluZGV4IGNiZGMwNjZkYTVjMGQ1Yzg4ZDM4ZDIwMTc5ZTg0ZjE4YTY4NjNmMmMuLmUwZTE4Zjcz
ZTNlYjE1NzMyM2Q3YzdiZjhjZGNlZDI3MzYxZjBjODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9yd2FyZExpc3RQcm94eS5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFByb3h5
LmNwcApAQCAtMTI4LDcgKzEyOCw3IEBAIHZvaWQgV2ViQmFja0ZvcndhcmRMaXN0UHJveHk6OnJl
bW92ZUl0ZW0odWludDY0X3QgaXRlbUlEKQogICAgIElEVG9IaXN0b3J5SXRlbU1hcDo6aXRlcmF0
b3IgaXQgPSBpZFRvSGlzdG9yeUl0ZW1NYXAoKS5maW5kKGl0ZW1JRCk7CiAgICAgaWYgKGl0ID09
IGlkVG9IaXN0b3J5SXRlbU1hcCgpLmVuZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgaGlzdG9y
eUl0ZW1Ub0lETWFwKCkucmVtb3ZlKGl0LT5zZWNvbmQpOworICAgIGhpc3RvcnlJdGVtVG9JRE1h
cCgpLnJlbW92ZShpdC0+dmFsdWUpOwogICAgIGlkVG9IaXN0b3J5SXRlbU1hcCgpLnJlbW92ZShp
dCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9t
YWMvV2ViUGFnZU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMv
V2ViUGFnZU1hYy5tbQppbmRleCBhOGQzYzViYjE5NjBjMjk0MGYyMjMzNmFjMDJjYWU3ZGFlNTRh
ZDAzLi42MDMxMTUwZmY0NDA0NmQyY2JiYTIxM2QyMDMxNWIxMGZmOGFkOTU4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCkBA
IC0xMTYsNyArMTE2LDcgQEAgc3RhdGljIFN0cmluZyBjb21tYW5kTmFtZUZvclNlbGVjdG9yTmFt
ZShjb25zdCBTdHJpbmcmIHNlbGVjdG9yTmFtZSkKICAgICBzdGF0aWMgY29uc3QgU2VsZWN0b3JO
YW1lTWFwKiBleGNlcHRpb25NYXAgPSBjcmVhdGVTZWxlY3RvckV4Y2VwdGlvbk1hcCgpOwogICAg
IFNlbGVjdG9yTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBleGNlcHRpb25NYXAtPmZpbmQo
c2VsZWN0b3JOYW1lKTsKICAgICBpZiAoaXQgIT0gZXhjZXB0aW9uTWFwLT5lbmQoKSkKLSAgICAg
ICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBpdC0+dmFsdWU7CiAKICAgICAv
LyBSZW1vdmUgdGhlIHRyYWlsaW5nIGNvbG9uLgogICAgIC8vIE5vIG5lZWQgdG8gY2FwaXRhbGl6
ZSB0aGUgY29tbWFuZCBuYW1lIHNpbmNlIEVkaXRvciBjb21tYW5kIG5hbWVzIGFyZSBub3QgY2Fz
ZSBzZW5zaXRpdmUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9xdC9MYXllclRyZWVIb3N0UXQuY3BwCmluZGV4IGNhNzRmMTE0MGIyYjU4NTlmNzUxOTE3
Zjg4YWM5MDI1N2NjY2E0NDMuLjYwOGM1NGIzMjQ4MTE5YTYzYWVmMWMyZTcyZTVjM2E2M2YyODc3
YTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXll
clRyZWVIb3N0UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9x
dC9MYXllclRyZWVIb3N0UXQuY3BwCkBAIC0zMjUsNyArMzI1LDcgQEAgaW50NjRfdCBMYXllclRy
ZWVIb3N0UXQ6OmFkb3B0SW1hZ2VCYWNraW5nU3RvcmUoSW1hZ2UqIGltYWdlKQogICAgIEhhc2hN
YXA8aW50NjRfdCwgaW50Pjo6aXRlcmF0b3IgaXQgPSBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdl
UmVmQ291bnRzLmZpbmQoa2V5KTsKIAogICAgIGlmIChpdCAhPSBtX2RpcmVjdGx5Q29tcG9zaXRl
ZEltYWdlUmVmQ291bnRzLmVuZCgpKSB7Ci0gICAgICAgICsrKGl0LT5zZWNvbmQpOworICAgICAg
ICArKyhpdC0+dmFsdWUpOwogICAgICAgICByZXR1cm4ga2V5OwogICAgIH0KIApAQCAtMzUwLDkg
KzM1MCw5IEBAIHZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpyZWxlYXNlSW1hZ2VCYWNraW5nU3RvcmUo
aW50NjRfdCBrZXkpCiAgICAgaWYgKGl0ID09IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZD
b3VudHMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGl0LT5zZWNvbmQtLTsKKyAgICBp
dC0+dmFsdWUtLTsKIAotICAgIGlmIChpdC0+c2Vjb25kKQorICAgIGlmIChpdC0+dmFsdWUpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMu
cmVtb3ZlKGl0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJv
Y2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCmluZGV4
IDJkZmNkZTA4M2I5YzE0YjFjNDExMjYzYjY2MjMwMzg5ZmUxYmYzMzEuLjkyMTFjNTE0NmY5MDY4
YmUzOTdhYTUyZTJmYTA0YWQ5ZjYzMTk2YjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQcm9jZXNzLmNwcApAQCAtMzE0LDcgKzMxNCw3IEBAIHZvaWQgV2ViUHJvY2Vzczo6dmlzaXRl
ZExpbmtTdGF0ZUNoYW5nZWQoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkxpbmtIYXNoPiYgbGlua0hh
CiAgICAgICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxXZWJQYWdlR3JvdXBQcm94eT4gPjo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BhZ2VHcm91cE1hcC5iZWdpbigpOwogICAgICAgICBIYXNo
TWFwPHVpbnQ2NF90LCBSZWZQdHI8V2ViUGFnZUdyb3VwUHJveHk+ID46OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IG1fcGFnZUdyb3VwTWFwLmVuZCgpOwogICAgICAgICBmb3IgKDsgaXQgIT0gZW5kOyAr
K2l0KQotICAgICAgICAgICAgUGFnZTo6dmlzaXRlZFN0YXRlQ2hhbmdlZChQYWdlR3JvdXA6OnBh
Z2VHcm91cChpdC0+c2Vjb25kLT5pZGVudGlmaWVyKCkpLCBsaW5rSGFzaGVzW2ldKTsKKyAgICAg
ICAgICAgIFBhZ2U6OnZpc2l0ZWRTdGF0ZUNoYW5nZWQoUGFnZUdyb3VwOjpwYWdlR3JvdXAoaXQt
PnZhbHVlLT5pZGVudGlmaWVyKCkpLCBsaW5rSGFzaGVzW2ldKTsKICAgICB9CiAKICAgICBwYWdl
Q2FjaGUoKS0+bWFya1BhZ2VzRm9yVmlzdGVkTGlua1N0eWxlUmVjYWxjKCk7CkBAIC0zMjYsNyAr
MzI2LDcgQEAgdm9pZCBXZWJQcm9jZXNzOjphbGxWaXNpdGVkTGlua1N0YXRlQ2hhbmdlZCgpCiAg
ICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPFdlYlBhZ2VHcm91cFByb3h5PiA+Ojpjb25zdF9p
dGVyYXRvciBpdCA9IG1fcGFnZUdyb3VwTWFwLmJlZ2luKCk7CiAgICAgSGFzaE1hcDx1aW50NjRf
dCwgUmVmUHRyPFdlYlBhZ2VHcm91cFByb3h5PiA+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3Bh
Z2VHcm91cE1hcC5lbmQoKTsKICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBQ
YWdlOjphbGxWaXNpdGVkU3RhdGVDaGFuZ2VkKFBhZ2VHcm91cDo6cGFnZUdyb3VwKGl0LT5zZWNv
bmQtPmlkZW50aWZpZXIoKSkpOworICAgICAgICBQYWdlOjphbGxWaXNpdGVkU3RhdGVDaGFuZ2Vk
KFBhZ2VHcm91cDo6cGFnZUdyb3VwKGl0LT52YWx1ZS0+aWRlbnRpZmllcigpKSk7CiAKICAgICBw
YWdlQ2FjaGUoKS0+bWFya1BhZ2VzRm9yVmlzdGVkTGlua1N0eWxlUmVjYWxjKCk7CiB9CkBAIC01
MDIsNyArNTAyLDcgQEAgV2ViUGFnZSogV2ViUHJvY2Vzczo6Zm9jdXNlZFdlYlBhZ2UoKSBjb25z
dAogeyAgICAKICAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8V2ViUGFnZT4gPjo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gbV9wYWdlTWFwLmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDx1aW50NjRf
dCwgUmVmUHRyPFdlYlBhZ2U+ID46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wYWdlTWFwLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBXZWJQYWdlKiBwYWdlID0gKCppdCkuc2Vj
b25kLmdldCgpOworICAgICAgICBXZWJQYWdlKiBwYWdlID0gKCppdCkudmFsdWUuZ2V0KCk7CiAg
ICAgICAgIGlmIChwYWdlLT53aW5kb3dJc0ZvY3VzZWQoKSkKICAgICAgICAgICAgIHJldHVybiBw
YWdlOwogICAgIH0KQEAgLTUyMCwxNCArNTIwLDE0IEBAIHZvaWQgV2ViUHJvY2Vzczo6Y3JlYXRl
V2ViUGFnZSh1aW50NjRfdCBwYWdlSUQsIGNvbnN0IFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMm
CiAgICAgLy8gbGluaykgdGhlIFdlYlBhZ2UgZ2V0cyBjcmVhdGVkIGJvdGggaW4gdGhlIHN5bmNo
cm9ub3VzIGhhbmRsZXIgYW5kIHRocm91Z2ggdGhlIG5vcm1hbCB3YXkuIAogICAgIEhhc2hNYXA8
dWludDY0X3QsIFJlZlB0cjxXZWJQYWdlPiA+OjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9wYWdlTWFw
LmFkZChwYWdlSUQsIDApOwogICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICBB
U1NFUlQoIXJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9y
LT5zZWNvbmQgPSBXZWJQYWdlOjpjcmVhdGUocGFnZUlELCBwYXJhbWV0ZXJzKTsKKyAgICAgICAg
QVNTRVJUKCFyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZSA9IFdlYlBhZ2U6OmNyZWF0ZShwYWdlSUQsIHBhcmFtZXRlcnMpOwogCiAgICAgICAg
IC8vIEJhbGFuY2VkIGJ5IGFuIGVuYWJsZVRlcm1pbmF0aW9uIGluIHJlbW92ZVdlYlBhZ2UuCiAg
ICAgICAgIGRpc2FibGVUZXJtaW5hdGlvbigpOwogICAgIH0KIAotICAgIEFTU0VSVChyZXN1bHQu
aXRlcmF0b3ItPnNlY29uZCk7CisgICAgQVNTRVJUKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwog
fQogCiB2b2lkIFdlYlByb2Nlc3M6OnJlbW92ZVdlYlBhZ2UodWludDY0X3QgcGFnZUlEKQpAQCAt
NzQxLDExICs3NDEsMTEgQEAgV2ViUGFnZUdyb3VwUHJveHkqIFdlYlByb2Nlc3M6OndlYlBhZ2VH
cm91cChjb25zdCBXZWJQYWdlR3JvdXBEYXRhJiBwYWdlR3JvdXBEYXQKIHsKICAgICBIYXNoTWFw
PHVpbnQ2NF90LCBSZWZQdHI8V2ViUGFnZUdyb3VwUHJveHk+ID46OkFkZFJlc3VsdCByZXN1bHQg
PSBtX3BhZ2VHcm91cE1hcC5hZGQocGFnZUdyb3VwRGF0YS5wYWdlR3JvdXBJRCwgMCk7CiAgICAg
aWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIEFTU0VSVCghcmVzdWx0Lml0ZXJhdG9y
LT5zZWNvbmQpOwotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IFdlYlBhZ2VHcm91
cFByb3h5OjpjcmVhdGUocGFnZUdyb3VwRGF0YSk7CisgICAgICAgIEFTU0VSVCghcmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZSk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBXZWJQYWdl
R3JvdXBQcm94eTo6Y3JlYXRlKHBhZ2VHcm91cERhdGEpOwogICAgIH0KIAotICAgIHJldHVybiBy
ZXN1bHQuaXRlcmF0b3ItPnNlY29uZC5nZXQoKTsKKyAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZS5nZXQoKTsKIH0KIAogc3RhdGljIGJvb2wgY2FuUGx1Z2luSGFuZGxlUmVzcG9uc2Uo
Y29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCkBAIC04MzksNyArODM5LDcgQEAgc3Rh
dGljIHZvaWQgZnJvbUNvdW50ZWRTZXRUb0hhc2hNYXAoVHlwZUNvdW50U2V0KiBjb3VudGVkU2V0
LCBIYXNoTWFwPFN0cmluZywgdWkKIHsKICAgICBUeXBlQ291bnRTZXQ6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IGNvdW50ZWRTZXQtPmVuZCgpOwogICAgIGZvciAoVHlwZUNvdW50U2V0Ojpjb25zdF9p
dGVyYXRvciBpdCA9IGNvdW50ZWRTZXQtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAg
ICAgbWFwLnNldChpdC0+Zmlyc3QsIGl0LT5zZWNvbmQpOworICAgICAgICBtYXAuc2V0KGl0LT5r
ZXksIGl0LT52YWx1ZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGdldFdlYkNvcmVNZW1vcnlDYWNoZVN0
YXRpc3RpY3MoVmVjdG9yPEhhc2hNYXA8U3RyaW5nLCB1aW50NjRfdD4gPiYgcmVzdWx0KQpAQCAt
MTAwOSw3ICsxMDA5LDcgQEAgdm9pZCBXZWJQcm9jZXNzOjpzZXRUZXh0Q2hlY2tlclN0YXRlKGNv
bnN0IFRleHRDaGVja2VyU3RhdGUmIHRleHRDaGVja2VyU3RhdGUpCiAKICAgICBIYXNoTWFwPHVp
bnQ2NF90LCBSZWZQdHI8V2ViUGFnZT4gPjo6aXRlcmF0b3IgZW5kID0gbV9wYWdlTWFwLmVuZCgp
OwogICAgIGZvciAoSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPFdlYlBhZ2U+ID46Oml0ZXJhdG9y
IGl0ID0gbV9wYWdlTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBXZWJQ
YWdlKiBwYWdlID0gKCppdCkuc2Vjb25kLmdldCgpOworICAgICAgICBXZWJQYWdlKiBwYWdlID0g
KCppdCkudmFsdWUuZ2V0KCk7CiAgICAgICAgIGlmIChjb250aW51b3VzU3BlbGxDaGVja2luZ1R1
cm5lZE9mZikKICAgICAgICAgICAgIHBhZ2UtPnVubWFya0FsbE1pc3NwZWxsaW5ncygpOwogICAg
ICAgICBpZiAoZ3JhbW1hckNoZWNraW5nVHVybmVkT2ZmKQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hh
bmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDdhYTRhNjk2NmE4NWFiMmQ1NmUwMTgyZDNl
NjlhNjU5MjFiNDhhZTEuLjdkMTVlNGIxY2QyMjFmNjY2YjVlNzU2NGUxMjI5ODg5MjJiNTkwOGQg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzOCBAQAorMjAxMi0wNC0wMiAgQ2FpbyBNYXJjZWxvIGRlIE9saXZlaXJhIEZpbGhvICA8
Y2Fpby5vbGl2ZWlyYUBvcGVuYm9zc2Eub3JnPgorCisgICAgICAgIFJlbmFtZSBmaXJzdC9zZWNv
bmQgdG8ga2V5L3ZhbHVlIGluIEhhc2hNYXAgaXRlcmF0b3JzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Mjc4NAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vQ3Bw
Qm91bmRDbGFzcy5jcHA6CisgICAgICAgIChDcHBCb3VuZENsYXNzOjp+Q3BwQm91bmRDbGFzcyk6
CisgICAgICAgIChDcHBCb3VuZENsYXNzOjppbnZva2UpOgorICAgICAgICAoQ3BwQm91bmRDbGFz
czo6Z2V0UHJvcGVydHkpOgorICAgICAgICAoQ3BwQm91bmRDbGFzczo6c2V0UHJvcGVydHkpOgor
ICAgICAgICAoQ3BwQm91bmRDbGFzczo6YmluZENhbGxiYWNrKToKKyAgICAgICAgKENwcEJvdW5k
Q2xhc3M6OmJpbmRQcm9wZXJ0eSk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
TW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChNb2NrV2ViU3BlZWNo
SW5wdXRDb250cm9sbGVyOjphZGRNb2NrUmVjb2duaXRpb25SZXN1bHQpOgorICAgICAgICAqIER1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL05vdGlmaWNhdGlvblByZXNlbnRlci5jcHA6CisgICAgICAg
IChOb3RpZmljYXRpb25QcmVzZW50ZXI6OnNpbXVsYXRlQ2xpY2spOgorICAgICAgICAoTm90aWZp
Y2F0aW9uUHJlc2VudGVyOjpzaG93KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9XZWJQcmVmZXJlbmNlcy5jcHA6CisgICAgICAgIChhcHBseUZvbnRNYXApOgorICAgICAgICAq
IER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcDoKKyAgICAgICAgKFdlYlZp
ZXdIb3N0OjpwcmludFJlc291cmNlRGVzY3JpcHRpb24pOgorICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL3dpbi9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlcldpbi5jcHA6CisgICAgICAgIChBY2Nlc3Np
YmlsaXR5Q29udHJvbGxlcjo6fkFjY2Vzc2liaWxpdHlDb250cm9sbGVyKToKKyAgICAgICAgKEFj
Y2Vzc2liaWxpdHlDb250cm9sbGVyOjp3aW5Ob3RpZmljYXRpb25SZWNlaXZlZCk6CisgICAgICAg
ICogRHVtcFJlbmRlclRyZWUvd2luL0xheW91dFRlc3RDb250cm9sbGVyV2luLmNwcDoKKyAgICAg
ICAgKHdvcmxkSURGb3JXb3JsZCk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZh
bHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dp
bi9SZXNvdXJjZUxvYWREZWxlZ2F0ZS5jcHA6CisgICAgICAgIChSZXNvdXJjZUxvYWREZWxlZ2F0
ZTo6ZGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQpOgorICAgICAgICAqIFdlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwOgorICAgICAg
ICAoV1RSOjpMYXlvdXRUZXN0Q29udHJvbGxlcjo6d29ybGRJREZvcldvcmxkKToKKyAgICAgICAg
KFdUUjo6TGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxk
KToKKwogMjAxMi0wNC0wMiAgQmFsYXpzIEtlbGVtZW4gIDxrYmFsYXpzQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgW1F0XVtXSzJdIFNldCB1cCBwbHVnaW4gcHJvY2VzcyBvbiBVbml4CmRpZmYgLS1n
aXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9DcHBCb3VuZENsYXNzLmNwcCBiL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0NwcEJvdW5kQ2xhc3MuY3BwCmluZGV4IDliNGEz
YjY0NjQ1ZDA1N2I0MTcyZTFjN2RmYTA3YzdhNjJlNzdjZjguLjFiMjlkMmIwZjU1ZDAxZjczODcx
NDU3ODc3ZjlkYmRmMDZmMWI0OTEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL0NwcEJvdW5kQ2xhc3MuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL0NwcEJvdW5kQ2xhc3MuY3BwCkBAIC0yMDMsMTAgKzIwMywxMCBAQCBib29sIENwcE5QT2Jq
ZWN0OjpzZXRQcm9wZXJ0eShOUE9iamVjdCogbnBPYmosIE5QSWRlbnRpZmllciBpZGVudCwgY29u
c3QgTlBWYXJpYQogQ3BwQm91bmRDbGFzczo6fkNwcEJvdW5kQ2xhc3MoKQogewogICAgIGZvciAo
TWV0aG9kTGlzdDo6aXRlcmF0b3IgaSA9IG1fbWV0aG9kcy5iZWdpbigpOyBpICE9IG1fbWV0aG9k
cy5lbmQoKTsgKytpKQotICAgICAgICBkZWxldGUgaS0+c2Vjb25kOworICAgICAgICBkZWxldGUg
aS0+dmFsdWU7CiAKICAgICBmb3IgKFByb3BlcnR5TGlzdDo6aXRlcmF0b3IgaSA9IG1fcHJvcGVy
dGllcy5iZWdpbigpOyBpICE9IG1fcHJvcGVydGllcy5lbmQoKTsgKytpKQotICAgICAgICBkZWxl
dGUgaS0+c2Vjb25kOworICAgICAgICBkZWxldGUgaS0+dmFsdWU7CiAKICAgICAvLyBVbnJlZ2lz
dGVyIG91cnNlbHZlcyBpZiB3ZSB3ZXJlIGJvdW5kIHRvIGEgZnJhbWUuCiAgICAgaWYgKG1fYm91
bmRUb0ZyYW1lKQpAQCAtMjM3LDcgKzIzNyw3IEBAIGJvb2wgQ3BwQm91bmRDbGFzczo6aW52b2tl
KE5QSWRlbnRpZmllciBpZGVudCwKICAgICAgICAgfQogICAgICAgICBjYWxsYmFjayA9IG1fZmFs
bGJhY2tDYWxsYmFjay5nZXQoKTsKICAgICB9IGVsc2UKLSAgICAgICAgY2FsbGJhY2sgPSAoKm1l
dGhvZCkuc2Vjb25kOworICAgICAgICBjYWxsYmFjayA9ICgqbWV0aG9kKS52YWx1ZTsKIAogICAg
IC8vIEJ1aWxkIGEgQ3BwQXJndW1lbnRMaXN0IGFyZ3VtZW50IHZlY3RvciBmcm9tIHRoZSBOUFZh
cmlhbnRzIGNvbWluZyBpbi4KICAgICBDcHBBcmd1bWVudExpc3QgY3BwQXJndW1lbnRzKGFyZ3Vt
ZW50Q291bnQpOwpAQCAtMjYwLDcgKzI2MCw3IEBAIGJvb2wgQ3BwQm91bmRDbGFzczo6Z2V0UHJv
cGVydHkoTlBJZGVudGlmaWVyIGlkZW50LCBOUFZhcmlhbnQqIHJlc3VsdCkgY29uc3QKICAgICB9
CiAKICAgICBDcHBWYXJpYW50IGNwcFZhbHVlOwotICAgIGlmICghY2FsbGJhY2stPnNlY29uZC0+
Z2V0VmFsdWUoJmNwcFZhbHVlKSkKKyAgICBpZiAoIWNhbGxiYWNrLT52YWx1ZS0+Z2V0VmFsdWUo
JmNwcFZhbHVlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGNwcFZhbHVlLmNvcHlUb05Q
VmFyaWFudChyZXN1bHQpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMjc0LDcgKzI3NCw3IEBAIGJv
b2wgQ3BwQm91bmRDbGFzczo6c2V0UHJvcGVydHkoTlBJZGVudGlmaWVyIGlkZW50LCBjb25zdCBO
UFZhcmlhbnQqIHZhbHVlKQogCiAgICAgQ3BwVmFyaWFudCBjcHBWYWx1ZTsKICAgICBjcHBWYWx1
ZS5zZXQoKnZhbHVlKTsKLSAgICByZXR1cm4gKCpjYWxsYmFjaykuc2Vjb25kLT5zZXRWYWx1ZShj
cHBWYWx1ZSk7CisgICAgcmV0dXJuICgqY2FsbGJhY2spLnZhbHVlLT5zZXRWYWx1ZShjcHBWYWx1
ZSk7CiB9CiAKIHZvaWQgQ3BwQm91bmRDbGFzczo6YmluZENhbGxiYWNrKGNvbnN0IHN0cmluZyYg
bmFtZSwgQ2FsbGJhY2sqIGNhbGxiYWNrKQpAQCAtMjgyLDcgKzI4Miw3IEBAIHZvaWQgQ3BwQm91
bmRDbGFzczo6YmluZENhbGxiYWNrKGNvbnN0IHN0cmluZyYgbmFtZSwgQ2FsbGJhY2sqIGNhbGxi
YWNrKQogICAgIE5QSWRlbnRpZmllciBpZGVudCA9IFdlYkJpbmRpbmdzOjpnZXRTdHJpbmdJZGVu
dGlmaWVyKG5hbWUuY19zdHIoKSk7CiAgICAgTWV0aG9kTGlzdDo6aXRlcmF0b3Igb2xkQ2FsbGJh
Y2sgPSBtX21ldGhvZHMuZmluZChpZGVudCk7CiAgICAgaWYgKG9sZENhbGxiYWNrICE9IG1fbWV0
aG9kcy5lbmQoKSkgewotICAgICAgICBkZWxldGUgb2xkQ2FsbGJhY2stPnNlY29uZDsKKyAgICAg
ICAgZGVsZXRlIG9sZENhbGxiYWNrLT52YWx1ZTsKICAgICAgICAgaWYgKCFjYWxsYmFjaykgewog
ICAgICAgICAgICAgbV9tZXRob2RzLnJlbW92ZShvbGRDYWxsYmFjayk7CiAgICAgICAgICAgICBy
ZXR1cm47CkBAIC0zMDksNyArMzA5LDcgQEAgdm9pZCBDcHBCb3VuZENsYXNzOjpiaW5kUHJvcGVy
dHkoY29uc3Qgc3RyaW5nJiBuYW1lLCBQcm9wZXJ0eUNhbGxiYWNrKiBjYWxsYmFjaykKICAgICBO
UElkZW50aWZpZXIgaWRlbnQgPSBXZWJCaW5kaW5nczo6Z2V0U3RyaW5nSWRlbnRpZmllcihuYW1l
LmNfc3RyKCkpOwogICAgIFByb3BlcnR5TGlzdDo6aXRlcmF0b3Igb2xkQ2FsbGJhY2sgPSBtX3By
b3BlcnRpZXMuZmluZChpZGVudCk7CiAgICAgaWYgKG9sZENhbGxiYWNrICE9IG1fcHJvcGVydGll
cy5lbmQoKSkgewotICAgICAgICBkZWxldGUgb2xkQ2FsbGJhY2stPnNlY29uZDsKKyAgICAgICAg
ZGVsZXRlIG9sZENhbGxiYWNrLT52YWx1ZTsKICAgICAgICAgaWYgKCFjYWxsYmFjaykgewogICAg
ICAgICAgICAgbV9wcm9wZXJ0aWVzLnJlbW92ZShvbGRDYWxsYmFjayk7CiAgICAgICAgICAgICBy
ZXR1cm47CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9Nb2NrV2Vi
U3BlZWNoSW5wdXRDb250cm9sbGVyLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L01vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIuY3BwCmluZGV4IGE1ZmUzZWRhNjdjN2ZlY2I0
ZWZkOGVhOGU3YzNjZWJjZTc2YjdlNGIuLjhmY2MwODQ1OWJiNDA5YTNlY2Q0NWNlNWVlZjRhZmFl
ZWVlMTQ5NGEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL01vY2tX
ZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL01vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIuY3BwCkBAIC01MCw3ICs1MCw3IEBA
IHZvaWQgTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcjo6YWRkTW9ja1JlY29nbml0aW9uUmVz
dWx0KGNvbnN0IFdlYlN0cmluZyYgcmVzCiAgICAgICAgIFN0cmluZyBsYW5nU3RyaW5nID0gU3Ry
aW5nOjpmcm9tVVRGOChsYW5ndWFnZS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgaWYgKCFtX3Jl
Y29nbml0aW9uUmVzdWx0cy5jb250YWlucyhsYW5nU3RyaW5nKSkKICAgICAgICAgICAgIG1fcmVj
b2duaXRpb25SZXN1bHRzLnNldChsYW5nU3RyaW5nLCBWZWN0b3I8V2ViU3BlZWNoSW5wdXRSZXN1
bHQ+KCkpOwotICAgICAgICBtX3JlY29nbml0aW9uUmVzdWx0cy5maW5kKGxhbmdTdHJpbmcpLT5z
ZWNvbmQuYXBwZW5kKHJlcyk7CisgICAgICAgIG1fcmVjb2duaXRpb25SZXN1bHRzLmZpbmQobGFu
Z1N0cmluZyktPnZhbHVlLmFwcGVuZChyZXMpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvVG9v
bHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTm90aWZpY2F0aW9uUHJlc2VudGVyLmNwcCBiL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL05vdGlmaWNhdGlvblByZXNlbnRlci5jcHAKaW5k
ZXggMGM1NDAwZjVlOWU4ZjcxNzBlY2Y1OTlhODFiZDQyNmZiZDc3MjkxZC4uYTIxNTg4Zjc0NGU1
YzNmNWFiNzBkYmRiMDNjMjc1YzUwNzA4ZjAzYSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vTm90aWZpY2F0aW9uUHJlc2VudGVyLmNwcAorKysgYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9Ob3RpZmljYXRpb25QcmVzZW50ZXIuY3BwCkBAIC03NSw3ICs3
NSw3IEBAIGJvb2wgTm90aWZpY2F0aW9uUHJlc2VudGVyOjpzaW11bGF0ZUNsaWNrKGNvbnN0IFdl
YlN0cmluZyYgdGl0bGUpCiAgICAgaWYgKG1fYWN0aXZlTm90aWZpY2F0aW9ucy5maW5kKGlkKSA9
PSBtX2FjdGl2ZU5vdGlmaWNhdGlvbnMuZW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAKLSAgICBjb25zdCBXZWJOb3RpZmljYXRpb24mIG5vdGlmaWNhdGlvbiA9IG1fYWN0aXZlTm90
aWZpY2F0aW9ucy5maW5kKGlkKS0+c2Vjb25kOworICAgIGNvbnN0IFdlYk5vdGlmaWNhdGlvbiYg
bm90aWZpY2F0aW9uID0gbV9hY3RpdmVOb3RpZmljYXRpb25zLmZpbmQoaWQpLT52YWx1ZTsKICAg
ICBXZWJOb3RpZmljYXRpb24gZXZlbnRUYXJnZXQobm90aWZpY2F0aW9uKTsKICAgICBldmVudFRh
cmdldC5kaXNwYXRjaENsaWNrRXZlbnQoKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTg5LDcgKzg5
LDcgQEAgYm9vbCBOb3RpZmljYXRpb25QcmVzZW50ZXI6OnNob3coY29uc3QgV2ViTm90aWZpY2F0
aW9uJiBub3RpZmljYXRpb24pCiAgICAgICAgIFdURjo6U3RyaW5nIHJlcGxhY2VJZChub3RpZmlj
YXRpb24ucmVwbGFjZUlkKCkuZGF0YSgpLCBub3RpZmljYXRpb24ucmVwbGFjZUlkKCkubGVuZ3Ro
KCkpOwogICAgICAgICBpZiAobV9yZXBsYWNlbWVudHMuZmluZChyZXBsYWNlSWQpICE9IG1fcmVw
bGFjZW1lbnRzLmVuZCgpKQogICAgICAgICAgICAgcHJpbnRmKCJSRVBMQUNJTkcgTk9USUZJQ0FU
SU9OICVzXG4iLAotICAgICAgICAgICAgICAgICAgIG1fcmVwbGFjZW1lbnRzLmZpbmQocmVwbGFj
ZUlkKS0+c2Vjb25kLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgICAgICAgIG1fcmVwbGFj
ZW1lbnRzLmZpbmQocmVwbGFjZUlkKS0+dmFsdWUudXRmOCgpLmRhdGEoKSk7CiAKICAgICAgICAg
bV9yZXBsYWNlbWVudHMuc2V0KHJlcGxhY2VJZCwgV1RGOjpTdHJpbmcoaWRlbnRpZmllci5kYXRh
KCksIGlkZW50aWZpZXIubGVuZ3RoKCkpKTsKICAgICB9CmRpZmYgLS1naXQgYS9Ub29scy9EdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5jcHAgYi9Ub29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5jcHAKaW5kZXggZTk5Yzk4ZWMxZTNiM2JjY2Jj
YTYxNzM2YjE0NDM3NjViMjczMTQ3NC4uYjUwMjFjMzVmOTEzYTdjZTg1MWRkYTdmNjViOGFlMjI4
NDYxYjk5MyAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViUHJl
ZmVyZW5jZXMuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZl
cmVuY2VzLmNwcApAQCAtMTU3LDkgKzE1Nyw5IEBAIHR5cGVkZWYgdm9pZCAoKlNldEZvbnRGYW1p
bHlXcmFwcGVyKShXZWJTZXR0aW5ncyosIGNvbnN0IFdlYlN0cmluZyYsIFVTY3JpcHRDb2RlCiBz
dGF0aWMgdm9pZCBhcHBseUZvbnRNYXAoV2ViU2V0dGluZ3MqIHNldHRpbmdzLCBjb25zdCBXZWJQ
cmVmZXJlbmNlczo6U2NyaXB0Rm9udEZhbWlseU1hcCYgbWFwLCBTZXRGb250RmFtaWx5V3JhcHBl
ciBzZXR0ZXIpCiB7CiAgICAgZm9yIChXZWJQcmVmZXJlbmNlczo6U2NyaXB0Rm9udEZhbWlseU1h
cDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1hcC5iZWdpbigpOyBpdGVyICE9IG1hcC5lbmQoKTsg
KytpdGVyKSB7Ci0gICAgICAgIGNvbnN0IFdlYlN0cmluZyYgZm9udCA9IGl0ZXItPnNlY29uZDsK
KyAgICAgICAgY29uc3QgV2ViU3RyaW5nJiBmb250ID0gaXRlci0+dmFsdWU7CiAgICAgICAgIGlm
ICghZm9udC5pc051bGwoKSAmJiAhZm9udC5pc0VtcHR5KCkpCi0gICAgICAgICAgICAoKnNldHRl
cikoc2V0dGluZ3MsIGZvbnQsIHN0YXRpY19jYXN0PFVTY3JpcHRDb2RlPihpdGVyLT5maXJzdCkp
OworICAgICAgICAgICAgKCpzZXR0ZXIpKHNldHRpbmdzLCBmb250LCBzdGF0aWNfY2FzdDxVU2Ny
aXB0Q29kZT4oaXRlci0+a2V5KSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Ub29scy9EdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5jcHAKaW5kZXggYjNlOWRkYTAxNjQ5MDBkMGRlYTg5ZTFj
NzdhYzc4ZDUzMDlhMWRhYy4uMDJjOTJjMDQwMDE4ZDBlNmRjN2FkMzNkYWMwMDkyMzY4MTY3Mjdh
MCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3Qu
Y3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcApA
QCAtMTY0Miw3ICsxNjQyLDcgQEAgdm9pZCBXZWJWaWV3SG9zdDo6cHJpbnRGcmFtZVVzZXJHZXN0
dXJlU3RhdHVzKFdlYkZyYW1lKiB3ZWJmcmFtZSwgY29uc3QgY2hhciogbXMKIHZvaWQgV2ViVmll
d0hvc3Q6OnByaW50UmVzb3VyY2VEZXNjcmlwdGlvbih1bnNpZ25lZCBpZGVudGlmaWVyKQogewog
ICAgIFJlc291cmNlTWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VJZGVudGlmaWVyTWFwLmZp
bmQoaWRlbnRpZmllcik7Ci0gICAgcHJpbnRmKCIlcyIsIGl0ICE9IG1fcmVzb3VyY2VJZGVudGlm
aWVyTWFwLmVuZCgpID8gaXQtPnNlY29uZC5jX3N0cigpIDogIjx1bmtub3duPiIpOworICAgIHBy
aW50ZigiJXMiLCBpdCAhPSBtX3Jlc291cmNlSWRlbnRpZmllck1hcC5lbmQoKSA/IGl0LT52YWx1
ZS5jX3N0cigpIDogIjx1bmtub3duPiIpOwogfQogCiB2b2lkIFdlYlZpZXdIb3N0OjpzZXRQZW5k
aW5nRXh0cmFEYXRhKFBhc3NPd25QdHI8VGVzdFNoZWxsRXh0cmFEYXRhPiBleHRyYURhdGEpCmRp
ZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vQWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXJXaW4uY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0FjY2Vzc2liaWxpdHlDb250cm9s
bGVyV2luLmNwcAppbmRleCA3ZjlhYTZjYzJlZTkyOWIyYmY4ZWE0MTZmNWQ2NWJiMDU2ZTNlYWQx
Li40ZjU2ZWZkMWQ0YjhkNDQ0ZWVkZWU4Y2Y5NmNlMjAxMWUxN2E0OWExIDEwMDY0NAotLS0gYS9U
b29scy9EdW1wUmVuZGVyVHJlZS93aW4vQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJXaW4uY3BwCisr
KyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlcldpbi5j
cHAKQEAgLTU4LDcgKzU4LDcgQEAgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6On5BY2Nlc3NpYmls
aXR5Q29udHJvbGxlcigpCiAgICAgICAgIFVuaG9va1dpbkV2ZW50KG1fbm90aWZpY2F0aW9uc0V2
ZW50SG9vayk7CiAKICAgICBmb3IgKEhhc2hNYXA8UGxhdGZvcm1VSUVsZW1lbnQsIEpTT2JqZWN0
UmVmPjo6aXRlcmF0b3IgaXQgPSBtX25vdGlmaWNhdGlvbkxpc3RlbmVycy5iZWdpbigpOyBpdCAh
PSBtX25vdGlmaWNhdGlvbkxpc3RlbmVycy5lbmQoKTsgKytpdCkKLSAgICAgICAgSlNWYWx1ZVVu
cHJvdGVjdChmcmFtZS0+Z2xvYmFsQ29udGV4dCgpLCBpdC0+c2Vjb25kKTsKKyAgICAgICAgSlNW
YWx1ZVVucHJvdGVjdChmcmFtZS0+Z2xvYmFsQ29udGV4dCgpLCBpdC0+dmFsdWUpOwogfQogCiBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjplbGVtZW50QXRQ
b2ludChpbnQgeCwgaW50IHkpCkBAIC0yOTMsNyArMjkzLDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5
Q29udHJvbGxlcjo6cmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIoKQogdm9pZCBBY2Nlc3NpYmls
aXR5Q29udHJvbGxlcjo6d2luTm90aWZpY2F0aW9uUmVjZWl2ZWQoUGxhdGZvcm1VSUVsZW1lbnQg
ZWxlbWVudCwgY29uc3Qgc3RyaW5nJiBldmVudE5hbWUpCiB7CiAgICAgZm9yIChIYXNoTWFwPFBs
YXRmb3JtVUlFbGVtZW50LCBKU09iamVjdFJlZj46Oml0ZXJhdG9yIGl0ID0gbV9ub3RpZmljYXRp
b25MaXN0ZW5lcnMuYmVnaW4oKTsgaXQgIT0gbV9ub3RpZmljYXRpb25MaXN0ZW5lcnMuZW5kKCk7
ICsraXQpIHsKLSAgICAgICAgQ09NUHRyPElTZXJ2aWNlUHJvdmlkZXI+IHRoaXNTZXJ2aWNlUHJv
dmlkZXIoUXVlcnksIGl0LT5maXJzdCk7CisgICAgICAgIENPTVB0cjxJU2VydmljZVByb3ZpZGVy
PiB0aGlzU2VydmljZVByb3ZpZGVyKFF1ZXJ5LCBpdC0+a2V5KTsKICAgICAgICAgaWYgKCF0aGlz
U2VydmljZVByb3ZpZGVyKQogICAgICAgICAgICAgY29udGludWU7CiAKQEAgLTMxNiw3ICszMTYs
NyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjp3aW5Ob3RpZmljYXRpb25SZWNlaXZl
ZChQbGF0Zm9ybVVJRWxlbWVudCBlbGVtZW50LAogCiAgICAgICAgIEpTUmV0YWluUHRyPEpTU3Ry
aW5nUmVmPiBqc05vdGlmaWNhdGlvbihBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoZXZlbnROYW1lLmNfc3RyKCkpKTsKICAgICAgICAgSlNWYWx1ZVJlZiBhcmd1bWVudCA9IEpT
VmFsdWVNYWtlU3RyaW5nKGZyYW1lLT5nbG9iYWxDb250ZXh0KCksIGpzTm90aWZpY2F0aW9uLmdl
dCgpKTsKLSAgICAgICAgSlNPYmplY3RDYWxsQXNGdW5jdGlvbihmcmFtZS0+Z2xvYmFsQ29udGV4
dCgpLCBpdC0+c2Vjb25kLCBOVUxMLCAxLCAmYXJndW1lbnQsIE5VTEwpOworICAgICAgICBKU09i
amVjdENhbGxBc0Z1bmN0aW9uKGZyYW1lLT5nbG9iYWxDb250ZXh0KCksIGl0LT52YWx1ZSwgTlVM
TCwgMSwgJmFyZ3VtZW50LCBOVUxMKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL3dpbi9MYXlvdXRUZXN0Q29udHJvbGxlcldpbi5jcHAgYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS93aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJXaW4uY3BwCmluZGV4IDFiNmE0MTU3
YzQ4ZTY2NjVkNTM5Y2FjOGFkNzg4MDkzMjNjNzIwZjUuLmRjY2E4MWI4NWRlYTU2NTdhZDMxZjM5
ZjU3OTc4OTVjNzMwZDkyZGYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9M
YXlvdXRUZXN0Q29udHJvbGxlcldpbi5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2lu
L0xheW91dFRlc3RDb250cm9sbGVyV2luLmNwcApAQCAtMTI4Miw4ICsxMjgyLDggQEAgdW5zaWdu
ZWQgd29ybGRJREZvcldvcmxkKElXZWJTY3JpcHRXb3JsZCogd29ybGQpCiB7CiAgICAgV29ybGRN
YXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHdvcmxkTWFwKCkuZW5kKCk7CiAgICAgZm9yIChXb3Js
ZE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSB3b3JsZE1hcCgpLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgewotICAgICAgICBpZiAoaXQtPnNlY29uZCA9PSB3b3JsZCkKLSAgICAgICAgICAgIHJl
dHVybiBpdC0+Zmlyc3Q7CisgICAgICAgIGlmIChpdC0+dmFsdWUgPT0gd29ybGQpCisgICAgICAg
ICAgICByZXR1cm4gaXQtPmtleTsKICAgICB9CiAKICAgICByZXR1cm4gMDsKQEAgLTEzMDIsNyAr
MTMwMiw3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29s
YXRlZFdvcmxkKHVuc2lnbmVkIHdvcmxkSUQsIEpTT2JqCiAgICAgICAgIGlmIChGQUlMRUQoV2Vi
S2l0Q3JlYXRlSW5zdGFuY2UoX191dWlkb2YoV2ViU2NyaXB0V29ybGQpLCAwLCBfX3V1aWRvZih3
b3JsZCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmd29ybGQpKSkpCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgfSBlbHNlIHsKLSAgICAgICAgQ09NUHRyPElXZWJTY3JpcHRXb3JsZD4mIHdv
cmxkU2xvdCA9IHdvcmxkTWFwKCkuYWRkKHdvcmxkSUQsIDApLml0ZXJhdG9yLT5zZWNvbmQ7Cisg
ICAgICAgIENPTVB0cjxJV2ViU2NyaXB0V29ybGQ+JiB3b3JsZFNsb3QgPSB3b3JsZE1hcCgpLmFk
ZCh3b3JsZElELCAwKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgIGlmICghd29ybGRTbG90ICYm
IEZBSUxFRChXZWJLaXRDcmVhdGVJbnN0YW5jZShfX3V1aWRvZihXZWJTY3JpcHRXb3JsZCksIDAs
IF9fdXVpZG9mKHdvcmxkU2xvdCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmd29ybGRTbG90
KSkpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB3b3JsZCA9IHdvcmxkU2xvdDsKZGlm
ZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9SZXNvdXJjZUxvYWREZWxlZ2F0ZS5j
cHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vUmVzb3VyY2VMb2FkRGVsZWdhdGUuY3BwCmlu
ZGV4IDI2YjcyMmE0ZWE1Y2RjNjRmMTM3Y2VmNzcyYzM0OGY2OTU0ODk3NjQuLmE4Y2QzYmQwYzEw
NmJmMjJiNDZkYWE5YzEzMmY2MzE4NjdiNWUxZjggMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL3dpbi9SZXNvdXJjZUxvYWREZWxlZ2F0ZS5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvd2luL1Jlc291cmNlTG9hZERlbGVnYXRlLmNwcApAQCAtNjYsNyArNjYsNyBAQCB3c3Ry
aW5nIFJlc291cmNlTG9hZERlbGVnYXRlOjpkZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3Vs
dCh1bnNpZ25lZCBsb25nIGlkZQogICAgIGlmIChpdCA9PSBtX3VybE1hcC5lbmQoKSkKICAgICAg
ICAgcmV0dXJuIEwiPHVua25vd24+IjsKIAotICAgIHJldHVybiB1cmxTdWl0YWJsZUZvclRlc3RS
ZXN1bHQoaXQtPnNlY29uZCk7CisgICAgcmV0dXJuIHVybFN1aXRhYmxlRm9yVGVzdFJlc3VsdChp
dC0+dmFsdWUpOwogfQogCiB3c3RyaW5nIFJlc291cmNlTG9hZERlbGVnYXRlOjpkZXNjcmlwdGlv
blN1aXRhYmxlRm9yVGVzdFJlc3VsdChJV2ViVVJMUmVxdWVzdCogcmVxdWVzdCkKZGlmZiAtLWdp
dCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvTGF5b3V0VGVzdENvbnRy
b2xsZXIuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9MYXlvdXRU
ZXN0Q29udHJvbGxlci5jcHAKaW5kZXggY2VjNDM0NGRkMmNmMzQ1NmY3YjUyZDc3Yjk3ZDMwYzdl
ZDI1MDBlYy4uNGQxZDQxNDhmMjY0MGYxZmQwNWZjYTI0OTUyY2YzNDgyMTA0NzcxMyAxMDA2NDQK
LS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9MYXlvdXRUZXN0Q29u
dHJvbGxlci5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9M
YXlvdXRUZXN0Q29udHJvbGxlci5jcHAKQEAgLTQ4OSw4ICs0ODksOCBAQCB1bnNpZ25lZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6d29ybGRJREZvcldvcmxkKFdLQnVuZGxlU2NyaXB0V29ybGRSZWYg
d29ybGQpCiB7CiAgICAgV29ybGRNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHdvcmxkTWFwKCku
ZW5kKCk7CiAgICAgZm9yIChXb3JsZE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSB3b3JsZE1hcCgp
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnNlY29uZCA9PSB3
b3JsZCkKLSAgICAgICAgICAgIHJldHVybiBpdC0+Zmlyc3Q7CisgICAgICAgIGlmIChpdC0+dmFs
dWUgPT0gd29ybGQpCisgICAgICAgICAgICByZXR1cm4gaXQtPmtleTsKICAgICB9CiAKICAgICBy
ZXR1cm4gMDsKQEAgLTUwNCw3ICs1MDQsNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpl
dmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZChKU0NvbnRleHRSZWYgY29udGV4dCwgdQogICAg
IGlmICghd29ybGRJRCkKICAgICAgICAgd29ybGQuYWRvcHQoV0tCdW5kbGVTY3JpcHRXb3JsZENy
ZWF0ZVdvcmxkKCkpOwogICAgIGVsc2UgewotICAgICAgICBXS1JldGFpblB0cjxXS0J1bmRsZVNj
cmlwdFdvcmxkUmVmPiYgd29ybGRTbG90ID0gd29ybGRNYXAoKS5hZGQod29ybGRJRCwgMCkuaXRl
cmF0b3ItPnNlY29uZDsKKyAgICAgICAgV0tSZXRhaW5QdHI8V0tCdW5kbGVTY3JpcHRXb3JsZFJl
Zj4mIHdvcmxkU2xvdCA9IHdvcmxkTWFwKCkuYWRkKHdvcmxkSUQsIDApLml0ZXJhdG9yLT52YWx1
ZTsKICAgICAgICAgaWYgKCF3b3JsZFNsb3QpCiAgICAgICAgICAgICB3b3JsZFNsb3QuYWRvcHQo
V0tCdW5kbGVTY3JpcHRXb3JsZENyZWF0ZVdvcmxkKCkpOwogICAgICAgICB3b3JsZCA9IHdvcmxk
U2xvdDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>135116</attachid>
            <date>2012-04-02 09:08:20 -0700</date>
            <delta_ts>2012-04-02 09:49:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-82784-20120402130822.patch</filename>
            <type>text/plain</type>
            <size>621243</size>
            <attacher name="Caio Marcelo de Oliveira Filho">cmarcelo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyODkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
MGI3YjdmNDZmMGJjOTI2MDkwNjhlMjQ5MWE1MDEzZTliZDAyOTllLi5kMzQ2MjhiNTMwNzRlZmFi
NmNjZmU0MGUzOTI4MzU5Yjg1ZjA3NjgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMTQgQEAKKzIwMTItMDQtMDIgIENhaW8gTWFyY2VsbyBkZSBPbGl2ZWlyYSBGaWxobyAg
PGNhaW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KKworICAgICAgICBSZW5hbWUgZmlyc3Qvc2Vj
b25kIHRvIGtleS92YWx1ZSBpbiBIYXNoTWFwIGl0ZXJhdG9ycworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI3ODQKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0Lmg6Cisg
ICAgICAgIChKU0M6OkpTQ2FsbGJhY2tPYmplY3REYXRhOjpKU1ByaXZhdGVQcm9wZXJ0eU1hcDo6
Z2V0UHJpdmF0ZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNDYWxsYmFja09iamVjdERhdGE6
OkpTUHJpdmF0ZVByb3BlcnR5TWFwOjpzZXRQcml2YXRlUHJvcGVydHkpOgorICAgICAgICAoSlND
OjpKU0NhbGxiYWNrT2JqZWN0RGF0YTo6SlNQcml2YXRlUHJvcGVydHlNYXA6OnZpc2l0Q2hpbGRy
ZW4pOgorICAgICAgICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmg6CisgICAgICAg
IChKU0M6Ojo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgICogQVBJL0pTQ2xhc3NSZWYu
Y3BwOgorICAgICAgICAoT3BhcXVlSlNDbGFzczo6fk9wYXF1ZUpTQ2xhc3MpOgorICAgICAgICAo
T3BhcXVlSlNDbGFzc0NvbnRleHREYXRhOjpPcGFxdWVKU0NsYXNzQ29udGV4dERhdGEpOgorICAg
ICAgICAoT3BhcXVlSlNDbGFzczo6Y29udGV4dERhdGEpOgorICAgICAgICAqIGJ5dGVjb2RlL0Nv
ZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcCk6CisgICAgICAgIChK
U0M6OkV2YWxDb2RlQ2FjaGU6OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKiBieXRlY29kZS9K
dW1wVGFibGUuaDoKKyAgICAgICAgKEpTQzo6U3RyaW5nSnVtcFRhYmxlOjpvZmZzZXRGb3JWYWx1
ZSk6CisgICAgICAgIChKU0M6OlN0cmluZ0p1bXBUYWJsZTo6Y3RpRm9yVmFsdWUpOgorICAgICAg
ICAqIGJ5dGVjb2RlL0xhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcDoKKyAgICAgICAgKEpTQzo6
TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVQYXJzZXI6OmdldElmUHJlc2VudCk6CisgICAgICAgICog
Ynl0ZWNvZGUvUHJlZGljdGlvblRyYWNrZXIuaDoKKyAgICAgICAgKEpTQzo6UHJlZGljdGlvblRy
YWNrZXI6OnByZWRpY3RHbG9iYWxWYXIpOgorICAgICAgICAoSlNDOjpQcmVkaWN0aW9uVHJhY2tl
cjo6Z2V0R2xvYmFsVmFyUHJlZGljdGlvbik6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmFkZFZh
cik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjphZGRHbG9iYWxWYXIpOgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6YWRkQ29uc3RhbnQpOgorICAgICAgICAoSlND
OjpCeXRlY29kZUdlbmVyYXRvcjo6YWRkQ29uc3RhbnRWYWx1ZSk6CisgICAgICAgIChKU0M6OkJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0TG9hZCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJh
dG9yOjphZGRTdHJpbmdDb25zdGFudCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0TGF6eU5ld0Z1bmN0aW9uKToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvTm9kZXNDb2Rl
Z2VuLmNwcDoKKyAgICAgICAgKEpTQzo6UHJvcGVydHlMaXN0Tm9kZTo6ZW1pdEJ5dGVjb2RlKToK
KyAgICAgICAgKiBkZWJ1Z2dlci9EZWJ1Z2dlci5jcHA6CisgICAgICAgICogZGZnL0RGR0Fzc2Vt
Ymx5SGVscGVycy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QXNzZW1ibHlIZWxwZXJzOjpkZWNv
ZGVkQ29kZU1hcEZvcik6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlQ2FjaGUuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZUNhY2hlOjp+Qnl0ZUNvZGVDYWNoZSk6CisgICAgICAgIChK
U0M6OkRGRzo6Qnl0ZUNvZGVDYWNoZTo6Z2V0KToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpjZWxsQ29uc3Rh
bnQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5
OjpJbmxpbmVTdGFja0VudHJ5KToKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAo
SlNDOjpIZWFwOjptYXJrUHJvdGVjdGVkT2JqZWN0cyk6CisgICAgICAgICogaGVhcC9IZWFwLmg6
CisgICAgICAgIChKU0M6OkhlYXA6OmZvckVhY2hQcm90ZWN0ZWRDZWxsKToKKyAgICAgICAgKiBq
aXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZSk6CisgICAgICAg
ICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpjdGlTdHViKToK
KyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpob3N0RnVuY3Rpb25TdHViKToKKyAgICAgICAgKiBw
YXJzZXIvUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6OjpwYXJzZVN0cmljdE9iamVjdExpdGVy
YWwpOgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGUuY3BwOgorICAgICAgICAoSlNDKToKKyAg
ICAgICAgKEpTQzo6ZnVuY3Rpb25OYW1lQ291bnRFbnRyeUNvbXBhcmF0b3IpOgorICAgICAgICAo
SlNDOjpQcm9maWxlOjpkZWJ1Z1ByaW50RGF0YVNhbXBsZVN0eWxlKToKKyAgICAgICAgVGhpcyBj
b2RlIGtlcHQgYSB2ZWN0b3Igb2YgdGhlIHBhaXJzIHRoYXQgd2VyZSB0aGUgImNvbnRlbnRzIiBv
ZiB0aGUKKyAgICAgICAgaXRlcmF0b3JzLiBUaGlzIGlzIGNoYW5nZWQgdG8gdXNlIGEgSGFzaE1h
cEVudHJ5LiBXZSBtYWtlIHVzZSBIYXNoQ291bnQncworICAgICAgICBWYWx1ZVR5cGUgKHdoaWNo
IHJlcHJlc2VudHMgb25seSB0aGUga2V5KSB0byBnZXQgdGhlIHByb3BlciBrZXkgcGFyYW1ldGVy
IGZvcgorICAgICAgICBIYXNoTWFwRW50cnkuCisKKyAgICAgICAgKiBydW50aW1lL0lkZW50aWZp
ZXIuY3BwOgorICAgICAgICAoSlNDOjpJZGVudGlmaWVyOjphZGQpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNBY3RpdmF0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6SlNBY3RpdmF0aW9uOjpnZXRPd25Q
cm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNBY3RpdmF0aW9uOjpzeW1ib2xUYWJsZVB1
dFdpdGhBdHRyaWJ1dGVzKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgorICAgICAg
ICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpwdXQpOgorICAgICAgICAoSlNDOjpTcGFyc2VB
cnJheVZhbHVlTWFwOjpwdXREaXJlY3QpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVl
TWFwOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6ZW50ZXJEaWN0aW9u
YXJ5TW9kZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmRlZmluZU93bk51bWVyaWNQcm9wZXJ0
eSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgpOgor
ICAgICAgICAoSlNDOjpKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpOgorICAgICAg
ICAoSlNDOjpKU0FycmF5OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKToKKyAgICAgICAg
KEpTQzo6SlNBcnJheTo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgpOgorICAgICAg
ICAoSlNDOjpKU0FycmF5OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgpOgorICAgICAgICAoSlNDOjpK
U0FycmF5OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c2V0
TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c29ydCk6CisgICAgICAgIChKU0M6OkpT
QXJyYXk6OmNvbXBhY3RGb3JTb3J0aW5nKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6Y2hlY2tD
b25zaXN0ZW5jeSk6CisgICAgICAgICogcnVudGltZS9KU1ZhcmlhYmxlT2JqZWN0LmNwcDoKKyAg
ICAgICAgKEpTQzo6SlNWYXJpYWJsZU9iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAg
ICAgICogcnVudGltZS9KU1ZhcmlhYmxlT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTVmFyaWFi
bGVPYmplY3Q6OnN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMpOgorICAgICAgICAqIHJ1bnRp
bWUvUmVnRXhwQ2FjaGUuY3BwOgorICAgICAgICAoSlNDOjpSZWdFeHBDYWNoZTo6bG9va3VwT3JD
cmVhdGUpOgorICAgICAgICAoSlNDOjpSZWdFeHBDYWNoZTo6aW52YWxpZGF0ZUNvZGUpOgorICAg
ICAgICAqIHJ1bnRpbWUvV2Vha0dDTWFwLmg6CisgICAgICAgIChKU0M6OldlYWtHQ01hcDo6aXRl
cmF0b3I6OmdldCk6CisgICAgICAgIChKU0M6OldlYWtHQ01hcDo6Y2xlYXIpOgorICAgICAgICAo
SlNDOjpXZWFrR0NNYXA6OnJlbW92ZSk6CisgICAgICAgIChKU0M6OldlYWtHQ01hcDo6YWRkKToK
KyAgICAgICAgKEpTQzo6V2Vha0dDTWFwOjpzZXQpOgorICAgICAgICAqIHRvb2xzL1Byb2ZpbGVU
cmVlTm9kZS5oOgorICAgICAgICAoUHJvZmlsZVRyZWVOb2RlKToKKyAgICAgICAgKEpTQzo6UHJv
ZmlsZVRyZWVOb2RlOjpzYW1wbGVDaGlsZCk6CisgICAgICAgIChKU0M6OlByb2ZpbGVUcmVlTm9k
ZTo6Y2hpbGRDb3VudCk6CisgICAgICAgIChKU0M6OlByb2ZpbGVUcmVlTm9kZTo6ZHVtcEludGVy
bmFsKToKKyAgICAgICAgKEpTQzo6UHJvZmlsZVRyZWVOb2RlOjpjb21wYXJlRW50cmllcyk6Cisg
ICAgICAgIE1hcEVudHJ5IGlzIHN1cHBvc2VkIHRvIGJlIGRlZmluZWQgYXMgdGhlIFZhbHVlVHlw
ZSBvZiB0aGUgSGFzaE1hcCAodHlwZQorICAgICAgICAiY29udGVudHMiIG9mIGl0ZXJhdG9ycywg
aW4gdGhpcyBjYXNlKS4gQ2hhbmdlIHRoZSBjb2RlIHRvIG1ha2UgdXNlIG9mCisgICAgICAgIEhh
c2hNYXA6OlZhbHVlVHlwZSBkaXJlY3RseSwgd2hpY2ggbm93IGlzIGEgSGFzaE1hcEVudHJ5IHR5
cGUuCisKIDIwMTItMDQtMDIgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEu
Y29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIEZpeCBtYWtlIGRpc3RjaGVjayBpc3N1ZXMuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmlu
ZGV4IGZkNDhmNzViMzRmYTQxNDIxN2RjNTBmMDM0ZGYxOTE1ODYyNDQ0MWQuLjY0OWM5ODJmYTQ1
NzU4OTFmMzVlZmVkZTY0ZjYzMGYxZmQ3NDk3YTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzMgQEAKKzIwMTIt
MDQtMDIgIENhaW8gTWFyY2VsbyBkZSBPbGl2ZWlyYSBGaWxobyAgPGNhaW8ub2xpdmVpcmFAb3Bl
bmJvc3NhLm9yZz4KKworICAgICAgICBSZW5hbWUgZmlyc3Qvc2Vjb25kIHRvIGtleS92YWx1ZSBp
biBIYXNoTWFwIGl0ZXJhdG9ycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9ODI3ODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBDaGFuZ2UgaW4gSGFzaE1hcCB0aGUgVmFsdWVUeXBlIGZyb20gc3RkOjpwYWly
IHRvIGEgbmV3IHNwZWNpYWxpemVkIHN0cnVjdAorICAgICAgICBIYXNoTWFwRW50cnkuIEluIEhh
c2hNYXAgdGhlIFZhbHVlVHlwZSBzZXJ2ZSBhcyAiY29udGVudHMiIG9mIHRoZSBpdGVyYXRvcnMu
CisgICAgICAgIFRoZSBkaWZmZXJlbmNlIGlzIHRoYXQgbm93IHRoZSBtZW1iZXJzIGFyZSBjYWxs
ZWQgJ2tleScgYW5kICd2YWx1ZScgaW5zdGVhZCBvZgorICAgICAgICAnZmlyc3QnIGFuZCAnc2Vj
b25kJy4gQWxzbyBhZGQgdGhlIGFwcHJvcHJpYXRlZCBIYXNoVHJhaXRzLgorCisgICAgICAgIFRo
ZSByZXN0IG9mIHRoZSBwYXRjaCBpcyBqdXN0IGNoYW5naW5nIHRoZSBjYWxsc2l0ZXMgdG8gdXNl
IHRoZSBuZXcgbmFtZXMuIE5vdGUKKyAgICAgICAgdGhhdCBIYXNoQ291bnRlZFNldCBleHBvc2Vz
IEhhc2hNYXAgaXRlcmF0b3JzIGFzIHRoZWlyIG93biwgc28gSGFzaENvdW50ZWRTZXQKKyAgICAg
ICAgaW50ZXJmYWNlIGlzIGFsc28gY2hhbmdlZC4KKworICAgICAgICAqIHd0Zi9IYXNoQ291bnRl
ZFNldC5oOgorICAgICAgICAoV1RGOjo6OmFkZCk6CisgICAgICAgIChXVEY6Ojo6cmVtb3ZlKToK
KyAgICAgICAgKFdURjo6Y29weVRvVmVjdG9yKToKKyAgICAgICAgKiB3dGYvSGFzaEl0ZXJhdG9y
cy5oOgorICAgICAgICAoSGFzaFRhYmxlQ29uc3RLZXlzSXRlcmF0b3IpOgorICAgICAgICAoV1RG
OjpIYXNoVGFibGVDb25zdEtleXNJdGVyYXRvcjo6Z2V0KToKKyAgICAgICAgKEhhc2hUYWJsZUNv
bnN0VmFsdWVzSXRlcmF0b3IpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGVDb25zdFZhbHVlc0l0
ZXJhdG9yOjpnZXQpOgorICAgICAgICAoSGFzaFRhYmxlS2V5c0l0ZXJhdG9yKToKKyAgICAgICAg
KFdURjo6SGFzaFRhYmxlS2V5c0l0ZXJhdG9yOjpnZXQpOgorICAgICAgICAoSGFzaFRhYmxlVmFs
dWVzSXRlcmF0b3IpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGVWYWx1ZXNJdGVyYXRvcjo6Z2V0
KToKKyAgICAgICAgKiB3dGYvSGFzaE1hcC5oOgorICAgICAgICAoV1RGOjpIYXNoTWFwRW50cnlL
ZXlFeHRyYWN0b3I6OmV4dHJhY3QpOgorICAgICAgICAoV1RGKToKKyAgICAgICAgKEhhc2hNYXAp
OgorICAgICAgICAoV1RGOjpIYXNoTWFwVHJhbnNsYXRvcjo6dHJhbnNsYXRlKToKKyAgICAgICAg
KFdURjo6SGFzaE1hcFRyYW5zbGF0b3JBZGFwdGVyOjp0cmFuc2xhdGUpOgorICAgICAgICAoV1RG
Ojo6OnNldCk6CisgICAgICAgIChXVEY6Ojo6Z2V0KToKKyAgICAgICAgKFdURjo6Ojp0YWtlKToK
KyAgICAgICAgKFdURjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXVEY6OmRlbGV0ZUFsbFBhaXJT
ZWNvbmRzKToKKyAgICAgICAgKFdURjo6ZGVsZXRlQWxsUGFpckZpcnN0cyk6CisgICAgICAgICog
d3RmL0hhc2hUYWJsZS5oOgorICAgICAgICAoV1RGOjpoYXNoVGFibGVTd2FwKToKKyAgICAgICAg
KFdURik6CisgICAgICAgIChXVEY6Ojo6Y2hlY2tUYWJsZUNvbnNpc3RlbmN5RXhjZXB0U2l6ZSk6
CisgICAgICAgICogd3RmL0hhc2hUcmFpdHMuaDoKKyAgICAgICAgKEhhc2hNYXBFbnRyeSk6Cisg
ICAgICAgIChXVEY6Okhhc2hNYXBFbnRyeTo6SGFzaE1hcEVudHJ5KToKKyAgICAgICAgKFdURik6
CisgICAgICAgIChIYXNoTWFwRW50cnlUcmFpdHMpOgorICAgICAgICAoV1RGOjpIYXNoTWFwRW50
cnlUcmFpdHM6OmVtcHR5VmFsdWUpOgorICAgICAgICAoV1RGOjpIYXNoTWFwRW50cnlUcmFpdHM6
OmNvbnN0cnVjdERlbGV0ZWRWYWx1ZSk6CisgICAgICAgIChXVEY6Okhhc2hNYXBFbnRyeVRyYWl0
czo6aXNEZWxldGVkVmFsdWUpOgorICAgICAgICAqIHd0Zi9NZXRhQWxsb2NhdG9yLmNwcDoKKyAg
ICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6YWRkRnJlZVNwYWNlKToKKyAgICAgICAgKFdURjo6
TWV0YUFsbG9jYXRvcjo6aW5jcmVtZW50UGFnZU9jY3VwYW5jeSk6CisgICAgICAgIChXVEY6Ok1l
dGFBbGxvY2F0b3I6OmRlY3JlbWVudFBhZ2VPY2N1cGFuY3kpOgorICAgICAgICAqIHd0Zi9SZWZD
b3VudGVkTGVha0NvdW50ZXIuY3BwOgorICAgICAgICAoV1RGOjpSZWZDb3VudGVkTGVha0NvdW50
ZXI6On5SZWZDb3VudGVkTGVha0NvdW50ZXIpOgorICAgICAgICAqIHd0Zi9SZWZQdHJIYXNoTWFw
Lmg6CisgICAgICAgIChXVEY6Ojo6c2V0KToKKyAgICAgICAgKFdURjo6OjpnZXQpOgorICAgICAg
ICAoV1RGOjo6OmlubGluZUdldCk6CisgICAgICAgIChXVEY6Ojo6dGFrZSk6CisgICAgICAgICog
d3RmL1NwZWN0cnVtLmg6CisgICAgICAgIChXVEY6OlNwZWN0cnVtOjphZGQpOgorICAgICAgICAo
V1RGOjpTcGVjdHJ1bTo6YnVpbGRMaXN0KToKKyAgICAgICAgKiB3dGYvVGhyZWFkaW5nUHRocmVh
ZHMuY3BwOgorICAgICAgICAoV1RGOjppZGVudGlmaWVyQnlQdGhyZWFkSGFuZGxlKToKKwogMjAx
Mi0wMy0zMCAgRGF2aWQgQmFyciAgPGRhdmlkYmFyckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
U3BsaXQgdXAgdG9wLWxldmVsIC5naXRpZ25vcmUgYW5kIC5naXRhdHRyaWJ1dGVzCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
aW5kZXggZmNjM2NhNjk2MjJkNDU5NDA3YzZhOTNjNmVmYjdkMDU2NjUzNzZhYi4uMDI2ZjQzNGJh
ZTk0MDdjYzgyMzUzOTlhZWQ5ZWE3OTY1ZDAxZjE1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc4
NiBAQAorMjAxMi0wNC0wMiAgQ2FpbyBNYXJjZWxvIGRlIE9saXZlaXJhIEZpbGhvICA8Y2Fpby5v
bGl2ZWlyYUBvcGVuYm9zc2Eub3JnPgorCisgICAgICAgIFJlbmFtZSBmaXJzdC9zZWNvbmQgdG8g
a2V5L3ZhbHVlIGluIEhhc2hNYXAgaXRlcmF0b3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Mjc4NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gZnVuY3Rpb25hbGl0eSBjaGFu
Z2UgaW50ZW5kZWQuCisKKyAgICAgICAgKiBNb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9u
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uOjpXYXRjaGVyczo6ZmluZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvbjo6V2F0Y2hlcnM6OnJlbW92ZSk6CisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpvYmplY3RTdG9yZU5hbWVzKToKKyAg
ICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SURCRmFjdG9yeUJhY2tlbmRJbXBsOjpkZWxldGVEYXRhYmFzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW5CYWNraW5nU3RvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6SURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuSW50ZXJuYWwp
OgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjppbmRleCk6CisgICAgICAgICogTW9kdWxlcy9p
bmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjppbmRleE5hbWVzKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dCk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJbnRlcm5hbCk6CisgICAgICAgICog
TW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SURCVHJhbnNhY3Rpb246Om9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5z
YWN0aW9uOjpkaXNwYXRjaEV2ZW50KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0Fi
c3RyYWN0RGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6
cGVyZm9ybU9wZW5BbmRWZXJpZnkpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0
YWJhc2VUcmFja2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6aW50
ZXJydXB0QWxsRGF0YWJhc2VzRm9yQ29udGV4dCk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRh
YmFzZS9PcmlnaW5Vc2FnZVJlY29yZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpPcmlnaW5Vc2Fn
ZVJlY29yZDo6ZGlza1VzYWdlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRy
YW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rp
b25Db29yZGluYXRvcjo6YWNxdWlyZUxvY2spOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNh
Y3Rpb25Db29yZGluYXRvcjo6cmVsZWFzZUxvY2spOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJh
bnNhY3Rpb25Db29yZGluYXRvcjo6c2h1dGRvd24pOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0
YWJhc2UvY2hyb21pdW0vRGF0YWJhc2VUcmFja2VyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RGF0YWJhc2VUcmFja2VyOjppbnRlcnJ1cHRBbGxEYXRhYmFzZXNGb3JDb250ZXh0KToK
KyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL1F1b3RhVHJhY2tlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpRdW90YVRyYWNrZXI6OmdldERhdGFiYXNlU2l6ZUFuZFNwYWNl
QXZhaWxhYmxlVG9PcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6UXVvdGFUcmFja2VyOjp1cGRh
dGVEYXRhYmFzZVNpemUpOgorICAgICAgICAqIE1vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRE
ZWZsYXRlRnJhbWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldEV4dGVuc2lvbkRl
ZmxhdGVGcmFtZTo6cHJvY2Vzc1Jlc3BvbnNlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYnNvY2tl
dHMvV2ViU29ja2V0RXh0ZW5zaW9uRGlzcGF0Y2hlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyOjphcHBlbmRBY2NlcHRlZEV4dGVuc2lvbik6Cisg
ICAgICAgICogYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkFYT2JqZWN0Q2FjaGU6On5BWE9iamVjdENhY2hlKToKKyAgICAgICAgKiBiaW5kaW5ncy9n
b2JqZWN0L0RPTU9iamVjdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RE9NT2JqZWN0Q2Fj
aGU6OmNsZWFyQnlGcmFtZSk6CisgICAgICAgICogYmluZGluZ3MvanMvRE9NT2JqZWN0SGFzaFRh
YmxlTWFwLmg6CisgICAgICAgIChXZWJDb3JlOjpET01PYmplY3RIYXNoVGFibGVNYXA6On5ET01P
YmplY3RIYXNoVGFibGVNYXApOgorICAgICAgICAoV2ViQ29yZTo6RE9NT2JqZWN0SGFzaFRhYmxl
TWFwOjpnZXQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0RPTVdyYXBwZXJXb3JsZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1N0cmluZ093bmVyOjpmaW5hbGl6ZSk6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNhY2hlRE9NU3Ry
dWN0dXJlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaDoKKyAgICAgICAg
KFdlYkNvcmU6OnVuY2FjaGVXcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzU3RyaW5nKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpKU0RPTUdsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OmdldERPTUNv
bnN0cnVjdG9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZVNjcmlwdERlYnVnU2VydmVyOjphZGRMaXN0ZW5l
cik6CisgICAgICAgIChXZWJDb3JlOjpQYWdlU2NyaXB0RGVidWdTZXJ2ZXI6OnJlbW92ZUxpc3Rl
bmVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDYWNoZWRGcmFtZURhdGEuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FjaGVkRnJhbWVEYXRhOjpTY3JpcHRDYWNoZWRGcmFt
ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FjaGVkRnJhbWVEYXRhOjpyZXN0b3Jl
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6On5TY3JpcHRDb250cm9sbGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmNsZWFyV2luZG93U2hlbGwpOgorICAgICAgICAo
V2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6YXR0YWNoRGVidWdnZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6U2NyaXB0Q29udHJvbGxlcjo6dXBkYXRlRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6U2NyaXB0Q29udHJvbGxlcjo6Y3JlYXRlUm9vdE9iamVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JpcHRDb250cm9sbGVyOjpjbGVhbnVwU2NyaXB0T2JqZWN0c0ZvclBsdWdpbik6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpjbGVhclNjcmlwdE9iamVjdHMpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlNjcmlwdENvbnRyb2xsZXI6OndpbmRvd1NoZWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlw
dENvbnRyb2xsZXI6OmV4aXN0aW5nV2luZG93U2hlbGwpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L1NjcmlwdERlYnVnU2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2Vy
dmVyOjpzZXRCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVy
OjpyZW1vdmVCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVy
OjpoYXNCcmVha3BvaW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0
VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVTZXJpYWxpemVyOjpzdGFydE9iamVj
dEludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lU2VyaWFsaXplcjo6ZHVtcElmVGVy
bWluYWwpOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVTZXJpYWxpemVyOjp3cml0ZSk6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06CisgICAgICAgIChHZW5l
cmF0ZUltcGxlbWVudGF0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgv
VjhGbG9hdDY0QXJyYXkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhGbG9hdDY0QXJyYXk6Okdl
dFJhd1RlbXBsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RmxvYXQ2NEFycmF5OjpHZXRUZW1w
bGF0ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEFjdGl2ZURP
TU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RBY3RpdmVET01PYmplY3Q6Okdl
dFJhd1RlbXBsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdEFjdGl2ZURPTU9iamVjdDo6
R2V0VGVtcGxhdGUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RD
dXN0b21OYW1lZEdldHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RDdXN0b21OYW1l
ZEdldHRlcjo6R2V0UmF3VGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0Q3VzdG9t
TmFtZWRHZXR0ZXI6OkdldFRlbXBsYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVjgvVjhUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOFRl
c3RFdmVudENvbnN0cnVjdG9yOjpHZXRSYXdUZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpW
OFRlc3RFdmVudENvbnN0cnVjdG9yOjpHZXRUZW1wbGF0ZSk6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50VGFyZ2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlY4VGVzdEV2ZW50VGFyZ2V0OjpHZXRSYXdUZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpW
OFRlc3RFdmVudFRhcmdldDo6R2V0VGVtcGxhdGUpOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9WOC9WOFRlc3RJbnRlcmZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0
SW50ZXJmYWNlOjpHZXRSYXdUZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RJbnRl
cmZhY2U6OkdldFRlbXBsYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgv
VjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOFRl
c3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjpHZXRSYXdUZW1wbGF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpWOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjpHZXRUZW1wbGF0ZSk6CisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6VjhUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6R2V0UmF3VGVtcGxhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6R2V0VGVtcGxhdGUp
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VjhUZXN0T2JqOjpHZXRSYXdUZW1wbGF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpWOFRlc3RPYmo6OkdldFRlbXBsYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlY4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6R2V0UmF3
VGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlOjpHZXRUZW1wbGF0ZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvTlBWOE9iamVj
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmcmVlVjhOUE9iamVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpucENyZWF0ZVY4U2NyaXB0T2JqZWN0KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3Jp
cHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmNs
ZWFyU2NyaXB0T2JqZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpj
bGVhbnVwU2NyaXB0T2JqZWN0c0ZvclBsdWdpbik6CisgICAgICAgICogYmluZGluZ3MvdjgvU2Vy
aWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOERPTU1hcC5o
OgorICAgICAgICAoV2ViQ29yZTo6V2Vha1JlZmVyZW5jZU1hcDo6cmVtb3ZlSWZQcmVzZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OldlYWtSZWZlcmVuY2VNYXA6OnZpc2l0KToKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9N
V2luZG93U2hlbGw6OmRpc3Bvc2VDb250ZXh0SGFuZGxlcyk6CisgICAgICAgICogYmluZGluZ3Mv
djgvVjhHQ0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZW51bWVyYXRlR2xvYmFs
SGFuZGxlcyk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhQcm94eS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpWOFByb3h5OjpldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCk6CisgICAgICAgIChXZWJD
b3JlOjpWOFByb3h5OjpzZXRJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4pOgorICAgICAgICAo
V2ViQ29yZTo6VjhQcm94eTo6cmVzZXRJc29sYXRlZFdvcmxkcyk6CisgICAgICAgICogYmluZGlu
Z3MvdjgvbnBydW50aW1lLmNwcDoKKyAgICAgICAgKiBicmlkZ2UvSWRlbnRpZmllclJlcC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJZGVudGlmaWVyUmVwOjpnZXQpOgorICAgICAgICAqIGJyaWRn
ZS9OUF9qc29iamVjdC5jcHA6CisgICAgICAgIChPYmplY3RNYXA6OmFkZCk6CisgICAgICAgIChP
YmplY3RNYXA6OnJlbW92ZSk6CisgICAgICAgICogYnJpZGdlL2puaS9qc2MvSmF2YUNsYXNzSlND
LmNwcDoKKyAgICAgICAgKEphdmFDbGFzczo6fkphdmFDbGFzcyk6CisgICAgICAgICogYnJpZGdl
L3J1bnRpbWVfcm9vdC5jcHA6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpSb290T2JqZWN0Ojpp
bnZhbGlkYXRlKToKKyAgICAgICAgKiBjc3MvQ1NTQ2FudmFzVmFsdWUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTQ2FudmFzVmFsdWU6OmNhbnZhc0NoYW5nZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTQ2FudmFzVmFsdWU6OmNhbnZhc1Jlc2l6ZWQpOgorICAgICAgICAqIGNzcy9DU1NDb21w
dXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y291bnRlclRvQ1NT
VmFsdWUpOgorICAgICAgICAqIGNzcy9DU1NDcm9zc2ZhZGVWYWx1ZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NDcm9zc2ZhZGVWYWx1ZTo6Y3Jvc3NmYWRlQ2hhbmdlZCk6CisgICAgICAgICog
Y3NzL0NTU0ZvbnRGYWNlU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNl
U291cmNlOjpnZXRGb250RGF0YSk6CisgICAgICAgICogY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250U2VsZWN0b3I6OmFkZEZvbnRGYWNlUnVsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NGb250U2VsZWN0b3I6OmdldEZvbnREYXRhKToKKyAgICAgICAg
KiBjc3MvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NJ
bWFnZUdlbmVyYXRvclZhbHVlOjphZGRDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTSW1h
Z2VHZW5lcmF0b3JWYWx1ZTo6cmVtb3ZlQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0lt
YWdlR2VuZXJhdG9yVmFsdWU6OmdldEltYWdlKToKKyAgICAgICAgKiBjc3MvQ1NTU2VnbWVudGVk
Rm9udEZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU2VnbWVudGVkRm9udEZhY2U6Omdl
dEZvbnREYXRhKToKKyAgICAgICAgKiBjc3MvQ1NTU2VsZWN0b3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTU2VsZWN0b3I6OnBhcnNlUHNldWRvVHlwZSk6CisgICAgICAgICogY3NzL0NTU1N0
eWxlQXBwbHlQcm9wZXJ0eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Q291
bnRlcjo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0
eUNvdW50ZXI6OmFwcGx5VmFsdWUpOgorICAgICAgICAqIGNzcy9DU1NTdHlsZVNlbGVjdG9yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmNvbGxlY3RGZWF0dXJlcyk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpydWxlU2V0Rm9yU2NvcGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6YXBwZW5kQXV0aG9yU3R5bGVzaGVl
dHMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6c3dlZXBNYXRjaGVkUHJv
cGVydGllc0NhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmNvbGxl
Y3RNYXRjaGluZ1J1bGVzRm9yTGlzdCk6CisgICAgICAgICogY3NzL0NTU1ZhbHVlUG9vbC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDU1NWYWx1ZVBvb2w6OmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NWYWx1ZVBvb2w6OmNyZWF0ZUNvbG9yVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTVmFsdWVQb29sOjpjcmVhdGVWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NWYWx1ZVBvb2w6OmNyZWF0ZUZvbnRGYW1pbHlWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NWYWx1ZVBvb2w6OmNyZWF0ZUZvbnRGYWNlVmFsdWUpOgorICAgICAgICAqIGNzcy9T
dHlsZVByb3BlcnR5U2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUHJvcGVydHlTZXQ6
OlN0eWxlUHJvcGVydHlTZXQpOgorICAgICAgICAqIGRvbS9DaGVja2VkUmFkaW9CdXR0b25zLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNoZWNrZWRSYWRpb0J1dHRvbnM6OmFkZEJ1dHRvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpDaGVja2VkUmFkaW9CdXR0b25zOjpyZW1vdmVCdXR0b24pOgorICAg
ICAgICAqIGRvbS9DaGlsZExpc3RNdXRhdGlvblNjb3BlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVyOjpjaGls
ZEFkZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0
aW9uQWNjdW11bGF0aW9uUm91dGVyOjp3aWxsUmVtb3ZlQ2hpbGQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXI6Omlu
Y3JlbWVudFNjb3BpbmdMZXZlbCk6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RNdXRhdGlv
blNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlcjo6ZGVjcmVtZW50U2NvcGluZ0xldmVs
KToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnQ6OnBhZ2VHcm91cFVzZXJTaGVldHMpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6Ondp
bmRvd05hbWVkSXRlbXMpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmRvY3VtZW50TmFt
ZWRJdGVtcyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2V0U3RhdGVGb3JOZXdGb3Jt
RWxlbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnRha2VTdGF0ZUZvckZvcm1F
bGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpnZXRDU1NDYW52YXNFbGVtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpnZXRJdGVtcyk6CisgICAgICAgICogZG9t
L0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVu
dE1hcmtlckNvbnRyb2xsZXI6Om1hcmtlckNvbnRhaW5pbmdQb2ludCk6CisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbmRlcmVkUmVjdHNGb3JNYXJrZXJzKToK
KyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVtb3ZlTWFya2Vy
cyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlcGFpbnRN
YXJrZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6aW52
YWxpZGF0ZVJlbmRlcmVkUmVjdHNGb3JNYXJrZXJzSW5SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6c2hvd01hcmtlcnMpOgorICAgICAgICAqIGRvbS9E
b2N1bWVudE9yZGVyZWRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRPcmRlcmVk
TWFwOjpyZW1vdmUpOgorICAgICAgICAqIGRvbS9FdmVudExpc3RlbmVyTWFwLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50TGlzdGVuZXJNYXA6OmV2ZW50VHlwZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6RXZlbnRMaXN0ZW5lck1hcDo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50TGlz
dGVuZXJNYXA6OnJlbW92ZSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudExpc3RlbmVyTWFwOjpm
aW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50TGlzdGVuZXJNYXA6OnJlbW92ZUZpcnN0RXZl
bnRMaXN0ZW5lckNyZWF0ZWRGcm9tTWFya3VwKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50TGlz
dGVuZXJNYXA6OmNvcHlFdmVudExpc3RlbmVyc05vdENyZWF0ZWRGcm9tTWFya3VwVG9UYXJnZXQp
OgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRMaXN0ZW5lckl0ZXJhdG9yOjpuZXh0TGlzdGVuZXIp
OgorICAgICAgICAqIGRvbS9NdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpNdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cDo6aXNPbGRWYWx1ZVJl
cXVlc3RlZCk6CisgICAgICAgIChXZWJDb3JlOjpNdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91
cDo6ZW5xdWV1ZU11dGF0aW9uUmVjb3JkKToKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpOb2RlOjpkdW1wU3RhdGlzdGljcyk6CisgICAgICAgIChXZWJDb3JlOjpO
b2RlOjpjbGVhclJhcmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmdldEVsZW1lbnRz
QnlUYWdOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmdldEVsZW1lbnRzQnlUYWdOYW1l
TlMpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Z2V0RWxlbWVudHNCeU5hbWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Tm9kZTo6Z2V0RWxlbWVudHNCeUNsYXNzTmFtZSk6CisgICAgICAgIChXZWJD
b3JlOjpOb2RlTGlzdHNOb2RlRGF0YTo6aW52YWxpZGF0ZUNhY2hlcyk6CisgICAgICAgIChXZWJD
b3JlOjpOb2RlTGlzdHNOb2RlRGF0YTo6aW52YWxpZGF0ZUNhY2hlc1RoYXREZXBlbmRPbkF0dHJp
YnV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Y29sbGVjdE1hdGNoaW5nT2JzZXJ2ZXJz
Rm9yTXV0YXRpb24pOgorICAgICAgICAqIGRvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UHJvY2Vzc2luZ0luc3RydWN0aW9uOjpjaGVja1N0eWxlU2hlZXQp
OgorICAgICAgICAqIGRvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OmNhblN1c3BlbmRBY3RpdmVET01PYmplY3Rz
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnN1c3BlbmRBY3Rp
dmVET01PYmplY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6
OnJlc3VtZUFjdGl2ZURPTU9iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0
aW9uQ29udGV4dDo6c3RvcEFjdGl2ZURPTU9iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
aXB0RXhlY3V0aW9uQ29udGV4dDo6YWRqdXN0TWluaW11bVRpbWVySW50ZXJ2YWwpOgorICAgICAg
ICAqIGRvbS9TcGFjZVNwbGl0U3RyaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNwYWNlU3Bs
aXRTdHJpbmdEYXRhOjpjcmVhdGUpOgorICAgICAgICAqIGRvbS9TdHlsZWRFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlZEVsZW1lbnQ6OnVwZGF0ZUF0dHJpYnV0ZVN0eWxlKToK
KyAgICAgICAgKiBodG1sL0hUTUxDb2xsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxDb2xsZWN0aW9uOjphcHBlbmQpOgorICAgICAgICAqIGluc3BlY3Rvci9Db2RlR2VuZXJhdG9y
SW5zcGVjdG9yLnB5OgorICAgICAgICAqIGluc3BlY3Rvci9ET01QYXRjaFN1cHBvcnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RE9NUGF0Y2hTdXBwb3J0OjpkaWZmKToKKyAgICAgICAgKFdlYkNv
cmU6OkRPTVBhdGNoU3VwcG9ydDo6aW5uZXJQYXRjaENoaWxkcmVuKToKKyAgICAgICAgKFdlYkNv
cmU6OkRPTVBhdGNoU3VwcG9ydDo6cmVtb3ZlQ2hpbGRBbmRNb3ZlVG9OZXcpOgorICAgICAgICAq
IGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjpkaXNjYXJkSW5qZWN0ZWRTY3JpcHRzKToKKyAgICAgICAg
KFdlYkNvcmU6OkluamVjdGVkU2NyaXB0TWFuYWdlcjo6ZGlzY2FyZEluamVjdGVkU2NyaXB0c0Zv
cik6CisgICAgICAgIChXZWJDb3JlOjpJbmplY3RlZFNjcmlwdE1hbmFnZXI6OnJlbGVhc2VPYmpl
Y3RHcm91cCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjplbmFibGUpOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JDU1NBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvclByb2Zp
bGU6OmNvbW1pdFNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yUHJvZmlsZTo6
Y29tbWl0U2VsZWN0b3JUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yUHJvZmlsZTo6
dG9JbnNwZWN0b3JPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6
OmFzSW5zcGVjdG9yU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NB
Z2VudDo6YXNzZXJ0U3R5bGVTaGVldEZvcklkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckNTU0FnZW50OjpkaWRSZW1vdmVET01Ob2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckNTU0FnZW50OjpkaWRNb2RpZnlET01BdHRyKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVj
dG9yQ29uc29sZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnNvbGVB
Z2VudDo6c3RvcFRpbWluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb25zb2xlQWdl
bnQ6OmNvdW50KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6Om5vZGVGb3JJZCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6cGVyZm9ybVNlYXJjaCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6Z2V0U2VhcmNoUmVzdWx0cyk6CisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6d2lsbFNlbmRYTUxIdHRwUmVxdWVzdCk6Cisg
ICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmNsZWFyRnJvbnRlbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjplbmFibGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpzdG9yYWdlSWQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpnZXRET01TdG9yYWdlUmVzb3Vy
Y2VGb3JJZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmRp
ZFVzZURPTVN0b3JhZ2UpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFn
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmVuYWJs
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjpkYXRhYmFzZUlk
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmZpbmRCeUZpbGVO
YW1lKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmRhdGFiYXNl
Rm9ySWQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnRC
eVVybCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZW1vdmVC
cmVha3BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnJl
c29sdmVCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ6OnNlYXJjaEluQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50OjpnZXRTY3JpcHRTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVi
dWdnZXJBZ2VudDo6ZGlkUGFyc2VTb3VyY2UpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0
b3JNZW1vcnlBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2Vu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjYWNoZWRSZXNvdXJjZXNGb3JGcmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6OmRpZENsZWFyV2luZG93T2JqZWN0SW5X
b3JsZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6OmZyYW1lRGV0YWNo
ZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmdldFByb2ZpbGVIZWFkZXJz
KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUHJvZmls
ZXJBZ2VudDo6Z2V0UHJvZmlsZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclJlc291
cmNlQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRPYmplY3RGb3JIZWFkZXJzKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlc291cmNlQWdlbnQ6OndpbGxTZW5kUmVxdWVz
dCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvclN0YXRlOjpnZXRCb29sZWFuKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvclN0YXRlOjpnZXRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3Rh
dGU6OmdldExvbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3RhdGU6OmdldERvdWJs
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdGF0ZTo6Z2V0T2JqZWN0KToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JTdHlsZTo6c3R5bGVXaXRoUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JTdHlsZVNoZWV0OjppbnNwZWN0b3JTdHlsZUZvcklkKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXQ6OmVuc3VyZVNvdXJjZURhdGEpOgorICAgICAgICAq
IGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yT2JqZWN0OjpnZXQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT2JqZWN0Ojp3cml0
ZUpTT04pOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JXb3JrZXJBZ2VudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JXb3JrZXJBZ2VudDo6d29ya2VyQ29udGV4dFRlcm1p
bmF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yV29ya2VyQWdlbnQ6OmNyZWF0ZVdv
cmtlckZyb250ZW5kQ2hhbm5lbHNGb3JFeGlzdGluZ1dvcmtlcnMpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yV29ya2VyQWdlbnQ6OmRlc3Ryb3lXb3JrZXJGcm9udGVuZENoYW5uZWxzKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvTmV0d29ya1Jlc291cmNlc0RhdGEuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TmV0d29ya1Jlc291cmNlc0RhdGE6OmNsZWFyKToKKyAgICAgICAgKiBsb2FkZXIv
Q3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzU2ltcGxl
Q3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUFjY2Vz
c0NvbnRyb2xQcmVmbGlnaHRSZXF1ZXN0KToKKyAgICAgICAgKiBsb2FkZXIvQ3Jvc3NPcmlnaW5Q
cmVmbGlnaHRSZXN1bHRDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcm9zc09yaWdpblBy
ZWZsaWdodFJlc3VsdENhY2hlSXRlbTo6YWxsb3dzQ3Jvc3NPcmlnaW5IZWFkZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGU6OmNhblNraXBQcmVm
bGlnaHQpOgorICAgICAgICAqIGxvYWRlci9Eb2N1bWVudExvYWRlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6Z2V0U3VicmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50TG9hZGVyOjpzdWJzdGl0dXRlUmVzb3VyY2VEZWxpdmVyeVRpbWVyRmlyZWQp
OgorICAgICAgICAqIGxvYWRlci9NYWluUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6TWFpblJlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAq
IGxvYWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVz
b3VyY2VMb2FkU2NoZWR1bGVyOjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyk6CisgICAgICAgICogbG9h
ZGVyL1N1YmZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN1YmZyYW1lTG9hZGVy
OjpjcmVhdGVKYXZhQXBwbGV0V2lkZ2V0KToKKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBw
bGljYXRpb25DYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlOjpy
ZW1vdmVSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlOjpjbGVh
clN0b3JhZ2VJRCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlOjpkdW1wKToK
KyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6ZGlkRmluaXNoTG9hZGluZ01h
bmlmZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6c3RhcnRM
b2FkaW5nRW50cnkpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUdyb3VwOjph
ZGRFbnRyeSk6CisgICAgICAgICogbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVIb3N0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpmaWxsUmVzb3Vy
Y2VMaXN0KToKKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVJlc291
cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6ZXN0
aW1hdGVkU2l6ZUluU3RvcmFnZSk6CisgICAgICAgICogbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0
aW9uQ2FjaGVTdG9yYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVT
dG9yYWdlOjpmaW5kT3JDcmVhdGVDYWNoZUdyb3VwKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxp
Y2F0aW9uQ2FjaGVTdG9yYWdlOjpjYWNoZUdyb3VwRm9yVVJMKToKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpmYWxsYmFja0NhY2hlR3JvdXBGb3JVUkwpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjplbXB0eSk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmVDb3B5T2ZDYWNoZSk6CisgICAgICAg
ICogbG9hZGVyL2FyY2hpdmUvQXJjaGl2ZUZhY3RvcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
QXJjaGl2ZUZhY3Rvcnk6OnJlZ2lzdGVyS25vd25BcmNoaXZlTUlNRVR5cGVzKToKKyAgICAgICAg
KiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q2FjaGVkUmF3UmVzb3VyY2U6OmNhblJldXNlKToKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2Fj
aGVkUmVzb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2U6OnN3aXRj
aENsaWVudHNUb1JldmFsaWRhdGVkUmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVk
UmVzb3VyY2U6OnVwZGF0ZVJlc3BvbnNlQWZ0ZXJSZXZhbGlkYXRpb24pOgorICAgICAgICAqIGxv
YWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlci5oOgorICAgICAgICAoV2ViQ29y
ZTo6Q2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXI6OkNhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2Vy
KToKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6On5DYWNoZWRSZXNvdXJjZUxvYWRl
cik6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVzdFJlc291
cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlTG9hZGVyOjpzZXRBdXRvTG9h
ZEltYWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVtb3Zl
Q2FjaGVkUmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6
OmdhcmJhZ2VDb2xsZWN0RG9jdW1lbnRSZXNvdXJjZXNUaW1lckZpcmVkKToKKyAgICAgICAgKiBs
b2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVtb3J5Q2Fj
aGU6OnJlbW92ZVJlc291cmNlc1dpdGhPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6TWVtb3J5
Q2FjaGU6OmdldE9yaWdpbnNXaXRoQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVtb3J5Q2Fj
aGU6OmdldFN0YXRpc3RpY3MpOgorICAgICAgICAoV2ViQ29yZTo6TWVtb3J5Q2FjaGU6OnNldERp
c2FibGVkKToKKyAgICAgICAgKiBsb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SWNvbkRhdGFiYXNlOjpyZW1vdmVBbGxJY29ucyk6CisgICAgICAgIChXZWJD
b3JlOjpJY29uRGF0YWJhc2U6Omljb25SZWNvcmRDb3VudFdpdGhEYXRhKToKKyAgICAgICAgKiBw
YWdlL0RPTVdpbmRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01XaW5kb3c6OmRpc3BhdGNo
QWxsUGVuZGluZ0JlZm9yZVVubG9hZEV2ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpET01XaW5k
b3c6OmRpc3BhdGNoQWxsUGVuZGluZ1VubG9hZEV2ZW50cyk6CisgICAgICAgICogcGFnZS9FdmVu
dEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpoYW5kbGVUb3Vj
aEV2ZW50KToKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lOjppbmplY3RVc2VyU2NyaXB0cyk6CisgICAgICAgICogcGFnZS9QYWdlR3JvdXAuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UGFnZUdyb3VwOjpwYWdlR3JvdXApOgorICAgICAgICAoV2ViQ29y
ZTo6UGFnZUdyb3VwOjpjbG9zZUxvY2FsU3RvcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpQYWdl
R3JvdXA6OmNsZWFyTG9jYWxTdG9yYWdlRm9yQWxsT3JpZ2lucyk6CisgICAgICAgIChXZWJDb3Jl
OjpQYWdlR3JvdXA6OmNsZWFyTG9jYWxTdG9yYWdlRm9yT3JpZ2luKToKKyAgICAgICAgKFdlYkNv
cmU6OlBhZ2VHcm91cDo6c3luY0xvY2FsU3RvcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpQYWdl
R3JvdXA6OmFkZFVzZXJTY3JpcHRUb1dvcmxkKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VHcm91
cDo6YWRkVXNlclN0eWxlU2hlZXRUb1dvcmxkKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VHcm91
cDo6cmVtb3ZlVXNlclNjcmlwdEZyb21Xb3JsZCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlR3Jv
dXA6OnJlbW92ZVVzZXJTdHlsZVNoZWV0RnJvbVdvcmxkKToKKyAgICAgICAgKiBwYWdlL1BhZ2VT
ZXJpYWxpemVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VTZXJpYWxpemVyOjp1cmxGb3JC
bGFua0ZyYW1lKToKKyAgICAgICAgKiBwYWdlL1NlY3VyaXR5UG9saWN5LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNlY3VyaXR5UG9saWN5OjphZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeSk6
CisgICAgICAgIChXZWJDb3JlOjpTZWN1cml0eVBvbGljeTo6cmVtb3ZlT3JpZ2luQWNjZXNzV2hp
dGVsaXN0RW50cnkpOgorICAgICAgICAqIHBhZ2UvU2V0dGluZ3MuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6c2V0R2VuZXJpY0ZvbnRGYW1pbHlNYXApOgorICAgICAgICAoV2ViQ29yZTo6Z2V0R2Vu
ZXJpY0ZvbnRGYW1pbHlGb3JTY3JpcHQpOgorICAgICAgICAqIHBhZ2UvU3BlZWNoSW5wdXQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U3BlZWNoSW5wdXQ6OnJlZ2lzdGVyTGlzdGVuZXIpOgorICAg
ICAgICAqIHBhZ2UvV2luZG93RmVhdHVyZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2luZG93
RmVhdHVyZXM6OmJvb2xGZWF0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OldpbmRvd0ZlYXR1cmVz
OjpmbG9hdEZlYXR1cmUpOgorICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRy
b2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6
OnVwZGF0ZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQ29udHJvbGxl
clByaXZhdGU6OnN1c3BlbmRBbmltYXRpb25zRm9yRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnJlc3VtZUFuaW1hdGlvbnNGb3JEb2N1bWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6bnVtYmVy
T2ZBY3RpdmVBbmltYXRpb25zKToKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVB
bmltYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjpjbGVh
clJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRl
VHJhbnNpdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjp1cGRh
dGVLZXlmcmFtZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0
aW9uOjphbmltYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlvbjo6Z2V0
QW5pbWF0ZWRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb246OnNl
dEFuaW1hdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb246OnRpbWVU
b05leHRTZXJ2aWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlvbjo6Z2V0
QW5pbWF0aW9uRm9yUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0
aW9uOjpzdXNwZW5kQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmlt
YXRpb246OnJlc3VtZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5p
bWF0aW9uOjpvdmVycmlkZUltcGxpY2l0QW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpD
b21wb3NpdGVBbmltYXRpb246OnJlc3VtZU92ZXJyaWRkZW5JbXBsaWNpdEFuaW1hdGlvbnMpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjppc0FuaW1hdGluZ1Byb3BlcnR5
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlvbjo6bnVtYmVyT2ZBY3RpdmVB
bmltYXRpb25zKToKKyAgICAgICAgKiBwbGF0Zm9ybS9MYW5ndWFnZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpsYW5ndWFnZURpZENoYW5nZSk6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vSFJU
RkVsZXZhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRDb25jYXRlbmF0ZWRJbXB1bHNl
UmVzcG9uc2VzRm9yU3ViamVjdCk6CisgICAgICAgICogcGxhdGZvcm0vYmxhY2tiZXJyeS9Db29r
aWVNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZU1hbmFnZXI6OmdlbmVyYXRl
SHRtbEZyYWdtZW50Rm9yQ29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVNYW5hZ2Vy
OjpyZW1vdmVBbGxDb29raWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ibGFja2JlcnJ5L0Nvb2tp
ZU1hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVNYXA6OnJlbW92ZU9sZGVzdENvb2tp
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVNYXA6OmdldEFsbENoaWxkQ29va2llcyk6Cisg
ICAgICAgICogcGxhdGZvcm0vY2YvQmluYXJ5UHJvcGVydHlMaXN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkJpbmFyeVByb3BlcnR5TGlzdFBsYW46OndyaXRlSW50ZWdlckFycmF5KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYkhUVFBMb2FkSW5mby5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OmFkZEhlYWRlcik6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vc3Vw
cG9ydC9XZWJVUkxSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMUmVxdWVzdDo6
dmlzaXRIVFRQSGVhZGVyRmllbGRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9zdXBw
b3J0L1dlYlVSTFJlc3BvbnNlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMUmVzcG9uc2U6
OmFkZEhUVFBIZWFkZXJGaWVsZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFJlc3BvbnNlOjp2
aXNpdEhUVFBIZWFkZXJGaWVsZHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRD
YWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldENhY2hlZEZvbnRQbGF0
Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRDYWNoZWRGb250RGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnJlbGVhc2VGb250RGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlVHJlZU5vZGUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6R2x5cGhQYWdlVHJlZU5vZGU6OnRyZWVHbHlwaFBhZ2VDb3VudCk6CisgICAgICAgIChX
ZWJDb3JlOjpHbHlwaFBhZ2VUcmVlTm9kZTo6cGFnZUNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkdseXBoUGFnZVRyZWVOb2RlOjpwcnVuZVRyZWVDdXN0b21Gb250RGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpHbHlwaFBhZ2VUcmVlTm9kZTo6cHJ1bmVUcmVlRm9udERhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6R2x5cGhQYWdlVHJlZU5vZGU6OnBydW5lQ3VzdG9tRm9udERhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6R2x5cGhQYWdlVHJlZU5vZGU6OnBydW5lRm9udERhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6R2x5cGhQYWdlVHJlZU5vZGU6OnNob3dTdWJ0cmVlKToKKyAgICAgICAgKHNob3dH
bHlwaFBhZ2VUcmVlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5n
U3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRCYWNraW5nU3RvcmU6OnVwZGF0ZVRp
bGVCdWZmZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkQmFja2luZ1N0b3JlOjpyZXNpemVF
ZGdlVGlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRCYWNraW5nU3RvcmU6OnNldEtlZXBS
ZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vY2YvTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0YuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QVZGV3Jh
cHBlcjo6YXZmV3JhcHBlckZvckNhbGxiYWNrQ29udGV4dCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclRpbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyVGlsZXI6OnVwbG9hZFRleHR1cmVzSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJUaWxlcjo6YWRkVGlsZUpvYik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyOjpiaW5k
Q29udGVudHNUZXh0dXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGlj
c0xheWVyQ0EuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjptb3ZlT3JD
b3B5QW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnBhdXNl
QW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6bGF5ZXJEaWRE
aXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlR2VvbWV0
cnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjp1cGRhdGVUcmFuc2Zvcm0p
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjp1cGRhdGVDaGlsZHJlblRyYW5z
Zm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZU1hc2tzVG9C
b3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjp1cGRhdGVDb250ZW50
c1Zpc2liaWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjp1cGRhdGVD
b250ZW50c09wYXF1ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnVwZGF0
ZUJhY2tmYWNlVmlzaWJpbGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6
OnVwZGF0ZUZpbHRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjplbnN1
cmVTdHJ1Y3R1cmFsTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjp1
cGRhdGVMYXllckRyYXdzQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVy
Q0E6OnVwZGF0ZUNvbnRlbnRzSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXll
ckNBOjp1cGRhdGVDb250ZW50c1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXll
ckNBOjp1cGRhdGVNYXNrTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNB
Ojp1cGRhdGVMYXllckFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXll
ckNBOjpzZXRBbmltYXRpb25PbkxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXJDQTo6cmVtb3ZlQ0FBbmltYXRpb25Gcm9tTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllckNBOjpwYXVzZUNBQW5pbWF0aW9uT25MYXllcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0xheWVyQ0E6OnN1c3BlbmRBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJDQTo6cmVzdW1lQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0xheWVyQ0E6OmZpbmRPck1ha2VDbG9uZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0xheWVyQ0E6OnNldE9wYWNpdHlJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0xheWVyQ0E6OnVwZGF0ZU9wYWNpdHlPbkxheWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jYS9tYWMvVGlsZUNhY2hlLm1tOgorICAgICAgICAoV2ViQ29yZTo6VGlsZUNhY2hl
OjpzZXRTY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlQ2FjaGU6OnNldEFjY2VsZXJhdGVz
RHJhd2luZyk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlQ2FjaGU6OnNldFRpbGVEZWJ1Z0JvcmRl
cldpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVDYWNoZTo6c2V0VGlsZURlYnVnQm9yZGVy
Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZUNhY2hlOjpyZXZhbGlkYXRlVGlsZXMpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3Bw
OgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyOjphbmltYXRpb25TdGFydGVkKToKKyAgICAgICAg
KHJlc3VibWl0QWxsQW5pbWF0aW9ucyk6CisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXI6OmFuaW1h
dGlvbkZvcktleSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENh
Y2hlQ2hyb21pdW1XaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TG9va3VwQWx0TmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpmb250Q29udGFpbnNDaGFyYWN0ZXIpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRVdGlsc0Nocm9taXVtV2luLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmdldERlcml2ZWRGb250RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6bWFwQW5pbWF0aW9uTmFtZVRvSWQpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYW5hZ2VyOjpyZWxlYXNlVG9rZW4pOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dHVyZU1hbmFnZXI6OnVucHJvdGVjdFRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hbmFnZXI6OnVucHJvdGVjdEFsbFRleHR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYW5hZ2VyOjphbGxvY2F0ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dHVyZU1hbmFnZXI6OnJlcXVlc3RUZXh0dXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGls
ZWRMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKToKKyAgICAgICAgKFdlYkNvcmU6OlRp
bGVkTGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJUcmVlSG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpU
aWxlZExheWVyQ2hyb21pdW06OmludmFsaWRhdGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRp
bGVkTGF5ZXJDaHJvbWl1bTo6cmVzZXRVcGRhdGVTdGF0ZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1hZ2VUcmFja2VyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNDRGFtYWdlVHJhY2tlcjo6dHJhY2tEYW1hZ2VGcm9tTGVmdG92ZXJSZWN0cyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRpbGluZ0RhdGEuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRpbGluZ0RhdGE6OnNldEJvdW5kcyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6c3RhcnRSYXRlTGltaXRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnN0b3BSYXRlTGltaXRlcik6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJQcm9ncmFtLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUZpbHRlclByb2dyYW06Om5vdGlmeUNsaWVudHMpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9HTENvbnRleHRHdGsuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6R0xDb250ZXh0OjpnZXRDb250ZXh0Rm9yV2lkZ2V0KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNraWEuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Z2V0Q2FjaGVkSGFyZmJ1enpGYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OnJlbGVhc2VD
YWNoZWRIYXJmYnV6ekZhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21w
bGV4VGV4dENvbnRyb2xsZXJBVFNVSS5jcHA6CisgICAgICAgIChXZWJDb3JlOjppbml0aWFsaXpl
QVRTVVN0eWxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERh
dGFDb3JlVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6Z2V0Q0ZT
dHJpbmdBdHRyaWJ1dGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxl
Rm9udERhdGFNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6cGxhdGZv
cm1EZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpjYW5SZW5kZXJD
b21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjb21waWxlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6Z2V0U2hhZGVySW5mb0xvZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6Z2V0U2hhZGVyU291cmNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyQW5pbWF0aW9uczo6aGFzQWN0aXZlQW5pbWF0aW9uc09mVHlwZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQW5pbWF0aW9uczo6aGFzUnVubmluZ0FuaW1h
dGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckFuaW1hdGlvbnM6OnBhdXNl
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJBbmltYXRpb25zOjphcHBseSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFyZWRHTERhdGE6OmN1cnJl
bnRTaGFyZWRHTERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMRGF0YTo6
U2hhcmVkR0xEYXRhOjp+U2hhcmVkR0xEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpnZXRTaGFkZXJQcm9ncmFtKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250UGxhdGZvcm1EYXRhLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZpeGVkU2l6ZUZvbnREYXRhOjpjcmVhdGUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2d0ay9EYXRhT2JqZWN0R3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFPYmplY3RHdGs6
OmZvckNsaXBib2FyZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL0d0a0RyYWdBbmREcm9wSGVs
cGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okd0a0RyYWdBbmREcm9wSGVscGVyOjpoYW5kbGVH
ZXREcmFnRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHdGtEcmFnQW5kRHJvcEhlbHBlcjo6aGFu
ZGxlRHJhZ0xlYXZlKToKKyAgICAgICAgKFdlYkNvcmU6Okd0a0RyYWdBbmREcm9wSGVscGVyOjpo
YW5kbGVEcmFnTW90aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Okd0a0RyYWdBbmREcm9wSGVscGVy
OjpoYW5kbGVEcmFnRGF0YVJlY2VpdmVkKToKKyAgICAgICAgKFdlYkNvcmU6Okd0a0RyYWdBbmRE
cm9wSGVscGVyOjpoYW5kbGVEcmFnRHJvcCk6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL1JlbmRl
clRoZW1lR3RrMy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpndGtTdHlsZUNoYW5nZWRDYWxsYmFj
ayk6CisgICAgICAgIChXZWJDb3JlOjpnZXRTdHlsZUNvbnRleHQpOgorICAgICAgICAqIHBsYXRm
b3JtL21hYy9TY3JvbGxiYXJUaGVtZU1hYy5tbToKKyAgICAgICAgKCtbV2ViU2Nyb2xsYmFyUHJl
ZnNPYnNlcnZlciBhcHBlYXJhbmNlUHJlZnNDaGFuZ2VkOl0pOgorICAgICAgICAqIHBsYXRmb3Jt
L25ldHdvcmsvQ3JlZGVudGlhbFN0b3JhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3JlZGVu
dGlhbFN0b3JhZ2U6OnNldCk6CisgICAgICAgIChXZWJDb3JlOjpDcmVkZW50aWFsU3RvcmFnZTo6
Z2V0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0hUVFBIZWFkZXJNYXAuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRUUEhlYWRlck1hcDo6Y29weURhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRUUEhlYWRlck1hcDo6Z2V0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL01JTUVI
ZWFkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TUlNRUhlYWRlcjo6cGFyc2VIZWFkZXIpOgor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdEJhc2U6OmFkZEhUVFBIZWFkZXJGaWVsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3RCYXNlOjphZGRIVFRQSGVhZGVyRmllbGRzKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9uZXR3b3JrL2JsYWNrYmVycnkvTmV0d29ya0pvYi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpO
ZXR3b3JrSm9iOjpub3RpZnlIZWFkZXJzUmVjZWl2ZWQpOgorICAgICAgICAoV2ViQ29yZTo6TmV0
d29ya0pvYjo6aGFuZGxlTm90aWZ5TXVsdGlwYXJ0SGVhZGVyUmVjZWl2ZWQpOgorICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJjZVJlcXVlc3RCbGFja0JlcnJ5LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdDo6aW5pdGlhbGl6ZVBsYXRmb3Jt
UmVxdWVzdCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNG
TmV0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VGaW5hbFJlcXVlc3QpOgorICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0Q0ZOZXQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6c2V0SGVhZGVyRmllbGRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1
cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNl
SGFuZGxlTWFuYWdlcjo6aW5pdGlhbGl6ZUhhbmRsZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9tYWMvUmVzb3VyY2VSZXF1ZXN0TWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0Ojpkb1VwZGF0ZVBsYXRmb3JtUmVxdWVzdCk6CisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9xdC9SZXNvdXJjZVJlcXVlc3RRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3Q6OnRvTmV0d29ya1JlcXVlc3QpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdv
cmsvc291cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlUmVxdWVzdDo6dXBkYXRlU291cE1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0Ojp0b1NvdXBNZXNzYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvUmVzb3VyY2VSZXNwb25zZVNvdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VS
ZXNwb25zZTo6dG9Tb3VwTWVzc2FnZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay93aW4v
UmVzb3VyY2VIYW5kbGVXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6
OnN0YXJ0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9SdW5Mb29wUXQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UnVuTG9vcDo6VGltZXJCYXNlOjp0aW1lckZpcmVkKToKKyAgICAgICAgKiBwbGF0
Zm9ybS90ZXh0L0xvY2FsZVRvU2NyaXB0TWFwcGluZ0RlZmF1bHQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6c2NyaXB0TmFtZVRvQ29kZSk6CisgICAgICAgIChXZWJDb3JlOjpsb2NhbGVUb1Njcmlw
dENvZGVGb3JGb250U2VsZWN0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRFbmNv
ZGluZ1JlZ2lzdHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBydW5lQmxhY2tsaXN0ZWRDb2Rl
Y3MpOgorICAgICAgICAoV2ViQ29yZTo6ZHVtcFRleHRFbmNvZGluZ05hbWVNYXApOgorICAgICAg
ICAqIHBsYXRmb3JtL3RleHQvdHJhbnNjb2Rlci9Gb250VHJhbnNjb2Rlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGb250VHJhbnNjb2Rlcjo6Y29udmVydGVyVHlwZSk6CisgICAgICAgICogcGxh
dGZvcm0vdGV4dC93aW5jZS9UZXh0Q29kZWNXaW5DRS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpM
YW5ndWFnZU1hbmFnZXI6Okxhbmd1YWdlTWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpnZXRD
b2RlUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNXaW5DRTo6cmVnaXN0ZXJFeHRl
bmRlZEVuY29kaW5nTmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjV2luQ0U6OnJl
Z2lzdGVyRXh0ZW5kZWRDb2RlY3MpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjV2luQ0U6
OmVudW1lcmF0ZVN1cHBvcnRlZEVuY29kaW5ncyk6CisgICAgICAgICogcGxhdGZvcm0vd2luL0Ns
aXBib2FyZFV0aWxpdGllc1dpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXREYXRhTWFwSXRl
bSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRDbGlwYm9hcmREYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OnNldENsaXBib2FyZERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9DbGlwYm9hcmRX
aW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkV2luOjp0eXBlcyk6CisgICAgICAg
ICogcGxhdGZvcm0vd2luL0ZpbGVTeXN0ZW1XaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2Fj
aGVkU3RvcmFnZURpcmVjdG9yeSk6CisgICAgICAgICogcGxhdGZvcm0vd2luL1J1bkxvb3BXaW4u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UnVuTG9vcDo6VGltZXJCYXNlOjp0aW1lckZpcmVkKToK
KyAgICAgICAgKiBwbGF0Zm9ybS93aW4vV0NEYXRhT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OldDRGF0YU9iamVjdDo6Y3JlYXRlSW5zdGFuY2UpOgorICAgICAgICAqIHBsYXRmb3JtL3dp
bmNlL01JTUVUeXBlUmVnaXN0cnlXaW5DRS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNSU1FVHlw
ZVJlZ2lzdHJ5OjpnZXRQcmVmZXJyZWRFeHRlbnNpb25Gb3JNSU1FVHlwZSk6CisgICAgICAgICog
cGxhdGZvcm0vd3gvQ29udGV4dE1lbnVXeC5jcHA6CisgICAgICAgIChDb250ZXh0TWVudTo6YXBw
ZW5kSXRlbSk6CisgICAgICAgICogcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6cmVmcmVzaCk6CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5EYXRhYmFzZTo6TUlNRVR5cGVGb3JFeHRlbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6
UGx1Z2luRGF0YWJhc2U6OnJlbW92ZSk6CisgICAgICAgICogcGx1Z2lucy9QbHVnaW5NYWluVGhy
ZWFkU2NoZWR1bGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbk1haW5UaHJlYWRTY2hl
ZHVsZXI6OnNjaGVkdWxlQ2FsbCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5NYWluVGhyZWFk
U2NoZWR1bGVyOjpkaXNwYXRjaENhbGxzKToKKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpblN0cmVh
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5TdHJlYW06OnN0YXJ0U3RyZWFtKToKKyAg
ICAgICAgKiBwbHVnaW5zL2JsYWNrYmVycnkvUGx1Z2luRGF0YUJsYWNrQmVycnkuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YTo6aW5pdFBsdWdpbnMpOgorICAgICAgICAqIHBsdWdp
bnMvZWZsL1BsdWdpbkRhdGFFZmwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YTo6
aW5pdFBsdWdpbnMpOgorICAgICAgICAqIHBsdWdpbnMvd3gvUGx1Z2luRGF0YVd4LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGE6OmluaXRQbHVnaW5zKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvSW5saW5lRmxvd0JveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVGbG93Qm94
OjpyZXF1aXJlc0lkZW9ncmFwaGljQmFzZWxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5l
Rmxvd0JveDo6YWRkVGV4dEJveFZpc3VhbE92ZXJmbG93KToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmNsZWFyRmxv
YXRzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnNldExvZ2ljYWxXaWR0aEZvclRleHRSdW4pOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpjYWNo
ZWRTaXplRm9yT3ZlcmZsb3dDbGlwKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9k
ZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VRdWFsaXR5Q29udHJvbGxlcjo6
aGlnaFF1YWxpdHlSZXBhaW50VGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVF1
YWxpdHlDb250cm9sbGVyOjpzaG91bGRQYWludEF0TG93UXVhbGl0eSk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQ291bnRl
cjo6ZGVzdHJveUNvdW50ZXJOb2Rlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJDb3VudGVy
OjpkZXN0cm95Q291bnRlck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6dXBkYXRlQ291bnRlcnMp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQ291bnRlcjo6cmVuZGVyZXJTdHlsZUNoYW5nZWQp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OnNldFJlZ2lvblJhbmdlRm9yQm94KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OmdldFJlZ2lvblJhbmdlRm9yQm94KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXI6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OnBlcmZvcm1PdmVybGFwVGVzdHMpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTmFtZWRGbG93VGhyZWFkOjpkZXBlbmRzT24pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTmFtZWRGbG93VGhyZWFkOjpwdXNoRGVwZW5kZW5jaWVzKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJl
Z2lvbjo6c2V0UmVnaW9uQm94ZXNSZWdpb25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJSZWdpb246OnJlc3RvcmVSZWdpb25Cb3hlc09yaWdpbmFsU3R5bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyUmVnaW9uOjpzZXRSZW5kZXJCb3hSZWdpb25JbmZvKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclJlZ2lvbjo6cmVuZGVyQm94UmVnaW9uU3R5bGUpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGFibGVTZWN0aW9uOjpjYWNoZWRDb2xsYXBzZWRCb3JkZXIpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJUaGVtZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpz
eXN0ZW1Db2xvcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6c2VsZWN0aW9uQm91bmRzKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclZpZXc6OnNldFNlbGVjdGlvbik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
cldpZGdldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJXaWRnZXQ6OnJlc3VtZVdpZGdl
dEhpZXJhcmNoeVVwZGF0ZXMpOgorICAgICAgICAqIHJlbmRlcmluZy9Sb290SW5saW5lQm94LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJvb3RJbmxpbmVCb3g6OmFzY2VudEFuZERlc2NlbnRGb3JC
b3gpOgorICAgICAgICAqIHJlbmRlcmluZy9WZXJ0aWNhbFBvc2l0aW9uQ2FjaGUuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlZlcnRpY2FsUG9zaXRpb25DYWNoZTo6Z2V0KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU1ZHSW5saW5lVGV4dDo6Y2hhcmFjdGVyU3RhcnRzTmV3VGV4dENodW5rKToKKyAgICAgICAg
KiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2Vk
KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudDo6YXBwbHlSZXNv
dXJjZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuOjphcHBseVJl
c291cmNlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlc0NhY2hlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1Jlc291cmNlc0NhY2hlOjpyZXNvdXJjZURlc3Ryb3llZCk6
CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSb290SW5saW5lQm94LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OnN3YXBJdGVtc0luTGF5b3V0QXR0cmlidXRlcyk6CisgICAgICAgICogcmVuZGVy
aW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRlcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdUZXh0TGF5b3V0QXR0cmlidXRlczo6ZHVtcCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9T
VkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
VGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyOjpidWlsZExheW91dEF0dHJpYnV0ZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyOjpmaWxsQ2hhcmFj
dGVyRGF0YU1hcCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5l
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRMYXlvdXRFbmdpbmU6OmxheW91dFRleHRP
bkxpbmVPclBhdGgpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3NCdWls
ZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRNZXRyaWNzQnVpbGRlcjo6bWVhc3Vy
ZVRleHRSZW5kZXJlcik6CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFTeW5jOjpzeW5jVGltZXJGaXJlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYVN5bmM6OnBlcmZvcm1JbXBvcnQpOgorICAgICAgICAo
V2ViQ29yZTo6U3RvcmFnZUFyZWFTeW5jOjpzeW5jKToKKyAgICAgICAgKiBzdG9yYWdlL1N0b3Jh
Z2VNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU1hcDo6a2V5KToKKyAgICAgICAg
KFdlYkNvcmU6OlN0b3JhZ2VNYXA6OnNldEl0ZW0pOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFn
ZU5hbWVzcGFjZUltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU5hbWVzcGFjZUlt
cGw6OmxvY2FsU3RvcmFnZU5hbWVzcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlTmFt
ZXNwYWNlSW1wbDo6Y29weSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNlSW1w
bDo6Y2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU5hbWVzcGFjZUltcGw6OmNsZWFy
QWxsT3JpZ2luc0ZvckRlbGV0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VOYW1lc3Bh
Y2VJbXBsOjpzeW5jKToKKyAgICAgICAgKiBzdmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlQW5pbWF0aW9u
RWxlbWVudEZyb21UYXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRG9jdW1lbnRFeHRlbnNp
b25zOjphZGRQZW5kaW5nUmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRG9jdW1lbnRF
eHRlbnNpb25zOjppc0VsZW1lbnRQZW5kaW5nUmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlRWxlbWVudEZyb21QZW5kaW5nUmVzb3VyY2Vz
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0RvY3VtZW50RXh0ZW5zaW9uczo6c2V0T2ZFbGVtZW50
c1JlZmVyZW5jaW5nVGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0RvY3VtZW50RXh0ZW5z
aW9uczo6cmVtb3ZlQWxsVGFyZ2V0UmVmZXJlbmNlc0ZvckVsZW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZW1vdmVBbGxFbGVtZW50UmVmZXJlbmNlc0Zv
clRhcmdldCk6CisgICAgICAgICogc3ZnL1NWR0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHRWxlbWVudDo6flNWR0VsZW1lbnQpOgorICAgICAgICAqIHN2Zy9hbmltYXRpb24vU01J
TFRpbWVDb250YWluZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWVDb250YWluZXI6
OmJhc2VWYWx1ZUZvcik6CisgICAgICAgIChXZWJDb3JlOjpTTUlMVGltZUNvbnRhaW5lcjo6dXBk
YXRlQW5pbWF0aW9ucyk6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR0ltYWdlQ2FjaGUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2VDYWNoZTo6flNWR0ltYWdlQ2FjaGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2VDYWNoZTo6cmVtb3ZlUmVuZGVyZXJGcm9tQ2FjaGUpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2VDYWNoZTo6cmVxdWVzdGVkU2l6ZUFuZFpvb20pOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2VDYWNoZTo6aW1hZ2VDb250ZW50Q2hhbmdlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZUNhY2hlOjpyZWRyYXcpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHSW1hZ2VDYWNoZTo6bG9va3VwT3JDcmVhdGVCaXRtYXBJbWFnZUZvclJlbmRlcmVyKToK
KyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjplZmZlY3RSZWZlcmVuY2VzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmFkZEJ1aWx0aW5FZmZlY3RzKToKKyAgICAg
ICAgKiBzdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5Lmg6CisgICAgICAgIChXZWJD
b3JlOjpTVkdBbmltYXRlZFByb3BlcnR5Ojp+U1ZHQW5pbWF0ZWRQcm9wZXJ0eSk6CisgICAgICAg
ICogc3ZnL3Byb3BlcnRpZXMvU1ZHQXR0cmlidXRlVG9Qcm9wZXJ0eU1hcC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdBdHRyaWJ1dGVUb1Byb3BlcnR5TWFwOjphZGRQcm9wZXJ0aWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0F0dHJpYnV0ZVRvUHJvcGVydHlNYXA6OnN5bmNocm9uaXplUHJv
cGVydGllcyk6CisgICAgICAgICogd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OldvcmtlckNvbnRleHQ6Omhhc1BlbmRpbmdBY3Rpdml0eSk6CisgICAgICAgICog
d29ya2Vycy9Xb3JrZXJFdmVudFF1ZXVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckV2
ZW50UXVldWU6OmNsb3NlKToKKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OnNldFJlcXVlc3RIZWFkZXJJbnRlcm5hbCk6
CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6Z2V0QWxsUmVzcG9uc2VIZWFkZXJz
KToKKyAgICAgICAgKiB4bWwvWFBhdGhGdW5jdGlvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
WFBhdGg6OmNyZWF0ZUZ1bmN0aW9uKToKKyAgICAgICAgKiB4bWwvWFBhdGhQYXJzZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OmlzQXhpc05hbWUpOgorICAgICAgICAqIHhtbC9YU0xU
UHJvY2Vzc29yTGlieHNsdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp4c2x0UGFyYW1BcnJheUZy
b21QYXJhbWV0ZXJNYXApOgorICAgICAgICAqIHhtbC9YU0xUUHJvY2Vzc29yUXQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6WFNMVFByb2Nlc3Nvcjo6dHJhbnNmb3JtVG9TdHJpbmcpOgorCiAyMDEy
LTA0LTAyICBBbGV4YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgV2ViIEluc3BlY3RvcjogSW1wbGVtZW50IGZyb250ZW5kIGZvciBkZXZpY2UgbWV0cmljcyBl
bXVsYXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQ2hhbmdlTG9nCmluZGV4IGQyM2ZlOTY1NmYzMjA3
YWI3NDc3OTM5NDhkNjQwMjdmYzZmN2QwZmYuLmU4YTdmODY0ZmU0MGI4MjEwMTA2YTkzZTk2MWUy
MTdmMDUyZWUwYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5
IEBACisyMDEyLTA0LTAyICBDYWlvIE1hcmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gIDxjYWlvLm9s
aXZlaXJhQG9wZW5ib3NzYS5vcmc+CisKKyAgICAgICAgUmVuYW1lIGZpcnN0L3NlY29uZCB0byBr
ZXkvdmFsdWUgaW4gSGFzaE1hcCBpdGVyYXRvcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTgyNzg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBBcGkvQmFja2luZ1N0b3JlLmNwcDoKKyAgICAgICAgKEJs
YWNrQmVycnk6OldlYktpdDo6QmFja2luZ1N0b3JlUHJpdmF0ZTo6c2V0QmFja2luZ1N0b3JlUmVj
dCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkJhY2tpbmdTdG9yZVByaXZhdGU6OnZp
c2libGVUaWxlc1JlY3QpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpCYWNraW5nU3Rv
cmVQcml2YXRlOjpyZXNldFRpbGVzKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6QmFj
a2luZ1N0b3JlUHJpdmF0ZTo6dXBkYXRlVGlsZXMpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2Vi
S2l0OjpCYWNraW5nU3RvcmVQcml2YXRlOjp1cGRhdGVUaWxlc0ZvclNjcm9sbE9yTm90UmVuZGVy
ZWRSZWdpb24pOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpCYWNraW5nU3RvcmVQcml2
YXRlOjptYXBGcm9tVHJhbnNmb3JtZWRDb250ZW50c1RvVGlsZXMpOgorICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50QmxhY2tCZXJyeS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnk6OmRpc3BhdGNoV2lsbFNlbmRSZXF1ZXN0
KToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6OmNhbmNlbCk6
CisgICAgICAgIChXZWJDb3JlOjpOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpvblBlcm1pc3Np
b24pOgorICAgICAgICAoV2ViQ29yZTo6Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6bm90aWZp
Y2F0aW9uQ2xpY2tlZCk6CisgICAgICAgICogV2ViS2l0U3VwcG9ydC9GYXRGaW5nZXJzLmNwcDoK
KyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6RmF0RmluZ2Vyczo6ZmluZEJlc3RQb2ludCk6
CisgICAgICAgICogV2ViS2l0U3VwcG9ydC9GcmFtZUxheWVycy5jcHA6CisgICAgICAgIChCbGFj
a0JlcnJ5OjpXZWJLaXQ6OkZyYW1lTGF5ZXJzOjpyZW1vdmVMYXllckJ5RnJhbWUpOgorICAgICAg
ICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpGcmFtZUxheWVyczo6Y29tbWl0T25XZWJLaXRUaHJlYWQp
OgorCiAyMDEyLTA0LTAxICBBcnZpZCBOaWxzc29uICA8YW5pbHNzb25AcmltLmNvbT4KIAogICAg
ICAgICBbQmxhY2tCZXJyeV0gU2ltcGxpZnkgdGhlIGNvZGUgdGhhdCBnZXRzIGFjY2VsZXJhdGVk
IGNvbXBvc2l0aW5nIG91dHB1dCBvbnRvIHRoZSBzY3JlZW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKaW5kZXggNmE3ODcyMzJjNzk2NDBmMWNkZDQxZWYxYTM0Mzg3NTE0MTEzNDdhZS4uOWM0Njlh
NzYyZWQ1OGEzYTI1YzQ1YTI5YjA3MGQwZGE4NGMzZDc3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMi0wNC0wMiAgQ2FpbyBNYXJjZWxvIGRlIE9saXZl
aXJhIEZpbGhvICA8Y2Fpby5vbGl2ZWlyYUBvcGVuYm9zc2Eub3JnPgorCisgICAgICAgIFJlbmFt
ZSBmaXJzdC9zZWNvbmQgdG8ga2V5L3ZhbHVlIGluIEhhc2hNYXAgaXRlcmF0b3JzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Mjc4NAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3JjL1dlYkdlb2xvY2F0
aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkdlb2xvY2F0aW9u
UGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyOjpyZW1vdmUpOgorICAgICAgICAqIHRlc3RzL1dlYlNv
Y2tldEV4dGVuc2lvbkRpc3BhdGNoZXJUZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRFU1Rf
Rik6CisKIDIwMTItMDQtMDIgIEtpbnVrbyBZYXN1ZGEgIDxraW51a29AY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgY2hyb21pdW0gREVQUy4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxv
ZwppbmRleCA2ODVkNzk0MzViMGNmYjRkNTI2NTBmMzVkNmRlMjQ1ZDQ1MGU2MDU5Li5hNDg5OTA3
MzdkNTQzZDVkNWVkNzM3Y2EzY2FmZTRiMjcyODcwZmQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2d0ay9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTcgQEAKKzIwMTItMDQtMDIgIENhaW8gTWFyY2VsbyBkZSBPbGl2ZWlyYSBGaWxobyAg
PGNhaW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KKworICAgICAgICBSZW5hbWUgZmlyc3Qvc2Vj
b25kIHRvIGtleS92YWx1ZSBpbiBIYXNoTWFwIGl0ZXJhdG9ycworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI3ODQKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3Ry
YXRlZ2llc0d0ay5jcHA6CisgICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNHdGs6OmdldFBsdWdp
bkluZm8pOgorICAgICAgICAqIHdlYmtpdC93ZWJraXRmYXZpY29uZGF0YWJhc2UuY3BwOgorICAg
ICAgICAod2Via2l0RmF2aWNvbkRhdGFiYXNlSW1wb3J0RmluaXNoZWQpOgorICAgICAgICAqIHdl
YmtpdC93ZWJraXR3ZWJwbHVnaW4uY3BwOgorICAgICAgICAod2Via2l0X3dlYl9wbHVnaW5fZ2V0
X21pbWV0eXBlcyk6CisKIDIwMTItMDMtMzAgIE1hcmsgUGlsZ3JpbSAgPHBpbGdyaW1AY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIEdFT0xPQ0FUSU9OIHNob3VsZCBiZSBpbXBsZW1lbnRlZCBhcyBQ
YWdlIFN1cHBsZW1lbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwppbmRleCBiZjZmOTYxOWVlYWVlNjVmYjk2Y2Qy
OGM5ZmRiNzc2ODlkNjhkMDE2Li5jMjA4MTRmMGYyNWMwMWI1YjQwMDZmODc3MmIxYTlkODdhY2Nm
ZDI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdC9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDQgQEAKKzIwMTItMDQtMDIgIENhaW8g
TWFyY2VsbyBkZSBPbGl2ZWlyYSBGaWxobyAgPGNhaW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4K
KworICAgICAgICBSZW5hbWUgZmlyc3Qvc2Vjb25kIHRvIGtleS92YWx1ZSBpbiBIYXNoTWFwIGl0
ZXJhdG9ycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
ODI3ODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IEhpc3RvcnkvV2ViSGlzdG9yeS5tbToKKyAgICAgICAgKC1bV2ViSGlzdG9yeVByaXZhdGUgcmVt
b3ZlSXRlbUZyb21EYXRlQ2FjaGVzOl0pOgorICAgICAgICAoLVtXZWJIaXN0b3J5UHJpdmF0ZSBv
cmRlcmVkTGFzdFZpc2l0ZWREYXlzXSk6CisgICAgICAgIChXZWJIaXN0b3J5V3JpdGVyOjpXZWJI
aXN0b3J5V3JpdGVyKToKKyAgICAgICAgKiBNaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tOgorICAg
ICAgICAoK1tXZWJDb3JlU3RhdGlzdGljcyBqYXZhU2NyaXB0UHJvdGVjdGVkT2JqZWN0VHlwZUNv
dW50c10pOgorICAgICAgICAoK1tXZWJDb3JlU3RhdGlzdGljcyBqYXZhU2NyaXB0T2JqZWN0VHlw
ZUNvdW50c10pOgorICAgICAgICAqIFBsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdE1h
bmFnZXIubW06CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXI6Omhv
c3RGb3JQbHVnaW4pOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2Vy
OjpwbHVnaW5Ib3N0RGllZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSG9zdE1h
bmFnZXI6OmRpZENyZWF0ZVdpbmRvdyk6CisgICAgICAgICogUGx1Z2lucy9Ib3N0ZWQvTmV0c2Nh
cGVQbHVnaW5Ib3N0UHJveHkubW06CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSG9z
dFByb3h5OjpwbHVnaW5Ib3N0RGllZCk6CisgICAgICAgICogUGx1Z2lucy9Ib3N0ZWQvTmV0c2Nh
cGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdp
bkluc3RhbmNlUHJveHk6OkxvY2FsT2JqZWN0TWFwOjppZEZvck9iamVjdCk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6TG9jYWxPYmplY3RNYXA6OnJldGFp
bik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6TG9jYWxP
YmplY3RNYXA6OnJlbGVhc2UpOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3Rh
bmNlUHJveHk6OkxvY2FsT2JqZWN0TWFwOjpmb3JnZXQpOgorICAgICAgICAoV2ViS2l0OjpOZXRz
Y2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmRlc3Ryb3kpOgorICAgICAgICAoV2ViS2l0OjpOZXRz
Y2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OndlYkZyYW1lRGlkRmluaXNoTG9hZFdpdGhSZWFzb24p
OgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmNhbmNlbENo
ZWNrSWZBbGxvd2VkVG9Mb2FkVVJMKToKKyAgICAgICAgKiBQbHVnaW5zL0hvc3RlZC9Qcm94eUlu
c3RhbmNlLm1tOgorICAgICAgICAoV2ViS2l0OjpQcm94eUluc3RhbmNlOjptZXRob2RzTmFtZWQp
OgorICAgICAgICAoV2ViS2l0OjpQcm94eUluc3RhbmNlOjpmaWVsZE5hbWVkKToKKyAgICAgICAg
KiBQbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5tbToKKyAgICAgICAgKC1bV2ViTmV0c2Nh
cGVQbHVnaW5WaWV3IHN0b3BUaW1lcnNdKToKKyAgICAgICAgKC1bV2ViTmV0c2NhcGVQbHVnaW5W
aWV3IHN0YXJ0VGltZXJzXSk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViTm90aWZpY2F0
aW9uQ2xpZW50Lm1tOgorICAgICAgICAoV2ViTm90aWZpY2F0aW9uQ2xpZW50OjpzaG93KToKKyAg
ICAgICAgKFdlYk5vdGlmaWNhdGlvbkNsaWVudDo6Y2xlYXJOb3RpZmljYXRpb25zKToKKyAgICAg
ICAgKFdlYk5vdGlmaWNhdGlvbkNsaWVudDo6bm90aWZpY2F0aW9uT2JqZWN0RGVzdHJveWVkKToK
KyAgICAgICAgKiBXZWJWaWV3L1dlYkhUTUxWaWV3Lm1tOgorICAgICAgICAoY29tbWFuZE5hbWVG
b3JTZWxlY3Rvcik6CisKIDIwMTItMDQtMDEgIEpvbiBMZWUgIDxqb25sZWVAYXBwbGUuY29tPgog
CiAgICAgICAgIFJlbmFtZSBub3RpZmljYXRpb24gcHJvcGVydGllcyBhbmQgZnVuY3Rpb25zCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvcXQv
Q2hhbmdlTG9nCmluZGV4IGFlYTZkNTM3N2NkMThjNzY5MWVkNGQ3M2E0Yjg2NzU0YzlhYzNlZGMu
LjdkMmJjYjAwZTMzODRiNDZhZmMyNWMxNzk5YjFiNDAyYTE1ZThkMGMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTcgQEAKKzIwMTItMDQtMDIgIENhaW8gTWFyY2VsbyBkZSBPbGl2ZWlyYSBG
aWxobyAgPGNhaW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KKworICAgICAgICBSZW5hbWUgZmly
c3Qvc2Vjb25kIHRvIGtleS92YWx1ZSBpbiBIYXNoTWFwIGl0ZXJhdG9ycworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI3ODQKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEFwaS9xd2VicGFnZS5jcHA6Cisg
ICAgICAgIChleHRyYWN0Q29udGVudFR5cGVGcm9tUGx1Z2luVmVjdG9yKToKKyAgICAgICAgKiBB
cGkvcXdlYnBsdWdpbmRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFFXZWJQbHVnaW5JbmZvOjptaW1l
VHlwZXMpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1F0LmNw
cDoKKyAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc1F0OjpnZXRQbHVnaW5JbmZvKToKKwogMjAx
Mi0wNC0wMiAgQ2FzcGVyIHZhbiBEb25kZXJlbiAgPGNhc3Blci52YW5kb25kZXJlbkBub2tpYS5j
b20+CiAKICAgICAgICAgUXQ6IERvYzogRml4IHR5cG8gd2hpY2ggbWFya3MgZG9jdW1lbnQgdG8g
YmUgcHJpbnRlZCBpbiBjb25zb2xlIGZvbnQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dp
bi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKaW5kZXggM2Q3NTEwMDc2
ODJiMzI0N2E4ZTVjOTI5ZDlmOWYzYjVkM2M3OGQ5OS4uNTU0NzZiYzM3YTNkMGFjZDRiZDVlMzRh
MTYzNDQ2MGM3NTBmNTU4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDEy
LTA0LTAyICBDYWlvIE1hcmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gIDxjYWlvLm9saXZlaXJhQG9w
ZW5ib3NzYS5vcmc+CisKKyAgICAgICAgUmVuYW1lIGZpcnN0L3NlY29uZCB0byBrZXkvdmFsdWUg
aW4gSGFzaE1hcCBpdGVyYXRvcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTgyNzg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBDT01Qcm9wZXJ0eUJhZy5oOgorICAgICAgICAoOjpSZWFkKToKKyAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwOgorICAgICAgICAo
V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpnZXRQbHVnaW5JbmZvKToKKyAgICAgICAgKiBXZWJLaXRD
T01BUEkuY3BwOgorICAgICAgICAoY2xhc3NGYWN0b3J5KToKKyAgICAgICAgKiBXZWJOb3RpZmlj
YXRpb25DZW50ZXIuY3BwOgorICAgICAgICAoV2ViTm90aWZpY2F0aW9uQ2VudGVyOjpwb3N0Tm90
aWZpY2F0aW9uSW50ZXJuYWwpOgorICAgICAgICAoV2ViTm90aWZpY2F0aW9uQ2VudGVyOjphZGRP
YnNlcnZlcik6CisgICAgICAgIChXZWJOb3RpZmljYXRpb25DZW50ZXI6OnJlbW92ZU9ic2VydmVy
KToKKwogMjAxMi0wMy0zMCAgTWFyayBQaWxncmltICA8cGlsZ3JpbUBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgR0VPTE9DQVRJT04gc2hvdWxkIGJlIGltcGxlbWVudGVkIGFzIFBhZ2UgU3VwcGxl
bWVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW5jZS9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0L3dpbmNlL0NoYW5nZUxvZwppbmRleCAzOGIxYjZmNzhkYjJjZDM1MzFlMzU3NTFjNjI5
YzFkNjc1NTc2MWNiLi5kNGFlMWJjYjM2M2JlNjhhNDZjYzY4YmZhM2M4ZWU5ZDNlM2FiMzljIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbmNlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0L3dpbmNlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDEyLTA0LTAyICBDYWlvIE1h
cmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gIDxjYWlvLm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+CisK
KyAgICAgICAgUmVuYW1lIGZpcnN0L3NlY29uZCB0byBrZXkvdmFsdWUgaW4gSGFzaE1hcCBpdGVy
YXRvcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgy
Nzg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5jcHA6CisgICAgICAgIChQbGF0
Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6Z2V0UGx1Z2luSW5mbyk6CisKIDIwMTItMDMtMzAgIFBhdHJp
Y2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW1dpbkNFXSBDb3Jy
ZWN0IDx3dGYvKi5oPiBpbmNsdWRlIHBhdGhzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDAwMTAxODE0M2U0MDQ2
YmEyYjY1OWIwOWU2YTNmMmZlNWNlNzcwNzkuLmFlODZmODJlNTE2NmM0NGQzMmZjMzk3NmIyNTQx
NjU4MmMzNTI1MjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMDUgQEAKKzIwMTItMDQtMDIgIENh
aW8gTWFyY2VsbyBkZSBPbGl2ZWlyYSBGaWxobyAgPGNhaW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9y
Zz4KKworICAgICAgICBSZW5hbWUgZmlyc3Qvc2Vjb25kIHRvIGtleS92YWx1ZSBpbiBIYXNoTWFw
IGl0ZXJhdG9ycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9ODI3ODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFBsYXRmb3JtL0NvcmVJUEMvQXJndW1lbnRDb2RlcnMuaDogQWRkIEFyZ3VtZW50Q29kZXIg
Zm9yIEhhc2hNYXBFbnRyeSB0eXBlcy4KKyAgICAgICAgKiBQbGF0Zm9ybS9Db3JlSVBDL0Nvbm5l
Y3Rpb24uY3BwOgorICAgICAgICAoQ29yZUlQQzo6Q29ubmVjdGlvbjo6U3luY01lc3NhZ2VTdGF0
ZTo6Z2V0T3JDcmVhdGUpOgorICAgICAgICAoQ29yZUlQQzo6Q29ubmVjdGlvbjo6d2FpdEZvck1l
c3NhZ2UpOgorICAgICAgICAoQ29yZUlQQzo6Q29ubmVjdGlvbjo6cHJvY2Vzc0luY29taW5nTWVz
c2FnZSk6CisgICAgICAgICogUGxhdGZvcm0vZ3RrL1dvcmtRdWV1ZUd0ay5jcHA6CisgICAgICAg
IChXb3JrUXVldWU6OnJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKToKKyAgICAgICAgKFdvcmtR
dWV1ZTo6dW5yZWdpc3RlckV2ZW50U291cmNlSGFuZGxlcik6CisgICAgICAgICogUGxhdGZvcm0v
bWFjL1dvcmtRdWV1ZU1hYy5jcHA6CisgICAgICAgIChXb3JrUXVldWU6OnVucmVnaXN0ZXJNYWNo
UG9ydEV2ZW50SGFuZGxlcik6CisgICAgICAgICogU2hhcmVkL1BsdWdpbnMvTlBSZW1vdGVPYmpl
Y3RNYXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpOUFJlbW90ZU9iamVjdE1hcDo6cGx1Z2luRGVz
dHJveWVkKToKKyAgICAgICAgKiBTaGFyZWQvVXNlck1lc3NhZ2VDb2RlcnMuaDoKKyAgICAgICAg
KFdlYktpdDo6VXNlck1lc3NhZ2VFbmNvZGVyOjpiYXNlRW5jb2RlKToKKyAgICAgICAgKiBTaGFy
ZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OnZhbHVlRm9yS2V5
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJlZmVyZW5jZXNTdG9yZTo6Z2V0Qm9vbFZhbHVlRm9y
S2V5KToKKyAgICAgICAgKiBTaGFyZWQvZ3RrL1dlYkNvcmVBcmd1bWVudENvZGVyc0d0ay5jcHA6
CisgICAgICAgIChDb3JlSVBDOjo6OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL21hYy9XZWJD
b3JlQXJndW1lbnRDb2RlcnNNYWMubW06CisgICAgICAgIChDb3JlSVBDOjo6OmRlY29kZSk6Cisg
ICAgICAgICogU2hhcmVkL3F0L0FyZ3VtZW50Q29kZXJzUXQuY3BwOgorICAgICAgICAoQ29yZUlQ
Qzo6OjpkZWNvZGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcu
Y3BwOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2dldF9zdWJyZXNvdXJjZXMpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dLUHJpbnRpbmdWaWV3Lm1tOgorICAgICAgICAoLVtXS1By
aW50aW5nVmlldyBfZXhwZWN0ZWRQcmV2aWV3Q2FsbGJhY2tGb3JSZWN0Ol0pOgorICAgICAgICAo
cGFnZURpZERyYXdUb1BERik6CisgICAgICAgICgtW1dLUHJpbnRpbmdWaWV3IF9kcmF3UHJldmll
dzpdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW06CisgICAgICAgIChj
b21tYW5kTmFtZUZvclNlbGVjdG9yKToKKyAgICAgICAgKC1bV0tWaWV3IHZhbGlkYXRlVXNlcklu
dGVyZmFjZUl0ZW06XSk6CisgICAgICAgICogVUlQcm9jZXNzL0dlb2xvY2F0aW9uUGVybWlzc2lv
blJlcXVlc3RNYW5hZ2VyUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpHZW9sb2NhdGlvblBl
cm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5OjppbnZhbGlkYXRlUmVxdWVzdHMpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9Ob3RpZmljYXRpb25zL05vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0
TWFuYWdlclByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6Tm90aWZpY2F0aW9uUGVybWlzc2lv
blJlcXVlc3RNYW5hZ2VyUHJveHk6OmludmFsaWRhdGVSZXF1ZXN0cyk6CisgICAgICAgICogVUlQ
cm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
UGx1Z2luUHJvY2Vzc1Byb3h5OjpwbHVnaW5Qcm9jZXNzQ3Jhc2hlZE9yRmFpbGVkVG9MYXVuY2gp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
Y3JlYXRlRGljdGlvbmFyeUZyb21IYXNoTWFwKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViSWNv
bkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViSWNvbkRhdGFiYXNlOjpkaWRGaW5p
c2hVUkxJbXBvcnQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJlci5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVJlbmRlcmVyOjpzeW5jTGF5ZXJQYXJh
bWV0ZXJzKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmFzc2lnbklt
YWdlVG9MYXllcik6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6Y2hlY2tVUkxSZWNlaXZlZEZyb21XZWJQ
cm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjphZGRCYWNrRm9yd2Fy
ZEl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OmZyYW1lQ291bnRJblBh
Z2UpOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9MYXllckJhY2tpbmdTdG9yZS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OkxheWVyQmFja2luZ1N0b3JlOjp1cGRhdGVUaWxlKToKKyAgICAgICAgKFdl
YktpdDo6TGF5ZXJCYWNraW5nU3RvcmU6OnRleHR1cmUpOgorICAgICAgICAoV2ViS2l0OjpMYXll
ckJhY2tpbmdTdG9yZTo6cGFpbnRUb1RleHR1cmVNYXBwZXIpOgorICAgICAgICAoV2ViS2l0OjpM
YXllckJhY2tpbmdTdG9yZTo6Y29tbWl0VGlsZU9wZXJhdGlvbnMpOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvR2VvbG9jYXRpb24vR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlcjo6
Y2FuY2VsUmVxdWVzdEZvckdlb2xvY2F0aW9uKToKKyAgICAgICAgKFdlYktpdDo6R2VvbG9jYXRp
b25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXI6OmRpZFJlY2VpdmVHZW9sb2NhdGlvblBlcm1pc3Np
b25EZWNpc2lvbik6CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5q
ZWN0ZWRCdW5kbGVOb2RlSGFuZGxlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5k
bGVOb2RlSGFuZGxlOjpnZXRPckNyZWF0ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5jcHA6CisgICAgICAgIChXZWJL
aXQ6OkluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OmdldE9yQ3JlYXRlKToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL05vdGlmaWNhdGlvbnMvV2ViTm90aWZpY2F0aW9uTWFuYWdlci5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYk5vdGlmaWNhdGlvbk1hbmFnZXI6OnBvbGljeUZvck9yaWdpbik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYk5vdGlmaWNhdGlvbk1hbmFnZXI6OnNob3cpOgorICAgICAgICAo
V2ViS2l0OjpXZWJOb3RpZmljYXRpb25NYW5hZ2VyOjpjbGVhck5vdGlmaWNhdGlvbnMpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJOb3RpZmljYXRpb25NYW5hZ2VyOjpyZW1vdmVOb3RpZmljYXRpb25G
cm9tQ29udGV4dE1hcCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05Q
UnVudGltZU9iamVjdE1hcC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5QUnVudGltZU9iamVjdE1h
cDo6aW52YWxpZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5QUnVudGltZU9iamVjdE1hcDo6Zmlu
YWxpemUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBs
dWdpbi5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luOjpkZXN0cm95U3RyZWFt
KToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW46OnVuc2NoZWR1bGVUaW1lcik6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luOjpmcmFtZURpZEZpbmlzaExvYWRpbmcpOgor
ICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbjo6ZnJhbWVEaWRGYWlsKToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHA6CisgICAgICAgIChXZWJLaXQ6OmJ1
aWxkSFRUUEhlYWRlcnMpOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3Ojp+UGx1Z2luVmll
dyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OmxheWVyQnlJRCk6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFByb3h5LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViQmFja0ZvcndhcmRMaXN0UHJveHk6OnJlbW92ZUl0ZW0pOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbToKKyAgICAgICAg
KFdlYktpdDo6Y29tbWFuZE5hbWVGb3JTZWxlY3Rvck5hbWUpOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQuY3BwOgorICAgICAgICAoV2ViS2l0OjpMYXll
clRyZWVIb3N0UXQ6OmFkb3B0SW1hZ2VCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpM
YXllclRyZWVIb3N0UXQ6OnJlbGVhc2VJbWFnZUJhY2tpbmdTdG9yZSk6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6dmlz
aXRlZExpbmtTdGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjphbGxW
aXNpdGVkTGlua1N0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OmZv
Y3VzZWRXZWJQYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6Y3JlYXRlV2ViUGFn
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OndlYlBhZ2VHcm91cCk6CisgICAgICAg
IChXZWJLaXQ6OmZyb21Db3VudGVkU2V0VG9IYXNoTWFwKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzczo6c2V0VGV4dENoZWNrZXJTdGF0ZSk6CisKIDIwMTItMDQtMDIgIEJhbGF6cyBLZWxl
bWVuICA8a2JhbGF6c0B3ZWJraXQub3JnPgogCiAgICAgICAgIFtRdF1bV0syXSBTZXQgdXAgcGx1
Z2luIHByb2Nlc3Mgb24gVW5peApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU0NhbGxiYWNrT2JqZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJh
Y2tPYmplY3QuaAppbmRleCA5YWNhMGM3ZTE4Y2E1Y2NjY2VlNzM1OWVhMzkxYzI4MzRiMGExYWM4
Li5hYzAxNTlkOThhOGIzMjRkNWZmODgyMDBiOTUzZTFlYzA2YTAzYTBlIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaApAQCAtODMsMTMgKzgzLDEzIEBA
IHN0cnVjdCBKU0NhbGxiYWNrT2JqZWN0RGF0YSA6IFdlYWtIYW5kbGVPd25lciB7CiAgICAgICAg
ICAgICBQcml2YXRlUHJvcGVydHlNYXA6OmNvbnN0X2l0ZXJhdG9yIGxvY2F0aW9uID0gbV9wcm9w
ZXJ0eU1hcC5maW5kKHByb3BlcnR5TmFtZS5pbXBsKCkpOwogICAgICAgICAgICAgaWYgKGxvY2F0
aW9uID09IG1fcHJvcGVydHlNYXAuZW5kKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFs
dWUoKTsKLSAgICAgICAgICAgIHJldHVybiBsb2NhdGlvbi0+c2Vjb25kLmdldCgpOworICAgICAg
ICAgICAgcmV0dXJuIGxvY2F0aW9uLT52YWx1ZS5nZXQoKTsKICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgdm9pZCBzZXRQcml2YXRlUHJvcGVydHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBKU0NlbGwqIG93bmVyLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUg
dmFsdWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBlbXB0
eTsKLSAgICAgICAgICAgIG1fcHJvcGVydHlNYXAuYWRkKHByb3BlcnR5TmFtZS5pbXBsKCksIGVt
cHR5KS5pdGVyYXRvci0+c2Vjb25kLnNldChnbG9iYWxEYXRhLCBvd25lciwgdmFsdWUpOworICAg
ICAgICAgICAgbV9wcm9wZXJ0eU1hcC5hZGQocHJvcGVydHlOYW1lLmltcGwoKSwgZW1wdHkpLml0
ZXJhdG9yLT52YWx1ZS5zZXQoZ2xvYmFsRGF0YSwgb3duZXIsIHZhbHVlKTsKICAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgdm9pZCBkZWxldGVQcml2YXRlUHJvcGVydHkoY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lKQpAQCAtMTAwLDggKzEwMCw4IEBAIHN0cnVjdCBKU0NhbGxiYWNr
T2JqZWN0RGF0YSA6IFdlYWtIYW5kbGVPd25lciB7CiAgICAgICAgIHZvaWQgdmlzaXRDaGlsZHJl
bihTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICAgICAgewogICAgICAgICAgICAgZm9yIChQcml2
YXRlUHJvcGVydHlNYXA6Oml0ZXJhdG9yIHB0ciA9IG1fcHJvcGVydHlNYXAuYmVnaW4oKTsgcHRy
ICE9IG1fcHJvcGVydHlNYXAuZW5kKCk7ICsrcHRyKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHB0
ci0+c2Vjb25kKQotICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgmcHRyLT5zZWNv
bmQpOworICAgICAgICAgICAgICAgIGlmIChwdHItPnZhbHVlKQorICAgICAgICAgICAgICAgICAg
ICB2aXNpdG9yLmFwcGVuZCgmcHRyLT52YWx1ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0
RnVuY3Rpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RG
dW5jdGlvbnMuaAppbmRleCBlNmJiODg0NGM3NDg1YWJkZmJiYzE5ZWZiZDk1YWZmZjNmNzRmNjcx
Li5iZjkwNDg0ZWJjODQ4Y2EwYjYyNjc5MGFlYzkwMzFjMWQ1YjlkZWM5IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaApA
QCAtNDYyLDggKzQ2Miw4IEBAIHZvaWQgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpnZXRPd25Q
cm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSoKICAgICAgICAgICAgIHR5
cGVkZWYgT3BhcXVlSlNDbGFzc1N0YXRpY1ZhbHVlc1RhYmxlOjpjb25zdF9pdGVyYXRvciBpdGVy
YXRvcjsKICAgICAgICAgICAgIGl0ZXJhdG9yIGVuZCA9IHN0YXRpY1ZhbHVlcy0+ZW5kKCk7CiAg
ICAgICAgICAgICBmb3IgKGl0ZXJhdG9yIGl0ID0gc3RhdGljVmFsdWVzLT5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgICAgICBTdHJpbmdJbXBsKiBuYW1lID0gaXQtPmZp
cnN0LmdldCgpOwotICAgICAgICAgICAgICAgIFN0YXRpY1ZhbHVlRW50cnkqIGVudHJ5ID0gaXQt
PnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgICAgICBTdHJpbmdJbXBsKiBuYW1lID0gaXQtPmtl
eS5nZXQoKTsKKyAgICAgICAgICAgICAgICBTdGF0aWNWYWx1ZUVudHJ5KiBlbnRyeSA9IGl0LT52
YWx1ZS5nZXQoKTsKICAgICAgICAgICAgICAgICBpZiAoZW50cnktPmdldFByb3BlcnR5ICYmICgh
KGVudHJ5LT5hdHRyaWJ1dGVzICYga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RW51bSkgfHwgKG1v
ZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykpKQogICAgICAgICAgICAgICAgICAgICBw
cm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyKGV4ZWMsIG5hbWUpKTsKICAgICAgICAgICAgIH0K
QEAgLTQ3Myw4ICs0NzMsOCBAQCB2b2lkIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6Z2V0T3du
UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqCiAgICAgICAgICAgICB0
eXBlZGVmIE9wYXF1ZUpTQ2xhc3NTdGF0aWNGdW5jdGlvbnNUYWJsZTo6Y29uc3RfaXRlcmF0b3Ig
aXRlcmF0b3I7CiAgICAgICAgICAgICBpdGVyYXRvciBlbmQgPSBzdGF0aWNGdW5jdGlvbnMtPmVu
ZCgpOwogICAgICAgICAgICAgZm9yIChpdGVyYXRvciBpdCA9IHN0YXRpY0Z1bmN0aW9ucy0+YmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nSW1wbCogbmFt
ZSA9IGl0LT5maXJzdC5nZXQoKTsKLSAgICAgICAgICAgICAgICBTdGF0aWNGdW5jdGlvbkVudHJ5
KiBlbnRyeSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICAgICAgU3RyaW5nSW1wbCog
bmFtZSA9IGl0LT5rZXkuZ2V0KCk7CisgICAgICAgICAgICAgICAgU3RhdGljRnVuY3Rpb25FbnRy
eSogZW50cnkgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICAgICAgaWYgKCEoZW50cnkt
PmF0dHJpYnV0ZXMgJiBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRFbnVtKSB8fCAobW9kZSA9PSBJ
bmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKSkKICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlO
YW1lcy5hZGQoSWRlbnRpZmllcihleGVjLCBuYW1lKSk7CiAgICAgICAgICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2xhc3NSZWYuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0NsYXNzUmVmLmNwcAppbmRleCAxMzUzNGQwNzhjNmI5Yjg3ODFm
MDk5NmE2YmI5ODhiMzdmNGRiZDNjLi4yZjMzM2MyYjg1ODBkYTMyMzU5MGJhNjk4MzhjODMyYjI5
OGQyYzA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2xhc3NSZWYu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDbGFzc1JlZi5jcHAKQEAgLTEw
NywxMyArMTA3LDEzIEBAIE9wYXF1ZUpTQ2xhc3M6On5PcGFxdWVKU0NsYXNzKCkKICAgICBpZiAo
bV9zdGF0aWNWYWx1ZXMpIHsKICAgICAgICAgT3BhcXVlSlNDbGFzc1N0YXRpY1ZhbHVlc1RhYmxl
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3N0YXRpY1ZhbHVlcy0+ZW5kKCk7CiAgICAgICAgIGZv
ciAoT3BhcXVlSlNDbGFzc1N0YXRpY1ZhbHVlc1RhYmxlOjpjb25zdF9pdGVyYXRvciBpdCA9IG1f
c3RhdGljVmFsdWVzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBBU1NF
UlQoIWl0LT5maXJzdC0+aXNJZGVudGlmaWVyKCkpOworICAgICAgICAgICAgQVNTRVJUKCFpdC0+
a2V5LT5pc0lkZW50aWZpZXIoKSk7CiAgICAgfQogCiAgICAgaWYgKG1fc3RhdGljRnVuY3Rpb25z
KSB7CiAgICAgICAgIE9wYXF1ZUpTQ2xhc3NTdGF0aWNGdW5jdGlvbnNUYWJsZTo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gbV9zdGF0aWNGdW5jdGlvbnMtPmVuZCgpOwogICAgICAgICBmb3IgKE9wYXF1
ZUpTQ2xhc3NTdGF0aWNGdW5jdGlvbnNUYWJsZTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3N0YXRp
Y0Z1bmN0aW9ucy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgQVNTRVJU
KCFpdC0+Zmlyc3QtPmlzSWRlbnRpZmllcigpKTsKKyAgICAgICAgICAgIEFTU0VSVCghaXQtPmtl
eS0+aXNJZGVudGlmaWVyKCkpOwogICAgIH0KICNlbmRpZgogICAgIApAQCAtMTQ3LDggKzE0Nyw4
IEBAIE9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YTo6T3BhcXVlSlNDbGFzc0NvbnRleHREYXRhKEpT
Qzo6SlNHbG9iYWxEYXRhJiwgT3BhcXVlSlNDCiAgICAgICAgIHN0YXRpY1ZhbHVlcyA9IGFkb3B0
UHRyKG5ldyBPcGFxdWVKU0NsYXNzU3RhdGljVmFsdWVzVGFibGUpOwogICAgICAgICBPcGFxdWVK
U0NsYXNzU3RhdGljVmFsdWVzVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGpzQ2xhc3MtPm1f
c3RhdGljVmFsdWVzLT5lbmQoKTsKICAgICAgICAgZm9yIChPcGFxdWVKU0NsYXNzU3RhdGljVmFs
dWVzVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0ganNDbGFzcy0+bV9zdGF0aWNWYWx1ZXMtPmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgQVNTRVJUKCFpdC0+Zmlyc3Qt
PmlzSWRlbnRpZmllcigpKTsKLSAgICAgICAgICAgIHN0YXRpY1ZhbHVlcy0+YWRkKFN0cmluZ0lt
cGw6OmNyZWF0ZShpdC0+Zmlyc3QtPmNoYXJhY3RlcnMoKSwgaXQtPmZpcnN0LT5sZW5ndGgoKSks
IGFkb3B0UHRyKG5ldyBTdGF0aWNWYWx1ZUVudHJ5KGl0LT5zZWNvbmQtPmdldFByb3BlcnR5LCBp
dC0+c2Vjb25kLT5zZXRQcm9wZXJ0eSwgaXQtPnNlY29uZC0+YXR0cmlidXRlcykpKTsKKyAgICAg
ICAgICAgIEFTU0VSVCghaXQtPmtleS0+aXNJZGVudGlmaWVyKCkpOworICAgICAgICAgICAgc3Rh
dGljVmFsdWVzLT5hZGQoU3RyaW5nSW1wbDo6Y3JlYXRlKGl0LT5rZXktPmNoYXJhY3RlcnMoKSwg
aXQtPmtleS0+bGVuZ3RoKCkpLCBhZG9wdFB0cihuZXcgU3RhdGljVmFsdWVFbnRyeShpdC0+dmFs
dWUtPmdldFByb3BlcnR5LCBpdC0+dmFsdWUtPnNldFByb3BlcnR5LCBpdC0+dmFsdWUtPmF0dHJp
YnV0ZXMpKSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE1NiwxNSArMTU2LDE1IEBAIE9wYXF1
ZUpTQ2xhc3NDb250ZXh0RGF0YTo6T3BhcXVlSlNDbGFzc0NvbnRleHREYXRhKEpTQzo6SlNHbG9i
YWxEYXRhJiwgT3BhcXVlSlNDCiAgICAgICAgIHN0YXRpY0Z1bmN0aW9ucyA9IGFkb3B0UHRyKG5l
dyBPcGFxdWVKU0NsYXNzU3RhdGljRnVuY3Rpb25zVGFibGUpOwogICAgICAgICBPcGFxdWVKU0Ns
YXNzU3RhdGljRnVuY3Rpb25zVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGpzQ2xhc3MtPm1f
c3RhdGljRnVuY3Rpb25zLT5lbmQoKTsKICAgICAgICAgZm9yIChPcGFxdWVKU0NsYXNzU3RhdGlj
RnVuY3Rpb25zVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0ganNDbGFzcy0+bV9zdGF0aWNGdW5j
dGlvbnMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgQVNTRVJUKCFp
dC0+Zmlyc3QtPmlzSWRlbnRpZmllcigpKTsKLSAgICAgICAgICAgIHN0YXRpY0Z1bmN0aW9ucy0+
YWRkKFN0cmluZ0ltcGw6OmNyZWF0ZShpdC0+Zmlyc3QtPmNoYXJhY3RlcnMoKSwgaXQtPmZpcnN0
LT5sZW5ndGgoKSksIGFkb3B0UHRyKG5ldyBTdGF0aWNGdW5jdGlvbkVudHJ5KGl0LT5zZWNvbmQt
PmNhbGxBc0Z1bmN0aW9uLCBpdC0+c2Vjb25kLT5hdHRyaWJ1dGVzKSkpOworICAgICAgICAgICAg
QVNTRVJUKCFpdC0+a2V5LT5pc0lkZW50aWZpZXIoKSk7CisgICAgICAgICAgICBzdGF0aWNGdW5j
dGlvbnMtPmFkZChTdHJpbmdJbXBsOjpjcmVhdGUoaXQtPmtleS0+Y2hhcmFjdGVycygpLCBpdC0+
a2V5LT5sZW5ndGgoKSksIGFkb3B0UHRyKG5ldyBTdGF0aWNGdW5jdGlvbkVudHJ5KGl0LT52YWx1
ZS0+Y2FsbEFzRnVuY3Rpb24sIGl0LT52YWx1ZS0+YXR0cmlidXRlcykpKTsKICAgICAgICAgfQog
ICAgIH0KIH0KIAogT3BhcXVlSlNDbGFzc0NvbnRleHREYXRhJiBPcGFxdWVKU0NsYXNzOjpjb250
ZXh0RGF0YShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgT3duUHRyPE9wYXF1ZUpTQ2xhc3NDb250
ZXh0RGF0YT4mIGNvbnRleHREYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpLm9wYXF1ZUpTQ2xhc3NE
YXRhLmFkZCh0aGlzLCBudWxscHRyKS5pdGVyYXRvci0+c2Vjb25kOworICAgIE93blB0cjxPcGFx
dWVKU0NsYXNzQ29udGV4dERhdGE+JiBjb250ZXh0RGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKS5v
cGFxdWVKU0NsYXNzRGF0YS5hZGQodGhpcywgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwogICAg
IGlmICghY29udGV4dERhdGEpCiAgICAgICAgIGNvbnRleHREYXRhID0gYWRvcHRQdHIobmV3IE9w
YXF1ZUpTQ2xhc3NDb250ZXh0RGF0YShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMpKTsKICAgICBy
ZXR1cm4gKmNvbnRleHREYXRhOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcAppbmRleCA2ZDhkMGNiNzg4N2JlMGRiZjFkYjM5ZWRhMWNjNGM0MDUwZmJkNzMz
Li5mNjQxYWViNWYzZDQwZGQwNmE4ZDNhN2I1ZGRlM2Q3MjY4ODliMmQ4IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcApAQCAtNDgwLDcgKzQ4MCw3IEBA
IHZvaWQgQ29kZUJsb2NrOjpkdW1wKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKICAgICAgICAgICAg
IGRhdGFMb2coIiAgJTFkID0ge1xuIiwgaSk7CiAgICAgICAgICAgICBTdHJpbmdKdW1wVGFibGU6
OlN0cmluZ09mZnNldFRhYmxlOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3JhcmVEYXRhLT5tX3N0
cmluZ1N3aXRjaEp1bXBUYWJsZXNbaV0ub2Zmc2V0VGFibGUuZW5kKCk7CiAgICAgICAgICAgICBm
b3IgKFN0cmluZ0p1bXBUYWJsZTo6U3RyaW5nT2Zmc2V0VGFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0
ZXIgPSBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbaV0ub2Zmc2V0VGFibGUu
YmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCJc
dFx0XCIlc1wiID0+ICUwNGRcbiIsIFVTdHJpbmcoaXRlci0+Zmlyc3QpLnV0ZjgoKS5kYXRhKCks
IGl0ZXItPnNlY29uZC5icmFuY2hPZmZzZXQpOworICAgICAgICAgICAgICAgIGRhdGFMb2coIlx0
XHRcIiVzXCIgPT4gJTA0ZFxuIiwgVVN0cmluZyhpdGVyLT5rZXkpLnV0ZjgoKS5kYXRhKCksIGl0
ZXItPnZhbHVlLmJyYW5jaE9mZnNldCk7CiAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICB9XG4i
KTsKICAgICAgICAgICAgICsraTsKICAgICAgICAgfSB3aGlsZSAoaSA8IG1fcmFyZURhdGEtPm1f
c3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5zaXplKCkpOwpAQCAtMTYxNCw3ICsxNjE0LDcgQEAgdm9p
ZCBFdmFsQ29kZUNhY2hlOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBFdmFsQ2FjaGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fY2FjaGVNYXAuZW5kKCk7CiAgICAg
Zm9yIChFdmFsQ2FjaGVNYXA6Oml0ZXJhdG9yIHB0ciA9IG1fY2FjaGVNYXAuYmVnaW4oKTsgcHRy
ICE9IGVuZDsgKytwdHIpCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kKCZwdHItPnNlY29uZCk7Cisg
ICAgICAgIHZpc2l0b3IuYXBwZW5kKCZwdHItPnZhbHVlKTsKIH0KIAogdm9pZCBDb2RlQmxvY2s6
OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0p1bXBUYWJsZS5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0p1bXBUYWJsZS5oCmluZGV4IDViYmUwNDcxMDdmNWIwMWMwMjg5YmVhMzMx
ODZlMWY4NGEzYWFmYzcuLjYwMzZjZGE1MWQ1YmNmNTY1ZWFlOTdlOGRiMjY1NTFjOTAyNTVjNzMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9KdW1wVGFibGUuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSnVtcFRhYmxlLmgKQEAgLTU3LDcg
KzU3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBTdHJpbmdPZmZzZXRUYWJsZTo6
Y29uc3RfaXRlcmF0b3IgbG9jID0gb2Zmc2V0VGFibGUuZmluZCh2YWx1ZSk7CiAgICAgICAgICAg
ICBpZiAobG9jID09IGVuZCkKICAgICAgICAgICAgICAgICByZXR1cm4gZGVmYXVsdE9mZnNldDsK
LSAgICAgICAgICAgIHJldHVybiBsb2MtPnNlY29uZC5icmFuY2hPZmZzZXQ7CisgICAgICAgICAg
ICByZXR1cm4gbG9jLT52YWx1ZS5icmFuY2hPZmZzZXQ7CiAgICAgICAgIH0KIAogI2lmIEVOQUJM
RShKSVQpCkBAIC02Nyw3ICs2Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgU3Ry
aW5nT2Zmc2V0VGFibGU6OmNvbnN0X2l0ZXJhdG9yIGxvYyA9IG9mZnNldFRhYmxlLmZpbmQodmFs
dWUpOwogICAgICAgICAgICAgaWYgKGxvYyA9PSBlbmQpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IGN0aURlZmF1bHQ7Ci0gICAgICAgICAgICByZXR1cm4gbG9jLT5zZWNvbmQuY3RpT2Zmc2V0Owor
ICAgICAgICAgICAgcmV0dXJuIGxvYy0+dmFsdWUuY3RpT2Zmc2V0OwogICAgICAgICB9CiAjZW5k
aWYKICAgICB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xh
enlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5jcHAKaW5kZXggZjE5OWI2OTIzMGE5YmEwMDllNjU5
MWYzZDQ5MDE3NGM5NWU2MTU3ZC4uZWQyYjZiNmQxN2MzNzgwMWUwNTA0MzNhMzQ1YTliYzBjMWJi
MDM2MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xhenlPcGVy
YW5kVmFsdWVQcm9maWxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3BwCkBAIC04MSw3ICs4MSw3IEBAIExhenlPcGVyYW5k
VmFsdWVQcm9maWxlKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZVBhcnNlcjo6Z2V0SWZQcmVzZW50
KAogICAgIGlmIChpdGVyID09IG1fbWFwLmVuZCgpKQogICAgICAgICByZXR1cm4gMDsKICAgICAK
LSAgICByZXR1cm4gaXRlci0+c2Vjb25kOworICAgIHJldHVybiBpdGVyLT52YWx1ZTsKIH0KIAog
UHJlZGljdGVkVHlwZSBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZVBhcnNlcjo6cHJlZGljdGlvbigK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVkaWN0aW9uVHJh
Y2tlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWRpY3Rpb25UcmFja2Vy
LmgKaW5kZXggNzU1MWNkM2YzZmZiNjQ2M2M0MTVhNThkNjQxNjNmMjQzMTllZGE5Yi4uODViZDcx
OWNlNzFlZWUwMjY4YmExOGQ5N2JkNzE3YmFmZWZlM2EzZSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWRpY3Rpb25UcmFja2VyLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWRpY3Rpb25UcmFja2VyLmgKQEAgLTU1LDcgKzU1LDcg
QEAgcHVibGljOgogICAgICAgICAgICAgbV9nbG9iYWxWYXJzLmFkZCh2YXJOdW1iZXIgKyAxLCBw
cmVkaWN0aW9uU2xvdCk7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiBtZXJnZVByZWRpY3Rpb24oaXRlci0+c2Vjb25kLm1fdmFsdWUsIHByZWRp
Y3Rpb24pOworICAgICAgICByZXR1cm4gbWVyZ2VQcmVkaWN0aW9uKGl0ZXItPnZhbHVlLm1fdmFs
dWUsIHByZWRpY3Rpb24pOwogICAgIH0KICAgICAKICAgICBQcmVkaWN0ZWRUeXBlIGdldEdsb2Jh
bFZhclByZWRpY3Rpb24odW5zaWduZWQgdmFyTnVtYmVyKQpAQCAtNjMsNyArNjMsNyBAQCBwdWJs
aWM6CiAgICAgICAgIEhhc2hNYXA8dW5zaWduZWQsIFByZWRpY3Rpb25TbG90Pjo6aXRlcmF0b3Ig
aXRlciA9IG1fZ2xvYmFsVmFycy5maW5kKHZhck51bWJlciArIDEpOwogICAgICAgICBpZiAoaXRl
ciA9PSBtX2dsb2JhbFZhcnMuZW5kKCkpCiAgICAgICAgICAgICByZXR1cm4gUHJlZGljdE5vbmU7
Ci0gICAgICAgIHJldHVybiBpdGVyLT5zZWNvbmQubV92YWx1ZTsKKyAgICAgICAgcmV0dXJuIGl0
ZXItPnZhbHVlLm1fdmFsdWU7CiAgICAgfQogICAgIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAK
aW5kZXggMGYwODU3OTUzMzY0MDRjNWEwNGZhMWU3YmNkYzE2YTAyN2UxZjFkYy4uZGJmMjNmZGVl
NTliY2ZhM2ZkNWU5OTg2NDlmZTg4Njg1OTE0MjAxMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKQEAgLTIw
Myw3ICsyMDMsNyBAQCBib29sIEJ5dGVjb2RlR2VuZXJhdG9yOjphZGRWYXIoY29uc3QgSWRlbnRp
ZmllciYgaWRlbnQsIGJvb2wgaXNDb25zdGFudCwgUmVnaXN0ZQogICAgIFN5bWJvbFRhYmxlOjpB
ZGRSZXN1bHQgcmVzdWx0ID0gc3ltYm9sVGFibGUoKS5hZGQoaWRlbnQuaW1wbCgpLCBuZXdFbnRy
eSk7CiAKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIHIwID0gJnJlZ2lz
dGVyRm9yKHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLmdldEluZGV4KCkpOworICAgICAgICByMCA9
ICZyZWdpc3RlckZvcihyZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldEluZGV4KCkpOwogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0yMTcsNyArMjE3LDcgQEAgaW50IEJ5dGVjb2Rl
R2VuZXJhdG9yOjphZGRHbG9iYWxWYXIoY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGJvb2wgaXND
b25zdGFudCkKICAgICBTeW1ib2xUYWJsZUVudHJ5IG5ld0VudHJ5KGluZGV4LCBpc0NvbnN0YW50
ID8gUmVhZE9ubHkgOiAwKTsKICAgICBTeW1ib2xUYWJsZTo6QWRkUmVzdWx0IHJlc3VsdCA9IHN5
bWJvbFRhYmxlKCkuYWRkKGlkZW50LmltcGwoKSwgbmV3RW50cnkpOwogICAgIGlmICghcmVzdWx0
LmlzTmV3RW50cnkpCi0gICAgICAgIGluZGV4ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQuZ2V0
SW5kZXgoKTsKKyAgICAgICAgaW5kZXggPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldEluZGV4
KCk7CiAgICAgcmV0dXJuIGluZGV4OwogfQogCkBAIC05NzIsNyArOTcyLDcgQEAgdW5zaWduZWQg
Qnl0ZWNvZGVHZW5lcmF0b3I6OmFkZENvbnN0YW50KGNvbnN0IElkZW50aWZpZXImIGlkZW50KQog
ICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKICAgICAgICAgbV9jb2RlQmxvY2stPmFkZElkZW50
aWZpZXIoSWRlbnRpZmllcihtX2dsb2JhbERhdGEsIHJlcCkpOwogCi0gICAgcmV0dXJuIHJlc3Vs
dC5pdGVyYXRvci0+c2Vjb25kOworICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwog
fQogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6YWRkQ29uc3RhbnRWYWx1ZShKU1Zh
bHVlIHYpCkBAIC05ODUsNyArOTg1LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6
OmFkZENvbnN0YW50VmFsdWUoSlNWYWx1ZSB2KQogICAgICAgICArK21fbmV4dENvbnN0YW50T2Zm
c2V0OwogICAgICAgICBtX2NvZGVCbG9jay0+YWRkQ29uc3RhbnQoSlNWYWx1ZSh2KSk7CiAgICAg
fSBlbHNlCi0gICAgICAgIGluZGV4ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAg
IGluZGV4ID0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIAogICAgIHJldHVybiAmbV9jb25zdGFu
dFBvb2xSZWdpc3RlcnNbaW5kZXhdOwogfQpAQCAtMTEzMiw3ICsxMTMyLDcgQEAgUmVnaXN0ZXJJ
RCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRMb2FkKFJlZ2lzdGVySUQqIGRzdCwgZG91YmxlIG51
bWJlcikKICAgICAvLyB3b3JrIGNvcnJlY3RseSB3aXRoIE5hTiBhcyBhIGtleS4KICAgICBpZiAo
aXNuYW4obnVtYmVyKSB8fCBudW1iZXIgPT0gSGFzaFRyYWl0czxkb3VibGU+OjplbXB0eVZhbHVl
KCkgfHwgSGFzaFRyYWl0czxkb3VibGU+Ojppc0RlbGV0ZWRWYWx1ZShudW1iZXIpKQogICAgICAg
ICByZXR1cm4gZW1pdExvYWQoZHN0LCBqc051bWJlcihudW1iZXIpKTsKLSAgICBKU1ZhbHVlJiB2
YWx1ZUluTWFwID0gbV9udW1iZXJNYXAuYWRkKG51bWJlciwgSlNWYWx1ZSgpKS5pdGVyYXRvci0+
c2Vjb25kOworICAgIEpTVmFsdWUmIHZhbHVlSW5NYXAgPSBtX251bWJlck1hcC5hZGQobnVtYmVy
LCBKU1ZhbHVlKCkpLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoIXZhbHVlSW5NYXApCiAgICAg
ICAgIHZhbHVlSW5NYXAgPSBqc051bWJlcihudW1iZXIpOwogICAgIHJldHVybiBlbWl0TG9hZChk
c3QsIHZhbHVlSW5NYXApOwpAQCAtMTE0MCw3ICsxMTQwLDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaXRMb2FkKFJlZ2lzdGVySUQqIGRzdCwgZG91YmxlIG51bWJlcikKIAog
UmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRMb2FkKFJlZ2lzdGVySUQqIGRzdCwg
Y29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllcikKIHsKLSAgICBKU1N0cmluZyomIHN0cmluZ0lu
TWFwID0gbV9zdHJpbmdNYXAuYWRkKGlkZW50aWZpZXIuaW1wbCgpLCAwKS5pdGVyYXRvci0+c2Vj
b25kOworICAgIEpTU3RyaW5nKiYgc3RyaW5nSW5NYXAgPSBtX3N0cmluZ01hcC5hZGQoaWRlbnRp
Zmllci5pbXBsKCksIDApLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoIXN0cmluZ0luTWFwKQog
ICAgICAgICBzdHJpbmdJbk1hcCA9IGpzT3duZWRTdHJpbmcoZ2xvYmFsRGF0YSgpLCBpZGVudGlm
aWVyLnVzdHJpbmcoKSk7CiAgICAgcmV0dXJuIGVtaXRMb2FkKGRzdCwgSlNWYWx1ZShzdHJpbmdJ
bk1hcCkpOwpAQCAtMTY0OCw3ICsxNjQ4LDcgQEAgdW5zaWduZWQgQnl0ZWNvZGVHZW5lcmF0b3I6
OmFkZENvbnN0YW50QnVmZmVyKHVuc2lnbmVkIGxlbmd0aCkKIAogSlNTdHJpbmcqIEJ5dGVjb2Rl
R2VuZXJhdG9yOjphZGRTdHJpbmdDb25zdGFudChjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVy
KQogewotICAgIEpTU3RyaW5nKiYgc3RyaW5nSW5NYXAgPSBtX3N0cmluZ01hcC5hZGQoaWRlbnRp
Zmllci5pbXBsKCksIDApLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgSlNTdHJpbmcqJiBzdHJpbmdJ
bk1hcCA9IG1fc3RyaW5nTWFwLmFkZChpZGVudGlmaWVyLmltcGwoKSwgMCkuaXRlcmF0b3ItPnZh
bHVlOwogICAgIGlmICghc3RyaW5nSW5NYXApIHsKICAgICAgICAgc3RyaW5nSW5NYXAgPSBqc1N0
cmluZyhnbG9iYWxEYXRhKCksIGlkZW50aWZpZXIudXN0cmluZygpKTsKICAgICAgICAgYWRkQ29u
c3RhbnRWYWx1ZShzdHJpbmdJbk1hcCk7CkBAIC0xNzIwLDggKzE3MjAsOCBAQCBSZWdpc3RlcklE
KiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdExhenlOZXdGdW5jdGlvbihSZWdpc3RlcklEKiBkc3Qs
IEZ1bmN0aW9uQm9keQogewogICAgIEZ1bmN0aW9uT2Zmc2V0TWFwOjpBZGRSZXN1bHQgcHRyID0g
bV9mdW5jdGlvbk9mZnNldHMuYWRkKGZ1bmN0aW9uLCAwKTsKICAgICBpZiAocHRyLmlzTmV3RW50
cnkpCi0gICAgICAgIHB0ci5pdGVyYXRvci0+c2Vjb25kID0gbV9jb2RlQmxvY2stPmFkZEZ1bmN0
aW9uRGVjbChtYWtlRnVuY3Rpb24obV9nbG9iYWxEYXRhLCBmdW5jdGlvbikpOwotICAgIHJldHVy
biBlbWl0TmV3RnVuY3Rpb25JbnRlcm5hbChkc3QsIHB0ci5pdGVyYXRvci0+c2Vjb25kLCB0cnVl
KTsKKyAgICAgICAgcHRyLml0ZXJhdG9yLT52YWx1ZSA9IG1fY29kZUJsb2NrLT5hZGRGdW5jdGlv
bkRlY2wobWFrZUZ1bmN0aW9uKG1fZ2xvYmFsRGF0YSwgZnVuY3Rpb24pKTsKKyAgICByZXR1cm4g
ZW1pdE5ld0Z1bmN0aW9uSW50ZXJuYWwoZHN0LCBwdHIuaXRlcmF0b3ItPnZhbHVlLCB0cnVlKTsK
IH0KIAogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXROZXdGdW5jdGlvbkludGVy
bmFsKFJlZ2lzdGVySUQqIGRzdCwgdW5zaWduZWQgaW5kZXgsIGJvb2wgZG9OdWxsQ2hlY2spCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdl
bi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5j
cHAKaW5kZXggY2Q5ZGUyMmYwNTk4Nzk4ZTI3YjI3NzFiOWI4N2U0NTEzNmE5NzhjZC4uNmIzZjdl
NTVlNGEzNWEyOWY4ZWFlMjM0NzJmZjYzMTAxNDIwMTg3OSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcApAQCAtMjU4LDcgKzI1
OCw3IEBAIFJlZ2lzdGVySUQqIFByb3BlcnR5TGlzdE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29k
ZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlCiAgICAgICAgICAgICBHZXR0ZXJTZXR0ZXJQ
YWlyIHBhaXIobm9kZSwgc3RhdGljX2Nhc3Q8UHJvcGVydHlOb2RlKj4oMCkpOwogICAgICAgICAg
ICAgR2V0dGVyU2V0dGVyTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbWFwLmFkZChub2RlLT5uYW1l
KCkuaW1wbCgpLCBwYWlyKTsKICAgICAgICAgICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0g
ICAgICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQuc2Vjb25kID0gbm9kZTsKKyAg
ICAgICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLnNlY29uZCA9IG5vZGU7CiAgICAg
ICAgIH0KIAogICAgICAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIHJlbWFpbmluZyBwcm9wZXJ0aWVz
IGluIHRoZSBsaXN0LgpAQCAtMjc2LDcgKzI3Niw3IEBAIFJlZ2lzdGVySUQqIFByb3BlcnR5TGlz
dE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3Rl
CiAgICAgICAgICAgICBBU1NFUlQobm9kZS0+bV90eXBlID09IFByb3BlcnR5Tm9kZTo6R2V0dGVy
IHx8IG5vZGUtPm1fdHlwZSA9PSBQcm9wZXJ0eU5vZGU6OlNldHRlcik7CiAgICAgICAgICAgICBH
ZXR0ZXJTZXR0ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLmZpbmQobm9kZS0+bmFtZSgpLmltcGwo
KSk7CiAgICAgICAgICAgICBBU1NFUlQoaXQgIT0gbWFwLmVuZCgpKTsKLSAgICAgICAgICAgIEdl
dHRlclNldHRlclBhaXImIHBhaXIgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgR2V0dGVyU2V0
dGVyUGFpciYgcGFpciA9IGl0LT52YWx1ZTsKIAogICAgICAgICAgICAgLy8gV2FzIHRoaXMgYWxy
ZWFkeSBnZW5lcmF0ZWQgYXMgYSBwYXJ0IG9mIGl0cyBwYXJ0bmVyPwogICAgICAgICAgICAgaWYg
KHBhaXIuc2Vjb25kID09IG5vZGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGVidWdnZXIvRGVidWdnZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0Rl
YnVnZ2VyLmNwcAppbmRleCBlZGU4YTliYTI0OGI5YTg5NGI3OTE3NGVkNWQzMjBmODhmNWNjYjNl
Li4xNDZiYWQxNTY2OTJiNTEwNDYwMTFlM2EzNzRmY2VkNTU5ZTFhODcwIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAKQEAgLTU5LDcgKzU5LDcgQEAgaW5s
aW5lIFJlY29tcGlsZXI6On5SZWNvbXBpbGVyKCkKICAgICAvLyBKYXZhU2NyaXB0IGluIHRoZSBp
bnNwZWN0b3IuCiAgICAgU291cmNlUHJvdmlkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1f
c291cmNlUHJvdmlkZXJzLmVuZCgpOwogICAgIGZvciAoU291cmNlUHJvdmlkZXJNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ZXIgPSBtX3NvdXJjZVByb3ZpZGVycy5iZWdpbigpOyBpdGVyICE9IGVuZDsg
KytpdGVyKQotICAgICAgICBtX2RlYnVnZ2VyLT5zb3VyY2VQYXJzZWQoaXRlci0+c2Vjb25kLCBp
dGVyLT5maXJzdCwgLTEsIFVTdHJpbmcoKSk7CisgICAgICAgIG1fZGVidWdnZXItPnNvdXJjZVBh
cnNlZChpdGVyLT52YWx1ZSwgaXRlci0+a2V5LCAtMSwgVVN0cmluZygpKTsKIH0KIAogaW5saW5l
IHZvaWQgUmVjb21waWxlcjo6b3BlcmF0b3IoKShKU0NlbGwqIGNlbGwpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5jcHAKaW5kZXggYWMyYzNkYjIx
Y2Y3NGExYTRkNjRiNDY4OWZmMTZmZWZlN2JkMWViMy4uZjhmNTYwMzhlOWQxZTFhNWZhOTA2NWY2
MDE4MzQ1MGZlZjQzM2U1MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBc3NlbWJseUhlbHBlcnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXNzZW1ibHlIZWxwZXJzLmNwcApAQCAtNDEsOSArNDEsOSBAQCBWZWN0b3I8Qnl0ZWNvZGVBbmRN
YWNoaW5lT2Zmc2V0PiYgQXNzZW1ibHlIZWxwZXJzOjpkZWNvZGVkQ29kZU1hcEZvcihDb2RlQmxv
Y2sqCiAgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zm
c2V0PiA+OjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9kZWNvZGVkQ29kZU1hcHMuYWRkKGNvZGVCbG9j
aywgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4oKSk7CiAgICAgCiAgICAgaWYgKHJl
c3VsdC5pc05ld0VudHJ5KQotICAgICAgICBjb2RlQmxvY2stPmppdENvZGVNYXAoKS0+ZGVjb2Rl
KHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKKyAgICAgICAgY29kZUJsb2NrLT5qaXRDb2RlTWFw
KCktPmRlY29kZShyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKICAgICAKLSAgICByZXR1cm4gcmVz
dWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7
CiB9CiAKICNpZiBFTkFCTEUoU0FNUExJTkdfRkxBR1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlQ2FjaGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQnl0ZUNvZGVDYWNoZS5oCmluZGV4IGY2YTc0NWM2NjU4NzEzM2IxMmNiZDQ0ZmYz
YTkyOWE5M2MxYmExMDcuLjhlZDE1NzhmMjZkM2E0ZTc1ZTIzYTlkOGVlZmYwOWFiNGFiNjAwOWMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVDYWNoZS5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVDYWNoZS5oCkBAIC0x
MzIsMTAgKzEzMiwxMCBAQCBwdWJsaWM6CiAgICAgICAgIE1hcDo6aXRlcmF0b3IgYmVnaW4gPSBt
X21hcC5iZWdpbigpOwogICAgICAgICBNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fbWFwLmVuZCgpOwog
ICAgICAgICBmb3IgKE1hcDo6aXRlcmF0b3IgaXRlciA9IGJlZ2luOyBpdGVyICE9IGVuZDsgKytp
dGVyKSB7Ci0gICAgICAgICAgICBpZiAoIWl0ZXItPnNlY29uZC5jb2RlQmxvY2spCisgICAgICAg
ICAgICBpZiAoIWl0ZXItPnZhbHVlLmNvZGVCbG9jaykKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIGlmIChpdGVyLT5zZWNvbmQub3duZWQpIHsKLSAgICAgICAgICAgICAg
ICBkZWxldGUgaXRlci0+c2Vjb25kLmNvZGVCbG9jazsKKyAgICAgICAgICAgIGlmIChpdGVyLT52
YWx1ZS5vd25lZCkgeworICAgICAgICAgICAgICAgIGRlbGV0ZSBpdGVyLT52YWx1ZS5jb2RlQmxv
Y2s7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
QEAgLTE0NSw3ICsxNDUsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBNYXA6Oml0ZXJhdG9y
IGl0ZXIgPSBtX21hcC5maW5kKGtleSk7CiAgICAgICAgIGlmIChpdGVyICE9IG1fbWFwLmVuZCgp
KQotICAgICAgICAgICAgcmV0dXJuIGl0ZXItPnNlY29uZC5jb2RlQmxvY2s7CisgICAgICAgICAg
ICByZXR1cm4gaXRlci0+dmFsdWUuY29kZUJsb2NrOwogICAgICAgICAKICAgICAgICAgQnl0ZUNv
ZGVDYWNoZVZhbHVlIHZhbHVlOwogICAgICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKaW5kZXggZjBkYTZjYzAxYjcwZTg3OWJiOTA5Nzhj
OGJhODcwNmZhZDg2OGQxZS4uMmE0NGFiMjU5MThmMzE3NjRjNWZlN2ZiYjZkZDZlNTJmOWJmMTQ2
MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAKQEAgLTU1Myw5ICs1NTMsOSBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgSGFzaE1hcDxK
U0NlbGwqLCBOb2RlSW5kZXg+OjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9jZWxsQ29uc3RhbnROb2Rl
cy5hZGQoY2VsbCwgTm9Ob2RlKTsKICAgICAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQotICAg
ICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBhZGRUb0dyYXBoKFdlYWtKU0NvbnN0
YW50LCBPcEluZm8oY2VsbCkpOworICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9
IGFkZFRvR3JhcGgoV2Vha0pTQ29uc3RhbnQsIE9wSW5mbyhjZWxsKSk7CiAgICAgICAgIAotICAg
ICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1
bHQuaXRlcmF0b3ItPnZhbHVlOwogICAgIH0KICAgICAKICAgICBDb2RlT3JpZ2luIGN1cnJlbnRD
b2RlT3JpZ2luKCkKQEAgLTI1OTgsNyArMjU5OCw3IEBAIEJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVT
dGFja0VudHJ5OjpJbmxpbmVTdGFja0VudHJ5KEJ5dGVDb2RlUGFyc2VyKiBieXRlQ29kZVBhcnNl
CiAgICAgICAgICAgICBJZGVudGlmaWVyTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gYnl0ZUNvZGVQ
YXJzZXItPm1faWRlbnRpZmllck1hcC5hZGQocmVwLCBieXRlQ29kZVBhcnNlci0+bV9jb2RlQmxv
Y2stPm51bWJlck9mSWRlbnRpZmllcnMoKSk7CiAgICAgICAgICAgICBpZiAocmVzdWx0LmlzTmV3
RW50cnkpCiAgICAgICAgICAgICAgICAgYnl0ZUNvZGVQYXJzZXItPm1fY29kZUJsb2NrLT5hZGRJ
ZGVudGlmaWVyKElkZW50aWZpZXIoYnl0ZUNvZGVQYXJzZXItPm1fZ2xvYmFsRGF0YSwgcmVwKSk7
Ci0gICAgICAgICAgICBtX2lkZW50aWZpZXJSZW1hcFtpXSA9IHJlc3VsdC5pdGVyYXRvci0+c2Vj
b25kOworICAgICAgICAgICAgbV9pZGVudGlmaWVyUmVtYXBbaV0gPSByZXN1bHQuaXRlcmF0b3It
PnZhbHVlOwogICAgICAgICB9CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29kZUJs
b2NrLT5udW1iZXJPZkNvbnN0YW50UmVnaXN0ZXJzKCk7ICsraSkgewogICAgICAgICAgICAgSlNW
YWx1ZSB2YWx1ZSA9IGNvZGVCbG9jay0+Z2V0Q29uc3RhbnQoaSArIEZpcnN0Q29uc3RhbnRSZWdp
c3RlckluZGV4KTsKQEAgLTI2MTYsNyArMjYxNiw3IEBAIEJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVT
dGFja0VudHJ5OjpJbmxpbmVTdGFja0VudHJ5KEJ5dGVDb2RlUGFyc2VyKiBieXRlQ29kZVBhcnNl
CiAgICAgICAgICAgICAgICAgYnl0ZUNvZGVQYXJzZXItPm1fY29kZUJsb2NrLT5hZGRDb25zdGFu
dCh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgYnl0ZUNvZGVQYXJzZXItPm1fY29uc3RhbnRzLmFw
cGVuZChDb25zdGFudFJlY29yZCgpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fY29u
c3RhbnRSZW1hcFtpXSA9IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICAgICAgbV9j
b25zdGFudFJlbWFwW2ldID0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgfQogICAg
ICAgICAKICAgICAgICAgbV9jYWxsc2l0ZUJsb2NrSGVhZE5lZWRzTGlua2luZyA9IHRydWU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCmluZGV4IGM1NGJhNzdiNmU0ZmJhOTMyNmRjZWI5
MWU1NTVhYmI2NGYwMmJmNzEuLjM0MjEwYWIxOWQ2ZWVkODI4ZDAwMTc1NTAyZGQzNDkwNjY2YjRl
NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCkBAIC01MDIsNyArNTAyLDcgQEAg
dm9pZCBIZWFwOjptYXJrUHJvdGVjdGVkT2JqZWN0cyhIZWFwUm9vdFZpc2l0b3ImIGhlYXBSb290
VmlzaXRvcikKIHsKICAgICBQcm90ZWN0Q291bnRTZXQ6Oml0ZXJhdG9yIGVuZCA9IG1fcHJvdGVj
dGVkVmFsdWVzLmVuZCgpOwogICAgIGZvciAoUHJvdGVjdENvdW50U2V0OjppdGVyYXRvciBpdCA9
IG1fcHJvdGVjdGVkVmFsdWVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaGVh
cFJvb3RWaXNpdG9yLnZpc2l0KCZpdC0+Zmlyc3QpOworICAgICAgICBoZWFwUm9vdFZpc2l0b3Iu
dmlzaXQoJml0LT5rZXkpOwogfQogCiB2b2lkIEhlYXA6OnB1c2hUZW1wU29ydFZlY3RvcihWZWN0
b3I8VmFsdWVTdHJpbmdQYWlyPiogdGVtcFZlY3RvcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
aAppbmRleCBjNzhjODU2MjhhMTRkYzdhZjdmOTVkNzU4NzA2ZDA2ZGRjMGQxY2JkLi41NDdjYTQ4
NjY0MTYyYzRlZjMxN2E5ZjA4MDc0YzFhMjg1ZjlkMjYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcC5oCkBAIC0zNTAsNyArMzUwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgewogICAgICAg
ICBQcm90ZWN0Q291bnRTZXQ6Oml0ZXJhdG9yIGVuZCA9IG1fcHJvdGVjdGVkVmFsdWVzLmVuZCgp
OwogICAgICAgICBmb3IgKFByb3RlY3RDb3VudFNldDo6aXRlcmF0b3IgaXQgPSBtX3Byb3RlY3Rl
ZFZhbHVlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBmdW5jdG9yKGl0
LT5maXJzdCk7CisgICAgICAgICAgICBmdW5jdG9yKGl0LT5rZXkpOwogICAgICAgICBtX2hhbmRs
ZUhlYXAuZm9yRWFjaFN0cm9uZ0hhbmRsZShmdW5jdG9yLCBtX3Byb3RlY3RlZFZhbHVlcyk7CiAK
ICAgICAgICAgcmV0dXJuIGZ1bmN0b3IucmV0dXJuVmFsdWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmNwcAppbmRleCA1NDFjYzg5NmEzMjg5MGY2YzVlZjYxYjRiNjViNzI0ZTY4ZWU2YjQxLi5l
NGM3MmYxZWI2NDc4MTI2OGJhNWQ0NGNkYjE5YjI5ODM0NDM1NDk2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuY3BwCkBAIC02NDMsOCArNjQzLDggQEAgSklUQ29kZSBKSVQ6OnByaXZhdGVDb21w
aWxlKENvZGVQdHIqIGZ1bmN0aW9uRW50cnlBcml0eUNoZWNrLCBKSVRDb21waWxhdGlvbkVmZm8K
IAogICAgICAgICAgICAgU3RyaW5nSnVtcFRhYmxlOjpTdHJpbmdPZmZzZXRUYWJsZTo6aXRlcmF0
b3IgZW5kID0gcmVjb3JkLmp1bXBUYWJsZS5zdHJpbmdKdW1wVGFibGUtPm9mZnNldFRhYmxlLmVu
ZCgpOyAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yIChTdHJpbmdKdW1wVGFibGU6OlN0cmlu
Z09mZnNldFRhYmxlOjppdGVyYXRvciBpdCA9IHJlY29yZC5qdW1wVGFibGUuc3RyaW5nSnVtcFRh
YmxlLT5vZmZzZXRUYWJsZS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBvZmZzZXQgPSBpdC0+c2Vjb25kLmJyYW5jaE9mZnNldDsKLSAgICAgICAg
ICAgICAgICBpdC0+c2Vjb25kLmN0aU9mZnNldCA9IG9mZnNldCA/IHBhdGNoQnVmZmVyLmxvY2F0
aW9uT2YobV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyBvZmZzZXRdKSA6IHJlY29yZC5qdW1wVGFi
bGUuc3RyaW5nSnVtcFRhYmxlLT5jdGlEZWZhdWx0OworICAgICAgICAgICAgICAgIHVuc2lnbmVk
IG9mZnNldCA9IGl0LT52YWx1ZS5icmFuY2hPZmZzZXQ7CisgICAgICAgICAgICAgICAgaXQtPnZh
bHVlLmN0aU9mZnNldCA9IG9mZnNldCA/IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YobV9sYWJlbHNb
Ynl0ZWNvZGVPZmZzZXQgKyBvZmZzZXRdKSA6IHJlY29yZC5qdW1wVGFibGUuc3RyaW5nSnVtcFRh
YmxlLT5jdGlEZWZhdWx0OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAppbmRleCA4MmY2ZGY3ZDEyYThlZjI3NDQwNTUx
NmRlNjZjNTUzNjM4YjRmZGQwLi5jYjkwZjQyMzMzYWU5Y2JkNmFjZWNmN2Q2MTRhZTk1NGY5NGI5
MTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcApAQCAtMzU2MCwyMiAr
MzU2MCwyMiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgSklUVGh1bmtzOjpjdGlTdHViKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSwgVGh1bmtHZW5lcmF0bwogewogICAgIENUSVN0dWJNYXA6OkFk
ZFJlc3VsdCBlbnRyeSA9IG1fY3RpU3R1Yk1hcC5hZGQoZ2VuZXJhdG9yLCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYoKSk7CiAgICAgaWYgKGVudHJ5LmlzTmV3RW50cnkpCi0gICAgICAgIGVudHJ5Lml0
ZXJhdG9yLT5zZWNvbmQgPSBnZW5lcmF0b3IoZ2xvYmFsRGF0YSk7Ci0gICAgcmV0dXJuIGVudHJ5
Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgIGVudHJ5Lml0ZXJhdG9yLT52YWx1ZSA9IGdlbmVy
YXRvcihnbG9iYWxEYXRhKTsKKyAgICByZXR1cm4gZW50cnkuaXRlcmF0b3ItPnZhbHVlOwogfQog
CiBOYXRpdmVFeGVjdXRhYmxlKiBKSVRUaHVua3M6Omhvc3RGdW5jdGlvblN0dWIoSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhLCBOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgTmF0aXZlRnVuY3Rpb24g
Y29uc3RydWN0b3IpCiB7CiAgICAgSG9zdEZ1bmN0aW9uU3R1Yk1hcDo6QWRkUmVzdWx0IHJlc3Vs
dCA9IG1faG9zdEZ1bmN0aW9uU3R1Yk1hcC0+YWRkKGZ1bmN0aW9uLCBQYXNzV2VhazxOYXRpdmVF
eGVjdXRhYmxlPigpKTsKLSAgICBpZiAoIXJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKQotICAgICAg
ICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IFBhc3NXZWFrPE5hdGl2ZUV4ZWN1dGFibGU+KCpn
bG9iYWxEYXRhLCBOYXRpdmVFeGVjdXRhYmxlOjpjcmVhdGUoKmdsb2JhbERhdGEsIEpJVDo6Y29t
cGlsZUNUSU5hdGl2ZUNhbGwoZ2xvYmFsRGF0YSwgZnVuY3Rpb24pLCBmdW5jdGlvbiwgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoY3RpTmF0aXZlQ29uc3Ry
dWN0KCkpLCBjb25zdHJ1Y3RvciwgTm9JbnRyaW5zaWMpKTsKLSAgICByZXR1cm4gcmVzdWx0Lml0
ZXJhdG9yLT5zZWNvbmQuZ2V0KCk7CisgICAgaWYgKCFyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKQor
ICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gUGFzc1dlYWs8TmF0aXZlRXhlY3V0YWJs
ZT4oKmdsb2JhbERhdGEsIE5hdGl2ZUV4ZWN1dGFibGU6OmNyZWF0ZSgqZ2xvYmFsRGF0YSwgSklU
Ojpjb21waWxlQ1RJTmF0aXZlQ2FsbChnbG9iYWxEYXRhLCBmdW5jdGlvbiksIGZ1bmN0aW9uLCBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihjdGlOYXRpdmVD
b25zdHJ1Y3QoKSksIGNvbnN0cnVjdG9yLCBOb0ludHJpbnNpYykpOworICAgIHJldHVybiByZXN1
bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpOwogfQogCiBOYXRpdmVFeGVjdXRhYmxlKiBKSVRUaHVu
a3M6Omhvc3RGdW5jdGlvblN0dWIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBOYXRpdmVGdW5j
dGlvbiBmdW5jdGlvbiwgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yLCBJbnRyaW5zaWMgaW50cmlu
c2ljKQogewogICAgIEhvc3RGdW5jdGlvblN0dWJNYXA6OkFkZFJlc3VsdCBlbnRyeSA9IG1faG9z
dEZ1bmN0aW9uU3R1Yk1hcC0+YWRkKGZ1bmN0aW9uLCBQYXNzV2VhazxOYXRpdmVFeGVjdXRhYmxl
PigpKTsKLSAgICBpZiAoISplbnRyeS5pdGVyYXRvci0+c2Vjb25kKSB7CisgICAgaWYgKCEqZW50
cnkuaXRlcmF0b3ItPnZhbHVlKSB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb2Rl
OwogICAgICAgICBpZiAoZ2VuZXJhdG9yKSB7CiAgICAgICAgICAgICBpZiAoZ2xvYmFsRGF0YS0+
Y2FuVXNlSklUKCkpCkBAIC0zNTg0LDkgKzM1ODQsOSBAQCBOYXRpdmVFeGVjdXRhYmxlKiBKSVRU
aHVua3M6Omhvc3RGdW5jdGlvblN0dWIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBOYXRpdmVG
dQogICAgICAgICAgICAgICAgIGNvZGUgPSBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoKTsKICAgICAg
ICAgfSBlbHNlCiAgICAgICAgICAgICBjb2RlID0gSklUOjpjb21waWxlQ1RJTmF0aXZlQ2FsbChn
bG9iYWxEYXRhLCBmdW5jdGlvbik7Ci0gICAgICAgIGVudHJ5Lml0ZXJhdG9yLT5zZWNvbmQgPSBQ
YXNzV2VhazxOYXRpdmVFeGVjdXRhYmxlPigqZ2xvYmFsRGF0YSwgTmF0aXZlRXhlY3V0YWJsZTo6
Y3JlYXRlKCpnbG9iYWxEYXRhLCBjb2RlLCBmdW5jdGlvbiwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoY3RpTmF0aXZlQ29uc3RydWN0KCkpLCBjYWxsSG9z
dEZ1bmN0aW9uQXNDb25zdHJ1Y3RvciwgaW50cmluc2ljKSk7CisgICAgICAgIGVudHJ5Lml0ZXJh
dG9yLT52YWx1ZSA9IFBhc3NXZWFrPE5hdGl2ZUV4ZWN1dGFibGU+KCpnbG9iYWxEYXRhLCBOYXRp
dmVFeGVjdXRhYmxlOjpjcmVhdGUoKmdsb2JhbERhdGEsIGNvZGUsIGZ1bmN0aW9uLCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihjdGlOYXRpdmVDb25zdHJ1
Y3QoKSksIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yLCBpbnRyaW5zaWMpKTsKICAgICB9
Ci0gICAgcmV0dXJuIGVudHJ5Lml0ZXJhdG9yLT5zZWNvbmQuZ2V0KCk7CisgICAgcmV0dXJuIGVu
dHJ5Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKIH0KIAogdm9pZCBKSVRUaHVua3M6OmNsZWFySG9z
dEZ1bmN0aW9uU3R1YnMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9QYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCmlu
ZGV4IDY5NDM5NzdhODVhNmZmN2M5MTFhNzJhNGM4MzliNjljMWQ3NDM4YWQuLjAzYzY2NWM3ZjU2
MDAyZjY0NzkxYmEyOGRjNTFiZWFkNDZiYjEzZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL1BhcnNlci5jcHAKQEAgLTEzMjUsMTAgKzEzMjUsMTAgQEAgdGVtcGxhdGUgPGNsYXNzIFRy
ZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VTdHJpY3RP
YmplY3QKICAgICAgICAgaWYgKCFtX3N5bnRheEFscmVhZHlWYWxpZGF0ZWQpIHsKICAgICAgICAg
ICAgIE9iamVjdFZhbGlkYXRpb25NYXA6OkFkZFJlc3VsdCBwcm9wZXJ0eUVudHJ5ID0gb2JqZWN0
VmFsaWRhdG9yLmFkZChjb250ZXh0LmdldE5hbWUocHJvcGVydHkpLmltcGwoKSwgY29udGV4dC5n
ZXRUeXBlKHByb3BlcnR5KSk7CiAgICAgICAgICAgICBpZiAoIXByb3BlcnR5RW50cnkuaXNOZXdF
bnRyeSkgewotICAgICAgICAgICAgICAgIGZhaWxJZlRydWUocHJvcGVydHlFbnRyeS5pdGVyYXRv
ci0+c2Vjb25kID09IFByb3BlcnR5Tm9kZTo6Q29uc3RhbnQpOworICAgICAgICAgICAgICAgIGZh
aWxJZlRydWUocHJvcGVydHlFbnRyeS5pdGVyYXRvci0+dmFsdWUgPT0gUHJvcGVydHlOb2RlOjpD
b25zdGFudCk7CiAgICAgICAgICAgICAgICAgZmFpbElmVHJ1ZShjb250ZXh0LmdldFR5cGUocHJv
cGVydHkpID09IFByb3BlcnR5Tm9kZTo6Q29uc3RhbnQpOwotICAgICAgICAgICAgICAgIGZhaWxJ
ZlRydWUoY29udGV4dC5nZXRUeXBlKHByb3BlcnR5KSAmIHByb3BlcnR5RW50cnkuaXRlcmF0b3It
PnNlY29uZCk7Ci0gICAgICAgICAgICAgICAgcHJvcGVydHlFbnRyeS5pdGVyYXRvci0+c2Vjb25k
IHw9IGNvbnRleHQuZ2V0VHlwZShwcm9wZXJ0eSk7CisgICAgICAgICAgICAgICAgZmFpbElmVHJ1
ZShjb250ZXh0LmdldFR5cGUocHJvcGVydHkpICYgcHJvcGVydHlFbnRyeS5pdGVyYXRvci0+dmFs
dWUpOworICAgICAgICAgICAgICAgIHByb3BlcnR5RW50cnkuaXRlcmF0b3ItPnZhbHVlIHw9IGNv
bnRleHQuZ2V0VHlwZShwcm9wZXJ0eSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAg
ICAgdGFpbCA9IGNvbnRleHQuY3JlYXRlUHJvcGVydHlMaXN0KG1fbGV4ZXItPmxhc3RMaW5lTnVt
YmVyKCksIHByb3BlcnR5LCB0YWlsKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wcm9maWxlci9Qcm9maWxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Q
cm9maWxlLmNwcAppbmRleCA0OWQ2ZGU5N2E5OGFiMGM1M2ZlZWE2NWIzODk2OWZkMzAxMTMzOTk3
Li4xM2RmODM3ZjIzNTI3MGUxNDI0MTc1MzJlZDgxNTc0Njk5ZTdiYThlIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZS5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGUuY3BwCkBAIC0xMDcsMjggKzEwNywyOCBAQCB2
b2lkIFByb2ZpbGU6OmRlYnVnUHJpbnREYXRhKCkgY29uc3QKICAgICBtX2hlYWQtPmRlYnVnUHJp
bnREYXRhKDApOwogfQogCi10eXBlZGVmIHBhaXI8U3RyaW5nSW1wbCosIHVuc2lnbmVkPiBOYW1l
Q291bnRQYWlyOwordHlwZWRlZiBXVEY6Okhhc2hNYXBFbnRyeTxGdW5jdGlvbkNhbGxIYXNoQ291
bnQ6OlZhbHVlVHlwZSwgdW5zaWduZWQ+IE5hbWVDb3VudEVudHJ5OwogCi1zdGF0aWMgaW5saW5l
IGJvb2wgZnVuY3Rpb25OYW1lQ291bnRQYWlyQ29tcGFyYXRvcihjb25zdCBOYW1lQ291bnRQYWly
JiBhLCBjb25zdCBOYW1lQ291bnRQYWlyJiBiKQorc3RhdGljIGlubGluZSBib29sIGZ1bmN0aW9u
TmFtZUNvdW50RW50cnlDb21wYXJhdG9yKGNvbnN0IE5hbWVDb3VudEVudHJ5JiBhLCBjb25zdCBO
YW1lQ291bnRFbnRyeSYgYikKIHsKLSAgICByZXR1cm4gYS5zZWNvbmQgPiBiLnNlY29uZDsKKyAg
ICByZXR1cm4gYS52YWx1ZSA+IGIudmFsdWU7CiB9CiAKIHZvaWQgUHJvZmlsZTo6ZGVidWdQcmlu
dERhdGFTYW1wbGVTdHlsZSgpIGNvbnN0CiB7Ci0gICAgdHlwZWRlZiBWZWN0b3I8TmFtZUNvdW50
UGFpcj4gTmFtZUNvdW50UGFpclZlY3RvcjsKKyAgICB0eXBlZGVmIFZlY3RvcjxOYW1lQ291bnRF
bnRyeT4gTmFtZUNvdW50RW50cnlWZWN0b3I7CiAKICAgICBGdW5jdGlvbkNhbGxIYXNoQ291bnQg
Y291bnRlZEZ1bmN0aW9uczsKICAgICBkYXRhTG9nKCJDYWxsIGdyYXBoOlxuIik7CiAgICAgbV9o
ZWFkLT5kZWJ1Z1ByaW50RGF0YVNhbXBsZVN0eWxlKDAsIGNvdW50ZWRGdW5jdGlvbnMpOwogCiAg
ICAgZGF0YUxvZygiXG5Ub3RhbCBudW1iZXIgaW4gc3RhY2s6XG4iKTsKLSAgICBOYW1lQ291bnRQ
YWlyVmVjdG9yIHNvcnRlZEZ1bmN0aW9ucyhjb3VudGVkRnVuY3Rpb25zLnNpemUoKSk7CisgICAg
TmFtZUNvdW50RW50cnlWZWN0b3Igc29ydGVkRnVuY3Rpb25zKGNvdW50ZWRGdW5jdGlvbnMuc2l6
ZSgpKTsKICAgICBjb3B5VG9WZWN0b3IoY291bnRlZEZ1bmN0aW9ucywgc29ydGVkRnVuY3Rpb25z
KTsKIAotICAgIHN0ZDo6c29ydChzb3J0ZWRGdW5jdGlvbnMuYmVnaW4oKSwgc29ydGVkRnVuY3Rp
b25zLmVuZCgpLCBmdW5jdGlvbk5hbWVDb3VudFBhaXJDb21wYXJhdG9yKTsKLSAgICBmb3IgKE5h
bWVDb3VudFBhaXJWZWN0b3I6Oml0ZXJhdG9yIGl0ID0gc29ydGVkRnVuY3Rpb25zLmJlZ2luKCk7
IGl0ICE9IHNvcnRlZEZ1bmN0aW9ucy5lbmQoKTsgKytpdCkKLSAgICAgICAgZGF0YUxvZygiICAg
ICAgICAlLTEyZCVzXG4iLCAoKml0KS5zZWNvbmQsIFVTdHJpbmcoKCppdCkuZmlyc3QpLnV0Zjgo
KS5kYXRhKCkpOworICAgIHN0ZDo6c29ydChzb3J0ZWRGdW5jdGlvbnMuYmVnaW4oKSwgc29ydGVk
RnVuY3Rpb25zLmVuZCgpLCBmdW5jdGlvbk5hbWVDb3VudEVudHJ5Q29tcGFyYXRvcik7CisgICAg
Zm9yIChOYW1lQ291bnRFbnRyeVZlY3Rvcjo6aXRlcmF0b3IgaXQgPSBzb3J0ZWRGdW5jdGlvbnMu
YmVnaW4oKTsgaXQgIT0gc29ydGVkRnVuY3Rpb25zLmVuZCgpOyArK2l0KQorICAgICAgICBkYXRh
TG9nKCIgICAgICAgICUtMTJkJXNcbiIsICgqaXQpLnZhbHVlLCBVU3RyaW5nKCgqaXQpLmtleSku
dXRmOCgpLmRhdGEoKSk7CiAKICAgICBkYXRhTG9nKCJcblNvcnQgYnkgdG9wIG9mIHN0YWNrLCBz
YW1lIGNvbGxhcHNlZCAod2hlbiA+PSA1KTpcbiIpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JZGVudGlmaWVyLmNwcAppbmRleCAxODJiY2M0NjIwMjJiNGVjMmNiYWM2ODU1
YzUwMjlmNjRjNzExZmZmLi45MjJjYWEyYjYwMDAwYmNjMTI3YzMzYzA5NTFmODNmZWRmNmIzMjUz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmNwcApAQCAt
MTA4LDcgKzEwOCw3IEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gSWRlbnRpZmllcjo6YWRkKEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgY2hhciogYykKIAogICAgIGNvbnN0IExpdGVy
YWxJZGVudGlmaWVyVGFibGU6Oml0ZXJhdG9yJiBpdGVyID0gbGl0ZXJhbElkZW50aWZpZXJUYWJs
ZS5maW5kKGMpOwogICAgIGlmIChpdGVyICE9IGxpdGVyYWxJZGVudGlmaWVyVGFibGUuZW5kKCkp
Ci0gICAgICAgIHJldHVybiBpdGVyLT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBpdGVyLT52YWx1
ZTsKIAogICAgIEhhc2hTZXQ8U3RyaW5nSW1wbCo+OjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gaWRl
bnRpZmllclRhYmxlLmFkZDxjb25zdCBMQ2hhciosIElkZW50aWZpZXJDU3RyaW5nVHJhbnNsYXRv
cj4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KGMpKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5jcHAKaW5kZXggM2UwNTczOGViNTRjN2Iw
NGNlZjcyYzE1YjNiYzI3ZTkzOGE4YzU1NC4uOWVjNjliM2M2MTI1MTNkNDMzZDA2ZmE5ODViZDNh
MDM1ZDA5ZWE3ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
Y3RpdmF0aW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2
YXRpb24uY3BwCkBAIC0xMjIsMTEgKzEyMiwxMSBAQCB2b2lkIEpTQWN0aXZhdGlvbjo6Z2V0T3du
UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3Blcgog
ICAgIEpTQWN0aXZhdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FjdGl2YXRpb24qPihvYmpl
Y3QpOwogICAgIFN5bWJvbFRhYmxlOjpjb25zdF9pdGVyYXRvciBlbmQgPSB0aGlzT2JqZWN0LT5z
eW1ib2xUYWJsZSgpLmVuZCgpOwogICAgIGZvciAoU3ltYm9sVGFibGU6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQuZ2V0QXR0cmlidXRlcygpICYgRG9udEVudW0gJiYg
bW9kZSAhPSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKQorICAgICAgICBpZiAoaXQtPnZhbHVl
LmdldEF0dHJpYnV0ZXMoKSAmIERvbnRFbnVtICYmIG1vZGUgIT0gSW5jbHVkZURvbnRFbnVtUHJv
cGVydGllcykKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoaXQtPnNlY29uZC5n
ZXRJbmRleCgpID49IHRoaXNPYmplY3QtPm1fbnVtQ2FwdHVyZWRWYXJzKQorICAgICAgICBpZiAo
aXQtPnZhbHVlLmdldEluZGV4KCkgPj0gdGhpc09iamVjdC0+bV9udW1DYXB0dXJlZFZhcnMpCiAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmll
cihleGVjLCBpdC0+Zmlyc3QuZ2V0KCkpKTsKKyAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRl
bnRpZmllcihleGVjLCBpdC0+a2V5LmdldCgpKSk7CiAgICAgfQogICAgIC8vIFNraXAgdGhlIEpT
VmFyaWFibGVPYmplY3QgaW1wbGVtZW50YXRpb24gb2YgZ2V0T3duUHJvcGVydHlOYW1lcwogICAg
IEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5
TmFtZXMsIG1vZGUpOwpAQCAtMTM5LDcgKzEzOSw3IEBAIGlubGluZSBib29sIEpTQWN0aXZhdGlv
bjo6c3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRlcyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
CiAgICAgU3ltYm9sVGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSBzeW1ib2xUYWJsZSgpLmZpbmQocHJv
cGVydHlOYW1lLmltcGwoKSk7CiAgICAgaWYgKGl0ZXIgPT0gc3ltYm9sVGFibGUoKS5lbmQoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFN5bWJvbFRhYmxlRW50cnkmIGVudHJ5ID0gaXRl
ci0+c2Vjb25kOworICAgIFN5bWJvbFRhYmxlRW50cnkmIGVudHJ5ID0gaXRlci0+dmFsdWU7CiAg
ICAgQVNTRVJUKCFlbnRyeS5pc051bGwoKSk7CiAgICAgaWYgKGVudHJ5LmdldEluZGV4KCkgPj0g
bV9udW1DYXB0dXJlZFZhcnMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKaW5kZXggMGZmYTA3NmNlYWYwOTYwNGZhYmFiYzBm
Njk1N2MxNTZmMWYxYWUzMS4uMjA2NWU3NjBiYmViNmUyZTljNDc4ZDI3YTBlYTQ0NGViNDM4YjVi
MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKQEAgLTIxMCw3
ICsyMTAsNyBAQCBpbmxpbmUgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6QWRkUmVzdWx0IFNwYXJzZUFy
cmF5VmFsdWVNYXA6OmFkZChKU0FycmF5KiBhcnJheSwgdQogaW5saW5lIHZvaWQgU3BhcnNlQXJy
YXlWYWx1ZU1hcDo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJheSogYXJyYXksIHVuc2lnbmVk
IGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCiB7CiAgICAgQWRkUmVzdWx0IHJl
c3VsdCA9IGFkZChhcnJheSwgaSk7Ci0gICAgU3BhcnNlQXJyYXlFbnRyeSYgZW50cnkgPSByZXN1
bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBTcGFyc2VBcnJheUVudHJ5JiBlbnRyeSA9IHJlc3Vs
dC5pdGVyYXRvci0+dmFsdWU7CiAKICAgICAvLyBUbyBzYXZlIGEgc2VwYXJhdGUgZmluZCAmIGFk
ZCwgd2UgZmlyc3QgYWx3YXlzIGFkZCB0byB0aGUgc3BhcnNlIG1hcC4KICAgICAvLyBJbiB0aGUg
dW5jb21tb24gY2FzZSB0aGF0IHRoaXMgaXMgYSBuZXcgcHJvcGVydHksIGFuZCB0aGUgYXJyYXkg
aXMgbm90CkBAIC0yNTMsNyArMjUzLDcgQEAgaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1h
cDo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJheSogYXJyYXksIHVuc2lnbmVkIGkKIGlubGlu
ZSBib29sIFNwYXJzZUFycmF5VmFsdWVNYXA6OnB1dERpcmVjdChFeGVjU3RhdGUqIGV4ZWMsIEpT
QXJyYXkqIGFycmF5LCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93
KQogewogICAgIEFkZFJlc3VsdCByZXN1bHQgPSBhZGQoYXJyYXksIGkpOwotICAgIFNwYXJzZUFy
cmF5RW50cnkmIGVudHJ5ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgU3BhcnNlQXJy
YXlFbnRyeSYgZW50cnkgPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogCiAgICAgLy8gVG8gc2F2
ZSBhIHNlcGFyYXRlIGZpbmQgJiBhZGQsIHdlIGZpcnN0IGFsd2F5cyBhZGQgdG8gdGhlIHNwYXJz
ZSBtYXAuCiAgICAgLy8gSW4gdGhlIHVuY29tbW9uIGNhc2UgdGhhdCB0aGlzIGlzIGEgbmV3IHBy
b3BlcnR5LCBhbmQgdGhlIGFycmF5IGlzIG5vdApAQCAtMzE5LDcgKzMxOSw3IEBAIGlubGluZSB2
b2lkIFNwYXJzZUFycmF5VmFsdWVNYXA6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgaXRlcmF0b3IgZW5kID0gbV9tYXAuZW5kKCk7CiAgICAgZm9yIChpdGVyYXRv
ciBpdCA9IG1fbWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgdmlzaXRvci5h
cHBlbmQoJml0LT5zZWNvbmQpOworICAgICAgICB2aXNpdG9yLmFwcGVuZCgmaXQtPnZhbHVlKTsK
IH0KIAogdm9pZCBKU0FycmF5OjphbGxvY2F0ZVNwYXJzZU1hcChKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEpCkBAIC0zNTUsNyArMzU1LDcgQEAgdm9pZCBKU0FycmF5OjplbnRlckRpY3Rpb25hcnlN
b2RlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKICAgICAgICAgLy8gVGhpcyB3aWxsIGFsd2F5
cyBiZSBhIG5ldyBlbnRyeSBpbiB0aGUgbWFwLCBzbyBubyBuZWVkIHRvIGNoZWNrIHdlIGNhbiB3
cml0ZSwKICAgICAgICAgLy8gYW5kIGF0dHJpYnV0ZXMgYXJlIGRlZmF1bHQgc28gbm8gbmVlZCB0
byBzZXQgdGhlbS4KICAgICAgICAgaWYgKHZhbHVlKQotICAgICAgICAgICAgbWFwLT5hZGQodGhp
cywgaSkuaXRlcmF0b3ItPnNlY29uZC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAg
ICAgICAgICAgbWFwLT5hZGQodGhpcywgaSkuaXRlcmF0b3ItPnZhbHVlLnNldChnbG9iYWxEYXRh
LCB0aGlzLCB2YWx1ZSk7CiAgICAgfQogCiAgICAgdm9pZCogbmV3UmF3U3RvcmFnZSA9IDA7CkBA
IC00MzEsNyArNDMxLDcgQEAgYm9vbCBKU0FycmF5OjpkZWZpbmVPd25OdW1lcmljUHJvcGVydHko
RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHkKIAogICAgIC8vIDEuIExl
dCBjdXJyZW50IGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tHZXRPd25Qcm9wZXJ0eV1d
IGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggcHJvcGVydHkgbmFtZSBQLgogICAgIFNwYXJzZUFy
cmF5VmFsdWVNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtYXAtPmFkZCh0aGlzLCBpbmRleCk7Ci0g
ICAgU3BhcnNlQXJyYXlFbnRyeSogZW50cnlJbk1hcCA9ICZyZXN1bHQuaXRlcmF0b3ItPnNlY29u
ZDsKKyAgICBTcGFyc2VBcnJheUVudHJ5KiBlbnRyeUluTWFwID0gJnJlc3VsdC5pdGVyYXRvci0+
dmFsdWU7CiAKICAgICAvLyAyLiBMZXQgZXh0ZW5zaWJsZSBiZSB0aGUgdmFsdWUgb2YgdGhlIFtb
RXh0ZW5zaWJsZV1dIGludGVybmFsIHByb3BlcnR5IG9mIE8uCiAgICAgLy8gMy4gSWYgY3VycmVu
dCBpcyB1bmRlZmluZWQgYW5kIGV4dGVuc2libGUgaXMgZmFsc2UsIHRoZW4gUmVqZWN0LgpAQCAt
NjYzLDcgKzY2Myw3IEBAIGJvb2wgSlNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChK
U0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQKICAgICB9IGVsc2UgaWYgKFNw
YXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHRoaXNPYmplY3QtPm1fc3BhcnNlVmFsdWVNYXApIHsK
ICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAtPmZpbmQoaSk7
CiAgICAgICAgIGlmIChpdCAhPSBtYXAtPm5vdEZvdW5kKCkpIHsKLSAgICAgICAgICAgIGl0LT5z
ZWNvbmQuZ2V0KHNsb3QpOworICAgICAgICAgICAgaXQtPnZhbHVlLmdldChzbG90KTsKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQpAQCAtNzExLDcgKzcxMSw3IEBA
IGJvb2wgSlNBcnJheTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3Qs
IEV4ZWNTdGF0ZSogZXhlYywgY29uc3QKICAgICAgICAgfSBlbHNlIGlmIChTcGFyc2VBcnJheVZh
bHVlTWFwKiBtYXAgPSB0aGlzT2JqZWN0LT5tX3NwYXJzZVZhbHVlTWFwKSB7CiAgICAgICAgICAg
ICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+ZmluZChpKTsKICAgICAg
ICAgICAgIGlmIChpdCAhPSBtYXAtPm5vdEZvdW5kKCkpIHsKLSAgICAgICAgICAgICAgICBpdC0+
c2Vjb25kLmdldChkZXNjcmlwdG9yKTsKKyAgICAgICAgICAgICAgICBpdC0+dmFsdWUuZ2V0KGRl
c2NyaXB0b3IpOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CkBAIC04NDQsNyArODQ0LDcgQEAgdm9pZCBKU0FycmF5OjpwdXRCeUluZGV4QmV5
b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZQogICAg
IFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7CiAgICAg
U3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKICAg
ICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHZlY3RvcltpdC0+Zmlyc3RdLnNldChnbG9i
YWxEYXRhLCB0aGlzLCBpdC0+c2Vjb25kLmdldE5vblNwYXJzZU1vZGUoKSk7CisgICAgICAgIHZl
Y3RvcltpdC0+a2V5XS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgaXQtPnZhbHVlLmdldE5vblNwYXJz
ZU1vZGUoKSk7CiAgICAgZGVhbGxvY2F0ZVNwYXJzZU1hcCgpOwogCiAgICAgLy8gU3RvcmUgdGhl
IG5ldyBwcm9wZXJ0eSBpbnRvIHRoZSB2ZWN0b3IuCkBAIC05MTQsNyArOTE0LDcgQEAgYm9vbCBK
U0FycmF5OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqIGV4ZWMs
IHVuc2lnbmVkIGksIEpTVmEKICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvciA9IHN0
b3JhZ2UtPm1fdmVjdG9yOwogICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IG1hcC0+ZW5kKCk7CiAgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICB2ZWN0
b3JbaXQtPmZpcnN0XS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgaXQtPnNlY29uZC5nZXROb25TcGFy
c2VNb2RlKCkpOworICAgICAgICB2ZWN0b3JbaXQtPmtleV0uc2V0KGdsb2JhbERhdGEsIHRoaXMs
IGl0LT52YWx1ZS5nZXROb25TcGFyc2VNb2RlKCkpOwogICAgIGRlYWxsb2NhdGVTcGFyc2VNYXAo
KTsKIAogICAgIC8vIFN0b3JlIHRoZSBuZXcgcHJvcGVydHkgaW50byB0aGUgdmVjdG9yLgpAQCAt
OTU4LDcgKzk1OCw3IEBAIGJvb2wgSlNBcnJheTo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2Vs
bCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpKQogICAgIH0gZWxzZSBpZiAoU3Bh
cnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gdGhpc09iamVjdC0+bV9zcGFyc2VWYWx1ZU1hcCkgewog
ICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+ZmluZChpKTsK
ICAgICAgICAgaWYgKGl0ICE9IG1hcC0+bm90Rm91bmQoKSkgewotICAgICAgICAgICAgaWYgKGl0
LT5zZWNvbmQuYXR0cmlidXRlcyAmIERvbnREZWxldGUpCisgICAgICAgICAgICBpZiAoaXQtPnZh
bHVlLmF0dHJpYnV0ZXMgJiBEb250RGVsZXRlKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgICAgIG1hcC0+cmVtb3ZlKGl0KTsKICAgICAgICAgfQpAQCAtOTk2LDggKzk5
Niw4IEBAIHZvaWQgSlNBcnJheTo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0
LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtCiAgICAgICAgIAogICAgICAgICBTcGFyc2VB
cnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwogICAgICAgICBm
b3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250
RW51bVByb3BlcnRpZXMgfHwgIShpdC0+c2Vjb25kLmF0dHJpYnV0ZXMgJiBEb250RW51bSkpCi0g
ICAgICAgICAgICAgICAga2V5cy5hcHBlbmQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGl0LT5maXJz
dCkpOworICAgICAgICAgICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcyB8
fCAhKGl0LT52YWx1ZS5hdHRyaWJ1dGVzICYgRG9udEVudW0pKQorICAgICAgICAgICAgICAgIGtl
eXMuYXBwZW5kKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpdC0+a2V5KSk7CiAgICAgICAgIH0KIAog
ICAgICAgICBxc29ydChrZXlzLmJlZ2luKCksIGtleXMuc2l6ZSgpLCBzaXplb2YodW5zaWduZWQp
LCBjb21wYXJlS2V5c0ZvclFTb3J0KTsKQEAgLTExOTAsNyArMTE5MCw3IEBAIGJvb2wgSlNBcnJh
eTo6c2V0TGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgbmV3TGVuZ3RoLCBib29sIHRo
cm93RXhjZXB0aW9uCiAgICAgICAgICAgICBrZXlzLnJlc2VydmVDYXBhY2l0eShtaW4obWFwLT5z
aXplKCksIHN0YXRpY19jYXN0PHNpemVfdD4obGVuZ3RoIC0gbmV3TGVuZ3RoKSkpOwogICAgICAg
ICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQo
KTsKICAgICAgICAgICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGl0LT5maXJzdCk7CisgICAgICAg
ICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaXQtPmtleSk7
CiAgICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgbGVuZ3RoICYmIGluZGV4ID49IG5ld0xlbmd0
aCkKICAgICAgICAgICAgICAgICAgICAga2V5cy5hcHBlbmQoaW5kZXgpOwogICAgICAgICAgICAg
fQpAQCAtMTIwNSw3ICsxMjA1LDcgQEAgYm9vbCBKU0FycmF5OjpzZXRMZW5ndGgoRXhlY1N0YXRl
KiBleGVjLCB1bnNpZ25lZCBuZXdMZW5ndGgsIGJvb2wgdGhyb3dFeGNlcHRpb24KICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBrZXlzWy0taV07CiAgICAgICAgICAgICAgICAg
ICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLT5maW5kKGluZGV4KTsK
ICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGl0ICE9IG1hcC0+bm90Rm91bmQoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChpdC0+c2Vjb25kLmF0dHJpYnV0ZXMgJiBEb250RGVsZXRlKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmIChpdC0+dmFsdWUuYXR0cmlidXRlcyAmIERvbnREZWxl
dGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UtPm1fbGVuZ3RoID0gaW5kZXgg
KyAxOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4
Y2VwdGlvbiwgIlVuYWJsZSB0byBkZWxldGUgcHJvcGVydHkuIik7CiAgICAgICAgICAgICAgICAg
ICAgIH0KQEAgLTE2NzAsNyArMTY3MCw3IEBAIHZvaWQgSlNBcnJheTo6c29ydChFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgY29tcGFyZUZ1bmN0aW9uLCBDYWxsVHlwZSBjYWxsVHlwZSwKIAogICAg
ICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgp
OwogICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIHRyZWUuYWJzdHJh
Y3RvcigpLm1fbm9kZXNbbnVtRGVmaW5lZF0udmFsdWUgPSBpdC0+c2Vjb25kLmdldE5vblNwYXJz
ZU1vZGUoKTsKKyAgICAgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbbnVtRGVmaW5l
ZF0udmFsdWUgPSBpdC0+dmFsdWUuZ2V0Tm9uU3BhcnNlTW9kZSgpOwogICAgICAgICAgICAgdHJl
ZS5pbnNlcnQobnVtRGVmaW5lZCk7CiAgICAgICAgICAgICArK251bURlZmluZWQ7CiAgICAgICAg
IH0KQEAgLTE3ODUsNyArMTc4NSw3IEBAIHVuc2lnbmVkIEpTQXJyYXk6OmNvbXBhY3RGb3JTb3J0
aW5nKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKIAogICAgICAgICBTcGFyc2VBcnJheVZhbHVl
TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwogICAgICAgICBmb3IgKFNwYXJz
ZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpCi0gICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltudW1EZWZpbmVkKytdLnNl
dFdpdGhvdXRXcml0ZUJhcnJpZXIoaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCkpOworICAg
ICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbbnVtRGVmaW5lZCsrXS5zZXRXaXRob3V0V3JpdGVC
YXJyaWVyKGl0LT52YWx1ZS5nZXROb25TcGFyc2VNb2RlKCkpOwogCiAgICAgICAgIGRlYWxsb2Nh
dGVTcGFyc2VNYXAoKTsKICAgICB9CkBAIC0xODQyLDEzICsxODQyLDEzIEBAIHZvaWQgSlNBcnJh
eTo6Y2hlY2tDb25zaXN0ZW5jeShDb25zaXN0ZW5jeUNoZWNrVHlwZSB0eXBlKQogICAgIGlmICht
X3NwYXJzZVZhbHVlTWFwKSB7CiAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6Oml0ZXJhdG9y
IGVuZCA9IG1fc3BhcnNlVmFsdWVNYXAtPmVuZCgpOwogICAgICAgICBmb3IgKFNwYXJzZUFycmF5
VmFsdWVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zcGFyc2VWYWx1ZU1hcC0+YmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGl0LT5maXJzdDsKKyAg
ICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gaXQtPmtleTsKICAgICAgICAgICAgIEFTU0VSVChp
bmRleCA8IHN0b3JhZ2UtPm1fbGVuZ3RoKTsKICAgICAgICAgICAgIEFTU0VSVChpbmRleCA+PSBz
dG9yYWdlLT5tX3ZlY3Rvckxlbmd0aCk7CiAgICAgICAgICAgICBBU1NFUlQoaW5kZXggPD0gTUFY
X0FSUkFZX0lOREVYKTsKLSAgICAgICAgICAgIEFTU0VSVChpdC0+c2Vjb25kKTsKKyAgICAgICAg
ICAgIEFTU0VSVChpdC0+dmFsdWUpOwogICAgICAgICAgICAgaWYgKHR5cGUgIT0gRGVzdHJ1Y3Rv
ckNvbnNpc3RlbmN5Q2hlY2spCi0gICAgICAgICAgICAgICAgaXQtPnNlY29uZC5pc1VuZGVmaW5l
ZCgpOyAvLyBMaWtlbHkgdG8gY3Jhc2ggaWYgdGhlIG9iamVjdCB3YXMgZGVhbGxvY2F0ZWQuCisg
ICAgICAgICAgICAgICAgaXQtPnZhbHVlLmlzVW5kZWZpbmVkKCk7IC8vIExpa2VseSB0byBjcmFz
aCBpZiB0aGUgb2JqZWN0IHdhcyBkZWFsbG9jYXRlZC4KICAgICAgICAgfQogICAgIH0KIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFyaWFibGVPYmplY3Qu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5jcHAK
aW5kZXggOGNhNjk1MDc0NTExOWMwNDk2ZjdkNmUwMWRjMWNlYzhmMjg5NGQ5OC4uN2MyZjZhM2Iy
NjAwZjA3YjM3NGM0ZWViNGU5NTNjOWMzODBjN2NlMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5jcHAKQEAgLTU2LDggKzU2LDggQEAg
dm9pZCBKU1ZhcmlhYmxlT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmpl
Y3QsIEV4ZWNTdGF0ZSogZXhlYywgUHIKICAgICBKU1ZhcmlhYmxlT2JqZWN0KiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTVmFyaWFibGVPYmplY3QqPihvYmplY3QpOwogICAgIFN5bWJvbFRhYmxlOjpj
b25zdF9pdGVyYXRvciBlbmQgPSB0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgpLmVuZCgpOwogICAg
IGZvciAoU3ltYm9sVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdGhpc09iamVjdC0+c3ltYm9s
VGFibGUoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKCEoaXQtPnNl
Y29uZC5nZXRBdHRyaWJ1dGVzKCkgJiBEb250RW51bSkgfHwgKG1vZGUgPT0gSW5jbHVkZURvbnRF
bnVtUHJvcGVydGllcykpCi0gICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVy
KGV4ZWMsIGl0LT5maXJzdC5nZXQoKSkpOworICAgICAgICBpZiAoIShpdC0+dmFsdWUuZ2V0QXR0
cmlidXRlcygpICYgRG9udEVudW0pIHx8IChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRp
ZXMpKQorICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihleGVjLCBpdC0+
a2V5LmdldCgpKSk7CiAgICAgfQogICAgIAogICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5h
bWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5oCmluZGV4IGJjZmU0YWI4
OTVmNjBhOTkyOGM0MjE5YTRiNDFkMzZlMTczYzRjYWQuLmFlM2ExZGY1ZDFlYmM3OTczNzZkZWQ1
ODYyZWEyNTI1ZjdiMzgwNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTVmFyaWFibGVPYmplY3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1ZhcmlhYmxlT2JqZWN0LmgKQEAgLTE0NSw3ICsxNDUsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgU3ltYm9sVGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSBzeW1ib2xUYWJsZSgpLmZpbmQo
cHJvcGVydHlOYW1lLmltcGwoKSk7CiAgICAgICAgIGlmIChpdGVyID09IHN5bWJvbFRhYmxlKCku
ZW5kKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIFN5bWJvbFRhYmxlRW50
cnkmIGVudHJ5ID0gaXRlci0+c2Vjb25kOworICAgICAgICBTeW1ib2xUYWJsZUVudHJ5JiBlbnRy
eSA9IGl0ZXItPnZhbHVlOwogICAgICAgICBBU1NFUlQoIWVudHJ5LmlzTnVsbCgpKTsKICAgICAg
ICAgZW50cnkuc2V0QXR0cmlidXRlcyhhdHRyaWJ1dGVzKTsKICAgICAgICAgcmVnaXN0ZXJBdChl
bnRyeS5nZXRJbmRleCgpKS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGUuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGUuY3BwCmluZGV4IGQ1ZWRiYmM3ZjM0
NmJmMjNmMjVkMGYwMTYxY2JiZjU3M2Y0NDA1ZDAuLjQzYjQ3YWJlOTJkMzQ4YmE0NzUyMWJmMGM4
MTJlMTk0N2ZiYmRiNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1JlZ0V4cENhY2hlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdF
eHBDYWNoZS5jcHAKQEAgLTM4LDcgKzM4LDcgQEAgUmVnRXhwKiBSZWdFeHBDYWNoZTo6bG9va3Vw
T3JDcmVhdGUoY29uc3QgVVN0cmluZyYgcGF0dGVyblN0cmluZywgUmVnRXhwRmxhZ3MgZmwKICAg
ICBSZWdFeHBLZXkga2V5KGZsYWdzLCBwYXR0ZXJuU3RyaW5nKTsKICAgICBSZWdFeHBDYWNoZU1h
cDo6aXRlcmF0b3IgcmVzdWx0ID0gbV93ZWFrQ2FjaGUuZmluZChrZXkpOwogICAgIGlmIChyZXN1
bHQgIT0gbV93ZWFrQ2FjaGUuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZC5n
ZXQoKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWUuZ2V0KCk7CiAgICAgUmVnRXhwKiBy
ZWdFeHAgPSBSZWdFeHA6OmNyZWF0ZVdpdGhvdXRDYWNoaW5nKCptX2dsb2JhbERhdGEsIHBhdHRl
cm5TdHJpbmcsIGZsYWdzKTsKICNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCiAgICAgbV9nbG9i
YWxEYXRhLT5hZGRSZWdFeHBUb1RyYWNlKHJlZ0V4cCk7CkBAIC04MSw3ICs4MSw3IEBAIHZvaWQg
UmVnRXhwQ2FjaGU6OmludmFsaWRhdGVDb2RlKCkKICAgICBtX25leHRFbnRyeUluU3Ryb25nQ2Fj
aGUgPSAwOwogICAgIFJlZ0V4cENhY2hlTWFwOjppdGVyYXRvciBlbmQgPSBtX3dlYWtDYWNoZS5l
bmQoKTsKICAgICBmb3IgKFJlZ0V4cENhY2hlTWFwOjppdGVyYXRvciBwdHIgPSBtX3dlYWtDYWNo
ZS5iZWdpbigpOyBwdHIgIT0gZW5kOyArK3B0cikKLSAgICAgICAgcHRyLT5zZWNvbmQtPmludmFs
aWRhdGVDb2RlKCk7CisgICAgICAgIHB0ci0+dmFsdWUtPmludmFsaWRhdGVDb2RlKCk7CiB9CiAK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ01hcC5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha0dDTWFwLmgKaW5kZXggZjAxYTBj
ODI2YjFjNDdmNzc0YmEzNzFiMzMyYzZhZTNkNzRiYzgwNS4uMjUyZTg0ZjkwYWE2YjJjNWVlMjZk
ZjdjODI2Zjk1MDE1ZmZmMmU2YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvV2Vha0dDTWFwLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vh
a0dDTWFwLmgKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogICAgICAgICB7CiAgICAgICAgIH0K
ICAgICAgICAgCi0gICAgICAgIHN0ZDo6cGFpcjxLZXlUeXBlLCBFeHRlcm5hbFR5cGU+IGdldCgp
IGNvbnN0IHsgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKG1faXRlcmF0b3ItPmZpcnN0LCBIYW5kbGVU
eXBlczxNYXBwZWRUeXBlPjo6Z2V0RnJvbVNsb3QobV9pdGVyYXRvci0+c2Vjb25kKSk7IH0KKyAg
ICAgICAgc3RkOjpwYWlyPEtleVR5cGUsIEV4dGVybmFsVHlwZT4gZ2V0KCkgY29uc3QgeyByZXR1
cm4gc3RkOjptYWtlX3BhaXIobV9pdGVyYXRvci0+a2V5LCBIYW5kbGVUeXBlczxNYXBwZWRUeXBl
Pjo6Z2V0RnJvbVNsb3QobV9pdGVyYXRvci0+dmFsdWUpKTsgfQogICAgICAgICBzdGQ6OnBhaXI8
S2V5VHlwZSwgSGFuZGxlU2xvdD4gZ2V0U2xvdCgpIGNvbnN0IHsgcmV0dXJuICptX2l0ZXJhdG9y
OyB9CiAgICAgICAgIAogICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpIHsgKyttX2l0ZXJh
dG9yOyByZXR1cm4gKnRoaXM7IH0KQEAgLTkwLDcgKzkwLDcgQEAgcHVibGljOgogICAgIHsKICAg
ICAgICAgbWFwX2l0ZXJhdG9yIGVuZCA9IG1fbWFwLmVuZCgpOwogICAgICAgICBmb3IgKG1hcF9p
dGVyYXRvciBwdHIgPSBtX21hcC5iZWdpbigpOyBwdHIgIT0gZW5kOyArK3B0cikKLSAgICAgICAg
ICAgIEhhbmRsZUhlYXA6OmhlYXBGb3IocHRyLT5zZWNvbmQpLT5kZWFsbG9jYXRlKHB0ci0+c2Vj
b25kKTsKKyAgICAgICAgICAgIEhhbmRsZUhlYXA6OmhlYXBGb3IocHRyLT52YWx1ZSktPmRlYWxs
b2NhdGUocHRyLT52YWx1ZSk7CiAgICAgICAgIG1fbWFwLmNsZWFyKCk7CiAgICAgfQogCkBAIC0x
MDcsNyArMTA3LDcgQEAgcHVibGljOgogICAgIHZvaWQgcmVtb3ZlKGl0ZXJhdG9yIGl0ZXIpCiAg
ICAgewogICAgICAgICBBU1NFUlQoaXRlci5tX2l0ZXJhdG9yICE9IG1fbWFwLmVuZCgpKTsKLSAg
ICAgICAgSGFuZGxlU2xvdCBzbG90ID0gaXRlci5tX2l0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAg
IEhhbmRsZVNsb3Qgc2xvdCA9IGl0ZXIubV9pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgIEFTU0VS
VChzbG90KTsKICAgICAgICAgSGFuZGxlSGVhcDo6aGVhcEZvcihzbG90KS0+ZGVhbGxvY2F0ZShz
bG90KTsKICAgICAgICAgbV9tYXAucmVtb3ZlKGl0ZXIubV9pdGVyYXRvcik7CkBAIC0xMjgsNyAr
MTI4LDcgQEAgcHVibGljOgogICAgICAgICB0eXBlbmFtZSBNYXBUeXBlOjpBZGRSZXN1bHQgcmVz
dWx0ID0gbV9tYXAuYWRkKGtleSwgMCk7CiAgICAgICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkg
ewogICAgICAgICAgICAgSGFuZGxlU2xvdCBzbG90ID0gZ2xvYmFsRGF0YS5oZWFwLmhhbmRsZUhl
YXAoKS0+YWxsb2NhdGUoKTsKLSAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0g
c2xvdDsKKyAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBzbG90OwogICAgICAg
ICAgICAgSGFuZGxlSGVhcDo6aGVhcEZvcihzbG90KS0+bWFrZVdlYWsoc2xvdCwgdGhpcywgRmlu
YWxpemVyQ2FsbGJhY2s6OmZpbmFsaXplckNvbnRleHRGb3Ioa2V5KSk7CiAgICAgICAgICAgICBI
YW5kbGVIZWFwOjpoZWFwRm9yKHNsb3QpLT53cml0ZUJhcnJpZXIoc2xvdCwgdmFsdWUpOwogICAg
ICAgICAgICAgKnNsb3QgPSB2YWx1ZTsKQEAgLTEzOSw3ICsxMzksNyBAQCBwdWJsaWM6CiAgICAg
CiAgICAgdm9pZCBzZXQoaXRlcmF0b3IgaXRlciwgRXh0ZXJuYWxUeXBlIHZhbHVlKQogICAgIHsK
LSAgICAgICAgSGFuZGxlU2xvdCBzbG90ID0gaXRlci5tX2l0ZXJhdG9yLT5zZWNvbmQ7CisgICAg
ICAgIEhhbmRsZVNsb3Qgc2xvdCA9IGl0ZXIubV9pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgIEFT
U0VSVChzbG90KTsKICAgICAgICAgSGFuZGxlSGVhcDo6aGVhcEZvcihzbG90KS0+d3JpdGVCYXJy
aWVyKHNsb3QsIHZhbHVlKTsKICAgICAgICAgKnNsb3QgPSB2YWx1ZTsKQEAgLTE0OCwxMSArMTQ4
LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNv
bnN0IEtleVR5cGUmIGtleSwgRXh0ZXJuYWxUeXBlIHZhbHVlKQogICAgIHsKICAgICAgICAgdHlw
ZW5hbWUgTWFwVHlwZTo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fbWFwLmFkZChrZXksIDApOwotICAg
ICAgICBIYW5kbGVTbG90IHNsb3QgPSByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAg
SGFuZGxlU2xvdCBzbG90ID0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgaWYgKHJl
c3VsdC5pc05ld0VudHJ5KSB7CiAgICAgICAgICAgICBzbG90ID0gZ2xvYmFsRGF0YS5oZWFwLmhh
bmRsZUhlYXAoKS0+YWxsb2NhdGUoKTsKICAgICAgICAgICAgIEhhbmRsZUhlYXA6OmhlYXBGb3Io
c2xvdCktPm1ha2VXZWFrKHNsb3QsIHRoaXMsIGtleSk7Ci0gICAgICAgICAgICByZXN1bHQuaXRl
cmF0b3ItPnNlY29uZCA9IHNsb3Q7CisgICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVl
ID0gc2xvdDsKICAgICAgICAgfQogICAgICAgICBIYW5kbGVIZWFwOjpoZWFwRm9yKHNsb3QpLT53
cml0ZUJhcnJpZXIoc2xvdCwgdmFsdWUpOwogICAgICAgICAqc2xvdCA9IHZhbHVlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1Byb2ZpbGVUcmVlTm9kZS5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1Byb2ZpbGVUcmVlTm9kZS5oCmluZGV4IDlkZTM5YWQ4
YTI5ODYyMmM0MzNhNjdlYjY0YTcyMjA0ZGUxOWU2YzIuLmUyZjkzMjNhMmE1NjVmYTkyNzZkNDA5
YjI5ZGI1YjNlN2YxYzQyM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29s
cy9Qcm9maWxlVHJlZU5vZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvUHJv
ZmlsZVRyZWVOb2RlLmgKQEAgLTMwLDcgKzMwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNz
IFByb2ZpbGVUcmVlTm9kZSB7CiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUHJvZmlsZVRy
ZWVOb2RlPiBNYXA7Ci0gICAgdHlwZWRlZiBzdGQ6OnBhaXI8U3RyaW5nLCBQcm9maWxlVHJlZU5v
ZGU+IE1hcEVudHJ5OworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFByb2ZpbGVUcmVlTm9k
ZT46OlZhbHVlVHlwZSBNYXBFbnRyeTsKIAogcHVibGljOgogICAgIFByb2ZpbGVUcmVlTm9kZSgp
CkBAIC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICAKICAgICAgICAgUHJvZmlsZVRyZWVOb2Rl
IG5ld0VudHJ5OwogICAgICAgICBNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX2NoaWxkcmVuLT5h
ZGQoU3RyaW5nKG5hbWUpLCBuZXdFbnRyeSk7Ci0gICAgICAgIFByb2ZpbGVUcmVlTm9kZSogY2hp
bGRJbk1hcCA9ICZyZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgUHJvZmlsZVRyZWVO
b2RlKiBjaGlsZEluTWFwID0gJnJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgICsrY2hp
bGRJbk1hcC0+bV9jb3VudDsKICAgICAgICAgcmV0dXJuIGNoaWxkSW5NYXA7CiAgICAgfQpAQCAt
NzIsNyArNzIsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgdWlu
dDY0X3QgY2hpbGRDb3VudCA9IDA7CiAgICAgICAgIGZvciAoTWFwOjppdGVyYXRvciBpdCA9IG1f
Y2hpbGRyZW4tPmJlZ2luKCk7IGl0ICE9IG1fY2hpbGRyZW4tPmVuZCgpOyArK2l0KQotICAgICAg
ICAgICAgY2hpbGRDb3VudCArPSBpdC0+c2Vjb25kLmNvdW50KCk7CisgICAgICAgICAgICBjaGls
ZENvdW50ICs9IGl0LT52YWx1ZS5jb3VudCgpOwogICAgICAgICByZXR1cm4gY2hpbGRDb3VudDsK
ICAgICB9CiAgICAgCkBAIC05NywxOSArOTcsMTkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbmRlbnQ7ICsraSkKICAgICAgICAgICAgICAgICBkYXRh
TG9nKCIgICAgIik7CiAgICAgICAgICAgICBkYXRhTG9nKCIlIDhsbGQ6ICVzICglbGxkIHN0YWNr
IHRvcClcbiIsCi0gICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihlbnRyeS0+
c2Vjb25kLmNvdW50KCkpLAotICAgICAgICAgICAgICAgIGVudHJ5LT5maXJzdC51dGY4KCkuZGF0
YSgpLAotICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oZW50cnktPnNlY29u
ZC5jb3VudCgpIC0gZW50cnktPnNlY29uZC5jaGlsZENvdW50KCkpKTsKKyAgICAgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KGVudHJ5LT52YWx1ZS5jb3VudCgpKSwKKyAgICAgICAg
ICAgICAgICBlbnRyeS0+a2V5LnV0ZjgoKS5kYXRhKCksCisgICAgICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8bG9uZyBsb25nPihlbnRyeS0+dmFsdWUuY291bnQoKSAtIGVudHJ5LT52YWx1ZS5jaGls
ZENvdW50KCkpKTsKIAogICAgICAgICAgICAgLy8gUmVjdXJzaXZlbHkgZHVtcCB0aGUgY2hpbGQg
bm9kZXMuCi0gICAgICAgICAgICBlbnRyeS0+c2Vjb25kLmR1bXBJbnRlcm5hbChpbmRlbnQgKyAx
KTsKKyAgICAgICAgICAgIGVudHJ5LT52YWx1ZS5kdW1wSW50ZXJuYWwoaW5kZW50ICsgMSk7CiAg
ICAgICAgIH0KICAgICB9CiAKICAgICBzdGF0aWMgaW50IGNvbXBhcmVFbnRyaWVzKGNvbnN0IHZv
aWQqIGEsIGNvbnN0IHZvaWQqIGIpCiAgICAgewotICAgICAgICB1aW50NjRfdCBkYSA9ICgqc3Rh
dGljX2Nhc3Q8TWFwRW50cnkqIGNvbnN0ICo+KGEpKS0+c2Vjb25kLmNvdW50KCk7Ci0gICAgICAg
IHVpbnQ2NF90IGRiID0gKCpzdGF0aWNfY2FzdDxNYXBFbnRyeSogY29uc3QgKj4oYikpLT5zZWNv
bmQuY291bnQoKTsKKyAgICAgICAgdWludDY0X3QgZGEgPSAoKnN0YXRpY19jYXN0PE1hcEVudHJ5
KiBjb25zdCAqPihhKSktPnZhbHVlLmNvdW50KCk7CisgICAgICAgIHVpbnQ2NF90IGRiID0gKCpz
dGF0aWNfY2FzdDxNYXBFbnRyeSogY29uc3QgKj4oYikpLT52YWx1ZS5jb3VudCgpOwogICAgICAg
ICByZXR1cm4gKGRhIDwgZGIpIC0gKGRhID4gZGIpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvSGFzaENvdW50ZWRTZXQuaCBiL1NvdXJjZS9XVEYvd3RmL0hhc2hDb3VudGVk
U2V0LmgKaW5kZXggZDdkOWU0M2E5YTU1YTFmZGZhODgzZjc4OTdhMTA3Nzk5YTVjZmY3NC4uNGY5
NmEzOTk1MmZmNTMwZmQ2Mzk4ZWJjYThhN2ZkYjYyMTRiYTFmNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvSGFzaENvdW50ZWRTZXQuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoQ291bnRl
ZFNldC5oCkBAIC0xNDYsNyArMTQ2LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgaW5saW5lIHR5
cGVuYW1lIEhhc2hDb3VudGVkU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+OjpBZGRS
ZXN1bHQgSGFzaENvdW50ZWRTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OmFkZChj
b25zdCBWYWx1ZVR5cGUgJnZhbHVlKQogICAgIHsKICAgICAgICAgQWRkUmVzdWx0IHJlc3VsdCA9
IG1faW1wbC5hZGQodmFsdWUsIDApOwotICAgICAgICArK3Jlc3VsdC5pdGVyYXRvci0+c2Vjb25k
OworICAgICAgICArK3Jlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgIHJldHVybiByZXN1
bHQ7CiAgICAgfQogICAgIApAQCAtMTYyLDExICsxNjIsMTEgQEAgbmFtZXNwYWNlIFdURiB7CiAg
ICAgICAgIGlmIChpdCA9PSBlbmQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
ICAgICB1bnNpZ25lZCBvbGRWYWwgPSBpdC0+c2Vjb25kOworICAgICAgICB1bnNpZ25lZCBvbGRW
YWwgPSBpdC0+dmFsdWU7CiAgICAgICAgIEFTU0VSVChvbGRWYWwpOwogICAgICAgICB1bnNpZ25l
ZCBuZXdWYWwgPSBvbGRWYWwgLSAxOwogICAgICAgICBpZiAobmV3VmFsKSB7Ci0gICAgICAgICAg
ICBpdC0+c2Vjb25kID0gbmV3VmFsOworICAgICAgICAgICAgaXQtPnZhbHVlID0gbmV3VmFsOwog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKQEAgLTIxOCw3ICsyMTgsNyBA
QCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgaXRlcmF0b3IgaXQgPSBjb2xsZWN0aW9uLmJlZ2lu
KCk7CiAgICAgICAgIGl0ZXJhdG9yIGVuZCA9IGNvbGxlY3Rpb24uZW5kKCk7CiAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGl0ICE9IGVuZDsgKytpdCwgKytpKQotICAgICAgICAgICAgdmVj
dG9yW2ldID0gKCppdCkuZmlyc3Q7CisgICAgICAgICAgICB2ZWN0b3JbaV0gPSAoKml0KS5rZXk7
CiAgICAgfQogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0hhc2hJdGVyYXRvcnMuaCBi
L1NvdXJjZS9XVEYvd3RmL0hhc2hJdGVyYXRvcnMuaAppbmRleCA2YWZhMmZhNTdlNzBhZDAzMjA4
NTBmMzczM2RjZDc5OTcxNGIwMDgzLi4yNDI5YzZkMDRhYmVkMjJkNTdjZmNjZTgzYjNkNTc4Mjk0
M2MyOTFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoSXRlcmF0b3JzLmgKKysrIGIv
U291cmNlL1dURi93dGYvSGFzaEl0ZXJhdG9ycy5oCkBAIC0zMyw5ICszMyw5IEBAIG5hbWVzcGFj
ZSBXVEYgewogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZVR5cGUsIHR5cGVuYW1lIEtl
eVR5cGUsIHR5cGVuYW1lIE1hcHBlZFR5cGU+IHN0cnVjdCBIYXNoVGFibGVLZXlzSXRlcmF0b3I7
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlVHlwZSwgdHlwZW5hbWUgS2V5VHlwZSwg
dHlwZW5hbWUgTWFwcGVkVHlwZT4gc3RydWN0IEhhc2hUYWJsZVZhbHVlc0l0ZXJhdG9yOwogCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlVHlwZSwgdHlwZW5hbWUgS2V5VHlwZSwgdHlw
ZW5hbWUgTWFwcGVkVHlwZT4gc3RydWN0IEhhc2hUYWJsZUNvbnN0SXRlcmF0b3JBZGFwdGVyPEhh
c2hUYWJsZVR5cGUsIHN0ZDo6cGFpcjxLZXlUeXBlLCBNYXBwZWRUeXBlPiA+IHsKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBIYXNoVGFibGVUeXBlLCB0eXBlbmFtZSBLZXlUeXBlLCB0eXBlbmFtZSBN
YXBwZWRUeXBlPiBzdHJ1Y3QgSGFzaFRhYmxlQ29uc3RJdGVyYXRvckFkYXB0ZXI8SGFzaFRhYmxl
VHlwZSwgSGFzaE1hcEVudHJ5PEtleVR5cGUsIE1hcHBlZFR5cGU+ID4gewogICAgIHByaXZhdGU6
Ci0gICAgICAgIHR5cGVkZWYgc3RkOjpwYWlyPEtleVR5cGUsIE1hcHBlZFR5cGU+IFZhbHVlVHlw
ZTsKKyAgICAgICAgdHlwZWRlZiBIYXNoTWFwRW50cnk8S2V5VHlwZSwgTWFwcGVkVHlwZT4gVmFs
dWVUeXBlOwogICAgIHB1YmxpYzoKICAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVDb25zdEtleXNJ
dGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXlUeXBlLCBNYXBwZWRUeXBlPiBLZXlzOwogICAgICAg
ICB0eXBlZGVmIEhhc2hUYWJsZUNvbnN0VmFsdWVzSXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5
VHlwZSwgTWFwcGVkVHlwZT4gVmFsdWVzOwpAQCAtNTYsOSArNTYsOSBAQCBuYW1lc3BhY2UgV1RG
IHsKICAgICAgICAgdHlwZW5hbWUgSGFzaFRhYmxlVHlwZTo6Y29uc3RfaXRlcmF0b3IgbV9pbXBs
OwogICAgIH07CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGVUeXBlLCB0eXBlbmFt
ZSBLZXlUeXBlLCB0eXBlbmFtZSBNYXBwZWRUeXBlPiBzdHJ1Y3QgSGFzaFRhYmxlSXRlcmF0b3JB
ZGFwdGVyPEhhc2hUYWJsZVR5cGUsIHN0ZDo6cGFpcjxLZXlUeXBlLCBNYXBwZWRUeXBlPiA+IHsK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGVUeXBlLCB0eXBlbmFtZSBLZXlUeXBlLCB0
eXBlbmFtZSBNYXBwZWRUeXBlPiBzdHJ1Y3QgSGFzaFRhYmxlSXRlcmF0b3JBZGFwdGVyPEhhc2hU
YWJsZVR5cGUsIEhhc2hNYXBFbnRyeTxLZXlUeXBlLCBNYXBwZWRUeXBlPiA+IHsKICAgICBwcml2
YXRlOgotICAgICAgICB0eXBlZGVmIHN0ZDo6cGFpcjxLZXlUeXBlLCBNYXBwZWRUeXBlPiBWYWx1
ZVR5cGU7CisgICAgICAgIHR5cGVkZWYgSGFzaE1hcEVudHJ5PEtleVR5cGUsIE1hcHBlZFR5cGU+
IFZhbHVlVHlwZTsKICAgICBwdWJsaWM6CiAgICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlS2V5c0l0
ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleVR5cGUsIE1hcHBlZFR5cGU+IEtleXM7CiAgICAgICAg
IHR5cGVkZWYgSGFzaFRhYmxlVmFsdWVzSXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5VHlwZSwg
TWFwcGVkVHlwZT4gVmFsdWVzOwpAQCAtODYsMTIgKzg2LDEyIEBAIG5hbWVzcGFjZSBXVEYgewog
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlVHlwZSwgdHlwZW5hbWUgS2V5VHlwZSwg
dHlwZW5hbWUgTWFwcGVkVHlwZT4gc3RydWN0IEhhc2hUYWJsZUNvbnN0S2V5c0l0ZXJhdG9yIHsK
ICAgICBwcml2YXRlOgotICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3JBZGFw
dGVyPEhhc2hUYWJsZVR5cGUsIHN0ZDo6cGFpcjxLZXlUeXBlLCBNYXBwZWRUeXBlPiA+IENvbnN0
SXRlcmF0b3I7CisgICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlQ29uc3RJdGVyYXRvckFkYXB0ZXI8
SGFzaFRhYmxlVHlwZSwgSGFzaE1hcEVudHJ5PEtleVR5cGUsIE1hcHBlZFR5cGU+ID4gQ29uc3RJ
dGVyYXRvcjsKIAogICAgIHB1YmxpYzoKICAgICAgICAgSGFzaFRhYmxlQ29uc3RLZXlzSXRlcmF0
b3IoY29uc3QgQ29uc3RJdGVyYXRvciYgaW1wbCkgOiBtX2ltcGwoaW1wbCkge30KICAgICAgICAg
Ci0gICAgICAgIGNvbnN0IEtleVR5cGUqIGdldCgpIGNvbnN0IHsgcmV0dXJuICYobV9pbXBsLmdl
dCgpLT5maXJzdCk7IH0KKyAgICAgICAgY29uc3QgS2V5VHlwZSogZ2V0KCkgY29uc3QgeyByZXR1
cm4gJihtX2ltcGwuZ2V0KCktPmtleSk7IH0KICAgICAgICAgY29uc3QgS2V5VHlwZSYgb3BlcmF0
b3IqKCkgY29uc3QgeyByZXR1cm4gKmdldCgpOyB9CiAgICAgICAgIGNvbnN0IEtleVR5cGUqIG9w
ZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBnZXQoKTsgfQogCkBAIC0xMDMsMTIgKzEwMywxMiBA
QCBuYW1lc3BhY2UgV1RGIHsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZVR5cGUs
IHR5cGVuYW1lIEtleVR5cGUsIHR5cGVuYW1lIE1hcHBlZFR5cGU+IHN0cnVjdCBIYXNoVGFibGVD
b25zdFZhbHVlc0l0ZXJhdG9yIHsKICAgICBwcml2YXRlOgotICAgICAgICB0eXBlZGVmIEhhc2hU
YWJsZUNvbnN0SXRlcmF0b3JBZGFwdGVyPEhhc2hUYWJsZVR5cGUsIHN0ZDo6cGFpcjxLZXlUeXBl
LCBNYXBwZWRUeXBlPiA+IENvbnN0SXRlcmF0b3I7CisgICAgICAgIHR5cGVkZWYgSGFzaFRhYmxl
Q29uc3RJdGVyYXRvckFkYXB0ZXI8SGFzaFRhYmxlVHlwZSwgSGFzaE1hcEVudHJ5PEtleVR5cGUs
IE1hcHBlZFR5cGU+ID4gQ29uc3RJdGVyYXRvcjsKIAogICAgIHB1YmxpYzoKICAgICAgICAgSGFz
aFRhYmxlQ29uc3RWYWx1ZXNJdGVyYXRvcihjb25zdCBDb25zdEl0ZXJhdG9yJiBpbXBsKSA6IG1f
aW1wbChpbXBsKSB7fQogICAgICAgICAKLSAgICAgICAgY29uc3QgTWFwcGVkVHlwZSogZ2V0KCkg
Y29uc3QgeyByZXR1cm4gJihtX2ltcGwuZ2V0KCktPnNlY29uZCk7IH0KKyAgICAgICAgY29uc3Qg
TWFwcGVkVHlwZSogZ2V0KCkgY29uc3QgeyByZXR1cm4gJihtX2ltcGwuZ2V0KCktPnZhbHVlKTsg
fQogICAgICAgICBjb25zdCBNYXBwZWRUeXBlJiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiAq
Z2V0KCk7IH0KICAgICAgICAgY29uc3QgTWFwcGVkVHlwZSogb3BlcmF0b3ItPigpIGNvbnN0IHsg
cmV0dXJuIGdldCgpOyB9CiAKQEAgLTEyMCwxMyArMTIwLDEzIEBAIG5hbWVzcGFjZSBXVEYgewog
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlVHlwZSwgdHlwZW5hbWUgS2V5VHlwZSwg
dHlwZW5hbWUgTWFwcGVkVHlwZT4gc3RydWN0IEhhc2hUYWJsZUtleXNJdGVyYXRvciB7CiAgICAg
cHJpdmF0ZToKLSAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVJdGVyYXRvckFkYXB0ZXI8SGFzaFRh
YmxlVHlwZSwgc3RkOjpwYWlyPEtleVR5cGUsIE1hcHBlZFR5cGU+ID4gSXRlcmF0b3I7Ci0gICAg
ICAgIHR5cGVkZWYgSGFzaFRhYmxlQ29uc3RJdGVyYXRvckFkYXB0ZXI8SGFzaFRhYmxlVHlwZSwg
c3RkOjpwYWlyPEtleVR5cGUsIE1hcHBlZFR5cGU+ID4gQ29uc3RJdGVyYXRvcjsKKyAgICAgICAg
dHlwZWRlZiBIYXNoVGFibGVJdGVyYXRvckFkYXB0ZXI8SGFzaFRhYmxlVHlwZSwgSGFzaE1hcEVu
dHJ5PEtleVR5cGUsIE1hcHBlZFR5cGU+ID4gSXRlcmF0b3I7CisgICAgICAgIHR5cGVkZWYgSGFz
aFRhYmxlQ29uc3RJdGVyYXRvckFkYXB0ZXI8SGFzaFRhYmxlVHlwZSwgSGFzaE1hcEVudHJ5PEtl
eVR5cGUsIE1hcHBlZFR5cGU+ID4gQ29uc3RJdGVyYXRvcjsKIAogICAgIHB1YmxpYzoKICAgICAg
ICAgSGFzaFRhYmxlS2V5c0l0ZXJhdG9yKGNvbnN0IEl0ZXJhdG9yJiBpbXBsKSA6IG1faW1wbChp
bXBsKSB7fQogICAgICAgICAKLSAgICAgICAgS2V5VHlwZSogZ2V0KCkgY29uc3QgeyByZXR1cm4g
JihtX2ltcGwuZ2V0KCktPmZpcnN0KTsgfQorICAgICAgICBLZXlUeXBlKiBnZXQoKSBjb25zdCB7
IHJldHVybiAmKG1faW1wbC5nZXQoKS0+a2V5KTsgfQogICAgICAgICBLZXlUeXBlJiBvcGVyYXRv
ciooKSBjb25zdCB7IHJldHVybiAqZ2V0KCk7IH0KICAgICAgICAgS2V5VHlwZSogb3BlcmF0b3It
PigpIGNvbnN0IHsgcmV0dXJuIGdldCgpOyB9CiAKQEAgLTE0MywxMyArMTQzLDEzIEBAIG5hbWVz
cGFjZSBXVEYgewogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlVHlwZSwgdHlwZW5h
bWUgS2V5VHlwZSwgdHlwZW5hbWUgTWFwcGVkVHlwZT4gc3RydWN0IEhhc2hUYWJsZVZhbHVlc0l0
ZXJhdG9yIHsKICAgICBwcml2YXRlOgotICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUl0ZXJhdG9y
QWRhcHRlcjxIYXNoVGFibGVUeXBlLCBzdGQ6OnBhaXI8S2V5VHlwZSwgTWFwcGVkVHlwZT4gPiBJ
dGVyYXRvcjsKLSAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVDb25zdEl0ZXJhdG9yQWRhcHRlcjxI
YXNoVGFibGVUeXBlLCBzdGQ6OnBhaXI8S2V5VHlwZSwgTWFwcGVkVHlwZT4gPiBDb25zdEl0ZXJh
dG9yOworICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUl0ZXJhdG9yQWRhcHRlcjxIYXNoVGFibGVU
eXBlLCBIYXNoTWFwRW50cnk8S2V5VHlwZSwgTWFwcGVkVHlwZT4gPiBJdGVyYXRvcjsKKyAgICAg
ICAgdHlwZWRlZiBIYXNoVGFibGVDb25zdEl0ZXJhdG9yQWRhcHRlcjxIYXNoVGFibGVUeXBlLCBI
YXNoTWFwRW50cnk8S2V5VHlwZSwgTWFwcGVkVHlwZT4gPiBDb25zdEl0ZXJhdG9yOwogCiAgICAg
cHVibGljOgogICAgICAgICBIYXNoVGFibGVWYWx1ZXNJdGVyYXRvcihjb25zdCBJdGVyYXRvciYg
aW1wbCkgOiBtX2ltcGwoaW1wbCkge30KICAgICAgICAgCi0gICAgICAgIE1hcHBlZFR5cGUqIGdl
dCgpIGNvbnN0IHsgcmV0dXJuICYobV9pbXBsLmdldCgpLT5zZWNvbmQpOyB9CisgICAgICAgIE1h
cHBlZFR5cGUqIGdldCgpIGNvbnN0IHsgcmV0dXJuICYobV9pbXBsLmdldCgpLT52YWx1ZSk7IH0K
ICAgICAgICAgTWFwcGVkVHlwZSYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKmdldCgpOyB9
CiAgICAgICAgIE1hcHBlZFR5cGUqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBnZXQoKTsg
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoTWFwLmggYi9Tb3VyY2UvV1RGL3d0
Zi9IYXNoTWFwLmgKaW5kZXggMjZhOWQ5YzVjYjE1OGQzYTVmZWI3MmVjNWNjODUwYThlNjAxNjNk
ZC4uYmE1OTMxZWZiN2ZmZjk4NWE5MDA5ODVkZDIwZTljYjM2NTNlNTdiYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi93dGYvSGFzaE1hcC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0hhc2hNYXAuaApA
QCAtMjUsOCArMjUsNiBAQAogCiBuYW1lc3BhY2UgV1RGIHsKIAotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFBhaXJUeXBlPiBzdHJ1Y3QgUGFpckZpcnN0RXh0cmFjdG9yOwotCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IFJlZmVyZW5jZVR5cGVNYWtlciB7CiAgICAgICAgIHR5cGVkZWYg
VCYgUmVmZXJlbmNlVHlwZTsKICAgICB9OwpAQCAtMzQsNiArMzIsMTAgQEAgbmFtZXNwYWNlIFdU
RiB7CiAgICAgICAgIHR5cGVkZWYgVCYgUmVmZXJlbmNlVHlwZTsKICAgICB9OwogCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgSGFzaE1hcEVudHJ5VHlwZT4gc3RydWN0IEhhc2hNYXBFbnRyeUtleUV4
dHJhY3RvciB7CisgICAgICAgIHN0YXRpYyBjb25zdCB0eXBlbmFtZSBIYXNoTWFwRW50cnlUeXBl
OjpLZXlUeXBlJiBleHRyYWN0KGNvbnN0IEhhc2hNYXBFbnRyeVR5cGUmIHApIHsgcmV0dXJuIHAu
a2V5OyB9CisgICAgfTsKKwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUg
TWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnID0gdHlwZW5hbWUgRGVmYXVsdEhhc2g8S2V5QXJn
Pjo6SGFzaCwKICAgICAgICAgdHlwZW5hbWUgS2V5VHJhaXRzQXJnID0gSGFzaFRyYWl0czxLZXlB
cmc+LCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcgPSBIYXNoVHJhaXRzPE1hcHBlZEFyZz4gPgog
ICAgIGNsYXNzIEhhc2hNYXAgewpAQCAtNDEsNyArNDMsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAg
ICBwcml2YXRlOgogICAgICAgICB0eXBlZGVmIEtleVRyYWl0c0FyZyBLZXlUcmFpdHM7CiAgICAg
ICAgIHR5cGVkZWYgTWFwcGVkVHJhaXRzQXJnIE1hcHBlZFRyYWl0czsKLSAgICAgICAgdHlwZWRl
ZiBQYWlySGFzaFRyYWl0czxLZXlUcmFpdHMsIE1hcHBlZFRyYWl0cz4gVmFsdWVUcmFpdHM7Cisg
ICAgICAgIHR5cGVkZWYgSGFzaE1hcEVudHJ5VHJhaXRzPEtleVRyYWl0cywgTWFwcGVkVHJhaXRz
PiBWYWx1ZVRyYWl0czsKIAogICAgIHB1YmxpYzoKICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBL
ZXlUcmFpdHM6OlRyYWl0VHlwZSBLZXlUeXBlOwpAQCAtNTcsNyArNTksNyBAQCBuYW1lc3BhY2Ug
V1RGIHsKIAogICAgICAgICB0eXBlZGVmIEhhc2hBcmcgSGFzaEZ1bmN0aW9uczsKIAotICAgICAg
ICB0eXBlZGVmIEhhc2hUYWJsZTxLZXlUeXBlLCBWYWx1ZVR5cGUsIFBhaXJGaXJzdEV4dHJhY3Rv
cjxWYWx1ZVR5cGU+LAorICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZTxLZXlUeXBlLCBWYWx1ZVR5
cGUsIEhhc2hNYXBFbnRyeUtleUV4dHJhY3RvcjxWYWx1ZVR5cGU+LAogICAgICAgICAgICAgSGFz
aEZ1bmN0aW9ucywgVmFsdWVUcmFpdHMsIEtleVRyYWl0cz4gSGFzaFRhYmxlVHlwZTsKIAogICAg
ICAgICBjbGFzcyBIYXNoTWFwS2V5c1Byb3h5OwpAQCAtMjAzLDE4ICsyMDUsMTQgQEAgbmFtZXNw
YWNlIFdURiB7CiAgICAgICAgIEhhc2hUYWJsZVR5cGUgbV9pbXBsOwogICAgIH07CiAKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBQYWlyVHlwZT4gc3RydWN0IFBhaXJGaXJzdEV4dHJhY3RvciB7Ci0g
ICAgICAgIHN0YXRpYyBjb25zdCB0eXBlbmFtZSBQYWlyVHlwZTo6Zmlyc3RfdHlwZSYgZXh0cmFj
dChjb25zdCBQYWlyVHlwZSYgcCkgeyByZXR1cm4gcC5maXJzdDsgfQotICAgIH07Ci0KICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVRyYWl0cywgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucz4KICAg
ICBzdHJ1Y3QgSGFzaE1hcFRyYW5zbGF0b3IgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBUJiBrZXkpIHsgcmV0dXJuIEhhc2hGdW5jdGlv
bnM6Omhhc2goa2V5KTsgfQogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
PiBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBUJiBhLCBjb25zdCBVJiBiKSB7IHJldHVybiBIYXNo
RnVuY3Rpb25zOjplcXVhbChhLCBiKTsgfQogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVLCB0eXBlbmFtZSBWPiBzdGF0aWMgdm9pZCB0cmFuc2xhdGUoVCYgbG9jYXRpb24s
IGNvbnN0IFUmIGtleSwgY29uc3QgViYgbWFwcGVkKQogICAgICAgICB7Ci0gICAgICAgICAgICBs
b2NhdGlvbi5maXJzdCA9IGtleTsKLSAgICAgICAgICAgIFZhbHVlVHJhaXRzOjpTZWNvbmRUcmFp
dHM6OnN0b3JlKG1hcHBlZCwgbG9jYXRpb24uc2Vjb25kKTsKKyAgICAgICAgICAgIGxvY2F0aW9u
LmtleSA9IGtleTsKKyAgICAgICAgICAgIFZhbHVlVHJhaXRzOjpNYXBwZWRUcmFpdHM6OnN0b3Jl
KG1hcHBlZCwgbG9jYXRpb24udmFsdWUpOwogICAgICAgICB9CiAgICAgfTsKIApAQCAtMjI0LDgg
KzIyMiw4IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVPiBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBUJiBhLCBjb25zdCBVJiBiKSB7IHJl
dHVybiBUcmFuc2xhdG9yOjplcXVhbChhLCBiKTsgfQogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPiBzdGF0aWMgdm9pZCB0cmFuc2xhdGUoVCYgbG9j
YXRpb24sIGNvbnN0IFUmIGtleSwgY29uc3QgViYgbWFwcGVkLCB1bnNpZ25lZCBoYXNoQ29kZSkK
ICAgICAgICAgewotICAgICAgICAgICAgVHJhbnNsYXRvcjo6dHJhbnNsYXRlKGxvY2F0aW9uLmZp
cnN0LCBrZXksIGhhc2hDb2RlKTsKLSAgICAgICAgICAgIFZhbHVlVHJhaXRzOjpTZWNvbmRUcmFp
dHM6OnN0b3JlKG1hcHBlZCwgbG9jYXRpb24uc2Vjb25kKTsKKyAgICAgICAgICAgIFRyYW5zbGF0
b3I6OnRyYW5zbGF0ZShsb2NhdGlvbi5rZXksIGtleSwgaGFzaENvZGUpOworICAgICAgICAgICAg
VmFsdWVUcmFpdHM6Ok1hcHBlZFRyYWl0czo6c3RvcmUobWFwcGVkLCBsb2NhdGlvbi52YWx1ZSk7
CiAgICAgICAgIH0KICAgICB9OwogCkBAIC0zMzMsNyArMzMxLDcgQEAgbmFtZXNwYWNlIFdURiB7
CiAgICAgICAgIEFkZFJlc3VsdCByZXN1bHQgPSBpbmxpbmVBZGQoa2V5LCBtYXBwZWQpOwogICAg
ICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KSB7CiAgICAgICAgICAgICAvLyBUaGUgaW5saW5l
QWRkIGNhbGwgYWJvdmUgZm91bmQgYW4gZXhpc3RpbmcgaGFzaCB0YWJsZSBlbnRyeTsgd2UgbmVl
ZCB0byBzZXQgdGhlIG1hcHBlZCB2YWx1ZS4KLSAgICAgICAgICAgIE1hcHBlZFRyYWl0czo6c3Rv
cmUobWFwcGVkLCByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7CisgICAgICAgICAgICBNYXBwZWRU
cmFpdHM6OnN0b3JlKG1hcHBlZCwgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CiAgICAgICAgIH0K
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CkBAIC0zNjAsNyArMzU4LDcgQEAgbmFtZXNw
YWNlIFdURiB7CiAgICAgICAgIFZhbHVlVHlwZSogZW50cnkgPSBjb25zdF9jYXN0PEhhc2hUYWJs
ZVR5cGUmPihtX2ltcGwpLmxvb2t1cChrZXkpOwogICAgICAgICBpZiAoIWVudHJ5KQogICAgICAg
ICAgICAgcmV0dXJuIE1hcHBlZFRyYWl0czo6cGVlayhNYXBwZWRUcmFpdHM6OmVtcHR5VmFsdWUo
KSk7Ci0gICAgICAgIHJldHVybiBNYXBwZWRUcmFpdHM6OnBlZWsoZW50cnktPnNlY29uZCk7Cisg
ICAgICAgIHJldHVybiBNYXBwZWRUcmFpdHM6OnBlZWsoZW50cnktPnZhbHVlKTsKICAgICB9CiAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFt
ZSBXLCB0eXBlbmFtZSBYPgpAQCAtMzkxLDcgKzM4OSw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAg
ICAgICBpdGVyYXRvciBpdCA9IGZpbmQoa2V5KTsKICAgICAgICAgaWYgKGl0ID09IGVuZCgpKQog
ICAgICAgICAgICAgcmV0dXJuIE1hcHBlZFRyYWl0czo6cGFzc091dChNYXBwZWRUcmFpdHM6OmVt
cHR5VmFsdWUoKSk7Ci0gICAgICAgIE1hcHBlZFBhc3NPdXRUeXBlIHJlc3VsdCA9IE1hcHBlZFRy
YWl0czo6cGFzc091dChpdC0+c2Vjb25kKTsKKyAgICAgICAgTWFwcGVkUGFzc091dFR5cGUgcmVz
dWx0ID0gTWFwcGVkVHJhaXRzOjpwYXNzT3V0KGl0LT52YWx1ZSk7CiAgICAgICAgIHJlbW92ZShp
dCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpAQCAtNDEzLDggKzQxMSw4IEBAIG5h
bWVzcGFjZSBXVEYgewogICAgICAgICBjb25zdF9pdGVyYXRvciBlbmQgPSBhLmVuZCgpOwogICAg
ICAgICBjb25zdF9pdGVyYXRvciBub3RGb3VuZCA9IGIuZW5kKCk7CiAgICAgICAgIGZvciAoY29u
c3RfaXRlcmF0b3IgaXQgPSBhLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAg
ICAgY29uc3RfaXRlcmF0b3IgYlBvcyA9IGIuZmluZChpdC0+Zmlyc3QpOwotICAgICAgICAgICAg
aWYgKGJQb3MgPT0gbm90Rm91bmQgfHwgaXQtPnNlY29uZCAhPSBiUG9zLT5zZWNvbmQpCisgICAg
ICAgICAgICBjb25zdF9pdGVyYXRvciBiUG9zID0gYi5maW5kKGl0LT5rZXkpOworICAgICAgICAg
ICAgaWYgKGJQb3MgPT0gbm90Rm91bmQgfHwgaXQtPnZhbHVlICE9IGJQb3MtPnZhbHVlKQogICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCkBAIC00MzMsNyArNDMxLDcg
QEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgSGFzaFRhYmxlVHlw
ZTo6Y29uc3RfaXRlcmF0b3IgaXRlcmF0b3I7CiAgICAgICAgIGl0ZXJhdG9yIGVuZCA9IGNvbGxl
Y3Rpb24uZW5kKCk7CiAgICAgICAgIGZvciAoaXRlcmF0b3IgaXQgPSBjb2xsZWN0aW9uLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIGRlbGV0ZSBpdC0+c2Vjb25kOworICAg
ICAgICAgICAgZGVsZXRlIGl0LT52YWx1ZTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgpAQCAt
NDQ4LDcgKzQ0Niw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICB0eXBlZGVmIHR5cGVuYW1l
IEhhc2hUYWJsZVR5cGU6OmNvbnN0X2l0ZXJhdG9yIGl0ZXJhdG9yOwogICAgICAgICBpdGVyYXRv
ciBlbmQgPSBjb2xsZWN0aW9uLmVuZCgpOwogICAgICAgICBmb3IgKGl0ZXJhdG9yIGl0ID0gY29s
bGVjdGlvbi5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBkZWxldGUgaXQt
PmZpcnN0OworICAgICAgICAgICAgZGVsZXRlIGl0LT5rZXk7CiAgICAgfQogCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5h
bWUgWD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oIGIvU291cmNlL1dU
Ri93dGYvSGFzaFRhYmxlLmgKaW5kZXggOWJkNTQ4MmZhY2ViNzIwOTQ0Y2U0YzUzMTE3NDc0MGJl
NDNiYjZjZi4uZjkyYjVlNGNkN2Q4ZWQ1ZDE4MmU4MjE1OTE4OGVlYzYxOTg4NTFiNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmgKKysrIGIvU291cmNlL1dURi93dGYvSGFz
aFRhYmxlLmgKQEAgLTI4NSw2ICsyODUsMTIgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIHN3
YXAoYS5zZWNvbmQsIGIuc2Vjb25kKTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVPiBpbmxpbmUgdm9pZCBoYXNoVGFibGVTd2FwKEhhc2hNYXBFbnRyeTxULCBV
PiYgYSwgSGFzaE1hcEVudHJ5PFQsIFU+JiBiKQorICAgIHsKKyAgICAgICAgc3dhcChhLmtleSwg
Yi5rZXkpOworICAgICAgICBzd2FwKGEudmFsdWUsIGIudmFsdWUpOworICAgIH0KKwogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQsIGJvb2wgdXNlU3dhcD4gc3RydWN0IE1vdmVyOwogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBNb3ZlcjxULCB0cnVlPiB7IHN0YXRpYyB2b2lkIG1vdmUo
VCYgZnJvbSwgVCYgdG8pIHsgaGFzaFRhYmxlU3dhcChmcm9tLCB0byk7IH0gfTsKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgTW92ZXI8VCwgZmFsc2U+IHsgc3RhdGljIHZvaWQgbW92
ZShUJiBmcm9tLCBUJiB0bykgeyB0byA9IGZyb207IH0gfTsKQEAgLTEwODIsNyArMTA4OCw3IEBA
IG5hbWVzcGFjZSBXVEYgewogICAgICAgICAgICAgQVNTRVJUKGVudHJ5ID09IGl0Lm1fcG9zaXRp
b24pOwogICAgICAgICAgICAgKytjb3VudDsKIAotICAgICAgICAgICAgVmFsdWVDaGVjazxLZXk+
OjpjaGVja0NvbnNpc3RlbmN5KGl0LT5maXJzdCk7CisgICAgICAgICAgICBWYWx1ZUNoZWNrPEtl
eT46OmNoZWNrQ29uc2lzdGVuY3koaXQtPmtleSk7CiAgICAgICAgIH0KIAogICAgICAgICBBU1NF
UlQoY291bnQgPT0gbV9rZXlDb3VudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9IYXNo
VHJhaXRzLmggYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoVHJhaXRzLmgKaW5kZXggMTBmMTRkMWFmOTkw
ODczNjdmODFhYmM2NTJlYWVkNjFjYjU3MWZkMi4uZWE2NWViMmM0MGUzZjBjY2QxMDUyMDIxNTE2
MTdkZDBlMjIyMzA3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvSGFzaFRyYWl0cy5oCisr
KyBiL1NvdXJjZS9XVEYvd3RmL0hhc2hUcmFpdHMuaApAQCAtMTYzLDYgKzE2Myw0MSBAQCBuYW1l
c3BhY2UgV1RGIHsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGaXJzdCwgdHlwZW5hbWUgU2Vjb25k
PgogICAgIHN0cnVjdCBIYXNoVHJhaXRzPHBhaXI8Rmlyc3QsIFNlY29uZD4gPiA6IHB1YmxpYyBQ
YWlySGFzaFRyYWl0czxIYXNoVHJhaXRzPEZpcnN0PiwgSGFzaFRyYWl0czxTZWNvbmQ+ID4geyB9
OwogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5VHlwZUFyZywgdHlwZW5hbWUgTWFwcGVkVHlw
ZUFyZz4KKyAgICBzdHJ1Y3QgSGFzaE1hcEVudHJ5IHsKKyAgICAgICAgdHlwZWRlZiBLZXlUeXBl
QXJnIEtleVR5cGU7CisKKyAgICAgICAgSGFzaE1hcEVudHJ5KCkgOiBrZXkoKSwgdmFsdWUoKSB7
IH0KKyAgICAgICAgSGFzaE1hcEVudHJ5KGNvbnN0IEtleVR5cGVBcmcmIGtleSwgY29uc3QgTWFw
cGVkVHlwZUFyZyYgdmFsdWUpIDoga2V5KGtleSksIHZhbHVlKHZhbHVlKSB7IH0KKworICAgICAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3RoZXJLZXlUeXBlLCB0eXBlbmFtZSBPdGhlck1hcHBlZFR5
cGU+CisgICAgICAgIEhhc2hNYXBFbnRyeShjb25zdCBIYXNoTWFwRW50cnk8T3RoZXJLZXlUeXBl
LCBPdGhlck1hcHBlZFR5cGU+JiBvdGhlcikgOiBrZXkob3RoZXIua2V5KSwgdmFsdWUob3RoZXIu
dmFsdWUpIHsgfQorCisgICAgICAgIEtleVR5cGVBcmcga2V5OworICAgICAgICBNYXBwZWRUeXBl
QXJnIHZhbHVlOworICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlUcmFpdHNBcmcs
IHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZz4KKyAgICBzdHJ1Y3QgSGFzaE1hcEVudHJ5VHJhaXRz
IDogR2VuZXJpY0hhc2hUcmFpdHM8SGFzaE1hcEVudHJ5PHR5cGVuYW1lIEtleVRyYWl0c0FyZzo6
VHJhaXRUeXBlLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc6OlRyYWl0VHlwZT4gPiB7CisgICAg
ICAgIHR5cGVkZWYgS2V5VHJhaXRzQXJnIEtleVRyYWl0czsKKyAgICAgICAgdHlwZWRlZiBNYXBw
ZWRUcmFpdHNBcmcgTWFwcGVkVHJhaXRzOworICAgICAgICB0eXBlZGVmIEhhc2hNYXBFbnRyeTx0
eXBlbmFtZSBLZXlUcmFpdHM6OlRyYWl0VHlwZSwgdHlwZW5hbWUgTWFwcGVkVHJhaXRzOjpUcmFp
dFR5cGU+IFRyYWl0VHlwZTsKKyAgICAgICAgdHlwZWRlZiBIYXNoTWFwRW50cnk8dHlwZW5hbWUg
S2V5VHJhaXRzOjpFbXB0eVZhbHVlVHlwZSwgdHlwZW5hbWUgTWFwcGVkVHJhaXRzOjpFbXB0eVZh
bHVlVHlwZT4gRW1wdHlWYWx1ZVR5cGU7CisKKyAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgZW1w
dHlWYWx1ZUlzWmVybyA9IEtleVRyYWl0czo6ZW1wdHlWYWx1ZUlzWmVybyAmJiBNYXBwZWRUcmFp
dHM6OmVtcHR5VmFsdWVJc1plcm87CisgICAgICAgIHN0YXRpYyBFbXB0eVZhbHVlVHlwZSBlbXB0
eVZhbHVlKCkgeyByZXR1cm4gSGFzaE1hcEVudHJ5PHR5cGVuYW1lIEtleVRyYWl0czo6RW1wdHlW
YWx1ZVR5cGUsIHR5cGVuYW1lIE1hcHBlZFRyYWl0czo6RW1wdHlWYWx1ZVR5cGU+KEtleVRyYWl0
czo6ZW1wdHlWYWx1ZSgpLCBNYXBwZWRUcmFpdHM6OmVtcHR5VmFsdWUoKSk7IH0KKworICAgICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gS2V5VHJhaXRzOjpuZWVkc0Rl
c3RydWN0aW9uIHx8IE1hcHBlZFRyYWl0czo6bmVlZHNEZXN0cnVjdGlvbjsKKworICAgICAgICBz
dGF0aWMgY29uc3QgaW50IG1pbmltdW1UYWJsZVNpemUgPSBLZXlUcmFpdHM6Om1pbmltdW1UYWJs
ZVNpemU7CisKKyAgICAgICAgc3RhdGljIHZvaWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKFRyYWl0
VHlwZSYgc2xvdCkgeyBLZXlUcmFpdHM6OmNvbnN0cnVjdERlbGV0ZWRWYWx1ZShzbG90LmtleSk7
IH0KKyAgICAgICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUoY29uc3QgVHJhaXRUeXBlJiB2
YWx1ZSkgeyByZXR1cm4gS2V5VHJhaXRzOjppc0RlbGV0ZWRWYWx1ZSh2YWx1ZS5rZXkpOyB9Cisg
ICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgTWFwcGVkPgorICAg
IHN0cnVjdCBIYXNoVHJhaXRzPEhhc2hNYXBFbnRyeTxLZXksIE1hcHBlZD4gPiA6IHB1YmxpYyBI
YXNoTWFwRW50cnlUcmFpdHM8SGFzaFRyYWl0czxLZXk+LCBIYXNoVHJhaXRzPE1hcHBlZD4gPiB7
IH07CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6Okhhc2hUcmFpdHM7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9yLmNwcCBiL1NvdXJjZS9XVEYvd3Rm
L01ldGFBbGxvY2F0b3IuY3BwCmluZGV4IDIwMjM3ZjIxODFkZjQ5NWI4OTY0ZTUzMTg4NzJlNWYz
ZTE4Mzk3NTAuLjg2ZTkzN2FhM2UwMWY3ZmQzMzNmNjQ4YzliOGYwMWNiY2NkYjY1NDYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3IuY3BwCisrKyBiL1NvdXJjZS9XVEYv
d3RmL01ldGFBbGxvY2F0b3IuY3BwCkBAIC0zMDQsOSArMzA0LDkgQEAgdm9pZCBNZXRhQWxsb2Nh
dG9yOjphZGRGcmVlU3BhY2Uodm9pZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRlcykKICAgICAg
ICAgLy8gV2UgaGF2ZSBzb21ldGhpbmcgd2UgY2FuIGNvYWxlc2NlIHdpdGggb24gdGhlIGxlZnQu
IFJlbW92ZSBpdCBmcm9tIHRoZSB0cmVlLCBhbmQKICAgICAgICAgLy8gcmVtb3ZlIGl0cyBlbmQg
ZnJvbSB0aGUgZW5kIGFkZHJlc3MgbWFwLgogICAgICAgICAKLSAgICAgICAgQVNTRVJUKHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihsZWZ0TmVpZ2hi
b3ItPnNlY29uZC0+bV9zdGFydCkgKyBsZWZ0TmVpZ2hib3ItPnNlY29uZC0+bV9zaXplSW5CeXRl
cykgPT0gbGVmdE5laWdoYm9yLT5maXJzdCk7CisgICAgICAgIEFTU0VSVChyZWludGVycHJldF9j
YXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obGVmdE5laWdoYm9yLT52YWx1
ZS0+bV9zdGFydCkgKyBsZWZ0TmVpZ2hib3ItPnZhbHVlLT5tX3NpemVJbkJ5dGVzKSA9PSBsZWZ0
TmVpZ2hib3ItPmtleSk7CiAgICAgICAgIAotICAgICAgICBGcmVlU3BhY2VOb2RlKiBsZWZ0Tm9k
ZSA9IGxlZnROZWlnaGJvci0+c2Vjb25kOworICAgICAgICBGcmVlU3BhY2VOb2RlKiBsZWZ0Tm9k
ZSA9IGxlZnROZWlnaGJvci0+dmFsdWU7CiAgICAgICAgIAogICAgICAgICB2b2lkKiBsZWZ0U3Rh
cnQgPSBsZWZ0Tm9kZS0+bV9zdGFydDsKICAgICAgICAgc2l6ZV90IGxlZnRTaXplID0gbGVmdE5v
ZGUtPm1fc2l6ZUluQnl0ZXM7CkBAIC0zMjIsMTAgKzMyMiwxMCBAQCB2b2lkIE1ldGFBbGxvY2F0
b3I6OmFkZEZyZWVTcGFjZSh2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVzKQogICAgICAg
ICAgICAgLy8gRnJlZWluZyBzb21ldGhpbmcgaW4gdGhlIG1pZGRsZSBvZiBmcmVlIGJsb2Nrcy4g
Q29hbGVzY2UgYm90aCBsZWZ0IGFuZAogICAgICAgICAgICAgLy8gcmlnaHQsIHdoaWxzdCByZW1v
dmluZyB0aGUgcmlnaHQgbmVpZ2hib3IgZnJvbSB0aGUgbWFwcy4KICAgICAgICAgICAgIAotICAg
ICAgICAgICAgQVNTRVJUKHJpZ2h0TmVpZ2hib3ItPnNlY29uZC0+bV9zdGFydCA9PSByaWdodE5l
aWdoYm9yLT5maXJzdCk7CisgICAgICAgICAgICBBU1NFUlQocmlnaHROZWlnaGJvci0+dmFsdWUt
Pm1fc3RhcnQgPT0gcmlnaHROZWlnaGJvci0+a2V5KTsKICAgICAgICAgICAgIAotICAgICAgICAg
ICAgRnJlZVNwYWNlTm9kZSogcmlnaHROb2RlID0gcmlnaHROZWlnaGJvci0+c2Vjb25kOwotICAg
ICAgICAgICAgdm9pZCogcmlnaHRTdGFydCA9IHJpZ2h0TmVpZ2hib3ItPmZpcnN0OworICAgICAg
ICAgICAgRnJlZVNwYWNlTm9kZSogcmlnaHROb2RlID0gcmlnaHROZWlnaGJvci0+dmFsdWU7Cisg
ICAgICAgICAgICB2b2lkKiByaWdodFN0YXJ0ID0gcmlnaHROZWlnaGJvci0+a2V5OwogICAgICAg
ICAgICAgc2l6ZV90IHJpZ2h0U2l6ZSA9IHJpZ2h0Tm9kZS0+bV9zaXplSW5CeXRlczsKICAgICAg
ICAgICAgIHZvaWQqIHJpZ2h0RW5kID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnBy
ZXRfY2FzdDx1aW50cHRyX3Q+KHJpZ2h0U3RhcnQpICsgcmlnaHRTaXplKTsKICAgICAgICAgICAg
IApAQCAtMzUyLDggKzM1Miw4IEBAIHZvaWQgTWV0YUFsbG9jYXRvcjo6YWRkRnJlZVNwYWNlKHZv
aWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMpCiAgICAgICAgIC8vIENhbm5vdCBjb2FsZXNj
ZSB3aXRoIGxlZnQ7IHRyeSB0byBzZWUgaWYgd2UgY2FuIGNvYWxlc2NlIHdpdGggcmlnaHQuCiAg
ICAgICAgIAogICAgICAgICBpZiAocmlnaHROZWlnaGJvciAhPSBtX2ZyZWVTcGFjZVN0YXJ0QWRk
cmVzc01hcC5lbmQoKSkgewotICAgICAgICAgICAgRnJlZVNwYWNlTm9kZSogcmlnaHROb2RlID0g
cmlnaHROZWlnaGJvci0+c2Vjb25kOwotICAgICAgICAgICAgdm9pZCogcmlnaHRTdGFydCA9IHJp
Z2h0TmVpZ2hib3ItPmZpcnN0OworICAgICAgICAgICAgRnJlZVNwYWNlTm9kZSogcmlnaHROb2Rl
ID0gcmlnaHROZWlnaGJvci0+dmFsdWU7CisgICAgICAgICAgICB2b2lkKiByaWdodFN0YXJ0ID0g
cmlnaHROZWlnaGJvci0+a2V5OwogICAgICAgICAgICAgc2l6ZV90IHJpZ2h0U2l6ZSA9IHJpZ2h0
Tm9kZS0+bV9zaXplSW5CeXRlczsKICAgICAgICAgICAgIHZvaWQqIHJpZ2h0RW5kID0gcmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHJpZ2h0U3RhcnQp
ICsgcmlnaHRTaXplKTsKICAgICAgICAgICAgIApAQCAtMzk1LDcgKzM5NSw3IEBAIHZvaWQgTWV0
YUFsbG9jYXRvcjo6aW5jcmVtZW50UGFnZU9jY3VwYW5jeSh2b2lkKiBhZGRyZXNzLCBzaXplX3Qg
c2l6ZUluQnl0ZXMpCiAgICAgICAgICAgICBtX2J5dGVzQ29tbWl0dGVkICs9IG1fcGFnZVNpemU7
CiAgICAgICAgICAgICBub3RpZnlOZWVkUGFnZShyZWludGVycHJldF9jYXN0PHZvaWQqPihwYWdl
IDw8IG1fbG9nUGFnZVNpemUpKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBpdGVyLT5z
ZWNvbmQrKzsKKyAgICAgICAgICAgIGl0ZXItPnZhbHVlKys7CiAgICAgfQogfQogCkBAIC00MDcs
NyArNDA3LDcgQEAgdm9pZCBNZXRhQWxsb2NhdG9yOjpkZWNyZW1lbnRQYWdlT2NjdXBhbmN5KHZv
aWQqIGFkZHJlc3MsIHNpemVfdCBzaXplSW5CeXRlcykKICAgICBmb3IgKHVpbnRwdHJfdCBwYWdl
ID0gZmlyc3RQYWdlOyBwYWdlIDw9IGxhc3RQYWdlOyArK3BhZ2UpIHsKICAgICAgICAgSGFzaE1h
cDx1aW50cHRyX3QsIHNpemVfdD46Oml0ZXJhdG9yIGl0ZXIgPSBtX3BhZ2VPY2N1cGFuY3lNYXAu
ZmluZChwYWdlKTsKICAgICAgICAgQVNTRVJUKGl0ZXIgIT0gbV9wYWdlT2NjdXBhbmN5TWFwLmVu
ZCgpKTsKLSAgICAgICAgaWYgKCEtLShpdGVyLT5zZWNvbmQpKSB7CisgICAgICAgIGlmICghLS0o
aXRlci0+dmFsdWUpKSB7CiAgICAgICAgICAgICBtX3BhZ2VPY2N1cGFuY3lNYXAucmVtb3ZlKGl0
ZXIpOwogICAgICAgICAgICAgbV9ieXRlc0NvbW1pdHRlZCAtPSBtX3BhZ2VTaXplOwogICAgICAg
ICAgICAgbm90aWZ5UGFnZUlzRnJlZShyZWludGVycHJldF9jYXN0PHZvaWQqPihwYWdlIDw8IG1f
bG9nUGFnZVNpemUpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1JlZkNvdW50ZWRMZWFr
Q291bnRlci5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9SZWZDb3VudGVkTGVha0NvdW50ZXIuY3BwCmlu
ZGV4IDY3MGYyYTBjZWM1OTljNmQ0ZjMxNjQ0ZWJlYjU4NzQxNWVmNDMyMWEuLjRhMDQ1MjgyNDg5
ZmU5NWExN2UyMzkxOTc3M2QzN2NiMjQ0MTBiZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3Rm
L1JlZkNvdW50ZWRMZWFrQ291bnRlci5jcHAKKysrIGIvU291cmNlL1dURi93dGYvUmVmQ291bnRl
ZExlYWtDb3VudGVyLmNwcApAQCAtNzEsNyArNzEsNyBAQCBSZWZDb3VudGVkTGVha0NvdW50ZXI6
On5SZWZDb3VudGVkTGVha0NvdW50ZXIoKQogICAgICAgICAgICAgTE9HKFJlZkNvdW50ZWRMZWFr
cywgIkxFQUs6ICV1ICVzIiwgbV9jb3VudCwgbV9kZXNjcmlwdGlvbik7CiAgICAgICAgIGVsc2Ug
aWYgKCFsb2dnZWRTdXBwcmVzc2lvblJlYXNvbikgewogICAgICAgICAgICAgLy8gVGhpcyBsb2dz
IG9ubHkgb25lIHJlYXNvbi4gTGF0ZXIgd2UgY291bGQgY2hhbmdlIGl0IHNvIHdlIGxvZyBhbGwg
dGhlIHJlYXNvbnMuCi0gICAgICAgICAgICBMT0coUmVmQ291bnRlZExlYWtzLCAiTm8gbGVhayBj
aGVja2luZyBkb25lOiAlcyIsIGxlYWtNZXNzYWdlU3VwcHJlc3Npb25SZWFzb25zLT5iZWdpbigp
LT5maXJzdCk7CisgICAgICAgICAgICBMT0coUmVmQ291bnRlZExlYWtzLCAiTm8gbGVhayBjaGVj
a2luZyBkb25lOiAlcyIsIGxlYWtNZXNzYWdlU3VwcHJlc3Npb25SZWFzb25zLT5iZWdpbigpLT5r
ZXkpOwogICAgICAgICAgICAgbG9nZ2VkU3VwcHJlc3Npb25SZWFzb24gPSB0cnVlOwogICAgICAg
ICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUmVmUHRySGFzaE1hcC5oIGIv
U291cmNlL1dURi93dGYvUmVmUHRySGFzaE1hcC5oCmluZGV4IDBhZjM2YmU2MDI3ZmI1MDBiYmZl
YTVjMjFkYzZlMDhjZGYwMTlmOGIuLmFmM2UwZDI1NWM1MjQ0ZTVkZDBlNGRhYTlmNjA5OGI2OTVj
YWEyMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1JlZlB0ckhhc2hNYXAuaAorKysgYi9T
b3VyY2UvV1RGL3d0Zi9SZWZQdHJIYXNoTWFwLmgKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNwYWNl
IFdURiB7CiAgICAgcHJpdmF0ZToKICAgICAgICAgdHlwZWRlZiBLZXlUcmFpdHNBcmcgS2V5VHJh
aXRzOwogICAgICAgICB0eXBlZGVmIE1hcHBlZFRyYWl0c0FyZyBNYXBwZWRUcmFpdHM7Ci0gICAg
ICAgIHR5cGVkZWYgUGFpckhhc2hUcmFpdHM8S2V5VHJhaXRzLCBNYXBwZWRUcmFpdHM+IFZhbHVl
VHJhaXRzOworICAgICAgICB0eXBlZGVmIEhhc2hNYXBFbnRyeVRyYWl0czxLZXlUcmFpdHMsIE1h
cHBlZFRyYWl0cz4gVmFsdWVUcmFpdHM7CiAKICAgICBwdWJsaWM6CiAgICAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgS2V5VHJhaXRzOjpUcmFpdFR5cGUgS2V5VHlwZTsKQEAgLTUxLDcgKzUxLDcgQEAg
bmFtZXNwYWNlIFdURiB7CiAgICAgICAgIAogICAgICAgICB0eXBlZGVmIEhhc2hBcmcgSGFzaEZ1
bmN0aW9uczsKIAotICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZTxLZXlUeXBlLCBWYWx1ZVR5cGUs
IFBhaXJGaXJzdEV4dHJhY3RvcjxWYWx1ZVR5cGU+LAorICAgICAgICB0eXBlZGVmIEhhc2hUYWJs
ZTxLZXlUeXBlLCBWYWx1ZVR5cGUsIEhhc2hNYXBFbnRyeUtleUV4dHJhY3RvcjxWYWx1ZVR5cGU+
LAogICAgICAgICAgICAgSGFzaEZ1bmN0aW9ucywgVmFsdWVUcmFpdHMsIEtleVRyYWl0cz4gSGFz
aFRhYmxlVHlwZTsKIAogICAgICAgICB0eXBlZGVmIEhhc2hNYXBUcmFuc2xhdG9yPFZhbHVlVHJh
aXRzLCBIYXNoRnVuY3Rpb25zPgpAQCAtMjE2LDcgKzIxNiw3IEBAIG5hbWVzcGFjZSBXVEYgewog
ICAgICAgICBBZGRSZXN1bHQgcmVzdWx0ID0gaW5saW5lQWRkKGtleSwgbWFwcGVkKTsKICAgICAg
ICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkgewogICAgICAgICAgICAgLy8gVGhlIGlubGluZUFk
ZCBjYWxsIGFib3ZlIGZvdW5kIGFuIGV4aXN0aW5nIGhhc2ggdGFibGUgZW50cnk7IHdlIG5lZWQg
dG8gc2V0IHRoZSBtYXBwZWQgdmFsdWUuCi0gICAgICAgICAgICBNYXBwZWRUcmFpdHM6OnN0b3Jl
KG1hcHBlZCwgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOworICAgICAgICAgICAgTWFwcGVkVHJh
aXRzOjpzdG9yZShtYXBwZWQsIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwogICAgICAgICB9CiAg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpAQCAtMjI4LDcgKzIyOCw3IEBAIG5hbWVzcGFj
ZSBXVEYgewogICAgICAgICBBZGRSZXN1bHQgcmVzdWx0ID0gaW5saW5lQWRkKGtleSwgbWFwcGVk
KTsKICAgICAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkgewogICAgICAgICAgICAgLy8gVGhl
IGlubGluZUFkZCBjYWxsIGFib3ZlIGZvdW5kIGFuIGV4aXN0aW5nIGhhc2ggdGFibGUgZW50cnk7
IHdlIG5lZWQgdG8gc2V0IHRoZSBtYXBwZWQgdmFsdWUuCi0gICAgICAgICAgICBNYXBwZWRUcmFp
dHM6OnN0b3JlKG1hcHBlZCwgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOworICAgICAgICAgICAg
TWFwcGVkVHJhaXRzOjpzdG9yZShtYXBwZWQsIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwogICAg
ICAgICB9CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpAQCAtMjU0LDcgKzI1NCw3IEBA
IG5hbWVzcGFjZSBXVEYgewogICAgICAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gY29uc3RfY2FzdDxI
YXNoVGFibGVUeXBlJj4obV9pbXBsKS5sb29rdXAoa2V5KTsKICAgICAgICAgaWYgKCFlbnRyeSkK
ICAgICAgICAgICAgIHJldHVybiBNYXBwZWRUcmFpdHM6OnBlZWsoTWFwcGVkVHJhaXRzOjplbXB0
eVZhbHVlKCkpOwotICAgICAgICByZXR1cm4gTWFwcGVkVHJhaXRzOjpwZWVrKGVudHJ5LT5zZWNv
bmQpOworICAgICAgICByZXR1cm4gTWFwcGVkVHJhaXRzOjpwZWVrKGVudHJ5LT52YWx1ZSk7CiAg
ICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwg
dHlwZW5hbWUgVywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzPgpAQCAtMjY0LDcgKzI2NCw3IEBAIG5h
bWVzcGFjZSBXVEYgewogICAgICAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gY29uc3RfY2FzdDxIYXNo
VGFibGVUeXBlJj4obV9pbXBsKS50ZW1wbGF0ZSBsb29rdXA8VHJhbnNsYXRvcj4oa2V5KTsKICAg
ICAgICAgaWYgKCFlbnRyeSkKICAgICAgICAgICAgIHJldHVybiBNYXBwZWRUcmFpdHM6OnBlZWso
TWFwcGVkVHJhaXRzOjplbXB0eVZhbHVlKCkpOwotICAgICAgICByZXR1cm4gTWFwcGVkVHJhaXRz
OjpwZWVrKGVudHJ5LT5zZWNvbmQpOworICAgICAgICByZXR1cm4gTWFwcGVkVHJhaXRzOjpwZWVr
KGVudHJ5LT52YWx1ZSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzPgpAQCAt
MzA4LDcgKzMwOCw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBpdGVyYXRvciBpdCA9IGZp
bmQoa2V5KTsKICAgICAgICAgaWYgKGl0ID09IGVuZCgpKQogICAgICAgICAgICAgcmV0dXJuIE1h
cHBlZFRyYWl0czo6cGFzc091dChNYXBwZWRUcmFpdHM6OmVtcHR5VmFsdWUoKSk7Ci0gICAgICAg
IE1hcHBlZFBhc3NPdXRUeXBlIHJlc3VsdCA9IE1hcHBlZFRyYWl0czo6cGFzc091dChpdC0+c2Vj
b25kKTsKKyAgICAgICAgTWFwcGVkUGFzc091dFR5cGUgcmVzdWx0ID0gTWFwcGVkVHJhaXRzOjpw
YXNzT3V0KGl0LT52YWx1ZSk7CiAgICAgICAgIHJlbW92ZShpdCk7CiAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICAgfQpAQCAtMzIwLDcgKzMyMCw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAg
ICBpdGVyYXRvciBpdCA9IGZpbmQoa2V5KTsKICAgICAgICAgaWYgKGl0ID09IGVuZCgpKQogICAg
ICAgICAgICAgcmV0dXJuIE1hcHBlZFRyYWl0czo6cGFzc091dChNYXBwZWRUcmFpdHM6OmVtcHR5
VmFsdWUoKSk7Ci0gICAgICAgIE1hcHBlZFBhc3NPdXRUeXBlIHJlc3VsdCA9IE1hcHBlZFRyYWl0
czo6cGFzc091dChpdC0+c2Vjb25kKTsKKyAgICAgICAgTWFwcGVkUGFzc091dFR5cGUgcmVzdWx0
ID0gTWFwcGVkVHJhaXRzOjpwYXNzT3V0KGl0LT52YWx1ZSk7CiAgICAgICAgIHJlbW92ZShpdCk7
CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvU3BlY3RydW0uaCBiL1NvdXJjZS9XVEYvd3RmL1NwZWN0cnVtLmgKaW5kZXggNWU3YTQ4NGNk
ODc2NmJjYWYyMmNhNGM5M2RkY2U5NzBkZDJiYTIxMy4uZjBmMTllYjFjYmZhZTJhM2ZhZDkyYThl
MjlkZDhlYTI5ODliNDQ1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvU3BlY3RydW0uaAor
KysgYi9Tb3VyY2UvV1RGL3d0Zi9TcGVjdHJ1bS5oCkBAIC00NCw3ICs0NCw3IEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgICAgIHR5cGVuYW1lIEhhc2hNYXA8VCwgdW5zaWduZWQgbG9uZz46OkFkZFJl
c3VsdCByZXN1bHQgPSBtX21hcC5hZGQoa2V5LCBjb3VudCk7CiAgICAgICAgIGlmICghcmVzdWx0
LmlzTmV3RW50cnkpCi0gICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCArPSBjb3Vu
dDsKKyAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgKz0gY291bnQ7CiAgICAgfQog
ICAgIAogICAgIHVuc2lnbmVkIGxvbmcgZ2V0KGNvbnN0IFQmIGtleSkgY29uc3QKQEAgLTg4LDcg
Kzg4LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgVmVjdG9yPEtleUFuZENvdW50PiBsaXN0
OwogICAgICAgICBmb3IgKGNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBiZWdpbigpOyBpdGVyICE9IGVu
ZCgpOyArK2l0ZXIpCi0gICAgICAgICAgICBsaXN0LmFwcGVuZChLZXlBbmRDb3VudChpdGVyLT5m
aXJzdCwgaXRlci0+c2Vjb25kKSk7CisgICAgICAgICAgICBsaXN0LmFwcGVuZChLZXlBbmRDb3Vu
dChpdGVyLT5rZXksIGl0ZXItPnZhbHVlKSk7CiAgICAgICAgIAogICAgICAgICBzdGQ6OnNvcnQo
bGlzdC5iZWdpbigpLCBsaXN0LmVuZCgpKTsKICAgICAgICAgcmV0dXJuIGxpc3Q7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHAgYi9Tb3VyY2UvV1RGL3d0
Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHAKaW5kZXggYWJkMzUwZGJiYTNhMTgzMjNhNTE3MzNjOGYx
NWQ2ZmQ0OGMxYmM3NS4uNzQzYzk0YTNiMDlkYzAyM2I3YWVkMjY1MjEyODYwMzExZTY3YmQwMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcApAQCAtMTE5LDggKzExOSw4IEBAIHN0
YXRpYyBUaHJlYWRJZGVudGlmaWVyIGlkZW50aWZpZXJCeVB0aHJlYWRIYW5kbGUoY29uc3QgcHRo
cmVhZF90JiBwdGhyZWFkSGFuZGxlCiAKICAgICBUaHJlYWRNYXA6Oml0ZXJhdG9yIGkgPSB0aHJl
YWRNYXAoKS5iZWdpbigpOwogICAgIGZvciAoOyBpICE9IHRocmVhZE1hcCgpLmVuZCgpOyArK2kp
IHsKLSAgICAgICAgaWYgKHB0aHJlYWRfZXF1YWwoaS0+c2Vjb25kLCBwdGhyZWFkSGFuZGxlKSkK
LSAgICAgICAgICAgIHJldHVybiBpLT5maXJzdDsKKyAgICAgICAgaWYgKHB0aHJlYWRfZXF1YWwo
aS0+dmFsdWUsIHB0aHJlYWRIYW5kbGUpKQorICAgICAgICAgICAgcmV0dXJuIGktPmtleTsKICAg
ICB9CiAKICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
Z2VvbG9jYXRpb24vR2VvbG9jYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9s
b2NhdGlvbi9HZW9sb2NhdGlvbi5jcHAKaW5kZXggZTJjYzg5YzYzNjhjNGU3OWUyYjVlY2U4OTY3
OGVmOGYwNjVjMWNmZi4uNTBiNzU1NDliYjQ5YmQ0OWIyNjA0ZDRhOTc5MmYzOWJmZTU2NjcxYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlv
bi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlv
bi5jcHAKQEAgLTE5NCw3ICsxOTQsNyBAQCBHZW9sb2NhdGlvbjo6R2VvTm90aWZpZXIqIEdlb2xv
Y2F0aW9uOjpXYXRjaGVyczo6ZmluZChpbnQgaWQpCiAgICAgSWRUb05vdGlmaWVyTWFwOjppdGVy
YXRvciBpdGVyID0gbV9pZFRvTm90aWZpZXJNYXAuZmluZChpZCk7CiAgICAgaWYgKGl0ZXIgPT0g
bV9pZFRvTm90aWZpZXJNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBp
dGVyLT5zZWNvbmQuZ2V0KCk7CisgICAgcmV0dXJuIGl0ZXItPnZhbHVlLmdldCgpOwogfQogCiB2
b2lkIEdlb2xvY2F0aW9uOjpXYXRjaGVyczo6cmVtb3ZlKGludCBpZCkKQEAgLTIwMyw3ICsyMDMs
NyBAQCB2b2lkIEdlb2xvY2F0aW9uOjpXYXRjaGVyczo6cmVtb3ZlKGludCBpZCkKICAgICBJZFRv
Tm90aWZpZXJNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2lkVG9Ob3RpZmllck1hcC5maW5kKGlkKTsK
ICAgICBpZiAoaXRlciA9PSBtX2lkVG9Ob3RpZmllck1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJu
OwotICAgIG1fbm90aWZpZXJUb0lkTWFwLnJlbW92ZShpdGVyLT5zZWNvbmQpOworICAgIG1fbm90
aWZpZXJUb0lkTWFwLnJlbW92ZShpdGVyLT52YWx1ZSk7CiAgICAgbV9pZFRvTm90aWZpZXJNYXAu
cmVtb3ZlKGl0ZXIpOwogfQogCkBAIC0yMTIsNyArMjEyLDcgQEAgdm9pZCBHZW9sb2NhdGlvbjo6
V2F0Y2hlcnM6OnJlbW92ZShHZW9Ob3RpZmllciogbm90aWZpZXIpCiAgICAgTm90aWZpZXJUb0lk
TWFwOjppdGVyYXRvciBpdGVyID0gbV9ub3RpZmllclRvSWRNYXAuZmluZChub3RpZmllcik7CiAg
ICAgaWYgKGl0ZXIgPT0gbV9ub3RpZmllclRvSWRNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybjsK
LSAgICBtX2lkVG9Ob3RpZmllck1hcC5yZW1vdmUoaXRlci0+c2Vjb25kKTsKKyAgICBtX2lkVG9O
b3RpZmllck1hcC5yZW1vdmUoaXRlci0+dmFsdWUpOwogICAgIG1fbm90aWZpZXJUb0lkTWFwLnJl
bW92ZShpdGVyKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcAppbmRleCBiMDViMzI4NjNkMDcy
ZmI2NTdkY2E5YzhkNjRlMGI4NTFhZDA5MjQ1Li4zNzA0M2ZkNTVhZjJiNGI3OTA4MjU0ZTlmMjFk
NzI5YzUxNTMyMWRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcApAQCAtMTMyLDcgKzEzMiw3IEBA
IFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6b2JqZWN0
U3RvcmVOYW1lcygpIGNvbnN0CiB7CiAgICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+IG9iamVjdFN0
b3JlTmFtZXMgPSBET01TdHJpbmdMaXN0OjpjcmVhdGUoKTsKICAgICBmb3IgKE9iamVjdFN0b3Jl
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fb2JqZWN0U3RvcmVzLmJlZ2luKCk7IGl0ICE9IG1f
b2JqZWN0U3RvcmVzLmVuZCgpOyArK2l0KQotICAgICAgICBvYmplY3RTdG9yZU5hbWVzLT5hcHBl
bmQoaXQtPmZpcnN0KTsKKyAgICAgICAgb2JqZWN0U3RvcmVOYW1lcy0+YXBwZW5kKGl0LT5rZXkp
OwogICAgIG9iamVjdFN0b3JlTmFtZXMtPnNvcnQoKTsKICAgICByZXR1cm4gb2JqZWN0U3RvcmVO
YW1lcy5yZWxlYXNlKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcAppbmRleCBmNWI5Yzg3NzQwNjc0
M2YwZTVhNjA5YTRjY2U5ZDVlNGRhMjlhMzFjLi4yOTYwYjAyY2IyZTZiOGQ2NzE0YzIwN2E5OWQ1
NzU4MWY3MDVkZTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKQEAgLTExNyw3ICsxMTcsNyBAQCB2
b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6ZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBu
YW1lLCBQYXNzUmVmUHRyPElEQkNhbAogICAgIGlmIChpdCAhPSBtX2RhdGFiYXNlQmFja2VuZE1h
cC5lbmQoKSkgewogICAgICAgICAvLyBJZiB0aGVyZSBhcmUgYW55IGNvbm5lY3Rpb25zIHRvIHRo
ZSBkYXRhYmFzZSwgZGlyZWN0bHkgZGVsZXRlIHRoZQogICAgICAgICAvLyBkYXRhYmFzZS4KLSAg
ICAgICAgaXQtPnNlY29uZC0+ZGVsZXRlRGF0YWJhc2UoY2FsbGJhY2tzKTsKKyAgICAgICAgaXQt
PnZhbHVlLT5kZWxldGVEYXRhYmFzZShjYWxsYmFja3MpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCkBAIC0xNDAsNyArMTQwLDcgQEAgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IElEQkZh
Y3RvcnlCYWNrZW5kSW1wbDo6b3BlbkJhY2tpbmdTdG9yZShQYXNzUmVmUHRyPFMKICAgICBSZWZQ
dHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmU7CiAgICAgSURCQmFja2luZ1N0b3JlTWFw
OjppdGVyYXRvciBpdDIgPSBtX2JhY2tpbmdTdG9yZU1hcC5maW5kKGZpbGVJZGVudGlmaWVyKTsK
ICAgICBpZiAoaXQyICE9IG1fYmFja2luZ1N0b3JlTWFwLmVuZCgpKQotICAgICAgICBiYWNraW5n
U3RvcmUgPSBpdDItPnNlY29uZDsKKyAgICAgICAgYmFja2luZ1N0b3JlID0gaXQyLT52YWx1ZTsK
ICAgICBlbHNlIHsKICNpZiBVU0UoTEVWRUxEQikKICAgICAgICAgYmFja2luZ1N0b3JlID0gSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbihzZWN1cml0eU9yaWdpbi5nZXQoKSwgZGF0YURpcmVj
dG9yeSwgZmlsZUlkZW50aWZpZXIsIHRoaXMpOwpAQCAtMTY1LDcgKzE2NSw3IEBAIHZvaWQgSURC
RmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuSW50ZXJuYWwoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJD
YWxsYmFja3MqIGNhbGxiCiAgICAgaWYgKGl0ICE9IG1fZGF0YWJhc2VCYWNrZW5kTWFwLmVuZCgp
KSB7CiAgICAgICAgIC8vIElmIGl0J3MgYWxyZWFkeSBiZWVuIG9wZW5lZCwgd2UgaGF2ZSB0byB3
YWl0IGZvciBhbnkgcGVuZGluZwogICAgICAgICAvLyBzZXRWZXJzaW9uIGNhbGxzIHRvIGNvbXBs
ZXRlLgotICAgICAgICBpdC0+c2Vjb25kLT5vcGVuQ29ubmVjdGlvbihjYWxsYmFja3MpOworICAg
ICAgICBpdC0+dmFsdWUtPm9wZW5Db25uZWN0aW9uKGNhbGxiYWNrcyk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQk9iamVjdFN0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
Qk9iamVjdFN0b3JlLmNwcAppbmRleCBkZjkyNmY0NTljNjQ4YjNiZTVjYjI2MmU3MTMxMWMwYmQ1
ZGI4YTZhLi45MzU4MTY1YWE3ZWJiMjEzY2U3NDg1ZTA4NTQ4N2MxOTFlNmI3MDRkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3Bw
CkBAIC0yMjQsNyArMjI0LDcgQEAgUGFzc1JlZlB0cjxJREJJbmRleD4gSURCT2JqZWN0U3RvcmU6
OmluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMKIAogICAgIElEQklu
ZGV4TWFwOjppdGVyYXRvciBpdCA9IG1faW5kZXhNYXAuZmluZChuYW1lKTsKICAgICBpZiAoaXQg
IT0gbV9pbmRleE1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAg
IHJldHVybiBpdC0+dmFsdWU7CiAKICAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNl
PiBpbmRleEJhY2tlbmQgPSBtX2JhY2tlbmQtPmluZGV4KG5hbWUsIGVjKTsKICAgICBBU1NFUlQo
IWluZGV4QmFja2VuZCAhPSAhZWMpOyAvLyBJZiB3ZSBkaWRuJ3QgZ2V0IGFuIGluZGV4LCB3ZSBz
aG91bGQgaGF2ZSBnb3R0ZW4gYW4gZXhjZXB0aW9uIGNvZGUuIEFuZCB2aWNlIHZlcnNhLgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsLmNwcAppbmRleCAyZTJmMGZhOTZkZTg5ODRkMzdmYTk3ZTQyMTQ0
ZDZiNzRkYjNhOGU3Li45Zjk1ZmI5YmU1YTJmYTMyODhkOWY2NzNjZGE4ZjY5MGQ4ZDE5MzMwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcApAQCAtNzgsNyArNzgsNyBAQCBQYXNzUmVmUHRy
PERPTVN0cmluZ0xpc3Q+IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmluZGV4TmFtZXMoKSBj
b25zdAogewogICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiBpbmRleE5hbWVzID0gRE9NU3RyaW5n
TGlzdDo6Y3JlYXRlKCk7CiAgICAgZm9yIChJbmRleE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
X2luZGV4ZXMuYmVnaW4oKTsgaXQgIT0gbV9pbmRleGVzLmVuZCgpOyArK2l0KQotICAgICAgICBp
bmRleE5hbWVzLT5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgaW5kZXhOYW1lcy0+YXBwZW5k
KGl0LT5rZXkpOwogICAgIGluZGV4TmFtZXMtPnNvcnQoKTsKICAgICByZXR1cm4gaW5kZXhOYW1l
cy5yZWxlYXNlKCk7CiB9CkBAIC0xNzQsNyArMTc0LDcgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjpwdXQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVl
LAogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGZvciAoSW5kZXhNYXA6
Oml0ZXJhdG9yIGl0ID0gbV9pbmRleGVzLmJlZ2luKCk7IGl0ICE9IG1faW5kZXhlcy5lbmQoKTsg
KytpdCkgewotICAgICAgICAgICAgY29uc3QgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+JiBp
bmRleCA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICBjb25zdCBSZWZQdHI8SURCSW5kZXhCYWNr
ZW5kSW1wbD4mIGluZGV4ID0gaXQtPnZhbHVlOwogICAgICAgICAgICAgUmVmUHRyPElEQktleT4g
aW5kZXhLZXkgPSBmZXRjaEtleUZyb21LZXlQYXRoKHZhbHVlLmdldCgpLCBpbmRleC0+a2V5UGF0
aCgpKTsKICAgICAgICAgICAgIGlmIChpbmRleEtleSAmJiAhaW5kZXhLZXktPnZhbGlkKCkpIHsK
ICAgICAgICAgICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKQEAg
LTI1NCw3ICsyNTQsNyBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVy
bmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPAogCiAgICAgVmVjdG9yPFJl
ZlB0cjxJREJLZXk+ID4gaW5kZXhLZXlzOwogICAgIGZvciAoSW5kZXhNYXA6Oml0ZXJhdG9yIGl0
ID0gb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5iZWdpbigpOyBpdCAhPSBvYmplY3RTdG9yZS0+bV9p
bmRleGVzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IFJlZlB0cjxJREJJbmRleEJhY2tl
bmRJbXBsPiYgaW5kZXggPSBpdC0+c2Vjb25kOworICAgICAgICBjb25zdCBSZWZQdHI8SURCSW5k
ZXhCYWNrZW5kSW1wbD4mIGluZGV4ID0gaXQtPnZhbHVlOwogCiAgICAgICAgIFJlZlB0cjxJREJL
ZXk+IGluZGV4S2V5ID0gZmV0Y2hLZXlGcm9tS2V5UGF0aCh2YWx1ZS5nZXQoKSwgaW5kZXgtPmtl
eVBhdGgoKSk7CiAgICAgICAgIGlmICghaW5kZXhLZXkpIHsKQEAgLTI5Myw3ICsyOTMsNyBAQCB2
b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBQYXNzUmVmUHRyPAogCiAgICAgaW50IGkgPSAwOwogICAgIGZvciAoSW5kZXhN
YXA6Oml0ZXJhdG9yIGl0ID0gb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5iZWdpbigpOyBpdCAhPSBv
YmplY3RTdG9yZS0+bV9pbmRleGVzLmVuZCgpOyArK2l0LCArK2kpIHsKLSAgICAgICAgUmVmUHRy
PElEQkluZGV4QmFja2VuZEltcGw+JiBpbmRleCA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFJlZlB0
cjxJREJJbmRleEJhY2tlbmRJbXBsPiYgaW5kZXggPSBpdC0+dmFsdWU7CiAgICAgICAgIGlmICgh
aW5kZXgtPmhhc1ZhbGlkSWQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBUaGUgaW5kZXgg
b2JqZWN0IGhhcyBiZWVuIGNyZWF0ZWQsIGJ1dCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgZGF0YWJh
c2UgeWV0LgogCkBAIC0zNzYsMTAgKzM3NiwxMCBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6OmRlbGV0ZUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUAog
ICAgICAgICAgICAgcmVjb3JkSWRlbnRpZmllciA9IGJhY2tpbmdTdG9yZUN1cnNvci0+b2JqZWN0
U3RvcmVSZWNvcmRJZGVudGlmaWVyKCk7CiAKICAgICAgICAgICAgIGZvciAoSW5kZXhNYXA6Oml0
ZXJhdG9yIGl0ID0gb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5iZWdpbigpOyBpdCAhPSBvYmplY3RT
dG9yZS0+bV9pbmRleGVzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFpdC0+
c2Vjb25kLT5oYXNWYWxpZElkKCkpCisgICAgICAgICAgICAgICAgaWYgKCFpdC0+dmFsdWUtPmhh
c1ZhbGlkSWQoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7IC8vIFRoZSBpbmRleCBv
YmplY3QgaGFzIGJlZW4gY3JlYXRlZCwgYnV0IGRvZXMgbm90IGV4aXN0IGluIHRoZSBkYXRhYmFz
ZSB5ZXQuCiAKLSAgICAgICAgICAgICAgICBib29sIHN1Y2Nlc3MgPSBvYmplY3RTdG9yZS0+bV9i
YWNraW5nU3RvcmUtPmRlbGV0ZUluZGV4RGF0YUZvclJlY29yZChvYmplY3RTdG9yZS0+bV9kYXRh
YmFzZUlkLCBvYmplY3RTdG9yZS0+aWQoKSwgaXQtPnNlY29uZC0+aWQoKSwgcmVjb3JkSWRlbnRp
Zmllci5nZXQoKSk7CisgICAgICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gb2JqZWN0U3RvcmUt
Pm1fYmFja2luZ1N0b3JlLT5kZWxldGVJbmRleERhdGFGb3JSZWNvcmQob2JqZWN0U3RvcmUtPm1f
ZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmUtPmlkKCksIGl0LT52YWx1ZS0+aWQoKSwgcmVjb3JkSWRl
bnRpZmllci5nZXQoKSk7CiAgICAgICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBz
dWNjZXNzKTsKICAgICAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwCmluZGV4IDllMGIzYThmNzI5YzRiNjFkMDg0
YzdhZGNkMjBjMWExYTYyYzg1MWUuLmJhYmM3MWE4OTk5NDhjM2M0ZDcxMmNiOGNkOWU2YmFmMjYw
MTFiYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRy
YW5zYWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJU
cmFuc2FjdGlvbi5jcHAKQEAgLTkzLDcgKzkzLDcgQEAgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9y
ZT4gSURCVHJhbnNhY3Rpb246Om9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXAK
IAogICAgIElEQk9iamVjdFN0b3JlTWFwOjppdGVyYXRvciBpdCA9IG1fb2JqZWN0U3RvcmVNYXAu
ZmluZChuYW1lKTsKICAgICBpZiAoaXQgIT0gbV9vYmplY3RTdG9yZU1hcC5lbmQoKSkKLSAgICAg
ICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBpdC0+dmFsdWU7CiAKICAgICBS
ZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBvYmplY3RTdG9yZUJhY2tlbmQg
PSBtX2JhY2tlbmQtPm9iamVjdFN0b3JlKG5hbWUsIGVjKTsKICAgICBpZiAoIW9iamVjdFN0b3Jl
QmFja2VuZCkgewpAQCAtMjI3LDcgKzIyNyw3IEBAIGJvb2wgSURCVHJhbnNhY3Rpb246OmRpc3Bh
dGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCiAKICAgICAvLyBCcmVhayByZWZlcmVu
Y2UgY3ljbGVzLgogICAgIGZvciAoSURCT2JqZWN0U3RvcmVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9v
YmplY3RTdG9yZU1hcC5iZWdpbigpOyBpdCAhPSBtX29iamVjdFN0b3JlTWFwLmVuZCgpOyArK2l0
KQotICAgICAgICBpdC0+c2Vjb25kLT50cmFuc2FjdGlvbkZpbmlzaGVkKCk7CisgICAgICAgIGl0
LT52YWx1ZS0+dHJhbnNhY3Rpb25GaW5pc2hlZCgpOwogICAgIG1fb2JqZWN0U3RvcmVNYXAuY2xl
YXIoKTsKIAogICAgIFZlY3RvcjxSZWZQdHI8RXZlbnRUYXJnZXQ+ID4gdGFyZ2V0czsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvQWJzdHJhY3REYXRhYmFz
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Fic3RyYWN0RGF0YWJh
c2UuY3BwCmluZGV4IGU1MWMyNDQ0ODY2YTZjY2NiZDliNGE5Zjk3ZDY5ZGIyMjUzMmFmZDIuLmYw
NGJjZDg5YjFhZmFmZDI2OGQ2MjJlZjc4ZTBiOTY4Njg5NmRlY2EgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvQWJzdHJhY3REYXRhYmFzZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9BYnN0cmFjdERhdGFiYXNlLmNwcApA
QCAtMjgyLDcgKzI4Miw3IEBAIGJvb2wgQWJzdHJhY3REYXRhYmFzZTo6cGVyZm9ybU9wZW5BbmRW
ZXJpZnkoYm9vbCBzaG91bGRTZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwKICAgICAgICAgR3VpZFZl
cnNpb25NYXA6Oml0ZXJhdG9yIGVudHJ5ID0gZ3VpZFRvVmVyc2lvbk1hcCgpLmZpbmQobV9ndWlk
KTsKICAgICAgICAgaWYgKGVudHJ5ICE9IGd1aWRUb1ZlcnNpb25NYXAoKS5lbmQoKSkgewogICAg
ICAgICAgICAgLy8gTWFwIG51bGwgc3RyaW5nIHRvIGVtcHR5IHN0cmluZyAoc2VlIHVwZGF0ZUd1
aWRWZXJzaW9uTWFwKCkpLgotICAgICAgICAgICAgY3VycmVudFZlcnNpb24gPSBlbnRyeS0+c2Vj
b25kLmlzTnVsbCgpID8gU3RyaW5nKCIiKSA6IGVudHJ5LT5zZWNvbmQuaXNvbGF0ZWRDb3B5KCk7
CisgICAgICAgICAgICBjdXJyZW50VmVyc2lvbiA9IGVudHJ5LT52YWx1ZS5pc051bGwoKSA/IFN0
cmluZygiIikgOiBlbnRyeS0+dmFsdWUuaXNvbGF0ZWRDb3B5KCk7CiAgICAgICAgICAgICBMT0co
U3RvcmFnZUFQSSwgIkN1cnJlbnQgY2FjaGVkIHZlcnNpb24gZm9yIGd1aWQgJWkgaXMgJXMiLCBt
X2d1aWQsIGN1cnJlbnRWZXJzaW9uLmFzY2lpKCkuZGF0YSgpKTsKIAogI2lmIFBMQVRGT1JNKENI
Uk9NSVVNKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9E
YXRhYmFzZVRyYWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9E
YXRhYmFzZVRyYWNrZXIuY3BwCmluZGV4IDIzM2IzNzIxYjZlMzYwZDE4NjU5NWNjMDkyNzljNGE4
OGUzYzZkNWEuLjNjZmNmZmVlN2IxYmFiZjhkZjc0MzA4NDVmNGEwMzZiMTUzYjdhMmIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2Vy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJh
Y2tlci5jcHAKQEAgLTI1Miw3ICsyNTIsNyBAQCB2b2lkIERhdGFiYXNlVHJhY2tlcjo6aW50ZXJy
dXB0QWxsRGF0YWJhc2VzRm9yQ29udGV4dChjb25zdCBTY3JpcHRFeGVjdXRpb25Db250ZQogCiAg
ICAgICAgIERhdGFiYXNlTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgZGJOYW1lTWFwRW5kSXQgPSBu
YW1lTWFwLT5lbmQoKTsKICAgICAgICAgZm9yIChEYXRhYmFzZU5hbWVNYXA6OmNvbnN0X2l0ZXJh
dG9yIGRiTmFtZU1hcEl0ID0gbmFtZU1hcC0+YmVnaW4oKTsgZGJOYW1lTWFwSXQgIT0gZGJOYW1l
TWFwRW5kSXQ7ICsrZGJOYW1lTWFwSXQpIHsKLSAgICAgICAgICAgIERhdGFiYXNlU2V0KiBkYXRh
YmFzZVNldCA9IGRiTmFtZU1hcEl0LT5zZWNvbmQ7CisgICAgICAgICAgICBEYXRhYmFzZVNldCog
ZGF0YWJhc2VTZXQgPSBkYk5hbWVNYXBJdC0+dmFsdWU7CiAgICAgICAgICAgICBEYXRhYmFzZVNl
dDo6Y29uc3RfaXRlcmF0b3IgZGJTZXRFbmRJdCA9IGRhdGFiYXNlU2V0LT5lbmQoKTsKICAgICAg
ICAgICAgIGZvciAoRGF0YWJhc2VTZXQ6OmNvbnN0X2l0ZXJhdG9yIGRiU2V0SXQgPSBkYXRhYmFz
ZVNldC0+YmVnaW4oKTsgZGJTZXRJdCAhPSBkYlNldEVuZEl0OyArK2RiU2V0SXQpIHsKICAgICAg
ICAgICAgICAgICBpZiAoKCpkYlNldEl0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpID09IGNv
bnRleHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL09y
aWdpblVzYWdlUmVjb3JkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2Uv
T3JpZ2luVXNhZ2VSZWNvcmQuY3BwCmluZGV4IDQ0MzU1MGE1NzMwOWYzMzYzZjBmY2E5OGY1MDhj
MDI3NmQwZDk5ZGIuLjJiZjhhZjRhZTAwOTkyODBhY2ExNzU3NzQ4YmEyMWNmOTBiNzAyZGIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvT3JpZ2luVXNhZ2VS
ZWNvcmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvT3JpZ2lu
VXNhZ2VSZWNvcmQuY3BwCkBAIC05Myw3ICs5Myw3IEBAIHVuc2lnbmVkIGxvbmcgbG9uZyBPcmln
aW5Vc2FnZVJlY29yZDo6ZGlza1VzYWdlKCkKICAgICBIYXNoTWFwPFN0cmluZywgRGF0YWJhc2VF
bnRyeT46Oml0ZXJhdG9yIGlEYXRhYmFzZSA9IG1fZGF0YWJhc2VNYXAuYmVnaW4oKTsKICAgICBI
YXNoTWFwPFN0cmluZywgRGF0YWJhc2VFbnRyeT46Oml0ZXJhdG9yIGVuZERhdGFiYXNlID0gbV9k
YXRhYmFzZU1hcC5lbmQoKTsKICAgICBmb3IgKDsgaURhdGFiYXNlICE9IGVuZERhdGFiYXNlOyAr
K2lEYXRhYmFzZSkKLSAgICAgICAgbV9jYWNoZWREaXNrVXNhZ2UgKz0gaURhdGFiYXNlLT5zZWNv
bmQuc2l6ZTsKKyAgICAgICAgbV9jYWNoZWREaXNrVXNhZ2UgKz0gaURhdGFiYXNlLT52YWx1ZS5z
aXplOwogCiAgICAgbV9jYWNoZWREaXNrVXNhZ2VJc1ZhbGlkID0gdHJ1ZTsKICAgICByZXR1cm4g
bV9jYWNoZWREaXNrVXNhZ2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcAppbmRleCA4
MzdiOGZiZDIyMDVhZGM5NzQ4NmRkM2YwZThmMDIwNzM4MGY4ZDliLi5kYTNhN2VlNzViOGMwMTI1
OTQ2NmVjNGE3ZWFkYTk3YmQxYzIzYmY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5j
cHAKQEAgLTc4LDcgKzc4LDcgQEAgdm9pZCBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjphY3F1
aXJlTG9jayhTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCiAgICAgICAgIGNvb3JkaW5hdGlv
bkluZm9JdGVyYXRvciA9IG1fY29vcmRpbmF0aW9uSW5mb01hcC5hZGQoZGJJZGVudGlmaWVyLCBD
b29yZGluYXRpb25JbmZvKCkpLml0ZXJhdG9yOwogICAgIH0KIAotICAgIENvb3JkaW5hdGlvbklu
Zm8mIGluZm8gPSBjb29yZGluYXRpb25JbmZvSXRlcmF0b3ItPnNlY29uZDsKKyAgICBDb29yZGlu
YXRpb25JbmZvJiBpbmZvID0gY29vcmRpbmF0aW9uSW5mb0l0ZXJhdG9yLT52YWx1ZTsKICAgICBp
bmZvLnBlbmRpbmdUcmFuc2FjdGlvbnMuYXBwZW5kKHRyYW5zYWN0aW9uKTsKICAgICBwcm9jZXNz
UGVuZGluZ1RyYW5zYWN0aW9ucyhpbmZvKTsKIH0KQEAgLTkyLDcgKzkyLDcgQEAgdm9pZCBTUUxU
cmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpyZWxlYXNlTG9jayhTUUxUcmFuc2FjdGlvbiogdHJhbnNh
Y3Rpb24pCiAKICAgICBDb29yZGluYXRpb25JbmZvTWFwOjppdGVyYXRvciBjb29yZGluYXRpb25J
bmZvSXRlcmF0b3IgPSBtX2Nvb3JkaW5hdGlvbkluZm9NYXAuZmluZChkYklkZW50aWZpZXIpOwog
ICAgIEFTU0VSVChjb29yZGluYXRpb25JbmZvSXRlcmF0b3IgIT0gbV9jb29yZGluYXRpb25JbmZv
TWFwLmVuZCgpKTsKLSAgICBDb29yZGluYXRpb25JbmZvJiBpbmZvID0gY29vcmRpbmF0aW9uSW5m
b0l0ZXJhdG9yLT5zZWNvbmQ7CisgICAgQ29vcmRpbmF0aW9uSW5mbyYgaW5mbyA9IGNvb3JkaW5h
dGlvbkluZm9JdGVyYXRvci0+dmFsdWU7CiAKICAgICBpZiAodHJhbnNhY3Rpb24tPmlzUmVhZE9u
bHkoKSkgewogICAgICAgICBBU1NFUlQoaW5mby5hY3RpdmVSZWFkVHJhbnNhY3Rpb25zLmNvbnRh
aW5zKHRyYW5zYWN0aW9uKSk7CkBAIC0xMTAsNyArMTEwLDcgQEAgdm9pZCBTUUxUcmFuc2FjdGlv
bkNvb3JkaW5hdG9yOjpzaHV0ZG93bigpCiAgICAgLy8gTm90aWZ5IGFsbCB0cmFuc2FjdGlvbnMg
aW4gcHJvZ3Jlc3MgdGhhdCB0aGUgZGF0YWJhc2UgdGhyZWFkIGlzIHNodXR0aW5nIGRvd24KICAg
ICBmb3IgKENvb3JkaW5hdGlvbkluZm9NYXA6Oml0ZXJhdG9yIGNvb3JkaW5hdGlvbkluZm9JdGVy
YXRvciA9IG1fY29vcmRpbmF0aW9uSW5mb01hcC5iZWdpbigpOwogICAgICAgICAgY29vcmRpbmF0
aW9uSW5mb0l0ZXJhdG9yICE9IG1fY29vcmRpbmF0aW9uSW5mb01hcC5lbmQoKTsgKytjb29yZGlu
YXRpb25JbmZvSXRlcmF0b3IpIHsKLSAgICAgICAgQ29vcmRpbmF0aW9uSW5mbyYgaW5mbyA9IGNv
b3JkaW5hdGlvbkluZm9JdGVyYXRvci0+c2Vjb25kOworICAgICAgICBDb29yZGluYXRpb25JbmZv
JiBpbmZvID0gY29vcmRpbmF0aW9uSW5mb0l0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgaWYgKGlu
Zm8uYWN0aXZlV3JpdGVUcmFuc2FjdGlvbikKICAgICAgICAgICAgIGluZm8uYWN0aXZlV3JpdGVU
cmFuc2FjdGlvbi0+bm90aWZ5RGF0YWJhc2VUaHJlYWRJc1NodXR0aW5nRG93bigpOwogICAgICAg
ICBmb3IgKEhhc2hTZXQ8UmVmUHRyPFNRTFRyYW5zYWN0aW9uPiA+OjppdGVyYXRvciBhY3RpdmVS
ZWFkVHJhbnNhY3Rpb25zSXRlcmF0b3IgPQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJkYXRhYmFzZS9jaHJvbWl1bS9EYXRhYmFzZVRyYWNrZXJDaHJvbWl1bS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL0RhdGFiYXNlVHJhY2tl
ckNocm9taXVtLmNwcAppbmRleCAxMTdmZGJlZWQzMWQ2M2I2NGI5NDE4MDNiOGVhZGNkOTk4NWNl
ZWZjLi42MGE3NmNhNWM5NTk4MmJlYTk0Y2UwN2JhZjY2ZWRhNWQ4MjdjNWFiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL0RhdGFiYXNlVHJh
Y2tlckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNl
L2Nocm9taXVtL0RhdGFiYXNlVHJhY2tlckNocm9taXVtLmNwcApAQCAtMTgwLDcgKzE4MCw3IEBA
IHZvaWQgRGF0YWJhc2VUcmFja2VyOjppbnRlcnJ1cHRBbGxEYXRhYmFzZXNGb3JDb250ZXh0KGNv
bnN0IFNjcmlwdEV4ZWN1dGlvbkNvbnRlCiAKICAgICBEYXRhYmFzZU5hbWVNYXA6OmNvbnN0X2l0
ZXJhdG9yIGRiTmFtZU1hcEVuZEl0ID0gbmFtZU1hcC0+ZW5kKCk7CiAgICAgZm9yIChEYXRhYmFz
ZU5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGRiTmFtZU1hcEl0ID0gbmFtZU1hcC0+YmVnaW4oKTsg
ZGJOYW1lTWFwSXQgIT0gZGJOYW1lTWFwRW5kSXQ7ICsrZGJOYW1lTWFwSXQpIHsKLSAgICAgICAg
RGF0YWJhc2VTZXQqIGRhdGFiYXNlU2V0ID0gZGJOYW1lTWFwSXQtPnNlY29uZDsKKyAgICAgICAg
RGF0YWJhc2VTZXQqIGRhdGFiYXNlU2V0ID0gZGJOYW1lTWFwSXQtPnZhbHVlOwogICAgICAgICBE
YXRhYmFzZVNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gZGF0YWJhc2VTZXQtPmVuZCgpOwogICAg
ICAgICBmb3IgKERhdGFiYXNlU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IGRhdGFiYXNlU2V0LT5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIGlmICgoKml0KS0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpID09IGNvbnRleHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL1F1b3RhVHJhY2tlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL1F1b3RhVHJhY2tlci5jcHAKaW5k
ZXggMTBiMDhhMmI3MjNjZGEyOTIwZDQzZGVmYTE4YzMxMTVlZmExYjIyOC4uM2YyNDJhMjIxNTI3
MGRhZTZmZWRkODcxZWE2MDM2NTJiNWQyMjlkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJkYXRhYmFzZS9jaHJvbWl1bS9RdW90YVRyYWNrZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvY2hyb21pdW0vUXVvdGFUcmFja2VyLmNwcApA
QCAtNTMsOCArNTMsOCBAQCB2b2lkIFF1b3RhVHJhY2tlcjo6Z2V0RGF0YWJhc2VTaXplQW5kU3Bh
Y2VBdmFpbGFibGVUb09yaWdpbigKICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGEobV9kYXRh
R3VhcmQpOwogICAgICAgICBBU1NFUlQobV9kYXRhYmFzZVNpemVzLmNvbnRhaW5zKG9yaWdpbklk
ZW50aWZpZXIpKTsKICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFNpemVNYXA+Ojpjb25zdF9pdGVy
YXRvciBpdCA9IG1fZGF0YWJhc2VTaXplcy5maW5kKG9yaWdpbklkZW50aWZpZXIpOwotICAgICAg
ICBBU1NFUlQoaXQtPnNlY29uZC5jb250YWlucyhkYXRhYmFzZU5hbWUpKTsKLSAgICAgICAgKmRh
dGFiYXNlU2l6ZSA9IGl0LT5zZWNvbmQuZ2V0KGRhdGFiYXNlTmFtZSk7CisgICAgICAgIEFTU0VS
VChpdC0+dmFsdWUuY29udGFpbnMoZGF0YWJhc2VOYW1lKSk7CisgICAgICAgICpkYXRhYmFzZVNp
emUgPSBpdC0+dmFsdWUuZ2V0KGRhdGFiYXNlTmFtZSk7CiAKICAgICAgICAgaWYgKG1fc3BhY2VB
dmFpbGFibGVUb09yaWdpbnMuY29udGFpbnMob3JpZ2luSWRlbnRpZmllcikpIHsKICAgICAgICAg
ICAgICpzcGFjZUF2YWlsYWJsZSA9IG1fc3BhY2VBdmFpbGFibGVUb09yaWdpbnMuZ2V0KG9yaWdp
bklkZW50aWZpZXIpOwpAQCAtNzIsNyArNzIsNyBAQCB2b2lkIFF1b3RhVHJhY2tlcjo6dXBkYXRl
RGF0YWJhc2VTaXplKAogewogICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhKG1fZGF0YUd1YXJkKTsK
ICAgICBIYXNoTWFwPFN0cmluZywgU2l6ZU1hcD46Oml0ZXJhdG9yIGl0ID0gbV9kYXRhYmFzZVNp
emVzLmFkZChvcmlnaW5JZGVudGlmaWVyLCBTaXplTWFwKCkpLml0ZXJhdG9yOwotICAgIGl0LT5z
ZWNvbmQuc2V0KGRhdGFiYXNlTmFtZSwgZGF0YWJhc2VTaXplKTsKKyAgICBpdC0+dmFsdWUuc2V0
KGRhdGFiYXNlTmFtZSwgZGF0YWJhc2VTaXplKTsKIH0KIAogdm9pZCBRdW90YVRyYWNrZXI6OnVw
ZGF0ZVNwYWNlQXZhaWxhYmxlVG9PcmlnaW4oY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVy
LCB1bnNpZ25lZCBsb25nIGxvbmcgc3BhY2VBdmFpbGFibGUpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0RGVmbGF0ZUZyYW1lci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0RGVmbGF0ZUZyYW1lci5j
cHAKaW5kZXggNzZjMDQwZDFjOTM3MmFiNzBlMjI2NDYwYTg3ZDJhNTVmMmM4OGZmMC4uNjdiYjNk
YWExMjk5ODg0NTExMTA2OTBlMTkyZWEwZGEwMDc2NmNkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldERlZmxhdGVGcmFtZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXREZWZsYXRlRnJhbWVy
LmNwcApAQCAtODcsNyArODcsNyBAQCBib29sIFdlYlNvY2tldEV4dGVuc2lvbkRlZmxhdGVGcmFt
ZTo6cHJvY2Vzc1Jlc3BvbnNlKGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbgogICAgIGludCB3
aW5kb3dCaXRzID0gMTU7CiAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJh
dG9yIHBhcmFtZXRlciA9IHNlcnZlclBhcmFtZXRlcnMuZmluZCgibWF4X3dpbmRvd19iaXRzIik7
CiAgICAgaWYgKHBhcmFtZXRlciAhPSBzZXJ2ZXJQYXJhbWV0ZXJzLmVuZCgpKSB7Ci0gICAgICAg
IHdpbmRvd0JpdHMgPSBwYXJhbWV0ZXItPnNlY29uZC50b0ludCgpOworICAgICAgICB3aW5kb3dC
aXRzID0gcGFyYW1ldGVyLT52YWx1ZS50b0ludCgpOwogICAgICAgICBpZiAod2luZG93Qml0cyA8
IDggfHwgd2luZG93Qml0cyA+IDE1KSB7CiAgICAgICAgICAgICBtX2ZhaWx1cmVSZWFzb24gPSAi
UmVjZWl2ZWQgaW52YWxpZCBtYXhfd2luZG93X2JpdHMgcGFyYW1ldGVyIjsKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKQEAgLTk4LDcgKzk4LDcgQEAgYm9vbCBXZWJTb2NrZXRFeHRlbnNpb25E
ZWZsYXRlRnJhbWU6OnByb2Nlc3NSZXNwb25zZShjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW4K
ICAgICBXZWJTb2NrZXREZWZsYXRlcjo6Q29udGV4dFRha2VPdmVyTW9kZSBtb2RlID0gV2ViU29j
a2V0RGVmbGF0ZXI6OlRha2VPdmVyQ29udGV4dDsKICAgICBwYXJhbWV0ZXIgPSBzZXJ2ZXJQYXJh
bWV0ZXJzLmZpbmQoIm5vX2NvbnRleHRfdGFrZW92ZXIiKTsKICAgICBpZiAocGFyYW1ldGVyICE9
IHNlcnZlclBhcmFtZXRlcnMuZW5kKCkpIHsKLSAgICAgICAgaWYgKCFwYXJhbWV0ZXItPnNlY29u
ZC5pc051bGwoKSkgeworICAgICAgICBpZiAoIXBhcmFtZXRlci0+dmFsdWUuaXNOdWxsKCkpIHsK
ICAgICAgICAgICAgIG1fZmFpbHVyZVJlYXNvbiA9ICJSZWNlaXZlZCBpbnZhbGlkIG5vX2NvbnRl
eHRfdGFrZW92ZXIgcGFyYW1ldGVyIjsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNv
Y2tldEV4dGVuc2lvbkRpc3BhdGNoZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJz
b2NrZXRzL1dlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXIuY3BwCmluZGV4IDdjNTkyYWQxYmYy
ODA2OGM4MzAzMzY5YjYwNjU2NzNiNmJhN2U5NzQuLjU2MDlmNjU4MWFhYjk3NDJiMGZkODVmZjE1
ZDE1ZmE1MGVkMjlmNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29j
a2V0cy9XZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0RXh0ZW5zaW9uRGlzcGF0Y2hlci5jcHAKQEAg
LTE4MSwxMCArMTgxLDEwIEBAIHZvaWQgV2ViU29ja2V0RXh0ZW5zaW9uRGlzcGF0Y2hlcjo6YXBw
ZW5kQWNjZXB0ZWRFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBleHRlbnNpCiAgICAgLy8gRklYTUU6
IFNob3VsZCB1c2UgTGlzdEhhc2hTZXQgdG8ga2VlcCB0aGUgb3JkZXIgb2YgdGhlIHBhcmFtZXRl
cnMuCiAgICAgZm9yIChIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXRl
cmF0b3IgPSBleHRlbnNpb25QYXJhbWV0ZXJzLmJlZ2luKCk7IGl0ZXJhdG9yICE9IGV4dGVuc2lv
blBhcmFtZXRlcnMuZW5kKCk7ICsraXRlcmF0b3IpIHsKICAgICAgICAgbV9hY2NlcHRlZEV4dGVu
c2lvbnNCdWlsZGVyLmFwcGVuZCgiOyAiKTsKLSAgICAgICAgbV9hY2NlcHRlZEV4dGVuc2lvbnNC
dWlsZGVyLmFwcGVuZChpdGVyYXRvci0+Zmlyc3QpOwotICAgICAgICBpZiAoIWl0ZXJhdG9yLT5z
ZWNvbmQuaXNOdWxsKCkpIHsKKyAgICAgICAgbV9hY2NlcHRlZEV4dGVuc2lvbnNCdWlsZGVyLmFw
cGVuZChpdGVyYXRvci0+a2V5KTsKKyAgICAgICAgaWYgKCFpdGVyYXRvci0+dmFsdWUuaXNOdWxs
KCkpIHsKICAgICAgICAgICAgIG1fYWNjZXB0ZWRFeHRlbnNpb25zQnVpbGRlci5hcHBlbmQoIj0i
KTsKLSAgICAgICAgICAgIG1fYWNjZXB0ZWRFeHRlbnNpb25zQnVpbGRlci5hcHBlbmQoaXRlcmF0
b3ItPnNlY29uZCk7CisgICAgICAgICAgICBtX2FjY2VwdGVkRXh0ZW5zaW9uc0J1aWxkZXIuYXBw
ZW5kKGl0ZXJhdG9yLT52YWx1ZSk7CiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAppbmRleCBjZmU2ZDhlMmUyYjg5
ZTJlY2I4ZjlmYzE1ZDhkNmI1MzY1YzQ3YjhmLi5lZWUxMDk2MWIxNmQ3ZDdlYjYxODYxZmJmMWM2
ZDY5YzBlZWFmYjc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FY
T2JqZWN0Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmpl
Y3RDYWNoZS5jcHAKQEAgLTkzLDcgKzkzLDcgQEAgQVhPYmplY3RDYWNoZTo6fkFYT2JqZWN0Q2Fj
aGUoKQogewogICAgIEhhc2hNYXA8QVhJRCwgUmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+ID46
Oml0ZXJhdG9yIGVuZCA9IG1fb2JqZWN0cy5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8QVhJRCwg
UmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+ID46Oml0ZXJhdG9yIGl0ID0gbV9vYmplY3RzLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBv
YmogPSAoKml0KS5zZWNvbmQuZ2V0KCk7CisgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG9i
aiA9ICgqaXQpLnZhbHVlLmdldCgpOwogICAgICAgICBkZXRhY2hXcmFwcGVyKG9iaik7CiAgICAg
ICAgIG9iai0+ZGV0YWNoKCk7CiAgICAgICAgIHJlbW92ZUFYSUQob2JqKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvRE9NT2JqZWN0Q2FjaGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9ET01PYmplY3RDYWNoZS5jcHAKaW5kZXggMmU3
ZjEwNmU3OWUzMWM3MzE1NGFiOWNmYWExOWE1ODllOWRlN2RkNS4uZGQ3ZDA0OTcxOGM4MTIyZjI0
YjM4ZGI4ODNlNWI2YjY0ZTJlYzA2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvZ29iamVjdC9ET01PYmplY3RDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvZ29iamVjdC9ET01PYmplY3RDYWNoZS5jcHAKQEAgLTc0LDcgKzc0LDcgQEAgdm9pZCBET01P
YmplY3RDYWNoZTo6Y2xlYXJCeUZyYW1lKFdlYkNvcmU6OkZyYW1lKiBmcmFtZSkKICAgICAvLyBp
dGVyYXRpbmcgdGhlIGNhY2hlIGl0c2VsZi4KICAgICBET01PYmplY3RNYXA6Oml0ZXJhdG9yIGVu
ZCA9IGRvbU9iamVjdHMoKS5lbmQoKTsKICAgICBmb3IgKERPTU9iamVjdE1hcDo6aXRlcmF0b3Ig
aXRlciA9IGRvbU9iamVjdHMoKS5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0gICAg
ICAgIERPTU9iamVjdENhY2hlRGF0YSogZGF0YSA9IGl0ZXItPnNlY29uZDsKKyAgICAgICAgRE9N
T2JqZWN0Q2FjaGVEYXRhKiBkYXRhID0gaXRlci0+dmFsdWU7CiAgICAgICAgIEFTU0VSVChkYXRh
KTsKICAgICAgICAgaWYgKCghZnJhbWUgfHwgZGF0YS0+ZnJhbWUgPT0gZnJhbWUpICYmIGRhdGEt
PnRpbWVzUmV0dXJuZWQpCiAgICAgICAgICAgICB0b1VucmVmLmFwcGVuZChkYXRhKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTU9iamVjdEhhc2hUYWJsZU1hcC5o
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NT2JqZWN0SGFzaFRhYmxlTWFwLmgKaW5k
ZXggMjE2Yjk0NWM0OWI5MTFlM2Y0NWVmZTVhN2U0YzEzMjk2ZjMwZWIxYi4uZWRkODcwMjI5Y2Jk
ZjYzZDkxOWJhODU5Y2VlYTVkOWM0MTkzYzYxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvRE9NT2JqZWN0SGFzaFRhYmxlTWFwLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvRE9NT2JqZWN0SGFzaFRhYmxlTWFwLmgKQEAgLTM5LDE1ICszOSwxNSBAQCBw
dWJsaWM6CiAgICAgfkRPTU9iamVjdEhhc2hUYWJsZU1hcCgpCiAgICAgewogICAgICAgICBmb3Ig
KEhhc2hNYXA8Y29uc3QgSlNDOjpIYXNoVGFibGUqLCBKU0M6Okhhc2hUYWJsZT46Oml0ZXJhdG9y
IGl0ZXIgPSBtX21hcC5iZWdpbigpOyBpdGVyICE9IG1fbWFwLmVuZCgpOyArK2l0ZXIpCi0gICAg
ICAgICAgICBpdGVyLT5zZWNvbmQuZGVsZXRlVGFibGUoKTsKKyAgICAgICAgICAgIGl0ZXItPnZh
bHVlLmRlbGV0ZVRhYmxlKCk7CiAgICAgfQogCiAgICAgY29uc3QgSlNDOjpIYXNoVGFibGUqIGdl
dChjb25zdCBKU0M6Okhhc2hUYWJsZSogc3RhdGljVGFibGUpCiAgICAgewogICAgICAgICBIYXNo
TWFwPGNvbnN0IEpTQzo6SGFzaFRhYmxlKiwgSlNDOjpIYXNoVGFibGU+OjppdGVyYXRvciBpdGVy
ID0gbV9tYXAuZmluZChzdGF0aWNUYWJsZSk7CiAgICAgICAgIGlmIChpdGVyICE9IG1fbWFwLmVu
ZCgpKQotICAgICAgICAgICAgcmV0dXJuICZpdGVyLT5zZWNvbmQ7Ci0gICAgICAgIHJldHVybiAm
bV9tYXAuc2V0KHN0YXRpY1RhYmxlLCBKU0M6Okhhc2hUYWJsZSgqc3RhdGljVGFibGUpKS5pdGVy
YXRvci0+c2Vjb25kOworICAgICAgICAgICAgcmV0dXJuICZpdGVyLT52YWx1ZTsKKyAgICAgICAg
cmV0dXJuICZtX21hcC5zZXQoc3RhdGljVGFibGUsIEpTQzo6SGFzaFRhYmxlKCpzdGF0aWNUYWJs
ZSkpLml0ZXJhdG9yLT52YWx1ZTsKICAgICB9CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01XcmFwcGVyV29ybGQuY3BwIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvRE9NV3JhcHBlcldvcmxkLmNwcAppbmRleCA4MTI1NDliYzM2MTk1YTc3
NWVkNmE5NGMzOTAwOWQzMjk1ZmUxMTE5Li4zMTY0MWQ1OTYyYzI1MWQ2ODRhOWM2YzgwMTRhMmM4
NDZmNzZkZjE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01XcmFw
cGVyV29ybGQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTVdyYXBwZXJX
b3JsZC5jcHAKQEAgLTM0LDcgKzM0LDcgQEAgdm9pZCBKU1N0cmluZ093bmVyOjpmaW5hbGl6ZShK
U0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCogY29udGV4dCkKIHsKICAgICBK
U1N0cmluZyoganNTdHJpbmcgPSBzdGF0aWNfY2FzdDxKU1N0cmluZyo+KGhhbmRsZS5nZXQoKS5h
c0NlbGwoKSk7CiAgICAgU3RyaW5nSW1wbCogc3RyaW5nSW1wbCA9IHN0YXRpY19jYXN0PFN0cmlu
Z0ltcGwqPihjb250ZXh0KTsKLSAgICBBU1NFUlRfVU5VU0VEKGpzU3RyaW5nLCBtX3dvcmxkLT5t
X3N0cmluZ0NhY2hlLmZpbmQoc3RyaW5nSW1wbCktPnNlY29uZC5nZXQoKSA9PSBqc1N0cmluZyk7
CisgICAgQVNTRVJUX1VOVVNFRChqc1N0cmluZywgbV93b3JsZC0+bV9zdHJpbmdDYWNoZS5maW5k
KHN0cmluZ0ltcGwpLT52YWx1ZS5nZXQoKSA9PSBqc1N0cmluZyk7CiAgICAgbV93b3JsZC0+bV9z
dHJpbmdDYWNoZS5yZW1vdmUoc3RyaW5nSW1wbCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCmluZGV4IGMxMWY2MDEwMzhhNjYwMDY5YmFhNWQ5OTI2
Y2MyNWQyYmVkMDQ4NmMuLjk0NzBjNDQ0MWExMjRlMmI3YjI1ODA5MTllY2UzN2MzOGY5N2VhOWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcApAQCAtMjU4
LDcgKzI1OCw3IEBAIFN0cnVjdHVyZSogY2FjaGVET01TdHJ1Y3R1cmUoSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1CiB7CiAgICAgSlNET01TdHJ1Y3R1
cmVNYXAmIHN0cnVjdHVyZXMgPSBnbG9iYWxPYmplY3QtPnN0cnVjdHVyZXMoKTsKICAgICBBU1NF
UlQoIXN0cnVjdHVyZXMuY29udGFpbnMoY2xhc3NJbmZvKSk7Ci0gICAgcmV0dXJuIHN0cnVjdHVy
ZXMuc2V0KGNsYXNzSW5mbywgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4oZ2xvYmFsT2JqZWN0LT5n
bG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKSkuaXRlcmF0b3ItPnNlY29uZC5n
ZXQoKTsKKyAgICByZXR1cm4gc3RydWN0dXJlcy5zZXQoY2xhc3NJbmZvLCBXcml0ZUJhcnJpZXI8
U3RydWN0dXJlPihnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LCBzdHJ1
Y3R1cmUpKS5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7CiB9CiAKIEpTQzo6SlNPYmplY3QqIHRvSlNT
ZXF1ZW5jZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkJiBsZW5ndGgp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCmluZGV4IDdlZWJjNzdk
NDAxMWI4NDI4ZTFhMzdkZGI4YmM0OTQ2YjNmN2VmYTUuLmFkNGI4ZmUzYzI1MTIzYWFkYjEzMDM4
OTZlZjljMDRhOWQ5ODgxYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NQmluZGluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmlu
ZGluZy5oCkBAIC0xNTAsNyArMTUwLDcgQEAgZW51bSBQYXJhbWV0ZXJEZWZhdWx0UG9saWN5IHsK
ICAgICB7CiAgICAgICAgIGlmIChjbGVhcklubGluZUNhY2hlZFdyYXBwZXIod29ybGQsIGRvbU9i
amVjdCwgd3JhcHBlcikpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEFTU0VSVCh3b3Js
ZC0+bV93cmFwcGVycy5maW5kKGRvbU9iamVjdCktPnNlY29uZC5nZXQoKSA9PSB3cmFwcGVyKTsK
KyAgICAgICAgQVNTRVJUKHdvcmxkLT5tX3dyYXBwZXJzLmZpbmQoZG9tT2JqZWN0KS0+dmFsdWUu
Z2V0KCkgPT0gd3JhcHBlcik7CiAgICAgICAgIHdvcmxkLT5tX3dyYXBwZXJzLnJlbW92ZShkb21P
YmplY3QpOwogICAgIH0KICAgICAKQEAgLTM0OSw3ICszNDksNyBAQCBlbnVtIFBhcmFtZXRlckRl
ZmF1bHRQb2xpY3kgewogICAgICAgICBKU1N0cmluZ0NhY2hlJiBzdHJpbmdDYWNoZSA9IGN1cnJl
bnRXb3JsZChleGVjKS0+bV9zdHJpbmdDYWNoZTsKICAgICAgICAgSlNTdHJpbmdDYWNoZTo6aXRl
cmF0b3IgaXQgPSBzdHJpbmdDYWNoZS5maW5kKHN0cmluZ0ltcGwpOwogICAgICAgICBpZiAoaXQg
IT0gc3RyaW5nQ2FjaGUuZW5kKCkpCi0gICAgICAgICAgICByZXR1cm4gaXQtPnNlY29uZC5nZXQo
KTsKKyAgICAgICAgICAgIHJldHVybiBpdC0+dmFsdWUuZ2V0KCk7CiAKICAgICAgICAgcmV0dXJu
IGpzU3RyaW5nU2xvd0Nhc2UoZXhlYywgc3RyaW5nQ2FjaGUsIHN0cmluZ0ltcGwpOwogICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcApp
bmRleCAzMWZmYjU0ZDQ1ZmJkYTRhMTY3ZWFiNTQxODMxOTFmYTY4MWI4ODVjLi5lNDA1OGI4YWU3
ZGVhMGIyOTI4ZjU5NTRjZWE3MDhlZGZhMTA5ZWVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwCkBAIC04OCwxMSArODgsMTEgQEAgdm9p
ZCBKU0RPTUdsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQogCiAgICAgSlNET01TdHJ1Y3R1cmVNYXA6Oml0ZXJhdG9yIGVuZCA9IHRo
aXNPYmplY3QtPnN0cnVjdHVyZXMoKS5lbmQoKTsKICAgICBmb3IgKEpTRE9NU3RydWN0dXJlTWFw
OjppdGVyYXRvciBpdCA9IHRoaXNPYmplY3QtPnN0cnVjdHVyZXMoKS5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kKCZpdC0+c2Vjb25kKTsKKyAgICAgICAg
dmlzaXRvci5hcHBlbmQoJml0LT52YWx1ZSk7CiAKICAgICBKU0RPTUNvbnN0cnVjdG9yTWFwOjpp
dGVyYXRvciBlbmQyID0gdGhpc09iamVjdC0+Y29uc3RydWN0b3JzKCkuZW5kKCk7CiAgICAgZm9y
IChKU0RPTUNvbnN0cnVjdG9yTWFwOjppdGVyYXRvciBpdDIgPSB0aGlzT2JqZWN0LT5jb25zdHJ1
Y3RvcnMoKS5iZWdpbigpOyBpdDIgIT0gZW5kMjsgKytpdDIpCi0gICAgICAgIHZpc2l0b3IuYXBw
ZW5kKCZpdDItPnNlY29uZCk7CisgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZpdDItPnZhbHVlKTsK
IAogICAgIGlmICh0aGlzT2JqZWN0LT5tX2luamVjdGVkU2NyaXB0KQogICAgICAgICB2aXNpdG9y
LmFwcGVuZCgmdGhpc09iamVjdC0+bV9pbmplY3RlZFNjcmlwdCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuaAppbmRleCA3NGYzNWIwYjc5MmMxYzA2
MDM3ZDFhZGVmM2IyMzEzNjU4YTkyZGFkLi40OWE5YjFhNjJlZjY3NmQxMTFkNTcxOGRlZGI3MGVk
OWY0ODNiMDUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUds
b2JhbE9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFs
T2JqZWN0LmgKQEAgLTk1LDcgKzk1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBK
U0M6OkpTT2JqZWN0KiBjb25zdHJ1Y3RvciA9IENvbnN0cnVjdG9yQ2xhc3M6OmNyZWF0ZShleGVj
LCBDb25zdHJ1Y3RvckNsYXNzOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBj
b25zdF9jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSwgZ2xvYmFsT2JqZWN0
LT5vYmplY3RQcm90b3R5cGUoKSksIGNvbnN0X2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9i
YWxPYmplY3QpKTsKICAgICAgICAgQVNTRVJUKCFjb25zdF9jYXN0PEpTRE9NR2xvYmFsT2JqZWN0
Kj4oZ2xvYmFsT2JqZWN0KS0+Y29uc3RydWN0b3JzKCkuY29udGFpbnMoJkNvbnN0cnVjdG9yQ2xh
c3M6OnNfaW5mbykpOwogICAgICAgICBKU0M6OldyaXRlQmFycmllcjxKU0M6OkpTT2JqZWN0PiB0
ZW1wOwotICAgICAgICBjb25zdF9jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0
KS0+Y29uc3RydWN0b3JzKCkuYWRkKCZDb25zdHJ1Y3RvckNsYXNzOjpzX2luZm8sIHRlbXApLml0
ZXJhdG9yLT5zZWNvbmQuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LCBjb25z
dHJ1Y3Rvcik7CisgICAgICAgIGNvbnN0X2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxP
YmplY3QpLT5jb25zdHJ1Y3RvcnMoKS5hZGQoJkNvbnN0cnVjdG9yQ2xhc3M6OnNfaW5mbywgdGVt
cCkuaXRlcmF0b3ItPnZhbHVlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdCwg
Y29uc3RydWN0b3IpOwogICAgICAgICByZXR1cm4gY29uc3RydWN0b3I7CiAgICAgfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUGFnZVNjcmlwdERlYnVnU2VydmVyLmNw
cAppbmRleCA2ZGEwODY5Nzg0MTNkMTVlZTBkMGRlNTgyY2Y4YjM1OGJlMDA3MTJjLi40YWE3Y2Ez
MzJhMGJiM2RkODliNGIzZjFkN2U5NjQ4NWI3YTlmZWIwIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHAKQEAgLTg0LDkgKzg0
LDkgQEAgdm9pZCBQYWdlU2NyaXB0RGVidWdTZXJ2ZXI6OmFkZExpc3RlbmVyKFNjcmlwdERlYnVn
TGlzdGVuZXIqIGxpc3RlbmVyLCBQYWdlKiBwYWcKIAogICAgIFBhZ2VMaXN0ZW5lcnNNYXA6OkFk
ZFJlc3VsdCByZXN1bHQgPSBtX3BhZ2VMaXN0ZW5lcnNNYXAuYWRkKHBhZ2UsIDApOwogICAgIGlm
IChyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBu
ZXcgTGlzdGVuZXJTZXQ7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBuZXcgTGlz
dGVuZXJTZXQ7CiAKLSAgICBMaXN0ZW5lclNldCogbGlzdGVuZXJzID0gcmVzdWx0Lml0ZXJhdG9y
LT5zZWNvbmQ7CisgICAgTGlzdGVuZXJTZXQqIGxpc3RlbmVycyA9IHJlc3VsdC5pdGVyYXRvci0+
dmFsdWU7CiAgICAgbGlzdGVuZXJzLT5hZGQobGlzdGVuZXIpOwogCiAgICAgcmVjb21waWxlQWxs
SlNGdW5jdGlvbnNTb29uKCk7CkBAIC0xMDIsNyArMTAyLDcgQEAgdm9pZCBQYWdlU2NyaXB0RGVi
dWdTZXJ2ZXI6OnJlbW92ZUxpc3RlbmVyKFNjcmlwdERlYnVnTGlzdGVuZXIqIGxpc3RlbmVyLCBQ
YWdlKgogICAgIGlmIChpdCA9PSBtX3BhZ2VMaXN0ZW5lcnNNYXAuZW5kKCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIExpc3RlbmVyU2V0KiBsaXN0ZW5lcnMgPSBpdC0+c2Vjb25kOworICAgIExp
c3RlbmVyU2V0KiBsaXN0ZW5lcnMgPSBpdC0+dmFsdWU7CiAgICAgbGlzdGVuZXJzLT5yZW1vdmUo
bGlzdGVuZXIpOwogICAgIGlmIChsaXN0ZW5lcnMtPmlzRW1wdHkoKSkgewogICAgICAgICBtX3Bh
Z2VMaXN0ZW5lcnNNYXAucmVtb3ZlKGl0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdENhY2hlZEZyYW1lRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY3JpcHRDYWNoZWRGcmFtZURhdGEuY3BwCmluZGV4IDIxMDBjNmIwMjYxYjJkZmQy
NWY3M2E0ZDdhYjM5MzlhNWUyMjg2M2QuLmQyNDI2YTIwYmEyYzcyYWE0YzIzZmI1YjIxYjM5MGE4
YWYyNmIyZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENh
Y2hlZEZyYW1lRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0
Q2FjaGVkRnJhbWVEYXRhLmNwcApAQCAtNTMsOCArNTMsOCBAQCBTY3JpcHRDYWNoZWRGcmFtZURh
dGE6OlNjcmlwdENhY2hlZEZyYW1lRGF0YShGcmFtZSogZnJhbWUpCiAKICAgICBTY3JpcHRDb250
cm9sbGVyOjpTaGVsbE1hcDo6aXRlcmF0b3Igd2luZG93U2hlbGxzRW5kID0gd2luZG93U2hlbGxz
LmVuZCgpOwogICAgIGZvciAoU2NyaXB0Q29udHJvbGxlcjo6U2hlbGxNYXA6Oml0ZXJhdG9yIGl0
ZXIgPSB3aW5kb3dTaGVsbHMuYmVnaW4oKTsgaXRlciAhPSB3aW5kb3dTaGVsbHNFbmQ7ICsraXRl
cikgewotICAgICAgICBKU0RPTVdpbmRvdyogd2luZG93ID0gaXRlci0+c2Vjb25kLT53aW5kb3co
KTsKLSAgICAgICAgbV93aW5kb3dzLmFkZChpdGVyLT5maXJzdC5nZXQoKSwgU3Ryb25nPEpTRE9N
V2luZG93Pih3aW5kb3ctPmdsb2JhbERhdGEoKSwgd2luZG93KSk7CisgICAgICAgIEpTRE9NV2lu
ZG93KiB3aW5kb3cgPSBpdGVyLT52YWx1ZS0+d2luZG93KCk7CisgICAgICAgIG1fd2luZG93cy5h
ZGQoaXRlci0+a2V5LmdldCgpLCBTdHJvbmc8SlNET01XaW5kb3c+KHdpbmRvdy0+Z2xvYmFsRGF0
YSgpLCB3aW5kb3cpKTsKICAgICB9CiAKICAgICBzY3JpcHRDb250cm9sbGVyLT5hdHRhY2hEZWJ1
Z2dlcigwKTsKQEAgLTc0LDggKzc0LDggQEAgdm9pZCBTY3JpcHRDYWNoZWRGcmFtZURhdGE6OnJl
c3RvcmUoRnJhbWUqIGZyYW1lKQogCiAgICAgU2NyaXB0Q29udHJvbGxlcjo6U2hlbGxNYXA6Oml0
ZXJhdG9yIHdpbmRvd1NoZWxsc0VuZCA9IHdpbmRvd1NoZWxscy5lbmQoKTsKICAgICBmb3IgKFNj
cmlwdENvbnRyb2xsZXI6OlNoZWxsTWFwOjppdGVyYXRvciBpdGVyID0gd2luZG93U2hlbGxzLmJl
Z2luKCk7IGl0ZXIgIT0gd2luZG93U2hlbGxzRW5kOyArK2l0ZXIpIHsKLSAgICAgICAgRE9NV3Jh
cHBlcldvcmxkKiB3b3JsZCA9IGl0ZXItPmZpcnN0LmdldCgpOwotICAgICAgICBKU0RPTVdpbmRv
d1NoZWxsKiB3aW5kb3dTaGVsbCA9IGl0ZXItPnNlY29uZC5nZXQoKTsKKyAgICAgICAgRE9NV3Jh
cHBlcldvcmxkKiB3b3JsZCA9IGl0ZXItPmtleS5nZXQoKTsKKyAgICAgICAgSlNET01XaW5kb3dT
aGVsbCogd2luZG93U2hlbGwgPSBpdGVyLT52YWx1ZS5nZXQoKTsKIAogICAgICAgICBpZiAoSlNE
T01XaW5kb3cqIHdpbmRvdyA9IG1fd2luZG93cy5nZXQod29ybGQpLmdldCgpKQogICAgICAgICAg
ICAgd2luZG93U2hlbGwtPnNldFdpbmRvdyh3aW5kb3ctPmdsb2JhbERhdGEoKSwgd2luZG93KTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAKaW5k
ZXggNDE0M2Y0NGI1MTRmNjllZGNkYzNiMzBlMzViYzBkNjY5ZDkyNTZkMy4uZTI3ODJlNDY5NGJl
OTViNTRkNTA2MDJmZTdjZGE4ZTYzNTg1ZmQ2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAKQEAgLTkzLDcgKzkzLDcgQEAgU2NyaXB0Q29u
dHJvbGxlcjo6flNjcmlwdENvbnRyb2xsZXIoKQogICAgIC8vIEl0J3MgbGlrZWx5IHRoYXQgZGVz
dHJveWluZyBtX3dpbmRvd1NoZWxscyB3aWxsIGNyZWF0ZSBhIGxvdCBvZiBnYXJiYWdlLgogICAg
IGlmICghbV93aW5kb3dTaGVsbHMuaXNFbXB0eSgpKSB7CiAgICAgICAgIHdoaWxlICghbV93aW5k
b3dTaGVsbHMuaXNFbXB0eSgpKQotICAgICAgICAgICAgZGVzdHJveVdpbmRvd1NoZWxsKG1fd2lu
ZG93U2hlbGxzLmJlZ2luKCktPmZpcnN0LmdldCgpKTsKKyAgICAgICAgICAgIGRlc3Ryb3lXaW5k
b3dTaGVsbChtX3dpbmRvd1NoZWxscy5iZWdpbigpLT5rZXkuZ2V0KCkpOwogICAgICAgICBnY0Nv
bnRyb2xsZXIoKS5nYXJiYWdlQ29sbGVjdFNvb24oKTsKICAgICB9CiB9CkBAIC0xODAsNyArMTgw
LDcgQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpjbGVhcldpbmRvd1NoZWxsKGJvb2wgZ29pbmdJ
bnRvUGFnZUNhY2hlKQogICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAK
ICAgICBmb3IgKFNoZWxsTWFwOjppdGVyYXRvciBpdGVyID0gbV93aW5kb3dTaGVsbHMuYmVnaW4o
KTsgaXRlciAhPSBtX3dpbmRvd1NoZWxscy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIEpTRE9N
V2luZG93U2hlbGwqIHdpbmRvd1NoZWxsID0gaXRlci0+c2Vjb25kLmdldCgpOworICAgICAgICBK
U0RPTVdpbmRvd1NoZWxsKiB3aW5kb3dTaGVsbCA9IGl0ZXItPnZhbHVlLmdldCgpOwogCiAgICAg
ICAgIC8vIENsZWFyIHRoZSBkZWJ1Z2dlciBmcm9tIHRoZSBjdXJyZW50IHdpbmRvdyBiZWZvcmUg
c2V0dGluZyB0aGUgbmV3IHdpbmRvdy4KICAgICAgICAgYXR0YWNoRGVidWdnZXIod2luZG93U2hl
bGwsIDApOwpAQCAtMjU2LDcgKzI1Niw3IEBAIGJvb2wgU2NyaXB0Q29udHJvbGxlcjo6Y2FuQWNj
ZXNzRnJvbUN1cnJlbnRPcmlnaW4oRnJhbWUgKmZyYW1lKQogdm9pZCBTY3JpcHRDb250cm9sbGVy
OjphdHRhY2hEZWJ1Z2dlcihKU0M6OkRlYnVnZ2VyKiBkZWJ1Z2dlcikKIHsKICAgICBmb3IgKFNo
ZWxsTWFwOjppdGVyYXRvciBpdGVyID0gbV93aW5kb3dTaGVsbHMuYmVnaW4oKTsgaXRlciAhPSBt
X3dpbmRvd1NoZWxscy5lbmQoKTsgKytpdGVyKQotICAgICAgICBhdHRhY2hEZWJ1Z2dlcihpdGVy
LT5zZWNvbmQuZ2V0KCksIGRlYnVnZ2VyKTsKKyAgICAgICAgYXR0YWNoRGVidWdnZXIoaXRlci0+
dmFsdWUuZ2V0KCksIGRlYnVnZ2VyKTsKIH0KIAogdm9pZCBTY3JpcHRDb250cm9sbGVyOjphdHRh
Y2hEZWJ1Z2dlcihKU0RPTVdpbmRvd1NoZWxsKiBzaGVsbCwgSlNDOjpEZWJ1Z2dlciogZGVidWdn
ZXIpCkBAIC0yNzgsNyArMjc4LDcgQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjp1cGRhdGVEb2N1
bWVudCgpCiAKICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIGZv
ciAoU2hlbGxNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3dpbmRvd1NoZWxscy5iZWdpbigpOyBpdGVy
ICE9IG1fd2luZG93U2hlbGxzLmVuZCgpOyArK2l0ZXIpCi0gICAgICAgIGl0ZXItPnNlY29uZC0+
d2luZG93KCktPnVwZGF0ZURvY3VtZW50KCk7CisgICAgICAgIGl0ZXItPnZhbHVlLT53aW5kb3co
KS0+dXBkYXRlRG9jdW1lbnQoKTsKIH0KIAogdm9pZCBTY3JpcHRDb250cm9sbGVyOjp1cGRhdGVT
ZWN1cml0eU9yaWdpbigpCkBAIC0zMTQsNyArMzE0LDcgQEAgUGFzc1JlZlB0cjxCaW5kaW5nczo6
Um9vdE9iamVjdD4gU2NyaXB0Q29udHJvbGxlcjo6Y3JlYXRlUm9vdE9iamVjdCh2b2lkKiBuYXRp
dmUKIHsKICAgICBSb290T2JqZWN0TWFwOjppdGVyYXRvciBpdCA9IG1fcm9vdE9iamVjdHMuZmlu
ZChuYXRpdmVIYW5kbGUpOwogICAgIGlmIChpdCAhPSBtX3Jvb3RPYmplY3RzLmVuZCgpKQotICAg
ICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKIAogICAg
IFJlZlB0cjxCaW5kaW5nczo6Um9vdE9iamVjdD4gcm9vdE9iamVjdCA9IEJpbmRpbmdzOjpSb290
T2JqZWN0OjpjcmVhdGUobmF0aXZlSGFuZGxlLCBnbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSkp
OwogCkBAIC0zOTksNyArMzk5LDcgQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpjbGVhbnVwU2Ny
aXB0T2JqZWN0c0ZvclBsdWdpbih2b2lkKiBuYXRpdmVIYW5kbGUpCiAgICAgaWYgKGl0ID09IG1f
cm9vdE9iamVjdHMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGl0LT5zZWNvbmQtPmlu
dmFsaWRhdGUoKTsKKyAgICBpdC0+dmFsdWUtPmludmFsaWRhdGUoKTsKICAgICBtX3Jvb3RPYmpl
Y3RzLnJlbW92ZShpdCk7CiB9CiAKQEAgLTQwOSw3ICs0MDksNyBAQCB2b2lkIFNjcmlwdENvbnRy
b2xsZXI6OmNsZWFyU2NyaXB0T2JqZWN0cygpCiAKICAgICBSb290T2JqZWN0TWFwOjpjb25zdF9p
dGVyYXRvciBlbmQgPSBtX3Jvb3RPYmplY3RzLmVuZCgpOwogICAgIGZvciAoUm9vdE9iamVjdE1h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Jvb3RPYmplY3RzLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+aW52YWxpZGF0ZSgpOworICAgICAgICBpdC0+dmFs
dWUtPmludmFsaWRhdGUoKTsKIAogICAgIG1fcm9vdE9iamVjdHMuY2xlYXIoKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5oIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5oCmluZGV4IDVlMTUxYWFl
MzNmODE2MGUwNmQ0Nzg1YTJkZTlkMDlkYWFhYTgyMWMuLmY2NGY4OTA5YTYwZDczYTFlMmNiZjUw
OTBkZDlhODUwNmMyMGViNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NjcmlwdENvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3Jp
cHRDb250cm9sbGVyLmgKQEAgLTcyLDEyICs3MiwxMiBAQCBwdWJsaWM6CiAgICAgSlNET01XaW5k
b3dTaGVsbCogd2luZG93U2hlbGwoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCkKICAgICB7CiAgICAg
ICAgIFNoZWxsTWFwOjppdGVyYXRvciBpdGVyID0gbV93aW5kb3dTaGVsbHMuZmluZCh3b3JsZCk7
Ci0gICAgICAgIHJldHVybiAoaXRlciAhPSBtX3dpbmRvd1NoZWxscy5lbmQoKSkgPyBpdGVyLT5z
ZWNvbmQuZ2V0KCkgOiBpbml0U2NyaXB0KHdvcmxkKTsKKyAgICAgICAgcmV0dXJuIChpdGVyICE9
IG1fd2luZG93U2hlbGxzLmVuZCgpKSA/IGl0ZXItPnZhbHVlLmdldCgpIDogaW5pdFNjcmlwdCh3
b3JsZCk7CiAgICAgfQogICAgIEpTRE9NV2luZG93U2hlbGwqIGV4aXN0aW5nV2luZG93U2hlbGwo
RE9NV3JhcHBlcldvcmxkKiB3b3JsZCkgY29uc3QKICAgICB7CiAgICAgICAgIFNoZWxsTWFwOjpj
b25zdF9pdGVyYXRvciBpdGVyID0gbV93aW5kb3dTaGVsbHMuZmluZCh3b3JsZCk7Ci0gICAgICAg
IHJldHVybiAoaXRlciAhPSBtX3dpbmRvd1NoZWxscy5lbmQoKSkgPyBpdGVyLT5zZWNvbmQuZ2V0
KCkgOiAwOworICAgICAgICByZXR1cm4gKGl0ZXIgIT0gbV93aW5kb3dTaGVsbHMuZW5kKCkpID8g
aXRlci0+dmFsdWUuZ2V0KCkgOiAwOwogICAgIH0KICAgICBKU0RPTVdpbmRvdyogZ2xvYmFsT2Jq
ZWN0KERPTVdyYXBwZXJXb3JsZCogd29ybGQpCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCmluZGV4IDEwZGVkNzAwNzA3OTQwMjNk
YzdlZDIxMjk5ZmNmYjI0ODYxMjE3ZDAuLjg5NGNkZTJmYzdiMjNjODE4MDg2Yjc0OWQ2N2VkNmVi
ZGZkODFjMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERl
YnVnU2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1
Z1NlcnZlci5jcHAKQEAgLTc2LDkgKzc2LDkgQEAgU3RyaW5nIFNjcmlwdERlYnVnU2VydmVyOjpz
ZXRCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIGNvbnN0IFNjcmlwdEJyZWEKICAg
ICBTb3VyY2VJZFRvQnJlYWtwb2ludHNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zb3VyY2VJZFRvQnJl
YWtwb2ludHMuZmluZChzb3VyY2VJRFZhbHVlKTsKICAgICBpZiAoaXQgPT0gbV9zb3VyY2VJZFRv
QnJlYWtwb2ludHMuZW5kKCkpCiAgICAgICAgIGl0ID0gbV9zb3VyY2VJZFRvQnJlYWtwb2ludHMu
c2V0KHNvdXJjZUlEVmFsdWUsIExpbmVUb0JyZWFrcG9pbnRNYXAoKSkuaXRlcmF0b3I7Ci0gICAg
aWYgKGl0LT5zZWNvbmQuY29udGFpbnMoc2NyaXB0QnJlYWtwb2ludC5saW5lTnVtYmVyICsgMSkp
CisgICAgaWYgKGl0LT52YWx1ZS5jb250YWlucyhzY3JpcHRCcmVha3BvaW50LmxpbmVOdW1iZXIg
KyAxKSkKICAgICAgICAgcmV0dXJuICIiOwotICAgIGl0LT5zZWNvbmQuc2V0KHNjcmlwdEJyZWFr
cG9pbnQubGluZU51bWJlciArIDEsIHNjcmlwdEJyZWFrcG9pbnQpOworICAgIGl0LT52YWx1ZS5z
ZXQoc2NyaXB0QnJlYWtwb2ludC5saW5lTnVtYmVyICsgMSwgc2NyaXB0QnJlYWtwb2ludCk7CiAg
ICAgKmFjdHVhbExpbmVOdW1iZXIgPSBzY3JpcHRCcmVha3BvaW50LmxpbmVOdW1iZXI7CiAgICAg
Ly8gRklYTUUoV0s1MzAwMyk6IGltcGxlbWVudCBzZXR0aW5nIGJyZWFrcG9pbnRzIGJ5IGxpbmU6
Y29sdW1uLgogICAgICphY3R1YWxDb2x1bW5OdW1iZXIgPSAwOwpAQCAtMTAwLDcgKzEwMCw3IEBA
IHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnJlbW92ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBi
cmVha3BvaW50SWQpCiAgICAgICAgIHJldHVybjsKICAgICBTb3VyY2VJZFRvQnJlYWtwb2ludHNN
YXA6Oml0ZXJhdG9yIGl0ID0gbV9zb3VyY2VJZFRvQnJlYWtwb2ludHMuZmluZChzb3VyY2VJRFZh
bHVlKTsKICAgICBpZiAoaXQgIT0gbV9zb3VyY2VJZFRvQnJlYWtwb2ludHMuZW5kKCkpCi0gICAg
ICAgIGl0LT5zZWNvbmQucmVtb3ZlKGxpbmVOdW1iZXIgKyAxKTsKKyAgICAgICAgaXQtPnZhbHVl
LnJlbW92ZShsaW5lTnVtYmVyICsgMSk7CiB9CiAKIGJvb2wgU2NyaXB0RGVidWdTZXJ2ZXI6Omhh
c0JyZWFrcG9pbnQoaW50cHRyX3Qgc291cmNlSUQsIGNvbnN0IFRleHRQb3NpdGlvbiYgcG9zaXRp
b24pIGNvbnN0CkBAIC0xMTQsMTYgKzExNCwxNiBAQCBib29sIFNjcmlwdERlYnVnU2VydmVyOjpo
YXNCcmVha3BvaW50KGludHB0cl90IHNvdXJjZUlELCBjb25zdCBUZXh0UG9zaXRpb24mIHBvcwog
ICAgIGludCBsaW5lTnVtYmVyID0gcG9zaXRpb24ubV9saW5lLm9uZUJhc2VkSW50KCk7CiAgICAg
aWYgKGxpbmVOdW1iZXIgPD0gMCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIExpbmVUb0Jy
ZWFrcG9pbnRNYXA6OmNvbnN0X2l0ZXJhdG9yIGJyZWFrSXQgPSBpdC0+c2Vjb25kLmZpbmQobGlu
ZU51bWJlcik7Ci0gICAgaWYgKGJyZWFrSXQgPT0gaXQtPnNlY29uZC5lbmQoKSkKKyAgICBMaW5l
VG9CcmVha3BvaW50TWFwOjpjb25zdF9pdGVyYXRvciBicmVha0l0ID0gaXQtPnZhbHVlLmZpbmQo
bGluZU51bWJlcik7CisgICAgaWYgKGJyZWFrSXQgPT0gaXQtPnZhbHVlLmVuZCgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBBbiBlbXB0eSBjb25kaXRpb24gY291bnRzIGFzIG5v
IGNvbmRpdGlvbiB3aGljaCBpcyBlcXVpdmFsZW50IHRvICJ0cnVlIi4KLSAgICBpZiAoYnJlYWtJ
dC0+c2Vjb25kLmNvbmRpdGlvbi5pc0VtcHR5KCkpCisgICAgaWYgKGJyZWFrSXQtPnZhbHVlLmNv
bmRpdGlvbi5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgSlNWYWx1ZSBl
eGNlcHRpb247Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBtX2N1cnJlbnRDYWxsRnJhbWUtPmV2YWx1
YXRlKHN0cmluZ1RvVVN0cmluZyhicmVha0l0LT5zZWNvbmQuY29uZGl0aW9uKSwgZXhjZXB0aW9u
KTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IG1fY3VycmVudENhbGxGcmFtZS0+ZXZhbHVhdGUoc3Ry
aW5nVG9VU3RyaW5nKGJyZWFrSXQtPnZhbHVlLmNvbmRpdGlvbiksIGV4Y2VwdGlvbik7CiAgICAg
aWYgKGV4Y2VwdGlvbikgewogICAgICAgICAvLyBBbiBlcnJvbmVvdXMgY29uZGl0aW9uIGNvdW50
cyBhcyAiZmFsc2UiLgogICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAppbmRleCA3YWMxNTVj
Y2U2Y2MyYTRkZDlhYjdiYWM3N2QxNTA5NDhlYWZjMDAwLi43MjVlNjk4NDRmYmFmMWRmMTY4YjMz
ZGJlYmVjYjkwNzRiMDI1M2UwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKQEAgLTM5Nyw4ICszOTcsOCBAQCBwcml2YXRl
OgogICAgICAgICAvLyBIYW5kbGUgZHVwbGljYXRlIHJlZmVyZW5jZXMKICAgICAgICAgaWYgKCFh
ZGRSZXN1bHQuaXNOZXdFbnRyeSkgewogICAgICAgICAgICAgd3JpdGUoT2JqZWN0UmVmZXJlbmNl
VGFnKTsKLSAgICAgICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQzMl90PihhZGRSZXN1bHQu
aXRlcmF0b3ItPnNlY29uZCkgPCBtX29iamVjdFBvb2wuc2l6ZSgpKTsKLSAgICAgICAgICAgIHdy
aXRlT2JqZWN0SW5kZXgoYWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOworICAgICAgICAgICAg
QVNTRVJUKHN0YXRpY19jYXN0PGludDMyX3Q+KGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUpIDwg
bV9vYmplY3RQb29sLnNpemUoKSk7CisgICAgICAgICAgICB3cml0ZU9iamVjdEluZGV4KGFkZFJl
c3VsdC5pdGVyYXRvci0+dmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICB9CiAgICAgICAgIApAQCAtNjE4LDcgKzYxOCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgT2JqZWN0UG9vbDo6aXRlcmF0b3IgaW5kZXggPSBtX3RyYW5zZmVycmVkTWVzc2FnZVBvcnRz
LmZpbmQob2JqKTsKICAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT0gbV90cmFuc2ZlcnJlZE1l
c3NhZ2VQb3J0cy5lbmQoKSkgewogICAgICAgICAgICAgICAgICAgICB3cml0ZShNZXNzYWdlUG9y
dFJlZmVyZW5jZVRhZyk7Ci0gICAgICAgICAgICAgICAgICAgIHdyaXRlKGluZGV4LT5zZWNvbmQp
OworICAgICAgICAgICAgICAgICAgICB3cml0ZShpbmRleC0+dmFsdWUpOwogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtNjMyLDcgKzYzMiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgT2JqZWN0UG9vbDo6aXRlcmF0b3IgaW5kZXggPSBtX3RyYW5zZmVycmVkQXJyYXlCdWZmZXJz
LmZpbmQob2JqKTsKICAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT0gbV90cmFuc2ZlcnJlZEFy
cmF5QnVmZmVycy5lbmQoKSkgewogICAgICAgICAgICAgICAgICAgICB3cml0ZShBcnJheUJ1ZmZl
clRyYW5zZmVyVGFnKTsKLSAgICAgICAgICAgICAgICAgICAgd3JpdGUoaW5kZXgtPnNlY29uZCk7
CisgICAgICAgICAgICAgICAgICAgIHdyaXRlKGluZGV4LT52YWx1ZSk7CiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBp
ZiAoIXN0YXJ0T2JqZWN0SW50ZXJuYWwob2JqKSkgLy8gaGFuZGxlIGR1cGxpY2F0ZXMKQEAgLTcy
OSw3ICs3MjksNyBAQCBwcml2YXRlOgogICAgICAgICBTdHJpbmdDb25zdGFudFBvb2w6OkFkZFJl
c3VsdCBhZGRSZXN1bHQgPSBtX2NvbnN0YW50UG9vbC5hZGQoc3RyLmltcGwoKSwgbV9jb25zdGFu
dFBvb2wuc2l6ZSgpKTsKICAgICAgICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSkgewogICAg
ICAgICAgICAgd3JpdGUoU3RyaW5nUG9vbFRhZyk7Ci0gICAgICAgICAgICB3cml0ZVN0cmluZ0lu
ZGV4KGFkZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKKyAgICAgICAgICAgIHdyaXRlU3RyaW5n
SW5kZXgoYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9yVjgucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JWOC5wbQppbmRleCBhODFmYTQ2NDlkODg4MjgwYmUwYTNhMmYyMGRmMzM5M2NlNjUz
ZWQwLi5kNjNhOGVlYzY4ZmI2NjgzOTg3ODdlYTZhOTk3ZjE3MjhjODQ5YTNjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQpAQCAt
Mjc5MSw3ICsyNzkxLDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+ICR7
Y2xhc3NOYW1lfTo6R2V0UmF3VGVtcGxhdGUoKQogICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRh
KiBkYXRhID0gVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOEJpbmRp
bmdQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnJh
d1RlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT5yYXdU
ZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAg
ICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNj
b3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9IGNy
ZWF0ZVJhd1RlbXBsYXRlKCk7CkBAIC0yODA0LDcgKzI4MDQsNyBAQCB2ODo6UGVyc2lzdGVudDx2
ODo6RnVuY3Rpb25UZW1wbGF0ZT4gJHtjbGFzc05hbWV9OjpHZXRUZW1wbGF0ZSgpCiAgICAgVjhC
aW5kaW5nUGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6Y3Vy
cmVudCgpOwogICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0
b3IgcmVzdWx0ID0gZGF0YS0+dGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVz
dWx0ICE9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQt
PnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxl
U2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxh
dGU+IHRlbXBsID0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOEZsb2F0NjRBcnJheS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVjgvVjhGbG9hdDY0QXJyYXkuY3BwCmluZGV4IDdhMzY5N2JiZjYwZjlmZmE2YmFh
MTdjYmRkZTU0MzQ4NjEyZGQyMTIuLmRiZmFjMDE3YjNjN2Q4MjIxZGRmYmVhY2I2MTA4NDcwNGEx
ZTBjY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9W
OC9WOEZsb2F0NjRBcnJheS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Y4L1Y4RmxvYXQ2NEFycmF5LmNwcApAQCAtOTIsNyArOTIsNyBAQCB2ODo6UGVyc2lz
dGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhGbG9hdDY0QXJyYXk6OkdldFJhd1RlbXBsYXRl
KCkKICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4QmluZGluZ1Blcklzb2xh
dGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OlRlbXBsYXRl
TWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8p
OwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAg
ICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsK
IAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2
ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPSBjcmVhdGVSYXdUZW1wbGF0ZSgpOwpAQCAtMTA1
LDcgKzEwNSw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOEZsb2F0
NjRBcnJheTo6R2V0VGVtcGxhdGUoKQogICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhKiBkYXRh
ID0gVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOEJpbmRpbmdQZXJJ
c29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnRlbXBsYXRl
TWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT50ZW1wbGF0ZU1hcCgp
LmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBy
ZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4
OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0QWN0aXZlRE9NT2Jq
ZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RB
Y3RpdmVET01PYmplY3QuY3BwCmluZGV4IDZmNWU4ZTdkYjRiYzA4ZWYxY2M3ZWYwOWEyNjdmM2Vh
NjNhNDYwOGYuLjEyODYwYjUzNzIxNjQwM2FjM2M3ZDdmNjUxNzQ0NmQ0YjU1MTRiYzggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RBY3Rp
dmVET01PYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9WOC9WOFRlc3RBY3RpdmVET01PYmplY3QuY3BwCkBAIC0xMzAsNyArMTMwLDcgQEAgdjg6OlBl
cnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdEFjdGl2ZURPTU9iamVjdDo6R2V0
UmF3VGVtcGxhdGUoKQogICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhKiBkYXRhID0gVjhCaW5k
aW5nUGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0
YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCku
ZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmVu
ZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1
bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQ
ZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9IGNyZWF0ZVJhd1RlbXBsYXRl
KCk7CkBAIC0xNDMsNyArMTQzLDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxh
dGU+IFY4VGVzdEFjdGl2ZURPTU9iamVjdDo6R2V0VGVtcGxhdGUoKQogICAgIFY4QmluZGluZ1Bl
cklzb2xhdGVEYXRhKiBkYXRhID0gVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsK
ICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3Vs
dCA9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBk
YXRhLT50ZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7
CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhh
bmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1w
bCA9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgv
VjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Y4L1Y4VGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcAppbmRleCA0Y2ZkNTM0NjUx
MzAyZGViMzU5NTVlM2E5NDk0ZWQ4NTI1ZTE2NmM3Li5hNGM2MDgyNTViNTkxNjE5NTA5MDZiOTFl
ZDA1ZGY3MzdlMzhlMGY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVjgvVjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RDdXN0b21OYW1lZEdldHRlci5jcHAK
QEAgLTgyLDcgKzgyLDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4
VGVzdEN1c3RvbU5hbWVkR2V0dGVyOjpHZXRSYXdUZW1wbGF0ZSgpCiAgICAgVjhCaW5kaW5nUGVy
SXNvbGF0ZURhdGEqIGRhdGEgPSBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwog
ICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0
ID0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9
IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNl
Y29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2Nv
cGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+
IHRlbXBsID0gY3JlYXRlUmF3VGVtcGxhdGUoKTsKQEAgLTk1LDcgKzk1LDcgQEAgdjg6OlBlcnNp
c3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdEN1c3RvbU5hbWVkR2V0dGVyOjpHZXRU
ZW1wbGF0ZSgpCiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOEJpbmRpbmdQ
ZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpU
ZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+dGVtcGxhdGVNYXAoKS5maW5kKCZp
bmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAg
ICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7
CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8
djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudENvbnN0cnVjdG9yLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudENvbnN0cnVj
dG9yLmNwcAppbmRleCA5MTlkMWZmY2Y2MDVhMzc5OTMxY2ViNTZiNDBlOGRlZjlmNzEwZGJjLi5l
NWNmMjVmOGFlZTk4YWFkZTA5MmU0ZWNlZDIzNmU4ODI1ZjJkN2ExIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRDb25zdHJ1Y3Rv
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVz
dEV2ZW50Q29uc3RydWN0b3IuY3BwCkBAIC0xMTcsNyArMTE3LDcgQEAgdjg6OlBlcnNpc3RlbnQ8
djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdEV2ZW50Q29uc3RydWN0b3I6OkdldFJhd1RlbXBs
YXRlKCkKICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4QmluZGluZ1Blcklz
b2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OlRlbXBs
YXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmZpbmQoJmlu
Zm8pOwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1
ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVu
dDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPSBjcmVhdGVSYXdUZW1wbGF0ZSgpOwpAQCAt
MTMwLDcgKzEzMCw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRl
c3RFdmVudENvbnN0cnVjdG9yOjpHZXRUZW1wbGF0ZSgpCiAgICAgVjhCaW5kaW5nUGVySXNvbGF0
ZURhdGEqIGRhdGEgPSBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4
QmluZGluZ1Blcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0
YS0+dGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnRl
bXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2Nv
cGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RF
dmVudFRhcmdldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgv
VjhUZXN0RXZlbnRUYXJnZXQuY3BwCmluZGV4IDBlODAzYzIxOGNmNTI0OWU3ODcyYzA3ZTdkNWNk
OWE1YThiZWZjNmUuLmYyMDhlMGE5MDcyZjZjN2NlM2JjNDM1OTcwMDRkMDMwN2E3MzcxOTYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RF
dmVudFRhcmdldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Y4L1Y4VGVzdEV2ZW50VGFyZ2V0LmNwcApAQCAtMTQ1LDcgKzE0NSw3IEBAIHY4OjpQZXJzaXN0
ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3RFdmVudFRhcmdldDo6R2V0UmF3VGVtcGxh
dGUoKQogICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhKiBkYXRhID0gVjhCaW5kaW5nUGVySXNv
bGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6VGVtcGxh
dGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZmluZCgmaW5m
byk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAg
ICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVl
OwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50
PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9IGNyZWF0ZVJhd1RlbXBsYXRlKCk7CkBAIC0x
NTgsNyArMTU4LDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVz
dEV2ZW50VGFyZ2V0OjpHZXRUZW1wbGF0ZSgpCiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGEq
IGRhdGEgPSBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4QmluZGlu
Z1Blcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+dGVt
cGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnRlbXBsYXRl
TWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAg
ICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RJbnRlcmZh
Y2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdElu
dGVyZmFjZS5jcHAKaW5kZXggZDJiYjgxZmZiZGE0NzRkZGNkN2IxZDQ1Y2RlNjcyY2I4MTNmOTRk
ZS4uYWVkYmRlOWU2MjMzNmVhMDg4NzZmOGMwODkwNDM0ZDdiNGY5NDkwZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEludGVyZmFjZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdElu
dGVyZmFjZS5jcHAKQEAgLTI3Myw3ICsyNzMsNyBAQCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rp
b25UZW1wbGF0ZT4gVjhUZXN0SW50ZXJmYWNlOjpHZXRSYXdUZW1wbGF0ZSgpCiAgICAgVjhCaW5k
aW5nUGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6Y3VycmVu
dCgpOwogICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3Ig
cmVzdWx0ID0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVz
dWx0ICE9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1
bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFu
ZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVt
cGxhdGU+IHRlbXBsID0gY3JlYXRlUmF3VGVtcGxhdGUoKTsKQEAgLTI4Niw3ICsyODYsNyBAQCB2
ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0SW50ZXJmYWNlOjpHZXRU
ZW1wbGF0ZSgpCiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOEJpbmRpbmdQ
ZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpU
ZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+dGVtcGxhdGVNYXAoKS5maW5kKCZp
bmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAg
ICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7
CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8
djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RNZWRpYVF1
ZXJ5TGlzdExpc3RlbmVyLmNwcAppbmRleCA5MWM5ZmFhNTEzY2YwMzJhNWY5ZTBiNjE0NDkyYmIz
ZTdkNmMxNmM1Li4xMjRmNzhiZGY5NDE0NWQzZWEwMjM1MmU2MTBmYjJjYjA5YjEzYjZkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TWVk
aWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Y4L1Y4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCkBAIC04Miw3ICs4
Miw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3RNZWRpYVF1
ZXJ5TGlzdExpc3RlbmVyOjpHZXRSYXdUZW1wbGF0CiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURh
dGEqIGRhdGEgPSBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4Qmlu
ZGluZ1Blcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+
cmF3VGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnJh
d1RlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxl
U2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0g
Y3JlYXRlUmF3VGVtcGxhdGUoKTsKQEAgLTk1LDcgKzk1LDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6
OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI6OkdldFRlbXBs
YXRlKCkKICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4QmluZGluZ1Blcklz
b2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OlRlbXBs
YXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8p
OwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+dGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAg
cmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAog
ICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6
RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5hbWVkQ29uc3RydWN0b3Iu
Y3BwCmluZGV4IDhlZTQwZTQwODQwYWVmOTQyNzFjNTNkMDZhYjBiMWUzMmY1NjZhNmUuLjc1OGFm
ZDUwODhhNDYxNjk3NWQwYWQxNzA0YjdiNzdlODFiMzQzZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROYW1lZENvbnN0cnVjdG9yLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TmFt
ZWRDb25zdHJ1Y3Rvci5jcHAKQEAgLTEyMiw3ICsxMjIsNyBAQCB2ODo6UGVyc2lzdGVudDx2ODo6
RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6R2V0UmF3VGVtcGxhdGUo
KQogICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhKiBkYXRhID0gVjhCaW5kaW5nUGVySXNvbGF0
ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVN
YXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7
CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAg
ICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwog
CiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4
OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9IGNyZWF0ZVJhd1RlbXBsYXRlKCk7CkBAIC0xMzUs
NyArMTM1LDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdE5h
bWVkQ29uc3RydWN0b3I6OkdldFRlbXBsYXRlKCkKICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0
YSogZGF0YSA9IFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhCaW5k
aW5nUGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT50
ZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+dGVtcGxh
dGVNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICBy
ZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsK
ICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNw
cAppbmRleCA4YWFmYThmNmUyMDhhNTU5MzM1YmYyM2I3Y2FkMzcyZTA2MzFhYmQ5Li5mNTgwODQ0
ZWRiOTNhNzU3N2ExMjc0MjhlYWY2Y2RjZTI2ODE0YTliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcApAQCAtMjEzMSw3
ICsyMTMxLDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdE9i
ajo6R2V0UmF3VGVtcGxhdGUoKQogICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhKiBkYXRhID0g
VjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOEJpbmRpbmdQZXJJc29s
YXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnJhd1RlbXBsYXRl
TWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT5yYXdUZW1wbGF0ZU1h
cCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVy
biByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAg
IHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9IGNyZWF0ZVJhd1Rl
bXBsYXRlKCk7CkBAIC0yMTQ0LDcgKzIxNDQsNyBAQCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rp
b25UZW1wbGF0ZT4gVjhUZXN0T2JqOjpHZXRUZW1wbGF0ZSgpCiAgICAgVjhCaW5kaW5nUGVySXNv
bGF0ZURhdGEqIGRhdGEgPSBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAg
IFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0g
ZGF0YS0+dGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEt
PnRlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxl
U2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZS5jcHAKaW5kZXggMzQxMTdmYWVjOTExOWU4NGIzYWQ4NmM1NzcwYzU3Yjg3YTNkZjM3OC4uM2Qy
ZmQ2MTc4MTkyYzZlZmIyZGQwYzQ1ZWE2MGY5OTc4MGEzNzI0MSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Y4L1Y4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKQEAgLTI0OCw3
ICsyNDgsNyBAQCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpHZXRSYQogICAgIFY4QmluZGluZ1Blcklzb2xh
dGVEYXRhKiBkYXRhID0gVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBW
OEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRh
dGEtPnJhd1RlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRh
LT5yYXdUZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7
CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhh
bmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1w
bCA9IGNyZWF0ZVJhd1RlbXBsYXRlKCk7CkBAIC0yNjEsNyArMjYxLDcgQEAgdjg6OlBlcnNpc3Rl
bnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZTo6R2V0VGUKICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4QmluZGlu
Z1Blcklzb2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6
OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmZpbmQo
JmluZm8pOwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+dGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1
ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVu
dDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvTlBWOE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9OUFY4T2JqZWN0LmNwcAppbmRleCA1YzMzNTkzNzcwNWVmMjNjODZkNjY3MGJiMWNiOTM4N2Fm
MzY4MTI0Li41NjgwNzMwYjQyZDA4YjVjMzdiYTcxODk0NDA2YjJlMGI5YTkyYWU1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9OUFY4T2JqZWN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9OUFY4T2JqZWN0LmNwcApAQCAtNzgsNyArNzgsNyBAQCBz
dGF0aWMgdm9pZCBmcmVlVjhOUE9iamVjdChOUE9iamVjdCogbnBPYmplY3QpCiAgICAgaWYgKGlu
dCB2OE9iamVjdEhhc2ggPSB2OE5wT2JqZWN0LT52OE9iamVjdC0+R2V0SWRlbnRpdHlIYXNoKCkp
IHsKICAgICAgICAgVjhOUE9iamVjdE1hcDo6aXRlcmF0b3IgaXRlciA9IHN0YXRpY1Y4TlBPYmpl
Y3RNYXAoKS0+ZmluZCh2OE9iamVjdEhhc2gpOwogICAgICAgICBpZiAoaXRlciAhPSBzdGF0aWNW
OE5QT2JqZWN0TWFwKCktPmVuZCgpKSB7Ci0gICAgICAgICAgICBWOE5QT2JqZWN0VmVjdG9yJiBv
YmplY3RzID0gaXRlci0+c2Vjb25kOworICAgICAgICAgICAgVjhOUE9iamVjdFZlY3RvciYgb2Jq
ZWN0cyA9IGl0ZXItPnZhbHVlOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBp
bmRleCA8IG9iamVjdHMuc2l6ZSgpOyArK2luZGV4KSB7CiAgICAgICAgICAgICAgICAgaWYgKG9i
amVjdHMuYXQoaW5kZXgpID09IHY4TnBPYmplY3QpIHsKICAgICAgICAgICAgICAgICAgICAgb2Jq
ZWN0cy5yZW1vdmUoaW5kZXgpOwpAQCAtMTUzLDcgKzE1Myw3IEBAIE5QT2JqZWN0KiBucENyZWF0
ZVY4U2NyaXB0T2JqZWN0KE5QUCBucHAsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0LCBE
T01XaW5kCiAgICAgQVNTRVJUKHY4T2JqZWN0SGFzaCk7CiAgICAgVjhOUE9iamVjdE1hcDo6aXRl
cmF0b3IgaXRlciA9IHN0YXRpY1Y4TlBPYmplY3RNYXAoKS0+ZmluZCh2OE9iamVjdEhhc2gpOwog
ICAgIGlmIChpdGVyICE9IHN0YXRpY1Y4TlBPYmplY3RNYXAoKS0+ZW5kKCkpIHsKLSAgICAgICAg
VjhOUE9iamVjdFZlY3RvciYgb2JqZWN0cyA9IGl0ZXItPnNlY29uZDsKKyAgICAgICAgVjhOUE9i
amVjdFZlY3RvciYgb2JqZWN0cyA9IGl0ZXItPnZhbHVlOwogICAgICAgICBmb3IgKHNpemVfdCBp
bmRleCA9IDA7IGluZGV4IDwgb2JqZWN0cy5zaXplKCk7ICsraW5kZXgpIHsKICAgICAgICAgICAg
IFY4TlBPYmplY3QqIHY4bnBPYmplY3QgPSBvYmplY3RzLmF0KGluZGV4KTsKICAgICAgICAgICAg
IGlmICh2OG5wT2JqZWN0LT5yb290T2JqZWN0ID09IHJvb3QpIHsKQEAgLTE3Myw3ICsxNzMsNyBA
QCBOUE9iamVjdCogbnBDcmVhdGVWOFNjcmlwdE9iamVjdChOUFAgbnBwLCB2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+IG9iamVjdCwgRE9NV2luZAogI2VuZGlmCiAgICAgdjhucE9iamVjdC0+cm9vdE9i
amVjdCA9IHJvb3Q7CiAKLSAgICBpdGVyLT5zZWNvbmQuYXBwZW5kKHY4bnBPYmplY3QpOworICAg
IGl0ZXItPnZhbHVlLmFwcGVuZCh2OG5wT2JqZWN0KTsKIAogICAgIHJldHVybiByZWludGVycHJl
dF9jYXN0PE5QT2JqZWN0Kj4odjhucE9iamVjdCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwCmluZGV4IDhkZTk1NTM3YWQ3ZjJjZmQxYWY2
NGY4MmU5ZGFkZmE4ZDI3ZGM5ZGMuLjc3N2Y3OTc3N2E1MDUxYzhhYzBmNTI4YTI1MGFjYTRmMWFm
MTc2MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRy
b2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xs
ZXIuY3BwCkBAIC0xMjEsOCArMTIxLDggQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpjbGVhclNj
cmlwdE9iamVjdHMoKQogewogICAgIFBsdWdpbk9iamVjdE1hcDo6aXRlcmF0b3IgaXQgPSBtX3Bs
dWdpbk9iamVjdHMuYmVnaW4oKTsKICAgICBmb3IgKDsgaXQgIT0gbV9wbHVnaW5PYmplY3RzLmVu
ZCgpOyArK2l0KSB7Ci0gICAgICAgIF9OUE5fVW5yZWdpc3Rlck9iamVjdChpdC0+c2Vjb25kKTsK
LSAgICAgICAgX05QTl9SZWxlYXNlT2JqZWN0KGl0LT5zZWNvbmQpOworICAgICAgICBfTlBOX1Vu
cmVnaXN0ZXJPYmplY3QoaXQtPnZhbHVlKTsKKyAgICAgICAgX05QTl9SZWxlYXNlT2JqZWN0KGl0
LT52YWx1ZSk7CiAgICAgfQogICAgIG1fcGx1Z2luT2JqZWN0cy5jbGVhcigpOwogCkBAIC0zMjMs
OCArMzIzLDggQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpjbGVhbnVwU2NyaXB0T2JqZWN0c0Zv
clBsdWdpbihXaWRnZXQqIG5hdGl2ZUhhbmRsZSkKICAgICBQbHVnaW5PYmplY3RNYXA6Oml0ZXJh
dG9yIGl0ID0gbV9wbHVnaW5PYmplY3RzLmZpbmQobmF0aXZlSGFuZGxlKTsKICAgICBpZiAoaXQg
PT0gbV9wbHVnaW5PYmplY3RzLmVuZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgX05QTl9VbnJl
Z2lzdGVyT2JqZWN0KGl0LT5zZWNvbmQpOwotICAgIF9OUE5fUmVsZWFzZU9iamVjdChpdC0+c2Vj
b25kKTsKKyAgICBfTlBOX1VucmVnaXN0ZXJPYmplY3QoaXQtPnZhbHVlKTsKKyAgICBfTlBOX1Jl
bGVhc2VPYmplY3QoaXQtPnZhbHVlKTsKICAgICBtX3BsdWdpbk9iamVjdHMucmVtb3ZlKGl0KTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2VyaWFsaXplZFNj
cmlwdFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZS5jcHAKaW5kZXggZjYwZDM2NmE4N2Y2YTFkMTJiNTk0NDg5OWY3OTY2MjEzNTIwZWEx
YS4uMDI5MjM4MTBkZTc0NjdiZThkMzM5NjhhOThlZmIyZTExMDAwNThmMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCkBA
IC0xMDYsNyArMTA2LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgdHlwZW5hbWUgSGFuZGxl
VG9UOjppdGVyYXRvciByZXN1bHQgPSBtX21hcC5maW5kKCpoYW5kbGUpOwogICAgICAgICBpZiAo
cmVzdWx0ICE9IG1fbWFwLmVuZCgpKSB7Ci0gICAgICAgICAgICAqdmFsdWVPdXQgPSByZXN1bHQt
PnNlY29uZDsKKyAgICAgICAgICAgICp2YWx1ZU91dCA9IHJlc3VsdC0+dmFsdWU7CiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTU1hcC5oIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvVjhET01NYXAuaAppbmRleCAxMzYzYTc5NzUwNDg2ZWE1OTFjZTAx
OTk4NjliM2Q3NDllMjE5ZWI1Li5jOTBjYjE0MTMxNTVmM2IyYjg3NWY0NTMxYWJhNjlhYmFhMzk3
MjJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTU1hcC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NTWFwLmgKQEAgLTEwOCw3ICsxMDgs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgcmVtb3ZlSWZQcmVzZW50KEtl
eVR5cGUqIGtleSwgdjg6OlBlcnNpc3RlbnQ8VmFsdWVUeXBlPiB2YWx1ZSkKICAgICAgICAgewog
ICAgICAgICAgICAgdHlwZW5hbWUgSGFzaE1hcDxLZXlUeXBlKiwgVmFsdWVUeXBlKj46Oml0ZXJh
dG9yIGl0ID0gbV9tYXAuZmluZChrZXkpOwotICAgICAgICAgICAgaWYgKGl0ID09IG1fbWFwLmVu
ZCgpIHx8IGl0LT5zZWNvbmQgIT0gKnZhbHVlKQorICAgICAgICAgICAgaWYgKGl0ID09IG1fbWFw
LmVuZCgpIHx8IGl0LT52YWx1ZSAhPSAqdmFsdWUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgICAgICAgICBtX21hcC5yZW1vdmUoaXQpOwpAQCAtMTI4LDcgKzEyOCw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIHZpc2l0b3ItPnN0YXJ0TWFwKCk7CiAg
ICAgICAgICAgICB0eXBlbmFtZSBIYXNoTWFwPEtleVR5cGUqLCBWYWx1ZVR5cGUqPjo6aXRlcmF0
b3IgaXQgPSBtX21hcC5iZWdpbigpOwogICAgICAgICAgICAgZm9yICg7IGl0ICE9IG1fbWFwLmVu
ZCgpOyArK2l0KQotICAgICAgICAgICAgICAgIHZpc2l0b3ItPnZpc2l0RE9NV3JhcHBlcihzdG9y
ZSwgaXQtPmZpcnN0LCB2ODo6UGVyc2lzdGVudDxWYWx1ZVR5cGU+KGl0LT5zZWNvbmQpKTsKKyAg
ICAgICAgICAgICAgICB2aXNpdG9yLT52aXNpdERPTVdyYXBwZXIoc3RvcmUsIGl0LT5rZXksIHY4
OjpQZXJzaXN0ZW50PFZhbHVlVHlwZT4oaXQtPnZhbHVlKSk7CiAgICAgICAgICAgICB2aXNpdG9y
LT5lbmRNYXAoKTsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9WOERPTVdpbmRvd1NoZWxsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1Y4RE9NV2luZG93U2hlbGwuY3BwCmluZGV4IGM0YzYwNTQwYWI5YjY4YTY5M2NkYjZmYzFlNzdm
ZjA5NGM0MzQxYTUuLjE3YjVkNmM5ZmE1NDBkYjBjMjUxNTQzMzM4ZWE3M2ZjNWZhY2I1NWUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwuY3BwCkBA
IC0xODYsNyArMTg2LDcgQEAgdm9pZCBWOERPTVdpbmRvd1NoZWxsOjpkaXNwb3NlQ29udGV4dEhh
bmRsZXMoKQogCiAgICAgV3JhcHBlckJvaWxlcnBsYXRlTWFwOjppdGVyYXRvciBpdCA9IG1fd3Jh
cHBlckJvaWxlcnBsYXRlcy5iZWdpbigpOwogICAgIGZvciAoOyBpdCAhPSBtX3dyYXBwZXJCb2ls
ZXJwbGF0ZXMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVj
dD4gd3JhcHBlciA9IGl0LT5zZWNvbmQ7CisgICAgICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmpl
Y3Q+IHdyYXBwZXIgPSBpdC0+dmFsdWU7CiAgICAgICAgIHdyYXBwZXIuRGlzcG9zZSgpOwogICAg
ICAgICB3cmFwcGVyLkNsZWFyKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhHQ0NvbnRyb2xsZXIuY3BwCmluZGV4IDFiODEyMzRlZDA0ZWIyMTZjZDcyNmE0YzM3M2Jh
OGQzNTI5NmUzMmMuLjViNjEyMGQwODAzZWJlZjAxMmI1NjA2NmI3OWM5NTRhOGMyYmZlZmYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEdDQ29udHJvbGxlci5jcHAKQEAgLTkz
LDkgKzkzLDkgQEAgc3RhdGljIHZvaWQgZW51bWVyYXRlR2xvYmFsSGFuZGxlcygpCiB7CiAgICAg
R2xvYmFsSGFuZGxlTWFwJiBnbG9iYWxIYW5kbGVNYXAgPSBjdXJyZW50R2xvYmFsSGFuZGxlTWFw
KCk7CiAgICAgZm9yIChHbG9iYWxIYW5kbGVNYXA6Oml0ZXJhdG9yIGl0ID0gZ2xvYmFsSGFuZGxl
TWFwLmJlZ2luKCksIGVuZCA9IGdsb2JhbEhhbmRsZU1hcC5lbmQoKTsgaXQgIT0gZW5kOyArK2l0
KSB7Ci0gICAgICAgIEdsb2JhbEhhbmRsZUluZm8qIGluZm8gPSBpdC0+c2Vjb25kOworICAgICAg
ICBHbG9iYWxIYW5kbGVJbmZvKiBpbmZvID0gaXQtPnZhbHVlOwogICAgICAgICBVTlVTRURfUEFS
QU0oaW5mbyk7Ci0gICAgICAgIHY4OjpWYWx1ZSogaGFuZGxlID0gaXQtPmZpcnN0OworICAgICAg
ICB2ODo6VmFsdWUqIGhhbmRsZSA9IGl0LT5rZXk7CiAgICAgICAgIFVOVVNFRF9QQVJBTShoYW5k
bGUpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
UHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAKaW5kZXgg
NDI2NjMzNDhhMmI2ZmJhYWFkNTY4NTVhNDliODQ4MTliODIzNzAxYS4uMDczZTU0MDhmYmFhNTc5
MTE2M2UyMGVjMjA0ZWUwNmU0Zjk2NzAwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQ
cm94eS5jcHAKQEAgLTIyOSw3ICsyMjksNyBAQCB2b2lkIFY4UHJveHk6OmV2YWx1YXRlSW5Jc29s
YXRlZFdvcmxkKGludCB3b3JsZElELCBjb25zdCBWZWN0b3I8U2NyaXB0U291cmNlQ29kZQogICAg
IGlmICh3b3JsZElEID4gMCkgewogICAgICAgICBJc29sYXRlZFdvcmxkTWFwOjppdGVyYXRvciBp
dGVyID0gbV9pc29sYXRlZFdvcmxkcy5maW5kKHdvcmxkSUQpOwogICAgICAgICBpZiAoaXRlciAh
PSBtX2lzb2xhdGVkV29ybGRzLmVuZCgpKSB7Ci0gICAgICAgICAgICBpc29sYXRlZENvbnRleHQg
PSBpdGVyLT5zZWNvbmQ7CisgICAgICAgICAgICBpc29sYXRlZENvbnRleHQgPSBpdGVyLT52YWx1
ZTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlzb2xhdGVkQ29udGV4dCA9IG5ldyBW
OElzb2xhdGVkQ29udGV4dCh0aGlzLCBleHRlbnNpb25Hcm91cCwgd29ybGRJRCk7CiAgICAgICAg
ICAgICBpZiAoaXNvbGF0ZWRDb250ZXh0LT5jb250ZXh0KCkuSXNFbXB0eSgpKSB7CkBAIC0yNTAs
NyArMjUwLDcgQEAgdm9pZCBWOFByb3h5OjpldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZChpbnQgd29y
bGRJRCwgY29uc3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGUKICAgICAgICAgCiAgICAgICAgIElz
b2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbk1hcDo6aXRlcmF0b3Igc2VjdXJpdHlPcmlnaW5JdGVy
ID0gbV9pc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW5zLmZpbmQod29ybGRJRCk7CiAgICAgICAg
IGlmIChzZWN1cml0eU9yaWdpbkl0ZXIgIT0gbV9pc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW5z
LmVuZCgpKQotICAgICAgICAgICAgaXNvbGF0ZWRDb250ZXh0LT5zZXRTZWN1cml0eU9yaWdpbihz
ZWN1cml0eU9yaWdpbkl0ZXItPnNlY29uZCk7CisgICAgICAgICAgICBpc29sYXRlZENvbnRleHQt
PnNldFNlY3VyaXR5T3JpZ2luKHNlY3VyaXR5T3JpZ2luSXRlci0+dmFsdWUpOwogICAgIH0gZWxz
ZSB7CiAgICAgICAgIGlzb2xhdGVkQ29udGV4dCA9IG5ldyBWOElzb2xhdGVkQ29udGV4dCh0aGlz
LCBleHRlbnNpb25Hcm91cCwgd29ybGRJRCk7CiAgICAgICAgIGlmIChpc29sYXRlZENvbnRleHQt
PmNvbnRleHQoKS5Jc0VtcHR5KCkpIHsKQEAgLTI3NSw3ICsyNzUsNyBAQCB2b2lkIFY4UHJveHk6
OnNldElzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbihpbnQgd29ybGRJRCwgUGFzc1JlZlB0cjxT
ZWN1cml0eU9yaQogICAgIG1faXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2lucy5zZXQod29ybGRJ
RCwgc2VjdXJpdHlPcmlnaW4pOwogICAgIElzb2xhdGVkV29ybGRNYXA6Oml0ZXJhdG9yIGl0ZXIg
PSBtX2lzb2xhdGVkV29ybGRzLmZpbmQod29ybGRJRCk7CiAgICAgaWYgKGl0ZXIgIT0gbV9pc29s
YXRlZFdvcmxkcy5lbmQoKSkKLSAgICAgICAgaXRlci0+c2Vjb25kLT5zZXRTZWN1cml0eU9yaWdp
bihzZWN1cml0eU9yaWdpbik7CisgICAgICAgIGl0ZXItPnZhbHVlLT5zZXRTZWN1cml0eU9yaWdp
bihzZWN1cml0eU9yaWdpbik7CiB9CiAKIGJvb2wgVjhQcm94eTo6c2V0SW5qZWN0ZWRTY3JpcHRD
b250ZXh0RGVidWdJZCh2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiB0YXJnZXRDb250ZXh0KQpAQCAt
NTQwLDcgKzU0MCw3IEBAIHZvaWQgVjhQcm94eTo6cmVzZXRJc29sYXRlZFdvcmxkcygpCiB7CiAg
ICAgZm9yIChJc29sYXRlZFdvcmxkTWFwOjppdGVyYXRvciBpdGVyID0gbV9pc29sYXRlZFdvcmxk
cy5iZWdpbigpOwogICAgICAgICAgaXRlciAhPSBtX2lzb2xhdGVkV29ybGRzLmVuZCgpOyArK2l0
ZXIpIHsKLSAgICAgICAgaXRlci0+c2Vjb25kLT5kZXN0cm95KCk7CisgICAgICAgIGl0ZXItPnZh
bHVlLT5kZXN0cm95KCk7CiAgICAgfQogICAgIG1faXNvbGF0ZWRXb3JsZHMuY2xlYXIoKTsKICAg
ICBtX2lzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbnMuY2xlYXIoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L25wcnVudGltZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9ucHJ1bnRpbWUuY3BwCmluZGV4IDhkODBjZjkzMzE4NmU4NTQ3YzE4NTE4M2Q3
ZTc0ODRiY2UxZTg0YTMuLjJiMDM2N2NkMTVmMmE0ZmIxMTNkNGNjMGJmNzY3ZWM4Y2YxYjBhNWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L25wcnVudGltZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvbnBydW50aW1lLmNwcApAQCAtMTY0LDcgKzE2
NCw3IEBAIE5QSWRlbnRpZmllciBfTlBOX0dldFN0cmluZ0lkZW50aWZpZXIoY29uc3QgTlBVVEY4
KiBuYW1lKQogICAgICAgICBTdHJpbmdJZGVudGlmaWVyTWFwKiBpZGVudE1hcCA9IGdldFN0cmlu
Z0lkZW50aWZpZXJNYXAoKTsKICAgICAgICAgU3RyaW5nSWRlbnRpZmllck1hcDo6aXRlcmF0b3Ig
aXRlciA9IGlkZW50TWFwLT5maW5kKGtleSk7CiAgICAgICAgIGlmIChpdGVyICE9IGlkZW50TWFw
LT5lbmQoKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxOUElkZW50aWZpZXI+KGl0
ZXItPnNlY29uZCk7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TlBJZGVudGlmaWVy
PihpdGVyLT52YWx1ZSk7CiAKICAgICAgICAgc2l6ZV90IG5hbWVMZW4gPSBrZXkubV9sZW5ndGg7
CiAKQEAgLTIxMSw3ICsyMTEsNyBAQCBOUElkZW50aWZpZXIgX05QTl9HZXRJbnRJZGVudGlmaWVy
KGludDMyX3QgaW50SWQpCiAgICAgSW50SWRlbnRpZmllck1hcCogaWRlbnRNYXAgPSBnZXRJbnRJ
ZGVudGlmaWVyTWFwKCk7CiAgICAgSW50SWRlbnRpZmllck1hcDo6aXRlcmF0b3IgaXRlciA9IGlk
ZW50TWFwLT5maW5kKGludElkKTsKICAgICBpZiAoaXRlciAhPSBpZGVudE1hcC0+ZW5kKCkpCi0g
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxOUElkZW50aWZpZXI+KGl0ZXItPnNlY29uZCk7Cisg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxOUElkZW50aWZpZXI+KGl0ZXItPnZhbHVlKTsKIAog
ICAgIC8vIFdlIG5ldmVyIHJlbGVhc2UgaWRlbnRpZmllcnMsIHNvIHRoaXMgZGljdGlvbmFyeSB3
aWxsIGdyb3cuCiAgICAgUHJpdmF0ZUlkZW50aWZpZXIqIGlkZW50aWZpZXIgPSByZWludGVycHJl
dF9jYXN0PFByaXZhdGVJZGVudGlmaWVyKj4obWFsbG9jKHNpemVvZihQcml2YXRlSWRlbnRpZmll
cikpKTsKQEAgLTM4OCw3ICszODgsNyBAQCB2b2lkIF9OUE5fUmVnaXN0ZXJPYmplY3QoTlBPYmpl
Y3QqIG5wT2JqZWN0LCBOUE9iamVjdCogb3duZXIpCiAgICAgICAgIE5QT2JqZWN0TWFwOjppdGVy
YXRvciBvd25lckVudHJ5ID0gbGl2ZU9iamVjdE1hcCgpLmZpbmQob3duZXIpOwogICAgICAgICBO
UE9iamVjdCogcGFyZW50ID0gMDsKICAgICAgICAgaWYgKGxpdmVPYmplY3RNYXAoKS5lbmQoKSAh
PSBvd25lckVudHJ5KQotICAgICAgICAgICAgcGFyZW50ID0gb3duZXJFbnRyeS0+c2Vjb25kOwor
ICAgICAgICAgICAgcGFyZW50ID0gb3duZXJFbnRyeS0+dmFsdWU7CiAKICAgICAgICAgaWYgKHBh
cmVudCkKICAgICAgICAgICAgIG93bmVyID0gcGFyZW50OwpAQCAtNDA4LDcgKzQwOCw3IEBAIHZv
aWQgX05QTl9VbnJlZ2lzdGVyT2JqZWN0KE5QT2JqZWN0KiBucE9iamVjdCkKIAogICAgIE5QT2Jq
ZWN0KiBvd25lciA9IDA7CiAgICAgaWYgKGxpdmVPYmplY3RNYXAoKS5maW5kKG5wT2JqZWN0KSAh
PSBsaXZlT2JqZWN0TWFwKCkuZW5kKCkpCi0gICAgICAgIG93bmVyID0gbGl2ZU9iamVjdE1hcCgp
LmZpbmQobnBPYmplY3QpLT5zZWNvbmQ7CisgICAgICAgIG93bmVyID0gbGl2ZU9iamVjdE1hcCgp
LmZpbmQobnBPYmplY3QpLT52YWx1ZTsKIAogICAgIGlmICghb3duZXIpIHsKICAgICAgICAgLy8g
VW5yZWdpc3RlcmluZyBhIG93bmVyIG9iamVjdDsgYWxzbyB1bnJlZ2lzdGVyIGl0J3MgZGVzY2Vu
ZGFudHMuCkBAIC00NDMsNyArNDQzLDcgQEAgdm9pZCBfTlBOX1VucmVnaXN0ZXJPYmplY3QoTlBP
YmplY3QqIG5wT2JqZWN0KQogICAgIH0gZWxzZSB7CiAgICAgICAgIE5QUm9vdE9iamVjdE1hcDo6
aXRlcmF0b3Igb3duZXJFbnRyeSA9IHJvb3RPYmplY3RNYXAoKS5maW5kKG93bmVyKTsKICAgICAg
ICAgaWYgKG93bmVyRW50cnkgIT0gcm9vdE9iamVjdE1hcCgpLmVuZCgpKSB7Ci0gICAgICAgICAg
ICBOUE9iamVjdFNldCogbGlzdCA9IG93bmVyRW50cnktPnNlY29uZDsKKyAgICAgICAgICAgIE5Q
T2JqZWN0U2V0KiBsaXN0ID0gb3duZXJFbnRyeS0+dmFsdWU7CiAgICAgICAgICAgICBBU1NFUlQo
bGlzdC0+ZmluZChucE9iamVjdCkgIT0gbGlzdC0+ZW5kKCkpOwogICAgICAgICAgICAgbGlzdC0+
cmVtb3ZlKG5wT2JqZWN0KTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YnJpZGdlL0lkZW50aWZpZXJSZXAuY3BwIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL0lkZW50aWZp
ZXJSZXAuY3BwCmluZGV4IDJhY2YxNDE1M2QxZGI5ZTEyYjcyNTU4YTUzODhkOTg2ZmY4YTVlODUu
LjFkZjU4YTllNDE1ODFjM2JlYzMxNTFmZjIxYmNlYWEyNDcyZGMxZjUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JyaWRnZS9JZGVudGlmaWVyUmVwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9icmlkZ2UvSWRlbnRpZmllclJlcC5jcHAKQEAgLTY5LDEzICs2OSwxMyBAQCBJZGVudGlmaWVy
UmVwKiBJZGVudGlmaWVyUmVwOjpnZXQoaW50IGludElEKQogICAgIAogICAgIEludElkZW50aWZp
ZXJNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBpbnRJZGVudGlmaWVyTWFwKCkuYWRkKGludElELCAw
KTsKICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgQVNTRVJUKCFyZXN1bHQu
aXRlcmF0b3ItPnNlY29uZCk7Ci0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gbmV3
IElkZW50aWZpZXJSZXAoaW50SUQpOworICAgICAgICBBU1NFUlQoIXJlc3VsdC5pdGVyYXRvci0+
dmFsdWUpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gbmV3IElkZW50aWZpZXJS
ZXAoaW50SUQpOwogICAgICAgICAKLSAgICAgICAgaWRlbnRpZmllclNldCgpLmFkZChyZXN1bHQu
aXRlcmF0b3ItPnNlY29uZCk7CisgICAgICAgIGlkZW50aWZpZXJTZXQoKS5hZGQocmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZSk7CiAgICAgfQogICAgIAotICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3It
PnNlY29uZDsKKyAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIAogdHlwZWRl
ZiBIYXNoTWFwPFJlZlB0cjxTdHJpbmdJbXBsPiwgSWRlbnRpZmllclJlcCo+IFN0cmluZ0lkZW50
aWZpZXJNYXA7CkBAIC05NSwxMyArOTUsMTMgQEAgSWRlbnRpZmllclJlcCogSWRlbnRpZmllclJl
cDo6Z2V0KGNvbnN0IGNoYXIqIG5hbWUpCiAgICAgVVN0cmluZyBzdHJpbmcgPSBzdHJpbmdUb1VT
dHJpbmcoU3RyaW5nOjpmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayhuYW1lLCBzdHJsZW4obmFt
ZSkpKTsKICAgICBTdHJpbmdJZGVudGlmaWVyTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gc3RyaW5n
SWRlbnRpZmllck1hcCgpLmFkZChzdHJpbmcuaW1wbCgpLCAwKTsKICAgICBpZiAocmVzdWx0Lmlz
TmV3RW50cnkpIHsKLSAgICAgICAgQVNTRVJUKCFyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7Ci0g
ICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gbmV3IElkZW50aWZpZXJSZXAobmFtZSk7
CisgICAgICAgIEFTU0VSVCghcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CisgICAgICAgIHJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUgPSBuZXcgSWRlbnRpZmllclJlcChuYW1lKTsKICAgICAgICAgCi0g
ICAgICAgIGlkZW50aWZpZXJTZXQoKS5hZGQocmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOworICAg
ICAgICBpZGVudGlmaWVyU2V0KCkuYWRkKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwogICAgIH0K
ICAgICAKLSAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgcmV0dXJuIHJl
c3VsdC5pdGVyYXRvci0+dmFsdWU7CiB9CiAKIGJvb2wgSWRlbnRpZmllclJlcDo6aXNWYWxpZChJ
ZGVudGlmaWVyUmVwKiBpZGVudGlmaWVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJp
ZGdlL05QX2pzb2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9OUF9qc29iamVjdC5j
cHAKaW5kZXggODM5ODZhZjU4M2M1OTA0MmYxYmY3Nzc1MTIwN2E4MDM1M2FkMTNlYS4uMzQ2ODcz
ZDY1MzI5NGYzYTBlMjIwYmIwZjM2ZTBiZDhkMDg3NGU1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYnJpZGdlL05QX2pzb2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
TlBfanNvYmplY3QuY3BwCkBAIC02Niw4ICs2Niw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGl0
ZXIgPSBtX21hcC5hZGQocm9vdE9iamVjdCwgSlNUb05QT2JqZWN0TWFwKCkpLml0ZXJhdG9yOwog
ICAgICAgICB9CiAKLSAgICAgICAgQVNTRVJUKGl0ZXItPnNlY29uZC5maW5kKGpzT2JqZWN0KSA9
PSBpdGVyLT5zZWNvbmQuZW5kKCkpOwotICAgICAgICBpdGVyLT5zZWNvbmQuYWRkKGpzT2JqZWN0
LCBucE9iamVjdCk7CisgICAgICAgIEFTU0VSVChpdGVyLT52YWx1ZS5maW5kKGpzT2JqZWN0KSA9
PSBpdGVyLT52YWx1ZS5lbmQoKSk7CisgICAgICAgIGl0ZXItPnZhbHVlLmFkZChqc09iamVjdCwg
bnBPYmplY3QpOwogICAgIH0KIAogICAgIHZvaWQgcmVtb3ZlKFJvb3RPYmplY3QqIHJvb3RPYmpl
Y3QpCkBAIC04MSw5ICs4MSw5IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIEhhc2hNYXA8Um9v
dE9iamVjdCosIEpTVG9OUE9iamVjdE1hcD46Oml0ZXJhdG9yIGl0ZXIgPSBtX21hcC5maW5kKHJv
b3RPYmplY3QpOwogICAgICAgICBBU1NFUlQoaXRlciAhPSBtX21hcC5lbmQoKSk7Ci0gICAgICAg
IEFTU0VSVChpdGVyLT5zZWNvbmQuZmluZChqc09iamVjdCkgIT0gaXRlci0+c2Vjb25kLmVuZCgp
KTsKKyAgICAgICAgQVNTRVJUKGl0ZXItPnZhbHVlLmZpbmQoanNPYmplY3QpICE9IGl0ZXItPnZh
bHVlLmVuZCgpKTsKIAotICAgICAgICBpdGVyLT5zZWNvbmQucmVtb3ZlKGpzT2JqZWN0KTsKKyAg
ICAgICAgaXRlci0+dmFsdWUucmVtb3ZlKGpzT2JqZWN0KTsKICAgICB9CiAKIHByaXZhdGU6CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhQ2xhc3NKU0MuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YUNsYXNzSlNDLmNwcAppbmRleCA5
NzU2ZTdkZjYwNWMwOTUzZThiYjRlMjg1NGIxZTU0NDkxYTllZjE1Li41ZGFiM2U0MWYyMzliMTA0
YWEyOWJmODQwMWNlMzkzYWYyYjU4MzFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9icmlk
Z2Uvam5pL2pzYy9KYXZhQ2xhc3NKU0MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9q
bmkvanNjL0phdmFDbGFzc0pTQy5jcHAKQEAgLTEwNyw3ICsxMDcsNyBAQCBKYXZhQ2xhc3M6On5K
YXZhQ2xhc3MoKQogCiAgICAgTWV0aG9kTGlzdE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9t
ZXRob2RzLmVuZCgpOwogICAgIGZvciAoTWV0aG9kTGlzdE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtX21ldGhvZHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IE1l
dGhvZExpc3QqIG1ldGhvZExpc3QgPSBpdC0+c2Vjb25kOworICAgICAgICBjb25zdCBNZXRob2RM
aXN0KiBtZXRob2RMaXN0ID0gaXQtPnZhbHVlOwogICAgICAgICBkZWxldGVBbGxWYWx1ZXMoKm1l
dGhvZExpc3QpOwogICAgICAgICBkZWxldGUgbWV0aG9kTGlzdDsKICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9yb290LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JyaWRnZS9ydW50aW1lX3Jvb3QuY3BwCmluZGV4IGU4ODRlNjFiMTM4NzZlODc3YTZjOTllNjgz
ZWRiOTk0MTI3ZTNkZjEuLjlkZGI5NTVlMTljYmUyNmM5ODM2ZGQ5NDg5ZTAyZGMwMTA4YWU3MmIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX3Jvb3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX3Jvb3QuY3BwCkBAIC0xMDUsNyArMTA1LDcg
QEAgdm9pZCBSb290T2JqZWN0OjppbnZhbGlkYXRlKCkKICAgICB7CiAgICAgICAgIEhhc2hNYXA8
UnVudGltZU9iamVjdCosIEpTQzo6V2VhazxSdW50aW1lT2JqZWN0PiA+OjppdGVyYXRvciBlbmQg
PSBtX3J1bnRpbWVPYmplY3RzLmVuZCgpOwogICAgICAgICBmb3IgKEhhc2hNYXA8UnVudGltZU9i
amVjdCosIEpTQzo6V2VhazxSdW50aW1lT2JqZWN0PiA+OjppdGVyYXRvciBpdCA9IG1fcnVudGlt
ZU9iamVjdHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBpdC0+c2Vj
b25kLmdldCgpLT5pbnZhbGlkYXRlKCk7CisgICAgICAgICAgICBpdC0+dmFsdWUuZ2V0KCktPmlu
dmFsaWRhdGUoKTsKICAgICAgICAgfQogCiAgICAgICAgIG1fcnVudGltZU9iamVjdHMuY2xlYXIo
KTsKQEAgLTEyNiw3ICsxMjYsNyBAQCB2b2lkIFJvb3RPYmplY3Q6OmludmFsaWRhdGUoKQogCiAg
ICAgUHJvdGVjdENvdW50U2V0OjppdGVyYXRvciBlbmQgPSBtX3Byb3RlY3RDb3VudFNldC5lbmQo
KTsKICAgICBmb3IgKFByb3RlY3RDb3VudFNldDo6aXRlcmF0b3IgaXQgPSBtX3Byb3RlY3RDb3Vu
dFNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIEpTQzo6Z2NVbnByb3RlY3Qo
aXQtPmZpcnN0KTsKKyAgICAgICAgSlNDOjpnY1VucHJvdGVjdChpdC0+a2V5KTsKICAgICBtX3By
b3RlY3RDb3VudFNldC5jbGVhcigpOwogCiAgICAgcm9vdE9iamVjdFNldCgpLT5yZW1vdmUodGhp
cyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FudmFzVmFsdWUuY3BwIGIv
U291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbnZhc1ZhbHVlLmNwcAppbmRleCA3ODNjZWVmODJiNTBm
ODg1ZTM3MDU5ZTc1ZGUxNTZkZWRmMjdkMTYxLi45YTk1NTQwZDk2ZWNjYzE5NzA3Mjg0YjU3YjZi
MmQxYzY5MGIxNjQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FudmFzVmFs
dWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYW52YXNWYWx1ZS5jcHAKQEAgLTQ5
LDE0ICs0OSwxNCBAQCB2b2lkIENTU0NhbnZhc1ZhbHVlOjpjYW52YXNDaGFuZ2VkKEhUTUxDYW52
YXNFbGVtZW50KiwgY29uc3QgRmxvYXRSZWN0JiBjaGFuZ2VkUgogICAgIEludFJlY3QgaW1hZ2VD
aGFuZ2VSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChjaGFuZ2VkUmVjdCk7CiAgICAgUmVuZGVyT2Jq
ZWN0U2l6ZUNvdW50TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBjbGllbnRzKCkuZW5kKCk7CiAg
ICAgZm9yIChSZW5kZXJPYmplY3RTaXplQ291bnRNYXA6OmNvbnN0X2l0ZXJhdG9yIGN1cnIgPSBj
bGllbnRzKCkuYmVnaW4oKTsgY3VyciAhPSBlbmQ7ICsrY3VycikKLSAgICAgICAgY29uc3RfY2Fz
dDxSZW5kZXJPYmplY3QqPihjdXJyLT5maXJzdCktPmltYWdlQ2hhbmdlZChzdGF0aWNfY2FzdDxX
cmFwcGVkSW1hZ2VQdHI+KHRoaXMpLCAmaW1hZ2VDaGFuZ2VSZWN0KTsKKyAgICAgICAgY29uc3Rf
Y2FzdDxSZW5kZXJPYmplY3QqPihjdXJyLT5rZXkpLT5pbWFnZUNoYW5nZWQoc3RhdGljX2Nhc3Q8
V3JhcHBlZEltYWdlUHRyPih0aGlzKSwgJmltYWdlQ2hhbmdlUmVjdCk7CiB9CiAKIHZvaWQgQ1NT
Q2FudmFzVmFsdWU6OmNhbnZhc1Jlc2l6ZWQoSFRNTENhbnZhc0VsZW1lbnQqKQogewogICAgIFJl
bmRlck9iamVjdFNpemVDb3VudE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY2xpZW50cygpLmVu
ZCgpOwogICAgIGZvciAoUmVuZGVyT2JqZWN0U2l6ZUNvdW50TWFwOjpjb25zdF9pdGVyYXRvciBj
dXJyID0gY2xpZW50cygpLmJlZ2luKCk7IGN1cnIgIT0gZW5kOyArK2N1cnIpCi0gICAgICAgIGNv
bnN0X2Nhc3Q8UmVuZGVyT2JqZWN0Kj4oY3Vyci0+Zmlyc3QpLT5pbWFnZUNoYW5nZWQoc3RhdGlj
X2Nhc3Q8V3JhcHBlZEltYWdlUHRyPih0aGlzKSk7CisgICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVy
T2JqZWN0Kj4oY3Vyci0+a2V5KS0+aW1hZ2VDaGFuZ2VkKHN0YXRpY19jYXN0PFdyYXBwZWRJbWFn
ZVB0cj4odGhpcykpOwogfQogCiB2b2lkIENTU0NhbnZhc1ZhbHVlOjpjYW52YXNEZXN0cm95ZWQo
SFRNTENhbnZhc0VsZW1lbnQqIGVsZW1lbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCmluZGV4IGM1MGI1MmZjNGNlOGM5MjhmYjY0
Njc0ZjIyM2ZjZGE5ZmNkOTM5YjYuLjY2MzMwYzgxODI4MjlmNDBjODFlYjdmZTRkMzlmMWQyYTc2
NDRkYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVj
bGFyYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVj
bGFyYXRpb24uY3BwCkBAIC0xMjM5LDggKzEyMzksOCBAQCBzdGF0aWMgUGFzc1JlZlB0cjxDU1NW
YWx1ZT4gY291bnRlclRvQ1NTVmFsdWUoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBpbnQgcHJv
cAogCiAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRl
U3BhY2VTZXBhcmF0ZWQoKTsKICAgICBmb3IgKENvdW50ZXJEaXJlY3RpdmVNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBtYXAtPmVuZCgpOyArK2l0KSB7Ci0gICAg
ICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKGl0LT5maXJzdC5nZXQo
KSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpKTsKLSAgICAgICAgc2hvcnQgbnVtYmVy
ID0gcHJvcGVydHlJRCA9PSBDU1NQcm9wZXJ0eUNvdW50ZXJJbmNyZW1lbnQgPyBpdC0+c2Vjb25k
Lm1faW5jcmVtZW50VmFsdWUgOiBpdC0+c2Vjb25kLm1fcmVzZXRWYWx1ZTsKKyAgICAgICAgbGlz
dC0+YXBwZW5kKGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoaXQtPmtleS5nZXQoKSwgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpKTsKKyAgICAgICAgc2hvcnQgbnVtYmVyID0gcHJvcGVy
dHlJRCA9PSBDU1NQcm9wZXJ0eUNvdW50ZXJJbmNyZW1lbnQgPyBpdC0+dmFsdWUubV9pbmNyZW1l
bnRWYWx1ZSA6IGl0LT52YWx1ZS5tX3Jlc2V0VmFsdWU7CiAgICAgICAgIGxpc3QtPmFwcGVuZChj
c3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKChkb3VibGUpbnVtYmVyLCBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX05VTUJFUikpOwogICAgIH0KICAgICByZXR1cm4gbGlzdC5yZWxlYXNlKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Jvc3NmYWRlVmFsdWUuY3BwIGIvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0Nyb3NzZmFkZVZhbHVlLmNwcAppbmRleCA0ZmYwOGFmY2E1ZmQ0YTEw
NTVmNWVkMTVmZDFlOGZhOTI0MDRhNmUyLi5kYzQ5NDMwOTUwMmZmY2Q4ZWEwOThmMzQ1ZjY0Y2Rl
Y2E4NmUzZTdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Jvc3NmYWRlVmFs
dWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDcm9zc2ZhZGVWYWx1ZS5jcHAKQEAg
LTE2MSw3ICsxNjEsNyBAQCB2b2lkIENTU0Nyb3NzZmFkZVZhbHVlOjpjcm9zc2ZhZGVDaGFuZ2Vk
KGNvbnN0IEludFJlY3QmKQogewogICAgIFJlbmRlck9iamVjdFNpemVDb3VudE1hcDo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gY2xpZW50cygpLmVuZCgpOwogICAgIGZvciAoUmVuZGVyT2JqZWN0U2l6
ZUNvdW50TWFwOjpjb25zdF9pdGVyYXRvciBjdXJyID0gY2xpZW50cygpLmJlZ2luKCk7IGN1cnIg
IT0gZW5kOyArK2N1cnIpIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiBjbGllbnQgPSBjb25zdF9j
YXN0PFJlbmRlck9iamVjdCo+KGN1cnItPmZpcnN0KTsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBj
bGllbnQgPSBjb25zdF9jYXN0PFJlbmRlck9iamVjdCo+KGN1cnItPmtleSk7CiAgICAgICAgIGNs
aWVudC0+aW1hZ2VDaGFuZ2VkKHN0YXRpY19jYXN0PFdyYXBwZWRJbWFnZVB0cj4odGhpcykpOwog
ICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNvdXJj
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuY3BwCmluZGV4IGRk
OTA0ZDM3ZmI5NTRlNDRkYmE2NTM4NzY3MzU4MzExOThmYWQzZDcuLmNlNDUzNjdhYzMzMjM3MmEw
ZmI5ZWM4YzVhNTJmYjlmMDg4OWVkZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NGb250RmFjZVNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNl
U291cmNlLmNwcApAQCAtMTE0LDcgKzExNCw3IEBAIFNpbXBsZUZvbnREYXRhKiBDU1NGb250RmFj
ZVNvdXJjZTo6Z2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpCiAg
ICAgdW5zaWduZWQgaGFzaEtleSA9IChmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUo
KSArIDEpIDw8IDYgfCBmb250RGVzY3JpcHRpb24ud2lkdGhWYXJpYW50KCkgPDwgNAogICAgICAg
ICAgICAgICAgICAgICAgICB8IChmb250RGVzY3JpcHRpb24udGV4dE9yaWVudGF0aW9uKCkgPT0g
VGV4dE9yaWVudGF0aW9uVXByaWdodCA/IDggOiAwKSB8IChmb250RGVzY3JpcHRpb24ub3JpZW50
YXRpb24oKSA9PSBWZXJ0aWNhbCA/IDQgOiAwKSB8IChzeW50aGV0aWNCb2xkID8gMiA6IDApIHwg
KHN5bnRoZXRpY0l0YWxpYyA/IDEgOiAwKTsKIAotICAgIFNpbXBsZUZvbnREYXRhKiYgY2FjaGVk
RGF0YSA9IG1fZm9udERhdGFUYWJsZS5hZGQoaGFzaEtleSwgMCkuaXRlcmF0b3ItPnNlY29uZDsK
KyAgICBTaW1wbGVGb250RGF0YSomIGNhY2hlZERhdGEgPSBtX2ZvbnREYXRhVGFibGUuYWRkKGhh
c2hLZXksIDApLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoY2FjaGVkRGF0YSkKICAgICAgICAg
cmV0dXJuIGNhY2hlZERhdGE7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NG
b250U2VsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAK
aW5kZXggZTAwMmYyZjhmMDE3MGU5OGNhNTZkNzFmZTVjZGI5N2JiZWE2MmI4NS4uYjkwYmJlOGY1
OTczYWQ3MjQyNzM1ODFhNTNhZWE0NzIzOTUyMDVmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Zv
bnRTZWxlY3Rvci5jcHAKQEAgLTI4NSw3ICsyODUsNyBAQCB2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6
YWRkRm9udEZhY2VSdWxlKGNvbnN0IENTU0ZvbnRGYWNlUnVsZSogZm9udEZhY2VSdWxlKQogICAg
ICAgICBpZiAoZmFtaWx5TmFtZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAot
ICAgICAgICBPd25QdHI8VmVjdG9yPFJlZlB0cjxDU1NGb250RmFjZT4gPiA+JiBmYW1pbHlGb250
RmFjZXMgPSBtX2ZvbnRGYWNlcy5hZGQoZmFtaWx5TmFtZSwgbnVsbHB0cikuaXRlcmF0b3ItPnNl
Y29uZDsKKyAgICAgICAgT3duUHRyPFZlY3RvcjxSZWZQdHI8Q1NTRm9udEZhY2U+ID4gPiYgZmFt
aWx5Rm9udEZhY2VzID0gbV9mb250RmFjZXMuYWRkKGZhbWlseU5hbWUsIG51bGxwdHIpLml0ZXJh
dG9yLT52YWx1ZTsKICAgICAgICAgaWYgKCFmYW1pbHlGb250RmFjZXMpIHsKICAgICAgICAgICAg
IGZhbWlseUZvbnRGYWNlcyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8UmVmUHRyPENTU0ZvbnRGYWNl
PiA+KTsKIApAQCAtNDg3LDEzICs0ODcsMTMgQEAgRm9udERhdGEqIENTU0ZvbnRTZWxlY3Rvcjo6
Z2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGMKICAg
ICAgICAgcmV0dXJuIGZvbnREYXRhRm9yR2VuZXJpY0ZhbWlseShtX2RvY3VtZW50LCBmb250RGVz
Y3JpcHRpb24sIGZhbWlseU5hbWUpOwogICAgIH0KIAotICAgIE93blB0cjxIYXNoTWFwPHVuc2ln
bmVkLCBSZWZQdHI8Q1NTU2VnbWVudGVkRm9udEZhY2U+ID4gPiYgc2VnbWVudGVkRm9udEZhY2VD
YWNoZSA9IG1fZm9udHMuYWRkKGZhbWlseSwgbnVsbHB0cikuaXRlcmF0b3ItPnNlY29uZDsKKyAg
ICBPd25QdHI8SGFzaE1hcDx1bnNpZ25lZCwgUmVmUHRyPENTU1NlZ21lbnRlZEZvbnRGYWNlPiA+
ID4mIHNlZ21lbnRlZEZvbnRGYWNlQ2FjaGUgPSBtX2ZvbnRzLmFkZChmYW1pbHksIG51bGxwdHIp
Lml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoIXNlZ21lbnRlZEZvbnRGYWNlQ2FjaGUpCiAgICAg
ICAgIHNlZ21lbnRlZEZvbnRGYWNlQ2FjaGUgPSBhZG9wdFB0cihuZXcgSGFzaE1hcDx1bnNpZ25l
ZCwgUmVmUHRyPENTU1NlZ21lbnRlZEZvbnRGYWNlPiA+KTsKIAogICAgIEZvbnRUcmFpdHNNYXNr
IHRyYWl0c01hc2sgPSBmb250RGVzY3JpcHRpb24udHJhaXRzTWFzaygpOwogCi0gICAgUmVmUHRy
PENTU1NlZ21lbnRlZEZvbnRGYWNlPiYgZmFjZSA9IHNlZ21lbnRlZEZvbnRGYWNlQ2FjaGUtPmFk
ZCh0cmFpdHNNYXNrLCAwKS5pdGVyYXRvci0+c2Vjb25kOworICAgIFJlZlB0cjxDU1NTZWdtZW50
ZWRGb250RmFjZT4mIGZhY2UgPSBzZWdtZW50ZWRGb250RmFjZUNhY2hlLT5hZGQodHJhaXRzTWFz
aywgMCkuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghZmFjZSkgewogICAgICAgICBmYWNlID0g
Q1NTU2VnbWVudGVkRm9udEZhY2U6OmNyZWF0ZSh0aGlzKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUuY3BwCmluZGV4IDliZTQ0NmJkMGZiODViMDY0ZDY5
ZjE4NjMyNjk5YTAzOWEwYWMxZDYuLmEzNDFlMmZjYWU1NzliZDcyOTIxZDZiZjM4MjdkOTJmMmYw
YTlhNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZUdlbmVyYXRvclZh
bHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5j
cHAKQEAgLTU2LDcgKzU2LDcgQEAgdm9pZCBDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjphZGRDbGll
bnQoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgSW50U2l6ZSYgc2kKICAgICBpZiAoaXQg
PT0gbV9jbGllbnRzLmVuZCgpKQogICAgICAgICBtX2NsaWVudHMuYWRkKHJlbmRlcmVyLCBTaXpl
QW5kQ291bnQoc2l6ZSwgMSkpOwogICAgIGVsc2UgewotICAgICAgICBTaXplQW5kQ291bnQmIHNp
emVDb3VudCA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFNpemVBbmRDb3VudCYgc2l6ZUNvdW50ID0g
aXQtPnZhbHVlOwogICAgICAgICArK3NpemVDb3VudC5jb3VudDsKICAgICB9CiB9CkBAIC02OCw3
ICs2OCw3IEBAIHZvaWQgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6cmVtb3ZlQ2xpZW50KFJlbmRl
ck9iamVjdCogcmVuZGVyZXIpCiAgICAgQVNTRVJUKGl0ICE9IG1fY2xpZW50cy5lbmQoKSk7CiAK
ICAgICBJbnRTaXplIHJlbW92ZWRJbWFnZVNpemU7Ci0gICAgU2l6ZUFuZENvdW50JiBzaXplQ291
bnQgPSBpdC0+c2Vjb25kOworICAgIFNpemVBbmRDb3VudCYgc2l6ZUNvdW50ID0gaXQtPnZhbHVl
OwogICAgIEludFNpemUgc2l6ZSA9IHNpemVDb3VudC5zaXplOwogICAgIGlmICghc2l6ZS5pc0Vt
cHR5KCkpIHsKICAgICAgICAgbV9zaXplcy5yZW1vdmUoc2l6ZSk7CkBAIC04Niw3ICs4Niw3IEBA
IEltYWdlKiBDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjpnZXRJbWFnZShSZW5kZXJPYmplY3QqIHJl
bmRlcmVyLCBjb25zdCBJbnRTaXplJiBzCiB7CiAgICAgUmVuZGVyT2JqZWN0U2l6ZUNvdW50TWFw
OjppdGVyYXRvciBpdCA9IG1fY2xpZW50cy5maW5kKHJlbmRlcmVyKTsKICAgICBpZiAoaXQgIT0g
bV9jbGllbnRzLmVuZCgpKSB7Ci0gICAgICAgIFNpemVBbmRDb3VudCYgc2l6ZUNvdW50ID0gaXQt
PnNlY29uZDsKKyAgICAgICAgU2l6ZUFuZENvdW50JiBzaXplQ291bnQgPSBpdC0+dmFsdWU7CiAg
ICAgICAgIEludFNpemUgb2xkU2l6ZSA9IHNpemVDb3VudC5zaXplOwogICAgICAgICBpZiAob2xk
U2l6ZSAhPSBzaXplKSB7CiAgICAgICAgICAgICBSZWZQdHI8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1
ZT4gcHJvdGVjdCh0aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWdt
ZW50ZWRGb250RmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VnbWVudGVkRm9udEZh
Y2UuY3BwCmluZGV4IGNmOWVjOWUyZWQyZjlmZWYyYmJkOTRmZjY1ZTBhYWUzMmEzODQxMDIuLmFk
MmU5ZTI1YjA0MDA0MGQ0NmE3ZWZmYzdjMDgyYWE1NTA5NWY5NDggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmNwcApAQCAtMTA2LDcgKzEwNiw3IEBAIEZvbnRE
YXRhKiBDU1NTZWdtZW50ZWRGb250RmFjZTo6Z2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0
aW9uJiBmb250RGVzY3JpcHRpCiAgICAgRm9udFRyYWl0c01hc2sgZGVzaXJlZFRyYWl0c01hc2sg
PSBmb250RGVzY3JpcHRpb24udHJhaXRzTWFzaygpOwogICAgIHVuc2lnbmVkIGhhc2hLZXkgPSAo
KGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpICsgMSkgPDwgKEZvbnRUcmFpdHNN
YXNrV2lkdGggKyAxKSkgfCAoKGZvbnREZXNjcmlwdGlvbi5vcmllbnRhdGlvbigpID09IFZlcnRp
Y2FsID8gMSA6IDApIDw8IEZvbnRUcmFpdHNNYXNrV2lkdGgpIHwgZGVzaXJlZFRyYWl0c01hc2s7
CiAKLSAgICBTZWdtZW50ZWRGb250RGF0YSomIGZvbnREYXRhID0gbV9mb250RGF0YVRhYmxlLmFk
ZChoYXNoS2V5LCAwKS5pdGVyYXRvci0+c2Vjb25kOworICAgIFNlZ21lbnRlZEZvbnREYXRhKiYg
Zm9udERhdGEgPSBtX2ZvbnREYXRhVGFibGUuYWRkKGhhc2hLZXksIDApLml0ZXJhdG9yLT52YWx1
ZTsKICAgICBpZiAoZm9udERhdGEpCiAgICAgICAgIHJldHVybiBmb250RGF0YTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlbGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NTZWxlY3Rvci5jcHAKaW5kZXggYWVlMTlmNmU5YjA0OGI0NGZhZmFiNjNkZDg1NThl
ODFiYjIxMGZhZi4uZDBmNTUwNDBlNWI4OGEzOGNhOTZjZjMwYzEzZDViOGU2ODExZjdiZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlbGVjdG9yLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTU2VsZWN0b3IuY3BwCkBAIC0zODgsNyArMzg4LDcgQEAgQ1NTU2VsZWN0
b3I6OlBzZXVkb1R5cGUgQ1NTU2VsZWN0b3I6OnBhcnNlUHNldWRvVHlwZShjb25zdCBBdG9taWNT
dHJpbmcmIG5hbWUpCiAgICAgICAgIHJldHVybiBQc2V1ZG9Vbmtub3duOwogICAgIEhhc2hNYXA8
QXRvbWljU3RyaW5nSW1wbCosIENTU1NlbGVjdG9yOjpQc2V1ZG9UeXBlPiogbmFtZVRvUHNldWRv
VHlwZSA9IG5hbWVUb1BzZXVkb1R5cGVNYXAoKTsKICAgICBIYXNoTWFwPEF0b21pY1N0cmluZ0lt
cGwqLCBDU1NTZWxlY3Rvcjo6UHNldWRvVHlwZT46Oml0ZXJhdG9yIHNsb3QgPSBuYW1lVG9Qc2V1
ZG9UeXBlLT5maW5kKG5hbWUuaW1wbCgpKTsKLSAgICByZXR1cm4gc2xvdCA9PSBuYW1lVG9Qc2V1
ZG9UeXBlLT5lbmQoKSA/IFBzZXVkb1Vua25vd24gOiBzbG90LT5zZWNvbmQ7CisgICAgcmV0dXJu
IHNsb3QgPT0gbmFtZVRvUHNldWRvVHlwZS0+ZW5kKCkgPyBQc2V1ZG9Vbmtub3duIDogc2xvdC0+
dmFsdWU7CiB9CiAKIGJvb2wgQ1NTU2VsZWN0b3I6OmlzVW5rbm93blBzZXVkb1R5cGUoY29uc3Qg
QXRvbWljU3RyaW5nJiBuYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0
eWxlQXBwbHlQcm9wZXJ0eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVBcHBseVBy
b3BlcnR5LmNwcAppbmRleCAzMDYxZjA1NWZiN2UxYzlhOTIzOThkMzlkZTYxMzllOTQxZTNiNTU2
Li44YzNkYmI3ZWZiMWQ5MTFhMWFhMWUxY2M5Y2ZhOWU0NmM0NDc3M2VjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVBcHBseVByb3BlcnR5LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTU3R5bGVBcHBseVByb3BlcnR5LmNwcApAQCAtMTAwNCwyMSArMTAwNCwy
MSBAQCBwdWJsaWM6CiAgICAgICAgIHR5cGVkZWYgQ291bnRlckRpcmVjdGl2ZU1hcDo6aXRlcmF0
b3IgSXRlcmF0b3I7CiAgICAgICAgIEl0ZXJhdG9yIGVuZCA9IHBhcmVudE1hcC5lbmQoKTsKICAg
ICAgICAgZm9yIChJdGVyYXRvciBpdCA9IHBhcmVudE1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKLSAgICAgICAgICAgIENvdW50ZXJEaXJlY3RpdmVzJiBkaXJlY3RpdmVzID0gbWFwLmFk
ZChpdC0+Zmlyc3QsIENvdW50ZXJEaXJlY3RpdmVzKCkpLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAg
ICAgICAgICBDb3VudGVyRGlyZWN0aXZlcyYgZGlyZWN0aXZlcyA9IG1hcC5hZGQoaXQtPmtleSwg
Q291bnRlckRpcmVjdGl2ZXMoKSkuaXRlcmF0b3ItPnZhbHVlOwogICAgICAgICAgICAgaWYgKGNv
dW50ZXJCZWhhdmlvciA9PSBSZXNldCkgewotICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXMubV9y
ZXNldCA9IGl0LT5zZWNvbmQubV9yZXNldDsKLSAgICAgICAgICAgICAgICBkaXJlY3RpdmVzLm1f
cmVzZXRWYWx1ZSA9IGl0LT5zZWNvbmQubV9yZXNldFZhbHVlOworICAgICAgICAgICAgICAgIGRp
cmVjdGl2ZXMubV9yZXNldCA9IGl0LT52YWx1ZS5tX3Jlc2V0OworICAgICAgICAgICAgICAgIGRp
cmVjdGl2ZXMubV9yZXNldFZhbHVlID0gaXQtPnZhbHVlLm1fcmVzZXRWYWx1ZTsKICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gSW5oZXJpdGluZyBhIGNvdW50ZXItaW5j
cmVtZW50IG1lYW5zIHRha2luZyB0aGUgcGFyZW50J3MgY3VycmVudCB2YWx1ZSBmb3IgdGhlIGNv
dW50ZXIKICAgICAgICAgICAgICAgICAvLyBhbmQgYWRkaW5nIGl0IHRvIGl0c2VsZi4KLSAgICAg
ICAgICAgICAgICBkaXJlY3RpdmVzLm1faW5jcmVtZW50ID0gaXQtPnNlY29uZC5tX2luY3JlbWVu
dDsKKyAgICAgICAgICAgICAgICBkaXJlY3RpdmVzLm1faW5jcmVtZW50ID0gaXQtPnZhbHVlLm1f
aW5jcmVtZW50OwogICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXMubV9pbmNyZW1lbnRWYWx1ZSA9
IDA7CiAgICAgICAgICAgICAgICAgaWYgKGRpcmVjdGl2ZXMubV9pbmNyZW1lbnQpIHsKICAgICAg
ICAgICAgICAgICAgICAgZmxvYXQgaW5jcmVtZW50VmFsdWUgPSBkaXJlY3RpdmVzLm1faW5jcmVt
ZW50VmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXMubV9pbmNyZW1lbnRWYWx1
ZSA9IGNsYW1wVG9JbnRlZ2VyKGluY3JlbWVudFZhbHVlICsgaXQtPnNlY29uZC5tX2luY3JlbWVu
dFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlcy5tX2luY3JlbWVudFZhbHVl
ID0gY2xhbXBUb0ludGVnZXIoaW5jcmVtZW50VmFsdWUgKyBpdC0+dmFsdWUubV9pbmNyZW1lbnRW
YWx1ZSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgZGly
ZWN0aXZlcy5tX2luY3JlbWVudCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2
ZXMubV9pbmNyZW1lbnRWYWx1ZSA9IGl0LT5zZWNvbmQubV9pbmNyZW1lbnRWYWx1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgZGlyZWN0aXZlcy5tX2luY3JlbWVudFZhbHVlID0gaXQtPnZhbHVlLm1f
aW5jcmVtZW50VmFsdWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAg
ICB9CkBAIC0xMDM2LDkgKzEwMzYsOSBAQCBwdWJsaWM6CiAgICAgICAgIEl0ZXJhdG9yIGVuZCA9
IG1hcC5lbmQoKTsKICAgICAgICAgZm9yIChJdGVyYXRvciBpdCA9IG1hcC5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCiAgICAgICAgICAgICBpZiAoY291bnRlckJlaGF2aW9yID09IFJlc2V0KQot
ICAgICAgICAgICAgICAgIGl0LT5zZWNvbmQubV9yZXNldCA9IGZhbHNlOworICAgICAgICAgICAg
ICAgIGl0LT52YWx1ZS5tX3Jlc2V0ID0gZmFsc2U7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgaXQtPnNlY29uZC5tX2luY3JlbWVudCA9IGZhbHNlOworICAgICAgICAgICAgICAg
IGl0LT52YWx1ZS5tX2luY3JlbWVudCA9IGZhbHNlOwogCiAgICAgICAgIGludCBsZW5ndGggPSBs
aXN0ID8gbGlzdC0+bGVuZ3RoKCkgOiAwOwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxl
bmd0aDsgKytpKSB7CkBAIC0xMDUyLDcgKzEwNTIsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgICAg
IEF0b21pY1N0cmluZyBpZGVudGlmaWVyID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUq
PihwYWlyLT5maXJzdCgpKS0+Z2V0U3RyaW5nVmFsdWUoKTsKICAgICAgICAgICAgIGludCB2YWx1
ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4ocGFpci0+c2Vjb25kKCkpLT5nZXRJ
bnRWYWx1ZSgpOwotICAgICAgICAgICAgQ291bnRlckRpcmVjdGl2ZXMmIGRpcmVjdGl2ZXMgPSBt
YXAuYWRkKGlkZW50aWZpZXIuaW1wbCgpLCBDb3VudGVyRGlyZWN0aXZlcygpKS5pdGVyYXRvci0+
c2Vjb25kOworICAgICAgICAgICAgQ291bnRlckRpcmVjdGl2ZXMmIGRpcmVjdGl2ZXMgPSBtYXAu
YWRkKGlkZW50aWZpZXIuaW1wbCgpLCBDb3VudGVyRGlyZWN0aXZlcygpKS5pdGVyYXRvci0+dmFs
dWU7CiAgICAgICAgICAgICBpZiAoY291bnRlckJlaGF2aW9yID09IFJlc2V0KSB7CiAgICAgICAg
ICAgICAgICAgZGlyZWN0aXZlcy5tX3Jlc2V0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBkaXJl
Y3RpdmVzLm1fcmVzZXRWYWx1ZSA9IHZhbHVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2Vs
ZWN0b3IuY3BwCmluZGV4IDhmYzYzOTIyMTQxMzVkZGMzNzU3YTExYmJiNWE2YTRlOTI0ZWZkMDcu
LmE4MDNlNDgyYmY5NWQ4NDU4YzY4YzA4NGRkMzJlNWMzMTJkM2RhYmEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKQEAgLTQ1NSw3ICs0NTUsNyBAQCB2b2lkIENTU1N0
eWxlU2VsZWN0b3I6OmNvbGxlY3RGZWF0dXJlcygpCiAgICAgbV9mZWF0dXJlcy5hZGQobV9hdXRo
b3JTdHlsZS0+ZmVhdHVyZXMoKSk7CiAjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKICAgICBmb3Ig
KFNjb3BlZFJ1bGVTZXRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zY29wZWRBdXRob3JTdHlsZXMuYmVn
aW4oKTsgaXQgIT0gbV9zY29wZWRBdXRob3JTdHlsZXMuZW5kKCk7ICsraXQpCi0gICAgICAgIG1f
ZmVhdHVyZXMuYWRkKGl0LT5zZWNvbmQtPmZlYXR1cmVzKCkpOworICAgICAgICBtX2ZlYXR1cmVz
LmFkZChpdC0+dmFsdWUtPmZlYXR1cmVzKCkpOwogI2VuZGlmCiAgICAgaWYgKG1fdXNlclN0eWxl
KQogICAgICAgICBtX2ZlYXR1cmVzLmFkZChtX3VzZXJTdHlsZS0+ZmVhdHVyZXMoKSk7CkBAIC00
OTIsNyArNDkyLDcgQEAgaW5saW5lIFJ1bGVTZXQqIENTU1N0eWxlU2VsZWN0b3I6OnJ1bGVTZXRG
b3JTY29wZShjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSkgY28KICAgICBpZiAoIXNjb3BlLT5o
YXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpKQogICAgICAgICByZXR1cm4gMDsKICAgICBTY29wZWRS
dWxlU2V0TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fc2NvcGVkQXV0aG9yU3R5bGVzLmZpbmQo
c2NvcGUpOwotICAgIHJldHVybiBpdCAhPSBtX3Njb3BlZEF1dGhvclN0eWxlcy5lbmQoKSA/IGl0
LT5zZWNvbmQuZ2V0KCkgOiAwOyAKKyAgICByZXR1cm4gaXQgIT0gbV9zY29wZWRBdXRob3JTdHls
ZXMuZW5kKCkgPyBpdC0+dmFsdWUuZ2V0KCkgOiAwOyAKIH0KICNlbmRpZgogCkBAIC01MTAsOCAr
NTEwLDggQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBlbmRBdXRob3JTdHlsZXNoZWV0cyh1
bnNpZ25lZCBmaXJzdE5ldywgY29uc3QgVmVjdG9yPFIKICAgICAgICAgaWYgKHNjb3BlKSB7CiAg
ICAgICAgICAgICBTY29wZWRSdWxlU2V0TWFwOjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gbV9zY29w
ZWRBdXRob3JTdHlsZXMuYWRkKHNjb3BlLCBudWxscHRyKTsKICAgICAgICAgICAgIGlmIChhZGRS
ZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnNl
Y29uZCA9IFJ1bGVTZXQ6OmNyZWF0ZSgpOwotICAgICAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9y
LT5zZWNvbmQtPmFkZFJ1bGVzRnJvbVNoZWV0KGNzc1NoZWV0LCAqbV9tZWRpdW0sIHRoaXMsIHNj
b3BlKTsKKyAgICAgICAgICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gUnVsZVNl
dDo6Y3JlYXRlKCk7CisgICAgICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5hZGRS
dWxlc0Zyb21TaGVldChjc3NTaGVldCwgKm1fbWVkaXVtLCB0aGlzLCBzY29wZSk7CiAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgfQogI2VuZGlmCkBAIC02MzIsMTAgKzYzMiwxMCBAQCB2
b2lkIENTU1N0eWxlU2VsZWN0b3I6OnN3ZWVwTWF0Y2hlZFByb3BlcnRpZXNDYWNoZSgpCiAgICAg
TWF0Y2hlZFByb3BlcnRpZXNDYWNoZTo6aXRlcmF0b3IgaXQgPSBtX21hdGNoZWRQcm9wZXJ0aWVz
Q2FjaGUuYmVnaW4oKTsKICAgICBNYXRjaGVkUHJvcGVydGllc0NhY2hlOjppdGVyYXRvciBlbmQg
PSBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUuZW5kKCk7CiAgICAgZm9yICg7IGl0ICE9IGVuZDsg
KytpdCkgewotICAgICAgICBWZWN0b3I8TWF0Y2hlZFByb3BlcnRpZXM+JiBtYXRjaGVkUHJvcGVy
dGllcyA9IGl0LT5zZWNvbmQubWF0Y2hlZFByb3BlcnRpZXM7CisgICAgICAgIFZlY3RvcjxNYXRj
aGVkUHJvcGVydGllcz4mIG1hdGNoZWRQcm9wZXJ0aWVzID0gaXQtPnZhbHVlLm1hdGNoZWRQcm9w
ZXJ0aWVzOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1hdGNoZWRQcm9wZXJ0aWVz
LnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBpZiAobWF0Y2hlZFByb3BlcnRpZXNbaV0ucHJv
cGVydGllcy0+aGFzT25lUmVmKCkpIHsKLSAgICAgICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQo
aXQtPmZpcnN0KTsKKyAgICAgICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQoaXQtPmtleSk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE3MDQs
NyArMTcwNCw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6a2V5ZnJhbWVTdHlsZXNGb3JBbmlt
YXRpb24oRWxlbWVudCogZSwgY29uc3QgUmVuZGVyU3R5bGUqCiAgICAgaWYgKGl0ID09IG1fa2V5
ZnJhbWVzUnVsZU1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY29uc3QgV2ViS2l0
Q1NTS2V5ZnJhbWVzUnVsZSoga2V5ZnJhbWVzUnVsZSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAg
Y29uc3QgV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZSoga2V5ZnJhbWVzUnVsZSA9IGl0LT52YWx1ZS5n
ZXQoKTsKIAogICAgIC8vIENvbnN0cnVjdCBhbmQgcG9wdWxhdGUgdGhlIHN0eWxlIGZvciBlYWNo
IGtleWZyYW1lCiAgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZUtleWZyYW1lPiA+JiBrZXlm
cmFtZXMgPSBrZXlmcmFtZXNSdWxlLT5rZXlmcmFtZXMoKTsKQEAgLTIzODUsNyArMjM4NSw3IEBA
IHZvaWQgUnVsZVNldDo6YWRkVG9SdWxlU2V0KEF0b21pY1N0cmluZ0ltcGwqIGtleSwgQXRvbVJ1
bGVNYXAmIG1hcCwgY29uc3QgUnVsZURhCiB7CiAgICAgaWYgKCFrZXkpCiAgICAgICAgIHJldHVy
bjsKLSAgICBPd25QdHI8VmVjdG9yPFJ1bGVEYXRhPiA+JiBydWxlcyA9IG1hcC5hZGQoa2V5LCBu
dWxscHRyKS5pdGVyYXRvci0+c2Vjb25kOworICAgIE93blB0cjxWZWN0b3I8UnVsZURhdGE+ID4m
IHJ1bGVzID0gbWFwLmFkZChrZXksIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAo
IXJ1bGVzKQogICAgICAgICBydWxlcyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8UnVsZURhdGE+KTsK
ICAgICBydWxlcy0+YXBwZW5kKHJ1bGVEYXRhKTsKQEAgLTI1NDUsNyArMjU0NSw3IEBAIHN0YXRp
YyBpbmxpbmUgdm9pZCBzaHJpbmtNYXBWZWN0b3JzVG9GaXQoUnVsZVNldDo6QXRvbVJ1bGVNYXAm
IG1hcCkKIHsKICAgICBSdWxlU2V0OjpBdG9tUnVsZU1hcDo6aXRlcmF0b3IgZW5kID0gbWFwLmVu
ZCgpOwogICAgIGZvciAoUnVsZVNldDo6QXRvbVJ1bGVNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+c2hyaW5rVG9GaXQo
KTsKKyAgICAgICAgaXQtPnZhbHVlLT5zaHJpbmtUb0ZpdCgpOwogfQogCiB2b2lkIFJ1bGVTZXQ6
OnNocmlua1RvRml0KCkKQEAgLTI2ODEsNyArMjY4MSw3IEBAIGNvbnN0IENTU1N0eWxlU2VsZWN0
b3I6Ok1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVJdGVtKiBDU1NTdHlsZVNlbGVjdG9yOjpmaW5kRnJv
bU1hCiAgICAgTWF0Y2hlZFByb3BlcnRpZXNDYWNoZTo6aXRlcmF0b3IgaXQgPSBtX21hdGNoZWRQ
cm9wZXJ0aWVzQ2FjaGUuZmluZChoYXNoKTsKICAgICBpZiAoaXQgPT0gbV9tYXRjaGVkUHJvcGVy
dGllc0NhY2hlLmVuZCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBNYXRjaGVkUHJvcGVydGll
c0NhY2hlSXRlbSYgY2FjaGVJdGVtID0gaXQtPnNlY29uZDsKKyAgICBNYXRjaGVkUHJvcGVydGll
c0NhY2hlSXRlbSYgY2FjaGVJdGVtID0gaXQtPnZhbHVlOwogCiAgICAgc2l6ZV90IHNpemUgPSBt
YXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCk7CiAgICAgaWYgKHNpemUgIT0gY2Fj
aGVJdGVtLm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NWYWx1ZVBvb2wuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlUG9v
bC5jcHAKaW5kZXggMDViYTU0OTUwMmFmYjg3Njc3ZjI1MzEyYmYxM2FiNjQ5NzY5YTQ2MS4uMWM0
NjEwMzg4OGM0ZTJjZTY5MGZjZmNkMWE4OTFmOWYwYTU0MzMxOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvY3NzL0NTU1ZhbHVlUG9vbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1ZhbHVlUG9vbC5jcHAKQEAgLTU3LDggKzU3LDggQEAgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gQ1NTVmFsdWVQb29sOjpjcmVhdGVJZGVudGlmaWVyVmFsdWUoaW50IGlkZW50KQogICAg
IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gZHVtbXlWYWx1ZTsKICAgICBJZGVudGlmaWVyVmFs
dWVDYWNoZTo6QWRkUmVzdWx0IGVudHJ5ID0gbV9pZGVudGlmaWVyVmFsdWVDYWNoZS5hZGQoaWRl
bnQsIGR1bW15VmFsdWUpOwogICAgIGlmIChlbnRyeS5pc05ld0VudHJ5KQotICAgICAgICBlbnRy
eS5pdGVyYXRvci0+c2Vjb25kID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIo
aWRlbnQpOwotICAgIHJldHVybiBlbnRyeS5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICBlbnRy
eS5pdGVyYXRvci0+dmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcihp
ZGVudCk7CisgICAgcmV0dXJuIGVudHJ5Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIAogUGFzc1JlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NTVmFsdWVQb29sOjpjcmVhdGVDb2xvclZhbHVlKHVuc2ln
bmVkIHJnYlZhbHVlKQpAQCAtODAsOCArODAsOCBAQCBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBDU1NWYWx1ZVBvb2w6OmNyZWF0ZUNvbG9yVmFsdWUodW5zaWduZWQgcmdiVmFsdWUpCiAg
ICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBkdW1teVZhbHVlOwogICAgIENvbG9yVmFsdWVD
YWNoZTo6QWRkUmVzdWx0IGVudHJ5ID0gbV9jb2xvclZhbHVlQ2FjaGUuYWRkKHJnYlZhbHVlLCBk
dW1teVZhbHVlKTsKICAgICBpZiAoZW50cnkuaXNOZXdFbnRyeSkKLSAgICAgICAgZW50cnkuaXRl
cmF0b3ItPnNlY29uZCA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVDb2xvcihyZ2JWYWx1ZSk7
Ci0gICAgcmV0dXJuIGVudHJ5Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgIGVudHJ5Lml0ZXJh
dG9yLT52YWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVDb2xvcihyZ2JWYWx1ZSk7Cisg
ICAgcmV0dXJuIGVudHJ5Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIAogUGFzc1JlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4gQ1NTVmFsdWVQb29sOjpjcmVhdGVWYWx1ZShkb3VibGUgdmFsdWUsIENTU1By
aW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMgdHlwZSkKQEAgLTExOSwxMyArMTE5LDEzIEBAIFBhc3NS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IENTU1ZhbHVlUG9vbDo6Y3JlYXRlVmFsdWUoZG91Ymxl
IHZhbHVlLCBDU1NQcmltaXRpCiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBkdW1teVZh
bHVlOwogICAgIEludGVnZXJWYWx1ZUNhY2hlOjpBZGRSZXN1bHQgZW50cnkgPSBjYWNoZS0+YWRk
KGludFZhbHVlLCBkdW1teVZhbHVlKTsKICAgICBpZiAoZW50cnkuaXNOZXdFbnRyeSkKLSAgICAg
ICAgZW50cnkuaXRlcmF0b3ItPnNlY29uZCA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFs
dWUsIHR5cGUpOwotICAgIHJldHVybiBlbnRyeS5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICBl
bnRyeS5pdGVyYXRvci0+dmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZhbHVlLCB0
eXBlKTsKKyAgICByZXR1cm4gZW50cnkuaXRlcmF0b3ItPnZhbHVlOwogfQogCiBQYXNzUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NWYWx1ZVBvb2w6OmNyZWF0ZUZvbnRGYW1pbHlWYWx1ZShj
b25zdCBTdHJpbmcmIGZhbWlseU5hbWUpCiB7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiYgdmFsdWUgPSBtX2ZvbnRGYW1pbHlWYWx1ZUNhY2hlLmFkZChmYW1pbHlOYW1lLCAwKS5pdGVy
YXRvci0+c2Vjb25kOworICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mIHZhbHVlID0gbV9m
b250RmFtaWx5VmFsdWVDYWNoZS5hZGQoZmFtaWx5TmFtZSwgMCkuaXRlcmF0b3ItPnZhbHVlOwog
ICAgIGlmICghdmFsdWUpCiAgICAgICAgIHZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0
ZShmYW1pbHlOYW1lLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORyk7CiAgICAgcmV0dXJu
IHZhbHVlOwpAQCAtMTM4LDcgKzEzOCw3IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWVMaXN0PiBDU1NW
YWx1ZVBvb2w6OmNyZWF0ZUZvbnRGYWNlVmFsdWUoY29uc3QgQXRvbWljU3RyaW5nJiBzCiAgICAg
aWYgKG1fZm9udEZhY2VWYWx1ZUNhY2hlLnNpemUoKSA+IG1heGltdW1Gb250RmFjZUNhY2hlU2l6
ZSkKICAgICAgICAgbV9mb250RmFjZVZhbHVlQ2FjaGUuY2xlYXIoKTsKIAotICAgIFJlZlB0cjxD
U1NWYWx1ZUxpc3Q+JiB2YWx1ZSA9IG1fZm9udEZhY2VWYWx1ZUNhY2hlLmFkZChzdHJpbmcsIDAp
Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4mIHZhbHVlID0gbV9m
b250RmFjZVZhbHVlQ2FjaGUuYWRkKHN0cmluZywgMCkuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlm
ICghdmFsdWUpCiAgICAgICAgIHZhbHVlID0gQ1NTUGFyc2VyOjpwYXJzZUZvbnRGYWNlVmFsdWUo
c3RyaW5nLCBjb250ZXh0U3R5bGVTaGVldCk7CiAgICAgcmV0dXJuIHZhbHVlOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydHlTZXQuY3BwIGIvU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlUHJvcGVydHlTZXQuY3BwCmluZGV4IDg3MzQ5OGRlYzQ2Mzg5ZTZlMzU1Njlh
N2EyYjY5YTExZGY0N2VjMzMuLjNhMzQ4ZjE4YjRlMjdjM2Q0MDcyYWZkOGM5ODFlYzdmYTQ4ODIz
ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnR5U2V0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0eVNldC5jcHAKQEAgLTcxLDcgKzcx
LDcgQEAgU3R5bGVQcm9wZXJ0eVNldDo6U3R5bGVQcm9wZXJ0eVNldChjb25zdCBDU1NQcm9wZXJ0
eSogcHJvcGVydGllcywgaW50IG51bVByb3BlcnQKIAogICAgICAgICBIYXNoTWFwPGludCwgYm9v
bD46Oml0ZXJhdG9yIGl0ID0gY2FuZGlkYXRlcy5maW5kKHByb3BlcnR5LmlkKCkpOwogICAgICAg
ICBpZiAoaXQgIT0gY2FuZGlkYXRlcy5lbmQoKSkgewotICAgICAgICAgICAgaWYgKCFpbXBvcnRh
bnQgJiYgaXQtPnNlY29uZCkKKyAgICAgICAgICAgIGlmICghaW1wb3J0YW50ICYmIGl0LT52YWx1
ZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIHJlbW92ZVByb3BlcnR5
KHByb3BlcnR5LmlkKCkpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vQ2hlY2tlZFJhZGlvQnV0dG9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hlY2tlZFJh
ZGlvQnV0dG9ucy5jcHAKaW5kZXggZTY3MjMyOWFmOGRlMzc4YmVmZGZjMTRmOGFjYmQwZjJlYzBj
NzQwNS4uOWZhNTA5YmI5NTFkMzgwOTE0MDAwMDExZWU1Y2U2NTE0YTk4ZDQ2YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL0NoZWNrZWRSYWRpb0J1dHRvbnMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9DaGVja2VkUmFkaW9CdXR0b25zLmNwcApAQCAtMTg1LDcgKzE4NSw3IEBA
IHZvaWQgQ2hlY2tlZFJhZGlvQnV0dG9uczo6YWRkQnV0dG9uKEhUTUxJbnB1dEVsZW1lbnQqIGVs
ZW1lbnQpCiAgICAgaWYgKCFtX25hbWVUb0dyb3VwTWFwKQogICAgICAgICBtX25hbWVUb0dyb3Vw
TWFwID0gYWRvcHRQdHIobmV3IE5hbWVUb0dyb3VwTWFwKTsKIAotICAgIE93blB0cjxSYWRpb0J1
dHRvbkdyb3VwPiYgZ3JvdXAgPSBtX25hbWVUb0dyb3VwTWFwLT5hZGQoZWxlbWVudC0+bmFtZSgp
LmltcGwoKSwgUGFzc093blB0cjxSYWRpb0J1dHRvbkdyb3VwPigpKS5pdGVyYXRvci0+c2Vjb25k
OworICAgIE93blB0cjxSYWRpb0J1dHRvbkdyb3VwPiYgZ3JvdXAgPSBtX25hbWVUb0dyb3VwTWFw
LT5hZGQoZWxlbWVudC0+bmFtZSgpLmltcGwoKSwgUGFzc093blB0cjxSYWRpb0J1dHRvbkdyb3Vw
PigpKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCFncm91cCkKICAgICAgICAgZ3JvdXAgPSBS
YWRpb0J1dHRvbkdyb3VwOjpjcmVhdGUoKTsKICAgICBncm91cC0+YWRkKGVsZW1lbnQpOwpAQCAt
MjQ2LDggKzI0Niw4IEBAIHZvaWQgQ2hlY2tlZFJhZGlvQnV0dG9uczo6cmVtb3ZlQnV0dG9uKEhU
TUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgTmFtZVRvR3JvdXBNYXA6Oml0ZXJhdG9yIGl0
ID0gbV9uYW1lVG9Hcm91cE1hcC0+ZmluZChlbGVtZW50LT5uYW1lKCkuaW1wbCgpKTsKICAgICBp
ZiAoaXQgPT0gbV9uYW1lVG9Hcm91cE1hcC0+ZW5kKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBp
dC0+c2Vjb25kLT5yZW1vdmUoZWxlbWVudCk7Ci0gICAgaWYgKGl0LT5zZWNvbmQtPmlzRW1wdHko
KSkgeworICAgIGl0LT52YWx1ZS0+cmVtb3ZlKGVsZW1lbnQpOworICAgIGlmIChpdC0+dmFsdWUt
PmlzRW1wdHkoKSkgewogICAgICAgICAvLyBGSVhNRTogV2UgbWF5IHNraXAgZGVhbGxvY2F0aW5n
IHRoZSBlbXB0eSBSYWRpb0J1dHRvbkdyb3VwIGZvcgogICAgICAgICAvLyBwZXJmb3JtYW5jZSBp
bXByb3ZlbWVudC4gSWYgd2UgZG8gc28sIHdlIG5lZWQgdG8gY2hhbmdlIHRoZSBrZXkgdHlwZQog
ICAgICAgICAvLyBvZiBtX25hbWVUb0dyb3VwTWFwIGZyb20gQXRvbWljU3RyaW5nSW1wbCogdG8g
UmVmUHRyPEF0b21pY1N0cmluZ0ltcGw+LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L0NoaWxkTGlzdE11dGF0aW9uU2NvcGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0NoaWxkTGlz
dE11dGF0aW9uU2NvcGUuY3BwCmluZGV4IGM1Y2IzYWQ5ZjZlYWI3OGQ4OWU1ZDY3ZWE5YzQzNTIz
MjI5N2UwN2UuLjUzN2RhNDEyYTU1Yjg4NGJjZWY5ZTE3ZjA0Zjk0NzVlMDc2M2EyYTAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZExpc3RNdXRhdGlvblNjb3BlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5jcHAKQEAgLTE5Mywy
NyArMTkzLDI3IEBAIHZvaWQgQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVs
YXRpb25Sb3V0ZXI6OmNoaWxkQWRkZWQoTm9kZSogdGFyZ2V0CiB7CiAgICAgSGFzaE1hcDxOb2Rl
KiwgT3duUHRyPENoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0b3I+ID46
Oml0ZXJhdG9yIGl0ZXIgPSBtX2FjY3VtdWxhdGlvbnMuZmluZCh0YXJnZXQpOwogICAgIEFTU0VS
VChpdGVyICE9IG1fYWNjdW11bGF0aW9ucy5lbmQoKSk7Ci0gICAgaWYgKGl0ZXIgPT0gbV9hY2N1
bXVsYXRpb25zLmVuZCgpIHx8ICFpdGVyLT5zZWNvbmQpCisgICAgaWYgKGl0ZXIgPT0gbV9hY2N1
bXVsYXRpb25zLmVuZCgpIHx8ICFpdGVyLT52YWx1ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
aXRlci0+c2Vjb25kLT5jaGlsZEFkZGVkKGNoaWxkKTsKKyAgICBpdGVyLT52YWx1ZS0+Y2hpbGRB
ZGRlZChjaGlsZCk7CiB9CiAKIHZvaWQgQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25B
Y2N1bXVsYXRpb25Sb3V0ZXI6OndpbGxSZW1vdmVDaGlsZChOb2RlKiB0YXJnZXQsIE5vZGUqIGNo
aWxkKQogewogICAgIEhhc2hNYXA8Tm9kZSosIE93blB0cjxDaGlsZExpc3RNdXRhdGlvblNjb3Bl
OjpNdXRhdGlvbkFjY3VtdWxhdG9yPiA+OjppdGVyYXRvciBpdGVyID0gbV9hY2N1bXVsYXRpb25z
LmZpbmQodGFyZ2V0KTsKICAgICBBU1NFUlQoaXRlciAhPSBtX2FjY3VtdWxhdGlvbnMuZW5kKCkp
OwotICAgIGlmIChpdGVyID09IG1fYWNjdW11bGF0aW9ucy5lbmQoKSB8fCAhaXRlci0+c2Vjb25k
KQorICAgIGlmIChpdGVyID09IG1fYWNjdW11bGF0aW9ucy5lbmQoKSB8fCAhaXRlci0+dmFsdWUp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGl0ZXItPnNlY29uZC0+d2lsbFJlbW92ZUNoaWxkKGNo
aWxkKTsKKyAgICBpdGVyLT52YWx1ZS0+d2lsbFJlbW92ZUNoaWxkKGNoaWxkKTsKIH0KIAogdm9p
ZCBDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlcjo6aW5j
cmVtZW50U2NvcGluZ0xldmVsKE5vZGUqIHRhcmdldCkKIHsKICAgICBTY29waW5nTGV2ZWxNYXA6
OkFkZFJlc3VsdCByZXN1bHQgPSBtX3Njb3BpbmdMZXZlbHMuYWRkKHRhcmdldCwgMSk7CiAgICAg
aWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICArKyhyZXN1bHQuaXRlcmF0b3ItPnNl
Y29uZCk7CisgICAgICAgICsrKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCkBAIC0yMzAsOCArMjMwLDggQEAgdm9pZCBDaGlsZExpc3RNdXRhdGlvblNj
b3BlOjpNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlcjo6ZGVjcmVtZW50U2NvcGluZ0xldmVsKE4K
ICAgICBTY29waW5nTGV2ZWxNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3Njb3BpbmdMZXZlbHMuZmlu
ZCh0YXJnZXQpOwogICAgIEFTU0VSVChpdGVyICE9IG1fc2NvcGluZ0xldmVscy5lbmQoKSk7CiAK
LSAgICAtLShpdGVyLT5zZWNvbmQpOwotICAgIGlmIChpdGVyLT5zZWNvbmQgPiAwKQorICAgIC0t
KGl0ZXItPnZhbHVlKTsKKyAgICBpZiAoaXRlci0+dmFsdWUgPiAwKQogICAgICAgICByZXR1cm47
CiAKICAgICBtX3Njb3BpbmdMZXZlbHMucmVtb3ZlKGl0ZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5j
cHAKaW5kZXggNjdlZDkyMzEzMDVlOGFlNjRlZjllMzdmODE0OTk4ODdiYmQzNjU2Yy4uYTkyNmUw
MjJiZjU5NGU5MGYzZTAyYmZiMjlhODc3MzFkNzU5NzkwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQu
Y3BwCkBAIC0yNzM0LDcgKzI3MzQsNyBAQCBjb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hl
ZXQ+ID4qIERvY3VtZW50OjpwYWdlR3JvdXBVc2VyU2hlZXRzKCkgY29uc3QKIAogICAgIFVzZXJT
dHlsZVNoZWV0TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBzaGVldHNNYXAtPmVuZCgpOwogICAg
IGZvciAoVXNlclN0eWxlU2hlZXRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gc2hlZXRzTWFwLT5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgY29uc3QgVXNlclN0eWxlU2hlZXRW
ZWN0b3IqIHNoZWV0cyA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIGNvbnN0IFVzZXJTdHls
ZVNoZWV0VmVjdG9yKiBzaGVldHMgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBzaGVldHMtPnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBjb25z
dCBVc2VyU3R5bGVTaGVldCogc2hlZXQgPSBzaGVldHMtPmF0KGkpLmdldCgpOwogICAgICAgICAg
ICAgaWYgKHNoZWV0LT5pbmplY3RlZEZyYW1lcygpID09IEluamVjdEluVG9wRnJhbWVPbmx5ICYm
IG93bmVyRWxlbWVudCgpKQpAQCAtNDUzMCw3ICs0NTMwLDcgQEAgSFRNTEFsbENvbGxlY3Rpb24q
IERvY3VtZW50OjphbGwoKQogCiBIVE1MQ29sbGVjdGlvbiogRG9jdW1lbnQ6OndpbmRvd05hbWVk
SXRlbXMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKQogewotICAgIE93blB0cjxIVE1MTmFtZUNv
bGxlY3Rpb24+JiBjb2xsZWN0aW9uID0gbV93aW5kb3dOYW1lZEl0ZW1Db2xsZWN0aW9ucy5hZGQo
bmFtZS5pbXBsKCksIG51bGxwdHIpLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgT3duUHRyPEhUTUxO
YW1lQ29sbGVjdGlvbj4mIGNvbGxlY3Rpb24gPSBtX3dpbmRvd05hbWVkSXRlbUNvbGxlY3Rpb25z
LmFkZChuYW1lLmltcGwoKSwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghY29s
bGVjdGlvbikKICAgICAgICAgY29sbGVjdGlvbiA9IEhUTUxOYW1lQ29sbGVjdGlvbjo6Y3JlYXRl
KHRoaXMsIFdpbmRvd05hbWVkSXRlbXMsIG5hbWUpOwogICAgIHJldHVybiBjb2xsZWN0aW9uLmdl
dCgpOwpAQCAtNDUzOCw3ICs0NTM4LDcgQEAgSFRNTENvbGxlY3Rpb24qIERvY3VtZW50Ojp3aW5k
b3dOYW1lZEl0ZW1zKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkKIAogSFRNTENvbGxlY3Rpb24q
IERvY3VtZW50Ojpkb2N1bWVudE5hbWVkSXRlbXMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKQog
ewotICAgIE93blB0cjxIVE1MTmFtZUNvbGxlY3Rpb24+JiBjb2xsZWN0aW9uID0gbV9kb2N1bWVu
dE5hbWVkSXRlbUNvbGxlY3Rpb25zLmFkZChuYW1lLmltcGwoKSwgbnVsbHB0cikuaXRlcmF0b3It
PnNlY29uZDsKKyAgICBPd25QdHI8SFRNTE5hbWVDb2xsZWN0aW9uPiYgY29sbGVjdGlvbiA9IG1f
ZG9jdW1lbnROYW1lZEl0ZW1Db2xsZWN0aW9ucy5hZGQobmFtZS5pbXBsKCksIG51bGxwdHIpLml0
ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoIWNvbGxlY3Rpb24pCiAgICAgICAgIGNvbGxlY3Rpb24g
PSBIVE1MTmFtZUNvbGxlY3Rpb246OmNyZWF0ZSh0aGlzLCBEb2N1bWVudE5hbWVkSXRlbXMsIG5h
bWUpOwogICAgIHJldHVybiBjb2xsZWN0aW9uLmdldCgpOwpAQCAtNDYzMyw3ICs0NjMzLDcgQEAg
dm9pZCBEb2N1bWVudDo6c2V0U3RhdGVGb3JOZXdGb3JtRWxlbWVudHMoY29uc3QgVmVjdG9yPFN0
cmluZz4mIHN0YXRlVmVjdG9yKQogICAgICAgICBGb3JtRWxlbWVudEtleSBrZXkoYS5pbXBsKCks
IGIuaW1wbCgpKTsKICAgICAgICAgSXRlcmF0b3IgaXQgPSBtX3N0YXRlRm9yTmV3Rm9ybUVsZW1l
bnRzLmZpbmQoa2V5KTsKICAgICAgICAgaWYgKGl0ICE9IG1fc3RhdGVGb3JOZXdGb3JtRWxlbWVu
dHMuZW5kKCkpCi0gICAgICAgICAgICBpdC0+c2Vjb25kLmFwcGVuZChjKTsKKyAgICAgICAgICAg
IGl0LT52YWx1ZS5hcHBlbmQoYyk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgVmVjdG9y
PFN0cmluZz4gdigxKTsKICAgICAgICAgICAgIHZbMF0gPSBjOwpAQCAtNDY1MywxMCArNDY1Mywx
MCBAQCBib29sIERvY3VtZW50Ojp0YWtlU3RhdGVGb3JGb3JtRWxlbWVudChBdG9taWNTdHJpbmdJ
bXBsKiBuYW1lLCBBdG9taWNTdHJpbmdJbXBsKgogICAgIEl0ZXJhdG9yIGl0ID0gbV9zdGF0ZUZv
ck5ld0Zvcm1FbGVtZW50cy5maW5kKEZvcm1FbGVtZW50S2V5KG5hbWUsIHR5cGUpKTsKICAgICBp
ZiAoaXQgPT0gbV9zdGF0ZUZvck5ld0Zvcm1FbGVtZW50cy5lbmQoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIEFTU0VSVChpdC0+c2Vjb25kLnNpemUoKSk7Ci0gICAgc3RhdGUgPSBpdC0+
c2Vjb25kLmxhc3QoKTsKLSAgICBpZiAoaXQtPnNlY29uZC5zaXplKCkgPiAxKQotICAgICAgICBp
dC0+c2Vjb25kLnJlbW92ZUxhc3QoKTsKKyAgICBBU1NFUlQoaXQtPnZhbHVlLnNpemUoKSk7Cisg
ICAgc3RhdGUgPSBpdC0+dmFsdWUubGFzdCgpOworICAgIGlmIChpdC0+dmFsdWUuc2l6ZSgpID4g
MSkKKyAgICAgICAgaXQtPnZhbHVlLnJlbW92ZUxhc3QoKTsKICAgICBlbHNlCiAgICAgICAgIG1f
c3RhdGVGb3JOZXdGb3JtRWxlbWVudHMucmVtb3ZlKGl0KTsKICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTQ5MzEsNyArNDkzMSw3IEBAIENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIERvY3VtZW50OjpnZXRD
U1NDYW52YXNDb250ZXh0KGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QKIAogSFRNTENhbnZhc0Vs
ZW1lbnQqIERvY3VtZW50OjpnZXRDU1NDYW52YXNFbGVtZW50KGNvbnN0IFN0cmluZyYgbmFtZSkK
IHsKLSAgICBSZWZQdHI8SFRNTENhbnZhc0VsZW1lbnQ+JiBlbGVtZW50ID0gbV9jc3NDYW52YXNF
bGVtZW50cy5hZGQobmFtZSwgMCkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBSZWZQdHI8SFRNTENh
bnZhc0VsZW1lbnQ+JiBlbGVtZW50ID0gbV9jc3NDYW52YXNFbGVtZW50cy5hZGQobmFtZSwgMCku
aXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghZWxlbWVudCkKICAgICAgICAgZWxlbWVudCA9IEhU
TUxDYW52YXNFbGVtZW50OjpjcmVhdGUodGhpcyk7CiAgICAgcmV0dXJuIGVsZW1lbnQuZ2V0KCk7
CkBAIC01NzM2LDEwICs1NzM2LDEwIEBAIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IERvY3VtZW50Ojpn
ZXRJdGVtcyhjb25zdCBTdHJpbmcmIHR5cGVOYW1lcykKIAogICAgIE5vZGVMaXN0c05vZGVEYXRh
OjpNaWNyb0RhdGFJdGVtTGlzdENhY2hlOjpBZGRSZXN1bHQgcmVzdWx0ID0gbm9kZUxpc3RzLT5t
X21pY3JvRGF0YUl0ZW1MaXN0Q2FjaGUuYWRkKGxvY2FsVHlwZU5hbWVzLCAwKTsKICAgICBpZiAo
IXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxOb2RlTGlzdD4o
cmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOworICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxOb2Rl
TGlzdD4ocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CiAKICAgICBSZWZQdHI8TWljcm9EYXRhSXRl
bUxpc3Q+IGxpc3QgPSBNaWNyb0RhdGFJdGVtTGlzdDo6Y3JlYXRlKHRoaXMsIHR5cGVOYW1lcyk7
Ci0gICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBsaXN0LmdldCgpOworICAgIHJlc3VsdC5p
dGVyYXRvci0+dmFsdWUgPSBsaXN0LmdldCgpOwogICAgIHJldHVybiBsaXN0LnJlbGVhc2UoKTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJv
bGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNw
cAppbmRleCBjMjUwMjNmMmI4ZjE4NzNjNDBkYTZhN2M4MDRjNTM4MGQxNjJmZjcxLi5mYmQzZjE4
ZjQyYWU1MjNkYTNmNGRhNzZlNWEwMzA2ZTkwMTI2NWE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcApAQCAtMzAxLDcgKzMwMSw3IEBAIERv
Y3VtZW50TWFya2VyKiBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Om1hcmtlckNvbnRhaW5pbmdQ
b2ludChjb25zdCBMYXlvdXRQb2luCiAgICAgTWFya2VyTWFwOjppdGVyYXRvciBlbmQgPSBtX21h
cmtlcnMuZW5kKCk7CiAgICAgZm9yIChNYXJrZXJNYXA6Oml0ZXJhdG9yIG5vZGVJdGVyYXRvciA9
IG1fbWFya2Vycy5iZWdpbigpOyBub2RlSXRlcmF0b3IgIT0gZW5kOyArK25vZGVJdGVyYXRvcikg
ewogICAgICAgICAvLyBpbm5lciBsb29wOyBwcm9jZXNzIGVhY2ggbWFya2VyIGluIHRoaXMgbm9k
ZQotICAgICAgICBNYXJrZXJMaXN0KiBsaXN0ID0gbm9kZUl0ZXJhdG9yLT5zZWNvbmQ7CisgICAg
ICAgIE1hcmtlckxpc3QqIGxpc3QgPSBub2RlSXRlcmF0b3ItPnZhbHVlOwogICAgICAgICB1bnNp
Z25lZCBtYXJrZXJDb3VudCA9IGxpc3QtPnNpemUoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBt
YXJrZXJJbmRleCA9IDA7IG1hcmtlckluZGV4IDwgbWFya2VyQ291bnQ7ICsrbWFya2VySW5kZXgp
IHsKICAgICAgICAgICAgIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXImIG1hcmtlciA9IGxpc3QtPmF0
KG1hcmtlckluZGV4KTsKQEAgLTM4OSw3ICszODksNyBAQCBWZWN0b3I8SW50UmVjdD4gRG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyOjpyZW5kZXJlZFJlY3RzRm9yTWFya2VycyhEb2N1bWVudE1hcmtl
cgogICAgIE1hcmtlck1hcDo6aXRlcmF0b3IgZW5kID0gbV9tYXJrZXJzLmVuZCgpOwogICAgIGZv
ciAoTWFya2VyTWFwOjppdGVyYXRvciBub2RlSXRlcmF0b3IgPSBtX21hcmtlcnMuYmVnaW4oKTsg
bm9kZUl0ZXJhdG9yICE9IGVuZDsgKytub2RlSXRlcmF0b3IpIHsKICAgICAgICAgLy8gaW5uZXIg
bG9vcDsgcHJvY2VzcyBlYWNoIG1hcmtlciBpbiB0aGlzIG5vZGUKLSAgICAgICAgTWFya2VyTGlz
dCogbGlzdCA9IG5vZGVJdGVyYXRvci0+c2Vjb25kOworICAgICAgICBNYXJrZXJMaXN0KiBsaXN0
ID0gbm9kZUl0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgdW5zaWduZWQgbWFya2VyQ291bnQgPSBs
aXN0LT5zaXplKCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgbWFya2VySW5kZXggPSAwOyBtYXJr
ZXJJbmRleCA8IG1hcmtlckNvdW50OyArK21hcmtlckluZGV4KSB7CiAgICAgICAgICAgICBjb25z
dCBSZW5kZXJlZERvY3VtZW50TWFya2VyJiBtYXJrZXIgPSBsaXN0LT5hdChtYXJrZXJJbmRleCk7
CkBAIC00MTYsNyArNDE2LDcgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbW92
ZU1hcmtlcnMoTm9kZSogbm9kZSwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclQKICAgICAKICAgICBN
YXJrZXJNYXA6Oml0ZXJhdG9yIGl0ZXJhdG9yID0gbV9tYXJrZXJzLmZpbmQobm9kZSk7CiAgICAg
aWYgKGl0ZXJhdG9yICE9IG1fbWFya2Vycy5lbmQoKSkKLSAgICAgICAgcmVtb3ZlTWFya2Vyc0Zy
b21MaXN0KG5vZGUsIGl0ZXJhdG9yLT5zZWNvbmQsIG1hcmtlclR5cGVzKTsKKyAgICAgICAgcmVt
b3ZlTWFya2Vyc0Zyb21MaXN0KG5vZGUsIGl0ZXJhdG9yLT52YWx1ZSwgbWFya2VyVHlwZXMpOwog
fQogCiB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVtb3ZlTWFya2VycyhEb2N1bWVu
dE1hcmtlcjo6TWFya2VyVHlwZXMgbWFya2VyVHlwZXMpCkBAIC00MjksNyArNDI5LDcgQEAgdm9p
ZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbW92ZU1hcmtlcnMoRG9jdW1lbnRNYXJrZXI6
Ok1hcmtlclR5cGVzIG1hcmtlclQKICAgICBNYXJrZXJNYXAgbWFya2VyTWFwQ29weSA9IG1fbWFy
a2VyczsKICAgICBNYXJrZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IG1hcmtlck1hcENvcHkuZW5kKCk7
CiAgICAgZm9yIChNYXJrZXJNYXA6Oml0ZXJhdG9yIGkgPSBtYXJrZXJNYXBDb3B5LmJlZ2luKCk7
IGkgIT0gZW5kOyArK2kpCi0gICAgICAgIHJlbW92ZU1hcmtlcnNGcm9tTGlzdChpLT5maXJzdC5n
ZXQoKSwgaS0+c2Vjb25kLCBtYXJrZXJUeXBlcyk7CisgICAgICAgIHJlbW92ZU1hcmtlcnNGcm9t
TGlzdChpLT5rZXkuZ2V0KCksIGktPnZhbHVlLCBtYXJrZXJUeXBlcyk7CiAgICAgbV9wb3NzaWJs
eUV4aXN0aW5nTWFya2VyVHlwZXMucmVtb3ZlKG1hcmtlclR5cGVzKTsKIH0KIApAQCAtNDg1LDEw
ICs0ODUsMTAgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlcGFpbnRNYXJrZXJz
KERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlcyBtYXJrZXIKICAgICAvLyBvdXRlciBsb29wOiBw
cm9jZXNzIGVhY2ggbWFya2VyZWQgbm9kZSBpbiB0aGUgZG9jdW1lbnQKICAgICBNYXJrZXJNYXA6
Oml0ZXJhdG9yIGVuZCA9IG1fbWFya2Vycy5lbmQoKTsKICAgICBmb3IgKE1hcmtlck1hcDo6aXRl
cmF0b3IgaSA9IG1fbWFya2Vycy5iZWdpbigpOyBpICE9IGVuZDsgKytpKSB7Ci0gICAgICAgIE5v
ZGUqIG5vZGUgPSBpLT5maXJzdC5nZXQoKTsKKyAgICAgICAgTm9kZSogbm9kZSA9IGktPmtleS5n
ZXQoKTsKIAogICAgICAgICAvLyBpbm5lciBsb29wOiBwcm9jZXNzIGVhY2ggbWFya2VyIGluIHRo
ZSBjdXJyZW50IG5vZGUKLSAgICAgICAgTWFya2VyTGlzdCogbGlzdCA9IGktPnNlY29uZDsKKyAg
ICAgICAgTWFya2VyTGlzdCogbGlzdCA9IGktPnZhbHVlOwogICAgICAgICBib29sIG5vZGVOZWVk
c1JlcGFpbnQgPSBmYWxzZTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgIT0gbGlzdC0+
c2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIERvY3VtZW50TWFya2VyIG1hcmtlciA9IGxpc3Qt
PmF0KGkpOwpAQCAtNTE2LDcgKzUxNiw3IEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
OjppbnZhbGlkYXRlUmVuZGVyZWRSZWN0c0Zvck1hcmtlcnNJblJlY3QoY29uc3QgTGF5CiAgICAg
Zm9yIChNYXJrZXJNYXA6Oml0ZXJhdG9yIGkgPSBtX21hcmtlcnMuYmVnaW4oKTsgaSAhPSBlbmQ7
ICsraSkgewogCiAgICAgICAgIC8vIGlubmVyIGxvb3A6IHByb2Nlc3MgZWFjaCByZWN0IGluIHRo
ZSBjdXJyZW50IG5vZGUKLSAgICAgICAgTWFya2VyTGlzdCogbGlzdCA9IGktPnNlY29uZDsKKyAg
ICAgICAgTWFya2VyTGlzdCogbGlzdCA9IGktPnZhbHVlOwogICAgICAgICBmb3IgKHNpemVfdCBs
aXN0SW5kZXggPSAwOyBsaXN0SW5kZXggPCBsaXN0LT5zaXplKCk7ICsrbGlzdEluZGV4KQogICAg
ICAgICAgICAgbGlzdC0+YXQobGlzdEluZGV4KS5pbnZhbGlkYXRlKHIpOwogICAgIH0KQEAgLTY2
NSw5ICs2NjUsOSBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6c2hvd01hcmtlcnMo
KSBjb25zdAogICAgIGZwcmludGYoc3RkZXJyLCAiJWQgbm9kZXMgaGF2ZSBtYXJrZXJzOlxuIiwg
bV9tYXJrZXJzLnNpemUoKSk7CiAgICAgTWFya2VyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBt
X21hcmtlcnMuZW5kKCk7CiAgICAgZm9yIChNYXJrZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIG5vZGVJ
dGVyYXRvciA9IG1fbWFya2Vycy5iZWdpbigpOyBub2RlSXRlcmF0b3IgIT0gZW5kOyArK25vZGVJ
dGVyYXRvcikgewotICAgICAgICBOb2RlKiBub2RlID0gbm9kZUl0ZXJhdG9yLT5maXJzdC5nZXQo
KTsKKyAgICAgICAgTm9kZSogbm9kZSA9IG5vZGVJdGVyYXRvci0+a2V5LmdldCgpOwogICAgICAg
ICBmcHJpbnRmKHN0ZGVyciwgIiVwIiwgbm9kZSk7Ci0gICAgICAgIE1hcmtlckxpc3QqIGxpc3Qg
PSBub2RlSXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgTWFya2VyTGlzdCogbGlzdCA9IG5vZGVJ
dGVyYXRvci0+dmFsdWU7CiAgICAgICAgIGZvciAodW5zaWduZWQgbWFya2VySW5kZXggPSAwOyBt
YXJrZXJJbmRleCA8IGxpc3QtPnNpemUoKTsgKyttYXJrZXJJbmRleCkgewogICAgICAgICAgICAg
Y29uc3QgRG9jdW1lbnRNYXJrZXImIG1hcmtlciA9IGxpc3QtPmF0KG1hcmtlckluZGV4KTsKICAg
ICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiICVkOlslZDolZF0oJWQpIiwgbWFya2VyLnR5cGUo
KSwgbWFya2VyLnN0YXJ0T2Zmc2V0KCksIG1hcmtlci5lbmRPZmZzZXQoKSwgbWFya2VyLmFjdGl2
ZU1hdGNoKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50T3JkZXJl
ZE1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRPcmRlcmVkTWFwLmNwcAppbmRl
eCAwODJhYTA3NDBhNzFjY2RmNTBlMWQ0MmQyM2QzMTdlNjNhZjJmNGRhLi4xMjk3ZTUxMDJmYjRl
NzljZTNkYjExMjM1NzAyMWUzZGQwNTU0YTUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnRPcmRlcmVkTWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnRPcmRlcmVkTWFwLmNwcApAQCAtOTgsNyArOTgsNyBAQCB2b2lkIERvY3VtZW50T3JkZXJlZE1h
cDo6cmVtb3ZlKEF0b21pY1N0cmluZ0ltcGwqIGtleSwgRWxlbWVudCogZWxlbWVudCkKIAogICAg
IG1fbWFwLmNoZWNrQ29uc2lzdGVuY3koKTsKICAgICBNYXA6Oml0ZXJhdG9yIGNhY2hlZEl0ZW0g
PSBtX21hcC5maW5kKGtleSk7Ci0gICAgaWYgKGNhY2hlZEl0ZW0gIT0gbV9tYXAuZW5kKCkgJiYg
Y2FjaGVkSXRlbS0+c2Vjb25kID09IGVsZW1lbnQpCisgICAgaWYgKGNhY2hlZEl0ZW0gIT0gbV9t
YXAuZW5kKCkgJiYgY2FjaGVkSXRlbS0+dmFsdWUgPT0gZWxlbWVudCkKICAgICAgICAgbV9tYXAu
cmVtb3ZlKGNhY2hlZEl0ZW0pOwogICAgIGVsc2UKICAgICAgICAgbV9kdXBsaWNhdGVDb3VudHMu
cmVtb3ZlKGtleSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRMaXN0ZW5l
ck1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRMaXN0ZW5lck1hcC5jcHAKaW5kZXgg
YzFmZDRkN2M5NTdhNjRiZmY3ODhmOTAxZTYxZGUwMWNhMDkyMjc3ZS4uYWY4YzQ4YWVkZTU1MTM2
Zjc0ZmUxODQ3ODFkMDUyOGI0MWQ3Y2NhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L0V2ZW50TGlzdGVuZXJNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudExpc3Rl
bmVyTWFwLmNwcApAQCAtMTAyLDcgKzEwMiw3IEBAIFZlY3RvcjxBdG9taWNTdHJpbmc+IEV2ZW50
TGlzdGVuZXJNYXA6OmV2ZW50VHlwZXMoKSBjb25zdAogICAgICAgICBFdmVudExpc3RlbmVySGFz
aE1hcDo6aXRlcmF0b3IgaXQgPSBtX2hhc2hNYXAtPmJlZ2luKCk7CiAgICAgICAgIEV2ZW50TGlz
dGVuZXJIYXNoTWFwOjppdGVyYXRvciBlbmQgPSBtX2hhc2hNYXAtPmVuZCgpOwogICAgICAgICBm
b3IgKDsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgdHlwZXMuYXBwZW5kKGl0LT5maXJz
dCk7CisgICAgICAgICAgICB0eXBlcy5hcHBlbmQoaXQtPmtleSk7CiAgICAgfSBlbHNlIGlmICht
X3NpbmdsZUV2ZW50TGlzdGVuZXJWZWN0b3IpCiAgICAgICAgIHR5cGVzLmFwcGVuZChtX3Npbmds
ZUV2ZW50TGlzdGVuZXJUeXBlKTsKIApAQCAtMTM2LDkgKzEzNiw5IEBAIGJvb2wgRXZlbnRMaXN0
ZW5lck1hcDo6YWRkKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2
ZW50TGlzdGVuCiAgICAgaWYgKG1faGFzaE1hcCkgewogICAgICAgICBFdmVudExpc3RlbmVySGFz
aE1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1faGFzaE1hcC0+YWRkKGV2ZW50VHlwZSwgbnVsbHB0
cik7CiAgICAgICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgIHJlc3VsdC5p
dGVyYXRvci0+c2Vjb25kID0gYWRvcHRQdHIobmV3IEV2ZW50TGlzdGVuZXJWZWN0b3IpOworICAg
ICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGFkb3B0UHRyKG5ldyBFdmVudExpc3Rl
bmVyVmVjdG9yKTsKIAotICAgICAgICByZXR1cm4gYWRkTGlzdGVuZXJUb1ZlY3RvcihyZXN1bHQu
aXRlcmF0b3ItPnNlY29uZC5nZXQoKSwgbGlzdGVuZXIsIHVzZUNhcHR1cmUpOworICAgICAgICBy
ZXR1cm4gYWRkTGlzdGVuZXJUb1ZlY3RvcihyZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpLCBs
aXN0ZW5lciwgdXNlQ2FwdHVyZSk7CiAgICAgfQogCiAgICAgaWYgKCFtX3NpbmdsZUV2ZW50TGlz
dGVuZXJWZWN0b3IpIHsKQEAgLTE3OSw4ICsxNzksOCBAQCBib29sIEV2ZW50TGlzdGVuZXJNYXA6
OnJlbW92ZShjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciogbGlz
dAogICAgIGlmIChpdCA9PSBtX2hhc2hNYXAtPmVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBib29sIHdhc1JlbW92ZWQgPSByZW1vdmVMaXN0ZW5lckZyb21WZWN0b3IoaXQtPnNl
Y29uZC5nZXQoKSwgbGlzdGVuZXIsIHVzZUNhcHR1cmUsIGluZGV4T2ZSZW1vdmVkTGlzdGVuZXIp
OwotICAgIGlmIChpdC0+c2Vjb25kLT5pc0VtcHR5KCkpCisgICAgYm9vbCB3YXNSZW1vdmVkID0g
cmVtb3ZlTGlzdGVuZXJGcm9tVmVjdG9yKGl0LT52YWx1ZS5nZXQoKSwgbGlzdGVuZXIsIHVzZUNh
cHR1cmUsIGluZGV4T2ZSZW1vdmVkTGlzdGVuZXIpOworICAgIGlmIChpdC0+dmFsdWUtPmlzRW1w
dHkoKSkKICAgICAgICAgbV9oYXNoTWFwLT5yZW1vdmUoaXQpOwogICAgIHJldHVybiB3YXNSZW1v
dmVkOwogfQpAQCAtMTkzLDcgKzE5Myw3IEBAIEV2ZW50TGlzdGVuZXJWZWN0b3IqIEV2ZW50TGlz
dGVuZXJNYXA6OmZpbmQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUpCiAgICAgICAgIEV2
ZW50TGlzdGVuZXJIYXNoTWFwOjppdGVyYXRvciBpdCA9IG1faGFzaE1hcC0+ZmluZChldmVudFR5
cGUpOwogICAgICAgICBpZiAoaXQgPT0gbV9oYXNoTWFwLT5lbmQoKSkKICAgICAgICAgICAgIHJl
dHVybiAwOwotICAgICAgICByZXR1cm4gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgcmV0dXJu
IGl0LT52YWx1ZS5nZXQoKTsKICAgICB9CiAKICAgICBpZiAobV9zaW5nbGVFdmVudExpc3RlbmVy
VHlwZSA9PSBldmVudFR5cGUpCkBAIC0yMjcsNyArMjI3LDcgQEAgdm9pZCBFdmVudExpc3RlbmVy
TWFwOjpyZW1vdmVGaXJzdEV2ZW50TGlzdGVuZXJDcmVhdGVkRnJvbU1hcmt1cChjb25zdCBBdG9t
aWNTdHIKICAgICAgICAgRXZlbnRMaXN0ZW5lckhhc2hNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IG1f
aGFzaE1hcC0+ZmluZChldmVudFR5cGUpOwogICAgICAgICBBU1NFUlQocmVzdWx0ICE9IG1faGFz
aE1hcC0+ZW5kKCkpOwogCi0gICAgICAgIEV2ZW50TGlzdGVuZXJWZWN0b3IqIGxpc3RlbmVyVmVj
dG9yID0gcmVzdWx0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIEV2ZW50TGlzdGVuZXJWZWN0b3Iq
IGxpc3RlbmVyVmVjdG9yID0gcmVzdWx0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgQVNTRVJUKGxp
c3RlbmVyVmVjdG9yKTsKIAogICAgICAgICByZW1vdmVGaXJzdExpc3RlbmVyQ3JlYXRlZEZyb21N
YXJrdXAobGlzdGVuZXJWZWN0b3IpOwpAQCAtMjY1LDcgKzI2NSw3IEBAIHZvaWQgRXZlbnRMaXN0
ZW5lck1hcDo6Y29weUV2ZW50TGlzdGVuZXJzTm90Q3JlYXRlZEZyb21NYXJrdXBUb1RhcmdldChF
dmVudFRhcmdlCiAgICAgaWYgKG1faGFzaE1hcCkgewogICAgICAgICBFdmVudExpc3RlbmVySGFz
aE1hcDo6aXRlcmF0b3IgZW5kID0gbV9oYXNoTWFwLT5lbmQoKTsKICAgICAgICAgZm9yIChFdmVu
dExpc3RlbmVySGFzaE1hcDo6aXRlcmF0b3IgaXQgPSBtX2hhc2hNYXAtPmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkKLSAgICAgICAgICAgIGNvcHlMaXN0ZW5lcnNOb3RDcmVhdGVkRnJvbU1hcmt1
cFRvVGFyZ2V0KGl0LT5maXJzdCwgaXQtPnNlY29uZC5nZXQoKSwgdGFyZ2V0KTsKKyAgICAgICAg
ICAgIGNvcHlMaXN0ZW5lcnNOb3RDcmVhdGVkRnJvbU1hcmt1cFRvVGFyZ2V0KGl0LT5rZXksIGl0
LT52YWx1ZS5nZXQoKSwgdGFyZ2V0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMzI1
LDcgKzMyNSw3IEBAIEV2ZW50TGlzdGVuZXIqIEV2ZW50TGlzdGVuZXJJdGVyYXRvcjo6bmV4dExp
c3RlbmVyKCkKIAogICAgIGlmIChtX21hcC0+bV9oYXNoTWFwKSB7CiAgICAgICAgIGZvciAoOyBt
X21hcEl0ZXJhdG9yICE9IG1fbWFwRW5kOyArK21fbWFwSXRlcmF0b3IpIHsKLSAgICAgICAgICAg
IEV2ZW50TGlzdGVuZXJWZWN0b3ImIGxpc3RlbmVycyA9ICptX21hcEl0ZXJhdG9yLT5zZWNvbmQ7
CisgICAgICAgICAgICBFdmVudExpc3RlbmVyVmVjdG9yJiBsaXN0ZW5lcnMgPSAqbV9tYXBJdGVy
YXRvci0+dmFsdWU7CiAgICAgICAgICAgICBpZiAobV9pbmRleCA8IGxpc3RlbmVycy5zaXplKCkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGxpc3RlbmVyc1ttX2luZGV4KytdLmxpc3RlbmVyLmdl
dCgpOwogICAgICAgICAgICAgbV9pbmRleCA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vTXV0YXRpb25PYnNlcnZlckludGVyZXN0R3JvdXAuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZG9tL011dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3VwLmNwcAppbmRleCA2OTk4NzUyY2Q1YjAw
OTFlYWQ4YmRiMGMwMWI5NTU3OGI2ZThjNWU0Li44YTU5YWJhZmU1Y2JkZmY1M2EzYjc3ZjJjMmQ4
ODk3NWU2NzAxZjdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25PYnNl
cnZlckludGVyZXN0R3JvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvbk9i
c2VydmVySW50ZXJlc3RHcm91cC5jcHAKQEAgLTYxLDcgKzYxLDcgQEAgTXV0YXRpb25PYnNlcnZl
ckludGVyZXN0R3JvdXA6Ok11dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3VwKEhhc2hNYXA8V2Vi
S2l0TXV0YXQKIGJvb2wgTXV0YXRpb25PYnNlcnZlckludGVyZXN0R3JvdXA6OmlzT2xkVmFsdWVS
ZXF1ZXN0ZWQoKQogewogICAgIGZvciAoSGFzaE1hcDxXZWJLaXRNdXRhdGlvbk9ic2VydmVyKiwg
TXV0YXRpb25SZWNvcmREZWxpdmVyeU9wdGlvbnM+OjppdGVyYXRvciBpdGVyID0gbV9vYnNlcnZl
cnMuYmVnaW4oKTsgaXRlciAhPSBtX29ic2VydmVycy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAg
IGlmIChoYXNPbGRWYWx1ZShpdGVyLT5zZWNvbmQpKQorICAgICAgICBpZiAoaGFzT2xkVmFsdWUo
aXRlci0+dmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVy
biBmYWxzZTsKQEAgLTcyLDggKzcyLDggQEAgdm9pZCBNdXRhdGlvbk9ic2VydmVySW50ZXJlc3RH
cm91cDo6ZW5xdWV1ZU11dGF0aW9uUmVjb3JkKFBhc3NSZWZQdHI8TXV0YXRpb25SZWMKICAgICBS
ZWZQdHI8TXV0YXRpb25SZWNvcmQ+IG11dGF0aW9uID0gcHJwTXV0YXRpb247CiAgICAgUmVmUHRy
PE11dGF0aW9uUmVjb3JkPiBtdXRhdGlvbldpdGhOdWxsT2xkVmFsdWU7CiAgICAgZm9yIChIYXNo
TWFwPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIqLCBNdXRhdGlvblJlY29yZERlbGl2ZXJ5T3B0aW9u
cz46Oml0ZXJhdG9yIGl0ZXIgPSBtX29ic2VydmVycy5iZWdpbigpOyBpdGVyICE9IG1fb2JzZXJ2
ZXJzLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgV2ViS2l0TXV0YXRpb25PYnNlcnZlciogb2Jz
ZXJ2ZXIgPSBpdGVyLT5maXJzdDsKLSAgICAgICAgaWYgKGhhc09sZFZhbHVlKGl0ZXItPnNlY29u
ZCkpIHsKKyAgICAgICAgV2ViS2l0TXV0YXRpb25PYnNlcnZlciogb2JzZXJ2ZXIgPSBpdGVyLT5r
ZXk7CisgICAgICAgIGlmIChoYXNPbGRWYWx1ZShpdGVyLT52YWx1ZSkpIHsKICAgICAgICAgICAg
IG9ic2VydmVyLT5lbnF1ZXVlTXV0YXRpb25SZWNvcmQobXV0YXRpb24pOwogICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2Rl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAppbmRleCAwNDA3NTI3YjIwZDk5NzBm
MDBkNWIxMjQ3YTc5YjVlYzVhYWFkZmE1Li45ODkxMWYxMDE1OTI3ZjdmMDE0ZmRkODc2YTExZWQw
N2VmYWY1OTYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCkBAIC0xODcsNyArMTg3LDcgQEAgdm9pZCBOb2Rl
OjpkdW1wU3RhdGlzdGljcygpCiAgICAgICAgICAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IHN0
YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKTsKICAgICAgICAgICAgICAgICBIYXNoTWFwPFN0cmlu
Zywgc2l6ZV90Pjo6QWRkUmVzdWx0IHJlc3VsdCA9IHBlclRhZ0NvdW50LmFkZChlbGVtZW50LT50
YWdOYW1lKCksIDEpOwogICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0g
ICAgICAgICAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKys7CisgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUrKzsKIAogICAgICAgICAgICAgICAgIGlm
IChFbGVtZW50QXR0cmlidXRlRGF0YSogYXR0cmlidXRlRGF0YSA9IGVsZW1lbnQtPmF0dHJpYnV0
ZURhdGEoKSkgewogICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzICs9IGF0dHJpYnV0ZURh
dGEtPmxlbmd0aCgpOwpAQCAtMjc1LDcgKzI3NSw3IEBAIHZvaWQgTm9kZTo6ZHVtcFN0YXRpc3Rp
Y3MoKQogCiAgICAgcHJpbnRmKCJFbGVtZW50IHRhZyBuYW1lIGRpc3RpYnV0aW9uOlxuIik7CiAg
ICAgZm9yIChIYXNoTWFwPFN0cmluZywgc2l6ZV90Pjo6aXRlcmF0b3IgaXQgPSBwZXJUYWdDb3Vu
dC5iZWdpbigpOyBpdCAhPSBwZXJUYWdDb3VudC5lbmQoKTsgKytpdCkKLSAgICAgICAgcHJpbnRm
KCIgIE51bWJlciBvZiA8JXM+IHRhZ3M6ICV6dVxuIiwgaXQtPmZpcnN0LnV0ZjgoKS5kYXRhKCks
IGl0LT5zZWNvbmQpOworICAgICAgICBwcmludGYoIiAgTnVtYmVyIG9mIDwlcz4gdGFnczogJXp1
XG4iLCBpdC0+a2V5LnV0ZjgoKS5kYXRhKCksIGl0LT52YWx1ZSk7CiAKICAgICBwcmludGYoIkF0
dHJpYnV0ZXM6XG4iKTsKICAgICBwcmludGYoIiAgTnVtYmVyIG9mIEF0dHJpYnV0ZXMgKG5vbi1O
b2RlIGFuZCBOb2RlKTogJXp1IFslenVdXG4iLCBhdHRyaWJ1dGVzLCBzaXplb2YoQXR0cmlidXRl
KSk7CkBAIC00OTYsNyArNDk2LDcgQEAgdm9pZCBOb2RlOjpjbGVhclJhcmVEYXRhKCkKICAgICBO
b2RlUmFyZURhdGE6Ok5vZGVSYXJlRGF0YU1hcCYgZGF0YU1hcCA9IE5vZGVSYXJlRGF0YTo6cmFy
ZURhdGFNYXAoKTsKICAgICBOb2RlUmFyZURhdGE6Ok5vZGVSYXJlRGF0YU1hcDo6aXRlcmF0b3Ig
aXQgPSBkYXRhTWFwLmZpbmQodGhpcyk7CiAgICAgQVNTRVJUKGl0ICE9IGRhdGFNYXAuZW5kKCkp
OwotICAgIGRlbGV0ZSBpdC0+c2Vjb25kOworICAgIGRlbGV0ZSBpdC0+dmFsdWU7CiAgICAgZGF0
YU1hcC5yZW1vdmUoaXQpOwogICAgIGNsZWFyRmxhZyhIYXNSYXJlRGF0YUZsYWcpOwogfQpAQCAt
MTYxNCwxMCArMTYxNCwxMCBAQCBQYXNzUmVmUHRyPE5vZGVMaXN0PiBOb2RlOjpnZXRFbGVtZW50
c0J5VGFnTmFtZShjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSkKIAogICAgIE5vZGVMaXN0
c05vZGVEYXRhOjpUYWdOb2RlTGlzdENhY2hlOjpBZGRSZXN1bHQgcmVzdWx0ID0gZW5zdXJlUmFy
ZURhdGEoKS0+ZW5zdXJlTm9kZUxpc3RzKHRoaXMpLT5tX3RhZ05vZGVMaXN0Q2FjaGUuYWRkKGxv
Y2FsTmFtZUF0b20sIDApOwogICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJl
dHVybiBQYXNzUmVmUHRyPFRhZ05vZGVMaXN0PihyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7Cisg
ICAgICAgIHJldHVybiBQYXNzUmVmUHRyPFRhZ05vZGVMaXN0PihyZXN1bHQuaXRlcmF0b3ItPnZh
bHVlKTsKIAogICAgIFJlZlB0cjxUYWdOb2RlTGlzdD4gbGlzdCA9IFRhZ05vZGVMaXN0OjpjcmVh
dGUodGhpcywgc3RhckF0b20sIGxvY2FsTmFtZUF0b20pOwotICAgIHJlc3VsdC5pdGVyYXRvci0+
c2Vjb25kID0gbGlzdC5nZXQoKTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gbGlzdC5n
ZXQoKTsKICAgICByZXR1cm4gbGlzdC5yZWxlYXNlKCk7ICAgCiB9CiAKQEAgLTE2MzgsMTAgKzE2
MzgsMTAgQEAgUGFzc1JlZlB0cjxOb2RlTGlzdD4gTm9kZTo6Z2V0RWxlbWVudHNCeVRhZ05hbWVO
Uyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVUKICAgICBOb2RlTGlzdHNOb2RlRGF0YTo6
VGFnTm9kZUxpc3RDYWNoZU5TOjpBZGRSZXN1bHQgcmVzdWx0CiAgICAgICAgID0gZW5zdXJlUmFy
ZURhdGEoKS0+ZW5zdXJlTm9kZUxpc3RzKHRoaXMpLT5tX3RhZ05vZGVMaXN0Q2FjaGVOUy5hZGQo
UXVhbGlmaWVkTmFtZShudWxsQXRvbSwgbG9jYWxOYW1lQXRvbSwgbmFtZXNwYWNlVVJJKS5pbXBs
KCksIDApOwogICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJldHVybiBQYXNz
UmVmUHRyPFRhZ05vZGVMaXN0PihyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7CisgICAgICAgIHJl
dHVybiBQYXNzUmVmUHRyPFRhZ05vZGVMaXN0PihyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKIAog
ICAgIFJlZlB0cjxUYWdOb2RlTGlzdD4gbGlzdCA9IFRhZ05vZGVMaXN0OjpjcmVhdGUodGhpcywg
bmFtZXNwYWNlVVJJLmlzRW1wdHkoKSA/IG51bGxBdG9tIDogbmFtZXNwYWNlVVJJLCBsb2NhbE5h
bWVBdG9tKTsKLSAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IGxpc3QuZ2V0KCk7CisgICAg
cmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGxpc3QuZ2V0KCk7CiAgICAgcmV0dXJuIGxpc3QucmVs
ZWFzZSgpOwogfQogCkBAIC0xNjQ5LDEwICsxNjQ5LDEwIEBAIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+
IE5vZGU6OmdldEVsZW1lbnRzQnlOYW1lKGNvbnN0IFN0cmluZyYgZWxlbWVudE5hbWUpCiB7CiAg
ICAgTm9kZUxpc3RzTm9kZURhdGE6Ok5hbWVOb2RlTGlzdENhY2hlOjpBZGRSZXN1bHQgcmVzdWx0
ID0gZW5zdXJlUmFyZURhdGEoKS0+ZW5zdXJlTm9kZUxpc3RzKHRoaXMpLT5tX25hbWVOb2RlTGlz
dENhY2hlLmFkZChlbGVtZW50TmFtZSwgMCk7CiAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkK
LSAgICAgICAgcmV0dXJuIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+KHJlc3VsdC5pdGVyYXRvci0+c2Vj
b25kKTsKKyAgICAgICAgcmV0dXJuIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+KHJlc3VsdC5pdGVyYXRv
ci0+dmFsdWUpOwogCiAgICAgUmVmUHRyPE5hbWVOb2RlTGlzdD4gbGlzdCA9IE5hbWVOb2RlTGlz
dDo6Y3JlYXRlKHRoaXMsIGVsZW1lbnROYW1lKTsKLSAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29u
ZCA9IGxpc3QuZ2V0KCk7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGxpc3QuZ2V0KCk7
CiAgICAgcmV0dXJuIGxpc3QucmVsZWFzZSgpOwogfQogCkBAIC0xNjYxLDEwICsxNjYxLDEwIEBA
IFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IE5vZGU6OmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY29uc3Qg
U3RyaW5nJiBjbGFzc05hbWVzKQogICAgIE5vZGVMaXN0c05vZGVEYXRhOjpDbGFzc05vZGVMaXN0
Q2FjaGU6OkFkZFJlc3VsdCByZXN1bHQKICAgICAgICAgPSBlbnN1cmVSYXJlRGF0YSgpLT5lbnN1
cmVOb2RlTGlzdHModGhpcyktPm1fY2xhc3NOb2RlTGlzdENhY2hlLmFkZChjbGFzc05hbWVzLCAw
KTsKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXR1cm4gUGFzc1JlZlB0
cjxOb2RlTGlzdD4ocmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOworICAgICAgICByZXR1cm4gUGFz
c1JlZlB0cjxOb2RlTGlzdD4ocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CiAKICAgICBSZWZQdHI8
Q2xhc3NOb2RlTGlzdD4gbGlzdCA9IENsYXNzTm9kZUxpc3Q6OmNyZWF0ZSh0aGlzLCBjbGFzc05h
bWVzKTsKLSAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IGxpc3QuZ2V0KCk7CisgICAgcmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGxpc3QuZ2V0KCk7CiAgICAgcmV0dXJuIGxpc3QucmVsZWFz
ZSgpOwogfQogCkBAIC0yMzA4LDEwICsyMzA4LDEwIEBAIHZvaWQgTm9kZUxpc3RzTm9kZURhdGE6
OmludmFsaWRhdGVDYWNoZXMoKQogewogICAgIFRhZ05vZGVMaXN0Q2FjaGU6OmNvbnN0X2l0ZXJh
dG9yIHRhZ0NhY2hlRW5kID0gbV90YWdOb2RlTGlzdENhY2hlLmVuZCgpOwogICAgIGZvciAoVGFn
Tm9kZUxpc3RDYWNoZTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RhZ05vZGVMaXN0Q2FjaGUuYmVn
aW4oKTsgaXQgIT0gdGFnQ2FjaGVFbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPmludmFs
aWRhdGVDYWNoZSgpOworICAgICAgICBpdC0+dmFsdWUtPmludmFsaWRhdGVDYWNoZSgpOwogICAg
IFRhZ05vZGVMaXN0Q2FjaGVOUzo6Y29uc3RfaXRlcmF0b3IgdGFnQ2FjaGVOU0VuZCA9IG1fdGFn
Tm9kZUxpc3RDYWNoZU5TLmVuZCgpOwogICAgIGZvciAoVGFnTm9kZUxpc3RDYWNoZU5TOjpjb25z
dF9pdGVyYXRvciBpdCA9IG1fdGFnTm9kZUxpc3RDYWNoZU5TLmJlZ2luKCk7IGl0ICE9IHRhZ0Nh
Y2hlTlNFbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPmludmFsaWRhdGVDYWNoZSgpOwor
ICAgICAgICBpdC0+dmFsdWUtPmludmFsaWRhdGVDYWNoZSgpOwogICAgIGludmFsaWRhdGVDYWNo
ZXNUaGF0RGVwZW5kT25BdHRyaWJ1dGVzKCk7CiB9CiAKQEAgLTIzMjQsMTggKzIzMjQsMTggQEAg
dm9pZCBOb2RlTGlzdHNOb2RlRGF0YTo6aW52YWxpZGF0ZUNhY2hlc1RoYXREZXBlbmRPbkF0dHJp
YnV0ZXMoKQogCiAgICAgQ2xhc3NOb2RlTGlzdENhY2hlOjppdGVyYXRvciBjbGFzc0NhY2hlRW5k
ID0gbV9jbGFzc05vZGVMaXN0Q2FjaGUuZW5kKCk7CiAgICAgZm9yIChDbGFzc05vZGVMaXN0Q2Fj
aGU6Oml0ZXJhdG9yIGl0ID0gbV9jbGFzc05vZGVMaXN0Q2FjaGUuYmVnaW4oKTsgaXQgIT0gY2xh
c3NDYWNoZUVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+aW52YWxpZGF0ZUNhY2hlKCk7
CisgICAgICAgIGl0LT52YWx1ZS0+aW52YWxpZGF0ZUNhY2hlKCk7CiAKICAgICBOYW1lTm9kZUxp
c3RDYWNoZTo6aXRlcmF0b3IgbmFtZUNhY2hlRW5kID0gbV9uYW1lTm9kZUxpc3RDYWNoZS5lbmQo
KTsKICAgICBmb3IgKE5hbWVOb2RlTGlzdENhY2hlOjppdGVyYXRvciBpdCA9IG1fbmFtZU5vZGVM
aXN0Q2FjaGUuYmVnaW4oKTsgaXQgIT0gbmFtZUNhY2hlRW5kOyArK2l0KQotICAgICAgICBpdC0+
c2Vjb25kLT5pbnZhbGlkYXRlQ2FjaGUoKTsKKyAgICAgICAgaXQtPnZhbHVlLT5pbnZhbGlkYXRl
Q2FjaGUoKTsKICAgICBpZiAobV9sYWJlbHNOb2RlTGlzdENhY2hlKQogICAgICAgICBtX2xhYmVs
c05vZGVMaXN0Q2FjaGUtPmludmFsaWRhdGVDYWNoZSgpOwogCiAjaWYgRU5BQkxFKE1JQ1JPREFU
QSkKICAgICBNaWNyb0RhdGFJdGVtTGlzdENhY2hlOjppdGVyYXRvciBpdGVtTGlzdENhY2hlRW5k
ID0gbV9taWNyb0RhdGFJdGVtTGlzdENhY2hlLmVuZCgpOwogICAgIGZvciAoTWljcm9EYXRhSXRl
bUxpc3RDYWNoZTo6aXRlcmF0b3IgaXQgPSBtX21pY3JvRGF0YUl0ZW1MaXN0Q2FjaGUuYmVnaW4o
KTsgaXQgIT0gaXRlbUxpc3RDYWNoZUVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+aW52
YWxpZGF0ZUNhY2hlKCk7CisgICAgICAgIGl0LT52YWx1ZS0+aW52YWxpZGF0ZUNhY2hlKCk7CiAj
ZW5kaWYKIH0KIApAQCAtMjU5Myw3ICsyNTkzLDcgQEAgdm9pZCBOb2RlOjpjb2xsZWN0TWF0Y2hp
bmdPYnNlcnZlcnNGb3JNdXRhdGlvbihIYXNoTWFwPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIqLAog
ICAgICAgICAgICAgICAgIE11dGF0aW9uUmVjb3JkRGVsaXZlcnlPcHRpb25zIGRlbGl2ZXJ5T3B0
aW9ucyA9IHJlZ2lzdHJhdGlvbi0+ZGVsaXZlcnlPcHRpb25zKCk7CiAgICAgICAgICAgICAgICAg
SGFzaE1hcDxXZWJLaXRNdXRhdGlvbk9ic2VydmVyKiwgTXV0YXRpb25SZWNvcmREZWxpdmVyeU9w
dGlvbnM+OjpBZGRSZXN1bHQgcmVzdWx0ID0gb2JzZXJ2ZXJzLmFkZChyZWdpc3RyYXRpb24tPm9i
c2VydmVyKCksIGRlbGl2ZXJ5T3B0aW9ucyk7CiAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQu
aXNOZXdFbnRyeSkKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQg
fD0gZGVsaXZlcnlPcHRpb25zOworICAgICAgICAgICAgICAgICAgICByZXN1bHQuaXRlcmF0b3It
PnZhbHVlIHw9IGRlbGl2ZXJ5T3B0aW9uczsKIAogICAgICAgICAgICAgfQogICAgICAgICB9CkBA
IC0yNjA2LDcgKzI2MDYsNyBAQCB2b2lkIE5vZGU6OmNvbGxlY3RNYXRjaGluZ09ic2VydmVyc0Zv
ck11dGF0aW9uKEhhc2hNYXA8V2ViS2l0TXV0YXRpb25PYnNlcnZlciosCiAgICAgICAgICAgICAg
ICAgTXV0YXRpb25SZWNvcmREZWxpdmVyeU9wdGlvbnMgZGVsaXZlcnlPcHRpb25zID0gcmVnaXN0
cmF0aW9uLT5kZWxpdmVyeU9wdGlvbnMoKTsKICAgICAgICAgICAgICAgICBIYXNoTWFwPFdlYktp
dE11dGF0aW9uT2JzZXJ2ZXIqLCBNdXRhdGlvblJlY29yZERlbGl2ZXJ5T3B0aW9ucz46OkFkZFJl
c3VsdCByZXN1bHQgPSBvYnNlcnZlcnMuYWRkKHJlZ2lzdHJhdGlvbi0+b2JzZXJ2ZXIoKSwgZGVs
aXZlcnlPcHRpb25zKTsKICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQot
ICAgICAgICAgICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCB8PSBkZWxpdmVyeU9w
dGlvbnM7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgfD0gZGVs
aXZlcnlPcHRpb25zOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmNwcAppbmRleCAwMTgwMDRiZjVkMWNj
YzNiM2IyZTZkNDY0OWZlZjRiN2VmYzgxODIyLi43MjAxOTAxYzNjZTVjOTg5ODI2ZGJkNmM0MTY1
OTczZDVhZTg5OWVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUHJvY2Vzc2luZ0lu
c3RydWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUHJvY2Vzc2luZ0luc3RydWN0
aW9uLmNwcApAQCAtMTE2LDcgKzExNiw3IEBAIHZvaWQgUHJvY2Vzc2luZ0luc3RydWN0aW9uOjpj
aGVja1N0eWxlU2hlZXQoKQogICAgICAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3Rf
aXRlcmF0b3IgaSA9IGF0dHJzLmZpbmQoInR5cGUiKTsKICAgICAgICAgU3RyaW5nIHR5cGU7CiAg
ICAgICAgIGlmIChpICE9IGF0dHJzLmVuZCgpKQotICAgICAgICAgICAgdHlwZSA9IGktPnNlY29u
ZDsKKyAgICAgICAgICAgIHR5cGUgPSBpLT52YWx1ZTsKIAogICAgICAgICBtX2lzQ1NTID0gdHlw
ZS5pc0VtcHR5KCkgfHwgdHlwZSA9PSAidGV4dC9jc3MiOwogI2lmIEVOQUJMRShYU0xUKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwIGIv
U291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwCmluZGV4IDkyNDQ1
Y2E4MGRhZjYzMzIzOWQyZjc5Y2VlOThkZDlkZDQ0MWIzMjMuLjUzNWI1NzBiNWQ3ZGU5ZjRhZjkz
NTgzZTdjNzFkMTJiMmQ3NTM1YTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3Jp
cHRFeGVjdXRpb25Db250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC5jcHAKQEAgLTE3Myw5ICsxNzMsOSBAQCBib29sIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQ6OmNhblN1c3BlbmRBY3RpdmVET01PYmplY3RzKCkKICAgICBtX2l0ZXJhdGluZ0Fj
dGl2ZURPTU9iamVjdHMgPSB0cnVlOwogICAgIEhhc2hNYXA8QWN0aXZlRE9NT2JqZWN0Kiwgdm9p
ZCo+OjppdGVyYXRvciBhY3RpdmVPYmplY3RzRW5kID0gbV9hY3RpdmVET01PYmplY3RzLmVuZCgp
OwogICAgIGZvciAoSGFzaE1hcDxBY3RpdmVET01PYmplY3QqLCB2b2lkKj46Oml0ZXJhdG9yIGl0
ZXIgPSBtX2FjdGl2ZURPTU9iamVjdHMuYmVnaW4oKTsgaXRlciAhPSBhY3RpdmVPYmplY3RzRW5k
OyArK2l0ZXIpIHsKLSAgICAgICAgQVNTRVJUKGl0ZXItPmZpcnN0LT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkgPT0gdGhpcyk7Ci0gICAgICAgIEFTU0VSVChpdGVyLT5maXJzdC0+c3VzcGVuZElm
TmVlZGVkQ2FsbGVkKCkpOwotICAgICAgICBpZiAoIWl0ZXItPmZpcnN0LT5jYW5TdXNwZW5kKCkp
IHsKKyAgICAgICAgQVNTRVJUKGl0ZXItPmtleS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpID09
IHRoaXMpOworICAgICAgICBBU1NFUlQoaXRlci0+a2V5LT5zdXNwZW5kSWZOZWVkZWRDYWxsZWQo
KSk7CisgICAgICAgIGlmICghaXRlci0+a2V5LT5jYW5TdXNwZW5kKCkpIHsKICAgICAgICAgICAg
IG1faXRlcmF0aW5nQWN0aXZlRE9NT2JqZWN0cyA9IGZhbHNlOwogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICB9CkBAIC0xOTAsOSArMTkwLDkgQEAgdm9pZCBTY3JpcHRFeGVjdXRp
b25Db250ZXh0OjpzdXNwZW5kQWN0aXZlRE9NT2JqZWN0cyhBY3RpdmVET01PYmplY3Q6OlJlYXNv
bkZvclMKICAgICBtX2l0ZXJhdGluZ0FjdGl2ZURPTU9iamVjdHMgPSB0cnVlOwogICAgIEhhc2hN
YXA8QWN0aXZlRE9NT2JqZWN0Kiwgdm9pZCo+OjppdGVyYXRvciBhY3RpdmVPYmplY3RzRW5kID0g
bV9hY3RpdmVET01PYmplY3RzLmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDxBY3RpdmVET01PYmpl
Y3QqLCB2b2lkKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX2FjdGl2ZURPTU9iamVjdHMuYmVnaW4oKTsg
aXRlciAhPSBhY3RpdmVPYmplY3RzRW5kOyArK2l0ZXIpIHsKLSAgICAgICAgQVNTRVJUKGl0ZXIt
PmZpcnN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgPT0gdGhpcyk7Ci0gICAgICAgIEFTU0VS
VChpdGVyLT5maXJzdC0+c3VzcGVuZElmTmVlZGVkQ2FsbGVkKCkpOwotICAgICAgICBpdGVyLT5m
aXJzdC0+c3VzcGVuZCh3aHkpOworICAgICAgICBBU1NFUlQoaXRlci0+a2V5LT5zY3JpcHRFeGVj
dXRpb25Db250ZXh0KCkgPT0gdGhpcyk7CisgICAgICAgIEFTU0VSVChpdGVyLT5rZXktPnN1c3Bl
bmRJZk5lZWRlZENhbGxlZCgpKTsKKyAgICAgICAgaXRlci0+a2V5LT5zdXNwZW5kKHdoeSk7CiAg
ICAgfQogICAgIG1faXRlcmF0aW5nQWN0aXZlRE9NT2JqZWN0cyA9IGZhbHNlOwogICAgIG1fYWN0
aXZlRE9NT2JqZWN0c0FyZVN1c3BlbmRlZCA9IHRydWU7CkBAIC0yMDYsOSArMjA2LDkgQEAgdm9p
ZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpyZXN1bWVBY3RpdmVET01PYmplY3RzKCkKICAgICBt
X2l0ZXJhdGluZ0FjdGl2ZURPTU9iamVjdHMgPSB0cnVlOwogICAgIEhhc2hNYXA8QWN0aXZlRE9N
T2JqZWN0Kiwgdm9pZCo+OjppdGVyYXRvciBhY3RpdmVPYmplY3RzRW5kID0gbV9hY3RpdmVET01P
YmplY3RzLmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDxBY3RpdmVET01PYmplY3QqLCB2b2lkKj46
Oml0ZXJhdG9yIGl0ZXIgPSBtX2FjdGl2ZURPTU9iamVjdHMuYmVnaW4oKTsgaXRlciAhPSBhY3Rp
dmVPYmplY3RzRW5kOyArK2l0ZXIpIHsKLSAgICAgICAgQVNTRVJUKGl0ZXItPmZpcnN0LT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCkgPT0gdGhpcyk7Ci0gICAgICAgIEFTU0VSVChpdGVyLT5maXJz
dC0+c3VzcGVuZElmTmVlZGVkQ2FsbGVkKCkpOwotICAgICAgICBpdGVyLT5maXJzdC0+cmVzdW1l
KCk7CisgICAgICAgIEFTU0VSVChpdGVyLT5rZXktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSA9
PSB0aGlzKTsKKyAgICAgICAgQVNTRVJUKGl0ZXItPmtleS0+c3VzcGVuZElmTmVlZGVkQ2FsbGVk
KCkpOworICAgICAgICBpdGVyLT5rZXktPnJlc3VtZSgpOwogICAgIH0KICAgICBtX2l0ZXJhdGlu
Z0FjdGl2ZURPTU9iamVjdHMgPSBmYWxzZTsKIH0KQEAgLTIyMCw5ICsyMjAsOSBAQCB2b2lkIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnN0b3BBY3RpdmVET01PYmplY3RzKCkKICAgICBtX2l0ZXJh
dGluZ0FjdGl2ZURPTU9iamVjdHMgPSB0cnVlOwogICAgIEhhc2hNYXA8QWN0aXZlRE9NT2JqZWN0
Kiwgdm9pZCo+OjppdGVyYXRvciBhY3RpdmVPYmplY3RzRW5kID0gbV9hY3RpdmVET01PYmplY3Rz
LmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDxBY3RpdmVET01PYmplY3QqLCB2b2lkKj46Oml0ZXJh
dG9yIGl0ZXIgPSBtX2FjdGl2ZURPTU9iamVjdHMuYmVnaW4oKTsgaXRlciAhPSBhY3RpdmVPYmpl
Y3RzRW5kOyArK2l0ZXIpIHsKLSAgICAgICAgQVNTRVJUKGl0ZXItPmZpcnN0LT5zY3JpcHRFeGVj
dXRpb25Db250ZXh0KCkgPT0gdGhpcyk7Ci0gICAgICAgIEFTU0VSVChpdGVyLT5maXJzdC0+c3Vz
cGVuZElmTmVlZGVkQ2FsbGVkKCkpOwotICAgICAgICBpdGVyLT5maXJzdC0+c3RvcCgpOworICAg
ICAgICBBU1NFUlQoaXRlci0+a2V5LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgPT0gdGhpcyk7
CisgICAgICAgIEFTU0VSVChpdGVyLT5rZXktPnN1c3BlbmRJZk5lZWRlZENhbGxlZCgpKTsKKyAg
ICAgICAgaXRlci0+a2V5LT5zdG9wKCk7CiAgICAgfQogICAgIG1faXRlcmF0aW5nQWN0aXZlRE9N
T2JqZWN0cyA9IGZhbHNlOwogCkBAIC0zODAsNyArMzgwLDcgQEAgdm9pZCBTY3JpcHRFeGVjdXRp
b25Db250ZXh0OjphZGp1c3RNaW5pbXVtVGltZXJJbnRlcnZhbChkb3VibGUgb2xkTWluaW11bVRp
bWVySW4KIHsKICAgICBpZiAobWluaW11bVRpbWVySW50ZXJ2YWwoKSAhPSBvbGRNaW5pbXVtVGlt
ZXJJbnRlcnZhbCkgewogICAgICAgICBmb3IgKFRpbWVvdXRNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBt
X3RpbWVvdXRzLmJlZ2luKCk7IGl0ZXIgIT0gbV90aW1lb3V0cy5lbmQoKTsgKytpdGVyKSB7Ci0g
ICAgICAgICAgICBET01UaW1lciogdGltZXIgPSBpdGVyLT5zZWNvbmQ7CisgICAgICAgICAgICBE
T01UaW1lciogdGltZXIgPSBpdGVyLT52YWx1ZTsKICAgICAgICAgICAgIHRpbWVyLT5hZGp1c3RN
aW5pbXVtVGltZXJJbnRlcnZhbChvbGRNaW5pbXVtVGltZXJJbnRlcnZhbCk7CiAgICAgICAgIH0K
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU3BhY2VTcGxpdFN0cmluZy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU3BhY2VTcGxpdFN0cmluZy5jcHAKaW5kZXggOWNjZTdk
OTViNWUxMDQ0M2MwM2VkYTViNzJmMTEyYzU3MDUyZTUxMi4uMWRjMWZiMGRkZTFmMDIzZjNmOGE2
NTNiMjNhYzNkODczOGU4YzM0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NwYWNl
U3BsaXRTdHJpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TcGFjZVNwbGl0U3RyaW5n
LmNwcApAQCAtMTUwLDcgKzE1MCw3IEBAIFNwYWNlU3BsaXRTdHJpbmdEYXRhOjp+U3BhY2VTcGxp
dFN0cmluZ0RhdGEoKQogCiBQYXNzUmVmUHRyPFNwYWNlU3BsaXRTdHJpbmdEYXRhPiBTcGFjZVNw
bGl0U3RyaW5nRGF0YTo6Y3JlYXRlKGNvbnN0IEF0b21pY1N0cmluZyYgc3RyaW5nKQogewotICAg
IFNwYWNlU3BsaXRTdHJpbmdEYXRhKiYgZGF0YSA9IHNoYXJlZERhdGFNYXAoKS5hZGQoc3RyaW5n
LCAwKS5pdGVyYXRvci0+c2Vjb25kOworICAgIFNwYWNlU3BsaXRTdHJpbmdEYXRhKiYgZGF0YSA9
IHNoYXJlZERhdGFNYXAoKS5hZGQoc3RyaW5nLCAwKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYg
KCFkYXRhKSB7CiAgICAgICAgIGRhdGEgPSBuZXcgU3BhY2VTcGxpdFN0cmluZ0RhdGEoc3RyaW5n
KTsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKGRhdGEpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVs
ZW1lbnQuY3BwCmluZGV4IDU1YmM0MWQ0MzUxY2E2ODM2YmI1NDRlMTc1NDI1MGQ5NDFkYWM3MTEu
LmM3MGIzODFlZWVkYTBmZmNmZjA4NDA5Y2IxYTlkMGVhNmY0YmEwMTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vU3R5bGVkRWxlbWVudC5jcHAKQEAgLTIzNywxNCArMjM3LDE0IEBAIHZvaWQgU3R5bGVkRWxl
bWVudDo6dXBkYXRlQXR0cmlidXRlU3R5bGUoKQogICAgIFByZXNlbnRhdGlvbkF0dHJpYnV0ZUNh
Y2hlOjppdGVyYXRvciBjYWNoZUl0ZXJhdG9yOwogICAgIGlmIChjYWNoZUhhc2gpIHsKICAgICAg
ICAgY2FjaGVJdGVyYXRvciA9IHByZXNlbnRhdGlvbkF0dHJpYnV0ZUNhY2hlKCkuYWRkKGNhY2hl
SGFzaCwgbnVsbHB0cikuaXRlcmF0b3I7Ci0gICAgICAgIGlmIChjYWNoZUl0ZXJhdG9yLT5zZWNv
bmQgJiYgY2FjaGVJdGVyYXRvci0+c2Vjb25kLT5rZXkgIT0gY2FjaGVLZXkpCisgICAgICAgIGlm
IChjYWNoZUl0ZXJhdG9yLT52YWx1ZSAmJiBjYWNoZUl0ZXJhdG9yLT52YWx1ZS0+a2V5ICE9IGNh
Y2hlS2V5KQogICAgICAgICAgICAgY2FjaGVIYXNoID0gMDsKICAgICB9IGVsc2UKICAgICAgICAg
Y2FjaGVJdGVyYXRvciA9IHByZXNlbnRhdGlvbkF0dHJpYnV0ZUNhY2hlKCkuZW5kKCk7CiAKICAg
ICBSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gc3R5bGU7Ci0gICAgaWYgKGNhY2hlSGFzaCAmJiBj
YWNoZUl0ZXJhdG9yLT5zZWNvbmQpIAotICAgICAgICBzdHlsZSA9IGNhY2hlSXRlcmF0b3ItPnNl
Y29uZC0+dmFsdWU7CisgICAgaWYgKGNhY2hlSGFzaCAmJiBjYWNoZUl0ZXJhdG9yLT52YWx1ZSkK
KyAgICAgICAgc3R5bGUgPSBjYWNoZUl0ZXJhdG9yLT52YWx1ZS0+dmFsdWU7CiAgICAgZWxzZSB7
CiAgICAgICAgIHN0eWxlID0gU3R5bGVQcm9wZXJ0eVNldDo6Y3JlYXRlKGlzU1ZHRWxlbWVudCgp
ID8gU1ZHQXR0cmlidXRlTW9kZSA6IENTU1F1aXJrc01vZGUpOwogICAgICAgICB1bnNpZ25lZCBz
aXplID0gYXR0cmlidXRlQ291bnQoKTsKQEAgLTI2Miw3ICsyNjIsNyBAQCB2b2lkIFN0eWxlZEVs
ZW1lbnQ6OnVwZGF0ZUF0dHJpYnV0ZVN0eWxlKCkKICAgICAgICAgYXR0cmlidXRlRGF0YSgpLT5z
ZXRBdHRyaWJ1dGVTdHlsZShzdHlsZSk7CiAgICAgfQogCi0gICAgaWYgKCFjYWNoZUhhc2ggfHwg
Y2FjaGVJdGVyYXRvci0+c2Vjb25kKQorICAgIGlmICghY2FjaGVIYXNoIHx8IGNhY2hlSXRlcmF0
b3ItPnZhbHVlKQogICAgICAgICByZXR1cm47CiAKICAgICBPd25QdHI8UHJlc2VudGF0aW9uQXR0
cmlidXRlQ2FjaGVFbnRyeT4gbmV3RW50cnkgPSBhZG9wdFB0cihuZXcgUHJlc2VudGF0aW9uQXR0
cmlidXRlQ2FjaGVFbnRyeSk7CkBAIC0yNzUsNyArMjc1LDcgQEAgdm9pZCBTdHlsZWRFbGVtZW50
Ojp1cGRhdGVBdHRyaWJ1dGVTdHlsZSgpCiAgICAgICAgIHByZXNlbnRhdGlvbkF0dHJpYnV0ZUNh
Y2hlKCkuY2xlYXIoKTsKICAgICAgICAgcHJlc2VudGF0aW9uQXR0cmlidXRlQ2FjaGUoKS5zZXQo
Y2FjaGVIYXNoLCBuZXdFbnRyeS5yZWxlYXNlKCkpOwogICAgIH0gZWxzZQotICAgICAgICBjYWNo
ZUl0ZXJhdG9yLT5zZWNvbmQgPSBuZXdFbnRyeS5yZWxlYXNlKCk7CisgICAgICAgIGNhY2hlSXRl
cmF0b3ItPnZhbHVlID0gbmV3RW50cnkucmVsZWFzZSgpOwogfQogCiB2b2lkIFN0eWxlZEVsZW1l
bnQ6OmFkZFByb3BlcnR5VG9BdHRyaWJ1dGVTdHlsZShTdHlsZVByb3BlcnR5U2V0KiBzdHlsZSwg
aW50IHByb3BlcnR5SUQsIGludCBpZGVudGlmaWVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDb2xs
ZWN0aW9uLmNwcAppbmRleCBjM2E3MTUzY2FlNDVhZDYwMWE4NWM4NTA5OWUzZjE1MTg5OTcyN2M5
Li43NGI5OGM2ZmI0MWU3OTA3NzkzNjc2YmUzMGE4NzYyMzljNTM4MjQyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxDb2xsZWN0aW9uLmNwcApAQCAtMzU5LDcgKzM1OSw3IEBAIFBhc3NSZWZQdHI8
Tm9kZUxpc3Q+IEhUTUxDb2xsZWN0aW9uOjp0YWdzKGNvbnN0IFN0cmluZyYgbmFtZSkKIAogdm9p
ZCBIVE1MQ29sbGVjdGlvbjo6YXBwZW5kKE5vZGVDYWNoZU1hcCYgbWFwLCBjb25zdCBBdG9taWNT
dHJpbmcmIGtleSwgRWxlbWVudCogZWxlbWVudCkKIHsKLSAgICBPd25QdHI8VmVjdG9yPEVsZW1l
bnQqPiA+JiB2ZWN0b3IgPSBtYXAuYWRkKGtleS5pbXBsKCksIG51bGxwdHIpLml0ZXJhdG9yLT5z
ZWNvbmQ7CisgICAgT3duUHRyPFZlY3RvcjxFbGVtZW50Kj4gPiYgdmVjdG9yID0gbWFwLmFkZChr
ZXkuaW1wbCgpLCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCF2ZWN0b3IpCiAg
ICAgICAgIHZlY3RvciA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8RWxlbWVudCo+KTsKICAgICB2ZWN0
b3ItPmFwcGVuZChlbGVtZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0Nv
ZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKaW5kZXggMGVhZTk0N2Q0ZTdjMDYyY2E0ZWNjNWRmYTM0
OGY0OTMwOWI5YjUwZi4uOWNiN2VkYjA5M2FhN2ExMjk5MWU4NWJlMGMxZTcxNzM0NTY4ZDRhYyAx
MDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0
b3IucHkKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0
b3IucHkKQEAgLTEyOTksNyArMTI5OSw3IEBAIGNsYXNzIFR5cGVCaW5kaW5nczoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUo
IiAgICAgICAgSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciAlcztcbiIgJSBpdF9uYW1lKQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3
bGluZSgiICAgICAgICAlcyA9IG9iamVjdC0+ZmluZChcIiVzXCIpO1xuIiAlIChpdF9uYW1lLCBw
cm9wX2RhdGEucFsibmFtZSJdKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgQVNTRVJUKCVzICE9IG9iamVj
dC0+ZW5kKCkpO1xuIiAlIGl0X25hbWUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgICAgICVzKCVzLT5zZWNvbmQu
Z2V0KCkpO1xuIiAlIChwcm9wX2RhdGEucGFyYW1fdHlwZV9iaW5kaW5nLmdldF92YWxpZGF0b3Jf
Y2FsbF90ZXh0KCksIGl0X25hbWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgICAgICAlcyglcy0+dmFsdWUuZ2V0
KCkpO1xuIiAlIChwcm9wX2RhdGEucGFyYW1fdHlwZV9iaW5kaW5nLmdldF92YWxpZGF0b3JfY2Fs
bF90ZXh0KCksIGl0X25hbWUpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgIH1cbiIpCiAKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgIGludCBm
b3VuZFByb3BlcnRpZXNDb3VudCA9ICVzO1xuIiAlIGxlbihyZXNvbHZlX2RhdGEubWFpbl9wcm9w
ZXJ0aWVzKSkKQEAgLTEzMTAsNyArMTMxMCw3IEBAIGNsYXNzIFR5cGVCaW5kaW5nczoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xp
bmUoIiAgICAgICAgSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciAlcztcbiIgJSBpdF9uYW1lKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIu
bmV3bGluZSgiICAgICAgICAlcyA9IG9iamVjdC0+ZmluZChcIiVzXCIpO1xuIiAlIChpdF9uYW1l
LCBwcm9wX2RhdGEucFsibmFtZSJdKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgaWYgKCVzICE9IG9iamVj
dC0+ZW5kKCkpIHtcbiIgJSBpdF9uYW1lKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgICAgICAgICAgJXMoJXMtPnNl
Y29uZC5nZXQoKSk7XG4iICUgKHByb3BfZGF0YS5wYXJhbV90eXBlX2JpbmRpbmcuZ2V0X3ZhbGlk
YXRvcl9jYWxsX3RleHQoKSwgaXRfbmFtZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgICAgICAgICAlcyglcy0+
dmFsdWUuZ2V0KCkpO1xuIiAlIChwcm9wX2RhdGEucGFyYW1fdHlwZV9iaW5kaW5nLmdldF92YWxp
ZGF0b3JfY2FsbF90ZXh0KCksIGl0X25hbWUpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgICAgICAgICAgKytmb3Vu
ZFByb3BlcnRpZXNDb3VudDtcbiIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgICAgIH1cbiIpCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIg
ICAgfVxuIikKQEAgLTE5NzAsNyArMTk3MCw3IEBAICRtZXNzYWdlSGFuZGxlcnMKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgICgoKnRoaXMpLippdC0+c2Vjb25kKShjYWxsSWQsIG1lc3Nh
Z2VPYmplY3QuZ2V0KCkpOworICAgICgoKnRoaXMpLippdC0+dmFsdWUpKGNhbGxJZCwgbWVzc2Fn
ZU9iamVjdC5nZXQoKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBs
OjpzZW5kUmVzcG9uc2UobG9uZyBjYWxsSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBy
ZXN1bHQsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBQYXNzUmVmUHRyPEluc3BlY3RvckFy
cmF5PiBwcm90b2NvbEVycm9ycywgRXJyb3JTdHJpbmcgaW52b2NhdGlvbkVycm9yKQpAQCAtMjA1
Myw3ICsyMDUzLDcgQEAgUiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OmdldFByb3Bl
cnR5VmFsdWVJbXBsKEluc3BlY3Rvck9iamVjdCogb2JqZWN0LAogICAgICAgICByZXR1cm4gdmFs
dWU7CiAgICAgfQogCi0gICAgaWYgKCFhc19tZXRob2QodmFsdWVJdGVyYXRvci0+c2Vjb25kLmdl
dCgpLCAmdmFsdWUpKQorICAgIGlmICghYXNfbWV0aG9kKHZhbHVlSXRlcmF0b3ItPnZhbHVlLmdl
dCgpLCAmdmFsdWUpKQogICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6
OmZvcm1hdCgiUGFyYW1ldGVyICclcycgaGFzIHdyb25nIHR5cGUuIEl0IG11c3QgYmUgJyVzJy4i
LCBuYW1lLnV0ZjgoKS5kYXRhKCksIHR5cGVfbmFtZSkpOwogICAgIGVsc2UKICAgICAgICAgaWYg
KHZhbHVlRm91bmQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NUGF0
Y2hTdXBwb3J0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01QYXRjaFN1cHBvcnQu
Y3BwCmluZGV4IGQ3ZmNiOWFhYzA4ZTg4NTM2ODZjZmRkYjUxZmExZTEwZDI5OTQ5Y2QuLjA3MTE1
MzNiNzk3ZTA5OTUxMjk0N2IyMmM1YTQxN2NiZjdhNDgxNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9ET01QYXRjaFN1cHBvcnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9ET01QYXRjaFN1cHBvcnQuY3BwCkBAIC0yMzQsMjQgKzIzNCwyNCBAQCBET01Q
YXRjaFN1cHBvcnQ6OmRpZmYoY29uc3QgVmVjdG9yPE93blB0cjxEaWdlc3Q+ID4mIG9sZExpc3Qs
IGNvbnN0IFZlY3RvcjxPd25QdAogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuZXdMaXN0
LnNpemUoKTsgKytpKSB7CiAgICAgICAgIERpZmZUYWJsZTo6aXRlcmF0b3IgaXQgPSBuZXdUYWJs
ZS5hZGQobmV3TGlzdFtpXS0+bV9zaGExLCBWZWN0b3I8c2l6ZV90PigpKS5pdGVyYXRvcjsKLSAg
ICAgICAgaXQtPnNlY29uZC5hcHBlbmQoaSk7CisgICAgICAgIGl0LT52YWx1ZS5hcHBlbmQoaSk7
CiAgICAgfQogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvbGRMaXN0LnNpemUoKTsgKytp
KSB7CiAgICAgICAgIERpZmZUYWJsZTo6aXRlcmF0b3IgaXQgPSBvbGRUYWJsZS5hZGQob2xkTGlz
dFtpXS0+bV9zaGExLCBWZWN0b3I8c2l6ZV90PigpKS5pdGVyYXRvcjsKLSAgICAgICAgaXQtPnNl
Y29uZC5hcHBlbmQoaSk7CisgICAgICAgIGl0LT52YWx1ZS5hcHBlbmQoaSk7CiAgICAgfQogCiAg
ICAgZm9yIChEaWZmVGFibGU6Oml0ZXJhdG9yIG5ld0l0ID0gbmV3VGFibGUuYmVnaW4oKTsgbmV3
SXQgIT0gbmV3VGFibGUuZW5kKCk7ICsrbmV3SXQpIHsKLSAgICAgICAgaWYgKG5ld0l0LT5zZWNv
bmQuc2l6ZSgpICE9IDEpCisgICAgICAgIGlmIChuZXdJdC0+dmFsdWUuc2l6ZSgpICE9IDEpCiAg
ICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBEaWZmVGFibGU6Oml0ZXJhdG9yIG9sZEl0
ID0gb2xkVGFibGUuZmluZChuZXdJdC0+Zmlyc3QpOwotICAgICAgICBpZiAob2xkSXQgPT0gb2xk
VGFibGUuZW5kKCkgfHwgb2xkSXQtPnNlY29uZC5zaXplKCkgIT0gMSkKKyAgICAgICAgRGlmZlRh
YmxlOjppdGVyYXRvciBvbGRJdCA9IG9sZFRhYmxlLmZpbmQobmV3SXQtPmtleSk7CisgICAgICAg
IGlmIChvbGRJdCA9PSBvbGRUYWJsZS5lbmQoKSB8fCBvbGRJdC0+dmFsdWUuc2l6ZSgpICE9IDEp
CiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBuZXdNYXBbbmV3SXQtPnNlY29uZFsw
XV0gPSBtYWtlX3BhaXIobmV3TGlzdFtuZXdJdC0+c2Vjb25kWzBdXS5nZXQoKSwgb2xkSXQtPnNl
Y29uZFswXSk7Ci0gICAgICAgIG9sZE1hcFtvbGRJdC0+c2Vjb25kWzBdXSA9IG1ha2VfcGFpcihv
bGRMaXN0W29sZEl0LT5zZWNvbmRbMF1dLmdldCgpLCBuZXdJdC0+c2Vjb25kWzBdKTsKKyAgICAg
ICAgbmV3TWFwW25ld0l0LT52YWx1ZVswXV0gPSBtYWtlX3BhaXIobmV3TGlzdFtuZXdJdC0+dmFs
dWVbMF1dLmdldCgpLCBvbGRJdC0+dmFsdWVbMF0pOworICAgICAgICBvbGRNYXBbb2xkSXQtPnZh
bHVlWzBdXSA9IG1ha2VfcGFpcihvbGRMaXN0W29sZEl0LT52YWx1ZVswXV0uZ2V0KCksIG5ld0l0
LT52YWx1ZVswXSk7CiAgICAgfQogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IG5ld0xpc3Quc2l6
ZSgpID4gMCAmJiBpIDwgbmV3TGlzdC5zaXplKCkgLSAxOyArK2kpIHsKQEAgLTM2MSw3ICszNjEs
NyBAQCBib29sIERPTVBhdGNoU3VwcG9ydDo6aW5uZXJQYXRjaENoaWxkcmVuKENvbnRhaW5lck5v
ZGUqIHBhcmVudE5vZGUsIGNvbnN0IFZlY3RvcgogCiAgICAgLy8gMi4gUGF0Y2ggbm9kZXMgbWFy
a2VkIGZvciBtZXJnZS4KICAgICBmb3IgKEhhc2hNYXA8RGlnZXN0KiwgRGlnZXN0Kj46Oml0ZXJh
dG9yIGl0ID0gbWVyZ2VzLmJlZ2luKCk7IGl0ICE9IG1lcmdlcy5lbmQoKTsgKytpdCkgewotICAg
ICAgICBpZiAoIWlubmVyUGF0Y2hOb2RlKGl0LT5zZWNvbmQsIGl0LT5maXJzdCwgZWMpKQorICAg
ICAgICBpZiAoIWlubmVyUGF0Y2hOb2RlKGl0LT52YWx1ZSwgaXQtPmtleSwgZWMpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtNDYwLDcgKzQ2MCw3IEBAIGJvb2wgRE9N
UGF0Y2hTdXBwb3J0OjpyZW1vdmVDaGlsZEFuZE1vdmVUb05ldyhEaWdlc3QqIG9sZERpZ2VzdCwg
RXhjZXB0aW9uQ29kZSYKICAgICAvLyBoaWdoIHRoYXQgaXQgd2lsbCBnZXQgbWVyZ2VkIGJhY2sg
aW50byB0aGUgb3JpZ2luYWwgRE9NIGR1cmluZyB0aGUgZnVydGhlciBwYXRjaGluZy4KICAgICBV
bnVzZWROb2Rlc01hcDo6aXRlcmF0b3IgaXQgPSBtX3VudXNlZE5vZGVzTWFwLmZpbmQob2xkRGln
ZXN0LT5tX3NoYTEpOwogICAgIGlmIChpdCAhPSBtX3VudXNlZE5vZGVzTWFwLmVuZCgpKSB7Ci0g
ICAgICAgIERpZ2VzdCogbmV3RGlnZXN0ID0gaXQtPnNlY29uZDsKKyAgICAgICAgRGlnZXN0KiBu
ZXdEaWdlc3QgPSBpdC0+dmFsdWU7CiAgICAgICAgIE5vZGUqIG5ld05vZGUgPSBuZXdEaWdlc3Qt
Pm1fbm9kZTsKICAgICAgICAgaWYgKCFtX2RvbUVkaXRvci0+cmVwbGFjZUNoaWxkKG5ld05vZGUt
PnBhcmVudE5vZGUoKSwgb2xkTm9kZSwgbmV3Tm9kZSwgZWMpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2Ny
aXB0TWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyLmNwcAppbmRleCA2MDUxNzEzNWQ4NTlhOTNhYzZjZTRhMzFiZTZjY2M1MDU2MjJiZDJl
Li43M2EzZTEzODVhODM5Y2ZiMTUyOWE3NGY3ZDNhNzczNDI4ZTFiNGUxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcApAQCAtOTgs
NyArOTgsNyBAQCB2b2lkIEluamVjdGVkU2NyaXB0TWFuYWdlcjo6ZGlzY2FyZEluamVjdGVkU2Ny
aXB0cygpCiB7CiAgICAgSWRUb0luamVjdGVkU2NyaXB0TWFwOjppdGVyYXRvciBlbmQgPSBtX2lk
VG9JbmplY3RlZFNjcmlwdC5lbmQoKTsKICAgICBmb3IgKElkVG9JbmplY3RlZFNjcmlwdE1hcDo6
aXRlcmF0b3IgaXQgPSBtX2lkVG9JbmplY3RlZFNjcmlwdC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpCi0gICAgICAgIGRpc2NhcmRJbmplY3RlZFNjcmlwdChpdC0+c2Vjb25kLnNjcmlwdFN0YXRl
KCkpOworICAgICAgICBkaXNjYXJkSW5qZWN0ZWRTY3JpcHQoaXQtPnZhbHVlLnNjcmlwdFN0YXRl
KCkpOwogICAgIG1faWRUb0luamVjdGVkU2NyaXB0LmNsZWFyKCk7CiB9CiAKQEAgLTEwNywxMSAr
MTA3LDExIEBAIHZvaWQgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjpkaXNjYXJkSW5qZWN0ZWRTY3Jp
cHRzRm9yKERPTVdpbmRvdyogd2luZG93KQogICAgIFZlY3Rvcjxsb25nPiBpZHNUb1JlbW92ZTsK
ICAgICBJZFRvSW5qZWN0ZWRTY3JpcHRNYXA6Oml0ZXJhdG9yIGVuZCA9IG1faWRUb0luamVjdGVk
U2NyaXB0LmVuZCgpOwogICAgIGZvciAoSWRUb0luamVjdGVkU2NyaXB0TWFwOjppdGVyYXRvciBp
dCA9IG1faWRUb0luamVjdGVkU2NyaXB0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAg
ICAgICBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUgPSBpdC0+c2Vjb25kLnNjcmlwdFN0YXRlKCk7
CisgICAgICAgIFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSA9IGl0LT52YWx1ZS5zY3JpcHRTdGF0
ZSgpOwogICAgICAgICBpZiAod2luZG93ICE9IGRvbVdpbmRvd0Zyb21TY3JpcHRTdGF0ZShzY3Jp
cHRTdGF0ZSkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgZGlzY2FyZEluamVjdGVk
U2NyaXB0KHNjcmlwdFN0YXRlKTsKLSAgICAgICAgaWRzVG9SZW1vdmUuYXBwZW5kKGl0LT5maXJz
dCk7CisgICAgICAgIGlkc1RvUmVtb3ZlLmFwcGVuZChpdC0+a2V5KTsKICAgICB9CiAKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGlkc1RvUmVtb3ZlLnNpemUoKTsgaSsrKQpAQCAtMTI2LDcg
KzEyNiw3IEBAIGJvb2wgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjpjYW5BY2Nlc3NJbnNwZWN0ZWRX
b3JrZXJDb250ZXh0KFNjcmlwdFN0YXRlKikKIHZvaWQgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjpy
ZWxlYXNlT2JqZWN0R3JvdXAoY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCkKIHsKICAgICBmb3Ig
KElkVG9JbmplY3RlZFNjcmlwdE1hcDo6aXRlcmF0b3IgaXQgPSBtX2lkVG9JbmplY3RlZFNjcmlw
dC5iZWdpbigpOyBpdCAhPSBtX2lkVG9JbmplY3RlZFNjcmlwdC5lbmQoKTsgKytpdCkKLSAgICAg
ICAgaXQtPnNlY29uZC5yZWxlYXNlT2JqZWN0R3JvdXAob2JqZWN0R3JvdXApOworICAgICAgICBp
dC0+dmFsdWUucmVsZWFzZU9iamVjdEdyb3VwKG9iamVjdEdyb3VwKTsKIH0KIAogU3RyaW5nIElu
amVjdGVkU2NyaXB0TWFuYWdlcjo6aW5qZWN0ZWRTY3JpcHRTb3VyY2UoKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5jcHAKaW5kZXggMTIzN2JlMDc1MjlhNWU0ZTA3
ODEwMGRmZmM0MmRjZTFkODU3YTZmNC4uYmI1Nzc2NGFiZDRkMzA3NjJlODcxOGZiOWEzOGYzYjE2
MDkwY2RlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFn
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnQuY3Bw
CkBAIC0xMzEsNyArMTMxLDcgQEAgdm9pZCBJbnNwZWN0b3JBZ2VudDo6ZW5hYmxlKEVycm9yU3Ry
aW5nKikKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikgJiYgRU5BQkxFKFdPUktFUlMp
CiAgICAgV29ya2Vyc01hcDo6aXRlcmF0b3Igd29ya2Vyc0VuZCA9IG1fd29ya2Vycy5lbmQoKTsK
ICAgICBmb3IgKFdvcmtlcnNNYXA6Oml0ZXJhdG9yIGl0ID0gbV93b3JrZXJzLmJlZ2luKCk7IGl0
ICE9IHdvcmtlcnNFbmQ7ICsraXQpIHsKLSAgICAgICAgSW5zcGVjdG9yV29ya2VyUmVzb3VyY2Uq
IHdvcmtlciA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIEluc3BlY3RvcldvcmtlclJlc291
cmNlKiB3b3JrZXIgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgIG1fZnJvbnRlbmQtPmluc3Bl
Y3RvcigpLT5kaWRDcmVhdGVXb3JrZXIod29ya2VyLT5pZCgpLCB3b3JrZXItPnVybCgpLCB3b3Jr
ZXItPmlzU2hhcmVkV29ya2VyKCkpOwogICAgIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKaW5kZXggMTYxMGNkNzAyODU4YWY3MmEw
MTc3ZjExYTRjYTM3ZTkyYzEwMDc2YS4uNzBhN2Q1ZWYxMzhhZmJkMTYxNGUxZTJkZmJmODhiZDAw
ZDI2ZWJhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNT
U0FnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdl
bnQuY3BwCkBAIC0xODMsMTAgKzE4MywxMCBAQCBpbmxpbmUgdm9pZCBTZWxlY3RvclByb2ZpbGU6
OmNvbW1pdFNlbGVjdG9yKGJvb2wgbWF0Y2hlZCkKIAogICAgIFJ1bGVNYXRjaGluZ1N0YXRzTWFw
OjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9ydWxlTWF0Y2hpbmdTdGF0cy5hZGQobWFrZUtleSgpLCBS
dWxlTWF0Y2hpbmdTdGF0cyhtX2N1cnJlbnRNYXRjaERhdGEsIG1hdGNoVGltZU1zLCAxLCBtYXRj
aGVkID8gMSA6IDApKTsKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIHJl
c3VsdC5pdGVyYXRvci0+c2Vjb25kLnRvdGFsVGltZSArPSBtYXRjaFRpbWVNczsKLSAgICAgICAg
cmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQuaGl0cyArPSAxOworICAgICAgICByZXN1bHQuaXRlcmF0
b3ItPnZhbHVlLnRvdGFsVGltZSArPSBtYXRjaFRpbWVNczsKKyAgICAgICAgcmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZS5oaXRzICs9IDE7CiAgICAgICAgIGlmIChtYXRjaGVkKQotICAgICAgICAgICAg
cmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQubWF0Y2hlcyArPSAxOworICAgICAgICAgICAgcmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZS5tYXRjaGVzICs9IDE7CiAgICAgfQogfQogCkBAIC0xOTksNyArMTk5
LDcgQEAgaW5saW5lIHZvaWQgU2VsZWN0b3JQcm9maWxlOjpjb21taXRTZWxlY3RvclRpbWUoKQog
ICAgIGlmIChpdCA9PSBtX3J1bGVNYXRjaGluZ1N0YXRzLmVuZCgpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBpdC0+c2Vjb25kLnRvdGFsVGltZSArPSBwcm9jZXNzaW5nVGltZU1zOworICAgIGl0
LT52YWx1ZS50b3RhbFRpbWUgKz0gcHJvY2Vzc2luZ1RpbWVNczsKIH0KIAogUGFzc1JlZlB0cjxU
eXBlQnVpbGRlcjo6Q1NTOjpTZWxlY3RvclByb2ZpbGU+IFNlbGVjdG9yUHJvZmlsZTo6dG9JbnNw
ZWN0b3JPYmplY3QoKSBjb25zdApAQCAtMjA3LDEyICsyMDcsMTIgQEAgUGFzc1JlZlB0cjxUeXBl
QnVpbGRlcjo6Q1NTOjpTZWxlY3RvclByb2ZpbGU+IFNlbGVjdG9yUHJvZmlsZTo6dG9JbnNwZWN0
b3JPYmplY3QKICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpDU1M6
OlNlbGVjdG9yUHJvZmlsZUVudHJ5PiA+IHNlbGVjdG9yUHJvZmlsZURhdGEgPSBUeXBlQnVpbGRl
cjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkNTUzo6U2VsZWN0b3JQcm9maWxlRW50cnk+OjpjcmVhdGUo
KTsKICAgICBmb3IgKFJ1bGVNYXRjaGluZ1N0YXRzTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1f
cnVsZU1hdGNoaW5nU3RhdHMuYmVnaW4oKTsgaXQgIT0gbV9ydWxlTWF0Y2hpbmdTdGF0cy5lbmQo
KTsgKytpdCkgewogICAgICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6U2VsZWN0b3JQcm9m
aWxlRW50cnk+IGVudHJ5ID0gVHlwZUJ1aWxkZXI6OkNTUzo6U2VsZWN0b3JQcm9maWxlRW50cnk6
OmNyZWF0ZSgpCi0gICAgICAgICAgICAuc2V0U2VsZWN0b3IoaXQtPnNlY29uZC5zZWxlY3RvcikK
LSAgICAgICAgICAgIC5zZXRVcmwoaXQtPnNlY29uZC51cmwpCi0gICAgICAgICAgICAuc2V0TGlu
ZU51bWJlcihpdC0+c2Vjb25kLmxpbmVOdW1iZXIpCi0gICAgICAgICAgICAuc2V0VGltZShpdC0+
c2Vjb25kLnRvdGFsVGltZSkKLSAgICAgICAgICAgIC5zZXRIaXRDb3VudChpdC0+c2Vjb25kLmhp
dHMpCi0gICAgICAgICAgICAuc2V0TWF0Y2hDb3VudChpdC0+c2Vjb25kLm1hdGNoZXMpOworICAg
ICAgICAgICAgLnNldFNlbGVjdG9yKGl0LT52YWx1ZS5zZWxlY3RvcikKKyAgICAgICAgICAgIC5z
ZXRVcmwoaXQtPnZhbHVlLnVybCkKKyAgICAgICAgICAgIC5zZXRMaW5lTnVtYmVyKGl0LT52YWx1
ZS5saW5lTnVtYmVyKQorICAgICAgICAgICAgLnNldFRpbWUoaXQtPnZhbHVlLnRvdGFsVGltZSkK
KyAgICAgICAgICAgIC5zZXRIaXRDb3VudChpdC0+dmFsdWUuaGl0cykKKyAgICAgICAgICAgIC5z
ZXRNYXRjaENvdW50KGl0LT52YWx1ZS5tYXRjaGVzKTsKICAgICAgICAgc2VsZWN0b3JQcm9maWxl
RGF0YS0+YWRkSXRlbShlbnRyeS5yZWxlYXNlKCkpOwogICAgIH0KIApAQCAtODMyLDcgKzgzMiw3
IEBAIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZSogSW5zcGVjdG9yQ1NTQWdlbnQ6
OmFzSW5zcGVjdG9yU3R5bGVTaGVldChFbGVtCiAgICAgICAgIHJldHVybiBpbnNwZWN0b3JTdHls
ZVNoZWV0LmdldCgpOwogICAgIH0KIAotICAgIHJldHVybiBpdC0+c2Vjb25kLmdldCgpOworICAg
IHJldHVybiBpdC0+dmFsdWUuZ2V0KCk7CiB9CiAKIEVsZW1lbnQqIEluc3BlY3RvckNTU0FnZW50
OjplbGVtZW50Rm9ySWQoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkKQpAQCAt
OTI2LDcgKzkyNiw3IEBAIEluc3BlY3RvclN0eWxlU2hlZXQqIEluc3BlY3RvckNTU0FnZW50Ojph
c3NlcnRTdHlsZVNoZWV0Rm9ySWQoRXJyb3JTdHJpbmcqIGVycm9yCiAgICAgICAgICplcnJvclN0
cmluZyA9ICJObyBzdHlsZSBzaGVldCB3aXRoIGdpdmVuIGlkIGZvdW5kIjsKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgfQotICAgIHJldHVybiBpdC0+c2Vjb25kLmdldCgpOworICAgIHJldHVybiBp
dC0+dmFsdWUuZ2V0KCk7CiB9CiAKIFN0cmluZyBJbnNwZWN0b3JDU1NBZ2VudDo6ZGV0ZWN0T3Jp
Z2luKENTU1N0eWxlU2hlZXQqIHBhZ2VTdHlsZVNoZWV0LCBEb2N1bWVudCogb3duZXJEb2N1bWVu
dCkKQEAgLTEwMDYsNyArMTAwNiw3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmRpZFJlbW92
ZURPTU5vZGUoTm9kZSogbm9kZSkKICAgICBpZiAoaXQgPT0gbV9ub2RlVG9JbnNwZWN0b3JTdHls
ZVNoZWV0LmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2lkVG9JbnNwZWN0b3JTdHls
ZVNoZWV0LnJlbW92ZShpdC0+c2Vjb25kLT5pZCgpKTsKKyAgICBtX2lkVG9JbnNwZWN0b3JTdHls
ZVNoZWV0LnJlbW92ZShpdC0+dmFsdWUtPmlkKCkpOwogICAgIG1fbm9kZVRvSW5zcGVjdG9yU3R5
bGVTaGVldC5yZW1vdmUobm9kZSk7CiB9CiAKQEAgLTEwMTksNyArMTAxOSw3IEBAIHZvaWQgSW5z
cGVjdG9yQ1NTQWdlbnQ6OmRpZE1vZGlmeURPTUF0dHIoRWxlbWVudCogZWxlbWVudCkKICAgICBp
ZiAoaXQgPT0gbV9ub2RlVG9JbnNwZWN0b3JTdHlsZVNoZWV0LmVuZCgpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBpdC0+c2Vjb25kLT5kaWRNb2RpZnlFbGVtZW50QXR0cmlidXRlKCk7CisgICAg
aXQtPnZhbHVlLT5kaWRNb2RpZnlFbGVtZW50QXR0cmlidXRlKCk7CiB9CiAKIHZvaWQgSW5zcGVj
dG9yQ1NTQWdlbnQ6OnN0eWxlU2hlZXRDaGFuZ2VkKEluc3BlY3RvclN0eWxlU2hlZXQqIHN0eWxl
U2hlZXQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29u
c29sZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb25zb2xl
QWdlbnQuY3BwCmluZGV4IDE2YzkwOWU0ZDA1N2I5ZWY5MDVmMTgzMDlhOWZjOWFlYzg1MzkyYWQu
LjllNmMwMzVjMTAxZWJjNTljYTQ0YWY2YzQ4NjE4M2EwZTIzZWIwMTggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb25zb2xlQWdlbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb25zb2xlQWdlbnQuY3BwCkBAIC0xNjks
NyArMTY5LDcgQEAgdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OnN0b3BUaW1pbmcoY29uc3Qg
U3RyaW5nJiB0aXRsZSwgUGFzc1JlZlB0cjxTY3JpcHRDYWwKICAgICBpZiAoaXQgPT0gbV90aW1l
cy5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZG91YmxlIHN0YXJ0VGltZSA9IGl0LT5z
ZWNvbmQ7CisgICAgZG91YmxlIHN0YXJ0VGltZSA9IGl0LT52YWx1ZTsKICAgICBtX3RpbWVzLnJl
bW92ZShpdCk7CiAKICAgICBkb3VibGUgZWxhcHNlZCA9IGN1cnJlbnRUaW1lKCkgKiAxMDAwIC0g
c3RhcnRUaW1lOwpAQCAtMTkyLDcgKzE5Miw3IEBAIHZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50
Ojpjb3VudChQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gYXJndW1lbnRzLCBQYXNzUmVmCiAg
ICAgaWYgKGl0ID09IG1fY291bnRzLmVuZCgpKQogICAgICAgICBjb3VudCA9IDE7CiAgICAgZWxz
ZSB7Ci0gICAgICAgIGNvdW50ID0gaXQtPnNlY29uZCArIDE7CisgICAgICAgIGNvdW50ID0gaXQt
PnZhbHVlICsgMTsKICAgICAgICAgbV9jb3VudHMucmVtb3ZlKGl0KTsKICAgICB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCmluZGV4IDhiOWFk
OTJlODc0MTQ1MzU0NGJiOGRiY2RiZjQwYjMxYWUwODRlNmQuLjY3Mjg5OWRlNTA4OWFmNjBiMjc2
Mzk2OTEwZDc0NDIxNmVkODFiZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JET01BZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckRPTUFnZW50LmNwcApAQCAtNDYwLDcgKzQ2MCw3IEBAIE5vZGUqIEluc3BlY3RvckRP
TUFnZW50Ojpub2RlRm9ySWQoaW50IGlkKQogCiAgICAgSGFzaE1hcDxpbnQsIE5vZGUqPjo6aXRl
cmF0b3IgaXQgPSBtX2lkVG9Ob2RlLmZpbmQoaWQpOwogICAgIGlmIChpdCAhPSBtX2lkVG9Ob2Rl
LmVuZCgpKQotICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGl0LT52
YWx1ZTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtODg0LDkgKzg4NCw5IEBAIHZvaWQgSW5zcGVj
dG9yRE9NQWdlbnQ6OnBlcmZvcm1TZWFyY2goRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIHdo
aXRlc3BhY2VUcmltCiAgICAgU2VhcmNoUmVzdWx0czo6aXRlcmF0b3IgcmVzdWx0c0l0ID0gbV9z
ZWFyY2hSZXN1bHRzLmFkZCgqc2VhcmNoSWQsIFZlY3RvcjxSZWZQdHI8Tm9kZT4gPigpKS5pdGVy
YXRvcjsKIAogICAgIGZvciAoTGlzdEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRvciBpdCA9IHJlc3Vs
dENvbGxlY3Rvci5iZWdpbigpOyBpdCAhPSByZXN1bHRDb2xsZWN0b3IuZW5kKCk7ICsraXQpCi0g
ICAgICAgIHJlc3VsdHNJdC0+c2Vjb25kLmFwcGVuZCgqaXQpOworICAgICAgICByZXN1bHRzSXQt
PnZhbHVlLmFwcGVuZCgqaXQpOwogCi0gICAgKnJlc3VsdENvdW50ID0gcmVzdWx0c0l0LT5zZWNv
bmQuc2l6ZSgpOworICAgICpyZXN1bHRDb3VudCA9IHJlc3VsdHNJdC0+dmFsdWUuc2l6ZSgpOwog
fQogCiB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRTZWFyY2hSZXN1bHRzKEVycm9yU3RyaW5n
KiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBzZWFyY2hJZCwgaW50IGZyb21JbmRleCwgaW50
IHRvSW5kZXgsIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8aW50PiA+JiBub2RlSWRzKQpAQCAt
ODk3LDcgKzg5Nyw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldFNlYXJjaFJlc3VsdHMo
RXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBpbnQgc2l6ZSA9IGl0LT5zZWNvbmQuc2l6ZSgpOworICAgIGludCBzaXpl
ID0gaXQtPnZhbHVlLnNpemUoKTsKICAgICBpZiAoZnJvbUluZGV4IDwgMCB8fCB0b0luZGV4ID4g
c2l6ZSB8fCBmcm9tSW5kZXggPj0gdG9JbmRleCkgewogICAgICAgICAqZXJyb3JTdHJpbmcgPSAi
SW52YWxpZCBzZWFyY2ggcmVzdWx0IHJhbmdlIjsKICAgICAgICAgcmV0dXJuOwpAQCAtOTA1LDcg
KzkwNSw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldFNlYXJjaFJlc3VsdHMoRXJyb3JT
dHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmCiAKICAgICBub2RlSWRzID0gVHlwZUJ1
aWxkZXI6OkFycmF5PGludD46OmNyZWF0ZSgpOwogICAgIGZvciAoaW50IGkgPSBmcm9tSW5kZXg7
IGkgPCB0b0luZGV4OyArK2kpCi0gICAgICAgIG5vZGVJZHMtPmFkZEl0ZW0ocHVzaE5vZGVQYXRo
VG9Gcm9udGVuZCgoaXQtPnNlY29uZClbaV0uZ2V0KCkpKTsKKyAgICAgICAgbm9kZUlkcy0+YWRk
SXRlbShwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKChpdC0+dmFsdWUpW2ldLmdldCgpKSk7CiB9CiAK
IHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpc2NhcmRTZWFyY2hSZXN1bHRzKEVycm9yU3RyaW5n
KiwgY29uc3QgU3RyaW5nJiBzZWFyY2hJZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50LmNwcAppbmRleCAxZDY0OTM3ZmU0MGU5
YTRhZDgzMDVhNmMwYTllNTU0YjI3OWZjZjJhLi5hYzY0YWNiNjg2OGM0ZDFiYTZhOTkzMzdlMzU5
M2U3ZmNhMDI3MTVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRE9NRGVidWdnZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckRPTURlYnVnZ2VyQWdlbnQuY3BwCkBAIC00MDEsOCArNDAxLDggQEAgdm9pZCBJbnNw
ZWN0b3JET01EZWJ1Z2dlckFnZW50Ojp3aWxsU2VuZFhNTEh0dHBSZXF1ZXN0KGNvbnN0IFN0cmlu
ZyYgdXJsKQogICAgIGVsc2UgewogICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB4aHJC
cmVha3BvaW50cyA9IG1fc3RhdGUtPmdldE9iamVjdChET01EZWJ1Z2dlckFnZW50U3RhdGU6Onho
ckJyZWFrcG9pbnRzKTsKICAgICAgICAgZm9yIChJbnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9yIGl0
ID0geGhyQnJlYWtwb2ludHMtPmJlZ2luKCk7IGl0ICE9IHhockJyZWFrcG9pbnRzLT5lbmQoKTsg
KytpdCkgewotICAgICAgICAgICAgaWYgKHVybC5jb250YWlucyhpdC0+Zmlyc3QpKSB7Ci0gICAg
ICAgICAgICAgICAgYnJlYWtwb2ludFVSTCA9IGl0LT5maXJzdDsKKyAgICAgICAgICAgIGlmICh1
cmwuY29udGFpbnMoaXQtPmtleSkpIHsKKyAgICAgICAgICAgICAgICBicmVha3BvaW50VVJMID0g
aXQtPmtleTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3Jh
Z2VBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFn
ZUFnZW50LmNwcAppbmRleCA2NThlYjJkMjQ4MzYzMDZiYWE3Y2Q4MDRlM2I2NGY0ODk2N2IyMWRm
Li5mZTNjZTdlYjEwYmY2NjE2MjJhNjRiMzJiMjAzNjNmN2MzYTcxNjZiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcApA
QCAtNzgsNyArNzgsNyBAQCB2b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6Y2xlYXJGcm9u
dGVuZCgpCiB7CiAgICAgRE9NU3RvcmFnZVJlc291cmNlc01hcDo6aXRlcmF0b3IgZG9tU3RvcmFn
ZUVuZCA9IG1fcmVzb3VyY2VzLmVuZCgpOwogICAgIGZvciAoRE9NU3RvcmFnZVJlc291cmNlc01h
cDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSBkb21TdG9yYWdlRW5k
OyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT51bmJpbmQoKTsKKyAgICAgICAgaXQtPnZhbHVl
LT51bmJpbmQoKTsKICAgICBtX2Zyb250ZW5kID0gMDsKICAgICBkaXNhYmxlKDApOwogfQpAQCAt
OTcsNyArOTcsNyBAQCB2b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6ZW5hYmxlKEVycm9y
U3RyaW5nKikKIAogICAgIERPTVN0b3JhZ2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIHJlc291cmNl
c0VuZCA9IG1fcmVzb3VyY2VzLmVuZCgpOwogICAgIGZvciAoRE9NU3RvcmFnZVJlc291cmNlc01h
cDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSByZXNvdXJjZXNFbmQ7
ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPmJpbmQobV9mcm9udGVuZCk7CisgICAgICAgIGl0
LT52YWx1ZS0+YmluZChtX2Zyb250ZW5kKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JET01TdG9yYWdl
QWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcqKQpAQCAtMTU2LDggKzE1Niw4IEBAIGludCBJbnNw
ZWN0b3JET01TdG9yYWdlQWdlbnQ6OnN0b3JhZ2VJZChTdG9yYWdlKiBzdG9yYWdlKQogICAgIGJv
b2wgaXNMb2NhbFN0b3JhZ2UgPSAoZnJhbWUtPmRvbVdpbmRvdygpLT5sb2NhbFN0b3JhZ2UoZWMp
ID09IHN0b3JhZ2UgJiYgIWVjKTsKICAgICBET01TdG9yYWdlUmVzb3VyY2VzTWFwOjppdGVyYXRv
ciBkb21TdG9yYWdlRW5kID0gbV9yZXNvdXJjZXMuZW5kKCk7CiAgICAgZm9yIChET01TdG9yYWdl
UmVzb3VyY2VzTWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGRv
bVN0b3JhZ2VFbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQtPmlzU2FtZUhvc3RB
bmRUeXBlKGZyYW1lLCBpc0xvY2FsU3RvcmFnZSkpCi0gICAgICAgICAgICByZXR1cm4gaXQtPmZp
cnN0OworICAgICAgICBpZiAoaXQtPnZhbHVlLT5pc1NhbWVIb3N0QW5kVHlwZShmcmFtZSwgaXNM
b2NhbFN0b3JhZ2UpKQorICAgICAgICAgICAgcmV0dXJuIGl0LT5rZXk7CiAgICAgfQogICAgIHJl
dHVybiAwOwogfQpAQCAtMTY3LDE0ICsxNjcsMTQgQEAgSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291
cmNlKiBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmdldERPTVN0b3JhZ2VSZXNvdXJjZUZvckkK
ICAgICBET01TdG9yYWdlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmZp
bmQoc3RvcmFnZUlkKTsKICAgICBpZiAoaXQgPT0gbV9yZXNvdXJjZXMuZW5kKCkpCiAgICAgICAg
IHJldHVybiAwOwotICAgIHJldHVybiBpdC0+c2Vjb25kLmdldCgpOworICAgIHJldHVybiBpdC0+
dmFsdWUuZ2V0KCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpkaWRVc2VE
T01TdG9yYWdlKFN0b3JhZ2VBcmVhKiBzdG9yYWdlQXJlYSwgYm9vbCBpc0xvY2FsU3RvcmFnZSwg
RnJhbWUqIGZyYW1lKQogewogICAgIERPTVN0b3JhZ2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGRv
bVN0b3JhZ2VFbmQgPSBtX3Jlc291cmNlcy5lbmQoKTsKICAgICBmb3IgKERPTVN0b3JhZ2VSZXNv
dXJjZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZG9tU3Rv
cmFnZUVuZDsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnNlY29uZC0+aXNTYW1lSG9zdEFuZFR5
cGUoZnJhbWUsIGlzTG9jYWxTdG9yYWdlKSkKKyAgICAgICAgaWYgKGl0LT52YWx1ZS0+aXNTYW1l
SG9zdEFuZFR5cGUoZnJhbWUsIGlzTG9jYWxTdG9yYWdlKSkKICAgICAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JE
YXRhYmFzZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRh
YmFzZUFnZW50LmNwcAppbmRleCAwNmY2NTI0ODhlYzY0YWE3OWExYTY5YTI2YTk0MDAxZDEzMGY4
ZmM4Li45YjFmMWZhN2UxNjU4MjUzOGIwZWI2ZmZlYmIyZWM0YTI0MWRjMzE1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuY3BwCkBA
IC0yNzUsNyArMjc1LDcgQEAgdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjplbmFibGUoRXJy
b3JTdHJpbmcqKQogCiAgICAgRGF0YWJhc2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGRhdGFiYXNl
c0VuZCA9IG1fcmVzb3VyY2VzLmVuZCgpOwogICAgIGZvciAoRGF0YWJhc2VSZXNvdXJjZXNNYXA6
Oml0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZGF0YWJhc2VzRW5kOyAr
K2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5iaW5kKG1fZnJvbnRlbmRQcm92aWRlci0+ZnJvbnRl
bmQoKSk7CisgICAgICAgIGl0LT52YWx1ZS0+YmluZChtX2Zyb250ZW5kUHJvdmlkZXItPmZyb250
ZW5kKCkpOwogfQogCiB2b2lkIEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmRpc2FibGUoRXJyb3JT
dHJpbmcqKQpAQCAtMzMxLDggKzMzMSw4IEBAIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6
ZXhlY3V0ZVNRTChFcnJvclN0cmluZyogZXJyb3IsIGludCBkYXRhYmFzZUlkLCBjb25zCiBpbnQg
SW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6ZGF0YWJhc2VJZChEYXRhYmFzZSogZGF0YWJhc2UpCiB7
CiAgICAgZm9yIChEYXRhYmFzZVJlc291cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNl
cy5iZWdpbigpOyBpdCAhPSBtX3Jlc291cmNlcy5lbmQoKTsgKytpdCkgewotICAgICAgICBpZiAo
aXQtPnNlY29uZC0+ZGF0YWJhc2UoKSA9PSBkYXRhYmFzZSkKLSAgICAgICAgICAgIHJldHVybiBp
dC0+Zmlyc3Q7CisgICAgICAgIGlmIChpdC0+dmFsdWUtPmRhdGFiYXNlKCkgPT0gZGF0YWJhc2Up
CisgICAgICAgICAgICByZXR1cm4gaXQtPmtleTsKICAgICB9CiAgICAgcmV0dXJuIDA7CiB9CkBA
IC0zNDAsOCArMzQwLDggQEAgaW50IEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmRhdGFiYXNlSWQo
RGF0YWJhc2UqIGRhdGFiYXNlKQogSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZSogSW5zcGVjdG9y
RGF0YWJhc2VBZ2VudDo6ZmluZEJ5RmlsZU5hbWUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSkKIHsK
ICAgICBmb3IgKERhdGFiYXNlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2Vz
LmJlZ2luKCk7IGl0ICE9IG1fcmVzb3VyY2VzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmIChp
dC0+c2Vjb25kLT5kYXRhYmFzZSgpLT5maWxlTmFtZSgpID09IGZpbGVOYW1lKQotICAgICAgICAg
ICAgcmV0dXJuIGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIGlmIChpdC0+dmFsdWUtPmRhdGFi
YXNlKCktPmZpbGVOYW1lKCkgPT0gZmlsZU5hbWUpCisgICAgICAgICAgICByZXR1cm4gaXQtPnZh
bHVlLmdldCgpOwogICAgIH0KICAgICByZXR1cm4gMDsKIH0KQEAgLTM1MSw3ICszNTEsNyBAQCBE
YXRhYmFzZSogSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6ZGF0YWJhc2VGb3JJZChpbnQgZGF0YWJh
c2VJZCkKICAgICBEYXRhYmFzZVJlc291cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNl
cy5maW5kKGRhdGFiYXNlSWQpOwogICAgIGlmIChpdCA9PSBtX3Jlc291cmNlcy5lbmQoKSkKICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQtPmRhdGFiYXNlKCk7CisgICAg
cmV0dXJuIGl0LT52YWx1ZS0+ZGF0YWJhc2UoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2Vy
QWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdl
bnQuY3BwCmluZGV4IDkyNGJlMzg0MjlmNzQwOTYyM2IyNjc3OTJiYWQwNDU2MzNkYzg4ZjguLjA3
NDM1MDBkYTM4YTU2OWJhYWM0OTA5ZGE2M2VhZDNiNjIzNjVjMWUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAKQEAgLTI0MCw5
ICsyNDAsOSBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnRCeVVy
bChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGludCBsaQogCiAgICAgU2NyaXB0QnJlYWtwb2lu
dCBicmVha3BvaW50KGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwgY29uZGl0aW9uKTsKICAgICBm
b3IgKFNjcmlwdHNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zY3JpcHRzLmJlZ2luKCk7IGl0ICE9IG1f
c2NyaXB0cy5lbmQoKTsgKytpdCkgewotICAgICAgICBpZiAoIW1hdGNoZXMoaXQtPnNlY29uZC51
cmwsIHVybCwgaXNSZWdleCkpCisgICAgICAgIGlmICghbWF0Y2hlcyhpdC0+dmFsdWUudXJsLCB1
cmwsIGlzUmVnZXgpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IGxvY2F0aW9uID0gcmVzb2x2ZUJyZWFrcG9pbnQoYnJlYWtwb2ludElkLCBp
dC0+Zmlyc3QsIGJyZWFrcG9pbnQpOworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBs
b2NhdGlvbiA9IHJlc29sdmVCcmVha3BvaW50KGJyZWFrcG9pbnRJZCwgaXQtPmtleSwgYnJlYWtw
b2ludCk7CiAgICAgICAgIGlmIChsb2NhdGlvbikKICAgICAgICAgICAgIGxvY2F0aW9ucy0+cHVz
aE9iamVjdChsb2NhdGlvbik7CiAgICAgfQpAQCAtMjkyLDggKzI5Miw4IEBAIHZvaWQgSW5zcGVj
dG9yRGVidWdnZXJBZ2VudDo6cmVtb3ZlQnJlYWtwb2ludChFcnJvclN0cmluZyosIGNvbnN0IFN0
cmluZyYgYnJlYWtwCiAgICAgQnJlYWtwb2ludElkVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNN
YXA6Oml0ZXJhdG9yIGRlYnVnU2VydmVyQnJlYWtwb2ludElkc0l0ZXJhdG9yID0gbV9icmVha3Bv
aW50SWRUb0RlYnVnU2VydmVyQnJlYWtwb2ludElkcy5maW5kKGJyZWFrcG9pbnRJZCk7CiAgICAg
aWYgKGRlYnVnU2VydmVyQnJlYWtwb2ludElkc0l0ZXJhdG9yID09IG1fYnJlYWtwb2ludElkVG9E
ZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGRlYnVnU2VydmVyQnJlYWtwb2ludElkc0l0ZXJhdG9yLT5zZWNv
bmQuc2l6ZSgpOyArK2kpCi0gICAgICAgIHNjcmlwdERlYnVnU2VydmVyKCkucmVtb3ZlQnJlYWtw
b2ludChkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNJdGVyYXRvci0+c2Vjb25kW2ldKTsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGRlYnVnU2VydmVyQnJlYWtwb2ludElkc0l0ZXJhdG9yLT52
YWx1ZS5zaXplKCk7ICsraSkKKyAgICAgICAgc2NyaXB0RGVidWdTZXJ2ZXIoKS5yZW1vdmVCcmVh
a3BvaW50KGRlYnVnU2VydmVyQnJlYWtwb2ludElkc0l0ZXJhdG9yLT52YWx1ZVtpXSk7CiAgICAg
bV9icmVha3BvaW50SWRUb0RlYnVnU2VydmVyQnJlYWtwb2ludElkcy5yZW1vdmUoZGVidWdTZXJ2
ZXJCcmVha3BvaW50SWRzSXRlcmF0b3IpOwogfQogCkBAIC0zMjEsNyArMzIxLDcgQEAgUGFzc1Jl
ZlB0cjxUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uPiBJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50OjpyZXNvbHZlQnJlYWsKICAgICBTY3JpcHRzTWFwOjppdGVyYXRvciBzY3JpcHRJdGVyYXRv
ciA9IG1fc2NyaXB0cy5maW5kKHNjcmlwdElkKTsKICAgICBpZiAoc2NyaXB0SXRlcmF0b3IgPT0g
bV9zY3JpcHRzLmVuZCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBTY3JpcHQmIHNjcmlwdCA9
IHNjcmlwdEl0ZXJhdG9yLT5zZWNvbmQ7CisgICAgU2NyaXB0JiBzY3JpcHQgPSBzY3JpcHRJdGVy
YXRvci0+dmFsdWU7CiAgICAgaWYgKGJyZWFrcG9pbnQubGluZU51bWJlciA8IHNjcmlwdC5zdGFy
dExpbmUgfHwgc2NyaXB0LmVuZExpbmUgPCBicmVha3BvaW50LmxpbmVOdW1iZXIpCiAgICAgICAg
IHJldHVybiAwOwogCkBAIC0zMzQsNyArMzM0LDcgQEAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6
RGVidWdnZXI6OkxvY2F0aW9uPiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZXNvbHZlQnJlYWsK
ICAgICBCcmVha3BvaW50SWRUb0RlYnVnU2VydmVyQnJlYWtwb2ludElkc01hcDo6aXRlcmF0b3Ig
ZGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzSXRlcmF0b3IgPSBtX2JyZWFrcG9pbnRJZFRvRGVidWdT
ZXJ2ZXJCcmVha3BvaW50SWRzLmZpbmQoYnJlYWtwb2ludElkKTsKICAgICBpZiAoZGVidWdTZXJ2
ZXJCcmVha3BvaW50SWRzSXRlcmF0b3IgPT0gbV9icmVha3BvaW50SWRUb0RlYnVnU2VydmVyQnJl
YWtwb2ludElkcy5lbmQoKSkKICAgICAgICAgZGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzSXRlcmF0
b3IgPSBtX2JyZWFrcG9pbnRJZFRvRGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzLnNldChicmVha3Bv
aW50SWQsIFZlY3RvcjxTdHJpbmc+KCkpLml0ZXJhdG9yOwotICAgIGRlYnVnU2VydmVyQnJlYWtw
b2ludElkc0l0ZXJhdG9yLT5zZWNvbmQuYXBwZW5kKGRlYnVnU2VydmVyQnJlYWtwb2ludElkKTsK
KyAgICBkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNJdGVyYXRvci0+dmFsdWUuYXBwZW5kKGRlYnVn
U2VydmVyQnJlYWtwb2ludElkKTsKIAogICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6RGVidWdnZXI6
OkxvY2F0aW9uPiBsb2NhdGlvbiA9IFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRpb246OmNy
ZWF0ZSgpCiAgICAgICAgIC5zZXRTY3JpcHRJZChzY3JpcHRJZCkKQEAgLTM2MCw3ICszNjAsNyBA
QCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNlYXJjaEluQ29udGVudChFcnJvclN0cmlu
ZyogZXJyb3IsIGNvbnN0IFN0cmluZyYgcwogCiAgICAgU2NyaXB0c01hcDo6aXRlcmF0b3IgaXQg
PSBtX3NjcmlwdHMuZmluZChzY3JpcHRJZCk7CiAgICAgaWYgKGl0ICE9IG1fc2NyaXB0cy5lbmQo
KSkKLSAgICAgICAgcmVzdWx0cyA9IENvbnRlbnRTZWFyY2hVdGlsczo6c2VhcmNoSW5UZXh0QnlM
aW5lcyhpdC0+c2Vjb25kLnNvdXJjZSwgcXVlcnksIGNhc2VTZW5zaXRpdmUsIGlzUmVnZXgpOwor
ICAgICAgICByZXN1bHRzID0gQ29udGVudFNlYXJjaFV0aWxzOjpzZWFyY2hJblRleHRCeUxpbmVz
KGl0LT52YWx1ZS5zb3VyY2UsIHF1ZXJ5LCBjYXNlU2Vuc2l0aXZlLCBpc1JlZ2V4KTsKICAgICBl
bHNlCiAgICAgICAgICplcnJvciA9ICJObyBzY3JpcHQgZm9yIGlkOiAiICsgc2NyaXB0SWQ7CiB9
CkBAIC0zODEsNyArMzgxLDcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpnZXRTY3Jp
cHRTb3VyY2UoRXJyb3JTdHJpbmcqIGVycm9yLCBjb25zdCBTdHJpbmcmIHMKIHsKICAgICBTY3Jp
cHRzTWFwOjppdGVyYXRvciBpdCA9IG1fc2NyaXB0cy5maW5kKHNjcmlwdElkKTsKICAgICBpZiAo
aXQgIT0gbV9zY3JpcHRzLmVuZCgpKQotICAgICAgICAqc2NyaXB0U291cmNlID0gaXQtPnNlY29u
ZC5zb3VyY2U7CisgICAgICAgICpzY3JpcHRTb3VyY2UgPSBpdC0+dmFsdWUuc291cmNlOwogICAg
IGVsc2UKICAgICAgICAgKmVycm9yID0gIk5vIHNjcmlwdCBmb3IgaWQ6ICIgKyBzY3JpcHRJZDsK
IH0KQEAgLTUzNiw3ICs1MzYsNyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBh
cnNlU291cmNlKGNvbnN0IFN0cmluZyYgc2NyaXB0SWQsIGNvbnN0IFNjcmlwdAogCiAgICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gYnJlYWtwb2ludHNDb29raWUgPSBtX3N0YXRlLT5nZXRPYmpl
Y3QoRGVidWdnZXJBZ2VudFN0YXRlOjpqYXZhU2NyaXB0QnJlYWtwb2ludHMpOwogICAgIGZvciAo
SW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciBpdCA9IGJyZWFrcG9pbnRzQ29va2llLT5iZWdpbigp
OyBpdCAhPSBicmVha3BvaW50c0Nvb2tpZS0+ZW5kKCk7ICsraXQpIHsKLSAgICAgICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gYnJlYWtwb2ludE9iamVjdCA9IGl0LT5zZWNvbmQtPmFzT2JqZWN0
KCk7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJyZWFrcG9pbnRPYmplY3QgPSBp
dC0+dmFsdWUtPmFzT2JqZWN0KCk7CiAgICAgICAgIGJvb2wgaXNSZWdleDsKICAgICAgICAgYnJl
YWtwb2ludE9iamVjdC0+Z2V0Qm9vbGVhbigiaXNSZWdleCIsICZpc1JlZ2V4KTsKICAgICAgICAg
U3RyaW5nIHVybDsKQEAgLTU0Nyw5ICs1NDcsOSBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ6OmRpZFBhcnNlU291cmNlKGNvbnN0IFN0cmluZyYgc2NyaXB0SWQsIGNvbnN0IFNjcmlwdAog
ICAgICAgICBicmVha3BvaW50T2JqZWN0LT5nZXROdW1iZXIoImxpbmVOdW1iZXIiLCAmYnJlYWtw
b2ludC5saW5lTnVtYmVyKTsKICAgICAgICAgYnJlYWtwb2ludE9iamVjdC0+Z2V0TnVtYmVyKCJj
b2x1bW5OdW1iZXIiLCAmYnJlYWtwb2ludC5jb2x1bW5OdW1iZXIpOwogICAgICAgICBicmVha3Bv
aW50T2JqZWN0LT5nZXRTdHJpbmcoImNvbmRpdGlvbiIsICZicmVha3BvaW50LmNvbmRpdGlvbik7
Ci0gICAgICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uPiBsb2NhdGlv
biA9IHJlc29sdmVCcmVha3BvaW50KGl0LT5maXJzdCwgc2NyaXB0SWQsIGJyZWFrcG9pbnQpOwor
ICAgICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj4gbG9jYXRpb24g
PSByZXNvbHZlQnJlYWtwb2ludChpdC0+a2V5LCBzY3JpcHRJZCwgYnJlYWtwb2ludCk7CiAgICAg
ICAgIGlmIChsb2NhdGlvbikKLSAgICAgICAgICAgIG1fZnJvbnRlbmQtPmJyZWFrcG9pbnRSZXNv
bHZlZChpdC0+Zmlyc3QsIGxvY2F0aW9uKTsKKyAgICAgICAgICAgIG1fZnJvbnRlbmQtPmJyZWFr
cG9pbnRSZXNvbHZlZChpdC0+a2V5LCBsb2NhdGlvbik7CiAgICAgfQogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTWVtb3J5QWdlbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck1lbW9yeUFnZW50LmNwcAppbmRleCA1ZTQz
Y2I5ZDFlMTg1NGQ5ZjdmOWU4NGIxMDZiM2I1MDY2ZWY0ZjhiLi5kNGFmZmRiYTM2MzMzZjA5NjNm
NzYzMjEzYmQ0OWVmZDExYTBmMmEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yTWVtb3J5QWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JNZW1vcnlBZ2VudC5jcHAKQEAgLTEyMCw4ICsxMjAsOCBAQCBwdWJsaWM6CiAg
ICAgewogICAgICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGNoaWxkcmVuU3RhdHMgPSBJbnNw
ZWN0b3JBcnJheTo6Y3JlYXRlKCk7CiAgICAgICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIGludD46
Oml0ZXJhdG9yIGl0ID0gbV9ub2RlTmFtZVRvQ291bnQuYmVnaW4oKTsgaXQgIT0gbV9ub2RlTmFt
ZVRvQ291bnQuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgICAgIFJlZlB0cjxOb2RlQ291bnQ+IG5v
ZGVDb3VudCA9IE5vZGVDb3VudDo6Y3JlYXRlKCkuc2V0Tm9kZU5hbWUoaXQtPmZpcnN0KQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC5zZXRDb3VudChpdC0+c2Vjb25kKTsKKyAgICAgICAgICAgIFJlZlB0cjxOb2RlQ291bnQ+IG5v
ZGVDb3VudCA9IE5vZGVDb3VudDo6Y3JlYXRlKCkuc2V0Tm9kZU5hbWUoaXQtPmtleSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAu
c2V0Q291bnQoaXQtPnZhbHVlKTsKICAgICAgICAgICAgIGNoaWxkcmVuU3RhdHMtPnB1c2hPYmpl
Y3Qobm9kZUNvdW50KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gY2hpbGRyZW5TdGF0cy5y
ZWxlYXNlKCk7CkBAIC0xMzEsOCArMTMxLDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgUmVm
UHRyPEluc3BlY3RvckFycmF5PiBsaXN0ZW5lclN0YXRzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0
ZSgpOwogICAgICAgICBmb3IgKEhhc2hNYXA8QXRvbWljU3RyaW5nLCBpbnQ+OjppdGVyYXRvciBp
dCA9IG1fZXZlbnRUeXBlVG9Db3VudC5iZWdpbigpOyBpdCAhPSBtX2V2ZW50VHlwZVRvQ291bnQu
ZW5kKCk7ICsraXQpIHsKLSAgICAgICAgICAgIFJlZlB0cjxMaXN0ZW5lckNvdW50PiBsaXN0ZW5l
ckNvdW50ID0gTGlzdGVuZXJDb3VudDo6Y3JlYXRlKCkuc2V0VHlwZShpdC0+Zmlyc3QpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLnNldENvdW50KGl0LT5zZWNvbmQpOworICAgICAgICAgICAgUmVmUHRyPExp
c3RlbmVyQ291bnQ+IGxpc3RlbmVyQ291bnQgPSBMaXN0ZW5lckNvdW50OjpjcmVhdGUoKS5zZXRU
eXBlKGl0LT5rZXkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldENvdW50KGl0LT52YWx1ZSk7CiAgICAg
ICAgICAgICBsaXN0ZW5lclN0YXRzLT5wdXNoT2JqZWN0KGxpc3RlbmVyQ291bnQpOwogICAgICAg
ICB9CiAgICAgICAgIHJldHVybiBsaXN0ZW5lclN0YXRzLnJlbGVhc2UoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKaW5kZXggOTBkNGYyNDhl
NzNlMWM1ZjI1ZDA2OWZjYTQ3MzU4YzM5NTBlOGUyMC4uYzYzNmRkNDFjZjY5NjU4ODAwZGZiYzFh
NzNkNTNhMjZmMmM5MDAyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclBhZ2VBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclBhZ2VBZ2VudC5jcHAKQEAgLTQzMSw3ICs0MzEsNyBAQCBzdGF0aWMgVmVjdG9yPENhY2hl
ZFJlc291cmNlKj4gY2FjaGVkUmVzb3VyY2VzRm9yRnJhbWUoRnJhbWUqIGZyYW1lKQogICAgIGNv
bnN0IENhY2hlZFJlc291cmNlTG9hZGVyOjpEb2N1bWVudFJlc291cmNlTWFwJiBhbGxSZXNvdXJj
ZXMgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS0+YWxsQ2FjaGVk
UmVzb3VyY2VzKCk7CiAgICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OkRvY3VtZW50UmVzb3VyY2VN
YXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGFsbFJlc291cmNlcy5lbmQoKTsKICAgICBmb3IgKENh
Y2hlZFJlc291cmNlTG9hZGVyOjpEb2N1bWVudFJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IGFsbFJlc291cmNlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgQ2Fj
aGVkUmVzb3VyY2UqIGNhY2hlZFJlc291cmNlID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAg
Q2FjaGVkUmVzb3VyY2UqIGNhY2hlZFJlc291cmNlID0gaXQtPnZhbHVlLmdldCgpOwogCiAgICAg
ICAgIHN3aXRjaCAoY2FjaGVkUmVzb3VyY2UtPnR5cGUoKSkgewogICAgICAgICBjYXNlIENhY2hl
ZFJlc291cmNlOjpJbWFnZVJlc291cmNlOgpAQCAtNzAxLDcgKzcwMSw3IEBAIHZvaWQgSW5zcGVj
dG9yUGFnZUFnZW50OjpkaWRDbGVhcldpbmRvd09iamVjdEluV29ybGQoRnJhbWUqIGZyYW1lLCBE
T01XcmFwcGVyV29yCiAgICAgICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gc2NyaXB0cy0+ZW5kKCk7CiAgICAgICAgIGZvciAoSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9p
dGVyYXRvciBpdCA9IHNjcmlwdHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAg
ICAgICAgU3RyaW5nIHNjcmlwdFRleHQ7Ci0gICAgICAgICAgICBpZiAoaXQtPnNlY29uZC0+YXNT
dHJpbmcoJnNjcmlwdFRleHQpKQorICAgICAgICAgICAgaWYgKGl0LT52YWx1ZS0+YXNTdHJpbmco
JnNjcmlwdFRleHQpKQogICAgICAgICAgICAgICAgIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLT5p
bmplY3RTY3JpcHQoc2NyaXB0VGV4dCwgbWFpbldvcmxkU2NyaXB0U3RhdGUoZnJhbWUpKTsKICAg
ICAgICAgfQogICAgIH0KQEAgLTczMyw4ICs3MzMsOCBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2Vu
dDo6ZnJhbWVEZXRhY2hlZChGcmFtZSogZnJhbWUpCiB7CiAgICAgSGFzaE1hcDxGcmFtZSosIFN0
cmluZz46Oml0ZXJhdG9yIGl0ZXJhdG9yID0gbV9mcmFtZVRvSWRlbnRpZmllci5maW5kKGZyYW1l
KTsKICAgICBpZiAoaXRlcmF0b3IgIT0gbV9mcmFtZVRvSWRlbnRpZmllci5lbmQoKSkgewotICAg
ICAgICBtX2Zyb250ZW5kLT5mcmFtZURldGFjaGVkKGl0ZXJhdG9yLT5zZWNvbmQpOwotICAgICAg
ICBtX2lkZW50aWZpZXJUb0ZyYW1lLnJlbW92ZShpdGVyYXRvci0+c2Vjb25kKTsKKyAgICAgICAg
bV9mcm9udGVuZC0+ZnJhbWVEZXRhY2hlZChpdGVyYXRvci0+dmFsdWUpOworICAgICAgICBtX2lk
ZW50aWZpZXJUb0ZyYW1lLnJlbW92ZShpdGVyYXRvci0+dmFsdWUpOwogICAgICAgICBtX2ZyYW1l
VG9JZGVudGlmaWVyLnJlbW92ZShpdGVyYXRvcik7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwCmluZGV4IGM3NmFh
ZTgxM2U4YjIyZjc1ZjE1YTZkOWExZWU0Y2UxNDE0ZmZlZmUuLjBkZWZjZmQwMWQzOGE5MDJkOWMx
NWY5OGM5NjEzYzcxM2NmZTU0ZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAKQEAgLTI0NCwxMCArMjQ0LDEwIEBAIHZvaWQg
SW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6Z2V0UHJvZmlsZUhlYWRlcnMoRXJyb3JTdHJpbmcqLCBS
ZWZQdHI8SW5zcGVjdG9yQXJyCiB7CiAgICAgUHJvZmlsZXNNYXA6Oml0ZXJhdG9yIHByb2ZpbGVz
RW5kID0gbV9wcm9maWxlcy5lbmQoKTsKICAgICBmb3IgKFByb2ZpbGVzTWFwOjppdGVyYXRvciBp
dCA9IG1fcHJvZmlsZXMuYmVnaW4oKTsgaXQgIT0gcHJvZmlsZXNFbmQ7ICsraXQpCi0gICAgICAg
IGhlYWRlcnMtPnB1c2hPYmplY3QoY3JlYXRlUHJvZmlsZUhlYWRlcigqaXQtPnNlY29uZCkpOwor
ICAgICAgICBoZWFkZXJzLT5wdXNoT2JqZWN0KGNyZWF0ZVByb2ZpbGVIZWFkZXIoKml0LT52YWx1
ZSkpOwogICAgIEhlYXBTbmFwc2hvdHNNYXA6Oml0ZXJhdG9yIHNuYXBzaG90c0VuZCA9IG1fc25h
cHNob3RzLmVuZCgpOwogICAgIGZvciAoSGVhcFNuYXBzaG90c01hcDo6aXRlcmF0b3IgaXQgPSBt
X3NuYXBzaG90cy5iZWdpbigpOyBpdCAhPSBzbmFwc2hvdHNFbmQ7ICsraXQpCi0gICAgICAgIGhl
YWRlcnMtPnB1c2hPYmplY3QoY3JlYXRlU25hcHNob3RIZWFkZXIoKml0LT5zZWNvbmQpKTsKKyAg
ICAgICAgaGVhZGVycy0+cHVzaE9iamVjdChjcmVhdGVTbmFwc2hvdEhlYWRlcigqaXQtPnZhbHVl
KSk7CiB9CiAKIG5hbWVzcGFjZSB7CkBAIC0yNzEsMTUgKzI3MSwxNSBAQCB2b2lkIEluc3BlY3Rv
clByb2ZpbGVyQWdlbnQ6OmdldFByb2ZpbGUoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIHR5
cGUsIGludCByYQogICAgIGlmICh0eXBlID09IENQVVByb2ZpbGVUeXBlKSB7CiAgICAgICAgIFBy
b2ZpbGVzTWFwOjppdGVyYXRvciBpdCA9IG1fcHJvZmlsZXMuZmluZCh1aWQpOwogICAgICAgICBp
ZiAoaXQgIT0gbV9wcm9maWxlcy5lbmQoKSkgewotICAgICAgICAgICAgcHJvZmlsZU9iamVjdCA9
IGNyZWF0ZVByb2ZpbGVIZWFkZXIoKml0LT5zZWNvbmQpOwotICAgICAgICAgICAgcHJvZmlsZU9i
amVjdC0+c2V0T2JqZWN0KCJoZWFkIiwgaXQtPnNlY29uZC0+YnVpbGRJbnNwZWN0b3JPYmplY3RG
b3JIZWFkKCkpOwotICAgICAgICAgICAgaWYgKGl0LT5zZWNvbmQtPmJvdHRvbVVwSGVhZCgpKQot
ICAgICAgICAgICAgICAgIHByb2ZpbGVPYmplY3QtPnNldE9iamVjdCgiYm90dG9tVXBIZWFkIiwg
aXQtPnNlY29uZC0+YnVpbGRJbnNwZWN0b3JPYmplY3RGb3JCb3R0b21VcEhlYWQoKSk7CisgICAg
ICAgICAgICBwcm9maWxlT2JqZWN0ID0gY3JlYXRlUHJvZmlsZUhlYWRlcigqaXQtPnZhbHVlKTsK
KyAgICAgICAgICAgIHByb2ZpbGVPYmplY3QtPnNldE9iamVjdCgiaGVhZCIsIGl0LT52YWx1ZS0+
YnVpbGRJbnNwZWN0b3JPYmplY3RGb3JIZWFkKCkpOworICAgICAgICAgICAgaWYgKGl0LT52YWx1
ZS0+Ym90dG9tVXBIZWFkKCkpCisgICAgICAgICAgICAgICAgcHJvZmlsZU9iamVjdC0+c2V0T2Jq
ZWN0KCJib3R0b21VcEhlYWQiLCBpdC0+dmFsdWUtPmJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9yQm90
dG9tVXBIZWFkKCkpOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmICh0eXBlID09IEhlYXBQcm9m
aWxlVHlwZSkgewogICAgICAgICBIZWFwU25hcHNob3RzTWFwOjppdGVyYXRvciBpdCA9IG1fc25h
cHNob3RzLmZpbmQodWlkKTsKICAgICAgICAgaWYgKGl0ICE9IG1fc25hcHNob3RzLmVuZCgpKSB7
Ci0gICAgICAgICAgICBSZWZQdHI8U2NyaXB0SGVhcFNuYXBzaG90PiBzbmFwc2hvdCA9IGl0LT5z
ZWNvbmQ7CisgICAgICAgICAgICBSZWZQdHI8U2NyaXB0SGVhcFNuYXBzaG90PiBzbmFwc2hvdCA9
IGl0LT52YWx1ZTsKICAgICAgICAgICAgIHByb2ZpbGVPYmplY3QgPSBjcmVhdGVTbmFwc2hvdEhl
YWRlcigqc25hcHNob3QpOwogICAgICAgICAgICAgaWYgKG1fZnJvbnRlbmQpIHsKICAgICAgICAg
ICAgICAgICBPdXRwdXRTdHJlYW0gc3RyZWFtKG1fZnJvbnRlbmQsIHVpZCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5jcHAKaW5kZXgg
MzA4ODU0MGZmNzZhMjliYmI5MmEwOWM5MmM3OWUyMzQxN2UwYzAwYi4uMDJjNTA2NmFjMzg3NmFj
Y2E5ZTg1ZDliZjVkNDdkZDM1MzhmNTg4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmNwcApAQCAtMTAwLDcgKzEwMCw3IEBAIHN0
YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JIZWFkZXJzKGNv
bnN0IEhUVFBIZWFkZXJNYXAmIGhlCiAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaGVhZGVy
c09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgSFRUUEhlYWRlck1hcDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gaGVhZGVycy5lbmQoKTsKICAgICBmb3IgKEhUVFBIZWFkZXJN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaGVhZGVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
Ci0gICAgICAgIGhlYWRlcnNPYmplY3QtPnNldFN0cmluZyhpdC0+Zmlyc3Quc3RyaW5nKCksIGl0
LT5zZWNvbmQpOworICAgICAgICBoZWFkZXJzT2JqZWN0LT5zZXRTdHJpbmcoaXQtPmtleS5zdHJp
bmcoKSwgaXQtPnZhbHVlKTsKICAgICByZXR1cm4gaGVhZGVyc09iamVjdDsKIH0KIApAQCAtMjEx
LDggKzIxMSw4IEBAIHZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6d2lsbFNlbmRSZXF1ZXN0
KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbnRMCiAgICAgICAgIEluc3BlY3Rvck9i
amVjdDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaGVhZGVycy0+ZW5kKCk7CiAgICAgICAgIGZvciAo
SW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciBpdCA9IGhlYWRlcnMtPmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgU3RyaW5nIHZhbHVlOwotICAgICAgICAgICAg
aWYgKGl0LT5zZWNvbmQtPmFzU3RyaW5nKCZ2YWx1ZSkpCi0gICAgICAgICAgICAgICAgcmVxdWVz
dC5zZXRIVFRQSGVhZGVyRmllbGQoaXQtPmZpcnN0LCB2YWx1ZSk7CisgICAgICAgICAgICBpZiAo
aXQtPnZhbHVlLT5hc1N0cmluZygmdmFsdWUpKQorICAgICAgICAgICAgICAgIHJlcXVlc3Quc2V0
SFRUUEhlYWRlckZpZWxkKGl0LT5rZXksIHZhbHVlKTsKICAgICAgICAgfQogICAgIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5jcHAKaW5kZXggN2UwMmViN2Ey
MWJlZGYxNzQ3ZjhmODc4YTQ3ODA3Y2I4MDlkNTdlNC4uZjQ4YWNiYTYzNjk5OTZjZDkxNmQzZmU1
MmRjM2FlN2FmNmVlZDAwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclN0YXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
U3RhdGUuY3BwCkBAIC04MCw3ICs4MCw3IEBAIGJvb2wgSW5zcGVjdG9yU3RhdGU6OmdldEJvb2xl
YW4oY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCiAgICAgSW5zcGVjdG9yT2JqZWN0OjppdGVy
YXRvciBpdCA9IG1fcHJvcGVydGllcy0+ZmluZChwcm9wZXJ0eU5hbWUpOwogICAgIGJvb2wgdmFs
dWUgPSBmYWxzZTsKICAgICBpZiAoaXQgIT0gbV9wcm9wZXJ0aWVzLT5lbmQoKSkKLSAgICAgICAg
aXQtPnNlY29uZC0+YXNCb29sZWFuKCZ2YWx1ZSk7CisgICAgICAgIGl0LT52YWx1ZS0+YXNCb29s
ZWFuKCZ2YWx1ZSk7CiAgICAgcmV0dXJuIHZhbHVlOwogfQogCkBAIC04OSw3ICs4OSw3IEBAIFN0
cmluZyBJbnNwZWN0b3JTdGF0ZTo6Z2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1l
KQogICAgIEluc3BlY3Rvck9iamVjdDo6aXRlcmF0b3IgaXQgPSBtX3Byb3BlcnRpZXMtPmZpbmQo
cHJvcGVydHlOYW1lKTsKICAgICBTdHJpbmcgdmFsdWU7CiAgICAgaWYgKGl0ICE9IG1fcHJvcGVy
dGllcy0+ZW5kKCkpCi0gICAgICAgIGl0LT5zZWNvbmQtPmFzU3RyaW5nKCZ2YWx1ZSk7CisgICAg
ICAgIGl0LT52YWx1ZS0+YXNTdHJpbmcoJnZhbHVlKTsKICAgICByZXR1cm4gdmFsdWU7CiB9CiAK
QEAgLTk4LDcgKzk4LDcgQEAgbG9uZyBJbnNwZWN0b3JTdGF0ZTo6Z2V0TG9uZyhjb25zdCBTdHJp
bmcmIHByb3BlcnR5TmFtZSkKICAgICBJbnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9yIGl0ID0gbV9w
cm9wZXJ0aWVzLT5maW5kKHByb3BlcnR5TmFtZSk7CiAgICAgbG9uZyB2YWx1ZSA9IDA7CiAgICAg
aWYgKGl0ICE9IG1fcHJvcGVydGllcy0+ZW5kKCkpCi0gICAgICAgIGl0LT5zZWNvbmQtPmFzTnVt
YmVyKCZ2YWx1ZSk7CisgICAgICAgIGl0LT52YWx1ZS0+YXNOdW1iZXIoJnZhbHVlKTsKICAgICBy
ZXR1cm4gdmFsdWU7CiB9CiAKQEAgLTEwNyw3ICsxMDcsNyBAQCBkb3VibGUgSW5zcGVjdG9yU3Rh
dGU6OmdldERvdWJsZShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSkKICAgICBJbnNwZWN0b3JP
YmplY3Q6Oml0ZXJhdG9yIGl0ID0gbV9wcm9wZXJ0aWVzLT5maW5kKHByb3BlcnR5TmFtZSk7CiAg
ICAgZG91YmxlIHZhbHVlID0gMDsKICAgICBpZiAoaXQgIT0gbV9wcm9wZXJ0aWVzLT5lbmQoKSkK
LSAgICAgICAgaXQtPnNlY29uZC0+YXNOdW1iZXIoJnZhbHVlKTsKKyAgICAgICAgaXQtPnZhbHVl
LT5hc051bWJlcigmdmFsdWUpOwogICAgIHJldHVybiB2YWx1ZTsKIH0KIApAQCAtMTE4LDcgKzEx
OCw3IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JTdGF0ZTo6Z2V0T2Jq
ZWN0KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lCiAgICAgICAgIG1fcHJvcGVydGllcy0+c2V0
T2JqZWN0KHByb3BlcnR5TmFtZSwgSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgICAg
IGl0ID0gbV9wcm9wZXJ0aWVzLT5maW5kKHByb3BlcnR5TmFtZSk7CiAgICAgfQotICAgIHJldHVy
biBpdC0+c2Vjb25kLT5hc09iamVjdCgpOworICAgIHJldHVybiBpdC0+dmFsdWUtPmFzT2JqZWN0
KCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcAppbmRleCAzYjllNGVlYmVhZWYyZTc5NDVj
NDA3MThlZTQ5ZjIzZWJjNWI5ZGViLi44ODllYTQ1OTFhNzJmMTliMDdlYWI0ZGU4ZmUyNTA1MmI4
ODRkNzQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5
bGVTaGVldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxl
U2hlZXQuY3BwCkBAIC01MTAsNyArNTEwLDcgQEAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NT
OjpDU1NTdHlsZT4gSW5zcGVjdG9yU3R5bGU6OnN0eWxlV2l0aFByb3BlcnRpZXMoKSBjb24KICAg
ICAgICAgICAgICAgICAgICAgICAgIHNob3VsZEluYWN0aXZhdGUgPSB0cnVlOwogICAgICAgICAg
ICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJldmlvdXNQ
YXJzZWRPazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc3VjY2VzcyA9IGFjdGl2ZUl0
LT5zZWNvbmQtPmdldEJvb2xlYW4oInBhcnNlZE9rIiwgJnByZXZpb3VzUGFyc2VkT2spOworICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gYWN0aXZlSXQtPnZhbHVlLT5nZXRC
b29sZWFuKCJwYXJzZWRPayIsICZwcmV2aW91c1BhcnNlZE9rKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChzdWNjZXNzICYmICFwcmV2aW91c1BhcnNlZE9rKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNob3VsZEluYWN0aXZhdGUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAg
ICB9CkBAIC01MTgsOCArNTE4LDggQEAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NT
dHlsZT4gSW5zcGVjdG9yU3R5bGU6OnN0eWxlV2l0aFByb3BlcnRpZXMoKSBjb24KICAgICAgICAg
ICAgICAgICAgICAgcHJvcGVydHlOYW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5LnNldChjYW5v
bmljYWxQcm9wZXJ0eU5hbWUsIHByb3BlcnR5KTsKIAogICAgICAgICAgICAgICAgIGlmIChzaG91
bGRJbmFjdGl2YXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFjdGl2ZUl0LT5zZWNvbmQtPnNl
dFN0YXR1cyhUeXBlQnVpbGRlcjo6Q1NTOjpDU1NQcm9wZXJ0eTo6U3RhdHVzOjpJbmFjdGl2ZSk7
Ci0gICAgICAgICAgICAgICAgICAgIGFjdGl2ZUl0LT5zZWNvbmQtPnJlbW92ZSgic2hvcnRoYW5k
TmFtZSIpOworICAgICAgICAgICAgICAgICAgICBhY3RpdmVJdC0+dmFsdWUtPnNldFN0YXR1cyhU
eXBlQnVpbGRlcjo6Q1NTOjpDU1NQcm9wZXJ0eTo6U3RhdHVzOjpJbmFjdGl2ZSk7CisgICAgICAg
ICAgICAgICAgICAgIGFjdGl2ZUl0LT52YWx1ZS0+cmVtb3ZlKCJzaG9ydGhhbmROYW1lIik7CiAg
ICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZVRvUHJldmlvdXNBY3RpdmVQcm9wZXJ0eS5z
ZXQoY2Fub25pY2FsUHJvcGVydHlOYW1lLCBwcm9wZXJ0eSk7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTEwMTQsNyArMTAxNCw3IEBAIFBhc3NSZWZQdHI8SW5z
cGVjdG9yU3R5bGU+IEluc3BlY3RvclN0eWxlU2hlZXQ6Omluc3BlY3RvclN0eWxlRm9ySWQoY29u
c3QgSW5zcGVjCiAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JTdHlsZT4gaW5zcGVjdG9yU3R5bGUg
PSBJbnNwZWN0b3JTdHlsZTo6Y3JlYXRlKGlkLCBzdHlsZSwgdGhpcyk7CiAgICAgICAgIHJldHVy
biBpbnNwZWN0b3JTdHlsZS5yZWxlYXNlKCk7CiAgICAgfQotICAgIHJldHVybiBpdC0+c2Vjb25k
OworICAgIHJldHVybiBpdC0+dmFsdWU7CiB9CiAKIHZvaWQgSW5zcGVjdG9yU3R5bGVTaGVldDo6
cmVtZW1iZXJJbnNwZWN0b3JTdHlsZShSZWZQdHI8SW5zcGVjdG9yU3R5bGU+IGluc3BlY3RvclN0
eWxlKQpAQCAtMTA5OSw4ICsxMDk5LDggQEAgYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0OjplbnN1
cmVTb3VyY2VEYXRhKCkKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBzaXplID0gcnVsZXMuc2l6
ZSgpOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIFN0eWxlUnVsZVJhbmdlTWFwOjppdGVyYXRv
ciBpdCA9IHJ1bGVSYW5nZU1hcC5maW5kKHJ1bGVzLmF0KGkpKTsKICAgICAgICAgaWYgKGl0ICE9
IHJ1bGVSYW5nZU1hcC5lbmQoKSkgewotICAgICAgICAgICAgZml4VW5wYXJzZWRQcm9wZXJ0eVJh
bmdlcyhpdC0+c2Vjb25kLmdldCgpLCBtX3BhcnNlZFN0eWxlU2hlZXQtPnRleHQoKSk7Ci0gICAg
ICAgICAgICByYW5nZXNWZWN0b3ItPmFwcGVuZChpdC0+c2Vjb25kKTsKKyAgICAgICAgICAgIGZp
eFVucGFyc2VkUHJvcGVydHlSYW5nZXMoaXQtPnZhbHVlLmdldCgpLCBtX3BhcnNlZFN0eWxlU2hl
ZXQtPnRleHQoKSk7CisgICAgICAgICAgICByYW5nZXNWZWN0b3ItPmFwcGVuZChpdC0+dmFsdWUp
OwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yVmFsdWVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JWYWx1ZXMuY3BwCmluZGV4IGI4OTU5MzcyYjBlZjMwYmRmZjVhODAzZWFmOTcwOTAwZjc5ODc3
NDEuLjE0ODM1NGRhY2YzOGRmMmUwNjYzZGQ1MTBmMTM4ZGVhNzQyMmZiZWIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwCkBAIC03MTMsNyArNzEzLDcg
QEAgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gSW5zcGVjdG9yT2JqZWN0OjpnZXQoY29uc3Qg
U3RyaW5nJiBuYW1lKSBjb25zdAogICAgIERpY3Rpb25hcnk6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bV9kYXRhLmZpbmQobmFtZSk7CiAgICAgaWYgKGl0ID09IG1fZGF0YS5lbmQoKSkKICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgcmV0dXJuIGl0LT52YWx1ZTsK
IH0KIAogdm9pZCBJbnNwZWN0b3JPYmplY3Q6OnJlbW92ZShjb25zdCBTdHJpbmcmIG5hbWUpCkBA
IC03MzUsOSArNzM1LDkgQEAgdm9pZCBJbnNwZWN0b3JPYmplY3Q6OndyaXRlSlNPTihTdHJpbmdC
dWlsZGVyKiBvdXRwdXQpIGNvbnN0CiAgICAgICAgIEFTU0VSVChpdCAhPSBtX2RhdGEuZW5kKCkp
OwogICAgICAgICBpZiAoaSkKICAgICAgICAgICAgIG91dHB1dC0+YXBwZW5kKCcsJyk7Ci0gICAg
ICAgIGRvdWJsZVF1b3RlU3RyaW5nKGl0LT5maXJzdCwgb3V0cHV0KTsKKyAgICAgICAgZG91Ymxl
UXVvdGVTdHJpbmcoaXQtPmtleSwgb3V0cHV0KTsKICAgICAgICAgb3V0cHV0LT5hcHBlbmQoJzon
KTsKLSAgICAgICAgaXQtPnNlY29uZC0+d3JpdGVKU09OKG91dHB1dCk7CisgICAgICAgIGl0LT52
YWx1ZS0+d3JpdGVKU09OKG91dHB1dCk7CiAgICAgfQogICAgIG91dHB1dC0+YXBwZW5kKCd9Jyk7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yV29ya2Vy
QWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvcldvcmtlckFnZW50
LmNwcAppbmRleCAxYjM4NTk1NzFjYWZjMjNlNGM1NDFkMzQ5YzI2MGRhMWZlNGYzYjk2Li4wNjFm
NDc0ZWYxMDUwMDRjZDg4NjhiZjY1YTdhYmFkYzY1Y2RjZWJkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yV29ya2VyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JXb3JrZXJBZ2VudC5jcHAKQEAgLTE5OSw5ICsxOTks
OSBAQCB2b2lkIEluc3BlY3RvcldvcmtlckFnZW50Ojp3b3JrZXJDb250ZXh0VGVybWluYXRlZChX
b3JrZXJDb250ZXh0UHJveHkqIHByb3h5KQogewogICAgIG1fZGVkaWNhdGVkV29ya2Vycy5yZW1v
dmUocHJveHkpOwogICAgIGZvciAoV29ya2VyQ2hhbm5lbHM6Oml0ZXJhdG9yIGl0ID0gbV9pZFRv
Q2hhbm5lbC5iZWdpbigpOyBpdCAhPSBtX2lkVG9DaGFubmVsLmVuZCgpOyArK2l0KSB7Ci0gICAg
ICAgIGlmIChwcm94eSA9PSBpdC0+c2Vjb25kLT5wcm94eSgpKSB7Ci0gICAgICAgICAgICBtX2lu
c3BlY3RvckZyb250ZW5kLT53b3JrZXIoKS0+d29ya2VyVGVybWluYXRlZChpdC0+Zmlyc3QpOwot
ICAgICAgICAgICAgZGVsZXRlIGl0LT5zZWNvbmQ7CisgICAgICAgIGlmIChwcm94eSA9PSBpdC0+
dmFsdWUtPnByb3h5KCkpIHsKKyAgICAgICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmQtPndvcmtl
cigpLT53b3JrZXJUZXJtaW5hdGVkKGl0LT5rZXkpOworICAgICAgICAgICAgZGVsZXRlIGl0LT52
YWx1ZTsKICAgICAgICAgICAgIG1faWRUb0NoYW5uZWwucmVtb3ZlKGl0KTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQpAQCAtMjExLDE0ICsyMTEsMTQgQEAgdm9pZCBJbnNwZWN0b3JX
b3JrZXJBZ2VudDo6d29ya2VyQ29udGV4dFRlcm1pbmF0ZWQoV29ya2VyQ29udGV4dFByb3h5KiBw
cm94eSkKIHZvaWQgSW5zcGVjdG9yV29ya2VyQWdlbnQ6OmNyZWF0ZVdvcmtlckZyb250ZW5kQ2hh
bm5lbHNGb3JFeGlzdGluZ1dvcmtlcnMoKQogewogICAgIGZvciAoRGVkaWNhdGVkV29ya2Vyczo6
aXRlcmF0b3IgaXQgPSBtX2RlZGljYXRlZFdvcmtlcnMuYmVnaW4oKTsgaXQgIT0gbV9kZWRpY2F0
ZWRXb3JrZXJzLmVuZCgpOyArK2l0KQotICAgICAgICBjcmVhdGVXb3JrZXJGcm9udGVuZENoYW5u
ZWwoaXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsKKyAgICAgICAgY3JlYXRlV29ya2VyRnJvbnRlbmRD
aGFubmVsKGl0LT5rZXksIGl0LT52YWx1ZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yV29ya2VyQWdl
bnQ6OmRlc3Ryb3lXb3JrZXJGcm9udGVuZENoYW5uZWxzKCkKIHsKICAgICBmb3IgKFdvcmtlckNo
YW5uZWxzOjppdGVyYXRvciBpdCA9IG1faWRUb0NoYW5uZWwuYmVnaW4oKTsgaXQgIT0gbV9pZFRv
Q2hhbm5lbC5lbmQoKTsgKytpdCkgewotICAgICAgICBpdC0+c2Vjb25kLT5kaXNjb25uZWN0RnJv
bVdvcmtlckNvbnRleHQoKTsKLSAgICAgICAgZGVsZXRlIGl0LT5zZWNvbmQ7CisgICAgICAgIGl0
LT52YWx1ZS0+ZGlzY29ubmVjdEZyb21Xb3JrZXJDb250ZXh0KCk7CisgICAgICAgIGRlbGV0ZSBp
dC0+dmFsdWU7CiAgICAgfQogICAgIG1faWRUb0NoYW5uZWwuY2xlYXIoKTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0YS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvTmV0d29ya1Jlc291cmNlc0RhdGEuY3BwCmluZGV4IDUy
ZWJhZjMwNzA0NmRmNGVhNjY1MGE0YjQ5ZTYwYzhlMDBkMWI3MzYuLmM2ZWQ0NTQ2ZjA2MmExMTEw
NWRmOTFiNWE4YmRlZjUzMDI5M2EyYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL05ldHdvcmtSZXNvdXJjZXNEYXRhLmNwcApAQCAtMjQ2LDkgKzI0Niw5IEBAIHZvaWQgTmV0
d29ya1Jlc291cmNlc0RhdGE6OmNsZWFyKGNvbnN0IFN0cmluZyYgcHJlc2VydmVkTG9hZGVySWQp
CiAgICAgUmVzb3VyY2VEYXRhTWFwOjppdGVyYXRvciBpdDsKICAgICBSZXNvdXJjZURhdGFNYXA6
Oml0ZXJhdG9yIGVuZCA9IG1fcmVxdWVzdElkVG9SZXNvdXJjZURhdGFNYXAuZW5kKCk7CiAgICAg
Zm9yIChpdCA9IG1fcmVxdWVzdElkVG9SZXNvdXJjZURhdGFNYXAuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7Ci0gICAgICAgIFJlc291cmNlRGF0YSogcmVzb3VyY2VEYXRhID0gaXQtPnNlY29u
ZDsKKyAgICAgICAgUmVzb3VyY2VEYXRhKiByZXNvdXJjZURhdGEgPSBpdC0+dmFsdWU7CiAgICAg
ICAgIGlmICghcHJlc2VydmVkTG9hZGVySWQuaXNOdWxsKCkgJiYgcmVzb3VyY2VEYXRhLT5sb2Fk
ZXJJZCgpID09IHByZXNlcnZlZExvYWRlcklkKQotICAgICAgICAgICAgcHJlc2VydmVkTWFwLnNl
dChpdC0+Zmlyc3QsIGl0LT5zZWNvbmQpOworICAgICAgICAgICAgcHJlc2VydmVkTWFwLnNldChp
dC0+a2V5LCBpdC0+dmFsdWUpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBkZWxldGUgcmVz
b3VyY2VEYXRhOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9z
c09yaWdpbkFjY2Vzc0NvbnRyb2wuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3Jp
Z2luQWNjZXNzQ29udHJvbC5jcHAKaW5kZXggYzBmODk0NWNmODdjMzUyMDJhMjM3YmI0Mjg1ODI1
NzIyZjU0MjY2My4uOTAwNzMzNWNhNTI1NDJlOWMyMWYwM2M5ZTEwODhiYWUzMTU3ZDIwOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luQWNjZXNzQ29udHJvbC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luQWNjZXNzQ29udHJvbC5j
cHAKQEAgLTY4LDcgKzY4LDcgQEAgYm9vbCBpc1NpbXBsZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVz
dChjb25zdCBTdHJpbmcmIG1ldGhvZCwgY29uc3QgSFRUUEhlYWRlck1hcCYKIAogICAgIEhUVFBI
ZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGhlYWRlck1hcC5lbmQoKTsKICAgICBmb3Ig
KEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaGVhZGVyTWFwLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoIWlzT25BY2Nlc3NDb250cm9sU2ltcGxlUmVx
dWVzdEhlYWRlcldoaXRlbGlzdChpdC0+Zmlyc3QsIGl0LT5zZWNvbmQpKQorICAgICAgICBpZiAo
IWlzT25BY2Nlc3NDb250cm9sU2ltcGxlUmVxdWVzdEhlYWRlcldoaXRlbGlzdChpdC0+a2V5LCBp
dC0+dmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtMTE2LDE0
ICsxMTYsMTQgQEAgUmVzb3VyY2VSZXF1ZXN0IGNyZWF0ZUFjY2Vzc0NvbnRyb2xQcmVmbGlnaHRS
ZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWUKICAgICBpZiAocmVxdWVzdEhlYWRl
ckZpZWxkcy5zaXplKCkgPiAwKSB7CiAgICAgICAgIFN0cmluZ0J1aWxkZXIgaGVhZGVyQnVmZmVy
OwogICAgICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHJlcXVlc3RIZWFk
ZXJGaWVsZHMuYmVnaW4oKTsKLSAgICAgICAgaGVhZGVyQnVmZmVyLmFwcGVuZChpdC0+Zmlyc3Qp
OworICAgICAgICBoZWFkZXJCdWZmZXIuYXBwZW5kKGl0LT5rZXkpOwogICAgICAgICArK2l0Owog
CiAgICAgICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHJlcXVlc3RIZWFk
ZXJGaWVsZHMuZW5kKCk7CiAgICAgICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAg
ICAgICAgIGhlYWRlckJ1ZmZlci5hcHBlbmQoJywnKTsKICAgICAgICAgICAgIGhlYWRlckJ1ZmZl
ci5hcHBlbmQoJyAnKTsKLSAgICAgICAgICAgIGhlYWRlckJ1ZmZlci5hcHBlbmQoaXQtPmZpcnN0
KTsKKyAgICAgICAgICAgIGhlYWRlckJ1ZmZlci5hcHBlbmQoaXQtPmtleSk7CiAgICAgICAgIH0K
IAogICAgICAgICBwcmVmbGlnaHRSZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZCgiQWNjZXNzLUNv
bnRyb2wtUmVxdWVzdC1IZWFkZXJzIiwgaGVhZGVyQnVmZmVyLnRvU3RyaW5nKCkubG93ZXIoKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5QcmVmbGlnaHRS
ZXN1bHRDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5QcmVmbGln
aHRSZXN1bHRDYWNoZS5jcHAKaW5kZXggMTk4ZGRhZmEzYzdjNjcyOTU4MjVmMGE2OGI4MmM3OGIw
MDQ4Nzk4ZS4uMzFjNWI1ZWJkZGQzMDg0ZTlhMGUzNmQzNTRiMTA5OGJkOWU3OWUxNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2Fj
aGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpblByZWZsaWdodFJl
c3VsdENhY2hlLmNwcApAQCAtMTI3LDggKzEyNyw4IEBAIGJvb2wgQ3Jvc3NPcmlnaW5QcmVmbGln
aHRSZXN1bHRDYWNoZUl0ZW06OmFsbG93c0Nyb3NzT3JpZ2luSGVhZGVycyhjb25zdCBIVFRQSGVh
CiB7CiAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcmVxdWVzdEhlYWRl
cnMuZW5kKCk7CiAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHJl
cXVlc3RIZWFkZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoIW1f
aGVhZGVycy5jb250YWlucyhpdC0+Zmlyc3QpICYmICFpc09uQWNjZXNzQ29udHJvbFNpbXBsZVJl
cXVlc3RIZWFkZXJXaGl0ZWxpc3QoaXQtPmZpcnN0LCBpdC0+c2Vjb25kKSkgewotICAgICAgICAg
ICAgZXJyb3JEZXNjcmlwdGlvbiA9ICJSZXF1ZXN0IGhlYWRlciBmaWVsZCAiICsgaXQtPmZpcnN0
LnN0cmluZygpICsgIiBpcyBub3QgYWxsb3dlZCBieSBBY2Nlc3MtQ29udHJvbC1BbGxvdy1IZWFk
ZXJzLiI7CisgICAgICAgIGlmICghbV9oZWFkZXJzLmNvbnRhaW5zKGl0LT5rZXkpICYmICFpc09u
QWNjZXNzQ29udHJvbFNpbXBsZVJlcXVlc3RIZWFkZXJXaGl0ZWxpc3QoaXQtPmtleSwgaXQtPnZh
bHVlKSkgeworICAgICAgICAgICAgZXJyb3JEZXNjcmlwdGlvbiA9ICJSZXF1ZXN0IGhlYWRlciBm
aWVsZCAiICsgaXQtPmtleS5zdHJpbmcoKSArICIgaXMgbm90IGFsbG93ZWQgYnkgQWNjZXNzLUNv
bnRyb2wtQWxsb3ctSGVhZGVycy4iOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICB9CiAgICAgfQpAQCAtMTY5LDcgKzE2OSw3IEBAIGJvb2wgQ3Jvc3NPcmlnaW5QcmVmbGlnaHRS
ZXN1bHRDYWNoZTo6Y2FuU2tpcFByZWZsaWdodChjb25zdCBTdHJpbmcmIG9yaWdpbiwgY29uCiAg
ICAgaWYgKGNhY2hlSXQgPT0gbV9wcmVmbGlnaHRIYXNoTWFwLmVuZCgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBpZiAoY2FjaGVJdC0+c2Vjb25kLT5hbGxvd3NSZXF1ZXN0KGluY2x1
ZGVDcmVkZW50aWFscywgbWV0aG9kLCByZXF1ZXN0SGVhZGVycykpCisgICAgaWYgKGNhY2hlSXQt
PnZhbHVlLT5hbGxvd3NSZXF1ZXN0KGluY2x1ZGVDcmVkZW50aWFscywgbWV0aG9kLCByZXF1ZXN0
SGVhZGVycykpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgbV9wcmVmbGlnaHRIYXNoTWFw
LnJlbW92ZShjYWNoZUl0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1
bWVudExvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3Bw
CmluZGV4IGNkNTA1M2Y2YzkxNmNmMjQyZmQ2Mzg5ODNiOGNjNTRmYjc5NzI5YzQuLjFjMTkwZGFl
NjQxODkzN2VjMzdjMTgxYTgxOTg3MGE4NTYxZWU1OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVy
L0RvY3VtZW50TG9hZGVyLmNwcApAQCAtNTU3LDcgKzU1Nyw3IEBAIHZvaWQgRG9jdW1lbnRMb2Fk
ZXI6OmdldFN1YnJlc291cmNlcyhWZWN0b3I8UGFzc1JlZlB0cjxBcmNoaXZlUmVzb3VyY2U+ID4m
IHN1YnJlCiAgICAgY29uc3QgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OkRvY3VtZW50UmVzb3VyY2VN
YXAmIGFsbFJlc291cmNlcyA9IGRvY3VtZW50LT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLT5hbGxD
YWNoZWRSZXNvdXJjZXMoKTsKICAgICBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6RG9jdW1lbnRSZXNv
dXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gYWxsUmVzb3VyY2VzLmVuZCgpOwogICAgIGZv
ciAoQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OkRvY3VtZW50UmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gYWxsUmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAg
ICBSZWZQdHI8QXJjaGl2ZVJlc291cmNlPiBzdWJyZXNvdXJjZSA9IHRoaXMtPnN1YnJlc291cmNl
KEtVUkwoUGFyc2VkVVJMU3RyaW5nLCBpdC0+c2Vjb25kLT51cmwoKSkpOworICAgICAgICBSZWZQ
dHI8QXJjaGl2ZVJlc291cmNlPiBzdWJyZXNvdXJjZSA9IHRoaXMtPnN1YnJlc291cmNlKEtVUkwo
UGFyc2VkVVJMU3RyaW5nLCBpdC0+dmFsdWUtPnVybCgpKSk7CiAgICAgICAgIGlmIChzdWJyZXNv
dXJjZSkKICAgICAgICAgICAgIHN1YnJlc291cmNlcy5hcHBlbmQoc3VicmVzb3VyY2UucmVsZWFz
ZSgpKTsKICAgICB9CkBAIC01ODksOCArNTg5LDggQEAgdm9pZCBEb2N1bWVudExvYWRlcjo6c3Vi
c3RpdHV0ZVJlc291cmNlRGVsaXZlcnlUaW1lckZpcmVkKFRpbWVyPERvY3VtZW50TG9hZGVyPioK
IAogICAgIFN1YnN0aXR1dGVSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY29weS5l
bmQoKTsKICAgICBmb3IgKFN1YnN0aXR1dGVSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBjb3B5LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBSZWZQdHI8UmVzb3Vy
Y2VMb2FkZXI+IGxvYWRlciA9IGl0LT5maXJzdDsKLSAgICAgICAgU3Vic3RpdHV0ZVJlc291cmNl
KiByZXNvdXJjZSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIFJlZlB0cjxSZXNvdXJjZUxv
YWRlcj4gbG9hZGVyID0gaXQtPmtleTsKKyAgICAgICAgU3Vic3RpdHV0ZVJlc291cmNlKiByZXNv
dXJjZSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgCiAgICAgICAgIGlmIChyZXNvdXJjZSkg
ewogICAgICAgICAgICAgU2hhcmVkQnVmZmVyKiBkYXRhID0gcmVzb3VyY2UtPmRhdGEoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9NYWluUmVzb3VyY2VMb2FkZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvbG9hZGVyL01haW5SZXNvdXJjZUxvYWRlci5jcHAKaW5kZXggM2E1NzYx
NTI3ZjJkYjU3YzViYjAwZDYxMTFlMGIxY2VmYzIzODk1MC4uNjIwMWYzMGFiZmQ1NmNmNWIzYzZh
OWUzNDlmZmU1NTQ2NTI2MTY1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL01h
aW5SZXNvdXJjZUxvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL01haW5SZXNv
dXJjZUxvYWRlci5jcHAKQEAgLTM2NSw3ICszNjUsNyBAQCB2b2lkIE1haW5SZXNvdXJjZUxvYWRl
cjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHIpCiAKICAgICBI
VFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHIuaHR0cEhlYWRlckZpZWxkcygpLmZp
bmQoQXRvbWljU3RyaW5nKCJ4LWZyYW1lLW9wdGlvbnMiKSk7CiAgICAgaWYgKGl0ICE9IHIuaHR0
cEhlYWRlckZpZWxkcygpLmVuZCgpKSB7Ci0gICAgICAgIFN0cmluZyBjb250ZW50ID0gaXQtPnNl
Y29uZDsKKyAgICAgICAgU3RyaW5nIGNvbnRlbnQgPSBpdC0+dmFsdWU7CiAgICAgICAgIGlmICht
X2ZyYW1lLT5sb2FkZXIoKS0+c2hvdWxkSW50ZXJydXB0TG9hZEZvclhGcmFtZU9wdGlvbnMoY29u
dGVudCwgci51cmwoKSkpIHsKICAgICAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
Y29udGludWVBZnRlclhGcmFtZU9wdGlvbnNEZW5pZWQobV9mcmFtZS5nZXQoKSwgZG9jdW1lbnRM
b2FkZXIoKSwgaWRlbnRpZmllcigpLCByKTsKICAgICAgICAgICAgIERFRklORV9TVEFUSUNfTE9D
QUwoU3RyaW5nLCBjb25zb2xlTWVzc2FnZSwgKCJSZWZ1c2VkIHRvIGRpc3BsYXkgZG9jdW1lbnQg
YmVjYXVzZSBkaXNwbGF5IGZvcmJpZGRlbiBieSBYLUZyYW1lLU9wdGlvbnMuXG4iKSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCmluZGV4IDgw
MDRkOGYyZWIyZDhiYzM2MDZhMDY5ZmM3ZWVhMzUxYWZjZmNkYWEuLjhlYjQ0ZDQ5ZDI5YTY4NDY2
NGQ4MzI1Y2EyNjFmNTc1YzY0MTBiNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9S
ZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCkBAIC0xNzQsNyArMTc0LDcgQEAgdm9pZCBSZXNvdXJj
ZUxvYWRTY2hlZHVsZXI6OnNlcnZlUGVuZGluZ1JlcXVlc3RzKFJlc291cmNlTG9hZFByaW9yaXR5
IG1pbmltdW1QcmkKICAgICBtX2hvc3RzLmNoZWNrQ29uc2lzdGVuY3koKTsKICAgICBIb3N0TWFw
OjppdGVyYXRvciBlbmQgPSBtX2hvc3RzLmVuZCgpOwogICAgIGZvciAoSG9zdE1hcDo6aXRlcmF0
b3IgaXRlciA9IG1faG9zdHMuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikKLSAgICAgICAg
aG9zdHNUb1NlcnZlLmFwcGVuZChpdGVyLT5zZWNvbmQpOworICAgICAgICBob3N0c1RvU2VydmUu
YXBwZW5kKGl0ZXItPnZhbHVlKTsKIAogICAgIGludCBzaXplID0gaG9zdHNUb1NlcnZlLnNpemUo
KTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkgewpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvbG9hZGVyL1N1YmZyYW1lTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9TdWJmcmFtZUxvYWRlci5jcHAKaW5kZXggNDU3NmM5NGJkM2QxZGIwMzk2MmJjNmM4NDhm
Yzk3ZDgzN2I2ZmEzNS4uNmE1YzFkNzkyMzY1NDM1ZjcyOTkwYjEzZDE5N2I2MTNhZjQ4ZThjNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1N1YmZyYW1lTG9hZGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvU3ViZnJhbWVMb2FkZXIuY3BwCkBAIC0xOTksMTIgKzE5
OSwxMiBAQCBQYXNzUmVmUHRyPFdpZGdldD4gU3ViZnJhbWVMb2FkZXI6OmNyZWF0ZUphdmFBcHBs
ZXRXaWRnZXQoY29uc3QgTGF5b3V0U2l6ZSYgc2l6ZQogICAgIFZlY3RvcjxTdHJpbmc+IHBhcmFt
VmFsdWVzOwogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBlbmQg
PSBhcmdzLmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gYXJncy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYg
KGVxdWFsSWdub3JpbmdDYXNlKGl0LT5maXJzdCwgImJhc2V1cmwiKSkKLSAgICAgICAgICAgIGJh
c2VVUkxTdHJpbmcgPSBpdC0+c2Vjb25kOwotICAgICAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5n
Q2FzZShpdC0+Zmlyc3QsICJjb2RlYmFzZSIpKQotICAgICAgICAgICAgY29kZUJhc2VVUkxTdHJp
bmcgPSBpdC0+c2Vjb25kOwotICAgICAgICBwYXJhbU5hbWVzLmFwcGVuZChpdC0+Zmlyc3QpOwot
ICAgICAgICBwYXJhbVZhbHVlcy5hcHBlbmQoaXQtPnNlY29uZCk7CisgICAgICAgIGlmIChlcXVh
bElnbm9yaW5nQ2FzZShpdC0+a2V5LCAiYmFzZXVybCIpKQorICAgICAgICAgICAgYmFzZVVSTFN0
cmluZyA9IGl0LT52YWx1ZTsKKyAgICAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoaXQt
PmtleSwgImNvZGViYXNlIikpCisgICAgICAgICAgICBjb2RlQmFzZVVSTFN0cmluZyA9IGl0LT52
YWx1ZTsKKyAgICAgICAgcGFyYW1OYW1lcy5hcHBlbmQoaXQtPmtleSk7CisgICAgICAgIHBhcmFt
VmFsdWVzLmFwcGVuZChpdC0+dmFsdWUpOwogICAgIH0KIAogICAgIGlmICghY29kZUJhc2VVUkxT
dHJpbmcuaXNFbXB0eSgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBw
Y2FjaGUvQXBwbGljYXRpb25DYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2Fj
aGUvQXBwbGljYXRpb25DYWNoZS5jcHAKaW5kZXggNjNjZDdiYmJmYTg3ODlmNGFkYjNkZjUyY2I0
ZTljMTdkZDcxNTk0NC4uYjdlYTY1MjRjNDAzOTc1ZmYwZGY5NDZhMmYwZDAxMWNiMTcwMGE2YSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2Fj
aGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNh
Y2hlLmNwcApAQCAtMTAwLDExICsxMDAsMTEgQEAgdW5zaWduZWQgQXBwbGljYXRpb25DYWNoZTo6
cmVtb3ZlUmVzb3VyY2UoY29uc3QgU3RyaW5nJiB1cmwpCiAgICAgICAgIHJldHVybiAwOwogCiAg
ICAgLy8gVGhlIHJlc291cmNlIGV4aXN0cywgZ2V0IGl0cyB0eXBlIHNvIHdlIGNhbiByZXR1cm4g
aXQuCi0gICAgdW5zaWduZWQgdHlwZSA9IGl0LT5zZWNvbmQtPnR5cGUoKTsKKyAgICB1bnNpZ25l
ZCB0eXBlID0gaXQtPnZhbHVlLT50eXBlKCk7CiAKICAgICBtX3Jlc291cmNlcy5yZW1vdmUoaXQp
OwogCi0gICAgbV9lc3RpbWF0ZWRTaXplSW5TdG9yYWdlIC09IGl0LT5zZWNvbmQtPmVzdGltYXRl
ZFNpemVJblN0b3JhZ2UoKTsKKyAgICBtX2VzdGltYXRlZFNpemVJblN0b3JhZ2UgLT0gaXQtPnZh
bHVlLT5lc3RpbWF0ZWRTaXplSW5TdG9yYWdlKCk7CiAKICAgICByZXR1cm4gdHlwZTsKIH0gICAg
CkBAIC0xODAsNyArMTgwLDcgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlOjpjbGVhclN0b3JhZ2VJ
RCgpCiAgICAgCiAgICAgUmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcmVzb3Vy
Y2VzLmVuZCgpOwogICAgIGZvciAoUmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9y
ZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5j
bGVhclN0b3JhZ2VJRCgpOworICAgICAgICBpdC0+dmFsdWUtPmNsZWFyU3RvcmFnZUlEKCk7CiB9
CiAgICAgCiB2b2lkIEFwcGxpY2F0aW9uQ2FjaGU6OmRlbGV0ZUNhY2hlRm9yT3JpZ2luKFNlY3Vy
aXR5T3JpZ2luKiBvcmlnaW4pCkBAIC0yMTgsOCArMjE4LDggQEAgdm9pZCBBcHBsaWNhdGlvbkNh
Y2hlOjpkdW1wKCkKICAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGVS
ZXNvdXJjZT4gPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9yZXNvdXJjZXMuZW5kKCk7CiAgICAg
CiAgICAgZm9yIChIYXNoTWFwPFN0cmluZywgUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJj
ZT4gPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKLSAgICAgICAgcHJpbnRmKCIlcyAiLCBpdC0+Zmlyc3QuYXNjaWkoKS5kYXRhKCkp
OwotICAgICAgICBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OmR1bXBUeXBlKGl0LT5zZWNvbmQt
PnR5cGUoKSk7CisgICAgICAgIHByaW50ZigiJXMgIiwgaXQtPmtleS5hc2NpaSgpLmRhdGEoKSk7
CisgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6ZHVtcFR5cGUoaXQtPnZhbHVlLT50
eXBlKCkpOwogICAgIH0KIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVHcm91cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmNwcAppbmRleCA0ZTQyOTM4YmI1
ZDU3ZDYxMmJkZjM1MGNmMTkzNDA0MDI0Mjc5YWY5Li5kNjQ1MDMwZWYwMGU3ZDAxNzg3OTBmNzc5
NDBjN2IwZGM4ZTNhMzAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2Fj
aGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
YXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmNwcApAQCAtNzc1LDkgKzc3NSw5IEBAIHZv
aWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpkaWRGaW5pc2hMb2FkaW5nTWFuaWZlc3QoKQogICAg
IGlmIChpc1VwZ3JhZGVBdHRlbXB0KSB7CiAgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGU6OlJlc291
cmNlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX25ld2VzdENhY2hlLT5lbmQoKTsKICAgICAg
ICAgZm9yIChBcHBsaWNhdGlvbkNhY2hlOjpSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtX25ld2VzdENhY2hlLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAg
IHVuc2lnbmVkIHR5cGUgPSBpdC0+c2Vjb25kLT50eXBlKCk7CisgICAgICAgICAgICB1bnNpZ25l
ZCB0eXBlID0gaXQtPnZhbHVlLT50eXBlKCk7CiAgICAgICAgICAgICBpZiAodHlwZSAmIEFwcGxp
Y2F0aW9uQ2FjaGVSZXNvdXJjZTo6TWFzdGVyKQotICAgICAgICAgICAgICAgIGFkZEVudHJ5KGl0
LT5maXJzdCwgdHlwZSk7CisgICAgICAgICAgICAgICAgYWRkRW50cnkoaXQtPmtleSwgdHlwZSk7
CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC0xMDE2LDcgKzEwMTYsNyBAQCB2b2lkIEFwcGxp
Y2F0aW9uQ2FjaGVHcm91cDo6c3RhcnRMb2FkaW5nRW50cnkoKQogCiAgICAgQVNTRVJUKCFtX2N1
cnJlbnRIYW5kbGUpOwogICAgIAotICAgIG1fY3VycmVudEhhbmRsZSA9IGNyZWF0ZVJlc291cmNl
SGFuZGxlKEtVUkwoUGFyc2VkVVJMU3RyaW5nLCBpdC0+Zmlyc3QpLCBtX25ld2VzdENhY2hlID8g
bV9uZXdlc3RDYWNoZS0+cmVzb3VyY2VGb3JVUkwoaXQtPmZpcnN0KSA6IDApOworICAgIG1fY3Vy
cmVudEhhbmRsZSA9IGNyZWF0ZVJlc291cmNlSGFuZGxlKEtVUkwoUGFyc2VkVVJMU3RyaW5nLCBp
dC0+a2V5KSwgbV9uZXdlc3RDYWNoZSA/IG1fbmV3ZXN0Q2FjaGUtPnJlc291cmNlRm9yVVJMKGl0
LT5rZXkpIDogMCk7CiB9CiAKIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpkZWxpdmVyRGVs
YXllZE1haW5SZXNvdXJjZXMoKQpAQCAtMTA2NSw3ICsxMDY1LDcgQEAgdm9pZCBBcHBsaWNhdGlv
bkNhY2hlR3JvdXA6OmFkZEVudHJ5KGNvbnN0IFN0cmluZyYgdXJsLCB1bnNpZ25lZCB0eXBlKQog
ICAgIEVudHJ5TWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9wZW5kaW5nRW50cmllcy5hZGQodXJs
LCB0eXBlKTsKICAgICAKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXN1
bHQuaXRlcmF0b3ItPnNlY29uZCB8PSB0eXBlOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZh
bHVlIHw9IHR5cGU7CiB9CiAKIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjphc3NvY2lhdGVE
b2N1bWVudExvYWRlcldpdGhDYWNoZShEb2N1bWVudExvYWRlciogbG9hZGVyLCBBcHBsaWNhdGlv
bkNhY2hlKiBjYWNoZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNo
ZS9BcHBsaWNhdGlvbkNhY2hlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2Fj
aGUvQXBwbGljYXRpb25DYWNoZUhvc3QuY3BwCmluZGV4IDgwMWMxYjM2NzAzMWEzMzlkYjQ0NzA3
YTkyZDFiYzgwZDQxZDhjNzkuLmZlOWYwMTBhMGZlNjUwM2QwYmM1ZTViOTI3NzBhM2Y3YjY0MzQ0
ZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlv
bkNhY2hlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxp
Y2F0aW9uQ2FjaGVIb3N0LmNwcApAQCAtMjgyLDcgKzI4Miw3IEBAIHZvaWQgQXBwbGljYXRpb25D
YWNoZUhvc3Q6OmZpbGxSZXNvdXJjZUxpc3QoUmVzb3VyY2VJbmZvTGlzdCogcmVzb3VyY2VzKQog
ICAgICAKICAgICBBcHBsaWNhdGlvbkNhY2hlOjpSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gY2FjaGUtPmVuZCgpOwogICAgIGZvciAoQXBwbGljYXRpb25DYWNoZTo6UmVzb3VyY2VN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY2FjaGUtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewotICAgICAgICBSZWZQdHI8QXBwbGljYXRpb25DYWNoZVJlc291cmNlPiByZXNvdXJjZSA9IGl0
LT5zZWNvbmQ7CisgICAgICAgIFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+IHJlc291
cmNlID0gaXQtPnZhbHVlOwogICAgICAgICB1bnNpZ25lZCB0eXBlID0gcmVzb3VyY2UtPnR5cGUo
KTsKICAgICAgICAgYm9vbCBpc01hc3RlciAgID0gdHlwZSAmIEFwcGxpY2F0aW9uQ2FjaGVSZXNv
dXJjZTo6TWFzdGVyOwogICAgICAgICBib29sIGlzTWFuaWZlc3QgPSB0eXBlICYgQXBwbGljYXRp
b25DYWNoZVJlc291cmNlOjpNYW5pZmVzdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuY3BwIGIvU291cmNlL1dlYkNv
cmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5jcHAKaW5kZXggZDgz
MTc4NGI0MTk2YWRmMzgyY2YzNTVlMGVlZjAyZDZhN2E4MDc5MC4uOTk3NjZlM2E2NmJkMzZlYjQy
ZmVkMmE5MjY5ZDM0YjA2NjE5NGQ3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVy
L2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5jcHAKQEAgLTU0LDcg
KzU0LDcgQEAgaW50NjRfdCBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OmVzdGltYXRlZFNpemVJ
blN0b3JhZ2UoKQogCiAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcmVz
cG9uc2UoKS5odHRwSGVhZGVyRmllbGRzKCkuZW5kKCk7CiAgICAgZm9yIChIVFRQSGVhZGVyTWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IHJlc3BvbnNlKCkuaHR0cEhlYWRlckZpZWxkcygpLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgbV9lc3RpbWF0ZWRTaXplSW5TdG9yYWdlICs9
IChpdC0+Zmlyc3QubGVuZ3RoKCkgKyBpdC0+c2Vjb25kLmxlbmd0aCgpICsgMikgKiBzaXplb2Yo
VUNoYXIpOworICAgICAgICBtX2VzdGltYXRlZFNpemVJblN0b3JhZ2UgKz0gKGl0LT5rZXkubGVu
Z3RoKCkgKyBpdC0+dmFsdWUubGVuZ3RoKCkgKyAyKSAqIHNpemVvZihVQ2hhcik7CiAKICAgICBt
X2VzdGltYXRlZFNpemVJblN0b3JhZ2UgKz0gdXJsKCkuc3RyaW5nKCkubGVuZ3RoKCkgKiBzaXpl
b2YoVUNoYXIpOwogICAgIG1fZXN0aW1hdGVkU2l6ZUluU3RvcmFnZSArPSBzaXplb2YoaW50KTsg
Ly8gcmVzcG9uc2UoKS5tX2h0dHBTdGF0dXNDb2RlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcAppbmRleCA1
ZDEwM2IyZmY3YjRjYmE1NGUwMzdiYTZjODc5NjIzMDRkMDVlZTYxLi41YTkwODFmZjJkZWM4ZmNl
NjIyMzE3OGIwZTA5YzU4ZjViMjg5OGY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAKQEAgLTEzNyw4
ICsxMzcsOCBAQCBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdl
OjpmaW5kT3JDcmVhdGVDYWNoZUdyb3VwKGNvbnN0IEtVUgogICAgIENhY2hlR3JvdXBNYXA6OkFk
ZFJlc3VsdCByZXN1bHQgPSBtX2NhY2hlc0luTWVtb3J5LmFkZChtYW5pZmVzdFVSTCwgMCk7CiAg
ICAgCiAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICBBU1NFUlQocmVzdWx0
Lml0ZXJhdG9yLT5zZWNvbmQpOwotICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT5zZWNv
bmQ7CisgICAgICAgIEFTU0VSVChyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAgICAgfQogCiAgICAgLy8gTG9vayB1cCB0aGUg
Z3JvdXAgaW4gdGhlIGRhdGFiYXNlCkBAIC0xNTAsNyArMTUwLDcgQEAgQXBwbGljYXRpb25DYWNo
ZUdyb3VwKiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZmluZE9yQ3JlYXRlQ2FjaGVHcm91cChj
b25zdCBLVVIKICAgICAgICAgbV9jYWNoZUhvc3RTZXQuYWRkKHVybEhvc3RIYXNoKG1hbmlmZXN0
VVJMKSk7CiAgICAgfQogICAgIAotICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gZ3JvdXA7
CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGdyb3VwOwogICAgIAogICAgIHJldHVybiBn
cm91cDsKIH0KQEAgLTE5Nyw3ICsxOTcsNyBAQCBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIEFwcGxp
Y2F0aW9uQ2FjaGVTdG9yYWdlOjpjYWNoZUdyb3VwRm9yVVJMKGNvbnN0IEtVUkwmIHVybAogICAg
IC8vIENoZWNrIGlmIGEgY2FjaGUgYWxyZWFkeSBleGlzdHMgaW4gbWVtb3J5LgogICAgIENhY2hl
R3JvdXBNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fY2FjaGVzSW5NZW1vcnkuZW5kKCk7CiAg
ICAgZm9yIChDYWNoZUdyb3VwTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fY2FjaGVzSW5NZW1v
cnkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVH
cm91cCogZ3JvdXAgPSBpdC0+c2Vjb25kOworICAgICAgICBBcHBsaWNhdGlvbkNhY2hlR3JvdXAq
IGdyb3VwID0gaXQtPnZhbHVlOwogCiAgICAgICAgIEFTU0VSVCghZ3JvdXAtPmlzT2Jzb2xldGUo
KSk7CiAKQEAgLTI2OCw3ICsyNjgsNyBAQCBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIEFwcGxpY2F0
aW9uQ2FjaGVTdG9yYWdlOjpmYWxsYmFja0NhY2hlR3JvdXBGb3JVUkwoY29uc3QgSwogICAgIC8v
IENoZWNrIGlmIGFuIGFwcHJvcHJpYXRlIGNhY2hlIGFscmVhZHkgZXhpc3RzIGluIG1lbW9yeS4K
ICAgICBDYWNoZUdyb3VwTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2NhY2hlc0luTWVtb3J5
LmVuZCgpOwogICAgIGZvciAoQ2FjaGVHcm91cE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2Nh
Y2hlc0luTWVtb3J5LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBBcHBsaWNh
dGlvbkNhY2hlR3JvdXAqIGdyb3VwID0gaXQtPnNlY29uZDsKKyAgICAgICAgQXBwbGljYXRpb25D
YWNoZUdyb3VwKiBncm91cCA9IGl0LT52YWx1ZTsKICAgICAgICAgCiAgICAgICAgIEFTU0VSVCgh
Z3JvdXAtPmlzT2Jzb2xldGUoKSk7CiAKQEAgLTcxMywxMyArNzEzLDEzIEBAIGJvb2wgQXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hlLCBSZXNvdXJj
ZVN0b3JhZ2VJREpvCiAgICAgewogICAgICAgICBBcHBsaWNhdGlvbkNhY2hlOjpSZXNvdXJjZU1h
cDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY2FjaGUtPmVuZCgpOwogICAgICAgICBmb3IgKEFwcGxp
Y2F0aW9uQ2FjaGU6OlJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGNhY2hlLT5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIG9sZFN0b3JhZ2VJ
RCA9IGl0LT5zZWNvbmQtPnN0b3JhZ2VJRCgpOwotICAgICAgICAgICAgaWYgKCFzdG9yZShpdC0+
c2Vjb25kLmdldCgpLCBjYWNoZVN0b3JhZ2VJRCkpCisgICAgICAgICAgICB1bnNpZ25lZCBvbGRT
dG9yYWdlSUQgPSBpdC0+dmFsdWUtPnN0b3JhZ2VJRCgpOworICAgICAgICAgICAgaWYgKCFzdG9y
ZShpdC0+dmFsdWUuZ2V0KCksIGNhY2hlU3RvcmFnZUlEKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICAgICAgICAgIC8vIFN0b3JpbmcgdGhlIHJlc291cmNlIHN1Y2NlZWRl
ZC4gTG9nIGl0cyBvbGQgc3RvcmFnZUlEIGluIGNhc2UKICAgICAgICAgICAgIC8vIGl0IG5lZWRz
IHRvIGJlIHJlc3RvcmVkIGxhdGVyLgotICAgICAgICAgICAgc3RvcmFnZUlESm91cm5hbC0+YWRk
KGl0LT5zZWNvbmQuZ2V0KCksIG9sZFN0b3JhZ2VJRCk7CisgICAgICAgICAgICBzdG9yYWdlSURK
b3VybmFsLT5hZGQoaXQtPnZhbHVlLmdldCgpLCBvbGRTdG9yYWdlSUQpOwogICAgICAgICB9CiAg
ICAgfQogICAgIApAQCAtODM5LDkgKzgzOSw5IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3Jh
Z2U6OnN0b3JlKEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2UsIHVuc2lnbmVkCiAg
ICAgCiAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcmVzb3VyY2UtPnJl
c3BvbnNlKCkuaHR0cEhlYWRlckZpZWxkcygpLmVuZCgpOwogICAgIGZvciAoSFRUUEhlYWRlck1h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSByZXNvdXJjZS0+cmVzcG9uc2UoKS5odHRwSGVhZGVyRmll
bGRzKCkuYmVnaW4oKTsgaXQhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPmtleSk7
CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKChVQ2hhciknOicpOwotICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZChpdC0+c2Vjb25kKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQoaXQtPnZhbHVlKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoKFVDaGFyKSdcbicp
OwogICAgIH0KICAgICAKQEAgLTEyNDEsNyArMTI0MSw3IEBAIHZvaWQgQXBwbGljYXRpb25DYWNo
ZVN0b3JhZ2U6OmVtcHR5KCkKICAgICAvLyB1bnRpbCBhIGNhY2hlIHVwZGF0ZSBwcm9jZXNzIGhh
cyBiZWVuIGluaXRpYXRlZC4KICAgICBDYWNoZUdyb3VwTWFwOjpjb25zdF9pdGVyYXRvciBlbmQg
PSBtX2NhY2hlc0luTWVtb3J5LmVuZCgpOwogICAgIGZvciAoQ2FjaGVHcm91cE1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX2NhY2hlc0luTWVtb3J5LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkK
LSAgICAgICAgaXQtPnNlY29uZC0+Y2xlYXJTdG9yYWdlSUQoKTsKKyAgICAgICAgaXQtPnZhbHVl
LT5jbGVhclN0b3JhZ2VJRCgpOwogICAgIAogICAgIGNoZWNrRm9yRGVsZXRlZFJlc291cmNlcygp
OwogfQpAQCAtMTMwMyw3ICsxMzAzLDcgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6
c3RvcmVDb3B5T2ZDYWNoZShjb25zdCBTdHJpbmcmIGNhY2hlRGlyZWN0b3J5LCBBcHAKICAgICAv
LyBUcmF2ZXJzZSB0aGUgY2FjaGUgYW5kIGFkZCBjb3BpZXMgb2YgYWxsIHJlc291cmNlcy4KICAg
ICBBcHBsaWNhdGlvbkNhY2hlOjpSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY2Fj
aGUtPmVuZCgpOwogICAgIGZvciAoQXBwbGljYXRpb25DYWNoZTo6UmVzb3VyY2VNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gY2FjaGUtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAg
ICBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqIHJlc291cmNlID0gaXQtPnNlY29uZC5nZXQoKTsK
KyAgICAgICAgQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJjZSA9IGl0LT52YWx1ZS5n
ZXQoKTsKICAgICAgICAgCiAgICAgICAgIFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+
IHJlc291cmNlQ29weSA9IEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6Y3JlYXRlKHJlc291cmNl
LT51cmwoKSwgcmVzb3VyY2UtPnJlc3BvbnNlKCksIHJlc291cmNlLT50eXBlKCksIHJlc291cmNl
LT5kYXRhKCksIHJlc291cmNlLT5wYXRoKCkpOwogICAgICAgICAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL0FyY2hpdmVGYWN0b3J5LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9hcmNoaXZlL0FyY2hpdmVGYWN0b3J5LmNwcAppbmRleCA1MjFkZWIxZDcwNDZi
NTA1ZjcwNzU0ZmQyYmI1YWU4NzBlNzQxNDU5Li4yZmNmMzI5NDAyNWFlNzM0ZTM1ZTBkMTdjNjll
MjUxNjQyNzc0ZTc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9B
cmNoaXZlRmFjdG9yeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvQXJj
aGl2ZUZhY3RvcnkuY3BwCkBAIC05Miw3ICs5Miw3IEBAIHZvaWQgQXJjaGl2ZUZhY3Rvcnk6OnJl
Z2lzdGVyS25vd25BcmNoaXZlTUlNRVR5cGVzKCkKICAgICBBcmNoaXZlTUlNRVR5cGVzTWFwOjpp
dGVyYXRvciBlbmQgPSBhcmNoaXZlTUlNRVR5cGVzKCkuZW5kKCk7CiAKICAgICBmb3IgKDsgaSAh
PSBlbmQ7ICsraSkKLSAgICAgICAgbWltZVR5cGVzLmFkZChpLT5maXJzdCk7CisgICAgICAgIG1p
bWVUeXBlcy5hZGQoaS0+a2V5KTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
bG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5jcHAKaW5kZXggZTUwNWM3ODQ0YWQ3ZTViYWU3ZWI1
ODFmOTExZmVhYTQ2ZDczNDk5NS4uZTRmM2NiMmIxYzkyMjkwZDkxY2ZmNjFkMzY0ODcxNTJjMmYy
ZjI1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jl
c291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmF3UmVz
b3VyY2UuY3BwCkBAIC0xNDgsOCArMTQ4LDggQEAgYm9vbCBDYWNoZWRSYXdSZXNvdXJjZTo6Y2Fu
UmV1c2UoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBuZXdSZXF1ZXN0KSBjb25zdAogCiAgICAgSFRU
UEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbmV3SGVhZGVycy5lbmQoKTsKICAgICBm
b3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGkgPSBuZXdIZWFkZXJzLmJlZ2luKCk7
IGkgIT0gZW5kOyArK2kpIHsKLSAgICAgICAgQXRvbWljU3RyaW5nIGhlYWRlck5hbWUgPSBpLT5m
aXJzdDsKLSAgICAgICAgaWYgKGktPnNlY29uZCAhPSBvbGRIZWFkZXJzLmdldChoZWFkZXJOYW1l
KSkKKyAgICAgICAgQXRvbWljU3RyaW5nIGhlYWRlck5hbWUgPSBpLT5rZXk7CisgICAgICAgIGlm
IChpLT52YWx1ZSAhPSBvbGRIZWFkZXJzLmdldChoZWFkZXJOYW1lKSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
bG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNwcAppbmRleCAwMzY4YTcyNDUyNWZhZmU2NDkw
NTg3YmViMmI0ZjZlNmU5ZmNjNmU2Li40NGM0ZTUyY2NiNjcyNGY2NDQ1YzFjODE2MjQ1ZmYwYmM2
YTI2NmJhIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVz
b3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJj
ZS5jcHAKQEAgLTU5MCw4ICs1OTAsOCBAQCB2b2lkIENhY2hlZFJlc291cmNlOjpzd2l0Y2hDbGll
bnRzVG9SZXZhbGlkYXRlZFJlc291cmNlKCkKICAgICBWZWN0b3I8Q2FjaGVkUmVzb3VyY2VDbGll
bnQqPiBjbGllbnRzVG9Nb3ZlOwogICAgIEhhc2hDb3VudGVkU2V0PENhY2hlZFJlc291cmNlQ2xp
ZW50Kj46Oml0ZXJhdG9yIGVuZDIgPSBtX2NsaWVudHMuZW5kKCk7CiAgICAgZm9yIChIYXNoQ291
bnRlZFNldDxDYWNoZWRSZXNvdXJjZUNsaWVudCo+OjppdGVyYXRvciBpdCA9IG1fY2xpZW50cy5i
ZWdpbigpOyBpdCAhPSBlbmQyOyArK2l0KSB7Ci0gICAgICAgIENhY2hlZFJlc291cmNlQ2xpZW50
KiBjbGllbnQgPSBpdC0+Zmlyc3Q7Ci0gICAgICAgIHVuc2lnbmVkIGNvdW50ID0gaXQtPnNlY29u
ZDsKKyAgICAgICAgQ2FjaGVkUmVzb3VyY2VDbGllbnQqIGNsaWVudCA9IGl0LT5rZXk7CisgICAg
ICAgIHVuc2lnbmVkIGNvdW50ID0gaXQtPnZhbHVlOwogICAgICAgICB3aGlsZSAoY291bnQpIHsK
ICAgICAgICAgICAgIGNsaWVudHNUb01vdmUuYXBwZW5kKGNsaWVudCk7CiAgICAgICAgICAgICAt
LWNvdW50OwpAQCAtNjI1LDkgKzYyNSw5IEBAIHZvaWQgQ2FjaGVkUmVzb3VyY2U6OnVwZGF0ZVJl
c3BvbnNlQWZ0ZXJSZXZhbGlkYXRpb24oY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgdmFsCiAgICAg
SFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbmV3SGVhZGVycy5lbmQoKTsKICAg
ICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbmV3SGVhZGVycy5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgLy8gRG9uJ3QgYWxsb3cgMzA0IHJlc3Bv
bnNlIHRvIHVwZGF0ZSBjb250ZW50IGhlYWRlcnMsIHRoZXNlIGNhbid0IGNoYW5nZSBidXQgc29t
ZSBzZXJ2ZXJzIHNlbmQgd3JvbmcgdmFsdWVzLgotICAgICAgICBpZiAoaXQtPmZpcnN0LnN0YXJ0
c1dpdGgoY29udGVudEhlYWRlclByZWZpeCwgZmFsc2UpKQorICAgICAgICBpZiAoaXQtPmtleS5z
dGFydHNXaXRoKGNvbnRlbnRIZWFkZXJQcmVmaXgsIGZhbHNlKSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICBtX3Jlc3BvbnNlLnNldEhUVFBIZWFkZXJGaWVsZChpdC0+Zmlyc3QsIGl0
LT5zZWNvbmQpOworICAgICAgICBtX3Jlc3BvbnNlLnNldEhUVFBIZWFkZXJGaWVsZChpdC0+a2V5
LCBpdC0+dmFsdWUpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuaAppbmRleCA4YjM3ODBiNWU2
NGIyMTQzNDYyODk2YmRhMmE2YTI2NWE1YThhMDc0Li43OTMzYjBiODE0YzUyMTI1NmUwNzYwZjg2
MWI0MzEwOTdiODliNTljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUv
Q2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
Y2FjaGUvQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuaApAQCAtNDIsNyArNDIsNyBAQCBwdWJs
aWM6CiAgICAgICAgIEl0ZXJhdG9yIGVuZCA9IHNldC5lbmQoKTsKICAgICAgICAgc2l6ZV90IGNs
aWVudEluZGV4ID0gMDsKICAgICAgICAgZm9yIChJdGVyYXRvciBjdXJyZW50ID0gc2V0LmJlZ2lu
KCk7IGN1cnJlbnQgIT0gZW5kOyArK2N1cnJlbnQpCi0gICAgICAgICAgICBtX2NsaWVudFZlY3Rv
cltjbGllbnRJbmRleCsrXSA9IGN1cnJlbnQtPmZpcnN0OworICAgICAgICAgICAgbV9jbGllbnRW
ZWN0b3JbY2xpZW50SW5kZXgrK10gPSBjdXJyZW50LT5rZXk7CiAgICAgfQogCiAgICAgVCogbmV4
dCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNl
TG9hZGVyLmNwcAppbmRleCA5ZTllNDEwNmM4MmY4YjUwZjQzMTBiNWM5NjNhNGEwNGE3YzY5Nzdj
Li5kZTZiNjI3YzRlMzI2ZTkzZjJhMjFiYjA0MWE5NTlkZjgzMTIyZWI3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAKQEAg
LTEyOSw3ICsxMjksNyBAQCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6fkNhY2hlZFJlc291cmNlTG9h
ZGVyKCkKICAgICBjbGVhclByZWxvYWRzKCk7CiAgICAgRG9jdW1lbnRSZXNvdXJjZU1hcDo6aXRl
cmF0b3IgZW5kID0gbV9kb2N1bWVudFJlc291cmNlcy5lbmQoKTsKICAgICBmb3IgKERvY3VtZW50
UmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9kb2N1bWVudFJlc291cmNlcy5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPnNldE93bmluZ0NhY2hlZFJlc291
cmNlTG9hZGVyKDApOworICAgICAgICBpdC0+dmFsdWUtPnNldE93bmluZ0NhY2hlZFJlc291cmNl
TG9hZGVyKDApOwogCiAgICAgLy8gTWFrZSBzdXJlIG5vIHJlcXVlc3RzIHN0aWxsIHBvaW50IHRv
IHRoaXMgQ2FjaGVkUmVzb3VyY2VMb2FkZXIKICAgICBBU1NFUlQobV9yZXF1ZXN0Q291bnQgPT0g
MCk7CkBAIC00MjksNyArNDI5LDcgQEAgQ2FjaGVkUmVzb3VyY2UqIENhY2hlZFJlc291cmNlTG9h
ZGVyOjpyZXF1ZXN0UmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2U6OlR5cGUgdHlwZSwKICAgICBpZiAo
bWVtb3J5Q2FjaGUoKS0+ZGlzYWJsZWQoKSkgewogICAgICAgICBEb2N1bWVudFJlc291cmNlTWFw
OjppdGVyYXRvciBpdCA9IG1fZG9jdW1lbnRSZXNvdXJjZXMuZmluZCh1cmwuc3RyaW5nKCkpOwog
ICAgICAgICBpZiAoaXQgIT0gbV9kb2N1bWVudFJlc291cmNlcy5lbmQoKSkgewotICAgICAgICAg
ICAgaXQtPnNlY29uZC0+c2V0T3duaW5nQ2FjaGVkUmVzb3VyY2VMb2FkZXIoMCk7CisgICAgICAg
ICAgICBpdC0+dmFsdWUtPnNldE93bmluZ0NhY2hlZFJlc291cmNlTG9hZGVyKDApOwogICAgICAg
ICAgICAgbV9kb2N1bWVudFJlc291cmNlcy5yZW1vdmUoaXQpOwogICAgICAgICB9CiAgICAgfQpA
QCAtNjU0LDcgKzY1NCw3IEBAIHZvaWQgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnNldEF1dG9Mb2Fk
SW1hZ2VzKGJvb2wgZW5hYmxlKQogCiAgICAgRG9jdW1lbnRSZXNvdXJjZU1hcDo6aXRlcmF0b3Ig
ZW5kID0gbV9kb2N1bWVudFJlc291cmNlcy5lbmQoKTsKICAgICBmb3IgKERvY3VtZW50UmVzb3Vy
Y2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9kb2N1bWVudFJlc291cmNlcy5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKLSAgICAgICAgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlID0gaXQtPnNlY29u
ZC5nZXQoKTsKKyAgICAgICAgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlID0gaXQtPnZhbHVlLmdl
dCgpOwogICAgICAgICBpZiAocmVzb3VyY2UtPnR5cGUoKSA9PSBDYWNoZWRSZXNvdXJjZTo6SW1h
Z2VSZXNvdXJjZSkgewogICAgICAgICAgICAgQ2FjaGVkSW1hZ2UqIGltYWdlID0gY29uc3RfY2Fz
dDxDYWNoZWRJbWFnZSo+KHN0YXRpY19jYXN0PGNvbnN0IENhY2hlZEltYWdlKj4ocmVzb3VyY2Up
KTsKIApAQCAtNjc0LDcgKzY3NCw3IEBAIHZvaWQgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlbW92
ZUNhY2hlZFJlc291cmNlKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSkgY29uc3QKICNpZm5kZWYg
TkRFQlVHCiAgICAgRG9jdW1lbnRSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX2RvY3VtZW50
UmVzb3VyY2VzLmZpbmQocmVzb3VyY2UtPnVybCgpKTsKICAgICBpZiAoaXQgIT0gbV9kb2N1bWVu
dFJlc291cmNlcy5lbmQoKSkKLSAgICAgICAgQVNTRVJUKGl0LT5zZWNvbmQuZ2V0KCkgPT0gcmVz
b3VyY2UpOworICAgICAgICBBU1NFUlQoaXQtPnZhbHVlLmdldCgpID09IHJlc291cmNlKTsKICNl
bmRpZgogICAgIG1fZG9jdW1lbnRSZXNvdXJjZXMucmVtb3ZlKHJlc291cmNlLT51cmwoKSk7CiB9
CkBAIC03MDYsOSArNzA2LDkgQEAgdm9pZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6Z2FyYmFnZUNv
bGxlY3REb2N1bWVudFJlc291cmNlc1RpbWVyRmlyZWQoVGltZXI8Q2FjaGUKICAgICBTdHJpbmdW
ZWN0b3IgcmVzb3VyY2VzVG9EZWxldGU7CiAKICAgICBmb3IgKERvY3VtZW50UmVzb3VyY2VNYXA6
Oml0ZXJhdG9yIGl0ID0gbV9kb2N1bWVudFJlc291cmNlcy5iZWdpbigpOyBpdCAhPSBtX2RvY3Vt
ZW50UmVzb3VyY2VzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kLT5oYXNP
bmVIYW5kbGUoKSkgewotICAgICAgICAgICAgcmVzb3VyY2VzVG9EZWxldGUuYXBwZW5kKGl0LT5m
aXJzdCk7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRPd25pbmdDYWNoZWRSZXNvdXJjZUxv
YWRlcigwKTsKKyAgICAgICAgaWYgKGl0LT52YWx1ZS0+aGFzT25lSGFuZGxlKCkpIHsKKyAgICAg
ICAgICAgIHJlc291cmNlc1RvRGVsZXRlLmFwcGVuZChpdC0+a2V5KTsKKyAgICAgICAgICAgIGl0
LT52YWx1ZS0+c2V0T3duaW5nQ2FjaGVkUmVzb3VyY2VMb2FkZXIoMCk7CiAgICAgICAgIH0KICAg
ICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNo
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuY3BwCmluZGV4
IDExMjc1ZTA2ZDgxMjIzYzQ3NDE4NmU1M2Y4ZDdjYmIzNjFjZjBkZWUuLmQyZGI0ZGE3N2RjNjg5
NGNmZWM1YWQ2Njk2NTk2OWVmNDQwOGNlNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9jYWNoZS9NZW1vcnlDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2Nh
Y2hlL01lbW9yeUNhY2hlLmNwcApAQCAtNTM4LDcgKzUzOCw3IEBAIHZvaWQgTWVtb3J5Q2FjaGU6
OnJlbW92ZVJlc291cmNlc1dpdGhPcmlnaW4oU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKIAogICAg
IENhY2hlZFJlc291cmNlTWFwOjppdGVyYXRvciBlID0gbV9yZXNvdXJjZXMuZW5kKCk7CiAgICAg
Zm9yIChDYWNoZWRSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5iZWdpbigp
OyBpdCAhPSBlOyArK2l0KSB7Ci0gICAgICAgIENhY2hlZFJlc291cmNlKiByZXNvdXJjZSA9IGl0
LT5zZWNvbmQ7CisgICAgICAgIENhY2hlZFJlc291cmNlKiByZXNvdXJjZSA9IGl0LT52YWx1ZTsK
ICAgICAgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiByZXNvdXJjZU9yaWdpbiA9IFNlY3VyaXR5
T3JpZ2luOjpjcmVhdGVGcm9tU3RyaW5nKHJlc291cmNlLT51cmwoKSk7CiAgICAgICAgIGlmICgh
cmVzb3VyY2VPcmlnaW4pCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTU1NCw3ICs1NTQsNyBA
QCB2b2lkIE1lbW9yeUNhY2hlOjpnZXRPcmlnaW5zV2l0aENhY2hlKFNlY3VyaXR5T3JpZ2luU2V0
JiBvcmlnaW5zKQogewogICAgIENhY2hlZFJlc291cmNlTWFwOjppdGVyYXRvciBlID0gbV9yZXNv
dXJjZXMuZW5kKCk7CiAgICAgZm9yIChDYWNoZWRSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBt
X3Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSBlOyArK2l0KQotICAgICAgICBvcmlnaW5zLmFkZChT
ZWN1cml0eU9yaWdpbjo6Y3JlYXRlRnJvbVN0cmluZyhpdC0+c2Vjb25kLT51cmwoKSkpOworICAg
ICAgICBvcmlnaW5zLmFkZChTZWN1cml0eU9yaWdpbjo6Y3JlYXRlRnJvbVN0cmluZyhpdC0+dmFs
dWUtPnVybCgpKSk7CiB9CiAKIHZvaWQgTWVtb3J5Q2FjaGU6OnJlbW92ZUZyb21MaXZlRGVjb2Rl
ZFJlc291cmNlc0xpc3QoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlKQpAQCAtNjg3LDcgKzY4Nyw3
IEBAIE1lbW9yeUNhY2hlOjpTdGF0aXN0aWNzIE1lbW9yeUNhY2hlOjpnZXRTdGF0aXN0aWNzKCkK
ICAgICBTdGF0aXN0aWNzIHN0YXRzOwogICAgIENhY2hlZFJlc291cmNlTWFwOjppdGVyYXRvciBl
ID0gbV9yZXNvdXJjZXMuZW5kKCk7CiAgICAgZm9yIChDYWNoZWRSZXNvdXJjZU1hcDo6aXRlcmF0
b3IgaSA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7IGkgIT0gZTsgKytpKSB7Ci0gICAgICAgIENhY2hl
ZFJlc291cmNlKiByZXNvdXJjZSA9IGktPnNlY29uZDsKKyAgICAgICAgQ2FjaGVkUmVzb3VyY2Uq
IHJlc291cmNlID0gaS0+dmFsdWU7CiAgICAgICAgIHN3aXRjaCAocmVzb3VyY2UtPnR5cGUoKSkg
ewogICAgICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpJbWFnZVJlc291cmNlOgogICAgICAgICAg
ICAgc3RhdHMuaW1hZ2VzLmFkZFJlc291cmNlKHJlc291cmNlKTsKQEAgLTcyMyw3ICs3MjMsNyBA
QCB2b2lkIE1lbW9yeUNhY2hlOjpzZXREaXNhYmxlZChib29sIGRpc2FibGVkKQogICAgICAgICBD
YWNoZWRSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaSA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7CiAgICAg
ICAgIGlmIChpID09IG1fcmVzb3VyY2VzLmVuZCgpKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGV2aWN0KGktPnNlY29uZCk7CisgICAgICAgIGV2aWN0KGktPnZhbHVlKTsKICAgICB9CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFzZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuY3BwCmluZGV4IGNl
NGYwMTA0NjZjMGZiOGQxZGQ2ZTJjNWNmMmNkMmU5ZDMxMmU2ODYuLjViZGE2MzMxZTI5NGI0Nzg0
YjU1NjI3NWQzMTI1YWE0ZGUxMDhkNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9pY29uL0ljb25EYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24v
SWNvbkRhdGFiYXNlLmNwcApAQCAtMTg1LDcgKzE4NSw3IEBAIHZvaWQgSWNvbkRhdGFiYXNlOjpy
ZW1vdmVBbGxJY29ucygpCiAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBQYWdlVVJMUmVjb3JkKj46
Oml0ZXJhdG9yIGl0ZXIgPSBtX3BhZ2VVUkxUb1JlY29yZE1hcC5iZWdpbigpOwogICAgICAgICBI
YXNoTWFwPFN0cmluZywgUGFnZVVSTFJlY29yZCo+OjppdGVyYXRvciBlbmQgPSBtX3BhZ2VVUkxU
b1JlY29yZE1hcC5lbmQoKTsKICAgICAgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCi0g
ICAgICAgICAgICAoKml0ZXIpLnNlY29uZC0+c2V0SWNvblJlY29yZCgwKTsKKyAgICAgICAgICAg
ICgqaXRlcikudmFsdWUtPnNldEljb25SZWNvcmQoMCk7CiAgICAgICAgICAgICAKICAgICAgICAg
Ly8gQ2xlYXIgdGhlIGljb25VUkwgLT4gSWNvblJlY29yZCBtYXAKICAgICAgICAgbV9pY29uVVJM
VG9SZWNvcmRNYXAuY2xlYXIoKTsKQEAgLTc1NCw3ICs3NTQsNyBAQCBzaXplX3QgSWNvbkRhdGFi
YXNlOjppY29uUmVjb3JkQ291bnRXaXRoRGF0YSgpCiAgICAgSGFzaE1hcDxTdHJpbmcsIEljb25S
ZWNvcmQqPjo6aXRlcmF0b3IgZW5kID0gbV9pY29uVVJMVG9SZWNvcmRNYXAuZW5kKCk7CiAgICAg
CiAgICAgZm9yICg7IGkgIT0gZW5kOyArK2kpCi0gICAgICAgIHJlc3VsdCArPSAoKCppKS5zZWNv
bmQtPmltYWdlRGF0YVN0YXR1cygpID09IEltYWdlRGF0YVN0YXR1c1ByZXNlbnQpOworICAgICAg
ICByZXN1bHQgKz0gKCgqaSkudmFsdWUtPmltYWdlRGF0YVN0YXR1cygpID09IEltYWdlRGF0YVN0
YXR1c1ByZXNlbnQpOwogICAgICAgICAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRE9NV2luZG93LmNwcAppbmRleCA5ZDRjM2I0MWY3M2Q0M2NhZjA0ZDg0YTYyOGQ5Njcz
NDM4NTEwMTk0Li41NzY5NTYzZmRjNjJjODJlZTBkNjMzZTQ2YWI5OWIzYTljZjM0ZTRmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCkBAIC0yNDUsNyArMjQ1LDcgQEAgYm9vbCBET01XaW5k
b3c6OmRpc3BhdGNoQWxsUGVuZGluZ0JlZm9yZVVubG9hZEV2ZW50cygpCiAgICAgVmVjdG9yPFJl
ZlB0cjxET01XaW5kb3c+ID4gd2luZG93czsKICAgICBET01XaW5kb3dTZXQ6Oml0ZXJhdG9yIGVu
ZCA9IHNldC5lbmQoKTsKICAgICBmb3IgKERPTVdpbmRvd1NldDo6aXRlcmF0b3IgaXQgPSBzZXQu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICB3aW5kb3dzLmFwcGVuZChpdC0+Zmly
c3QpOworICAgICAgICB3aW5kb3dzLmFwcGVuZChpdC0+a2V5KTsKIAogICAgIHNpemVfdCBzaXpl
ID0gd2luZG93cy5zaXplKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kp
IHsKQEAgLTI4Nyw3ICsyODcsNyBAQCB2b2lkIERPTVdpbmRvdzo6ZGlzcGF0Y2hBbGxQZW5kaW5n
VW5sb2FkRXZlbnRzKCkKICAgICBWZWN0b3I8UmVmUHRyPERPTVdpbmRvdz4gPiB3aW5kb3dzOwog
ICAgIERPTVdpbmRvd1NldDo6aXRlcmF0b3IgZW5kID0gc2V0LmVuZCgpOwogICAgIGZvciAoRE9N
V2luZG93U2V0OjppdGVyYXRvciBpdCA9IHNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0g
ICAgICAgIHdpbmRvd3MuYXBwZW5kKGl0LT5maXJzdCk7CisgICAgICAgIHdpbmRvd3MuYXBwZW5k
KGl0LT5rZXkpOwogCiAgICAgc2l6ZV90IHNpemUgPSB3aW5kb3dzLnNpemUoKTsKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRs
ZXIuY3BwCmluZGV4IDE2ODNjM2RiZDIyZWYyNzg3YWNlNTMzMzJiNjIxZGU4Mjg4ZDNlZjUuLjA1
NDA3MGFiNjMwOWJlYThmZWUxMjA0N2MzM2MzZmM4NGMzMzlmMTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0V2ZW50SGFuZGxlci5jcHAKQEAgLTM1MzIsNyArMzUzMiw3IEBAIGJvb2wgRXZlbnRIYW5kbGVy
OjpoYW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYgZXZlbnQpCiAgICAg
ICAgIC8vIHJlbGVhc2VkIG9yIGNhbmNlbGxlZCBpdCB3aWxsIG9ubHkgYXBwZWFyIGluIHRoZSBj
aGFuZ2VkVG91Y2hlcyBsaXN0LgogICAgICAgICBpZiAocG9pbnRTdGF0ZSAhPSBQbGF0Zm9ybVRv
dWNoUG9pbnQ6OlRvdWNoUmVsZWFzZWQgJiYgcG9pbnRTdGF0ZSAhPSBQbGF0Zm9ybVRvdWNoUG9p
bnQ6OlRvdWNoQ2FuY2VsbGVkKSB7CiAgICAgICAgICAgICB0b3VjaGVzLT5hcHBlbmQodG91Y2gp
OwotICAgICAgICAgICAgdGFyZ2V0VG91Y2hlc0l0ZXJhdG9yLT5zZWNvbmQtPmFwcGVuZCh0b3Vj
aCk7CisgICAgICAgICAgICB0YXJnZXRUb3VjaGVzSXRlcmF0b3ItPnZhbHVlLT5hcHBlbmQodG91
Y2gpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gTm93IGJ1aWxkIHVwIHRoZSBjb3JyZWN0IGxp
c3QgZm9yIGNoYW5nZWRUb3VjaGVzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9G
cmFtZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAppbmRleCBkNWMxNzZkMjFl
MmI2MTZhNTAxZWUxNDQ5ZGIyZTA1NmIyYjhkYTg1Li5kZTJlOTQxOWJhZjBlOTc0ZjE5ZDU2ZjNi
NGYzZWQ3YjM1ZjYyOGYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcApAQCAtNTY3LDcgKzU2Nyw3IEBA
IHZvaWQgRnJhbWU6OmluamVjdFVzZXJTY3JpcHRzKFVzZXJTY3JpcHRJbmplY3Rpb25UaW1lIGlu
amVjdGlvblRpbWUpCiAgICAgICAgIHJldHVybjsKICAgICBVc2VyU2NyaXB0TWFwOjpjb25zdF9p
dGVyYXRvciBlbmQgPSB1c2VyU2NyaXB0cy0+ZW5kKCk7CiAgICAgZm9yIChVc2VyU2NyaXB0TWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IHVzZXJTY3JpcHRzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpCi0gICAgICAgIGluamVjdFVzZXJTY3JpcHRzRm9yV29ybGQoaXQtPmZpcnN0LmdldCgpLCAq
aXQtPnNlY29uZCwgaW5qZWN0aW9uVGltZSk7CisgICAgICAgIGluamVjdFVzZXJTY3JpcHRzRm9y
V29ybGQoaXQtPmtleS5nZXQoKSwgKml0LT52YWx1ZSwgaW5qZWN0aW9uVGltZSk7CiB9CiAKIHZv
aWQgRnJhbWU6OmluamVjdFVzZXJTY3JpcHRzRm9yV29ybGQoRE9NV3JhcHBlcldvcmxkKiB3b3Js
ZCwgY29uc3QgVXNlclNjcmlwdFZlY3RvciYgdXNlclNjcmlwdHMsIFVzZXJTY3JpcHRJbmplY3Rp
b25UaW1lIGluamVjdGlvblRpbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Bh
Z2VHcm91cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5jcHAKaW5kZXggZjkz
OWM5YmZkMmEzNzYxOWY2NTc3YmY3ZDI1ZmRmMTcyYjNhMDczNy4uNjg5NjBkMTk5MTU1ZGU3NDI5
ZTgwNDUyYmRjZWJhNWI3MzhkMTMwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9Q
YWdlR3JvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmNwcApAQCAt
OTMsMTIgKzkzLDEyIEBAIFBhZ2VHcm91cCogUGFnZUdyb3VwOjpwYWdlR3JvdXAoY29uc3QgU3Ry
aW5nJiBncm91cE5hbWUpCiAgICAgUGFnZUdyb3VwTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gcGFn
ZUdyb3Vwcy0+YWRkKGdyb3VwTmFtZSwgMCk7CiAKICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkp
IHsKLSAgICAgICAgQVNTRVJUKCFyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7Ci0gICAgICAgIHJl
c3VsdC5pdGVyYXRvci0+c2Vjb25kID0gbmV3IFBhZ2VHcm91cChncm91cE5hbWUpOworICAgICAg
ICBBU1NFUlQoIXJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOworICAgICAgICByZXN1bHQuaXRlcmF0
b3ItPnZhbHVlID0gbmV3IFBhZ2VHcm91cChncm91cE5hbWUpOwogICAgIH0KIAotICAgIEFTU0VS
VChyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7Ci0gICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+
c2Vjb25kOworICAgIEFTU0VSVChyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKKyAgICByZXR1cm4g
cmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIAogdm9pZCBQYWdlR3JvdXA6OmNsb3NlTG9jYWxT
dG9yYWdlKCkKQEAgLTEwOSw4ICsxMDksOCBAQCB2b2lkIFBhZ2VHcm91cDo6Y2xvc2VMb2NhbFN0
b3JhZ2UoKQogICAgIFBhZ2VHcm91cE1hcDo6aXRlcmF0b3IgZW5kID0gcGFnZUdyb3Vwcy0+ZW5k
KCk7CiAKICAgICBmb3IgKFBhZ2VHcm91cE1hcDo6aXRlcmF0b3IgaXQgPSBwYWdlR3JvdXBzLT5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQtPmhhc0xv
Y2FsU3RvcmFnZSgpKQotICAgICAgICAgICAgaXQtPnNlY29uZC0+bG9jYWxTdG9yYWdlKCktPmNs
b3NlKCk7CisgICAgICAgIGlmIChpdC0+dmFsdWUtPmhhc0xvY2FsU3RvcmFnZSgpKQorICAgICAg
ICAgICAgaXQtPnZhbHVlLT5sb2NhbFN0b3JhZ2UoKS0+Y2xvc2UoKTsKICAgICB9CiB9CiAKQEAg
LTEyMSw4ICsxMjEsOCBAQCB2b2lkIFBhZ2VHcm91cDo6Y2xlYXJMb2NhbFN0b3JhZ2VGb3JBbGxP
cmlnaW5zKCkKIAogICAgIFBhZ2VHcm91cE1hcDo6aXRlcmF0b3IgZW5kID0gcGFnZUdyb3Vwcy0+
ZW5kKCk7CiAgICAgZm9yIChQYWdlR3JvdXBNYXA6Oml0ZXJhdG9yIGl0ID0gcGFnZUdyb3Vwcy0+
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kLT5oYXNM
b2NhbFN0b3JhZ2UoKSkKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPmxvY2FsU3RvcmFnZSgpLT5j
bGVhckFsbE9yaWdpbnNGb3JEZWxldGlvbigpOworICAgICAgICBpZiAoaXQtPnZhbHVlLT5oYXNM
b2NhbFN0b3JhZ2UoKSkKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+bG9jYWxTdG9yYWdlKCktPmNs
ZWFyQWxsT3JpZ2luc0ZvckRlbGV0aW9uKCk7CiAgICAgfQogfQogCkBAIC0xMzMsOCArMTMzLDgg
QEAgdm9pZCBQYWdlR3JvdXA6OmNsZWFyTG9jYWxTdG9yYWdlRm9yT3JpZ2luKFNlY3VyaXR5T3Jp
Z2luKiBvcmlnaW4pCiAKICAgICBQYWdlR3JvdXBNYXA6Oml0ZXJhdG9yIGVuZCA9IHBhZ2VHcm91
cHMtPmVuZCgpOwogICAgIGZvciAoUGFnZUdyb3VwTWFwOjppdGVyYXRvciBpdCA9IHBhZ2VHcm91
cHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnNlY29uZC0+
aGFzTG9jYWxTdG9yYWdlKCkpCi0gICAgICAgICAgICBpdC0+c2Vjb25kLT5sb2NhbFN0b3JhZ2Uo
KS0+Y2xlYXJPcmlnaW5Gb3JEZWxldGlvbihvcmlnaW4pOworICAgICAgICBpZiAoaXQtPnZhbHVl
LT5oYXNMb2NhbFN0b3JhZ2UoKSkKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+bG9jYWxTdG9yYWdl
KCktPmNsZWFyT3JpZ2luRm9yRGVsZXRpb24ob3JpZ2luKTsKICAgICB9ICAgIAogfQogICAgIApA
QCAtMTQ1LDggKzE0NSw4IEBAIHZvaWQgUGFnZUdyb3VwOjpzeW5jTG9jYWxTdG9yYWdlKCkKIAog
ICAgIFBhZ2VHcm91cE1hcDo6aXRlcmF0b3IgZW5kID0gcGFnZUdyb3Vwcy0+ZW5kKCk7CiAgICAg
Zm9yIChQYWdlR3JvdXBNYXA6Oml0ZXJhdG9yIGl0ID0gcGFnZUdyb3Vwcy0+YmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kLT5oYXNMb2NhbFN0b3JhZ2Uo
KSkKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPmxvY2FsU3RvcmFnZSgpLT5zeW5jKCk7CisgICAg
ICAgIGlmIChpdC0+dmFsdWUtPmhhc0xvY2FsU3RvcmFnZSgpKQorICAgICAgICAgICAgaXQtPnZh
bHVlLT5sb2NhbFN0b3JhZ2UoKS0+c3luYygpOwogICAgIH0KIH0KIApAQCAtMjY5LDcgKzI2OSw3
IEBAIHZvaWQgUGFnZUdyb3VwOjphZGRVc2VyU2NyaXB0VG9Xb3JsZChET01XcmFwcGVyV29ybGQq
IHdvcmxkLCBjb25zdCBTdHJpbmcmIHNvdXJjCiAgICAgT3duUHRyPFVzZXJTY3JpcHQ+IHVzZXJT
Y3JpcHQgPSBhZG9wdFB0cihuZXcgVXNlclNjcmlwdChzb3VyY2UsIHVybCwgd2hpdGVsaXN0LCBi
bGFja2xpc3QsIGluamVjdGlvblRpbWUsIGluamVjdGVkRnJhbWVzKSk7CiAgICAgaWYgKCFtX3Vz
ZXJTY3JpcHRzKQogICAgICAgICBtX3VzZXJTY3JpcHRzID0gYWRvcHRQdHIobmV3IFVzZXJTY3Jp
cHRNYXApOwotICAgIE93blB0cjxVc2VyU2NyaXB0VmVjdG9yPiYgc2NyaXB0c0luV29ybGQgPSBt
X3VzZXJTY3JpcHRzLT5hZGQod29ybGQsIG51bGxwdHIpLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAg
T3duUHRyPFVzZXJTY3JpcHRWZWN0b3I+JiBzY3JpcHRzSW5Xb3JsZCA9IG1fdXNlclNjcmlwdHMt
PmFkZCh3b3JsZCwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghc2NyaXB0c0lu
V29ybGQpCiAgICAgICAgIHNjcmlwdHNJbldvcmxkID0gYWRvcHRQdHIobmV3IFVzZXJTY3JpcHRW
ZWN0b3IpOwogICAgIHNjcmlwdHNJbldvcmxkLT5hcHBlbmQodXNlclNjcmlwdC5yZWxlYXNlKCkp
OwpAQCAtMjg2LDcgKzI4Niw3IEBAIHZvaWQgUGFnZUdyb3VwOjphZGRVc2VyU3R5bGVTaGVldFRv
V29ybGQoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCwgY29uc3QgU3RyaW5nJiBzCiAgICAgT3duUHRy
PFVzZXJTdHlsZVNoZWV0PiB1c2VyU3R5bGVTaGVldCA9IGFkb3B0UHRyKG5ldyBVc2VyU3R5bGVT
aGVldChzb3VyY2UsIHVybCwgd2hpdGVsaXN0LCBibGFja2xpc3QsIGluamVjdGVkRnJhbWVzLCBs
ZXZlbCkpOwogICAgIGlmICghbV91c2VyU3R5bGVTaGVldHMpCiAgICAgICAgIG1fdXNlclN0eWxl
U2hlZXRzID0gYWRvcHRQdHIobmV3IFVzZXJTdHlsZVNoZWV0TWFwKTsKLSAgICBPd25QdHI8VXNl
clN0eWxlU2hlZXRWZWN0b3I+JiBzdHlsZVNoZWV0c0luV29ybGQgPSBtX3VzZXJTdHlsZVNoZWV0
cy0+YWRkKHdvcmxkLCBudWxscHRyKS5pdGVyYXRvci0+c2Vjb25kOworICAgIE93blB0cjxVc2Vy
U3R5bGVTaGVldFZlY3Rvcj4mIHN0eWxlU2hlZXRzSW5Xb3JsZCA9IG1fdXNlclN0eWxlU2hlZXRz
LT5hZGQod29ybGQsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoIXN0eWxlU2hl
ZXRzSW5Xb3JsZCkKICAgICAgICAgc3R5bGVTaGVldHNJbldvcmxkID0gYWRvcHRQdHIobmV3IFVz
ZXJTdHlsZVNoZWV0VmVjdG9yKTsKICAgICBzdHlsZVNoZWV0c0luV29ybGQtPmFwcGVuZCh1c2Vy
U3R5bGVTaGVldC5yZWxlYXNlKCkpOwpAQCAtMzA2LDcgKzMwNiw3IEBAIHZvaWQgUGFnZUdyb3Vw
OjpyZW1vdmVVc2VyU2NyaXB0RnJvbVdvcmxkKERPTVdyYXBwZXJXb3JsZCogd29ybGQsIGNvbnN0
IEtVUkwmIHVyCiAgICAgaWYgKGl0ID09IG1fdXNlclNjcmlwdHMtPmVuZCgpKQogICAgICAgICBy
ZXR1cm47CiAgICAgCi0gICAgVXNlclNjcmlwdFZlY3Rvciogc2NyaXB0cyA9IGl0LT5zZWNvbmQu
Z2V0KCk7CisgICAgVXNlclNjcmlwdFZlY3Rvciogc2NyaXB0cyA9IGl0LT52YWx1ZS5nZXQoKTsK
ICAgICBmb3IgKGludCBpID0gc2NyaXB0cy0+c2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKICAg
ICAgICAgaWYgKHNjcmlwdHMtPmF0KGkpLT51cmwoKSA9PSB1cmwpCiAgICAgICAgICAgICBzY3Jp
cHRzLT5yZW1vdmUoaSk7CkBAIC0zMjgsNyArMzI4LDcgQEAgdm9pZCBQYWdlR3JvdXA6OnJlbW92
ZVVzZXJTdHlsZVNoZWV0RnJvbVdvcmxkKERPTVdyYXBwZXJXb3JsZCogd29ybGQsIGNvbnN0IEtV
UkwKICAgICBpZiAoaXQgPT0gbV91c2VyU3R5bGVTaGVldHMtPmVuZCgpKQogICAgICAgICByZXR1
cm47CiAgICAgCi0gICAgVXNlclN0eWxlU2hlZXRWZWN0b3IqIHN0eWxlc2hlZXRzID0gaXQtPnNl
Y29uZC5nZXQoKTsKKyAgICBVc2VyU3R5bGVTaGVldFZlY3Rvciogc3R5bGVzaGVldHMgPSBpdC0+
dmFsdWUuZ2V0KCk7CiAgICAgZm9yIChpbnQgaSA9IHN0eWxlc2hlZXRzLT5zaXplKCkgLSAxOyBp
ID49IDA7IC0taSkgewogICAgICAgICBpZiAoc3R5bGVzaGVldHMtPmF0KGkpLT51cmwoKSA9PSB1
cmwpIHsKICAgICAgICAgICAgIHN0eWxlc2hlZXRzLT5yZW1vdmUoaSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvUGFnZVNlcmlhbGl6ZXIuY3BwCmluZGV4IDlkNTAyMTFjYzM4YWQ4NjRmMDE5YjhlYThiZjRl
YWUyMDUxZmIzYWEuLmU3YzE0YzdmZWMyODQzNzljZWZhN2RhZTg4MDljMzc3YmZmNDhiYmMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCkBAIC0zMzksNyArMzM5LDcgQEAg
S1VSTCBQYWdlU2VyaWFsaXplcjo6dXJsRm9yQmxhbmtGcmFtZShGcmFtZSogZnJhbWUpCiB7CiAg
ICAgSGFzaE1hcDxGcmFtZSosIEtVUkw+OjppdGVyYXRvciBpdGVyID0gbV9ibGFua0ZyYW1lVVJM
cy5maW5kKGZyYW1lKTsKICAgICBpZiAoaXRlciAhPSBtX2JsYW5rRnJhbWVVUkxzLmVuZCgpKQot
ICAgICAgICByZXR1cm4gaXRlci0+c2Vjb25kOworICAgICAgICByZXR1cm4gaXRlci0+dmFsdWU7
CiAgICAgU3RyaW5nIHVybCA9ICJ3eWNpd3lnOi8vZnJhbWUvIiArIFN0cmluZzo6bnVtYmVyKG1f
YmxhbmtGcmFtZUNvdW50ZXIrKyk7CiAgICAgS1VSTCBmYWtlVVJMKFBhcnNlZFVSTFN0cmluZywg
dXJsKTsKICAgICBtX2JsYW5rRnJhbWVVUkxzLmFkZChmcmFtZSwgZmFrZVVSTCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5UG9saWN5LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvU2VjdXJpdHlQb2xpY3kuY3BwCmluZGV4IGMyYTVhYjExNDM1ZWY2ZGIwNTc2OGM3
NmNhMDM1N2I1NjI1ODMzMTIuLjViMzZmNGY3MTZjNDRiZmIwOWYyMGU2MzJjYzBkMDM4NmYzY2Nh
M2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlQb2xpY3kuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlQb2xpY3kuY3BwCkBAIC0xMzMsOSArMTMz
LDkgQEAgdm9pZCBTZWN1cml0eVBvbGljeTo6YWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnko
Y29uc3QgU2VjdXJpdHlPcmlnaW4mIHNvdXJjZU8KICAgICBTdHJpbmcgc291cmNlU3RyaW5nID0g
c291cmNlT3JpZ2luLnRvU3RyaW5nKCk7CiAgICAgT3JpZ2luQWNjZXNzTWFwOjpBZGRSZXN1bHQg
cmVzdWx0ID0gb3JpZ2luQWNjZXNzTWFwKCkuYWRkKHNvdXJjZVN0cmluZywgbnVsbHB0cik7CiAg
ICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29u
ZCA9IGFkb3B0UHRyKG5ldyBPcmlnaW5BY2Nlc3NXaGl0ZUxpc3QpOworICAgICAgICByZXN1bHQu
aXRlcmF0b3ItPnZhbHVlID0gYWRvcHRQdHIobmV3IE9yaWdpbkFjY2Vzc1doaXRlTGlzdCk7CiAK
LSAgICBPcmlnaW5BY2Nlc3NXaGl0ZUxpc3QqIGxpc3QgPSByZXN1bHQuaXRlcmF0b3ItPnNlY29u
ZC5nZXQoKTsKKyAgICBPcmlnaW5BY2Nlc3NXaGl0ZUxpc3QqIGxpc3QgPSByZXN1bHQuaXRlcmF0
b3ItPnZhbHVlLmdldCgpOwogICAgIGxpc3QtPmFwcGVuZChPcmlnaW5BY2Nlc3NFbnRyeShkZXN0
aW5hdGlvblByb3RvY29sLCBkZXN0aW5hdGlvbkRvbWFpbiwgYWxsb3dEZXN0aW5hdGlvblN1YmRv
bWFpbnMgPyBPcmlnaW5BY2Nlc3NFbnRyeTo6QWxsb3dTdWJkb21haW5zIDogT3JpZ2luQWNjZXNz
RW50cnk6OkRpc2FsbG93U3ViZG9tYWlucykpOwogfQogCkBAIC0xNTIsNyArMTUyLDcgQEAgdm9p
ZCBTZWN1cml0eVBvbGljeTo6cmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoY29uc3Qg
U2VjdXJpdHlPcmlnaW4mIHNvdXIKICAgICBpZiAoaXQgPT0gbWFwLmVuZCgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBPcmlnaW5BY2Nlc3NXaGl0ZUxpc3QqIGxpc3QgPSBpdC0+c2Vjb25kLmdl
dCgpOworICAgIE9yaWdpbkFjY2Vzc1doaXRlTGlzdCogbGlzdCA9IGl0LT52YWx1ZS5nZXQoKTsK
ICAgICBzaXplX3QgaW5kZXggPSBsaXN0LT5maW5kKE9yaWdpbkFjY2Vzc0VudHJ5KGRlc3RpbmF0
aW9uUHJvdG9jb2wsIGRlc3RpbmF0aW9uRG9tYWluLCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlu
cyA/IE9yaWdpbkFjY2Vzc0VudHJ5OjpBbGxvd1N1YmRvbWFpbnMgOiBPcmlnaW5BY2Nlc3NFbnRy
eTo6RGlzYWxsb3dTdWJkb21haW5zKSk7CiAgICAgaWYgKGluZGV4ID09IG5vdEZvdW5kKQogICAg
ICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCmluZGV4IDYzNzIzMTg0OTMyNzY1
ZDc2ODkyNTFlZWE4ZDc2MDU3NmUzMjg3NWMuLjQxNzU5YzdjYjA4OTAwN2YwM2QxMzE1ZGQ2ZjRh
ZTQ4YmIwMDNiNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCkBAIC02MCw3ICs2MCw3IEBA
IHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRHZW5lcmljRm9udEZhbWlseU1hcChTY3JpcHRGb250RmFt
aWx5TWFwJiBmb250TWFwLCBjb25zdCBBCiAgICAgICAgIGlmIChpdCA9PSBmb250TWFwLmVuZCgp
KQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBmb250TWFwLnJlbW92ZShpdCk7Ci0gICAg
fSBlbHNlIGlmIChpdCAhPSBmb250TWFwLmVuZCgpICYmIGl0LT5zZWNvbmQgPT0gZmFtaWx5KQor
ICAgIH0gZWxzZSBpZiAoaXQgIT0gZm9udE1hcC5lbmQoKSAmJiBpdC0+dmFsdWUgPT0gZmFtaWx5
KQogICAgICAgICByZXR1cm47CiAgICAgZWxzZQogICAgICAgICBmb250TWFwLnNldChzdGF0aWNf
Y2FzdDxpbnQ+KHNjcmlwdCksIGZhbWlseSk7CkBAIC03MSw3ICs3MSw3IEBAIHN0YXRpYyBpbmxp
bmUgY29uc3QgQXRvbWljU3RyaW5nJiBnZXRHZW5lcmljRm9udEZhbWlseUZvclNjcmlwdChjb25z
dCBTY3JpcHRGb250CiB7CiAgICAgU2NyaXB0Rm9udEZhbWlseU1hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBmb250TWFwLmZpbmQoc3RhdGljX2Nhc3Q8aW50PihzY3JpcHQpKTsKICAgICBpZiAoaXQg
IT0gZm9udE1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgIHJl
dHVybiBpdC0+dmFsdWU7CiAgICAgaWYgKHNjcmlwdCAhPSBVU0NSSVBUX0NPTU1PTikKICAgICAg
ICAgcmV0dXJuIGdldEdlbmVyaWNGb250RmFtaWx5Rm9yU2NyaXB0KGZvbnRNYXAsIFVTQ1JJUFRf
Q09NTU9OKTsKICAgICByZXR1cm4gZW1wdHlBdG9tOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9TcGVlY2hJbnB1dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NwZWVjaElucHV0
LmNwcAppbmRleCAwMTI4ZWY4YTQwYTQyNDM1NGFiNWY4ZTUwYmE4ZWNjNjIyNTdiM2M5Li44MzI4
YzVkNGRmMzI5OTQyYjU5ZjNlY2MyMjUzNTY4Y2UyYThhMTFkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1NwZWVjaElucHV0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Nw
ZWVjaElucHV0LmNwcApAQCAtNjIsNyArNjIsNyBAQCBpbnQgU3BlZWNoSW5wdXQ6OnJlZ2lzdGVy
TGlzdGVuZXIoU3BlZWNoSW5wdXRMaXN0ZW5lciogbGlzdGVuZXIpCiAjaWYgZGVmaW5lZChERUJV
RykKICAgICAvLyBDaGVjayBpZiBhbHJlYWR5IHByZXNlbnQuCiAgICAgZm9yIChIYXNoTWFwPGlu
dCwgU3BlZWNoSW5wdXRMaXN0ZW5lcio+OjppdGVyYXRvciBpdCA9IG1fbGlzdGVuZXJzLmJlZ2lu
KCk7IGl0ICE9IG1fbGlzdGVuZXJzLmVuZCgpOyArK2l0KQotICAgICAgQVNTRVJUKGl0LT5zZWNv
bmQgIT0gbGlzdGVuZXIpOworICAgICAgQVNTRVJUKGl0LT52YWx1ZSAhPSBsaXN0ZW5lcik7CiAj
ZW5kaWYKIAogICAgIG1fbGlzdGVuZXJzLmFkZChtX25leHRMaXN0ZW5lcklkLCBsaXN0ZW5lcik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1dpbmRvd0ZlYXR1cmVzLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvV2luZG93RmVhdHVyZXMuY3BwCmluZGV4IDc1NjQxNTI4ZGZlYzJm
NGJlYzdlZWEzM2QwNzQwYTBkYzdkN2JhYzQuLjFiNmIxZDBiMTYzMmU4MmE5NGVmMDQ2NzlkMGE3
ZDQ3YWQzMWNiNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvV2luZG93RmVhdHVy
ZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvV2luZG93RmVhdHVyZXMuY3BwCkBAIC0y
MTIsNyArMjEyLDcgQEAgYm9vbCBXaW5kb3dGZWF0dXJlczo6Ym9vbEZlYXR1cmUoY29uc3QgRGlh
bG9nRmVhdHVyZXNNYXAmIGZlYXR1cmVzLCBjb25zdCBjaGFyKgogICAgIERpYWxvZ0ZlYXR1cmVz
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGZlYXR1cmVzLmZpbmQoa2V5KTsKICAgICBpZiAoaXQg
PT0gZmVhdHVyZXMuZW5kKCkpCiAgICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7Ci0gICAgY29u
c3QgU3RyaW5nJiB2YWx1ZSA9IGl0LT5zZWNvbmQ7CisgICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9
IGl0LT52YWx1ZTsKICAgICByZXR1cm4gdmFsdWUuaXNOdWxsKCkgfHwgdmFsdWUgPT0gIjEiIHx8
IHZhbHVlID09ICJ5ZXMiIHx8IHZhbHVlID09ICJvbiI7CiB9CiAKQEAgLTIyNCw3ICsyMjQsNyBA
QCBmbG9hdCBXaW5kb3dGZWF0dXJlczo6ZmxvYXRGZWF0dXJlKGNvbnN0IERpYWxvZ0ZlYXR1cmVz
TWFwJiBmZWF0dXJlcywgY29uc3QgY2hhcgogICAgIC8vIEZJWE1FOiBUaGUgdG9Eb3VibGUgZnVu
Y3Rpb24gZG9lcyBub3Qgb2ZmZXIgYSB3YXkgdG8gdGVsbCAiMHEiIGZyb20gc3RyaW5nIHdpdGgg
bm8gZGlnaXRzIGluIGl0OiBCb3RoCiAgICAgLy8gcmV0dXJuIHRoZSBudW1iZXIgMCBhbmQgZmFs
c2UgZm9yIG9rLiBCdXQgIjBxIiBzaG91bGQgeWllbGQgdGhlIG1pbmltdW0gcmF0aGVyIHRoYW4g
dGhlIGRlZmF1bHQuCiAgICAgYm9vbCBvazsKLSAgICBkb3VibGUgcGFyc2VkTnVtYmVyID0gaXQt
PnNlY29uZC50b0RvdWJsZSgmb2spOworICAgIGRvdWJsZSBwYXJzZWROdW1iZXIgPSBpdC0+dmFs
dWUudG9Eb3VibGUoJm9rKTsKICAgICBpZiAoKHBhcnNlZE51bWJlciA9PSAwICYmICFvaykgfHwg
aXNuYW4ocGFyc2VkTnVtYmVyKSkKICAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTsKICAgICBp
ZiAocGFyc2VkTnVtYmVyIDwgbWluIHx8IG1heCA8PSBtaW4pCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCmluZGV4IDBmMjMz
MDFhMTUzMDhhZTliMmFjMzNmOWM2ZTNmZDM0MzI1NTRlZTEuLmUxOTQyN2Q0NjkyNTg1NzM0MGMy
NjcwYzQ2OTMwYjE5ZTMyOGIxNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5p
bWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
YW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCkBAIC05MSwxNCArOTEsMTQgQEAgZG91
YmxlIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjp1cGRhdGVBbmltYXRpb25zKFNldENoYW5n
ZWQgY2FsbFNldENoYW5nZWQvKgogCiAgICAgUmVuZGVyT2JqZWN0QW5pbWF0aW9uTWFwOjpjb25z
dF9pdGVyYXRvciBhbmltYXRpb25zRW5kID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmVuZCgpOwog
ICAgIGZvciAoUmVuZGVyT2JqZWN0QW5pbWF0aW9uTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1f
Y29tcG9zaXRlQW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBhbmltYXRpb25zRW5kOyArK2l0KSB7
Ci0gICAgICAgIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcEFuaW0gPSBpdC0+c2Vjb25kLmdldCgp
OworICAgICAgICBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBBbmltID0gaXQtPnZhbHVlLmdldCgp
OwogICAgICAgICBpZiAoIWNvbXBBbmltLT5zdXNwZW5kZWQoKSAmJiBjb21wQW5pbS0+aGFzQW5p
bWF0aW9ucygpKSB7CiAgICAgICAgICAgICBkb3VibGUgdCA9IGNvbXBBbmltLT50aW1lVG9OZXh0
U2VydmljZSgpOwogICAgICAgICAgICAgaWYgKHQgIT0gLTEgJiYgKHQgPCB0aW1lVG9OZXh0U2Vy
dmljZSB8fCB0aW1lVG9OZXh0U2VydmljZSA9PSAtMSkpCiAgICAgICAgICAgICAgICAgdGltZVRv
TmV4dFNlcnZpY2UgPSB0OwogICAgICAgICAgICAgaWYgKCF0aW1lVG9OZXh0U2VydmljZSkgewog
ICAgICAgICAgICAgICAgIGlmIChjYWxsU2V0Q2hhbmdlZCA9PSBDYWxsU2V0Q2hhbmdlZCkgewot
ICAgICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gaXQtPmZpcnN0LT5ub2RlKCk7CisgICAg
ICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBpdC0+a2V5LT5ub2RlKCk7CiAgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVCghbm9kZSB8fCAobm9kZS0+ZG9jdW1lbnQoKSAmJiAhbm9kZS0+ZG9j
dW1lbnQoKS0+aW5QYWdlQ2FjaGUoKSkpOwogICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRO
ZWVkc1N0eWxlUmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsKICAgICAgICAgICAgICAgICAg
ICAgY2FsbGVkU2V0Q2hhbmdlZCA9IHRydWU7CkBAIC0yODgsOSArMjg4LDkgQEAgdm9pZCBBbmlt
YXRpb25Db250cm9sbGVyUHJpdmF0ZTo6c3VzcGVuZEFuaW1hdGlvbnNGb3JEb2N1bWVudChEb2N1
bWVudCogZG9jdW1lbnQKICAgICAKICAgICBSZW5kZXJPYmplY3RBbmltYXRpb25NYXA6OmNvbnN0
X2l0ZXJhdG9yIGFuaW1hdGlvbnNFbmQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuZW5kKCk7CiAg
ICAgZm9yIChSZW5kZXJPYmplY3RBbmltYXRpb25NYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9j
b21wb3NpdGVBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGFuaW1hdGlvbnNFbmQ7ICsraXQpIHsK
LSAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGl0LT5maXJzdDsKKyAgICAgICAgUmVu
ZGVyT2JqZWN0KiByZW5kZXJlciA9IGl0LT5rZXk7CiAgICAgICAgIGlmIChyZW5kZXJlci0+ZG9j
dW1lbnQoKSA9PSBkb2N1bWVudCkgewotICAgICAgICAgICAgQ29tcG9zaXRlQW5pbWF0aW9uKiBj
b21wQW5pbSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBDb21wb3NpdGVBbmltYXRp
b24qIGNvbXBBbmltID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAgICAgY29tcEFuaW0tPnN1
c3BlbmRBbmltYXRpb25zKCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0zMDQsOSArMzA0LDkgQEAg
dm9pZCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6cmVzdW1lQW5pbWF0aW9uc0ZvckRvY3Vt
ZW50KERvY3VtZW50KiBkb2N1bWVudCkKICAgICAKICAgICBSZW5kZXJPYmplY3RBbmltYXRpb25N
YXA6OmNvbnN0X2l0ZXJhdG9yIGFuaW1hdGlvbnNFbmQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMu
ZW5kKCk7CiAgICAgZm9yIChSZW5kZXJPYmplY3RBbmltYXRpb25NYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGFuaW1hdGlvbnNFbmQ7
ICsraXQpIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGl0LT5maXJzdDsKKyAg
ICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGl0LT5rZXk7CiAgICAgICAgIGlmIChyZW5k
ZXJlci0+ZG9jdW1lbnQoKSA9PSBkb2N1bWVudCkgewotICAgICAgICAgICAgQ29tcG9zaXRlQW5p
bWF0aW9uKiBjb21wQW5pbSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBDb21wb3Np
dGVBbmltYXRpb24qIGNvbXBBbmltID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAgICAgY29t
cEFuaW0tPnJlc3VtZUFuaW1hdGlvbnMoKTsKICAgICAgICAgfQogICAgIH0KQEAgLTM5NSw4ICsz
OTUsOCBAQCB1bnNpZ25lZCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6bnVtYmVyT2ZBY3Rp
dmVBbmltYXRpb25zKERvY3VtZW50KiBkb2N1bWVudAogICAgIAogICAgIFJlbmRlck9iamVjdEFu
aW1hdGlvbk1hcDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fY29tcG9zaXRlQW5p
bWF0aW9ucy5lbmQoKTsKICAgICBmb3IgKFJlbmRlck9iamVjdEFuaW1hdGlvbk1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gYW5pbWF0
aW9uc0VuZDsgKytpdCkgewotICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gaXQtPmZp
cnN0OwotICAgICAgICBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBBbmltID0gaXQtPnNlY29uZC5n
ZXQoKTsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGl0LT5rZXk7CisgICAgICAg
IENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcEFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAg
IGlmIChyZW5kZXJlci0+ZG9jdW1lbnQoKSA9PSBkb2N1bWVudCkKICAgICAgICAgICAgIGNvdW50
ICs9IGNvbXBBbmltLT5udW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoKTsKICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmNwcApp
bmRleCAxMmY5Mzc5NDhkNzRmOTJmNjMxYTU0YTlmYzlmYjIxZWVhODFiZTY1Li40NmJjY2RmOWY3
Zjk2Yjc0YWM1YTQ1NzVmYTFmNWQyYWZjYTllOTEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHAKQEAgLTU3LDcgKzU3LDcg
QEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OmNsZWFyUmVuZGVyZXIoKQogICAgICAgICAvLyBh
biBhbmltYXRpb24gY2FsbGJhY2sgKHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjIwNTIpCiAgICAgICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0
X2l0ZXJhdG9yIHRyYW5zaXRpb25zRW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKICAgICAgICAg
Zm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJh
bnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gdHJhbnNpdGlvbnNFbmQ7ICsraXQpIHsKLSAgICAgICAg
ICAgIEltcGxpY2l0QW5pbWF0aW9uKiB0cmFuc2l0aW9uID0gaXQtPnNlY29uZC5nZXQoKTsKKyAg
ICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiB0cmFuc2l0aW9uID0gaXQtPnZhbHVlLmdldCgp
OwogICAgICAgICAgICAgYW5pbWF0aW9uQ29udHJvbGxlcigpLT5hbmltYXRpb25XaWxsQmVSZW1v
dmVkKHRyYW5zaXRpb24pOwogICAgICAgICAgICAgdHJhbnNpdGlvbi0+Y2xlYXIoKTsKICAgICAg
ICAgfQpAQCAtNjYsNyArNjYsNyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6Y2xlYXJSZW5k
ZXJlcigpCiAgICAgICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsK
ICAgICAgICAgQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9
IG1fa2V5ZnJhbWVBbmltYXRpb25zLmVuZCgpOwogICAgICAgICBmb3IgKEFuaW1hdGlvbk5hbWVN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQg
IT0gYW5pbWF0aW9uc0VuZDsgKytpdCkgewotICAgICAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24q
IGFuaW0gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24q
IGFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBhbmltYXRpb25Db250cm9sbGVy
KCktPmFuaW1hdGlvbldpbGxCZVJlbW92ZWQoYW5pbSk7CiAgICAgICAgICAgICBhbmltLT5jbGVh
cigpOwogICAgICAgICB9CkBAIC04Myw3ICs4Myw3IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9u
Ojp1cGRhdGVUcmFuc2l0aW9ucyhSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBSZW5kZXJTdHlsZSoK
ICAgICAvLyBpbiB0aGUgbmV4dCBsb29wIGFuZCB0aGVuIHRvc3MgdGhlIG9uZXMgdGhhdCBkaWRu
J3QgZ2V0IG1hcmtlZC4KICAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVy
YXRvciBlbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOwogICAgIGZvciAoQ1NTUHJvcGVydHlUcmFu
c2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+c2V0QWN0aXZlKGZhbHNlKTsKKyAg
ICAgICAgaXQtPnZhbHVlLT5zZXRBY3RpdmUoZmFsc2UpOwogICAgICAgICAKICAgICBSZWZQdHI8
UmVuZGVyU3R5bGU+IG1vZGlmaWVkQ3VycmVudFN0eWxlOwogICAgIApAQCAtMTc5LDcgKzE3OSw3
IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVUcmFuc2l0aW9ucyhSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyLCBSZW5kZXJTdHlsZSoKICAgICBWZWN0b3I8aW50PiB0b0JlUmVtb3ZlZDsK
ICAgICBlbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOwogICAgIGZvciAoQ1NTUHJvcGVydHlUcmFu
c2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgewotICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT5z
ZWNvbmQuZ2V0KCk7CisgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnZhbHVl
LmdldCgpOwogICAgICAgICBpZiAoIWFuaW0tPmFjdGl2ZSgpKSB7CiAgICAgICAgICAgICBhbmlt
YXRpb25Db250cm9sbGVyKCktPmFuaW1hdGlvbldpbGxCZVJlbW92ZWQoYW5pbSk7CiAgICAgICAg
ICAgICB0b0JlUmVtb3ZlZC5hcHBlbmQoYW5pbS0+YW5pbWF0aW5nUHJvcGVydHkoKSk7CkBAIC0y
MDUsMTMgKzIwNSwxMyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlS2V5ZnJhbWVB
bmltYXRpb25zKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIFJlbmRlcgogICAgICAgICAvLyBUaGUg
Y3VycmVudCBhbmQgdGFyZ2V0IGFuaW1hdGlvbnMgYXJlIHRoZSBzYW1lIHNvIHdlIGp1c3QgbmVl
ZCB0byB0b3NzIGFueSAKICAgICAgICAgLy8gYW5pbWF0aW9uIHdoaWNoIGlzIGZpbmlzaGVkIChw
b3N0QWN0aXZlKS4KICAgICAgICAgZm9yIChBbmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGtmZW5kOyArK2l0KSB7
Ci0gICAgICAgICAgICBpZiAoaXQtPnNlY29uZC0+cG9zdEFjdGl2ZSgpKQotICAgICAgICAgICAg
ICAgIGl0LT5zZWNvbmQtPnNldEluZGV4KC0xKTsKKyAgICAgICAgICAgIGlmIChpdC0+dmFsdWUt
PnBvc3RBY3RpdmUoKSkKKyAgICAgICAgICAgICAgICBpdC0+dmFsdWUtPnNldEluZGV4KC0xKTsK
ICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIE1hcmsgYWxsIGV4aXN0aW5nIGFu
aW1hdGlvbnMgYXMgbm8gbG9uZ2VyIGFjdGl2ZS4KICAgICAgICAgZm9yIChBbmltYXRpb25OYW1l
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmJlZ2luKCk7IGl0
ICE9IGtmZW5kOyArK2l0KQotICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0SW5kZXgoLTEpOwor
ICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRJbmRleCgtMSk7CiAgICAgICAgICAgICAKICAgICAg
ICAgLy8gVG9zcyB0aGUgYW5pbWF0aW9uIG9yZGVyIG1hcC4KICAgICAgICAgbV9rZXlmcmFtZUFu
aW1hdGlvbk9yZGVyTWFwLmNsZWFyKCk7CkBAIC0yNjAsNyArMjYwLDcgQEAgdm9pZCBDb21wb3Np
dGVBbmltYXRpb246OnVwZGF0ZUtleWZyYW1lQW5pbWF0aW9ucyhSZW5kZXJPYmplY3QqIHJlbmRl
cmVyLCBSZW5kZXIKICAgICBWZWN0b3I8QXRvbWljU3RyaW5nSW1wbCo+IGFuaW1zVG9CZVJlbW92
ZWQ7CiAgICAga2ZlbmQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5lbmQoKTsKICAgICBmb3IgKEFu
aW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMu
YmVnaW4oKTsgaXQgIT0ga2ZlbmQ7ICsraXQpIHsKLSAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24q
IGtleWZyYW1lQW5pbSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIEtleWZyYW1lQW5pbWF0
aW9uKiBrZXlmcmFtZUFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgIGlmIChrZXlmcmFt
ZUFuaW0tPmluZGV4KCkgPCAwKSB7CiAgICAgICAgICAgICBhbmltc1RvQmVSZW1vdmVkLmFwcGVu
ZChrZXlmcmFtZUFuaW0tPm5hbWUoKS5pbXBsKCkpOwogICAgICAgICAgICAgYW5pbWF0aW9uQ29u
dHJvbGxlcigpLT5hbmltYXRpb25XaWxsQmVSZW1vdmVkKGtleWZyYW1lQW5pbSk7CkBAIC0yODgs
NyArMjg4LDcgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gQ29tcG9zaXRlQW5pbWF0aW9uOjph
bmltYXRlKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIFJlbmQKICAgICAgICAgaWYgKCFtX3RyYW5z
aXRpb25zLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01h
cDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKICAgICAgICAgICAg
IGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Ry
YW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgICAgIGlm
IChJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT5zZWNvbmQuZ2V0KCkpCisgICAgICAgICAg
ICAgICAgaWYgKEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnZhbHVlLmdldCgpKQogICAg
ICAgICAgICAgICAgICAgICBhbmltLT5hbmltYXRlKHRoaXMsIHJlbmRlcmVyLCBjdXJyZW50U3R5
bGUsIHRhcmdldFN0eWxlLCByZXN1bHRTdHlsZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
QEAgLTMxMCw3ICszMTAsNyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBDb21wb3NpdGVBbmlt
YXRpb246OmdldEFuaW1hdGVkU3R5bGUoKSBjb25zdAogICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4g
cmVzdWx0U3R5bGU7CiAgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKICAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNp
dGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKEltcGxpY2l0QW5pbWF0aW9uKiBpbXBsaWNpdEFu
aW1hdGlvbiA9IGl0LT5zZWNvbmQuZ2V0KCkpCisgICAgICAgIGlmIChJbXBsaWNpdEFuaW1hdGlv
biogaW1wbGljaXRBbmltYXRpb24gPSBpdC0+dmFsdWUuZ2V0KCkpCiAgICAgICAgICAgICBpbXBs
aWNpdEFuaW1hdGlvbi0+Z2V0QW5pbWF0ZWRTdHlsZShyZXN1bHRTdHlsZSk7CiAgICAgfQogCkBA
IC0zMzEsNyArMzMxLDcgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnNldEFuaW1hdGluZyhi
b29sIGFuaW1hdGluZykKICAgICBpZiAoIW1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSB7CiAgICAg
ICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIHRyYW5zaXRpb25z
RW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKICAgICAgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5z
aXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQg
IT0gdHJhbnNpdGlvbnNFbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9u
KiB0cmFuc2l0aW9uID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgIEltcGxpY2l0QW5p
bWF0aW9uKiB0cmFuc2l0aW9uID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAgICAgdHJhbnNp
dGlvbi0+c2V0QW5pbWF0aW5nKGFuaW1hdGluZyk7CiAgICAgICAgIH0KICAgICB9CkBAIC0zMzks
NyArMzM5LDcgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnNldEFuaW1hdGluZyhib29sIGFu
aW1hdGluZykKICAgICAgICAgbV9rZXlmcmFtZUFuaW1hdGlvbnMuY2hlY2tDb25zaXN0ZW5jeSgp
OwogICAgICAgICBBbmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBhbmltYXRpb25zRW5k
ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuZW5kKCk7CiAgICAgICAgIGZvciAoQW5pbWF0aW9uTmFt
ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5iZWdpbigpOyBp
dCAhPSBhbmltYXRpb25zRW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBLZXlmcmFtZUFuaW1hdGlv
biogYW5pbSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBLZXlmcmFtZUFuaW1hdGlv
biogYW5pbSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGFuaW0tPnNldEFuaW1hdGlu
ZyhhbmltYXRpbmcpOwogICAgICAgICB9CiAgICAgfQpAQCAtMzU0LDcgKzM1NCw3IEBAIGRvdWJs
ZSBDb21wb3NpdGVBbmltYXRpb246OnRpbWVUb05leHRTZXJ2aWNlKCkgY29uc3QKICAgICBpZiAo
IW1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSB7CiAgICAgICAgIENTU1Byb3BlcnR5VHJhbnNpdGlv
bnNNYXA6OmNvbnN0X2l0ZXJhdG9yIHRyYW5zaXRpb25zRW5kID0gbV90cmFuc2l0aW9ucy5lbmQo
KTsKICAgICAgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gdHJhbnNpdGlvbnNFbmQ7ICsraXQp
IHsKLSAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiB0cmFuc2l0aW9uID0gaXQtPnNlY29u
ZC5nZXQoKTsKKyAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiB0cmFuc2l0aW9uID0gaXQt
PnZhbHVlLmdldCgpOwogICAgICAgICAgICAgZG91YmxlIHQgPSB0cmFuc2l0aW9uID8gdHJhbnNp
dGlvbi0+dGltZVRvTmV4dFNlcnZpY2UoKSA6IC0xOwogICAgICAgICAgICAgaWYgKHQgPCBtaW5U
IHx8IG1pblQgPT0gLTEpCiAgICAgICAgICAgICAgICAgbWluVCA9IHQ7CkBAIC0zNjYsNyArMzY2
LDcgQEAgZG91YmxlIENvbXBvc2l0ZUFuaW1hdGlvbjo6dGltZVRvTmV4dFNlcnZpY2UoKSBjb25z
dAogICAgICAgICBtX2tleWZyYW1lQW5pbWF0aW9ucy5jaGVja0NvbnNpc3RlbmN5KCk7CiAgICAg
ICAgIEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGFuaW1hdGlvbnNFbmQgPSBtX2tl
eWZyYW1lQW5pbWF0aW9ucy5lbmQoKTsKICAgICAgICAgZm9yIChBbmltYXRpb25OYW1lTWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGFu
aW1hdGlvbnNFbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIEtleWZyYW1lQW5pbWF0aW9uKiBhbmlt
YXRpb24gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24q
IGFuaW1hdGlvbiA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGRvdWJsZSB0ID0gYW5p
bWF0aW9uID8gYW5pbWF0aW9uLT50aW1lVG9OZXh0U2VydmljZSgpIDogLTE7CiAgICAgICAgICAg
ICBpZiAodCA8IG1pblQgfHwgbWluVCA9PSAtMSkKICAgICAgICAgICAgICAgICBtaW5UID0gdDsK
QEAgLTM4OCw3ICszODgsNyBAQCBQYXNzUmVmUHRyPEtleWZyYW1lQW5pbWF0aW9uPiBDb21wb3Np
dGVBbmltYXRpb246OmdldEFuaW1hdGlvbkZvclByb3BlcnR5KGludCBwcgogICAgICAgICBtX2tl
eWZyYW1lQW5pbWF0aW9ucy5jaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgICAgIEFuaW1hdGlvbk5h
bWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGFuaW1hdGlvbnNFbmQgPSBtX2tleWZyYW1lQW5pbWF0aW9u
cy5lbmQoKTsKICAgICAgICAgZm9yIChBbmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGFuaW1hdGlvbnNFbmQ7ICsr
aXQpIHsKLSAgICAgICAgICAgIFJlZlB0cjxLZXlmcmFtZUFuaW1hdGlvbj4gYW5pbSA9IGl0LT5z
ZWNvbmQ7CisgICAgICAgICAgICBSZWZQdHI8S2V5ZnJhbWVBbmltYXRpb24+IGFuaW0gPSBpdC0+
dmFsdWU7CiAgICAgICAgICAgICBpZiAoYW5pbS0+aGFzQW5pbWF0aW9uRm9yUHJvcGVydHkocHJv
cGVydHkpKQogICAgICAgICAgICAgICAgIHJldHZhbCA9IGFuaW07CiAgICAgICAgIH0KQEAgLTQw
OCwxNCArNDA4LDE0IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpzdXNwZW5kQW5pbWF0aW9u
cygpCiAgICAgICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsKICAg
ICAgICAgQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1f
a2V5ZnJhbWVBbmltYXRpb25zLmVuZCgpOwogICAgICAgICBmb3IgKEFuaW1hdGlvbk5hbWVNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0g
YW5pbWF0aW9uc0VuZDsgKytpdCkgewotICAgICAgICAgICAgaWYgKEtleWZyYW1lQW5pbWF0aW9u
KiBhbmltID0gaXQtPnNlY29uZC5nZXQoKSkKKyAgICAgICAgICAgIGlmIChLZXlmcmFtZUFuaW1h
dGlvbiogYW5pbSA9IGl0LT52YWx1ZS5nZXQoKSkKICAgICAgICAgICAgICAgICBhbmltLT51cGRh
dGVQbGF5U3RhdGUoQW5pbVBsYXlTdGF0ZVBhdXNlZCk7CiAgICAgICAgIH0KICAgICB9CiAgICAg
aWYgKCFtX3RyYW5zaXRpb25zLmlzRW1wdHkoKSkgewogICAgICAgICBDU1NQcm9wZXJ0eVRyYW5z
aXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciB0cmFuc2l0aW9uc0VuZCA9IG1fdHJhbnNpdGlvbnMu
ZW5kKCk7CiAgICAgICAgIGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IHRyYW5zaXRpb25zRW5kOyAr
K2l0KSB7Ci0gICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT5zZWNvbmQu
Z2V0KCk7CisgICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT52YWx1ZS5n
ZXQoKTsKICAgICAgICAgICAgIGlmIChhbmltICYmIGFuaW0tPmhhc1N0eWxlKCkpCiAgICAgICAg
ICAgICAgICAgYW5pbS0+dXBkYXRlUGxheVN0YXRlKEFuaW1QbGF5U3RhdGVQYXVzZWQpOwogICAg
ICAgICB9CkBAIC00MzMsNyArNDMzLDcgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnJlc3Vt
ZUFuaW1hdGlvbnMoKQogICAgICAgICBtX2tleWZyYW1lQW5pbWF0aW9ucy5jaGVja0NvbnNpc3Rl
bmN5KCk7CiAgICAgICAgIEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGFuaW1hdGlv
bnNFbmQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5lbmQoKTsKICAgICAgICAgZm9yIChBbmltYXRp
b25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmJlZ2lu
KCk7IGl0ICE9IGFuaW1hdGlvbnNFbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIEtleWZyYW1lQW5p
bWF0aW9uKiBhbmltID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgIEtleWZyYW1lQW5p
bWF0aW9uKiBhbmltID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAgICAgaWYgKGFuaW0gJiYg
YW5pbS0+cGxheVN0YXRlUGxheWluZygpKQogICAgICAgICAgICAgICAgIGFuaW0tPnVwZGF0ZVBs
YXlTdGF0ZShBbmltUGxheVN0YXRlUGxheWluZyk7CiAgICAgICAgIH0KQEAgLTQ0Miw3ICs0NDIs
NyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6cmVzdW1lQW5pbWF0aW9ucygpCiAgICAgaWYg
KCFtX3RyYW5zaXRpb25zLmlzRW1wdHkoKSkgewogICAgICAgICBDU1NQcm9wZXJ0eVRyYW5zaXRp
b25zTWFwOjpjb25zdF9pdGVyYXRvciB0cmFuc2l0aW9uc0VuZCA9IG1fdHJhbnNpdGlvbnMuZW5k
KCk7CiAgICAgICAgIGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IHRyYW5zaXRpb25zRW5kOyArK2l0
KSB7Ci0gICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT5zZWNvbmQuZ2V0
KCk7CisgICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT52YWx1ZS5nZXQo
KTsKICAgICAgICAgICAgIGlmIChhbmltICYmIGFuaW0tPmhhc1N0eWxlKCkpCiAgICAgICAgICAg
ICAgICAgYW5pbS0+dXBkYXRlUGxheVN0YXRlKEFuaW1QbGF5U3RhdGVQbGF5aW5nKTsKICAgICAg
ICAgfQpAQCAtNDU0LDcgKzQ1NCw3IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpvdmVycmlk
ZUltcGxpY2l0QW5pbWF0aW9ucyhpbnQgcHJvcGVydHkpCiAgICAgQ1NTUHJvcGVydHlUcmFuc2l0
aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKICAgICBp
ZiAoIW1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSB7CiAgICAgICAgIGZvciAoQ1NTUHJvcGVydHlU
cmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGFuaW0g
PSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGFuaW0g
PSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoYW5pbSAmJiBhbmltLT5hbmltYXRp
bmdQcm9wZXJ0eSgpID09IHByb3BlcnR5KQogICAgICAgICAgICAgICAgIGFuaW0tPnNldE92ZXJy
aWRkZW4odHJ1ZSk7CiAgICAgICAgIH0KQEAgLTQ2Niw3ICs0NjYsNyBAQCB2b2lkIENvbXBvc2l0
ZUFuaW1hdGlvbjo6cmVzdW1lT3ZlcnJpZGRlbkltcGxpY2l0QW5pbWF0aW9ucyhpbnQgcHJvcGVy
dHkpCiAgICAgaWYgKCFtX3RyYW5zaXRpb25zLmlzRW1wdHkoKSkgewogICAgICAgICBDU1NQcm9w
ZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3RyYW5zaXRpb25zLmVu
ZCgpOwogICAgICAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAg
ICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAg
ICAgICAgaWYgKGFuaW0gJiYgYW5pbS0+YW5pbWF0aW5nUHJvcGVydHkoKSA9PSBwcm9wZXJ0eSkK
ICAgICAgICAgICAgICAgICBhbmltLT5zZXRPdmVycmlkZGVuKGZhbHNlKTsKICAgICAgICAgfQpA
QCAtNDc5LDcgKzQ3OSw3IEBAIGJvb2wgQ29tcG9zaXRlQW5pbWF0aW9uOjppc0FuaW1hdGluZ1By
b3BlcnR5KGludCBwcm9wZXJ0eSwgYm9vbCBhY2NlbGVyYXRlZE9ubHksCiAgICAgICAgIG1fa2V5
ZnJhbWVBbmltYXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsKICAgICAgICAgQW5pbWF0aW9uTmFt
ZU1hcDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fa2V5ZnJhbWVBbmltYXRpb25z
LmVuZCgpOwogICAgICAgICBmb3IgKEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gYW5pbWF0aW9uc0VuZDsgKytp
dCkgewotICAgICAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kLmdl
dCgpOworICAgICAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24qIGFuaW0gPSBpdC0+dmFsdWUuZ2V0
KCk7CiAgICAgICAgICAgICBpZiAoYW5pbSAmJiBhbmltLT5pc0FuaW1hdGluZ1Byb3BlcnR5KHBy
b3BlcnR5LCBhY2NlbGVyYXRlZE9ubHksIGlzUnVubmluZ05vdykpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTQ4OCw3ICs0ODgsNyBAQCBib29sIENvbXBvc2l0
ZUFuaW1hdGlvbjo6aXNBbmltYXRpbmdQcm9wZXJ0eShpbnQgcHJvcGVydHksIGJvb2wgYWNjZWxl
cmF0ZWRPbmx5LAogICAgIGlmICghbV90cmFuc2l0aW9ucy5pc0VtcHR5KCkpIHsKICAgICAgICAg
Q1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgdHJhbnNpdGlvbnNFbmQg
PSBtX3RyYW5zaXRpb25zLmVuZCgpOwogICAgICAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlv
bnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSB0
cmFuc2l0aW9uc0VuZDsgKytpdCkgewotICAgICAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGFu
aW0gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGFu
aW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoYW5pbSAmJiBhbmltLT5pc0Fu
aW1hdGluZ1Byb3BlcnR5KHByb3BlcnR5LCBhY2NlbGVyYXRlZE9ubHksIGlzUnVubmluZ05vdykp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTU1NCw3ICs1NTQs
NyBAQCB1bnNpZ25lZCBDb21wb3NpdGVBbmltYXRpb246Om51bWJlck9mQWN0aXZlQW5pbWF0aW9u
cygpIGNvbnN0CiAgICAgICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zLmNoZWNrQ29uc2lzdGVuY3ko
KTsKICAgICAgICAgQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0Vu
ZCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmVuZCgpOwogICAgICAgICBmb3IgKEFuaW1hdGlvbk5h
bWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsg
aXQgIT0gYW5pbWF0aW9uc0VuZDsgKytpdCkgewotICAgICAgICAgICAgS2V5ZnJhbWVBbmltYXRp
b24qIGFuaW0gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgS2V5ZnJhbWVBbmltYXRp
b24qIGFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoYW5pbS0+cnVubmlu
ZygpKQogICAgICAgICAgICAgICAgICsrY291bnQ7CiAgICAgICAgIH0KQEAgLTU2Myw3ICs1NjMs
NyBAQCB1bnNpZ25lZCBDb21wb3NpdGVBbmltYXRpb246Om51bWJlck9mQWN0aXZlQW5pbWF0aW9u
cygpIGNvbnN0CiAgICAgaWYgKCFtX3RyYW5zaXRpb25zLmlzRW1wdHkoKSkgewogICAgICAgICBD
U1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciB0cmFuc2l0aW9uc0VuZCA9
IG1fdHJhbnNpdGlvbnMuZW5kKCk7CiAgICAgICAgIGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9u
c01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IHRy
YW5zaXRpb25zRW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5p
bSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5p
bSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGlmIChhbmltLT5ydW5uaW5nKCkpCiAg
ICAgICAgICAgICAgICAgKytjb3VudDsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vTGFuZ3VhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGFu
Z3VhZ2UuY3BwCmluZGV4IDQ3ZjA5ZjYwOTI5OTcxZTMxNzM1NmU0OWZiY2I2M2I1ZGI0MTdmMzcu
LmIzZjk3YmVjOTcyMTViODA5YjM0MWVhYzAxYTYxN2U4MWFhN2EwNmUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xhbmd1YWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9MYW5ndWFnZS5jcHAKQEAgLTUzLDcgKzUzLDcgQEAgdm9pZCBsYW5ndWFnZURpZENo
YW5nZSgpCiB7CiAgICAgT2JzZXJ2ZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IG9ic2VydmVyTWFwKCku
ZW5kKCk7CiAgICAgZm9yIChPYnNlcnZlck1hcDo6aXRlcmF0b3IgaXRlciA9IG9ic2VydmVyTWFw
KCkuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikKLSAgICAgICAgaXRlci0+c2Vjb25kKGl0
ZXItPmZpcnN0KTsKKyAgICAgICAgaXRlci0+dmFsdWUoaXRlci0+a2V5KTsKIH0KIAogU3RyaW5n
IGRlZmF1bHRMYW5ndWFnZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
dWRpby9IUlRGRWxldmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0hS
VEZFbGV2YXRpb24uY3BwCmluZGV4IGViMDdkNGVjOWY5MmI3NDI4NTAyMTgzMjUyYjEwMTk1Mjlm
MjE4YzMuLjA3ZTAwMTg1OGMxYjYyMjQxZTRiNzZhYjNjZmQ2NTBhNmRhNGFjM2MgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0hSVEZFbGV2YXRpb24uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0hSVEZFbGV2YXRpb24uY3BwCkBAIC03OSw3
ICs3OSw3IEBAIHN0YXRpYyBBdWRpb0J1cyogZ2V0Q29uY2F0ZW5hdGVkSW1wdWxzZVJlc3BvbnNl
c0ZvclN1YmplY3QoY29uc3QgU3RyaW5nJiBzdWJqZWN0CiAgICAgICAgIGJ1cyA9IGNvbmNhdGVu
YXRlZEltcHVsc2VSZXNwb25zZXMubGVha1B0cigpOwogICAgICAgICBhdWRpb0J1c01hcC5zZXQo
c3ViamVjdE5hbWUsIGJ1cyk7CiAgICAgfSBlbHNlCi0gICAgICAgIGJ1cyA9IGl0ZXJhdG9yLT5z
ZWNvbmQ7CisgICAgICAgIGJ1cyA9IGl0ZXJhdG9yLT52YWx1ZTsKIAogICAgIHNpemVfdCByZXNw
b25zZUxlbmd0aCA9IGJ1cy0+bGVuZ3RoKCk7CiAgICAgc2l6ZV90IGV4cGVjdGVkTGVuZ3RoID0g
c3RhdGljX2Nhc3Q8c2l6ZV90PihUb3RhbE51bWJlck9mUmVzcG9uc2VzICogUmVzcG9uc2VGcmFt
ZVNpemUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9D
b29raWVNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvQ29v
a2llTWFuYWdlci5jcHAKaW5kZXggZDllYmJmMzdkZjI0N2M5N2RiODczMjQwZWNiMDAyYmQxNGY2
MTA3Yi4uMTU4NjlhYWM1NWFkYzI4OGNjYjg3ZDczYjA3MjcwMmNlMTcwZjBhOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9Db29raWVNYW5hZ2VyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0Nvb2tpZU1hbmFnZXIuY3Bw
CkBAIC0yMjQsNyArMjI0LDcgQEAgU3RyaW5nIENvb2tpZU1hbmFnZXI6OmdlbmVyYXRlSHRtbEZy
YWdtZW50Rm9yQ29va2llcygpCiAKICAgICBWZWN0b3I8UGFyc2VkQ29va2llKj4gY29va2llQ2Fu
ZGlkYXRlczsKICAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBDb29raWVNYXAqPjo6aXRlcmF0b3Ig
aXQgPSBtX21hbmFnZXJNYXAuYmVnaW4oKTsgaXQgIT0gbV9tYW5hZ2VyTWFwLmVuZCgpOyArK2l0
KQotICAgICAgICBpdC0+c2Vjb25kLT5nZXRBbGxDaGlsZENvb2tpZXMoJmNvb2tpZUNhbmRpZGF0
ZXMpOworICAgICAgICBpdC0+dmFsdWUtPmdldEFsbENoaWxkQ29va2llcygmY29va2llQ2FuZGlk
YXRlcyk7CiAKICAgICBTdHJpbmcgcmVzdWx0OwogICAgIFBhcnNlZENvb2tpZSogY29va2llID0g
MDsKQEAgLTM0Myw3ICszNDMsNyBAQCB2b2lkIENvb2tpZU1hbmFnZXI6OnJlbW92ZUFsbENvb2tp
ZXMoQmFja2luZ1N0b3JlUmVtb3ZhbFBvbGljeSBiYWNraW5nU3RvcmVSZW1vdgogICAgIEhhc2hN
YXA8U3RyaW5nLCBDb29raWVNYXAqPjo6aXRlcmF0b3IgZmlyc3QgPSBtX21hbmFnZXJNYXAuYmVn
aW4oKTsKICAgICBIYXNoTWFwPFN0cmluZywgQ29va2llTWFwKj46Oml0ZXJhdG9yIGVuZCA9IG1f
bWFuYWdlck1hcC5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBDb29raWVNYXAqPjo6
aXRlcmF0b3IgaXQgPSBmaXJzdDsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25k
LT5kZWxldGVBbGxDb29raWVzQW5kRG9tYWlucygpOworICAgICAgICBpdC0+dmFsdWUtPmRlbGV0
ZUFsbENvb2tpZXNBbmREb21haW5zKCk7CiAKICAgICBpZiAoYmFja2luZ1N0b3JlUmVtb3ZhbCA9
PSBSZW1vdmVGcm9tQmFja2luZ1N0b3JlKQogICAgICAgICBtX2Nvb2tpZUJhY2tpbmdTdG9yZS0+
cmVtb3ZlQWxsKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2Jl
cnJ5L0Nvb2tpZU1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0Nv
b2tpZU1hcC5jcHAKaW5kZXggYjIxN2IyZTQ4NDUwZWQwZmQyNTRjM2QwY2FlNzU1M2YxZTExYWU0
MC4uMmIwMzgwZTc5YWI3ODI0ZjYyMmUxNDdlZjJhOTM2MTdiOWFhOGM3ZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9Db29raWVNYXAuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvQ29va2llTWFwLmNwcApAQCAtMTY2LDcg
KzE2Niw3IEBAIFBhcnNlZENvb2tpZSogQ29va2llTWFwOjpyZW1vdmVPbGRlc3RDb29raWUoKQog
ICAgICAgICBDb29raWVMb2coIkNvb2tpZU1hcCAtIGxvb2tpbmcgaW50byBzdWJkb21haW5zIik7
CiAKICAgICAgICAgZm9yIChIYXNoTWFwPFN0cmluZywgQ29va2llTWFwKj46Oml0ZXJhdG9yIGl0
ID0gbV9zdWJkb21haW5zLmJlZ2luKCk7IGl0ICE9IG1fc3ViZG9tYWlucy5lbmQoKTsgKytpdCkg
ewotICAgICAgICAgICAgb2xkZXN0Q29va2llID0gaXQtPnNlY29uZC0+cmVtb3ZlT2xkZXN0Q29v
a2llKCk7CisgICAgICAgICAgICBvbGRlc3RDb29raWUgPSBpdC0+dmFsdWUtPnJlbW92ZU9sZGVz
dENvb2tpZSgpOwogICAgICAgICAgICAgaWYgKG9sZGVzdENvb2tpZSkKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQpAQCAtMjA4LDcgKzIwOCw3IEBAIHZvaWQgQ29va2llTWFwOjpn
ZXRBbGxDaGlsZENvb2tpZXMoVmVjdG9yPFBhcnNlZENvb2tpZSo+KiBzdGFja09mQ29va2llcykK
ICAgICBDb29raWVMb2coIkNvb2tpZU1hcCAtIGdldEFsbENoaWxkQ29va2llcyBpbiBNYXAgLSAl
cyIsIGdldE5hbWUoKS51dGY4KCkuZGF0YSgpKTsKICAgICBnZXRBbGxDb29raWVzKHN0YWNrT2ZD
b29raWVzKTsKICAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBDb29raWVNYXAqPjo6aXRlcmF0b3Ig
aXQgPSBtX3N1YmRvbWFpbnMuYmVnaW4oKTsgaXQgIT0gbV9zdWJkb21haW5zLmVuZCgpOyArK2l0
KQotICAgICAgICBpdC0+c2Vjb25kLT5nZXRBbGxDaGlsZENvb2tpZXMoc3RhY2tPZkNvb2tpZXMp
OworICAgICAgICBpdC0+dmFsdWUtPmdldEFsbENoaWxkQ29va2llcyhzdGFja09mQ29va2llcyk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2NmL0JpbmFyeVByb3BlcnR5TGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jZi9CaW5hcnlQcm9wZXJ0eUxpc3QuY3BwCmluZGV4IDRiYzdjMmU2MDdlYWIzZTBiNDcz
NjBhNjIyNmUxYTI3YTUyMDhiMDkuLjQ4YTBmOTE3ZTkzZWY4OTIxNTZlZDQ3MTIxMjhkMDBmOWMw
Zjc5ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL0JpbmFyeVByb3Bl
cnR5TGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2YvQmluYXJ5UHJvcGVy
dHlMaXN0LmNwcApAQCAtMjI5LDcgKzIyOSw3IEBAIHZvaWQgQmluYXJ5UHJvcGVydHlMaXN0UGxh
bjo6d3JpdGVJbnRlZ2VyQXJyYXkoY29uc3QgaW50KiBpbnRlZ2Vycywgc2l6ZV90IHNpemUpCiAg
ICAgICAgIHJldHVybjsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKICAg
ICAgICAgd3JpdGVJbnRlZ2VyKGludGVnZXJzW2ldKTsKLSAgICBhZGRSZXN1bHQuaXRlcmF0b3It
PnNlY29uZCA9IG1fY3VycmVudE9iamVjdFJlZmVyZW5jZSsrOworICAgIGFkZFJlc3VsdC5pdGVy
YXRvci0+dmFsdWUgPSBtX2N1cnJlbnRPYmplY3RSZWZlcmVuY2UrKzsKICAgICB3cml0ZUFycmF5
T2JqZWN0KHNpemUpOwogICAgIG1fY3VycmVudEFnZ3JlZ2F0ZVNpemUgPSBzYXZlZEFnZ3JlZ2F0
ZVNpemU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9z
dXBwb3J0L1dlYkhUVFBMb2FkSW5mby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9zdXBwb3J0L1dlYkhUVFBMb2FkSW5mby5jcHAKaW5kZXggZDdkNTdmMjEyMTA0ZmU5OTA3
NTY2MzI1MGQ0NDIzYjFlNjI2YjYyNy4uODAwZjZhYzI5M2M2ZDk5OWIxZGE4ZmQyNGZjZTdjNGYx
MjNmZWZkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3Vw
cG9ydC9XZWJIVFRQTG9hZEluZm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2No
cm9taXVtL3N1cHBvcnQvV2ViSFRUUExvYWRJbmZvLmNwcApAQCAtMTA1LDcgKzEwNSw3IEBAIHN0
YXRpYyB2b2lkIGFkZEhlYWRlcihIVFRQSGVhZGVyTWFwKiBtYXAsIGNvbnN0IFdlYlN0cmluZyYg
bmFtZSwgY29uc3QgV2ViU3RyaW5nCiB7CiAgICAgSFRUUEhlYWRlck1hcDo6QWRkUmVzdWx0IHJl
c3VsdCA9IG1hcC0+YWRkKG5hbWUsIHZhbHVlKTsKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5
KQotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCArPSAiLCAiICsgU3RyaW5nKHZhbHVl
KTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSArPSAiLCAiICsgU3RyaW5nKHZhbHVl
KTsKIH0KIAogdm9pZCBXZWJIVFRQTG9hZEluZm86OmFkZFJlcXVlc3RIZWFkZXIoY29uc3QgV2Vi
U3RyaW5nJiBuYW1lLCBjb25zdCBXZWJTdHJpbmcmIHZhbHVlKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJVUkxSZXF1ZXN0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVVJMUmVxdWVzdC5jcHAK
aW5kZXggZjQzN2I1MTY0M2IyMzRiNjA5Zjc3MjVmYjhkNzZkNzMxZjU2MTdlYS4uZTM4NTEwMTRm
Y2RkNDViZmFjYjQ4Yjk3YmJhNzZlMzFkOGI0YTAxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJVUkxSZXF1ZXN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlVSTFJlcXVlc3QuY3BwCkBA
IC0xOTUsNyArMTk1LDcgQEAgdm9pZCBXZWJVUkxSZXF1ZXN0Ojp2aXNpdEhUVFBIZWFkZXJGaWVs
ZHMoV2ViSFRUUEhlYWRlclZpc2l0b3IqIHZpc2l0b3IpIGNvbnN0CiB7CiAgICAgY29uc3QgSFRU
UEhlYWRlck1hcCYgbWFwID0gbV9wcml2YXRlLT5tX3Jlc291cmNlUmVxdWVzdC0+aHR0cEhlYWRl
ckZpZWxkcygpOwogICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
YXAuYmVnaW4oKTsgaXQgIT0gbWFwLmVuZCgpOyArK2l0KQotICAgICAgICB2aXNpdG9yLT52aXNp
dEhlYWRlcihpdC0+Zmlyc3QsIGl0LT5zZWNvbmQpOworICAgICAgICB2aXNpdG9yLT52aXNpdEhl
YWRlcihpdC0+a2V5LCBpdC0+dmFsdWUpOwogfQogCiBXZWJIVFRQQm9keSBXZWJVUkxSZXF1ZXN0
OjpodHRwQm9keSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
aHJvbWl1bS9zdXBwb3J0L1dlYlVSTFJlc3BvbnNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVVJMUmVzcG9uc2UuY3BwCmluZGV4IDA1NjU4MDUwZDg5
NDhlNDJjODhiMjg3NTc2ZmNmOThjMWJmODM5YmYuLjA2ZTk0M2JlYjQ3ZmFhNTAzZjJkOWVkMzlj
MmVkNjdhZDYwZjNmYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9t
aXVtL3N1cHBvcnQvV2ViVVJMUmVzcG9uc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVVJMUmVzcG9uc2UuY3BwCkBAIC0yNTEsNyArMjUxLDcg
QEAgdm9pZCBXZWJVUkxSZXNwb25zZTo6YWRkSFRUUEhlYWRlckZpZWxkKGNvbnN0IFdlYlN0cmlu
ZyYgbmFtZSwgY29uc3QgV2ViU3RyaW5nJgogICAgIEhUVFBIZWFkZXJNYXA6OkFkZFJlc3VsdCBy
ZXN1bHQgPQogICAgICAgICBjb25zdF9jYXN0PEhUVFBIZWFkZXJNYXAqPigmbWFwKS0+YWRkKG5h
bWUsIHZhbHVlU3RyKTsKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXN1
bHQuaXRlcmF0b3ItPnNlY29uZCArPSAiLCAiICsgdmFsdWVTdHI7CisgICAgICAgIHJlc3VsdC5p
dGVyYXRvci0+dmFsdWUgKz0gIiwgIiArIHZhbHVlU3RyOwogfQogCiB2b2lkIFdlYlVSTFJlc3Bv
bnNlOjpjbGVhckhUVFBIZWFkZXJGaWVsZChjb25zdCBXZWJTdHJpbmcmIG5hbWUpCkBAIC0yNjUs
NyArMjY1LDcgQEAgdm9pZCBXZWJVUkxSZXNwb25zZTo6dmlzaXRIVFRQSGVhZGVyRmllbGRzKFdl
YkhUVFBIZWFkZXJWaXNpdG9yKiB2aXNpdG9yKSBjb25zdAogewogICAgIGNvbnN0IEhUVFBIZWFk
ZXJNYXAmIG1hcCA9IG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlc3BvbnNlLT5odHRwSGVhZGVyRmll
bGRzKCk7CiAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC5i
ZWdpbigpOyBpdCAhPSBtYXAuZW5kKCk7ICsraXQpCi0gICAgICAgIHZpc2l0b3ItPnZpc2l0SGVh
ZGVyKGl0LT5maXJzdCwgaXQtPnNlY29uZCk7CisgICAgICAgIHZpc2l0b3ItPnZpc2l0SGVhZGVy
KGl0LT5rZXksIGl0LT52YWx1ZSk7CiB9CiAKIGRvdWJsZSBXZWJVUkxSZXNwb25zZTo6bGFzdE1v
ZGlmaWVkRGF0ZSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250Q2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udENhY2hlLmNwcAppbmRleCA0N2YyNTFjODQxNGExZTJkYjU5ZjAwNGE5MDQ0YWEwZjhjMmU5
ZDY1Li43YTRlOWM3ZmRiMzVmY2E3Njk0NTYyMTc0YmQ5YTdmNmMwZTc5OWY4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAKQEAgLTE5OSw3ICsx
OTksNyBAQCBGb250UGxhdGZvcm1EYXRhKiBGb250Q2FjaGU6OmdldENhY2hlZEZvbnRQbGF0Zm9y
bURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmbwogICAgICAgICBnRm9udFBsYXRmb3JtRGF0
YUNhY2hlLT5zZXQoa2V5LCByZXN1bHQpOwogICAgICAgICBmb3VuZFJlc3VsdCA9IHJlc3VsdDsK
ICAgICB9IGVsc2UgewotICAgICAgICByZXN1bHQgPSBpdC0+c2Vjb25kOworICAgICAgICByZXN1
bHQgPSBpdC0+dmFsdWU7CiAgICAgICAgIGZvdW5kUmVzdWx0ID0gdHJ1ZTsKICAgICB9CiAKQEAg
LTI5NCwyMCArMjk0LDIwIEBAIFNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldENhY2hlZEZv
bnREYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEqIHBsYXRmb3JtRGF0CiAgICAgICAgIHJldHVy
biBuZXdWYWx1ZS5maXJzdDsKICAgICB9CiAKLSAgICBpZiAoIXJlc3VsdC5nZXQoKS0+c2Vjb25k
LnNlY29uZCkgewotICAgICAgICBBU1NFUlQoZ0luYWN0aXZlRm9udERhdGEtPmNvbnRhaW5zKHJl
c3VsdC5nZXQoKS0+c2Vjb25kLmZpcnN0KSk7Ci0gICAgICAgIGdJbmFjdGl2ZUZvbnREYXRhLT5y
ZW1vdmUocmVzdWx0LmdldCgpLT5zZWNvbmQuZmlyc3QpOworICAgIGlmICghcmVzdWx0LmdldCgp
LT52YWx1ZS5zZWNvbmQpIHsKKyAgICAgICAgQVNTRVJUKGdJbmFjdGl2ZUZvbnREYXRhLT5jb250
YWlucyhyZXN1bHQuZ2V0KCktPnZhbHVlLmZpcnN0KSk7CisgICAgICAgIGdJbmFjdGl2ZUZvbnRE
YXRhLT5yZW1vdmUocmVzdWx0LmdldCgpLT52YWx1ZS5maXJzdCk7CiAgICAgfQogCiAgICAgaWYg
KHNob3VsZFJldGFpbiA9PSBSZXRhaW4pCi0gICAgICAgIHJlc3VsdC5nZXQoKS0+c2Vjb25kLnNl
Y29uZCsrOwotICAgIGVsc2UgaWYgKCFyZXN1bHQuZ2V0KCktPnNlY29uZC5zZWNvbmQpIHsKKyAg
ICAgICAgcmVzdWx0LmdldCgpLT52YWx1ZS5zZWNvbmQrKzsKKyAgICBlbHNlIGlmICghcmVzdWx0
LmdldCgpLT52YWx1ZS5zZWNvbmQpIHsKICAgICAgICAgLy8gSWYgc2hvdWxkUmV0YWluIGlzIERv
Tm90UmV0YWluIGFuZCBjb3VudCBpcyAwLCB3ZSB3YW50IHRvIHJlbW92ZSB0aGUgZm9udERhdGEg
ZnJvbSAKICAgICAgICAgLy8gZ0luYWN0aXZlRm9udERhdGEgKGFib3ZlKSBhbmQgcmUtYWRkIGhl
cmUgdG8gdXBkYXRlIExSVSBwb3NpdGlvbi4KLSAgICAgICAgZ0luYWN0aXZlRm9udERhdGEtPmFk
ZChyZXN1bHQuZ2V0KCktPnNlY29uZC5maXJzdCk7CisgICAgICAgIGdJbmFjdGl2ZUZvbnREYXRh
LT5hZGQocmVzdWx0LmdldCgpLT52YWx1ZS5maXJzdCk7CiAgICAgfQogCi0gICAgcmV0dXJuIHJl
c3VsdC5nZXQoKS0+c2Vjb25kLmZpcnN0OworICAgIHJldHVybiByZXN1bHQuZ2V0KCktPnZhbHVl
LmZpcnN0OwogfQogCiBTaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXROb25SZXRhaW5lZExh
c3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24pCkBAIC0zMjMsOCArMzIzLDggQEAgdm9pZCBGb250Q2FjaGU6OnJlbGVhc2VGb250RGF0YShj
b25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEpCiAgICAgRm9udERhdGFDYWNoZTo6aXRlcmF0
b3IgaXQgPSBnRm9udERhdGFDYWNoZS0+ZmluZChmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkpOwog
ICAgIEFTU0VSVChpdCAhPSBnRm9udERhdGFDYWNoZS0+ZW5kKCkpOwogCi0gICAgQVNTRVJUKGl0
LT5zZWNvbmQuc2Vjb25kKTsKLSAgICBpZiAoIS0taXQtPnNlY29uZC5zZWNvbmQpCisgICAgQVNT
RVJUKGl0LT52YWx1ZS5zZWNvbmQpOworICAgIGlmICghLS1pdC0+dmFsdWUuc2Vjb25kKQogICAg
ICAgICBnSW5hY3RpdmVGb250RGF0YS0+YWRkKGZvbnREYXRhKTsKIH0KIApAQCAtMzcyLDggKzM3
Miw4IEBAIHZvaWQgRm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGEoaW50IGNvdW50KQog
ICAgICAgICBrZXlzVG9SZW1vdmUucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShnRm9udFBsYXRmb3Jt
RGF0YUNhY2hlLT5zaXplKCkpOwogICAgICAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGU6Oml0ZXJh
dG9yIHBsYXRmb3JtRGF0YUVuZCA9IGdGb250UGxhdGZvcm1EYXRhQ2FjaGUtPmVuZCgpOwogICAg
ICAgICBmb3IgKEZvbnRQbGF0Zm9ybURhdGFDYWNoZTo6aXRlcmF0b3IgcGxhdGZvcm1EYXRhID0g
Z0ZvbnRQbGF0Zm9ybURhdGFDYWNoZS0+YmVnaW4oKTsgcGxhdGZvcm1EYXRhICE9IHBsYXRmb3Jt
RGF0YUVuZDsgKytwbGF0Zm9ybURhdGEpIHsKLSAgICAgICAgICAgIGlmIChwbGF0Zm9ybURhdGEt
PnNlY29uZCAmJiAhZ0ZvbnREYXRhQ2FjaGUtPmNvbnRhaW5zKCpwbGF0Zm9ybURhdGEtPnNlY29u
ZCkpCi0gICAgICAgICAgICAgICAga2V5c1RvUmVtb3ZlLmFwcGVuZChwbGF0Zm9ybURhdGEtPmZp
cnN0KTsKKyAgICAgICAgICAgIGlmIChwbGF0Zm9ybURhdGEtPnZhbHVlICYmICFnRm9udERhdGFD
YWNoZS0+Y29udGFpbnMoKnBsYXRmb3JtRGF0YS0+dmFsdWUpKQorICAgICAgICAgICAgICAgIGtl
eXNUb1JlbW92ZS5hcHBlbmQocGxhdGZvcm1EYXRhLT5rZXkpOwogICAgICAgICB9CiAgICAgICAg
IAogICAgICAgICBzaXplX3Qga2V5c1RvUmVtb3ZlQ291bnQgPSBrZXlzVG9SZW1vdmUuc2l6ZSgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdl
VHJlZU5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdl
VHJlZU5vZGUuY3BwCmluZGV4IDg3ZTkzZmQ5OGZmOGRlZjA5NDgxNmE1MjQzNGU5MDA1ZTg5OTk1
OWQuLjYzNWVjN2IyMjlhYjRjYTk5MThiNTVmZWRkN2ZhOTg3YjQxOTI2NTEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZVRyZWVOb2RlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2VUcmVlTm9kZS5j
cHAKQEAgLTc0LDcgKzc0LDcgQEAgc2l6ZV90IEdseXBoUGFnZVRyZWVOb2RlOjp0cmVlR2x5cGhQ
YWdlQ291bnQoKQogICAgIGlmIChyb290cykgewogICAgICAgICBIYXNoTWFwPGludCwgR2x5cGhQ
YWdlVHJlZU5vZGUqPjo6aXRlcmF0b3IgZW5kID0gcm9vdHMtPmVuZCgpOwogICAgICAgICBmb3Ig
KEhhc2hNYXA8aW50LCBHbHlwaFBhZ2VUcmVlTm9kZSo+OjppdGVyYXRvciBpdCA9IHJvb3RzLT5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBjb3VudCArPSBpdC0+c2Vjb25k
LT5wYWdlQ291bnQoKTsKKyAgICAgICAgICAgIGNvdW50ICs9IGl0LT52YWx1ZS0+cGFnZUNvdW50
KCk7CiAgICAgfQogICAgIAogICAgIGlmIChwYWdlWmVyb1Jvb3QpCkBAIC04OCw3ICs4OCw3IEBA
IHNpemVfdCBHbHlwaFBhZ2VUcmVlTm9kZTo6cGFnZUNvdW50KCkgY29uc3QKICAgICBzaXplX3Qg
Y291bnQgPSBtX3BhZ2UgJiYgbV9wYWdlLT5vd25lcigpID09IHRoaXMgPyAxIDogMDsKICAgICBI
YXNoTWFwPGNvbnN0IEZvbnREYXRhKiwgR2x5cGhQYWdlVHJlZU5vZGUqPjo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gbV9jaGlsZHJlbi5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8Y29uc3QgRm9udERh
dGEqLCBHbHlwaFBhZ2VUcmVlTm9kZSo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fY2hpbGRyZW4u
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBjb3VudCArPSBpdC0+c2Vjb25kLT5w
YWdlQ291bnQoKTsKKyAgICAgICAgY291bnQgKz0gaXQtPnZhbHVlLT5wYWdlQ291bnQoKTsKIAog
ICAgIHJldHVybiBjb3VudDsKIH0KQEAgLTk5LDcgKzk5LDcgQEAgdm9pZCBHbHlwaFBhZ2VUcmVl
Tm9kZTo6cHJ1bmVUcmVlQ3VzdG9tRm9udERhdGEoY29uc3QgRm9udERhdGEqIGZvbnREYXRhKQog
ICAgIGlmIChyb290cykgewogICAgICAgICBIYXNoTWFwPGludCwgR2x5cGhQYWdlVHJlZU5vZGUq
Pjo6aXRlcmF0b3IgZW5kID0gcm9vdHMtPmVuZCgpOwogICAgICAgICBmb3IgKEhhc2hNYXA8aW50
LCBHbHlwaFBhZ2VUcmVlTm9kZSo+OjppdGVyYXRvciBpdCA9IHJvb3RzLT5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBpdC0+c2Vjb25kLT5wcnVuZUN1c3RvbUZvbnREYXRh
KGZvbnREYXRhKTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+cHJ1bmVDdXN0b21Gb250RGF0YShm
b250RGF0YSk7CiAgICAgfQogICAgIAogICAgIGlmIChwYWdlWmVyb1Jvb3QpCkBAIC0xMTEsNyAr
MTExLDcgQEAgdm9pZCBHbHlwaFBhZ2VUcmVlTm9kZTo6cHJ1bmVUcmVlRm9udERhdGEoY29uc3Qg
U2ltcGxlRm9udERhdGEqIGZvbnREYXRhKQogICAgIGlmIChyb290cykgewogICAgICAgICBIYXNo
TWFwPGludCwgR2x5cGhQYWdlVHJlZU5vZGUqPjo6aXRlcmF0b3IgZW5kID0gcm9vdHMtPmVuZCgp
OwogICAgICAgICBmb3IgKEhhc2hNYXA8aW50LCBHbHlwaFBhZ2VUcmVlTm9kZSo+OjppdGVyYXRv
ciBpdCA9IHJvb3RzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBpdC0+
c2Vjb25kLT5wcnVuZUZvbnREYXRhKGZvbnREYXRhKTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+
cHJ1bmVGb250RGF0YShmb250RGF0YSk7CiAgICAgfQogICAgIAogICAgIGlmIChwYWdlWmVyb1Jv
b3QpCkBAIC0zNjIsNyArMzYyLDcgQEAgdm9pZCBHbHlwaFBhZ2VUcmVlTm9kZTo6cHJ1bmVDdXN0
b21Gb250RGF0YShjb25zdCBGb250RGF0YSogZm9udERhdGEpCiAgICAgICAgIHJldHVybjsKICAg
ICBIYXNoTWFwPGNvbnN0IEZvbnREYXRhKiwgR2x5cGhQYWdlVHJlZU5vZGUqPjo6aXRlcmF0b3Ig
ZW5kID0gbV9jaGlsZHJlbi5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8Y29uc3QgRm9udERhdGEq
LCBHbHlwaFBhZ2VUcmVlTm9kZSo+OjppdGVyYXRvciBpdCA9IG1fY2hpbGRyZW4uYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5wcnVuZUN1c3RvbUZvbnREYXRh
KGZvbnREYXRhKTsKKyAgICAgICAgaXQtPnZhbHVlLT5wcnVuZUN1c3RvbUZvbnREYXRhKGZvbnRE
YXRhKTsKIH0KIAogdm9pZCBHbHlwaFBhZ2VUcmVlTm9kZTo6cHJ1bmVGb250RGF0YShjb25zdCBT
aW1wbGVGb250RGF0YSogZm9udERhdGEsIHVuc2lnbmVkIGxldmVsKQpAQCAtMzc4LDcgKzM3OCw3
IEBAIHZvaWQgR2x5cGhQYWdlVHJlZU5vZGU6OnBydW5lRm9udERhdGEoY29uc3QgU2ltcGxlRm9u
dERhdGEqIGZvbnREYXRhLCB1bnNpZ25lZCBsCiAgICAgLy8gUHJ1bmUgYW55IGJyYW5jaCB0aGF0
IGNvbnRhaW5zIHRoaXMgRm9udERhdGEuCiAgICAgSGFzaE1hcDxjb25zdCBGb250RGF0YSosIEds
eXBoUGFnZVRyZWVOb2RlKj46Oml0ZXJhdG9yIGNoaWxkID0gbV9jaGlsZHJlbi5maW5kKGZvbnRE
YXRhKTsKICAgICBpZiAoY2hpbGQgIT0gbV9jaGlsZHJlbi5lbmQoKSkgewotICAgICAgICBHbHlw
aFBhZ2VUcmVlTm9kZSogbm9kZSA9IGNoaWxkLT5zZWNvbmQ7CisgICAgICAgIEdseXBoUGFnZVRy
ZWVOb2RlKiBub2RlID0gY2hpbGQtPnZhbHVlOwogICAgICAgICBtX2NoaWxkcmVuLnJlbW92ZShm
b250RGF0YSk7CiAgICAgICAgIHVuc2lnbmVkIGN1c3RvbUZvbnRDb3VudCA9IG5vZGUtPm1fY3Vz
dG9tRm9udENvdW50OwogICAgICAgICBkZWxldGUgbm9kZTsKQEAgLTM5NCw3ICszOTQsNyBAQCB2
b2lkIEdseXBoUGFnZVRyZWVOb2RlOjpwcnVuZUZvbnREYXRhKGNvbnN0IFNpbXBsZUZvbnREYXRh
KiBmb250RGF0YSwgdW5zaWduZWQgbAogCiAgICAgSGFzaE1hcDxjb25zdCBGb250RGF0YSosIEds
eXBoUGFnZVRyZWVOb2RlKj46Oml0ZXJhdG9yIGVuZCA9IG1fY2hpbGRyZW4uZW5kKCk7CiAgICAg
Zm9yIChIYXNoTWFwPGNvbnN0IEZvbnREYXRhKiwgR2x5cGhQYWdlVHJlZU5vZGUqPjo6aXRlcmF0
b3IgaXQgPSBtX2NoaWxkcmVuLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQt
PnNlY29uZC0+cHJ1bmVGb250RGF0YShmb250RGF0YSwgbGV2ZWwpOworICAgICAgICBpdC0+dmFs
dWUtPnBydW5lRm9udERhdGEoZm9udERhdGEsIGxldmVsKTsKIH0KIAogI2lmbmRlZiBOREVCVUcK
QEAgLTQwNiw4ICs0MDYsOCBAQCB2b2lkIEdseXBoUGFnZVRyZWVOb2RlOjpwcnVuZUZvbnREYXRh
KGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwgdW5zaWduZWQgbAogCiAgICAgICAgIEhh
c2hNYXA8Y29uc3QgRm9udERhdGEqLCBHbHlwaFBhZ2VUcmVlTm9kZSo+OjppdGVyYXRvciBlbmQg
PSBtX2NoaWxkcmVuLmVuZCgpOwogICAgICAgICBmb3IgKEhhc2hNYXA8Y29uc3QgRm9udERhdGEq
LCBHbHlwaFBhZ2VUcmVlTm9kZSo+OjppdGVyYXRvciBpdCA9IG1fY2hpbGRyZW4uYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBwcmludGYoIiVzXHQlcCAlc1xuIiwgaW5k
ZW50LmRhdGEoKSwgaXQtPmZpcnN0LCBpdC0+Zmlyc3QtPmRlc2NyaXB0aW9uKCkudXRmOCgpLmRh
dGEoKSk7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLT5zaG93U3VidHJlZSgpOworICAgICAgICAg
ICAgcHJpbnRmKCIlc1x0JXAgJXNcbiIsIGluZGVudC5kYXRhKCksIGl0LT5rZXksIGl0LT5rZXkt
PmRlc2NyaXB0aW9uKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBpdC0+dmFsdWUtPnNo
b3dTdWJ0cmVlKCk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKG1fc3lzdGVtRmFsbGJhY2tDaGls
ZCkgewogICAgICAgICAgICAgcHJpbnRmKCIlc1x0KiBmYWxsYmFja1xuIiwgaW5kZW50LmRhdGEo
KSk7CkBAIC00MjUsOCArNDI1LDggQEAgdm9pZCBzaG93R2x5cGhQYWdlVHJlZXMoKQogICAgIHNo
b3dHbHlwaFBhZ2VUcmVlKDApOwogICAgIEhhc2hNYXA8aW50LCBXZWJDb3JlOjpHbHlwaFBhZ2VU
cmVlTm9kZSo+OjppdGVyYXRvciBlbmQgPSBXZWJDb3JlOjpHbHlwaFBhZ2VUcmVlTm9kZTo6cm9v
dHMtPmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDxpbnQsIFdlYkNvcmU6OkdseXBoUGFnZVRyZWVO
b2RlKj46Oml0ZXJhdG9yIGl0ID0gV2ViQ29yZTo6R2x5cGhQYWdlVHJlZU5vZGU6OnJvb3RzLT5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgcHJpbnRmKCJcblBhZ2UgJWQ6XG4i
LCBpdC0+Zmlyc3QpOwotICAgICAgICBzaG93R2x5cGhQYWdlVHJlZShpdC0+Zmlyc3QpOworICAg
ICAgICBwcmludGYoIlxuUGFnZSAlZDpcbiIsIGl0LT5rZXkpOworICAgICAgICBzaG93R2x5cGhQ
YWdlVHJlZShpdC0+a2V5KTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlLmNwcAppbmRleCA1ODQzMmNlYWUz
ZGZhY2MxZGVjZjY2ZjMxNTkzZTkyNjg1ZjZkMzVmLi40NDU1ZGEzYjQ3MWQyZTFjMjQwODE0N2M2
OTYxMjI4MGEzMWIwY2M0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9UaWxlZEJhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmUuY3BwCkBAIC0xMTIsOSArMTEyLDkgQEAgdm9pZCBU
aWxlZEJhY2tpbmdTdG9yZTo6dXBkYXRlVGlsZUJ1ZmZlcnMoKQogICAgIFZlY3RvcjxSZWZQdHI8
VGlsZT4gPiBkaXJ0eVRpbGVzOwogICAgIFRpbGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fdGlsZXMu
ZW5kKCk7CiAgICAgZm9yIChUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmICghaXQtPnNlY29uZC0+aXNEaXJ0eSgpKQor
ICAgICAgICBpZiAoIWl0LT52YWx1ZS0+aXNEaXJ0eSgpKQogICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIGRpcnR5VGlsZXMuYXBwZW5kKGl0LT5zZWNvbmQpOworICAgICAgICBkaXJ0eVRp
bGVzLmFwcGVuZChpdC0+dmFsdWUpOwogICAgIH0KIAogICAgIGlmIChkaXJ0eVRpbGVzLmlzRW1w
dHkoKSkgewpAQCAtMzk3LDEzICszOTcsMTMgQEAgYm9vbCBUaWxlZEJhY2tpbmdTdG9yZTo6cmVz
aXplRWRnZVRpbGVzKCkKICAgICBWZWN0b3I8VGlsZTo6Q29vcmRpbmF0ZT4gdGlsZXNUb1JlbW92
ZTsKICAgICBUaWxlTWFwOjppdGVyYXRvciBlbmQgPSBtX3RpbGVzLmVuZCgpOwogICAgIGZvciAo
VGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewotICAgICAgICBUaWxlOjpDb29yZGluYXRlIHRpbGVDb29yZGluYXRlID0gaXQtPnNlY29uZC0+
Y29vcmRpbmF0ZSgpOwotICAgICAgICBJbnRSZWN0IHRpbGVSZWN0ID0gaXQtPnNlY29uZC0+cmVj
dCgpOworICAgICAgICBUaWxlOjpDb29yZGluYXRlIHRpbGVDb29yZGluYXRlID0gaXQtPnZhbHVl
LT5jb29yZGluYXRlKCk7CisgICAgICAgIEludFJlY3QgdGlsZVJlY3QgPSBpdC0+dmFsdWUtPnJl
Y3QoKTsKICAgICAgICAgSW50UmVjdCBleHBlY3RlZFRpbGVSZWN0ID0gdGlsZVJlY3RGb3JDb29y
ZGluYXRlKHRpbGVDb29yZGluYXRlKTsKICAgICAgICAgaWYgKGV4cGVjdGVkVGlsZVJlY3QuaXNF
bXB0eSgpKQogICAgICAgICAgICAgdGlsZXNUb1JlbW92ZS5hcHBlbmQodGlsZUNvb3JkaW5hdGUp
OwogICAgICAgICBlbHNlIGlmIChleHBlY3RlZFRpbGVSZWN0ICE9IHRpbGVSZWN0KSB7Ci0gICAg
ICAgICAgICBpdC0+c2Vjb25kLT5yZXNpemUoZXhwZWN0ZWRUaWxlUmVjdC5zaXplKCkpOworICAg
ICAgICAgICAgaXQtPnZhbHVlLT5yZXNpemUoZXhwZWN0ZWRUaWxlUmVjdC5zaXplKCkpOwogICAg
ICAgICAgICAgd2FzUmVzaXplZCA9IHRydWU7CiAgICAgICAgIH0KICAgICB9CkBAIC00MjIsOCAr
NDIyLDggQEAgdm9pZCBUaWxlZEJhY2tpbmdTdG9yZTo6c2V0S2VlcFJlY3QoY29uc3QgSW50UmVj
dCYga2VlcFJlY3QpCiAgICAgVmVjdG9yPFRpbGU6OkNvb3JkaW5hdGU+IHRvUmVtb3ZlOwogICAg
IFRpbGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fdGlsZXMuZW5kKCk7CiAgICAgZm9yIChUaWxlTWFw
OjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAg
ICAgIFRpbGU6OkNvb3JkaW5hdGUgY29vcmRpbmF0ZSA9IGl0LT5zZWNvbmQtPmNvb3JkaW5hdGUo
KTsKLSAgICAgICAgRmxvYXRSZWN0IHRpbGVSZWN0ID0gaXQtPnNlY29uZC0+cmVjdCgpOworICAg
ICAgICBUaWxlOjpDb29yZGluYXRlIGNvb3JkaW5hdGUgPSBpdC0+dmFsdWUtPmNvb3JkaW5hdGUo
KTsKKyAgICAgICAgRmxvYXRSZWN0IHRpbGVSZWN0ID0gaXQtPnZhbHVlLT5yZWN0KCk7CiAgICAg
ICAgIGlmICghdGlsZVJlY3QuaW50ZXJzZWN0cyhrZWVwUmVjdEYpKQogICAgICAgICAgICAgdG9S
ZW1vdmUuYXBwZW5kKGNvb3JkaW5hdGUpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9jZi9NZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb25DRi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZv
dW5kYXRpb24vY2YvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0YuY3BwCmluZGV4IDg3
NWQxMmRmYmU3YmI0MjIxYmU3NTUyNGY4MWFjZDIwN2NhM2E3ODAuLjAzNmQ4ZjMyNmMwYmY1YzJj
ODc1YTQ0YmIxNDA4MGE4NjRiZGY0MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9jZi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRp
b25DRi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0
aW9uL2NmL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGLmNwcApAQCAtOTEyLDcgKzkx
Miw3IEBAIEFWRldyYXBwZXIqIEFWRldyYXBwZXI6OmF2ZldyYXBwZXJGb3JDYWxsYmFja0NvbnRl
eHQodm9pZCogY29udGV4dCkKICAgICBpZiAoaXQgPT0gbWFwKCkuZW5kKCkpCiAgICAgICAgIHJl
dHVybiAwOwogCi0gICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgcmV0dXJuIGl0LT52YWx1ZTsK
IH0KIAogdm9pZCBBVkZXcmFwcGVyOjpzY2hlZHVsZURpc2Nvbm5lY3RBbmREZWxldGUoKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXll
clRpbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkv
TGF5ZXJUaWxlci5jcHAKaW5kZXggZDUxN2FhYTdiNDAyNDQ4OTMyZGQ0MmJmOWRhYjQwZDEwMmE4
ZDJjNC4uZjRjYmY0Nzc4Yjg5NzAzZmJmNjAxZTQwY2RlYjIyMTA4Njg3YTI0NyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclRpbGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xh
eWVyVGlsZXIuY3BwCkBAIC0zODAsMTkgKzM4MCwxOSBAQCB2b2lkIExheWVyVGlsZXI6OnVwbG9h
ZFRleHR1cmVzSWZOZWVkZWQoKQogICAgIGZvciAoVGlsZUpvYnNNYXA6OmNvbnN0X2l0ZXJhdG9y
IHRpbGVKb2JzSXRlciA9IHRpbGVKb2JzTWFwLmJlZ2luKCk7IHRpbGVKb2JzSXRlciAhPSB0aWxl
Sm9ic0l0ZXJFbmQ7ICsrdGlsZUpvYnNJdGVyKSB7CiAgICAgICAgIEludFBvaW50IG9yaWdpbiA9
IG9yaWdpbk9mVGlsZSh0aWxlSm9ic0l0ZXItPmZpcnN0KTsKIAotICAgICAgICBMYXllclRpbGUq
IHRpbGUgPSBtX3RpbGVzQ29tcG9zaXRpbmdUaHJlYWQuZ2V0KHRpbGVKb2JzSXRlci0+Zmlyc3Qp
OworICAgICAgICBMYXllclRpbGUqIHRpbGUgPSBtX3RpbGVzQ29tcG9zaXRpbmdUaHJlYWQuZ2V0
KHRpbGVKb2JzSXRlci0+a2V5KTsKICAgICAgICAgaWYgKCF0aWxlKSB7CiAgICAgICAgICAgICBp
ZiAob3JpZ2luLngoKSA+PSBtX3JlcXVpcmVkVGV4dHVyZVNpemUud2lkdGgoKSB8fCBvcmlnaW4u
eSgpID49IG1fcmVxdWlyZWRUZXh0dXJlU2l6ZS5oZWlnaHQoKSkKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgIHRpbGUgPSBuZXcgTGF5ZXJUaWxlKCk7Ci0gICAgICAgICAg
ICBtX3RpbGVzQ29tcG9zaXRpbmdUaHJlYWQuYWRkKHRpbGVKb2JzSXRlci0+Zmlyc3QsIHRpbGUp
OworICAgICAgICAgICAgbV90aWxlc0NvbXBvc2l0aW5nVGhyZWFkLmFkZCh0aWxlSm9ic0l0ZXIt
PmtleSwgdGlsZSk7CiAgICAgICAgIH0KIAogICAgICAgICBJbnRSZWN0IHRpbGVSZWN0KG9yaWdp
biwgdGlsZVNpemUoKSk7CiAgICAgICAgIHRpbGVSZWN0LnNldFdpZHRoKG1pbihtX3JlcXVpcmVk
VGV4dHVyZVNpemUud2lkdGgoKSAtIHRpbGVSZWN0LngoKSwgdGlsZVJlY3Qud2lkdGgoKSkpOwog
ICAgICAgICB0aWxlUmVjdC5zZXRIZWlnaHQobWluKG1fcmVxdWlyZWRUZXh0dXJlU2l6ZS5oZWln
aHQoKSAtIHRpbGVSZWN0LnkoKSwgdGlsZVJlY3QuaGVpZ2h0KCkpKTsKIAotICAgICAgICBwZXJm
b3JtVGlsZUpvYih0aWxlLCAqdGlsZUpvYnNJdGVyLT5zZWNvbmQsIHRpbGVSZWN0KTsKKyAgICAg
ICAgcGVyZm9ybVRpbGVKb2IodGlsZSwgKnRpbGVKb2JzSXRlci0+dmFsdWUsIHRpbGVSZWN0KTsK
ICAgICB9CiAKICAgICBtX3RleHR1cmVKb2JzLmNsZWFyKCk7CkBAIC00MzUsMTEgKzQzNSwxMSBA
QCB2b2lkIExheWVyVGlsZXI6OmFkZFRpbGVKb2IoY29uc3QgVGlsZUluZGV4JiBpbmRleCwgY29u
c3QgVGV4dHVyZUpvYiYgam9iLCBUaWxlSgogICAgICAgICByZXR1cm47CiAKICAgICAvLyBJbiB0
aGlzIGNhc2Ugd2UgbGVhdmUgdGhlIHByZXZpb3VzIGpvYi4KLSAgICBpZiAoam9iLm1fdHlwZSA9
PSBUZXh0dXJlSm9iOjpEaXJ0eUNvbnRlbnRzICYmIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLT5t
X3R5cGUgPT0gVGV4dHVyZUpvYjo6RGlzY2FyZENvbnRlbnRzKQorICAgIGlmIChqb2IubV90eXBl
ID09IFRleHR1cmVKb2I6OkRpcnR5Q29udGVudHMgJiYgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+
bV90eXBlID09IFRleHR1cmVKb2I6OkRpc2NhcmRDb250ZW50cykKICAgICAgICAgcmV0dXJuOwog
CiAgICAgLy8gT3ZlcnJpZGUgdGhlIHByZXZpb3VzIGpvYi4KLSAgICByZXN1bHQuaXRlcmF0b3It
PnNlY29uZCA9ICZqb2I7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9ICZqb2I7CiB9CiAK
IHZvaWQgTGF5ZXJUaWxlcjo6cGVyZm9ybVRpbGVKb2IoTGF5ZXJUaWxlKiB0aWxlLCBjb25zdCBU
ZXh0dXJlSm9iJiBqb2IsIGNvbnN0IEludFJlY3QmIHRpbGVSZWN0KQpAQCAtNzMzLDcgKzczMyw3
IEBAIHZvaWQgTGF5ZXJUaWxlcjo6YmluZENvbnRlbnRzVGV4dHVyZSgpCiAgICAgaWYgKG1fdGls
ZXNDb21wb3NpdGluZ1RocmVhZC5zaXplKCkgIT0gMSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
Y29uc3QgTGF5ZXJUaWxlKiB0aWxlID0gbV90aWxlc0NvbXBvc2l0aW5nVGhyZWFkLmJlZ2luKCkt
PnNlY29uZDsKKyAgICBjb25zdCBMYXllclRpbGUqIHRpbGUgPSBtX3RpbGVzQ29tcG9zaXRpbmdU
aHJlYWQuYmVnaW4oKS0+dmFsdWU7CiAKICAgICBBU1NFUlQodGlsZS0+aGFzVGV4dHVyZSgpKTsK
ICAgICBpZiAoIXRpbGUtPmhhc1RleHR1cmUoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCmluZGV4IGNmNDdiYTU5
MDE2ZWM2MDdlMGZiNWNiM2ZhMWYyYTk4ZDUyYTAxZjQuLmEwZWQ1N2Q3OTRmYTAzMWE2NWIwYmRi
ZTAzYThjOGVjMzdlNzNkZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcApAQCAtNDY3LDcgKzQ2Nyw3IEBAIHZv
aWQgR3JhcGhpY3NMYXllckNBOjptb3ZlT3JDb3B5QW5pbWF0aW9ucyhNb3ZlT3JDb3B5IG9wZXJh
dGlvbiwgUGxhdGZvcm1DQUxheWVyCiAgICAgLy8gTG9vayBmb3IgcnVubmluZyBhbmltYXRpb25z
IGFmZmVjdGluZyB0aGlzIHByb3BlcnR5LgogICAgIEFuaW1hdGlvbnNNYXA6OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IG1fcnVubmluZ0FuaW1hdGlvbnMuZW5kKCk7CiAgICAgZm9yIChBbmltYXRpb25z
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fcnVubmluZ0FuaW1hdGlvbnMuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IFZlY3RvcjxMYXllclByb3BlcnR5QW5pbWF0
aW9uPiYgcHJvcGVydHlBbmltYXRpb25zID0gaXQtPnNlY29uZDsKKyAgICAgICAgY29uc3QgVmVj
dG9yPExheWVyUHJvcGVydHlBbmltYXRpb24+JiBwcm9wZXJ0eUFuaW1hdGlvbnMgPSBpdC0+dmFs
dWU7CiAgICAgICAgIHNpemVfdCBudW1BbmltYXRpb25zID0gcHJvcGVydHlBbmltYXRpb25zLnNp
emUoKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1BbmltYXRpb25zOyArK2kp
IHsKICAgICAgICAgICAgIGNvbnN0IExheWVyUHJvcGVydHlBbmltYXRpb24mIGN1cnJBbmltYXRp
b24gPSBwcm9wZXJ0eUFuaW1hdGlvbnNbaV07CkBAIC02OTQsNyArNjk0LDcgQEAgdm9pZCBHcmFw
aGljc0xheWVyQ0E6OnBhdXNlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwg
ZG91YmxlIHRpbWVPZmYKIAogICAgIEFuaW1hdGlvbnNUb1Byb2Nlc3NNYXA6Oml0ZXJhdG9yIGl0
ID0gbV9hbmltYXRpb25zVG9Qcm9jZXNzLmZpbmQoYW5pbWF0aW9uTmFtZSk7CiAgICAgaWYgKGl0
ICE9IG1fYW5pbWF0aW9uc1RvUHJvY2Vzcy5lbmQoKSkgewotICAgICAgICBBbmltYXRpb25Qcm9j
ZXNzaW5nQWN0aW9uJiBwcm9jZXNzaW5nSW5mbyA9IGl0LT5zZWNvbmQ7CisgICAgICAgIEFuaW1h
dGlvblByb2Nlc3NpbmdBY3Rpb24mIHByb2Nlc3NpbmdJbmZvID0gaXQtPnZhbHVlOwogICAgICAg
ICAvLyBJZiBhbiBhbmltYXRpb24gaXMgc2NoZWR1bGVkIHRvIGJlIHJlbW92ZWQsIGRvbid0IGNo
YW5nZSB0aGUgcmVtb3ZlIHRvIGEgcGF1c2UuCiAgICAgICAgIGlmIChwcm9jZXNzaW5nSW5mby5h
Y3Rpb24gIT0gUmVtb3ZlKQogICAgICAgICAgICAgcHJvY2Vzc2luZ0luZm8uYWN0aW9uID0gUGF1
c2U7CkBAIC04MjksNyArODI5LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OmxheWVyRGlkRGlz
cGxheShQbGF0Zm9ybUxheWVyKiBsYXllcikKICAgICBpZiAobGF5ZXJDbG9uZU1hcCkgewogICAg
ICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7
CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1h
cC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBQbGF0Zm9ybUNBTGF5
ZXIqIGN1cnJDbG9uZSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBQbGF0Zm9ybUNB
TGF5ZXIqIGN1cnJDbG9uZSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGlmICghY3Vy
ckNsb25lKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCkBAIC0xMTcxLDEwICsxMTcxLDEw
IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVHZW9tZXRyeShmbG9hdCBwYWdlU2NhbGVG
YWN0b3IsIGNvbnN0IEZsb2F0UG9pbnQmIHBvCiAgICAgICAgIGlmIChMYXllck1hcCogbGF5ZXJD
bG9uZU1hcCA9IG1fc3RydWN0dXJhbExheWVyQ2xvbmVzLmdldCgpKSB7CiAgICAgICAgICAgICBM
YXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAg
ICAgICAgICBmb3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGxheWVyQ2xvbmVNYXAt
PmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgICAgIFBsYXRmb3JtQ0FM
YXllciogY2xvbmUgPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgICAgIFBsYXRmb3Jt
Q0FMYXllciogY2xvbmUgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICAgICAgRmxvYXRQ
b2ludCBjbG9uZVBvc2l0aW9uID0gbGF5ZXJQb3NpdGlvbjsKIAotICAgICAgICAgICAgICAgIGlm
IChtX3JlcGxpY2FMYXllciAmJiBpc1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQtPmZpcnN0KSkgewor
ICAgICAgICAgICAgICAgIGlmIChtX3JlcGxpY2FMYXllciAmJiBpc1JlcGxpY2F0ZWRSb290Q2xv
bmUoaXQtPmtleSkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gTWFpbnRhaW4gdGhlIHNwZWNp
YWwtY2FzZSBwb3NpdGlvbiBmb3IgdGhlIHJvb3Qgb2YgYSBjbG9uZSBzdWJ0cmVlLAogICAgICAg
ICAgICAgICAgICAgICAvLyB3aGljaCB3ZSBzZXQgdXAgaW4gcmVwbGljYXRlZExheWVyUm9vdCgp
LgogICAgICAgICAgICAgICAgICAgICBjbG9uZVBvc2l0aW9uID0gcG9zaXRpb25Gb3JDbG9uZVJv
b3RMYXllcigpOwpAQCAtMTE5OCwxMCArMTE5OCwxMCBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6
dXBkYXRlR2VvbWV0cnkoZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBjb25zdCBGbG9hdFBvaW50JiBw
bwogICAgIGlmIChMYXllck1hcCogbGF5ZXJDbG9uZU1hcCA9IG1fbGF5ZXJDbG9uZXMuZ2V0KCkp
IHsKICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxheWVyQ2xvbmVNYXAt
PmVuZCgpOwogICAgICAgICBmb3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGxheWVy
Q2xvbmVNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgUGxhdGZv
cm1DQUxheWVyKiBjbG9uZSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBQbGF0Zm9y
bUNBTGF5ZXIqIGNsb25lID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAgICAgRmxvYXRQb2lu
dCBjbG9uZVBvc2l0aW9uID0gYWRqdXN0ZWRQb3NpdGlvbjsKIAotICAgICAgICAgICAgaWYgKCFt
X3N0cnVjdHVyYWxMYXllciAmJiBtX3JlcGxpY2FMYXllciAmJiBpc1JlcGxpY2F0ZWRSb290Q2xv
bmUoaXQtPmZpcnN0KSkgeworICAgICAgICAgICAgaWYgKCFtX3N0cnVjdHVyYWxMYXllciAmJiBt
X3JlcGxpY2FMYXllciAmJiBpc1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQtPmtleSkpIHsKICAgICAg
ICAgICAgICAgICAvLyBNYWludGFpbiB0aGUgc3BlY2lhbC1jYXNlIHBvc2l0aW9uIGZvciB0aGUg
cm9vdCBvZiBhIGNsb25lIHN1YnRyZWUsCiAgICAgICAgICAgICAgICAgLy8gd2hpY2ggd2Ugc2V0
IHVwIGluIHJlcGxpY2F0ZWRMYXllclJvb3QoKS4KICAgICAgICAgICAgICAgICBjbG9uZVBvc2l0
aW9uID0gcG9zaXRpb25Gb3JDbG9uZVJvb3RMYXllcigpOwpAQCAtMTIyMSw4ICsxMjIxLDggQEAg
dm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZVRyYW5zZm9ybSgpCiAgICAgaWYgKExheWVyTWFw
KiBsYXllckNsb25lTWFwID0gcHJpbWFyeUxheWVyQ2xvbmVzKCkpIHsKICAgICAgICAgTGF5ZXJN
YXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxheWVyQ2xvbmVNYXAtPmVuZCgpOwogICAgICAgICBm
b3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGxheWVyQ2xvbmVNYXAtPmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgUGxhdGZvcm1DQUxheWVyKiBjdXJyTGF5
ZXIgPSBpdC0+c2Vjb25kLmdldCgpOwotICAgICAgICAgICAgaWYgKG1fcmVwbGljYUxheWVyICYm
IGlzUmVwbGljYXRlZFJvb3RDbG9uZShpdC0+Zmlyc3QpKSB7CisgICAgICAgICAgICBQbGF0Zm9y
bUNBTGF5ZXIqIGN1cnJMYXllciA9IGl0LT52YWx1ZS5nZXQoKTsKKyAgICAgICAgICAgIGlmICht
X3JlcGxpY2FMYXllciAmJiBpc1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQtPmtleSkpIHsKICAgICAg
ICAgICAgICAgICAvLyBNYWludGFpbiB0aGUgc3BlY2lhbC1jYXNlIHRyYW5zZm9ybSBmb3IgdGhl
IHJvb3Qgb2YgYSBjbG9uZSBzdWJ0cmVlLAogICAgICAgICAgICAgICAgIC8vIHdoaWNoIHdlIHNl
dCB1cCBpbiByZXBsaWNhdGVkTGF5ZXJSb290KCkuCiAgICAgICAgICAgICAgICAgY3VyckxheWVy
LT5zZXRUcmFuc2Zvcm0oVHJhbnNmb3JtYXRpb25NYXRyaXgoKSk7CkBAIC0xMjM5LDcgKzEyMzks
NyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlQ2hpbGRyZW5UcmFuc2Zvcm0oKQogICAg
IGlmIChMYXllck1hcCogbGF5ZXJDbG9uZU1hcCA9IHByaW1hcnlMYXllckNsb25lcygpKSB7CiAg
ICAgICAgIExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBsYXllckNsb25lTWFwLT5lbmQo
KTsKICAgICAgICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXllckNsb25l
TWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBpdC0+c2Vjb25kLT5z
ZXRTdWJsYXllclRyYW5zZm9ybShtX2NoaWxkcmVuVHJhbnNmb3JtKTsKKyAgICAgICAgICAgIGl0
LT52YWx1ZS0+c2V0U3VibGF5ZXJUcmFuc2Zvcm0obV9jaGlsZHJlblRyYW5zZm9ybSk7CiAgICAg
fQogfQogCkBAIC0xMjUwLDcgKzEyNTAsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRl
TWFza3NUb0JvdW5kcygpCiAgICAgaWYgKExheWVyTWFwKiBsYXllckNsb25lTWFwID0gbV9sYXll
ckNsb25lcy5nZXQoKSkgewogICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
bGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAg
ICAgICAgaXQtPnNlY29uZC0+c2V0TWFza3NUb0JvdW5kcyhtX21hc2tzVG9Cb3VuZHMpOworICAg
ICAgICAgICAgaXQtPnZhbHVlLT5zZXRNYXNrc1RvQm91bmRzKG1fbWFza3NUb0JvdW5kcyk7CiAg
ICAgfQogCiAgICAgdXBkYXRlRGVidWdJbmRpY2F0b3JzKCk7CkBAIC0xMjY4LDcgKzEyNjgsNyBA
QCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlQ29udGVudHNWaXNpYmlsaXR5KCkKICAgICAg
ICAgaWYgKExheWVyTWFwKiBsYXllckNsb25lTWFwID0gbV9sYXllckNsb25lcy5nZXQoKSkgewog
ICAgICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxheWVyQ2xvbmVNYXAt
PmVuZCgpOwogICAgICAgICAgICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBs
YXllckNsb25lTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICAgICAg
aXQtPnNlY29uZC0+c2V0Q29udGVudHMoMCk7CisgICAgICAgICAgICAgICAgaXQtPnZhbHVlLT5z
ZXRDb250ZW50cygwKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTEyODAsNyArMTI4MCw3IEBA
IHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVDb250ZW50c09wYXF1ZSgpCiAgICAgaWYgKExh
eWVyTWFwKiBsYXllckNsb25lTWFwID0gbV9sYXllckNsb25lcy5nZXQoKSkgewogICAgICAgICBM
YXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAg
ICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0T3BhcXVl
KG1fY29udGVudHNPcGFxdWUpOworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRPcGFxdWUobV9j
b250ZW50c09wYXF1ZSk7CiAgICAgfQogfQogCkBAIC0xMjkyLDcgKzEyOTIsNyBAQCB2b2lkIEdy
YXBoaWNzTGF5ZXJDQTo6dXBkYXRlQmFja2ZhY2VWaXNpYmlsaXR5KCkKICAgICAgICAgaWYgKExh
eWVyTWFwKiBsYXllckNsb25lTWFwID0gbV9zdHJ1Y3R1cmFsTGF5ZXJDbG9uZXMuZ2V0KCkpIHsK
ICAgICAgICAgICAgIExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBsYXllckNsb25lTWFw
LT5lbmQoKTsKICAgICAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgICAg
IGl0LT5zZWNvbmQtPnNldERvdWJsZVNpZGVkKG1fYmFja2ZhY2VWaXNpYmlsaXR5KTsKKyAgICAg
ICAgICAgICAgICBpdC0+dmFsdWUtPnNldERvdWJsZVNpZGVkKG1fYmFja2ZhY2VWaXNpYmlsaXR5
KTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTMwMSw3ICsxMzAxLDcgQEAgdm9pZCBHcmFwaGlj
c0xheWVyQ0E6OnVwZGF0ZUJhY2tmYWNlVmlzaWJpbGl0eSgpCiAgICAgaWYgKExheWVyTWFwKiBs
YXllckNsb25lTWFwID0gbV9sYXllckNsb25lcy5nZXQoKSkgewogICAgICAgICBMYXllck1hcDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAo
TGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KQotICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0RG91YmxlU2lkZWQobV9i
YWNrZmFjZVZpc2liaWxpdHkpOworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXREb3VibGVTaWRl
ZChtX2JhY2tmYWNlVmlzaWJpbGl0eSk7CiAgICAgfQogfQogCkBAIC0xMzEzLDEwICsxMzEzLDEw
IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVGaWx0ZXJzKCkKICAgICBpZiAoTGF5ZXJN
YXAqIGxheWVyQ2xvbmVNYXAgPSBwcmltYXJ5TGF5ZXJDbG9uZXMoKSkgewogICAgICAgICBMYXll
ck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAgICAg
IGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAobV9yZXBsaWNhTGF5ZXIgJiYg
aXNSZXBsaWNhdGVkUm9vdENsb25lKGl0LT5maXJzdCkpCisgICAgICAgICAgICBpZiAobV9yZXBs
aWNhTGF5ZXIgJiYgaXNSZXBsaWNhdGVkUm9vdENsb25lKGl0LT5rZXkpKQogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRGaWx0ZXJzKG1fZmls
dGVycyk7CisgICAgICAgICAgICBpdC0+dmFsdWUtPnNldEZpbHRlcnMobV9maWx0ZXJzKTsKICAg
ICAgICAgfQogICAgIH0KIH0KQEAgLTE0MDQsNyArMTQwNCw3IEBAIHZvaWQgR3JhcGhpY3NMYXll
ckNBOjplbnN1cmVTdHJ1Y3R1cmFsTGF5ZXIoU3RydWN0dXJhbExheWVyUHVycG9zZSBwdXJwb3Nl
LCBmbG9hCiAgICAgaWYgKG1fbGF5ZXJDbG9uZXMpIHsKICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IG1fbGF5ZXJDbG9uZXMtPmVuZCgpOwogICAgICAgICBmb3IgKExheWVy
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fbGF5ZXJDbG9uZXMtPmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewotICAgICAgICAgICAgUGxhdGZvcm1DQUxheWVyKiBjdXJyTGF5ZXIgPSBpdC0+
c2Vjb25kLmdldCgpOworICAgICAgICAgICAgUGxhdGZvcm1DQUxheWVyKiBjdXJyTGF5ZXIgPSBp
dC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBjdXJyTGF5ZXItPnNldFBvc2l0aW9uKHBvaW50
KTsKICAgICAgICAgICAgIGN1cnJMYXllci0+c2V0QW5jaG9yUG9pbnQoYW5jaG9yUG9pbnQpOwog
ICAgICAgICAgICAgY3VyckxheWVyLT5zZXRUcmFuc2Zvcm0oVHJhbnNmb3JtYXRpb25NYXRyaXgo
KSk7CkBAIC0xNDQ5LDcgKzE0NDksNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlTGF5
ZXJEcmF3c0NvbnRlbnQoZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBjb25zdCBGbG9hdAogICAgICAg
ICBpZiAobV9sYXllckNsb25lcykgewogICAgICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IG1fbGF5ZXJDbG9uZXMtPmVuZCgpOwogICAgICAgICAgICAgZm9yIChMYXllck1h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2xheWVyQ2xvbmVzLT5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpCi0gICAgICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0Q29udGVudHMoMCk7CisgICAg
ICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRDb250ZW50cygwKTsKICAgICAgICAgfQogICAgIH0K
ICAgICB1cGRhdGVEZWJ1Z0luZGljYXRvcnMoKTsKQEAgLTE1MDIsNyArMTUwMiw3IEBAIHZvaWQg
R3JhcGhpY3NMYXllckNBOjp1cGRhdGVDb250ZW50c0ltYWdlKCkKICAgICAgICAgaWYgKG1fY29u
dGVudHNMYXllckNsb25lcykgewogICAgICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IG1fY29udGVudHNMYXllckNsb25lcy0+ZW5kKCk7CiAgICAgICAgICAgICBmb3IgKExh
eWVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fY29udGVudHNMYXllckNsb25lcy0+YmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNldENvbnRl
bnRzKG1fY29udGVudHNMYXllci0+Y29udGVudHMoKSk7CisgICAgICAgICAgICAgICAgaXQtPnZh
bHVlLT5zZXRDb250ZW50cyhtX2NvbnRlbnRzTGF5ZXItPmNvbnRlbnRzKCkpOwogICAgICAgICB9
CiAgICAgICAgIAogICAgICAgICB1cGRhdGVDb250ZW50c1JlY3QoKTsKQEAgLTE1NDYsOCArMTU0
Niw4IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVDb250ZW50c1JlY3QoKQogICAgIGlm
IChtX2NvbnRlbnRzTGF5ZXJDbG9uZXMpIHsKICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IG1fY29udGVudHNMYXllckNsb25lcy0+ZW5kKCk7CiAgICAgICAgIGZvciAoTGF5
ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9jb250ZW50c0xheWVyQ2xvbmVzLT5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNldFBvc2l0aW9u
KHBvaW50KTsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNldEJvdW5kcyhyZWN0KTsKKyAgICAg
ICAgICAgIGl0LT52YWx1ZS0+c2V0UG9zaXRpb24ocG9pbnQpOworICAgICAgICAgICAgaXQtPnZh
bHVlLT5zZXRCb3VuZHMocmVjdCk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0xNTYyLDggKzE1
NjIsOCBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlTWFza0xheWVyKCkKICAgICBpZiAo
TGF5ZXJNYXAqIGxheWVyQ2xvbmVNYXAgPSBtX2xheWVyQ2xvbmVzLmdldCgpKSB7CiAgICAgICAg
IExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBsYXllckNsb25lTWFwLT5lbmQoKTsKICAg
ICAgICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXllckNsb25lTWFwLT5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsgICAgICAgICAgICAKLSAgICAgICAgICAgIFBsYXRm
b3JtQ0FMYXllciogbWFza0Nsb25lID0gbWFza0xheWVyQ2xvbmVNYXAgPyBtYXNrTGF5ZXJDbG9u
ZU1hcC0+Z2V0KGl0LT5maXJzdCkuZ2V0KCkgOiAwOwotICAgICAgICAgICAgaXQtPnNlY29uZC0+
c2V0TWFzayhtYXNrQ2xvbmUpOworICAgICAgICAgICAgUGxhdGZvcm1DQUxheWVyKiBtYXNrQ2xv
bmUgPSBtYXNrTGF5ZXJDbG9uZU1hcCA/IG1hc2tMYXllckNsb25lTWFwLT5nZXQoaXQtPmtleSku
Z2V0KCkgOiAwOworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRNYXNrKG1hc2tDbG9uZSk7CiAg
ICAgICAgIH0KICAgICB9CiB9CkBAIC0xNjI3LDEzICsxNjI3LDEzIEBAIHZvaWQgR3JhcGhpY3NM
YXllckNBOjp1cGRhdGVMYXllckFuaW1hdGlvbnMoKQogICAgIGlmIChtX2FuaW1hdGlvbnNUb1By
b2Nlc3Muc2l6ZSgpKSB7CiAgICAgICAgIEFuaW1hdGlvbnNUb1Byb2Nlc3NNYXA6OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IG1fYW5pbWF0aW9uc1RvUHJvY2Vzcy5lbmQoKTsKICAgICAgICAgZm9yIChB
bmltYXRpb25zVG9Qcm9jZXNzTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fYW5pbWF0aW9uc1Rv
UHJvY2Vzcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGNvbnN0IFN0
cmluZyYgY3VyckFuaW1hdGlvbk5hbWUgPSBpdC0+Zmlyc3Q7CisgICAgICAgICAgICBjb25zdCBT
dHJpbmcmIGN1cnJBbmltYXRpb25OYW1lID0gaXQtPmtleTsKICAgICAgICAgICAgIEFuaW1hdGlv
bnNNYXA6Oml0ZXJhdG9yIGFuaW1hdGlvbkl0ID0gbV9ydW5uaW5nQW5pbWF0aW9ucy5maW5kKGN1
cnJBbmltYXRpb25OYW1lKTsKICAgICAgICAgICAgIGlmIChhbmltYXRpb25JdCA9PSBtX3J1bm5p
bmdBbmltYXRpb25zLmVuZCgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAg
ICAgICBjb25zdCBBbmltYXRpb25Qcm9jZXNzaW5nQWN0aW9uJiBwcm9jZXNzaW5nSW5mbyA9IGl0
LT5zZWNvbmQ7Ci0gICAgICAgICAgICBjb25zdCBWZWN0b3I8TGF5ZXJQcm9wZXJ0eUFuaW1hdGlv
bj4mIGFuaW1hdGlvbnMgPSBhbmltYXRpb25JdC0+c2Vjb25kOworICAgICAgICAgICAgY29uc3Qg
QW5pbWF0aW9uUHJvY2Vzc2luZ0FjdGlvbiYgcHJvY2Vzc2luZ0luZm8gPSBpdC0+dmFsdWU7Cisg
ICAgICAgICAgICBjb25zdCBWZWN0b3I8TGF5ZXJQcm9wZXJ0eUFuaW1hdGlvbj4mIGFuaW1hdGlv
bnMgPSBhbmltYXRpb25JdC0+dmFsdWU7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgICAgICBjb25zdCBMYXll
clByb3BlcnR5QW5pbWF0aW9uJiBjdXJyQW5pbWF0aW9uID0gYW5pbWF0aW9uc1tpXTsKICAgICAg
ICAgICAgICAgICBzd2l0Y2ggKHByb2Nlc3NpbmdJbmZvLmFjdGlvbikgewpAQCAtMTY2NSw3ICsx
NjY1LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUxheWVyQW5pbWF0aW9ucygpCiAg
ICAgICAgICAgICAgICAgYW5pbWF0aW9ucy5hcHBlbmQocGVuZGluZ0FuaW1hdGlvbik7CiAgICAg
ICAgICAgICAgICAgbV9ydW5uaW5nQW5pbWF0aW9ucy5hZGQocGVuZGluZ0FuaW1hdGlvbi5tX25h
bWUsIGFuaW1hdGlvbnMpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBW
ZWN0b3I8TGF5ZXJQcm9wZXJ0eUFuaW1hdGlvbj4mIGFuaW1hdGlvbnMgPSBpdC0+c2Vjb25kOwor
ICAgICAgICAgICAgICAgIFZlY3RvcjxMYXllclByb3BlcnR5QW5pbWF0aW9uPiYgYW5pbWF0aW9u
cyA9IGl0LT52YWx1ZTsKICAgICAgICAgICAgICAgICBhbmltYXRpb25zLmFwcGVuZChwZW5kaW5n
QW5pbWF0aW9uKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTY5MCwxMSArMTY5MCwx
MSBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c2V0QW5pbWF0aW9uT25MYXllcihQbGF0Zm9ybUNB
QW5pbWF0aW9uKiBjYUFuaW0sIEFuaW1hdGVkUAogICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7CiAgICAgICAgICAgICAvLyBTa2lwIGltbWVkaWF0ZSByZXBsaWNhcywgc2luY2UgdGhl
eSBtb3ZlIHdpdGggdGhlIG9yaWdpbmFsLgotICAgICAgICAgICAgaWYgKG1fcmVwbGljYUxheWVy
ICYmIGlzUmVwbGljYXRlZFJvb3RDbG9uZShpdC0+Zmlyc3QpKQorICAgICAgICAgICAgaWYgKG1f
cmVwbGljYUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9uZShpdC0+a2V5KSkKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgaXQtPnNlY29uZC0+cmVtb3ZlQW5pbWF0
aW9uRm9yS2V5KGFuaW1hdGlvbklEKTsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPmFkZEFuaW1h
dGlvbkZvcktleShhbmltYXRpb25JRCwgY2FBbmltKTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+
cmVtb3ZlQW5pbWF0aW9uRm9yS2V5KGFuaW1hdGlvbklEKTsKKyAgICAgICAgICAgIGl0LT52YWx1
ZS0+YWRkQW5pbWF0aW9uRm9yS2V5KGFuaW1hdGlvbklELCBjYUFuaW0pOwogICAgICAgICB9CiAg
ICAgfQogfQpAQCAtMTcyOSwxMCArMTcyOSwxMCBAQCBib29sIEdyYXBoaWNzTGF5ZXJDQTo6cmVt
b3ZlQ0FBbmltYXRpb25Gcm9tTGF5ZXIoQW5pbWF0ZWRQcm9wZXJ0eUlEIHByb3BlcnR5LCBjbwog
ICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5k
KCk7CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9u
ZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICAvLyBTa2lwIGlt
bWVkaWF0ZSByZXBsaWNhcywgc2luY2UgdGhleSBtb3ZlIHdpdGggdGhlIG9yaWdpbmFsLgotICAg
ICAgICAgICAgaWYgKG1fcmVwbGljYUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9uZShpdC0+
Zmlyc3QpKQorICAgICAgICAgICAgaWYgKG1fcmVwbGljYUxheWVyICYmIGlzUmVwbGljYXRlZFJv
b3RDbG9uZShpdC0+a2V5KSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAg
ICAgaXQtPnNlY29uZCAtPnJlbW92ZUFuaW1hdGlvbkZvcktleShhbmltYXRpb25JRCk7CisgICAg
ICAgICAgICBpdC0+dmFsdWUgLT5yZW1vdmVBbmltYXRpb25Gb3JLZXkoYW5pbWF0aW9uSUQpOwog
ICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiB0cnVlOwpAQCAtMTc2MSw5ICsxNzYxLDkgQEAg
dm9pZCBHcmFwaGljc0xheWVyQ0E6OnBhdXNlQ0FBbmltYXRpb25PbkxheWVyKEFuaW1hdGVkUHJv
cGVydHlJRCBwcm9wZXJ0eSwgY29uc3QKICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IGxheWVyQ2xvbmVNYXAtPmVuZCgpOwogICAgICAgICBmb3IgKExheWVyTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IGxheWVyQ2xvbmVNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewogICAgICAgICAgICAgLy8gU2tpcCBpbW1lZGlhdGUgcmVwbGljYXMsIHNpbmNlIHRoZXkgbW92
ZSB3aXRoIHRoZSBvcmlnaW5hbC4KLSAgICAgICAgICAgIGlmIChtX3JlcGxpY2FMYXllciAmJiBp
c1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQtPmZpcnN0KSkKKyAgICAgICAgICAgIGlmIChtX3JlcGxp
Y2FMYXllciAmJiBpc1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQtPmtleSkpCiAgICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLT5hZGRBbmltYXRpb25Gb3JLZXko
YW5pbWF0aW9uSUQsIG5ld0FuaW0uZ2V0KCkpOworICAgICAgICAgICAgaXQtPnZhbHVlLT5hZGRB
bmltYXRpb25Gb3JLZXkoYW5pbWF0aW9uSUQsIG5ld0FuaW0uZ2V0KCkpOwogICAgICAgICB9CiAg
ICAgfQogfQpAQCAtMjI2Nyw4ICsyMjY3LDggQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnN1c3Bl
bmRBbmltYXRpb25zKGRvdWJsZSB0aW1lKQogICAgIGlmIChMYXllck1hcCogbGF5ZXJDbG9uZU1h
cCA9IHByaW1hcnlMYXllckNsb25lcygpKSB7CiAgICAgICAgIExheWVyTWFwOjpjb25zdF9pdGVy
YXRvciBlbmQgPSBsYXllckNsb25lTWFwLT5lbmQoKTsKICAgICAgICAgZm9yIChMYXllck1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXllckNsb25lTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNldFNwZWVkKDApOwotICAgICAgICAgICAg
aXQtPnNlY29uZC0+c2V0VGltZU9mZnNldCh0KTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+c2V0
U3BlZWQoMCk7CisgICAgICAgICAgICBpdC0+dmFsdWUtPnNldFRpbWVPZmZzZXQodCk7CiAgICAg
ICAgIH0KICAgICB9CiB9CkBAIC0yMjgyLDggKzIyODIsOCBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJD
QTo6cmVzdW1lQW5pbWF0aW9ucygpCiAgICAgaWYgKExheWVyTWFwKiBsYXllckNsb25lTWFwID0g
cHJpbWFyeUxheWVyQ2xvbmVzKCkpIHsKICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IGxheWVyQ2xvbmVNYXAtPmVuZCgpOwogICAgICAgICBmb3IgKExheWVyTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IGxheWVyQ2xvbmVNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewotICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0U3BlZWQoMSk7Ci0gICAgICAgICAgICBpdC0+
c2Vjb25kLT5zZXRUaW1lT2Zmc2V0KDApOworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRTcGVl
ZCgxKTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+c2V0VGltZU9mZnNldCgwKTsKICAgICAgICAg
fQogICAgIH0KIH0KQEAgLTI0OTMsMTMgKzI0OTMsMTMgQEAgUGFzc1JlZlB0cjxQbGF0Zm9ybUNB
TGF5ZXI+IEdyYXBoaWNzTGF5ZXJDQTo6ZmluZE9yTWFrZUNsb25lKENsb25lSUQgY2xvbmVJRCwg
UGwKICAgICBMYXllck1hcDo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IGNsb25lcy0+YWRkKGNsb25l
SUQsIGR1bW15KTsKICAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5KSB7CiAgICAgICAgIC8v
IFZhbHVlIHdhcyBub3QgYWRkZWQsIHNvIGl0IGV4aXN0cyBhbHJlYWR5LgotICAgICAgICByZXN1
bHRMYXllciA9IGFkZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLmdldCgpOworICAgICAgICByZXN1
bHRMYXllciA9IGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7CiAgICAgfSBlbHNlIHsK
ICAgICAgICAgcmVzdWx0TGF5ZXIgPSBjbG9uZUxheWVyKHNvdXJjZUxheWVyLCBjbG9uZUxldmVs
KTsKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgIHJlc3VsdExheWVyLT5zZXROYW1lKFN0cmluZzo6
Zm9ybWF0KCJDbG9uZSAlZCBvZiBsYXllciAlcCIsIGNsb25lSURbMFVdLCBzb3VyY2VMYXllci0+
cGxhdGZvcm1MYXllcigpKSk7CiAjZW5kaWYKLSAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT5z
ZWNvbmQgPSByZXN1bHRMYXllcjsKKyAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9
IHJlc3VsdExheWVyOwogICAgIH0KIAogICAgIHJldHVybiByZXN1bHRMYXllcjsKQEAgLTI2OTEs
OSArMjY5MSw5IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpzZXRPcGFjaXR5SW50ZXJuYWwoZmxv
YXQgYWNjdW11bGF0ZWRPcGFjaXR5KQogICAgIGlmIChsYXllckNsb25lTWFwKSB7CiAgICAgICAg
IExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBsYXllckNsb25lTWFwLT5lbmQoKTsKICAg
ICAgICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXllckNsb25lTWFwLT5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGlmIChtX3JlcGxpY2FMYXll
ciAmJiBpc1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQtPmZpcnN0KSkKKyAgICAgICAgICAgIGlmICht
X3JlcGxpY2FMYXllciAmJiBpc1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQtPmtleSkpCiAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRPcGFjaXR5KG1f
b3BhY2l0eSk7CisgICAgICAgICAgICBpdC0+dmFsdWUtPnNldE9wYWNpdHkobV9vcGFjaXR5KTsK
ICAgICAgICAgfQogICAgIH0KIH0KQEAgLTI3MDUsMTAgKzI3MDUsMTAgQEAgdm9pZCBHcmFwaGlj
c0xheWVyQ0E6OnVwZGF0ZU9wYWNpdHlPbkxheWVyKCkKICAgICBpZiAoTGF5ZXJNYXAqIGxheWVy
Q2xvbmVNYXAgPSBwcmltYXJ5TGF5ZXJDbG9uZXMoKSkgewogICAgICAgICBMYXllck1hcDo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAoTGF5
ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAobV9yZXBsaWNhTGF5ZXIgJiYgaXNSZXBsaWNh
dGVkUm9vdENsb25lKGl0LT5maXJzdCkpCisgICAgICAgICAgICBpZiAobV9yZXBsaWNhTGF5ZXIg
JiYgaXNSZXBsaWNhdGVkUm9vdENsb25lKGl0LT5rZXkpKQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogCi0gICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRPcGFjaXR5KG1fb3BhY2l0eSk7Cisg
ICAgICAgICAgICBpdC0+dmFsdWUtPnNldE9wYWNpdHkobV9vcGFjaXR5KTsKICAgICAgICAgfQog
ICAgICAgICAKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYS9tYWMvVGlsZUNhY2hlLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2EvbWFjL1RpbGVDYWNoZS5tbQppbmRleCAwOTdkZmJmYzZjMDViNTdmYmU0YmQyNzU5NWU4
NWJjMDUwYzlhN2FmLi5lOWQ5Y2U0MGU4Njc1MTY0MDRjYjg3ZDg1MmVmMjdkMGU1NDk0Y2JjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvVGlsZUNh
Y2hlLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9UaWxl
Q2FjaGUubW0KQEAgLTE5MSw5ICsxOTEsOSBAQCB2b2lkIFRpbGVDYWNoZTo6c2V0U2NhbGUoQ0dG
bG9hdCBzY2FsZSkKICAgICByZXZhbGlkYXRlVGlsZXMoKTsKIAogICAgIGZvciAoVGlsZU1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCksIGVuZCA9IG1fdGlsZXMuZW5kKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBbaXQtPnNlY29uZC5nZXQoKSBzZXRDb250ZW50
c1NjYWxlOmRldmljZVNjYWxlRmFjdG9yXTsKKyAgICAgICAgW2l0LT52YWx1ZS5nZXQoKSBzZXRD
b250ZW50c1NjYWxlOmRldmljZVNjYWxlRmFjdG9yXTsKIAotICAgICAgICBJbnRSZWN0IHRpbGVS
ZWN0ID0gcmVjdEZvclRpbGVJbmRleChpdC0+Zmlyc3QpOworICAgICAgICBJbnRSZWN0IHRpbGVS
ZWN0ID0gcmVjdEZvclRpbGVJbmRleChpdC0+a2V5KTsKICAgICAgICAgRmxvYXRSZWN0IHNjYWxl
ZFRpbGVSZWN0ID0gdGlsZVJlY3Q7CiAKICAgICAgICAgc2NhbGVkVGlsZVJlY3Quc2NhbGUoMSAv
IG1fc2NhbGUpOwpAQCAtMjEzLDcgKzIxMyw3IEBAIHZvaWQgVGlsZUNhY2hlOjpzZXRBY2NlbGVy
YXRlc0RyYXdpbmcoYm9vbCBhY2NlbGVyYXRlc0RyYXdpbmcpCiAgICAgbV9hY2NlbGVyYXRlc0Ry
YXdpbmcgPSBhY2NlbGVyYXRlc0RyYXdpbmc7CiAKICAgICBmb3IgKFRpbGVNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpLCBlbmQgPSBtX3RpbGVzLmVuZCgpOyBpdCAhPSBl
bmQ7ICsraXQpCi0gICAgICAgIFtpdC0+c2Vjb25kLmdldCgpIHNldEFjY2VsZXJhdGVzRHJhd2lu
ZzptX2FjY2VsZXJhdGVzRHJhd2luZ107CisgICAgICAgIFtpdC0+dmFsdWUuZ2V0KCkgc2V0QWNj
ZWxlcmF0ZXNEcmF3aW5nOm1fYWNjZWxlcmF0ZXNEcmF3aW5nXTsKICNlbHNlCiAgICAgVU5VU0VE
X1BBUkFNKGFjY2VsZXJhdGVzRHJhd2luZyk7CiAjZW5kaWYKQEAgLTI0OSw3ICsyNDksNyBAQCB2
b2lkIFRpbGVDYWNoZTo6c2V0VGlsZURlYnVnQm9yZGVyV2lkdGgoZmxvYXQgYm9yZGVyV2lkdGgp
CiAKICAgICBtX3RpbGVEZWJ1Z0JvcmRlcldpZHRoID0gYm9yZGVyV2lkdGg7CiAgICAgZm9yIChU
aWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKSwgZW5kID0gbV90aWxl
cy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBbaXQtPnNlY29uZC5nZXQoKSBzZXRC
b3JkZXJXaWR0aDptX3RpbGVEZWJ1Z0JvcmRlcldpZHRoXTsKKyAgICAgICAgW2l0LT52YWx1ZS5n
ZXQoKSBzZXRCb3JkZXJXaWR0aDptX3RpbGVEZWJ1Z0JvcmRlcldpZHRoXTsKIH0KIAogdm9pZCBU
aWxlQ2FjaGU6OnNldFRpbGVEZWJ1Z0JvcmRlckNvbG9yKENHQ29sb3JSZWYgYm9yZGVyQ29sb3Ip
CkBAIC0yNTksNyArMjU5LDcgQEAgdm9pZCBUaWxlQ2FjaGU6OnNldFRpbGVEZWJ1Z0JvcmRlckNv
bG9yKENHQ29sb3JSZWYgYm9yZGVyQ29sb3IpCiAKICAgICBtX3RpbGVEZWJ1Z0JvcmRlckNvbG9y
ID0gYm9yZGVyQ29sb3I7CiAgICAgZm9yIChUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1f
dGlsZXMuYmVnaW4oKSwgZW5kID0gbV90aWxlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQotICAg
ICAgICBbaXQtPnNlY29uZC5nZXQoKSBzZXRCb3JkZXJDb2xvcjptX3RpbGVEZWJ1Z0JvcmRlckNv
bG9yLmdldCgpXTsKKyAgICAgICAgW2l0LT52YWx1ZS5nZXQoKSBzZXRCb3JkZXJDb2xvcjptX3Rp
bGVEZWJ1Z0JvcmRlckNvbG9yLmdldCgpXTsKIH0KIAogSW50UmVjdCBUaWxlQ2FjaGU6OmJvdW5k
cygpIGNvbnN0CkBAIC0zMzQsOSArMzM0LDkgQEAgdm9pZCBUaWxlQ2FjaGU6OnJldmFsaWRhdGVU
aWxlcygpCiAgICAgVmVjdG9yPFRpbGVJbmRleD4gdGlsZXNUb1JlbW92ZTsKIAogICAgIGZvciAo
VGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCksIGVuZCA9IG1fdGlsZXMuZW5k
KCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBjb25zdCBUaWxlSW5kZXgmIHRpbGVJbmRl
eCA9IGl0LT5maXJzdDsKKyAgICAgICAgY29uc3QgVGlsZUluZGV4JiB0aWxlSW5kZXggPSBpdC0+
a2V5OwogCi0gICAgICAgIFdlYlRpbGVMYXllciogdGlsZUxheWVyID0gaXQtPnNlY29uZC5nZXQo
KTsKKyAgICAgICAgV2ViVGlsZUxheWVyKiB0aWxlTGF5ZXIgPSBpdC0+dmFsdWUuZ2V0KCk7CiAK
ICAgICAgICAgaWYgKCFyZWN0Rm9yVGlsZUluZGV4KHRpbGVJbmRleCkuaW50ZXJzZWN0cyh0aWxl
Q292ZXJhZ2VSZWN0KSkgewogICAgICAgICAgICAgLy8gUmVtb3ZlIHRoaXMgbGF5ZXIuCkBAIC0z
NjQsNyArMzY0LDcgQEAgdm9pZCBUaWxlQ2FjaGU6OnJldmFsaWRhdGVUaWxlcygpCiAgICAgICAg
ICAgICBUaWxlSW5kZXggdGlsZUluZGV4KHgsIHkpOwogCiAgICAgICAgICAgICBJbnRSZWN0IHRp
bGVSZWN0ID0gcmVjdEZvclRpbGVJbmRleCh0aWxlSW5kZXgpOwotICAgICAgICAgICAgUmV0YWlu
UHRyPFdlYlRpbGVMYXllcj4mIHRpbGVMYXllciA9IG1fdGlsZXMuYWRkKHRpbGVJbmRleCwgMCku
aXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgICAgIFJldGFpblB0cjxXZWJUaWxlTGF5ZXI+JiB0
aWxlTGF5ZXIgPSBtX3RpbGVzLmFkZCh0aWxlSW5kZXgsIDApLml0ZXJhdG9yLT52YWx1ZTsKICAg
ICAgICAgICAgIGlmICghdGlsZUxheWVyKSB7CiAgICAgICAgICAgICAgICAgdGlsZUxheWVyID0g
Y3JlYXRlVGlsZUxheWVyKHRpbGVSZWN0KTsKICAgICAgICAgICAgICAgICBbbV90aWxlQ29udGFp
bmVyTGF5ZXIuZ2V0KCkgYWRkU3VibGF5ZXI6dGlsZUxheWVyLmdldCgpXTsKQEAgLTM4Myw3ICsz
ODMsNyBAQCB2b2lkIFRpbGVDYWNoZTo6cmV2YWxpZGF0ZVRpbGVzKCkKIAogICAgIG1fdGlsZUNv
dmVyYWdlUmVjdCA9IEludFJlY3QoKTsKICAgICBmb3IgKFRpbGVNYXA6Oml0ZXJhdG9yIGl0ID0g
bV90aWxlcy5iZWdpbigpLCBlbmQgPSBtX3RpbGVzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
LSAgICAgICAgY29uc3QgVGlsZUluZGV4JiB0aWxlSW5kZXggPSBpdC0+Zmlyc3Q7CisgICAgICAg
IGNvbnN0IFRpbGVJbmRleCYgdGlsZUluZGV4ID0gaXQtPmtleTsKIAogICAgICAgICBtX3RpbGVD
b3ZlcmFnZVJlY3QudW5pdGUocmVjdEZvclRpbGVJbmRleCh0aWxlSW5kZXgpKTsKICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZv
cm1DQUxheWVyV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dp
bi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwCmluZGV4IDQ4YjIwZDBiOGJkMjQyYWI1NDliOGZlNDQy
ZGY0NGFiMzY3MmViODUuLjcwMTY4YjIxMDRkYjM2OWRhMDc1N2ExMTQ0NjIyMTExYmMzMDYxZjAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0
Zm9ybUNBTGF5ZXJXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwCkBAIC0xNjcsNyArMTY3LDcgQEAgdm9pZCBQ
bGF0Zm9ybUNBTGF5ZXI6OmFuaW1hdGlvblN0YXJ0ZWQoQ0ZUaW1lSW50ZXJ2YWwgYmVnaW5UaW1l
KQogCiAgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiA+Ojpj
b25zdF9pdGVyYXRvciBlbmQgPSBtX2FuaW1hdGlvbnMuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFw
PFN0cmluZywgUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+ID46OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV9hbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNl
Y29uZC0+c2V0QWN0dWFsU3RhcnRUaW1lSWZOZWVkZWQoY2FjZkJlZ2luVGltZSk7CisgICAgICAg
IGl0LT52YWx1ZS0+c2V0QWN0dWFsU3RhcnRUaW1lSWZOZWVkZWQoY2FjZkJlZ2luVGltZSk7CiAK
ICAgICBpZiAobV9vd25lcikKICAgICAgICAgbV9vd25lci0+cGxhdGZvcm1DQUxheWVyQW5pbWF0
aW9uU3RhcnRlZChiZWdpblRpbWUpOwpAQCAtMTc3LDggKzE3Nyw4IEBAIHN0YXRpYyB2b2lkIHJl
c3VibWl0QWxsQW5pbWF0aW9ucyhQbGF0Zm9ybUNBTGF5ZXIqIGxheWVyKQogewogICAgIEhhc2hN
YXA8U3RyaW5nLCBSZWZQdHI8UGxhdGZvcm1DQUFuaW1hdGlvbj4gPjo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gbGF5ZXItPmFuaW1hdGlvbnMoKS5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8U3RyaW5n
LCBSZWZQdHI8UGxhdGZvcm1DQUFuaW1hdGlvbj4gPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXll
ci0+YW5pbWF0aW9ucygpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBSZXRh
aW5QdHI8Q0ZTdHJpbmdSZWY+IHMoQWRvcHRDRiwgaXQtPmZpcnN0LmNyZWF0ZUNGU3RyaW5nKCkp
OwotICAgICAgICBDQUNGTGF5ZXJBZGRBbmltYXRpb24obGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSwg
cy5nZXQoKSwgaXQtPnNlY29uZC0+cGxhdGZvcm1BbmltYXRpb24oKSk7CisgICAgICAgIFJldGFp
blB0cjxDRlN0cmluZ1JlZj4gcyhBZG9wdENGLCBpdC0+a2V5LmNyZWF0ZUNGU3RyaW5nKCkpOwor
ICAgICAgICBDQUNGTGF5ZXJBZGRBbmltYXRpb24obGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSwgcy5n
ZXQoKSwgaXQtPnZhbHVlLT5wbGF0Zm9ybUFuaW1hdGlvbigpKTsKICAgICB9CiB9CiAKQEAgLTMy
OCw3ICszMjgsNyBAQCBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+IFBsYXRmb3JtQ0FM
YXllcjo6YW5pbWF0aW9uRm9yS2V5KGNvbnN0IFN0cmluZyYgawogICAgIGlmIChpdCA9PSBtX2Fu
aW1hdGlvbnMuZW5kKCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgcmV0dXJuIGl0LT5zZWNv
bmQ7CisgICAgcmV0dXJuIGl0LT52YWx1ZTsKIH0KIAogUGxhdGZvcm1DQUxheWVyKiBQbGF0Zm9y
bUNBTGF5ZXI6Om1hc2soKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENhY2hlQ2hyb21pdW1XaW4uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENhY2hlQ2hyb21pdW1XaW4uY3Bw
CmluZGV4IGQ0ZDU5MmUxYmVlMmRkMzMwYjQ2MzFhMzgxZjI0MjllODFmZDM4MTAuLmFmZmQyYWFj
ZmYwYTM0YzljYzdkZDRiZGNkOTY4YmQzZmI0YjI1YzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUNocm9taXVtV2luLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2FjaGVD
aHJvbWl1bVdpbi5jcHAKQEAgLTIyMiwxMCArMjIyLDEwIEBAIHN0YXRpYyBib29sIExvb2t1cEFs
dE5hbWUoY29uc3QgU3RyaW5nJiBuYW1lLCBTdHJpbmcmIGFsdE5hbWUpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIHN0YXRpYyBpbnQgc3lzdGVtQ3AgPSA6OkdldEFDUCgpOwotICAgIGlu
dCBmb250Q3AgPSBpdGVyLT5zZWNvbmQtPmNvZGVQYWdlOworICAgIGludCBmb250Q3AgPSBpdGVy
LT52YWx1ZS0+Y29kZVBhZ2U7CiAKICAgICBpZiAoKGlzQXNjaWkgJiYgc3lzdGVtQ3AgPT0gZm9u
dENwKSB8fCAoIWlzQXNjaWkgJiYgc3lzdGVtQ3AgIT0gZm9udENwKSkgewotICAgICAgICBhbHRO
YW1lID0gU3RyaW5nKGl0ZXItPnNlY29uZC0+bmFtZSk7CisgICAgICAgIGFsdE5hbWUgPSBTdHJp
bmcoaXRlci0+dmFsdWUtPm5hbWUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAg
LTI3Niw3ICsyNzYsNyBAQCBzdGF0aWMgYm9vbCBmb250Q29udGFpbnNDaGFyYWN0ZXIoY29uc3Qg
Rm9udFBsYXRmb3JtRGF0YSogZm9udERhdGEsCiAKICAgICBIYXNoTWFwPGNvbnN0IHdjaGFyX3Qq
LCBpY3U6OlVuaWNvZGVTZXQqPjo6aXRlcmF0b3IgaXQgPSBmb250Q21hcENhY2hlLT5maW5kKGZh
bWlseSk7CiAgICAgaWYgKGl0ICE9IGZvbnRDbWFwQ2FjaGUtPmVuZCgpKSAKLSAgICAgICAgcmV0
dXJuIGl0LT5zZWNvbmQtPmNvbnRhaW5zKGNoYXJhY3Rlcik7CisgICAgICAgIHJldHVybiBpdC0+
dmFsdWUtPmNvbnRhaW5zKGNoYXJhY3Rlcik7CiAgICAgCiAgICAgSEZPTlQgaGZvbnQgPSBmb250
RGF0YS0+aGZvbnQoKTsgCiAgICAgSFduZERDIGhkYygwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRVdGlsc0Nocm9taXVtV2luLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRVdGlsc0No
cm9taXVtV2luLmNwcAppbmRleCBjYzUyYzUyZWI3MDU3ODJkZTFmOTY4ZGM4MDNjNDVlNGYyYWUy
MjkyLi4yZmZhYmJiNzY4MmRlYThhMGUxZmM5ZmRhZWU5YzcxODA1YTQyYTA4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250VXRpbHNDaHJv
bWl1bVdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vRm9udFV0aWxzQ2hyb21pdW1XaW4uY3BwCkBAIC00MTUsNyArNDE1LDcgQEAgYm9vbCBnZXRE
ZXJpdmVkRm9udERhdGEoY29uc3QgVUNoYXIqIGZhbWlseSwKICAgICAgICAgLy8gY2hlY2sgaXQg
YWdhaW5zdCB3aGF0IHdlIGFjdHVhbGx5IHdhbnQgKGFzIGlzIGRvbmUgaW4KICAgICAgICAgLy8g
Rm9udENhY2hlV2luLmNwcCkKICAgICAgICAgRm9udERhdGFDYWNoZTo6QWRkUmVzdWx0IGVudHJ5
ID0gZm9udERhdGFDYWNoZS5hZGQoZm9udEtleSwgRm9udERhdGEoKSk7Ci0gICAgICAgIGRlcml2
ZWQgPSAmZW50cnkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgZGVyaXZlZCA9ICZlbnRyeS5p
dGVyYXRvci0+dmFsdWU7CiAgICAgICAgIGRlcml2ZWQtPmhmb250ID0gQ3JlYXRlRm9udEluZGly
ZWN0KGxvZ2ZvbnQpOwogICAgICAgICAvLyBHZXRBc2NlbnQgbWF5IHJldHVybiBrVW5kZWZpbmVk
QXNjZW50LCBidXQgd2Ugc3RpbGwgd2FudCB0bwogICAgICAgICAvLyBjYWNoZSBpdCBzbyB0aGF0
IHdlIHdvbid0IGhhdmUgdG8gY2FsbCBDcmVhdGVGb250SW5kaXJlY3Qgb25jZQpAQCAtNDIzLDcg
KzQyMyw3IEBAIGJvb2wgZ2V0RGVyaXZlZEZvbnREYXRhKGNvbnN0IFVDaGFyKiBmYW1pbHksCiAg
ICAgICAgIGRlcml2ZWQtPmFzY2VudCA9IGdldEFzY2VudChkZXJpdmVkLT5oZm9udCk7CiAgICAg
ICAgIGRlcml2ZWQtPnNwYWNlR2x5cGggPSBnZXRTcGFjZUdseXBoKGRlcml2ZWQtPmhmb250KTsK
ICAgICB9IGVsc2UgewotICAgICAgICBkZXJpdmVkID0gJml0ZXItPnNlY29uZDsKKyAgICAgICAg
ZGVyaXZlZCA9ICZpdGVyLT52YWx1ZTsKICAgICAgICAgLy8gTGFzdCB0aW1lLCBHZXRBc2NlbnQg
ZmFpbGVkIHNvIHRoYXQgb25seSBIRk9OVCB3YXMKICAgICAgICAgLy8gY2FjaGVkLiBUcnkgb25j
ZSBtb3JlIGFzc3VtaW5nIHRoYXQgVHJ5UHJlbG9hZEZvbnQKICAgICAgICAgLy8gd2FzIGNhbGxl
ZCBieSBhIGNhbGxlciBiZXR3ZWVuIGNhbGxzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJv
bWl1bS5jcHAKaW5kZXggZGIwYmExYzJjOWQyMjQ5MmNjNTI5YmZjMTJhNTJkZTkzNjBmZjRiNy4u
NGQ1ZWEwYjQ2NzE4YTM2MmUwYjY5YjJjN2VjZjVlNWJkNGUwODE1MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9t
aXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9H
cmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCkBAIC03NDAsNyArNzQwLDcgQEAgaW50IEdyYXBoaWNz
TGF5ZXJDaHJvbWl1bTo6bWFwQW5pbWF0aW9uTmFtZVRvSWQoY29uc3QgU3RyaW5nJiBhbmltYXRp
b25OYW1lKQogICAgIGlmICghbV9hbmltYXRpb25JZE1hcC5jb250YWlucyhhbmltYXRpb25OYW1l
KSkKICAgICAgICAgbV9hbmltYXRpb25JZE1hcC5hZGQoYW5pbWF0aW9uTmFtZSwgc19uZXh0QW5p
bWF0aW9uSWQrKyk7CiAKLSAgICByZXR1cm4gbV9hbmltYXRpb25JZE1hcC5maW5kKGFuaW1hdGlv
bk5hbWUpLT5zZWNvbmQ7CisgICAgcmV0dXJuIG1fYW5pbWF0aW9uSWRNYXAuZmluZChhbmltYXRp
b25OYW1lKS0+dmFsdWU7CiB9CiAKIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpub3RpZnlB
bmltYXRpb25TdGFydGVkKGRvdWJsZSBzdGFydFRpbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5jcHAK
aW5kZXggMGM2ZmUxNGY5YWQ2NWZjMDJmMmQ1ZTQ5ZWY1MjU0NTMyNDJmYTZmYi4uZjhhY2QyZDRk
MGFiZTYxYWU4ZmM4YjhlODQ5Mjk1YzdkMmRmOTQ1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmNw
cApAQCAtMTQ3LDcgKzE0Nyw3IEBAIHZvaWQgVGV4dHVyZU1hbmFnZXI6OnJlbGVhc2VUb2tlbihU
ZXh0dXJlVG9rZW4gdG9rZW4pCiB7CiAgICAgVGV4dHVyZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3Rl
eHR1cmVzLmZpbmQodG9rZW4pOwogICAgIGlmIChpdCAhPSBtX3RleHR1cmVzLmVuZCgpKQotICAg
ICAgICByZW1vdmVUZXh0dXJlKHRva2VuLCBpdC0+c2Vjb25kKTsKKyAgICAgICAgcmVtb3ZlVGV4
dHVyZSh0b2tlbiwgaXQtPnZhbHVlKTsKIH0KIAogYm9vbCBUZXh0dXJlTWFuYWdlcjo6aGFzVGV4
dHVyZShUZXh0dXJlVG9rZW4gdG9rZW4pCkBAIC0xNzUsMTMgKzE3NSwxMyBAQCB2b2lkIFRleHR1
cmVNYW5hZ2VyOjp1bnByb3RlY3RUZXh0dXJlKFRleHR1cmVUb2tlbiB0b2tlbikKIHsKICAgICBU
ZXh0dXJlTWFwOjppdGVyYXRvciBpdCA9IG1fdGV4dHVyZXMuZmluZCh0b2tlbik7CiAgICAgaWYg
KGl0ICE9IG1fdGV4dHVyZXMuZW5kKCkpCi0gICAgICAgIGl0LT5zZWNvbmQuaXNQcm90ZWN0ZWQg
PSBmYWxzZTsKKyAgICAgICAgaXQtPnZhbHVlLmlzUHJvdGVjdGVkID0gZmFsc2U7CiB9CiAKIHZv
aWQgVGV4dHVyZU1hbmFnZXI6OnVucHJvdGVjdEFsbFRleHR1cmVzKCkKIHsKICAgICBmb3IgKFRl
eHR1cmVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90ZXh0dXJlcy5iZWdpbigpOyBpdCAhPSBtX3RleHR1
cmVzLmVuZCgpOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLmlzUHJvdGVjdGVkID0gZmFsc2U7
CisgICAgICAgIGl0LT52YWx1ZS5pc1Byb3RlY3RlZCA9IGZhbHNlOwogfQogCiB2b2lkIFRleHR1
cmVNYW5hZ2VyOjpldmljdFRleHR1cmUoVGV4dHVyZVRva2VuIHRva2VuLCBUZXh0dXJlSW5mbyBp
bmZvKQpAQCAtMjYyLDcgKzI2Miw3IEBAIHVuc2lnbmVkIFRleHR1cmVNYW5hZ2VyOjphbGxvY2F0
ZVRleHR1cmUoVGV4dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yLCBUZXh0dXJlVG9rCiB7CiAgICAg
VGV4dHVyZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RleHR1cmVzLmZpbmQodG9rZW4pOwogICAgIEFT
U0VSVChpdCAhPSBtX3RleHR1cmVzLmVuZCgpKTsKLSAgICBUZXh0dXJlSW5mbyogaW5mbyA9ICZp
dC5nZXQoKS0+c2Vjb25kOworICAgIFRleHR1cmVJbmZvKiBpbmZvID0gJml0LmdldCgpLT52YWx1
ZTsKICAgICBBU1NFUlQoaW5mby0+aXNQcm90ZWN0ZWQpOwogCiAgICAgdW5zaWduZWQgdGV4dHVy
ZUlkID0gYWxsb2NhdG9yLT5jcmVhdGVUZXh0dXJlKGluZm8tPnNpemUsIGluZm8tPmZvcm1hdCk7
CkBAIC0yODAsOCArMjgwLDggQEAgYm9vbCBUZXh0dXJlTWFuYWdlcjo6cmVxdWVzdFRleHR1cmUo
VGV4dHVyZVRva2VuIHRva2VuLCBJbnRTaXplIHNpemUsIHVuc2lnbmVkIGYKIAogICAgIFRleHR1
cmVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90ZXh0dXJlcy5maW5kKHRva2VuKTsKICAgICBpZiAoaXQg
IT0gbV90ZXh0dXJlcy5lbmQoKSkgewotICAgICAgICBBU1NFUlQoaXQtPnNlY29uZC5zaXplICE9
IHNpemUgfHwgaXQtPnNlY29uZC5mb3JtYXQgIT0gZm9ybWF0KTsKLSAgICAgICAgcmVtb3ZlVGV4
dHVyZSh0b2tlbiwgaXQtPnNlY29uZCk7CisgICAgICAgIEFTU0VSVChpdC0+dmFsdWUuc2l6ZSAh
PSBzaXplIHx8IGl0LT52YWx1ZS5mb3JtYXQgIT0gZm9ybWF0KTsKKyAgICAgICAgcmVtb3ZlVGV4
dHVyZSh0b2tlbiwgaXQtPnZhbHVlKTsKICAgICB9CiAKICAgICBzaXplX3QgbWVtb3J5UmVxdWly
ZWRCeXRlcyA9IG1lbW9yeVVzZUJ5dGVzKHNpemUsIGZvcm1hdCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXll
ckNocm9taXVtLmNwcAppbmRleCAwMTBhNDMxOGM4M2FkYzg3OGU0YTdjMDcwYzNlMjk4ZThhOTEz
Y2UyLi5iNDc5YTdhN2VmMmI3MWU1ODAxMjQ5ODhhMzljOWUzM2MxODk3MGMxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hy
b21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTI2Nyw5ICsyNjcsOSBAQCB2b2lkIFRpbGVkTGF5
ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyhDQ0xheWVySW1wbCogbGF5ZXIpCiAgICAgVmVj
dG9yPFVwZGF0YWJsZVRpbGUqPiBpbnZhbGlkVGlsZXM7CiAKICAgICBmb3IgKENDTGF5ZXJUaWxp
bmdEYXRhOjpUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbV90aWxlci0+dGlsZXMoKS5i
ZWdpbigpOyBpdGVyICE9IG1fdGlsZXItPnRpbGVzKCkuZW5kKCk7ICsraXRlcikgewotICAgICAg
ICBpbnQgaSA9IGl0ZXItPmZpcnN0LmZpcnN0OwotICAgICAgICBpbnQgaiA9IGl0ZXItPmZpcnN0
LnNlY29uZDsKLSAgICAgICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHN0YXRpY19jYXN0PFVwZGF0
YWJsZVRpbGUqPihpdGVyLT5zZWNvbmQuZ2V0KCkpOworICAgICAgICBpbnQgaSA9IGl0ZXItPmtl
eS5maXJzdDsKKyAgICAgICAgaW50IGogPSBpdGVyLT5rZXkuc2Vjb25kOworICAgICAgICBVcGRh
dGFibGVUaWxlKiB0aWxlID0gc3RhdGljX2Nhc3Q8VXBkYXRhYmxlVGlsZSo+KGl0ZXItPnZhbHVl
LmdldCgpKTsKICAgICAgICAgaWYgKCF0aWxlLT5tYW5hZ2VkVGV4dHVyZSgpLT5pc1ZhbGlkKG1f
dGlsZXItPnRpbGVTaXplKCksIG1fdGV4dHVyZUZvcm1hdCkpIHsKICAgICAgICAgICAgIGludmFs
aWRUaWxlcy5hcHBlbmQodGlsZSk7CiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTI5NCw3ICsy
OTQsNyBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJUcmVlSG9zdChDQ0xheWVy
VHJlZUhvc3QqIGhvc3QpCiB7CiAgICAgaWYgKGhvc3QgJiYgaG9zdCAhPSBsYXllclRyZWVIb3N0
KCkpIHsKICAgICAgICAgZm9yIChDQ0xheWVyVGlsaW5nRGF0YTo6VGlsZU1hcDo6Y29uc3RfaXRl
cmF0b3IgaXRlciA9IG1fdGlsZXItPnRpbGVzKCkuYmVnaW4oKTsgaXRlciAhPSBtX3RpbGVyLT50
aWxlcygpLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgICAgIFVwZGF0YWJsZVRpbGUqIHRpbGUg
PSBzdGF0aWNfY2FzdDxVcGRhdGFibGVUaWxlKj4oaXRlci0+c2Vjb25kLmdldCgpKTsKKyAgICAg
ICAgICAgIFVwZGF0YWJsZVRpbGUqIHRpbGUgPSBzdGF0aWNfY2FzdDxVcGRhdGFibGVUaWxlKj4o
aXRlci0+dmFsdWUuZ2V0KCkpOwogICAgICAgICAgICAgdGlsZS0+bWFuYWdlZFRleHR1cmUoKS0+
c2V0VGV4dHVyZU1hbmFnZXIoaG9zdC0+Y29udGVudHNUZXh0dXJlTWFuYWdlcigpKTsKICAgICAg
ICAgfQogICAgIH0KQEAgLTM0Niw3ICszNDYsNyBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6
aW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0KQogICAgICAgICByZXR1cm47
CiAKICAgICBmb3IgKENDTGF5ZXJUaWxpbmdEYXRhOjpUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBp
dGVyID0gbV90aWxlci0+dGlsZXMoKS5iZWdpbigpOyBpdGVyICE9IG1fdGlsZXItPnRpbGVzKCku
ZW5kKCk7ICsraXRlcikgewotICAgICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gc3RhdGljX2Nh
c3Q8VXBkYXRhYmxlVGlsZSo+KGl0ZXItPnNlY29uZC5nZXQoKSk7CisgICAgICAgIFVwZGF0YWJs
ZVRpbGUqIHRpbGUgPSBzdGF0aWNfY2FzdDxVcGRhdGFibGVUaWxlKj4oaXRlci0+dmFsdWUuZ2V0
KCkpOwogICAgICAgICBBU1NFUlQodGlsZSk7CiAgICAgICAgIEludFJlY3QgYm91bmQgPSBtX3Rp
bGVyLT50aWxlUmVjdCh0aWxlKTsKICAgICAgICAgYm91bmQuaW50ZXJzZWN0KGxheWVyUmVjdCk7
CkBAIC01OTIsNyArNTkyLDcgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnJlc2V0VXBkYXRl
U3RhdGUoKQogICAgIC8vIFJlc2V0IG1fdXBkYXRlUmVjdCBmb3IgYWxsIHRpbGVzLgogICAgIEND
TGF5ZXJUaWxpbmdEYXRhOjpUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3RpbGVyLT50
aWxlcygpLmVuZCgpOwogICAgIGZvciAoQ0NMYXllclRpbGluZ0RhdGE6OlRpbGVNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ZXIgPSBtX3RpbGVyLT50aWxlcygpLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyAr
K2l0ZXIpIHsKLSAgICAgICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHN0YXRpY19jYXN0PFVwZGF0
YWJsZVRpbGUqPihpdGVyLT5zZWNvbmQuZ2V0KCkpOworICAgICAgICBVcGRhdGFibGVUaWxlKiB0
aWxlID0gc3RhdGljX2Nhc3Q8VXBkYXRhYmxlVGlsZSo+KGl0ZXItPnZhbHVlLmdldCgpKTsKICAg
ICAgICAgdGlsZS0+bV91cGRhdGVSZWN0ID0gSW50UmVjdCgpOwogICAgICAgICB0aWxlLT5tX3Bh
cnRpYWxVcGRhdGUgPSBmYWxzZTsKICAgICAgICAgdGlsZS0+bV91cGRhdGVkID0gZmFsc2U7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0RhbWFnZVRyYWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NEYW1hZ2VUcmFja2VyLmNwcAppbmRleCBkNGI0Y2Y5MTZiMTJiMTNhZjdkZmE2
MmFkZTUzMjYzMDFmZmI5YzE2Li5lNjRhM2Q3MGUzYTA3MjUxY2ZkZmZlNzI0MDE0MzE5ZjY2Yjk1
NDVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0RhbWFnZVRyYWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDRGFtYWdlVHJhY2tlci5jcHAKQEAgLTE5OCw3ICsxOTgsNyBA
QCBGbG9hdFJlY3QgQ0NEYW1hZ2VUcmFja2VyOjp0cmFja0RhbWFnZUZyb21MZWZ0b3ZlclJlY3Rz
KCkKICAgICBGbG9hdFJlY3QgZGFtYWdlUmVjdCA9IEZsb2F0UmVjdCgpOwogCiAgICAgZm9yIChS
ZWN0TWFwOjppdGVyYXRvciBpdCA9IG1fY3VycmVudFJlY3RIaXN0b3J5LT5iZWdpbigpOyBpdCAh
PSBtX2N1cnJlbnRSZWN0SGlzdG9yeS0+ZW5kKCk7ICsraXQpCi0gICAgICAgIGRhbWFnZVJlY3Qu
dW5pdGUoaXQtPnNlY29uZCk7CisgICAgICAgIGRhbWFnZVJlY3QudW5pdGUoaXQtPnZhbHVlKTsK
IAogICAgIG1fY3VycmVudFJlY3RIaXN0b3J5LT5jbGVhcigpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVGlsaW5nRGF0
YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVGlsaW5nRGF0YS5jcHAKaW5kZXggNDJmMWU4ZDFhYjU5OGM4Mzc1ZDViNWMxN2RkMjVlNjBl
ODNiYjYzNS4uMDRlM2Q2YTdiODQ0M2JjYjgyM2NjZGZkY2I3YjQ0NjY3OTUxOWViYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRpbGluZ0RhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUaWxpbmdEYXRhLmNwcApAQCAtMTM4LDggKzEzOCw4IEBAIHZvaWQg
Q0NMYXllclRpbGluZ0RhdGE6OnNldEJvdW5kcyhjb25zdCBJbnRTaXplJiBzaXplKQogICAgIGxh
eWVyUmVjdFRvVGlsZUluZGljZXMoSW50UmVjdChJbnRQb2ludCgpLCBzaXplKSwgbGVmdCwgdG9w
LCByaWdodCwgYm90dG9tKTsKICAgICBWZWN0b3I8VGlsZU1hcEtleT4gaW52YWxpZFRpbGVLZXlz
OwogICAgIGZvciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7
IGl0ICE9IG1fdGlsZXMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5maXJzdC5maXJz
dCA+IHJpZ2h0IHx8IGl0LT5maXJzdC5zZWNvbmQgPiBib3R0b20pCi0gICAgICAgICAgICBpbnZh
bGlkVGlsZUtleXMuYXBwZW5kKGl0LT5maXJzdCk7CisgICAgICAgIGlmIChpdC0+a2V5LmZpcnN0
ID4gcmlnaHQgfHwgaXQtPmtleS5zZWNvbmQgPiBib3R0b20pCisgICAgICAgICAgICBpbnZhbGlk
VGlsZUtleXMuYXBwZW5kKGl0LT5rZXkpOwogICAgIH0KICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGludmFsaWRUaWxlS2V5cy5zaXplKCk7ICsraSkKICAgICAgICAgbV90aWxlcy5yZW1vdmUo
aW52YWxpZFRpbGVLZXlzW2ldKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCmluZGV4
IDU3NmZjMmIzMTkwYTJkNjMwOTU3NTk4MTc1YzQzZWVmNGU3ODhjMjcuLjNjZGVhMjYyY2Y1NzM0
OTM1ODU0YWFlOWJiNmMzZTdhMmZmNjNhOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
LmNwcApAQCAtNjI5LDcgKzYyOSw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpzdGFydFJhdGVM
aW1pdGVyKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQogICAgIEFTU0VSVChjb250ZXh0KTsK
ICAgICBSYXRlTGltaXRlck1hcDo6aXRlcmF0b3IgaXQgPSBtX3JhdGVMaW1pdGVycy5maW5kKGNv
bnRleHQpOwogICAgIGlmIChpdCAhPSBtX3JhdGVMaW1pdGVycy5lbmQoKSkKLSAgICAgICAgaXQt
PnNlY29uZC0+c3RhcnQoKTsKKyAgICAgICAgaXQtPnZhbHVlLT5zdGFydCgpOwogICAgIGVsc2Ug
ewogICAgICAgICBSZWZQdHI8UmF0ZUxpbWl0ZXI+IHJhdGVMaW1pdGVyID0gUmF0ZUxpbWl0ZXI6
OmNyZWF0ZShjb250ZXh0KTsKICAgICAgICAgbV9yYXRlTGltaXRlcnMuc2V0KGNvbnRleHQsIHJh
dGVMaW1pdGVyKTsKQEAgLTY0MSw3ICs2NDEsNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c3Rv
cFJhdGVMaW1pdGVyKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQogewogICAgIFJhdGVMaW1p
dGVyTWFwOjppdGVyYXRvciBpdCA9IG1fcmF0ZUxpbWl0ZXJzLmZpbmQoY29udGV4dCk7CiAgICAg
aWYgKGl0ICE9IG1fcmF0ZUxpbWl0ZXJzLmVuZCgpKSB7Ci0gICAgICAgIGl0LT5zZWNvbmQtPnN0
b3AoKTsKKyAgICAgICAgaXQtPnZhbHVlLT5zdG9wKCk7CiAgICAgICAgIG1fcmF0ZUxpbWl0ZXJz
LnJlbW92ZShpdCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJQcm9ncmFtLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyUHJvZ3JhbS5jcHAKaW5k
ZXggMTMwNDQxYTFjZDA3NWVmNTc5NWI5M2MwYzk3YjdiMTEwZTlkNzJhZS4uNzg1OWM4YmJhNTdl
NGIxYjU0YzI4Y2E0ZmZmMGZhNWJiYzZkZWVkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJQcm9ncmFtLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclByb2dy
YW0uY3BwCkBAIC03Nyw3ICs3Nyw3IEBAIHZvaWQgQ3VzdG9tRmlsdGVyUHJvZ3JhbTo6cmVtb3Zl
Q2xpZW50KEN1c3RvbUZpbHRlclByb2dyYW1DbGllbnQqIGNsaWVudCkKIHZvaWQgQ3VzdG9tRmls
dGVyUHJvZ3JhbTo6bm90aWZ5Q2xpZW50cygpCiB7CiAgICAgZm9yIChDdXN0b21GaWx0ZXJQcm9n
cmFtQ2xpZW50TGlzdDo6aXRlcmF0b3IgaXRlciA9IG1fY2xpZW50cy5iZWdpbigpLCBlbmQgPSBt
X2NsaWVudHMuZW5kKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCi0gICAgICAgIGl0ZXItPmZpcnN0
LT5ub3RpZnlDdXN0b21GaWx0ZXJQcm9ncmFtTG9hZGVkKHRoaXMpOworICAgICAgICBpdGVyLT5r
ZXktPm5vdGlmeUN1c3RvbUZpbHRlclByb2dyYW1Mb2FkZWQodGhpcyk7CiB9CiAKICNpZiBFTkFC
TEUoV0VCR0wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
dGsvR0xDb250ZXh0R3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0
ay9HTENvbnRleHRHdGsuY3BwCmluZGV4IDZiMjQ2MWEwMzIxZWY2MGUyNjVkZjYxZDIyMzRjZTc1
NzY5NTk1NTEuLmFkNmZiNjk1NjEyOTMwY2MxMDZkODA4MzA3OWYzNWZlZTFkZWVjM2IgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HTENvbnRleHRHdGsu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HTENvbnRleHRH
dGsuY3BwCkBAIC00Nyw3ICs0Nyw3IEBAIEdMQ29udGV4dCogR0xDb250ZXh0OjpnZXRDb250ZXh0
Rm9yV2lkZ2V0KEd0a1dpZGdldCogd2lkZ2V0KQogICAgIFdpbmRvd0NvbnRleHRNYXAmIHdpbmRv
d0NvbnRleHRzID0gd2luZG93Q29udGV4dHNNYXAoKTsKICAgICBXaW5kb3dDb250ZXh0TWFwOjpp
dGVyYXRvciBpID0gd2luZG93Q29udGV4dHNNYXAoKS5maW5kKHdpZGdldCk7CiAgICAgaWYgKGkg
IT0gd2luZG93Q29udGV4dHMuZW5kKCkpCi0gICAgICAgIHJldHVybiBpLT5zZWNvbmQuZ2V0KCk7
CisgICAgICAgIHJldHVybiBpLT52YWx1ZS5nZXQoKTsKIAogICAgIC8vIEl0J3MgaW1wb3J0YW50
IHRoYXQgdGhpcyBjb250ZXh0IGRvZXNuJ3QgaGFuZyBhcm91bmQgYWZ0ZXIgdGhlIHdpbmRvdwog
ICAgIC8vIGlzIHVubWFwcGVkLCBzbyB3ZSBtYWtlIHN1cmUgdG8gY2xlYW4gaXQgdXAgb25jZSB0
aGF0IGhhcHBlbnMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9oYXJmYnV6ei9IYXJmQnV6elNraWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTa2lhLmNwcAppbmRleCBmNjhlYTYxOTI0NWY4NjZlNWJk
MGQ1NzhkMDEwNDg0NDUyNTg0YzJiLi4xZTg4NjdiYjc1N2YyMjQyZThmNDk2MmY4NzViMWJkZjdh
ZTk5MTJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJm
YnV6ei9IYXJmQnV6elNraWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2hhcmZidXp6L0hhcmZCdXp6U2tpYS5jcHAKQEAgLTI0NCwxOCArMjQ0LDE4IEBAIHN0YXRp
YyBIQl9GYWNlUmVjXyogZ2V0Q2FjaGVkSGFyZmJ1enpGYWNlKEZvbnRQbGF0Zm9ybURhdGEqIHBs
YXRmb3JtRGF0YSkKICAgICAgICAgZ0hhcmZidXp6RmFjZUNhY2hlLT5zZXQodW5pcXVlSUQsIGVu
dHJ5KTsKICAgICAgICAgcmV0dXJuIGVudHJ5LmZpcnN0OwogICAgIH0KLSAgICArKyhyZXN1bHQu
Z2V0KCktPnNlY29uZC5zZWNvbmQpOwotICAgIHJldHVybiByZXN1bHQuZ2V0KCktPnNlY29uZC5m
aXJzdDsKKyAgICArKyhyZXN1bHQuZ2V0KCktPnZhbHVlLnNlY29uZCk7CisgICAgcmV0dXJuIHJl
c3VsdC5nZXQoKS0+dmFsdWUuZmlyc3Q7CiB9CiAKIHN0YXRpYyB2b2lkIHJlbGVhc2VDYWNoZWRI
YXJmYnV6ekZhY2UoU2tGb250SUQgdW5pcXVlSUQpCiB7CiAgICAgSGFyZmJ1enpGYWNlQ2FjaGU6
Oml0ZXJhdG9yIHJlc3VsdCA9IGdIYXJmYnV6ekZhY2VDYWNoZS0+ZmluZCh1bmlxdWVJRCk7CiAg
ICAgQVNTRVJUKHJlc3VsdCAhPSBnSGFyZmJ1enpGYWNlQ2FjaGUtPmVuZCgpKTsKLSAgICBBU1NF
UlQocmVzdWx0LmdldCgpLT5zZWNvbmQuc2Vjb25kID4gMCk7Ci0gICAgLS0ocmVzdWx0LmdldCgp
LT5zZWNvbmQuc2Vjb25kKTsKLSAgICBpZiAoIShyZXN1bHQuZ2V0KCktPnNlY29uZC5zZWNvbmQp
KSB7Ci0gICAgICAgIEhCX0ZyZWVGYWNlKHJlc3VsdC5nZXQoKS0+c2Vjb25kLmZpcnN0KTsKKyAg
ICBBU1NFUlQocmVzdWx0LmdldCgpLT52YWx1ZS5zZWNvbmQgPiAwKTsKKyAgICAtLShyZXN1bHQu
Z2V0KCktPnZhbHVlLnNlY29uZCk7CisgICAgaWYgKCEocmVzdWx0LmdldCgpLT52YWx1ZS5zZWNv
bmQpKSB7CisgICAgICAgIEhCX0ZyZWVGYWNlKHJlc3VsdC5nZXQoKS0+dmFsdWUuZmlyc3QpOwog
ICAgICAgICBnSGFyZmJ1enpGYWNlQ2FjaGUtPnJlbW92ZSh1bmlxdWVJRCk7CiAgICAgfQogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhU
ZXh0Q29udHJvbGxlckFUU1VJLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXJBVFNVSS5jcHAKaW5kZXggYmU5Zjc0MTA0ZmU3NDM0
NDU3MTU2NDE2M2NmN2FhZDcwZTA3MmM0Zi4uNjJlYTRiZWQxYmEwNWM0NWQ5YmIyM2EzMzMyNWY1
YjRjYzI3MzU5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckFUU1VJLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyQVRTVUkuY3BwCkBAIC0y
NzksNyArMjc5LDcgQEAgc3RhdGljIEFUU1VTdHlsZSBpbml0aWFsaXplQVRTVVN0eWxlKGNvbnN0
IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwgVHlwZXNldHRpbmcKIHsKICAgICB1bnNpZ25lZCBr
ZXkgPSB0eXBlc2V0dGluZ0ZlYXR1cmVzICsgMTsKICAgICBIYXNoTWFwPHVuc2lnbmVkLCBBVFNV
U3R5bGU+OjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gZm9udERhdGEtPm1fQVRTVVN0eWxlTWFwLmFk
ZChrZXksIDApOwotICAgIEFUU1VTdHlsZSYgYXRzdVN0eWxlID0gYWRkUmVzdWx0Lml0ZXJhdG9y
LT5zZWNvbmQ7CisgICAgQVRTVVN0eWxlJiBhdHN1U3R5bGUgPSBhZGRSZXN1bHQuaXRlcmF0b3It
PnZhbHVlOwogICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkpCiAgICAgICAgIHJldHVybiBh
dHN1U3R5bGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L21hYy9TaW1wbGVGb250RGF0YUNvcmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YUNvcmVUZXh0LmNwcAppbmRleCAwNTE5Mzc0MmM1
ODUyZGJlOWM5Y2VkNjRiOWEwN2FhZDJjMWVhNDc3Li4wYjcxMzM0N2Y2MDQ2MzU1NDllNTBkNTYz
NjUyMThiMjM0NDI2YWNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvU2ltcGxlRm9udERhdGFDb3JlVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhQ29yZVRleHQuY3BwCkBAIC00Myw3
ICs0Myw3IEBAIENGRGljdGlvbmFyeVJlZiBTaW1wbGVGb250RGF0YTo6Z2V0Q0ZTdHJpbmdBdHRy
aWJ1dGVzKFR5cGVzZXR0aW5nRmVhdHVyZXMgdHlwZXNlCiB7CiAgICAgdW5zaWduZWQga2V5ID0g
dHlwZXNldHRpbmdGZWF0dXJlcyArIDE7CiAgICAgSGFzaE1hcDx1bnNpZ25lZCwgUmV0YWluUHRy
PENGRGljdGlvbmFyeVJlZj4gPjo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IG1fQ0ZTdHJpbmdBdHRy
aWJ1dGVzLmFkZChrZXksIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+KCkpOwotICAgIFJldGFp
blB0cjxDRkRpY3Rpb25hcnlSZWY+JiBhdHRyaWJ1dGVzRGljdGlvbmFyeSA9IGFkZFJlc3VsdC5p
dGVyYXRvci0+c2Vjb25kOworICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+JiBhdHRyaWJ1
dGVzRGljdGlvbmFyeSA9IGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCFhZGRS
ZXN1bHQuaXNOZXdFbnRyeSkKICAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZXNEaWN0aW9uYXJ5Lmdl
dCgpOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL1NpbXBsZUZvbnREYXRhTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL1NpbXBsZUZvbnREYXRhTWFjLm1tCmluZGV4IGQ1ZDU1NjA2ZDRmZjI1MzAwNjM5ODc1
NjI3ZjUzNWZmMzcxYzBlZDYuLjhhMWZiZDEyMGYwNzFhOGQ0ZjE2NWZkMGRkMWNkYmZjYWE0MDdl
ODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1w
bGVGb250RGF0YU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9t
YWMvU2ltcGxlRm9udERhdGFNYWMubW0KQEAgLTMyMyw3ICszMjMsNyBAQCB2b2lkIFNpbXBsZUZv
bnREYXRhOjpwbGF0Zm9ybURlc3Ryb3koKQogI2lmIFVTRShBVFNVSSkKICAgICBIYXNoTWFwPHVu
c2lnbmVkLCBBVFNVU3R5bGU+OjppdGVyYXRvciBlbmQgPSBtX0FUU1VTdHlsZU1hcC5lbmQoKTsK
ICAgICBmb3IgKEhhc2hNYXA8dW5zaWduZWQsIEFUU1VTdHlsZT46Oml0ZXJhdG9yIGl0ID0gbV9B
VFNVU3R5bGVNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBBVFNVRGlzcG9z
ZVN0eWxlKGl0LT5zZWNvbmQpOworICAgICAgICBBVFNVRGlzcG9zZVN0eWxlKGl0LT52YWx1ZSk7
CiAjZW5kaWYKIH0KIApAQCAtNDczLDcgKzQ3Myw3IEBAIGJvb2wgU2ltcGxlRm9udERhdGE6OmNh
blJlbmRlckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
CiAKICAgICBXVEY6Okhhc2hNYXA8U3RyaW5nLCBib29sPjo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9
IG1fY29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2VTdXBwb3J0LT5hZGQoU3RyaW5nKGNoYXJhY3Rl
cnMsIGxlbmd0aCksIGZhbHNlKTsKICAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5KQotICAg
ICAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBh
ZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogCiAgICAgUmV0YWluUHRyPENHRm9udFJlZj4gY2dG
b250KEFkb3B0Q0YsIENURm9udENvcHlHcmFwaGljc0ZvbnQocGxhdGZvcm1EYXRhKCkuY3RGb250
KCksIDApKTsKIApAQCAtNDkzLDcgKzQ5Myw3IEBAIGJvb2wgU2ltcGxlRm9udERhdGE6OmNhblJl
bmRlckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgYWRkUmVzdWx0Lml0ZXJhdG9y
LT5zZWNvbmQgPSB0cnVlOworICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSB0cnVlOwog
ICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3Bl
bkdMQ29tbW9uLmNwcAppbmRleCA5MTIzZWQwYjIwM2VmNDRmMGRkMzZlMmZjZmY3NzkwZGM2OTdm
MjNmLi43MjRjMDQwNjIyMDc1ZWIxNmI5YzJiNjhiOTVkZTBkZTE1MzgxZGE4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
M0RPcGVuR0xDb21tb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAKQEAgLTQ2NSw3ICs0NjUs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb21waWxlU2hhZGVyKFBsYXRmb3JtM0RPYmpl
Y3Qgc2hhZGVyKQogICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIFNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3VsdC0+
c2Vjb25kOworICAgIFNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3VsdC0+dmFsdWU7CiAK
ICAgICBTdHJpbmcgdHJhbnNsYXRlZFNoYWRlclNvdXJjZTsKICAgICBTdHJpbmcgc2hhZGVySW5m
b0xvZzsKQEAgLTExNzEsNyArMTE3MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNo
YWRlcml2KFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyLCBHQzNEZW51bSBwbmFtZSwgR0MzCiAgICAg
ICAgICAgICAqdmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ+KGZhbHNlKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQotICAgICAgICAqdmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ+KHJlc3Vs
dC0+c2Vjb25kLmlzVmFsaWQpOworICAgICAgICAqdmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ+KHJl
c3VsdC0+dmFsdWUuaXNWYWxpZCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSU5GT19MT0df
TEVOR1RIOgogICAgICAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKSB7
CkBAIC0xMTk4LDcgKzExOTgsNyBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRl
ckluZm9Mb2coUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCiAgICAgaWYgKHJlc3VsdCA9PSBtX3No
YWRlclNvdXJjZU1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOyAKIAotICAgIFNo
YWRlclNvdXJjZUVudHJ5IGVudHJ5ID0gcmVzdWx0LT5zZWNvbmQ7CisgICAgU2hhZGVyU291cmNl
RW50cnkgZW50cnkgPSByZXN1bHQtPnZhbHVlOwogICAgIGlmICghZW50cnkuaXNWYWxpZCkKICAg
ICAgICAgcmV0dXJuIGVudHJ5LmxvZzsKIApAQCAtMTIyNCw3ICsxMjI0LDcgQEAgU3RyaW5nIEdy
YXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIp
CiAgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKICAgICAgICAgcmV0
dXJuIFN0cmluZygpOyAKIAotICAgIHJldHVybiByZXN1bHQtPnNlY29uZC5zb3VyY2U7CisgICAg
cmV0dXJuIHJlc3VsdC0+dmFsdWUuc291cmNlOwogfQogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
QW5pbWF0aW9uLmNwcAppbmRleCA0YzkyYzU5N2QzZjg4ODg5M2I0YjYwZjVjZDg1MmI2NjFkYjMy
MGY0Li5hOTU5MDUxZmMyMDhiZDZiYzg0YTlkZDA4YTNlMGY0NWJlMThhNjQ0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFu
aW1hdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJBbmltYXRpb24uY3BwCkBAIC0xODIsNyArMTgyLDcgQEAgYm9vbCBUZXh0
dXJlTWFwcGVyQW5pbWF0aW9uczo6aGFzQWN0aXZlQW5pbWF0aW9uc09mVHlwZShBbmltYXRlZFBy
b3BlcnR5SUQgdHlwZSkKIHsKICAgICBIYXNoTWFwPFN0cmluZywgVGV4dHVyZU1hcHBlckFuaW1h
dGlvbj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fYW5pbWF0aW9ucy5lbmQoKTsKICAgICBmb3Ig
KEhhc2hNYXA8U3RyaW5nLCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uPjo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtX2FuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGNv
bnN0IFRleHR1cmVNYXBwZXJBbmltYXRpb24mIGFuaW1hdGlvbiA9IGl0LT5zZWNvbmQ7CisgICAg
ICAgIGNvbnN0IFRleHR1cmVNYXBwZXJBbmltYXRpb24mIGFuaW1hdGlvbiA9IGl0LT52YWx1ZTsK
ICAgICAgICAgaWYgKGFuaW1hdGlvbi5pc0FjdGl2ZSgpICYmIGFuaW1hdGlvbi5wcm9wZXJ0eSgp
ID09IHR5cGUpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0xOTMsNyArMTkz
LDcgQEAgYm9vbCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uczo6aGFzUnVubmluZ0FuaW1hdGlvbnMo
KSBjb25zdAogewogICAgIEhhc2hNYXA8U3RyaW5nLCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uPjo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9hbmltYXRpb25zLmVuZCgpOwogICAgIGZvciAoSGFzaE1h
cDxTdHJpbmcsIFRleHR1cmVNYXBwZXJBbmltYXRpb24+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1f
YW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgY29uc3QgVGV4
dHVyZU1hcHBlckFuaW1hdGlvbiYgYW5pbWF0aW9uID0gaXQtPnNlY29uZDsKKyAgICAgICAgY29u
c3QgVGV4dHVyZU1hcHBlckFuaW1hdGlvbiYgYW5pbWF0aW9uID0gaXQtPnZhbHVlOwogICAgICAg
ICBpZiAoYW5pbWF0aW9uLnN0YXRlKCkgPT0gVGV4dHVyZU1hcHBlckFuaW1hdGlvbjo6UGxheWlu
Z1N0YXRlKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMjUyLDE0ICsyNTIs
MTQgQEAgdm9pZCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uczo6cGF1c2UoY29uc3QgU3RyaW5nJiBu
YW1lLCBkb3VibGUgb2Zmc2V0KQogICAgIEhhc2hNYXA8U3RyaW5nLCBUZXh0dXJlTWFwcGVyQW5p
bWF0aW9uPjo6aXRlcmF0b3IgaXQgPSBtX2FuaW1hdGlvbnMuZmluZChuYW1lKTsKICAgICBpZiAo
aXQgPT0gbV9hbmltYXRpb25zLmVuZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgaXQtPnNlY29u
ZC5wYXVzZShvZmZzZXQpOworICAgIGl0LT52YWx1ZS5wYXVzZShvZmZzZXQpOwogfQogCiB2b2lk
IFRleHR1cmVNYXBwZXJBbmltYXRpb25zOjphcHBseShUZXh0dXJlTWFwcGVyQW5pbWF0aW9uQ2xp
ZW50KiBjbGllbnQpCiB7CiAgICAgSGFzaE1hcDxTdHJpbmcsIFRleHR1cmVNYXBwZXJBbmltYXRp
b24+OjppdGVyYXRvciBlbmQgPSBtX2FuaW1hdGlvbnMuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFw
PFN0cmluZywgVGV4dHVyZU1hcHBlckFuaW1hdGlvbj46Oml0ZXJhdG9yIGl0ID0gbV9hbmltYXRp
b25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC5hcHBseShj
bGllbnQpOworICAgICAgICBpdC0+dmFsdWUuYXBwbHkoY2xpZW50KTsKIH0KIAogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJHTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlckdMLmNwcAppbmRleCBiOGY4YjU0YmViODk2ZmQ3ZTYzMGNhZjc5MDUzMTBkNWFhMGE2
NDk1Li4wMzFiMzYyZGU1OGVkODU2YTZiMzMzMDBmYTg4NGEwNmI0NjcyMmM0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdM
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlckdMLmNwcApAQCAtMTE3LDcgKzExNyw3IEBAIHN0cnVjdCBUZXh0dXJlTWFwcGVyR0xE
YXRhIHsKICAgICAgICAgICAgIEdMQ29udGV4dCBjdXJyZW50R0xDb25leHQgPSBnZXRDdXJyZW50
R0xDb250ZXh0KCk7CiAgICAgICAgICAgICBHTENvbnRleHREYXRhTWFwOjppdGVyYXRvciBpdCA9
IGdsQ29udGV4dERhdGFNYXAoKS5maW5kKGN1cnJlbnRHTENvbmV4dCk7CiAgICAgICAgICAgICBp
ZiAoaXQgIT0gZ2xDb250ZXh0RGF0YU1hcCgpLmVuZCgpKQotICAgICAgICAgICAgICAgIHJldHVy
biBpdC0+c2Vjb25kOworICAgICAgICAgICAgICAgIHJldHVybiBpdC0+dmFsdWU7CiAKICAgICAg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2hhcmVkR0xEYXRhKGdldEN1cnJlbnRHTENvbnRl
eHQoKSkpOwogICAgICAgICB9CkBAIC0xODQsNyArMTg0LDcgQEAgc3RydWN0IFRleHR1cmVNYXBw
ZXJHTERhdGEgewogICAgICAgICAgICAgR0xDb250ZXh0RGF0YU1hcDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gZ2xDb250ZXh0RGF0YU1hcCgpLmVuZCgpOwogICAgICAgICAgICAgR0xDb250ZXh0RGF0
YU1hcDo6aXRlcmF0b3IgaXQ7CiAgICAgICAgICAgICBmb3IgKGl0ID0gZ2xDb250ZXh0RGF0YU1h
cCgpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgICAgIGlmIChpdC0+
c2Vjb25kID09IHRoaXMpCisgICAgICAgICAgICAgICAgaWYgKGl0LT52YWx1ZSA9PSB0aGlzKQog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFk
ZXJNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaAppbmRleCBkODQzMjcyOThjM2NjNDJmOWIzOGRlZGQ2
MmRmZjhlNTA1NjRhYmM1Li40YWQ1OTgxM2VjZWE0MTAyZDQ2NzA0OTg2ZjM0NGEzNDcyMDJiNDUz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaApAQCAtMTA5LDcgKzEw
OSw3IEBAIHB1YmxpYzoKIAogICAgICAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU1hcDo6
aXRlcmF0b3IgaXQgPSBtX3RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtTWFwLmZpbmQoc2hhZGVy
VHlwZSk7CiAgICAgICAgIGlmIChpdCAhPSBtX3RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtTWFw
LmVuZCgpKQotICAgICAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgICAgICByZXR1
cm4gaXQtPnZhbHVlOwogCiAgICAgICAgIHN3aXRjaCAoc2hhZGVyVHlwZSkgewogICAgICAgICBj
YXNlIFNpbXBsZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbmNlL0ZvbnRQbGF0Zm9ybURhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luY2UvRm9udFBsYXRmb3JtRGF0YS5jcHAKaW5kZXggMTk3OTBhZDQ5YjMzMDNkZDdi
NjJjN2U3YTBhODIzNjc3YjRjZmY1MS4uMTlmNTI0NTVkMTFiMzU0Y2M0ZDQzZTY4Mzk5Y2U3OWFj
OTliYzBiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
Y2UvRm9udFBsYXRmb3JtRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luY2UvRm9udFBsYXRmb3JtRGF0YS5jcHAKQEAgLTI4Nyw5ICsyODcsOSBAQCBzdGF0
aWMgUGFzc1JlZlB0cjxGaXhlZFNpemVGb250RGF0YT4gY3JlYXRlRml4ZWRTaXplRm9udERhdGEo
Y29uc3QgQXRvbWljU3RyaW5nJgogICAgIEZpeGVkU2l6ZUZvbnREYXRhS2V5IGtleShmYW1pbHks
IHdlaWdodCwgaXRhbGljKTsKICAgICBGaXhlZFNpemVGb250Q2FjaGU6OkFkZFJlc3VsdCByZXN1
bHQgPSBnX2ZpeGVkU2l6ZUZvbnRDYWNoZS5hZGQoa2V5LCBSZWZQdHI8Rml4ZWRTaXplRm9udERh
dGE+KCkpOwogICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgcmVzdWx0Lml0ZXJh
dG9yLT5zZWNvbmQgPSBGaXhlZFNpemVGb250RGF0YTo6Y3JlYXRlKGZhbWlseSwgd2VpZ2h0LCBp
dGFsaWMpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gRml4ZWRTaXplRm9udERh
dGE6OmNyZWF0ZShmYW1pbHksIHdlaWdodCwgaXRhbGljKTsKIAotICAgIHJldHVybiByZXN1bHQu
aXRlcmF0b3ItPnNlY29uZDsKKyAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIH0K
IAogc3RhdGljIExPTkcgdG9HRElGb250V2VpZ2h0KEZvbnRXZWlnaHQgZm9udFdlaWdodCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmNwcAppbmRleCAxYTg0
ZjhiZDMxOTUyYjI4ZTI2ODI3MWRkMmE1ZjU3ZjQ0ZDgyN2Q3Li5hZGZjNjZlMDE1ZTUwMjI2Nzg4
YzIxNDc2OGExNWIyOTEzNjg0M2I4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvRGF0YU9iamVjdEd0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L0RhdGFPYmplY3RHdGsuY3BwCkBAIC0xNzEsNyArMTcxLDcgQEAgRGF0YU9iamVjdEd0ayogRGF0
YU9iamVjdEd0azo6Zm9yQ2xpcGJvYXJkKEd0a0NsaXBib2FyZCogY2xpcGJvYXJkKQogICAgIH0K
IAogICAgIEhhc2hNYXA8R3RrQ2xpcGJvYXJkKiwgUmVmUHRyPERhdGFPYmplY3RHdGs+ID46Oml0
ZXJhdG9yIGl0ID0gb2JqZWN0TWFwLmZpbmQoY2xpcGJvYXJkKTsKLSAgICByZXR1cm4gaXQtPnNl
Y29uZC5nZXQoKTsKKyAgICByZXR1cm4gaXQtPnZhbHVlLmdldCgpOwogfQogCiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrRHJhZ0FuZERyb3BIZWxwZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0RyYWdBbmREcm9wSGVscGVyLmNwcApp
bmRleCA3NjNkMTIwZDA5NDE2MjI3MjY2MGM2MDYzMmExOTI5ODZmNTQyZWE0Li5mYzJmNTZlNjE2
NmViMWFhY2RiYWRhOGY1MmZlZjNjNmRkODg2NGNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvR3RrRHJhZ0FuZERyb3BIZWxwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9HdGtEcmFnQW5kRHJvcEhlbHBlci5jcHAKQEAgLTcwLDcgKzcwLDcg
QEAgdm9pZCBHdGtEcmFnQW5kRHJvcEhlbHBlcjo6aGFuZGxlR2V0RHJhZ0RhdGEoR2RrRHJhZ0Nv
bnRleHQqIGNvbnRleHQsIEd0a1NlbGVjdGkKICAgICBEcmFnZ2luZ0RhdGFPYmplY3RzTWFwOjpp
dGVyYXRvciBpdGVyYXRvciA9IG1fZHJhZ2dpbmdEYXRhT2JqZWN0cy5maW5kKGNvbnRleHQpOwog
ICAgIGlmIChpdGVyYXRvciA9PSBtX2RyYWdnaW5nRGF0YU9iamVjdHMuZW5kKCkpCiAgICAgICAg
IHJldHVybjsKLSAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigp
LT5maWxsU2VsZWN0aW9uRGF0YShzZWxlY3Rpb25EYXRhLCBpbmZvLCBpdGVyYXRvci0+c2Vjb25k
LmdldCgpKTsKKyAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigp
LT5maWxsU2VsZWN0aW9uRGF0YShzZWxlY3Rpb25EYXRhLCBpbmZvLCBpdGVyYXRvci0+dmFsdWUu
Z2V0KCkpOwogfQogCiBzdHJ1Y3QgSGFuZGxlRHJhZ0xhdGVyRGF0YSB7CkBAIC0xMTYsNyArMTE2
LDcgQEAgdm9pZCBHdGtEcmFnQW5kRHJvcEhlbHBlcjo6aGFuZGxlRHJhZ0xlYXZlKEdka0RyYWdD
b250ZXh0KiBnZGtDb250ZXh0LCBEcmFnRXhpdGUKICAgICAvLyB0aGUgZHJhZy1kcm9wIHNpZ25h
bC4gV2Ugd2FudCB0aGUgYWN0aW9ucyBmb3IgZHJhZy1sZWF2ZSB0byBoYXBwZW4gYWZ0ZXIKICAg
ICAvLyB0aG9zZSBmb3IgZHJhZy1kcm9wLCBzbyBzY2hlZHVsZSB0aGVtIHRvIGhhcHBlbiBhc3lu
Y2hyb25vdXNseSBoZXJlLgogICAgIEhhbmRsZURyYWdMYXRlckRhdGEqIGRhdGEgPSBuZXcgSGFu
ZGxlRHJhZ0xhdGVyRGF0YTsKLSAgICBkYXRhLT5jb250ZXh0ID0gaXRlcmF0b3ItPnNlY29uZDsK
KyAgICBkYXRhLT5jb250ZXh0ID0gaXRlcmF0b3ItPnZhbHVlOwogICAgIGRhdGEtPmNvbnRleHQt
PmV4aXRlZENhbGxiYWNrID0gZXhpdGVkQ2FsbGJhY2s7CiAgICAgZGF0YS0+Z2x1ZSA9IHRoaXM7
CiAgICAgZ190aW1lb3V0X2FkZCgwLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihoYW5k
bGVEcmFnTGVhdmVMYXRlckNhbGxiYWNrKSwgZGF0YSk7CkBAIC0xNDAsNyArMTQwLDcgQEAgUGFz
c093blB0cjxEcmFnRGF0YT4gR3RrRHJhZ0FuZERyb3BIZWxwZXI6OmhhbmRsZURyYWdNb3Rpb24o
R2RrRHJhZ0NvbnRleHQqIGNvbnQKICAgICAgICAgbV9kcm9wcGluZ0NvbnRleHRzLnNldChjb250
ZXh0LCBkcm9wcGluZ0NvbnRleHQpOwogICAgICAgICBxdWVyeU5ld0Ryb3BDb250ZXh0RGF0YShk
cm9wcGluZ0NvbnRleHQsIG1fd2lkZ2V0LCB0aW1lKTsKICAgICB9IGVsc2UgewotICAgICAgICBk
cm9wcGluZ0NvbnRleHQgPSBpdGVyYXRvci0+c2Vjb25kOworICAgICAgICBkcm9wcGluZ0NvbnRl
eHQgPSBpdGVyYXRvci0+dmFsdWU7CiAgICAgICAgIGRyb3BwaW5nQ29udGV4dC0+bGFzdE1vdGlv
blBvc2l0aW9uID0gcG9zaXRpb247CiAgICAgfQogCkBAIC0xNjIsNyArMTYyLDcgQEAgUGFzc093
blB0cjxEcmFnRGF0YT4gR3RrRHJhZ0FuZERyb3BIZWxwZXI6OmhhbmRsZURyYWdEYXRhUmVjZWl2
ZWQoR2RrRHJhZ0NvbnRleHQKICAgICBpZiAoaXRlcmF0b3IgPT0gbV9kcm9wcGluZ0NvbnRleHRz
LmVuZCgpKQogICAgICAgICByZXR1cm4gYWRvcHRQdHIoc3RhdGljX2Nhc3Q8RHJhZ0RhdGEqPigw
KSk7CiAKLSAgICBEcm9wcGluZ0NvbnRleHQqIGRyb3BwaW5nQ29udGV4dCA9IGl0ZXJhdG9yLT5z
ZWNvbmQ7CisgICAgRHJvcHBpbmdDb250ZXh0KiBkcm9wcGluZ0NvbnRleHQgPSBpdGVyYXRvci0+
dmFsdWU7CiAgICAgZHJvcHBpbmdDb250ZXh0LT5wZW5kaW5nRGF0YVJlcXVlc3RzLS07CiAgICAg
UGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+ZmlsbERhdGFPYmpl
Y3RGcm9tRHJvcERhdGEoc2VsZWN0aW9uRGF0YSwgaW5mbywgZHJvcHBpbmdDb250ZXh0LT5kYXRh
T2JqZWN0LmdldCgpKTsKIApAQCAtMTg1LDcgKzE4NSw3IEBAIFBhc3NPd25QdHI8RHJhZ0RhdGE+
IEd0a0RyYWdBbmREcm9wSGVscGVyOjpoYW5kbGVEcmFnRHJvcChHZGtEcmFnQ29udGV4dCogY29u
dGV4CiAgICAgaWYgKGl0ZXJhdG9yID09IG1fZHJvcHBpbmdDb250ZXh0cy5lbmQoKSkKICAgICAg
ICAgcmV0dXJuIGFkb3B0UHRyKHN0YXRpY19jYXN0PERyYWdEYXRhKj4oMCkpOwogCi0gICAgRHJv
cHBpbmdDb250ZXh0KiBkcm9wcGluZ0NvbnRleHQgPSBpdGVyYXRvci0+c2Vjb25kOworICAgIERy
b3BwaW5nQ29udGV4dCogZHJvcHBpbmdDb250ZXh0ID0gaXRlcmF0b3ItPnZhbHVlOwogICAgIGRy
b3BwaW5nQ29udGV4dC0+ZHJvcEhhcHBlbmVkID0gdHJ1ZTsKIAogICAgIHJldHVybiBhZG9wdFB0
cihuZXcgRHJhZ0RhdGEoZHJvcHBpbmdDb250ZXh0LT5kYXRhT2JqZWN0LmdldCgpLCBwb3NpdGlv
biwgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVH
dGszLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0azMuY3Bw
CmluZGV4IDcyMGYwZmQzNjAxYWQ1NWM0MWYwNDhkYTM4ZTkwYjE0MGM3ODQyYTkuLmVlNDJkNWRj
OTBhODNmNTY0ODg2MjZkYzM5ZTU2NDczMjJlYWZhNzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0azMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0azMuY3BwCkBAIC01Niw3ICs1Niw3IEBAIHN0YXRp
YyB2b2lkIGd0a1N0eWxlQ2hhbmdlZENhbGxiYWNrKEdPYmplY3QqLCBHUGFyYW1TcGVjKikKIHsK
ICAgICBTdHlsZUNvbnRleHRNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHN0eWxlQ29udGV4dE1h
cCgpLmVuZCgpOwogICAgIGZvciAoU3R5bGVDb250ZXh0TWFwOjpjb25zdF9pdGVyYXRvciBpdGVy
ID0gc3R5bGVDb250ZXh0TWFwKCkuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikKLSAgICAg
ICAgZ3RrX3N0eWxlX2NvbnRleHRfaW52YWxpZGF0ZShpdGVyLT5zZWNvbmQuZ2V0KCkpOworICAg
ICAgICBndGtfc3R5bGVfY29udGV4dF9pbnZhbGlkYXRlKGl0ZXItPnZhbHVlLmdldCgpKTsKIAog
ICAgIFBhZ2U6OnNjaGVkdWxlRm9yY2VkU3R5bGVSZWNhbGNGb3JBbGxQYWdlcygpOwogfQpAQCAt
NzksNyArNzksNyBAQCBzdGF0aWMgR3RrU3R5bGVDb250ZXh0KiBnZXRTdHlsZUNvbnRleHQoR1R5
cGUgd2lkZ2V0VHlwZSkKIHsKICAgICBTdHlsZUNvbnRleHRNYXA6OkFkZFJlc3VsdCByZXN1bHQg
PSBzdHlsZUNvbnRleHRNYXAoKS5hZGQod2lkZ2V0VHlwZSwgMCk7CiAgICAgaWYgKCFyZXN1bHQu
aXNOZXdFbnRyeSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLmdldCgp
OworICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKIAogICAgIEd0
a1dpZGdldFBhdGgqIHBhdGggPSBndGtfd2lkZ2V0X3BhdGhfbmV3KCk7CiAgICAgZ3RrX3dpZGdl
dF9wYXRoX2FwcGVuZF90eXBlKHBhdGgsIHdpZGdldFR5cGUpOwpAQCAtMTExLDcgKzExMSw3IEBA
IHN0YXRpYyBHdGtTdHlsZUNvbnRleHQqIGdldFN0eWxlQ29udGV4dChHVHlwZSB3aWRnZXRUeXBl
KQogICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9wYXRoKGNvbnRleHQuZ2V0KCksIHBhdGgpOwog
ICAgIGd0a193aWRnZXRfcGF0aF9mcmVlKHBhdGgpOwogCi0gICAgcmVzdWx0Lml0ZXJhdG9yLT5z
ZWNvbmQgPSBjb250ZXh0OworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBjb250ZXh0Owog
ICAgIHJldHVybiBjb250ZXh0LmdldCgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMubW0KaW5kZXggZTQ3NDY4YmQ1NjAzODY1ODkyZTJj
MTRkOTRhMzEzZGFhMDc2YTJjMy4uMmM4MGEyOTg2ZmZjOTk3N2RmNWViMWIwZTZhNzgxMzVmYzE1
NzhmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbGJhclRo
ZW1lTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxiYXJUaGVt
ZU1hYy5tbQpAQCAtODUsOCArODUsOCBAQCBzdGF0aWMgU2Nyb2xsYmFyUGFpbnRlck1hcCogc2Ny
b2xsYmFyTWFwKCkKICAgICAgICAgcmV0dXJuOwogICAgIFNjcm9sbGJhclBhaW50ZXJNYXA6Oml0
ZXJhdG9yIGVuZCA9IHNjcm9sbGJhck1hcCgpLT5lbmQoKTsKICAgICBmb3IgKFNjcm9sbGJhclBh
aW50ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gc2Nyb2xsYmFyTWFwKCktPmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewotICAgICAgICBpdC0+Zmlyc3QtPnN0eWxlQ2hhbmdlZCgpOwotICAgICAgICBp
dC0+Zmlyc3QtPmludmFsaWRhdGUoKTsKKyAgICAgICAgaXQtPmtleS0+c3R5bGVDaGFuZ2VkKCk7
CisgICAgICAgIGl0LT5rZXktPmludmFsaWRhdGUoKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbFN0b3JhZ2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFsU3RvcmFnZS5jcHAKaW5k
ZXggZjA5ODRmODg1NThkNWM3OWUyODM0ZTFhY2IyODZkOGE3OTdhMjVlNS4uMjgzN2ZmNjEzOTJm
MGE1YjMxNWRiNzliMjM5MTYyMTdmZjc4MmMwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFsU3RvcmFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFsU3RvcmFnZS5jcHAKQEAgLTE0Nyw3ICsxNDcs
NyBAQCBib29sIENyZWRlbnRpYWxTdG9yYWdlOjpzZXQoY29uc3QgQ3JlZGVudGlhbCYgY3JlZGVu
dGlhbCwgY29uc3QgS1VSTCYgdXJsKQogICAgIGlmIChpdGVyID09IHBhdGhUb0RlZmF1bHRQcm90
ZWN0aW9uU3BhY2VNYXAoKS5lbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEFTU0VS
VChvcmlnaW5zV2l0aENyZWRlbnRpYWxzKCkuY29udGFpbnMob3JpZ2luU3RyaW5nRnJvbVVSTCh1
cmwpKSk7Ci0gICAgcHJvdGVjdGlvblNwYWNlVG9DcmVkZW50aWFsTWFwKCkuc2V0KGl0ZXItPnNl
Y29uZCwgY3JlZGVudGlhbCk7CisgICAgcHJvdGVjdGlvblNwYWNlVG9DcmVkZW50aWFsTWFwKCku
c2V0KGl0ZXItPnZhbHVlLCBjcmVkZW50aWFsKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAt
MTU2LDcgKzE1Niw3IEBAIENyZWRlbnRpYWwgQ3JlZGVudGlhbFN0b3JhZ2U6OmdldChjb25zdCBL
VVJMJiB1cmwpCiAgICAgUGF0aFRvRGVmYXVsdFByb3RlY3Rpb25TcGFjZU1hcDo6aXRlcmF0b3Ig
aXRlciA9IGZpbmREZWZhdWx0UHJvdGVjdGlvblNwYWNlRm9yVVJMKHVybCk7CiAgICAgaWYgKGl0
ZXIgPT0gcGF0aFRvRGVmYXVsdFByb3RlY3Rpb25TcGFjZU1hcCgpLmVuZCgpKQogICAgICAgICBy
ZXR1cm4gQ3JlZGVudGlhbCgpOwotICAgIHJldHVybiBwcm90ZWN0aW9uU3BhY2VUb0NyZWRlbnRp
YWxNYXAoKS5nZXQoaXRlci0+c2Vjb25kKTsKKyAgICByZXR1cm4gcHJvdGVjdGlvblNwYWNlVG9D
cmVkZW50aWFsTWFwKCkuZ2V0KGl0ZXItPnZhbHVlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQSGVh
ZGVyTWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUEhlYWRlck1h
cC5jcHAKaW5kZXggNTAwOTFlMTlkM2FmNTZmZjRhOGRmMTc1YmY4OTc4NzAwNzYxNDI4MC4uZGVm
ZTFhZTg0YmYwYWRmMDc3OTQ5NTViMTFhNWRjNzNlYTAyM2UyNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQSGVhZGVyTWFwLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBIZWFkZXJNYXAuY3BwCkBAIC01Miw3ICs1Miw3
IEBAIFBhc3NPd25QdHI8Q3Jvc3NUaHJlYWRIVFRQSGVhZGVyTWFwRGF0YT4gSFRUUEhlYWRlck1h
cDo6Y29weURhdGEoKSBjb25zdAogCiAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kX2l0ID0gZW5kKCk7CiAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IGJlZ2luKCk7IGl0ICE9IGVuZF9pdDsgKytpdCkgewotICAgICAgICBkYXRhLT5hcHBlbmQo
bWFrZV9wYWlyKGl0LT5maXJzdC5zdHJpbmcoKS5pc29sYXRlZENvcHkoKSwgaXQtPnNlY29uZC5p
c29sYXRlZENvcHkoKSkpOworICAgICAgICBkYXRhLT5hcHBlbmQobWFrZV9wYWlyKGl0LT5rZXku
c3RyaW5nKCkuaXNvbGF0ZWRDb3B5KCksIGl0LT52YWx1ZS5pc29sYXRlZENvcHkoKSkpOwogICAg
IH0KICAgICByZXR1cm4gZGF0YS5yZWxlYXNlKCk7CiB9CkBAIC0xMDAsNyArMTAwLDcgQEAgU3Ry
aW5nIEhUVFBIZWFkZXJNYXA6OmdldChjb25zdCBjaGFyKiBuYW1lKSBjb25zdAogICAgIGNvbnN0
X2l0ZXJhdG9yIGkgPSBmaW5kPGNvbnN0IGNoYXIqLCBDYXNlRm9sZGluZ0NTdHJpbmdUcmFuc2xh
dG9yPihuYW1lKTsKICAgICBpZiAoaSA9PSBlbmQoKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygp
OwotICAgIHJldHVybiBpLT5zZWNvbmQ7CisgICAgcmV0dXJuIGktPnZhbHVlOwogfQogICAgIAog
Ym9vbCBIVFRQSGVhZGVyTWFwOjpjb250YWlucyhjb25zdCBjaGFyKiBuYW1lKSBjb25zdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9NSU1FSGVhZGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvTUlNRUhlYWRlci5jcHAKaW5kZXggNWQ2
Yjg1OGY0NmU0MzgzZmNiMmZlYTYyODU4YWY3NTMyZDQzYTVhZi4uZjRlM2ViZjY3NGRlNmJkMWQy
NGE5NTkwYTQ4MThiZWI2ZmQ4ZGU2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9NSU1FSGVhZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL01JTUVIZWFkZXIuY3BwCkBAIC04Niw3ICs4Niw3IEBAIFBhc3NSZWZQdHI8TUlNRUhl
YWRlcj4gTUlNRUhlYWRlcjo6cGFyc2VIZWFkZXIoU2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXIqIGJ1
ZmZlcikKICAgICBLZXlWYWx1ZU1hcDo6aXRlcmF0b3IgbWltZVBhcmFtZXRlcnNJdGVyYXRvciA9
IGtleVZhbHVlUGFpcnMuZmluZCgiY29udGVudC10eXBlIik7CiAgICAgaWYgKG1pbWVQYXJhbWV0
ZXJzSXRlcmF0b3IgIT0ga2V5VmFsdWVQYWlycy5lbmQoKSkgewogICAgICAgICAvLyBGSVhNRTog
bWFrZSBDb250ZW50VHlwZVBhcnNlciBtb3JlIGZsZXhpYmxlIHNvIHdlIGRvbid0IGhhdmUgdG8g
c3ludGhlc2l6ZSB0aGUgIkNvbnRlbnQtVHlwZToiLgotICAgICAgICBDb250ZW50VHlwZVBhcnNl
ciBjb250ZW50VHlwZVBhcnNlcihtYWtlU3RyaW5nKCJDb250ZW50LVR5cGU6IiwgbWltZVBhcmFt
ZXRlcnNJdGVyYXRvci0+c2Vjb25kKSk7CisgICAgICAgIENvbnRlbnRUeXBlUGFyc2VyIGNvbnRl
bnRUeXBlUGFyc2VyKG1ha2VTdHJpbmcoIkNvbnRlbnQtVHlwZToiLCBtaW1lUGFyYW1ldGVyc0l0
ZXJhdG9yLT52YWx1ZSkpOwogICAgICAgICBtaW1lSGVhZGVyLT5tX2NvbnRlbnRUeXBlID0gY29u
dGVudFR5cGVQYXJzZXIubWltZVR5cGUoKTsKICAgICAgICAgaWYgKCFtaW1lSGVhZGVyLT5pc011
bHRpcGFydCgpKQogICAgICAgICAgICAgbWltZUhlYWRlci0+bV9jaGFyc2V0ID0gY29udGVudFR5
cGVQYXJzZXIuY2hhcnNldCgpLnN0cmlwV2hpdGVTcGFjZSgpOwpAQCAtMTA1LDExICsxMDUsMTEg
QEAgUGFzc1JlZlB0cjxNSU1FSGVhZGVyPiBNSU1FSGVhZGVyOjpwYXJzZUhlYWRlcihTaGFyZWRC
dWZmZXJDaHVua1JlYWRlciogYnVmZmVyKQogCiAgICAgbWltZVBhcmFtZXRlcnNJdGVyYXRvciA9
IGtleVZhbHVlUGFpcnMuZmluZCgiY29udGVudC10cmFuc2Zlci1lbmNvZGluZyIpOwogICAgIGlm
IChtaW1lUGFyYW1ldGVyc0l0ZXJhdG9yICE9IGtleVZhbHVlUGFpcnMuZW5kKCkpCi0gICAgICAg
IG1pbWVIZWFkZXItPm1fY29udGVudFRyYW5zZmVyRW5jb2RpbmcgPSBwYXJzZUNvbnRlbnRUcmFu
c2ZlckVuY29kaW5nKG1pbWVQYXJhbWV0ZXJzSXRlcmF0b3ItPnNlY29uZCk7CisgICAgICAgIG1p
bWVIZWFkZXItPm1fY29udGVudFRyYW5zZmVyRW5jb2RpbmcgPSBwYXJzZUNvbnRlbnRUcmFuc2Zl
ckVuY29kaW5nKG1pbWVQYXJhbWV0ZXJzSXRlcmF0b3ItPnZhbHVlKTsKIAogICAgIG1pbWVQYXJh
bWV0ZXJzSXRlcmF0b3IgPSBrZXlWYWx1ZVBhaXJzLmZpbmQoImNvbnRlbnQtbG9jYXRpb24iKTsK
ICAgICBpZiAobWltZVBhcmFtZXRlcnNJdGVyYXRvciAhPSBrZXlWYWx1ZVBhaXJzLmVuZCgpKQot
ICAgICAgICBtaW1lSGVhZGVyLT5tX2NvbnRlbnRMb2NhdGlvbiA9IG1pbWVQYXJhbWV0ZXJzSXRl
cmF0b3ItPnNlY29uZDsKKyAgICAgICAgbWltZUhlYWRlci0+bV9jb250ZW50TG9jYXRpb24gPSBt
aW1lUGFyYW1ldGVyc0l0ZXJhdG9yLT52YWx1ZTsKIAogICAgIHJldHVybiBtaW1lSGVhZGVyLnJl
bGVhc2UoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
UmVzb3VyY2VIYW5kbGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNv
dXJjZUhhbmRsZS5jcHAKaW5kZXggN2RkYzQ3ZTRlYTc5OWE0NmRlZTZmMzJjZmQwNzhlZjc1MTU0
ZjFlZS4uNmQxMmY5ZDg5YjAyNDc3NDZhNTdlMWJiY2FmYjJjMjE3ZDU5MTAzNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAKQEAg
LTcxLDcgKzcxLDcgQEAgUGFzc1JlZlB0cjxSZXNvdXJjZUhhbmRsZT4gUmVzb3VyY2VIYW5kbGU6
OmNyZWF0ZShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY28KICAgICBCdWlsdGluUmVzb3Vy
Y2VIYW5kbGVDb25zdHJ1Y3Rvck1hcDo6aXRlcmF0b3IgcHJvdG9jb2xNYXBJdGVtID0gYnVpbHRp
blJlc291cmNlSGFuZGxlQ29uc3RydWN0b3JNYXAoKS5maW5kKHJlcXVlc3QudXJsKCkucHJvdG9j
b2woKSk7CiAKICAgICBpZiAocHJvdG9jb2xNYXBJdGVtICE9IGJ1aWx0aW5SZXNvdXJjZUhhbmRs
ZUNvbnN0cnVjdG9yTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiBwcm90b2NvbE1hcEl0ZW0t
PnNlY29uZChyZXF1ZXN0LCBjbGllbnQpOworICAgICAgICByZXR1cm4gcHJvdG9jb2xNYXBJdGVt
LT52YWx1ZShyZXF1ZXN0LCBjbGllbnQpOwogCiAgICAgUmVmUHRyPFJlc291cmNlSGFuZGxlPiBu
ZXdIYW5kbGUoYWRvcHRSZWYobmV3IFJlc291cmNlSGFuZGxlKHJlcXVlc3QsIGNsaWVudCwgZGVm
ZXJzTG9hZGluZywgc2hvdWxkQ29udGVudFNuaWZmKSkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcAppbmRleCAz
NTA5NzkyOTI3OGM3NjA2NGM0YjBkZWI5YWZlMzlmZjE5YmU0YzI0Li41MzE1YzFlMzc2YWYyNjg2
NGYzODE2MjI1NTliMDliOTZiYTFlMjdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHAKQEAgLTM3Myw3ICszNzMs
NyBAQCB2b2lkIFJlc291cmNlUmVxdWVzdEJhc2U6OmFkZEhUVFBIZWFkZXJGaWVsZChjb25zdCBB
dG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cgogICAgIHVwZGF0ZVJlc291cmNlUmVxdWVzdCgp
OwogICAgIEhUVFBIZWFkZXJNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX2h0dHBIZWFkZXJGaWVs
ZHMuYWRkKG5hbWUsIHZhbHVlKTsKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAg
ICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCArPSAiLCIgKyB2YWx1ZTsKKyAgICAgICAgcmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZSArPSAiLCIgKyB2YWx1ZTsKIAogICAgIGlmICh1cmwoKS5wcm90b2Nv
bElzSW5IVFRQRmFtaWx5KCkpCiAgICAgICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZh
bHNlOwpAQCAtMzgzLDcgKzM4Myw3IEBAIHZvaWQgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6YWRkSFRU
UEhlYWRlckZpZWxkcyhjb25zdCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJGaWVsZHMpCiB7CiAgICAg
SFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaGVhZGVyRmllbGRzLmVuZCgpOwog
ICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBoZWFkZXJGaWVsZHMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBhZGRIVFRQSGVhZGVyRmllbGQoaXQt
PmZpcnN0LCBpdC0+c2Vjb25kKTsKKyAgICAgICAgYWRkSFRUUEhlYWRlckZpZWxkKGl0LT5rZXks
IGl0LT52YWx1ZSk7CiB9CiAKIGJvb2wgZXF1YWxJZ25vcmluZ0hlYWRlckZpZWxkcyhjb25zdCBS
ZXNvdXJjZVJlcXVlc3RCYXNlJiBhLCBjb25zdCBSZXNvdXJjZVJlcXVlc3RCYXNlJiBiKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L05ldHdv
cmtKb2IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L05l
dHdvcmtKb2IuY3BwCmluZGV4IGE0YmFmZDRjOThiNzkwYjVhM2Y0M2Y5ODIxNmVjZGM3MWUxNTc4
NmYuLjZhMmQxZTgzNTJjOWU3ZTVkNTJiYmNkYmE4ZTNlNmUxMGJjNjMzZjQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9OZXR3b3JrSm9iLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvTmV0d29y
a0pvYi5jcHAKQEAgLTI0NSw5ICsyNDUsOSBAQCB2b2lkIE5ldHdvcmtKb2I6Om5vdGlmeUhlYWRl
cnNSZWNlaXZlZChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TmV0d29ya1JlcXVlc3Q6OkhlYQogICAg
IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpOZXR3b3JrUmVxdWVzdDo6SGVhZGVyTGlzdDo6Y29uc3Rf
aXRlcmF0b3IgZW5kSXQgPSBoZWFkZXJzLmVuZCgpOwogICAgIGZvciAoQmxhY2tCZXJyeTo6UGxh
dGZvcm06Ok5ldHdvcmtSZXF1ZXN0OjpIZWFkZXJMaXN0Ojpjb25zdF9pdGVyYXRvciBpdCA9IGhl
YWRlcnMuYmVnaW4oKTsgaXQgIT0gZW5kSXQ7ICsraXQpIHsKICAgICAgICAgaWYgKHNob3VsZERl
ZmVyTG9hZGluZygpKQotICAgICAgICAgICAgbV9kZWZlcnJlZERhdGEuZGVmZXJIZWFkZXJSZWNl
aXZlZChpdC0+Zmlyc3QuY19zdHIoKSwgaXQtPnNlY29uZC5jX3N0cigpKTsKKyAgICAgICAgICAg
IG1fZGVmZXJyZWREYXRhLmRlZmVySGVhZGVyUmVjZWl2ZWQoaXQtPmtleS5jX3N0cigpLCBpdC0+
dmFsdWUuY19zdHIoKSk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgU3RyaW5nIGtleVN0
cmluZyhpdC0+Zmlyc3QuY19zdHIoKSk7CisgICAgICAgICAgICBTdHJpbmcga2V5U3RyaW5nKGl0
LT5rZXkuY19zdHIoKSk7CiAgICAgICAgICAgICBTdHJpbmcgdmFsdWVTdHJpbmc7CiAgICAgICAg
ICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2Uoa2V5U3RyaW5nLCAiTG9jYXRpb24iKSkgewogICAg
ICAgICAgICAgICAgIC8vIExvY2F0aW9uLCBsaWtlIGFsbCBoZWFkZXJzLCBpcyBzdXBwb3NlZCB0
byBiZSBMYXRpbi0xLiBCdXQgc29tZSBzaXRlcyAod2lraXBlZGlhKSBzZW5kIGl0IGluIFVURi04
LgpAQCAtMjU4LDExICsyNTgsMTEgQEAgdm9pZCBOZXR3b3JrSm9iOjpub3RpZnlIZWFkZXJzUmVj
ZWl2ZWQoQmxhY2tCZXJyeTo6UGxhdGZvcm06Ok5ldHdvcmtSZXF1ZXN0OjpIZWEKICAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogbWF5YmUgd2Ugc2hvdWxkIGRvIHRoaXMgd2l0aCBvdGhlciBoZWFk
ZXJzPwogICAgICAgICAgICAgICAgIC8vIFNraXAgaXQgZm9yIG5vdyAtIHdlIGRvbid0IHdhbnQg
dG8gcmV3cml0ZSByYW5kb20gYnl0ZXMgdW5sZXNzIHdlJ3JlIHN1cmUuIChEZWZpbml0ZWx5IGRv
bid0IHdhbnQgdG8KICAgICAgICAgICAgICAgICAvLyByZXdyaXRlIGNvb2tpZXMsIGZvciBpbnN0
YW5jZS4pIE5lZWRzIG1vcmUgaW52ZXN0aWdhdGlvbi4KLSAgICAgICAgICAgICAgICB2YWx1ZVN0
cmluZyA9IFN0cmluZzo6ZnJvbVVURjgoaXQtPnNlY29uZC5jX3N0cigpKTsKKyAgICAgICAgICAg
ICAgICB2YWx1ZVN0cmluZyA9IFN0cmluZzo6ZnJvbVVURjgoaXQtPnZhbHVlLmNfc3RyKCkpOwog
ICAgICAgICAgICAgICAgIGlmICh2YWx1ZVN0cmluZy5pc051bGwoKSkKLSAgICAgICAgICAgICAg
ICAgICAgdmFsdWVTdHJpbmcgPSBpdC0+c2Vjb25kLmNfc3RyKCk7CisgICAgICAgICAgICAgICAg
ICAgIHZhbHVlU3RyaW5nID0gaXQtPnZhbHVlLmNfc3RyKCk7CiAgICAgICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgICAgICB2YWx1ZVN0cmluZyA9IGl0LT5zZWNvbmQuY19zdHIoKTsKKyAgICAg
ICAgICAgICAgICB2YWx1ZVN0cmluZyA9IGl0LT52YWx1ZS5jX3N0cigpOwogCiAgICAgICAgICAg
ICBoYW5kbGVOb3RpZnlIZWFkZXJSZWNlaXZlZChrZXlTdHJpbmcsIHZhbHVlU3RyaW5nKTsKICAg
ICAgICAgfQpAQCAtMzM2LDE0ICszMzYsMTQgQEAgdm9pZCBOZXR3b3JrSm9iOjpoYW5kbGVOb3Rp
ZnlNdWx0aXBhcnRIZWFkZXJSZWNlaXZlZChjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3QKICAg
ICAgICAgICAgIGJvb2wgbmVlZHNDb3B5ZnJvbU9yaWdpbmFsUmVzcG9uc2UgPSB0cnVlOwogICAg
ICAgICAgICAgaW50IHJlcGxhY2VIZWFkZXJzSW5kZXggPSAwOwogICAgICAgICAgICAgd2hpbGUg
KEJsYWNrQmVycnk6OlBsYXRmb3JtOjpNdWx0aXBhcnRTdHJlYW06OnJlcGxhY2VIZWFkZXJzW3Jl
cGxhY2VIZWFkZXJzSW5kZXhdKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGl0LT5maXJzdC5sb3dl
cigpID09IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpNdWx0aXBhcnRTdHJlYW06OnJlcGxhY2VIZWFk
ZXJzW3JlcGxhY2VIZWFkZXJzSW5kZXhdKSB7CisgICAgICAgICAgICAgICAgaWYgKGl0LT5rZXku
bG93ZXIoKSA9PSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TXVsdGlwYXJ0U3RyZWFtOjpyZXBsYWNl
SGVhZGVyc1tyZXBsYWNlSGVhZGVyc0luZGV4XSkgewogICAgICAgICAgICAgICAgICAgICBuZWVk
c0NvcHlmcm9tT3JpZ2luYWxSZXNwb25zZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcmVwbGFjZUhlYWRlcnNJ
bmRleCsrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKG5lZWRzQ29weWZyb21Pcmln
aW5hbFJlc3BvbnNlKQotICAgICAgICAgICAgICAgIG1fbXVsdGlwYXJ0UmVzcG9uc2UtPnNldEhU
VFBIZWFkZXJGaWVsZChpdC0+Zmlyc3QsIGl0LT5zZWNvbmQpOworICAgICAgICAgICAgICAgIG1f
bXVsdGlwYXJ0UmVzcG9uc2UtPnNldEhUVFBIZWFkZXJGaWVsZChpdC0+a2V5LCBpdC0+dmFsdWUp
OwogICAgICAgICB9CiAKICAgICAgICAgbV9tdWx0aXBhcnRSZXNwb25zZS0+c2V0SXNNdWx0aXBh
cnRQYXlsb2FkKHRydWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9ibGFja2JlcnJ5L1Jlc291cmNlUmVxdWVzdEJsYWNrQmVycnkuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlUmVxdWVzdEJsYWNrQmVy
cnkuY3BwCmluZGV4IDI0ZTU2ZGJhYjNjNTljZDI5OWQ3M2E1YTQ0NzI1NjkzMWU1NzY3MmIuLjdl
NDllNjVhZjYyOWZjN2IxM2VkM2RlOWI2NmI3ODg4NDQzNjA4YjUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJjZVJlcXVlc3RCbGFj
a0JlcnJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVy
cnkvUmVzb3VyY2VSZXF1ZXN0QmxhY2tCZXJyeS5jcHAKQEAgLTE1MCw5ICsxNTAsOSBAQCB2b2lk
IFJlc291cmNlUmVxdWVzdDo6aW5pdGlhbGl6ZVBsYXRmb3JtUmVxdWVzdChOZXR3b3JrUmVxdWVz
dCYgcGxhdGZvcm1SZXF1ZXN0LAogICAgICAgICB9CiAKICAgICAgICAgZm9yIChIVFRQSGVhZGVy
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGh0dHBIZWFkZXJGaWVsZHMoKS5iZWdpbigpOyBpdCAh
PSBodHRwSGVhZGVyRmllbGRzKCkuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgICAgIFN0cmluZyBr
ZXkgPSBpdC0+Zmlyc3Q7Ci0gICAgICAgICAgICBTdHJpbmcgdmFsdWUgPSBpdC0+c2Vjb25kOwot
ICAgICAgICAgICAgaWYgKCFrZXkuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBTdHJpbmcga2V5
ID0gaXQtPmtleTsKKyAgICAgICAgICAgIFN0cmluZyB2YWx1ZSA9IGl0LT52YWx1ZTsKKyAgICAg
ICAgICAgIGlmICgha2V5LmlzRW1wdHkoKSAmJiAhdmFsdWUuaXNFbXB0eSgpKSB7CiAgICAgICAg
ICAgICAgICAgLy8gV2UgbmVlZCB0byBjaGVjayB0aGUgZW5jb2RpbmcgYW5kIGVuY29kZSB0aGUg
Y29va2llJ3MgdmFsdWUgdXNpbmcgbGF0aW4xIG9yIHV0ZjggdG8gc3VwcG9ydCB1bmljb2RlIGNo
YXJhY3RlcnMuCiAgICAgICAgICAgICAgICAgLy8gV2Ugd28ndCB1c2UgdGhlIG9sZCBjb29raWVz
IG9mIHJlc291cmNlUmVxdWVzdCBmb3IgbmV3IGxvY2F0aW9uIGJlY2F1c2UgdGhlc2UgY29va2ll
cyBtYXkgYmUgY2hhbmdlZCBieSByZWRpcmVjdGlvbi4KICAgICAgICAgICAgICAgICBpZiAoIWVx
dWFsSWdub3JpbmdDYXNlKGtleSwgIkNvb2tpZSIpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRk5ldC5jcHAKaW5kZXgg
MGYzOWViMGJkOGM3NmQ1MTEwM2RhZmJlYzNmYjExYTVhZDZkNDRlYS4uMzc0NWY2MzFiYTBmMjE4
ZTgyZWI0ODgxMzgwZTgyMzkyYzA2MDIxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZOZXQuY3BwCkBAIC00MTgs
NyArNDE4LDcgQEAgc3RhdGljIENGVVJMUmVxdWVzdFJlZiBtYWtlRmluYWxSZXF1ZXN0KGNvbnN0
IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgYm9vbCBzaG8KICAgICAgICAgaWYgKCFzc2xQcm9w
cykKICAgICAgICAgICAgIHNzbFByb3BzLmFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlTXV0YWJs
ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3Ms
ICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CiAjaWYgUExBVEZPUk0oV0lOKQot
ICAgICAgICB3a1NldENsaWVudENlcnRpZmljYXRlSW5TU0xQcm9wZXJ0aWVzKHNzbFByb3BzLmdl
dCgpLCAoY2xpZW50Q2VydC0+c2Vjb25kKS5nZXQoKSk7CisgICAgICAgIHdrU2V0Q2xpZW50Q2Vy
dGlmaWNhdGVJblNTTFByb3BlcnRpZXMoc3NsUHJvcHMuZ2V0KCksIChjbGllbnRDZXJ0LT52YWx1
ZSkuZ2V0KCkpOwogI2VuZGlmCiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlUmVxdWVzdENGTmV0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0Q0ZOZXQuY3BwCmluZGV4IDI3
OWQ3NTViMmM4YjIyNmJhZjgxY2I0NzE3NThiZjZjODc1ZTdhZjMuLmM0ZWFlMmVjNjVlMTYzZWFl
OTBiOTdlYjVlZTNjY2JmYjUyYjJlZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0Q0ZOZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0Q0ZOZXQuY3BwCkBAIC0xMjAs
OCArMTIwLDggQEAgc3RhdGljIGlubGluZSB2b2lkIHNldEhlYWRlckZpZWxkcyhDRk11dGFibGVV
UkxSZXF1ZXN0UmVmIHJlcXVlc3QsIGNvbnN0IEhUVFBIZWEKIAogICAgIEhUVFBIZWFkZXJNYXA6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHJlcXVlc3RIZWFkZXJzLmVuZCgpOwogICAgIGZvciAoSFRU
UEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSByZXF1ZXN0SGVhZGVycy5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgQ0ZTdHJpbmdSZWYga2V5ID0gaXQtPmZpcnN0LmNy
ZWF0ZUNGU3RyaW5nKCk7Ci0gICAgICAgIENGU3RyaW5nUmVmIHZhbHVlID0gaXQtPnNlY29uZC5j
cmVhdGVDRlN0cmluZygpOworICAgICAgICBDRlN0cmluZ1JlZiBrZXkgPSBpdC0+a2V5LmNyZWF0
ZUNGU3RyaW5nKCk7CisgICAgICAgIENGU3RyaW5nUmVmIHZhbHVlID0gaXQtPnZhbHVlLmNyZWF0
ZUNGU3RyaW5nKCk7CiAgICAgICAgIENGVVJMUmVxdWVzdFNldEhUVFBIZWFkZXJGaWVsZFZhbHVl
KHJlcXVlc3QsIGtleSwgdmFsdWUpOwogICAgICAgICBDRlJlbGVhc2Uoa2V5KTsKICAgICAgICAg
Q0ZSZWxlYXNlKHZhbHVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHAKaW5kZXggZjBmZDQw
M2Y4Y2NjMzFmMDFkNmZmOGQwMjk2NTVhNTkyMTBmMmFjYy4uMGY4ZTVhZDcxYmVjYTdiZGZlYzkz
MzA5OGM5ZGIzYjU0YmIxMDhjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHAKQEAgLTcw
Myw4ICs3MDMsOCBAQCB2b2lkIFJlc291cmNlSGFuZGxlTWFuYWdlcjo6aW5pdGlhbGl6ZUhhbmRs
ZShSZXNvdXJjZUhhbmRsZSogam9iKQogICAgICAgICBIVFRQSGVhZGVyTWFwIGN1c3RvbUhlYWRl
cnMgPSBqb2ItPmZpcnN0UmVxdWVzdCgpLmh0dHBIZWFkZXJGaWVsZHMoKTsKICAgICAgICAgSFRU
UEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY3VzdG9tSGVhZGVycy5lbmQoKTsKICAg
ICAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGN1c3RvbUhlYWRl
cnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBTdHJpbmcga2V5ID0g
aXQtPmZpcnN0OwotICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0gaXQtPnNlY29uZDsKKyAgICAg
ICAgICAgIFN0cmluZyBrZXkgPSBpdC0+a2V5OworICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0g
aXQtPnZhbHVlOwogICAgICAgICAgICAgU3RyaW5nIGhlYWRlclN0cmluZyhrZXkpOwogICAgICAg
ICAgICAgaGVhZGVyU3RyaW5nLmFwcGVuZCgiOiAiKTsKICAgICAgICAgICAgIGhlYWRlclN0cmlu
Zy5hcHBlbmQodmFsdWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9tYWMvUmVzb3VyY2VSZXF1ZXN0TWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9tYWMvUmVzb3VyY2VSZXF1ZXN0TWFjLm1tCmluZGV4IDEyMGY0YWNiNTZiY2MwNGY1
NTdjZmM4YWYyNGRmNDhiOTMxZWQzZWEuLjIxNDYzY2ZkYTY5ZmQ4OTc1MzA4ZWNiZDdiMTQ4OWQ4
MmRlOGQ4ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFj
L1Jlc291cmNlUmVxdWVzdE1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL21hYy9SZXNvdXJjZVJlcXVlc3RNYWMubW0KQEAgLTE1Miw3ICsxNTIsNyBAQCB2b2lkIFJl
c291cmNlUmVxdWVzdDo6ZG9VcGRhdGVQbGF0Zm9ybVJlcXVlc3QoKQogICAgICAgICBbbnNSZXF1
ZXN0IHNldFZhbHVlOm5pbCBmb3JIVFRQSGVhZGVyRmllbGQ6W29sZEhlYWRlckZpZWxkTmFtZXMg
b2JqZWN0QXRJbmRleDppIC0gMV1dOwogICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IGh0dHBIZWFkZXJGaWVsZHMoKS5lbmQoKTsKICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaHR0cEhlYWRlckZpZWxkcygpLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkKLSAgICAgICAgW25zUmVxdWVzdCBzZXRWYWx1ZTppdC0+c2Vjb25kIGZvckhUVFBI
ZWFkZXJGaWVsZDppdC0+Zmlyc3RdOworICAgICAgICBbbnNSZXF1ZXN0IHNldFZhbHVlOml0LT52
YWx1ZSBmb3JIVFRQSGVhZGVyRmllbGQ6aXQtPmtleV07CiAKICAgICAvLyBUaGUgYmVsb3cgY2hl
Y2sgY2FuIGJlIHJlbW92ZWQgb25jZSB3ZSByZXF1aXJlIGEgdmVyc2lvbiBvZiBGb3VuZGF0aW9u
IHdpdGggLVtOU011dGFibGVVUkxSZXF1ZXN0IHNldENvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5n
RmFsbGJhY2tBcnJheTpdIG1ldGhvZC4KICAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0NvbnRlbnRE
aXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheSA9IFtOU011dGFibGVVUkxSZXF1ZXN0IGlu
c3RhbmNlc1Jlc3BvbmRUb1NlbGVjdG9yOkBzZWxlY3RvcihzZXRDb250ZW50RGlzcG9zaXRpb25F
bmNvZGluZ0ZhbGxiYWNrQXJyYXk6KV07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3F0L1Jlc291cmNlUmVxdWVzdFF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvcXQvUmVzb3VyY2VSZXF1ZXN0UXQuY3BwCmluZGV4IGJmYjI0MTQwYmRm
NGY1ZWYxOWI5ZDlhYTIxNWY1ZWI4MWRiMzAwMTkuLjRjMjJhNmEzYTg0MjMwMjM5N2U0N2RhZDky
YzNhMjNmNTQ2ZGY1ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvcXQvUmVzb3VyY2VSZXF1ZXN0UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvcXQvUmVzb3VyY2VSZXF1ZXN0UXQuY3BwCkBAIC00OSw4ICs0OSw4IEBAIFFOZXR3
b3JrUmVxdWVzdCBSZXNvdXJjZVJlcXVlc3Q6OnRvTmV0d29ya1JlcXVlc3QoTmV0d29ya2luZ0Nv
bnRleHQgKmNvbnRleHQpIGNvCiAgICAgY29uc3QgSFRUUEhlYWRlck1hcCAmaGVhZGVycyA9IGh0
dHBIZWFkZXJGaWVsZHMoKTsKICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gaGVhZGVycy5iZWdpbigpLCBlbmQgPSBoZWFkZXJzLmVuZCgpOwogICAgICAgICAgaXQg
IT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFFCeXRlQXJyYXkgbmFtZSA9IFFTdHJpbmcoaXQtPmZp
cnN0KS50b0FzY2lpKCk7Ci0gICAgICAgIFFCeXRlQXJyYXkgdmFsdWUgPSBRU3RyaW5nKGl0LT5z
ZWNvbmQpLnRvQXNjaWkoKTsKKyAgICAgICAgUUJ5dGVBcnJheSBuYW1lID0gUVN0cmluZyhpdC0+
a2V5KS50b0FzY2lpKCk7CisgICAgICAgIFFCeXRlQXJyYXkgdmFsdWUgPSBRU3RyaW5nKGl0LT52
YWx1ZSkudG9Bc2NpaSgpOwogICAgICAgICAvLyBRTmV0d29ya1JlcXVlc3Q6OnNldFJhd0hlYWRl
cigpIHdvdWxkIHJlbW92ZSB0aGUgaGVhZGVyIGlmIHRoZSB2YWx1ZSBpcyBudWxsCiAgICAgICAg
IC8vIE1ha2Ugc3VyZSB0byBzZXQgYW4gZW1wdHkgaGVhZGVyIGluc3RlYWQgb2YgbnVsbCBoZWFk
ZXIuCiAgICAgICAgIGlmICghdmFsdWUuaXNOdWxsKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0U291cC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0U291cC5jcHAK
aW5kZXggZDcxMjdiNGI1YjhlNDU5YTRjYWVjNTVhNTUyN2JiY2YzYzgzNzc4NS4uNTdhYjRkNjQ3
YjNiZmZjMjViYTkyMzc3OGM3MWQ0ZjRiZWUxNWNiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVzdFNvdXAuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNw
cApAQCAtNDMsNyArNDMsNyBAQCB2b2lkIFJlc291cmNlUmVxdWVzdDo6dXBkYXRlU291cE1lc3Nh
Z2UoU291cE1lc3NhZ2UqIHNvdXBNZXNzYWdlKSBjb25zdAogICAgIGlmICghaGVhZGVycy5pc0Vt
cHR5KCkpIHsKICAgICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaGVh
ZGVycy5lbmQoKTsKICAgICAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IGhlYWRlcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgc291cF9t
ZXNzYWdlX2hlYWRlcnNfYXBwZW5kKHNvdXBIZWFkZXJzLCBpdC0+Zmlyc3Quc3RyaW5nKCkudXRm
OCgpLmRhdGEoKSwgaXQtPnNlY29uZC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIHNvdXBf
bWVzc2FnZV9oZWFkZXJzX2FwcGVuZChzb3VwSGVhZGVycywgaXQtPmtleS5zdHJpbmcoKS51dGY4
KCkuZGF0YSgpLCBpdC0+dmFsdWUudXRmOCgpLmRhdGEoKSk7CiAgICAgfQogCiAgICAgU3RyaW5n
IGZpcnN0UGFydHlTdHJpbmcgPSBmaXJzdFBhcnR5Rm9yQ29va2llcygpLnN0cmluZygpOwpAQCAt
NjYsNyArNjYsNyBAQCBTb3VwTWVzc2FnZSogUmVzb3VyY2VSZXF1ZXN0Ojp0b1NvdXBNZXNzYWdl
KCkgY29uc3QKICAgICBpZiAoIWhlYWRlcnMuaXNFbXB0eSgpKSB7CiAgICAgICAgIEhUVFBIZWFk
ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGhlYWRlcnMuZW5kKCk7CiAgICAgICAgIGZvciAo
SFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBoZWFkZXJzLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkKLSAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChzb3Vw
SGVhZGVycywgaXQtPmZpcnN0LnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGl0LT5zZWNvbmQudXRm
OCgpLmRhdGEoKSk7CisgICAgICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQoc291
cEhlYWRlcnMsIGl0LT5rZXkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgaXQtPnZhbHVlLnV0Zjgo
KS5kYXRhKCkpOwogICAgIH0KIAogICAgIFN0cmluZyBmaXJzdFBhcnR5U3RyaW5nID0gZmlyc3RQ
YXJ0eUZvckNvb2tpZXMoKS5zdHJpbmcoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlc3BvbnNlU291cC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXNwb25zZVNvdXAuY3BwCmluZGV4
IDE1NTA0OGIyYmYyZjI0NDAyYmJkODlmNDM0NDRmNDI0YjI2Y2FmY2MuLjJmZmViNTYzYWRlOGM0
YjBjNzRlYzk1MTRkZTk5ZTcyMGM5OGQyMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlc3BvbnNlU291cC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVzcG9uc2VTb3VwLmNwcApA
QCAtNDYsNyArNDYsNyBAQCBTb3VwTWVzc2FnZSogUmVzb3VyY2VSZXNwb25zZTo6dG9Tb3VwTWVz
c2FnZSgpIGNvbnN0CiAgICAgaWYgKCFoZWFkZXJzLmlzRW1wdHkoKSkgewogICAgICAgICBIVFRQ
SGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBoZWFkZXJzLmVuZCgpOwogICAgICAgICBm
b3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaGVhZGVycy5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQo
c291cEhlYWRlcnMsIGl0LT5maXJzdC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBpdC0+c2Vjb25k
LnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5k
KHNvdXBIZWFkZXJzLCBpdC0+a2V5LnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGl0LT52YWx1ZS51
dGY4KCkuZGF0YSgpKTsKICAgICB9CiAKICAgICBzb3VwX21lc3NhZ2Vfc2V0X2ZsYWdzKHNvdXBN
ZXNzYWdlLCBtX3NvdXBGbGFncyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3dpbi9SZXNvdXJjZUhhbmRsZVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3dpbi9SZXNvdXJjZUhhbmRsZVdpbi5jcHAKaW5kZXggMDIxMmQwY2RhOThj
OWYxMzc5MjhlNjEyZmRmOTUwMzY1YTAxZDBkNi4uZjI1MDUyNzc1YjBkZWRmZTIxYzc1NWQzZjgz
OTk4NTNlN2EwZjM5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay93aW4vUmVzb3VyY2VIYW5kbGVXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvd2luL1Jlc291cmNlSGFuZGxlV2luLmNwcApAQCAtMzIzLDE1ICszMjMsMTUgQEAg
Ym9vbCBSZXNvdXJjZUhhbmRsZTo6c3RhcnQoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQpCiAg
ICAgY29uc3QgSFRUUEhlYWRlck1hcCYgaHR0cEhlYWRlckZpZWxkcyA9IGZpcnN0UmVxdWVzdCgp
Lmh0dHBIZWFkZXJGaWVsZHMoKTsKIAogICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBodHRwSGVhZGVyRmllbGRzLmJlZ2luKCk7IGl0ICE9IGh0dHBIZWFkZXJGaWVs
ZHMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGl0LT5maXJz
dCwgIkFjY2VwdCIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKGl0LT5maXJzdCwgIlJlZmVyZXIiKSB8
fCBlcXVhbElnbm9yaW5nQ2FzZShpdC0+Zmlyc3QsICJVc2VyLUFnZW50IikpCisgICAgICAgIGlm
IChlcXVhbElnbm9yaW5nQ2FzZShpdC0+a2V5LCAiQWNjZXB0IikgfHwgZXF1YWxJZ25vcmluZ0Nh
c2UoaXQtPmtleSwgIlJlZmVyZXIiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShpdC0+a2V5LCAiVXNl
ci1BZ2VudCIpKQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgaWYgKCFodHRwSGVh
ZGVycy5pc0VtcHR5KCkpCiAgICAgICAgICAgICBodHRwSGVhZGVycy5hcHBlbmQoJ1xuJyk7CiAK
LSAgICAgICAgaHR0cEhlYWRlcnMuYXBwZW5kKGl0LT5maXJzdC5jaGFyYWN0ZXJzKCksIGl0LT5m
aXJzdC5sZW5ndGgoKSk7CisgICAgICAgIGh0dHBIZWFkZXJzLmFwcGVuZChpdC0+a2V5LmNoYXJh
Y3RlcnMoKSwgaXQtPmtleS5sZW5ndGgoKSk7CiAgICAgICAgIGh0dHBIZWFkZXJzLmFwcGVuZCgn
OicpOwotICAgICAgICBodHRwSGVhZGVycy5hcHBlbmQoaXQtPnNlY29uZC5jaGFyYWN0ZXJzKCks
IGl0LT5zZWNvbmQubGVuZ3RoKCkpOworICAgICAgICBodHRwSGVhZGVycy5hcHBlbmQoaXQtPnZh
bHVlLmNoYXJhY3RlcnMoKSwgaXQtPnZhbHVlLmxlbmd0aCgpKTsKICAgICB9CiAKICAgICBJTlRF
Uk5FVF9CVUZGRVJTVyBpbnRlcm5ldEJ1ZmZlcnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9xdC9SdW5Mb29wUXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQv
UnVuTG9vcFF0LmNwcAppbmRleCAyOGFiNjdiZGUwMTU1YWM3ZjViODY3MjY2Mjg1ODk0NTQ0NDky
NGU2Li5mYzdhMmQxY2I1YjcxYzMwOWI0Y2NjZTk2Mzg4NGNmYjFjYWVlOTQwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SdW5Mb29wUXQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3F0L1J1bkxvb3BRdC5jcHAKQEAgLTEyNyw3ICsxMjcsNyBAQCB2b2lk
IFJ1bkxvb3A6OlRpbWVyQmFzZTo6dGltZXJGaXJlZChSdW5Mb29wKiBydW5Mb29wLCBpbnQgSUQp
CiB7CiAgICAgVGltZXJNYXA6Oml0ZXJhdG9yIGl0ID0gcnVuTG9vcC0+bV9hY3RpdmVUaW1lcnMu
ZmluZChJRCk7CiAgICAgQVNTRVJUKGl0ICE9IHJ1bkxvb3AtPm1fYWN0aXZlVGltZXJzLmVuZCgp
KTsKLSAgICBUaW1lckJhc2UqIHRpbWVyID0gaXQtPnNlY29uZDsKKyAgICBUaW1lckJhc2UqIHRp
bWVyID0gaXQtPnZhbHVlOwogCiAgICAgaWYgKCF0aW1lci0+bV9pc1JlcGVhdGluZykgewogICAg
ICAgICAvLyBTdG9wIHRoZSB0aW1lciAoY2FsbGluZyBzdG9wIHdvdWxkIG5lZWQgYW5vdGhlciBo
YXNoIHRhYmxlIGxvb2t1cCkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L0xvY2FsZVRvU2NyaXB0TWFwcGluZ0RlZmF1bHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9Mb2NhbGVUb1NjcmlwdE1hcHBpbmdEZWZhdWx0LmNwcAppbmRleCA0ZWQwM2Nl
NGUwN2U1ZDhjOTcxZjlkMWZlZDk1ZjAwOGJmNGE1NjE5Li41ZGM5M2ZmMDk0YTg4ZWU2ZTBmNTUx
MTdkMDJjYmM2ZjZiNGM0MjE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L0xvY2FsZVRvU2NyaXB0TWFwcGluZ0RlZmF1bHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvTG9jYWxlVG9TY3JpcHRNYXBwaW5nRGVmYXVsdC5jcHAKQEAgLTE2MCw3
ICsxNjAsNyBAQCBVU2NyaXB0Q29kZSBzY3JpcHROYW1lVG9Db2RlKGNvbnN0IFN0cmluZyYgc2Ny
aXB0TmFtZSkKIAogICAgIEhhc2hNYXA8U3RyaW5nLCBVU2NyaXB0Q29kZT46Oml0ZXJhdG9yIGl0
ID0gc2NyaXB0TmFtZUNvZGVNYXAuZmluZChzY3JpcHROYW1lLmxvd2VyKCkpOwogICAgIGlmIChp
dCAhPSBzY3JpcHROYW1lQ29kZU1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7
CisgICAgICAgIHJldHVybiBpdC0+dmFsdWU7CiAgICAgcmV0dXJuIFVTQ1JJUFRfSU5WQUxJRF9D
T0RFOwogfQogCkBAIC0zODMsNyArMzgzLDcgQEAgVVNjcmlwdENvZGUgbG9jYWxlVG9TY3JpcHRD
b2RlRm9yRm9udFNlbGVjdGlvbihjb25zdCBTdHJpbmcmIGxvY2FsZSkKICAgICB3aGlsZSAoIWNh
bm9uaWNhbExvY2FsZS5pc0VtcHR5KCkpIHsKICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFVTY3Jp
cHRDb2RlPjo6aXRlcmF0b3IgaXQgPSBsb2NhbGVTY3JpcHRNYXAuZmluZChjYW5vbmljYWxMb2Nh
bGUpOwogICAgICAgICBpZiAoaXQgIT0gbG9jYWxlU2NyaXB0TWFwLmVuZCgpKQotICAgICAgICAg
ICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwogICAg
ICAgICBzaXplX3QgcG9zID0gY2Fub25pY2FsTG9jYWxlLnJldmVyc2VGaW5kKCdfJyk7CiAgICAg
ICAgIGlmIChwb3MgPT0gbm90Rm91bmQpCiAgICAgICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnkuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAKaW5k
ZXggMDUxNTAwNTJmNTRkNTE3YTBhMDFmNjI2MDYxOGViMTU3ZDE4YTdlMy4uZjYwNWEwZjFiNjBl
YzQ4YTE2NjRiMzU3YTMzYWU0YTc0ODk3NmE2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAKQEAgLTE5Niw4ICsxOTYs
OCBAQCBzdGF0aWMgdm9pZCBwcnVuZUJsYWNrbGlzdGVkQ29kZWNzKCkKICAgICAgICAgVGV4dEVu
Y29kaW5nTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSB0ZXh0RW5jb2RpbmdOYW1lTWFwLT5i
ZWdpbigpOwogICAgICAgICBUZXh0RW5jb2RpbmdOYW1lTWFwOjpjb25zdF9pdGVyYXRvciBlbmQg
PSB0ZXh0RW5jb2RpbmdOYW1lTWFwLT5lbmQoKTsKICAgICAgICAgZm9yICg7IGl0ICE9IGVuZDsg
KytpdCkgewotICAgICAgICAgICAgaWYgKGl0LT5zZWNvbmQgPT0gYXRvbWljTmFtZSkKLSAgICAg
ICAgICAgICAgICBuYW1lcy5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgICAgIGlmIChpdC0+
dmFsdWUgPT0gYXRvbWljTmFtZSkKKyAgICAgICAgICAgICAgICBuYW1lcy5hcHBlbmQoaXQtPmtl
eSk7CiAgICAgICAgIH0KIAogICAgICAgICBzaXplX3QgbGVuZ3RoID0gbmFtZXMuc2l6ZSgpOwpA
QCAtMzc5LDcgKzM3OSw3IEBAIHZvaWQgZHVtcFRleHRFbmNvZGluZ05hbWVNYXAoKQogICAgIFRl
eHRFbmNvZGluZ05hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdGV4dEVuY29kaW5nTmFtZU1h
cC0+YmVnaW4oKTsKICAgICBUZXh0RW5jb2RpbmdOYW1lTWFwOjpjb25zdF9pdGVyYXRvciBlbmQg
PSB0ZXh0RW5jb2RpbmdOYW1lTWFwLT5lbmQoKTsKICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0
KQotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiclcycgPT4gJyVzJ1xuIiwgaXQtPmZpcnN0LCBp
dC0+c2Vjb25kKTsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICInJXMnID0+ICclcydcbiIsIGl0
LT5rZXksIGl0LT52YWx1ZSk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC90cmFuc2NvZGVyL0ZvbnRUcmFuc2NvZGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvdHJhbnNjb2Rlci9Gb250VHJhbnNjb2Rlci5jcHAKaW5kZXgg
NGUwN2Y1MGZiZGIwYzU3YzNlZWNhNmY4YmU3MWY3NTA1ZGI1M2JjMC4uNDg0MjI4Y2FhOGU3NjA3
MWIzN2E5ZDIwYTk5MmQ1MGExZDQxZjQwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC90cmFuc2NvZGVyL0ZvbnRUcmFuc2NvZGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L3RyYW5zY29kZXIvRm9udFRyYW5zY29kZXIuY3BwCkBAIC02Niw3
ICs2Niw3IEBAIEZvbnRUcmFuc2NvZGVyOjpDb252ZXJ0ZXJUeXBlIEZvbnRUcmFuc2NvZGVyOjpj
b252ZXJ0ZXJUeXBlKGNvbnN0IEZvbnREZXNjcmlwdGlvCiAgICAgaWYgKCFmb250RmFtaWx5Lmlz
TnVsbCgpKSB7CiAgICAgICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBDb252ZXJ0ZXJUeXBlPjo6
Y29uc3RfaXRlcmF0b3IgZm91bmQgPSBtX2NvbnZlcnRlclR5cGVzLmZpbmQoZm9udEZhbWlseSk7
CiAgICAgICAgIGlmIChmb3VuZCAhPSBtX2NvbnZlcnRlclR5cGVzLmVuZCgpKQotICAgICAgICAg
ICAgcmV0dXJuIGZvdW5kLT5zZWNvbmQ7CisgICAgICAgICAgICByZXR1cm4gZm91bmQtPnZhbHVl
OwogICAgIH0KIAogICAgIC8vIElFJ3MgZGVmYXVsdCBmb250cyBmb3IgSmFwYW5lc2UgZW5jb2Rp
bmdzIGNoYW5nZSBiYWNrc2xhc2hlcyBpbnRvIHllbiBzaWducy4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvd2luY2UvVGV4dENvZGVjV2luQ0UuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC93aW5jZS9UZXh0Q29kZWNXaW5DRS5jcHAKaW5kZXggMGM0
ZWM1MDEyMTQ5YWQwMWNjNWMxOGIyNDE0M2RhMGNlMmI4ZjRjMy4uZjA1ZGUzMjQyOGM4NTBmZGU2
YzBlNDMwOWU2YmZlZjU5YzE1MjdkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC93aW5jZS9UZXh0Q29kZWNXaW5DRS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC93aW5jZS9UZXh0Q29kZWNXaW5DRS5jcHAKQEAgLTEwMSwxNyArMTAxLDE3IEBA
IExhbmd1YWdlTWFuYWdlcjo6TGFuZ3VhZ2VNYW5hZ2VyKCkKICAgICAgICAgICAgICAgICBpID0g
Y29kZVBhZ2VDaGFyc2V0cygpLnNldChjcEluZm8udWlDb2RlUGFnZSwgbmFtZSkuaXRlcmF0b3I7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoaSAhPSBjb2RlUGFnZUNoYXJzZXRzKCku
ZW5kKCkpIHsKLSAgICAgICAgICAgICAgICBIYXNoTWFwPFN0cmluZywgQ2hhcnNldEluZm8+Ojpp
dGVyYXRvciBqID0ga25vd25DaGFyc2V0cygpLmZpbmQoU3RyaW5nKGktPnNlY29uZC5kYXRhKCks
IGktPnNlY29uZC5sZW5ndGgoKSkpOworICAgICAgICAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBD
aGFyc2V0SW5mbz46Oml0ZXJhdG9yIGogPSBrbm93bkNoYXJzZXRzKCkuZmluZChTdHJpbmcoaS0+
dmFsdWUuZGF0YSgpLCBpLT52YWx1ZS5sZW5ndGgoKSkpOwogICAgICAgICAgICAgICAgIEFTU0VS
VChqICE9IGtub3duQ2hhcnNldHMoKS5lbmQoKSk7Ci0gICAgICAgICAgICAgICAgQ2hhcnNldElu
Zm8mIGluZm8gPSBqLT5zZWNvbmQ7Ci0gICAgICAgICAgICAgICAgaW5mby5tX25hbWUgPSBpLT5z
ZWNvbmQuZGF0YSgpOworICAgICAgICAgICAgICAgIENoYXJzZXRJbmZvJiBpbmZvID0gai0+dmFs
dWU7CisgICAgICAgICAgICAgICAgaW5mby5tX25hbWUgPSBpLT52YWx1ZS5kYXRhKCk7CiAgICAg
ICAgICAgICAgICAgaW5mby5tX2ZyaWVuZGx5TmFtZSA9IGNwSW5mby53c3pEZXNjcmlwdGlvbjsK
ICAgICAgICAgICAgICAgICBpbmZvLm1fYWxpYXNlcy5hcHBlbmQobmFtZSk7CiAgICAgICAgICAg
ICAgICAgaW5mby5tX2FsaWFzZXMuYXBwZW5kKFN0cmluZyhjcEluZm8ud3N6SGVhZGVyQ2hhcnNl
dCkubGF0aW4xKCkpOwogICAgICAgICAgICAgICAgIGluZm8ubV9hbGlhc2VzLmFwcGVuZChTdHJp
bmcoY3BJbmZvLndzekJvZHlDaGFyc2V0KS5sYXRpbjEoKSk7CiAgICAgICAgICAgICAgICAgU3Ry
aW5nIGNwTmFtZSA9ICJjcCIgKyBTdHJpbmc6Om51bWJlcihjcEluZm8udWlDb2RlUGFnZSk7CiAg
ICAgICAgICAgICAgICAgaW5mby5tX2FsaWFzZXMuYXBwZW5kKGNwTmFtZS5sYXRpbjEoKSk7Ci0g
ICAgICAgICAgICAgICAgc3VwcG9ydGVkQ2hhcnNldHMoKS5hZGQoaS0+c2Vjb25kLmRhdGEoKSk7
CisgICAgICAgICAgICAgICAgc3VwcG9ydGVkQ2hhcnNldHMoKS5hZGQoaS0+dmFsdWUuZGF0YSgp
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBlbnVtSW50ZXJmYWNlLT5SZWxl
YXNlKCk7CkBAIC0xMjQsNyArMTI0LDcgQEAgc3RhdGljIFVJTlQgZ2V0Q29kZVBhZ2UoY29uc3Qg
Y2hhciogbmFtZSkKICAgICAvLyBzYXlpbmcgIj09IiBpcyBub3QgZm91bmQgZm9yIGNvbnN0X2l0
ZXJhdG9yIGFuZCBpdGVyYXRvcgogICAgIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBDaGFyc2V0SW5m
bz4mIGNoYXJzZXRzID0ga25vd25DaGFyc2V0cygpOwogICAgIEhhc2hNYXA8U3RyaW5nLCBDaGFy
c2V0SW5mbz46OmNvbnN0X2l0ZXJhdG9yIGkgPSBjaGFyc2V0cy5maW5kKG5hbWUpOwotICAgIHJl
dHVybiBpID09IGNoYXJzZXRzLmVuZCgpID8gQ1BfQUNQIDogaS0+c2Vjb25kLm1fY29kZVBhZ2U7
CisgICAgcmV0dXJuIGkgPT0gY2hhcnNldHMuZW5kKCkgPyBDUF9BQ1AgOiBpLT52YWx1ZS5tX2Nv
ZGVQYWdlOwogfQogCiBzdGF0aWMgUGFzc093blB0cjxUZXh0Q29kZWM+IG5ld1RleHRDb2RlY1dp
bkNFKGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcsIGNvbnN0IHZvaWQqKQpAQCAtMTQ3LDkg
KzE0Nyw5IEBAIHZvaWQgVGV4dENvZGVjV2luQ0U6OnJlZ2lzdGVyRXh0ZW5kZWRFbmNvZGluZ05h
bWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJhciByZWdpc3RyCiAgICAgZm9yIChDaGFyc2V0U2V0Ojpp
dGVyYXRvciBpID0gc3VwcG9ydGVkQ2hhcnNldHMoKS5iZWdpbigpOyBpICE9IHN1cHBvcnRlZENo
YXJzZXRzKCkuZW5kKCk7ICsraSkgewogICAgICAgICBIYXNoTWFwPFN0cmluZywgQ2hhcnNldElu
Zm8+OjppdGVyYXRvciBqID0ga25vd25DaGFyc2V0cygpLmZpbmQoKmkpOwogICAgICAgICBpZiAo
aiAhPSBrbm93bkNoYXJzZXRzKCkuZW5kKCkpIHsKLSAgICAgICAgICAgIHJlZ2lzdHJhcihqLT5z
ZWNvbmQubV9uYW1lLmRhdGEoKSwgai0+c2Vjb25kLm1fbmFtZS5kYXRhKCkpOwotICAgICAgICAg
ICAgZm9yIChWZWN0b3I8Q1N0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGFsaWFzID0gai0+c2Vjb25k
Lm1fYWxpYXNlcy5iZWdpbigpOyBhbGlhcyAhPSBqLT5zZWNvbmQubV9hbGlhc2VzLmVuZCgpOyAr
K2FsaWFzKQotICAgICAgICAgICAgICAgIHJlZ2lzdHJhcihhbGlhcy0+ZGF0YSgpLCBqLT5zZWNv
bmQubV9uYW1lLmRhdGEoKSk7CisgICAgICAgICAgICByZWdpc3RyYXIoai0+dmFsdWUubV9uYW1l
LmRhdGEoKSwgai0+dmFsdWUubV9uYW1lLmRhdGEoKSk7CisgICAgICAgICAgICBmb3IgKFZlY3Rv
cjxDU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgYWxpYXMgPSBqLT52YWx1ZS5tX2FsaWFzZXMuYmVn
aW4oKTsgYWxpYXMgIT0gai0+dmFsdWUubV9hbGlhc2VzLmVuZCgpOyArK2FsaWFzKQorICAgICAg
ICAgICAgICAgIHJlZ2lzdHJhcihhbGlhcy0+ZGF0YSgpLCBqLT52YWx1ZS5tX25hbWUuZGF0YSgp
KTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTE2MCw3ICsxNjAsNyBAQCB2b2lkIFRleHRDb2Rl
Y1dpbkNFOjpyZWdpc3RlckV4dGVuZGVkQ29kZWNzKFRleHRDb2RlY1JlZ2lzdHJhciByZWdpc3Ry
YXIpCiAgICAgZm9yIChDaGFyc2V0U2V0OjppdGVyYXRvciBpID0gc3VwcG9ydGVkQ2hhcnNldHMo
KS5iZWdpbigpOyBpICE9IHN1cHBvcnRlZENoYXJzZXRzKCkuZW5kKCk7ICsraSkgewogICAgICAg
ICBIYXNoTWFwPFN0cmluZywgQ2hhcnNldEluZm8+OjppdGVyYXRvciBqID0ga25vd25DaGFyc2V0
cygpLmZpbmQoKmkpOwogICAgICAgICBpZiAoaiAhPSBrbm93bkNoYXJzZXRzKCkuZW5kKCkpCi0g
ICAgICAgICAgICByZWdpc3RyYXIoai0+c2Vjb25kLm1fbmFtZS5kYXRhKCksIG5ld1RleHRDb2Rl
Y1dpbkNFLCAwKTsKKyAgICAgICAgICAgIHJlZ2lzdHJhcihqLT52YWx1ZS5tX25hbWUuZGF0YSgp
LCBuZXdUZXh0Q29kZWNXaW5DRSwgMCk7CiAgICAgfQogfQogCkBAIC0yOTksNyArMjk5LDcgQEAg
dm9pZCBUZXh0Q29kZWNXaW5DRTo6ZW51bWVyYXRlU3VwcG9ydGVkRW5jb2RpbmdzKEVuY29kaW5n
UmVjZWl2ZXImIHJlY2VpdmVyKQogICAgIGxhbmd1YWdlTWFuYWdlcigpOwogICAgIGZvciAoQ2hh
cnNldFNldDo6aXRlcmF0b3IgaSA9IHN1cHBvcnRlZENoYXJzZXRzKCkuYmVnaW4oKTsgaSAhPSBz
dXBwb3J0ZWRDaGFyc2V0cygpLmVuZCgpOyArK2kpIHsKICAgICAgICAgSGFzaE1hcDxTdHJpbmcs
IENoYXJzZXRJbmZvPjo6aXRlcmF0b3IgaiA9IGtub3duQ2hhcnNldHMoKS5maW5kKCppKTsKLSAg
ICAgICAgaWYgKGogIT0ga25vd25DaGFyc2V0cygpLmVuZCgpICYmICFyZWNlaXZlci5yZWNlaXZl
KGotPnNlY29uZC5tX25hbWUuZGF0YSgpLCBqLT5zZWNvbmQubV9mcmllbmRseU5hbWUuY2hhcmFj
dGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgai0+c2Vjb25kLm1fY29kZVBhZ2UpKQorICAgICAg
ICBpZiAoaiAhPSBrbm93bkNoYXJzZXRzKCkuZW5kKCkgJiYgIXJlY2VpdmVyLnJlY2VpdmUoai0+
dmFsdWUubV9uYW1lLmRhdGEoKSwgai0+dmFsdWUubV9mcmllbmRseU5hbWUuY2hhcmFjdGVyc1dp
dGhOdWxsVGVybWluYXRpb24oKSwgai0+dmFsdWUubV9jb2RlUGFnZSkpCiAgICAgICAgICAgICBi
cmVhazsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4v
Q2xpcGJvYXJkVXRpbGl0aWVzV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9D
bGlwYm9hcmRVdGlsaXRpZXNXaW4uY3BwCmluZGV4IGQ2MWMwMTQzMjRhZDY2ZWM3MWJiYWNjNDgy
ZDBiYjc3NjYxYzIyMWYuLjI1Mjc3YjczMTA4Mjk2ODM4Yjg5MjY5NjllN2U5ZWEwNjNkNGZjM2Yg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRVdGlsaXRp
ZXNXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRVdGls
aXRpZXNXaW4uY3BwCkBAIC03NSw3ICs3NSw3IEBAIHN0YXRpYyBib29sIGdldERhdGFNYXBJdGVt
KGNvbnN0IERyYWdEYXRhTWFwKiBkYXRhT2JqZWN0LCBGT1JNQVRFVEMqIGZvcm1hdCwgU3RyCiAg
ICAgRHJhZ0RhdGFNYXA6OmNvbnN0X2l0ZXJhdG9yIGZvdW5kID0gZGF0YU9iamVjdC0+ZmluZChm
b3JtYXQtPmNmRm9ybWF0KTsKICAgICBpZiAoZm91bmQgPT0gZGF0YU9iamVjdC0+ZW5kKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpdGVtID0gZm91bmQtPnNlY29uZFswXTsKKyAgICBp
dGVtID0gZm91bmQtPnZhbHVlWzBdOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC04MTksNyAr
ODE5LDcgQEAgdm9pZCBnZXRDbGlwYm9hcmREYXRhKElEYXRhT2JqZWN0KiBkYXRhT2JqZWN0LCBG
T1JNQVRFVEMqIGZvcm1hdCwgVmVjdG9yPFN0cmluZz4KICAgICBDbGlwYm9hcmRGb3JtYXRNYXA6
OmNvbnN0X2l0ZXJhdG9yIGZvdW5kID0gZm9ybWF0TWFwLmZpbmQoZm9ybWF0LT5jZkZvcm1hdCk7
CiAgICAgaWYgKGZvdW5kID09IGZvcm1hdE1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuOwotICAg
IGZvdW5kLT5zZWNvbmQtPmdldFN0cmluZyhkYXRhT2JqZWN0LCBmb3VuZC0+c2Vjb25kLT5mb3Jt
YXQsIGRhdGFTdHJpbmdzKTsKKyAgICBmb3VuZC0+dmFsdWUtPmdldFN0cmluZyhkYXRhT2JqZWN0
LCBmb3VuZC0+dmFsdWUtPmZvcm1hdCwgZGF0YVN0cmluZ3MpOwogfQogCiB2b2lkIHNldENsaXBi
b2FyZERhdGEoSURhdGFPYmplY3QqIGRhdGFPYmplY3QsIFVJTlQgZm9ybWF0LCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgZGF0YVN0cmluZ3MpCkBAIC04MjgsNyArODI4LDcgQEAgdm9pZCBzZXRDbGlw
Ym9hcmREYXRhKElEYXRhT2JqZWN0KiBkYXRhT2JqZWN0LCBVSU5UIGZvcm1hdCwgY29uc3QgVmVj
dG9yPFN0cmluZz4KICAgICBDbGlwYm9hcmRGb3JtYXRNYXA6OmNvbnN0X2l0ZXJhdG9yIGZvdW5k
ID0gZm9ybWF0TWFwLmZpbmQoZm9ybWF0KTsKICAgICBpZiAoZm91bmQgPT0gZm9ybWF0TWFwLmVu
ZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgZm91bmQtPnNlY29uZC0+c2V0U3RyaW5nKGRhdGFP
YmplY3QsIGZvdW5kLT5zZWNvbmQtPmZvcm1hdCwgZGF0YVN0cmluZ3MpOworICAgIGZvdW5kLT52
YWx1ZS0+c2V0U3RyaW5nKGRhdGFPYmplY3QsIGZvdW5kLT52YWx1ZS0+Zm9ybWF0LCBkYXRhU3Ry
aW5ncyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vd2luL0NsaXBib2FyZFdpbi5jcHAKaW5kZXggMTJjYjhiZjAxZTMwZDVjMWQ2ZTIzNzZh
ZmQ5ODQ4MzhhNzMxMmVjYS4uODBlOWY4NGU3MTczYjI1ZmU1YjczMmFkN2MyYTk5YzJhNmY3NDMx
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFdpbi5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFdpbi5jcHAKQEAg
LTUyNSw3ICs1MjUsNyBAQCBIYXNoU2V0PFN0cmluZz4gQ2xpcGJvYXJkV2luOjp0eXBlcygpIGNv
bnN0CiAgICAgfSBlbHNlIHsKICAgICAgICAgZm9yIChEcmFnRGF0YU1hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtX2RyYWdEYXRhTWFwLmJlZ2luKCk7IGl0ICE9IG1fZHJhZ0RhdGFNYXAuZW5kKCk7
ICsraXQpIHsKICAgICAgICAgICAgIEZPUk1BVEVUQyBkYXRhOwotICAgICAgICAgICAgZGF0YS5j
ZkZvcm1hdCA9ICgqaXQpLmZpcnN0OworICAgICAgICAgICAgZGF0YS5jZkZvcm1hdCA9ICgqaXQp
LmtleTsKICAgICAgICAgICAgIGFkZE1pbWVUeXBlc0ZvckZvcm1hdChyZXN1bHRzLCBkYXRhKTsK
ICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dp
bi9GaWxlU3lzdGVtV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9GaWxlU3lz
dGVtV2luLmNwcAppbmRleCA0Y2U1MTg3NzEyMzUzZTkwYzBkMTU2Zjg1NDE5ZmNiMDVkYjM3ZmFj
Li5iMTA0OTIyZTJmM2Y2MDM4MDQ0ZTgxYWUyNmU0MWE4YTVlZjgzYjdhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vd2luL0ZpbGVTeXN0ZW1XaW4uY3BwCkBAIC0yMDksNyArMjA5LDcg
QEAgc3RhdGljIFN0cmluZyBjYWNoZWRTdG9yYWdlRGlyZWN0b3J5KERXT1JEIHBhdGhJZGVudGlm
aWVyKQogCiAgICAgSGFzaE1hcDxEV09SRCwgU3RyaW5nPjo6aXRlcmF0b3IgaXQgPSBkaXJlY3Rv
cmllcy5maW5kKHBhdGhJZGVudGlmaWVyKTsKICAgICBpZiAoaXQgIT0gZGlyZWN0b3JpZXMuZW5k
KCkpCi0gICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gaXQtPnZhbHVl
OwogCiAgICAgU3RyaW5nIGRpcmVjdG9yeSA9IHN0b3JhZ2VEaXJlY3RvcnkocGF0aElkZW50aWZp
ZXIpOwogICAgIGRpcmVjdG9yaWVzLmFkZChwYXRoSWRlbnRpZmllciwgZGlyZWN0b3J5KTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9SdW5Mb29wV2luLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9SdW5Mb29wV2luLmNwcAppbmRleCAxNjYzYjY2MTMz
YWJjMmNiM2ZkMDA1N2QxOTY3MTIzN2QwZTc5OWRhLi4xN2Q2ODQ1ZTlmZmRjMzkyOGMwNjdjN2Mx
NTg4M2FhYjkwZDI5YTY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4v
UnVuTG9vcFdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1J1bkxvb3BX
aW4uY3BwCkBAIC0xMjYsNyArMTI2LDcgQEAgdm9pZCBSdW5Mb29wOjpUaW1lckJhc2U6OnRpbWVy
RmlyZWQoUnVuTG9vcCogcnVuTG9vcCwgdWludDY0X3QgSUQpCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBUaW1lckJhc2UqIHRpbWVyID0gaXQtPnNlY29uZDsKKyAgICBUaW1lckJhc2Uq
IHRpbWVyID0gaXQtPnZhbHVlOwogCiAgICAgaWYgKCF0aW1lci0+bV9pc1JlcGVhdGluZykgewog
ICAgICAgICBydW5Mb29wLT5tX2FjdGl2ZVRpbWVycy5yZW1vdmUoaXQpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1dDRGF0YU9iamVjdC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS93aW4vV0NEYXRhT2JqZWN0LmNwcAppbmRleCAwYzAzY2UwMGYyMjFhZTBh
YzgxYjhlZTcyY2ZlMGQwNTRhMDU2NjU0Li5kZmJkMDA1ZmM0MzZmOGQ3MjE2YTIxNzQ2Njk5Yjdk
ZjgxYjU4MDQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vV0NEYXRh
T2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vV0NEYXRhT2JqZWN0
LmNwcApAQCAtMTY5LDcgKzE2OSw3IEBAIEhSRVNVTFQgV0NEYXRhT2JqZWN0OjpjcmVhdGVJbnN0
YW5jZShXQ0RhdGFPYmplY3QqKiByZXN1bHQsIGNvbnN0IERyYWdEYXRhTWFwJiBkCiAgICAgKnJl
c3VsdCA9IG5ldyBXQ0RhdGFPYmplY3Q7CiAKICAgICBmb3IgKERyYWdEYXRhTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IGRhdGFNYXAuYmVnaW4oKTsgaXQgIT0gZGF0YU1hcC5lbmQoKTsgKytpdCkK
LSAgICAgICAgc2V0Q2xpcGJvYXJkRGF0YSgqcmVzdWx0LCBpdC0+Zmlyc3QsIGl0LT5zZWNvbmQp
OworICAgICAgICBzZXRDbGlwYm9hcmREYXRhKCpyZXN1bHQsIGl0LT5rZXksIGl0LT52YWx1ZSk7
CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3dpbmNlL01JTUVUeXBlUmVnaXN0cnlXaW5DRS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93aW5jZS9NSU1FVHlwZVJlZ2lzdHJ5V2luQ0UuY3BwCmluZGV4IDhhMGQzZDJiNjE2MmI0
NmRiYjdkNjJmMjJjYTAzMjZkYzdmY2VkYzUuLmU5NmZiMmJhN2Q5OTljZTJkM2FjYjBkMGY5YzRj
MjQ4NzQ3ZmU1ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbmNlL01J
TUVUeXBlUmVnaXN0cnlXaW5DRS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2lu
Y2UvTUlNRVR5cGVSZWdpc3RyeVdpbkNFLmNwcApAQCAtMTAxLDggKzEwMSw4IEBAIFN0cmluZyBN
SU1FVHlwZVJlZ2lzdHJ5OjpnZXRQcmVmZXJyZWRFeHRlbnNpb25Gb3JNSU1FVHlwZShjb25zdCBT
dHJpbmcmIHR5cGUpCiAgICAgaW5pdE1JTUVUeXBlRW50ZW5zaW9uTWFwKCk7CiAKICAgICBmb3Ig
KEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+OjppdGVyYXRvciBpID0gbWltZXR5cGVNYXAuYmVnaW4o
KTsgaSAhPSBtaW1ldHlwZU1hcC5lbmQoKTsgKytpKSB7Ci0gICAgICAgIGlmIChlcXVhbElnbm9y
aW5nQ2FzZShpLT5zZWNvbmQsIHR5cGUpKQotICAgICAgICAgICAgcmV0dXJuIGktPmZpcnN0Owor
ICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoaS0+dmFsdWUsIHR5cGUpKQorICAgICAgICAg
ICAgcmV0dXJuIGktPmtleTsKICAgICB9CiAKICAgICByZXR1cm4gU3RyaW5nKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC9Db250ZXh0TWVudVd4LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3d4L0NvbnRleHRNZW51V3guY3BwCmluZGV4IGY3MjI3NjlmYWEw
M2FkY2UyNGRhM2MwZWE3MzU5MzNhODYyNDcxNjQuLjgwMTkyZjM4Y2QxZDMxYTAyMGQ4MTI1MWQy
NDQ2NWQzMjBkY2Y3MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L0Nv
bnRleHRNZW51V3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L0NvbnRleHRN
ZW51V3guY3BwCkBAIC02Niw4ICs2Niw4IEBAIHZvaWQgQ29udGV4dE1lbnU6OmFwcGVuZEl0ZW0o
Q29udGV4dE1lbnVJdGVtJiBpdGVtKQogCiAgICAgSXRlbUFjdGlvbk1hcDo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gc19pdGVtQWN0aW9ucy5lbmQoKTsKICAgICBmb3IgKEl0ZW1BY3Rpb25NYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gc19pdGVtQWN0aW9ucy5iZWdpbigpOyAgaXQgIT0gZW5kOyArK2l0
KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kID09IGl0ZW1EZXNjcmlwdGlvbi5hY3Rpb24pCi0g
ICAgICAgICAgICBpZFd4ID0gaXQtPmZpcnN0OworICAgICAgICBpZiAoaXQtPnZhbHVlID09IGl0
ZW1EZXNjcmlwdGlvbi5hY3Rpb24pCisgICAgICAgICAgICBpZFd4ID0gaXQtPmtleTsKICAgICB9
CiAKICAgICBpZiAoaXRlbURlc2NyaXB0aW9uLnN1Yk1lbnUpIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGx1
Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAKaW5kZXggNmU4MTRhZWI1ZWY5ZDYzZTA2MjBmYWI4MmI2
YjJkNzM2NjZmMzVjNS4uYWY5M2NiOGNjMGJiN2EyZmRkYWNjZjgzODg1MjViMmFkMDI1NTlmNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAKQEAgLTE2Miw3ICsx
NjIsNyBAQCBib29sIFBsdWdpbkRhdGFiYXNlOjpyZWZyZXNoKCkKICAgICAgICAgTUlNRVRvRGVz
Y3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBtYXBfaXQgPSAoKml0KS0+bWltZVRvRGVzY3Jp
cHRpb25zKCkuYmVnaW4oKTsKICAgICAgICAgTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9p
dGVyYXRvciBtYXBfZW5kID0gKCppdCktPm1pbWVUb0Rlc2NyaXB0aW9ucygpLmVuZCgpOwogICAg
ICAgICBmb3IgKDsgbWFwX2l0ICE9IG1hcF9lbmQ7ICsrbWFwX2l0KQotICAgICAgICAgICAgbV9y
ZWdpc3RlcmVkTUlNRVR5cGVzLmFkZChtYXBfaXQtPmZpcnN0KTsKKyAgICAgICAgICAgIG1fcmVn
aXN0ZXJlZE1JTUVUeXBlcy5hZGQobWFwX2l0LT5rZXkpOwogICAgIH0KIAogICAgIHJldHVybiB0
cnVlOwpAQCAtMjQzLDkgKzI0Myw5IEBAIFN0cmluZyBQbHVnaW5EYXRhYmFzZTo6TUlNRVR5cGVG
b3JFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBleHRlbnNpb24pIGNvbnN0CiAgICAgICAgIE1JTUVU
b0V4dGVuc2lvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIG1pbWVfZW5kID0gKCppdCktPm1pbWVUb0V4
dGVuc2lvbnMoKS5lbmQoKTsKIAogICAgICAgICBmb3IgKE1JTUVUb0V4dGVuc2lvbnNNYXA6OmNv
bnN0X2l0ZXJhdG9yIG1pbWVfaXQgPSAoKml0KS0+bWltZVRvRXh0ZW5zaW9ucygpLmJlZ2luKCk7
IG1pbWVfaXQgIT0gbWltZV9lbmQ7ICsrbWltZV9pdCkgewotICAgICAgICAgICAgbWltZVR5cGUg
PSBtaW1lX2l0LT5maXJzdDsKKyAgICAgICAgICAgIG1pbWVUeXBlID0gbWltZV9pdC0+a2V5Owog
ICAgICAgICAgICAgUGx1Z2luUGFja2FnZSogcHJlZmVycmVkUGx1Z2luID0gbV9wcmVmZXJyZWRQ
bHVnaW5zLmdldChtaW1lVHlwZSkuZ2V0KCk7Ci0gICAgICAgICAgICBjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgZXh0ZW5zaW9ucyA9IG1pbWVfaXQtPnNlY29uZDsKKyAgICAgICAgICAgIGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBleHRlbnNpb25zID0gbWltZV9pdC0+dmFsdWU7CiAgICAgICAgICAgICBi
b29sIGZvdW5kTWFwcGluZyA9IGZhbHNlOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGV4dGVuc2lvbnMuc2l6ZSgpOyBpKyspIHsKICAgICAgICAgICAgICAgICBpZiAoZXF1
YWxJZ25vcmluZ0Nhc2UoZXh0ZW5zaW9uc1tpXSwgZXh0ZW5zaW9uKSkgewpAQCAtMzM1LDggKzMz
NSw4IEBAIHZvaWQgUGx1Z2luRGF0YWJhc2U6OnJlbW92ZShQbHVnaW5QYWNrYWdlKiBwYWNrYWdl
KQogICAgIE1JTUVUb0V4dGVuc2lvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcGFja2FnZS0+
bWltZVRvRXh0ZW5zaW9ucygpLmJlZ2luKCk7CiAgICAgTUlNRVRvRXh0ZW5zaW9uc01hcDo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gcGFja2FnZS0+bWltZVRvRXh0ZW5zaW9ucygpLmVuZCgpOwogICAg
IGZvciAoIDsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFBsdWdpblBhY2thZ2VCeU5hbWVN
YXA6Oml0ZXJhdG9yIHBhY2thZ2VJbk1hcCA9IG1fcHJlZmVycmVkUGx1Z2lucy5maW5kKGl0LT5m
aXJzdCk7Ci0gICAgICAgIGlmIChwYWNrYWdlSW5NYXAgIT0gbV9wcmVmZXJyZWRQbHVnaW5zLmVu
ZCgpICYmIHBhY2thZ2VJbk1hcC0+c2Vjb25kID09IHBhY2thZ2UpCisgICAgICAgIFBsdWdpblBh
Y2thZ2VCeU5hbWVNYXA6Oml0ZXJhdG9yIHBhY2thZ2VJbk1hcCA9IG1fcHJlZmVycmVkUGx1Z2lu
cy5maW5kKGl0LT5rZXkpOworICAgICAgICBpZiAocGFja2FnZUluTWFwICE9IG1fcHJlZmVycmVk
UGx1Z2lucy5lbmQoKSAmJiBwYWNrYWdlSW5NYXAtPnZhbHVlID09IHBhY2thZ2UpCiAgICAgICAg
ICAgICBtX3ByZWZlcnJlZFBsdWdpbnMucmVtb3ZlKHBhY2thZ2VJbk1hcCk7CiAgICAgfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbk1haW5UaHJlYWRTY2hlZHVs
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVy
LmNwcAppbmRleCA3NTI4Njc2YjEyYWE4YmRhOGYzM2IzMmVmNDBjYzg3NjU3NjZkMzFhLi4zOWFl
Nzk0ZTJmYjA5NzIxOWE1MjIzZWJmYmVlZGY2OWI2ZTI4NjJjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbHVnaW5zL1BsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luTWFpblRocmVhZFNjaGVkdWxlci5jcHAKQEAgLTQ5LDcg
KzQ5LDcgQEAgdm9pZCBQbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyOjpzY2hlZHVsZUNhbGwoTlBQ
IG5wcCwgTWFpblRocmVhZEZ1bmN0aW9uIGZ1bmN0aW8KICAgICBpZiAoaXQgPT0gbV9jYWxsUXVl
dWVNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGl0LT5zZWNvbmQuYXBwZW5kKENh
bGwoZnVuY3Rpb24sIHVzZXJEYXRhKSk7CisgICAgaXQtPnZhbHVlLmFwcGVuZChDYWxsKGZ1bmN0
aW9uLCB1c2VyRGF0YSkpOwogCiAgICAgaWYgKCFtX2NhbGxQZW5kaW5nKSB7CiAgICAgICAgIGNh
bGxPbk1haW5UaHJlYWQobWFpblRocmVhZENhbGxiYWNrLCB0aGlzKTsKQEAgLTk3LDcgKzk3LDcg
QEAgdm9pZCBQbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyOjpkaXNwYXRjaENhbGxzKCkKICAgICAg
ICAgLy8gRW1wdHkgYWxsIHRoZSBxdWV1ZXMgaW4gdGhlIG9yaWdpbmFsIG1hcAogICAgICAgICBD
YWxsUXVldWVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fY2FsbFF1ZXVlTWFwLmVuZCgpOwogICAgICAg
ICBmb3IgKENhbGxRdWV1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtX2NhbGxRdWV1ZU1hcC5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBpdC0+c2Vjb25kLmNsZWFyKCk7CisgICAg
ICAgICAgICBpdC0+dmFsdWUuY2xlYXIoKTsKICAgICB9CiAKICAgICBtX2NhbGxQZW5kaW5nID0g
ZmFsc2U7CkBAIC0xMDUsNyArMTA1LDcgQEAgdm9pZCBQbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVy
OjpkaXNwYXRjaENhbGxzKCkKIAogICAgIENhbGxRdWV1ZU1hcDo6aXRlcmF0b3IgZW5kID0gY29w
eS5lbmQoKTsKICAgICBmb3IgKENhbGxRdWV1ZU1hcDo6aXRlcmF0b3IgaXQgPSBjb3B5LmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgZGlzcGF0Y2hDYWxsc0ZvclBsdWdpbihpdC0+
Zmlyc3QsIGl0LT5zZWNvbmQpOworICAgICAgICBkaXNwYXRjaENhbGxzRm9yUGx1Z2luKGl0LT5r
ZXksIGl0LT52YWx1ZSk7CiB9CiAKIHZvaWQgUGx1Z2luTWFpblRocmVhZFNjaGVkdWxlcjo6bWFp
blRocmVhZENhbGxiYWNrKHZvaWQqIGNvbnRleHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbHVnaW5zL1BsdWdpblN0cmVhbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdp
blN0cmVhbS5jcHAKaW5kZXggMDAyMzgwZjVmOTUzZjliZWUyYzU2NWU5Y2E1YzEzMmFkNGMwYWY0
YS4uZmRiNzg2MDM1YjBkMTY1NDgyMWZjYjQ2MGFkNGUyZDNhNzFhNWEzNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5TdHJlYW0uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsdWdpbnMvUGx1Z2luU3RyZWFtLmNwcApAQCAtMTQ3LDkgKzE0Nyw5IEBAIHZvaWQgUGx1
Z2luU3RyZWFtOjpzdGFydFN0cmVhbSgpCiAKICAgICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gbV9yZXNvdXJjZVJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMoKS5lbmQo
KTsKICAgICAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fcmVz
b3VyY2VSZXNwb25zZS5odHRwSGVhZGVyRmllbGRzKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+Zmlyc3QpOworICAgICAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPmtleSk7CiAgICAgICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZChzZXBhcmF0b3IpOwotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQoaXQtPnNlY29uZCk7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+dmFs
dWUpOwogICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7CiAgICAgICAgIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ibGFja2JlcnJ5L1BsdWdpbkRh
dGFCbGFja0JlcnJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvYmxhY2tiZXJyeS9QbHVn
aW5EYXRhQmxhY2tCZXJyeS5jcHAKaW5kZXggZDkyMGQxZmJkNWExMTI0NjAzYThjZDk4ZmExMzQz
NTZlNzMwNmI1OS4uNDc0NjYxNmRlMzM1ZmE4M2NlYzk2ZDkzMGUyMGQ4YzI4ZTk0YzNiNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ibGFja2JlcnJ5L1BsdWdpbkRhdGFCbGFj
a0JlcnJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2JsYWNrYmVycnkvUGx1Z2lu
RGF0YUJsYWNrQmVycnkuY3BwCkBAIC00MSw4ICs0MSw4IEBAIHZvaWQgUGx1Z2luRGF0YTo6aW5p
dFBsdWdpbnMoY29uc3QgUGFnZSopCiAgICAgICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gbWltZVRvRGVzY3JpcHRpb25zLmVuZCgpOwogICAgICAgICBmb3Ig
KE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtaW1lVG9EZXNjcmlw
dGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBNaW1lQ2xhc3NJ
bmZvIG1pbWU7Ci0gICAgICAgICAgICBtaW1lLnR5cGUgPSBpdC0+Zmlyc3Q7Ci0gICAgICAgICAg
ICBtaW1lLmRlc2MgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgbWltZS50eXBlID0gaXQtPmtl
eTsKKyAgICAgICAgICAgIG1pbWUuZGVzYyA9IGl0LT52YWx1ZTsKICAgICAgICAgICAgIG1pbWUu
ZXh0ZW5zaW9ucyA9IHBhY2thZ2UtPm1pbWVUb0V4dGVuc2lvbnMoKS5nZXQobWltZS50eXBlKTsK
ICAgICAgICAgICAgIGluZm8ubWltZXMuYXBwZW5kKG1pbWUpOwogICAgICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9QbHVnaW5EYXRhRWZsLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1BsdWdpbkRhdGFFZmwuY3BwCmluZGV4IGMyMWQ1MWIxOWQ3
YjI0YjJjMTU5YzJkZGIzN2JmN2ZlNWRkOGQ5NGMuLjQ3NWY5ZmU1ODMzYmFjNDU3NjVkOTNhNWZi
NDZhMjZiNzYxOTNkZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1Bs
dWdpbkRhdGFFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1BsdWdpbkRh
dGFFZmwuY3BwCkBAIC00Nyw4ICs0Nyw4IEBAIHZvaWQgUGx1Z2luRGF0YTo6aW5pdFBsdWdpbnMo
Y29uc3QgUGFnZSopCiAgICAgICAgIGZvciAoTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKICAgICAgICAgICAgIE1pbWVDbGFzc0luZm8gbWltZTsKIAotICAgICAgICAgICAgbWltZS50
eXBlID0gaXQtPmZpcnN0OwotICAgICAgICAgICAgbWltZS5kZXNjID0gaXQtPnNlY29uZDsKKyAg
ICAgICAgICAgIG1pbWUudHlwZSA9IGl0LT5rZXk7CisgICAgICAgICAgICBtaW1lLmRlc2MgPSBp
dC0+dmFsdWU7CiAgICAgICAgICAgICBtaW1lLmV4dGVuc2lvbnMgPSBwYWNrYWdlLT5taW1lVG9F
eHRlbnNpb25zKCkuZ2V0KG1pbWUudHlwZSk7CiAKICAgICAgICAgICAgIGluZm8ubWltZXMuYXBw
ZW5kKG1pbWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy93eC9QbHVnaW5E
YXRhV3guY3BwIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy93eC9QbHVnaW5EYXRhV3guY3BwCmlu
ZGV4IDBlYjg5MGZlZjA1YTExNWVhY2U0MjYzNzY4MGEzZDZhMTJmNTc3MjkuLjI3OTUyYzRhZThi
ZmE0OWU5OGIxMWFlOTk1OWZjNzU0ZTRkYjIzYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsdWdpbnMvd3gvUGx1Z2luRGF0YVd4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5z
L3d4L1BsdWdpbkRhdGFXeC5jcHAKQEAgLTUxLDggKzUxLDggQEAgdm9pZCBQbHVnaW5EYXRhOjpp
bml0UGx1Z2lucyhjb25zdCBQYWdlKikKICAgICAgICAgZm9yIChNSU1FVG9EZXNjcmlwdGlvbnNN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWltZVRvRGVzY3JpcHRpb25zLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgewogICAgICAgICAgICAgTWltZUNsYXNzSW5mbyBtaW1lOwogCi0gICAgICAg
ICAgICBtaW1lLnR5cGUgPSBpdC0+Zmlyc3Q7Ci0gICAgICAgICAgICBtaW1lLmRlc2MgPSBpdC0+
c2Vjb25kOworICAgICAgICAgICAgbWltZS50eXBlID0gaXQtPmtleTsKKyAgICAgICAgICAgIG1p
bWUuZGVzYyA9IGl0LT52YWx1ZTsKICAgICAgICAgICAgIG1pbWUuZXh0ZW5zaW9ucyA9IHBhY2th
Z2UtPm1pbWVUb0V4dGVuc2lvbnMoKS5nZXQobWltZS50eXBlKTsKIAogICAgICAgICAgICAgaW5m
by5taW1lcy5hcHBlbmQobWltZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSW5saW5lRmxvd0JveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxv
d0JveC5jcHAKaW5kZXggMjA4MWM2ODJkZWQ1ZTdmNTRlOWI2M2NiZmEzYjY4YTJjZGI4MjBlOC4u
ZWZiMGU0ZmU0YjBiYjlhNmVlYzBjYzU5N2U4Zjk2NmI1NjQ0NzQ0YSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcApAQCAtNDQ5LDcgKzQ0OSw3IEBAIGJvb2wg
SW5saW5lRmxvd0JveDo6cmVxdWlyZXNJZGVvZ3JhcGhpY0Jhc2VsaW5lKGNvbnN0IEdseXBoT3Zl
cmZsb3dBbmRGYWxsYmFja0ZvCiAgICAgICAgICAgICBjb25zdCBWZWN0b3I8Y29uc3QgU2ltcGxl
Rm9udERhdGEqPiogdXNlZEZvbnRzID0gMDsKICAgICAgICAgICAgIGlmIChjdXJyLT5pc0lubGlu
ZVRleHRCb3goKSkgewogICAgICAgICAgICAgICAgIEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0Zv
bnRzTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHRleHRCb3hEYXRhTWFwLmZpbmQodG9JbmxpbmVU
ZXh0Qm94KGN1cnIpKTsKLSAgICAgICAgICAgICAgICB1c2VkRm9udHMgPSBpdCA9PSB0ZXh0Qm94
RGF0YU1hcC5lbmQoKSA/IDAgOiAmaXQtPnNlY29uZC5maXJzdDsKKyAgICAgICAgICAgICAgICB1
c2VkRm9udHMgPSBpdCA9PSB0ZXh0Qm94RGF0YU1hcC5lbmQoKSA/IDAgOiAmaXQtPnZhbHVlLmZp
cnN0OwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAodXNlZEZvbnRzKSB7CkBAIC04
MTIsNyArODEyLDcgQEAgaW5saW5lIHZvaWQgSW5saW5lRmxvd0JveDo6YWRkVGV4dEJveFZpc3Vh
bE92ZXJmbG93KElubGluZVRleHRCb3gqIHRleHRCb3gsIEdseXAKICAgICBSZW5kZXJTdHlsZSog
c3R5bGUgPSB0ZXh0Qm94LT5yZW5kZXJlcigpLT5zdHlsZShpc0ZpcnN0TGluZVN0eWxlKCkpOwog
ICAgIAogICAgIEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFwOjppdGVyYXRvciBpdCA9
IHRleHRCb3hEYXRhTWFwLmZpbmQodGV4dEJveCk7Ci0gICAgR2x5cGhPdmVyZmxvdyogZ2x5cGhP
dmVyZmxvdyA9IGl0ID09IHRleHRCb3hEYXRhTWFwLmVuZCgpID8gMCA6ICZpdC0+c2Vjb25kLnNl
Y29uZDsKKyAgICBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93ID0gaXQgPT0gdGV4dEJveERh
dGFNYXAuZW5kKCkgPyAwIDogJml0LT52YWx1ZS5zZWNvbmQ7CiAgICAgYm9vbCBpc0ZsaXBwZWRM
aW5lID0gc3R5bGUtPmlzRmxpcHBlZExpbmVzV3JpdGluZ01vZGUoKTsKIAogICAgIGludCB0b3BH
bHlwaEVkZ2UgPSBnbHlwaE92ZXJmbG93ID8gKGlzRmxpcHBlZExpbmUgPyBnbHlwaE92ZXJmbG93
LT5ib3R0b20gOiBnbHlwaE92ZXJmbG93LT50b3ApIDogMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQmxvY2suY3BwCmluZGV4IDA0MzhkMWIxNjExYmNhYTRlOGU5OTdkMWIzMjIyNzQw
YmVhYjMzODQuLjgyMjZhZGQ3MzA4MzI1MGExZjJkNTBjMTA2YmIzMjkwMDBkMWQ0ZTEgMTAwNzU1
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcApAQCAtNDI2Miw3ICs0MjYyLDcg
QEAgdm9pZCBSZW5kZXJCbG9jazo6Y2xlYXJGbG9hdHMoQmxvY2tMYXlvdXRQYXNzIGxheW91dFBh
c3MpCiAKICAgICAgICAgUmVuZGVyZXJUb0Zsb2F0SW5mb01hcDo6aXRlcmF0b3IgZW5kID0gZmxv
YXRNYXAuZW5kKCk7CiAgICAgICAgIGZvciAoUmVuZGVyZXJUb0Zsb2F0SW5mb01hcDo6aXRlcmF0
b3IgaXQgPSBmbG9hdE1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAg
IEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCA9ICgqaXQpLnNlY29uZDsKKyAgICAgICAg
ICAgIEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCA9ICgqaXQpLnZhbHVlOwogICAgICAg
ICAgICAgaWYgKCFmbG9hdGluZ09iamVjdC0+aXNEZXNjZW5kYW50KCkpIHsKICAgICAgICAgICAg
ICAgICBjaGFuZ2VMb2dpY2FsVG9wID0gMDsKICAgICAgICAgICAgICAgICBjaGFuZ2VMb2dpY2Fs
Qm90dG9tID0gbWF4KGNoYW5nZUxvZ2ljYWxCb3R0b20sIGxvZ2ljYWxCb3R0b21Gb3JGbG9hdChm
bG9hdGluZ09iamVjdCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrTGluZUxheW91dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2tMaW5lTGF5b3V0LmNwcAppbmRleCA5ZGQyMTgxMjUwMjVmMjkzYTg2YjU2NTk3YzhiNzZm
MjE4NGNkNWYyLi5mZTdiZWZkMDBjM2Y5ODM2Yjg4ZGUyOGNiYzgyY2FjNmRmMjE0NjNmIDEwMDc1
NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNw
cApAQCAtNjYzLDE0ICs2NjMsMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldExvZ2ljYWxXaWR0
aEZvclRleHRSdW4oUm9vdElubGluZUJveCogbGluZUJveCwgQmlkaVJ1biogcnUKICAgICBpZiAo
IWZhbGxiYWNrRm9udHMuaXNFbXB0eSgpKSB7CiAgICAgICAgIEFTU0VSVChydW4tPm1fYm94LT5p
c1RleHQoKSk7CiAgICAgICAgIEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFwOjppdGVy
YXRvciBpdCA9IHRleHRCb3hEYXRhTWFwLmFkZCh0b0lubGluZVRleHRCb3gocnVuLT5tX2JveCks
IG1ha2VfcGFpcihWZWN0b3I8Y29uc3QgU2ltcGxlRm9udERhdGEqPigpLCBHbHlwaE92ZXJmbG93
KCkpKS5pdGVyYXRvcjsKLSAgICAgICAgQVNTRVJUKGl0LT5zZWNvbmQuZmlyc3QuaXNFbXB0eSgp
KTsKLSAgICAgICAgY29weVRvVmVjdG9yKGZhbGxiYWNrRm9udHMsIGl0LT5zZWNvbmQuZmlyc3Qp
OworICAgICAgICBBU1NFUlQoaXQtPnZhbHVlLmZpcnN0LmlzRW1wdHkoKSk7CisgICAgICAgIGNv
cHlUb1ZlY3RvcihmYWxsYmFja0ZvbnRzLCBpdC0+dmFsdWUuZmlyc3QpOwogICAgICAgICBydW4t
Pm1fYm94LT5wYXJlbnQoKS0+Y2xlYXJEZXNjZW5kYW50c0hhdmVTYW1lTGluZUhlaWdodEFuZEJh
c2VsaW5lKCk7CiAgICAgfQogICAgIGlmICgoZ2x5cGhPdmVyZmxvdy50b3AgfHwgZ2x5cGhPdmVy
Zmxvdy5ib3R0b20gfHwgZ2x5cGhPdmVyZmxvdy5sZWZ0IHx8IGdseXBoT3ZlcmZsb3cucmlnaHQp
KSB7CiAgICAgICAgIEFTU0VSVChydW4tPm1fYm94LT5pc1RleHQoKSk7CiAgICAgICAgIEdseXBo
T3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFwOjppdGVyYXRvciBpdCA9IHRleHRCb3hEYXRhTWFw
LmFkZCh0b0lubGluZVRleHRCb3gocnVuLT5tX2JveCksIG1ha2VfcGFpcihWZWN0b3I8Y29uc3Qg
U2ltcGxlRm9udERhdGEqPigpLCBHbHlwaE92ZXJmbG93KCkpKS5pdGVyYXRvcjsKLSAgICAgICAg
aXQtPnNlY29uZC5zZWNvbmQgPSBnbHlwaE92ZXJmbG93OworICAgICAgICBpdC0+dmFsdWUuc2Vj
b25kID0gZ2x5cGhPdmVyZmxvdzsKICAgICAgICAgcnVuLT5tX2JveC0+Y2xlYXJLbm93blRvSGF2
ZU5vT3ZlcmZsb3coKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3gu
Y3BwCmluZGV4IGUzYjgxYTc0OTkzM2JmYjNhM2YyMmI4NGU4NzNkMDY3MjgyNzgyYzYuLjRjMDRj
ZTdjNjZmYTljZjNlNDU2ZTYzY2RmODVlM2VhZjY5YWM4MzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCb3guY3BwCkBAIC03ODUsNyArNzg1LDcgQEAgSW50U2l6ZSBSZW5kZXJCb3g6
OmNhY2hlZFNpemVGb3JPdmVyZmxvd0NsaXAoKSBjb25zdAogICAgIGlmIChpdCA9PSBjYWNoZWRT
aXplRm9yT3ZlcmZsb3dDbGlwTWFwKCkuZW5kKCkpCiAgICAgICAgIHJldHVybiBMYXlvdXRTaXpl
KCk7CiAKLSAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICByZXR1cm4gaXQtPnZhbHVlOwogfQog
CiB2b2lkIFJlbmRlckJveDo6dXBkYXRlQ2FjaGVkU2l6ZUZvck92ZXJmbG93Q2xpcCgpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAppbmRl
eCAyZTU1ZTdmNzQ5MjQ2NDQ5NzdjNjMzZWU3ZTZlYmE0YTViOWFjYWU0Li5kNzAyNmE1NDAyOGRl
MDYxNzQ1NWZjMjZmNWI4NWZiNjgyZmJkZDUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKQEAgLTEzMiw3ICsxMzIsNyBAQCB2b2lk
IEltYWdlUXVhbGl0eUNvbnRyb2xsZXI6OmhpZ2hRdWFsaXR5UmVwYWludFRpbWVyRmlyZWQoVGlt
ZXI8SW1hZ2VRdWFsaXR5Q29udAogICAgIGlmIChtX2FuaW1hdGVkUmVzaXplSXNBY3RpdmUpIHsK
ICAgICAgICAgbV9hbmltYXRlZFJlc2l6ZUlzQWN0aXZlID0gZmFsc2U7CiAgICAgICAgIGZvciAo
T2JqZWN0TGF5ZXJTaXplTWFwOjppdGVyYXRvciBpdCA9IG1fb2JqZWN0TGF5ZXJTaXplTWFwLmJl
Z2luKCk7IGl0ICE9IG1fb2JqZWN0TGF5ZXJTaXplTWFwLmVuZCgpOyArK2l0KQotICAgICAgICAg
ICAgaXQtPmZpcnN0LT5yZXBhaW50KCk7CisgICAgICAgICAgICBpdC0+a2V5LT5yZXBhaW50KCk7
CiAgICAgfQogfQogCkBAIC0xNTcsMTQgKzE1NywxNCBAQCBib29sIEltYWdlUXVhbGl0eUNvbnRy
b2xsZXI6OnNob3VsZFBhaW50QXRMb3dRdWFsaXR5KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
UgogCiAgICAgLy8gTG9vayBvdXJzZWx2ZXMgdXAgaW4gdGhlIGhhc2h0YWJsZXMuCiAgICAgT2Jq
ZWN0TGF5ZXJTaXplTWFwOjppdGVyYXRvciBpID0gbV9vYmplY3RMYXllclNpemVNYXAuZmluZChv
YmplY3QpOwotICAgIExheWVyU2l6ZU1hcCogaW5uZXJNYXAgPSBpICE9IG1fb2JqZWN0TGF5ZXJT
aXplTWFwLmVuZCgpID8gJmktPnNlY29uZCA6IDA7CisgICAgTGF5ZXJTaXplTWFwKiBpbm5lck1h
cCA9IGkgIT0gbV9vYmplY3RMYXllclNpemVNYXAuZW5kKCkgPyAmaS0+dmFsdWUgOiAwOwogICAg
IExheW91dFNpemUgb2xkU2l6ZTsKICAgICBib29sIGlzRmlyc3RSZXNpemUgPSB0cnVlOwogICAg
IGlmIChpbm5lck1hcCkgewogICAgICAgICBMYXllclNpemVNYXA6Oml0ZXJhdG9yIGogPSBpbm5l
ck1hcC0+ZmluZChsYXllcik7CiAgICAgICAgIGlmIChqICE9IGlubmVyTWFwLT5lbmQoKSkgewog
ICAgICAgICAgICAgaXNGaXJzdFJlc2l6ZSA9IGZhbHNlOwotICAgICAgICAgICAgb2xkU2l6ZSA9
IGotPnNlY29uZDsKKyAgICAgICAgICAgIG9sZFNpemUgPSBqLT52YWx1ZTsKICAgICAgICAgfQog
ICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwCmluZGV4
IDA4MDdlYTlkZDk3ODE2YTNmNjdiY2EwZmM1ODg4YjU4Y2Q3ZjFkNGUuLmRjNDM4YmUyOGEzYmRj
YTViM2VlMGYwMTI3ZWI0NDliZjFhMmJiNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJDb3VudGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQ291bnRlci5jcHAKQEAgLTU2MywxMSArNTYzLDExIEBAIHZvaWQgUmVuZGVyQ291bnRl
cjo6ZGVzdHJveUNvdW50ZXJOb2RlcyhSZW5kZXJPYmplY3QqIG93bmVyKQogICAgIENvdW50ZXJN
YXBzOjppdGVyYXRvciBtYXBzSXRlcmF0b3IgPSBtYXBzLmZpbmQob3duZXIpOwogICAgIGlmICht
YXBzSXRlcmF0b3IgPT0gbWFwcy5lbmQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIENvdW50ZXJN
YXAqIG1hcCA9IG1hcHNJdGVyYXRvci0+c2Vjb25kOworICAgIENvdW50ZXJNYXAqIG1hcCA9IG1h
cHNJdGVyYXRvci0+dmFsdWU7CiAgICAgQ291bnRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
bWFwLT5lbmQoKTsKICAgICBmb3IgKENvdW50ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFw
LT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgQXRvbWljU3RyaW5nIGlkZW50
aWZpZXIoaXQtPmZpcnN0LmdldCgpKTsKLSAgICAgICAgZGVzdHJveUNvdW50ZXJOb2RlV2l0aG91
dE1hcFJlbW92YWwoaWRlbnRpZmllciwgaXQtPnNlY29uZC5nZXQoKSk7CisgICAgICAgIEF0b21p
Y1N0cmluZyBpZGVudGlmaWVyKGl0LT5rZXkuZ2V0KCkpOworICAgICAgICBkZXN0cm95Q291bnRl
ck5vZGVXaXRob3V0TWFwUmVtb3ZhbChpZGVudGlmaWVyLCBpdC0+dmFsdWUuZ2V0KCkpOwogICAg
IH0KICAgICBtYXBzLnJlbW92ZShtYXBzSXRlcmF0b3IpOwogICAgIGRlbGV0ZSBtYXA7CkBAIC01
ODIsNyArNTgyLDcgQEAgdm9pZCBSZW5kZXJDb3VudGVyOjpkZXN0cm95Q291bnRlck5vZGUoUmVu
ZGVyT2JqZWN0KiBvd25lciwgY29uc3QgQXRvbWljU3RyaW5nJgogICAgIENvdW50ZXJNYXA6Oml0
ZXJhdG9yIG1hcEl0ZXJhdG9yID0gbWFwLT5maW5kKGlkZW50aWZpZXIuaW1wbCgpKTsKICAgICBp
ZiAobWFwSXRlcmF0b3IgPT0gbWFwLT5lbmQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGRlc3Ry
b3lDb3VudGVyTm9kZVdpdGhvdXRNYXBSZW1vdmFsKGlkZW50aWZpZXIsIG1hcEl0ZXJhdG9yLT5z
ZWNvbmQuZ2V0KCkpOworICAgIGRlc3Ryb3lDb3VudGVyTm9kZVdpdGhvdXRNYXBSZW1vdmFsKGlk
ZW50aWZpZXIsIG1hcEl0ZXJhdG9yLT52YWx1ZS5nZXQoKSk7CiAgICAgbWFwLT5yZW1vdmUobWFw
SXRlcmF0b3IpOwogICAgIC8vIFdlIGRvIG5vdCBkZWxldGUgIm1hcCIgaGVyZSBldmVuIGlmIGVt
cHR5IGJlY2F1c2Ugd2UgZXhwZWN0IHRvIHJldXNlCiAgICAgLy8gaXQgc29vbi4gSW4gb3JkZXIg
Zm9yIGEgcmVuZGVyZXIgdG8gbG9zZSBhbGwgaXRzIGNvdW50ZXJzIHBlcm1hbmVudGx5LApAQCAt
NjE5LDIyICs2MTksMjIgQEAgc3RhdGljIHZvaWQgdXBkYXRlQ291bnRlcnMoUmVuZGVyT2JqZWN0
KiByZW5kZXJlcikKICAgICBDb3VudGVyRGlyZWN0aXZlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQg
PSBkaXJlY3RpdmVNYXAtPmVuZCgpOwogICAgIGlmICghcmVuZGVyZXItPmhhc0NvdW50ZXJOb2Rl
TWFwKCkpIHsKICAgICAgICAgZm9yIChDb3VudGVyRGlyZWN0aXZlTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IGRpcmVjdGl2ZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAg
ICAgbWFrZUNvdW50ZXJOb2RlKHJlbmRlcmVyLCBBdG9taWNTdHJpbmcoaXQtPmZpcnN0LmdldCgp
KSwgZmFsc2UpOworICAgICAgICAgICAgbWFrZUNvdW50ZXJOb2RlKHJlbmRlcmVyLCBBdG9taWNT
dHJpbmcoaXQtPmtleS5nZXQoKSksIGZhbHNlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICBDb3VudGVyTWFwKiBjb3VudGVyTWFwID0gY291bnRlck1hcHMoKS5nZXQocmVuZGVyZXIpOwog
ICAgIEFTU0VSVChjb3VudGVyTWFwKTsKICAgICBmb3IgKENvdW50ZXJEaXJlY3RpdmVNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gZGlyZWN0aXZlTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKLSAgICAgICAgUmVmUHRyPENvdW50ZXJOb2RlPiBub2RlID0gY291bnRlck1hcC0+Z2V0KGl0
LT5maXJzdC5nZXQoKSk7CisgICAgICAgIFJlZlB0cjxDb3VudGVyTm9kZT4gbm9kZSA9IGNvdW50
ZXJNYXAtPmdldChpdC0+a2V5LmdldCgpKTsKICAgICAgICAgaWYgKCFub2RlKSB7Ci0gICAgICAg
ICAgICBtYWtlQ291bnRlck5vZGUocmVuZGVyZXIsIEF0b21pY1N0cmluZyhpdC0+Zmlyc3QuZ2V0
KCkpLCBmYWxzZSk7CisgICAgICAgICAgICBtYWtlQ291bnRlck5vZGUocmVuZGVyZXIsIEF0b21p
Y1N0cmluZyhpdC0+a2V5LmdldCgpKSwgZmFsc2UpOwogICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgIH0KICAgICAgICAgUmVmUHRyPENvdW50ZXJOb2RlPiBuZXdQYXJlbnQgPSAwOwogICAg
ICAgICBSZWZQdHI8Q291bnRlck5vZGU+IG5ld1ByZXZpb3VzU2libGluZyA9IDA7CiAgICAgICAg
IAotICAgICAgICBmaW5kUGxhY2VGb3JDb3VudGVyKHJlbmRlcmVyLCBBdG9taWNTdHJpbmcoaXQt
PmZpcnN0LmdldCgpKSwgbm9kZS0+aGFzUmVzZXRUeXBlKCksIG5ld1BhcmVudCwgbmV3UHJldmlv
dXNTaWJsaW5nKTsKLSAgICAgICAgaWYgKG5vZGUgIT0gY291bnRlck1hcC0+Z2V0KGl0LT5maXJz
dC5nZXQoKSkpCisgICAgICAgIGZpbmRQbGFjZUZvckNvdW50ZXIocmVuZGVyZXIsIEF0b21pY1N0
cmluZyhpdC0+a2V5LmdldCgpKSwgbm9kZS0+aGFzUmVzZXRUeXBlKCksIG5ld1BhcmVudCwgbmV3
UHJldmlvdXNTaWJsaW5nKTsKKyAgICAgICAgaWYgKG5vZGUgIT0gY291bnRlck1hcC0+Z2V0KGl0
LT5rZXkuZ2V0KCkpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIENvdW50ZXJOb2Rl
KiBwYXJlbnQgPSBub2RlLT5wYXJlbnQoKTsKICAgICAgICAgaWYgKG5ld1BhcmVudCA9PSBwYXJl
bnQgJiYgbmV3UHJldmlvdXNTaWJsaW5nID09IG5vZGUtPnByZXZpb3VzU2libGluZygpKQpAQCAt
NjQyLDcgKzY0Miw3IEBAIHN0YXRpYyB2b2lkIHVwZGF0ZUNvdW50ZXJzKFJlbmRlck9iamVjdCog
cmVuZGVyZXIpCiAgICAgICAgIGlmIChwYXJlbnQpCiAgICAgICAgICAgICBwYXJlbnQtPnJlbW92
ZUNoaWxkKG5vZGUuZ2V0KCkpOwogICAgICAgICBpZiAobmV3UGFyZW50KQotICAgICAgICAgICAg
bmV3UGFyZW50LT5pbnNlcnRBZnRlcihub2RlLmdldCgpLCBuZXdQcmV2aW91c1NpYmxpbmcuZ2V0
KCksIGl0LT5maXJzdC5nZXQoKSk7CisgICAgICAgICAgICBuZXdQYXJlbnQtPmluc2VydEFmdGVy
KG5vZGUuZ2V0KCksIG5ld1ByZXZpb3VzU2libGluZy5nZXQoKSwgaXQtPmtleS5nZXQoKSk7CiAg
ICAgfQogfQogCkBAIC02NzEsMjEgKzY3MSwyMSBAQCB2b2lkIFJlbmRlckNvdW50ZXI6OnJlbmRl
cmVyU3R5bGVDaGFuZ2VkKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eQog
ICAgICAgICAgICAgQ291bnRlckRpcmVjdGl2ZU1hcDo6Y29uc3RfaXRlcmF0b3IgbmV3TWFwRW5k
ID0gbmV3Q291bnRlckRpcmVjdGl2ZXMtPmVuZCgpOwogICAgICAgICAgICAgQ291bnRlckRpcmVj
dGl2ZU1hcDo6Y29uc3RfaXRlcmF0b3Igb2xkTWFwRW5kID0gb2xkQ291bnRlckRpcmVjdGl2ZXMt
PmVuZCgpOwogICAgICAgICAgICAgZm9yIChDb3VudGVyRGlyZWN0aXZlTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IG5ld0NvdW50ZXJEaXJlY3RpdmVzLT5iZWdpbigpOyBpdCAhPSBuZXdNYXBFbmQ7
ICsraXQpIHsKLSAgICAgICAgICAgICAgICBDb3VudGVyRGlyZWN0aXZlTWFwOjpjb25zdF9pdGVy
YXRvciBvbGRNYXBJdCA9IG9sZENvdW50ZXJEaXJlY3RpdmVzLT5maW5kKGl0LT5maXJzdCk7Cisg
ICAgICAgICAgICAgICAgQ291bnRlckRpcmVjdGl2ZU1hcDo6Y29uc3RfaXRlcmF0b3Igb2xkTWFw
SXQgPSBvbGRDb3VudGVyRGlyZWN0aXZlcy0+ZmluZChpdC0+a2V5KTsKICAgICAgICAgICAgICAg
ICBpZiAob2xkTWFwSXQgIT0gb2xkTWFwRW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChv
bGRNYXBJdC0+c2Vjb25kID09IGl0LT5zZWNvbmQpCisgICAgICAgICAgICAgICAgICAgIGlmIChv
bGRNYXBJdC0+dmFsdWUgPT0gaXQtPnZhbHVlKQogICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICAgICAgICAgIFJlbmRlckNvdW50ZXI6OmRlc3Ryb3lDb3VudGVy
Tm9kZShyZW5kZXJlciwgaXQtPmZpcnN0LmdldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgUmVu
ZGVyQ291bnRlcjo6ZGVzdHJveUNvdW50ZXJOb2RlKHJlbmRlcmVyLCBpdC0+a2V5LmdldCgpKTsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgLy8gV2UgbXVzdCBjcmVhdGUgdGhp
cyBub2RlIGhlcmUsIGJlY2F1c2UgdGhlIGNoYW5nZWQgbm9kZSBtYXkgYmUgYSBub2RlIHdpdGgg
bm8gZGlzcGxheSBzdWNoIGFzCiAgICAgICAgICAgICAgICAgLy8gYXMgdGhvc2UgY3JlYXRlZCBi
eSB0aGUgaW5jcmVtZW50IG9yIHJlc2V0IGRpcmVjdGl2ZXMgYW5kIHRoZSByZS1sYXlvdXQgdGhh
dCB3aWxsIGhhcHBlbiB3aWxsCiAgICAgICAgICAgICAgICAgLy8gbm90IGNhdGNoIHRoZSBjaGFu
Z2UgaWYgdGhlIG5vZGUgaGFkIG5vIGNoaWxkcmVuLgotICAgICAgICAgICAgICAgIG1ha2VDb3Vu
dGVyTm9kZShyZW5kZXJlciwgaXQtPmZpcnN0LmdldCgpLCBmYWxzZSk7CisgICAgICAgICAgICAg
ICAgbWFrZUNvdW50ZXJOb2RlKHJlbmRlcmVyLCBpdC0+a2V5LmdldCgpLCBmYWxzZSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAvLyBEZXN0cm95aW5nIG9sZCBjb3VudGVycyB0aGF0IGRv
IG5vdCBleGlzdCBpbiB0aGUgbmV3IGNvdW50ZXJEaXJlY3RpdmUgbWFwLgogICAgICAgICAgICAg
Zm9yIChDb3VudGVyRGlyZWN0aXZlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG9sZENvdW50ZXJE
aXJlY3RpdmVzLT5iZWdpbigpOyBpdCAhPW9sZE1hcEVuZDsgKytpdCkgewotICAgICAgICAgICAg
ICAgIGlmICghbmV3Q291bnRlckRpcmVjdGl2ZXMtPmNvbnRhaW5zKGl0LT5maXJzdCkpCi0gICAg
ICAgICAgICAgICAgICAgIFJlbmRlckNvdW50ZXI6OmRlc3Ryb3lDb3VudGVyTm9kZShyZW5kZXJl
ciwgaXQtPmZpcnN0LmdldCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoIW5ld0NvdW50ZXJEaXJl
Y3RpdmVzLT5jb250YWlucyhpdC0+a2V5KSkKKyAgICAgICAgICAgICAgICAgICAgUmVuZGVyQ291
bnRlcjo6ZGVzdHJveUNvdW50ZXJOb2RlKHJlbmRlcmVyLCBpdC0+a2V5LmdldCgpKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChyZW5kZXJlci0+aGFz
Q291bnRlck5vZGVNYXAoKSkKQEAgLTY5Nyw3ICs2OTcsNyBAQCB2b2lkIFJlbmRlckNvdW50ZXI6
OnJlbmRlcmVyU3R5bGVDaGFuZ2VkKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IFJlbmRl
clN0eQogICAgICAgICAgICAgLy8gV2UgbXVzdCBjcmVhdGUgdGhpcyBub2RlIGhlcmUsIGJlY2F1
c2UgdGhlIGFkZGVkIG5vZGUgbWF5IGJlIGEgbm9kZSB3aXRoIG5vIGRpc3BsYXkgc3VjaCBhcwog
ICAgICAgICAgICAgLy8gYXMgdGhvc2UgY3JlYXRlZCBieSB0aGUgaW5jcmVtZW50IG9yIHJlc2V0
IGRpcmVjdGl2ZXMgYW5kIHRoZSByZS1sYXlvdXQgdGhhdCB3aWxsIGhhcHBlbiB3aWxsCiAgICAg
ICAgICAgICAvLyBub3QgY2F0Y2ggdGhlIGNoYW5nZSBpZiB0aGUgbm9kZSBoYWQgbm8gY2hpbGRy
ZW4uCi0gICAgICAgICAgICBtYWtlQ291bnRlck5vZGUocmVuZGVyZXIsIGl0LT5maXJzdC5nZXQo
KSwgZmFsc2UpOworICAgICAgICAgICAgbWFrZUNvdW50ZXJOb2RlKHJlbmRlcmVyLCBpdC0+a2V5
LmdldCgpLCBmYWxzZSk7CiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAKaW5kZXggMGY5ZjZkM2VjN2M5OTE2ZDk2ZTZh
NzZiZjAzODdiMDEwNTNjOGI3NS4uOWUzYjUxYWE1YzdiNDU1NjVlYmQyNzI4ZDkyMDUzMjM3NmM5
NjkxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJl
YWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNw
cApAQCAtNjU1LDcgKzY1NSw3IEBAIHZvaWQgUmVuZGVyRmxvd1RocmVhZDo6c2V0UmVnaW9uUmFu
Z2VGb3JCb3goY29uc3QgUmVuZGVyQm94KiBib3gsIExheW91dFVuaXQgb2ZmCiAgICAgfQogCiAg
ICAgLy8gSWYgbm90aGluZyBjaGFuZ2VkLCBqdXN0IGJhaWwuCi0gICAgUmVuZGVyUmVnaW9uUmFu
Z2UmIHJhbmdlID0gaXQtPnNlY29uZDsKKyAgICBSZW5kZXJSZWdpb25SYW5nZSYgcmFuZ2UgPSBp
dC0+dmFsdWU7CiAgICAgaWYgKHJhbmdlLnN0YXJ0UmVnaW9uKCkgPT0gc3RhcnRSZWdpb24gJiYg
cmFuZ2UuZW5kUmVnaW9uKCkgPT0gZW5kUmVnaW9uKQogICAgICAgICByZXR1cm47CiAKQEAgLTY4
NSw3ICs2ODUsNyBAQCB2b2lkIFJlbmRlckZsb3dUaHJlYWQ6OmdldFJlZ2lvblJhbmdlRm9yQm94
KGNvbnN0IFJlbmRlckJveCogYm94LCBSZW5kZXJSZWdpb24qJgogICAgIGlmIChpdCA9PSBtX3Jl
Z2lvblJhbmdlTWFwLmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBjb25zdCBSZW5kZXJS
ZWdpb25SYW5nZSYgcmFuZ2UgPSBpdC0+c2Vjb25kOworICAgIGNvbnN0IFJlbmRlclJlZ2lvblJh
bmdlJiByYW5nZSA9IGl0LT52YWx1ZTsKICAgICBzdGFydFJlZ2lvbiA9IHJhbmdlLnN0YXJ0UmVn
aW9uKCk7CiAgICAgZW5kUmVnaW9uID0gcmFuZ2UuZW5kUmVnaW9uKCk7CiAgICAgQVNTRVJUKG1f
cmVnaW9uTGlzdC5jb250YWlucyhzdGFydFJlZ2lvbikgJiYgbV9yZWdpb25MaXN0LmNvbnRhaW5z
KGVuZFJlZ2lvbikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKaW5k
ZXggMTYxN2MwNGYyYTFkOWE3ZmJkNGU5NTgyNmU2MmVlMGE2OTc0ODg0MS4uOGFkNmM4MjZmNmRl
NzM2ZDNiZWQ3NzQ5NmI4MzExMTg0Y2U0ODdmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXIuY3BwCkBAIC0yNzE4LDcgKzI3MTgsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpw
YWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJl
Y3QsCiAgICAgcGFpbnRMYXllcih0aGlzLCBjb250ZXh0LCBkYW1hZ2VSZWN0LCBwYWludEJlaGF2
aW9yLCBwYWludGluZ1Jvb3QsIHJlZ2lvbiwgJm92ZXJsYXBUZXN0UmVxdWVzdHMsIHBhaW50Rmxh
Z3MpOwogICAgIE92ZXJsYXBUZXN0UmVxdWVzdE1hcDo6aXRlcmF0b3IgZW5kID0gb3ZlcmxhcFRl
c3RSZXF1ZXN0cy5lbmQoKTsKICAgICBmb3IgKE92ZXJsYXBUZXN0UmVxdWVzdE1hcDo6aXRlcmF0
b3IgaXQgPSBvdmVybGFwVGVzdFJlcXVlc3RzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAg
ICAgICAgaXQtPmZpcnN0LT5zZXRPdmVybGFwVGVzdFJlc3VsdChmYWxzZSk7CisgICAgICAgIGl0
LT5rZXktPnNldE92ZXJsYXBUZXN0UmVzdWx0KGZhbHNlKTsKIH0KIAogdm9pZCBSZW5kZXJMYXll
cjo6cGFpbnRPdmVybGF5U2Nyb2xsYmFycyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0
IExheW91dFJlY3QmIGRhbWFnZVJlY3QsIFBhaW50QmVoYXZpb3IgcGFpbnRCZWhhdmlvciwgUmVu
ZGVyT2JqZWN0KiBwYWludGluZ1Jvb3QpCkBAIC0yNzg3LDExICsyNzg3LDExIEBAIHN0YXRpYyB2
b2lkIHBlcmZvcm1PdmVybGFwVGVzdHMoT3ZlcmxhcFRlc3RSZXF1ZXN0TWFwJiBvdmVybGFwVGVz
dFJlcXVlc3RzLCBjb25zCiAgICAgT3ZlcmxhcFRlc3RSZXF1ZXN0TWFwOjppdGVyYXRvciBlbmQg
PSBvdmVybGFwVGVzdFJlcXVlc3RzLmVuZCgpOwogICAgIExheW91dFJlY3QgYm91bmRpbmdCb3gg
PSBsYXllci0+Ym91bmRpbmdCb3gocm9vdExheWVyKTsKICAgICBmb3IgKE92ZXJsYXBUZXN0UmVx
dWVzdE1hcDo6aXRlcmF0b3IgaXQgPSBvdmVybGFwVGVzdFJlcXVlc3RzLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoIWJvdW5kaW5nQm94LmludGVyc2VjdHMoaXQtPnNl
Y29uZCkpCisgICAgICAgIGlmICghYm91bmRpbmdCb3guaW50ZXJzZWN0cyhpdC0+dmFsdWUpKQog
ICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaXQtPmZpcnN0LT5zZXRPdmVybGFwVGVz
dFJlc3VsdCh0cnVlKTsKLSAgICAgICAgb3ZlcmxhcHBlZFJlcXVlc3RDbGllbnRzLmFwcGVuZChp
dC0+Zmlyc3QpOworICAgICAgICBpdC0+a2V5LT5zZXRPdmVybGFwVGVzdFJlc3VsdCh0cnVlKTsK
KyAgICAgICAgb3ZlcmxhcHBlZFJlcXVlc3RDbGllbnRzLmFwcGVuZChpdC0+a2V5KTsKICAgICB9
CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvdmVybGFwcGVkUmVxdWVzdENsaWVudHMuc2l6
ZSgpOyArK2kpCiAgICAgICAgIG92ZXJsYXBUZXN0UmVxdWVzdHMucmVtb3ZlKG92ZXJsYXBwZWRS
ZXF1ZXN0Q2xpZW50c1tpXSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTmFtZWRGbG93VGhyZWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJOYW1lZEZsb3dUaHJlYWQuY3BwCmluZGV4IGRhYjVkN2IyMWU3YWU5ZjBkZDljMDBhNTg3NDAy
YWRhMWFjN2ZjMDQuLjM2ZjBhYmJiNGI5ODllMGExMmRiYzA0MWRjMmJhZDM5MDU4NTg1ZTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQu
Y3BwCkBAIC0xMTAsNyArMTEwLDcgQEAgYm9vbCBSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OmRlcGVu
ZHNPbihSZW5kZXJOYW1lZEZsb3dUaHJlYWQqIG90aGVyUmVuZGVyRmxvd1RocmUKICAgICBSZW5k
ZXJOYW1lZEZsb3dUaHJlYWRDb3VudGVkU2V0Ojpjb25zdF9pdGVyYXRvciBpdGVyYXRvciA9IG1f
bGF5b3V0QmVmb3JlVGhyZWFkc1NldC5iZWdpbigpOwogICAgIFJlbmRlck5hbWVkRmxvd1RocmVh
ZENvdW50ZWRTZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fbGF5b3V0QmVmb3JlVGhyZWFkc1Nl
dC5lbmQoKTsKICAgICBmb3IgKDsgaXRlcmF0b3IgIT0gZW5kOyArK2l0ZXJhdG9yKSB7Ci0gICAg
ICAgIGNvbnN0IFJlbmRlck5hbWVkRmxvd1RocmVhZCogYmVmb3JlRmxvd1RocmVhZCA9ICgqaXRl
cmF0b3IpLmZpcnN0OworICAgICAgICBjb25zdCBSZW5kZXJOYW1lZEZsb3dUaHJlYWQqIGJlZm9y
ZUZsb3dUaHJlYWQgPSAoKml0ZXJhdG9yKS5rZXk7CiAgICAgICAgIGlmIChiZWZvcmVGbG93VGhy
ZWFkLT5kZXBlbmRzT24ob3RoZXJSZW5kZXJGbG93VGhyZWFkKSkKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KQEAgLTIzNiw3ICsyMzYsNyBAQCB2b2lkIFJlbmRlck5hbWVkRmxvd1Ro
cmVhZDo6cmVtb3ZlRGVwZW5kZW5jeU9uRmxvd1RocmVhZChSZW5kZXJOYW1lZEZsb3dUaHJlYWQq
CiB2b2lkIFJlbmRlck5hbWVkRmxvd1RocmVhZDo6cHVzaERlcGVuZGVuY2llcyhSZW5kZXJOYW1l
ZEZsb3dUaHJlYWRMaXN0JiBsaXN0KQogewogICAgIGZvciAoUmVuZGVyTmFtZWRGbG93VGhyZWFk
Q291bnRlZFNldDo6aXRlcmF0b3IgaXRlciA9IG1fbGF5b3V0QmVmb3JlVGhyZWFkc1NldC5iZWdp
bigpOyBpdGVyICE9IG1fbGF5b3V0QmVmb3JlVGhyZWFkc1NldC5lbmQoKTsgKytpdGVyKSB7Ci0g
ICAgICAgIFJlbmRlck5hbWVkRmxvd1RocmVhZCogZmxvd1RocmVhZCA9ICgqaXRlcikuZmlyc3Q7
CisgICAgICAgIFJlbmRlck5hbWVkRmxvd1RocmVhZCogZmxvd1RocmVhZCA9ICgqaXRlcikua2V5
OwogICAgICAgICBpZiAobGlzdC5jb250YWlucyhmbG93VGhyZWFkKSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICBmbG93VGhyZWFkLT5wdXNoRGVwZW5kZW5jaWVzKGxpc3QpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcAppbmRleCAxNjFlNTA5YWJlM2U2
NTExMWUwMGExOTBlZjdmZThjMmRhN2RlNmM3Li4wNTczNDQ5N2IxMGNhNzYyMjEyY2QxNWVhN2Zh
YjM2OGZhNTc2ODQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
UmVnaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNw
cApAQCAtMTAyLDcgKzEwMiw3IEBAIHZvaWQgUmVuZGVyUmVnaW9uOjpzZXRSZWdpb25Cb3hlc1Jl
Z2lvblN0eWxlKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgZm9yIChSZW5kZXJCb3hSZWdpb25J
bmZvTWFwOjppdGVyYXRvciBpdGVyID0gbV9yZW5kZXJCb3hSZWdpb25JbmZvLmJlZ2luKCksIGVu
ZCA9IG1fcmVuZGVyQm94UmVnaW9uSW5mby5lbmQoKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewot
ICAgICAgICBjb25zdCBSZW5kZXJCb3gqIGJveCA9IGl0ZXItPmZpcnN0OworICAgICAgICBjb25z
dCBSZW5kZXJCb3gqIGJveCA9IGl0ZXItPmtleTsKICAgICAgICAgaWYgKCFib3gtPmNhbkhhdmVS
ZWdpb25TdHlsZSgpKQogICAgICAgICAgICAgY29udGludWU7CiAKQEAgLTEyMiwxNCArMTIyLDE0
IEBAIHZvaWQgUmVuZGVyUmVnaW9uOjpyZXN0b3JlUmVnaW9uQm94ZXNPcmlnaW5hbFN0eWxlKCkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgZm9yIChSZW5kZXJCb3hSZWdpb25JbmZvTWFwOjppdGVy
YXRvciBpdGVyID0gbV9yZW5kZXJCb3hSZWdpb25JbmZvLmJlZ2luKCksIGVuZCA9IG1fcmVuZGVy
Qm94UmVnaW9uSW5mby5lbmQoKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewotICAgICAgICBjb25z
dCBSZW5kZXJCb3gqIGJveCA9IGl0ZXItPmZpcnN0OworICAgICAgICBjb25zdCBSZW5kZXJCb3gq
IGJveCA9IGl0ZXItPmtleTsKICAgICAgICAgUmVuZGVyQm94UmVnaW9uU3R5bGVNYXA6Oml0ZXJh
dG9yIGl0ID0gbV9yZW5kZXJCb3hSZWdpb25TdHlsZS5maW5kKGJveCk7CiAgICAgICAgIGlmIChp
dCA9PSBtX3JlbmRlckJveFJlZ2lvblN0eWxlLmVuZCgpKQogICAgICAgICAgICAgY29udGludWU7
CiAKICAgICAgICAgLy8gUmVzdG9yZSB0aGUgYm94IHN0eWxlIHRvIHRoZSBvcmlnaW5hbCBzdHls
ZSBhbmQgc3RvcmUgdGhlIGJveCBzdHlsZSBpbiByZWdpb24gZm9yIGxhdGVyIHVzZS4KICAgICAg
ICAgUmVmUHRyPFJlbmRlclN0eWxlPiBib3hSZWdpb25TdHlsZSA9IGJveC0+c3R5bGUoKTsKLSAg
ICAgICAgKGNvbnN0X2Nhc3Q8UmVuZGVyQm94Kj4oYm94KSktPnNldFN0eWxlSW50ZXJuYWwoaXQt
PnNlY29uZCk7CisgICAgICAgIChjb25zdF9jYXN0PFJlbmRlckJveCo+KGJveCkpLT5zZXRTdHls
ZUludGVybmFsKGl0LT52YWx1ZSk7CiAgICAgICAgIG1fcmVuZGVyQm94UmVnaW9uU3R5bGUuc2V0
KGJveCwgYm94UmVnaW9uU3R5bGUpOwogICAgIH0KIH0KQEAgLTI0Niw3ICsyNDYsNyBAQCBSZW5k
ZXJCb3hSZWdpb25JbmZvKiBSZW5kZXJSZWdpb246OnNldFJlbmRlckJveFJlZ2lvbkluZm8oY29u
c3QgUmVuZGVyQm94KiBib3gsCiAgICAgaWYgKCFtX2lzVmFsaWQgfHwgIW1fZmxvd1RocmVhZCkK
ICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBPd25QdHI8UmVuZGVyQm94UmVnaW9uSW5mbz4mIGJv
eEluZm8gPSBtX3JlbmRlckJveFJlZ2lvbkluZm8uYWRkKGJveCwgbnVsbHB0cikuaXRlcmF0b3It
PnNlY29uZDsKKyAgICBPd25QdHI8UmVuZGVyQm94UmVnaW9uSW5mbz4mIGJveEluZm8gPSBtX3Jl
bmRlckJveFJlZ2lvbkluZm8uYWRkKGJveCwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwogICAg
IGlmIChib3hJbmZvKQogICAgICAgICAqYm94SW5mbyA9IFJlbmRlckJveFJlZ2lvbkluZm8obG9n
aWNhbExlZnRJbnNldCwgbG9naWNhbFJpZ2h0SW5zZXQsIGNvbnRhaW5pbmdCbG9ja0NoYWluSXNJ
bnNldCk7CiAgICAgZWxzZQpAQCAtMjg3LDcgKzI4Nyw3IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5
bGU+IFJlbmRlclJlZ2lvbjo6cmVuZGVyQm94UmVnaW9uU3R5bGUoY29uc3QgUmVuZGVyQm94KiBy
ZW5kCiAKICAgICBSZW5kZXJCb3hSZWdpb25TdHlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3JlbmRl
ckJveFJlZ2lvblN0eWxlLmZpbmQocmVuZGVyQm94KTsKICAgICBpZiAoaXQgIT0gbV9yZW5kZXJC
b3hSZWdpb25TdHlsZS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAg
IHJldHVybiBpdC0+dmFsdWU7CiAgICAgcmV0dXJuIGNvbXB1dGVTdHlsZUluUmVnaW9uKHJlbmRl
ckJveCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
YWJsZVNlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2Vj
dGlvbi5jcHAKaW5kZXggMzA2ZGRhNDFmMzE4ZWRhMjcwNDRkZjQxNDk5OTFlMGEzNjgyYWFmMy4u
NjE0NmNhNGFiNTRhM2Q0OTM2NDEzM2ZiZGYzZTA5YjE0NmNjMWI5YSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKQEAgLTE0MTQsNyArMTQx
NCw3IEBAIENvbGxhcHNlZEJvcmRlclZhbHVlJiBSZW5kZXJUYWJsZVNlY3Rpb246OmNhY2hlZENv
bGxhcHNlZEJvcmRlcihjb25zdCBSZW5kZXJUYWJsCiAgICAgQVNTRVJUKHRhYmxlKCktPmNvbGxh
cHNlQm9yZGVycygpKTsKICAgICBIYXNoTWFwPHBhaXI8Y29uc3QgUmVuZGVyVGFibGVDZWxsKiwg
aW50PiwgQ29sbGFwc2VkQm9yZGVyVmFsdWU+OjppdGVyYXRvciBpdCA9IG1fY2VsbHNDb2xsYXBz
ZWRCb3JkZXJzLmZpbmQobWFrZV9wYWlyKGNlbGwsIHNpZGUpKTsKICAgICBBU1NFUlQoaXQgIT0g
bV9jZWxsc0NvbGxhcHNlZEJvcmRlcnMuZW5kKCkpOwotICAgIHJldHVybiBpdC0+c2Vjb25kOwor
ICAgIHJldHVybiBpdC0+dmFsdWU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbSBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQppbmRleCBkOWUyZTg2N2NjMDYw
YzYzNmUyYWY2ZjQ1NDMyYTc2ZTg0YzJkOWM0Li5iZDIxMTY0M2Q3YThjOWUyOTQ1YmM1NTM4Yzgw
N2I2YmYyNWUyNjlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGhlbWVNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFj
Lm1tCkBAIC0zNjAsNyArMzYwLDcgQEAgQ29sb3IgUmVuZGVyVGhlbWVNYWM6OnN5c3RlbUNvbG9y
KGludCBjc3NWYWx1ZUlkKSBjb25zdAogICAgIHsKICAgICAgICAgSGFzaE1hcDxpbnQsIFJHQkEz
Mj46Oml0ZXJhdG9yIGl0ID0gbV9zeXN0ZW1Db2xvckNhY2hlLmZpbmQoY3NzVmFsdWVJZCk7CiAg
ICAgICAgIGlmIChpdCAhPSBtX3N5c3RlbUNvbG9yQ2FjaGUuZW5kKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIHJldHVybiBpdC0+dmFsdWU7CiAgICAgfQog
CiAgICAgQ29sb3IgY29sb3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAK
aW5kZXggZmNhM2RjYTdhMzM5ZDhhMzJmNTU0MzYwMTFmMDY0MDRkY2M3ZmI5Yy4uMDlhNjYzOTdk
ZWIzZjkzMjlmNzM2YTI2NWE0MDczZWNkNzM4YmFjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJWaWV3LmNwcApAQCAtNDIzLDcgKzQyMyw3IEBAIEludFJlY3QgUmVuZGVyVmlldzo6
c2VsZWN0aW9uQm91bmRzKGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRlbnQpIGNvbnN0CiAgICAgSW50
UmVjdCBzZWxSZWN0OwogICAgIFNlbGVjdGlvbk1hcDo6aXRlcmF0b3IgZW5kID0gc2VsZWN0ZWRP
YmplY3RzLmVuZCgpOwogICAgIGZvciAoU2VsZWN0aW9uTWFwOjppdGVyYXRvciBpID0gc2VsZWN0
ZWRPYmplY3RzLmJlZ2luKCk7IGkgIT0gZW5kOyArK2kpIHsKLSAgICAgICAgUmVuZGVyU2VsZWN0
aW9uSW5mbyogaW5mbyA9IGktPnNlY29uZDsKKyAgICAgICAgUmVuZGVyU2VsZWN0aW9uSW5mbyog
aW5mbyA9IGktPnZhbHVlOwogICAgICAgICAvLyBSZW5kZXJTZWxlY3Rpb25JbmZvOjpyZWN0KCkg
aXMgaW4gdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSByZXBhaW50Q29udGFpbmVyLCBzbyBtYXAgdG8g
cGFnZSBjb29yZGluYXRlcy4KICAgICAgICAgSW50UmVjdCBjdXJyUmVjdCA9IGluZm8tPnJlY3Qo
KTsKICAgICAgICAgaWYgKFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyID0g
aW5mby0+cmVwYWludENvbnRhaW5lcigpKSB7CkBAIC01MDQsNyArNTA0LDcgQEAgdm9pZCBSZW5k
ZXJWaWV3OjpzZXRTZWxlY3Rpb24oUmVuZGVyT2JqZWN0KiBzdGFydCwgaW50IHN0YXJ0UG9zLCBS
ZW5kZXJPYmplY3QqIGUKICAgICAvLyBOb3cgY2xlYXIgdGhlIHNlbGVjdGlvbi4KICAgICBTZWxl
Y3RlZE9iamVjdE1hcDo6aXRlcmF0b3Igb2xkT2JqZWN0c0VuZCA9IG9sZFNlbGVjdGVkT2JqZWN0
cy5lbmQoKTsKICAgICBmb3IgKFNlbGVjdGVkT2JqZWN0TWFwOjppdGVyYXRvciBpID0gb2xkU2Vs
ZWN0ZWRPYmplY3RzLmJlZ2luKCk7IGkgIT0gb2xkT2JqZWN0c0VuZDsgKytpKQotICAgICAgICBp
LT5maXJzdC0+c2V0U2VsZWN0aW9uU3RhdGVJZk5lZWRlZChTZWxlY3Rpb25Ob25lKTsKKyAgICAg
ICAgaS0+a2V5LT5zZXRTZWxlY3Rpb25TdGF0ZUlmTmVlZGVkKFNlbGVjdGlvbk5vbmUpOwogCiAg
ICAgLy8gc2V0IHNlbGVjdGlvbiBzdGFydCBhbmQgZW5kCiAgICAgbV9zZWxlY3Rpb25TdGFydCA9
IHN0YXJ0OwpAQCAtNTY3LDkgKzU2Nyw5IEBAIHZvaWQgUmVuZGVyVmlldzo6c2V0U2VsZWN0aW9u
KFJlbmRlck9iamVjdCogc3RhcnQsIGludCBzdGFydFBvcywgUmVuZGVyT2JqZWN0KiBlCiAKICAg
ICAvLyBIYXZlIGFueSBvZiB0aGUgb2xkIHNlbGVjdGVkIG9iamVjdHMgY2hhbmdlZCBjb21wYXJl
ZCB0byB0aGUgbmV3IHNlbGVjdGlvbj8KICAgICBmb3IgKFNlbGVjdGVkT2JqZWN0TWFwOjppdGVy
YXRvciBpID0gb2xkU2VsZWN0ZWRPYmplY3RzLmJlZ2luKCk7IGkgIT0gb2xkT2JqZWN0c0VuZDsg
KytpKSB7Ci0gICAgICAgIFJlbmRlck9iamVjdCogb2JqID0gaS0+Zmlyc3Q7CisgICAgICAgIFJl
bmRlck9iamVjdCogb2JqID0gaS0+a2V5OwogICAgICAgICBSZW5kZXJTZWxlY3Rpb25JbmZvKiBu
ZXdJbmZvID0gbmV3U2VsZWN0ZWRPYmplY3RzLmdldChvYmopOwotICAgICAgICBSZW5kZXJTZWxl
Y3Rpb25JbmZvKiBvbGRJbmZvID0gaS0+c2Vjb25kOworICAgICAgICBSZW5kZXJTZWxlY3Rpb25J
bmZvKiBvbGRJbmZvID0gaS0+dmFsdWU7CiAgICAgICAgIGlmICghbmV3SW5mbyB8fCBvbGRJbmZv
LT5yZWN0KCkgIT0gbmV3SW5mby0+cmVjdCgpIHx8IG9sZEluZm8tPnN0YXRlKCkgIT0gbmV3SW5m
by0+c3RhdGUoKSB8fAogICAgICAgICAgICAgKG1fc2VsZWN0aW9uU3RhcnQgPT0gb2JqICYmIG9s
ZFN0YXJ0UG9zICE9IG1fc2VsZWN0aW9uU3RhcnRQb3MpIHx8CiAgICAgICAgICAgICAobV9zZWxl
Y3Rpb25FbmQgPT0gb2JqICYmIG9sZEVuZFBvcyAhPSBtX3NlbGVjdGlvbkVuZFBvcykpIHsKQEAg
LTU4Niw3ICs1ODYsNyBAQCB2b2lkIFJlbmRlclZpZXc6OnNldFNlbGVjdGlvbihSZW5kZXJPYmpl
Y3QqIHN0YXJ0LCBpbnQgc3RhcnRQb3MsIFJlbmRlck9iamVjdCogZQogICAgIC8vIEFueSBuZXcg
b2JqZWN0cyB0aGF0IHJlbWFpbiB3ZXJlIG5vdCBmb3VuZCBpbiB0aGUgb2xkIG9iamVjdHMgZGlj
dCwgYW5kIHNvIHRoZXkgbmVlZCB0byBiZSB1cGRhdGVkLgogICAgIFNlbGVjdGVkT2JqZWN0TWFw
OjppdGVyYXRvciBuZXdPYmplY3RzRW5kID0gbmV3U2VsZWN0ZWRPYmplY3RzLmVuZCgpOwogICAg
IGZvciAoU2VsZWN0ZWRPYmplY3RNYXA6Oml0ZXJhdG9yIGkgPSBuZXdTZWxlY3RlZE9iamVjdHMu
YmVnaW4oKTsgaSAhPSBuZXdPYmplY3RzRW5kOyArK2kpIHsKLSAgICAgICAgUmVuZGVyU2VsZWN0
aW9uSW5mbyogbmV3SW5mbyA9IGktPnNlY29uZDsKKyAgICAgICAgUmVuZGVyU2VsZWN0aW9uSW5m
byogbmV3SW5mbyA9IGktPnZhbHVlOwogICAgICAgICBuZXdJbmZvLT5yZXBhaW50KCk7CiAgICAg
ICAgIGRlbGV0ZSBuZXdJbmZvOwogICAgIH0KQEAgLTU5NCw5ICs1OTQsOSBAQCB2b2lkIFJlbmRl
clZpZXc6OnNldFNlbGVjdGlvbihSZW5kZXJPYmplY3QqIHN0YXJ0LCBpbnQgc3RhcnRQb3MsIFJl
bmRlck9iamVjdCogZQogICAgIC8vIEhhdmUgYW55IG9mIHRoZSBvbGQgYmxvY2tzIGNoYW5nZWQ/
CiAgICAgU2VsZWN0ZWRCbG9ja01hcDo6aXRlcmF0b3Igb2xkQmxvY2tzRW5kID0gb2xkU2VsZWN0
ZWRCbG9ja3MuZW5kKCk7CiAgICAgZm9yIChTZWxlY3RlZEJsb2NrTWFwOjppdGVyYXRvciBpID0g
b2xkU2VsZWN0ZWRCbG9ja3MuYmVnaW4oKTsgaSAhPSBvbGRCbG9ja3NFbmQ7ICsraSkgewotICAg
ICAgICBSZW5kZXJCbG9jayogYmxvY2sgPSBpLT5maXJzdDsKKyAgICAgICAgUmVuZGVyQmxvY2sq
IGJsb2NrID0gaS0+a2V5OwogICAgICAgICBSZW5kZXJCbG9ja1NlbGVjdGlvbkluZm8qIG5ld0lu
Zm8gPSBuZXdTZWxlY3RlZEJsb2Nrcy5nZXQoYmxvY2spOwotICAgICAgICBSZW5kZXJCbG9ja1Nl
bGVjdGlvbkluZm8qIG9sZEluZm8gPSBpLT5zZWNvbmQ7CisgICAgICAgIFJlbmRlckJsb2NrU2Vs
ZWN0aW9uSW5mbyogb2xkSW5mbyA9IGktPnZhbHVlOwogICAgICAgICBpZiAoIW5ld0luZm8gfHwg
b2xkSW5mby0+cmVjdHMoKSAhPSBuZXdJbmZvLT5yZWN0cygpIHx8IG9sZEluZm8tPnN0YXRlKCkg
IT0gbmV3SW5mby0+c3RhdGUoKSkgewogICAgICAgICAgICAgb2xkSW5mby0+cmVwYWludCgpOwog
ICAgICAgICAgICAgaWYgKG5ld0luZm8pIHsKQEAgLTYxMSw3ICs2MTEsNyBAQCB2b2lkIFJlbmRl
clZpZXc6OnNldFNlbGVjdGlvbihSZW5kZXJPYmplY3QqIHN0YXJ0LCBpbnQgc3RhcnRQb3MsIFJl
bmRlck9iamVjdCogZQogICAgIC8vIEFueSBuZXcgYmxvY2tzIHRoYXQgcmVtYWluIHdlcmUgbm90
IGZvdW5kIGluIHRoZSBvbGQgYmxvY2tzIGRpY3QsIGFuZCBzbyB0aGV5IG5lZWQgdG8gYmUgdXBk
YXRlZC4KICAgICBTZWxlY3RlZEJsb2NrTWFwOjppdGVyYXRvciBuZXdCbG9ja3NFbmQgPSBuZXdT
ZWxlY3RlZEJsb2Nrcy5lbmQoKTsKICAgICBmb3IgKFNlbGVjdGVkQmxvY2tNYXA6Oml0ZXJhdG9y
IGkgPSBuZXdTZWxlY3RlZEJsb2Nrcy5iZWdpbigpOyBpICE9IG5ld0Jsb2Nrc0VuZDsgKytpKSB7
Ci0gICAgICAgIFJlbmRlckJsb2NrU2VsZWN0aW9uSW5mbyogbmV3SW5mbyA9IGktPnNlY29uZDsK
KyAgICAgICAgUmVuZGVyQmxvY2tTZWxlY3Rpb25JbmZvKiBuZXdJbmZvID0gaS0+dmFsdWU7CiAg
ICAgICAgIG5ld0luZm8tPnJlcGFpbnQoKTsKICAgICAgICAgZGVsZXRlIG5ld0luZm87CiAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcAppbmRleCBkYTg3YTk3
YmU1N2E5ZDdlMWZhODZmMGY5ZTQ0ZWU4YjQ4MWE0ZjY1Li4xYTMxNzIzZjFhYjE4MmJkNDc5MGQ3
NmI3OTE1NjdkOWQ4ZTk3MDI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyV2lkZ2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lk
Z2V0LmNwcApAQCAtNzAsOSArNzAsOSBAQCB2b2lkIFJlbmRlcldpZGdldDo6cmVzdW1lV2lkZ2V0
SGllcmFyY2h5VXBkYXRlcygpCiAgICAgICAgIHdpZGdldE5ld1BhcmVudE1hcCgpLmNsZWFyKCk7
CiAgICAgICAgIFdpZGdldFRvUGFyZW50TWFwOjppdGVyYXRvciBlbmQgPSBtYXAuZW5kKCk7CiAg
ICAgICAgIGZvciAoV2lkZ2V0VG9QYXJlbnRNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgV2lkZ2V0KiBjaGlsZCA9IGl0LT5maXJz
dC5nZXQoKTsKKyAgICAgICAgICAgIFdpZGdldCogY2hpbGQgPSBpdC0+a2V5LmdldCgpOwogICAg
ICAgICAgICAgU2Nyb2xsVmlldyogY3VycmVudFBhcmVudCA9IGNoaWxkLT5wYXJlbnQoKTsKLSAg
ICAgICAgICAgIEZyYW1lVmlldyogbmV3UGFyZW50ID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAg
IEZyYW1lVmlldyogbmV3UGFyZW50ID0gaXQtPnZhbHVlOwogICAgICAgICAgICAgaWYgKG5ld1Bh
cmVudCAhPSBjdXJyZW50UGFyZW50KSB7CiAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRQYXJl
bnQpCiAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYXJlbnQtPnJlbW92ZUNoaWxkKGNoaWxk
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAppbmRleCBlNDBm
ZmJmY2M2NzQ4ODljYTMwOTIwNTgwOTQzMzNmNDVjY2NjYzczLi5hZWQwN2Q1YWYyZTdlNzYwODg2
YWM5MmE2ZjhiM2MzMTk2MGNlYzgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUm9vdElubGluZUJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJ
bmxpbmVCb3guY3BwCkBAIC03MjAsOCArNzIwLDggQEAgdm9pZCBSb290SW5saW5lQm94Ojphc2Nl
bnRBbmREZXNjZW50Rm9yQm94KElubGluZUJveCogYm94LCBHbHlwaE92ZXJmbG93QW5kRmFsbGIK
ICAgICBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93ID0gMDsKICAgICBpZiAoYm94LT5pc1Rl
eHQoKSkgewogICAgICAgICBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcDo6aXRlcmF0
b3IgaXQgPSB0ZXh0Qm94RGF0YU1hcC5maW5kKHRvSW5saW5lVGV4dEJveChib3gpKTsKLSAgICAg
ICAgdXNlZEZvbnRzID0gaXQgPT0gdGV4dEJveERhdGFNYXAuZW5kKCkgPyAwIDogJml0LT5zZWNv
bmQuZmlyc3Q7Ci0gICAgICAgIGdseXBoT3ZlcmZsb3cgPSBpdCA9PSB0ZXh0Qm94RGF0YU1hcC5l
bmQoKSA/IDAgOiAmaXQtPnNlY29uZC5zZWNvbmQ7CisgICAgICAgIHVzZWRGb250cyA9IGl0ID09
IHRleHRCb3hEYXRhTWFwLmVuZCgpID8gMCA6ICZpdC0+dmFsdWUuZmlyc3Q7CisgICAgICAgIGds
eXBoT3ZlcmZsb3cgPSBpdCA9PSB0ZXh0Qm94RGF0YU1hcC5lbmQoKSA/IDAgOiAmaXQtPnZhbHVl
LnNlY29uZDsKICAgICB9CiAgICAgICAgIAogICAgIGJvb2wgaW5jbHVkZUxlYWRpbmcgPSBpbmNs
dWRlTGVhZGluZ0ZvckJveChib3gpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1ZlcnRpY2FsUG9zaXRpb25DYWNoZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Zl
cnRpY2FsUG9zaXRpb25DYWNoZS5oCmluZGV4IGJiMzk4Nzc3MjFkYTcwNWMzN2JkM2I4ODE5MDI0
Y2QyN2UzNmU1Y2UuLmI3Y2Q3ZTA4NWU3ZjliZWRiNTI4ZjYyZGVlZjU3YTdiYjhhYTViZTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9WZXJ0aWNhbFBvc2l0aW9uQ2FjaGUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVmVydGljYWxQb3NpdGlvbkNhY2hlLmgK
QEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgogICAgICAgICBjb25zdCBIYXNoTWFwPFJlbmRlck9i
amVjdCosIGludD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwVG9DaGVjay5maW5kKHJlbmRlcmVy
KTsKICAgICAgICAgaWYgKGl0ID09IG1hcFRvQ2hlY2suZW5kKCkpCiAgICAgICAgICAgICByZXR1
cm4gUG9zaXRpb25VbmRlZmluZWQ7Ci0gICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgICAg
ICByZXR1cm4gaXQtPnZhbHVlOwogICAgIH0KICAgICAKICAgICB2b2lkIHNldChSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyLCBGb250QmFzZWxpbmUgYmFzZWxpbmVUeXBlLCBpbnQgcG9zaXRpb24pCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRl
eHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0
LmNwcAppbmRleCBhNTViMGYwYjVkZjRhYTU0NWU1YWIzODI1NmM5ZmU0OTAyMTMxZGNhLi43MTg1
NDk3ZmQ0NjNmNGRmYjc0OTM2YTk5MDQ3ZDM2NmVlNmEzMWY1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAKQEAgLTE4Myw3
ICsxODMsNyBAQCBib29sIFJlbmRlclNWR0lubGluZVRleHQ6OmNoYXJhY3RlclN0YXJ0c05ld1Rl
eHRDaHVuayhpbnQgcG9zaXRpb24pIGNvbnN0CiAgICAgaWYgKGl0ID09IG1fbGF5b3V0QXR0cmli
dXRlcy5jaGFyYWN0ZXJEYXRhTWFwKCkuZW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIHJldHVybiBpdC0+c2Vjb25kLnggIT0gU1ZHVGV4dExheW91dEF0dHJpYnV0ZXM6OmVtcHR5
VmFsdWUoKSB8fCBpdC0+c2Vjb25kLnkgIT0gU1ZHVGV4dExheW91dEF0dHJpYnV0ZXM6OmVtcHR5
VmFsdWUoKTsKKyAgICByZXR1cm4gaXQtPnZhbHVlLnggIT0gU1ZHVGV4dExheW91dEF0dHJpYnV0
ZXM6OmVtcHR5VmFsdWUoKSB8fCBpdC0+dmFsdWUueSAhPSBTVkdUZXh0TGF5b3V0QXR0cmlidXRl
czo6ZW1wdHlWYWx1ZSgpOwogfQogCiBWaXNpYmxlUG9zaXRpb24gUmVuZGVyU1ZHSW5saW5lVGV4
dDo6cG9zaXRpb25Gb3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIu
Y3BwCmluZGV4IGQ1ZDc5MmRlZDYwZGRmODc1MGJhM2Q4NGE1NGRmNDk1Yjk2YTY3M2MuLmExZThi
OGMxZjk3YTU4MzIzZTcyMjFjY2EzNTMzOTUyNWI2N2Q5MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCkBA
IC0zMzksNyArMzM5LDcgQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cHJpbWl0aXZl
QXR0cmlidXRlQ2hhbmdlZChSZW5kZXJPYmplY3QqIG9iamVjdCwgY28KICAgICBTVkdGaWx0ZXJQ
cmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMqIHByaW1pdHZlID0gc3RhdGljX2Nhc3Q8U1ZHRmls
dGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKj4ob2JqZWN0LT5ub2RlKCkpOwogCiAgICAg
Zm9yICg7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBGaWx0ZXJEYXRhKiBmaWx0ZXJEYXRh
ID0gaXQtPnNlY29uZDsKKyAgICAgICAgRmlsdGVyRGF0YSogZmlsdGVyRGF0YSA9IGl0LT52YWx1
ZTsKICAgICAgICAgaWYgKCFmaWx0ZXJEYXRhLT5idWlsZGVkKQogICAgICAgICAgICAgY29udGlu
dWU7CiAKQEAgLTM1NCw3ICszNTQsNyBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpw
cmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKFJlbmRlck9iamVjdCogb2JqZWN0LCBjbwogICAgICAg
ICBidWlsZGVyLT5jbGVhclJlc3VsdHNSZWN1cnNpdmUoZWZmZWN0KTsKIAogICAgICAgICAvLyBS
ZXBhaW50IHRoZSBpbWFnZSBvbiB0aGUgc2NyZWVuLgotICAgICAgICBtYXJrQ2xpZW50Rm9ySW52
YWxpZGF0aW9uKGl0LT5maXJzdCwgUmVwYWludEludmFsaWRhdGlvbik7CisgICAgICAgIG1hcmtD
bGllbnRGb3JJbnZhbGlkYXRpb24oaXQtPmtleSwgUmVwYWludEludmFsaWRhdGlvbik7CiAgICAg
fQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlR3JhZGllbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcAppbmRleCBmOGY0OTNkYjg1YTBkZGI3YTY5YzFmMTZj
YjE3NWY3MGFkOWRjYjgzLi4zNTMzYjM1YzE4NjllZmU5ZTQ1ZTVkMDc4NTM2NTMxMjA0NWJkOGY2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlR3JhZGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAKQEAgLTE0MCw3ICsxNDAsNyBAQCBib29sIFJlbmRlclNW
R1Jlc291cmNlR3JhZGllbnQ6OmFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiBvYmplY3QsIFJl
bmRlclN0eWxlKgogICAgIGlmIChncmFkaWVudFVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdf
VU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YICYmIG9iamVjdEJvdW5kaW5nQm94LmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgT3duUHRyPEdyYWRpZW50RGF0YT4mIGdy
YWRpZW50RGF0YSA9IG1fZ3JhZGllbnRNYXAuYWRkKG9iamVjdCwgbnVsbHB0cikuaXRlcmF0b3It
PnNlY29uZDsKKyAgICBPd25QdHI8R3JhZGllbnREYXRhPiYgZ3JhZGllbnREYXRhID0gbV9ncmFk
aWVudE1hcC5hZGQob2JqZWN0LCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCFn
cmFkaWVudERhdGEpCiAgICAgICAgIGdyYWRpZW50RGF0YSA9IGFkb3B0UHRyKG5ldyBHcmFkaWVu
dERhdGEpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlUGF0dGVybi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAKaW5kZXggNGRjNTAxYjgwNmIzZDhkZjI1NDc0NTQz
YmNmY2ZmMzg3NjBkNjI2OS4uNWIzODNlMjNhNDI0NTk0NzMwY2Y5NzcwYjEyMTNhYTI3NWJkY2E4
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNv
dXJjZVBhdHRlcm4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcApAQCAtODMsNyArODMsNyBAQCBib29sIFJlbmRlclNWR1Jl
c291cmNlUGF0dGVybjo6YXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqIG9iamVjdCwgUmVuZGVy
U3R5bGUqCiAgICAgaWYgKG1fYXR0cmlidXRlcy5wYXR0ZXJuVW5pdHMoKSA9PSBTVkdVbml0VHlw
ZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1ggJiYgb2JqZWN0Qm91bmRpbmdCb3gu
aXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBPd25QdHI8UGF0dGVybkRh
dGE+JiBwYXR0ZXJuRGF0YSA9IG1fcGF0dGVybk1hcC5hZGQob2JqZWN0LCBudWxscHRyKS5pdGVy
YXRvci0+c2Vjb25kOworICAgIE93blB0cjxQYXR0ZXJuRGF0YT4mIHBhdHRlcm5EYXRhID0gbV9w
YXR0ZXJuTWFwLmFkZChvYmplY3QsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAo
IXBhdHRlcm5EYXRhKQogICAgICAgICBwYXR0ZXJuRGF0YSA9IGFkb3B0UHRyKG5ldyBQYXR0ZXJu
RGF0YSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVz
b3VyY2VzQ2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJj
ZXNDYWNoZS5jcHAKaW5kZXggMDNlNmM3YjRiZTU2ZjUwOWMxMjFiYmE1NWVkMjJkNjUzOTBjODlm
OC4uMDA3M2I3MzU0ZDExOWU3NDAyNjdjMDcxM2RjZDE2OTU0MzEzYTllYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXNDYWNoZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXNDYWNoZS5jcHAKQEAgLTE3
MiwxMSArMTcyLDExIEBAIHZvaWQgU1ZHUmVzb3VyY2VzQ2FjaGU6OnJlc291cmNlRGVzdHJveWVk
KFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKiByZXNvdXJjZSkKIAogICAgIEhhc2hNYXA8UmVu
ZGVyT2JqZWN0KiwgU1ZHUmVzb3VyY2VzKj46Oml0ZXJhdG9yIGVuZCA9IGNhY2hlLT5tX2NhY2hl
LmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDxSZW5kZXJPYmplY3QqLCBTVkdSZXNvdXJjZXMqPjo6
aXRlcmF0b3IgaXQgPSBjYWNoZS0+bV9jYWNoZS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
LSAgICAgICAgaXQtPnNlY29uZC0+cmVzb3VyY2VEZXN0cm95ZWQocmVzb3VyY2UpOworICAgICAg
ICBpdC0+dmFsdWUtPnJlc291cmNlRGVzdHJveWVkKHJlc291cmNlKTsKIAogICAgICAgICAvLyBN
YXJrIHVzZXJzIG9mIGRlc3Ryb3llZCByZXNvdXJjZXMgYXMgcGVuZGluZyByZXNvbHV0aW9uIGJh
c2VkIG9uIHRoZSBpZCBvZiB0aGUgb2xkIHJlc291cmNlLgogICAgICAgICBFbGVtZW50KiByZXNv
dXJjZUVsZW1lbnQgPSB0b0VsZW1lbnQocmVzb3VyY2UtPm5vZGUoKSk7Ci0gICAgICAgIFNWR1N0
eWxlZEVsZW1lbnQqIGNsaWVudEVsZW1lbnQgPSB0b1NWR1N0eWxlZEVsZW1lbnQoaXQtPmZpcnN0
LT5ub2RlKCkpOworICAgICAgICBTVkdTdHlsZWRFbGVtZW50KiBjbGllbnRFbGVtZW50ID0gdG9T
VkdTdHlsZWRFbGVtZW50KGl0LT5rZXktPm5vZGUoKSk7CiAgICAgICAgIFNWR0RvY3VtZW50RXh0
ZW5zaW9ucyogZXh0ZW5zaW9ucyA9IGNsaWVudEVsZW1lbnQtPmRvY3VtZW50KCktPmFjY2Vzc1NW
R0V4dGVuc2lvbnMoKTsKIAogICAgICAgICBleHRlbnNpb25zLT5hZGRQZW5kaW5nUmVzb3VyY2Uo
cmVzb3VyY2VFbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKEhUTUxOYW1lczo6aWRBdHRyKSwgY2xp
ZW50RWxlbWVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1Jvb3RJbmxpbmVCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSb290
SW5saW5lQm94LmNwcAppbmRleCA1NzE0NmM5MGM4MzhhYjY1MzNhNDNlNzM4MDU2ZTM4MmU1ZTg1
YzlmLi5hNDI4YzYxNGRkZjEyNDVhMDM4NThlNTM1YzEyMDAwZGM2NzhjNzMwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jvb3RJbmxpbmVCb3guY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUm9vdElubGluZUJveC5jcHAKQEAgLTIy
NywxNyArMjI3LDE3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzd2FwSXRlbXNJbkxheW91dEF0dHJp
YnV0ZXMoU1ZHVGV4dExheW91dEF0dHJpYnV0ZXMqIGZpcnN0QXR0CiAgICAgICAgIHJldHVybjsK
IAogICAgIGlmIChmaXJzdFByZXNlbnQgJiYgbGFzdFByZXNlbnQpIHsKLSAgICAgICAgc3RkOjpz
d2FwKGl0Rmlyc3QtPnNlY29uZCwgaXRMYXN0LT5zZWNvbmQpOworICAgICAgICBzdGQ6OnN3YXAo
aXRGaXJzdC0+dmFsdWUsIGl0TGFzdC0+dmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CiAgICAgaWYgKGZpcnN0UHJlc2VudCAmJiAhbGFzdFByZXNlbnQpIHsKLSAgICAgICAgbGFzdEF0
dHJpYnV0ZXMtPmNoYXJhY3RlckRhdGFNYXAoKS5zZXQobGFzdFBvc2l0aW9uICsgMSwgaXRGaXJz
dC0+c2Vjb25kKTsKKyAgICAgICAgbGFzdEF0dHJpYnV0ZXMtPmNoYXJhY3RlckRhdGFNYXAoKS5z
ZXQobGFzdFBvc2l0aW9uICsgMSwgaXRGaXJzdC0+dmFsdWUpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCiAgICAgLy8gIWZpcnN0UHJlc2VudCAmJiBsYXN0UHJlc2VudAotICAgIGZpcnN0QXR0
cmlidXRlcy0+Y2hhcmFjdGVyRGF0YU1hcCgpLnNldChmaXJzdFBvc2l0aW9uICsgMSwgaXRMYXN0
LT5zZWNvbmQpOworICAgIGZpcnN0QXR0cmlidXRlcy0+Y2hhcmFjdGVyRGF0YU1hcCgpLnNldChm
aXJzdFBvc2l0aW9uICsgMSwgaXRMYXN0LT52YWx1ZSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9p
ZCBmaW5kRmlyc3RBbmRMYXN0QXR0cmlidXRlc0luVmVjdG9yKFZlY3RvcjxTVkdUZXh0TGF5b3V0
QXR0cmlidXRlcyo+JiBhdHRyaWJ1dGVzLCBSZW5kZXJTVkdJbmxpbmVUZXh0KiBmaXJzdENvbnRl
eHQsIFJlbmRlclNWR0lubGluZVRleHQqIGxhc3RDb250ZXh0LApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRlcy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1dGVzLmNwcAppbmRl
eCBhOTI1OTZjZWVlZGJlMjVhZjc3N2RmNGE0YzgzY2QzZWY5N2I5Y2U4Li42N2ZhMGZhOTgyYWQ2
MGJhNzI2NTFhODQ1NDk1ODFmN2ViNTBjZDBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1dGVzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1dGVzLmNwcApAQCAtNjIsOCAr
NjIsOCBAQCB2b2lkIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzOjpkdW1wKCkgY29uc3QKICAgICBm
cHJpbnRmKHN0ZGVyciwgImNvbnRleHQ6ICVwXG4iLCBtX2NvbnRleHQpOwogICAgIGNvbnN0IFNW
R0NoYXJhY3RlckRhdGFNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fY2hhcmFjdGVyRGF0YU1h
cC5lbmQoKTsKICAgICBmb3IgKFNWR0NoYXJhY3RlckRhdGFNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV9jaGFyYWN0ZXJEYXRhTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAg
ICBjb25zdCBTVkdDaGFyYWN0ZXJEYXRhJiBkYXRhID0gaXQtPnNlY29uZDsKLSAgICAgICAgZnBy
aW50ZihzdGRlcnIsICIgLS0tPiBwb3M9JWksIGRhdGE9eyIsIGl0LT5maXJzdCk7CisgICAgICAg
IGNvbnN0IFNWR0NoYXJhY3RlckRhdGEmIGRhdGEgPSBpdC0+dmFsdWU7CisgICAgICAgIGZwcmlu
dGYoc3RkZXJyLCAiIC0tLT4gcG9zPSVpLCBkYXRhPXsiLCBpdC0+a2V5KTsKICAgICAgICAgZHVt
cFNWR0NoYXJhY3RlckRhdGFNYXBWYWx1ZSgieCIsIGRhdGEueCk7CiAgICAgICAgIGR1bXBTVkdD
aGFyYWN0ZXJEYXRhTWFwVmFsdWUoInkiLCBkYXRhLnkpOwogICAgICAgICBkdW1wU1ZHQ2hhcmFj
dGVyRGF0YU1hcFZhbHVlKCJkeCIsIGRhdGEuZHgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXIu
Y3BwCmluZGV4IDAyYTIxMjNlYjY2N2VjY2Y3M2YwODBmNmJiNGU2ZmVjYTVkMmYzZTYuLmYyMDll
ZTQ4YjE1ZTVlOTkyNWFkNjc1NWJjYzQ0NzY1ZTRkYjVmYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1dGVz
QnVpbGRlci5jcHAKQEAgLTE2Miw3ICsxNjIsNyBAQCB2b2lkIFNWR1RleHRMYXlvdXRBdHRyaWJ1
dGVzQnVpbGRlcjo6YnVpbGRMYXlvdXRBdHRyaWJ1dGVzKFJlbmRlclNWR1RleHQqIHRleHRSbwog
ICAgICAgICBkYXRhLnkgPSAwOwogICAgICAgICBtX2NoYXJhY3RlckRhdGFNYXAuc2V0KDEsIGRh
dGEpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIFNWR0NoYXJhY3RlckRhdGEmIGRhdGEgPSBpdC0+
c2Vjb25kOworICAgICAgICBTVkdDaGFyYWN0ZXJEYXRhJiBkYXRhID0gaXQtPnZhbHVlOwogICAg
ICAgICBpZiAoZGF0YS54ID09IFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzOjplbXB0eVZhbHVlKCkp
CiAgICAgICAgICAgICBkYXRhLnggPSAwOwogICAgICAgICBpZiAoZGF0YS55ID09IFNWR1RleHRM
YXlvdXRBdHRyaWJ1dGVzOjplbXB0eVZhbHVlKCkpCkBAIC0yMzEsNyArMjMxLDcgQEAgdm9pZCBT
VkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXI6OmZpbGxDaGFyYWN0ZXJEYXRhTWFwKGNvbnN0
IFRleHRQb3NpdGlvbiYgcG8KICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAg
ICAgICAgdXBkYXRlQ2hhcmFjdGVyRGF0YShpLCBsYXN0Um90YXRpb24sIGl0LT5zZWNvbmQsIGxl
bmd0aENvbnRleHQsIHhMaXN0UHRyLCB5TGlzdFB0ciwgZHhMaXN0UHRyLCBkeUxpc3RQdHIsIHJv
dGF0ZUxpc3RQdHIpOworICAgICAgICB1cGRhdGVDaGFyYWN0ZXJEYXRhKGksIGxhc3RSb3RhdGlv
biwgaXQtPnZhbHVlLCBsZW5ndGhDb250ZXh0LCB4TGlzdFB0ciwgeUxpc3RQdHIsIGR4TGlzdFB0
ciwgZHlMaXN0UHRyLCByb3RhdGVMaXN0UHRyKTsKICAgICB9CiAKICAgICAvLyBUaGUgbGFzdCBy
b3RhdGlvbiB2YWx1ZSBhbHdheXMgc3BhbnMgdGhlIHdob2xlIHNjb3BlLgpAQCAtMjQ3LDcgKzI0
Nyw3IEBAIHZvaWQgU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyOjpmaWxsQ2hhcmFjdGVy
RGF0YU1hcChjb25zdCBUZXh0UG9zaXRpb24mIHBvCiAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgfQogCi0gICAgICAgIGl0LT5zZWNvbmQucm90YXRlID0gbGFzdFJvdGF0aW9uOworICAg
ICAgICBpdC0+dmFsdWUucm90YXRlID0gbGFzdFJvdGF0aW9uOwogICAgIH0KIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZS5jcHAK
aW5kZXggNWM1NDliMjFjODc1MjA4NDcyNDZhZjI1NGZkMDU5ZjJlM2I5YjVlOC4uYmEyYjc2Mzlk
M2Y5NWI3Mzg5NDc1ZmEyZGMwMGM5YTZhYTg1YjMxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmUuY3BwCkBAIC00NzUsNyArNDc1
LDcgQEAgdm9pZCBTVkdUZXh0TGF5b3V0RW5naW5lOjpsYXlvdXRUZXh0T25MaW5lT3JQYXRoKFNW
R0lubGluZVRleHRCb3gqIHRleHRCb3gsIFJlbmQKICAgICAgICAgU1ZHQ2hhcmFjdGVyRGF0YSBk
YXRhOwogICAgICAgICBTVkdDaGFyYWN0ZXJEYXRhTWFwOjppdGVyYXRvciBpdCA9IGNoYXJhY3Rl
ckRhdGFNYXAuZmluZChtX2xvZ2ljYWxDaGFyYWN0ZXJPZmZzZXQgKyAxKTsKICAgICAgICAgaWYg
KGl0ICE9IGNoYXJhY3RlckRhdGFNYXAuZW5kKCkpCi0gICAgICAgICAgICBkYXRhID0gaXQtPnNl
Y29uZDsKKyAgICAgICAgICAgIGRhdGEgPSBpdC0+dmFsdWU7CiAKICAgICAgICAgZmxvYXQgeCA9
IGRhdGEueDsKICAgICAgICAgZmxvYXQgeSA9IGRhdGEueTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3NCdWlsZGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3NCdWlsZGVyLmNwcAppbmRleCBjOTRm
MGM3NGE0YjY5YjhlZWM2NjA1NmFkYzBiYmYxMTZiNmU0NjlmLi5kMDk3OWIxZDk3YzkzZmUzNjk5
OGM3Y2ExZDVmZDgxOGNmOWJjYWQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1RleHRNZXRyaWNzQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljc0J1aWxkZXIuY3BwCkBAIC0xNzAsNyArMTcwLDcgQEAg
dm9pZCBTVkdUZXh0TWV0cmljc0J1aWxkZXI6Om1lYXN1cmVUZXh0UmVuZGVyZXIoUmVuZGVyU1ZH
SW5saW5lVGV4dCogdGV4dCwgTWVhc3UKICAgICAgICAgICAgIGlmIChkYXRhLT5hbGxDaGFyYWN0
ZXJzTWFwKSB7CiAgICAgICAgICAgICAgICAgY29uc3QgU1ZHQ2hhcmFjdGVyRGF0YU1hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBkYXRhLT5hbGxDaGFyYWN0ZXJzTWFwLT5maW5kKGRhdGEtPnZhbHVl
TGlzdFBvc2l0aW9uICsgbV90ZXh0UG9zaXRpb24gLSBkYXRhLT5za2lwcGVkQ2hhcmFjdGVycyAr
IDEpOwogICAgICAgICAgICAgICAgIGlmIChpdCAhPSBkYXRhLT5hbGxDaGFyYWN0ZXJzTWFwLT5l
bmQoKSkKLSAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcy0+Y2hhcmFjdGVyRGF0YU1hcCgp
LnNldChtX3RleHRQb3NpdGlvbiArIDEsIGl0LT5zZWNvbmQpOworICAgICAgICAgICAgICAgICAg
ICBhdHRyaWJ1dGVzLT5jaGFyYWN0ZXJEYXRhTWFwKCkuc2V0KG1fdGV4dFBvc2l0aW9uICsgMSwg
aXQtPnZhbHVlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHRleHRNZXRyaWNzVmFsdWVz
LT5hcHBlbmQobV9jdXJyZW50TWV0cmljcyk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmNwcAppbmRleCAzMDQ5MDU4NjMxNjVlODYzMjQzNDBjZThk
YmVmYmIwYTc2YjM3NGY5Li4yZjk4MWNlYjk1ZjUwNjg4ZmE1MjUxYmMwNTg5NTI3NWU1YTY1MThj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCkBAIC0xODgs
NyArMTg4LDcgQEAgdm9pZCBTdG9yYWdlQXJlYVN5bmM6OnN5bmNUaW1lckZpcmVkKFRpbWVyPFN0
b3JhZ2VBcmVhU3luYz4qKQogICAgICAgICAgICAgICAgIHBhcnRpYWxTeW5jID0gdHJ1ZTsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1faXRlbXNQ
ZW5kaW5nU3luYy5zZXQoY2hhbmdlZF9pdC0+Zmlyc3QuaXNvbGF0ZWRDb3B5KCksIGNoYW5nZWRf
aXQtPnNlY29uZC5pc29sYXRlZENvcHkoKSk7CisgICAgICAgICAgICBtX2l0ZW1zUGVuZGluZ1N5
bmMuc2V0KGNoYW5nZWRfaXQtPmtleS5pc29sYXRlZENvcHkoKSwgY2hhbmdlZF9pdC0+dmFsdWUu
aXNvbGF0ZWRDb3B5KCkpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKHBhcnRpYWxTeW5jKSB7
CkBAIC0xOTgsNyArMTk4LDcgQEAgdm9pZCBTdG9yYWdlQXJlYVN5bmM6OnN5bmNUaW1lckZpcmVk
KFRpbWVyPFN0b3JhZ2VBcmVhU3luYz4qKQogICAgICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFN0
cmluZz46Oml0ZXJhdG9yIHBlbmRpbmdfaXQgPSBtX2l0ZW1zUGVuZGluZ1N5bmMuYmVnaW4oKTsK
ICAgICAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+OjppdGVyYXRvciBwZW5kaW5nX2Vu
ZCA9IG1faXRlbXNQZW5kaW5nU3luYy5lbmQoKTsKICAgICAgICAgICAgIGZvciAoOyBwZW5kaW5n
X2l0ICE9IHBlbmRpbmdfZW5kOyArK3BlbmRpbmdfaXQpCi0gICAgICAgICAgICAgICAgbV9jaGFu
Z2VkSXRlbXMucmVtb3ZlKHBlbmRpbmdfaXQtPmZpcnN0KTsKKyAgICAgICAgICAgICAgICBtX2No
YW5nZWRJdGVtcy5yZW1vdmUocGVuZGluZ19pdC0+a2V5KTsKICAgICAgICAgfQogCiAgICAgICAg
IGlmICghbV9zeW5jU2NoZWR1bGVkKSB7CkBAIC0zNDUsNyArMzQ1LDcgQEAgdm9pZCBTdG9yYWdl
QXJlYVN5bmM6OnBlcmZvcm1JbXBvcnQoKQogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpp
dGVyYXRvciBlbmQgPSBpdGVtTWFwLmVuZCgpOwogCiAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytp
dCkKLSAgICAgICAgbV9zdG9yYWdlQXJlYS0+aW1wb3J0SXRlbShpdC0+Zmlyc3QsIGl0LT5zZWNv
bmQpOworICAgICAgICBtX3N0b3JhZ2VBcmVhLT5pbXBvcnRJdGVtKGl0LT5rZXksIGl0LT52YWx1
ZSk7CiAKICAgICBtYXJrSW1wb3J0ZWQoKTsKIH0KQEAgLTQzMywxMyArNDMzLDEzIEBAIHZvaWQg
U3RvcmFnZUFyZWFTeW5jOjpzeW5jKGJvb2wgY2xlYXJJdGVtcywgY29uc3QgSGFzaE1hcDxTdHJp
bmcsIFN0cmluZz4mIGl0ZW1zCiAgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKICAgICBmb3IgKEhh
c2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGl0ZW1zLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAvLyBCYXNlZCBvbiB0aGUgbnVsbC1uZXNzIG9m
IHRoZSBzZWNvbmQgYXJndW1lbnQsIGRlY2lkZSB3aGV0aGVyIHRoaXMgaXMgYW4gaW5zZXJ0IG9y
IGEgZGVsZXRlLgotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQmIHF1ZXJ5ID0gaXQtPnNlY29uZC5p
c051bGwoKSA/IHJlbW92ZSA6IGluc2VydDsKKyAgICAgICAgU1FMaXRlU3RhdGVtZW50JiBxdWVy
eSA9IGl0LT52YWx1ZS5pc051bGwoKSA/IHJlbW92ZSA6IGluc2VydDsKIAotICAgICAgICBxdWVy
eS5iaW5kVGV4dCgxLCBpdC0+Zmlyc3QpOworICAgICAgICBxdWVyeS5iaW5kVGV4dCgxLCBpdC0+
a2V5KTsKIAogICAgICAgICAvLyBJZiB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIG5vbi1udWxsLCB3
ZSdyZSBkb2luZyBhbiBpbnNlcnQsIHNvIGJpbmQgaXQgYXMgdGhlIHZhbHVlLgotICAgICAgICBp
ZiAoIWl0LT5zZWNvbmQuaXNOdWxsKCkpCi0gICAgICAgICAgICBxdWVyeS5iaW5kQmxvYigyLCBp
dC0+c2Vjb25kKTsKKyAgICAgICAgaWYgKCFpdC0+dmFsdWUuaXNOdWxsKCkpCisgICAgICAgICAg
ICBxdWVyeS5iaW5kQmxvYigyLCBpdC0+dmFsdWUpOwogCiAgICAgICAgIGludCByZXN1bHQgPSBx
dWVyeS5zdGVwKCk7CiAgICAgICAgIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0RG9uZSkgewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTWFwLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU1hcC5jcHAKaW5kZXggOGU0MmQyZjE3NmRkM2IxMTEyYTAx
YTUxZDhkYjYyZjRiMzhiYmEzNS4uNDBlMWEzOGYxY2E0YTc5ZjBjZTI0NzAxMTUzNDdhZGI5Mjlm
NDk4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTWFwLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VNYXAuY3BwCkBAIC04OSw3ICs4OSw3
IEBAIFN0cmluZyBTdG9yYWdlTWFwOjprZXkodW5zaWduZWQgaW5kZXgpCiAgICAgICAgIHJldHVy
biBTdHJpbmcoKTsKIAogICAgIHNldEl0ZXJhdG9yVG9JbmRleChpbmRleCk7Ci0gICAgcmV0dXJu
IG1faXRlcmF0b3ItPmZpcnN0OworICAgIHJldHVybiBtX2l0ZXJhdG9yLT5rZXk7CiB9CiAKIFN0
cmluZyBTdG9yYWdlTWFwOjpnZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5KSBjb25zdApAQCAtMTMz
LDcgKzEzMyw3IEBAIFBhc3NSZWZQdHI8U3RvcmFnZU1hcD4gU3RvcmFnZU1hcDo6c2V0SXRlbShj
b25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1CiAKICAgICBIYXNoTWFwPFN0cmlu
ZywgU3RyaW5nPjo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IG1fbWFwLmFkZChrZXksIHZhbHVlKTsK
ICAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICBhZGRSZXN1bHQuaXRlcmF0
b3ItPnNlY29uZCA9IHZhbHVlOworICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0g
dmFsdWU7CiAKICAgICBpbnZhbGlkYXRlSXRlcmF0b3IoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcAppbmRleCA1NGI2NDBjZTUyZjVkYTkx
MWQ3MmQ2YzU3NjMwZGI1MTY1ZGNkYWIzLi5jOGFjMmJkM2E4MTQyMTY1NDlmMGY5OTUxZWQ4ZGEx
NzE4NTg3YmZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1l
c3BhY2VJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3Bh
Y2VJbXBsLmNwcApAQCAtNTUsNyArNTUsNyBAQCBQYXNzUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+
IFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpsb2NhbFN0b3JhZ2VOYW1lc3BhY2UoY29uc3QgUwogICAg
ICAgICByZXR1cm4gc3RvcmFnZU5hbWVzcGFjZS5yZWxlYXNlKCk7CiAgICAgfQogCi0gICAgcmV0
dXJuIGl0LT5zZWNvbmQ7CisgICAgcmV0dXJuIGl0LT52YWx1ZTsKIH0KIAogUGFzc1JlZlB0cjxT
dG9yYWdlTmFtZXNwYWNlPiBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6c2Vzc2lvblN0b3JhZ2VOYW1l
c3BhY2UodW5zaWduZWQgcXVvdGEpCkBAIC05Nyw3ICs5Nyw3IEBAIFBhc3NSZWZQdHI8U3RvcmFn
ZU5hbWVzcGFjZT4gU3RvcmFnZU5hbWVzcGFjZUltcGw6OmNvcHkoKQogCiAgICAgU3RvcmFnZUFy
ZWFNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fc3RvcmFnZUFyZWFNYXAuZW5kKCk7CiAgICAgZm9yIChT
dG9yYWdlQXJlYU1hcDo6aXRlcmF0b3IgaSA9IG1fc3RvcmFnZUFyZWFNYXAuYmVnaW4oKTsgaSAh
PSBlbmQ7ICsraSkKLSAgICAgICAgbmV3TmFtZXNwYWNlLT5tX3N0b3JhZ2VBcmVhTWFwLnNldChp
LT5maXJzdCwgaS0+c2Vjb25kLT5jb3B5KCkpOworICAgICAgICBuZXdOYW1lc3BhY2UtPm1fc3Rv
cmFnZUFyZWFNYXAuc2V0KGktPmtleSwgaS0+dmFsdWUtPmNvcHkoKSk7CiAgICAgcmV0dXJuIG5l
d05hbWVzcGFjZS5yZWxlYXNlKCk7CiB9CiAKQEAgLTEzMSw3ICsxMzEsNyBAQCB2b2lkIFN0b3Jh
Z2VOYW1lc3BhY2VJbXBsOjpjbG9zZSgpCiAKICAgICBTdG9yYWdlQXJlYU1hcDo6aXRlcmF0b3Ig
ZW5kID0gbV9zdG9yYWdlQXJlYU1hcC5lbmQoKTsKICAgICBmb3IgKFN0b3JhZ2VBcmVhTWFwOjpp
dGVyYXRvciBpdCA9IG1fc3RvcmFnZUFyZWFNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQot
ICAgICAgICBpdC0+c2Vjb25kLT5jbG9zZSgpOworICAgICAgICBpdC0+dmFsdWUtPmNsb3NlKCk7
CiAKICAgICBpZiAobV9zeW5jTWFuYWdlcikKICAgICAgICAgbV9zeW5jTWFuYWdlci0+Y2xvc2Uo
KTsKQEAgLTE1NCw3ICsxNTQsNyBAQCB2b2lkIFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpjbGVhckFs
bE9yaWdpbnNGb3JEZWxldGlvbigpCiAKICAgICBTdG9yYWdlQXJlYU1hcDo6aXRlcmF0b3IgZW5k
ID0gbV9zdG9yYWdlQXJlYU1hcC5lbmQoKTsKICAgICBmb3IgKFN0b3JhZ2VBcmVhTWFwOjppdGVy
YXRvciBpdCA9IG1fc3RvcmFnZUFyZWFNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAg
ICAgICBpdC0+c2Vjb25kLT5jbGVhckZvck9yaWdpbkRlbGV0aW9uKCk7CisgICAgICAgIGl0LT52
YWx1ZS0+Y2xlYXJGb3JPcmlnaW5EZWxldGlvbigpOwogfQogICAgIAogdm9pZCBTdG9yYWdlTmFt
ZXNwYWNlSW1wbDo6c3luYygpCkBAIC0xNjIsNyArMTYyLDcgQEAgdm9pZCBTdG9yYWdlTmFtZXNw
YWNlSW1wbDo6c3luYygpCiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBTdG9yYWdl
QXJlYU1hcDo6aXRlcmF0b3IgZW5kID0gbV9zdG9yYWdlQXJlYU1hcC5lbmQoKTsKICAgICBmb3Ig
KFN0b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBpdCA9IG1fc3RvcmFnZUFyZWFNYXAuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5zeW5jKCk7CisgICAgICAgIGl0
LT52YWx1ZS0+c3luYygpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwCmluZGV4IDNmNTk3MDViMTcxNTQz
N2JiYjc3NWU4OWMzYjQ5MjQwMzBiNjgzYzUuLjNkN2QwMjczOWQzZDYyMzRjNTUwZGRlMTdiOGM5
YmVkYTkxMTU1ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudEV4
dGVuc2lvbnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudEV4dGVuc2lv
bnMuY3BwCkBAIC0xNTYsNyArMTU2LDcgQEAgdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJl
bW92ZUFuaW1hdGlvbkVsZW1lbnRGcm9tVGFyZ2V0KFNWR1NNSUxFbGVtZW50KiBhbmkKICAgICBI
YXNoTWFwPFNWR0VsZW1lbnQqLCBIYXNoU2V0PFNWR1NNSUxFbGVtZW50Kj4qID46Oml0ZXJhdG9y
IGl0ID0gbV9hbmltYXRlZEVsZW1lbnRzLmZpbmQodGFyZ2V0RWxlbWVudCk7CiAgICAgQVNTRVJU
KGl0ICE9IG1fYW5pbWF0ZWRFbGVtZW50cy5lbmQoKSk7CiAgICAgCi0gICAgSGFzaFNldDxTVkdT
TUlMRWxlbWVudCo+KiBhbmltYXRpb25FbGVtZW50c0ZvclRhcmdldCA9IGl0LT5zZWNvbmQ7Cisg
ICAgSGFzaFNldDxTVkdTTUlMRWxlbWVudCo+KiBhbmltYXRpb25FbGVtZW50c0ZvclRhcmdldCA9
IGl0LT52YWx1ZTsKICAgICBBU1NFUlQoIWFuaW1hdGlvbkVsZW1lbnRzRm9yVGFyZ2V0LT5pc0Vt
cHR5KCkpOwogCiAgICAgYW5pbWF0aW9uRWxlbWVudHNGb3JUYXJnZXQtPnJlbW92ZShhbmltYXRp
b25FbGVtZW50KTsKQEAgLTIxMyw5ICsyMTMsOSBAQCB2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9u
czo6YWRkUGVuZGluZ1Jlc291cmNlKGNvbnN0IEF0b21pY1N0cmluZyYgaWQsIFNWR1N0eWxlZAog
CiAgICAgLy8gVGhlIEhhc2hNYXAgYWRkIGZ1bmN0aW9uIGxlYXZlcyB0aGUgbWFwIGFsb25lIGFu
ZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgZWxlbWVudCBpbiB0aGUKICAgICAvLyBtYXAgaWYg
dGhlIGVsZW1lbnQgYWxyZWFkeSBleGlzdHMuIFNvIHdlIGFkZCB3aXRoIGEgdmFsdWUgb2YgMCwg
YW5kIGl0IGVpdGhlciBmaW5kcyB0aGUKLSAgICAvLyBleGlzdGluZyBlbGVtZW50IG9yIGFkZHMg
YSBuZXcgb25lIGluIGEgc2luZ2xlIG9wZXJhdGlvbi4gVGhlICIuaXRlcmF0b3ItPnNlY29uZCIg
aWRpb20gZ2V0cworICAgIC8vIGV4aXN0aW5nIGVsZW1lbnQgb3IgYWRkcyBhIG5ldyBvbmUgaW4g
YSBzaW5nbGUgb3BlcmF0aW9uLiBUaGUgIi5pdGVyYXRvci0+dmFsdWUiIGlkaW9tIGdldHMKICAg
ICAvLyB1cyB0byB0aGUgaXRlcmF0b3IgZnJvbSBhZGQncyByZXN1bHQsIGFuZCB0aGVuIHRvIHRo
ZSB2YWx1ZSBpbnNpZGUgdGhlIGhhc2ggdGFibGUuCi0gICAgU1ZHUGVuZGluZ0VsZW1lbnRzKiYg
c2V0ID0gbV9wZW5kaW5nUmVzb3VyY2VzLmFkZChpZCwgMCkuaXRlcmF0b3ItPnNlY29uZDsKKyAg
ICBTVkdQZW5kaW5nRWxlbWVudHMqJiBzZXQgPSBtX3BlbmRpbmdSZXNvdXJjZXMuYWRkKGlkLCAw
KS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCFzZXQpCiAgICAgICAgIHNldCA9IG5ldyBTVkdQ
ZW5kaW5nRWxlbWVudHM7CiAgICAgc2V0LT5hZGQoZWxlbWVudCk7CkBAIC0yNDAsNyArMjQwLDcg
QEAgYm9vbCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OmlzRWxlbWVudFBlbmRpbmdSZXNvdXJjZXMo
U1ZHU3R5bGVkRWxlbWVudCogZWxlbWVudCkKIAogICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBT
VkdQZW5kaW5nRWxlbWVudHMqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wZW5kaW5nUmVzb3Vy
Y2VzLmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDxBdG9taWNTdHJpbmcsIFNWR1BlbmRpbmdFbGVt
ZW50cyo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGVuZGluZ1Jlc291cmNlcy5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgU1ZHUGVuZGluZ0VsZW1lbnRzKiBlbGVtZW50cyA9
IGl0LT5zZWNvbmQ7CisgICAgICAgIFNWR1BlbmRpbmdFbGVtZW50cyogZWxlbWVudHMgPSBpdC0+
dmFsdWU7CiAgICAgICAgIEFTU0VSVChlbGVtZW50cyk7CiAKICAgICAgICAgaWYgKGVsZW1lbnRz
LT5jb250YWlucyhlbGVtZW50KSkKQEAgLTI2OCwxMyArMjY4LDEzIEBAIHZvaWQgU1ZHRG9jdW1l
bnRFeHRlbnNpb25zOjpyZW1vdmVFbGVtZW50RnJvbVBlbmRpbmdSZXNvdXJjZXMoU1ZHU3R5bGVk
RWxlbWVudCoKICAgICAgICAgVmVjdG9yPEF0b21pY1N0cmluZz4gdG9CZVJlbW92ZWQ7CiAgICAg
ICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBTVkdQZW5kaW5nRWxlbWVudHMqPjo6aXRlcmF0b3Ig
ZW5kID0gbV9wZW5kaW5nUmVzb3VyY2VzLmVuZCgpOwogICAgICAgICBmb3IgKEhhc2hNYXA8QXRv
bWljU3RyaW5nLCBTVkdQZW5kaW5nRWxlbWVudHMqPjo6aXRlcmF0b3IgaXQgPSBtX3BlbmRpbmdS
ZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBTVkdQZW5k
aW5nRWxlbWVudHMqIGVsZW1lbnRzID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIFNWR1BlbmRp
bmdFbGVtZW50cyogZWxlbWVudHMgPSBpdC0+dmFsdWU7CiAgICAgICAgICAgICBBU1NFUlQoZWxl
bWVudHMpOwogICAgICAgICAgICAgQVNTRVJUKCFlbGVtZW50cy0+aXNFbXB0eSgpKTsKIAogICAg
ICAgICAgICAgZWxlbWVudHMtPnJlbW92ZShlbGVtZW50KTsKICAgICAgICAgICAgIGlmIChlbGVt
ZW50cy0+aXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHRvQmVSZW1vdmVkLmFwcGVuZChpdC0+
Zmlyc3QpOworICAgICAgICAgICAgICAgIHRvQmVSZW1vdmVkLmFwcGVuZChpdC0+a2V5KTsKICAg
ICAgICAgfQogCiAgICAgICAgIGVsZW1lbnQtPmNsZWFySGFzUGVuZGluZ1Jlc291cmNlc0lmUG9z
c2libGUoKTsKQEAgLTI5MCwxMyArMjkwLDEzIEBAIHZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25z
OjpyZW1vdmVFbGVtZW50RnJvbVBlbmRpbmdSZXNvdXJjZXMoU1ZHU3R5bGVkRWxlbWVudCoKICAg
ICAgICAgVmVjdG9yPEF0b21pY1N0cmluZz4gdG9CZVJlbW92ZWQ7CiAgICAgICAgIEhhc2hNYXA8
QXRvbWljU3RyaW5nLCBTVkdQZW5kaW5nRWxlbWVudHMqPjo6aXRlcmF0b3IgZW5kID0gbV9wZW5k
aW5nUmVzb3VyY2VzRm9yUmVtb3ZhbC5lbmQoKTsKICAgICAgICAgZm9yIChIYXNoTWFwPEF0b21p
Y1N0cmluZywgU1ZHUGVuZGluZ0VsZW1lbnRzKj46Oml0ZXJhdG9yIGl0ID0gbV9wZW5kaW5nUmVz
b3VyY2VzRm9yUmVtb3ZhbC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAg
IFNWR1BlbmRpbmdFbGVtZW50cyogZWxlbWVudHMgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAg
U1ZHUGVuZGluZ0VsZW1lbnRzKiBlbGVtZW50cyA9IGl0LT52YWx1ZTsKICAgICAgICAgICAgIEFT
U0VSVChlbGVtZW50cyk7CiAgICAgICAgICAgICBBU1NFUlQoIWVsZW1lbnRzLT5pc0VtcHR5KCkp
OwogCiAgICAgICAgICAgICBlbGVtZW50cy0+cmVtb3ZlKGVsZW1lbnQpOwogICAgICAgICAgICAg
aWYgKGVsZW1lbnRzLT5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgdG9CZVJlbW92ZWQuYXBw
ZW5kKGl0LT5maXJzdCk7CisgICAgICAgICAgICAgICAgdG9CZVJlbW92ZWQuYXBwZW5kKGl0LT5r
ZXkpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gV2UgdXNlIHRoZSByZW1vdmVQZW5kaW5nUmVz
b3VyY2VGb3JSZW1vdmFsIGZ1bmN0aW9uIGhlcmUgYmVjYXVzZSBpdCBkZWFscyB3aXRoIHNldCBs
aWZldGltZSBjb3JyZWN0bHkuCkBAIC0zNTYsNyArMzU2LDcgQEAgSGFzaFNldDxTVkdFbGVtZW50
Kj4qIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6c2V0T2ZFbGVtZW50c1JlZmVyZW5jaW5nVGFyZ2V0
KFNWR0UKICAgICBjb25zdCBIYXNoTWFwPFNWR0VsZW1lbnQqLCBPd25QdHI8SGFzaFNldDxTVkdF
bGVtZW50Kj4gPiA+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fZWxlbWVudERlcGVuZGVuY2llcy5m
aW5kKHJlZmVyZW5jZWRFbGVtZW50KTsKICAgICBpZiAoaXQgPT0gbV9lbGVtZW50RGVwZW5kZW5j
aWVzLmVuZCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gaXQtPnNlY29uZC5nZXQo
KTsKKyAgICByZXR1cm4gaXQtPnZhbHVlLmdldCgpOwogfQogCiB2b2lkIFNWR0RvY3VtZW50RXh0
ZW5zaW9uczo6YWRkRWxlbWVudFJlZmVyZW5jaW5nVGFyZ2V0KFNWR0VsZW1lbnQqIHJlZmVyZW5j
aW5nRWxlbWVudCwgU1ZHRWxlbWVudCogcmVmZXJlbmNlZEVsZW1lbnQpCkBAIC0zODAsOCArMzgw
LDggQEAgdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlbW92ZUFsbFRhcmdldFJlZmVyZW5j
ZXNGb3JFbGVtZW50KFNWR0VsZW1lbnQqIHJlZmUKIAogICAgIEhhc2hNYXA8U1ZHRWxlbWVudCos
IE93blB0cjxIYXNoU2V0PFNWR0VsZW1lbnQqPiA+ID46Oml0ZXJhdG9yIGVuZCA9IG1fZWxlbWVu
dERlcGVuZGVuY2llcy5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8U1ZHRWxlbWVudCosIE93blB0
cjxIYXNoU2V0PFNWR0VsZW1lbnQqPiA+ID46Oml0ZXJhdG9yIGl0ID0gbV9lbGVtZW50RGVwZW5k
ZW5jaWVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBTVkdFbGVtZW50KiBy
ZWZlcmVuY2VkRWxlbWVudCA9IGl0LT5maXJzdDsKLSAgICAgICAgSGFzaFNldDxTVkdFbGVtZW50
Kj4qIHJlZmVyZW5jaW5nRWxlbWVudHMgPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICBTVkdF
bGVtZW50KiByZWZlcmVuY2VkRWxlbWVudCA9IGl0LT5rZXk7CisgICAgICAgIEhhc2hTZXQ8U1ZH
RWxlbWVudCo+KiByZWZlcmVuY2luZ0VsZW1lbnRzID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAg
ICBIYXNoU2V0PFNWR0VsZW1lbnQqPjo6aXRlcmF0b3Igc2V0SXQgPSByZWZlcmVuY2luZ0VsZW1l
bnRzLT5maW5kKHJlZmVyZW5jaW5nRWxlbWVudCk7CiAgICAgICAgIGlmIChzZXRJdCA9PSByZWZl
cmVuY2luZ0VsZW1lbnRzLT5lbmQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtNDAyLDEw
ICs0MDIsMTAgQEAgdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlbW92ZUFsbEVsZW1lbnRS
ZWZlcmVuY2VzRm9yVGFyZ2V0KFNWR0VsZW1lbnQqIHJlZmUKICAgICBIYXNoTWFwPFNWR0VsZW1l
bnQqLCBPd25QdHI8SGFzaFNldDxTVkdFbGVtZW50Kj4gPiA+OjppdGVyYXRvciBpdCA9IG1fZWxl
bWVudERlcGVuZGVuY2llcy5maW5kKHJlZmVyZW5jZWRFbGVtZW50KTsKICAgICBpZiAoaXQgPT0g
bV9lbGVtZW50RGVwZW5kZW5jaWVzLmVuZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJU
KGl0LT5maXJzdCA9PSByZWZlcmVuY2VkRWxlbWVudCk7CisgICAgQVNTRVJUKGl0LT5rZXkgPT0g
cmVmZXJlbmNlZEVsZW1lbnQpOwogICAgIFZlY3RvcjxTVkdFbGVtZW50Kj4gdG9CZU5vdGlmaWVk
OwogCi0gICAgSGFzaFNldDxTVkdFbGVtZW50Kj4qIHJlZmVyZW5jaW5nRWxlbWVudHMgPSBpdC0+
c2Vjb25kLmdldCgpOworICAgIEhhc2hTZXQ8U1ZHRWxlbWVudCo+KiByZWZlcmVuY2luZ0VsZW1l
bnRzID0gaXQtPnZhbHVlLmdldCgpOwogICAgIEhhc2hTZXQ8U1ZHRWxlbWVudCo+OjppdGVyYXRv
ciBzZXRFbmQgPSByZWZlcmVuY2luZ0VsZW1lbnRzLT5lbmQoKTsKICAgICBmb3IgKEhhc2hTZXQ8
U1ZHRWxlbWVudCo+OjppdGVyYXRvciBzZXRJdCA9IHJlZmVyZW5jaW5nRWxlbWVudHMtPmJlZ2lu
KCk7IHNldEl0ICE9IHNldEVuZDsgKytzZXRJdCkKICAgICAgICAgdG9CZU5vdGlmaWVkLmFwcGVu
ZCgqc2V0SXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCmluZGV4IDE3NTNlY2U2NmM5OTky
OWY2ZDZjNzkzNjc3MDI0ZGUzYTljNzIzZTIuLjZhYTFhMTE5NTliMWU1NTdjZmMyZGM4YWRiMTc0
ZDhiMjk2NmVkZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAKQEAgLTc3LDcgKzc3LDcg
QEAgU1ZHRWxlbWVudDo6flNWR0VsZW1lbnQoKQogICAgICAgICBTVkdFbGVtZW50UmFyZURhdGE6
OlNWR0VsZW1lbnRSYXJlRGF0YU1hcDo6aXRlcmF0b3IgaXQgPSByYXJlRGF0YU1hcC5maW5kKHRo
aXMpOwogICAgICAgICBBU1NFUlQoaXQgIT0gcmFyZURhdGFNYXAuZW5kKCkpOwogCi0gICAgICAg
IFNWR0VsZW1lbnRSYXJlRGF0YSogcmFyZURhdGEgPSBpdC0+c2Vjb25kOworICAgICAgICBTVkdF
bGVtZW50UmFyZURhdGEqIHJhcmVEYXRhID0gaXQtPnZhbHVlOwogICAgICAgICByYXJlRGF0YS0+
ZGVzdHJveUFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygpOwogICAgICAgICBpZiAoU1ZHQ3Vy
c29yRWxlbWVudCogY3Vyc29yRWxlbWVudCA9IHJhcmVEYXRhLT5jdXJzb3JFbGVtZW50KCkpCiAg
ICAgICAgICAgICBjdXJzb3JFbGVtZW50LT5yZW1vdmVDbGllbnQodGhpcyk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuY3BwCmluZGV4IGM0
OTYzODM4OTg1N2UwNWU5NzkwN2RjMDM4Zjc4ZTBhMmU5Mzg3ZjguLjMyN2QyMjdhNzk1NTMwNWIz
ZDAxZGNiODE4MmQ1MmE4MTYxZDc1OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9h
bmltYXRpb24vU01JTFRpbWVDb250YWluZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9h
bmltYXRpb24vU01JTFRpbWVDb250YWluZXIuY3BwCkBAIC0yMTEsNyArMjExLDcgQEAgU3RyaW5n
IFNNSUxUaW1lQ29udGFpbmVyOjpiYXNlVmFsdWVGb3IoRWxlbWVudEF0dHJpYnV0ZVBhaXIga2V5
KQogICAgIC8vIEN1cnJlbnRseSBhbmltYXRpb24gb3ZlcndyaXRlcyB0aGVtIHNvIHdlIG5lZWQg
dG8gc2F2ZSB0aGVtIHNvbWV3aGVyZS4KICAgICBCYXNlVmFsdWVNYXA6Oml0ZXJhdG9yIGl0ID0g
bV9zYXZlZEJhc2VWYWx1ZXMuZmluZChrZXkpOwogICAgIGlmIChpdCAhPSBtX3NhdmVkQmFzZVZh
bHVlcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBp
dC0+dmFsdWU7CiAgICAgCiAgICAgU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCA9IGtleS5maXJz
dDsKICAgICBRdWFsaWZpZWROYW1lIGF0dHJpYnV0ZU5hbWUgPSBrZXkuc2Vjb25kOwpAQCAtMjg0
LDcgKzI4NCw3IEBAIHZvaWQgU01JTFRpbWVDb250YWluZXI6OnVwZGF0ZUFuaW1hdGlvbnMoU01J
TFRpbWUgZWxhcHNlZCkKICAgICBWZWN0b3I8U1ZHU01JTEVsZW1lbnQqPiBhbmltYXRpb25zVG9B
cHBseTsKICAgICBSZXN1bHRFbGVtZW50TWFwOjppdGVyYXRvciBlbmQgPSByZXN1bHRzRWxlbWVu
dHMuZW5kKCk7CiAgICAgZm9yIChSZXN1bHRFbGVtZW50TWFwOjppdGVyYXRvciBpdCA9IHJlc3Vs
dHNFbGVtZW50cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGFuaW1hdGlvbnNU
b0FwcGx5LmFwcGVuZChpdC0+c2Vjb25kLmdldCgpKTsKKyAgICAgICAgYW5pbWF0aW9uc1RvQXBw
bHkuYXBwZW5kKGl0LT52YWx1ZS5nZXQoKSk7CiAKICAgICAvLyBTb3J0IDxhbmltYXRlVHJhbmZv
cm0+IHRvIGJlIHRoZSBsYXN0IG9uZSB0byBiZSBhcHBsaWVkLiA8YW5pbWF0ZT4gbWF5IGNoYW5n
ZSB0cmFuc2Zvcm0gYXR0cmlidXRlIGFzCiAgICAgLy8gd2VsbCAoZGlyZWN0bHkgb3IgaW5kaXJl
Y3RseSBieSBtb2RpZnlpbmcgPHVzZT4geC95KSBhbmQgdGhpcyB3YXkgdHJhbnNmb3JtcyBjb21i
aW5lIHByb3Blcmx5LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NW
R0ltYWdlQ2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlQ2Fj
aGUuY3BwCmluZGV4IGZiMzhmZDU1NGI2Mjc2ZTA2ZDZjYTQ4YWU2NTIxNzJiMGQ2ODhjNGQuLjg4
OTlmMTIxMzYxYTBjOTQ2NDExZWQ0NWY2NjI1NWU2ZmU3ODRiOTEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZUNhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VDYWNoZS5jcHAKQEAgLTQyLDcgKzQyLDcgQEAgU1ZH
SW1hZ2VDYWNoZTo6flNWR0ltYWdlQ2FjaGUoKQogCiAgICAgSW1hZ2VEYXRhTWFwOjppdGVyYXRv
ciBlbmQgPSBtX2ltYWdlRGF0YU1hcC5lbmQoKTsKICAgICBmb3IgKEltYWdlRGF0YU1hcDo6aXRl
cmF0b3IgaXQgPSBtX2ltYWdlRGF0YU1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAg
ICAgIGRlbGV0ZSBpdC0+c2Vjb25kLmJ1ZmZlcjsKKyAgICAgICAgZGVsZXRlIGl0LT52YWx1ZS5i
dWZmZXI7CiAKICAgICBtX2ltYWdlRGF0YU1hcC5jbGVhcigpOwogfQpAQCAtNTYsNyArNTYsNyBA
QCB2b2lkIFNWR0ltYWdlQ2FjaGU6OnJlbW92ZVJlbmRlcmVyRnJvbUNhY2hlKGNvbnN0IFJlbmRl
ck9iamVjdCogcmVuZGVyZXIpCiAgICAgaWYgKGl0ID09IG1faW1hZ2VEYXRhTWFwLmVuZCgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBkZWxldGUgaXQtPnNlY29uZC5idWZmZXI7CisgICAgZGVs
ZXRlIGl0LT52YWx1ZS5idWZmZXI7CiAgICAgbV9pbWFnZURhdGFNYXAucmVtb3ZlKGl0KTsKIH0K
IApAQCAtNzMsMTQgKzczLDE0IEBAIFNWR0ltYWdlQ2FjaGU6OlNpemVBbmRab29tIFNWR0ltYWdl
Q2FjaGU6OnJlcXVlc3RlZFNpemVBbmRab29tKGNvbnN0IFJlbmRlck9iamVjCiAgICAgU2l6ZUFu
ZFpvb21NYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zaXplQW5kWm9vbU1hcC5maW5kKHJlbmRl
cmVyKTsKICAgICBpZiAoaXQgPT0gbV9zaXplQW5kWm9vbU1hcC5lbmQoKSkKICAgICAgICAgcmV0
dXJuIFNpemVBbmRab29tKCk7Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgcmV0dXJuIGl0
LT52YWx1ZTsKIH0KIAogdm9pZCBTVkdJbWFnZUNhY2hlOjppbWFnZUNvbnRlbnRDaGFuZ2VkKCkK
IHsKICAgICBJbWFnZURhdGFNYXA6Oml0ZXJhdG9yIGVuZCA9IG1faW1hZ2VEYXRhTWFwLmVuZCgp
OwogICAgIGZvciAoSW1hZ2VEYXRhTWFwOjppdGVyYXRvciBpdCA9IG1faW1hZ2VEYXRhTWFwLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC5pbWFnZU5lZWRzVXBk
YXRlID0gdHJ1ZTsKKyAgICAgICAgaXQtPnZhbHVlLmltYWdlTmVlZHNVcGRhdGUgPSB0cnVlOwog
CiAgICAgLy8gSWYgd2UncmUgaW4gdGhlIG1pZGRsZSBvZiBsYXlvdXQsIHN0YXJ0IHJlZHJhd2lu
ZyBkaXJ0eQogICAgIC8vIGltYWdlcyBvbiBhIHRpbWVyOyBvdGhlcndpc2UgaXQncyBzYWZlIHRv
IGRyYXcgaW1tZWRpYXRlbHkuCkBAIC05Nyw3ICs5Nyw3IEBAIHZvaWQgU1ZHSW1hZ2VDYWNoZTo6
cmVkcmF3KCkKIHsKICAgICBJbWFnZURhdGFNYXA6Oml0ZXJhdG9yIGVuZCA9IG1faW1hZ2VEYXRh
TWFwLmVuZCgpOwogICAgIGZvciAoSW1hZ2VEYXRhTWFwOjppdGVyYXRvciBpdCA9IG1faW1hZ2VE
YXRhTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBJbWFnZURhdGEmIGRh
dGEgPSBpdC0+c2Vjb25kOworICAgICAgICBJbWFnZURhdGEmIGRhdGEgPSBpdC0+dmFsdWU7CiAg
ICAgICAgIGlmICghZGF0YS5pbWFnZU5lZWRzVXBkYXRlKQogICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgIC8vIElmIHRoZSBjb250ZW50IGNoYW5nZWQgd2UgcmVkcmF3IHVzaW5nIG91ciBl
eGlzdGluZyBJbWFnZUJ1ZmZlci4KQEAgLTEyNSwxNCArMTI1LDE0IEBAIEltYWdlKiBTVkdJbWFn
ZUNhY2hlOjpsb29rdXBPckNyZWF0ZUJpdG1hcEltYWdlRm9yUmVuZGVyZXIoY29uc3QgUmVuZGVy
T2JqZWN0KiByCiAgICAgaWYgKHNpemVJdCA9PSBtX3NpemVBbmRab29tTWFwLmVuZCgpKQogICAg
ICAgICByZXR1cm4gSW1hZ2U6Om51bGxJbWFnZSgpOwogCi0gICAgSW50U2l6ZSBzaXplID0gc2l6
ZUl0LT5zZWNvbmQuc2l6ZTsKLSAgICBmbG9hdCB6b29tID0gc2l6ZUl0LT5zZWNvbmQuem9vbTsK
KyAgICBJbnRTaXplIHNpemUgPSBzaXplSXQtPnZhbHVlLnNpemU7CisgICAgZmxvYXQgem9vbSA9
IHNpemVJdC0+dmFsdWUuem9vbTsKICAgICBBU1NFUlQoIXNpemUuaXNFbXB0eSgpKTsKIAogICAg
IC8vIExvb2t1cCBpbWFnZSBmb3IgcmVuZGVyZXIgaW4gY2FjaGUgYW5kIGV2ZW50dWFsbHkgdXBk
YXRlIGl0LgogICAgIEltYWdlRGF0YU1hcDo6aXRlcmF0b3IgaXQgPSBtX2ltYWdlRGF0YU1hcC5m
aW5kKHJlbmRlcmVyKTsKICAgICBpZiAoaXQgIT0gbV9pbWFnZURhdGFNYXAuZW5kKCkpIHsKLSAg
ICAgICAgSW1hZ2VEYXRhJiBkYXRhID0gaXQtPnNlY29uZDsKKyAgICAgICAgSW1hZ2VEYXRhJiBk
YXRhID0gaXQtPnZhbHVlOwogCiAgICAgICAgIC8vIENvbW1vbiBjYXNlOiBpbWFnZSBzaXplICYg
em9vbSByZW1haW5lZCB0aGUgc2FtZS4KICAgICAgICAgaWYgKGRhdGEuc2l6ZUFuZFpvb20uc2l6
ZSA9PSBzaXplICYmIGRhdGEuc2l6ZUFuZFpvb20uem9vbSA9PSB6b29tKQpAQCAtMTU0LDcgKzE1
NCw3IEBAIEltYWdlKiBTVkdJbWFnZUNhY2hlOjpsb29rdXBPckNyZWF0ZUJpdG1hcEltYWdlRm9y
UmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0KiByCiAgICAgSW1hZ2UqIG5ld0ltYWdlUHRyID0g
bmV3SW1hZ2UuZ2V0KCk7CiAgICAgQVNTRVJUKG5ld0ltYWdlUHRyKTsKIAotICAgIG1faW1hZ2VE
YXRhTWFwLmFkZChyZW5kZXJlciwgSW1hZ2VEYXRhKG5ld0J1ZmZlci5sZWFrUHRyKCksIG5ld0lt
YWdlLnJlbGVhc2UoKSwgc2l6ZUl0LT5zZWNvbmQpKTsKKyAgICBtX2ltYWdlRGF0YU1hcC5hZGQo
cmVuZGVyZXIsIEltYWdlRGF0YShuZXdCdWZmZXIubGVha1B0cigpLCBuZXdJbWFnZS5yZWxlYXNl
KCksIHNpemVJdC0+dmFsdWUpKTsKICAgICByZXR1cm4gbmV3SW1hZ2VQdHI7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxk
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxk
ZXIuaAppbmRleCA3MTMyNDFjOGU4OTQxNTQyNjFhOTc4MWE3YzZmNGQ1Y2JlNTFmNmUyLi5iOTFk
ZjA0MmRkNTI0ZmU3YzkyYmUwOWFkY2U0YjFlYjZkMDM2MzljIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oCkBAIC01
MCw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIC8vIE9ubHkgYWxsb3dlZCBmb3Ig
ZWZmZWN0cyBiZWxvbmdzIHRvIHRoaXMgYnVpbGRlci4KICAgICAgICAgQVNTRVJUKG1fZWZmZWN0
UmVmZXJlbmNlcy5jb250YWlucyhlZmZlY3QpKTsKLSAgICAgICAgcmV0dXJuIG1fZWZmZWN0UmVm
ZXJlbmNlcy5maW5kKGVmZmVjdCktPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIG1fZWZmZWN0UmVm
ZXJlbmNlcy5maW5kKGVmZmVjdCktPnZhbHVlOwogICAgIH0KIAogICAgIC8vIFJlcXVpcmVkIHRv
IGNoYW5nZSB0aGUgYXR0cmlidXRlcyBvZiBhIGZpbHRlciBkdXJpbmcgYW4gc3ZnQXR0cmlidXRl
Q2hhbmdlZC4KQEAgLTY2LDcgKzY2LDcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIEhhc2hN
YXA8QXRvbWljU3RyaW5nLCBSZWZQdHI8RmlsdGVyRWZmZWN0PiA+OjppdGVyYXRvciBlbmQgPSBt
X2J1aWx0aW5FZmZlY3RzLmVuZCgpOwogICAgICAgICBmb3IgKEhhc2hNYXA8QXRvbWljU3RyaW5n
LCBSZWZQdHI8RmlsdGVyRWZmZWN0PiA+OjppdGVyYXRvciBpdGVyYXRvciA9IG1fYnVpbHRpbkVm
ZmVjdHMuYmVnaW4oKTsgaXRlcmF0b3IgIT0gZW5kOyArK2l0ZXJhdG9yKQotICAgICAgICAgICAg
IG1fZWZmZWN0UmVmZXJlbmNlcy5hZGQoaXRlcmF0b3ItPnNlY29uZCwgRmlsdGVyRWZmZWN0U2V0
KCkpOworICAgICAgICAgICAgIG1fZWZmZWN0UmVmZXJlbmNlcy5hZGQoaXRlcmF0b3ItPnZhbHVl
LCBGaWx0ZXJFZmZlY3RTZXQoKSk7CiAgICAgfQogCiAgICAgSGFzaE1hcDxBdG9taWNTdHJpbmcs
IFJlZlB0cjxGaWx0ZXJFZmZlY3Q+ID4gbV9idWlsdGluRWZmZWN0czsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHkuaCBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHkuaAppbmRleCA3MTRl
ZjE2OTgzNmU5NDY3ZGFkNmU5YmZkNDRiNzZiOTMzM2FjZDJhLi42ZGE0ZjY5YjNhMDZkMDY0MzIz
NmUyNjlmMWI5MTRkOTllYTM1ZTU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvcHJv
cGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL3By
b3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eS5oCkBAIC01NSw4ICs1NSw4IEBAIHB1YmxpYzoK
ICAgICAgICAgQ2FjaGUqIGNhY2hlID0gYW5pbWF0ZWRQcm9wZXJ0eUNhY2hlKCk7CiAgICAgICAg
IGNvbnN0IENhY2hlOjpjb25zdF9pdGVyYXRvciBlbmQgPSBjYWNoZS0+ZW5kKCk7CiAgICAgICAg
IGZvciAoQ2FjaGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY2FjaGUtPmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewotICAgICAgICAgICAgaWYgKGl0LT5zZWNvbmQgPT0gdGhpcykgewotICAgICAg
ICAgICAgICAgIGNhY2hlLT5yZW1vdmUoaXQtPmZpcnN0KTsKKyAgICAgICAgICAgIGlmIChpdC0+
dmFsdWUgPT0gdGhpcykgeworICAgICAgICAgICAgICAgIGNhY2hlLT5yZW1vdmUoaXQtPmtleSk7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0F0dHJpYnV0ZVRvUHJvcGVy
dHlNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQXR0cmlidXRlVG9Q
cm9wZXJ0eU1hcC5jcHAKaW5kZXggYmUzMWNjM2M3ZGEyZjUwZjUxZjY5YjU1NDQwMjY1ZGIxMzVi
NTI4Yy4uY2M0NmNjZmEwODFmZmM4ODMwOWI3ZWYyMmQ2M2YwZjM0ZWZkODE3YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQXR0cmlidXRlVG9Qcm9wZXJ0eU1h
cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQXR0cmlidXRlVG9Q
cm9wZXJ0eU1hcC5jcHAKQEAgLTMxLDcgKzMxLDcgQEAgdm9pZCBTVkdBdHRyaWJ1dGVUb1Byb3Bl
cnR5TWFwOjphZGRQcm9wZXJ0aWVzKFNWR0F0dHJpYnV0ZVRvUHJvcGVydHlNYXAmIG1hcCkKIHsK
ICAgICBBdHRyaWJ1dGVUb1Byb3BlcnRpZXNNYXA6Oml0ZXJhdG9yIGVuZCA9IG1hcC5tX21hcC5l
bmQoKTsKICAgICBmb3IgKEF0dHJpYnV0ZVRvUHJvcGVydGllc01hcDo6aXRlcmF0b3IgaXQgPSBt
YXAubV9tYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFByb3BlcnRpZXNW
ZWN0b3IqIHZlY3RvciA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFByb3BlcnRpZXNWZWN0b3IqIHZl
Y3RvciA9IGl0LT52YWx1ZTsKICAgICAgICAgQVNTRVJUKHZlY3Rvcik7CiAKICAgICAgICAgUHJv
cGVydGllc1ZlY3Rvcjo6aXRlcmF0b3IgdmVjdG9yRW5kID0gdmVjdG9yLT5lbmQoKTsKQEAgLTgx
LDEyICs4MSwxMiBAQCB2b2lkIFNWR0F0dHJpYnV0ZVRvUHJvcGVydHlNYXA6OnN5bmNocm9uaXpl
UHJvcGVydGllcyhTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudAogICAgIEFTU0VSVChjb250ZXh0
RWxlbWVudCk7CiAgICAgQXR0cmlidXRlVG9Qcm9wZXJ0aWVzTWFwOjppdGVyYXRvciBlbmQgPSBt
X21hcC5lbmQoKTsKICAgICBmb3IgKEF0dHJpYnV0ZVRvUHJvcGVydGllc01hcDo6aXRlcmF0b3Ig
aXQgPSBtX21hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgUHJvcGVydGll
c1ZlY3RvciogdmVjdG9yID0gaXQtPnNlY29uZDsKKyAgICAgICAgUHJvcGVydGllc1ZlY3Rvciog
dmVjdG9yID0gaXQtPnZhbHVlOwogICAgICAgICBBU1NFUlQodmVjdG9yKTsKIAogICAgICAgICBQ
cm9wZXJ0aWVzVmVjdG9yOjppdGVyYXRvciB2ZWN0b3JFbmQgPSB2ZWN0b3ItPmVuZCgpOwogICAg
ICAgICBmb3IgKFByb3BlcnRpZXNWZWN0b3I6Oml0ZXJhdG9yIHZlY3Rvckl0ID0gdmVjdG9yLT5i
ZWdpbigpOyB2ZWN0b3JJdCAhPSB2ZWN0b3JFbmQ7ICsrdmVjdG9ySXQpCi0gICAgICAgICAgICBz
eW5jaHJvbml6ZVByb3BlcnR5KGNvbnRleHRFbGVtZW50LCBpdC0+Zmlyc3QsICp2ZWN0b3JJdCk7
CisgICAgICAgICAgICBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnRleHRFbGVtZW50LCBpdC0+a2V5
LCAqdmVjdG9ySXQpOwogICAgIH0gCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dv
cmtlcnMvV29ya2VyQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNv
bnRleHQuY3BwCmluZGV4IGIxMGMxNDcwZWQ0OGViOGI4MGY4ZmM5YTJlNTc5NjE5ZjE5ZGRkY2Mu
LjBlZWFlM2Y4ODA3ZWQ4ZjdkYTlmNjVmMTkxOWRjODU5OWRjMWNhNTAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcApAQCAtMTc4LDcgKzE3OCw3IEBAIGJvb2wgV29y
a2VyQ29udGV4dDo6aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QKICAgICBBY3RpdmVET01PYmpl
Y3RzTWFwJiBhY3RpdmVPYmplY3RzID0gYWN0aXZlRE9NT2JqZWN0cygpOwogICAgIEFjdGl2ZURP
TU9iamVjdHNNYXA6OmNvbnN0X2l0ZXJhdG9yIGFjdGl2ZU9iamVjdHNFbmQgPSBhY3RpdmVPYmpl
Y3RzLmVuZCgpOwogICAgIGZvciAoQWN0aXZlRE9NT2JqZWN0c01hcDo6Y29uc3RfaXRlcmF0b3Ig
aXRlciA9IGFjdGl2ZU9iamVjdHMuYmVnaW4oKTsgaXRlciAhPSBhY3RpdmVPYmplY3RzRW5kOyAr
K2l0ZXIpIHsKLSAgICAgICAgaWYgKGl0ZXItPmZpcnN0LT5oYXNQZW5kaW5nQWN0aXZpdHkoKSkK
KyAgICAgICAgaWYgKGl0ZXItPmtleS0+aGFzUGVuZGluZ0FjdGl2aXR5KCkpCiAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtl
cnMvV29ya2VyRXZlbnRRdWV1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckV2
ZW50UXVldWUuY3BwCmluZGV4IGY1MWQyZGM1M2IzOGY3NWRmYTk3NzRhNzFiZTNiYTBlMTQwY2Q5
OWIuLmEwZWI3NjEzNjVjM2YxZWYzOGJlZTc0OWUyZjIxNGY4NGFhMDUzMWYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyRXZlbnRRdWV1ZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJFdmVudFF1ZXVlLmNwcApAQCAtMTIwLDcgKzEyMCw3IEBA
IHZvaWQgV29ya2VyRXZlbnRRdWV1ZTo6Y2xvc2UoKQogewogICAgIG1faXNDbG9zZWQgPSB0cnVl
OwogICAgIGZvciAoRXZlbnRUYXNrTWFwOjppdGVyYXRvciBpdCA9IG1fZXZlbnRUYXNrTWFwLmJl
Z2luKCk7IGl0ICE9IG1fZXZlbnRUYXNrTWFwLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIEV2ZW50
RGlzcGF0Y2hlclRhc2sqIHRhc2sgPSBpdC0+c2Vjb25kOworICAgICAgICBFdmVudERpc3BhdGNo
ZXJUYXNrKiB0YXNrID0gaXQtPnZhbHVlOwogICAgICAgICB0YXNrLT5jYW5jZWwoKTsKICAgICB9
CiAgICAgbV9ldmVudFRhc2tNYXAuY2xlYXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3htbC9YTUxIdHRwUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVl
c3QuY3BwCmluZGV4IGE3MWM0NDU1NTM4N2Y1ZmY4Njg0NDM1Mjk4NzQyNDQ0MmM2ODg1MDEuLjk5
NjdiMjJhZTk2ZTJiMWRiNzliMmUyN2IzYTA3MGI3MzQwMWJlYTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1s
L1hNTEh0dHBSZXF1ZXN0LmNwcApAQCAtOTAxLDcgKzkwMSw3IEBAIHZvaWQgWE1MSHR0cFJlcXVl
c3Q6OnNldFJlcXVlc3RIZWFkZXJJbnRlcm5hbChjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGNv
bnN0IFN0CiB7CiAgICAgSFRUUEhlYWRlck1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fcmVxdWVz
dEhlYWRlcnMuYWRkKG5hbWUsIHZhbHVlKTsKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQot
ICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCArPSAiLCAiICsgdmFsdWU7CisgICAgICAg
IHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgKz0gIiwgIiArIHZhbHVlOwogfQogCiBTdHJpbmcgWE1M
SHR0cFJlcXVlc3Q6OmdldFJlcXVlc3RIZWFkZXIoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKSBj
b25zdApAQCAtOTI4LDE2ICs5MjgsMTYgQEAgU3RyaW5nIFhNTEh0dHBSZXF1ZXN0OjpnZXRBbGxS
ZXNwb25zZUhlYWRlcnMoRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiAgICAgICAgIC8vICAgICAy
KSBUaGVyZSdzIG5vIGtub3duIGhhcm0gaW4gaGlkaW5nIFNldC1Db29raWUgaGVhZGVyIGZpZWxk
cyBlbnRpcmVseTsgd2UgZG9uJ3QKICAgICAgICAgLy8gICAgICAgIGtub3cgYW55IHdpZGVseSB1
c2VkIHRlY2huaXF1ZSB0aGF0IHJlcXVpcmVzIGFjY2VzcyB0byB0aGVtLgogICAgICAgICAvLyAg
ICAgMykgRmlyZWZveCBoYXMgaW1wbGVtZW50ZWQgdGhpcyBwb2xpY3kuCi0gICAgICAgIGlmIChp
c1NldENvb2tpZUhlYWRlcihpdC0+Zmlyc3QpICYmICFzZWN1cml0eU9yaWdpbigpLT5jYW5Mb2Fk
TG9jYWxSZXNvdXJjZXMoKSkKKyAgICAgICAgaWYgKGlzU2V0Q29va2llSGVhZGVyKGl0LT5rZXkp
ICYmICFzZWN1cml0eU9yaWdpbigpLT5jYW5Mb2FkTG9jYWxSZXNvdXJjZXMoKSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGlmICghbV9zYW1lT3JpZ2luUmVxdWVzdCAmJiAhaXNP
bkFjY2Vzc0NvbnRyb2xSZXNwb25zZUhlYWRlcldoaXRlbGlzdChpdC0+Zmlyc3QpICYmICFhY2Nl
c3NDb250cm9sRXhwb3NlSGVhZGVyU2V0LmNvbnRhaW5zKGl0LT5maXJzdCkpCisgICAgICAgIGlm
ICghbV9zYW1lT3JpZ2luUmVxdWVzdCAmJiAhaXNPbkFjY2Vzc0NvbnRyb2xSZXNwb25zZUhlYWRl
cldoaXRlbGlzdChpdC0+a2V5KSAmJiAhYWNjZXNzQ29udHJvbEV4cG9zZUhlYWRlclNldC5jb250
YWlucyhpdC0+a2V5KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKGl0LT5maXJzdCk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0
LT5rZXkpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnOicpOwogICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZCgnICcpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+
c2Vjb25kKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPnZhbHVlKTsKICAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xyJyk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKCdcbicpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aEZ1
bmN0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhGdW5jdGlvbnMuY3BwCmluZGV4
IDcwN2NjN2ZjZTJjNzM2MThlODI5ODZkZDZiOTZjNWZlZjczOThlY2IuLmVjYjlmZjk4MTI5M2M5
MzRlNmE2MmNiYmM2ZjA5ODYzYmRmYjhiNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3ht
bC9YUGF0aEZ1bmN0aW9ucy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoRnVuY3Rp
b25zLmNwcApAQCAtNzIzLDcgKzcyMyw3IEBAIEZ1bmN0aW9uKiBjcmVhdGVGdW5jdGlvbihjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uKj4mIGFyZ3MpCiAgICAgSGFz
aE1hcDxTdHJpbmcsIEZ1bmN0aW9uUmVjPjo6aXRlcmF0b3IgZnVuY3Rpb25NYXBJdGVyID0gZnVu
Y3Rpb25NYXAtPmZpbmQobmFtZSk7CiAgICAgRnVuY3Rpb25SZWMqIGZ1bmN0aW9uUmVjID0gMDsK
IAotICAgIGlmIChmdW5jdGlvbk1hcEl0ZXIgPT0gZnVuY3Rpb25NYXAtPmVuZCgpIHx8ICEoZnVu
Y3Rpb25SZWMgPSAmZnVuY3Rpb25NYXBJdGVyLT5zZWNvbmQpLT5hcmdzLmNvbnRhaW5zKGFyZ3Mu
c2l6ZSgpKSkKKyAgICBpZiAoZnVuY3Rpb25NYXBJdGVyID09IGZ1bmN0aW9uTWFwLT5lbmQoKSB8
fCAhKGZ1bmN0aW9uUmVjID0gJmZ1bmN0aW9uTWFwSXRlci0+dmFsdWUpLT5hcmdzLmNvbnRhaW5z
KGFyZ3Muc2l6ZSgpKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBGdW5jdGlvbiogZnVuY3Rp
b24gPSBmdW5jdGlvblJlYy0+ZmFjdG9yeUZuKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS94bWwvWFBhdGhQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoUGFyc2VyLmNw
cAppbmRleCA2MmQ4ZWUzN2ZkNmViYjc0YTU4MGEwMGM1OWJlYjZjZDQwYzVhOGI3Li4xMDk4ZTU0
YTIyOTA3NzlmMWUwOGU5ODAyMTAxMzAzN2U2NmRhODlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS94bWwvWFBhdGhQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aFBh
cnNlci5jcHAKQEAgLTEwNiw3ICsxMDYsNyBAQCBzdGF0aWMgYm9vbCBpc0F4aXNOYW1lKGNvbnN0
IFN0cmluZyYgbmFtZSwgU3RlcDo6QXhpcyYgdHlwZSkKICAgICBBeGlzTmFtZXNNYXA6Oml0ZXJh
dG9yIGl0ID0gYXhpc05hbWVzLmZpbmQobmFtZSk7CiAgICAgaWYgKGl0ID09IGF4aXNOYW1lcy5l
bmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHR5cGUgPSBpdC0+c2Vjb25kOworICAg
IHR5cGUgPSBpdC0+dmFsdWU7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yTGlieHNsdC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS94bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwCmluZGV4IDA3NmE4NTJkMDZkODM3MTAzNzYy
MjY0NWIwMTE5NDUyZWNiZTI0ZDQuLjllYTJhYTcyMTA1Y2Y3YTgwNDkzNmQzMDcxMjQ5ODhmNGM0
MjFlNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yTGlieHNs
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JMaWJ4c2x0LmNwcApA
QCAtMjI1LDggKzIyNSw4IEBAIHN0YXRpYyBjb25zdCBjaGFyKiogeHNsdFBhcmFtQXJyYXlGcm9t
UGFyYW1ldGVyTWFwKFhTTFRQcm9jZXNzb3I6OlBhcmFtZXRlck1hcCYKICAgICBYU0xUUHJvY2Vz
c29yOjpQYXJhbWV0ZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IHBhcmFtZXRlcnMuZW5kKCk7CiAgICAg
dW5zaWduZWQgaW5kZXggPSAwOwogICAgIGZvciAoWFNMVFByb2Nlc3Nvcjo6UGFyYW1ldGVyTWFw
OjppdGVyYXRvciBpdCA9IHBhcmFtZXRlcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0g
ICAgICAgIHBhcmFtZXRlckFycmF5W2luZGV4KytdID0gZmFzdFN0ckR1cChpdC0+Zmlyc3QudXRm
OCgpLmRhdGEoKSk7Ci0gICAgICAgIHBhcmFtZXRlckFycmF5W2luZGV4KytdID0gZmFzdFN0ckR1
cChpdC0+c2Vjb25kLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBwYXJhbWV0ZXJBcnJheVtpbmRl
eCsrXSA9IGZhc3RTdHJEdXAoaXQtPmtleS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgcGFyYW1l
dGVyQXJyYXlbaW5kZXgrK10gPSBmYXN0U3RyRHVwKGl0LT52YWx1ZS51dGY4KCkuZGF0YSgpKTsK
ICAgICB9CiAgICAgcGFyYW1ldGVyQXJyYXlbaW5kZXhdID0gMDsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwv
WFNMVFByb2Nlc3NvclF0LmNwcAppbmRleCBjMGFiNGQ2OTMxN2Q1YzMxYzM2Y2I0YWEwM2RiZTcw
NmMxNTNhOTk4Li5hNGM5ZDc0Y2QyYWE1YWU1YjdkM2M3OWZmMTU4MGQxNjNmNTcwOGY1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvclF0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvclF0LmNwcApAQCAtMTQzLDcgKzE0Myw3IEBAIGJv
b2wgWFNMVFByb2Nlc3Nvcjo6dHJhbnNmb3JtVG9TdHJpbmcoTm9kZSogc291cmNlTm9kZSwgU3Ry
aW5nJiwgU3RyaW5nJiByZXN1bHRTCiAKICAgICBYU0xUUHJvY2Vzc29yOjpQYXJhbWV0ZXJNYXA6
Oml0ZXJhdG9yIGVuZCA9IG1fcGFyYW1ldGVycy5lbmQoKTsKICAgICBmb3IgKFhTTFRQcm9jZXNz
b3I6OlBhcmFtZXRlck1hcDo6aXRlcmF0b3IgaXQgPSBtX3BhcmFtZXRlcnMuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KQotICAgICAgICBxdWVyeS5iaW5kVmFyaWFibGUoUVN0cmluZyhpdC0+Zmly
c3QpLCBRWG1sSXRlbShRVmFyaWFudChRU3RyaW5nKGl0LT5zZWNvbmQpKSkpOworICAgICAgICBx
dWVyeS5iaW5kVmFyaWFibGUoUVN0cmluZyhpdC0+a2V5KSwgUVhtbEl0ZW0oUVZhcmlhbnQoUVN0
cmluZyhpdC0+dmFsdWUpKSkpOwogCiAgICAgUVN0cmluZyBzb3VyY2U7CiAgICAgaWYgKHNvdXJj
ZUlzRG9jdW1lbnQgJiYgb3duZXJEb2N1bWVudC0+dHJhbnNmb3JtU291cmNlKCkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL0JhY2tpbmdTdG9yZS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL0JhY2tpbmdTdG9yZS5jcHAKaW5kZXggZGUzMjFiODVj
N2M4OTY1ZTBjZmUyYzBkNGY1Njc1ZmI0NDBlOTA4OS4uYTBmOGFhYWI2MTE3ODMyMDYyNDg3NTJl
NzE1ZjM0MDYxNWYyZDljMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0Fw
aS9CYWNraW5nU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvQmFj
a2luZ1N0b3JlLmNwcApAQCAtNzIzLDggKzcyMyw4IEBAIHZvaWQgQmFja2luZ1N0b3JlUHJpdmF0
ZTo6c2V0QmFja2luZ1N0b3JlUmVjdChjb25zdCBQbGF0Zm9ybTo6SW50UmVjdCYgYmFja2luZ1N0
CiAgICAgLy8gb3VyIG5ldyBiYWNraW5nIHN0b3JlIHJlY3QuCiAgICAgVGlsZU1hcDo6Y29uc3Rf
aXRlcmF0b3IgdGlsZU1hcEVuZCA9IGN1cnJlbnRNYXAuZW5kKCk7CiAgICAgZm9yIChUaWxlTWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IGN1cnJlbnRNYXAuYmVnaW4oKTsgaXQgIT0gdGlsZU1hcEVu
ZDsgKytpdCkgewotICAgICAgICBUaWxlSW5kZXggb2xkSW5kZXggPSBpdC0+Zmlyc3Q7Ci0gICAg
ICAgIEJhY2tpbmdTdG9yZVRpbGUqIHRpbGUgPSBpdC0+c2Vjb25kOworICAgICAgICBUaWxlSW5k
ZXggb2xkSW5kZXggPSBpdC0+a2V5OworICAgICAgICBCYWNraW5nU3RvcmVUaWxlKiB0aWxlID0g
aXQtPnZhbHVlOwogCiAgICAgICAgIC8vIFJlc2V0IHRoZSBvbGQgaW5kZXguCiAgICAgICAgIHJl
c2V0VGlsZShvbGRJbmRleCwgdGlsZSwgZmFsc2UgLypyZXNldEJhY2tncm91bmQqLyk7CkBAIC03
ODAsOCArNzgwLDggQEAgdm9pZCBCYWNraW5nU3RvcmVQcml2YXRlOjpzZXRCYWNraW5nU3RvcmVS
ZWN0KGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0JiBiYWNraW5nU3QKICAgICBzaXplX3QgaSA9IDA7
CiAgICAgVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgbGVmdE92ZXJFbmQgPSBsZWZ0T3ZlclRpbGVz
LmVuZCgpOwogICAgIGZvciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsZWZ0T3ZlclRp
bGVzLmJlZ2luKCk7IGl0ICE9IGxlZnRPdmVyRW5kOyArK2l0KSB7Ci0gICAgICAgIFRpbGVJbmRl
eCBvbGRJbmRleCA9IGl0LT5maXJzdDsKLSAgICAgICAgQmFja2luZ1N0b3JlVGlsZSogdGlsZSA9
IGl0LT5zZWNvbmQ7CisgICAgICAgIFRpbGVJbmRleCBvbGRJbmRleCA9IGl0LT5rZXk7CisgICAg
ICAgIEJhY2tpbmdTdG9yZVRpbGUqIHRpbGUgPSBpdC0+dmFsdWU7CiAgICAgICAgIGlmIChpID49
IGluZGV4ZXNUb0ZpbGwuc2l6ZSgpKSB7CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTY2Nyw3ICsxNjY3LDcgQEAgUGxhdGZvcm06Oklu
dFJlY3QgQmFja2luZ1N0b3JlUHJpdmF0ZTo6dmlzaWJsZVRpbGVzUmVjdCgpIGNvbnN0CiAgICAg
VGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY3VycmVudE1hcC5lbmQoKTsKICAgICBmb3Ig
KFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY3VycmVudE1hcC5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKICAgICAgICAgVGlsZVJlY3QgdGlsZVJlY3Q7Ci0gICAgICAgIHRpbGVSZWN0
LmZpcnN0ID0gaXQtPmZpcnN0OworICAgICAgICB0aWxlUmVjdC5maXJzdCA9IGl0LT5rZXk7CiAg
ICAgICAgIHRpbGVSZWN0LnNlY29uZCA9IHRoaXMtPnRpbGVSZWN0KCk7CiAgICAgICAgIFBsYXRm
b3JtOjpJbnRSZWN0IHRpbGUgPSBtYXBGcm9tVGlsZXNUb1RyYW5zZm9ybWVkQ29udGVudHModGls
ZVJlY3QpOwogICAgICAgICBpZiAodGlsZS5pbnRlcnNlY3RzKHZpc2libGVDb250ZW50c1JlY3Qo
KSkpCkBAIC0xNzI4LDcgKzE3MjgsNyBAQCB2b2lkIEJhY2tpbmdTdG9yZVByaXZhdGU6OnJlc2V0
VGlsZXMoYm9vbCByZXNldEJhY2tncm91bmQpCiAKICAgICBUaWxlTWFwOjpjb25zdF9pdGVyYXRv
ciBlbmQgPSBjdXJyZW50TWFwLmVuZCgpOwogICAgIGZvciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBjdXJyZW50TWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgcmVz
ZXRUaWxlKGl0LT5maXJzdCwgaXQtPnNlY29uZCwgcmVzZXRCYWNrZ3JvdW5kKTsKKyAgICAgICAg
cmVzZXRUaWxlKGl0LT5rZXksIGl0LT52YWx1ZSwgcmVzZXRCYWNrZ3JvdW5kKTsKIH0KIAogdm9p
ZCBCYWNraW5nU3RvcmVQcml2YXRlOjp1cGRhdGVUaWxlcyhib29sIHVwZGF0ZVZpc2libGUsIGJv
b2wgaW1tZWRpYXRlKQpAQCAtMTc0MSwxMCArMTc0MSwxMCBAQCB2b2lkIEJhY2tpbmdTdG9yZVBy
aXZhdGU6OnVwZGF0ZVRpbGVzKGJvb2wgdXBkYXRlVmlzaWJsZSwgYm9vbCBpbW1lZGlhdGUpCiAK
ICAgICBUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBjdXJyZW50TWFwLmVuZCgpOwogICAg
IGZvciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjdXJyZW50TWFwLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgewotICAgICAgICBib29sIGlzVmlzaWJsZSA9IGlzVGlsZVZpc2libGUo
aXQtPmZpcnN0KTsKKyAgICAgICAgYm9vbCBpc1Zpc2libGUgPSBpc1RpbGVWaXNpYmxlKGl0LT5r
ZXkpOwogICAgICAgICBpZiAoIXVwZGF0ZVZpc2libGUgJiYgaXNWaXNpYmxlKQogICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgIHVwZGF0ZVRpbGUoaXQtPmZpcnN0LCBpbW1lZGlhdGUpOwor
ICAgICAgICB1cGRhdGVUaWxlKGl0LT5rZXksIGltbWVkaWF0ZSk7CiAgICAgfQogfQogCkBAIC0x
NzY1LDggKzE3NjUsOCBAQCB2b2lkIEJhY2tpbmdTdG9yZVByaXZhdGU6OnVwZGF0ZVRpbGVzRm9y
U2Nyb2xsT3JOb3RSZW5kZXJlZFJlZ2lvbihib29sIGNoZWNrTG9hZAogCiAgICAgVGlsZU1hcDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gY3VycmVudE1hcC5lbmQoKTsKICAgICBmb3IgKFRpbGVNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY3VycmVudE1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKLSAgICAgICAgVGlsZUluZGV4IGluZGV4ID0gaXQtPmZpcnN0OwotICAgICAgICBCYWNraW5n
U3RvcmVUaWxlKiB0aWxlID0gaXQtPnNlY29uZDsKKyAgICAgICAgVGlsZUluZGV4IGluZGV4ID0g
aXQtPmtleTsKKyAgICAgICAgQmFja2luZ1N0b3JlVGlsZSogdGlsZSA9IGl0LT52YWx1ZTsKICAg
ICAgICAgYm9vbCBpc1Zpc2libGUgPSBpc1RpbGVWaXNpYmxlKGluZGV4KTsKICAgICAgICAgLy8g
VGhlIHJlY3QgaW4gdHJhbnNmb3JtZWQgY29udGVudHMgY29vcmRpbmF0ZXMuCiAgICAgICAgIFBs
YXRmb3JtOjpJbnRSZWN0IHJlY3Qob3JpZ2luT2ZUaWxlKGluZGV4KSwgdGlsZVNpemUoKSk7CkBA
IC0xOTA5LDggKzE5MDksOCBAQCBCYWNraW5nU3RvcmVQcml2YXRlOjpUaWxlUmVjdExpc3QgQmFj
a2luZ1N0b3JlUHJpdmF0ZTo6bWFwRnJvbVRyYW5zZm9ybWVkQ29udGVudAogICAgIFRpbGVSZWN0
TGlzdCB0aWxlUmVjdExpc3Q7CiAgICAgVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gdGls
ZU1hcC5lbmQoKTsKICAgICBmb3IgKFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdGlsZU1h
cC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgVGlsZUluZGV4IGluZGV4ID0g
aXQtPmZpcnN0OwotICAgICAgICBCYWNraW5nU3RvcmVUaWxlKiB0aWxlID0gaXQtPnNlY29uZDsK
KyAgICAgICAgVGlsZUluZGV4IGluZGV4ID0gaXQtPmtleTsKKyAgICAgICAgQmFja2luZ1N0b3Jl
VGlsZSogdGlsZSA9IGl0LT52YWx1ZTsKIAogICAgICAgICAvLyBOZWVkIHRvIG1hcCB0aGUgcmVj
dCB0byB0aWxlIGNvb3JkaW5hdGVzLgogICAgICAgICBQbGF0Zm9ybTo6SW50UmVjdCByID0gcmVj
dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9G
cmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnkuY3BwIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5
L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50QmxhY2tCZXJyeS5jcHAKaW5kZXggNjQ1
Zjk1MTVjOTExNzEyNjJiMzZiNmI3MGEzNmM5NTg1YzNmNGZlNy4uZjJlYTg2YTZjNWU0MGRmN2Ex
ODY3NmNiYzcwZDA2MWQ2Njk1OWQ1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ibGFja2Jl
cnJ5L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50QmxhY2tCZXJyeS5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50
QmxhY2tCZXJyeS5jcHAKQEAgLTkzNyw4ICs5MzcsOCBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50
QmxhY2tCZXJyeTo6ZGlzcGF0Y2hXaWxsU2VuZFJlcXVlc3QoRG9jdW1lbnRMb2FkZXIqIGRvY0xv
YQogICAgIG1fd2ViUGFnZVByaXZhdGUtPm1fY2xpZW50LT5wb3B1bGF0ZUN1c3RvbUhlYWRlcnMo
cGxhdGZvcm1SZXF1ZXN0KTsKICAgICBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TmV0d29y
a1JlcXVlc3Q6OkhlYWRlckxpc3QmIGhlYWRlckxpc3RzID0gcGxhdGZvcm1SZXF1ZXN0LmdldEhl
YWRlckxpc3RSZWYoKTsKICAgICBmb3IgKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpOZXR3b3JrUmVx
dWVzdDo6SGVhZGVyTGlzdDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBoZWFkZXJMaXN0cy5iZWdpbigp
OyBpdCAhPSBoZWFkZXJMaXN0cy5lbmQoKTsgKytpdCkgewotICAgICAgICBzdGQ6OnN0cmluZyBo
ZWFkZXJTdHJpbmcgPSBpdC0+Zmlyc3Q7Ci0gICAgICAgIHN0ZDo6c3RyaW5nIGhlYWRlclZhbHVl
U3RyaW5nID0gaXQtPnNlY29uZDsKKyAgICAgICAgc3RkOjpzdHJpbmcgaGVhZGVyU3RyaW5nID0g
aXQtPmtleTsKKyAgICAgICAgc3RkOjpzdHJpbmcgaGVhZGVyVmFsdWVTdHJpbmcgPSBpdC0+dmFs
dWU7CiAgICAgICAgIHJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKFN0cmluZzo6ZnJvbVVURjhX
aXRoTGF0aW4xRmFsbGJhY2soaGVhZGVyU3RyaW5nLmRhdGEoKSwgaGVhZGVyU3RyaW5nLmxlbmd0
aCgpKSwgU3RyaW5nOjpmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayhoZWFkZXJWYWx1ZVN0cmlu
Zy5kYXRhKCksIGhlYWRlclZhbHVlU3RyaW5nLmxlbmd0aCgpKSk7CiAgICAgfQogICAgIGlmICgh
aXNNYWluUmVzb3VyY2VMb2FkKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVy
cnkvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uUHJlc2VudGVySW1w
bC5jcHAKaW5kZXggNmIyOTIxMDI5NDYyNzdkYTI4ZTc5OGQ3ZWVkZjhiOTM5YzUzMTljNy4uNDhj
Y2YzYWM1MWFiZGUzNjVhYjAyNzU5ZDFkYWRjNDE2ZmMwMGY1NyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlcklt
cGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9Ob3Rp
ZmljYXRpb25QcmVzZW50ZXJJbXBsLmNwcApAQCAtODEsNyArODEsNyBAQCB2b2lkIE5vdGlmaWNh
dGlvblByZXNlbnRlckltcGw6OmNhbmNlbChOb3RpZmljYXRpb24qIG5vdGlmaWNhdGlvbikKICAg
ICBpZiAoaXQgPT0gbV9ub3RpZmljYXRpb25zLmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBtX3BsYXRmb3JtUHJlc2VudGVyLT5jYW5jZWwoc3RkOjpzdHJpbmcoaXQtPnNlY29uZC51dGY4
KCkuZGF0YSgpKSk7CisgICAgbV9wbGF0Zm9ybVByZXNlbnRlci0+Y2FuY2VsKHN0ZDo6c3RyaW5n
KGl0LT52YWx1ZS51dGY4KCkuZGF0YSgpKSk7CiAgICAgbV9ub3RpZmljYXRpb25zLnJlbW92ZShp
dCk7CiB9CiAKQEAgLTEwOCwxMiArMTA4LDEyIEBAIHZvaWQgTm90aWZpY2F0aW9uUHJlc2VudGVy
SW1wbDo6b25QZXJtaXNzaW9uKGNvbnN0IHN0ZDo6c3RyaW5nJiBkb21haW4sIGJvb2wgaXNBCiAg
ICAgU3RyaW5nIGRvbWFpblN0cmluZyA9IFN0cmluZzo6ZnJvbVVURjgoZG9tYWluLmNfc3RyKCkp
OwogICAgIFBlcm1pc3Npb25SZXF1ZXN0TWFwOjppdGVyYXRvciBpdCA9IG1fcGVybWlzc2lvblJl
cXVlc3RzLmJlZ2luKCk7CiAgICAgZm9yICg7IGl0ICE9IG1fcGVybWlzc2lvblJlcXVlc3RzLmVu
ZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+Zmlyc3QtPnVybCgpLmhvc3QoKSAhPSBkb21h
aW5TdHJpbmcpCisgICAgICAgIGlmIChpdC0+a2V5LT51cmwoKS5ob3N0KCkgIT0gZG9tYWluU3Ry
aW5nKQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgaWYgKGlzQWxsb3dlZCkgewog
ICAgICAgICAgICAgbV9hbGxvd2VkRG9tYWlucy5hZGQoZG9tYWluU3RyaW5nKTsKLSAgICAgICAg
ICAgIGl0LT5zZWNvbmQtPmhhbmRsZUV2ZW50KCk7CisgICAgICAgICAgICBpdC0+dmFsdWUtPmhh
bmRsZUV2ZW50KCk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbV9hbGxvd2VkRG9tYWlu
cy5yZW1vdmUoZG9tYWluU3RyaW5nKTsKIApAQCAtMTQ0LDkgKzE0NCw5IEBAIHZvaWQgTm90aWZp
Y2F0aW9uUHJlc2VudGVySW1wbDo6bm90aWZpY2F0aW9uQ2xpY2tlZChjb25zdCBzdGQ6OnN0cmlu
ZyYgaWQpCiAgICAgU3RyaW5nIGlkU3RyaW5nID0gU3RyaW5nOjpmcm9tVVRGOChpZC5jX3N0cigp
KTsKICAgICBOb3RpZmljYXRpb25NYXA6Oml0ZXJhdG9yIGl0ID0gbV9ub3RpZmljYXRpb25zLmJl
Z2luKCk7CiAgICAgZm9yICg7IGl0ICE9IG1fbm90aWZpY2F0aW9ucy5lbmQoKTsgKytpdCkgewot
ICAgICAgICBpZiAoaXQtPnNlY29uZCA9PSBpZFN0cmluZyAmJiBpdC0+Zmlyc3QtPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSkgewotICAgICAgICAgICAgUmVmUHRyPE5vdGlmaWNhdGlvbj4gbm90
aWZpY2F0aW9uID0gaXQtPmZpcnN0OwotICAgICAgICAgICAgaXQtPmZpcnN0LT5kaXNwYXRjaEV2
ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmNsaWNrRXZlbnQsIGZhbHNlLCB0cnVlKSk7
CisgICAgICAgIGlmIChpdC0+dmFsdWUgPT0gaWRTdHJpbmcgJiYgaXQtPmtleS0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpKSB7CisgICAgICAgICAgICBSZWZQdHI8Tm90aWZpY2F0aW9uPiBub3Rp
ZmljYXRpb24gPSBpdC0+a2V5OworICAgICAgICAgICAgaXQtPmtleS0+ZGlzcGF0Y2hFdmVudChF
dmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50LCBmYWxzZSwgdHJ1ZSkpOwogICAg
ICAgICAgICAgbV9ub3RpZmljYXRpb25zLnJlbW92ZShub3RpZmljYXRpb24pOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVy
cnkvV2ViS2l0U3VwcG9ydC9GYXRGaW5nZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJy
eS9XZWJLaXRTdXBwb3J0L0ZhdEZpbmdlcnMuY3BwCmluZGV4IGI0OWUyNDg1Y2Q3MzE5NGNjMGQ1
ZjVjZDg5ZGYzODAzMDg3ZGU0NzYuLmU4MmMwMjZhNzllYWU3N2Q0NzZlODJhMGY3MzhhMTZjOWFl
ODg0ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0
L0ZhdEZpbmdlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBw
b3J0L0ZhdEZpbmdlcnMuY3BwCkBAIC0yMjksOCArMjI5LDggQEAgY29uc3QgRmF0RmluZ2Vyc1Jl
c3VsdCBGYXRGaW5nZXJzOjpmaW5kQmVzdFBvaW50KCkKIAogICAgIFZlY3RvcjxJbnRlcnNlY3Rp
bmdSZWdpb24+Ojpjb25zdF9pdGVyYXRvciBlbmRJdCA9IGludGVyc2VjdGluZ1JlZ2lvbnMuZW5k
KCk7CiAgICAgZm9yIChWZWN0b3I8SW50ZXJzZWN0aW5nUmVnaW9uPjo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBpbnRlcnNlY3RpbmdSZWdpb25zLmJlZ2luKCk7IGl0ICE9IGVuZEl0OyArK2l0KSB7Ci0g
ICAgICAgIE5vZGUqIGN1cnJlbnROb2RlID0gaXQtPmZpcnN0OwotICAgICAgICBQbGF0Zm9ybTo6
SW50UmVjdFJlZ2lvbiBjdXJyZW50SW50ZXJzZWN0aW9uUmVnaW9uID0gaXQtPnNlY29uZDsKKyAg
ICAgICAgTm9kZSogY3VycmVudE5vZGUgPSBpdC0+a2V5OworICAgICAgICBQbGF0Zm9ybTo6SW50
UmVjdFJlZ2lvbiBjdXJyZW50SW50ZXJzZWN0aW9uUmVnaW9uID0gaXQtPnZhbHVlOwogCiAgICAg
ICAgIGludCBjdXJyZW50SW50ZXJzZWN0aW9uUmVnaW9uQXJlYSA9IGN1cnJlbnRJbnRlcnNlY3Rp
b25SZWdpb24uYXJlYSgpOwogICAgICAgICBpZiAoY3VycmVudEludGVyc2VjdGlvblJlZ2lvbkFy
ZWEgPiBsYXJnZXN0SW50ZXJzZWN0aW9uUmVnaW9uQXJlYQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvRnJhbWVMYXllcnMuY3BwIGIvU291cmNlL1dl
YktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvRnJhbWVMYXllcnMuY3BwCmluZGV4IGI4NzU2
NDZkYTRmOWFjOTYyZGMzMjkwYTQ2Mjk3MWUyNmJjZDQ0OTEuLjg3ZDdiNWIwYjM4YmI2MGE5ZGZm
ODcxMWNkN2ViMzM5NGQ5YjUwNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJy
eS9XZWJLaXRTdXBwb3J0L0ZyYW1lTGF5ZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNr
YmVycnkvV2ViS2l0U3VwcG9ydC9GcmFtZUxheWVycy5jcHAKQEAgLTkxLDcgKzkxLDcgQEAgdm9p
ZCBGcmFtZUxheWVyczo6cmVtb3ZlTGF5ZXJCeUZyYW1lKEZyYW1lKiBmcmFtZSkKICAgICBBU1NF
UlQoZnJhbWUpOwogICAgIEZyYW1lTGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9mcmFtZUxheWVy
cy5maW5kKGZyYW1lKTsKICAgICBpZiAoaXQgIT0gbV9mcmFtZUxheWVycy5lbmQoKSkgewotICAg
ICAgICBMYXllcldlYktpdFRocmVhZCogbGF5ZXIgPSBpdC0+c2Vjb25kOworICAgICAgICBMYXll
cldlYktpdFRocmVhZCogbGF5ZXIgPSBpdC0+dmFsdWU7CiAgICAgICAgIGlmIChsYXllci0+c3Vw
ZXJsYXllcigpKQogICAgICAgICAgICAgbGF5ZXItPnJlbW92ZUZyb21TdXBlcmxheWVyKCk7CiAg
ICAgICAgIG1fZnJhbWVMYXllcnMucmVtb3ZlKGl0KTsKQEAgLTEwNCw3ICsxMDQsNyBAQCB2b2lk
IEZyYW1lTGF5ZXJzOjpjb21taXRPbldlYktpdFRocmVhZChkb3VibGUgc2NhbGUpCiAgICAgQVNT
RVJUKG1fcm9vdExheWVyKTsKICAgICBpZiAoIWlzUm9vdExheWVyTWFpbkZyYW1lTGF5ZXIoKSkg
ewogICAgICAgICBmb3IgKEZyYW1lTGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9mcmFtZUxheWVy
cy5iZWdpbigpOyBpdCAhPSBtX2ZyYW1lTGF5ZXJzLmVuZCgpOyArK2l0KQotICAgICAgICAgICAg
aXQtPnNlY29uZC0+c2V0QWJzb2x1dGVPZmZzZXQoZnJhbWVMYXllckFic29sdXRlT2Zmc2V0KGl0
LT5maXJzdCkpOworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRBYnNvbHV0ZU9mZnNldChmcmFt
ZUxheWVyQWJzb2x1dGVPZmZzZXQoaXQtPmtleSkpOwogICAgIH0KICAgICBtX3Jvb3RMYXllci0+
Y29tbWl0T25XZWJLaXRUaHJlYWQoc2NhbGUpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuY3Bw
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVx
dWVzdE1hbmFnZXIuY3BwCmluZGV4IDRjMGVkOWNkNzE3YjZmNGQ1YWE2YWZhZjk3MGJlYjY5Njc5
Njg5ZDMuLjFlZWFjNjY3YmRmNjZiM2YxOTNmYjMzNWEzODcxMjhmYmM5MTI2NzQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdlb2xvY2F0aW9uUGVybWlzc2lvblJl
cXVlc3RNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHZW9s
b2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5jcHAKQEAgLTY0LDcgKzY0LDcgQEAgYm9v
bCBXZWJHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlcjo6cmVtb3ZlKGNvbnN0IFdl
YktpdDo6V2ViR2VvbG9jYXRpb24KICAgICBHZW9sb2NhdGlvbklkTWFwOjppdGVyYXRvciBpdCA9
IG1fcHJpdmF0ZS0+bV9nZW9sb2NhdGlvbklkTWFwLmZpbmQoZ2VvbG9jYXRpb24pOwogICAgIGlm
IChpdCA9PSBtX3ByaXZhdGUtPm1fZ2VvbG9jYXRpb25JZE1hcC5lbmQoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIGlkID0gaXQtPnNlY29uZDsKKyAgICBpZCA9IGl0LT52YWx1ZTsKICAg
ICBtX3ByaXZhdGUtPm1fZ2VvbG9jYXRpb25JZE1hcC5yZW1vdmUoaXQpOwogICAgIG1fcHJpdmF0
ZS0+bV9pZEdlb2xvY2F0aW9uTWFwLnJlbW92ZShpZCk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC03
NSw3ICs3NSw3IEBAIGJvb2wgV2ViR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXI6
OnJlbW92ZShpbnQgaWQsIFdlYktpdDo6V2ViR2VvbG9jYXRpCiAgICAgSWRHZW9sb2NhdGlvbk1h
cDo6aXRlcmF0b3IgaXQgPSBtX3ByaXZhdGUtPm1faWRHZW9sb2NhdGlvbk1hcC5maW5kKGlkKTsK
ICAgICBpZiAoaXQgPT0gbV9wcml2YXRlLT5tX2lkR2VvbG9jYXRpb25NYXAuZW5kKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBHZW9sb2NhdGlvbiogZ2VvbG9jYXRpb24gPSBpdC0+c2Vj
b25kOworICAgIEdlb2xvY2F0aW9uKiBnZW9sb2NhdGlvbiA9IGl0LT52YWx1ZTsKICAgICBwZXJt
aXNzaW9uUmVxdWVzdCA9IFdlYkdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3QoZ2VvbG9jYXRp
b24pOwogICAgIG1fcHJpdmF0ZS0+bV9pZEdlb2xvY2F0aW9uTWFwLnJlbW92ZShpdCk7CiAgICAg
bV9wcml2YXRlLT5tX2dlb2xvY2F0aW9uSWRNYXAucmVtb3ZlKGdlb2xvY2F0aW9uKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViU29ja2V0RXh0ZW5zaW9uRGlz
cGF0Y2hlclRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJTb2NrZXRF
eHRlbnNpb25EaXNwYXRjaGVyVGVzdC5jcHAKaW5kZXggMzU4OTgzYjgzOTkzMTRjZGEwMzdjOGMw
MzI0OWVlOWI2NzJlOTY3Yi4uMjQ1MTRjZDU4ZmJmZDAwYWFhODg3MjQyYTFhYzM2MzMxY2FlYjc4
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJTb2NrZXRFeHRl
bnNpb25EaXNwYXRjaGVyVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9XZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyVGVzdC5jcHAKQEAgLTEwMywxMCArMTAzLDEw
IEBAIFRFU1RfRihXZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyVGVzdCwgVGVzdFBhcmFtZXRl
cnMpCiAgICAgRVhQRUNUX0VRKDIsIG1fcGFyc2VkUGFyYW1ldGVyc1swXS5zaXplKCkpOwogICAg
IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+OjppdGVyYXRvciBwYXJhbWV0ZXIgPSBtX3BhcnNlZFBh
cmFtZXRlcnNbMF0uZmluZCgibWF4LWNoYW5uZWxzIik7CiAgICAgRVhQRUNUX1RSVUUocGFyYW1l
dGVyICE9IG1fcGFyc2VkUGFyYW1ldGVyc1swXS5lbmQoKSk7Ci0gICAgRVhQRUNUX0VRKCI0Iiwg
cGFyYW1ldGVyLT5zZWNvbmQpOworICAgIEVYUEVDVF9FUSgiNCIsIHBhcmFtZXRlci0+dmFsdWUp
OwogICAgIHBhcmFtZXRlciA9IG1fcGFyc2VkUGFyYW1ldGVyc1swXS5maW5kKCJmbG93LWNvbnRy
b2wiKTsKICAgICBFWFBFQ1RfVFJVRShwYXJhbWV0ZXIgIT0gbV9wYXJzZWRQYXJhbWV0ZXJzWzBd
LmVuZCgpKTsKLSAgICBFWFBFQ1RfVFJVRShwYXJhbWV0ZXItPnNlY29uZC5pc051bGwoKSk7Cisg
ICAgRVhQRUNUX1RSVUUocGFyYW1ldGVyLT52YWx1ZS5pc051bGwoKSk7CiB9CiAKIFRFU1RfRihX
ZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyVGVzdCwgVGVzdE11bHRpcGxlKQpAQCAtMTMxLDEy
ICsxMzEsMTIgQEAgVEVTVF9GKFdlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXJUZXN0LCBUZXN0
TXVsdGlwbGUpCiAgICAgICAgIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBwYXJzZWRQ
YXJhbWV0ZXJzID0gbV9wYXJzZWRQYXJhbWV0ZXJzW2ldOwogICAgICAgICBFWFBFQ1RfRVEoZXhw
ZWN0ZWRbaV0ucGFyYW1ldGVycy5zaXplKCksIG1fcGFyc2VkUGFyYW1ldGVyc1tpXS5zaXplKCkp
OwogICAgICAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBp
dGVyYXRvciA9IGV4cGVjdGVkUGFyYW1ldGVycy5iZWdpbigpOyBpdGVyYXRvciAhPSBleHBlY3Rl
ZFBhcmFtZXRlcnMuZW5kKCk7ICsraXRlcmF0b3IpIHsKLSAgICAgICAgICAgIEhhc2hNYXA8U3Ry
aW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBwYXJzZWQgPSBwYXJzZWRQYXJhbWV0ZXJzLmZp
bmQoaXRlcmF0b3ItPmZpcnN0KTsKKyAgICAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+
Ojpjb25zdF9pdGVyYXRvciBwYXJzZWQgPSBwYXJzZWRQYXJhbWV0ZXJzLmZpbmQoaXRlcmF0b3It
PmtleSk7CiAgICAgICAgICAgICBFWFBFQ1RfVFJVRShwYXJzZWQgIT0gcGFyc2VkUGFyYW1ldGVy
cy5lbmQoKSk7Ci0gICAgICAgICAgICBpZiAoaXRlcmF0b3ItPnNlY29uZC5pc051bGwoKSkKLSAg
ICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShwYXJzZWQtPnNlY29uZC5pc051bGwoKSk7CisgICAg
ICAgICAgICBpZiAoaXRlcmF0b3ItPnZhbHVlLmlzTnVsbCgpKQorICAgICAgICAgICAgICAgIEVY
UEVDVF9UUlVFKHBhcnNlZC0+dmFsdWUuaXNOdWxsKCkpOwogICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIEVYUEVDVF9FUShpdGVyYXRvci0+c2Vjb25kLCBwYXJzZWQtPnNlY29uZCk7
CisgICAgICAgICAgICAgICAgRVhQRUNUX0VRKGl0ZXJhdG9yLT52YWx1ZSwgcGFyc2VkLT52YWx1
ZSk7CiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9X
ZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNHdGsuY3BwIGIvU291cmNlL1dlYktpdC9n
dGsvV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzR3RrLmNwcAppbmRleCAyOTIxNzNh
ZTI5MmY1MTIxMTg3ZThiZTUwNTAzOTNkN2MzMzg0YzVhLi45MTAzYzg0NjA5NGQ1MWY4ZjViOTQ4
NzRjZDY3YWYwNDc5OTA5YWUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3Jl
U3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3Rr
L1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc0d0ay5jcHAKQEAgLTg4LDggKzg4LDgg
QEAgdm9pZCBQbGF0Zm9ybVN0cmF0ZWdpZXNHdGs6OmdldFBsdWdpbkluZm8oY29uc3QgUGFnZSog
cGFnZSwgVmVjdG9yPFBsdWdpbkluZm8+JgogICAgICAgICBNSU1FVG9EZXNjcmlwdGlvbnNNYXA6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5lbmQoKTsKICAgICAgICAg
Zm9yIChNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWltZVRvRGVz
Y3JpcHRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgTWltZUNs
YXNzSW5mbyBtaW1lOwotICAgICAgICAgICAgbWltZS50eXBlID0gaXQtPmZpcnN0OwotICAgICAg
ICAgICAgbWltZS5kZXNjID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIG1pbWUudHlwZSA9IGl0
LT5rZXk7CisgICAgICAgICAgICBtaW1lLmRlc2MgPSBpdC0+dmFsdWU7CiAgICAgICAgICAgICBt
aW1lLmV4dGVuc2lvbnMgPSBwYWNrYWdlLT5taW1lVG9FeHRlbnNpb25zKCkuZ2V0KG1pbWUudHlw
ZSk7CiAgICAgICAgICAgICBwbHVnaW5JbmZvLm1pbWVzLmFwcGVuZChtaW1lKTsKICAgICAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGZhdmljb25kYXRh
YmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZmF2aWNvbmRhdGFiYXNl
LmNwcAppbmRleCBhMWZkMzdhMWUzMWRlZTg4MmZmNGNiOGNmNmM2ZjMwOTRiMWM1NjFkLi4wMDZh
YjJiN2YzNDFhZTZhNDBjMmMwMjJjNWMwY2M1NzRjN2VmNjQwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZmF2aWNvbmRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZmF2aWNvbmRhdGFiYXNlLmNwcApAQCAtNjExLDE4ICs2
MTEsMTggQEAgc3RhdGljIHZvaWQgd2Via2l0RmF2aWNvbkRhdGFiYXNlSW1wb3J0RmluaXNoZWQo
V2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSkKICAgICBWZWN0b3I8U3RyaW5nPiB0b0Rl
bGV0ZVVSTHM7CiAgICAgUGVuZGluZ0ljb25SZXF1ZXN0TWFwOjpjb25zdF9pdGVyYXRvciBlbmQg
PSBkYXRhYmFzZS0+cHJpdi0+cGVuZGluZ0ljb25SZXF1ZXN0cy5lbmQoKTsKICAgICBmb3IgKFBl
bmRpbmdJY29uUmVxdWVzdE1hcDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGRhdGFiYXNlLT5wcml2
LT5wZW5kaW5nSWNvblJlcXVlc3RzLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKLSAg
ICAgICAgU3RyaW5nIGljb25VUkwgPSBpY29uRGF0YWJhc2UoKS5zeW5jaHJvbm91c0ljb25VUkxG
b3JQYWdlVVJMKGl0ZXItPmZpcnN0KTsKKyAgICAgICAgU3RyaW5nIGljb25VUkwgPSBpY29uRGF0
YWJhc2UoKS5zeW5jaHJvbm91c0ljb25VUkxGb3JQYWdlVVJMKGl0ZXItPmtleSk7CiAgICAgICAg
IGlmICghaWNvblVSTC5pc0VtcHR5KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAg
ICBQZW5kaW5nSWNvblJlcXVlc3RWZWN0b3IqIGljb25zID0gaXRlci0+c2Vjb25kOworICAgICAg
ICBQZW5kaW5nSWNvblJlcXVlc3RWZWN0b3IqIGljb25zID0gaXRlci0+dmFsdWU7CiAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaWNvbnMtPnNpemUoKTsgKytpKSB7CiAgICAgICAgICAg
ICBQZW5kaW5nSWNvblJlcXVlc3QqIHJlcXVlc3QgPSBpY29ucy0+YXQoaSkuZ2V0KCk7CiAgICAg
ICAgICAgICBpZiAocmVxdWVzdC0+YXN5bmNSZXN1bHQoKSkKICAgICAgICAgICAgICAgICByZXF1
ZXN0LT5hc3luY1Jlc3VsdENvbXBsZXRlKDApOwogICAgICAgICB9CiAKLSAgICAgICAgdG9EZWxl
dGVVUkxzLmFwcGVuZChpdGVyLT5maXJzdCk7CisgICAgICAgIHRvRGVsZXRlVVJMcy5hcHBlbmQo
aXRlci0+a2V5KTsKICAgICB9CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRvRGVsZXRl
VVJMcy5zaXplKCk7ICsraSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXR3ZWJwbHVnaW4uY3BwIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnBs
dWdpbi5jcHAKaW5kZXggZTAzYjFlYTZkYTMzYjdlMmYwMDIyNTVjZTg3Nzc4NjI0Y2RhNzA4Yy4u
MDFkMGJiNWYyYmZkNzAwZjZiM2M5ZmM0ZjhlNDIwYzU3MjQ4NmVjMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnBsdWdpbi5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnBsdWdpbi5jcHAKQEAgLTIzNywxMCArMjM3LDEwIEBA
IEdTTGlzdCogd2Via2l0X3dlYl9wbHVnaW5fZ2V0X21pbWV0eXBlcyhXZWJLaXRXZWJQbHVnaW4q
IHBsdWdpbikKIAogICAgIGZvciAoTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAg
ICAgICAgV2ViS2l0V2ViUGx1Z2luTUlNRVR5cGUqIG1pbWVUeXBlID0gZ19zbGljZV9uZXcwKFdl
YktpdFdlYlBsdWdpbk1JTUVUeXBlKTsKLSAgICAgICAgbWltZVR5cGUtPm5hbWUgPSBnX3N0cmR1
cChpdC0+Zmlyc3QudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIG1pbWVUeXBlLT5kZXNjcmlwdGlv
biA9IGdfc3RyZHVwKGl0LT5zZWNvbmQudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIG1pbWVUeXBl
LT5uYW1lID0gZ19zdHJkdXAoaXQtPmtleS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgbWltZVR5
cGUtPmRlc2NyaXB0aW9uID0gZ19zdHJkdXAoaXQtPnZhbHVlLnV0ZjgoKS5kYXRhKCkpOwogCi0g
ICAgICAgIFZlY3RvcjxTdHJpbmc+IGV4dGVuc2lvbnMgPSBwcml2LT5jb3JlUGx1Z2luLT5taW1l
VG9FeHRlbnNpb25zKCkuZ2V0KGl0LT5maXJzdCk7CisgICAgICAgIFZlY3RvcjxTdHJpbmc+IGV4
dGVuc2lvbnMgPSBwcml2LT5jb3JlUGx1Z2luLT5taW1lVG9FeHRlbnNpb25zKCkuZ2V0KGl0LT5r
ZXkpOwogICAgICAgICBtaW1lVHlwZS0+ZXh0ZW5zaW9ucyA9IHN0YXRpY19jYXN0PGdjaGFyKio+
KGdfbWFsbG9jMChzaXplb2YoY2hhciopICogKGV4dGVuc2lvbnMuc2l6ZSgpICsgMSkpKTsKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4dGVuc2lvbnMuc2l6ZSgpOyBpKyspCiAg
ICAgICAgICAgICBtaW1lVHlwZS0+ZXh0ZW5zaW9uc1tpXSA9IGdfc3RyZHVwKGV4dGVuc2lvbnNb
aV0udXRmOCgpLmRhdGEoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9IaXN0b3J5
L1dlYkhpc3RvcnkubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9IaXN0b3J5L1dlYkhpc3RvcnkubW0K
aW5kZXggNjk2NGZjOTQ5YjUxMjE3M2E2YmRjNWU3MGI1NjE4ZDMxY2I2NzdhMy4uZTc4MWQzMmZk
MWRlOTUwZDkxNGFmNDgzNDk3NjQyMGRmNTg3ZGFmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9tYWMvSGlzdG9yeS9XZWJIaXN0b3J5Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL0hpc3Rv
cnkvV2ViSGlzdG9yeS5tbQpAQCAtMjM4LDcgKzIzOCw3IEBAIHN0YXRpYyBpbmxpbmUgV2ViSGlz
dG9yeURhdGVLZXkgZGF0ZUtleShOU1RpbWVJbnRlcnZhbCBkYXRlKQogICAgICAgICByZXR1cm4g
Tk87CiAKICAgICBEYXRlVG9FbnRyaWVzTWFwOjppdGVyYXRvciBpdCA9IF9lbnRyaWVzQnlEYXRl
LT5maW5kKGRhdGVLZXkpOwotICAgIE5TTXV0YWJsZUFycmF5ICplbnRyaWVzRm9yRGF0ZSA9IGl0
LT5zZWNvbmQuZ2V0KCk7CisgICAgTlNNdXRhYmxlQXJyYXkgKmVudHJpZXNGb3JEYXRlID0gaXQt
PnZhbHVlLmdldCgpOwogICAgIFtlbnRyaWVzRm9yRGF0ZSByZW1vdmVPYmplY3RJZGVudGljYWxU
bzplbnRyeV07CiAgICAgCiAgICAgLy8gcmVtb3ZlIHRoaXMgZGF0ZSBlbnRpcmVseSBpZiB0aGVy
ZSBhcmUgbm8gb3RoZXIgZW50cmllcyBvbiBpdApAQCAtNDQwLDcgKzQ0MCw3IEBAIHN0YXRpYyBp
bmxpbmUgV2ViSGlzdG9yeURhdGVLZXkgZGF0ZUtleShOU1RpbWVJbnRlcnZhbCBkYXRlKQogICAg
ICAgICBkYXlzQXNUaW1lSW50ZXJ2YWxzLnJlc2VydmVDYXBhY2l0eShfZW50cmllc0J5RGF0ZS0+
c2l6ZSgpKTsKICAgICAgICAgRGF0ZVRvRW50cmllc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
X2VudHJpZXNCeURhdGUtPmVuZCgpOwogICAgICAgICBmb3IgKERhdGVUb0VudHJpZXNNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gX2VudHJpZXNCeURhdGUtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkKLSAgICAgICAgICAgIGRheXNBc1RpbWVJbnRlcnZhbHMuYXBwZW5kKGl0LT5maXJzdCk7Cisg
ICAgICAgICAgICBkYXlzQXNUaW1lSW50ZXJ2YWxzLmFwcGVuZChpdC0+a2V5KTsKIAogICAgICAg
ICBzb3J0KGRheXNBc1RpbWVJbnRlcnZhbHMuYmVnaW4oKSwgZGF5c0FzVGltZUludGVydmFscy5l
bmQoKSk7CiAgICAgICAgIHNpemVfdCBjb3VudCA9IGRheXNBc1RpbWVJbnRlcnZhbHMuc2l6ZSgp
OwpAQCAtODk3LDcgKzg5Nyw3IEBAIFdlYkhpc3RvcnlXcml0ZXI6OldlYkhpc3RvcnlXcml0ZXIo
RGF0ZVRvRW50cmllc01hcCogZW50cmllc0J5RGF0ZSkKICAgICBtX2RhdGVLZXlzLnJlc2VydmVD
YXBhY2l0eShtX2VudHJpZXNCeURhdGUtPnNpemUoKSk7CiAgICAgRGF0ZVRvRW50cmllc01hcDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9lbnRyaWVzQnlEYXRlLT5lbmQoKTsKICAgICBmb3IgKERh
dGVUb0VudHJpZXNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9lbnRyaWVzQnlEYXRlLT5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIG1fZGF0ZUtleXMuYXBwZW5kKGl0LT5maXJz
dCk7CisgICAgICAgIG1fZGF0ZUtleXMuYXBwZW5kKGl0LT5rZXkpOwogICAgIHNvcnQobV9kYXRl
S2V5cy5iZWdpbigpLCBtX2RhdGVLZXlzLmVuZCgpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbSBiL1NvdXJjZS9XZWJLaXQvbWFj
L01pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW0KaW5kZXggZDU5M2Y4Y2FmMWVjM2FjY2E1YjRiMzBh
ODNjYmQ2YjJjMTk1NDE1Mi4uMDczZDU5MDNmYWFiMTU0ZDk2NjU4ZmU0YjYzYzU3MGNiYzVmYzdh
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tCkBAIC04
OSw4ICs4OSw4IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogICAgIE93blB0cjxUeXBlQ291
bnRTZXQ+IGNvdW50cyhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAucHJv
dGVjdGVkT2JqZWN0VHlwZUNvdW50cygpKTsKICAgICBIYXNoQ291bnRlZFNldDxjb25zdCBjaGFy
Kj46Oml0ZXJhdG9yIGVuZCA9IGNvdW50cy0+ZW5kKCk7CiAgICAgZm9yIChIYXNoQ291bnRlZFNl
dDxjb25zdCBjaGFyKj46Oml0ZXJhdG9yIGl0ID0gY291bnRzLT5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdC0+c2Vjb25kOyArK2kp
Ci0gICAgICAgICAgICBbcmVzdWx0IGFkZE9iamVjdDpbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhT
dHJpbmc6aXQtPmZpcnN0XV07CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdC0+
dmFsdWU7ICsraSkKKyAgICAgICAgICAgIFtyZXN1bHQgYWRkT2JqZWN0OltOU1N0cmluZyBzdHJp
bmdXaXRoVVRGOFN0cmluZzppdC0+a2V5XV07CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
QEAgLTEwNCw4ICsxMDQsOCBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKICAgICBPd25QdHI8
VHlwZUNvdW50U2V0PiBjb3VudHMoSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5o
ZWFwLm9iamVjdFR5cGVDb3VudHMoKSk7CiAgICAgSGFzaENvdW50ZWRTZXQ8Y29uc3QgY2hhcio+
OjppdGVyYXRvciBlbmQgPSBjb3VudHMtPmVuZCgpOwogICAgIGZvciAoSGFzaENvdW50ZWRTZXQ8
Y29uc3QgY2hhcio+OjppdGVyYXRvciBpdCA9IGNvdW50cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXQtPnNlY29uZDsgKytpKQot
ICAgICAgICAgICAgW3Jlc3VsdCBhZGRPYmplY3Q6W05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3Ry
aW5nOml0LT5maXJzdF1dOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXQtPnZh
bHVlOyArK2kpCisgICAgICAgICAgICBbcmVzdWx0IGFkZE9iamVjdDpbTlNTdHJpbmcgc3RyaW5n
V2l0aFVURjhTdHJpbmc6aXQtPmtleV1dOwogICAgIAogICAgIHJldHVybiByZXN1bHQ7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdp
bkhvc3RNYW5hZ2VyLm1tIGIvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2Nh
cGVQbHVnaW5Ib3N0TWFuYWdlci5tbQppbmRleCBjNTEwYTlhOTNkNWIxNzQzMTFlMmQ3MzMwZjIx
YjU5NGJhMDU3MmJlLi5hODIxMjlmMjg2OWFjZDJkNjc5ZjdmYmVhNjZiNjEwNTg5MDM1MDM1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdp
bkhvc3RNYW5hZ2VyLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05l
dHNjYXBlUGx1Z2luSG9zdE1hbmFnZXIubW0KQEAgLTczLDcgKzczLDcgQEAgTmV0c2NhcGVQbHVn
aW5Ib3N0UHJveHkqIE5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXI6Omhvc3RGb3JQbHVnaW4oY29u
c3QgV1RGOjpTdHIKICAgICAKICAgICAvLyBUaGUgcGFja2FnZSB3YXMgYWxyZWFkeSBpbiB0aGUg
bWFwLCBqdXN0IHJldHVybiBpdC4KICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAg
ICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQu
aXRlcmF0b3ItPnZhbHVlOwogICAgICAgICAKICAgICBtYWNoX3BvcnRfdCBjbGllbnRQb3J0Owog
ICAgIGlmIChtYWNoX3BvcnRfYWxsb2NhdGUobWFjaF90YXNrX3NlbGYoKSwgTUFDSF9QT1JUX1JJ
R0hUX1JFQ0VJVkUsICZjbGllbnRQb3J0KSAhPSBLRVJOX1NVQ0NFU1MpIHsKQEAgLTk1LDcgKzk1
LDcgQEAgTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkqIE5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXI6
Omhvc3RGb3JQbHVnaW4oY29uc3QgV1RGOjpTdHIKICAgICAKICAgICBOZXRzY2FwZVBsdWdpbkhv
c3RQcm94eSogaG9zdFByb3h5ID0gbmV3IE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5KGNsaWVudFBv
cnQsIHBsdWdpbkhvc3RQb3J0LCBwbHVnaW5Ib3N0UFNOLCBzaG91bGRDYWNoZU1pc3NpbmdQcm9w
ZXJ0aWVzQW5kTWV0aG9kcyk7CiAgICAgCi0gICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBo
b3N0UHJveHk7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGhvc3RQcm94eTsKICAgICAK
ICAgICByZXR1cm4gaG9zdFByb3h5OwogfQpAQCAtMjA0LDcgKzIwNCw3IEBAIHZvaWQgTmV0c2Nh
cGVQbHVnaW5Ib3N0TWFuYWdlcjo6cGx1Z2luSG9zdERpZWQoTmV0c2NhcGVQbHVnaW5Ib3N0UHJv
eHkqIHBsdWdpbkhvCiAKICAgICAvLyBUaGlzIGhhcyBPKG4pIGNvbXBsZXhpdHkgYnV0IHRoZSBu
dW1iZXIgb2YgYWN0aXZlIHBsdWctaW4gaG9zdHMgaXMgdmVyeSBzbWFsbCBzbyBpdCBzaG91bGRu
J3QgbWF0dGVyLgogICAgIGZvciAoUGx1Z2luSG9zdE1hcDo6aXRlcmF0b3IgaXQgPSBtX3BsdWdp
bkhvc3RzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnNlY29u
ZCA9PSBwbHVnaW5Ib3N0KSB7CisgICAgICAgIGlmIChpdC0+dmFsdWUgPT0gcGx1Z2luSG9zdCkg
ewogICAgICAgICAgICAgbV9wbHVnaW5Ib3N0cy5yZW1vdmUoaXQpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CkBAIC0zMDQsNyArMzA0LDcgQEAgdm9pZCBOZXRzY2FwZVBsdWdpbkhv
c3RNYW5hZ2VyOjpkaWRDcmVhdGVXaW5kb3coKQogICAgIC8vIFNlZSBpZiBhbnkgb2Ygb3VyIGhv
c3RzIGFyZSBpbiBmdWxsLXNjcmVlbiBtb2RlLgogICAgIFBsdWdpbkhvc3RNYXA6Oml0ZXJhdG9y
IGVuZCA9IG1fcGx1Z2luSG9zdHMuZW5kKCk7CiAgICAgZm9yIChQbHVnaW5Ib3N0TWFwOjppdGVy
YXRvciBpdCA9IG1fcGx1Z2luSG9zdHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAg
ICAgIE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5KiBob3N0UHJveHkgPSBpdC0+c2Vjb25kOworICAg
ICAgICBOZXRzY2FwZVBsdWdpbkhvc3RQcm94eSogaG9zdFByb3h5ID0gaXQtPnZhbHVlOwogICAg
ICAgICAKICAgICAgICAgaWYgKCFob3N0UHJveHktPmlzTWVudUJhclZpc2libGUoKSkgewogICAg
ICAgICAgICAgLy8gTWFrZSBvdXJzZWx2ZXMgdGhlIGZyb250IHByb2Nlc3MuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkhvc3RQcm94
eS5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9z
dFByb3h5Lm1tCmluZGV4IGFmNmYyYmU5OTY5Y2IxMWNiMzNhNTYzMTdmZGRhOGMyY2Y2MWNmNWUu
LjBmYjI2ZDBhOWI4NDc1MjI2YmVmY2MzNDk2OGI5ZjUwNmViOTE1YmMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdFByb3h5Lm1t
CisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9z
dFByb3h5Lm1tCkBAIC0xNDQsNyArMTQ0LDcgQEAgdm9pZCBOZXRzY2FwZVBsdWdpbkhvc3RQcm94
eTo6cGx1Z2luSG9zdERpZWQoKQogICAKICAgICBQbHVnaW5JbnN0YW5jZU1hcDo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gaW5zdGFuY2VzLmVuZCgpOwogICAgIGZvciAoUGx1Z2luSW5zdGFuY2VNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaW5zdGFuY2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkK
LSAgICAgICAgaXQtPnNlY29uZC0+cGx1Z2luSG9zdERpZWQoKTsKKyAgICAgICAgaXQtPnZhbHVl
LT5wbHVnaW5Ib3N0RGllZCgpOwogICAgIAogICAgIE5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXI6
OnNoYXJlZCgpLnBsdWdpbkhvc3REaWVkKHRoaXMpOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1t
IGIvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5j
ZVByb3h5Lm1tCmluZGV4IGViODZhMmVmMTk1YjFmODBiYWQ4NDRhMmFkNTdjNzY1OWVlNGU1ZjAu
LmUxZGNlNDI3OGQzZjY2Yjg3ODNhNDIzN2YxNjU1YjRlMjgxNjYxYmQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94
eS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdp
bkluc3RhbmNlUHJveHkubW0KQEAgLTE0NSw3ICsxNDUsNyBAQCB1aW50MzJfdCBOZXRzY2FwZVBs
dWdpbkluc3RhbmNlUHJveHk6OkxvY2FsT2JqZWN0TWFwOjppZEZvck9iamVjdChKU0dsb2JhbERh
dGEmCiAgICAgCiAgICAgSGFzaE1hcDxKU0M6OkpTT2JqZWN0KiwgcGFpcjx1aW50MzJfdCwgdWlu
dDMyX3Q+ID46Oml0ZXJhdG9yIGl0ZXIgPSBtX2pzT2JqZWN0VG9JRE1hcC5maW5kKG9iamVjdCk7
CiAgICAgaWYgKGl0ZXIgIT0gbV9qc09iamVjdFRvSURNYXAuZW5kKCkpCi0gICAgICAgIHJldHVy
biBpdGVyLT5zZWNvbmQuZmlyc3Q7CisgICAgICAgIHJldHVybiBpdGVyLT52YWx1ZS5maXJzdDsK
ICAgICAKICAgICBkbyB7CiAgICAgICAgIG9iamVjdElEID0gKyttX29iamVjdElEQ291bnRlcjsK
QEAgLTE2Miw3ICsxNjIsNyBAQCB2b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6TG9j
YWxPYmplY3RNYXA6OnJldGFpbihKU0M6OkpTT2JqZWN0KiBvYmplY3QpCiAgICAgSGFzaE1hcDxK
U0M6OkpTT2JqZWN0KiwgcGFpcjx1aW50MzJfdCwgdWludDMyX3Q+ID46Oml0ZXJhdG9yIGl0ZXIg
PSBtX2pzT2JqZWN0VG9JRE1hcC5maW5kKG9iamVjdCk7CiAgICAgQVNTRVJUKGl0ZXIgIT0gbV9q
c09iamVjdFRvSURNYXAuZW5kKCkpOwogCi0gICAgaXRlci0+c2Vjb25kLnNlY29uZCA9IGl0ZXIt
PnNlY29uZC5zZWNvbmQgKyAxOworICAgIGl0ZXItPnZhbHVlLnNlY29uZCA9IGl0ZXItPnZhbHVl
LnNlY29uZCArIDE7CiB9CiAKIHZvaWQgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpMb2Nh
bE9iamVjdE1hcDo6cmVsZWFzZShKU0M6OkpTT2JqZWN0KiBvYmplY3QpCkBAIC0xNzAsMTAgKzE3
MCwxMCBAQCB2b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6TG9jYWxPYmplY3RNYXA6
OnJlbGVhc2UoSlNDOjpKU09iamVjdCogb2JqZWN0KQogICAgIEhhc2hNYXA8SlNDOjpKU09iamVj
dCosIHBhaXI8dWludDMyX3QsIHVpbnQzMl90PiA+OjppdGVyYXRvciBpdGVyID0gbV9qc09iamVj
dFRvSURNYXAuZmluZChvYmplY3QpOwogICAgIEFTU0VSVChpdGVyICE9IG1fanNPYmplY3RUb0lE
TWFwLmVuZCgpKTsKIAotICAgIEFTU0VSVChpdGVyLT5zZWNvbmQuc2Vjb25kID4gMCk7Ci0gICAg
aXRlci0+c2Vjb25kLnNlY29uZCA9IGl0ZXItPnNlY29uZC5zZWNvbmQgLSAxOwotICAgIGlmICgh
aXRlci0+c2Vjb25kLnNlY29uZCkgewotICAgICAgICBtX2lkVG9KU09iamVjdE1hcC5yZW1vdmUo
aXRlci0+c2Vjb25kLmZpcnN0KTsKKyAgICBBU1NFUlQoaXRlci0+dmFsdWUuc2Vjb25kID4gMCk7
CisgICAgaXRlci0+dmFsdWUuc2Vjb25kID0gaXRlci0+dmFsdWUuc2Vjb25kIC0gMTsKKyAgICBp
ZiAoIWl0ZXItPnZhbHVlLnNlY29uZCkgeworICAgICAgICBtX2lkVG9KU09iamVjdE1hcC5yZW1v
dmUoaXRlci0+dmFsdWUuZmlyc3QpOwogICAgICAgICBtX2pzT2JqZWN0VG9JRE1hcC5yZW1vdmUo
aXRlcik7CiAgICAgfQogfQpAQCAtMTk3LDEwICsxOTcsMTAgQEAgYm9vbCBOZXRzY2FwZVBsdWdp
bkluc3RhbmNlUHJveHk6OkxvY2FsT2JqZWN0TWFwOjpmb3JnZXQodWludDMyX3Qgb2JqZWN0SUQp
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIEhhc2hNYXA8SlNDOjpKU09iamVj
dCosIHBhaXI8dWludDMyX3QsIHVpbnQzMl90PiA+OjppdGVyYXRvciBySXRlciA9IG1fanNPYmpl
Y3RUb0lETWFwLmZpbmQoaXRlci0+c2Vjb25kLmdldCgpKTsKKyAgICBIYXNoTWFwPEpTQzo6SlNP
YmplY3QqLCBwYWlyPHVpbnQzMl90LCB1aW50MzJfdD4gPjo6aXRlcmF0b3Igckl0ZXIgPSBtX2pz
T2JqZWN0VG9JRE1hcC5maW5kKGl0ZXItPnZhbHVlLmdldCgpKTsKIAogICAgIC8vIElmIHRoZSBv
YmplY3QgaXMgYmVpbmcgc2VudCB0byBwbHVnLWluIHJpZ2h0IG5vdywgdGhlbiBpdCdzIG5vdCB0
aGUgdGltZSB0byBmb3JnZXQuCi0gICAgaWYgKHJJdGVyLT5zZWNvbmQuc2Vjb25kICE9IDEpCisg
ICAgaWYgKHJJdGVyLT52YWx1ZS5zZWNvbmQgIT0gMSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgbV9qc09iamVjdFRvSURNYXAucmVtb3ZlKHJJdGVyKTsKQEAgLTMzMCw3ICszMzAsNyBA
QCB2b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6ZGVzdHJveSgpCiAgICAgCiAgICAg
RnJhbWVMb2FkTWFwOjppdGVyYXRvciBlbmQgPSBtX3BlbmRpbmdGcmFtZUxvYWRzLmVuZCgpOwog
ICAgIGZvciAoRnJhbWVMb2FkTWFwOjppdGVyYXRvciBpdCA9IG1fcGVuZGluZ0ZyYW1lTG9hZHMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBbKGl0LT5maXJzdCkgX3NldEludGVy
bmFsTG9hZERlbGVnYXRlOm5pbF07CisgICAgICAgIFsoaXQtPmtleSkgX3NldEludGVybmFsTG9h
ZERlbGVnYXRlOm5pbF07CiAKICAgICBfV0tQSERlc3Ryb3lQbHVnaW5JbnN0YW5jZShtX3BsdWdp
bkhvc3RQcm94eS0+cG9ydCgpLCBtX3BsdWdpbklELCByZXF1ZXN0SUQpOwogIApAQCAtNjc4LDcg
KzY3OCw3IEBAIHZvaWQgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Ojp3ZWJGcmFtZURpZEZp
bmlzaExvYWRXaXRoUmVhc29uKFdlYkZyYW1lKiB3ZWJGCiAgICAgRnJhbWVMb2FkTWFwOjppdGVy
YXRvciBpdCA9IG1fcGVuZGluZ0ZyYW1lTG9hZHMuZmluZCh3ZWJGcmFtZSk7CiAgICAgQVNTRVJU
KGl0ICE9IG1fcGVuZGluZ0ZyYW1lTG9hZHMuZW5kKCkpOwogICAgICAgICAKLSAgICBQbHVnaW5S
ZXF1ZXN0KiBwbHVnaW5SZXF1ZXN0ID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICBQbHVnaW5SZXF1
ZXN0KiBwbHVnaW5SZXF1ZXN0ID0gaXQtPnZhbHVlLmdldCgpOwogICAgIF9XS1BITG9hZFVSTE5v
dGlmeShtX3BsdWdpbkhvc3RQcm94eS0+cG9ydCgpLCBtX3BsdWdpbklELCBwbHVnaW5SZXF1ZXN0
LT5yZXF1ZXN0SUQoKSwgcmVhc29uKTsKICAKICAgICBtX3BlbmRpbmdGcmFtZUxvYWRzLnJlbW92
ZShpdCk7CkBAIC0xNjM4LDcgKzE2MzgsNyBAQCB2b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQ
cm94eTo6Y2FuY2VsQ2hlY2tJZkFsbG93ZWRUb0xvYWRVUkwodWludDMyX3QgY2hlY2tJRAogICAg
IGlmIChpdCA9PSBtX3VybENoZWNrcy5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAg
IFdlYlBsdWdpbkNvbnRhaW5lckNoZWNrICpjaGVjayA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAg
V2ViUGx1Z2luQ29udGFpbmVyQ2hlY2sgKmNoZWNrID0gaXQtPnZhbHVlLmdldCgpOwogICAgIFtj
aGVjayBjYW5jZWxdOwogICAgIG1fdXJsQ2hlY2tzLnJlbW92ZShpdCk7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9Qcm94eUluc3RhbmNlLm1tIGIvU291
cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvUHJveHlJbnN0YW5jZS5tbQppbmRleCAwOTQ0
M2RjMTYyOGE2NjhmMmZiMjE0ZjNiNTMxN2M2YjU0NDQ0MWNhLi42MmI2MDhlNjVkZTNlMDNjMzUy
OGIzMzc5OGJiNDQ2NzZkZjJlNWZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9QbHVn
aW5zL0hvc3RlZC9Qcm94eUluc3RhbmNlLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdp
bnMvSG9zdGVkL1Byb3h5SW5zdGFuY2UubW0KQEAgLTM1NSw4ICszNTUsOCBAQCBNZXRob2RMaXN0
IFByb3h5SW5zdGFuY2U6Om1ldGhvZHNOYW1lZChjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVy
KQogICAgIE1ldGhvZE1hcDo6aXRlcmF0b3IgZXhpc3RpbmdNYXBFbnRyeSA9IG1fbWV0aG9kcy5m
aW5kKGlkZW50aWZpZXIuaW1wbCgpKTsKICAgICBpZiAoZXhpc3RpbmdNYXBFbnRyeSAhPSBtX21l
dGhvZHMuZW5kKCkpIHsKICAgICAgICAgTWV0aG9kTGlzdCBtZXRob2RMaXN0OwotICAgICAgICBp
ZiAoZXhpc3RpbmdNYXBFbnRyeS0+c2Vjb25kKQotICAgICAgICAgICAgbWV0aG9kTGlzdC5hcHBl
bmQoZXhpc3RpbmdNYXBFbnRyeS0+c2Vjb25kKTsKKyAgICAgICAgaWYgKGV4aXN0aW5nTWFwRW50
cnktPnZhbHVlKQorICAgICAgICAgICAgbWV0aG9kTGlzdC5hcHBlbmQoZXhpc3RpbmdNYXBFbnRy
eS0+dmFsdWUpOwogICAgICAgICByZXR1cm4gbWV0aG9kTGlzdDsKICAgICB9CiAgICAgCkBAIC0z
NzgsMTEgKzM3OCwxMSBAQCBNZXRob2RMaXN0IFByb3h5SW5zdGFuY2U6Om1ldGhvZHNOYW1lZChj
b25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKQogICAgIC8vIEFkZCBhIG5ldyBlbnRyeSB0byB0
aGUgbWFwIHVubGVzcyBhbiBlbnRyeSB3YXMgYWRkZWQgd2hpbGUgd2Ugd2VyZSBpbiB3YWl0Rm9y
UmVwbHkuCiAgICAgTWV0aG9kTWFwOjpBZGRSZXN1bHQgbWFwQWRkUmVzdWx0ID0gbV9tZXRob2Rz
LmFkZChpZGVudGlmaWVyLmltcGwoKSwgMCk7CiAgICAgaWYgKG1hcEFkZFJlc3VsdC5pc05ld0Vu
dHJ5ICYmIHJlcGx5LT5tX3Jlc3VsdCkKLSAgICAgICAgbWFwQWRkUmVzdWx0Lml0ZXJhdG9yLT5z
ZWNvbmQgPSBuZXcgUHJveHlNZXRob2QobWV0aG9kTmFtZSk7CisgICAgICAgIG1hcEFkZFJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUgPSBuZXcgUHJveHlNZXRob2QobWV0aG9kTmFtZSk7CiAKICAgICBN
ZXRob2RMaXN0IG1ldGhvZExpc3Q7Ci0gICAgaWYgKG1hcEFkZFJlc3VsdC5pdGVyYXRvci0+c2Vj
b25kKQotICAgICAgICBtZXRob2RMaXN0LmFwcGVuZChtYXBBZGRSZXN1bHQuaXRlcmF0b3ItPnNl
Y29uZCk7CisgICAgaWYgKG1hcEFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUpCisgICAgICAgIG1l
dGhvZExpc3QuYXBwZW5kKG1hcEFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwogICAgIHJldHVy
biBtZXRob2RMaXN0OwogfQogCkBAIC0zOTQsNyArMzk0LDcgQEAgRmllbGQqIFByb3h5SW5zdGFu
Y2U6OmZpZWxkTmFtZWQoY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllcikKICAgICAvLyBJZiB3
ZSBhbHJlYWR5IGhhdmUgYW4gZW50cnkgaW4gdGhlIG1hcCwgdXNlIGl0LgogICAgIEZpZWxkTWFw
OjppdGVyYXRvciBleGlzdGluZ01hcEVudHJ5ID0gbV9maWVsZHMuZmluZChpZGVudGlmaWVyLmlt
cGwoKSk7CiAgICAgaWYgKGV4aXN0aW5nTWFwRW50cnkgIT0gbV9maWVsZHMuZW5kKCkpCi0gICAg
ICAgIHJldHVybiBleGlzdGluZ01hcEVudHJ5LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBleGlz
dGluZ01hcEVudHJ5LT52YWx1ZTsKICAgICAKICAgICB1aW50NjRfdCBwcm9wZXJ0eU5hbWUgPSBy
ZWludGVycHJldF9jYXN0PHVpbnQ2NF90PihfTlBOX0dldFN0cmluZ0lkZW50aWZpZXIoaWRlbnRp
Zmllci5hc2NpaSgpLmRhdGEoKSkpOwogICAgIHVpbnQzMl90IHJlcXVlc3RJRCA9IG1faW5zdGFu
Y2VQcm94eS0+bmV4dFJlcXVlc3RJRCgpOwpAQCAtNDE0LDggKzQxNCw4IEBAIEZpZWxkKiBQcm94
eUluc3RhbmNlOjpmaWVsZE5hbWVkKGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIpCiAgICAg
Ly8gQWRkIGEgbmV3IGVudHJ5IHRvIHRoZSBtYXAgdW5sZXNzIGFuIGVudHJ5IHdhcyBhZGRlZCB3
aGlsZSB3ZSB3ZXJlIGluIHdhaXRGb3JSZXBseS4KICAgICBGaWVsZE1hcDo6QWRkUmVzdWx0IG1h
cEFkZFJlc3VsdCA9IG1fZmllbGRzLmFkZChpZGVudGlmaWVyLmltcGwoKSwgMCk7CiAgICAgaWYg
KG1hcEFkZFJlc3VsdC5pc05ld0VudHJ5ICYmIHJlcGx5LT5tX3Jlc3VsdCkKLSAgICAgICAgbWFw
QWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBuZXcgUHJveHlGaWVsZChwcm9wZXJ0eU5hbWUp
OwotICAgIHJldHVybiBtYXBBZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgbWFw
QWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IG5ldyBQcm94eUZpZWxkKHByb3BlcnR5TmFtZSk7
CisgICAgcmV0dXJuIG1hcEFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiB9CiAKIEpTQzo6SlNW
YWx1ZSBQcm94eUluc3RhbmNlOjpmaWVsZFZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgRmll
bGQqIGZpZWxkKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9X
ZWJOZXRzY2FwZVBsdWdpblZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5l
dHNjYXBlUGx1Z2luVmlldy5tbQppbmRleCA1ZjFmNTU2OTQxYTk0YzEwZjRkNWI3MWIyODMzODM5
ZWEyNWJlMDQzLi4xZTliMDExMWQ3MGMwNWNiNzJlNWM4ZGU2OTdlYmE0ZjA4Zjk3ODhhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5t
bQpAQCAtNzEwLDcgKzcxMCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBnZXROUFJlY3QoY29uc3Qg
TlNSZWN0JiBuciwgTlBSZWN0JiBucHIpCiAKICAgICBIYXNoTWFwPHVpbnQzMl90LCBQbHVnaW5U
aW1lcio+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSB0aW1lcnMtPmVuZCgpOwogICAgIGZvciAoSGFz
aE1hcDx1aW50MzJfdCwgUGx1Z2luVGltZXIqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSB0aW1lcnMt
PmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBQbHVnaW5UaW1lciogdGltZXIg
PSBpdC0+c2Vjb25kOworICAgICAgICBQbHVnaW5UaW1lciogdGltZXIgPSBpdC0+dmFsdWU7CiAg
ICAgICAgIHRpbWVyLT5zdG9wKCk7CiAgICAgfSAgICAKIH0KQEAgLTcyOCw3ICs3MjgsNyBAQCBz
dGF0aWMgaW5saW5lIHZvaWQgZ2V0TlBSZWN0KGNvbnN0IE5TUmVjdCYgbnIsIE5QUmVjdCYgbnBy
KQogICAgIAogICAgIEhhc2hNYXA8dWludDMyX3QsIFBsdWdpblRpbWVyKj46OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IHRpbWVycy0+ZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPHVpbnQzMl90LCBQbHVn
aW5UaW1lcio+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHRpbWVycy0+YmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7Ci0gICAgICAgIFBsdWdpblRpbWVyKiB0aW1lciA9IGl0LT5zZWNvbmQ7CisgICAg
ICAgIFBsdWdpblRpbWVyKiB0aW1lciA9IGl0LT52YWx1ZTsKICAgICAgICAgQVNTRVJUKCF0aW1l
ci0+aXNBY3RpdmUoKSk7CiAgICAgICAgIHRpbWVyLT5zdGFydChfaXNDb21wbGV0ZWx5T2JzY3Vy
ZWQpOwogICAgIH0gICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3Vw
cG9ydC9XZWJOb3RpZmljYXRpb25DbGllbnQubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3Jl
U3VwcG9ydC9XZWJOb3RpZmljYXRpb25DbGllbnQubW0KaW5kZXggODEyMDkzNjAxNjM3NDliNzY2
ZmM3YjhkM2Q3MDYwMjdjYjI3ZDZkYS4uOGJjNzcwZWQwYjVkZTNhYTNkNDZiYjNhOTk5ZmRhYTk3
ODkxYzVlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2Vi
Tm90aWZpY2F0aW9uQ2xpZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBw
b3J0L1dlYk5vdGlmaWNhdGlvbkNsaWVudC5tbQpAQCAtNzIsNyArNzIsNyBAQCBib29sIFdlYk5v
dGlmaWNhdGlvbkNsaWVudDo6c2hvdyhOb3RpZmljYXRpb24qIG5vdGlmaWNhdGlvbikKICAgICBt
X25vdGlmaWNhdGlvbk1hcC5zZXQobm90aWZpY2F0aW9uLCB3ZWJOb3RpZmljYXRpb24pOwogCiAg
ICAgTm90aWZpY2F0aW9uQ29udGV4dE1hcDo6aXRlcmF0b3IgaXQgPSBtX25vdGlmaWNhdGlvbkNv
bnRleHRNYXAuYWRkKG5vdGlmaWNhdGlvbi0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBWZWN0
b3I8UmV0YWluUHRyPFdlYk5vdGlmaWNhdGlvbj4gPigpKS5pdGVyYXRvcjsKLSAgICBpdC0+c2Vj
b25kLmFwcGVuZCh3ZWJOb3RpZmljYXRpb24pOworICAgIGl0LT52YWx1ZS5hcHBlbmQod2ViTm90
aWZpY2F0aW9uKTsKIAogICAgIFtbbV93ZWJWaWV3IF9ub3RpZmljYXRpb25Qcm92aWRlcl0gc2hv
d05vdGlmaWNhdGlvbjp3ZWJOb3RpZmljYXRpb24uZ2V0KCkgZnJvbVdlYlZpZXc6bV93ZWJWaWV3
XTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEwMiw3ICsxMDIsNyBAQCB2b2lkIFdlYk5vdGlmaWNh
dGlvbkNsaWVudDo6Y2xlYXJOb3RpZmljYXRpb25zKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQpCiAgICAgaWYgKGl0ID09IG1fbm90aWZpY2F0aW9uQ29udGV4dE1hcC5lbmQoKSkKICAg
ICAgICAgcmV0dXJuOwogICAgIAotICAgIFZlY3RvcjxSZXRhaW5QdHI8V2ViTm90aWZpY2F0aW9u
PiA+JiB3ZWJOb3RpZmljYXRpb25zID0gaXQtPnNlY29uZDsKKyAgICBWZWN0b3I8UmV0YWluUHRy
PFdlYk5vdGlmaWNhdGlvbj4gPiYgd2ViTm90aWZpY2F0aW9ucyA9IGl0LT52YWx1ZTsKICAgICBO
U011dGFibGVBcnJheSAqbnNJRHMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOwogICAgIHNpemVf
dCBjb3VudCA9IHdlYk5vdGlmaWNhdGlvbnMuc2l6ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgY291bnQ7ICsraSkgewpAQCAtMTI3LDEwICsxMjcsMTAgQEAgdm9pZCBXZWJOb3RpZmlj
YXRpb25DbGllbnQ6Om5vdGlmaWNhdGlvbk9iamVjdERlc3Ryb3llZChOb3RpZmljYXRpb24qIG5v
dGlmaWNhdGkKIAogICAgIE5vdGlmaWNhdGlvbkNvbnRleHRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9u
b3RpZmljYXRpb25Db250ZXh0TWFwLmZpbmQobm90aWZpY2F0aW9uLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkpOwogICAgIEFTU0VSVChpdCAhPSBtX25vdGlmaWNhdGlvbkNvbnRleHRNYXAuZW5k
KCkpOwotICAgIHNpemVfdCBpbmRleCA9IGl0LT5zZWNvbmQuZmluZCh3ZWJOb3RpZmljYXRpb24p
OworICAgIHNpemVfdCBpbmRleCA9IGl0LT52YWx1ZS5maW5kKHdlYk5vdGlmaWNhdGlvbik7CiAg
ICAgQVNTRVJUKGluZGV4ICE9IG5vdEZvdW5kKTsKLSAgICBpdC0+c2Vjb25kLnJlbW92ZShpbmRl
eCk7Ci0gICAgaWYgKGl0LT5zZWNvbmQuaXNFbXB0eSgpKQorICAgIGl0LT52YWx1ZS5yZW1vdmUo
aW5kZXgpOworICAgIGlmIChpdC0+dmFsdWUuaXNFbXB0eSgpKQogICAgICAgICBtX25vdGlmaWNh
dGlvbkNvbnRleHRNYXAucmVtb3ZlKGl0KTsKIAogICAgIFtbbV93ZWJWaWV3IF9ub3RpZmljYXRp
b25Qcm92aWRlcl0gbm90aWZpY2F0aW9uRGVzdHJveWVkOndlYk5vdGlmaWNhdGlvbi5nZXQoKV07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tIGIv
U291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQppbmRleCBhOWIyOTFlNDk5
ZjgwMjk3Y2M3NTY3OWYzOTBlZjZiZGUwNjFjNGE0Li4yMTY5NWU0NTI1YmQ2YmYxNTJiNDYyODUy
MDAwZDVkYTBhOTE0M2FhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dl
YkhUTUxWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcu
bW0KQEAgLTIzNzAsNyArMjM3MCw3IEBAIHN0YXRpYyBTdHJpbmcgY29tbWFuZE5hbWVGb3JTZWxl
Y3RvcihTRUwgc2VsZWN0b3IpCiAgICAgc3RhdGljIGNvbnN0IFNlbGVjdG9yTmFtZU1hcCogZXhj
ZXB0aW9uTWFwID0gY3JlYXRlU2VsZWN0b3JFeGNlcHRpb25NYXAoKTsKICAgICBTZWxlY3Rvck5h
bWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZXhjZXB0aW9uTWFwLT5maW5kKHNlbGVjdG9yKTsK
ICAgICBpZiAoaXQgIT0gZXhjZXB0aW9uTWFwLT5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5z
ZWNvbmQ7CisgICAgICAgIHJldHVybiBpdC0+dmFsdWU7CiAKICAgICAvLyBSZW1vdmUgdGhlIHRy
YWlsaW5nIGNvbG9uLgogICAgIC8vIE5vIG5lZWQgdG8gY2FwaXRhbGl6ZSB0aGUgY29tbWFuZCBu
YW1lIHNpbmNlIEVkaXRvciBjb21tYW5kIG5hbWVzIGFyZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2Uu
Y3BwCmluZGV4IGM3YmIxNDYwOTBlZTZjOTRjZDVjYjI2YzA5Y2M0NDRmN2I0NmM5NTMuLjdhODlh
OTMxODY0Yjg0MmUxMDQ4YjhjMDAxMGEyYmVkMDUwMjkyY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Vi
cGFnZS5jcHAKQEAgLTIyMzAsNyArMjIzMCw3IEBAIHN0YXRpYyB2b2lkIGV4dHJhY3RDb250ZW50
VHlwZUZyb21QbHVnaW5WZWN0b3IoY29uc3QgVmVjdG9yPFBsdWdpblBhY2thZ2UqPiYgcGx1CiAg
ICAgICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWFwX2l0ID0gcGx1
Z2luc1tpXS0+bWltZVRvRGVzY3JpcHRpb25zKCkuYmVnaW4oKTsKICAgICAgICAgTUlNRVRvRGVz
Y3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBtYXBfZW5kID0gcGx1Z2luc1tpXS0+bWltZVRv
RGVzY3JpcHRpb25zKCkuZW5kKCk7CiAgICAgICAgIGZvciAoOyBtYXBfaXQgIT0gbWFwX2VuZDsg
KyttYXBfaXQpCi0gICAgICAgICAgICAqbGlzdCA8PCBtYXBfaXQtPmZpcnN0OworICAgICAgICAg
ICAgKmxpc3QgPDwgbWFwX2l0LT5rZXk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L3F0L0FwaS9xd2VicGx1Z2luZGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYktpdC9xdC9B
cGkvcXdlYnBsdWdpbmRhdGFiYXNlLmNwcAppbmRleCBhN2EzYjVmMmMxZTg5ZjQ3NDM3YzA4YTk3
ZmNiMjk2Nzg2YmY4ZTU4Li5jNTMyOGM4ZjY3NWYyYzY2ZjdiOWI0MjBkNjUxMzdmZDlmODZiODk2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGx1Z2luZGF0YWJhc2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwbHVnaW5kYXRhYmFzZS5jcHAKQEAgLTEy
Miw4ICsxMjIsOCBAQCBRTGlzdDxRV2ViUGx1Z2luSW5mbzo6TWltZVR5cGU+IFFXZWJQbHVnaW5J
bmZvOjptaW1lVHlwZXMoKSBjb25zdAogCiAgICAgICAgIGZvciAoTUlNRVRvRGVzY3JpcHRpb25z
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIE1pbWVUeXBlIG1pbWVUeXBlOwotICAgICAgICAg
ICAgbWltZVR5cGUubmFtZSA9IGl0LT5maXJzdDsKLSAgICAgICAgICAgIG1pbWVUeXBlLmRlc2Ny
aXB0aW9uID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIG1pbWVUeXBlLm5hbWUgPSBpdC0+a2V5
OworICAgICAgICAgICAgbWltZVR5cGUuZGVzY3JpcHRpb24gPSBpdC0+dmFsdWU7CiAKICAgICAg
ICAgICAgIFFTdHJpbmdMaXN0IGZpbGVFeHRlbnNpb25zOwogICAgICAgICAgICAgVmVjdG9yPFN0
cmluZz4gZXh0ZW5zaW9ucyA9IG1fcGFja2FnZS0+bWltZVRvRXh0ZW5zaW9ucygpLmdldChtaW1l
VHlwZS5uYW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
UGxhdGZvcm1TdHJhdGVnaWVzUXQuY3BwIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9QbGF0Zm9ybVN0cmF0ZWdpZXNRdC5jcHAKaW5kZXggY2Q0YWIwZDcyZDg2ODEyNWRjODZlZTk4
N2JjY2U2ZWYzYWIxYWQ4OS4uN2Q0YjBiNzVmOWQyYzRlNzY3OWRiM2QwN2I1NjE3YTQyMTQwNGM1
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0
cmF0ZWdpZXNRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QbGF0
Zm9ybVN0cmF0ZWdpZXNRdC5jcHAKQEAgLTEzMyw4ICsxMzMsOCBAQCB2b2lkIFBsYXRmb3JtU3Ry
YXRlZ2llc1F0OjpnZXRQbHVnaW5JbmZvKGNvbnN0IFdlYkNvcmU6OlBhZ2UqIHBhZ2UsIFZlY3Rv
cjxXZWJDbwogICAgICAgICBmb3IgKE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAg
ICAgICAgICAgICBNaW1lQ2xhc3NJbmZvIG1pbWU7CiAKLSAgICAgICAgICAgIG1pbWUudHlwZSA9
IGl0LT5maXJzdDsKLSAgICAgICAgICAgIG1pbWUuZGVzYyA9IGl0LT5zZWNvbmQ7CisgICAgICAg
ICAgICBtaW1lLnR5cGUgPSBpdC0+a2V5OworICAgICAgICAgICAgbWltZS5kZXNjID0gaXQtPnZh
bHVlOwogICAgICAgICAgICAgbWltZS5leHRlbnNpb25zID0gcGFja2FnZS0+bWltZVRvRXh0ZW5z
aW9ucygpLmdldChtaW1lLnR5cGUpOwogCiAgICAgICAgICAgICBpbmZvLm1pbWVzLmFwcGVuZCht
aW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL0NPTVByb3BlcnR5QmFnLmggYi9T
b3VyY2UvV2ViS2l0L3dpbi9DT01Qcm9wZXJ0eUJhZy5oCmluZGV4IGRkMGE4YzQyZjRkMWNlYzJj
OTQyODk4NTIzNTZhMGYyYmRkYTFiNWMuLmYwY2QwYzM3MTNlMGFhMDQzY2U2ZmY5ZTFkZjU4ZGJl
Y2RkMzU2ZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL0NPTVByb3BlcnR5QmFnLmgK
KysrIGIvU291cmNlL1dlYktpdC93aW4vQ09NUHJvcGVydHlCYWcuaApAQCAtMTQ1LDkgKzE0NSw5
IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgQ09NUHJvcGVydHlCYWc8VmFsdWVUeXBlLCBL
ZXlUeXBlLCBIYXNoVHlwZT46OlJlYWQoTFBDCiAKICAgICBWQVJUWVBFIHJlcXVlc3RlZFR5cGUg
PSBWX1ZUKHBWYXIpOwogICAgIFZfVlQocFZhcikgPSBWVF9FTVBUWTsKLSAgICBDT01WYXJpYW50
U2V0dGVyPFZhbHVlVHlwZT46OnNldFZhcmlhbnQocFZhciwgaXQtPnNlY29uZCk7CisgICAgQ09N
VmFyaWFudFNldHRlcjxWYWx1ZVR5cGU+OjpzZXRWYXJpYW50KHBWYXIsIGl0LT52YWx1ZSk7CiAK
LSAgICBpZiAocmVxdWVzdGVkVHlwZSAhPSBDT01WYXJpYW50U2V0dGVyPFZhbHVlVHlwZT46OnZh
cmlhbnRUeXBlKGl0LT5zZWNvbmQpICYmIHJlcXVlc3RlZFR5cGUgIT0gVlRfRU1QVFkpCisgICAg
aWYgKHJlcXVlc3RlZFR5cGUgIT0gQ09NVmFyaWFudFNldHRlcjxWYWx1ZVR5cGU+Ojp2YXJpYW50
VHlwZShpdC0+dmFsdWUpICYmIHJlcXVlc3RlZFR5cGUgIT0gVlRfRU1QVFkpCiAgICAgICAgIHJl
dHVybiA6OlZhcmlhbnRDaGFuZ2VUeXBlKHBWYXIsIHBWYXIsIFZBUklBTlRfTk9VU0VST1ZFUlJJ
REUgfCBWQVJJQU5UX0FMUEhBQk9PTCwgcmVxdWVzdGVkVHlwZSk7CiAKICAgICByZXR1cm4gU19P
SzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRm
b3JtU3RyYXRlZ2llcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJQ
bGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCmluZGV4IDIzMGYzMzIzZjU0MjkxZDAxZTE0MTk4MTc4ZmEy
MTZhNDhjMGNmNWIuLmYxMzBmNzZiZDJhNjc2OTdhZGU3YTM2Nzg4NDUyNDNhOWY2YTcxYTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3Ry
YXRlZ2llcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViUGxh
dGZvcm1TdHJhdGVnaWVzLmNwcApAQCAtOTMsOCArOTMsOCBAQCB2b2lkIFdlYlBsYXRmb3JtU3Ry
YXRlZ2llczo6Z2V0UGx1Z2luSW5mbyhjb25zdCBXZWJDb3JlOjpQYWdlKiwgVmVjdG9yPFdlYkNv
cmU6OgogICAgICAgICBmb3IgKE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAg
ICAgICAgICBNaW1lQ2xhc3NJbmZvIG1pbWU7CiAKLSAgICAgICAgICAgIG1pbWUudHlwZSA9IGl0
LT5maXJzdDsKLSAgICAgICAgICAgIG1pbWUuZGVzYyA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAg
ICBtaW1lLnR5cGUgPSBpdC0+a2V5OworICAgICAgICAgICAgbWltZS5kZXNjID0gaXQtPnZhbHVl
OwogICAgICAgICAgICAgbWltZS5leHRlbnNpb25zID0gcGFja2FnZS0+bWltZVRvRXh0ZW5zaW9u
cygpLmdldChtaW1lLnR5cGUpOwogCiAgICAgICAgICAgICBpbmZvLm1pbWVzLmFwcGVuZChtaW1l
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYktpdENPTUFQSS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L3dpbi9XZWJLaXRDT01BUEkuY3BwCmluZGV4IDljOWNjMDI2YjQ3YjRmZWE5NjBj
NjM5ODQ2ZTBlYmE1MWM0NjUzYzIuLjRkOGZmMDk1YmRhOTYwN2QyOWExNDViODU3Yzc4ZGRmZjhl
MzVlN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYktpdENPTUFQSS5jcHAKKysr
IGIvU291cmNlL1dlYktpdC93aW4vV2ViS2l0Q09NQVBJLmNwcApAQCAtNTIsNyArNTIsNyBAQCBz
dGF0aWMgQ09NUHRyPElDbGFzc0ZhY3Rvcnk+IGNsYXNzRmFjdG9yeShjb25zdCBDTFNJRCYgY2xz
aWQpCiAgICAgc3RhdGljIEZhY3RvcnlNYXAmIGZhY3RvcmllcyA9ICpuZXcgRmFjdG9yeU1hcDsK
IAogICAgIEZhY3RvcnlNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBmYWN0b3JpZXMuYWRkKGNsc2lk
LCAwKTsKLSAgICBDT01QdHI8SUNsYXNzRmFjdG9yeT4mIGZhY3RvcnkgPSByZXN1bHQuaXRlcmF0
b3ItPnNlY29uZDsKKyAgICBDT01QdHI8SUNsYXNzRmFjdG9yeT4mIGZhY3RvcnkgPSByZXN1bHQu
aXRlcmF0b3ItPnZhbHVlOwogICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSAmJiBGQUlMRUQoRGxs
R2V0Q2xhc3NPYmplY3QoY2xzaWQsIF9fdXVpZG9mKGZhY3RvcnkpLCByZWludGVycHJldF9jYXN0
PHZvaWQqKj4oJmZhY3RvcnkpKSkpCiAgICAgICAgIGZhY3RvcnkgPSAwOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJOb3RpZmljYXRpb25DZW50ZXIuY3BwIGIvU291cmNlL1dl
YktpdC93aW4vV2ViTm90aWZpY2F0aW9uQ2VudGVyLmNwcAppbmRleCBjNzE5MmQ4ZDNjZGIyY2Rh
ZTJiYWE3MWFlNjBmN2JhOWQ4MWVkN2VhLi4zMWM4MTE5YTUwMmI5Y2VlNjVlNDIwYmY1MTdlZTc5
YWExMjg0MWIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJOb3RpZmljYXRpb25D
ZW50ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL1dlYk5vdGlmaWNhdGlvbkNlbnRlci5j
cHAKQEAgLTEyMCw3ICsxMjAsNyBAQCB2b2lkIFdlYk5vdGlmaWNhdGlvbkNlbnRlcjo6cG9zdE5v
dGlmaWNhdGlvbkludGVybmFsKElXZWJOb3RpZmljYXRpb24qIG5vdGlmaWNhdAogCiAgICAgLy8g
SW50ZW50aW9uYWxseSBtYWtlIGEgY29weSBvZiB0aGUgbGlzdCB0byBhdm9pZCB0aGUgcG9zc2li
aWxpdHkgb2YgZXJyb3JzCiAgICAgLy8gZnJvbSBhIG11dGF0aW9uIG9mIHRoZSBsaXN0IGluIHRo
ZSBvbk5vdGlmeSBjYWxsYmFjay4KLSAgICBPYmplY3RPYnNlcnZlckxpc3QgbGlzdCA9IGl0LT5z
ZWNvbmQ7CisgICAgT2JqZWN0T2JzZXJ2ZXJMaXN0IGxpc3QgPSBpdC0+dmFsdWU7CiAKICAgICBP
YnNlcnZlckxpc3RJdGVyYXRvciBlbmQgPSBsaXN0LmVuZCgpOwogICAgIGZvciAoT2JzZXJ2ZXJM
aXN0SXRlcmF0b3IgaXQyID0gbGlzdC5iZWdpbigpOyBpdDIgIT0gZW5kOyArK2l0MikgewpAQCAt
MTQ5LDcgKzE0OSw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViTm90aWZpY2F0aW9u
Q2VudGVyOjphZGRPYnNlcnZlcigKICAgICBTdHJpbmcgbmFtZShub3RpZmljYXRpb25OYW1lLCBT
eXNTdHJpbmdMZW4obm90aWZpY2F0aW9uTmFtZSkpOwogICAgIE1hcHBlZE9ic2VydmVyczo6aXRl
cmF0b3IgaXQgPSBkLT5tX21hcHBlZE9ic2VydmVycy5maW5kKG5hbWUpOwogICAgIGlmIChpdCAh
PSBkLT5tX21hcHBlZE9ic2VydmVycy5lbmQoKSkKLSAgICAgICAgaXQtPnNlY29uZC5hcHBlbmQo
T2JqZWN0T2JzZXJ2ZXJQYWlyKGFuT2JqZWN0LCBvYnNlcnZlcikpOworICAgICAgICBpdC0+dmFs
dWUuYXBwZW5kKE9iamVjdE9ic2VydmVyUGFpcihhbk9iamVjdCwgb2JzZXJ2ZXIpKTsKICAgICBl
bHNlIHsKICAgICAgICAgT2JqZWN0T2JzZXJ2ZXJMaXN0IGxpc3Q7CiAgICAgICAgIGxpc3QuYXBw
ZW5kKE9iamVjdE9ic2VydmVyUGFpcihhbk9iamVjdCwgb2JzZXJ2ZXIpKTsKQEAgLTE5OCw3ICsx
OTgsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYk5vdGlmaWNhdGlvbkNlbnRlcjo6
cmVtb3ZlT2JzZXJ2ZXIoCiAgICAgaWYgKGl0ID09IGQtPm1fbWFwcGVkT2JzZXJ2ZXJzLmVuZCgp
KQogICAgICAgICByZXR1cm4gRV9GQUlMOwogCi0gICAgT2JqZWN0T2JzZXJ2ZXJMaXN0JiBvYnNl
cnZlckxpc3QgPSBpdC0+c2Vjb25kOworICAgIE9iamVjdE9ic2VydmVyTGlzdCYgb2JzZXJ2ZXJM
aXN0ID0gaXQtPnZhbHVlOwogICAgIE9ic2VydmVyTGlzdEl0ZXJhdG9yIGVuZCA9IG9ic2VydmVy
TGlzdC5lbmQoKTsKIAogICAgIGludCBpID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
d2luY2UvV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuY3BwIGIvU291cmNl
L1dlYktpdC93aW5jZS9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5jcHAK
aW5kZXggM2Y4YzkwN2M3MzlmMDhjZGI5OTE2ZTgzNmY5YjA4ZGU2Nzg0NTFjZi4uZDU1Nzk3MjMx
MTYxNTkxZDVmZGIxNzE1ODA0NDU4ZGI3ODJjOTFmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC93aW5jZS9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5jcHAKKysrIGIv
U291cmNlL1dlYktpdC93aW5jZS9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5D
RS5jcHAKQEAgLTk0LDggKzk0LDggQEAgdm9pZCBQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6Z2V0
UGx1Z2luSW5mbyhjb25zdCBQYWdlKiwgVmVjdG9yPFBsdWdpbkluZm8+JiBvdXQKICAgICAgICAg
Zm9yIChNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWltZVRvRGVz
Y3JpcHRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgTWltZUNs
YXNzSW5mbyBtaW1lOwogCi0gICAgICAgICAgICBtaW1lLnR5cGUgPSBpdC0+Zmlyc3Q7Ci0gICAg
ICAgICAgICBtaW1lLmRlc2MgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgbWltZS50eXBlID0g
aXQtPmtleTsKKyAgICAgICAgICAgIG1pbWUuZGVzYyA9IGl0LT52YWx1ZTsKICAgICAgICAgICAg
IG1pbWUuZXh0ZW5zaW9ucyA9IHBhY2thZ2UtPm1pbWVUb0V4dGVuc2lvbnMoKS5nZXQobWltZS50
eXBlKTsKIAogICAgICAgICAgICAgaW5mby5taW1lcy5hcHBlbmQobWltZSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50Q29kZXJzLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50Q29kZXJzLmgKaW5kZXggMDcwZjQ1
ODMwNzlmN2I0ZWViZmNmNGEyYTg4ODQ3ODZkOGM1NTQwYS4uNDdiZGRkZjY5YzljYWYzYjdhMjZl
ODIyYzc3MTM5YzQyNzBlZTc4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0v
Q29yZUlQQy9Bcmd1bWVudENvZGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0Nv
cmVJUEMvQXJndW1lbnRDb2RlcnMuaApAQCAtNzIsNiArNzIsMjkgQEAgdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVT4gc3RydWN0IEFyZ3VtZW50Q29kZXI8c3RkOjpwYWlyPFQsIFU+ID4g
ewogICAgIH0KIH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEtleVR5cGUsIHR5cGVuYW1lIE1hcHBl
ZFR5cGU+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdURjo6SGFzaE1hcEVudHJ5PEtleVR5cGUsIE1h
cHBlZFR5cGU+ID4geworICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqIGVu
Y29kZXIsIGNvbnN0IFdURjo6SGFzaE1hcEVudHJ5PEtleVR5cGUsIE1hcHBlZFR5cGU+JiBoYXNo
TWFwRW50cnkpCisgICAgeworICAgICAgICBlbmNvZGVyLT5lbmNvZGUoaGFzaE1hcEVudHJ5Lmtl
eSk7CisgICAgICAgIGVuY29kZXItPmVuY29kZShoYXNoTWFwRW50cnkudmFsdWUpOworICAgIH0K
KworICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIFdURjo6
SGFzaE1hcEVudHJ5PEtleVR5cGUsIE1hcHBlZFR5cGU+JiBoYXNoTWFwRW50cnkpCisgICAgewor
ICAgICAgICBLZXlUeXBlIGtleTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoa2V5KSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBNYXBwZWRUeXBlIHZhbHVlOwor
ICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAgICAgaGFzaE1hcEVudHJ5LmtleSA9IGtleTsKKyAgICAgICAgaGFzaE1h
cEVudHJ5LnZhbHVlID0gdmFsdWU7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK307CisK
IHRlbXBsYXRlPGJvb2wgZml4ZWRTaXplRWxlbWVudHMsIHR5cGVuYW1lIFQ+IHN0cnVjdCBWZWN0
b3JBcmd1bWVudENvZGVyOwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgVmVjdG9yQXJn
dW1lbnRDb2RlcjxmYWxzZSwgVD4gewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZv
cm0vQ29yZUlQQy9Db25uZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJ
UEMvQ29ubmVjdGlvbi5jcHAKaW5kZXggZjdjMzcyM2Y3ZWY3ZGQyMjkxZWE1OTE1MDYwMDkzZGMx
YzQxOGJiNS4uOTMyYWJiMjNjYjQwMjNlYzkzNjViN2ZlZjM5NDU0OWZmZDYwODYzMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Db25uZWN0aW9uLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uY3BwCkBAIC0xMDMs
MTIgKzEwMywxMiBAQCBQYXNzUmVmUHRyPENvbm5lY3Rpb246OlN5bmNNZXNzYWdlU3RhdGU+IENv
bm5lY3Rpb246OlN5bmNNZXNzYWdlU3RhdGU6OmdldE9yQ3JlYQogICAgIFN5bmNNZXNzYWdlU3Rh
dGVNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBzeW5jTWVzc2FnZVN0YXRlTWFwKCkuYWRkKHJ1bkxv
b3AsIDApOwogCiAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICBBU1NFUlQo
cmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOwotICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9y
LT5zZWNvbmQ7CisgICAgICAgIEFTU0VSVChyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAgICAgfQogCiAgICAgUmVmUHRyPFN5
bmNNZXNzYWdlU3RhdGU+IHN5bmNNZXNzYWdlU3RhdGUgPSBhZG9wdFJlZihuZXcgU3luY01lc3Nh
Z2VTdGF0ZShydW5Mb29wKSk7Ci0gICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBzeW5jTWVz
c2FnZVN0YXRlLmdldCgpOworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBzeW5jTWVzc2Fn
ZVN0YXRlLmdldCgpOwogCiAgICAgcmV0dXJuIHN5bmNNZXNzYWdlU3RhdGUucmVsZWFzZSgpOwog
fQpAQCAtMzYzLDEwICszNjMsMTAgQEAgUGFzc093blB0cjxBcmd1bWVudERlY29kZXI+IENvbm5l
Y3Rpb246OndhaXRGb3JNZXNzYWdlKE1lc3NhZ2VJRCBtZXNzYWdlSUQsIHVpbnQKICAgICAgICAg
TXV0ZXhMb2NrZXIgbG9ja2VyKG1fd2FpdEZvck1lc3NhZ2VNdXRleCk7CiAKICAgICAgICAgSGFz
aE1hcDxzdGQ6OnBhaXI8dW5zaWduZWQsIHVpbnQ2NF90PiwgQXJndW1lbnREZWNvZGVyKj46Oml0
ZXJhdG9yIGl0ID0gbV93YWl0Rm9yTWVzc2FnZU1hcC5maW5kKG1lc3NhZ2VBbmREZXN0aW5hdGlv
bik7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kKSB7CisgICAgICAgIGlmIChpdC0+dmFsdWUpIHsK
ICAgICAgICAgICAgIC8vIEZJWE1FOiBtX3dhaXRGb3JNZXNzYWdlTWFwIHNob3VsZCByZWFsbHkg
aG9sZCBPd25QdHJzIHRvCiAgICAgICAgICAgICAvLyBBcmd1bWVudERlY29kZXJzLCBidXQgSGFz
aE1hcCBkb2Vzbid0IGN1cnJlbnRseSBzdXBwb3J0IE93blB0cnMuCi0gICAgICAgICAgICBPd25Q
dHI8QXJndW1lbnREZWNvZGVyPiBhcmd1bWVudHMgPSBhZG9wdFB0cihpdC0+c2Vjb25kKTsKKyAg
ICAgICAgICAgIE93blB0cjxBcmd1bWVudERlY29kZXI+IGFyZ3VtZW50cyA9IGFkb3B0UHRyKGl0
LT52YWx1ZSk7CiAgICAgICAgICAgICBtX3dhaXRGb3JNZXNzYWdlTWFwLnJlbW92ZShpdCk7CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIHJldHVybiBhcmd1bWVudHMucmVsZWFzZSgpOwpAQCAt
NTQwLDggKzU0MCw4IEBAIHZvaWQgQ29ubmVjdGlvbjo6cHJvY2Vzc0luY29taW5nTWVzc2FnZShN
ZXNzYWdlSUQgbWVzc2FnZUlELCBQYXNzT3duUHRyPEFyZ3VtZW50CiAgICAgICAgIAogICAgICAg
ICBIYXNoTWFwPHN0ZDo6cGFpcjx1bnNpZ25lZCwgdWludDY0X3Q+LCBBcmd1bWVudERlY29kZXIq
Pjo6aXRlcmF0b3IgaXQgPSBtX3dhaXRGb3JNZXNzYWdlTWFwLmZpbmQoc3RkOjptYWtlX3BhaXIo
bWVzc2FnZUlELnRvSW50KCksIGluY29taW5nTWVzc2FnZS5kZXN0aW5hdGlvbklEKCkpKTsKICAg
ICAgICAgaWYgKGl0ICE9IG1fd2FpdEZvck1lc3NhZ2VNYXAuZW5kKCkpIHsKLSAgICAgICAgICAg
IGl0LT5zZWNvbmQgPSBpbmNvbWluZ01lc3NhZ2UucmVsZWFzZUFyZ3VtZW50cygpLmxlYWtQdHIo
KTsKLSAgICAgICAgICAgIEFTU0VSVChpdC0+c2Vjb25kKTsKKyAgICAgICAgICAgIGl0LT52YWx1
ZSA9IGluY29taW5nTWVzc2FnZS5yZWxlYXNlQXJndW1lbnRzKCkubGVha1B0cigpOworICAgICAg
ICAgICAgQVNTRVJUKGl0LT52YWx1ZSk7CiAgICAgICAgIAogICAgICAgICAgICAgbV93YWl0Rm9y
TWVzc2FnZUNvbmRpdGlvbi5zaWduYWwoKTsKICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2d0ay9Xb3JrUXVldWVHdGsuY3BwIGIvU291cmNl
L1dlYktpdDIvUGxhdGZvcm0vZ3RrL1dvcmtRdWV1ZUd0ay5jcHAKaW5kZXggMWRmYWI4M2NjZmIy
NGM5ZjAwZWU0MGQyZGFhMWM5NWIxNjM4MmE0My4uNjg4NWQ0ODViZDExNmQzMjhkZWNkMDJhYWY1
NGM5MTg3ODJiMmYxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vZ3RrL1dv
cmtRdWV1ZUd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vZ3RrL1dvcmtRdWV1
ZUd0ay5jcHAKQEAgLTE2Niw3ICsxNjYsNyBAQCB2b2lkIFdvcmtRdWV1ZTo6cmVnaXN0ZXJFdmVu
dFNvdXJjZUhhbmRsZXIoaW50IGZpbGVEZXNjcmlwdG9yLCBpbnQgY29uZGl0aW9uLCBjbwogICAg
ICAgICBWZWN0b3I8RXZlbnRTb3VyY2UqPiBzb3VyY2VzOwogICAgICAgICBFdmVudFNvdXJjZUl0
ZXJhdG9yIGl0ID0gbV9ldmVudFNvdXJjZXMuZmluZChmaWxlRGVzY3JpcHRvcik7CiAgICAgICAg
IGlmIChpdCAhPSBtX2V2ZW50U291cmNlcy5lbmQoKSkgCi0gICAgICAgICAgICBzb3VyY2VzID0g
aXQtPnNlY29uZDsKKyAgICAgICAgICAgIHNvdXJjZXMgPSBpdC0+dmFsdWU7CiAKICAgICAgICAg
c291cmNlcy5hcHBlbmQoZXZlbnRTb3VyY2UpOwogICAgICAgICBtX2V2ZW50U291cmNlcy5zZXQo
ZmlsZURlc2NyaXB0b3IsIHNvdXJjZXMpOwpAQCAtMTg2LDcgKzE4Niw3IEBAIHZvaWQgV29ya1F1
ZXVlOjp1bnJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKGludCBmaWxlRGVzY3JpcHRvcikKICAg
ICBBU1NFUlQobV9ldmVudFNvdXJjZXMuY29udGFpbnMoZmlsZURlc2NyaXB0b3IpKTsKIAogICAg
IGlmIChpdCAhPSBtX2V2ZW50U291cmNlcy5lbmQoKSkgewotICAgICAgICBWZWN0b3I8RXZlbnRT
b3VyY2UqPiBzb3VyY2VzID0gaXQtPnNlY29uZDsKKyAgICAgICAgVmVjdG9yPEV2ZW50U291cmNl
Kj4gc291cmNlcyA9IGl0LT52YWx1ZTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHNvdXJjZXMuc2l6ZSgpOyBpKyspCiAgICAgICAgICAgICBzb3VyY2VzW2ldLT5jYW5jZWwoKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vbWFjL1dvcmtRdWV1ZU1hYy5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9tYWMvV29ya1F1ZXVlTWFjLmNwcAppbmRleCBh
ZTQ3M2VlNWNjODRlNTg0MjliMDQzOWNjZDkyMWFjMmM0OTJmZmFhLi42ZTU0Y2VlMGI3MDk4NDBh
NTRmNzZjZGFhNDI0ZmVlYjQ2MjkwOWIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybS9tYWMvV29ya1F1ZXVlTWFjLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9t
YWMvV29ya1F1ZXVlTWFjLmNwcApAQCAtMTUzLDcgKzE1Myw3IEBAIHZvaWQgV29ya1F1ZXVlOjp1
bnJlZ2lzdGVyTWFjaFBvcnRFdmVudEhhbmRsZXIobWFjaF9wb3J0X3QgbWFjaFBvcnQpCiAgICAg
CiAgICAgQVNTRVJUKG1fZXZlbnRTb3VyY2VzLmNvbnRhaW5zKG1hY2hQb3J0KSk7CiAKLSAgICBF
dmVudFNvdXJjZSogZXZlbnRTb3VyY2UgPSBpdC0+c2Vjb25kOworICAgIEV2ZW50U291cmNlKiBl
dmVudFNvdXJjZSA9IGl0LT52YWx1ZTsKICAgICAvLyBDYW5jZWwgYW5kIHJlbGVhc2UgdGhlIHNv
dXJjZS4gSXQgd2lsbCBiZSBkZWxldGVkIGluIGl0cyBmaW5hbGl6ZSBoYW5kbGVyLgogICAgIGRp
c3BhdGNoX3NvdXJjZV9jYW5jZWwoZXZlbnRTb3VyY2UtPmRpc3BhdGNoU291cmNlKCkpOwogICAg
IGRpc3BhdGNoX3JlbGVhc2UoZXZlbnRTb3VyY2UtPmRpc3BhdGNoU291cmNlKCkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1BsdWdpbnMvTlBSZW1vdGVPYmplY3RNYXAuY3Bw
IGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1BsdWdpbnMvTlBSZW1vdGVPYmplY3RNYXAuY3BwCmlu
ZGV4IDc2NDFhZjVlOGM4OTJkMWQzN2VlOTZkYTliN2U2MDU4OTk3M2U4OGEuLmI1ZWMyZDlkYTM5
ZjI2ZGNiNDMyMGQ5NWUwM2YyZmNhZTRlN2Q3ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9QbHVnaW5zL05QUmVtb3RlT2JqZWN0TWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvUGx1Z2lucy9OUFJlbW90ZU9iamVjdE1hcC5jcHAKQEAgLTIwMCw3ICsyMDAsNyBA
QCB2b2lkIE5QUmVtb3RlT2JqZWN0TWFwOjpwbHVnaW5EZXN0cm95ZWQoUGx1Z2luKiBwbHVnaW4p
CiAKICAgICAvLyBHYXRoZXIgdGhlIHJlY2VpdmVycyBhc3NvY2lhdGVkIHdpdGggdGhpcyBwbHVn
LWluLgogICAgIGZvciAoSGFzaE1hcDx1aW50NjRfdCwgTlBPYmplY3RNZXNzYWdlUmVjZWl2ZXIq
Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3JlZ2lzdGVyZWROUE9iamVjdHMuYmVnaW4oKSwgZW5k
ID0gbV9yZWdpc3RlcmVkTlBPYmplY3RzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgTlBPYmplY3RNZXNzYWdlUmVjZWl2ZXIqIG5wT2JqZWN0TWVzc2FnZVJlY2VpdmVyID0gaXQt
PnNlY29uZDsKKyAgICAgICAgTlBPYmplY3RNZXNzYWdlUmVjZWl2ZXIqIG5wT2JqZWN0TWVzc2Fn
ZVJlY2VpdmVyID0gaXQtPnZhbHVlOwogICAgICAgICBpZiAobnBPYmplY3RNZXNzYWdlUmVjZWl2
ZXItPnBsdWdpbigpID09IHBsdWdpbikKICAgICAgICAgICAgIG1lc3NhZ2VSZWNlaXZlcnMuYXBw
ZW5kKG5wT2JqZWN0TWVzc2FnZVJlY2VpdmVyKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvVXNlck1lc3NhZ2VDb2RlcnMuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9Vc2VyTWVzc2FnZUNvZGVycy5oCmluZGV4IGFjZTcyZmQyZTMzZTNiYzExN2ZjMmZhNDU1ZjE1
ZDg3NzdmYzAwM2YuLjU3YzBjMTZiMTJhMGU1MTZkOTk3MTU2OGEyOTM0OWE2OTk3N2UzYzUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Vc2VyTWVzc2FnZUNvZGVycy5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Vc2VyTWVzc2FnZUNvZGVycy5oCkBAIC05Myw4ICs5Myw4
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIEltbXV0YWJsZURpY3Rpb25hcnk6Ok1hcFR5cGU6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbWFwLmJlZ2luKCk7CiAgICAgICAgICAgICBJbW11dGFibGVEaWN0
aW9uYXJ5OjpNYXBUeXBlOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAuZW5kKCk7CiAgICAgICAg
ICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAgZW5jb2Rlci0+
ZW5jb2RlKGl0LT5maXJzdCk7Ci0gICAgICAgICAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKE93bmVy
KGl0LT5zZWNvbmQuZ2V0KCkpKTsKKyAgICAgICAgICAgICAgICBlbmNvZGVyLT5lbmNvZGUoaXQt
PmtleSk7CisgICAgICAgICAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKE93bmVyKGl0LT52YWx1ZS5n
ZXQoKSkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcmVmZXJlbmNlc1N0b3Jl
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcmVmZXJlbmNlc1N0b3JlLmNwcAppbmRl
eCA4NjY4YmVjMGMwYTRmYzgxMDE5ZTc3NzBkMDYwZDMyNWFjYmEzNWJhLi45Nzg0ZTVmZDgxMGM1
ODQ2ZTIyODYwOTg0YjQzN2UxNTQ5OGU5YmMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVk
L1dlYlByZWZlcmVuY2VzU3RvcmUuY3BwCkBAIC0xNTEsNyArMTUxLDcgQEAgc3RhdGljIHR5cGVu
YW1lIE1hcFR5cGU6Ok1hcHBlZFR5cGUgdmFsdWVGb3JLZXkoY29uc3QgTWFwVHlwZSYgbWFwLCBj
b25zdCB0eXBlbmEKIHsKICAgICB0eXBlbmFtZSBNYXBUeXBlOjpjb25zdF9pdGVyYXRvciBpdCA9
IG1hcC5maW5kKGtleSk7CiAgICAgaWYgKGl0ICE9IG1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJu
IGl0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBpdC0+dmFsdWU7CiAKICAgICByZXR1cm4gZGVm
YXVsdFZhbHVlRm9yS2V5PHR5cGVuYW1lIE1hcFR5cGU6Ok1hcHBlZFR5cGU+KGtleSk7CiB9CkBA
IC0xODcsNyArMTg3LDcgQEAgYm9vbCBXZWJQcmVmZXJlbmNlc1N0b3JlOjpnZXRCb29sVmFsdWVG
b3JLZXkoY29uc3QgU3RyaW5nJiBrZXkpIGNvbnN0CiAgICAgLy8gRklYTUU6IEV4dGVuZCBvdmVy
cmlkaW5nIHRvIG90aGVyIGtleSB0eXBlcyB1c2VkIGZyb20gTGF5b3V0VGVzdENvbnRyb2xsZXIu
CiAgICAgQm9vbE92ZXJyaWRlc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBib29sVGVzdFJ1bm5l
ck92ZXJyaWRlc01hcCgpLmZpbmQoa2V5KTsKICAgICBpZiAoaXQgIT0gYm9vbFRlc3RSdW5uZXJP
dmVycmlkZXNNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAg
IHJldHVybiBpdC0+dmFsdWU7CiAgICAgcmV0dXJuIHZhbHVlRm9yS2V5KG1fYm9vbFZhbHVlcywg
a2V5KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9XZWJDb3Jl
QXJndW1lbnRDb2RlcnNHdGsuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9XZWJDb3Jl
QXJndW1lbnRDb2RlcnNHdGsuY3BwCmluZGV4IDlkNmUyNWM2NmQ4NmIzZTJmMWQ5NDM3NDM3YmEy
ZmFiNDYwMjVhM2IuLjQxMzcwYmFlNzM5YTJlMDc2NjIzNjEwOWJkNjAzODk5NGFiYzJkMDEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvV2ViQ29yZUFyZ3VtZW50Q29kZXJz
R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL1dlYkNvcmVBcmd1bWVudENv
ZGVyc0d0ay5jcHAKQEAgLTE0NCw3ICsxNDQsNyBAQCBib29sIEFyZ3VtZW50Q29kZXI8UmVzb3Vy
Y2VSZXNwb25zZT46OmRlY29kZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIFJlc291cmNlUgog
ICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGhlYWRlcnMpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGhlYWRlcnMuYmVn
aW4oKSwgZW5kID0gaGVhZGVycy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICByZXNw
b25zZS5zZXRIVFRQSGVhZGVyRmllbGQoaXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsKKyAgICAgICAg
cmVzcG9uc2Uuc2V0SFRUUEhlYWRlckZpZWxkKGl0LT5rZXksIGl0LT52YWx1ZSk7CiAKICAgICB1
aW50MzJfdCBzb3VwTWVzc2FnZUZsYWdzOwogICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHNvdXBN
ZXNzYWdlRmxhZ3MpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9XZWJD
b3JlQXJndW1lbnRDb2RlcnNNYWMubW0gYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1dlYkNv
cmVBcmd1bWVudENvZGVyc01hYy5tbQppbmRleCAxOTZhYjExYzdhNzQzMTA3ZDM4MDBlMWZmOGZh
NWJlMWYyYjNiODE4Li4wZjlkM2Q4YTNiZmI3Mzc0M2IzOTMzNTMzNWRjNWY1OGMxZDE0NzgwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1dlYkNvcmVBcmd1bWVudENvZGVy
c01hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1dlYkNvcmVBcmd1bWVudENv
ZGVyc01hYy5tbQpAQCAtMTgzLDcgKzE4Myw3IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxSZXNvdXJj
ZUVycm9yPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgUmVzb3VyY2VFcnJvCiAg
ICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gc3RyaW5nVXNl
ckluZm9NYXAuYmVnaW4oKTsKICAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gc3RyaW5nVXNlckluZm9NYXAuZW5kKCk7CiAgICAgZm9yICg7IGl0ICE9IGVu
ZDsgKytpdCkKLSAgICAgICAgW3VzZXJJbmZvIHNldE9iamVjdDpuc1N0cmluZyhpdC0+c2Vjb25k
KSBmb3JLZXk6bnNTdHJpbmcoaXQtPmZpcnN0KV07CisgICAgICAgIFt1c2VySW5mbyBzZXRPYmpl
Y3Q6bnNTdHJpbmcoaXQtPnZhbHVlKSBmb3JLZXk6bnNTdHJpbmcoaXQtPmtleSldOwogCiAgICAg
aWYgKGNlcnRpZmljYXRlLmNlcnRpZmljYXRlQ2hhaW4oKSkKICAgICAgICAgW3VzZXJJbmZvIHNl
dE9iamVjdDooTlNBcnJheSAqKWNlcnRpZmljYXRlLmNlcnRpZmljYXRlQ2hhaW4oKSBmb3JLZXk6
QCJOU0Vycm9yUGVlckNlcnRpZmljYXRlQ2hhaW5LZXkiXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9xdC9Bcmd1bWVudENvZGVyc1F0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9xdC9Bcmd1bWVudENvZGVyc1F0LmNwcAppbmRleCBjODliZjQ0ZjE3MTkwYjAyYzQxMTJi
Y2JlZDZlMGM0MWZhM2M2NzVmLi5hNDM5Y2FmZjFlNDg4ZTEwMmM1NTBhZDA0ZjM0NmQ1OTk2ZGQx
ODkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvQXJndW1lbnRDb2RlcnNR
dC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL3F0L0FyZ3VtZW50Q29kZXJzUXQuY3Bw
CkBAIC04Niw4ICs4Niw4IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpEcmFnRGF0YT46
OmRlY29kZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIERyYWdEYXRhCiAgICAgICAgIE1JTUVE
YXRhSGFzaE1hcDo6aXRlcmF0b3IgaXQgPSBtYXAuYmVnaW4oKTsKICAgICAgICAgTUlNRURhdGFI
YXNoTWFwOjppdGVyYXRvciBlbmQgPSBtYXAuZW5kKCk7CiAgICAgICAgIGZvciAoOyBpdCAhPSBl
bmQ7ICsraXQpIHsKLSAgICAgICAgICAgIFFCeXRlQXJyYXkgYnl0ZXMoKGNoYXIqKWl0LT5zZWNv
bmQuZGF0YSgpLCBpdC0+c2Vjb25kLnNpemUoKSk7Ci0gICAgICAgICAgICBtaW1lRGF0YS0+c2V0
RGF0YShpdC0+Zmlyc3QsIGJ5dGVzKTsKKyAgICAgICAgICAgIFFCeXRlQXJyYXkgYnl0ZXMoKGNo
YXIqKWl0LT52YWx1ZS5kYXRhKCksIGl0LT52YWx1ZS5zaXplKCkpOworICAgICAgICAgICAgbWlt
ZURhdGEtPnNldERhdGEoaXQtPmtleSwgYnl0ZXMpOwogICAgICAgICB9CiAgICAgfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCmlu
ZGV4IDFiNDNlYTUzNmMxZGY0MjhmYmI2MDM0YzExMjQ1YzZhMjEwNWU1NWMuLjJiNjJhMWY2MTAy
NzljMThhOTE5MmJlZmE5MjQ4N2YzZGQxMDZlMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCkBAIC0xNzE1LDcgKzE3MTUsNyBA
QCBHTGlzdCogd2Via2l0X3dlYl92aWV3X2dldF9zdWJyZXNvdXJjZXMoV2ViS2l0V2ViVmlldyog
d2ViVmlldykKICAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogcHJpdiA9IHdlYlZpZXctPnByaXY7
CiAgICAgUmVzb3VyY2VzTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBwcml2LT5zdWJyZXNvdXJj
ZXNNYXAuZW5kKCk7CiAgICAgZm9yIChSZXNvdXJjZXNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
cHJpdi0+c3VicmVzb3VyY2VzTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAg
c3VicmVzb3VyY2VzID0gZ19saXN0X3ByZXBlbmQoc3VicmVzb3VyY2VzLCBpdC0+c2Vjb25kLmdl
dCgpKTsKKyAgICAgICAgc3VicmVzb3VyY2VzID0gZ19saXN0X3ByZXBlbmQoc3VicmVzb3VyY2Vz
LCBpdC0+dmFsdWUuZ2V0KCkpOwogCiAgICAgcmV0dXJuIGdfbGlzdF9yZXZlcnNlKHN1YnJlc291
cmNlcyk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9X
S1ByaW50aW5nVmlldy5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLUHJp
bnRpbmdWaWV3Lm1tCmluZGV4IDMxMjU4ZjIwMWI5ODI2ODQwMzkwNDhiNDA4YzZiMzcwNDU3MGE4
NTcuLjI0ZTczYzlkYTAzZTkwMDZjMWRiYmI1ZDNlYWIxOTliN2RhM2Q4ZWQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLUHJpbnRpbmdWaWV3Lm1tCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLUHJpbnRpbmdWaWV3Lm1tCkBAIC0x
OTMsOCArMTkzLDggQEAgc3RhdGljIEJPT0wgaXNGb3JjaW5nUHJldmlld1VwZGF0ZTsKIC0gKHVp
bnQ2NF90KV9leHBlY3RlZFByZXZpZXdDYWxsYmFja0ZvclJlY3Q6KGNvbnN0IEludFJlY3QmKXJl
Y3QKIHsKICAgICBmb3IgKEhhc2hNYXA8dWludDY0X3QsIFdlYkNvcmU6OkludFJlY3Q+OjppdGVy
YXRvciBpdGVyID0gX2V4cGVjdGVkUHJldmlld0NhbGxiYWNrcy5iZWdpbigpOyBpdGVyICE9IF9l
eHBlY3RlZFByZXZpZXdDYWxsYmFja3MuZW5kKCk7ICsraXRlcikgewotICAgICAgICBpZiAoaXRl
ci0+c2Vjb25kICA9PSByZWN0KQotICAgICAgICAgICAgcmV0dXJuIGl0ZXItPmZpcnN0OworICAg
ICAgICBpZiAoaXRlci0+dmFsdWUgID09IHJlY3QpCisgICAgICAgICAgICByZXR1cm4gaXRlci0+
a2V5OwogICAgIH0KICAgICByZXR1cm4gMDsKIH0KQEAgLTIyOCw4ICsyMjgsOCBAQCBzdGF0aWMg
dm9pZCBwYWdlRGlkRHJhd1RvUERGKFdLRGF0YVJlZiBkYXRhUmVmLCBXS0Vycm9yUmVmLCB2b2lk
KiB1bnR5cGVkQ29udGV4dAogICAgICAgICAgICAgQVNTRVJUKFt2aWV3IF9pc1ByaW50aW5nUHJl
dmlld10pOwogCiAgICAgICAgICAgICBpZiAoZGF0YSkgewotICAgICAgICAgICAgICAgIEhhc2hN
YXA8V2ViQ29yZTo6SW50UmVjdCwgVmVjdG9yPHVpbnQ4X3Q+ID46OkFkZFJlc3VsdCBlbnRyeSA9
IHZpZXctPl9wYWdlUHJldmlld3MuYWRkKGl0ZXItPnNlY29uZCwgVmVjdG9yPHVpbnQ4X3Q+KCkp
OwotICAgICAgICAgICAgICAgIGVudHJ5Lml0ZXJhdG9yLT5zZWNvbmQuYXBwZW5kKGRhdGEtPmJ5
dGVzKCksIGRhdGEtPnNpemUoKSk7CisgICAgICAgICAgICAgICAgSGFzaE1hcDxXZWJDb3JlOjpJ
bnRSZWN0LCBWZWN0b3I8dWludDhfdD4gPjo6QWRkUmVzdWx0IGVudHJ5ID0gdmlldy0+X3BhZ2VQ
cmV2aWV3cy5hZGQoaXRlci0+dmFsdWUsIFZlY3Rvcjx1aW50OF90PigpKTsKKyAgICAgICAgICAg
ICAgICBlbnRyeS5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKGRhdGEtPmJ5dGVzKCksIGRhdGEtPnNp
emUoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB2aWV3LT5fZXhwZWN0ZWRQcmV2aWV3
Q2FsbGJhY2tzLnJlbW92ZShjb250ZXh0LT5jYWxsYmFja0lEKTsKICAgICAgICAgICAgIGJvb2wg
cmVjZWl2ZWRSZXNwb25zZVRvTGF0ZXN0UmVxdWVzdCA9IHZpZXctPl9sYXRlc3RFeHBlY3RlZFBy
ZXZpZXdDYWxsYmFjayA9PSBjb250ZXh0LT5jYWxsYmFja0lEOwpAQCAtNTIwLDcgKzUyMCw3IEBA
IHN0YXRpYyBDbGFzcyBwZGZEb2N1bWVudENsYXNzKCkKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgcGRmRGF0YUJ5dGVzID0gcGFnZVByZXZpZXdJ
dGVyYXRvci0+c2Vjb25kOworICAgIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgcGRmRGF0YUJ5dGVz
ID0gcGFnZVByZXZpZXdJdGVyYXRvci0+dmFsdWU7CiAgICAgUmV0YWluUHRyPE5TRGF0YT4gcGRm
RGF0YShBZG9wdE5TLCBbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczpwZGZEYXRhQnl0ZXMu
ZGF0YSgpIGxlbmd0aDpwZGZEYXRhQnl0ZXMuc2l6ZSgpXSk7CiAgICAgUmV0YWluUHRyPFBERkRv
Y3VtZW50PiBwZGZEb2N1bWVudChBZG9wdE5TLCBbW3BkZkRvY3VtZW50Q2xhc3MoKSBhbGxvY10g
aW5pdFdpdGhEYXRhOnBkZkRhdGEuZ2V0KCldKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9tYWMvV0tWaWV3Lm1tCmluZGV4IDYxZTNiNjA3NWQ0MDgyNWNhM2VhNzYzYzgwMGNhNmVi
MWMyMTg1YTkuLjFjZDgyMDI1MGFlOTE4YzIxM2I4NWYyYzY2OTI0YTcyYmM5Yzk5Y2UgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0KQEAgLTQxNCw3ICs0MTQs
NyBAQCBzdGF0aWMgU3RyaW5nIGNvbW1hbmROYW1lRm9yU2VsZWN0b3IoU0VMIHNlbGVjdG9yKQog
ICAgIHN0YXRpYyBjb25zdCBTZWxlY3Rvck5hbWVNYXAqIGV4Y2VwdGlvbk1hcCA9IGNyZWF0ZVNl
bGVjdG9yRXhjZXB0aW9uTWFwKCk7CiAgICAgU2VsZWN0b3JOYW1lTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IGV4Y2VwdGlvbk1hcC0+ZmluZChzZWxlY3Rvcik7CiAgICAgaWYgKGl0ICE9IGV4Y2Vw
dGlvbk1hcC0+ZW5kKCkpCi0gICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgICAgICByZXR1
cm4gaXQtPnZhbHVlOwogICAgIAogICAgIC8vIFJlbW92ZSB0aGUgdHJhaWxpbmcgY29sb24uCiAg
ICAgLy8gTm8gbmVlZCB0byBjYXBpdGFsaXplIHRoZSBjb21tYW5kIG5hbWUgc2luY2UgRWRpdG9y
IGNvbW1hbmQgbmFtZXMgYXJlCkBAIC03MjIsNyArNzIyLDcgQEAgc3RhdGljIHZvaWQgdmFsaWRh
dGVDb21tYW5kQ2FsbGJhY2soV0tTdHJpbmdSZWYgY29tbWFuZE5hbWUsIGJvb2wgaXNFbmFibGVk
LCBpbnQKIAogICAgIC8vIEFkZCB0aGlzIGl0ZW0gdG8gdGhlIHZlY3RvciBvZiBpdGVtcyBmb3Ig
YSBnaXZlbiBjb21tYW5kIHRoYXQgYXJlIGF3YWl0aW5nIHZhbGlkYXRpb24uCiAgICAgVmFsaWRh
dGlvbk1hcDo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IF9kYXRhLT5fdmFsaWRhdGlvbk1hcC5hZGQo
Y29tbWFuZE5hbWUsIFZhbGlkYXRpb25WZWN0b3IoKSk7Ci0gICAgYWRkUmVzdWx0Lml0ZXJhdG9y
LT5zZWNvbmQuYXBwZW5kKGl0ZW0pOworICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYXBw
ZW5kKGl0ZW0pOwogICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkgewogICAgICAgICAvLyBJ
ZiB3ZSBhcmUgbm90IGFscmVhZHkgYXdhaXRpbmcgdmFsaWRhdGlvbiBmb3IgdGhpcyBjb21tYW5k
LCBzdGFydCB0aGUgYXN5bmNocm9ub3VzIHZhbGlkYXRpb24gcHJvY2Vzcy4KICAgICAgICAgLy8g
RklYTUU6IFRoZW9yZXRpY2FsbHksIHRoZXJlIGlzIGEgcmFjZSBoZXJlOyB3aGVuIHdlIGdldCB0
aGUgYW5zd2VyIGl0IG1pZ2h0IGJlIG9sZCwgZnJvbSBhIHByZXZpb3VzIHRpbWUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9HZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0
TWFuYWdlclByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9HZW9sb2NhdGlvblBl
cm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcAppbmRleCA3MWJlYWY1YTVjMzFkNDU1Y2E4
ZDJiMWEyODgxY2EyYTcyNzE0N2IyLi4wZDQxNjM1NTQ2NWZmOTBkYTZiY2YwOGVjMzViODRjMTcx
YTUzOTk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvR2VvbG9jYXRpb25Q
ZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuY3BwCkBAIC00
Miw3ICs0Miw3IEBAIHZvaWQgR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94
eTo6aW52YWxpZGF0ZVJlcXVlc3RzKCkKICAgICBQZW5kaW5nUmVxdWVzdE1hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX3BlbmRpbmdSZXF1ZXN0cy5iZWdpbigpOwogICAgIFBlbmRpbmdSZXF1ZXN0
TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BlbmRpbmdSZXF1ZXN0cy5lbmQoKTsKICAgICBm
b3IgKDsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5pbnZhbGlkYXRlKCk7
CisgICAgICAgIGl0LT52YWx1ZS0+aW52YWxpZGF0ZSgpOwogCiAgICAgbV9wZW5kaW5nUmVxdWVz
dHMuY2xlYXIoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Ob3Rp
ZmljYXRpb25zL05vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Ob3RpZmljYXRpb25zL05vdGlmaWNhdGlvblBlcm1p
c3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcAppbmRleCAwNzkyMjk4NWU0NTY1ZjNjNzNjYWRj
M2EwY2Y0NTUyMTdjNjE5OTY5Li40YTBjNDc1MjkzN2I4NzJkNWRlMjY5YzkxNjk0ZTIyMThkMzIw
ZTFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTm90aWZpY2F0aW9ucy9O
b3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL05vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uUGVybWlzc2lvblJl
cXVlc3RNYW5hZ2VyUHJveHkuY3BwCkBAIC00Myw3ICs0Myw3IEBAIHZvaWQgTm90aWZpY2F0aW9u
UGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHk6OmludmFsaWRhdGVSZXF1ZXN0cygpCiAgICAg
UGVuZGluZ1JlcXVlc3RNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wZW5kaW5nUmVxdWVzdHMu
YmVnaW4oKTsKICAgICBQZW5kaW5nUmVxdWVzdE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9w
ZW5kaW5nUmVxdWVzdHMuZW5kKCk7CiAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAg
ICAgaXQtPnNlY29uZC0+aW52YWxpZGF0ZSgpOworICAgICAgICBpdC0+dmFsdWUtPmludmFsaWRh
dGUoKTsKICAgICAKICAgICBtX3BlbmRpbmdSZXF1ZXN0cy5jbGVhcigpOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc1Byb3h5LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NQcm94eS5j
cHAKaW5kZXggNDNmYTJmNGNiYjA0MDkyYjJjMTkwMmJlOTBjYTkxZThkNDQ2MDg3NS4uMzY5YWRl
MmRkYzI2NTMwM2Q4MDQyZDVlMzMyZjAyY2E0MDI0N2RjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc1Byb3h5LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzUHJveHkuY3BwCkBAIC0x
NDYsMTAgKzE0NiwxMCBAQCB2b2lkIFBsdWdpblByb2Nlc3NQcm94eTo6cGx1Z2luUHJvY2Vzc0Ny
YXNoZWRPckZhaWxlZFRvTGF1bmNoKCkKICAgICB9CiAKICAgICB3aGlsZSAoIW1fcGVuZGluZ0dl
dFNpdGVzUmVwbGllcy5pc0VtcHR5KCkpCi0gICAgICAgIGRpZEdldFNpdGVzV2l0aERhdGEoVmVj
dG9yPFN0cmluZz4oKSwgbV9wZW5kaW5nR2V0U2l0ZXNSZXBsaWVzLmJlZ2luKCktPmZpcnN0KTsK
KyAgICAgICAgZGlkR2V0U2l0ZXNXaXRoRGF0YShWZWN0b3I8U3RyaW5nPigpLCBtX3BlbmRpbmdH
ZXRTaXRlc1JlcGxpZXMuYmVnaW4oKS0+a2V5KTsKIAogICAgIHdoaWxlICghbV9wZW5kaW5nQ2xl
YXJTaXRlRGF0YVJlcGxpZXMuaXNFbXB0eSgpKQotICAgICAgICBkaWRDbGVhclNpdGVEYXRhKG1f
cGVuZGluZ0NsZWFyU2l0ZURhdGFSZXBsaWVzLmJlZ2luKCktPmZpcnN0KTsKKyAgICAgICAgZGlk
Q2xlYXJTaXRlRGF0YShtX3BlbmRpbmdDbGVhclNpdGVEYXRhUmVwbGllcy5iZWdpbigpLT5rZXkp
OwogCiAgICAgLy8gVGVsbCB0aGUgcGx1Zy1pbiBwcm9jZXNzIG1hbmFnZXIgdG8gZm9yZ2V0IGFi
b3V0IHRoaXMgcGx1Zy1pbiBwcm9jZXNzIHByb3h5LiBUaGlzIG1heSBjYXVzZSB1cyB0byBiZSBk
ZWxldGVkLgogICAgIG1fcGx1Z2luUHJvY2Vzc01hbmFnZXItPnJlbW92ZVBsdWdpblByb2Nlc3NQ
cm94eSh0aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250
ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmNwcAppbmRleCAy
ZWNmZjlkNGIwNzcxOTRiMDU4NWEzZjFkOTQyMDY1ZWEyZjJiNTVjLi4yZjMzMzhmNWI5MWZiZTBj
YWQyNDI1MGY3NDA3MjYzNjg0YmU1NmQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNv
bnRleHQuY3BwCkBAIC04NzAsNyArODcwLDcgQEAgc3RhdGljIFBhc3NSZWZQdHI8TXV0YWJsZURp
Y3Rpb25hcnk+IGNyZWF0ZURpY3Rpb25hcnlGcm9tSGFzaE1hcChjb25zdCBIYXNoTWFwPFMKICAg
ICBSZWZQdHI8TXV0YWJsZURpY3Rpb25hcnk+IHJlc3VsdCA9IE11dGFibGVEaWN0aW9uYXJ5Ojpj
cmVhdGUoKTsKICAgICBIYXNoTWFwPFN0cmluZywgdWludDY0X3Q+Ojpjb25zdF9pdGVyYXRvciBl
bmQgPSBtYXAuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPFN0cmluZywgdWludDY0X3Q+Ojpjb25z
dF9pdGVyYXRvciBpdCA9IG1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHJl
c3VsdC0+c2V0KGl0LT5maXJzdCwgUmVmUHRyPFdlYlVJbnQ2ND4oV2ViVUludDY0OjpjcmVhdGUo
aXQtPnNlY29uZCkpLmdldCgpKTsKKyAgICAgICAgcmVzdWx0LT5zZXQoaXQtPmtleSwgUmVmUHRy
PFdlYlVJbnQ2ND4oV2ViVUludDY0OjpjcmVhdGUoaXQtPnZhbHVlKSkuZ2V0KCkpOwogICAgIAog
ICAgIHJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViSWNvbkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJY29u
RGF0YWJhc2UuY3BwCmluZGV4IDgwMTZjZmJkNmU3ZTFmNzY4YWE4ZDE2YzI1ZWNjN2Y2YjA3OTM1
ZmMuLmVmMzMyZmEyYWM2ZDg3ZDc1ZjM1Y2Y0MWZlOGYwYzgwNzliNWIxNjEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJY29uRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJY29uRGF0YWJhc2UuY3BwCkBAIC0yNTAsMTQgKzI1MCwx
NCBAQCB2b2lkIFdlYkljb25EYXRhYmFzZTo6ZGlkRmluaXNoVVJMSW1wb3J0KCkKICAgICBIYXNo
TWFwPHVpbnQ2NF90LCBTdHJpbmc+OjppdGVyYXRvciBlbmQgPSBtX3BlbmRpbmdMb2FkRGVjaXNp
b25VUkxNYXAuZW5kKCk7CiAgICAgCiAgICAgZm9yICg7IGkgIT0gZW5kOyArK2kpIHsKLSAgICAg
ICAgTE9HKEljb25EYXRhYmFzZSwgIldLMiBVSVByb2Nlc3MgcGVyZm9ybWluZyBkZWxheWVkIGNh
bGxiYWNrIG9uIGNhbGxiYWNrIElEICVpIGZvciBwYWdlIHVybCAlcyIsIChpbnQpaS0+Zmlyc3Qs
IGktPnNlY29uZC5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIEljb25Mb2FkRGVjaXNpb24gZGVj
aXNpb24gPSBtX2ljb25EYXRhYmFzZUltcGwtPnN5bmNocm9ub3VzTG9hZERlY2lzaW9uRm9ySWNv
blVSTChpLT5zZWNvbmQsIDApOworICAgICAgICBMT0coSWNvbkRhdGFiYXNlLCAiV0syIFVJUHJv
Y2VzcyBwZXJmb3JtaW5nIGRlbGF5ZWQgY2FsbGJhY2sgb24gY2FsbGJhY2sgSUQgJWkgZm9yIHBh
Z2UgdXJsICVzIiwgKGludClpLT5rZXksIGktPnZhbHVlLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAg
ICAgSWNvbkxvYWREZWNpc2lvbiBkZWNpc2lvbiA9IG1faWNvbkRhdGFiYXNlSW1wbC0+c3luY2hy
b25vdXNMb2FkRGVjaXNpb25Gb3JJY29uVVJMKGktPnZhbHVlLCAwKTsKIAogICAgICAgICAvLyBE
ZWNpc2lvbnMgc2hvdWxkIG5ldmVyIGJlIHVua25vd24gYWZ0ZXIgdGhlIGluaXRhbCBpbXBvcnQg
aXMgY29tcGxldGUKICAgICAgICAgQVNTRVJUKGRlY2lzaW9uICE9IEljb25Mb2FkVW5rbm93bik7
CiAKICAgICAgICAgLy8gRklYTUUgKE11bHRpLVdlYlByb2Nlc3MpOiBXZSBuZWVkIHRvIGtub3cg
d2hpY2ggY29ubmVjdGlvbiB0byBzZW5kIHRoaXMgbWVzc2FnZSB0by4KLSAgICAgICAgbV93ZWJD
b250ZXh0LT5zZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYkljb25EYXRhYmFzZVByb3h5
OjpSZWNlaXZlZEljb25Mb2FkRGVjaXNpb24oc3RhdGljX2Nhc3Q8aW50PihkZWNpc2lvbiksIGkt
PmZpcnN0KSk7CisgICAgICAgIG1fd2ViQ29udGV4dC0+c2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3Nh
Z2VzOjpXZWJJY29uRGF0YWJhc2VQcm94eTo6UmVjZWl2ZWRJY29uTG9hZERlY2lzaW9uKHN0YXRp
Y19jYXN0PGludD4oZGVjaXNpb24pLCBpLT5rZXkpKTsKICAgICB9CiAgICAgCiAgICAgbV9wZW5k
aW5nTG9hZERlY2lzaW9uVVJMTWFwLmNsZWFyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVyLmNwcAppbmRleCBkNzc2Mjg3ZTAxZDc4OTFhNTM2
Mzk2MGUyYjEzNjI0YTVjMzc3ZTFkLi5kMzQzMjRiNTQyODRmNDIyNDBmZGYxNTEwZTkzYzUzMWU3
NzQ0ZjM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViTGF5ZXJUcmVl
UmVuZGVyZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJMYXllclRyZWVS
ZW5kZXJlci5jcHAKQEAgLTE3Miw3ICsxNzIsNyBAQCB2b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVy
OjpzeW5jTGF5ZXJQYXJhbWV0ZXJzKGNvbnN0IFdlYkxheWVySW5mbyYgbGF5ZXJJbmZvKQogICAg
IFdlYkxheWVySUQgaWQgPSBsYXllckluZm8uaWQ7CiAgICAgZW5zdXJlTGF5ZXIoaWQpOwogICAg
IExheWVyTWFwOjppdGVyYXRvciBpdCA9IG1fbGF5ZXJzLmZpbmQoaWQpOwotICAgIEdyYXBoaWNz
TGF5ZXIqIGxheWVyID0gaXQtPnNlY29uZDsKKyAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IGl0
LT52YWx1ZTsKIAogICAgIGxheWVyLT5zZXROYW1lKGxheWVySW5mby5uYW1lKTsKIApAQCAtMzIz
LDcgKzMyMyw3IEBAIHZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmFzc2lnbkltYWdlVG9MYXll
cihHcmFwaGljc0xheWVyKiBsYXllciwgaW50NjRfdCBpbWFnCiAKICAgICBIYXNoTWFwPGludDY0
X3QsIFJlZlB0cjxUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlPiA+OjppdGVyYXRvciBpdCA9IG1f
ZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmZpbmQoaW1hZ2VJRCk7CiAgICAgQVNTRVJUKGl0ICE9
IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmVuZCgpKTsKLSAgICBsYXllci0+c2V0Q29udGVu
dHNUb01lZGlhKGl0LT5zZWNvbmQuZ2V0KCkpOworICAgIGxheWVyLT5zZXRDb250ZW50c1RvTWVk
aWEoaXQtPnZhbHVlLmdldCgpKTsKIH0KIAogdm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6Y29t
bWl0VGlsZU9wZXJhdGlvbnMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYlByb2Nlc3NQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vz
c1Byb3h5LmNwcAppbmRleCBlOGRmZDgxNjhjN2EyNzEyNjRhY2Y1YzcxZGQ5MDJjMGE3NDU1Yjg2
Li40YWIyNTQzMjhlNWQzNjU0ZjNjMWRjN2JjMTVlZmZlYzFlZTJkYTdjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcApAQCAtMjQ4LDkgKzI0OCw5IEBA
IGJvb2wgV2ViUHJvY2Vzc1Byb3h5OjpjaGVja1VSTFJlY2VpdmVkRnJvbVdlYlByb2Nlc3MoY29u
c3QgS1VSTCYgdXJsKQogICAgIC8vIEl0ZW1zIGluIGJhY2svZm9yd2FyZCBsaXN0IGhhdmUgYmVl
biBhbHJlYWR5IGNoZWNrZWQuCiAgICAgLy8gT25lIGNhc2Ugd2hlcmUgd2UgZG9uJ3QgaGF2ZSBz
YW5kYm94IGV4dGVuc2lvbnMgZm9yIGZpbGUgVVJMcyBpbiBiL2YgbGlzdCBpcyBpZiB0aGUgbGlz
dCBoYXMgYmVlbiByZWluc3RhdGVkIGFmdGVyIGEgY3Jhc2ggb3IgYSBicm93c2VyIHJlc3RhcnQu
CiAgICAgZm9yIChXZWJCYWNrRm9yd2FyZExpc3RJdGVtTWFwOjppdGVyYXRvciBpdGVyID0gbV9i
YWNrRm9yd2FyZExpc3RJdGVtTWFwLmJlZ2luKCksIGVuZCA9IG1fYmFja0ZvcndhcmRMaXN0SXRl
bU1hcC5lbmQoKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewotICAgICAgICBpZiAoS1VSTChLVVJM
KCksIGl0ZXItPnNlY29uZC0+dXJsKCkpLmZpbGVTeXN0ZW1QYXRoKCkgPT0gcGF0aCkKKyAgICAg
ICAgaWYgKEtVUkwoS1VSTCgpLCBpdGVyLT52YWx1ZS0+dXJsKCkpLmZpbGVTeXN0ZW1QYXRoKCkg
PT0gcGF0aCkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoS1VSTChLVVJM
KCksIGl0ZXItPnNlY29uZC0+b3JpZ2luYWxVUkwoKSkuZmlsZVN5c3RlbVBhdGgoKSA9PSBwYXRo
KQorICAgICAgICBpZiAoS1VSTChLVVJMKCksIGl0ZXItPnZhbHVlLT5vcmlnaW5hbFVSTCgpKS5m
aWxlU3lzdGVtUGF0aCgpID09IHBhdGgpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAKQEAgLTI3MywxNSArMjczLDE1IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5OjphZGRCYWNrRm9y
d2FyZEl0ZW0odWludDY0X3QgaXRlbUlELCBjb25zdCBTdHJpbmcmIG9yaWdpbmFsCiAKICAgICBX
ZWJCYWNrRm9yd2FyZExpc3RJdGVtTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9iYWNrRm9yd2Fy
ZExpc3RJdGVtTWFwLmFkZChpdGVtSUQsIDApOwogICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkg
ewotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IFdlYkJhY2tGb3J3YXJkTGlzdEl0
ZW06OmNyZWF0ZShvcmlnaW5hbFVSTCwgdXJsLCB0aXRsZSwgYmFja0ZvcndhcmREYXRhLmRhdGEo
KSwgYmFja0ZvcndhcmREYXRhLnNpemUoKSwgaXRlbUlEKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZSA9IFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW06OmNyZWF0ZShvcmlnaW5hbFVSTCwg
dXJsLCB0aXRsZSwgYmFja0ZvcndhcmREYXRhLmRhdGEoKSwgYmFja0ZvcndhcmREYXRhLnNpemUo
KSwgaXRlbUlEKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8vIFVwZGF0ZSBleGlz
dGluZyBpdGVtLgotICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLT5zZXRPcmlnaW5hbFVSTChv
cmlnaW5hbFVSTCk7Ci0gICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQtPnNldFVSTCh1cmwpOwot
ICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLT5zZXRUaXRsZSh0aXRsZSk7Ci0gICAgcmVzdWx0
Lml0ZXJhdG9yLT5zZWNvbmQtPnNldEJhY2tGb3J3YXJkRGF0YShiYWNrRm9yd2FyZERhdGEuZGF0
YSgpLCBiYWNrRm9yd2FyZERhdGEuc2l6ZSgpKTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVl
LT5zZXRPcmlnaW5hbFVSTChvcmlnaW5hbFVSTCk7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZS0+c2V0VVJMKHVybCk7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+c2V0VGl0bGUodGl0
bGUpOworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPnNldEJhY2tGb3J3YXJkRGF0YShiYWNr
Rm9yd2FyZERhdGEuZGF0YSgpLCBiYWNrRm9yd2FyZERhdGEuc2l6ZSgpKTsKIH0KIAogI2lmIEVO
QUJMRShQTFVHSU5fUFJPQ0VTUykKQEAgLTQ3Miw3ICs0NzIsNyBAQCBzaXplX3QgV2ViUHJvY2Vz
c1Byb3h5OjpmcmFtZUNvdW50SW5QYWdlKFdlYlBhZ2VQcm94eSogcGFnZSkgY29uc3QKIHsKICAg
ICBzaXplX3QgcmVzdWx0ID0gMDsKICAgICBmb3IgKEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxX
ZWJGcmFtZVByb3h5PiA+Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gbV9mcmFtZU1hcC5iZWdpbigp
OyBpdGVyICE9IG1fZnJhbWVNYXAuZW5kKCk7ICsraXRlcikgewotICAgICAgICBpZiAoaXRlci0+
c2Vjb25kLT5wYWdlKCkgPT0gcGFnZSkKKyAgICAgICAgaWYgKGl0ZXItPnZhbHVlLT5wYWdlKCkg
PT0gcGFnZSkKICAgICAgICAgICAgICsrcmVzdWx0OwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVyQmFja2luZ1N0
b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXllckJhY2tpbmdTdG9yZS5j
cHAKaW5kZXggM2Y4YThjODkyMjFhZDg0OTIyYmM1MzcyNGEyN2ZiZGM2ODI5YTMyNy4uMGVkZDRj
ZjIwZDc3NDE2MjU0MmI0ZGJkN2MxODFlMjZmMTM4YmZiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL3F0L0xheWVyQmFja2luZ1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJCYWNraW5nU3RvcmUuY3BwCkBAIC04MCwxNCArODAsMTQg
QEAgdm9pZCBMYXllckJhY2tpbmdTdG9yZTo6dXBkYXRlVGlsZShpbnQgaWQsIGNvbnN0IEludFJl
Y3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFIKIHsKICAgICBIYXNoTWFwPGludCwgTGF5ZXJCYWNr
aW5nU3RvcmVUaWxlPjo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmZpbmQoaWQpOwogICAgIEFTU0VS
VChpdCAhPSBtX3RpbGVzLmVuZCgpKTsKLSAgICBpdC0+c2Vjb25kLnNldEJhY2tCdWZmZXIodGFy
Z2V0UmVjdCwgc291cmNlUmVjdCwgYmFja0J1ZmZlcik7CisgICAgaXQtPnZhbHVlLnNldEJhY2tC
dWZmZXIodGFyZ2V0UmVjdCwgc291cmNlUmVjdCwgYmFja0J1ZmZlcik7CiB9CiAKIFBhc3NSZWZQ
dHI8Qml0bWFwVGV4dHVyZT4gTGF5ZXJCYWNraW5nU3RvcmU6OnRleHR1cmUoKSBjb25zdAogewog
ICAgIEhhc2hNYXA8aW50LCBMYXllckJhY2tpbmdTdG9yZVRpbGU+Ojpjb25zdF9pdGVyYXRvciBl
bmQgPSBtX3RpbGVzLmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDxpbnQsIExheWVyQmFja2luZ1N0
b3JlVGlsZT46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKLSAgICAgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IHRleHR1cmUgPSBpdC0+c2Vj
b25kLnRleHR1cmUoKTsKKyAgICAgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IHRleHR1cmUgPSBp
dC0+dmFsdWUudGV4dHVyZSgpOwogICAgICAgICBpZiAodGV4dHVyZSkKICAgICAgICAgICAgIHJl
dHVybiB0ZXh0dXJlOwogICAgIH0KQEAgLTEwMyw3ICsxMDMsNyBAQCB2b2lkIExheWVyQmFja2lu
Z1N0b3JlOjpwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVy
LCBjb25zdAogICAgIEhhc2hNYXA8aW50LCBMYXllckJhY2tpbmdTdG9yZVRpbGU+OjppdGVyYXRv
ciBlbmQgPSBtX3RpbGVzLmVuZCgpOwogICAgIEZsb2F0UmVjdCBjb3ZlcmVkUmVjdDsKICAgICBm
b3IgKEhhc2hNYXA8aW50LCBMYXllckJhY2tpbmdTdG9yZVRpbGU+OjppdGVyYXRvciBpdCA9IG1f
dGlsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIExheWVyQmFja2luZ1N0
b3JlVGlsZSYgdGlsZSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIExheWVyQmFja2luZ1N0b3JlVGls
ZSYgdGlsZSA9IGl0LT52YWx1ZTsKICAgICAgICAgaWYgKCF0aWxlLnRleHR1cmUoKSkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCkBAIC0xMzQsNyArMTM0LDcgQEAgdm9pZCBMYXllckJhY2tpbmdT
dG9yZTo6Y29tbWl0VGlsZU9wZXJhdGlvbnMoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlcikK
IAogICAgIEhhc2hNYXA8aW50LCBMYXllckJhY2tpbmdTdG9yZVRpbGU+OjppdGVyYXRvciB0aWxl
c0VuZCA9IG1fdGlsZXMuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPGludCwgTGF5ZXJCYWNraW5n
U3RvcmVUaWxlPjo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IHRpbGVzRW5k
OyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLnN3YXBCdWZmZXJzKHRleHR1cmVNYXBwZXIpOwor
ICAgICAgICBpdC0+dmFsdWUuc3dhcEJ1ZmZlcnModGV4dHVyZU1hcHBlcik7CiB9CiAKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvR2VvbG9jYXRpb24vR2VvbG9jYXRp
b25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9HZW9sb2NhdGlvbi9HZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5jcHAKaW5k
ZXggZDZiZGI4ZTE1MzE0NTBiMTJhYmM4MmQ4NmIyZmMwMTNmMTM1NDNiNy4uZmNhNzFhMWQwOTVm
ZWVmYWJhMDVhNmE3MjVmZGI0MzYzNTgxNGI2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9HZW9sb2NhdGlvbi9HZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdl
ci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9HZW9sb2NhdGlvbi9HZW9sb2Nh
dGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5jcHAKQEAgLTc0LDcgKzc0LDcgQEAgdm9pZCBH
ZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlcjo6Y2FuY2VsUmVxdWVzdEZvckdlb2xv
Y2F0aW9uKEdlb2xvY2F0aW8KICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9nZW9sb2NhdGlvblRv
SURNYXAucmVtb3ZlKGl0KTsKLSAgICBtX2lkVG9HZW9sb2NhdGlvbk1hcC5yZW1vdmUoaXQtPnNl
Y29uZCk7CisgICAgbV9pZFRvR2VvbG9jYXRpb25NYXAucmVtb3ZlKGl0LT52YWx1ZSk7CiB9CiAK
IHZvaWQgR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXI6OmRpZFJlY2VpdmVHZW9s
b2NhdGlvblBlcm1pc3Npb25EZWNpc2lvbih1aW50NjRfdCBnZW9sb2NhdGlvbklELCBib29sIGFs
bG93ZWQpCkBAIC04Myw3ICs4Myw3IEBAIHZvaWQgR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVz
dE1hbmFnZXI6OmRpZFJlY2VpdmVHZW9sb2NhdGlvblBlcm1pc3Npb25EZWNpc2lvCiAgICAgaWYg
KGl0ID09IG1faWRUb0dlb2xvY2F0aW9uTWFwLmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBHZW9sb2NhdGlvbiogZ2VvbG9jYXRpb24gPSBpdC0+c2Vjb25kOworICAgIEdlb2xvY2F0aW9u
KiBnZW9sb2NhdGlvbiA9IGl0LT52YWx1ZTsKICAgICBnZW9sb2NhdGlvbi0+c2V0SXNBbGxvd2Vk
KGFsbG93ZWQpOwogCiAgICAgbV9pZFRvR2VvbG9jYXRpb25NYXAucmVtb3ZlKGl0KTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVj
dGVkQnVuZGxlTm9kZUhhbmRsZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGUuY3BwCmluZGV4IDBjNDI5NWU2
MTJjZGQ3NmYwM2E1MzEzZDQ1ZTZjZWMxZmIxZTg1OTYuLjc3ZTAzMDkzZDVmZDBkOTY0MjRkMzE1
NGY3N2M5NGQ0MTk0YjE2ZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxlTm9kZUhhbmRsZS5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVO
b2RlSGFuZGxlLmNwcApAQCAtNjksMTAgKzY5LDEwIEBAIFBhc3NSZWZQdHI8SW5qZWN0ZWRCdW5k
bGVOb2RlSGFuZGxlPiBJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU6OmdldE9yQ3JlYXRlKE5vZGUq
CiAKICAgICBET01IYW5kbGVDYWNoZTo6QWRkUmVzdWx0IHJlc3VsdCA9IGRvbUhhbmRsZUNhY2hl
KCkuYWRkKG5vZGUsIDApOwogICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJl
dHVybiBQYXNzUmVmUHRyPEluamVjdGVkQnVuZGxlTm9kZUhhbmRsZT4ocmVzdWx0Lml0ZXJhdG9y
LT5zZWNvbmQpOworICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxJbmplY3RlZEJ1bmRsZU5vZGVI
YW5kbGU+KHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwogCiAgICAgUmVmUHRyPEluamVjdGVkQnVu
ZGxlTm9kZUhhbmRsZT4gbm9kZUhhbmRsZSA9IEluamVjdGVkQnVuZGxlTm9kZUhhbmRsZTo6Y3Jl
YXRlKG5vZGUpOwotICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gbm9kZUhhbmRsZS5nZXQo
KTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gbm9kZUhhbmRsZS5nZXQoKTsKICAgICBy
ZXR1cm4gbm9kZUhhbmRsZS5yZWxlYXNlKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxlUmFuZ2VIYW5k
bGUuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5q
ZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5jcHAKaW5kZXggMWI3NGYwMTI0MDA4ZGIzYzA3ODI4ZWE2
ZjZkMmMwNWFjMDU5YzMwNi4uZDYwMDBhYjkxMzMyOWNkNTdkYWIzZTNmZDY0MDE0Yzc2ZTk1MmRj
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9E
T00vSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5jcHAK
QEAgLTQ4LDEwICs0OCwxMCBAQCBQYXNzUmVmUHRyPEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU+
IEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OmdldE9yQ3JlYXRlKFJhbgogCiAgICAgRE9NSGFu
ZGxlQ2FjaGU6OkFkZFJlc3VsdCByZXN1bHQgPSBkb21IYW5kbGVDYWNoZSgpLmFkZChyYW5nZSwg
MCk7CiAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgcmV0dXJuIFBhc3NSZWZQ
dHI8SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZT4ocmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOwor
ICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlPihyZXN1
bHQuaXRlcmF0b3ItPnZhbHVlKTsKIAogICAgIFJlZlB0cjxJbmplY3RlZEJ1bmRsZVJhbmdlSGFu
ZGxlPiByYW5nZUhhbmRsZSA9IEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OmNyZWF0ZShyYW5n
ZSk7Ci0gICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSByYW5nZUhhbmRsZS5nZXQoKTsKKyAg
ICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gcmFuZ2VIYW5kbGUuZ2V0KCk7CiAgICAgcmV0dXJu
IHJhbmdlSGFuZGxlLnJlbGVhc2UoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9Ob3RpZmljYXRpb25zL1dlYk5vdGlmaWNhdGlvbk1hbmFnZXIuY3BwIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Ob3RpZmljYXRpb25zL1dlYk5vdGlmaWNhdGlvbk1hbmFn
ZXIuY3BwCmluZGV4IDI2ZTU0MDc0NGJkNTI3NGM5YjZkYWNlZWE1YmY5NGZhM2FlMDQ5NzMuLmI4
ZTNhNmVkNjY2MmYxZjEwZThiY2MwZDc4ODUzODJmZmRlZmQwYjcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvTm90aWZpY2F0aW9ucy9XZWJOb3RpZmljYXRpb25NYW5hZ2Vy
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05vdGlmaWNhdGlvbnMvV2ViTm90
aWZpY2F0aW9uTWFuYWdlci5jcHAKQEAgLTk5LDcgKzk5LDcgQEAgTm90aWZpY2F0aW9uQ2xpZW50
OjpQZXJtaXNzaW9uIFdlYk5vdGlmaWNhdGlvbk1hbmFnZXI6OnBvbGljeUZvck9yaWdpbihXZWJD
b3JlOjoKICAgICBBU1NFUlQoIW9yaWdpbi0+aXNVbmlxdWUoKSk7CiAgICAgSGFzaE1hcDxTdHJp
bmcsIGJvb2w+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGVybWlzc2lvbnNNYXAuZmluZChvcmln
aW4tPnRvUmF3U3RyaW5nKCkpOwogICAgIGlmIChpdCAhPSBtX3Blcm1pc3Npb25zTWFwLmVuZCgp
KQotICAgICAgICByZXR1cm4gaXQtPnNlY29uZCA/IE5vdGlmaWNhdGlvbkNsaWVudDo6UGVybWlz
c2lvbkFsbG93ZWQgOiBOb3RpZmljYXRpb25DbGllbnQ6OlBlcm1pc3Npb25EZW5pZWQ7CisgICAg
ICAgIHJldHVybiBpdC0+dmFsdWUgPyBOb3RpZmljYXRpb25DbGllbnQ6OlBlcm1pc3Npb25BbGxv
d2VkIDogTm90aWZpY2F0aW9uQ2xpZW50OjpQZXJtaXNzaW9uRGVuaWVkOwogI2VuZGlmCiAgICAg
CiAgICAgcmV0dXJuIE5vdGlmaWNhdGlvbkNsaWVudDo6UGVybWlzc2lvbk5vdEFsbG93ZWQ7CkBA
IC0xMTYsNyArMTE2LDcgQEAgYm9vbCBXZWJOb3RpZmljYXRpb25NYW5hZ2VyOjpzaG93KE5vdGlm
aWNhdGlvbiogbm90aWZpY2F0aW9uLCBXZWJQYWdlKiBwYWdlKQogICAgIG1fbm90aWZpY2F0aW9u
SURNYXAuc2V0KG5vdGlmaWNhdGlvbklELCBub3RpZmljYXRpb24pOwogICAgIAogICAgIE5vdGlm
aWNhdGlvbkNvbnRleHRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9ub3RpZmljYXRpb25Db250ZXh0TWFw
LmFkZChub3RpZmljYXRpb24tPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgVmVjdG9yPHVpbnQ2
NF90PigpKS5pdGVyYXRvcjsKLSAgICBpdC0+c2Vjb25kLmFwcGVuZChub3RpZmljYXRpb25JRCk7
CisgICAgaXQtPnZhbHVlLmFwcGVuZChub3RpZmljYXRpb25JRCk7CiAgICAgCiAgICAgbV9wcm9j
ZXNzLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2hvd05vdGlm
aWNhdGlvbihub3RpZmljYXRpb24tPnRpdGxlKCksIG5vdGlmaWNhdGlvbi0+Ym9keSgpLCBub3Rp
ZmljYXRpb24tPmljb25VUkwoKS5zdHJpbmcoKSwgbm90aWZpY2F0aW9uLT5yZXBsYWNlSWQoKSwg
bm90aWZpY2F0aW9uLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnNlY3VyaXR5T3JpZ2luKCkt
PnRvU3RyaW5nKCksIG5vdGlmaWNhdGlvbklEKSwgcGFnZS0+cGFnZUlEKCkpOwogICAgIHJldHVy
biB0cnVlOwpAQCAtMTQ2LDcgKzE0Niw3IEBAIHZvaWQgV2ViTm90aWZpY2F0aW9uTWFuYWdlcjo6
Y2xlYXJOb3RpZmljYXRpb25zKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqCiAgICAg
aWYgKGl0ID09IG1fbm90aWZpY2F0aW9uQ29udGV4dE1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJu
OwogICAgIAotICAgIFZlY3Rvcjx1aW50NjRfdD4mIG5vdGlmaWNhdGlvbklEcyA9IGl0LT5zZWNv
bmQ7CisgICAgVmVjdG9yPHVpbnQ2NF90PiYgbm90aWZpY2F0aW9uSURzID0gaXQtPnZhbHVlOwog
ICAgIG1fcHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJOb3RpZmljYXRp
b25NYW5hZ2VyUHJveHk6OkNsZWFyTm90aWZpY2F0aW9ucyhub3RpZmljYXRpb25JRHMpLCBwYWdl
LT5wYWdlSUQoKSk7CiAgICAgc2l6ZV90IGNvdW50ID0gbm90aWZpY2F0aW9uSURzLnNpemUoKTsK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKQEAgLTIyOCwxMCArMjI4
LDEwIEBAIHZvaWQgV2ViTm90aWZpY2F0aW9uTWFuYWdlcjo6cmVtb3ZlTm90aWZpY2F0aW9uRnJv
bUNvbnRleHRNYXAodWludDY0X3Qgbm90aWZpY2F0CiAgICAgLy8gVGhpcyBpcyBhIGhlbHBlciBm
dW5jdGlvbiBmb3IgbWFuYWdpbmcgdGhlIGhhc2ggbWFwcy4KICAgICBOb3RpZmljYXRpb25Db250
ZXh0TWFwOjppdGVyYXRvciBpdCA9IG1fbm90aWZpY2F0aW9uQ29udGV4dE1hcC5maW5kKG5vdGlm
aWNhdGlvbi0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKICAgICBBU1NFUlQoaXQgIT0gbV9u
b3RpZmljYXRpb25Db250ZXh0TWFwLmVuZCgpKTsKLSAgICBzaXplX3QgaW5kZXggPSBpdC0+c2Vj
b25kLmZpbmQobm90aWZpY2F0aW9uSUQpOworICAgIHNpemVfdCBpbmRleCA9IGl0LT52YWx1ZS5m
aW5kKG5vdGlmaWNhdGlvbklEKTsKICAgICBBU1NFUlQoaW5kZXggIT0gbm90Rm91bmQpOwotICAg
IGl0LT5zZWNvbmQucmVtb3ZlKGluZGV4KTsKLSAgICBpZiAoaXQtPnNlY29uZC5pc0VtcHR5KCkp
CisgICAgaXQtPnZhbHVlLnJlbW92ZShpbmRleCk7CisgICAgaWYgKGl0LT52YWx1ZS5pc0VtcHR5
KCkpCiAgICAgICAgIG1fbm90aWZpY2F0aW9uQ29udGV4dE1hcC5yZW1vdmUoaXQpOwogfQogI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2Nh
cGUvTlBSdW50aW1lT2JqZWN0TWFwLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1
Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3BwCmluZGV4IDAxZTczZjk1ZmViYzZj
ODY3ZDBmNDBmMDAxMjlkMTE4ODQzMjBjYzUuLmI4NGZiMjY1ZjI4YmM5M2QwNTg4MzU3NzlmODE2
ZTU4MTllZmQxMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lu
cy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3BwCkBAIC0yMTEs
NyArMjExLDcgQEAgdm9pZCBOUFJ1bnRpbWVPYmplY3RNYXA6OmludmFsaWRhdGUoKQogICAgIFZl
Y3RvcjxOUE9iamVjdCo+IG9iamVjdHM7CiAKICAgICBmb3IgKEhhc2hNYXA8TlBPYmplY3QqLCBK
U0M6OldlYWs8SlNOUE9iamVjdD4gPjo6aXRlcmF0b3IgcHRyID0gbV9qc05QT2JqZWN0cy5iZWdp
bigpLCBlbmQgPSBtX2pzTlBPYmplY3RzLmVuZCgpOyBwdHIgIT0gZW5kOyArK3B0cikKLSAgICAg
ICAgb2JqZWN0cy5hcHBlbmQocHRyLT5zZWNvbmQtPmxlYWtOUE9iamVjdCgpKTsKKyAgICAgICAg
b2JqZWN0cy5hcHBlbmQocHRyLT52YWx1ZS0+bGVha05QT2JqZWN0KCkpOwogCiAgICAgbV9qc05Q
T2JqZWN0cy5jbGVhcigpOwogCkBAIC0yOTIsOCArMjkyLDggQEAgdm9pZCBOUFJ1bnRpbWVPYmpl
Y3RNYXA6OmZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiBj
b250ZXgKIHsKICAgICBIYXNoTWFwPE5QT2JqZWN0KiwgSlNDOjpXZWFrPEpTTlBPYmplY3Q+ID46
Oml0ZXJhdG9yIGZvdW5kID0gbV9qc05QT2JqZWN0cy5maW5kKHN0YXRpY19jYXN0PE5QT2JqZWN0
Kj4oY29udGV4dCkpOwogICAgIEFTU0VSVChmb3VuZCAhPSBtX2pzTlBPYmplY3RzLmVuZCgpKTsK
LSAgICBBU1NFUlRfVU5VU0VEKGhhbmRsZSwgYXNPYmplY3QoaGFuZGxlLmdldCgpKSA9PSBmb3Vu
ZC0+c2Vjb25kKTsKLSAgICBKU05QT2JqZWN0KiBvYmplY3QgPSBmb3VuZC0+c2Vjb25kLmdldCgp
OworICAgIEFTU0VSVF9VTlVTRUQoaGFuZGxlLCBhc09iamVjdChoYW5kbGUuZ2V0KCkpID09IGZv
dW5kLT52YWx1ZSk7CisgICAgSlNOUE9iamVjdCogb2JqZWN0ID0gZm91bmQtPnZhbHVlLmdldCgp
OwogICAgIG1fanNOUE9iamVjdHMucmVtb3ZlKGZvdW5kKTsKICAgICBhZGRUb0ludmFsaWRhdGlv
blF1ZXVlKG9iamVjdC0+bGVha05QT2JqZWN0KCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbi5j
cHAKaW5kZXggNjIxMDE5NzIzOTg5MmM1MjhhMDlmZjA3YjViZjJhOWQ1MmFmYzljNi4uMjBhY2Qx
ZGU5OWVjMTlkNTlkY2ZiMzAwYWUwMTBlZmIwMzIxYTQ1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVn
aW4uY3BwCkBAIC0xOTAsOCArMTkwLDggQEAgTlBFcnJvciBOZXRzY2FwZVBsdWdpbjo6ZGVzdHJv
eVN0cmVhbShOUFN0cmVhbSogc3RyZWFtLCBOUFJlYXNvbiByZWFzb24pCiAgICAgTmV0c2NhcGVQ
bHVnaW5TdHJlYW0qIHBsdWdpblN0cmVhbSA9IDA7CiAKICAgICBmb3IgKFN0cmVhbXNNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbV9zdHJlYW1zLmJlZ2luKCksIGVuZCA9IG1fc3RyZWFtcy5lbmQo
KTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kLT5ucFN0cmVhbSgp
ID09IHN0cmVhbSkgewotICAgICAgICAgICAgcGx1Z2luU3RyZWFtID0gaXQtPnNlY29uZC5nZXQo
KTsKKyAgICAgICAgaWYgKGl0LT52YWx1ZS0+bnBTdHJlYW0oKSA9PSBzdHJlYW0pIHsKKyAgICAg
ICAgICAgIHBsdWdpblN0cmVhbSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgfQpAQCAtMzc4LDcgKzM3OCw3IEBAIHZvaWQgTmV0c2NhcGVQbHVn
aW46OnVuc2NoZWR1bGVUaW1lcih1bnNpZ25lZCB0aW1lcklEKQogICAgIGlmIChpdCA9PSBtX3Rp
bWVycy5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgT3duUHRyPFRpbWVyPiB0aW1lciA9
IGFkb3B0UHRyKGl0LT5zZWNvbmQpOworICAgIE93blB0cjxUaW1lcj4gdGltZXIgPSBhZG9wdFB0
cihpdC0+dmFsdWUpOwogICAgIG1fdGltZXJzLnJlbW92ZShpdCk7CiAKICAgICB0aW1lci0+c3Rv
cCgpOwpAQCAtNzEzLDggKzcxMyw4IEBAIHZvaWQgTmV0c2NhcGVQbHVnaW46OmZyYW1lRGlkRmlu
aXNoTG9hZGluZyh1aW50NjRfdCByZXF1ZXN0SUQpCiAgICAgaWYgKGl0ID09IG1fcGVuZGluZ1VS
TE5vdGlmaWNhdGlvbnMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFN0cmluZyB1cmwg
PSBpdC0+c2Vjb25kLmZpcnN0OwotICAgIHZvaWQqIG5vdGlmaWNhdGlvbkRhdGEgPSBpdC0+c2Vj
b25kLnNlY29uZDsKKyAgICBTdHJpbmcgdXJsID0gaXQtPnZhbHVlLmZpcnN0OworICAgIHZvaWQq
IG5vdGlmaWNhdGlvbkRhdGEgPSBpdC0+dmFsdWUuc2Vjb25kOwogCiAgICAgbV9wZW5kaW5nVVJM
Tm90aWZpY2F0aW9ucy5yZW1vdmUoaXQpOwogICAgIApAQCAtNzI5LDggKzcyOSw4IEBAIHZvaWQg
TmV0c2NhcGVQbHVnaW46OmZyYW1lRGlkRmFpbCh1aW50NjRfdCByZXF1ZXN0SUQsIGJvb2wgd2Fz
Q2FuY2VsbGVkKQogICAgIGlmIChpdCA9PSBtX3BlbmRpbmdVUkxOb3RpZmljYXRpb25zLmVuZCgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBTdHJpbmcgdXJsID0gaXQtPnNlY29uZC5maXJzdDsK
LSAgICB2b2lkKiBub3RpZmljYXRpb25EYXRhID0gaXQtPnNlY29uZC5zZWNvbmQ7CisgICAgU3Ry
aW5nIHVybCA9IGl0LT52YWx1ZS5maXJzdDsKKyAgICB2b2lkKiBub3RpZmljYXRpb25EYXRhID0g
aXQtPnZhbHVlLnNlY29uZDsKIAogICAgIG1fcGVuZGluZ1VSTE5vdGlmaWNhdGlvbnMucmVtb3Zl
KGl0KTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lu
cy9QbHVnaW5WaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVn
aW5WaWV3LmNwcAppbmRleCBkMzQ2NTY4YjdkMzE0OGQwMzI1ZDFmMWFmZGY4MTRlNjg2NzFiYWRl
Li5iYzA3NDliZDZiY2YyNjIyMjBmYTJlOTE5OWJiMjBmZWRhZmZmOTE3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCkBAIC0xNzAsOSAr
MTcwLDkgQEAgc3RhdGljIFN0cmluZyBidWlsZEhUVFBIZWFkZXJzKGNvbnN0IFJlc291cmNlUmVz
cG9uc2UmIHJlc3BvbnNlLCBsb25nIGxvbmcmIGV4cGUKICAgICAKICAgICBIVFRQSGVhZGVyTWFw
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSByZXNwb25zZS5odHRwSGVhZGVyRmllbGRzKCkuZW5kKCk7
CiAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHJlc3BvbnNlLmh0
dHBIZWFkZXJGaWVsZHMoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQoaXQtPmZpcnN0LmNoYXJhY3RlcnMoKSwgaXQtPmZpcnN0Lmxlbmd0
aCgpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPmtleS5jaGFyYWN0ZXJzKCks
IGl0LT5rZXkubGVuZ3RoKCkpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChzZXBhcmF0
b3IuY2hhcmFjdGVycygpLCBzZXBhcmF0b3IubGVuZ3RoKCkpOwotICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZChpdC0+c2Vjb25kLmNoYXJhY3RlcnMoKSwgaXQtPnNlY29uZC5sZW5ndGgoKSk7
CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT52YWx1ZS5jaGFyYWN0ZXJzKCksIGl0
LT52YWx1ZS5sZW5ndGgoKSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwog
ICAgIH0KICAgICAKQEAgLTI4Miw3ICsyODIsNyBAQCBQbHVnaW5WaWV3Ojp+UGx1Z2luVmlldygp
CiAKICAgICAvLyBDYW5jZWwgYWxsIHBlbmRpbmcgZnJhbWUgbG9hZHMuCiAgICAgZm9yIChGcmFt
ZUxvYWRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wZW5kaW5nRnJhbWVMb2Fkcy5iZWdpbigpLCBlbmQg
PSBtX3BlbmRpbmdGcmFtZUxvYWRzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0
LT5maXJzdC0+c2V0TG9hZExpc3RlbmVyKDApOworICAgICAgICBpdC0+a2V5LT5zZXRMb2FkTGlz
dGVuZXIoMCk7CiAKICAgICBpZiAobV9wbHVnaW4gJiYgbV9pc0luaXRpYWxpemVkKSB7CiAgICAg
ICAgIG1faXNCZWluZ0Rlc3Ryb3llZCA9IHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuY3BwIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmNwcApp
bmRleCBkNmNlOWNjZjMzYTJlODI5YWUyZGY1M2E1ZmY3MmU0NmQ3MzhkMTk0Li42N2U4ZjI0YzEy
Mjc2ZGY0YzUyOWZiNzkzODEwNWU3YTRjN2U0YzRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5j
cHAKQEAgLTUzLDcgKzUzLDcgQEAgV2ViR3JhcGhpY3NMYXllciogV2ViR3JhcGhpY3NMYXllcjo6
bGF5ZXJCeUlEKFdlYktpdDo6V2ViTGF5ZXJJRCBpZCkKICAgICBIYXNoTWFwPFdlYkxheWVySUQs
IFdlYkdyYXBoaWNzTGF5ZXIqPjo6aXRlcmF0b3IgaXQgPSB0YWJsZS5maW5kKGlkKTsKICAgICBp
ZiAoaXQgPT0gdGFibGUuZW5kKCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBpdC0+
c2Vjb25kOworICAgIHJldHVybiBpdC0+dmFsdWU7CiB9CiAKIHN0YXRpYyBXZWJMYXllcklEIHRv
V2ViTGF5ZXJJRChHcmFwaGljc0xheWVyKiBsYXllcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9yd2FyZExpc3RQcm94eS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFja0ZvcndhcmRMaXN0UHJveHkuY3Bw
CmluZGV4IGNiZGMwNjZkYTVjMGQ1Yzg4ZDM4ZDIwMTc5ZTg0ZjE4YTY4NjNmMmMuLmUwZTE4Zjcz
ZTNlYjE1NzMyM2Q3YzdiZjhjZGNlZDI3MzYxZjBjODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9yd2FyZExpc3RQcm94eS5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFByb3h5
LmNwcApAQCAtMTI4LDcgKzEyOCw3IEBAIHZvaWQgV2ViQmFja0ZvcndhcmRMaXN0UHJveHk6OnJl
bW92ZUl0ZW0odWludDY0X3QgaXRlbUlEKQogICAgIElEVG9IaXN0b3J5SXRlbU1hcDo6aXRlcmF0
b3IgaXQgPSBpZFRvSGlzdG9yeUl0ZW1NYXAoKS5maW5kKGl0ZW1JRCk7CiAgICAgaWYgKGl0ID09
IGlkVG9IaXN0b3J5SXRlbU1hcCgpLmVuZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgaGlzdG9y
eUl0ZW1Ub0lETWFwKCkucmVtb3ZlKGl0LT5zZWNvbmQpOworICAgIGhpc3RvcnlJdGVtVG9JRE1h
cCgpLnJlbW92ZShpdC0+dmFsdWUpOwogICAgIGlkVG9IaXN0b3J5SXRlbU1hcCgpLnJlbW92ZShp
dCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9t
YWMvV2ViUGFnZU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMv
V2ViUGFnZU1hYy5tbQppbmRleCBhOGQzYzViYjE5NjBjMjk0MGYyMjMzNmFjMDJjYWU3ZGFlNTRh
ZDAzLi42MDMxMTUwZmY0NDA0NmQyY2JiYTIxM2QyMDMxNWIxMGZmOGFkOTU4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCkBA
IC0xMTYsNyArMTE2LDcgQEAgc3RhdGljIFN0cmluZyBjb21tYW5kTmFtZUZvclNlbGVjdG9yTmFt
ZShjb25zdCBTdHJpbmcmIHNlbGVjdG9yTmFtZSkKICAgICBzdGF0aWMgY29uc3QgU2VsZWN0b3JO
YW1lTWFwKiBleGNlcHRpb25NYXAgPSBjcmVhdGVTZWxlY3RvckV4Y2VwdGlvbk1hcCgpOwogICAg
IFNlbGVjdG9yTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBleGNlcHRpb25NYXAtPmZpbmQo
c2VsZWN0b3JOYW1lKTsKICAgICBpZiAoaXQgIT0gZXhjZXB0aW9uTWFwLT5lbmQoKSkKLSAgICAg
ICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBpdC0+dmFsdWU7CiAKICAgICAv
LyBSZW1vdmUgdGhlIHRyYWlsaW5nIGNvbG9uLgogICAgIC8vIE5vIG5lZWQgdG8gY2FwaXRhbGl6
ZSB0aGUgY29tbWFuZCBuYW1lIHNpbmNlIEVkaXRvciBjb21tYW5kIG5hbWVzIGFyZSBub3QgY2Fz
ZSBzZW5zaXRpdmUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9xdC9MYXllclRyZWVIb3N0UXQuY3BwCmluZGV4IGNhNzRmMTE0MGIyYjU4NTlmNzUxOTE3
Zjg4YWM5MDI1N2NjY2E0NDMuLjYwOGM1NGIzMjQ4MTE5YTYzYWVmMWMyZTcyZTVjM2E2M2YyODc3
YTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXll
clRyZWVIb3N0UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9x
dC9MYXllclRyZWVIb3N0UXQuY3BwCkBAIC0zMjUsNyArMzI1LDcgQEAgaW50NjRfdCBMYXllclRy
ZWVIb3N0UXQ6OmFkb3B0SW1hZ2VCYWNraW5nU3RvcmUoSW1hZ2UqIGltYWdlKQogICAgIEhhc2hN
YXA8aW50NjRfdCwgaW50Pjo6aXRlcmF0b3IgaXQgPSBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdl
UmVmQ291bnRzLmZpbmQoa2V5KTsKIAogICAgIGlmIChpdCAhPSBtX2RpcmVjdGx5Q29tcG9zaXRl
ZEltYWdlUmVmQ291bnRzLmVuZCgpKSB7Ci0gICAgICAgICsrKGl0LT5zZWNvbmQpOworICAgICAg
ICArKyhpdC0+dmFsdWUpOwogICAgICAgICByZXR1cm4ga2V5OwogICAgIH0KIApAQCAtMzUwLDkg
KzM1MCw5IEBAIHZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpyZWxlYXNlSW1hZ2VCYWNraW5nU3RvcmUo
aW50NjRfdCBrZXkpCiAgICAgaWYgKGl0ID09IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZD
b3VudHMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGl0LT5zZWNvbmQtLTsKKyAgICBp
dC0+dmFsdWUtLTsKIAotICAgIGlmIChpdC0+c2Vjb25kKQorICAgIGlmIChpdC0+dmFsdWUpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMu
cmVtb3ZlKGl0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJv
Y2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCmluZGV4
IDJkZmNkZTA4M2I5YzE0YjFjNDExMjYzYjY2MjMwMzg5ZmUxYmYzMzEuLjkyMTFjNTE0NmY5MDY4
YmUzOTdhYTUyZTJmYTA0YWQ5ZjYzMTk2YjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQcm9jZXNzLmNwcApAQCAtMzE0LDcgKzMxNCw3IEBAIHZvaWQgV2ViUHJvY2Vzczo6dmlzaXRl
ZExpbmtTdGF0ZUNoYW5nZWQoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkxpbmtIYXNoPiYgbGlua0hh
CiAgICAgICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxXZWJQYWdlR3JvdXBQcm94eT4gPjo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BhZ2VHcm91cE1hcC5iZWdpbigpOwogICAgICAgICBIYXNo
TWFwPHVpbnQ2NF90LCBSZWZQdHI8V2ViUGFnZUdyb3VwUHJveHk+ID46OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IG1fcGFnZUdyb3VwTWFwLmVuZCgpOwogICAgICAgICBmb3IgKDsgaXQgIT0gZW5kOyAr
K2l0KQotICAgICAgICAgICAgUGFnZTo6dmlzaXRlZFN0YXRlQ2hhbmdlZChQYWdlR3JvdXA6OnBh
Z2VHcm91cChpdC0+c2Vjb25kLT5pZGVudGlmaWVyKCkpLCBsaW5rSGFzaGVzW2ldKTsKKyAgICAg
ICAgICAgIFBhZ2U6OnZpc2l0ZWRTdGF0ZUNoYW5nZWQoUGFnZUdyb3VwOjpwYWdlR3JvdXAoaXQt
PnZhbHVlLT5pZGVudGlmaWVyKCkpLCBsaW5rSGFzaGVzW2ldKTsKICAgICB9CiAKICAgICBwYWdl
Q2FjaGUoKS0+bWFya1BhZ2VzRm9yVmlzdGVkTGlua1N0eWxlUmVjYWxjKCk7CkBAIC0zMjYsNyAr
MzI2LDcgQEAgdm9pZCBXZWJQcm9jZXNzOjphbGxWaXNpdGVkTGlua1N0YXRlQ2hhbmdlZCgpCiAg
ICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPFdlYlBhZ2VHcm91cFByb3h5PiA+Ojpjb25zdF9p
dGVyYXRvciBpdCA9IG1fcGFnZUdyb3VwTWFwLmJlZ2luKCk7CiAgICAgSGFzaE1hcDx1aW50NjRf
dCwgUmVmUHRyPFdlYlBhZ2VHcm91cFByb3h5PiA+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3Bh
Z2VHcm91cE1hcC5lbmQoKTsKICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBQ
YWdlOjphbGxWaXNpdGVkU3RhdGVDaGFuZ2VkKFBhZ2VHcm91cDo6cGFnZUdyb3VwKGl0LT5zZWNv
bmQtPmlkZW50aWZpZXIoKSkpOworICAgICAgICBQYWdlOjphbGxWaXNpdGVkU3RhdGVDaGFuZ2Vk
KFBhZ2VHcm91cDo6cGFnZUdyb3VwKGl0LT52YWx1ZS0+aWRlbnRpZmllcigpKSk7CiAKICAgICBw
YWdlQ2FjaGUoKS0+bWFya1BhZ2VzRm9yVmlzdGVkTGlua1N0eWxlUmVjYWxjKCk7CiB9CkBAIC01
MDIsNyArNTAyLDcgQEAgV2ViUGFnZSogV2ViUHJvY2Vzczo6Zm9jdXNlZFdlYlBhZ2UoKSBjb25z
dAogeyAgICAKICAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8V2ViUGFnZT4gPjo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gbV9wYWdlTWFwLmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDx1aW50NjRf
dCwgUmVmUHRyPFdlYlBhZ2U+ID46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wYWdlTWFwLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBXZWJQYWdlKiBwYWdlID0gKCppdCkuc2Vj
b25kLmdldCgpOworICAgICAgICBXZWJQYWdlKiBwYWdlID0gKCppdCkudmFsdWUuZ2V0KCk7CiAg
ICAgICAgIGlmIChwYWdlLT53aW5kb3dJc0ZvY3VzZWQoKSkKICAgICAgICAgICAgIHJldHVybiBw
YWdlOwogICAgIH0KQEAgLTUyMCwxNCArNTIwLDE0IEBAIHZvaWQgV2ViUHJvY2Vzczo6Y3JlYXRl
V2ViUGFnZSh1aW50NjRfdCBwYWdlSUQsIGNvbnN0IFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMm
CiAgICAgLy8gbGluaykgdGhlIFdlYlBhZ2UgZ2V0cyBjcmVhdGVkIGJvdGggaW4gdGhlIHN5bmNo
cm9ub3VzIGhhbmRsZXIgYW5kIHRocm91Z2ggdGhlIG5vcm1hbCB3YXkuIAogICAgIEhhc2hNYXA8
dWludDY0X3QsIFJlZlB0cjxXZWJQYWdlPiA+OjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9wYWdlTWFw
LmFkZChwYWdlSUQsIDApOwogICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICBB
U1NFUlQoIXJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9y
LT5zZWNvbmQgPSBXZWJQYWdlOjpjcmVhdGUocGFnZUlELCBwYXJhbWV0ZXJzKTsKKyAgICAgICAg
QVNTRVJUKCFyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZSA9IFdlYlBhZ2U6OmNyZWF0ZShwYWdlSUQsIHBhcmFtZXRlcnMpOwogCiAgICAgICAg
IC8vIEJhbGFuY2VkIGJ5IGFuIGVuYWJsZVRlcm1pbmF0aW9uIGluIHJlbW92ZVdlYlBhZ2UuCiAg
ICAgICAgIGRpc2FibGVUZXJtaW5hdGlvbigpOwogICAgIH0KIAotICAgIEFTU0VSVChyZXN1bHQu
aXRlcmF0b3ItPnNlY29uZCk7CisgICAgQVNTRVJUKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwog
fQogCiB2b2lkIFdlYlByb2Nlc3M6OnJlbW92ZVdlYlBhZ2UodWludDY0X3QgcGFnZUlEKQpAQCAt
NzQxLDExICs3NDEsMTEgQEAgV2ViUGFnZUdyb3VwUHJveHkqIFdlYlByb2Nlc3M6OndlYlBhZ2VH
cm91cChjb25zdCBXZWJQYWdlR3JvdXBEYXRhJiBwYWdlR3JvdXBEYXQKIHsKICAgICBIYXNoTWFw
PHVpbnQ2NF90LCBSZWZQdHI8V2ViUGFnZUdyb3VwUHJveHk+ID46OkFkZFJlc3VsdCByZXN1bHQg
PSBtX3BhZ2VHcm91cE1hcC5hZGQocGFnZUdyb3VwRGF0YS5wYWdlR3JvdXBJRCwgMCk7CiAgICAg
aWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIEFTU0VSVCghcmVzdWx0Lml0ZXJhdG9y
LT5zZWNvbmQpOwotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IFdlYlBhZ2VHcm91
cFByb3h5OjpjcmVhdGUocGFnZUdyb3VwRGF0YSk7CisgICAgICAgIEFTU0VSVCghcmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZSk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBXZWJQYWdl
R3JvdXBQcm94eTo6Y3JlYXRlKHBhZ2VHcm91cERhdGEpOwogICAgIH0KIAotICAgIHJldHVybiBy
ZXN1bHQuaXRlcmF0b3ItPnNlY29uZC5nZXQoKTsKKyAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZS5nZXQoKTsKIH0KIAogc3RhdGljIGJvb2wgY2FuUGx1Z2luSGFuZGxlUmVzcG9uc2Uo
Y29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCkBAIC04MzksNyArODM5LDcgQEAgc3Rh
dGljIHZvaWQgZnJvbUNvdW50ZWRTZXRUb0hhc2hNYXAoVHlwZUNvdW50U2V0KiBjb3VudGVkU2V0
LCBIYXNoTWFwPFN0cmluZywgdWkKIHsKICAgICBUeXBlQ291bnRTZXQ6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IGNvdW50ZWRTZXQtPmVuZCgpOwogICAgIGZvciAoVHlwZUNvdW50U2V0Ojpjb25zdF9p
dGVyYXRvciBpdCA9IGNvdW50ZWRTZXQtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAg
ICAgbWFwLnNldChpdC0+Zmlyc3QsIGl0LT5zZWNvbmQpOworICAgICAgICBtYXAuc2V0KGl0LT5r
ZXksIGl0LT52YWx1ZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGdldFdlYkNvcmVNZW1vcnlDYWNoZVN0
YXRpc3RpY3MoVmVjdG9yPEhhc2hNYXA8U3RyaW5nLCB1aW50NjRfdD4gPiYgcmVzdWx0KQpAQCAt
MTAwOSw3ICsxMDA5LDcgQEAgdm9pZCBXZWJQcm9jZXNzOjpzZXRUZXh0Q2hlY2tlclN0YXRlKGNv
bnN0IFRleHRDaGVja2VyU3RhdGUmIHRleHRDaGVja2VyU3RhdGUpCiAKICAgICBIYXNoTWFwPHVp
bnQ2NF90LCBSZWZQdHI8V2ViUGFnZT4gPjo6aXRlcmF0b3IgZW5kID0gbV9wYWdlTWFwLmVuZCgp
OwogICAgIGZvciAoSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPFdlYlBhZ2U+ID46Oml0ZXJhdG9y
IGl0ID0gbV9wYWdlTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBXZWJQ
YWdlKiBwYWdlID0gKCppdCkuc2Vjb25kLmdldCgpOworICAgICAgICBXZWJQYWdlKiBwYWdlID0g
KCppdCkudmFsdWUuZ2V0KCk7CiAgICAgICAgIGlmIChjb250aW51b3VzU3BlbGxDaGVja2luZ1R1
cm5lZE9mZikKICAgICAgICAgICAgIHBhZ2UtPnVubWFya0FsbE1pc3NwZWxsaW5ncygpOwogICAg
ICAgICBpZiAoZ3JhbW1hckNoZWNraW5nVHVybmVkT2ZmKQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hh
bmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDdhYTRhNjk2NmE4NWFiMmQ1NmUwMTgyZDNl
NjlhNjU5MjFiNDhhZTEuLjdkMTVlNGIxY2QyMjFmNjY2YjVlNzU2NGUxMjI5ODg5MjJiNTkwOGQg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzOCBAQAorMjAxMi0wNC0wMiAgQ2FpbyBNYXJjZWxvIGRlIE9saXZlaXJhIEZpbGhvICA8
Y2Fpby5vbGl2ZWlyYUBvcGVuYm9zc2Eub3JnPgorCisgICAgICAgIFJlbmFtZSBmaXJzdC9zZWNv
bmQgdG8ga2V5L3ZhbHVlIGluIEhhc2hNYXAgaXRlcmF0b3JzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Mjc4NAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vQ3Bw
Qm91bmRDbGFzcy5jcHA6CisgICAgICAgIChDcHBCb3VuZENsYXNzOjp+Q3BwQm91bmRDbGFzcyk6
CisgICAgICAgIChDcHBCb3VuZENsYXNzOjppbnZva2UpOgorICAgICAgICAoQ3BwQm91bmRDbGFz
czo6Z2V0UHJvcGVydHkpOgorICAgICAgICAoQ3BwQm91bmRDbGFzczo6c2V0UHJvcGVydHkpOgor
ICAgICAgICAoQ3BwQm91bmRDbGFzczo6YmluZENhbGxiYWNrKToKKyAgICAgICAgKENwcEJvdW5k
Q2xhc3M6OmJpbmRQcm9wZXJ0eSk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
TW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChNb2NrV2ViU3BlZWNo
SW5wdXRDb250cm9sbGVyOjphZGRNb2NrUmVjb2duaXRpb25SZXN1bHQpOgorICAgICAgICAqIER1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL05vdGlmaWNhdGlvblByZXNlbnRlci5jcHA6CisgICAgICAg
IChOb3RpZmljYXRpb25QcmVzZW50ZXI6OnNpbXVsYXRlQ2xpY2spOgorICAgICAgICAoTm90aWZp
Y2F0aW9uUHJlc2VudGVyOjpzaG93KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9XZWJQcmVmZXJlbmNlcy5jcHA6CisgICAgICAgIChhcHBseUZvbnRNYXApOgorICAgICAgICAq
IER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcDoKKyAgICAgICAgKFdlYlZp
ZXdIb3N0OjpwcmludFJlc291cmNlRGVzY3JpcHRpb24pOgorICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL3dpbi9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlcldpbi5jcHA6CisgICAgICAgIChBY2Nlc3Np
YmlsaXR5Q29udHJvbGxlcjo6fkFjY2Vzc2liaWxpdHlDb250cm9sbGVyKToKKyAgICAgICAgKEFj
Y2Vzc2liaWxpdHlDb250cm9sbGVyOjp3aW5Ob3RpZmljYXRpb25SZWNlaXZlZCk6CisgICAgICAg
ICogRHVtcFJlbmRlclRyZWUvd2luL0xheW91dFRlc3RDb250cm9sbGVyV2luLmNwcDoKKyAgICAg
ICAgKHdvcmxkSURGb3JXb3JsZCk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZh
bHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dp
bi9SZXNvdXJjZUxvYWREZWxlZ2F0ZS5jcHA6CisgICAgICAgIChSZXNvdXJjZUxvYWREZWxlZ2F0
ZTo6ZGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQpOgorICAgICAgICAqIFdlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwOgorICAgICAg
ICAoV1RSOjpMYXlvdXRUZXN0Q29udHJvbGxlcjo6d29ybGRJREZvcldvcmxkKToKKyAgICAgICAg
KFdUUjo6TGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxk
KToKKwogMjAxMi0wNC0wMiAgQmFsYXpzIEtlbGVtZW4gIDxrYmFsYXpzQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgW1F0XVtXSzJdIFNldCB1cCBwbHVnaW4gcHJvY2VzcyBvbiBVbml4CmRpZmYgLS1n
aXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9DcHBCb3VuZENsYXNzLmNwcCBiL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0NwcEJvdW5kQ2xhc3MuY3BwCmluZGV4IDliNGEz
YjY0NjQ1ZDA1N2I0MTcyZTFjN2RmYTA3YzdhNjJlNzdjZjguLjFiMjlkMmIwZjU1ZDAxZjczODcx
NDU3ODc3ZjlkYmRmMDZmMWI0OTEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL0NwcEJvdW5kQ2xhc3MuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL0NwcEJvdW5kQ2xhc3MuY3BwCkBAIC0yMDMsMTAgKzIwMywxMCBAQCBib29sIENwcE5QT2Jq
ZWN0OjpzZXRQcm9wZXJ0eShOUE9iamVjdCogbnBPYmosIE5QSWRlbnRpZmllciBpZGVudCwgY29u
c3QgTlBWYXJpYQogQ3BwQm91bmRDbGFzczo6fkNwcEJvdW5kQ2xhc3MoKQogewogICAgIGZvciAo
TWV0aG9kTGlzdDo6aXRlcmF0b3IgaSA9IG1fbWV0aG9kcy5iZWdpbigpOyBpICE9IG1fbWV0aG9k
cy5lbmQoKTsgKytpKQotICAgICAgICBkZWxldGUgaS0+c2Vjb25kOworICAgICAgICBkZWxldGUg
aS0+dmFsdWU7CiAKICAgICBmb3IgKFByb3BlcnR5TGlzdDo6aXRlcmF0b3IgaSA9IG1fcHJvcGVy
dGllcy5iZWdpbigpOyBpICE9IG1fcHJvcGVydGllcy5lbmQoKTsgKytpKQotICAgICAgICBkZWxl
dGUgaS0+c2Vjb25kOworICAgICAgICBkZWxldGUgaS0+dmFsdWU7CiAKICAgICAvLyBVbnJlZ2lz
dGVyIG91cnNlbHZlcyBpZiB3ZSB3ZXJlIGJvdW5kIHRvIGEgZnJhbWUuCiAgICAgaWYgKG1fYm91
bmRUb0ZyYW1lKQpAQCAtMjM3LDcgKzIzNyw3IEBAIGJvb2wgQ3BwQm91bmRDbGFzczo6aW52b2tl
KE5QSWRlbnRpZmllciBpZGVudCwKICAgICAgICAgfQogICAgICAgICBjYWxsYmFjayA9IG1fZmFs
bGJhY2tDYWxsYmFjay5nZXQoKTsKICAgICB9IGVsc2UKLSAgICAgICAgY2FsbGJhY2sgPSAoKm1l
dGhvZCkuc2Vjb25kOworICAgICAgICBjYWxsYmFjayA9ICgqbWV0aG9kKS52YWx1ZTsKIAogICAg
IC8vIEJ1aWxkIGEgQ3BwQXJndW1lbnRMaXN0IGFyZ3VtZW50IHZlY3RvciBmcm9tIHRoZSBOUFZh
cmlhbnRzIGNvbWluZyBpbi4KICAgICBDcHBBcmd1bWVudExpc3QgY3BwQXJndW1lbnRzKGFyZ3Vt
ZW50Q291bnQpOwpAQCAtMjYwLDcgKzI2MCw3IEBAIGJvb2wgQ3BwQm91bmRDbGFzczo6Z2V0UHJv
cGVydHkoTlBJZGVudGlmaWVyIGlkZW50LCBOUFZhcmlhbnQqIHJlc3VsdCkgY29uc3QKICAgICB9
CiAKICAgICBDcHBWYXJpYW50IGNwcFZhbHVlOwotICAgIGlmICghY2FsbGJhY2stPnNlY29uZC0+
Z2V0VmFsdWUoJmNwcFZhbHVlKSkKKyAgICBpZiAoIWNhbGxiYWNrLT52YWx1ZS0+Z2V0VmFsdWUo
JmNwcFZhbHVlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGNwcFZhbHVlLmNvcHlUb05Q
VmFyaWFudChyZXN1bHQpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMjc0LDcgKzI3NCw3IEBAIGJv
b2wgQ3BwQm91bmRDbGFzczo6c2V0UHJvcGVydHkoTlBJZGVudGlmaWVyIGlkZW50LCBjb25zdCBO
UFZhcmlhbnQqIHZhbHVlKQogCiAgICAgQ3BwVmFyaWFudCBjcHBWYWx1ZTsKICAgICBjcHBWYWx1
ZS5zZXQoKnZhbHVlKTsKLSAgICByZXR1cm4gKCpjYWxsYmFjaykuc2Vjb25kLT5zZXRWYWx1ZShj
cHBWYWx1ZSk7CisgICAgcmV0dXJuICgqY2FsbGJhY2spLnZhbHVlLT5zZXRWYWx1ZShjcHBWYWx1
ZSk7CiB9CiAKIHZvaWQgQ3BwQm91bmRDbGFzczo6YmluZENhbGxiYWNrKGNvbnN0IHN0cmluZyYg
bmFtZSwgQ2FsbGJhY2sqIGNhbGxiYWNrKQpAQCAtMjgyLDcgKzI4Miw3IEBAIHZvaWQgQ3BwQm91
bmRDbGFzczo6YmluZENhbGxiYWNrKGNvbnN0IHN0cmluZyYgbmFtZSwgQ2FsbGJhY2sqIGNhbGxi
YWNrKQogICAgIE5QSWRlbnRpZmllciBpZGVudCA9IFdlYkJpbmRpbmdzOjpnZXRTdHJpbmdJZGVu
dGlmaWVyKG5hbWUuY19zdHIoKSk7CiAgICAgTWV0aG9kTGlzdDo6aXRlcmF0b3Igb2xkQ2FsbGJh
Y2sgPSBtX21ldGhvZHMuZmluZChpZGVudCk7CiAgICAgaWYgKG9sZENhbGxiYWNrICE9IG1fbWV0
aG9kcy5lbmQoKSkgewotICAgICAgICBkZWxldGUgb2xkQ2FsbGJhY2stPnNlY29uZDsKKyAgICAg
ICAgZGVsZXRlIG9sZENhbGxiYWNrLT52YWx1ZTsKICAgICAgICAgaWYgKCFjYWxsYmFjaykgewog
ICAgICAgICAgICAgbV9tZXRob2RzLnJlbW92ZShvbGRDYWxsYmFjayk7CiAgICAgICAgICAgICBy
ZXR1cm47CkBAIC0zMDksNyArMzA5LDcgQEAgdm9pZCBDcHBCb3VuZENsYXNzOjpiaW5kUHJvcGVy
dHkoY29uc3Qgc3RyaW5nJiBuYW1lLCBQcm9wZXJ0eUNhbGxiYWNrKiBjYWxsYmFjaykKICAgICBO
UElkZW50aWZpZXIgaWRlbnQgPSBXZWJCaW5kaW5nczo6Z2V0U3RyaW5nSWRlbnRpZmllcihuYW1l
LmNfc3RyKCkpOwogICAgIFByb3BlcnR5TGlzdDo6aXRlcmF0b3Igb2xkQ2FsbGJhY2sgPSBtX3By
b3BlcnRpZXMuZmluZChpZGVudCk7CiAgICAgaWYgKG9sZENhbGxiYWNrICE9IG1fcHJvcGVydGll
cy5lbmQoKSkgewotICAgICAgICBkZWxldGUgb2xkQ2FsbGJhY2stPnNlY29uZDsKKyAgICAgICAg
ZGVsZXRlIG9sZENhbGxiYWNrLT52YWx1ZTsKICAgICAgICAgaWYgKCFjYWxsYmFjaykgewogICAg
ICAgICAgICAgbV9wcm9wZXJ0aWVzLnJlbW92ZShvbGRDYWxsYmFjayk7CiAgICAgICAgICAgICBy
ZXR1cm47CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9Nb2NrV2Vi
U3BlZWNoSW5wdXRDb250cm9sbGVyLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L01vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIuY3BwCmluZGV4IGE1ZmUzZWRhNjdjN2ZlY2I0
ZWZkOGVhOGU3YzNjZWJjZTc2YjdlNGIuLjhmY2MwODQ1OWJiNDA5YTNlY2Q0NWNlNWVlZjRhZmFl
ZWVlMTQ5NGEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL01vY2tX
ZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL01vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIuY3BwCkBAIC01MCw3ICs1MCw3IEBA
IHZvaWQgTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcjo6YWRkTW9ja1JlY29nbml0aW9uUmVz
dWx0KGNvbnN0IFdlYlN0cmluZyYgcmVzCiAgICAgICAgIFN0cmluZyBsYW5nU3RyaW5nID0gU3Ry
aW5nOjpmcm9tVVRGOChsYW5ndWFnZS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgaWYgKCFtX3Jl
Y29nbml0aW9uUmVzdWx0cy5jb250YWlucyhsYW5nU3RyaW5nKSkKICAgICAgICAgICAgIG1fcmVj
b2duaXRpb25SZXN1bHRzLnNldChsYW5nU3RyaW5nLCBWZWN0b3I8V2ViU3BlZWNoSW5wdXRSZXN1
bHQ+KCkpOwotICAgICAgICBtX3JlY29nbml0aW9uUmVzdWx0cy5maW5kKGxhbmdTdHJpbmcpLT5z
ZWNvbmQuYXBwZW5kKHJlcyk7CisgICAgICAgIG1fcmVjb2duaXRpb25SZXN1bHRzLmZpbmQobGFu
Z1N0cmluZyktPnZhbHVlLmFwcGVuZChyZXMpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvVG9v
bHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTm90aWZpY2F0aW9uUHJlc2VudGVyLmNwcCBiL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL05vdGlmaWNhdGlvblByZXNlbnRlci5jcHAKaW5k
ZXggMGM1NDAwZjVlOWU4ZjcxNzBlY2Y1OTlhODFiZDQyNmZiZDc3MjkxZC4uYTIxNTg4Zjc0NGU1
YzNmNWFiNzBkYmRiMDNjMjc1YzUwNzA4ZjAzYSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vTm90aWZpY2F0aW9uUHJlc2VudGVyLmNwcAorKysgYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9Ob3RpZmljYXRpb25QcmVzZW50ZXIuY3BwCkBAIC03NSw3ICs3
NSw3IEBAIGJvb2wgTm90aWZpY2F0aW9uUHJlc2VudGVyOjpzaW11bGF0ZUNsaWNrKGNvbnN0IFdl
YlN0cmluZyYgdGl0bGUpCiAgICAgaWYgKG1fYWN0aXZlTm90aWZpY2F0aW9ucy5maW5kKGlkKSA9
PSBtX2FjdGl2ZU5vdGlmaWNhdGlvbnMuZW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAKLSAgICBjb25zdCBXZWJOb3RpZmljYXRpb24mIG5vdGlmaWNhdGlvbiA9IG1fYWN0aXZlTm90
aWZpY2F0aW9ucy5maW5kKGlkKS0+c2Vjb25kOworICAgIGNvbnN0IFdlYk5vdGlmaWNhdGlvbiYg
bm90aWZpY2F0aW9uID0gbV9hY3RpdmVOb3RpZmljYXRpb25zLmZpbmQoaWQpLT52YWx1ZTsKICAg
ICBXZWJOb3RpZmljYXRpb24gZXZlbnRUYXJnZXQobm90aWZpY2F0aW9uKTsKICAgICBldmVudFRh
cmdldC5kaXNwYXRjaENsaWNrRXZlbnQoKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTg5LDcgKzg5
LDcgQEAgYm9vbCBOb3RpZmljYXRpb25QcmVzZW50ZXI6OnNob3coY29uc3QgV2ViTm90aWZpY2F0
aW9uJiBub3RpZmljYXRpb24pCiAgICAgICAgIFdURjo6U3RyaW5nIHJlcGxhY2VJZChub3RpZmlj
YXRpb24ucmVwbGFjZUlkKCkuZGF0YSgpLCBub3RpZmljYXRpb24ucmVwbGFjZUlkKCkubGVuZ3Ro
KCkpOwogICAgICAgICBpZiAobV9yZXBsYWNlbWVudHMuZmluZChyZXBsYWNlSWQpICE9IG1fcmVw
bGFjZW1lbnRzLmVuZCgpKQogICAgICAgICAgICAgcHJpbnRmKCJSRVBMQUNJTkcgTk9USUZJQ0FU
SU9OICVzXG4iLAotICAgICAgICAgICAgICAgICAgIG1fcmVwbGFjZW1lbnRzLmZpbmQocmVwbGFj
ZUlkKS0+c2Vjb25kLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgICAgICAgIG1fcmVwbGFj
ZW1lbnRzLmZpbmQocmVwbGFjZUlkKS0+dmFsdWUudXRmOCgpLmRhdGEoKSk7CiAKICAgICAgICAg
bV9yZXBsYWNlbWVudHMuc2V0KHJlcGxhY2VJZCwgV1RGOjpTdHJpbmcoaWRlbnRpZmllci5kYXRh
KCksIGlkZW50aWZpZXIubGVuZ3RoKCkpKTsKICAgICB9CmRpZmYgLS1naXQgYS9Ub29scy9EdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5jcHAgYi9Ub29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5jcHAKaW5kZXggZTk5Yzk4ZWMxZTNiM2JjY2Jj
YTYxNzM2YjE0NDM3NjViMjczMTQ3NC4uYjUwMjFjMzVmOTEzYTdjZTg1MWRkYTdmNjViOGFlMjI4
NDYxYjk5MyAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViUHJl
ZmVyZW5jZXMuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZl
cmVuY2VzLmNwcApAQCAtMTU3LDkgKzE1Nyw5IEBAIHR5cGVkZWYgdm9pZCAoKlNldEZvbnRGYW1p
bHlXcmFwcGVyKShXZWJTZXR0aW5ncyosIGNvbnN0IFdlYlN0cmluZyYsIFVTY3JpcHRDb2RlCiBz
dGF0aWMgdm9pZCBhcHBseUZvbnRNYXAoV2ViU2V0dGluZ3MqIHNldHRpbmdzLCBjb25zdCBXZWJQ
cmVmZXJlbmNlczo6U2NyaXB0Rm9udEZhbWlseU1hcCYgbWFwLCBTZXRGb250RmFtaWx5V3JhcHBl
ciBzZXR0ZXIpCiB7CiAgICAgZm9yIChXZWJQcmVmZXJlbmNlczo6U2NyaXB0Rm9udEZhbWlseU1h
cDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1hcC5iZWdpbigpOyBpdGVyICE9IG1hcC5lbmQoKTsg
KytpdGVyKSB7Ci0gICAgICAgIGNvbnN0IFdlYlN0cmluZyYgZm9udCA9IGl0ZXItPnNlY29uZDsK
KyAgICAgICAgY29uc3QgV2ViU3RyaW5nJiBmb250ID0gaXRlci0+dmFsdWU7CiAgICAgICAgIGlm
ICghZm9udC5pc051bGwoKSAmJiAhZm9udC5pc0VtcHR5KCkpCi0gICAgICAgICAgICAoKnNldHRl
cikoc2V0dGluZ3MsIGZvbnQsIHN0YXRpY19jYXN0PFVTY3JpcHRDb2RlPihpdGVyLT5maXJzdCkp
OworICAgICAgICAgICAgKCpzZXR0ZXIpKHNldHRpbmdzLCBmb250LCBzdGF0aWNfY2FzdDxVU2Ny
aXB0Q29kZT4oaXRlci0+a2V5KSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Ub29scy9EdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5jcHAKaW5kZXggYjNlOWRkYTAxNjQ5MDBkMGRlYTg5ZTFj
NzdhYzc4ZDUzMDlhMWRhYy4uMDJjOTJjMDQwMDE4ZDBlNmRjN2FkMzNkYWMwMDkyMzY4MTY3Mjdh
MCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3Qu
Y3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcApA
QCAtMTY0Miw3ICsxNjQyLDcgQEAgdm9pZCBXZWJWaWV3SG9zdDo6cHJpbnRGcmFtZVVzZXJHZXN0
dXJlU3RhdHVzKFdlYkZyYW1lKiB3ZWJmcmFtZSwgY29uc3QgY2hhciogbXMKIHZvaWQgV2ViVmll
d0hvc3Q6OnByaW50UmVzb3VyY2VEZXNjcmlwdGlvbih1bnNpZ25lZCBpZGVudGlmaWVyKQogewog
ICAgIFJlc291cmNlTWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VJZGVudGlmaWVyTWFwLmZp
bmQoaWRlbnRpZmllcik7Ci0gICAgcHJpbnRmKCIlcyIsIGl0ICE9IG1fcmVzb3VyY2VJZGVudGlm
aWVyTWFwLmVuZCgpID8gaXQtPnNlY29uZC5jX3N0cigpIDogIjx1bmtub3duPiIpOworICAgIHBy
aW50ZigiJXMiLCBpdCAhPSBtX3Jlc291cmNlSWRlbnRpZmllck1hcC5lbmQoKSA/IGl0LT52YWx1
ZS5jX3N0cigpIDogIjx1bmtub3duPiIpOwogfQogCiB2b2lkIFdlYlZpZXdIb3N0OjpzZXRQZW5k
aW5nRXh0cmFEYXRhKFBhc3NPd25QdHI8VGVzdFNoZWxsRXh0cmFEYXRhPiBleHRyYURhdGEpCmRp
ZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vQWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXJXaW4uY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0FjY2Vzc2liaWxpdHlDb250cm9s
bGVyV2luLmNwcAppbmRleCA3ZjlhYTZjYzJlZTkyOWIyYmY4ZWE0MTZmNWQ2NWJiMDU2ZTNlYWQx
Li5lYjM4YjU0MzVjMTY5ZDJiZGZiMDU2OGM2M2VhMjAzYjVjNmZhM2RjIDEwMDY0NAotLS0gYS9U
b29scy9EdW1wUmVuZGVyVHJlZS93aW4vQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJXaW4uY3BwCisr
KyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlcldpbi5j
cHAKQEAgLTU4LDcgKzU4LDcgQEAgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6On5BY2Nlc3NpYmls
aXR5Q29udHJvbGxlcigpCiAgICAgICAgIFVuaG9va1dpbkV2ZW50KG1fbm90aWZpY2F0aW9uc0V2
ZW50SG9vayk7CiAKICAgICBmb3IgKEhhc2hNYXA8UGxhdGZvcm1VSUVsZW1lbnQsIEpTT2JqZWN0
UmVmPjo6aXRlcmF0b3IgaXQgPSBtX25vdGlmaWNhdGlvbkxpc3RlbmVycy5iZWdpbigpOyBpdCAh
PSBtX25vdGlmaWNhdGlvbkxpc3RlbmVycy5lbmQoKTsgKytpdCkKLSAgICAgICAgSlNWYWx1ZVVu
cHJvdGVjdChmcmFtZS0+Z2xvYmFsQ29udGV4dCgpLCBpdC0+c2Vjb25kKTsKKyAgICAgICAgSlNW
YWx1ZVVucHJvdGVjdChmcmFtZS0+Z2xvYmFsQ29udGV4dCgpLCBpdC0+dmFsdWUpOwogfQogCiBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjplbGVtZW50QXRQ
b2ludChpbnQgeCwgaW50IHkpCkBAIC0yOTMsNyArMjkzLDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5
Q29udHJvbGxlcjo6cmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIoKQogdm9pZCBBY2Nlc3NpYmls
aXR5Q29udHJvbGxlcjo6d2luTm90aWZpY2F0aW9uUmVjZWl2ZWQoUGxhdGZvcm1VSUVsZW1lbnQg
ZWxlbWVudCwgY29uc3Qgc3RyaW5nJiBldmVudE5hbWUpCiB7CiAgICAgZm9yIChIYXNoTWFwPFBs
YXRmb3JtVUlFbGVtZW50LCBKU09iamVjdFJlZj46Oml0ZXJhdG9yIGl0ID0gbV9ub3RpZmljYXRp
b25MaXN0ZW5lcnMuYmVnaW4oKTsgaXQgIT0gbV9ub3RpZmljYXRpb25MaXN0ZW5lcnMuZW5kKCk7
ICsraXQpIHsKLSAgICAgICAgQ09NUHRyPElTZXJ2aWNlUHJvdmlkZXI+IHRoaXNTZXJ2aWNlUHJv
dmlkZXIoUXVlcnksIGl0LT5maXJzdCk7CisgICAgICAgIENPTVB0cjxJU2VydmljZVByb3ZpZGVy
PiB0aGlzU2VydmljZVByb3ZpZGVyKFF1ZXJ5LCBpdC0+a2V5KTsKICAgICAgICAgaWYgKCF0aGlz
U2VydmljZVByb3ZpZGVyKQogICAgICAgICAgICAgY29udGludWU7CiAKQEAgLTMxNiw3ICszMTYs
NyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjp3aW5Ob3RpZmljYXRpb25SZWNlaXZl
ZChQbGF0Zm9ybVVJRWxlbWVudCBlbGVtZW50LAogCiAgICAgICAgIEpTUmV0YWluUHRyPEpTU3Ry
aW5nUmVmPiBqc05vdGlmaWNhdGlvbihBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoZXZlbnROYW1lLmNfc3RyKCkpKTsKICAgICAgICAgSlNWYWx1ZVJlZiBhcmd1bWVudCA9IEpT
VmFsdWVNYWtlU3RyaW5nKGZyYW1lLT5nbG9iYWxDb250ZXh0KCksIGpzTm90aWZpY2F0aW9uLmdl
dCgpKTsKLSAgICAgICAgSlNPYmplY3RDYWxsQXNGdW5jdGlvbihmcmFtZS0+Z2xvYmFsQ29udGV4
dCgpLCBpdC0+c2Vjb25kLCBOVUxMLCAxLCAmYXJndW1lbnQsIE5VTEwpOworICAgICAgICBKU09i
amVjdENhbGxBc0Z1bmN0aW9uKGZyYW1lLT5nbG9iYWxDb250ZXh0KCksIGl0LT52YWx1ZSwgMCwg
MSwgJmFyZ3VtZW50LCAwKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL3dpbi9MYXlvdXRUZXN0Q29udHJvbGxlcldpbi5jcHAgYi9Ub29scy9EdW1wUmVuZGVy
VHJlZS93aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJXaW4uY3BwCmluZGV4IDFiNmE0MTU3YzQ4ZTY2
NjVkNTM5Y2FjOGFkNzg4MDkzMjNjNzIwZjUuLmRjY2E4MWI4NWRlYTU2NTdhZDMxZjM5ZjU3OTc4
OTVjNzMwZDkyZGYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9MYXlvdXRU
ZXN0Q29udHJvbGxlcldpbi5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0xheW91
dFRlc3RDb250cm9sbGVyV2luLmNwcApAQCAtMTI4Miw4ICsxMjgyLDggQEAgdW5zaWduZWQgd29y
bGRJREZvcldvcmxkKElXZWJTY3JpcHRXb3JsZCogd29ybGQpCiB7CiAgICAgV29ybGRNYXA6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IHdvcmxkTWFwKCkuZW5kKCk7CiAgICAgZm9yIChXb3JsZE1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSB3b3JsZE1hcCgpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewotICAgICAgICBpZiAoaXQtPnNlY29uZCA9PSB3b3JsZCkKLSAgICAgICAgICAgIHJldHVybiBp
dC0+Zmlyc3Q7CisgICAgICAgIGlmIChpdC0+dmFsdWUgPT0gd29ybGQpCisgICAgICAgICAgICBy
ZXR1cm4gaXQtPmtleTsKICAgICB9CiAKICAgICByZXR1cm4gMDsKQEAgLTEzMDIsNyArMTMwMiw3
IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdv
cmxkKHVuc2lnbmVkIHdvcmxkSUQsIEpTT2JqCiAgICAgICAgIGlmIChGQUlMRUQoV2ViS2l0Q3Jl
YXRlSW5zdGFuY2UoX191dWlkb2YoV2ViU2NyaXB0V29ybGQpLCAwLCBfX3V1aWRvZih3b3JsZCks
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmd29ybGQpKSkpCiAgICAgICAgICAgICByZXR1cm47
CiAgICAgfSBlbHNlIHsKLSAgICAgICAgQ09NUHRyPElXZWJTY3JpcHRXb3JsZD4mIHdvcmxkU2xv
dCA9IHdvcmxkTWFwKCkuYWRkKHdvcmxkSUQsIDApLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAg
IENPTVB0cjxJV2ViU2NyaXB0V29ybGQ+JiB3b3JsZFNsb3QgPSB3b3JsZE1hcCgpLmFkZCh3b3Js
ZElELCAwKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgIGlmICghd29ybGRTbG90ICYmIEZBSUxF
RChXZWJLaXRDcmVhdGVJbnN0YW5jZShfX3V1aWRvZihXZWJTY3JpcHRXb3JsZCksIDAsIF9fdXVp
ZG9mKHdvcmxkU2xvdCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmd29ybGRTbG90KSkpKQog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB3b3JsZCA9IHdvcmxkU2xvdDsKZGlmZiAtLWdp
dCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9SZXNvdXJjZUxvYWREZWxlZ2F0ZS5jcHAgYi9U
b29scy9EdW1wUmVuZGVyVHJlZS93aW4vUmVzb3VyY2VMb2FkRGVsZWdhdGUuY3BwCmluZGV4IDI2
YjcyMmE0ZWE1Y2RjNjRmMTM3Y2VmNzcyYzM0OGY2OTU0ODk3NjQuLmE4Y2QzYmQwYzEwNmJmMjJi
NDZkYWE5YzEzMmY2MzE4NjdiNWUxZjggMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L3dpbi9SZXNvdXJjZUxvYWREZWxlZ2F0ZS5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUv
d2luL1Jlc291cmNlTG9hZERlbGVnYXRlLmNwcApAQCAtNjYsNyArNjYsNyBAQCB3c3RyaW5nIFJl
c291cmNlTG9hZERlbGVnYXRlOjpkZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdCh1bnNp
Z25lZCBsb25nIGlkZQogICAgIGlmIChpdCA9PSBtX3VybE1hcC5lbmQoKSkKICAgICAgICAgcmV0
dXJuIEwiPHVua25vd24+IjsKIAotICAgIHJldHVybiB1cmxTdWl0YWJsZUZvclRlc3RSZXN1bHQo
aXQtPnNlY29uZCk7CisgICAgcmV0dXJuIHVybFN1aXRhYmxlRm9yVGVzdFJlc3VsdChpdC0+dmFs
dWUpOwogfQogCiB3c3RyaW5nIFJlc291cmNlTG9hZERlbGVnYXRlOjpkZXNjcmlwdGlvblN1aXRh
YmxlRm9yVGVzdFJlc3VsdChJV2ViVVJMUmVxdWVzdCogcmVxdWVzdCkKZGlmZiAtLWdpdCBhL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvTGF5b3V0VGVzdENvbnRyb2xsZXIu
Y3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9MYXlvdXRUZXN0Q29u
dHJvbGxlci5jcHAKaW5kZXggY2VjNDM0NGRkMmNmMzQ1NmY3YjUyZDc3Yjk3ZDMwYzdlZDI1MDBl
Yy4uNGQxZDQxNDhmMjY0MGYxZmQwNWZjYTI0OTUyY2YzNDgyMTA0NzcxMyAxMDA2NDQKLS0tIGEv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9MYXlvdXRUZXN0Q29udHJvbGxl
ci5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9MYXlvdXRU
ZXN0Q29udHJvbGxlci5jcHAKQEAgLTQ4OSw4ICs0ODksOCBAQCB1bnNpZ25lZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6d29ybGRJREZvcldvcmxkKFdLQnVuZGxlU2NyaXB0V29ybGRSZWYgd29ybGQp
CiB7CiAgICAgV29ybGRNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHdvcmxkTWFwKCkuZW5kKCk7
CiAgICAgZm9yIChXb3JsZE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSB3b3JsZE1hcCgpLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnNlY29uZCA9PSB3b3JsZCkK
LSAgICAgICAgICAgIHJldHVybiBpdC0+Zmlyc3Q7CisgICAgICAgIGlmIChpdC0+dmFsdWUgPT0g
d29ybGQpCisgICAgICAgICAgICByZXR1cm4gaXQtPmtleTsKICAgICB9CiAKICAgICByZXR1cm4g
MDsKQEAgLTUwNCw3ICs1MDQsNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0
ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZChKU0NvbnRleHRSZWYgY29udGV4dCwgdQogICAgIGlmICgh
d29ybGRJRCkKICAgICAgICAgd29ybGQuYWRvcHQoV0tCdW5kbGVTY3JpcHRXb3JsZENyZWF0ZVdv
cmxkKCkpOwogICAgIGVsc2UgewotICAgICAgICBXS1JldGFpblB0cjxXS0J1bmRsZVNjcmlwdFdv
cmxkUmVmPiYgd29ybGRTbG90ID0gd29ybGRNYXAoKS5hZGQod29ybGRJRCwgMCkuaXRlcmF0b3It
PnNlY29uZDsKKyAgICAgICAgV0tSZXRhaW5QdHI8V0tCdW5kbGVTY3JpcHRXb3JsZFJlZj4mIHdv
cmxkU2xvdCA9IHdvcmxkTWFwKCkuYWRkKHdvcmxkSUQsIDApLml0ZXJhdG9yLT52YWx1ZTsKICAg
ICAgICAgaWYgKCF3b3JsZFNsb3QpCiAgICAgICAgICAgICB3b3JsZFNsb3QuYWRvcHQoV0tCdW5k
bGVTY3JpcHRXb3JsZENyZWF0ZVdvcmxkKCkpOwogICAgICAgICB3b3JsZCA9IHdvcmxkU2xvdDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>135122</attachid>
            <date>2012-04-02 09:49:29 -0700</date>
            <delta_ts>2012-04-25 14:31:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-82784-20120402134931.patch</filename>
            <type>text/plain</type>
            <size>625073</size>
            <attacher name="Caio Marcelo de Oliveira Filho">cmarcelo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyODk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
MGI3YjdmNDZmMGJjOTI2MDkwNjhlMjQ5MWE1MDEzZTliZDAyOTllLi5kMzQ2MjhiNTMwNzRlZmFi
NmNjZmU0MGUzOTI4MzU5Yjg1ZjA3NjgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMTQgQEAKKzIwMTItMDQtMDIgIENhaW8gTWFyY2VsbyBkZSBPbGl2ZWlyYSBGaWxobyAg
PGNhaW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KKworICAgICAgICBSZW5hbWUgZmlyc3Qvc2Vj
b25kIHRvIGtleS92YWx1ZSBpbiBIYXNoTWFwIGl0ZXJhdG9ycworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI3ODQKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0Lmg6Cisg
ICAgICAgIChKU0M6OkpTQ2FsbGJhY2tPYmplY3REYXRhOjpKU1ByaXZhdGVQcm9wZXJ0eU1hcDo6
Z2V0UHJpdmF0ZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNDYWxsYmFja09iamVjdERhdGE6
OkpTUHJpdmF0ZVByb3BlcnR5TWFwOjpzZXRQcml2YXRlUHJvcGVydHkpOgorICAgICAgICAoSlND
OjpKU0NhbGxiYWNrT2JqZWN0RGF0YTo6SlNQcml2YXRlUHJvcGVydHlNYXA6OnZpc2l0Q2hpbGRy
ZW4pOgorICAgICAgICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmg6CisgICAgICAg
IChKU0M6Ojo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgICogQVBJL0pTQ2xhc3NSZWYu
Y3BwOgorICAgICAgICAoT3BhcXVlSlNDbGFzczo6fk9wYXF1ZUpTQ2xhc3MpOgorICAgICAgICAo
T3BhcXVlSlNDbGFzc0NvbnRleHREYXRhOjpPcGFxdWVKU0NsYXNzQ29udGV4dERhdGEpOgorICAg
ICAgICAoT3BhcXVlSlNDbGFzczo6Y29udGV4dERhdGEpOgorICAgICAgICAqIGJ5dGVjb2RlL0Nv
ZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcCk6CisgICAgICAgIChK
U0M6OkV2YWxDb2RlQ2FjaGU6OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKiBieXRlY29kZS9K
dW1wVGFibGUuaDoKKyAgICAgICAgKEpTQzo6U3RyaW5nSnVtcFRhYmxlOjpvZmZzZXRGb3JWYWx1
ZSk6CisgICAgICAgIChKU0M6OlN0cmluZ0p1bXBUYWJsZTo6Y3RpRm9yVmFsdWUpOgorICAgICAg
ICAqIGJ5dGVjb2RlL0xhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcDoKKyAgICAgICAgKEpTQzo6
TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVQYXJzZXI6OmdldElmUHJlc2VudCk6CisgICAgICAgICog
Ynl0ZWNvZGUvUHJlZGljdGlvblRyYWNrZXIuaDoKKyAgICAgICAgKEpTQzo6UHJlZGljdGlvblRy
YWNrZXI6OnByZWRpY3RHbG9iYWxWYXIpOgorICAgICAgICAoSlNDOjpQcmVkaWN0aW9uVHJhY2tl
cjo6Z2V0R2xvYmFsVmFyUHJlZGljdGlvbik6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmFkZFZh
cik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjphZGRHbG9iYWxWYXIpOgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6YWRkQ29uc3RhbnQpOgorICAgICAgICAoSlND
OjpCeXRlY29kZUdlbmVyYXRvcjo6YWRkQ29uc3RhbnRWYWx1ZSk6CisgICAgICAgIChKU0M6OkJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0TG9hZCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJh
dG9yOjphZGRTdHJpbmdDb25zdGFudCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0TGF6eU5ld0Z1bmN0aW9uKToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvTm9kZXNDb2Rl
Z2VuLmNwcDoKKyAgICAgICAgKEpTQzo6UHJvcGVydHlMaXN0Tm9kZTo6ZW1pdEJ5dGVjb2RlKToK
KyAgICAgICAgKiBkZWJ1Z2dlci9EZWJ1Z2dlci5jcHA6CisgICAgICAgICogZGZnL0RGR0Fzc2Vt
Ymx5SGVscGVycy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QXNzZW1ibHlIZWxwZXJzOjpkZWNv
ZGVkQ29kZU1hcEZvcik6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlQ2FjaGUuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZUNhY2hlOjp+Qnl0ZUNvZGVDYWNoZSk6CisgICAgICAgIChK
U0M6OkRGRzo6Qnl0ZUNvZGVDYWNoZTo6Z2V0KToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpjZWxsQ29uc3Rh
bnQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5
OjpJbmxpbmVTdGFja0VudHJ5KToKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAo
SlNDOjpIZWFwOjptYXJrUHJvdGVjdGVkT2JqZWN0cyk6CisgICAgICAgICogaGVhcC9IZWFwLmg6
CisgICAgICAgIChKU0M6OkhlYXA6OmZvckVhY2hQcm90ZWN0ZWRDZWxsKToKKyAgICAgICAgKiBq
aXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZSk6CisgICAgICAg
ICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpjdGlTdHViKToK
KyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpob3N0RnVuY3Rpb25TdHViKToKKyAgICAgICAgKiBw
YXJzZXIvUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6OjpwYXJzZVN0cmljdE9iamVjdExpdGVy
YWwpOgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGUuY3BwOgorICAgICAgICAoSlNDKToKKyAg
ICAgICAgKEpTQzo6ZnVuY3Rpb25OYW1lQ291bnRFbnRyeUNvbXBhcmF0b3IpOgorICAgICAgICAo
SlNDOjpQcm9maWxlOjpkZWJ1Z1ByaW50RGF0YVNhbXBsZVN0eWxlKToKKyAgICAgICAgVGhpcyBj
b2RlIGtlcHQgYSB2ZWN0b3Igb2YgdGhlIHBhaXJzIHRoYXQgd2VyZSB0aGUgImNvbnRlbnRzIiBv
ZiB0aGUKKyAgICAgICAgaXRlcmF0b3JzLiBUaGlzIGlzIGNoYW5nZWQgdG8gdXNlIGEgSGFzaE1h
cEVudHJ5LiBXZSBtYWtlIHVzZSBIYXNoQ291bnQncworICAgICAgICBWYWx1ZVR5cGUgKHdoaWNo
IHJlcHJlc2VudHMgb25seSB0aGUga2V5KSB0byBnZXQgdGhlIHByb3BlciBrZXkgcGFyYW1ldGVy
IGZvcgorICAgICAgICBIYXNoTWFwRW50cnkuCisKKyAgICAgICAgKiBydW50aW1lL0lkZW50aWZp
ZXIuY3BwOgorICAgICAgICAoSlNDOjpJZGVudGlmaWVyOjphZGQpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNBY3RpdmF0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6SlNBY3RpdmF0aW9uOjpnZXRPd25Q
cm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNBY3RpdmF0aW9uOjpzeW1ib2xUYWJsZVB1
dFdpdGhBdHRyaWJ1dGVzKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgorICAgICAg
ICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpwdXQpOgorICAgICAgICAoSlNDOjpTcGFyc2VB
cnJheVZhbHVlTWFwOjpwdXREaXJlY3QpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVl
TWFwOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6ZW50ZXJEaWN0aW9u
YXJ5TW9kZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmRlZmluZU93bk51bWVyaWNQcm9wZXJ0
eSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgpOgor
ICAgICAgICAoSlNDOjpKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpOgorICAgICAg
ICAoSlNDOjpKU0FycmF5OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKToKKyAgICAgICAg
KEpTQzo6SlNBcnJheTo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgpOgorICAgICAg
ICAoSlNDOjpKU0FycmF5OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgpOgorICAgICAgICAoSlNDOjpK
U0FycmF5OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c2V0
TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c29ydCk6CisgICAgICAgIChKU0M6OkpT
QXJyYXk6OmNvbXBhY3RGb3JTb3J0aW5nKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6Y2hlY2tD
b25zaXN0ZW5jeSk6CisgICAgICAgICogcnVudGltZS9KU1ZhcmlhYmxlT2JqZWN0LmNwcDoKKyAg
ICAgICAgKEpTQzo6SlNWYXJpYWJsZU9iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAg
ICAgICogcnVudGltZS9KU1ZhcmlhYmxlT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTVmFyaWFi
bGVPYmplY3Q6OnN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMpOgorICAgICAgICAqIHJ1bnRp
bWUvUmVnRXhwQ2FjaGUuY3BwOgorICAgICAgICAoSlNDOjpSZWdFeHBDYWNoZTo6bG9va3VwT3JD
cmVhdGUpOgorICAgICAgICAoSlNDOjpSZWdFeHBDYWNoZTo6aW52YWxpZGF0ZUNvZGUpOgorICAg
ICAgICAqIHJ1bnRpbWUvV2Vha0dDTWFwLmg6CisgICAgICAgIChKU0M6OldlYWtHQ01hcDo6aXRl
cmF0b3I6OmdldCk6CisgICAgICAgIChKU0M6OldlYWtHQ01hcDo6Y2xlYXIpOgorICAgICAgICAo
SlNDOjpXZWFrR0NNYXA6OnJlbW92ZSk6CisgICAgICAgIChKU0M6OldlYWtHQ01hcDo6YWRkKToK
KyAgICAgICAgKEpTQzo6V2Vha0dDTWFwOjpzZXQpOgorICAgICAgICAqIHRvb2xzL1Byb2ZpbGVU
cmVlTm9kZS5oOgorICAgICAgICAoUHJvZmlsZVRyZWVOb2RlKToKKyAgICAgICAgKEpTQzo6UHJv
ZmlsZVRyZWVOb2RlOjpzYW1wbGVDaGlsZCk6CisgICAgICAgIChKU0M6OlByb2ZpbGVUcmVlTm9k
ZTo6Y2hpbGRDb3VudCk6CisgICAgICAgIChKU0M6OlByb2ZpbGVUcmVlTm9kZTo6ZHVtcEludGVy
bmFsKToKKyAgICAgICAgKEpTQzo6UHJvZmlsZVRyZWVOb2RlOjpjb21wYXJlRW50cmllcyk6Cisg
ICAgICAgIE1hcEVudHJ5IGlzIHN1cHBvc2VkIHRvIGJlIGRlZmluZWQgYXMgdGhlIFZhbHVlVHlw
ZSBvZiB0aGUgSGFzaE1hcCAodHlwZQorICAgICAgICAiY29udGVudHMiIG9mIGl0ZXJhdG9ycywg
aW4gdGhpcyBjYXNlKS4gQ2hhbmdlIHRoZSBjb2RlIHRvIG1ha2UgdXNlIG9mCisgICAgICAgIEhh
c2hNYXA6OlZhbHVlVHlwZSBkaXJlY3RseSwgd2hpY2ggbm93IGlzIGEgSGFzaE1hcEVudHJ5IHR5
cGUuCisKIDIwMTItMDQtMDIgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEu
Y29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIEZpeCBtYWtlIGRpc3RjaGVjayBpc3N1ZXMuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmlu
ZGV4IGZkNDhmNzViMzRmYTQxNDIxN2RjNTBmMDM0ZGYxOTE1ODYyNDQ0MWQuLjY0OWM5ODJmYTQ1
NzU4OTFmMzVlZmVkZTY0ZjYzMGYxZmQ3NDk3YTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzMgQEAKKzIwMTIt
MDQtMDIgIENhaW8gTWFyY2VsbyBkZSBPbGl2ZWlyYSBGaWxobyAgPGNhaW8ub2xpdmVpcmFAb3Bl
bmJvc3NhLm9yZz4KKworICAgICAgICBSZW5hbWUgZmlyc3Qvc2Vjb25kIHRvIGtleS92YWx1ZSBp
biBIYXNoTWFwIGl0ZXJhdG9ycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9ODI3ODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBDaGFuZ2UgaW4gSGFzaE1hcCB0aGUgVmFsdWVUeXBlIGZyb20gc3RkOjpwYWly
IHRvIGEgbmV3IHNwZWNpYWxpemVkIHN0cnVjdAorICAgICAgICBIYXNoTWFwRW50cnkuIEluIEhh
c2hNYXAgdGhlIFZhbHVlVHlwZSBzZXJ2ZSBhcyAiY29udGVudHMiIG9mIHRoZSBpdGVyYXRvcnMu
CisgICAgICAgIFRoZSBkaWZmZXJlbmNlIGlzIHRoYXQgbm93IHRoZSBtZW1iZXJzIGFyZSBjYWxs
ZWQgJ2tleScgYW5kICd2YWx1ZScgaW5zdGVhZCBvZgorICAgICAgICAnZmlyc3QnIGFuZCAnc2Vj
b25kJy4gQWxzbyBhZGQgdGhlIGFwcHJvcHJpYXRlZCBIYXNoVHJhaXRzLgorCisgICAgICAgIFRo
ZSByZXN0IG9mIHRoZSBwYXRjaCBpcyBqdXN0IGNoYW5naW5nIHRoZSBjYWxsc2l0ZXMgdG8gdXNl
IHRoZSBuZXcgbmFtZXMuIE5vdGUKKyAgICAgICAgdGhhdCBIYXNoQ291bnRlZFNldCBleHBvc2Vz
IEhhc2hNYXAgaXRlcmF0b3JzIGFzIHRoZWlyIG93biwgc28gSGFzaENvdW50ZWRTZXQKKyAgICAg
ICAgaW50ZXJmYWNlIGlzIGFsc28gY2hhbmdlZC4KKworICAgICAgICAqIHd0Zi9IYXNoQ291bnRl
ZFNldC5oOgorICAgICAgICAoV1RGOjo6OmFkZCk6CisgICAgICAgIChXVEY6Ojo6cmVtb3ZlKToK
KyAgICAgICAgKFdURjo6Y29weVRvVmVjdG9yKToKKyAgICAgICAgKiB3dGYvSGFzaEl0ZXJhdG9y
cy5oOgorICAgICAgICAoSGFzaFRhYmxlQ29uc3RLZXlzSXRlcmF0b3IpOgorICAgICAgICAoV1RG
OjpIYXNoVGFibGVDb25zdEtleXNJdGVyYXRvcjo6Z2V0KToKKyAgICAgICAgKEhhc2hUYWJsZUNv
bnN0VmFsdWVzSXRlcmF0b3IpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGVDb25zdFZhbHVlc0l0
ZXJhdG9yOjpnZXQpOgorICAgICAgICAoSGFzaFRhYmxlS2V5c0l0ZXJhdG9yKToKKyAgICAgICAg
KFdURjo6SGFzaFRhYmxlS2V5c0l0ZXJhdG9yOjpnZXQpOgorICAgICAgICAoSGFzaFRhYmxlVmFs
dWVzSXRlcmF0b3IpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGVWYWx1ZXNJdGVyYXRvcjo6Z2V0
KToKKyAgICAgICAgKiB3dGYvSGFzaE1hcC5oOgorICAgICAgICAoV1RGOjpIYXNoTWFwRW50cnlL
ZXlFeHRyYWN0b3I6OmV4dHJhY3QpOgorICAgICAgICAoV1RGKToKKyAgICAgICAgKEhhc2hNYXAp
OgorICAgICAgICAoV1RGOjpIYXNoTWFwVHJhbnNsYXRvcjo6dHJhbnNsYXRlKToKKyAgICAgICAg
KFdURjo6SGFzaE1hcFRyYW5zbGF0b3JBZGFwdGVyOjp0cmFuc2xhdGUpOgorICAgICAgICAoV1RG
Ojo6OnNldCk6CisgICAgICAgIChXVEY6Ojo6Z2V0KToKKyAgICAgICAgKFdURjo6Ojp0YWtlKToK
KyAgICAgICAgKFdURjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXVEY6OmRlbGV0ZUFsbFBhaXJT
ZWNvbmRzKToKKyAgICAgICAgKFdURjo6ZGVsZXRlQWxsUGFpckZpcnN0cyk6CisgICAgICAgICog
d3RmL0hhc2hUYWJsZS5oOgorICAgICAgICAoV1RGOjpoYXNoVGFibGVTd2FwKToKKyAgICAgICAg
KFdURik6CisgICAgICAgIChXVEY6Ojo6Y2hlY2tUYWJsZUNvbnNpc3RlbmN5RXhjZXB0U2l6ZSk6
CisgICAgICAgICogd3RmL0hhc2hUcmFpdHMuaDoKKyAgICAgICAgKEhhc2hNYXBFbnRyeSk6Cisg
ICAgICAgIChXVEY6Okhhc2hNYXBFbnRyeTo6SGFzaE1hcEVudHJ5KToKKyAgICAgICAgKFdURik6
CisgICAgICAgIChIYXNoTWFwRW50cnlUcmFpdHMpOgorICAgICAgICAoV1RGOjpIYXNoTWFwRW50
cnlUcmFpdHM6OmVtcHR5VmFsdWUpOgorICAgICAgICAoV1RGOjpIYXNoTWFwRW50cnlUcmFpdHM6
OmNvbnN0cnVjdERlbGV0ZWRWYWx1ZSk6CisgICAgICAgIChXVEY6Okhhc2hNYXBFbnRyeVRyYWl0
czo6aXNEZWxldGVkVmFsdWUpOgorICAgICAgICAqIHd0Zi9NZXRhQWxsb2NhdG9yLmNwcDoKKyAg
ICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6YWRkRnJlZVNwYWNlKToKKyAgICAgICAgKFdURjo6
TWV0YUFsbG9jYXRvcjo6aW5jcmVtZW50UGFnZU9jY3VwYW5jeSk6CisgICAgICAgIChXVEY6Ok1l
dGFBbGxvY2F0b3I6OmRlY3JlbWVudFBhZ2VPY2N1cGFuY3kpOgorICAgICAgICAqIHd0Zi9SZWZD
b3VudGVkTGVha0NvdW50ZXIuY3BwOgorICAgICAgICAoV1RGOjpSZWZDb3VudGVkTGVha0NvdW50
ZXI6On5SZWZDb3VudGVkTGVha0NvdW50ZXIpOgorICAgICAgICAqIHd0Zi9SZWZQdHJIYXNoTWFw
Lmg6CisgICAgICAgIChXVEY6Ojo6c2V0KToKKyAgICAgICAgKFdURjo6OjpnZXQpOgorICAgICAg
ICAoV1RGOjo6OmlubGluZUdldCk6CisgICAgICAgIChXVEY6Ojo6dGFrZSk6CisgICAgICAgICog
d3RmL1NwZWN0cnVtLmg6CisgICAgICAgIChXVEY6OlNwZWN0cnVtOjphZGQpOgorICAgICAgICAo
V1RGOjpTcGVjdHJ1bTo6YnVpbGRMaXN0KToKKyAgICAgICAgKiB3dGYvVGhyZWFkaW5nUHRocmVh
ZHMuY3BwOgorICAgICAgICAoV1RGOjppZGVudGlmaWVyQnlQdGhyZWFkSGFuZGxlKToKKwogMjAx
Mi0wMy0zMCAgRGF2aWQgQmFyciAgPGRhdmlkYmFyckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
U3BsaXQgdXAgdG9wLWxldmVsIC5naXRpZ25vcmUgYW5kIC5naXRhdHRyaWJ1dGVzCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
aW5kZXggYWQ4NmQ4ZjVhNTMyMDk0M2RlM2RkN2Q3OThkOGI1MTIzYmIzZTYzMi4uNTRmZDZlN2Rh
ZGQxMzQwN2NlYTMyN2QwMTRkNTgzY2RmOTc0NmZjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc4
NiBAQAorMjAxMi0wNC0wMiAgQ2FpbyBNYXJjZWxvIGRlIE9saXZlaXJhIEZpbGhvICA8Y2Fpby5v
bGl2ZWlyYUBvcGVuYm9zc2Eub3JnPgorCisgICAgICAgIFJlbmFtZSBmaXJzdC9zZWNvbmQgdG8g
a2V5L3ZhbHVlIGluIEhhc2hNYXAgaXRlcmF0b3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Mjc4NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gZnVuY3Rpb25hbGl0eSBjaGFu
Z2UgaW50ZW5kZWQuCisKKyAgICAgICAgKiBNb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9u
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uOjpXYXRjaGVyczo6ZmluZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvbjo6V2F0Y2hlcnM6OnJlbW92ZSk6CisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpvYmplY3RTdG9yZU5hbWVzKToKKyAg
ICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SURCRmFjdG9yeUJhY2tlbmRJbXBsOjpkZWxldGVEYXRhYmFzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW5CYWNraW5nU3RvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6SURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuSW50ZXJuYWwp
OgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjppbmRleCk6CisgICAgICAgICogTW9kdWxlcy9p
bmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjppbmRleE5hbWVzKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dCk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJbnRlcm5hbCk6CisgICAgICAgICog
TW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SURCVHJhbnNhY3Rpb246Om9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5z
YWN0aW9uOjpkaXNwYXRjaEV2ZW50KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0Fi
c3RyYWN0RGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6
cGVyZm9ybU9wZW5BbmRWZXJpZnkpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0
YWJhc2VUcmFja2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6aW50
ZXJydXB0QWxsRGF0YWJhc2VzRm9yQ29udGV4dCk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRh
YmFzZS9PcmlnaW5Vc2FnZVJlY29yZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpPcmlnaW5Vc2Fn
ZVJlY29yZDo6ZGlza1VzYWdlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRy
YW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rp
b25Db29yZGluYXRvcjo6YWNxdWlyZUxvY2spOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNh
Y3Rpb25Db29yZGluYXRvcjo6cmVsZWFzZUxvY2spOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJh
bnNhY3Rpb25Db29yZGluYXRvcjo6c2h1dGRvd24pOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0
YWJhc2UvY2hyb21pdW0vRGF0YWJhc2VUcmFja2VyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RGF0YWJhc2VUcmFja2VyOjppbnRlcnJ1cHRBbGxEYXRhYmFzZXNGb3JDb250ZXh0KToK
KyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL1F1b3RhVHJhY2tlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpRdW90YVRyYWNrZXI6OmdldERhdGFiYXNlU2l6ZUFuZFNwYWNl
QXZhaWxhYmxlVG9PcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6UXVvdGFUcmFja2VyOjp1cGRh
dGVEYXRhYmFzZVNpemUpOgorICAgICAgICAqIE1vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRE
ZWZsYXRlRnJhbWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldEV4dGVuc2lvbkRl
ZmxhdGVGcmFtZTo6cHJvY2Vzc1Jlc3BvbnNlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYnNvY2tl
dHMvV2ViU29ja2V0RXh0ZW5zaW9uRGlzcGF0Y2hlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyOjphcHBlbmRBY2NlcHRlZEV4dGVuc2lvbik6Cisg
ICAgICAgICogYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkFYT2JqZWN0Q2FjaGU6On5BWE9iamVjdENhY2hlKToKKyAgICAgICAgKiBiaW5kaW5ncy9n
b2JqZWN0L0RPTU9iamVjdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RE9NT2JqZWN0Q2Fj
aGU6OmNsZWFyQnlGcmFtZSk6CisgICAgICAgICogYmluZGluZ3MvanMvRE9NT2JqZWN0SGFzaFRh
YmxlTWFwLmg6CisgICAgICAgIChXZWJDb3JlOjpET01PYmplY3RIYXNoVGFibGVNYXA6On5ET01P
YmplY3RIYXNoVGFibGVNYXApOgorICAgICAgICAoV2ViQ29yZTo6RE9NT2JqZWN0SGFzaFRhYmxl
TWFwOjpnZXQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0RPTVdyYXBwZXJXb3JsZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1N0cmluZ093bmVyOjpmaW5hbGl6ZSk6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNhY2hlRE9NU3Ry
dWN0dXJlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaDoKKyAgICAgICAg
KFdlYkNvcmU6OnVuY2FjaGVXcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzU3RyaW5nKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpKU0RPTUdsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OmdldERPTUNv
bnN0cnVjdG9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZVNjcmlwdERlYnVnU2VydmVyOjphZGRMaXN0ZW5l
cik6CisgICAgICAgIChXZWJDb3JlOjpQYWdlU2NyaXB0RGVidWdTZXJ2ZXI6OnJlbW92ZUxpc3Rl
bmVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDYWNoZWRGcmFtZURhdGEuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FjaGVkRnJhbWVEYXRhOjpTY3JpcHRDYWNoZWRGcmFt
ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FjaGVkRnJhbWVEYXRhOjpyZXN0b3Jl
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6On5TY3JpcHRDb250cm9sbGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmNsZWFyV2luZG93U2hlbGwpOgorICAgICAgICAo
V2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6YXR0YWNoRGVidWdnZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6U2NyaXB0Q29udHJvbGxlcjo6dXBkYXRlRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6U2NyaXB0Q29udHJvbGxlcjo6Y3JlYXRlUm9vdE9iamVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JpcHRDb250cm9sbGVyOjpjbGVhbnVwU2NyaXB0T2JqZWN0c0ZvclBsdWdpbik6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpjbGVhclNjcmlwdE9iamVjdHMpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlNjcmlwdENvbnRyb2xsZXI6OndpbmRvd1NoZWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlw
dENvbnRyb2xsZXI6OmV4aXN0aW5nV2luZG93U2hlbGwpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L1NjcmlwdERlYnVnU2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2Vy
dmVyOjpzZXRCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVy
OjpyZW1vdmVCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVy
OjpoYXNCcmVha3BvaW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0
VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVTZXJpYWxpemVyOjpzdGFydE9iamVj
dEludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lU2VyaWFsaXplcjo6ZHVtcElmVGVy
bWluYWwpOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVTZXJpYWxpemVyOjp3cml0ZSk6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06CisgICAgICAgIChHZW5l
cmF0ZUltcGxlbWVudGF0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgv
VjhGbG9hdDY0QXJyYXkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhGbG9hdDY0QXJyYXk6Okdl
dFJhd1RlbXBsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RmxvYXQ2NEFycmF5OjpHZXRUZW1w
bGF0ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEFjdGl2ZURP
TU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RBY3RpdmVET01PYmplY3Q6Okdl
dFJhd1RlbXBsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdEFjdGl2ZURPTU9iamVjdDo6
R2V0VGVtcGxhdGUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RD
dXN0b21OYW1lZEdldHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RDdXN0b21OYW1l
ZEdldHRlcjo6R2V0UmF3VGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0Q3VzdG9t
TmFtZWRHZXR0ZXI6OkdldFRlbXBsYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVjgvVjhUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOFRl
c3RFdmVudENvbnN0cnVjdG9yOjpHZXRSYXdUZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpW
OFRlc3RFdmVudENvbnN0cnVjdG9yOjpHZXRUZW1wbGF0ZSk6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50VGFyZ2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlY4VGVzdEV2ZW50VGFyZ2V0OjpHZXRSYXdUZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpW
OFRlc3RFdmVudFRhcmdldDo6R2V0VGVtcGxhdGUpOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9WOC9WOFRlc3RJbnRlcmZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0
SW50ZXJmYWNlOjpHZXRSYXdUZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RJbnRl
cmZhY2U6OkdldFRlbXBsYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgv
VjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOFRl
c3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjpHZXRSYXdUZW1wbGF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpWOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjpHZXRUZW1wbGF0ZSk6CisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6VjhUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6R2V0UmF3VGVtcGxhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6R2V0VGVtcGxhdGUp
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VjhUZXN0T2JqOjpHZXRSYXdUZW1wbGF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpWOFRlc3RPYmo6OkdldFRlbXBsYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlY4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6R2V0UmF3
VGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlOjpHZXRUZW1wbGF0ZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvTlBWOE9iamVj
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmcmVlVjhOUE9iamVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpucENyZWF0ZVY4U2NyaXB0T2JqZWN0KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3Jp
cHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmNs
ZWFyU2NyaXB0T2JqZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpj
bGVhbnVwU2NyaXB0T2JqZWN0c0ZvclBsdWdpbik6CisgICAgICAgICogYmluZGluZ3MvdjgvU2Vy
aWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOERPTU1hcC5o
OgorICAgICAgICAoV2ViQ29yZTo6V2Vha1JlZmVyZW5jZU1hcDo6cmVtb3ZlSWZQcmVzZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OldlYWtSZWZlcmVuY2VNYXA6OnZpc2l0KToKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9N
V2luZG93U2hlbGw6OmRpc3Bvc2VDb250ZXh0SGFuZGxlcyk6CisgICAgICAgICogYmluZGluZ3Mv
djgvVjhHQ0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZW51bWVyYXRlR2xvYmFs
SGFuZGxlcyk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhQcm94eS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpWOFByb3h5OjpldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCk6CisgICAgICAgIChXZWJD
b3JlOjpWOFByb3h5OjpzZXRJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4pOgorICAgICAgICAo
V2ViQ29yZTo6VjhQcm94eTo6cmVzZXRJc29sYXRlZFdvcmxkcyk6CisgICAgICAgICogYmluZGlu
Z3MvdjgvbnBydW50aW1lLmNwcDoKKyAgICAgICAgKiBicmlkZ2UvSWRlbnRpZmllclJlcC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJZGVudGlmaWVyUmVwOjpnZXQpOgorICAgICAgICAqIGJyaWRn
ZS9OUF9qc29iamVjdC5jcHA6CisgICAgICAgIChPYmplY3RNYXA6OmFkZCk6CisgICAgICAgIChP
YmplY3RNYXA6OnJlbW92ZSk6CisgICAgICAgICogYnJpZGdlL2puaS9qc2MvSmF2YUNsYXNzSlND
LmNwcDoKKyAgICAgICAgKEphdmFDbGFzczo6fkphdmFDbGFzcyk6CisgICAgICAgICogYnJpZGdl
L3J1bnRpbWVfcm9vdC5jcHA6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpSb290T2JqZWN0Ojpp
bnZhbGlkYXRlKToKKyAgICAgICAgKiBjc3MvQ1NTQ2FudmFzVmFsdWUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTQ2FudmFzVmFsdWU6OmNhbnZhc0NoYW5nZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTQ2FudmFzVmFsdWU6OmNhbnZhc1Jlc2l6ZWQpOgorICAgICAgICAqIGNzcy9DU1NDb21w
dXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y291bnRlclRvQ1NT
VmFsdWUpOgorICAgICAgICAqIGNzcy9DU1NDcm9zc2ZhZGVWYWx1ZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NDcm9zc2ZhZGVWYWx1ZTo6Y3Jvc3NmYWRlQ2hhbmdlZCk6CisgICAgICAgICog
Y3NzL0NTU0ZvbnRGYWNlU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNl
U291cmNlOjpnZXRGb250RGF0YSk6CisgICAgICAgICogY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250U2VsZWN0b3I6OmFkZEZvbnRGYWNlUnVsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NGb250U2VsZWN0b3I6OmdldEZvbnREYXRhKToKKyAgICAgICAg
KiBjc3MvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NJ
bWFnZUdlbmVyYXRvclZhbHVlOjphZGRDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTSW1h
Z2VHZW5lcmF0b3JWYWx1ZTo6cmVtb3ZlQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0lt
YWdlR2VuZXJhdG9yVmFsdWU6OmdldEltYWdlKToKKyAgICAgICAgKiBjc3MvQ1NTU2VnbWVudGVk
Rm9udEZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU2VnbWVudGVkRm9udEZhY2U6Omdl
dEZvbnREYXRhKToKKyAgICAgICAgKiBjc3MvQ1NTU2VsZWN0b3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTU2VsZWN0b3I6OnBhcnNlUHNldWRvVHlwZSk6CisgICAgICAgICogY3NzL0NTU1N0
eWxlQXBwbHlQcm9wZXJ0eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Q291
bnRlcjo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0
eUNvdW50ZXI6OmFwcGx5VmFsdWUpOgorICAgICAgICAqIGNzcy9DU1NTdHlsZVNlbGVjdG9yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmNvbGxlY3RGZWF0dXJlcyk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpydWxlU2V0Rm9yU2NvcGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6YXBwZW5kQXV0aG9yU3R5bGVzaGVl
dHMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6c3dlZXBNYXRjaGVkUHJv
cGVydGllc0NhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmNvbGxl
Y3RNYXRjaGluZ1J1bGVzRm9yTGlzdCk6CisgICAgICAgICogY3NzL0NTU1ZhbHVlUG9vbC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDU1NWYWx1ZVBvb2w6OmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NWYWx1ZVBvb2w6OmNyZWF0ZUNvbG9yVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTVmFsdWVQb29sOjpjcmVhdGVWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NWYWx1ZVBvb2w6OmNyZWF0ZUZvbnRGYW1pbHlWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NWYWx1ZVBvb2w6OmNyZWF0ZUZvbnRGYWNlVmFsdWUpOgorICAgICAgICAqIGNzcy9T
dHlsZVByb3BlcnR5U2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUHJvcGVydHlTZXQ6
OlN0eWxlUHJvcGVydHlTZXQpOgorICAgICAgICAqIGRvbS9DaGVja2VkUmFkaW9CdXR0b25zLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNoZWNrZWRSYWRpb0J1dHRvbnM6OmFkZEJ1dHRvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpDaGVja2VkUmFkaW9CdXR0b25zOjpyZW1vdmVCdXR0b24pOgorICAg
ICAgICAqIGRvbS9DaGlsZExpc3RNdXRhdGlvblNjb3BlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVyOjpjaGls
ZEFkZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0
aW9uQWNjdW11bGF0aW9uUm91dGVyOjp3aWxsUmVtb3ZlQ2hpbGQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXI6Omlu
Y3JlbWVudFNjb3BpbmdMZXZlbCk6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RNdXRhdGlv
blNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlcjo6ZGVjcmVtZW50U2NvcGluZ0xldmVs
KToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnQ6OnBhZ2VHcm91cFVzZXJTaGVldHMpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6Ondp
bmRvd05hbWVkSXRlbXMpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmRvY3VtZW50TmFt
ZWRJdGVtcyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2V0U3RhdGVGb3JOZXdGb3Jt
RWxlbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnRha2VTdGF0ZUZvckZvcm1F
bGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpnZXRDU1NDYW52YXNFbGVtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpnZXRJdGVtcyk6CisgICAgICAgICogZG9t
L0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVu
dE1hcmtlckNvbnRyb2xsZXI6Om1hcmtlckNvbnRhaW5pbmdQb2ludCk6CisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbmRlcmVkUmVjdHNGb3JNYXJrZXJzKToK
KyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVtb3ZlTWFya2Vy
cyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlcGFpbnRN
YXJrZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6aW52
YWxpZGF0ZVJlbmRlcmVkUmVjdHNGb3JNYXJrZXJzSW5SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6c2hvd01hcmtlcnMpOgorICAgICAgICAqIGRvbS9E
b2N1bWVudE9yZGVyZWRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRPcmRlcmVk
TWFwOjpyZW1vdmUpOgorICAgICAgICAqIGRvbS9FdmVudExpc3RlbmVyTWFwLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50TGlzdGVuZXJNYXA6OmV2ZW50VHlwZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6RXZlbnRMaXN0ZW5lck1hcDo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50TGlz
dGVuZXJNYXA6OnJlbW92ZSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudExpc3RlbmVyTWFwOjpm
aW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50TGlzdGVuZXJNYXA6OnJlbW92ZUZpcnN0RXZl
bnRMaXN0ZW5lckNyZWF0ZWRGcm9tTWFya3VwKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50TGlz
dGVuZXJNYXA6OmNvcHlFdmVudExpc3RlbmVyc05vdENyZWF0ZWRGcm9tTWFya3VwVG9UYXJnZXQp
OgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRMaXN0ZW5lckl0ZXJhdG9yOjpuZXh0TGlzdGVuZXIp
OgorICAgICAgICAqIGRvbS9NdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpNdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cDo6aXNPbGRWYWx1ZVJl
cXVlc3RlZCk6CisgICAgICAgIChXZWJDb3JlOjpNdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91
cDo6ZW5xdWV1ZU11dGF0aW9uUmVjb3JkKToKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpOb2RlOjpkdW1wU3RhdGlzdGljcyk6CisgICAgICAgIChXZWJDb3JlOjpO
b2RlOjpjbGVhclJhcmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmdldEVsZW1lbnRz
QnlUYWdOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmdldEVsZW1lbnRzQnlUYWdOYW1l
TlMpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Z2V0RWxlbWVudHNCeU5hbWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Tm9kZTo6Z2V0RWxlbWVudHNCeUNsYXNzTmFtZSk6CisgICAgICAgIChXZWJD
b3JlOjpOb2RlTGlzdHNOb2RlRGF0YTo6aW52YWxpZGF0ZUNhY2hlcyk6CisgICAgICAgIChXZWJD
b3JlOjpOb2RlTGlzdHNOb2RlRGF0YTo6aW52YWxpZGF0ZUNhY2hlc1RoYXREZXBlbmRPbkF0dHJp
YnV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Y29sbGVjdE1hdGNoaW5nT2JzZXJ2ZXJz
Rm9yTXV0YXRpb24pOgorICAgICAgICAqIGRvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UHJvY2Vzc2luZ0luc3RydWN0aW9uOjpjaGVja1N0eWxlU2hlZXQp
OgorICAgICAgICAqIGRvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OmNhblN1c3BlbmRBY3RpdmVET01PYmplY3Rz
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnN1c3BlbmRBY3Rp
dmVET01PYmplY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6
OnJlc3VtZUFjdGl2ZURPTU9iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0
aW9uQ29udGV4dDo6c3RvcEFjdGl2ZURPTU9iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
aXB0RXhlY3V0aW9uQ29udGV4dDo6YWRqdXN0TWluaW11bVRpbWVySW50ZXJ2YWwpOgorICAgICAg
ICAqIGRvbS9TcGFjZVNwbGl0U3RyaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNwYWNlU3Bs
aXRTdHJpbmdEYXRhOjpjcmVhdGUpOgorICAgICAgICAqIGRvbS9TdHlsZWRFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlZEVsZW1lbnQ6OnVwZGF0ZUF0dHJpYnV0ZVN0eWxlKToK
KyAgICAgICAgKiBodG1sL0hUTUxDb2xsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxDb2xsZWN0aW9uOjphcHBlbmQpOgorICAgICAgICAqIGluc3BlY3Rvci9Db2RlR2VuZXJhdG9y
SW5zcGVjdG9yLnB5OgorICAgICAgICAqIGluc3BlY3Rvci9ET01QYXRjaFN1cHBvcnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RE9NUGF0Y2hTdXBwb3J0OjpkaWZmKToKKyAgICAgICAgKFdlYkNv
cmU6OkRPTVBhdGNoU3VwcG9ydDo6aW5uZXJQYXRjaENoaWxkcmVuKToKKyAgICAgICAgKFdlYkNv
cmU6OkRPTVBhdGNoU3VwcG9ydDo6cmVtb3ZlQ2hpbGRBbmRNb3ZlVG9OZXcpOgorICAgICAgICAq
IGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjpkaXNjYXJkSW5qZWN0ZWRTY3JpcHRzKToKKyAgICAgICAg
KFdlYkNvcmU6OkluamVjdGVkU2NyaXB0TWFuYWdlcjo6ZGlzY2FyZEluamVjdGVkU2NyaXB0c0Zv
cik6CisgICAgICAgIChXZWJDb3JlOjpJbmplY3RlZFNjcmlwdE1hbmFnZXI6OnJlbGVhc2VPYmpl
Y3RHcm91cCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjplbmFibGUpOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JDU1NBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvclByb2Zp
bGU6OmNvbW1pdFNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yUHJvZmlsZTo6
Y29tbWl0U2VsZWN0b3JUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yUHJvZmlsZTo6
dG9JbnNwZWN0b3JPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6
OmFzSW5zcGVjdG9yU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NB
Z2VudDo6YXNzZXJ0U3R5bGVTaGVldEZvcklkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckNTU0FnZW50OjpkaWRSZW1vdmVET01Ob2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckNTU0FnZW50OjpkaWRNb2RpZnlET01BdHRyKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVj
dG9yQ29uc29sZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnNvbGVB
Z2VudDo6c3RvcFRpbWluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb25zb2xlQWdl
bnQ6OmNvdW50KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6Om5vZGVGb3JJZCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6cGVyZm9ybVNlYXJjaCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6Z2V0U2VhcmNoUmVzdWx0cyk6CisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6d2lsbFNlbmRYTUxIdHRwUmVxdWVzdCk6Cisg
ICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmNsZWFyRnJvbnRlbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjplbmFibGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpzdG9yYWdlSWQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpnZXRET01TdG9yYWdlUmVzb3Vy
Y2VGb3JJZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmRp
ZFVzZURPTVN0b3JhZ2UpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFn
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmVuYWJs
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjpkYXRhYmFzZUlk
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmZpbmRCeUZpbGVO
YW1lKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmRhdGFiYXNl
Rm9ySWQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnRC
eVVybCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZW1vdmVC
cmVha3BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnJl
c29sdmVCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ6OnNlYXJjaEluQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50OjpnZXRTY3JpcHRTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVi
dWdnZXJBZ2VudDo6ZGlkUGFyc2VTb3VyY2UpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0
b3JNZW1vcnlBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2Vu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjYWNoZWRSZXNvdXJjZXNGb3JGcmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6OmRpZENsZWFyV2luZG93T2JqZWN0SW5X
b3JsZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6OmZyYW1lRGV0YWNo
ZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmdldFByb2ZpbGVIZWFkZXJz
KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUHJvZmls
ZXJBZ2VudDo6Z2V0UHJvZmlsZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclJlc291
cmNlQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRPYmplY3RGb3JIZWFkZXJzKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlc291cmNlQWdlbnQ6OndpbGxTZW5kUmVxdWVz
dCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvclN0YXRlOjpnZXRCb29sZWFuKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvclN0YXRlOjpnZXRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3Rh
dGU6OmdldExvbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3RhdGU6OmdldERvdWJs
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdGF0ZTo6Z2V0T2JqZWN0KToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JTdHlsZTo6c3R5bGVXaXRoUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JTdHlsZVNoZWV0OjppbnNwZWN0b3JTdHlsZUZvcklkKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXQ6OmVuc3VyZVNvdXJjZURhdGEpOgorICAgICAgICAq
IGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yT2JqZWN0OjpnZXQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT2JqZWN0Ojp3cml0
ZUpTT04pOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JXb3JrZXJBZ2VudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JXb3JrZXJBZ2VudDo6d29ya2VyQ29udGV4dFRlcm1p
bmF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yV29ya2VyQWdlbnQ6OmNyZWF0ZVdv
cmtlckZyb250ZW5kQ2hhbm5lbHNGb3JFeGlzdGluZ1dvcmtlcnMpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yV29ya2VyQWdlbnQ6OmRlc3Ryb3lXb3JrZXJGcm9udGVuZENoYW5uZWxzKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvTmV0d29ya1Jlc291cmNlc0RhdGEuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TmV0d29ya1Jlc291cmNlc0RhdGE6OmNsZWFyKToKKyAgICAgICAgKiBsb2FkZXIv
Q3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzU2ltcGxl
Q3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUFjY2Vz
c0NvbnRyb2xQcmVmbGlnaHRSZXF1ZXN0KToKKyAgICAgICAgKiBsb2FkZXIvQ3Jvc3NPcmlnaW5Q
cmVmbGlnaHRSZXN1bHRDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcm9zc09yaWdpblBy
ZWZsaWdodFJlc3VsdENhY2hlSXRlbTo6YWxsb3dzQ3Jvc3NPcmlnaW5IZWFkZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGU6OmNhblNraXBQcmVm
bGlnaHQpOgorICAgICAgICAqIGxvYWRlci9Eb2N1bWVudExvYWRlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6Z2V0U3VicmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50TG9hZGVyOjpzdWJzdGl0dXRlUmVzb3VyY2VEZWxpdmVyeVRpbWVyRmlyZWQp
OgorICAgICAgICAqIGxvYWRlci9NYWluUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6TWFpblJlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAq
IGxvYWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVz
b3VyY2VMb2FkU2NoZWR1bGVyOjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyk6CisgICAgICAgICogbG9h
ZGVyL1N1YmZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN1YmZyYW1lTG9hZGVy
OjpjcmVhdGVKYXZhQXBwbGV0V2lkZ2V0KToKKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBw
bGljYXRpb25DYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlOjpy
ZW1vdmVSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlOjpjbGVh
clN0b3JhZ2VJRCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlOjpkdW1wKToK
KyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6ZGlkRmluaXNoTG9hZGluZ01h
bmlmZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6c3RhcnRM
b2FkaW5nRW50cnkpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUdyb3VwOjph
ZGRFbnRyeSk6CisgICAgICAgICogbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVIb3N0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpmaWxsUmVzb3Vy
Y2VMaXN0KToKKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVJlc291
cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6ZXN0
aW1hdGVkU2l6ZUluU3RvcmFnZSk6CisgICAgICAgICogbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0
aW9uQ2FjaGVTdG9yYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVT
dG9yYWdlOjpmaW5kT3JDcmVhdGVDYWNoZUdyb3VwKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxp
Y2F0aW9uQ2FjaGVTdG9yYWdlOjpjYWNoZUdyb3VwRm9yVVJMKToKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpmYWxsYmFja0NhY2hlR3JvdXBGb3JVUkwpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjplbXB0eSk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmVDb3B5T2ZDYWNoZSk6CisgICAgICAg
ICogbG9hZGVyL2FyY2hpdmUvQXJjaGl2ZUZhY3RvcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
QXJjaGl2ZUZhY3Rvcnk6OnJlZ2lzdGVyS25vd25BcmNoaXZlTUlNRVR5cGVzKToKKyAgICAgICAg
KiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q2FjaGVkUmF3UmVzb3VyY2U6OmNhblJldXNlKToKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2Fj
aGVkUmVzb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2U6OnN3aXRj
aENsaWVudHNUb1JldmFsaWRhdGVkUmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVk
UmVzb3VyY2U6OnVwZGF0ZVJlc3BvbnNlQWZ0ZXJSZXZhbGlkYXRpb24pOgorICAgICAgICAqIGxv
YWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlci5oOgorICAgICAgICAoV2ViQ29y
ZTo6Q2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXI6OkNhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2Vy
KToKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6On5DYWNoZWRSZXNvdXJjZUxvYWRl
cik6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVzdFJlc291
cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlTG9hZGVyOjpzZXRBdXRvTG9h
ZEltYWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVtb3Zl
Q2FjaGVkUmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6
OmdhcmJhZ2VDb2xsZWN0RG9jdW1lbnRSZXNvdXJjZXNUaW1lckZpcmVkKToKKyAgICAgICAgKiBs
b2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVtb3J5Q2Fj
aGU6OnJlbW92ZVJlc291cmNlc1dpdGhPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6TWVtb3J5
Q2FjaGU6OmdldE9yaWdpbnNXaXRoQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVtb3J5Q2Fj
aGU6OmdldFN0YXRpc3RpY3MpOgorICAgICAgICAoV2ViQ29yZTo6TWVtb3J5Q2FjaGU6OnNldERp
c2FibGVkKToKKyAgICAgICAgKiBsb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SWNvbkRhdGFiYXNlOjpyZW1vdmVBbGxJY29ucyk6CisgICAgICAgIChXZWJD
b3JlOjpJY29uRGF0YWJhc2U6Omljb25SZWNvcmRDb3VudFdpdGhEYXRhKToKKyAgICAgICAgKiBw
YWdlL0RPTVdpbmRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01XaW5kb3c6OmRpc3BhdGNo
QWxsUGVuZGluZ0JlZm9yZVVubG9hZEV2ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpET01XaW5k
b3c6OmRpc3BhdGNoQWxsUGVuZGluZ1VubG9hZEV2ZW50cyk6CisgICAgICAgICogcGFnZS9FdmVu
dEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpoYW5kbGVUb3Vj
aEV2ZW50KToKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lOjppbmplY3RVc2VyU2NyaXB0cyk6CisgICAgICAgICogcGFnZS9QYWdlR3JvdXAuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UGFnZUdyb3VwOjpwYWdlR3JvdXApOgorICAgICAgICAoV2ViQ29y
ZTo6UGFnZUdyb3VwOjpjbG9zZUxvY2FsU3RvcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpQYWdl
R3JvdXA6OmNsZWFyTG9jYWxTdG9yYWdlRm9yQWxsT3JpZ2lucyk6CisgICAgICAgIChXZWJDb3Jl
OjpQYWdlR3JvdXA6OmNsZWFyTG9jYWxTdG9yYWdlRm9yT3JpZ2luKToKKyAgICAgICAgKFdlYkNv
cmU6OlBhZ2VHcm91cDo6c3luY0xvY2FsU3RvcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpQYWdl
R3JvdXA6OmFkZFVzZXJTY3JpcHRUb1dvcmxkKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VHcm91
cDo6YWRkVXNlclN0eWxlU2hlZXRUb1dvcmxkKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VHcm91
cDo6cmVtb3ZlVXNlclNjcmlwdEZyb21Xb3JsZCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlR3Jv
dXA6OnJlbW92ZVVzZXJTdHlsZVNoZWV0RnJvbVdvcmxkKToKKyAgICAgICAgKiBwYWdlL1BhZ2VT
ZXJpYWxpemVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VTZXJpYWxpemVyOjp1cmxGb3JC
bGFua0ZyYW1lKToKKyAgICAgICAgKiBwYWdlL1NlY3VyaXR5UG9saWN5LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNlY3VyaXR5UG9saWN5OjphZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeSk6
CisgICAgICAgIChXZWJDb3JlOjpTZWN1cml0eVBvbGljeTo6cmVtb3ZlT3JpZ2luQWNjZXNzV2hp
dGVsaXN0RW50cnkpOgorICAgICAgICAqIHBhZ2UvU2V0dGluZ3MuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6c2V0R2VuZXJpY0ZvbnRGYW1pbHlNYXApOgorICAgICAgICAoV2ViQ29yZTo6Z2V0R2Vu
ZXJpY0ZvbnRGYW1pbHlGb3JTY3JpcHQpOgorICAgICAgICAqIHBhZ2UvU3BlZWNoSW5wdXQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U3BlZWNoSW5wdXQ6OnJlZ2lzdGVyTGlzdGVuZXIpOgorICAg
ICAgICAqIHBhZ2UvV2luZG93RmVhdHVyZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2luZG93
RmVhdHVyZXM6OmJvb2xGZWF0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OldpbmRvd0ZlYXR1cmVz
OjpmbG9hdEZlYXR1cmUpOgorICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRy
b2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6
OnVwZGF0ZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQ29udHJvbGxl
clByaXZhdGU6OnN1c3BlbmRBbmltYXRpb25zRm9yRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnJlc3VtZUFuaW1hdGlvbnNGb3JEb2N1bWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6bnVtYmVy
T2ZBY3RpdmVBbmltYXRpb25zKToKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVB
bmltYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjpjbGVh
clJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRl
VHJhbnNpdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjp1cGRh
dGVLZXlmcmFtZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0
aW9uOjphbmltYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlvbjo6Z2V0
QW5pbWF0ZWRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb246OnNl
dEFuaW1hdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb246OnRpbWVU
b05leHRTZXJ2aWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlvbjo6Z2V0
QW5pbWF0aW9uRm9yUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0
aW9uOjpzdXNwZW5kQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmlt
YXRpb246OnJlc3VtZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5p
bWF0aW9uOjpvdmVycmlkZUltcGxpY2l0QW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpD
b21wb3NpdGVBbmltYXRpb246OnJlc3VtZU92ZXJyaWRkZW5JbXBsaWNpdEFuaW1hdGlvbnMpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjppc0FuaW1hdGluZ1Byb3BlcnR5
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlvbjo6bnVtYmVyT2ZBY3RpdmVB
bmltYXRpb25zKToKKyAgICAgICAgKiBwbGF0Zm9ybS9MYW5ndWFnZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpsYW5ndWFnZURpZENoYW5nZSk6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vSFJU
RkVsZXZhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRDb25jYXRlbmF0ZWRJbXB1bHNl
UmVzcG9uc2VzRm9yU3ViamVjdCk6CisgICAgICAgICogcGxhdGZvcm0vYmxhY2tiZXJyeS9Db29r
aWVNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZU1hbmFnZXI6OmdlbmVyYXRl
SHRtbEZyYWdtZW50Rm9yQ29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVNYW5hZ2Vy
OjpyZW1vdmVBbGxDb29raWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ibGFja2JlcnJ5L0Nvb2tp
ZU1hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVNYXA6OnJlbW92ZU9sZGVzdENvb2tp
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVNYXA6OmdldEFsbENoaWxkQ29va2llcyk6Cisg
ICAgICAgICogcGxhdGZvcm0vY2YvQmluYXJ5UHJvcGVydHlMaXN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkJpbmFyeVByb3BlcnR5TGlzdFBsYW46OndyaXRlSW50ZWdlckFycmF5KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYkhUVFBMb2FkSW5mby5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OmFkZEhlYWRlcik6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vc3Vw
cG9ydC9XZWJVUkxSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMUmVxdWVzdDo6
dmlzaXRIVFRQSGVhZGVyRmllbGRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9zdXBw
b3J0L1dlYlVSTFJlc3BvbnNlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMUmVzcG9uc2U6
OmFkZEhUVFBIZWFkZXJGaWVsZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFJlc3BvbnNlOjp2
aXNpdEhUVFBIZWFkZXJGaWVsZHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRD
YWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldENhY2hlZEZvbnRQbGF0
Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRDYWNoZWRGb250RGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnJlbGVhc2VGb250RGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlVHJlZU5vZGUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6R2x5cGhQYWdlVHJlZU5vZGU6OnRyZWVHbHlwaFBhZ2VDb3VudCk6CisgICAgICAgIChX
ZWJDb3JlOjpHbHlwaFBhZ2VUcmVlTm9kZTo6cGFnZUNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkdseXBoUGFnZVRyZWVOb2RlOjpwcnVuZVRyZWVDdXN0b21Gb250RGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpHbHlwaFBhZ2VUcmVlTm9kZTo6cHJ1bmVUcmVlRm9udERhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6R2x5cGhQYWdlVHJlZU5vZGU6OnBydW5lQ3VzdG9tRm9udERhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6R2x5cGhQYWdlVHJlZU5vZGU6OnBydW5lRm9udERhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6R2x5cGhQYWdlVHJlZU5vZGU6OnNob3dTdWJ0cmVlKToKKyAgICAgICAgKHNob3dH
bHlwaFBhZ2VUcmVlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5n
U3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRCYWNraW5nU3RvcmU6OnVwZGF0ZVRp
bGVCdWZmZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkQmFja2luZ1N0b3JlOjpyZXNpemVF
ZGdlVGlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRCYWNraW5nU3RvcmU6OnNldEtlZXBS
ZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vY2YvTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0YuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QVZGV3Jh
cHBlcjo6YXZmV3JhcHBlckZvckNhbGxiYWNrQ29udGV4dCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclRpbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyVGlsZXI6OnVwbG9hZFRleHR1cmVzSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJUaWxlcjo6YWRkVGlsZUpvYik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyOjpiaW5k
Q29udGVudHNUZXh0dXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGlj
c0xheWVyQ0EuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjptb3ZlT3JD
b3B5QW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnBhdXNl
QW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6bGF5ZXJEaWRE
aXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlR2VvbWV0
cnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjp1cGRhdGVUcmFuc2Zvcm0p
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjp1cGRhdGVDaGlsZHJlblRyYW5z
Zm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZU1hc2tzVG9C
b3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjp1cGRhdGVDb250ZW50
c1Zpc2liaWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjp1cGRhdGVD
b250ZW50c09wYXF1ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnVwZGF0
ZUJhY2tmYWNlVmlzaWJpbGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6
OnVwZGF0ZUZpbHRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjplbnN1
cmVTdHJ1Y3R1cmFsTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjp1
cGRhdGVMYXllckRyYXdzQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVy
Q0E6OnVwZGF0ZUNvbnRlbnRzSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXll
ckNBOjp1cGRhdGVDb250ZW50c1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXll
ckNBOjp1cGRhdGVNYXNrTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNB
Ojp1cGRhdGVMYXllckFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXll
ckNBOjpzZXRBbmltYXRpb25PbkxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXJDQTo6cmVtb3ZlQ0FBbmltYXRpb25Gcm9tTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllckNBOjpwYXVzZUNBQW5pbWF0aW9uT25MYXllcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0xheWVyQ0E6OnN1c3BlbmRBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJDQTo6cmVzdW1lQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0xheWVyQ0E6OmZpbmRPck1ha2VDbG9uZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0xheWVyQ0E6OnNldE9wYWNpdHlJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0xheWVyQ0E6OnVwZGF0ZU9wYWNpdHlPbkxheWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jYS9tYWMvVGlsZUNhY2hlLm1tOgorICAgICAgICAoV2ViQ29yZTo6VGlsZUNhY2hl
OjpzZXRTY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlQ2FjaGU6OnNldEFjY2VsZXJhdGVz
RHJhd2luZyk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlQ2FjaGU6OnNldFRpbGVEZWJ1Z0JvcmRl
cldpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVDYWNoZTo6c2V0VGlsZURlYnVnQm9yZGVy
Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZUNhY2hlOjpyZXZhbGlkYXRlVGlsZXMpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3Bw
OgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyOjphbmltYXRpb25TdGFydGVkKToKKyAgICAgICAg
KHJlc3VibWl0QWxsQW5pbWF0aW9ucyk6CisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXI6OmFuaW1h
dGlvbkZvcktleSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENh
Y2hlQ2hyb21pdW1XaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TG9va3VwQWx0TmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpmb250Q29udGFpbnNDaGFyYWN0ZXIpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRVdGlsc0Nocm9taXVtV2luLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmdldERlcml2ZWRGb250RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6bWFwQW5pbWF0aW9uTmFtZVRvSWQpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYW5hZ2VyOjpyZWxlYXNlVG9rZW4pOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dHVyZU1hbmFnZXI6OnVucHJvdGVjdFRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hbmFnZXI6OnVucHJvdGVjdEFsbFRleHR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYW5hZ2VyOjphbGxvY2F0ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dHVyZU1hbmFnZXI6OnJlcXVlc3RUZXh0dXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGls
ZWRMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKToKKyAgICAgICAgKFdlYkNvcmU6OlRp
bGVkTGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJUcmVlSG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpU
aWxlZExheWVyQ2hyb21pdW06OmludmFsaWRhdGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRp
bGVkTGF5ZXJDaHJvbWl1bTo6cmVzZXRVcGRhdGVTdGF0ZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1hZ2VUcmFja2VyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNDRGFtYWdlVHJhY2tlcjo6dHJhY2tEYW1hZ2VGcm9tTGVmdG92ZXJSZWN0cyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRpbGluZ0RhdGEuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRpbGluZ0RhdGE6OnNldEJvdW5kcyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6c3RhcnRSYXRlTGltaXRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnN0b3BSYXRlTGltaXRlcik6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJQcm9ncmFtLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUZpbHRlclByb2dyYW06Om5vdGlmeUNsaWVudHMpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9HTENvbnRleHRHdGsuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6R0xDb250ZXh0OjpnZXRDb250ZXh0Rm9yV2lkZ2V0KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNraWEuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Z2V0Q2FjaGVkSGFyZmJ1enpGYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OnJlbGVhc2VD
YWNoZWRIYXJmYnV6ekZhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21w
bGV4VGV4dENvbnRyb2xsZXJBVFNVSS5jcHA6CisgICAgICAgIChXZWJDb3JlOjppbml0aWFsaXpl
QVRTVVN0eWxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERh
dGFDb3JlVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6Z2V0Q0ZT
dHJpbmdBdHRyaWJ1dGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxl
Rm9udERhdGFNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6cGxhdGZv
cm1EZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpjYW5SZW5kZXJD
b21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjb21waWxlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6Z2V0U2hhZGVySW5mb0xvZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6Z2V0U2hhZGVyU291cmNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyQW5pbWF0aW9uczo6aGFzQWN0aXZlQW5pbWF0aW9uc09mVHlwZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQW5pbWF0aW9uczo6aGFzUnVubmluZ0FuaW1h
dGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckFuaW1hdGlvbnM6OnBhdXNl
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJBbmltYXRpb25zOjphcHBseSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFyZWRHTERhdGE6OmN1cnJl
bnRTaGFyZWRHTERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMRGF0YTo6
U2hhcmVkR0xEYXRhOjp+U2hhcmVkR0xEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpnZXRTaGFkZXJQcm9ncmFtKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250UGxhdGZvcm1EYXRhLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZpeGVkU2l6ZUZvbnREYXRhOjpjcmVhdGUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2d0ay9EYXRhT2JqZWN0R3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFPYmplY3RHdGs6
OmZvckNsaXBib2FyZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL0d0a0RyYWdBbmREcm9wSGVs
cGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okd0a0RyYWdBbmREcm9wSGVscGVyOjpoYW5kbGVH
ZXREcmFnRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHdGtEcmFnQW5kRHJvcEhlbHBlcjo6aGFu
ZGxlRHJhZ0xlYXZlKToKKyAgICAgICAgKFdlYkNvcmU6Okd0a0RyYWdBbmREcm9wSGVscGVyOjpo
YW5kbGVEcmFnTW90aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Okd0a0RyYWdBbmREcm9wSGVscGVy
OjpoYW5kbGVEcmFnRGF0YVJlY2VpdmVkKToKKyAgICAgICAgKFdlYkNvcmU6Okd0a0RyYWdBbmRE
cm9wSGVscGVyOjpoYW5kbGVEcmFnRHJvcCk6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL1JlbmRl
clRoZW1lR3RrMy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpndGtTdHlsZUNoYW5nZWRDYWxsYmFj
ayk6CisgICAgICAgIChXZWJDb3JlOjpnZXRTdHlsZUNvbnRleHQpOgorICAgICAgICAqIHBsYXRm
b3JtL21hYy9TY3JvbGxiYXJUaGVtZU1hYy5tbToKKyAgICAgICAgKCtbV2ViU2Nyb2xsYmFyUHJl
ZnNPYnNlcnZlciBhcHBlYXJhbmNlUHJlZnNDaGFuZ2VkOl0pOgorICAgICAgICAqIHBsYXRmb3Jt
L25ldHdvcmsvQ3JlZGVudGlhbFN0b3JhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3JlZGVu
dGlhbFN0b3JhZ2U6OnNldCk6CisgICAgICAgIChXZWJDb3JlOjpDcmVkZW50aWFsU3RvcmFnZTo6
Z2V0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0hUVFBIZWFkZXJNYXAuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRUUEhlYWRlck1hcDo6Y29weURhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRUUEhlYWRlck1hcDo6Z2V0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL01JTUVI
ZWFkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TUlNRUhlYWRlcjo6cGFyc2VIZWFkZXIpOgor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdEJhc2U6OmFkZEhUVFBIZWFkZXJGaWVsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3RCYXNlOjphZGRIVFRQSGVhZGVyRmllbGRzKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9uZXR3b3JrL2JsYWNrYmVycnkvTmV0d29ya0pvYi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpO
ZXR3b3JrSm9iOjpub3RpZnlIZWFkZXJzUmVjZWl2ZWQpOgorICAgICAgICAoV2ViQ29yZTo6TmV0
d29ya0pvYjo6aGFuZGxlTm90aWZ5TXVsdGlwYXJ0SGVhZGVyUmVjZWl2ZWQpOgorICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJjZVJlcXVlc3RCbGFja0JlcnJ5LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdDo6aW5pdGlhbGl6ZVBsYXRmb3Jt
UmVxdWVzdCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNG
TmV0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VGaW5hbFJlcXVlc3QpOgorICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0Q0ZOZXQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6c2V0SGVhZGVyRmllbGRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1
cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNl
SGFuZGxlTWFuYWdlcjo6aW5pdGlhbGl6ZUhhbmRsZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9tYWMvUmVzb3VyY2VSZXF1ZXN0TWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0Ojpkb1VwZGF0ZVBsYXRmb3JtUmVxdWVzdCk6CisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9xdC9SZXNvdXJjZVJlcXVlc3RRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3Q6OnRvTmV0d29ya1JlcXVlc3QpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdv
cmsvc291cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlUmVxdWVzdDo6dXBkYXRlU291cE1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0Ojp0b1NvdXBNZXNzYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvUmVzb3VyY2VSZXNwb25zZVNvdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VS
ZXNwb25zZTo6dG9Tb3VwTWVzc2FnZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay93aW4v
UmVzb3VyY2VIYW5kbGVXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6
OnN0YXJ0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9SdW5Mb29wUXQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UnVuTG9vcDo6VGltZXJCYXNlOjp0aW1lckZpcmVkKToKKyAgICAgICAgKiBwbGF0
Zm9ybS90ZXh0L0xvY2FsZVRvU2NyaXB0TWFwcGluZ0RlZmF1bHQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6c2NyaXB0TmFtZVRvQ29kZSk6CisgICAgICAgIChXZWJDb3JlOjpsb2NhbGVUb1Njcmlw
dENvZGVGb3JGb250U2VsZWN0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRFbmNv
ZGluZ1JlZ2lzdHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBydW5lQmxhY2tsaXN0ZWRDb2Rl
Y3MpOgorICAgICAgICAoV2ViQ29yZTo6ZHVtcFRleHRFbmNvZGluZ05hbWVNYXApOgorICAgICAg
ICAqIHBsYXRmb3JtL3RleHQvdHJhbnNjb2Rlci9Gb250VHJhbnNjb2Rlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGb250VHJhbnNjb2Rlcjo6Y29udmVydGVyVHlwZSk6CisgICAgICAgICogcGxh
dGZvcm0vdGV4dC93aW5jZS9UZXh0Q29kZWNXaW5DRS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpM
YW5ndWFnZU1hbmFnZXI6Okxhbmd1YWdlTWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpnZXRD
b2RlUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNXaW5DRTo6cmVnaXN0ZXJFeHRl
bmRlZEVuY29kaW5nTmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjV2luQ0U6OnJl
Z2lzdGVyRXh0ZW5kZWRDb2RlY3MpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjV2luQ0U6
OmVudW1lcmF0ZVN1cHBvcnRlZEVuY29kaW5ncyk6CisgICAgICAgICogcGxhdGZvcm0vd2luL0Ns
aXBib2FyZFV0aWxpdGllc1dpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXREYXRhTWFwSXRl
bSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRDbGlwYm9hcmREYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OnNldENsaXBib2FyZERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9DbGlwYm9hcmRX
aW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkV2luOjp0eXBlcyk6CisgICAgICAg
ICogcGxhdGZvcm0vd2luL0ZpbGVTeXN0ZW1XaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2Fj
aGVkU3RvcmFnZURpcmVjdG9yeSk6CisgICAgICAgICogcGxhdGZvcm0vd2luL1J1bkxvb3BXaW4u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UnVuTG9vcDo6VGltZXJCYXNlOjp0aW1lckZpcmVkKToK
KyAgICAgICAgKiBwbGF0Zm9ybS93aW4vV0NEYXRhT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OldDRGF0YU9iamVjdDo6Y3JlYXRlSW5zdGFuY2UpOgorICAgICAgICAqIHBsYXRmb3JtL3dp
bmNlL01JTUVUeXBlUmVnaXN0cnlXaW5DRS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNSU1FVHlw
ZVJlZ2lzdHJ5OjpnZXRQcmVmZXJyZWRFeHRlbnNpb25Gb3JNSU1FVHlwZSk6CisgICAgICAgICog
cGxhdGZvcm0vd3gvQ29udGV4dE1lbnVXeC5jcHA6CisgICAgICAgIChDb250ZXh0TWVudTo6YXBw
ZW5kSXRlbSk6CisgICAgICAgICogcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6cmVmcmVzaCk6CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5EYXRhYmFzZTo6TUlNRVR5cGVGb3JFeHRlbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6
UGx1Z2luRGF0YWJhc2U6OnJlbW92ZSk6CisgICAgICAgICogcGx1Z2lucy9QbHVnaW5NYWluVGhy
ZWFkU2NoZWR1bGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbk1haW5UaHJlYWRTY2hl
ZHVsZXI6OnNjaGVkdWxlQ2FsbCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5NYWluVGhyZWFk
U2NoZWR1bGVyOjpkaXNwYXRjaENhbGxzKToKKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpblN0cmVh
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5TdHJlYW06OnN0YXJ0U3RyZWFtKToKKyAg
ICAgICAgKiBwbHVnaW5zL2JsYWNrYmVycnkvUGx1Z2luRGF0YUJsYWNrQmVycnkuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YTo6aW5pdFBsdWdpbnMpOgorICAgICAgICAqIHBsdWdp
bnMvZWZsL1BsdWdpbkRhdGFFZmwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YTo6
aW5pdFBsdWdpbnMpOgorICAgICAgICAqIHBsdWdpbnMvd3gvUGx1Z2luRGF0YVd4LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGE6OmluaXRQbHVnaW5zKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvSW5saW5lRmxvd0JveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVGbG93Qm94
OjpyZXF1aXJlc0lkZW9ncmFwaGljQmFzZWxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5l
Rmxvd0JveDo6YWRkVGV4dEJveFZpc3VhbE92ZXJmbG93KToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmNsZWFyRmxv
YXRzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnNldExvZ2ljYWxXaWR0aEZvclRleHRSdW4pOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpjYWNo
ZWRTaXplRm9yT3ZlcmZsb3dDbGlwKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9k
ZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VRdWFsaXR5Q29udHJvbGxlcjo6
aGlnaFF1YWxpdHlSZXBhaW50VGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVF1
YWxpdHlDb250cm9sbGVyOjpzaG91bGRQYWludEF0TG93UXVhbGl0eSk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQ291bnRl
cjo6ZGVzdHJveUNvdW50ZXJOb2Rlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJDb3VudGVy
OjpkZXN0cm95Q291bnRlck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6dXBkYXRlQ291bnRlcnMp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQ291bnRlcjo6cmVuZGVyZXJTdHlsZUNoYW5nZWQp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OnNldFJlZ2lvblJhbmdlRm9yQm94KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OmdldFJlZ2lvblJhbmdlRm9yQm94KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXI6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OnBlcmZvcm1PdmVybGFwVGVzdHMpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTmFtZWRGbG93VGhyZWFkOjpkZXBlbmRzT24pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTmFtZWRGbG93VGhyZWFkOjpwdXNoRGVwZW5kZW5jaWVzKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJl
Z2lvbjo6c2V0UmVnaW9uQm94ZXNSZWdpb25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJSZWdpb246OnJlc3RvcmVSZWdpb25Cb3hlc09yaWdpbmFsU3R5bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyUmVnaW9uOjpzZXRSZW5kZXJCb3hSZWdpb25JbmZvKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclJlZ2lvbjo6cmVuZGVyQm94UmVnaW9uU3R5bGUpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGFibGVTZWN0aW9uOjpjYWNoZWRDb2xsYXBzZWRCb3JkZXIpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJUaGVtZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpz
eXN0ZW1Db2xvcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6c2VsZWN0aW9uQm91bmRzKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclZpZXc6OnNldFNlbGVjdGlvbik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
cldpZGdldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJXaWRnZXQ6OnJlc3VtZVdpZGdl
dEhpZXJhcmNoeVVwZGF0ZXMpOgorICAgICAgICAqIHJlbmRlcmluZy9Sb290SW5saW5lQm94LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJvb3RJbmxpbmVCb3g6OmFzY2VudEFuZERlc2NlbnRGb3JC
b3gpOgorICAgICAgICAqIHJlbmRlcmluZy9WZXJ0aWNhbFBvc2l0aW9uQ2FjaGUuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlZlcnRpY2FsUG9zaXRpb25DYWNoZTo6Z2V0KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU1ZHSW5saW5lVGV4dDo6Y2hhcmFjdGVyU3RhcnRzTmV3VGV4dENodW5rKToKKyAgICAgICAg
KiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2Vk
KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudDo6YXBwbHlSZXNv
dXJjZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuOjphcHBseVJl
c291cmNlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlc0NhY2hlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1Jlc291cmNlc0NhY2hlOjpyZXNvdXJjZURlc3Ryb3llZCk6
CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSb290SW5saW5lQm94LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OnN3YXBJdGVtc0luTGF5b3V0QXR0cmlidXRlcyk6CisgICAgICAgICogcmVuZGVy
aW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRlcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdUZXh0TGF5b3V0QXR0cmlidXRlczo6ZHVtcCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9T
VkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
VGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyOjpidWlsZExheW91dEF0dHJpYnV0ZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyOjpmaWxsQ2hhcmFj
dGVyRGF0YU1hcCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5l
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRMYXlvdXRFbmdpbmU6OmxheW91dFRleHRP
bkxpbmVPclBhdGgpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3NCdWls
ZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRNZXRyaWNzQnVpbGRlcjo6bWVhc3Vy
ZVRleHRSZW5kZXJlcik6CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFTeW5jOjpzeW5jVGltZXJGaXJlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYVN5bmM6OnBlcmZvcm1JbXBvcnQpOgorICAgICAgICAo
V2ViQ29yZTo6U3RvcmFnZUFyZWFTeW5jOjpzeW5jKToKKyAgICAgICAgKiBzdG9yYWdlL1N0b3Jh
Z2VNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU1hcDo6a2V5KToKKyAgICAgICAg
KFdlYkNvcmU6OlN0b3JhZ2VNYXA6OnNldEl0ZW0pOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFn
ZU5hbWVzcGFjZUltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU5hbWVzcGFjZUlt
cGw6OmxvY2FsU3RvcmFnZU5hbWVzcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlTmFt
ZXNwYWNlSW1wbDo6Y29weSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNlSW1w
bDo6Y2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU5hbWVzcGFjZUltcGw6OmNsZWFy
QWxsT3JpZ2luc0ZvckRlbGV0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VOYW1lc3Bh
Y2VJbXBsOjpzeW5jKToKKyAgICAgICAgKiBzdmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlQW5pbWF0aW9u
RWxlbWVudEZyb21UYXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRG9jdW1lbnRFeHRlbnNp
b25zOjphZGRQZW5kaW5nUmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRG9jdW1lbnRF
eHRlbnNpb25zOjppc0VsZW1lbnRQZW5kaW5nUmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlRWxlbWVudEZyb21QZW5kaW5nUmVzb3VyY2Vz
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0RvY3VtZW50RXh0ZW5zaW9uczo6c2V0T2ZFbGVtZW50
c1JlZmVyZW5jaW5nVGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0RvY3VtZW50RXh0ZW5z
aW9uczo6cmVtb3ZlQWxsVGFyZ2V0UmVmZXJlbmNlc0ZvckVsZW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZW1vdmVBbGxFbGVtZW50UmVmZXJlbmNlc0Zv
clRhcmdldCk6CisgICAgICAgICogc3ZnL1NWR0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHRWxlbWVudDo6flNWR0VsZW1lbnQpOgorICAgICAgICAqIHN2Zy9hbmltYXRpb24vU01J
TFRpbWVDb250YWluZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWVDb250YWluZXI6
OmJhc2VWYWx1ZUZvcik6CisgICAgICAgIChXZWJDb3JlOjpTTUlMVGltZUNvbnRhaW5lcjo6dXBk
YXRlQW5pbWF0aW9ucyk6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR0ltYWdlQ2FjaGUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2VDYWNoZTo6flNWR0ltYWdlQ2FjaGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2VDYWNoZTo6cmVtb3ZlUmVuZGVyZXJGcm9tQ2FjaGUpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2VDYWNoZTo6cmVxdWVzdGVkU2l6ZUFuZFpvb20pOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2VDYWNoZTo6aW1hZ2VDb250ZW50Q2hhbmdlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZUNhY2hlOjpyZWRyYXcpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHSW1hZ2VDYWNoZTo6bG9va3VwT3JDcmVhdGVCaXRtYXBJbWFnZUZvclJlbmRlcmVyKToK
KyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjplZmZlY3RSZWZlcmVuY2VzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmFkZEJ1aWx0aW5FZmZlY3RzKToKKyAgICAg
ICAgKiBzdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5Lmg6CisgICAgICAgIChXZWJD
b3JlOjpTVkdBbmltYXRlZFByb3BlcnR5Ojp+U1ZHQW5pbWF0ZWRQcm9wZXJ0eSk6CisgICAgICAg
ICogc3ZnL3Byb3BlcnRpZXMvU1ZHQXR0cmlidXRlVG9Qcm9wZXJ0eU1hcC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdBdHRyaWJ1dGVUb1Byb3BlcnR5TWFwOjphZGRQcm9wZXJ0aWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0F0dHJpYnV0ZVRvUHJvcGVydHlNYXA6OnN5bmNocm9uaXplUHJv
cGVydGllcyk6CisgICAgICAgICogd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OldvcmtlckNvbnRleHQ6Omhhc1BlbmRpbmdBY3Rpdml0eSk6CisgICAgICAgICog
d29ya2Vycy9Xb3JrZXJFdmVudFF1ZXVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckV2
ZW50UXVldWU6OmNsb3NlKToKKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OnNldFJlcXVlc3RIZWFkZXJJbnRlcm5hbCk6
CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6Z2V0QWxsUmVzcG9uc2VIZWFkZXJz
KToKKyAgICAgICAgKiB4bWwvWFBhdGhGdW5jdGlvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
WFBhdGg6OmNyZWF0ZUZ1bmN0aW9uKToKKyAgICAgICAgKiB4bWwvWFBhdGhQYXJzZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OmlzQXhpc05hbWUpOgorICAgICAgICAqIHhtbC9YU0xU
UHJvY2Vzc29yTGlieHNsdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp4c2x0UGFyYW1BcnJheUZy
b21QYXJhbWV0ZXJNYXApOgorICAgICAgICAqIHhtbC9YU0xUUHJvY2Vzc29yUXQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6WFNMVFByb2Nlc3Nvcjo6dHJhbnNmb3JtVG9TdHJpbmcpOgorCiAyMDEy
LTAzLTI5ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQWRkIHNldHRp
bmcgdG8gZGlzYWJsZSBKYXZhIGZvciBsb2NhbCBmaWxlcyBldmVuIGlmIGl0IGlzIG90aGVyd2lz
ZSBlbmFibGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5nZUxvZwppbmRleCBkMjNmZTk2NTZmMzIw
N2FiNzQ3NzkzOTQ4ZDY0MDI3ZmM2ZjdkMGZmLi5lOGE3Zjg2NGZlNDBiODIxMDEwNmE5M2U5NjFl
MjE3ZjA1MmVlMGI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwy
OSBAQAorMjAxMi0wNC0wMiAgQ2FpbyBNYXJjZWxvIGRlIE9saXZlaXJhIEZpbGhvICA8Y2Fpby5v
bGl2ZWlyYUBvcGVuYm9zc2Eub3JnPgorCisgICAgICAgIFJlbmFtZSBmaXJzdC9zZWNvbmQgdG8g
a2V5L3ZhbHVlIGluIEhhc2hNYXAgaXRlcmF0b3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Mjc4NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogQXBpL0JhY2tpbmdTdG9yZS5jcHA6CisgICAgICAgIChC
bGFja0JlcnJ5OjpXZWJLaXQ6OkJhY2tpbmdTdG9yZVByaXZhdGU6OnNldEJhY2tpbmdTdG9yZVJl
Y3QpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpCYWNraW5nU3RvcmVQcml2YXRlOjp2
aXNpYmxlVGlsZXNSZWN0KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6QmFja2luZ1N0
b3JlUHJpdmF0ZTo6cmVzZXRUaWxlcyk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkJh
Y2tpbmdTdG9yZVByaXZhdGU6OnVwZGF0ZVRpbGVzKToKKyAgICAgICAgKEJsYWNrQmVycnk6Oldl
YktpdDo6QmFja2luZ1N0b3JlUHJpdmF0ZTo6dXBkYXRlVGlsZXNGb3JTY3JvbGxPck5vdFJlbmRl
cmVkUmVnaW9uKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6QmFja2luZ1N0b3JlUHJp
dmF0ZTo6bWFwRnJvbVRyYW5zZm9ybWVkQ29udGVudHNUb1RpbGVzKToKKyAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnkuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVMb2FkZXJDbGllbnRCbGFja0JlcnJ5OjpkaXNwYXRjaFdpbGxTZW5kUmVxdWVz
dCk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpjYW5jZWwp
OgorICAgICAgICAoV2ViQ29yZTo6Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6b25QZXJtaXNz
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6Om5vdGlm
aWNhdGlvbkNsaWNrZWQpOgorICAgICAgICAqIFdlYktpdFN1cHBvcnQvRmF0RmluZ2Vycy5jcHA6
CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkZhdEZpbmdlcnM6OmZpbmRCZXN0UG9pbnQp
OgorICAgICAgICAqIFdlYktpdFN1cHBvcnQvRnJhbWVMYXllcnMuY3BwOgorICAgICAgICAoQmxh
Y2tCZXJyeTo6V2ViS2l0OjpGcmFtZUxheWVyczo6cmVtb3ZlTGF5ZXJCeUZyYW1lKToKKyAgICAg
ICAgKEJsYWNrQmVycnk6OldlYktpdDo6RnJhbWVMYXllcnM6OmNvbW1pdE9uV2ViS2l0VGhyZWFk
KToKKwogMjAxMi0wNC0wMSAgQXJ2aWQgTmlsc3NvbiAgPGFuaWxzc29uQHJpbS5jb20+CiAKICAg
ICAgICAgW0JsYWNrQmVycnldIFNpbXBsaWZ5IHRoZSBjb2RlIHRoYXQgZ2V0cyBhY2NlbGVyYXRl
ZCBjb21wb3NpdGluZyBvdXRwdXQgb250byB0aGUgc2NyZWVuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCmluZGV4IDZkNzllYjA0YTFhZWRjNDNkOGVjNTE5N2I1ZGUxZmNhMTFmOGMwOWQuLjQzNmI5
ZDUxOGVmYWQyYThjNTkyNmEwN2FjZjlkMDIxMWE5MWEwNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTItMDQtMDIgIENhaW8gTWFyY2VsbyBkZSBPbGl2
ZWlyYSBGaWxobyAgPGNhaW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KKworICAgICAgICBSZW5h
bWUgZmlyc3Qvc2Vjb25kIHRvIGtleS92YWx1ZSBpbiBIYXNoTWFwIGl0ZXJhdG9ycworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI3ODQKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHNyYy9XZWJHZW9sb2Nh
dGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5jcHA6CisgICAgICAgIChXZWJHZW9sb2NhdGlv
blBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlcjo6cmVtb3ZlKToKKyAgICAgICAgKiB0ZXN0cy9XZWJT
b2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyVGVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpURVNU
X0YpOgorCiAyMDEyLTA0LTAyICBBbGV4YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgW0Nocm9taXVtXSBVbnJldmlld2VkLCBDQ0xheWVyVHJlZUhvc3QgcnVu
TXVsdGlUaHJlYWQgaXMgZmxha3kuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKaW5kZXggNjg1ZDc5NDM1YjBjZmI0
ZDUyNjUwZjM1ZDZkZTI0NWQ0NTBlNjA1OS4uYTQ4OTkwNzM3ZDU0M2Q1ZDVlZDczN2NhM2NhZmU0
YjI3Mjg3MGZkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDEyLTA0LTAy
ICBDYWlvIE1hcmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gIDxjYWlvLm9saXZlaXJhQG9wZW5ib3Nz
YS5vcmc+CisKKyAgICAgICAgUmVuYW1lIGZpcnN0L3NlY29uZCB0byBrZXkvdmFsdWUgaW4gSGFz
aE1hcCBpdGVyYXRvcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTgyNzg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNHdGsuY3BwOgorICAgICAg
ICAoUGxhdGZvcm1TdHJhdGVnaWVzR3RrOjpnZXRQbHVnaW5JbmZvKToKKyAgICAgICAgKiB3ZWJr
aXQvd2Via2l0ZmF2aWNvbmRhdGFiYXNlLmNwcDoKKyAgICAgICAgKHdlYmtpdEZhdmljb25EYXRh
YmFzZUltcG9ydEZpbmlzaGVkKToKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0d2VicGx1Z2luLmNw
cDoKKyAgICAgICAgKHdlYmtpdF93ZWJfcGx1Z2luX2dldF9taW1ldHlwZXMpOgorCiAyMDEyLTAz
LTMwICBNYXJrIFBpbGdyaW0gIDxwaWxncmltQGNocm9taXVtLm9yZz4KIAogICAgICAgICBHRU9M
T0NBVElPTiBzaG91bGQgYmUgaW1wbGVtZW50ZWQgYXMgUGFnZSBTdXBwbGVtZW50CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFu
Z2VMb2cKaW5kZXggYmY2Zjk2MTllZWFlZTY1ZmI5NmNkMjhjOWZkYjc3Njg5ZDY4ZDAxNi4uYzIw
ODE0ZjBmMjVjMDFiNWI0MDA2Zjg3NzJiMWE5ZDg3YWNjZmQyNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDQ0IEBACisyMDEyLTA0LTAyICBDYWlvIE1hcmNlbG8gZGUgT2xpdmVpcmEgRmls
aG8gIDxjYWlvLm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+CisKKyAgICAgICAgUmVuYW1lIGZpcnN0
L3NlY29uZCB0byBrZXkvdmFsdWUgaW4gSGFzaE1hcCBpdGVyYXRvcnMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyNzg0CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBIaXN0b3J5L1dlYkhpc3RvcnkubW06
CisgICAgICAgICgtW1dlYkhpc3RvcnlQcml2YXRlIHJlbW92ZUl0ZW1Gcm9tRGF0ZUNhY2hlczpd
KToKKyAgICAgICAgKC1bV2ViSGlzdG9yeVByaXZhdGUgb3JkZXJlZExhc3RWaXNpdGVkRGF5c10p
OgorICAgICAgICAoV2ViSGlzdG9yeVdyaXRlcjo6V2ViSGlzdG9yeVdyaXRlcik6CisgICAgICAg
ICogTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbToKKyAgICAgICAgKCtbV2ViQ29yZVN0YXRpc3Rp
Y3MgamF2YVNjcmlwdFByb3RlY3RlZE9iamVjdFR5cGVDb3VudHNdKToKKyAgICAgICAgKCtbV2Vi
Q29yZVN0YXRpc3RpY3MgamF2YVNjcmlwdE9iamVjdFR5cGVDb3VudHNdKToKKyAgICAgICAgKiBQ
bHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyLm1tOgorICAgICAgICAoV2Vi
S2l0OjpOZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyOjpob3N0Rm9yUGx1Z2luKToKKyAgICAgICAg
KFdlYktpdDo6TmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlcjo6cGx1Z2luSG9zdERpZWQpOgorICAg
ICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyOjpkaWRDcmVhdGVXaW5kb3cp
OgorICAgICAgICAqIFBsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdFByb3h5Lm1tOgor
ICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkhvc3RQcm94eTo6cGx1Z2luSG9zdERpZWQp
OgorICAgICAgICAqIFBsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5t
bToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpMb2NhbE9i
amVjdE1hcDo6aWRGb3JPYmplY3QpOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbklu
c3RhbmNlUHJveHk6OkxvY2FsT2JqZWN0TWFwOjpyZXRhaW4pOgorICAgICAgICAoV2ViS2l0OjpO
ZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OkxvY2FsT2JqZWN0TWFwOjpyZWxlYXNlKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpMb2NhbE9iamVjdE1h
cDo6Zm9yZ2V0KToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5
OjpkZXN0cm95KToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5
Ojp3ZWJGcmFtZURpZEZpbmlzaExvYWRXaXRoUmVhc29uKToKKyAgICAgICAgKFdlYktpdDo6TmV0
c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpjYW5jZWxDaGVja0lmQWxsb3dlZFRvTG9hZFVSTCk6
CisgICAgICAgICogUGx1Z2lucy9Ib3N0ZWQvUHJveHlJbnN0YW5jZS5tbToKKyAgICAgICAgKFdl
YktpdDo6UHJveHlJbnN0YW5jZTo6bWV0aG9kc05hbWVkKToKKyAgICAgICAgKFdlYktpdDo6UHJv
eHlJbnN0YW5jZTo6ZmllbGROYW1lZCk6CisgICAgICAgICogUGx1Z2lucy9XZWJOZXRzY2FwZVBs
dWdpblZpZXcubW06CisgICAgICAgICgtW1dlYk5ldHNjYXBlUGx1Z2luVmlldyBzdG9wVGltZXJz
XSk6CisgICAgICAgICgtW1dlYk5ldHNjYXBlUGx1Z2luVmlldyBzdGFydFRpbWVyc10pOgorICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYk5vdGlmaWNhdGlvbkNsaWVudC5tbToKKyAgICAgICAg
KFdlYk5vdGlmaWNhdGlvbkNsaWVudDo6c2hvdyk6CisgICAgICAgIChXZWJOb3RpZmljYXRpb25D
bGllbnQ6OmNsZWFyTm90aWZpY2F0aW9ucyk6CisgICAgICAgIChXZWJOb3RpZmljYXRpb25DbGll
bnQ6Om5vdGlmaWNhdGlvbk9iamVjdERlc3Ryb3llZCk6CisgICAgICAgICogV2ViVmlldy9XZWJI
VE1MVmlldy5tbToKKyAgICAgICAgKGNvbW1hbmROYW1lRm9yU2VsZWN0b3IpOgorCiAyMDEyLTA0
LTAxICBKb24gTGVlICA8am9ubGVlQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW5hbWUgbm90aWZp
Y2F0aW9uIHByb3BlcnRpZXMgYW5kIGZ1bmN0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9xdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwppbmRleCBhZWE2ZDUz
NzdjZDE4Yzc2OTFlZDRkNzNhNGI4Njc1NGM5YWMzZWRjLi43ZDJiY2IwMGUzMzg0YjQ2YWZjMjVj
MTc5OWIxYjQwMmExNWU4ZDBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDEy
LTA0LTAyICBDYWlvIE1hcmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gIDxjYWlvLm9saXZlaXJhQG9w
ZW5ib3NzYS5vcmc+CisKKyAgICAgICAgUmVuYW1lIGZpcnN0L3NlY29uZCB0byBrZXkvdmFsdWUg
aW4gSGFzaE1hcCBpdGVyYXRvcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTgyNzg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBBcGkvcXdlYnBhZ2UuY3BwOgorICAgICAgICAoZXh0cmFjdENvbnRlbnRU
eXBlRnJvbVBsdWdpblZlY3Rvcik6CisgICAgICAgICogQXBpL3F3ZWJwbHVnaW5kYXRhYmFzZS5j
cHA6CisgICAgICAgIChRV2ViUGx1Z2luSW5mbzo6bWltZVR5cGVzKToKKyAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNRdC5jcHA6CisgICAgICAgIChQbGF0Zm9ybVN0
cmF0ZWdpZXNRdDo6Z2V0UGx1Z2luSW5mbyk6CisKIDIwMTItMDQtMDIgIENhc3BlciB2YW4gRG9u
ZGVyZW4gIDxjYXNwZXIudmFuZG9uZGVyZW5Abm9raWEuY29tPgogCiAgICAgICAgIFF0OiBEb2M6
IEZpeCB0eXBvIHdoaWNoIG1hcmtzIGRvY3VtZW50IHRvIGJlIHByaW50ZWQgaW4gY29uc29sZSBm
b250LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC93aW4vQ2hhbmdlTG9nCmluZGV4IDNkNzUxMDA3NjgyYjMyNDdhOGU1YzkyOWQ5ZjlmM2I1
ZDNjNzhkOTkuLjZkNDU0Y2M5MTQ2ZWNiNGI2OGU2NjcxMjdjYjU4Mjg2MGU3ODI5OGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L3dp
bi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOCBAQAorMjAxMi0wNC0wMiAgQ2FpbyBNYXJjZWxvIGRl
IE9saXZlaXJhIEZpbGhvICA8Y2Fpby5vbGl2ZWlyYUBvcGVuYm9zc2Eub3JnPgorCisgICAgICAg
IFJlbmFtZSBmaXJzdC9zZWNvbmQgdG8ga2V5L3ZhbHVlIGluIEhhc2hNYXAgaXRlcmF0b3JzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Mjc4NAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogQ09NUHJvcGVy
dHlCYWcuaDoKKyAgICAgICAgKDo6R2V0UHJvcGVydHlJbmZvKToKKyAgICAgICAgKDo6UmVhZCk6
CisgICAgICAgICogV2ViQ29yZVN0YXRpc3RpY3MuY3BwOgorICAgICAgICAoV2ViQ29yZVN0YXRp
c3RpY3M6OmphdmFTY3JpcHRQcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzKToKKyAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwOgorICAgICAgICAoV2ViUGxh
dGZvcm1TdHJhdGVnaWVzOjpnZXRQbHVnaW5JbmZvKToKKyAgICAgICAgKiBXZWJIaXN0b3J5LmNw
cDoKKyAgICAgICAgKFdlYkhpc3Rvcnk6OnJlbW92ZUl0ZW1Gcm9tRGF0ZUNhY2hlcyk6CisgICAg
ICAgICogV2ViS2l0Q09NQVBJLmNwcDoKKyAgICAgICAgKGNsYXNzRmFjdG9yeSk6CisgICAgICAg
ICogV2ViS2l0U3RhdGlzdGljcy5jcHA6CisgICAgICAgIChXZWJLaXRTdGF0aXN0aWNzOjpjb21D
bGFzc05hbWVDb3VudHMpOgorICAgICAgICAqIFdlYk5vdGlmaWNhdGlvbkNlbnRlci5jcHA6Cisg
ICAgICAgIChXZWJOb3RpZmljYXRpb25DZW50ZXI6OnBvc3ROb3RpZmljYXRpb25JbnRlcm5hbCk6
CisgICAgICAgIChXZWJOb3RpZmljYXRpb25DZW50ZXI6OmFkZE9ic2VydmVyKToKKyAgICAgICAg
KFdlYk5vdGlmaWNhdGlvbkNlbnRlcjo6cmVtb3ZlT2JzZXJ2ZXIpOgorCiAyMDEyLTAzLTMwICBN
YXJrIFBpbGdyaW0gIDxwaWxncmltQGNocm9taXVtLm9yZz4KIAogICAgICAgICBHRU9MT0NBVElP
TiBzaG91bGQgYmUgaW1wbGVtZW50ZWQgYXMgUGFnZSBTdXBwbGVtZW50CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L3dpbmNlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvd2luY2UvQ2hhbmdl
TG9nCmluZGV4IDM4YjFiNmY3OGRiMmNkMzUzMWUzNTc1MWM2MjljMWQ2NzU1NzYxY2IuLmQ0YWUx
YmNiMzYzYmU2OGE0NmNjNjhiZmEzYzhlZTlkM2UzYWIzOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvd2luY2UvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luY2UvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTMgQEAKKzIwMTItMDQtMDIgIENhaW8gTWFyY2VsbyBkZSBPbGl2ZWlyYSBG
aWxobyAgPGNhaW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KKworICAgICAgICBSZW5hbWUgZmly
c3Qvc2Vjb25kIHRvIGtleS92YWx1ZSBpbiBIYXNoTWFwIGl0ZXJhdG9ycworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI3ODQKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRm
b3JtU3RyYXRlZ2llc1dpbkNFLmNwcDoKKyAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNF
OjpnZXRQbHVnaW5JbmZvKToKKwogMjAxMi0wMy0zMCAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJv
Z2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBbV2luQ0VdIENvcnJlY3QgPHd0Zi8qLmg+IGluY2x1
ZGUgcGF0aHMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYjY0OGZkYzJlNGRkNjNjMWUzOGQyYWRhMjRlOThkYWM5
ODFiMmU3My4uNGZiYTk2NGY1M2I0ZmNiM2NlM2E5NDM0Mjg1NmU5Y2JiNjU1MDFmZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDEwNSBAQAorMjAxMi0wNC0wMiAgQ2FpbyBNYXJjZWxvIGRlIE9saXZl
aXJhIEZpbGhvICA8Y2Fpby5vbGl2ZWlyYUBvcGVuYm9zc2Eub3JnPgorCisgICAgICAgIFJlbmFt
ZSBmaXJzdC9zZWNvbmQgdG8ga2V5L3ZhbHVlIGluIEhhc2hNYXAgaXRlcmF0b3JzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Mjc4NAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogUGxhdGZvcm0vQ29yZUlQ
Qy9Bcmd1bWVudENvZGVycy5oOiBBZGQgQXJndW1lbnRDb2RlciBmb3IgSGFzaE1hcEVudHJ5IHR5
cGVzLgorICAgICAgICAqIFBsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5jcHA6CisgICAgICAg
IChDb3JlSVBDOjpDb25uZWN0aW9uOjpTeW5jTWVzc2FnZVN0YXRlOjpnZXRPckNyZWF0ZSk6Cisg
ICAgICAgIChDb3JlSVBDOjpDb25uZWN0aW9uOjp3YWl0Rm9yTWVzc2FnZSk6CisgICAgICAgIChD
b3JlSVBDOjpDb25uZWN0aW9uOjpwcm9jZXNzSW5jb21pbmdNZXNzYWdlKToKKyAgICAgICAgKiBQ
bGF0Zm9ybS9ndGsvV29ya1F1ZXVlR3RrLmNwcDoKKyAgICAgICAgKFdvcmtRdWV1ZTo6cmVnaXN0
ZXJFdmVudFNvdXJjZUhhbmRsZXIpOgorICAgICAgICAoV29ya1F1ZXVlOjp1bnJlZ2lzdGVyRXZl
bnRTb3VyY2VIYW5kbGVyKToKKyAgICAgICAgKiBQbGF0Zm9ybS9tYWMvV29ya1F1ZXVlTWFjLmNw
cDoKKyAgICAgICAgKFdvcmtRdWV1ZTo6dW5yZWdpc3Rlck1hY2hQb3J0RXZlbnRIYW5kbGVyKToK
KyAgICAgICAgKiBTaGFyZWQvUGx1Z2lucy9OUFJlbW90ZU9iamVjdE1hcC5jcHA6CisgICAgICAg
IChXZWJLaXQ6Ok5QUmVtb3RlT2JqZWN0TWFwOjpwbHVnaW5EZXN0cm95ZWQpOgorICAgICAgICAq
IFNoYXJlZC9Vc2VyTWVzc2FnZUNvZGVycy5oOgorICAgICAgICAoV2ViS2l0OjpVc2VyTWVzc2Fn
ZUVuY29kZXI6OmJhc2VFbmNvZGUpOgorICAgICAgICAqIFNoYXJlZC9XZWJQcmVmZXJlbmNlc1N0
b3JlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6dmFsdWVGb3JLZXkpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQcmVmZXJlbmNlc1N0b3JlOjpnZXRCb29sVmFsdWVGb3JLZXkpOgorICAgICAgICAqIFNo
YXJlZC9ndGsvV2ViQ29yZUFyZ3VtZW50Q29kZXJzR3RrLmNwcDoKKyAgICAgICAgKENvcmVJUEM6
Ojo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvbWFjL1dlYkNvcmVBcmd1bWVudENvZGVyc01h
Yy5tbToKKyAgICAgICAgKENvcmVJUEM6Ojo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvcXQv
QXJndW1lbnRDb2RlcnNRdC5jcHA6CisgICAgICAgIChDb3JlSVBDOjo6OmRlY29kZSk6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHA6CisgICAgICAgICh3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X3N1YnJlc291cmNlcyk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9t
YWMvV0tQcmludGluZ1ZpZXcubW06CisgICAgICAgICgtW1dLUHJpbnRpbmdWaWV3IF9leHBlY3Rl
ZFByZXZpZXdDYWxsYmFja0ZvclJlY3Q6XSk6CisgICAgICAgIChwYWdlRGlkRHJhd1RvUERGKToK
KyAgICAgICAgKC1bV0tQcmludGluZ1ZpZXcgX2RyYXdQcmV2aWV3Ol0pOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbToKKyAgICAgICAgKGNvbW1hbmROYW1lRm9yU2VsZWN0
b3IpOgorICAgICAgICAoLVtXS1ZpZXcgdmFsaWRhdGVVc2VySW50ZXJmYWNlSXRlbTpdKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94
eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Okdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5h
Z2VyUHJveHk6OmludmFsaWRhdGVSZXF1ZXN0cyk6CisgICAgICAgICogVUlQcm9jZXNzL05vdGlm
aWNhdGlvbnMvTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94
eTo6aW52YWxpZGF0ZVJlcXVlc3RzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvUGx1Z2lucy9QbHVn
aW5Qcm9jZXNzUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5Qcm9jZXNzUHJveHk6
OnBsdWdpblByb2Nlc3NDcmFzaGVkT3JGYWlsZWRUb0xhdW5jaCk6CisgICAgICAgICogVUlQcm9j
ZXNzL1dlYkNvbnRleHQuY3BwOgorICAgICAgICAoV2ViS2l0OjpjcmVhdGVEaWN0aW9uYXJ5RnJv
bUhhc2hNYXApOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJJY29uRGF0YWJhc2UuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJJY29uRGF0YWJhc2U6OmRpZEZpbmlzaFVSTEltcG9ydCk6CisgICAg
ICAgICogVUlQcm9jZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVyLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnN5bmNMYXllclBhcmFtZXRlcnMpOgorICAgICAgICAo
V2ViS2l0OjpXZWJMYXllclRyZWVSZW5kZXJlcjo6YXNzaWduSW1hZ2VUb0xheWVyKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzc1Byb3h5OjpjaGVja1VSTFJlY2VpdmVkRnJvbVdlYlByb2Nlc3MpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OmFkZEJhY2tGb3J3YXJkSXRlbSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6ZnJhbWVDb3VudEluUGFnZSk6CisgICAgICAgICogVUlQ
cm9jZXNzL3F0L0xheWVyQmFja2luZ1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJC
YWNraW5nU3RvcmU6OnVwZGF0ZVRpbGUpOgorICAgICAgICAoV2ViS2l0OjpMYXllckJhY2tpbmdT
dG9yZTo6dGV4dHVyZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyQmFja2luZ1N0b3JlOjpwYWlu
dFRvVGV4dHVyZU1hcHBlcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyQmFja2luZ1N0b3JlOjpj
b21taXRUaWxlT3BlcmF0aW9ucyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9HZW9sb2NhdGlvbi9H
ZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6
Okdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyOjpjYW5jZWxSZXF1ZXN0Rm9yR2Vv
bG9jYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0
TWFuYWdlcjo6ZGlkUmVjZWl2ZUdlb2xvY2F0aW9uUGVybWlzc2lvbkRlY2lzaW9uKToKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZU5vZGVIYW5k
bGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU6OmdldE9y
Q3JlYXRlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3Rl
ZEJ1bmRsZVJhbmdlSGFuZGxlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVS
YW5nZUhhbmRsZTo6Z2V0T3JDcmVhdGUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvTm90aWZpY2F0
aW9ucy9XZWJOb3RpZmljYXRpb25NYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViTm90
aWZpY2F0aW9uTWFuYWdlcjo6cG9saWN5Rm9yT3JpZ2luKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Tm90aWZpY2F0aW9uTWFuYWdlcjo6c2hvdyk6CisgICAgICAgIChXZWJLaXQ6OldlYk5vdGlmaWNh
dGlvbk1hbmFnZXI6OmNsZWFyTm90aWZpY2F0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OldlYk5v
dGlmaWNhdGlvbk1hbmFnZXI6OnJlbW92ZU5vdGlmaWNhdGlvbkZyb21Db250ZXh0TWFwKToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0TWFwLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6TlBSdW50aW1lT2JqZWN0TWFwOjppbnZhbGlkYXRlKToKKyAg
ICAgICAgKFdlYktpdDo6TlBSdW50aW1lT2JqZWN0TWFwOjpmaW5hbGl6ZSk6CisgICAgICAgICog
V2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6TmV0c2NhcGVQbHVnaW46OmRlc3Ryb3lTdHJlYW0pOgorICAgICAgICAoV2ViS2l0
OjpOZXRzY2FwZVBsdWdpbjo6dW5zY2hlZHVsZVRpbWVyKToKKyAgICAgICAgKFdlYktpdDo6TmV0
c2NhcGVQbHVnaW46OmZyYW1lRGlkRmluaXNoTG9hZGluZyk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHNjYXBlUGx1Z2luOjpmcmFtZURpZEZhaWwpOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lu
cy9QbHVnaW5WaWV3LmNwcDoKKyAgICAgICAgKFdlYktpdDo6YnVpbGRIVFRQSGVhZGVycyk6Cisg
ICAgICAgIChXZWJLaXQ6OlBsdWdpblZpZXc6On5QbHVnaW5WaWV3KToKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR3JhcGhpY3NMYXllcjo6bGF5ZXJCeUlEKToKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViQmFja0ZvcndhcmRMaXN0UHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJCYWNrRm9yd2FyZExpc3RQcm94eTo6cmVtb3ZlSXRlbSk6CisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tOgorICAgICAgICAoV2ViS2l0Ojpjb21tYW5kTmFt
ZUZvclNlbGVjdG9yTmFtZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVy
VHJlZUhvc3RRdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6YWRvcHRJ
bWFnZUJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6cmVs
ZWFzZUltYWdlQmFja2luZ1N0b3JlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nlc3Mu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjp2aXNpdGVkTGlua1N0YXRlQ2hhbmdl
ZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OmFsbFZpc2l0ZWRMaW5rU3RhdGVDaGFu
Z2VkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6Zm9jdXNlZFdlYlBhZ2UpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpjcmVhdGVXZWJQYWdlKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzczo6d2ViUGFnZUdyb3VwKToKKyAgICAgICAgKFdlYktpdDo6ZnJvbUNvdW50
ZWRTZXRUb0hhc2hNYXApOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpzZXRUZXh0Q2hl
Y2tlclN0YXRlKToKKwogMjAxMi0wMy0yOSAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgog
CiAgICAgICAgIEFkZCBzZXR0aW5nIHRvIGRpc2FibGUgSmF2YSBmb3IgbG9jYWwgZmlsZXMgZXZl
biBpZiBpdCBpcyBvdGhlcndpc2UgZW5hYmxlZApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQ2FsbGJhY2tPYmplY3QuaAppbmRleCA5YWNhMGM3ZTE4Y2E1Y2NjY2VlNzM1OWVhMzkxYzI4
MzRiMGExYWM4Li5hYzAxNTlkOThhOGIzMjRkNWZmODgyMDBiOTUzZTFlYzA2YTAzYTBlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaApAQCAtODMsMTMg
KzgzLDEzIEBAIHN0cnVjdCBKU0NhbGxiYWNrT2JqZWN0RGF0YSA6IFdlYWtIYW5kbGVPd25lciB7
CiAgICAgICAgICAgICBQcml2YXRlUHJvcGVydHlNYXA6OmNvbnN0X2l0ZXJhdG9yIGxvY2F0aW9u
ID0gbV9wcm9wZXJ0eU1hcC5maW5kKHByb3BlcnR5TmFtZS5pbXBsKCkpOwogICAgICAgICAgICAg
aWYgKGxvY2F0aW9uID09IG1fcHJvcGVydHlNYXAuZW5kKCkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIEpTVmFsdWUoKTsKLSAgICAgICAgICAgIHJldHVybiBsb2NhdGlvbi0+c2Vjb25kLmdldCgp
OworICAgICAgICAgICAgcmV0dXJuIGxvY2F0aW9uLT52YWx1ZS5nZXQoKTsKICAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgdm9pZCBzZXRQcml2YXRlUHJvcGVydHkoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBKU0NlbGwqIG93bmVyLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWUgdmFsdWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtu
b3duPiBlbXB0eTsKLSAgICAgICAgICAgIG1fcHJvcGVydHlNYXAuYWRkKHByb3BlcnR5TmFtZS5p
bXBsKCksIGVtcHR5KS5pdGVyYXRvci0+c2Vjb25kLnNldChnbG9iYWxEYXRhLCBvd25lciwgdmFs
dWUpOworICAgICAgICAgICAgbV9wcm9wZXJ0eU1hcC5hZGQocHJvcGVydHlOYW1lLmltcGwoKSwg
ZW1wdHkpLml0ZXJhdG9yLT52YWx1ZS5zZXQoZ2xvYmFsRGF0YSwgb3duZXIsIHZhbHVlKTsKICAg
ICAgICAgfQogICAgICAgICAKICAgICAgICAgdm9pZCBkZWxldGVQcml2YXRlUHJvcGVydHkoY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQpAQCAtMTAwLDggKzEwMCw4IEBAIHN0cnVjdCBK
U0NhbGxiYWNrT2JqZWN0RGF0YSA6IFdlYWtIYW5kbGVPd25lciB7CiAgICAgICAgIHZvaWQgdmlz
aXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICAgICAgewogICAgICAgICAgICAg
Zm9yIChQcml2YXRlUHJvcGVydHlNYXA6Oml0ZXJhdG9yIHB0ciA9IG1fcHJvcGVydHlNYXAuYmVn
aW4oKTsgcHRyICE9IG1fcHJvcGVydHlNYXAuZW5kKCk7ICsrcHRyKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKHB0ci0+c2Vjb25kKQotICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgm
cHRyLT5zZWNvbmQpOworICAgICAgICAgICAgICAgIGlmIChwdHItPnZhbHVlKQorICAgICAgICAg
ICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgmcHRyLT52YWx1ZSk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxi
YWNrT2JqZWN0RnVuY3Rpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJh
Y2tPYmplY3RGdW5jdGlvbnMuaAppbmRleCBlNmJiODg0NGM3NDg1YWJkZmJiYzE5ZWZiZDk1YWZm
ZjNmNzRmNjcxLi5iZjkwNDg0ZWJjODQ4Y2EwYjYyNjc5MGFlYzkwMzFjMWQ1YjlkZWM5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlv
bnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5j
dGlvbnMuaApAQCAtNDYyLDggKzQ2Miw4IEBAIHZvaWQgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+
OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSoKICAgICAg
ICAgICAgIHR5cGVkZWYgT3BhcXVlSlNDbGFzc1N0YXRpY1ZhbHVlc1RhYmxlOjpjb25zdF9pdGVy
YXRvciBpdGVyYXRvcjsKICAgICAgICAgICAgIGl0ZXJhdG9yIGVuZCA9IHN0YXRpY1ZhbHVlcy0+
ZW5kKCk7CiAgICAgICAgICAgICBmb3IgKGl0ZXJhdG9yIGl0ID0gc3RhdGljVmFsdWVzLT5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgICAgICBTdHJpbmdJbXBsKiBuYW1l
ID0gaXQtPmZpcnN0LmdldCgpOwotICAgICAgICAgICAgICAgIFN0YXRpY1ZhbHVlRW50cnkqIGVu
dHJ5ID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgICAgICBTdHJpbmdJbXBsKiBuYW1l
ID0gaXQtPmtleS5nZXQoKTsKKyAgICAgICAgICAgICAgICBTdGF0aWNWYWx1ZUVudHJ5KiBlbnRy
eSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgICAgICBpZiAoZW50cnktPmdldFByb3Bl
cnR5ICYmICghKGVudHJ5LT5hdHRyaWJ1dGVzICYga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RW51
bSkgfHwgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykpKQogICAgICAgICAgICAg
ICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyKGV4ZWMsIG5hbWUpKTsKICAgICAg
ICAgICAgIH0KQEAgLTQ3Myw4ICs0NzMsOCBAQCB2b2lkIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50
Pjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqCiAgICAg
ICAgICAgICB0eXBlZGVmIE9wYXF1ZUpTQ2xhc3NTdGF0aWNGdW5jdGlvbnNUYWJsZTo6Y29uc3Rf
aXRlcmF0b3IgaXRlcmF0b3I7CiAgICAgICAgICAgICBpdGVyYXRvciBlbmQgPSBzdGF0aWNGdW5j
dGlvbnMtPmVuZCgpOwogICAgICAgICAgICAgZm9yIChpdGVyYXRvciBpdCA9IHN0YXRpY0Z1bmN0
aW9ucy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5n
SW1wbCogbmFtZSA9IGl0LT5maXJzdC5nZXQoKTsKLSAgICAgICAgICAgICAgICBTdGF0aWNGdW5j
dGlvbkVudHJ5KiBlbnRyeSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICAgICAgU3Ry
aW5nSW1wbCogbmFtZSA9IGl0LT5rZXkuZ2V0KCk7CisgICAgICAgICAgICAgICAgU3RhdGljRnVu
Y3Rpb25FbnRyeSogZW50cnkgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICAgICAgaWYg
KCEoZW50cnktPmF0dHJpYnV0ZXMgJiBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRFbnVtKSB8fCAo
bW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKSkKICAgICAgICAgICAgICAgICAgICAg
cHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihleGVjLCBuYW1lKSk7CiAgICAgICAgICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2xhc3NSZWYuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NsYXNzUmVmLmNwcAppbmRleCAxMzUzNGQwNzhj
NmI5Yjg3ODFmMDk5NmE2YmI5ODhiMzdmNGRiZDNjLi4yZjMzM2MyYjg1ODBkYTMyMzU5MGJhNjk4
MzhjODMyYjI5OGQyYzA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
Q2xhc3NSZWYuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDbGFzc1JlZi5j
cHAKQEAgLTEwNywxMyArMTA3LDEzIEBAIE9wYXF1ZUpTQ2xhc3M6On5PcGFxdWVKU0NsYXNzKCkK
ICAgICBpZiAobV9zdGF0aWNWYWx1ZXMpIHsKICAgICAgICAgT3BhcXVlSlNDbGFzc1N0YXRpY1Zh
bHVlc1RhYmxlOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3N0YXRpY1ZhbHVlcy0+ZW5kKCk7CiAg
ICAgICAgIGZvciAoT3BhcXVlSlNDbGFzc1N0YXRpY1ZhbHVlc1RhYmxlOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fc3RhdGljVmFsdWVzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAg
ICAgICBBU1NFUlQoIWl0LT5maXJzdC0+aXNJZGVudGlmaWVyKCkpOworICAgICAgICAgICAgQVNT
RVJUKCFpdC0+a2V5LT5pc0lkZW50aWZpZXIoKSk7CiAgICAgfQogCiAgICAgaWYgKG1fc3RhdGlj
RnVuY3Rpb25zKSB7CiAgICAgICAgIE9wYXF1ZUpTQ2xhc3NTdGF0aWNGdW5jdGlvbnNUYWJsZTo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9zdGF0aWNGdW5jdGlvbnMtPmVuZCgpOwogICAgICAgICBm
b3IgKE9wYXF1ZUpTQ2xhc3NTdGF0aWNGdW5jdGlvbnNUYWJsZTo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtX3N0YXRpY0Z1bmN0aW9ucy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAg
ICAgQVNTRVJUKCFpdC0+Zmlyc3QtPmlzSWRlbnRpZmllcigpKTsKKyAgICAgICAgICAgIEFTU0VS
VCghaXQtPmtleS0+aXNJZGVudGlmaWVyKCkpOwogICAgIH0KICNlbmRpZgogICAgIApAQCAtMTQ3
LDggKzE0Nyw4IEBAIE9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YTo6T3BhcXVlSlNDbGFzc0NvbnRl
eHREYXRhKEpTQzo6SlNHbG9iYWxEYXRhJiwgT3BhcXVlSlNDCiAgICAgICAgIHN0YXRpY1ZhbHVl
cyA9IGFkb3B0UHRyKG5ldyBPcGFxdWVKU0NsYXNzU3RhdGljVmFsdWVzVGFibGUpOwogICAgICAg
ICBPcGFxdWVKU0NsYXNzU3RhdGljVmFsdWVzVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGpz
Q2xhc3MtPm1fc3RhdGljVmFsdWVzLT5lbmQoKTsKICAgICAgICAgZm9yIChPcGFxdWVKU0NsYXNz
U3RhdGljVmFsdWVzVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0ganNDbGFzcy0+bV9zdGF0aWNW
YWx1ZXMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgQVNTRVJUKCFp
dC0+Zmlyc3QtPmlzSWRlbnRpZmllcigpKTsKLSAgICAgICAgICAgIHN0YXRpY1ZhbHVlcy0+YWRk
KFN0cmluZ0ltcGw6OmNyZWF0ZShpdC0+Zmlyc3QtPmNoYXJhY3RlcnMoKSwgaXQtPmZpcnN0LT5s
ZW5ndGgoKSksIGFkb3B0UHRyKG5ldyBTdGF0aWNWYWx1ZUVudHJ5KGl0LT5zZWNvbmQtPmdldFBy
b3BlcnR5LCBpdC0+c2Vjb25kLT5zZXRQcm9wZXJ0eSwgaXQtPnNlY29uZC0+YXR0cmlidXRlcykp
KTsKKyAgICAgICAgICAgIEFTU0VSVCghaXQtPmtleS0+aXNJZGVudGlmaWVyKCkpOworICAgICAg
ICAgICAgc3RhdGljVmFsdWVzLT5hZGQoU3RyaW5nSW1wbDo6Y3JlYXRlKGl0LT5rZXktPmNoYXJh
Y3RlcnMoKSwgaXQtPmtleS0+bGVuZ3RoKCkpLCBhZG9wdFB0cihuZXcgU3RhdGljVmFsdWVFbnRy
eShpdC0+dmFsdWUtPmdldFByb3BlcnR5LCBpdC0+dmFsdWUtPnNldFByb3BlcnR5LCBpdC0+dmFs
dWUtPmF0dHJpYnV0ZXMpKSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE1NiwxNSArMTU2LDE1
IEBAIE9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YTo6T3BhcXVlSlNDbGFzc0NvbnRleHREYXRhKEpT
Qzo6SlNHbG9iYWxEYXRhJiwgT3BhcXVlSlNDCiAgICAgICAgIHN0YXRpY0Z1bmN0aW9ucyA9IGFk
b3B0UHRyKG5ldyBPcGFxdWVKU0NsYXNzU3RhdGljRnVuY3Rpb25zVGFibGUpOwogICAgICAgICBP
cGFxdWVKU0NsYXNzU3RhdGljRnVuY3Rpb25zVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGpz
Q2xhc3MtPm1fc3RhdGljRnVuY3Rpb25zLT5lbmQoKTsKICAgICAgICAgZm9yIChPcGFxdWVKU0Ns
YXNzU3RhdGljRnVuY3Rpb25zVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0ganNDbGFzcy0+bV9z
dGF0aWNGdW5jdGlvbnMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAg
QVNTRVJUKCFpdC0+Zmlyc3QtPmlzSWRlbnRpZmllcigpKTsKLSAgICAgICAgICAgIHN0YXRpY0Z1
bmN0aW9ucy0+YWRkKFN0cmluZ0ltcGw6OmNyZWF0ZShpdC0+Zmlyc3QtPmNoYXJhY3RlcnMoKSwg
aXQtPmZpcnN0LT5sZW5ndGgoKSksIGFkb3B0UHRyKG5ldyBTdGF0aWNGdW5jdGlvbkVudHJ5KGl0
LT5zZWNvbmQtPmNhbGxBc0Z1bmN0aW9uLCBpdC0+c2Vjb25kLT5hdHRyaWJ1dGVzKSkpOworICAg
ICAgICAgICAgQVNTRVJUKCFpdC0+a2V5LT5pc0lkZW50aWZpZXIoKSk7CisgICAgICAgICAgICBz
dGF0aWNGdW5jdGlvbnMtPmFkZChTdHJpbmdJbXBsOjpjcmVhdGUoaXQtPmtleS0+Y2hhcmFjdGVy
cygpLCBpdC0+a2V5LT5sZW5ndGgoKSksIGFkb3B0UHRyKG5ldyBTdGF0aWNGdW5jdGlvbkVudHJ5
KGl0LT52YWx1ZS0+Y2FsbEFzRnVuY3Rpb24sIGl0LT52YWx1ZS0+YXR0cmlidXRlcykpKTsKICAg
ICAgICAgfQogICAgIH0KIH0KIAogT3BhcXVlSlNDbGFzc0NvbnRleHREYXRhJiBPcGFxdWVKU0Ns
YXNzOjpjb250ZXh0RGF0YShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgT3duUHRyPE9wYXF1ZUpT
Q2xhc3NDb250ZXh0RGF0YT4mIGNvbnRleHREYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpLm9wYXF1
ZUpTQ2xhc3NEYXRhLmFkZCh0aGlzLCBudWxscHRyKS5pdGVyYXRvci0+c2Vjb25kOworICAgIE93
blB0cjxPcGFxdWVKU0NsYXNzQ29udGV4dERhdGE+JiBjb250ZXh0RGF0YSA9IGV4ZWMtPmdsb2Jh
bERhdGEoKS5vcGFxdWVKU0NsYXNzRGF0YS5hZGQodGhpcywgbnVsbHB0cikuaXRlcmF0b3ItPnZh
bHVlOwogICAgIGlmICghY29udGV4dERhdGEpCiAgICAgICAgIGNvbnRleHREYXRhID0gYWRvcHRQ
dHIobmV3IE9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMp
KTsKICAgICByZXR1cm4gKmNvbnRleHREYXRhOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcAppbmRleCA2ZDhkMGNiNzg4N2JlMGRiZjFkYjM5ZWRhMWNjNGM0
MDUwZmJkNzMzLi5mNjQxYWViNWYzZDQwZGQwNmE4ZDNhN2I1ZGRlM2Q3MjY4ODliMmQ4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcApAQCAtNDgwLDcg
KzQ4MCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKICAg
ICAgICAgICAgIGRhdGFMb2coIiAgJTFkID0ge1xuIiwgaSk7CiAgICAgICAgICAgICBTdHJpbmdK
dW1wVGFibGU6OlN0cmluZ09mZnNldFRhYmxlOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3JhcmVE
YXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbaV0ub2Zmc2V0VGFibGUuZW5kKCk7CiAgICAg
ICAgICAgICBmb3IgKFN0cmluZ0p1bXBUYWJsZTo6U3RyaW5nT2Zmc2V0VGFibGU6OmNvbnN0X2l0
ZXJhdG9yIGl0ZXIgPSBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbaV0ub2Zm
c2V0VGFibGUuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikKLSAgICAgICAgICAgICAgICBk
YXRhTG9nKCJcdFx0XCIlc1wiID0+ICUwNGRcbiIsIFVTdHJpbmcoaXRlci0+Zmlyc3QpLnV0Zjgo
KS5kYXRhKCksIGl0ZXItPnNlY29uZC5icmFuY2hPZmZzZXQpOworICAgICAgICAgICAgICAgIGRh
dGFMb2coIlx0XHRcIiVzXCIgPT4gJTA0ZFxuIiwgVVN0cmluZyhpdGVyLT5rZXkpLnV0ZjgoKS5k
YXRhKCksIGl0ZXItPnZhbHVlLmJyYW5jaE9mZnNldCk7CiAgICAgICAgICAgICBkYXRhTG9nKCIg
ICAgICB9XG4iKTsKICAgICAgICAgICAgICsraTsKICAgICAgICAgfSB3aGlsZSAoaSA8IG1fcmFy
ZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5zaXplKCkpOwpAQCAtMTYxNCw3ICsxNjE0
LDcgQEAgdm9pZCBFdmFsQ29kZUNhY2hlOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBFdmFsQ2FjaGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fY2FjaGVNYXAuZW5k
KCk7CiAgICAgZm9yIChFdmFsQ2FjaGVNYXA6Oml0ZXJhdG9yIHB0ciA9IG1fY2FjaGVNYXAuYmVn
aW4oKTsgcHRyICE9IGVuZDsgKytwdHIpCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kKCZwdHItPnNl
Y29uZCk7CisgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZwdHItPnZhbHVlKTsKIH0KIAogdm9pZCBD
b2RlQmxvY2s6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0p1bXBUYWJsZS5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0p1bXBUYWJsZS5oCmluZGV4IDViYmUwNDcxMDdmNWIwMWMw
Mjg5YmVhMzMxODZlMWY4NGEzYWFmYzcuLjYwMzZjZGE1MWQ1YmNmNTY1ZWFlOTdlOGRiMjY1NTFj
OTAyNTVjNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9KdW1w
VGFibGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSnVtcFRhYmxlLmgK
QEAgLTU3LDcgKzU3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBTdHJpbmdPZmZz
ZXRUYWJsZTo6Y29uc3RfaXRlcmF0b3IgbG9jID0gb2Zmc2V0VGFibGUuZmluZCh2YWx1ZSk7CiAg
ICAgICAgICAgICBpZiAobG9jID09IGVuZCkKICAgICAgICAgICAgICAgICByZXR1cm4gZGVmYXVs
dE9mZnNldDsKLSAgICAgICAgICAgIHJldHVybiBsb2MtPnNlY29uZC5icmFuY2hPZmZzZXQ7Cisg
ICAgICAgICAgICByZXR1cm4gbG9jLT52YWx1ZS5icmFuY2hPZmZzZXQ7CiAgICAgICAgIH0KIAog
I2lmIEVOQUJMRShKSVQpCkBAIC02Nyw3ICs2Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICAgICAgU3RyaW5nT2Zmc2V0VGFibGU6OmNvbnN0X2l0ZXJhdG9yIGxvYyA9IG9mZnNldFRhYmxl
LmZpbmQodmFsdWUpOwogICAgICAgICAgICAgaWYgKGxvYyA9PSBlbmQpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGN0aURlZmF1bHQ7Ci0gICAgICAgICAgICByZXR1cm4gbG9jLT5zZWNvbmQuY3Rp
T2Zmc2V0OworICAgICAgICAgICAgcmV0dXJuIGxvYy0+dmFsdWUuY3RpT2Zmc2V0OwogICAgICAg
ICB9CiAjZW5kaWYKICAgICB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0xhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5jcHAKaW5kZXggZjE5OWI2OTIzMGE5
YmEwMDllNjU5MWYzZDQ5MDE3NGM5NWU2MTU3ZC4uZWQyYjZiNmQxN2MzNzgwMWUwNTA0MzNhMzQ1
YTliYzBjMWJiMDM2MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0xhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3BwCkBAIC04MSw3ICs4MSw3IEBAIExh
enlPcGVyYW5kVmFsdWVQcm9maWxlKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZVBhcnNlcjo6Z2V0
SWZQcmVzZW50KAogICAgIGlmIChpdGVyID09IG1fbWFwLmVuZCgpKQogICAgICAgICByZXR1cm4g
MDsKICAgICAKLSAgICByZXR1cm4gaXRlci0+c2Vjb25kOworICAgIHJldHVybiBpdGVyLT52YWx1
ZTsKIH0KIAogUHJlZGljdGVkVHlwZSBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZVBhcnNlcjo6cHJl
ZGljdGlvbigKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVk
aWN0aW9uVHJhY2tlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWRpY3Rp
b25UcmFja2VyLmgKaW5kZXggNzU1MWNkM2YzZmZiNjQ2M2M0MTVhNThkNjQxNjNmMjQzMTllZGE5
Yi4uODViZDcxOWNlNzFlZWUwMjY4YmExOGQ5N2JkNzE3YmFmZWZlM2EzZSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWRpY3Rpb25UcmFja2VyLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWRpY3Rpb25UcmFja2VyLmgKQEAgLTU1
LDcgKzU1LDcgQEAgcHVibGljOgogICAgICAgICAgICAgbV9nbG9iYWxWYXJzLmFkZCh2YXJOdW1i
ZXIgKyAxLCBwcmVkaWN0aW9uU2xvdCk7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiBtZXJnZVByZWRpY3Rpb24oaXRlci0+c2Vjb25kLm1fdmFs
dWUsIHByZWRpY3Rpb24pOworICAgICAgICByZXR1cm4gbWVyZ2VQcmVkaWN0aW9uKGl0ZXItPnZh
bHVlLm1fdmFsdWUsIHByZWRpY3Rpb24pOwogICAgIH0KICAgICAKICAgICBQcmVkaWN0ZWRUeXBl
IGdldEdsb2JhbFZhclByZWRpY3Rpb24odW5zaWduZWQgdmFyTnVtYmVyKQpAQCAtNjMsNyArNjMs
NyBAQCBwdWJsaWM6CiAgICAgICAgIEhhc2hNYXA8dW5zaWduZWQsIFByZWRpY3Rpb25TbG90Pjo6
aXRlcmF0b3IgaXRlciA9IG1fZ2xvYmFsVmFycy5maW5kKHZhck51bWJlciArIDEpOwogICAgICAg
ICBpZiAoaXRlciA9PSBtX2dsb2JhbFZhcnMuZW5kKCkpCiAgICAgICAgICAgICByZXR1cm4gUHJl
ZGljdE5vbmU7Ci0gICAgICAgIHJldHVybiBpdGVyLT5zZWNvbmQubV92YWx1ZTsKKyAgICAgICAg
cmV0dXJuIGl0ZXItPnZhbHVlLm1fdmFsdWU7CiAgICAgfQogICAgIAogcHJpdmF0ZToKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVy
YXRvci5jcHAKaW5kZXggMGYwODU3OTUzMzY0MDRjNWEwNGZhMWU3YmNkYzE2YTAyN2UxZjFkYy4u
ZGJmMjNmZGVlNTliY2ZhM2ZkNWU5OTg2NDlmZTg4Njg1OTE0MjAxMCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5j
cHAKQEAgLTIwMyw3ICsyMDMsNyBAQCBib29sIEJ5dGVjb2RlR2VuZXJhdG9yOjphZGRWYXIoY29u
c3QgSWRlbnRpZmllciYgaWRlbnQsIGJvb2wgaXNDb25zdGFudCwgUmVnaXN0ZQogICAgIFN5bWJv
bFRhYmxlOjpBZGRSZXN1bHQgcmVzdWx0ID0gc3ltYm9sVGFibGUoKS5hZGQoaWRlbnQuaW1wbCgp
LCBuZXdFbnRyeSk7CiAKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIHIw
ID0gJnJlZ2lzdGVyRm9yKHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLmdldEluZGV4KCkpOworICAg
ICAgICByMCA9ICZyZWdpc3RlckZvcihyZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldEluZGV4KCkp
OwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0yMTcsNyArMjE3LDcgQEAgaW50
IEJ5dGVjb2RlR2VuZXJhdG9yOjphZGRHbG9iYWxWYXIoY29uc3QgSWRlbnRpZmllciYgaWRlbnQs
IGJvb2wgaXNDb25zdGFudCkKICAgICBTeW1ib2xUYWJsZUVudHJ5IG5ld0VudHJ5KGluZGV4LCBp
c0NvbnN0YW50ID8gUmVhZE9ubHkgOiAwKTsKICAgICBTeW1ib2xUYWJsZTo6QWRkUmVzdWx0IHJl
c3VsdCA9IHN5bWJvbFRhYmxlKCkuYWRkKGlkZW50LmltcGwoKSwgbmV3RW50cnkpOwogICAgIGlm
ICghcmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIGluZGV4ID0gcmVzdWx0Lml0ZXJhdG9yLT5z
ZWNvbmQuZ2V0SW5kZXgoKTsKKyAgICAgICAgaW5kZXggPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVl
LmdldEluZGV4KCk7CiAgICAgcmV0dXJuIGluZGV4OwogfQogCkBAIC05NzIsNyArOTcyLDcgQEAg
dW5zaWduZWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmFkZENvbnN0YW50KGNvbnN0IElkZW50aWZpZXIm
IGlkZW50KQogICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKICAgICAgICAgbV9jb2RlQmxvY2st
PmFkZElkZW50aWZpZXIoSWRlbnRpZmllcihtX2dsb2JhbERhdGEsIHJlcCkpOwogCi0gICAgcmV0
dXJuIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3It
PnZhbHVlOwogfQogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6YWRkQ29uc3RhbnRW
YWx1ZShKU1ZhbHVlIHYpCkBAIC05ODUsNyArOTg1LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVH
ZW5lcmF0b3I6OmFkZENvbnN0YW50VmFsdWUoSlNWYWx1ZSB2KQogICAgICAgICArK21fbmV4dENv
bnN0YW50T2Zmc2V0OwogICAgICAgICBtX2NvZGVCbG9jay0+YWRkQ29uc3RhbnQoSlNWYWx1ZSh2
KSk7CiAgICAgfSBlbHNlCi0gICAgICAgIGluZGV4ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7
CisgICAgICAgIGluZGV4ID0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIAogICAgIHJldHVybiAm
bV9jb25zdGFudFBvb2xSZWdpc3RlcnNbaW5kZXhdOwogfQpAQCAtMTEzMiw3ICsxMTMyLDcgQEAg
UmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRMb2FkKFJlZ2lzdGVySUQqIGRzdCwg
ZG91YmxlIG51bWJlcikKICAgICAvLyB3b3JrIGNvcnJlY3RseSB3aXRoIE5hTiBhcyBhIGtleS4K
ICAgICBpZiAoaXNuYW4obnVtYmVyKSB8fCBudW1iZXIgPT0gSGFzaFRyYWl0czxkb3VibGU+Ojpl
bXB0eVZhbHVlKCkgfHwgSGFzaFRyYWl0czxkb3VibGU+Ojppc0RlbGV0ZWRWYWx1ZShudW1iZXIp
KQogICAgICAgICByZXR1cm4gZW1pdExvYWQoZHN0LCBqc051bWJlcihudW1iZXIpKTsKLSAgICBK
U1ZhbHVlJiB2YWx1ZUluTWFwID0gbV9udW1iZXJNYXAuYWRkKG51bWJlciwgSlNWYWx1ZSgpKS5p
dGVyYXRvci0+c2Vjb25kOworICAgIEpTVmFsdWUmIHZhbHVlSW5NYXAgPSBtX251bWJlck1hcC5h
ZGQobnVtYmVyLCBKU1ZhbHVlKCkpLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoIXZhbHVlSW5N
YXApCiAgICAgICAgIHZhbHVlSW5NYXAgPSBqc051bWJlcihudW1iZXIpOwogICAgIHJldHVybiBl
bWl0TG9hZChkc3QsIHZhbHVlSW5NYXApOwpAQCAtMTE0MCw3ICsxMTQwLDcgQEAgUmVnaXN0ZXJJ
RCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRMb2FkKFJlZ2lzdGVySUQqIGRzdCwgZG91YmxlIG51
bWJlcikKIAogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRMb2FkKFJlZ2lzdGVy
SUQqIGRzdCwgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllcikKIHsKLSAgICBKU1N0cmluZyom
IHN0cmluZ0luTWFwID0gbV9zdHJpbmdNYXAuYWRkKGlkZW50aWZpZXIuaW1wbCgpLCAwKS5pdGVy
YXRvci0+c2Vjb25kOworICAgIEpTU3RyaW5nKiYgc3RyaW5nSW5NYXAgPSBtX3N0cmluZ01hcC5h
ZGQoaWRlbnRpZmllci5pbXBsKCksIDApLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoIXN0cmlu
Z0luTWFwKQogICAgICAgICBzdHJpbmdJbk1hcCA9IGpzT3duZWRTdHJpbmcoZ2xvYmFsRGF0YSgp
LCBpZGVudGlmaWVyLnVzdHJpbmcoKSk7CiAgICAgcmV0dXJuIGVtaXRMb2FkKGRzdCwgSlNWYWx1
ZShzdHJpbmdJbk1hcCkpOwpAQCAtMTY0OCw3ICsxNjQ4LDcgQEAgdW5zaWduZWQgQnl0ZWNvZGVH
ZW5lcmF0b3I6OmFkZENvbnN0YW50QnVmZmVyKHVuc2lnbmVkIGxlbmd0aCkKIAogSlNTdHJpbmcq
IEJ5dGVjb2RlR2VuZXJhdG9yOjphZGRTdHJpbmdDb25zdGFudChjb25zdCBJZGVudGlmaWVyJiBp
ZGVudGlmaWVyKQogewotICAgIEpTU3RyaW5nKiYgc3RyaW5nSW5NYXAgPSBtX3N0cmluZ01hcC5h
ZGQoaWRlbnRpZmllci5pbXBsKCksIDApLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgSlNTdHJpbmcq
JiBzdHJpbmdJbk1hcCA9IG1fc3RyaW5nTWFwLmFkZChpZGVudGlmaWVyLmltcGwoKSwgMCkuaXRl
cmF0b3ItPnZhbHVlOwogICAgIGlmICghc3RyaW5nSW5NYXApIHsKICAgICAgICAgc3RyaW5nSW5N
YXAgPSBqc1N0cmluZyhnbG9iYWxEYXRhKCksIGlkZW50aWZpZXIudXN0cmluZygpKTsKICAgICAg
ICAgYWRkQ29uc3RhbnRWYWx1ZShzdHJpbmdJbk1hcCk7CkBAIC0xNzIwLDggKzE3MjAsOCBAQCBS
ZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdExhenlOZXdGdW5jdGlvbihSZWdpc3Rl
cklEKiBkc3QsIEZ1bmN0aW9uQm9keQogewogICAgIEZ1bmN0aW9uT2Zmc2V0TWFwOjpBZGRSZXN1
bHQgcHRyID0gbV9mdW5jdGlvbk9mZnNldHMuYWRkKGZ1bmN0aW9uLCAwKTsKICAgICBpZiAocHRy
LmlzTmV3RW50cnkpCi0gICAgICAgIHB0ci5pdGVyYXRvci0+c2Vjb25kID0gbV9jb2RlQmxvY2st
PmFkZEZ1bmN0aW9uRGVjbChtYWtlRnVuY3Rpb24obV9nbG9iYWxEYXRhLCBmdW5jdGlvbikpOwot
ICAgIHJldHVybiBlbWl0TmV3RnVuY3Rpb25JbnRlcm5hbChkc3QsIHB0ci5pdGVyYXRvci0+c2Vj
b25kLCB0cnVlKTsKKyAgICAgICAgcHRyLml0ZXJhdG9yLT52YWx1ZSA9IG1fY29kZUJsb2NrLT5h
ZGRGdW5jdGlvbkRlY2wobWFrZUZ1bmN0aW9uKG1fZ2xvYmFsRGF0YSwgZnVuY3Rpb24pKTsKKyAg
ICByZXR1cm4gZW1pdE5ld0Z1bmN0aW9uSW50ZXJuYWwoZHN0LCBwdHIuaXRlcmF0b3ItPnZhbHVl
LCB0cnVlKTsKIH0KIAogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXROZXdGdW5j
dGlvbkludGVybmFsKFJlZ2lzdGVySUQqIGRzdCwgdW5zaWduZWQgaW5kZXgsIGJvb2wgZG9OdWxs
Q2hlY2spCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05v
ZGVzQ29kZWdlbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVz
Q29kZWdlbi5jcHAKaW5kZXggY2Q5ZGUyMmYwNTk4Nzk4ZTI3YjI3NzFiOWI4N2U0NTEzNmE5Nzhj
ZC4uNmIzZjdlNTVlNGEzNWEyOWY4ZWFlMjM0NzJmZjYzMTAxNDIwMTg3OSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcApAQCAt
MjU4LDcgKzI1OCw3IEBAIFJlZ2lzdGVySUQqIFByb3BlcnR5TGlzdE5vZGU6OmVtaXRCeXRlY29k
ZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlCiAgICAgICAgICAgICBHZXR0
ZXJTZXR0ZXJQYWlyIHBhaXIobm9kZSwgc3RhdGljX2Nhc3Q8UHJvcGVydHlOb2RlKj4oMCkpOwog
ICAgICAgICAgICAgR2V0dGVyU2V0dGVyTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbWFwLmFkZChu
b2RlLT5uYW1lKCkuaW1wbCgpLCBwYWlyKTsKICAgICAgICAgICAgIGlmICghcmVzdWx0LmlzTmV3
RW50cnkpCi0gICAgICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQuc2Vjb25kID0g
bm9kZTsKKyAgICAgICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLnNlY29uZCA9IG5v
ZGU7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIHJlbWFpbmluZyBw
cm9wZXJ0aWVzIGluIHRoZSBsaXN0LgpAQCAtMjc2LDcgKzI3Niw3IEBAIFJlZ2lzdGVySUQqIFBy
b3BlcnR5TGlzdE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9y
LCBSZWdpc3RlCiAgICAgICAgICAgICBBU1NFUlQobm9kZS0+bV90eXBlID09IFByb3BlcnR5Tm9k
ZTo6R2V0dGVyIHx8IG5vZGUtPm1fdHlwZSA9PSBQcm9wZXJ0eU5vZGU6OlNldHRlcik7CiAgICAg
ICAgICAgICBHZXR0ZXJTZXR0ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLmZpbmQobm9kZS0+bmFt
ZSgpLmltcGwoKSk7CiAgICAgICAgICAgICBBU1NFUlQoaXQgIT0gbWFwLmVuZCgpKTsKLSAgICAg
ICAgICAgIEdldHRlclNldHRlclBhaXImIHBhaXIgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAg
R2V0dGVyU2V0dGVyUGFpciYgcGFpciA9IGl0LT52YWx1ZTsKIAogICAgICAgICAgICAgLy8gV2Fz
IHRoaXMgYWxyZWFkeSBnZW5lcmF0ZWQgYXMgYSBwYXJ0IG9mIGl0cyBwYXJ0bmVyPwogICAgICAg
ICAgICAgaWYgKHBhaXIuc2Vjb25kID09IG5vZGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rl
YnVnZ2VyL0RlYnVnZ2VyLmNwcAppbmRleCBlZGU4YTliYTI0OGI5YTg5NGI3OTE3NGVkNWQzMjBm
ODhmNWNjYjNlLi4xNDZiYWQxNTY2OTJiNTEwNDYwMTFlM2EzNzRmY2VkNTU5ZTFhODcwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAKQEAgLTU5LDcgKzU5
LDcgQEAgaW5saW5lIFJlY29tcGlsZXI6On5SZWNvbXBpbGVyKCkKICAgICAvLyBKYXZhU2NyaXB0
IGluIHRoZSBpbnNwZWN0b3IuCiAgICAgU291cmNlUHJvdmlkZXJNYXA6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IG1fc291cmNlUHJvdmlkZXJzLmVuZCgpOwogICAgIGZvciAoU291cmNlUHJvdmlkZXJN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX3NvdXJjZVByb3ZpZGVycy5iZWdpbigpOyBpdGVy
ICE9IGVuZDsgKytpdGVyKQotICAgICAgICBtX2RlYnVnZ2VyLT5zb3VyY2VQYXJzZWQoaXRlci0+
c2Vjb25kLCBpdGVyLT5maXJzdCwgLTEsIFVTdHJpbmcoKSk7CisgICAgICAgIG1fZGVidWdnZXIt
PnNvdXJjZVBhcnNlZChpdGVyLT52YWx1ZSwgaXRlci0+a2V5LCAtMSwgVVN0cmluZygpKTsKIH0K
IAogaW5saW5lIHZvaWQgUmVjb21waWxlcjo6b3BlcmF0b3IoKShKU0NlbGwqIGNlbGwpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5jcHAKaW5kZXgg
YWMyYzNkYjIxY2Y3NGExYTRkNjRiNDY4OWZmMTZmZWZlN2JkMWViMy4uZjhmNTYwMzhlOWQxZTFh
NWZhOTA2NWY2MDE4MzQ1MGZlZjQzM2U1MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBc3NlbWJseUhlbHBlcnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXNzZW1ibHlIZWxwZXJzLmNwcApAQCAtNDEsOSArNDEsOSBAQCBWZWN0b3I8Qnl0
ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiYgQXNzZW1ibHlIZWxwZXJzOjpkZWNvZGVkQ29kZU1hcEZv
cihDb2RlQmxvY2sqCiAgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBWZWN0b3I8Qnl0ZWNvZGVBbmRN
YWNoaW5lT2Zmc2V0PiA+OjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9kZWNvZGVkQ29kZU1hcHMuYWRk
KGNvZGVCbG9jaywgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4oKSk7CiAgICAgCiAg
ICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICBjb2RlQmxvY2stPmppdENvZGVNYXAo
KS0+ZGVjb2RlKHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKKyAgICAgICAgY29kZUJsb2NrLT5q
aXRDb2RlTWFwKCktPmRlY29kZShyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKICAgICAKLSAgICBy
ZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRv
ci0+dmFsdWU7CiB9CiAKICNpZiBFTkFCTEUoU0FNUExJTkdfRkxBR1MpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlQ2FjaGUuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVDYWNoZS5oCmluZGV4IGY2YTc0NWM2NjU4NzEzM2Ix
MmNiZDQ0ZmYzYTkyOWE5M2MxYmExMDcuLjhlZDE1NzhmMjZkM2E0ZTc1ZTIzYTlkOGVlZmYwOWFi
NGFiNjAwOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNv
ZGVDYWNoZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVDYWNo
ZS5oCkBAIC0xMzIsMTAgKzEzMiwxMCBAQCBwdWJsaWM6CiAgICAgICAgIE1hcDo6aXRlcmF0b3Ig
YmVnaW4gPSBtX21hcC5iZWdpbigpOwogICAgICAgICBNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fbWFw
LmVuZCgpOwogICAgICAgICBmb3IgKE1hcDo6aXRlcmF0b3IgaXRlciA9IGJlZ2luOyBpdGVyICE9
IGVuZDsgKytpdGVyKSB7Ci0gICAgICAgICAgICBpZiAoIWl0ZXItPnNlY29uZC5jb2RlQmxvY2sp
CisgICAgICAgICAgICBpZiAoIWl0ZXItPnZhbHVlLmNvZGVCbG9jaykKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChpdGVyLT5zZWNvbmQub3duZWQpIHsKLSAgICAg
ICAgICAgICAgICBkZWxldGUgaXRlci0+c2Vjb25kLmNvZGVCbG9jazsKKyAgICAgICAgICAgIGlm
IChpdGVyLT52YWx1ZS5vd25lZCkgeworICAgICAgICAgICAgICAgIGRlbGV0ZSBpdGVyLT52YWx1
ZS5jb2RlQmxvY2s7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KQEAgLTE0NSw3ICsxNDUsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBNYXA6
Oml0ZXJhdG9yIGl0ZXIgPSBtX21hcC5maW5kKGtleSk7CiAgICAgICAgIGlmIChpdGVyICE9IG1f
bWFwLmVuZCgpKQotICAgICAgICAgICAgcmV0dXJuIGl0ZXItPnNlY29uZC5jb2RlQmxvY2s7Cisg
ICAgICAgICAgICByZXR1cm4gaXRlci0+dmFsdWUuY29kZUJsb2NrOwogICAgICAgICAKICAgICAg
ICAgQnl0ZUNvZGVDYWNoZVZhbHVlIHZhbHVlOwogICAgICAgICAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKaW5kZXggZjBkYTZjYzAxYjcwZTg3
OWJiOTA5NzhjOGJhODcwNmZhZDg2OGQxZS4uMmE0NGFiMjU5MThmMzE3NjRjNWZlN2ZiYjZkZDZl
NTJmOWJmMTQ2MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRl
Q29kZVBhcnNlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29k
ZVBhcnNlci5jcHAKQEAgLTU1Myw5ICs1NTMsOSBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAg
SGFzaE1hcDxKU0NlbGwqLCBOb2RlSW5kZXg+OjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9jZWxsQ29u
c3RhbnROb2Rlcy5hZGQoY2VsbCwgTm9Ob2RlKTsKICAgICAgICAgaWYgKHJlc3VsdC5pc05ld0Vu
dHJ5KQotICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBhZGRUb0dyYXBoKFdl
YWtKU0NvbnN0YW50LCBPcEluZm8oY2VsbCkpOworICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZSA9IGFkZFRvR3JhcGgoV2Vha0pTQ29uc3RhbnQsIE9wSW5mbyhjZWxsKSk7CiAgICAg
ICAgIAotICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgIHJl
dHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogICAgIH0KICAgICAKICAgICBDb2RlT3JpZ2lu
IGN1cnJlbnRDb2RlT3JpZ2luKCkKQEAgLTI1OTgsNyArMjU5OCw3IEBAIEJ5dGVDb2RlUGFyc2Vy
OjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmVTdGFja0VudHJ5KEJ5dGVDb2RlUGFyc2VyKiBieXRl
Q29kZVBhcnNlCiAgICAgICAgICAgICBJZGVudGlmaWVyTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0g
Ynl0ZUNvZGVQYXJzZXItPm1faWRlbnRpZmllck1hcC5hZGQocmVwLCBieXRlQ29kZVBhcnNlci0+
bV9jb2RlQmxvY2stPm51bWJlck9mSWRlbnRpZmllcnMoKSk7CiAgICAgICAgICAgICBpZiAocmVz
dWx0LmlzTmV3RW50cnkpCiAgICAgICAgICAgICAgICAgYnl0ZUNvZGVQYXJzZXItPm1fY29kZUJs
b2NrLT5hZGRJZGVudGlmaWVyKElkZW50aWZpZXIoYnl0ZUNvZGVQYXJzZXItPm1fZ2xvYmFsRGF0
YSwgcmVwKSk7Ci0gICAgICAgICAgICBtX2lkZW50aWZpZXJSZW1hcFtpXSA9IHJlc3VsdC5pdGVy
YXRvci0+c2Vjb25kOworICAgICAgICAgICAgbV9pZGVudGlmaWVyUmVtYXBbaV0gPSByZXN1bHQu
aXRlcmF0b3ItPnZhbHVlOwogICAgICAgICB9CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgY29kZUJsb2NrLT5udW1iZXJPZkNvbnN0YW50UmVnaXN0ZXJzKCk7ICsraSkgewogICAgICAg
ICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGNvZGVCbG9jay0+Z2V0Q29uc3RhbnQoaSArIEZpcnN0Q29u
c3RhbnRSZWdpc3RlckluZGV4KTsKQEAgLTI2MTYsNyArMjYxNiw3IEBAIEJ5dGVDb2RlUGFyc2Vy
OjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmVTdGFja0VudHJ5KEJ5dGVDb2RlUGFyc2VyKiBieXRl
Q29kZVBhcnNlCiAgICAgICAgICAgICAgICAgYnl0ZUNvZGVQYXJzZXItPm1fY29kZUJsb2NrLT5h
ZGRDb25zdGFudCh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgYnl0ZUNvZGVQYXJzZXItPm1fY29u
c3RhbnRzLmFwcGVuZChDb25zdGFudFJlY29yZCgpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIG1fY29uc3RhbnRSZW1hcFtpXSA9IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgICAg
ICAgICAgbV9jb25zdGFudFJlbWFwW2ldID0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAgICAg
ICAgfQogICAgICAgICAKICAgICAgICAgbV9jYWxsc2l0ZUJsb2NrSGVhZE5lZWRzTGlua2luZyA9
IHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCmluZGV4IGM1NGJhNzdiNmU0ZmJh
OTMyNmRjZWI5MWU1NTVhYmI2NGYwMmJmNzEuLjM0MjEwYWIxOWQ2ZWVkODI4ZDAwMTc1NTAyZGQz
NDkwNjY2YjRlNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCkBAIC01MDIsNyAr
NTAyLDcgQEAgdm9pZCBIZWFwOjptYXJrUHJvdGVjdGVkT2JqZWN0cyhIZWFwUm9vdFZpc2l0b3Im
IGhlYXBSb290VmlzaXRvcikKIHsKICAgICBQcm90ZWN0Q291bnRTZXQ6Oml0ZXJhdG9yIGVuZCA9
IG1fcHJvdGVjdGVkVmFsdWVzLmVuZCgpOwogICAgIGZvciAoUHJvdGVjdENvdW50U2V0OjppdGVy
YXRvciBpdCA9IG1fcHJvdGVjdGVkVmFsdWVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAg
ICAgICAgaGVhcFJvb3RWaXNpdG9yLnZpc2l0KCZpdC0+Zmlyc3QpOworICAgICAgICBoZWFwUm9v
dFZpc2l0b3IudmlzaXQoJml0LT5rZXkpOwogfQogCiB2b2lkIEhlYXA6OnB1c2hUZW1wU29ydFZl
Y3RvcihWZWN0b3I8VmFsdWVTdHJpbmdQYWlyPiogdGVtcFZlY3RvcikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuaAppbmRleCBjNzhjODU2MjhhMTRkYzdhZjdmOTVkNzU4NzA2ZDA2ZGRjMGQxY2Jk
Li41NDdjYTQ4NjY0MTYyYzRlZjMxN2E5ZjA4MDc0YzFhMjg1ZjlkMjYzIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5oCkBAIC0zNTAsNyArMzUwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ewogICAgICAgICBQcm90ZWN0Q291bnRTZXQ6Oml0ZXJhdG9yIGVuZCA9IG1fcHJvdGVjdGVkVmFs
dWVzLmVuZCgpOwogICAgICAgICBmb3IgKFByb3RlY3RDb3VudFNldDo6aXRlcmF0b3IgaXQgPSBt
X3Byb3RlY3RlZFZhbHVlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBm
dW5jdG9yKGl0LT5maXJzdCk7CisgICAgICAgICAgICBmdW5jdG9yKGl0LT5rZXkpOwogICAgICAg
ICBtX2hhbmRsZUhlYXAuZm9yRWFjaFN0cm9uZ0hhbmRsZShmdW5jdG9yLCBtX3Byb3RlY3RlZFZh
bHVlcyk7CiAKICAgICAgICAgcmV0dXJuIGZ1bmN0b3IucmV0dXJuVmFsdWUoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmNwcAppbmRleCA1NDFjYzg5NmEzMjg5MGY2YzVlZjYxYjRiNjViNzI0ZTY4
ZWU2YjQxLi5lNGM3MmYxZWI2NDc4MTI2OGJhNWQ0NGNkYjE5YjI5ODM0NDM1NDk2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuY3BwCkBAIC02NDMsOCArNjQzLDggQEAgSklUQ29kZSBKSVQ6OnBy
aXZhdGVDb21waWxlKENvZGVQdHIqIGZ1bmN0aW9uRW50cnlBcml0eUNoZWNrLCBKSVRDb21waWxh
dGlvbkVmZm8KIAogICAgICAgICAgICAgU3RyaW5nSnVtcFRhYmxlOjpTdHJpbmdPZmZzZXRUYWJs
ZTo6aXRlcmF0b3IgZW5kID0gcmVjb3JkLmp1bXBUYWJsZS5zdHJpbmdKdW1wVGFibGUtPm9mZnNl
dFRhYmxlLmVuZCgpOyAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yIChTdHJpbmdKdW1wVGFi
bGU6OlN0cmluZ09mZnNldFRhYmxlOjppdGVyYXRvciBpdCA9IHJlY29yZC5qdW1wVGFibGUuc3Ry
aW5nSnVtcFRhYmxlLT5vZmZzZXRUYWJsZS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBpdC0+c2Vjb25kLmJyYW5jaE9mZnNldDsK
LSAgICAgICAgICAgICAgICBpdC0+c2Vjb25kLmN0aU9mZnNldCA9IG9mZnNldCA/IHBhdGNoQnVm
ZmVyLmxvY2F0aW9uT2YobV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyBvZmZzZXRdKSA6IHJlY29y
ZC5qdW1wVGFibGUuc3RyaW5nSnVtcFRhYmxlLT5jdGlEZWZhdWx0OworICAgICAgICAgICAgICAg
IHVuc2lnbmVkIG9mZnNldCA9IGl0LT52YWx1ZS5icmFuY2hPZmZzZXQ7CisgICAgICAgICAgICAg
ICAgaXQtPnZhbHVlLmN0aU9mZnNldCA9IG9mZnNldCA/IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Yo
bV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyBvZmZzZXRdKSA6IHJlY29yZC5qdW1wVGFibGUuc3Ry
aW5nSnVtcFRhYmxlLT5jdGlEZWZhdWx0OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAppbmRleCA4MmY2ZGY3ZDEyYThl
ZjI3NDQwNTUxNmRlNjZjNTUzNjM4YjRmZGQwLi5jYjkwZjQyMzMzYWU5Y2JkNmFjZWNmN2Q2MTRh
ZTk1NGY5NGI5MTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0
dWJzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcApAQCAt
MzU2MCwyMiArMzU2MCwyMiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgSklUVGh1bmtzOjpjdGlT
dHViKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgVGh1bmtHZW5lcmF0bwogewogICAgIENUSVN0
dWJNYXA6OkFkZFJlc3VsdCBlbnRyeSA9IG1fY3RpU3R1Yk1hcC5hZGQoZ2VuZXJhdG9yLCBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYoKSk7CiAgICAgaWYgKGVudHJ5LmlzTmV3RW50cnkpCi0gICAgICAg
IGVudHJ5Lml0ZXJhdG9yLT5zZWNvbmQgPSBnZW5lcmF0b3IoZ2xvYmFsRGF0YSk7Ci0gICAgcmV0
dXJuIGVudHJ5Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgIGVudHJ5Lml0ZXJhdG9yLT52YWx1
ZSA9IGdlbmVyYXRvcihnbG9iYWxEYXRhKTsKKyAgICByZXR1cm4gZW50cnkuaXRlcmF0b3ItPnZh
bHVlOwogfQogCiBOYXRpdmVFeGVjdXRhYmxlKiBKSVRUaHVua3M6Omhvc3RGdW5jdGlvblN0dWIo
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgTmF0aXZl
RnVuY3Rpb24gY29uc3RydWN0b3IpCiB7CiAgICAgSG9zdEZ1bmN0aW9uU3R1Yk1hcDo6QWRkUmVz
dWx0IHJlc3VsdCA9IG1faG9zdEZ1bmN0aW9uU3R1Yk1hcC0+YWRkKGZ1bmN0aW9uLCBQYXNzV2Vh
azxOYXRpdmVFeGVjdXRhYmxlPigpKTsKLSAgICBpZiAoIXJlc3VsdC5pdGVyYXRvci0+c2Vjb25k
KQotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IFBhc3NXZWFrPE5hdGl2ZUV4ZWN1
dGFibGU+KCpnbG9iYWxEYXRhLCBOYXRpdmVFeGVjdXRhYmxlOjpjcmVhdGUoKmdsb2JhbERhdGEs
IEpJVDo6Y29tcGlsZUNUSU5hdGl2ZUNhbGwoZ2xvYmFsRGF0YSwgZnVuY3Rpb24pLCBmdW5jdGlv
biwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoY3RpTmF0
aXZlQ29uc3RydWN0KCkpLCBjb25zdHJ1Y3RvciwgTm9JbnRyaW5zaWMpKTsKLSAgICByZXR1cm4g
cmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQuZ2V0KCk7CisgICAgaWYgKCFyZXN1bHQuaXRlcmF0b3It
PnZhbHVlKQorICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gUGFzc1dlYWs8TmF0aXZl
RXhlY3V0YWJsZT4oKmdsb2JhbERhdGEsIE5hdGl2ZUV4ZWN1dGFibGU6OmNyZWF0ZSgqZ2xvYmFs
RGF0YSwgSklUOjpjb21waWxlQ1RJTmF0aXZlQ2FsbChnbG9iYWxEYXRhLCBmdW5jdGlvbiksIGZ1
bmN0aW9uLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihj
dGlOYXRpdmVDb25zdHJ1Y3QoKSksIGNvbnN0cnVjdG9yLCBOb0ludHJpbnNpYykpOworICAgIHJl
dHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpOwogfQogCiBOYXRpdmVFeGVjdXRhYmxl
KiBKSVRUaHVua3M6Omhvc3RGdW5jdGlvblN0dWIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBO
YXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yLCBJbnRyaW5z
aWMgaW50cmluc2ljKQogewogICAgIEhvc3RGdW5jdGlvblN0dWJNYXA6OkFkZFJlc3VsdCBlbnRy
eSA9IG1faG9zdEZ1bmN0aW9uU3R1Yk1hcC0+YWRkKGZ1bmN0aW9uLCBQYXNzV2VhazxOYXRpdmVF
eGVjdXRhYmxlPigpKTsKLSAgICBpZiAoISplbnRyeS5pdGVyYXRvci0+c2Vjb25kKSB7CisgICAg
aWYgKCEqZW50cnkuaXRlcmF0b3ItPnZhbHVlKSB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiBjb2RlOwogICAgICAgICBpZiAoZ2VuZXJhdG9yKSB7CiAgICAgICAgICAgICBpZiAoZ2xv
YmFsRGF0YS0+Y2FuVXNlSklUKCkpCkBAIC0zNTg0LDkgKzM1ODQsOSBAQCBOYXRpdmVFeGVjdXRh
YmxlKiBKSVRUaHVua3M6Omhvc3RGdW5jdGlvblN0dWIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
LCBOYXRpdmVGdQogICAgICAgICAgICAgICAgIGNvZGUgPSBNYWNyb0Fzc2VtYmxlckNvZGVSZWYo
KTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBjb2RlID0gSklUOjpjb21waWxlQ1RJTmF0
aXZlQ2FsbChnbG9iYWxEYXRhLCBmdW5jdGlvbik7Ci0gICAgICAgIGVudHJ5Lml0ZXJhdG9yLT5z
ZWNvbmQgPSBQYXNzV2VhazxOYXRpdmVFeGVjdXRhYmxlPigqZ2xvYmFsRGF0YSwgTmF0aXZlRXhl
Y3V0YWJsZTo6Y3JlYXRlKCpnbG9iYWxEYXRhLCBjb2RlLCBmdW5jdGlvbiwgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoY3RpTmF0aXZlQ29uc3RydWN0KCkp
LCBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3RvciwgaW50cmluc2ljKSk7CisgICAgICAgIGVu
dHJ5Lml0ZXJhdG9yLT52YWx1ZSA9IFBhc3NXZWFrPE5hdGl2ZUV4ZWN1dGFibGU+KCpnbG9iYWxE
YXRhLCBOYXRpdmVFeGVjdXRhYmxlOjpjcmVhdGUoKmdsb2JhbERhdGEsIGNvZGUsIGZ1bmN0aW9u
LCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihjdGlOYXRp
dmVDb25zdHJ1Y3QoKSksIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yLCBpbnRyaW5zaWMp
KTsKICAgICB9Ci0gICAgcmV0dXJuIGVudHJ5Lml0ZXJhdG9yLT5zZWNvbmQuZ2V0KCk7CisgICAg
cmV0dXJuIGVudHJ5Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKIH0KIAogdm9pZCBKSVRUaHVua3M6
OmNsZWFySG9zdEZ1bmN0aW9uU3R1YnMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9QYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJz
ZXIuY3BwCmluZGV4IDY5NDM5NzdhODVhNmZmN2M5MTFhNzJhNGM4MzliNjljMWQ3NDM4YWQuLjAz
YzY2NWM3ZjU2MDAyZjY0NzkxYmEyOGRjNTFiZWFkNDZiYjEzZTIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL1BhcnNlci5jcHAKQEAgLTEzMjUsMTAgKzEzMjUsMTAgQEAgdGVtcGxhdGUg
PGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFy
c2VTdHJpY3RPYmplY3QKICAgICAgICAgaWYgKCFtX3N5bnRheEFscmVhZHlWYWxpZGF0ZWQpIHsK
ICAgICAgICAgICAgIE9iamVjdFZhbGlkYXRpb25NYXA6OkFkZFJlc3VsdCBwcm9wZXJ0eUVudHJ5
ID0gb2JqZWN0VmFsaWRhdG9yLmFkZChjb250ZXh0LmdldE5hbWUocHJvcGVydHkpLmltcGwoKSwg
Y29udGV4dC5nZXRUeXBlKHByb3BlcnR5KSk7CiAgICAgICAgICAgICBpZiAoIXByb3BlcnR5RW50
cnkuaXNOZXdFbnRyeSkgewotICAgICAgICAgICAgICAgIGZhaWxJZlRydWUocHJvcGVydHlFbnRy
eS5pdGVyYXRvci0+c2Vjb25kID09IFByb3BlcnR5Tm9kZTo6Q29uc3RhbnQpOworICAgICAgICAg
ICAgICAgIGZhaWxJZlRydWUocHJvcGVydHlFbnRyeS5pdGVyYXRvci0+dmFsdWUgPT0gUHJvcGVy
dHlOb2RlOjpDb25zdGFudCk7CiAgICAgICAgICAgICAgICAgZmFpbElmVHJ1ZShjb250ZXh0Lmdl
dFR5cGUocHJvcGVydHkpID09IFByb3BlcnR5Tm9kZTo6Q29uc3RhbnQpOwotICAgICAgICAgICAg
ICAgIGZhaWxJZlRydWUoY29udGV4dC5nZXRUeXBlKHByb3BlcnR5KSAmIHByb3BlcnR5RW50cnku
aXRlcmF0b3ItPnNlY29uZCk7Ci0gICAgICAgICAgICAgICAgcHJvcGVydHlFbnRyeS5pdGVyYXRv
ci0+c2Vjb25kIHw9IGNvbnRleHQuZ2V0VHlwZShwcm9wZXJ0eSk7CisgICAgICAgICAgICAgICAg
ZmFpbElmVHJ1ZShjb250ZXh0LmdldFR5cGUocHJvcGVydHkpICYgcHJvcGVydHlFbnRyeS5pdGVy
YXRvci0+dmFsdWUpOworICAgICAgICAgICAgICAgIHByb3BlcnR5RW50cnkuaXRlcmF0b3ItPnZh
bHVlIHw9IGNvbnRleHQuZ2V0VHlwZShwcm9wZXJ0eSk7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KICAgICAgICAgdGFpbCA9IGNvbnRleHQuY3JlYXRlUHJvcGVydHlMaXN0KG1fbGV4ZXItPmxh
c3RMaW5lTnVtYmVyKCksIHByb3BlcnR5LCB0YWlsKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
cm9maWxlci9Qcm9maWxlLmNwcAppbmRleCA0OWQ2ZGU5N2E5OGFiMGM1M2ZlZWE2NWIzODk2OWZk
MzAxMTMzOTk3Li4xM2RmODM3ZjIzNTI3MGUxNDI0MTc1MzJlZDgxNTc0Njk5ZTdiYThlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGUuY3BwCkBAIC0xMDcsMjggKzEw
NywyOCBAQCB2b2lkIFByb2ZpbGU6OmRlYnVnUHJpbnREYXRhKCkgY29uc3QKICAgICBtX2hlYWQt
PmRlYnVnUHJpbnREYXRhKDApOwogfQogCi10eXBlZGVmIHBhaXI8U3RyaW5nSW1wbCosIHVuc2ln
bmVkPiBOYW1lQ291bnRQYWlyOwordHlwZWRlZiBXVEY6Okhhc2hNYXBFbnRyeTxGdW5jdGlvbkNh
bGxIYXNoQ291bnQ6OlZhbHVlVHlwZSwgdW5zaWduZWQ+IE5hbWVDb3VudEVudHJ5OwogCi1zdGF0
aWMgaW5saW5lIGJvb2wgZnVuY3Rpb25OYW1lQ291bnRQYWlyQ29tcGFyYXRvcihjb25zdCBOYW1l
Q291bnRQYWlyJiBhLCBjb25zdCBOYW1lQ291bnRQYWlyJiBiKQorc3RhdGljIGlubGluZSBib29s
IGZ1bmN0aW9uTmFtZUNvdW50RW50cnlDb21wYXJhdG9yKGNvbnN0IE5hbWVDb3VudEVudHJ5JiBh
LCBjb25zdCBOYW1lQ291bnRFbnRyeSYgYikKIHsKLSAgICByZXR1cm4gYS5zZWNvbmQgPiBiLnNl
Y29uZDsKKyAgICByZXR1cm4gYS52YWx1ZSA+IGIudmFsdWU7CiB9CiAKIHZvaWQgUHJvZmlsZTo6
ZGVidWdQcmludERhdGFTYW1wbGVTdHlsZSgpIGNvbnN0CiB7Ci0gICAgdHlwZWRlZiBWZWN0b3I8
TmFtZUNvdW50UGFpcj4gTmFtZUNvdW50UGFpclZlY3RvcjsKKyAgICB0eXBlZGVmIFZlY3RvcjxO
YW1lQ291bnRFbnRyeT4gTmFtZUNvdW50RW50cnlWZWN0b3I7CiAKICAgICBGdW5jdGlvbkNhbGxI
YXNoQ291bnQgY291bnRlZEZ1bmN0aW9uczsKICAgICBkYXRhTG9nKCJDYWxsIGdyYXBoOlxuIik7
CiAgICAgbV9oZWFkLT5kZWJ1Z1ByaW50RGF0YVNhbXBsZVN0eWxlKDAsIGNvdW50ZWRGdW5jdGlv
bnMpOwogCiAgICAgZGF0YUxvZygiXG5Ub3RhbCBudW1iZXIgaW4gc3RhY2s6XG4iKTsKLSAgICBO
YW1lQ291bnRQYWlyVmVjdG9yIHNvcnRlZEZ1bmN0aW9ucyhjb3VudGVkRnVuY3Rpb25zLnNpemUo
KSk7CisgICAgTmFtZUNvdW50RW50cnlWZWN0b3Igc29ydGVkRnVuY3Rpb25zKGNvdW50ZWRGdW5j
dGlvbnMuc2l6ZSgpKTsKICAgICBjb3B5VG9WZWN0b3IoY291bnRlZEZ1bmN0aW9ucywgc29ydGVk
RnVuY3Rpb25zKTsKIAotICAgIHN0ZDo6c29ydChzb3J0ZWRGdW5jdGlvbnMuYmVnaW4oKSwgc29y
dGVkRnVuY3Rpb25zLmVuZCgpLCBmdW5jdGlvbk5hbWVDb3VudFBhaXJDb21wYXJhdG9yKTsKLSAg
ICBmb3IgKE5hbWVDb3VudFBhaXJWZWN0b3I6Oml0ZXJhdG9yIGl0ID0gc29ydGVkRnVuY3Rpb25z
LmJlZ2luKCk7IGl0ICE9IHNvcnRlZEZ1bmN0aW9ucy5lbmQoKTsgKytpdCkKLSAgICAgICAgZGF0
YUxvZygiICAgICAgICAlLTEyZCVzXG4iLCAoKml0KS5zZWNvbmQsIFVTdHJpbmcoKCppdCkuZmly
c3QpLnV0ZjgoKS5kYXRhKCkpOworICAgIHN0ZDo6c29ydChzb3J0ZWRGdW5jdGlvbnMuYmVnaW4o
KSwgc29ydGVkRnVuY3Rpb25zLmVuZCgpLCBmdW5jdGlvbk5hbWVDb3VudEVudHJ5Q29tcGFyYXRv
cik7CisgICAgZm9yIChOYW1lQ291bnRFbnRyeVZlY3Rvcjo6aXRlcmF0b3IgaXQgPSBzb3J0ZWRG
dW5jdGlvbnMuYmVnaW4oKTsgaXQgIT0gc29ydGVkRnVuY3Rpb25zLmVuZCgpOyArK2l0KQorICAg
ICAgICBkYXRhTG9nKCIgICAgICAgICUtMTJkJXNcbiIsICgqaXQpLnZhbHVlLCBVU3RyaW5nKCgq
aXQpLmtleSkudXRmOCgpLmRhdGEoKSk7CiAKICAgICBkYXRhTG9nKCJcblNvcnQgYnkgdG9wIG9m
IHN0YWNrLCBzYW1lIGNvbGxhcHNlZCAod2hlbiA+PSA1KTpcbiIpOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmNwcAppbmRleCAxODJiY2M0NjIwMjJiNGVj
MmNiYWM2ODU1YzUwMjlmNjRjNzExZmZmLi45MjJjYWEyYjYwMDAwYmNjMTI3YzMzYzA5NTFmODNm
ZWRmNmIzMjUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVu
dGlmaWVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVy
LmNwcApAQCAtMTA4LDcgKzEwOCw3IEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gSWRlbnRpZmll
cjo6YWRkKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgY2hhciogYykKIAogICAgIGNv
bnN0IExpdGVyYWxJZGVudGlmaWVyVGFibGU6Oml0ZXJhdG9yJiBpdGVyID0gbGl0ZXJhbElkZW50
aWZpZXJUYWJsZS5maW5kKGMpOwogICAgIGlmIChpdGVyICE9IGxpdGVyYWxJZGVudGlmaWVyVGFi
bGUuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdGVyLT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBp
dGVyLT52YWx1ZTsKIAogICAgIEhhc2hTZXQ8U3RyaW5nSW1wbCo+OjpBZGRSZXN1bHQgYWRkUmVz
dWx0ID0gaWRlbnRpZmllclRhYmxlLmFkZDxjb25zdCBMQ2hhciosIElkZW50aWZpZXJDU3RyaW5n
VHJhbnNsYXRvcj4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KGMpKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5jcHAKaW5kZXggM2UwNTcz
OGViNTRjN2IwNGNlZjcyYzE1YjNiYzI3ZTkzOGE4YzU1NC4uOWVjNjliM2M2MTI1MTNkNDMzZDA2
ZmE5ODViZDNhMDM1ZDA5ZWE3ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBY3RpdmF0aW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FjdGl2YXRpb24uY3BwCkBAIC0xMjIsMTEgKzEyMiwxMSBAQCB2b2lkIEpTQWN0aXZhdGlv
bjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMs
IFByb3BlcgogICAgIEpTQWN0aXZhdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FjdGl2YXRp
b24qPihvYmplY3QpOwogICAgIFN5bWJvbFRhYmxlOjpjb25zdF9pdGVyYXRvciBlbmQgPSB0aGlz
T2JqZWN0LT5zeW1ib2xUYWJsZSgpLmVuZCgpOwogICAgIGZvciAoU3ltYm9sVGFibGU6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQuZ2V0QXR0cmlidXRlcygpICYgRG9u
dEVudW0gJiYgbW9kZSAhPSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKQorICAgICAgICBpZiAo
aXQtPnZhbHVlLmdldEF0dHJpYnV0ZXMoKSAmIERvbnRFbnVtICYmIG1vZGUgIT0gSW5jbHVkZURv
bnRFbnVtUHJvcGVydGllcykKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoaXQt
PnNlY29uZC5nZXRJbmRleCgpID49IHRoaXNPYmplY3QtPm1fbnVtQ2FwdHVyZWRWYXJzKQorICAg
ICAgICBpZiAoaXQtPnZhbHVlLmdldEluZGV4KCkgPj0gdGhpc09iamVjdC0+bV9udW1DYXB0dXJl
ZFZhcnMpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQo
SWRlbnRpZmllcihleGVjLCBpdC0+Zmlyc3QuZ2V0KCkpKTsKKyAgICAgICAgcHJvcGVydHlOYW1l
cy5hZGQoSWRlbnRpZmllcihleGVjLCBpdC0+a2V5LmdldCgpKSk7CiAgICAgfQogICAgIC8vIFNr
aXAgdGhlIEpTVmFyaWFibGVPYmplY3QgaW1wbGVtZW50YXRpb24gb2YgZ2V0T3duUHJvcGVydHlO
YW1lcwogICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMs
IHByb3BlcnR5TmFtZXMsIG1vZGUpOwpAQCAtMTM5LDcgKzEzOSw3IEBAIGlubGluZSBib29sIEpT
QWN0aXZhdGlvbjo6c3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRlcyhKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsCiAgICAgU3ltYm9sVGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSBzeW1ib2xUYWJsZSgp
LmZpbmQocHJvcGVydHlOYW1lLmltcGwoKSk7CiAgICAgaWYgKGl0ZXIgPT0gc3ltYm9sVGFibGUo
KS5lbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFN5bWJvbFRhYmxlRW50cnkmIGVu
dHJ5ID0gaXRlci0+c2Vjb25kOworICAgIFN5bWJvbFRhYmxlRW50cnkmIGVudHJ5ID0gaXRlci0+
dmFsdWU7CiAgICAgQVNTRVJUKCFlbnRyeS5pc051bGwoKSk7CiAgICAgaWYgKGVudHJ5LmdldElu
ZGV4KCkgPj0gbV9udW1DYXB0dXJlZFZhcnMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKaW5kZXggMGZmYTA3NmNlYWYwOTYw
NGZhYmFiYzBmNjk1N2MxNTZmMWYxYWUzMS4uMjA2NWU3NjBiYmViNmUyZTljNDc4ZDI3YTBlYTQ0
NGViNDM4YjViMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
cnJheS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAK
QEAgLTIxMCw3ICsyMTAsNyBAQCBpbmxpbmUgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6QWRkUmVzdWx0
IFNwYXJzZUFycmF5VmFsdWVNYXA6OmFkZChKU0FycmF5KiBhcnJheSwgdQogaW5saW5lIHZvaWQg
U3BhcnNlQXJyYXlWYWx1ZU1hcDo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJheSogYXJyYXks
IHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCiB7CiAgICAgQWRk
UmVzdWx0IHJlc3VsdCA9IGFkZChhcnJheSwgaSk7Ci0gICAgU3BhcnNlQXJyYXlFbnRyeSYgZW50
cnkgPSByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBTcGFyc2VBcnJheUVudHJ5JiBlbnRy
eSA9IHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAKICAgICAvLyBUbyBzYXZlIGEgc2VwYXJhdGUg
ZmluZCAmIGFkZCwgd2UgZmlyc3QgYWx3YXlzIGFkZCB0byB0aGUgc3BhcnNlIG1hcC4KICAgICAv
LyBJbiB0aGUgdW5jb21tb24gY2FzZSB0aGF0IHRoaXMgaXMgYSBuZXcgcHJvcGVydHksIGFuZCB0
aGUgYXJyYXkgaXMgbm90CkBAIC0yNTMsNyArMjUzLDcgQEAgaW5saW5lIHZvaWQgU3BhcnNlQXJy
YXlWYWx1ZU1hcDo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJheSogYXJyYXksIHVuc2lnbmVk
IGkKIGlubGluZSBib29sIFNwYXJzZUFycmF5VmFsdWVNYXA6OnB1dERpcmVjdChFeGVjU3RhdGUq
IGV4ZWMsIEpTQXJyYXkqIGFycmF5LCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNo
b3VsZFRocm93KQogewogICAgIEFkZFJlc3VsdCByZXN1bHQgPSBhZGQoYXJyYXksIGkpOwotICAg
IFNwYXJzZUFycmF5RW50cnkmIGVudHJ5ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAg
U3BhcnNlQXJyYXlFbnRyeSYgZW50cnkgPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogCiAgICAg
Ly8gVG8gc2F2ZSBhIHNlcGFyYXRlIGZpbmQgJiBhZGQsIHdlIGZpcnN0IGFsd2F5cyBhZGQgdG8g
dGhlIHNwYXJzZSBtYXAuCiAgICAgLy8gSW4gdGhlIHVuY29tbW9uIGNhc2UgdGhhdCB0aGlzIGlz
IGEgbmV3IHByb3BlcnR5LCBhbmQgdGhlIGFycmF5IGlzIG5vdApAQCAtMzE5LDcgKzMxOSw3IEBA
IGlubGluZSB2b2lkIFNwYXJzZUFycmF5VmFsdWVNYXA6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgaXRlcmF0b3IgZW5kID0gbV9tYXAuZW5kKCk7CiAgICAgZm9y
IChpdGVyYXRvciBpdCA9IG1fbWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAg
dmlzaXRvci5hcHBlbmQoJml0LT5zZWNvbmQpOworICAgICAgICB2aXNpdG9yLmFwcGVuZCgmaXQt
PnZhbHVlKTsKIH0KIAogdm9pZCBKU0FycmF5OjphbGxvY2F0ZVNwYXJzZU1hcChKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEpCkBAIC0zNTUsNyArMzU1LDcgQEAgdm9pZCBKU0FycmF5OjplbnRlckRp
Y3Rpb25hcnlNb2RlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKICAgICAgICAgLy8gVGhpcyB3
aWxsIGFsd2F5cyBiZSBhIG5ldyBlbnRyeSBpbiB0aGUgbWFwLCBzbyBubyBuZWVkIHRvIGNoZWNr
IHdlIGNhbiB3cml0ZSwKICAgICAgICAgLy8gYW5kIGF0dHJpYnV0ZXMgYXJlIGRlZmF1bHQgc28g
bm8gbmVlZCB0byBzZXQgdGhlbS4KICAgICAgICAgaWYgKHZhbHVlKQotICAgICAgICAgICAgbWFw
LT5hZGQodGhpcywgaSkuaXRlcmF0b3ItPnNlY29uZC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFs
dWUpOworICAgICAgICAgICAgbWFwLT5hZGQodGhpcywgaSkuaXRlcmF0b3ItPnZhbHVlLnNldChn
bG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7CiAgICAgfQogCiAgICAgdm9pZCogbmV3UmF3U3RvcmFn
ZSA9IDA7CkBAIC00MzEsNyArNDMxLDcgQEAgYm9vbCBKU0FycmF5OjpkZWZpbmVPd25OdW1lcmlj
UHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHkKIAogICAg
IC8vIDEuIExldCBjdXJyZW50IGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tHZXRPd25Q
cm9wZXJ0eV1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggcHJvcGVydHkgbmFtZSBQLgogICAg
IFNwYXJzZUFycmF5VmFsdWVNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtYXAtPmFkZCh0aGlzLCBp
bmRleCk7Ci0gICAgU3BhcnNlQXJyYXlFbnRyeSogZW50cnlJbk1hcCA9ICZyZXN1bHQuaXRlcmF0
b3ItPnNlY29uZDsKKyAgICBTcGFyc2VBcnJheUVudHJ5KiBlbnRyeUluTWFwID0gJnJlc3VsdC5p
dGVyYXRvci0+dmFsdWU7CiAKICAgICAvLyAyLiBMZXQgZXh0ZW5zaWJsZSBiZSB0aGUgdmFsdWUg
b2YgdGhlIFtbRXh0ZW5zaWJsZV1dIGludGVybmFsIHByb3BlcnR5IG9mIE8uCiAgICAgLy8gMy4g
SWYgY3VycmVudCBpcyB1bmRlZmluZWQgYW5kIGV4dGVuc2libGUgaXMgZmFsc2UsIHRoZW4gUmVq
ZWN0LgpAQCAtNjYzLDcgKzY2Myw3IEBAIGJvb2wgSlNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90
QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQKICAgICB9IGVs
c2UgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHRoaXNPYmplY3QtPm1fc3BhcnNlVmFs
dWVNYXApIHsKICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAt
PmZpbmQoaSk7CiAgICAgICAgIGlmIChpdCAhPSBtYXAtPm5vdEZvdW5kKCkpIHsKLSAgICAgICAg
ICAgIGl0LT5zZWNvbmQuZ2V0KHNsb3QpOworICAgICAgICAgICAgaXQtPnZhbHVlLmdldChzbG90
KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQpAQCAtNzExLDcg
KzcxMSw3IEBAIGJvb2wgSlNBcnJheTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0
KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgY29uc3QKICAgICAgICAgfSBlbHNlIGlmIChTcGFy
c2VBcnJheVZhbHVlTWFwKiBtYXAgPSB0aGlzT2JqZWN0LT5tX3NwYXJzZVZhbHVlTWFwKSB7CiAg
ICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+ZmluZChp
KTsKICAgICAgICAgICAgIGlmIChpdCAhPSBtYXAtPm5vdEZvdW5kKCkpIHsKLSAgICAgICAgICAg
ICAgICBpdC0+c2Vjb25kLmdldChkZXNjcmlwdG9yKTsKKyAgICAgICAgICAgICAgICBpdC0+dmFs
dWUuZ2V0KGRlc2NyaXB0b3IpOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CkBAIC04NDQsNyArODQ0LDcgQEAgdm9pZCBKU0FycmF5OjpwdXRC
eUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNW
YWx1ZQogICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0
b3I7CiAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5l
bmQoKTsKICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHZlY3RvcltpdC0+Zmlyc3Rd
LnNldChnbG9iYWxEYXRhLCB0aGlzLCBpdC0+c2Vjb25kLmdldE5vblNwYXJzZU1vZGUoKSk7Cisg
ICAgICAgIHZlY3RvcltpdC0+a2V5XS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgaXQtPnZhbHVlLmdl
dE5vblNwYXJzZU1vZGUoKSk7CiAgICAgZGVhbGxvY2F0ZVNwYXJzZU1hcCgpOwogCiAgICAgLy8g
U3RvcmUgdGhlIG5ldyBwcm9wZXJ0eSBpbnRvIHRoZSB2ZWN0b3IuCkBAIC05MTQsNyArOTE0LDcg
QEAgYm9vbCBKU0FycmF5OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3Rh
dGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmEKICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZl
Y3RvciA9IHN0b3JhZ2UtPm1fdmVjdG9yOwogICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7CiAgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAg
ICAgICB2ZWN0b3JbaXQtPmZpcnN0XS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgaXQtPnNlY29uZC5n
ZXROb25TcGFyc2VNb2RlKCkpOworICAgICAgICB2ZWN0b3JbaXQtPmtleV0uc2V0KGdsb2JhbERh
dGEsIHRoaXMsIGl0LT52YWx1ZS5nZXROb25TcGFyc2VNb2RlKCkpOwogICAgIGRlYWxsb2NhdGVT
cGFyc2VNYXAoKTsKIAogICAgIC8vIFN0b3JlIHRoZSBuZXcgcHJvcGVydHkgaW50byB0aGUgdmVj
dG9yLgpAQCAtOTU4LDcgKzk1OCw3IEBAIGJvb2wgSlNBcnJheTo6ZGVsZXRlUHJvcGVydHlCeUlu
ZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpKQogICAgIH0gZWxz
ZSBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gdGhpc09iamVjdC0+bV9zcGFyc2VWYWx1
ZU1hcCkgewogICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+
ZmluZChpKTsKICAgICAgICAgaWYgKGl0ICE9IG1hcC0+bm90Rm91bmQoKSkgewotICAgICAgICAg
ICAgaWYgKGl0LT5zZWNvbmQuYXR0cmlidXRlcyAmIERvbnREZWxldGUpCisgICAgICAgICAgICBp
ZiAoaXQtPnZhbHVlLmF0dHJpYnV0ZXMgJiBEb250RGVsZXRlKQogICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgICAgIG1hcC0+cmVtb3ZlKGl0KTsKICAgICAgICAgfQpAQCAt
OTk2LDggKzk5Niw4IEBAIHZvaWQgSlNBcnJheTo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVj
dCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtCiAgICAgICAgIAogICAgICAg
ICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwog
ICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFw
LT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGlmIChtb2RlID09IElu
Y2x1ZGVEb250RW51bVByb3BlcnRpZXMgfHwgIShpdC0+c2Vjb25kLmF0dHJpYnV0ZXMgJiBEb250
RW51bSkpCi0gICAgICAgICAgICAgICAga2V5cy5hcHBlbmQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KGl0LT5maXJzdCkpOworICAgICAgICAgICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJv
cGVydGllcyB8fCAhKGl0LT52YWx1ZS5hdHRyaWJ1dGVzICYgRG9udEVudW0pKQorICAgICAgICAg
ICAgICAgIGtleXMuYXBwZW5kKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpdC0+a2V5KSk7CiAgICAg
ICAgIH0KIAogICAgICAgICBxc29ydChrZXlzLmJlZ2luKCksIGtleXMuc2l6ZSgpLCBzaXplb2Yo
dW5zaWduZWQpLCBjb21wYXJlS2V5c0ZvclFTb3J0KTsKQEAgLTExOTAsNyArMTE5MCw3IEBAIGJv
b2wgSlNBcnJheTo6c2V0TGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgbmV3TGVuZ3Ro
LCBib29sIHRocm93RXhjZXB0aW9uCiAgICAgICAgICAgICBrZXlzLnJlc2VydmVDYXBhY2l0eSht
aW4obWFwLT5zaXplKCksIHN0YXRpY19jYXN0PHNpemVfdD4obGVuZ3RoIC0gbmV3TGVuZ3RoKSkp
OwogICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
bWFwLT5lbmQoKTsKICAgICAgICAgICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGl0LT5maXJzdCk7
CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
aXQtPmtleSk7CiAgICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgbGVuZ3RoICYmIGluZGV4ID49
IG5ld0xlbmd0aCkKICAgICAgICAgICAgICAgICAgICAga2V5cy5hcHBlbmQoaW5kZXgpOwogICAg
ICAgICAgICAgfQpAQCAtMTIwNSw3ICsxMjA1LDcgQEAgYm9vbCBKU0FycmF5OjpzZXRMZW5ndGgo
RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBuZXdMZW5ndGgsIGJvb2wgdGhyb3dFeGNlcHRpb24K
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBrZXlzWy0taV07CiAgICAgICAg
ICAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLT5maW5k
KGluZGV4KTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGl0ICE9IG1hcC0+bm90Rm91bmQo
KSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpdC0+c2Vjb25kLmF0dHJpYnV0ZXMgJiBEb250
RGVsZXRlKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpdC0+dmFsdWUuYXR0cmlidXRlcyAm
IERvbnREZWxldGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UtPm1fbGVuZ3Ro
ID0gaW5kZXggKyAxOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVj
LCB0aHJvd0V4Y2VwdGlvbiwgIlVuYWJsZSB0byBkZWxldGUgcHJvcGVydHkuIik7CiAgICAgICAg
ICAgICAgICAgICAgIH0KQEAgLTE2NzAsNyArMTY3MCw3IEBAIHZvaWQgSlNBcnJheTo6c29ydChF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgY29tcGFyZUZ1bmN0aW9uLCBDYWxsVHlwZSBjYWxsVHlw
ZSwKIAogICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBt
YXAtPmVuZCgpOwogICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIHRy
ZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbbnVtRGVmaW5lZF0udmFsdWUgPSBpdC0+c2Vjb25kLmdl
dE5vblNwYXJzZU1vZGUoKTsKKyAgICAgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNb
bnVtRGVmaW5lZF0udmFsdWUgPSBpdC0+dmFsdWUuZ2V0Tm9uU3BhcnNlTW9kZSgpOwogICAgICAg
ICAgICAgdHJlZS5pbnNlcnQobnVtRGVmaW5lZCk7CiAgICAgICAgICAgICArK251bURlZmluZWQ7
CiAgICAgICAgIH0KQEAgLTE3ODUsNyArMTc4NSw3IEBAIHVuc2lnbmVkIEpTQXJyYXk6OmNvbXBh
Y3RGb3JTb3J0aW5nKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKIAogICAgICAgICBTcGFyc2VB
cnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwogICAgICAgICBm
b3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltudW1EZWZp
bmVkKytdLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2Rl
KCkpOworICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbbnVtRGVmaW5lZCsrXS5zZXRXaXRo
b3V0V3JpdGVCYXJyaWVyKGl0LT52YWx1ZS5nZXROb25TcGFyc2VNb2RlKCkpOwogCiAgICAgICAg
IGRlYWxsb2NhdGVTcGFyc2VNYXAoKTsKICAgICB9CkBAIC0xODQyLDEzICsxODQyLDEzIEBAIHZv
aWQgSlNBcnJheTo6Y2hlY2tDb25zaXN0ZW5jeShDb25zaXN0ZW5jeUNoZWNrVHlwZSB0eXBlKQog
ICAgIGlmIChtX3NwYXJzZVZhbHVlTWFwKSB7CiAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6
Oml0ZXJhdG9yIGVuZCA9IG1fc3BhcnNlVmFsdWVNYXAtPmVuZCgpOwogICAgICAgICBmb3IgKFNw
YXJzZUFycmF5VmFsdWVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zcGFyc2VWYWx1ZU1hcC0+YmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGl0LT5m
aXJzdDsKKyAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gaXQtPmtleTsKICAgICAgICAgICAg
IEFTU0VSVChpbmRleCA8IHN0b3JhZ2UtPm1fbGVuZ3RoKTsKICAgICAgICAgICAgIEFTU0VSVChp
bmRleCA+PSBzdG9yYWdlLT5tX3ZlY3Rvckxlbmd0aCk7CiAgICAgICAgICAgICBBU1NFUlQoaW5k
ZXggPD0gTUFYX0FSUkFZX0lOREVYKTsKLSAgICAgICAgICAgIEFTU0VSVChpdC0+c2Vjb25kKTsK
KyAgICAgICAgICAgIEFTU0VSVChpdC0+dmFsdWUpOwogICAgICAgICAgICAgaWYgKHR5cGUgIT0g
RGVzdHJ1Y3RvckNvbnNpc3RlbmN5Q2hlY2spCi0gICAgICAgICAgICAgICAgaXQtPnNlY29uZC5p
c1VuZGVmaW5lZCgpOyAvLyBMaWtlbHkgdG8gY3Jhc2ggaWYgdGhlIG9iamVjdCB3YXMgZGVhbGxv
Y2F0ZWQuCisgICAgICAgICAgICAgICAgaXQtPnZhbHVlLmlzVW5kZWZpbmVkKCk7IC8vIExpa2Vs
eSB0byBjcmFzaCBpZiB0aGUgb2JqZWN0IHdhcyBkZWFsbG9jYXRlZC4KICAgICAgICAgfQogICAg
IH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFyaWFi
bGVPYmplY3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYXJpYWJsZU9i
amVjdC5jcHAKaW5kZXggOGNhNjk1MDc0NTExOWMwNDk2ZjdkNmUwMWRjMWNlYzhmMjg5NGQ5OC4u
N2MyZjZhM2IyNjAwZjA3YjM3NGM0ZWViNGU5NTNjOWMzODBjN2NlMSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5jcHAKQEAgLTU2LDgg
KzU2LDggQEAgdm9pZCBKU1ZhcmlhYmxlT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2Jq
ZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHIKICAgICBKU1ZhcmlhYmxlT2JqZWN0KiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTVmFyaWFibGVPYmplY3QqPihvYmplY3QpOwogICAgIFN5bWJv
bFRhYmxlOjpjb25zdF9pdGVyYXRvciBlbmQgPSB0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgpLmVu
ZCgpOwogICAgIGZvciAoU3ltYm9sVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdGhpc09iamVj
dC0+c3ltYm9sVGFibGUoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYg
KCEoaXQtPnNlY29uZC5nZXRBdHRyaWJ1dGVzKCkgJiBEb250RW51bSkgfHwgKG1vZGUgPT0gSW5j
bHVkZURvbnRFbnVtUHJvcGVydGllcykpCi0gICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJ
ZGVudGlmaWVyKGV4ZWMsIGl0LT5maXJzdC5nZXQoKSkpOworICAgICAgICBpZiAoIShpdC0+dmFs
dWUuZ2V0QXR0cmlidXRlcygpICYgRG9udEVudW0pIHx8IChtb2RlID09IEluY2x1ZGVEb250RW51
bVByb3BlcnRpZXMpKQorICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihl
eGVjLCBpdC0+a2V5LmdldCgpKSk7CiAgICAgfQogICAgIAogICAgIEpTT2JqZWN0OjpnZXRPd25Q
cm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5oCmluZGV4
IGJjZmU0YWI4OTVmNjBhOTkyOGM0MjE5YTRiNDFkMzZlMTczYzRjYWQuLmFlM2ExZGY1ZDFlYmM3
OTczNzZkZWQ1ODYyZWEyNTI1ZjdiMzgwNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTVmFyaWFibGVPYmplY3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1ZhcmlhYmxlT2JqZWN0LmgKQEAgLTE0NSw3ICsxNDUsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgU3ltYm9sVGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSBzeW1ib2xUYWJs
ZSgpLmZpbmQocHJvcGVydHlOYW1lLmltcGwoKSk7CiAgICAgICAgIGlmIChpdGVyID09IHN5bWJv
bFRhYmxlKCkuZW5kKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIFN5bWJv
bFRhYmxlRW50cnkmIGVudHJ5ID0gaXRlci0+c2Vjb25kOworICAgICAgICBTeW1ib2xUYWJsZUVu
dHJ5JiBlbnRyeSA9IGl0ZXItPnZhbHVlOwogICAgICAgICBBU1NFUlQoIWVudHJ5LmlzTnVsbCgp
KTsKICAgICAgICAgZW50cnkuc2V0QXR0cmlidXRlcyhhdHRyaWJ1dGVzKTsKICAgICAgICAgcmVn
aXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGUuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGUuY3BwCmluZGV4IGQ1
ZWRiYmM3ZjM0NmJmMjNmMjVkMGYwMTYxY2JiZjU3M2Y0NDA1ZDAuLjQzYjQ3YWJlOTJkMzQ4YmE0
NzUyMWJmMGM4MTJlMTk0N2ZiYmRiNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1JlZ0V4cENhY2hlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9SZWdFeHBDYWNoZS5jcHAKQEAgLTM4LDcgKzM4LDcgQEAgUmVnRXhwKiBSZWdFeHBDYWNo
ZTo6bG9va3VwT3JDcmVhdGUoY29uc3QgVVN0cmluZyYgcGF0dGVyblN0cmluZywgUmVnRXhwRmxh
Z3MgZmwKICAgICBSZWdFeHBLZXkga2V5KGZsYWdzLCBwYXR0ZXJuU3RyaW5nKTsKICAgICBSZWdF
eHBDYWNoZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gbV93ZWFrQ2FjaGUuZmluZChrZXkpOwogICAg
IGlmIChyZXN1bHQgIT0gbV93ZWFrQ2FjaGUuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQt
PnNlY29uZC5nZXQoKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWUuZ2V0KCk7CiAgICAg
UmVnRXhwKiByZWdFeHAgPSBSZWdFeHA6OmNyZWF0ZVdpdGhvdXRDYWNoaW5nKCptX2dsb2JhbERh
dGEsIHBhdHRlcm5TdHJpbmcsIGZsYWdzKTsKICNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCiAg
ICAgbV9nbG9iYWxEYXRhLT5hZGRSZWdFeHBUb1RyYWNlKHJlZ0V4cCk7CkBAIC04MSw3ICs4MSw3
IEBAIHZvaWQgUmVnRXhwQ2FjaGU6OmludmFsaWRhdGVDb2RlKCkKICAgICBtX25leHRFbnRyeUlu
U3Ryb25nQ2FjaGUgPSAwOwogICAgIFJlZ0V4cENhY2hlTWFwOjppdGVyYXRvciBlbmQgPSBtX3dl
YWtDYWNoZS5lbmQoKTsKICAgICBmb3IgKFJlZ0V4cENhY2hlTWFwOjppdGVyYXRvciBwdHIgPSBt
X3dlYWtDYWNoZS5iZWdpbigpOyBwdHIgIT0gZW5kOyArK3B0cikKLSAgICAgICAgcHRyLT5zZWNv
bmQtPmludmFsaWRhdGVDb2RlKCk7CisgICAgICAgIHB0ci0+dmFsdWUtPmludmFsaWRhdGVDb2Rl
KCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dl
YWtHQ01hcC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha0dDTWFwLmgKaW5k
ZXggZjAxYTBjODI2YjFjNDdmNzc0YmEzNzFiMzMyYzZhZTNkNzRiYzgwNS4uMjUyZTg0ZjkwYWE2
YjJjNWVlMjZkZjdjODI2Zjk1MDE1ZmZmMmU2YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvV2Vha0dDTWFwLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvV2Vha0dDTWFwLmgKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogICAgICAgICB7CiAg
ICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHN0ZDo6cGFpcjxLZXlUeXBlLCBFeHRlcm5hbFR5
cGU+IGdldCgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKG1faXRlcmF0b3ItPmZpcnN0
LCBIYW5kbGVUeXBlczxNYXBwZWRUeXBlPjo6Z2V0RnJvbVNsb3QobV9pdGVyYXRvci0+c2Vjb25k
KSk7IH0KKyAgICAgICAgc3RkOjpwYWlyPEtleVR5cGUsIEV4dGVybmFsVHlwZT4gZ2V0KCkgY29u
c3QgeyByZXR1cm4gc3RkOjptYWtlX3BhaXIobV9pdGVyYXRvci0+a2V5LCBIYW5kbGVUeXBlczxN
YXBwZWRUeXBlPjo6Z2V0RnJvbVNsb3QobV9pdGVyYXRvci0+dmFsdWUpKTsgfQogICAgICAgICBz
dGQ6OnBhaXI8S2V5VHlwZSwgSGFuZGxlU2xvdD4gZ2V0U2xvdCgpIGNvbnN0IHsgcmV0dXJuICpt
X2l0ZXJhdG9yOyB9CiAgICAgICAgIAogICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpIHsg
KyttX2l0ZXJhdG9yOyByZXR1cm4gKnRoaXM7IH0KQEAgLTkwLDcgKzkwLDcgQEAgcHVibGljOgog
ICAgIHsKICAgICAgICAgbWFwX2l0ZXJhdG9yIGVuZCA9IG1fbWFwLmVuZCgpOwogICAgICAgICBm
b3IgKG1hcF9pdGVyYXRvciBwdHIgPSBtX21hcC5iZWdpbigpOyBwdHIgIT0gZW5kOyArK3B0cikK
LSAgICAgICAgICAgIEhhbmRsZUhlYXA6OmhlYXBGb3IocHRyLT5zZWNvbmQpLT5kZWFsbG9jYXRl
KHB0ci0+c2Vjb25kKTsKKyAgICAgICAgICAgIEhhbmRsZUhlYXA6OmhlYXBGb3IocHRyLT52YWx1
ZSktPmRlYWxsb2NhdGUocHRyLT52YWx1ZSk7CiAgICAgICAgIG1fbWFwLmNsZWFyKCk7CiAgICAg
fQogCkBAIC0xMDcsNyArMTA3LDcgQEAgcHVibGljOgogICAgIHZvaWQgcmVtb3ZlKGl0ZXJhdG9y
IGl0ZXIpCiAgICAgewogICAgICAgICBBU1NFUlQoaXRlci5tX2l0ZXJhdG9yICE9IG1fbWFwLmVu
ZCgpKTsKLSAgICAgICAgSGFuZGxlU2xvdCBzbG90ID0gaXRlci5tX2l0ZXJhdG9yLT5zZWNvbmQ7
CisgICAgICAgIEhhbmRsZVNsb3Qgc2xvdCA9IGl0ZXIubV9pdGVyYXRvci0+dmFsdWU7CiAgICAg
ICAgIEFTU0VSVChzbG90KTsKICAgICAgICAgSGFuZGxlSGVhcDo6aGVhcEZvcihzbG90KS0+ZGVh
bGxvY2F0ZShzbG90KTsKICAgICAgICAgbV9tYXAucmVtb3ZlKGl0ZXIubV9pdGVyYXRvcik7CkBA
IC0xMjgsNyArMTI4LDcgQEAgcHVibGljOgogICAgICAgICB0eXBlbmFtZSBNYXBUeXBlOjpBZGRS
ZXN1bHQgcmVzdWx0ID0gbV9tYXAuYWRkKGtleSwgMCk7CiAgICAgICAgIGlmIChyZXN1bHQuaXNO
ZXdFbnRyeSkgewogICAgICAgICAgICAgSGFuZGxlU2xvdCBzbG90ID0gZ2xvYmFsRGF0YS5oZWFw
LmhhbmRsZUhlYXAoKS0+YWxsb2NhdGUoKTsKLSAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+
c2Vjb25kID0gc2xvdDsKKyAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBzbG90
OwogICAgICAgICAgICAgSGFuZGxlSGVhcDo6aGVhcEZvcihzbG90KS0+bWFrZVdlYWsoc2xvdCwg
dGhpcywgRmluYWxpemVyQ2FsbGJhY2s6OmZpbmFsaXplckNvbnRleHRGb3Ioa2V5KSk7CiAgICAg
ICAgICAgICBIYW5kbGVIZWFwOjpoZWFwRm9yKHNsb3QpLT53cml0ZUJhcnJpZXIoc2xvdCwgdmFs
dWUpOwogICAgICAgICAgICAgKnNsb3QgPSB2YWx1ZTsKQEAgLTEzOSw3ICsxMzksNyBAQCBwdWJs
aWM6CiAgICAgCiAgICAgdm9pZCBzZXQoaXRlcmF0b3IgaXRlciwgRXh0ZXJuYWxUeXBlIHZhbHVl
KQogICAgIHsKLSAgICAgICAgSGFuZGxlU2xvdCBzbG90ID0gaXRlci5tX2l0ZXJhdG9yLT5zZWNv
bmQ7CisgICAgICAgIEhhbmRsZVNsb3Qgc2xvdCA9IGl0ZXIubV9pdGVyYXRvci0+dmFsdWU7CiAg
ICAgICAgIEFTU0VSVChzbG90KTsKICAgICAgICAgSGFuZGxlSGVhcDo6aGVhcEZvcihzbG90KS0+
d3JpdGVCYXJyaWVyKHNsb3QsIHZhbHVlKTsKICAgICAgICAgKnNsb3QgPSB2YWx1ZTsKQEAgLTE0
OCwxMSArMTQ4LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldChKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIGNvbnN0IEtleVR5cGUmIGtleSwgRXh0ZXJuYWxUeXBlIHZhbHVlKQogICAgIHsKICAg
ICAgICAgdHlwZW5hbWUgTWFwVHlwZTo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fbWFwLmFkZChrZXks
IDApOwotICAgICAgICBIYW5kbGVTbG90IHNsb3QgPSByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsK
KyAgICAgICAgSGFuZGxlU2xvdCBzbG90ID0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAgICAg
ICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7CiAgICAgICAgICAgICBzbG90ID0gZ2xvYmFsRGF0
YS5oZWFwLmhhbmRsZUhlYXAoKS0+YWxsb2NhdGUoKTsKICAgICAgICAgICAgIEhhbmRsZUhlYXA6
OmhlYXBGb3Ioc2xvdCktPm1ha2VXZWFrKHNsb3QsIHRoaXMsIGtleSk7Ci0gICAgICAgICAgICBy
ZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IHNsb3Q7CisgICAgICAgICAgICByZXN1bHQuaXRlcmF0
b3ItPnZhbHVlID0gc2xvdDsKICAgICAgICAgfQogICAgICAgICBIYW5kbGVIZWFwOjpoZWFwRm9y
KHNsb3QpLT53cml0ZUJhcnJpZXIoc2xvdCwgdmFsdWUpOwogICAgICAgICAqc2xvdCA9IHZhbHVl
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1Byb2ZpbGVUcmVlTm9k
ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1Byb2ZpbGVUcmVlTm9kZS5oCmluZGV4
IDlkZTM5YWQ4YTI5ODYyMmM0MzNhNjdlYjY0YTcyMjA0ZGUxOWU2YzIuLmUyZjkzMjNhMmE1NjVm
YTkyNzZkNDA5YjI5ZGI1YjNlN2YxYzQyM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS90b29scy9Qcm9maWxlVHJlZU5vZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
dG9vbHMvUHJvZmlsZVRyZWVOb2RlLmgKQEAgLTMwLDcgKzMwLDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAKIGNsYXNzIFByb2ZpbGVUcmVlTm9kZSB7CiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywg
UHJvZmlsZVRyZWVOb2RlPiBNYXA7Ci0gICAgdHlwZWRlZiBzdGQ6OnBhaXI8U3RyaW5nLCBQcm9m
aWxlVHJlZU5vZGU+IE1hcEVudHJ5OworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFByb2Zp
bGVUcmVlTm9kZT46OlZhbHVlVHlwZSBNYXBFbnRyeTsKIAogcHVibGljOgogICAgIFByb2ZpbGVU
cmVlTm9kZSgpCkBAIC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICAKICAgICAgICAgUHJvZmls
ZVRyZWVOb2RlIG5ld0VudHJ5OwogICAgICAgICBNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX2No
aWxkcmVuLT5hZGQoU3RyaW5nKG5hbWUpLCBuZXdFbnRyeSk7Ci0gICAgICAgIFByb2ZpbGVUcmVl
Tm9kZSogY2hpbGRJbk1hcCA9ICZyZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgUHJv
ZmlsZVRyZWVOb2RlKiBjaGlsZEluTWFwID0gJnJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAgICAg
ICAgICsrY2hpbGRJbk1hcC0+bV9jb3VudDsKICAgICAgICAgcmV0dXJuIGNoaWxkSW5NYXA7CiAg
ICAgfQpAQCAtNzIsNyArNzIsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gMDsKICAg
ICAgICAgdWludDY0X3QgY2hpbGRDb3VudCA9IDA7CiAgICAgICAgIGZvciAoTWFwOjppdGVyYXRv
ciBpdCA9IG1fY2hpbGRyZW4tPmJlZ2luKCk7IGl0ICE9IG1fY2hpbGRyZW4tPmVuZCgpOyArK2l0
KQotICAgICAgICAgICAgY2hpbGRDb3VudCArPSBpdC0+c2Vjb25kLmNvdW50KCk7CisgICAgICAg
ICAgICBjaGlsZENvdW50ICs9IGl0LT52YWx1ZS5jb3VudCgpOwogICAgICAgICByZXR1cm4gY2hp
bGRDb3VudDsKICAgICB9CiAgICAgCkBAIC05NywxOSArOTcsMTkgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbmRlbnQ7ICsraSkKICAgICAgICAgICAg
ICAgICBkYXRhTG9nKCIgICAgIik7CiAgICAgICAgICAgICBkYXRhTG9nKCIlIDhsbGQ6ICVzICgl
bGxkIHN0YWNrIHRvcClcbiIsCi0gICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8bG9uZyBsb25n
PihlbnRyeS0+c2Vjb25kLmNvdW50KCkpLAotICAgICAgICAgICAgICAgIGVudHJ5LT5maXJzdC51
dGY4KCkuZGF0YSgpLAotICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oZW50
cnktPnNlY29uZC5jb3VudCgpIC0gZW50cnktPnNlY29uZC5jaGlsZENvdW50KCkpKTsKKyAgICAg
ICAgICAgICAgICBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KGVudHJ5LT52YWx1ZS5jb3VudCgpKSwK
KyAgICAgICAgICAgICAgICBlbnRyeS0+a2V5LnV0ZjgoKS5kYXRhKCksCisgICAgICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihlbnRyeS0+dmFsdWUuY291bnQoKSAtIGVudHJ5LT52
YWx1ZS5jaGlsZENvdW50KCkpKTsKIAogICAgICAgICAgICAgLy8gUmVjdXJzaXZlbHkgZHVtcCB0
aGUgY2hpbGQgbm9kZXMuCi0gICAgICAgICAgICBlbnRyeS0+c2Vjb25kLmR1bXBJbnRlcm5hbChp
bmRlbnQgKyAxKTsKKyAgICAgICAgICAgIGVudHJ5LT52YWx1ZS5kdW1wSW50ZXJuYWwoaW5kZW50
ICsgMSk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBzdGF0aWMgaW50IGNvbXBhcmVFbnRyaWVz
KGNvbnN0IHZvaWQqIGEsIGNvbnN0IHZvaWQqIGIpCiAgICAgewotICAgICAgICB1aW50NjRfdCBk
YSA9ICgqc3RhdGljX2Nhc3Q8TWFwRW50cnkqIGNvbnN0ICo+KGEpKS0+c2Vjb25kLmNvdW50KCk7
Ci0gICAgICAgIHVpbnQ2NF90IGRiID0gKCpzdGF0aWNfY2FzdDxNYXBFbnRyeSogY29uc3QgKj4o
YikpLT5zZWNvbmQuY291bnQoKTsKKyAgICAgICAgdWludDY0X3QgZGEgPSAoKnN0YXRpY19jYXN0
PE1hcEVudHJ5KiBjb25zdCAqPihhKSktPnZhbHVlLmNvdW50KCk7CisgICAgICAgIHVpbnQ2NF90
IGRiID0gKCpzdGF0aWNfY2FzdDxNYXBFbnRyeSogY29uc3QgKj4oYikpLT52YWx1ZS5jb3VudCgp
OwogICAgICAgICByZXR1cm4gKGRhIDwgZGIpIC0gKGRhID4gZGIpOwogICAgIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvSGFzaENvdW50ZWRTZXQuaCBiL1NvdXJjZS9XVEYvd3RmL0hh
c2hDb3VudGVkU2V0LmgKaW5kZXggZDdkOWU0M2E5YTU1YTFmZGZhODgzZjc4OTdhMTA3Nzk5YTVj
ZmY3NC4uNGY5NmEzOTk1MmZmNTMwZmQ2Mzk4ZWJjYThhN2ZkYjYyMTRiYTFmNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi93dGYvSGFzaENvdW50ZWRTZXQuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9I
YXNoQ291bnRlZFNldC5oCkBAIC0xNDYsNyArMTQ2LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAg
aW5saW5lIHR5cGVuYW1lIEhhc2hDb3VudGVkU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFp
dHM+OjpBZGRSZXN1bHQgSGFzaENvdW50ZWRTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0
cz46OmFkZChjb25zdCBWYWx1ZVR5cGUgJnZhbHVlKQogICAgIHsKICAgICAgICAgQWRkUmVzdWx0
IHJlc3VsdCA9IG1faW1wbC5hZGQodmFsdWUsIDApOwotICAgICAgICArK3Jlc3VsdC5pdGVyYXRv
ci0+c2Vjb25kOworICAgICAgICArK3Jlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAgICAgfQogICAgIApAQCAtMTYyLDExICsxNjIsMTEgQEAgbmFtZXNwYWNl
IFdURiB7CiAgICAgICAgIGlmIChpdCA9PSBlbmQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgICAgICB1bnNpZ25lZCBvbGRWYWwgPSBpdC0+c2Vjb25kOworICAgICAgICB1bnNp
Z25lZCBvbGRWYWwgPSBpdC0+dmFsdWU7CiAgICAgICAgIEFTU0VSVChvbGRWYWwpOwogICAgICAg
ICB1bnNpZ25lZCBuZXdWYWwgPSBvbGRWYWwgLSAxOwogICAgICAgICBpZiAobmV3VmFsKSB7Ci0g
ICAgICAgICAgICBpdC0+c2Vjb25kID0gbmV3VmFsOworICAgICAgICAgICAgaXQtPnZhbHVlID0g
bmV3VmFsOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKQEAgLTIxOCw3
ICsyMTgsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgaXRlcmF0b3IgaXQgPSBjb2xsZWN0
aW9uLmJlZ2luKCk7CiAgICAgICAgIGl0ZXJhdG9yIGVuZCA9IGNvbGxlY3Rpb24uZW5kKCk7CiAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGl0ICE9IGVuZDsgKytpdCwgKytpKQotICAgICAg
ICAgICAgdmVjdG9yW2ldID0gKCppdCkuZmlyc3Q7CisgICAgICAgICAgICB2ZWN0b3JbaV0gPSAo
Kml0KS5rZXk7CiAgICAgfQogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0hhc2hJdGVy
YXRvcnMuaCBiL1NvdXJjZS9XVEYvd3RmL0hhc2hJdGVyYXRvcnMuaAppbmRleCA2YWZhMmZhNTdl
NzBhZDAzMjA4NTBmMzczM2RjZDc5OTcxNGIwMDgzLi4yNDI5YzZkMDRhYmVkMjJkNTdjZmNjZTgz
YjNkNTc4Mjk0M2MyOTFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoSXRlcmF0b3Jz
LmgKKysrIGIvU291cmNlL1dURi93dGYvSGFzaEl0ZXJhdG9ycy5oCkBAIC0zMyw5ICszMyw5IEBA
IG5hbWVzcGFjZSBXVEYgewogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZVR5cGUsIHR5
cGVuYW1lIEtleVR5cGUsIHR5cGVuYW1lIE1hcHBlZFR5cGU+IHN0cnVjdCBIYXNoVGFibGVLZXlz
SXRlcmF0b3I7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlVHlwZSwgdHlwZW5hbWUg
S2V5VHlwZSwgdHlwZW5hbWUgTWFwcGVkVHlwZT4gc3RydWN0IEhhc2hUYWJsZVZhbHVlc0l0ZXJh
dG9yOwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlVHlwZSwgdHlwZW5hbWUgS2V5
VHlwZSwgdHlwZW5hbWUgTWFwcGVkVHlwZT4gc3RydWN0IEhhc2hUYWJsZUNvbnN0SXRlcmF0b3JB
ZGFwdGVyPEhhc2hUYWJsZVR5cGUsIHN0ZDo6cGFpcjxLZXlUeXBlLCBNYXBwZWRUeXBlPiA+IHsK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGVUeXBlLCB0eXBlbmFtZSBLZXlUeXBlLCB0
eXBlbmFtZSBNYXBwZWRUeXBlPiBzdHJ1Y3QgSGFzaFRhYmxlQ29uc3RJdGVyYXRvckFkYXB0ZXI8
SGFzaFRhYmxlVHlwZSwgSGFzaE1hcEVudHJ5PEtleVR5cGUsIE1hcHBlZFR5cGU+ID4gewogICAg
IHByaXZhdGU6Ci0gICAgICAgIHR5cGVkZWYgc3RkOjpwYWlyPEtleVR5cGUsIE1hcHBlZFR5cGU+
IFZhbHVlVHlwZTsKKyAgICAgICAgdHlwZWRlZiBIYXNoTWFwRW50cnk8S2V5VHlwZSwgTWFwcGVk
VHlwZT4gVmFsdWVUeXBlOwogICAgIHB1YmxpYzoKICAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVD
b25zdEtleXNJdGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXlUeXBlLCBNYXBwZWRUeXBlPiBLZXlz
OwogICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUNvbnN0VmFsdWVzSXRlcmF0b3I8SGFzaFRhYmxl
VHlwZSwgS2V5VHlwZSwgTWFwcGVkVHlwZT4gVmFsdWVzOwpAQCAtNTYsOSArNTYsOSBAQCBuYW1l
c3BhY2UgV1RGIHsKICAgICAgICAgdHlwZW5hbWUgSGFzaFRhYmxlVHlwZTo6Y29uc3RfaXRlcmF0
b3IgbV9pbXBsOwogICAgIH07CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGVUeXBl
LCB0eXBlbmFtZSBLZXlUeXBlLCB0eXBlbmFtZSBNYXBwZWRUeXBlPiBzdHJ1Y3QgSGFzaFRhYmxl
SXRlcmF0b3JBZGFwdGVyPEhhc2hUYWJsZVR5cGUsIHN0ZDo6cGFpcjxLZXlUeXBlLCBNYXBwZWRU
eXBlPiA+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGVUeXBlLCB0eXBlbmFtZSBL
ZXlUeXBlLCB0eXBlbmFtZSBNYXBwZWRUeXBlPiBzdHJ1Y3QgSGFzaFRhYmxlSXRlcmF0b3JBZGFw
dGVyPEhhc2hUYWJsZVR5cGUsIEhhc2hNYXBFbnRyeTxLZXlUeXBlLCBNYXBwZWRUeXBlPiA+IHsK
ICAgICBwcml2YXRlOgotICAgICAgICB0eXBlZGVmIHN0ZDo6cGFpcjxLZXlUeXBlLCBNYXBwZWRU
eXBlPiBWYWx1ZVR5cGU7CisgICAgICAgIHR5cGVkZWYgSGFzaE1hcEVudHJ5PEtleVR5cGUsIE1h
cHBlZFR5cGU+IFZhbHVlVHlwZTsKICAgICBwdWJsaWM6CiAgICAgICAgIHR5cGVkZWYgSGFzaFRh
YmxlS2V5c0l0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleVR5cGUsIE1hcHBlZFR5cGU+IEtleXM7
CiAgICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlVmFsdWVzSXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwg
S2V5VHlwZSwgTWFwcGVkVHlwZT4gVmFsdWVzOwpAQCAtODYsMTIgKzg2LDEyIEBAIG5hbWVzcGFj
ZSBXVEYgewogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlVHlwZSwgdHlwZW5hbWUg
S2V5VHlwZSwgdHlwZW5hbWUgTWFwcGVkVHlwZT4gc3RydWN0IEhhc2hUYWJsZUNvbnN0S2V5c0l0
ZXJhdG9yIHsKICAgICBwcml2YXRlOgotICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUNvbnN0SXRl
cmF0b3JBZGFwdGVyPEhhc2hUYWJsZVR5cGUsIHN0ZDo6cGFpcjxLZXlUeXBlLCBNYXBwZWRUeXBl
PiA+IENvbnN0SXRlcmF0b3I7CisgICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlQ29uc3RJdGVyYXRv
ckFkYXB0ZXI8SGFzaFRhYmxlVHlwZSwgSGFzaE1hcEVudHJ5PEtleVR5cGUsIE1hcHBlZFR5cGU+
ID4gQ29uc3RJdGVyYXRvcjsKIAogICAgIHB1YmxpYzoKICAgICAgICAgSGFzaFRhYmxlQ29uc3RL
ZXlzSXRlcmF0b3IoY29uc3QgQ29uc3RJdGVyYXRvciYgaW1wbCkgOiBtX2ltcGwoaW1wbCkge30K
ICAgICAgICAgCi0gICAgICAgIGNvbnN0IEtleVR5cGUqIGdldCgpIGNvbnN0IHsgcmV0dXJuICYo
bV9pbXBsLmdldCgpLT5maXJzdCk7IH0KKyAgICAgICAgY29uc3QgS2V5VHlwZSogZ2V0KCkgY29u
c3QgeyByZXR1cm4gJihtX2ltcGwuZ2V0KCktPmtleSk7IH0KICAgICAgICAgY29uc3QgS2V5VHlw
ZSYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKmdldCgpOyB9CiAgICAgICAgIGNvbnN0IEtl
eVR5cGUqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBnZXQoKTsgfQogCkBAIC0xMDMsMTIg
KzEwMywxMiBAQCBuYW1lc3BhY2UgV1RGIHsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hU
YWJsZVR5cGUsIHR5cGVuYW1lIEtleVR5cGUsIHR5cGVuYW1lIE1hcHBlZFR5cGU+IHN0cnVjdCBI
YXNoVGFibGVDb25zdFZhbHVlc0l0ZXJhdG9yIHsKICAgICBwcml2YXRlOgotICAgICAgICB0eXBl
ZGVmIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3JBZGFwdGVyPEhhc2hUYWJsZVR5cGUsIHN0ZDo6cGFp
cjxLZXlUeXBlLCBNYXBwZWRUeXBlPiA+IENvbnN0SXRlcmF0b3I7CisgICAgICAgIHR5cGVkZWYg
SGFzaFRhYmxlQ29uc3RJdGVyYXRvckFkYXB0ZXI8SGFzaFRhYmxlVHlwZSwgSGFzaE1hcEVudHJ5
PEtleVR5cGUsIE1hcHBlZFR5cGU+ID4gQ29uc3RJdGVyYXRvcjsKIAogICAgIHB1YmxpYzoKICAg
ICAgICAgSGFzaFRhYmxlQ29uc3RWYWx1ZXNJdGVyYXRvcihjb25zdCBDb25zdEl0ZXJhdG9yJiBp
bXBsKSA6IG1faW1wbChpbXBsKSB7fQogICAgICAgICAKLSAgICAgICAgY29uc3QgTWFwcGVkVHlw
ZSogZ2V0KCkgY29uc3QgeyByZXR1cm4gJihtX2ltcGwuZ2V0KCktPnNlY29uZCk7IH0KKyAgICAg
ICAgY29uc3QgTWFwcGVkVHlwZSogZ2V0KCkgY29uc3QgeyByZXR1cm4gJihtX2ltcGwuZ2V0KCkt
PnZhbHVlKTsgfQogICAgICAgICBjb25zdCBNYXBwZWRUeXBlJiBvcGVyYXRvciooKSBjb25zdCB7
IHJldHVybiAqZ2V0KCk7IH0KICAgICAgICAgY29uc3QgTWFwcGVkVHlwZSogb3BlcmF0b3ItPigp
IGNvbnN0IHsgcmV0dXJuIGdldCgpOyB9CiAKQEAgLTEyMCwxMyArMTIwLDEzIEBAIG5hbWVzcGFj
ZSBXVEYgewogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlVHlwZSwgdHlwZW5hbWUg
S2V5VHlwZSwgdHlwZW5hbWUgTWFwcGVkVHlwZT4gc3RydWN0IEhhc2hUYWJsZUtleXNJdGVyYXRv
ciB7CiAgICAgcHJpdmF0ZToKLSAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVJdGVyYXRvckFkYXB0
ZXI8SGFzaFRhYmxlVHlwZSwgc3RkOjpwYWlyPEtleVR5cGUsIE1hcHBlZFR5cGU+ID4gSXRlcmF0
b3I7Ci0gICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlQ29uc3RJdGVyYXRvckFkYXB0ZXI8SGFzaFRh
YmxlVHlwZSwgc3RkOjpwYWlyPEtleVR5cGUsIE1hcHBlZFR5cGU+ID4gQ29uc3RJdGVyYXRvcjsK
KyAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVJdGVyYXRvckFkYXB0ZXI8SGFzaFRhYmxlVHlwZSwg
SGFzaE1hcEVudHJ5PEtleVR5cGUsIE1hcHBlZFR5cGU+ID4gSXRlcmF0b3I7CisgICAgICAgIHR5
cGVkZWYgSGFzaFRhYmxlQ29uc3RJdGVyYXRvckFkYXB0ZXI8SGFzaFRhYmxlVHlwZSwgSGFzaE1h
cEVudHJ5PEtleVR5cGUsIE1hcHBlZFR5cGU+ID4gQ29uc3RJdGVyYXRvcjsKIAogICAgIHB1Ymxp
YzoKICAgICAgICAgSGFzaFRhYmxlS2V5c0l0ZXJhdG9yKGNvbnN0IEl0ZXJhdG9yJiBpbXBsKSA6
IG1faW1wbChpbXBsKSB7fQogICAgICAgICAKLSAgICAgICAgS2V5VHlwZSogZ2V0KCkgY29uc3Qg
eyByZXR1cm4gJihtX2ltcGwuZ2V0KCktPmZpcnN0KTsgfQorICAgICAgICBLZXlUeXBlKiBnZXQo
KSBjb25zdCB7IHJldHVybiAmKG1faW1wbC5nZXQoKS0+a2V5KTsgfQogICAgICAgICBLZXlUeXBl
JiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqZ2V0KCk7IH0KICAgICAgICAgS2V5VHlwZSog
b3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIGdldCgpOyB9CiAKQEAgLTE0MywxMyArMTQzLDEz
IEBAIG5hbWVzcGFjZSBXVEYgewogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlVHlw
ZSwgdHlwZW5hbWUgS2V5VHlwZSwgdHlwZW5hbWUgTWFwcGVkVHlwZT4gc3RydWN0IEhhc2hUYWJs
ZVZhbHVlc0l0ZXJhdG9yIHsKICAgICBwcml2YXRlOgotICAgICAgICB0eXBlZGVmIEhhc2hUYWJs
ZUl0ZXJhdG9yQWRhcHRlcjxIYXNoVGFibGVUeXBlLCBzdGQ6OnBhaXI8S2V5VHlwZSwgTWFwcGVk
VHlwZT4gPiBJdGVyYXRvcjsKLSAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVDb25zdEl0ZXJhdG9y
QWRhcHRlcjxIYXNoVGFibGVUeXBlLCBzdGQ6OnBhaXI8S2V5VHlwZSwgTWFwcGVkVHlwZT4gPiBD
b25zdEl0ZXJhdG9yOworICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUl0ZXJhdG9yQWRhcHRlcjxI
YXNoVGFibGVUeXBlLCBIYXNoTWFwRW50cnk8S2V5VHlwZSwgTWFwcGVkVHlwZT4gPiBJdGVyYXRv
cjsKKyAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVDb25zdEl0ZXJhdG9yQWRhcHRlcjxIYXNoVGFi
bGVUeXBlLCBIYXNoTWFwRW50cnk8S2V5VHlwZSwgTWFwcGVkVHlwZT4gPiBDb25zdEl0ZXJhdG9y
OwogCiAgICAgcHVibGljOgogICAgICAgICBIYXNoVGFibGVWYWx1ZXNJdGVyYXRvcihjb25zdCBJ
dGVyYXRvciYgaW1wbCkgOiBtX2ltcGwoaW1wbCkge30KICAgICAgICAgCi0gICAgICAgIE1hcHBl
ZFR5cGUqIGdldCgpIGNvbnN0IHsgcmV0dXJuICYobV9pbXBsLmdldCgpLT5zZWNvbmQpOyB9Cisg
ICAgICAgIE1hcHBlZFR5cGUqIGdldCgpIGNvbnN0IHsgcmV0dXJuICYobV9pbXBsLmdldCgpLT52
YWx1ZSk7IH0KICAgICAgICAgTWFwcGVkVHlwZSYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4g
KmdldCgpOyB9CiAgICAgICAgIE1hcHBlZFR5cGUqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVy
biBnZXQoKTsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoTWFwLmggYi9Tb3Vy
Y2UvV1RGL3d0Zi9IYXNoTWFwLmgKaW5kZXggMjZhOWQ5YzVjYjE1OGQzYTVmZWI3MmVjNWNjODUw
YThlNjAxNjNkZC4uYmE1OTMxZWZiN2ZmZjk4NWE5MDA5ODVkZDIwZTljYjM2NTNlNTdiYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvSGFzaE1hcC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0hh
c2hNYXAuaApAQCAtMjUsOCArMjUsNiBAQAogCiBuYW1lc3BhY2UgV1RGIHsKIAotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFBhaXJUeXBlPiBzdHJ1Y3QgUGFpckZpcnN0RXh0cmFjdG9yOwotCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IFJlZmVyZW5jZVR5cGVNYWtlciB7CiAgICAgICAg
IHR5cGVkZWYgVCYgUmVmZXJlbmNlVHlwZTsKICAgICB9OwpAQCAtMzQsNiArMzIsMTAgQEAgbmFt
ZXNwYWNlIFdURiB7CiAgICAgICAgIHR5cGVkZWYgVCYgUmVmZXJlbmNlVHlwZTsKICAgICB9Owog
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaE1hcEVudHJ5VHlwZT4gc3RydWN0IEhhc2hNYXBF
bnRyeUtleUV4dHJhY3RvciB7CisgICAgICAgIHN0YXRpYyBjb25zdCB0eXBlbmFtZSBIYXNoTWFw
RW50cnlUeXBlOjpLZXlUeXBlJiBleHRyYWN0KGNvbnN0IEhhc2hNYXBFbnRyeVR5cGUmIHApIHsg
cmV0dXJuIHAua2V5OyB9CisgICAgfTsKKwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywg
dHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnID0gdHlwZW5hbWUgRGVmYXVsdEhh
c2g8S2V5QXJnPjo6SGFzaCwKICAgICAgICAgdHlwZW5hbWUgS2V5VHJhaXRzQXJnID0gSGFzaFRy
YWl0czxLZXlBcmc+LCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcgPSBIYXNoVHJhaXRzPE1hcHBl
ZEFyZz4gPgogICAgIGNsYXNzIEhhc2hNYXAgewpAQCAtNDEsNyArNDMsNyBAQCBuYW1lc3BhY2Ug
V1RGIHsKICAgICBwcml2YXRlOgogICAgICAgICB0eXBlZGVmIEtleVRyYWl0c0FyZyBLZXlUcmFp
dHM7CiAgICAgICAgIHR5cGVkZWYgTWFwcGVkVHJhaXRzQXJnIE1hcHBlZFRyYWl0czsKLSAgICAg
ICAgdHlwZWRlZiBQYWlySGFzaFRyYWl0czxLZXlUcmFpdHMsIE1hcHBlZFRyYWl0cz4gVmFsdWVU
cmFpdHM7CisgICAgICAgIHR5cGVkZWYgSGFzaE1hcEVudHJ5VHJhaXRzPEtleVRyYWl0cywgTWFw
cGVkVHJhaXRzPiBWYWx1ZVRyYWl0czsKIAogICAgIHB1YmxpYzoKICAgICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBLZXlUcmFpdHM6OlRyYWl0VHlwZSBLZXlUeXBlOwpAQCAtNTcsNyArNTksNyBAQCBu
YW1lc3BhY2UgV1RGIHsKIAogICAgICAgICB0eXBlZGVmIEhhc2hBcmcgSGFzaEZ1bmN0aW9uczsK
IAotICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZTxLZXlUeXBlLCBWYWx1ZVR5cGUsIFBhaXJGaXJz
dEV4dHJhY3RvcjxWYWx1ZVR5cGU+LAorICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZTxLZXlUeXBl
LCBWYWx1ZVR5cGUsIEhhc2hNYXBFbnRyeUtleUV4dHJhY3RvcjxWYWx1ZVR5cGU+LAogICAgICAg
ICAgICAgSGFzaEZ1bmN0aW9ucywgVmFsdWVUcmFpdHMsIEtleVRyYWl0cz4gSGFzaFRhYmxlVHlw
ZTsKIAogICAgICAgICBjbGFzcyBIYXNoTWFwS2V5c1Byb3h5OwpAQCAtMjAzLDE4ICsyMDUsMTQg
QEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIEhhc2hUYWJsZVR5cGUgbV9pbXBsOwogICAgIH07
CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQYWlyVHlwZT4gc3RydWN0IFBhaXJGaXJzdEV4dHJh
Y3RvciB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCB0eXBlbmFtZSBQYWlyVHlwZTo6Zmlyc3RfdHlw
ZSYgZXh0cmFjdChjb25zdCBQYWlyVHlwZSYgcCkgeyByZXR1cm4gcC5maXJzdDsgfQotICAgIH07
Ci0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVRyYWl0cywgdHlwZW5hbWUgSGFzaEZ1bmN0
aW9ucz4KICAgICBzdHJ1Y3QgSGFzaE1hcFRyYW5zbGF0b3IgewogICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBUJiBrZXkpIHsgcmV0dXJuIEhh
c2hGdW5jdGlvbnM6Omhhc2goa2V5KTsgfQogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVPiBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBUJiBhLCBjb25zdCBVJiBiKSB7IHJl
dHVybiBIYXNoRnVuY3Rpb25zOjplcXVhbChhLCBiKTsgfQogICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPiBzdGF0aWMgdm9pZCB0cmFuc2xhdGUoVCYg
bG9jYXRpb24sIGNvbnN0IFUmIGtleSwgY29uc3QgViYgbWFwcGVkKQogICAgICAgICB7Ci0gICAg
ICAgICAgICBsb2NhdGlvbi5maXJzdCA9IGtleTsKLSAgICAgICAgICAgIFZhbHVlVHJhaXRzOjpT
ZWNvbmRUcmFpdHM6OnN0b3JlKG1hcHBlZCwgbG9jYXRpb24uc2Vjb25kKTsKKyAgICAgICAgICAg
IGxvY2F0aW9uLmtleSA9IGtleTsKKyAgICAgICAgICAgIFZhbHVlVHJhaXRzOjpNYXBwZWRUcmFp
dHM6OnN0b3JlKG1hcHBlZCwgbG9jYXRpb24udmFsdWUpOwogICAgICAgICB9CiAgICAgfTsKIApA
QCAtMjI0LDggKzIyMiw4IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVPiBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBUJiBhLCBjb25zdCBV
JiBiKSB7IHJldHVybiBUcmFuc2xhdG9yOjplcXVhbChhLCBiKTsgfQogICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPiBzdGF0aWMgdm9pZCB0cmFuc2xh
dGUoVCYgbG9jYXRpb24sIGNvbnN0IFUmIGtleSwgY29uc3QgViYgbWFwcGVkLCB1bnNpZ25lZCBo
YXNoQ29kZSkKICAgICAgICAgewotICAgICAgICAgICAgVHJhbnNsYXRvcjo6dHJhbnNsYXRlKGxv
Y2F0aW9uLmZpcnN0LCBrZXksIGhhc2hDb2RlKTsKLSAgICAgICAgICAgIFZhbHVlVHJhaXRzOjpT
ZWNvbmRUcmFpdHM6OnN0b3JlKG1hcHBlZCwgbG9jYXRpb24uc2Vjb25kKTsKKyAgICAgICAgICAg
IFRyYW5zbGF0b3I6OnRyYW5zbGF0ZShsb2NhdGlvbi5rZXksIGtleSwgaGFzaENvZGUpOworICAg
ICAgICAgICAgVmFsdWVUcmFpdHM6Ok1hcHBlZFRyYWl0czo6c3RvcmUobWFwcGVkLCBsb2NhdGlv
bi52YWx1ZSk7CiAgICAgICAgIH0KICAgICB9OwogCkBAIC0zMzMsNyArMzMxLDcgQEAgbmFtZXNw
YWNlIFdURiB7CiAgICAgICAgIEFkZFJlc3VsdCByZXN1bHQgPSBpbmxpbmVBZGQoa2V5LCBtYXBw
ZWQpOwogICAgICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KSB7CiAgICAgICAgICAgICAvLyBU
aGUgaW5saW5lQWRkIGNhbGwgYWJvdmUgZm91bmQgYW4gZXhpc3RpbmcgaGFzaCB0YWJsZSBlbnRy
eTsgd2UgbmVlZCB0byBzZXQgdGhlIG1hcHBlZCB2YWx1ZS4KLSAgICAgICAgICAgIE1hcHBlZFRy
YWl0czo6c3RvcmUobWFwcGVkLCByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7CisgICAgICAgICAg
ICBNYXBwZWRUcmFpdHM6OnN0b3JlKG1hcHBlZCwgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CiAg
ICAgICAgIH0KICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CkBAIC0zNjAsNyArMzU4LDcg
QEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIFZhbHVlVHlwZSogZW50cnkgPSBjb25zdF9jYXN0
PEhhc2hUYWJsZVR5cGUmPihtX2ltcGwpLmxvb2t1cChrZXkpOwogICAgICAgICBpZiAoIWVudHJ5
KQogICAgICAgICAgICAgcmV0dXJuIE1hcHBlZFRyYWl0czo6cGVlayhNYXBwZWRUcmFpdHM6OmVt
cHR5VmFsdWUoKSk7Ci0gICAgICAgIHJldHVybiBNYXBwZWRUcmFpdHM6OnBlZWsoZW50cnktPnNl
Y29uZCk7CisgICAgICAgIHJldHVybiBNYXBwZWRUcmFpdHM6OnBlZWsoZW50cnktPnZhbHVlKTsK
ICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
LCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgpAQCAtMzkxLDcgKzM4OSw3IEBAIG5hbWVzcGFjZSBX
VEYgewogICAgICAgICBpdGVyYXRvciBpdCA9IGZpbmQoa2V5KTsKICAgICAgICAgaWYgKGl0ID09
IGVuZCgpKQogICAgICAgICAgICAgcmV0dXJuIE1hcHBlZFRyYWl0czo6cGFzc091dChNYXBwZWRU
cmFpdHM6OmVtcHR5VmFsdWUoKSk7Ci0gICAgICAgIE1hcHBlZFBhc3NPdXRUeXBlIHJlc3VsdCA9
IE1hcHBlZFRyYWl0czo6cGFzc091dChpdC0+c2Vjb25kKTsKKyAgICAgICAgTWFwcGVkUGFzc091
dFR5cGUgcmVzdWx0ID0gTWFwcGVkVHJhaXRzOjpwYXNzT3V0KGl0LT52YWx1ZSk7CiAgICAgICAg
IHJlbW92ZShpdCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpAQCAtNDEzLDggKzQx
MSw4IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBjb25zdF9pdGVyYXRvciBlbmQgPSBhLmVu
ZCgpOwogICAgICAgICBjb25zdF9pdGVyYXRvciBub3RGb3VuZCA9IGIuZW5kKCk7CiAgICAgICAg
IGZvciAoY29uc3RfaXRlcmF0b3IgaXQgPSBhLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewot
ICAgICAgICAgICAgY29uc3RfaXRlcmF0b3IgYlBvcyA9IGIuZmluZChpdC0+Zmlyc3QpOwotICAg
ICAgICAgICAgaWYgKGJQb3MgPT0gbm90Rm91bmQgfHwgaXQtPnNlY29uZCAhPSBiUG9zLT5zZWNv
bmQpCisgICAgICAgICAgICBjb25zdF9pdGVyYXRvciBiUG9zID0gYi5maW5kKGl0LT5rZXkpOwor
ICAgICAgICAgICAgaWYgKGJQb3MgPT0gbm90Rm91bmQgfHwgaXQtPnZhbHVlICE9IGJQb3MtPnZh
bHVlKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCkBAIC00MzMs
NyArNDMxLDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgSGFz
aFRhYmxlVHlwZTo6Y29uc3RfaXRlcmF0b3IgaXRlcmF0b3I7CiAgICAgICAgIGl0ZXJhdG9yIGVu
ZCA9IGNvbGxlY3Rpb24uZW5kKCk7CiAgICAgICAgIGZvciAoaXRlcmF0b3IgaXQgPSBjb2xsZWN0
aW9uLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIGRlbGV0ZSBpdC0+c2Vj
b25kOworICAgICAgICAgICAgZGVsZXRlIGl0LT52YWx1ZTsKICAgICB9CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFt
ZSBYPgpAQCAtNDQ4LDcgKzQ0Niw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICB0eXBlZGVm
IHR5cGVuYW1lIEhhc2hUYWJsZVR5cGU6OmNvbnN0X2l0ZXJhdG9yIGl0ZXJhdG9yOwogICAgICAg
ICBpdGVyYXRvciBlbmQgPSBjb2xsZWN0aW9uLmVuZCgpOwogICAgICAgICBmb3IgKGl0ZXJhdG9y
IGl0ID0gY29sbGVjdGlvbi5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBk
ZWxldGUgaXQtPmZpcnN0OworICAgICAgICAgICAgZGVsZXRlIGl0LT5rZXk7CiAgICAgfQogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUg
VywgdHlwZW5hbWUgWD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oIGIv
U291cmNlL1dURi93dGYvSGFzaFRhYmxlLmgKaW5kZXggOWJkNTQ4MmZhY2ViNzIwOTQ0Y2U0YzUz
MTE3NDc0MGJlNDNiYjZjZi4uZjkyYjVlNGNkN2Q4ZWQ1ZDE4MmU4MjE1OTE4OGVlYzYxOTg4NTFi
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmgKKysrIGIvU291cmNlL1dU
Ri93dGYvSGFzaFRhYmxlLmgKQEAgLTI4NSw2ICsyODUsMTIgQEAgbmFtZXNwYWNlIFdURiB7CiAg
ICAgICAgIHN3YXAoYS5zZWNvbmQsIGIuc2Vjb25kKTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgdm9pZCBoYXNoVGFibGVTd2FwKEhhc2hNYXBF
bnRyeTxULCBVPiYgYSwgSGFzaE1hcEVudHJ5PFQsIFU+JiBiKQorICAgIHsKKyAgICAgICAgc3dh
cChhLmtleSwgYi5rZXkpOworICAgICAgICBzd2FwKGEudmFsdWUsIGIudmFsdWUpOworICAgIH0K
KwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIGJvb2wgdXNlU3dhcD4gc3RydWN0IE1vdmVyOwog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBNb3ZlcjxULCB0cnVlPiB7IHN0YXRpYyB2
b2lkIG1vdmUoVCYgZnJvbSwgVCYgdG8pIHsgaGFzaFRhYmxlU3dhcChmcm9tLCB0byk7IH0gfTsK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgTW92ZXI8VCwgZmFsc2U+IHsgc3RhdGlj
IHZvaWQgbW92ZShUJiBmcm9tLCBUJiB0bykgeyB0byA9IGZyb207IH0gfTsKQEAgLTEwODIsNyAr
MTA4OCw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICAgICAgQVNTRVJUKGVudHJ5ID09IGl0
Lm1fcG9zaXRpb24pOwogICAgICAgICAgICAgKytjb3VudDsKIAotICAgICAgICAgICAgVmFsdWVD
aGVjazxLZXk+OjpjaGVja0NvbnNpc3RlbmN5KGl0LT5maXJzdCk7CisgICAgICAgICAgICBWYWx1
ZUNoZWNrPEtleT46OmNoZWNrQ29uc2lzdGVuY3koaXQtPmtleSk7CiAgICAgICAgIH0KIAogICAg
ICAgICBBU1NFUlQoY291bnQgPT0gbV9rZXlDb3VudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi9IYXNoVHJhaXRzLmggYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoVHJhaXRzLmgKaW5kZXggMTBm
MTRkMWFmOTkwODczNjdmODFhYmM2NTJlYWVkNjFjYjU3MWZkMi4uZWE2NWViMmM0MGUzZjBjY2Qx
MDUyMDIxNTE2MTdkZDBlMjIyMzA3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvSGFzaFRy
YWl0cy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0hhc2hUcmFpdHMuaApAQCAtMTYzLDYgKzE2Myw0
MSBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGaXJzdCwgdHlwZW5h
bWUgU2Vjb25kPgogICAgIHN0cnVjdCBIYXNoVHJhaXRzPHBhaXI8Rmlyc3QsIFNlY29uZD4gPiA6
IHB1YmxpYyBQYWlySGFzaFRyYWl0czxIYXNoVHJhaXRzPEZpcnN0PiwgSGFzaFRyYWl0czxTZWNv
bmQ+ID4geyB9OwogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5VHlwZUFyZywgdHlwZW5hbWUg
TWFwcGVkVHlwZUFyZz4KKyAgICBzdHJ1Y3QgSGFzaE1hcEVudHJ5IHsKKyAgICAgICAgdHlwZWRl
ZiBLZXlUeXBlQXJnIEtleVR5cGU7CisKKyAgICAgICAgSGFzaE1hcEVudHJ5KCkgOiBrZXkoKSwg
dmFsdWUoKSB7IH0KKyAgICAgICAgSGFzaE1hcEVudHJ5KGNvbnN0IEtleVR5cGVBcmcmIGtleSwg
Y29uc3QgTWFwcGVkVHlwZUFyZyYgdmFsdWUpIDoga2V5KGtleSksIHZhbHVlKHZhbHVlKSB7IH0K
KworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3RoZXJLZXlUeXBlLCB0eXBlbmFtZSBPdGhl
ck1hcHBlZFR5cGU+CisgICAgICAgIEhhc2hNYXBFbnRyeShjb25zdCBIYXNoTWFwRW50cnk8T3Ro
ZXJLZXlUeXBlLCBPdGhlck1hcHBlZFR5cGU+JiBvdGhlcikgOiBrZXkob3RoZXIua2V5KSwgdmFs
dWUob3RoZXIudmFsdWUpIHsgfQorCisgICAgICAgIEtleVR5cGVBcmcga2V5OworICAgICAgICBN
YXBwZWRUeXBlQXJnIHZhbHVlOworICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlU
cmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZz4KKyAgICBzdHJ1Y3QgSGFzaE1hcEVu
dHJ5VHJhaXRzIDogR2VuZXJpY0hhc2hUcmFpdHM8SGFzaE1hcEVudHJ5PHR5cGVuYW1lIEtleVRy
YWl0c0FyZzo6VHJhaXRUeXBlLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc6OlRyYWl0VHlwZT4g
PiB7CisgICAgICAgIHR5cGVkZWYgS2V5VHJhaXRzQXJnIEtleVRyYWl0czsKKyAgICAgICAgdHlw
ZWRlZiBNYXBwZWRUcmFpdHNBcmcgTWFwcGVkVHJhaXRzOworICAgICAgICB0eXBlZGVmIEhhc2hN
YXBFbnRyeTx0eXBlbmFtZSBLZXlUcmFpdHM6OlRyYWl0VHlwZSwgdHlwZW5hbWUgTWFwcGVkVHJh
aXRzOjpUcmFpdFR5cGU+IFRyYWl0VHlwZTsKKyAgICAgICAgdHlwZWRlZiBIYXNoTWFwRW50cnk8
dHlwZW5hbWUgS2V5VHJhaXRzOjpFbXB0eVZhbHVlVHlwZSwgdHlwZW5hbWUgTWFwcGVkVHJhaXRz
OjpFbXB0eVZhbHVlVHlwZT4gRW1wdHlWYWx1ZVR5cGU7CisKKyAgICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IEtleVRyYWl0czo6ZW1wdHlWYWx1ZUlzWmVybyAmJiBN
YXBwZWRUcmFpdHM6OmVtcHR5VmFsdWVJc1plcm87CisgICAgICAgIHN0YXRpYyBFbXB0eVZhbHVl
VHlwZSBlbXB0eVZhbHVlKCkgeyByZXR1cm4gSGFzaE1hcEVudHJ5PHR5cGVuYW1lIEtleVRyYWl0
czo6RW1wdHlWYWx1ZVR5cGUsIHR5cGVuYW1lIE1hcHBlZFRyYWl0czo6RW1wdHlWYWx1ZVR5cGU+
KEtleVRyYWl0czo6ZW1wdHlWYWx1ZSgpLCBNYXBwZWRUcmFpdHM6OmVtcHR5VmFsdWUoKSk7IH0K
KworICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gS2V5VHJhaXRz
OjpuZWVkc0Rlc3RydWN0aW9uIHx8IE1hcHBlZFRyYWl0czo6bmVlZHNEZXN0cnVjdGlvbjsKKwor
ICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbmltdW1UYWJsZVNpemUgPSBLZXlUcmFpdHM6Om1p
bmltdW1UYWJsZVNpemU7CisKKyAgICAgICAgc3RhdGljIHZvaWQgY29uc3RydWN0RGVsZXRlZFZh
bHVlKFRyYWl0VHlwZSYgc2xvdCkgeyBLZXlUcmFpdHM6OmNvbnN0cnVjdERlbGV0ZWRWYWx1ZShz
bG90LmtleSk7IH0KKyAgICAgICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUoY29uc3QgVHJh
aXRUeXBlJiB2YWx1ZSkgeyByZXR1cm4gS2V5VHJhaXRzOjppc0RlbGV0ZWRWYWx1ZSh2YWx1ZS5r
ZXkpOyB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgTWFw
cGVkPgorICAgIHN0cnVjdCBIYXNoVHJhaXRzPEhhc2hNYXBFbnRyeTxLZXksIE1hcHBlZD4gPiA6
IHB1YmxpYyBIYXNoTWFwRW50cnlUcmFpdHM8SGFzaFRyYWl0czxLZXk+LCBIYXNoVHJhaXRzPE1h
cHBlZD4gPiB7IH07CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6Okhhc2hUcmFp
dHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9yLmNwcCBiL1NvdXJj
ZS9XVEYvd3RmL01ldGFBbGxvY2F0b3IuY3BwCmluZGV4IDIwMjM3ZjIxODFkZjQ5NWI4OTY0ZTUz
MTg4NzJlNWYzZTE4Mzk3NTAuLjg2ZTkzN2FhM2UwMWY3ZmQzMzNmNjQ4YzliOGYwMWNiY2NkYjY1
NDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3IuY3BwCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3IuY3BwCkBAIC0zMDQsOSArMzA0LDkgQEAgdm9pZCBN
ZXRhQWxsb2NhdG9yOjphZGRGcmVlU3BhY2Uodm9pZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRl
cykKICAgICAgICAgLy8gV2UgaGF2ZSBzb21ldGhpbmcgd2UgY2FuIGNvYWxlc2NlIHdpdGggb24g
dGhlIGxlZnQuIFJlbW92ZSBpdCBmcm9tIHRoZSB0cmVlLCBhbmQKICAgICAgICAgLy8gcmVtb3Zl
IGl0cyBlbmQgZnJvbSB0aGUgZW5kIGFkZHJlc3MgbWFwLgogICAgICAgICAKLSAgICAgICAgQVNT
RVJUKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihs
ZWZ0TmVpZ2hib3ItPnNlY29uZC0+bV9zdGFydCkgKyBsZWZ0TmVpZ2hib3ItPnNlY29uZC0+bV9z
aXplSW5CeXRlcykgPT0gbGVmdE5laWdoYm9yLT5maXJzdCk7CisgICAgICAgIEFTU0VSVChyZWlu
dGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obGVmdE5laWdo
Ym9yLT52YWx1ZS0+bV9zdGFydCkgKyBsZWZ0TmVpZ2hib3ItPnZhbHVlLT5tX3NpemVJbkJ5dGVz
KSA9PSBsZWZ0TmVpZ2hib3ItPmtleSk7CiAgICAgICAgIAotICAgICAgICBGcmVlU3BhY2VOb2Rl
KiBsZWZ0Tm9kZSA9IGxlZnROZWlnaGJvci0+c2Vjb25kOworICAgICAgICBGcmVlU3BhY2VOb2Rl
KiBsZWZ0Tm9kZSA9IGxlZnROZWlnaGJvci0+dmFsdWU7CiAgICAgICAgIAogICAgICAgICB2b2lk
KiBsZWZ0U3RhcnQgPSBsZWZ0Tm9kZS0+bV9zdGFydDsKICAgICAgICAgc2l6ZV90IGxlZnRTaXpl
ID0gbGVmdE5vZGUtPm1fc2l6ZUluQnl0ZXM7CkBAIC0zMjIsMTAgKzMyMiwxMCBAQCB2b2lkIE1l
dGFBbGxvY2F0b3I6OmFkZEZyZWVTcGFjZSh2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVz
KQogICAgICAgICAgICAgLy8gRnJlZWluZyBzb21ldGhpbmcgaW4gdGhlIG1pZGRsZSBvZiBmcmVl
IGJsb2Nrcy4gQ29hbGVzY2UgYm90aCBsZWZ0IGFuZAogICAgICAgICAgICAgLy8gcmlnaHQsIHdo
aWxzdCByZW1vdmluZyB0aGUgcmlnaHQgbmVpZ2hib3IgZnJvbSB0aGUgbWFwcy4KICAgICAgICAg
ICAgIAotICAgICAgICAgICAgQVNTRVJUKHJpZ2h0TmVpZ2hib3ItPnNlY29uZC0+bV9zdGFydCA9
PSByaWdodE5laWdoYm9yLT5maXJzdCk7CisgICAgICAgICAgICBBU1NFUlQocmlnaHROZWlnaGJv
ci0+dmFsdWUtPm1fc3RhcnQgPT0gcmlnaHROZWlnaGJvci0+a2V5KTsKICAgICAgICAgICAgIAot
ICAgICAgICAgICAgRnJlZVNwYWNlTm9kZSogcmlnaHROb2RlID0gcmlnaHROZWlnaGJvci0+c2Vj
b25kOwotICAgICAgICAgICAgdm9pZCogcmlnaHRTdGFydCA9IHJpZ2h0TmVpZ2hib3ItPmZpcnN0
OworICAgICAgICAgICAgRnJlZVNwYWNlTm9kZSogcmlnaHROb2RlID0gcmlnaHROZWlnaGJvci0+
dmFsdWU7CisgICAgICAgICAgICB2b2lkKiByaWdodFN0YXJ0ID0gcmlnaHROZWlnaGJvci0+a2V5
OwogICAgICAgICAgICAgc2l6ZV90IHJpZ2h0U2l6ZSA9IHJpZ2h0Tm9kZS0+bV9zaXplSW5CeXRl
czsKICAgICAgICAgICAgIHZvaWQqIHJpZ2h0RW5kID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
cmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHJpZ2h0U3RhcnQpICsgcmlnaHRTaXplKTsKICAg
ICAgICAgICAgIApAQCAtMzUyLDggKzM1Miw4IEBAIHZvaWQgTWV0YUFsbG9jYXRvcjo6YWRkRnJl
ZVNwYWNlKHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMpCiAgICAgICAgIC8vIENhbm5v
dCBjb2FsZXNjZSB3aXRoIGxlZnQ7IHRyeSB0byBzZWUgaWYgd2UgY2FuIGNvYWxlc2NlIHdpdGgg
cmlnaHQuCiAgICAgICAgIAogICAgICAgICBpZiAocmlnaHROZWlnaGJvciAhPSBtX2ZyZWVTcGFj
ZVN0YXJ0QWRkcmVzc01hcC5lbmQoKSkgewotICAgICAgICAgICAgRnJlZVNwYWNlTm9kZSogcmln
aHROb2RlID0gcmlnaHROZWlnaGJvci0+c2Vjb25kOwotICAgICAgICAgICAgdm9pZCogcmlnaHRT
dGFydCA9IHJpZ2h0TmVpZ2hib3ItPmZpcnN0OworICAgICAgICAgICAgRnJlZVNwYWNlTm9kZSog
cmlnaHROb2RlID0gcmlnaHROZWlnaGJvci0+dmFsdWU7CisgICAgICAgICAgICB2b2lkKiByaWdo
dFN0YXJ0ID0gcmlnaHROZWlnaGJvci0+a2V5OwogICAgICAgICAgICAgc2l6ZV90IHJpZ2h0U2l6
ZSA9IHJpZ2h0Tm9kZS0+bV9zaXplSW5CeXRlczsKICAgICAgICAgICAgIHZvaWQqIHJpZ2h0RW5k
ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHJp
Z2h0U3RhcnQpICsgcmlnaHRTaXplKTsKICAgICAgICAgICAgIApAQCAtMzk1LDcgKzM5NSw3IEBA
IHZvaWQgTWV0YUFsbG9jYXRvcjo6aW5jcmVtZW50UGFnZU9jY3VwYW5jeSh2b2lkKiBhZGRyZXNz
LCBzaXplX3Qgc2l6ZUluQnl0ZXMpCiAgICAgICAgICAgICBtX2J5dGVzQ29tbWl0dGVkICs9IG1f
cGFnZVNpemU7CiAgICAgICAgICAgICBub3RpZnlOZWVkUGFnZShyZWludGVycHJldF9jYXN0PHZv
aWQqPihwYWdlIDw8IG1fbG9nUGFnZVNpemUpKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICBpdGVyLT5zZWNvbmQrKzsKKyAgICAgICAgICAgIGl0ZXItPnZhbHVlKys7CiAgICAgfQogfQog
CkBAIC00MDcsNyArNDA3LDcgQEAgdm9pZCBNZXRhQWxsb2NhdG9yOjpkZWNyZW1lbnRQYWdlT2Nj
dXBhbmN5KHZvaWQqIGFkZHJlc3MsIHNpemVfdCBzaXplSW5CeXRlcykKICAgICBmb3IgKHVpbnRw
dHJfdCBwYWdlID0gZmlyc3RQYWdlOyBwYWdlIDw9IGxhc3RQYWdlOyArK3BhZ2UpIHsKICAgICAg
ICAgSGFzaE1hcDx1aW50cHRyX3QsIHNpemVfdD46Oml0ZXJhdG9yIGl0ZXIgPSBtX3BhZ2VPY2N1
cGFuY3lNYXAuZmluZChwYWdlKTsKICAgICAgICAgQVNTRVJUKGl0ZXIgIT0gbV9wYWdlT2NjdXBh
bmN5TWFwLmVuZCgpKTsKLSAgICAgICAgaWYgKCEtLShpdGVyLT5zZWNvbmQpKSB7CisgICAgICAg
IGlmICghLS0oaXRlci0+dmFsdWUpKSB7CiAgICAgICAgICAgICBtX3BhZ2VPY2N1cGFuY3lNYXAu
cmVtb3ZlKGl0ZXIpOwogICAgICAgICAgICAgbV9ieXRlc0NvbW1pdHRlZCAtPSBtX3BhZ2VTaXpl
OwogICAgICAgICAgICAgbm90aWZ5UGFnZUlzRnJlZShyZWludGVycHJldF9jYXN0PHZvaWQqPihw
YWdlIDw8IG1fbG9nUGFnZVNpemUpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1JlZkNv
dW50ZWRMZWFrQ291bnRlci5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9SZWZDb3VudGVkTGVha0NvdW50
ZXIuY3BwCmluZGV4IDY3MGYyYTBjZWM1OTljNmQ0ZjMxNjQ0ZWJlYjU4NzQxNWVmNDMyMWEuLjRh
MDQ1MjgyNDg5ZmU5NWExN2UyMzkxOTc3M2QzN2NiMjQ0MTBiZTUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvd3RmL1JlZkNvdW50ZWRMZWFrQ291bnRlci5jcHAKKysrIGIvU291cmNlL1dURi93dGYv
UmVmQ291bnRlZExlYWtDb3VudGVyLmNwcApAQCAtNzEsNyArNzEsNyBAQCBSZWZDb3VudGVkTGVh
a0NvdW50ZXI6On5SZWZDb3VudGVkTGVha0NvdW50ZXIoKQogICAgICAgICAgICAgTE9HKFJlZkNv
dW50ZWRMZWFrcywgIkxFQUs6ICV1ICVzIiwgbV9jb3VudCwgbV9kZXNjcmlwdGlvbik7CiAgICAg
ICAgIGVsc2UgaWYgKCFsb2dnZWRTdXBwcmVzc2lvblJlYXNvbikgewogICAgICAgICAgICAgLy8g
VGhpcyBsb2dzIG9ubHkgb25lIHJlYXNvbi4gTGF0ZXIgd2UgY291bGQgY2hhbmdlIGl0IHNvIHdl
IGxvZyBhbGwgdGhlIHJlYXNvbnMuCi0gICAgICAgICAgICBMT0coUmVmQ291bnRlZExlYWtzLCAi
Tm8gbGVhayBjaGVja2luZyBkb25lOiAlcyIsIGxlYWtNZXNzYWdlU3VwcHJlc3Npb25SZWFzb25z
LT5iZWdpbigpLT5maXJzdCk7CisgICAgICAgICAgICBMT0coUmVmQ291bnRlZExlYWtzLCAiTm8g
bGVhayBjaGVja2luZyBkb25lOiAlcyIsIGxlYWtNZXNzYWdlU3VwcHJlc3Npb25SZWFzb25zLT5i
ZWdpbigpLT5rZXkpOwogICAgICAgICAgICAgbG9nZ2VkU3VwcHJlc3Npb25SZWFzb24gPSB0cnVl
OwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUmVmUHRySGFz
aE1hcC5oIGIvU291cmNlL1dURi93dGYvUmVmUHRySGFzaE1hcC5oCmluZGV4IDBhZjM2YmU2MDI3
ZmI1MDBiYmZlYTVjMjFkYzZlMDhjZGYwMTlmOGIuLmFmM2UwZDI1NWM1MjQ0ZTVkZDBlNGRhYTlm
NjA5OGI2OTVjYWEyMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1JlZlB0ckhhc2hNYXAu
aAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9SZWZQdHJIYXNoTWFwLmgKQEAgLTM0LDcgKzM0LDcgQEAg
bmFtZXNwYWNlIFdURiB7CiAgICAgcHJpdmF0ZToKICAgICAgICAgdHlwZWRlZiBLZXlUcmFpdHNB
cmcgS2V5VHJhaXRzOwogICAgICAgICB0eXBlZGVmIE1hcHBlZFRyYWl0c0FyZyBNYXBwZWRUcmFp
dHM7Ci0gICAgICAgIHR5cGVkZWYgUGFpckhhc2hUcmFpdHM8S2V5VHJhaXRzLCBNYXBwZWRUcmFp
dHM+IFZhbHVlVHJhaXRzOworICAgICAgICB0eXBlZGVmIEhhc2hNYXBFbnRyeVRyYWl0czxLZXlU
cmFpdHMsIE1hcHBlZFRyYWl0cz4gVmFsdWVUcmFpdHM7CiAKICAgICBwdWJsaWM6CiAgICAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgS2V5VHJhaXRzOjpUcmFpdFR5cGUgS2V5VHlwZTsKQEAgLTUxLDcg
KzUxLDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIAogICAgICAgICB0eXBlZGVmIEhhc2hB
cmcgSGFzaEZ1bmN0aW9uczsKIAotICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZTxLZXlUeXBlLCBW
YWx1ZVR5cGUsIFBhaXJGaXJzdEV4dHJhY3RvcjxWYWx1ZVR5cGU+LAorICAgICAgICB0eXBlZGVm
IEhhc2hUYWJsZTxLZXlUeXBlLCBWYWx1ZVR5cGUsIEhhc2hNYXBFbnRyeUtleUV4dHJhY3RvcjxW
YWx1ZVR5cGU+LAogICAgICAgICAgICAgSGFzaEZ1bmN0aW9ucywgVmFsdWVUcmFpdHMsIEtleVRy
YWl0cz4gSGFzaFRhYmxlVHlwZTsKIAogICAgICAgICB0eXBlZGVmIEhhc2hNYXBUcmFuc2xhdG9y
PFZhbHVlVHJhaXRzLCBIYXNoRnVuY3Rpb25zPgpAQCAtMjE2LDcgKzIxNiw3IEBAIG5hbWVzcGFj
ZSBXVEYgewogICAgICAgICBBZGRSZXN1bHQgcmVzdWx0ID0gaW5saW5lQWRkKGtleSwgbWFwcGVk
KTsKICAgICAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkgewogICAgICAgICAgICAgLy8gVGhl
IGlubGluZUFkZCBjYWxsIGFib3ZlIGZvdW5kIGFuIGV4aXN0aW5nIGhhc2ggdGFibGUgZW50cnk7
IHdlIG5lZWQgdG8gc2V0IHRoZSBtYXBwZWQgdmFsdWUuCi0gICAgICAgICAgICBNYXBwZWRUcmFp
dHM6OnN0b3JlKG1hcHBlZCwgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOworICAgICAgICAgICAg
TWFwcGVkVHJhaXRzOjpzdG9yZShtYXBwZWQsIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwogICAg
ICAgICB9CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpAQCAtMjI4LDcgKzIyOCw3IEBA
IG5hbWVzcGFjZSBXVEYgewogICAgICAgICBBZGRSZXN1bHQgcmVzdWx0ID0gaW5saW5lQWRkKGtl
eSwgbWFwcGVkKTsKICAgICAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkgewogICAgICAgICAg
ICAgLy8gVGhlIGlubGluZUFkZCBjYWxsIGFib3ZlIGZvdW5kIGFuIGV4aXN0aW5nIGhhc2ggdGFi
bGUgZW50cnk7IHdlIG5lZWQgdG8gc2V0IHRoZSBtYXBwZWQgdmFsdWUuCi0gICAgICAgICAgICBN
YXBwZWRUcmFpdHM6OnN0b3JlKG1hcHBlZCwgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOworICAg
ICAgICAgICAgTWFwcGVkVHJhaXRzOjpzdG9yZShtYXBwZWQsIHJlc3VsdC5pdGVyYXRvci0+dmFs
dWUpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpAQCAtMjU0LDcg
KzI1NCw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gY29u
c3RfY2FzdDxIYXNoVGFibGVUeXBlJj4obV9pbXBsKS5sb29rdXAoa2V5KTsKICAgICAgICAgaWYg
KCFlbnRyeSkKICAgICAgICAgICAgIHJldHVybiBNYXBwZWRUcmFpdHM6OnBlZWsoTWFwcGVkVHJh
aXRzOjplbXB0eVZhbHVlKCkpOwotICAgICAgICByZXR1cm4gTWFwcGVkVHJhaXRzOjpwZWVrKGVu
dHJ5LT5zZWNvbmQpOworICAgICAgICByZXR1cm4gTWFwcGVkVHJhaXRzOjpwZWVrKGVudHJ5LT52
YWx1ZSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlw
ZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzPgpAQCAtMjY0LDcgKzI2
NCw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gY29uc3Rf
Y2FzdDxIYXNoVGFibGVUeXBlJj4obV9pbXBsKS50ZW1wbGF0ZSBsb29rdXA8VHJhbnNsYXRvcj4o
a2V5KTsKICAgICAgICAgaWYgKCFlbnRyeSkKICAgICAgICAgICAgIHJldHVybiBNYXBwZWRUcmFp
dHM6OnBlZWsoTWFwcGVkVHJhaXRzOjplbXB0eVZhbHVlKCkpOwotICAgICAgICByZXR1cm4gTWFw
cGVkVHJhaXRzOjpwZWVrKGVudHJ5LT5zZWNvbmQpOworICAgICAgICByZXR1cm4gTWFwcGVkVHJh
aXRzOjpwZWVrKGVudHJ5LT52YWx1ZSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgTWFwcGVkVHJh
aXRzPgpAQCAtMzA4LDcgKzMwOCw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBpdGVyYXRv
ciBpdCA9IGZpbmQoa2V5KTsKICAgICAgICAgaWYgKGl0ID09IGVuZCgpKQogICAgICAgICAgICAg
cmV0dXJuIE1hcHBlZFRyYWl0czo6cGFzc091dChNYXBwZWRUcmFpdHM6OmVtcHR5VmFsdWUoKSk7
Ci0gICAgICAgIE1hcHBlZFBhc3NPdXRUeXBlIHJlc3VsdCA9IE1hcHBlZFRyYWl0czo6cGFzc091
dChpdC0+c2Vjb25kKTsKKyAgICAgICAgTWFwcGVkUGFzc091dFR5cGUgcmVzdWx0ID0gTWFwcGVk
VHJhaXRzOjpwYXNzT3V0KGl0LT52YWx1ZSk7CiAgICAgICAgIHJlbW92ZShpdCk7CiAgICAgICAg
IHJldHVybiByZXN1bHQ7CiAgICAgfQpAQCAtMzIwLDcgKzMyMCw3IEBAIG5hbWVzcGFjZSBXVEYg
ewogICAgICAgICBpdGVyYXRvciBpdCA9IGZpbmQoa2V5KTsKICAgICAgICAgaWYgKGl0ID09IGVu
ZCgpKQogICAgICAgICAgICAgcmV0dXJuIE1hcHBlZFRyYWl0czo6cGFzc091dChNYXBwZWRUcmFp
dHM6OmVtcHR5VmFsdWUoKSk7Ci0gICAgICAgIE1hcHBlZFBhc3NPdXRUeXBlIHJlc3VsdCA9IE1h
cHBlZFRyYWl0czo6cGFzc091dChpdC0+c2Vjb25kKTsKKyAgICAgICAgTWFwcGVkUGFzc091dFR5
cGUgcmVzdWx0ID0gTWFwcGVkVHJhaXRzOjpwYXNzT3V0KGl0LT52YWx1ZSk7CiAgICAgICAgIHJl
bW92ZShpdCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvU3BlY3RydW0uaCBiL1NvdXJjZS9XVEYvd3RmL1NwZWN0cnVtLmgKaW5kZXgg
NWU3YTQ4NGNkODc2NmJjYWYyMmNhNGM5M2RkY2U5NzBkZDJiYTIxMy4uZjBmMTllYjFjYmZhZTJh
M2ZhZDkyYThlMjlkZDhlYTI5ODliNDQ1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvU3Bl
Y3RydW0uaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9TcGVjdHJ1bS5oCkBAIC00NCw3ICs0NCw3IEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIHR5cGVuYW1lIEhhc2hNYXA8VCwgdW5zaWduZWQgbG9u
Zz46OkFkZFJlc3VsdCByZXN1bHQgPSBtX21hcC5hZGQoa2V5LCBjb3VudCk7CiAgICAgICAgIGlm
ICghcmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29u
ZCArPSBjb3VudDsKKyAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgKz0gY291bnQ7
CiAgICAgfQogICAgIAogICAgIHVuc2lnbmVkIGxvbmcgZ2V0KGNvbnN0IFQmIGtleSkgY29uc3QK
QEAgLTg4LDcgKzg4LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgVmVjdG9yPEtleUFuZENv
dW50PiBsaXN0OwogICAgICAgICBmb3IgKGNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBiZWdpbigpOyBp
dGVyICE9IGVuZCgpOyArK2l0ZXIpCi0gICAgICAgICAgICBsaXN0LmFwcGVuZChLZXlBbmRDb3Vu
dChpdGVyLT5maXJzdCwgaXRlci0+c2Vjb25kKSk7CisgICAgICAgICAgICBsaXN0LmFwcGVuZChL
ZXlBbmRDb3VudChpdGVyLT5rZXksIGl0ZXItPnZhbHVlKSk7CiAgICAgICAgIAogICAgICAgICBz
dGQ6OnNvcnQobGlzdC5iZWdpbigpLCBsaXN0LmVuZCgpKTsKICAgICAgICAgcmV0dXJuIGxpc3Q7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHAgYi9Tb3Vy
Y2UvV1RGL3d0Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHAKaW5kZXggYWJkMzUwZGJiYTNhMTgzMjNh
NTE3MzNjOGYxNWQ2ZmQ0OGMxYmM3NS4uNzQzYzk0YTNiMDlkYzAyM2I3YWVkMjY1MjEyODYwMzEx
ZTY3YmQwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nUHRocmVhZHMuY3Bw
CisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcApAQCAtMTE5LDggKzEx
OSw4IEBAIHN0YXRpYyBUaHJlYWRJZGVudGlmaWVyIGlkZW50aWZpZXJCeVB0aHJlYWRIYW5kbGUo
Y29uc3QgcHRocmVhZF90JiBwdGhyZWFkSGFuZGxlCiAKICAgICBUaHJlYWRNYXA6Oml0ZXJhdG9y
IGkgPSB0aHJlYWRNYXAoKS5iZWdpbigpOwogICAgIGZvciAoOyBpICE9IHRocmVhZE1hcCgpLmVu
ZCgpOyArK2kpIHsKLSAgICAgICAgaWYgKHB0aHJlYWRfZXF1YWwoaS0+c2Vjb25kLCBwdGhyZWFk
SGFuZGxlKSkKLSAgICAgICAgICAgIHJldHVybiBpLT5maXJzdDsKKyAgICAgICAgaWYgKHB0aHJl
YWRfZXF1YWwoaS0+dmFsdWUsIHB0aHJlYWRIYW5kbGUpKQorICAgICAgICAgICAgcmV0dXJuIGkt
PmtleTsKICAgICB9CiAKICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvZ2VvbG9jYXRpb24vR2VvbG9jYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlvbi5jcHAKaW5kZXggZTJjYzg5YzYzNjhjNGU3OWUy
YjVlY2U4OTY3OGVmOGYwNjVjMWNmZi4uNTBiNzU1NDliYjQ5YmQ0OWIyNjA0ZDRhOTc5MmYzOWJm
ZTU2NjcxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9H
ZW9sb2NhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9H
ZW9sb2NhdGlvbi5jcHAKQEAgLTE5NCw3ICsxOTQsNyBAQCBHZW9sb2NhdGlvbjo6R2VvTm90aWZp
ZXIqIEdlb2xvY2F0aW9uOjpXYXRjaGVyczo6ZmluZChpbnQgaWQpCiAgICAgSWRUb05vdGlmaWVy
TWFwOjppdGVyYXRvciBpdGVyID0gbV9pZFRvTm90aWZpZXJNYXAuZmluZChpZCk7CiAgICAgaWYg
KGl0ZXIgPT0gbV9pZFRvTm90aWZpZXJNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybiAwOwotICAg
IHJldHVybiBpdGVyLT5zZWNvbmQuZ2V0KCk7CisgICAgcmV0dXJuIGl0ZXItPnZhbHVlLmdldCgp
OwogfQogCiB2b2lkIEdlb2xvY2F0aW9uOjpXYXRjaGVyczo6cmVtb3ZlKGludCBpZCkKQEAgLTIw
Myw3ICsyMDMsNyBAQCB2b2lkIEdlb2xvY2F0aW9uOjpXYXRjaGVyczo6cmVtb3ZlKGludCBpZCkK
ICAgICBJZFRvTm90aWZpZXJNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2lkVG9Ob3RpZmllck1hcC5m
aW5kKGlkKTsKICAgICBpZiAoaXRlciA9PSBtX2lkVG9Ob3RpZmllck1hcC5lbmQoKSkKICAgICAg
ICAgcmV0dXJuOwotICAgIG1fbm90aWZpZXJUb0lkTWFwLnJlbW92ZShpdGVyLT5zZWNvbmQpOwor
ICAgIG1fbm90aWZpZXJUb0lkTWFwLnJlbW92ZShpdGVyLT52YWx1ZSk7CiAgICAgbV9pZFRvTm90
aWZpZXJNYXAucmVtb3ZlKGl0ZXIpOwogfQogCkBAIC0yMTIsNyArMjEyLDcgQEAgdm9pZCBHZW9s
b2NhdGlvbjo6V2F0Y2hlcnM6OnJlbW92ZShHZW9Ob3RpZmllciogbm90aWZpZXIpCiAgICAgTm90
aWZpZXJUb0lkTWFwOjppdGVyYXRvciBpdGVyID0gbV9ub3RpZmllclRvSWRNYXAuZmluZChub3Rp
Zmllcik7CiAgICAgaWYgKGl0ZXIgPT0gbV9ub3RpZmllclRvSWRNYXAuZW5kKCkpCiAgICAgICAg
IHJldHVybjsKLSAgICBtX2lkVG9Ob3RpZmllck1hcC5yZW1vdmUoaXRlci0+c2Vjb25kKTsKKyAg
ICBtX2lkVG9Ob3RpZmllck1hcC5yZW1vdmUoaXRlci0+dmFsdWUpOwogICAgIG1fbm90aWZpZXJU
b0lkTWFwLnJlbW92ZShpdGVyKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcAppbmRleCBiMDVi
MzI4NjNkMDcyZmI2NTdkY2E5YzhkNjRlMGI4NTFhZDA5MjQ1Li4zNzA0M2ZkNTVhZjJiNGI3OTA4
MjU0ZTlmMjFkNzI5YzUxNTMyMWRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcApAQCAtMTMyLDcg
KzEzMiw3IEBAIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gSURCRGF0YWJhc2VCYWNrZW5kSW1w
bDo6b2JqZWN0U3RvcmVOYW1lcygpIGNvbnN0CiB7CiAgICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+
IG9iamVjdFN0b3JlTmFtZXMgPSBET01TdHJpbmdMaXN0OjpjcmVhdGUoKTsKICAgICBmb3IgKE9i
amVjdFN0b3JlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fb2JqZWN0U3RvcmVzLmJlZ2luKCk7
IGl0ICE9IG1fb2JqZWN0U3RvcmVzLmVuZCgpOyArK2l0KQotICAgICAgICBvYmplY3RTdG9yZU5h
bWVzLT5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgb2JqZWN0U3RvcmVOYW1lcy0+YXBwZW5k
KGl0LT5rZXkpOwogICAgIG9iamVjdFN0b3JlTmFtZXMtPnNvcnQoKTsKICAgICByZXR1cm4gb2Jq
ZWN0U3RvcmVOYW1lcy5yZWxlYXNlKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcAppbmRleCBmNWI5
Yzg3NzQwNjc0M2YwZTVhNjA5YTRjY2U5ZDVlNGRhMjlhMzFjLi4yOTYwYjAyY2IyZTZiOGQ2NzE0
YzIwN2E5OWQ1NzU4MWY3MDVkZTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKQEAgLTExNyw3ICsx
MTcsNyBAQCB2b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6ZGVsZXRlRGF0YWJhc2UoY29uc3Qg
U3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbAogICAgIGlmIChpdCAhPSBtX2RhdGFiYXNl
QmFja2VuZE1hcC5lbmQoKSkgewogICAgICAgICAvLyBJZiB0aGVyZSBhcmUgYW55IGNvbm5lY3Rp
b25zIHRvIHRoZSBkYXRhYmFzZSwgZGlyZWN0bHkgZGVsZXRlIHRoZQogICAgICAgICAvLyBkYXRh
YmFzZS4KLSAgICAgICAgaXQtPnNlY29uZC0+ZGVsZXRlRGF0YWJhc2UoY2FsbGJhY2tzKTsKKyAg
ICAgICAgaXQtPnZhbHVlLT5kZWxldGVEYXRhYmFzZShjYWxsYmFja3MpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCkBAIC0xNDAsNyArMTQwLDcgQEAgUGFzc1JlZlB0cjxJREJCYWNraW5nU3Rv
cmU+IElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6b3BlbkJhY2tpbmdTdG9yZShQYXNzUmVmUHRyPFMK
ICAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmU7CiAgICAgSURCQmFja2lu
Z1N0b3JlTWFwOjppdGVyYXRvciBpdDIgPSBtX2JhY2tpbmdTdG9yZU1hcC5maW5kKGZpbGVJZGVu
dGlmaWVyKTsKICAgICBpZiAoaXQyICE9IG1fYmFja2luZ1N0b3JlTWFwLmVuZCgpKQotICAgICAg
ICBiYWNraW5nU3RvcmUgPSBpdDItPnNlY29uZDsKKyAgICAgICAgYmFja2luZ1N0b3JlID0gaXQy
LT52YWx1ZTsKICAgICBlbHNlIHsKICNpZiBVU0UoTEVWRUxEQikKICAgICAgICAgYmFja2luZ1N0
b3JlID0gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbihzZWN1cml0eU9yaWdpbi5nZXQoKSwg
ZGF0YURpcmVjdG9yeSwgZmlsZUlkZW50aWZpZXIsIHRoaXMpOwpAQCAtMTY1LDcgKzE2NSw3IEBA
IHZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuSW50ZXJuYWwoY29uc3QgU3RyaW5nJiBu
YW1lLCBJREJDYWxsYmFja3MqIGNhbGxiCiAgICAgaWYgKGl0ICE9IG1fZGF0YWJhc2VCYWNrZW5k
TWFwLmVuZCgpKSB7CiAgICAgICAgIC8vIElmIGl0J3MgYWxyZWFkeSBiZWVuIG9wZW5lZCwgd2Ug
aGF2ZSB0byB3YWl0IGZvciBhbnkgcGVuZGluZwogICAgICAgICAvLyBzZXRWZXJzaW9uIGNhbGxz
IHRvIGNvbXBsZXRlLgotICAgICAgICBpdC0+c2Vjb25kLT5vcGVuQ29ubmVjdGlvbihjYWxsYmFj
a3MpOworICAgICAgICBpdC0+dmFsdWUtPm9wZW5Db25uZWN0aW9uKGNhbGxiYWNrcyk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAppbmRleCBkZjkyNmY0NTljNjQ4YjNiZTVjYjI2MmU3
MTMxMWMwYmQ1ZGI4YTZhLi45MzU4MTY1YWE3ZWJiMjEzY2U3NDg1ZTA4NTQ4N2MxOTFlNmI3MDRk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RT
dG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0
U3RvcmUuY3BwCkBAIC0yMjQsNyArMjI0LDcgQEAgUGFzc1JlZlB0cjxJREJJbmRleD4gSURCT2Jq
ZWN0U3RvcmU6OmluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMKIAog
ICAgIElEQkluZGV4TWFwOjppdGVyYXRvciBpdCA9IG1faW5kZXhNYXAuZmluZChuYW1lKTsKICAg
ICBpZiAoaXQgIT0gbV9pbmRleE1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7
CisgICAgICAgIHJldHVybiBpdC0+dmFsdWU7CiAKICAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5k
SW50ZXJmYWNlPiBpbmRleEJhY2tlbmQgPSBtX2JhY2tlbmQtPmluZGV4KG5hbWUsIGVjKTsKICAg
ICBBU1NFUlQoIWluZGV4QmFja2VuZCAhPSAhZWMpOyAvLyBJZiB3ZSBkaWRuJ3QgZ2V0IGFuIGlu
ZGV4LCB3ZSBzaG91bGQgaGF2ZSBnb3R0ZW4gYW4gZXhjZXB0aW9uIGNvZGUuIEFuZCB2aWNlIHZl
cnNhLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcAppbmRleCAyZTJmMGZhOTZkZTg5ODRkMzdm
YTk3ZTQyMTQ0ZDZiNzRkYjNhOGU3Li45Zjk1ZmI5YmU1YTJmYTMyODhkOWY2NzNjZGE4ZjY5MGQ4
ZDE5MzMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcApAQCAtNzgsNyArNzgsNyBAQCBQ
YXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmluZGV4
TmFtZXMoKSBjb25zdAogewogICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiBpbmRleE5hbWVzID0g
RE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7CiAgICAgZm9yIChJbmRleE1hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtX2luZGV4ZXMuYmVnaW4oKTsgaXQgIT0gbV9pbmRleGVzLmVuZCgpOyArK2l0KQot
ICAgICAgICBpbmRleE5hbWVzLT5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgaW5kZXhOYW1l
cy0+YXBwZW5kKGl0LT5rZXkpOwogICAgIGluZGV4TmFtZXMtPnNvcnQoKTsKICAgICByZXR1cm4g
aW5kZXhOYW1lcy5yZWxlYXNlKCk7CiB9CkBAIC0xNzQsNyArMTc0LDcgQEAgdm9pZCBJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjpwdXQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
IHBycFZhbHVlLAogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGZvciAo
SW5kZXhNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pbmRleGVzLmJlZ2luKCk7IGl0ICE9IG1faW5kZXhl
cy5lbmQoKTsgKytpdCkgewotICAgICAgICAgICAgY29uc3QgUmVmUHRyPElEQkluZGV4QmFja2Vu
ZEltcGw+JiBpbmRleCA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICBjb25zdCBSZWZQdHI8SURC
SW5kZXhCYWNrZW5kSW1wbD4mIGluZGV4ID0gaXQtPnZhbHVlOwogICAgICAgICAgICAgUmVmUHRy
PElEQktleT4gaW5kZXhLZXkgPSBmZXRjaEtleUZyb21LZXlQYXRoKHZhbHVlLmdldCgpLCBpbmRl
eC0+a2V5UGF0aCgpKTsKICAgICAgICAgICAgIGlmIChpbmRleEtleSAmJiAhaW5kZXhLZXktPnZh
bGlkKCkpIHsKICAgICAgICAgICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRB
X0VSUjsKQEAgLTI1NCw3ICsyNTQsNyBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6
OnB1dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPAogCiAgICAg
VmVjdG9yPFJlZlB0cjxJREJLZXk+ID4gaW5kZXhLZXlzOwogICAgIGZvciAoSW5kZXhNYXA6Oml0
ZXJhdG9yIGl0ID0gb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5iZWdpbigpOyBpdCAhPSBvYmplY3RT
dG9yZS0+bV9pbmRleGVzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IFJlZlB0cjxJREJJ
bmRleEJhY2tlbmRJbXBsPiYgaW5kZXggPSBpdC0+c2Vjb25kOworICAgICAgICBjb25zdCBSZWZQ
dHI8SURCSW5kZXhCYWNrZW5kSW1wbD4mIGluZGV4ID0gaXQtPnZhbHVlOwogCiAgICAgICAgIFJl
ZlB0cjxJREJLZXk+IGluZGV4S2V5ID0gZmV0Y2hLZXlGcm9tS2V5UGF0aCh2YWx1ZS5nZXQoKSwg
aW5kZXgtPmtleVBhdGgoKSk7CiAgICAgICAgIGlmICghaW5kZXhLZXkpIHsKQEAgLTI5Myw3ICsy
OTMsNyBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPAogCiAgICAgaW50IGkgPSAwOwogICAgIGZv
ciAoSW5kZXhNYXA6Oml0ZXJhdG9yIGl0ID0gb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5iZWdpbigp
OyBpdCAhPSBvYmplY3RTdG9yZS0+bV9pbmRleGVzLmVuZCgpOyArK2l0LCArK2kpIHsKLSAgICAg
ICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+JiBpbmRleCA9IGl0LT5zZWNvbmQ7CisgICAg
ICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiYgaW5kZXggPSBpdC0+dmFsdWU7CiAgICAg
ICAgIGlmICghaW5kZXgtPmhhc1ZhbGlkSWQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBU
aGUgaW5kZXggb2JqZWN0IGhhcyBiZWVuIGNyZWF0ZWQsIGJ1dCBkb2VzIG5vdCBleGlzdCBpbiB0
aGUgZGF0YWJhc2UgeWV0LgogCkBAIC0zNzYsMTAgKzM3NiwxMCBAQCB2b2lkIElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OmRlbGV0ZUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQ
YXNzUmVmUAogICAgICAgICAgICAgcmVjb3JkSWRlbnRpZmllciA9IGJhY2tpbmdTdG9yZUN1cnNv
ci0+b2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKCk7CiAKICAgICAgICAgICAgIGZvciAoSW5k
ZXhNYXA6Oml0ZXJhdG9yIGl0ID0gb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5iZWdpbigpOyBpdCAh
PSBvYmplY3RTdG9yZS0+bV9pbmRleGVzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAg
aWYgKCFpdC0+c2Vjb25kLT5oYXNWYWxpZElkKCkpCisgICAgICAgICAgICAgICAgaWYgKCFpdC0+
dmFsdWUtPmhhc1ZhbGlkSWQoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7IC8vIFRo
ZSBpbmRleCBvYmplY3QgaGFzIGJlZW4gY3JlYXRlZCwgYnV0IGRvZXMgbm90IGV4aXN0IGluIHRo
ZSBkYXRhYmFzZSB5ZXQuCiAKLSAgICAgICAgICAgICAgICBib29sIHN1Y2Nlc3MgPSBvYmplY3RT
dG9yZS0+bV9iYWNraW5nU3RvcmUtPmRlbGV0ZUluZGV4RGF0YUZvclJlY29yZChvYmplY3RTdG9y
ZS0+bV9kYXRhYmFzZUlkLCBvYmplY3RTdG9yZS0+aWQoKSwgaXQtPnNlY29uZC0+aWQoKSwgcmVj
b3JkSWRlbnRpZmllci5nZXQoKSk7CisgICAgICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gb2Jq
ZWN0U3RvcmUtPm1fYmFja2luZ1N0b3JlLT5kZWxldGVJbmRleERhdGFGb3JSZWNvcmQob2JqZWN0
U3RvcmUtPm1fZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmUtPmlkKCksIGl0LT52YWx1ZS0+aWQoKSwg
cmVjb3JkSWRlbnRpZmllci5nZXQoKSk7CiAgICAgICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChz
dWNjZXNzLCBzdWNjZXNzKTsKICAgICAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwCmluZGV4IDllMGIzYThmNzI5
YzRiNjFkMDg0YzdhZGNkMjBjMWExYTYyYzg1MWUuLmJhYmM3MWE4OTk5NDhjM2M0ZDcxMmNiOGNk
OWU2YmFmMjYwMTFiYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQlRyYW5zYWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAKQEAgLTkzLDcgKzkzLDcgQEAgUGFzc1JlZlB0cjxJREJP
YmplY3RTdG9yZT4gSURCVHJhbnNhY3Rpb246Om9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFt
ZSwgRXhjZXAKIAogICAgIElEQk9iamVjdFN0b3JlTWFwOjppdGVyYXRvciBpdCA9IG1fb2JqZWN0
U3RvcmVNYXAuZmluZChuYW1lKTsKICAgICBpZiAoaXQgIT0gbV9vYmplY3RTdG9yZU1hcC5lbmQo
KSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBpdC0+dmFsdWU7
CiAKICAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBvYmplY3RTdG9y
ZUJhY2tlbmQgPSBtX2JhY2tlbmQtPm9iamVjdFN0b3JlKG5hbWUsIGVjKTsKICAgICBpZiAoIW9i
amVjdFN0b3JlQmFja2VuZCkgewpAQCAtMjI3LDcgKzIyNyw3IEBAIGJvb2wgSURCVHJhbnNhY3Rp
b246OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCiAKICAgICAvLyBCcmVh
ayByZWZlcmVuY2UgY3ljbGVzLgogICAgIGZvciAoSURCT2JqZWN0U3RvcmVNYXA6Oml0ZXJhdG9y
IGl0ID0gbV9vYmplY3RTdG9yZU1hcC5iZWdpbigpOyBpdCAhPSBtX29iamVjdFN0b3JlTWFwLmVu
ZCgpOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT50cmFuc2FjdGlvbkZpbmlzaGVkKCk7Cisg
ICAgICAgIGl0LT52YWx1ZS0+dHJhbnNhY3Rpb25GaW5pc2hlZCgpOwogICAgIG1fb2JqZWN0U3Rv
cmVNYXAuY2xlYXIoKTsKIAogICAgIFZlY3RvcjxSZWZQdHI8RXZlbnRUYXJnZXQ+ID4gdGFyZ2V0
czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvQWJzdHJh
Y3REYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Fic3Ry
YWN0RGF0YWJhc2UuY3BwCmluZGV4IGU1MWMyNDQ0ODY2YTZjY2NiZDliNGE5Zjk3ZDY5ZGIyMjUz
MmFmZDIuLmYwNGJjZDg5YjFhZmFmZDI2OGQ2MjJlZjc4ZTBiOTY4Njg5NmRlY2EgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvQWJzdHJhY3REYXRhYmFzZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9BYnN0cmFjdERhdGFi
YXNlLmNwcApAQCAtMjgyLDcgKzI4Miw3IEBAIGJvb2wgQWJzdHJhY3REYXRhYmFzZTo6cGVyZm9y
bU9wZW5BbmRWZXJpZnkoYm9vbCBzaG91bGRTZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwKICAgICAg
ICAgR3VpZFZlcnNpb25NYXA6Oml0ZXJhdG9yIGVudHJ5ID0gZ3VpZFRvVmVyc2lvbk1hcCgpLmZp
bmQobV9ndWlkKTsKICAgICAgICAgaWYgKGVudHJ5ICE9IGd1aWRUb1ZlcnNpb25NYXAoKS5lbmQo
KSkgewogICAgICAgICAgICAgLy8gTWFwIG51bGwgc3RyaW5nIHRvIGVtcHR5IHN0cmluZyAoc2Vl
IHVwZGF0ZUd1aWRWZXJzaW9uTWFwKCkpLgotICAgICAgICAgICAgY3VycmVudFZlcnNpb24gPSBl
bnRyeS0+c2Vjb25kLmlzTnVsbCgpID8gU3RyaW5nKCIiKSA6IGVudHJ5LT5zZWNvbmQuaXNvbGF0
ZWRDb3B5KCk7CisgICAgICAgICAgICBjdXJyZW50VmVyc2lvbiA9IGVudHJ5LT52YWx1ZS5pc051
bGwoKSA/IFN0cmluZygiIikgOiBlbnRyeS0+dmFsdWUuaXNvbGF0ZWRDb3B5KCk7CiAgICAgICAg
ICAgICBMT0coU3RvcmFnZUFQSSwgIkN1cnJlbnQgY2FjaGVkIHZlcnNpb24gZm9yIGd1aWQgJWkg
aXMgJXMiLCBtX2d1aWQsIGN1cnJlbnRWZXJzaW9uLmFzY2lpKCkuZGF0YSgpKTsKIAogI2lmIFBM
QVRGT1JNKENIUk9NSVVNKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3BwCmluZGV4IDIzM2IzNzIxYjZlMzYwZDE4NjU5NWNj
MDkyNzljNGE4OGUzYzZkNWEuLjNjZmNmZmVlN2IxYmFiZjhkZjc0MzA4NDVmNGEwMzZiMTUzYjdh
MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJh
c2VUcmFja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Rh
dGFiYXNlVHJhY2tlci5jcHAKQEAgLTI1Miw3ICsyNTIsNyBAQCB2b2lkIERhdGFiYXNlVHJhY2tl
cjo6aW50ZXJydXB0QWxsRGF0YWJhc2VzRm9yQ29udGV4dChjb25zdCBTY3JpcHRFeGVjdXRpb25D
b250ZQogCiAgICAgICAgIERhdGFiYXNlTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgZGJOYW1lTWFw
RW5kSXQgPSBuYW1lTWFwLT5lbmQoKTsKICAgICAgICAgZm9yIChEYXRhYmFzZU5hbWVNYXA6OmNv
bnN0X2l0ZXJhdG9yIGRiTmFtZU1hcEl0ID0gbmFtZU1hcC0+YmVnaW4oKTsgZGJOYW1lTWFwSXQg
IT0gZGJOYW1lTWFwRW5kSXQ7ICsrZGJOYW1lTWFwSXQpIHsKLSAgICAgICAgICAgIERhdGFiYXNl
U2V0KiBkYXRhYmFzZVNldCA9IGRiTmFtZU1hcEl0LT5zZWNvbmQ7CisgICAgICAgICAgICBEYXRh
YmFzZVNldCogZGF0YWJhc2VTZXQgPSBkYk5hbWVNYXBJdC0+dmFsdWU7CiAgICAgICAgICAgICBE
YXRhYmFzZVNldDo6Y29uc3RfaXRlcmF0b3IgZGJTZXRFbmRJdCA9IGRhdGFiYXNlU2V0LT5lbmQo
KTsKICAgICAgICAgICAgIGZvciAoRGF0YWJhc2VTZXQ6OmNvbnN0X2l0ZXJhdG9yIGRiU2V0SXQg
PSBkYXRhYmFzZVNldC0+YmVnaW4oKTsgZGJTZXRJdCAhPSBkYlNldEVuZEl0OyArK2RiU2V0SXQp
IHsKICAgICAgICAgICAgICAgICBpZiAoKCpkYlNldEl0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpID09IGNvbnRleHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRh
dGFiYXNlL09yaWdpblVzYWdlUmVjb3JkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvT3JpZ2luVXNhZ2VSZWNvcmQuY3BwCmluZGV4IDQ0MzU1MGE1NzMwOWYzMzYzZjBm
Y2E5OGY1MDhjMDI3NmQwZDk5ZGIuLjJiZjhhZjRhZTAwOTkyODBhY2ExNzU3NzQ4YmEyMWNmOTBi
NzAyZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvT3Jp
Z2luVXNhZ2VSZWNvcmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvT3JpZ2luVXNhZ2VSZWNvcmQuY3BwCkBAIC05Myw3ICs5Myw3IEBAIHVuc2lnbmVkIGxvbmcg
bG9uZyBPcmlnaW5Vc2FnZVJlY29yZDo6ZGlza1VzYWdlKCkKICAgICBIYXNoTWFwPFN0cmluZywg
RGF0YWJhc2VFbnRyeT46Oml0ZXJhdG9yIGlEYXRhYmFzZSA9IG1fZGF0YWJhc2VNYXAuYmVnaW4o
KTsKICAgICBIYXNoTWFwPFN0cmluZywgRGF0YWJhc2VFbnRyeT46Oml0ZXJhdG9yIGVuZERhdGFi
YXNlID0gbV9kYXRhYmFzZU1hcC5lbmQoKTsKICAgICBmb3IgKDsgaURhdGFiYXNlICE9IGVuZERh
dGFiYXNlOyArK2lEYXRhYmFzZSkKLSAgICAgICAgbV9jYWNoZWREaXNrVXNhZ2UgKz0gaURhdGFi
YXNlLT5zZWNvbmQuc2l6ZTsKKyAgICAgICAgbV9jYWNoZWREaXNrVXNhZ2UgKz0gaURhdGFiYXNl
LT52YWx1ZS5zaXplOwogCiAgICAgbV9jYWNoZWREaXNrVXNhZ2VJc1ZhbGlkID0gdHJ1ZTsKICAg
ICByZXR1cm4gbV9jYWNoZWREaXNrVXNhZ2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNw
cAppbmRleCA4MzdiOGZiZDIyMDVhZGM5NzQ4NmRkM2YwZThmMDIwNzM4MGY4ZDliLi5kYTNhN2Vl
NzViOGMwMTI1OTQ2NmVjNGE3ZWFkYTk3YmQxYzIzYmY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25Db29y
ZGluYXRvci5jcHAKQEAgLTc4LDcgKzc4LDcgQEAgdm9pZCBTUUxUcmFuc2FjdGlvbkNvb3JkaW5h
dG9yOjphY3F1aXJlTG9jayhTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCiAgICAgICAgIGNv
b3JkaW5hdGlvbkluZm9JdGVyYXRvciA9IG1fY29vcmRpbmF0aW9uSW5mb01hcC5hZGQoZGJJZGVu
dGlmaWVyLCBDb29yZGluYXRpb25JbmZvKCkpLml0ZXJhdG9yOwogICAgIH0KIAotICAgIENvb3Jk
aW5hdGlvbkluZm8mIGluZm8gPSBjb29yZGluYXRpb25JbmZvSXRlcmF0b3ItPnNlY29uZDsKKyAg
ICBDb29yZGluYXRpb25JbmZvJiBpbmZvID0gY29vcmRpbmF0aW9uSW5mb0l0ZXJhdG9yLT52YWx1
ZTsKICAgICBpbmZvLnBlbmRpbmdUcmFuc2FjdGlvbnMuYXBwZW5kKHRyYW5zYWN0aW9uKTsKICAg
ICBwcm9jZXNzUGVuZGluZ1RyYW5zYWN0aW9ucyhpbmZvKTsKIH0KQEAgLTkyLDcgKzkyLDcgQEAg
dm9pZCBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpyZWxlYXNlTG9jayhTUUxUcmFuc2FjdGlv
biogdHJhbnNhY3Rpb24pCiAKICAgICBDb29yZGluYXRpb25JbmZvTWFwOjppdGVyYXRvciBjb29y
ZGluYXRpb25JbmZvSXRlcmF0b3IgPSBtX2Nvb3JkaW5hdGlvbkluZm9NYXAuZmluZChkYklkZW50
aWZpZXIpOwogICAgIEFTU0VSVChjb29yZGluYXRpb25JbmZvSXRlcmF0b3IgIT0gbV9jb29yZGlu
YXRpb25JbmZvTWFwLmVuZCgpKTsKLSAgICBDb29yZGluYXRpb25JbmZvJiBpbmZvID0gY29vcmRp
bmF0aW9uSW5mb0l0ZXJhdG9yLT5zZWNvbmQ7CisgICAgQ29vcmRpbmF0aW9uSW5mbyYgaW5mbyA9
IGNvb3JkaW5hdGlvbkluZm9JdGVyYXRvci0+dmFsdWU7CiAKICAgICBpZiAodHJhbnNhY3Rpb24t
PmlzUmVhZE9ubHkoKSkgewogICAgICAgICBBU1NFUlQoaW5mby5hY3RpdmVSZWFkVHJhbnNhY3Rp
b25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uKSk7CkBAIC0xMTAsNyArMTEwLDcgQEAgdm9pZCBTUUxU
cmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpzaHV0ZG93bigpCiAgICAgLy8gTm90aWZ5IGFsbCB0cmFu
c2FjdGlvbnMgaW4gcHJvZ3Jlc3MgdGhhdCB0aGUgZGF0YWJhc2UgdGhyZWFkIGlzIHNodXR0aW5n
IGRvd24KICAgICBmb3IgKENvb3JkaW5hdGlvbkluZm9NYXA6Oml0ZXJhdG9yIGNvb3JkaW5hdGlv
bkluZm9JdGVyYXRvciA9IG1fY29vcmRpbmF0aW9uSW5mb01hcC5iZWdpbigpOwogICAgICAgICAg
Y29vcmRpbmF0aW9uSW5mb0l0ZXJhdG9yICE9IG1fY29vcmRpbmF0aW9uSW5mb01hcC5lbmQoKTsg
Kytjb29yZGluYXRpb25JbmZvSXRlcmF0b3IpIHsKLSAgICAgICAgQ29vcmRpbmF0aW9uSW5mbyYg
aW5mbyA9IGNvb3JkaW5hdGlvbkluZm9JdGVyYXRvci0+c2Vjb25kOworICAgICAgICBDb29yZGlu
YXRpb25JbmZvJiBpbmZvID0gY29vcmRpbmF0aW9uSW5mb0l0ZXJhdG9yLT52YWx1ZTsKICAgICAg
ICAgaWYgKGluZm8uYWN0aXZlV3JpdGVUcmFuc2FjdGlvbikKICAgICAgICAgICAgIGluZm8uYWN0
aXZlV3JpdGVUcmFuc2FjdGlvbi0+bm90aWZ5RGF0YWJhc2VUaHJlYWRJc1NodXR0aW5nRG93bigp
OwogICAgICAgICBmb3IgKEhhc2hTZXQ8UmVmUHRyPFNRTFRyYW5zYWN0aW9uPiA+OjppdGVyYXRv
ciBhY3RpdmVSZWFkVHJhbnNhY3Rpb25zSXRlcmF0b3IgPQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9jaHJvbWl1bS9EYXRhYmFzZVRyYWNrZXJDaHJvbWl1
bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL0RhdGFi
YXNlVHJhY2tlckNocm9taXVtLmNwcAppbmRleCAxMTdmZGJlZWQzMWQ2M2I2NGI5NDE4MDNiOGVh
ZGNkOTk4NWNlZWZjLi42MGE3NmNhNWM5NTk4MmJlYTk0Y2UwN2JhZjY2ZWRhNWQ4MjdjNWFiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL0Rh
dGFiYXNlVHJhY2tlckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmRhdGFiYXNlL2Nocm9taXVtL0RhdGFiYXNlVHJhY2tlckNocm9taXVtLmNwcApAQCAtMTgwLDcg
KzE4MCw3IEBAIHZvaWQgRGF0YWJhc2VUcmFja2VyOjppbnRlcnJ1cHRBbGxEYXRhYmFzZXNGb3JD
b250ZXh0KGNvbnN0IFNjcmlwdEV4ZWN1dGlvbkNvbnRlCiAKICAgICBEYXRhYmFzZU5hbWVNYXA6
OmNvbnN0X2l0ZXJhdG9yIGRiTmFtZU1hcEVuZEl0ID0gbmFtZU1hcC0+ZW5kKCk7CiAgICAgZm9y
IChEYXRhYmFzZU5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGRiTmFtZU1hcEl0ID0gbmFtZU1hcC0+
YmVnaW4oKTsgZGJOYW1lTWFwSXQgIT0gZGJOYW1lTWFwRW5kSXQ7ICsrZGJOYW1lTWFwSXQpIHsK
LSAgICAgICAgRGF0YWJhc2VTZXQqIGRhdGFiYXNlU2V0ID0gZGJOYW1lTWFwSXQtPnNlY29uZDsK
KyAgICAgICAgRGF0YWJhc2VTZXQqIGRhdGFiYXNlU2V0ID0gZGJOYW1lTWFwSXQtPnZhbHVlOwog
ICAgICAgICBEYXRhYmFzZVNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gZGF0YWJhc2VTZXQtPmVu
ZCgpOwogICAgICAgICBmb3IgKERhdGFiYXNlU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IGRhdGFi
YXNlU2V0LT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIGlmICgoKml0
KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpID09IGNvbnRleHQpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL1F1b3RhVHJhY2tlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL1F1b3RhVHJhY2tl
ci5jcHAKaW5kZXggMTBiMDhhMmI3MjNjZGEyOTIwZDQzZGVmYTE4YzMxMTVlZmExYjIyOC4uM2Yy
NDJhMjIxNTI3MGRhZTZmZWRkODcxZWE2MDM2NTJiNWQyMjlkMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9jaHJvbWl1bS9RdW90YVRyYWNrZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvY2hyb21pdW0vUXVvdGFUcmFj
a2VyLmNwcApAQCAtNTMsOCArNTMsOCBAQCB2b2lkIFF1b3RhVHJhY2tlcjo6Z2V0RGF0YWJhc2VT
aXplQW5kU3BhY2VBdmFpbGFibGVUb09yaWdpbigKICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja0Rh
dGEobV9kYXRhR3VhcmQpOwogICAgICAgICBBU1NFUlQobV9kYXRhYmFzZVNpemVzLmNvbnRhaW5z
KG9yaWdpbklkZW50aWZpZXIpKTsKICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFNpemVNYXA+Ojpj
b25zdF9pdGVyYXRvciBpdCA9IG1fZGF0YWJhc2VTaXplcy5maW5kKG9yaWdpbklkZW50aWZpZXIp
OwotICAgICAgICBBU1NFUlQoaXQtPnNlY29uZC5jb250YWlucyhkYXRhYmFzZU5hbWUpKTsKLSAg
ICAgICAgKmRhdGFiYXNlU2l6ZSA9IGl0LT5zZWNvbmQuZ2V0KGRhdGFiYXNlTmFtZSk7CisgICAg
ICAgIEFTU0VSVChpdC0+dmFsdWUuY29udGFpbnMoZGF0YWJhc2VOYW1lKSk7CisgICAgICAgICpk
YXRhYmFzZVNpemUgPSBpdC0+dmFsdWUuZ2V0KGRhdGFiYXNlTmFtZSk7CiAKICAgICAgICAgaWYg
KG1fc3BhY2VBdmFpbGFibGVUb09yaWdpbnMuY29udGFpbnMob3JpZ2luSWRlbnRpZmllcikpIHsK
ICAgICAgICAgICAgICpzcGFjZUF2YWlsYWJsZSA9IG1fc3BhY2VBdmFpbGFibGVUb09yaWdpbnMu
Z2V0KG9yaWdpbklkZW50aWZpZXIpOwpAQCAtNzIsNyArNzIsNyBAQCB2b2lkIFF1b3RhVHJhY2tl
cjo6dXBkYXRlRGF0YWJhc2VTaXplKAogewogICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhKG1fZGF0
YUd1YXJkKTsKICAgICBIYXNoTWFwPFN0cmluZywgU2l6ZU1hcD46Oml0ZXJhdG9yIGl0ID0gbV9k
YXRhYmFzZVNpemVzLmFkZChvcmlnaW5JZGVudGlmaWVyLCBTaXplTWFwKCkpLml0ZXJhdG9yOwot
ICAgIGl0LT5zZWNvbmQuc2V0KGRhdGFiYXNlTmFtZSwgZGF0YWJhc2VTaXplKTsKKyAgICBpdC0+
dmFsdWUuc2V0KGRhdGFiYXNlTmFtZSwgZGF0YWJhc2VTaXplKTsKIH0KIAogdm9pZCBRdW90YVRy
YWNrZXI6OnVwZGF0ZVNwYWNlQXZhaWxhYmxlVG9PcmlnaW4oY29uc3QgU3RyaW5nJiBvcmlnaW5J
ZGVudGlmaWVyLCB1bnNpZ25lZCBsb25nIGxvbmcgc3BhY2VBdmFpbGFibGUpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0RGVmbGF0ZUZyYW1l
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0RGVmbGF0
ZUZyYW1lci5jcHAKaW5kZXggNzZjMDQwZDFjOTM3MmFiNzBlMjI2NDYwYTg3ZDJhNTVmMmM4OGZm
MC4uNjdiYjNkYWExMjk5ODg0NTExMTA2OTBlMTkyZWEwZGEwMDc2NmNkOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldERlZmxhdGVGcmFtZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXREZWZs
YXRlRnJhbWVyLmNwcApAQCAtODcsNyArODcsNyBAQCBib29sIFdlYlNvY2tldEV4dGVuc2lvbkRl
ZmxhdGVGcmFtZTo6cHJvY2Vzc1Jlc3BvbnNlKGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbgog
ICAgIGludCB3aW5kb3dCaXRzID0gMTU7CiAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNv
bnN0X2l0ZXJhdG9yIHBhcmFtZXRlciA9IHNlcnZlclBhcmFtZXRlcnMuZmluZCgibWF4X3dpbmRv
d19iaXRzIik7CiAgICAgaWYgKHBhcmFtZXRlciAhPSBzZXJ2ZXJQYXJhbWV0ZXJzLmVuZCgpKSB7
Ci0gICAgICAgIHdpbmRvd0JpdHMgPSBwYXJhbWV0ZXItPnNlY29uZC50b0ludCgpOworICAgICAg
ICB3aW5kb3dCaXRzID0gcGFyYW1ldGVyLT52YWx1ZS50b0ludCgpOwogICAgICAgICBpZiAod2lu
ZG93Qml0cyA8IDggfHwgd2luZG93Qml0cyA+IDE1KSB7CiAgICAgICAgICAgICBtX2ZhaWx1cmVS
ZWFzb24gPSAiUmVjZWl2ZWQgaW52YWxpZCBtYXhfd2luZG93X2JpdHMgcGFyYW1ldGVyIjsKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTk4LDcgKzk4LDcgQEAgYm9vbCBXZWJTb2NrZXRF
eHRlbnNpb25EZWZsYXRlRnJhbWU6OnByb2Nlc3NSZXNwb25zZShjb25zdCBIYXNoTWFwPFN0cmlu
ZywgU3RyaW4KICAgICBXZWJTb2NrZXREZWZsYXRlcjo6Q29udGV4dFRha2VPdmVyTW9kZSBtb2Rl
ID0gV2ViU29ja2V0RGVmbGF0ZXI6OlRha2VPdmVyQ29udGV4dDsKICAgICBwYXJhbWV0ZXIgPSBz
ZXJ2ZXJQYXJhbWV0ZXJzLmZpbmQoIm5vX2NvbnRleHRfdGFrZW92ZXIiKTsKICAgICBpZiAocGFy
YW1ldGVyICE9IHNlcnZlclBhcmFtZXRlcnMuZW5kKCkpIHsKLSAgICAgICAgaWYgKCFwYXJhbWV0
ZXItPnNlY29uZC5pc051bGwoKSkgeworICAgICAgICBpZiAoIXBhcmFtZXRlci0+dmFsdWUuaXNO
dWxsKCkpIHsKICAgICAgICAgICAgIG1fZmFpbHVyZVJlYXNvbiA9ICJSZWNlaXZlZCBpbnZhbGlk
IG5vX2NvbnRleHRfdGFrZW92ZXIgcGFyYW1ldGVyIjsKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2Nr
ZXRzL1dlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXIuY3BwCmluZGV4IDdj
NTkyYWQxYmYyODA2OGM4MzAzMzY5YjYwNjU2NzNiNmJhN2U5NzQuLjU2MDlmNjU4MWFhYjk3NDJi
MGZkODVmZjE1ZDE1ZmE1MGVkMjlmNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0RXh0ZW5zaW9uRGlzcGF0Y2hl
ci5jcHAKQEAgLTE4MSwxMCArMTgxLDEwIEBAIHZvaWQgV2ViU29ja2V0RXh0ZW5zaW9uRGlzcGF0
Y2hlcjo6YXBwZW5kQWNjZXB0ZWRFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBleHRlbnNpCiAgICAg
Ly8gRklYTUU6IFNob3VsZCB1c2UgTGlzdEhhc2hTZXQgdG8ga2VlcCB0aGUgb3JkZXIgb2YgdGhl
IHBhcmFtZXRlcnMuCiAgICAgZm9yIChIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRl
cmF0b3IgaXRlcmF0b3IgPSBleHRlbnNpb25QYXJhbWV0ZXJzLmJlZ2luKCk7IGl0ZXJhdG9yICE9
IGV4dGVuc2lvblBhcmFtZXRlcnMuZW5kKCk7ICsraXRlcmF0b3IpIHsKICAgICAgICAgbV9hY2Nl
cHRlZEV4dGVuc2lvbnNCdWlsZGVyLmFwcGVuZCgiOyAiKTsKLSAgICAgICAgbV9hY2NlcHRlZEV4
dGVuc2lvbnNCdWlsZGVyLmFwcGVuZChpdGVyYXRvci0+Zmlyc3QpOwotICAgICAgICBpZiAoIWl0
ZXJhdG9yLT5zZWNvbmQuaXNOdWxsKCkpIHsKKyAgICAgICAgbV9hY2NlcHRlZEV4dGVuc2lvbnNC
dWlsZGVyLmFwcGVuZChpdGVyYXRvci0+a2V5KTsKKyAgICAgICAgaWYgKCFpdGVyYXRvci0+dmFs
dWUuaXNOdWxsKCkpIHsKICAgICAgICAgICAgIG1fYWNjZXB0ZWRFeHRlbnNpb25zQnVpbGRlci5h
cHBlbmQoIj0iKTsKLSAgICAgICAgICAgIG1fYWNjZXB0ZWRFeHRlbnNpb25zQnVpbGRlci5hcHBl
bmQoaXRlcmF0b3ItPnNlY29uZCk7CisgICAgICAgICAgICBtX2FjY2VwdGVkRXh0ZW5zaW9uc0J1
aWxkZXIuYXBwZW5kKGl0ZXJhdG9yLT52YWx1ZSk7CiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwIGIv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAppbmRleCBjZmU2
ZDhlMmUyYjg5ZTJlY2I4ZjlmYzE1ZDhkNmI1MzY1YzQ3YjhmLi5lZWUxMDk2MWIxNmQ3ZDdlYjYx
ODYxZmJmMWM2ZDY5YzBlZWFmYjc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQVhPYmplY3RDYWNoZS5jcHAKQEAgLTkzLDcgKzkzLDcgQEAgQVhPYmplY3RDYWNoZTo6fkFY
T2JqZWN0Q2FjaGUoKQogewogICAgIEhhc2hNYXA8QVhJRCwgUmVmUHRyPEFjY2Vzc2liaWxpdHlP
YmplY3Q+ID46Oml0ZXJhdG9yIGVuZCA9IG1fb2JqZWN0cy5lbmQoKTsKICAgICBmb3IgKEhhc2hN
YXA8QVhJRCwgUmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+ID46Oml0ZXJhdG9yIGl0ID0gbV9v
YmplY3RzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBvYmogPSAoKml0KS5zZWNvbmQuZ2V0KCk7CisgICAgICAgIEFjY2Vzc2liaWxpdHlP
YmplY3QqIG9iaiA9ICgqaXQpLnZhbHVlLmdldCgpOwogICAgICAgICBkZXRhY2hXcmFwcGVyKG9i
aik7CiAgICAgICAgIG9iai0+ZGV0YWNoKCk7CiAgICAgICAgIHJlbW92ZUFYSUQob2JqKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvRE9NT2JqZWN0Q2FjaGUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9ET01PYmplY3RDYWNoZS5jcHAK
aW5kZXggMmU3ZjEwNmU3OWUzMWM3MzE1NGFiOWNmYWExOWE1ODllOWRlN2RkNS4uZGQ3ZDA0OTcx
OGM4MTIyZjI0YjM4ZGI4ODNlNWI2YjY0ZTJlYzA2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvZ29iamVjdC9ET01PYmplY3RDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvZ29iamVjdC9ET01PYmplY3RDYWNoZS5jcHAKQEAgLTc0LDcgKzc0LDcgQEAg
dm9pZCBET01PYmplY3RDYWNoZTo6Y2xlYXJCeUZyYW1lKFdlYkNvcmU6OkZyYW1lKiBmcmFtZSkK
ICAgICAvLyBpdGVyYXRpbmcgdGhlIGNhY2hlIGl0c2VsZi4KICAgICBET01PYmplY3RNYXA6Oml0
ZXJhdG9yIGVuZCA9IGRvbU9iamVjdHMoKS5lbmQoKTsKICAgICBmb3IgKERPTU9iamVjdE1hcDo6
aXRlcmF0b3IgaXRlciA9IGRvbU9iamVjdHMoKS5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVy
KSB7Ci0gICAgICAgIERPTU9iamVjdENhY2hlRGF0YSogZGF0YSA9IGl0ZXItPnNlY29uZDsKKyAg
ICAgICAgRE9NT2JqZWN0Q2FjaGVEYXRhKiBkYXRhID0gaXRlci0+dmFsdWU7CiAgICAgICAgIEFT
U0VSVChkYXRhKTsKICAgICAgICAgaWYgKCghZnJhbWUgfHwgZGF0YS0+ZnJhbWUgPT0gZnJhbWUp
ICYmIGRhdGEtPnRpbWVzUmV0dXJuZWQpCiAgICAgICAgICAgICB0b1VucmVmLmFwcGVuZChkYXRh
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTU9iamVjdEhhc2hU
YWJsZU1hcC5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NT2JqZWN0SGFzaFRhYmxl
TWFwLmgKaW5kZXggMjE2Yjk0NWM0OWI5MTFlM2Y0NWVmZTVhN2U0YzEzMjk2ZjMwZWIxYi4uZWRk
ODcwMjI5Y2JkZjYzZDkxOWJhODU5Y2VlYTVkOWM0MTkzYzYxZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvRE9NT2JqZWN0SGFzaFRhYmxlTWFwLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvRE9NT2JqZWN0SGFzaFRhYmxlTWFwLmgKQEAgLTM5LDE1ICsz
OSwxNSBAQCBwdWJsaWM6CiAgICAgfkRPTU9iamVjdEhhc2hUYWJsZU1hcCgpCiAgICAgewogICAg
ICAgICBmb3IgKEhhc2hNYXA8Y29uc3QgSlNDOjpIYXNoVGFibGUqLCBKU0M6Okhhc2hUYWJsZT46
Oml0ZXJhdG9yIGl0ZXIgPSBtX21hcC5iZWdpbigpOyBpdGVyICE9IG1fbWFwLmVuZCgpOyArK2l0
ZXIpCi0gICAgICAgICAgICBpdGVyLT5zZWNvbmQuZGVsZXRlVGFibGUoKTsKKyAgICAgICAgICAg
IGl0ZXItPnZhbHVlLmRlbGV0ZVRhYmxlKCk7CiAgICAgfQogCiAgICAgY29uc3QgSlNDOjpIYXNo
VGFibGUqIGdldChjb25zdCBKU0M6Okhhc2hUYWJsZSogc3RhdGljVGFibGUpCiAgICAgewogICAg
ICAgICBIYXNoTWFwPGNvbnN0IEpTQzo6SGFzaFRhYmxlKiwgSlNDOjpIYXNoVGFibGU+OjppdGVy
YXRvciBpdGVyID0gbV9tYXAuZmluZChzdGF0aWNUYWJsZSk7CiAgICAgICAgIGlmIChpdGVyICE9
IG1fbWFwLmVuZCgpKQotICAgICAgICAgICAgcmV0dXJuICZpdGVyLT5zZWNvbmQ7Ci0gICAgICAg
IHJldHVybiAmbV9tYXAuc2V0KHN0YXRpY1RhYmxlLCBKU0M6Okhhc2hUYWJsZSgqc3RhdGljVGFi
bGUpKS5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICAgICAgcmV0dXJuICZpdGVyLT52YWx1ZTsK
KyAgICAgICAgcmV0dXJuICZtX21hcC5zZXQoc3RhdGljVGFibGUsIEpTQzo6SGFzaFRhYmxlKCpz
dGF0aWNUYWJsZSkpLml0ZXJhdG9yLT52YWx1ZTsKICAgICB9CiAKIHByaXZhdGU6CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01XcmFwcGVyV29ybGQuY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NV3JhcHBlcldvcmxkLmNwcAppbmRleCA4MTI1NDli
YzM2MTk1YTc3NWVkNmE5NGMzOTAwOWQzMjk1ZmUxMTE5Li4zMTY0MWQ1OTYyYzI1MWQ2ODRhOWM2
YzgwMTRhMmM4NDZmNzZkZjE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9ET01XcmFwcGVyV29ybGQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RP
TVdyYXBwZXJXb3JsZC5jcHAKQEAgLTM0LDcgKzM0LDcgQEAgdm9pZCBKU1N0cmluZ093bmVyOjpm
aW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCogY29udGV4dCkK
IHsKICAgICBKU1N0cmluZyoganNTdHJpbmcgPSBzdGF0aWNfY2FzdDxKU1N0cmluZyo+KGhhbmRs
ZS5nZXQoKS5hc0NlbGwoKSk7CiAgICAgU3RyaW5nSW1wbCogc3RyaW5nSW1wbCA9IHN0YXRpY19j
YXN0PFN0cmluZ0ltcGwqPihjb250ZXh0KTsKLSAgICBBU1NFUlRfVU5VU0VEKGpzU3RyaW5nLCBt
X3dvcmxkLT5tX3N0cmluZ0NhY2hlLmZpbmQoc3RyaW5nSW1wbCktPnNlY29uZC5nZXQoKSA9PSBq
c1N0cmluZyk7CisgICAgQVNTRVJUX1VOVVNFRChqc1N0cmluZywgbV93b3JsZC0+bV9zdHJpbmdD
YWNoZS5maW5kKHN0cmluZ0ltcGwpLT52YWx1ZS5nZXQoKSA9PSBqc1N0cmluZyk7CiAgICAgbV93
b3JsZC0+bV9zdHJpbmdDYWNoZS5yZW1vdmUoc3RyaW5nSW1wbCk7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCmluZGV4IGMxMWY2MDEwMzhhNjYwMDY5
YmFhNWQ5OTI2Y2MyNWQyYmVkMDQ4NmMuLjk0NzBjNDQ0MWExMjRlMmI3YjI1ODA5MTllY2UzN2Mz
OGY5N2VhOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmlu
ZGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNw
cApAQCAtMjU4LDcgKzI1OCw3IEBAIFN0cnVjdHVyZSogY2FjaGVET01TdHJ1Y3R1cmUoSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1CiB7CiAgICAgSlNE
T01TdHJ1Y3R1cmVNYXAmIHN0cnVjdHVyZXMgPSBnbG9iYWxPYmplY3QtPnN0cnVjdHVyZXMoKTsK
ICAgICBBU1NFUlQoIXN0cnVjdHVyZXMuY29udGFpbnMoY2xhc3NJbmZvKSk7Ci0gICAgcmV0dXJu
IHN0cnVjdHVyZXMuc2V0KGNsYXNzSW5mbywgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4oZ2xvYmFs
T2JqZWN0LT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKSkuaXRlcmF0b3It
PnNlY29uZC5nZXQoKTsKKyAgICByZXR1cm4gc3RydWN0dXJlcy5zZXQoY2xhc3NJbmZvLCBXcml0
ZUJhcnJpZXI8U3RydWN0dXJlPihnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2Jq
ZWN0LCBzdHJ1Y3R1cmUpKS5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7CiB9CiAKIEpTQzo6SlNPYmpl
Y3QqIHRvSlNTZXF1ZW5jZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVk
JiBsZW5ndGgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJp
bmRpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCmluZGV4
IDdlZWJjNzdkNDAxMWI4NDI4ZTFhMzdkZGI4YmM0OTQ2YjNmN2VmYTUuLmFkNGI4ZmUzYzI1MTIz
YWFkYjEzMDM4OTZlZjljMDRhOWQ5ODgxYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NQmluZGluZy5oCkBAIC0xNTAsNyArMTUwLDcgQEAgZW51bSBQYXJhbWV0ZXJEZWZhdWx0
UG9saWN5IHsKICAgICB7CiAgICAgICAgIGlmIChjbGVhcklubGluZUNhY2hlZFdyYXBwZXIod29y
bGQsIGRvbU9iamVjdCwgd3JhcHBlcikpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEFT
U0VSVCh3b3JsZC0+bV93cmFwcGVycy5maW5kKGRvbU9iamVjdCktPnNlY29uZC5nZXQoKSA9PSB3
cmFwcGVyKTsKKyAgICAgICAgQVNTRVJUKHdvcmxkLT5tX3dyYXBwZXJzLmZpbmQoZG9tT2JqZWN0
KS0+dmFsdWUuZ2V0KCkgPT0gd3JhcHBlcik7CiAgICAgICAgIHdvcmxkLT5tX3dyYXBwZXJzLnJl
bW92ZShkb21PYmplY3QpOwogICAgIH0KICAgICAKQEAgLTM0OSw3ICszNDksNyBAQCBlbnVtIFBh
cmFtZXRlckRlZmF1bHRQb2xpY3kgewogICAgICAgICBKU1N0cmluZ0NhY2hlJiBzdHJpbmdDYWNo
ZSA9IGN1cnJlbnRXb3JsZChleGVjKS0+bV9zdHJpbmdDYWNoZTsKICAgICAgICAgSlNTdHJpbmdD
YWNoZTo6aXRlcmF0b3IgaXQgPSBzdHJpbmdDYWNoZS5maW5kKHN0cmluZ0ltcGwpOwogICAgICAg
ICBpZiAoaXQgIT0gc3RyaW5nQ2FjaGUuZW5kKCkpCi0gICAgICAgICAgICByZXR1cm4gaXQtPnNl
Y29uZC5nZXQoKTsKKyAgICAgICAgICAgIHJldHVybiBpdC0+dmFsdWUuZ2V0KCk7CiAKICAgICAg
ICAgcmV0dXJuIGpzU3RyaW5nU2xvd0Nhc2UoZXhlYywgc3RyaW5nQ2FjaGUsIHN0cmluZ0ltcGwp
OwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xv
YmFsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2Jq
ZWN0LmNwcAppbmRleCAzMWZmYjU0ZDQ1ZmJkYTRhMTY3ZWFiNTQxODMxOTFmYTY4MWI4ODVjLi5l
NDA1OGI4YWU3ZGVhMGIyOTI4ZjU5NTRjZWE3MDhlZGZhMTA5ZWVhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwCkBAIC04OCwxMSArODgs
MTEgQEAgdm9pZCBKU0RPTUdsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogCiAgICAgSlNET01TdHJ1Y3R1cmVNYXA6Oml0ZXJhdG9y
IGVuZCA9IHRoaXNPYmplY3QtPnN0cnVjdHVyZXMoKS5lbmQoKTsKICAgICBmb3IgKEpTRE9NU3Ry
dWN0dXJlTWFwOjppdGVyYXRvciBpdCA9IHRoaXNPYmplY3QtPnN0cnVjdHVyZXMoKS5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kKCZpdC0+c2Vjb25kKTsK
KyAgICAgICAgdmlzaXRvci5hcHBlbmQoJml0LT52YWx1ZSk7CiAKICAgICBKU0RPTUNvbnN0cnVj
dG9yTWFwOjppdGVyYXRvciBlbmQyID0gdGhpc09iamVjdC0+Y29uc3RydWN0b3JzKCkuZW5kKCk7
CiAgICAgZm9yIChKU0RPTUNvbnN0cnVjdG9yTWFwOjppdGVyYXRvciBpdDIgPSB0aGlzT2JqZWN0
LT5jb25zdHJ1Y3RvcnMoKS5iZWdpbigpOyBpdDIgIT0gZW5kMjsgKytpdDIpCi0gICAgICAgIHZp
c2l0b3IuYXBwZW5kKCZpdDItPnNlY29uZCk7CisgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZpdDIt
PnZhbHVlKTsKIAogICAgIGlmICh0aGlzT2JqZWN0LT5tX2luamVjdGVkU2NyaXB0KQogICAgICAg
ICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9pbmplY3RlZFNjcmlwdCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuaAppbmRleCA3NGYzNWIw
Yjc5MmMxYzA2MDM3ZDFhZGVmM2IyMzEzNjU4YTkyZGFkLi40OWE5YjFhNjJlZjY3NmQxMTFkNTcx
OGRlZGI3MGVkOWY0ODNiMDUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTUdsb2JhbE9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NR2xvYmFsT2JqZWN0LmgKQEAgLTk1LDcgKzk1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICBKU0M6OkpTT2JqZWN0KiBjb25zdHJ1Y3RvciA9IENvbnN0cnVjdG9yQ2xhc3M6OmNy
ZWF0ZShleGVjLCBDb25zdHJ1Y3RvckNsYXNzOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBjb25zdF9jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSwgZ2xv
YmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSksIGNvbnN0X2Nhc3Q8SlNET01HbG9iYWxPYmpl
Y3QqPihnbG9iYWxPYmplY3QpKTsKICAgICAgICAgQVNTRVJUKCFjb25zdF9jYXN0PEpTRE9NR2xv
YmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KS0+Y29uc3RydWN0b3JzKCkuY29udGFpbnMoJkNvbnN0
cnVjdG9yQ2xhc3M6OnNfaW5mbykpOwogICAgICAgICBKU0M6OldyaXRlQmFycmllcjxKU0M6OkpT
T2JqZWN0PiB0ZW1wOwotICAgICAgICBjb25zdF9jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xv
YmFsT2JqZWN0KS0+Y29uc3RydWN0b3JzKCkuYWRkKCZDb25zdHJ1Y3RvckNsYXNzOjpzX2luZm8s
IHRlbXApLml0ZXJhdG9yLT5zZWNvbmQuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2Jq
ZWN0LCBjb25zdHJ1Y3Rvcik7CisgICAgICAgIGNvbnN0X2Nhc3Q8SlNET01HbG9iYWxPYmplY3Qq
PihnbG9iYWxPYmplY3QpLT5jb25zdHJ1Y3RvcnMoKS5hZGQoJkNvbnN0cnVjdG9yQ2xhc3M6OnNf
aW5mbywgdGVtcCkuaXRlcmF0b3ItPnZhbHVlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIGdsb2Jh
bE9iamVjdCwgY29uc3RydWN0b3IpOwogICAgICAgICByZXR1cm4gY29uc3RydWN0b3I7CiAgICAg
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9QYWdlU2NyaXB0RGVi
dWdTZXJ2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUGFnZVNjcmlwdERlYnVn
U2VydmVyLmNwcAppbmRleCA2ZGEwODY5Nzg0MTNkMTVlZTBkMGRlNTgyY2Y4YjM1OGJlMDA3MTJj
Li40YWE3Y2EzMzJhMGJiM2RkODliNGIzZjFkN2U5NjQ4NWI3YTlmZWIwIDEwMDc1NQotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHAKQEAg
LTg0LDkgKzg0LDkgQEAgdm9pZCBQYWdlU2NyaXB0RGVidWdTZXJ2ZXI6OmFkZExpc3RlbmVyKFNj
cmlwdERlYnVnTGlzdGVuZXIqIGxpc3RlbmVyLCBQYWdlKiBwYWcKIAogICAgIFBhZ2VMaXN0ZW5l
cnNNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX3BhZ2VMaXN0ZW5lcnNNYXAuYWRkKHBhZ2UsIDAp
OwogICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5z
ZWNvbmQgPSBuZXcgTGlzdGVuZXJTZXQ7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUg
PSBuZXcgTGlzdGVuZXJTZXQ7CiAKLSAgICBMaXN0ZW5lclNldCogbGlzdGVuZXJzID0gcmVzdWx0
Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgTGlzdGVuZXJTZXQqIGxpc3RlbmVycyA9IHJlc3VsdC5p
dGVyYXRvci0+dmFsdWU7CiAgICAgbGlzdGVuZXJzLT5hZGQobGlzdGVuZXIpOwogCiAgICAgcmVj
b21waWxlQWxsSlNGdW5jdGlvbnNTb29uKCk7CkBAIC0xMDIsNyArMTAyLDcgQEAgdm9pZCBQYWdl
U2NyaXB0RGVidWdTZXJ2ZXI6OnJlbW92ZUxpc3RlbmVyKFNjcmlwdERlYnVnTGlzdGVuZXIqIGxp
c3RlbmVyLCBQYWdlKgogICAgIGlmIChpdCA9PSBtX3BhZ2VMaXN0ZW5lcnNNYXAuZW5kKCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIExpc3RlbmVyU2V0KiBsaXN0ZW5lcnMgPSBpdC0+c2Vjb25k
OworICAgIExpc3RlbmVyU2V0KiBsaXN0ZW5lcnMgPSBpdC0+dmFsdWU7CiAgICAgbGlzdGVuZXJz
LT5yZW1vdmUobGlzdGVuZXIpOwogICAgIGlmIChsaXN0ZW5lcnMtPmlzRW1wdHkoKSkgewogICAg
ICAgICBtX3BhZ2VMaXN0ZW5lcnNNYXAucmVtb3ZlKGl0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENhY2hlZEZyYW1lRGF0YS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDYWNoZWRGcmFtZURhdGEuY3BwCmluZGV4IDIxMDBjNmIw
MjYxYjJkZmQyNWY3M2E0ZDdhYjM5MzlhNWUyMjg2M2QuLmQyNDI2YTIwYmEyYzcyYWE0YzIzZmI1
YjIxYjM5MGE4YWYyNmIyZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NjcmlwdENhY2hlZEZyYW1lRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmNwcApAQCAtNTMsOCArNTMsOCBAQCBTY3JpcHRDYWNo
ZWRGcmFtZURhdGE6OlNjcmlwdENhY2hlZEZyYW1lRGF0YShGcmFtZSogZnJhbWUpCiAKICAgICBT
Y3JpcHRDb250cm9sbGVyOjpTaGVsbE1hcDo6aXRlcmF0b3Igd2luZG93U2hlbGxzRW5kID0gd2lu
ZG93U2hlbGxzLmVuZCgpOwogICAgIGZvciAoU2NyaXB0Q29udHJvbGxlcjo6U2hlbGxNYXA6Oml0
ZXJhdG9yIGl0ZXIgPSB3aW5kb3dTaGVsbHMuYmVnaW4oKTsgaXRlciAhPSB3aW5kb3dTaGVsbHNF
bmQ7ICsraXRlcikgewotICAgICAgICBKU0RPTVdpbmRvdyogd2luZG93ID0gaXRlci0+c2Vjb25k
LT53aW5kb3coKTsKLSAgICAgICAgbV93aW5kb3dzLmFkZChpdGVyLT5maXJzdC5nZXQoKSwgU3Ry
b25nPEpTRE9NV2luZG93Pih3aW5kb3ctPmdsb2JhbERhdGEoKSwgd2luZG93KSk7CisgICAgICAg
IEpTRE9NV2luZG93KiB3aW5kb3cgPSBpdGVyLT52YWx1ZS0+d2luZG93KCk7CisgICAgICAgIG1f
d2luZG93cy5hZGQoaXRlci0+a2V5LmdldCgpLCBTdHJvbmc8SlNET01XaW5kb3c+KHdpbmRvdy0+
Z2xvYmFsRGF0YSgpLCB3aW5kb3cpKTsKICAgICB9CiAKICAgICBzY3JpcHRDb250cm9sbGVyLT5h
dHRhY2hEZWJ1Z2dlcigwKTsKQEAgLTc0LDggKzc0LDggQEAgdm9pZCBTY3JpcHRDYWNoZWRGcmFt
ZURhdGE6OnJlc3RvcmUoRnJhbWUqIGZyYW1lKQogCiAgICAgU2NyaXB0Q29udHJvbGxlcjo6U2hl
bGxNYXA6Oml0ZXJhdG9yIHdpbmRvd1NoZWxsc0VuZCA9IHdpbmRvd1NoZWxscy5lbmQoKTsKICAg
ICBmb3IgKFNjcmlwdENvbnRyb2xsZXI6OlNoZWxsTWFwOjppdGVyYXRvciBpdGVyID0gd2luZG93
U2hlbGxzLmJlZ2luKCk7IGl0ZXIgIT0gd2luZG93U2hlbGxzRW5kOyArK2l0ZXIpIHsKLSAgICAg
ICAgRE9NV3JhcHBlcldvcmxkKiB3b3JsZCA9IGl0ZXItPmZpcnN0LmdldCgpOwotICAgICAgICBK
U0RPTVdpbmRvd1NoZWxsKiB3aW5kb3dTaGVsbCA9IGl0ZXItPnNlY29uZC5nZXQoKTsKKyAgICAg
ICAgRE9NV3JhcHBlcldvcmxkKiB3b3JsZCA9IGl0ZXItPmtleS5nZXQoKTsKKyAgICAgICAgSlNE
T01XaW5kb3dTaGVsbCogd2luZG93U2hlbGwgPSBpdGVyLT52YWx1ZS5nZXQoKTsKIAogICAgICAg
ICBpZiAoSlNET01XaW5kb3cqIHdpbmRvdyA9IG1fd2luZG93cy5nZXQod29ybGQpLmdldCgpKQog
ICAgICAgICAgICAgd2luZG93U2hlbGwtPnNldFdpbmRvdyh3aW5kb3ctPmdsb2JhbERhdGEoKSwg
d2luZG93KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENv
bnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxl
ci5jcHAKaW5kZXggNDE0M2Y0NGI1MTRmNjllZGNkYzNiMzBlMzViYzBkNjY5ZDkyNTZkMy4uZTI3
ODJlNDY5NGJlOTViNTRkNTA2MDJmZTdjZGE4ZTYzNTg1ZmQ2OSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAKQEAgLTkzLDcgKzkzLDcgQEAg
U2NyaXB0Q29udHJvbGxlcjo6flNjcmlwdENvbnRyb2xsZXIoKQogICAgIC8vIEl0J3MgbGlrZWx5
IHRoYXQgZGVzdHJveWluZyBtX3dpbmRvd1NoZWxscyB3aWxsIGNyZWF0ZSBhIGxvdCBvZiBnYXJi
YWdlLgogICAgIGlmICghbV93aW5kb3dTaGVsbHMuaXNFbXB0eSgpKSB7CiAgICAgICAgIHdoaWxl
ICghbV93aW5kb3dTaGVsbHMuaXNFbXB0eSgpKQotICAgICAgICAgICAgZGVzdHJveVdpbmRvd1No
ZWxsKG1fd2luZG93U2hlbGxzLmJlZ2luKCktPmZpcnN0LmdldCgpKTsKKyAgICAgICAgICAgIGRl
c3Ryb3lXaW5kb3dTaGVsbChtX3dpbmRvd1NoZWxscy5iZWdpbigpLT5rZXkuZ2V0KCkpOwogICAg
ICAgICBnY0NvbnRyb2xsZXIoKS5nYXJiYWdlQ29sbGVjdFNvb24oKTsKICAgICB9CiB9CkBAIC0x
ODAsNyArMTgwLDcgQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpjbGVhcldpbmRvd1NoZWxsKGJv
b2wgZ29pbmdJbnRvUGFnZUNhY2hlKQogICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CiAKICAgICBmb3IgKFNoZWxsTWFwOjppdGVyYXRvciBpdGVyID0gbV93aW5kb3dTaGVs
bHMuYmVnaW4oKTsgaXRlciAhPSBtX3dpbmRvd1NoZWxscy5lbmQoKTsgKytpdGVyKSB7Ci0gICAg
ICAgIEpTRE9NV2luZG93U2hlbGwqIHdpbmRvd1NoZWxsID0gaXRlci0+c2Vjb25kLmdldCgpOwor
ICAgICAgICBKU0RPTVdpbmRvd1NoZWxsKiB3aW5kb3dTaGVsbCA9IGl0ZXItPnZhbHVlLmdldCgp
OwogCiAgICAgICAgIC8vIENsZWFyIHRoZSBkZWJ1Z2dlciBmcm9tIHRoZSBjdXJyZW50IHdpbmRv
dyBiZWZvcmUgc2V0dGluZyB0aGUgbmV3IHdpbmRvdy4KICAgICAgICAgYXR0YWNoRGVidWdnZXIo
d2luZG93U2hlbGwsIDApOwpAQCAtMjU2LDcgKzI1Niw3IEBAIGJvb2wgU2NyaXB0Q29udHJvbGxl
cjo6Y2FuQWNjZXNzRnJvbUN1cnJlbnRPcmlnaW4oRnJhbWUgKmZyYW1lKQogdm9pZCBTY3JpcHRD
b250cm9sbGVyOjphdHRhY2hEZWJ1Z2dlcihKU0M6OkRlYnVnZ2VyKiBkZWJ1Z2dlcikKIHsKICAg
ICBmb3IgKFNoZWxsTWFwOjppdGVyYXRvciBpdGVyID0gbV93aW5kb3dTaGVsbHMuYmVnaW4oKTsg
aXRlciAhPSBtX3dpbmRvd1NoZWxscy5lbmQoKTsgKytpdGVyKQotICAgICAgICBhdHRhY2hEZWJ1
Z2dlcihpdGVyLT5zZWNvbmQuZ2V0KCksIGRlYnVnZ2VyKTsKKyAgICAgICAgYXR0YWNoRGVidWdn
ZXIoaXRlci0+dmFsdWUuZ2V0KCksIGRlYnVnZ2VyKTsKIH0KIAogdm9pZCBTY3JpcHRDb250cm9s
bGVyOjphdHRhY2hEZWJ1Z2dlcihKU0RPTVdpbmRvd1NoZWxsKiBzaGVsbCwgSlNDOjpEZWJ1Z2dl
ciogZGVidWdnZXIpCkBAIC0yNzgsNyArMjc4LDcgQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjp1
cGRhdGVEb2N1bWVudCgpCiAKICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkp
OwogICAgIGZvciAoU2hlbGxNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3dpbmRvd1NoZWxscy5iZWdp
bigpOyBpdGVyICE9IG1fd2luZG93U2hlbGxzLmVuZCgpOyArK2l0ZXIpCi0gICAgICAgIGl0ZXIt
PnNlY29uZC0+d2luZG93KCktPnVwZGF0ZURvY3VtZW50KCk7CisgICAgICAgIGl0ZXItPnZhbHVl
LT53aW5kb3coKS0+dXBkYXRlRG9jdW1lbnQoKTsKIH0KIAogdm9pZCBTY3JpcHRDb250cm9sbGVy
Ojp1cGRhdGVTZWN1cml0eU9yaWdpbigpCkBAIC0zMTQsNyArMzE0LDcgQEAgUGFzc1JlZlB0cjxC
aW5kaW5nczo6Um9vdE9iamVjdD4gU2NyaXB0Q29udHJvbGxlcjo6Y3JlYXRlUm9vdE9iamVjdCh2
b2lkKiBuYXRpdmUKIHsKICAgICBSb290T2JqZWN0TWFwOjppdGVyYXRvciBpdCA9IG1fcm9vdE9i
amVjdHMuZmluZChuYXRpdmVIYW5kbGUpOwogICAgIGlmIChpdCAhPSBtX3Jvb3RPYmplY3RzLmVu
ZCgpKQotICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGl0LT52YWx1
ZTsKIAogICAgIFJlZlB0cjxCaW5kaW5nczo6Um9vdE9iamVjdD4gcm9vdE9iamVjdCA9IEJpbmRp
bmdzOjpSb290T2JqZWN0OjpjcmVhdGUobmF0aXZlSGFuZGxlLCBnbG9iYWxPYmplY3QocGx1Z2lu
V29ybGQoKSkpOwogCkBAIC0zOTksNyArMzk5LDcgQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpj
bGVhbnVwU2NyaXB0T2JqZWN0c0ZvclBsdWdpbih2b2lkKiBuYXRpdmVIYW5kbGUpCiAgICAgaWYg
KGl0ID09IG1fcm9vdE9iamVjdHMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGl0LT5z
ZWNvbmQtPmludmFsaWRhdGUoKTsKKyAgICBpdC0+dmFsdWUtPmludmFsaWRhdGUoKTsKICAgICBt
X3Jvb3RPYmplY3RzLnJlbW92ZShpdCk7CiB9CiAKQEAgLTQwOSw3ICs0MDksNyBAQCB2b2lkIFNj
cmlwdENvbnRyb2xsZXI6OmNsZWFyU2NyaXB0T2JqZWN0cygpCiAKICAgICBSb290T2JqZWN0TWFw
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3Jvb3RPYmplY3RzLmVuZCgpOwogICAgIGZvciAoUm9v
dE9iamVjdE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Jvb3RPYmplY3RzLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+aW52YWxpZGF0ZSgpOworICAgICAg
ICBpdC0+dmFsdWUtPmludmFsaWRhdGUoKTsKIAogICAgIG1fcm9vdE9iamVjdHMuY2xlYXIoKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxl
ci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5oCmluZGV4
IDVlMTUxYWFlMzNmODE2MGUwNmQ0Nzg1YTJkZTlkMDlkYWFhYTgyMWMuLmY2NGY4OTA5YTYwZDcz
YTFlMmNiZjUwOTBkZDlhODUwNmMyMGViNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TY3JpcHRDb250cm9sbGVyLmgKQEAgLTcyLDEyICs3MiwxMiBAQCBwdWJsaWM6CiAgICAg
SlNET01XaW5kb3dTaGVsbCogd2luZG93U2hlbGwoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCkKICAg
ICB7CiAgICAgICAgIFNoZWxsTWFwOjppdGVyYXRvciBpdGVyID0gbV93aW5kb3dTaGVsbHMuZmlu
ZCh3b3JsZCk7Ci0gICAgICAgIHJldHVybiAoaXRlciAhPSBtX3dpbmRvd1NoZWxscy5lbmQoKSkg
PyBpdGVyLT5zZWNvbmQuZ2V0KCkgOiBpbml0U2NyaXB0KHdvcmxkKTsKKyAgICAgICAgcmV0dXJu
IChpdGVyICE9IG1fd2luZG93U2hlbGxzLmVuZCgpKSA/IGl0ZXItPnZhbHVlLmdldCgpIDogaW5p
dFNjcmlwdCh3b3JsZCk7CiAgICAgfQogICAgIEpTRE9NV2luZG93U2hlbGwqIGV4aXN0aW5nV2lu
ZG93U2hlbGwoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCkgY29uc3QKICAgICB7CiAgICAgICAgIFNo
ZWxsTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbV93aW5kb3dTaGVsbHMuZmluZCh3b3JsZCk7
Ci0gICAgICAgIHJldHVybiAoaXRlciAhPSBtX3dpbmRvd1NoZWxscy5lbmQoKSkgPyBpdGVyLT5z
ZWNvbmQuZ2V0KCkgOiAwOworICAgICAgICByZXR1cm4gKGl0ZXIgIT0gbV93aW5kb3dTaGVsbHMu
ZW5kKCkpID8gaXRlci0+dmFsdWUuZ2V0KCkgOiAwOwogICAgIH0KICAgICBKU0RPTVdpbmRvdyog
Z2xvYmFsT2JqZWN0KERPTVdyYXBwZXJXb3JsZCogd29ybGQpCiAgICAgewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCmluZGV4IDEwZGVkNzAw
NzA3OTQwMjNkYzdlZDIxMjk5ZmNmYjI0ODYxMjE3ZDAuLjg5NGNkZTJmYzdiMjNjODE4MDg2Yjc0
OWQ2N2VkNmViZGZkODFjMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NjcmlwdERlYnVnU2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
Y3JpcHREZWJ1Z1NlcnZlci5jcHAKQEAgLTc2LDkgKzc2LDkgQEAgU3RyaW5nIFNjcmlwdERlYnVn
U2VydmVyOjpzZXRCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIGNvbnN0IFNjcmlw
dEJyZWEKICAgICBTb3VyY2VJZFRvQnJlYWtwb2ludHNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zb3Vy
Y2VJZFRvQnJlYWtwb2ludHMuZmluZChzb3VyY2VJRFZhbHVlKTsKICAgICBpZiAoaXQgPT0gbV9z
b3VyY2VJZFRvQnJlYWtwb2ludHMuZW5kKCkpCiAgICAgICAgIGl0ID0gbV9zb3VyY2VJZFRvQnJl
YWtwb2ludHMuc2V0KHNvdXJjZUlEVmFsdWUsIExpbmVUb0JyZWFrcG9pbnRNYXAoKSkuaXRlcmF0
b3I7Ci0gICAgaWYgKGl0LT5zZWNvbmQuY29udGFpbnMoc2NyaXB0QnJlYWtwb2ludC5saW5lTnVt
YmVyICsgMSkpCisgICAgaWYgKGl0LT52YWx1ZS5jb250YWlucyhzY3JpcHRCcmVha3BvaW50Lmxp
bmVOdW1iZXIgKyAxKSkKICAgICAgICAgcmV0dXJuICIiOwotICAgIGl0LT5zZWNvbmQuc2V0KHNj
cmlwdEJyZWFrcG9pbnQubGluZU51bWJlciArIDEsIHNjcmlwdEJyZWFrcG9pbnQpOworICAgIGl0
LT52YWx1ZS5zZXQoc2NyaXB0QnJlYWtwb2ludC5saW5lTnVtYmVyICsgMSwgc2NyaXB0QnJlYWtw
b2ludCk7CiAgICAgKmFjdHVhbExpbmVOdW1iZXIgPSBzY3JpcHRCcmVha3BvaW50LmxpbmVOdW1i
ZXI7CiAgICAgLy8gRklYTUUoV0s1MzAwMyk6IGltcGxlbWVudCBzZXR0aW5nIGJyZWFrcG9pbnRz
IGJ5IGxpbmU6Y29sdW1uLgogICAgICphY3R1YWxDb2x1bW5OdW1iZXIgPSAwOwpAQCAtMTAwLDcg
KzEwMCw3IEBAIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnJlbW92ZUJyZWFrcG9pbnQoY29uc3Qg
U3RyaW5nJiBicmVha3BvaW50SWQpCiAgICAgICAgIHJldHVybjsKICAgICBTb3VyY2VJZFRvQnJl
YWtwb2ludHNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zb3VyY2VJZFRvQnJlYWtwb2ludHMuZmluZChz
b3VyY2VJRFZhbHVlKTsKICAgICBpZiAoaXQgIT0gbV9zb3VyY2VJZFRvQnJlYWtwb2ludHMuZW5k
KCkpCi0gICAgICAgIGl0LT5zZWNvbmQucmVtb3ZlKGxpbmVOdW1iZXIgKyAxKTsKKyAgICAgICAg
aXQtPnZhbHVlLnJlbW92ZShsaW5lTnVtYmVyICsgMSk7CiB9CiAKIGJvb2wgU2NyaXB0RGVidWdT
ZXJ2ZXI6Omhhc0JyZWFrcG9pbnQoaW50cHRyX3Qgc291cmNlSUQsIGNvbnN0IFRleHRQb3NpdGlv
biYgcG9zaXRpb24pIGNvbnN0CkBAIC0xMTQsMTYgKzExNCwxNiBAQCBib29sIFNjcmlwdERlYnVn
U2VydmVyOjpoYXNCcmVha3BvaW50KGludHB0cl90IHNvdXJjZUlELCBjb25zdCBUZXh0UG9zaXRp
b24mIHBvcwogICAgIGludCBsaW5lTnVtYmVyID0gcG9zaXRpb24ubV9saW5lLm9uZUJhc2VkSW50
KCk7CiAgICAgaWYgKGxpbmVOdW1iZXIgPD0gMCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IExpbmVUb0JyZWFrcG9pbnRNYXA6OmNvbnN0X2l0ZXJhdG9yIGJyZWFrSXQgPSBpdC0+c2Vjb25k
LmZpbmQobGluZU51bWJlcik7Ci0gICAgaWYgKGJyZWFrSXQgPT0gaXQtPnNlY29uZC5lbmQoKSkK
KyAgICBMaW5lVG9CcmVha3BvaW50TWFwOjpjb25zdF9pdGVyYXRvciBicmVha0l0ID0gaXQtPnZh
bHVlLmZpbmQobGluZU51bWJlcik7CisgICAgaWYgKGJyZWFrSXQgPT0gaXQtPnZhbHVlLmVuZCgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBBbiBlbXB0eSBjb25kaXRpb24gY291
bnRzIGFzIG5vIGNvbmRpdGlvbiB3aGljaCBpcyBlcXVpdmFsZW50IHRvICJ0cnVlIi4KLSAgICBp
ZiAoYnJlYWtJdC0+c2Vjb25kLmNvbmRpdGlvbi5pc0VtcHR5KCkpCisgICAgaWYgKGJyZWFrSXQt
PnZhbHVlLmNvbmRpdGlvbi5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAg
SlNWYWx1ZSBleGNlcHRpb247Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBtX2N1cnJlbnRDYWxsRnJh
bWUtPmV2YWx1YXRlKHN0cmluZ1RvVVN0cmluZyhicmVha0l0LT5zZWNvbmQuY29uZGl0aW9uKSwg
ZXhjZXB0aW9uKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IG1fY3VycmVudENhbGxGcmFtZS0+ZXZh
bHVhdGUoc3RyaW5nVG9VU3RyaW5nKGJyZWFrSXQtPnZhbHVlLmNvbmRpdGlvbiksIGV4Y2VwdGlv
bik7CiAgICAgaWYgKGV4Y2VwdGlvbikgewogICAgICAgICAvLyBBbiBlcnJvbmVvdXMgY29uZGl0
aW9uIGNvdW50cyBhcyAiZmFsc2UiLgogICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAppbmRl
eCA3YWMxNTVjY2U2Y2MyYTRkZDlhYjdiYWM3N2QxNTA5NDhlYWZjMDAwLi43MjVlNjk4NDRmYmFm
MWRmMTY4YjMzZGJlYmVjYjkwNzRiMDI1M2UwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKQEAgLTM5Nyw4ICszOTcsOCBA
QCBwcml2YXRlOgogICAgICAgICAvLyBIYW5kbGUgZHVwbGljYXRlIHJlZmVyZW5jZXMKICAgICAg
ICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSkgewogICAgICAgICAgICAgd3JpdGUoT2JqZWN0
UmVmZXJlbmNlVGFnKTsKLSAgICAgICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQzMl90Pihh
ZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZCkgPCBtX29iamVjdFBvb2wuc2l6ZSgpKTsKLSAgICAg
ICAgICAgIHdyaXRlT2JqZWN0SW5kZXgoYWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOworICAg
ICAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludDMyX3Q+KGFkZFJlc3VsdC5pdGVyYXRvci0+
dmFsdWUpIDwgbV9vYmplY3RQb29sLnNpemUoKSk7CisgICAgICAgICAgICB3cml0ZU9iamVjdElu
ZGV4KGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICB9CiAgICAgICAgIApAQCAtNjE4LDcgKzYxOCw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgT2JqZWN0UG9vbDo6aXRlcmF0b3IgaW5kZXggPSBtX3RyYW5zZmVycmVkTWVz
c2FnZVBvcnRzLmZpbmQob2JqKTsKICAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT0gbV90cmFu
c2ZlcnJlZE1lc3NhZ2VQb3J0cy5lbmQoKSkgewogICAgICAgICAgICAgICAgICAgICB3cml0ZShN
ZXNzYWdlUG9ydFJlZmVyZW5jZVRhZyk7Ci0gICAgICAgICAgICAgICAgICAgIHdyaXRlKGluZGV4
LT5zZWNvbmQpOworICAgICAgICAgICAgICAgICAgICB3cml0ZShpbmRleC0+dmFsdWUpOwogICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNjMyLDcgKzYzMiw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgT2JqZWN0UG9vbDo6aXRlcmF0b3IgaW5kZXggPSBtX3RyYW5zZmVycmVkQXJy
YXlCdWZmZXJzLmZpbmQob2JqKTsKICAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT0gbV90cmFu
c2ZlcnJlZEFycmF5QnVmZmVycy5lbmQoKSkgewogICAgICAgICAgICAgICAgICAgICB3cml0ZShB
cnJheUJ1ZmZlclRyYW5zZmVyVGFnKTsKLSAgICAgICAgICAgICAgICAgICAgd3JpdGUoaW5kZXgt
PnNlY29uZCk7CisgICAgICAgICAgICAgICAgICAgIHdyaXRlKGluZGV4LT52YWx1ZSk7CiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICBpZiAoIXN0YXJ0T2JqZWN0SW50ZXJuYWwob2JqKSkgLy8gaGFuZGxlIGR1cGxpY2F0
ZXMKQEAgLTcyOSw3ICs3MjksNyBAQCBwcml2YXRlOgogICAgICAgICBTdHJpbmdDb25zdGFudFBv
b2w6OkFkZFJlc3VsdCBhZGRSZXN1bHQgPSBtX2NvbnN0YW50UG9vbC5hZGQoc3RyLmltcGwoKSwg
bV9jb25zdGFudFBvb2wuc2l6ZSgpKTsKICAgICAgICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRy
eSkgewogICAgICAgICAgICAgd3JpdGUoU3RyaW5nUG9vbFRhZyk7Ci0gICAgICAgICAgICB3cml0
ZVN0cmluZ0luZGV4KGFkZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKKyAgICAgICAgICAgIHdy
aXRlU3RyaW5nSW5kZXgoYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JWOC5wbQppbmRleCBhODFmYTQ2NDlkODg4MjgwYmUwYTNhMmYyMGRm
MzM5M2NlNjUzZWQwLi5kNjNhOGVlYzY4ZmI2NjgzOTg3ODdlYTZhOTk3ZjE3MjhjODQ5YTNjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JW
OC5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JW
OC5wbQpAQCAtMjc5MSw3ICsyNzkxLDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVt
cGxhdGU+ICR7Y2xhc3NOYW1lfTo6R2V0UmF3VGVtcGxhdGUoKQogICAgIFY4QmluZGluZ1Blcklz
b2xhdGVEYXRhKiBkYXRhID0gVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAg
ICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9
IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBk
YXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNv
bmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3Bl
IGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0
ZW1wbCA9IGNyZWF0ZVJhd1RlbXBsYXRlKCk7CkBAIC0yODA0LDcgKzI4MDQsNyBAQCB2ODo6UGVy
c2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gJHtjbGFzc05hbWV9OjpHZXRUZW1wbGF0ZSgp
CiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOEJpbmRpbmdQZXJJc29sYXRl
RGF0YTo6Y3VycmVudCgpOwogICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1h
cDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+dGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAg
ICBpZiAocmVzdWx0ICE9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVy
biByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2
ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0
aW9uVGVtcGxhdGU+IHRlbXBsID0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9WOC9WOEZsb2F0NjRBcnJheS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhGbG9hdDY0QXJyYXkuY3BwCmluZGV4IDdhMzY5N2JiZjYw
ZjlmZmE2YmFhMTdjYmRkZTU0MzQ4NjEyZGQyMTIuLmRiZmFjMDE3YjNjN2Q4MjIxZGRmYmVhY2I2
MTA4NDcwNGExZTBjY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9WOC9WOEZsb2F0NjRBcnJheS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4RmxvYXQ2NEFycmF5LmNwcApAQCAtOTIsNyArOTIsNyBAQCB2
ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhGbG9hdDY0QXJyYXk6OkdldFJh
d1RlbXBsYXRlKCkKICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4QmluZGlu
Z1Blcklzb2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6
OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmZp
bmQoJmluZm8pOwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5lbmQo
KSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0
LT52YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVy
c2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPSBjcmVhdGVSYXdUZW1wbGF0ZSgp
OwpAQCAtMTA1LDcgKzEwNSw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRl
PiBWOEZsb2F0NjRBcnJheTo6R2V0VGVtcGxhdGUoKQogICAgIFY4QmluZGluZ1Blcklzb2xhdGVE
YXRhKiBkYXRhID0gVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOEJp
bmRpbmdQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEt
PnRlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT50ZW1w
bGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAg
IHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3Bl
OwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0QWN0
aXZlRE9NT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9W
OC9WOFRlc3RBY3RpdmVET01PYmplY3QuY3BwCmluZGV4IDZmNWU4ZTdkYjRiYzA4ZWYxY2M3ZWYw
OWEyNjdmM2VhNjNhNDYwOGYuLjEyODYwYjUzNzIxNjQwM2FjM2M3ZDdmNjUxNzQ0NmQ0YjU1MTRi
YzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9W
OFRlc3RBY3RpdmVET01PYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9WOC9WOFRlc3RBY3RpdmVET01PYmplY3QuY3BwCkBAIC0xMzAsNyArMTMwLDcg
QEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdEFjdGl2ZURPTU9i
amVjdDo6R2V0UmF3VGVtcGxhdGUoKQogICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhKiBkYXRh
ID0gVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOEJpbmRpbmdQZXJJ
c29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnJhd1RlbXBs
YXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT5yYXdUZW1wbGF0
ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJl
dHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwog
ICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9IGNyZWF0ZVJh
d1RlbXBsYXRlKCk7CkBAIC0xNDMsNyArMTQzLDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0
aW9uVGVtcGxhdGU+IFY4VGVzdEFjdGl2ZURPTU9iamVjdDo6R2V0VGVtcGxhdGUoKQogICAgIFY4
QmluZGluZ1Blcklzb2xhdGVEYXRhKiBkYXRhID0gVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OmN1
cnJlbnQoKTsKICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJh
dG9yIHJlc3VsdCA9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJl
c3VsdCAhPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0
LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRs
ZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBs
YXRlPiB0ZW1wbCA9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVjgvVjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcAppbmRleCA0
Y2ZkNTM0NjUxMzAyZGViMzU5NTVlM2E5NDk0ZWQ4NTI1ZTE2NmM3Li5hNGM2MDgyNTViNTkxNjE5
NTA5MDZiOTFlZDA1ZGY3MzdlMzhlMGY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RDdXN0b21OYW1lZEdl
dHRlci5jcHAKQEAgLTgyLDcgKzgyLDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVt
cGxhdGU+IFY4VGVzdEN1c3RvbU5hbWVkR2V0dGVyOjpHZXRSYXdUZW1wbGF0ZSgpCiAgICAgVjhC
aW5kaW5nUGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6Y3Vy
cmVudCgpOwogICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0
b3IgcmVzdWx0ID0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAo
cmVzdWx0ICE9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiBy
ZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6
SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9u
VGVtcGxhdGU+IHRlbXBsID0gY3JlYXRlUmF3VGVtcGxhdGUoKTsKQEAgLTk1LDcgKzk1LDcgQEAg
djg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdEN1c3RvbU5hbWVkR2V0
dGVyOjpHZXRUZW1wbGF0ZSgpCiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGEqIGRhdGEgPSBW
OEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4QmluZGluZ1Blcklzb2xh
dGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+dGVtcGxhdGVNYXAo
KS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZW5k
KCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBl
cnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudENvbnN0cnVjdG9y
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVu
dENvbnN0cnVjdG9yLmNwcAppbmRleCA5MTlkMWZmY2Y2MDVhMzc5OTMxY2ViNTZiNDBlOGRlZjlm
NzEwZGJjLi5lNWNmMjVmOGFlZTk4YWFkZTA5MmU0ZWNlZDIzNmU4ODI1ZjJkN2ExIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRD
b25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Y4L1Y4VGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCkBAIC0xMTcsNyArMTE3LDcgQEAgdjg6OlBl
cnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdEV2ZW50Q29uc3RydWN0b3I6Okdl
dFJhd1RlbXBsYXRlKCkKICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4Qmlu
ZGluZ1Blcklzb2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURh
dGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgp
LmZpbmQoJmluZm8pOwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5l
bmQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVz
dWx0LT52YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6
UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPSBjcmVhdGVSYXdUZW1wbGF0
ZSgpOwpAQCAtMTMwLDcgKzEzMCw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBs
YXRlPiBWOFRlc3RFdmVudENvbnN0cnVjdG9yOjpHZXRUZW1wbGF0ZSgpCiAgICAgVjhCaW5kaW5n
UGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgp
OwogICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVz
dWx0ID0gZGF0YS0+dGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9
IGRhdGEtPnRlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29u
ZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUg
aGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRl
bXBsID0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9W
OC9WOFRlc3RFdmVudFRhcmdldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVjgvVjhUZXN0RXZlbnRUYXJnZXQuY3BwCmluZGV4IDBlODAzYzIxOGNmNTI0OWU3ODcy
YzA3ZTdkNWNkOWE1YThiZWZjNmUuLmYyMDhlMGE5MDcyZjZjN2NlM2JjNDM1OTcwMDRkMDMwN2E3
MzcxOTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9W
OC9WOFRlc3RFdmVudFRhcmdldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50VGFyZ2V0LmNwcApAQCAtMTQ1LDcgKzE0NSw3IEBAIHY4
OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3RFdmVudFRhcmdldDo6R2V0
UmF3VGVtcGxhdGUoKQogICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhKiBkYXRhID0gVjhCaW5k
aW5nUGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0
YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCku
ZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmVu
ZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1
bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQ
ZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9IGNyZWF0ZVJhd1RlbXBsYXRl
KCk7CkBAIC0xNTgsNyArMTU4LDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxh
dGU+IFY4VGVzdEV2ZW50VGFyZ2V0OjpHZXRUZW1wbGF0ZSgpCiAgICAgVjhCaW5kaW5nUGVySXNv
bGF0ZURhdGEqIGRhdGEgPSBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAg
IFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0g
ZGF0YS0+dGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEt
PnRlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxl
U2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3RJbnRlcmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4
L1Y4VGVzdEludGVyZmFjZS5jcHAKaW5kZXggZDJiYjgxZmZiZGE0NzRkZGNkN2IxZDQ1Y2RlNjcy
Y2I4MTNmOTRkZS4uYWVkYmRlOWU2MjMzNmVhMDg4NzZmOGMwODkwNDM0ZDdiNGY5NDkwZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdElu
dGVyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4
L1Y4VGVzdEludGVyZmFjZS5jcHAKQEAgLTI3Myw3ICsyNzMsNyBAQCB2ODo6UGVyc2lzdGVudDx2
ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0SW50ZXJmYWNlOjpHZXRSYXdUZW1wbGF0ZSgpCiAg
ICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOEJpbmRpbmdQZXJJc29sYXRlRGF0
YTo6Y3VycmVudCgpOwogICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6
aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAg
ICBpZiAocmVzdWx0ICE9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJl
dHVybiByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAg
ICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1
bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0gY3JlYXRlUmF3VGVtcGxhdGUoKTsKQEAgLTI4Niw3ICsy
ODYsNyBAQCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0SW50ZXJm
YWNlOjpHZXRUZW1wbGF0ZSgpCiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGEqIGRhdGEgPSBW
OEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4QmluZGluZ1Blcklzb2xh
dGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+dGVtcGxhdGVNYXAo
KS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZW5k
KCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBl
cnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RNZWRpYVF1ZXJ5TGlzdExp
c3RlbmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcAppbmRleCA5MWM5ZmFhNTEzY2YwMzJhNWY5ZTBi
NjE0NDkyYmIzZTdkNmMxNmM1Li4xMjRmNzhiZGY5NDE0NWQzZWEwMjM1MmU2MTBmYjJjYjA5YjEz
YjZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgv
VjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCkBA
IC04Miw3ICs4Miw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRl
c3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjpHZXRSYXdUZW1wbGF0CiAgICAgVjhCaW5kaW5nUGVy
SXNvbGF0ZURhdGEqIGRhdGEgPSBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwog
ICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0
ID0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9
IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNl
Y29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2Nv
cGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+
IHRlbXBsID0gY3JlYXRlUmF3VGVtcGxhdGUoKTsKQEAgLTk1LDcgKzk1LDcgQEAgdjg6OlBlcnNp
c3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI6
OkdldFRlbXBsYXRlKCkKICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4Qmlu
ZGluZ1Blcklzb2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURh
dGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmZp
bmQoJmluZm8pOwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+dGVtcGxhdGVNYXAoKS5lbmQoKSkK
LSAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52
YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lz
dGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5hbWVkQ29uc3RydWN0b3IuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5hbWVkQ29u
c3RydWN0b3IuY3BwCmluZGV4IDhlZTQwZTQwODQwYWVmOTQyNzFjNTNkMDZhYjBiMWUzMmY1NjZh
NmUuLjc1OGFmZDUwODhhNDYxNjk3NWQwYWQxNzA0YjdiNzdlODFiMzQzZGQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROYW1lZENvbnN0
cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgv
VjhUZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAKQEAgLTEyMiw3ICsxMjIsNyBAQCB2ODo6UGVyc2lz
dGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6R2V0UmF3
VGVtcGxhdGUoKQogICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhKiBkYXRhID0gVjhCaW5kaW5n
UGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6
VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZmlu
ZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmVuZCgp
KQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQt
PnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJz
aXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9IGNyZWF0ZVJhd1RlbXBsYXRlKCk7
CkBAIC0xMzUsNyArMTM1LDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+
IFY4VGVzdE5hbWVkQ29uc3RydWN0b3I6OkdldFRlbXBsYXRlKCkKICAgICBWOEJpbmRpbmdQZXJJ
c29sYXRlRGF0YSogZGF0YSA9IFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpjdXJyZW50KCk7CiAg
ICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQg
PSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwogICAgIGlmIChyZXN1bHQgIT0gZGF0
YS0+dGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOwor
ICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5k
bGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwg
PQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4
VGVzdE9iai5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhU
ZXN0T2JqLmNwcAppbmRleCA4YWFmYThmNmUyMDhhNTU5MzM1YmYyM2I3Y2FkMzcyZTA2MzFhYmQ5
Li5mNTgwODQ0ZWRiOTNhNzU3N2ExMjc0MjhlYWY2Y2RjZTI2ODE0YTliIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcApA
QCAtMjEzMSw3ICsyMTMxLDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+
IFY4VGVzdE9iajo6R2V0UmF3VGVtcGxhdGUoKQogICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRh
KiBkYXRhID0gVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOEJpbmRp
bmdQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnJh
d1RlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT5yYXdU
ZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAg
ICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNj
b3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9IGNy
ZWF0ZVJhd1RlbXBsYXRlKCk7CkBAIC0yMTQ0LDcgKzIxNDQsNyBAQCB2ODo6UGVyc2lzdGVudDx2
ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0T2JqOjpHZXRUZW1wbGF0ZSgpCiAgICAgVjhCaW5k
aW5nUGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6Y3VycmVu
dCgpOwogICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3Ig
cmVzdWx0ID0gZGF0YS0+dGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0
ICE9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNl
Y29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2Nv
cGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+
IHRlbXBsID0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9WOC9WOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZS5jcHAKaW5kZXggMzQxMTdmYWVjOTExOWU4NGIzYWQ4NmM1NzcwYzU3Yjg3YTNk
ZjM3OC4uM2QyZmQ2MTc4MTkyYzZlZmIyZGQwYzQ1ZWE2MGY5OTc4MGEzNzI0MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAK
QEAgLTI0OCw3ICsyNDgsNyBAQCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4g
VjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpHZXRSYQogICAgIFY4QmluZGlu
Z1Blcklzb2xhdGVEYXRhKiBkYXRhID0gVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OmN1cnJlbnQo
KTsKICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJl
c3VsdCA9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3Vs
dCAhPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0
LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRs
ZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBs
YXRlPiB0ZW1wbCA9IGNyZWF0ZVJhd1RlbXBsYXRlKCk7CkBAIC0yNjEsNyArMjYxLDcgQEAgdjg6
OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZTo6R2V0VGUKICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YSogZGF0YSA9
IFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhCaW5kaW5nUGVySXNv
bGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT50ZW1wbGF0ZU1h
cCgpLmZpbmQoJmluZm8pOwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+dGVtcGxhdGVNYXAoKS5l
bmQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVz
dWx0LT52YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6
UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvTlBWOE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9OUFY4T2JqZWN0LmNwcAppbmRleCA1YzMzNTkzNzcwNWVmMjNjODZkNjY3MGJi
MWNiOTM4N2FmMzY4MTI0Li41NjgwNzMwYjQyZDA4YjVjMzdiYTcxODk0NDA2YjJlMGI5YTkyYWU1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9OUFY4T2JqZWN0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9OUFY4T2JqZWN0LmNwcApAQCAtNzgsNyAr
NzgsNyBAQCBzdGF0aWMgdm9pZCBmcmVlVjhOUE9iamVjdChOUE9iamVjdCogbnBPYmplY3QpCiAg
ICAgaWYgKGludCB2OE9iamVjdEhhc2ggPSB2OE5wT2JqZWN0LT52OE9iamVjdC0+R2V0SWRlbnRp
dHlIYXNoKCkpIHsKICAgICAgICAgVjhOUE9iamVjdE1hcDo6aXRlcmF0b3IgaXRlciA9IHN0YXRp
Y1Y4TlBPYmplY3RNYXAoKS0+ZmluZCh2OE9iamVjdEhhc2gpOwogICAgICAgICBpZiAoaXRlciAh
PSBzdGF0aWNWOE5QT2JqZWN0TWFwKCktPmVuZCgpKSB7Ci0gICAgICAgICAgICBWOE5QT2JqZWN0
VmVjdG9yJiBvYmplY3RzID0gaXRlci0+c2Vjb25kOworICAgICAgICAgICAgVjhOUE9iamVjdFZl
Y3RvciYgb2JqZWN0cyA9IGl0ZXItPnZhbHVlOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaW5k
ZXggPSAwOyBpbmRleCA8IG9iamVjdHMuc2l6ZSgpOyArK2luZGV4KSB7CiAgICAgICAgICAgICAg
ICAgaWYgKG9iamVjdHMuYXQoaW5kZXgpID09IHY4TnBPYmplY3QpIHsKICAgICAgICAgICAgICAg
ICAgICAgb2JqZWN0cy5yZW1vdmUoaW5kZXgpOwpAQCAtMTUzLDcgKzE1Myw3IEBAIE5QT2JqZWN0
KiBucENyZWF0ZVY4U2NyaXB0T2JqZWN0KE5QUCBucHAsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
b2JqZWN0LCBET01XaW5kCiAgICAgQVNTRVJUKHY4T2JqZWN0SGFzaCk7CiAgICAgVjhOUE9iamVj
dE1hcDo6aXRlcmF0b3IgaXRlciA9IHN0YXRpY1Y4TlBPYmplY3RNYXAoKS0+ZmluZCh2OE9iamVj
dEhhc2gpOwogICAgIGlmIChpdGVyICE9IHN0YXRpY1Y4TlBPYmplY3RNYXAoKS0+ZW5kKCkpIHsK
LSAgICAgICAgVjhOUE9iamVjdFZlY3RvciYgb2JqZWN0cyA9IGl0ZXItPnNlY29uZDsKKyAgICAg
ICAgVjhOUE9iamVjdFZlY3RvciYgb2JqZWN0cyA9IGl0ZXItPnZhbHVlOwogICAgICAgICBmb3Ig
KHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgb2JqZWN0cy5zaXplKCk7ICsraW5kZXgpIHsKICAg
ICAgICAgICAgIFY4TlBPYmplY3QqIHY4bnBPYmplY3QgPSBvYmplY3RzLmF0KGluZGV4KTsKICAg
ICAgICAgICAgIGlmICh2OG5wT2JqZWN0LT5yb290T2JqZWN0ID09IHJvb3QpIHsKQEAgLTE3Myw3
ICsxNzMsNyBAQCBOUE9iamVjdCogbnBDcmVhdGVWOFNjcmlwdE9iamVjdChOUFAgbnBwLCB2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCwgRE9NV2luZAogI2VuZGlmCiAgICAgdjhucE9iamVj
dC0+cm9vdE9iamVjdCA9IHJvb3Q7CiAKLSAgICBpdGVyLT5zZWNvbmQuYXBwZW5kKHY4bnBPYmpl
Y3QpOworICAgIGl0ZXItPnZhbHVlLmFwcGVuZCh2OG5wT2JqZWN0KTsKIAogICAgIHJldHVybiBy
ZWludGVycHJldF9jYXN0PE5QT2JqZWN0Kj4odjhucE9iamVjdCk7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwCmluZGV4IDhkZTk1NTM3YWQ3
ZjJjZmQxYWY2NGY4MmU5ZGFkZmE4ZDI3ZGM5ZGMuLjc3N2Y3OTc3N2E1MDUxYzhhYzBmNTI4YTI1
MGFjYTRmMWFmMTc2MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Nj
cmlwdENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Njcmlw
dENvbnRyb2xsZXIuY3BwCkBAIC0xMjEsOCArMTIxLDggQEAgdm9pZCBTY3JpcHRDb250cm9sbGVy
OjpjbGVhclNjcmlwdE9iamVjdHMoKQogewogICAgIFBsdWdpbk9iamVjdE1hcDo6aXRlcmF0b3Ig
aXQgPSBtX3BsdWdpbk9iamVjdHMuYmVnaW4oKTsKICAgICBmb3IgKDsgaXQgIT0gbV9wbHVnaW5P
YmplY3RzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIF9OUE5fVW5yZWdpc3Rlck9iamVjdChpdC0+
c2Vjb25kKTsKLSAgICAgICAgX05QTl9SZWxlYXNlT2JqZWN0KGl0LT5zZWNvbmQpOworICAgICAg
ICBfTlBOX1VucmVnaXN0ZXJPYmplY3QoaXQtPnZhbHVlKTsKKyAgICAgICAgX05QTl9SZWxlYXNl
T2JqZWN0KGl0LT52YWx1ZSk7CiAgICAgfQogICAgIG1fcGx1Z2luT2JqZWN0cy5jbGVhcigpOwog
CkBAIC0zMjMsOCArMzIzLDggQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpjbGVhbnVwU2NyaXB0
T2JqZWN0c0ZvclBsdWdpbihXaWRnZXQqIG5hdGl2ZUhhbmRsZSkKICAgICBQbHVnaW5PYmplY3RN
YXA6Oml0ZXJhdG9yIGl0ID0gbV9wbHVnaW5PYmplY3RzLmZpbmQobmF0aXZlSGFuZGxlKTsKICAg
ICBpZiAoaXQgPT0gbV9wbHVnaW5PYmplY3RzLmVuZCgpKQogICAgICAgICByZXR1cm47Ci0gICAg
X05QTl9VbnJlZ2lzdGVyT2JqZWN0KGl0LT5zZWNvbmQpOwotICAgIF9OUE5fUmVsZWFzZU9iamVj
dChpdC0+c2Vjb25kKTsKKyAgICBfTlBOX1VucmVnaXN0ZXJPYmplY3QoaXQtPnZhbHVlKTsKKyAg
ICBfTlBOX1JlbGVhc2VPYmplY3QoaXQtPnZhbHVlKTsKICAgICBtX3BsdWdpbk9iamVjdHMucmVt
b3ZlKGl0KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2Vy
aWFsaXplZFNjcmlwdFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Nlcmlh
bGl6ZWRTY3JpcHRWYWx1ZS5jcHAKaW5kZXggZjYwZDM2NmE4N2Y2YTFkMTJiNTk0NDg5OWY3OTY2
MjEzNTIwZWExYS4uMDI5MjM4MTBkZTc0NjdiZThkMzM5NjhhOThlZmIyZTExMDAwNThmMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFs
dWUuY3BwCkBAIC0xMDYsNyArMTA2LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgdHlwZW5h
bWUgSGFuZGxlVG9UOjppdGVyYXRvciByZXN1bHQgPSBtX21hcC5maW5kKCpoYW5kbGUpOwogICAg
ICAgICBpZiAocmVzdWx0ICE9IG1fbWFwLmVuZCgpKSB7Ci0gICAgICAgICAgICAqdmFsdWVPdXQg
PSByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgICAgICp2YWx1ZU91dCA9IHJlc3VsdC0+dmFsdWU7
CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFs
c2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTU1hcC5oIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01NYXAuaAppbmRleCAxMzYzYTc5NzUwNDg2
ZWE1OTFjZTAxOTk4NjliM2Q3NDllMjE5ZWI1Li5jOTBjYjE0MTMxNTVmM2IyYjg3NWY0NTMxYWJh
NjlhYmFhMzk3MjJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERP
TU1hcC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NTWFwLmgKQEAgLTEw
OCw3ICsxMDgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgcmVtb3ZlSWZQ
cmVzZW50KEtleVR5cGUqIGtleSwgdjg6OlBlcnNpc3RlbnQ8VmFsdWVUeXBlPiB2YWx1ZSkKICAg
ICAgICAgewogICAgICAgICAgICAgdHlwZW5hbWUgSGFzaE1hcDxLZXlUeXBlKiwgVmFsdWVUeXBl
Kj46Oml0ZXJhdG9yIGl0ID0gbV9tYXAuZmluZChrZXkpOwotICAgICAgICAgICAgaWYgKGl0ID09
IG1fbWFwLmVuZCgpIHx8IGl0LT5zZWNvbmQgIT0gKnZhbHVlKQorICAgICAgICAgICAgaWYgKGl0
ID09IG1fbWFwLmVuZCgpIHx8IGl0LT52YWx1ZSAhPSAqdmFsdWUpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICBtX21hcC5yZW1vdmUoaXQpOwpAQCAtMTI4LDcg
KzEyOCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIHZpc2l0b3ItPnN0YXJ0
TWFwKCk7CiAgICAgICAgICAgICB0eXBlbmFtZSBIYXNoTWFwPEtleVR5cGUqLCBWYWx1ZVR5cGUq
Pjo6aXRlcmF0b3IgaXQgPSBtX21hcC5iZWdpbigpOwogICAgICAgICAgICAgZm9yICg7IGl0ICE9
IG1fbWFwLmVuZCgpOyArK2l0KQotICAgICAgICAgICAgICAgIHZpc2l0b3ItPnZpc2l0RE9NV3Jh
cHBlcihzdG9yZSwgaXQtPmZpcnN0LCB2ODo6UGVyc2lzdGVudDxWYWx1ZVR5cGU+KGl0LT5zZWNv
bmQpKTsKKyAgICAgICAgICAgICAgICB2aXNpdG9yLT52aXNpdERPTVdyYXBwZXIoc3RvcmUsIGl0
LT5rZXksIHY4OjpQZXJzaXN0ZW50PFZhbHVlVHlwZT4oaXQtPnZhbHVlKSk7CiAgICAgICAgICAg
ICB2aXNpdG9yLT5lbmRNYXAoKTsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwuY3BwCmluZGV4IGM0YzYwNTQwYWI5YjY4YTY5M2Nk
YjZmYzFlNzdmZjA5NGM0MzQxYTUuLjE3YjVkNmM5ZmE1NDBkYjBjMjUxNTQzMzM4ZWE3M2ZjNWZh
Y2I1NWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV2luZG93
U2hlbGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hl
bGwuY3BwCkBAIC0xODYsNyArMTg2LDcgQEAgdm9pZCBWOERPTVdpbmRvd1NoZWxsOjpkaXNwb3Nl
Q29udGV4dEhhbmRsZXMoKQogCiAgICAgV3JhcHBlckJvaWxlcnBsYXRlTWFwOjppdGVyYXRvciBp
dCA9IG1fd3JhcHBlckJvaWxlcnBsYXRlcy5iZWdpbigpOwogICAgIGZvciAoOyBpdCAhPSBtX3dy
YXBwZXJCb2lsZXJwbGF0ZXMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgdjg6OlBlcnNpc3RlbnQ8
djg6Ok9iamVjdD4gd3JhcHBlciA9IGl0LT5zZWNvbmQ7CisgICAgICAgIHY4OjpQZXJzaXN0ZW50
PHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBpdC0+dmFsdWU7CiAgICAgICAgIHdyYXBwZXIuRGlzcG9z
ZSgpOwogICAgICAgICB3cmFwcGVyLkNsZWFyKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xsZXIuY3BwCmluZGV4IDFiODEyMzRlZDA0ZWIyMTZjZDcy
NmE0YzM3M2JhOGQzNTI5NmUzMmMuLjViNjEyMGQwODAzZWJlZjAxMmI1NjA2NmI3OWM5NTRhOGMy
YmZlZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4R0NDb250cm9s
bGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEdDQ29udHJvbGxlci5j
cHAKQEAgLTkzLDkgKzkzLDkgQEAgc3RhdGljIHZvaWQgZW51bWVyYXRlR2xvYmFsSGFuZGxlcygp
CiB7CiAgICAgR2xvYmFsSGFuZGxlTWFwJiBnbG9iYWxIYW5kbGVNYXAgPSBjdXJyZW50R2xvYmFs
SGFuZGxlTWFwKCk7CiAgICAgZm9yIChHbG9iYWxIYW5kbGVNYXA6Oml0ZXJhdG9yIGl0ID0gZ2xv
YmFsSGFuZGxlTWFwLmJlZ2luKCksIGVuZCA9IGdsb2JhbEhhbmRsZU1hcC5lbmQoKTsgaXQgIT0g
ZW5kOyArK2l0KSB7Ci0gICAgICAgIEdsb2JhbEhhbmRsZUluZm8qIGluZm8gPSBpdC0+c2Vjb25k
OworICAgICAgICBHbG9iYWxIYW5kbGVJbmZvKiBpbmZvID0gaXQtPnZhbHVlOwogICAgICAgICBV
TlVTRURfUEFSQU0oaW5mbyk7Ci0gICAgICAgIHY4OjpWYWx1ZSogaGFuZGxlID0gaXQtPmZpcnN0
OworICAgICAgICB2ODo6VmFsdWUqIGhhbmRsZSA9IGl0LT5rZXk7CiAgICAgICAgIFVOVVNFRF9Q
QVJBTShoYW5kbGUpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4UHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5j
cHAKaW5kZXggNDI2NjMzNDhhMmI2ZmJhYWFkNTY4NTVhNDliODQ4MTliODIzNzAxYS4uMDczZTU0
MDhmYmFhNTc5MTE2M2UyMGVjMjA0ZWUwNmU0Zjk2NzAwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvVjhQcm94eS5jcHAKQEAgLTIyOSw3ICsyMjksNyBAQCB2b2lkIFY4UHJveHk6OmV2YWx1
YXRlSW5Jc29sYXRlZFdvcmxkKGludCB3b3JsZElELCBjb25zdCBWZWN0b3I8U2NyaXB0U291cmNl
Q29kZQogICAgIGlmICh3b3JsZElEID4gMCkgewogICAgICAgICBJc29sYXRlZFdvcmxkTWFwOjpp
dGVyYXRvciBpdGVyID0gbV9pc29sYXRlZFdvcmxkcy5maW5kKHdvcmxkSUQpOwogICAgICAgICBp
ZiAoaXRlciAhPSBtX2lzb2xhdGVkV29ybGRzLmVuZCgpKSB7Ci0gICAgICAgICAgICBpc29sYXRl
ZENvbnRleHQgPSBpdGVyLT5zZWNvbmQ7CisgICAgICAgICAgICBpc29sYXRlZENvbnRleHQgPSBp
dGVyLT52YWx1ZTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlzb2xhdGVkQ29udGV4
dCA9IG5ldyBWOElzb2xhdGVkQ29udGV4dCh0aGlzLCBleHRlbnNpb25Hcm91cCwgd29ybGRJRCk7
CiAgICAgICAgICAgICBpZiAoaXNvbGF0ZWRDb250ZXh0LT5jb250ZXh0KCkuSXNFbXB0eSgpKSB7
CkBAIC0yNTAsNyArMjUwLDcgQEAgdm9pZCBWOFByb3h5OjpldmFsdWF0ZUluSXNvbGF0ZWRXb3Js
ZChpbnQgd29ybGRJRCwgY29uc3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGUKICAgICAgICAgCiAg
ICAgICAgIElzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbk1hcDo6aXRlcmF0b3Igc2VjdXJpdHlP
cmlnaW5JdGVyID0gbV9pc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW5zLmZpbmQod29ybGRJRCk7
CiAgICAgICAgIGlmIChzZWN1cml0eU9yaWdpbkl0ZXIgIT0gbV9pc29sYXRlZFdvcmxkU2VjdXJp
dHlPcmlnaW5zLmVuZCgpKQotICAgICAgICAgICAgaXNvbGF0ZWRDb250ZXh0LT5zZXRTZWN1cml0
eU9yaWdpbihzZWN1cml0eU9yaWdpbkl0ZXItPnNlY29uZCk7CisgICAgICAgICAgICBpc29sYXRl
ZENvbnRleHQtPnNldFNlY3VyaXR5T3JpZ2luKHNlY3VyaXR5T3JpZ2luSXRlci0+dmFsdWUpOwog
ICAgIH0gZWxzZSB7CiAgICAgICAgIGlzb2xhdGVkQ29udGV4dCA9IG5ldyBWOElzb2xhdGVkQ29u
dGV4dCh0aGlzLCBleHRlbnNpb25Hcm91cCwgd29ybGRJRCk7CiAgICAgICAgIGlmIChpc29sYXRl
ZENvbnRleHQtPmNvbnRleHQoKS5Jc0VtcHR5KCkpIHsKQEAgLTI3NSw3ICsyNzUsNyBAQCB2b2lk
IFY4UHJveHk6OnNldElzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbihpbnQgd29ybGRJRCwgUGFz
c1JlZlB0cjxTZWN1cml0eU9yaQogICAgIG1faXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2lucy5z
ZXQod29ybGRJRCwgc2VjdXJpdHlPcmlnaW4pOwogICAgIElzb2xhdGVkV29ybGRNYXA6Oml0ZXJh
dG9yIGl0ZXIgPSBtX2lzb2xhdGVkV29ybGRzLmZpbmQod29ybGRJRCk7CiAgICAgaWYgKGl0ZXIg
IT0gbV9pc29sYXRlZFdvcmxkcy5lbmQoKSkKLSAgICAgICAgaXRlci0+c2Vjb25kLT5zZXRTZWN1
cml0eU9yaWdpbihzZWN1cml0eU9yaWdpbik7CisgICAgICAgIGl0ZXItPnZhbHVlLT5zZXRTZWN1
cml0eU9yaWdpbihzZWN1cml0eU9yaWdpbik7CiB9CiAKIGJvb2wgVjhQcm94eTo6c2V0SW5qZWN0
ZWRTY3JpcHRDb250ZXh0RGVidWdJZCh2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiB0YXJnZXRDb250
ZXh0KQpAQCAtNTQwLDcgKzU0MCw3IEBAIHZvaWQgVjhQcm94eTo6cmVzZXRJc29sYXRlZFdvcmxk
cygpCiB7CiAgICAgZm9yIChJc29sYXRlZFdvcmxkTWFwOjppdGVyYXRvciBpdGVyID0gbV9pc29s
YXRlZFdvcmxkcy5iZWdpbigpOwogICAgICAgICAgaXRlciAhPSBtX2lzb2xhdGVkV29ybGRzLmVu
ZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgaXRlci0+c2Vjb25kLT5kZXN0cm95KCk7CisgICAgICAg
IGl0ZXItPnZhbHVlLT5kZXN0cm95KCk7CiAgICAgfQogICAgIG1faXNvbGF0ZWRXb3JsZHMuY2xl
YXIoKTsKICAgICBtX2lzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbnMuY2xlYXIoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L25wcnVudGltZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9ucHJ1bnRpbWUuY3BwCmluZGV4IDhkODBjZjkzMzE4NmU4NTQ3
YzE4NTE4M2Q3ZTc0ODRiY2UxZTg0YTMuLjJiMDM2N2NkMTVmMmE0ZmIxMTNkNGNjMGJmNzY3ZWM4
Y2YxYjBhNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L25wcnVudGlt
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvbnBydW50aW1lLmNwcApAQCAt
MTY0LDcgKzE2NCw3IEBAIE5QSWRlbnRpZmllciBfTlBOX0dldFN0cmluZ0lkZW50aWZpZXIoY29u
c3QgTlBVVEY4KiBuYW1lKQogICAgICAgICBTdHJpbmdJZGVudGlmaWVyTWFwKiBpZGVudE1hcCA9
IGdldFN0cmluZ0lkZW50aWZpZXJNYXAoKTsKICAgICAgICAgU3RyaW5nSWRlbnRpZmllck1hcDo6
aXRlcmF0b3IgaXRlciA9IGlkZW50TWFwLT5maW5kKGtleSk7CiAgICAgICAgIGlmIChpdGVyICE9
IGlkZW50TWFwLT5lbmQoKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxOUElkZW50
aWZpZXI+KGl0ZXItPnNlY29uZCk7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TlBJ
ZGVudGlmaWVyPihpdGVyLT52YWx1ZSk7CiAKICAgICAgICAgc2l6ZV90IG5hbWVMZW4gPSBrZXku
bV9sZW5ndGg7CiAKQEAgLTIxMSw3ICsyMTEsNyBAQCBOUElkZW50aWZpZXIgX05QTl9HZXRJbnRJ
ZGVudGlmaWVyKGludDMyX3QgaW50SWQpCiAgICAgSW50SWRlbnRpZmllck1hcCogaWRlbnRNYXAg
PSBnZXRJbnRJZGVudGlmaWVyTWFwKCk7CiAgICAgSW50SWRlbnRpZmllck1hcDo6aXRlcmF0b3Ig
aXRlciA9IGlkZW50TWFwLT5maW5kKGludElkKTsKICAgICBpZiAoaXRlciAhPSBpZGVudE1hcC0+
ZW5kKCkpCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxOUElkZW50aWZpZXI+KGl0ZXItPnNl
Y29uZCk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxOUElkZW50aWZpZXI+KGl0ZXItPnZh
bHVlKTsKIAogICAgIC8vIFdlIG5ldmVyIHJlbGVhc2UgaWRlbnRpZmllcnMsIHNvIHRoaXMgZGlj
dGlvbmFyeSB3aWxsIGdyb3cuCiAgICAgUHJpdmF0ZUlkZW50aWZpZXIqIGlkZW50aWZpZXIgPSBy
ZWludGVycHJldF9jYXN0PFByaXZhdGVJZGVudGlmaWVyKj4obWFsbG9jKHNpemVvZihQcml2YXRl
SWRlbnRpZmllcikpKTsKQEAgLTM4OCw3ICszODgsNyBAQCB2b2lkIF9OUE5fUmVnaXN0ZXJPYmpl
Y3QoTlBPYmplY3QqIG5wT2JqZWN0LCBOUE9iamVjdCogb3duZXIpCiAgICAgICAgIE5QT2JqZWN0
TWFwOjppdGVyYXRvciBvd25lckVudHJ5ID0gbGl2ZU9iamVjdE1hcCgpLmZpbmQob3duZXIpOwog
ICAgICAgICBOUE9iamVjdCogcGFyZW50ID0gMDsKICAgICAgICAgaWYgKGxpdmVPYmplY3RNYXAo
KS5lbmQoKSAhPSBvd25lckVudHJ5KQotICAgICAgICAgICAgcGFyZW50ID0gb3duZXJFbnRyeS0+
c2Vjb25kOworICAgICAgICAgICAgcGFyZW50ID0gb3duZXJFbnRyeS0+dmFsdWU7CiAKICAgICAg
ICAgaWYgKHBhcmVudCkKICAgICAgICAgICAgIG93bmVyID0gcGFyZW50OwpAQCAtNDA4LDcgKzQw
OCw3IEBAIHZvaWQgX05QTl9VbnJlZ2lzdGVyT2JqZWN0KE5QT2JqZWN0KiBucE9iamVjdCkKIAog
ICAgIE5QT2JqZWN0KiBvd25lciA9IDA7CiAgICAgaWYgKGxpdmVPYmplY3RNYXAoKS5maW5kKG5w
T2JqZWN0KSAhPSBsaXZlT2JqZWN0TWFwKCkuZW5kKCkpCi0gICAgICAgIG93bmVyID0gbGl2ZU9i
amVjdE1hcCgpLmZpbmQobnBPYmplY3QpLT5zZWNvbmQ7CisgICAgICAgIG93bmVyID0gbGl2ZU9i
amVjdE1hcCgpLmZpbmQobnBPYmplY3QpLT52YWx1ZTsKIAogICAgIGlmICghb3duZXIpIHsKICAg
ICAgICAgLy8gVW5yZWdpc3RlcmluZyBhIG93bmVyIG9iamVjdDsgYWxzbyB1bnJlZ2lzdGVyIGl0
J3MgZGVzY2VuZGFudHMuCkBAIC00NDMsNyArNDQzLDcgQEAgdm9pZCBfTlBOX1VucmVnaXN0ZXJP
YmplY3QoTlBPYmplY3QqIG5wT2JqZWN0KQogICAgIH0gZWxzZSB7CiAgICAgICAgIE5QUm9vdE9i
amVjdE1hcDo6aXRlcmF0b3Igb3duZXJFbnRyeSA9IHJvb3RPYmplY3RNYXAoKS5maW5kKG93bmVy
KTsKICAgICAgICAgaWYgKG93bmVyRW50cnkgIT0gcm9vdE9iamVjdE1hcCgpLmVuZCgpKSB7Ci0g
ICAgICAgICAgICBOUE9iamVjdFNldCogbGlzdCA9IG93bmVyRW50cnktPnNlY29uZDsKKyAgICAg
ICAgICAgIE5QT2JqZWN0U2V0KiBsaXN0ID0gb3duZXJFbnRyeS0+dmFsdWU7CiAgICAgICAgICAg
ICBBU1NFUlQobGlzdC0+ZmluZChucE9iamVjdCkgIT0gbGlzdC0+ZW5kKCkpOwogICAgICAgICAg
ICAgbGlzdC0+cmVtb3ZlKG5wT2JqZWN0KTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYnJpZGdlL0lkZW50aWZpZXJSZXAuY3BwIGIvU291cmNlL1dlYkNvcmUvYnJpZGdl
L0lkZW50aWZpZXJSZXAuY3BwCmluZGV4IDJhY2YxNDE1M2QxZGI5ZTEyYjcyNTU4YTUzODhkOTg2
ZmY4YTVlODUuLjFkZjU4YTllNDE1ODFjM2JlYzMxNTFmZjIxYmNlYWEyNDcyZGMxZjUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9JZGVudGlmaWVyUmVwLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9icmlkZ2UvSWRlbnRpZmllclJlcC5jcHAKQEAgLTY5LDEzICs2OSwxMyBAQCBJ
ZGVudGlmaWVyUmVwKiBJZGVudGlmaWVyUmVwOjpnZXQoaW50IGludElEKQogICAgIAogICAgIElu
dElkZW50aWZpZXJNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBpbnRJZGVudGlmaWVyTWFwKCkuYWRk
KGludElELCAwKTsKICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgQVNTRVJU
KCFyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7Ci0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vj
b25kID0gbmV3IElkZW50aWZpZXJSZXAoaW50SUQpOworICAgICAgICBBU1NFUlQoIXJlc3VsdC5p
dGVyYXRvci0+dmFsdWUpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gbmV3IElk
ZW50aWZpZXJSZXAoaW50SUQpOwogICAgICAgICAKLSAgICAgICAgaWRlbnRpZmllclNldCgpLmFk
ZChyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7CisgICAgICAgIGlkZW50aWZpZXJTZXQoKS5hZGQo
cmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CiAgICAgfQogICAgIAotICAgIHJldHVybiByZXN1bHQu
aXRlcmF0b3ItPnNlY29uZDsKKyAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIH0K
IAogdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxTdHJpbmdJbXBsPiwgSWRlbnRpZmllclJlcCo+IFN0
cmluZ0lkZW50aWZpZXJNYXA7CkBAIC05NSwxMyArOTUsMTMgQEAgSWRlbnRpZmllclJlcCogSWRl
bnRpZmllclJlcDo6Z2V0KGNvbnN0IGNoYXIqIG5hbWUpCiAgICAgVVN0cmluZyBzdHJpbmcgPSBz
dHJpbmdUb1VTdHJpbmcoU3RyaW5nOjpmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayhuYW1lLCBz
dHJsZW4obmFtZSkpKTsKICAgICBTdHJpbmdJZGVudGlmaWVyTWFwOjpBZGRSZXN1bHQgcmVzdWx0
ID0gc3RyaW5nSWRlbnRpZmllck1hcCgpLmFkZChzdHJpbmcuaW1wbCgpLCAwKTsKICAgICBpZiAo
cmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgQVNTRVJUKCFyZXN1bHQuaXRlcmF0b3ItPnNl
Y29uZCk7Ci0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gbmV3IElkZW50aWZpZXJS
ZXAobmFtZSk7CisgICAgICAgIEFTU0VSVCghcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CisgICAg
ICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBuZXcgSWRlbnRpZmllclJlcChuYW1lKTsKICAg
ICAgICAgCi0gICAgICAgIGlkZW50aWZpZXJTZXQoKS5hZGQocmVzdWx0Lml0ZXJhdG9yLT5zZWNv
bmQpOworICAgICAgICBpZGVudGlmaWVyU2V0KCkuYWRkKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUp
OwogICAgIH0KICAgICAKLSAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAg
cmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiB9CiAKIGJvb2wgSWRlbnRpZmllclJlcDo6
aXNWYWxpZChJZGVudGlmaWVyUmVwKiBpZGVudGlmaWVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYnJpZGdlL05QX2pzb2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9OUF9q
c29iamVjdC5jcHAKaW5kZXggODM5ODZhZjU4M2M1OTA0MmYxYmY3Nzc1MTIwN2E4MDM1M2FkMTNl
YS4uMzQ2ODczZDY1MzI5NGYzYTBlMjIwYmIwZjM2ZTBiZDhkMDg3NGU1MCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYnJpZGdlL05QX2pzb2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9icmlkZ2UvTlBfanNvYmplY3QuY3BwCkBAIC02Niw4ICs2Niw4IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIGl0ZXIgPSBtX21hcC5hZGQocm9vdE9iamVjdCwgSlNUb05QT2JqZWN0TWFwKCkpLml0
ZXJhdG9yOwogICAgICAgICB9CiAKLSAgICAgICAgQVNTRVJUKGl0ZXItPnNlY29uZC5maW5kKGpz
T2JqZWN0KSA9PSBpdGVyLT5zZWNvbmQuZW5kKCkpOwotICAgICAgICBpdGVyLT5zZWNvbmQuYWRk
KGpzT2JqZWN0LCBucE9iamVjdCk7CisgICAgICAgIEFTU0VSVChpdGVyLT52YWx1ZS5maW5kKGpz
T2JqZWN0KSA9PSBpdGVyLT52YWx1ZS5lbmQoKSk7CisgICAgICAgIGl0ZXItPnZhbHVlLmFkZChq
c09iamVjdCwgbnBPYmplY3QpOwogICAgIH0KIAogICAgIHZvaWQgcmVtb3ZlKFJvb3RPYmplY3Qq
IHJvb3RPYmplY3QpCkBAIC04MSw5ICs4MSw5IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIEhh
c2hNYXA8Um9vdE9iamVjdCosIEpTVG9OUE9iamVjdE1hcD46Oml0ZXJhdG9yIGl0ZXIgPSBtX21h
cC5maW5kKHJvb3RPYmplY3QpOwogICAgICAgICBBU1NFUlQoaXRlciAhPSBtX21hcC5lbmQoKSk7
Ci0gICAgICAgIEFTU0VSVChpdGVyLT5zZWNvbmQuZmluZChqc09iamVjdCkgIT0gaXRlci0+c2Vj
b25kLmVuZCgpKTsKKyAgICAgICAgQVNTRVJUKGl0ZXItPnZhbHVlLmZpbmQoanNPYmplY3QpICE9
IGl0ZXItPnZhbHVlLmVuZCgpKTsKIAotICAgICAgICBpdGVyLT5zZWNvbmQucmVtb3ZlKGpzT2Jq
ZWN0KTsKKyAgICAgICAgaXRlci0+dmFsdWUucmVtb3ZlKGpzT2JqZWN0KTsKICAgICB9CiAKIHBy
aXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhQ2xh
c3NKU0MuY3BwIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YUNsYXNzSlNDLmNw
cAppbmRleCA5NzU2ZTdkZjYwNWMwOTUzZThiYjRlMjg1NGIxZTU0NDkxYTllZjE1Li41ZGFiM2U0
MWYyMzliMTA0YWEyOWJmODQwMWNlMzkzYWYyYjU4MzFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhQ2xhc3NKU0MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JyaWRnZS9qbmkvanNjL0phdmFDbGFzc0pTQy5jcHAKQEAgLTEwNyw3ICsxMDcsNyBAQCBKYXZh
Q2xhc3M6On5KYXZhQ2xhc3MoKQogCiAgICAgTWV0aG9kTGlzdE1hcDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gbV9tZXRob2RzLmVuZCgpOwogICAgIGZvciAoTWV0aG9kTGlzdE1hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX21ldGhvZHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAg
IGNvbnN0IE1ldGhvZExpc3QqIG1ldGhvZExpc3QgPSBpdC0+c2Vjb25kOworICAgICAgICBjb25z
dCBNZXRob2RMaXN0KiBtZXRob2RMaXN0ID0gaXQtPnZhbHVlOwogICAgICAgICBkZWxldGVBbGxW
YWx1ZXMoKm1ldGhvZExpc3QpOwogICAgICAgICBkZWxldGUgbWV0aG9kTGlzdDsKICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9yb290LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX3Jvb3QuY3BwCmluZGV4IGU4ODRlNjFiMTM4NzZlODc3
YTZjOTllNjgzZWRiOTk0MTI3ZTNkZjEuLjlkZGI5NTVlMTljYmUyNmM5ODM2ZGQ5NDg5ZTAyZGMw
MTA4YWU3MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX3Jvb3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX3Jvb3QuY3BwCkBAIC0xMDUs
NyArMTA1LDcgQEAgdm9pZCBSb290T2JqZWN0OjppbnZhbGlkYXRlKCkKICAgICB7CiAgICAgICAg
IEhhc2hNYXA8UnVudGltZU9iamVjdCosIEpTQzo6V2VhazxSdW50aW1lT2JqZWN0PiA+OjppdGVy
YXRvciBlbmQgPSBtX3J1bnRpbWVPYmplY3RzLmVuZCgpOwogICAgICAgICBmb3IgKEhhc2hNYXA8
UnVudGltZU9iamVjdCosIEpTQzo6V2VhazxSdW50aW1lT2JqZWN0PiA+OjppdGVyYXRvciBpdCA9
IG1fcnVudGltZU9iamVjdHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAg
ICBpdC0+c2Vjb25kLmdldCgpLT5pbnZhbGlkYXRlKCk7CisgICAgICAgICAgICBpdC0+dmFsdWUu
Z2V0KCktPmludmFsaWRhdGUoKTsKICAgICAgICAgfQogCiAgICAgICAgIG1fcnVudGltZU9iamVj
dHMuY2xlYXIoKTsKQEAgLTEyNiw3ICsxMjYsNyBAQCB2b2lkIFJvb3RPYmplY3Q6OmludmFsaWRh
dGUoKQogCiAgICAgUHJvdGVjdENvdW50U2V0OjppdGVyYXRvciBlbmQgPSBtX3Byb3RlY3RDb3Vu
dFNldC5lbmQoKTsKICAgICBmb3IgKFByb3RlY3RDb3VudFNldDo6aXRlcmF0b3IgaXQgPSBtX3By
b3RlY3RDb3VudFNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIEpTQzo6Z2NV
bnByb3RlY3QoaXQtPmZpcnN0KTsKKyAgICAgICAgSlNDOjpnY1VucHJvdGVjdChpdC0+a2V5KTsK
ICAgICBtX3Byb3RlY3RDb3VudFNldC5jbGVhcigpOwogCiAgICAgcm9vdE9iamVjdFNldCgpLT5y
ZW1vdmUodGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FudmFzVmFs
dWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbnZhc1ZhbHVlLmNwcAppbmRleCA3ODNj
ZWVmODJiNTBmODg1ZTM3MDU5ZTc1ZGUxNTZkZWRmMjdkMTYxLi45YTk1NTQwZDk2ZWNjYzE5NzA3
Mjg0YjU3YjZiMmQxYzY5MGIxNjQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
Q2FudmFzVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYW52YXNWYWx1ZS5j
cHAKQEAgLTQ5LDE0ICs0OSwxNCBAQCB2b2lkIENTU0NhbnZhc1ZhbHVlOjpjYW52YXNDaGFuZ2Vk
KEhUTUxDYW52YXNFbGVtZW50KiwgY29uc3QgRmxvYXRSZWN0JiBjaGFuZ2VkUgogICAgIEludFJl
Y3QgaW1hZ2VDaGFuZ2VSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChjaGFuZ2VkUmVjdCk7CiAgICAg
UmVuZGVyT2JqZWN0U2l6ZUNvdW50TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBjbGllbnRzKCku
ZW5kKCk7CiAgICAgZm9yIChSZW5kZXJPYmplY3RTaXplQ291bnRNYXA6OmNvbnN0X2l0ZXJhdG9y
IGN1cnIgPSBjbGllbnRzKCkuYmVnaW4oKTsgY3VyciAhPSBlbmQ7ICsrY3VycikKLSAgICAgICAg
Y29uc3RfY2FzdDxSZW5kZXJPYmplY3QqPihjdXJyLT5maXJzdCktPmltYWdlQ2hhbmdlZChzdGF0
aWNfY2FzdDxXcmFwcGVkSW1hZ2VQdHI+KHRoaXMpLCAmaW1hZ2VDaGFuZ2VSZWN0KTsKKyAgICAg
ICAgY29uc3RfY2FzdDxSZW5kZXJPYmplY3QqPihjdXJyLT5rZXkpLT5pbWFnZUNoYW5nZWQoc3Rh
dGljX2Nhc3Q8V3JhcHBlZEltYWdlUHRyPih0aGlzKSwgJmltYWdlQ2hhbmdlUmVjdCk7CiB9CiAK
IHZvaWQgQ1NTQ2FudmFzVmFsdWU6OmNhbnZhc1Jlc2l6ZWQoSFRNTENhbnZhc0VsZW1lbnQqKQog
ewogICAgIFJlbmRlck9iamVjdFNpemVDb3VudE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY2xp
ZW50cygpLmVuZCgpOwogICAgIGZvciAoUmVuZGVyT2JqZWN0U2l6ZUNvdW50TWFwOjpjb25zdF9p
dGVyYXRvciBjdXJyID0gY2xpZW50cygpLmJlZ2luKCk7IGN1cnIgIT0gZW5kOyArK2N1cnIpCi0g
ICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyT2JqZWN0Kj4oY3Vyci0+Zmlyc3QpLT5pbWFnZUNoYW5n
ZWQoc3RhdGljX2Nhc3Q8V3JhcHBlZEltYWdlUHRyPih0aGlzKSk7CisgICAgICAgIGNvbnN0X2Nh
c3Q8UmVuZGVyT2JqZWN0Kj4oY3Vyci0+a2V5KS0+aW1hZ2VDaGFuZ2VkKHN0YXRpY19jYXN0PFdy
YXBwZWRJbWFnZVB0cj4odGhpcykpOwogfQogCiB2b2lkIENTU0NhbnZhc1ZhbHVlOjpjYW52YXNE
ZXN0cm95ZWQoSFRNTENhbnZhc0VsZW1lbnQqIGVsZW1lbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCmluZGV4IGM1MGI1MmZjNGNl
OGM5MjhmYjY0Njc0ZjIyM2ZjZGE5ZmNkOTM5YjYuLjY2MzMwYzgxODI4MjlmNDBjODFlYjdmZTRk
MzlmMWQyYTc2NDRkYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRl
ZFN0eWxlRGVjbGFyYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRl
ZFN0eWxlRGVjbGFyYXRpb24uY3BwCkBAIC0xMjM5LDggKzEyMzksOCBAQCBzdGF0aWMgUGFzc1Jl
ZlB0cjxDU1NWYWx1ZT4gY291bnRlclRvQ1NTVmFsdWUoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxl
LCBpbnQgcHJvcAogCiAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdCA9IENTU1ZhbHVlTGlz
dDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKICAgICBmb3IgKENvdW50ZXJEaXJlY3RpdmVNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBtYXAtPmVuZCgpOyArK2l0
KSB7Ci0gICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKGl0LT5m
aXJzdC5nZXQoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpKTsKLSAgICAgICAgc2hv
cnQgbnVtYmVyID0gcHJvcGVydHlJRCA9PSBDU1NQcm9wZXJ0eUNvdW50ZXJJbmNyZW1lbnQgPyBp
dC0+c2Vjb25kLm1faW5jcmVtZW50VmFsdWUgOiBpdC0+c2Vjb25kLm1fcmVzZXRWYWx1ZTsKKyAg
ICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoaXQtPmtleS5nZXQo
KSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpKTsKKyAgICAgICAgc2hvcnQgbnVtYmVy
ID0gcHJvcGVydHlJRCA9PSBDU1NQcm9wZXJ0eUNvdW50ZXJJbmNyZW1lbnQgPyBpdC0+dmFsdWUu
bV9pbmNyZW1lbnRWYWx1ZSA6IGl0LT52YWx1ZS5tX3Jlc2V0VmFsdWU7CiAgICAgICAgIGxpc3Qt
PmFwcGVuZChjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKChkb3VibGUpbnVtYmVyLCBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOwogICAgIH0KICAgICByZXR1cm4gbGlzdC5yZWxlYXNl
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Jvc3NmYWRlVmFsdWUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Nyb3NzZmFkZVZhbHVlLmNwcAppbmRleCA0ZmYwOGFm
Y2E1ZmQ0YTEwNTVmNWVkMTVmZDFlOGZhOTI0MDRhNmUyLi5kYzQ5NDMwOTUwMmZmY2Q4ZWEwOThm
MzQ1ZjY0Y2RlY2E4NmUzZTdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Jv
c3NmYWRlVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDcm9zc2ZhZGVWYWx1
ZS5jcHAKQEAgLTE2MSw3ICsxNjEsNyBAQCB2b2lkIENTU0Nyb3NzZmFkZVZhbHVlOjpjcm9zc2Zh
ZGVDaGFuZ2VkKGNvbnN0IEludFJlY3QmKQogewogICAgIFJlbmRlck9iamVjdFNpemVDb3VudE1h
cDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY2xpZW50cygpLmVuZCgpOwogICAgIGZvciAoUmVuZGVy
T2JqZWN0U2l6ZUNvdW50TWFwOjpjb25zdF9pdGVyYXRvciBjdXJyID0gY2xpZW50cygpLmJlZ2lu
KCk7IGN1cnIgIT0gZW5kOyArK2N1cnIpIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiBjbGllbnQg
PSBjb25zdF9jYXN0PFJlbmRlck9iamVjdCo+KGN1cnItPmZpcnN0KTsKKyAgICAgICAgUmVuZGVy
T2JqZWN0KiBjbGllbnQgPSBjb25zdF9jYXN0PFJlbmRlck9iamVjdCo+KGN1cnItPmtleSk7CiAg
ICAgICAgIGNsaWVudC0+aW1hZ2VDaGFuZ2VkKHN0YXRpY19jYXN0PFdyYXBwZWRJbWFnZVB0cj4o
dGhpcykpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250
RmFjZVNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuY3Bw
CmluZGV4IGRkOTA0ZDM3ZmI5NTRlNDRkYmE2NTM4NzY3MzU4MzExOThmYWQzZDcuLmNlNDUzNjdh
YzMzMjM3MmEwZmI5ZWM4YzVhNTJmYjlmMDg4OWVkZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0ZvbnRGYWNlU291cmNlLmNwcApAQCAtMTE0LDcgKzExNCw3IEBAIFNpbXBsZUZvbnREYXRhKiBD
U1NGb250RmFjZVNvdXJjZTo6Z2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250
RGVzY3JpCiAgICAgdW5zaWduZWQgaGFzaEtleSA9IChmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQ
aXhlbFNpemUoKSArIDEpIDw8IDYgfCBmb250RGVzY3JpcHRpb24ud2lkdGhWYXJpYW50KCkgPDwg
NAogICAgICAgICAgICAgICAgICAgICAgICB8IChmb250RGVzY3JpcHRpb24udGV4dE9yaWVudGF0
aW9uKCkgPT0gVGV4dE9yaWVudGF0aW9uVXByaWdodCA/IDggOiAwKSB8IChmb250RGVzY3JpcHRp
b24ub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCA/IDQgOiAwKSB8IChzeW50aGV0aWNCb2xkID8g
MiA6IDApIHwgKHN5bnRoZXRpY0l0YWxpYyA/IDEgOiAwKTsKIAotICAgIFNpbXBsZUZvbnREYXRh
KiYgY2FjaGVkRGF0YSA9IG1fZm9udERhdGFUYWJsZS5hZGQoaGFzaEtleSwgMCkuaXRlcmF0b3It
PnNlY29uZDsKKyAgICBTaW1wbGVGb250RGF0YSomIGNhY2hlZERhdGEgPSBtX2ZvbnREYXRhVGFi
bGUuYWRkKGhhc2hLZXksIDApLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoY2FjaGVkRGF0YSkK
ICAgICAgICAgcmV0dXJuIGNhY2hlZERhdGE7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NGb250U2VsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxl
Y3Rvci5jcHAKaW5kZXggZTAwMmYyZjhmMDE3MGU5OGNhNTZkNzFmZTVjZGI5N2JiZWE2MmI4NS4u
YjkwYmJlOGY1OTczYWQ3MjQyNzM1ODFhNTNhZWE0NzIzOTUyMDVmNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAKQEAgLTI4NSw3ICsyODUsNyBAQCB2b2lkIENTU0ZvbnRT
ZWxlY3Rvcjo6YWRkRm9udEZhY2VSdWxlKGNvbnN0IENTU0ZvbnRGYWNlUnVsZSogZm9udEZhY2VS
dWxlKQogICAgICAgICBpZiAoZmFtaWx5TmFtZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBjb250
aW51ZTsKIAotICAgICAgICBPd25QdHI8VmVjdG9yPFJlZlB0cjxDU1NGb250RmFjZT4gPiA+JiBm
YW1pbHlGb250RmFjZXMgPSBtX2ZvbnRGYWNlcy5hZGQoZmFtaWx5TmFtZSwgbnVsbHB0cikuaXRl
cmF0b3ItPnNlY29uZDsKKyAgICAgICAgT3duUHRyPFZlY3RvcjxSZWZQdHI8Q1NTRm9udEZhY2U+
ID4gPiYgZmFtaWx5Rm9udEZhY2VzID0gbV9mb250RmFjZXMuYWRkKGZhbWlseU5hbWUsIG51bGxw
dHIpLml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgaWYgKCFmYW1pbHlGb250RmFjZXMpIHsKICAg
ICAgICAgICAgIGZhbWlseUZvbnRGYWNlcyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8UmVmUHRyPENT
U0ZvbnRGYWNlPiA+KTsKIApAQCAtNDg3LDEzICs0ODcsMTMgQEAgRm9udERhdGEqIENTU0ZvbnRT
ZWxlY3Rvcjo6Z2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24sIGMKICAgICAgICAgcmV0dXJuIGZvbnREYXRhRm9yR2VuZXJpY0ZhbWlseShtX2RvY3VtZW50
LCBmb250RGVzY3JpcHRpb24sIGZhbWlseU5hbWUpOwogICAgIH0KIAotICAgIE93blB0cjxIYXNo
TWFwPHVuc2lnbmVkLCBSZWZQdHI8Q1NTU2VnbWVudGVkRm9udEZhY2U+ID4gPiYgc2VnbWVudGVk
Rm9udEZhY2VDYWNoZSA9IG1fZm9udHMuYWRkKGZhbWlseSwgbnVsbHB0cikuaXRlcmF0b3ItPnNl
Y29uZDsKKyAgICBPd25QdHI8SGFzaE1hcDx1bnNpZ25lZCwgUmVmUHRyPENTU1NlZ21lbnRlZEZv
bnRGYWNlPiA+ID4mIHNlZ21lbnRlZEZvbnRGYWNlQ2FjaGUgPSBtX2ZvbnRzLmFkZChmYW1pbHks
IG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoIXNlZ21lbnRlZEZvbnRGYWNlQ2Fj
aGUpCiAgICAgICAgIHNlZ21lbnRlZEZvbnRGYWNlQ2FjaGUgPSBhZG9wdFB0cihuZXcgSGFzaE1h
cDx1bnNpZ25lZCwgUmVmUHRyPENTU1NlZ21lbnRlZEZvbnRGYWNlPiA+KTsKIAogICAgIEZvbnRU
cmFpdHNNYXNrIHRyYWl0c01hc2sgPSBmb250RGVzY3JpcHRpb24udHJhaXRzTWFzaygpOwogCi0g
ICAgUmVmUHRyPENTU1NlZ21lbnRlZEZvbnRGYWNlPiYgZmFjZSA9IHNlZ21lbnRlZEZvbnRGYWNl
Q2FjaGUtPmFkZCh0cmFpdHNNYXNrLCAwKS5pdGVyYXRvci0+c2Vjb25kOworICAgIFJlZlB0cjxD
U1NTZWdtZW50ZWRGb250RmFjZT4mIGZhY2UgPSBzZWdtZW50ZWRGb250RmFjZUNhY2hlLT5hZGQo
dHJhaXRzTWFzaywgMCkuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghZmFjZSkgewogICAgICAg
ICBmYWNlID0gQ1NTU2VnbWVudGVkRm9udEZhY2U6OmNyZWF0ZSh0aGlzKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUuY3BwIGIvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUuY3BwCmluZGV4IDliZTQ0NmJkMGZi
ODViMDY0ZDY5ZjE4NjMyNjk5YTAzOWEwYWMxZDYuLmEzNDFlMmZjYWU1NzliZDcyOTIxZDZiZjM4
MjdkOTJmMmYwYTlhNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZUdl
bmVyYXRvclZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VHZW5lcmF0
b3JWYWx1ZS5jcHAKQEAgLTU2LDcgKzU2LDcgQEAgdm9pZCBDU1NJbWFnZUdlbmVyYXRvclZhbHVl
OjphZGRDbGllbnQoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgSW50U2l6ZSYgc2kKICAg
ICBpZiAoaXQgPT0gbV9jbGllbnRzLmVuZCgpKQogICAgICAgICBtX2NsaWVudHMuYWRkKHJlbmRl
cmVyLCBTaXplQW5kQ291bnQoc2l6ZSwgMSkpOwogICAgIGVsc2UgewotICAgICAgICBTaXplQW5k
Q291bnQmIHNpemVDb3VudCA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFNpemVBbmRDb3VudCYgc2l6
ZUNvdW50ID0gaXQtPnZhbHVlOwogICAgICAgICArK3NpemVDb3VudC5jb3VudDsKICAgICB9CiB9
CkBAIC02OCw3ICs2OCw3IEBAIHZvaWQgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6cmVtb3ZlQ2xp
ZW50KFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiAgICAgQVNTRVJUKGl0ICE9IG1fY2xpZW50cy5l
bmQoKSk7CiAKICAgICBJbnRTaXplIHJlbW92ZWRJbWFnZVNpemU7Ci0gICAgU2l6ZUFuZENvdW50
JiBzaXplQ291bnQgPSBpdC0+c2Vjb25kOworICAgIFNpemVBbmRDb3VudCYgc2l6ZUNvdW50ID0g
aXQtPnZhbHVlOwogICAgIEludFNpemUgc2l6ZSA9IHNpemVDb3VudC5zaXplOwogICAgIGlmICgh
c2l6ZS5pc0VtcHR5KCkpIHsKICAgICAgICAgbV9zaXplcy5yZW1vdmUoc2l6ZSk7CkBAIC04Niw3
ICs4Niw3IEBAIEltYWdlKiBDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjpnZXRJbWFnZShSZW5kZXJP
YmplY3QqIHJlbmRlcmVyLCBjb25zdCBJbnRTaXplJiBzCiB7CiAgICAgUmVuZGVyT2JqZWN0U2l6
ZUNvdW50TWFwOjppdGVyYXRvciBpdCA9IG1fY2xpZW50cy5maW5kKHJlbmRlcmVyKTsKICAgICBp
ZiAoaXQgIT0gbV9jbGllbnRzLmVuZCgpKSB7Ci0gICAgICAgIFNpemVBbmRDb3VudCYgc2l6ZUNv
dW50ID0gaXQtPnNlY29uZDsKKyAgICAgICAgU2l6ZUFuZENvdW50JiBzaXplQ291bnQgPSBpdC0+
dmFsdWU7CiAgICAgICAgIEludFNpemUgb2xkU2l6ZSA9IHNpemVDb3VudC5zaXplOwogICAgICAg
ICBpZiAob2xkU2l6ZSAhPSBzaXplKSB7CiAgICAgICAgICAgICBSZWZQdHI8Q1NTSW1hZ2VHZW5l
cmF0b3JWYWx1ZT4gcHJvdGVjdCh0aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NTZWdtZW50ZWRGb250RmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VnbWVu
dGVkRm9udEZhY2UuY3BwCmluZGV4IGNmOWVjOWUyZWQyZjlmZWYyYmJkOTRmZjY1ZTBhYWUzMmEz
ODQxMDIuLmFkMmU5ZTI1YjA0MDA0MGQ0NmE3ZWZmYzdjMDgyYWE1NTA5NWY5NDggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmNwcApAQCAtMTA2LDcgKzEwNiw3
IEBAIEZvbnREYXRhKiBDU1NTZWdtZW50ZWRGb250RmFjZTo6Z2V0Rm9udERhdGEoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpCiAgICAgRm9udFRyYWl0c01hc2sgZGVzaXJlZFRy
YWl0c01hc2sgPSBmb250RGVzY3JpcHRpb24udHJhaXRzTWFzaygpOwogICAgIHVuc2lnbmVkIGhh
c2hLZXkgPSAoKGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpICsgMSkgPDwgKEZv
bnRUcmFpdHNNYXNrV2lkdGggKyAxKSkgfCAoKGZvbnREZXNjcmlwdGlvbi5vcmllbnRhdGlvbigp
ID09IFZlcnRpY2FsID8gMSA6IDApIDw8IEZvbnRUcmFpdHNNYXNrV2lkdGgpIHwgZGVzaXJlZFRy
YWl0c01hc2s7CiAKLSAgICBTZWdtZW50ZWRGb250RGF0YSomIGZvbnREYXRhID0gbV9mb250RGF0
YVRhYmxlLmFkZChoYXNoS2V5LCAwKS5pdGVyYXRvci0+c2Vjb25kOworICAgIFNlZ21lbnRlZEZv
bnREYXRhKiYgZm9udERhdGEgPSBtX2ZvbnREYXRhVGFibGUuYWRkKGhhc2hLZXksIDApLml0ZXJh
dG9yLT52YWx1ZTsKICAgICBpZiAoZm9udERhdGEpCiAgICAgICAgIHJldHVybiBmb250RGF0YTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlbGVjdG9yLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvci5jcHAKaW5kZXggYWVlMTlmNmU5YjA0OGI0NGZhZmFi
NjNkZDg1NThlODFiYjIxMGZhZi4uZDBmNTUwNDBlNWI4OGEzOGNhOTZjZjMwYzEzZDViOGU2ODEx
ZjdiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlbGVjdG9yLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VsZWN0b3IuY3BwCkBAIC0zODgsNyArMzg4LDcgQEAg
Q1NTU2VsZWN0b3I6OlBzZXVkb1R5cGUgQ1NTU2VsZWN0b3I6OnBhcnNlUHNldWRvVHlwZShjb25z
dCBBdG9taWNTdHJpbmcmIG5hbWUpCiAgICAgICAgIHJldHVybiBQc2V1ZG9Vbmtub3duOwogICAg
IEhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCosIENTU1NlbGVjdG9yOjpQc2V1ZG9UeXBlPiogbmFt
ZVRvUHNldWRvVHlwZSA9IG5hbWVUb1BzZXVkb1R5cGVNYXAoKTsKICAgICBIYXNoTWFwPEF0b21p
Y1N0cmluZ0ltcGwqLCBDU1NTZWxlY3Rvcjo6UHNldWRvVHlwZT46Oml0ZXJhdG9yIHNsb3QgPSBu
YW1lVG9Qc2V1ZG9UeXBlLT5maW5kKG5hbWUuaW1wbCgpKTsKLSAgICByZXR1cm4gc2xvdCA9PSBu
YW1lVG9Qc2V1ZG9UeXBlLT5lbmQoKSA/IFBzZXVkb1Vua25vd24gOiBzbG90LT5zZWNvbmQ7Cisg
ICAgcmV0dXJuIHNsb3QgPT0gbmFtZVRvUHNldWRvVHlwZS0+ZW5kKCkgPyBQc2V1ZG9Vbmtub3du
IDogc2xvdC0+dmFsdWU7CiB9CiAKIGJvb2wgQ1NTU2VsZWN0b3I6OmlzVW5rbm93blBzZXVkb1R5
cGUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1N0eWxlQXBwbHlQcm9wZXJ0eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5
bGVBcHBseVByb3BlcnR5LmNwcAppbmRleCAzMDYxZjA1NWZiN2UxYzlhOTIzOThkMzlkZTYxMzll
OTQxZTNiNTU2Li44YzNkYmI3ZWZiMWQ5MTFhMWFhMWUxY2M5Y2ZhOWU0NmM0NDc3M2VjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVBcHBseVByb3BlcnR5LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVBcHBseVByb3BlcnR5LmNwcApAQCAtMTAwNCwy
MSArMTAwNCwyMSBAQCBwdWJsaWM6CiAgICAgICAgIHR5cGVkZWYgQ291bnRlckRpcmVjdGl2ZU1h
cDo6aXRlcmF0b3IgSXRlcmF0b3I7CiAgICAgICAgIEl0ZXJhdG9yIGVuZCA9IHBhcmVudE1hcC5l
bmQoKTsKICAgICAgICAgZm9yIChJdGVyYXRvciBpdCA9IHBhcmVudE1hcC5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIENvdW50ZXJEaXJlY3RpdmVzJiBkaXJlY3RpdmVz
ID0gbWFwLmFkZChpdC0+Zmlyc3QsIENvdW50ZXJEaXJlY3RpdmVzKCkpLml0ZXJhdG9yLT5zZWNv
bmQ7CisgICAgICAgICAgICBDb3VudGVyRGlyZWN0aXZlcyYgZGlyZWN0aXZlcyA9IG1hcC5hZGQo
aXQtPmtleSwgQ291bnRlckRpcmVjdGl2ZXMoKSkuaXRlcmF0b3ItPnZhbHVlOwogICAgICAgICAg
ICAgaWYgKGNvdW50ZXJCZWhhdmlvciA9PSBSZXNldCkgewotICAgICAgICAgICAgICAgIGRpcmVj
dGl2ZXMubV9yZXNldCA9IGl0LT5zZWNvbmQubV9yZXNldDsKLSAgICAgICAgICAgICAgICBkaXJl
Y3RpdmVzLm1fcmVzZXRWYWx1ZSA9IGl0LT5zZWNvbmQubV9yZXNldFZhbHVlOworICAgICAgICAg
ICAgICAgIGRpcmVjdGl2ZXMubV9yZXNldCA9IGl0LT52YWx1ZS5tX3Jlc2V0OworICAgICAgICAg
ICAgICAgIGRpcmVjdGl2ZXMubV9yZXNldFZhbHVlID0gaXQtPnZhbHVlLm1fcmVzZXRWYWx1ZTsK
ICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gSW5oZXJpdGluZyBhIGNv
dW50ZXItaW5jcmVtZW50IG1lYW5zIHRha2luZyB0aGUgcGFyZW50J3MgY3VycmVudCB2YWx1ZSBm
b3IgdGhlIGNvdW50ZXIKICAgICAgICAgICAgICAgICAvLyBhbmQgYWRkaW5nIGl0IHRvIGl0c2Vs
Zi4KLSAgICAgICAgICAgICAgICBkaXJlY3RpdmVzLm1faW5jcmVtZW50ID0gaXQtPnNlY29uZC5t
X2luY3JlbWVudDsKKyAgICAgICAgICAgICAgICBkaXJlY3RpdmVzLm1faW5jcmVtZW50ID0gaXQt
PnZhbHVlLm1faW5jcmVtZW50OwogICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXMubV9pbmNyZW1l
bnRWYWx1ZSA9IDA7CiAgICAgICAgICAgICAgICAgaWYgKGRpcmVjdGl2ZXMubV9pbmNyZW1lbnQp
IHsKICAgICAgICAgICAgICAgICAgICAgZmxvYXQgaW5jcmVtZW50VmFsdWUgPSBkaXJlY3RpdmVz
Lm1faW5jcmVtZW50VmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXMubV9pbmNy
ZW1lbnRWYWx1ZSA9IGNsYW1wVG9JbnRlZ2VyKGluY3JlbWVudFZhbHVlICsgaXQtPnNlY29uZC5t
X2luY3JlbWVudFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlcy5tX2luY3Jl
bWVudFZhbHVlID0gY2xhbXBUb0ludGVnZXIoaW5jcmVtZW50VmFsdWUgKyBpdC0+dmFsdWUubV9p
bmNyZW1lbnRWYWx1ZSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICAgICAgZGlyZWN0aXZlcy5tX2luY3JlbWVudCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAg
IGRpcmVjdGl2ZXMubV9pbmNyZW1lbnRWYWx1ZSA9IGl0LT5zZWNvbmQubV9pbmNyZW1lbnRWYWx1
ZTsKKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlcy5tX2luY3JlbWVudFZhbHVlID0gaXQt
PnZhbHVlLm1faW5jcmVtZW50VmFsdWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQogICAgICAgICB9CkBAIC0xMDM2LDkgKzEwMzYsOSBAQCBwdWJsaWM6CiAgICAgICAgIEl0ZXJh
dG9yIGVuZCA9IG1hcC5lbmQoKTsKICAgICAgICAgZm9yIChJdGVyYXRvciBpdCA9IG1hcC5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpCiAgICAgICAgICAgICBpZiAoY291bnRlckJlaGF2aW9yID09
IFJlc2V0KQotICAgICAgICAgICAgICAgIGl0LT5zZWNvbmQubV9yZXNldCA9IGZhbHNlOworICAg
ICAgICAgICAgICAgIGl0LT52YWx1ZS5tX3Jlc2V0ID0gZmFsc2U7CiAgICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgaXQtPnNlY29uZC5tX2luY3JlbWVudCA9IGZhbHNlOworICAgICAg
ICAgICAgICAgIGl0LT52YWx1ZS5tX2luY3JlbWVudCA9IGZhbHNlOwogCiAgICAgICAgIGludCBs
ZW5ndGggPSBsaXN0ID8gbGlzdC0+bGVuZ3RoKCkgOiAwOwogICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IGxlbmd0aDsgKytpKSB7CkBAIC0xMDUyLDcgKzEwNTIsNyBAQCBwdWJsaWM6CiAKICAg
ICAgICAgICAgIEF0b21pY1N0cmluZyBpZGVudGlmaWVyID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWUqPihwYWlyLT5maXJzdCgpKS0+Z2V0U3RyaW5nVmFsdWUoKTsKICAgICAgICAgICAg
IGludCB2YWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4ocGFpci0+c2Vjb25k
KCkpLT5nZXRJbnRWYWx1ZSgpOwotICAgICAgICAgICAgQ291bnRlckRpcmVjdGl2ZXMmIGRpcmVj
dGl2ZXMgPSBtYXAuYWRkKGlkZW50aWZpZXIuaW1wbCgpLCBDb3VudGVyRGlyZWN0aXZlcygpKS5p
dGVyYXRvci0+c2Vjb25kOworICAgICAgICAgICAgQ291bnRlckRpcmVjdGl2ZXMmIGRpcmVjdGl2
ZXMgPSBtYXAuYWRkKGlkZW50aWZpZXIuaW1wbCgpLCBDb3VudGVyRGlyZWN0aXZlcygpKS5pdGVy
YXRvci0+dmFsdWU7CiAgICAgICAgICAgICBpZiAoY291bnRlckJlaGF2aW9yID09IFJlc2V0KSB7
CiAgICAgICAgICAgICAgICAgZGlyZWN0aXZlcy5tX3Jlc2V0ID0gdHJ1ZTsKICAgICAgICAgICAg
ICAgICBkaXJlY3RpdmVzLm1fcmVzZXRWYWx1ZSA9IHZhbHVlOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1N0eWxlU2VsZWN0b3IuY3BwCmluZGV4IDhmYzYzOTIyMTQxMzVkZGMzNzU3YTExYmJiNWE2YTRl
OTI0ZWZkMDcuLmE4MDNlNDgyYmY5NWQ4NDU4YzY4YzA4NGRkMzJlNWMzMTJkM2RhYmEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKQEAgLTQ1NSw3ICs0NTUsNyBAQCB2
b2lkIENTU1N0eWxlU2VsZWN0b3I6OmNvbGxlY3RGZWF0dXJlcygpCiAgICAgbV9mZWF0dXJlcy5h
ZGQobV9hdXRob3JTdHlsZS0+ZmVhdHVyZXMoKSk7CiAjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkK
ICAgICBmb3IgKFNjb3BlZFJ1bGVTZXRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zY29wZWRBdXRob3JT
dHlsZXMuYmVnaW4oKTsgaXQgIT0gbV9zY29wZWRBdXRob3JTdHlsZXMuZW5kKCk7ICsraXQpCi0g
ICAgICAgIG1fZmVhdHVyZXMuYWRkKGl0LT5zZWNvbmQtPmZlYXR1cmVzKCkpOworICAgICAgICBt
X2ZlYXR1cmVzLmFkZChpdC0+dmFsdWUtPmZlYXR1cmVzKCkpOwogI2VuZGlmCiAgICAgaWYgKG1f
dXNlclN0eWxlKQogICAgICAgICBtX2ZlYXR1cmVzLmFkZChtX3VzZXJTdHlsZS0+ZmVhdHVyZXMo
KSk7CkBAIC00OTIsNyArNDkyLDcgQEAgaW5saW5lIFJ1bGVTZXQqIENTU1N0eWxlU2VsZWN0b3I6
OnJ1bGVTZXRGb3JTY29wZShjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSkgY28KICAgICBpZiAo
IXNjb3BlLT5oYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpKQogICAgICAgICByZXR1cm4gMDsKICAg
ICBTY29wZWRSdWxlU2V0TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fc2NvcGVkQXV0aG9yU3R5
bGVzLmZpbmQoc2NvcGUpOwotICAgIHJldHVybiBpdCAhPSBtX3Njb3BlZEF1dGhvclN0eWxlcy5l
bmQoKSA/IGl0LT5zZWNvbmQuZ2V0KCkgOiAwOyAKKyAgICByZXR1cm4gaXQgIT0gbV9zY29wZWRB
dXRob3JTdHlsZXMuZW5kKCkgPyBpdC0+dmFsdWUuZ2V0KCkgOiAwOyAKIH0KICNlbmRpZgogCkBA
IC01MTAsOCArNTEwLDggQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBlbmRBdXRob3JTdHls
ZXNoZWV0cyh1bnNpZ25lZCBmaXJzdE5ldywgY29uc3QgVmVjdG9yPFIKICAgICAgICAgaWYgKHNj
b3BlKSB7CiAgICAgICAgICAgICBTY29wZWRSdWxlU2V0TWFwOjpBZGRSZXN1bHQgYWRkUmVzdWx0
ID0gbV9zY29wZWRBdXRob3JTdHlsZXMuYWRkKHNjb3BlLCBudWxscHRyKTsKICAgICAgICAgICAg
IGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgICAgICBhZGRSZXN1bHQuaXRl
cmF0b3ItPnNlY29uZCA9IFJ1bGVTZXQ6OmNyZWF0ZSgpOwotICAgICAgICAgICAgYWRkUmVzdWx0
Lml0ZXJhdG9yLT5zZWNvbmQtPmFkZFJ1bGVzRnJvbVNoZWV0KGNzc1NoZWV0LCAqbV9tZWRpdW0s
IHRoaXMsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVl
ID0gUnVsZVNldDo6Y3JlYXRlKCk7CisgICAgICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZh
bHVlLT5hZGRSdWxlc0Zyb21TaGVldChjc3NTaGVldCwgKm1fbWVkaXVtLCB0aGlzLCBzY29wZSk7
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogI2VuZGlmCkBAIC02MzIsMTAgKzYz
MiwxMCBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OnN3ZWVwTWF0Y2hlZFByb3BlcnRpZXNDYWNo
ZSgpCiAgICAgTWF0Y2hlZFByb3BlcnRpZXNDYWNoZTo6aXRlcmF0b3IgaXQgPSBtX21hdGNoZWRQ
cm9wZXJ0aWVzQ2FjaGUuYmVnaW4oKTsKICAgICBNYXRjaGVkUHJvcGVydGllc0NhY2hlOjppdGVy
YXRvciBlbmQgPSBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUuZW5kKCk7CiAgICAgZm9yICg7IGl0
ICE9IGVuZDsgKytpdCkgewotICAgICAgICBWZWN0b3I8TWF0Y2hlZFByb3BlcnRpZXM+JiBtYXRj
aGVkUHJvcGVydGllcyA9IGl0LT5zZWNvbmQubWF0Y2hlZFByb3BlcnRpZXM7CisgICAgICAgIFZl
Y3RvcjxNYXRjaGVkUHJvcGVydGllcz4mIG1hdGNoZWRQcm9wZXJ0aWVzID0gaXQtPnZhbHVlLm1h
dGNoZWRQcm9wZXJ0aWVzOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1hdGNoZWRQ
cm9wZXJ0aWVzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBpZiAobWF0Y2hlZFByb3BlcnRp
ZXNbaV0ucHJvcGVydGllcy0+aGFzT25lUmVmKCkpIHsKLSAgICAgICAgICAgICAgICB0b1JlbW92
ZS5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQoaXQt
PmtleSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
QEAgLTE3MDQsNyArMTcwNCw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6a2V5ZnJhbWVTdHls
ZXNGb3JBbmltYXRpb24oRWxlbWVudCogZSwgY29uc3QgUmVuZGVyU3R5bGUqCiAgICAgaWYgKGl0
ID09IG1fa2V5ZnJhbWVzUnVsZU1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY29u
c3QgV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZSoga2V5ZnJhbWVzUnVsZSA9IGl0LT5zZWNvbmQuZ2V0
KCk7CisgICAgY29uc3QgV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZSoga2V5ZnJhbWVzUnVsZSA9IGl0
LT52YWx1ZS5nZXQoKTsKIAogICAgIC8vIENvbnN0cnVjdCBhbmQgcG9wdWxhdGUgdGhlIHN0eWxl
IGZvciBlYWNoIGtleWZyYW1lCiAgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZUtleWZyYW1l
PiA+JiBrZXlmcmFtZXMgPSBrZXlmcmFtZXNSdWxlLT5rZXlmcmFtZXMoKTsKQEAgLTIzODUsNyAr
MjM4NSw3IEBAIHZvaWQgUnVsZVNldDo6YWRkVG9SdWxlU2V0KEF0b21pY1N0cmluZ0ltcGwqIGtl
eSwgQXRvbVJ1bGVNYXAmIG1hcCwgY29uc3QgUnVsZURhCiB7CiAgICAgaWYgKCFrZXkpCiAgICAg
ICAgIHJldHVybjsKLSAgICBPd25QdHI8VmVjdG9yPFJ1bGVEYXRhPiA+JiBydWxlcyA9IG1hcC5h
ZGQoa2V5LCBudWxscHRyKS5pdGVyYXRvci0+c2Vjb25kOworICAgIE93blB0cjxWZWN0b3I8UnVs
ZURhdGE+ID4mIHJ1bGVzID0gbWFwLmFkZChrZXksIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsK
ICAgICBpZiAoIXJ1bGVzKQogICAgICAgICBydWxlcyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8UnVs
ZURhdGE+KTsKICAgICBydWxlcy0+YXBwZW5kKHJ1bGVEYXRhKTsKQEAgLTI1NDUsNyArMjU0NSw3
IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzaHJpbmtNYXBWZWN0b3JzVG9GaXQoUnVsZVNldDo6QXRv
bVJ1bGVNYXAmIG1hcCkKIHsKICAgICBSdWxlU2V0OjpBdG9tUnVsZU1hcDo6aXRlcmF0b3IgZW5k
ID0gbWFwLmVuZCgpOwogICAgIGZvciAoUnVsZVNldDo6QXRvbVJ1bGVNYXA6Oml0ZXJhdG9yIGl0
ID0gbWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+c2hy
aW5rVG9GaXQoKTsKKyAgICAgICAgaXQtPnZhbHVlLT5zaHJpbmtUb0ZpdCgpOwogfQogCiB2b2lk
IFJ1bGVTZXQ6OnNocmlua1RvRml0KCkKQEAgLTI2ODEsNyArMjY4MSw3IEBAIGNvbnN0IENTU1N0
eWxlU2VsZWN0b3I6Ok1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVJdGVtKiBDU1NTdHlsZVNlbGVjdG9y
OjpmaW5kRnJvbU1hCiAgICAgTWF0Y2hlZFByb3BlcnRpZXNDYWNoZTo6aXRlcmF0b3IgaXQgPSBt
X21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUuZmluZChoYXNoKTsKICAgICBpZiAoaXQgPT0gbV9tYXRj
aGVkUHJvcGVydGllc0NhY2hlLmVuZCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBNYXRjaGVk
UHJvcGVydGllc0NhY2hlSXRlbSYgY2FjaGVJdGVtID0gaXQtPnNlY29uZDsKKyAgICBNYXRjaGVk
UHJvcGVydGllc0NhY2hlSXRlbSYgY2FjaGVJdGVtID0gaXQtPnZhbHVlOwogCiAgICAgc2l6ZV90
IHNpemUgPSBtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCk7CiAgICAgaWYgKHNp
emUgIT0gY2FjaGVJdGVtLm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZVBvb2wuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1ZhbHVlUG9vbC5jcHAKaW5kZXggMDViYTU0OTUwMmFmYjg3Njc3ZjI1MzEyYmYxM2FiNjQ5NzY5
YTQ2MS4uMWM0NjEwMzg4OGM0ZTJjZTY5MGZjZmNkMWE4OTFmOWYwYTU0MzMxOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlUG9vbC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU1ZhbHVlUG9vbC5jcHAKQEAgLTU3LDggKzU3LDggQEAgUGFzc1JlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gQ1NTVmFsdWVQb29sOjpjcmVhdGVJZGVudGlmaWVyVmFsdWUoaW50IGlk
ZW50KQogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gZHVtbXlWYWx1ZTsKICAgICBJZGVu
dGlmaWVyVmFsdWVDYWNoZTo6QWRkUmVzdWx0IGVudHJ5ID0gbV9pZGVudGlmaWVyVmFsdWVDYWNo
ZS5hZGQoaWRlbnQsIGR1bW15VmFsdWUpOwogICAgIGlmIChlbnRyeS5pc05ld0VudHJ5KQotICAg
ICAgICBlbnRyeS5pdGVyYXRvci0+c2Vjb25kID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlk
ZW50aWZpZXIoaWRlbnQpOwotICAgIHJldHVybiBlbnRyeS5pdGVyYXRvci0+c2Vjb25kOworICAg
ICAgICBlbnRyeS5pdGVyYXRvci0+dmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRl
bnRpZmllcihpZGVudCk7CisgICAgcmV0dXJuIGVudHJ5Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIAog
UGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NTVmFsdWVQb29sOjpjcmVhdGVDb2xvclZh
bHVlKHVuc2lnbmVkIHJnYlZhbHVlKQpAQCAtODAsOCArODAsOCBAQCBQYXNzUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiBDU1NWYWx1ZVBvb2w6OmNyZWF0ZUNvbG9yVmFsdWUodW5zaWduZWQgcmdi
VmFsdWUpCiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBkdW1teVZhbHVlOwogICAgIENv
bG9yVmFsdWVDYWNoZTo6QWRkUmVzdWx0IGVudHJ5ID0gbV9jb2xvclZhbHVlQ2FjaGUuYWRkKHJn
YlZhbHVlLCBkdW1teVZhbHVlKTsKICAgICBpZiAoZW50cnkuaXNOZXdFbnRyeSkKLSAgICAgICAg
ZW50cnkuaXRlcmF0b3ItPnNlY29uZCA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVDb2xvcihy
Z2JWYWx1ZSk7Ci0gICAgcmV0dXJuIGVudHJ5Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgIGVu
dHJ5Lml0ZXJhdG9yLT52YWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVDb2xvcihyZ2JW
YWx1ZSk7CisgICAgcmV0dXJuIGVudHJ5Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIAogUGFzc1JlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NTVmFsdWVQb29sOjpjcmVhdGVWYWx1ZShkb3VibGUgdmFs
dWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMgdHlwZSkKQEAgLTExOSwxMyArMTE5LDEz
IEBAIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IENTU1ZhbHVlUG9vbDo6Y3JlYXRlVmFs
dWUoZG91YmxlIHZhbHVlLCBDU1NQcmltaXRpCiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiBkdW1teVZhbHVlOwogICAgIEludGVnZXJWYWx1ZUNhY2hlOjpBZGRSZXN1bHQgZW50cnkgPSBj
YWNoZS0+YWRkKGludFZhbHVlLCBkdW1teVZhbHVlKTsKICAgICBpZiAoZW50cnkuaXNOZXdFbnRy
eSkKLSAgICAgICAgZW50cnkuaXRlcmF0b3ItPnNlY29uZCA9IENTU1ByaW1pdGl2ZVZhbHVlOjpj
cmVhdGUodmFsdWUsIHR5cGUpOwotICAgIHJldHVybiBlbnRyeS5pdGVyYXRvci0+c2Vjb25kOwor
ICAgICAgICBlbnRyeS5pdGVyYXRvci0+dmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRl
KHZhbHVlLCB0eXBlKTsKKyAgICByZXR1cm4gZW50cnkuaXRlcmF0b3ItPnZhbHVlOwogfQogCiBQ
YXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NWYWx1ZVBvb2w6OmNyZWF0ZUZvbnRGYW1p
bHlWYWx1ZShjb25zdCBTdHJpbmcmIGZhbWlseU5hbWUpCiB7Ci0gICAgUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiYgdmFsdWUgPSBtX2ZvbnRGYW1pbHlWYWx1ZUNhY2hlLmFkZChmYW1pbHlOYW1l
LCAwKS5pdGVyYXRvci0+c2Vjb25kOworICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mIHZh
bHVlID0gbV9mb250RmFtaWx5VmFsdWVDYWNoZS5hZGQoZmFtaWx5TmFtZSwgMCkuaXRlcmF0b3It
PnZhbHVlOwogICAgIGlmICghdmFsdWUpCiAgICAgICAgIHZhbHVlID0gQ1NTUHJpbWl0aXZlVmFs
dWU6OmNyZWF0ZShmYW1pbHlOYW1lLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORyk7CiAg
ICAgcmV0dXJuIHZhbHVlOwpAQCAtMTM4LDcgKzEzOCw3IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWVM
aXN0PiBDU1NWYWx1ZVBvb2w6OmNyZWF0ZUZvbnRGYWNlVmFsdWUoY29uc3QgQXRvbWljU3RyaW5n
JiBzCiAgICAgaWYgKG1fZm9udEZhY2VWYWx1ZUNhY2hlLnNpemUoKSA+IG1heGltdW1Gb250RmFj
ZUNhY2hlU2l6ZSkKICAgICAgICAgbV9mb250RmFjZVZhbHVlQ2FjaGUuY2xlYXIoKTsKIAotICAg
IFJlZlB0cjxDU1NWYWx1ZUxpc3Q+JiB2YWx1ZSA9IG1fZm9udEZhY2VWYWx1ZUNhY2hlLmFkZChz
dHJpbmcsIDApLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4mIHZh
bHVlID0gbV9mb250RmFjZVZhbHVlQ2FjaGUuYWRkKHN0cmluZywgMCkuaXRlcmF0b3ItPnZhbHVl
OwogICAgIGlmICghdmFsdWUpCiAgICAgICAgIHZhbHVlID0gQ1NTUGFyc2VyOjpwYXJzZUZvbnRG
YWNlVmFsdWUoc3RyaW5nLCBjb250ZXh0U3R5bGVTaGVldCk7CiAgICAgcmV0dXJuIHZhbHVlOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydHlTZXQuY3BwIGIvU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydHlTZXQuY3BwCmluZGV4IDg3MzQ5OGRlYzQ2Mzg5
ZTZlMzU1NjlhN2EyYjY5YTExZGY0N2VjMzMuLjNhMzQ4ZjE4YjRlMjdjM2Q0MDcyYWZkOGM5ODFl
YzdmYTQ4ODIzZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnR5
U2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0eVNldC5jcHAKQEAg
LTcxLDcgKzcxLDcgQEAgU3R5bGVQcm9wZXJ0eVNldDo6U3R5bGVQcm9wZXJ0eVNldChjb25zdCBD
U1NQcm9wZXJ0eSogcHJvcGVydGllcywgaW50IG51bVByb3BlcnQKIAogICAgICAgICBIYXNoTWFw
PGludCwgYm9vbD46Oml0ZXJhdG9yIGl0ID0gY2FuZGlkYXRlcy5maW5kKHByb3BlcnR5LmlkKCkp
OwogICAgICAgICBpZiAoaXQgIT0gY2FuZGlkYXRlcy5lbmQoKSkgewotICAgICAgICAgICAgaWYg
KCFpbXBvcnRhbnQgJiYgaXQtPnNlY29uZCkKKyAgICAgICAgICAgIGlmICghaW1wb3J0YW50ICYm
IGl0LT52YWx1ZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIHJlbW92
ZVByb3BlcnR5KHByb3BlcnR5LmlkKCkpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vQ2hlY2tlZFJhZGlvQnV0dG9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
Q2hlY2tlZFJhZGlvQnV0dG9ucy5jcHAKaW5kZXggZTY3MjMyOWFmOGRlMzc4YmVmZGZjMTRmOGFj
YmQwZjJlYzBjNzQwNS4uOWZhNTA5YmI5NTFkMzgwOTE0MDAwMDExZWU1Y2U2NTE0YTk4ZDQ2YiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0NoZWNrZWRSYWRpb0J1dHRvbnMuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGVja2VkUmFkaW9CdXR0b25zLmNwcApAQCAtMTg1LDcg
KzE4NSw3IEBAIHZvaWQgQ2hlY2tlZFJhZGlvQnV0dG9uczo6YWRkQnV0dG9uKEhUTUxJbnB1dEVs
ZW1lbnQqIGVsZW1lbnQpCiAgICAgaWYgKCFtX25hbWVUb0dyb3VwTWFwKQogICAgICAgICBtX25h
bWVUb0dyb3VwTWFwID0gYWRvcHRQdHIobmV3IE5hbWVUb0dyb3VwTWFwKTsKIAotICAgIE93blB0
cjxSYWRpb0J1dHRvbkdyb3VwPiYgZ3JvdXAgPSBtX25hbWVUb0dyb3VwTWFwLT5hZGQoZWxlbWVu
dC0+bmFtZSgpLmltcGwoKSwgUGFzc093blB0cjxSYWRpb0J1dHRvbkdyb3VwPigpKS5pdGVyYXRv
ci0+c2Vjb25kOworICAgIE93blB0cjxSYWRpb0J1dHRvbkdyb3VwPiYgZ3JvdXAgPSBtX25hbWVU
b0dyb3VwTWFwLT5hZGQoZWxlbWVudC0+bmFtZSgpLmltcGwoKSwgUGFzc093blB0cjxSYWRpb0J1
dHRvbkdyb3VwPigpKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCFncm91cCkKICAgICAgICAg
Z3JvdXAgPSBSYWRpb0J1dHRvbkdyb3VwOjpjcmVhdGUoKTsKICAgICBncm91cC0+YWRkKGVsZW1l
bnQpOwpAQCAtMjQ2LDggKzI0Niw4IEBAIHZvaWQgQ2hlY2tlZFJhZGlvQnV0dG9uczo6cmVtb3Zl
QnV0dG9uKEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgTmFtZVRvR3JvdXBNYXA6Oml0
ZXJhdG9yIGl0ID0gbV9uYW1lVG9Hcm91cE1hcC0+ZmluZChlbGVtZW50LT5uYW1lKCkuaW1wbCgp
KTsKICAgICBpZiAoaXQgPT0gbV9uYW1lVG9Hcm91cE1hcC0+ZW5kKCkpCiAgICAgICAgIHJldHVy
bjsKLSAgICBpdC0+c2Vjb25kLT5yZW1vdmUoZWxlbWVudCk7Ci0gICAgaWYgKGl0LT5zZWNvbmQt
PmlzRW1wdHkoKSkgeworICAgIGl0LT52YWx1ZS0+cmVtb3ZlKGVsZW1lbnQpOworICAgIGlmIChp
dC0+dmFsdWUtPmlzRW1wdHkoKSkgewogICAgICAgICAvLyBGSVhNRTogV2UgbWF5IHNraXAgZGVh
bGxvY2F0aW5nIHRoZSBlbXB0eSBSYWRpb0J1dHRvbkdyb3VwIGZvcgogICAgICAgICAvLyBwZXJm
b3JtYW5jZSBpbXByb3ZlbWVudC4gSWYgd2UgZG8gc28sIHdlIG5lZWQgdG8gY2hhbmdlIHRoZSBr
ZXkgdHlwZQogICAgICAgICAvLyBvZiBtX25hbWVUb0dyb3VwTWFwIGZyb20gQXRvbWljU3RyaW5n
SW1wbCogdG8gUmVmUHRyPEF0b21pY1N0cmluZ0ltcGw+LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL0NoaWxkTGlzdE11dGF0aW9uU2NvcGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9t
L0NoaWxkTGlzdE11dGF0aW9uU2NvcGUuY3BwCmluZGV4IGM1Y2IzYWQ5ZjZlYWI3OGQ4OWU1ZDY3
ZWE5YzQzNTIzMjI5N2UwN2UuLjUzN2RhNDEyYTU1Yjg4NGJjZWY5ZTE3ZjA0Zjk0NzVlMDc2M2Ey
YTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZExpc3RNdXRhdGlvblNjb3Bl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5jcHAK
QEAgLTE5MywyNyArMTkzLDI3IEBAIHZvaWQgQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRp
b25BY2N1bXVsYXRpb25Sb3V0ZXI6OmNoaWxkQWRkZWQoTm9kZSogdGFyZ2V0CiB7CiAgICAgSGFz
aE1hcDxOb2RlKiwgT3duUHRyPENoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11
bGF0b3I+ID46Oml0ZXJhdG9yIGl0ZXIgPSBtX2FjY3VtdWxhdGlvbnMuZmluZCh0YXJnZXQpOwog
ICAgIEFTU0VSVChpdGVyICE9IG1fYWNjdW11bGF0aW9ucy5lbmQoKSk7Ci0gICAgaWYgKGl0ZXIg
PT0gbV9hY2N1bXVsYXRpb25zLmVuZCgpIHx8ICFpdGVyLT5zZWNvbmQpCisgICAgaWYgKGl0ZXIg
PT0gbV9hY2N1bXVsYXRpb25zLmVuZCgpIHx8ICFpdGVyLT52YWx1ZSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgaXRlci0+c2Vjb25kLT5jaGlsZEFkZGVkKGNoaWxkKTsKKyAgICBpdGVyLT52YWx1
ZS0+Y2hpbGRBZGRlZChjaGlsZCk7CiB9CiAKIHZvaWQgQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6
TXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXI6OndpbGxSZW1vdmVDaGlsZChOb2RlKiB0YXJnZXQs
IE5vZGUqIGNoaWxkKQogewogICAgIEhhc2hNYXA8Tm9kZSosIE93blB0cjxDaGlsZExpc3RNdXRh
dGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdG9yPiA+OjppdGVyYXRvciBpdGVyID0gbV9hY2N1
bXVsYXRpb25zLmZpbmQodGFyZ2V0KTsKICAgICBBU1NFUlQoaXRlciAhPSBtX2FjY3VtdWxhdGlv
bnMuZW5kKCkpOwotICAgIGlmIChpdGVyID09IG1fYWNjdW11bGF0aW9ucy5lbmQoKSB8fCAhaXRl
ci0+c2Vjb25kKQorICAgIGlmIChpdGVyID09IG1fYWNjdW11bGF0aW9ucy5lbmQoKSB8fCAhaXRl
ci0+dmFsdWUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGl0ZXItPnNlY29uZC0+d2lsbFJlbW92
ZUNoaWxkKGNoaWxkKTsKKyAgICBpdGVyLT52YWx1ZS0+d2lsbFJlbW92ZUNoaWxkKGNoaWxkKTsK
IH0KIAogdm9pZCBDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdGlvblJv
dXRlcjo6aW5jcmVtZW50U2NvcGluZ0xldmVsKE5vZGUqIHRhcmdldCkKIHsKICAgICBTY29waW5n
TGV2ZWxNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX3Njb3BpbmdMZXZlbHMuYWRkKHRhcmdldCwg
MSk7CiAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICArKyhyZXN1bHQuaXRl
cmF0b3ItPnNlY29uZCk7CisgICAgICAgICsrKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCkBAIC0yMzAsOCArMjMwLDggQEAgdm9pZCBDaGlsZExpc3RN
dXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlcjo6ZGVjcmVtZW50U2NvcGlu
Z0xldmVsKE4KICAgICBTY29waW5nTGV2ZWxNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3Njb3BpbmdM
ZXZlbHMuZmluZCh0YXJnZXQpOwogICAgIEFTU0VSVChpdGVyICE9IG1fc2NvcGluZ0xldmVscy5l
bmQoKSk7CiAKLSAgICAtLShpdGVyLT5zZWNvbmQpOwotICAgIGlmIChpdGVyLT5zZWNvbmQgPiAw
KQorICAgIC0tKGl0ZXItPnZhbHVlKTsKKyAgICBpZiAoaXRlci0+dmFsdWUgPiAwKQogICAgICAg
ICByZXR1cm47CiAKICAgICBtX3Njb3BpbmdMZXZlbHMucmVtb3ZlKGl0ZXIpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5jcHAKaW5kZXggNjdlZDkyMzEzMDVlOGFlNjRlZjllMzdmODE0OTk4ODdiYmQzNjU2
Yy4uYTkyNmUwMjJiZjU5NGU5MGYzZTAyYmZiMjlhODc3MzFkNzU5NzkwYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnQuY3BwCkBAIC0yNzM0LDcgKzI3MzQsNyBAQCBjb25zdCBWZWN0b3I8UmVmUHRyPENT
U1N0eWxlU2hlZXQ+ID4qIERvY3VtZW50OjpwYWdlR3JvdXBVc2VyU2hlZXRzKCkgY29uc3QKIAog
ICAgIFVzZXJTdHlsZVNoZWV0TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBzaGVldHNNYXAtPmVu
ZCgpOwogICAgIGZvciAoVXNlclN0eWxlU2hlZXRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gc2hl
ZXRzTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgY29uc3QgVXNlclN0
eWxlU2hlZXRWZWN0b3IqIHNoZWV0cyA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIGNvbnN0
IFVzZXJTdHlsZVNoZWV0VmVjdG9yKiBzaGVldHMgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaGVldHMtPnNpemUoKTsgKytpKSB7CiAgICAgICAg
ICAgICBjb25zdCBVc2VyU3R5bGVTaGVldCogc2hlZXQgPSBzaGVldHMtPmF0KGkpLmdldCgpOwog
ICAgICAgICAgICAgaWYgKHNoZWV0LT5pbmplY3RlZEZyYW1lcygpID09IEluamVjdEluVG9wRnJh
bWVPbmx5ICYmIG93bmVyRWxlbWVudCgpKQpAQCAtNDUzMCw3ICs0NTMwLDcgQEAgSFRNTEFsbENv
bGxlY3Rpb24qIERvY3VtZW50OjphbGwoKQogCiBIVE1MQ29sbGVjdGlvbiogRG9jdW1lbnQ6Ondp
bmRvd05hbWVkSXRlbXMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKQogewotICAgIE93blB0cjxI
VE1MTmFtZUNvbGxlY3Rpb24+JiBjb2xsZWN0aW9uID0gbV93aW5kb3dOYW1lZEl0ZW1Db2xsZWN0
aW9ucy5hZGQobmFtZS5pbXBsKCksIG51bGxwdHIpLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgT3du
UHRyPEhUTUxOYW1lQ29sbGVjdGlvbj4mIGNvbGxlY3Rpb24gPSBtX3dpbmRvd05hbWVkSXRlbUNv
bGxlY3Rpb25zLmFkZChuYW1lLmltcGwoKSwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwogICAg
IGlmICghY29sbGVjdGlvbikKICAgICAgICAgY29sbGVjdGlvbiA9IEhUTUxOYW1lQ29sbGVjdGlv
bjo6Y3JlYXRlKHRoaXMsIFdpbmRvd05hbWVkSXRlbXMsIG5hbWUpOwogICAgIHJldHVybiBjb2xs
ZWN0aW9uLmdldCgpOwpAQCAtNDUzOCw3ICs0NTM4LDcgQEAgSFRNTENvbGxlY3Rpb24qIERvY3Vt
ZW50Ojp3aW5kb3dOYW1lZEl0ZW1zKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkKIAogSFRNTENv
bGxlY3Rpb24qIERvY3VtZW50Ojpkb2N1bWVudE5hbWVkSXRlbXMoY29uc3QgQXRvbWljU3RyaW5n
JiBuYW1lKQogewotICAgIE93blB0cjxIVE1MTmFtZUNvbGxlY3Rpb24+JiBjb2xsZWN0aW9uID0g
bV9kb2N1bWVudE5hbWVkSXRlbUNvbGxlY3Rpb25zLmFkZChuYW1lLmltcGwoKSwgbnVsbHB0ciku
aXRlcmF0b3ItPnNlY29uZDsKKyAgICBPd25QdHI8SFRNTE5hbWVDb2xsZWN0aW9uPiYgY29sbGVj
dGlvbiA9IG1fZG9jdW1lbnROYW1lZEl0ZW1Db2xsZWN0aW9ucy5hZGQobmFtZS5pbXBsKCksIG51
bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoIWNvbGxlY3Rpb24pCiAgICAgICAgIGNv
bGxlY3Rpb24gPSBIVE1MTmFtZUNvbGxlY3Rpb246OmNyZWF0ZSh0aGlzLCBEb2N1bWVudE5hbWVk
SXRlbXMsIG5hbWUpOwogICAgIHJldHVybiBjb2xsZWN0aW9uLmdldCgpOwpAQCAtNDYzMyw3ICs0
NjMzLDcgQEAgdm9pZCBEb2N1bWVudDo6c2V0U3RhdGVGb3JOZXdGb3JtRWxlbWVudHMoY29uc3Qg
VmVjdG9yPFN0cmluZz4mIHN0YXRlVmVjdG9yKQogICAgICAgICBGb3JtRWxlbWVudEtleSBrZXko
YS5pbXBsKCksIGIuaW1wbCgpKTsKICAgICAgICAgSXRlcmF0b3IgaXQgPSBtX3N0YXRlRm9yTmV3
Rm9ybUVsZW1lbnRzLmZpbmQoa2V5KTsKICAgICAgICAgaWYgKGl0ICE9IG1fc3RhdGVGb3JOZXdG
b3JtRWxlbWVudHMuZW5kKCkpCi0gICAgICAgICAgICBpdC0+c2Vjb25kLmFwcGVuZChjKTsKKyAg
ICAgICAgICAgIGl0LT52YWx1ZS5hcHBlbmQoYyk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAg
ICAgVmVjdG9yPFN0cmluZz4gdigxKTsKICAgICAgICAgICAgIHZbMF0gPSBjOwpAQCAtNDY1Mywx
MCArNDY1MywxMCBAQCBib29sIERvY3VtZW50Ojp0YWtlU3RhdGVGb3JGb3JtRWxlbWVudChBdG9t
aWNTdHJpbmdJbXBsKiBuYW1lLCBBdG9taWNTdHJpbmdJbXBsKgogICAgIEl0ZXJhdG9yIGl0ID0g
bV9zdGF0ZUZvck5ld0Zvcm1FbGVtZW50cy5maW5kKEZvcm1FbGVtZW50S2V5KG5hbWUsIHR5cGUp
KTsKICAgICBpZiAoaXQgPT0gbV9zdGF0ZUZvck5ld0Zvcm1FbGVtZW50cy5lbmQoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIEFTU0VSVChpdC0+c2Vjb25kLnNpemUoKSk7Ci0gICAgc3Rh
dGUgPSBpdC0+c2Vjb25kLmxhc3QoKTsKLSAgICBpZiAoaXQtPnNlY29uZC5zaXplKCkgPiAxKQot
ICAgICAgICBpdC0+c2Vjb25kLnJlbW92ZUxhc3QoKTsKKyAgICBBU1NFUlQoaXQtPnZhbHVlLnNp
emUoKSk7CisgICAgc3RhdGUgPSBpdC0+dmFsdWUubGFzdCgpOworICAgIGlmIChpdC0+dmFsdWUu
c2l6ZSgpID4gMSkKKyAgICAgICAgaXQtPnZhbHVlLnJlbW92ZUxhc3QoKTsKICAgICBlbHNlCiAg
ICAgICAgIG1fc3RhdGVGb3JOZXdGb3JtRWxlbWVudHMucmVtb3ZlKGl0KTsKICAgICByZXR1cm4g
dHJ1ZTsKQEAgLTQ5MzEsNyArNDkzMSw3IEBAIENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIERvY3Vt
ZW50OjpnZXRDU1NDYW52YXNDb250ZXh0KGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QKIAogSFRN
TENhbnZhc0VsZW1lbnQqIERvY3VtZW50OjpnZXRDU1NDYW52YXNFbGVtZW50KGNvbnN0IFN0cmlu
ZyYgbmFtZSkKIHsKLSAgICBSZWZQdHI8SFRNTENhbnZhc0VsZW1lbnQ+JiBlbGVtZW50ID0gbV9j
c3NDYW52YXNFbGVtZW50cy5hZGQobmFtZSwgMCkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBSZWZQ
dHI8SFRNTENhbnZhc0VsZW1lbnQ+JiBlbGVtZW50ID0gbV9jc3NDYW52YXNFbGVtZW50cy5hZGQo
bmFtZSwgMCkuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghZWxlbWVudCkKICAgICAgICAgZWxl
bWVudCA9IEhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGUodGhpcyk7CiAgICAgcmV0dXJuIGVsZW1l
bnQuZ2V0KCk7CkBAIC01NzM2LDEwICs1NzM2LDEwIEBAIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IERv
Y3VtZW50OjpnZXRJdGVtcyhjb25zdCBTdHJpbmcmIHR5cGVOYW1lcykKIAogICAgIE5vZGVMaXN0
c05vZGVEYXRhOjpNaWNyb0RhdGFJdGVtTGlzdENhY2hlOjpBZGRSZXN1bHQgcmVzdWx0ID0gbm9k
ZUxpc3RzLT5tX21pY3JvRGF0YUl0ZW1MaXN0Q2FjaGUuYWRkKGxvY2FsVHlwZU5hbWVzLCAwKTsK
ICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxO
b2RlTGlzdD4ocmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOworICAgICAgICByZXR1cm4gUGFzc1Jl
ZlB0cjxOb2RlTGlzdD4ocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CiAKICAgICBSZWZQdHI8TWlj
cm9EYXRhSXRlbUxpc3Q+IGxpc3QgPSBNaWNyb0RhdGFJdGVtTGlzdDo6Y3JlYXRlKHRoaXMsIHR5
cGVOYW1lcyk7Ci0gICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBsaXN0LmdldCgpOworICAg
IHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBsaXN0LmdldCgpOwogICAgIHJldHVybiBsaXN0LnJl
bGVhc2UoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFy
a2VyQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250
cm9sbGVyLmNwcAppbmRleCBjMjUwMjNmMmI4ZjE4NzNjNDBkYTZhN2M4MDRjNTM4MGQxNjJmZjcx
Li5mYmQzZjE4ZjQyYWU1MjNkYTNmNGRhNzZlNWEwMzA2ZTkwMTI2NWE2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcApAQCAtMzAxLDcgKzMw
MSw3IEBAIERvY3VtZW50TWFya2VyKiBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Om1hcmtlckNv
bnRhaW5pbmdQb2ludChjb25zdCBMYXlvdXRQb2luCiAgICAgTWFya2VyTWFwOjppdGVyYXRvciBl
bmQgPSBtX21hcmtlcnMuZW5kKCk7CiAgICAgZm9yIChNYXJrZXJNYXA6Oml0ZXJhdG9yIG5vZGVJ
dGVyYXRvciA9IG1fbWFya2Vycy5iZWdpbigpOyBub2RlSXRlcmF0b3IgIT0gZW5kOyArK25vZGVJ
dGVyYXRvcikgewogICAgICAgICAvLyBpbm5lciBsb29wOyBwcm9jZXNzIGVhY2ggbWFya2VyIGlu
IHRoaXMgbm9kZQotICAgICAgICBNYXJrZXJMaXN0KiBsaXN0ID0gbm9kZUl0ZXJhdG9yLT5zZWNv
bmQ7CisgICAgICAgIE1hcmtlckxpc3QqIGxpc3QgPSBub2RlSXRlcmF0b3ItPnZhbHVlOwogICAg
ICAgICB1bnNpZ25lZCBtYXJrZXJDb3VudCA9IGxpc3QtPnNpemUoKTsKICAgICAgICAgZm9yICh1
bnNpZ25lZCBtYXJrZXJJbmRleCA9IDA7IG1hcmtlckluZGV4IDwgbWFya2VyQ291bnQ7ICsrbWFy
a2VySW5kZXgpIHsKICAgICAgICAgICAgIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXImIG1hcmtlciA9
IGxpc3QtPmF0KG1hcmtlckluZGV4KTsKQEAgLTM4OSw3ICszODksNyBAQCBWZWN0b3I8SW50UmVj
dD4gRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW5kZXJlZFJlY3RzRm9yTWFya2VycyhEb2N1
bWVudE1hcmtlcgogICAgIE1hcmtlck1hcDo6aXRlcmF0b3IgZW5kID0gbV9tYXJrZXJzLmVuZCgp
OwogICAgIGZvciAoTWFya2VyTWFwOjppdGVyYXRvciBub2RlSXRlcmF0b3IgPSBtX21hcmtlcnMu
YmVnaW4oKTsgbm9kZUl0ZXJhdG9yICE9IGVuZDsgKytub2RlSXRlcmF0b3IpIHsKICAgICAgICAg
Ly8gaW5uZXIgbG9vcDsgcHJvY2VzcyBlYWNoIG1hcmtlciBpbiB0aGlzIG5vZGUKLSAgICAgICAg
TWFya2VyTGlzdCogbGlzdCA9IG5vZGVJdGVyYXRvci0+c2Vjb25kOworICAgICAgICBNYXJrZXJM
aXN0KiBsaXN0ID0gbm9kZUl0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgdW5zaWduZWQgbWFya2Vy
Q291bnQgPSBsaXN0LT5zaXplKCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgbWFya2VySW5kZXgg
PSAwOyBtYXJrZXJJbmRleCA8IG1hcmtlckNvdW50OyArK21hcmtlckluZGV4KSB7CiAgICAgICAg
ICAgICBjb25zdCBSZW5kZXJlZERvY3VtZW50TWFya2VyJiBtYXJrZXIgPSBsaXN0LT5hdChtYXJr
ZXJJbmRleCk7CkBAIC00MTYsNyArNDE2LDcgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXI6OnJlbW92ZU1hcmtlcnMoTm9kZSogbm9kZSwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclQKICAg
ICAKICAgICBNYXJrZXJNYXA6Oml0ZXJhdG9yIGl0ZXJhdG9yID0gbV9tYXJrZXJzLmZpbmQobm9k
ZSk7CiAgICAgaWYgKGl0ZXJhdG9yICE9IG1fbWFya2Vycy5lbmQoKSkKLSAgICAgICAgcmVtb3Zl
TWFya2Vyc0Zyb21MaXN0KG5vZGUsIGl0ZXJhdG9yLT5zZWNvbmQsIG1hcmtlclR5cGVzKTsKKyAg
ICAgICAgcmVtb3ZlTWFya2Vyc0Zyb21MaXN0KG5vZGUsIGl0ZXJhdG9yLT52YWx1ZSwgbWFya2Vy
VHlwZXMpOwogfQogCiB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVtb3ZlTWFya2Vy
cyhEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZXMgbWFya2VyVHlwZXMpCkBAIC00MjksNyArNDI5
LDcgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbW92ZU1hcmtlcnMoRG9jdW1l
bnRNYXJrZXI6Ok1hcmtlclR5cGVzIG1hcmtlclQKICAgICBNYXJrZXJNYXAgbWFya2VyTWFwQ29w
eSA9IG1fbWFya2VyczsKICAgICBNYXJrZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IG1hcmtlck1hcENv
cHkuZW5kKCk7CiAgICAgZm9yIChNYXJrZXJNYXA6Oml0ZXJhdG9yIGkgPSBtYXJrZXJNYXBDb3B5
LmJlZ2luKCk7IGkgIT0gZW5kOyArK2kpCi0gICAgICAgIHJlbW92ZU1hcmtlcnNGcm9tTGlzdChp
LT5maXJzdC5nZXQoKSwgaS0+c2Vjb25kLCBtYXJrZXJUeXBlcyk7CisgICAgICAgIHJlbW92ZU1h
cmtlcnNGcm9tTGlzdChpLT5rZXkuZ2V0KCksIGktPnZhbHVlLCBtYXJrZXJUeXBlcyk7CiAgICAg
bV9wb3NzaWJseUV4aXN0aW5nTWFya2VyVHlwZXMucmVtb3ZlKG1hcmtlclR5cGVzKTsKIH0KIApA
QCAtNDg1LDEwICs0ODUsMTAgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlcGFp
bnRNYXJrZXJzKERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlcyBtYXJrZXIKICAgICAvLyBvdXRl
ciBsb29wOiBwcm9jZXNzIGVhY2ggbWFya2VyZWQgbm9kZSBpbiB0aGUgZG9jdW1lbnQKICAgICBN
YXJrZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fbWFya2Vycy5lbmQoKTsKICAgICBmb3IgKE1hcmtl
ck1hcDo6aXRlcmF0b3IgaSA9IG1fbWFya2Vycy5iZWdpbigpOyBpICE9IGVuZDsgKytpKSB7Ci0g
ICAgICAgIE5vZGUqIG5vZGUgPSBpLT5maXJzdC5nZXQoKTsKKyAgICAgICAgTm9kZSogbm9kZSA9
IGktPmtleS5nZXQoKTsKIAogICAgICAgICAvLyBpbm5lciBsb29wOiBwcm9jZXNzIGVhY2ggbWFy
a2VyIGluIHRoZSBjdXJyZW50IG5vZGUKLSAgICAgICAgTWFya2VyTGlzdCogbGlzdCA9IGktPnNl
Y29uZDsKKyAgICAgICAgTWFya2VyTGlzdCogbGlzdCA9IGktPnZhbHVlOwogICAgICAgICBib29s
IG5vZGVOZWVkc1JlcGFpbnQgPSBmYWxzZTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
IT0gbGlzdC0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIERvY3VtZW50TWFya2VyIG1hcmtl
ciA9IGxpc3QtPmF0KGkpOwpAQCAtNTE2LDcgKzUxNiw3IEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJD
b250cm9sbGVyOjppbnZhbGlkYXRlUmVuZGVyZWRSZWN0c0Zvck1hcmtlcnNJblJlY3QoY29uc3Qg
TGF5CiAgICAgZm9yIChNYXJrZXJNYXA6Oml0ZXJhdG9yIGkgPSBtX21hcmtlcnMuYmVnaW4oKTsg
aSAhPSBlbmQ7ICsraSkgewogCiAgICAgICAgIC8vIGlubmVyIGxvb3A6IHByb2Nlc3MgZWFjaCBy
ZWN0IGluIHRoZSBjdXJyZW50IG5vZGUKLSAgICAgICAgTWFya2VyTGlzdCogbGlzdCA9IGktPnNl
Y29uZDsKKyAgICAgICAgTWFya2VyTGlzdCogbGlzdCA9IGktPnZhbHVlOwogICAgICAgICBmb3Ig
KHNpemVfdCBsaXN0SW5kZXggPSAwOyBsaXN0SW5kZXggPCBsaXN0LT5zaXplKCk7ICsrbGlzdElu
ZGV4KQogICAgICAgICAgICAgbGlzdC0+YXQobGlzdEluZGV4KS5pbnZhbGlkYXRlKHIpOwogICAg
IH0KQEAgLTY2NSw5ICs2NjUsOSBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6c2hv
d01hcmtlcnMoKSBjb25zdAogICAgIGZwcmludGYoc3RkZXJyLCAiJWQgbm9kZXMgaGF2ZSBtYXJr
ZXJzOlxuIiwgbV9tYXJrZXJzLnNpemUoKSk7CiAgICAgTWFya2VyTWFwOjpjb25zdF9pdGVyYXRv
ciBlbmQgPSBtX21hcmtlcnMuZW5kKCk7CiAgICAgZm9yIChNYXJrZXJNYXA6OmNvbnN0X2l0ZXJh
dG9yIG5vZGVJdGVyYXRvciA9IG1fbWFya2Vycy5iZWdpbigpOyBub2RlSXRlcmF0b3IgIT0gZW5k
OyArK25vZGVJdGVyYXRvcikgewotICAgICAgICBOb2RlKiBub2RlID0gbm9kZUl0ZXJhdG9yLT5m
aXJzdC5nZXQoKTsKKyAgICAgICAgTm9kZSogbm9kZSA9IG5vZGVJdGVyYXRvci0+a2V5LmdldCgp
OwogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVwIiwgbm9kZSk7Ci0gICAgICAgIE1hcmtlckxp
c3QqIGxpc3QgPSBub2RlSXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgTWFya2VyTGlzdCogbGlz
dCA9IG5vZGVJdGVyYXRvci0+dmFsdWU7CiAgICAgICAgIGZvciAodW5zaWduZWQgbWFya2VySW5k
ZXggPSAwOyBtYXJrZXJJbmRleCA8IGxpc3QtPnNpemUoKTsgKyttYXJrZXJJbmRleCkgewogICAg
ICAgICAgICAgY29uc3QgRG9jdW1lbnRNYXJrZXImIG1hcmtlciA9IGxpc3QtPmF0KG1hcmtlcklu
ZGV4KTsKICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiICVkOlslZDolZF0oJWQpIiwgbWFy
a2VyLnR5cGUoKSwgbWFya2VyLnN0YXJ0T2Zmc2V0KCksIG1hcmtlci5lbmRPZmZzZXQoKSwgbWFy
a2VyLmFjdGl2ZU1hdGNoKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50T3JkZXJlZE1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRPcmRlcmVkTWFw
LmNwcAppbmRleCAwODJhYTA3NDBhNzFjY2RmNTBlMWQ0MmQyM2QzMTdlNjNhZjJmNGRhLi4xMjk3
ZTUxMDJmYjRlNzljZTNkYjExMjM1NzAyMWUzZGQwNTU0YTUxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnRPcmRlcmVkTWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnRPcmRlcmVkTWFwLmNwcApAQCAtOTgsNyArOTgsNyBAQCB2b2lkIERvY3VtZW50
T3JkZXJlZE1hcDo6cmVtb3ZlKEF0b21pY1N0cmluZ0ltcGwqIGtleSwgRWxlbWVudCogZWxlbWVu
dCkKIAogICAgIG1fbWFwLmNoZWNrQ29uc2lzdGVuY3koKTsKICAgICBNYXA6Oml0ZXJhdG9yIGNh
Y2hlZEl0ZW0gPSBtX21hcC5maW5kKGtleSk7Ci0gICAgaWYgKGNhY2hlZEl0ZW0gIT0gbV9tYXAu
ZW5kKCkgJiYgY2FjaGVkSXRlbS0+c2Vjb25kID09IGVsZW1lbnQpCisgICAgaWYgKGNhY2hlZEl0
ZW0gIT0gbV9tYXAuZW5kKCkgJiYgY2FjaGVkSXRlbS0+dmFsdWUgPT0gZWxlbWVudCkKICAgICAg
ICAgbV9tYXAucmVtb3ZlKGNhY2hlZEl0ZW0pOwogICAgIGVsc2UKICAgICAgICAgbV9kdXBsaWNh
dGVDb3VudHMucmVtb3ZlKGtleSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZl
bnRMaXN0ZW5lck1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRMaXN0ZW5lck1hcC5j
cHAKaW5kZXggYzFmZDRkN2M5NTdhNjRiZmY3ODhmOTAxZTYxZGUwMWNhMDkyMjc3ZS4uYWY4YzQ4
YWVkZTU1MTM2Zjc0ZmUxODQ3ODFkMDUyOGI0MWQ3Y2NhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL0V2ZW50TGlzdGVuZXJNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9F
dmVudExpc3RlbmVyTWFwLmNwcApAQCAtMTAyLDcgKzEwMiw3IEBAIFZlY3RvcjxBdG9taWNTdHJp
bmc+IEV2ZW50TGlzdGVuZXJNYXA6OmV2ZW50VHlwZXMoKSBjb25zdAogICAgICAgICBFdmVudExp
c3RlbmVySGFzaE1hcDo6aXRlcmF0b3IgaXQgPSBtX2hhc2hNYXAtPmJlZ2luKCk7CiAgICAgICAg
IEV2ZW50TGlzdGVuZXJIYXNoTWFwOjppdGVyYXRvciBlbmQgPSBtX2hhc2hNYXAtPmVuZCgpOwog
ICAgICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgdHlwZXMuYXBwZW5k
KGl0LT5maXJzdCk7CisgICAgICAgICAgICB0eXBlcy5hcHBlbmQoaXQtPmtleSk7CiAgICAgfSBl
bHNlIGlmIChtX3NpbmdsZUV2ZW50TGlzdGVuZXJWZWN0b3IpCiAgICAgICAgIHR5cGVzLmFwcGVu
ZChtX3NpbmdsZUV2ZW50TGlzdGVuZXJUeXBlKTsKIApAQCAtMTM2LDkgKzEzNiw5IEBAIGJvb2wg
RXZlbnRMaXN0ZW5lck1hcDo6YWRkKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNz
UmVmUHRyPEV2ZW50TGlzdGVuCiAgICAgaWYgKG1faGFzaE1hcCkgewogICAgICAgICBFdmVudExp
c3RlbmVySGFzaE1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1faGFzaE1hcC0+YWRkKGV2ZW50VHlw
ZSwgbnVsbHB0cik7CiAgICAgICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgICAg
IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gYWRvcHRQdHIobmV3IEV2ZW50TGlzdGVuZXJWZWN0
b3IpOworICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGFkb3B0UHRyKG5ldyBF
dmVudExpc3RlbmVyVmVjdG9yKTsKIAotICAgICAgICByZXR1cm4gYWRkTGlzdGVuZXJUb1ZlY3Rv
cihyZXN1bHQuaXRlcmF0b3ItPnNlY29uZC5nZXQoKSwgbGlzdGVuZXIsIHVzZUNhcHR1cmUpOwor
ICAgICAgICByZXR1cm4gYWRkTGlzdGVuZXJUb1ZlY3RvcihyZXN1bHQuaXRlcmF0b3ItPnZhbHVl
LmdldCgpLCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSk7CiAgICAgfQogCiAgICAgaWYgKCFtX3Npbmds
ZUV2ZW50TGlzdGVuZXJWZWN0b3IpIHsKQEAgLTE3OSw4ICsxNzksOCBAQCBib29sIEV2ZW50TGlz
dGVuZXJNYXA6OnJlbW92ZShjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0
ZW5lciogbGlzdAogICAgIGlmIChpdCA9PSBtX2hhc2hNYXAtPmVuZCgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBib29sIHdhc1JlbW92ZWQgPSByZW1vdmVMaXN0ZW5lckZyb21WZWN0
b3IoaXQtPnNlY29uZC5nZXQoKSwgbGlzdGVuZXIsIHVzZUNhcHR1cmUsIGluZGV4T2ZSZW1vdmVk
TGlzdGVuZXIpOwotICAgIGlmIChpdC0+c2Vjb25kLT5pc0VtcHR5KCkpCisgICAgYm9vbCB3YXNS
ZW1vdmVkID0gcmVtb3ZlTGlzdGVuZXJGcm9tVmVjdG9yKGl0LT52YWx1ZS5nZXQoKSwgbGlzdGVu
ZXIsIHVzZUNhcHR1cmUsIGluZGV4T2ZSZW1vdmVkTGlzdGVuZXIpOworICAgIGlmIChpdC0+dmFs
dWUtPmlzRW1wdHkoKSkKICAgICAgICAgbV9oYXNoTWFwLT5yZW1vdmUoaXQpOwogICAgIHJldHVy
biB3YXNSZW1vdmVkOwogfQpAQCAtMTkzLDcgKzE5Myw3IEBAIEV2ZW50TGlzdGVuZXJWZWN0b3Iq
IEV2ZW50TGlzdGVuZXJNYXA6OmZpbmQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUpCiAg
ICAgICAgIEV2ZW50TGlzdGVuZXJIYXNoTWFwOjppdGVyYXRvciBpdCA9IG1faGFzaE1hcC0+Zmlu
ZChldmVudFR5cGUpOwogICAgICAgICBpZiAoaXQgPT0gbV9oYXNoTWFwLT5lbmQoKSkKICAgICAg
ICAgICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAg
ICAgcmV0dXJuIGl0LT52YWx1ZS5nZXQoKTsKICAgICB9CiAKICAgICBpZiAobV9zaW5nbGVFdmVu
dExpc3RlbmVyVHlwZSA9PSBldmVudFR5cGUpCkBAIC0yMjcsNyArMjI3LDcgQEAgdm9pZCBFdmVu
dExpc3RlbmVyTWFwOjpyZW1vdmVGaXJzdEV2ZW50TGlzdGVuZXJDcmVhdGVkRnJvbU1hcmt1cChj
b25zdCBBdG9taWNTdHIKICAgICAgICAgRXZlbnRMaXN0ZW5lckhhc2hNYXA6Oml0ZXJhdG9yIHJl
c3VsdCA9IG1faGFzaE1hcC0+ZmluZChldmVudFR5cGUpOwogICAgICAgICBBU1NFUlQocmVzdWx0
ICE9IG1faGFzaE1hcC0+ZW5kKCkpOwogCi0gICAgICAgIEV2ZW50TGlzdGVuZXJWZWN0b3IqIGxp
c3RlbmVyVmVjdG9yID0gcmVzdWx0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIEV2ZW50TGlzdGVu
ZXJWZWN0b3IqIGxpc3RlbmVyVmVjdG9yID0gcmVzdWx0LT52YWx1ZS5nZXQoKTsKICAgICAgICAg
QVNTRVJUKGxpc3RlbmVyVmVjdG9yKTsKIAogICAgICAgICByZW1vdmVGaXJzdExpc3RlbmVyQ3Jl
YXRlZEZyb21NYXJrdXAobGlzdGVuZXJWZWN0b3IpOwpAQCAtMjY1LDcgKzI2NSw3IEBAIHZvaWQg
RXZlbnRMaXN0ZW5lck1hcDo6Y29weUV2ZW50TGlzdGVuZXJzTm90Q3JlYXRlZEZyb21NYXJrdXBU
b1RhcmdldChFdmVudFRhcmdlCiAgICAgaWYgKG1faGFzaE1hcCkgewogICAgICAgICBFdmVudExp
c3RlbmVySGFzaE1hcDo6aXRlcmF0b3IgZW5kID0gbV9oYXNoTWFwLT5lbmQoKTsKICAgICAgICAg
Zm9yIChFdmVudExpc3RlbmVySGFzaE1hcDo6aXRlcmF0b3IgaXQgPSBtX2hhc2hNYXAtPmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIGNvcHlMaXN0ZW5lcnNOb3RDcmVhdGVk
RnJvbU1hcmt1cFRvVGFyZ2V0KGl0LT5maXJzdCwgaXQtPnNlY29uZC5nZXQoKSwgdGFyZ2V0KTsK
KyAgICAgICAgICAgIGNvcHlMaXN0ZW5lcnNOb3RDcmVhdGVkRnJvbU1hcmt1cFRvVGFyZ2V0KGl0
LT5rZXksIGl0LT52YWx1ZS5nZXQoKSwgdGFyZ2V0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IApAQCAtMzI1LDcgKzMyNSw3IEBAIEV2ZW50TGlzdGVuZXIqIEV2ZW50TGlzdGVuZXJJdGVyYXRv
cjo6bmV4dExpc3RlbmVyKCkKIAogICAgIGlmIChtX21hcC0+bV9oYXNoTWFwKSB7CiAgICAgICAg
IGZvciAoOyBtX21hcEl0ZXJhdG9yICE9IG1fbWFwRW5kOyArK21fbWFwSXRlcmF0b3IpIHsKLSAg
ICAgICAgICAgIEV2ZW50TGlzdGVuZXJWZWN0b3ImIGxpc3RlbmVycyA9ICptX21hcEl0ZXJhdG9y
LT5zZWNvbmQ7CisgICAgICAgICAgICBFdmVudExpc3RlbmVyVmVjdG9yJiBsaXN0ZW5lcnMgPSAq
bV9tYXBJdGVyYXRvci0+dmFsdWU7CiAgICAgICAgICAgICBpZiAobV9pbmRleCA8IGxpc3RlbmVy
cy5zaXplKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGxpc3RlbmVyc1ttX2luZGV4KytdLmxp
c3RlbmVyLmdldCgpOwogICAgICAgICAgICAgbV9pbmRleCA9IDA7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vTXV0YXRpb25PYnNlcnZlckludGVyZXN0R3JvdXAuY3BwIGIvU291cmNl
L1dlYkNvcmUvZG9tL011dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3VwLmNwcAppbmRleCA2OTk4
NzUyY2Q1YjAwOTFlYWQ4YmRiMGMwMWI5NTU3OGI2ZThjNWU0Li44YTU5YWJhZmU1Y2JkZmY1M2Ez
Yjc3ZjJjMmQ4ODk3NWU2NzAxZjdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0
YXRpb25PYnNlcnZlckludGVyZXN0R3JvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9N
dXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cC5jcHAKQEAgLTYxLDcgKzYxLDcgQEAgTXV0YXRp
b25PYnNlcnZlckludGVyZXN0R3JvdXA6Ok11dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3VwKEhh
c2hNYXA8V2ViS2l0TXV0YXQKIGJvb2wgTXV0YXRpb25PYnNlcnZlckludGVyZXN0R3JvdXA6Omlz
T2xkVmFsdWVSZXF1ZXN0ZWQoKQogewogICAgIGZvciAoSGFzaE1hcDxXZWJLaXRNdXRhdGlvbk9i
c2VydmVyKiwgTXV0YXRpb25SZWNvcmREZWxpdmVyeU9wdGlvbnM+OjppdGVyYXRvciBpdGVyID0g
bV9vYnNlcnZlcnMuYmVnaW4oKTsgaXRlciAhPSBtX29ic2VydmVycy5lbmQoKTsgKytpdGVyKSB7
Ci0gICAgICAgIGlmIChoYXNPbGRWYWx1ZShpdGVyLT5zZWNvbmQpKQorICAgICAgICBpZiAoaGFz
T2xkVmFsdWUoaXRlci0+dmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
ICAgIHJldHVybiBmYWxzZTsKQEAgLTcyLDggKzcyLDggQEAgdm9pZCBNdXRhdGlvbk9ic2VydmVy
SW50ZXJlc3RHcm91cDo6ZW5xdWV1ZU11dGF0aW9uUmVjb3JkKFBhc3NSZWZQdHI8TXV0YXRpb25S
ZWMKICAgICBSZWZQdHI8TXV0YXRpb25SZWNvcmQ+IG11dGF0aW9uID0gcHJwTXV0YXRpb247CiAg
ICAgUmVmUHRyPE11dGF0aW9uUmVjb3JkPiBtdXRhdGlvbldpdGhOdWxsT2xkVmFsdWU7CiAgICAg
Zm9yIChIYXNoTWFwPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIqLCBNdXRhdGlvblJlY29yZERlbGl2
ZXJ5T3B0aW9ucz46Oml0ZXJhdG9yIGl0ZXIgPSBtX29ic2VydmVycy5iZWdpbigpOyBpdGVyICE9
IG1fb2JzZXJ2ZXJzLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgV2ViS2l0TXV0YXRpb25PYnNl
cnZlciogb2JzZXJ2ZXIgPSBpdGVyLT5maXJzdDsKLSAgICAgICAgaWYgKGhhc09sZFZhbHVlKGl0
ZXItPnNlY29uZCkpIHsKKyAgICAgICAgV2ViS2l0TXV0YXRpb25PYnNlcnZlciogb2JzZXJ2ZXIg
PSBpdGVyLT5rZXk7CisgICAgICAgIGlmIChoYXNPbGRWYWx1ZShpdGVyLT52YWx1ZSkpIHsKICAg
ICAgICAgICAgIG9ic2VydmVyLT5lbnF1ZXVlTXV0YXRpb25SZWNvcmQobXV0YXRpb24pOwogICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAppbmRleCAwNDA3NTI3
YjIwZDk5NzBmMDBkNWIxMjQ3YTc5YjVlYzVhYWFkZmE1Li45ODkxMWYxMDE1OTI3ZjdmMDE0ZmRk
ODc2YTExZWQwN2VmYWY1OTYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCkBAIC0xODcsNyArMTg3LDcgQEAg
dm9pZCBOb2RlOjpkdW1wU3RhdGlzdGljcygpCiAgICAgICAgICAgICAgICAgRWxlbWVudCogZWxl
bWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKTsKICAgICAgICAgICAgICAgICBIYXNo
TWFwPFN0cmluZywgc2l6ZV90Pjo6QWRkUmVzdWx0IHJlc3VsdCA9IHBlclRhZ0NvdW50LmFkZChl
bGVtZW50LT50YWdOYW1lKCksIDEpOwogICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmlzTmV3
RW50cnkpCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKys7Cisg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUrKzsKIAogICAgICAgICAg
ICAgICAgIGlmIChFbGVtZW50QXR0cmlidXRlRGF0YSogYXR0cmlidXRlRGF0YSA9IGVsZW1lbnQt
PmF0dHJpYnV0ZURhdGEoKSkgewogICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzICs9IGF0
dHJpYnV0ZURhdGEtPmxlbmd0aCgpOwpAQCAtMjc1LDcgKzI3NSw3IEBAIHZvaWQgTm9kZTo6ZHVt
cFN0YXRpc3RpY3MoKQogCiAgICAgcHJpbnRmKCJFbGVtZW50IHRhZyBuYW1lIGRpc3RpYnV0aW9u
OlxuIik7CiAgICAgZm9yIChIYXNoTWFwPFN0cmluZywgc2l6ZV90Pjo6aXRlcmF0b3IgaXQgPSBw
ZXJUYWdDb3VudC5iZWdpbigpOyBpdCAhPSBwZXJUYWdDb3VudC5lbmQoKTsgKytpdCkKLSAgICAg
ICAgcHJpbnRmKCIgIE51bWJlciBvZiA8JXM+IHRhZ3M6ICV6dVxuIiwgaXQtPmZpcnN0LnV0Zjgo
KS5kYXRhKCksIGl0LT5zZWNvbmQpOworICAgICAgICBwcmludGYoIiAgTnVtYmVyIG9mIDwlcz4g
dGFnczogJXp1XG4iLCBpdC0+a2V5LnV0ZjgoKS5kYXRhKCksIGl0LT52YWx1ZSk7CiAKICAgICBw
cmludGYoIkF0dHJpYnV0ZXM6XG4iKTsKICAgICBwcmludGYoIiAgTnVtYmVyIG9mIEF0dHJpYnV0
ZXMgKG5vbi1Ob2RlIGFuZCBOb2RlKTogJXp1IFslenVdXG4iLCBhdHRyaWJ1dGVzLCBzaXplb2Yo
QXR0cmlidXRlKSk7CkBAIC00OTYsNyArNDk2LDcgQEAgdm9pZCBOb2RlOjpjbGVhclJhcmVEYXRh
KCkKICAgICBOb2RlUmFyZURhdGE6Ok5vZGVSYXJlRGF0YU1hcCYgZGF0YU1hcCA9IE5vZGVSYXJl
RGF0YTo6cmFyZURhdGFNYXAoKTsKICAgICBOb2RlUmFyZURhdGE6Ok5vZGVSYXJlRGF0YU1hcDo6
aXRlcmF0b3IgaXQgPSBkYXRhTWFwLmZpbmQodGhpcyk7CiAgICAgQVNTRVJUKGl0ICE9IGRhdGFN
YXAuZW5kKCkpOwotICAgIGRlbGV0ZSBpdC0+c2Vjb25kOworICAgIGRlbGV0ZSBpdC0+dmFsdWU7
CiAgICAgZGF0YU1hcC5yZW1vdmUoaXQpOwogICAgIGNsZWFyRmxhZyhIYXNSYXJlRGF0YUZsYWcp
OwogfQpAQCAtMTYxNCwxMCArMTYxNCwxMCBAQCBQYXNzUmVmUHRyPE5vZGVMaXN0PiBOb2RlOjpn
ZXRFbGVtZW50c0J5VGFnTmFtZShjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSkKIAogICAg
IE5vZGVMaXN0c05vZGVEYXRhOjpUYWdOb2RlTGlzdENhY2hlOjpBZGRSZXN1bHQgcmVzdWx0ID0g
ZW5zdXJlUmFyZURhdGEoKS0+ZW5zdXJlTm9kZUxpc3RzKHRoaXMpLT5tX3RhZ05vZGVMaXN0Q2Fj
aGUuYWRkKGxvY2FsTmFtZUF0b20sIDApOwogICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0g
ICAgICAgIHJldHVybiBQYXNzUmVmUHRyPFRhZ05vZGVMaXN0PihyZXN1bHQuaXRlcmF0b3ItPnNl
Y29uZCk7CisgICAgICAgIHJldHVybiBQYXNzUmVmUHRyPFRhZ05vZGVMaXN0PihyZXN1bHQuaXRl
cmF0b3ItPnZhbHVlKTsKIAogICAgIFJlZlB0cjxUYWdOb2RlTGlzdD4gbGlzdCA9IFRhZ05vZGVM
aXN0OjpjcmVhdGUodGhpcywgc3RhckF0b20sIGxvY2FsTmFtZUF0b20pOwotICAgIHJlc3VsdC5p
dGVyYXRvci0+c2Vjb25kID0gbGlzdC5nZXQoKTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVl
ID0gbGlzdC5nZXQoKTsKICAgICByZXR1cm4gbGlzdC5yZWxlYXNlKCk7ICAgCiB9CiAKQEAgLTE2
MzgsMTAgKzE2MzgsMTAgQEAgUGFzc1JlZlB0cjxOb2RlTGlzdD4gTm9kZTo6Z2V0RWxlbWVudHNC
eVRhZ05hbWVOUyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVUKICAgICBOb2RlTGlzdHNO
b2RlRGF0YTo6VGFnTm9kZUxpc3RDYWNoZU5TOjpBZGRSZXN1bHQgcmVzdWx0CiAgICAgICAgID0g
ZW5zdXJlUmFyZURhdGEoKS0+ZW5zdXJlTm9kZUxpc3RzKHRoaXMpLT5tX3RhZ05vZGVMaXN0Q2Fj
aGVOUy5hZGQoUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgbG9jYWxOYW1lQXRvbSwgbmFtZXNwYWNl
VVJJKS5pbXBsKCksIDApOwogICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJl
dHVybiBQYXNzUmVmUHRyPFRhZ05vZGVMaXN0PihyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7Cisg
ICAgICAgIHJldHVybiBQYXNzUmVmUHRyPFRhZ05vZGVMaXN0PihyZXN1bHQuaXRlcmF0b3ItPnZh
bHVlKTsKIAogICAgIFJlZlB0cjxUYWdOb2RlTGlzdD4gbGlzdCA9IFRhZ05vZGVMaXN0OjpjcmVh
dGUodGhpcywgbmFtZXNwYWNlVVJJLmlzRW1wdHkoKSA/IG51bGxBdG9tIDogbmFtZXNwYWNlVVJJ
LCBsb2NhbE5hbWVBdG9tKTsKLSAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IGxpc3QuZ2V0
KCk7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGxpc3QuZ2V0KCk7CiAgICAgcmV0dXJu
IGxpc3QucmVsZWFzZSgpOwogfQogCkBAIC0xNjQ5LDEwICsxNjQ5LDEwIEBAIFBhc3NSZWZQdHI8
Tm9kZUxpc3Q+IE5vZGU6OmdldEVsZW1lbnRzQnlOYW1lKGNvbnN0IFN0cmluZyYgZWxlbWVudE5h
bWUpCiB7CiAgICAgTm9kZUxpc3RzTm9kZURhdGE6Ok5hbWVOb2RlTGlzdENhY2hlOjpBZGRSZXN1
bHQgcmVzdWx0ID0gZW5zdXJlUmFyZURhdGEoKS0+ZW5zdXJlTm9kZUxpc3RzKHRoaXMpLT5tX25h
bWVOb2RlTGlzdENhY2hlLmFkZChlbGVtZW50TmFtZSwgMCk7CiAgICAgaWYgKCFyZXN1bHQuaXNO
ZXdFbnRyeSkKLSAgICAgICAgcmV0dXJuIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+KHJlc3VsdC5pdGVy
YXRvci0+c2Vjb25kKTsKKyAgICAgICAgcmV0dXJuIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+KHJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUpOwogCiAgICAgUmVmUHRyPE5hbWVOb2RlTGlzdD4gbGlzdCA9IE5h
bWVOb2RlTGlzdDo6Y3JlYXRlKHRoaXMsIGVsZW1lbnROYW1lKTsKLSAgICByZXN1bHQuaXRlcmF0
b3ItPnNlY29uZCA9IGxpc3QuZ2V0KCk7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGxp
c3QuZ2V0KCk7CiAgICAgcmV0dXJuIGxpc3QucmVsZWFzZSgpOwogfQogCkBAIC0xNjYxLDEwICsx
NjYxLDEwIEBAIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IE5vZGU6OmdldEVsZW1lbnRzQnlDbGFzc05h
bWUoY29uc3QgU3RyaW5nJiBjbGFzc05hbWVzKQogICAgIE5vZGVMaXN0c05vZGVEYXRhOjpDbGFz
c05vZGVMaXN0Q2FjaGU6OkFkZFJlc3VsdCByZXN1bHQKICAgICAgICAgPSBlbnN1cmVSYXJlRGF0
YSgpLT5lbnN1cmVOb2RlTGlzdHModGhpcyktPm1fY2xhc3NOb2RlTGlzdENhY2hlLmFkZChjbGFz
c05hbWVzLCAwKTsKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXR1cm4g
UGFzc1JlZlB0cjxOb2RlTGlzdD4ocmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOworICAgICAgICBy
ZXR1cm4gUGFzc1JlZlB0cjxOb2RlTGlzdD4ocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CiAKICAg
ICBSZWZQdHI8Q2xhc3NOb2RlTGlzdD4gbGlzdCA9IENsYXNzTm9kZUxpc3Q6OmNyZWF0ZSh0aGlz
LCBjbGFzc05hbWVzKTsKLSAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IGxpc3QuZ2V0KCk7
CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGxpc3QuZ2V0KCk7CiAgICAgcmV0dXJuIGxp
c3QucmVsZWFzZSgpOwogfQogCkBAIC0yMzA4LDEwICsyMzA4LDEwIEBAIHZvaWQgTm9kZUxpc3Rz
Tm9kZURhdGE6OmludmFsaWRhdGVDYWNoZXMoKQogewogICAgIFRhZ05vZGVMaXN0Q2FjaGU6OmNv
bnN0X2l0ZXJhdG9yIHRhZ0NhY2hlRW5kID0gbV90YWdOb2RlTGlzdENhY2hlLmVuZCgpOwogICAg
IGZvciAoVGFnTm9kZUxpc3RDYWNoZTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RhZ05vZGVMaXN0
Q2FjaGUuYmVnaW4oKTsgaXQgIT0gdGFnQ2FjaGVFbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNv
bmQtPmludmFsaWRhdGVDYWNoZSgpOworICAgICAgICBpdC0+dmFsdWUtPmludmFsaWRhdGVDYWNo
ZSgpOwogICAgIFRhZ05vZGVMaXN0Q2FjaGVOUzo6Y29uc3RfaXRlcmF0b3IgdGFnQ2FjaGVOU0Vu
ZCA9IG1fdGFnTm9kZUxpc3RDYWNoZU5TLmVuZCgpOwogICAgIGZvciAoVGFnTm9kZUxpc3RDYWNo
ZU5TOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGFnTm9kZUxpc3RDYWNoZU5TLmJlZ2luKCk7IGl0
ICE9IHRhZ0NhY2hlTlNFbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPmludmFsaWRhdGVD
YWNoZSgpOworICAgICAgICBpdC0+dmFsdWUtPmludmFsaWRhdGVDYWNoZSgpOwogICAgIGludmFs
aWRhdGVDYWNoZXNUaGF0RGVwZW5kT25BdHRyaWJ1dGVzKCk7CiB9CiAKQEAgLTIzMjQsMTggKzIz
MjQsMTggQEAgdm9pZCBOb2RlTGlzdHNOb2RlRGF0YTo6aW52YWxpZGF0ZUNhY2hlc1RoYXREZXBl
bmRPbkF0dHJpYnV0ZXMoKQogCiAgICAgQ2xhc3NOb2RlTGlzdENhY2hlOjppdGVyYXRvciBjbGFz
c0NhY2hlRW5kID0gbV9jbGFzc05vZGVMaXN0Q2FjaGUuZW5kKCk7CiAgICAgZm9yIChDbGFzc05v
ZGVMaXN0Q2FjaGU6Oml0ZXJhdG9yIGl0ID0gbV9jbGFzc05vZGVMaXN0Q2FjaGUuYmVnaW4oKTsg
aXQgIT0gY2xhc3NDYWNoZUVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+aW52YWxpZGF0
ZUNhY2hlKCk7CisgICAgICAgIGl0LT52YWx1ZS0+aW52YWxpZGF0ZUNhY2hlKCk7CiAKICAgICBO
YW1lTm9kZUxpc3RDYWNoZTo6aXRlcmF0b3IgbmFtZUNhY2hlRW5kID0gbV9uYW1lTm9kZUxpc3RD
YWNoZS5lbmQoKTsKICAgICBmb3IgKE5hbWVOb2RlTGlzdENhY2hlOjppdGVyYXRvciBpdCA9IG1f
bmFtZU5vZGVMaXN0Q2FjaGUuYmVnaW4oKTsgaXQgIT0gbmFtZUNhY2hlRW5kOyArK2l0KQotICAg
ICAgICBpdC0+c2Vjb25kLT5pbnZhbGlkYXRlQ2FjaGUoKTsKKyAgICAgICAgaXQtPnZhbHVlLT5p
bnZhbGlkYXRlQ2FjaGUoKTsKICAgICBpZiAobV9sYWJlbHNOb2RlTGlzdENhY2hlKQogICAgICAg
ICBtX2xhYmVsc05vZGVMaXN0Q2FjaGUtPmludmFsaWRhdGVDYWNoZSgpOwogCiAjaWYgRU5BQkxF
KE1JQ1JPREFUQSkKICAgICBNaWNyb0RhdGFJdGVtTGlzdENhY2hlOjppdGVyYXRvciBpdGVtTGlz
dENhY2hlRW5kID0gbV9taWNyb0RhdGFJdGVtTGlzdENhY2hlLmVuZCgpOwogICAgIGZvciAoTWlj
cm9EYXRhSXRlbUxpc3RDYWNoZTo6aXRlcmF0b3IgaXQgPSBtX21pY3JvRGF0YUl0ZW1MaXN0Q2Fj
aGUuYmVnaW4oKTsgaXQgIT0gaXRlbUxpc3RDYWNoZUVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNl
Y29uZC0+aW52YWxpZGF0ZUNhY2hlKCk7CisgICAgICAgIGl0LT52YWx1ZS0+aW52YWxpZGF0ZUNh
Y2hlKCk7CiAjZW5kaWYKIH0KIApAQCAtMjU5Myw3ICsyNTkzLDcgQEAgdm9pZCBOb2RlOjpjb2xs
ZWN0TWF0Y2hpbmdPYnNlcnZlcnNGb3JNdXRhdGlvbihIYXNoTWFwPFdlYktpdE11dGF0aW9uT2Jz
ZXJ2ZXIqLAogICAgICAgICAgICAgICAgIE11dGF0aW9uUmVjb3JkRGVsaXZlcnlPcHRpb25zIGRl
bGl2ZXJ5T3B0aW9ucyA9IHJlZ2lzdHJhdGlvbi0+ZGVsaXZlcnlPcHRpb25zKCk7CiAgICAgICAg
ICAgICAgICAgSGFzaE1hcDxXZWJLaXRNdXRhdGlvbk9ic2VydmVyKiwgTXV0YXRpb25SZWNvcmRE
ZWxpdmVyeU9wdGlvbnM+OjpBZGRSZXN1bHQgcmVzdWx0ID0gb2JzZXJ2ZXJzLmFkZChyZWdpc3Ry
YXRpb24tPm9ic2VydmVyKCksIGRlbGl2ZXJ5T3B0aW9ucyk7CiAgICAgICAgICAgICAgICAgaWYg
KCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9y
LT5zZWNvbmQgfD0gZGVsaXZlcnlPcHRpb25zOworICAgICAgICAgICAgICAgICAgICByZXN1bHQu
aXRlcmF0b3ItPnZhbHVlIHw9IGRlbGl2ZXJ5T3B0aW9uczsKIAogICAgICAgICAgICAgfQogICAg
ICAgICB9CkBAIC0yNjA2LDcgKzI2MDYsNyBAQCB2b2lkIE5vZGU6OmNvbGxlY3RNYXRjaGluZ09i
c2VydmVyc0Zvck11dGF0aW9uKEhhc2hNYXA8V2ViS2l0TXV0YXRpb25PYnNlcnZlciosCiAgICAg
ICAgICAgICAgICAgTXV0YXRpb25SZWNvcmREZWxpdmVyeU9wdGlvbnMgZGVsaXZlcnlPcHRpb25z
ID0gcmVnaXN0cmF0aW9uLT5kZWxpdmVyeU9wdGlvbnMoKTsKICAgICAgICAgICAgICAgICBIYXNo
TWFwPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIqLCBNdXRhdGlvblJlY29yZERlbGl2ZXJ5T3B0aW9u
cz46OkFkZFJlc3VsdCByZXN1bHQgPSBvYnNlcnZlcnMuYWRkKHJlZ2lzdHJhdGlvbi0+b2JzZXJ2
ZXIoKSwgZGVsaXZlcnlPcHRpb25zKTsKICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5pc05l
d0VudHJ5KQotICAgICAgICAgICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCB8PSBk
ZWxpdmVyeU9wdGlvbnM7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFs
dWUgfD0gZGVsaXZlcnlPcHRpb25zOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmNwcAppbmRleCAwMTgw
MDRiZjVkMWNjYzNiM2IyZTZkNDY0OWZlZjRiN2VmYzgxODIyLi43MjAxOTAxYzNjZTVjOTg5ODI2
ZGJkNmM0MTY1OTczZDVhZTg5OWVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUHJv
Y2Vzc2luZ0luc3RydWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUHJvY2Vzc2lu
Z0luc3RydWN0aW9uLmNwcApAQCAtMTE2LDcgKzExNiw3IEBAIHZvaWQgUHJvY2Vzc2luZ0luc3Ry
dWN0aW9uOjpjaGVja1N0eWxlU2hlZXQoKQogICAgICAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5n
Pjo6Y29uc3RfaXRlcmF0b3IgaSA9IGF0dHJzLmZpbmQoInR5cGUiKTsKICAgICAgICAgU3RyaW5n
IHR5cGU7CiAgICAgICAgIGlmIChpICE9IGF0dHJzLmVuZCgpKQotICAgICAgICAgICAgdHlwZSA9
IGktPnNlY29uZDsKKyAgICAgICAgICAgIHR5cGUgPSBpLT52YWx1ZTsKIAogICAgICAgICBtX2lz
Q1NTID0gdHlwZS5pc0VtcHR5KCkgfHwgdHlwZSA9PSAidGV4dC9jc3MiOwogI2lmIEVOQUJMRShY
U0xUKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwCmlu
ZGV4IDkyNDQ1Y2E4MGRhZjYzMzIzOWQyZjc5Y2VlOThkZDlkZDQ0MWIzMjMuLjUzNWI1NzBiNWQ3
ZGU5ZjRhZjkzNTgzZTdjNzFkMTJiMmQ3NTM1YTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
U2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAKQEAgLTE3Myw5ICsxNzMsOSBAQCBib29sIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQ6OmNhblN1c3BlbmRBY3RpdmVET01PYmplY3RzKCkKICAgICBtX2l0
ZXJhdGluZ0FjdGl2ZURPTU9iamVjdHMgPSB0cnVlOwogICAgIEhhc2hNYXA8QWN0aXZlRE9NT2Jq
ZWN0Kiwgdm9pZCo+OjppdGVyYXRvciBhY3RpdmVPYmplY3RzRW5kID0gbV9hY3RpdmVET01PYmpl
Y3RzLmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDxBY3RpdmVET01PYmplY3QqLCB2b2lkKj46Oml0
ZXJhdG9yIGl0ZXIgPSBtX2FjdGl2ZURPTU9iamVjdHMuYmVnaW4oKTsgaXRlciAhPSBhY3RpdmVP
YmplY3RzRW5kOyArK2l0ZXIpIHsKLSAgICAgICAgQVNTRVJUKGl0ZXItPmZpcnN0LT5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCkgPT0gdGhpcyk7Ci0gICAgICAgIEFTU0VSVChpdGVyLT5maXJzdC0+
c3VzcGVuZElmTmVlZGVkQ2FsbGVkKCkpOwotICAgICAgICBpZiAoIWl0ZXItPmZpcnN0LT5jYW5T
dXNwZW5kKCkpIHsKKyAgICAgICAgQVNTRVJUKGl0ZXItPmtleS0+c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpID09IHRoaXMpOworICAgICAgICBBU1NFUlQoaXRlci0+a2V5LT5zdXNwZW5kSWZOZWVk
ZWRDYWxsZWQoKSk7CisgICAgICAgIGlmICghaXRlci0+a2V5LT5jYW5TdXNwZW5kKCkpIHsKICAg
ICAgICAgICAgIG1faXRlcmF0aW5nQWN0aXZlRE9NT2JqZWN0cyA9IGZhbHNlOwogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC0xOTAsOSArMTkwLDkgQEAgdm9pZCBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0OjpzdXNwZW5kQWN0aXZlRE9NT2JqZWN0cyhBY3RpdmVET01PYmpl
Y3Q6OlJlYXNvbkZvclMKICAgICBtX2l0ZXJhdGluZ0FjdGl2ZURPTU9iamVjdHMgPSB0cnVlOwog
ICAgIEhhc2hNYXA8QWN0aXZlRE9NT2JqZWN0Kiwgdm9pZCo+OjppdGVyYXRvciBhY3RpdmVPYmpl
Y3RzRW5kID0gbV9hY3RpdmVET01PYmplY3RzLmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDxBY3Rp
dmVET01PYmplY3QqLCB2b2lkKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX2FjdGl2ZURPTU9iamVjdHMu
YmVnaW4oKTsgaXRlciAhPSBhY3RpdmVPYmplY3RzRW5kOyArK2l0ZXIpIHsKLSAgICAgICAgQVNT
RVJUKGl0ZXItPmZpcnN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgPT0gdGhpcyk7Ci0gICAg
ICAgIEFTU0VSVChpdGVyLT5maXJzdC0+c3VzcGVuZElmTmVlZGVkQ2FsbGVkKCkpOwotICAgICAg
ICBpdGVyLT5maXJzdC0+c3VzcGVuZCh3aHkpOworICAgICAgICBBU1NFUlQoaXRlci0+a2V5LT5z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCkgPT0gdGhpcyk7CisgICAgICAgIEFTU0VSVChpdGVyLT5r
ZXktPnN1c3BlbmRJZk5lZWRlZENhbGxlZCgpKTsKKyAgICAgICAgaXRlci0+a2V5LT5zdXNwZW5k
KHdoeSk7CiAgICAgfQogICAgIG1faXRlcmF0aW5nQWN0aXZlRE9NT2JqZWN0cyA9IGZhbHNlOwog
ICAgIG1fYWN0aXZlRE9NT2JqZWN0c0FyZVN1c3BlbmRlZCA9IHRydWU7CkBAIC0yMDYsOSArMjA2
LDkgQEAgdm9pZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpyZXN1bWVBY3RpdmVET01PYmplY3Rz
KCkKICAgICBtX2l0ZXJhdGluZ0FjdGl2ZURPTU9iamVjdHMgPSB0cnVlOwogICAgIEhhc2hNYXA8
QWN0aXZlRE9NT2JqZWN0Kiwgdm9pZCo+OjppdGVyYXRvciBhY3RpdmVPYmplY3RzRW5kID0gbV9h
Y3RpdmVET01PYmplY3RzLmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDxBY3RpdmVET01PYmplY3Qq
LCB2b2lkKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX2FjdGl2ZURPTU9iamVjdHMuYmVnaW4oKTsgaXRl
ciAhPSBhY3RpdmVPYmplY3RzRW5kOyArK2l0ZXIpIHsKLSAgICAgICAgQVNTRVJUKGl0ZXItPmZp
cnN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgPT0gdGhpcyk7Ci0gICAgICAgIEFTU0VSVChp
dGVyLT5maXJzdC0+c3VzcGVuZElmTmVlZGVkQ2FsbGVkKCkpOwotICAgICAgICBpdGVyLT5maXJz
dC0+cmVzdW1lKCk7CisgICAgICAgIEFTU0VSVChpdGVyLT5rZXktPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSA9PSB0aGlzKTsKKyAgICAgICAgQVNTRVJUKGl0ZXItPmtleS0+c3VzcGVuZElmTmVl
ZGVkQ2FsbGVkKCkpOworICAgICAgICBpdGVyLT5rZXktPnJlc3VtZSgpOwogICAgIH0KICAgICBt
X2l0ZXJhdGluZ0FjdGl2ZURPTU9iamVjdHMgPSBmYWxzZTsKIH0KQEAgLTIyMCw5ICsyMjAsOSBA
QCB2b2lkIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnN0b3BBY3RpdmVET01PYmplY3RzKCkKICAg
ICBtX2l0ZXJhdGluZ0FjdGl2ZURPTU9iamVjdHMgPSB0cnVlOwogICAgIEhhc2hNYXA8QWN0aXZl
RE9NT2JqZWN0Kiwgdm9pZCo+OjppdGVyYXRvciBhY3RpdmVPYmplY3RzRW5kID0gbV9hY3RpdmVE
T01PYmplY3RzLmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDxBY3RpdmVET01PYmplY3QqLCB2b2lk
Kj46Oml0ZXJhdG9yIGl0ZXIgPSBtX2FjdGl2ZURPTU9iamVjdHMuYmVnaW4oKTsgaXRlciAhPSBh
Y3RpdmVPYmplY3RzRW5kOyArK2l0ZXIpIHsKLSAgICAgICAgQVNTRVJUKGl0ZXItPmZpcnN0LT5z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCkgPT0gdGhpcyk7Ci0gICAgICAgIEFTU0VSVChpdGVyLT5m
aXJzdC0+c3VzcGVuZElmTmVlZGVkQ2FsbGVkKCkpOwotICAgICAgICBpdGVyLT5maXJzdC0+c3Rv
cCgpOworICAgICAgICBBU1NFUlQoaXRlci0+a2V5LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkg
PT0gdGhpcyk7CisgICAgICAgIEFTU0VSVChpdGVyLT5rZXktPnN1c3BlbmRJZk5lZWRlZENhbGxl
ZCgpKTsKKyAgICAgICAgaXRlci0+a2V5LT5zdG9wKCk7CiAgICAgfQogICAgIG1faXRlcmF0aW5n
QWN0aXZlRE9NT2JqZWN0cyA9IGZhbHNlOwogCkBAIC0zODAsNyArMzgwLDcgQEAgdm9pZCBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0OjphZGp1c3RNaW5pbXVtVGltZXJJbnRlcnZhbChkb3VibGUgb2xk
TWluaW11bVRpbWVySW4KIHsKICAgICBpZiAobWluaW11bVRpbWVySW50ZXJ2YWwoKSAhPSBvbGRN
aW5pbXVtVGltZXJJbnRlcnZhbCkgewogICAgICAgICBmb3IgKFRpbWVvdXRNYXA6Oml0ZXJhdG9y
IGl0ZXIgPSBtX3RpbWVvdXRzLmJlZ2luKCk7IGl0ZXIgIT0gbV90aW1lb3V0cy5lbmQoKTsgKytp
dGVyKSB7Ci0gICAgICAgICAgICBET01UaW1lciogdGltZXIgPSBpdGVyLT5zZWNvbmQ7CisgICAg
ICAgICAgICBET01UaW1lciogdGltZXIgPSBpdGVyLT52YWx1ZTsKICAgICAgICAgICAgIHRpbWVy
LT5hZGp1c3RNaW5pbXVtVGltZXJJbnRlcnZhbChvbGRNaW5pbXVtVGltZXJJbnRlcnZhbCk7CiAg
ICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU3BhY2VTcGxp
dFN0cmluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU3BhY2VTcGxpdFN0cmluZy5jcHAKaW5k
ZXggOWNjZTdkOTViNWUxMDQ0M2MwM2VkYTViNzJmMTEyYzU3MDUyZTUxMi4uMWRjMWZiMGRkZTFm
MDIzZjNmOGE2NTNiMjNhYzNkODczOGU4YzM0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL1NwYWNlU3BsaXRTdHJpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TcGFjZVNw
bGl0U3RyaW5nLmNwcApAQCAtMTUwLDcgKzE1MCw3IEBAIFNwYWNlU3BsaXRTdHJpbmdEYXRhOjp+
U3BhY2VTcGxpdFN0cmluZ0RhdGEoKQogCiBQYXNzUmVmUHRyPFNwYWNlU3BsaXRTdHJpbmdEYXRh
PiBTcGFjZVNwbGl0U3RyaW5nRGF0YTo6Y3JlYXRlKGNvbnN0IEF0b21pY1N0cmluZyYgc3RyaW5n
KQogewotICAgIFNwYWNlU3BsaXRTdHJpbmdEYXRhKiYgZGF0YSA9IHNoYXJlZERhdGFNYXAoKS5h
ZGQoc3RyaW5nLCAwKS5pdGVyYXRvci0+c2Vjb25kOworICAgIFNwYWNlU3BsaXRTdHJpbmdEYXRh
KiYgZGF0YSA9IHNoYXJlZERhdGFNYXAoKS5hZGQoc3RyaW5nLCAwKS5pdGVyYXRvci0+dmFsdWU7
CiAgICAgaWYgKCFkYXRhKSB7CiAgICAgICAgIGRhdGEgPSBuZXcgU3BhY2VTcGxpdFN0cmluZ0Rh
dGEoc3RyaW5nKTsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKGRhdGEpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9t
L1N0eWxlZEVsZW1lbnQuY3BwCmluZGV4IDU1YmM0MWQ0MzUxY2E2ODM2YmI1NDRlMTc1NDI1MGQ5
NDFkYWM3MTEuLmM3MGIzODFlZWVkYTBmZmNmZjA4NDA5Y2IxYTlkMGVhNmY0YmEwMTIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5jcHAKQEAgLTIzNywxNCArMjM3LDE0IEBAIHZvaWQg
U3R5bGVkRWxlbWVudDo6dXBkYXRlQXR0cmlidXRlU3R5bGUoKQogICAgIFByZXNlbnRhdGlvbkF0
dHJpYnV0ZUNhY2hlOjppdGVyYXRvciBjYWNoZUl0ZXJhdG9yOwogICAgIGlmIChjYWNoZUhhc2gp
IHsKICAgICAgICAgY2FjaGVJdGVyYXRvciA9IHByZXNlbnRhdGlvbkF0dHJpYnV0ZUNhY2hlKCku
YWRkKGNhY2hlSGFzaCwgbnVsbHB0cikuaXRlcmF0b3I7Ci0gICAgICAgIGlmIChjYWNoZUl0ZXJh
dG9yLT5zZWNvbmQgJiYgY2FjaGVJdGVyYXRvci0+c2Vjb25kLT5rZXkgIT0gY2FjaGVLZXkpCisg
ICAgICAgIGlmIChjYWNoZUl0ZXJhdG9yLT52YWx1ZSAmJiBjYWNoZUl0ZXJhdG9yLT52YWx1ZS0+
a2V5ICE9IGNhY2hlS2V5KQogICAgICAgICAgICAgY2FjaGVIYXNoID0gMDsKICAgICB9IGVsc2UK
ICAgICAgICAgY2FjaGVJdGVyYXRvciA9IHByZXNlbnRhdGlvbkF0dHJpYnV0ZUNhY2hlKCkuZW5k
KCk7CiAKICAgICBSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gc3R5bGU7Ci0gICAgaWYgKGNhY2hl
SGFzaCAmJiBjYWNoZUl0ZXJhdG9yLT5zZWNvbmQpIAotICAgICAgICBzdHlsZSA9IGNhY2hlSXRl
cmF0b3ItPnNlY29uZC0+dmFsdWU7CisgICAgaWYgKGNhY2hlSGFzaCAmJiBjYWNoZUl0ZXJhdG9y
LT52YWx1ZSkKKyAgICAgICAgc3R5bGUgPSBjYWNoZUl0ZXJhdG9yLT52YWx1ZS0+dmFsdWU7CiAg
ICAgZWxzZSB7CiAgICAgICAgIHN0eWxlID0gU3R5bGVQcm9wZXJ0eVNldDo6Y3JlYXRlKGlzU1ZH
RWxlbWVudCgpID8gU1ZHQXR0cmlidXRlTW9kZSA6IENTU1F1aXJrc01vZGUpOwogICAgICAgICB1
bnNpZ25lZCBzaXplID0gYXR0cmlidXRlQ291bnQoKTsKQEAgLTI2Miw3ICsyNjIsNyBAQCB2b2lk
IFN0eWxlZEVsZW1lbnQ6OnVwZGF0ZUF0dHJpYnV0ZVN0eWxlKCkKICAgICAgICAgYXR0cmlidXRl
RGF0YSgpLT5zZXRBdHRyaWJ1dGVTdHlsZShzdHlsZSk7CiAgICAgfQogCi0gICAgaWYgKCFjYWNo
ZUhhc2ggfHwgY2FjaGVJdGVyYXRvci0+c2Vjb25kKQorICAgIGlmICghY2FjaGVIYXNoIHx8IGNh
Y2hlSXRlcmF0b3ItPnZhbHVlKQogICAgICAgICByZXR1cm47CiAKICAgICBPd25QdHI8UHJlc2Vu
dGF0aW9uQXR0cmlidXRlQ2FjaGVFbnRyeT4gbmV3RW50cnkgPSBhZG9wdFB0cihuZXcgUHJlc2Vu
dGF0aW9uQXR0cmlidXRlQ2FjaGVFbnRyeSk7CkBAIC0yNzUsNyArMjc1LDcgQEAgdm9pZCBTdHls
ZWRFbGVtZW50Ojp1cGRhdGVBdHRyaWJ1dGVTdHlsZSgpCiAgICAgICAgIHByZXNlbnRhdGlvbkF0
dHJpYnV0ZUNhY2hlKCkuY2xlYXIoKTsKICAgICAgICAgcHJlc2VudGF0aW9uQXR0cmlidXRlQ2Fj
aGUoKS5zZXQoY2FjaGVIYXNoLCBuZXdFbnRyeS5yZWxlYXNlKCkpOwogICAgIH0gZWxzZQotICAg
ICAgICBjYWNoZUl0ZXJhdG9yLT5zZWNvbmQgPSBuZXdFbnRyeS5yZWxlYXNlKCk7CisgICAgICAg
IGNhY2hlSXRlcmF0b3ItPnZhbHVlID0gbmV3RW50cnkucmVsZWFzZSgpOwogfQogCiB2b2lkIFN0
eWxlZEVsZW1lbnQ6OmFkZFByb3BlcnR5VG9BdHRyaWJ1dGVTdHlsZShTdHlsZVByb3BlcnR5U2V0
KiBzdHlsZSwgaW50IHByb3BlcnR5SUQsIGludCBpZGVudGlmaWVyKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxDb2xsZWN0aW9uLmNwcAppbmRleCBjM2E3MTUzY2FlNDVhZDYwMWE4NWM4NTA5OWUzZjE1
MTg5OTcyN2M5Li43NGI5OGM2ZmI0MWU3OTA3NzkzNjc2YmUzMGE4NzYyMzljNTM4MjQyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmNwcApAQCAtMzU5LDcgKzM1OSw3IEBAIFBh
c3NSZWZQdHI8Tm9kZUxpc3Q+IEhUTUxDb2xsZWN0aW9uOjp0YWdzKGNvbnN0IFN0cmluZyYgbmFt
ZSkKIAogdm9pZCBIVE1MQ29sbGVjdGlvbjo6YXBwZW5kKE5vZGVDYWNoZU1hcCYgbWFwLCBjb25z
dCBBdG9taWNTdHJpbmcmIGtleSwgRWxlbWVudCogZWxlbWVudCkKIHsKLSAgICBPd25QdHI8VmVj
dG9yPEVsZW1lbnQqPiA+JiB2ZWN0b3IgPSBtYXAuYWRkKGtleS5pbXBsKCksIG51bGxwdHIpLml0
ZXJhdG9yLT5zZWNvbmQ7CisgICAgT3duUHRyPFZlY3RvcjxFbGVtZW50Kj4gPiYgdmVjdG9yID0g
bWFwLmFkZChrZXkuaW1wbCgpLCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCF2
ZWN0b3IpCiAgICAgICAgIHZlY3RvciA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8RWxlbWVudCo+KTsK
ICAgICB2ZWN0b3ItPmFwcGVuZChlbGVtZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5IGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKaW5kZXggMGVhZTk0N2Q0ZTdjMDYyY2E0
ZWNjNWRmYTM0OGY0OTMwOWI5YjUwZi4uOWNiN2VkYjA5M2FhN2ExMjk5MWU4NWJlMGMxZTcxNzM0
NTY4ZDRhYyAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0
b3JJbnNwZWN0b3IucHkKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0
b3JJbnNwZWN0b3IucHkKQEAgLTEyOTksNyArMTI5OSw3IEBAIGNsYXNzIFR5cGVCaW5kaW5nczoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVy
Lm5ld2xpbmUoIiAgICAgICAgSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciAlcztcbiIgJSBpdF9u
YW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93
cml0ZXIubmV3bGluZSgiICAgICAgICAlcyA9IG9iamVjdC0+ZmluZChcIiVzXCIpO1xuIiAlIChp
dF9uYW1lLCBwcm9wX2RhdGEucFsibmFtZSJdKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgQVNTRVJUKCVz
ICE9IG9iamVjdC0+ZW5kKCkpO1xuIiAlIGl0X25hbWUpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgICAgICVzKCVz
LT5zZWNvbmQuZ2V0KCkpO1xuIiAlIChwcm9wX2RhdGEucGFyYW1fdHlwZV9iaW5kaW5nLmdldF92
YWxpZGF0b3JfY2FsbF90ZXh0KCksIGl0X25hbWUpKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgICAgICAlcyglcy0+
dmFsdWUuZ2V0KCkpO1xuIiAlIChwcm9wX2RhdGEucGFyYW1fdHlwZV9iaW5kaW5nLmdldF92YWxp
ZGF0b3JfY2FsbF90ZXh0KCksIGl0X25hbWUpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgIH1cbiIpCiAKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgi
ICAgIGludCBmb3VuZFByb3BlcnRpZXNDb3VudCA9ICVzO1xuIiAlIGxlbihyZXNvbHZlX2RhdGEu
bWFpbl9wcm9wZXJ0aWVzKSkKQEAgLTEzMTAsNyArMTMxMCw3IEBAIGNsYXNzIFR5cGVCaW5kaW5n
czoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3Jp
dGVyLm5ld2xpbmUoIiAgICAgICAgSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciAlcztcbiIgJSBp
dF9uYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRv
cl93cml0ZXIubmV3bGluZSgiICAgICAgICAlcyA9IG9iamVjdC0+ZmluZChcIiVzXCIpO1xuIiAl
IChpdF9uYW1lLCBwcm9wX2RhdGEucFsibmFtZSJdKSkKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgaWYgKCVz
ICE9IG9iamVjdC0+ZW5kKCkpIHtcbiIgJSBpdF9uYW1lKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgICAgICAgICAg
JXMoJXMtPnNlY29uZC5nZXQoKSk7XG4iICUgKHByb3BfZGF0YS5wYXJhbV90eXBlX2JpbmRpbmcu
Z2V0X3ZhbGlkYXRvcl9jYWxsX3RleHQoKSwgaXRfbmFtZSkpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgICAgICAg
ICAlcyglcy0+dmFsdWUuZ2V0KCkpO1xuIiAlIChwcm9wX2RhdGEucGFyYW1fdHlwZV9iaW5kaW5n
LmdldF92YWxpZGF0b3JfY2FsbF90ZXh0KCksIGl0X25hbWUpKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgICAgICAg
ICAgKytmb3VuZFByb3BlcnRpZXNDb3VudDtcbiIpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgICAgIH1cbiIpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5u
ZXdsaW5lKCIgICAgfVxuIikKQEAgLTE5NzAsNyArMTk3MCw3IEBAICRtZXNzYWdlSGFuZGxlcnMK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgICgoKnRoaXMpLippdC0+c2Vjb25kKShjYWxs
SWQsIG1lc3NhZ2VPYmplY3QuZ2V0KCkpOworICAgICgoKnRoaXMpLippdC0+dmFsdWUpKGNhbGxJ
ZCwgbWVzc2FnZU9iamVjdC5nZXQoKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXJJbXBsOjpzZW5kUmVzcG9uc2UobG9uZyBjYWxsSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiByZXN1bHQsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBQYXNzUmVmUHRyPElu
c3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycywgRXJyb3JTdHJpbmcgaW52b2NhdGlvbkVycm9y
KQpAQCAtMjA1Myw3ICsyMDUzLDcgQEAgUiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6
OmdldFByb3BlcnR5VmFsdWVJbXBsKEluc3BlY3Rvck9iamVjdCogb2JqZWN0LAogICAgICAgICBy
ZXR1cm4gdmFsdWU7CiAgICAgfQogCi0gICAgaWYgKCFhc19tZXRob2QodmFsdWVJdGVyYXRvci0+
c2Vjb25kLmdldCgpLCAmdmFsdWUpKQorICAgIGlmICghYXNfbWV0aG9kKHZhbHVlSXRlcmF0b3It
PnZhbHVlLmdldCgpLCAmdmFsdWUpKQogICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmlu
ZyhTdHJpbmc6OmZvcm1hdCgiUGFyYW1ldGVyICclcycgaGFzIHdyb25nIHR5cGUuIEl0IG11c3Qg
YmUgJyVzJy4iLCBuYW1lLnV0ZjgoKS5kYXRhKCksIHR5cGVfbmFtZSkpOwogICAgIGVsc2UKICAg
ICAgICAgaWYgKHZhbHVlRm91bmQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01QYXRj
aFN1cHBvcnQuY3BwCmluZGV4IGQ3ZmNiOWFhYzA4ZTg4NTM2ODZjZmRkYjUxZmExZTEwZDI5OTQ5
Y2QuLjA3MTE1MzNiNzk3ZTA5OTUxMjk0N2IyMmM1YTQxN2NiZjdhNDgxNjAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01QYXRjaFN1cHBvcnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9ET01QYXRjaFN1cHBvcnQuY3BwCkBAIC0yMzQsMjQgKzIzNCwy
NCBAQCBET01QYXRjaFN1cHBvcnQ6OmRpZmYoY29uc3QgVmVjdG9yPE93blB0cjxEaWdlc3Q+ID4m
IG9sZExpc3QsIGNvbnN0IFZlY3RvcjxPd25QdAogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBuZXdMaXN0LnNpemUoKTsgKytpKSB7CiAgICAgICAgIERpZmZUYWJsZTo6aXRlcmF0b3IgaXQg
PSBuZXdUYWJsZS5hZGQobmV3TGlzdFtpXS0+bV9zaGExLCBWZWN0b3I8c2l6ZV90PigpKS5pdGVy
YXRvcjsKLSAgICAgICAgaXQtPnNlY29uZC5hcHBlbmQoaSk7CisgICAgICAgIGl0LT52YWx1ZS5h
cHBlbmQoaSk7CiAgICAgfQogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvbGRMaXN0LnNp
emUoKTsgKytpKSB7CiAgICAgICAgIERpZmZUYWJsZTo6aXRlcmF0b3IgaXQgPSBvbGRUYWJsZS5h
ZGQob2xkTGlzdFtpXS0+bV9zaGExLCBWZWN0b3I8c2l6ZV90PigpKS5pdGVyYXRvcjsKLSAgICAg
ICAgaXQtPnNlY29uZC5hcHBlbmQoaSk7CisgICAgICAgIGl0LT52YWx1ZS5hcHBlbmQoaSk7CiAg
ICAgfQogCiAgICAgZm9yIChEaWZmVGFibGU6Oml0ZXJhdG9yIG5ld0l0ID0gbmV3VGFibGUuYmVn
aW4oKTsgbmV3SXQgIT0gbmV3VGFibGUuZW5kKCk7ICsrbmV3SXQpIHsKLSAgICAgICAgaWYgKG5l
d0l0LT5zZWNvbmQuc2l6ZSgpICE9IDEpCisgICAgICAgIGlmIChuZXdJdC0+dmFsdWUuc2l6ZSgp
ICE9IDEpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBEaWZmVGFibGU6Oml0ZXJh
dG9yIG9sZEl0ID0gb2xkVGFibGUuZmluZChuZXdJdC0+Zmlyc3QpOwotICAgICAgICBpZiAob2xk
SXQgPT0gb2xkVGFibGUuZW5kKCkgfHwgb2xkSXQtPnNlY29uZC5zaXplKCkgIT0gMSkKKyAgICAg
ICAgRGlmZlRhYmxlOjppdGVyYXRvciBvbGRJdCA9IG9sZFRhYmxlLmZpbmQobmV3SXQtPmtleSk7
CisgICAgICAgIGlmIChvbGRJdCA9PSBvbGRUYWJsZS5lbmQoKSB8fCBvbGRJdC0+dmFsdWUuc2l6
ZSgpICE9IDEpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBuZXdNYXBbbmV3SXQt
PnNlY29uZFswXV0gPSBtYWtlX3BhaXIobmV3TGlzdFtuZXdJdC0+c2Vjb25kWzBdXS5nZXQoKSwg
b2xkSXQtPnNlY29uZFswXSk7Ci0gICAgICAgIG9sZE1hcFtvbGRJdC0+c2Vjb25kWzBdXSA9IG1h
a2VfcGFpcihvbGRMaXN0W29sZEl0LT5zZWNvbmRbMF1dLmdldCgpLCBuZXdJdC0+c2Vjb25kWzBd
KTsKKyAgICAgICAgbmV3TWFwW25ld0l0LT52YWx1ZVswXV0gPSBtYWtlX3BhaXIobmV3TGlzdFtu
ZXdJdC0+dmFsdWVbMF1dLmdldCgpLCBvbGRJdC0+dmFsdWVbMF0pOworICAgICAgICBvbGRNYXBb
b2xkSXQtPnZhbHVlWzBdXSA9IG1ha2VfcGFpcihvbGRMaXN0W29sZEl0LT52YWx1ZVswXV0uZ2V0
KCksIG5ld0l0LT52YWx1ZVswXSk7CiAgICAgfQogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IG5l
d0xpc3Quc2l6ZSgpID4gMCAmJiBpIDwgbmV3TGlzdC5zaXplKCkgLSAxOyArK2kpIHsKQEAgLTM2
MSw3ICszNjEsNyBAQCBib29sIERPTVBhdGNoU3VwcG9ydDo6aW5uZXJQYXRjaENoaWxkcmVuKENv
bnRhaW5lck5vZGUqIHBhcmVudE5vZGUsIGNvbnN0IFZlY3RvcgogCiAgICAgLy8gMi4gUGF0Y2gg
bm9kZXMgbWFya2VkIGZvciBtZXJnZS4KICAgICBmb3IgKEhhc2hNYXA8RGlnZXN0KiwgRGlnZXN0
Kj46Oml0ZXJhdG9yIGl0ID0gbWVyZ2VzLmJlZ2luKCk7IGl0ICE9IG1lcmdlcy5lbmQoKTsgKytp
dCkgewotICAgICAgICBpZiAoIWlubmVyUGF0Y2hOb2RlKGl0LT5zZWNvbmQsIGl0LT5maXJzdCwg
ZWMpKQorICAgICAgICBpZiAoIWlubmVyUGF0Y2hOb2RlKGl0LT52YWx1ZSwgaXQtPmtleSwgZWMp
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtNDYwLDcgKzQ2MCw3IEBA
IGJvb2wgRE9NUGF0Y2hTdXBwb3J0OjpyZW1vdmVDaGlsZEFuZE1vdmVUb05ldyhEaWdlc3QqIG9s
ZERpZ2VzdCwgRXhjZXB0aW9uQ29kZSYKICAgICAvLyBoaWdoIHRoYXQgaXQgd2lsbCBnZXQgbWVy
Z2VkIGJhY2sgaW50byB0aGUgb3JpZ2luYWwgRE9NIGR1cmluZyB0aGUgZnVydGhlciBwYXRjaGlu
Zy4KICAgICBVbnVzZWROb2Rlc01hcDo6aXRlcmF0b3IgaXQgPSBtX3VudXNlZE5vZGVzTWFwLmZp
bmQob2xkRGlnZXN0LT5tX3NoYTEpOwogICAgIGlmIChpdCAhPSBtX3VudXNlZE5vZGVzTWFwLmVu
ZCgpKSB7Ci0gICAgICAgIERpZ2VzdCogbmV3RGlnZXN0ID0gaXQtPnNlY29uZDsKKyAgICAgICAg
RGlnZXN0KiBuZXdEaWdlc3QgPSBpdC0+dmFsdWU7CiAgICAgICAgIE5vZGUqIG5ld05vZGUgPSBu
ZXdEaWdlc3QtPm1fbm9kZTsKICAgICAgICAgaWYgKCFtX2RvbUVkaXRvci0+cmVwbGFjZUNoaWxk
KG5ld05vZGUtPnBhcmVudE5vZGUoKSwgb2xkTm9kZSwgbmV3Tm9kZSwgZWMpKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
amVjdGVkU2NyaXB0TWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0
ZWRTY3JpcHRNYW5hZ2VyLmNwcAppbmRleCA2MDUxNzEzNWQ4NTlhOTNhYzZjZTRhMzFiZTZjY2M1
MDU2MjJiZDJlLi43M2EzZTEzODVhODM5Y2ZiMTUyOWE3NGY3ZDNhNzczNDI4ZTFiNGUxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNw
cApAQCAtOTgsNyArOTgsNyBAQCB2b2lkIEluamVjdGVkU2NyaXB0TWFuYWdlcjo6ZGlzY2FyZElu
amVjdGVkU2NyaXB0cygpCiB7CiAgICAgSWRUb0luamVjdGVkU2NyaXB0TWFwOjppdGVyYXRvciBl
bmQgPSBtX2lkVG9JbmplY3RlZFNjcmlwdC5lbmQoKTsKICAgICBmb3IgKElkVG9JbmplY3RlZFNj
cmlwdE1hcDo6aXRlcmF0b3IgaXQgPSBtX2lkVG9JbmplY3RlZFNjcmlwdC5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCi0gICAgICAgIGRpc2NhcmRJbmplY3RlZFNjcmlwdChpdC0+c2Vjb25kLnNj
cmlwdFN0YXRlKCkpOworICAgICAgICBkaXNjYXJkSW5qZWN0ZWRTY3JpcHQoaXQtPnZhbHVlLnNj
cmlwdFN0YXRlKCkpOwogICAgIG1faWRUb0luamVjdGVkU2NyaXB0LmNsZWFyKCk7CiB9CiAKQEAg
LTEwNywxMSArMTA3LDExIEBAIHZvaWQgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjpkaXNjYXJkSW5q
ZWN0ZWRTY3JpcHRzRm9yKERPTVdpbmRvdyogd2luZG93KQogICAgIFZlY3Rvcjxsb25nPiBpZHNU
b1JlbW92ZTsKICAgICBJZFRvSW5qZWN0ZWRTY3JpcHRNYXA6Oml0ZXJhdG9yIGVuZCA9IG1faWRU
b0luamVjdGVkU2NyaXB0LmVuZCgpOwogICAgIGZvciAoSWRUb0luamVjdGVkU2NyaXB0TWFwOjpp
dGVyYXRvciBpdCA9IG1faWRUb0luamVjdGVkU2NyaXB0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgewotICAgICAgICBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUgPSBpdC0+c2Vjb25kLnNjcmlw
dFN0YXRlKCk7CisgICAgICAgIFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSA9IGl0LT52YWx1ZS5z
Y3JpcHRTdGF0ZSgpOwogICAgICAgICBpZiAod2luZG93ICE9IGRvbVdpbmRvd0Zyb21TY3JpcHRT
dGF0ZShzY3JpcHRTdGF0ZSkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgZGlzY2Fy
ZEluamVjdGVkU2NyaXB0KHNjcmlwdFN0YXRlKTsKLSAgICAgICAgaWRzVG9SZW1vdmUuYXBwZW5k
KGl0LT5maXJzdCk7CisgICAgICAgIGlkc1RvUmVtb3ZlLmFwcGVuZChpdC0+a2V5KTsKICAgICB9
CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGlkc1RvUmVtb3ZlLnNpemUoKTsgaSsrKQpA
QCAtMTI2LDcgKzEyNiw3IEBAIGJvb2wgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjpjYW5BY2Nlc3NJ
bnNwZWN0ZWRXb3JrZXJDb250ZXh0KFNjcmlwdFN0YXRlKikKIHZvaWQgSW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyOjpyZWxlYXNlT2JqZWN0R3JvdXAoY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCkKIHsK
ICAgICBmb3IgKElkVG9JbmplY3RlZFNjcmlwdE1hcDo6aXRlcmF0b3IgaXQgPSBtX2lkVG9Jbmpl
Y3RlZFNjcmlwdC5iZWdpbigpOyBpdCAhPSBtX2lkVG9JbmplY3RlZFNjcmlwdC5lbmQoKTsgKytp
dCkKLSAgICAgICAgaXQtPnNlY29uZC5yZWxlYXNlT2JqZWN0R3JvdXAob2JqZWN0R3JvdXApOwor
ICAgICAgICBpdC0+dmFsdWUucmVsZWFzZU9iamVjdEdyb3VwKG9iamVjdEdyb3VwKTsKIH0KIAog
U3RyaW5nIEluamVjdGVkU2NyaXB0TWFuYWdlcjo6aW5qZWN0ZWRTY3JpcHRTb3VyY2UoKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5jcHAKaW5kZXggMTIzN2JlMDc1
MjlhNWU0ZTA3ODEwMGRmZmM0MmRjZTFkODU3YTZmNC4uYmI1Nzc2NGFiZDRkMzA3NjJlODcxOGZi
OWEzOGYzYjE2MDkwY2RlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
QWdlbnQuY3BwCkBAIC0xMzEsNyArMTMxLDcgQEAgdm9pZCBJbnNwZWN0b3JBZ2VudDo6ZW5hYmxl
KEVycm9yU3RyaW5nKikKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikgJiYgRU5BQkxF
KFdPUktFUlMpCiAgICAgV29ya2Vyc01hcDo6aXRlcmF0b3Igd29ya2Vyc0VuZCA9IG1fd29ya2Vy
cy5lbmQoKTsKICAgICBmb3IgKFdvcmtlcnNNYXA6Oml0ZXJhdG9yIGl0ID0gbV93b3JrZXJzLmJl
Z2luKCk7IGl0ICE9IHdvcmtlcnNFbmQ7ICsraXQpIHsKLSAgICAgICAgSW5zcGVjdG9yV29ya2Vy
UmVzb3VyY2UqIHdvcmtlciA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIEluc3BlY3Rvcldv
cmtlclJlc291cmNlKiB3b3JrZXIgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgIG1fZnJvbnRl
bmQtPmluc3BlY3RvcigpLT5kaWRDcmVhdGVXb3JrZXIod29ya2VyLT5pZCgpLCB3b3JrZXItPnVy
bCgpLCB3b3JrZXItPmlzU2hhcmVkV29ya2VyKCkpOwogICAgIH0KICNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKaW5kZXggMTYxMGNkNzAy
ODU4YWY3MmEwMTc3ZjExYTRjYTM3ZTkyYzEwMDc2YS4uNzBhN2Q1ZWYxMzhhZmJkMTYxNGUxZTJk
ZmJmODhiZDAwZDI2ZWJhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNTU0FnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQ1NTQWdlbnQuY3BwCkBAIC0xODMsMTAgKzE4MywxMCBAQCBpbmxpbmUgdm9pZCBTZWxlY3Rv
clByb2ZpbGU6OmNvbW1pdFNlbGVjdG9yKGJvb2wgbWF0Y2hlZCkKIAogICAgIFJ1bGVNYXRjaGlu
Z1N0YXRzTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9ydWxlTWF0Y2hpbmdTdGF0cy5hZGQobWFr
ZUtleSgpLCBSdWxlTWF0Y2hpbmdTdGF0cyhtX2N1cnJlbnRNYXRjaERhdGEsIG1hdGNoVGltZU1z
LCAxLCBtYXRjaGVkID8gMSA6IDApKTsKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KSB7Ci0g
ICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLnRvdGFsVGltZSArPSBtYXRjaFRpbWVNczsK
LSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQuaGl0cyArPSAxOworICAgICAgICByZXN1
bHQuaXRlcmF0b3ItPnZhbHVlLnRvdGFsVGltZSArPSBtYXRjaFRpbWVNczsKKyAgICAgICAgcmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZS5oaXRzICs9IDE7CiAgICAgICAgIGlmIChtYXRjaGVkKQotICAg
ICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQubWF0Y2hlcyArPSAxOworICAgICAgICAg
ICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5tYXRjaGVzICs9IDE7CiAgICAgfQogfQogCkBAIC0x
OTksNyArMTk5LDcgQEAgaW5saW5lIHZvaWQgU2VsZWN0b3JQcm9maWxlOjpjb21taXRTZWxlY3Rv
clRpbWUoKQogICAgIGlmIChpdCA9PSBtX3J1bGVNYXRjaGluZ1N0YXRzLmVuZCgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBpdC0+c2Vjb25kLnRvdGFsVGltZSArPSBwcm9jZXNzaW5nVGltZU1z
OworICAgIGl0LT52YWx1ZS50b3RhbFRpbWUgKz0gcHJvY2Vzc2luZ1RpbWVNczsKIH0KIAogUGFz
c1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpTZWxlY3RvclByb2ZpbGU+IFNlbGVjdG9yUHJvZmls
ZTo6dG9JbnNwZWN0b3JPYmplY3QoKSBjb25zdApAQCAtMjA3LDEyICsyMDcsMTIgQEAgUGFzc1Jl
ZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpTZWxlY3RvclByb2ZpbGU+IFNlbGVjdG9yUHJvZmlsZTo6
dG9JbnNwZWN0b3JPYmplY3QKICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWls
ZGVyOjpDU1M6OlNlbGVjdG9yUHJvZmlsZUVudHJ5PiA+IHNlbGVjdG9yUHJvZmlsZURhdGEgPSBU
eXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkNTUzo6U2VsZWN0b3JQcm9maWxlRW50cnk+
OjpjcmVhdGUoKTsKICAgICBmb3IgKFJ1bGVNYXRjaGluZ1N0YXRzTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fcnVsZU1hdGNoaW5nU3RhdHMuYmVnaW4oKTsgaXQgIT0gbV9ydWxlTWF0Y2hpbmdT
dGF0cy5lbmQoKTsgKytpdCkgewogICAgICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6U2Vs
ZWN0b3JQcm9maWxlRW50cnk+IGVudHJ5ID0gVHlwZUJ1aWxkZXI6OkNTUzo6U2VsZWN0b3JQcm9m
aWxlRW50cnk6OmNyZWF0ZSgpCi0gICAgICAgICAgICAuc2V0U2VsZWN0b3IoaXQtPnNlY29uZC5z
ZWxlY3RvcikKLSAgICAgICAgICAgIC5zZXRVcmwoaXQtPnNlY29uZC51cmwpCi0gICAgICAgICAg
ICAuc2V0TGluZU51bWJlcihpdC0+c2Vjb25kLmxpbmVOdW1iZXIpCi0gICAgICAgICAgICAuc2V0
VGltZShpdC0+c2Vjb25kLnRvdGFsVGltZSkKLSAgICAgICAgICAgIC5zZXRIaXRDb3VudChpdC0+
c2Vjb25kLmhpdHMpCi0gICAgICAgICAgICAuc2V0TWF0Y2hDb3VudChpdC0+c2Vjb25kLm1hdGNo
ZXMpOworICAgICAgICAgICAgLnNldFNlbGVjdG9yKGl0LT52YWx1ZS5zZWxlY3RvcikKKyAgICAg
ICAgICAgIC5zZXRVcmwoaXQtPnZhbHVlLnVybCkKKyAgICAgICAgICAgIC5zZXRMaW5lTnVtYmVy
KGl0LT52YWx1ZS5saW5lTnVtYmVyKQorICAgICAgICAgICAgLnNldFRpbWUoaXQtPnZhbHVlLnRv
dGFsVGltZSkKKyAgICAgICAgICAgIC5zZXRIaXRDb3VudChpdC0+dmFsdWUuaGl0cykKKyAgICAg
ICAgICAgIC5zZXRNYXRjaENvdW50KGl0LT52YWx1ZS5tYXRjaGVzKTsKICAgICAgICAgc2VsZWN0
b3JQcm9maWxlRGF0YS0+YWRkSXRlbShlbnRyeS5yZWxlYXNlKCkpOwogICAgIH0KIApAQCAtODMy
LDcgKzgzMiw3IEBAIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZSogSW5zcGVjdG9y
Q1NTQWdlbnQ6OmFzSW5zcGVjdG9yU3R5bGVTaGVldChFbGVtCiAgICAgICAgIHJldHVybiBpbnNw
ZWN0b3JTdHlsZVNoZWV0LmdldCgpOwogICAgIH0KIAotICAgIHJldHVybiBpdC0+c2Vjb25kLmdl
dCgpOworICAgIHJldHVybiBpdC0+dmFsdWUuZ2V0KCk7CiB9CiAKIEVsZW1lbnQqIEluc3BlY3Rv
ckNTU0FnZW50OjplbGVtZW50Rm9ySWQoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBpbnQgbm9k
ZUlkKQpAQCAtOTI2LDcgKzkyNiw3IEBAIEluc3BlY3RvclN0eWxlU2hlZXQqIEluc3BlY3RvckNT
U0FnZW50Ojphc3NlcnRTdHlsZVNoZWV0Rm9ySWQoRXJyb3JTdHJpbmcqIGVycm9yCiAgICAgICAg
ICplcnJvclN0cmluZyA9ICJObyBzdHlsZSBzaGVldCB3aXRoIGdpdmVuIGlkIGZvdW5kIjsKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIHJldHVybiBpdC0+c2Vjb25kLmdldCgpOworICAg
IHJldHVybiBpdC0+dmFsdWUuZ2V0KCk7CiB9CiAKIFN0cmluZyBJbnNwZWN0b3JDU1NBZ2VudDo6
ZGV0ZWN0T3JpZ2luKENTU1N0eWxlU2hlZXQqIHBhZ2VTdHlsZVNoZWV0LCBEb2N1bWVudCogb3du
ZXJEb2N1bWVudCkKQEAgLTEwMDYsNyArMTAwNiw3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6
OmRpZFJlbW92ZURPTU5vZGUoTm9kZSogbm9kZSkKICAgICBpZiAoaXQgPT0gbV9ub2RlVG9JbnNw
ZWN0b3JTdHlsZVNoZWV0LmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2lkVG9JbnNw
ZWN0b3JTdHlsZVNoZWV0LnJlbW92ZShpdC0+c2Vjb25kLT5pZCgpKTsKKyAgICBtX2lkVG9JbnNw
ZWN0b3JTdHlsZVNoZWV0LnJlbW92ZShpdC0+dmFsdWUtPmlkKCkpOwogICAgIG1fbm9kZVRvSW5z
cGVjdG9yU3R5bGVTaGVldC5yZW1vdmUobm9kZSk7CiB9CiAKQEAgLTEwMTksNyArMTAxOSw3IEBA
IHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmRpZE1vZGlmeURPTUF0dHIoRWxlbWVudCogZWxlbWVu
dCkKICAgICBpZiAoaXQgPT0gbV9ub2RlVG9JbnNwZWN0b3JTdHlsZVNoZWV0LmVuZCgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBpdC0+c2Vjb25kLT5kaWRNb2RpZnlFbGVtZW50QXR0cmlidXRl
KCk7CisgICAgaXQtPnZhbHVlLT5kaWRNb2RpZnlFbGVtZW50QXR0cmlidXRlKCk7CiB9CiAKIHZv
aWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnN0eWxlU2hlZXRDaGFuZ2VkKEluc3BlY3RvclN0eWxlU2hl
ZXQqIHN0eWxlU2hlZXQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ29uc29sZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JDb25zb2xlQWdlbnQuY3BwCmluZGV4IDE2YzkwOWU0ZDA1N2I5ZWY5MDVmMTgzMDlhOWZjOWFl
Yzg1MzkyYWQuLjllNmMwMzVjMTAxZWJjNTljYTQ0YWY2YzQ4NjE4M2EwZTIzZWIwMTggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb25zb2xlQWdlbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb25zb2xlQWdlbnQuY3Bw
CkBAIC0xNjksNyArMTY5LDcgQEAgdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OnN0b3BUaW1p
bmcoY29uc3QgU3RyaW5nJiB0aXRsZSwgUGFzc1JlZlB0cjxTY3JpcHRDYWwKICAgICBpZiAoaXQg
PT0gbV90aW1lcy5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZG91YmxlIHN0YXJ0VGlt
ZSA9IGl0LT5zZWNvbmQ7CisgICAgZG91YmxlIHN0YXJ0VGltZSA9IGl0LT52YWx1ZTsKICAgICBt
X3RpbWVzLnJlbW92ZShpdCk7CiAKICAgICBkb3VibGUgZWxhcHNlZCA9IGN1cnJlbnRUaW1lKCkg
KiAxMDAwIC0gc3RhcnRUaW1lOwpAQCAtMTkyLDcgKzE5Miw3IEBAIHZvaWQgSW5zcGVjdG9yQ29u
c29sZUFnZW50Ojpjb3VudChQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gYXJndW1lbnRzLCBQ
YXNzUmVmCiAgICAgaWYgKGl0ID09IG1fY291bnRzLmVuZCgpKQogICAgICAgICBjb3VudCA9IDE7
CiAgICAgZWxzZSB7Ci0gICAgICAgIGNvdW50ID0gaXQtPnNlY29uZCArIDE7CisgICAgICAgIGNv
dW50ID0gaXQtPnZhbHVlICsgMTsKICAgICAgICAgbV9jb3VudHMucmVtb3ZlKGl0KTsKICAgICB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2Vu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCmlu
ZGV4IDhiOWFkOTJlODc0MTQ1MzU0NGJiOGRiY2RiZjQwYjMxYWUwODRlNmQuLjY3Mjg5OWRlNTA4
OWFmNjBiMjc2Mzk2OTEwZDc0NDIxNmVkODFiZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcApAQCAtNDYwLDcgKzQ2MCw3IEBAIE5vZGUqIElu
c3BlY3RvckRPTUFnZW50Ojpub2RlRm9ySWQoaW50IGlkKQogCiAgICAgSGFzaE1hcDxpbnQsIE5v
ZGUqPjo6aXRlcmF0b3IgaXQgPSBtX2lkVG9Ob2RlLmZpbmQoaWQpOwogICAgIGlmIChpdCAhPSBt
X2lkVG9Ob2RlLmVuZCgpKQotICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICAgICAgcmV0
dXJuIGl0LT52YWx1ZTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtODg0LDkgKzg4NCw5IEBAIHZv
aWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnBlcmZvcm1TZWFyY2goRXJyb3JTdHJpbmcqLCBjb25zdCBT
dHJpbmcmIHdoaXRlc3BhY2VUcmltCiAgICAgU2VhcmNoUmVzdWx0czo6aXRlcmF0b3IgcmVzdWx0
c0l0ID0gbV9zZWFyY2hSZXN1bHRzLmFkZCgqc2VhcmNoSWQsIFZlY3RvcjxSZWZQdHI8Tm9kZT4g
PigpKS5pdGVyYXRvcjsKIAogICAgIGZvciAoTGlzdEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRvciBp
dCA9IHJlc3VsdENvbGxlY3Rvci5iZWdpbigpOyBpdCAhPSByZXN1bHRDb2xsZWN0b3IuZW5kKCk7
ICsraXQpCi0gICAgICAgIHJlc3VsdHNJdC0+c2Vjb25kLmFwcGVuZCgqaXQpOworICAgICAgICBy
ZXN1bHRzSXQtPnZhbHVlLmFwcGVuZCgqaXQpOwogCi0gICAgKnJlc3VsdENvdW50ID0gcmVzdWx0
c0l0LT5zZWNvbmQuc2l6ZSgpOworICAgICpyZXN1bHRDb3VudCA9IHJlc3VsdHNJdC0+dmFsdWUu
c2l6ZSgpOwogfQogCiB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRTZWFyY2hSZXN1bHRzKEVy
cm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBzZWFyY2hJZCwgaW50IGZyb21J
bmRleCwgaW50IHRvSW5kZXgsIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8aW50PiA+JiBub2Rl
SWRzKQpAQCAtODk3LDcgKzg5Nyw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldFNlYXJj
aFJlc3VsdHMoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBpbnQgc2l6ZSA9IGl0LT5zZWNvbmQuc2l6ZSgpOworICAg
IGludCBzaXplID0gaXQtPnZhbHVlLnNpemUoKTsKICAgICBpZiAoZnJvbUluZGV4IDwgMCB8fCB0
b0luZGV4ID4gc2l6ZSB8fCBmcm9tSW5kZXggPj0gdG9JbmRleCkgewogICAgICAgICAqZXJyb3JT
dHJpbmcgPSAiSW52YWxpZCBzZWFyY2ggcmVzdWx0IHJhbmdlIjsKICAgICAgICAgcmV0dXJuOwpA
QCAtOTA1LDcgKzkwNSw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldFNlYXJjaFJlc3Vs
dHMoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmCiAKICAgICBub2RlSWRz
ID0gVHlwZUJ1aWxkZXI6OkFycmF5PGludD46OmNyZWF0ZSgpOwogICAgIGZvciAoaW50IGkgPSBm
cm9tSW5kZXg7IGkgPCB0b0luZGV4OyArK2kpCi0gICAgICAgIG5vZGVJZHMtPmFkZEl0ZW0ocHVz
aE5vZGVQYXRoVG9Gcm9udGVuZCgoaXQtPnNlY29uZClbaV0uZ2V0KCkpKTsKKyAgICAgICAgbm9k
ZUlkcy0+YWRkSXRlbShwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKChpdC0+dmFsdWUpW2ldLmdldCgp
KSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpc2NhcmRTZWFyY2hSZXN1bHRzKEVy
cm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBzZWFyY2hJZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50LmNwcAppbmRleCAxZDY0
OTM3ZmU0MGU5YTRhZDgzMDVhNmMwYTllNTU0YjI3OWZjZjJhLi5hYzY0YWNiNjg2OGM0ZDFiYTZh
OTkzMzdlMzU5M2U3ZmNhMDI3MTVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQuY3BwCkBAIC00MDEsOCArNDAxLDggQEAg
dm9pZCBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50Ojp3aWxsU2VuZFhNTEh0dHBSZXF1ZXN0KGNv
bnN0IFN0cmluZyYgdXJsKQogICAgIGVsc2UgewogICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiB4aHJCcmVha3BvaW50cyA9IG1fc3RhdGUtPmdldE9iamVjdChET01EZWJ1Z2dlckFnZW50
U3RhdGU6OnhockJyZWFrcG9pbnRzKTsKICAgICAgICAgZm9yIChJbnNwZWN0b3JPYmplY3Q6Oml0
ZXJhdG9yIGl0ID0geGhyQnJlYWtwb2ludHMtPmJlZ2luKCk7IGl0ICE9IHhockJyZWFrcG9pbnRz
LT5lbmQoKTsgKytpdCkgewotICAgICAgICAgICAgaWYgKHVybC5jb250YWlucyhpdC0+Zmlyc3Qp
KSB7Ci0gICAgICAgICAgICAgICAgYnJlYWtwb2ludFVSTCA9IGl0LT5maXJzdDsKKyAgICAgICAg
ICAgIGlmICh1cmwuY29udGFpbnMoaXQtPmtleSkpIHsKKyAgICAgICAgICAgICAgICBicmVha3Bv
aW50VVJMID0gaXQtPmtleTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckRPTVN0b3JhZ2VBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RE9NU3RvcmFnZUFnZW50LmNwcAppbmRleCA2NThlYjJkMjQ4MzYzMDZiYWE3Y2Q4MDRlM2I2NGY0
ODk2N2IyMWRmLi5mZTNjZTdlYjEwYmY2NjE2MjJhNjRiMzJiMjAzNjNmN2MzYTcxNjZiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFn
ZW50LmNwcApAQCAtNzgsNyArNzgsNyBAQCB2b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6
Y2xlYXJGcm9udGVuZCgpCiB7CiAgICAgRE9NU3RvcmFnZVJlc291cmNlc01hcDo6aXRlcmF0b3Ig
ZG9tU3RvcmFnZUVuZCA9IG1fcmVzb3VyY2VzLmVuZCgpOwogICAgIGZvciAoRE9NU3RvcmFnZVJl
c291cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSBkb21T
dG9yYWdlRW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT51bmJpbmQoKTsKKyAgICAgICAg
aXQtPnZhbHVlLT51bmJpbmQoKTsKICAgICBtX2Zyb250ZW5kID0gMDsKICAgICBkaXNhYmxlKDAp
OwogfQpAQCAtOTcsNyArOTcsNyBAQCB2b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6ZW5h
YmxlKEVycm9yU3RyaW5nKikKIAogICAgIERPTVN0b3JhZ2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9y
IHJlc291cmNlc0VuZCA9IG1fcmVzb3VyY2VzLmVuZCgpOwogICAgIGZvciAoRE9NU3RvcmFnZVJl
c291cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSByZXNv
dXJjZXNFbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPmJpbmQobV9mcm9udGVuZCk7Cisg
ICAgICAgIGl0LT52YWx1ZS0+YmluZChtX2Zyb250ZW5kKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JE
T01TdG9yYWdlQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcqKQpAQCAtMTU2LDggKzE1Niw4IEBA
IGludCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OnN0b3JhZ2VJZChTdG9yYWdlKiBzdG9yYWdl
KQogICAgIGJvb2wgaXNMb2NhbFN0b3JhZ2UgPSAoZnJhbWUtPmRvbVdpbmRvdygpLT5sb2NhbFN0
b3JhZ2UoZWMpID09IHN0b3JhZ2UgJiYgIWVjKTsKICAgICBET01TdG9yYWdlUmVzb3VyY2VzTWFw
OjppdGVyYXRvciBkb21TdG9yYWdlRW5kID0gbV9yZXNvdXJjZXMuZW5kKCk7CiAgICAgZm9yIChE
T01TdG9yYWdlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7
IGl0ICE9IGRvbVN0b3JhZ2VFbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQtPmlz
U2FtZUhvc3RBbmRUeXBlKGZyYW1lLCBpc0xvY2FsU3RvcmFnZSkpCi0gICAgICAgICAgICByZXR1
cm4gaXQtPmZpcnN0OworICAgICAgICBpZiAoaXQtPnZhbHVlLT5pc1NhbWVIb3N0QW5kVHlwZShm
cmFtZSwgaXNMb2NhbFN0b3JhZ2UpKQorICAgICAgICAgICAgcmV0dXJuIGl0LT5rZXk7CiAgICAg
fQogICAgIHJldHVybiAwOwogfQpAQCAtMTY3LDE0ICsxNjcsMTQgQEAgSW5zcGVjdG9yRE9NU3Rv
cmFnZVJlc291cmNlKiBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmdldERPTVN0b3JhZ2VSZXNv
dXJjZUZvckkKICAgICBET01TdG9yYWdlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBpdCA9IG1fcmVz
b3VyY2VzLmZpbmQoc3RvcmFnZUlkKTsKICAgICBpZiAoaXQgPT0gbV9yZXNvdXJjZXMuZW5kKCkp
CiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBpdC0+c2Vjb25kLmdldCgpOworICAgIHJl
dHVybiBpdC0+dmFsdWUuZ2V0KCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50
OjpkaWRVc2VET01TdG9yYWdlKFN0b3JhZ2VBcmVhKiBzdG9yYWdlQXJlYSwgYm9vbCBpc0xvY2Fs
U3RvcmFnZSwgRnJhbWUqIGZyYW1lKQogewogICAgIERPTVN0b3JhZ2VSZXNvdXJjZXNNYXA6Oml0
ZXJhdG9yIGRvbVN0b3JhZ2VFbmQgPSBtX3Jlc291cmNlcy5lbmQoKTsKICAgICBmb3IgKERPTVN0
b3JhZ2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMuYmVnaW4oKTsgaXQg
IT0gZG9tU3RvcmFnZUVuZDsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnNlY29uZC0+aXNTYW1l
SG9zdEFuZFR5cGUoZnJhbWUsIGlzTG9jYWxTdG9yYWdlKSkKKyAgICAgICAgaWYgKGl0LT52YWx1
ZS0+aXNTYW1lSG9zdEFuZFR5cGUoZnJhbWUsIGlzTG9jYWxTdG9yYWdlKSkKICAgICAgICAgICAg
IHJldHVybjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JEYXRhYmFzZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JEYXRhYmFzZUFnZW50LmNwcAppbmRleCAwNmY2NTI0ODhlYzY0YWE3OWExYTY5YTI2YTk0
MDAxZDEzMGY4ZmM4Li45YjFmMWZhN2UxNjU4MjUzOGIwZWI2ZmZlYmIyZWM0YTI0MWRjMzE1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2Vu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlQWdl
bnQuY3BwCkBAIC0yNzUsNyArMjc1LDcgQEAgdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUFnZW50Ojpl
bmFibGUoRXJyb3JTdHJpbmcqKQogCiAgICAgRGF0YWJhc2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9y
IGRhdGFiYXNlc0VuZCA9IG1fcmVzb3VyY2VzLmVuZCgpOwogICAgIGZvciAoRGF0YWJhc2VSZXNv
dXJjZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZGF0YWJh
c2VzRW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5iaW5kKG1fZnJvbnRlbmRQcm92aWRl
ci0+ZnJvbnRlbmQoKSk7CisgICAgICAgIGl0LT52YWx1ZS0+YmluZChtX2Zyb250ZW5kUHJvdmlk
ZXItPmZyb250ZW5kKCkpOwogfQogCiB2b2lkIEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmRpc2Fi
bGUoRXJyb3JTdHJpbmcqKQpAQCAtMzMxLDggKzMzMSw4IEBAIHZvaWQgSW5zcGVjdG9yRGF0YWJh
c2VBZ2VudDo6ZXhlY3V0ZVNRTChFcnJvclN0cmluZyogZXJyb3IsIGludCBkYXRhYmFzZUlkLCBj
b25zCiBpbnQgSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6ZGF0YWJhc2VJZChEYXRhYmFzZSogZGF0
YWJhc2UpCiB7CiAgICAgZm9yIChEYXRhYmFzZVJlc291cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBt
X3Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSBtX3Jlc291cmNlcy5lbmQoKTsgKytpdCkgewotICAg
ICAgICBpZiAoaXQtPnNlY29uZC0+ZGF0YWJhc2UoKSA9PSBkYXRhYmFzZSkKLSAgICAgICAgICAg
IHJldHVybiBpdC0+Zmlyc3Q7CisgICAgICAgIGlmIChpdC0+dmFsdWUtPmRhdGFiYXNlKCkgPT0g
ZGF0YWJhc2UpCisgICAgICAgICAgICByZXR1cm4gaXQtPmtleTsKICAgICB9CiAgICAgcmV0dXJu
IDA7CiB9CkBAIC0zNDAsOCArMzQwLDggQEAgaW50IEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmRh
dGFiYXNlSWQoRGF0YWJhc2UqIGRhdGFiYXNlKQogSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZSog
SW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6ZmluZEJ5RmlsZU5hbWUoY29uc3QgU3RyaW5nJiBmaWxl
TmFtZSkKIHsKICAgICBmb3IgKERhdGFiYXNlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBpdCA9IG1f
cmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IG1fcmVzb3VyY2VzLmVuZCgpOyArK2l0KSB7Ci0gICAg
ICAgIGlmIChpdC0+c2Vjb25kLT5kYXRhYmFzZSgpLT5maWxlTmFtZSgpID09IGZpbGVOYW1lKQot
ICAgICAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIGlmIChpdC0+dmFs
dWUtPmRhdGFiYXNlKCktPmZpbGVOYW1lKCkgPT0gZmlsZU5hbWUpCisgICAgICAgICAgICByZXR1
cm4gaXQtPnZhbHVlLmdldCgpOwogICAgIH0KICAgICByZXR1cm4gMDsKIH0KQEAgLTM1MSw3ICsz
NTEsNyBAQCBEYXRhYmFzZSogSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6ZGF0YWJhc2VGb3JJZChp
bnQgZGF0YWJhc2VJZCkKICAgICBEYXRhYmFzZVJlc291cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBt
X3Jlc291cmNlcy5maW5kKGRhdGFiYXNlSWQpOwogICAgIGlmIChpdCA9PSBtX3Jlc291cmNlcy5l
bmQoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQtPmRhdGFiYXNl
KCk7CisgICAgcmV0dXJuIGl0LT52YWx1ZS0+ZGF0YWJhc2UoKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRl
YnVnZ2VyQWdlbnQuY3BwCmluZGV4IDkyNGJlMzg0MjlmNzQwOTYyM2IyNjc3OTJiYWQwNDU2MzNk
Yzg4ZjguLjA3NDM1MDBkYTM4YTU2OWJhYWM0OTA5ZGE2M2VhZDNiNjIzNjVjMWUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAK
QEAgLTI0MCw5ICsyNDAsOSBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFr
cG9pbnRCeVVybChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGludCBsaQogCiAgICAgU2NyaXB0
QnJlYWtwb2ludCBicmVha3BvaW50KGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwgY29uZGl0aW9u
KTsKICAgICBmb3IgKFNjcmlwdHNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zY3JpcHRzLmJlZ2luKCk7
IGl0ICE9IG1fc2NyaXB0cy5lbmQoKTsgKytpdCkgewotICAgICAgICBpZiAoIW1hdGNoZXMoaXQt
PnNlY29uZC51cmwsIHVybCwgaXNSZWdleCkpCisgICAgICAgIGlmICghbWF0Y2hlcyhpdC0+dmFs
dWUudXJsLCB1cmwsIGlzUmVnZXgpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGxvY2F0aW9uID0gcmVzb2x2ZUJyZWFrcG9pbnQoYnJlYWtw
b2ludElkLCBpdC0+Zmlyc3QsIGJyZWFrcG9pbnQpOworICAgICAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBsb2NhdGlvbiA9IHJlc29sdmVCcmVha3BvaW50KGJyZWFrcG9pbnRJZCwgaXQtPmtl
eSwgYnJlYWtwb2ludCk7CiAgICAgICAgIGlmIChsb2NhdGlvbikKICAgICAgICAgICAgIGxvY2F0
aW9ucy0+cHVzaE9iamVjdChsb2NhdGlvbik7CiAgICAgfQpAQCAtMjkyLDggKzI5Miw4IEBAIHZv
aWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6cmVtb3ZlQnJlYWtwb2ludChFcnJvclN0cmluZyos
IGNvbnN0IFN0cmluZyYgYnJlYWtwCiAgICAgQnJlYWtwb2ludElkVG9EZWJ1Z1NlcnZlckJyZWFr
cG9pbnRJZHNNYXA6Oml0ZXJhdG9yIGRlYnVnU2VydmVyQnJlYWtwb2ludElkc0l0ZXJhdG9yID0g
bV9icmVha3BvaW50SWRUb0RlYnVnU2VydmVyQnJlYWtwb2ludElkcy5maW5kKGJyZWFrcG9pbnRJ
ZCk7CiAgICAgaWYgKGRlYnVnU2VydmVyQnJlYWtwb2ludElkc0l0ZXJhdG9yID09IG1fYnJlYWtw
b2ludElkVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHMuZW5kKCkpCiAgICAgICAgIHJldHVybjsK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRlYnVnU2VydmVyQnJlYWtwb2ludElkc0l0ZXJh
dG9yLT5zZWNvbmQuc2l6ZSgpOyArK2kpCi0gICAgICAgIHNjcmlwdERlYnVnU2VydmVyKCkucmVt
b3ZlQnJlYWtwb2ludChkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNJdGVyYXRvci0+c2Vjb25kW2ld
KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRlYnVnU2VydmVyQnJlYWtwb2ludElkc0l0
ZXJhdG9yLT52YWx1ZS5zaXplKCk7ICsraSkKKyAgICAgICAgc2NyaXB0RGVidWdTZXJ2ZXIoKS5y
ZW1vdmVCcmVha3BvaW50KGRlYnVnU2VydmVyQnJlYWtwb2ludElkc0l0ZXJhdG9yLT52YWx1ZVtp
XSk7CiAgICAgbV9icmVha3BvaW50SWRUb0RlYnVnU2VydmVyQnJlYWtwb2ludElkcy5yZW1vdmUo
ZGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzSXRlcmF0b3IpOwogfQogCkBAIC0zMjEsNyArMzIxLDcg
QEAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uPiBJbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50OjpyZXNvbHZlQnJlYWsKICAgICBTY3JpcHRzTWFwOjppdGVyYXRvciBzY3Jp
cHRJdGVyYXRvciA9IG1fc2NyaXB0cy5maW5kKHNjcmlwdElkKTsKICAgICBpZiAoc2NyaXB0SXRl
cmF0b3IgPT0gbV9zY3JpcHRzLmVuZCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBTY3JpcHQm
IHNjcmlwdCA9IHNjcmlwdEl0ZXJhdG9yLT5zZWNvbmQ7CisgICAgU2NyaXB0JiBzY3JpcHQgPSBz
Y3JpcHRJdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKGJyZWFrcG9pbnQubGluZU51bWJlciA8IHNj
cmlwdC5zdGFydExpbmUgfHwgc2NyaXB0LmVuZExpbmUgPCBicmVha3BvaW50LmxpbmVOdW1iZXIp
CiAgICAgICAgIHJldHVybiAwOwogCkBAIC0zMzQsNyArMzM0LDcgQEAgUGFzc1JlZlB0cjxUeXBl
QnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uPiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZXNv
bHZlQnJlYWsKICAgICBCcmVha3BvaW50SWRUb0RlYnVnU2VydmVyQnJlYWtwb2ludElkc01hcDo6
aXRlcmF0b3IgZGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzSXRlcmF0b3IgPSBtX2JyZWFrcG9pbnRJ
ZFRvRGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzLmZpbmQoYnJlYWtwb2ludElkKTsKICAgICBpZiAo
ZGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzSXRlcmF0b3IgPT0gbV9icmVha3BvaW50SWRUb0RlYnVn
U2VydmVyQnJlYWtwb2ludElkcy5lbmQoKSkKICAgICAgICAgZGVidWdTZXJ2ZXJCcmVha3BvaW50
SWRzSXRlcmF0b3IgPSBtX2JyZWFrcG9pbnRJZFRvRGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzLnNl
dChicmVha3BvaW50SWQsIFZlY3RvcjxTdHJpbmc+KCkpLml0ZXJhdG9yOwotICAgIGRlYnVnU2Vy
dmVyQnJlYWtwb2ludElkc0l0ZXJhdG9yLT5zZWNvbmQuYXBwZW5kKGRlYnVnU2VydmVyQnJlYWtw
b2ludElkKTsKKyAgICBkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNJdGVyYXRvci0+dmFsdWUuYXBw
ZW5kKGRlYnVnU2VydmVyQnJlYWtwb2ludElkKTsKIAogICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6
RGVidWdnZXI6OkxvY2F0aW9uPiBsb2NhdGlvbiA9IFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9j
YXRpb246OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRTY3JpcHRJZChzY3JpcHRJZCkKQEAgLTM2MCw3
ICszNjAsNyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNlYXJjaEluQ29udGVudChF
cnJvclN0cmluZyogZXJyb3IsIGNvbnN0IFN0cmluZyYgcwogCiAgICAgU2NyaXB0c01hcDo6aXRl
cmF0b3IgaXQgPSBtX3NjcmlwdHMuZmluZChzY3JpcHRJZCk7CiAgICAgaWYgKGl0ICE9IG1fc2Ny
aXB0cy5lbmQoKSkKLSAgICAgICAgcmVzdWx0cyA9IENvbnRlbnRTZWFyY2hVdGlsczo6c2VhcmNo
SW5UZXh0QnlMaW5lcyhpdC0+c2Vjb25kLnNvdXJjZSwgcXVlcnksIGNhc2VTZW5zaXRpdmUsIGlz
UmVnZXgpOworICAgICAgICByZXN1bHRzID0gQ29udGVudFNlYXJjaFV0aWxzOjpzZWFyY2hJblRl
eHRCeUxpbmVzKGl0LT52YWx1ZS5zb3VyY2UsIHF1ZXJ5LCBjYXNlU2Vuc2l0aXZlLCBpc1JlZ2V4
KTsKICAgICBlbHNlCiAgICAgICAgICplcnJvciA9ICJObyBzY3JpcHQgZm9yIGlkOiAiICsgc2Ny
aXB0SWQ7CiB9CkBAIC0zODEsNyArMzgxLDcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpnZXRTY3JpcHRTb3VyY2UoRXJyb3JTdHJpbmcqIGVycm9yLCBjb25zdCBTdHJpbmcmIHMKIHsK
ICAgICBTY3JpcHRzTWFwOjppdGVyYXRvciBpdCA9IG1fc2NyaXB0cy5maW5kKHNjcmlwdElkKTsK
ICAgICBpZiAoaXQgIT0gbV9zY3JpcHRzLmVuZCgpKQotICAgICAgICAqc2NyaXB0U291cmNlID0g
aXQtPnNlY29uZC5zb3VyY2U7CisgICAgICAgICpzY3JpcHRTb3VyY2UgPSBpdC0+dmFsdWUuc291
cmNlOwogICAgIGVsc2UKICAgICAgICAgKmVycm9yID0gIk5vIHNjcmlwdCBmb3IgaWQ6ICIgKyBz
Y3JpcHRJZDsKIH0KQEAgLTUzNiw3ICs1MzYsNyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ6OmRpZFBhcnNlU291cmNlKGNvbnN0IFN0cmluZyYgc2NyaXB0SWQsIGNvbnN0IFNjcmlwdAog
CiAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnJlYWtwb2ludHNDb29raWUgPSBtX3N0YXRl
LT5nZXRPYmplY3QoRGVidWdnZXJBZ2VudFN0YXRlOjpqYXZhU2NyaXB0QnJlYWtwb2ludHMpOwog
ICAgIGZvciAoSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciBpdCA9IGJyZWFrcG9pbnRzQ29va2ll
LT5iZWdpbigpOyBpdCAhPSBicmVha3BvaW50c0Nvb2tpZS0+ZW5kKCk7ICsraXQpIHsKLSAgICAg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnJlYWtwb2ludE9iamVjdCA9IGl0LT5zZWNvbmQt
PmFzT2JqZWN0KCk7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJyZWFrcG9pbnRP
YmplY3QgPSBpdC0+dmFsdWUtPmFzT2JqZWN0KCk7CiAgICAgICAgIGJvb2wgaXNSZWdleDsKICAg
ICAgICAgYnJlYWtwb2ludE9iamVjdC0+Z2V0Qm9vbGVhbigiaXNSZWdleCIsICZpc1JlZ2V4KTsK
ICAgICAgICAgU3RyaW5nIHVybDsKQEAgLTU0Nyw5ICs1NDcsOSBAQCB2b2lkIEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OmRpZFBhcnNlU291cmNlKGNvbnN0IFN0cmluZyYgc2NyaXB0SWQsIGNvbnN0
IFNjcmlwdAogICAgICAgICBicmVha3BvaW50T2JqZWN0LT5nZXROdW1iZXIoImxpbmVOdW1iZXIi
LCAmYnJlYWtwb2ludC5saW5lTnVtYmVyKTsKICAgICAgICAgYnJlYWtwb2ludE9iamVjdC0+Z2V0
TnVtYmVyKCJjb2x1bW5OdW1iZXIiLCAmYnJlYWtwb2ludC5jb2x1bW5OdW1iZXIpOwogICAgICAg
ICBicmVha3BvaW50T2JqZWN0LT5nZXRTdHJpbmcoImNvbmRpdGlvbiIsICZicmVha3BvaW50LmNv
bmRpdGlvbik7Ci0gICAgICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0aW9u
PiBsb2NhdGlvbiA9IHJlc29sdmVCcmVha3BvaW50KGl0LT5maXJzdCwgc2NyaXB0SWQsIGJyZWFr
cG9pbnQpOworICAgICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj4g
bG9jYXRpb24gPSByZXNvbHZlQnJlYWtwb2ludChpdC0+a2V5LCBzY3JpcHRJZCwgYnJlYWtwb2lu
dCk7CiAgICAgICAgIGlmIChsb2NhdGlvbikKLSAgICAgICAgICAgIG1fZnJvbnRlbmQtPmJyZWFr
cG9pbnRSZXNvbHZlZChpdC0+Zmlyc3QsIGxvY2F0aW9uKTsKKyAgICAgICAgICAgIG1fZnJvbnRl
bmQtPmJyZWFrcG9pbnRSZXNvbHZlZChpdC0+a2V5LCBsb2NhdGlvbik7CiAgICAgfQogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTWVtb3J5QWdlbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck1lbW9yeUFnZW50LmNwcApp
bmRleCA1ZTQzY2I5ZDFlMTg1NGQ5ZjdmOWU4NGIxMDZiM2I1MDY2ZWY0ZjhiLi5kNGFmZmRiYTM2
MzMzZjA5NjNmNzYzMjEzYmQ0OWVmZDExYTBmMmEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yTWVtb3J5QWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JNZW1vcnlBZ2VudC5jcHAKQEAgLTEyMCw4ICsxMjAsOCBAQCBw
dWJsaWM6CiAgICAgewogICAgICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGNoaWxkcmVuU3Rh
dHMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CiAgICAgICAgIGZvciAoSGFzaE1hcDxTdHJp
bmcsIGludD46Oml0ZXJhdG9yIGl0ID0gbV9ub2RlTmFtZVRvQ291bnQuYmVnaW4oKTsgaXQgIT0g
bV9ub2RlTmFtZVRvQ291bnQuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgICAgIFJlZlB0cjxOb2Rl
Q291bnQ+IG5vZGVDb3VudCA9IE5vZGVDb3VudDo6Y3JlYXRlKCkuc2V0Tm9kZU5hbWUoaXQtPmZp
cnN0KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC5zZXRDb3VudChpdC0+c2Vjb25kKTsKKyAgICAgICAgICAgIFJlZlB0cjxOb2Rl
Q291bnQ+IG5vZGVDb3VudCA9IE5vZGVDb3VudDo6Y3JlYXRlKCkuc2V0Tm9kZU5hbWUoaXQtPmtl
eSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAuc2V0Q291bnQoaXQtPnZhbHVlKTsKICAgICAgICAgICAgIGNoaWxkcmVuU3RhdHMt
PnB1c2hPYmplY3Qobm9kZUNvdW50KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gY2hpbGRy
ZW5TdGF0cy5yZWxlYXNlKCk7CkBAIC0xMzEsOCArMTMxLDggQEAgcHVibGljOgogICAgIHsKICAg
ICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBsaXN0ZW5lclN0YXRzID0gSW5zcGVjdG9yQXJy
YXk6OmNyZWF0ZSgpOwogICAgICAgICBmb3IgKEhhc2hNYXA8QXRvbWljU3RyaW5nLCBpbnQ+Ojpp
dGVyYXRvciBpdCA9IG1fZXZlbnRUeXBlVG9Db3VudC5iZWdpbigpOyBpdCAhPSBtX2V2ZW50VHlw
ZVRvQ291bnQuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgICAgIFJlZlB0cjxMaXN0ZW5lckNvdW50
PiBsaXN0ZW5lckNvdW50ID0gTGlzdGVuZXJDb3VudDo6Y3JlYXRlKCkuc2V0VHlwZShpdC0+Zmly
c3QpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLnNldENvdW50KGl0LT5zZWNvbmQpOworICAgICAgICAgICAg
UmVmUHRyPExpc3RlbmVyQ291bnQ+IGxpc3RlbmVyQ291bnQgPSBMaXN0ZW5lckNvdW50OjpjcmVh
dGUoKS5zZXRUeXBlKGl0LT5rZXkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldENvdW50KGl0LT52YWx1
ZSk7CiAgICAgICAgICAgICBsaXN0ZW5lclN0YXRzLT5wdXNoT2JqZWN0KGxpc3RlbmVyQ291bnQp
OwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBsaXN0ZW5lclN0YXRzLnJlbGVhc2UoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKaW5kZXgg
OTBkNGYyNDhlNzNlMWM1ZjI1ZDA2OWZjYTQ3MzU4YzM5NTBlOGUyMC4uYzYzNmRkNDFjZjY5NjU4
ODAwZGZiYzFhNzNkNTNhMjZmMmM5MDAyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKQEAgLTQzMSw3ICs0MzEsNyBAQCBzdGF0aWMgVmVj
dG9yPENhY2hlZFJlc291cmNlKj4gY2FjaGVkUmVzb3VyY2VzRm9yRnJhbWUoRnJhbWUqIGZyYW1l
KQogICAgIGNvbnN0IENhY2hlZFJlc291cmNlTG9hZGVyOjpEb2N1bWVudFJlc291cmNlTWFwJiBh
bGxSZXNvdXJjZXMgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS0+
YWxsQ2FjaGVkUmVzb3VyY2VzKCk7CiAgICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OkRvY3VtZW50
UmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGFsbFJlc291cmNlcy5lbmQoKTsKICAg
ICBmb3IgKENhY2hlZFJlc291cmNlTG9hZGVyOjpEb2N1bWVudFJlc291cmNlTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IGFsbFJlc291cmNlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAg
ICAgICAgQ2FjaGVkUmVzb3VyY2UqIGNhY2hlZFJlc291cmNlID0gaXQtPnNlY29uZC5nZXQoKTsK
KyAgICAgICAgQ2FjaGVkUmVzb3VyY2UqIGNhY2hlZFJlc291cmNlID0gaXQtPnZhbHVlLmdldCgp
OwogCiAgICAgICAgIHN3aXRjaCAoY2FjaGVkUmVzb3VyY2UtPnR5cGUoKSkgewogICAgICAgICBj
YXNlIENhY2hlZFJlc291cmNlOjpJbWFnZVJlc291cmNlOgpAQCAtNzAxLDcgKzcwMSw3IEBAIHZv
aWQgSW5zcGVjdG9yUGFnZUFnZW50OjpkaWRDbGVhcldpbmRvd09iamVjdEluV29ybGQoRnJhbWUq
IGZyYW1lLCBET01XcmFwcGVyV29yCiAgICAgICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gc2NyaXB0cy0+ZW5kKCk7CiAgICAgICAgIGZvciAoSW5zcGVjdG9yT2JqZWN0
Ojpjb25zdF9pdGVyYXRvciBpdCA9IHNjcmlwdHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewogICAgICAgICAgICAgU3RyaW5nIHNjcmlwdFRleHQ7Ci0gICAgICAgICAgICBpZiAoaXQtPnNl
Y29uZC0+YXNTdHJpbmcoJnNjcmlwdFRleHQpKQorICAgICAgICAgICAgaWYgKGl0LT52YWx1ZS0+
YXNTdHJpbmcoJnNjcmlwdFRleHQpKQogICAgICAgICAgICAgICAgIG1faW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyLT5pbmplY3RTY3JpcHQoc2NyaXB0VGV4dCwgbWFpbldvcmxkU2NyaXB0U3RhdGUoZnJh
bWUpKTsKICAgICAgICAgfQogICAgIH0KQEAgLTczMyw4ICs3MzMsOCBAQCB2b2lkIEluc3BlY3Rv
clBhZ2VBZ2VudDo6ZnJhbWVEZXRhY2hlZChGcmFtZSogZnJhbWUpCiB7CiAgICAgSGFzaE1hcDxG
cmFtZSosIFN0cmluZz46Oml0ZXJhdG9yIGl0ZXJhdG9yID0gbV9mcmFtZVRvSWRlbnRpZmllci5m
aW5kKGZyYW1lKTsKICAgICBpZiAoaXRlcmF0b3IgIT0gbV9mcmFtZVRvSWRlbnRpZmllci5lbmQo
KSkgewotICAgICAgICBtX2Zyb250ZW5kLT5mcmFtZURldGFjaGVkKGl0ZXJhdG9yLT5zZWNvbmQp
OwotICAgICAgICBtX2lkZW50aWZpZXJUb0ZyYW1lLnJlbW92ZShpdGVyYXRvci0+c2Vjb25kKTsK
KyAgICAgICAgbV9mcm9udGVuZC0+ZnJhbWVEZXRhY2hlZChpdGVyYXRvci0+dmFsdWUpOworICAg
ICAgICBtX2lkZW50aWZpZXJUb0ZyYW1lLnJlbW92ZShpdGVyYXRvci0+dmFsdWUpOwogICAgICAg
ICBtX2ZyYW1lVG9JZGVudGlmaWVyLnJlbW92ZShpdGVyYXRvcik7CiAgICAgfQogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwCmlu
ZGV4IGM3NmFhZTgxM2U4YjIyZjc1ZjE1YTZkOWExZWU0Y2UxNDE0ZmZlZmUuLjBkZWZjZmQwMWQz
OGE5MDJkOWMxNWY5OGM5NjEzYzcxM2NmZTU0ZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAKQEAgLTI0NCwxMCArMjQ0LDEw
IEBAIHZvaWQgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6Z2V0UHJvZmlsZUhlYWRlcnMoRXJyb3JT
dHJpbmcqLCBSZWZQdHI8SW5zcGVjdG9yQXJyCiB7CiAgICAgUHJvZmlsZXNNYXA6Oml0ZXJhdG9y
IHByb2ZpbGVzRW5kID0gbV9wcm9maWxlcy5lbmQoKTsKICAgICBmb3IgKFByb2ZpbGVzTWFwOjpp
dGVyYXRvciBpdCA9IG1fcHJvZmlsZXMuYmVnaW4oKTsgaXQgIT0gcHJvZmlsZXNFbmQ7ICsraXQp
Ci0gICAgICAgIGhlYWRlcnMtPnB1c2hPYmplY3QoY3JlYXRlUHJvZmlsZUhlYWRlcigqaXQtPnNl
Y29uZCkpOworICAgICAgICBoZWFkZXJzLT5wdXNoT2JqZWN0KGNyZWF0ZVByb2ZpbGVIZWFkZXIo
Kml0LT52YWx1ZSkpOwogICAgIEhlYXBTbmFwc2hvdHNNYXA6Oml0ZXJhdG9yIHNuYXBzaG90c0Vu
ZCA9IG1fc25hcHNob3RzLmVuZCgpOwogICAgIGZvciAoSGVhcFNuYXBzaG90c01hcDo6aXRlcmF0
b3IgaXQgPSBtX3NuYXBzaG90cy5iZWdpbigpOyBpdCAhPSBzbmFwc2hvdHNFbmQ7ICsraXQpCi0g
ICAgICAgIGhlYWRlcnMtPnB1c2hPYmplY3QoY3JlYXRlU25hcHNob3RIZWFkZXIoKml0LT5zZWNv
bmQpKTsKKyAgICAgICAgaGVhZGVycy0+cHVzaE9iamVjdChjcmVhdGVTbmFwc2hvdEhlYWRlcigq
aXQtPnZhbHVlKSk7CiB9CiAKIG5hbWVzcGFjZSB7CkBAIC0yNzEsMTUgKzI3MSwxNSBAQCB2b2lk
IEluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmdldFByb2ZpbGUoRXJyb3JTdHJpbmcqLCBjb25zdCBT
dHJpbmcmIHR5cGUsIGludCByYQogICAgIGlmICh0eXBlID09IENQVVByb2ZpbGVUeXBlKSB7CiAg
ICAgICAgIFByb2ZpbGVzTWFwOjppdGVyYXRvciBpdCA9IG1fcHJvZmlsZXMuZmluZCh1aWQpOwog
ICAgICAgICBpZiAoaXQgIT0gbV9wcm9maWxlcy5lbmQoKSkgewotICAgICAgICAgICAgcHJvZmls
ZU9iamVjdCA9IGNyZWF0ZVByb2ZpbGVIZWFkZXIoKml0LT5zZWNvbmQpOwotICAgICAgICAgICAg
cHJvZmlsZU9iamVjdC0+c2V0T2JqZWN0KCJoZWFkIiwgaXQtPnNlY29uZC0+YnVpbGRJbnNwZWN0
b3JPYmplY3RGb3JIZWFkKCkpOwotICAgICAgICAgICAgaWYgKGl0LT5zZWNvbmQtPmJvdHRvbVVw
SGVhZCgpKQotICAgICAgICAgICAgICAgIHByb2ZpbGVPYmplY3QtPnNldE9iamVjdCgiYm90dG9t
VXBIZWFkIiwgaXQtPnNlY29uZC0+YnVpbGRJbnNwZWN0b3JPYmplY3RGb3JCb3R0b21VcEhlYWQo
KSk7CisgICAgICAgICAgICBwcm9maWxlT2JqZWN0ID0gY3JlYXRlUHJvZmlsZUhlYWRlcigqaXQt
PnZhbHVlKTsKKyAgICAgICAgICAgIHByb2ZpbGVPYmplY3QtPnNldE9iamVjdCgiaGVhZCIsIGl0
LT52YWx1ZS0+YnVpbGRJbnNwZWN0b3JPYmplY3RGb3JIZWFkKCkpOworICAgICAgICAgICAgaWYg
KGl0LT52YWx1ZS0+Ym90dG9tVXBIZWFkKCkpCisgICAgICAgICAgICAgICAgcHJvZmlsZU9iamVj
dC0+c2V0T2JqZWN0KCJib3R0b21VcEhlYWQiLCBpdC0+dmFsdWUtPmJ1aWxkSW5zcGVjdG9yT2Jq
ZWN0Rm9yQm90dG9tVXBIZWFkKCkpOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmICh0eXBlID09
IEhlYXBQcm9maWxlVHlwZSkgewogICAgICAgICBIZWFwU25hcHNob3RzTWFwOjppdGVyYXRvciBp
dCA9IG1fc25hcHNob3RzLmZpbmQodWlkKTsKICAgICAgICAgaWYgKGl0ICE9IG1fc25hcHNob3Rz
LmVuZCgpKSB7Ci0gICAgICAgICAgICBSZWZQdHI8U2NyaXB0SGVhcFNuYXBzaG90PiBzbmFwc2hv
dCA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICBSZWZQdHI8U2NyaXB0SGVhcFNuYXBzaG90PiBz
bmFwc2hvdCA9IGl0LT52YWx1ZTsKICAgICAgICAgICAgIHByb2ZpbGVPYmplY3QgPSBjcmVhdGVT
bmFwc2hvdEhlYWRlcigqc25hcHNob3QpOwogICAgICAgICAgICAgaWYgKG1fZnJvbnRlbmQpIHsK
ICAgICAgICAgICAgICAgICBPdXRwdXRTdHJlYW0gc3RyZWFtKG1fZnJvbnRlbmQsIHVpZCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2Vu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5j
cHAKaW5kZXggMzA4ODU0MGZmNzZhMjliYmI5MmEwOWM5MmM3OWUyMzQxN2UwYzAwYi4uMDJjNTA2
NmFjMzg3NmFjY2E5ZTg1ZDliZjVkNDdkZDM1MzhmNTg4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmNwcApAQCAtMTAwLDcgKzEw
MCw3IEBAIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JI
ZWFkZXJzKGNvbnN0IEhUVFBIZWFkZXJNYXAmIGhlCiAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gaGVhZGVyc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgSFRUUEhl
YWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaGVhZGVycy5lbmQoKTsKICAgICBmb3IgKEhU
VFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaGVhZGVycy5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpCi0gICAgICAgIGhlYWRlcnNPYmplY3QtPnNldFN0cmluZyhpdC0+Zmlyc3Quc3Ry
aW5nKCksIGl0LT5zZWNvbmQpOworICAgICAgICBoZWFkZXJzT2JqZWN0LT5zZXRTdHJpbmcoaXQt
PmtleS5zdHJpbmcoKSwgaXQtPnZhbHVlKTsKICAgICByZXR1cm4gaGVhZGVyc09iamVjdDsKIH0K
IApAQCAtMjExLDggKzIxMSw4IEBAIHZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6d2lsbFNl
bmRSZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbnRMCiAgICAgICAgIElu
c3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaGVhZGVycy0+ZW5kKCk7CiAgICAg
ICAgIGZvciAoSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciBpdCA9IGhlYWRlcnMtPmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgU3RyaW5nIHZhbHVlOwotICAg
ICAgICAgICAgaWYgKGl0LT5zZWNvbmQtPmFzU3RyaW5nKCZ2YWx1ZSkpCi0gICAgICAgICAgICAg
ICAgcmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoaXQtPmZpcnN0LCB2YWx1ZSk7CisgICAgICAg
ICAgICBpZiAoaXQtPnZhbHVlLT5hc1N0cmluZygmdmFsdWUpKQorICAgICAgICAgICAgICAgIHJl
cXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKGl0LT5rZXksIHZhbHVlKTsKICAgICAgICAgfQogICAg
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0YXRl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5jcHAKaW5kZXgg
N2UwMmViN2EyMWJlZGYxNzQ3ZjhmODc4YTQ3ODA3Y2I4MDlkNTdlNC4uZjQ4YWNiYTYzNjk5OTZj
ZDkxNmQzZmU1MmRjM2FlN2FmNmVlZDAwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclN0YXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yU3RhdGUuY3BwCkBAIC04MCw3ICs4MCw3IEBAIGJvb2wgSW5zcGVjdG9yU3RhdGU6
OmdldEJvb2xlYW4oY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCiAgICAgSW5zcGVjdG9yT2Jq
ZWN0OjppdGVyYXRvciBpdCA9IG1fcHJvcGVydGllcy0+ZmluZChwcm9wZXJ0eU5hbWUpOwogICAg
IGJvb2wgdmFsdWUgPSBmYWxzZTsKICAgICBpZiAoaXQgIT0gbV9wcm9wZXJ0aWVzLT5lbmQoKSkK
LSAgICAgICAgaXQtPnNlY29uZC0+YXNCb29sZWFuKCZ2YWx1ZSk7CisgICAgICAgIGl0LT52YWx1
ZS0+YXNCb29sZWFuKCZ2YWx1ZSk7CiAgICAgcmV0dXJuIHZhbHVlOwogfQogCkBAIC04OSw3ICs4
OSw3IEBAIFN0cmluZyBJbnNwZWN0b3JTdGF0ZTo6Z2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgcHJv
cGVydHlOYW1lKQogICAgIEluc3BlY3Rvck9iamVjdDo6aXRlcmF0b3IgaXQgPSBtX3Byb3BlcnRp
ZXMtPmZpbmQocHJvcGVydHlOYW1lKTsKICAgICBTdHJpbmcgdmFsdWU7CiAgICAgaWYgKGl0ICE9
IG1fcHJvcGVydGllcy0+ZW5kKCkpCi0gICAgICAgIGl0LT5zZWNvbmQtPmFzU3RyaW5nKCZ2YWx1
ZSk7CisgICAgICAgIGl0LT52YWx1ZS0+YXNTdHJpbmcoJnZhbHVlKTsKICAgICByZXR1cm4gdmFs
dWU7CiB9CiAKQEAgLTk4LDcgKzk4LDcgQEAgbG9uZyBJbnNwZWN0b3JTdGF0ZTo6Z2V0TG9uZyhj
b25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSkKICAgICBJbnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9y
IGl0ID0gbV9wcm9wZXJ0aWVzLT5maW5kKHByb3BlcnR5TmFtZSk7CiAgICAgbG9uZyB2YWx1ZSA9
IDA7CiAgICAgaWYgKGl0ICE9IG1fcHJvcGVydGllcy0+ZW5kKCkpCi0gICAgICAgIGl0LT5zZWNv
bmQtPmFzTnVtYmVyKCZ2YWx1ZSk7CisgICAgICAgIGl0LT52YWx1ZS0+YXNOdW1iZXIoJnZhbHVl
KTsKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKQEAgLTEwNyw3ICsxMDcsNyBAQCBkb3VibGUgSW5z
cGVjdG9yU3RhdGU6OmdldERvdWJsZShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSkKICAgICBJ
bnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9yIGl0ID0gbV9wcm9wZXJ0aWVzLT5maW5kKHByb3BlcnR5
TmFtZSk7CiAgICAgZG91YmxlIHZhbHVlID0gMDsKICAgICBpZiAoaXQgIT0gbV9wcm9wZXJ0aWVz
LT5lbmQoKSkKLSAgICAgICAgaXQtPnNlY29uZC0+YXNOdW1iZXIoJnZhbHVlKTsKKyAgICAgICAg
aXQtPnZhbHVlLT5hc051bWJlcigmdmFsdWUpOwogICAgIHJldHVybiB2YWx1ZTsKIH0KIApAQCAt
MTE4LDcgKzExOCw3IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JTdGF0
ZTo6Z2V0T2JqZWN0KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lCiAgICAgICAgIG1fcHJvcGVy
dGllcy0+c2V0T2JqZWN0KHByb3BlcnR5TmFtZSwgSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7
CiAgICAgICAgIGl0ID0gbV9wcm9wZXJ0aWVzLT5maW5kKHByb3BlcnR5TmFtZSk7CiAgICAgfQot
ICAgIHJldHVybiBpdC0+c2Vjb25kLT5hc09iamVjdCgpOworICAgIHJldHVybiBpdC0+dmFsdWUt
PmFzT2JqZWN0KCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcAppbmRleCAzYjllNGVlYmVh
ZWYyZTc5NDVjNDA3MThlZTQ5ZjIzZWJjNWI5ZGViLi44ODllYTQ1OTFhNzJmMTliMDdlYWI0ZGU4
ZmUyNTA1MmI4ODRkNzQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yU3R5bGVTaGVldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclN0eWxlU2hlZXQuY3BwCkBAIC01MTAsNyArNTEwLDcgQEAgUGFzc1JlZlB0cjxUeXBlQnVp
bGRlcjo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yU3R5bGU6OnN0eWxlV2l0aFByb3BlcnRpZXMo
KSBjb24KICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZEluYWN0aXZhdGUgPSB0cnVlOwog
ICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
cHJldmlvdXNQYXJzZWRPazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc3VjY2VzcyA9
IGFjdGl2ZUl0LT5zZWNvbmQtPmdldEJvb2xlYW4oInBhcnNlZE9rIiwgJnByZXZpb3VzUGFyc2Vk
T2spOworICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gYWN0aXZlSXQtPnZh
bHVlLT5nZXRCb29sZWFuKCJwYXJzZWRPayIsICZwcmV2aW91c1BhcnNlZE9rKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChzdWNjZXNzICYmICFwcmV2aW91c1BhcnNlZE9rKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNob3VsZEluYWN0aXZhdGUgPSB0cnVlOwogICAgICAgICAg
ICAgICAgICAgICB9CkBAIC01MTgsOCArNTE4LDggQEAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6
Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yU3R5bGU6OnN0eWxlV2l0aFByb3BlcnRpZXMoKSBjb24K
ICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5
LnNldChjYW5vbmljYWxQcm9wZXJ0eU5hbWUsIHByb3BlcnR5KTsKIAogICAgICAgICAgICAgICAg
IGlmIChzaG91bGRJbmFjdGl2YXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFjdGl2ZUl0LT5z
ZWNvbmQtPnNldFN0YXR1cyhUeXBlQnVpbGRlcjo6Q1NTOjpDU1NQcm9wZXJ0eTo6U3RhdHVzOjpJ
bmFjdGl2ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGFjdGl2ZUl0LT5zZWNvbmQtPnJlbW92ZSgi
c2hvcnRoYW5kTmFtZSIpOworICAgICAgICAgICAgICAgICAgICBhY3RpdmVJdC0+dmFsdWUtPnNl
dFN0YXR1cyhUeXBlQnVpbGRlcjo6Q1NTOjpDU1NQcm9wZXJ0eTo6U3RhdHVzOjpJbmFjdGl2ZSk7
CisgICAgICAgICAgICAgICAgICAgIGFjdGl2ZUl0LT52YWx1ZS0+cmVtb3ZlKCJzaG9ydGhhbmRO
YW1lIik7CiAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZVRvUHJldmlvdXNBY3RpdmVQ
cm9wZXJ0eS5zZXQoY2Fub25pY2FsUHJvcGVydHlOYW1lLCBwcm9wZXJ0eSk7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTEwMTQsNyArMTAxNCw3IEBAIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yU3R5bGU+IEluc3BlY3RvclN0eWxlU2hlZXQ6Omluc3BlY3RvclN0eWxl
Rm9ySWQoY29uc3QgSW5zcGVjCiAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JTdHlsZT4gaW5zcGVj
dG9yU3R5bGUgPSBJbnNwZWN0b3JTdHlsZTo6Y3JlYXRlKGlkLCBzdHlsZSwgdGhpcyk7CiAgICAg
ICAgIHJldHVybiBpbnNwZWN0b3JTdHlsZS5yZWxlYXNlKCk7CiAgICAgfQotICAgIHJldHVybiBp
dC0+c2Vjb25kOworICAgIHJldHVybiBpdC0+dmFsdWU7CiB9CiAKIHZvaWQgSW5zcGVjdG9yU3R5
bGVTaGVldDo6cmVtZW1iZXJJbnNwZWN0b3JTdHlsZShSZWZQdHI8SW5zcGVjdG9yU3R5bGU+IGlu
c3BlY3RvclN0eWxlKQpAQCAtMTA5OSw4ICsxMDk5LDggQEAgYm9vbCBJbnNwZWN0b3JTdHlsZVNo
ZWV0OjplbnN1cmVTb3VyY2VEYXRhKCkKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBzaXplID0g
cnVsZXMuc2l6ZSgpOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIFN0eWxlUnVsZVJhbmdlTWFw
OjppdGVyYXRvciBpdCA9IHJ1bGVSYW5nZU1hcC5maW5kKHJ1bGVzLmF0KGkpKTsKICAgICAgICAg
aWYgKGl0ICE9IHJ1bGVSYW5nZU1hcC5lbmQoKSkgewotICAgICAgICAgICAgZml4VW5wYXJzZWRQ
cm9wZXJ0eVJhbmdlcyhpdC0+c2Vjb25kLmdldCgpLCBtX3BhcnNlZFN0eWxlU2hlZXQtPnRleHQo
KSk7Ci0gICAgICAgICAgICByYW5nZXNWZWN0b3ItPmFwcGVuZChpdC0+c2Vjb25kKTsKKyAgICAg
ICAgICAgIGZpeFVucGFyc2VkUHJvcGVydHlSYW5nZXMoaXQtPnZhbHVlLmdldCgpLCBtX3BhcnNl
ZFN0eWxlU2hlZXQtPnRleHQoKSk7CisgICAgICAgICAgICByYW5nZXNWZWN0b3ItPmFwcGVuZChp
dC0+dmFsdWUpOwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JWYWx1ZXMuY3BwCmluZGV4IGI4OTU5MzcyYjBlZjMwYmRmZjVhODAzZWFmOTcw
OTAwZjc5ODc3NDEuLjE0ODM1NGRhY2YzOGRmMmUwNjYzZGQ1MTBmMTM4ZGVhNzQyMmZiZWIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwCkBAIC03MTMs
NyArNzEzLDcgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gSW5zcGVjdG9yT2JqZWN0Ojpn
ZXQoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAogICAgIERpY3Rpb25hcnk6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV9kYXRhLmZpbmQobmFtZSk7CiAgICAgaWYgKGl0ID09IG1fZGF0YS5lbmQoKSkK
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgcmV0dXJuIGl0
LT52YWx1ZTsKIH0KIAogdm9pZCBJbnNwZWN0b3JPYmplY3Q6OnJlbW92ZShjb25zdCBTdHJpbmcm
IG5hbWUpCkBAIC03MzUsOSArNzM1LDkgQEAgdm9pZCBJbnNwZWN0b3JPYmplY3Q6OndyaXRlSlNP
TihTdHJpbmdCdWlsZGVyKiBvdXRwdXQpIGNvbnN0CiAgICAgICAgIEFTU0VSVChpdCAhPSBtX2Rh
dGEuZW5kKCkpOwogICAgICAgICBpZiAoaSkKICAgICAgICAgICAgIG91dHB1dC0+YXBwZW5kKCcs
Jyk7Ci0gICAgICAgIGRvdWJsZVF1b3RlU3RyaW5nKGl0LT5maXJzdCwgb3V0cHV0KTsKKyAgICAg
ICAgZG91YmxlUXVvdGVTdHJpbmcoaXQtPmtleSwgb3V0cHV0KTsKICAgICAgICAgb3V0cHV0LT5h
cHBlbmQoJzonKTsKLSAgICAgICAgaXQtPnNlY29uZC0+d3JpdGVKU09OKG91dHB1dCk7CisgICAg
ICAgIGl0LT52YWx1ZS0+d3JpdGVKU09OKG91dHB1dCk7CiAgICAgfQogICAgIG91dHB1dC0+YXBw
ZW5kKCd9Jyk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yV29ya2VyQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvcldv
cmtlckFnZW50LmNwcAppbmRleCAxYjM4NTk1NzFjYWZjMjNlNGM1NDFkMzQ5YzI2MGRhMWZlNGYz
Yjk2Li4wNjFmNDc0ZWYxMDUwMDRjZDg4NjhiZjY1YTdhYmFkYzY1Y2RjZWJkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yV29ya2VyQWdlbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JXb3JrZXJBZ2VudC5jcHAKQEAgLTE5
OSw5ICsxOTksOSBAQCB2b2lkIEluc3BlY3RvcldvcmtlckFnZW50Ojp3b3JrZXJDb250ZXh0VGVy
bWluYXRlZChXb3JrZXJDb250ZXh0UHJveHkqIHByb3h5KQogewogICAgIG1fZGVkaWNhdGVkV29y
a2Vycy5yZW1vdmUocHJveHkpOwogICAgIGZvciAoV29ya2VyQ2hhbm5lbHM6Oml0ZXJhdG9yIGl0
ID0gbV9pZFRvQ2hhbm5lbC5iZWdpbigpOyBpdCAhPSBtX2lkVG9DaGFubmVsLmVuZCgpOyArK2l0
KSB7Ci0gICAgICAgIGlmIChwcm94eSA9PSBpdC0+c2Vjb25kLT5wcm94eSgpKSB7Ci0gICAgICAg
ICAgICBtX2luc3BlY3RvckZyb250ZW5kLT53b3JrZXIoKS0+d29ya2VyVGVybWluYXRlZChpdC0+
Zmlyc3QpOwotICAgICAgICAgICAgZGVsZXRlIGl0LT5zZWNvbmQ7CisgICAgICAgIGlmIChwcm94
eSA9PSBpdC0+dmFsdWUtPnByb3h5KCkpIHsKKyAgICAgICAgICAgIG1faW5zcGVjdG9yRnJvbnRl
bmQtPndvcmtlcigpLT53b3JrZXJUZXJtaW5hdGVkKGl0LT5rZXkpOworICAgICAgICAgICAgZGVs
ZXRlIGl0LT52YWx1ZTsKICAgICAgICAgICAgIG1faWRUb0NoYW5uZWwucmVtb3ZlKGl0KTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMjExLDE0ICsyMTEsMTQgQEAgdm9pZCBJ
bnNwZWN0b3JXb3JrZXJBZ2VudDo6d29ya2VyQ29udGV4dFRlcm1pbmF0ZWQoV29ya2VyQ29udGV4
dFByb3h5KiBwcm94eSkKIHZvaWQgSW5zcGVjdG9yV29ya2VyQWdlbnQ6OmNyZWF0ZVdvcmtlckZy
b250ZW5kQ2hhbm5lbHNGb3JFeGlzdGluZ1dvcmtlcnMoKQogewogICAgIGZvciAoRGVkaWNhdGVk
V29ya2Vyczo6aXRlcmF0b3IgaXQgPSBtX2RlZGljYXRlZFdvcmtlcnMuYmVnaW4oKTsgaXQgIT0g
bV9kZWRpY2F0ZWRXb3JrZXJzLmVuZCgpOyArK2l0KQotICAgICAgICBjcmVhdGVXb3JrZXJGcm9u
dGVuZENoYW5uZWwoaXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsKKyAgICAgICAgY3JlYXRlV29ya2Vy
RnJvbnRlbmRDaGFubmVsKGl0LT5rZXksIGl0LT52YWx1ZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9y
V29ya2VyQWdlbnQ6OmRlc3Ryb3lXb3JrZXJGcm9udGVuZENoYW5uZWxzKCkKIHsKICAgICBmb3Ig
KFdvcmtlckNoYW5uZWxzOjppdGVyYXRvciBpdCA9IG1faWRUb0NoYW5uZWwuYmVnaW4oKTsgaXQg
IT0gbV9pZFRvQ2hhbm5lbC5lbmQoKTsgKytpdCkgewotICAgICAgICBpdC0+c2Vjb25kLT5kaXNj
b25uZWN0RnJvbVdvcmtlckNvbnRleHQoKTsKLSAgICAgICAgZGVsZXRlIGl0LT5zZWNvbmQ7Cisg
ICAgICAgIGl0LT52YWx1ZS0+ZGlzY29ubmVjdEZyb21Xb3JrZXJDb250ZXh0KCk7CisgICAgICAg
IGRlbGV0ZSBpdC0+dmFsdWU7CiAgICAgfQogICAgIG1faWRUb0NoYW5uZWwuY2xlYXIoKTsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0
YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvTmV0d29ya1Jlc291cmNlc0RhdGEuY3Bw
CmluZGV4IDUyZWJhZjMwNzA0NmRmNGVhNjY1MGE0YjQ5ZTYwYzhlMDBkMWI3MzYuLmM2ZWQ0NTQ2
ZjA2MmExMTEwNWRmOTFiNWE4YmRlZjUzMDI5M2EyYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL05ldHdvcmtSZXNvdXJjZXNEYXRhLmNwcApAQCAtMjQ2LDkgKzI0Niw5IEBA
IHZvaWQgTmV0d29ya1Jlc291cmNlc0RhdGE6OmNsZWFyKGNvbnN0IFN0cmluZyYgcHJlc2VydmVk
TG9hZGVySWQpCiAgICAgUmVzb3VyY2VEYXRhTWFwOjppdGVyYXRvciBpdDsKICAgICBSZXNvdXJj
ZURhdGFNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fcmVxdWVzdElkVG9SZXNvdXJjZURhdGFNYXAuZW5k
KCk7CiAgICAgZm9yIChpdCA9IG1fcmVxdWVzdElkVG9SZXNvdXJjZURhdGFNYXAuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFJlc291cmNlRGF0YSogcmVzb3VyY2VEYXRhID0g
aXQtPnNlY29uZDsKKyAgICAgICAgUmVzb3VyY2VEYXRhKiByZXNvdXJjZURhdGEgPSBpdC0+dmFs
dWU7CiAgICAgICAgIGlmICghcHJlc2VydmVkTG9hZGVySWQuaXNOdWxsKCkgJiYgcmVzb3VyY2VE
YXRhLT5sb2FkZXJJZCgpID09IHByZXNlcnZlZExvYWRlcklkKQotICAgICAgICAgICAgcHJlc2Vy
dmVkTWFwLnNldChpdC0+Zmlyc3QsIGl0LT5zZWNvbmQpOworICAgICAgICAgICAgcHJlc2VydmVk
TWFwLnNldChpdC0+a2V5LCBpdC0+dmFsdWUpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBk
ZWxldGUgcmVzb3VyY2VEYXRhOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9Dcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVy
L0Nyb3NzT3JpZ2luQWNjZXNzQ29udHJvbC5jcHAKaW5kZXggYzBmODk0NWNmODdjMzUyMDJhMjM3
YmI0Mjg1ODI1NzIyZjU0MjY2My4uOTAwNzMzNWNhNTI1NDJlOWMyMWYwM2M5ZTEwODhiYWUzMTU3
ZDIwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luQWNjZXNz
Q29udHJvbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luQWNjZXNz
Q29udHJvbC5jcHAKQEAgLTY4LDcgKzY4LDcgQEAgYm9vbCBpc1NpbXBsZUNyb3NzT3JpZ2luQWNj
ZXNzUmVxdWVzdChjb25zdCBTdHJpbmcmIG1ldGhvZCwgY29uc3QgSFRUUEhlYWRlck1hcCYKIAog
ICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGhlYWRlck1hcC5lbmQoKTsK
ICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaGVhZGVyTWFwLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoIWlzT25BY2Nlc3NDb250cm9s
U2ltcGxlUmVxdWVzdEhlYWRlcldoaXRlbGlzdChpdC0+Zmlyc3QsIGl0LT5zZWNvbmQpKQorICAg
ICAgICBpZiAoIWlzT25BY2Nlc3NDb250cm9sU2ltcGxlUmVxdWVzdEhlYWRlcldoaXRlbGlzdChp
dC0+a2V5LCBpdC0+dmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApA
QCAtMTE2LDE0ICsxMTYsMTQgQEAgUmVzb3VyY2VSZXF1ZXN0IGNyZWF0ZUFjY2Vzc0NvbnRyb2xQ
cmVmbGlnaHRSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWUKICAgICBpZiAocmVx
dWVzdEhlYWRlckZpZWxkcy5zaXplKCkgPiAwKSB7CiAgICAgICAgIFN0cmluZ0J1aWxkZXIgaGVh
ZGVyQnVmZmVyOwogICAgICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHJl
cXVlc3RIZWFkZXJGaWVsZHMuYmVnaW4oKTsKLSAgICAgICAgaGVhZGVyQnVmZmVyLmFwcGVuZChp
dC0+Zmlyc3QpOworICAgICAgICBoZWFkZXJCdWZmZXIuYXBwZW5kKGl0LT5rZXkpOwogICAgICAg
ICArK2l0OwogCiAgICAgICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHJl
cXVlc3RIZWFkZXJGaWVsZHMuZW5kKCk7CiAgICAgICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQp
IHsKICAgICAgICAgICAgIGhlYWRlckJ1ZmZlci5hcHBlbmQoJywnKTsKICAgICAgICAgICAgIGhl
YWRlckJ1ZmZlci5hcHBlbmQoJyAnKTsKLSAgICAgICAgICAgIGhlYWRlckJ1ZmZlci5hcHBlbmQo
aXQtPmZpcnN0KTsKKyAgICAgICAgICAgIGhlYWRlckJ1ZmZlci5hcHBlbmQoaXQtPmtleSk7CiAg
ICAgICAgIH0KIAogICAgICAgICBwcmVmbGlnaHRSZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZCgi
QWNjZXNzLUNvbnRyb2wtUmVxdWVzdC1IZWFkZXJzIiwgaGVhZGVyQnVmZmVyLnRvU3RyaW5nKCku
bG93ZXIoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5Q
cmVmbGlnaHRSZXN1bHRDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmln
aW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5jcHAKaW5kZXggMTk4ZGRhZmEzYzdjNjcyOTU4MjVmMGE2
OGI4MmM3OGIwMDQ4Nzk4ZS4uMzFjNWI1ZWJkZGQzMDg0ZTlhMGUzNmQzNTRiMTA5OGJkOWU3OWUx
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luUHJlZmxpZ2h0
UmVzdWx0Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpblBy
ZWZsaWdodFJlc3VsdENhY2hlLmNwcApAQCAtMTI3LDggKzEyNyw4IEBAIGJvb2wgQ3Jvc3NPcmln
aW5QcmVmbGlnaHRSZXN1bHRDYWNoZUl0ZW06OmFsbG93c0Nyb3NzT3JpZ2luSGVhZGVycyhjb25z
dCBIVFRQSGVhCiB7CiAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcmVx
dWVzdEhlYWRlcnMuZW5kKCk7CiAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IHJlcXVlc3RIZWFkZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAg
ICBpZiAoIW1faGVhZGVycy5jb250YWlucyhpdC0+Zmlyc3QpICYmICFpc09uQWNjZXNzQ29udHJv
bFNpbXBsZVJlcXVlc3RIZWFkZXJXaGl0ZWxpc3QoaXQtPmZpcnN0LCBpdC0+c2Vjb25kKSkgewot
ICAgICAgICAgICAgZXJyb3JEZXNjcmlwdGlvbiA9ICJSZXF1ZXN0IGhlYWRlciBmaWVsZCAiICsg
aXQtPmZpcnN0LnN0cmluZygpICsgIiBpcyBub3QgYWxsb3dlZCBieSBBY2Nlc3MtQ29udHJvbC1B
bGxvdy1IZWFkZXJzLiI7CisgICAgICAgIGlmICghbV9oZWFkZXJzLmNvbnRhaW5zKGl0LT5rZXkp
ICYmICFpc09uQWNjZXNzQ29udHJvbFNpbXBsZVJlcXVlc3RIZWFkZXJXaGl0ZWxpc3QoaXQtPmtl
eSwgaXQtPnZhbHVlKSkgeworICAgICAgICAgICAgZXJyb3JEZXNjcmlwdGlvbiA9ICJSZXF1ZXN0
IGhlYWRlciBmaWVsZCAiICsgaXQtPmtleS5zdHJpbmcoKSArICIgaXMgbm90IGFsbG93ZWQgYnkg
QWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVycy4iOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICB9CiAgICAgfQpAQCAtMTY5LDcgKzE2OSw3IEBAIGJvb2wgQ3Jvc3NPcmlnaW5Q
cmVmbGlnaHRSZXN1bHRDYWNoZTo6Y2FuU2tpcFByZWZsaWdodChjb25zdCBTdHJpbmcmIG9yaWdp
biwgY29uCiAgICAgaWYgKGNhY2hlSXQgPT0gbV9wcmVmbGlnaHRIYXNoTWFwLmVuZCgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoY2FjaGVJdC0+c2Vjb25kLT5hbGxvd3NSZXF1
ZXN0KGluY2x1ZGVDcmVkZW50aWFscywgbWV0aG9kLCByZXF1ZXN0SGVhZGVycykpCisgICAgaWYg
KGNhY2hlSXQtPnZhbHVlLT5hbGxvd3NSZXF1ZXN0KGluY2x1ZGVDcmVkZW50aWFscywgbWV0aG9k
LCByZXF1ZXN0SGVhZGVycykpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgbV9wcmVmbGln
aHRIYXNoTWFwLnJlbW92ZShjYWNoZUl0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9Eb2N1bWVudExvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRM
b2FkZXIuY3BwCmluZGV4IGNkNTA1M2Y2YzkxNmNmMjQyZmQ2Mzg5ODNiOGNjNTRmYjc5NzI5YzQu
LjFjMTkwZGFlNjQxODkzN2VjMzdjMTgxYTgxOTg3MGE4NTYxZWU1OTkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcApAQCAtNTU3LDcgKzU1Nyw3IEBAIHZvaWQgRG9j
dW1lbnRMb2FkZXI6OmdldFN1YnJlc291cmNlcyhWZWN0b3I8UGFzc1JlZlB0cjxBcmNoaXZlUmVz
b3VyY2U+ID4mIHN1YnJlCiAgICAgY29uc3QgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OkRvY3VtZW50
UmVzb3VyY2VNYXAmIGFsbFJlc291cmNlcyA9IGRvY3VtZW50LT5jYWNoZWRSZXNvdXJjZUxvYWRl
cigpLT5hbGxDYWNoZWRSZXNvdXJjZXMoKTsKICAgICBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6RG9j
dW1lbnRSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gYWxsUmVzb3VyY2VzLmVuZCgp
OwogICAgIGZvciAoQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OkRvY3VtZW50UmVzb3VyY2VNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gYWxsUmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewotICAgICAgICBSZWZQdHI8QXJjaGl2ZVJlc291cmNlPiBzdWJyZXNvdXJjZSA9IHRoaXMtPnN1
YnJlc291cmNlKEtVUkwoUGFyc2VkVVJMU3RyaW5nLCBpdC0+c2Vjb25kLT51cmwoKSkpOworICAg
ICAgICBSZWZQdHI8QXJjaGl2ZVJlc291cmNlPiBzdWJyZXNvdXJjZSA9IHRoaXMtPnN1YnJlc291
cmNlKEtVUkwoUGFyc2VkVVJMU3RyaW5nLCBpdC0+dmFsdWUtPnVybCgpKSk7CiAgICAgICAgIGlm
IChzdWJyZXNvdXJjZSkKICAgICAgICAgICAgIHN1YnJlc291cmNlcy5hcHBlbmQoc3VicmVzb3Vy
Y2UucmVsZWFzZSgpKTsKICAgICB9CkBAIC01ODksOCArNTg5LDggQEAgdm9pZCBEb2N1bWVudExv
YWRlcjo6c3Vic3RpdHV0ZVJlc291cmNlRGVsaXZlcnlUaW1lckZpcmVkKFRpbWVyPERvY3VtZW50
TG9hZGVyPioKIAogICAgIFN1YnN0aXR1dGVSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gY29weS5lbmQoKTsKICAgICBmb3IgKFN1YnN0aXR1dGVSZXNvdXJjZU1hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBjb3B5LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBSZWZQ
dHI8UmVzb3VyY2VMb2FkZXI+IGxvYWRlciA9IGl0LT5maXJzdDsKLSAgICAgICAgU3Vic3RpdHV0
ZVJlc291cmNlKiByZXNvdXJjZSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIFJlZlB0cjxS
ZXNvdXJjZUxvYWRlcj4gbG9hZGVyID0gaXQtPmtleTsKKyAgICAgICAgU3Vic3RpdHV0ZVJlc291
cmNlKiByZXNvdXJjZSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgCiAgICAgICAgIGlmIChy
ZXNvdXJjZSkgewogICAgICAgICAgICAgU2hhcmVkQnVmZmVyKiBkYXRhID0gcmVzb3VyY2UtPmRh
dGEoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9NYWluUmVzb3VyY2VMb2Fk
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL01haW5SZXNvdXJjZUxvYWRlci5jcHAKaW5k
ZXggM2E1NzYxNTI3ZjJkYjU3YzViYjAwZDYxMTFlMGIxY2VmYzIzODk1MC4uNjIwMWYzMGFiZmQ1
NmNmNWIzYzZhOWUzNDlmZmU1NTQ2NTI2MTY1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
bG9hZGVyL01haW5SZXNvdXJjZUxvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVy
L01haW5SZXNvdXJjZUxvYWRlci5jcHAKQEAgLTM2NSw3ICszNjUsNyBAQCB2b2lkIE1haW5SZXNv
dXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHIp
CiAKICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHIuaHR0cEhlYWRlckZp
ZWxkcygpLmZpbmQoQXRvbWljU3RyaW5nKCJ4LWZyYW1lLW9wdGlvbnMiKSk7CiAgICAgaWYgKGl0
ICE9IHIuaHR0cEhlYWRlckZpZWxkcygpLmVuZCgpKSB7Ci0gICAgICAgIFN0cmluZyBjb250ZW50
ID0gaXQtPnNlY29uZDsKKyAgICAgICAgU3RyaW5nIGNvbnRlbnQgPSBpdC0+dmFsdWU7CiAgICAg
ICAgIGlmIChtX2ZyYW1lLT5sb2FkZXIoKS0+c2hvdWxkSW50ZXJydXB0TG9hZEZvclhGcmFtZU9w
dGlvbnMoY29udGVudCwgci51cmwoKSkpIHsKICAgICAgICAgICAgIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6Y29udGludWVBZnRlclhGcmFtZU9wdGlvbnNEZW5pZWQobV9mcmFtZS5nZXQoKSwg
ZG9jdW1lbnRMb2FkZXIoKSwgaWRlbnRpZmllcigpLCByKTsKICAgICAgICAgICAgIERFRklORV9T
VEFUSUNfTE9DQUwoU3RyaW5nLCBjb25zb2xlTWVzc2FnZSwgKCJSZWZ1c2VkIHRvIGRpc3BsYXkg
ZG9jdW1lbnQgYmVjYXVzZSBkaXNwbGF5IGZvcmJpZGRlbiBieSBYLUZyYW1lLU9wdGlvbnMuXG4i
KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1
bGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3Bw
CmluZGV4IDgwMDRkOGYyZWIyZDhiYzM2MDZhMDY5ZmM3ZWVhMzUxYWZjZmNkYWEuLjhlYjQ0ZDQ5
ZDI5YTY4NDY2NGQ4MzI1Y2EyNjFmNTc1YzY0MTBiNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCkBAIC0xNzQsNyArMTc0LDcgQEAgdm9p
ZCBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNlcnZlUGVuZGluZ1JlcXVlc3RzKFJlc291cmNlTG9h
ZFByaW9yaXR5IG1pbmltdW1QcmkKICAgICBtX2hvc3RzLmNoZWNrQ29uc2lzdGVuY3koKTsKICAg
ICBIb3N0TWFwOjppdGVyYXRvciBlbmQgPSBtX2hvc3RzLmVuZCgpOwogICAgIGZvciAoSG9zdE1h
cDo6aXRlcmF0b3IgaXRlciA9IG1faG9zdHMuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikK
LSAgICAgICAgaG9zdHNUb1NlcnZlLmFwcGVuZChpdGVyLT5zZWNvbmQpOworICAgICAgICBob3N0
c1RvU2VydmUuYXBwZW5kKGl0ZXItPnZhbHVlKTsKIAogICAgIGludCBzaXplID0gaG9zdHNUb1Nl
cnZlLnNpemUoKTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkgewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1N1YmZyYW1lTG9hZGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9TdWJmcmFtZUxvYWRlci5jcHAKaW5kZXggMWZmNDdlNjY0ZGJlNTQ4ODYz
ZmI0OGQ0YTc1M2I2NGU5MDc4YzI0Ny4uMWFjNGRkM2ZjOGU3NGFmYmI4NTBhNjk3YjJiZjM3M2Rm
MDA5Yzc4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1N1YmZyYW1lTG9hZGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvU3ViZnJhbWVMb2FkZXIuY3BwCkBAIC0y
MDcsMTIgKzIwNywxMiBAQCBQYXNzUmVmUHRyPFdpZGdldD4gU3ViZnJhbWVMb2FkZXI6OmNyZWF0
ZUphdmFBcHBsZXRXaWRnZXQoY29uc3QgTGF5b3V0U2l6ZSYgc2l6ZQogICAgIFZlY3RvcjxTdHJp
bmc+IHBhcmFtVmFsdWVzOwogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVy
YXRvciBlbmQgPSBhcmdzLmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYXJncy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAg
ICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGl0LT5maXJzdCwgImJhc2V1cmwiKSkKLSAgICAg
ICAgICAgIGJhc2VVUkxTdHJpbmcgPSBpdC0+c2Vjb25kOwotICAgICAgICBlbHNlIGlmIChlcXVh
bElnbm9yaW5nQ2FzZShpdC0+Zmlyc3QsICJjb2RlYmFzZSIpKQotICAgICAgICAgICAgY29kZUJh
c2VVUkxTdHJpbmcgPSBpdC0+c2Vjb25kOwotICAgICAgICBwYXJhbU5hbWVzLmFwcGVuZChpdC0+
Zmlyc3QpOwotICAgICAgICBwYXJhbVZhbHVlcy5hcHBlbmQoaXQtPnNlY29uZCk7CisgICAgICAg
IGlmIChlcXVhbElnbm9yaW5nQ2FzZShpdC0+a2V5LCAiYmFzZXVybCIpKQorICAgICAgICAgICAg
YmFzZVVSTFN0cmluZyA9IGl0LT52YWx1ZTsKKyAgICAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmlu
Z0Nhc2UoaXQtPmtleSwgImNvZGViYXNlIikpCisgICAgICAgICAgICBjb2RlQmFzZVVSTFN0cmlu
ZyA9IGl0LT52YWx1ZTsKKyAgICAgICAgcGFyYW1OYW1lcy5hcHBlbmQoaXQtPmtleSk7CisgICAg
ICAgIHBhcmFtVmFsdWVzLmFwcGVuZChpdC0+dmFsdWUpOwogICAgIH0KIAogICAgIGlmICghY29k
ZUJhc2VVUkxTdHJpbmcuaXNFbXB0eSgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZS5jcHAKaW5kZXggNjNjZDdiYmJmYTg3ODlmNGFk
YjNkZjUyY2I0ZTljMTdkZDcxNTk0NC4uYjdlYTY1MjRjNDAzOTc1ZmYwZGY5NDZhMmYwZDAxMWNi
MTcwMGE2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxp
Y2F0aW9uQ2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBs
aWNhdGlvbkNhY2hlLmNwcApAQCAtMTAwLDExICsxMDAsMTEgQEAgdW5zaWduZWQgQXBwbGljYXRp
b25DYWNoZTo6cmVtb3ZlUmVzb3VyY2UoY29uc3QgU3RyaW5nJiB1cmwpCiAgICAgICAgIHJldHVy
biAwOwogCiAgICAgLy8gVGhlIHJlc291cmNlIGV4aXN0cywgZ2V0IGl0cyB0eXBlIHNvIHdlIGNh
biByZXR1cm4gaXQuCi0gICAgdW5zaWduZWQgdHlwZSA9IGl0LT5zZWNvbmQtPnR5cGUoKTsKKyAg
ICB1bnNpZ25lZCB0eXBlID0gaXQtPnZhbHVlLT50eXBlKCk7CiAKICAgICBtX3Jlc291cmNlcy5y
ZW1vdmUoaXQpOwogCi0gICAgbV9lc3RpbWF0ZWRTaXplSW5TdG9yYWdlIC09IGl0LT5zZWNvbmQt
PmVzdGltYXRlZFNpemVJblN0b3JhZ2UoKTsKKyAgICBtX2VzdGltYXRlZFNpemVJblN0b3JhZ2Ug
LT0gaXQtPnZhbHVlLT5lc3RpbWF0ZWRTaXplSW5TdG9yYWdlKCk7CiAKICAgICByZXR1cm4gdHlw
ZTsKIH0gICAgCkBAIC0xODAsNyArMTgwLDcgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlOjpjbGVh
clN0b3JhZ2VJRCgpCiAgICAgCiAgICAgUmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IG1fcmVzb3VyY2VzLmVuZCgpOwogICAgIGZvciAoUmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbV9yZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+
c2Vjb25kLT5jbGVhclN0b3JhZ2VJRCgpOworICAgICAgICBpdC0+dmFsdWUtPmNsZWFyU3RvcmFn
ZUlEKCk7CiB9CiAgICAgCiB2b2lkIEFwcGxpY2F0aW9uQ2FjaGU6OmRlbGV0ZUNhY2hlRm9yT3Jp
Z2luKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCkBAIC0yMTgsOCArMjE4LDggQEAgdm9pZCBBcHBs
aWNhdGlvbkNhY2hlOjpkdW1wKCkKICAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPEFwcGxpY2F0
aW9uQ2FjaGVSZXNvdXJjZT4gPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9yZXNvdXJjZXMuZW5k
KCk7CiAgICAgCiAgICAgZm9yIChIYXNoTWFwPFN0cmluZywgUmVmUHRyPEFwcGxpY2F0aW9uQ2Fj
aGVSZXNvdXJjZT4gPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgcHJpbnRmKCIlcyAiLCBpdC0+Zmlyc3QuYXNjaWko
KS5kYXRhKCkpOwotICAgICAgICBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OmR1bXBUeXBlKGl0
LT5zZWNvbmQtPnR5cGUoKSk7CisgICAgICAgIHByaW50ZigiJXMgIiwgaXQtPmtleS5hc2NpaSgp
LmRhdGEoKSk7CisgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6ZHVtcFR5cGUoaXQt
PnZhbHVlLT50eXBlKCkpOwogICAgIH0KIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVHcm91cC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmNwcAppbmRleCA0
ZTQyOTM4YmI1ZDU3ZDYxMmJkZjM1MGNmMTkzNDA0MDI0Mjc5YWY5Li5kNjQ1MDMwZWYwMGU3ZDAx
Nzg3OTBmNzc5NDBjN2IwZGM4ZTNhMzAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmNwcApAQCAtNzc1LDkgKzc3
NSw5IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpkaWRGaW5pc2hMb2FkaW5nTWFuaWZl
c3QoKQogICAgIGlmIChpc1VwZ3JhZGVBdHRlbXB0KSB7CiAgICAgICAgIEFwcGxpY2F0aW9uQ2Fj
aGU6OlJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX25ld2VzdENhY2hlLT5lbmQo
KTsKICAgICAgICAgZm9yIChBcHBsaWNhdGlvbkNhY2hlOjpSZXNvdXJjZU1hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX25ld2VzdENhY2hlLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAg
ICAgICAgICAgIHVuc2lnbmVkIHR5cGUgPSBpdC0+c2Vjb25kLT50eXBlKCk7CisgICAgICAgICAg
ICB1bnNpZ25lZCB0eXBlID0gaXQtPnZhbHVlLT50eXBlKCk7CiAgICAgICAgICAgICBpZiAodHlw
ZSAmIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6TWFzdGVyKQotICAgICAgICAgICAgICAgIGFk
ZEVudHJ5KGl0LT5maXJzdCwgdHlwZSk7CisgICAgICAgICAgICAgICAgYWRkRW50cnkoaXQtPmtl
eSwgdHlwZSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC0xMDE2LDcgKzEwMTYsNyBAQCB2
b2lkIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6c3RhcnRMb2FkaW5nRW50cnkoKQogCiAgICAgQVNT
RVJUKCFtX2N1cnJlbnRIYW5kbGUpOwogICAgIAotICAgIG1fY3VycmVudEhhbmRsZSA9IGNyZWF0
ZVJlc291cmNlSGFuZGxlKEtVUkwoUGFyc2VkVVJMU3RyaW5nLCBpdC0+Zmlyc3QpLCBtX25ld2Vz
dENhY2hlID8gbV9uZXdlc3RDYWNoZS0+cmVzb3VyY2VGb3JVUkwoaXQtPmZpcnN0KSA6IDApOwor
ICAgIG1fY3VycmVudEhhbmRsZSA9IGNyZWF0ZVJlc291cmNlSGFuZGxlKEtVUkwoUGFyc2VkVVJM
U3RyaW5nLCBpdC0+a2V5KSwgbV9uZXdlc3RDYWNoZSA/IG1fbmV3ZXN0Q2FjaGUtPnJlc291cmNl
Rm9yVVJMKGl0LT5rZXkpIDogMCk7CiB9CiAKIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpk
ZWxpdmVyRGVsYXllZE1haW5SZXNvdXJjZXMoKQpAQCAtMTA2NSw3ICsxMDY1LDcgQEAgdm9pZCBB
cHBsaWNhdGlvbkNhY2hlR3JvdXA6OmFkZEVudHJ5KGNvbnN0IFN0cmluZyYgdXJsLCB1bnNpZ25l
ZCB0eXBlKQogICAgIEVudHJ5TWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9wZW5kaW5nRW50cmll
cy5hZGQodXJsLCB0eXBlKTsKICAgICAKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAg
ICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCB8PSB0eXBlOworICAgICAgICByZXN1bHQuaXRl
cmF0b3ItPnZhbHVlIHw9IHR5cGU7CiB9CiAKIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjph
c3NvY2lhdGVEb2N1bWVudExvYWRlcldpdGhDYWNoZShEb2N1bWVudExvYWRlciogbG9hZGVyLCBB
cHBsaWNhdGlvbkNhY2hlKiBjYWNoZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUhvc3QuY3BwCmluZGV4IDgwMWMxYjM2NzAzMWEz
MzlkYjQ0NzA3YTkyZDFiYzgwZDQxZDhjNzkuLmZlOWYwMTBhMGZlNjUwM2QwYmM1ZTViOTI3NzBh
M2Y3YjY0MzQ0ZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9B
cHBsaWNhdGlvbkNhY2hlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNh
Y2hlL0FwcGxpY2F0aW9uQ2FjaGVIb3N0LmNwcApAQCAtMjgyLDcgKzI4Miw3IEBAIHZvaWQgQXBw
bGljYXRpb25DYWNoZUhvc3Q6OmZpbGxSZXNvdXJjZUxpc3QoUmVzb3VyY2VJbmZvTGlzdCogcmVz
b3VyY2VzKQogICAgICAKICAgICBBcHBsaWNhdGlvbkNhY2hlOjpSZXNvdXJjZU1hcDo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gY2FjaGUtPmVuZCgpOwogICAgIGZvciAoQXBwbGljYXRpb25DYWNoZTo6
UmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY2FjaGUtPmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewotICAgICAgICBSZWZQdHI8QXBwbGljYXRpb25DYWNoZVJlc291cmNlPiByZXNv
dXJjZSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlUmVzb3Vy
Y2U+IHJlc291cmNlID0gaXQtPnZhbHVlOwogICAgICAgICB1bnNpZ25lZCB0eXBlID0gcmVzb3Vy
Y2UtPnR5cGUoKTsKICAgICAgICAgYm9vbCBpc01hc3RlciAgID0gdHlwZSAmIEFwcGxpY2F0aW9u
Q2FjaGVSZXNvdXJjZTo6TWFzdGVyOwogICAgICAgICBib29sIGlzTWFuaWZlc3QgPSB0eXBlICYg
QXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpNYW5pZmVzdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuY3BwIGIvU291
cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5jcHAK
aW5kZXggZDgzMTc4NGI0MTk2YWRmMzgyY2YzNTVlMGVlZjAyZDZhN2E4MDc5MC4uOTk3NjZlM2E2
NmJkMzZlYjQyZmVkMmE5MjY5ZDM0YjA2NjE5NGQ3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5jcHAK
QEAgLTU0LDcgKzU0LDcgQEAgaW50NjRfdCBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OmVzdGlt
YXRlZFNpemVJblN0b3JhZ2UoKQogCiAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gcmVzcG9uc2UoKS5odHRwSGVhZGVyRmllbGRzKCkuZW5kKCk7CiAgICAgZm9yIChIVFRQ
SGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHJlc3BvbnNlKCkuaHR0cEhlYWRlckZpZWxk
cygpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgbV9lc3RpbWF0ZWRTaXplSW5T
dG9yYWdlICs9IChpdC0+Zmlyc3QubGVuZ3RoKCkgKyBpdC0+c2Vjb25kLmxlbmd0aCgpICsgMikg
KiBzaXplb2YoVUNoYXIpOworICAgICAgICBtX2VzdGltYXRlZFNpemVJblN0b3JhZ2UgKz0gKGl0
LT5rZXkubGVuZ3RoKCkgKyBpdC0+dmFsdWUubGVuZ3RoKCkgKyAyKSAqIHNpemVvZihVQ2hhcik7
CiAKICAgICBtX2VzdGltYXRlZFNpemVJblN0b3JhZ2UgKz0gdXJsKCkuc3RyaW5nKCkubGVuZ3Ro
KCkgKiBzaXplb2YoVUNoYXIpOwogICAgIG1fZXN0aW1hdGVkU2l6ZUluU3RvcmFnZSArPSBzaXpl
b2YoaW50KTsgLy8gcmVzcG9uc2UoKS5tX2h0dHBTdGF0dXNDb2RlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNw
cAppbmRleCA1ZDEwM2IyZmY3YjRjYmE1NGUwMzdiYTZjODc5NjIzMDRkMDVlZTYxLi41YTkwODFm
ZjJkZWM4ZmNlNjIyMzE3OGIwZTA5YzU4ZjViMjg5OGY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAK
QEAgLTEzNyw4ICsxMzcsOCBAQCBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIEFwcGxpY2F0aW9uQ2Fj
aGVTdG9yYWdlOjpmaW5kT3JDcmVhdGVDYWNoZUdyb3VwKGNvbnN0IEtVUgogICAgIENhY2hlR3Jv
dXBNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX2NhY2hlc0luTWVtb3J5LmFkZChtYW5pZmVzdFVS
TCwgMCk7CiAgICAgCiAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICBBU1NF
UlQocmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOwotICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJh
dG9yLT5zZWNvbmQ7CisgICAgICAgIEFTU0VSVChyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAgICAgfQogCiAgICAgLy8gTG9v
ayB1cCB0aGUgZ3JvdXAgaW4gdGhlIGRhdGFiYXNlCkBAIC0xNTAsNyArMTUwLDcgQEAgQXBwbGlj
YXRpb25DYWNoZUdyb3VwKiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZmluZE9yQ3JlYXRlQ2Fj
aGVHcm91cChjb25zdCBLVVIKICAgICAgICAgbV9jYWNoZUhvc3RTZXQuYWRkKHVybEhvc3RIYXNo
KG1hbmlmZXN0VVJMKSk7CiAgICAgfQogICAgIAotICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25k
ID0gZ3JvdXA7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGdyb3VwOwogICAgIAogICAg
IHJldHVybiBncm91cDsKIH0KQEAgLTE5Nyw3ICsxOTcsNyBAQCBBcHBsaWNhdGlvbkNhY2hlR3Jv
dXAqIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjYWNoZUdyb3VwRm9yVVJMKGNvbnN0IEtVUkwm
IHVybAogICAgIC8vIENoZWNrIGlmIGEgY2FjaGUgYWxyZWFkeSBleGlzdHMgaW4gbWVtb3J5Lgog
ICAgIENhY2hlR3JvdXBNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fY2FjaGVzSW5NZW1vcnku
ZW5kKCk7CiAgICAgZm9yIChDYWNoZUdyb3VwTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fY2Fj
aGVzSW5NZW1vcnkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIEFwcGxpY2F0
aW9uQ2FjaGVHcm91cCogZ3JvdXAgPSBpdC0+c2Vjb25kOworICAgICAgICBBcHBsaWNhdGlvbkNh
Y2hlR3JvdXAqIGdyb3VwID0gaXQtPnZhbHVlOwogCiAgICAgICAgIEFTU0VSVCghZ3JvdXAtPmlz
T2Jzb2xldGUoKSk7CiAKQEAgLTI2OCw3ICsyNjgsNyBAQCBBcHBsaWNhdGlvbkNhY2hlR3JvdXAq
IEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpmYWxsYmFja0NhY2hlR3JvdXBGb3JVUkwoY29uc3Qg
SwogICAgIC8vIENoZWNrIGlmIGFuIGFwcHJvcHJpYXRlIGNhY2hlIGFscmVhZHkgZXhpc3RzIGlu
IG1lbW9yeS4KICAgICBDYWNoZUdyb3VwTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2NhY2hl
c0luTWVtb3J5LmVuZCgpOwogICAgIGZvciAoQ2FjaGVHcm91cE1hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtX2NhY2hlc0luTWVtb3J5LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAg
ICBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIGdyb3VwID0gaXQtPnNlY29uZDsKKyAgICAgICAgQXBw
bGljYXRpb25DYWNoZUdyb3VwKiBncm91cCA9IGl0LT52YWx1ZTsKICAgICAgICAgCiAgICAgICAg
IEFTU0VSVCghZ3JvdXAtPmlzT2Jzb2xldGUoKSk7CiAKQEAgLTcxMywxMyArNzEzLDEzIEBAIGJv
b2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hl
LCBSZXNvdXJjZVN0b3JhZ2VJREpvCiAgICAgewogICAgICAgICBBcHBsaWNhdGlvbkNhY2hlOjpS
ZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY2FjaGUtPmVuZCgpOwogICAgICAgICBm
b3IgKEFwcGxpY2F0aW9uQ2FjaGU6OlJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGNh
Y2hlLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIG9s
ZFN0b3JhZ2VJRCA9IGl0LT5zZWNvbmQtPnN0b3JhZ2VJRCgpOwotICAgICAgICAgICAgaWYgKCFz
dG9yZShpdC0+c2Vjb25kLmdldCgpLCBjYWNoZVN0b3JhZ2VJRCkpCisgICAgICAgICAgICB1bnNp
Z25lZCBvbGRTdG9yYWdlSUQgPSBpdC0+dmFsdWUtPnN0b3JhZ2VJRCgpOworICAgICAgICAgICAg
aWYgKCFzdG9yZShpdC0+dmFsdWUuZ2V0KCksIGNhY2hlU3RvcmFnZUlEKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgIC8vIFN0b3JpbmcgdGhlIHJlc291cmNl
IHN1Y2NlZWRlZC4gTG9nIGl0cyBvbGQgc3RvcmFnZUlEIGluIGNhc2UKICAgICAgICAgICAgIC8v
IGl0IG5lZWRzIHRvIGJlIHJlc3RvcmVkIGxhdGVyLgotICAgICAgICAgICAgc3RvcmFnZUlESm91
cm5hbC0+YWRkKGl0LT5zZWNvbmQuZ2V0KCksIG9sZFN0b3JhZ2VJRCk7CisgICAgICAgICAgICBz
dG9yYWdlSURKb3VybmFsLT5hZGQoaXQtPnZhbHVlLmdldCgpLCBvbGRTdG9yYWdlSUQpOwogICAg
ICAgICB9CiAgICAgfQogICAgIApAQCAtODM5LDkgKzgzOSw5IEBAIGJvb2wgQXBwbGljYXRpb25D
YWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2UsIHVu
c2lnbmVkCiAgICAgCiAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcmVz
b3VyY2UtPnJlc3BvbnNlKCkuaHR0cEhlYWRlckZpZWxkcygpLmVuZCgpOwogICAgIGZvciAoSFRU
UEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSByZXNvdXJjZS0+cmVzcG9uc2UoKS5odHRw
SGVhZGVyRmllbGRzKCkuYmVnaW4oKTsgaXQhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
aXQtPmtleSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKChVQ2hhciknOicpOwotICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+c2Vjb25kKTsKKyAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQoaXQtPnZhbHVlKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoKFVD
aGFyKSdcbicpOwogICAgIH0KICAgICAKQEAgLTEyNDEsNyArMTI0MSw3IEBAIHZvaWQgQXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2U6OmVtcHR5KCkKICAgICAvLyB1bnRpbCBhIGNhY2hlIHVwZGF0ZSBw
cm9jZXNzIGhhcyBiZWVuIGluaXRpYXRlZC4KICAgICBDYWNoZUdyb3VwTWFwOjpjb25zdF9pdGVy
YXRvciBlbmQgPSBtX2NhY2hlc0luTWVtb3J5LmVuZCgpOwogICAgIGZvciAoQ2FjaGVHcm91cE1h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2NhY2hlc0luTWVtb3J5LmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+Y2xlYXJTdG9yYWdlSUQoKTsKKyAgICAgICAg
aXQtPnZhbHVlLT5jbGVhclN0b3JhZ2VJRCgpOwogICAgIAogICAgIGNoZWNrRm9yRGVsZXRlZFJl
c291cmNlcygpOwogfQpAQCAtMTMwMyw3ICsxMzAzLDcgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hl
U3RvcmFnZTo6c3RvcmVDb3B5T2ZDYWNoZShjb25zdCBTdHJpbmcmIGNhY2hlRGlyZWN0b3J5LCBB
cHAKICAgICAvLyBUcmF2ZXJzZSB0aGUgY2FjaGUgYW5kIGFkZCBjb3BpZXMgb2YgYWxsIHJlc291
cmNlcy4KICAgICBBcHBsaWNhdGlvbkNhY2hlOjpSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gY2FjaGUtPmVuZCgpOwogICAgIGZvciAoQXBwbGljYXRpb25DYWNoZTo6UmVzb3VyY2VN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY2FjaGUtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewotICAgICAgICBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqIHJlc291cmNlID0gaXQtPnNlY29u
ZC5nZXQoKTsKKyAgICAgICAgQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJjZSA9IGl0
LT52YWx1ZS5nZXQoKTsKICAgICAgICAgCiAgICAgICAgIFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hl
UmVzb3VyY2U+IHJlc291cmNlQ29weSA9IEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6Y3JlYXRl
KHJlc291cmNlLT51cmwoKSwgcmVzb3VyY2UtPnJlc3BvbnNlKCksIHJlc291cmNlLT50eXBlKCks
IHJlc291cmNlLT5kYXRhKCksIHJlc291cmNlLT5wYXRoKCkpOwogICAgICAgICAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL0FyY2hpdmVGYWN0b3J5LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL0FyY2hpdmVGYWN0b3J5LmNwcAppbmRleCA1MjFk
ZWIxZDcwNDZiNTA1ZjcwNzU0ZmQyYmI1YWU4NzBlNzQxNDU5Li4yZmNmMzI5NDAyNWFlNzM0ZTM1
ZTBkMTdjNjllMjUxNjQyNzc0ZTc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
YXJjaGl2ZS9BcmNoaXZlRmFjdG9yeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2Fy
Y2hpdmUvQXJjaGl2ZUZhY3RvcnkuY3BwCkBAIC05Miw3ICs5Miw3IEBAIHZvaWQgQXJjaGl2ZUZh
Y3Rvcnk6OnJlZ2lzdGVyS25vd25BcmNoaXZlTUlNRVR5cGVzKCkKICAgICBBcmNoaXZlTUlNRVR5
cGVzTWFwOjppdGVyYXRvciBlbmQgPSBhcmNoaXZlTUlNRVR5cGVzKCkuZW5kKCk7CiAKICAgICBm
b3IgKDsgaSAhPSBlbmQ7ICsraSkKLSAgICAgICAgbWltZVR5cGVzLmFkZChpLT5maXJzdCk7Cisg
ICAgICAgIG1pbWVUeXBlcy5hZGQoaS0+a2V5KTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5jcHAKaW5kZXggZTUwNWM3ODQ0YWQ3
ZTViYWU3ZWI1ODFmOTExZmVhYTQ2ZDczNDk5NS4uZTRmM2NiMmIxYzkyMjkwZDkxY2ZmNjFkMzY0
ODcxNTJjMmYyZjI1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0Nh
Y2hlZFJhd1Jlc291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2Fj
aGVkUmF3UmVzb3VyY2UuY3BwCkBAIC0xNDgsOCArMTQ4LDggQEAgYm9vbCBDYWNoZWRSYXdSZXNv
dXJjZTo6Y2FuUmV1c2UoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBuZXdSZXF1ZXN0KSBjb25zdAog
CiAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbmV3SGVhZGVycy5lbmQo
KTsKICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGkgPSBuZXdIZWFkZXJz
LmJlZ2luKCk7IGkgIT0gZW5kOyArK2kpIHsKLSAgICAgICAgQXRvbWljU3RyaW5nIGhlYWRlck5h
bWUgPSBpLT5maXJzdDsKLSAgICAgICAgaWYgKGktPnNlY29uZCAhPSBvbGRIZWFkZXJzLmdldCho
ZWFkZXJOYW1lKSkKKyAgICAgICAgQXRvbWljU3RyaW5nIGhlYWRlck5hbWUgPSBpLT5rZXk7Cisg
ICAgICAgIGlmIChpLT52YWx1ZSAhPSBvbGRIZWFkZXJzLmdldChoZWFkZXJOYW1lKSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNwcAppbmRleCAwMzY4YTcyNDUy
NWZhZmU2NDkwNTg3YmViMmI0ZjZlNmU5ZmNjNmU2Li40NGM0ZTUyY2NiNjcyNGY2NDQ1YzFjODE2
MjQ1ZmYwYmM2YTI2NmJhIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUv
Q2FjaGVkUmVzb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZWRSZXNvdXJjZS5jcHAKQEAgLTU5MCw4ICs1OTAsOCBAQCB2b2lkIENhY2hlZFJlc291cmNlOjpz
d2l0Y2hDbGllbnRzVG9SZXZhbGlkYXRlZFJlc291cmNlKCkKICAgICBWZWN0b3I8Q2FjaGVkUmVz
b3VyY2VDbGllbnQqPiBjbGllbnRzVG9Nb3ZlOwogICAgIEhhc2hDb3VudGVkU2V0PENhY2hlZFJl
c291cmNlQ2xpZW50Kj46Oml0ZXJhdG9yIGVuZDIgPSBtX2NsaWVudHMuZW5kKCk7CiAgICAgZm9y
IChIYXNoQ291bnRlZFNldDxDYWNoZWRSZXNvdXJjZUNsaWVudCo+OjppdGVyYXRvciBpdCA9IG1f
Y2xpZW50cy5iZWdpbigpOyBpdCAhPSBlbmQyOyArK2l0KSB7Ci0gICAgICAgIENhY2hlZFJlc291
cmNlQ2xpZW50KiBjbGllbnQgPSBpdC0+Zmlyc3Q7Ci0gICAgICAgIHVuc2lnbmVkIGNvdW50ID0g
aXQtPnNlY29uZDsKKyAgICAgICAgQ2FjaGVkUmVzb3VyY2VDbGllbnQqIGNsaWVudCA9IGl0LT5r
ZXk7CisgICAgICAgIHVuc2lnbmVkIGNvdW50ID0gaXQtPnZhbHVlOwogICAgICAgICB3aGlsZSAo
Y291bnQpIHsKICAgICAgICAgICAgIGNsaWVudHNUb01vdmUuYXBwZW5kKGNsaWVudCk7CiAgICAg
ICAgICAgICAtLWNvdW50OwpAQCAtNjI1LDkgKzYyNSw5IEBAIHZvaWQgQ2FjaGVkUmVzb3VyY2U6
OnVwZGF0ZVJlc3BvbnNlQWZ0ZXJSZXZhbGlkYXRpb24oY29uc3QgUmVzb3VyY2VSZXNwb25zZSYg
dmFsCiAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbmV3SGVhZGVycy5l
bmQoKTsKICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbmV3SGVh
ZGVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgLy8gRG9uJ3QgYWxsb3cg
MzA0IHJlc3BvbnNlIHRvIHVwZGF0ZSBjb250ZW50IGhlYWRlcnMsIHRoZXNlIGNhbid0IGNoYW5n
ZSBidXQgc29tZSBzZXJ2ZXJzIHNlbmQgd3JvbmcgdmFsdWVzLgotICAgICAgICBpZiAoaXQtPmZp
cnN0LnN0YXJ0c1dpdGgoY29udGVudEhlYWRlclByZWZpeCwgZmFsc2UpKQorICAgICAgICBpZiAo
aXQtPmtleS5zdGFydHNXaXRoKGNvbnRlbnRIZWFkZXJQcmVmaXgsIGZhbHNlKSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICBtX3Jlc3BvbnNlLnNldEhUVFBIZWFkZXJGaWVsZChpdC0+
Zmlyc3QsIGl0LT5zZWNvbmQpOworICAgICAgICBtX3Jlc3BvbnNlLnNldEhUVFBIZWFkZXJGaWVs
ZChpdC0+a2V5LCBpdC0+dmFsdWUpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuaAppbmRleCA4
YjM3ODBiNWU2NGIyMTQzNDYyODk2YmRhMmE2YTI2NWE1YThhMDc0Li43OTMzYjBiODE0YzUyMTI1
NmUwNzYwZjg2MWI0MzEwOTdiODliNTljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuaApAQCAtNDIsNyArNDIs
NyBAQCBwdWJsaWM6CiAgICAgICAgIEl0ZXJhdG9yIGVuZCA9IHNldC5lbmQoKTsKICAgICAgICAg
c2l6ZV90IGNsaWVudEluZGV4ID0gMDsKICAgICAgICAgZm9yIChJdGVyYXRvciBjdXJyZW50ID0g
c2V0LmJlZ2luKCk7IGN1cnJlbnQgIT0gZW5kOyArK2N1cnJlbnQpCi0gICAgICAgICAgICBtX2Ns
aWVudFZlY3RvcltjbGllbnRJbmRleCsrXSA9IGN1cnJlbnQtPmZpcnN0OworICAgICAgICAgICAg
bV9jbGllbnRWZWN0b3JbY2xpZW50SW5kZXgrK10gPSBjdXJyZW50LT5rZXk7CiAgICAgfQogCiAg
ICAgVCogbmV4dCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2Fj
aGVkUmVzb3VyY2VMb2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hl
ZFJlc291cmNlTG9hZGVyLmNwcAppbmRleCA5ZTllNDEwNmM4MmY4YjUwZjQzMTBiNWM5NjNhNGEw
NGE3YzY5NzdjLi5kZTZiNjI3YzRlMzI2ZTkzZjJhMjFiYjA0MWE5NTlkZjgzMTIyZWI3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRl
ci5jcHAKQEAgLTEyOSw3ICsxMjksNyBAQCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6fkNhY2hlZFJl
c291cmNlTG9hZGVyKCkKICAgICBjbGVhclByZWxvYWRzKCk7CiAgICAgRG9jdW1lbnRSZXNvdXJj
ZU1hcDo6aXRlcmF0b3IgZW5kID0gbV9kb2N1bWVudFJlc291cmNlcy5lbmQoKTsKICAgICBmb3Ig
KERvY3VtZW50UmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9kb2N1bWVudFJlc291cmNlcy5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPnNldE93bmluZ0Nh
Y2hlZFJlc291cmNlTG9hZGVyKDApOworICAgICAgICBpdC0+dmFsdWUtPnNldE93bmluZ0NhY2hl
ZFJlc291cmNlTG9hZGVyKDApOwogCiAgICAgLy8gTWFrZSBzdXJlIG5vIHJlcXVlc3RzIHN0aWxs
IHBvaW50IHRvIHRoaXMgQ2FjaGVkUmVzb3VyY2VMb2FkZXIKICAgICBBU1NFUlQobV9yZXF1ZXN0
Q291bnQgPT0gMCk7CkBAIC00MjksNyArNDI5LDcgQEAgQ2FjaGVkUmVzb3VyY2UqIENhY2hlZFJl
c291cmNlTG9hZGVyOjpyZXF1ZXN0UmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2U6OlR5cGUgdHlwZSwK
ICAgICBpZiAobWVtb3J5Q2FjaGUoKS0+ZGlzYWJsZWQoKSkgewogICAgICAgICBEb2N1bWVudFJl
c291cmNlTWFwOjppdGVyYXRvciBpdCA9IG1fZG9jdW1lbnRSZXNvdXJjZXMuZmluZCh1cmwuc3Ry
aW5nKCkpOwogICAgICAgICBpZiAoaXQgIT0gbV9kb2N1bWVudFJlc291cmNlcy5lbmQoKSkgewot
ICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0T3duaW5nQ2FjaGVkUmVzb3VyY2VMb2FkZXIoMCk7
CisgICAgICAgICAgICBpdC0+dmFsdWUtPnNldE93bmluZ0NhY2hlZFJlc291cmNlTG9hZGVyKDAp
OwogICAgICAgICAgICAgbV9kb2N1bWVudFJlc291cmNlcy5yZW1vdmUoaXQpOwogICAgICAgICB9
CiAgICAgfQpAQCAtNjU0LDcgKzY1NCw3IEBAIHZvaWQgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnNl
dEF1dG9Mb2FkSW1hZ2VzKGJvb2wgZW5hYmxlKQogCiAgICAgRG9jdW1lbnRSZXNvdXJjZU1hcDo6
aXRlcmF0b3IgZW5kID0gbV9kb2N1bWVudFJlc291cmNlcy5lbmQoKTsKICAgICBmb3IgKERvY3Vt
ZW50UmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9kb2N1bWVudFJlc291cmNlcy5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlID0g
aXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlID0gaXQt
PnZhbHVlLmdldCgpOwogICAgICAgICBpZiAocmVzb3VyY2UtPnR5cGUoKSA9PSBDYWNoZWRSZXNv
dXJjZTo6SW1hZ2VSZXNvdXJjZSkgewogICAgICAgICAgICAgQ2FjaGVkSW1hZ2UqIGltYWdlID0g
Y29uc3RfY2FzdDxDYWNoZWRJbWFnZSo+KHN0YXRpY19jYXN0PGNvbnN0IENhY2hlZEltYWdlKj4o
cmVzb3VyY2UpKTsKIApAQCAtNjc0LDcgKzY3NCw3IEBAIHZvaWQgQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXI6OnJlbW92ZUNhY2hlZFJlc291cmNlKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSkgY29uc3QK
ICNpZm5kZWYgTkRFQlVHCiAgICAgRG9jdW1lbnRSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBt
X2RvY3VtZW50UmVzb3VyY2VzLmZpbmQocmVzb3VyY2UtPnVybCgpKTsKICAgICBpZiAoaXQgIT0g
bV9kb2N1bWVudFJlc291cmNlcy5lbmQoKSkKLSAgICAgICAgQVNTRVJUKGl0LT5zZWNvbmQuZ2V0
KCkgPT0gcmVzb3VyY2UpOworICAgICAgICBBU1NFUlQoaXQtPnZhbHVlLmdldCgpID09IHJlc291
cmNlKTsKICNlbmRpZgogICAgIG1fZG9jdW1lbnRSZXNvdXJjZXMucmVtb3ZlKHJlc291cmNlLT51
cmwoKSk7CiB9CkBAIC03MDYsOSArNzA2LDkgQEAgdm9pZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6
Z2FyYmFnZUNvbGxlY3REb2N1bWVudFJlc291cmNlc1RpbWVyRmlyZWQoVGltZXI8Q2FjaGUKICAg
ICBTdHJpbmdWZWN0b3IgcmVzb3VyY2VzVG9EZWxldGU7CiAKICAgICBmb3IgKERvY3VtZW50UmVz
b3VyY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9kb2N1bWVudFJlc291cmNlcy5iZWdpbigpOyBpdCAh
PSBtX2RvY3VtZW50UmVzb3VyY2VzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vj
b25kLT5oYXNPbmVIYW5kbGUoKSkgewotICAgICAgICAgICAgcmVzb3VyY2VzVG9EZWxldGUuYXBw
ZW5kKGl0LT5maXJzdCk7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRPd25pbmdDYWNoZWRS
ZXNvdXJjZUxvYWRlcigwKTsKKyAgICAgICAgaWYgKGl0LT52YWx1ZS0+aGFzT25lSGFuZGxlKCkp
IHsKKyAgICAgICAgICAgIHJlc291cmNlc1RvRGVsZXRlLmFwcGVuZChpdC0+a2V5KTsKKyAgICAg
ICAgICAgIGl0LT52YWx1ZS0+c2V0T3duaW5nQ2FjaGVkUmVzb3VyY2VMb2FkZXIoMCk7CiAgICAg
ICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9N
ZW1vcnlDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUu
Y3BwCmluZGV4IDExMjc1ZTA2ZDgxMjIzYzQ3NDE4NmU1M2Y4ZDdjYmIzNjFjZjBkZWUuLmQyZGI0
ZGE3N2RjNjg5NGNmZWM1YWQ2Njk2NTk2OWVmNDQwOGNlNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
bG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmNwcApAQCAtNTM4LDcgKzUzOCw3IEBAIHZvaWQgTWVt
b3J5Q2FjaGU6OnJlbW92ZVJlc291cmNlc1dpdGhPcmlnaW4oU2VjdXJpdHlPcmlnaW4qIG9yaWdp
bikKIAogICAgIENhY2hlZFJlc291cmNlTWFwOjppdGVyYXRvciBlID0gbV9yZXNvdXJjZXMuZW5k
KCk7CiAgICAgZm9yIChDYWNoZWRSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNl
cy5iZWdpbigpOyBpdCAhPSBlOyArK2l0KSB7Ci0gICAgICAgIENhY2hlZFJlc291cmNlKiByZXNv
dXJjZSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIENhY2hlZFJlc291cmNlKiByZXNvdXJjZSA9IGl0
LT52YWx1ZTsKICAgICAgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiByZXNvdXJjZU9yaWdpbiA9
IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGVGcm9tU3RyaW5nKHJlc291cmNlLT51cmwoKSk7CiAgICAg
ICAgIGlmICghcmVzb3VyY2VPcmlnaW4pCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTU1NCw3
ICs1NTQsNyBAQCB2b2lkIE1lbW9yeUNhY2hlOjpnZXRPcmlnaW5zV2l0aENhY2hlKFNlY3VyaXR5
T3JpZ2luU2V0JiBvcmlnaW5zKQogewogICAgIENhY2hlZFJlc291cmNlTWFwOjppdGVyYXRvciBl
ID0gbV9yZXNvdXJjZXMuZW5kKCk7CiAgICAgZm9yIChDYWNoZWRSZXNvdXJjZU1hcDo6aXRlcmF0
b3IgaXQgPSBtX3Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSBlOyArK2l0KQotICAgICAgICBvcmln
aW5zLmFkZChTZWN1cml0eU9yaWdpbjo6Y3JlYXRlRnJvbVN0cmluZyhpdC0+c2Vjb25kLT51cmwo
KSkpOworICAgICAgICBvcmlnaW5zLmFkZChTZWN1cml0eU9yaWdpbjo6Y3JlYXRlRnJvbVN0cmlu
ZyhpdC0+dmFsdWUtPnVybCgpKSk7CiB9CiAKIHZvaWQgTWVtb3J5Q2FjaGU6OnJlbW92ZUZyb21M
aXZlRGVjb2RlZFJlc291cmNlc0xpc3QoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlKQpAQCAtNjg3
LDcgKzY4Nyw3IEBAIE1lbW9yeUNhY2hlOjpTdGF0aXN0aWNzIE1lbW9yeUNhY2hlOjpnZXRTdGF0
aXN0aWNzKCkKICAgICBTdGF0aXN0aWNzIHN0YXRzOwogICAgIENhY2hlZFJlc291cmNlTWFwOjpp
dGVyYXRvciBlID0gbV9yZXNvdXJjZXMuZW5kKCk7CiAgICAgZm9yIChDYWNoZWRSZXNvdXJjZU1h
cDo6aXRlcmF0b3IgaSA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7IGkgIT0gZTsgKytpKSB7Ci0gICAg
ICAgIENhY2hlZFJlc291cmNlKiByZXNvdXJjZSA9IGktPnNlY29uZDsKKyAgICAgICAgQ2FjaGVk
UmVzb3VyY2UqIHJlc291cmNlID0gaS0+dmFsdWU7CiAgICAgICAgIHN3aXRjaCAocmVzb3VyY2Ut
PnR5cGUoKSkgewogICAgICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpJbWFnZVJlc291cmNlOgog
ICAgICAgICAgICAgc3RhdHMuaW1hZ2VzLmFkZFJlc291cmNlKHJlc291cmNlKTsKQEAgLTcyMyw3
ICs3MjMsNyBAQCB2b2lkIE1lbW9yeUNhY2hlOjpzZXREaXNhYmxlZChib29sIGRpc2FibGVkKQog
ICAgICAgICBDYWNoZWRSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaSA9IG1fcmVzb3VyY2VzLmJlZ2lu
KCk7CiAgICAgICAgIGlmIChpID09IG1fcmVzb3VyY2VzLmVuZCgpKQogICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGV2aWN0KGktPnNlY29uZCk7CisgICAgICAgIGV2aWN0KGktPnZhbHVlKTsK
ICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25E
YXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuY3Bw
CmluZGV4IGNlNGYwMTA0NjZjMGZiOGQxZGQ2ZTJjNWNmMmNkMmU5ZDMxMmU2ODYuLjViZGE2MzMx
ZTI5NGI0Nzg0YjU1NjI3NWQzMTI1YWE0ZGUxMDhkNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2ljb24vSWNvbkRhdGFiYXNlLmNwcApAQCAtMTg1LDcgKzE4NSw3IEBAIHZvaWQgSWNvbkRh
dGFiYXNlOjpyZW1vdmVBbGxJY29ucygpCiAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBQYWdlVVJM
UmVjb3JkKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX3BhZ2VVUkxUb1JlY29yZE1hcC5iZWdpbigpOwog
ICAgICAgICBIYXNoTWFwPFN0cmluZywgUGFnZVVSTFJlY29yZCo+OjppdGVyYXRvciBlbmQgPSBt
X3BhZ2VVUkxUb1JlY29yZE1hcC5lbmQoKTsKICAgICAgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyAr
K2l0ZXIpCi0gICAgICAgICAgICAoKml0ZXIpLnNlY29uZC0+c2V0SWNvblJlY29yZCgwKTsKKyAg
ICAgICAgICAgICgqaXRlcikudmFsdWUtPnNldEljb25SZWNvcmQoMCk7CiAgICAgICAgICAgICAK
ICAgICAgICAgLy8gQ2xlYXIgdGhlIGljb25VUkwgLT4gSWNvblJlY29yZCBtYXAKICAgICAgICAg
bV9pY29uVVJMVG9SZWNvcmRNYXAuY2xlYXIoKTsKQEAgLTc1NCw3ICs3NTQsNyBAQCBzaXplX3Qg
SWNvbkRhdGFiYXNlOjppY29uUmVjb3JkQ291bnRXaXRoRGF0YSgpCiAgICAgSGFzaE1hcDxTdHJp
bmcsIEljb25SZWNvcmQqPjo6aXRlcmF0b3IgZW5kID0gbV9pY29uVVJMVG9SZWNvcmRNYXAuZW5k
KCk7CiAgICAgCiAgICAgZm9yICg7IGkgIT0gZW5kOyArK2kpCi0gICAgICAgIHJlc3VsdCArPSAo
KCppKS5zZWNvbmQtPmltYWdlRGF0YVN0YXR1cygpID09IEltYWdlRGF0YVN0YXR1c1ByZXNlbnQp
OworICAgICAgICByZXN1bHQgKz0gKCgqaSkudmFsdWUtPmltYWdlRGF0YVN0YXR1cygpID09IElt
YWdlRGF0YVN0YXR1c1ByZXNlbnQpOwogICAgICAgICAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAppbmRleCA5ZDRjM2I0MWY3M2Q0M2NhZjA0ZDg0
YTYyOGQ5NjczNDM4NTEwMTk0Li41NzY5NTYzZmRjNjJjODJlZTBkNjMzZTQ2YWI5OWIzYTljZjM0
ZTRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCkBAIC0yNDUsNyArMjQ1LDcgQEAgYm9v
bCBET01XaW5kb3c6OmRpc3BhdGNoQWxsUGVuZGluZ0JlZm9yZVVubG9hZEV2ZW50cygpCiAgICAg
VmVjdG9yPFJlZlB0cjxET01XaW5kb3c+ID4gd2luZG93czsKICAgICBET01XaW5kb3dTZXQ6Oml0
ZXJhdG9yIGVuZCA9IHNldC5lbmQoKTsKICAgICBmb3IgKERPTVdpbmRvd1NldDo6aXRlcmF0b3Ig
aXQgPSBzZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICB3aW5kb3dzLmFwcGVu
ZChpdC0+Zmlyc3QpOworICAgICAgICB3aW5kb3dzLmFwcGVuZChpdC0+a2V5KTsKIAogICAgIHNp
emVfdCBzaXplID0gd2luZG93cy5zaXplKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBz
aXplOyArK2kpIHsKQEAgLTI4Nyw3ICsyODcsNyBAQCB2b2lkIERPTVdpbmRvdzo6ZGlzcGF0Y2hB
bGxQZW5kaW5nVW5sb2FkRXZlbnRzKCkKICAgICBWZWN0b3I8UmVmUHRyPERPTVdpbmRvdz4gPiB3
aW5kb3dzOwogICAgIERPTVdpbmRvd1NldDo6aXRlcmF0b3IgZW5kID0gc2V0LmVuZCgpOwogICAg
IGZvciAoRE9NV2luZG93U2V0OjppdGVyYXRvciBpdCA9IHNldC5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpCi0gICAgICAgIHdpbmRvd3MuYXBwZW5kKGl0LT5maXJzdCk7CisgICAgICAgIHdpbmRv
d3MuYXBwZW5kKGl0LT5rZXkpOwogCiAgICAgc2l6ZV90IHNpemUgPSB3aW5kb3dzLnNpemUoKTsK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9F
dmVudEhhbmRsZXIuY3BwCmluZGV4IDE2ODNjM2RiZDIyZWYyNzg3YWNlNTMzMzJiNjIxZGU4Mjg4
ZDNlZjUuLjA1NDA3MGFiNjMwOWJlYThmZWUxMjA0N2MzM2MzZmM4NGMzMzlmMTAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKQEAgLTM1MzIsNyArMzUzMiw3IEBAIGJvb2wgRXZl
bnRIYW5kbGVyOjpoYW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYgZXZl
bnQpCiAgICAgICAgIC8vIHJlbGVhc2VkIG9yIGNhbmNlbGxlZCBpdCB3aWxsIG9ubHkgYXBwZWFy
IGluIHRoZSBjaGFuZ2VkVG91Y2hlcyBsaXN0LgogICAgICAgICBpZiAocG9pbnRTdGF0ZSAhPSBQ
bGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoUmVsZWFzZWQgJiYgcG9pbnRTdGF0ZSAhPSBQbGF0Zm9y
bVRvdWNoUG9pbnQ6OlRvdWNoQ2FuY2VsbGVkKSB7CiAgICAgICAgICAgICB0b3VjaGVzLT5hcHBl
bmQodG91Y2gpOwotICAgICAgICAgICAgdGFyZ2V0VG91Y2hlc0l0ZXJhdG9yLT5zZWNvbmQtPmFw
cGVuZCh0b3VjaCk7CisgICAgICAgICAgICB0YXJnZXRUb3VjaGVzSXRlcmF0b3ItPnZhbHVlLT5h
cHBlbmQodG91Y2gpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gTm93IGJ1aWxkIHVwIHRoZSBj
b3JyZWN0IGxpc3QgZm9yIGNoYW5nZWRUb3VjaGVzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAppbmRleCBk
NWMxNzZkMjFlMmI2MTZhNTAxZWUxNDQ5ZGIyZTA1NmIyYjhkYTg1Li5kZTJlOTQxOWJhZjBlOTc0
ZjE5ZDU2ZjNiNGYzZWQ3YjM1ZjYyOGYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0ZyYW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcApAQCAtNTY3LDcg
KzU2Nyw3IEBAIHZvaWQgRnJhbWU6OmluamVjdFVzZXJTY3JpcHRzKFVzZXJTY3JpcHRJbmplY3Rp
b25UaW1lIGluamVjdGlvblRpbWUpCiAgICAgICAgIHJldHVybjsKICAgICBVc2VyU2NyaXB0TWFw
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSB1c2VyU2NyaXB0cy0+ZW5kKCk7CiAgICAgZm9yIChVc2Vy
U2NyaXB0TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHVzZXJTY3JpcHRzLT5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCi0gICAgICAgIGluamVjdFVzZXJTY3JpcHRzRm9yV29ybGQoaXQtPmZpcnN0
LmdldCgpLCAqaXQtPnNlY29uZCwgaW5qZWN0aW9uVGltZSk7CisgICAgICAgIGluamVjdFVzZXJT
Y3JpcHRzRm9yV29ybGQoaXQtPmtleS5nZXQoKSwgKml0LT52YWx1ZSwgaW5qZWN0aW9uVGltZSk7
CiB9CiAKIHZvaWQgRnJhbWU6OmluamVjdFVzZXJTY3JpcHRzRm9yV29ybGQoRE9NV3JhcHBlcldv
cmxkKiB3b3JsZCwgY29uc3QgVXNlclNjcmlwdFZlY3RvciYgdXNlclNjcmlwdHMsIFVzZXJTY3Jp
cHRJbmplY3Rpb25UaW1lIGluamVjdGlvblRpbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1BhZ2VHcm91cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5jcHAK
aW5kZXggZjkzOWM5YmZkMmEzNzYxOWY2NTc3YmY3ZDI1ZmRmMTcyYjNhMDczNy4uNjg5NjBkMTk5
MTU1ZGU3NDI5ZTgwNDUyYmRjZWJhNWI3MzhkMTMwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9QYWdlR3JvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUdyb3Vw
LmNwcApAQCAtOTMsMTIgKzkzLDEyIEBAIFBhZ2VHcm91cCogUGFnZUdyb3VwOjpwYWdlR3JvdXAo
Y29uc3QgU3RyaW5nJiBncm91cE5hbWUpCiAgICAgUGFnZUdyb3VwTWFwOjpBZGRSZXN1bHQgcmVz
dWx0ID0gcGFnZUdyb3Vwcy0+YWRkKGdyb3VwTmFtZSwgMCk7CiAKICAgICBpZiAocmVzdWx0Lmlz
TmV3RW50cnkpIHsKLSAgICAgICAgQVNTRVJUKCFyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7Ci0g
ICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gbmV3IFBhZ2VHcm91cChncm91cE5hbWUp
OworICAgICAgICBBU1NFUlQoIXJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOworICAgICAgICByZXN1
bHQuaXRlcmF0b3ItPnZhbHVlID0gbmV3IFBhZ2VHcm91cChncm91cE5hbWUpOwogICAgIH0KIAot
ICAgIEFTU0VSVChyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7Ci0gICAgcmV0dXJuIHJlc3VsdC5p
dGVyYXRvci0+c2Vjb25kOworICAgIEFTU0VSVChyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKKyAg
ICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIAogdm9pZCBQYWdlR3JvdXA6OmNs
b3NlTG9jYWxTdG9yYWdlKCkKQEAgLTEwOSw4ICsxMDksOCBAQCB2b2lkIFBhZ2VHcm91cDo6Y2xv
c2VMb2NhbFN0b3JhZ2UoKQogICAgIFBhZ2VHcm91cE1hcDo6aXRlcmF0b3IgZW5kID0gcGFnZUdy
b3Vwcy0+ZW5kKCk7CiAKICAgICBmb3IgKFBhZ2VHcm91cE1hcDo6aXRlcmF0b3IgaXQgPSBwYWdl
R3JvdXBzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5zZWNv
bmQtPmhhc0xvY2FsU3RvcmFnZSgpKQotICAgICAgICAgICAgaXQtPnNlY29uZC0+bG9jYWxTdG9y
YWdlKCktPmNsb3NlKCk7CisgICAgICAgIGlmIChpdC0+dmFsdWUtPmhhc0xvY2FsU3RvcmFnZSgp
KQorICAgICAgICAgICAgaXQtPnZhbHVlLT5sb2NhbFN0b3JhZ2UoKS0+Y2xvc2UoKTsKICAgICB9
CiB9CiAKQEAgLTEyMSw4ICsxMjEsOCBAQCB2b2lkIFBhZ2VHcm91cDo6Y2xlYXJMb2NhbFN0b3Jh
Z2VGb3JBbGxPcmlnaW5zKCkKIAogICAgIFBhZ2VHcm91cE1hcDo6aXRlcmF0b3IgZW5kID0gcGFn
ZUdyb3Vwcy0+ZW5kKCk7CiAgICAgZm9yIChQYWdlR3JvdXBNYXA6Oml0ZXJhdG9yIGl0ID0gcGFn
ZUdyb3Vwcy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vj
b25kLT5oYXNMb2NhbFN0b3JhZ2UoKSkKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPmxvY2FsU3Rv
cmFnZSgpLT5jbGVhckFsbE9yaWdpbnNGb3JEZWxldGlvbigpOworICAgICAgICBpZiAoaXQtPnZh
bHVlLT5oYXNMb2NhbFN0b3JhZ2UoKSkKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+bG9jYWxTdG9y
YWdlKCktPmNsZWFyQWxsT3JpZ2luc0ZvckRlbGV0aW9uKCk7CiAgICAgfQogfQogCkBAIC0xMzMs
OCArMTMzLDggQEAgdm9pZCBQYWdlR3JvdXA6OmNsZWFyTG9jYWxTdG9yYWdlRm9yT3JpZ2luKFNl
Y3VyaXR5T3JpZ2luKiBvcmlnaW4pCiAKICAgICBQYWdlR3JvdXBNYXA6Oml0ZXJhdG9yIGVuZCA9
IHBhZ2VHcm91cHMtPmVuZCgpOwogICAgIGZvciAoUGFnZUdyb3VwTWFwOjppdGVyYXRvciBpdCA9
IHBhZ2VHcm91cHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoaXQt
PnNlY29uZC0+aGFzTG9jYWxTdG9yYWdlKCkpCi0gICAgICAgICAgICBpdC0+c2Vjb25kLT5sb2Nh
bFN0b3JhZ2UoKS0+Y2xlYXJPcmlnaW5Gb3JEZWxldGlvbihvcmlnaW4pOworICAgICAgICBpZiAo
aXQtPnZhbHVlLT5oYXNMb2NhbFN0b3JhZ2UoKSkKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+bG9j
YWxTdG9yYWdlKCktPmNsZWFyT3JpZ2luRm9yRGVsZXRpb24ob3JpZ2luKTsKICAgICB9ICAgIAog
fQogICAgIApAQCAtMTQ1LDggKzE0NSw4IEBAIHZvaWQgUGFnZUdyb3VwOjpzeW5jTG9jYWxTdG9y
YWdlKCkKIAogICAgIFBhZ2VHcm91cE1hcDo6aXRlcmF0b3IgZW5kID0gcGFnZUdyb3Vwcy0+ZW5k
KCk7CiAgICAgZm9yIChQYWdlR3JvdXBNYXA6Oml0ZXJhdG9yIGl0ID0gcGFnZUdyb3Vwcy0+YmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kLT5oYXNMb2Nh
bFN0b3JhZ2UoKSkKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPmxvY2FsU3RvcmFnZSgpLT5zeW5j
KCk7CisgICAgICAgIGlmIChpdC0+dmFsdWUtPmhhc0xvY2FsU3RvcmFnZSgpKQorICAgICAgICAg
ICAgaXQtPnZhbHVlLT5sb2NhbFN0b3JhZ2UoKS0+c3luYygpOwogICAgIH0KIH0KIApAQCAtMjY5
LDcgKzI2OSw3IEBAIHZvaWQgUGFnZUdyb3VwOjphZGRVc2VyU2NyaXB0VG9Xb3JsZChET01XcmFw
cGVyV29ybGQqIHdvcmxkLCBjb25zdCBTdHJpbmcmIHNvdXJjCiAgICAgT3duUHRyPFVzZXJTY3Jp
cHQ+IHVzZXJTY3JpcHQgPSBhZG9wdFB0cihuZXcgVXNlclNjcmlwdChzb3VyY2UsIHVybCwgd2hp
dGVsaXN0LCBibGFja2xpc3QsIGluamVjdGlvblRpbWUsIGluamVjdGVkRnJhbWVzKSk7CiAgICAg
aWYgKCFtX3VzZXJTY3JpcHRzKQogICAgICAgICBtX3VzZXJTY3JpcHRzID0gYWRvcHRQdHIobmV3
IFVzZXJTY3JpcHRNYXApOwotICAgIE93blB0cjxVc2VyU2NyaXB0VmVjdG9yPiYgc2NyaXB0c0lu
V29ybGQgPSBtX3VzZXJTY3JpcHRzLT5hZGQod29ybGQsIG51bGxwdHIpLml0ZXJhdG9yLT5zZWNv
bmQ7CisgICAgT3duUHRyPFVzZXJTY3JpcHRWZWN0b3I+JiBzY3JpcHRzSW5Xb3JsZCA9IG1fdXNl
clNjcmlwdHMtPmFkZCh3b3JsZCwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICgh
c2NyaXB0c0luV29ybGQpCiAgICAgICAgIHNjcmlwdHNJbldvcmxkID0gYWRvcHRQdHIobmV3IFVz
ZXJTY3JpcHRWZWN0b3IpOwogICAgIHNjcmlwdHNJbldvcmxkLT5hcHBlbmQodXNlclNjcmlwdC5y
ZWxlYXNlKCkpOwpAQCAtMjg2LDcgKzI4Niw3IEBAIHZvaWQgUGFnZUdyb3VwOjphZGRVc2VyU3R5
bGVTaGVldFRvV29ybGQoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCwgY29uc3QgU3RyaW5nJiBzCiAg
ICAgT3duUHRyPFVzZXJTdHlsZVNoZWV0PiB1c2VyU3R5bGVTaGVldCA9IGFkb3B0UHRyKG5ldyBV
c2VyU3R5bGVTaGVldChzb3VyY2UsIHVybCwgd2hpdGVsaXN0LCBibGFja2xpc3QsIGluamVjdGVk
RnJhbWVzLCBsZXZlbCkpOwogICAgIGlmICghbV91c2VyU3R5bGVTaGVldHMpCiAgICAgICAgIG1f
dXNlclN0eWxlU2hlZXRzID0gYWRvcHRQdHIobmV3IFVzZXJTdHlsZVNoZWV0TWFwKTsKLSAgICBP
d25QdHI8VXNlclN0eWxlU2hlZXRWZWN0b3I+JiBzdHlsZVNoZWV0c0luV29ybGQgPSBtX3VzZXJT
dHlsZVNoZWV0cy0+YWRkKHdvcmxkLCBudWxscHRyKS5pdGVyYXRvci0+c2Vjb25kOworICAgIE93
blB0cjxVc2VyU3R5bGVTaGVldFZlY3Rvcj4mIHN0eWxlU2hlZXRzSW5Xb3JsZCA9IG1fdXNlclN0
eWxlU2hlZXRzLT5hZGQod29ybGQsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAo
IXN0eWxlU2hlZXRzSW5Xb3JsZCkKICAgICAgICAgc3R5bGVTaGVldHNJbldvcmxkID0gYWRvcHRQ
dHIobmV3IFVzZXJTdHlsZVNoZWV0VmVjdG9yKTsKICAgICBzdHlsZVNoZWV0c0luV29ybGQtPmFw
cGVuZCh1c2VyU3R5bGVTaGVldC5yZWxlYXNlKCkpOwpAQCAtMzA2LDcgKzMwNiw3IEBAIHZvaWQg
UGFnZUdyb3VwOjpyZW1vdmVVc2VyU2NyaXB0RnJvbVdvcmxkKERPTVdyYXBwZXJXb3JsZCogd29y
bGQsIGNvbnN0IEtVUkwmIHVyCiAgICAgaWYgKGl0ID09IG1fdXNlclNjcmlwdHMtPmVuZCgpKQog
ICAgICAgICByZXR1cm47CiAgICAgCi0gICAgVXNlclNjcmlwdFZlY3Rvciogc2NyaXB0cyA9IGl0
LT5zZWNvbmQuZ2V0KCk7CisgICAgVXNlclNjcmlwdFZlY3Rvciogc2NyaXB0cyA9IGl0LT52YWx1
ZS5nZXQoKTsKICAgICBmb3IgKGludCBpID0gc2NyaXB0cy0+c2l6ZSgpIC0gMTsgaSA+PSAwOyAt
LWkpIHsKICAgICAgICAgaWYgKHNjcmlwdHMtPmF0KGkpLT51cmwoKSA9PSB1cmwpCiAgICAgICAg
ICAgICBzY3JpcHRzLT5yZW1vdmUoaSk7CkBAIC0zMjgsNyArMzI4LDcgQEAgdm9pZCBQYWdlR3Jv
dXA6OnJlbW92ZVVzZXJTdHlsZVNoZWV0RnJvbVdvcmxkKERPTVdyYXBwZXJXb3JsZCogd29ybGQs
IGNvbnN0IEtVUkwKICAgICBpZiAoaXQgPT0gbV91c2VyU3R5bGVTaGVldHMtPmVuZCgpKQogICAg
ICAgICByZXR1cm47CiAgICAgCi0gICAgVXNlclN0eWxlU2hlZXRWZWN0b3IqIHN0eWxlc2hlZXRz
ID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICBVc2VyU3R5bGVTaGVldFZlY3Rvciogc3R5bGVzaGVl
dHMgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgZm9yIChpbnQgaSA9IHN0eWxlc2hlZXRzLT5zaXpl
KCkgLSAxOyBpID49IDA7IC0taSkgewogICAgICAgICBpZiAoc3R5bGVzaGVldHMtPmF0KGkpLT51
cmwoKSA9PSB1cmwpIHsKICAgICAgICAgICAgIHN0eWxlc2hlZXRzLT5yZW1vdmUoaSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCmluZGV4IDlkNTAyMTFjYzM4YWQ4NjRmMDE5
YjhlYThiZjRlYWUyMDUxZmIzYWEuLmU3YzE0YzdmZWMyODQzNzljZWZhN2RhZTg4MDljMzc3YmZm
NDhiYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCkBAIC0zMzksNyAr
MzM5LDcgQEAgS1VSTCBQYWdlU2VyaWFsaXplcjo6dXJsRm9yQmxhbmtGcmFtZShGcmFtZSogZnJh
bWUpCiB7CiAgICAgSGFzaE1hcDxGcmFtZSosIEtVUkw+OjppdGVyYXRvciBpdGVyID0gbV9ibGFu
a0ZyYW1lVVJMcy5maW5kKGZyYW1lKTsKICAgICBpZiAoaXRlciAhPSBtX2JsYW5rRnJhbWVVUkxz
LmVuZCgpKQotICAgICAgICByZXR1cm4gaXRlci0+c2Vjb25kOworICAgICAgICByZXR1cm4gaXRl
ci0+dmFsdWU7CiAgICAgU3RyaW5nIHVybCA9ICJ3eWNpd3lnOi8vZnJhbWUvIiArIFN0cmluZzo6
bnVtYmVyKG1fYmxhbmtGcmFtZUNvdW50ZXIrKyk7CiAgICAgS1VSTCBmYWtlVVJMKFBhcnNlZFVS
TFN0cmluZywgdXJsKTsKICAgICBtX2JsYW5rRnJhbWVVUkxzLmFkZChmcmFtZSwgZmFrZVVSTCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5UG9saWN5LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlQb2xpY3kuY3BwCmluZGV4IGMyYTVhYjExNDM1ZWY2
ZGIwNTc2OGM3NmNhMDM1N2I1NjI1ODMzMTIuLjViMzZmNGY3MTZjNDRiZmIwOWYyMGU2MzJjYzBk
MDM4NmYzY2NhM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlQb2xp
Y3kuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlQb2xpY3kuY3BwCkBAIC0x
MzMsOSArMTMzLDkgQEAgdm9pZCBTZWN1cml0eVBvbGljeTo6YWRkT3JpZ2luQWNjZXNzV2hpdGVs
aXN0RW50cnkoY29uc3QgU2VjdXJpdHlPcmlnaW4mIHNvdXJjZU8KICAgICBTdHJpbmcgc291cmNl
U3RyaW5nID0gc291cmNlT3JpZ2luLnRvU3RyaW5nKCk7CiAgICAgT3JpZ2luQWNjZXNzTWFwOjpB
ZGRSZXN1bHQgcmVzdWx0ID0gb3JpZ2luQWNjZXNzTWFwKCkuYWRkKHNvdXJjZVN0cmluZywgbnVs
bHB0cik7CiAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXN1bHQuaXRlcmF0
b3ItPnNlY29uZCA9IGFkb3B0UHRyKG5ldyBPcmlnaW5BY2Nlc3NXaGl0ZUxpc3QpOworICAgICAg
ICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gYWRvcHRQdHIobmV3IE9yaWdpbkFjY2Vzc1doaXRl
TGlzdCk7CiAKLSAgICBPcmlnaW5BY2Nlc3NXaGl0ZUxpc3QqIGxpc3QgPSByZXN1bHQuaXRlcmF0
b3ItPnNlY29uZC5nZXQoKTsKKyAgICBPcmlnaW5BY2Nlc3NXaGl0ZUxpc3QqIGxpc3QgPSByZXN1
bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpOwogICAgIGxpc3QtPmFwcGVuZChPcmlnaW5BY2Nlc3NF
bnRyeShkZXN0aW5hdGlvblByb3RvY29sLCBkZXN0aW5hdGlvbkRvbWFpbiwgYWxsb3dEZXN0aW5h
dGlvblN1YmRvbWFpbnMgPyBPcmlnaW5BY2Nlc3NFbnRyeTo6QWxsb3dTdWJkb21haW5zIDogT3Jp
Z2luQWNjZXNzRW50cnk6OkRpc2FsbG93U3ViZG9tYWlucykpOwogfQogCkBAIC0xNTIsNyArMTUy
LDcgQEAgdm9pZCBTZWN1cml0eVBvbGljeTo6cmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50
cnkoY29uc3QgU2VjdXJpdHlPcmlnaW4mIHNvdXIKICAgICBpZiAoaXQgPT0gbWFwLmVuZCgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBPcmlnaW5BY2Nlc3NXaGl0ZUxpc3QqIGxpc3QgPSBpdC0+
c2Vjb25kLmdldCgpOworICAgIE9yaWdpbkFjY2Vzc1doaXRlTGlzdCogbGlzdCA9IGl0LT52YWx1
ZS5nZXQoKTsKICAgICBzaXplX3QgaW5kZXggPSBsaXN0LT5maW5kKE9yaWdpbkFjY2Vzc0VudHJ5
KGRlc3RpbmF0aW9uUHJvdG9jb2wsIGRlc3RpbmF0aW9uRG9tYWluLCBhbGxvd0Rlc3RpbmF0aW9u
U3ViZG9tYWlucyA/IE9yaWdpbkFjY2Vzc0VudHJ5OjpBbGxvd1N1YmRvbWFpbnMgOiBPcmlnaW5B
Y2Nlc3NFbnRyeTo6RGlzYWxsb3dTdWJkb21haW5zKSk7CiAgICAgaWYgKGluZGV4ID09IG5vdEZv
dW5kKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Nl
dHRpbmdzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCmluZGV4IDM1YjBm
NThhMjk5NmU1NmI3OGQzODI0ZDg0ODBmN2MzMTYxODZhYzMuLmI5MzdlOTU2MzNkNDQyMjgwYTQ4
NDQ3NmJmN2E1Y2U1Y2JiYjM5YzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0
dGluZ3MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCkBAIC02MCw3
ICs2MCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRHZW5lcmljRm9udEZhbWlseU1hcChTY3Jp
cHRGb250RmFtaWx5TWFwJiBmb250TWFwLCBjb25zdCBBCiAgICAgICAgIGlmIChpdCA9PSBmb250
TWFwLmVuZCgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBmb250TWFwLnJlbW92ZShp
dCk7Ci0gICAgfSBlbHNlIGlmIChpdCAhPSBmb250TWFwLmVuZCgpICYmIGl0LT5zZWNvbmQgPT0g
ZmFtaWx5KQorICAgIH0gZWxzZSBpZiAoaXQgIT0gZm9udE1hcC5lbmQoKSAmJiBpdC0+dmFsdWUg
PT0gZmFtaWx5KQogICAgICAgICByZXR1cm47CiAgICAgZWxzZQogICAgICAgICBmb250TWFwLnNl
dChzdGF0aWNfY2FzdDxpbnQ+KHNjcmlwdCksIGZhbWlseSk7CkBAIC03MSw3ICs3MSw3IEBAIHN0
YXRpYyBpbmxpbmUgY29uc3QgQXRvbWljU3RyaW5nJiBnZXRHZW5lcmljRm9udEZhbWlseUZvclNj
cmlwdChjb25zdCBTY3JpcHRGb250CiB7CiAgICAgU2NyaXB0Rm9udEZhbWlseU1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBmb250TWFwLmZpbmQoc3RhdGljX2Nhc3Q8aW50PihzY3JpcHQpKTsKICAg
ICBpZiAoaXQgIT0gZm9udE1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7Cisg
ICAgICAgIHJldHVybiBpdC0+dmFsdWU7CiAgICAgaWYgKHNjcmlwdCAhPSBVU0NSSVBUX0NPTU1P
TikKICAgICAgICAgcmV0dXJuIGdldEdlbmVyaWNGb250RmFtaWx5Rm9yU2NyaXB0KGZvbnRNYXAs
IFVTQ1JJUFRfQ09NTU9OKTsKICAgICByZXR1cm4gZW1wdHlBdG9tOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9TcGVlY2hJbnB1dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Nw
ZWVjaElucHV0LmNwcAppbmRleCAwMTI4ZWY4YTQwYTQyNDM1NGFiNWY4ZTUwYmE4ZWNjNjIyNTdi
M2M5Li44MzI4YzVkNGRmMzI5OTQyYjU5ZjNlY2MyMjUzNTY4Y2UyYThhMTFkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NwZWVjaElucHV0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1NwZWVjaElucHV0LmNwcApAQCAtNjIsNyArNjIsNyBAQCBpbnQgU3BlZWNoSW5wdXQ6
OnJlZ2lzdGVyTGlzdGVuZXIoU3BlZWNoSW5wdXRMaXN0ZW5lciogbGlzdGVuZXIpCiAjaWYgZGVm
aW5lZChERUJVRykKICAgICAvLyBDaGVjayBpZiBhbHJlYWR5IHByZXNlbnQuCiAgICAgZm9yIChI
YXNoTWFwPGludCwgU3BlZWNoSW5wdXRMaXN0ZW5lcio+OjppdGVyYXRvciBpdCA9IG1fbGlzdGVu
ZXJzLmJlZ2luKCk7IGl0ICE9IG1fbGlzdGVuZXJzLmVuZCgpOyArK2l0KQotICAgICAgQVNTRVJU
KGl0LT5zZWNvbmQgIT0gbGlzdGVuZXIpOworICAgICAgQVNTRVJUKGl0LT52YWx1ZSAhPSBsaXN0
ZW5lcik7CiAjZW5kaWYKIAogICAgIG1fbGlzdGVuZXJzLmFkZChtX25leHRMaXN0ZW5lcklkLCBs
aXN0ZW5lcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1dpbmRvd0ZlYXR1cmVz
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvV2luZG93RmVhdHVyZXMuY3BwCmluZGV4IDc1NjQx
NTI4ZGZlYzJmNGJlYzdlZWEzM2QwNzQwYTBkYzdkN2JhYzQuLjFiNmIxZDBiMTYzMmU4MmE5NGVm
MDQ2NzlkMGE3ZDQ3YWQzMWNiNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvV2lu
ZG93RmVhdHVyZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvV2luZG93RmVhdHVyZXMu
Y3BwCkBAIC0yMTIsNyArMjEyLDcgQEAgYm9vbCBXaW5kb3dGZWF0dXJlczo6Ym9vbEZlYXR1cmUo
Y29uc3QgRGlhbG9nRmVhdHVyZXNNYXAmIGZlYXR1cmVzLCBjb25zdCBjaGFyKgogICAgIERpYWxv
Z0ZlYXR1cmVzTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGZlYXR1cmVzLmZpbmQoa2V5KTsKICAg
ICBpZiAoaXQgPT0gZmVhdHVyZXMuZW5kKCkpCiAgICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7
Ci0gICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGl0LT5zZWNvbmQ7CisgICAgY29uc3QgU3RyaW5n
JiB2YWx1ZSA9IGl0LT52YWx1ZTsKICAgICByZXR1cm4gdmFsdWUuaXNOdWxsKCkgfHwgdmFsdWUg
PT0gIjEiIHx8IHZhbHVlID09ICJ5ZXMiIHx8IHZhbHVlID09ICJvbiI7CiB9CiAKQEAgLTIyNCw3
ICsyMjQsNyBAQCBmbG9hdCBXaW5kb3dGZWF0dXJlczo6ZmxvYXRGZWF0dXJlKGNvbnN0IERpYWxv
Z0ZlYXR1cmVzTWFwJiBmZWF0dXJlcywgY29uc3QgY2hhcgogICAgIC8vIEZJWE1FOiBUaGUgdG9E
b3VibGUgZnVuY3Rpb24gZG9lcyBub3Qgb2ZmZXIgYSB3YXkgdG8gdGVsbCAiMHEiIGZyb20gc3Ry
aW5nIHdpdGggbm8gZGlnaXRzIGluIGl0OiBCb3RoCiAgICAgLy8gcmV0dXJuIHRoZSBudW1iZXIg
MCBhbmQgZmFsc2UgZm9yIG9rLiBCdXQgIjBxIiBzaG91bGQgeWllbGQgdGhlIG1pbmltdW0gcmF0
aGVyIHRoYW4gdGhlIGRlZmF1bHQuCiAgICAgYm9vbCBvazsKLSAgICBkb3VibGUgcGFyc2VkTnVt
YmVyID0gaXQtPnNlY29uZC50b0RvdWJsZSgmb2spOworICAgIGRvdWJsZSBwYXJzZWROdW1iZXIg
PSBpdC0+dmFsdWUudG9Eb3VibGUoJm9rKTsKICAgICBpZiAoKHBhcnNlZE51bWJlciA9PSAwICYm
ICFvaykgfHwgaXNuYW4ocGFyc2VkTnVtYmVyKSkKICAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1
ZTsKICAgICBpZiAocGFyc2VkTnVtYmVyIDwgbWluIHx8IG1heCA8PSBtaW4pCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCmlu
ZGV4IDBmMjMzMDFhMTUzMDhhZTliMmFjMzNmOWM2ZTNmZDM0MzI1NTRlZTEuLmUxOTQyN2Q0Njky
NTg1NzM0MGMyNjcwYzQ2OTMwYjE5ZTMyOGIxNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCkBAIC05MSwxNCArOTEs
MTQgQEAgZG91YmxlIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjp1cGRhdGVBbmltYXRpb25z
KFNldENoYW5nZWQgY2FsbFNldENoYW5nZWQvKgogCiAgICAgUmVuZGVyT2JqZWN0QW5pbWF0aW9u
TWFwOjpjb25zdF9pdGVyYXRvciBhbmltYXRpb25zRW5kID0gbV9jb21wb3NpdGVBbmltYXRpb25z
LmVuZCgpOwogICAgIGZvciAoUmVuZGVyT2JqZWN0QW5pbWF0aW9uTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBhbmltYXRpb25zRW5k
OyArK2l0KSB7Ci0gICAgICAgIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcEFuaW0gPSBpdC0+c2Vj
b25kLmdldCgpOworICAgICAgICBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBBbmltID0gaXQtPnZh
bHVlLmdldCgpOwogICAgICAgICBpZiAoIWNvbXBBbmltLT5zdXNwZW5kZWQoKSAmJiBjb21wQW5p
bS0+aGFzQW5pbWF0aW9ucygpKSB7CiAgICAgICAgICAgICBkb3VibGUgdCA9IGNvbXBBbmltLT50
aW1lVG9OZXh0U2VydmljZSgpOwogICAgICAgICAgICAgaWYgKHQgIT0gLTEgJiYgKHQgPCB0aW1l
VG9OZXh0U2VydmljZSB8fCB0aW1lVG9OZXh0U2VydmljZSA9PSAtMSkpCiAgICAgICAgICAgICAg
ICAgdGltZVRvTmV4dFNlcnZpY2UgPSB0OwogICAgICAgICAgICAgaWYgKCF0aW1lVG9OZXh0U2Vy
dmljZSkgewogICAgICAgICAgICAgICAgIGlmIChjYWxsU2V0Q2hhbmdlZCA9PSBDYWxsU2V0Q2hh
bmdlZCkgewotICAgICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gaXQtPmZpcnN0LT5ub2Rl
KCk7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBpdC0+a2V5LT5ub2RlKCk7CiAg
ICAgICAgICAgICAgICAgICAgIEFTU0VSVCghbm9kZSB8fCAobm9kZS0+ZG9jdW1lbnQoKSAmJiAh
bm9kZS0+ZG9jdW1lbnQoKS0+aW5QYWdlQ2FjaGUoKSkpOwogICAgICAgICAgICAgICAgICAgICBu
b2RlLT5zZXROZWVkc1N0eWxlUmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsKICAgICAgICAg
ICAgICAgICAgICAgY2FsbGVkU2V0Q2hhbmdlZCA9IHRydWU7CkBAIC0yODgsOSArMjg4LDkgQEAg
dm9pZCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6c3VzcGVuZEFuaW1hdGlvbnNGb3JEb2N1
bWVudChEb2N1bWVudCogZG9jdW1lbnQKICAgICAKICAgICBSZW5kZXJPYmplY3RBbmltYXRpb25N
YXA6OmNvbnN0X2l0ZXJhdG9yIGFuaW1hdGlvbnNFbmQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMu
ZW5kKCk7CiAgICAgZm9yIChSZW5kZXJPYmplY3RBbmltYXRpb25NYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGFuaW1hdGlvbnNFbmQ7
ICsraXQpIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGl0LT5maXJzdDsKKyAg
ICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGl0LT5rZXk7CiAgICAgICAgIGlmIChyZW5k
ZXJlci0+ZG9jdW1lbnQoKSA9PSBkb2N1bWVudCkgewotICAgICAgICAgICAgQ29tcG9zaXRlQW5p
bWF0aW9uKiBjb21wQW5pbSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBDb21wb3Np
dGVBbmltYXRpb24qIGNvbXBBbmltID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAgICAgY29t
cEFuaW0tPnN1c3BlbmRBbmltYXRpb25zKCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0zMDQsOSAr
MzA0LDkgQEAgdm9pZCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6cmVzdW1lQW5pbWF0aW9u
c0ZvckRvY3VtZW50KERvY3VtZW50KiBkb2N1bWVudCkKICAgICAKICAgICBSZW5kZXJPYmplY3RB
bmltYXRpb25NYXA6OmNvbnN0X2l0ZXJhdG9yIGFuaW1hdGlvbnNFbmQgPSBtX2NvbXBvc2l0ZUFu
aW1hdGlvbnMuZW5kKCk7CiAgICAgZm9yIChSZW5kZXJPYmplY3RBbmltYXRpb25NYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGFuaW1h
dGlvbnNFbmQ7ICsraXQpIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGl0LT5m
aXJzdDsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGl0LT5rZXk7CiAgICAgICAg
IGlmIChyZW5kZXJlci0+ZG9jdW1lbnQoKSA9PSBkb2N1bWVudCkgewotICAgICAgICAgICAgQ29t
cG9zaXRlQW5pbWF0aW9uKiBjb21wQW5pbSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAg
ICBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBBbmltID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAg
ICAgICAgY29tcEFuaW0tPnJlc3VtZUFuaW1hdGlvbnMoKTsKICAgICAgICAgfQogICAgIH0KQEAg
LTM5NSw4ICszOTUsOCBAQCB1bnNpZ25lZCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6bnVt
YmVyT2ZBY3RpdmVBbmltYXRpb25zKERvY3VtZW50KiBkb2N1bWVudAogICAgIAogICAgIFJlbmRl
ck9iamVjdEFuaW1hdGlvbk1hcDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fY29t
cG9zaXRlQW5pbWF0aW9ucy5lbmQoKTsKICAgICBmb3IgKFJlbmRlck9iamVjdEFuaW1hdGlvbk1h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQg
IT0gYW5pbWF0aW9uc0VuZDsgKytpdCkgewotICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVy
ID0gaXQtPmZpcnN0OwotICAgICAgICBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBBbmltID0gaXQt
PnNlY29uZC5nZXQoKTsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGl0LT5rZXk7
CisgICAgICAgIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcEFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7
CiAgICAgICAgIGlmIChyZW5kZXJlci0+ZG9jdW1lbnQoKSA9PSBkb2N1bWVudCkKICAgICAgICAg
ICAgIGNvdW50ICs9IGNvbXBBbmltLT5udW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoKTsKICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmlt
YXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0
aW9uLmNwcAppbmRleCAxMmY5Mzc5NDhkNzRmOTJmNjMxYTU0YTlmYzlmYjIxZWVhODFiZTY1Li40
NmJjY2RmOWY3Zjk2Yjc0YWM1YTQ1NzVmYTFmNWQyYWZjYTllOTEzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHAKQEAgLTU3
LDcgKzU3LDcgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OmNsZWFyUmVuZGVyZXIoKQogICAg
ICAgICAvLyBhbiBhbmltYXRpb24gY2FsbGJhY2sgKHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjIwNTIpCiAgICAgICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNN
YXA6OmNvbnN0X2l0ZXJhdG9yIHRyYW5zaXRpb25zRW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsK
ICAgICAgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gdHJhbnNpdGlvbnNFbmQ7ICsraXQpIHsK
LSAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiB0cmFuc2l0aW9uID0gaXQtPnNlY29uZC5n
ZXQoKTsKKyAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiB0cmFuc2l0aW9uID0gaXQtPnZh
bHVlLmdldCgpOwogICAgICAgICAgICAgYW5pbWF0aW9uQ29udHJvbGxlcigpLT5hbmltYXRpb25X
aWxsQmVSZW1vdmVkKHRyYW5zaXRpb24pOwogICAgICAgICAgICAgdHJhbnNpdGlvbi0+Y2xlYXIo
KTsKICAgICAgICAgfQpAQCAtNjYsNyArNjYsNyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6
Y2xlYXJSZW5kZXJlcigpCiAgICAgICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zLmNoZWNrQ29uc2lz
dGVuY3koKTsKICAgICAgICAgQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0
aW9uc0VuZCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmVuZCgpOwogICAgICAgICBmb3IgKEFuaW1h
dGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVn
aW4oKTsgaXQgIT0gYW5pbWF0aW9uc0VuZDsgKytpdCkgewotICAgICAgICAgICAgS2V5ZnJhbWVB
bmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgS2V5ZnJhbWVB
bmltYXRpb24qIGFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBhbmltYXRpb25D
b250cm9sbGVyKCktPmFuaW1hdGlvbldpbGxCZVJlbW92ZWQoYW5pbSk7CiAgICAgICAgICAgICBh
bmltLT5jbGVhcigpOwogICAgICAgICB9CkBAIC04Myw3ICs4Myw3IEBAIHZvaWQgQ29tcG9zaXRl
QW5pbWF0aW9uOjp1cGRhdGVUcmFuc2l0aW9ucyhSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBSZW5k
ZXJTdHlsZSoKICAgICAvLyBpbiB0aGUgbmV4dCBsb29wIGFuZCB0aGVuIHRvc3MgdGhlIG9uZXMg
dGhhdCBkaWRuJ3QgZ2V0IG1hcmtlZC4KICAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpj
b25zdF9pdGVyYXRvciBlbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOwogICAgIGZvciAoQ1NTUHJv
cGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+c2V0QWN0aXZlKGZh
bHNlKTsKKyAgICAgICAgaXQtPnZhbHVlLT5zZXRBY3RpdmUoZmFsc2UpOwogICAgICAgICAKICAg
ICBSZWZQdHI8UmVuZGVyU3R5bGU+IG1vZGlmaWVkQ3VycmVudFN0eWxlOwogICAgIApAQCAtMTc5
LDcgKzE3OSw3IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVUcmFuc2l0aW9ucyhS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBSZW5kZXJTdHlsZSoKICAgICBWZWN0b3I8aW50PiB0b0Jl
UmVtb3ZlZDsKICAgICBlbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOwogICAgIGZvciAoQ1NTUHJv
cGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5p
bSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0g
aXQtPnZhbHVlLmdldCgpOwogICAgICAgICBpZiAoIWFuaW0tPmFjdGl2ZSgpKSB7CiAgICAgICAg
ICAgICBhbmltYXRpb25Db250cm9sbGVyKCktPmFuaW1hdGlvbldpbGxCZVJlbW92ZWQoYW5pbSk7
CiAgICAgICAgICAgICB0b0JlUmVtb3ZlZC5hcHBlbmQoYW5pbS0+YW5pbWF0aW5nUHJvcGVydHko
KSk7CkBAIC0yMDUsMTMgKzIwNSwxMyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRl
S2V5ZnJhbWVBbmltYXRpb25zKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIFJlbmRlcgogICAgICAg
ICAvLyBUaGUgY3VycmVudCBhbmQgdGFyZ2V0IGFuaW1hdGlvbnMgYXJlIHRoZSBzYW1lIHNvIHdl
IGp1c3QgbmVlZCB0byB0b3NzIGFueSAKICAgICAgICAgLy8gYW5pbWF0aW9uIHdoaWNoIGlzIGZp
bmlzaGVkIChwb3N0QWN0aXZlKS4KICAgICAgICAgZm9yIChBbmltYXRpb25OYW1lTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGtmZW5k
OyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAoaXQtPnNlY29uZC0+cG9zdEFjdGl2ZSgpKQotICAg
ICAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNldEluZGV4KC0xKTsKKyAgICAgICAgICAgIGlmIChp
dC0+dmFsdWUtPnBvc3RBY3RpdmUoKSkKKyAgICAgICAgICAgICAgICBpdC0+dmFsdWUtPnNldElu
ZGV4KC0xKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIE1hcmsgYWxsIGV4
aXN0aW5nIGFuaW1hdGlvbnMgYXMgbm8gbG9uZ2VyIGFjdGl2ZS4KICAgICAgICAgZm9yIChBbmlt
YXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmJl
Z2luKCk7IGl0ICE9IGtmZW5kOyArK2l0KQotICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0SW5k
ZXgoLTEpOworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRJbmRleCgtMSk7CiAgICAgICAgICAg
ICAKICAgICAgICAgLy8gVG9zcyB0aGUgYW5pbWF0aW9uIG9yZGVyIG1hcC4KICAgICAgICAgbV9r
ZXlmcmFtZUFuaW1hdGlvbk9yZGVyTWFwLmNsZWFyKCk7CkBAIC0yNjAsNyArMjYwLDcgQEAgdm9p
ZCBDb21wb3NpdGVBbmltYXRpb246OnVwZGF0ZUtleWZyYW1lQW5pbWF0aW9ucyhSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyLCBSZW5kZXIKICAgICBWZWN0b3I8QXRvbWljU3RyaW5nSW1wbCo+IGFuaW1z
VG9CZVJlbW92ZWQ7CiAgICAga2ZlbmQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5lbmQoKTsKICAg
ICBmb3IgKEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFu
aW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0ga2ZlbmQ7ICsraXQpIHsKLSAgICAgICAgS2V5ZnJhbWVB
bmltYXRpb24qIGtleWZyYW1lQW5pbSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIEtleWZy
YW1lQW5pbWF0aW9uKiBrZXlmcmFtZUFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgIGlm
IChrZXlmcmFtZUFuaW0tPmluZGV4KCkgPCAwKSB7CiAgICAgICAgICAgICBhbmltc1RvQmVSZW1v
dmVkLmFwcGVuZChrZXlmcmFtZUFuaW0tPm5hbWUoKS5pbXBsKCkpOwogICAgICAgICAgICAgYW5p
bWF0aW9uQ29udHJvbGxlcigpLT5hbmltYXRpb25XaWxsQmVSZW1vdmVkKGtleWZyYW1lQW5pbSk7
CkBAIC0yODgsNyArMjg4LDcgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gQ29tcG9zaXRlQW5p
bWF0aW9uOjphbmltYXRlKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIFJlbmQKICAgICAgICAgaWYg
KCFtX3RyYW5zaXRpb25zLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgQ1NTUHJvcGVydHlUcmFu
c2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKICAg
ICAgICAgICAgIGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAg
ICAgICAgIGlmIChJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT5zZWNvbmQuZ2V0KCkpCisg
ICAgICAgICAgICAgICAgaWYgKEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnZhbHVlLmdl
dCgpKQogICAgICAgICAgICAgICAgICAgICBhbmltLT5hbmltYXRlKHRoaXMsIHJlbmRlcmVyLCBj
dXJyZW50U3R5bGUsIHRhcmdldFN0eWxlLCByZXN1bHRTdHlsZSk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KQEAgLTMxMCw3ICszMTAsNyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBDb21w
b3NpdGVBbmltYXRpb246OmdldEFuaW1hdGVkU3R5bGUoKSBjb25zdAogICAgIFJlZlB0cjxSZW5k
ZXJTdHlsZT4gcmVzdWx0U3R5bGU7CiAgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKICAgICBmb3IgKENTU1Byb3Bl
cnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKEltcGxpY2l0QW5pbWF0aW9uKiBp
bXBsaWNpdEFuaW1hdGlvbiA9IGl0LT5zZWNvbmQuZ2V0KCkpCisgICAgICAgIGlmIChJbXBsaWNp
dEFuaW1hdGlvbiogaW1wbGljaXRBbmltYXRpb24gPSBpdC0+dmFsdWUuZ2V0KCkpCiAgICAgICAg
ICAgICBpbXBsaWNpdEFuaW1hdGlvbi0+Z2V0QW5pbWF0ZWRTdHlsZShyZXN1bHRTdHlsZSk7CiAg
ICAgfQogCkBAIC0zMzEsNyArMzMxLDcgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnNldEFu
aW1hdGluZyhib29sIGFuaW1hdGluZykKICAgICBpZiAoIW1fdHJhbnNpdGlvbnMuaXNFbXB0eSgp
KSB7CiAgICAgICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIHRy
YW5zaXRpb25zRW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKICAgICAgICAgZm9yIChDU1NQcm9w
ZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVn
aW4oKTsgaXQgIT0gdHJhbnNpdGlvbnNFbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIEltcGxpY2l0
QW5pbWF0aW9uKiB0cmFuc2l0aW9uID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgIElt
cGxpY2l0QW5pbWF0aW9uKiB0cmFuc2l0aW9uID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAg
ICAgdHJhbnNpdGlvbi0+c2V0QW5pbWF0aW5nKGFuaW1hdGluZyk7CiAgICAgICAgIH0KICAgICB9
CkBAIC0zMzksNyArMzM5LDcgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnNldEFuaW1hdGlu
Zyhib29sIGFuaW1hdGluZykKICAgICAgICAgbV9rZXlmcmFtZUFuaW1hdGlvbnMuY2hlY2tDb25z
aXN0ZW5jeSgpOwogICAgICAgICBBbmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBhbmlt
YXRpb25zRW5kID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuZW5kKCk7CiAgICAgICAgIGZvciAoQW5p
bWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5i
ZWdpbigpOyBpdCAhPSBhbmltYXRpb25zRW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBLZXlmcmFt
ZUFuaW1hdGlvbiogYW5pbSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBLZXlmcmFt
ZUFuaW1hdGlvbiogYW5pbSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGFuaW0tPnNl
dEFuaW1hdGluZyhhbmltYXRpbmcpOwogICAgICAgICB9CiAgICAgfQpAQCAtMzU0LDcgKzM1NCw3
IEBAIGRvdWJsZSBDb21wb3NpdGVBbmltYXRpb246OnRpbWVUb05leHRTZXJ2aWNlKCkgY29uc3QK
ICAgICBpZiAoIW1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSB7CiAgICAgICAgIENTU1Byb3BlcnR5
VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIHRyYW5zaXRpb25zRW5kID0gbV90cmFuc2l0
aW9ucy5lbmQoKTsKICAgICAgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gdHJhbnNpdGlvbnNF
bmQ7ICsraXQpIHsKLSAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiB0cmFuc2l0aW9uID0g
aXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiB0cmFuc2l0
aW9uID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAgICAgZG91YmxlIHQgPSB0cmFuc2l0aW9u
ID8gdHJhbnNpdGlvbi0+dGltZVRvTmV4dFNlcnZpY2UoKSA6IC0xOwogICAgICAgICAgICAgaWYg
KHQgPCBtaW5UIHx8IG1pblQgPT0gLTEpCiAgICAgICAgICAgICAgICAgbWluVCA9IHQ7CkBAIC0z
NjYsNyArMzY2LDcgQEAgZG91YmxlIENvbXBvc2l0ZUFuaW1hdGlvbjo6dGltZVRvTmV4dFNlcnZp
Y2UoKSBjb25zdAogICAgICAgICBtX2tleWZyYW1lQW5pbWF0aW9ucy5jaGVja0NvbnNpc3RlbmN5
KCk7CiAgICAgICAgIEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGFuaW1hdGlvbnNF
bmQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5lbmQoKTsKICAgICAgICAgZm9yIChBbmltYXRpb25O
YW1lTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmJlZ2luKCk7
IGl0ICE9IGFuaW1hdGlvbnNFbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIEtleWZyYW1lQW5pbWF0
aW9uKiBhbmltYXRpb24gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgS2V5ZnJhbWVB
bmltYXRpb24qIGFuaW1hdGlvbiA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGRvdWJs
ZSB0ID0gYW5pbWF0aW9uID8gYW5pbWF0aW9uLT50aW1lVG9OZXh0U2VydmljZSgpIDogLTE7CiAg
ICAgICAgICAgICBpZiAodCA8IG1pblQgfHwgbWluVCA9PSAtMSkKICAgICAgICAgICAgICAgICBt
aW5UID0gdDsKQEAgLTM4OCw3ICszODgsNyBAQCBQYXNzUmVmUHRyPEtleWZyYW1lQW5pbWF0aW9u
PiBDb21wb3NpdGVBbmltYXRpb246OmdldEFuaW1hdGlvbkZvclByb3BlcnR5KGludCBwcgogICAg
ICAgICBtX2tleWZyYW1lQW5pbWF0aW9ucy5jaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgICAgIEFu
aW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGFuaW1hdGlvbnNFbmQgPSBtX2tleWZyYW1l
QW5pbWF0aW9ucy5lbmQoKTsKICAgICAgICAgZm9yIChBbmltYXRpb25OYW1lTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGFuaW1hdGlv
bnNFbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIFJlZlB0cjxLZXlmcmFtZUFuaW1hdGlvbj4gYW5p
bSA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICBSZWZQdHI8S2V5ZnJhbWVBbmltYXRpb24+IGFu
aW0gPSBpdC0+dmFsdWU7CiAgICAgICAgICAgICBpZiAoYW5pbS0+aGFzQW5pbWF0aW9uRm9yUHJv
cGVydHkocHJvcGVydHkpKQogICAgICAgICAgICAgICAgIHJldHZhbCA9IGFuaW07CiAgICAgICAg
IH0KQEAgLTQwOCwxNCArNDA4LDE0IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpzdXNwZW5k
QW5pbWF0aW9ucygpCiAgICAgICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zLmNoZWNrQ29uc2lzdGVu
Y3koKTsKICAgICAgICAgQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9u
c0VuZCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmVuZCgpOwogICAgICAgICBmb3IgKEFuaW1hdGlv
bk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVnaW4o
KTsgaXQgIT0gYW5pbWF0aW9uc0VuZDsgKytpdCkgewotICAgICAgICAgICAgaWYgKEtleWZyYW1l
QW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZC5nZXQoKSkKKyAgICAgICAgICAgIGlmIChLZXlm
cmFtZUFuaW1hdGlvbiogYW5pbSA9IGl0LT52YWx1ZS5nZXQoKSkKICAgICAgICAgICAgICAgICBh
bmltLT51cGRhdGVQbGF5U3RhdGUoQW5pbVBsYXlTdGF0ZVBhdXNlZCk7CiAgICAgICAgIH0KICAg
ICB9CiAgICAgaWYgKCFtX3RyYW5zaXRpb25zLmlzRW1wdHkoKSkgewogICAgICAgICBDU1NQcm9w
ZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciB0cmFuc2l0aW9uc0VuZCA9IG1fdHJh
bnNpdGlvbnMuZW5kKCk7CiAgICAgICAgIGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IHRyYW5zaXRp
b25zRW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0
LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0
LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGlmIChhbmltICYmIGFuaW0tPmhhc1N0eWxlKCkp
CiAgICAgICAgICAgICAgICAgYW5pbS0+dXBkYXRlUGxheVN0YXRlKEFuaW1QbGF5U3RhdGVQYXVz
ZWQpOwogICAgICAgICB9CkBAIC00MzMsNyArNDMzLDcgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRp
b246OnJlc3VtZUFuaW1hdGlvbnMoKQogICAgICAgICBtX2tleWZyYW1lQW5pbWF0aW9ucy5jaGVj
a0NvbnNpc3RlbmN5KCk7CiAgICAgICAgIEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9y
IGFuaW1hdGlvbnNFbmQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5lbmQoKTsKICAgICAgICAgZm9y
IChBbmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVBbmltYXRp
b25zLmJlZ2luKCk7IGl0ICE9IGFuaW1hdGlvbnNFbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIEtl
eWZyYW1lQW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgIEtl
eWZyYW1lQW5pbWF0aW9uKiBhbmltID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAgICAgaWYg
KGFuaW0gJiYgYW5pbS0+cGxheVN0YXRlUGxheWluZygpKQogICAgICAgICAgICAgICAgIGFuaW0t
PnVwZGF0ZVBsYXlTdGF0ZShBbmltUGxheVN0YXRlUGxheWluZyk7CiAgICAgICAgIH0KQEAgLTQ0
Miw3ICs0NDIsNyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6cmVzdW1lQW5pbWF0aW9ucygp
CiAgICAgaWYgKCFtX3RyYW5zaXRpb25zLmlzRW1wdHkoKSkgewogICAgICAgICBDU1NQcm9wZXJ0
eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciB0cmFuc2l0aW9uc0VuZCA9IG1fdHJhbnNp
dGlvbnMuZW5kKCk7CiAgICAgICAgIGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IHRyYW5zaXRpb25z
RW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT5z
ZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT52
YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGlmIChhbmltICYmIGFuaW0tPmhhc1N0eWxlKCkpCiAg
ICAgICAgICAgICAgICAgYW5pbS0+dXBkYXRlUGxheVN0YXRlKEFuaW1QbGF5U3RhdGVQbGF5aW5n
KTsKICAgICAgICAgfQpAQCAtNDU0LDcgKzQ1NCw3IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9u
OjpvdmVycmlkZUltcGxpY2l0QW5pbWF0aW9ucyhpbnQgcHJvcGVydHkpCiAgICAgQ1NTUHJvcGVy
dHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV90cmFuc2l0aW9ucy5lbmQo
KTsKICAgICBpZiAoIW1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSB7CiAgICAgICAgIGZvciAoQ1NT
UHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25z
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgSW1wbGljaXRBbmltYXRp
b24qIGFuaW0gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgSW1wbGljaXRBbmltYXRp
b24qIGFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoYW5pbSAmJiBhbmlt
LT5hbmltYXRpbmdQcm9wZXJ0eSgpID09IHByb3BlcnR5KQogICAgICAgICAgICAgICAgIGFuaW0t
PnNldE92ZXJyaWRkZW4odHJ1ZSk7CiAgICAgICAgIH0KQEAgLTQ2Niw3ICs0NjYsNyBAQCB2b2lk
IENvbXBvc2l0ZUFuaW1hdGlvbjo6cmVzdW1lT3ZlcnJpZGRlbkltcGxpY2l0QW5pbWF0aW9ucyhp
bnQgcHJvcGVydHkpCiAgICAgaWYgKCFtX3RyYW5zaXRpb25zLmlzRW1wdHkoKSkgewogICAgICAg
ICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3RyYW5z
aXRpb25zLmVuZCgpOwogICAgICAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKLSAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZC5nZXQo
KTsKKyAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnZhbHVlLmdldCgp
OwogICAgICAgICAgICAgaWYgKGFuaW0gJiYgYW5pbS0+YW5pbWF0aW5nUHJvcGVydHkoKSA9PSBw
cm9wZXJ0eSkKICAgICAgICAgICAgICAgICBhbmltLT5zZXRPdmVycmlkZGVuKGZhbHNlKTsKICAg
ICAgICAgfQpAQCAtNDc5LDcgKzQ3OSw3IEBAIGJvb2wgQ29tcG9zaXRlQW5pbWF0aW9uOjppc0Fu
aW1hdGluZ1Byb3BlcnR5KGludCBwcm9wZXJ0eSwgYm9vbCBhY2NlbGVyYXRlZE9ubHksCiAgICAg
ICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsKICAgICAgICAgQW5p
bWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fa2V5ZnJhbWVB
bmltYXRpb25zLmVuZCgpOwogICAgICAgICBmb3IgKEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gYW5pbWF0aW9u
c0VuZDsgKytpdCkgewotICAgICAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24qIGFuaW0gPSBpdC0+
c2Vjb25kLmdldCgpOworICAgICAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24qIGFuaW0gPSBpdC0+
dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoYW5pbSAmJiBhbmltLT5pc0FuaW1hdGluZ1By
b3BlcnR5KHByb3BlcnR5LCBhY2NlbGVyYXRlZE9ubHksIGlzUnVubmluZ05vdykpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTQ4OCw3ICs0ODgsNyBAQCBib29s
IENvbXBvc2l0ZUFuaW1hdGlvbjo6aXNBbmltYXRpbmdQcm9wZXJ0eShpbnQgcHJvcGVydHksIGJv
b2wgYWNjZWxlcmF0ZWRPbmx5LAogICAgIGlmICghbV90cmFuc2l0aW9ucy5pc0VtcHR5KCkpIHsK
ICAgICAgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgdHJhbnNp
dGlvbnNFbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOwogICAgICAgICBmb3IgKENTU1Byb3BlcnR5
VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigp
OyBpdCAhPSB0cmFuc2l0aW9uc0VuZDsgKytpdCkgewotICAgICAgICAgICAgSW1wbGljaXRBbmlt
YXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgSW1wbGljaXRBbmlt
YXRpb24qIGFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoYW5pbSAmJiBh
bmltLT5pc0FuaW1hdGluZ1Byb3BlcnR5KHByb3BlcnR5LCBhY2NlbGVyYXRlZE9ubHksIGlzUnVu
bmluZ05vdykpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTU1
NCw3ICs1NTQsNyBAQCB1bnNpZ25lZCBDb21wb3NpdGVBbmltYXRpb246Om51bWJlck9mQWN0aXZl
QW5pbWF0aW9ucygpIGNvbnN0CiAgICAgICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zLmNoZWNrQ29u
c2lzdGVuY3koKTsKICAgICAgICAgQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgYW5p
bWF0aW9uc0VuZCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmVuZCgpOwogICAgICAgICBmb3IgKEFu
aW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMu
YmVnaW4oKTsgaXQgIT0gYW5pbWF0aW9uc0VuZDsgKytpdCkgewotICAgICAgICAgICAgS2V5ZnJh
bWVBbmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgS2V5ZnJh
bWVBbmltYXRpb24qIGFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoYW5p
bS0+cnVubmluZygpKQogICAgICAgICAgICAgICAgICsrY291bnQ7CiAgICAgICAgIH0KQEAgLTU2
Myw3ICs1NjMsNyBAQCB1bnNpZ25lZCBDb21wb3NpdGVBbmltYXRpb246Om51bWJlck9mQWN0aXZl
QW5pbWF0aW9ucygpIGNvbnN0CiAgICAgaWYgKCFtX3RyYW5zaXRpb25zLmlzRW1wdHkoKSkgewog
ICAgICAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciB0cmFuc2l0
aW9uc0VuZCA9IG1fdHJhbnNpdGlvbnMuZW5kKCk7CiAgICAgICAgIGZvciAoQ1NTUHJvcGVydHlU
cmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7
IGl0ICE9IHRyYW5zaXRpb25zRW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBJbXBsaWNpdEFuaW1h
dGlvbiogYW5pbSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBJbXBsaWNpdEFuaW1h
dGlvbiogYW5pbSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGlmIChhbmltLT5ydW5u
aW5nKCkpCiAgICAgICAgICAgICAgICAgKytjb3VudDsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGFuZ3VhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vTGFuZ3VhZ2UuY3BwCmluZGV4IDQ3ZjA5ZjYwOTI5OTcxZTMxNzM1NmU0OWZiY2I2M2I1
ZGI0MTdmMzcuLmIzZjk3YmVjOTcyMTViODA5YjM0MWVhYzAxYTYxN2U4MWFhN2EwNmUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xhbmd1YWdlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9MYW5ndWFnZS5jcHAKQEAgLTUzLDcgKzUzLDcgQEAgdm9pZCBsYW5n
dWFnZURpZENoYW5nZSgpCiB7CiAgICAgT2JzZXJ2ZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IG9ic2Vy
dmVyTWFwKCkuZW5kKCk7CiAgICAgZm9yIChPYnNlcnZlck1hcDo6aXRlcmF0b3IgaXRlciA9IG9i
c2VydmVyTWFwKCkuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikKLSAgICAgICAgaXRlci0+
c2Vjb25kKGl0ZXItPmZpcnN0KTsKKyAgICAgICAgaXRlci0+dmFsdWUoaXRlci0+a2V5KTsKIH0K
IAogU3RyaW5nIGRlZmF1bHRMYW5ndWFnZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9hdWRpby9IUlRGRWxldmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL0hSVEZFbGV2YXRpb24uY3BwCmluZGV4IGViMDdkNGVjOWY5MmI3NDI4NTAyMTgzMjUy
YjEwMTk1MjlmMjE4YzMuLjA3ZTAwMTg1OGMxYjYyMjQxZTRiNzZhYjNjZmQ2NTBhNmRhNGFjM2Mg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0hSVEZFbGV2YXRpb24u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0hSVEZFbGV2YXRpb24uY3Bw
CkBAIC03OSw3ICs3OSw3IEBAIHN0YXRpYyBBdWRpb0J1cyogZ2V0Q29uY2F0ZW5hdGVkSW1wdWxz
ZVJlc3BvbnNlc0ZvclN1YmplY3QoY29uc3QgU3RyaW5nJiBzdWJqZWN0CiAgICAgICAgIGJ1cyA9
IGNvbmNhdGVuYXRlZEltcHVsc2VSZXNwb25zZXMubGVha1B0cigpOwogICAgICAgICBhdWRpb0J1
c01hcC5zZXQoc3ViamVjdE5hbWUsIGJ1cyk7CiAgICAgfSBlbHNlCi0gICAgICAgIGJ1cyA9IGl0
ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgIGJ1cyA9IGl0ZXJhdG9yLT52YWx1ZTsKIAogICAgIHNp
emVfdCByZXNwb25zZUxlbmd0aCA9IGJ1cy0+bGVuZ3RoKCk7CiAgICAgc2l6ZV90IGV4cGVjdGVk
TGVuZ3RoID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihUb3RhbE51bWJlck9mUmVzcG9uc2VzICogUmVz
cG9uc2VGcmFtZVNpemUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxh
Y2tiZXJyeS9Db29raWVNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNr
YmVycnkvQ29va2llTWFuYWdlci5jcHAKaW5kZXggZDllYmJmMzdkZjI0N2M5N2RiODczMjQwZWNi
MDAyYmQxNGY2MTA3Yi4uMTU4NjlhYWM1NWFkYzI4OGNjYjg3ZDczYjA3MjcwMmNlMTcwZjBhOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9Db29raWVNYW5h
Z2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0Nvb2tpZU1h
bmFnZXIuY3BwCkBAIC0yMjQsNyArMjI0LDcgQEAgU3RyaW5nIENvb2tpZU1hbmFnZXI6OmdlbmVy
YXRlSHRtbEZyYWdtZW50Rm9yQ29va2llcygpCiAKICAgICBWZWN0b3I8UGFyc2VkQ29va2llKj4g
Y29va2llQ2FuZGlkYXRlczsKICAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBDb29raWVNYXAqPjo6
aXRlcmF0b3IgaXQgPSBtX21hbmFnZXJNYXAuYmVnaW4oKTsgaXQgIT0gbV9tYW5hZ2VyTWFwLmVu
ZCgpOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5nZXRBbGxDaGlsZENvb2tpZXMoJmNvb2tp
ZUNhbmRpZGF0ZXMpOworICAgICAgICBpdC0+dmFsdWUtPmdldEFsbENoaWxkQ29va2llcygmY29v
a2llQ2FuZGlkYXRlcyk7CiAKICAgICBTdHJpbmcgcmVzdWx0OwogICAgIFBhcnNlZENvb2tpZSog
Y29va2llID0gMDsKQEAgLTM0Myw3ICszNDMsNyBAQCB2b2lkIENvb2tpZU1hbmFnZXI6OnJlbW92
ZUFsbENvb2tpZXMoQmFja2luZ1N0b3JlUmVtb3ZhbFBvbGljeSBiYWNraW5nU3RvcmVSZW1vdgog
ICAgIEhhc2hNYXA8U3RyaW5nLCBDb29raWVNYXAqPjo6aXRlcmF0b3IgZmlyc3QgPSBtX21hbmFn
ZXJNYXAuYmVnaW4oKTsKICAgICBIYXNoTWFwPFN0cmluZywgQ29va2llTWFwKj46Oml0ZXJhdG9y
IGVuZCA9IG1fbWFuYWdlck1hcC5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBDb29r
aWVNYXAqPjo6aXRlcmF0b3IgaXQgPSBmaXJzdDsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBp
dC0+c2Vjb25kLT5kZWxldGVBbGxDb29raWVzQW5kRG9tYWlucygpOworICAgICAgICBpdC0+dmFs
dWUtPmRlbGV0ZUFsbENvb2tpZXNBbmREb21haW5zKCk7CiAKICAgICBpZiAoYmFja2luZ1N0b3Jl
UmVtb3ZhbCA9PSBSZW1vdmVGcm9tQmFja2luZ1N0b3JlKQogICAgICAgICBtX2Nvb2tpZUJhY2tp
bmdTdG9yZS0+cmVtb3ZlQWxsKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ibGFja2JlcnJ5L0Nvb2tpZU1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFj
a2JlcnJ5L0Nvb2tpZU1hcC5jcHAKaW5kZXggYjIxN2IyZTQ4NDUwZWQwZmQyNTRjM2QwY2FlNzU1
M2YxZTExYWU0MC4uMmIwMzgwZTc5YWI3ODI0ZjYyMmUxNDdlZjJhOTM2MTdiOWFhOGM3ZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9Db29raWVNYXAuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvQ29va2llTWFwLmNwcApA
QCAtMTY2LDcgKzE2Niw3IEBAIFBhcnNlZENvb2tpZSogQ29va2llTWFwOjpyZW1vdmVPbGRlc3RD
b29raWUoKQogICAgICAgICBDb29raWVMb2coIkNvb2tpZU1hcCAtIGxvb2tpbmcgaW50byBzdWJk
b21haW5zIik7CiAKICAgICAgICAgZm9yIChIYXNoTWFwPFN0cmluZywgQ29va2llTWFwKj46Oml0
ZXJhdG9yIGl0ID0gbV9zdWJkb21haW5zLmJlZ2luKCk7IGl0ICE9IG1fc3ViZG9tYWlucy5lbmQo
KTsgKytpdCkgewotICAgICAgICAgICAgb2xkZXN0Q29va2llID0gaXQtPnNlY29uZC0+cmVtb3Zl
T2xkZXN0Q29va2llKCk7CisgICAgICAgICAgICBvbGRlc3RDb29raWUgPSBpdC0+dmFsdWUtPnJl
bW92ZU9sZGVzdENvb2tpZSgpOwogICAgICAgICAgICAgaWYgKG9sZGVzdENvb2tpZSkKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMjA4LDcgKzIwOCw3IEBAIHZvaWQgQ29v
a2llTWFwOjpnZXRBbGxDaGlsZENvb2tpZXMoVmVjdG9yPFBhcnNlZENvb2tpZSo+KiBzdGFja09m
Q29va2llcykKICAgICBDb29raWVMb2coIkNvb2tpZU1hcCAtIGdldEFsbENoaWxkQ29va2llcyBp
biBNYXAgLSAlcyIsIGdldE5hbWUoKS51dGY4KCkuZGF0YSgpKTsKICAgICBnZXRBbGxDb29raWVz
KHN0YWNrT2ZDb29raWVzKTsKICAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBDb29raWVNYXAqPjo6
aXRlcmF0b3IgaXQgPSBtX3N1YmRvbWFpbnMuYmVnaW4oKTsgaXQgIT0gbV9zdWJkb21haW5zLmVu
ZCgpOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5nZXRBbGxDaGlsZENvb2tpZXMoc3RhY2tP
ZkNvb2tpZXMpOworICAgICAgICBpdC0+dmFsdWUtPmdldEFsbENoaWxkQ29va2llcyhzdGFja09m
Q29va2llcyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2NmL0JpbmFyeVByb3BlcnR5TGlzdC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jZi9CaW5hcnlQcm9wZXJ0eUxpc3QuY3BwCmluZGV4IDRiYzdjMmU2MDdl
YWIzZTBiNDczNjBhNjIyNmUxYTI3YTUyMDhiMDkuLjQ4YTBmOTE3ZTkzZWY4OTIxNTZlZDQ3MTIx
MjhkMDBmOWMwZjc5ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL0Jp
bmFyeVByb3BlcnR5TGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2YvQmlu
YXJ5UHJvcGVydHlMaXN0LmNwcApAQCAtMjI5LDcgKzIyOSw3IEBAIHZvaWQgQmluYXJ5UHJvcGVy
dHlMaXN0UGxhbjo6d3JpdGVJbnRlZ2VyQXJyYXkoY29uc3QgaW50KiBpbnRlZ2Vycywgc2l6ZV90
IHNpemUpCiAgICAgICAgIHJldHVybjsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7
ICsraSkKICAgICAgICAgd3JpdGVJbnRlZ2VyKGludGVnZXJzW2ldKTsKLSAgICBhZGRSZXN1bHQu
aXRlcmF0b3ItPnNlY29uZCA9IG1fY3VycmVudE9iamVjdFJlZmVyZW5jZSsrOworICAgIGFkZFJl
c3VsdC5pdGVyYXRvci0+dmFsdWUgPSBtX2N1cnJlbnRPYmplY3RSZWZlcmVuY2UrKzsKICAgICB3
cml0ZUFycmF5T2JqZWN0KHNpemUpOwogICAgIG1fY3VycmVudEFnZ3JlZ2F0ZVNpemUgPSBzYXZl
ZEFnZ3JlZ2F0ZVNpemU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
aHJvbWl1bS9zdXBwb3J0L1dlYkhUVFBMb2FkSW5mby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYkhUVFBMb2FkSW5mby5jcHAKaW5kZXggZDdkNTdmMjEy
MTA0ZmU5OTA3NTY2MzI1MGQ0NDIzYjFlNjI2YjYyNy4uODAwZjZhYzI5M2M2ZDk5OWIxZGE4ZmQy
NGZjZTdjNGYxMjNmZWZkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vc3VwcG9ydC9XZWJIVFRQTG9hZEluZm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViSFRUUExvYWRJbmZvLmNwcApAQCAtMTA1LDcgKzEw
NSw3IEBAIHN0YXRpYyB2b2lkIGFkZEhlYWRlcihIVFRQSGVhZGVyTWFwKiBtYXAsIGNvbnN0IFdl
YlN0cmluZyYgbmFtZSwgY29uc3QgV2ViU3RyaW5nCiB7CiAgICAgSFRUUEhlYWRlck1hcDo6QWRk
UmVzdWx0IHJlc3VsdCA9IG1hcC0+YWRkKG5hbWUsIHZhbHVlKTsKICAgICBpZiAoIXJlc3VsdC5p
c05ld0VudHJ5KQotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCArPSAiLCAiICsgU3Ry
aW5nKHZhbHVlKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSArPSAiLCAiICsgU3Ry
aW5nKHZhbHVlKTsKIH0KIAogdm9pZCBXZWJIVFRQTG9hZEluZm86OmFkZFJlcXVlc3RIZWFkZXIo
Y29uc3QgV2ViU3RyaW5nJiBuYW1lLCBjb25zdCBXZWJTdHJpbmcmIHZhbHVlKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJVUkxSZXF1ZXN0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVVJMUmVx
dWVzdC5jcHAKaW5kZXggZjQzN2I1MTY0M2IyMzRiNjA5Zjc3MjVmYjhkNzZkNzMxZjU2MTdlYS4u
ZTM4NTEwMTRmY2RkNDViZmFjYjQ4Yjk3YmJhNzZlMzFkOGI0YTAxNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJVUkxSZXF1ZXN0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlVSTFJlcXVl
c3QuY3BwCkBAIC0xOTUsNyArMTk1LDcgQEAgdm9pZCBXZWJVUkxSZXF1ZXN0Ojp2aXNpdEhUVFBI
ZWFkZXJGaWVsZHMoV2ViSFRUUEhlYWRlclZpc2l0b3IqIHZpc2l0b3IpIGNvbnN0CiB7CiAgICAg
Y29uc3QgSFRUUEhlYWRlck1hcCYgbWFwID0gbV9wcml2YXRlLT5tX3Jlc291cmNlUmVxdWVzdC0+
aHR0cEhlYWRlckZpZWxkcygpOwogICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtYXAuYmVnaW4oKTsgaXQgIT0gbWFwLmVuZCgpOyArK2l0KQotICAgICAgICB2aXNp
dG9yLT52aXNpdEhlYWRlcihpdC0+Zmlyc3QsIGl0LT5zZWNvbmQpOworICAgICAgICB2aXNpdG9y
LT52aXNpdEhlYWRlcihpdC0+a2V5LCBpdC0+dmFsdWUpOwogfQogCiBXZWJIVFRQQm9keSBXZWJV
UkxSZXF1ZXN0OjpodHRwQm9keSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlVSTFJlc3BvbnNlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVVJMUmVzcG9uc2UuY3BwCmluZGV4IDA1
NjU4MDUwZDg5NDhlNDJjODhiMjg3NTc2ZmNmOThjMWJmODM5YmYuLjA2ZTk0M2JlYjQ3ZmFhNTAz
ZjJkOWVkMzljMmVkNjdhZDYwZjNmYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVVJMUmVzcG9uc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVVJMUmVzcG9uc2UuY3BwCkBAIC0yNTEs
NyArMjUxLDcgQEAgdm9pZCBXZWJVUkxSZXNwb25zZTo6YWRkSFRUUEhlYWRlckZpZWxkKGNvbnN0
IFdlYlN0cmluZyYgbmFtZSwgY29uc3QgV2ViU3RyaW5nJgogICAgIEhUVFBIZWFkZXJNYXA6OkFk
ZFJlc3VsdCByZXN1bHQgPQogICAgICAgICBjb25zdF9jYXN0PEhUVFBIZWFkZXJNYXAqPigmbWFw
KS0+YWRkKG5hbWUsIHZhbHVlU3RyKTsKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAg
ICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCArPSAiLCAiICsgdmFsdWVTdHI7CisgICAgICAg
IHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgKz0gIiwgIiArIHZhbHVlU3RyOwogfQogCiB2b2lkIFdl
YlVSTFJlc3BvbnNlOjpjbGVhckhUVFBIZWFkZXJGaWVsZChjb25zdCBXZWJTdHJpbmcmIG5hbWUp
CkBAIC0yNjUsNyArMjY1LDcgQEAgdm9pZCBXZWJVUkxSZXNwb25zZTo6dmlzaXRIVFRQSGVhZGVy
RmllbGRzKFdlYkhUVFBIZWFkZXJWaXNpdG9yKiB2aXNpdG9yKSBjb25zdAogewogICAgIGNvbnN0
IEhUVFBIZWFkZXJNYXAmIG1hcCA9IG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlc3BvbnNlLT5odHRw
SGVhZGVyRmllbGRzKCk7CiAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IG1hcC5iZWdpbigpOyBpdCAhPSBtYXAuZW5kKCk7ICsraXQpCi0gICAgICAgIHZpc2l0b3It
PnZpc2l0SGVhZGVyKGl0LT5maXJzdCwgaXQtPnNlY29uZCk7CisgICAgICAgIHZpc2l0b3ItPnZp
c2l0SGVhZGVyKGl0LT5rZXksIGl0LT52YWx1ZSk7CiB9CiAKIGRvdWJsZSBXZWJVUkxSZXNwb25z
ZTo6bGFzdE1vZGlmaWVkRGF0ZSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udENhY2hlLmNwcAppbmRleCA0N2YyNTFjODQxNGExZTJkYjU5ZjAwNGE5MDQ0
YWEwZjhjMmU5ZDY1Li43YTRlOWM3ZmRiMzVmY2E3Njk0NTYyMTc0YmQ5YTdmNmMwZTc5OWY4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAKQEAg
LTE5OSw3ICsxOTksNyBAQCBGb250UGxhdGZvcm1EYXRhKiBGb250Q2FjaGU6OmdldENhY2hlZEZv
bnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmbwogICAgICAgICBnRm9udFBs
YXRmb3JtRGF0YUNhY2hlLT5zZXQoa2V5LCByZXN1bHQpOwogICAgICAgICBmb3VuZFJlc3VsdCA9
IHJlc3VsdDsKICAgICB9IGVsc2UgewotICAgICAgICByZXN1bHQgPSBpdC0+c2Vjb25kOworICAg
ICAgICByZXN1bHQgPSBpdC0+dmFsdWU7CiAgICAgICAgIGZvdW5kUmVzdWx0ID0gdHJ1ZTsKICAg
ICB9CiAKQEAgLTI5NCwyMCArMjk0LDIwIEBAIFNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6Omdl
dENhY2hlZEZvbnREYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEqIHBsYXRmb3JtRGF0CiAgICAg
ICAgIHJldHVybiBuZXdWYWx1ZS5maXJzdDsKICAgICB9CiAKLSAgICBpZiAoIXJlc3VsdC5nZXQo
KS0+c2Vjb25kLnNlY29uZCkgewotICAgICAgICBBU1NFUlQoZ0luYWN0aXZlRm9udERhdGEtPmNv
bnRhaW5zKHJlc3VsdC5nZXQoKS0+c2Vjb25kLmZpcnN0KSk7Ci0gICAgICAgIGdJbmFjdGl2ZUZv
bnREYXRhLT5yZW1vdmUocmVzdWx0LmdldCgpLT5zZWNvbmQuZmlyc3QpOworICAgIGlmICghcmVz
dWx0LmdldCgpLT52YWx1ZS5zZWNvbmQpIHsKKyAgICAgICAgQVNTRVJUKGdJbmFjdGl2ZUZvbnRE
YXRhLT5jb250YWlucyhyZXN1bHQuZ2V0KCktPnZhbHVlLmZpcnN0KSk7CisgICAgICAgIGdJbmFj
dGl2ZUZvbnREYXRhLT5yZW1vdmUocmVzdWx0LmdldCgpLT52YWx1ZS5maXJzdCk7CiAgICAgfQog
CiAgICAgaWYgKHNob3VsZFJldGFpbiA9PSBSZXRhaW4pCi0gICAgICAgIHJlc3VsdC5nZXQoKS0+
c2Vjb25kLnNlY29uZCsrOwotICAgIGVsc2UgaWYgKCFyZXN1bHQuZ2V0KCktPnNlY29uZC5zZWNv
bmQpIHsKKyAgICAgICAgcmVzdWx0LmdldCgpLT52YWx1ZS5zZWNvbmQrKzsKKyAgICBlbHNlIGlm
ICghcmVzdWx0LmdldCgpLT52YWx1ZS5zZWNvbmQpIHsKICAgICAgICAgLy8gSWYgc2hvdWxkUmV0
YWluIGlzIERvTm90UmV0YWluIGFuZCBjb3VudCBpcyAwLCB3ZSB3YW50IHRvIHJlbW92ZSB0aGUg
Zm9udERhdGEgZnJvbSAKICAgICAgICAgLy8gZ0luYWN0aXZlRm9udERhdGEgKGFib3ZlKSBhbmQg
cmUtYWRkIGhlcmUgdG8gdXBkYXRlIExSVSBwb3NpdGlvbi4KLSAgICAgICAgZ0luYWN0aXZlRm9u
dERhdGEtPmFkZChyZXN1bHQuZ2V0KCktPnNlY29uZC5maXJzdCk7CisgICAgICAgIGdJbmFjdGl2
ZUZvbnREYXRhLT5hZGQocmVzdWx0LmdldCgpLT52YWx1ZS5maXJzdCk7CiAgICAgfQogCi0gICAg
cmV0dXJuIHJlc3VsdC5nZXQoKS0+c2Vjb25kLmZpcnN0OworICAgIHJldHVybiByZXN1bHQuZ2V0
KCktPnZhbHVlLmZpcnN0OwogfQogCiBTaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXROb25S
ZXRhaW5lZExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250
RGVzY3JpcHRpb24pCkBAIC0zMjMsOCArMzIzLDggQEAgdm9pZCBGb250Q2FjaGU6OnJlbGVhc2VG
b250RGF0YShjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEpCiAgICAgRm9udERhdGFDYWNo
ZTo6aXRlcmF0b3IgaXQgPSBnRm9udERhdGFDYWNoZS0+ZmluZChmb250RGF0YS0+cGxhdGZvcm1E
YXRhKCkpOwogICAgIEFTU0VSVChpdCAhPSBnRm9udERhdGFDYWNoZS0+ZW5kKCkpOwogCi0gICAg
QVNTRVJUKGl0LT5zZWNvbmQuc2Vjb25kKTsKLSAgICBpZiAoIS0taXQtPnNlY29uZC5zZWNvbmQp
CisgICAgQVNTRVJUKGl0LT52YWx1ZS5zZWNvbmQpOworICAgIGlmICghLS1pdC0+dmFsdWUuc2Vj
b25kKQogICAgICAgICBnSW5hY3RpdmVGb250RGF0YS0+YWRkKGZvbnREYXRhKTsKIH0KIApAQCAt
MzcyLDggKzM3Miw4IEBAIHZvaWQgRm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGEoaW50
IGNvdW50KQogICAgICAgICBrZXlzVG9SZW1vdmUucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShnRm9u
dFBsYXRmb3JtRGF0YUNhY2hlLT5zaXplKCkpOwogICAgICAgICBGb250UGxhdGZvcm1EYXRhQ2Fj
aGU6Oml0ZXJhdG9yIHBsYXRmb3JtRGF0YUVuZCA9IGdGb250UGxhdGZvcm1EYXRhQ2FjaGUtPmVu
ZCgpOwogICAgICAgICBmb3IgKEZvbnRQbGF0Zm9ybURhdGFDYWNoZTo6aXRlcmF0b3IgcGxhdGZv
cm1EYXRhID0gZ0ZvbnRQbGF0Zm9ybURhdGFDYWNoZS0+YmVnaW4oKTsgcGxhdGZvcm1EYXRhICE9
IHBsYXRmb3JtRGF0YUVuZDsgKytwbGF0Zm9ybURhdGEpIHsKLSAgICAgICAgICAgIGlmIChwbGF0
Zm9ybURhdGEtPnNlY29uZCAmJiAhZ0ZvbnREYXRhQ2FjaGUtPmNvbnRhaW5zKCpwbGF0Zm9ybURh
dGEtPnNlY29uZCkpCi0gICAgICAgICAgICAgICAga2V5c1RvUmVtb3ZlLmFwcGVuZChwbGF0Zm9y
bURhdGEtPmZpcnN0KTsKKyAgICAgICAgICAgIGlmIChwbGF0Zm9ybURhdGEtPnZhbHVlICYmICFn
Rm9udERhdGFDYWNoZS0+Y29udGFpbnMoKnBsYXRmb3JtRGF0YS0+dmFsdWUpKQorICAgICAgICAg
ICAgICAgIGtleXNUb1JlbW92ZS5hcHBlbmQocGxhdGZvcm1EYXRhLT5rZXkpOwogICAgICAgICB9
CiAgICAgICAgIAogICAgICAgICBzaXplX3Qga2V5c1RvUmVtb3ZlQ291bnQgPSBrZXlzVG9SZW1v
dmUuc2l6ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R2x5cGhQYWdlVHJlZU5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R2x5cGhQYWdlVHJlZU5vZGUuY3BwCmluZGV4IDg3ZTkzZmQ5OGZmOGRlZjA5NDgxNmE1MjQzNGU5
MDA1ZTg5OTk1OWQuLjYzNWVjN2IyMjlhYjRjYTk5MThiNTVmZWRkN2ZhOTg3YjQxOTI2NTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZVRyZWVO
b2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2VU
cmVlTm9kZS5jcHAKQEAgLTc0LDcgKzc0LDcgQEAgc2l6ZV90IEdseXBoUGFnZVRyZWVOb2RlOjp0
cmVlR2x5cGhQYWdlQ291bnQoKQogICAgIGlmIChyb290cykgewogICAgICAgICBIYXNoTWFwPGlu
dCwgR2x5cGhQYWdlVHJlZU5vZGUqPjo6aXRlcmF0b3IgZW5kID0gcm9vdHMtPmVuZCgpOwogICAg
ICAgICBmb3IgKEhhc2hNYXA8aW50LCBHbHlwaFBhZ2VUcmVlTm9kZSo+OjppdGVyYXRvciBpdCA9
IHJvb3RzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBjb3VudCArPSBp
dC0+c2Vjb25kLT5wYWdlQ291bnQoKTsKKyAgICAgICAgICAgIGNvdW50ICs9IGl0LT52YWx1ZS0+
cGFnZUNvdW50KCk7CiAgICAgfQogICAgIAogICAgIGlmIChwYWdlWmVyb1Jvb3QpCkBAIC04OCw3
ICs4OCw3IEBAIHNpemVfdCBHbHlwaFBhZ2VUcmVlTm9kZTo6cGFnZUNvdW50KCkgY29uc3QKICAg
ICBzaXplX3QgY291bnQgPSBtX3BhZ2UgJiYgbV9wYWdlLT5vd25lcigpID09IHRoaXMgPyAxIDog
MDsKICAgICBIYXNoTWFwPGNvbnN0IEZvbnREYXRhKiwgR2x5cGhQYWdlVHJlZU5vZGUqPjo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gbV9jaGlsZHJlbi5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8Y29u
c3QgRm9udERhdGEqLCBHbHlwaFBhZ2VUcmVlTm9kZSo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1f
Y2hpbGRyZW4uYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBjb3VudCArPSBpdC0+
c2Vjb25kLT5wYWdlQ291bnQoKTsKKyAgICAgICAgY291bnQgKz0gaXQtPnZhbHVlLT5wYWdlQ291
bnQoKTsKIAogICAgIHJldHVybiBjb3VudDsKIH0KQEAgLTk5LDcgKzk5LDcgQEAgdm9pZCBHbHlw
aFBhZ2VUcmVlTm9kZTo6cHJ1bmVUcmVlQ3VzdG9tRm9udERhdGEoY29uc3QgRm9udERhdGEqIGZv
bnREYXRhKQogICAgIGlmIChyb290cykgewogICAgICAgICBIYXNoTWFwPGludCwgR2x5cGhQYWdl
VHJlZU5vZGUqPjo6aXRlcmF0b3IgZW5kID0gcm9vdHMtPmVuZCgpOwogICAgICAgICBmb3IgKEhh
c2hNYXA8aW50LCBHbHlwaFBhZ2VUcmVlTm9kZSo+OjppdGVyYXRvciBpdCA9IHJvb3RzLT5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBpdC0+c2Vjb25kLT5wcnVuZUN1c3Rv
bUZvbnREYXRhKGZvbnREYXRhKTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+cHJ1bmVDdXN0b21G
b250RGF0YShmb250RGF0YSk7CiAgICAgfQogICAgIAogICAgIGlmIChwYWdlWmVyb1Jvb3QpCkBA
IC0xMTEsNyArMTExLDcgQEAgdm9pZCBHbHlwaFBhZ2VUcmVlTm9kZTo6cHJ1bmVUcmVlRm9udERh
dGEoY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKQogICAgIGlmIChyb290cykgewogICAg
ICAgICBIYXNoTWFwPGludCwgR2x5cGhQYWdlVHJlZU5vZGUqPjo6aXRlcmF0b3IgZW5kID0gcm9v
dHMtPmVuZCgpOwogICAgICAgICBmb3IgKEhhc2hNYXA8aW50LCBHbHlwaFBhZ2VUcmVlTm9kZSo+
OjppdGVyYXRvciBpdCA9IHJvb3RzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAg
ICAgICBpdC0+c2Vjb25kLT5wcnVuZUZvbnREYXRhKGZvbnREYXRhKTsKKyAgICAgICAgICAgIGl0
LT52YWx1ZS0+cHJ1bmVGb250RGF0YShmb250RGF0YSk7CiAgICAgfQogICAgIAogICAgIGlmIChw
YWdlWmVyb1Jvb3QpCkBAIC0zNjIsNyArMzYyLDcgQEAgdm9pZCBHbHlwaFBhZ2VUcmVlTm9kZTo6
cHJ1bmVDdXN0b21Gb250RGF0YShjb25zdCBGb250RGF0YSogZm9udERhdGEpCiAgICAgICAgIHJl
dHVybjsKICAgICBIYXNoTWFwPGNvbnN0IEZvbnREYXRhKiwgR2x5cGhQYWdlVHJlZU5vZGUqPjo6
aXRlcmF0b3IgZW5kID0gbV9jaGlsZHJlbi5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8Y29uc3Qg
Rm9udERhdGEqLCBHbHlwaFBhZ2VUcmVlTm9kZSo+OjppdGVyYXRvciBpdCA9IG1fY2hpbGRyZW4u
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5wcnVuZUN1c3Rv
bUZvbnREYXRhKGZvbnREYXRhKTsKKyAgICAgICAgaXQtPnZhbHVlLT5wcnVuZUN1c3RvbUZvbnRE
YXRhKGZvbnREYXRhKTsKIH0KIAogdm9pZCBHbHlwaFBhZ2VUcmVlTm9kZTo6cHJ1bmVGb250RGF0
YShjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEsIHVuc2lnbmVkIGxldmVsKQpAQCAtMzc4
LDcgKzM3OCw3IEBAIHZvaWQgR2x5cGhQYWdlVHJlZU5vZGU6OnBydW5lRm9udERhdGEoY29uc3Qg
U2ltcGxlRm9udERhdGEqIGZvbnREYXRhLCB1bnNpZ25lZCBsCiAgICAgLy8gUHJ1bmUgYW55IGJy
YW5jaCB0aGF0IGNvbnRhaW5zIHRoaXMgRm9udERhdGEuCiAgICAgSGFzaE1hcDxjb25zdCBGb250
RGF0YSosIEdseXBoUGFnZVRyZWVOb2RlKj46Oml0ZXJhdG9yIGNoaWxkID0gbV9jaGlsZHJlbi5m
aW5kKGZvbnREYXRhKTsKICAgICBpZiAoY2hpbGQgIT0gbV9jaGlsZHJlbi5lbmQoKSkgewotICAg
ICAgICBHbHlwaFBhZ2VUcmVlTm9kZSogbm9kZSA9IGNoaWxkLT5zZWNvbmQ7CisgICAgICAgIEds
eXBoUGFnZVRyZWVOb2RlKiBub2RlID0gY2hpbGQtPnZhbHVlOwogICAgICAgICBtX2NoaWxkcmVu
LnJlbW92ZShmb250RGF0YSk7CiAgICAgICAgIHVuc2lnbmVkIGN1c3RvbUZvbnRDb3VudCA9IG5v
ZGUtPm1fY3VzdG9tRm9udENvdW50OwogICAgICAgICBkZWxldGUgbm9kZTsKQEAgLTM5NCw3ICsz
OTQsNyBAQCB2b2lkIEdseXBoUGFnZVRyZWVOb2RlOjpwcnVuZUZvbnREYXRhKGNvbnN0IFNpbXBs
ZUZvbnREYXRhKiBmb250RGF0YSwgdW5zaWduZWQgbAogCiAgICAgSGFzaE1hcDxjb25zdCBGb250
RGF0YSosIEdseXBoUGFnZVRyZWVOb2RlKj46Oml0ZXJhdG9yIGVuZCA9IG1fY2hpbGRyZW4uZW5k
KCk7CiAgICAgZm9yIChIYXNoTWFwPGNvbnN0IEZvbnREYXRhKiwgR2x5cGhQYWdlVHJlZU5vZGUq
Pjo6aXRlcmF0b3IgaXQgPSBtX2NoaWxkcmVuLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAg
ICAgICAgaXQtPnNlY29uZC0+cHJ1bmVGb250RGF0YShmb250RGF0YSwgbGV2ZWwpOworICAgICAg
ICBpdC0+dmFsdWUtPnBydW5lRm9udERhdGEoZm9udERhdGEsIGxldmVsKTsKIH0KIAogI2lmbmRl
ZiBOREVCVUcKQEAgLTQwNiw4ICs0MDYsOCBAQCB2b2lkIEdseXBoUGFnZVRyZWVOb2RlOjpwcnVu
ZUZvbnREYXRhKGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwgdW5zaWduZWQgbAogCiAg
ICAgICAgIEhhc2hNYXA8Y29uc3QgRm9udERhdGEqLCBHbHlwaFBhZ2VUcmVlTm9kZSo+OjppdGVy
YXRvciBlbmQgPSBtX2NoaWxkcmVuLmVuZCgpOwogICAgICAgICBmb3IgKEhhc2hNYXA8Y29uc3Qg
Rm9udERhdGEqLCBHbHlwaFBhZ2VUcmVlTm9kZSo+OjppdGVyYXRvciBpdCA9IG1fY2hpbGRyZW4u
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBwcmludGYoIiVzXHQlcCAl
c1xuIiwgaW5kZW50LmRhdGEoKSwgaXQtPmZpcnN0LCBpdC0+Zmlyc3QtPmRlc2NyaXB0aW9uKCku
dXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLT5zaG93U3VidHJlZSgpOwor
ICAgICAgICAgICAgcHJpbnRmKCIlc1x0JXAgJXNcbiIsIGluZGVudC5kYXRhKCksIGl0LT5rZXks
IGl0LT5rZXktPmRlc2NyaXB0aW9uKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBpdC0+
dmFsdWUtPnNob3dTdWJ0cmVlKCk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKG1fc3lzdGVtRmFs
bGJhY2tDaGlsZCkgewogICAgICAgICAgICAgcHJpbnRmKCIlc1x0KiBmYWxsYmFja1xuIiwgaW5k
ZW50LmRhdGEoKSk7CkBAIC00MjUsOCArNDI1LDggQEAgdm9pZCBzaG93R2x5cGhQYWdlVHJlZXMo
KQogICAgIHNob3dHbHlwaFBhZ2VUcmVlKDApOwogICAgIEhhc2hNYXA8aW50LCBXZWJDb3JlOjpH
bHlwaFBhZ2VUcmVlTm9kZSo+OjppdGVyYXRvciBlbmQgPSBXZWJDb3JlOjpHbHlwaFBhZ2VUcmVl
Tm9kZTo6cm9vdHMtPmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDxpbnQsIFdlYkNvcmU6OkdseXBo
UGFnZVRyZWVOb2RlKj46Oml0ZXJhdG9yIGl0ID0gV2ViQ29yZTo6R2x5cGhQYWdlVHJlZU5vZGU6
OnJvb3RzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgcHJpbnRmKCJcblBh
Z2UgJWQ6XG4iLCBpdC0+Zmlyc3QpOwotICAgICAgICBzaG93R2x5cGhQYWdlVHJlZShpdC0+Zmly
c3QpOworICAgICAgICBwcmludGYoIlxuUGFnZSAlZDpcbiIsIGl0LT5rZXkpOworICAgICAgICBz
aG93R2x5cGhQYWdlVHJlZShpdC0+a2V5KTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlLmNwcAppbmRleCA1
ODQzMmNlYWUzZGZhY2MxZGVjZjY2ZjMxNTkzZTkyNjg1ZjZkMzVmLi40NDU1ZGEzYjQ3MWQyZTFj
MjQwODE0N2M2OTYxMjI4MGEzMWIwY2M0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmUuY3BwCkBAIC0xMTIsOSArMTEyLDkg
QEAgdm9pZCBUaWxlZEJhY2tpbmdTdG9yZTo6dXBkYXRlVGlsZUJ1ZmZlcnMoKQogICAgIFZlY3Rv
cjxSZWZQdHI8VGlsZT4gPiBkaXJ0eVRpbGVzOwogICAgIFRpbGVNYXA6Oml0ZXJhdG9yIGVuZCA9
IG1fdGlsZXMuZW5kKCk7CiAgICAgZm9yIChUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZXMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmICghaXQtPnNlY29uZC0+aXNE
aXJ0eSgpKQorICAgICAgICBpZiAoIWl0LT52YWx1ZS0+aXNEaXJ0eSgpKQogICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIGRpcnR5VGlsZXMuYXBwZW5kKGl0LT5zZWNvbmQpOworICAgICAg
ICBkaXJ0eVRpbGVzLmFwcGVuZChpdC0+dmFsdWUpOwogICAgIH0KIAogICAgIGlmIChkaXJ0eVRp
bGVzLmlzRW1wdHkoKSkgewpAQCAtMzk3LDEzICszOTcsMTMgQEAgYm9vbCBUaWxlZEJhY2tpbmdT
dG9yZTo6cmVzaXplRWRnZVRpbGVzKCkKICAgICBWZWN0b3I8VGlsZTo6Q29vcmRpbmF0ZT4gdGls
ZXNUb1JlbW92ZTsKICAgICBUaWxlTWFwOjppdGVyYXRvciBlbmQgPSBtX3RpbGVzLmVuZCgpOwog
ICAgIGZvciAoVGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewotICAgICAgICBUaWxlOjpDb29yZGluYXRlIHRpbGVDb29yZGluYXRlID0gaXQt
PnNlY29uZC0+Y29vcmRpbmF0ZSgpOwotICAgICAgICBJbnRSZWN0IHRpbGVSZWN0ID0gaXQtPnNl
Y29uZC0+cmVjdCgpOworICAgICAgICBUaWxlOjpDb29yZGluYXRlIHRpbGVDb29yZGluYXRlID0g
aXQtPnZhbHVlLT5jb29yZGluYXRlKCk7CisgICAgICAgIEludFJlY3QgdGlsZVJlY3QgPSBpdC0+
dmFsdWUtPnJlY3QoKTsKICAgICAgICAgSW50UmVjdCBleHBlY3RlZFRpbGVSZWN0ID0gdGlsZVJl
Y3RGb3JDb29yZGluYXRlKHRpbGVDb29yZGluYXRlKTsKICAgICAgICAgaWYgKGV4cGVjdGVkVGls
ZVJlY3QuaXNFbXB0eSgpKQogICAgICAgICAgICAgdGlsZXNUb1JlbW92ZS5hcHBlbmQodGlsZUNv
b3JkaW5hdGUpOwogICAgICAgICBlbHNlIGlmIChleHBlY3RlZFRpbGVSZWN0ICE9IHRpbGVSZWN0
KSB7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLT5yZXNpemUoZXhwZWN0ZWRUaWxlUmVjdC5zaXpl
KCkpOworICAgICAgICAgICAgaXQtPnZhbHVlLT5yZXNpemUoZXhwZWN0ZWRUaWxlUmVjdC5zaXpl
KCkpOwogICAgICAgICAgICAgd2FzUmVzaXplZCA9IHRydWU7CiAgICAgICAgIH0KICAgICB9CkBA
IC00MjIsOCArNDIyLDggQEAgdm9pZCBUaWxlZEJhY2tpbmdTdG9yZTo6c2V0S2VlcFJlY3QoY29u
c3QgSW50UmVjdCYga2VlcFJlY3QpCiAgICAgVmVjdG9yPFRpbGU6OkNvb3JkaW5hdGU+IHRvUmVt
b3ZlOwogICAgIFRpbGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fdGlsZXMuZW5kKCk7CiAgICAgZm9y
IChUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7Ci0gICAgICAgIFRpbGU6OkNvb3JkaW5hdGUgY29vcmRpbmF0ZSA9IGl0LT5zZWNvbmQtPmNv
b3JkaW5hdGUoKTsKLSAgICAgICAgRmxvYXRSZWN0IHRpbGVSZWN0ID0gaXQtPnNlY29uZC0+cmVj
dCgpOworICAgICAgICBUaWxlOjpDb29yZGluYXRlIGNvb3JkaW5hdGUgPSBpdC0+dmFsdWUtPmNv
b3JkaW5hdGUoKTsKKyAgICAgICAgRmxvYXRSZWN0IHRpbGVSZWN0ID0gaXQtPnZhbHVlLT5yZWN0
KCk7CiAgICAgICAgIGlmICghdGlsZVJlY3QuaW50ZXJzZWN0cyhrZWVwUmVjdEYpKQogICAgICAg
ICAgICAgdG9SZW1vdmUuYXBwZW5kKGNvb3JkaW5hdGUpOwogICAgIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9jZi9NZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb25DRi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9hdmZvdW5kYXRpb24vY2YvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0YuY3Bw
CmluZGV4IDg3NWQxMmRmYmU3YmI0MjIxYmU3NTUyNGY4MWFjZDIwN2NhM2E3ODAuLjAzNmQ4ZjMy
NmMwYmY1YzJjODc1YTQ0YmIxNDA4MGE4NjRiZGY0MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9jZi9NZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb25DRi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YXZmb3VuZGF0aW9uL2NmL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGLmNwcApAQCAt
OTEyLDcgKzkxMiw3IEBAIEFWRldyYXBwZXIqIEFWRldyYXBwZXI6OmF2ZldyYXBwZXJGb3JDYWxs
YmFja0NvbnRleHQodm9pZCogY29udGV4dCkKICAgICBpZiAoaXQgPT0gbWFwKCkuZW5kKCkpCiAg
ICAgICAgIHJldHVybiAwOwogCi0gICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgcmV0dXJuIGl0
LT52YWx1ZTsKIH0KIAogdm9pZCBBVkZXcmFwcGVyOjpzY2hlZHVsZURpc2Nvbm5lY3RBbmREZWxl
dGUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2ti
ZXJyeS9MYXllclRpbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Js
YWNrYmVycnkvTGF5ZXJUaWxlci5jcHAKaW5kZXggZDUxN2FhYTdiNDAyNDQ4OTMyZGQ0MmJmOWRh
YjQwZDEwMmE4ZDJjNC4uZjRjYmY0Nzc4Yjg5NzAzZmJmNjAxZTQwY2RlYjIyMTA4Njg3YTI0NyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9M
YXllclRpbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFj
a2JlcnJ5L0xheWVyVGlsZXIuY3BwCkBAIC0zODAsMTkgKzM4MCwxOSBAQCB2b2lkIExheWVyVGls
ZXI6OnVwbG9hZFRleHR1cmVzSWZOZWVkZWQoKQogICAgIGZvciAoVGlsZUpvYnNNYXA6OmNvbnN0
X2l0ZXJhdG9yIHRpbGVKb2JzSXRlciA9IHRpbGVKb2JzTWFwLmJlZ2luKCk7IHRpbGVKb2JzSXRl
ciAhPSB0aWxlSm9ic0l0ZXJFbmQ7ICsrdGlsZUpvYnNJdGVyKSB7CiAgICAgICAgIEludFBvaW50
IG9yaWdpbiA9IG9yaWdpbk9mVGlsZSh0aWxlSm9ic0l0ZXItPmZpcnN0KTsKIAotICAgICAgICBM
YXllclRpbGUqIHRpbGUgPSBtX3RpbGVzQ29tcG9zaXRpbmdUaHJlYWQuZ2V0KHRpbGVKb2JzSXRl
ci0+Zmlyc3QpOworICAgICAgICBMYXllclRpbGUqIHRpbGUgPSBtX3RpbGVzQ29tcG9zaXRpbmdU
aHJlYWQuZ2V0KHRpbGVKb2JzSXRlci0+a2V5KTsKICAgICAgICAgaWYgKCF0aWxlKSB7CiAgICAg
ICAgICAgICBpZiAob3JpZ2luLngoKSA+PSBtX3JlcXVpcmVkVGV4dHVyZVNpemUud2lkdGgoKSB8
fCBvcmlnaW4ueSgpID49IG1fcmVxdWlyZWRUZXh0dXJlU2l6ZS5oZWlnaHQoKSkKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIHRpbGUgPSBuZXcgTGF5ZXJUaWxlKCk7Ci0g
ICAgICAgICAgICBtX3RpbGVzQ29tcG9zaXRpbmdUaHJlYWQuYWRkKHRpbGVKb2JzSXRlci0+Zmly
c3QsIHRpbGUpOworICAgICAgICAgICAgbV90aWxlc0NvbXBvc2l0aW5nVGhyZWFkLmFkZCh0aWxl
Sm9ic0l0ZXItPmtleSwgdGlsZSk7CiAgICAgICAgIH0KIAogICAgICAgICBJbnRSZWN0IHRpbGVS
ZWN0KG9yaWdpbiwgdGlsZVNpemUoKSk7CiAgICAgICAgIHRpbGVSZWN0LnNldFdpZHRoKG1pbiht
X3JlcXVpcmVkVGV4dHVyZVNpemUud2lkdGgoKSAtIHRpbGVSZWN0LngoKSwgdGlsZVJlY3Qud2lk
dGgoKSkpOwogICAgICAgICB0aWxlUmVjdC5zZXRIZWlnaHQobWluKG1fcmVxdWlyZWRUZXh0dXJl
U2l6ZS5oZWlnaHQoKSAtIHRpbGVSZWN0LnkoKSwgdGlsZVJlY3QuaGVpZ2h0KCkpKTsKIAotICAg
ICAgICBwZXJmb3JtVGlsZUpvYih0aWxlLCAqdGlsZUpvYnNJdGVyLT5zZWNvbmQsIHRpbGVSZWN0
KTsKKyAgICAgICAgcGVyZm9ybVRpbGVKb2IodGlsZSwgKnRpbGVKb2JzSXRlci0+dmFsdWUsIHRp
bGVSZWN0KTsKICAgICB9CiAKICAgICBtX3RleHR1cmVKb2JzLmNsZWFyKCk7CkBAIC00MzUsMTEg
KzQzNSwxMSBAQCB2b2lkIExheWVyVGlsZXI6OmFkZFRpbGVKb2IoY29uc3QgVGlsZUluZGV4JiBp
bmRleCwgY29uc3QgVGV4dHVyZUpvYiYgam9iLCBUaWxlSgogICAgICAgICByZXR1cm47CiAKICAg
ICAvLyBJbiB0aGlzIGNhc2Ugd2UgbGVhdmUgdGhlIHByZXZpb3VzIGpvYi4KLSAgICBpZiAoam9i
Lm1fdHlwZSA9PSBUZXh0dXJlSm9iOjpEaXJ0eUNvbnRlbnRzICYmIHJlc3VsdC5pdGVyYXRvci0+
c2Vjb25kLT5tX3R5cGUgPT0gVGV4dHVyZUpvYjo6RGlzY2FyZENvbnRlbnRzKQorICAgIGlmIChq
b2IubV90eXBlID09IFRleHR1cmVKb2I6OkRpcnR5Q29udGVudHMgJiYgcmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZS0+bV90eXBlID09IFRleHR1cmVKb2I6OkRpc2NhcmRDb250ZW50cykKICAgICAgICAg
cmV0dXJuOwogCiAgICAgLy8gT3ZlcnJpZGUgdGhlIHByZXZpb3VzIGpvYi4KLSAgICByZXN1bHQu
aXRlcmF0b3ItPnNlY29uZCA9ICZqb2I7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9ICZq
b2I7CiB9CiAKIHZvaWQgTGF5ZXJUaWxlcjo6cGVyZm9ybVRpbGVKb2IoTGF5ZXJUaWxlKiB0aWxl
LCBjb25zdCBUZXh0dXJlSm9iJiBqb2IsIGNvbnN0IEludFJlY3QmIHRpbGVSZWN0KQpAQCAtNzMz
LDcgKzczMyw3IEBAIHZvaWQgTGF5ZXJUaWxlcjo6YmluZENvbnRlbnRzVGV4dHVyZSgpCiAgICAg
aWYgKG1fdGlsZXNDb21wb3NpdGluZ1RocmVhZC5zaXplKCkgIT0gMSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgY29uc3QgTGF5ZXJUaWxlKiB0aWxlID0gbV90aWxlc0NvbXBvc2l0aW5nVGhyZWFk
LmJlZ2luKCktPnNlY29uZDsKKyAgICBjb25zdCBMYXllclRpbGUqIHRpbGUgPSBtX3RpbGVzQ29t
cG9zaXRpbmdUaHJlYWQuYmVnaW4oKS0+dmFsdWU7CiAKICAgICBBU1NFUlQodGlsZS0+aGFzVGV4
dHVyZSgpKTsKICAgICBpZiAoIXRpbGUtPmhhc1RleHR1cmUoKSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCmluZGV4
IGNmNDdiYTU5MDE2ZWM2MDdlMGZiNWNiM2ZhMWYyYTk4ZDUyYTAxZjQuLmEwZWQ1N2Q3OTRmYTAz
MWE2NWIwYmRiZTAzYThjOGVjMzdlNzNkZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcApAQCAtNDY3LDcgKzQ2
Nyw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjptb3ZlT3JDb3B5QW5pbWF0aW9ucyhNb3ZlT3JD
b3B5IG9wZXJhdGlvbiwgUGxhdGZvcm1DQUxheWVyCiAgICAgLy8gTG9vayBmb3IgcnVubmluZyBh
bmltYXRpb25zIGFmZmVjdGluZyB0aGlzIHByb3BlcnR5LgogICAgIEFuaW1hdGlvbnNNYXA6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IG1fcnVubmluZ0FuaW1hdGlvbnMuZW5kKCk7CiAgICAgZm9yIChB
bmltYXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fcnVubmluZ0FuaW1hdGlvbnMuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IFZlY3RvcjxMYXllclByb3Bl
cnR5QW5pbWF0aW9uPiYgcHJvcGVydHlBbmltYXRpb25zID0gaXQtPnNlY29uZDsKKyAgICAgICAg
Y29uc3QgVmVjdG9yPExheWVyUHJvcGVydHlBbmltYXRpb24+JiBwcm9wZXJ0eUFuaW1hdGlvbnMg
PSBpdC0+dmFsdWU7CiAgICAgICAgIHNpemVfdCBudW1BbmltYXRpb25zID0gcHJvcGVydHlBbmlt
YXRpb25zLnNpemUoKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1BbmltYXRp
b25zOyArK2kpIHsKICAgICAgICAgICAgIGNvbnN0IExheWVyUHJvcGVydHlBbmltYXRpb24mIGN1
cnJBbmltYXRpb24gPSBwcm9wZXJ0eUFuaW1hdGlvbnNbaV07CkBAIC02OTQsNyArNjk0LDcgQEAg
dm9pZCBHcmFwaGljc0xheWVyQ0E6OnBhdXNlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0
aW9uTmFtZSwgZG91YmxlIHRpbWVPZmYKIAogICAgIEFuaW1hdGlvbnNUb1Byb2Nlc3NNYXA6Oml0
ZXJhdG9yIGl0ID0gbV9hbmltYXRpb25zVG9Qcm9jZXNzLmZpbmQoYW5pbWF0aW9uTmFtZSk7CiAg
ICAgaWYgKGl0ICE9IG1fYW5pbWF0aW9uc1RvUHJvY2Vzcy5lbmQoKSkgewotICAgICAgICBBbmlt
YXRpb25Qcm9jZXNzaW5nQWN0aW9uJiBwcm9jZXNzaW5nSW5mbyA9IGl0LT5zZWNvbmQ7CisgICAg
ICAgIEFuaW1hdGlvblByb2Nlc3NpbmdBY3Rpb24mIHByb2Nlc3NpbmdJbmZvID0gaXQtPnZhbHVl
OwogICAgICAgICAvLyBJZiBhbiBhbmltYXRpb24gaXMgc2NoZWR1bGVkIHRvIGJlIHJlbW92ZWQs
IGRvbid0IGNoYW5nZSB0aGUgcmVtb3ZlIHRvIGEgcGF1c2UuCiAgICAgICAgIGlmIChwcm9jZXNz
aW5nSW5mby5hY3Rpb24gIT0gUmVtb3ZlKQogICAgICAgICAgICAgcHJvY2Vzc2luZ0luZm8uYWN0
aW9uID0gUGF1c2U7CkBAIC04MjksNyArODI5LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6Omxh
eWVyRGlkRGlzcGxheShQbGF0Zm9ybUxheWVyKiBsYXllcikKICAgICBpZiAobGF5ZXJDbG9uZU1h
cCkgewogICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1h
cC0+ZW5kKCk7CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5
ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBQbGF0
Zm9ybUNBTGF5ZXIqIGN1cnJDbG9uZSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBQ
bGF0Zm9ybUNBTGF5ZXIqIGN1cnJDbG9uZSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAg
IGlmICghY3VyckNsb25lKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCkBAIC0xMTcxLDEw
ICsxMTcxLDEwIEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVHZW9tZXRyeShmbG9hdCBw
YWdlU2NhbGVGYWN0b3IsIGNvbnN0IEZsb2F0UG9pbnQmIHBvCiAgICAgICAgIGlmIChMYXllck1h
cCogbGF5ZXJDbG9uZU1hcCA9IG1fc3RydWN0dXJhbExheWVyQ2xvbmVzLmdldCgpKSB7CiAgICAg
ICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5k
KCk7CiAgICAgICAgICAgICBmb3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGxheWVy
Q2xvbmVNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgICAgIFBs
YXRmb3JtQ0FMYXllciogY2xvbmUgPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgICAg
IFBsYXRmb3JtQ0FMYXllciogY2xvbmUgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICAg
ICAgRmxvYXRQb2ludCBjbG9uZVBvc2l0aW9uID0gbGF5ZXJQb3NpdGlvbjsKIAotICAgICAgICAg
ICAgICAgIGlmIChtX3JlcGxpY2FMYXllciAmJiBpc1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQtPmZp
cnN0KSkgeworICAgICAgICAgICAgICAgIGlmIChtX3JlcGxpY2FMYXllciAmJiBpc1JlcGxpY2F0
ZWRSb290Q2xvbmUoaXQtPmtleSkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gTWFpbnRhaW4g
dGhlIHNwZWNpYWwtY2FzZSBwb3NpdGlvbiBmb3IgdGhlIHJvb3Qgb2YgYSBjbG9uZSBzdWJ0cmVl
LAogICAgICAgICAgICAgICAgICAgICAvLyB3aGljaCB3ZSBzZXQgdXAgaW4gcmVwbGljYXRlZExh
eWVyUm9vdCgpLgogICAgICAgICAgICAgICAgICAgICBjbG9uZVBvc2l0aW9uID0gcG9zaXRpb25G
b3JDbG9uZVJvb3RMYXllcigpOwpAQCAtMTE5OCwxMCArMTE5OCwxMCBAQCB2b2lkIEdyYXBoaWNz
TGF5ZXJDQTo6dXBkYXRlR2VvbWV0cnkoZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBjb25zdCBGbG9h
dFBvaW50JiBwbwogICAgIGlmIChMYXllck1hcCogbGF5ZXJDbG9uZU1hcCA9IG1fbGF5ZXJDbG9u
ZXMuZ2V0KCkpIHsKICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxheWVy
Q2xvbmVNYXAtPmVuZCgpOwogICAgICAgICBmb3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IGxheWVyQ2xvbmVNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAg
ICAgUGxhdGZvcm1DQUxheWVyKiBjbG9uZSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAg
ICBQbGF0Zm9ybUNBTGF5ZXIqIGNsb25lID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAgICAg
RmxvYXRQb2ludCBjbG9uZVBvc2l0aW9uID0gYWRqdXN0ZWRQb3NpdGlvbjsKIAotICAgICAgICAg
ICAgaWYgKCFtX3N0cnVjdHVyYWxMYXllciAmJiBtX3JlcGxpY2FMYXllciAmJiBpc1JlcGxpY2F0
ZWRSb290Q2xvbmUoaXQtPmZpcnN0KSkgeworICAgICAgICAgICAgaWYgKCFtX3N0cnVjdHVyYWxM
YXllciAmJiBtX3JlcGxpY2FMYXllciAmJiBpc1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQtPmtleSkp
IHsKICAgICAgICAgICAgICAgICAvLyBNYWludGFpbiB0aGUgc3BlY2lhbC1jYXNlIHBvc2l0aW9u
IGZvciB0aGUgcm9vdCBvZiBhIGNsb25lIHN1YnRyZWUsCiAgICAgICAgICAgICAgICAgLy8gd2hp
Y2ggd2Ugc2V0IHVwIGluIHJlcGxpY2F0ZWRMYXllclJvb3QoKS4KICAgICAgICAgICAgICAgICBj
bG9uZVBvc2l0aW9uID0gcG9zaXRpb25Gb3JDbG9uZVJvb3RMYXllcigpOwpAQCAtMTIyMSw4ICsx
MjIxLDggQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZVRyYW5zZm9ybSgpCiAgICAgaWYg
KExheWVyTWFwKiBsYXllckNsb25lTWFwID0gcHJpbWFyeUxheWVyQ2xvbmVzKCkpIHsKICAgICAg
ICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxheWVyQ2xvbmVNYXAtPmVuZCgpOwog
ICAgICAgICBmb3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGxheWVyQ2xvbmVNYXAt
PmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgUGxhdGZvcm1DQUxheWVy
KiBjdXJyTGF5ZXIgPSBpdC0+c2Vjb25kLmdldCgpOwotICAgICAgICAgICAgaWYgKG1fcmVwbGlj
YUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9uZShpdC0+Zmlyc3QpKSB7CisgICAgICAgICAg
ICBQbGF0Zm9ybUNBTGF5ZXIqIGN1cnJMYXllciA9IGl0LT52YWx1ZS5nZXQoKTsKKyAgICAgICAg
ICAgIGlmIChtX3JlcGxpY2FMYXllciAmJiBpc1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQtPmtleSkp
IHsKICAgICAgICAgICAgICAgICAvLyBNYWludGFpbiB0aGUgc3BlY2lhbC1jYXNlIHRyYW5zZm9y
bSBmb3IgdGhlIHJvb3Qgb2YgYSBjbG9uZSBzdWJ0cmVlLAogICAgICAgICAgICAgICAgIC8vIHdo
aWNoIHdlIHNldCB1cCBpbiByZXBsaWNhdGVkTGF5ZXJSb290KCkuCiAgICAgICAgICAgICAgICAg
Y3VyckxheWVyLT5zZXRUcmFuc2Zvcm0oVHJhbnNmb3JtYXRpb25NYXRyaXgoKSk7CkBAIC0xMjM5
LDcgKzEyMzksNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlQ2hpbGRyZW5UcmFuc2Zv
cm0oKQogICAgIGlmIChMYXllck1hcCogbGF5ZXJDbG9uZU1hcCA9IHByaW1hcnlMYXllckNsb25l
cygpKSB7CiAgICAgICAgIExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBsYXllckNsb25l
TWFwLT5lbmQoKTsKICAgICAgICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBs
YXllckNsb25lTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBpdC0+
c2Vjb25kLT5zZXRTdWJsYXllclRyYW5zZm9ybShtX2NoaWxkcmVuVHJhbnNmb3JtKTsKKyAgICAg
ICAgICAgIGl0LT52YWx1ZS0+c2V0U3VibGF5ZXJUcmFuc2Zvcm0obV9jaGlsZHJlblRyYW5zZm9y
bSk7CiAgICAgfQogfQogCkBAIC0xMjUwLDcgKzEyNTAsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJD
QTo6dXBkYXRlTWFza3NUb0JvdW5kcygpCiAgICAgaWYgKExheWVyTWFwKiBsYXllckNsb25lTWFw
ID0gbV9sYXllckNsb25lcy5nZXQoKSkgewogICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KQotICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0TWFza3NUb0JvdW5kcyhtX21hc2tzVG9Cb3Vu
ZHMpOworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRNYXNrc1RvQm91bmRzKG1fbWFza3NUb0Jv
dW5kcyk7CiAgICAgfQogCiAgICAgdXBkYXRlRGVidWdJbmRpY2F0b3JzKCk7CkBAIC0xMjY4LDcg
KzEyNjgsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlQ29udGVudHNWaXNpYmlsaXR5
KCkKICAgICAgICAgaWYgKExheWVyTWFwKiBsYXllckNsb25lTWFwID0gbV9sYXllckNsb25lcy5n
ZXQoKSkgewogICAgICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxheWVy
Q2xvbmVNYXAtPmVuZCgpOwogICAgICAgICAgICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBsYXllckNsb25lTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAg
ICAgICAgICAgaXQtPnNlY29uZC0+c2V0Q29udGVudHMoMCk7CisgICAgICAgICAgICAgICAgaXQt
PnZhbHVlLT5zZXRDb250ZW50cygwKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTEyODAsNyAr
MTI4MCw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVDb250ZW50c09wYXF1ZSgpCiAg
ICAgaWYgKExheWVyTWFwKiBsYXllckNsb25lTWFwID0gbV9sYXllckNsb25lcy5nZXQoKSkgewog
ICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5k
KCk7CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9u
ZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgaXQtPnNlY29uZC0+
c2V0T3BhcXVlKG1fY29udGVudHNPcGFxdWUpOworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRP
cGFxdWUobV9jb250ZW50c09wYXF1ZSk7CiAgICAgfQogfQogCkBAIC0xMjkyLDcgKzEyOTIsNyBA
QCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlQmFja2ZhY2VWaXNpYmlsaXR5KCkKICAgICAg
ICAgaWYgKExheWVyTWFwKiBsYXllckNsb25lTWFwID0gbV9zdHJ1Y3R1cmFsTGF5ZXJDbG9uZXMu
Z2V0KCkpIHsKICAgICAgICAgICAgIExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBsYXll
ckNsb25lTWFwLT5lbmQoKTsKICAgICAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAg
ICAgICAgICAgIGl0LT5zZWNvbmQtPnNldERvdWJsZVNpZGVkKG1fYmFja2ZhY2VWaXNpYmlsaXR5
KTsKKyAgICAgICAgICAgICAgICBpdC0+dmFsdWUtPnNldERvdWJsZVNpZGVkKG1fYmFja2ZhY2VW
aXNpYmlsaXR5KTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTMwMSw3ICsxMzAxLDcgQEAgdm9p
ZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUJhY2tmYWNlVmlzaWJpbGl0eSgpCiAgICAgaWYgKExh
eWVyTWFwKiBsYXllckNsb25lTWFwID0gbV9sYXllckNsb25lcy5nZXQoKSkgewogICAgICAgICBM
YXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAg
ICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0RG91Ymxl
U2lkZWQobV9iYWNrZmFjZVZpc2liaWxpdHkpOworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRE
b3VibGVTaWRlZChtX2JhY2tmYWNlVmlzaWJpbGl0eSk7CiAgICAgfQogfQogCkBAIC0xMzEzLDEw
ICsxMzEzLDEwIEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVGaWx0ZXJzKCkKICAgICBp
ZiAoTGF5ZXJNYXAqIGxheWVyQ2xvbmVNYXAgPSBwcmltYXJ5TGF5ZXJDbG9uZXMoKSkgewogICAg
ICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7
CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1h
cC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAobV9yZXBsaWNh
TGF5ZXIgJiYgaXNSZXBsaWNhdGVkUm9vdENsb25lKGl0LT5maXJzdCkpCisgICAgICAgICAgICBp
ZiAobV9yZXBsaWNhTGF5ZXIgJiYgaXNSZXBsaWNhdGVkUm9vdENsb25lKGl0LT5rZXkpKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRGaWx0
ZXJzKG1fZmlsdGVycyk7CisgICAgICAgICAgICBpdC0+dmFsdWUtPnNldEZpbHRlcnMobV9maWx0
ZXJzKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTE0MDQsNyArMTQwNCw3IEBAIHZvaWQgR3Jh
cGhpY3NMYXllckNBOjplbnN1cmVTdHJ1Y3R1cmFsTGF5ZXIoU3RydWN0dXJhbExheWVyUHVycG9z
ZSBwdXJwb3NlLCBmbG9hCiAgICAgaWYgKG1fbGF5ZXJDbG9uZXMpIHsKICAgICAgICAgTGF5ZXJN
YXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fbGF5ZXJDbG9uZXMtPmVuZCgpOwogICAgICAgICBm
b3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fbGF5ZXJDbG9uZXMtPmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgUGxhdGZvcm1DQUxheWVyKiBjdXJyTGF5
ZXIgPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgUGxhdGZvcm1DQUxheWVyKiBjdXJy
TGF5ZXIgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBjdXJyTGF5ZXItPnNldFBvc2l0
aW9uKHBvaW50KTsKICAgICAgICAgICAgIGN1cnJMYXllci0+c2V0QW5jaG9yUG9pbnQoYW5jaG9y
UG9pbnQpOwogICAgICAgICAgICAgY3VyckxheWVyLT5zZXRUcmFuc2Zvcm0oVHJhbnNmb3JtYXRp
b25NYXRyaXgoKSk7CkBAIC0xNDQ5LDcgKzE0NDksNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6
dXBkYXRlTGF5ZXJEcmF3c0NvbnRlbnQoZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBjb25zdCBGbG9h
dAogICAgICAgICBpZiAobV9sYXllckNsb25lcykgewogICAgICAgICAgICAgTGF5ZXJNYXA6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IG1fbGF5ZXJDbG9uZXMtPmVuZCgpOwogICAgICAgICAgICAgZm9y
IChMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2xheWVyQ2xvbmVzLT5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0Q29udGVudHMo
MCk7CisgICAgICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRDb250ZW50cygwKTsKICAgICAgICAg
fQogICAgIH0KICAgICB1cGRhdGVEZWJ1Z0luZGljYXRvcnMoKTsKQEAgLTE1MDIsNyArMTUwMiw3
IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVDb250ZW50c0ltYWdlKCkKICAgICAgICAg
aWYgKG1fY29udGVudHNMYXllckNsb25lcykgewogICAgICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IG1fY29udGVudHNMYXllckNsb25lcy0+ZW5kKCk7CiAgICAgICAgICAg
ICBmb3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fY29udGVudHNMYXllckNsb25l
cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgICAgIGl0LT5zZWNvbmQt
PnNldENvbnRlbnRzKG1fY29udGVudHNMYXllci0+Y29udGVudHMoKSk7CisgICAgICAgICAgICAg
ICAgaXQtPnZhbHVlLT5zZXRDb250ZW50cyhtX2NvbnRlbnRzTGF5ZXItPmNvbnRlbnRzKCkpOwog
ICAgICAgICB9CiAgICAgICAgIAogICAgICAgICB1cGRhdGVDb250ZW50c1JlY3QoKTsKQEAgLTE1
NDYsOCArMTU0Niw4IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVDb250ZW50c1JlY3Qo
KQogICAgIGlmIChtX2NvbnRlbnRzTGF5ZXJDbG9uZXMpIHsKICAgICAgICAgTGF5ZXJNYXA6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IG1fY29udGVudHNMYXllckNsb25lcy0+ZW5kKCk7CiAgICAgICAg
IGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9jb250ZW50c0xheWVyQ2xvbmVz
LT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNl
dFBvc2l0aW9uKHBvaW50KTsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNldEJvdW5kcyhyZWN0
KTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+c2V0UG9zaXRpb24ocG9pbnQpOworICAgICAgICAg
ICAgaXQtPnZhbHVlLT5zZXRCb3VuZHMocmVjdCk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0x
NTYyLDggKzE1NjIsOCBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlTWFza0xheWVyKCkK
ICAgICBpZiAoTGF5ZXJNYXAqIGxheWVyQ2xvbmVNYXAgPSBtX2xheWVyQ2xvbmVzLmdldCgpKSB7
CiAgICAgICAgIExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBsYXllckNsb25lTWFwLT5l
bmQoKTsKICAgICAgICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXllckNs
b25lTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsgICAgICAgICAgICAKLSAgICAgICAg
ICAgIFBsYXRmb3JtQ0FMYXllciogbWFza0Nsb25lID0gbWFza0xheWVyQ2xvbmVNYXAgPyBtYXNr
TGF5ZXJDbG9uZU1hcC0+Z2V0KGl0LT5maXJzdCkuZ2V0KCkgOiAwOwotICAgICAgICAgICAgaXQt
PnNlY29uZC0+c2V0TWFzayhtYXNrQ2xvbmUpOworICAgICAgICAgICAgUGxhdGZvcm1DQUxheWVy
KiBtYXNrQ2xvbmUgPSBtYXNrTGF5ZXJDbG9uZU1hcCA/IG1hc2tMYXllckNsb25lTWFwLT5nZXQo
aXQtPmtleSkuZ2V0KCkgOiAwOworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRNYXNrKG1hc2tD
bG9uZSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0xNjI3LDEzICsxNjI3LDEzIEBAIHZvaWQg
R3JhcGhpY3NMYXllckNBOjp1cGRhdGVMYXllckFuaW1hdGlvbnMoKQogICAgIGlmIChtX2FuaW1h
dGlvbnNUb1Byb2Nlc3Muc2l6ZSgpKSB7CiAgICAgICAgIEFuaW1hdGlvbnNUb1Byb2Nlc3NNYXA6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fYW5pbWF0aW9uc1RvUHJvY2Vzcy5lbmQoKTsKICAgICAg
ICAgZm9yIChBbmltYXRpb25zVG9Qcm9jZXNzTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fYW5p
bWF0aW9uc1RvUHJvY2Vzcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAg
IGNvbnN0IFN0cmluZyYgY3VyckFuaW1hdGlvbk5hbWUgPSBpdC0+Zmlyc3Q7CisgICAgICAgICAg
ICBjb25zdCBTdHJpbmcmIGN1cnJBbmltYXRpb25OYW1lID0gaXQtPmtleTsKICAgICAgICAgICAg
IEFuaW1hdGlvbnNNYXA6Oml0ZXJhdG9yIGFuaW1hdGlvbkl0ID0gbV9ydW5uaW5nQW5pbWF0aW9u
cy5maW5kKGN1cnJBbmltYXRpb25OYW1lKTsKICAgICAgICAgICAgIGlmIChhbmltYXRpb25JdCA9
PSBtX3J1bm5pbmdBbmltYXRpb25zLmVuZCgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
Ci0gICAgICAgICAgICBjb25zdCBBbmltYXRpb25Qcm9jZXNzaW5nQWN0aW9uJiBwcm9jZXNzaW5n
SW5mbyA9IGl0LT5zZWNvbmQ7Ci0gICAgICAgICAgICBjb25zdCBWZWN0b3I8TGF5ZXJQcm9wZXJ0
eUFuaW1hdGlvbj4mIGFuaW1hdGlvbnMgPSBhbmltYXRpb25JdC0+c2Vjb25kOworICAgICAgICAg
ICAgY29uc3QgQW5pbWF0aW9uUHJvY2Vzc2luZ0FjdGlvbiYgcHJvY2Vzc2luZ0luZm8gPSBpdC0+
dmFsdWU7CisgICAgICAgICAgICBjb25zdCBWZWN0b3I8TGF5ZXJQcm9wZXJ0eUFuaW1hdGlvbj4m
IGFuaW1hdGlvbnMgPSBhbmltYXRpb25JdC0+dmFsdWU7CiAgICAgICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgICAgICBj
b25zdCBMYXllclByb3BlcnR5QW5pbWF0aW9uJiBjdXJyQW5pbWF0aW9uID0gYW5pbWF0aW9uc1tp
XTsKICAgICAgICAgICAgICAgICBzd2l0Y2ggKHByb2Nlc3NpbmdJbmZvLmFjdGlvbikgewpAQCAt
MTY2NSw3ICsxNjY1LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUxheWVyQW5pbWF0
aW9ucygpCiAgICAgICAgICAgICAgICAgYW5pbWF0aW9ucy5hcHBlbmQocGVuZGluZ0FuaW1hdGlv
bik7CiAgICAgICAgICAgICAgICAgbV9ydW5uaW5nQW5pbWF0aW9ucy5hZGQocGVuZGluZ0FuaW1h
dGlvbi5tX25hbWUsIGFuaW1hdGlvbnMpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBWZWN0b3I8TGF5ZXJQcm9wZXJ0eUFuaW1hdGlvbj4mIGFuaW1hdGlvbnMgPSBpdC0+
c2Vjb25kOworICAgICAgICAgICAgICAgIFZlY3RvcjxMYXllclByb3BlcnR5QW5pbWF0aW9uPiYg
YW5pbWF0aW9ucyA9IGl0LT52YWx1ZTsKICAgICAgICAgICAgICAgICBhbmltYXRpb25zLmFwcGVu
ZChwZW5kaW5nQW5pbWF0aW9uKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTY5MCwx
MSArMTY5MCwxMSBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c2V0QW5pbWF0aW9uT25MYXllcihQ
bGF0Zm9ybUNBQW5pbWF0aW9uKiBjYUFuaW0sIEFuaW1hdGVkUAogICAgICAgICBMYXllck1hcDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAo
TGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICAvLyBTa2lwIGltbWVkaWF0ZSByZXBsaWNhcywg
c2luY2UgdGhleSBtb3ZlIHdpdGggdGhlIG9yaWdpbmFsLgotICAgICAgICAgICAgaWYgKG1fcmVw
bGljYUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9uZShpdC0+Zmlyc3QpKQorICAgICAgICAg
ICAgaWYgKG1fcmVwbGljYUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9uZShpdC0+a2V5KSkK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgaXQtPnNlY29uZC0+cmVt
b3ZlQW5pbWF0aW9uRm9yS2V5KGFuaW1hdGlvbklEKTsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQt
PmFkZEFuaW1hdGlvbkZvcktleShhbmltYXRpb25JRCwgY2FBbmltKTsKKyAgICAgICAgICAgIGl0
LT52YWx1ZS0+cmVtb3ZlQW5pbWF0aW9uRm9yS2V5KGFuaW1hdGlvbklEKTsKKyAgICAgICAgICAg
IGl0LT52YWx1ZS0+YWRkQW5pbWF0aW9uRm9yS2V5KGFuaW1hdGlvbklELCBjYUFuaW0pOwogICAg
ICAgICB9CiAgICAgfQogfQpAQCAtMTcyOSwxMCArMTcyOSwxMCBAQCBib29sIEdyYXBoaWNzTGF5
ZXJDQTo6cmVtb3ZlQ0FBbmltYXRpb25Gcm9tTGF5ZXIoQW5pbWF0ZWRQcm9wZXJ0eUlEIHByb3Bl
cnR5LCBjbwogICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9u
ZU1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICAv
LyBTa2lwIGltbWVkaWF0ZSByZXBsaWNhcywgc2luY2UgdGhleSBtb3ZlIHdpdGggdGhlIG9yaWdp
bmFsLgotICAgICAgICAgICAgaWYgKG1fcmVwbGljYUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RD
bG9uZShpdC0+Zmlyc3QpKQorICAgICAgICAgICAgaWYgKG1fcmVwbGljYUxheWVyICYmIGlzUmVw
bGljYXRlZFJvb3RDbG9uZShpdC0+a2V5KSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAot
ICAgICAgICAgICAgaXQtPnNlY29uZCAtPnJlbW92ZUFuaW1hdGlvbkZvcktleShhbmltYXRpb25J
RCk7CisgICAgICAgICAgICBpdC0+dmFsdWUgLT5yZW1vdmVBbmltYXRpb25Gb3JLZXkoYW5pbWF0
aW9uSUQpOwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiB0cnVlOwpAQCAtMTc2MSw5ICsx
NzYxLDkgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnBhdXNlQ0FBbmltYXRpb25PbkxheWVyKEFu
aW1hdGVkUHJvcGVydHlJRCBwcm9wZXJ0eSwgY29uc3QKICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IGxheWVyQ2xvbmVNYXAtPmVuZCgpOwogICAgICAgICBmb3IgKExheWVy
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGxheWVyQ2xvbmVNYXAtPmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewogICAgICAgICAgICAgLy8gU2tpcCBpbW1lZGlhdGUgcmVwbGljYXMsIHNpbmNl
IHRoZXkgbW92ZSB3aXRoIHRoZSBvcmlnaW5hbC4KLSAgICAgICAgICAgIGlmIChtX3JlcGxpY2FM
YXllciAmJiBpc1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQtPmZpcnN0KSkKKyAgICAgICAgICAgIGlm
IChtX3JlcGxpY2FMYXllciAmJiBpc1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQtPmtleSkpCiAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLT5hZGRBbmltYXRp
b25Gb3JLZXkoYW5pbWF0aW9uSUQsIG5ld0FuaW0uZ2V0KCkpOworICAgICAgICAgICAgaXQtPnZh
bHVlLT5hZGRBbmltYXRpb25Gb3JLZXkoYW5pbWF0aW9uSUQsIG5ld0FuaW0uZ2V0KCkpOwogICAg
ICAgICB9CiAgICAgfQogfQpAQCAtMjI2Nyw4ICsyMjY3LDggQEAgdm9pZCBHcmFwaGljc0xheWVy
Q0E6OnN1c3BlbmRBbmltYXRpb25zKGRvdWJsZSB0aW1lKQogICAgIGlmIChMYXllck1hcCogbGF5
ZXJDbG9uZU1hcCA9IHByaW1hcnlMYXllckNsb25lcygpKSB7CiAgICAgICAgIExheWVyTWFwOjpj
b25zdF9pdGVyYXRvciBlbmQgPSBsYXllckNsb25lTWFwLT5lbmQoKTsKICAgICAgICAgZm9yIChM
YXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXllckNsb25lTWFwLT5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNldFNwZWVkKDApOwotICAg
ICAgICAgICAgaXQtPnNlY29uZC0+c2V0VGltZU9mZnNldCh0KTsKKyAgICAgICAgICAgIGl0LT52
YWx1ZS0+c2V0U3BlZWQoMCk7CisgICAgICAgICAgICBpdC0+dmFsdWUtPnNldFRpbWVPZmZzZXQo
dCk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0yMjgyLDggKzIyODIsOCBAQCB2b2lkIEdyYXBo
aWNzTGF5ZXJDQTo6cmVzdW1lQW5pbWF0aW9ucygpCiAgICAgaWYgKExheWVyTWFwKiBsYXllckNs
b25lTWFwID0gcHJpbWFyeUxheWVyQ2xvbmVzKCkpIHsKICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IGxheWVyQ2xvbmVNYXAtPmVuZCgpOwogICAgICAgICBmb3IgKExheWVy
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGxheWVyQ2xvbmVNYXAtPmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewotICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0U3BlZWQoMSk7Ci0gICAgICAg
ICAgICBpdC0+c2Vjb25kLT5zZXRUaW1lT2Zmc2V0KDApOworICAgICAgICAgICAgaXQtPnZhbHVl
LT5zZXRTcGVlZCgxKTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+c2V0VGltZU9mZnNldCgwKTsK
ICAgICAgICAgfQogICAgIH0KIH0KQEAgLTI0OTMsMTMgKzI0OTMsMTMgQEAgUGFzc1JlZlB0cjxQ
bGF0Zm9ybUNBTGF5ZXI+IEdyYXBoaWNzTGF5ZXJDQTo6ZmluZE9yTWFrZUNsb25lKENsb25lSUQg
Y2xvbmVJRCwgUGwKICAgICBMYXllck1hcDo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IGNsb25lcy0+
YWRkKGNsb25lSUQsIGR1bW15KTsKICAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5KSB7CiAg
ICAgICAgIC8vIFZhbHVlIHdhcyBub3QgYWRkZWQsIHNvIGl0IGV4aXN0cyBhbHJlYWR5LgotICAg
ICAgICByZXN1bHRMYXllciA9IGFkZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLmdldCgpOworICAg
ICAgICByZXN1bHRMYXllciA9IGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7CiAgICAg
fSBlbHNlIHsKICAgICAgICAgcmVzdWx0TGF5ZXIgPSBjbG9uZUxheWVyKHNvdXJjZUxheWVyLCBj
bG9uZUxldmVsKTsKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgIHJlc3VsdExheWVyLT5zZXROYW1l
KFN0cmluZzo6Zm9ybWF0KCJDbG9uZSAlZCBvZiBsYXllciAlcCIsIGNsb25lSURbMFVdLCBzb3Vy
Y2VMYXllci0+cGxhdGZvcm1MYXllcigpKSk7CiAjZW5kaWYKLSAgICAgICAgYWRkUmVzdWx0Lml0
ZXJhdG9yLT5zZWNvbmQgPSByZXN1bHRMYXllcjsKKyAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZSA9IHJlc3VsdExheWVyOwogICAgIH0KIAogICAgIHJldHVybiByZXN1bHRMYXllcjsK
QEAgLTI2OTEsOSArMjY5MSw5IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpzZXRPcGFjaXR5SW50
ZXJuYWwoZmxvYXQgYWNjdW11bGF0ZWRPcGFjaXR5KQogICAgIGlmIChsYXllckNsb25lTWFwKSB7
CiAgICAgICAgIExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBsYXllckNsb25lTWFwLT5l
bmQoKTsKICAgICAgICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXllckNs
b25lTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGlmIChtX3Jl
cGxpY2FMYXllciAmJiBpc1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQtPmZpcnN0KSkKKyAgICAgICAg
ICAgIGlmIChtX3JlcGxpY2FMYXllciAmJiBpc1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQtPmtleSkp
CiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRP
cGFjaXR5KG1fb3BhY2l0eSk7CisgICAgICAgICAgICBpdC0+dmFsdWUtPnNldE9wYWNpdHkobV9v
cGFjaXR5KTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTI3MDUsMTAgKzI3MDUsMTAgQEAgdm9p
ZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZU9wYWNpdHlPbkxheWVyKCkKICAgICBpZiAoTGF5ZXJN
YXAqIGxheWVyQ2xvbmVNYXAgPSBwcmltYXJ5TGF5ZXJDbG9uZXMoKSkgewogICAgICAgICBMYXll
ck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAgICAg
IGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAobV9yZXBsaWNhTGF5ZXIgJiYg
aXNSZXBsaWNhdGVkUm9vdENsb25lKGl0LT5maXJzdCkpCisgICAgICAgICAgICBpZiAobV9yZXBs
aWNhTGF5ZXIgJiYgaXNSZXBsaWNhdGVkUm9vdENsb25lKGl0LT5rZXkpKQogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRPcGFjaXR5KG1fb3Bh
Y2l0eSk7CisgICAgICAgICAgICBpdC0+dmFsdWUtPnNldE9wYWNpdHkobV9vcGFjaXR5KTsKICAg
ICAgICAgfQogICAgICAgICAKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYS9tYWMvVGlsZUNhY2hlLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2EvbWFjL1RpbGVDYWNoZS5tbQppbmRleCAwOTdkZmJmYzZjMDViNTdmYmU0
YmQyNzU5NWU4NWJjMDUwYzlhN2FmLi5lOWQ5Y2U0MGU4Njc1MTY0MDRjYjg3ZDg1MmVmMjdkMGU1
NDk0Y2JjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9t
YWMvVGlsZUNhY2hlLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
L21hYy9UaWxlQ2FjaGUubW0KQEAgLTE5MSw5ICsxOTEsOSBAQCB2b2lkIFRpbGVDYWNoZTo6c2V0
U2NhbGUoQ0dGbG9hdCBzY2FsZSkKICAgICByZXZhbGlkYXRlVGlsZXMoKTsKIAogICAgIGZvciAo
VGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCksIGVuZCA9IG1fdGls
ZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBbaXQtPnNlY29uZC5nZXQoKSBz
ZXRDb250ZW50c1NjYWxlOmRldmljZVNjYWxlRmFjdG9yXTsKKyAgICAgICAgW2l0LT52YWx1ZS5n
ZXQoKSBzZXRDb250ZW50c1NjYWxlOmRldmljZVNjYWxlRmFjdG9yXTsKIAotICAgICAgICBJbnRS
ZWN0IHRpbGVSZWN0ID0gcmVjdEZvclRpbGVJbmRleChpdC0+Zmlyc3QpOworICAgICAgICBJbnRS
ZWN0IHRpbGVSZWN0ID0gcmVjdEZvclRpbGVJbmRleChpdC0+a2V5KTsKICAgICAgICAgRmxvYXRS
ZWN0IHNjYWxlZFRpbGVSZWN0ID0gdGlsZVJlY3Q7CiAKICAgICAgICAgc2NhbGVkVGlsZVJlY3Qu
c2NhbGUoMSAvIG1fc2NhbGUpOwpAQCAtMjEzLDcgKzIxMyw3IEBAIHZvaWQgVGlsZUNhY2hlOjpz
ZXRBY2NlbGVyYXRlc0RyYXdpbmcoYm9vbCBhY2NlbGVyYXRlc0RyYXdpbmcpCiAgICAgbV9hY2Nl
bGVyYXRlc0RyYXdpbmcgPSBhY2NlbGVyYXRlc0RyYXdpbmc7CiAKICAgICBmb3IgKFRpbGVNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpLCBlbmQgPSBtX3RpbGVzLmVuZCgp
OyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIFtpdC0+c2Vjb25kLmdldCgpIHNldEFjY2VsZXJh
dGVzRHJhd2luZzptX2FjY2VsZXJhdGVzRHJhd2luZ107CisgICAgICAgIFtpdC0+dmFsdWUuZ2V0
KCkgc2V0QWNjZWxlcmF0ZXNEcmF3aW5nOm1fYWNjZWxlcmF0ZXNEcmF3aW5nXTsKICNlbHNlCiAg
ICAgVU5VU0VEX1BBUkFNKGFjY2VsZXJhdGVzRHJhd2luZyk7CiAjZW5kaWYKQEAgLTI0OSw3ICsy
NDksNyBAQCB2b2lkIFRpbGVDYWNoZTo6c2V0VGlsZURlYnVnQm9yZGVyV2lkdGgoZmxvYXQgYm9y
ZGVyV2lkdGgpCiAKICAgICBtX3RpbGVEZWJ1Z0JvcmRlcldpZHRoID0gYm9yZGVyV2lkdGg7CiAg
ICAgZm9yIChUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKSwgZW5k
ID0gbV90aWxlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBbaXQtPnNlY29uZC5n
ZXQoKSBzZXRCb3JkZXJXaWR0aDptX3RpbGVEZWJ1Z0JvcmRlcldpZHRoXTsKKyAgICAgICAgW2l0
LT52YWx1ZS5nZXQoKSBzZXRCb3JkZXJXaWR0aDptX3RpbGVEZWJ1Z0JvcmRlcldpZHRoXTsKIH0K
IAogdm9pZCBUaWxlQ2FjaGU6OnNldFRpbGVEZWJ1Z0JvcmRlckNvbG9yKENHQ29sb3JSZWYgYm9y
ZGVyQ29sb3IpCkBAIC0yNTksNyArMjU5LDcgQEAgdm9pZCBUaWxlQ2FjaGU6OnNldFRpbGVEZWJ1
Z0JvcmRlckNvbG9yKENHQ29sb3JSZWYgYm9yZGVyQ29sb3IpCiAKICAgICBtX3RpbGVEZWJ1Z0Jv
cmRlckNvbG9yID0gYm9yZGVyQ29sb3I7CiAgICAgZm9yIChUaWxlTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fdGlsZXMuYmVnaW4oKSwgZW5kID0gbV90aWxlcy5lbmQoKTsgaXQgIT0gZW5kOyAr
K2l0KQotICAgICAgICBbaXQtPnNlY29uZC5nZXQoKSBzZXRCb3JkZXJDb2xvcjptX3RpbGVEZWJ1
Z0JvcmRlckNvbG9yLmdldCgpXTsKKyAgICAgICAgW2l0LT52YWx1ZS5nZXQoKSBzZXRCb3JkZXJD
b2xvcjptX3RpbGVEZWJ1Z0JvcmRlckNvbG9yLmdldCgpXTsKIH0KIAogSW50UmVjdCBUaWxlQ2Fj
aGU6OmJvdW5kcygpIGNvbnN0CkBAIC0zMzQsOSArMzM0LDkgQEAgdm9pZCBUaWxlQ2FjaGU6OnJl
dmFsaWRhdGVUaWxlcygpCiAgICAgVmVjdG9yPFRpbGVJbmRleD4gdGlsZXNUb1JlbW92ZTsKIAog
ICAgIGZvciAoVGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCksIGVuZCA9IG1f
dGlsZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBjb25zdCBUaWxlSW5kZXgm
IHRpbGVJbmRleCA9IGl0LT5maXJzdDsKKyAgICAgICAgY29uc3QgVGlsZUluZGV4JiB0aWxlSW5k
ZXggPSBpdC0+a2V5OwogCi0gICAgICAgIFdlYlRpbGVMYXllciogdGlsZUxheWVyID0gaXQtPnNl
Y29uZC5nZXQoKTsKKyAgICAgICAgV2ViVGlsZUxheWVyKiB0aWxlTGF5ZXIgPSBpdC0+dmFsdWUu
Z2V0KCk7CiAKICAgICAgICAgaWYgKCFyZWN0Rm9yVGlsZUluZGV4KHRpbGVJbmRleCkuaW50ZXJz
ZWN0cyh0aWxlQ292ZXJhZ2VSZWN0KSkgewogICAgICAgICAgICAgLy8gUmVtb3ZlIHRoaXMgbGF5
ZXIuCkBAIC0zNjQsNyArMzY0LDcgQEAgdm9pZCBUaWxlQ2FjaGU6OnJldmFsaWRhdGVUaWxlcygp
CiAgICAgICAgICAgICBUaWxlSW5kZXggdGlsZUluZGV4KHgsIHkpOwogCiAgICAgICAgICAgICBJ
bnRSZWN0IHRpbGVSZWN0ID0gcmVjdEZvclRpbGVJbmRleCh0aWxlSW5kZXgpOwotICAgICAgICAg
ICAgUmV0YWluUHRyPFdlYlRpbGVMYXllcj4mIHRpbGVMYXllciA9IG1fdGlsZXMuYWRkKHRpbGVJ
bmRleCwgMCkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgICAgIFJldGFpblB0cjxXZWJUaWxl
TGF5ZXI+JiB0aWxlTGF5ZXIgPSBtX3RpbGVzLmFkZCh0aWxlSW5kZXgsIDApLml0ZXJhdG9yLT52
YWx1ZTsKICAgICAgICAgICAgIGlmICghdGlsZUxheWVyKSB7CiAgICAgICAgICAgICAgICAgdGls
ZUxheWVyID0gY3JlYXRlVGlsZUxheWVyKHRpbGVSZWN0KTsKICAgICAgICAgICAgICAgICBbbV90
aWxlQ29udGFpbmVyTGF5ZXIuZ2V0KCkgYWRkU3VibGF5ZXI6dGlsZUxheWVyLmdldCgpXTsKQEAg
LTM4Myw3ICszODMsNyBAQCB2b2lkIFRpbGVDYWNoZTo6cmV2YWxpZGF0ZVRpbGVzKCkKIAogICAg
IG1fdGlsZUNvdmVyYWdlUmVjdCA9IEludFJlY3QoKTsKICAgICBmb3IgKFRpbGVNYXA6Oml0ZXJh
dG9yIGl0ID0gbV90aWxlcy5iZWdpbigpLCBlbmQgPSBtX3RpbGVzLmVuZCgpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKLSAgICAgICAgY29uc3QgVGlsZUluZGV4JiB0aWxlSW5kZXggPSBpdC0+Zmlyc3Q7
CisgICAgICAgIGNvbnN0IFRpbGVJbmRleCYgdGlsZUluZGV4ID0gaXQtPmtleTsKIAogICAgICAg
ICBtX3RpbGVDb3ZlcmFnZVJlY3QudW5pdGUocmVjdEZvclRpbGVJbmRleCh0aWxlSW5kZXgpKTsK
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93
aW4vUGxhdGZvcm1DQUxheWVyV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwCmluZGV4IDQ4YjIwZDBiOGJkMjQyYWI1
NDliOGZlNDQyZGY0NGFiMzY3MmViODUuLjcwMTY4YjIxMDRkYjM2OWRhMDc1N2ExMTQ0NjIyMTEx
YmMzMDYxZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
L3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwCkBAIC0xNjcsNyArMTY3LDcg
QEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OmFuaW1hdGlvblN0YXJ0ZWQoQ0ZUaW1lSW50ZXJ2YWwg
YmVnaW5UaW1lKQogCiAgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0
aW9uPiA+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2FuaW1hdGlvbnMuZW5kKCk7CiAgICAgZm9y
IChIYXNoTWFwPFN0cmluZywgUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+ID46OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbV9hbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAg
ICAgaXQtPnNlY29uZC0+c2V0QWN0dWFsU3RhcnRUaW1lSWZOZWVkZWQoY2FjZkJlZ2luVGltZSk7
CisgICAgICAgIGl0LT52YWx1ZS0+c2V0QWN0dWFsU3RhcnRUaW1lSWZOZWVkZWQoY2FjZkJlZ2lu
VGltZSk7CiAKICAgICBpZiAobV9vd25lcikKICAgICAgICAgbV9vd25lci0+cGxhdGZvcm1DQUxh
eWVyQW5pbWF0aW9uU3RhcnRlZChiZWdpblRpbWUpOwpAQCAtMTc3LDggKzE3Nyw4IEBAIHN0YXRp
YyB2b2lkIHJlc3VibWl0QWxsQW5pbWF0aW9ucyhQbGF0Zm9ybUNBTGF5ZXIqIGxheWVyKQogewog
ICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8UGxhdGZvcm1DQUFuaW1hdGlvbj4gPjo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gbGF5ZXItPmFuaW1hdGlvbnMoKS5lbmQoKTsKICAgICBmb3IgKEhhc2hN
YXA8U3RyaW5nLCBSZWZQdHI8UGxhdGZvcm1DQUFuaW1hdGlvbj4gPjo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBsYXllci0+YW5pbWF0aW9ucygpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAg
ICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHMoQWRvcHRDRiwgaXQtPmZpcnN0LmNyZWF0ZUNG
U3RyaW5nKCkpOwotICAgICAgICBDQUNGTGF5ZXJBZGRBbmltYXRpb24obGF5ZXItPnBsYXRmb3Jt
TGF5ZXIoKSwgcy5nZXQoKSwgaXQtPnNlY29uZC0+cGxhdGZvcm1BbmltYXRpb24oKSk7CisgICAg
ICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gcyhBZG9wdENGLCBpdC0+a2V5LmNyZWF0ZUNGU3Ry
aW5nKCkpOworICAgICAgICBDQUNGTGF5ZXJBZGRBbmltYXRpb24obGF5ZXItPnBsYXRmb3JtTGF5
ZXIoKSwgcy5nZXQoKSwgaXQtPnZhbHVlLT5wbGF0Zm9ybUFuaW1hdGlvbigpKTsKICAgICB9CiB9
CiAKQEAgLTMyOCw3ICszMjgsNyBAQCBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+IFBs
YXRmb3JtQ0FMYXllcjo6YW5pbWF0aW9uRm9yS2V5KGNvbnN0IFN0cmluZyYgawogICAgIGlmIChp
dCA9PSBtX2FuaW1hdGlvbnMuZW5kKCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgcmV0dXJu
IGl0LT5zZWNvbmQ7CisgICAgcmV0dXJuIGl0LT52YWx1ZTsKIH0KIAogUGxhdGZvcm1DQUxheWVy
KiBQbGF0Zm9ybUNBTGF5ZXI6Om1hc2soKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENhY2hlQ2hyb21pdW1XaW4uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENhY2hlQ2hyb21p
dW1XaW4uY3BwCmluZGV4IGQ0ZDU5MmUxYmVlMmRkMzMwYjQ2MzFhMzgxZjI0MjllODFmZDM4MTAu
LmFmZmQyYWFjZmYwYTM0YzljYzdkZDRiZGNkOTY4YmQzZmI0YjI1YzQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUNocm9taXVt
V2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9G
b250Q2FjaGVDaHJvbWl1bVdpbi5jcHAKQEAgLTIyMiwxMCArMjIyLDEwIEBAIHN0YXRpYyBib29s
IExvb2t1cEFsdE5hbWUoY29uc3QgU3RyaW5nJiBuYW1lLCBTdHJpbmcmIGFsdE5hbWUpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIHN0YXRpYyBpbnQgc3lzdGVtQ3AgPSA6OkdldEFDUCgp
OwotICAgIGludCBmb250Q3AgPSBpdGVyLT5zZWNvbmQtPmNvZGVQYWdlOworICAgIGludCBmb250
Q3AgPSBpdGVyLT52YWx1ZS0+Y29kZVBhZ2U7CiAKICAgICBpZiAoKGlzQXNjaWkgJiYgc3lzdGVt
Q3AgPT0gZm9udENwKSB8fCAoIWlzQXNjaWkgJiYgc3lzdGVtQ3AgIT0gZm9udENwKSkgewotICAg
ICAgICBhbHROYW1lID0gU3RyaW5nKGl0ZXItPnNlY29uZC0+bmFtZSk7CisgICAgICAgIGFsdE5h
bWUgPSBTdHJpbmcoaXRlci0+dmFsdWUtPm5hbWUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAKQEAgLTI3Niw3ICsyNzYsNyBAQCBzdGF0aWMgYm9vbCBmb250Q29udGFpbnNDaGFyYWN0
ZXIoY29uc3QgRm9udFBsYXRmb3JtRGF0YSogZm9udERhdGEsCiAKICAgICBIYXNoTWFwPGNvbnN0
IHdjaGFyX3QqLCBpY3U6OlVuaWNvZGVTZXQqPjo6aXRlcmF0b3IgaXQgPSBmb250Q21hcENhY2hl
LT5maW5kKGZhbWlseSk7CiAgICAgaWYgKGl0ICE9IGZvbnRDbWFwQ2FjaGUtPmVuZCgpKSAKLSAg
ICAgICAgcmV0dXJuIGl0LT5zZWNvbmQtPmNvbnRhaW5zKGNoYXJhY3Rlcik7CisgICAgICAgIHJl
dHVybiBpdC0+dmFsdWUtPmNvbnRhaW5zKGNoYXJhY3Rlcik7CiAgICAgCiAgICAgSEZPTlQgaGZv
bnQgPSBmb250RGF0YS0+aGZvbnQoKTsgCiAgICAgSFduZERDIGhkYygwKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRVdGlsc0Nocm9t
aXVtV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Zv
bnRVdGlsc0Nocm9taXVtV2luLmNwcAppbmRleCBjYzUyYzUyZWI3MDU3ODJkZTFmOTY4ZGM4MDNj
NDVlNGYyYWUyMjkyLi4yZmZhYmJiNzY4MmRlYThhMGUxZmM5ZmRhZWU5YzcxODA1YTQyYTA4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250
VXRpbHNDaHJvbWl1bVdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vRm9udFV0aWxzQ2hyb21pdW1XaW4uY3BwCkBAIC00MTUsNyArNDE1LDcgQEAg
Ym9vbCBnZXREZXJpdmVkRm9udERhdGEoY29uc3QgVUNoYXIqIGZhbWlseSwKICAgICAgICAgLy8g
Y2hlY2sgaXQgYWdhaW5zdCB3aGF0IHdlIGFjdHVhbGx5IHdhbnQgKGFzIGlzIGRvbmUgaW4KICAg
ICAgICAgLy8gRm9udENhY2hlV2luLmNwcCkKICAgICAgICAgRm9udERhdGFDYWNoZTo6QWRkUmVz
dWx0IGVudHJ5ID0gZm9udERhdGFDYWNoZS5hZGQoZm9udEtleSwgRm9udERhdGEoKSk7Ci0gICAg
ICAgIGRlcml2ZWQgPSAmZW50cnkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgZGVyaXZlZCA9
ICZlbnRyeS5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgIGRlcml2ZWQtPmhmb250ID0gQ3JlYXRl
Rm9udEluZGlyZWN0KGxvZ2ZvbnQpOwogICAgICAgICAvLyBHZXRBc2NlbnQgbWF5IHJldHVybiBr
VW5kZWZpbmVkQXNjZW50LCBidXQgd2Ugc3RpbGwgd2FudCB0bwogICAgICAgICAvLyBjYWNoZSBp
dCBzbyB0aGF0IHdlIHdvbid0IGhhdmUgdG8gY2FsbCBDcmVhdGVGb250SW5kaXJlY3Qgb25jZQpA
QCAtNDIzLDcgKzQyMyw3IEBAIGJvb2wgZ2V0RGVyaXZlZEZvbnREYXRhKGNvbnN0IFVDaGFyKiBm
YW1pbHksCiAgICAgICAgIGRlcml2ZWQtPmFzY2VudCA9IGdldEFzY2VudChkZXJpdmVkLT5oZm9u
dCk7CiAgICAgICAgIGRlcml2ZWQtPnNwYWNlR2x5cGggPSBnZXRTcGFjZUdseXBoKGRlcml2ZWQt
Pmhmb250KTsKICAgICB9IGVsc2UgewotICAgICAgICBkZXJpdmVkID0gJml0ZXItPnNlY29uZDsK
KyAgICAgICAgZGVyaXZlZCA9ICZpdGVyLT52YWx1ZTsKICAgICAgICAgLy8gTGFzdCB0aW1lLCBH
ZXRBc2NlbnQgZmFpbGVkIHNvIHRoYXQgb25seSBIRk9OVCB3YXMKICAgICAgICAgLy8gY2FjaGVk
LiBUcnkgb25jZSBtb3JlIGFzc3VtaW5nIHRoYXQgVHJ5UHJlbG9hZEZvbnQKICAgICAgICAgLy8g
d2FzIGNhbGxlZCBieSBhIGNhbGxlciBiZXR3ZWVuIGNhbGxzLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVt
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNz
TGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggZGIwYmExYzJjOWQyMjQ5MmNjNTI5YmZjMTJhNTJkZTkz
NjBmZjRiNy4uNGQ1ZWEwYjQ2NzE4YTM2MmUwYjY5YjJjN2VjZjVlNWJkNGUwODE1MCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NM
YXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCkBAIC03NDAsNyArNzQwLDcgQEAgaW50
IEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6bWFwQW5pbWF0aW9uTmFtZVRvSWQoY29uc3QgU3RyaW5n
JiBhbmltYXRpb25OYW1lKQogICAgIGlmICghbV9hbmltYXRpb25JZE1hcC5jb250YWlucyhhbmlt
YXRpb25OYW1lKSkKICAgICAgICAgbV9hbmltYXRpb25JZE1hcC5hZGQoYW5pbWF0aW9uTmFtZSwg
c19uZXh0QW5pbWF0aW9uSWQrKyk7CiAKLSAgICByZXR1cm4gbV9hbmltYXRpb25JZE1hcC5maW5k
KGFuaW1hdGlvbk5hbWUpLT5zZWNvbmQ7CisgICAgcmV0dXJuIG1fYW5pbWF0aW9uSWRNYXAuZmlu
ZChhbmltYXRpb25OYW1lKS0+dmFsdWU7CiB9CiAKIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVt
Ojpub3RpZnlBbmltYXRpb25TdGFydGVkKGRvdWJsZSBzdGFydFRpbWUpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFu
YWdlci5jcHAKaW5kZXggMGM2ZmUxNGY5YWQ2NWZjMDJmMmQ1ZTQ5ZWY1MjU0NTMyNDJmYTZmYi4u
ZjhhY2QyZDRkMGFiZTYxYWU4ZmM4YjhlODQ5Mjk1YzdkMmRmOTQ1OSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVN
YW5hZ2VyLmNwcApAQCAtMTQ3LDcgKzE0Nyw3IEBAIHZvaWQgVGV4dHVyZU1hbmFnZXI6OnJlbGVh
c2VUb2tlbihUZXh0dXJlVG9rZW4gdG9rZW4pCiB7CiAgICAgVGV4dHVyZU1hcDo6aXRlcmF0b3Ig
aXQgPSBtX3RleHR1cmVzLmZpbmQodG9rZW4pOwogICAgIGlmIChpdCAhPSBtX3RleHR1cmVzLmVu
ZCgpKQotICAgICAgICByZW1vdmVUZXh0dXJlKHRva2VuLCBpdC0+c2Vjb25kKTsKKyAgICAgICAg
cmVtb3ZlVGV4dHVyZSh0b2tlbiwgaXQtPnZhbHVlKTsKIH0KIAogYm9vbCBUZXh0dXJlTWFuYWdl
cjo6aGFzVGV4dHVyZShUZXh0dXJlVG9rZW4gdG9rZW4pCkBAIC0xNzUsMTMgKzE3NSwxMyBAQCB2
b2lkIFRleHR1cmVNYW5hZ2VyOjp1bnByb3RlY3RUZXh0dXJlKFRleHR1cmVUb2tlbiB0b2tlbikK
IHsKICAgICBUZXh0dXJlTWFwOjppdGVyYXRvciBpdCA9IG1fdGV4dHVyZXMuZmluZCh0b2tlbik7
CiAgICAgaWYgKGl0ICE9IG1fdGV4dHVyZXMuZW5kKCkpCi0gICAgICAgIGl0LT5zZWNvbmQuaXNQ
cm90ZWN0ZWQgPSBmYWxzZTsKKyAgICAgICAgaXQtPnZhbHVlLmlzUHJvdGVjdGVkID0gZmFsc2U7
CiB9CiAKIHZvaWQgVGV4dHVyZU1hbmFnZXI6OnVucHJvdGVjdEFsbFRleHR1cmVzKCkKIHsKICAg
ICBmb3IgKFRleHR1cmVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90ZXh0dXJlcy5iZWdpbigpOyBpdCAh
PSBtX3RleHR1cmVzLmVuZCgpOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLmlzUHJvdGVjdGVk
ID0gZmFsc2U7CisgICAgICAgIGl0LT52YWx1ZS5pc1Byb3RlY3RlZCA9IGZhbHNlOwogfQogCiB2
b2lkIFRleHR1cmVNYW5hZ2VyOjpldmljdFRleHR1cmUoVGV4dHVyZVRva2VuIHRva2VuLCBUZXh0
dXJlSW5mbyBpbmZvKQpAQCAtMjYyLDcgKzI2Miw3IEBAIHVuc2lnbmVkIFRleHR1cmVNYW5hZ2Vy
OjphbGxvY2F0ZVRleHR1cmUoVGV4dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yLCBUZXh0dXJlVG9r
CiB7CiAgICAgVGV4dHVyZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RleHR1cmVzLmZpbmQodG9rZW4p
OwogICAgIEFTU0VSVChpdCAhPSBtX3RleHR1cmVzLmVuZCgpKTsKLSAgICBUZXh0dXJlSW5mbyog
aW5mbyA9ICZpdC5nZXQoKS0+c2Vjb25kOworICAgIFRleHR1cmVJbmZvKiBpbmZvID0gJml0Lmdl
dCgpLT52YWx1ZTsKICAgICBBU1NFUlQoaW5mby0+aXNQcm90ZWN0ZWQpOwogCiAgICAgdW5zaWdu
ZWQgdGV4dHVyZUlkID0gYWxsb2NhdG9yLT5jcmVhdGVUZXh0dXJlKGluZm8tPnNpemUsIGluZm8t
PmZvcm1hdCk7CkBAIC0yODAsOCArMjgwLDggQEAgYm9vbCBUZXh0dXJlTWFuYWdlcjo6cmVxdWVz
dFRleHR1cmUoVGV4dHVyZVRva2VuIHRva2VuLCBJbnRTaXplIHNpemUsIHVuc2lnbmVkIGYKIAog
ICAgIFRleHR1cmVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90ZXh0dXJlcy5maW5kKHRva2VuKTsKICAg
ICBpZiAoaXQgIT0gbV90ZXh0dXJlcy5lbmQoKSkgewotICAgICAgICBBU1NFUlQoaXQtPnNlY29u
ZC5zaXplICE9IHNpemUgfHwgaXQtPnNlY29uZC5mb3JtYXQgIT0gZm9ybWF0KTsKLSAgICAgICAg
cmVtb3ZlVGV4dHVyZSh0b2tlbiwgaXQtPnNlY29uZCk7CisgICAgICAgIEFTU0VSVChpdC0+dmFs
dWUuc2l6ZSAhPSBzaXplIHx8IGl0LT52YWx1ZS5mb3JtYXQgIT0gZm9ybWF0KTsKKyAgICAgICAg
cmVtb3ZlVGV4dHVyZSh0b2tlbiwgaXQtPnZhbHVlKTsKICAgICB9CiAKICAgICBzaXplX3QgbWVt
b3J5UmVxdWlyZWRCeXRlcyA9IG1lbW9yeVVzZUJ5dGVzKHNpemUsIGZvcm1hdCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVy
Q2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
VGlsZWRMYXllckNocm9taXVtLmNwcAppbmRleCAwMTBhNDMxOGM4M2FkYzg3OGU0YTdjMDcwYzNl
Mjk4ZThhOTEzY2UyLi5iNDc5YTdhN2VmMmI3MWU1ODAxMjQ5ODhhMzljOWUzM2MxODk3MGMxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxl
ZExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTI2Nyw5ICsyNjcsOSBAQCB2b2lk
IFRpbGVkTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyhDQ0xheWVySW1wbCogbGF5ZXIp
CiAgICAgVmVjdG9yPFVwZGF0YWJsZVRpbGUqPiBpbnZhbGlkVGlsZXM7CiAKICAgICBmb3IgKEND
TGF5ZXJUaWxpbmdEYXRhOjpUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbV90aWxlci0+
dGlsZXMoKS5iZWdpbigpOyBpdGVyICE9IG1fdGlsZXItPnRpbGVzKCkuZW5kKCk7ICsraXRlcikg
ewotICAgICAgICBpbnQgaSA9IGl0ZXItPmZpcnN0LmZpcnN0OwotICAgICAgICBpbnQgaiA9IGl0
ZXItPmZpcnN0LnNlY29uZDsKLSAgICAgICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHN0YXRpY19j
YXN0PFVwZGF0YWJsZVRpbGUqPihpdGVyLT5zZWNvbmQuZ2V0KCkpOworICAgICAgICBpbnQgaSA9
IGl0ZXItPmtleS5maXJzdDsKKyAgICAgICAgaW50IGogPSBpdGVyLT5rZXkuc2Vjb25kOworICAg
ICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gc3RhdGljX2Nhc3Q8VXBkYXRhYmxlVGlsZSo+KGl0
ZXItPnZhbHVlLmdldCgpKTsKICAgICAgICAgaWYgKCF0aWxlLT5tYW5hZ2VkVGV4dHVyZSgpLT5p
c1ZhbGlkKG1fdGlsZXItPnRpbGVTaXplKCksIG1fdGV4dHVyZUZvcm1hdCkpIHsKICAgICAgICAg
ICAgIGludmFsaWRUaWxlcy5hcHBlbmQodGlsZSk7CiAgICAgICAgICAgICBjb250aW51ZTsKQEAg
LTI5NCw3ICsyOTQsNyBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJUcmVlSG9z
dChDQ0xheWVyVHJlZUhvc3QqIGhvc3QpCiB7CiAgICAgaWYgKGhvc3QgJiYgaG9zdCAhPSBsYXll
clRyZWVIb3N0KCkpIHsKICAgICAgICAgZm9yIChDQ0xheWVyVGlsaW5nRGF0YTo6VGlsZU1hcDo6
Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1fdGlsZXItPnRpbGVzKCkuYmVnaW4oKTsgaXRlciAhPSBt
X3RpbGVyLT50aWxlcygpLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgICAgIFVwZGF0YWJsZVRp
bGUqIHRpbGUgPSBzdGF0aWNfY2FzdDxVcGRhdGFibGVUaWxlKj4oaXRlci0+c2Vjb25kLmdldCgp
KTsKKyAgICAgICAgICAgIFVwZGF0YWJsZVRpbGUqIHRpbGUgPSBzdGF0aWNfY2FzdDxVcGRhdGFi
bGVUaWxlKj4oaXRlci0+dmFsdWUuZ2V0KCkpOwogICAgICAgICAgICAgdGlsZS0+bWFuYWdlZFRl
eHR1cmUoKS0+c2V0VGV4dHVyZU1hbmFnZXIoaG9zdC0+Y29udGVudHNUZXh0dXJlTWFuYWdlcigp
KTsKICAgICAgICAgfQogICAgIH0KQEAgLTM0Niw3ICszNDYsNyBAQCB2b2lkIFRpbGVkTGF5ZXJD
aHJvbWl1bTo6aW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0KQogICAgICAg
ICByZXR1cm47CiAKICAgICBmb3IgKENDTGF5ZXJUaWxpbmdEYXRhOjpUaWxlTWFwOjpjb25zdF9p
dGVyYXRvciBpdGVyID0gbV90aWxlci0+dGlsZXMoKS5iZWdpbigpOyBpdGVyICE9IG1fdGlsZXIt
PnRpbGVzKCkuZW5kKCk7ICsraXRlcikgewotICAgICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0g
c3RhdGljX2Nhc3Q8VXBkYXRhYmxlVGlsZSo+KGl0ZXItPnNlY29uZC5nZXQoKSk7CisgICAgICAg
IFVwZGF0YWJsZVRpbGUqIHRpbGUgPSBzdGF0aWNfY2FzdDxVcGRhdGFibGVUaWxlKj4oaXRlci0+
dmFsdWUuZ2V0KCkpOwogICAgICAgICBBU1NFUlQodGlsZSk7CiAgICAgICAgIEludFJlY3QgYm91
bmQgPSBtX3RpbGVyLT50aWxlUmVjdCh0aWxlKTsKICAgICAgICAgYm91bmQuaW50ZXJzZWN0KGxh
eWVyUmVjdCk7CkBAIC01OTIsNyArNTkyLDcgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnJl
c2V0VXBkYXRlU3RhdGUoKQogICAgIC8vIFJlc2V0IG1fdXBkYXRlUmVjdCBmb3IgYWxsIHRpbGVz
LgogICAgIENDTGF5ZXJUaWxpbmdEYXRhOjpUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBt
X3RpbGVyLT50aWxlcygpLmVuZCgpOwogICAgIGZvciAoQ0NMYXllclRpbGluZ0RhdGE6OlRpbGVN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX3RpbGVyLT50aWxlcygpLmJlZ2luKCk7IGl0ZXIg
IT0gZW5kOyArK2l0ZXIpIHsKLSAgICAgICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHN0YXRpY19j
YXN0PFVwZGF0YWJsZVRpbGUqPihpdGVyLT5zZWNvbmQuZ2V0KCkpOworICAgICAgICBVcGRhdGFi
bGVUaWxlKiB0aWxlID0gc3RhdGljX2Nhc3Q8VXBkYXRhYmxlVGlsZSo+KGl0ZXItPnZhbHVlLmdl
dCgpKTsKICAgICAgICAgdGlsZS0+bV91cGRhdGVSZWN0ID0gSW50UmVjdCgpOwogICAgICAgICB0
aWxlLT5tX3BhcnRpYWxVcGRhdGUgPSBmYWxzZTsKICAgICAgICAgdGlsZS0+bV91cGRhdGVkID0g
ZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0RhbWFnZVRyYWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1hZ2VUcmFja2VyLmNwcAppbmRleCBkNGI0Y2Y5MTZiMTJi
MTNhZjdkZmE2MmFkZTUzMjYzMDFmZmI5YzE2Li5lNjRhM2Q3MGUzYTA3MjUxY2ZkZmZlNzI0MDE0
MzE5ZjY2Yjk1NDVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0RhbWFnZVRyYWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGFtYWdlVHJhY2tlci5jcHAKQEAgLTE5OCw3
ICsxOTgsNyBAQCBGbG9hdFJlY3QgQ0NEYW1hZ2VUcmFja2VyOjp0cmFja0RhbWFnZUZyb21MZWZ0
b3ZlclJlY3RzKCkKICAgICBGbG9hdFJlY3QgZGFtYWdlUmVjdCA9IEZsb2F0UmVjdCgpOwogCiAg
ICAgZm9yIChSZWN0TWFwOjppdGVyYXRvciBpdCA9IG1fY3VycmVudFJlY3RIaXN0b3J5LT5iZWdp
bigpOyBpdCAhPSBtX2N1cnJlbnRSZWN0SGlzdG9yeS0+ZW5kKCk7ICsraXQpCi0gICAgICAgIGRh
bWFnZVJlY3QudW5pdGUoaXQtPnNlY29uZCk7CisgICAgICAgIGRhbWFnZVJlY3QudW5pdGUoaXQt
PnZhbHVlKTsKIAogICAgIG1fY3VycmVudFJlY3RIaXN0b3J5LT5jbGVhcigpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VGlsaW5nRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVGlsaW5nRGF0YS5jcHAKaW5kZXggNDJmMWU4ZDFhYjU5OGM4Mzc1ZDViNWMx
N2RkMjVlNjBlODNiYjYzNS4uMDRlM2Q2YTdiODQ0M2JjYjgyM2NjZGZkY2I3YjQ0NjY3OTUxOWVi
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRpbGluZ0RhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUaWxpbmdEYXRhLmNwcApAQCAtMTM4LDggKzEzOCw4
IEBAIHZvaWQgQ0NMYXllclRpbGluZ0RhdGE6OnNldEJvdW5kcyhjb25zdCBJbnRTaXplJiBzaXpl
KQogICAgIGxheWVyUmVjdFRvVGlsZUluZGljZXMoSW50UmVjdChJbnRQb2ludCgpLCBzaXplKSwg
bGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKICAgICBWZWN0b3I8VGlsZU1hcEtleT4gaW52YWxp
ZFRpbGVLZXlzOwogICAgIGZvciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RpbGVz
LmJlZ2luKCk7IGl0ICE9IG1fdGlsZXMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5m
aXJzdC5maXJzdCA+IHJpZ2h0IHx8IGl0LT5maXJzdC5zZWNvbmQgPiBib3R0b20pCi0gICAgICAg
ICAgICBpbnZhbGlkVGlsZUtleXMuYXBwZW5kKGl0LT5maXJzdCk7CisgICAgICAgIGlmIChpdC0+
a2V5LmZpcnN0ID4gcmlnaHQgfHwgaXQtPmtleS5zZWNvbmQgPiBib3R0b20pCisgICAgICAgICAg
ICBpbnZhbGlkVGlsZUtleXMuYXBwZW5kKGl0LT5rZXkpOwogICAgIH0KICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGludmFsaWRUaWxlS2V5cy5zaXplKCk7ICsraSkKICAgICAgICAgbV90aWxl
cy5yZW1vdmUoaW52YWxpZFRpbGVLZXlzW2ldKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3Qu
Y3BwCmluZGV4IDU3NmZjMmIzMTkwYTJkNjMwOTU3NTk4MTc1YzQzZWVmNGU3ODhjMjcuLjNjZGVh
MjYyY2Y1NzM0OTM1ODU0YWFlOWJiNmMzZTdhMmZmNjNhOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0LmNwcApAQCAtNjI5LDcgKzYyOSw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0Ojpz
dGFydFJhdGVMaW1pdGVyKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQogICAgIEFTU0VSVChj
b250ZXh0KTsKICAgICBSYXRlTGltaXRlck1hcDo6aXRlcmF0b3IgaXQgPSBtX3JhdGVMaW1pdGVy
cy5maW5kKGNvbnRleHQpOwogICAgIGlmIChpdCAhPSBtX3JhdGVMaW1pdGVycy5lbmQoKSkKLSAg
ICAgICAgaXQtPnNlY29uZC0+c3RhcnQoKTsKKyAgICAgICAgaXQtPnZhbHVlLT5zdGFydCgpOwog
ICAgIGVsc2UgewogICAgICAgICBSZWZQdHI8UmF0ZUxpbWl0ZXI+IHJhdGVMaW1pdGVyID0gUmF0
ZUxpbWl0ZXI6OmNyZWF0ZShjb250ZXh0KTsKICAgICAgICAgbV9yYXRlTGltaXRlcnMuc2V0KGNv
bnRleHQsIHJhdGVMaW1pdGVyKTsKQEAgLTY0MSw3ICs2NDEsNyBAQCB2b2lkIENDTGF5ZXJUcmVl
SG9zdDo6c3RvcFJhdGVMaW1pdGVyKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQogewogICAg
IFJhdGVMaW1pdGVyTWFwOjppdGVyYXRvciBpdCA9IG1fcmF0ZUxpbWl0ZXJzLmZpbmQoY29udGV4
dCk7CiAgICAgaWYgKGl0ICE9IG1fcmF0ZUxpbWl0ZXJzLmVuZCgpKSB7Ci0gICAgICAgIGl0LT5z
ZWNvbmQtPnN0b3AoKTsKKyAgICAgICAgaXQtPnZhbHVlLT5zdG9wKCk7CiAgICAgICAgIG1fcmF0
ZUxpbWl0ZXJzLnJlbW92ZShpdCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJQcm9ncmFtLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyUHJvZ3Jh
bS5jcHAKaW5kZXggMTMwNDQxYTFjZDA3NWVmNTc5NWI5M2MwYzk3YjdiMTEwZTlkNzJhZS4uNzg1
OWM4YmJhNTdlNGIxYjU0YzI4Y2E0ZmZmMGZhNWJiYzZkZWVkMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJQcm9ncmFtLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZp
bHRlclByb2dyYW0uY3BwCkBAIC03Nyw3ICs3Nyw3IEBAIHZvaWQgQ3VzdG9tRmlsdGVyUHJvZ3Jh
bTo6cmVtb3ZlQ2xpZW50KEN1c3RvbUZpbHRlclByb2dyYW1DbGllbnQqIGNsaWVudCkKIHZvaWQg
Q3VzdG9tRmlsdGVyUHJvZ3JhbTo6bm90aWZ5Q2xpZW50cygpCiB7CiAgICAgZm9yIChDdXN0b21G
aWx0ZXJQcm9ncmFtQ2xpZW50TGlzdDo6aXRlcmF0b3IgaXRlciA9IG1fY2xpZW50cy5iZWdpbigp
LCBlbmQgPSBtX2NsaWVudHMuZW5kKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCi0gICAgICAgIGl0
ZXItPmZpcnN0LT5ub3RpZnlDdXN0b21GaWx0ZXJQcm9ncmFtTG9hZGVkKHRoaXMpOworICAgICAg
ICBpdGVyLT5rZXktPm5vdGlmeUN1c3RvbUZpbHRlclByb2dyYW1Mb2FkZWQodGhpcyk7CiB9CiAK
ICNpZiBFTkFCTEUoV0VCR0wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ndGsvR0xDb250ZXh0R3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2d0ay9HTENvbnRleHRHdGsuY3BwCmluZGV4IDZiMjQ2MWEwMzIxZWY2MGUyNjVkZjYx
ZDIyMzRjZTc1NzY5NTk1NTEuLmFkNmZiNjk1NjEyOTMwY2MxMDZkODA4MzA3OWYzNWZlZTFkZWVj
M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HTENv
bnRleHRHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9H
TENvbnRleHRHdGsuY3BwCkBAIC00Nyw3ICs0Nyw3IEBAIEdMQ29udGV4dCogR0xDb250ZXh0Ojpn
ZXRDb250ZXh0Rm9yV2lkZ2V0KEd0a1dpZGdldCogd2lkZ2V0KQogICAgIFdpbmRvd0NvbnRleHRN
YXAmIHdpbmRvd0NvbnRleHRzID0gd2luZG93Q29udGV4dHNNYXAoKTsKICAgICBXaW5kb3dDb250
ZXh0TWFwOjppdGVyYXRvciBpID0gd2luZG93Q29udGV4dHNNYXAoKS5maW5kKHdpZGdldCk7CiAg
ICAgaWYgKGkgIT0gd2luZG93Q29udGV4dHMuZW5kKCkpCi0gICAgICAgIHJldHVybiBpLT5zZWNv
bmQuZ2V0KCk7CisgICAgICAgIHJldHVybiBpLT52YWx1ZS5nZXQoKTsKIAogICAgIC8vIEl0J3Mg
aW1wb3J0YW50IHRoYXQgdGhpcyBjb250ZXh0IGRvZXNuJ3QgaGFuZyBhcm91bmQgYWZ0ZXIgdGhl
IHdpbmRvdwogICAgIC8vIGlzIHVubWFwcGVkLCBzbyB3ZSBtYWtlIHN1cmUgdG8gY2xlYW4gaXQg
dXAgb25jZSB0aGF0IGhhcHBlbnMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNraWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTa2lhLmNwcAppbmRleCBmNjhlYTYxOTI0
NWY4NjZlNWJkMGQ1NzhkMDEwNDg0NDUyNTg0YzJiLi4xZTg4NjdiYjc1N2YyMjQyZThmNDk2MmY4
NzViMWJkZjdhZTk5MTJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYXJmYnV6ei9IYXJmQnV6elNraWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2tpYS5jcHAKQEAgLTI0NCwxOCArMjQ0LDE4
IEBAIHN0YXRpYyBIQl9GYWNlUmVjXyogZ2V0Q2FjaGVkSGFyZmJ1enpGYWNlKEZvbnRQbGF0Zm9y
bURhdGEqIHBsYXRmb3JtRGF0YSkKICAgICAgICAgZ0hhcmZidXp6RmFjZUNhY2hlLT5zZXQodW5p
cXVlSUQsIGVudHJ5KTsKICAgICAgICAgcmV0dXJuIGVudHJ5LmZpcnN0OwogICAgIH0KLSAgICAr
KyhyZXN1bHQuZ2V0KCktPnNlY29uZC5zZWNvbmQpOwotICAgIHJldHVybiByZXN1bHQuZ2V0KCkt
PnNlY29uZC5maXJzdDsKKyAgICArKyhyZXN1bHQuZ2V0KCktPnZhbHVlLnNlY29uZCk7CisgICAg
cmV0dXJuIHJlc3VsdC5nZXQoKS0+dmFsdWUuZmlyc3Q7CiB9CiAKIHN0YXRpYyB2b2lkIHJlbGVh
c2VDYWNoZWRIYXJmYnV6ekZhY2UoU2tGb250SUQgdW5pcXVlSUQpCiB7CiAgICAgSGFyZmJ1enpG
YWNlQ2FjaGU6Oml0ZXJhdG9yIHJlc3VsdCA9IGdIYXJmYnV6ekZhY2VDYWNoZS0+ZmluZCh1bmlx
dWVJRCk7CiAgICAgQVNTRVJUKHJlc3VsdCAhPSBnSGFyZmJ1enpGYWNlQ2FjaGUtPmVuZCgpKTsK
LSAgICBBU1NFUlQocmVzdWx0LmdldCgpLT5zZWNvbmQuc2Vjb25kID4gMCk7Ci0gICAgLS0ocmVz
dWx0LmdldCgpLT5zZWNvbmQuc2Vjb25kKTsKLSAgICBpZiAoIShyZXN1bHQuZ2V0KCktPnNlY29u
ZC5zZWNvbmQpKSB7Ci0gICAgICAgIEhCX0ZyZWVGYWNlKHJlc3VsdC5nZXQoKS0+c2Vjb25kLmZp
cnN0KTsKKyAgICBBU1NFUlQocmVzdWx0LmdldCgpLT52YWx1ZS5zZWNvbmQgPiAwKTsKKyAgICAt
LShyZXN1bHQuZ2V0KCktPnZhbHVlLnNlY29uZCk7CisgICAgaWYgKCEocmVzdWx0LmdldCgpLT52
YWx1ZS5zZWNvbmQpKSB7CisgICAgICAgIEhCX0ZyZWVGYWNlKHJlc3VsdC5nZXQoKS0+dmFsdWUu
Zmlyc3QpOwogICAgICAgICBnSGFyZmJ1enpGYWNlQ2FjaGUtPnJlbW92ZSh1bmlxdWVJRCk7CiAg
ICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0NvbXBsZXhUZXh0Q29udHJvbGxlckFUU1VJLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXJBVFNVSS5jcHAKaW5kZXggYmU5Zjc0
MTA0ZmU3NDM0NDU3MTU2NDE2M2NmN2FhZDcwZTA3MmM0Zi4uNjJlYTRiZWQxYmEwNWM0NWQ5YmIy
M2EzMzMyNWY1YjRjYzI3MzU5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckFUU1VJLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyQVRTVUku
Y3BwCkBAIC0yNzksNyArMjc5LDcgQEAgc3RhdGljIEFUU1VTdHlsZSBpbml0aWFsaXplQVRTVVN0
eWxlKGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwgVHlwZXNldHRpbmcKIHsKICAgICB1
bnNpZ25lZCBrZXkgPSB0eXBlc2V0dGluZ0ZlYXR1cmVzICsgMTsKICAgICBIYXNoTWFwPHVuc2ln
bmVkLCBBVFNVU3R5bGU+OjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gZm9udERhdGEtPm1fQVRTVVN0
eWxlTWFwLmFkZChrZXksIDApOwotICAgIEFUU1VTdHlsZSYgYXRzdVN0eWxlID0gYWRkUmVzdWx0
Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgQVRTVVN0eWxlJiBhdHN1U3R5bGUgPSBhZGRSZXN1bHQu
aXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkpCiAgICAgICAg
IHJldHVybiBhdHN1U3R5bGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YUNvcmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YUNvcmVUZXh0LmNwcAppbmRleCAw
NTE5Mzc0MmM1ODUyZGJlOWM5Y2VkNjRiOWEwN2FhZDJjMWVhNDc3Li4wYjcxMzM0N2Y2MDQ2MzU1
NDllNTBkNTYzNjUyMThiMjM0NDI2YWNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFDb3JlVGV4dC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhQ29yZVRleHQuY3Bw
CkBAIC00Myw3ICs0Myw3IEBAIENGRGljdGlvbmFyeVJlZiBTaW1wbGVGb250RGF0YTo6Z2V0Q0ZT
dHJpbmdBdHRyaWJ1dGVzKFR5cGVzZXR0aW5nRmVhdHVyZXMgdHlwZXNlCiB7CiAgICAgdW5zaWdu
ZWQga2V5ID0gdHlwZXNldHRpbmdGZWF0dXJlcyArIDE7CiAgICAgSGFzaE1hcDx1bnNpZ25lZCwg
UmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gPjo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IG1fQ0ZT
dHJpbmdBdHRyaWJ1dGVzLmFkZChrZXksIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+KCkpOwot
ICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+JiBhdHRyaWJ1dGVzRGljdGlvbmFyeSA9IGFk
ZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+
JiBhdHRyaWJ1dGVzRGljdGlvbmFyeSA9IGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAgICAg
aWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSkKICAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZXNEaWN0
aW9uYXJ5LmdldCgpOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhTWFjLm1tCmluZGV4IGQ1ZDU1NjA2ZDRmZjI1
MzAwNjM5ODc1NjI3ZjUzNWZmMzcxYzBlZDYuLjhhMWZiZDEyMGYwNzFhOGQ0ZjE2NWZkMGRkMWNk
YmZjYWE0MDdlODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L21hYy9TaW1wbGVGb250RGF0YU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW0KQEAgLTMyMyw3ICszMjMsNyBAQCB2b2lk
IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybURlc3Ryb3koKQogI2lmIFVTRShBVFNVSSkKICAgICBI
YXNoTWFwPHVuc2lnbmVkLCBBVFNVU3R5bGU+OjppdGVyYXRvciBlbmQgPSBtX0FUU1VTdHlsZU1h
cC5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8dW5zaWduZWQsIEFUU1VTdHlsZT46Oml0ZXJhdG9y
IGl0ID0gbV9BVFNVU3R5bGVNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBB
VFNVRGlzcG9zZVN0eWxlKGl0LT5zZWNvbmQpOworICAgICAgICBBVFNVRGlzcG9zZVN0eWxlKGl0
LT52YWx1ZSk7CiAjZW5kaWYKIH0KIApAQCAtNDczLDcgKzQ3Myw3IEBAIGJvb2wgU2ltcGxlRm9u
dERhdGE6OmNhblJlbmRlckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0IFVDaGFyKiBj
aGFyYWN0ZXJzCiAKICAgICBXVEY6Okhhc2hNYXA8U3RyaW5nLCBib29sPjo6QWRkUmVzdWx0IGFk
ZFJlc3VsdCA9IG1fY29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2VTdXBwb3J0LT5hZGQoU3RyaW5n
KGNoYXJhY3RlcnMsIGxlbmd0aCksIGZhbHNlKTsKICAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0Vu
dHJ5KQotICAgICAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAg
IHJldHVybiBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogCiAgICAgUmV0YWluUHRyPENHRm9u
dFJlZj4gY2dGb250KEFkb3B0Q0YsIENURm9udENvcHlHcmFwaGljc0ZvbnQocGxhdGZvcm1EYXRh
KCkuY3RGb250KCksIDApKTsKIApAQCAtNDkzLDcgKzQ5Myw3IEBAIGJvb2wgU2ltcGxlRm9udERh
dGE6OmNhblJlbmRlckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0IFVDaGFyKiBjaGFy
YWN0ZXJzCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgYWRkUmVzdWx0
Lml0ZXJhdG9yLT5zZWNvbmQgPSB0cnVlOworICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUg
PSB0cnVlOwogICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29u
dGV4dDNET3BlbkdMQ29tbW9uLmNwcAppbmRleCA5MTIzZWQwYjIwM2VmNDRmMGRkMzZlMmZjZmY3
NzkwZGM2OTdmMjNmLi43MjRjMDQwNjIyMDc1ZWIxNmI5YzJiNjhiOTVkZTBkZTE1MzgxZGE4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhp
Y3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAKQEAgLTQ2
NSw3ICs0NjUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb21waWxlU2hhZGVyKFBsYXRm
b3JtM0RPYmplY3Qgc2hhZGVyKQogICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAu
ZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9
IHJlc3VsdC0+c2Vjb25kOworICAgIFNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3VsdC0+
dmFsdWU7CiAKICAgICBTdHJpbmcgdHJhbnNsYXRlZFNoYWRlclNvdXJjZTsKICAgICBTdHJpbmcg
c2hhZGVySW5mb0xvZzsKQEAgLTExNzEsNyArMTE3MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmdldFNoYWRlcml2KFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyLCBHQzNEZW51bSBwbmFtZSwg
R0MzCiAgICAgICAgICAgICAqdmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ+KGZhbHNlKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICAqdmFsdWUgPSBzdGF0aWNfY2FzdDxp
bnQ+KHJlc3VsdC0+c2Vjb25kLmlzVmFsaWQpOworICAgICAgICAqdmFsdWUgPSBzdGF0aWNfY2Fz
dDxpbnQ+KHJlc3VsdC0+dmFsdWUuaXNWYWxpZCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
SU5GT19MT0dfTEVOR1RIOgogICAgICAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFw
LmVuZCgpKSB7CkBAIC0xMTk4LDcgKzExOTgsNyBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6
OmdldFNoYWRlckluZm9Mb2coUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCiAgICAgaWYgKHJlc3Vs
dCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOyAK
IAotICAgIFNoYWRlclNvdXJjZUVudHJ5IGVudHJ5ID0gcmVzdWx0LT5zZWNvbmQ7CisgICAgU2hh
ZGVyU291cmNlRW50cnkgZW50cnkgPSByZXN1bHQtPnZhbHVlOwogICAgIGlmICghZW50cnkuaXNW
YWxpZCkKICAgICAgICAgcmV0dXJuIGVudHJ5LmxvZzsKIApAQCAtMTIyNCw3ICsxMjI0LDcgQEAg
U3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm0zRE9iamVj
dCBzaGFkZXIpCiAgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKICAg
ICAgICAgcmV0dXJuIFN0cmluZygpOyAKIAotICAgIHJldHVybiByZXN1bHQtPnNlY29uZC5zb3Vy
Y2U7CisgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWUuc291cmNlOwogfQogCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5p
bWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyQW5pbWF0aW9uLmNwcAppbmRleCA0YzkyYzU5N2QzZjg4ODg5M2I0YjYwZjVjZDg1
MmI2NjFkYjMyMGY0Li5hOTU5MDUxZmMyMDhiZDZiYzg0YTlkZDA4YTNlMGY0NWJlMThhNjQ0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlckFuaW1hdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJBbmltYXRpb24uY3BwCkBAIC0xODIsNyArMTgyLDcgQEAg
Ym9vbCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uczo6aGFzQWN0aXZlQW5pbWF0aW9uc09mVHlwZShB
bmltYXRlZFByb3BlcnR5SUQgdHlwZSkKIHsKICAgICBIYXNoTWFwPFN0cmluZywgVGV4dHVyZU1h
cHBlckFuaW1hdGlvbj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fYW5pbWF0aW9ucy5lbmQoKTsK
ICAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uPjo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX2FuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0g
ICAgICAgIGNvbnN0IFRleHR1cmVNYXBwZXJBbmltYXRpb24mIGFuaW1hdGlvbiA9IGl0LT5zZWNv
bmQ7CisgICAgICAgIGNvbnN0IFRleHR1cmVNYXBwZXJBbmltYXRpb24mIGFuaW1hdGlvbiA9IGl0
LT52YWx1ZTsKICAgICAgICAgaWYgKGFuaW1hdGlvbi5pc0FjdGl2ZSgpICYmIGFuaW1hdGlvbi5w
cm9wZXJ0eSgpID09IHR5cGUpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0x
OTMsNyArMTkzLDcgQEAgYm9vbCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uczo6aGFzUnVubmluZ0Fu
aW1hdGlvbnMoKSBjb25zdAogewogICAgIEhhc2hNYXA8U3RyaW5nLCBUZXh0dXJlTWFwcGVyQW5p
bWF0aW9uPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9hbmltYXRpb25zLmVuZCgpOwogICAgIGZv
ciAoSGFzaE1hcDxTdHJpbmcsIFRleHR1cmVNYXBwZXJBbmltYXRpb24+Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fYW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAg
Y29uc3QgVGV4dHVyZU1hcHBlckFuaW1hdGlvbiYgYW5pbWF0aW9uID0gaXQtPnNlY29uZDsKKyAg
ICAgICAgY29uc3QgVGV4dHVyZU1hcHBlckFuaW1hdGlvbiYgYW5pbWF0aW9uID0gaXQtPnZhbHVl
OwogICAgICAgICBpZiAoYW5pbWF0aW9uLnN0YXRlKCkgPT0gVGV4dHVyZU1hcHBlckFuaW1hdGlv
bjo6UGxheWluZ1N0YXRlKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMjUy
LDE0ICsyNTIsMTQgQEAgdm9pZCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uczo6cGF1c2UoY29uc3Qg
U3RyaW5nJiBuYW1lLCBkb3VibGUgb2Zmc2V0KQogICAgIEhhc2hNYXA8U3RyaW5nLCBUZXh0dXJl
TWFwcGVyQW5pbWF0aW9uPjo6aXRlcmF0b3IgaXQgPSBtX2FuaW1hdGlvbnMuZmluZChuYW1lKTsK
ICAgICBpZiAoaXQgPT0gbV9hbmltYXRpb25zLmVuZCgpKQogICAgICAgICByZXR1cm47Ci0gICAg
aXQtPnNlY29uZC5wYXVzZShvZmZzZXQpOworICAgIGl0LT52YWx1ZS5wYXVzZShvZmZzZXQpOwog
fQogCiB2b2lkIFRleHR1cmVNYXBwZXJBbmltYXRpb25zOjphcHBseShUZXh0dXJlTWFwcGVyQW5p
bWF0aW9uQ2xpZW50KiBjbGllbnQpCiB7CiAgICAgSGFzaE1hcDxTdHJpbmcsIFRleHR1cmVNYXBw
ZXJBbmltYXRpb24+OjppdGVyYXRvciBlbmQgPSBtX2FuaW1hdGlvbnMuZW5kKCk7CiAgICAgZm9y
IChIYXNoTWFwPFN0cmluZywgVGV4dHVyZU1hcHBlckFuaW1hdGlvbj46Oml0ZXJhdG9yIGl0ID0g
bV9hbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29u
ZC5hcHBseShjbGllbnQpOworICAgICAgICBpdC0+dmFsdWUuYXBwbHkoY2xpZW50KTsKIH0KIAog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJHTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlckdMLmNwcAppbmRleCBiOGY4YjU0YmViODk2ZmQ3ZTYzMGNhZjc5MDUz
MTBkNWFhMGE2NDk1Li4wMzFiMzYyZGU1OGVkODU2YTZiMzMzMDBmYTg4NGEwNmI0NjcyMmM0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlckdMLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlckdMLmNwcApAQCAtMTE3LDcgKzExNyw3IEBAIHN0cnVjdCBUZXh0dXJl
TWFwcGVyR0xEYXRhIHsKICAgICAgICAgICAgIEdMQ29udGV4dCBjdXJyZW50R0xDb25leHQgPSBn
ZXRDdXJyZW50R0xDb250ZXh0KCk7CiAgICAgICAgICAgICBHTENvbnRleHREYXRhTWFwOjppdGVy
YXRvciBpdCA9IGdsQ29udGV4dERhdGFNYXAoKS5maW5kKGN1cnJlbnRHTENvbmV4dCk7CiAgICAg
ICAgICAgICBpZiAoaXQgIT0gZ2xDb250ZXh0RGF0YU1hcCgpLmVuZCgpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgICAgICAgICAgICAgIHJldHVybiBpdC0+dmFsdWU7
CiAKICAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2hhcmVkR0xEYXRhKGdldEN1cnJl
bnRHTENvbnRleHQoKSkpOwogICAgICAgICB9CkBAIC0xODQsNyArMTg0LDcgQEAgc3RydWN0IFRl
eHR1cmVNYXBwZXJHTERhdGEgewogICAgICAgICAgICAgR0xDb250ZXh0RGF0YU1hcDo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gZ2xDb250ZXh0RGF0YU1hcCgpLmVuZCgpOwogICAgICAgICAgICAgR0xD
b250ZXh0RGF0YU1hcDo6aXRlcmF0b3IgaXQ7CiAgICAgICAgICAgICBmb3IgKGl0ID0gZ2xDb250
ZXh0RGF0YU1hcCgpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgICAg
IGlmIChpdC0+c2Vjb25kID09IHRoaXMpCisgICAgICAgICAgICAgICAgaWYgKGl0LT52YWx1ZSA9
PSB0aGlzKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJTaGFkZXJNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaAppbmRleCBkODQzMjcyOThjM2NjNDJm
OWIzOGRlZGQ2MmRmZjhlNTA1NjRhYmM1Li40YWQ1OTgxM2VjZWE0MTAyZDQ2NzA0OTg2ZjM0NGEz
NDcyMDJiNDUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaApAQCAt
MTA5LDcgKzEwOSw3IEBAIHB1YmxpYzoKIAogICAgICAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtTWFwLmZp
bmQoc2hhZGVyVHlwZSk7CiAgICAgICAgIGlmIChpdCAhPSBtX3RleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtTWFwLmVuZCgpKQotICAgICAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAg
ICAgICByZXR1cm4gaXQtPnZhbHVlOwogCiAgICAgICAgIHN3aXRjaCAoc2hhZGVyVHlwZSkgewog
ICAgICAgICBjYXNlIFNpbXBsZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbmNlL0ZvbnRQbGF0Zm9ybURhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udFBsYXRmb3JtRGF0YS5jcHAKaW5kZXggMTk3OTBhZDQ5
YjMzMDNkZDdiNjJjN2U3YTBhODIzNjc3YjRjZmY1MS4uMTlmNTI0NTVkMTFiMzU0Y2M0ZDQzZTY4
Mzk5Y2U3OWFjOTliYzBiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luY2UvRm9udFBsYXRmb3JtRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udFBsYXRmb3JtRGF0YS5jcHAKQEAgLTI4Nyw5ICsyODcs
OSBAQCBzdGF0aWMgUGFzc1JlZlB0cjxGaXhlZFNpemVGb250RGF0YT4gY3JlYXRlRml4ZWRTaXpl
Rm9udERhdGEoY29uc3QgQXRvbWljU3RyaW5nJgogICAgIEZpeGVkU2l6ZUZvbnREYXRhS2V5IGtl
eShmYW1pbHksIHdlaWdodCwgaXRhbGljKTsKICAgICBGaXhlZFNpemVGb250Q2FjaGU6OkFkZFJl
c3VsdCByZXN1bHQgPSBnX2ZpeGVkU2l6ZUZvbnRDYWNoZS5hZGQoa2V5LCBSZWZQdHI8Rml4ZWRT
aXplRm9udERhdGE+KCkpOwogICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgcmVz
dWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBGaXhlZFNpemVGb250RGF0YTo6Y3JlYXRlKGZhbWlseSwg
d2VpZ2h0LCBpdGFsaWMpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gRml4ZWRT
aXplRm9udERhdGE6OmNyZWF0ZShmYW1pbHksIHdlaWdodCwgaXRhbGljKTsKIAotICAgIHJldHVy
biByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZTsKIH0KIAogc3RhdGljIExPTkcgdG9HRElGb250V2VpZ2h0KEZvbnRXZWlnaHQgZm9udFdl
aWdodCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0
R3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmNwcApp
bmRleCAxYTg0ZjhiZDMxOTUyYjI4ZTI2ODI3MWRkMmE1ZjU3ZjQ0ZDgyN2Q3Li5hZGZjNjZlMDE1
ZTUwMjI2Nzg4YzIxNDc2OGExNWIyOTEzNjg0M2I4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvRGF0YU9iamVjdEd0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL0RhdGFPYmplY3RHdGsuY3BwCkBAIC0xNzEsNyArMTcxLDcgQEAgRGF0YU9iamVj
dEd0ayogRGF0YU9iamVjdEd0azo6Zm9yQ2xpcGJvYXJkKEd0a0NsaXBib2FyZCogY2xpcGJvYXJk
KQogICAgIH0KIAogICAgIEhhc2hNYXA8R3RrQ2xpcGJvYXJkKiwgUmVmUHRyPERhdGFPYmplY3RH
dGs+ID46Oml0ZXJhdG9yIGl0ID0gb2JqZWN0TWFwLmZpbmQoY2xpcGJvYXJkKTsKLSAgICByZXR1
cm4gaXQtPnNlY29uZC5nZXQoKTsKKyAgICByZXR1cm4gaXQtPnZhbHVlLmdldCgpOwogfQogCiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrRHJhZ0FuZERyb3BI
ZWxwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0RyYWdBbmREcm9wSGVs
cGVyLmNwcAppbmRleCA3NjNkMTIwZDA5NDE2MjI3MjY2MGM2MDYzMmExOTI5ODZmNTQyZWE0Li5m
YzJmNTZlNjE2NmViMWFhY2RiYWRhOGY1MmZlZjNjNmRkODg2NGNhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrRHJhZ0FuZERyb3BIZWxwZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtEcmFnQW5kRHJvcEhlbHBlci5jcHAKQEAgLTcw
LDcgKzcwLDcgQEAgdm9pZCBHdGtEcmFnQW5kRHJvcEhlbHBlcjo6aGFuZGxlR2V0RHJhZ0RhdGEo
R2RrRHJhZ0NvbnRleHQqIGNvbnRleHQsIEd0a1NlbGVjdGkKICAgICBEcmFnZ2luZ0RhdGFPYmpl
Y3RzTWFwOjppdGVyYXRvciBpdGVyYXRvciA9IG1fZHJhZ2dpbmdEYXRhT2JqZWN0cy5maW5kKGNv
bnRleHQpOwogICAgIGlmIChpdGVyYXRvciA9PSBtX2RyYWdnaW5nRGF0YU9iamVjdHMuZW5kKCkp
CiAgICAgICAgIHJldHVybjsKLSAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2Fy
ZEhlbHBlcigpLT5maWxsU2VsZWN0aW9uRGF0YShzZWxlY3Rpb25EYXRhLCBpbmZvLCBpdGVyYXRv
ci0+c2Vjb25kLmdldCgpKTsKKyAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2Fy
ZEhlbHBlcigpLT5maWxsU2VsZWN0aW9uRGF0YShzZWxlY3Rpb25EYXRhLCBpbmZvLCBpdGVyYXRv
ci0+dmFsdWUuZ2V0KCkpOwogfQogCiBzdHJ1Y3QgSGFuZGxlRHJhZ0xhdGVyRGF0YSB7CkBAIC0x
MTYsNyArMTE2LDcgQEAgdm9pZCBHdGtEcmFnQW5kRHJvcEhlbHBlcjo6aGFuZGxlRHJhZ0xlYXZl
KEdka0RyYWdDb250ZXh0KiBnZGtDb250ZXh0LCBEcmFnRXhpdGUKICAgICAvLyB0aGUgZHJhZy1k
cm9wIHNpZ25hbC4gV2Ugd2FudCB0aGUgYWN0aW9ucyBmb3IgZHJhZy1sZWF2ZSB0byBoYXBwZW4g
YWZ0ZXIKICAgICAvLyB0aG9zZSBmb3IgZHJhZy1kcm9wLCBzbyBzY2hlZHVsZSB0aGVtIHRvIGhh
cHBlbiBhc3luY2hyb25vdXNseSBoZXJlLgogICAgIEhhbmRsZURyYWdMYXRlckRhdGEqIGRhdGEg
PSBuZXcgSGFuZGxlRHJhZ0xhdGVyRGF0YTsKLSAgICBkYXRhLT5jb250ZXh0ID0gaXRlcmF0b3It
PnNlY29uZDsKKyAgICBkYXRhLT5jb250ZXh0ID0gaXRlcmF0b3ItPnZhbHVlOwogICAgIGRhdGEt
PmNvbnRleHQtPmV4aXRlZENhbGxiYWNrID0gZXhpdGVkQ2FsbGJhY2s7CiAgICAgZGF0YS0+Z2x1
ZSA9IHRoaXM7CiAgICAgZ190aW1lb3V0X2FkZCgwLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VG
dW5jPihoYW5kbGVEcmFnTGVhdmVMYXRlckNhbGxiYWNrKSwgZGF0YSk7CkBAIC0xNDAsNyArMTQw
LDcgQEAgUGFzc093blB0cjxEcmFnRGF0YT4gR3RrRHJhZ0FuZERyb3BIZWxwZXI6OmhhbmRsZURy
YWdNb3Rpb24oR2RrRHJhZ0NvbnRleHQqIGNvbnQKICAgICAgICAgbV9kcm9wcGluZ0NvbnRleHRz
LnNldChjb250ZXh0LCBkcm9wcGluZ0NvbnRleHQpOwogICAgICAgICBxdWVyeU5ld0Ryb3BDb250
ZXh0RGF0YShkcm9wcGluZ0NvbnRleHQsIG1fd2lkZ2V0LCB0aW1lKTsKICAgICB9IGVsc2Ugewot
ICAgICAgICBkcm9wcGluZ0NvbnRleHQgPSBpdGVyYXRvci0+c2Vjb25kOworICAgICAgICBkcm9w
cGluZ0NvbnRleHQgPSBpdGVyYXRvci0+dmFsdWU7CiAgICAgICAgIGRyb3BwaW5nQ29udGV4dC0+
bGFzdE1vdGlvblBvc2l0aW9uID0gcG9zaXRpb247CiAgICAgfQogCkBAIC0xNjIsNyArMTYyLDcg
QEAgUGFzc093blB0cjxEcmFnRGF0YT4gR3RrRHJhZ0FuZERyb3BIZWxwZXI6OmhhbmRsZURyYWdE
YXRhUmVjZWl2ZWQoR2RrRHJhZ0NvbnRleHQKICAgICBpZiAoaXRlcmF0b3IgPT0gbV9kcm9wcGlu
Z0NvbnRleHRzLmVuZCgpKQogICAgICAgICByZXR1cm4gYWRvcHRQdHIoc3RhdGljX2Nhc3Q8RHJh
Z0RhdGEqPigwKSk7CiAKLSAgICBEcm9wcGluZ0NvbnRleHQqIGRyb3BwaW5nQ29udGV4dCA9IGl0
ZXJhdG9yLT5zZWNvbmQ7CisgICAgRHJvcHBpbmdDb250ZXh0KiBkcm9wcGluZ0NvbnRleHQgPSBp
dGVyYXRvci0+dmFsdWU7CiAgICAgZHJvcHBpbmdDb250ZXh0LT5wZW5kaW5nRGF0YVJlcXVlc3Rz
LS07CiAgICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+Zmls
bERhdGFPYmplY3RGcm9tRHJvcERhdGEoc2VsZWN0aW9uRGF0YSwgaW5mbywgZHJvcHBpbmdDb250
ZXh0LT5kYXRhT2JqZWN0LmdldCgpKTsKIApAQCAtMTg1LDcgKzE4NSw3IEBAIFBhc3NPd25QdHI8
RHJhZ0RhdGE+IEd0a0RyYWdBbmREcm9wSGVscGVyOjpoYW5kbGVEcmFnRHJvcChHZGtEcmFnQ29u
dGV4dCogY29udGV4CiAgICAgaWYgKGl0ZXJhdG9yID09IG1fZHJvcHBpbmdDb250ZXh0cy5lbmQo
KSkKICAgICAgICAgcmV0dXJuIGFkb3B0UHRyKHN0YXRpY19jYXN0PERyYWdEYXRhKj4oMCkpOwog
Ci0gICAgRHJvcHBpbmdDb250ZXh0KiBkcm9wcGluZ0NvbnRleHQgPSBpdGVyYXRvci0+c2Vjb25k
OworICAgIERyb3BwaW5nQ29udGV4dCogZHJvcHBpbmdDb250ZXh0ID0gaXRlcmF0b3ItPnZhbHVl
OwogICAgIGRyb3BwaW5nQ29udGV4dC0+ZHJvcEhhcHBlbmVkID0gdHJ1ZTsKIAogICAgIHJldHVy
biBhZG9wdFB0cihuZXcgRHJhZ0RhdGEoZHJvcHBpbmdDb250ZXh0LT5kYXRhT2JqZWN0LmdldCgp
LCBwb3NpdGlvbiwgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVu
ZGVyVGhlbWVHdGszLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVt
ZUd0azMuY3BwCmluZGV4IDcyMGYwZmQzNjAxYWQ1NWM0MWYwNDhkYTM4ZTkwYjE0MGM3ODQyYTku
LmVlNDJkNWRjOTBhODNmNTY0ODg2MjZkYzM5ZTU2NDczMjJlYWZhNzQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0azMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0azMuY3BwCkBAIC01Niw3ICs1Niw3
IEBAIHN0YXRpYyB2b2lkIGd0a1N0eWxlQ2hhbmdlZENhbGxiYWNrKEdPYmplY3QqLCBHUGFyYW1T
cGVjKikKIHsKICAgICBTdHlsZUNvbnRleHRNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHN0eWxl
Q29udGV4dE1hcCgpLmVuZCgpOwogICAgIGZvciAoU3R5bGVDb250ZXh0TWFwOjpjb25zdF9pdGVy
YXRvciBpdGVyID0gc3R5bGVDb250ZXh0TWFwKCkuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRl
cikKLSAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfaW52YWxpZGF0ZShpdGVyLT5zZWNvbmQuZ2V0
KCkpOworICAgICAgICBndGtfc3R5bGVfY29udGV4dF9pbnZhbGlkYXRlKGl0ZXItPnZhbHVlLmdl
dCgpKTsKIAogICAgIFBhZ2U6OnNjaGVkdWxlRm9yY2VkU3R5bGVSZWNhbGNGb3JBbGxQYWdlcygp
OwogfQpAQCAtNzksNyArNzksNyBAQCBzdGF0aWMgR3RrU3R5bGVDb250ZXh0KiBnZXRTdHlsZUNv
bnRleHQoR1R5cGUgd2lkZ2V0VHlwZSkKIHsKICAgICBTdHlsZUNvbnRleHRNYXA6OkFkZFJlc3Vs
dCByZXN1bHQgPSBzdHlsZUNvbnRleHRNYXAoKS5hZGQod2lkZ2V0VHlwZSwgMCk7CiAgICAgaWYg
KCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+c2Vj
b25kLmdldCgpOworICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsK
IAogICAgIEd0a1dpZGdldFBhdGgqIHBhdGggPSBndGtfd2lkZ2V0X3BhdGhfbmV3KCk7CiAgICAg
Z3RrX3dpZGdldF9wYXRoX2FwcGVuZF90eXBlKHBhdGgsIHdpZGdldFR5cGUpOwpAQCAtMTExLDcg
KzExMSw3IEBAIHN0YXRpYyBHdGtTdHlsZUNvbnRleHQqIGdldFN0eWxlQ29udGV4dChHVHlwZSB3
aWRnZXRUeXBlKQogICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9wYXRoKGNvbnRleHQuZ2V0KCks
IHBhdGgpOwogICAgIGd0a193aWRnZXRfcGF0aF9mcmVlKHBhdGgpOwogCi0gICAgcmVzdWx0Lml0
ZXJhdG9yLT5zZWNvbmQgPSBjb250ZXh0OworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBj
b250ZXh0OwogICAgIHJldHVybiBjb250ZXh0LmdldCgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMubW0KaW5kZXggZTQ3NDY4YmQ1NjAz
ODY1ODkyZTJjMTRkOTRhMzEzZGFhMDc2YTJjMy4uMmM4MGEyOTg2ZmZjOTk3N2RmNWViMWIwZTZh
NzgxMzVmYzE1NzhmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Nj
cm9sbGJhclRoZW1lTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3Jv
bGxiYXJUaGVtZU1hYy5tbQpAQCAtODUsOCArODUsOCBAQCBzdGF0aWMgU2Nyb2xsYmFyUGFpbnRl
ck1hcCogc2Nyb2xsYmFyTWFwKCkKICAgICAgICAgcmV0dXJuOwogICAgIFNjcm9sbGJhclBhaW50
ZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IHNjcm9sbGJhck1hcCgpLT5lbmQoKTsKICAgICBmb3IgKFNj
cm9sbGJhclBhaW50ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gc2Nyb2xsYmFyTWFwKCktPmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpdC0+Zmlyc3QtPnN0eWxlQ2hhbmdlZCgpOwot
ICAgICAgICBpdC0+Zmlyc3QtPmludmFsaWRhdGUoKTsKKyAgICAgICAgaXQtPmtleS0+c3R5bGVD
aGFuZ2VkKCk7CisgICAgICAgIGl0LT5rZXktPmludmFsaWRhdGUoKTsKICAgICB9CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbFN0b3Jh
Z2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFsU3RvcmFn
ZS5jcHAKaW5kZXggZjA5ODRmODg1NThkNWM3OWUyODM0ZTFhY2IyODZkOGE3OTdhMjVlNS4uMjgz
N2ZmNjEzOTJmMGE1YjMxNWRiNzliMjM5MTYyMTdmZjc4MmMwOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFsU3RvcmFnZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFsU3RvcmFnZS5jcHAKQEAgLTE0
Nyw3ICsxNDcsNyBAQCBib29sIENyZWRlbnRpYWxTdG9yYWdlOjpzZXQoY29uc3QgQ3JlZGVudGlh
bCYgY3JlZGVudGlhbCwgY29uc3QgS1VSTCYgdXJsKQogICAgIGlmIChpdGVyID09IHBhdGhUb0Rl
ZmF1bHRQcm90ZWN0aW9uU3BhY2VNYXAoKS5lbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIEFTU0VSVChvcmlnaW5zV2l0aENyZWRlbnRpYWxzKCkuY29udGFpbnMob3JpZ2luU3RyaW5n
RnJvbVVSTCh1cmwpKSk7Ci0gICAgcHJvdGVjdGlvblNwYWNlVG9DcmVkZW50aWFsTWFwKCkuc2V0
KGl0ZXItPnNlY29uZCwgY3JlZGVudGlhbCk7CisgICAgcHJvdGVjdGlvblNwYWNlVG9DcmVkZW50
aWFsTWFwKCkuc2V0KGl0ZXItPnZhbHVlLCBjcmVkZW50aWFsKTsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIApAQCAtMTU2LDcgKzE1Niw3IEBAIENyZWRlbnRpYWwgQ3JlZGVudGlhbFN0b3JhZ2U6Omdl
dChjb25zdCBLVVJMJiB1cmwpCiAgICAgUGF0aFRvRGVmYXVsdFByb3RlY3Rpb25TcGFjZU1hcDo6
aXRlcmF0b3IgaXRlciA9IGZpbmREZWZhdWx0UHJvdGVjdGlvblNwYWNlRm9yVVJMKHVybCk7CiAg
ICAgaWYgKGl0ZXIgPT0gcGF0aFRvRGVmYXVsdFByb3RlY3Rpb25TcGFjZU1hcCgpLmVuZCgpKQog
ICAgICAgICByZXR1cm4gQ3JlZGVudGlhbCgpOwotICAgIHJldHVybiBwcm90ZWN0aW9uU3BhY2VU
b0NyZWRlbnRpYWxNYXAoKS5nZXQoaXRlci0+c2Vjb25kKTsKKyAgICByZXR1cm4gcHJvdGVjdGlv
blNwYWNlVG9DcmVkZW50aWFsTWFwKCkuZ2V0KGl0ZXItPnZhbHVlKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9IVFRQSGVhZGVyTWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRU
UEhlYWRlck1hcC5jcHAKaW5kZXggNTAwOTFlMTlkM2FmNTZmZjRhOGRmMTc1YmY4OTc4NzAwNzYx
NDI4MC4uZGVmZTFhZTg0YmYwYWRmMDc3OTQ5NTViMTFhNWRjNzNlYTAyM2UyNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQSGVhZGVyTWFwLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBIZWFkZXJNYXAuY3BwCkBAIC01
Miw3ICs1Miw3IEBAIFBhc3NPd25QdHI8Q3Jvc3NUaHJlYWRIVFRQSGVhZGVyTWFwRGF0YT4gSFRU
UEhlYWRlck1hcDo6Y29weURhdGEoKSBjb25zdAogCiAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3Rf
aXRlcmF0b3IgZW5kX2l0ID0gZW5kKCk7CiAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IGJlZ2luKCk7IGl0ICE9IGVuZF9pdDsgKytpdCkgewotICAgICAgICBkYXRh
LT5hcHBlbmQobWFrZV9wYWlyKGl0LT5maXJzdC5zdHJpbmcoKS5pc29sYXRlZENvcHkoKSwgaXQt
PnNlY29uZC5pc29sYXRlZENvcHkoKSkpOworICAgICAgICBkYXRhLT5hcHBlbmQobWFrZV9wYWly
KGl0LT5rZXkuc3RyaW5nKCkuaXNvbGF0ZWRDb3B5KCksIGl0LT52YWx1ZS5pc29sYXRlZENvcHko
KSkpOwogICAgIH0KICAgICByZXR1cm4gZGF0YS5yZWxlYXNlKCk7CiB9CkBAIC0xMDAsNyArMTAw
LDcgQEAgU3RyaW5nIEhUVFBIZWFkZXJNYXA6OmdldChjb25zdCBjaGFyKiBuYW1lKSBjb25zdAog
ICAgIGNvbnN0X2l0ZXJhdG9yIGkgPSBmaW5kPGNvbnN0IGNoYXIqLCBDYXNlRm9sZGluZ0NTdHJp
bmdUcmFuc2xhdG9yPihuYW1lKTsKICAgICBpZiAoaSA9PSBlbmQoKSkKICAgICAgICAgcmV0dXJu
IFN0cmluZygpOwotICAgIHJldHVybiBpLT5zZWNvbmQ7CisgICAgcmV0dXJuIGktPnZhbHVlOwog
fQogICAgIAogYm9vbCBIVFRQSGVhZGVyTWFwOjpjb250YWlucyhjb25zdCBjaGFyKiBuYW1lKSBj
b25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9NSU1FSGVh
ZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvTUlNRUhlYWRlci5jcHAK
aW5kZXggNWQ2Yjg1OGY0NmU0MzgzZmNiMmZlYTYyODU4YWY3NTMyZDQzYTVhZi4uZjRlM2ViZjY3
NGRlNmJkMWQyNGE5NTkwYTQ4MThiZWI2ZmQ4ZGU2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9NSU1FSGVhZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL01JTUVIZWFkZXIuY3BwCkBAIC04Niw3ICs4Niw3IEBAIFBhc3NSZWZQ
dHI8TUlNRUhlYWRlcj4gTUlNRUhlYWRlcjo6cGFyc2VIZWFkZXIoU2hhcmVkQnVmZmVyQ2h1bmtS
ZWFkZXIqIGJ1ZmZlcikKICAgICBLZXlWYWx1ZU1hcDo6aXRlcmF0b3IgbWltZVBhcmFtZXRlcnNJ
dGVyYXRvciA9IGtleVZhbHVlUGFpcnMuZmluZCgiY29udGVudC10eXBlIik7CiAgICAgaWYgKG1p
bWVQYXJhbWV0ZXJzSXRlcmF0b3IgIT0ga2V5VmFsdWVQYWlycy5lbmQoKSkgewogICAgICAgICAv
LyBGSVhNRTogbWFrZSBDb250ZW50VHlwZVBhcnNlciBtb3JlIGZsZXhpYmxlIHNvIHdlIGRvbid0
IGhhdmUgdG8gc3ludGhlc2l6ZSB0aGUgIkNvbnRlbnQtVHlwZToiLgotICAgICAgICBDb250ZW50
VHlwZVBhcnNlciBjb250ZW50VHlwZVBhcnNlcihtYWtlU3RyaW5nKCJDb250ZW50LVR5cGU6Iiwg
bWltZVBhcmFtZXRlcnNJdGVyYXRvci0+c2Vjb25kKSk7CisgICAgICAgIENvbnRlbnRUeXBlUGFy
c2VyIGNvbnRlbnRUeXBlUGFyc2VyKG1ha2VTdHJpbmcoIkNvbnRlbnQtVHlwZToiLCBtaW1lUGFy
YW1ldGVyc0l0ZXJhdG9yLT52YWx1ZSkpOwogICAgICAgICBtaW1lSGVhZGVyLT5tX2NvbnRlbnRU
eXBlID0gY29udGVudFR5cGVQYXJzZXIubWltZVR5cGUoKTsKICAgICAgICAgaWYgKCFtaW1lSGVh
ZGVyLT5pc011bHRpcGFydCgpKQogICAgICAgICAgICAgbWltZUhlYWRlci0+bV9jaGFyc2V0ID0g
Y29udGVudFR5cGVQYXJzZXIuY2hhcnNldCgpLnN0cmlwV2hpdGVTcGFjZSgpOwpAQCAtMTA1LDEx
ICsxMDUsMTEgQEAgUGFzc1JlZlB0cjxNSU1FSGVhZGVyPiBNSU1FSGVhZGVyOjpwYXJzZUhlYWRl
cihTaGFyZWRCdWZmZXJDaHVua1JlYWRlciogYnVmZmVyKQogCiAgICAgbWltZVBhcmFtZXRlcnNJ
dGVyYXRvciA9IGtleVZhbHVlUGFpcnMuZmluZCgiY29udGVudC10cmFuc2Zlci1lbmNvZGluZyIp
OwogICAgIGlmIChtaW1lUGFyYW1ldGVyc0l0ZXJhdG9yICE9IGtleVZhbHVlUGFpcnMuZW5kKCkp
Ci0gICAgICAgIG1pbWVIZWFkZXItPm1fY29udGVudFRyYW5zZmVyRW5jb2RpbmcgPSBwYXJzZUNv
bnRlbnRUcmFuc2ZlckVuY29kaW5nKG1pbWVQYXJhbWV0ZXJzSXRlcmF0b3ItPnNlY29uZCk7Cisg
ICAgICAgIG1pbWVIZWFkZXItPm1fY29udGVudFRyYW5zZmVyRW5jb2RpbmcgPSBwYXJzZUNvbnRl
bnRUcmFuc2ZlckVuY29kaW5nKG1pbWVQYXJhbWV0ZXJzSXRlcmF0b3ItPnZhbHVlKTsKIAogICAg
IG1pbWVQYXJhbWV0ZXJzSXRlcmF0b3IgPSBrZXlWYWx1ZVBhaXJzLmZpbmQoImNvbnRlbnQtbG9j
YXRpb24iKTsKICAgICBpZiAobWltZVBhcmFtZXRlcnNJdGVyYXRvciAhPSBrZXlWYWx1ZVBhaXJz
LmVuZCgpKQotICAgICAgICBtaW1lSGVhZGVyLT5tX2NvbnRlbnRMb2NhdGlvbiA9IG1pbWVQYXJh
bWV0ZXJzSXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgbWltZUhlYWRlci0+bV9jb250ZW50TG9j
YXRpb24gPSBtaW1lUGFyYW1ldGVyc0l0ZXJhdG9yLT52YWx1ZTsKIAogICAgIHJldHVybiBtaW1l
SGVhZGVyLnJlbGVhc2UoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9SZXNvdXJjZUhhbmRsZS5jcHAKaW5kZXggN2RkYzQ3ZTRlYTc5OWE0NmRlZTZmMzJjZmQw
NzhlZjc1MTU0ZjFlZS4uNmQxMmY5ZDg5YjAyNDc3NDZhNTdlMWJiY2FmYjJjMjE3ZDU5MTAzNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRs
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRs
ZS5jcHAKQEAgLTcxLDcgKzcxLDcgQEAgUGFzc1JlZlB0cjxSZXNvdXJjZUhhbmRsZT4gUmVzb3Vy
Y2VIYW5kbGU6OmNyZWF0ZShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY28KICAgICBCdWls
dGluUmVzb3VyY2VIYW5kbGVDb25zdHJ1Y3Rvck1hcDo6aXRlcmF0b3IgcHJvdG9jb2xNYXBJdGVt
ID0gYnVpbHRpblJlc291cmNlSGFuZGxlQ29uc3RydWN0b3JNYXAoKS5maW5kKHJlcXVlc3QudXJs
KCkucHJvdG9jb2woKSk7CiAKICAgICBpZiAocHJvdG9jb2xNYXBJdGVtICE9IGJ1aWx0aW5SZXNv
dXJjZUhhbmRsZUNvbnN0cnVjdG9yTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiBwcm90b2Nv
bE1hcEl0ZW0tPnNlY29uZChyZXF1ZXN0LCBjbGllbnQpOworICAgICAgICByZXR1cm4gcHJvdG9j
b2xNYXBJdGVtLT52YWx1ZShyZXF1ZXN0LCBjbGllbnQpOwogCiAgICAgUmVmUHRyPFJlc291cmNl
SGFuZGxlPiBuZXdIYW5kbGUoYWRvcHRSZWYobmV3IFJlc291cmNlSGFuZGxlKHJlcXVlc3QsIGNs
aWVudCwgZGVmZXJzTG9hZGluZywgc2hvdWxkQ29udGVudFNuaWZmKSkpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNw
cAppbmRleCAzNTA5NzkyOTI3OGM3NjA2NGM0YjBkZWI5YWZlMzlmZjE5YmU0YzI0Li41MzE1YzFl
Mzc2YWYyNjg2NGYzODE2MjI1NTliMDliOTZiYTFlMjdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHAKQEAgLTM3
Myw3ICszNzMsNyBAQCB2b2lkIFJlc291cmNlUmVxdWVzdEJhc2U6OmFkZEhUVFBIZWFkZXJGaWVs
ZChjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cgogICAgIHVwZGF0ZVJlc291cmNl
UmVxdWVzdCgpOwogICAgIEhUVFBIZWFkZXJNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX2h0dHBI
ZWFkZXJGaWVsZHMuYWRkKG5hbWUsIHZhbHVlKTsKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5
KQotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCArPSAiLCIgKyB2YWx1ZTsKKyAgICAg
ICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSArPSAiLCIgKyB2YWx1ZTsKIAogICAgIGlmICh1cmwo
KS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpCiAgICAgICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBk
YXRlZCA9IGZhbHNlOwpAQCAtMzgzLDcgKzM4Myw3IEBAIHZvaWQgUmVzb3VyY2VSZXF1ZXN0QmFz
ZTo6YWRkSFRUUEhlYWRlckZpZWxkcyhjb25zdCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJGaWVsZHMp
CiB7CiAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaGVhZGVyRmllbGRz
LmVuZCgpOwogICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBoZWFk
ZXJGaWVsZHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBhZGRIVFRQSGVhZGVy
RmllbGQoaXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsKKyAgICAgICAgYWRkSFRUUEhlYWRlckZpZWxk
KGl0LT5rZXksIGl0LT52YWx1ZSk7CiB9CiAKIGJvb2wgZXF1YWxJZ25vcmluZ0hlYWRlckZpZWxk
cyhjb25zdCBSZXNvdXJjZVJlcXVlc3RCYXNlJiBhLCBjb25zdCBSZXNvdXJjZVJlcXVlc3RCYXNl
JiBiKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2Jl
cnJ5L05ldHdvcmtKb2IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFj
a2JlcnJ5L05ldHdvcmtKb2IuY3BwCmluZGV4IGE0YmFmZDRjOThiNzkwYjVhM2Y0M2Y5ODIxNmVj
ZGM3MWUxNTc4NmYuLjZhMmQxZTgzNTJjOWU3ZTVkNTJiYmNkYmE4ZTNlNmUxMGJjNjMzZjQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9OZXR3
b3JrSm9iLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVy
cnkvTmV0d29ya0pvYi5jcHAKQEAgLTI0NSw5ICsyNDUsOSBAQCB2b2lkIE5ldHdvcmtKb2I6Om5v
dGlmeUhlYWRlcnNSZWNlaXZlZChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TmV0d29ya1JlcXVlc3Q6
OkhlYQogICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpOZXR3b3JrUmVxdWVzdDo6SGVhZGVyTGlz
dDo6Y29uc3RfaXRlcmF0b3IgZW5kSXQgPSBoZWFkZXJzLmVuZCgpOwogICAgIGZvciAoQmxhY2tC
ZXJyeTo6UGxhdGZvcm06Ok5ldHdvcmtSZXF1ZXN0OjpIZWFkZXJMaXN0Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IGhlYWRlcnMuYmVnaW4oKTsgaXQgIT0gZW5kSXQ7ICsraXQpIHsKICAgICAgICAgaWYg
KHNob3VsZERlZmVyTG9hZGluZygpKQotICAgICAgICAgICAgbV9kZWZlcnJlZERhdGEuZGVmZXJI
ZWFkZXJSZWNlaXZlZChpdC0+Zmlyc3QuY19zdHIoKSwgaXQtPnNlY29uZC5jX3N0cigpKTsKKyAg
ICAgICAgICAgIG1fZGVmZXJyZWREYXRhLmRlZmVySGVhZGVyUmVjZWl2ZWQoaXQtPmtleS5jX3N0
cigpLCBpdC0+dmFsdWUuY19zdHIoKSk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgU3Ry
aW5nIGtleVN0cmluZyhpdC0+Zmlyc3QuY19zdHIoKSk7CisgICAgICAgICAgICBTdHJpbmcga2V5
U3RyaW5nKGl0LT5rZXkuY19zdHIoKSk7CiAgICAgICAgICAgICBTdHJpbmcgdmFsdWVTdHJpbmc7
CiAgICAgICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2Uoa2V5U3RyaW5nLCAiTG9jYXRpb24i
KSkgewogICAgICAgICAgICAgICAgIC8vIExvY2F0aW9uLCBsaWtlIGFsbCBoZWFkZXJzLCBpcyBz
dXBwb3NlZCB0byBiZSBMYXRpbi0xLiBCdXQgc29tZSBzaXRlcyAod2lraXBlZGlhKSBzZW5kIGl0
IGluIFVURi04LgpAQCAtMjU4LDExICsyNTgsMTEgQEAgdm9pZCBOZXR3b3JrSm9iOjpub3RpZnlI
ZWFkZXJzUmVjZWl2ZWQoQmxhY2tCZXJyeTo6UGxhdGZvcm06Ok5ldHdvcmtSZXF1ZXN0OjpIZWEK
ICAgICAgICAgICAgICAgICAvLyBGSVhNRTogbWF5YmUgd2Ugc2hvdWxkIGRvIHRoaXMgd2l0aCBv
dGhlciBoZWFkZXJzPwogICAgICAgICAgICAgICAgIC8vIFNraXAgaXQgZm9yIG5vdyAtIHdlIGRv
bid0IHdhbnQgdG8gcmV3cml0ZSByYW5kb20gYnl0ZXMgdW5sZXNzIHdlJ3JlIHN1cmUuIChEZWZp
bml0ZWx5IGRvbid0IHdhbnQgdG8KICAgICAgICAgICAgICAgICAvLyByZXdyaXRlIGNvb2tpZXMs
IGZvciBpbnN0YW5jZS4pIE5lZWRzIG1vcmUgaW52ZXN0aWdhdGlvbi4KLSAgICAgICAgICAgICAg
ICB2YWx1ZVN0cmluZyA9IFN0cmluZzo6ZnJvbVVURjgoaXQtPnNlY29uZC5jX3N0cigpKTsKKyAg
ICAgICAgICAgICAgICB2YWx1ZVN0cmluZyA9IFN0cmluZzo6ZnJvbVVURjgoaXQtPnZhbHVlLmNf
c3RyKCkpOwogICAgICAgICAgICAgICAgIGlmICh2YWx1ZVN0cmluZy5pc051bGwoKSkKLSAgICAg
ICAgICAgICAgICAgICAgdmFsdWVTdHJpbmcgPSBpdC0+c2Vjb25kLmNfc3RyKCk7CisgICAgICAg
ICAgICAgICAgICAgIHZhbHVlU3RyaW5nID0gaXQtPnZhbHVlLmNfc3RyKCk7CiAgICAgICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgICAgICB2YWx1ZVN0cmluZyA9IGl0LT5zZWNvbmQuY19zdHIo
KTsKKyAgICAgICAgICAgICAgICB2YWx1ZVN0cmluZyA9IGl0LT52YWx1ZS5jX3N0cigpOwogCiAg
ICAgICAgICAgICBoYW5kbGVOb3RpZnlIZWFkZXJSZWNlaXZlZChrZXlTdHJpbmcsIHZhbHVlU3Ry
aW5nKTsKICAgICAgICAgfQpAQCAtMzM2LDE0ICszMzYsMTQgQEAgdm9pZCBOZXR3b3JrSm9iOjpo
YW5kbGVOb3RpZnlNdWx0aXBhcnRIZWFkZXJSZWNlaXZlZChjb25zdCBTdHJpbmcmIGtleSwgY29u
c3QgU3QKICAgICAgICAgICAgIGJvb2wgbmVlZHNDb3B5ZnJvbU9yaWdpbmFsUmVzcG9uc2UgPSB0
cnVlOwogICAgICAgICAgICAgaW50IHJlcGxhY2VIZWFkZXJzSW5kZXggPSAwOwogICAgICAgICAg
ICAgd2hpbGUgKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpNdWx0aXBhcnRTdHJlYW06OnJlcGxhY2VI
ZWFkZXJzW3JlcGxhY2VIZWFkZXJzSW5kZXhdKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGl0LT5m
aXJzdC5sb3dlcigpID09IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpNdWx0aXBhcnRTdHJlYW06OnJl
cGxhY2VIZWFkZXJzW3JlcGxhY2VIZWFkZXJzSW5kZXhdKSB7CisgICAgICAgICAgICAgICAgaWYg
KGl0LT5rZXkubG93ZXIoKSA9PSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TXVsdGlwYXJ0U3RyZWFt
OjpyZXBsYWNlSGVhZGVyc1tyZXBsYWNlSGVhZGVyc0luZGV4XSkgewogICAgICAgICAgICAgICAg
ICAgICBuZWVkc0NvcHlmcm9tT3JpZ2luYWxSZXNwb25zZSA9IGZhbHNlOwogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcmVwbGFj
ZUhlYWRlcnNJbmRleCsrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKG5lZWRzQ29w
eWZyb21PcmlnaW5hbFJlc3BvbnNlKQotICAgICAgICAgICAgICAgIG1fbXVsdGlwYXJ0UmVzcG9u
c2UtPnNldEhUVFBIZWFkZXJGaWVsZChpdC0+Zmlyc3QsIGl0LT5zZWNvbmQpOworICAgICAgICAg
ICAgICAgIG1fbXVsdGlwYXJ0UmVzcG9uc2UtPnNldEhUVFBIZWFkZXJGaWVsZChpdC0+a2V5LCBp
dC0+dmFsdWUpOwogICAgICAgICB9CiAKICAgICAgICAgbV9tdWx0aXBhcnRSZXNwb25zZS0+c2V0
SXNNdWx0aXBhcnRQYXlsb2FkKHRydWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlUmVxdWVzdEJsYWNrQmVycnkuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlUmVxdWVz
dEJsYWNrQmVycnkuY3BwCmluZGV4IDI0ZTU2ZGJhYjNjNTljZDI5OWQ3M2E1YTQ0NzI1NjkzMWU1
NzY3MmIuLjdlNDllNjVhZjYyOWZjN2IxM2VkM2RlOWI2NmI3ODg4NDQzNjA4YjUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJjZVJl
cXVlc3RCbGFja0JlcnJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2JsYWNrYmVycnkvUmVzb3VyY2VSZXF1ZXN0QmxhY2tCZXJyeS5jcHAKQEAgLTE1MCw5ICsxNTAs
OSBAQCB2b2lkIFJlc291cmNlUmVxdWVzdDo6aW5pdGlhbGl6ZVBsYXRmb3JtUmVxdWVzdChOZXR3
b3JrUmVxdWVzdCYgcGxhdGZvcm1SZXF1ZXN0LAogICAgICAgICB9CiAKICAgICAgICAgZm9yIChI
VFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGh0dHBIZWFkZXJGaWVsZHMoKS5iZWdp
bigpOyBpdCAhPSBodHRwSGVhZGVyRmllbGRzKCkuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgICAg
IFN0cmluZyBrZXkgPSBpdC0+Zmlyc3Q7Ci0gICAgICAgICAgICBTdHJpbmcgdmFsdWUgPSBpdC0+
c2Vjb25kOwotICAgICAgICAgICAgaWYgKCFrZXkuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBT
dHJpbmcga2V5ID0gaXQtPmtleTsKKyAgICAgICAgICAgIFN0cmluZyB2YWx1ZSA9IGl0LT52YWx1
ZTsKKyAgICAgICAgICAgIGlmICgha2V5LmlzRW1wdHkoKSAmJiAhdmFsdWUuaXNFbXB0eSgpKSB7
CiAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBjaGVjayB0aGUgZW5jb2RpbmcgYW5kIGVu
Y29kZSB0aGUgY29va2llJ3MgdmFsdWUgdXNpbmcgbGF0aW4xIG9yIHV0ZjggdG8gc3VwcG9ydCB1
bmljb2RlIGNoYXJhY3RlcnMuCiAgICAgICAgICAgICAgICAgLy8gV2Ugd28ndCB1c2UgdGhlIG9s
ZCBjb29raWVzIG9mIHJlc291cmNlUmVxdWVzdCBmb3IgbmV3IGxvY2F0aW9uIGJlY2F1c2UgdGhl
c2UgY29va2llcyBtYXkgYmUgY2hhbmdlZCBieSByZWRpcmVjdGlvbi4KICAgICAgICAgICAgICAg
ICBpZiAoIWVxdWFsSWdub3JpbmdDYXNlKGtleSwgIkNvb2tpZSIpKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRk5ldC5j
cHAKaW5kZXggMGYzOWViMGJkOGM3NmQ1MTEwM2RhZmJlYzNmYjExYTVhZDZkNDRlYS4uMzc0NWY2
MzFiYTBmMjE4ZTgyZWI0ODgxMzgwZTgyMzkyYzA2MDIxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZOZXQuY3Bw
CkBAIC00MTgsNyArNDE4LDcgQEAgc3RhdGljIENGVVJMUmVxdWVzdFJlZiBtYWtlRmluYWxSZXF1
ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgYm9vbCBzaG8KICAgICAgICAgaWYg
KCFzc2xQcm9wcykKICAgICAgICAgICAgIHNzbFByb3BzLmFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3Jl
YXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwLCAma0NGVHlwZURpY3Rpb25hcnlLZXlD
YWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CiAjaWYgUExBVEZP
Uk0oV0lOKQotICAgICAgICB3a1NldENsaWVudENlcnRpZmljYXRlSW5TU0xQcm9wZXJ0aWVzKHNz
bFByb3BzLmdldCgpLCAoY2xpZW50Q2VydC0+c2Vjb25kKS5nZXQoKSk7CisgICAgICAgIHdrU2V0
Q2xpZW50Q2VydGlmaWNhdGVJblNTTFByb3BlcnRpZXMoc3NsUHJvcHMuZ2V0KCksIChjbGllbnRD
ZXJ0LT52YWx1ZSkuZ2V0KCkpOwogI2VuZGlmCiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlUmVxdWVzdENGTmV0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0Q0ZOZXQuY3Bw
CmluZGV4IDI3OWQ3NTViMmM4YjIyNmJhZjgxY2I0NzE3NThiZjZjODc1ZTdhZjMuLmM0ZWFlMmVj
NjVlMTYzZWFlOTBiOTdlYjVlZTNjY2JmYjUyYjJlZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0Q0ZOZXQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0Q0ZOZXQuY3Bw
CkBAIC0xMjAsOCArMTIwLDggQEAgc3RhdGljIGlubGluZSB2b2lkIHNldEhlYWRlckZpZWxkcyhD
Rk11dGFibGVVUkxSZXF1ZXN0UmVmIHJlcXVlc3QsIGNvbnN0IEhUVFBIZWEKIAogICAgIEhUVFBI
ZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHJlcXVlc3RIZWFkZXJzLmVuZCgpOwogICAg
IGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSByZXF1ZXN0SGVhZGVycy5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgQ0ZTdHJpbmdSZWYga2V5ID0gaXQt
PmZpcnN0LmNyZWF0ZUNGU3RyaW5nKCk7Ci0gICAgICAgIENGU3RyaW5nUmVmIHZhbHVlID0gaXQt
PnNlY29uZC5jcmVhdGVDRlN0cmluZygpOworICAgICAgICBDRlN0cmluZ1JlZiBrZXkgPSBpdC0+
a2V5LmNyZWF0ZUNGU3RyaW5nKCk7CisgICAgICAgIENGU3RyaW5nUmVmIHZhbHVlID0gaXQtPnZh
bHVlLmNyZWF0ZUNGU3RyaW5nKCk7CiAgICAgICAgIENGVVJMUmVxdWVzdFNldEhUVFBIZWFkZXJG
aWVsZFZhbHVlKHJlcXVlc3QsIGtleSwgdmFsdWUpOwogICAgICAgICBDRlJlbGVhc2Uoa2V5KTsK
ICAgICAgICAgQ0ZSZWxlYXNlKHZhbHVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1hbmFnZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHAKaW5k
ZXggZjBmZDQwM2Y4Y2NjMzFmMDFkNmZmOGQwMjk2NTVhNTkyMTBmMmFjYy4uMGY4ZTVhZDcxYmVj
YTdiZGZlYzkzMzA5OGM5ZGIzYjU0YmIxMDhjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5j
cHAKQEAgLTcwMyw4ICs3MDMsOCBAQCB2b2lkIFJlc291cmNlSGFuZGxlTWFuYWdlcjo6aW5pdGlh
bGl6ZUhhbmRsZShSZXNvdXJjZUhhbmRsZSogam9iKQogICAgICAgICBIVFRQSGVhZGVyTWFwIGN1
c3RvbUhlYWRlcnMgPSBqb2ItPmZpcnN0UmVxdWVzdCgpLmh0dHBIZWFkZXJGaWVsZHMoKTsKICAg
ICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY3VzdG9tSGVhZGVycy5l
bmQoKTsKICAgICAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGN1
c3RvbUhlYWRlcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBTdHJp
bmcga2V5ID0gaXQtPmZpcnN0OwotICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0gaXQtPnNlY29u
ZDsKKyAgICAgICAgICAgIFN0cmluZyBrZXkgPSBpdC0+a2V5OworICAgICAgICAgICAgU3RyaW5n
IHZhbHVlID0gaXQtPnZhbHVlOwogICAgICAgICAgICAgU3RyaW5nIGhlYWRlclN0cmluZyhrZXkp
OwogICAgICAgICAgICAgaGVhZGVyU3RyaW5nLmFwcGVuZCgiOiAiKTsKICAgICAgICAgICAgIGhl
YWRlclN0cmluZy5hcHBlbmQodmFsdWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VSZXF1ZXN0TWFjLm1tIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VSZXF1ZXN0TWFjLm1tCmluZGV4IDEyMGY0YWNi
NTZiY2MwNGY1NTdjZmM4YWYyNGRmNDhiOTMxZWQzZWEuLjIxNDYzY2ZkYTY5ZmQ4OTc1MzA4ZWNi
ZDdiMTQ4OWQ4MmRlOGQ4ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvbWFjL1Jlc291cmNlUmVxdWVzdE1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZVJlcXVlc3RNYWMubW0KQEAgLTE1Miw3ICsxNTIsNyBA
QCB2b2lkIFJlc291cmNlUmVxdWVzdDo6ZG9VcGRhdGVQbGF0Zm9ybVJlcXVlc3QoKQogICAgICAg
ICBbbnNSZXF1ZXN0IHNldFZhbHVlOm5pbCBmb3JIVFRQSGVhZGVyRmllbGQ6W29sZEhlYWRlckZp
ZWxkTmFtZXMgb2JqZWN0QXRJbmRleDppIC0gMV1dOwogICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IGh0dHBIZWFkZXJGaWVsZHMoKS5lbmQoKTsKICAgICBmb3IgKEhUVFBI
ZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaHR0cEhlYWRlckZpZWxkcygpLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgW25zUmVxdWVzdCBzZXRWYWx1ZTppdC0+c2Vjb25k
IGZvckhUVFBIZWFkZXJGaWVsZDppdC0+Zmlyc3RdOworICAgICAgICBbbnNSZXF1ZXN0IHNldFZh
bHVlOml0LT52YWx1ZSBmb3JIVFRQSGVhZGVyRmllbGQ6aXQtPmtleV07CiAKICAgICAvLyBUaGUg
YmVsb3cgY2hlY2sgY2FuIGJlIHJlbW92ZWQgb25jZSB3ZSByZXF1aXJlIGEgdmVyc2lvbiBvZiBG
b3VuZGF0aW9uIHdpdGggLVtOU011dGFibGVVUkxSZXF1ZXN0IHNldENvbnRlbnREaXNwb3NpdGlv
bkVuY29kaW5nRmFsbGJhY2tBcnJheTpdIG1ldGhvZC4KICAgICBzdGF0aWMgYm9vbCBzdXBwb3J0
c0NvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheSA9IFtOU011dGFibGVVUkxS
ZXF1ZXN0IGluc3RhbmNlc1Jlc3BvbmRUb1NlbGVjdG9yOkBzZWxlY3RvcihzZXRDb250ZW50RGlz
cG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXk6KV07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3F0L1Jlc291cmNlUmVxdWVzdFF0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvcXQvUmVzb3VyY2VSZXF1ZXN0UXQuY3BwCmluZGV4IGJm
YjI0MTQwYmRmNGY1ZWYxOWI5ZDlhYTIxNWY1ZWI4MWRiMzAwMTkuLjRjMjJhNmEzYTg0MjMwMjM5
N2U0N2RhZDkyYzNhMjNmNTQ2ZGY1ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvcXQvUmVzb3VyY2VSZXF1ZXN0UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvcXQvUmVzb3VyY2VSZXF1ZXN0UXQuY3BwCkBAIC00OSw4ICs0OSw4
IEBAIFFOZXR3b3JrUmVxdWVzdCBSZXNvdXJjZVJlcXVlc3Q6OnRvTmV0d29ya1JlcXVlc3QoTmV0
d29ya2luZ0NvbnRleHQgKmNvbnRleHQpIGNvCiAgICAgY29uc3QgSFRUUEhlYWRlck1hcCAmaGVh
ZGVycyA9IGh0dHBIZWFkZXJGaWVsZHMoKTsKICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gaGVhZGVycy5iZWdpbigpLCBlbmQgPSBoZWFkZXJzLmVuZCgpOwogICAg
ICAgICAgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFFCeXRlQXJyYXkgbmFtZSA9IFFTdHJp
bmcoaXQtPmZpcnN0KS50b0FzY2lpKCk7Ci0gICAgICAgIFFCeXRlQXJyYXkgdmFsdWUgPSBRU3Ry
aW5nKGl0LT5zZWNvbmQpLnRvQXNjaWkoKTsKKyAgICAgICAgUUJ5dGVBcnJheSBuYW1lID0gUVN0
cmluZyhpdC0+a2V5KS50b0FzY2lpKCk7CisgICAgICAgIFFCeXRlQXJyYXkgdmFsdWUgPSBRU3Ry
aW5nKGl0LT52YWx1ZSkudG9Bc2NpaSgpOwogICAgICAgICAvLyBRTmV0d29ya1JlcXVlc3Q6OnNl
dFJhd0hlYWRlcigpIHdvdWxkIHJlbW92ZSB0aGUgaGVhZGVyIGlmIHRoZSB2YWx1ZSBpcyBudWxs
CiAgICAgICAgIC8vIE1ha2Ugc3VyZSB0byBzZXQgYW4gZW1wdHkgaGVhZGVyIGluc3RlYWQgb2Yg
bnVsbCBoZWFkZXIuCiAgICAgICAgIGlmICghdmFsdWUuaXNOdWxsKCkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0U291cC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0
U291cC5jcHAKaW5kZXggZDcxMjdiNGI1YjhlNDU5YTRjYWVjNTVhNTUyN2JiY2YzYzgzNzc4NS4u
NTdhYjRkNjQ3YjNiZmZjMjViYTkyMzc3OGM3MWQ0ZjRiZWUxNWNiOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVzdFNvdXAuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVl
c3RTb3VwLmNwcApAQCAtNDMsNyArNDMsNyBAQCB2b2lkIFJlc291cmNlUmVxdWVzdDo6dXBkYXRl
U291cE1lc3NhZ2UoU291cE1lc3NhZ2UqIHNvdXBNZXNzYWdlKSBjb25zdAogICAgIGlmICghaGVh
ZGVycy5pc0VtcHR5KCkpIHsKICAgICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gaGVhZGVycy5lbmQoKTsKICAgICAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IGhlYWRlcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAg
ICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKHNvdXBIZWFkZXJzLCBpdC0+Zmlyc3Quc3Ry
aW5nKCkudXRmOCgpLmRhdGEoKSwgaXQtPnNlY29uZC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAg
ICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChzb3VwSGVhZGVycywgaXQtPmtleS5zdHJp
bmcoKS51dGY4KCkuZGF0YSgpLCBpdC0+dmFsdWUudXRmOCgpLmRhdGEoKSk7CiAgICAgfQogCiAg
ICAgU3RyaW5nIGZpcnN0UGFydHlTdHJpbmcgPSBmaXJzdFBhcnR5Rm9yQ29va2llcygpLnN0cmlu
ZygpOwpAQCAtNjYsNyArNjYsNyBAQCBTb3VwTWVzc2FnZSogUmVzb3VyY2VSZXF1ZXN0Ojp0b1Nv
dXBNZXNzYWdlKCkgY29uc3QKICAgICBpZiAoIWhlYWRlcnMuaXNFbXB0eSgpKSB7CiAgICAgICAg
IEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGhlYWRlcnMuZW5kKCk7CiAgICAg
ICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBoZWFkZXJzLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2Fw
cGVuZChzb3VwSGVhZGVycywgaXQtPmZpcnN0LnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGl0LT5z
ZWNvbmQudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19h
cHBlbmQoc291cEhlYWRlcnMsIGl0LT5rZXkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgaXQtPnZh
bHVlLnV0ZjgoKS5kYXRhKCkpOwogICAgIH0KIAogICAgIFN0cmluZyBmaXJzdFBhcnR5U3RyaW5n
ID0gZmlyc3RQYXJ0eUZvckNvb2tpZXMoKS5zdHJpbmcoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlc3BvbnNlU291cC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXNwb25zZVNvdXAu
Y3BwCmluZGV4IDE1NTA0OGIyYmYyZjI0NDAyYmJkODlmNDM0NDRmNDI0YjI2Y2FmY2MuLjJmZmVi
NTYzYWRlOGM0YjBjNzRlYzk1MTRkZTk5ZTcyMGM5OGQyMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlc3BvbnNlU291cC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVzcG9uc2VT
b3VwLmNwcApAQCAtNDYsNyArNDYsNyBAQCBTb3VwTWVzc2FnZSogUmVzb3VyY2VSZXNwb25zZTo6
dG9Tb3VwTWVzc2FnZSgpIGNvbnN0CiAgICAgaWYgKCFoZWFkZXJzLmlzRW1wdHkoKSkgewogICAg
ICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBoZWFkZXJzLmVuZCgpOwog
ICAgICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaGVhZGVycy5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVy
c19hcHBlbmQoc291cEhlYWRlcnMsIGl0LT5maXJzdC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBp
dC0+c2Vjb25kLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgc291cF9tZXNzYWdlX2hlYWRl
cnNfYXBwZW5kKHNvdXBIZWFkZXJzLCBpdC0+a2V5LnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGl0
LT52YWx1ZS51dGY4KCkuZGF0YSgpKTsKICAgICB9CiAKICAgICBzb3VwX21lc3NhZ2Vfc2V0X2Zs
YWdzKHNvdXBNZXNzYWdlLCBtX3NvdXBGbGFncyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3dpbi9SZXNvdXJjZUhhbmRsZVdpbi5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3dpbi9SZXNvdXJjZUhhbmRsZVdpbi5jcHAKaW5kZXggMDIx
MmQwY2RhOThjOWYxMzc5MjhlNjEyZmRmOTUwMzY1YTAxZDBkNi4uZjI1MDUyNzc1YjBkZWRmZTIx
Yzc1NWQzZjgzOTk4NTNlN2EwZjM5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay93aW4vUmVzb3VyY2VIYW5kbGVXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvd2luL1Jlc291cmNlSGFuZGxlV2luLmNwcApAQCAtMzIzLDE1ICsz
MjMsMTUgQEAgYm9vbCBSZXNvdXJjZUhhbmRsZTo6c3RhcnQoTmV0d29ya2luZ0NvbnRleHQqIGNv
bnRleHQpCiAgICAgY29uc3QgSFRUUEhlYWRlck1hcCYgaHR0cEhlYWRlckZpZWxkcyA9IGZpcnN0
UmVxdWVzdCgpLmh0dHBIZWFkZXJGaWVsZHMoKTsKIAogICAgIGZvciAoSFRUUEhlYWRlck1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBodHRwSGVhZGVyRmllbGRzLmJlZ2luKCk7IGl0ICE9IGh0dHBI
ZWFkZXJGaWVsZHMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNl
KGl0LT5maXJzdCwgIkFjY2VwdCIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKGl0LT5maXJzdCwgIlJl
ZmVyZXIiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShpdC0+Zmlyc3QsICJVc2VyLUFnZW50IikpCisg
ICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShpdC0+a2V5LCAiQWNjZXB0IikgfHwgZXF1YWxJ
Z25vcmluZ0Nhc2UoaXQtPmtleSwgIlJlZmVyZXIiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShpdC0+
a2V5LCAiVXNlci1BZ2VudCIpKQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgaWYg
KCFodHRwSGVhZGVycy5pc0VtcHR5KCkpCiAgICAgICAgICAgICBodHRwSGVhZGVycy5hcHBlbmQo
J1xuJyk7CiAKLSAgICAgICAgaHR0cEhlYWRlcnMuYXBwZW5kKGl0LT5maXJzdC5jaGFyYWN0ZXJz
KCksIGl0LT5maXJzdC5sZW5ndGgoKSk7CisgICAgICAgIGh0dHBIZWFkZXJzLmFwcGVuZChpdC0+
a2V5LmNoYXJhY3RlcnMoKSwgaXQtPmtleS5sZW5ndGgoKSk7CiAgICAgICAgIGh0dHBIZWFkZXJz
LmFwcGVuZCgnOicpOwotICAgICAgICBodHRwSGVhZGVycy5hcHBlbmQoaXQtPnNlY29uZC5jaGFy
YWN0ZXJzKCksIGl0LT5zZWNvbmQubGVuZ3RoKCkpOworICAgICAgICBodHRwSGVhZGVycy5hcHBl
bmQoaXQtPnZhbHVlLmNoYXJhY3RlcnMoKSwgaXQtPnZhbHVlLmxlbmd0aCgpKTsKICAgICB9CiAK
ICAgICBJTlRFUk5FVF9CVUZGRVJTVyBpbnRlcm5ldEJ1ZmZlcnM7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SdW5Mb29wUXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vcXQvUnVuTG9vcFF0LmNwcAppbmRleCAyOGFiNjdiZGUwMTU1YWM3ZjViODY3MjY2Mjg1
ODk0NTQ0NDkyNGU2Li5mYzdhMmQxY2I1YjcxYzMwOWI0Y2NjZTk2Mzg4NGNmYjFjYWVlOTQwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SdW5Mb29wUXQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1J1bkxvb3BRdC5jcHAKQEAgLTEyNyw3ICsxMjcs
NyBAQCB2b2lkIFJ1bkxvb3A6OlRpbWVyQmFzZTo6dGltZXJGaXJlZChSdW5Mb29wKiBydW5Mb29w
LCBpbnQgSUQpCiB7CiAgICAgVGltZXJNYXA6Oml0ZXJhdG9yIGl0ID0gcnVuTG9vcC0+bV9hY3Rp
dmVUaW1lcnMuZmluZChJRCk7CiAgICAgQVNTRVJUKGl0ICE9IHJ1bkxvb3AtPm1fYWN0aXZlVGlt
ZXJzLmVuZCgpKTsKLSAgICBUaW1lckJhc2UqIHRpbWVyID0gaXQtPnNlY29uZDsKKyAgICBUaW1l
ckJhc2UqIHRpbWVyID0gaXQtPnZhbHVlOwogCiAgICAgaWYgKCF0aW1lci0+bV9pc1JlcGVhdGlu
ZykgewogICAgICAgICAvLyBTdG9wIHRoZSB0aW1lciAoY2FsbGluZyBzdG9wIHdvdWxkIG5lZWQg
YW5vdGhlciBoYXNoIHRhYmxlIGxvb2t1cCkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L0xvY2FsZVRvU2NyaXB0TWFwcGluZ0RlZmF1bHQuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9Mb2NhbGVUb1NjcmlwdE1hcHBpbmdEZWZhdWx0LmNwcAppbmRl
eCA0ZWQwM2NlNGUwN2U1ZDhjOTcxZjlkMWZlZDk1ZjAwOGJmNGE1NjE5Li41ZGM5M2ZmMDk0YTg4
ZWU2ZTBmNTUxMTdkMDJjYmM2ZjZiNGM0MjE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L0xvY2FsZVRvU2NyaXB0TWFwcGluZ0RlZmF1bHQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9jYWxlVG9TY3JpcHRNYXBwaW5nRGVmYXVsdC5jcHAK
QEAgLTE2MCw3ICsxNjAsNyBAQCBVU2NyaXB0Q29kZSBzY3JpcHROYW1lVG9Db2RlKGNvbnN0IFN0
cmluZyYgc2NyaXB0TmFtZSkKIAogICAgIEhhc2hNYXA8U3RyaW5nLCBVU2NyaXB0Q29kZT46Oml0
ZXJhdG9yIGl0ID0gc2NyaXB0TmFtZUNvZGVNYXAuZmluZChzY3JpcHROYW1lLmxvd2VyKCkpOwog
ICAgIGlmIChpdCAhPSBzY3JpcHROYW1lQ29kZU1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0
LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBpdC0+dmFsdWU7CiAgICAgcmV0dXJuIFVTQ1JJUFRf
SU5WQUxJRF9DT0RFOwogfQogCkBAIC0zODMsNyArMzgzLDcgQEAgVVNjcmlwdENvZGUgbG9jYWxl
VG9TY3JpcHRDb2RlRm9yRm9udFNlbGVjdGlvbihjb25zdCBTdHJpbmcmIGxvY2FsZSkKICAgICB3
aGlsZSAoIWNhbm9uaWNhbExvY2FsZS5pc0VtcHR5KCkpIHsKICAgICAgICAgSGFzaE1hcDxTdHJp
bmcsIFVTY3JpcHRDb2RlPjo6aXRlcmF0b3IgaXQgPSBsb2NhbGVTY3JpcHRNYXAuZmluZChjYW5v
bmljYWxMb2NhbGUpOwogICAgICAgICBpZiAoaXQgIT0gbG9jYWxlU2NyaXB0TWFwLmVuZCgpKQot
ICAgICAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgICAgICByZXR1cm4gaXQtPnZh
bHVlOwogICAgICAgICBzaXplX3QgcG9zID0gY2Fub25pY2FsTG9jYWxlLnJldmVyc2VGaW5kKCdf
Jyk7CiAgICAgICAgIGlmIChwb3MgPT0gbm90Rm91bmQpCiAgICAgICAgICAgICBicmVhazsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0
cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3Ry
eS5jcHAKaW5kZXggMDUxNTAwNTJmNTRkNTE3YTBhMDFmNjI2MDYxOGViMTU3ZDE4YTdlMy4uZjYw
NWEwZjFiNjBlYzQ4YTE2NjRiMzU3YTMzYWU0YTc0ODk3NmE2OSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAKQEAgLTE5
Niw4ICsxOTYsOCBAQCBzdGF0aWMgdm9pZCBwcnVuZUJsYWNrbGlzdGVkQ29kZWNzKCkKICAgICAg
ICAgVGV4dEVuY29kaW5nTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSB0ZXh0RW5jb2RpbmdO
YW1lTWFwLT5iZWdpbigpOwogICAgICAgICBUZXh0RW5jb2RpbmdOYW1lTWFwOjpjb25zdF9pdGVy
YXRvciBlbmQgPSB0ZXh0RW5jb2RpbmdOYW1lTWFwLT5lbmQoKTsKICAgICAgICAgZm9yICg7IGl0
ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgaWYgKGl0LT5zZWNvbmQgPT0gYXRvbWljTmFt
ZSkKLSAgICAgICAgICAgICAgICBuYW1lcy5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgICAg
IGlmIChpdC0+dmFsdWUgPT0gYXRvbWljTmFtZSkKKyAgICAgICAgICAgICAgICBuYW1lcy5hcHBl
bmQoaXQtPmtleSk7CiAgICAgICAgIH0KIAogICAgICAgICBzaXplX3QgbGVuZ3RoID0gbmFtZXMu
c2l6ZSgpOwpAQCAtMzc5LDcgKzM3OSw3IEBAIHZvaWQgZHVtcFRleHRFbmNvZGluZ05hbWVNYXAo
KQogICAgIFRleHRFbmNvZGluZ05hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdGV4dEVuY29k
aW5nTmFtZU1hcC0+YmVnaW4oKTsKICAgICBUZXh0RW5jb2RpbmdOYW1lTWFwOjpjb25zdF9pdGVy
YXRvciBlbmQgPSB0ZXh0RW5jb2RpbmdOYW1lTWFwLT5lbmQoKTsKICAgICBmb3IgKDsgaXQgIT0g
ZW5kOyArK2l0KQotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiclcycgPT4gJyVzJ1xuIiwgaXQt
PmZpcnN0LCBpdC0+c2Vjb25kKTsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICInJXMnID0+ICcl
cydcbiIsIGl0LT5rZXksIGl0LT52YWx1ZSk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC90cmFuc2NvZGVyL0ZvbnRUcmFuc2NvZGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvdHJhbnNjb2Rlci9Gb250VHJhbnNjb2Rlci5j
cHAKaW5kZXggNGUwN2Y1MGZiZGIwYzU3YzNlZWNhNmY4YmU3MWY3NTA1ZGI1M2JjMC4uNDg0MjI4
Y2FhOGU3NjA3MWIzN2E5ZDIwYTk5MmQ1MGExZDQxZjQwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC90cmFuc2NvZGVyL0ZvbnRUcmFuc2NvZGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3RyYW5zY29kZXIvRm9udFRyYW5zY29kZXIuY3Bw
CkBAIC02Niw3ICs2Niw3IEBAIEZvbnRUcmFuc2NvZGVyOjpDb252ZXJ0ZXJUeXBlIEZvbnRUcmFu
c2NvZGVyOjpjb252ZXJ0ZXJUeXBlKGNvbnN0IEZvbnREZXNjcmlwdGlvCiAgICAgaWYgKCFmb250
RmFtaWx5LmlzTnVsbCgpKSB7CiAgICAgICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBDb252ZXJ0
ZXJUeXBlPjo6Y29uc3RfaXRlcmF0b3IgZm91bmQgPSBtX2NvbnZlcnRlclR5cGVzLmZpbmQoZm9u
dEZhbWlseSk7CiAgICAgICAgIGlmIChmb3VuZCAhPSBtX2NvbnZlcnRlclR5cGVzLmVuZCgpKQot
ICAgICAgICAgICAgcmV0dXJuIGZvdW5kLT5zZWNvbmQ7CisgICAgICAgICAgICByZXR1cm4gZm91
bmQtPnZhbHVlOwogICAgIH0KIAogICAgIC8vIElFJ3MgZGVmYXVsdCBmb250cyBmb3IgSmFwYW5l
c2UgZW5jb2RpbmdzIGNoYW5nZSBiYWNrc2xhc2hlcyBpbnRvIHllbiBzaWducy4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvd2luY2UvVGV4dENvZGVjV2luQ0UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC93aW5jZS9UZXh0Q29kZWNXaW5DRS5jcHAK
aW5kZXggMGM0ZWM1MDEyMTQ5YWQwMWNjNWMxOGIyNDE0M2RhMGNlMmI4ZjRjMy4uZjA1ZGUzMjQy
OGM4NTBmZGU2YzBlNDMwOWU2YmZlZjU5YzE1MjdkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC93aW5jZS9UZXh0Q29kZWNXaW5DRS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC93aW5jZS9UZXh0Q29kZWNXaW5DRS5jcHAKQEAgLTEwMSwxNyAr
MTAxLDE3IEBAIExhbmd1YWdlTWFuYWdlcjo6TGFuZ3VhZ2VNYW5hZ2VyKCkKICAgICAgICAgICAg
ICAgICBpID0gY29kZVBhZ2VDaGFyc2V0cygpLnNldChjcEluZm8udWlDb2RlUGFnZSwgbmFtZSku
aXRlcmF0b3I7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoaSAhPSBjb2RlUGFnZUNo
YXJzZXRzKCkuZW5kKCkpIHsKLSAgICAgICAgICAgICAgICBIYXNoTWFwPFN0cmluZywgQ2hhcnNl
dEluZm8+OjppdGVyYXRvciBqID0ga25vd25DaGFyc2V0cygpLmZpbmQoU3RyaW5nKGktPnNlY29u
ZC5kYXRhKCksIGktPnNlY29uZC5sZW5ndGgoKSkpOworICAgICAgICAgICAgICAgIEhhc2hNYXA8
U3RyaW5nLCBDaGFyc2V0SW5mbz46Oml0ZXJhdG9yIGogPSBrbm93bkNoYXJzZXRzKCkuZmluZChT
dHJpbmcoaS0+dmFsdWUuZGF0YSgpLCBpLT52YWx1ZS5sZW5ndGgoKSkpOwogICAgICAgICAgICAg
ICAgIEFTU0VSVChqICE9IGtub3duQ2hhcnNldHMoKS5lbmQoKSk7Ci0gICAgICAgICAgICAgICAg
Q2hhcnNldEluZm8mIGluZm8gPSBqLT5zZWNvbmQ7Ci0gICAgICAgICAgICAgICAgaW5mby5tX25h
bWUgPSBpLT5zZWNvbmQuZGF0YSgpOworICAgICAgICAgICAgICAgIENoYXJzZXRJbmZvJiBpbmZv
ID0gai0+dmFsdWU7CisgICAgICAgICAgICAgICAgaW5mby5tX25hbWUgPSBpLT52YWx1ZS5kYXRh
KCk7CiAgICAgICAgICAgICAgICAgaW5mby5tX2ZyaWVuZGx5TmFtZSA9IGNwSW5mby53c3pEZXNj
cmlwdGlvbjsKICAgICAgICAgICAgICAgICBpbmZvLm1fYWxpYXNlcy5hcHBlbmQobmFtZSk7CiAg
ICAgICAgICAgICAgICAgaW5mby5tX2FsaWFzZXMuYXBwZW5kKFN0cmluZyhjcEluZm8ud3N6SGVh
ZGVyQ2hhcnNldCkubGF0aW4xKCkpOwogICAgICAgICAgICAgICAgIGluZm8ubV9hbGlhc2VzLmFw
cGVuZChTdHJpbmcoY3BJbmZvLndzekJvZHlDaGFyc2V0KS5sYXRpbjEoKSk7CiAgICAgICAgICAg
ICAgICAgU3RyaW5nIGNwTmFtZSA9ICJjcCIgKyBTdHJpbmc6Om51bWJlcihjcEluZm8udWlDb2Rl
UGFnZSk7CiAgICAgICAgICAgICAgICAgaW5mby5tX2FsaWFzZXMuYXBwZW5kKGNwTmFtZS5sYXRp
bjEoKSk7Ci0gICAgICAgICAgICAgICAgc3VwcG9ydGVkQ2hhcnNldHMoKS5hZGQoaS0+c2Vjb25k
LmRhdGEoKSk7CisgICAgICAgICAgICAgICAgc3VwcG9ydGVkQ2hhcnNldHMoKS5hZGQoaS0+dmFs
dWUuZGF0YSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBlbnVtSW50ZXJm
YWNlLT5SZWxlYXNlKCk7CkBAIC0xMjQsNyArMTI0LDcgQEAgc3RhdGljIFVJTlQgZ2V0Q29kZVBh
Z2UoY29uc3QgY2hhciogbmFtZSkKICAgICAvLyBzYXlpbmcgIj09IiBpcyBub3QgZm91bmQgZm9y
IGNvbnN0X2l0ZXJhdG9yIGFuZCBpdGVyYXRvcgogICAgIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBD
aGFyc2V0SW5mbz4mIGNoYXJzZXRzID0ga25vd25DaGFyc2V0cygpOwogICAgIEhhc2hNYXA8U3Ry
aW5nLCBDaGFyc2V0SW5mbz46OmNvbnN0X2l0ZXJhdG9yIGkgPSBjaGFyc2V0cy5maW5kKG5hbWUp
OwotICAgIHJldHVybiBpID09IGNoYXJzZXRzLmVuZCgpID8gQ1BfQUNQIDogaS0+c2Vjb25kLm1f
Y29kZVBhZ2U7CisgICAgcmV0dXJuIGkgPT0gY2hhcnNldHMuZW5kKCkgPyBDUF9BQ1AgOiBpLT52
YWx1ZS5tX2NvZGVQYWdlOwogfQogCiBzdGF0aWMgUGFzc093blB0cjxUZXh0Q29kZWM+IG5ld1Rl
eHRDb2RlY1dpbkNFKGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcsIGNvbnN0IHZvaWQqKQpA
QCAtMTQ3LDkgKzE0Nyw5IEBAIHZvaWQgVGV4dENvZGVjV2luQ0U6OnJlZ2lzdGVyRXh0ZW5kZWRF
bmNvZGluZ05hbWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJhciByZWdpc3RyCiAgICAgZm9yIChDaGFy
c2V0U2V0OjppdGVyYXRvciBpID0gc3VwcG9ydGVkQ2hhcnNldHMoKS5iZWdpbigpOyBpICE9IHN1
cHBvcnRlZENoYXJzZXRzKCkuZW5kKCk7ICsraSkgewogICAgICAgICBIYXNoTWFwPFN0cmluZywg
Q2hhcnNldEluZm8+OjppdGVyYXRvciBqID0ga25vd25DaGFyc2V0cygpLmZpbmQoKmkpOwogICAg
ICAgICBpZiAoaiAhPSBrbm93bkNoYXJzZXRzKCkuZW5kKCkpIHsKLSAgICAgICAgICAgIHJlZ2lz
dHJhcihqLT5zZWNvbmQubV9uYW1lLmRhdGEoKSwgai0+c2Vjb25kLm1fbmFtZS5kYXRhKCkpOwot
ICAgICAgICAgICAgZm9yIChWZWN0b3I8Q1N0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGFsaWFzID0g
ai0+c2Vjb25kLm1fYWxpYXNlcy5iZWdpbigpOyBhbGlhcyAhPSBqLT5zZWNvbmQubV9hbGlhc2Vz
LmVuZCgpOyArK2FsaWFzKQotICAgICAgICAgICAgICAgIHJlZ2lzdHJhcihhbGlhcy0+ZGF0YSgp
LCBqLT5zZWNvbmQubV9uYW1lLmRhdGEoKSk7CisgICAgICAgICAgICByZWdpc3RyYXIoai0+dmFs
dWUubV9uYW1lLmRhdGEoKSwgai0+dmFsdWUubV9uYW1lLmRhdGEoKSk7CisgICAgICAgICAgICBm
b3IgKFZlY3RvcjxDU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgYWxpYXMgPSBqLT52YWx1ZS5tX2Fs
aWFzZXMuYmVnaW4oKTsgYWxpYXMgIT0gai0+dmFsdWUubV9hbGlhc2VzLmVuZCgpOyArK2FsaWFz
KQorICAgICAgICAgICAgICAgIHJlZ2lzdHJhcihhbGlhcy0+ZGF0YSgpLCBqLT52YWx1ZS5tX25h
bWUuZGF0YSgpKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTE2MCw3ICsxNjAsNyBAQCB2b2lk
IFRleHRDb2RlY1dpbkNFOjpyZWdpc3RlckV4dGVuZGVkQ29kZWNzKFRleHRDb2RlY1JlZ2lzdHJh
ciByZWdpc3RyYXIpCiAgICAgZm9yIChDaGFyc2V0U2V0OjppdGVyYXRvciBpID0gc3VwcG9ydGVk
Q2hhcnNldHMoKS5iZWdpbigpOyBpICE9IHN1cHBvcnRlZENoYXJzZXRzKCkuZW5kKCk7ICsraSkg
ewogICAgICAgICBIYXNoTWFwPFN0cmluZywgQ2hhcnNldEluZm8+OjppdGVyYXRvciBqID0ga25v
d25DaGFyc2V0cygpLmZpbmQoKmkpOwogICAgICAgICBpZiAoaiAhPSBrbm93bkNoYXJzZXRzKCku
ZW5kKCkpCi0gICAgICAgICAgICByZWdpc3RyYXIoai0+c2Vjb25kLm1fbmFtZS5kYXRhKCksIG5l
d1RleHRDb2RlY1dpbkNFLCAwKTsKKyAgICAgICAgICAgIHJlZ2lzdHJhcihqLT52YWx1ZS5tX25h
bWUuZGF0YSgpLCBuZXdUZXh0Q29kZWNXaW5DRSwgMCk7CiAgICAgfQogfQogCkBAIC0yOTksNyAr
Mjk5LDcgQEAgdm9pZCBUZXh0Q29kZWNXaW5DRTo6ZW51bWVyYXRlU3VwcG9ydGVkRW5jb2Rpbmdz
KEVuY29kaW5nUmVjZWl2ZXImIHJlY2VpdmVyKQogICAgIGxhbmd1YWdlTWFuYWdlcigpOwogICAg
IGZvciAoQ2hhcnNldFNldDo6aXRlcmF0b3IgaSA9IHN1cHBvcnRlZENoYXJzZXRzKCkuYmVnaW4o
KTsgaSAhPSBzdXBwb3J0ZWRDaGFyc2V0cygpLmVuZCgpOyArK2kpIHsKICAgICAgICAgSGFzaE1h
cDxTdHJpbmcsIENoYXJzZXRJbmZvPjo6aXRlcmF0b3IgaiA9IGtub3duQ2hhcnNldHMoKS5maW5k
KCppKTsKLSAgICAgICAgaWYgKGogIT0ga25vd25DaGFyc2V0cygpLmVuZCgpICYmICFyZWNlaXZl
ci5yZWNlaXZlKGotPnNlY29uZC5tX25hbWUuZGF0YSgpLCBqLT5zZWNvbmQubV9mcmllbmRseU5h
bWUuY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgai0+c2Vjb25kLm1fY29kZVBhZ2Up
KQorICAgICAgICBpZiAoaiAhPSBrbm93bkNoYXJzZXRzKCkuZW5kKCkgJiYgIXJlY2VpdmVyLnJl
Y2VpdmUoai0+dmFsdWUubV9uYW1lLmRhdGEoKSwgai0+dmFsdWUubV9mcmllbmRseU5hbWUuY2hh
cmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgai0+dmFsdWUubV9jb2RlUGFnZSkpCiAgICAg
ICAgICAgICBicmVhazsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93aW4vQ2xpcGJvYXJkVXRpbGl0aWVzV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3dpbi9DbGlwYm9hcmRVdGlsaXRpZXNXaW4uY3BwCmluZGV4IGQ2MWMwMTQzMjRhZDY2ZWM3
MWJiYWNjNDgyZDBiYjc3NjYxYzIyMWYuLjI1Mjc3YjczMTA4Mjk2ODM4Yjg5MjY5NjllN2U5ZWEw
NjNkNGZjM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9h
cmRVdGlsaXRpZXNXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlw
Ym9hcmRVdGlsaXRpZXNXaW4uY3BwCkBAIC03NSw3ICs3NSw3IEBAIHN0YXRpYyBib29sIGdldERh
dGFNYXBJdGVtKGNvbnN0IERyYWdEYXRhTWFwKiBkYXRhT2JqZWN0LCBGT1JNQVRFVEMqIGZvcm1h
dCwgU3RyCiAgICAgRHJhZ0RhdGFNYXA6OmNvbnN0X2l0ZXJhdG9yIGZvdW5kID0gZGF0YU9iamVj
dC0+ZmluZChmb3JtYXQtPmNmRm9ybWF0KTsKICAgICBpZiAoZm91bmQgPT0gZGF0YU9iamVjdC0+
ZW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpdGVtID0gZm91bmQtPnNlY29uZFsw
XTsKKyAgICBpdGVtID0gZm91bmQtPnZhbHVlWzBdOwogICAgIHJldHVybiB0cnVlOwogfQogCkBA
IC04MTksNyArODE5LDcgQEAgdm9pZCBnZXRDbGlwYm9hcmREYXRhKElEYXRhT2JqZWN0KiBkYXRh
T2JqZWN0LCBGT1JNQVRFVEMqIGZvcm1hdCwgVmVjdG9yPFN0cmluZz4KICAgICBDbGlwYm9hcmRG
b3JtYXRNYXA6OmNvbnN0X2l0ZXJhdG9yIGZvdW5kID0gZm9ybWF0TWFwLmZpbmQoZm9ybWF0LT5j
ZkZvcm1hdCk7CiAgICAgaWYgKGZvdW5kID09IGZvcm1hdE1hcC5lbmQoKSkKICAgICAgICAgcmV0
dXJuOwotICAgIGZvdW5kLT5zZWNvbmQtPmdldFN0cmluZyhkYXRhT2JqZWN0LCBmb3VuZC0+c2Vj
b25kLT5mb3JtYXQsIGRhdGFTdHJpbmdzKTsKKyAgICBmb3VuZC0+dmFsdWUtPmdldFN0cmluZyhk
YXRhT2JqZWN0LCBmb3VuZC0+dmFsdWUtPmZvcm1hdCwgZGF0YVN0cmluZ3MpOwogfQogCiB2b2lk
IHNldENsaXBib2FyZERhdGEoSURhdGFPYmplY3QqIGRhdGFPYmplY3QsIFVJTlQgZm9ybWF0LCBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgZGF0YVN0cmluZ3MpCkBAIC04MjgsNyArODI4LDcgQEAgdm9p
ZCBzZXRDbGlwYm9hcmREYXRhKElEYXRhT2JqZWN0KiBkYXRhT2JqZWN0LCBVSU5UIGZvcm1hdCwg
Y29uc3QgVmVjdG9yPFN0cmluZz4KICAgICBDbGlwYm9hcmRGb3JtYXRNYXA6OmNvbnN0X2l0ZXJh
dG9yIGZvdW5kID0gZm9ybWF0TWFwLmZpbmQoZm9ybWF0KTsKICAgICBpZiAoZm91bmQgPT0gZm9y
bWF0TWFwLmVuZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgZm91bmQtPnNlY29uZC0+c2V0U3Ry
aW5nKGRhdGFPYmplY3QsIGZvdW5kLT5zZWNvbmQtPmZvcm1hdCwgZGF0YVN0cmluZ3MpOworICAg
IGZvdW5kLT52YWx1ZS0+c2V0U3RyaW5nKGRhdGFPYmplY3QsIGZvdW5kLT52YWx1ZS0+Zm9ybWF0
LCBkYXRhU3RyaW5ncyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRXaW4uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFdpbi5jcHAKaW5kZXggMTJjYjhiZjAxZTMwZDVj
MWQ2ZTIzNzZhZmQ5ODQ4MzhhNzMxMmVjYS4uODBlOWY4NGU3MTczYjI1ZmU1YjczMmFkN2MyYTk5
YzJhNmY3NDMxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBi
b2FyZFdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFdp
bi5jcHAKQEAgLTUyNSw3ICs1MjUsNyBAQCBIYXNoU2V0PFN0cmluZz4gQ2xpcGJvYXJkV2luOjp0
eXBlcygpIGNvbnN0CiAgICAgfSBlbHNlIHsKICAgICAgICAgZm9yIChEcmFnRGF0YU1hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtX2RyYWdEYXRhTWFwLmJlZ2luKCk7IGl0ICE9IG1fZHJhZ0RhdGFN
YXAuZW5kKCk7ICsraXQpIHsKICAgICAgICAgICAgIEZPUk1BVEVUQyBkYXRhOwotICAgICAgICAg
ICAgZGF0YS5jZkZvcm1hdCA9ICgqaXQpLmZpcnN0OworICAgICAgICAgICAgZGF0YS5jZkZvcm1h
dCA9ICgqaXQpLmtleTsKICAgICAgICAgICAgIGFkZE1pbWVUeXBlc0ZvckZvcm1hdChyZXN1bHRz
LCBkYXRhKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3dpbi9GaWxlU3lzdGVtV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dp
bi9GaWxlU3lzdGVtV2luLmNwcAppbmRleCA0Y2U1MTg3NzEyMzUzZTkwYzBkMTU2Zjg1NDE5ZmNi
MDVkYjM3ZmFjLi5iMTA0OTIyZTJmM2Y2MDM4MDQ0ZTgxYWUyNmU0MWE4YTVlZjgzYjdhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0ZpbGVTeXN0ZW1XaW4uY3BwCkBAIC0yMDks
NyArMjA5LDcgQEAgc3RhdGljIFN0cmluZyBjYWNoZWRTdG9yYWdlRGlyZWN0b3J5KERXT1JEIHBh
dGhJZGVudGlmaWVyKQogCiAgICAgSGFzaE1hcDxEV09SRCwgU3RyaW5nPjo6aXRlcmF0b3IgaXQg
PSBkaXJlY3Rvcmllcy5maW5kKHBhdGhJZGVudGlmaWVyKTsKICAgICBpZiAoaXQgIT0gZGlyZWN0
b3JpZXMuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgICAgICByZXR1cm4g
aXQtPnZhbHVlOwogCiAgICAgU3RyaW5nIGRpcmVjdG9yeSA9IHN0b3JhZ2VEaXJlY3RvcnkocGF0
aElkZW50aWZpZXIpOwogICAgIGRpcmVjdG9yaWVzLmFkZChwYXRoSWRlbnRpZmllciwgZGlyZWN0
b3J5KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9SdW5Mb29wV2lu
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9SdW5Mb29wV2luLmNwcAppbmRleCAx
NjYzYjY2MTMzYWJjMmNiM2ZkMDA1N2QxOTY3MTIzN2QwZTc5OWRhLi4xN2Q2ODQ1ZTlmZmRjMzky
OGMwNjdjN2MxNTg4M2FhYjkwZDI5YTY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93aW4vUnVuTG9vcFdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2lu
L1J1bkxvb3BXaW4uY3BwCkBAIC0xMjYsNyArMTI2LDcgQEAgdm9pZCBSdW5Mb29wOjpUaW1lckJh
c2U6OnRpbWVyRmlyZWQoUnVuTG9vcCogcnVuTG9vcCwgdWludDY0X3QgSUQpCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBUaW1lckJhc2UqIHRpbWVyID0gaXQtPnNlY29uZDsKKyAgICBU
aW1lckJhc2UqIHRpbWVyID0gaXQtPnZhbHVlOwogCiAgICAgaWYgKCF0aW1lci0+bV9pc1JlcGVh
dGluZykgewogICAgICAgICBydW5Mb29wLT5tX2FjdGl2ZVRpbWVycy5yZW1vdmUoaXQpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1dDRGF0YU9iamVjdC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vV0NEYXRhT2JqZWN0LmNwcAppbmRleCAwYzAzY2Uw
MGYyMjFhZTBhYzgxYjhlZTcyY2ZlMGQwNTRhMDU2NjU0Li5kZmJkMDA1ZmM0MzZmOGQ3MjE2YTIx
NzQ2Njk5YjdkZjgxYjU4MDQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93
aW4vV0NEYXRhT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vV0NE
YXRhT2JqZWN0LmNwcApAQCAtMTY5LDcgKzE2OSw3IEBAIEhSRVNVTFQgV0NEYXRhT2JqZWN0Ojpj
cmVhdGVJbnN0YW5jZShXQ0RhdGFPYmplY3QqKiByZXN1bHQsIGNvbnN0IERyYWdEYXRhTWFwJiBk
CiAgICAgKnJlc3VsdCA9IG5ldyBXQ0RhdGFPYmplY3Q7CiAKICAgICBmb3IgKERyYWdEYXRhTWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IGRhdGFNYXAuYmVnaW4oKTsgaXQgIT0gZGF0YU1hcC5lbmQo
KTsgKytpdCkKLSAgICAgICAgc2V0Q2xpcGJvYXJkRGF0YSgqcmVzdWx0LCBpdC0+Zmlyc3QsIGl0
LT5zZWNvbmQpOworICAgICAgICBzZXRDbGlwYm9hcmREYXRhKCpyZXN1bHQsIGl0LT5rZXksIGl0
LT52YWx1ZSk7CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3dpbmNlL01JTUVUeXBlUmVnaXN0cnlXaW5DRS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS93aW5jZS9NSU1FVHlwZVJlZ2lzdHJ5V2luQ0UuY3BwCmluZGV4IDhhMGQz
ZDJiNjE2MmI0NmRiYjdkNjJmMjJjYTAzMjZkYzdmY2VkYzUuLmU5NmZiMmJhN2Q5OTljZTJkM2Fj
YjBkMGY5YzRjMjQ4NzQ3ZmU1ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3dpbmNlL01JTUVUeXBlUmVnaXN0cnlXaW5DRS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vd2luY2UvTUlNRVR5cGVSZWdpc3RyeVdpbkNFLmNwcApAQCAtMTAxLDggKzEwMSw4IEBA
IFN0cmluZyBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRQcmVmZXJyZWRFeHRlbnNpb25Gb3JNSU1FVHlw
ZShjb25zdCBTdHJpbmcmIHR5cGUpCiAgICAgaW5pdE1JTUVUeXBlRW50ZW5zaW9uTWFwKCk7CiAK
ICAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+OjppdGVyYXRvciBpID0gbWltZXR5cGVN
YXAuYmVnaW4oKTsgaSAhPSBtaW1ldHlwZU1hcC5lbmQoKTsgKytpKSB7Ci0gICAgICAgIGlmIChl
cXVhbElnbm9yaW5nQ2FzZShpLT5zZWNvbmQsIHR5cGUpKQotICAgICAgICAgICAgcmV0dXJuIGkt
PmZpcnN0OworICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoaS0+dmFsdWUsIHR5cGUpKQor
ICAgICAgICAgICAgcmV0dXJuIGktPmtleTsKICAgICB9CiAKICAgICByZXR1cm4gU3RyaW5nKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC9Db250ZXh0TWVudVd4LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L0NvbnRleHRNZW51V3guY3BwCmluZGV4IGY3
MjI3NjlmYWEwM2FkY2UyNGRhM2MwZWE3MzU5MzNhODYyNDcxNjQuLjgwMTkyZjM4Y2QxZDMxYTAy
MGQ4MTI1MWQyNDQ2NWQzMjBkY2Y3MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3d4L0NvbnRleHRNZW51V3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4
L0NvbnRleHRNZW51V3guY3BwCkBAIC02Niw4ICs2Niw4IEBAIHZvaWQgQ29udGV4dE1lbnU6OmFw
cGVuZEl0ZW0oQ29udGV4dE1lbnVJdGVtJiBpdGVtKQogCiAgICAgSXRlbUFjdGlvbk1hcDo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gc19pdGVtQWN0aW9ucy5lbmQoKTsKICAgICBmb3IgKEl0ZW1BY3Rp
b25NYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gc19pdGVtQWN0aW9ucy5iZWdpbigpOyAgaXQgIT0g
ZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kID09IGl0ZW1EZXNjcmlwdGlvbi5h
Y3Rpb24pCi0gICAgICAgICAgICBpZFd4ID0gaXQtPmZpcnN0OworICAgICAgICBpZiAoaXQtPnZh
bHVlID09IGl0ZW1EZXNjcmlwdGlvbi5hY3Rpb24pCisgICAgICAgICAgICBpZFd4ID0gaXQtPmtl
eTsKICAgICB9CiAKICAgICBpZiAoaXRlbURlc2NyaXB0aW9uLnN1Yk1lbnUpIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAKaW5kZXggNmU4MTRhZWI1ZWY5ZDYzZTA2
MjBmYWI4MmI2YjJkNzM2NjZmMzVjNS4uYWY5M2NiOGNjMGJiN2EyZmRkYWNjZjgzODg1MjViMmFk
MDI1NTlmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFz
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAKQEAg
LTE2Miw3ICsxNjIsNyBAQCBib29sIFBsdWdpbkRhdGFiYXNlOjpyZWZyZXNoKCkKICAgICAgICAg
TUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBtYXBfaXQgPSAoKml0KS0+bWlt
ZVRvRGVzY3JpcHRpb25zKCkuYmVnaW4oKTsKICAgICAgICAgTUlNRVRvRGVzY3JpcHRpb25zTWFw
Ojpjb25zdF9pdGVyYXRvciBtYXBfZW5kID0gKCppdCktPm1pbWVUb0Rlc2NyaXB0aW9ucygpLmVu
ZCgpOwogICAgICAgICBmb3IgKDsgbWFwX2l0ICE9IG1hcF9lbmQ7ICsrbWFwX2l0KQotICAgICAg
ICAgICAgbV9yZWdpc3RlcmVkTUlNRVR5cGVzLmFkZChtYXBfaXQtPmZpcnN0KTsKKyAgICAgICAg
ICAgIG1fcmVnaXN0ZXJlZE1JTUVUeXBlcy5hZGQobWFwX2l0LT5rZXkpOwogICAgIH0KIAogICAg
IHJldHVybiB0cnVlOwpAQCAtMjQzLDkgKzI0Myw5IEBAIFN0cmluZyBQbHVnaW5EYXRhYmFzZTo6
TUlNRVR5cGVGb3JFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBleHRlbnNpb24pIGNvbnN0CiAgICAg
ICAgIE1JTUVUb0V4dGVuc2lvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIG1pbWVfZW5kID0gKCppdCkt
Pm1pbWVUb0V4dGVuc2lvbnMoKS5lbmQoKTsKIAogICAgICAgICBmb3IgKE1JTUVUb0V4dGVuc2lv
bnNNYXA6OmNvbnN0X2l0ZXJhdG9yIG1pbWVfaXQgPSAoKml0KS0+bWltZVRvRXh0ZW5zaW9ucygp
LmJlZ2luKCk7IG1pbWVfaXQgIT0gbWltZV9lbmQ7ICsrbWltZV9pdCkgewotICAgICAgICAgICAg
bWltZVR5cGUgPSBtaW1lX2l0LT5maXJzdDsKKyAgICAgICAgICAgIG1pbWVUeXBlID0gbWltZV9p
dC0+a2V5OwogICAgICAgICAgICAgUGx1Z2luUGFja2FnZSogcHJlZmVycmVkUGx1Z2luID0gbV9w
cmVmZXJyZWRQbHVnaW5zLmdldChtaW1lVHlwZSkuZ2V0KCk7Ci0gICAgICAgICAgICBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgZXh0ZW5zaW9ucyA9IG1pbWVfaXQtPnNlY29uZDsKKyAgICAgICAgICAg
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBleHRlbnNpb25zID0gbWltZV9pdC0+dmFsdWU7CiAgICAg
ICAgICAgICBib29sIGZvdW5kTWFwcGluZyA9IGZhbHNlOwogICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGV4dGVuc2lvbnMuc2l6ZSgpOyBpKyspIHsKICAgICAgICAgICAgICAg
ICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZXh0ZW5zaW9uc1tpXSwgZXh0ZW5zaW9uKSkgewpAQCAt
MzM1LDggKzMzNSw4IEBAIHZvaWQgUGx1Z2luRGF0YWJhc2U6OnJlbW92ZShQbHVnaW5QYWNrYWdl
KiBwYWNrYWdlKQogICAgIE1JTUVUb0V4dGVuc2lvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
cGFja2FnZS0+bWltZVRvRXh0ZW5zaW9ucygpLmJlZ2luKCk7CiAgICAgTUlNRVRvRXh0ZW5zaW9u
c01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcGFja2FnZS0+bWltZVRvRXh0ZW5zaW9ucygpLmVu
ZCgpOwogICAgIGZvciAoIDsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFBsdWdpblBhY2th
Z2VCeU5hbWVNYXA6Oml0ZXJhdG9yIHBhY2thZ2VJbk1hcCA9IG1fcHJlZmVycmVkUGx1Z2lucy5m
aW5kKGl0LT5maXJzdCk7Ci0gICAgICAgIGlmIChwYWNrYWdlSW5NYXAgIT0gbV9wcmVmZXJyZWRQ
bHVnaW5zLmVuZCgpICYmIHBhY2thZ2VJbk1hcC0+c2Vjb25kID09IHBhY2thZ2UpCisgICAgICAg
IFBsdWdpblBhY2thZ2VCeU5hbWVNYXA6Oml0ZXJhdG9yIHBhY2thZ2VJbk1hcCA9IG1fcHJlZmVy
cmVkUGx1Z2lucy5maW5kKGl0LT5rZXkpOworICAgICAgICBpZiAocGFja2FnZUluTWFwICE9IG1f
cHJlZmVycmVkUGx1Z2lucy5lbmQoKSAmJiBwYWNrYWdlSW5NYXAtPnZhbHVlID09IHBhY2thZ2Up
CiAgICAgICAgICAgICBtX3ByZWZlcnJlZFBsdWdpbnMucmVtb3ZlKHBhY2thZ2VJbk1hcCk7CiAg
ICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbk1haW5UaHJl
YWRTY2hlZHVsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5NYWluVGhyZWFk
U2NoZWR1bGVyLmNwcAppbmRleCA3NTI4Njc2YjEyYWE4YmRhOGYzM2IzMmVmNDBjYzg3NjU3NjZk
MzFhLi4zOWFlNzk0ZTJmYjA5NzIxOWE1MjIzZWJmYmVlZGY2OWI2ZTI4NjJjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luTWFpblRocmVhZFNjaGVkdWxlci5jcHAK
QEAgLTQ5LDcgKzQ5LDcgQEAgdm9pZCBQbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyOjpzY2hlZHVs
ZUNhbGwoTlBQIG5wcCwgTWFpblRocmVhZEZ1bmN0aW9uIGZ1bmN0aW8KICAgICBpZiAoaXQgPT0g
bV9jYWxsUXVldWVNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGl0LT5zZWNvbmQu
YXBwZW5kKENhbGwoZnVuY3Rpb24sIHVzZXJEYXRhKSk7CisgICAgaXQtPnZhbHVlLmFwcGVuZChD
YWxsKGZ1bmN0aW9uLCB1c2VyRGF0YSkpOwogCiAgICAgaWYgKCFtX2NhbGxQZW5kaW5nKSB7CiAg
ICAgICAgIGNhbGxPbk1haW5UaHJlYWQobWFpblRocmVhZENhbGxiYWNrLCB0aGlzKTsKQEAgLTk3
LDcgKzk3LDcgQEAgdm9pZCBQbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyOjpkaXNwYXRjaENhbGxz
KCkKICAgICAgICAgLy8gRW1wdHkgYWxsIHRoZSBxdWV1ZXMgaW4gdGhlIG9yaWdpbmFsIG1hcAog
ICAgICAgICBDYWxsUXVldWVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fY2FsbFF1ZXVlTWFwLmVuZCgp
OwogICAgICAgICBmb3IgKENhbGxRdWV1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtX2NhbGxRdWV1ZU1h
cC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBpdC0+c2Vjb25kLmNsZWFy
KCk7CisgICAgICAgICAgICBpdC0+dmFsdWUuY2xlYXIoKTsKICAgICB9CiAKICAgICBtX2NhbGxQ
ZW5kaW5nID0gZmFsc2U7CkBAIC0xMDUsNyArMTA1LDcgQEAgdm9pZCBQbHVnaW5NYWluVGhyZWFk
U2NoZWR1bGVyOjpkaXNwYXRjaENhbGxzKCkKIAogICAgIENhbGxRdWV1ZU1hcDo6aXRlcmF0b3Ig
ZW5kID0gY29weS5lbmQoKTsKICAgICBmb3IgKENhbGxRdWV1ZU1hcDo6aXRlcmF0b3IgaXQgPSBj
b3B5LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgZGlzcGF0Y2hDYWxsc0ZvclBs
dWdpbihpdC0+Zmlyc3QsIGl0LT5zZWNvbmQpOworICAgICAgICBkaXNwYXRjaENhbGxzRm9yUGx1
Z2luKGl0LT5rZXksIGl0LT52YWx1ZSk7CiB9CiAKIHZvaWQgUGx1Z2luTWFpblRocmVhZFNjaGVk
dWxlcjo6bWFpblRocmVhZENhbGxiYWNrKHZvaWQqIGNvbnRleHQpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblN0cmVhbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbHVn
aW5zL1BsdWdpblN0cmVhbS5jcHAKaW5kZXggMDAyMzgwZjVmOTUzZjliZWUyYzU2NWU5Y2E1YzEz
MmFkNGMwYWY0YS4uZmRiNzg2MDM1YjBkMTY1NDgyMWZjYjQ2MGFkNGUyZDNhNzFhNWEzNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5TdHJlYW0uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luU3RyZWFtLmNwcApAQCAtMTQ3LDkgKzE0Nyw5IEBA
IHZvaWQgUGx1Z2luU3RyZWFtOjpzdGFydFN0cmVhbSgpCiAKICAgICAgICAgSFRUUEhlYWRlck1h
cDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9yZXNvdXJjZVJlc3BvbnNlLmh0dHBIZWFkZXJGaWVs
ZHMoKS5lbmQoKTsKICAgICAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IG1fcmVzb3VyY2VSZXNwb25zZS5odHRwSGVhZGVyRmllbGRzKCkuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+Zmlyc3Qp
OworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPmtleSk7CiAgICAgICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZChzZXBhcmF0b3IpOwotICAgICAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQoaXQtPnNlY29uZCk7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZChpdC0+dmFsdWUpOwogICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7CiAg
ICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ibGFja2JlcnJ5
L1BsdWdpbkRhdGFCbGFja0JlcnJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvYmxhY2ti
ZXJyeS9QbHVnaW5EYXRhQmxhY2tCZXJyeS5jcHAKaW5kZXggZDkyMGQxZmJkNWExMTI0NjAzYThj
ZDk4ZmExMzQzNTZlNzMwNmI1OS4uNDc0NjYxNmRlMzM1ZmE4M2NlYzk2ZDkzMGUyMGQ4YzI4ZTk0
YzNiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ibGFja2JlcnJ5L1BsdWdp
bkRhdGFCbGFja0JlcnJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2JsYWNrYmVy
cnkvUGx1Z2luRGF0YUJsYWNrQmVycnkuY3BwCkBAIC00MSw4ICs0MSw4IEBAIHZvaWQgUGx1Z2lu
RGF0YTo6aW5pdFBsdWdpbnMoY29uc3QgUGFnZSopCiAgICAgICAgIE1JTUVUb0Rlc2NyaXB0aW9u
c01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWltZVRvRGVzY3JpcHRpb25zLmVuZCgpOwogICAg
ICAgICBmb3IgKE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtaW1l
VG9EZXNjcmlwdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBN
aW1lQ2xhc3NJbmZvIG1pbWU7Ci0gICAgICAgICAgICBtaW1lLnR5cGUgPSBpdC0+Zmlyc3Q7Ci0g
ICAgICAgICAgICBtaW1lLmRlc2MgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgbWltZS50eXBl
ID0gaXQtPmtleTsKKyAgICAgICAgICAgIG1pbWUuZGVzYyA9IGl0LT52YWx1ZTsKICAgICAgICAg
ICAgIG1pbWUuZXh0ZW5zaW9ucyA9IHBhY2thZ2UtPm1pbWVUb0V4dGVuc2lvbnMoKS5nZXQobWlt
ZS50eXBlKTsKICAgICAgICAgICAgIGluZm8ubWltZXMuYXBwZW5kKG1pbWUpOwogICAgICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9QbHVnaW5EYXRhRWZsLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1BsdWdpbkRhdGFFZmwuY3BwCmluZGV4IGMy
MWQ1MWIxOWQ3YjI0YjJjMTU5YzJkZGIzN2JmN2ZlNWRkOGQ5NGMuLjQ3NWY5ZmU1ODMzYmFjNDU3
NjVkOTNhNWZiNDZhMjZiNzYxOTNkZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdp
bnMvZWZsL1BsdWdpbkRhdGFFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZs
L1BsdWdpbkRhdGFFZmwuY3BwCkBAIC00Nyw4ICs0Nyw4IEBAIHZvaWQgUGx1Z2luRGF0YTo6aW5p
dFBsdWdpbnMoY29uc3QgUGFnZSopCiAgICAgICAgIGZvciAoTUlNRVRvRGVzY3JpcHRpb25zTWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKICAgICAgICAgICAgIE1pbWVDbGFzc0luZm8gbWltZTsKIAotICAgICAgICAg
ICAgbWltZS50eXBlID0gaXQtPmZpcnN0OwotICAgICAgICAgICAgbWltZS5kZXNjID0gaXQtPnNl
Y29uZDsKKyAgICAgICAgICAgIG1pbWUudHlwZSA9IGl0LT5rZXk7CisgICAgICAgICAgICBtaW1l
LmRlc2MgPSBpdC0+dmFsdWU7CiAgICAgICAgICAgICBtaW1lLmV4dGVuc2lvbnMgPSBwYWNrYWdl
LT5taW1lVG9FeHRlbnNpb25zKCkuZ2V0KG1pbWUudHlwZSk7CiAKICAgICAgICAgICAgIGluZm8u
bWltZXMuYXBwZW5kKG1pbWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy93
eC9QbHVnaW5EYXRhV3guY3BwIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy93eC9QbHVnaW5EYXRh
V3guY3BwCmluZGV4IDBlYjg5MGZlZjA1YTExNWVhY2U0MjYzNzY4MGEzZDZhMTJmNTc3MjkuLjI3
OTUyYzRhZThiZmE0OWU5OGIxMWFlOTk1OWZjNzU0ZTRkYjIzYmUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsdWdpbnMvd3gvUGx1Z2luRGF0YVd4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbHVnaW5zL3d4L1BsdWdpbkRhdGFXeC5jcHAKQEAgLTUxLDggKzUxLDggQEAgdm9pZCBQbHVn
aW5EYXRhOjppbml0UGx1Z2lucyhjb25zdCBQYWdlKikKICAgICAgICAgZm9yIChNSU1FVG9EZXNj
cmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWltZVRvRGVzY3JpcHRpb25zLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgTWltZUNsYXNzSW5mbyBtaW1lOwog
Ci0gICAgICAgICAgICBtaW1lLnR5cGUgPSBpdC0+Zmlyc3Q7Ci0gICAgICAgICAgICBtaW1lLmRl
c2MgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgbWltZS50eXBlID0gaXQtPmtleTsKKyAgICAg
ICAgICAgIG1pbWUuZGVzYyA9IGl0LT52YWx1ZTsKICAgICAgICAgICAgIG1pbWUuZXh0ZW5zaW9u
cyA9IHBhY2thZ2UtPm1pbWVUb0V4dGVuc2lvbnMoKS5nZXQobWltZS50eXBlKTsKIAogICAgICAg
ICAgICAgaW5mby5taW1lcy5hcHBlbmQobWltZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
SW5saW5lRmxvd0JveC5jcHAKaW5kZXggMjA4MWM2ODJkZWQ1ZTdmNTRlOWI2M2NiZmEzYjY4YTJj
ZGI4MjBlOC4uZWZiMGU0ZmU0YjBiYjlhNmVlYzBjYzU5N2U4Zjk2NmI1NjQ0NzQ0YSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcApAQCAtNDQ5LDcgKzQ0OSw3
IEBAIGJvb2wgSW5saW5lRmxvd0JveDo6cmVxdWlyZXNJZGVvZ3JhcGhpY0Jhc2VsaW5lKGNvbnN0
IEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvCiAgICAgICAgICAgICBjb25zdCBWZWN0b3I8Y29u
c3QgU2ltcGxlRm9udERhdGEqPiogdXNlZEZvbnRzID0gMDsKICAgICAgICAgICAgIGlmIChjdXJy
LT5pc0lubGluZVRleHRCb3goKSkgewogICAgICAgICAgICAgICAgIEdseXBoT3ZlcmZsb3dBbmRG
YWxsYmFja0ZvbnRzTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHRleHRCb3hEYXRhTWFwLmZpbmQo
dG9JbmxpbmVUZXh0Qm94KGN1cnIpKTsKLSAgICAgICAgICAgICAgICB1c2VkRm9udHMgPSBpdCA9
PSB0ZXh0Qm94RGF0YU1hcC5lbmQoKSA/IDAgOiAmaXQtPnNlY29uZC5maXJzdDsKKyAgICAgICAg
ICAgICAgICB1c2VkRm9udHMgPSBpdCA9PSB0ZXh0Qm94RGF0YU1hcC5lbmQoKSA/IDAgOiAmaXQt
PnZhbHVlLmZpcnN0OwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAodXNlZEZvbnRz
KSB7CkBAIC04MTIsNyArODEyLDcgQEAgaW5saW5lIHZvaWQgSW5saW5lRmxvd0JveDo6YWRkVGV4
dEJveFZpc3VhbE92ZXJmbG93KElubGluZVRleHRCb3gqIHRleHRCb3gsIEdseXAKICAgICBSZW5k
ZXJTdHlsZSogc3R5bGUgPSB0ZXh0Qm94LT5yZW5kZXJlcigpLT5zdHlsZShpc0ZpcnN0TGluZVN0
eWxlKCkpOwogICAgIAogICAgIEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFwOjppdGVy
YXRvciBpdCA9IHRleHRCb3hEYXRhTWFwLmZpbmQodGV4dEJveCk7Ci0gICAgR2x5cGhPdmVyZmxv
dyogZ2x5cGhPdmVyZmxvdyA9IGl0ID09IHRleHRCb3hEYXRhTWFwLmVuZCgpID8gMCA6ICZpdC0+
c2Vjb25kLnNlY29uZDsKKyAgICBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93ID0gaXQgPT0g
dGV4dEJveERhdGFNYXAuZW5kKCkgPyAwIDogJml0LT52YWx1ZS5zZWNvbmQ7CiAgICAgYm9vbCBp
c0ZsaXBwZWRMaW5lID0gc3R5bGUtPmlzRmxpcHBlZExpbmVzV3JpdGluZ01vZGUoKTsKIAogICAg
IGludCB0b3BHbHlwaEVkZ2UgPSBnbHlwaE92ZXJmbG93ID8gKGlzRmxpcHBlZExpbmUgPyBnbHlw
aE92ZXJmbG93LT5ib3R0b20gOiBnbHlwaE92ZXJmbG93LT50b3ApIDogMDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCmluZGV4IDA0MzhkMWIxNjExYmNhYTRlOGU5OTdk
MWIzMjIyNzQwYmVhYjMzODQuLjgyMjZhZGQ3MzA4MzI1MGExZjJkNTBjMTA2YmIzMjkwMDBkMWQ0
ZTEgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcApAQCAtNDI2Miw3
ICs0MjYyLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6Y2xlYXJGbG9hdHMoQmxvY2tMYXlvdXRQYXNz
IGxheW91dFBhc3MpCiAKICAgICAgICAgUmVuZGVyZXJUb0Zsb2F0SW5mb01hcDo6aXRlcmF0b3Ig
ZW5kID0gZmxvYXRNYXAuZW5kKCk7CiAgICAgICAgIGZvciAoUmVuZGVyZXJUb0Zsb2F0SW5mb01h
cDo6aXRlcmF0b3IgaXQgPSBmbG9hdE1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAg
ICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCA9ICgqaXQpLnNlY29uZDsK
KyAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCA9ICgqaXQpLnZhbHVl
OwogICAgICAgICAgICAgaWYgKCFmbG9hdGluZ09iamVjdC0+aXNEZXNjZW5kYW50KCkpIHsKICAg
ICAgICAgICAgICAgICBjaGFuZ2VMb2dpY2FsVG9wID0gMDsKICAgICAgICAgICAgICAgICBjaGFu
Z2VMb2dpY2FsQm90dG9tID0gbWF4KGNoYW5nZUxvZ2ljYWxCb3R0b20sIGxvZ2ljYWxCb3R0b21G
b3JGbG9hdChmbG9hdGluZ09iamVjdCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAppbmRleCA5ZGQyMTgxMjUwMjVmMjkzYTg2YjU2
NTk3YzhiNzZmMjE4NGNkNWYyLi5mZTdiZWZkMDBjM2Y5ODM2Yjg4ZGUyOGNiYzgyY2FjNmRmMjE0
NjNmIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5l
TGF5b3V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5l
TGF5b3V0LmNwcApAQCAtNjYzLDE0ICs2NjMsMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldExv
Z2ljYWxXaWR0aEZvclRleHRSdW4oUm9vdElubGluZUJveCogbGluZUJveCwgQmlkaVJ1biogcnUK
ICAgICBpZiAoIWZhbGxiYWNrRm9udHMuaXNFbXB0eSgpKSB7CiAgICAgICAgIEFTU0VSVChydW4t
Pm1fYm94LT5pc1RleHQoKSk7CiAgICAgICAgIEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRz
TWFwOjppdGVyYXRvciBpdCA9IHRleHRCb3hEYXRhTWFwLmFkZCh0b0lubGluZVRleHRCb3gocnVu
LT5tX2JveCksIG1ha2VfcGFpcihWZWN0b3I8Y29uc3QgU2ltcGxlRm9udERhdGEqPigpLCBHbHlw
aE92ZXJmbG93KCkpKS5pdGVyYXRvcjsKLSAgICAgICAgQVNTRVJUKGl0LT5zZWNvbmQuZmlyc3Qu
aXNFbXB0eSgpKTsKLSAgICAgICAgY29weVRvVmVjdG9yKGZhbGxiYWNrRm9udHMsIGl0LT5zZWNv
bmQuZmlyc3QpOworICAgICAgICBBU1NFUlQoaXQtPnZhbHVlLmZpcnN0LmlzRW1wdHkoKSk7Cisg
ICAgICAgIGNvcHlUb1ZlY3RvcihmYWxsYmFja0ZvbnRzLCBpdC0+dmFsdWUuZmlyc3QpOwogICAg
ICAgICBydW4tPm1fYm94LT5wYXJlbnQoKS0+Y2xlYXJEZXNjZW5kYW50c0hhdmVTYW1lTGluZUhl
aWdodEFuZEJhc2VsaW5lKCk7CiAgICAgfQogICAgIGlmICgoZ2x5cGhPdmVyZmxvdy50b3AgfHwg
Z2x5cGhPdmVyZmxvdy5ib3R0b20gfHwgZ2x5cGhPdmVyZmxvdy5sZWZ0IHx8IGdseXBoT3ZlcmZs
b3cucmlnaHQpKSB7CiAgICAgICAgIEFTU0VSVChydW4tPm1fYm94LT5pc1RleHQoKSk7CiAgICAg
ICAgIEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFwOjppdGVyYXRvciBpdCA9IHRleHRC
b3hEYXRhTWFwLmFkZCh0b0lubGluZVRleHRCb3gocnVuLT5tX2JveCksIG1ha2VfcGFpcihWZWN0
b3I8Y29uc3QgU2ltcGxlRm9udERhdGEqPigpLCBHbHlwaE92ZXJmbG93KCkpKS5pdGVyYXRvcjsK
LSAgICAgICAgaXQtPnNlY29uZC5zZWNvbmQgPSBnbHlwaE92ZXJmbG93OworICAgICAgICBpdC0+
dmFsdWUuc2Vjb25kID0gZ2x5cGhPdmVyZmxvdzsKICAgICAgICAgcnVuLT5tX2JveC0+Y2xlYXJL
bm93blRvSGF2ZU5vT3ZlcmZsb3coKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3guY3BwCmluZGV4IGUzYjgxYTc0OTkzM2JmYjNhM2YyMmI4NGU4NzNkMDY3MjgyNzgy
YzYuLjRjMDRjZTdjNjZmYTljZjNlNDU2ZTYzY2RmODVlM2VhZjY5YWM4MzMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCkBAIC03ODUsNyArNzg1LDcgQEAgSW50U2l6ZSBS
ZW5kZXJCb3g6OmNhY2hlZFNpemVGb3JPdmVyZmxvd0NsaXAoKSBjb25zdAogICAgIGlmIChpdCA9
PSBjYWNoZWRTaXplRm9yT3ZlcmZsb3dDbGlwTWFwKCkuZW5kKCkpCiAgICAgICAgIHJldHVybiBM
YXlvdXRTaXplKCk7CiAKLSAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICByZXR1cm4gaXQtPnZh
bHVlOwogfQogCiB2b2lkIFJlbmRlckJveDo6dXBkYXRlQ2FjaGVkU2l6ZUZvck92ZXJmbG93Q2xp
cCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxP
YmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0
LmNwcAppbmRleCAyZTU1ZTdmNzQ5MjQ2NDQ5NzdjNjMzZWU3ZTZlYmE0YTViOWFjYWU0Li5kNzAy
NmE1NDAyOGRlMDYxNzQ1NWZjMjZmNWI4NWZiNjgyZmJkZDUxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKQEAgLTEzMiw3ICsxMzIs
NyBAQCB2b2lkIEltYWdlUXVhbGl0eUNvbnRyb2xsZXI6OmhpZ2hRdWFsaXR5UmVwYWludFRpbWVy
RmlyZWQoVGltZXI8SW1hZ2VRdWFsaXR5Q29udAogICAgIGlmIChtX2FuaW1hdGVkUmVzaXplSXNB
Y3RpdmUpIHsKICAgICAgICAgbV9hbmltYXRlZFJlc2l6ZUlzQWN0aXZlID0gZmFsc2U7CiAgICAg
ICAgIGZvciAoT2JqZWN0TGF5ZXJTaXplTWFwOjppdGVyYXRvciBpdCA9IG1fb2JqZWN0TGF5ZXJT
aXplTWFwLmJlZ2luKCk7IGl0ICE9IG1fb2JqZWN0TGF5ZXJTaXplTWFwLmVuZCgpOyArK2l0KQot
ICAgICAgICAgICAgaXQtPmZpcnN0LT5yZXBhaW50KCk7CisgICAgICAgICAgICBpdC0+a2V5LT5y
ZXBhaW50KCk7CiAgICAgfQogfQogCkBAIC0xNTcsMTQgKzE1NywxNCBAQCBib29sIEltYWdlUXVh
bGl0eUNvbnRyb2xsZXI6OnNob3VsZFBhaW50QXRMb3dRdWFsaXR5KEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwgUgogCiAgICAgLy8gTG9vayBvdXJzZWx2ZXMgdXAgaW4gdGhlIGhhc2h0YWJsZXMu
CiAgICAgT2JqZWN0TGF5ZXJTaXplTWFwOjppdGVyYXRvciBpID0gbV9vYmplY3RMYXllclNpemVN
YXAuZmluZChvYmplY3QpOwotICAgIExheWVyU2l6ZU1hcCogaW5uZXJNYXAgPSBpICE9IG1fb2Jq
ZWN0TGF5ZXJTaXplTWFwLmVuZCgpID8gJmktPnNlY29uZCA6IDA7CisgICAgTGF5ZXJTaXplTWFw
KiBpbm5lck1hcCA9IGkgIT0gbV9vYmplY3RMYXllclNpemVNYXAuZW5kKCkgPyAmaS0+dmFsdWUg
OiAwOwogICAgIExheW91dFNpemUgb2xkU2l6ZTsKICAgICBib29sIGlzRmlyc3RSZXNpemUgPSB0
cnVlOwogICAgIGlmIChpbm5lck1hcCkgewogICAgICAgICBMYXllclNpemVNYXA6Oml0ZXJhdG9y
IGogPSBpbm5lck1hcC0+ZmluZChsYXllcik7CiAgICAgICAgIGlmIChqICE9IGlubmVyTWFwLT5l
bmQoKSkgewogICAgICAgICAgICAgaXNGaXJzdFJlc2l6ZSA9IGZhbHNlOwotICAgICAgICAgICAg
b2xkU2l6ZSA9IGotPnNlY29uZDsKKyAgICAgICAgICAgIG9sZFNpemUgPSBqLT52YWx1ZTsKICAg
ICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckNvdW50ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIu
Y3BwCmluZGV4IDA4MDdlYTlkZDk3ODE2YTNmNjdiY2EwZmM1ODg4YjU4Y2Q3ZjFkNGUuLmRjNDM4
YmUyOGEzYmRjYTViM2VlMGYwMTI3ZWI0NDliZjFhMmJiNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb3VudGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQ291bnRlci5jcHAKQEAgLTU2MywxMSArNTYzLDExIEBAIHZvaWQgUmVu
ZGVyQ291bnRlcjo6ZGVzdHJveUNvdW50ZXJOb2RlcyhSZW5kZXJPYmplY3QqIG93bmVyKQogICAg
IENvdW50ZXJNYXBzOjppdGVyYXRvciBtYXBzSXRlcmF0b3IgPSBtYXBzLmZpbmQob3duZXIpOwog
ICAgIGlmIChtYXBzSXRlcmF0b3IgPT0gbWFwcy5lbmQoKSkKICAgICAgICAgcmV0dXJuOwotICAg
IENvdW50ZXJNYXAqIG1hcCA9IG1hcHNJdGVyYXRvci0+c2Vjb25kOworICAgIENvdW50ZXJNYXAq
IG1hcCA9IG1hcHNJdGVyYXRvci0+dmFsdWU7CiAgICAgQ291bnRlck1hcDo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gbWFwLT5lbmQoKTsKICAgICBmb3IgKENvdW50ZXJNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgQXRvbWljU3Ry
aW5nIGlkZW50aWZpZXIoaXQtPmZpcnN0LmdldCgpKTsKLSAgICAgICAgZGVzdHJveUNvdW50ZXJO
b2RlV2l0aG91dE1hcFJlbW92YWwoaWRlbnRpZmllciwgaXQtPnNlY29uZC5nZXQoKSk7CisgICAg
ICAgIEF0b21pY1N0cmluZyBpZGVudGlmaWVyKGl0LT5rZXkuZ2V0KCkpOworICAgICAgICBkZXN0
cm95Q291bnRlck5vZGVXaXRob3V0TWFwUmVtb3ZhbChpZGVudGlmaWVyLCBpdC0+dmFsdWUuZ2V0
KCkpOwogICAgIH0KICAgICBtYXBzLnJlbW92ZShtYXBzSXRlcmF0b3IpOwogICAgIGRlbGV0ZSBt
YXA7CkBAIC01ODIsNyArNTgyLDcgQEAgdm9pZCBSZW5kZXJDb3VudGVyOjpkZXN0cm95Q291bnRl
ck5vZGUoUmVuZGVyT2JqZWN0KiBvd25lciwgY29uc3QgQXRvbWljU3RyaW5nJgogICAgIENvdW50
ZXJNYXA6Oml0ZXJhdG9yIG1hcEl0ZXJhdG9yID0gbWFwLT5maW5kKGlkZW50aWZpZXIuaW1wbCgp
KTsKICAgICBpZiAobWFwSXRlcmF0b3IgPT0gbWFwLT5lbmQoKSkKICAgICAgICAgcmV0dXJuOwot
ICAgIGRlc3Ryb3lDb3VudGVyTm9kZVdpdGhvdXRNYXBSZW1vdmFsKGlkZW50aWZpZXIsIG1hcEl0
ZXJhdG9yLT5zZWNvbmQuZ2V0KCkpOworICAgIGRlc3Ryb3lDb3VudGVyTm9kZVdpdGhvdXRNYXBS
ZW1vdmFsKGlkZW50aWZpZXIsIG1hcEl0ZXJhdG9yLT52YWx1ZS5nZXQoKSk7CiAgICAgbWFwLT5y
ZW1vdmUobWFwSXRlcmF0b3IpOwogICAgIC8vIFdlIGRvIG5vdCBkZWxldGUgIm1hcCIgaGVyZSBl
dmVuIGlmIGVtcHR5IGJlY2F1c2Ugd2UgZXhwZWN0IHRvIHJldXNlCiAgICAgLy8gaXQgc29vbi4g
SW4gb3JkZXIgZm9yIGEgcmVuZGVyZXIgdG8gbG9zZSBhbGwgaXRzIGNvdW50ZXJzIHBlcm1hbmVu
dGx5LApAQCAtNjE5LDIyICs2MTksMjIgQEAgc3RhdGljIHZvaWQgdXBkYXRlQ291bnRlcnMoUmVu
ZGVyT2JqZWN0KiByZW5kZXJlcikKICAgICBDb3VudGVyRGlyZWN0aXZlTWFwOjpjb25zdF9pdGVy
YXRvciBlbmQgPSBkaXJlY3RpdmVNYXAtPmVuZCgpOwogICAgIGlmICghcmVuZGVyZXItPmhhc0Nv
dW50ZXJOb2RlTWFwKCkpIHsKICAgICAgICAgZm9yIChDb3VudGVyRGlyZWN0aXZlTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IGRpcmVjdGl2ZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQot
ICAgICAgICAgICAgbWFrZUNvdW50ZXJOb2RlKHJlbmRlcmVyLCBBdG9taWNTdHJpbmcoaXQtPmZp
cnN0LmdldCgpKSwgZmFsc2UpOworICAgICAgICAgICAgbWFrZUNvdW50ZXJOb2RlKHJlbmRlcmVy
LCBBdG9taWNTdHJpbmcoaXQtPmtleS5nZXQoKSksIGZhbHNlKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICBDb3VudGVyTWFwKiBjb3VudGVyTWFwID0gY291bnRlck1hcHMoKS5nZXQocmVu
ZGVyZXIpOwogICAgIEFTU0VSVChjb3VudGVyTWFwKTsKICAgICBmb3IgKENvdW50ZXJEaXJlY3Rp
dmVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZGlyZWN0aXZlTWFwLT5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKLSAgICAgICAgUmVmUHRyPENvdW50ZXJOb2RlPiBub2RlID0gY291bnRlck1h
cC0+Z2V0KGl0LT5maXJzdC5nZXQoKSk7CisgICAgICAgIFJlZlB0cjxDb3VudGVyTm9kZT4gbm9k
ZSA9IGNvdW50ZXJNYXAtPmdldChpdC0+a2V5LmdldCgpKTsKICAgICAgICAgaWYgKCFub2RlKSB7
Ci0gICAgICAgICAgICBtYWtlQ291bnRlck5vZGUocmVuZGVyZXIsIEF0b21pY1N0cmluZyhpdC0+
Zmlyc3QuZ2V0KCkpLCBmYWxzZSk7CisgICAgICAgICAgICBtYWtlQ291bnRlck5vZGUocmVuZGVy
ZXIsIEF0b21pY1N0cmluZyhpdC0+a2V5LmdldCgpKSwgZmFsc2UpOwogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIH0KICAgICAgICAgUmVmUHRyPENvdW50ZXJOb2RlPiBuZXdQYXJlbnQg
PSAwOwogICAgICAgICBSZWZQdHI8Q291bnRlck5vZGU+IG5ld1ByZXZpb3VzU2libGluZyA9IDA7
CiAgICAgICAgIAotICAgICAgICBmaW5kUGxhY2VGb3JDb3VudGVyKHJlbmRlcmVyLCBBdG9taWNT
dHJpbmcoaXQtPmZpcnN0LmdldCgpKSwgbm9kZS0+aGFzUmVzZXRUeXBlKCksIG5ld1BhcmVudCwg
bmV3UHJldmlvdXNTaWJsaW5nKTsKLSAgICAgICAgaWYgKG5vZGUgIT0gY291bnRlck1hcC0+Z2V0
KGl0LT5maXJzdC5nZXQoKSkpCisgICAgICAgIGZpbmRQbGFjZUZvckNvdW50ZXIocmVuZGVyZXIs
IEF0b21pY1N0cmluZyhpdC0+a2V5LmdldCgpKSwgbm9kZS0+aGFzUmVzZXRUeXBlKCksIG5ld1Bh
cmVudCwgbmV3UHJldmlvdXNTaWJsaW5nKTsKKyAgICAgICAgaWYgKG5vZGUgIT0gY291bnRlck1h
cC0+Z2V0KGl0LT5rZXkuZ2V0KCkpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIENv
dW50ZXJOb2RlKiBwYXJlbnQgPSBub2RlLT5wYXJlbnQoKTsKICAgICAgICAgaWYgKG5ld1BhcmVu
dCA9PSBwYXJlbnQgJiYgbmV3UHJldmlvdXNTaWJsaW5nID09IG5vZGUtPnByZXZpb3VzU2libGlu
ZygpKQpAQCAtNjQyLDcgKzY0Miw3IEBAIHN0YXRpYyB2b2lkIHVwZGF0ZUNvdW50ZXJzKFJlbmRl
ck9iamVjdCogcmVuZGVyZXIpCiAgICAgICAgIGlmIChwYXJlbnQpCiAgICAgICAgICAgICBwYXJl
bnQtPnJlbW92ZUNoaWxkKG5vZGUuZ2V0KCkpOwogICAgICAgICBpZiAobmV3UGFyZW50KQotICAg
ICAgICAgICAgbmV3UGFyZW50LT5pbnNlcnRBZnRlcihub2RlLmdldCgpLCBuZXdQcmV2aW91c1Np
YmxpbmcuZ2V0KCksIGl0LT5maXJzdC5nZXQoKSk7CisgICAgICAgICAgICBuZXdQYXJlbnQtPmlu
c2VydEFmdGVyKG5vZGUuZ2V0KCksIG5ld1ByZXZpb3VzU2libGluZy5nZXQoKSwgaXQtPmtleS5n
ZXQoKSk7CiAgICAgfQogfQogCkBAIC02NzEsMjEgKzY3MSwyMSBAQCB2b2lkIFJlbmRlckNvdW50
ZXI6OnJlbmRlcmVyU3R5bGVDaGFuZ2VkKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IFJl
bmRlclN0eQogICAgICAgICAgICAgQ291bnRlckRpcmVjdGl2ZU1hcDo6Y29uc3RfaXRlcmF0b3Ig
bmV3TWFwRW5kID0gbmV3Q291bnRlckRpcmVjdGl2ZXMtPmVuZCgpOwogICAgICAgICAgICAgQ291
bnRlckRpcmVjdGl2ZU1hcDo6Y29uc3RfaXRlcmF0b3Igb2xkTWFwRW5kID0gb2xkQ291bnRlckRp
cmVjdGl2ZXMtPmVuZCgpOwogICAgICAgICAgICAgZm9yIChDb3VudGVyRGlyZWN0aXZlTWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IG5ld0NvdW50ZXJEaXJlY3RpdmVzLT5iZWdpbigpOyBpdCAhPSBu
ZXdNYXBFbmQ7ICsraXQpIHsKLSAgICAgICAgICAgICAgICBDb3VudGVyRGlyZWN0aXZlTWFwOjpj
b25zdF9pdGVyYXRvciBvbGRNYXBJdCA9IG9sZENvdW50ZXJEaXJlY3RpdmVzLT5maW5kKGl0LT5m
aXJzdCk7CisgICAgICAgICAgICAgICAgQ291bnRlckRpcmVjdGl2ZU1hcDo6Y29uc3RfaXRlcmF0
b3Igb2xkTWFwSXQgPSBvbGRDb3VudGVyRGlyZWN0aXZlcy0+ZmluZChpdC0+a2V5KTsKICAgICAg
ICAgICAgICAgICBpZiAob2xkTWFwSXQgIT0gb2xkTWFwRW5kKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChvbGRNYXBJdC0+c2Vjb25kID09IGl0LT5zZWNvbmQpCisgICAgICAgICAgICAgICAg
ICAgIGlmIChvbGRNYXBJdC0+dmFsdWUgPT0gaXQtPnZhbHVlKQogICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIFJlbmRlckNvdW50ZXI6OmRlc3Ry
b3lDb3VudGVyTm9kZShyZW5kZXJlciwgaXQtPmZpcnN0LmdldCgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgUmVuZGVyQ291bnRlcjo6ZGVzdHJveUNvdW50ZXJOb2RlKHJlbmRlcmVyLCBpdC0+a2V5
LmdldCgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgLy8gV2UgbXVzdCBj
cmVhdGUgdGhpcyBub2RlIGhlcmUsIGJlY2F1c2UgdGhlIGNoYW5nZWQgbm9kZSBtYXkgYmUgYSBu
b2RlIHdpdGggbm8gZGlzcGxheSBzdWNoIGFzCiAgICAgICAgICAgICAgICAgLy8gYXMgdGhvc2Ug
Y3JlYXRlZCBieSB0aGUgaW5jcmVtZW50IG9yIHJlc2V0IGRpcmVjdGl2ZXMgYW5kIHRoZSByZS1s
YXlvdXQgdGhhdCB3aWxsIGhhcHBlbiB3aWxsCiAgICAgICAgICAgICAgICAgLy8gbm90IGNhdGNo
IHRoZSBjaGFuZ2UgaWYgdGhlIG5vZGUgaGFkIG5vIGNoaWxkcmVuLgotICAgICAgICAgICAgICAg
IG1ha2VDb3VudGVyTm9kZShyZW5kZXJlciwgaXQtPmZpcnN0LmdldCgpLCBmYWxzZSk7CisgICAg
ICAgICAgICAgICAgbWFrZUNvdW50ZXJOb2RlKHJlbmRlcmVyLCBpdC0+a2V5LmdldCgpLCBmYWxz
ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyBEZXN0cm95aW5nIG9sZCBjb3VudGVy
cyB0aGF0IGRvIG5vdCBleGlzdCBpbiB0aGUgbmV3IGNvdW50ZXJEaXJlY3RpdmUgbWFwLgogICAg
ICAgICAgICAgZm9yIChDb3VudGVyRGlyZWN0aXZlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG9s
ZENvdW50ZXJEaXJlY3RpdmVzLT5iZWdpbigpOyBpdCAhPW9sZE1hcEVuZDsgKytpdCkgewotICAg
ICAgICAgICAgICAgIGlmICghbmV3Q291bnRlckRpcmVjdGl2ZXMtPmNvbnRhaW5zKGl0LT5maXJz
dCkpCi0gICAgICAgICAgICAgICAgICAgIFJlbmRlckNvdW50ZXI6OmRlc3Ryb3lDb3VudGVyTm9k
ZShyZW5kZXJlciwgaXQtPmZpcnN0LmdldCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoIW5ld0Nv
dW50ZXJEaXJlY3RpdmVzLT5jb250YWlucyhpdC0+a2V5KSkKKyAgICAgICAgICAgICAgICAgICAg
UmVuZGVyQ291bnRlcjo6ZGVzdHJveUNvdW50ZXJOb2RlKHJlbmRlcmVyLCBpdC0+a2V5LmdldCgp
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChyZW5k
ZXJlci0+aGFzQ291bnRlck5vZGVNYXAoKSkKQEAgLTY5Nyw3ICs2OTcsNyBAQCB2b2lkIFJlbmRl
ckNvdW50ZXI6OnJlbmRlcmVyU3R5bGVDaGFuZ2VkKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNv
bnN0IFJlbmRlclN0eQogICAgICAgICAgICAgLy8gV2UgbXVzdCBjcmVhdGUgdGhpcyBub2RlIGhl
cmUsIGJlY2F1c2UgdGhlIGFkZGVkIG5vZGUgbWF5IGJlIGEgbm9kZSB3aXRoIG5vIGRpc3BsYXkg
c3VjaCBhcwogICAgICAgICAgICAgLy8gYXMgdGhvc2UgY3JlYXRlZCBieSB0aGUgaW5jcmVtZW50
IG9yIHJlc2V0IGRpcmVjdGl2ZXMgYW5kIHRoZSByZS1sYXlvdXQgdGhhdCB3aWxsIGhhcHBlbiB3
aWxsCiAgICAgICAgICAgICAvLyBub3QgY2F0Y2ggdGhlIGNoYW5nZSBpZiB0aGUgbm9kZSBoYWQg
bm8gY2hpbGRyZW4uCi0gICAgICAgICAgICBtYWtlQ291bnRlck5vZGUocmVuZGVyZXIsIGl0LT5m
aXJzdC5nZXQoKSwgZmFsc2UpOworICAgICAgICAgICAgbWFrZUNvdW50ZXJOb2RlKHJlbmRlcmVy
LCBpdC0+a2V5LmdldCgpLCBmYWxzZSk7CiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAKaW5kZXggMGY5ZjZkM2VjN2M5
OTE2ZDk2ZTZhNzZiZjAzODdiMDEwNTNjOGI3NS4uOWUzYjUxYWE1YzdiNDU1NjVlYmQyNzI4ZDky
MDUzMjM3NmM5NjkxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckZsb3dUaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93
VGhyZWFkLmNwcApAQCAtNjU1LDcgKzY1NSw3IEBAIHZvaWQgUmVuZGVyRmxvd1RocmVhZDo6c2V0
UmVnaW9uUmFuZ2VGb3JCb3goY29uc3QgUmVuZGVyQm94KiBib3gsIExheW91dFVuaXQgb2ZmCiAg
ICAgfQogCiAgICAgLy8gSWYgbm90aGluZyBjaGFuZ2VkLCBqdXN0IGJhaWwuCi0gICAgUmVuZGVy
UmVnaW9uUmFuZ2UmIHJhbmdlID0gaXQtPnNlY29uZDsKKyAgICBSZW5kZXJSZWdpb25SYW5nZSYg
cmFuZ2UgPSBpdC0+dmFsdWU7CiAgICAgaWYgKHJhbmdlLnN0YXJ0UmVnaW9uKCkgPT0gc3RhcnRS
ZWdpb24gJiYgcmFuZ2UuZW5kUmVnaW9uKCkgPT0gZW5kUmVnaW9uKQogICAgICAgICByZXR1cm47
CiAKQEAgLTY4NSw3ICs2ODUsNyBAQCB2b2lkIFJlbmRlckZsb3dUaHJlYWQ6OmdldFJlZ2lvblJh
bmdlRm9yQm94KGNvbnN0IFJlbmRlckJveCogYm94LCBSZW5kZXJSZWdpb24qJgogICAgIGlmIChp
dCA9PSBtX3JlZ2lvblJhbmdlTWFwLmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBjb25z
dCBSZW5kZXJSZWdpb25SYW5nZSYgcmFuZ2UgPSBpdC0+c2Vjb25kOworICAgIGNvbnN0IFJlbmRl
clJlZ2lvblJhbmdlJiByYW5nZSA9IGl0LT52YWx1ZTsKICAgICBzdGFydFJlZ2lvbiA9IHJhbmdl
LnN0YXJ0UmVnaW9uKCk7CiAgICAgZW5kUmVnaW9uID0gcmFuZ2UuZW5kUmVnaW9uKCk7CiAgICAg
QVNTRVJUKG1fcmVnaW9uTGlzdC5jb250YWlucyhzdGFydFJlZ2lvbikgJiYgbV9yZWdpb25MaXN0
LmNvbnRhaW5zKGVuZFJlZ2lvbikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ci5jcHAKaW5kZXggMTYxN2MwNGYyYTFkOWE3ZmJkNGU5NTgyNmU2MmVlMGE2OTc0ODg0MS4uOGFk
NmM4MjZmNmRlNzM2ZDNiZWQ3NzQ5NmI4MzExMTg0Y2U0ODdmOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCkBAIC0yNzE4LDcgKzI3MTgsNyBAQCB2b2lkIFJlbmRl
ckxheWVyOjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IExheW91dFJlY3Qm
IGRhbWFnZVJlY3QsCiAgICAgcGFpbnRMYXllcih0aGlzLCBjb250ZXh0LCBkYW1hZ2VSZWN0LCBw
YWludEJlaGF2aW9yLCBwYWludGluZ1Jvb3QsIHJlZ2lvbiwgJm92ZXJsYXBUZXN0UmVxdWVzdHMs
IHBhaW50RmxhZ3MpOwogICAgIE92ZXJsYXBUZXN0UmVxdWVzdE1hcDo6aXRlcmF0b3IgZW5kID0g
b3ZlcmxhcFRlc3RSZXF1ZXN0cy5lbmQoKTsKICAgICBmb3IgKE92ZXJsYXBUZXN0UmVxdWVzdE1h
cDo6aXRlcmF0b3IgaXQgPSBvdmVybGFwVGVzdFJlcXVlc3RzLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkKLSAgICAgICAgaXQtPmZpcnN0LT5zZXRPdmVybGFwVGVzdFJlc3VsdChmYWxzZSk7Cisg
ICAgICAgIGl0LT5rZXktPnNldE92ZXJsYXBUZXN0UmVzdWx0KGZhbHNlKTsKIH0KIAogdm9pZCBS
ZW5kZXJMYXllcjo6cGFpbnRPdmVybGF5U2Nyb2xsYmFycyhHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QsIFBhaW50QmVoYXZpb3IgcGFpbnRCZWhh
dmlvciwgUmVuZGVyT2JqZWN0KiBwYWludGluZ1Jvb3QpCkBAIC0yNzg3LDExICsyNzg3LDExIEBA
IHN0YXRpYyB2b2lkIHBlcmZvcm1PdmVybGFwVGVzdHMoT3ZlcmxhcFRlc3RSZXF1ZXN0TWFwJiBv
dmVybGFwVGVzdFJlcXVlc3RzLCBjb25zCiAgICAgT3ZlcmxhcFRlc3RSZXF1ZXN0TWFwOjppdGVy
YXRvciBlbmQgPSBvdmVybGFwVGVzdFJlcXVlc3RzLmVuZCgpOwogICAgIExheW91dFJlY3QgYm91
bmRpbmdCb3ggPSBsYXllci0+Ym91bmRpbmdCb3gocm9vdExheWVyKTsKICAgICBmb3IgKE92ZXJs
YXBUZXN0UmVxdWVzdE1hcDo6aXRlcmF0b3IgaXQgPSBvdmVybGFwVGVzdFJlcXVlc3RzLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoIWJvdW5kaW5nQm94LmludGVyc2Vj
dHMoaXQtPnNlY29uZCkpCisgICAgICAgIGlmICghYm91bmRpbmdCb3guaW50ZXJzZWN0cyhpdC0+
dmFsdWUpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaXQtPmZpcnN0LT5zZXRP
dmVybGFwVGVzdFJlc3VsdCh0cnVlKTsKLSAgICAgICAgb3ZlcmxhcHBlZFJlcXVlc3RDbGllbnRz
LmFwcGVuZChpdC0+Zmlyc3QpOworICAgICAgICBpdC0+a2V5LT5zZXRPdmVybGFwVGVzdFJlc3Vs
dCh0cnVlKTsKKyAgICAgICAgb3ZlcmxhcHBlZFJlcXVlc3RDbGllbnRzLmFwcGVuZChpdC0+a2V5
KTsKICAgICB9CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvdmVybGFwcGVkUmVxdWVzdENs
aWVudHMuc2l6ZSgpOyArK2kpCiAgICAgICAgIG92ZXJsYXBUZXN0UmVxdWVzdHMucmVtb3ZlKG92
ZXJsYXBwZWRSZXF1ZXN0Q2xpZW50c1tpXSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93VGhyZWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3BwCmluZGV4IGRhYjVkN2IyMWU3YWU5ZjBkZDlj
MDBhNTg3NDAyYWRhMWFjN2ZjMDQuLjM2ZjBhYmJiNGI5ODllMGExMmRiYzA0MWRjMmJhZDM5MDU4
NTg1ZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZs
b3dUaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZs
b3dUaHJlYWQuY3BwCkBAIC0xMTAsNyArMTEwLDcgQEAgYm9vbCBSZW5kZXJOYW1lZEZsb3dUaHJl
YWQ6OmRlcGVuZHNPbihSZW5kZXJOYW1lZEZsb3dUaHJlYWQqIG90aGVyUmVuZGVyRmxvd1RocmUK
ICAgICBSZW5kZXJOYW1lZEZsb3dUaHJlYWRDb3VudGVkU2V0Ojpjb25zdF9pdGVyYXRvciBpdGVy
YXRvciA9IG1fbGF5b3V0QmVmb3JlVGhyZWFkc1NldC5iZWdpbigpOwogICAgIFJlbmRlck5hbWVk
Rmxvd1RocmVhZENvdW50ZWRTZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fbGF5b3V0QmVmb3Jl
VGhyZWFkc1NldC5lbmQoKTsKICAgICBmb3IgKDsgaXRlcmF0b3IgIT0gZW5kOyArK2l0ZXJhdG9y
KSB7Ci0gICAgICAgIGNvbnN0IFJlbmRlck5hbWVkRmxvd1RocmVhZCogYmVmb3JlRmxvd1RocmVh
ZCA9ICgqaXRlcmF0b3IpLmZpcnN0OworICAgICAgICBjb25zdCBSZW5kZXJOYW1lZEZsb3dUaHJl
YWQqIGJlZm9yZUZsb3dUaHJlYWQgPSAoKml0ZXJhdG9yKS5rZXk7CiAgICAgICAgIGlmIChiZWZv
cmVGbG93VGhyZWFkLT5kZXBlbmRzT24ob3RoZXJSZW5kZXJGbG93VGhyZWFkKSkKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTIzNiw3ICsyMzYsNyBAQCB2b2lkIFJlbmRlck5h
bWVkRmxvd1RocmVhZDo6cmVtb3ZlRGVwZW5kZW5jeU9uRmxvd1RocmVhZChSZW5kZXJOYW1lZEZs
b3dUaHJlYWQqCiB2b2lkIFJlbmRlck5hbWVkRmxvd1RocmVhZDo6cHVzaERlcGVuZGVuY2llcyhS
ZW5kZXJOYW1lZEZsb3dUaHJlYWRMaXN0JiBsaXN0KQogewogICAgIGZvciAoUmVuZGVyTmFtZWRG
bG93VGhyZWFkQ291bnRlZFNldDo6aXRlcmF0b3IgaXRlciA9IG1fbGF5b3V0QmVmb3JlVGhyZWFk
c1NldC5iZWdpbigpOyBpdGVyICE9IG1fbGF5b3V0QmVmb3JlVGhyZWFkc1NldC5lbmQoKTsgKytp
dGVyKSB7Ci0gICAgICAgIFJlbmRlck5hbWVkRmxvd1RocmVhZCogZmxvd1RocmVhZCA9ICgqaXRl
cikuZmlyc3Q7CisgICAgICAgIFJlbmRlck5hbWVkRmxvd1RocmVhZCogZmxvd1RocmVhZCA9ICgq
aXRlcikua2V5OwogICAgICAgICBpZiAobGlzdC5jb250YWlucyhmbG93VGhyZWFkKSkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICBmbG93VGhyZWFkLT5wdXNoRGVwZW5kZW5jaWVzKGxp
c3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcAppbmRleCAxNjFl
NTA5YWJlM2U2NTExMWUwMGExOTBlZjdmZThjMmRhN2RlNmM3Li4wNTczNDQ5N2IxMGNhNzYyMjEy
Y2QxNWVhN2ZhYjM2OGZhNTc2ODQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyUmVnaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
UmVnaW9uLmNwcApAQCAtMTAyLDcgKzEwMiw3IEBAIHZvaWQgUmVuZGVyUmVnaW9uOjpzZXRSZWdp
b25Cb3hlc1JlZ2lvblN0eWxlKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgZm9yIChSZW5kZXJC
b3hSZWdpb25JbmZvTWFwOjppdGVyYXRvciBpdGVyID0gbV9yZW5kZXJCb3hSZWdpb25JbmZvLmJl
Z2luKCksIGVuZCA9IG1fcmVuZGVyQm94UmVnaW9uSW5mby5lbmQoKTsgaXRlciAhPSBlbmQ7ICsr
aXRlcikgewotICAgICAgICBjb25zdCBSZW5kZXJCb3gqIGJveCA9IGl0ZXItPmZpcnN0OworICAg
ICAgICBjb25zdCBSZW5kZXJCb3gqIGJveCA9IGl0ZXItPmtleTsKICAgICAgICAgaWYgKCFib3gt
PmNhbkhhdmVSZWdpb25TdHlsZSgpKQogICAgICAgICAgICAgY29udGludWU7CiAKQEAgLTEyMiwx
NCArMTIyLDE0IEBAIHZvaWQgUmVuZGVyUmVnaW9uOjpyZXN0b3JlUmVnaW9uQm94ZXNPcmlnaW5h
bFN0eWxlKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgZm9yIChSZW5kZXJCb3hSZWdpb25JbmZv
TWFwOjppdGVyYXRvciBpdGVyID0gbV9yZW5kZXJCb3hSZWdpb25JbmZvLmJlZ2luKCksIGVuZCA9
IG1fcmVuZGVyQm94UmVnaW9uSW5mby5lbmQoKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewotICAg
ICAgICBjb25zdCBSZW5kZXJCb3gqIGJveCA9IGl0ZXItPmZpcnN0OworICAgICAgICBjb25zdCBS
ZW5kZXJCb3gqIGJveCA9IGl0ZXItPmtleTsKICAgICAgICAgUmVuZGVyQm94UmVnaW9uU3R5bGVN
YXA6Oml0ZXJhdG9yIGl0ID0gbV9yZW5kZXJCb3hSZWdpb25TdHlsZS5maW5kKGJveCk7CiAgICAg
ICAgIGlmIChpdCA9PSBtX3JlbmRlckJveFJlZ2lvblN0eWxlLmVuZCgpKQogICAgICAgICAgICAg
Y29udGludWU7CiAKICAgICAgICAgLy8gUmVzdG9yZSB0aGUgYm94IHN0eWxlIHRvIHRoZSBvcmln
aW5hbCBzdHlsZSBhbmQgc3RvcmUgdGhlIGJveCBzdHlsZSBpbiByZWdpb24gZm9yIGxhdGVyIHVz
ZS4KICAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBib3hSZWdpb25TdHlsZSA9IGJveC0+c3R5
bGUoKTsKLSAgICAgICAgKGNvbnN0X2Nhc3Q8UmVuZGVyQm94Kj4oYm94KSktPnNldFN0eWxlSW50
ZXJuYWwoaXQtPnNlY29uZCk7CisgICAgICAgIChjb25zdF9jYXN0PFJlbmRlckJveCo+KGJveCkp
LT5zZXRTdHlsZUludGVybmFsKGl0LT52YWx1ZSk7CiAgICAgICAgIG1fcmVuZGVyQm94UmVnaW9u
U3R5bGUuc2V0KGJveCwgYm94UmVnaW9uU3R5bGUpOwogICAgIH0KIH0KQEAgLTI0Niw3ICsyNDYs
NyBAQCBSZW5kZXJCb3hSZWdpb25JbmZvKiBSZW5kZXJSZWdpb246OnNldFJlbmRlckJveFJlZ2lv
bkluZm8oY29uc3QgUmVuZGVyQm94KiBib3gsCiAgICAgaWYgKCFtX2lzVmFsaWQgfHwgIW1fZmxv
d1RocmVhZCkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBPd25QdHI8UmVuZGVyQm94UmVnaW9u
SW5mbz4mIGJveEluZm8gPSBtX3JlbmRlckJveFJlZ2lvbkluZm8uYWRkKGJveCwgbnVsbHB0ciku
aXRlcmF0b3ItPnNlY29uZDsKKyAgICBPd25QdHI8UmVuZGVyQm94UmVnaW9uSW5mbz4mIGJveElu
Zm8gPSBtX3JlbmRlckJveFJlZ2lvbkluZm8uYWRkKGJveCwgbnVsbHB0cikuaXRlcmF0b3ItPnZh
bHVlOwogICAgIGlmIChib3hJbmZvKQogICAgICAgICAqYm94SW5mbyA9IFJlbmRlckJveFJlZ2lv
bkluZm8obG9naWNhbExlZnRJbnNldCwgbG9naWNhbFJpZ2h0SW5zZXQsIGNvbnRhaW5pbmdCbG9j
a0NoYWluSXNJbnNldCk7CiAgICAgZWxzZQpAQCAtMjg3LDcgKzI4Nyw3IEBAIFBhc3NSZWZQdHI8
UmVuZGVyU3R5bGU+IFJlbmRlclJlZ2lvbjo6cmVuZGVyQm94UmVnaW9uU3R5bGUoY29uc3QgUmVu
ZGVyQm94KiByZW5kCiAKICAgICBSZW5kZXJCb3hSZWdpb25TdHlsZU1hcDo6aXRlcmF0b3IgaXQg
PSBtX3JlbmRlckJveFJlZ2lvblN0eWxlLmZpbmQocmVuZGVyQm94KTsKICAgICBpZiAoaXQgIT0g
bV9yZW5kZXJCb3hSZWdpb25TdHlsZS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7
CisgICAgICAgIHJldHVybiBpdC0+dmFsdWU7CiAgICAgcmV0dXJuIGNvbXB1dGVTdHlsZUluUmVn
aW9uKHJlbmRlckJveCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRhYmxlU2VjdGlvbi5jcHAKaW5kZXggMzA2ZGRhNDFmMzE4ZWRhMjcwNDRkZjQxNDk5OTFlMGEz
NjgyYWFmMy4uNjE0NmNhNGFiNTRhM2Q0OTM2NDEzM2ZiZGYzZTA5YjE0NmNjMWI5YSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKQEAgLTE0
MTQsNyArMTQxNCw3IEBAIENvbGxhcHNlZEJvcmRlclZhbHVlJiBSZW5kZXJUYWJsZVNlY3Rpb246
OmNhY2hlZENvbGxhcHNlZEJvcmRlcihjb25zdCBSZW5kZXJUYWJsCiAgICAgQVNTRVJUKHRhYmxl
KCktPmNvbGxhcHNlQm9yZGVycygpKTsKICAgICBIYXNoTWFwPHBhaXI8Y29uc3QgUmVuZGVyVGFi
bGVDZWxsKiwgaW50PiwgQ29sbGFwc2VkQm9yZGVyVmFsdWU+OjppdGVyYXRvciBpdCA9IG1fY2Vs
bHNDb2xsYXBzZWRCb3JkZXJzLmZpbmQobWFrZV9wYWlyKGNlbGwsIHNpZGUpKTsKICAgICBBU1NF
UlQoaXQgIT0gbV9jZWxsc0NvbGxhcHNlZEJvcmRlcnMuZW5kKCkpOwotICAgIHJldHVybiBpdC0+
c2Vjb25kOworICAgIHJldHVybiBpdC0+dmFsdWU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5t
bSBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQppbmRleCBkOWUy
ZTg2N2NjMDYwYzYzNmUyYWY2ZjQ1NDMyYTc2ZTg0YzJkOWM0Li5iZDIxMTY0M2Q3YThjOWUyOTQ1
YmM1NTM4YzgwN2I2YmYyNWUyNjlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lTWFjLm1tCkBAIC0zNjAsNyArMzYwLDcgQEAgQ29sb3IgUmVuZGVyVGhlbWVNYWM6OnN5
c3RlbUNvbG9yKGludCBjc3NWYWx1ZUlkKSBjb25zdAogICAgIHsKICAgICAgICAgSGFzaE1hcDxp
bnQsIFJHQkEzMj46Oml0ZXJhdG9yIGl0ID0gbV9zeXN0ZW1Db2xvckNhY2hlLmZpbmQoY3NzVmFs
dWVJZCk7CiAgICAgICAgIGlmIChpdCAhPSBtX3N5c3RlbUNvbG9yQ2FjaGUuZW5kKCkpCi0gICAg
ICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIHJldHVybiBpdC0+dmFsdWU7
CiAgICAgfQogCiAgICAgQ29sb3IgY29sb3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Vmlldy5jcHAKaW5kZXggZmNhM2RjYTdhMzM5ZDhhMzJmNTU0MzYwMTFmMDY0MDRkY2M3ZmI5Yy4u
MDlhNjYzOTdkZWIzZjkzMjlmNzM2YTI2NWE0MDczZWNkNzM4YmFjZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcApAQCAtNDIzLDcgKzQyMyw3IEBAIEludFJlY3QgUmVu
ZGVyVmlldzo6c2VsZWN0aW9uQm91bmRzKGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRlbnQpIGNvbnN0
CiAgICAgSW50UmVjdCBzZWxSZWN0OwogICAgIFNlbGVjdGlvbk1hcDo6aXRlcmF0b3IgZW5kID0g
c2VsZWN0ZWRPYmplY3RzLmVuZCgpOwogICAgIGZvciAoU2VsZWN0aW9uTWFwOjppdGVyYXRvciBp
ID0gc2VsZWN0ZWRPYmplY3RzLmJlZ2luKCk7IGkgIT0gZW5kOyArK2kpIHsKLSAgICAgICAgUmVu
ZGVyU2VsZWN0aW9uSW5mbyogaW5mbyA9IGktPnNlY29uZDsKKyAgICAgICAgUmVuZGVyU2VsZWN0
aW9uSW5mbyogaW5mbyA9IGktPnZhbHVlOwogICAgICAgICAvLyBSZW5kZXJTZWxlY3Rpb25JbmZv
OjpyZWN0KCkgaXMgaW4gdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSByZXBhaW50Q29udGFpbmVyLCBz
byBtYXAgdG8gcGFnZSBjb29yZGluYXRlcy4KICAgICAgICAgSW50UmVjdCBjdXJyUmVjdCA9IGlu
Zm8tPnJlY3QoKTsKICAgICAgICAgaWYgKFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29u
dGFpbmVyID0gaW5mby0+cmVwYWludENvbnRhaW5lcigpKSB7CkBAIC01MDQsNyArNTA0LDcgQEAg
dm9pZCBSZW5kZXJWaWV3OjpzZXRTZWxlY3Rpb24oUmVuZGVyT2JqZWN0KiBzdGFydCwgaW50IHN0
YXJ0UG9zLCBSZW5kZXJPYmplY3QqIGUKICAgICAvLyBOb3cgY2xlYXIgdGhlIHNlbGVjdGlvbi4K
ICAgICBTZWxlY3RlZE9iamVjdE1hcDo6aXRlcmF0b3Igb2xkT2JqZWN0c0VuZCA9IG9sZFNlbGVj
dGVkT2JqZWN0cy5lbmQoKTsKICAgICBmb3IgKFNlbGVjdGVkT2JqZWN0TWFwOjppdGVyYXRvciBp
ID0gb2xkU2VsZWN0ZWRPYmplY3RzLmJlZ2luKCk7IGkgIT0gb2xkT2JqZWN0c0VuZDsgKytpKQot
ICAgICAgICBpLT5maXJzdC0+c2V0U2VsZWN0aW9uU3RhdGVJZk5lZWRlZChTZWxlY3Rpb25Ob25l
KTsKKyAgICAgICAgaS0+a2V5LT5zZXRTZWxlY3Rpb25TdGF0ZUlmTmVlZGVkKFNlbGVjdGlvbk5v
bmUpOwogCiAgICAgLy8gc2V0IHNlbGVjdGlvbiBzdGFydCBhbmQgZW5kCiAgICAgbV9zZWxlY3Rp
b25TdGFydCA9IHN0YXJ0OwpAQCAtNTY3LDkgKzU2Nyw5IEBAIHZvaWQgUmVuZGVyVmlldzo6c2V0
U2VsZWN0aW9uKFJlbmRlck9iamVjdCogc3RhcnQsIGludCBzdGFydFBvcywgUmVuZGVyT2JqZWN0
KiBlCiAKICAgICAvLyBIYXZlIGFueSBvZiB0aGUgb2xkIHNlbGVjdGVkIG9iamVjdHMgY2hhbmdl
ZCBjb21wYXJlZCB0byB0aGUgbmV3IHNlbGVjdGlvbj8KICAgICBmb3IgKFNlbGVjdGVkT2JqZWN0
TWFwOjppdGVyYXRvciBpID0gb2xkU2VsZWN0ZWRPYmplY3RzLmJlZ2luKCk7IGkgIT0gb2xkT2Jq
ZWN0c0VuZDsgKytpKSB7Ci0gICAgICAgIFJlbmRlck9iamVjdCogb2JqID0gaS0+Zmlyc3Q7Cisg
ICAgICAgIFJlbmRlck9iamVjdCogb2JqID0gaS0+a2V5OwogICAgICAgICBSZW5kZXJTZWxlY3Rp
b25JbmZvKiBuZXdJbmZvID0gbmV3U2VsZWN0ZWRPYmplY3RzLmdldChvYmopOwotICAgICAgICBS
ZW5kZXJTZWxlY3Rpb25JbmZvKiBvbGRJbmZvID0gaS0+c2Vjb25kOworICAgICAgICBSZW5kZXJT
ZWxlY3Rpb25JbmZvKiBvbGRJbmZvID0gaS0+dmFsdWU7CiAgICAgICAgIGlmICghbmV3SW5mbyB8
fCBvbGRJbmZvLT5yZWN0KCkgIT0gbmV3SW5mby0+cmVjdCgpIHx8IG9sZEluZm8tPnN0YXRlKCkg
IT0gbmV3SW5mby0+c3RhdGUoKSB8fAogICAgICAgICAgICAgKG1fc2VsZWN0aW9uU3RhcnQgPT0g
b2JqICYmIG9sZFN0YXJ0UG9zICE9IG1fc2VsZWN0aW9uU3RhcnRQb3MpIHx8CiAgICAgICAgICAg
ICAobV9zZWxlY3Rpb25FbmQgPT0gb2JqICYmIG9sZEVuZFBvcyAhPSBtX3NlbGVjdGlvbkVuZFBv
cykpIHsKQEAgLTU4Niw3ICs1ODYsNyBAQCB2b2lkIFJlbmRlclZpZXc6OnNldFNlbGVjdGlvbihS
ZW5kZXJPYmplY3QqIHN0YXJ0LCBpbnQgc3RhcnRQb3MsIFJlbmRlck9iamVjdCogZQogICAgIC8v
IEFueSBuZXcgb2JqZWN0cyB0aGF0IHJlbWFpbiB3ZXJlIG5vdCBmb3VuZCBpbiB0aGUgb2xkIG9i
amVjdHMgZGljdCwgYW5kIHNvIHRoZXkgbmVlZCB0byBiZSB1cGRhdGVkLgogICAgIFNlbGVjdGVk
T2JqZWN0TWFwOjppdGVyYXRvciBuZXdPYmplY3RzRW5kID0gbmV3U2VsZWN0ZWRPYmplY3RzLmVu
ZCgpOwogICAgIGZvciAoU2VsZWN0ZWRPYmplY3RNYXA6Oml0ZXJhdG9yIGkgPSBuZXdTZWxlY3Rl
ZE9iamVjdHMuYmVnaW4oKTsgaSAhPSBuZXdPYmplY3RzRW5kOyArK2kpIHsKLSAgICAgICAgUmVu
ZGVyU2VsZWN0aW9uSW5mbyogbmV3SW5mbyA9IGktPnNlY29uZDsKKyAgICAgICAgUmVuZGVyU2Vs
ZWN0aW9uSW5mbyogbmV3SW5mbyA9IGktPnZhbHVlOwogICAgICAgICBuZXdJbmZvLT5yZXBhaW50
KCk7CiAgICAgICAgIGRlbGV0ZSBuZXdJbmZvOwogICAgIH0KQEAgLTU5NCw5ICs1OTQsOSBAQCB2
b2lkIFJlbmRlclZpZXc6OnNldFNlbGVjdGlvbihSZW5kZXJPYmplY3QqIHN0YXJ0LCBpbnQgc3Rh
cnRQb3MsIFJlbmRlck9iamVjdCogZQogICAgIC8vIEhhdmUgYW55IG9mIHRoZSBvbGQgYmxvY2tz
IGNoYW5nZWQ/CiAgICAgU2VsZWN0ZWRCbG9ja01hcDo6aXRlcmF0b3Igb2xkQmxvY2tzRW5kID0g
b2xkU2VsZWN0ZWRCbG9ja3MuZW5kKCk7CiAgICAgZm9yIChTZWxlY3RlZEJsb2NrTWFwOjppdGVy
YXRvciBpID0gb2xkU2VsZWN0ZWRCbG9ja3MuYmVnaW4oKTsgaSAhPSBvbGRCbG9ja3NFbmQ7ICsr
aSkgewotICAgICAgICBSZW5kZXJCbG9jayogYmxvY2sgPSBpLT5maXJzdDsKKyAgICAgICAgUmVu
ZGVyQmxvY2sqIGJsb2NrID0gaS0+a2V5OwogICAgICAgICBSZW5kZXJCbG9ja1NlbGVjdGlvbklu
Zm8qIG5ld0luZm8gPSBuZXdTZWxlY3RlZEJsb2Nrcy5nZXQoYmxvY2spOwotICAgICAgICBSZW5k
ZXJCbG9ja1NlbGVjdGlvbkluZm8qIG9sZEluZm8gPSBpLT5zZWNvbmQ7CisgICAgICAgIFJlbmRl
ckJsb2NrU2VsZWN0aW9uSW5mbyogb2xkSW5mbyA9IGktPnZhbHVlOwogICAgICAgICBpZiAoIW5l
d0luZm8gfHwgb2xkSW5mby0+cmVjdHMoKSAhPSBuZXdJbmZvLT5yZWN0cygpIHx8IG9sZEluZm8t
PnN0YXRlKCkgIT0gbmV3SW5mby0+c3RhdGUoKSkgewogICAgICAgICAgICAgb2xkSW5mby0+cmVw
YWludCgpOwogICAgICAgICAgICAgaWYgKG5ld0luZm8pIHsKQEAgLTYxMSw3ICs2MTEsNyBAQCB2
b2lkIFJlbmRlclZpZXc6OnNldFNlbGVjdGlvbihSZW5kZXJPYmplY3QqIHN0YXJ0LCBpbnQgc3Rh
cnRQb3MsIFJlbmRlck9iamVjdCogZQogICAgIC8vIEFueSBuZXcgYmxvY2tzIHRoYXQgcmVtYWlu
IHdlcmUgbm90IGZvdW5kIGluIHRoZSBvbGQgYmxvY2tzIGRpY3QsIGFuZCBzbyB0aGV5IG5lZWQg
dG8gYmUgdXBkYXRlZC4KICAgICBTZWxlY3RlZEJsb2NrTWFwOjppdGVyYXRvciBuZXdCbG9ja3NF
bmQgPSBuZXdTZWxlY3RlZEJsb2Nrcy5lbmQoKTsKICAgICBmb3IgKFNlbGVjdGVkQmxvY2tNYXA6
Oml0ZXJhdG9yIGkgPSBuZXdTZWxlY3RlZEJsb2Nrcy5iZWdpbigpOyBpICE9IG5ld0Jsb2Nrc0Vu
ZDsgKytpKSB7Ci0gICAgICAgIFJlbmRlckJsb2NrU2VsZWN0aW9uSW5mbyogbmV3SW5mbyA9IGkt
PnNlY29uZDsKKyAgICAgICAgUmVuZGVyQmxvY2tTZWxlY3Rpb25JbmZvKiBuZXdJbmZvID0gaS0+
dmFsdWU7CiAgICAgICAgIG5ld0luZm8tPnJlcGFpbnQoKTsKICAgICAgICAgZGVsZXRlIG5ld0lu
Zm87CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldp
ZGdldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcAppbmRl
eCBkYTg3YTk3YmU1N2E5ZDdlMWZhODZmMGY5ZTQ0ZWU4YjQ4MWE0ZjY1Li4xYTMxNzIzZjFhYjE4
MmJkNDc5MGQ3NmI3OTE1NjdkOWQ4ZTk3MDI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyV2lkZ2V0LmNwcApAQCAtNzAsOSArNzAsOSBAQCB2b2lkIFJlbmRlcldpZGdldDo6cmVz
dW1lV2lkZ2V0SGllcmFyY2h5VXBkYXRlcygpCiAgICAgICAgIHdpZGdldE5ld1BhcmVudE1hcCgp
LmNsZWFyKCk7CiAgICAgICAgIFdpZGdldFRvUGFyZW50TWFwOjppdGVyYXRvciBlbmQgPSBtYXAu
ZW5kKCk7CiAgICAgICAgIGZvciAoV2lkZ2V0VG9QYXJlbnRNYXA6Oml0ZXJhdG9yIGl0ID0gbWFw
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgV2lkZ2V0KiBjaGlsZCA9
IGl0LT5maXJzdC5nZXQoKTsKKyAgICAgICAgICAgIFdpZGdldCogY2hpbGQgPSBpdC0+a2V5Lmdl
dCgpOwogICAgICAgICAgICAgU2Nyb2xsVmlldyogY3VycmVudFBhcmVudCA9IGNoaWxkLT5wYXJl
bnQoKTsKLSAgICAgICAgICAgIEZyYW1lVmlldyogbmV3UGFyZW50ID0gaXQtPnNlY29uZDsKKyAg
ICAgICAgICAgIEZyYW1lVmlldyogbmV3UGFyZW50ID0gaXQtPnZhbHVlOwogICAgICAgICAgICAg
aWYgKG5ld1BhcmVudCAhPSBjdXJyZW50UGFyZW50KSB7CiAgICAgICAgICAgICAgICAgaWYgKGN1
cnJlbnRQYXJlbnQpCiAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYXJlbnQtPnJlbW92ZUNo
aWxkKGNoaWxkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5s
aW5lQm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcApp
bmRleCBlNDBmZmJmY2M2NzQ4ODljYTMwOTIwNTgwOTQzMzNmNDVjY2NjYzczLi5hZWQwN2Q1YWYy
ZTdlNzYwODg2YWM5MmE2ZjhiM2MzMTk2MGNlYzgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1Jvb3RJbmxpbmVCb3guY3BwCkBAIC03MjAsOCArNzIwLDggQEAgdm9pZCBSb290SW5saW5l
Qm94Ojphc2NlbnRBbmREZXNjZW50Rm9yQm94KElubGluZUJveCogYm94LCBHbHlwaE92ZXJmbG93
QW5kRmFsbGIKICAgICBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93ID0gMDsKICAgICBpZiAo
Ym94LT5pc1RleHQoKSkgewogICAgICAgICBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01h
cDo6aXRlcmF0b3IgaXQgPSB0ZXh0Qm94RGF0YU1hcC5maW5kKHRvSW5saW5lVGV4dEJveChib3gp
KTsKLSAgICAgICAgdXNlZEZvbnRzID0gaXQgPT0gdGV4dEJveERhdGFNYXAuZW5kKCkgPyAwIDog
Jml0LT5zZWNvbmQuZmlyc3Q7Ci0gICAgICAgIGdseXBoT3ZlcmZsb3cgPSBpdCA9PSB0ZXh0Qm94
RGF0YU1hcC5lbmQoKSA/IDAgOiAmaXQtPnNlY29uZC5zZWNvbmQ7CisgICAgICAgIHVzZWRGb250
cyA9IGl0ID09IHRleHRCb3hEYXRhTWFwLmVuZCgpID8gMCA6ICZpdC0+dmFsdWUuZmlyc3Q7Cisg
ICAgICAgIGdseXBoT3ZlcmZsb3cgPSBpdCA9PSB0ZXh0Qm94RGF0YU1hcC5lbmQoKSA/IDAgOiAm
aXQtPnZhbHVlLnNlY29uZDsKICAgICB9CiAgICAgICAgIAogICAgIGJvb2wgaW5jbHVkZUxlYWRp
bmcgPSBpbmNsdWRlTGVhZGluZ0ZvckJveChib3gpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1ZlcnRpY2FsUG9zaXRpb25DYWNoZS5oIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1ZlcnRpY2FsUG9zaXRpb25DYWNoZS5oCmluZGV4IGJiMzk4Nzc3MjFkYTcwNWMzN2Jk
M2I4ODE5MDI0Y2QyN2UzNmU1Y2UuLmI3Y2Q3ZTA4NWU3ZjliZWRiNTI4ZjYyZGVlZjU3YTdiYjhh
YTViZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9WZXJ0aWNhbFBvc2l0
aW9uQ2FjaGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVmVydGljYWxQb3NpdGlv
bkNhY2hlLmgKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgogICAgICAgICBjb25zdCBIYXNoTWFw
PFJlbmRlck9iamVjdCosIGludD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwVG9DaGVjay5maW5k
KHJlbmRlcmVyKTsKICAgICAgICAgaWYgKGl0ID09IG1hcFRvQ2hlY2suZW5kKCkpCiAgICAgICAg
ICAgICByZXR1cm4gUG9zaXRpb25VbmRlZmluZWQ7Ci0gICAgICAgIHJldHVybiBpdC0+c2Vjb25k
OworICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwogICAgIH0KICAgICAKICAgICB2b2lkIHNldChS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBGb250QmFzZWxpbmUgYmFzZWxpbmVUeXBlLCBpbnQgcG9z
aXRpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R0lubGluZVRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJ
bmxpbmVUZXh0LmNwcAppbmRleCBhNTViMGYwYjVkZjRhYTU0NWU1YWIzODI1NmM5ZmU0OTAyMTMx
ZGNhLi43MTg1NDk3ZmQ0NjNmNGRmYjc0OTM2YTk5MDQ3ZDM2NmVlNmEzMWY1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAK
QEAgLTE4Myw3ICsxODMsNyBAQCBib29sIFJlbmRlclNWR0lubGluZVRleHQ6OmNoYXJhY3RlclN0
YXJ0c05ld1RleHRDaHVuayhpbnQgcG9zaXRpb24pIGNvbnN0CiAgICAgaWYgKGl0ID09IG1fbGF5
b3V0QXR0cmlidXRlcy5jaGFyYWN0ZXJEYXRhTWFwKCkuZW5kKCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIHJldHVybiBpdC0+c2Vjb25kLnggIT0gU1ZHVGV4dExheW91dEF0dHJpYnV0
ZXM6OmVtcHR5VmFsdWUoKSB8fCBpdC0+c2Vjb25kLnkgIT0gU1ZHVGV4dExheW91dEF0dHJpYnV0
ZXM6OmVtcHR5VmFsdWUoKTsKKyAgICByZXR1cm4gaXQtPnZhbHVlLnggIT0gU1ZHVGV4dExheW91
dEF0dHJpYnV0ZXM6OmVtcHR5VmFsdWUoKSB8fCBpdC0+dmFsdWUueSAhPSBTVkdUZXh0TGF5b3V0
QXR0cmlidXRlczo6ZW1wdHlWYWx1ZSgpOwogfQogCiBWaXNpYmxlUG9zaXRpb24gUmVuZGVyU1ZH
SW5saW5lVGV4dDo6cG9zaXRpb25Gb3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
RmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXIuY3BwCmluZGV4IGQ1ZDc5MmRlZDYwZGRmODc1MGJhM2Q4NGE1NGRmNDk1Yjk2YTY3
M2MuLmExZThiOGMxZjk3YTU4MzIzZTcyMjFjY2EzNTMzOTUyNWI2N2Q5MzUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0
ZXIuY3BwCkBAIC0zMzksNyArMzM5LDcgQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6
cHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZChSZW5kZXJPYmplY3QqIG9iamVjdCwgY28KICAgICBT
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMqIHByaW1pdHZlID0gc3RhdGljX2Nh
c3Q8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKj4ob2JqZWN0LT5ub2RlKCkp
OwogCiAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBGaWx0ZXJEYXRhKiBm
aWx0ZXJEYXRhID0gaXQtPnNlY29uZDsKKyAgICAgICAgRmlsdGVyRGF0YSogZmlsdGVyRGF0YSA9
IGl0LT52YWx1ZTsKICAgICAgICAgaWYgKCFmaWx0ZXJEYXRhLT5idWlsZGVkKQogICAgICAgICAg
ICAgY29udGludWU7CiAKQEAgLTM1NCw3ICszNTQsNyBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNl
RmlsdGVyOjpwcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKFJlbmRlck9iamVjdCogb2JqZWN0LCBj
bwogICAgICAgICBidWlsZGVyLT5jbGVhclJlc3VsdHNSZWN1cnNpdmUoZWZmZWN0KTsKIAogICAg
ICAgICAvLyBSZXBhaW50IHRoZSBpbWFnZSBvbiB0aGUgc2NyZWVuLgotICAgICAgICBtYXJrQ2xp
ZW50Rm9ySW52YWxpZGF0aW9uKGl0LT5maXJzdCwgUmVwYWludEludmFsaWRhdGlvbik7CisgICAg
ICAgIG1hcmtDbGllbnRGb3JJbnZhbGlkYXRpb24oaXQtPmtleSwgUmVwYWludEludmFsaWRhdGlv
bik7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcAppbmRleCBmOGY0OTNkYjg1YTBkZGI3
YTY5YzFmMTZjYjE3NWY3MGFkOWRjYjgzLi4zNTMzYjM1YzE4NjllZmU5ZTQ1ZTVkMDc4NTM2NTMx
MjA0NWJkOGY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlR3JhZGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAKQEAgLTE0MCw3ICsxNDAsNyBAQCBib29s
IFJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQ6OmFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiBv
YmplY3QsIFJlbmRlclN0eWxlKgogICAgIGlmIChncmFkaWVudFVuaXRzKCkgPT0gU1ZHVW5pdFR5
cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YICYmIG9iamVjdEJvdW5kaW5nQm94
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgT3duUHRyPEdyYWRpZW50
RGF0YT4mIGdyYWRpZW50RGF0YSA9IG1fZ3JhZGllbnRNYXAuYWRkKG9iamVjdCwgbnVsbHB0ciku
aXRlcmF0b3ItPnNlY29uZDsKKyAgICBPd25QdHI8R3JhZGllbnREYXRhPiYgZ3JhZGllbnREYXRh
ID0gbV9ncmFkaWVudE1hcC5hZGQob2JqZWN0LCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CiAg
ICAgaWYgKCFncmFkaWVudERhdGEpCiAgICAgICAgIGdyYWRpZW50RGF0YSA9IGFkb3B0UHRyKG5l
dyBHcmFkaWVudERhdGEpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAKaW5kZXggNGRjNTAxYjgwNmIzZDhk
ZjI1NDc0NTQzYmNmY2ZmMzg3NjBkNjI2OS4uNWIzODNlMjNhNDI0NTk0NzMwY2Y5NzcwYjEyMTNh
YTI3NWJkY2E4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcApAQCAtODMsNyArODMsNyBAQCBib29sIFJl
bmRlclNWR1Jlc291cmNlUGF0dGVybjo6YXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqIG9iamVj
dCwgUmVuZGVyU3R5bGUqCiAgICAgaWYgKG1fYXR0cmlidXRlcy5wYXR0ZXJuVW5pdHMoKSA9PSBT
VkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1ggJiYgb2JqZWN0Qm91
bmRpbmdCb3guaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBPd25QdHI8
UGF0dGVybkRhdGE+JiBwYXR0ZXJuRGF0YSA9IG1fcGF0dGVybk1hcC5hZGQob2JqZWN0LCBudWxs
cHRyKS5pdGVyYXRvci0+c2Vjb25kOworICAgIE93blB0cjxQYXR0ZXJuRGF0YT4mIHBhdHRlcm5E
YXRhID0gbV9wYXR0ZXJuTWFwLmFkZChvYmplY3QsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsK
ICAgICBpZiAoIXBhdHRlcm5EYXRhKQogICAgICAgICBwYXR0ZXJuRGF0YSA9IGFkb3B0UHRyKG5l
dyBQYXR0ZXJuRGF0YSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHUmVzb3VyY2VzQ2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdSZXNvdXJjZXNDYWNoZS5jcHAKaW5kZXggMDNlNmM3YjRiZTU2ZjUwOWMxMjFiYmE1NWVkMjJk
NjUzOTBjODlmOC4uMDA3M2I3MzU0ZDExOWU3NDAyNjdjMDcxM2RjZDE2OTU0MzEzYTllYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXNDYWNoZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXNDYWNoZS5j
cHAKQEAgLTE3MiwxMSArMTcyLDExIEBAIHZvaWQgU1ZHUmVzb3VyY2VzQ2FjaGU6OnJlc291cmNl
RGVzdHJveWVkKFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKiByZXNvdXJjZSkKIAogICAgIEhh
c2hNYXA8UmVuZGVyT2JqZWN0KiwgU1ZHUmVzb3VyY2VzKj46Oml0ZXJhdG9yIGVuZCA9IGNhY2hl
LT5tX2NhY2hlLmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDxSZW5kZXJPYmplY3QqLCBTVkdSZXNv
dXJjZXMqPjo6aXRlcmF0b3IgaXQgPSBjYWNoZS0+bV9jYWNoZS5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKLSAgICAgICAgaXQtPnNlY29uZC0+cmVzb3VyY2VEZXN0cm95ZWQocmVzb3VyY2Up
OworICAgICAgICBpdC0+dmFsdWUtPnJlc291cmNlRGVzdHJveWVkKHJlc291cmNlKTsKIAogICAg
ICAgICAvLyBNYXJrIHVzZXJzIG9mIGRlc3Ryb3llZCByZXNvdXJjZXMgYXMgcGVuZGluZyByZXNv
bHV0aW9uIGJhc2VkIG9uIHRoZSBpZCBvZiB0aGUgb2xkIHJlc291cmNlLgogICAgICAgICBFbGVt
ZW50KiByZXNvdXJjZUVsZW1lbnQgPSB0b0VsZW1lbnQocmVzb3VyY2UtPm5vZGUoKSk7Ci0gICAg
ICAgIFNWR1N0eWxlZEVsZW1lbnQqIGNsaWVudEVsZW1lbnQgPSB0b1NWR1N0eWxlZEVsZW1lbnQo
aXQtPmZpcnN0LT5ub2RlKCkpOworICAgICAgICBTVkdTdHlsZWRFbGVtZW50KiBjbGllbnRFbGVt
ZW50ID0gdG9TVkdTdHlsZWRFbGVtZW50KGl0LT5rZXktPm5vZGUoKSk7CiAgICAgICAgIFNWR0Rv
Y3VtZW50RXh0ZW5zaW9ucyogZXh0ZW5zaW9ucyA9IGNsaWVudEVsZW1lbnQtPmRvY3VtZW50KCkt
PmFjY2Vzc1NWR0V4dGVuc2lvbnMoKTsKIAogICAgICAgICBleHRlbnNpb25zLT5hZGRQZW5kaW5n
UmVzb3VyY2UocmVzb3VyY2VFbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKEhUTUxOYW1lczo6aWRB
dHRyKSwgY2xpZW50RWxlbWVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1Jvb3RJbmxpbmVCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdSb290SW5saW5lQm94LmNwcAppbmRleCA1NzE0NmM5MGM4MzhhYjY1MzNhNDNlNzM4MDU2
ZTM4MmU1ZTg1YzlmLi5hNDI4YzYxNGRkZjEyNDVhMDM4NThlNTM1YzEyMDAwZGM2NzhjNzMwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jvb3RJbmxpbmVCb3gu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUm9vdElubGluZUJveC5j
cHAKQEAgLTIyNywxNyArMjI3LDE3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzd2FwSXRlbXNJbkxh
eW91dEF0dHJpYnV0ZXMoU1ZHVGV4dExheW91dEF0dHJpYnV0ZXMqIGZpcnN0QXR0CiAgICAgICAg
IHJldHVybjsKIAogICAgIGlmIChmaXJzdFByZXNlbnQgJiYgbGFzdFByZXNlbnQpIHsKLSAgICAg
ICAgc3RkOjpzd2FwKGl0Rmlyc3QtPnNlY29uZCwgaXRMYXN0LT5zZWNvbmQpOworICAgICAgICBz
dGQ6OnN3YXAoaXRGaXJzdC0+dmFsdWUsIGl0TGFzdC0+dmFsdWUpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCiAgICAgaWYgKGZpcnN0UHJlc2VudCAmJiAhbGFzdFByZXNlbnQpIHsKLSAgICAg
ICAgbGFzdEF0dHJpYnV0ZXMtPmNoYXJhY3RlckRhdGFNYXAoKS5zZXQobGFzdFBvc2l0aW9uICsg
MSwgaXRGaXJzdC0+c2Vjb25kKTsKKyAgICAgICAgbGFzdEF0dHJpYnV0ZXMtPmNoYXJhY3RlckRh
dGFNYXAoKS5zZXQobGFzdFBvc2l0aW9uICsgMSwgaXRGaXJzdC0+dmFsdWUpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCiAgICAgLy8gIWZpcnN0UHJlc2VudCAmJiBsYXN0UHJlc2VudAotICAg
IGZpcnN0QXR0cmlidXRlcy0+Y2hhcmFjdGVyRGF0YU1hcCgpLnNldChmaXJzdFBvc2l0aW9uICsg
MSwgaXRMYXN0LT5zZWNvbmQpOworICAgIGZpcnN0QXR0cmlidXRlcy0+Y2hhcmFjdGVyRGF0YU1h
cCgpLnNldChmaXJzdFBvc2l0aW9uICsgMSwgaXRMYXN0LT52YWx1ZSk7CiB9CiAKIHN0YXRpYyBp
bmxpbmUgdm9pZCBmaW5kRmlyc3RBbmRMYXN0QXR0cmlidXRlc0luVmVjdG9yKFZlY3RvcjxTVkdU
ZXh0TGF5b3V0QXR0cmlidXRlcyo+JiBhdHRyaWJ1dGVzLCBSZW5kZXJTVkdJbmxpbmVUZXh0KiBm
aXJzdENvbnRleHQsIFJlbmRlclNWR0lubGluZVRleHQqIGxhc3RDb250ZXh0LApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRlcy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1dGVz
LmNwcAppbmRleCBhOTI1OTZjZWVlZGJlMjVhZjc3N2RmNGE0YzgzY2QzZWY5N2I5Y2U4Li42N2Zh
MGZhOTgyYWQ2MGJhNzI2NTFhODQ1NDk1ODFmN2ViNTBjZDBhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1dGVzLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1dGVzLmNwcApA
QCAtNjIsOCArNjIsOCBAQCB2b2lkIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzOjpkdW1wKCkgY29u
c3QKICAgICBmcHJpbnRmKHN0ZGVyciwgImNvbnRleHQ6ICVwXG4iLCBtX2NvbnRleHQpOwogICAg
IGNvbnN0IFNWR0NoYXJhY3RlckRhdGFNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fY2hhcmFj
dGVyRGF0YU1hcC5lbmQoKTsKICAgICBmb3IgKFNWR0NoYXJhY3RlckRhdGFNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbV9jaGFyYWN0ZXJEYXRhTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewotICAgICAgICBjb25zdCBTVkdDaGFyYWN0ZXJEYXRhJiBkYXRhID0gaXQtPnNlY29uZDsKLSAg
ICAgICAgZnByaW50ZihzdGRlcnIsICIgLS0tPiBwb3M9JWksIGRhdGE9eyIsIGl0LT5maXJzdCk7
CisgICAgICAgIGNvbnN0IFNWR0NoYXJhY3RlckRhdGEmIGRhdGEgPSBpdC0+dmFsdWU7CisgICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiIC0tLT4gcG9zPSVpLCBkYXRhPXsiLCBpdC0+a2V5KTsKICAg
ICAgICAgZHVtcFNWR0NoYXJhY3RlckRhdGFNYXBWYWx1ZSgieCIsIGRhdGEueCk7CiAgICAgICAg
IGR1bXBTVkdDaGFyYWN0ZXJEYXRhTWFwVmFsdWUoInkiLCBkYXRhLnkpOwogICAgICAgICBkdW1w
U1ZHQ2hhcmFjdGVyRGF0YU1hcFZhbHVlKCJkeCIsIGRhdGEuZHgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRl
c0J1aWxkZXIuY3BwCmluZGV4IDAyYTIxMjNlYjY2N2VjY2Y3M2YwODBmNmJiNGU2ZmVjYTVkMmYz
ZTYuLmYyMDllZTQ4YjE1ZTVlOTkyNWFkNjc1NWJjYzQ0NzY1ZTRkYjVmYmUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWls
ZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRB
dHRyaWJ1dGVzQnVpbGRlci5jcHAKQEAgLTE2Miw3ICsxNjIsNyBAQCB2b2lkIFNWR1RleHRMYXlv
dXRBdHRyaWJ1dGVzQnVpbGRlcjo6YnVpbGRMYXlvdXRBdHRyaWJ1dGVzKFJlbmRlclNWR1RleHQq
IHRleHRSbwogICAgICAgICBkYXRhLnkgPSAwOwogICAgICAgICBtX2NoYXJhY3RlckRhdGFNYXAu
c2V0KDEsIGRhdGEpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIFNWR0NoYXJhY3RlckRhdGEmIGRh
dGEgPSBpdC0+c2Vjb25kOworICAgICAgICBTVkdDaGFyYWN0ZXJEYXRhJiBkYXRhID0gaXQtPnZh
bHVlOwogICAgICAgICBpZiAoZGF0YS54ID09IFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzOjplbXB0
eVZhbHVlKCkpCiAgICAgICAgICAgICBkYXRhLnggPSAwOwogICAgICAgICBpZiAoZGF0YS55ID09
IFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzOjplbXB0eVZhbHVlKCkpCkBAIC0yMzEsNyArMjMxLDcg
QEAgdm9pZCBTVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXI6OmZpbGxDaGFyYWN0ZXJEYXRh
TWFwKGNvbnN0IFRleHRQb3NpdGlvbiYgcG8KICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICB9CiAKLSAgICAgICAgdXBkYXRlQ2hhcmFjdGVyRGF0YShpLCBsYXN0Um90YXRpb24sIGl0LT5z
ZWNvbmQsIGxlbmd0aENvbnRleHQsIHhMaXN0UHRyLCB5TGlzdFB0ciwgZHhMaXN0UHRyLCBkeUxp
c3RQdHIsIHJvdGF0ZUxpc3RQdHIpOworICAgICAgICB1cGRhdGVDaGFyYWN0ZXJEYXRhKGksIGxh
c3RSb3RhdGlvbiwgaXQtPnZhbHVlLCBsZW5ndGhDb250ZXh0LCB4TGlzdFB0ciwgeUxpc3RQdHIs
IGR4TGlzdFB0ciwgZHlMaXN0UHRyLCByb3RhdGVMaXN0UHRyKTsKICAgICB9CiAKICAgICAvLyBU
aGUgbGFzdCByb3RhdGlvbiB2YWx1ZSBhbHdheXMgc3BhbnMgdGhlIHdob2xlIHNjb3BlLgpAQCAt
MjQ3LDcgKzI0Nyw3IEBAIHZvaWQgU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyOjpmaWxs
Q2hhcmFjdGVyRGF0YU1hcChjb25zdCBUZXh0UG9zaXRpb24mIHBvCiAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIGl0LT5zZWNvbmQucm90YXRlID0gbGFzdFJvdGF0
aW9uOworICAgICAgICBpdC0+dmFsdWUucm90YXRlID0gbGFzdFJvdGF0aW9uOwogICAgIH0KIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0
RW5naW5lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVu
Z2luZS5jcHAKaW5kZXggNWM1NDliMjFjODc1MjA4NDcyNDZhZjI1NGZkMDU5ZjJlM2I5YjVlOC4u
YmEyYjc2MzlkM2Y5NWI3Mzg5NDc1ZmEyZGMwMGM5YTZhYTg1YjMxNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmUuY3BwCkBAIC00
NzUsNyArNDc1LDcgQEAgdm9pZCBTVkdUZXh0TGF5b3V0RW5naW5lOjpsYXlvdXRUZXh0T25MaW5l
T3JQYXRoKFNWR0lubGluZVRleHRCb3gqIHRleHRCb3gsIFJlbmQKICAgICAgICAgU1ZHQ2hhcmFj
dGVyRGF0YSBkYXRhOwogICAgICAgICBTVkdDaGFyYWN0ZXJEYXRhTWFwOjppdGVyYXRvciBpdCA9
IGNoYXJhY3RlckRhdGFNYXAuZmluZChtX2xvZ2ljYWxDaGFyYWN0ZXJPZmZzZXQgKyAxKTsKICAg
ICAgICAgaWYgKGl0ICE9IGNoYXJhY3RlckRhdGFNYXAuZW5kKCkpCi0gICAgICAgICAgICBkYXRh
ID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIGRhdGEgPSBpdC0+dmFsdWU7CiAKICAgICAgICAg
ZmxvYXQgeCA9IGRhdGEueDsKICAgICAgICAgZmxvYXQgeSA9IGRhdGEueTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3NCdWlsZGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3NCdWlsZGVyLmNwcApp
bmRleCBjOTRmMGM3NGE0YjY5YjhlZWM2NjA1NmFkYzBiYmYxMTZiNmU0NjlmLi5kMDk3OWIxZDk3
YzkzZmUzNjk5OGM3Y2ExZDVmZDgxOGNmOWJjYWQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNzQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljc0J1aWxkZXIuY3BwCkBAIC0xNzAsNyAr
MTcwLDcgQEAgdm9pZCBTVkdUZXh0TWV0cmljc0J1aWxkZXI6Om1lYXN1cmVUZXh0UmVuZGVyZXIo
UmVuZGVyU1ZHSW5saW5lVGV4dCogdGV4dCwgTWVhc3UKICAgICAgICAgICAgIGlmIChkYXRhLT5h
bGxDaGFyYWN0ZXJzTWFwKSB7CiAgICAgICAgICAgICAgICAgY29uc3QgU1ZHQ2hhcmFjdGVyRGF0
YU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBkYXRhLT5hbGxDaGFyYWN0ZXJzTWFwLT5maW5kKGRh
dGEtPnZhbHVlTGlzdFBvc2l0aW9uICsgbV90ZXh0UG9zaXRpb24gLSBkYXRhLT5za2lwcGVkQ2hh
cmFjdGVycyArIDEpOwogICAgICAgICAgICAgICAgIGlmIChpdCAhPSBkYXRhLT5hbGxDaGFyYWN0
ZXJzTWFwLT5lbmQoKSkKLSAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcy0+Y2hhcmFjdGVy
RGF0YU1hcCgpLnNldChtX3RleHRQb3NpdGlvbiArIDEsIGl0LT5zZWNvbmQpOworICAgICAgICAg
ICAgICAgICAgICBhdHRyaWJ1dGVzLT5jaGFyYWN0ZXJEYXRhTWFwKCkuc2V0KG1fdGV4dFBvc2l0
aW9uICsgMSwgaXQtPnZhbHVlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHRleHRNZXRy
aWNzVmFsdWVzLT5hcHBlbmQobV9jdXJyZW50TWV0cmljcyk7CiAgICAgICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmNwcAppbmRleCAzMDQ5MDU4NjMxNjVlODYz
MjQzNDBjZThkYmVmYmIwYTc2YjM3NGY5Li4yZjk4MWNlYjk1ZjUwNjg4ZmE1MjUxYmMwNTg5NTI3
NWU1YTY1MThjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVh
U3luYy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3Bw
CkBAIC0xODgsNyArMTg4LDcgQEAgdm9pZCBTdG9yYWdlQXJlYVN5bmM6OnN5bmNUaW1lckZpcmVk
KFRpbWVyPFN0b3JhZ2VBcmVhU3luYz4qKQogICAgICAgICAgICAgICAgIHBhcnRpYWxTeW5jID0g
dHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IG1faXRlbXNQZW5kaW5nU3luYy5zZXQoY2hhbmdlZF9pdC0+Zmlyc3QuaXNvbGF0ZWRDb3B5KCks
IGNoYW5nZWRfaXQtPnNlY29uZC5pc29sYXRlZENvcHkoKSk7CisgICAgICAgICAgICBtX2l0ZW1z
UGVuZGluZ1N5bmMuc2V0KGNoYW5nZWRfaXQtPmtleS5pc29sYXRlZENvcHkoKSwgY2hhbmdlZF9p
dC0+dmFsdWUuaXNvbGF0ZWRDb3B5KCkpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKHBhcnRp
YWxTeW5jKSB7CkBAIC0xOTgsNyArMTk4LDcgQEAgdm9pZCBTdG9yYWdlQXJlYVN5bmM6OnN5bmNU
aW1lckZpcmVkKFRpbWVyPFN0b3JhZ2VBcmVhU3luYz4qKQogICAgICAgICAgICAgSGFzaE1hcDxT
dHJpbmcsIFN0cmluZz46Oml0ZXJhdG9yIHBlbmRpbmdfaXQgPSBtX2l0ZW1zUGVuZGluZ1N5bmMu
YmVnaW4oKTsKICAgICAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+OjppdGVyYXRvciBw
ZW5kaW5nX2VuZCA9IG1faXRlbXNQZW5kaW5nU3luYy5lbmQoKTsKICAgICAgICAgICAgIGZvciAo
OyBwZW5kaW5nX2l0ICE9IHBlbmRpbmdfZW5kOyArK3BlbmRpbmdfaXQpCi0gICAgICAgICAgICAg
ICAgbV9jaGFuZ2VkSXRlbXMucmVtb3ZlKHBlbmRpbmdfaXQtPmZpcnN0KTsKKyAgICAgICAgICAg
ICAgICBtX2NoYW5nZWRJdGVtcy5yZW1vdmUocGVuZGluZ19pdC0+a2V5KTsKICAgICAgICAgfQog
CiAgICAgICAgIGlmICghbV9zeW5jU2NoZWR1bGVkKSB7CkBAIC0zNDUsNyArMzQ1LDcgQEAgdm9p
ZCBTdG9yYWdlQXJlYVN5bmM6OnBlcmZvcm1JbXBvcnQoKQogICAgIEhhc2hNYXA8U3RyaW5nLCBT
dHJpbmc+OjppdGVyYXRvciBlbmQgPSBpdGVtTWFwLmVuZCgpOwogCiAgICAgZm9yICg7IGl0ICE9
IGVuZDsgKytpdCkKLSAgICAgICAgbV9zdG9yYWdlQXJlYS0+aW1wb3J0SXRlbShpdC0+Zmlyc3Qs
IGl0LT5zZWNvbmQpOworICAgICAgICBtX3N0b3JhZ2VBcmVhLT5pbXBvcnRJdGVtKGl0LT5rZXks
IGl0LT52YWx1ZSk7CiAKICAgICBtYXJrSW1wb3J0ZWQoKTsKIH0KQEAgLTQzMywxMyArNDMzLDEz
IEBAIHZvaWQgU3RvcmFnZUFyZWFTeW5jOjpzeW5jKGJvb2wgY2xlYXJJdGVtcywgY29uc3QgSGFz
aE1hcDxTdHJpbmcsIFN0cmluZz4mIGl0ZW1zCiAgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKICAg
ICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGl0ZW1z
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAvLyBCYXNlZCBvbiB0aGUgbnVs
bC1uZXNzIG9mIHRoZSBzZWNvbmQgYXJndW1lbnQsIGRlY2lkZSB3aGV0aGVyIHRoaXMgaXMgYW4g
aW5zZXJ0IG9yIGEgZGVsZXRlLgotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQmIHF1ZXJ5ID0gaXQt
PnNlY29uZC5pc051bGwoKSA/IHJlbW92ZSA6IGluc2VydDsKKyAgICAgICAgU1FMaXRlU3RhdGVt
ZW50JiBxdWVyeSA9IGl0LT52YWx1ZS5pc051bGwoKSA/IHJlbW92ZSA6IGluc2VydDsKIAotICAg
ICAgICBxdWVyeS5iaW5kVGV4dCgxLCBpdC0+Zmlyc3QpOworICAgICAgICBxdWVyeS5iaW5kVGV4
dCgxLCBpdC0+a2V5KTsKIAogICAgICAgICAvLyBJZiB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIG5v
bi1udWxsLCB3ZSdyZSBkb2luZyBhbiBpbnNlcnQsIHNvIGJpbmQgaXQgYXMgdGhlIHZhbHVlLgot
ICAgICAgICBpZiAoIWl0LT5zZWNvbmQuaXNOdWxsKCkpCi0gICAgICAgICAgICBxdWVyeS5iaW5k
QmxvYigyLCBpdC0+c2Vjb25kKTsKKyAgICAgICAgaWYgKCFpdC0+dmFsdWUuaXNOdWxsKCkpCisg
ICAgICAgICAgICBxdWVyeS5iaW5kQmxvYigyLCBpdC0+dmFsdWUpOwogCiAgICAgICAgIGludCBy
ZXN1bHQgPSBxdWVyeS5zdGVwKCk7CiAgICAgICAgIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0RG9u
ZSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTWFwLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU1hcC5jcHAKaW5kZXggOGU0MmQyZjE3NmRk
M2IxMTEyYTAxYTUxZDhkYjYyZjRiMzhiYmEzNS4uNDBlMWEzOGYxY2E0YTc5ZjBjZTI0NzAxMTUz
NDdhZGI5MjlmNDk4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdl
TWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VNYXAuY3BwCkBAIC04
OSw3ICs4OSw3IEBAIFN0cmluZyBTdG9yYWdlTWFwOjprZXkodW5zaWduZWQgaW5kZXgpCiAgICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKIAogICAgIHNldEl0ZXJhdG9yVG9JbmRleChpbmRleCk7Ci0g
ICAgcmV0dXJuIG1faXRlcmF0b3ItPmZpcnN0OworICAgIHJldHVybiBtX2l0ZXJhdG9yLT5rZXk7
CiB9CiAKIFN0cmluZyBTdG9yYWdlTWFwOjpnZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5KSBjb25z
dApAQCAtMTMzLDcgKzEzMyw3IEBAIFBhc3NSZWZQdHI8U3RvcmFnZU1hcD4gU3RvcmFnZU1hcDo6
c2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1CiAKICAgICBIYXNo
TWFwPFN0cmluZywgU3RyaW5nPjo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IG1fbWFwLmFkZChrZXks
IHZhbHVlKTsKICAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICBhZGRSZXN1
bHQuaXRlcmF0b3ItPnNlY29uZCA9IHZhbHVlOworICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3It
PnZhbHVlID0gdmFsdWU7CiAKICAgICBpbnZhbGlkYXRlSXRlcmF0b3IoKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcAppbmRleCA1NGI2NDBj
ZTUyZjVkYTkxMWQ3MmQ2YzU3NjMwZGI1MTY1ZGNkYWIzLi5jOGFjMmJkM2E4MTQyMTY1NDlmMGY5
OTUxZWQ4ZGExNzE4NTg3YmZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0
b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3Jh
Z2VOYW1lc3BhY2VJbXBsLmNwcApAQCAtNTUsNyArNTUsNyBAQCBQYXNzUmVmUHRyPFN0b3JhZ2VO
YW1lc3BhY2U+IFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpsb2NhbFN0b3JhZ2VOYW1lc3BhY2UoY29u
c3QgUwogICAgICAgICByZXR1cm4gc3RvcmFnZU5hbWVzcGFjZS5yZWxlYXNlKCk7CiAgICAgfQog
Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgcmV0dXJuIGl0LT52YWx1ZTsKIH0KIAogUGFz
c1JlZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6c2Vzc2lvblN0
b3JhZ2VOYW1lc3BhY2UodW5zaWduZWQgcXVvdGEpCkBAIC05Nyw3ICs5Nyw3IEBAIFBhc3NSZWZQ
dHI8U3RvcmFnZU5hbWVzcGFjZT4gU3RvcmFnZU5hbWVzcGFjZUltcGw6OmNvcHkoKQogCiAgICAg
U3RvcmFnZUFyZWFNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fc3RvcmFnZUFyZWFNYXAuZW5kKCk7CiAg
ICAgZm9yIChTdG9yYWdlQXJlYU1hcDo6aXRlcmF0b3IgaSA9IG1fc3RvcmFnZUFyZWFNYXAuYmVn
aW4oKTsgaSAhPSBlbmQ7ICsraSkKLSAgICAgICAgbmV3TmFtZXNwYWNlLT5tX3N0b3JhZ2VBcmVh
TWFwLnNldChpLT5maXJzdCwgaS0+c2Vjb25kLT5jb3B5KCkpOworICAgICAgICBuZXdOYW1lc3Bh
Y2UtPm1fc3RvcmFnZUFyZWFNYXAuc2V0KGktPmtleSwgaS0+dmFsdWUtPmNvcHkoKSk7CiAgICAg
cmV0dXJuIG5ld05hbWVzcGFjZS5yZWxlYXNlKCk7CiB9CiAKQEAgLTEzMSw3ICsxMzEsNyBAQCB2
b2lkIFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpjbG9zZSgpCiAKICAgICBTdG9yYWdlQXJlYU1hcDo6
aXRlcmF0b3IgZW5kID0gbV9zdG9yYWdlQXJlYU1hcC5lbmQoKTsKICAgICBmb3IgKFN0b3JhZ2VB
cmVhTWFwOjppdGVyYXRvciBpdCA9IG1fc3RvcmFnZUFyZWFNYXAuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5jbG9zZSgpOworICAgICAgICBpdC0+dmFsdWUt
PmNsb3NlKCk7CiAKICAgICBpZiAobV9zeW5jTWFuYWdlcikKICAgICAgICAgbV9zeW5jTWFuYWdl
ci0+Y2xvc2UoKTsKQEAgLTE1NCw3ICsxNTQsNyBAQCB2b2lkIFN0b3JhZ2VOYW1lc3BhY2VJbXBs
OjpjbGVhckFsbE9yaWdpbnNGb3JEZWxldGlvbigpCiAKICAgICBTdG9yYWdlQXJlYU1hcDo6aXRl
cmF0b3IgZW5kID0gbV9zdG9yYWdlQXJlYU1hcC5lbmQoKTsKICAgICBmb3IgKFN0b3JhZ2VBcmVh
TWFwOjppdGVyYXRvciBpdCA9IG1fc3RvcmFnZUFyZWFNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5jbGVhckZvck9yaWdpbkRlbGV0aW9uKCk7CisgICAg
ICAgIGl0LT52YWx1ZS0+Y2xlYXJGb3JPcmlnaW5EZWxldGlvbigpOwogfQogICAgIAogdm9pZCBT
dG9yYWdlTmFtZXNwYWNlSW1wbDo6c3luYygpCkBAIC0xNjIsNyArMTYyLDcgQEAgdm9pZCBTdG9y
YWdlTmFtZXNwYWNlSW1wbDo6c3luYygpCiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAg
ICBTdG9yYWdlQXJlYU1hcDo6aXRlcmF0b3IgZW5kID0gbV9zdG9yYWdlQXJlYU1hcC5lbmQoKTsK
ICAgICBmb3IgKFN0b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBpdCA9IG1fc3RvcmFnZUFyZWFNYXAu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5zeW5jKCk7Cisg
ICAgICAgIGl0LT52YWx1ZS0+c3luYygpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwCmluZGV4IDNmNTk3
MDViMTcxNTQzN2JiYjc3NWU4OWMzYjQ5MjQwMzBiNjgzYzUuLjNkN2QwMjczOWQzZDYyMzRjNTUw
ZGRlMTdiOGM5YmVkYTkxMTU1ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdE
b2N1bWVudEV4dGVuc2lvbnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVu
dEV4dGVuc2lvbnMuY3BwCkBAIC0xNTYsNyArMTU2LDcgQEAgdm9pZCBTVkdEb2N1bWVudEV4dGVu
c2lvbnM6OnJlbW92ZUFuaW1hdGlvbkVsZW1lbnRGcm9tVGFyZ2V0KFNWR1NNSUxFbGVtZW50KiBh
bmkKICAgICBIYXNoTWFwPFNWR0VsZW1lbnQqLCBIYXNoU2V0PFNWR1NNSUxFbGVtZW50Kj4qID46
Oml0ZXJhdG9yIGl0ID0gbV9hbmltYXRlZEVsZW1lbnRzLmZpbmQodGFyZ2V0RWxlbWVudCk7CiAg
ICAgQVNTRVJUKGl0ICE9IG1fYW5pbWF0ZWRFbGVtZW50cy5lbmQoKSk7CiAgICAgCi0gICAgSGFz
aFNldDxTVkdTTUlMRWxlbWVudCo+KiBhbmltYXRpb25FbGVtZW50c0ZvclRhcmdldCA9IGl0LT5z
ZWNvbmQ7CisgICAgSGFzaFNldDxTVkdTTUlMRWxlbWVudCo+KiBhbmltYXRpb25FbGVtZW50c0Zv
clRhcmdldCA9IGl0LT52YWx1ZTsKICAgICBBU1NFUlQoIWFuaW1hdGlvbkVsZW1lbnRzRm9yVGFy
Z2V0LT5pc0VtcHR5KCkpOwogCiAgICAgYW5pbWF0aW9uRWxlbWVudHNGb3JUYXJnZXQtPnJlbW92
ZShhbmltYXRpb25FbGVtZW50KTsKQEAgLTIxMyw5ICsyMTMsOSBAQCB2b2lkIFNWR0RvY3VtZW50
RXh0ZW5zaW9uczo6YWRkUGVuZGluZ1Jlc291cmNlKGNvbnN0IEF0b21pY1N0cmluZyYgaWQsIFNW
R1N0eWxlZAogCiAgICAgLy8gVGhlIEhhc2hNYXAgYWRkIGZ1bmN0aW9uIGxlYXZlcyB0aGUgbWFw
IGFsb25lIGFuZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgZWxlbWVudCBpbiB0aGUKICAgICAv
LyBtYXAgaWYgdGhlIGVsZW1lbnQgYWxyZWFkeSBleGlzdHMuIFNvIHdlIGFkZCB3aXRoIGEgdmFs
dWUgb2YgMCwgYW5kIGl0IGVpdGhlciBmaW5kcyB0aGUKLSAgICAvLyBleGlzdGluZyBlbGVtZW50
IG9yIGFkZHMgYSBuZXcgb25lIGluIGEgc2luZ2xlIG9wZXJhdGlvbi4gVGhlICIuaXRlcmF0b3It
PnNlY29uZCIgaWRpb20gZ2V0cworICAgIC8vIGV4aXN0aW5nIGVsZW1lbnQgb3IgYWRkcyBhIG5l
dyBvbmUgaW4gYSBzaW5nbGUgb3BlcmF0aW9uLiBUaGUgIi5pdGVyYXRvci0+dmFsdWUiIGlkaW9t
IGdldHMKICAgICAvLyB1cyB0byB0aGUgaXRlcmF0b3IgZnJvbSBhZGQncyByZXN1bHQsIGFuZCB0
aGVuIHRvIHRoZSB2YWx1ZSBpbnNpZGUgdGhlIGhhc2ggdGFibGUuCi0gICAgU1ZHUGVuZGluZ0Vs
ZW1lbnRzKiYgc2V0ID0gbV9wZW5kaW5nUmVzb3VyY2VzLmFkZChpZCwgMCkuaXRlcmF0b3ItPnNl
Y29uZDsKKyAgICBTVkdQZW5kaW5nRWxlbWVudHMqJiBzZXQgPSBtX3BlbmRpbmdSZXNvdXJjZXMu
YWRkKGlkLCAwKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCFzZXQpCiAgICAgICAgIHNldCA9
IG5ldyBTVkdQZW5kaW5nRWxlbWVudHM7CiAgICAgc2V0LT5hZGQoZWxlbWVudCk7CkBAIC0yNDAs
NyArMjQwLDcgQEAgYm9vbCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OmlzRWxlbWVudFBlbmRpbmdS
ZXNvdXJjZXMoU1ZHU3R5bGVkRWxlbWVudCogZWxlbWVudCkKIAogICAgIEhhc2hNYXA8QXRvbWlj
U3RyaW5nLCBTVkdQZW5kaW5nRWxlbWVudHMqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wZW5k
aW5nUmVzb3VyY2VzLmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDxBdG9taWNTdHJpbmcsIFNWR1Bl
bmRpbmdFbGVtZW50cyo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGVuZGluZ1Jlc291cmNlcy5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgU1ZHUGVuZGluZ0VsZW1lbnRzKiBl
bGVtZW50cyA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFNWR1BlbmRpbmdFbGVtZW50cyogZWxlbWVu
dHMgPSBpdC0+dmFsdWU7CiAgICAgICAgIEFTU0VSVChlbGVtZW50cyk7CiAKICAgICAgICAgaWYg
KGVsZW1lbnRzLT5jb250YWlucyhlbGVtZW50KSkKQEAgLTI2OCwxMyArMjY4LDEzIEBAIHZvaWQg
U1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZW1vdmVFbGVtZW50RnJvbVBlbmRpbmdSZXNvdXJjZXMo
U1ZHU3R5bGVkRWxlbWVudCoKICAgICAgICAgVmVjdG9yPEF0b21pY1N0cmluZz4gdG9CZVJlbW92
ZWQ7CiAgICAgICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBTVkdQZW5kaW5nRWxlbWVudHMqPjo6
aXRlcmF0b3IgZW5kID0gbV9wZW5kaW5nUmVzb3VyY2VzLmVuZCgpOwogICAgICAgICBmb3IgKEhh
c2hNYXA8QXRvbWljU3RyaW5nLCBTVkdQZW5kaW5nRWxlbWVudHMqPjo6aXRlcmF0b3IgaXQgPSBt
X3BlbmRpbmdSZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAg
ICBTVkdQZW5kaW5nRWxlbWVudHMqIGVsZW1lbnRzID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAg
IFNWR1BlbmRpbmdFbGVtZW50cyogZWxlbWVudHMgPSBpdC0+dmFsdWU7CiAgICAgICAgICAgICBB
U1NFUlQoZWxlbWVudHMpOwogICAgICAgICAgICAgQVNTRVJUKCFlbGVtZW50cy0+aXNFbXB0eSgp
KTsKIAogICAgICAgICAgICAgZWxlbWVudHMtPnJlbW92ZShlbGVtZW50KTsKICAgICAgICAgICAg
IGlmIChlbGVtZW50cy0+aXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHRvQmVSZW1vdmVkLmFw
cGVuZChpdC0+Zmlyc3QpOworICAgICAgICAgICAgICAgIHRvQmVSZW1vdmVkLmFwcGVuZChpdC0+
a2V5KTsKICAgICAgICAgfQogCiAgICAgICAgIGVsZW1lbnQtPmNsZWFySGFzUGVuZGluZ1Jlc291
cmNlc0lmUG9zc2libGUoKTsKQEAgLTI5MCwxMyArMjkwLDEzIEBAIHZvaWQgU1ZHRG9jdW1lbnRF
eHRlbnNpb25zOjpyZW1vdmVFbGVtZW50RnJvbVBlbmRpbmdSZXNvdXJjZXMoU1ZHU3R5bGVkRWxl
bWVudCoKICAgICAgICAgVmVjdG9yPEF0b21pY1N0cmluZz4gdG9CZVJlbW92ZWQ7CiAgICAgICAg
IEhhc2hNYXA8QXRvbWljU3RyaW5nLCBTVkdQZW5kaW5nRWxlbWVudHMqPjo6aXRlcmF0b3IgZW5k
ID0gbV9wZW5kaW5nUmVzb3VyY2VzRm9yUmVtb3ZhbC5lbmQoKTsKICAgICAgICAgZm9yIChIYXNo
TWFwPEF0b21pY1N0cmluZywgU1ZHUGVuZGluZ0VsZW1lbnRzKj46Oml0ZXJhdG9yIGl0ID0gbV9w
ZW5kaW5nUmVzb3VyY2VzRm9yUmVtb3ZhbC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAg
ICAgICAgICAgIFNWR1BlbmRpbmdFbGVtZW50cyogZWxlbWVudHMgPSBpdC0+c2Vjb25kOworICAg
ICAgICAgICAgU1ZHUGVuZGluZ0VsZW1lbnRzKiBlbGVtZW50cyA9IGl0LT52YWx1ZTsKICAgICAg
ICAgICAgIEFTU0VSVChlbGVtZW50cyk7CiAgICAgICAgICAgICBBU1NFUlQoIWVsZW1lbnRzLT5p
c0VtcHR5KCkpOwogCiAgICAgICAgICAgICBlbGVtZW50cy0+cmVtb3ZlKGVsZW1lbnQpOwogICAg
ICAgICAgICAgaWYgKGVsZW1lbnRzLT5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgdG9CZVJl
bW92ZWQuYXBwZW5kKGl0LT5maXJzdCk7CisgICAgICAgICAgICAgICAgdG9CZVJlbW92ZWQuYXBw
ZW5kKGl0LT5rZXkpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gV2UgdXNlIHRoZSByZW1vdmVQ
ZW5kaW5nUmVzb3VyY2VGb3JSZW1vdmFsIGZ1bmN0aW9uIGhlcmUgYmVjYXVzZSBpdCBkZWFscyB3
aXRoIHNldCBsaWZldGltZSBjb3JyZWN0bHkuCkBAIC0zNTYsNyArMzU2LDcgQEAgSGFzaFNldDxT
VkdFbGVtZW50Kj4qIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6c2V0T2ZFbGVtZW50c1JlZmVyZW5j
aW5nVGFyZ2V0KFNWR0UKICAgICBjb25zdCBIYXNoTWFwPFNWR0VsZW1lbnQqLCBPd25QdHI8SGFz
aFNldDxTVkdFbGVtZW50Kj4gPiA+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fZWxlbWVudERlcGVu
ZGVuY2llcy5maW5kKHJlZmVyZW5jZWRFbGVtZW50KTsKICAgICBpZiAoaXQgPT0gbV9lbGVtZW50
RGVwZW5kZW5jaWVzLmVuZCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gaXQtPnNl
Y29uZC5nZXQoKTsKKyAgICByZXR1cm4gaXQtPnZhbHVlLmdldCgpOwogfQogCiB2b2lkIFNWR0Rv
Y3VtZW50RXh0ZW5zaW9uczo6YWRkRWxlbWVudFJlZmVyZW5jaW5nVGFyZ2V0KFNWR0VsZW1lbnQq
IHJlZmVyZW5jaW5nRWxlbWVudCwgU1ZHRWxlbWVudCogcmVmZXJlbmNlZEVsZW1lbnQpCkBAIC0z
ODAsOCArMzgwLDggQEAgdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlbW92ZUFsbFRhcmdl
dFJlZmVyZW5jZXNGb3JFbGVtZW50KFNWR0VsZW1lbnQqIHJlZmUKIAogICAgIEhhc2hNYXA8U1ZH
RWxlbWVudCosIE93blB0cjxIYXNoU2V0PFNWR0VsZW1lbnQqPiA+ID46Oml0ZXJhdG9yIGVuZCA9
IG1fZWxlbWVudERlcGVuZGVuY2llcy5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8U1ZHRWxlbWVu
dCosIE93blB0cjxIYXNoU2V0PFNWR0VsZW1lbnQqPiA+ID46Oml0ZXJhdG9yIGl0ID0gbV9lbGVt
ZW50RGVwZW5kZW5jaWVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBTVkdF
bGVtZW50KiByZWZlcmVuY2VkRWxlbWVudCA9IGl0LT5maXJzdDsKLSAgICAgICAgSGFzaFNldDxT
VkdFbGVtZW50Kj4qIHJlZmVyZW5jaW5nRWxlbWVudHMgPSBpdC0+c2Vjb25kLmdldCgpOworICAg
ICAgICBTVkdFbGVtZW50KiByZWZlcmVuY2VkRWxlbWVudCA9IGl0LT5rZXk7CisgICAgICAgIEhh
c2hTZXQ8U1ZHRWxlbWVudCo+KiByZWZlcmVuY2luZ0VsZW1lbnRzID0gaXQtPnZhbHVlLmdldCgp
OwogICAgICAgICBIYXNoU2V0PFNWR0VsZW1lbnQqPjo6aXRlcmF0b3Igc2V0SXQgPSByZWZlcmVu
Y2luZ0VsZW1lbnRzLT5maW5kKHJlZmVyZW5jaW5nRWxlbWVudCk7CiAgICAgICAgIGlmIChzZXRJ
dCA9PSByZWZlcmVuY2luZ0VsZW1lbnRzLT5lbmQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwpA
QCAtNDAyLDEwICs0MDIsMTAgQEAgdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlbW92ZUFs
bEVsZW1lbnRSZWZlcmVuY2VzRm9yVGFyZ2V0KFNWR0VsZW1lbnQqIHJlZmUKICAgICBIYXNoTWFw
PFNWR0VsZW1lbnQqLCBPd25QdHI8SGFzaFNldDxTVkdFbGVtZW50Kj4gPiA+OjppdGVyYXRvciBp
dCA9IG1fZWxlbWVudERlcGVuZGVuY2llcy5maW5kKHJlZmVyZW5jZWRFbGVtZW50KTsKICAgICBp
ZiAoaXQgPT0gbV9lbGVtZW50RGVwZW5kZW5jaWVzLmVuZCgpKQogICAgICAgICByZXR1cm47Ci0g
ICAgQVNTRVJUKGl0LT5maXJzdCA9PSByZWZlcmVuY2VkRWxlbWVudCk7CisgICAgQVNTRVJUKGl0
LT5rZXkgPT0gcmVmZXJlbmNlZEVsZW1lbnQpOwogICAgIFZlY3RvcjxTVkdFbGVtZW50Kj4gdG9C
ZU5vdGlmaWVkOwogCi0gICAgSGFzaFNldDxTVkdFbGVtZW50Kj4qIHJlZmVyZW5jaW5nRWxlbWVu
dHMgPSBpdC0+c2Vjb25kLmdldCgpOworICAgIEhhc2hTZXQ8U1ZHRWxlbWVudCo+KiByZWZlcmVu
Y2luZ0VsZW1lbnRzID0gaXQtPnZhbHVlLmdldCgpOwogICAgIEhhc2hTZXQ8U1ZHRWxlbWVudCo+
OjppdGVyYXRvciBzZXRFbmQgPSByZWZlcmVuY2luZ0VsZW1lbnRzLT5lbmQoKTsKICAgICBmb3Ig
KEhhc2hTZXQ8U1ZHRWxlbWVudCo+OjppdGVyYXRvciBzZXRJdCA9IHJlZmVyZW5jaW5nRWxlbWVu
dHMtPmJlZ2luKCk7IHNldEl0ICE9IHNldEVuZDsgKytzZXRJdCkKICAgICAgICAgdG9CZU5vdGlm
aWVkLmFwcGVuZCgqc2V0SXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Vs
ZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCmluZGV4IDE3NTNl
Y2U2NmM5OTkyOWY2ZDZjNzkzNjc3MDI0ZGUzYTljNzIzZTIuLjZhYTFhMTE5NTliMWU1NTdjZmMy
ZGM4YWRiMTc0ZDhiMjk2NmVkZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdF
bGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAKQEAgLTc3
LDcgKzc3LDcgQEAgU1ZHRWxlbWVudDo6flNWR0VsZW1lbnQoKQogICAgICAgICBTVkdFbGVtZW50
UmFyZURhdGE6OlNWR0VsZW1lbnRSYXJlRGF0YU1hcDo6aXRlcmF0b3IgaXQgPSByYXJlRGF0YU1h
cC5maW5kKHRoaXMpOwogICAgICAgICBBU1NFUlQoaXQgIT0gcmFyZURhdGFNYXAuZW5kKCkpOwog
Ci0gICAgICAgIFNWR0VsZW1lbnRSYXJlRGF0YSogcmFyZURhdGEgPSBpdC0+c2Vjb25kOworICAg
ICAgICBTVkdFbGVtZW50UmFyZURhdGEqIHJhcmVEYXRhID0gaXQtPnZhbHVlOwogICAgICAgICBy
YXJlRGF0YS0+ZGVzdHJveUFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygpOwogICAgICAgICBp
ZiAoU1ZHQ3Vyc29yRWxlbWVudCogY3Vyc29yRWxlbWVudCA9IHJhcmVEYXRhLT5jdXJzb3JFbGVt
ZW50KCkpCiAgICAgICAgICAgICBjdXJzb3JFbGVtZW50LT5yZW1vdmVDbGllbnQodGhpcyk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuY3Bw
CmluZGV4IGM0OTYzODM4OTg1N2UwNWU5NzkwN2RjMDM4Zjc4ZTBhMmU5Mzg3ZjguLjMyN2QyMjdh
Nzk1NTMwNWIzZDAxZGNiODE4MmQ1MmE4MTYxZDc1OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuY3BwCkBAIC0yMTEsNyArMjExLDcg
QEAgU3RyaW5nIFNNSUxUaW1lQ29udGFpbmVyOjpiYXNlVmFsdWVGb3IoRWxlbWVudEF0dHJpYnV0
ZVBhaXIga2V5KQogICAgIC8vIEN1cnJlbnRseSBhbmltYXRpb24gb3ZlcndyaXRlcyB0aGVtIHNv
IHdlIG5lZWQgdG8gc2F2ZSB0aGVtIHNvbWV3aGVyZS4KICAgICBCYXNlVmFsdWVNYXA6Oml0ZXJh
dG9yIGl0ID0gbV9zYXZlZEJhc2VWYWx1ZXMuZmluZChrZXkpOwogICAgIGlmIChpdCAhPSBtX3Nh
dmVkQmFzZVZhbHVlcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAg
IHJldHVybiBpdC0+dmFsdWU7CiAgICAgCiAgICAgU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCA9
IGtleS5maXJzdDsKICAgICBRdWFsaWZpZWROYW1lIGF0dHJpYnV0ZU5hbWUgPSBrZXkuc2Vjb25k
OwpAQCAtMjg0LDcgKzI4NCw3IEBAIHZvaWQgU01JTFRpbWVDb250YWluZXI6OnVwZGF0ZUFuaW1h
dGlvbnMoU01JTFRpbWUgZWxhcHNlZCkKICAgICBWZWN0b3I8U1ZHU01JTEVsZW1lbnQqPiBhbmlt
YXRpb25zVG9BcHBseTsKICAgICBSZXN1bHRFbGVtZW50TWFwOjppdGVyYXRvciBlbmQgPSByZXN1
bHRzRWxlbWVudHMuZW5kKCk7CiAgICAgZm9yIChSZXN1bHRFbGVtZW50TWFwOjppdGVyYXRvciBp
dCA9IHJlc3VsdHNFbGVtZW50cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGFu
aW1hdGlvbnNUb0FwcGx5LmFwcGVuZChpdC0+c2Vjb25kLmdldCgpKTsKKyAgICAgICAgYW5pbWF0
aW9uc1RvQXBwbHkuYXBwZW5kKGl0LT52YWx1ZS5nZXQoKSk7CiAKICAgICAvLyBTb3J0IDxhbmlt
YXRlVHJhbmZvcm0+IHRvIGJlIHRoZSBsYXN0IG9uZSB0byBiZSBhcHBsaWVkLiA8YW5pbWF0ZT4g
bWF5IGNoYW5nZSB0cmFuc2Zvcm0gYXR0cmlidXRlIGFzCiAgICAgLy8gd2VsbCAoZGlyZWN0bHkg
b3IgaW5kaXJlY3RseSBieSBtb2RpZnlpbmcgPHVzZT4geC95KSBhbmQgdGhpcyB3YXkgdHJhbnNm
b3JtcyBjb21iaW5lIHByb3Blcmx5LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dy
YXBoaWNzL1NWR0ltYWdlQ2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NW
R0ltYWdlQ2FjaGUuY3BwCmluZGV4IGZiMzhmZDU1NGI2Mjc2ZTA2ZDZjYTQ4YWU2NTIxNzJiMGQ2
ODhjNGQuLjg4OTlmMTIxMzYxYTBjOTQ2NDExZWQ0NWY2NjI1NWU2ZmU3ODRiOTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZUNhY2hlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VDYWNoZS5jcHAKQEAgLTQyLDcgKzQy
LDcgQEAgU1ZHSW1hZ2VDYWNoZTo6flNWR0ltYWdlQ2FjaGUoKQogCiAgICAgSW1hZ2VEYXRhTWFw
OjppdGVyYXRvciBlbmQgPSBtX2ltYWdlRGF0YU1hcC5lbmQoKTsKICAgICBmb3IgKEltYWdlRGF0
YU1hcDo6aXRlcmF0b3IgaXQgPSBtX2ltYWdlRGF0YU1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpCi0gICAgICAgIGRlbGV0ZSBpdC0+c2Vjb25kLmJ1ZmZlcjsKKyAgICAgICAgZGVsZXRlIGl0
LT52YWx1ZS5idWZmZXI7CiAKICAgICBtX2ltYWdlRGF0YU1hcC5jbGVhcigpOwogfQpAQCAtNTYs
NyArNTYsNyBAQCB2b2lkIFNWR0ltYWdlQ2FjaGU6OnJlbW92ZVJlbmRlcmVyRnJvbUNhY2hlKGNv
bnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiAgICAgaWYgKGl0ID09IG1faW1hZ2VEYXRhTWFw
LmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBkZWxldGUgaXQtPnNlY29uZC5idWZmZXI7
CisgICAgZGVsZXRlIGl0LT52YWx1ZS5idWZmZXI7CiAgICAgbV9pbWFnZURhdGFNYXAucmVtb3Zl
KGl0KTsKIH0KIApAQCAtNzMsMTQgKzczLDE0IEBAIFNWR0ltYWdlQ2FjaGU6OlNpemVBbmRab29t
IFNWR0ltYWdlQ2FjaGU6OnJlcXVlc3RlZFNpemVBbmRab29tKGNvbnN0IFJlbmRlck9iamVjCiAg
ICAgU2l6ZUFuZFpvb21NYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zaXplQW5kWm9vbU1hcC5m
aW5kKHJlbmRlcmVyKTsKICAgICBpZiAoaXQgPT0gbV9zaXplQW5kWm9vbU1hcC5lbmQoKSkKICAg
ICAgICAgcmV0dXJuIFNpemVBbmRab29tKCk7Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAg
cmV0dXJuIGl0LT52YWx1ZTsKIH0KIAogdm9pZCBTVkdJbWFnZUNhY2hlOjppbWFnZUNvbnRlbnRD
aGFuZ2VkKCkKIHsKICAgICBJbWFnZURhdGFNYXA6Oml0ZXJhdG9yIGVuZCA9IG1faW1hZ2VEYXRh
TWFwLmVuZCgpOwogICAgIGZvciAoSW1hZ2VEYXRhTWFwOjppdGVyYXRvciBpdCA9IG1faW1hZ2VE
YXRhTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC5pbWFn
ZU5lZWRzVXBkYXRlID0gdHJ1ZTsKKyAgICAgICAgaXQtPnZhbHVlLmltYWdlTmVlZHNVcGRhdGUg
PSB0cnVlOwogCiAgICAgLy8gSWYgd2UncmUgaW4gdGhlIG1pZGRsZSBvZiBsYXlvdXQsIHN0YXJ0
IHJlZHJhd2luZyBkaXJ0eQogICAgIC8vIGltYWdlcyBvbiBhIHRpbWVyOyBvdGhlcndpc2UgaXQn
cyBzYWZlIHRvIGRyYXcgaW1tZWRpYXRlbHkuCkBAIC05Nyw3ICs5Nyw3IEBAIHZvaWQgU1ZHSW1h
Z2VDYWNoZTo6cmVkcmF3KCkKIHsKICAgICBJbWFnZURhdGFNYXA6Oml0ZXJhdG9yIGVuZCA9IG1f
aW1hZ2VEYXRhTWFwLmVuZCgpOwogICAgIGZvciAoSW1hZ2VEYXRhTWFwOjppdGVyYXRvciBpdCA9
IG1faW1hZ2VEYXRhTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBJbWFn
ZURhdGEmIGRhdGEgPSBpdC0+c2Vjb25kOworICAgICAgICBJbWFnZURhdGEmIGRhdGEgPSBpdC0+
dmFsdWU7CiAgICAgICAgIGlmICghZGF0YS5pbWFnZU5lZWRzVXBkYXRlKQogICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgIC8vIElmIHRoZSBjb250ZW50IGNoYW5nZWQgd2UgcmVkcmF3IHVz
aW5nIG91ciBleGlzdGluZyBJbWFnZUJ1ZmZlci4KQEAgLTEyNSwxNCArMTI1LDE0IEBAIEltYWdl
KiBTVkdJbWFnZUNhY2hlOjpsb29rdXBPckNyZWF0ZUJpdG1hcEltYWdlRm9yUmVuZGVyZXIoY29u
c3QgUmVuZGVyT2JqZWN0KiByCiAgICAgaWYgKHNpemVJdCA9PSBtX3NpemVBbmRab29tTWFwLmVu
ZCgpKQogICAgICAgICByZXR1cm4gSW1hZ2U6Om51bGxJbWFnZSgpOwogCi0gICAgSW50U2l6ZSBz
aXplID0gc2l6ZUl0LT5zZWNvbmQuc2l6ZTsKLSAgICBmbG9hdCB6b29tID0gc2l6ZUl0LT5zZWNv
bmQuem9vbTsKKyAgICBJbnRTaXplIHNpemUgPSBzaXplSXQtPnZhbHVlLnNpemU7CisgICAgZmxv
YXQgem9vbSA9IHNpemVJdC0+dmFsdWUuem9vbTsKICAgICBBU1NFUlQoIXNpemUuaXNFbXB0eSgp
KTsKIAogICAgIC8vIExvb2t1cCBpbWFnZSBmb3IgcmVuZGVyZXIgaW4gY2FjaGUgYW5kIGV2ZW50
dWFsbHkgdXBkYXRlIGl0LgogICAgIEltYWdlRGF0YU1hcDo6aXRlcmF0b3IgaXQgPSBtX2ltYWdl
RGF0YU1hcC5maW5kKHJlbmRlcmVyKTsKICAgICBpZiAoaXQgIT0gbV9pbWFnZURhdGFNYXAuZW5k
KCkpIHsKLSAgICAgICAgSW1hZ2VEYXRhJiBkYXRhID0gaXQtPnNlY29uZDsKKyAgICAgICAgSW1h
Z2VEYXRhJiBkYXRhID0gaXQtPnZhbHVlOwogCiAgICAgICAgIC8vIENvbW1vbiBjYXNlOiBpbWFn
ZSBzaXplICYgem9vbSByZW1haW5lZCB0aGUgc2FtZS4KICAgICAgICAgaWYgKGRhdGEuc2l6ZUFu
ZFpvb20uc2l6ZSA9PSBzaXplICYmIGRhdGEuc2l6ZUFuZFpvb20uem9vbSA9PSB6b29tKQpAQCAt
MTU0LDcgKzE1NCw3IEBAIEltYWdlKiBTVkdJbWFnZUNhY2hlOjpsb29rdXBPckNyZWF0ZUJpdG1h
cEltYWdlRm9yUmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0KiByCiAgICAgSW1hZ2UqIG5ld0lt
YWdlUHRyID0gbmV3SW1hZ2UuZ2V0KCk7CiAgICAgQVNTRVJUKG5ld0ltYWdlUHRyKTsKIAotICAg
IG1faW1hZ2VEYXRhTWFwLmFkZChyZW5kZXJlciwgSW1hZ2VEYXRhKG5ld0J1ZmZlci5sZWFrUHRy
KCksIG5ld0ltYWdlLnJlbGVhc2UoKSwgc2l6ZUl0LT5zZWNvbmQpKTsKKyAgICBtX2ltYWdlRGF0
YU1hcC5hZGQocmVuZGVyZXIsIEltYWdlRGF0YShuZXdCdWZmZXIubGVha1B0cigpLCBuZXdJbWFn
ZS5yZWxlYXNlKCksIHNpemVJdC0+dmFsdWUpKTsKICAgICByZXR1cm4gbmV3SW1hZ2VQdHI7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0Zp
bHRlckJ1aWxkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0Zp
bHRlckJ1aWxkZXIuaAppbmRleCA3MTMyNDFjOGU4OTQxNTQyNjFhOTc4MWE3YzZmNGQ1Y2JlNTFm
NmUyLi5iOTFkZjA0MmRkNTI0ZmU3YzkyYmUwOWFkY2U0YjFlYjZkMDM2MzljIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRl
ci5oCkBAIC01MCw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIC8vIE9ubHkgYWxs
b3dlZCBmb3IgZWZmZWN0cyBiZWxvbmdzIHRvIHRoaXMgYnVpbGRlci4KICAgICAgICAgQVNTRVJU
KG1fZWZmZWN0UmVmZXJlbmNlcy5jb250YWlucyhlZmZlY3QpKTsKLSAgICAgICAgcmV0dXJuIG1f
ZWZmZWN0UmVmZXJlbmNlcy5maW5kKGVmZmVjdCktPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIG1f
ZWZmZWN0UmVmZXJlbmNlcy5maW5kKGVmZmVjdCktPnZhbHVlOwogICAgIH0KIAogICAgIC8vIFJl
cXVpcmVkIHRvIGNoYW5nZSB0aGUgYXR0cmlidXRlcyBvZiBhIGZpbHRlciBkdXJpbmcgYW4gc3Zn
QXR0cmlidXRlQ2hhbmdlZC4KQEAgLTY2LDcgKzY2LDcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAg
ICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBSZWZQdHI8RmlsdGVyRWZmZWN0PiA+OjppdGVyYXRv
ciBlbmQgPSBtX2J1aWx0aW5FZmZlY3RzLmVuZCgpOwogICAgICAgICBmb3IgKEhhc2hNYXA8QXRv
bWljU3RyaW5nLCBSZWZQdHI8RmlsdGVyRWZmZWN0PiA+OjppdGVyYXRvciBpdGVyYXRvciA9IG1f
YnVpbHRpbkVmZmVjdHMuYmVnaW4oKTsgaXRlcmF0b3IgIT0gZW5kOyArK2l0ZXJhdG9yKQotICAg
ICAgICAgICAgIG1fZWZmZWN0UmVmZXJlbmNlcy5hZGQoaXRlcmF0b3ItPnNlY29uZCwgRmlsdGVy
RWZmZWN0U2V0KCkpOworICAgICAgICAgICAgIG1fZWZmZWN0UmVmZXJlbmNlcy5hZGQoaXRlcmF0
b3ItPnZhbHVlLCBGaWx0ZXJFZmZlY3RTZXQoKSk7CiAgICAgfQogCiAgICAgSGFzaE1hcDxBdG9t
aWNTdHJpbmcsIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+ID4gbV9idWlsdGluRWZmZWN0czsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHku
aCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHkuaApp
bmRleCA3MTRlZjE2OTgzNmU5NDY3ZGFkNmU5YmZkNDRiNzZiOTMzM2FjZDJhLi42ZGE0ZjY5YjNh
MDZkMDY0MzIzNmUyNjlmMWI5MTRkOTllYTM1ZTU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eS5oCkBAIC01NSw4ICs1NSw4IEBA
IHB1YmxpYzoKICAgICAgICAgQ2FjaGUqIGNhY2hlID0gYW5pbWF0ZWRQcm9wZXJ0eUNhY2hlKCk7
CiAgICAgICAgIGNvbnN0IENhY2hlOjpjb25zdF9pdGVyYXRvciBlbmQgPSBjYWNoZS0+ZW5kKCk7
CiAgICAgICAgIGZvciAoQ2FjaGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY2FjaGUtPmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgaWYgKGl0LT5zZWNvbmQgPT0gdGhpcykg
ewotICAgICAgICAgICAgICAgIGNhY2hlLT5yZW1vdmUoaXQtPmZpcnN0KTsKKyAgICAgICAgICAg
IGlmIChpdC0+dmFsdWUgPT0gdGhpcykgeworICAgICAgICAgICAgICAgIGNhY2hlLT5yZW1vdmUo
aXQtPmtleSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0F0dHJpYnV0
ZVRvUHJvcGVydHlNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQXR0
cmlidXRlVG9Qcm9wZXJ0eU1hcC5jcHAKaW5kZXggYmUzMWNjM2M3ZGEyZjUwZjUxZjY5YjU1NDQw
MjY1ZGIxMzViNTI4Yy4uY2M0NmNjZmEwODFmZmM4ODMwOWI3ZWYyMmQ2M2YwZjM0ZWZkODE3YyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQXR0cmlidXRlVG9Q
cm9wZXJ0eU1hcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQXR0
cmlidXRlVG9Qcm9wZXJ0eU1hcC5jcHAKQEAgLTMxLDcgKzMxLDcgQEAgdm9pZCBTVkdBdHRyaWJ1
dGVUb1Byb3BlcnR5TWFwOjphZGRQcm9wZXJ0aWVzKFNWR0F0dHJpYnV0ZVRvUHJvcGVydHlNYXAm
IG1hcCkKIHsKICAgICBBdHRyaWJ1dGVUb1Byb3BlcnRpZXNNYXA6Oml0ZXJhdG9yIGVuZCA9IG1h
cC5tX21hcC5lbmQoKTsKICAgICBmb3IgKEF0dHJpYnV0ZVRvUHJvcGVydGllc01hcDo6aXRlcmF0
b3IgaXQgPSBtYXAubV9tYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFBy
b3BlcnRpZXNWZWN0b3IqIHZlY3RvciA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFByb3BlcnRpZXNW
ZWN0b3IqIHZlY3RvciA9IGl0LT52YWx1ZTsKICAgICAgICAgQVNTRVJUKHZlY3Rvcik7CiAKICAg
ICAgICAgUHJvcGVydGllc1ZlY3Rvcjo6aXRlcmF0b3IgdmVjdG9yRW5kID0gdmVjdG9yLT5lbmQo
KTsKQEAgLTgxLDEyICs4MSwxMiBAQCB2b2lkIFNWR0F0dHJpYnV0ZVRvUHJvcGVydHlNYXA6OnN5
bmNocm9uaXplUHJvcGVydGllcyhTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudAogICAgIEFTU0VS
VChjb250ZXh0RWxlbWVudCk7CiAgICAgQXR0cmlidXRlVG9Qcm9wZXJ0aWVzTWFwOjppdGVyYXRv
ciBlbmQgPSBtX21hcC5lbmQoKTsKICAgICBmb3IgKEF0dHJpYnV0ZVRvUHJvcGVydGllc01hcDo6
aXRlcmF0b3IgaXQgPSBtX21hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAg
UHJvcGVydGllc1ZlY3RvciogdmVjdG9yID0gaXQtPnNlY29uZDsKKyAgICAgICAgUHJvcGVydGll
c1ZlY3RvciogdmVjdG9yID0gaXQtPnZhbHVlOwogICAgICAgICBBU1NFUlQodmVjdG9yKTsKIAog
ICAgICAgICBQcm9wZXJ0aWVzVmVjdG9yOjppdGVyYXRvciB2ZWN0b3JFbmQgPSB2ZWN0b3ItPmVu
ZCgpOwogICAgICAgICBmb3IgKFByb3BlcnRpZXNWZWN0b3I6Oml0ZXJhdG9yIHZlY3Rvckl0ID0g
dmVjdG9yLT5iZWdpbigpOyB2ZWN0b3JJdCAhPSB2ZWN0b3JFbmQ7ICsrdmVjdG9ySXQpCi0gICAg
ICAgICAgICBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnRleHRFbGVtZW50LCBpdC0+Zmlyc3QsICp2
ZWN0b3JJdCk7CisgICAgICAgICAgICBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnRleHRFbGVtZW50
LCBpdC0+a2V5LCAqdmVjdG9ySXQpOwogICAgIH0gCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJz
L1dvcmtlckNvbnRleHQuY3BwCmluZGV4IGIxMGMxNDcwZWQ0OGViOGI4MGY4ZmM5YTJlNTc5NjE5
ZjE5ZGRkY2MuLjBlZWFlM2Y4ODA3ZWQ4ZjdkYTlmNjVmMTkxOWRjODU5OWRjMWNhNTAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcApAQCAtMTc4LDcgKzE3OCw3IEBA
IGJvb2wgV29ya2VyQ29udGV4dDo6aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QKICAgICBBY3Rp
dmVET01PYmplY3RzTWFwJiBhY3RpdmVPYmplY3RzID0gYWN0aXZlRE9NT2JqZWN0cygpOwogICAg
IEFjdGl2ZURPTU9iamVjdHNNYXA6OmNvbnN0X2l0ZXJhdG9yIGFjdGl2ZU9iamVjdHNFbmQgPSBh
Y3RpdmVPYmplY3RzLmVuZCgpOwogICAgIGZvciAoQWN0aXZlRE9NT2JqZWN0c01hcDo6Y29uc3Rf
aXRlcmF0b3IgaXRlciA9IGFjdGl2ZU9iamVjdHMuYmVnaW4oKTsgaXRlciAhPSBhY3RpdmVPYmpl
Y3RzRW5kOyArK2l0ZXIpIHsKLSAgICAgICAgaWYgKGl0ZXItPmZpcnN0LT5oYXNQZW5kaW5nQWN0
aXZpdHkoKSkKKyAgICAgICAgaWYgKGl0ZXItPmtleS0+aGFzUGVuZGluZ0FjdGl2aXR5KCkpCiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3dvcmtlcnMvV29ya2VyRXZlbnRRdWV1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJz
L1dvcmtlckV2ZW50UXVldWUuY3BwCmluZGV4IGY1MWQyZGM1M2IzOGY3NWRmYTk3NzRhNzFiZTNi
YTBlMTQwY2Q5OWIuLmEwZWI3NjEzNjVjM2YxZWYzOGJlZTc0OWUyZjIxNGY4NGFhMDUzMWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyRXZlbnRRdWV1ZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJFdmVudFF1ZXVlLmNwcApAQCAtMTIwLDcg
KzEyMCw3IEBAIHZvaWQgV29ya2VyRXZlbnRRdWV1ZTo6Y2xvc2UoKQogewogICAgIG1faXNDbG9z
ZWQgPSB0cnVlOwogICAgIGZvciAoRXZlbnRUYXNrTWFwOjppdGVyYXRvciBpdCA9IG1fZXZlbnRU
YXNrTWFwLmJlZ2luKCk7IGl0ICE9IG1fZXZlbnRUYXNrTWFwLmVuZCgpOyArK2l0KSB7Ci0gICAg
ICAgIEV2ZW50RGlzcGF0Y2hlclRhc2sqIHRhc2sgPSBpdC0+c2Vjb25kOworICAgICAgICBFdmVu
dERpc3BhdGNoZXJUYXNrKiB0YXNrID0gaXQtPnZhbHVlOwogICAgICAgICB0YXNrLT5jYW5jZWwo
KTsKICAgICB9CiAgICAgbV9ldmVudFRhc2tNYXAuY2xlYXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1M
SHR0cFJlcXVlc3QuY3BwCmluZGV4IGE3MWM0NDU1NTM4N2Y1ZmY4Njg0NDM1Mjk4NzQyNDQ0MmM2
ODg1MDEuLjk5NjdiMjJhZTk2ZTJiMWRiNzliMmUyN2IzYTA3MGI3MzQwMWJlYTggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcApAQCAtOTAxLDcgKzkwMSw3IEBAIHZvaWQgWE1M
SHR0cFJlcXVlc3Q6OnNldFJlcXVlc3RIZWFkZXJJbnRlcm5hbChjb25zdCBBdG9taWNTdHJpbmcm
IG5hbWUsIGNvbnN0IFN0CiB7CiAgICAgSFRUUEhlYWRlck1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9
IG1fcmVxdWVzdEhlYWRlcnMuYWRkKG5hbWUsIHZhbHVlKTsKICAgICBpZiAoIXJlc3VsdC5pc05l
d0VudHJ5KQotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCArPSAiLCAiICsgdmFsdWU7
CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgKz0gIiwgIiArIHZhbHVlOwogfQogCiBT
dHJpbmcgWE1MSHR0cFJlcXVlc3Q6OmdldFJlcXVlc3RIZWFkZXIoY29uc3QgQXRvbWljU3RyaW5n
JiBuYW1lKSBjb25zdApAQCAtOTI4LDE2ICs5MjgsMTYgQEAgU3RyaW5nIFhNTEh0dHBSZXF1ZXN0
OjpnZXRBbGxSZXNwb25zZUhlYWRlcnMoRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiAgICAgICAg
IC8vICAgICAyKSBUaGVyZSdzIG5vIGtub3duIGhhcm0gaW4gaGlkaW5nIFNldC1Db29raWUgaGVh
ZGVyIGZpZWxkcyBlbnRpcmVseTsgd2UgZG9uJ3QKICAgICAgICAgLy8gICAgICAgIGtub3cgYW55
IHdpZGVseSB1c2VkIHRlY2huaXF1ZSB0aGF0IHJlcXVpcmVzIGFjY2VzcyB0byB0aGVtLgogICAg
ICAgICAvLyAgICAgMykgRmlyZWZveCBoYXMgaW1wbGVtZW50ZWQgdGhpcyBwb2xpY3kuCi0gICAg
ICAgIGlmIChpc1NldENvb2tpZUhlYWRlcihpdC0+Zmlyc3QpICYmICFzZWN1cml0eU9yaWdpbigp
LT5jYW5Mb2FkTG9jYWxSZXNvdXJjZXMoKSkKKyAgICAgICAgaWYgKGlzU2V0Q29va2llSGVhZGVy
KGl0LT5rZXkpICYmICFzZWN1cml0eU9yaWdpbigpLT5jYW5Mb2FkTG9jYWxSZXNvdXJjZXMoKSkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGlmICghbV9zYW1lT3JpZ2luUmVxdWVz
dCAmJiAhaXNPbkFjY2Vzc0NvbnRyb2xSZXNwb25zZUhlYWRlcldoaXRlbGlzdChpdC0+Zmlyc3Qp
ICYmICFhY2Nlc3NDb250cm9sRXhwb3NlSGVhZGVyU2V0LmNvbnRhaW5zKGl0LT5maXJzdCkpCisg
ICAgICAgIGlmICghbV9zYW1lT3JpZ2luUmVxdWVzdCAmJiAhaXNPbkFjY2Vzc0NvbnRyb2xSZXNw
b25zZUhlYWRlcldoaXRlbGlzdChpdC0+a2V5KSAmJiAhYWNjZXNzQ29udHJvbEV4cG9zZUhlYWRl
clNldC5jb250YWlucyhpdC0+a2V5KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5maXJzdCk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKGl0LT5rZXkpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnOicpOwogICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnICcpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZChpdC0+c2Vjb25kKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPnZhbHVl
KTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xyJyk7CiAgICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKCdcbicpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3ht
bC9YUGF0aEZ1bmN0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhGdW5jdGlvbnMu
Y3BwCmluZGV4IDcwN2NjN2ZjZTJjNzM2MThlODI5ODZkZDZiOTZjNWZlZjczOThlY2IuLmVjYjlm
Zjk4MTI5M2M5MzRlNmE2MmNiYmM2ZjA5ODYzYmRmYjhiNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3htbC9YUGF0aEZ1bmN0aW9ucy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hQ
YXRoRnVuY3Rpb25zLmNwcApAQCAtNzIzLDcgKzcyMyw3IEBAIEZ1bmN0aW9uKiBjcmVhdGVGdW5j
dGlvbihjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uKj4mIGFyZ3Mp
CiAgICAgSGFzaE1hcDxTdHJpbmcsIEZ1bmN0aW9uUmVjPjo6aXRlcmF0b3IgZnVuY3Rpb25NYXBJ
dGVyID0gZnVuY3Rpb25NYXAtPmZpbmQobmFtZSk7CiAgICAgRnVuY3Rpb25SZWMqIGZ1bmN0aW9u
UmVjID0gMDsKIAotICAgIGlmIChmdW5jdGlvbk1hcEl0ZXIgPT0gZnVuY3Rpb25NYXAtPmVuZCgp
IHx8ICEoZnVuY3Rpb25SZWMgPSAmZnVuY3Rpb25NYXBJdGVyLT5zZWNvbmQpLT5hcmdzLmNvbnRh
aW5zKGFyZ3Muc2l6ZSgpKSkKKyAgICBpZiAoZnVuY3Rpb25NYXBJdGVyID09IGZ1bmN0aW9uTWFw
LT5lbmQoKSB8fCAhKGZ1bmN0aW9uUmVjID0gJmZ1bmN0aW9uTWFwSXRlci0+dmFsdWUpLT5hcmdz
LmNvbnRhaW5zKGFyZ3Muc2l6ZSgpKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBGdW5jdGlv
biogZnVuY3Rpb24gPSBmdW5jdGlvblJlYy0+ZmFjdG9yeUZuKCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS94bWwvWFBhdGhQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUveG1sL1hQYXRo
UGFyc2VyLmNwcAppbmRleCA2MmQ4ZWUzN2ZkNmViYjc0YTU4MGEwMGM1OWJlYjZjZDQwYzVhOGI3
Li4xMDk4ZTU0YTIyOTA3NzlmMWUwOGU5ODAyMTAxMzAzN2U2NmRhODlmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS94bWwvWFBhdGhQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3ht
bC9YUGF0aFBhcnNlci5jcHAKQEAgLTEwNiw3ICsxMDYsNyBAQCBzdGF0aWMgYm9vbCBpc0F4aXNO
YW1lKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RlcDo6QXhpcyYgdHlwZSkKICAgICBBeGlzTmFtZXNN
YXA6Oml0ZXJhdG9yIGl0ID0gYXhpc05hbWVzLmZpbmQobmFtZSk7CiAgICAgaWYgKGl0ID09IGF4
aXNOYW1lcy5lbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHR5cGUgPSBpdC0+c2Vj
b25kOworICAgIHR5cGUgPSBpdC0+dmFsdWU7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yTGlieHNsdC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwCmluZGV4IDA3NmE4NTJkMDZk
ODM3MTAzNzYyMjY0NWIwMTE5NDUyZWNiZTI0ZDQuLjllYTJhYTcyMTA1Y2Y3YTgwNDkzNmQzMDcx
MjQ5ODhmNGM0MjFlNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vz
c29yTGlieHNsdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JMaWJ4
c2x0LmNwcApAQCAtMjI1LDggKzIyNSw4IEBAIHN0YXRpYyBjb25zdCBjaGFyKiogeHNsdFBhcmFt
QXJyYXlGcm9tUGFyYW1ldGVyTWFwKFhTTFRQcm9jZXNzb3I6OlBhcmFtZXRlck1hcCYKICAgICBY
U0xUUHJvY2Vzc29yOjpQYXJhbWV0ZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IHBhcmFtZXRlcnMuZW5k
KCk7CiAgICAgdW5zaWduZWQgaW5kZXggPSAwOwogICAgIGZvciAoWFNMVFByb2Nlc3Nvcjo6UGFy
YW1ldGVyTWFwOjppdGVyYXRvciBpdCA9IHBhcmFtZXRlcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7Ci0gICAgICAgIHBhcmFtZXRlckFycmF5W2luZGV4KytdID0gZmFzdFN0ckR1cChpdC0+
Zmlyc3QudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIHBhcmFtZXRlckFycmF5W2luZGV4KytdID0g
ZmFzdFN0ckR1cChpdC0+c2Vjb25kLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBwYXJhbWV0ZXJB
cnJheVtpbmRleCsrXSA9IGZhc3RTdHJEdXAoaXQtPmtleS51dGY4KCkuZGF0YSgpKTsKKyAgICAg
ICAgcGFyYW1ldGVyQXJyYXlbaW5kZXgrK10gPSBmYXN0U3RyRHVwKGl0LT52YWx1ZS51dGY4KCku
ZGF0YSgpKTsKICAgICB9CiAgICAgcGFyYW1ldGVyQXJyYXlbaW5kZXhdID0gMDsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JRdC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS94bWwvWFNMVFByb2Nlc3NvclF0LmNwcAppbmRleCBjMGFiNGQ2OTMxN2Q1YzMxYzM2Y2I0
YWEwM2RiZTcwNmMxNTNhOTk4Li5hNGM5ZDc0Y2QyYWE1YWU1YjdkM2M3OWZmMTU4MGQxNjNmNTcw
OGY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvclF0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvclF0LmNwcApAQCAtMTQzLDcgKzE0
Myw3IEBAIGJvb2wgWFNMVFByb2Nlc3Nvcjo6dHJhbnNmb3JtVG9TdHJpbmcoTm9kZSogc291cmNl
Tm9kZSwgU3RyaW5nJiwgU3RyaW5nJiByZXN1bHRTCiAKICAgICBYU0xUUHJvY2Vzc29yOjpQYXJh
bWV0ZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fcGFyYW1ldGVycy5lbmQoKTsKICAgICBmb3IgKFhT
TFRQcm9jZXNzb3I6OlBhcmFtZXRlck1hcDo6aXRlcmF0b3IgaXQgPSBtX3BhcmFtZXRlcnMuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBxdWVyeS5iaW5kVmFyaWFibGUoUVN0cmlu
ZyhpdC0+Zmlyc3QpLCBRWG1sSXRlbShRVmFyaWFudChRU3RyaW5nKGl0LT5zZWNvbmQpKSkpOwor
ICAgICAgICBxdWVyeS5iaW5kVmFyaWFibGUoUVN0cmluZyhpdC0+a2V5KSwgUVhtbEl0ZW0oUVZh
cmlhbnQoUVN0cmluZyhpdC0+dmFsdWUpKSkpOwogCiAgICAgUVN0cmluZyBzb3VyY2U7CiAgICAg
aWYgKHNvdXJjZUlzRG9jdW1lbnQgJiYgb3duZXJEb2N1bWVudC0+dHJhbnNmb3JtU291cmNlKCkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL0JhY2tpbmdTdG9yZS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL0JhY2tpbmdTdG9yZS5jcHAKaW5kZXgg
ZGUzMjFiODVjN2M4OTY1ZTBjZmUyYzBkNGY1Njc1ZmI0NDBlOTA4OS4uYTBmOGFhYWI2MTE3ODMy
MDYyNDg3NTJlNzE1ZjM0MDYxNWYyZDljMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ibGFj
a2JlcnJ5L0FwaS9CYWNraW5nU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJy
eS9BcGkvQmFja2luZ1N0b3JlLmNwcApAQCAtNzIzLDggKzcyMyw4IEBAIHZvaWQgQmFja2luZ1N0
b3JlUHJpdmF0ZTo6c2V0QmFja2luZ1N0b3JlUmVjdChjb25zdCBQbGF0Zm9ybTo6SW50UmVjdCYg
YmFja2luZ1N0CiAgICAgLy8gb3VyIG5ldyBiYWNraW5nIHN0b3JlIHJlY3QuCiAgICAgVGlsZU1h
cDo6Y29uc3RfaXRlcmF0b3IgdGlsZU1hcEVuZCA9IGN1cnJlbnRNYXAuZW5kKCk7CiAgICAgZm9y
IChUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGN1cnJlbnRNYXAuYmVnaW4oKTsgaXQgIT0g
dGlsZU1hcEVuZDsgKytpdCkgewotICAgICAgICBUaWxlSW5kZXggb2xkSW5kZXggPSBpdC0+Zmly
c3Q7Ci0gICAgICAgIEJhY2tpbmdTdG9yZVRpbGUqIHRpbGUgPSBpdC0+c2Vjb25kOworICAgICAg
ICBUaWxlSW5kZXggb2xkSW5kZXggPSBpdC0+a2V5OworICAgICAgICBCYWNraW5nU3RvcmVUaWxl
KiB0aWxlID0gaXQtPnZhbHVlOwogCiAgICAgICAgIC8vIFJlc2V0IHRoZSBvbGQgaW5kZXguCiAg
ICAgICAgIHJlc2V0VGlsZShvbGRJbmRleCwgdGlsZSwgZmFsc2UgLypyZXNldEJhY2tncm91bmQq
Lyk7CkBAIC03ODAsOCArNzgwLDggQEAgdm9pZCBCYWNraW5nU3RvcmVQcml2YXRlOjpzZXRCYWNr
aW5nU3RvcmVSZWN0KGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0JiBiYWNraW5nU3QKICAgICBzaXpl
X3QgaSA9IDA7CiAgICAgVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgbGVmdE92ZXJFbmQgPSBsZWZ0
T3ZlclRpbGVzLmVuZCgpOwogICAgIGZvciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBs
ZWZ0T3ZlclRpbGVzLmJlZ2luKCk7IGl0ICE9IGxlZnRPdmVyRW5kOyArK2l0KSB7Ci0gICAgICAg
IFRpbGVJbmRleCBvbGRJbmRleCA9IGl0LT5maXJzdDsKLSAgICAgICAgQmFja2luZ1N0b3JlVGls
ZSogdGlsZSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFRpbGVJbmRleCBvbGRJbmRleCA9IGl0LT5r
ZXk7CisgICAgICAgIEJhY2tpbmdTdG9yZVRpbGUqIHRpbGUgPSBpdC0+dmFsdWU7CiAgICAgICAg
IGlmIChpID49IGluZGV4ZXNUb0ZpbGwuc2l6ZSgpKSB7CiAgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTY2Nyw3ICsxNjY3LDcgQEAgUGxh
dGZvcm06OkludFJlY3QgQmFja2luZ1N0b3JlUHJpdmF0ZTo6dmlzaWJsZVRpbGVzUmVjdCgpIGNv
bnN0CiAgICAgVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY3VycmVudE1hcC5lbmQoKTsK
ICAgICBmb3IgKFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY3VycmVudE1hcC5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgVGlsZVJlY3QgdGlsZVJlY3Q7Ci0gICAgICAg
IHRpbGVSZWN0LmZpcnN0ID0gaXQtPmZpcnN0OworICAgICAgICB0aWxlUmVjdC5maXJzdCA9IGl0
LT5rZXk7CiAgICAgICAgIHRpbGVSZWN0LnNlY29uZCA9IHRoaXMtPnRpbGVSZWN0KCk7CiAgICAg
ICAgIFBsYXRmb3JtOjpJbnRSZWN0IHRpbGUgPSBtYXBGcm9tVGlsZXNUb1RyYW5zZm9ybWVkQ29u
dGVudHModGlsZVJlY3QpOwogICAgICAgICBpZiAodGlsZS5pbnRlcnNlY3RzKHZpc2libGVDb250
ZW50c1JlY3QoKSkpCkBAIC0xNzI4LDcgKzE3MjgsNyBAQCB2b2lkIEJhY2tpbmdTdG9yZVByaXZh
dGU6OnJlc2V0VGlsZXMoYm9vbCByZXNldEJhY2tncm91bmQpCiAKICAgICBUaWxlTWFwOjpjb25z
dF9pdGVyYXRvciBlbmQgPSBjdXJyZW50TWFwLmVuZCgpOwogICAgIGZvciAoVGlsZU1hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBjdXJyZW50TWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAg
ICAgICAgcmVzZXRUaWxlKGl0LT5maXJzdCwgaXQtPnNlY29uZCwgcmVzZXRCYWNrZ3JvdW5kKTsK
KyAgICAgICAgcmVzZXRUaWxlKGl0LT5rZXksIGl0LT52YWx1ZSwgcmVzZXRCYWNrZ3JvdW5kKTsK
IH0KIAogdm9pZCBCYWNraW5nU3RvcmVQcml2YXRlOjp1cGRhdGVUaWxlcyhib29sIHVwZGF0ZVZp
c2libGUsIGJvb2wgaW1tZWRpYXRlKQpAQCAtMTc0MSwxMCArMTc0MSwxMCBAQCB2b2lkIEJhY2tp
bmdTdG9yZVByaXZhdGU6OnVwZGF0ZVRpbGVzKGJvb2wgdXBkYXRlVmlzaWJsZSwgYm9vbCBpbW1l
ZGlhdGUpCiAKICAgICBUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBjdXJyZW50TWFwLmVu
ZCgpOwogICAgIGZvciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjdXJyZW50TWFwLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBib29sIGlzVmlzaWJsZSA9IGlzVGls
ZVZpc2libGUoaXQtPmZpcnN0KTsKKyAgICAgICAgYm9vbCBpc1Zpc2libGUgPSBpc1RpbGVWaXNp
YmxlKGl0LT5rZXkpOwogICAgICAgICBpZiAoIXVwZGF0ZVZpc2libGUgJiYgaXNWaXNpYmxlKQog
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHVwZGF0ZVRpbGUoaXQtPmZpcnN0LCBpbW1l
ZGlhdGUpOworICAgICAgICB1cGRhdGVUaWxlKGl0LT5rZXksIGltbWVkaWF0ZSk7CiAgICAgfQog
fQogCkBAIC0xNzY1LDggKzE3NjUsOCBAQCB2b2lkIEJhY2tpbmdTdG9yZVByaXZhdGU6OnVwZGF0
ZVRpbGVzRm9yU2Nyb2xsT3JOb3RSZW5kZXJlZFJlZ2lvbihib29sIGNoZWNrTG9hZAogCiAgICAg
VGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY3VycmVudE1hcC5lbmQoKTsKICAgICBmb3Ig
KFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY3VycmVudE1hcC5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKLSAgICAgICAgVGlsZUluZGV4IGluZGV4ID0gaXQtPmZpcnN0OwotICAgICAg
ICBCYWNraW5nU3RvcmVUaWxlKiB0aWxlID0gaXQtPnNlY29uZDsKKyAgICAgICAgVGlsZUluZGV4
IGluZGV4ID0gaXQtPmtleTsKKyAgICAgICAgQmFja2luZ1N0b3JlVGlsZSogdGlsZSA9IGl0LT52
YWx1ZTsKICAgICAgICAgYm9vbCBpc1Zpc2libGUgPSBpc1RpbGVWaXNpYmxlKGluZGV4KTsKICAg
ICAgICAgLy8gVGhlIHJlY3QgaW4gdHJhbnNmb3JtZWQgY29udGVudHMgY29vcmRpbmF0ZXMuCiAg
ICAgICAgIFBsYXRmb3JtOjpJbnRSZWN0IHJlY3Qob3JpZ2luT2ZUaWxlKGluZGV4KSwgdGlsZVNp
emUoKSk7CkBAIC0xOTA5LDggKzE5MDksOCBAQCBCYWNraW5nU3RvcmVQcml2YXRlOjpUaWxlUmVj
dExpc3QgQmFja2luZ1N0b3JlUHJpdmF0ZTo6bWFwRnJvbVRyYW5zZm9ybWVkQ29udGVudAogICAg
IFRpbGVSZWN0TGlzdCB0aWxlUmVjdExpc3Q7CiAgICAgVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gdGlsZU1hcC5lbmQoKTsKICAgICBmb3IgKFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gdGlsZU1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgVGlsZUluZGV4
IGluZGV4ID0gaXQtPmZpcnN0OwotICAgICAgICBCYWNraW5nU3RvcmVUaWxlKiB0aWxlID0gaXQt
PnNlY29uZDsKKyAgICAgICAgVGlsZUluZGV4IGluZGV4ID0gaXQtPmtleTsKKyAgICAgICAgQmFj
a2luZ1N0b3JlVGlsZSogdGlsZSA9IGl0LT52YWx1ZTsKIAogICAgICAgICAvLyBOZWVkIHRvIG1h
cCB0aGUgcmVjdCB0byB0aWxlIGNvb3JkaW5hdGVzLgogICAgICAgICBQbGF0Zm9ybTo6SW50UmVj
dCByID0gcmVjdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3Jl
U3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnkuY3BwIGIvU291cmNlL1dlYktpdC9i
bGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50QmxhY2tCZXJyeS5jcHAK
aW5kZXggNjQ1Zjk1MTVjOTExNzEyNjJiMzZiNmI3MGEzNmM5NTg1YzNmNGZlNy4uZjJlYTg2YTZj
NWU0MGRmN2ExODY3NmNiYzcwZDA2MWQ2Njk1OWQ1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50QmxhY2tCZXJyeS5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9h
ZGVyQ2xpZW50QmxhY2tCZXJyeS5jcHAKQEAgLTkzNyw4ICs5MzcsOCBAQCB2b2lkIEZyYW1lTG9h
ZGVyQ2xpZW50QmxhY2tCZXJyeTo6ZGlzcGF0Y2hXaWxsU2VuZFJlcXVlc3QoRG9jdW1lbnRMb2Fk
ZXIqIGRvY0xvYQogICAgIG1fd2ViUGFnZVByaXZhdGUtPm1fY2xpZW50LT5wb3B1bGF0ZUN1c3Rv
bUhlYWRlcnMocGxhdGZvcm1SZXF1ZXN0KTsKICAgICBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9y
bTo6TmV0d29ya1JlcXVlc3Q6OkhlYWRlckxpc3QmIGhlYWRlckxpc3RzID0gcGxhdGZvcm1SZXF1
ZXN0LmdldEhlYWRlckxpc3RSZWYoKTsKICAgICBmb3IgKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpO
ZXR3b3JrUmVxdWVzdDo6SGVhZGVyTGlzdDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBoZWFkZXJMaXN0
cy5iZWdpbigpOyBpdCAhPSBoZWFkZXJMaXN0cy5lbmQoKTsgKytpdCkgewotICAgICAgICBzdGQ6
OnN0cmluZyBoZWFkZXJTdHJpbmcgPSBpdC0+Zmlyc3Q7Ci0gICAgICAgIHN0ZDo6c3RyaW5nIGhl
YWRlclZhbHVlU3RyaW5nID0gaXQtPnNlY29uZDsKKyAgICAgICAgc3RkOjpzdHJpbmcgaGVhZGVy
U3RyaW5nID0gaXQtPmtleTsKKyAgICAgICAgc3RkOjpzdHJpbmcgaGVhZGVyVmFsdWVTdHJpbmcg
PSBpdC0+dmFsdWU7CiAgICAgICAgIHJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKFN0cmluZzo6
ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2soaGVhZGVyU3RyaW5nLmRhdGEoKSwgaGVhZGVyU3Ry
aW5nLmxlbmd0aCgpKSwgU3RyaW5nOjpmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayhoZWFkZXJW
YWx1ZVN0cmluZy5kYXRhKCksIGhlYWRlclZhbHVlU3RyaW5nLmxlbmd0aCgpKSk7CiAgICAgfQog
ICAgIGlmICghaXNNYWluUmVzb3VyY2VMb2FkKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uUHJl
c2VudGVySW1wbC5jcHAKaW5kZXggNmIyOTIxMDI5NDYyNzdkYTI4ZTc5OGQ3ZWVkZjhiOTM5YzUz
MTljNy4uNDhjY2YzYWM1MWFiZGUzNjVhYjAyNzU5ZDFkYWRjNDE2ZmMwMGY1NyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblBy
ZXNlbnRlckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3Vw
cG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmNwcApAQCAtODEsNyArODEsNyBAQCB2b2lk
IE5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6OmNhbmNlbChOb3RpZmljYXRpb24qIG5vdGlmaWNh
dGlvbikKICAgICBpZiAoaXQgPT0gbV9ub3RpZmljYXRpb25zLmVuZCgpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBtX3BsYXRmb3JtUHJlc2VudGVyLT5jYW5jZWwoc3RkOjpzdHJpbmcoaXQtPnNl
Y29uZC51dGY4KCkuZGF0YSgpKSk7CisgICAgbV9wbGF0Zm9ybVByZXNlbnRlci0+Y2FuY2VsKHN0
ZDo6c3RyaW5nKGl0LT52YWx1ZS51dGY4KCkuZGF0YSgpKSk7CiAgICAgbV9ub3RpZmljYXRpb25z
LnJlbW92ZShpdCk7CiB9CiAKQEAgLTEwOCwxMiArMTA4LDEyIEBAIHZvaWQgTm90aWZpY2F0aW9u
UHJlc2VudGVySW1wbDo6b25QZXJtaXNzaW9uKGNvbnN0IHN0ZDo6c3RyaW5nJiBkb21haW4sIGJv
b2wgaXNBCiAgICAgU3RyaW5nIGRvbWFpblN0cmluZyA9IFN0cmluZzo6ZnJvbVVURjgoZG9tYWlu
LmNfc3RyKCkpOwogICAgIFBlcm1pc3Npb25SZXF1ZXN0TWFwOjppdGVyYXRvciBpdCA9IG1fcGVy
bWlzc2lvblJlcXVlc3RzLmJlZ2luKCk7CiAgICAgZm9yICg7IGl0ICE9IG1fcGVybWlzc2lvblJl
cXVlc3RzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+Zmlyc3QtPnVybCgpLmhvc3Qo
KSAhPSBkb21haW5TdHJpbmcpCisgICAgICAgIGlmIChpdC0+a2V5LT51cmwoKS5ob3N0KCkgIT0g
ZG9tYWluU3RyaW5nKQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgaWYgKGlzQWxs
b3dlZCkgewogICAgICAgICAgICAgbV9hbGxvd2VkRG9tYWlucy5hZGQoZG9tYWluU3RyaW5nKTsK
LSAgICAgICAgICAgIGl0LT5zZWNvbmQtPmhhbmRsZUV2ZW50KCk7CisgICAgICAgICAgICBpdC0+
dmFsdWUtPmhhbmRsZUV2ZW50KCk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbV9hbGxv
d2VkRG9tYWlucy5yZW1vdmUoZG9tYWluU3RyaW5nKTsKIApAQCAtMTQ0LDkgKzE0NCw5IEBAIHZv
aWQgTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6bm90aWZpY2F0aW9uQ2xpY2tlZChjb25zdCBz
dGQ6OnN0cmluZyYgaWQpCiAgICAgU3RyaW5nIGlkU3RyaW5nID0gU3RyaW5nOjpmcm9tVVRGOChp
ZC5jX3N0cigpKTsKICAgICBOb3RpZmljYXRpb25NYXA6Oml0ZXJhdG9yIGl0ID0gbV9ub3RpZmlj
YXRpb25zLmJlZ2luKCk7CiAgICAgZm9yICg7IGl0ICE9IG1fbm90aWZpY2F0aW9ucy5lbmQoKTsg
KytpdCkgewotICAgICAgICBpZiAoaXQtPnNlY29uZCA9PSBpZFN0cmluZyAmJiBpdC0+Zmlyc3Qt
PnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkgewotICAgICAgICAgICAgUmVmUHRyPE5vdGlmaWNh
dGlvbj4gbm90aWZpY2F0aW9uID0gaXQtPmZpcnN0OwotICAgICAgICAgICAgaXQtPmZpcnN0LT5k
aXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmNsaWNrRXZlbnQsIGZhbHNl
LCB0cnVlKSk7CisgICAgICAgIGlmIChpdC0+dmFsdWUgPT0gaWRTdHJpbmcgJiYgaXQtPmtleS0+
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSB7CisgICAgICAgICAgICBSZWZQdHI8Tm90aWZpY2F0
aW9uPiBub3RpZmljYXRpb24gPSBpdC0+a2V5OworICAgICAgICAgICAgaXQtPmtleS0+ZGlzcGF0
Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50LCBmYWxzZSwgdHJ1
ZSkpOwogICAgICAgICAgICAgbV9ub3RpZmljYXRpb25zLnJlbW92ZShub3RpZmljYXRpb24pOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9GYXRGaW5nZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQv
YmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0ZhdEZpbmdlcnMuY3BwCmluZGV4IGI0OWUyNDg1Y2Q3
MzE5NGNjMGQ1ZjVjZDg5ZGYzODAzMDg3ZGU0NzYuLmU4MmMwMjZhNzllYWU3N2Q0NzZlODJhMGY3
MzhhMTZjOWFlODg0ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJL
aXRTdXBwb3J0L0ZhdEZpbmdlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9X
ZWJLaXRTdXBwb3J0L0ZhdEZpbmdlcnMuY3BwCkBAIC0yMjksOCArMjI5LDggQEAgY29uc3QgRmF0
RmluZ2Vyc1Jlc3VsdCBGYXRGaW5nZXJzOjpmaW5kQmVzdFBvaW50KCkKIAogICAgIFZlY3RvcjxJ
bnRlcnNlY3RpbmdSZWdpb24+Ojpjb25zdF9pdGVyYXRvciBlbmRJdCA9IGludGVyc2VjdGluZ1Jl
Z2lvbnMuZW5kKCk7CiAgICAgZm9yIChWZWN0b3I8SW50ZXJzZWN0aW5nUmVnaW9uPjo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBpbnRlcnNlY3RpbmdSZWdpb25zLmJlZ2luKCk7IGl0ICE9IGVuZEl0OyAr
K2l0KSB7Ci0gICAgICAgIE5vZGUqIGN1cnJlbnROb2RlID0gaXQtPmZpcnN0OwotICAgICAgICBQ
bGF0Zm9ybTo6SW50UmVjdFJlZ2lvbiBjdXJyZW50SW50ZXJzZWN0aW9uUmVnaW9uID0gaXQtPnNl
Y29uZDsKKyAgICAgICAgTm9kZSogY3VycmVudE5vZGUgPSBpdC0+a2V5OworICAgICAgICBQbGF0
Zm9ybTo6SW50UmVjdFJlZ2lvbiBjdXJyZW50SW50ZXJzZWN0aW9uUmVnaW9uID0gaXQtPnZhbHVl
OwogCiAgICAgICAgIGludCBjdXJyZW50SW50ZXJzZWN0aW9uUmVnaW9uQXJlYSA9IGN1cnJlbnRJ
bnRlcnNlY3Rpb25SZWdpb24uYXJlYSgpOwogICAgICAgICBpZiAoY3VycmVudEludGVyc2VjdGlv
blJlZ2lvbkFyZWEgPiBsYXJnZXN0SW50ZXJzZWN0aW9uUmVnaW9uQXJlYQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvRnJhbWVMYXllcnMuY3BwIGIv
U291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvRnJhbWVMYXllcnMuY3BwCmlu
ZGV4IGI4NzU2NDZkYTRmOWFjOTYyZGMzMjkwYTQ2Mjk3MWUyNmJjZDQ0OTEuLjg3ZDdiNWIwYjM4
YmI2MGE5ZGZmODcxMWNkN2ViMzM5NGQ5YjUwNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
YmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0ZyYW1lTGF5ZXJzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9GcmFtZUxheWVycy5jcHAKQEAgLTkxLDcgKzkx
LDcgQEAgdm9pZCBGcmFtZUxheWVyczo6cmVtb3ZlTGF5ZXJCeUZyYW1lKEZyYW1lKiBmcmFtZSkK
ICAgICBBU1NFUlQoZnJhbWUpOwogICAgIEZyYW1lTGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9m
cmFtZUxheWVycy5maW5kKGZyYW1lKTsKICAgICBpZiAoaXQgIT0gbV9mcmFtZUxheWVycy5lbmQo
KSkgewotICAgICAgICBMYXllcldlYktpdFRocmVhZCogbGF5ZXIgPSBpdC0+c2Vjb25kOworICAg
ICAgICBMYXllcldlYktpdFRocmVhZCogbGF5ZXIgPSBpdC0+dmFsdWU7CiAgICAgICAgIGlmIChs
YXllci0+c3VwZXJsYXllcigpKQogICAgICAgICAgICAgbGF5ZXItPnJlbW92ZUZyb21TdXBlcmxh
eWVyKCk7CiAgICAgICAgIG1fZnJhbWVMYXllcnMucmVtb3ZlKGl0KTsKQEAgLTEwNCw3ICsxMDQs
NyBAQCB2b2lkIEZyYW1lTGF5ZXJzOjpjb21taXRPbldlYktpdFRocmVhZChkb3VibGUgc2NhbGUp
CiAgICAgQVNTRVJUKG1fcm9vdExheWVyKTsKICAgICBpZiAoIWlzUm9vdExheWVyTWFpbkZyYW1l
TGF5ZXIoKSkgewogICAgICAgICBmb3IgKEZyYW1lTGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9m
cmFtZUxheWVycy5iZWdpbigpOyBpdCAhPSBtX2ZyYW1lTGF5ZXJzLmVuZCgpOyArK2l0KQotICAg
ICAgICAgICAgaXQtPnNlY29uZC0+c2V0QWJzb2x1dGVPZmZzZXQoZnJhbWVMYXllckFic29sdXRl
T2Zmc2V0KGl0LT5maXJzdCkpOworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRBYnNvbHV0ZU9m
ZnNldChmcmFtZUxheWVyQWJzb2x1dGVPZmZzZXQoaXQtPmtleSkpOwogICAgIH0KICAgICBtX3Jv
b3RMYXllci0+Y29tbWl0T25XZWJLaXRUaHJlYWQoc2NhbGUpOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1h
bmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViR2VvbG9jYXRpb25QZXJt
aXNzaW9uUmVxdWVzdE1hbmFnZXIuY3BwCmluZGV4IDRjMGVkOWNkNzE3YjZmNGQ1YWE2YWZhZjk3
MGJlYjY5Njc5Njg5ZDMuLjFlZWFjNjY3YmRmNjZiM2YxOTNmYjMzNWEzODcxMjhmYmM5MTI2NzQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdlb2xvY2F0aW9uUGVy
bWlzc2lvblJlcXVlc3RNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5jcHAKQEAgLTY0LDcgKzY0
LDcgQEAgYm9vbCBXZWJHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlcjo6cmVtb3Zl
KGNvbnN0IFdlYktpdDo6V2ViR2VvbG9jYXRpb24KICAgICBHZW9sb2NhdGlvbklkTWFwOjppdGVy
YXRvciBpdCA9IG1fcHJpdmF0ZS0+bV9nZW9sb2NhdGlvbklkTWFwLmZpbmQoZ2VvbG9jYXRpb24p
OwogICAgIGlmIChpdCA9PSBtX3ByaXZhdGUtPm1fZ2VvbG9jYXRpb25JZE1hcC5lbmQoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlkID0gaXQtPnNlY29uZDsKKyAgICBpZCA9IGl0LT52
YWx1ZTsKICAgICBtX3ByaXZhdGUtPm1fZ2VvbG9jYXRpb25JZE1hcC5yZW1vdmUoaXQpOwogICAg
IG1fcHJpdmF0ZS0+bV9pZEdlb2xvY2F0aW9uTWFwLnJlbW92ZShpZCk7CiAgICAgcmV0dXJuIHRy
dWU7CkBAIC03NSw3ICs3NSw3IEBAIGJvb2wgV2ViR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVz
dE1hbmFnZXI6OnJlbW92ZShpbnQgaWQsIFdlYktpdDo6V2ViR2VvbG9jYXRpCiAgICAgSWRHZW9s
b2NhdGlvbk1hcDo6aXRlcmF0b3IgaXQgPSBtX3ByaXZhdGUtPm1faWRHZW9sb2NhdGlvbk1hcC5m
aW5kKGlkKTsKICAgICBpZiAoaXQgPT0gbV9wcml2YXRlLT5tX2lkR2VvbG9jYXRpb25NYXAuZW5k
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBHZW9sb2NhdGlvbiogZ2VvbG9jYXRpb24g
PSBpdC0+c2Vjb25kOworICAgIEdlb2xvY2F0aW9uKiBnZW9sb2NhdGlvbiA9IGl0LT52YWx1ZTsK
ICAgICBwZXJtaXNzaW9uUmVxdWVzdCA9IFdlYkdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3Qo
Z2VvbG9jYXRpb24pOwogICAgIG1fcHJpdmF0ZS0+bV9pZEdlb2xvY2F0aW9uTWFwLnJlbW92ZShp
dCk7CiAgICAgbV9wcml2YXRlLT5tX2dlb2xvY2F0aW9uSWRNYXAucmVtb3ZlKGdlb2xvY2F0aW9u
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViU29ja2V0RXh0
ZW5zaW9uRGlzcGF0Y2hlclRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9X
ZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyVGVzdC5jcHAKaW5kZXggMzU4OTgzYjgzOTkzMTRj
ZGEwMzdjOGMwMzI0OWVlOWI2NzJlOTY3Yi4uMjQ1MTRjZDU4ZmJmZDAwYWFhODg3MjQyYTFhYzM2
MzMxY2FlYjc4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJT
b2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9XZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyVGVzdC5jcHAKQEAgLTEwMywx
MCArMTAzLDEwIEBAIFRFU1RfRihXZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyVGVzdCwgVGVz
dFBhcmFtZXRlcnMpCiAgICAgRVhQRUNUX0VRKDIsIG1fcGFyc2VkUGFyYW1ldGVyc1swXS5zaXpl
KCkpOwogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+OjppdGVyYXRvciBwYXJhbWV0ZXIgPSBt
X3BhcnNlZFBhcmFtZXRlcnNbMF0uZmluZCgibWF4LWNoYW5uZWxzIik7CiAgICAgRVhQRUNUX1RS
VUUocGFyYW1ldGVyICE9IG1fcGFyc2VkUGFyYW1ldGVyc1swXS5lbmQoKSk7Ci0gICAgRVhQRUNU
X0VRKCI0IiwgcGFyYW1ldGVyLT5zZWNvbmQpOworICAgIEVYUEVDVF9FUSgiNCIsIHBhcmFtZXRl
ci0+dmFsdWUpOwogICAgIHBhcmFtZXRlciA9IG1fcGFyc2VkUGFyYW1ldGVyc1swXS5maW5kKCJm
bG93LWNvbnRyb2wiKTsKICAgICBFWFBFQ1RfVFJVRShwYXJhbWV0ZXIgIT0gbV9wYXJzZWRQYXJh
bWV0ZXJzWzBdLmVuZCgpKTsKLSAgICBFWFBFQ1RfVFJVRShwYXJhbWV0ZXItPnNlY29uZC5pc051
bGwoKSk7CisgICAgRVhQRUNUX1RSVUUocGFyYW1ldGVyLT52YWx1ZS5pc051bGwoKSk7CiB9CiAK
IFRFU1RfRihXZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyVGVzdCwgVGVzdE11bHRpcGxlKQpA
QCAtMTMxLDEyICsxMzEsMTIgQEAgVEVTVF9GKFdlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXJU
ZXN0LCBUZXN0TXVsdGlwbGUpCiAgICAgICAgIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+
JiBwYXJzZWRQYXJhbWV0ZXJzID0gbV9wYXJzZWRQYXJhbWV0ZXJzW2ldOwogICAgICAgICBFWFBF
Q1RfRVEoZXhwZWN0ZWRbaV0ucGFyYW1ldGVycy5zaXplKCksIG1fcGFyc2VkUGFyYW1ldGVyc1tp
XS5zaXplKCkpOwogICAgICAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9p
dGVyYXRvciBpdGVyYXRvciA9IGV4cGVjdGVkUGFyYW1ldGVycy5iZWdpbigpOyBpdGVyYXRvciAh
PSBleHBlY3RlZFBhcmFtZXRlcnMuZW5kKCk7ICsraXRlcmF0b3IpIHsKLSAgICAgICAgICAgIEhh
c2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBwYXJzZWQgPSBwYXJzZWRQYXJh
bWV0ZXJzLmZpbmQoaXRlcmF0b3ItPmZpcnN0KTsKKyAgICAgICAgICAgIEhhc2hNYXA8U3RyaW5n
LCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBwYXJzZWQgPSBwYXJzZWRQYXJhbWV0ZXJzLmZpbmQo
aXRlcmF0b3ItPmtleSk7CiAgICAgICAgICAgICBFWFBFQ1RfVFJVRShwYXJzZWQgIT0gcGFyc2Vk
UGFyYW1ldGVycy5lbmQoKSk7Ci0gICAgICAgICAgICBpZiAoaXRlcmF0b3ItPnNlY29uZC5pc051
bGwoKSkKLSAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShwYXJzZWQtPnNlY29uZC5pc051bGwo
KSk7CisgICAgICAgICAgICBpZiAoaXRlcmF0b3ItPnZhbHVlLmlzTnVsbCgpKQorICAgICAgICAg
ICAgICAgIEVYUEVDVF9UUlVFKHBhcnNlZC0+dmFsdWUuaXNOdWxsKCkpOwogICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIEVYUEVDVF9FUShpdGVyYXRvci0+c2Vjb25kLCBwYXJzZWQt
PnNlY29uZCk7CisgICAgICAgICAgICAgICAgRVhQRUNUX0VRKGl0ZXJhdG9yLT52YWx1ZSwgcGFy
c2VkLT52YWx1ZSk7CiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNHdGsuY3BwIGIvU291cmNl
L1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzR3RrLmNwcAppbmRl
eCAyOTIxNzNhZTI5MmY1MTIxMTg3ZThiZTUwNTAzOTNkN2MzMzg0YzVhLi45MTAzYzg0NjA5NGQ1
MWY4ZjViOTQ4NzRjZDY3YWYwNDc5OTA5YWUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0
ay9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNHdGsuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc0d0ay5jcHAKQEAgLTg4
LDggKzg4LDggQEAgdm9pZCBQbGF0Zm9ybVN0cmF0ZWdpZXNHdGs6OmdldFBsdWdpbkluZm8oY29u
c3QgUGFnZSogcGFnZSwgVmVjdG9yPFBsdWdpbkluZm8+JgogICAgICAgICBNSU1FVG9EZXNjcmlw
dGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5lbmQoKTsK
ICAgICAgICAgZm9yIChNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bWltZVRvRGVzY3JpcHRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAg
ICAgTWltZUNsYXNzSW5mbyBtaW1lOwotICAgICAgICAgICAgbWltZS50eXBlID0gaXQtPmZpcnN0
OwotICAgICAgICAgICAgbWltZS5kZXNjID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIG1pbWUu
dHlwZSA9IGl0LT5rZXk7CisgICAgICAgICAgICBtaW1lLmRlc2MgPSBpdC0+dmFsdWU7CiAgICAg
ICAgICAgICBtaW1lLmV4dGVuc2lvbnMgPSBwYWNrYWdlLT5taW1lVG9FeHRlbnNpb25zKCkuZ2V0
KG1pbWUudHlwZSk7CiAgICAgICAgICAgICBwbHVnaW5JbmZvLm1pbWVzLmFwcGVuZChtaW1lKTsK
ICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGZh
dmljb25kYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZmF2aWNv
bmRhdGFiYXNlLmNwcAppbmRleCBhMWZkMzdhMWUzMWRlZTg4MmZmNGNiOGNmNmM2ZjMwOTRiMWM1
NjFkLi4wMDZhYjJiN2YzNDFhZTZhNDBjMmMwMjJjNWMwY2M1NzRjN2VmNjQwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZmF2aWNvbmRhdGFiYXNlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZmF2aWNvbmRhdGFiYXNlLmNwcApAQCAt
NjExLDE4ICs2MTEsMTggQEAgc3RhdGljIHZvaWQgd2Via2l0RmF2aWNvbkRhdGFiYXNlSW1wb3J0
RmluaXNoZWQoV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSkKICAgICBWZWN0b3I8U3Ry
aW5nPiB0b0RlbGV0ZVVSTHM7CiAgICAgUGVuZGluZ0ljb25SZXF1ZXN0TWFwOjpjb25zdF9pdGVy
YXRvciBlbmQgPSBkYXRhYmFzZS0+cHJpdi0+cGVuZGluZ0ljb25SZXF1ZXN0cy5lbmQoKTsKICAg
ICBmb3IgKFBlbmRpbmdJY29uUmVxdWVzdE1hcDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGRhdGFi
YXNlLT5wcml2LT5wZW5kaW5nSWNvblJlcXVlc3RzLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0
ZXIpIHsKLSAgICAgICAgU3RyaW5nIGljb25VUkwgPSBpY29uRGF0YWJhc2UoKS5zeW5jaHJvbm91
c0ljb25VUkxGb3JQYWdlVVJMKGl0ZXItPmZpcnN0KTsKKyAgICAgICAgU3RyaW5nIGljb25VUkwg
PSBpY29uRGF0YWJhc2UoKS5zeW5jaHJvbm91c0ljb25VUkxGb3JQYWdlVVJMKGl0ZXItPmtleSk7
CiAgICAgICAgIGlmICghaWNvblVSTC5pc0VtcHR5KCkpCiAgICAgICAgICAgICBjb250aW51ZTsK
IAotICAgICAgICBQZW5kaW5nSWNvblJlcXVlc3RWZWN0b3IqIGljb25zID0gaXRlci0+c2Vjb25k
OworICAgICAgICBQZW5kaW5nSWNvblJlcXVlc3RWZWN0b3IqIGljb25zID0gaXRlci0+dmFsdWU7
CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaWNvbnMtPnNpemUoKTsgKytpKSB7CiAg
ICAgICAgICAgICBQZW5kaW5nSWNvblJlcXVlc3QqIHJlcXVlc3QgPSBpY29ucy0+YXQoaSkuZ2V0
KCk7CiAgICAgICAgICAgICBpZiAocmVxdWVzdC0+YXN5bmNSZXN1bHQoKSkKICAgICAgICAgICAg
ICAgICByZXF1ZXN0LT5hc3luY1Jlc3VsdENvbXBsZXRlKDApOwogICAgICAgICB9CiAKLSAgICAg
ICAgdG9EZWxldGVVUkxzLmFwcGVuZChpdGVyLT5maXJzdCk7CisgICAgICAgIHRvRGVsZXRlVVJM
cy5hcHBlbmQoaXRlci0+a2V5KTsKICAgICB9CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHRvRGVsZXRlVVJMcy5zaXplKCk7ICsraSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXR3ZWJwbHVnaW4uY3BwIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdHdlYnBsdWdpbi5jcHAKaW5kZXggZTAzYjFlYTZkYTMzYjdlMmYwMDIyNTVjZTg3Nzc4NjI0
Y2RhNzA4Yy4uMDFkMGJiNWYyYmZkNzAwZjZiM2M5ZmM0ZjhlNDIwYzU3MjQ4NmVjMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnBsdWdpbi5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnBsdWdpbi5jcHAKQEAgLTIzNywxMCAr
MjM3LDEwIEBAIEdTTGlzdCogd2Via2l0X3dlYl9wbHVnaW5fZ2V0X21pbWV0eXBlcyhXZWJLaXRX
ZWJQbHVnaW4qIHBsdWdpbikKIAogICAgIGZvciAoTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKICAgICAgICAgV2ViS2l0V2ViUGx1Z2luTUlNRVR5cGUqIG1pbWVUeXBlID0gZ19zbGlj
ZV9uZXcwKFdlYktpdFdlYlBsdWdpbk1JTUVUeXBlKTsKLSAgICAgICAgbWltZVR5cGUtPm5hbWUg
PSBnX3N0cmR1cChpdC0+Zmlyc3QudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIG1pbWVUeXBlLT5k
ZXNjcmlwdGlvbiA9IGdfc3RyZHVwKGl0LT5zZWNvbmQudXRmOCgpLmRhdGEoKSk7CisgICAgICAg
IG1pbWVUeXBlLT5uYW1lID0gZ19zdHJkdXAoaXQtPmtleS51dGY4KCkuZGF0YSgpKTsKKyAgICAg
ICAgbWltZVR5cGUtPmRlc2NyaXB0aW9uID0gZ19zdHJkdXAoaXQtPnZhbHVlLnV0ZjgoKS5kYXRh
KCkpOwogCi0gICAgICAgIFZlY3RvcjxTdHJpbmc+IGV4dGVuc2lvbnMgPSBwcml2LT5jb3JlUGx1
Z2luLT5taW1lVG9FeHRlbnNpb25zKCkuZ2V0KGl0LT5maXJzdCk7CisgICAgICAgIFZlY3RvcjxT
dHJpbmc+IGV4dGVuc2lvbnMgPSBwcml2LT5jb3JlUGx1Z2luLT5taW1lVG9FeHRlbnNpb25zKCku
Z2V0KGl0LT5rZXkpOwogICAgICAgICBtaW1lVHlwZS0+ZXh0ZW5zaW9ucyA9IHN0YXRpY19jYXN0
PGdjaGFyKio+KGdfbWFsbG9jMChzaXplb2YoY2hhciopICogKGV4dGVuc2lvbnMuc2l6ZSgpICsg
MSkpKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4dGVuc2lvbnMuc2l6ZSgp
OyBpKyspCiAgICAgICAgICAgICBtaW1lVHlwZS0+ZXh0ZW5zaW9uc1tpXSA9IGdfc3RyZHVwKGV4
dGVuc2lvbnNbaV0udXRmOCgpLmRhdGEoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21h
Yy9IaXN0b3J5L1dlYkhpc3RvcnkubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9IaXN0b3J5L1dlYkhp
c3RvcnkubW0KaW5kZXggNjk2NGZjOTQ5YjUxMjE3M2E2YmRjNWU3MGI1NjE4ZDMxY2I2NzdhMy4u
ZTc4MWQzMmZkMWRlOTUwZDkxNGFmNDgzNDk3NjQyMGRmNTg3ZGFmNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9tYWMvSGlzdG9yeS9XZWJIaXN0b3J5Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQv
bWFjL0hpc3RvcnkvV2ViSGlzdG9yeS5tbQpAQCAtMjM4LDcgKzIzOCw3IEBAIHN0YXRpYyBpbmxp
bmUgV2ViSGlzdG9yeURhdGVLZXkgZGF0ZUtleShOU1RpbWVJbnRlcnZhbCBkYXRlKQogICAgICAg
ICByZXR1cm4gTk87CiAKICAgICBEYXRlVG9FbnRyaWVzTWFwOjppdGVyYXRvciBpdCA9IF9lbnRy
aWVzQnlEYXRlLT5maW5kKGRhdGVLZXkpOwotICAgIE5TTXV0YWJsZUFycmF5ICplbnRyaWVzRm9y
RGF0ZSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgTlNNdXRhYmxlQXJyYXkgKmVudHJpZXNGb3JE
YXRlID0gaXQtPnZhbHVlLmdldCgpOwogICAgIFtlbnRyaWVzRm9yRGF0ZSByZW1vdmVPYmplY3RJ
ZGVudGljYWxUbzplbnRyeV07CiAgICAgCiAgICAgLy8gcmVtb3ZlIHRoaXMgZGF0ZSBlbnRpcmVs
eSBpZiB0aGVyZSBhcmUgbm8gb3RoZXIgZW50cmllcyBvbiBpdApAQCAtNDQwLDcgKzQ0MCw3IEBA
IHN0YXRpYyBpbmxpbmUgV2ViSGlzdG9yeURhdGVLZXkgZGF0ZUtleShOU1RpbWVJbnRlcnZhbCBk
YXRlKQogICAgICAgICBkYXlzQXNUaW1lSW50ZXJ2YWxzLnJlc2VydmVDYXBhY2l0eShfZW50cmll
c0J5RGF0ZS0+c2l6ZSgpKTsKICAgICAgICAgRGF0ZVRvRW50cmllc01hcDo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gX2VudHJpZXNCeURhdGUtPmVuZCgpOwogICAgICAgICBmb3IgKERhdGVUb0VudHJp
ZXNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gX2VudHJpZXNCeURhdGUtPmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkKLSAgICAgICAgICAgIGRheXNBc1RpbWVJbnRlcnZhbHMuYXBwZW5kKGl0LT5m
aXJzdCk7CisgICAgICAgICAgICBkYXlzQXNUaW1lSW50ZXJ2YWxzLmFwcGVuZChpdC0+a2V5KTsK
IAogICAgICAgICBzb3J0KGRheXNBc1RpbWVJbnRlcnZhbHMuYmVnaW4oKSwgZGF5c0FzVGltZUlu
dGVydmFscy5lbmQoKSk7CiAgICAgICAgIHNpemVfdCBjb3VudCA9IGRheXNBc1RpbWVJbnRlcnZh
bHMuc2l6ZSgpOwpAQCAtODk3LDcgKzg5Nyw3IEBAIFdlYkhpc3RvcnlXcml0ZXI6OldlYkhpc3Rv
cnlXcml0ZXIoRGF0ZVRvRW50cmllc01hcCogZW50cmllc0J5RGF0ZSkKICAgICBtX2RhdGVLZXlz
LnJlc2VydmVDYXBhY2l0eShtX2VudHJpZXNCeURhdGUtPnNpemUoKSk7CiAgICAgRGF0ZVRvRW50
cmllc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9lbnRyaWVzQnlEYXRlLT5lbmQoKTsKICAg
ICBmb3IgKERhdGVUb0VudHJpZXNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9lbnRyaWVzQnlE
YXRlLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIG1fZGF0ZUtleXMuYXBwZW5k
KGl0LT5maXJzdCk7CisgICAgICAgIG1fZGF0ZUtleXMuYXBwZW5kKGl0LT5rZXkpOwogICAgIHNv
cnQobV9kYXRlS2V5cy5iZWdpbigpLCBtX2RhdGVLZXlzLmVuZCgpKTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbSBiL1NvdXJjZS9X
ZWJLaXQvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW0KaW5kZXggZDU5M2Y4Y2FmMWVjM2Fj
Y2E1YjRiMzBhODNjYmQ2YjJjMTk1NDE1Mi4uMDczZDU5MDNmYWFiMTU0ZDk2NjU4ZmU0YjYzYzU3
MGNiYzVmYzdhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJDb3JlU3Rh
dGlzdGljcy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNz
Lm1tCkBAIC04OSw4ICs4OSw4IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogICAgIE93blB0
cjxUeXBlQ291bnRTZXQ+IGNvdW50cyhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkt
PmhlYXAucHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50cygpKTsKICAgICBIYXNoQ291bnRlZFNldDxj
b25zdCBjaGFyKj46Oml0ZXJhdG9yIGVuZCA9IGNvdW50cy0+ZW5kKCk7CiAgICAgZm9yIChIYXNo
Q291bnRlZFNldDxjb25zdCBjaGFyKj46Oml0ZXJhdG9yIGl0ID0gY291bnRzLT5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdC0+c2Vj
b25kOyArK2kpCi0gICAgICAgICAgICBbcmVzdWx0IGFkZE9iamVjdDpbTlNTdHJpbmcgc3RyaW5n
V2l0aFVURjhTdHJpbmc6aXQtPmZpcnN0XV07CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBpdC0+dmFsdWU7ICsraSkKKyAgICAgICAgICAgIFtyZXN1bHQgYWRkT2JqZWN0OltOU1N0
cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzppdC0+a2V5XV07CiAgICAgCiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KQEAgLTEwNCw4ICsxMDQsOCBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKICAg
ICBPd25QdHI8VHlwZUNvdW50U2V0PiBjb3VudHMoSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFs
RGF0YSgpLT5oZWFwLm9iamVjdFR5cGVDb3VudHMoKSk7CiAgICAgSGFzaENvdW50ZWRTZXQ8Y29u
c3QgY2hhcio+OjppdGVyYXRvciBlbmQgPSBjb3VudHMtPmVuZCgpOwogICAgIGZvciAoSGFzaENv
dW50ZWRTZXQ8Y29uc3QgY2hhcio+OjppdGVyYXRvciBpdCA9IGNvdW50cy0+YmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXQtPnNlY29u
ZDsgKytpKQotICAgICAgICAgICAgW3Jlc3VsdCBhZGRPYmplY3Q6W05TU3RyaW5nIHN0cmluZ1dp
dGhVVEY4U3RyaW5nOml0LT5maXJzdF1dOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgaXQtPnZhbHVlOyArK2kpCisgICAgICAgICAgICBbcmVzdWx0IGFkZE9iamVjdDpbTlNTdHJp
bmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6aXQtPmtleV1dOwogICAgIAogICAgIHJldHVybiByZXN1
bHQ7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRz
Y2FwZVBsdWdpbkhvc3RNYW5hZ2VyLm1tIGIvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0
ZWQvTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlci5tbQppbmRleCBjNTEwYTlhOTNkNWIxNzQzMTFl
MmQ3MzMwZjIxYjU5NGJhMDU3MmJlLi5hODIxMjlmMjg2OWFjZDJkNjc5ZjdmYmVhNjZiNjEwNTg5
MDM1MDM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRz
Y2FwZVBsdWdpbkhvc3RNYW5hZ2VyLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMv
SG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXIubW0KQEAgLTczLDcgKzczLDcgQEAgTmV0
c2NhcGVQbHVnaW5Ib3N0UHJveHkqIE5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXI6Omhvc3RGb3JQ
bHVnaW4oY29uc3QgV1RGOjpTdHIKICAgICAKICAgICAvLyBUaGUgcGFja2FnZSB3YXMgYWxyZWFk
eSBpbiB0aGUgbWFwLCBqdXN0IHJldHVybiBpdC4KICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5
KQotICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgIHJldHVy
biByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogICAgICAgICAKICAgICBtYWNoX3BvcnRfdCBjbGll
bnRQb3J0OwogICAgIGlmIChtYWNoX3BvcnRfYWxsb2NhdGUobWFjaF90YXNrX3NlbGYoKSwgTUFD
SF9QT1JUX1JJR0hUX1JFQ0VJVkUsICZjbGllbnRQb3J0KSAhPSBLRVJOX1NVQ0NFU1MpIHsKQEAg
LTk1LDcgKzk1LDcgQEAgTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkqIE5ldHNjYXBlUGx1Z2luSG9z
dE1hbmFnZXI6Omhvc3RGb3JQbHVnaW4oY29uc3QgV1RGOjpTdHIKICAgICAKICAgICBOZXRzY2Fw
ZVBsdWdpbkhvc3RQcm94eSogaG9zdFByb3h5ID0gbmV3IE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5
KGNsaWVudFBvcnQsIHBsdWdpbkhvc3RQb3J0LCBwbHVnaW5Ib3N0UFNOLCBzaG91bGRDYWNoZU1p
c3NpbmdQcm9wZXJ0aWVzQW5kTWV0aG9kcyk7CiAgICAgCi0gICAgcmVzdWx0Lml0ZXJhdG9yLT5z
ZWNvbmQgPSBob3N0UHJveHk7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGhvc3RQcm94
eTsKICAgICAKICAgICByZXR1cm4gaG9zdFByb3h5OwogfQpAQCAtMjA0LDcgKzIwNCw3IEBAIHZv
aWQgTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlcjo6cGx1Z2luSG9zdERpZWQoTmV0c2NhcGVQbHVn
aW5Ib3N0UHJveHkqIHBsdWdpbkhvCiAKICAgICAvLyBUaGlzIGhhcyBPKG4pIGNvbXBsZXhpdHkg
YnV0IHRoZSBudW1iZXIgb2YgYWN0aXZlIHBsdWctaW4gaG9zdHMgaXMgdmVyeSBzbWFsbCBzbyBp
dCBzaG91bGRuJ3QgbWF0dGVyLgogICAgIGZvciAoUGx1Z2luSG9zdE1hcDo6aXRlcmF0b3IgaXQg
PSBtX3BsdWdpbkhvc3RzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAo
aXQtPnNlY29uZCA9PSBwbHVnaW5Ib3N0KSB7CisgICAgICAgIGlmIChpdC0+dmFsdWUgPT0gcGx1
Z2luSG9zdCkgewogICAgICAgICAgICAgbV9wbHVnaW5Ib3N0cy5yZW1vdmUoaXQpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0zMDQsNyArMzA0LDcgQEAgdm9pZCBOZXRzY2Fw
ZVBsdWdpbkhvc3RNYW5hZ2VyOjpkaWRDcmVhdGVXaW5kb3coKQogICAgIC8vIFNlZSBpZiBhbnkg
b2Ygb3VyIGhvc3RzIGFyZSBpbiBmdWxsLXNjcmVlbiBtb2RlLgogICAgIFBsdWdpbkhvc3RNYXA6
Oml0ZXJhdG9yIGVuZCA9IG1fcGx1Z2luSG9zdHMuZW5kKCk7CiAgICAgZm9yIChQbHVnaW5Ib3N0
TWFwOjppdGVyYXRvciBpdCA9IG1fcGx1Z2luSG9zdHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7Ci0gICAgICAgIE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5KiBob3N0UHJveHkgPSBpdC0+c2Vj
b25kOworICAgICAgICBOZXRzY2FwZVBsdWdpbkhvc3RQcm94eSogaG9zdFByb3h5ID0gaXQtPnZh
bHVlOwogICAgICAgICAKICAgICAgICAgaWYgKCFob3N0UHJveHktPmlzTWVudUJhclZpc2libGUo
KSkgewogICAgICAgICAgICAgLy8gTWFrZSBvdXJzZWx2ZXMgdGhlIGZyb250IHByb2Nlc3MuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdp
bkhvc3RQcm94eS5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBl
UGx1Z2luSG9zdFByb3h5Lm1tCmluZGV4IGFmNmYyYmU5OTY5Y2IxMWNiMzNhNTYzMTdmZGRhOGMy
Y2Y2MWNmNWUuLjBmYjI2ZDBhOWI4NDc1MjI2YmVmY2MzNDk2OGI5ZjUwNmViOTE1YmMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9z
dFByb3h5Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBl
UGx1Z2luSG9zdFByb3h5Lm1tCkBAIC0xNDQsNyArMTQ0LDcgQEAgdm9pZCBOZXRzY2FwZVBsdWdp
bkhvc3RQcm94eTo6cGx1Z2luSG9zdERpZWQoKQogICAKICAgICBQbHVnaW5JbnN0YW5jZU1hcDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gaW5zdGFuY2VzLmVuZCgpOwogICAgIGZvciAoUGx1Z2luSW5z
dGFuY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaW5zdGFuY2VzLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+cGx1Z2luSG9zdERpZWQoKTsKKyAgICAgICAg
aXQtPnZhbHVlLT5wbHVnaW5Ib3N0RGllZCgpOwogICAgIAogICAgIE5ldHNjYXBlUGx1Z2luSG9z
dE1hbmFnZXI6OnNoYXJlZCgpLnBsdWdpbkhvc3REaWVkKHRoaXMpOwogICAgIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5j
ZVByb3h5Lm1tIGIvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVn
aW5JbnN0YW5jZVByb3h5Lm1tCmluZGV4IGViODZhMmVmMTk1YjFmODBiYWQ4NDRhMmFkNTdjNzY1
OWVlNGU1ZjAuLmUxZGNlNDI3OGQzZjY2Yjg3ODNhNDIzN2YxNjU1YjRlMjgxNjYxYmQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5z
dGFuY2VQcm94eS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRz
Y2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW0KQEAgLTE0NSw3ICsxNDUsNyBAQCB1aW50MzJfdCBO
ZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OkxvY2FsT2JqZWN0TWFwOjppZEZvck9iamVjdChK
U0dsb2JhbERhdGEmCiAgICAgCiAgICAgSGFzaE1hcDxKU0M6OkpTT2JqZWN0KiwgcGFpcjx1aW50
MzJfdCwgdWludDMyX3Q+ID46Oml0ZXJhdG9yIGl0ZXIgPSBtX2pzT2JqZWN0VG9JRE1hcC5maW5k
KG9iamVjdCk7CiAgICAgaWYgKGl0ZXIgIT0gbV9qc09iamVjdFRvSURNYXAuZW5kKCkpCi0gICAg
ICAgIHJldHVybiBpdGVyLT5zZWNvbmQuZmlyc3Q7CisgICAgICAgIHJldHVybiBpdGVyLT52YWx1
ZS5maXJzdDsKICAgICAKICAgICBkbyB7CiAgICAgICAgIG9iamVjdElEID0gKyttX29iamVjdElE
Q291bnRlcjsKQEAgLTE2Miw3ICsxNjIsNyBAQCB2b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQ
cm94eTo6TG9jYWxPYmplY3RNYXA6OnJldGFpbihKU0M6OkpTT2JqZWN0KiBvYmplY3QpCiAgICAg
SGFzaE1hcDxKU0M6OkpTT2JqZWN0KiwgcGFpcjx1aW50MzJfdCwgdWludDMyX3Q+ID46Oml0ZXJh
dG9yIGl0ZXIgPSBtX2pzT2JqZWN0VG9JRE1hcC5maW5kKG9iamVjdCk7CiAgICAgQVNTRVJUKGl0
ZXIgIT0gbV9qc09iamVjdFRvSURNYXAuZW5kKCkpOwogCi0gICAgaXRlci0+c2Vjb25kLnNlY29u
ZCA9IGl0ZXItPnNlY29uZC5zZWNvbmQgKyAxOworICAgIGl0ZXItPnZhbHVlLnNlY29uZCA9IGl0
ZXItPnZhbHVlLnNlY29uZCArIDE7CiB9CiAKIHZvaWQgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVBy
b3h5OjpMb2NhbE9iamVjdE1hcDo6cmVsZWFzZShKU0M6OkpTT2JqZWN0KiBvYmplY3QpCkBAIC0x
NzAsMTAgKzE3MCwxMCBAQCB2b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6TG9jYWxP
YmplY3RNYXA6OnJlbGVhc2UoSlNDOjpKU09iamVjdCogb2JqZWN0KQogICAgIEhhc2hNYXA8SlND
OjpKU09iamVjdCosIHBhaXI8dWludDMyX3QsIHVpbnQzMl90PiA+OjppdGVyYXRvciBpdGVyID0g
bV9qc09iamVjdFRvSURNYXAuZmluZChvYmplY3QpOwogICAgIEFTU0VSVChpdGVyICE9IG1fanNP
YmplY3RUb0lETWFwLmVuZCgpKTsKIAotICAgIEFTU0VSVChpdGVyLT5zZWNvbmQuc2Vjb25kID4g
MCk7Ci0gICAgaXRlci0+c2Vjb25kLnNlY29uZCA9IGl0ZXItPnNlY29uZC5zZWNvbmQgLSAxOwot
ICAgIGlmICghaXRlci0+c2Vjb25kLnNlY29uZCkgewotICAgICAgICBtX2lkVG9KU09iamVjdE1h
cC5yZW1vdmUoaXRlci0+c2Vjb25kLmZpcnN0KTsKKyAgICBBU1NFUlQoaXRlci0+dmFsdWUuc2Vj
b25kID4gMCk7CisgICAgaXRlci0+dmFsdWUuc2Vjb25kID0gaXRlci0+dmFsdWUuc2Vjb25kIC0g
MTsKKyAgICBpZiAoIWl0ZXItPnZhbHVlLnNlY29uZCkgeworICAgICAgICBtX2lkVG9KU09iamVj
dE1hcC5yZW1vdmUoaXRlci0+dmFsdWUuZmlyc3QpOwogICAgICAgICBtX2pzT2JqZWN0VG9JRE1h
cC5yZW1vdmUoaXRlcik7CiAgICAgfQogfQpAQCAtMTk3LDEwICsxOTcsMTAgQEAgYm9vbCBOZXRz
Y2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OkxvY2FsT2JqZWN0TWFwOjpmb3JnZXQodWludDMyX3Qg
b2JqZWN0SUQpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIEhhc2hNYXA8SlND
OjpKU09iamVjdCosIHBhaXI8dWludDMyX3QsIHVpbnQzMl90PiA+OjppdGVyYXRvciBySXRlciA9
IG1fanNPYmplY3RUb0lETWFwLmZpbmQoaXRlci0+c2Vjb25kLmdldCgpKTsKKyAgICBIYXNoTWFw
PEpTQzo6SlNPYmplY3QqLCBwYWlyPHVpbnQzMl90LCB1aW50MzJfdD4gPjo6aXRlcmF0b3Igckl0
ZXIgPSBtX2pzT2JqZWN0VG9JRE1hcC5maW5kKGl0ZXItPnZhbHVlLmdldCgpKTsKIAogICAgIC8v
IElmIHRoZSBvYmplY3QgaXMgYmVpbmcgc2VudCB0byBwbHVnLWluIHJpZ2h0IG5vdywgdGhlbiBp
dCdzIG5vdCB0aGUgdGltZSB0byBmb3JnZXQuCi0gICAgaWYgKHJJdGVyLT5zZWNvbmQuc2Vjb25k
ICE9IDEpCisgICAgaWYgKHJJdGVyLT52YWx1ZS5zZWNvbmQgIT0gMSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgbV9qc09iamVjdFRvSURNYXAucmVtb3ZlKHJJdGVyKTsKQEAgLTMzMCw3
ICszMzAsNyBAQCB2b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6ZGVzdHJveSgpCiAg
ICAgCiAgICAgRnJhbWVMb2FkTWFwOjppdGVyYXRvciBlbmQgPSBtX3BlbmRpbmdGcmFtZUxvYWRz
LmVuZCgpOwogICAgIGZvciAoRnJhbWVMb2FkTWFwOjppdGVyYXRvciBpdCA9IG1fcGVuZGluZ0Zy
YW1lTG9hZHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBbKGl0LT5maXJzdCkg
X3NldEludGVybmFsTG9hZERlbGVnYXRlOm5pbF07CisgICAgICAgIFsoaXQtPmtleSkgX3NldElu
dGVybmFsTG9hZERlbGVnYXRlOm5pbF07CiAKICAgICBfV0tQSERlc3Ryb3lQbHVnaW5JbnN0YW5j
ZShtX3BsdWdpbkhvc3RQcm94eS0+cG9ydCgpLCBtX3BsdWdpbklELCByZXF1ZXN0SUQpOwogIApA
QCAtNjc4LDcgKzY3OCw3IEBAIHZvaWQgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Ojp3ZWJG
cmFtZURpZEZpbmlzaExvYWRXaXRoUmVhc29uKFdlYkZyYW1lKiB3ZWJGCiAgICAgRnJhbWVMb2Fk
TWFwOjppdGVyYXRvciBpdCA9IG1fcGVuZGluZ0ZyYW1lTG9hZHMuZmluZCh3ZWJGcmFtZSk7CiAg
ICAgQVNTRVJUKGl0ICE9IG1fcGVuZGluZ0ZyYW1lTG9hZHMuZW5kKCkpOwogICAgICAgICAKLSAg
ICBQbHVnaW5SZXF1ZXN0KiBwbHVnaW5SZXF1ZXN0ID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICBQ
bHVnaW5SZXF1ZXN0KiBwbHVnaW5SZXF1ZXN0ID0gaXQtPnZhbHVlLmdldCgpOwogICAgIF9XS1BI
TG9hZFVSTE5vdGlmeShtX3BsdWdpbkhvc3RQcm94eS0+cG9ydCgpLCBtX3BsdWdpbklELCBwbHVn
aW5SZXF1ZXN0LT5yZXF1ZXN0SUQoKSwgcmVhc29uKTsKICAKICAgICBtX3BlbmRpbmdGcmFtZUxv
YWRzLnJlbW92ZShpdCk7CkBAIC0xNjM4LDcgKzE2MzgsNyBAQCB2b2lkIE5ldHNjYXBlUGx1Z2lu
SW5zdGFuY2VQcm94eTo6Y2FuY2VsQ2hlY2tJZkFsbG93ZWRUb0xvYWRVUkwodWludDMyX3QgY2hl
Y2tJRAogICAgIGlmIChpdCA9PSBtX3VybENoZWNrcy5lbmQoKSkKICAgICAgICAgcmV0dXJuOwog
ICAgIAotICAgIFdlYlBsdWdpbkNvbnRhaW5lckNoZWNrICpjaGVjayA9IGl0LT5zZWNvbmQuZ2V0
KCk7CisgICAgV2ViUGx1Z2luQ29udGFpbmVyQ2hlY2sgKmNoZWNrID0gaXQtPnZhbHVlLmdldCgp
OwogICAgIFtjaGVjayBjYW5jZWxdOwogICAgIG1fdXJsQ2hlY2tzLnJlbW92ZShpdCk7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9Qcm94eUluc3RhbmNl
Lm1tIGIvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvUHJveHlJbnN0YW5jZS5tbQpp
bmRleCAwOTQ0M2RjMTYyOGE2NjhmMmZiMjE0ZjNiNTMxN2M2YjU0NDQ0MWNhLi42MmI2MDhlNjVk
ZTNlMDNjMzUyOGIzMzc5OGJiNDQ2NzZkZjJlNWZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L21hYy9QbHVnaW5zL0hvc3RlZC9Qcm94eUluc3RhbmNlLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQv
bWFjL1BsdWdpbnMvSG9zdGVkL1Byb3h5SW5zdGFuY2UubW0KQEAgLTM1NSw4ICszNTUsOCBAQCBN
ZXRob2RMaXN0IFByb3h5SW5zdGFuY2U6Om1ldGhvZHNOYW1lZChjb25zdCBJZGVudGlmaWVyJiBp
ZGVudGlmaWVyKQogICAgIE1ldGhvZE1hcDo6aXRlcmF0b3IgZXhpc3RpbmdNYXBFbnRyeSA9IG1f
bWV0aG9kcy5maW5kKGlkZW50aWZpZXIuaW1wbCgpKTsKICAgICBpZiAoZXhpc3RpbmdNYXBFbnRy
eSAhPSBtX21ldGhvZHMuZW5kKCkpIHsKICAgICAgICAgTWV0aG9kTGlzdCBtZXRob2RMaXN0Owot
ICAgICAgICBpZiAoZXhpc3RpbmdNYXBFbnRyeS0+c2Vjb25kKQotICAgICAgICAgICAgbWV0aG9k
TGlzdC5hcHBlbmQoZXhpc3RpbmdNYXBFbnRyeS0+c2Vjb25kKTsKKyAgICAgICAgaWYgKGV4aXN0
aW5nTWFwRW50cnktPnZhbHVlKQorICAgICAgICAgICAgbWV0aG9kTGlzdC5hcHBlbmQoZXhpc3Rp
bmdNYXBFbnRyeS0+dmFsdWUpOwogICAgICAgICByZXR1cm4gbWV0aG9kTGlzdDsKICAgICB9CiAg
ICAgCkBAIC0zNzgsMTEgKzM3OCwxMSBAQCBNZXRob2RMaXN0IFByb3h5SW5zdGFuY2U6Om1ldGhv
ZHNOYW1lZChjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKQogICAgIC8vIEFkZCBhIG5ldyBl
bnRyeSB0byB0aGUgbWFwIHVubGVzcyBhbiBlbnRyeSB3YXMgYWRkZWQgd2hpbGUgd2Ugd2VyZSBp
biB3YWl0Rm9yUmVwbHkuCiAgICAgTWV0aG9kTWFwOjpBZGRSZXN1bHQgbWFwQWRkUmVzdWx0ID0g
bV9tZXRob2RzLmFkZChpZGVudGlmaWVyLmltcGwoKSwgMCk7CiAgICAgaWYgKG1hcEFkZFJlc3Vs
dC5pc05ld0VudHJ5ICYmIHJlcGx5LT5tX3Jlc3VsdCkKLSAgICAgICAgbWFwQWRkUmVzdWx0Lml0
ZXJhdG9yLT5zZWNvbmQgPSBuZXcgUHJveHlNZXRob2QobWV0aG9kTmFtZSk7CisgICAgICAgIG1h
cEFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBuZXcgUHJveHlNZXRob2QobWV0aG9kTmFtZSk7
CiAKICAgICBNZXRob2RMaXN0IG1ldGhvZExpc3Q7Ci0gICAgaWYgKG1hcEFkZFJlc3VsdC5pdGVy
YXRvci0+c2Vjb25kKQotICAgICAgICBtZXRob2RMaXN0LmFwcGVuZChtYXBBZGRSZXN1bHQuaXRl
cmF0b3ItPnNlY29uZCk7CisgICAgaWYgKG1hcEFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUpCisg
ICAgICAgIG1ldGhvZExpc3QuYXBwZW5kKG1hcEFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwog
ICAgIHJldHVybiBtZXRob2RMaXN0OwogfQogCkBAIC0zOTQsNyArMzk0LDcgQEAgRmllbGQqIFBy
b3h5SW5zdGFuY2U6OmZpZWxkTmFtZWQoY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllcikKICAg
ICAvLyBJZiB3ZSBhbHJlYWR5IGhhdmUgYW4gZW50cnkgaW4gdGhlIG1hcCwgdXNlIGl0LgogICAg
IEZpZWxkTWFwOjppdGVyYXRvciBleGlzdGluZ01hcEVudHJ5ID0gbV9maWVsZHMuZmluZChpZGVu
dGlmaWVyLmltcGwoKSk7CiAgICAgaWYgKGV4aXN0aW5nTWFwRW50cnkgIT0gbV9maWVsZHMuZW5k
KCkpCi0gICAgICAgIHJldHVybiBleGlzdGluZ01hcEVudHJ5LT5zZWNvbmQ7CisgICAgICAgIHJl
dHVybiBleGlzdGluZ01hcEVudHJ5LT52YWx1ZTsKICAgICAKICAgICB1aW50NjRfdCBwcm9wZXJ0
eU5hbWUgPSByZWludGVycHJldF9jYXN0PHVpbnQ2NF90PihfTlBOX0dldFN0cmluZ0lkZW50aWZp
ZXIoaWRlbnRpZmllci5hc2NpaSgpLmRhdGEoKSkpOwogICAgIHVpbnQzMl90IHJlcXVlc3RJRCA9
IG1faW5zdGFuY2VQcm94eS0+bmV4dFJlcXVlc3RJRCgpOwpAQCAtNDE0LDggKzQxNCw4IEBAIEZp
ZWxkKiBQcm94eUluc3RhbmNlOjpmaWVsZE5hbWVkKGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZp
ZXIpCiAgICAgLy8gQWRkIGEgbmV3IGVudHJ5IHRvIHRoZSBtYXAgdW5sZXNzIGFuIGVudHJ5IHdh
cyBhZGRlZCB3aGlsZSB3ZSB3ZXJlIGluIHdhaXRGb3JSZXBseS4KICAgICBGaWVsZE1hcDo6QWRk
UmVzdWx0IG1hcEFkZFJlc3VsdCA9IG1fZmllbGRzLmFkZChpZGVudGlmaWVyLmltcGwoKSwgMCk7
CiAgICAgaWYgKG1hcEFkZFJlc3VsdC5pc05ld0VudHJ5ICYmIHJlcGx5LT5tX3Jlc3VsdCkKLSAg
ICAgICAgbWFwQWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBuZXcgUHJveHlGaWVsZChwcm9w
ZXJ0eU5hbWUpOwotICAgIHJldHVybiBtYXBBZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAg
ICAgICAgbWFwQWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IG5ldyBQcm94eUZpZWxkKHByb3Bl
cnR5TmFtZSk7CisgICAgcmV0dXJuIG1hcEFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiB9CiAK
IEpTQzo6SlNWYWx1ZSBQcm94eUluc3RhbmNlOjpmaWVsZFZhbHVlKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgRmllbGQqIGZpZWxkKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMv
UGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9QbHVn
aW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5tbQppbmRleCA1ZjFmNTU2OTQxYTk0YzEwZjRkNWI3
MWIyODMzODM5ZWEyNWJlMDQzLi4xZTliMDExMWQ3MGMwNWNiNzJlNWM4ZGU2OTdlYmE0ZjA4Zjk3
ODhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1
Z2luVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1
Z2luVmlldy5tbQpAQCAtNzEwLDcgKzcxMCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBnZXROUFJl
Y3QoY29uc3QgTlNSZWN0JiBuciwgTlBSZWN0JiBucHIpCiAKICAgICBIYXNoTWFwPHVpbnQzMl90
LCBQbHVnaW5UaW1lcio+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSB0aW1lcnMtPmVuZCgpOwogICAg
IGZvciAoSGFzaE1hcDx1aW50MzJfdCwgUGx1Z2luVGltZXIqPjo6Y29uc3RfaXRlcmF0b3IgaXQg
PSB0aW1lcnMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBQbHVnaW5UaW1l
ciogdGltZXIgPSBpdC0+c2Vjb25kOworICAgICAgICBQbHVnaW5UaW1lciogdGltZXIgPSBpdC0+
dmFsdWU7CiAgICAgICAgIHRpbWVyLT5zdG9wKCk7CiAgICAgfSAgICAKIH0KQEAgLTcyOCw3ICs3
MjgsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZ2V0TlBSZWN0KGNvbnN0IE5TUmVjdCYgbnIsIE5Q
UmVjdCYgbnByKQogICAgIAogICAgIEhhc2hNYXA8dWludDMyX3QsIFBsdWdpblRpbWVyKj46OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IHRpbWVycy0+ZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPHVpbnQz
Ml90LCBQbHVnaW5UaW1lcio+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHRpbWVycy0+YmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFBsdWdpblRpbWVyKiB0aW1lciA9IGl0LT5zZWNv
bmQ7CisgICAgICAgIFBsdWdpblRpbWVyKiB0aW1lciA9IGl0LT52YWx1ZTsKICAgICAgICAgQVNT
RVJUKCF0aW1lci0+aXNBY3RpdmUoKSk7CiAgICAgICAgIHRpbWVyLT5zdGFydChfaXNDb21wbGV0
ZWx5T2JzY3VyZWQpOwogICAgIH0gICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9X
ZWJDb3JlU3VwcG9ydC9XZWJOb3RpZmljYXRpb25DbGllbnQubW0gYi9Tb3VyY2UvV2ViS2l0L21h
Yy9XZWJDb3JlU3VwcG9ydC9XZWJOb3RpZmljYXRpb25DbGllbnQubW0KaW5kZXggODEyMDkzNjAx
NjM3NDliNzY2ZmM3YjhkM2Q3MDYwMjdjYjI3ZDZkYS4uOGJjNzcwZWQwYjVkZTNhYTNkNDZiYjNh
OTk5ZmRhYTk3ODkxYzVlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1
cHBvcnQvV2ViTm90aWZpY2F0aW9uQ2xpZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dl
YkNvcmVTdXBwb3J0L1dlYk5vdGlmaWNhdGlvbkNsaWVudC5tbQpAQCAtNzIsNyArNzIsNyBAQCBi
b29sIFdlYk5vdGlmaWNhdGlvbkNsaWVudDo6c2hvdyhOb3RpZmljYXRpb24qIG5vdGlmaWNhdGlv
bikKICAgICBtX25vdGlmaWNhdGlvbk1hcC5zZXQobm90aWZpY2F0aW9uLCB3ZWJOb3RpZmljYXRp
b24pOwogCiAgICAgTm90aWZpY2F0aW9uQ29udGV4dE1hcDo6aXRlcmF0b3IgaXQgPSBtX25vdGlm
aWNhdGlvbkNvbnRleHRNYXAuYWRkKG5vdGlmaWNhdGlvbi0+c2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpLCBWZWN0b3I8UmV0YWluUHRyPFdlYk5vdGlmaWNhdGlvbj4gPigpKS5pdGVyYXRvcjsKLSAg
ICBpdC0+c2Vjb25kLmFwcGVuZCh3ZWJOb3RpZmljYXRpb24pOworICAgIGl0LT52YWx1ZS5hcHBl
bmQod2ViTm90aWZpY2F0aW9uKTsKIAogICAgIFtbbV93ZWJWaWV3IF9ub3RpZmljYXRpb25Qcm92
aWRlcl0gc2hvd05vdGlmaWNhdGlvbjp3ZWJOb3RpZmljYXRpb24uZ2V0KCkgZnJvbVdlYlZpZXc6
bV93ZWJWaWV3XTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEwMiw3ICsxMDIsNyBAQCB2b2lkIFdl
Yk5vdGlmaWNhdGlvbkNsaWVudDo6Y2xlYXJOb3RpZmljYXRpb25zKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQpCiAgICAgaWYgKGl0ID09IG1fbm90aWZpY2F0aW9uQ29udGV4dE1hcC5l
bmQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIFZlY3RvcjxSZXRhaW5QdHI8V2ViTm90
aWZpY2F0aW9uPiA+JiB3ZWJOb3RpZmljYXRpb25zID0gaXQtPnNlY29uZDsKKyAgICBWZWN0b3I8
UmV0YWluUHRyPFdlYk5vdGlmaWNhdGlvbj4gPiYgd2ViTm90aWZpY2F0aW9ucyA9IGl0LT52YWx1
ZTsKICAgICBOU011dGFibGVBcnJheSAqbnNJRHMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOwog
ICAgIHNpemVfdCBjb3VudCA9IHdlYk5vdGlmaWNhdGlvbnMuc2l6ZSgpOwogICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewpAQCAtMTI3LDEwICsxMjcsMTAgQEAgdm9pZCBX
ZWJOb3RpZmljYXRpb25DbGllbnQ6Om5vdGlmaWNhdGlvbk9iamVjdERlc3Ryb3llZChOb3RpZmlj
YXRpb24qIG5vdGlmaWNhdGkKIAogICAgIE5vdGlmaWNhdGlvbkNvbnRleHRNYXA6Oml0ZXJhdG9y
IGl0ID0gbV9ub3RpZmljYXRpb25Db250ZXh0TWFwLmZpbmQobm90aWZpY2F0aW9uLT5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCkpOwogICAgIEFTU0VSVChpdCAhPSBtX25vdGlmaWNhdGlvbkNvbnRl
eHRNYXAuZW5kKCkpOwotICAgIHNpemVfdCBpbmRleCA9IGl0LT5zZWNvbmQuZmluZCh3ZWJOb3Rp
ZmljYXRpb24pOworICAgIHNpemVfdCBpbmRleCA9IGl0LT52YWx1ZS5maW5kKHdlYk5vdGlmaWNh
dGlvbik7CiAgICAgQVNTRVJUKGluZGV4ICE9IG5vdEZvdW5kKTsKLSAgICBpdC0+c2Vjb25kLnJl
bW92ZShpbmRleCk7Ci0gICAgaWYgKGl0LT5zZWNvbmQuaXNFbXB0eSgpKQorICAgIGl0LT52YWx1
ZS5yZW1vdmUoaW5kZXgpOworICAgIGlmIChpdC0+dmFsdWUuaXNFbXB0eSgpKQogICAgICAgICBt
X25vdGlmaWNhdGlvbkNvbnRleHRNYXAucmVtb3ZlKGl0KTsKIAogICAgIFtbbV93ZWJWaWV3IF9u
b3RpZmljYXRpb25Qcm92aWRlcl0gbm90aWZpY2F0aW9uRGVzdHJveWVkOndlYk5vdGlmaWNhdGlv
bi5nZXQoKV07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxW
aWV3Lm1tIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQppbmRleCBh
OWIyOTFlNDk5ZjgwMjk3Y2M3NTY3OWYzOTBlZjZiZGUwNjFjNGE0Li4yMTY5NWU0NTI1YmQ2YmYx
NTJiNDYyODUyMDAwZDVkYTBhOTE0M2FhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2Vi
SFRNTFZpZXcubW0KQEAgLTIzNzAsNyArMjM3MCw3IEBAIHN0YXRpYyBTdHJpbmcgY29tbWFuZE5h
bWVGb3JTZWxlY3RvcihTRUwgc2VsZWN0b3IpCiAgICAgc3RhdGljIGNvbnN0IFNlbGVjdG9yTmFt
ZU1hcCogZXhjZXB0aW9uTWFwID0gY3JlYXRlU2VsZWN0b3JFeGNlcHRpb25NYXAoKTsKICAgICBT
ZWxlY3Rvck5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZXhjZXB0aW9uTWFwLT5maW5kKHNl
bGVjdG9yKTsKICAgICBpZiAoaXQgIT0gZXhjZXB0aW9uTWFwLT5lbmQoKSkKLSAgICAgICAgcmV0
dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBpdC0+dmFsdWU7CiAKICAgICAvLyBSZW1v
dmUgdGhlIHRyYWlsaW5nIGNvbG9uLgogICAgIC8vIE5vIG5lZWQgdG8gY2FwaXRhbGl6ZSB0aGUg
Y29tbWFuZCBuYW1lIHNpbmNlIEVkaXRvciBjb21tYW5kIG5hbWVzIGFyZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwIGIvU291cmNlL1dlYktpdC9xdC9BcGkv
cXdlYnBhZ2UuY3BwCmluZGV4IGM3YmIxNDYwOTBlZTZjOTRjZDVjYjI2YzA5Y2M0NDRmN2I0NmM5
NTMuLjdhODlhOTMxODY0Yjg0MmUxMDQ4YjhjMDAxMGEyYmVkMDUwMjkyY2MgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0
L0FwaS9xd2VicGFnZS5jcHAKQEAgLTIyMzAsNyArMjIzMCw3IEBAIHN0YXRpYyB2b2lkIGV4dHJh
Y3RDb250ZW50VHlwZUZyb21QbHVnaW5WZWN0b3IoY29uc3QgVmVjdG9yPFBsdWdpblBhY2thZ2Uq
PiYgcGx1CiAgICAgICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWFw
X2l0ID0gcGx1Z2luc1tpXS0+bWltZVRvRGVzY3JpcHRpb25zKCkuYmVnaW4oKTsKICAgICAgICAg
TUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBtYXBfZW5kID0gcGx1Z2luc1tp
XS0+bWltZVRvRGVzY3JpcHRpb25zKCkuZW5kKCk7CiAgICAgICAgIGZvciAoOyBtYXBfaXQgIT0g
bWFwX2VuZDsgKyttYXBfaXQpCi0gICAgICAgICAgICAqbGlzdCA8PCBtYXBfaXQtPmZpcnN0Owor
ICAgICAgICAgICAgKmxpc3QgPDwgbWFwX2l0LT5rZXk7CiAgICAgfQogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGx1Z2luZGF0YWJhc2UuY3BwIGIvU291cmNlL1dl
YktpdC9xdC9BcGkvcXdlYnBsdWdpbmRhdGFiYXNlLmNwcAppbmRleCBhN2EzYjVmMmMxZTg5ZjQ3
NDM3YzA4YTk3ZmNiMjk2Nzg2YmY4ZTU4Li5jNTMyOGM4ZjY3NWYyYzY2ZjdiOWI0MjBkNjUxMzdm
ZDlmODZiODk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGx1Z2luZGF0
YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwbHVnaW5kYXRhYmFzZS5j
cHAKQEAgLTEyMiw4ICsxMjIsOCBAQCBRTGlzdDxRV2ViUGx1Z2luSW5mbzo6TWltZVR5cGU+IFFX
ZWJQbHVnaW5JbmZvOjptaW1lVHlwZXMoKSBjb25zdAogCiAgICAgICAgIGZvciAoTUlNRVRvRGVz
Y3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIE1pbWVUeXBlIG1pbWVUeXBlOwot
ICAgICAgICAgICAgbWltZVR5cGUubmFtZSA9IGl0LT5maXJzdDsKLSAgICAgICAgICAgIG1pbWVU
eXBlLmRlc2NyaXB0aW9uID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIG1pbWVUeXBlLm5hbWUg
PSBpdC0+a2V5OworICAgICAgICAgICAgbWltZVR5cGUuZGVzY3JpcHRpb24gPSBpdC0+dmFsdWU7
CiAKICAgICAgICAgICAgIFFTdHJpbmdMaXN0IGZpbGVFeHRlbnNpb25zOwogICAgICAgICAgICAg
VmVjdG9yPFN0cmluZz4gZXh0ZW5zaW9ucyA9IG1fcGFja2FnZS0+bWltZVRvRXh0ZW5zaW9ucygp
LmdldChtaW1lVHlwZS5uYW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29y
ZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzUXQuY3BwIGIvU291cmNlL1dlYktpdC9xdC9XZWJD
b3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNRdC5jcHAKaW5kZXggY2Q0YWIwZDcyZDg2ODEy
NWRjODZlZTk4N2JjY2U2ZWYzYWIxYWQ4OS4uN2Q0YjBiNzVmOWQyYzRlNzY3OWRiM2QwN2I1NjE3
YTQyMTQwNGM1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Q
bGF0Zm9ybVN0cmF0ZWdpZXNRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3Vw
cG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNRdC5jcHAKQEAgLTEzMyw4ICsxMzMsOCBAQCB2b2lkIFBs
YXRmb3JtU3RyYXRlZ2llc1F0OjpnZXRQbHVnaW5JbmZvKGNvbnN0IFdlYkNvcmU6OlBhZ2UqIHBh
Z2UsIFZlY3RvcjxXZWJDbwogICAgICAgICBmb3IgKE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7CiAgICAgICAgICAgICBNaW1lQ2xhc3NJbmZvIG1pbWU7CiAKLSAgICAgICAgICAgIG1p
bWUudHlwZSA9IGl0LT5maXJzdDsKLSAgICAgICAgICAgIG1pbWUuZGVzYyA9IGl0LT5zZWNvbmQ7
CisgICAgICAgICAgICBtaW1lLnR5cGUgPSBpdC0+a2V5OworICAgICAgICAgICAgbWltZS5kZXNj
ID0gaXQtPnZhbHVlOwogICAgICAgICAgICAgbWltZS5leHRlbnNpb25zID0gcGFja2FnZS0+bWlt
ZVRvRXh0ZW5zaW9ucygpLmdldChtaW1lLnR5cGUpOwogCiAgICAgICAgICAgICBpbmZvLm1pbWVz
LmFwcGVuZChtaW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL0NPTVByb3BlcnR5
QmFnLmggYi9Tb3VyY2UvV2ViS2l0L3dpbi9DT01Qcm9wZXJ0eUJhZy5oCmluZGV4IGRkMGE4YzQy
ZjRkMWNlYzJjOTQyODk4NTIzNTZhMGYyYmRkYTFiNWMuLjBhYWZjMmE1MzE4NTA2MWU0ZDg5OGNh
Yzc0MTllY2JhMDY0NjlkOGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL0NPTVByb3Bl
cnR5QmFnLmgKKysrIGIvU291cmNlL1dlYktpdC93aW4vQ09NUHJvcGVydHlCYWcuaApAQCAtMTQ1
LDkgKzE0NSw5IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgQ09NUHJvcGVydHlCYWc8VmFs
dWVUeXBlLCBLZXlUeXBlLCBIYXNoVHlwZT46OlJlYWQoTFBDCiAKICAgICBWQVJUWVBFIHJlcXVl
c3RlZFR5cGUgPSBWX1ZUKHBWYXIpOwogICAgIFZfVlQocFZhcikgPSBWVF9FTVBUWTsKLSAgICBD
T01WYXJpYW50U2V0dGVyPFZhbHVlVHlwZT46OnNldFZhcmlhbnQocFZhciwgaXQtPnNlY29uZCk7
CisgICAgQ09NVmFyaWFudFNldHRlcjxWYWx1ZVR5cGU+OjpzZXRWYXJpYW50KHBWYXIsIGl0LT52
YWx1ZSk7CiAKLSAgICBpZiAocmVxdWVzdGVkVHlwZSAhPSBDT01WYXJpYW50U2V0dGVyPFZhbHVl
VHlwZT46OnZhcmlhbnRUeXBlKGl0LT5zZWNvbmQpICYmIHJlcXVlc3RlZFR5cGUgIT0gVlRfRU1Q
VFkpCisgICAgaWYgKHJlcXVlc3RlZFR5cGUgIT0gQ09NVmFyaWFudFNldHRlcjxWYWx1ZVR5cGU+
Ojp2YXJpYW50VHlwZShpdC0+dmFsdWUpICYmIHJlcXVlc3RlZFR5cGUgIT0gVlRfRU1QVFkpCiAg
ICAgICAgIHJldHVybiA6OlZhcmlhbnRDaGFuZ2VUeXBlKHBWYXIsIHBWYXIsIFZBUklBTlRfTk9V
U0VST1ZFUlJJREUgfCBWQVJJQU5UX0FMUEhBQk9PTCwgcmVxdWVzdGVkVHlwZSk7CiAKICAgICBy
ZXR1cm4gU19PSzsKQEAgLTIxNSwxMiArMjE1LDEyIEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZ
UEUgQ09NUHJvcGVydHlCYWc8VmFsdWVUeXBlLCBLZXlUeXBlLCBIYXNoVHlwZT46OkdldFByb3Bl
CiAgICAgICAgIC8vcFByb3BCYWdbal0uY2xzaWQ7ICAgIC8vIChDTFNJRCkgQ0xTSUQgb2YgdGhl
IG9iamVjdC4gVGhpcyBtZW1iZXIgaXMgdmFsaWQgb25seSBpZiBkd1R5cGUgaXMgUFJPUEJBRzJf
VFlQRV9PQkpFQ1QuCiAKICAgICAgICAgcFByb3BCYWdbal0uZHdUeXBlID0gUFJPUEJBRzJfVFlQ
RV9EQVRBOwotICAgICAgICBwUHJvcEJhZ1tqXS52dCA9IENPTVZhcmlhbnRTZXR0ZXI8VmFsdWVU
eXBlPjo6dmFyaWFudFR5cGUoY3VycmVudC0+c2Vjb25kKTsKKyAgICAgICAgcFByb3BCYWdbal0u
dnQgPSBDT01WYXJpYW50U2V0dGVyPFZhbHVlVHlwZT46OnZhcmlhbnRUeXBlKGN1cnJlbnQtPnZh
bHVlKTsKICAgICAgICAgcFByb3BCYWdbal0uZHdIaW50ID0gaVByb3BlcnR5ICsgajsKLSAgICAg
ICAgcFByb3BCYWdbal0ucHN0ck5hbWUgPSAoTFBPTEVTVFIpQ29UYXNrTWVtQWxsb2Moc2l6ZW9m
KHdjaGFyX3QpKihjdXJyZW50LT5maXJzdC5sZW5ndGgoKSsxKSk7CisgICAgICAgIHBQcm9wQmFn
W2pdLnBzdHJOYW1lID0gKExQT0xFU1RSKUNvVGFza01lbUFsbG9jKHNpemVvZih3Y2hhcl90KSoo
Y3VycmVudC0+a2V5Lmxlbmd0aCgpKzEpKTsKICAgICAgICAgaWYgKCFwUHJvcEJhZ1tqXS5wc3Ry
TmFtZSkKICAgICAgICAgICAgIHJldHVybiBFX09VVE9GTUVNT1JZOwotICAgICAgICB3Y3NjcHlf
cyhwUHJvcEJhZ1tqXS5wc3RyTmFtZSwgY3VycmVudC0+Zmlyc3QubGVuZ3RoKCkrMSwgc3RhdGlj
X2Nhc3Q8U3RyaW5nPihjdXJyZW50LT5maXJzdCkuY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRp
b24oKSk7CisgICAgICAgIHdjc2NweV9zKHBQcm9wQmFnW2pdLnBzdHJOYW1lLCBjdXJyZW50LT5r
ZXkubGVuZ3RoKCkrMSwgc3RhdGljX2Nhc3Q8U3RyaW5nPihjdXJyZW50LT5rZXkpLmNoYXJhY3Rl
cnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkpOwogICAgICAgICArKypwY1Byb3BlcnRpZXM7CiAgICAg
fQogICAgIHJldHVybiBTX09LOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vV2ViQ29y
ZVN0YXRpc3RpY3MuY3BwIGIvU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN0YXRpc3RpY3MuY3Bw
CmluZGV4IDBlMzA1NzY4MmQ2Y2M3MWI0NDRlY2RlZTExMjg4MzU1MzFlNzgwOGYuLjQzMDhmNTRm
OWM3YTFmYWIxODFmM2Q5YWU0YmQ5MmFiNWM1NTljZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvd2luL1dlYkNvcmVTdGF0aXN0aWNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJD
b3JlU3RhdGlzdGljcy5jcHAKQEAgLTE0NSw3ICsxNDUsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIFdlYkNvcmVTdGF0aXN0aWNzOjpqYXZhU2NyaXB0UHJvdGVjdGVkT2JqZWN0VHlwZUNv
dW50cwogICAgIEl0ZXJhdG9yIGVuZCA9IGpzT2JqZWN0VHlwZU5hbWVzLT5lbmQoKTsKICAgICBI
YXNoTWFwPFN0cmluZywgaW50PiB0eXBlQ291bnRNYXA7CiAgICAgZm9yIChJdGVyYXRvciBjdXJy
ZW50ID0ganNPYmplY3RUeXBlTmFtZXMtPmJlZ2luKCk7IGN1cnJlbnQgIT0gZW5kOyArK2N1cnJl
bnQpCi0gICAgICAgIHR5cGVDb3VudE1hcC5zZXQoY3VycmVudC0+Zmlyc3QsIGN1cnJlbnQtPnNl
Y29uZCk7CisgICAgICAgIHR5cGVDb3VudE1hcC5zZXQoY3VycmVudC0+a2V5LCBjdXJyZW50LT52
YWx1ZSk7CiAKICAgICBDT01QdHI8SVByb3BlcnR5QmFnMj4gcmVzdWx0cyhBZG9wdENPTSwgQ09N
UHJvcGVydHlCYWc8aW50Pjo6Y3JlYXRlSW5zdGFuY2UodHlwZUNvdW50TWFwKSk7CiAgICAgcmVz
dWx0cy5jb3B5UmVmVG8odHlwZU5hbWVzQW5kQ291bnRzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCmlu
ZGV4IDIzMGYzMzIzZjU0MjkxZDAxZTE0MTk4MTc4ZmEyMTZhNDhjMGNmNWIuLmYxMzBmNzZiZDJh
Njc2OTdhZGU3YTM2Nzg4NDUyNDNhOWY2YTcxYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
d2luL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAKKysrIGIvU291cmNl
L1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcApAQCAt
OTMsOCArOTMsOCBAQCB2b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Z2V0UGx1Z2luSW5mbyhj
b25zdCBXZWJDb3JlOjpQYWdlKiwgVmVjdG9yPFdlYkNvcmU6OgogICAgICAgICBmb3IgKE1JTUVU
b0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtaW1lVG9EZXNjcmlwdGlvbnMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBNaW1lQ2xhc3NJbmZvIG1p
bWU7CiAKLSAgICAgICAgICAgIG1pbWUudHlwZSA9IGl0LT5maXJzdDsKLSAgICAgICAgICAgIG1p
bWUuZGVzYyA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICBtaW1lLnR5cGUgPSBpdC0+a2V5Owor
ICAgICAgICAgICAgbWltZS5kZXNjID0gaXQtPnZhbHVlOwogICAgICAgICAgICAgbWltZS5leHRl
bnNpb25zID0gcGFja2FnZS0+bWltZVRvRXh0ZW5zaW9ucygpLmdldChtaW1lLnR5cGUpOwogCiAg
ICAgICAgICAgICBpbmZvLm1pbWVzLmFwcGVuZChtaW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvd2luL1dlYkhpc3RvcnkuY3BwIGIvU291cmNlL1dlYktpdC93aW4vV2ViSGlzdG9yeS5j
cHAKaW5kZXggZTg0MmMxNDA3MzVjNzE5OTFhNWQxMWU4YjlkM2I1N2Y3ZDVjZDI3Yi4uODIzMzVh
NzhhNzVmOGM4MjJkZDk5NmU1ZDY4OThjMzljMDRlM2IzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC93aW4vV2ViSGlzdG9yeS5jcHAKKysrIGIvU291cmNlL1dlYktpdC93aW4vV2ViSGlzdG9y
eS5jcHAKQEAgLTgzNCw3ICs4MzQsNyBAQCBIUkVTVUxUIFdlYkhpc3Rvcnk6OnJlbW92ZUl0ZW1G
cm9tRGF0ZUNhY2hlcyhJV2ViSGlzdG9yeUl0ZW0qIGVudHJ5KQogCiAgICAgRGF0ZVRvRW50cmll
c01hcDo6aXRlcmF0b3IgZm91bmQgPSBtX2VudHJpZXNCeURhdGUuZmluZChkYXRlS2V5KTsKICAg
ICBBU1NFUlQoZm91bmQgIT0gbV9lbnRyaWVzQnlEYXRlLmVuZCgpKTsKLSAgICBDRk11dGFibGVB
cnJheVJlZiBlbnRyaWVzRm9yRGF0ZSA9IGZvdW5kLT5zZWNvbmQuZ2V0KCk7CisgICAgQ0ZNdXRh
YmxlQXJyYXlSZWYgZW50cmllc0ZvckRhdGUgPSBmb3VuZC0+dmFsdWUuZ2V0KCk7CiAKICAgICBD
RkluZGV4IGNvdW50ID0gQ0ZBcnJheUdldENvdW50KGVudHJpZXNGb3JEYXRlKTsKICAgICBmb3Ig
KGludCBpID0gY291bnQgLSAxOyBpID49IDA7IC0taSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC93aW4vV2ViS2l0Q09NQVBJLmNwcCBiL1NvdXJjZS9XZWJLaXQvd2luL1dlYktpdENPTUFQ
SS5jcHAKaW5kZXggOWM5Y2MwMjZiNDdiNGZlYTk2MGM2Mzk4NDZlMGViYTUxYzQ2NTNjMi4uNGQ4
ZmYwOTViZGE5NjA3ZDI5YTE0NWI4NTdjNzhkZGZmOGUzNWU3YSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC93aW4vV2ViS2l0Q09NQVBJLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJL
aXRDT01BUEkuY3BwCkBAIC01Miw3ICs1Miw3IEBAIHN0YXRpYyBDT01QdHI8SUNsYXNzRmFjdG9y
eT4gY2xhc3NGYWN0b3J5KGNvbnN0IENMU0lEJiBjbHNpZCkKICAgICBzdGF0aWMgRmFjdG9yeU1h
cCYgZmFjdG9yaWVzID0gKm5ldyBGYWN0b3J5TWFwOwogCiAgICAgRmFjdG9yeU1hcDo6QWRkUmVz
dWx0IHJlc3VsdCA9IGZhY3Rvcmllcy5hZGQoY2xzaWQsIDApOwotICAgIENPTVB0cjxJQ2xhc3NG
YWN0b3J5PiYgZmFjdG9yeSA9IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgIENPTVB0cjxJ
Q2xhc3NGYWN0b3J5PiYgZmFjdG9yeSA9IHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYg
KHJlc3VsdC5pc05ld0VudHJ5ICYmIEZBSUxFRChEbGxHZXRDbGFzc09iamVjdChjbHNpZCwgX191
dWlkb2YoZmFjdG9yeSksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmZmFjdG9yeSkpKSkKICAg
ICAgICAgZmFjdG9yeSA9IDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYktp
dFN0YXRpc3RpY3MuY3BwIGIvU291cmNlL1dlYktpdC93aW4vV2ViS2l0U3RhdGlzdGljcy5jcHAK
aW5kZXggOWNkOTVjN2FjOTM1OTUzMDA3ZTE1N2RjYTc0ZTgwN2M0NWFlZTA2ZS4uYzdiOGVkMWFj
NzdjZTZlMTkyNmFhNWRiMjI0MjRmMmVlZTFhMzUwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC93aW4vV2ViS2l0U3RhdGlzdGljcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC93aW4vV2ViS2l0
U3RhdGlzdGljcy5jcHAKQEAgLTE0NCw5ICsxNDQsOSBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExU
WVBFIFdlYktpdFN0YXRpc3RpY3M6OmNvbUNsYXNzTmFtZUNvdW50cygKICAgICBJdGVyYXRvciBl
bmQgPSBnQ2xhc3NOYW1lQ291bnQuZW5kKCk7CiAgICAgVmVjdG9yPFVDaGFyPiB2ZWN0b3I7CiAg
ICAgZm9yIChJdGVyYXRvciBjdXJyZW50ID0gZ0NsYXNzTmFtZUNvdW50LmJlZ2luKCk7IGN1cnJl
bnQgIT0gZW5kOyArK2N1cnJlbnQpIHsKLSAgICAgICAgYXBwZW5kKHZlY3RvciwgU3RyaW5nOjpm
b3JtYXQoIiU0dSIsIGN1cnJlbnQtPnNlY29uZCkpOworICAgICAgICBhcHBlbmQodmVjdG9yLCBT
dHJpbmc6OmZvcm1hdCgiJTR1IiwgY3VycmVudC0+dmFsdWUpKTsKICAgICAgICAgdmVjdG9yLmFw
cGVuZCgnXHQnKTsKLSAgICAgICAgYXBwZW5kKHZlY3Rvciwgc3RhdGljX2Nhc3Q8U3RyaW5nPihj
dXJyZW50LT5maXJzdCkpOworICAgICAgICBhcHBlbmQodmVjdG9yLCBzdGF0aWNfY2FzdDxTdHJp
bmc+KGN1cnJlbnQtPmtleSkpOwogICAgICAgICB2ZWN0b3IuYXBwZW5kKCdcbicpOwogICAgIH0K
ICAgICAqb3V0cHV0ID0gQlN0cmluZyhTdHJpbmc6OmFkb3B0KHZlY3RvcikpLnJlbGVhc2UoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYk5vdGlmaWNhdGlvbkNlbnRlci5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJOb3RpZmljYXRpb25DZW50ZXIuY3BwCmluZGV4IGM3MTky
ZDhkM2NkYjJjZGFlMmJhYTcxYWU2MGY3YmE5ZDgxZWQ3ZWEuLjMxYzgxMTlhNTAyYjljZWU2NWU0
MjBiZjUxN2VlNzlhYTEyODQxYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYk5v
dGlmaWNhdGlvbkNlbnRlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC93aW4vV2ViTm90aWZpY2F0
aW9uQ2VudGVyLmNwcApAQCAtMTIwLDcgKzEyMCw3IEBAIHZvaWQgV2ViTm90aWZpY2F0aW9uQ2Vu
dGVyOjpwb3N0Tm90aWZpY2F0aW9uSW50ZXJuYWwoSVdlYk5vdGlmaWNhdGlvbiogbm90aWZpY2F0
CiAKICAgICAvLyBJbnRlbnRpb25hbGx5IG1ha2UgYSBjb3B5IG9mIHRoZSBsaXN0IHRvIGF2b2lk
IHRoZSBwb3NzaWJpbGl0eSBvZiBlcnJvcnMKICAgICAvLyBmcm9tIGEgbXV0YXRpb24gb2YgdGhl
IGxpc3QgaW4gdGhlIG9uTm90aWZ5IGNhbGxiYWNrLgotICAgIE9iamVjdE9ic2VydmVyTGlzdCBs
aXN0ID0gaXQtPnNlY29uZDsKKyAgICBPYmplY3RPYnNlcnZlckxpc3QgbGlzdCA9IGl0LT52YWx1
ZTsKIAogICAgIE9ic2VydmVyTGlzdEl0ZXJhdG9yIGVuZCA9IGxpc3QuZW5kKCk7CiAgICAgZm9y
IChPYnNlcnZlckxpc3RJdGVyYXRvciBpdDIgPSBsaXN0LmJlZ2luKCk7IGl0MiAhPSBlbmQ7ICsr
aXQyKSB7CkBAIC0xNDksNyArMTQ5LDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJO
b3RpZmljYXRpb25DZW50ZXI6OmFkZE9ic2VydmVyKAogICAgIFN0cmluZyBuYW1lKG5vdGlmaWNh
dGlvbk5hbWUsIFN5c1N0cmluZ0xlbihub3RpZmljYXRpb25OYW1lKSk7CiAgICAgTWFwcGVkT2Jz
ZXJ2ZXJzOjppdGVyYXRvciBpdCA9IGQtPm1fbWFwcGVkT2JzZXJ2ZXJzLmZpbmQobmFtZSk7CiAg
ICAgaWYgKGl0ICE9IGQtPm1fbWFwcGVkT2JzZXJ2ZXJzLmVuZCgpKQotICAgICAgICBpdC0+c2Vj
b25kLmFwcGVuZChPYmplY3RPYnNlcnZlclBhaXIoYW5PYmplY3QsIG9ic2VydmVyKSk7CisgICAg
ICAgIGl0LT52YWx1ZS5hcHBlbmQoT2JqZWN0T2JzZXJ2ZXJQYWlyKGFuT2JqZWN0LCBvYnNlcnZl
cikpOwogICAgIGVsc2UgewogICAgICAgICBPYmplY3RPYnNlcnZlckxpc3QgbGlzdDsKICAgICAg
ICAgbGlzdC5hcHBlbmQoT2JqZWN0T2JzZXJ2ZXJQYWlyKGFuT2JqZWN0LCBvYnNlcnZlcikpOwpA
QCAtMTk4LDcgKzE5OCw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViTm90aWZpY2F0
aW9uQ2VudGVyOjpyZW1vdmVPYnNlcnZlcigKICAgICBpZiAoaXQgPT0gZC0+bV9tYXBwZWRPYnNl
cnZlcnMuZW5kKCkpCiAgICAgICAgIHJldHVybiBFX0ZBSUw7CiAKLSAgICBPYmplY3RPYnNlcnZl
ckxpc3QmIG9ic2VydmVyTGlzdCA9IGl0LT5zZWNvbmQ7CisgICAgT2JqZWN0T2JzZXJ2ZXJMaXN0
JiBvYnNlcnZlckxpc3QgPSBpdC0+dmFsdWU7CiAgICAgT2JzZXJ2ZXJMaXN0SXRlcmF0b3IgZW5k
ID0gb2JzZXJ2ZXJMaXN0LmVuZCgpOwogCiAgICAgaW50IGkgPSAwOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC93aW5jZS9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2ll
c1dpbkNFLmNwcAppbmRleCAzZjhjOTA3YzczOWYwOGNkYjk5MTZlODM2ZjliMDhkZTY3ODQ1MWNm
Li5kNTU3OTcyMzExNjE1OTFkNWZkYjE3MTU4MDQ0NThkYjc4MmM5MWYyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNF
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3Ry
YXRlZ2llc1dpbkNFLmNwcApAQCAtOTQsOCArOTQsOCBAQCB2b2lkIFBsYXRmb3JtU3RyYXRlZ2ll
c1dpbkNFOjpnZXRQbHVnaW5JbmZvKGNvbnN0IFBhZ2UqLCBWZWN0b3I8UGx1Z2luSW5mbz4mIG91
dAogICAgICAgICBmb3IgKE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtaW1lVG9EZXNjcmlwdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAg
ICAgICBNaW1lQ2xhc3NJbmZvIG1pbWU7CiAKLSAgICAgICAgICAgIG1pbWUudHlwZSA9IGl0LT5m
aXJzdDsKLSAgICAgICAgICAgIG1pbWUuZGVzYyA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICBt
aW1lLnR5cGUgPSBpdC0+a2V5OworICAgICAgICAgICAgbWltZS5kZXNjID0gaXQtPnZhbHVlOwog
ICAgICAgICAgICAgbWltZS5leHRlbnNpb25zID0gcGFja2FnZS0+bWltZVRvRXh0ZW5zaW9ucygp
LmdldChtaW1lLnR5cGUpOwogCiAgICAgICAgICAgICBpbmZvLm1pbWVzLmFwcGVuZChtaW1lKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQXJndW1lbnRDb2Rl
cnMuaCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQXJndW1lbnRDb2RlcnMuaApp
bmRleCAwNzBmNDU4MzA3OWY3YjRlZWJmY2Y0YTJhODg4NDc4NmQ4YzU1NDBhLi40N2JkZGRmNjlj
OWNhZjNiN2EyNmU4MjJjNzcxMzljNDI3MGVlNzgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9QbGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50Q29kZXJzLmgKKysrIGIvU291cmNlL1dlYktpdDIv
UGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVudENvZGVycy5oCkBAIC03Miw2ICs3MiwyOSBAQCB0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxzdGQ6OnBh
aXI8VCwgVT4gPiB7CiAgICAgfQogfTsKIAordGVtcGxhdGU8dHlwZW5hbWUgS2V5VHlwZSwgdHlw
ZW5hbWUgTWFwcGVkVHlwZT4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V1RGOjpIYXNoTWFwRW50cnk8
S2V5VHlwZSwgTWFwcGVkVHlwZT4gPiB7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50
RW5jb2RlciogZW5jb2RlciwgY29uc3QgV1RGOjpIYXNoTWFwRW50cnk8S2V5VHlwZSwgTWFwcGVk
VHlwZT4mIGhhc2hNYXBFbnRyeSkKKyAgICB7CisgICAgICAgIGVuY29kZXItPmVuY29kZShoYXNo
TWFwRW50cnkua2V5KTsKKyAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKGhhc2hNYXBFbnRyeS52YWx1
ZSk7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciogZGVj
b2RlciwgV1RGOjpIYXNoTWFwRW50cnk8S2V5VHlwZSwgTWFwcGVkVHlwZT4mIGhhc2hNYXBFbnRy
eSkKKyAgICB7CisgICAgICAgIEtleVR5cGUga2V5OworICAgICAgICBpZiAoIWRlY29kZXItPmRl
Y29kZShrZXkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIE1hcHBlZFR5
cGUgdmFsdWU7CisgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHZhbHVlKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBoYXNoTWFwRW50cnkua2V5ID0ga2V5OworICAg
ICAgICBoYXNoTWFwRW50cnkudmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorfTsKKwogdGVtcGxhdGU8Ym9vbCBmaXhlZFNpemVFbGVtZW50cywgdHlwZW5hbWUgVD4g
c3RydWN0IFZlY3RvckFyZ3VtZW50Q29kZXI7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBWZWN0b3JBcmd1bWVudENvZGVyPGZhbHNlLCBUPiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uY3BwIGIvU291cmNlL1dlYktpdDIvUGxh
dGZvcm0vQ29yZUlQQy9Db25uZWN0aW9uLmNwcAppbmRleCBmN2MzNzIzZjdlZjdkZDIyOTFlYTU5
MTUwNjAwOTNkYzFjNDE4YmI1Li45MzJhYmIyM2NiNDAyM2VjOTM2NWI3ZmVmMzk0NTQ5ZmZkNjA4
NjMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rp
b24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5j
cHAKQEAgLTEwMywxMiArMTAzLDEyIEBAIFBhc3NSZWZQdHI8Q29ubmVjdGlvbjo6U3luY01lc3Nh
Z2VTdGF0ZT4gQ29ubmVjdGlvbjo6U3luY01lc3NhZ2VTdGF0ZTo6Z2V0T3JDcmVhCiAgICAgU3lu
Y01lc3NhZ2VTdGF0ZU1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IHN5bmNNZXNzYWdlU3RhdGVNYXAo
KS5hZGQocnVuTG9vcCwgMCk7CiAKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAg
ICAgIEFTU0VSVChyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7Ci0gICAgICAgIHJldHVybiByZXN1
bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgQVNTRVJUKHJlc3VsdC5pdGVyYXRvci0+dmFs
dWUpOworICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAgICB9CiAKICAg
ICBSZWZQdHI8U3luY01lc3NhZ2VTdGF0ZT4gc3luY01lc3NhZ2VTdGF0ZSA9IGFkb3B0UmVmKG5l
dyBTeW5jTWVzc2FnZVN0YXRlKHJ1bkxvb3ApKTsKLSAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29u
ZCA9IHN5bmNNZXNzYWdlU3RhdGUuZ2V0KCk7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9
IHN5bmNNZXNzYWdlU3RhdGUuZ2V0KCk7CiAKICAgICByZXR1cm4gc3luY01lc3NhZ2VTdGF0ZS5y
ZWxlYXNlKCk7CiB9CkBAIC0zNjMsMTAgKzM2MywxMCBAQCBQYXNzT3duUHRyPEFyZ3VtZW50RGVj
b2Rlcj4gQ29ubmVjdGlvbjo6d2FpdEZvck1lc3NhZ2UoTWVzc2FnZUlEIG1lc3NhZ2VJRCwgdWlu
dAogICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV93YWl0Rm9yTWVzc2FnZU11dGV4KTsKIAog
ICAgICAgICBIYXNoTWFwPHN0ZDo6cGFpcjx1bnNpZ25lZCwgdWludDY0X3Q+LCBBcmd1bWVudERl
Y29kZXIqPjo6aXRlcmF0b3IgaXQgPSBtX3dhaXRGb3JNZXNzYWdlTWFwLmZpbmQobWVzc2FnZUFu
ZERlc3RpbmF0aW9uKTsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQpIHsKKyAgICAgICAgaWYgKGl0
LT52YWx1ZSkgewogICAgICAgICAgICAgLy8gRklYTUU6IG1fd2FpdEZvck1lc3NhZ2VNYXAgc2hv
dWxkIHJlYWxseSBob2xkIE93blB0cnMgdG8KICAgICAgICAgICAgIC8vIEFyZ3VtZW50RGVjb2Rl
cnMsIGJ1dCBIYXNoTWFwIGRvZXNuJ3QgY3VycmVudGx5IHN1cHBvcnQgT3duUHRycy4KLSAgICAg
ICAgICAgIE93blB0cjxBcmd1bWVudERlY29kZXI+IGFyZ3VtZW50cyA9IGFkb3B0UHRyKGl0LT5z
ZWNvbmQpOworICAgICAgICAgICAgT3duUHRyPEFyZ3VtZW50RGVjb2Rlcj4gYXJndW1lbnRzID0g
YWRvcHRQdHIoaXQtPnZhbHVlKTsKICAgICAgICAgICAgIG1fd2FpdEZvck1lc3NhZ2VNYXAucmVt
b3ZlKGl0KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50cy5yZWxl
YXNlKCk7CkBAIC01NDAsOCArNTQwLDggQEAgdm9pZCBDb25uZWN0aW9uOjpwcm9jZXNzSW5jb21p
bmdNZXNzYWdlKE1lc3NhZ2VJRCBtZXNzYWdlSUQsIFBhc3NPd25QdHI8QXJndW1lbnQKICAgICAg
ICAgCiAgICAgICAgIEhhc2hNYXA8c3RkOjpwYWlyPHVuc2lnbmVkLCB1aW50NjRfdD4sIEFyZ3Vt
ZW50RGVjb2Rlcio+OjppdGVyYXRvciBpdCA9IG1fd2FpdEZvck1lc3NhZ2VNYXAuZmluZChzdGQ6
Om1ha2VfcGFpcihtZXNzYWdlSUQudG9JbnQoKSwgaW5jb21pbmdNZXNzYWdlLmRlc3RpbmF0aW9u
SUQoKSkpOwogICAgICAgICBpZiAoaXQgIT0gbV93YWl0Rm9yTWVzc2FnZU1hcC5lbmQoKSkgewot
ICAgICAgICAgICAgaXQtPnNlY29uZCA9IGluY29taW5nTWVzc2FnZS5yZWxlYXNlQXJndW1lbnRz
KCkubGVha1B0cigpOwotICAgICAgICAgICAgQVNTRVJUKGl0LT5zZWNvbmQpOworICAgICAgICAg
ICAgaXQtPnZhbHVlID0gaW5jb21pbmdNZXNzYWdlLnJlbGVhc2VBcmd1bWVudHMoKS5sZWFrUHRy
KCk7CisgICAgICAgICAgICBBU1NFUlQoaXQtPnZhbHVlKTsKICAgICAgICAgCiAgICAgICAgICAg
ICBtX3dhaXRGb3JNZXNzYWdlQ29uZGl0aW9uLnNpZ25hbCgpOwogICAgICAgICAgICAgcmV0dXJu
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vZ3RrL1dvcmtRdWV1ZUd0ay5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9ndGsvV29ya1F1ZXVlR3RrLmNwcAppbmRleCAx
ZGZhYjgzY2NmYjI0YzlmMDBlZTQwZDJkYWExYzk1YjE2MzgyYTQzLi42ODg1ZDQ4NWJkMTE2ZDMy
OGRlY2QwMmFhZjU0YzkxODc4MmIyZjE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybS9ndGsvV29ya1F1ZXVlR3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9n
dGsvV29ya1F1ZXVlR3RrLmNwcApAQCAtMTY2LDcgKzE2Niw3IEBAIHZvaWQgV29ya1F1ZXVlOjpy
ZWdpc3RlckV2ZW50U291cmNlSGFuZGxlcihpbnQgZmlsZURlc2NyaXB0b3IsIGludCBjb25kaXRp
b24sIGNvCiAgICAgICAgIFZlY3RvcjxFdmVudFNvdXJjZSo+IHNvdXJjZXM7CiAgICAgICAgIEV2
ZW50U291cmNlSXRlcmF0b3IgaXQgPSBtX2V2ZW50U291cmNlcy5maW5kKGZpbGVEZXNjcmlwdG9y
KTsKICAgICAgICAgaWYgKGl0ICE9IG1fZXZlbnRTb3VyY2VzLmVuZCgpKSAKLSAgICAgICAgICAg
IHNvdXJjZXMgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgc291cmNlcyA9IGl0LT52YWx1ZTsK
IAogICAgICAgICBzb3VyY2VzLmFwcGVuZChldmVudFNvdXJjZSk7CiAgICAgICAgIG1fZXZlbnRT
b3VyY2VzLnNldChmaWxlRGVzY3JpcHRvciwgc291cmNlcyk7CkBAIC0xODYsNyArMTg2LDcgQEAg
dm9pZCBXb3JrUXVldWU6OnVucmVnaXN0ZXJFdmVudFNvdXJjZUhhbmRsZXIoaW50IGZpbGVEZXNj
cmlwdG9yKQogICAgIEFTU0VSVChtX2V2ZW50U291cmNlcy5jb250YWlucyhmaWxlRGVzY3JpcHRv
cikpOwogCiAgICAgaWYgKGl0ICE9IG1fZXZlbnRTb3VyY2VzLmVuZCgpKSB7Ci0gICAgICAgIFZl
Y3RvcjxFdmVudFNvdXJjZSo+IHNvdXJjZXMgPSBpdC0+c2Vjb25kOworICAgICAgICBWZWN0b3I8
RXZlbnRTb3VyY2UqPiBzb3VyY2VzID0gaXQtPnZhbHVlOwogICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgc291cmNlcy5zaXplKCk7IGkrKykKICAgICAgICAgICAgIHNvdXJjZXNbaV0t
PmNhbmNlbCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9tYWMvV29y
a1F1ZXVlTWFjLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL21hYy9Xb3JrUXVldWVNYWMu
Y3BwCmluZGV4IGFlNDczZWU1Y2M4NGU1ODQyOWIwNDM5Y2NkOTIxYWMyYzQ5MmZmYWEuLjZlNTRj
ZWUwYjcwOTg0MGE1NGY3NmNkYWE0MjRmZWViNDYyOTA5YjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtL21hYy9Xb3JrUXVldWVNYWMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtL21hYy9Xb3JrUXVldWVNYWMuY3BwCkBAIC0xNTMsNyArMTUzLDcgQEAgdm9pZCBX
b3JrUXVldWU6OnVucmVnaXN0ZXJNYWNoUG9ydEV2ZW50SGFuZGxlcihtYWNoX3BvcnRfdCBtYWNo
UG9ydCkKICAgICAKICAgICBBU1NFUlQobV9ldmVudFNvdXJjZXMuY29udGFpbnMobWFjaFBvcnQp
KTsKIAotICAgIEV2ZW50U291cmNlKiBldmVudFNvdXJjZSA9IGl0LT5zZWNvbmQ7CisgICAgRXZl
bnRTb3VyY2UqIGV2ZW50U291cmNlID0gaXQtPnZhbHVlOwogICAgIC8vIENhbmNlbCBhbmQgcmVs
ZWFzZSB0aGUgc291cmNlLiBJdCB3aWxsIGJlIGRlbGV0ZWQgaW4gaXRzIGZpbmFsaXplIGhhbmRs
ZXIuCiAgICAgZGlzcGF0Y2hfc291cmNlX2NhbmNlbChldmVudFNvdXJjZS0+ZGlzcGF0Y2hTb3Vy
Y2UoKSk7CiAgICAgZGlzcGF0Y2hfcmVsZWFzZShldmVudFNvdXJjZS0+ZGlzcGF0Y2hTb3VyY2Uo
KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvUGx1Z2lucy9OUFJlbW90ZU9i
amVjdE1hcC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvUGx1Z2lucy9OUFJlbW90ZU9iamVj
dE1hcC5jcHAKaW5kZXggNzY0MWFmNWU4Yzg5MmQxZDM3ZWU5NmRhOWI3ZTYwNTg5OTczZTg4YS4u
YjVlYzJkOWRhMzlmMjZkY2I0MzIwZDk1ZTAzZjJmY2FlNGU3ZDdkZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvU2hhcmVkL1BsdWdpbnMvTlBSZW1vdGVPYmplY3RNYXAuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9QbHVnaW5zL05QUmVtb3RlT2JqZWN0TWFwLmNwcApAQCAtMjAw
LDcgKzIwMCw3IEBAIHZvaWQgTlBSZW1vdGVPYmplY3RNYXA6OnBsdWdpbkRlc3Ryb3llZChQbHVn
aW4qIHBsdWdpbikKIAogICAgIC8vIEdhdGhlciB0aGUgcmVjZWl2ZXJzIGFzc29jaWF0ZWQgd2l0
aCB0aGlzIHBsdWctaW4uCiAgICAgZm9yIChIYXNoTWFwPHVpbnQ2NF90LCBOUE9iamVjdE1lc3Nh
Z2VSZWNlaXZlcio+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcmVnaXN0ZXJlZE5QT2JqZWN0cy5i
ZWdpbigpLCBlbmQgPSBtX3JlZ2lzdGVyZWROUE9iamVjdHMuZW5kKCk7IGl0ICE9IGVuZDsgKytp
dCkgewotICAgICAgICBOUE9iamVjdE1lc3NhZ2VSZWNlaXZlciogbnBPYmplY3RNZXNzYWdlUmVj
ZWl2ZXIgPSBpdC0+c2Vjb25kOworICAgICAgICBOUE9iamVjdE1lc3NhZ2VSZWNlaXZlciogbnBP
YmplY3RNZXNzYWdlUmVjZWl2ZXIgPSBpdC0+dmFsdWU7CiAgICAgICAgIGlmIChucE9iamVjdE1l
c3NhZ2VSZWNlaXZlci0+cGx1Z2luKCkgPT0gcGx1Z2luKQogICAgICAgICAgICAgbWVzc2FnZVJl
Y2VpdmVycy5hcHBlbmQobnBPYmplY3RNZXNzYWdlUmVjZWl2ZXIpOwogICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Vc2VyTWVzc2FnZUNvZGVycy5oIGIvU291cmNlL1dl
YktpdDIvU2hhcmVkL1VzZXJNZXNzYWdlQ29kZXJzLmgKaW5kZXggYWNlNzJmZDJlMzNlM2JjMTE3
ZmMyZmE0NTVmMTVkODc3N2ZjMDAzZi4uNTdjMGMxNmIxMmEwZTUxNmQ5OTcxNTY4YTI5MzQ5YTY5
OTc3ZTNjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1VzZXJNZXNzYWdlQ29k
ZXJzLmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1VzZXJNZXNzYWdlQ29kZXJzLmgKQEAg
LTkzLDggKzkzLDggQEAgcHVibGljOgogICAgICAgICAgICAgSW1tdXRhYmxlRGljdGlvbmFyeTo6
TWFwVHlwZTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAuYmVnaW4oKTsKICAgICAgICAgICAgIElt
bXV0YWJsZURpY3Rpb25hcnk6Ok1hcFR5cGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC5lbmQo
KTsKICAgICAgICAgICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgICAg
ICBlbmNvZGVyLT5lbmNvZGUoaXQtPmZpcnN0KTsKLSAgICAgICAgICAgICAgICBlbmNvZGVyLT5l
bmNvZGUoT3duZXIoaXQtPnNlY29uZC5nZXQoKSkpOworICAgICAgICAgICAgICAgIGVuY29kZXIt
PmVuY29kZShpdC0+a2V5KTsKKyAgICAgICAgICAgICAgICBlbmNvZGVyLT5lbmNvZGUoT3duZXIo
aXQtPnZhbHVlLmdldCgpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByZWZl
cmVuY2VzU3RvcmUuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByZWZlcmVuY2VzU3Rv
cmUuY3BwCmluZGV4IDg2NjhiZWMwYzBhNGZjODEwMTllNzc3MGQwNjBkMzI1YWNiYTM1YmEuLjk3
ODRlNWZkODEwYzU4NDZlMjI4NjA5ODRiNDM3ZTE1NDk4ZTliYzIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9XZWJQcmVmZXJlbmNlc1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5jcHAKQEAgLTE1MSw3ICsxNTEsNyBAQCBz
dGF0aWMgdHlwZW5hbWUgTWFwVHlwZTo6TWFwcGVkVHlwZSB2YWx1ZUZvcktleShjb25zdCBNYXBU
eXBlJiBtYXAsIGNvbnN0IHR5cGVuYQogewogICAgIHR5cGVuYW1lIE1hcFR5cGU6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbWFwLmZpbmQoa2V5KTsKICAgICBpZiAoaXQgIT0gbWFwLmVuZCgpKQotICAg
ICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKIAogICAg
IHJldHVybiBkZWZhdWx0VmFsdWVGb3JLZXk8dHlwZW5hbWUgTWFwVHlwZTo6TWFwcGVkVHlwZT4o
a2V5KTsKIH0KQEAgLTE4Nyw3ICsxODcsNyBAQCBib29sIFdlYlByZWZlcmVuY2VzU3RvcmU6Omdl
dEJvb2xWYWx1ZUZvcktleShjb25zdCBTdHJpbmcmIGtleSkgY29uc3QKICAgICAvLyBGSVhNRTog
RXh0ZW5kIG92ZXJyaWRpbmcgdG8gb3RoZXIga2V5IHR5cGVzIHVzZWQgZnJvbSBMYXlvdXRUZXN0
Q29udHJvbGxlci4KICAgICBCb29sT3ZlcnJpZGVzTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGJv
b2xUZXN0UnVubmVyT3ZlcnJpZGVzTWFwKCkuZmluZChrZXkpOwogICAgIGlmIChpdCAhPSBib29s
VGVzdFJ1bm5lck92ZXJyaWRlc01hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gaXQtPnNlY29u
ZDsKKyAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKICAgICByZXR1cm4gdmFsdWVGb3JLZXkobV9i
b29sVmFsdWVzLCBrZXkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
Z3RrL1dlYkNvcmVBcmd1bWVudENvZGVyc0d0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
Z3RrL1dlYkNvcmVBcmd1bWVudENvZGVyc0d0ay5jcHAKaW5kZXggOWQ2ZTI1YzY2ZDg2YjNlMmYx
ZDk0Mzc0MzdiYTJmYWI0NjAyNWEzYi4uNDEzNzBiYWU3MzlhMmUwNzY2MjM2MTA5YmQ2MDM4OTk0
YWJjMmQwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9XZWJDb3JlQXJn
dW1lbnRDb2RlcnNHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvV2ViQ29y
ZUFyZ3VtZW50Q29kZXJzR3RrLmNwcApAQCAtMTQ0LDcgKzE0NCw3IEBAIGJvb2wgQXJndW1lbnRD
b2RlcjxSZXNvdXJjZVJlc3BvbnNlPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciogZGVjb2Rlciwg
UmVzb3VyY2VSCiAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoaGVhZGVycykpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
aGVhZGVycy5iZWdpbigpLCBlbmQgPSBoZWFkZXJzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpCi0g
ICAgICAgIHJlc3BvbnNlLnNldEhUVFBIZWFkZXJGaWVsZChpdC0+Zmlyc3QsIGl0LT5zZWNvbmQp
OworICAgICAgICByZXNwb25zZS5zZXRIVFRQSGVhZGVyRmllbGQoaXQtPmtleSwgaXQtPnZhbHVl
KTsKIAogICAgIHVpbnQzMl90IHNvdXBNZXNzYWdlRmxhZ3M7CiAgICAgaWYgKCFkZWNvZGVyLT5k
ZWNvZGUoc291cE1lc3NhZ2VGbGFncykpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvbWFjL1dlYkNvcmVBcmd1bWVudENvZGVyc01hYy5tbSBiL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9tYWMvV2ViQ29yZUFyZ3VtZW50Q29kZXJzTWFjLm1tCmluZGV4IDE5NmFiMTFjN2E3NDMxMDdk
MzgwMGUxZmY4ZmE1YmUxZjJiM2I4MTguLjBmOWQzZDhhM2JmYjczNzQzYjM5MzM1MzM1ZGM1ZjU4
YzFkMTQ3ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvV2ViQ29yZUFy
Z3VtZW50Q29kZXJzTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvV2ViQ29y
ZUFyZ3VtZW50Q29kZXJzTWFjLm1tCkBAIC0xODMsNyArMTgzLDcgQEAgYm9vbCBBcmd1bWVudENv
ZGVyPFJlc291cmNlRXJyb3I+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBSZXNv
dXJjZUVycm8KICAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBzdHJpbmdVc2VySW5mb01hcC5iZWdpbigpOwogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBzdHJpbmdVc2VySW5mb01hcC5lbmQoKTsKICAgICBmb3Ig
KDsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBbdXNlckluZm8gc2V0T2JqZWN0Om5zU3RyaW5n
KGl0LT5zZWNvbmQpIGZvcktleTpuc1N0cmluZyhpdC0+Zmlyc3QpXTsKKyAgICAgICAgW3VzZXJJ
bmZvIHNldE9iamVjdDpuc1N0cmluZyhpdC0+dmFsdWUpIGZvcktleTpuc1N0cmluZyhpdC0+a2V5
KV07CiAKICAgICBpZiAoY2VydGlmaWNhdGUuY2VydGlmaWNhdGVDaGFpbigpKQogICAgICAgICBb
dXNlckluZm8gc2V0T2JqZWN0OihOU0FycmF5ICopY2VydGlmaWNhdGUuY2VydGlmaWNhdGVDaGFp
bigpIGZvcktleTpAIk5TRXJyb3JQZWVyQ2VydGlmaWNhdGVDaGFpbktleSJdOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL3F0L0FyZ3VtZW50Q29kZXJzUXQuY3BwIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL3F0L0FyZ3VtZW50Q29kZXJzUXQuY3BwCmluZGV4IGM4OWJmNDRmMTcx
OTBiMDJjNDExMmJjYmVkNmUwYzQxZmEzYzY3NWYuLmE0MzljYWZmMWU0ODhlMTAyYzU1MGFkMDRm
MzQ2ZDU5OTZkZDE4OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9Bcmd1
bWVudENvZGVyc1F0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvQXJndW1lbnRD
b2RlcnNRdC5jcHAKQEAgLTg2LDggKzg2LDggQEAgYm9vbCBBcmd1bWVudENvZGVyPFdlYkNvcmU6
OkRyYWdEYXRhPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgRHJhZ0RhdGEKICAg
ICAgICAgTUlNRURhdGFIYXNoTWFwOjppdGVyYXRvciBpdCA9IG1hcC5iZWdpbigpOwogICAgICAg
ICBNSU1FRGF0YUhhc2hNYXA6Oml0ZXJhdG9yIGVuZCA9IG1hcC5lbmQoKTsKICAgICAgICAgZm9y
ICg7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgUUJ5dGVBcnJheSBieXRlcygoY2hh
ciopaXQtPnNlY29uZC5kYXRhKCksIGl0LT5zZWNvbmQuc2l6ZSgpKTsKLSAgICAgICAgICAgIG1p
bWVEYXRhLT5zZXREYXRhKGl0LT5maXJzdCwgYnl0ZXMpOworICAgICAgICAgICAgUUJ5dGVBcnJh
eSBieXRlcygoY2hhciopaXQtPnZhbHVlLmRhdGEoKSwgaXQtPnZhbHVlLnNpemUoKSk7CisgICAg
ICAgICAgICBtaW1lRGF0YS0+c2V0RGF0YShpdC0+a2V5LCBieXRlcyk7CiAgICAgICAgIH0KICAg
ICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFdlYlZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vi
Vmlldy5jcHAKaW5kZXggMWI0M2VhNTM2YzFkZjQyOGZiYjYwMzRjMTEyNDVjNmEyMTA1ZTU1Yy4u
MmI2MmExZjYxMDI3OWMxOGE5MTkyYmVmYTkyNDg3ZjNkZDEwNmUzMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKQEAgLTE3MTUs
NyArMTcxNSw3IEBAIEdMaXN0KiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3N1YnJlc291cmNlcyhXZWJL
aXRXZWJWaWV3KiB3ZWJWaWV3KQogICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiBwcml2ID0gd2Vi
Vmlldy0+cHJpdjsKICAgICBSZXNvdXJjZXNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHByaXYt
PnN1YnJlc291cmNlc01hcC5lbmQoKTsKICAgICBmb3IgKFJlc291cmNlc01hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBwcml2LT5zdWJyZXNvdXJjZXNNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KQotICAgICAgICBzdWJyZXNvdXJjZXMgPSBnX2xpc3RfcHJlcGVuZChzdWJyZXNvdXJjZXMsIGl0
LT5zZWNvbmQuZ2V0KCkpOworICAgICAgICBzdWJyZXNvdXJjZXMgPSBnX2xpc3RfcHJlcGVuZChz
dWJyZXNvdXJjZXMsIGl0LT52YWx1ZS5nZXQoKSk7CiAKICAgICByZXR1cm4gZ19saXN0X3JldmVy
c2Uoc3VicmVzb3VyY2VzKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvbWFjL1dLUHJpbnRpbmdWaWV3Lm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9tYWMvV0tQcmludGluZ1ZpZXcubW0KaW5kZXggMzEyNThmMjAxYjk4MjY4NDAzOTA0OGI0MDhj
NmIzNzA0NTcwYTg1Ny4uMjRlNzNjOWRhMDNlOTAwNmMxZGJiYjVkM2VhYjE5OWI3ZGEzZDhlZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tQcmludGluZ1Zp
ZXcubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tQcmludGluZ1Zp
ZXcubW0KQEAgLTE5Myw4ICsxOTMsOCBAQCBzdGF0aWMgQk9PTCBpc0ZvcmNpbmdQcmV2aWV3VXBk
YXRlOwogLSAodWludDY0X3QpX2V4cGVjdGVkUHJldmlld0NhbGxiYWNrRm9yUmVjdDooY29uc3Qg
SW50UmVjdCYpcmVjdAogewogICAgIGZvciAoSGFzaE1hcDx1aW50NjRfdCwgV2ViQ29yZTo6SW50
UmVjdD46Oml0ZXJhdG9yIGl0ZXIgPSBfZXhwZWN0ZWRQcmV2aWV3Q2FsbGJhY2tzLmJlZ2luKCk7
IGl0ZXIgIT0gX2V4cGVjdGVkUHJldmlld0NhbGxiYWNrcy5lbmQoKTsgKytpdGVyKSB7Ci0gICAg
ICAgIGlmIChpdGVyLT5zZWNvbmQgID09IHJlY3QpCi0gICAgICAgICAgICByZXR1cm4gaXRlci0+
Zmlyc3Q7CisgICAgICAgIGlmIChpdGVyLT52YWx1ZSAgPT0gcmVjdCkKKyAgICAgICAgICAgIHJl
dHVybiBpdGVyLT5rZXk7CiAgICAgfQogICAgIHJldHVybiAwOwogfQpAQCAtMjI4LDggKzIyOCw4
IEBAIHN0YXRpYyB2b2lkIHBhZ2VEaWREcmF3VG9QREYoV0tEYXRhUmVmIGRhdGFSZWYsIFdLRXJy
b3JSZWYsIHZvaWQqIHVudHlwZWRDb250ZXh0CiAgICAgICAgICAgICBBU1NFUlQoW3ZpZXcgX2lz
UHJpbnRpbmdQcmV2aWV3XSk7CiAKICAgICAgICAgICAgIGlmIChkYXRhKSB7Ci0gICAgICAgICAg
ICAgICAgSGFzaE1hcDxXZWJDb3JlOjpJbnRSZWN0LCBWZWN0b3I8dWludDhfdD4gPjo6QWRkUmVz
dWx0IGVudHJ5ID0gdmlldy0+X3BhZ2VQcmV2aWV3cy5hZGQoaXRlci0+c2Vjb25kLCBWZWN0b3I8
dWludDhfdD4oKSk7Ci0gICAgICAgICAgICAgICAgZW50cnkuaXRlcmF0b3ItPnNlY29uZC5hcHBl
bmQoZGF0YS0+Ynl0ZXMoKSwgZGF0YS0+c2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBIYXNoTWFw
PFdlYkNvcmU6OkludFJlY3QsIFZlY3Rvcjx1aW50OF90PiA+OjpBZGRSZXN1bHQgZW50cnkgPSB2
aWV3LT5fcGFnZVByZXZpZXdzLmFkZChpdGVyLT52YWx1ZSwgVmVjdG9yPHVpbnQ4X3Q+KCkpOwor
ICAgICAgICAgICAgICAgIGVudHJ5Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQoZGF0YS0+Ynl0ZXMo
KSwgZGF0YS0+c2l6ZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHZpZXctPl9leHBl
Y3RlZFByZXZpZXdDYWxsYmFja3MucmVtb3ZlKGNvbnRleHQtPmNhbGxiYWNrSUQpOwogICAgICAg
ICAgICAgYm9vbCByZWNlaXZlZFJlc3BvbnNlVG9MYXRlc3RSZXF1ZXN0ID0gdmlldy0+X2xhdGVz
dEV4cGVjdGVkUHJldmlld0NhbGxiYWNrID09IGNvbnRleHQtPmNhbGxiYWNrSUQ7CkBAIC01MjAs
NyArNTIwLDcgQEAgc3RhdGljIENsYXNzIHBkZkRvY3VtZW50Q2xhc3MoKQogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBwZGZEYXRhQnl0ZXMgPSBw
YWdlUHJldmlld0l0ZXJhdG9yLT5zZWNvbmQ7CisgICAgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBw
ZGZEYXRhQnl0ZXMgPSBwYWdlUHJldmlld0l0ZXJhdG9yLT52YWx1ZTsKICAgICBSZXRhaW5QdHI8
TlNEYXRhPiBwZGZEYXRhKEFkb3B0TlMsIFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOnBk
ZkRhdGFCeXRlcy5kYXRhKCkgbGVuZ3RoOnBkZkRhdGFCeXRlcy5zaXplKCldKTsKICAgICBSZXRh
aW5QdHI8UERGRG9jdW1lbnQ+IHBkZkRvY3VtZW50KEFkb3B0TlMsIFtbcGRmRG9jdW1lbnRDbGFz
cygpIGFsbG9jXSBpbml0V2l0aERhdGE6cGRmRGF0YS5nZXQoKV0pOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0KaW5kZXggNjFlM2I2MDc1ZDQwODI1Y2EzZWE3
NjNjODAwY2E2ZWIxYzIxODVhOS4uMWNkODIwMjUwYWU5MThjMjEzYjg1ZjJjNjY5MjRhNzJiYzlj
OTljZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3
Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQpAQCAt
NDE0LDcgKzQxNCw3IEBAIHN0YXRpYyBTdHJpbmcgY29tbWFuZE5hbWVGb3JTZWxlY3RvcihTRUwg
c2VsZWN0b3IpCiAgICAgc3RhdGljIGNvbnN0IFNlbGVjdG9yTmFtZU1hcCogZXhjZXB0aW9uTWFw
ID0gY3JlYXRlU2VsZWN0b3JFeGNlcHRpb25NYXAoKTsKICAgICBTZWxlY3Rvck5hbWVNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gZXhjZXB0aW9uTWFwLT5maW5kKHNlbGVjdG9yKTsKICAgICBpZiAo
aXQgIT0gZXhjZXB0aW9uTWFwLT5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7Cisg
ICAgICAgIHJldHVybiBpdC0+dmFsdWU7CiAgICAgCiAgICAgLy8gUmVtb3ZlIHRoZSB0cmFpbGlu
ZyBjb2xvbi4KICAgICAvLyBObyBuZWVkIHRvIGNhcGl0YWxpemUgdGhlIGNvbW1hbmQgbmFtZSBz
aW5jZSBFZGl0b3IgY29tbWFuZCBuYW1lcyBhcmUKQEAgLTcyMiw3ICs3MjIsNyBAQCBzdGF0aWMg
dm9pZCB2YWxpZGF0ZUNvbW1hbmRDYWxsYmFjayhXS1N0cmluZ1JlZiBjb21tYW5kTmFtZSwgYm9v
bCBpc0VuYWJsZWQsIGludAogCiAgICAgLy8gQWRkIHRoaXMgaXRlbSB0byB0aGUgdmVjdG9yIG9m
IGl0ZW1zIGZvciBhIGdpdmVuIGNvbW1hbmQgdGhhdCBhcmUgYXdhaXRpbmcgdmFsaWRhdGlvbi4K
ICAgICBWYWxpZGF0aW9uTWFwOjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gX2RhdGEtPl92YWxpZGF0
aW9uTWFwLmFkZChjb21tYW5kTmFtZSwgVmFsaWRhdGlvblZlY3RvcigpKTsKLSAgICBhZGRSZXN1
bHQuaXRlcmF0b3ItPnNlY29uZC5hcHBlbmQoaXRlbSk7CisgICAgYWRkUmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZS5hcHBlbmQoaXRlbSk7CiAgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KSB7CiAg
ICAgICAgIC8vIElmIHdlIGFyZSBub3QgYWxyZWFkeSBhd2FpdGluZyB2YWxpZGF0aW9uIGZvciB0
aGlzIGNvbW1hbmQsIHN0YXJ0IHRoZSBhc3luY2hyb25vdXMgdmFsaWRhdGlvbiBwcm9jZXNzLgog
ICAgICAgICAvLyBGSVhNRTogVGhlb3JldGljYWxseSwgdGhlcmUgaXMgYSByYWNlIGhlcmU7IHdo
ZW4gd2UgZ2V0IHRoZSBhbnN3ZXIgaXQgbWlnaHQgYmUgb2xkLCBmcm9tIGEgcHJldmlvdXMgdGlt
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0dlb2xvY2F0aW9uUGVybWlz
c2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0dl
b2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuY3BwCmluZGV4IDcxYmVhZjVh
NWMzMWQ0NTVjYThkMmIxYTI4ODFjYTJhNzI3MTQ3YjIuLjBkNDE2MzU1NDY1ZmY5MGRhNmJjZjA4
ZWMzNWI4NGMxNzFhNTM5OTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9H
ZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94
eS5jcHAKQEAgLTQyLDcgKzQyLDcgQEAgdm9pZCBHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0
TWFuYWdlclByb3h5OjppbnZhbGlkYXRlUmVxdWVzdHMoKQogICAgIFBlbmRpbmdSZXF1ZXN0TWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGVuZGluZ1JlcXVlc3RzLmJlZ2luKCk7CiAgICAgUGVu
ZGluZ1JlcXVlc3RNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGVuZGluZ1JlcXVlc3RzLmVu
ZCgpOwogICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPmlu
dmFsaWRhdGUoKTsKKyAgICAgICAgaXQtPnZhbHVlLT5pbnZhbGlkYXRlKCk7CiAKICAgICBtX3Bl
bmRpbmdSZXF1ZXN0cy5jbGVhcigpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL05vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2Vy
UHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL05vdGlmaWNhdGlvbnMvTm90aWZp
Y2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuY3BwCmluZGV4IDA3OTIyOTg1ZTQ1
NjVmM2M3M2NhZGMzYTBjZjQ1NTIxN2M2MTk5NjkuLjRhMGM0NzUyOTM3Yjg3MmQ1ZGUyNjljOTE2
OTRlMjIxOGQzMjBlMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Ob3Rp
ZmljYXRpb25zL05vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb25Q
ZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5jcHAKQEAgLTQzLDcgKzQzLDcgQEAgdm9pZCBO
b3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eTo6aW52YWxpZGF0ZVJlcXVl
c3RzKCkKICAgICBQZW5kaW5nUmVxdWVzdE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BlbmRp
bmdSZXF1ZXN0cy5iZWdpbigpOwogICAgIFBlbmRpbmdSZXF1ZXN0TWFwOjpjb25zdF9pdGVyYXRv
ciBlbmQgPSBtX3BlbmRpbmdSZXF1ZXN0cy5lbmQoKTsKICAgICBmb3IgKDsgaXQgIT0gZW5kOyAr
K2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5pbnZhbGlkYXRlKCk7CisgICAgICAgIGl0LT52YWx1
ZS0+aW52YWxpZGF0ZSgpOwogICAgIAogICAgIG1fcGVuZGluZ1JlcXVlc3RzLmNsZWFyKCk7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9j
ZXNzUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJv
Y2Vzc1Byb3h5LmNwcAppbmRleCA0M2ZhMmY0Y2JiMDQwOTJiMmMxOTAyYmU5MGNhOTFlOGQ0NDYw
ODc1Li4zNjlhZGUyZGRjMjY1MzAzZDgwNDJkNWUzMzJmMDJjYTQwMjQ3ZGNjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzUHJveHkuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NQcm94
eS5jcHAKQEAgLTE0NiwxMCArMTQ2LDEwIEBAIHZvaWQgUGx1Z2luUHJvY2Vzc1Byb3h5OjpwbHVn
aW5Qcm9jZXNzQ3Jhc2hlZE9yRmFpbGVkVG9MYXVuY2goKQogICAgIH0KIAogICAgIHdoaWxlICgh
bV9wZW5kaW5nR2V0U2l0ZXNSZXBsaWVzLmlzRW1wdHkoKSkKLSAgICAgICAgZGlkR2V0U2l0ZXNX
aXRoRGF0YShWZWN0b3I8U3RyaW5nPigpLCBtX3BlbmRpbmdHZXRTaXRlc1JlcGxpZXMuYmVnaW4o
KS0+Zmlyc3QpOworICAgICAgICBkaWRHZXRTaXRlc1dpdGhEYXRhKFZlY3RvcjxTdHJpbmc+KCks
IG1fcGVuZGluZ0dldFNpdGVzUmVwbGllcy5iZWdpbigpLT5rZXkpOwogCiAgICAgd2hpbGUgKCFt
X3BlbmRpbmdDbGVhclNpdGVEYXRhUmVwbGllcy5pc0VtcHR5KCkpCi0gICAgICAgIGRpZENsZWFy
U2l0ZURhdGEobV9wZW5kaW5nQ2xlYXJTaXRlRGF0YVJlcGxpZXMuYmVnaW4oKS0+Zmlyc3QpOwor
ICAgICAgICBkaWRDbGVhclNpdGVEYXRhKG1fcGVuZGluZ0NsZWFyU2l0ZURhdGFSZXBsaWVzLmJl
Z2luKCktPmtleSk7CiAKICAgICAvLyBUZWxsIHRoZSBwbHVnLWluIHByb2Nlc3MgbWFuYWdlciB0
byBmb3JnZXQgYWJvdXQgdGhpcyBwbHVnLWluIHByb2Nlc3MgcHJveHkuIFRoaXMgbWF5IGNhdXNl
IHVzIHRvIGJlIGRlbGV0ZWQuCiAgICAgbV9wbHVnaW5Qcm9jZXNzTWFuYWdlci0+cmVtb3ZlUGx1
Z2luUHJvY2Vzc1Byb3h5KHRoaXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYkNvbnRleHQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHQu
Y3BwCmluZGV4IDJlY2ZmOWQ0YjA3NzE5NGIwNTg1YTNmMWQ5NDIwNjVlYTJmMmI1NWMuLjJmMzMz
OGY1YjkxZmJlMGNhZDI0MjUwZjc0MDcyNjM2ODRiZTU2ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViQ29udGV4dC5jcHAKQEAgLTg3MCw3ICs4NzAsNyBAQCBzdGF0aWMgUGFzc1JlZlB0
cjxNdXRhYmxlRGljdGlvbmFyeT4gY3JlYXRlRGljdGlvbmFyeUZyb21IYXNoTWFwKGNvbnN0IEhh
c2hNYXA8UwogICAgIFJlZlB0cjxNdXRhYmxlRGljdGlvbmFyeT4gcmVzdWx0ID0gTXV0YWJsZURp
Y3Rpb25hcnk6OmNyZWF0ZSgpOwogICAgIEhhc2hNYXA8U3RyaW5nLCB1aW50NjRfdD46OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IG1hcC5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCB1aW50
NjRfdD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkK
LSAgICAgICAgcmVzdWx0LT5zZXQoaXQtPmZpcnN0LCBSZWZQdHI8V2ViVUludDY0PihXZWJVSW50
NjQ6OmNyZWF0ZShpdC0+c2Vjb25kKSkuZ2V0KCkpOworICAgICAgICByZXN1bHQtPnNldChpdC0+
a2V5LCBSZWZQdHI8V2ViVUludDY0PihXZWJVSW50NjQ6OmNyZWF0ZShpdC0+dmFsdWUpKS5nZXQo
KSk7CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJJY29uRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYkljb25EYXRhYmFzZS5jcHAKaW5kZXggODAxNmNmYmQ2ZTdlMWY3NjhhYThkMTZjMjVl
Y2M3ZjZiMDc5MzVmYy4uZWYzMzJmYTJhYzZkODdkNzVmMzVjZjQxZmU4ZjBjODA3OWI1YjE2MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkljb25EYXRhYmFzZS5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkljb25EYXRhYmFzZS5jcHAKQEAgLTI1
MCwxNCArMjUwLDE0IEBAIHZvaWQgV2ViSWNvbkRhdGFiYXNlOjpkaWRGaW5pc2hVUkxJbXBvcnQo
KQogICAgIEhhc2hNYXA8dWludDY0X3QsIFN0cmluZz46Oml0ZXJhdG9yIGVuZCA9IG1fcGVuZGlu
Z0xvYWREZWNpc2lvblVSTE1hcC5lbmQoKTsKICAgICAKICAgICBmb3IgKDsgaSAhPSBlbmQ7ICsr
aSkgewotICAgICAgICBMT0coSWNvbkRhdGFiYXNlLCAiV0syIFVJUHJvY2VzcyBwZXJmb3JtaW5n
IGRlbGF5ZWQgY2FsbGJhY2sgb24gY2FsbGJhY2sgSUQgJWkgZm9yIHBhZ2UgdXJsICVzIiwgKGlu
dClpLT5maXJzdCwgaS0+c2Vjb25kLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgSWNvbkxvYWRE
ZWNpc2lvbiBkZWNpc2lvbiA9IG1faWNvbkRhdGFiYXNlSW1wbC0+c3luY2hyb25vdXNMb2FkRGVj
aXNpb25Gb3JJY29uVVJMKGktPnNlY29uZCwgMCk7CisgICAgICAgIExPRyhJY29uRGF0YWJhc2Us
ICJXSzIgVUlQcm9jZXNzIHBlcmZvcm1pbmcgZGVsYXllZCBjYWxsYmFjayBvbiBjYWxsYmFjayBJ
RCAlaSBmb3IgcGFnZSB1cmwgJXMiLCAoaW50KWktPmtleSwgaS0+dmFsdWUuYXNjaWkoKS5kYXRh
KCkpOworICAgICAgICBJY29uTG9hZERlY2lzaW9uIGRlY2lzaW9uID0gbV9pY29uRGF0YWJhc2VJ
bXBsLT5zeW5jaHJvbm91c0xvYWREZWNpc2lvbkZvckljb25VUkwoaS0+dmFsdWUsIDApOwogCiAg
ICAgICAgIC8vIERlY2lzaW9ucyBzaG91bGQgbmV2ZXIgYmUgdW5rbm93biBhZnRlciB0aGUgaW5p
dGFsIGltcG9ydCBpcyBjb21wbGV0ZQogICAgICAgICBBU1NFUlQoZGVjaXNpb24gIT0gSWNvbkxv
YWRVbmtub3duKTsKIAogICAgICAgICAvLyBGSVhNRSAoTXVsdGktV2ViUHJvY2Vzcyk6IFdlIG5l
ZWQgdG8ga25vdyB3aGljaCBjb25uZWN0aW9uIHRvIHNlbmQgdGhpcyBtZXNzYWdlIHRvLgotICAg
ICAgICBtX3dlYkNvbnRleHQtPnNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViSWNvbkRh
dGFiYXNlUHJveHk6OlJlY2VpdmVkSWNvbkxvYWREZWNpc2lvbihzdGF0aWNfY2FzdDxpbnQ+KGRl
Y2lzaW9uKSwgaS0+Zmlyc3QpKTsKKyAgICAgICAgbV93ZWJDb250ZXh0LT5zZW5kVG9BbGxQcm9j
ZXNzZXMoTWVzc2FnZXM6OldlYkljb25EYXRhYmFzZVByb3h5OjpSZWNlaXZlZEljb25Mb2FkRGVj
aXNpb24oc3RhdGljX2Nhc3Q8aW50PihkZWNpc2lvbiksIGktPmtleSkpOwogICAgIH0KICAgICAK
ICAgICBtX3BlbmRpbmdMb2FkRGVjaXNpb25VUkxNYXAuY2xlYXIoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJlci5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIuY3BwCmluZGV4IGQ3NzYyODdl
MDFkNzg5MWE1MzYzOTYwZTJiMTM2MjRhNWMzNzdlMWQuLmQzNDMyNGI1NDI4NGY0MjI0MGZkZjE1
MTBlOTNjNTMxZTc3NDRmMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJMYXllclRyZWVSZW5kZXJlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YkxheWVyVHJlZVJlbmRlcmVyLmNwcApAQCAtMTcyLDcgKzE3Miw3IEBAIHZvaWQgV2ViTGF5ZXJU
cmVlUmVuZGVyZXI6OnN5bmNMYXllclBhcmFtZXRlcnMoY29uc3QgV2ViTGF5ZXJJbmZvJiBsYXll
ckluZm8pCiAgICAgV2ViTGF5ZXJJRCBpZCA9IGxheWVySW5mby5pZDsKICAgICBlbnN1cmVMYXll
cihpZCk7CiAgICAgTGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9sYXllcnMuZmluZChpZCk7Ci0g
ICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBpdC0+c2Vjb25kOworICAgIEdyYXBoaWNzTGF5ZXIq
IGxheWVyID0gaXQtPnZhbHVlOwogCiAgICAgbGF5ZXItPnNldE5hbWUobGF5ZXJJbmZvLm5hbWUp
OwogCkBAIC0zMjMsNyArMzIzLDcgQEAgdm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6YXNzaWdu
SW1hZ2VUb0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBpbnQ2NF90IGltYWcKIAogICAgIEhh
c2hNYXA8aW50NjRfdCwgUmVmUHRyPFRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmU+ID46Oml0ZXJh
dG9yIGl0ID0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuZmluZChpbWFnZUlEKTsKICAgICBB
U1NFUlQoaXQgIT0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuZW5kKCkpOwotICAgIGxheWVy
LT5zZXRDb250ZW50c1RvTWVkaWEoaXQtPnNlY29uZC5nZXQoKSk7CisgICAgbGF5ZXItPnNldENv
bnRlbnRzVG9NZWRpYShpdC0+dmFsdWUuZ2V0KCkpOwogfQogCiB2b2lkIFdlYkxheWVyVHJlZVJl
bmRlcmVyOjpjb21taXRUaWxlT3BlcmF0aW9ucygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJQcm9jZXNzUHJveHkuY3BwCmluZGV4IGU4ZGZkODE2OGM3YTI3MTI2NGFjZjVjNzFkZDkw
MmMwYTc0NTViODYuLjRhYjI1NDMyOGU1ZDM2NTRmM2MxZGM3YmMxNWVmZmVjMWVlMmRhN2MgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCkBAIC0yNDgs
OSArMjQ4LDkgQEAgYm9vbCBXZWJQcm9jZXNzUHJveHk6OmNoZWNrVVJMUmVjZWl2ZWRGcm9tV2Vi
UHJvY2Vzcyhjb25zdCBLVVJMJiB1cmwpCiAgICAgLy8gSXRlbXMgaW4gYmFjay9mb3J3YXJkIGxp
c3QgaGF2ZSBiZWVuIGFscmVhZHkgY2hlY2tlZC4KICAgICAvLyBPbmUgY2FzZSB3aGVyZSB3ZSBk
b24ndCBoYXZlIHNhbmRib3ggZXh0ZW5zaW9ucyBmb3IgZmlsZSBVUkxzIGluIGIvZiBsaXN0IGlz
IGlmIHRoZSBsaXN0IGhhcyBiZWVuIHJlaW5zdGF0ZWQgYWZ0ZXIgYSBjcmFzaCBvciBhIGJyb3dz
ZXIgcmVzdGFydC4KICAgICBmb3IgKFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW1NYXA6Oml0ZXJhdG9y
IGl0ZXIgPSBtX2JhY2tGb3J3YXJkTGlzdEl0ZW1NYXAuYmVnaW4oKSwgZW5kID0gbV9iYWNrRm9y
d2FyZExpc3RJdGVtTWFwLmVuZCgpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0gICAgICAgIGlm
IChLVVJMKEtVUkwoKSwgaXRlci0+c2Vjb25kLT51cmwoKSkuZmlsZVN5c3RlbVBhdGgoKSA9PSBw
YXRoKQorICAgICAgICBpZiAoS1VSTChLVVJMKCksIGl0ZXItPnZhbHVlLT51cmwoKSkuZmlsZVN5
c3RlbVBhdGgoKSA9PSBwYXRoKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlm
IChLVVJMKEtVUkwoKSwgaXRlci0+c2Vjb25kLT5vcmlnaW5hbFVSTCgpKS5maWxlU3lzdGVtUGF0
aCgpID09IHBhdGgpCisgICAgICAgIGlmIChLVVJMKEtVUkwoKSwgaXRlci0+dmFsdWUtPm9yaWdp
bmFsVVJMKCkpLmZpbGVTeXN0ZW1QYXRoKCkgPT0gcGF0aCkKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KIApAQCAtMjczLDE1ICsyNzMsMTUgQEAgdm9pZCBXZWJQcm9jZXNzUHJveHk6
OmFkZEJhY2tGb3J3YXJkSXRlbSh1aW50NjRfdCBpdGVtSUQsIGNvbnN0IFN0cmluZyYgb3JpZ2lu
YWwKIAogICAgIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW1NYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBt
X2JhY2tGb3J3YXJkTGlzdEl0ZW1NYXAuYWRkKGl0ZW1JRCwgMCk7CiAgICAgaWYgKHJlc3VsdC5p
c05ld0VudHJ5KSB7Ci0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gV2ViQmFja0Zv
cndhcmRMaXN0SXRlbTo6Y3JlYXRlKG9yaWdpbmFsVVJMLCB1cmwsIHRpdGxlLCBiYWNrRm9yd2Fy
ZERhdGEuZGF0YSgpLCBiYWNrRm9yd2FyZERhdGEuc2l6ZSgpLCBpdGVtSUQpOworICAgICAgICBy
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gV2ViQmFja0ZvcndhcmRMaXN0SXRlbTo6Y3JlYXRlKG9y
aWdpbmFsVVJMLCB1cmwsIHRpdGxlLCBiYWNrRm9yd2FyZERhdGEuZGF0YSgpLCBiYWNrRm9yd2Fy
ZERhdGEuc2l6ZSgpLCBpdGVtSUQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgLy8g
VXBkYXRlIGV4aXN0aW5nIGl0ZW0uCi0gICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQtPnNldE9y
aWdpbmFsVVJMKG9yaWdpbmFsVVJMKTsKLSAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZC0+c2V0
VVJMKHVybCk7Ci0gICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQtPnNldFRpdGxlKHRpdGxlKTsK
LSAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZC0+c2V0QmFja0ZvcndhcmREYXRhKGJhY2tGb3J3
YXJkRGF0YS5kYXRhKCksIGJhY2tGb3J3YXJkRGF0YS5zaXplKCkpOworICAgIHJlc3VsdC5pdGVy
YXRvci0+dmFsdWUtPnNldE9yaWdpbmFsVVJMKG9yaWdpbmFsVVJMKTsKKyAgICByZXN1bHQuaXRl
cmF0b3ItPnZhbHVlLT5zZXRVUkwodXJsKTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5z
ZXRUaXRsZSh0aXRsZSk7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+c2V0QmFja0Zvcndh
cmREYXRhKGJhY2tGb3J3YXJkRGF0YS5kYXRhKCksIGJhY2tGb3J3YXJkRGF0YS5zaXplKCkpOwog
fQogCiAjaWYgRU5BQkxFKFBMVUdJTl9QUk9DRVNTKQpAQCAtNDcyLDcgKzQ3Miw3IEBAIHNpemVf
dCBXZWJQcm9jZXNzUHJveHk6OmZyYW1lQ291bnRJblBhZ2UoV2ViUGFnZVByb3h5KiBwYWdlKSBj
b25zdAogewogICAgIHNpemVfdCByZXN1bHQgPSAwOwogICAgIGZvciAoSGFzaE1hcDx1aW50NjRf
dCwgUmVmUHRyPFdlYkZyYW1lUHJveHk+ID46OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX2ZyYW1l
TWFwLmJlZ2luKCk7IGl0ZXIgIT0gbV9mcmFtZU1hcC5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAg
IGlmIChpdGVyLT5zZWNvbmQtPnBhZ2UoKSA9PSBwYWdlKQorICAgICAgICBpZiAoaXRlci0+dmFs
dWUtPnBhZ2UoKSA9PSBwYWdlKQogICAgICAgICAgICAgKytyZXN1bHQ7CiAgICAgfQogICAgIHJl
dHVybiByZXN1bHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5
ZXJCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVyQmFj
a2luZ1N0b3JlLmNwcAppbmRleCAzZjhhOGM4OTIyMWFkODQ5MjJiYzUzNzI0YTI3ZmJkYzY4Mjlh
MzI3Li4wZWRkNGNmMjBkNzc0MTYyNTQyYjRkYmQ3YzE4MWUyNmYxMzhiZmI2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJCYWNraW5nU3RvcmUuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXllckJhY2tpbmdTdG9yZS5jcHAKQEAgLTgw
LDE0ICs4MCwxNCBAQCB2b2lkIExheWVyQmFja2luZ1N0b3JlOjp1cGRhdGVUaWxlKGludCBpZCwg
Y29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UgogewogICAgIEhhc2hNYXA8aW50
LCBMYXllckJhY2tpbmdTdG9yZVRpbGU+OjppdGVyYXRvciBpdCA9IG1fdGlsZXMuZmluZChpZCk7
CiAgICAgQVNTRVJUKGl0ICE9IG1fdGlsZXMuZW5kKCkpOwotICAgIGl0LT5zZWNvbmQuc2V0QmFj
a0J1ZmZlcih0YXJnZXRSZWN0LCBzb3VyY2VSZWN0LCBiYWNrQnVmZmVyKTsKKyAgICBpdC0+dmFs
dWUuc2V0QmFja0J1ZmZlcih0YXJnZXRSZWN0LCBzb3VyY2VSZWN0LCBiYWNrQnVmZmVyKTsKIH0K
IAogUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBMYXllckJhY2tpbmdTdG9yZTo6dGV4dHVyZSgp
IGNvbnN0CiB7CiAgICAgSGFzaE1hcDxpbnQsIExheWVyQmFja2luZ1N0b3JlVGlsZT46OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IG1fdGlsZXMuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPGludCwgTGF5
ZXJCYWNraW5nU3RvcmVUaWxlPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gdGV4dHVy
ZSA9IGl0LT5zZWNvbmQudGV4dHVyZSgpOworICAgICAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4g
dGV4dHVyZSA9IGl0LT52YWx1ZS50ZXh0dXJlKCk7CiAgICAgICAgIGlmICh0ZXh0dXJlKQogICAg
ICAgICAgICAgcmV0dXJuIHRleHR1cmU7CiAgICAgfQpAQCAtMTAzLDcgKzEwMyw3IEBAIHZvaWQg
TGF5ZXJCYWNraW5nU3RvcmU6OnBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXIqIHRl
eHR1cmVNYXBwZXIsIGNvbnN0CiAgICAgSGFzaE1hcDxpbnQsIExheWVyQmFja2luZ1N0b3JlVGls
ZT46Oml0ZXJhdG9yIGVuZCA9IG1fdGlsZXMuZW5kKCk7CiAgICAgRmxvYXRSZWN0IGNvdmVyZWRS
ZWN0OwogICAgIGZvciAoSGFzaE1hcDxpbnQsIExheWVyQmFja2luZ1N0b3JlVGlsZT46Oml0ZXJh
dG9yIGl0ID0gbV90aWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgTGF5
ZXJCYWNraW5nU3RvcmVUaWxlJiB0aWxlID0gaXQtPnNlY29uZDsKKyAgICAgICAgTGF5ZXJCYWNr
aW5nU3RvcmVUaWxlJiB0aWxlID0gaXQtPnZhbHVlOwogICAgICAgICBpZiAoIXRpbGUudGV4dHVy
ZSgpKQogICAgICAgICAgICAgY29udGludWU7CiAKQEAgLTEzNCw3ICsxMzQsNyBAQCB2b2lkIExh
eWVyQmFja2luZ1N0b3JlOjpjb21taXRUaWxlT3BlcmF0aW9ucyhUZXh0dXJlTWFwcGVyKiB0ZXh0
dXJlTWFwcGVyKQogCiAgICAgSGFzaE1hcDxpbnQsIExheWVyQmFja2luZ1N0b3JlVGlsZT46Oml0
ZXJhdG9yIHRpbGVzRW5kID0gbV90aWxlcy5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8aW50LCBM
YXllckJhY2tpbmdTdG9yZVRpbGU+OjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQg
IT0gdGlsZXNFbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQuc3dhcEJ1ZmZlcnModGV4dHVy
ZU1hcHBlcik7CisgICAgICAgIGl0LT52YWx1ZS5zd2FwQnVmZmVycyh0ZXh0dXJlTWFwcGVyKTsK
IH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9HZW9sb2NhdGlv
bi9HZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5h
Z2VyLmNwcAppbmRleCBkNmJkYjhlMTUzMTQ1MGIxMmFiYzgyZDg2YjJmYzAxM2YxMzU0M2I3Li5m
Y2E3MWExZDA5NWZlZWZhYmEwNWE2YTcyNWZkYjQzNjM1ODE0YjY2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uUGVybWlzc2lvblJl
cXVlc3RNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0dlb2xvY2F0
aW9uL0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyLmNwcApAQCAtNzQsNyArNzQs
NyBAQCB2b2lkIEdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyOjpjYW5jZWxSZXF1
ZXN0Rm9yR2VvbG9jYXRpb24oR2VvbG9jYXRpbwogICAgICAgICByZXR1cm47CiAKICAgICBtX2dl
b2xvY2F0aW9uVG9JRE1hcC5yZW1vdmUoaXQpOwotICAgIG1faWRUb0dlb2xvY2F0aW9uTWFwLnJl
bW92ZShpdC0+c2Vjb25kKTsKKyAgICBtX2lkVG9HZW9sb2NhdGlvbk1hcC5yZW1vdmUoaXQtPnZh
bHVlKTsKIH0KIAogdm9pZCBHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlcjo6ZGlk
UmVjZWl2ZUdlb2xvY2F0aW9uUGVybWlzc2lvbkRlY2lzaW9uKHVpbnQ2NF90IGdlb2xvY2F0aW9u
SUQsIGJvb2wgYWxsb3dlZCkKQEAgLTgzLDcgKzgzLDcgQEAgdm9pZCBHZW9sb2NhdGlvblBlcm1p
c3Npb25SZXF1ZXN0TWFuYWdlcjo6ZGlkUmVjZWl2ZUdlb2xvY2F0aW9uUGVybWlzc2lvbkRlY2lz
aW8KICAgICBpZiAoaXQgPT0gbV9pZFRvR2VvbG9jYXRpb25NYXAuZW5kKCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIEdlb2xvY2F0aW9uKiBnZW9sb2NhdGlvbiA9IGl0LT5zZWNvbmQ7CisgICAg
R2VvbG9jYXRpb24qIGdlb2xvY2F0aW9uID0gaXQtPnZhbHVlOwogICAgIGdlb2xvY2F0aW9uLT5z
ZXRJc0FsbG93ZWQoYWxsb3dlZCk7CiAKICAgICBtX2lkVG9HZW9sb2NhdGlvbk1hcC5yZW1vdmUo
aXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9ET00vSW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxlTm9kZUhhbmRsZS5jcHAKaW5k
ZXggMGM0Mjk1ZTYxMmNkZDc2ZjAzYTUzMTNkNDVlNmNlYzFmYjFlODU5Ni4uNzdlMDMwOTNkNWZk
MGQ5NjQyNGQzMTU0Zjc3Yzk0ZDQxOTRiMTZlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9Jbmpl
Y3RlZEJ1bmRsZU5vZGVIYW5kbGUuY3BwCkBAIC02OSwxMCArNjksMTAgQEAgUGFzc1JlZlB0cjxJ
bmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU+IEluamVjdGVkQnVuZGxlTm9kZUhhbmRsZTo6Z2V0T3JD
cmVhdGUoTm9kZSoKIAogICAgIERPTUhhbmRsZUNhY2hlOjpBZGRSZXN1bHQgcmVzdWx0ID0gZG9t
SGFuZGxlQ2FjaGUoKS5hZGQobm9kZSwgMCk7CiAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkK
LSAgICAgICAgcmV0dXJuIFBhc3NSZWZQdHI8SW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlPihyZXN1
bHQuaXRlcmF0b3ItPnNlY29uZCk7CisgICAgICAgIHJldHVybiBQYXNzUmVmUHRyPEluamVjdGVk
QnVuZGxlTm9kZUhhbmRsZT4ocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CiAKICAgICBSZWZQdHI8
SW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlPiBub2RlSGFuZGxlID0gSW5qZWN0ZWRCdW5kbGVOb2Rl
SGFuZGxlOjpjcmVhdGUobm9kZSk7Ci0gICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBub2Rl
SGFuZGxlLmdldCgpOworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBub2RlSGFuZGxlLmdl
dCgpOwogICAgIHJldHVybiBub2RlSGFuZGxlLnJlbGVhc2UoKTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5k
bGVSYW5nZUhhbmRsZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0RPTS9JbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlLmNwcAppbmRleCAxYjc0ZjAxMjQwMDhk
YjNjMDc4MjhlYTZmNmQyYzA1YWMwNTljMzA2Li5kNjAwMGFiOTEzMzI5Y2Q1N2RhYjNlM2ZkNjQw
MTRjNzZlOTUyZGMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZVJhbmdl
SGFuZGxlLmNwcApAQCAtNDgsMTAgKzQ4LDEwIEBAIFBhc3NSZWZQdHI8SW5qZWN0ZWRCdW5kbGVS
YW5nZUhhbmRsZT4gSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6Z2V0T3JDcmVhdGUoUmFuCiAK
ICAgICBET01IYW5kbGVDYWNoZTo6QWRkUmVzdWx0IHJlc3VsdCA9IGRvbUhhbmRsZUNhY2hlKCku
YWRkKHJhbmdlLCAwKTsKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXR1
cm4gUGFzc1JlZlB0cjxJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlPihyZXN1bHQuaXRlcmF0b3It
PnNlY29uZCk7CisgICAgICAgIHJldHVybiBQYXNzUmVmUHRyPEluamVjdGVkQnVuZGxlUmFuZ2VI
YW5kbGU+KHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwogCiAgICAgUmVmUHRyPEluamVjdGVkQnVu
ZGxlUmFuZ2VIYW5kbGU+IHJhbmdlSGFuZGxlID0gSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6
Y3JlYXRlKHJhbmdlKTsKLSAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IHJhbmdlSGFuZGxl
LmdldCgpOworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSByYW5nZUhhbmRsZS5nZXQoKTsK
ICAgICByZXR1cm4gcmFuZ2VIYW5kbGUucmVsZWFzZSgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05vdGlmaWNhdGlvbnMvV2ViTm90aWZpY2F0aW9uTWFuYWdl
ci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05vdGlmaWNhdGlvbnMvV2ViTm90aWZp
Y2F0aW9uTWFuYWdlci5jcHAKaW5kZXggMjZlNTQwNzQ0YmQ1Mjc0YzliNmRhY2VlYTViZjk0ZmEz
YWUwNDk3My4uYjhlM2E2ZWQ2NjYyZjFmMTBlOGJjYzBkNzg4NTM4MmZmZGVmZDBiNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Ob3RpZmljYXRpb25zL1dlYk5vdGlmaWNh
dGlvbk1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTm90aWZpY2F0
aW9ucy9XZWJOb3RpZmljYXRpb25NYW5hZ2VyLmNwcApAQCAtOTksNyArOTksNyBAQCBOb3RpZmlj
YXRpb25DbGllbnQ6OlBlcm1pc3Npb24gV2ViTm90aWZpY2F0aW9uTWFuYWdlcjo6cG9saWN5Rm9y
T3JpZ2luKFdlYkNvcmU6OgogICAgIEFTU0VSVCghb3JpZ2luLT5pc1VuaXF1ZSgpKTsKICAgICBI
YXNoTWFwPFN0cmluZywgYm9vbD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wZXJtaXNzaW9uc01h
cC5maW5kKG9yaWdpbi0+dG9SYXdTdHJpbmcoKSk7CiAgICAgaWYgKGl0ICE9IG1fcGVybWlzc2lv
bnNNYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdC0+c2Vjb25kID8gTm90aWZpY2F0aW9uQ2xp
ZW50OjpQZXJtaXNzaW9uQWxsb3dlZCA6IE5vdGlmaWNhdGlvbkNsaWVudDo6UGVybWlzc2lvbkRl
bmllZDsKKyAgICAgICAgcmV0dXJuIGl0LT52YWx1ZSA/IE5vdGlmaWNhdGlvbkNsaWVudDo6UGVy
bWlzc2lvbkFsbG93ZWQgOiBOb3RpZmljYXRpb25DbGllbnQ6OlBlcm1pc3Npb25EZW5pZWQ7CiAj
ZW5kaWYKICAgICAKICAgICByZXR1cm4gTm90aWZpY2F0aW9uQ2xpZW50OjpQZXJtaXNzaW9uTm90
QWxsb3dlZDsKQEAgLTExNiw3ICsxMTYsNyBAQCBib29sIFdlYk5vdGlmaWNhdGlvbk1hbmFnZXI6
OnNob3coTm90aWZpY2F0aW9uKiBub3RpZmljYXRpb24sIFdlYlBhZ2UqIHBhZ2UpCiAgICAgbV9u
b3RpZmljYXRpb25JRE1hcC5zZXQobm90aWZpY2F0aW9uSUQsIG5vdGlmaWNhdGlvbik7CiAgICAg
CiAgICAgTm90aWZpY2F0aW9uQ29udGV4dE1hcDo6aXRlcmF0b3IgaXQgPSBtX25vdGlmaWNhdGlv
bkNvbnRleHRNYXAuYWRkKG5vdGlmaWNhdGlvbi0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBW
ZWN0b3I8dWludDY0X3Q+KCkpLml0ZXJhdG9yOwotICAgIGl0LT5zZWNvbmQuYXBwZW5kKG5vdGlm
aWNhdGlvbklEKTsKKyAgICBpdC0+dmFsdWUuYXBwZW5kKG5vdGlmaWNhdGlvbklEKTsKICAgICAK
ICAgICBtX3Byb2Nlc3MtPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5
OjpTaG93Tm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbi0+dGl0bGUoKSwgbm90aWZpY2F0aW9uLT5i
b2R5KCksIG5vdGlmaWNhdGlvbi0+aWNvblVSTCgpLnN0cmluZygpLCBub3RpZmljYXRpb24tPnJl
cGxhY2VJZCgpLCBub3RpZmljYXRpb24tPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+c2VjdXJp
dHlPcmlnaW4oKS0+dG9TdHJpbmcoKSwgbm90aWZpY2F0aW9uSUQpLCBwYWdlLT5wYWdlSUQoKSk7
CiAgICAgcmV0dXJuIHRydWU7CkBAIC0xNDYsNyArMTQ2LDcgQEAgdm9pZCBXZWJOb3RpZmljYXRp
b25NYW5hZ2VyOjpjbGVhck5vdGlmaWNhdGlvbnMoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCoKICAgICBpZiAoaXQgPT0gbV9ub3RpZmljYXRpb25Db250ZXh0TWFwLmVuZCgpKQogICAg
ICAgICByZXR1cm47CiAgICAgCi0gICAgVmVjdG9yPHVpbnQ2NF90PiYgbm90aWZpY2F0aW9uSURz
ID0gaXQtPnNlY29uZDsKKyAgICBWZWN0b3I8dWludDY0X3Q+JiBub3RpZmljYXRpb25JRHMgPSBp
dC0+dmFsdWU7CiAgICAgbV9wcm9jZXNzLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Oldl
Yk5vdGlmaWNhdGlvbk1hbmFnZXJQcm94eTo6Q2xlYXJOb3RpZmljYXRpb25zKG5vdGlmaWNhdGlv
bklEcyksIHBhZ2UtPnBhZ2VJRCgpKTsKICAgICBzaXplX3QgY291bnQgPSBub3RpZmljYXRpb25J
RHMuc2l6ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewpAQCAt
MjI4LDEwICsyMjgsMTAgQEAgdm9pZCBXZWJOb3RpZmljYXRpb25NYW5hZ2VyOjpyZW1vdmVOb3Rp
ZmljYXRpb25Gcm9tQ29udGV4dE1hcCh1aW50NjRfdCBub3RpZmljYXQKICAgICAvLyBUaGlzIGlz
IGEgaGVscGVyIGZ1bmN0aW9uIGZvciBtYW5hZ2luZyB0aGUgaGFzaCBtYXBzLgogICAgIE5vdGlm
aWNhdGlvbkNvbnRleHRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9ub3RpZmljYXRpb25Db250ZXh0TWFw
LmZpbmQobm90aWZpY2F0aW9uLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwogICAgIEFTU0VS
VChpdCAhPSBtX25vdGlmaWNhdGlvbkNvbnRleHRNYXAuZW5kKCkpOwotICAgIHNpemVfdCBpbmRl
eCA9IGl0LT5zZWNvbmQuZmluZChub3RpZmljYXRpb25JRCk7CisgICAgc2l6ZV90IGluZGV4ID0g
aXQtPnZhbHVlLmZpbmQobm90aWZpY2F0aW9uSUQpOwogICAgIEFTU0VSVChpbmRleCAhPSBub3RG
b3VuZCk7Ci0gICAgaXQtPnNlY29uZC5yZW1vdmUoaW5kZXgpOwotICAgIGlmIChpdC0+c2Vjb25k
LmlzRW1wdHkoKSkKKyAgICBpdC0+dmFsdWUucmVtb3ZlKGluZGV4KTsKKyAgICBpZiAoaXQtPnZh
bHVlLmlzRW1wdHkoKSkKICAgICAgICAgbV9ub3RpZmljYXRpb25Db250ZXh0TWFwLnJlbW92ZShp
dCk7CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1
Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3BwIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QUnVudGltZU9iamVjdE1hcC5jcHAKaW5kZXggMDFl
NzNmOTVmZWJjNmM4NjdkMGY0MGYwMDEyOWQxMTg4NDMyMGNjNS4uYjg0ZmIyNjVmMjhiYzkzZDA1
ODgzNTc3OWY4MTZlNTgxOWVmZDExYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QUnVudGltZU9iamVjdE1hcC5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QUnVudGltZU9iamVjdE1hcC5j
cHAKQEAgLTIxMSw3ICsyMTEsNyBAQCB2b2lkIE5QUnVudGltZU9iamVjdE1hcDo6aW52YWxpZGF0
ZSgpCiAgICAgVmVjdG9yPE5QT2JqZWN0Kj4gb2JqZWN0czsKIAogICAgIGZvciAoSGFzaE1hcDxO
UE9iamVjdCosIEpTQzo6V2VhazxKU05QT2JqZWN0PiA+OjppdGVyYXRvciBwdHIgPSBtX2pzTlBP
YmplY3RzLmJlZ2luKCksIGVuZCA9IG1fanNOUE9iamVjdHMuZW5kKCk7IHB0ciAhPSBlbmQ7ICsr
cHRyKQotICAgICAgICBvYmplY3RzLmFwcGVuZChwdHItPnNlY29uZC0+bGVha05QT2JqZWN0KCkp
OworICAgICAgICBvYmplY3RzLmFwcGVuZChwdHItPnZhbHVlLT5sZWFrTlBPYmplY3QoKSk7CiAK
ICAgICBtX2pzTlBPYmplY3RzLmNsZWFyKCk7CiAKQEAgLTI5Miw4ICsyOTIsOCBAQCB2b2lkIE5Q
UnVudGltZU9iamVjdE1hcDo6ZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5k
bGUsIHZvaWQqIGNvbnRleAogewogICAgIEhhc2hNYXA8TlBPYmplY3QqLCBKU0M6OldlYWs8SlNO
UE9iamVjdD4gPjo6aXRlcmF0b3IgZm91bmQgPSBtX2pzTlBPYmplY3RzLmZpbmQoc3RhdGljX2Nh
c3Q8TlBPYmplY3QqPihjb250ZXh0KSk7CiAgICAgQVNTRVJUKGZvdW5kICE9IG1fanNOUE9iamVj
dHMuZW5kKCkpOwotICAgIEFTU0VSVF9VTlVTRUQoaGFuZGxlLCBhc09iamVjdChoYW5kbGUuZ2V0
KCkpID09IGZvdW5kLT5zZWNvbmQpOwotICAgIEpTTlBPYmplY3QqIG9iamVjdCA9IGZvdW5kLT5z
ZWNvbmQuZ2V0KCk7CisgICAgQVNTRVJUX1VOVVNFRChoYW5kbGUsIGFzT2JqZWN0KGhhbmRsZS5n
ZXQoKSkgPT0gZm91bmQtPnZhbHVlKTsKKyAgICBKU05QT2JqZWN0KiBvYmplY3QgPSBmb3VuZC0+
dmFsdWUuZ2V0KCk7CiAgICAgbV9qc05QT2JqZWN0cy5yZW1vdmUoZm91bmQpOwogICAgIGFkZFRv
SW52YWxpZGF0aW9uUXVldWUob2JqZWN0LT5sZWFrTlBPYmplY3QoKSk7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVn
aW4uY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNj
YXBlUGx1Z2luLmNwcAppbmRleCA2MjEwMTk3MjM5ODkyYzUyOGEwOWZmMDdiNWJmMmE5ZDUyYWZj
OWM2Li4yMGFjZDFkZTk5ZWMxOWQ1OWRjZmIzMDBhZTAxMGVmYjAzMjFhNDU5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVn
aW4uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9O
ZXRzY2FwZVBsdWdpbi5jcHAKQEAgLTE5MCw4ICsxOTAsOCBAQCBOUEVycm9yIE5ldHNjYXBlUGx1
Z2luOjpkZXN0cm95U3RyZWFtKE5QU3RyZWFtKiBzdHJlYW0sIE5QUmVhc29uIHJlYXNvbikKICAg
ICBOZXRzY2FwZVBsdWdpblN0cmVhbSogcGx1Z2luU3RyZWFtID0gMDsKIAogICAgIGZvciAoU3Ry
ZWFtc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3N0cmVhbXMuYmVnaW4oKSwgZW5kID0gbV9z
dHJlYW1zLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQt
Pm5wU3RyZWFtKCkgPT0gc3RyZWFtKSB7Ci0gICAgICAgICAgICBwbHVnaW5TdHJlYW0gPSBpdC0+
c2Vjb25kLmdldCgpOworICAgICAgICBpZiAoaXQtPnZhbHVlLT5ucFN0cmVhbSgpID09IHN0cmVh
bSkgeworICAgICAgICAgICAgcGx1Z2luU3RyZWFtID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CkBAIC0zNzgsNyArMzc4LDcgQEAgdm9pZCBO
ZXRzY2FwZVBsdWdpbjo6dW5zY2hlZHVsZVRpbWVyKHVuc2lnbmVkIHRpbWVySUQpCiAgICAgaWYg
KGl0ID09IG1fdGltZXJzLmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBPd25QdHI8VGlt
ZXI+IHRpbWVyID0gYWRvcHRQdHIoaXQtPnNlY29uZCk7CisgICAgT3duUHRyPFRpbWVyPiB0aW1l
ciA9IGFkb3B0UHRyKGl0LT52YWx1ZSk7CiAgICAgbV90aW1lcnMucmVtb3ZlKGl0KTsKIAogICAg
IHRpbWVyLT5zdG9wKCk7CkBAIC03MTMsOCArNzEzLDggQEAgdm9pZCBOZXRzY2FwZVBsdWdpbjo6
ZnJhbWVEaWRGaW5pc2hMb2FkaW5nKHVpbnQ2NF90IHJlcXVlc3RJRCkKICAgICBpZiAoaXQgPT0g
bV9wZW5kaW5nVVJMTm90aWZpY2F0aW9ucy5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
U3RyaW5nIHVybCA9IGl0LT5zZWNvbmQuZmlyc3Q7Ci0gICAgdm9pZCogbm90aWZpY2F0aW9uRGF0
YSA9IGl0LT5zZWNvbmQuc2Vjb25kOworICAgIFN0cmluZyB1cmwgPSBpdC0+dmFsdWUuZmlyc3Q7
CisgICAgdm9pZCogbm90aWZpY2F0aW9uRGF0YSA9IGl0LT52YWx1ZS5zZWNvbmQ7CiAKICAgICBt
X3BlbmRpbmdVUkxOb3RpZmljYXRpb25zLnJlbW92ZShpdCk7CiAgICAgCkBAIC03MjksOCArNzI5
LDggQEAgdm9pZCBOZXRzY2FwZVBsdWdpbjo6ZnJhbWVEaWRGYWlsKHVpbnQ2NF90IHJlcXVlc3RJ
RCwgYm9vbCB3YXNDYW5jZWxsZWQpCiAgICAgaWYgKGl0ID09IG1fcGVuZGluZ1VSTE5vdGlmaWNh
dGlvbnMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFN0cmluZyB1cmwgPSBpdC0+c2Vj
b25kLmZpcnN0OwotICAgIHZvaWQqIG5vdGlmaWNhdGlvbkRhdGEgPSBpdC0+c2Vjb25kLnNlY29u
ZDsKKyAgICBTdHJpbmcgdXJsID0gaXQtPnZhbHVlLmZpcnN0OworICAgIHZvaWQqIG5vdGlmaWNh
dGlvbkRhdGEgPSBpdC0+dmFsdWUuc2Vjb25kOwogCiAgICAgbV9wZW5kaW5nVVJMTm90aWZpY2F0
aW9ucy5yZW1vdmUoaXQpOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Q
bHVnaW5zL1BsdWdpblZpZXcuY3BwCmluZGV4IGQzNDY1NjhiN2QzMTQ4ZDAzMjVkMWYxYWZkZjgx
NGU2ODY3MWJhZGUuLmJjMDc0OWJkNmJjZjI2MjIyMGZhMmU5MTk5YmIyMGZlZGFmZmY5MTcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAK
QEAgLTE3MCw5ICsxNzAsOSBAQCBzdGF0aWMgU3RyaW5nIGJ1aWxkSFRUUEhlYWRlcnMoY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIGxvbmcgbG9uZyYgZXhwZQogICAgIAogICAgIEhU
VFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVs
ZHMoKS5lbmQoKTsKICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
cmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkcygpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewot
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+Zmlyc3QuY2hhcmFjdGVycygpLCBpdC0+
Zmlyc3QubGVuZ3RoKCkpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+a2V5LmNo
YXJhY3RlcnMoKSwgaXQtPmtleS5sZW5ndGgoKSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKHNlcGFyYXRvci5jaGFyYWN0ZXJzKCksIHNlcGFyYXRvci5sZW5ndGgoKSk7Ci0gICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5zZWNvbmQuY2hhcmFjdGVycygpLCBpdC0+c2Vjb25k
Lmxlbmd0aCgpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPnZhbHVlLmNoYXJh
Y3RlcnMoKSwgaXQtPnZhbHVlLmxlbmd0aCgpKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQoJ1xuJyk7CiAgICAgfQogICAgIApAQCAtMjgyLDcgKzI4Miw3IEBAIFBsdWdpblZpZXc6On5Q
bHVnaW5WaWV3KCkKIAogICAgIC8vIENhbmNlbCBhbGwgcGVuZGluZyBmcmFtZSBsb2Fkcy4KICAg
ICBmb3IgKEZyYW1lTG9hZE1hcDo6aXRlcmF0b3IgaXQgPSBtX3BlbmRpbmdGcmFtZUxvYWRzLmJl
Z2luKCksIGVuZCA9IG1fcGVuZGluZ0ZyYW1lTG9hZHMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkK
LSAgICAgICAgaXQtPmZpcnN0LT5zZXRMb2FkTGlzdGVuZXIoMCk7CisgICAgICAgIGl0LT5rZXkt
PnNldExvYWRMaXN0ZW5lcigwKTsKIAogICAgIGlmIChtX3BsdWdpbiAmJiBtX2lzSW5pdGlhbGl6
ZWQpIHsKICAgICAgICAgbV9pc0JlaW5nRGVzdHJveWVkID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNz
TGF5ZXIuY3BwCmluZGV4IGQ2Y2U5Y2NmMzNhMmU4MjlhZTJkZjUzYTVmZjcyZTQ2ZDczOGQxOTQu
LjY3ZThmMjRjMTIyNzZkZjRjNTI5ZmI3OTM4MTA1ZTdhNGM3ZTRjNGIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFw
aGljc0xheWVyLmNwcApAQCAtNTMsNyArNTMsNyBAQCBXZWJHcmFwaGljc0xheWVyKiBXZWJHcmFw
aGljc0xheWVyOjpsYXllckJ5SUQoV2ViS2l0OjpXZWJMYXllcklEIGlkKQogICAgIEhhc2hNYXA8
V2ViTGF5ZXJJRCwgV2ViR3JhcGhpY3NMYXllcio+OjppdGVyYXRvciBpdCA9IHRhYmxlLmZpbmQo
aWQpOwogICAgIGlmIChpdCA9PSB0YWJsZS5lbmQoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
cmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgcmV0dXJuIGl0LT52YWx1ZTsKIH0KIAogc3RhdGljIFdl
YkxheWVySUQgdG9XZWJMYXllcklEKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFByb3h5
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9yd2FyZExp
c3RQcm94eS5jcHAKaW5kZXggY2JkYzA2NmRhNWMwZDVjODhkMzhkMjAxNzllODRmMThhNjg2M2Yy
Yy4uZTBlMThmNzNlM2ViMTU3MzIzZDdjN2JmOGNkY2VkMjczNjFmMGM4NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFByb3h5
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFja0Zvcndh
cmRMaXN0UHJveHkuY3BwCkBAIC0xMjgsNyArMTI4LDcgQEAgdm9pZCBXZWJCYWNrRm9yd2FyZExp
c3RQcm94eTo6cmVtb3ZlSXRlbSh1aW50NjRfdCBpdGVtSUQpCiAgICAgSURUb0hpc3RvcnlJdGVt
TWFwOjppdGVyYXRvciBpdCA9IGlkVG9IaXN0b3J5SXRlbU1hcCgpLmZpbmQoaXRlbUlEKTsKICAg
ICBpZiAoaXQgPT0gaWRUb0hpc3RvcnlJdGVtTWFwKCkuZW5kKCkpCiAgICAgICAgIHJldHVybjsK
LSAgICBoaXN0b3J5SXRlbVRvSURNYXAoKS5yZW1vdmUoaXQtPnNlY29uZCk7CisgICAgaGlzdG9y
eUl0ZW1Ub0lETWFwKCkucmVtb3ZlKGl0LT52YWx1ZSk7CiAgICAgaWRUb0hpc3RvcnlJdGVtTWFw
KCkucmVtb3ZlKGl0KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCmluZGV4IGE4ZDNjNWJiMTk2MGMyOTQwZjIyMzM2YWMw
MmNhZTdkYWU1NGFkMDMuLjYwMzExNTBmZjQ0MDQ2ZDJjYmJhMjEzZDIwMzE1YjEwZmY4YWQ5NTgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFn
ZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBh
Z2VNYWMubW0KQEAgLTExNiw3ICsxMTYsNyBAQCBzdGF0aWMgU3RyaW5nIGNvbW1hbmROYW1lRm9y
U2VsZWN0b3JOYW1lKGNvbnN0IFN0cmluZyYgc2VsZWN0b3JOYW1lKQogICAgIHN0YXRpYyBjb25z
dCBTZWxlY3Rvck5hbWVNYXAqIGV4Y2VwdGlvbk1hcCA9IGNyZWF0ZVNlbGVjdG9yRXhjZXB0aW9u
TWFwKCk7CiAgICAgU2VsZWN0b3JOYW1lTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGV4Y2VwdGlv
bk1hcC0+ZmluZChzZWxlY3Rvck5hbWUpOwogICAgIGlmIChpdCAhPSBleGNlcHRpb25NYXAtPmVu
ZCgpKQotICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGl0LT52YWx1
ZTsKIAogICAgIC8vIFJlbW92ZSB0aGUgdHJhaWxpbmcgY29sb24uCiAgICAgLy8gTm8gbmVlZCB0
byBjYXBpdGFsaXplIHRoZSBjb21tYW5kIG5hbWUgc2luY2UgRWRpdG9yIGNvbW1hbmQgbmFtZXMg
YXJlIG5vdCBjYXNlIHNlbnNpdGl2ZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQuY3BwIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5jcHAKaW5kZXggY2E3NGYxMTQwYjJi
NTg1OWY3NTE5MTdmODhhYzkwMjU3Y2NjYTQ0My4uNjA4YzU0YjMyNDgxMTlhNjNhZWYxYzJlNzJl
NWMzYTYzZjI4NzdhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL3F0L0xheWVyVHJlZUhvc3RRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5jcHAKQEAgLTMyNSw3ICszMjUsNyBAQCBpbnQ2
NF90IExheWVyVHJlZUhvc3RRdDo6YWRvcHRJbWFnZUJhY2tpbmdTdG9yZShJbWFnZSogaW1hZ2Up
CiAgICAgSGFzaE1hcDxpbnQ2NF90LCBpbnQ+OjppdGVyYXRvciBpdCA9IG1fZGlyZWN0bHlDb21w
b3NpdGVkSW1hZ2VSZWZDb3VudHMuZmluZChrZXkpOwogCiAgICAgaWYgKGl0ICE9IG1fZGlyZWN0
bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMuZW5kKCkpIHsKLSAgICAgICAgKysoaXQtPnNlY29u
ZCk7CisgICAgICAgICsrKGl0LT52YWx1ZSk7CiAgICAgICAgIHJldHVybiBrZXk7CiAgICAgfQog
CkBAIC0zNTAsOSArMzUwLDkgQEAgdm9pZCBMYXllclRyZWVIb3N0UXQ6OnJlbGVhc2VJbWFnZUJh
Y2tpbmdTdG9yZShpbnQ2NF90IGtleSkKICAgICBpZiAoaXQgPT0gbV9kaXJlY3RseUNvbXBvc2l0
ZWRJbWFnZVJlZkNvdW50cy5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaXQtPnNlY29u
ZC0tOworICAgIGl0LT52YWx1ZS0tOwogCi0gICAgaWYgKGl0LT5zZWNvbmQpCisgICAgaWYgKGl0
LT52YWx1ZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFn
ZVJlZkNvdW50cy5yZW1vdmUoaXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vz
cy5jcHAKaW5kZXggMmRmY2RlMDgzYjljMTRiMWM0MTEyNjNiNjYyMzAzODlmZTFiZjMzMS4uOTIx
MWM1MTQ2ZjkwNjhiZTM5N2FhNTJlMmZhMDRhZDlmNjMxOTZiNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCkBAIC0zMTQsNyArMzE0LDcgQEAgdm9pZCBXZWJQcm9j
ZXNzOjp2aXNpdGVkTGlua1N0YXRlQ2hhbmdlZChjb25zdCBWZWN0b3I8V2ViQ29yZTo6TGlua0hh
c2g+JiBsaW5rSGEKICAgICAgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPFdlYlBhZ2VHcm91
cFByb3h5PiA+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGFnZUdyb3VwTWFwLmJlZ2luKCk7CiAg
ICAgICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxXZWJQYWdlR3JvdXBQcm94eT4gPjo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gbV9wYWdlR3JvdXBNYXAuZW5kKCk7CiAgICAgICAgIGZvciAoOyBp
dCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBQYWdlOjp2aXNpdGVkU3RhdGVDaGFuZ2VkKFBh
Z2VHcm91cDo6cGFnZUdyb3VwKGl0LT5zZWNvbmQtPmlkZW50aWZpZXIoKSksIGxpbmtIYXNoZXNb
aV0pOworICAgICAgICAgICAgUGFnZTo6dmlzaXRlZFN0YXRlQ2hhbmdlZChQYWdlR3JvdXA6OnBh
Z2VHcm91cChpdC0+dmFsdWUtPmlkZW50aWZpZXIoKSksIGxpbmtIYXNoZXNbaV0pOwogICAgIH0K
IAogICAgIHBhZ2VDYWNoZSgpLT5tYXJrUGFnZXNGb3JWaXN0ZWRMaW5rU3R5bGVSZWNhbGMoKTsK
QEAgLTMyNiw3ICszMjYsNyBAQCB2b2lkIFdlYlByb2Nlc3M6OmFsbFZpc2l0ZWRMaW5rU3RhdGVD
aGFuZ2VkKCkKICAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8V2ViUGFnZUdyb3VwUHJveHk+
ID46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wYWdlR3JvdXBNYXAuYmVnaW4oKTsKICAgICBIYXNo
TWFwPHVpbnQ2NF90LCBSZWZQdHI8V2ViUGFnZUdyb3VwUHJveHk+ID46OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IG1fcGFnZUdyb3VwTWFwLmVuZCgpOwogICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQp
Ci0gICAgICAgIFBhZ2U6OmFsbFZpc2l0ZWRTdGF0ZUNoYW5nZWQoUGFnZUdyb3VwOjpwYWdlR3Jv
dXAoaXQtPnNlY29uZC0+aWRlbnRpZmllcigpKSk7CisgICAgICAgIFBhZ2U6OmFsbFZpc2l0ZWRT
dGF0ZUNoYW5nZWQoUGFnZUdyb3VwOjpwYWdlR3JvdXAoaXQtPnZhbHVlLT5pZGVudGlmaWVyKCkp
KTsKIAogICAgIHBhZ2VDYWNoZSgpLT5tYXJrUGFnZXNGb3JWaXN0ZWRMaW5rU3R5bGVSZWNhbGMo
KTsKIH0KQEAgLTUwMiw3ICs1MDIsNyBAQCBXZWJQYWdlKiBXZWJQcm9jZXNzOjpmb2N1c2VkV2Vi
UGFnZSgpIGNvbnN0CiB7ICAgIAogICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxXZWJQYWdl
PiA+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BhZ2VNYXAuZW5kKCk7CiAgICAgZm9yIChIYXNo
TWFwPHVpbnQ2NF90LCBSZWZQdHI8V2ViUGFnZT4gPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Bh
Z2VNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFdlYlBhZ2UqIHBhZ2Ug
PSAoKml0KS5zZWNvbmQuZ2V0KCk7CisgICAgICAgIFdlYlBhZ2UqIHBhZ2UgPSAoKml0KS52YWx1
ZS5nZXQoKTsKICAgICAgICAgaWYgKHBhZ2UtPndpbmRvd0lzRm9jdXNlZCgpKQogICAgICAgICAg
ICAgcmV0dXJuIHBhZ2U7CiAgICAgfQpAQCAtNTIwLDE0ICs1MjAsMTQgQEAgdm9pZCBXZWJQcm9j
ZXNzOjpjcmVhdGVXZWJQYWdlKHVpbnQ2NF90IHBhZ2VJRCwgY29uc3QgV2ViUGFnZUNyZWF0aW9u
UGFyYW1ldGVycyYKICAgICAvLyBsaW5rKSB0aGUgV2ViUGFnZSBnZXRzIGNyZWF0ZWQgYm90aCBp
biB0aGUgc3luY2hyb25vdXMgaGFuZGxlciBhbmQgdGhyb3VnaCB0aGUgbm9ybWFsIHdheS4gCiAg
ICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPFdlYlBhZ2U+ID46OkFkZFJlc3VsdCByZXN1bHQg
PSBtX3BhZ2VNYXAuYWRkKHBhZ2VJRCwgMCk7CiAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7
Ci0gICAgICAgIEFTU0VSVCghcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOwotICAgICAgICByZXN1
bHQuaXRlcmF0b3ItPnNlY29uZCA9IFdlYlBhZ2U6OmNyZWF0ZShwYWdlSUQsIHBhcmFtZXRlcnMp
OworICAgICAgICBBU1NFUlQoIXJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOworICAgICAgICByZXN1
bHQuaXRlcmF0b3ItPnZhbHVlID0gV2ViUGFnZTo6Y3JlYXRlKHBhZ2VJRCwgcGFyYW1ldGVycyk7
CiAKICAgICAgICAgLy8gQmFsYW5jZWQgYnkgYW4gZW5hYmxlVGVybWluYXRpb24gaW4gcmVtb3Zl
V2ViUGFnZS4KICAgICAgICAgZGlzYWJsZVRlcm1pbmF0aW9uKCk7CiAgICAgfQogCi0gICAgQVNT
RVJUKHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKKyAgICBBU1NFUlQocmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzczo6cmVtb3ZlV2ViUGFnZSh1aW50NjRfdCBw
YWdlSUQpCkBAIC03NDEsMTEgKzc0MSwxMSBAQCBXZWJQYWdlR3JvdXBQcm94eSogV2ViUHJvY2Vz
czo6d2ViUGFnZUdyb3VwKGNvbnN0IFdlYlBhZ2VHcm91cERhdGEmIHBhZ2VHcm91cERhdAogewog
ICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxXZWJQYWdlR3JvdXBQcm94eT4gPjo6QWRkUmVz
dWx0IHJlc3VsdCA9IG1fcGFnZUdyb3VwTWFwLmFkZChwYWdlR3JvdXBEYXRhLnBhZ2VHcm91cElE
LCAwKTsKICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgQVNTRVJUKCFyZXN1
bHQuaXRlcmF0b3ItPnNlY29uZCk7Ci0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0g
V2ViUGFnZUdyb3VwUHJveHk6OmNyZWF0ZShwYWdlR3JvdXBEYXRhKTsKKyAgICAgICAgQVNTRVJU
KCFyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZSA9IFdlYlBhZ2VHcm91cFByb3h5OjpjcmVhdGUocGFnZUdyb3VwRGF0YSk7CiAgICAgfQogCi0g
ICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLmdldCgpOworICAgIHJldHVybiByZXN1
bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpOwogfQogCiBzdGF0aWMgYm9vbCBjYW5QbHVnaW5IYW5k
bGVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKQEAgLTgzOSw3ICs4
MzksNyBAQCBzdGF0aWMgdm9pZCBmcm9tQ291bnRlZFNldFRvSGFzaE1hcChUeXBlQ291bnRTZXQq
IGNvdW50ZWRTZXQsIEhhc2hNYXA8U3RyaW5nLCB1aQogewogICAgIFR5cGVDb3VudFNldDo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gY291bnRlZFNldC0+ZW5kKCk7CiAgICAgZm9yIChUeXBlQ291bnRT
ZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY291bnRlZFNldC0+YmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KQotICAgICAgICBtYXAuc2V0KGl0LT5maXJzdCwgaXQtPnNlY29uZCk7CisgICAgICAgIG1h
cC5zZXQoaXQtPmtleSwgaXQtPnZhbHVlKTsKIH0KIAogc3RhdGljIHZvaWQgZ2V0V2ViQ29yZU1l
bW9yeUNhY2hlU3RhdGlzdGljcyhWZWN0b3I8SGFzaE1hcDxTdHJpbmcsIHVpbnQ2NF90PiA+JiBy
ZXN1bHQpCkBAIC0xMDA5LDcgKzEwMDksNyBAQCB2b2lkIFdlYlByb2Nlc3M6OnNldFRleHRDaGVj
a2VyU3RhdGUoY29uc3QgVGV4dENoZWNrZXJTdGF0ZSYgdGV4dENoZWNrZXJTdGF0ZSkKIAogICAg
IEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxXZWJQYWdlPiA+OjppdGVyYXRvciBlbmQgPSBtX3Bh
Z2VNYXAuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8V2ViUGFnZT4g
Pjo6aXRlcmF0b3IgaXQgPSBtX3BhZ2VNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0g
ICAgICAgIFdlYlBhZ2UqIHBhZ2UgPSAoKml0KS5zZWNvbmQuZ2V0KCk7CisgICAgICAgIFdlYlBh
Z2UqIHBhZ2UgPSAoKml0KS52YWx1ZS5nZXQoKTsKICAgICAgICAgaWYgKGNvbnRpbnVvdXNTcGVs
bENoZWNraW5nVHVybmVkT2ZmKQogICAgICAgICAgICAgcGFnZS0+dW5tYXJrQWxsTWlzc3BlbGxp
bmdzKCk7CiAgICAgICAgIGlmIChncmFtbWFyQ2hlY2tpbmdUdXJuZWRPZmYpCmRpZmYgLS1naXQg
YS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggN2FhNGE2OTY2YTg1YWIy
ZDU2ZTAxODJkM2U2OWE2NTkyMWI0OGFlMS4uN2QxNWU0YjFjZDIyMWY2NjZiNWU3NTY0ZTEyMjk4
ODkyMmI1OTA4ZCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDEyLTA0LTAyICBDYWlvIE1hcmNlbG8gZGUgT2xpdmVp
cmEgRmlsaG8gIDxjYWlvLm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+CisKKyAgICAgICAgUmVuYW1l
IGZpcnN0L3NlY29uZCB0byBrZXkvdmFsdWUgaW4gSGFzaE1hcCBpdGVyYXRvcnMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyNzg0CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9DcHBCb3VuZENsYXNzLmNwcDoKKyAgICAgICAgKENwcEJvdW5kQ2xhc3M6On5DcHBC
b3VuZENsYXNzKToKKyAgICAgICAgKENwcEJvdW5kQ2xhc3M6Omludm9rZSk6CisgICAgICAgIChD
cHBCb3VuZENsYXNzOjpnZXRQcm9wZXJ0eSk6CisgICAgICAgIChDcHBCb3VuZENsYXNzOjpzZXRQ
cm9wZXJ0eSk6CisgICAgICAgIChDcHBCb3VuZENsYXNzOjpiaW5kQ2FsbGJhY2spOgorICAgICAg
ICAoQ3BwQm91bmRDbGFzczo6YmluZFByb3BlcnR5KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9Nb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKE1v
Y2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXI6OmFkZE1vY2tSZWNvZ25pdGlvblJlc3VsdCk6Cisg
ICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTm90aWZpY2F0aW9uUHJlc2VudGVyLmNw
cDoKKyAgICAgICAgKE5vdGlmaWNhdGlvblByZXNlbnRlcjo6c2ltdWxhdGVDbGljayk6CisgICAg
ICAgIChOb3RpZmljYXRpb25QcmVzZW50ZXI6OnNob3cpOgorICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL1dlYlByZWZlcmVuY2VzLmNwcDoKKyAgICAgICAgKGFwcGx5Rm9udE1hcCk6
CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuY3BwOgorICAg
ICAgICAoV2ViVmlld0hvc3Q6OnByaW50UmVzb3VyY2VEZXNjcmlwdGlvbik6CisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvd2luL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyV2luLmNwcDoKKyAgICAg
ICAgKEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjp+QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIpOgor
ICAgICAgICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6Ondpbk5vdGlmaWNhdGlvblJlY2VpdmVk
KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJXaW4u
Y3BwOgorICAgICAgICAod29ybGRJREZvcldvcmxkKToKKyAgICAgICAgKExheW91dFRlc3RDb250
cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCk6CisgICAgICAgICogRHVtcFJl
bmRlclRyZWUvd2luL1Jlc291cmNlTG9hZERlbGVnYXRlLmNwcDoKKyAgICAgICAgKFJlc291cmNl
TG9hZERlbGVnYXRlOjpkZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdCk6CisgICAgICAg
ICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9MYXlvdXRUZXN0Q29udHJvbGxlci5j
cHA6CisgICAgICAgIChXVFI6OkxheW91dFRlc3RDb250cm9sbGVyOjp3b3JsZElERm9yV29ybGQp
OgorICAgICAgICAoV1RSOjpMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklz
b2xhdGVkV29ybGQpOgorCiAyMDEyLTA0LTAyICBCYWxhenMgS2VsZW1lbiAgPGtiYWxhenNAd2Vi
a2l0Lm9yZz4KIAogICAgICAgICBbUXRdW1dLMl0gU2V0IHVwIHBsdWdpbiBwcm9jZXNzIG9uIFVu
aXgKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0NwcEJvdW5kQ2xh
c3MuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vQ3BwQm91bmRDbGFzcy5jcHAK
aW5kZXggOWI0YTNiNjQ2NDVkMDU3YjQxNzJlMWM3ZGZhMDdjN2E2MmU3N2NmOC4uMWIyOWQyYjBm
NTVkMDFmNzM4NzE0NTc4NzdmOWRiZGYwNmYxYjQ5MSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vQ3BwQm91bmRDbGFzcy5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vQ3BwQm91bmRDbGFzcy5jcHAKQEAgLTIwMywxMCArMjAzLDEwIEBAIGJv
b2wgQ3BwTlBPYmplY3Q6OnNldFByb3BlcnR5KE5QT2JqZWN0KiBucE9iaiwgTlBJZGVudGlmaWVy
IGlkZW50LCBjb25zdCBOUFZhcmlhCiBDcHBCb3VuZENsYXNzOjp+Q3BwQm91bmRDbGFzcygpCiB7
CiAgICAgZm9yIChNZXRob2RMaXN0OjppdGVyYXRvciBpID0gbV9tZXRob2RzLmJlZ2luKCk7IGkg
IT0gbV9tZXRob2RzLmVuZCgpOyArK2kpCi0gICAgICAgIGRlbGV0ZSBpLT5zZWNvbmQ7CisgICAg
ICAgIGRlbGV0ZSBpLT52YWx1ZTsKIAogICAgIGZvciAoUHJvcGVydHlMaXN0OjppdGVyYXRvciBp
ID0gbV9wcm9wZXJ0aWVzLmJlZ2luKCk7IGkgIT0gbV9wcm9wZXJ0aWVzLmVuZCgpOyArK2kpCi0g
ICAgICAgIGRlbGV0ZSBpLT5zZWNvbmQ7CisgICAgICAgIGRlbGV0ZSBpLT52YWx1ZTsKIAogICAg
IC8vIFVucmVnaXN0ZXIgb3Vyc2VsdmVzIGlmIHdlIHdlcmUgYm91bmQgdG8gYSBmcmFtZS4KICAg
ICBpZiAobV9ib3VuZFRvRnJhbWUpCkBAIC0yMzcsNyArMjM3LDcgQEAgYm9vbCBDcHBCb3VuZENs
YXNzOjppbnZva2UoTlBJZGVudGlmaWVyIGlkZW50LAogICAgICAgICB9CiAgICAgICAgIGNhbGxi
YWNrID0gbV9mYWxsYmFja0NhbGxiYWNrLmdldCgpOwogICAgIH0gZWxzZQotICAgICAgICBjYWxs
YmFjayA9ICgqbWV0aG9kKS5zZWNvbmQ7CisgICAgICAgIGNhbGxiYWNrID0gKCptZXRob2QpLnZh
bHVlOwogCiAgICAgLy8gQnVpbGQgYSBDcHBBcmd1bWVudExpc3QgYXJndW1lbnQgdmVjdG9yIGZy
b20gdGhlIE5QVmFyaWFudHMgY29taW5nIGluLgogICAgIENwcEFyZ3VtZW50TGlzdCBjcHBBcmd1
bWVudHMoYXJndW1lbnRDb3VudCk7CkBAIC0yNjAsNyArMjYwLDcgQEAgYm9vbCBDcHBCb3VuZENs
YXNzOjpnZXRQcm9wZXJ0eShOUElkZW50aWZpZXIgaWRlbnQsIE5QVmFyaWFudCogcmVzdWx0KSBj
b25zdAogICAgIH0KIAogICAgIENwcFZhcmlhbnQgY3BwVmFsdWU7Ci0gICAgaWYgKCFjYWxsYmFj
ay0+c2Vjb25kLT5nZXRWYWx1ZSgmY3BwVmFsdWUpKQorICAgIGlmICghY2FsbGJhY2stPnZhbHVl
LT5nZXRWYWx1ZSgmY3BwVmFsdWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgY3BwVmFs
dWUuY29weVRvTlBWYXJpYW50KHJlc3VsdCk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0yNzQsNyAr
Mjc0LDcgQEAgYm9vbCBDcHBCb3VuZENsYXNzOjpzZXRQcm9wZXJ0eShOUElkZW50aWZpZXIgaWRl
bnQsIGNvbnN0IE5QVmFyaWFudCogdmFsdWUpCiAKICAgICBDcHBWYXJpYW50IGNwcFZhbHVlOwog
ICAgIGNwcFZhbHVlLnNldCgqdmFsdWUpOwotICAgIHJldHVybiAoKmNhbGxiYWNrKS5zZWNvbmQt
PnNldFZhbHVlKGNwcFZhbHVlKTsKKyAgICByZXR1cm4gKCpjYWxsYmFjaykudmFsdWUtPnNldFZh
bHVlKGNwcFZhbHVlKTsKIH0KIAogdm9pZCBDcHBCb3VuZENsYXNzOjpiaW5kQ2FsbGJhY2soY29u
c3Qgc3RyaW5nJiBuYW1lLCBDYWxsYmFjayogY2FsbGJhY2spCkBAIC0yODIsNyArMjgyLDcgQEAg
dm9pZCBDcHBCb3VuZENsYXNzOjpiaW5kQ2FsbGJhY2soY29uc3Qgc3RyaW5nJiBuYW1lLCBDYWxs
YmFjayogY2FsbGJhY2spCiAgICAgTlBJZGVudGlmaWVyIGlkZW50ID0gV2ViQmluZGluZ3M6Omdl
dFN0cmluZ0lkZW50aWZpZXIobmFtZS5jX3N0cigpKTsKICAgICBNZXRob2RMaXN0OjppdGVyYXRv
ciBvbGRDYWxsYmFjayA9IG1fbWV0aG9kcy5maW5kKGlkZW50KTsKICAgICBpZiAob2xkQ2FsbGJh
Y2sgIT0gbV9tZXRob2RzLmVuZCgpKSB7Ci0gICAgICAgIGRlbGV0ZSBvbGRDYWxsYmFjay0+c2Vj
b25kOworICAgICAgICBkZWxldGUgb2xkQ2FsbGJhY2stPnZhbHVlOwogICAgICAgICBpZiAoIWNh
bGxiYWNrKSB7CiAgICAgICAgICAgICBtX21ldGhvZHMucmVtb3ZlKG9sZENhbGxiYWNrKTsKICAg
ICAgICAgICAgIHJldHVybjsKQEAgLTMwOSw3ICszMDksNyBAQCB2b2lkIENwcEJvdW5kQ2xhc3M6
OmJpbmRQcm9wZXJ0eShjb25zdCBzdHJpbmcmIG5hbWUsIFByb3BlcnR5Q2FsbGJhY2sqIGNhbGxi
YWNrKQogICAgIE5QSWRlbnRpZmllciBpZGVudCA9IFdlYkJpbmRpbmdzOjpnZXRTdHJpbmdJZGVu
dGlmaWVyKG5hbWUuY19zdHIoKSk7CiAgICAgUHJvcGVydHlMaXN0OjppdGVyYXRvciBvbGRDYWxs
YmFjayA9IG1fcHJvcGVydGllcy5maW5kKGlkZW50KTsKICAgICBpZiAob2xkQ2FsbGJhY2sgIT0g
bV9wcm9wZXJ0aWVzLmVuZCgpKSB7Ci0gICAgICAgIGRlbGV0ZSBvbGRDYWxsYmFjay0+c2Vjb25k
OworICAgICAgICBkZWxldGUgb2xkQ2FsbGJhY2stPnZhbHVlOwogICAgICAgICBpZiAoIWNhbGxi
YWNrKSB7CiAgICAgICAgICAgICBtX3Byb3BlcnRpZXMucmVtb3ZlKG9sZENhbGxiYWNrKTsKICAg
ICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL01vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlci5jcHAKaW5kZXggYTVmZTNl
ZGE2N2M3ZmVjYjRlZmQ4ZWE4ZTdjM2NlYmNlNzZiN2U0Yi4uOGZjYzA4NDU5YmI0MDlhM2VjZDQ1
Y2U1ZWVmNGFmYWVlZWUxNDk0YSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlci5jcHAKKysrIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlci5jcHAKQEAgLTUw
LDcgKzUwLDcgQEAgdm9pZCBNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyOjphZGRNb2NrUmVj
b2duaXRpb25SZXN1bHQoY29uc3QgV2ViU3RyaW5nJiByZXMKICAgICAgICAgU3RyaW5nIGxhbmdT
dHJpbmcgPSBTdHJpbmc6OmZyb21VVEY4KGxhbmd1YWdlLnV0ZjgoKS5kYXRhKCkpOwogICAgICAg
ICBpZiAoIW1fcmVjb2duaXRpb25SZXN1bHRzLmNvbnRhaW5zKGxhbmdTdHJpbmcpKQogICAgICAg
ICAgICAgbV9yZWNvZ25pdGlvblJlc3VsdHMuc2V0KGxhbmdTdHJpbmcsIFZlY3RvcjxXZWJTcGVl
Y2hJbnB1dFJlc3VsdD4oKSk7Ci0gICAgICAgIG1fcmVjb2duaXRpb25SZXN1bHRzLmZpbmQobGFu
Z1N0cmluZyktPnNlY29uZC5hcHBlbmQocmVzKTsKKyAgICAgICAgbV9yZWNvZ25pdGlvblJlc3Vs
dHMuZmluZChsYW5nU3RyaW5nKS0+dmFsdWUuYXBwZW5kKHJlcyk7CiAgICAgfQogfQogCmRpZmYg
LS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9Ob3RpZmljYXRpb25QcmVzZW50
ZXIuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTm90aWZpY2F0aW9uUHJlc2Vu
dGVyLmNwcAppbmRleCAwYzU0MDBmNWU5ZThmNzE3MGVjZjU5OWE4MWJkNDI2ZmJkNzcyOTFkLi5h
MjE1ODhmNzQ0ZTVjM2Y1YWI3MGRiZGIwM2MyNzVjNTA3MDhmMDNhIDEwMDY0NAotLS0gYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9Ob3RpZmljYXRpb25QcmVzZW50ZXIuY3BwCisrKyBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL05vdGlmaWNhdGlvblByZXNlbnRlci5jcHAK
QEAgLTc1LDcgKzc1LDcgQEAgYm9vbCBOb3RpZmljYXRpb25QcmVzZW50ZXI6OnNpbXVsYXRlQ2xp
Y2soY29uc3QgV2ViU3RyaW5nJiB0aXRsZSkKICAgICBpZiAobV9hY3RpdmVOb3RpZmljYXRpb25z
LmZpbmQoaWQpID09IG1fYWN0aXZlTm90aWZpY2F0aW9ucy5lbmQoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIAotICAgIGNvbnN0IFdlYk5vdGlmaWNhdGlvbiYgbm90aWZpY2F0aW9uID0g
bV9hY3RpdmVOb3RpZmljYXRpb25zLmZpbmQoaWQpLT5zZWNvbmQ7CisgICAgY29uc3QgV2ViTm90
aWZpY2F0aW9uJiBub3RpZmljYXRpb24gPSBtX2FjdGl2ZU5vdGlmaWNhdGlvbnMuZmluZChpZCkt
PnZhbHVlOwogICAgIFdlYk5vdGlmaWNhdGlvbiBldmVudFRhcmdldChub3RpZmljYXRpb24pOwog
ICAgIGV2ZW50VGFyZ2V0LmRpc3BhdGNoQ2xpY2tFdmVudCgpOwogICAgIHJldHVybiB0cnVlOwpA
QCAtODksNyArODksNyBAQCBib29sIE5vdGlmaWNhdGlvblByZXNlbnRlcjo6c2hvdyhjb25zdCBX
ZWJOb3RpZmljYXRpb24mIG5vdGlmaWNhdGlvbikKICAgICAgICAgV1RGOjpTdHJpbmcgcmVwbGFj
ZUlkKG5vdGlmaWNhdGlvbi5yZXBsYWNlSWQoKS5kYXRhKCksIG5vdGlmaWNhdGlvbi5yZXBsYWNl
SWQoKS5sZW5ndGgoKSk7CiAgICAgICAgIGlmIChtX3JlcGxhY2VtZW50cy5maW5kKHJlcGxhY2VJ
ZCkgIT0gbV9yZXBsYWNlbWVudHMuZW5kKCkpCiAgICAgICAgICAgICBwcmludGYoIlJFUExBQ0lO
RyBOT1RJRklDQVRJT04gJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgbV9yZXBsYWNlbWVudHMu
ZmluZChyZXBsYWNlSWQpLT5zZWNvbmQudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAg
ICAgbV9yZXBsYWNlbWVudHMuZmluZChyZXBsYWNlSWQpLT52YWx1ZS51dGY4KCkuZGF0YSgpKTsK
IAogICAgICAgICBtX3JlcGxhY2VtZW50cy5zZXQocmVwbGFjZUlkLCBXVEY6OlN0cmluZyhpZGVu
dGlmaWVyLmRhdGEoKSwgaWRlbnRpZmllci5sZW5ndGgoKSkpOwogICAgIH0KZGlmZiAtLWdpdCBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZlcmVuY2VzLmNwcCBiL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZlcmVuY2VzLmNwcAppbmRleCBlOTljOThl
YzFlM2IzYmNjYmNhNjE3MzZiMTQ0Mzc2NWIyNzMxNDc0Li5iNTAyMWMzNWY5MTNhN2NlODUxZGRh
N2Y2NWI4YWUyMjg0NjFiOTkzIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9XZWJQcmVmZXJlbmNlcy5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vV2ViUHJlZmVyZW5jZXMuY3BwCkBAIC0xNTcsOSArMTU3LDkgQEAgdHlwZWRlZiB2b2lkICgq
U2V0Rm9udEZhbWlseVdyYXBwZXIpKFdlYlNldHRpbmdzKiwgY29uc3QgV2ViU3RyaW5nJiwgVVNj
cmlwdENvZGUKIHN0YXRpYyB2b2lkIGFwcGx5Rm9udE1hcChXZWJTZXR0aW5ncyogc2V0dGluZ3Ms
IGNvbnN0IFdlYlByZWZlcmVuY2VzOjpTY3JpcHRGb250RmFtaWx5TWFwJiBtYXAsIFNldEZvbnRG
YW1pbHlXcmFwcGVyIHNldHRlcikKIHsKICAgICBmb3IgKFdlYlByZWZlcmVuY2VzOjpTY3JpcHRG
b250RmFtaWx5TWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbWFwLmJlZ2luKCk7IGl0ZXIgIT0g
bWFwLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgY29uc3QgV2ViU3RyaW5nJiBmb250ID0gaXRl
ci0+c2Vjb25kOworICAgICAgICBjb25zdCBXZWJTdHJpbmcmIGZvbnQgPSBpdGVyLT52YWx1ZTsK
ICAgICAgICAgaWYgKCFmb250LmlzTnVsbCgpICYmICFmb250LmlzRW1wdHkoKSkKLSAgICAgICAg
ICAgICgqc2V0dGVyKShzZXR0aW5ncywgZm9udCwgc3RhdGljX2Nhc3Q8VVNjcmlwdENvZGU+KGl0
ZXItPmZpcnN0KSk7CisgICAgICAgICAgICAoKnNldHRlcikoc2V0dGluZ3MsIGZvbnQsIHN0YXRp
Y19jYXN0PFVTY3JpcHRDb2RlPihpdGVyLT5rZXkpKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcCBiL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcAppbmRleCBiM2U5ZGRhMDE2NDkw
MGQwZGVhODllMWM3N2FjNzhkNTMwOWExZGFjLi4wMmM5MmMwNDAwMThkMGU2ZGM3YWQzM2RhYzAw
OTIzNjgxNjcyN2EwIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9X
ZWJWaWV3SG9zdC5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmll
d0hvc3QuY3BwCkBAIC0xNjQyLDcgKzE2NDIsNyBAQCB2b2lkIFdlYlZpZXdIb3N0OjpwcmludEZy
YW1lVXNlckdlc3R1cmVTdGF0dXMoV2ViRnJhbWUqIHdlYmZyYW1lLCBjb25zdCBjaGFyKiBtcwog
dm9pZCBXZWJWaWV3SG9zdDo6cHJpbnRSZXNvdXJjZURlc2NyaXB0aW9uKHVuc2lnbmVkIGlkZW50
aWZpZXIpCiB7CiAgICAgUmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZUlkZW50
aWZpZXJNYXAuZmluZChpZGVudGlmaWVyKTsKLSAgICBwcmludGYoIiVzIiwgaXQgIT0gbV9yZXNv
dXJjZUlkZW50aWZpZXJNYXAuZW5kKCkgPyBpdC0+c2Vjb25kLmNfc3RyKCkgOiAiPHVua25vd24+
Iik7CisgICAgcHJpbnRmKCIlcyIsIGl0ICE9IG1fcmVzb3VyY2VJZGVudGlmaWVyTWFwLmVuZCgp
ID8gaXQtPnZhbHVlLmNfc3RyKCkgOiAiPHVua25vd24+Iik7CiB9CiAKIHZvaWQgV2ViVmlld0hv
c3Q6OnNldFBlbmRpbmdFeHRyYURhdGEoUGFzc093blB0cjxUZXN0U2hlbGxFeHRyYURhdGE+IGV4
dHJhRGF0YSkKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9BY2Nlc3NpYmls
aXR5Q29udHJvbGxlcldpbi5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vQWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXJXaW4uY3BwCmluZGV4IDdmOWFhNmNjMmVlOTI5YjJiZjhlYTQxNmY1ZDY1
YmIwNTZlM2VhZDEuLmViMzhiNTQzNWMxNjlkMmJkZmIwNTY4YzYzZWEyMDNiNWM2ZmEzZGMgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9BY2Nlc3NpYmlsaXR5Q29udHJvbGxl
cldpbi5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0FjY2Vzc2liaWxpdHlDb250
cm9sbGVyV2luLmNwcApAQCAtNTgsNyArNTgsNyBAQCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6
fkFjY2Vzc2liaWxpdHlDb250cm9sbGVyKCkKICAgICAgICAgVW5ob29rV2luRXZlbnQobV9ub3Rp
ZmljYXRpb25zRXZlbnRIb29rKTsKIAogICAgIGZvciAoSGFzaE1hcDxQbGF0Zm9ybVVJRWxlbWVu
dCwgSlNPYmplY3RSZWY+OjppdGVyYXRvciBpdCA9IG1fbm90aWZpY2F0aW9uTGlzdGVuZXJzLmJl
Z2luKCk7IGl0ICE9IG1fbm90aWZpY2F0aW9uTGlzdGVuZXJzLmVuZCgpOyArK2l0KQotICAgICAg
ICBKU1ZhbHVlVW5wcm90ZWN0KGZyYW1lLT5nbG9iYWxDb250ZXh0KCksIGl0LT5zZWNvbmQpOwor
ICAgICAgICBKU1ZhbHVlVW5wcm90ZWN0KGZyYW1lLT5nbG9iYWxDb250ZXh0KCksIGl0LT52YWx1
ZSk7CiB9CiAKIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6
OmVsZW1lbnRBdFBvaW50KGludCB4LCBpbnQgeSkKQEAgLTI5Myw3ICsyOTMsNyBAQCB2b2lkIEFj
Y2Vzc2liaWxpdHlDb250cm9sbGVyOjpyZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lcigpCiB2b2lk
IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjp3aW5Ob3RpZmljYXRpb25SZWNlaXZlZChQbGF0Zm9y
bVVJRWxlbWVudCBlbGVtZW50LCBjb25zdCBzdHJpbmcmIGV2ZW50TmFtZSkKIHsKICAgICBmb3Ig
KEhhc2hNYXA8UGxhdGZvcm1VSUVsZW1lbnQsIEpTT2JqZWN0UmVmPjo6aXRlcmF0b3IgaXQgPSBt
X25vdGlmaWNhdGlvbkxpc3RlbmVycy5iZWdpbigpOyBpdCAhPSBtX25vdGlmaWNhdGlvbkxpc3Rl
bmVycy5lbmQoKTsgKytpdCkgewotICAgICAgICBDT01QdHI8SVNlcnZpY2VQcm92aWRlcj4gdGhp
c1NlcnZpY2VQcm92aWRlcihRdWVyeSwgaXQtPmZpcnN0KTsKKyAgICAgICAgQ09NUHRyPElTZXJ2
aWNlUHJvdmlkZXI+IHRoaXNTZXJ2aWNlUHJvdmlkZXIoUXVlcnksIGl0LT5rZXkpOwogICAgICAg
ICBpZiAoIXRoaXNTZXJ2aWNlUHJvdmlkZXIpCiAgICAgICAgICAgICBjb250aW51ZTsKIApAQCAt
MzE2LDcgKzMxNiw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6Ondpbk5vdGlmaWNh
dGlvblJlY2VpdmVkKFBsYXRmb3JtVUlFbGVtZW50IGVsZW1lbnQsCiAKICAgICAgICAgSlNSZXRh
aW5QdHI8SlNTdHJpbmdSZWY+IGpzTm90aWZpY2F0aW9uKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZyhldmVudE5hbWUuY19zdHIoKSkpOwogICAgICAgICBKU1ZhbHVlUmVmIGFy
Z3VtZW50ID0gSlNWYWx1ZU1ha2VTdHJpbmcoZnJhbWUtPmdsb2JhbENvbnRleHQoKSwganNOb3Rp
ZmljYXRpb24uZ2V0KCkpOwotICAgICAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9uKGZyYW1lLT5n
bG9iYWxDb250ZXh0KCksIGl0LT5zZWNvbmQsIE5VTEwsIDEsICZhcmd1bWVudCwgTlVMTCk7Cisg
ICAgICAgIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24oZnJhbWUtPmdsb2JhbENvbnRleHQoKSwgaXQt
PnZhbHVlLCAwLCAxLCAmYXJndW1lbnQsIDApOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvVG9v
bHMvRHVtcFJlbmRlclRyZWUvd2luL0xheW91dFRlc3RDb250cm9sbGVyV2luLmNwcCBiL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL3dpbi9MYXlvdXRUZXN0Q29udHJvbGxlcldpbi5jcHAKaW5kZXggMWI2
YTQxNTdjNDhlNjY2NWQ1MzljYWM4YWQ3ODgwOTMyM2M3MjBmNS4uZGNjYTgxYjg1ZGVhNTY1N2Fk
MzFmMzlmNTc5Nzg5NWM3MzBkOTJkZiAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
d2luL0xheW91dFRlc3RDb250cm9sbGVyV2luLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJl
ZS93aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJXaW4uY3BwCkBAIC0xMjgyLDggKzEyODIsOCBAQCB1
bnNpZ25lZCB3b3JsZElERm9yV29ybGQoSVdlYlNjcmlwdFdvcmxkKiB3b3JsZCkKIHsKICAgICBX
b3JsZE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gd29ybGRNYXAoKS5lbmQoKTsKICAgICBmb3Ig
KFdvcmxkTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHdvcmxkTWFwKCkuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kID09IHdvcmxkKQotICAgICAgICAg
ICAgcmV0dXJuIGl0LT5maXJzdDsKKyAgICAgICAgaWYgKGl0LT52YWx1ZSA9PSB3b3JsZCkKKyAg
ICAgICAgICAgIHJldHVybiBpdC0+a2V5OwogICAgIH0KIAogICAgIHJldHVybiAwOwpAQCAtMTMw
Miw3ICsxMzAyLDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJ
bklzb2xhdGVkV29ybGQodW5zaWduZWQgd29ybGRJRCwgSlNPYmoKICAgICAgICAgaWYgKEZBSUxF
RChXZWJLaXRDcmVhdGVJbnN0YW5jZShfX3V1aWRvZihXZWJTY3JpcHRXb3JsZCksIDAsIF9fdXVp
ZG9mKHdvcmxkKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZ3b3JsZCkpKSkKICAgICAgICAg
ICAgIHJldHVybjsKICAgICB9IGVsc2UgewotICAgICAgICBDT01QdHI8SVdlYlNjcmlwdFdvcmxk
PiYgd29ybGRTbG90ID0gd29ybGRNYXAoKS5hZGQod29ybGRJRCwgMCkuaXRlcmF0b3ItPnNlY29u
ZDsKKyAgICAgICAgQ09NUHRyPElXZWJTY3JpcHRXb3JsZD4mIHdvcmxkU2xvdCA9IHdvcmxkTWFw
KCkuYWRkKHdvcmxkSUQsIDApLml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgaWYgKCF3b3JsZFNs
b3QgJiYgRkFJTEVEKFdlYktpdENyZWF0ZUluc3RhbmNlKF9fdXVpZG9mKFdlYlNjcmlwdFdvcmxk
KSwgMCwgX191dWlkb2Yod29ybGRTbG90KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZ3b3Js
ZFNsb3QpKSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIHdvcmxkID0gd29ybGRTbG90
OwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1Jlc291cmNlTG9hZERlbGVn
YXRlLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9SZXNvdXJjZUxvYWREZWxlZ2F0ZS5j
cHAKaW5kZXggMjZiNzIyYTRlYTVjZGM2NGYxMzdjZWY3NzJjMzQ4ZjY5NTQ4OTc2NC4uYThjZDNi
ZDBjMTA2YmYyMmI0NmRhYTljMTMyZjYzMTg2N2I1ZTFmOCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVt
cFJlbmRlclRyZWUvd2luL1Jlc291cmNlTG9hZERlbGVnYXRlLmNwcAorKysgYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS93aW4vUmVzb3VyY2VMb2FkRGVsZWdhdGUuY3BwCkBAIC02Niw3ICs2Niw3IEBA
IHdzdHJpbmcgUmVzb3VyY2VMb2FkRGVsZWdhdGU6OmRlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0
UmVzdWx0KHVuc2lnbmVkIGxvbmcgaWRlCiAgICAgaWYgKGl0ID09IG1fdXJsTWFwLmVuZCgpKQog
ICAgICAgICByZXR1cm4gTCI8dW5rbm93bj4iOwogCi0gICAgcmV0dXJuIHVybFN1aXRhYmxlRm9y
VGVzdFJlc3VsdChpdC0+c2Vjb25kKTsKKyAgICByZXR1cm4gdXJsU3VpdGFibGVGb3JUZXN0UmVz
dWx0KGl0LT52YWx1ZSk7CiB9CiAKIHdzdHJpbmcgUmVzb3VyY2VMb2FkRGVsZWdhdGU6OmRlc2Ny
aXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KElXZWJVUkxSZXF1ZXN0KiByZXF1ZXN0KQpkaWZm
IC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9MYXlvdXRUZXN0
Q29udHJvbGxlci5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0xh
eW91dFRlc3RDb250cm9sbGVyLmNwcAppbmRleCBjZWM0MzQ0ZGQyY2YzNDU2ZjdiNTJkNzdiOTdk
MzBjN2VkMjUwMGVjLi40ZDFkNDE0OGYyNjQwZjFmZDA1ZmNhMjQ5NTJjZjM0ODIxMDQ3NzEzIDEw
MDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0xheW91dFRl
c3RDb250cm9sbGVyLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcApAQCAtNDg5LDggKzQ4OSw4IEBAIHVuc2lnbmVk
IExheW91dFRlc3RDb250cm9sbGVyOjp3b3JsZElERm9yV29ybGQoV0tCdW5kbGVTY3JpcHRXb3Js
ZFJlZiB3b3JsZCkKIHsKICAgICBXb3JsZE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gd29ybGRN
YXAoKS5lbmQoKTsKICAgICBmb3IgKFdvcmxkTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHdvcmxk
TWFwKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25k
ID09IHdvcmxkKQotICAgICAgICAgICAgcmV0dXJuIGl0LT5maXJzdDsKKyAgICAgICAgaWYgKGl0
LT52YWx1ZSA9PSB3b3JsZCkKKyAgICAgICAgICAgIHJldHVybiBpdC0+a2V5OwogICAgIH0KIAog
ICAgIHJldHVybiAwOwpAQCAtNTA0LDcgKzUwNCw3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKEpTQ29udGV4dFJlZiBjb250ZXh0LCB1
CiAgICAgaWYgKCF3b3JsZElEKQogICAgICAgICB3b3JsZC5hZG9wdChXS0J1bmRsZVNjcmlwdFdv
cmxkQ3JlYXRlV29ybGQoKSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLQnVu
ZGxlU2NyaXB0V29ybGRSZWY+JiB3b3JsZFNsb3QgPSB3b3JsZE1hcCgpLmFkZCh3b3JsZElELCAw
KS5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICBXS1JldGFpblB0cjxXS0J1bmRsZVNjcmlwdFdv
cmxkUmVmPiYgd29ybGRTbG90ID0gd29ybGRNYXAoKS5hZGQod29ybGRJRCwgMCkuaXRlcmF0b3It
PnZhbHVlOwogICAgICAgICBpZiAoIXdvcmxkU2xvdCkKICAgICAgICAgICAgIHdvcmxkU2xvdC5h
ZG9wdChXS0J1bmRsZVNjcmlwdFdvcmxkQ3JlYXRlV29ybGQoKSk7CiAgICAgICAgIHdvcmxkID0g
d29ybGRTbG90Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138874</attachid>
            <date>2012-04-25 14:31:54 -0700</date>
            <delta_ts>2012-07-27 16:20:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-82784-20120425183152.patch</filename>
            <type>text/plain</type>
            <size>632749</size>
            <attacher name="Caio Marcelo de Oliveira Filho">cmarcelo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE1MjQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
NzI1MWQzMzE0ZmJmM2ExZWEwNWFiYTRjOGI3MTc4Zjk3MDcyZDRmLi4xY2E0ZTViMzZhMWVmMzg5
YWMxYjAwZmE4MGNjMmRhNjA2ZDJhZGE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMTEgQEAKKzIwMTItMDQtMjUgIENhaW8gTWFyY2VsbyBkZSBPbGl2ZWlyYSBGaWxobyAg
PGNhaW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KKworICAgICAgICBSZW5hbWUgZmlyc3Qvc2Vj
b25kIHRvIGtleS92YWx1ZSBpbiBIYXNoTWFwIGl0ZXJhdG9ycworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI3ODQKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0Lmg6Cisg
ICAgICAgIChKU0M6OkpTQ2FsbGJhY2tPYmplY3REYXRhOjpKU1ByaXZhdGVQcm9wZXJ0eU1hcDo6
Z2V0UHJpdmF0ZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNDYWxsYmFja09iamVjdERhdGE6
OkpTUHJpdmF0ZVByb3BlcnR5TWFwOjpzZXRQcml2YXRlUHJvcGVydHkpOgorICAgICAgICAoSlND
OjpKU0NhbGxiYWNrT2JqZWN0RGF0YTo6SlNQcml2YXRlUHJvcGVydHlNYXA6OnZpc2l0Q2hpbGRy
ZW4pOgorICAgICAgICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmg6CisgICAgICAg
IChKU0M6Ojo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgICogQVBJL0pTQ2xhc3NSZWYu
Y3BwOgorICAgICAgICAoT3BhcXVlSlNDbGFzczo6fk9wYXF1ZUpTQ2xhc3MpOgorICAgICAgICAo
T3BhcXVlSlNDbGFzc0NvbnRleHREYXRhOjpPcGFxdWVKU0NsYXNzQ29udGV4dERhdGEpOgorICAg
ICAgICAoT3BhcXVlSlNDbGFzczo6Y29udGV4dERhdGEpOgorICAgICAgICAqIGJ5dGVjb2RlL0Nv
ZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcCk6CisgICAgICAgIChK
U0M6OkV2YWxDb2RlQ2FjaGU6OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKiBieXRlY29kZS9K
dW1wVGFibGUuaDoKKyAgICAgICAgKEpTQzo6U3RyaW5nSnVtcFRhYmxlOjpvZmZzZXRGb3JWYWx1
ZSk6CisgICAgICAgIChKU0M6OlN0cmluZ0p1bXBUYWJsZTo6Y3RpRm9yVmFsdWUpOgorICAgICAg
ICAqIGJ5dGVjb2RlL0xhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcDoKKyAgICAgICAgKEpTQzo6
TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVQYXJzZXI6OmdldElmUHJlc2VudCk6CisgICAgICAgICog
Ynl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNv
ZGVHZW5lcmF0b3I6OmFkZFZhcik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjph
ZGRHbG9iYWxWYXIpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6YWRkQ29uc3Rh
bnQpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6YWRkQ29uc3RhbnRWYWx1ZSk6
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TG9hZCk6CisgICAgICAgIChK
U0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjphZGRTdHJpbmdDb25zdGFudCk6CisgICAgICAgIChKU0M6
OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TGF6eU5ld0Z1bmN0aW9uKToKKyAgICAgICAgKiBieXRl
Y29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcDoKKyAgICAgICAgKEpTQzo6UHJvcGVydHlMaXN0Tm9k
ZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKiBkZWJ1Z2dlci9EZWJ1Z2dlci5jcHA6CisgICAg
ICAgICogZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QXNz
ZW1ibHlIZWxwZXJzOjpkZWNvZGVkQ29kZU1hcEZvcik6CisgICAgICAgICogZGZnL0RGR0J5dGVD
b2RlQ2FjaGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZUNhY2hlOjp+Qnl0ZUNvZGVD
YWNoZSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVDYWNoZTo6Z2V0KToKKyAgICAgICAg
KiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2Rl
UGFyc2VyOjpjZWxsQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmVTdGFja0VudHJ5KToKKyAgICAgICAgKiBoZWFwL0hl
YXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFwOjptYXJrUHJvdGVjdGVkT2JqZWN0cyk6CisgICAg
ICAgICogaGVhcC9IZWFwLmg6CisgICAgICAgIChKU0M6OkhlYXA6OmZvckVhY2hQcm90ZWN0ZWRD
ZWxsKToKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRl
Q29tcGlsZSk6CisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKEpTQzo6SklU
VGh1bmtzOjpjdGlTdHViKToKKyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpob3N0RnVuY3Rpb25T
dHViKToKKyAgICAgICAgKiBwYXJzZXIvUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6OjpwYXJz
ZVN0cmljdE9iamVjdExpdGVyYWwpOgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGUuY3BwOgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6ZnVuY3Rpb25OYW1lQ291bnRFbnRyeUNvbXBh
cmF0b3IpOgorICAgICAgICAoSlNDOjpQcm9maWxlOjpkZWJ1Z1ByaW50RGF0YVNhbXBsZVN0eWxl
KToKKyAgICAgICAgVGhpcyBjb2RlIGtlcHQgYSB2ZWN0b3Igb2YgdGhlIHBhaXJzIHRoYXQgd2Vy
ZSB0aGUgImNvbnRlbnRzIiBvZiB0aGUKKyAgICAgICAgaXRlcmF0b3JzLiBUaGlzIGlzIGNoYW5n
ZWQgdG8gdXNlIGEgS2V5VmFsdWVQYWlyLiBXZSBtYWtlIHVzZSBIYXNoQ291bnQncworICAgICAg
ICBWYWx1ZVR5cGUgKHdoaWNoIHJlcHJlc2VudHMgb25seSB0aGUga2V5KSB0byBnZXQgdGhlIHBy
b3BlciBrZXkgcGFyYW1ldGVyIGZvcgorICAgICAgICBLZXlWYWx1ZVBhaXIuCisKKyAgICAgICAg
KiBydW50aW1lL0lkZW50aWZpZXIuY3BwOgorICAgICAgICAoSlNDOjpJZGVudGlmaWVyOjphZGQp
OgorICAgICAgICAqIHJ1bnRpbWUvSlNBY3RpdmF0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6SlNB
Y3RpdmF0aW9uOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNBY3RpdmF0
aW9uOjpzeW1ib2xUYWJsZVB1dFdpdGhBdHRyaWJ1dGVzKToKKyAgICAgICAgKiBydW50aW1lL0pT
QXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpwdXQpOgorICAg
ICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpwdXREaXJlY3QpOgorICAgICAgICAoSlND
OjpTcGFyc2VBcnJheVZhbHVlTWFwOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6SlNB
cnJheTo6ZW50ZXJEaWN0aW9uYXJ5TW9kZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmRlZmlu
ZU93bk51bWVyaWNQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmdldE93blByb3Bl
cnR5U2xvdEJ5SW5kZXgpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpwdXRCeUluZGV4QmV5b25kVmVjdG9y
TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0
b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgp
OgorICAgICAgICAoSlNDOjpKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAg
KEpTQzo6SlNBcnJheTo6c2V0TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c29ydCk6
CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmNvbXBhY3RGb3JTb3J0aW5nKToKKyAgICAgICAgKEpT
Qzo6SlNBcnJheTo6Y2hlY2tDb25zaXN0ZW5jeSk6CisgICAgICAgICogcnVudGltZS9KU1Zhcmlh
YmxlT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNWYXJpYWJsZU9iamVjdDo6Z2V0T3duUHJv
cGVydHlOYW1lcyk6CisgICAgICAgICogcnVudGltZS9KU1ZhcmlhYmxlT2JqZWN0Lmg6CisgICAg
ICAgIChKU0M6OkpTVmFyaWFibGVPYmplY3Q6OnN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMp
OgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwQ2FjaGUuY3BwOgorICAgICAgICAoSlNDOjpSZWdF
eHBDYWNoZTo6bG9va3VwT3JDcmVhdGUpOgorICAgICAgICAoSlNDOjpSZWdFeHBDYWNoZTo6aW52
YWxpZGF0ZUNvZGUpOgorICAgICAgICAqIHJ1bnRpbWUvV2Vha0dDTWFwLmg6CisgICAgICAgIChK
U0M6OldlYWtHQ01hcDo6aXRlcmF0b3I6OmdldCk6CisgICAgICAgIChKU0M6OldlYWtHQ01hcDo6
Y2xlYXIpOgorICAgICAgICAoSlNDOjpXZWFrR0NNYXA6OnJlbW92ZSk6CisgICAgICAgIChKU0M6
OldlYWtHQ01hcDo6YWRkKToKKyAgICAgICAgKEpTQzo6V2Vha0dDTWFwOjpzZXQpOgorICAgICAg
ICAqIHRvb2xzL1Byb2ZpbGVUcmVlTm9kZS5oOgorICAgICAgICAoUHJvZmlsZVRyZWVOb2RlKToK
KyAgICAgICAgKEpTQzo6UHJvZmlsZVRyZWVOb2RlOjpzYW1wbGVDaGlsZCk6CisgICAgICAgIChK
U0M6OlByb2ZpbGVUcmVlTm9kZTo6Y2hpbGRDb3VudCk6CisgICAgICAgIChKU0M6OlByb2ZpbGVU
cmVlTm9kZTo6ZHVtcEludGVybmFsKToKKyAgICAgICAgKEpTQzo6UHJvZmlsZVRyZWVOb2RlOjpj
b21wYXJlRW50cmllcyk6CisgICAgICAgIE1hcEVudHJ5IGlzIHN1cHBvc2VkIHRvIGJlIGRlZmlu
ZWQgYXMgdGhlIFZhbHVlVHlwZSBvZiB0aGUgSGFzaE1hcCAodHlwZQorICAgICAgICAiY29udGVu
dHMiIG9mIGl0ZXJhdG9ycywgaW4gdGhpcyBjYXNlKS4gQ2hhbmdlIHRoZSBjb2RlIHRvIG1ha2Ug
dXNlIG9mCisgICAgICAgIEhhc2hNYXA6OlZhbHVlVHlwZSBkaXJlY3RseSwgd2hpY2ggbm93IGlz
IGEgS2V5VmFsdWVQYWlyIHR5cGUuCisKIDIwMTItMDQtMjUgIEZpbGlwIFBpemxvICA8ZnBpemxv
QGFwcGxlLmNvbT4KIAogICAgICAgICBodHRwOi8vYmVsbGFyZC5vcmcvanNsaW51eC8gdHJpZ2dl
cnMgYW4gYXNzZXJ0aW9uIGZhaWx1cmUgaW4gdGhlIERGRyBKSVQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggMzZiYjUxOTQzYWZk
NTkxMmRlYThkMWU1ZGJhZTI5OTkyZGRiOWE3Ny4uNTc0NzU0YTEzMzI4OGZmMGNlNjhhZDkxMGYz
OTUzMzI4YzU3N2NhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3MyBAQAorMjAxMi0wNC0yNSAgQ2FpbyBNYXJj
ZWxvIGRlIE9saXZlaXJhIEZpbGhvICA8Y2Fpby5vbGl2ZWlyYUBvcGVuYm9zc2Eub3JnPgorCisg
ICAgICAgIFJlbmFtZSBmaXJzdC9zZWNvbmQgdG8ga2V5L3ZhbHVlIGluIEhhc2hNYXAgaXRlcmF0
b3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Mjc4
NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENoYW5n
ZSBpbiBIYXNoTWFwIHRoZSBWYWx1ZVR5cGUgZnJvbSBzdGQ6OnBhaXIgdG8gYSBuZXcgc3BlY2lh
bGl6ZWQgc3RydWN0CisgICAgICAgIEtleVZhbHVlUGFpci4gSW4gSGFzaE1hcCB0aGUgVmFsdWVU
eXBlIHNlcnZlIGFzICJjb250ZW50cyIgb2YgdGhlIGl0ZXJhdG9ycy4KKyAgICAgICAgVGhlIGRp
ZmZlcmVuY2UgaXMgdGhhdCBub3cgdGhlIG1lbWJlcnMgYXJlIGNhbGxlZCAna2V5JyBhbmQgJ3Zh
bHVlJyBpbnN0ZWFkIG9mCisgICAgICAgICdmaXJzdCcgYW5kICdzZWNvbmQnLiBBbHNvIGFkZCB0
aGUgYXBwcm9wcmlhdGVkIEhhc2hUcmFpdHMuCisKKyAgICAgICAgVGhlIHJlc3Qgb2YgdGhlIHBh
dGNoIGlzIGp1c3QgY2hhbmdpbmcgdGhlIGNhbGxzaXRlcyB0byB1c2UgdGhlIG5ldyBuYW1lcy4g
Tm90ZQorICAgICAgICB0aGF0IEhhc2hDb3VudGVkU2V0IGV4cG9zZXMgSGFzaE1hcCBpdGVyYXRv
cnMgYXMgdGhlaXIgb3duLCBzbyBIYXNoQ291bnRlZFNldAorICAgICAgICBpbnRlcmZhY2UgaXMg
YWxzbyBjaGFuZ2VkLgorCisgICAgICAgICogd3RmL0hhc2hDb3VudGVkU2V0Lmg6CisgICAgICAg
IChXVEY6Ojo6YWRkKToKKyAgICAgICAgKFdURjo6OjpyZW1vdmUpOgorICAgICAgICAoV1RGOjpj
b3B5VG9WZWN0b3IpOgorICAgICAgICAqIHd0Zi9IYXNoSXRlcmF0b3JzLmg6CisgICAgICAgIChI
YXNoVGFibGVDb25zdEtleXNJdGVyYXRvcik6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZUNvbnN0
S2V5c0l0ZXJhdG9yOjpnZXQpOgorICAgICAgICAoSGFzaFRhYmxlQ29uc3RWYWx1ZXNJdGVyYXRv
cik6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZUNvbnN0VmFsdWVzSXRlcmF0b3I6OmdldCk6Cisg
ICAgICAgIChIYXNoVGFibGVLZXlzSXRlcmF0b3IpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGVL
ZXlzSXRlcmF0b3I6OmdldCk6CisgICAgICAgIChIYXNoVGFibGVWYWx1ZXNJdGVyYXRvcik6Cisg
ICAgICAgIChXVEY6Okhhc2hUYWJsZVZhbHVlc0l0ZXJhdG9yOjpnZXQpOgorICAgICAgICAqIHd0
Zi9IYXNoTWFwLmg6CisgICAgICAgIChXVEY6OktleVZhbHVlUGFpcktleUV4dHJhY3Rvcjo6ZXh0
cmFjdCk6CisgICAgICAgIChXVEYpOgorICAgICAgICAoSGFzaE1hcCk6CisgICAgICAgIChXVEY6
Okhhc2hNYXBUcmFuc2xhdG9yOjp0cmFuc2xhdGUpOgorICAgICAgICAoV1RGOjpIYXNoTWFwVHJh
bnNsYXRvckFkYXB0ZXI6OnRyYW5zbGF0ZSk6CisgICAgICAgIChXVEY6Ojo6c2V0KToKKyAgICAg
ICAgKFdURjo6OjpnZXQpOgorICAgICAgICAoV1RGOjo6OnRha2UpOgorICAgICAgICAoV1RGOjpv
cGVyYXRvcj09KToKKyAgICAgICAgKFdURjo6ZGVsZXRlQWxsUGFpclNlY29uZHMpOgorICAgICAg
ICAoV1RGOjpkZWxldGVBbGxQYWlyRmlyc3RzKToKKyAgICAgICAgKiB3dGYvSGFzaFRhYmxlLmg6
CisgICAgICAgIChXVEY6Omhhc2hUYWJsZVN3YXApOgorICAgICAgICAoV1RGKToKKyAgICAgICAg
KFdURjo6OjpjaGVja1RhYmxlQ29uc2lzdGVuY3lFeGNlcHRTaXplKToKKyAgICAgICAgKiB3dGYv
SGFzaFRyYWl0cy5oOgorICAgICAgICAoS2V5VmFsdWVQYWlyKToKKyAgICAgICAgKFdURjo6S2V5
VmFsdWVQYWlyOjpLZXlWYWx1ZVBhaXIpOgorICAgICAgICAoV1RGKToKKyAgICAgICAgKEtleVZh
bHVlUGFpclRyYWl0cyk6CisgICAgICAgIChXVEY6OktleVZhbHVlUGFpclRyYWl0czo6ZW1wdHlW
YWx1ZSk6CisgICAgICAgIChXVEY6OktleVZhbHVlUGFpclRyYWl0czo6Y29uc3RydWN0RGVsZXRl
ZFZhbHVlKToKKyAgICAgICAgKFdURjo6S2V5VmFsdWVQYWlyVHJhaXRzOjppc0RlbGV0ZWRWYWx1
ZSk6CisgICAgICAgICogd3RmL01ldGFBbGxvY2F0b3IuY3BwOgorICAgICAgICAoV1RGOjpNZXRh
QWxsb2NhdG9yOjphZGRGcmVlU3BhY2UpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjpp
bmNyZW1lbnRQYWdlT2NjdXBhbmN5KToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6ZGVj
cmVtZW50UGFnZU9jY3VwYW5jeSk6CisgICAgICAgICogd3RmL1JlZkNvdW50ZWRMZWFrQ291bnRl
ci5jcHA6CisgICAgICAgIChXVEY6OlJlZkNvdW50ZWRMZWFrQ291bnRlcjo6flJlZkNvdW50ZWRM
ZWFrQ291bnRlcik6CisgICAgICAgICogd3RmL1JlZlB0ckhhc2hNYXAuaDoKKyAgICAgICAgKFdU
Rjo6OjpzZXQpOgorICAgICAgICAoV1RGOjo6OmdldCk6CisgICAgICAgIChXVEY6Ojo6aW5saW5l
R2V0KToKKyAgICAgICAgKFdURjo6Ojp0YWtlKToKKyAgICAgICAgKiB3dGYvU3BlY3RydW0uaDoK
KyAgICAgICAgKFdURjo6U3BlY3RydW06OmFkZCk6CisgICAgICAgIChXVEY6OlNwZWN0cnVtOjpi
dWlsZExpc3QpOgorICAgICAgICAqIHd0Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHA6CisgICAgICAg
IChXVEY6OmlkZW50aWZpZXJCeVB0aHJlYWRIYW5kbGUpOgorCiAyMDEyLTA0LTI1ICBQaGlsaXBw
ZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KIAogICAgICAgICBXZWJraXQgYnVpbGQg
ZmFpbHMgZHVlIHRvIG1pc3NpbmcgZ3N0cmVhbWVyIGluY2x1ZGUgZmlsZSBvbiBLdWJ1bnR1IDgu
MDQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwppbmRleCA0MjdkZWQ0MmUxOTZmODcyMmNmMWIzODk1YmE0NzUyN2NlMzJmYWY4
Li5lYzEzOWFhMDdlYzc0M2U5MWUyN2U4MDIyMThjYTc5ZWRmYTA2ZTg0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsNzkxIEBACisyMDEyLTA0LTI1ICBDYWlvIE1hcmNlbG8gZGUgT2xpdmVpcmEgRmls
aG8gIDxjYWlvLm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+CisKKyAgICAgICAgUmVuYW1lIGZpcnN0
L3NlY29uZCB0byBrZXkvdmFsdWUgaW4gSGFzaE1hcCBpdGVyYXRvcnMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyNzg0CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBNb2R1bGVzL2dlb2xvY2F0aW9uL0dl
b2xvY2F0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uOjpXYXRjaGVyczo6
ZmluZCk6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvbjo6V2F0Y2hlcnM6OnJlbW92ZSk6
CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpvYmplY3RTdG9yZU5h
bWVzKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRmFjdG9yeUJhY2tlbmRJbXBsOjpkZWxldGVEYXRh
YmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW5CYWNr
aW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVu
SW50ZXJuYWwpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjppbmRleCk6CisgICAgICAgICog
TW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjppbmRleE5hbWVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dCk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbCk6CisgICAgICAg
IChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJbnRlcm5hbCk6Cisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SURCVHJhbnNhY3Rpb246Om9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlRyYW5zYWN0aW9uOjpkaXNwYXRjaEV2ZW50KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRh
dGFiYXNlL0Fic3RyYWN0RGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3RE
YXRhYmFzZTo6cGVyZm9ybU9wZW5BbmRWZXJpZnkpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0
YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJh
Y2tlcjo6aW50ZXJydXB0QWxsRGF0YWJhc2VzRm9yQ29udGV4dCk6CisgICAgICAgICogTW9kdWxl
cy93ZWJkYXRhYmFzZS9PcmlnaW5Vc2FnZVJlY29yZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpP
cmlnaW5Vc2FnZVJlY29yZDo6ZGlza1VzYWdlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFi
YXNlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1FM
VHJhbnNhY3Rpb25Db29yZGluYXRvcjo6YWNxdWlyZUxvY2spOgorICAgICAgICAoV2ViQ29yZTo6
U1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6cmVsZWFzZUxvY2spOgorICAgICAgICAoV2ViQ29y
ZTo6U1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6c2h1dGRvd24pOgorICAgICAgICAqIE1vZHVs
ZXMvd2ViZGF0YWJhc2UvY2hyb21pdW0vRGF0YWJhc2VUcmFja2VyQ2hyb21pdW0uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjppbnRlcnJ1cHRBbGxEYXRhYmFzZXNGb3JD
b250ZXh0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL1F1b3RhVHJh
Y2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpRdW90YVRyYWNrZXI6OmdldERhdGFiYXNlU2l6
ZUFuZFNwYWNlQXZhaWxhYmxlVG9PcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6UXVvdGFUcmFj
a2VyOjp1cGRhdGVEYXRhYmFzZVNpemUpOgorICAgICAgICAqIE1vZHVsZXMvd2Vic29ja2V0cy9X
ZWJTb2NrZXREZWZsYXRlRnJhbWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldEV4
dGVuc2lvbkRlZmxhdGVGcmFtZTo6cHJvY2Vzc1Jlc3BvbnNlKToKKyAgICAgICAgKiBNb2R1bGVz
L3dlYnNvY2tldHMvV2ViU29ja2V0RXh0ZW5zaW9uRGlzcGF0Y2hlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyOjphcHBlbmRBY2NlcHRlZEV4dGVu
c2lvbik6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6On5BWE9iamVjdENhY2hlKToKKyAgICAgICAgKiBi
aW5kaW5ncy9nb2JqZWN0L0RPTU9iamVjdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RE9N
T2JqZWN0Q2FjaGU6OmNsZWFyQnlGcmFtZSk6CisgICAgICAgICogYmluZGluZ3MvanMvRE9NT2Jq
ZWN0SGFzaFRhYmxlTWFwLmg6CisgICAgICAgIChXZWJDb3JlOjpET01PYmplY3RIYXNoVGFibGVN
YXA6On5ET01PYmplY3RIYXNoVGFibGVNYXApOgorICAgICAgICAoV2ViQ29yZTo6RE9NT2JqZWN0
SGFzaFRhYmxlTWFwOjpnZXQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0RPTVdyYXBwZXJXb3Js
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1N0cmluZ093bmVyOjpmaW5hbGl6ZSk6CisgICAg
ICAgICogYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNh
Y2hlRE9NU3RydWN0dXJlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaDoK
KyAgICAgICAgKFdlYkNvcmU6OnVuY2FjaGVXcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
U3RyaW5nKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0RPTUdsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbik6CisgICAg
ICAgICogYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6
OmdldERPTUNvbnN0cnVjdG9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9QYWdlU2NyaXB0RGVi
dWdTZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZVNjcmlwdERlYnVnU2VydmVyOjph
ZGRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpQYWdlU2NyaXB0RGVidWdTZXJ2ZXI6OnJl
bW92ZUxpc3RlbmVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDYWNoZWRGcmFtZURh
dGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FjaGVkRnJhbWVEYXRhOjpTY3JpcHRD
YWNoZWRGcmFtZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FjaGVkRnJhbWVEYXRh
OjpyZXN0b3JlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6On5TY3JpcHRDb250cm9sbGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmNsZWFyV2luZG93U2hlbGwpOgor
ICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6YXR0YWNoRGVidWdnZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6dXBkYXRlRG9jdW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6Y3JlYXRlUm9vdE9iamVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpjbGVhbnVwU2NyaXB0T2JqZWN0c0ZvclBsdWdp
bik6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpjbGVhclNjcmlwdE9iamVj
dHMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuaDoKKyAgICAgICAg
KFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OndpbmRvd1NoZWxsKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdENvbnRyb2xsZXI6OmV4aXN0aW5nV2luZG93U2hlbGwpOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlw
dERlYnVnU2VydmVyOjpzZXRCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERl
YnVnU2VydmVyOjpyZW1vdmVCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERl
YnVnU2VydmVyOjpoYXNCcmVha3BvaW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxp
emVkU2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVTZXJpYWxpemVyOjpj
aGVja0ZvckR1cGxpY2F0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZVNlcmlhbGl6ZXI6OmR1
bXBJZlRlcm1pbmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lU2VyaWFsaXplcjo6d3JpdGUp
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtOgorICAgICAg
ICAoR2VuZXJhdGVJbXBsZW1lbnRhdGlvbik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Y4L1Y4RmxvYXQ2NEFycmF5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4RmxvYXQ2NEFy
cmF5OjpHZXRSYXdUZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOEZsb2F0NjRBcnJheTo6
R2V0VGVtcGxhdGUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RB
Y3RpdmVET01PYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0QWN0aXZlRE9NT2Jq
ZWN0OjpHZXRSYXdUZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RBY3RpdmVET01P
YmplY3Q6OkdldFRlbXBsYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgv
VjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0Q3Vz
dG9tTmFtZWRHZXR0ZXI6OkdldFJhd1RlbXBsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVz
dEN1c3RvbU5hbWVkR2V0dGVyOjpHZXRUZW1wbGF0ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6VjhUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6R2V0UmF3VGVtcGxhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6VjhUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6R2V0VGVtcGxhdGUpOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudFRhcmdldC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpWOFRlc3RFdmVudFRhcmdldDo6R2V0UmF3VGVtcGxhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6VjhUZXN0RXZlbnRUYXJnZXQ6OkdldFRlbXBsYXRlKToKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0SW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlY4VGVzdEludGVyZmFjZTo6R2V0UmF3VGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhU
ZXN0SW50ZXJmYWNlOjpHZXRUZW1wbGF0ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Y4L1Y4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6VjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6R2V0UmF3VGVtcGxhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6VjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6R2V0VGVtcGxhdGUpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROYW1lZENvbnN0cnVjdG9y
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdE5hbWVkQ29uc3RydWN0b3I6OkdldFJhd1Rl
bXBsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdE5hbWVkQ29uc3RydWN0b3I6OkdldFRl
bXBsYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdE9iajo6R2V0UmF3VGVtcGxhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6VjhUZXN0T2JqOjpHZXRUZW1wbGF0ZSk6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6
OkdldFJhd1RlbXBsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZTo6R2V0VGVtcGxhdGUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L05Q
VjhPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZnJlZVY4TlBPYmplY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6bnBDcmVhdGVWOFNjcmlwdE9iamVjdCk6CisgICAgICAgICogYmluZGluZ3Mv
djgvU2NyaXB0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9s
bGVyOjpjbGVhclNjcmlwdE9iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJv
bGxlcjo6Y2xlYW51cFNjcmlwdE9iamVjdHNGb3JQbHVnaW4pOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhC
aW5kaW5nUGVyQ29udGV4dERhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhCaW5kaW5nUGVy
Q29udGV4dERhdGE6OmRpc3Bvc2UpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4RE9NTWFwLmg6
CisgICAgICAgIChXZWJDb3JlOjpXZWFrUmVmZXJlbmNlTWFwOjpyZW1vdmVJZlByZXNlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6V2Vha1JlZmVyZW5jZU1hcDo6dmlzaXQpOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmVudW1lcmF0
ZUdsb2JhbEhhbmRsZXMpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VjhQcm94eTo6ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQpOgorICAgICAg
ICAoV2ViQ29yZTo6VjhQcm94eTo6c2V0SXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2luKToKKyAg
ICAgICAgKFdlYkNvcmU6OlY4UHJveHk6OnJlc2V0SXNvbGF0ZWRXb3JsZHMpOgorICAgICAgICAq
IGJpbmRpbmdzL3Y4L25wcnVudGltZS5jcHA6CisgICAgICAgICogYnJpZGdlL0lkZW50aWZpZXJS
ZXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SWRlbnRpZmllclJlcDo6Z2V0KToKKyAgICAgICAg
KiBicmlkZ2UvTlBfanNvYmplY3QuY3BwOgorICAgICAgICAoT2JqZWN0TWFwOjphZGQpOgorICAg
ICAgICAoT2JqZWN0TWFwOjpyZW1vdmUpOgorICAgICAgICAqIGJyaWRnZS9qbmkvanNjL0phdmFD
bGFzc0pTQy5jcHA6CisgICAgICAgIChKYXZhQ2xhc3M6On5KYXZhQ2xhc3MpOgorICAgICAgICAq
IGJyaWRnZS9ydW50aW1lX3Jvb3QuY3BwOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Um9vdE9i
amVjdDo6aW52YWxpZGF0ZSk6CisgICAgICAgICogY3NzL0NTU0NhbnZhc1ZhbHVlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0NhbnZhc1ZhbHVlOjpjYW52YXNDaGFuZ2VkKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0NhbnZhc1ZhbHVlOjpjYW52YXNSZXNpemVkKToKKyAgICAgICAgKiBjc3Mv
Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvdW50
ZXJUb0NTU1ZhbHVlKToKKyAgICAgICAgKiBjc3MvQ1NTQ3Jvc3NmYWRlVmFsdWUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTQ3Jvc3NmYWRlVmFsdWU6OmNyb3NzZmFkZUNoYW5nZWQpOgorICAg
ICAgICAqIGNzcy9DU1NGb250RmFjZVNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NG
b250RmFjZVNvdXJjZTo6Z2V0Rm9udERhdGEpOgorICAgICAgICAqIGNzcy9DU1NGb250U2VsZWN0
b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9yOjphZGRGb250RmFjZVJ1
bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9yOjpnZXRGb250RGF0YSk6Cisg
ICAgICAgICogY3NzL0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6YWRkQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU0ltYWdlR2VuZXJhdG9yVmFsdWU6OnJlbW92ZUNsaWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjpnZXRJbWFnZSk6CisgICAgICAgICogY3NzL0NTU1Nl
Z21lbnRlZEZvbnRGYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1NlZ21lbnRlZEZvbnRG
YWNlOjpnZXRGb250RGF0YSk6CisgICAgICAgICogY3NzL0NTU1NlbGVjdG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1NlbGVjdG9yOjpwYXJzZVBzZXVkb1R5cGUpOgorICAgICAgICAqIGNz
cy9DU1NWYWx1ZVBvb2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVmFsdWVQb29sOjpjcmVh
dGVDb2xvclZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ZhbHVlUG9vbDo6Y3JlYXRlRm9u
dEZhbWlseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ZhbHVlUG9vbDo6Y3JlYXRlRm9u
dEZhY2VWYWx1ZSk6CisgICAgICAgICogY3NzL1Byb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlv
bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246
OmNsb25lQW5kQ2FjaGVGb3JDU1NPTSk6CisgICAgICAgICogY3NzL1N0eWxlQnVpbGRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Q291bnRlcjo6YXBwbHlJbmhlcml0VmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUNvdW50ZXI6OmFwcGx5VmFsdWUp
OgorICAgICAgICAqIGNzcy9TdHlsZVByb3BlcnR5U2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUHJvcGVydHlTZXQ6OlN0eWxlUHJvcGVydHlTZXQpOgorICAgICAgICAqIGNzcy9TdHls
ZVJlc29sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RG
ZWF0dXJlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpydWxlU2V0Rm9yU2Nv
cGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwZW5kQXV0aG9yU3R5bGVz
aGVldHMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3dlZXBNYXRjaGVkUHJv
cGVydGllc0NhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RN
YXRjaGluZ1J1bGVzRm9yTGlzdCk6CisgICAgICAgICogZG9tL0NoZWNrZWRSYWRpb0J1dHRvbnMu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hlY2tlZFJhZGlvQnV0dG9uczo6YWRkQnV0dG9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkNoZWNrZWRSYWRpb0J1dHRvbnM6OnJlbW92ZUJ1dHRvbik6Cisg
ICAgICAgICogZG9tL0NoaWxkTGlzdE11dGF0aW9uU2NvcGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXI6OmNo
aWxkQWRkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0
YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXI6OndpbGxSZW1vdmVDaGlsZCk6CisgICAgICAgIChXZWJD
b3JlOjpDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlcjo6
aW5jcmVtZW50U2NvcGluZ0xldmVsKToKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdE11dGF0
aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVyOjpkZWNyZW1lbnRTY29waW5nTGV2
ZWwpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1
bWVudDo6cGFnZUdyb3VwVXNlclNoZWV0cyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6
d2luZG93TmFtZWRJdGVtcyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6ZG9jdW1lbnRO
YW1lZEl0ZW1zKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpzZXRTdGF0ZUZvck5ld0Zv
cm1FbGVtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dGFrZVN0YXRlRm9yRm9y
bUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmdldENTU0NhbnZhc0VsZW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmdldEl0ZW1zKToKKyAgICAgICAgKiBk
b20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50TWFya2VyQ29udHJvbGxlcjo6bWFya2VyQ29udGFpbmluZ1BvaW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVuZGVyZWRSZWN0c0Zvck1hcmtlcnMp
OgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW1vdmVNYXJr
ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVwYWlu
dE1hcmtlcnMpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpp
bnZhbGlkYXRlUmVuZGVyZWRSZWN0c0Zvck1hcmtlcnNJblJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpzaG93TWFya2Vycyk6CisgICAgICAgICogZG9t
L0RvY3VtZW50T3JkZXJlZE1hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE9yZGVy
ZWRNYXA6OnJlbW92ZSk6CisgICAgICAgICogZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRBdHRyaWJ1dGVEYXRhOjplbnN1cmVBdHRyKToKKyAg
ICAgICAgKiBkb20vRXZlbnRMaXN0ZW5lck1hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVu
dExpc3RlbmVyTWFwOjpldmVudFR5cGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50TGlzdGVu
ZXJNYXA6OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudExpc3RlbmVyTWFwOjpyZW1vdmUp
OgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRMaXN0ZW5lck1hcDo6ZmluZCk6CisgICAgICAgIChX
ZWJDb3JlOjpFdmVudExpc3RlbmVyTWFwOjpyZW1vdmVGaXJzdEV2ZW50TGlzdGVuZXJDcmVhdGVk
RnJvbU1hcmt1cCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudExpc3RlbmVyTWFwOjpjb3B5RXZl
bnRMaXN0ZW5lcnNOb3RDcmVhdGVkRnJvbU1hcmt1cFRvVGFyZ2V0KToKKyAgICAgICAgKFdlYkNv
cmU6OkV2ZW50TGlzdGVuZXJJdGVyYXRvcjo6bmV4dExpc3RlbmVyKToKKyAgICAgICAgKiBkb20v
TXV0YXRpb25PYnNlcnZlckludGVyZXN0R3JvdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TXV0
YXRpb25PYnNlcnZlckludGVyZXN0R3JvdXA6OmlzT2xkVmFsdWVSZXF1ZXN0ZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6TXV0YXRpb25PYnNlcnZlckludGVyZXN0R3JvdXA6OmVucXVldWVNdXRhdGlv
blJlY29yZCk6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9k
ZTo6ZHVtcFN0YXRpc3RpY3MpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Y2xlYXJSYXJlRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpnZXRFbGVtZW50c0J5VGFnTmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpOb2RlOjpnZXRFbGVtZW50c0J5VGFnTmFtZU5TKToKKyAgICAgICAgKFdl
YkNvcmU6Ok5vZGU6OmdldEVsZW1lbnRzQnlOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6
OmdldEVsZW1lbnRzQnlDbGFzc05hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZUxpc3RzTm9k
ZURhdGE6OmludmFsaWRhdGVDYWNoZXMpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZUxpc3RzTm9k
ZURhdGE6OmludmFsaWRhdGVDYWNoZXNUaGF0RGVwZW5kT25BdHRyaWJ1dGVzKToKKyAgICAgICAg
KFdlYkNvcmU6Ok5vZGU6OmNvbGxlY3RNYXRjaGluZ09ic2VydmVyc0Zvck11dGF0aW9uKToKKyAg
ICAgICAgKiBkb20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlByb2Nlc3NpbmdJbnN0cnVjdGlvbjo6Y2hlY2tTdHlsZVNoZWV0KToKKyAgICAgICAgKiBkb20v
U2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFeGVj
dXRpb25Db250ZXh0OjpjYW5TdXNwZW5kQWN0aXZlRE9NT2JqZWN0cyk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpzdXNwZW5kQWN0aXZlRE9NT2JqZWN0cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpyZXN1bWVBY3RpdmVET01P
YmplY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnN0b3BB
Y3RpdmVET01PYmplY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQ6OmFkanVzdE1pbmltdW1UaW1lckludGVydmFsKToKKyAgICAgICAgKiBkb20vU3BhY2VTcGxp
dFN0cmluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTcGFjZVNwbGl0U3RyaW5nRGF0YTo6Y3Jl
YXRlKToKKyAgICAgICAgKiBkb20vU3R5bGVkRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZWRFbGVtZW50Ojp1cGRhdGVBdHRyaWJ1dGVTdHlsZSk6CisgICAgICAgICogaHRtbC9I
VE1MQ29sbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbjo6YXBw
ZW5kKToKKyAgICAgICAgKiBpbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkRPTVBhdGNoU3VwcG9ydDo6ZGlmZik6CisgICAgICAgIChXZWJDb3JlOjpET01QYXRjaFN1cHBv
cnQ6OmlubmVyUGF0Y2hDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpET01QYXRjaFN1cHBv
cnQ6OnJlbW92ZUNoaWxkQW5kTW92ZVRvTmV3KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5qZWN0
ZWRTY3JpcHRNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0TWFu
YWdlcjo6ZGlzY2FyZEluamVjdGVkU2NyaXB0cyk6CisgICAgICAgIChXZWJDb3JlOjpJbmplY3Rl
ZFNjcmlwdE1hbmFnZXI6OmRpc2NhcmRJbmplY3RlZFNjcmlwdHNGb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjpyZWxlYXNlT2JqZWN0R3JvdXApOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JBZ2VudDo6ZW5hYmxlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdl
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JQcm9maWxlOjpjb21taXRTZWxlY3Rv
cik6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvclByb2ZpbGU6OmNvbW1pdFNlbGVjdG9yVGlt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvclByb2ZpbGU6OnRvSW5zcGVjdG9yT2JqZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50Ojphc0luc3BlY3RvclN0eWxl
U2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OmFzc2VydFN0eWxl
U2hlZXRGb3JJZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6ZGlkUmVt
b3ZlRE9NTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6ZGlkTW9k
aWZ5RE9NQXR0cik6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnNvbGVBZ2VudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OnN0b3BUaW1pbmcp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29uc29sZUFnZW50Ojpjb3VudCk6CisgICAg
ICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckRPTUFnZW50Ojpub2RlRm9ySWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yRE9NQWdlbnQ6OnBlcmZvcm1TZWFyY2gpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RE9NQWdlbnQ6OmdldFNlYXJjaFJlc3VsdHMpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0
b3JET01EZWJ1Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTURl
YnVnZ2VyQWdlbnQ6OndpbGxTZW5kWE1MSHR0cFJlcXVlc3QpOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yRE9NU3RvcmFnZUFnZW50OjpjbGVhckZyb250ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6ZW5hYmxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckRPTVN0b3JhZ2VBZ2VudDo6c3RvcmFnZUlkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckRPTVN0b3JhZ2VBZ2VudDo6Z2V0RE9NU3RvcmFnZVJlc291cmNlRm9ySWQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpkaWRVc2VET01TdG9yYWdlKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjplbmFibGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6ZGF0YWJhc2VJZCk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjpmaW5kQnlGaWxlTmFtZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjpkYXRhYmFzZUZvcklkKToKKyAgICAgICAg
KiBpbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRCcmVha3BvaW50QnlVcmwpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6cmVtb3ZlQnJlYWtwb2ludCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZXNvbHZlQnJlYWtwb2ludCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZWFyY2hJbkNvbnRl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Z2V0U2NyaXB0
U291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBh
cnNlU291cmNlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yTWVtb3J5QWdlbnQuY3Bw
OgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Y2FjaGVkUmVzb3VyY2VzRm9yRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yUGFnZUFnZW50OjpkaWRDbGVhcldpbmRvd09iamVjdEluV29ybGQpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpmcmFtZURldGFjaGVkKToKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JQcm9maWxlckFnZW50OjpnZXRQcm9maWxlSGVhZGVycyk6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmdldFByb2Zp
bGUpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmJ1aWxkT2JqZWN0Rm9ySGVhZGVycyk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JSZXNvdXJjZUFnZW50Ojp3aWxsU2VuZFJlcXVlc3QpOgorICAgICAgICAqIGlu
c3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JT
dGF0ZTo6Z2V0Qm9vbGVhbik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdGF0ZTo6Z2V0
U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0YXRlOjpnZXRMb25nKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0YXRlOjpnZXREb3VibGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yU3RhdGU6OmdldE9iamVjdCk6CisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3RvclN0eWxlU2hlZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGU6
OnN0eWxlV2l0aFByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVT
aGVldDo6aW5zcGVjdG9yU3R5bGVGb3JJZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JT
dHlsZVNoZWV0OjplbnN1cmVTb3VyY2VEYXRhKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVj
dG9yVmFsdWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck9iamVjdEJhc2U6Omdl
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPYmplY3RCYXNlOjp3cml0ZUpTT04pOgor
ICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JXb3JrZXJBZ2VudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JXb3JrZXJBZ2VudDo6d29ya2VyQ29udGV4dFRlcm1pbmF0ZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yV29ya2VyQWdlbnQ6OmNyZWF0ZVdvcmtlckZyb250
ZW5kQ2hhbm5lbHNGb3JFeGlzdGluZ1dvcmtlcnMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yV29ya2VyQWdlbnQ6OmRlc3Ryb3lXb3JrZXJGcm9udGVuZENoYW5uZWxzKToKKyAgICAgICAg
KiBpbnNwZWN0b3IvTmV0d29ya1Jlc291cmNlc0RhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TmV0d29ya1Jlc291cmNlc0RhdGE6OmNsZWFyKToKKyAgICAgICAgKiBsb2FkZXIvQ3Jvc3NPcmln
aW5BY2Nlc3NDb250cm9sLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzU2ltcGxlQ3Jvc3NPcmln
aW5BY2Nlc3NSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUFjY2Vzc0NvbnRyb2xQ
cmVmbGlnaHRSZXF1ZXN0KToKKyAgICAgICAgKiBsb2FkZXIvQ3Jvc3NPcmlnaW5QcmVmbGlnaHRS
ZXN1bHRDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcm9zc09yaWdpblByZWZsaWdodFJl
c3VsdENhY2hlSXRlbTo6YWxsb3dzQ3Jvc3NPcmlnaW5IZWFkZXJzKToKKyAgICAgICAgKFdlYkNv
cmU6OkNyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGU6OmNhblNraXBQcmVmbGlnaHQpOgor
ICAgICAgICAqIGxvYWRlci9Eb2N1bWVudExvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudExvYWRlcjo6Z2V0U3VicmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50TG9hZGVyOjpzdWJzdGl0dXRlUmVzb3VyY2VEZWxpdmVyeVRpbWVyRmlyZWQpOgorICAgICAg
ICAqIGxvYWRlci9NYWluUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWFp
blJlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAqIGxvYWRlci9S
ZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2Fk
U2NoZWR1bGVyOjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyk6CisgICAgICAgICogbG9hZGVyL1N1YmZy
YW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN1YmZyYW1lTG9hZGVyOjpjcmVhdGVK
YXZhQXBwbGV0V2lkZ2V0KToKKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25D
YWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlOjpyZW1vdmVSZXNv
dXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlOjpjbGVhclN0b3JhZ2VJ
RCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlOjpkdW1wKToKKyAgICAgICAg
KiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6ZGlkRmluaXNoTG9hZGluZ01hbmlmZXN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6c3RhcnRMb2FkaW5nRW50
cnkpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUdyb3VwOjphZGRFbnRyeSk6
CisgICAgICAgICogbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVIb3N0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpmaWxsUmVzb3VyY2VMaXN0KToK
KyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVJlc291cmNlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6ZXN0aW1hdGVkU2l6
ZUluU3RvcmFnZSk6CisgICAgICAgICogbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVT
dG9yYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpm
aW5kT3JDcmVhdGVDYWNoZUdyb3VwKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2Fj
aGVTdG9yYWdlOjpjYWNoZUdyb3VwRm9yVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0
aW9uQ2FjaGVTdG9yYWdlOjpmYWxsYmFja0NhY2hlR3JvdXBGb3JVUkwpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjplbXB0eSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBs
aWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmVDb3B5T2ZDYWNoZSk6CisgICAgICAgICogbG9hZGVy
L2FyY2hpdmUvQXJjaGl2ZUZhY3RvcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXJjaGl2ZUZh
Y3Rvcnk6OnJlZ2lzdGVyS25vd25BcmNoaXZlTUlNRVR5cGVzKToKKyAgICAgICAgKiBsb2FkZXIv
Y2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmF3
UmVzb3VyY2U6OmNhblJldXNlKToKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3Vy
Y2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2U6OnN3aXRjaENsaWVudHNU
b1JldmFsaWRhdGVkUmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2U6
OnVwZGF0ZVJlc3BvbnNlQWZ0ZXJSZXZhbGlkYXRpb24pOgorICAgICAgICAqIGxvYWRlci9jYWNo
ZS9DYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlci5oOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVk
UmVzb3VyY2VDbGllbnRXYWxrZXI6OkNhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyKToKKyAgICAg
ICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6On5DYWNoZWRSZXNvdXJjZUxvYWRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVzdFJlc291cmNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlTG9hZGVyOjpzZXRBdXRvTG9hZEltYWdlcyk6
CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVtb3ZlQ2FjaGVkUmVz
b3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OmdhcmJhZ2VD
b2xsZWN0RG9jdW1lbnRSZXNvdXJjZXNUaW1lckZpcmVkKToKKyAgICAgICAgKiBsb2FkZXIvY2Fj
aGUvTWVtb3J5Q2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVtb3J5Q2FjaGU6OnJlbW92
ZVJlc291cmNlc1dpdGhPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6TWVtb3J5Q2FjaGU6Omdl
dE9yaWdpbnNXaXRoQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVtb3J5Q2FjaGU6OmdldFN0
YXRpc3RpY3MpOgorICAgICAgICAoV2ViQ29yZTo6TWVtb3J5Q2FjaGU6OnNldERpc2FibGVkKToK
KyAgICAgICAgKiBsb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SWNvbkRhdGFiYXNlOjpyZW1vdmVBbGxJY29ucyk6CisgICAgICAgIChXZWJDb3JlOjpJY29u
RGF0YWJhc2U6Omljb25SZWNvcmRDb3VudFdpdGhEYXRhKToKKyAgICAgICAgKiBwYWdlL0RPTVdp
bmRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01XaW5kb3c6OmRpc3BhdGNoQWxsUGVuZGlu
Z0JlZm9yZVVubG9hZEV2ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpET01XaW5kb3c6OmRpc3Bh
dGNoQWxsUGVuZGluZ1VubG9hZEV2ZW50cyk6CisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpoYW5kbGVUb3VjaEV2ZW50KToK
KyAgICAgICAgKiBwYWdlL0ZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjppbmpl
Y3RVc2VyU2NyaXB0cyk6CisgICAgICAgICogcGFnZS9QYWdlR3JvdXAuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UGFnZUdyb3VwOjpwYWdlR3JvdXApOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUdy
b3VwOjpjbG9zZUxvY2FsU3RvcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlR3JvdXA6OmNs
ZWFyTG9jYWxTdG9yYWdlRm9yQWxsT3JpZ2lucyk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlR3Jv
dXA6OmNsZWFyTG9jYWxTdG9yYWdlRm9yT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VH
cm91cDo6c3luY0xvY2FsU3RvcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlR3JvdXA6OmFk
ZFVzZXJTY3JpcHRUb1dvcmxkKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VHcm91cDo6YWRkVXNl
clN0eWxlU2hlZXRUb1dvcmxkKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VHcm91cDo6cmVtb3Zl
VXNlclNjcmlwdEZyb21Xb3JsZCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlR3JvdXA6OnJlbW92
ZVVzZXJTdHlsZVNoZWV0RnJvbVdvcmxkKToKKyAgICAgICAgKiBwYWdlL1BhZ2VTZXJpYWxpemVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VTZXJpYWxpemVyOjp1cmxGb3JCbGFua0ZyYW1l
KToKKyAgICAgICAgKiBwYWdlL1NlY3VyaXR5UG9saWN5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNlY3VyaXR5UG9saWN5OjphZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeSk6CisgICAgICAg
IChXZWJDb3JlOjpTZWN1cml0eVBvbGljeTo6cmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50
cnkpOgorICAgICAgICAqIHBhZ2UvU2V0dGluZ3MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2V0
R2VuZXJpY0ZvbnRGYW1pbHlNYXApOgorICAgICAgICAoV2ViQ29yZTo6Z2V0R2VuZXJpY0ZvbnRG
YW1pbHlGb3JTY3JpcHQpOgorICAgICAgICAqIHBhZ2UvU3BlZWNoSW5wdXQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U3BlZWNoSW5wdXQ6OnJlZ2lzdGVyTGlzdGVuZXIpOgorICAgICAgICAqIHBh
Z2UvV2luZG93RmVhdHVyZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2luZG93RmVhdHVyZXM6
OmJvb2xGZWF0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OldpbmRvd0ZlYXR1cmVzOjpmbG9hdEZl
YXR1cmUpOgorICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnVwZGF0ZUFu
aW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6
OnN1c3BlbmRBbmltYXRpb25zRm9yRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0
aW9uQ29udHJvbGxlclByaXZhdGU6OnJlc3VtZUFuaW1hdGlvbnNGb3JEb2N1bWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6bnVtYmVyT2ZBY3RpdmVB
bmltYXRpb25zKToKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjpjbGVhclJlbmRlcmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlVHJhbnNpdGlv
bnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVLZXlmcmFt
ZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjphbmlt
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlvbjo6Z2V0QW5pbWF0ZWRT
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb246OnNldEFuaW1hdGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb246OnRpbWVUb05leHRTZXJ2
aWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlvbjo6Z2V0QW5pbWF0aW9u
Rm9yUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjpzdXNw
ZW5kQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb246OnJl
c3VtZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjpv
dmVycmlkZUltcGxpY2l0QW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVB
bmltYXRpb246OnJlc3VtZU92ZXJyaWRkZW5JbXBsaWNpdEFuaW1hdGlvbnMpOgorICAgICAgICAo
V2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjppc0FuaW1hdGluZ1Byb3BlcnR5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlvbjo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25z
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9MYW5ndWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjps
YW5ndWFnZURpZENoYW5nZSk6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vSFJURkVsZXZhdGlv
bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRDb25jYXRlbmF0ZWRJbXB1bHNlUmVzcG9uc2Vz
Rm9yU3ViamVjdCk6CisgICAgICAgICogcGxhdGZvcm0vYmxhY2tiZXJyeS9Db29raWVNYW5hZ2Vy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZU1hbmFnZXI6OmdlbmVyYXRlSHRtbEZyYWdt
ZW50Rm9yQ29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVNYW5hZ2VyOjpyZW1vdmVB
bGxDb29raWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ibGFja2JlcnJ5L0Nvb2tpZU1hcC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDb29raWVNYXA6OnJlbW92ZU9sZGVzdENvb2tpZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDb29raWVNYXA6OmdldEFsbENoaWxkQ29va2llcyk6CisgICAgICAgICog
cGxhdGZvcm0vY2YvQmluYXJ5UHJvcGVydHlMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJp
bmFyeVByb3BlcnR5TGlzdFBsYW46OndyaXRlSW50ZWdlckFycmF5KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYkhUVFBMb2FkSW5mby5jcHA6CisgICAgICAgIChXZWJL
aXQ6OmFkZEhlYWRlcik6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJV
UkxSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMUmVxdWVzdDo6dmlzaXRIVFRQ
SGVhZGVyRmllbGRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlVS
TFJlc3BvbnNlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMUmVzcG9uc2U6OmFkZEhUVFBI
ZWFkZXJGaWVsZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFJlc3BvbnNlOjp2aXNpdEhUVFBI
ZWFkZXJGaWVsZHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRDYWNoZWRGb250RGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnJlbGVhc2VGb250RGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvR2x5cGhQYWdlVHJlZU5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R2x5
cGhQYWdlVHJlZU5vZGU6OnRyZWVHbHlwaFBhZ2VDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpH
bHlwaFBhZ2VUcmVlTm9kZTo6cGFnZUNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoUGFn
ZVRyZWVOb2RlOjpwcnVuZVRyZWVDdXN0b21Gb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpH
bHlwaFBhZ2VUcmVlTm9kZTo6cHJ1bmVUcmVlRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
R2x5cGhQYWdlVHJlZU5vZGU6OnBydW5lQ3VzdG9tRm9udERhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6R2x5cGhQYWdlVHJlZU5vZGU6OnBydW5lRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
R2x5cGhQYWdlVHJlZU5vZGU6OnNob3dTdWJ0cmVlKToKKyAgICAgICAgKHNob3dHbHlwaFBhZ2VU
cmVlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRCYWNraW5nU3RvcmU6OnVwZGF0ZVRpbGVCdWZmZXJz
KToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkQmFja2luZ1N0b3JlOjpyZXNpemVFZGdlVGlsZXMp
OgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRCYWNraW5nU3RvcmU6OnNldEtlZXBSZWN0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vY2YvTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uQ0YuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QVZGV3JhcHBlcjo6YXZm
V3JhcHBlckZvckNhbGxiYWNrQ29udGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
YmxhY2tiZXJyeS9MYXllclRpbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXI6
OnVwbG9hZFRleHR1cmVzSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlcjo6
YWRkVGlsZUpvYik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyOjpiaW5kQ29udGVudHNU
ZXh0dXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0Eu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjptb3ZlT3JDb3B5QW5pbWF0
aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnBhdXNlQW5pbWF0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6bGF5ZXJEaWREaXNwbGF5KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlR2VvbWV0cnkpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjp1cGRhdGVUcmFuc2Zvcm0pOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjp1cGRhdGVDaGlsZHJlblRyYW5zZm9ybSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZU1hc2tzVG9Cb3VuZHMpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjp1cGRhdGVDb250ZW50c1Zpc2liaWxp
dHkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjp1cGRhdGVDb250ZW50c09w
YXF1ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUJhY2tmYWNl
VmlzaWJpbGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUZp
bHRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjplbnN1cmVTdHJ1Y3R1
cmFsTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjp1cGRhdGVMYXll
ckRyYXdzQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnVwZGF0
ZUNvbnRlbnRzSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjp1cGRh
dGVDb250ZW50c1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjp1cGRh
dGVNYXNrTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjp1cGRhdGVM
YXllckFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjpzZXRB
bmltYXRpb25PbkxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6cmVt
b3ZlQ0FBbmltYXRpb25Gcm9tTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXll
ckNBOjpwYXVzZUNBQW5pbWF0aW9uT25MYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0xheWVyQ0E6OnN1c3BlbmRBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXJDQTo6cmVzdW1lQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xh
eWVyQ0E6OmZpbmRPck1ha2VDbG9uZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVy
Q0E6OnNldE9wYWNpdHlJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVy
Q0E6OnVwZGF0ZU9wYWNpdHlPbkxheWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
YS9tYWMvVGlsZUNhY2hlLm1tOgorICAgICAgICAoV2ViQ29yZTo6VGlsZUNhY2hlOjpzZXRTY2Fs
ZSk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlQ2FjaGU6OnNldEFjY2VsZXJhdGVzRHJhd2luZyk6
CisgICAgICAgIChXZWJDb3JlOjpUaWxlQ2FjaGU6OnNldFRpbGVEZWJ1Z0JvcmRlcldpZHRoKToK
KyAgICAgICAgKFdlYkNvcmU6OlRpbGVDYWNoZTo6c2V0VGlsZURlYnVnQm9yZGVyQ29sb3IpOgor
ICAgICAgICAoV2ViQ29yZTo6VGlsZUNhY2hlOjpyZXZhbGlkYXRlVGlsZXMpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwOgorICAgICAg
ICAoUGxhdGZvcm1DQUxheWVyOjphbmltYXRpb25TdGFydGVkKToKKyAgICAgICAgKHJlc3VibWl0
QWxsQW5pbWF0aW9ucyk6CisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXI6OmFuaW1hdGlvbkZvcktl
eSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENhY2hlQ2hyb21p
dW1XaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TG9va3VwQWx0TmFtZSk6CisgICAgICAgIChX
ZWJDb3JlOjpmb250Q29udGFpbnNDaGFyYWN0ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0ZvbnRVdGlsc0Nocm9taXVtV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmdldERlcml2ZWRGb250RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXJDaHJvbWl1bTo6bWFwQW5pbWF0aW9uTmFtZVRvSWQpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYW5hZ2VyOjpyZWxlYXNlVG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hbmFnZXI6OnVucHJvdGVjdFRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
bmFnZXI6OnVucHJvdGVjdEFsbFRleHR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVN
YW5hZ2VyOjphbGxvY2F0ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hbmFn
ZXI6OnJlcXVlc3RUZXh0dXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNo
cm9taXVtOjpwdXNoUHJvcGVydGllc1RvKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJD
aHJvbWl1bTo6c2V0TGF5ZXJUcmVlSG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVy
Q2hyb21pdW06OmludmFsaWRhdGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJD
aHJvbWl1bTo6cmVzZXRVcGRhdGVTdGF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NEYW1hZ2VUcmFja2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDRGFt
YWdlVHJhY2tlcjo6dHJhY2tEYW1hZ2VGcm9tTGVmdG92ZXJSZWN0cyk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRpbGluZ0RhdGEuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllclRpbGluZ0RhdGE6OnNldEJvdW5kcyk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6c3RhcnRSYXRlTGltaXRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnN0b3BSYXRlTGltaXRlcik6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJQcm9ncmFtLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkN1c3RvbUZpbHRlclByb2dyYW06Om5vdGlmeUNsaWVudHMpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9HTENvbnRleHRHdGsuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6R0xDb250ZXh0OjpnZXRDb250ZXh0Rm9yV2lkZ2V0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0
Q2FjaGVkSGFyZmJ1enpGYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OnJlbGVhc2VDYWNoZWRIYXJm
YnV6ekZhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENv
bnRyb2xsZXJBVFNVSS5jcHA6CisgICAgICAgIChXZWJDb3JlOjppbml0aWFsaXplQVRTVVN0eWxl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFDb3JlVGV4
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6Z2V0Q0ZTdHJpbmdBdHRy
aWJ1dGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFN
YWMubW06CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95
KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpjYW5SZW5kZXJDb21iaW5pbmdD
aGFyYWN0ZXJTZXF1ZW5jZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dy
YXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpjb21waWxlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpnZXRTaGFkZXJpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0U2hhZGVySW5mb0xvZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0U2hhZGVyU291cmNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyQW5pbWF0aW9uczo6aGFzQWN0aXZlQW5pbWF0aW9uc09mVHlwZSk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyQW5pbWF0aW9uczo6aGFzUnVubmluZ0FuaW1hdGlvbnMpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckFuaW1hdGlvbnM6OnBhdXNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJBbmltYXRpb25zOjphcHBseSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFyZWRHTERhdGE6OmN1cnJlbnRTaGFyZWRH
TERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMRGF0YTo6U2hhcmVkR0xE
YXRhOjp+U2hhcmVkR0xEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVN
YXBwZXJTaGFkZXJNYW5hZ2VyOjpnZXRTaGFkZXJQcm9ncmFtKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy93aW5jZS9Gb250UGxhdGZvcm1EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZpeGVkU2l6ZUZvbnREYXRhOjpjcmVhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9EYXRh
T2JqZWN0R3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFPYmplY3RHdGs6OmZvckNsaXBi
b2FyZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL0d0a0RyYWdBbmREcm9wSGVscGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Okd0a0RyYWdBbmREcm9wSGVscGVyOjpoYW5kbGVHZXREcmFnRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpHdGtEcmFnQW5kRHJvcEhlbHBlcjo6aGFuZGxlRHJhZ0xl
YXZlKToKKyAgICAgICAgKFdlYkNvcmU6Okd0a0RyYWdBbmREcm9wSGVscGVyOjpoYW5kbGVEcmFn
TW90aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Okd0a0RyYWdBbmREcm9wSGVscGVyOjpoYW5kbGVE
cmFnRGF0YVJlY2VpdmVkKToKKyAgICAgICAgKFdlYkNvcmU6Okd0a0RyYWdBbmREcm9wSGVscGVy
OjpoYW5kbGVEcmFnRHJvcCk6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3Rr
My5jcHA6CisgICAgICAgIChXZWJDb3JlOjpndGtTdHlsZUNoYW5nZWRDYWxsYmFjayk6CisgICAg
ICAgIChXZWJDb3JlOjpnZXRTdHlsZUNvbnRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9T
Y3JvbGxiYXJUaGVtZU1hYy5tbToKKyAgICAgICAgKCtbV2ViU2Nyb2xsYmFyUHJlZnNPYnNlcnZl
ciBhcHBlYXJhbmNlUHJlZnNDaGFuZ2VkOl0pOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
Q3JlZGVudGlhbFN0b3JhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3JlZGVudGlhbFN0b3Jh
Z2U6OnNldCk6CisgICAgICAgIChXZWJDb3JlOjpDcmVkZW50aWFsU3RvcmFnZTo6Z2V0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0hUVFBIZWFkZXJNYXAuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SFRUUEhlYWRlck1hcDo6Y29weURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SFRUUEhl
YWRlck1hcDo6Z2V0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL01JTUVIZWFkZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TUlNRUhlYWRlcjo6cGFyc2VIZWFkZXIpOgorICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VIYW5kbGU6OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNv
dXJjZVJlcXVlc3RCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJh
c2U6OmFkZEhUVFBIZWFkZXJGaWVsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3RCYXNlOjphZGRIVFRQSGVhZGVyRmllbGRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3Jr
L2JsYWNrYmVycnkvTmV0d29ya0pvYi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrSm9i
Ojpub3RpZnlIZWFkZXJzUmVjZWl2ZWQpOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya0pvYjo6
aGFuZGxlTm90aWZ5TXVsdGlwYXJ0SGVhZGVyUmVjZWl2ZWQpOgorICAgICAgICAqIHBsYXRmb3Jt
L25ldHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJjZVJlcXVlc3RCbGFja0JlcnJ5LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdDo6aW5pdGlhbGl6ZVBsYXRmb3JtUmVxdWVzdCk6
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Om1ha2VGaW5hbFJlcXVlc3QpOgorICAgICAgICAqIHBsYXRmb3Jt
L25ldHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0Q0ZOZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
c2V0SGVhZGVyRmllbGRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3Vy
Y2VIYW5kbGVNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlTWFu
YWdlcjo6aW5pdGlhbGl6ZUhhbmRsZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9tYWMv
UmVzb3VyY2VSZXF1ZXN0TWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
Ojpkb1VwZGF0ZVBsYXRmb3JtUmVxdWVzdCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9x
dC9SZXNvdXJjZVJlcXVlc3RRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3Q6OnRvTmV0d29ya1JlcXVlc3QpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9S
ZXNvdXJjZVJlcXVlc3RTb3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dDo6dXBkYXRlU291cE1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
Ojp0b1NvdXBNZXNzYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3Vy
Y2VSZXNwb25zZVNvdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZTo6
dG9Tb3VwTWVzc2FnZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay93aW4vUmVzb3VyY2VI
YW5kbGVXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnN0YXJ0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9xdC9SdW5Mb29wUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UnVuTG9vcDo6VGltZXJCYXNlOjp0aW1lckZpcmVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0
L0xvY2FsZVRvU2NyaXB0TWFwcGluZ0RlZmF1bHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2Ny
aXB0TmFtZVRvQ29kZSk6CisgICAgICAgIChXZWJDb3JlOjpsb2NhbGVUb1NjcmlwdENvZGVGb3JG
b250U2VsZWN0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lz
dHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBydW5lQmxhY2tsaXN0ZWRDb2RlY3MpOgorICAg
ICAgICAoV2ViQ29yZTo6ZHVtcFRleHRFbmNvZGluZ05hbWVNYXApOgorICAgICAgICAqIHBsYXRm
b3JtL3RleHQvdHJhbnNjb2Rlci9Gb250VHJhbnNjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGb250VHJhbnNjb2Rlcjo6Y29udmVydGVyVHlwZSk6CisgICAgICAgICogcGxhdGZvcm0vdGV4
dC93aW5jZS9UZXh0Q29kZWNXaW5DRS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYW5ndWFnZU1h
bmFnZXI6Okxhbmd1YWdlTWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpnZXRDb2RlUGFnZSk6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNXaW5DRTo6cmVnaXN0ZXJFeHRlbmRlZEVuY29k
aW5nTmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjV2luQ0U6OnJlZ2lzdGVyRXh0
ZW5kZWRDb2RlY3MpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjV2luQ0U6OmVudW1lcmF0
ZVN1cHBvcnRlZEVuY29kaW5ncyk6CisgICAgICAgICogcGxhdGZvcm0vd2luL0NsaXBib2FyZFV0
aWxpdGllc1dpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXREYXRhTWFwSXRlbSk6CisgICAg
ICAgIChXZWJDb3JlOjpnZXRDbGlwYm9hcmREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OnNldENs
aXBib2FyZERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9DbGlwYm9hcmRXaW4uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkV2luOjp0eXBlcyk6CisgICAgICAgICogcGxhdGZv
cm0vd2luL0ZpbGVTeXN0ZW1XaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2FjaGVkU3RvcmFn
ZURpcmVjdG9yeSk6CisgICAgICAgICogcGxhdGZvcm0vd2luL1J1bkxvb3BXaW4uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UnVuTG9vcDo6VGltZXJCYXNlOjp0aW1lckZpcmVkKToKKyAgICAgICAg
KiBwbGF0Zm9ybS93aW4vV0NEYXRhT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldDRGF0
YU9iamVjdDo6Y3JlYXRlSW5zdGFuY2UpOgorICAgICAgICAqIHBsYXRmb3JtL3dpbmNlL01JTUVU
eXBlUmVnaXN0cnlXaW5DRS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNSU1FVHlwZVJlZ2lzdHJ5
OjpnZXRQcmVmZXJyZWRFeHRlbnNpb25Gb3JNSU1FVHlwZSk6CisgICAgICAgICogcGxhdGZvcm0v
d3gvQ29udGV4dE1lbnVXeC5jcHA6CisgICAgICAgIChDb250ZXh0TWVudTo6YXBwZW5kSXRlbSk6
CisgICAgICAgICogcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5EYXRhYmFzZTo6cmVmcmVzaCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRh
YmFzZTo6TUlNRVR5cGVGb3JFeHRlbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0
YWJhc2U6OnJlbW92ZSk6CisgICAgICAgICogcGx1Z2lucy9QbHVnaW5NYWluVGhyZWFkU2NoZWR1
bGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXI6OnNj
aGVkdWxlQ2FsbCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVy
OjpkaXNwYXRjaENhbGxzKToKKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpblN0cmVhbS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpQbHVnaW5TdHJlYW06OnN0YXJ0U3RyZWFtKToKKyAgICAgICAgKiBw
bHVnaW5zL2JsYWNrYmVycnkvUGx1Z2luRGF0YUJsYWNrQmVycnkuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luRGF0YTo6aW5pdFBsdWdpbnMpOgorICAgICAgICAqIHBsdWdpbnMvZWZsL1Bs
dWdpbkRhdGFFZmwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YTo6aW5pdFBsdWdp
bnMpOgorICAgICAgICAqIHBsdWdpbnMvd3gvUGx1Z2luRGF0YVd4LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpbkRhdGE6OmluaXRQbHVnaW5zKToKKyAgICAgICAgKiByZW5kZXJpbmcvRmxv
d1RocmVhZENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rmxvd1RocmVhZENvbnRy
b2xsZXI6OnVucmVnaXN0ZXJOYW1lZEZsb3dDb250ZW50Tm9kZSk6CisgICAgICAgICogcmVuZGVy
aW5nL0lubGluZUZsb3dCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6
cmVxdWlyZXNJZGVvZ3JhcGhpY0Jhc2VsaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUZs
b3dCb3g6OmFkZFRleHRCb3hWaXN1YWxPdmVyZmxvdyk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpjbGVhckZsb2F0
cyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpzZXRMb2dpY2FsV2lkdGhGb3JUZXh0UnVuKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y2FjaGVk
U2l6ZUZvck92ZXJmbG93Q2xpcCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVs
T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlUXVhbGl0eUNvbnRyb2xsZXI6Omhp
Z2hRdWFsaXR5UmVwYWludFRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VRdWFs
aXR5Q29udHJvbGxlcjo6c2hvdWxkUGFpbnRBdExvd1F1YWxpdHkpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJDb3VudGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckNvdW50ZXI6
OmRlc3Ryb3lDb3VudGVyTm9kZXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQ291bnRlcjo6
ZGVzdHJveUNvdW50ZXJOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OnVwZGF0ZUNvdW50ZXJzKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckNvdW50ZXI6OnJlbmRlcmVyU3R5bGVDaGFuZ2VkKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJGbG93VGhyZWFkOjpzZXRSZWdpb25SYW5nZUZvckJveCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpnZXRSZWdpb25SYW5nZUZvckJveCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyOjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpwZXJmb3JtT3ZlcmxhcFRlc3RzKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyRmlsdGVySW5mbzo6ZmlsdGVySW5mb0ZvclJlbmRlckxheWVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyRmlsdGVySW5mbzo6Y3JlYXRlRmlsdGVySW5m
b0ZvclJlbmRlckxheWVySWZOZWVkZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJOYW1l
ZEZsb3dUaHJlYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTmFtZWRGbG93VGhyZWFk
OjpkZXBlbmRzT24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTmFtZWRGbG93VGhyZWFkOjpw
dXNoRGVwZW5kZW5jaWVzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJlZ2lvbjo6c2V0UmVnaW9uQm94ZXNSZWdpb25TdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZWdpb246OnJlc3RvcmVSZWdpb25Cb3hlc09y
aWdpbmFsU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVnaW9uOjpzZXRSZW5kZXJC
b3hSZWdpb25JbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJlZ2lvbjo6cmVuZGVyQm94
UmVnaW9uU3R5bGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpjYWNoZWRDb2xsYXBzZWRC
b3JkZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpzeXN0ZW1Db2xvcik6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6c2VsZWN0
aW9uQm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OnNldFNlbGVjdGlvbik6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJXaWRnZXQ6OnJlc3VtZVdpZGdldEhpZXJhcmNoeVVwZGF0ZXMpOgorICAgICAgICAq
IHJlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJvb3RJbmxp
bmVCb3g6OmFzY2VudEFuZERlc2NlbnRGb3JCb3gpOgorICAgICAgICAqIHJlbmRlcmluZy9WZXJ0
aWNhbFBvc2l0aW9uQ2FjaGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlZlcnRpY2FsUG9zaXRpb25D
YWNoZTo6Z2V0KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHSW5saW5lVGV4dDo6Y2hhcmFjdGVyU3Rh
cnRzTmV3VGV4dENodW5rKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlRmlsdGVy
OjpwcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZH
UmVzb3VyY2VHcmFkaWVudDo6YXBwbHlSZXNvdXJjZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U1ZHUmVzb3VyY2VQYXR0ZXJuOjphcHBseVJlc291cmNlKToKKyAgICAgICAgKiByZW5kZXJpbmcv
c3ZnL1NWR1Jlc291cmNlc0NhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Jlc291cmNl
c0NhY2hlOjpyZXNvdXJjZURlc3Ryb3llZCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdS
b290SW5saW5lQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnN3YXBJdGVtc0luTGF5b3V0QXR0
cmlidXRlcyk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRl
cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0TGF5b3V0QXR0cmlidXRlczo6ZHVtcCk6
CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyOjpi
dWlsZExheW91dEF0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dExheW91dEF0
dHJpYnV0ZXNCdWlsZGVyOjpmaWxsQ2hhcmFjdGVyRGF0YU1hcCk6CisgICAgICAgICogcmVuZGVy
aW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Rl
eHRMYXlvdXRFbmdpbmU6OmxheW91dFRleHRPbkxpbmVPclBhdGgpOgorICAgICAgICAqIHJlbmRl
cmluZy9zdmcvU1ZHVGV4dE1ldHJpY3NCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1RleHRNZXRyaWNzQnVpbGRlcjo6bWVhc3VyZVRleHRSZW5kZXJlcik6CisgICAgICAgICogc3Rv
cmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFT
eW5jOjpzeW5jVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYVN5bmM6
OnBlcmZvcm1JbXBvcnQpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFTeW5jOjpzeW5j
KToKKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U3RvcmFnZU1hcDo6a2V5KToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VNYXA6OnNldEl0ZW0p
OgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U3RvcmFnZU5hbWVzcGFjZUltcGw6OmxvY2FsU3RvcmFnZU5hbWVzcGFjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNlSW1wbDo6Y29weSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNlSW1wbDo6Y2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6
U3RvcmFnZU5hbWVzcGFjZUltcGw6OmNsZWFyQWxsT3JpZ2luc0ZvckRlbGV0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpzeW5jKToKKyAgICAgICAgKiBzdmcv
U1ZHRG9jdW1lbnRFeHRlbnNpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0RvY3VtZW50
RXh0ZW5zaW9uczo6cmVtb3ZlQW5pbWF0aW9uRWxlbWVudEZyb21UYXJnZXQpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRG9jdW1lbnRFeHRlbnNpb25zOjphZGRQZW5kaW5nUmVzb3VyY2UpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRG9jdW1lbnRFeHRlbnNpb25zOjppc0VsZW1lbnRQZW5kaW5nUmVz
b3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3Zl
RWxlbWVudEZyb21QZW5kaW5nUmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0RvY3Vt
ZW50RXh0ZW5zaW9uczo6c2V0T2ZFbGVtZW50c1JlZmVyZW5jaW5nVGFyZ2V0KToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlQWxsVGFyZ2V0UmVmZXJlbmNl
c0ZvckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpy
ZW1vdmVBbGxFbGVtZW50UmVmZXJlbmNlc0ZvclRhcmdldCk6CisgICAgICAgICogc3ZnL1NWR0Vs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudDo6flNWR0VsZW1lbnQpOgor
ICAgICAgICAqIHN2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U01JTFRpbWVDb250YWluZXI6OmJhc2VWYWx1ZUZvcik6CisgICAgICAgIChXZWJD
b3JlOjpTTUlMVGltZUNvbnRhaW5lcjo6dXBkYXRlQW5pbWF0aW9ucyk6CisgICAgICAgICogc3Zn
L2dyYXBoaWNzL1NWR0ltYWdlQ2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2VD
YWNoZTo6flNWR0ltYWdlQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2VDYWNoZTo6
cmVtb3ZlUmVuZGVyZXJGcm9tQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2VDYWNo
ZTo6cmVxdWVzdGVkU2l6ZUFuZFpvb20pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2VDYWNo
ZTo6aW1hZ2VDb250ZW50Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZUNhY2hl
OjpyZWRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2VDYWNoZTo6bG9va3VwT3JDcmVh
dGVCaXRtYXBJbWFnZUZvclJlbmRlcmVyKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdGaWx0ZXJCdWlsZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVy
OjplZmZlY3RSZWZlcmVuY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6
OmFkZEJ1aWx0aW5FZmZlY3RzKToKKyAgICAgICAgKiBzdmcvcHJvcGVydGllcy9TVkdBbmltYXRl
ZFByb3BlcnR5Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFByb3BlcnR5Ojp+U1ZH
QW5pbWF0ZWRQcm9wZXJ0eSk6CisgICAgICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHQXR0cmlidXRl
VG9Qcm9wZXJ0eU1hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdBdHRyaWJ1dGVUb1Byb3Bl
cnR5TWFwOjphZGRQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0F0dHJpYnV0ZVRv
UHJvcGVydHlNYXA6OnN5bmNocm9uaXplUHJvcGVydGllcyk6CisgICAgICAgICogd29ya2Vycy9X
b3JrZXJDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckNvbnRleHQ6Omhhc1Bl
bmRpbmdBY3Rpdml0eSk6CisgICAgICAgICogd29ya2Vycy9Xb3JrZXJFdmVudFF1ZXVlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OldvcmtlckV2ZW50UXVldWU6OmNsb3NlKToKKyAgICAgICAgKiB4
bWwvWE1MSHR0cFJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6
OnNldFJlcXVlc3RIZWFkZXJJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVx
dWVzdDo6Z2V0QWxsUmVzcG9uc2VIZWFkZXJzKToKKyAgICAgICAgKiB4bWwvWFBhdGhGdW5jdGlv
bnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OmNyZWF0ZUZ1bmN0aW9uKToKKyAgICAg
ICAgKiB4bWwvWFBhdGhQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OmlzQXhp
c05hbWUpOgorICAgICAgICAqIHhtbC9YU0xUUHJvY2Vzc29yTGlieHNsdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjp4c2x0UGFyYW1BcnJheUZyb21QYXJhbWV0ZXJNYXApOgorICAgICAgICAqIHht
bC9YU0xUUHJvY2Vzc29yUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WFNMVFByb2Nlc3Nvcjo6
dHJhbnNmb3JtVG9TdHJpbmcpOgorCiAyMDEyLTA0LTI1ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3
ZWJraXQub3JnPgogCiAgICAgICAgIEJ1aWxkIGZpeCBhZnRlciByMTE1MjI3LiBSZXR1cm4gbnVs
bCBzdHJpbmcgd2hlbiB0aGUgc3RyaW5nIGJ1aWxkZXIgaXMgZW1wdHkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVy
cnkvQ2hhbmdlTG9nCmluZGV4IDM4Yzc5YWZkYzhjNmYxMThmYWIxNmU4MDE5OGFiMjQyMjhhYzQx
M2EuLmMyOTE5YzIxNDUwNzBhZDdiMGIwOTMyNjljYzg1YTgyNjk1ZWI4MmYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9i
bGFja2JlcnJ5L0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDEyLTA0LTI1ICBDYWlvIE1h
cmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gIDxjYWlvLm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+CisK
KyAgICAgICAgUmVuYW1lIGZpcnN0L3NlY29uZCB0byBrZXkvdmFsdWUgaW4gSGFzaE1hcCBpdGVy
YXRvcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgy
Nzg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBB
cGkvQmFja2luZ1N0b3JlLmNwcDoKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6QmFja2lu
Z1N0b3JlUHJpdmF0ZTo6c2V0QmFja2luZ1N0b3JlUmVjdCk6CisgICAgICAgIChCbGFja0JlcnJ5
OjpXZWJLaXQ6OkJhY2tpbmdTdG9yZVByaXZhdGU6OnZpc2libGVUaWxlc1JlY3QpOgorICAgICAg
ICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpCYWNraW5nU3RvcmVQcml2YXRlOjpyZXNldFRpbGVzKToK
KyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6QmFja2luZ1N0b3JlUHJpdmF0ZTo6dXBkYXRl
VGlsZXMpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpCYWNraW5nU3RvcmVQcml2YXRl
Ojp1cGRhdGVUaWxlc0ZvclNjcm9sbE9yTm90UmVuZGVyZWRSZWdpb24pOgorICAgICAgICAoQmxh
Y2tCZXJyeTo6V2ViS2l0OjpCYWNraW5nU3RvcmVQcml2YXRlOjptYXBGcm9tVHJhbnNmb3JtZWRD
b250ZW50c1RvVGlsZXMpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xp
ZW50QmxhY2tCZXJyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEJs
YWNrQmVycnk6OmRpc3BhdGNoV2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKiBXZWJDb3JlU3Vw
cG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5v
dGlmaWNhdGlvblByZXNlbnRlckltcGw6OmNhbmNlbCk6CisgICAgICAgIChXZWJDb3JlOjpOb3Rp
ZmljYXRpb25QcmVzZW50ZXJJbXBsOjpvblBlcm1pc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6
Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6bm90aWZpY2F0aW9uQ2xpY2tlZCk6CisgICAgICAg
ICogV2ViS2l0U3VwcG9ydC9GYXRGaW5nZXJzLmNwcDoKKyAgICAgICAgKEJsYWNrQmVycnk6Oldl
YktpdDo6RmF0RmluZ2Vyczo6ZmluZEJlc3RQb2ludCk6CisgICAgICAgICogV2ViS2l0U3VwcG9y
dC9GcmFtZUxheWVycy5jcHA6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkZyYW1lTGF5
ZXJzOjpyZW1vdmVMYXllckJ5RnJhbWUpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpG
cmFtZUxheWVyczo6Y29tbWl0T25XZWJLaXRUaHJlYWQpOgorCiAyMDEyLTA0LTI1ICBZb25nIExp
ICA8eW9saUByaW0uY29tPgogCiAgICAgICAgIFtCbGFja0JlcnJ5XSBQb3NzaWJsZSBKUyByZS1l
bnRyYW5jeSBjYXVzZWQgYnkgVUkgZXZlbnRzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRl
eCAyYjhiMTEwNzQwYjZhN2MzM2ExY2VkMGY1YWY0NzY0MjMzNWM3OWIzLi4yYzQxZDViM2JlMWRl
NjIwY2M1NDdjNzE0OWM4NWNhMTUyMjFlMjNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE1IEBACisyMDEyLTA0LTI1ICBDYWlvIE1hcmNlbG8gZGUgT2xpdmVpcmEgRmls
aG8gIDxjYWlvLm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+CisKKyAgICAgICAgUmVuYW1lIGZpcnN0
L3NlY29uZCB0byBrZXkvdmFsdWUgaW4gSGFzaE1hcCBpdGVyYXRvcnMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyNzg0CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBzcmMvV2ViR2VvbG9jYXRpb25QZXJt
aXNzaW9uUmVxdWVzdE1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViR2VvbG9jYXRpb25QZXJtaXNz
aW9uUmVxdWVzdE1hbmFnZXI6OnJlbW92ZSk6CisgICAgICAgICogdGVzdHMvV2ViU29ja2V0RXh0
ZW5zaW9uRGlzcGF0Y2hlclRlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VEVTVF9GKToKKwog
MjAxMi0wNC0yNSAgSWFuIFZvbGxpY2sgIDx2b2xsaWNrQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBbY2hyb21pdW1dIEFkZCBzdXBwb3J0IGZvciBhbmltYXRpb24gZmluaXNoZWQgZXZlbnRzLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9n
dGsvQ2hhbmdlTG9nCmluZGV4IDVlYjU5OGY2ZTZjZjFiZGJmZWUyMGM5MGNkNGFhNWJmMzM5MTEx
ZDkuLjM2MDNjOGI4NDM3MDJhNDk5MzBmNzliMGRiOWY0ZDdkMmFkMjMwNmEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxMi0wNC0yNSAgQ2FpbyBNYXJjZWxvIGRlIE9saXZl
aXJhIEZpbGhvICA8Y2Fpby5vbGl2ZWlyYUBvcGVuYm9zc2Eub3JnPgorCisgICAgICAgIFJlbmFt
ZSBmaXJzdC9zZWNvbmQgdG8ga2V5L3ZhbHVlIGluIEhhc2hNYXAgaXRlcmF0b3JzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Mjc4NAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQv
UGxhdGZvcm1TdHJhdGVnaWVzR3RrLmNwcDoKKyAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc0d0
azo6Z2V0UGx1Z2luSW5mbyk6CisgICAgICAgICogd2Via2l0L3dlYmtpdGZhdmljb25kYXRhYmFz
ZS5jcHA6CisgICAgICAgICh3ZWJraXRGYXZpY29uRGF0YWJhc2VJbXBvcnRGaW5pc2hlZCk6Cisg
ICAgICAgICogd2Via2l0L3dlYmtpdHdlYnBsdWdpbi5jcHA6CisgICAgICAgICh3ZWJraXRfd2Vi
X3BsdWdpbl9nZXRfbWltZXR5cGVzKToKKwogMjAxMi0wNC0yMiAgQWRyaWFuIEJ1bmsgIDxidW5r
QHN0dXN0YS5kZT4KIAogICAgICAgICBbR1RLXSBSZW1vdmUgdGhlIG9ic29sZXRlIEhpbGRvbiBV
SSBleHRlbnNpb25zCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKaW5kZXggOTI0NmNiODI3NmI0YmE0M2NkZTNlZDgx
NzVmZjJhYjJjMDZhODJlYi4uNGE1ODFiYTgzMGNhZmVhMGU5YzliMDc0ZmI2NDBiYzE0MTgzMWE1
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXQvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDEyLTA0LTI1ICBDYWlvIE1h
cmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gIDxjYWlvLm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+CisK
KyAgICAgICAgUmVuYW1lIGZpcnN0L3NlY29uZCB0byBrZXkvdmFsdWUgaW4gSGFzaE1hcCBpdGVy
YXRvcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgy
Nzg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBI
aXN0b3J5L1dlYkhpc3RvcnkubW06CisgICAgICAgICgtW1dlYkhpc3RvcnlQcml2YXRlIHJlbW92
ZUl0ZW1Gcm9tRGF0ZUNhY2hlczpdKToKKyAgICAgICAgKC1bV2ViSGlzdG9yeVByaXZhdGUgb3Jk
ZXJlZExhc3RWaXNpdGVkRGF5c10pOgorICAgICAgICAoV2ViSGlzdG9yeVdyaXRlcjo6V2ViSGlz
dG9yeVdyaXRlcik6CisgICAgICAgICogTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbToKKyAgICAg
ICAgKCtbV2ViQ29yZVN0YXRpc3RpY3MgamF2YVNjcmlwdFByb3RlY3RlZE9iamVjdFR5cGVDb3Vu
dHNdKToKKyAgICAgICAgKCtbV2ViQ29yZVN0YXRpc3RpY3MgamF2YVNjcmlwdE9iamVjdFR5cGVD
b3VudHNdKToKKyAgICAgICAgKiBQbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkhvc3RNYW5h
Z2VyLm1tOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyOjpob3N0
Rm9yUGx1Z2luKToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlcjo6
cGx1Z2luSG9zdERpZWQpOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkhvc3RNYW5h
Z2VyOjpkaWRDcmVhdGVXaW5kb3cpOgorICAgICAgICAqIFBsdWdpbnMvSG9zdGVkL05ldHNjYXBl
UGx1Z2luSG9zdFByb3h5Lm1tOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkhvc3RQ
cm94eTo6cGx1Z2luSG9zdERpZWQpOgorICAgICAgICAqIFBsdWdpbnMvSG9zdGVkL05ldHNjYXBl
UGx1Z2luSW5zdGFuY2VQcm94eS5tbToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5J
bnN0YW5jZVByb3h5OjpMb2NhbE9iamVjdE1hcDo6aWRGb3JPYmplY3QpOgorICAgICAgICAoV2Vi
S2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OkxvY2FsT2JqZWN0TWFwOjpyZXRhaW4p
OgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OkxvY2FsT2Jq
ZWN0TWFwOjpyZWxlYXNlKToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5j
ZVByb3h5OjpMb2NhbE9iamVjdE1hcDo6Zm9yZ2V0KToKKyAgICAgICAgKFdlYktpdDo6TmV0c2Nh
cGVQbHVnaW5JbnN0YW5jZVByb3h5OjpkZXN0cm95KToKKyAgICAgICAgKFdlYktpdDo6TmV0c2Nh
cGVQbHVnaW5JbnN0YW5jZVByb3h5Ojp3ZWJGcmFtZURpZEZpbmlzaExvYWRXaXRoUmVhc29uKToK
KyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpjYW5jZWxDaGVj
a0lmQWxsb3dlZFRvTG9hZFVSTCk6CisgICAgICAgICogUGx1Z2lucy9Ib3N0ZWQvUHJveHlJbnN0
YW5jZS5tbToKKyAgICAgICAgKFdlYktpdDo6UHJveHlJbnN0YW5jZTo6bWV0aG9kc05hbWVkKToK
KyAgICAgICAgKFdlYktpdDo6UHJveHlJbnN0YW5jZTo6ZmllbGROYW1lZCk6CisgICAgICAgICog
UGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblZpZXcubW06CisgICAgICAgICgtW1dlYk5ldHNjYXBl
UGx1Z2luVmlldyBzdG9wVGltZXJzXSk6CisgICAgICAgICgtW1dlYk5ldHNjYXBlUGx1Z2luVmll
dyBzdGFydFRpbWVyc10pOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYk5vdGlmaWNhdGlv
bkNsaWVudC5tbToKKyAgICAgICAgKFdlYk5vdGlmaWNhdGlvbkNsaWVudDo6c2hvdyk6CisgICAg
ICAgIChXZWJOb3RpZmljYXRpb25DbGllbnQ6OmNsZWFyTm90aWZpY2F0aW9ucyk6CisgICAgICAg
IChXZWJOb3RpZmljYXRpb25DbGllbnQ6Om5vdGlmaWNhdGlvbk9iamVjdERlc3Ryb3llZCk6Cisg
ICAgICAgICogV2ViVmlldy9XZWJIVE1MVmlldy5tbToKKyAgICAgICAgKGNvbW1hbmROYW1lRm9y
U2VsZWN0b3IpOgorCiAyMDEyLTA0LTI0ICBBbGV4aXMgTWVuYXJkICA8YWxleGlzLm1lbmFyZEBv
cGVuYm9zc2Eub3JnPgogCiAgICAgICAgIFJlcGxhY2Ugb2NjdXJlbmNlcyBvZiBzdHlsZSBzZWxl
Y3RvciBmcm9tIHZhcmlhYmxlcyBhbmQgbWV0aG9kcyBuYW1lcyBieSBzdHlsZSByZXNvbHZlci4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9x
dC9DaGFuZ2VMb2cKaW5kZXggYjYwNzlhNGJhMTFmYmQ3NTRhY2RhNjRjOTM2YTk5OWIyMmMzYzI0
NS4uMWMyMTc4MWYwZmE5YzM3ZmFjNjRmMmViZDY3NmM2ZmI2ZWVlMmQzZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxNyBAQAorMjAxMi0wNC0yNSAgQ2FpbyBNYXJjZWxvIGRlIE9saXZlaXJh
IEZpbGhvICA8Y2Fpby5vbGl2ZWlyYUBvcGVuYm9zc2Eub3JnPgorCisgICAgICAgIFJlbmFtZSBm
aXJzdC9zZWNvbmQgdG8ga2V5L3ZhbHVlIGluIEhhc2hNYXAgaXRlcmF0b3JzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Mjc4NAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogQXBpL3F3ZWJwYWdlLmNwcDoK
KyAgICAgICAgKGV4dHJhY3RDb250ZW50VHlwZUZyb21QbHVnaW5WZWN0b3IpOgorICAgICAgICAq
IEFwaS9xd2VicGx1Z2luZGF0YWJhc2UuY3BwOgorICAgICAgICAoUVdlYlBsdWdpbkluZm86Om1p
bWVUeXBlcyk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzUXQu
Y3BwOgorICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzUXQ6OmdldFBsdWdpbkluZm8pOgorCiAy
MDEyLTA0LTI1ICBBbGV4aXMgTWVuYXJkICA8YWxleGlzLm1lbmFyZEBvcGVuYm9zc2Eub3JnPgog
CiAgICAgICAgIFJlbmFtZSBDU1NTdHlsZVNlbGVjdG9yIGZpbGVzIHRvIFN0eWxlUmVzb2x2ZXIu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
L3dpbi9DaGFuZ2VMb2cKaW5kZXggMmQxMzI2MmFmMjBiNWYxOTk0MzkxMDBhY2FiZTUxNTc4ZDU2
ODE4NC4uZWM3NmU3NWM2NDczZjNjZDFlMTg3NWZiM2VhOTJiODU3ZTRmMTRkNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL0No
YW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDEyLTA0LTI1ICBDYWlvIE1hcmNlbG8gZGUgT2xp
dmVpcmEgRmlsaG8gIDxjYWlvLm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+CisKKyAgICAgICAgUmVu
YW1lIGZpcnN0L3NlY29uZCB0byBrZXkvdmFsdWUgaW4gSGFzaE1hcCBpdGVyYXRvcnMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyNzg0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBDT01Qcm9wZXJ0eUJh
Zy5oOgorICAgICAgICAoOjpSZWFkKToKKyAgICAgICAgKDo6R2V0UHJvcGVydHlJbmZvKToKKyAg
ICAgICAgKiBXZWJDb3JlU3RhdGlzdGljcy5jcHA6CisgICAgICAgIChXZWJDb3JlU3RhdGlzdGlj
czo6amF2YVNjcmlwdFByb3RlY3RlZE9iamVjdFR5cGVDb3VudHMpOgorICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHA6CisgICAgICAgIChXZWJQbGF0Zm9y
bVN0cmF0ZWdpZXM6OmdldFBsdWdpbkluZm8pOgorICAgICAgICAqIFdlYkhpc3RvcnkuY3BwOgor
ICAgICAgICAoV2ViSGlzdG9yeTo6cmVtb3ZlSXRlbUZyb21EYXRlQ2FjaGVzKToKKyAgICAgICAg
KiBXZWJLaXRDT01BUEkuY3BwOgorICAgICAgICAoY2xhc3NGYWN0b3J5KToKKyAgICAgICAgKiBX
ZWJLaXRTdGF0aXN0aWNzLmNwcDoKKyAgICAgICAgKFdlYktpdFN0YXRpc3RpY3M6OmNvbUNsYXNz
TmFtZUNvdW50cyk6CisgICAgICAgICogV2ViTm90aWZpY2F0aW9uQ2VudGVyLmNwcDoKKyAgICAg
ICAgKFdlYk5vdGlmaWNhdGlvbkNlbnRlcjo6cG9zdE5vdGlmaWNhdGlvbkludGVybmFsKToKKyAg
ICAgICAgKFdlYk5vdGlmaWNhdGlvbkNlbnRlcjo6YWRkT2JzZXJ2ZXIpOgorICAgICAgICAoV2Vi
Tm90aWZpY2F0aW9uQ2VudGVyOjpyZW1vdmVPYnNlcnZlcik6CisKIDIwMTItMDQtMjAgIEVtaWwg
QSBFa2x1bmQgIDxlYWVAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFt3aW5dIFVwZGF0ZSB3aW5k
b3dzIHBsYXRmb3JtIGNvZGUgdG8gdXNlIHBpeGVsIHNuYXBwZWQgdmFsdWVzCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L3dpbmNlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvd2luY2UvQ2hh
bmdlTG9nCmluZGV4IDM4YjFiNmY3OGRiMmNkMzUzMWUzNTc1MWM2MjljMWQ2NzU1NzYxY2IuLmUz
OWEyYjFkMjY3MmE4MGYwNjRjNzU1OWEzYWQ3NzRjNTQzMWZhMjUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvd2luY2UvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luY2UvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTItMDQtMjUgIENhaW8gTWFyY2VsbyBkZSBPbGl2ZWly
YSBGaWxobyAgPGNhaW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KKworICAgICAgICBSZW5hbWUg
Zmlyc3Qvc2Vjb25kIHRvIGtleS92YWx1ZSBpbiBIYXNoTWFwIGl0ZXJhdG9ycworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI3ODQKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1Bs
YXRmb3JtU3RyYXRlZ2llc1dpbkNFLmNwcDoKKyAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc1dp
bkNFOjpnZXRQbHVnaW5JbmZvKToKKwogMjAxMi0wMy0zMCAgUGF0cmljayBHYW5zdGVyZXIgIDxw
YXJvZ2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBbV2luQ0VdIENvcnJlY3QgPHd0Zi8qLmg+IGlu
Y2x1ZGUgcGF0aHMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggZWFmZGYzNTdjOTM2YWY5NjM3YzMyZDcxNWVhYTFi
MTZkM2JhZTBmOC4uMDMyYjQ4N2YwNWYxNDdjMjE5YTY5YTJiZjY2MmQwNmIwNDY0Yjk0ZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwpAQCAtMSwzICsxLDExMyBAQAorMjAxMi0wNC0yNSAgQ2FpbyBNYXJjZWxvIGRlIE9s
aXZlaXJhIEZpbGhvICA8Y2Fpby5vbGl2ZWlyYUBvcGVuYm9zc2Eub3JnPgorCisgICAgICAgIFJl
bmFtZSBmaXJzdC9zZWNvbmQgdG8ga2V5L3ZhbHVlIGluIEhhc2hNYXAgaXRlcmF0b3JzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Mjc4NAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogUGxhdGZvcm0vQ29y
ZUlQQy9Bcmd1bWVudENvZGVycy5oOgorICAgICAgICAqIFBsYXRmb3JtL0NvcmVJUEMvQ29ubmVj
dGlvbi5jcHA6CisgICAgICAgIChDb3JlSVBDOjpDb25uZWN0aW9uOjpTeW5jTWVzc2FnZVN0YXRl
OjpnZXRPckNyZWF0ZSk6CisgICAgICAgIChDb3JlSVBDOjpDb25uZWN0aW9uOjp3YWl0Rm9yTWVz
c2FnZSk6CisgICAgICAgIChDb3JlSVBDOjpDb25uZWN0aW9uOjpwcm9jZXNzSW5jb21pbmdNZXNz
YWdlKToKKyAgICAgICAgKiBQbGF0Zm9ybS9ndGsvV29ya1F1ZXVlR3RrLmNwcDoKKyAgICAgICAg
KFdvcmtRdWV1ZTo6cmVnaXN0ZXJFdmVudFNvdXJjZUhhbmRsZXIpOgorICAgICAgICAoV29ya1F1
ZXVlOjp1bnJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKToKKyAgICAgICAgKiBQbGF0Zm9ybS9t
YWMvV29ya1F1ZXVlTWFjLmNwcDoKKyAgICAgICAgKFdvcmtRdWV1ZTo6dW5yZWdpc3Rlck1hY2hQ
b3J0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKiBTaGFyZWQvUGx1Z2lucy9OUFJlbW90ZU9iamVj
dE1hcC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5QUmVtb3RlT2JqZWN0TWFwOjpwbHVnaW5EZXN0
cm95ZWQpOgorICAgICAgICAqIFNoYXJlZC9Vc2VyTWVzc2FnZUNvZGVycy5oOgorICAgICAgICAo
V2ViS2l0OjpVc2VyTWVzc2FnZUVuY29kZXI6OmJhc2VFbmNvZGUpOgorICAgICAgICAqIFNoYXJl
ZC9XZWJQcmVmZXJlbmNlc1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6dmFsdWVGb3JLZXkp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQcmVmZXJlbmNlc1N0b3JlOjpnZXRCb29sVmFsdWVGb3JL
ZXkpOgorICAgICAgICAqIFNoYXJlZC9ndGsvV2ViQ29yZUFyZ3VtZW50Q29kZXJzR3RrLmNwcDoK
KyAgICAgICAgKENvcmVJUEM6Ojo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvbWFjL1dlYkNv
cmVBcmd1bWVudENvZGVyc01hYy5tbToKKyAgICAgICAgKENvcmVJUEM6Ojo6ZGVjb2RlKToKKyAg
ICAgICAgKiBTaGFyZWQvcXQvQXJndW1lbnRDb2RlcnNRdC5jcHA6CisgICAgICAgIChDb3JlSVBD
Ojo6OmRlY29kZSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5j
cHA6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3N1YnJlc291cmNlcyk6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9tYWMvV0tQcmludGluZ1ZpZXcubW06CisgICAgICAgICgtW1dLUHJp
bnRpbmdWaWV3IF9leHBlY3RlZFByZXZpZXdDYWxsYmFja0ZvclJlY3Q6XSk6CisgICAgICAgIChw
YWdlRGlkRHJhd1RvUERGKToKKyAgICAgICAgKC1bV0tQcmludGluZ1ZpZXcgX2RyYXdQcmV2aWV3
Ol0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbToKKyAgICAgICAgKGNv
bW1hbmROYW1lRm9yU2VsZWN0b3IpOgorICAgICAgICAoLVtXS1ZpZXcgdmFsaWRhdGVVc2VySW50
ZXJmYWNlSXRlbTpdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvR2VvbG9jYXRpb25QZXJtaXNzaW9u
UmVxdWVzdE1hbmFnZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Okdlb2xvY2F0aW9uUGVy
bWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHk6OmludmFsaWRhdGVSZXF1ZXN0cyk6CisgICAgICAg
ICogVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9XZWJJbnNwZWN0b3JTZXJ2ZXIuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JTZXJ2ZXI6On5XZWJJbnNwZWN0b3JTZXJ2ZXIpOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvV2ViU29ja2V0U2VydmVyQ29ubmVj
dGlvbi5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlNvY2tldFNlcnZlckNvbm5lY3Rpb246OnNl
bmRIVFRQUmVzcG9uc2VIZWFkZXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2
ZXIvcXQvV2ViSW5zcGVjdG9yU2VydmVyUXQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNw
ZWN0b3JTZXJ2ZXI6OmJ1aWxkUGFnZUxpc3QpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Ob3RpZmlj
YXRpb25zL05vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6Tm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHk6
OmludmFsaWRhdGVSZXF1ZXN0cyk6CisgICAgICAgICogVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2lu
UHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UGx1Z2luUHJvY2Vzc1Byb3h5Ojpw
bHVnaW5Qcm9jZXNzQ3Jhc2hlZE9yRmFpbGVkVG9MYXVuY2gpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6Y3JlYXRlRGljdGlvbmFyeUZyb21I
YXNoTWFwKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViSWNvbkRhdGFiYXNlLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViSWNvbkRhdGFiYXNlOjpkaWRGaW5pc2hVUkxJbXBvcnQpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJlci5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYkxheWVyVHJlZVJlbmRlcmVyOjphZGp1c3RQb3NpdGlvbkZvckZpeGVkTGF5ZXJzKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnNldExheWVyQ2hpbGRyZW4pOgor
ICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVSZW5kZXJlcjo6c2V0TGF5ZXJTdGF0ZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVJlbmRlcmVyOjphc3NpZ25JbWFnZVRvTGF5ZXIp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQcm9jZXNzUHJveHk6OmNoZWNrVVJMUmVjZWl2ZWRGcm9tV2ViUHJvY2Vzcyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6YWRkQmFja0ZvcndhcmRJdGVtKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpmcmFtZUNvdW50SW5QYWdlKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvcXQvTGF5ZXJCYWNraW5nU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0
OjpMYXllckJhY2tpbmdTdG9yZTo6dXBkYXRlVGlsZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVy
QmFja2luZ1N0b3JlOjp0ZXh0dXJlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJCYWNraW5nU3Rv
cmU6OnBhaW50VG9UZXh0dXJlTWFwcGVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJCYWNraW5n
U3RvcmU6OmNvbW1pdFRpbGVPcGVyYXRpb25zKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dlb2xv
Y2F0aW9uL0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6R2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXI6OmNhbmNlbFJlcXVl
c3RGb3JHZW9sb2NhdGlvbik6CisgICAgICAgIChXZWJLaXQ6Okdlb2xvY2F0aW9uUGVybWlzc2lv
blJlcXVlc3RNYW5hZ2VyOjpkaWRSZWNlaXZlR2VvbG9jYXRpb25QZXJtaXNzaW9uRGVjaXNpb24p
OgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxl
Tm9kZUhhbmRsZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkluamVjdGVkQnVuZGxlTm9kZUhhbmRs
ZTo6Z2V0T3JDcmVhdGUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9N
L0luamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpJbmplY3Rl
ZEJ1bmRsZVJhbmdlSGFuZGxlOjpnZXRPckNyZWF0ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9O
b3RpZmljYXRpb25zL1dlYk5vdGlmaWNhdGlvbk1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJOb3RpZmljYXRpb25NYW5hZ2VyOjpwb2xpY3lGb3JPcmlnaW4pOgorICAgICAgICAoV2Vi
S2l0OjpXZWJOb3RpZmljYXRpb25NYW5hZ2VyOjpzaG93KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Tm90aWZpY2F0aW9uTWFuYWdlcjo6Y2xlYXJOb3RpZmljYXRpb25zKToKKyAgICAgICAgKFdlYktp
dDo6V2ViTm90aWZpY2F0aW9uTWFuYWdlcjo6cmVtb3ZlTm90aWZpY2F0aW9uRnJvbUNvbnRleHRN
YXApOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmpl
Y3RNYXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpOUFJ1bnRpbWVPYmplY3RNYXA6OmludmFsaWRh
dGUpOgorICAgICAgICAoV2ViS2l0OjpOUFJ1bnRpbWVPYmplY3RNYXA6OmZpbmFsaXplKToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW4uY3BwOgor
ICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbjo6ZGVzdHJveVN0cmVhbSk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luOjp1bnNjaGVkdWxlVGltZXIpOgorICAgICAgICAoV2Vi
S2l0OjpOZXRzY2FwZVBsdWdpbjo6ZnJhbWVEaWRGaW5pc2hMb2FkaW5nKToKKyAgICAgICAgKFdl
YktpdDo6TmV0c2NhcGVQbHVnaW46OmZyYW1lRGlkRmFpbCk6CisgICAgICAgICogV2ViUHJvY2Vz
cy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwOgorICAgICAgICAoV2ViS2l0OjpidWlsZEhUVFBIZWFk
ZXJzKToKKyAgICAgICAgKFdlYktpdDo6UGx1Z2luVmlldzo6flBsdWdpblZpZXcpOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpsYXllckJ5SUQpOgorICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9yd2FyZExpc3RQcm94eS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYkJhY2tGb3J3YXJkTGlzdFByb3h5OjpyZW1vdmVJdGVtKToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW06CisgICAgICAgIChXZWJLaXQ6OmNv
bW1hbmROYW1lRm9yU2VsZWN0b3JOYW1lKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
cXQvTGF5ZXJUcmVlSG9zdFF0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0
OjphZG9wdEltYWdlQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9z
dFF0OjpyZWxlYXNlSW1hZ2VCYWNraW5nU3RvcmUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
UHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OnZpc2l0ZWRMaW5rU3Rh
dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6YWxsVmlzaXRlZExpbmtT
dGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpmb2N1c2VkV2ViUGFn
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OmNyZWF0ZVdlYlBhZ2UpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzOjp3ZWJQYWdlR3JvdXApOgorICAgICAgICAoV2ViS2l0Ojpm
cm9tQ291bnRlZFNldFRvSGFzaE1hcCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OnNl
dFRleHRDaGVja2VyU3RhdGUpOgorCiAyMDEyLTA0LTI1ICBFbnJpY2EgQ2FzdWNjaSAgPGVucmlj
YUBhcHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTiAocjExMDQ5NCk6IERyYWdnaW5nIGlt
YWdlcyBmcm9tIFNhZmFyaSB0byBGaW5kZXIgcmVzdWx0cyBpbiAud2VibG9jIHJhdGhlciB0aGFu
IGltYWdlIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxs
YmFja09iamVjdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0
LmgKaW5kZXggOWFjYTBjN2UxOGNhNWNjY2NlZTczNTllYTM5MWMyODM0YjBhMWFjOC4uYWMwMTU5
ZDk4YThiMzI0ZDVmZjg4MjAwYjk1M2UxZWMwNmEwM2EwZSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgKQEAgLTgzLDEzICs4MywxMyBAQCBzdHJ1Y3Qg
SlNDYWxsYmFja09iamVjdERhdGEgOiBXZWFrSGFuZGxlT3duZXIgewogICAgICAgICAgICAgUHJp
dmF0ZVByb3BlcnR5TWFwOjpjb25zdF9pdGVyYXRvciBsb2NhdGlvbiA9IG1fcHJvcGVydHlNYXAu
ZmluZChwcm9wZXJ0eU5hbWUuaW1wbCgpKTsKICAgICAgICAgICAgIGlmIChsb2NhdGlvbiA9PSBt
X3Byb3BlcnR5TWFwLmVuZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7Ci0g
ICAgICAgICAgICByZXR1cm4gbG9jYXRpb24tPnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgIHJl
dHVybiBsb2NhdGlvbi0+dmFsdWUuZ2V0KCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAg
IHZvaWQgc2V0UHJpdmF0ZVByb3BlcnR5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxs
KiBvd25lciwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlKQog
ICAgICAgICB7CiAgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gZW1wdHk7Ci0gICAg
ICAgICAgICBtX3Byb3BlcnR5TWFwLmFkZChwcm9wZXJ0eU5hbWUuaW1wbCgpLCBlbXB0eSkuaXRl
cmF0b3ItPnNlY29uZC5zZXQoZ2xvYmFsRGF0YSwgb3duZXIsIHZhbHVlKTsKKyAgICAgICAgICAg
IG1fcHJvcGVydHlNYXAuYWRkKHByb3BlcnR5TmFtZS5pbXBsKCksIGVtcHR5KS5pdGVyYXRvci0+
dmFsdWUuc2V0KGdsb2JhbERhdGEsIG93bmVyLCB2YWx1ZSk7CiAgICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgIHZvaWQgZGVsZXRlUHJpdmF0ZVByb3BlcnR5KGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSkKQEAgLTEwMCw4ICsxMDAsOCBAQCBzdHJ1Y3QgSlNDYWxsYmFja09iamVjdERh
dGEgOiBXZWFrSGFuZGxlT3duZXIgewogICAgICAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCiAgICAgICAgIHsKICAgICAgICAgICAgIGZvciAoUHJpdmF0ZVByb3Bl
cnR5TWFwOjppdGVyYXRvciBwdHIgPSBtX3Byb3BlcnR5TWFwLmJlZ2luKCk7IHB0ciAhPSBtX3By
b3BlcnR5TWFwLmVuZCgpOyArK3B0cikgewotICAgICAgICAgICAgICAgIGlmIChwdHItPnNlY29u
ZCkKLSAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJnB0ci0+c2Vjb25kKTsKKyAg
ICAgICAgICAgICAgICBpZiAocHRyLT52YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgdmlzaXRv
ci5hcHBlbmQoJnB0ci0+dmFsdWUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9u
cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25z
LmgKaW5kZXggZWRlZTgyYmUzZjAyNGRmYzMyODRmMTNjYmUyZWNiNzVjYTEzM2E2Yy4uZmZiNGY4
NDllZGJiMzFlOGM3OTExZGQxMDE0NzAzMWVjNGFjYjE1NCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgKQEAgLTQ1OSw4
ICs0NTksOCBAQCB2b2lkIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6Z2V0T3duUHJvcGVydHlO
YW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqCiAgICAgICAgICAgICB0eXBlZGVmIE9w
YXF1ZUpTQ2xhc3NTdGF0aWNWYWx1ZXNUYWJsZTo6Y29uc3RfaXRlcmF0b3IgaXRlcmF0b3I7CiAg
ICAgICAgICAgICBpdGVyYXRvciBlbmQgPSBzdGF0aWNWYWx1ZXMtPmVuZCgpOwogICAgICAgICAg
ICAgZm9yIChpdGVyYXRvciBpdCA9IHN0YXRpY1ZhbHVlcy0+YmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nSW1wbCogbmFtZSA9IGl0LT5maXJzdC5nZXQo
KTsKLSAgICAgICAgICAgICAgICBTdGF0aWNWYWx1ZUVudHJ5KiBlbnRyeSA9IGl0LT5zZWNvbmQu
Z2V0KCk7CisgICAgICAgICAgICAgICAgU3RyaW5nSW1wbCogbmFtZSA9IGl0LT5rZXkuZ2V0KCk7
CisgICAgICAgICAgICAgICAgU3RhdGljVmFsdWVFbnRyeSogZW50cnkgPSBpdC0+dmFsdWUuZ2V0
KCk7CiAgICAgICAgICAgICAgICAgaWYgKGVudHJ5LT5nZXRQcm9wZXJ0eSAmJiAoIShlbnRyeS0+
YXR0cmlidXRlcyAmIGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udEVudW0pIHx8IChtb2RlID09IElu
Y2x1ZGVEb250RW51bVByb3BlcnRpZXMpKSkKICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlO
YW1lcy5hZGQoSWRlbnRpZmllcihleGVjLCBuYW1lKSk7CiAgICAgICAgICAgICB9CkBAIC00NzAs
OCArNDcwLDggQEAgdm9pZCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OmdldE93blByb3BlcnR5
TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKgogICAgICAgICAgICAgdHlwZWRlZiBP
cGFxdWVKU0NsYXNzU3RhdGljRnVuY3Rpb25zVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0ZXJhdG9y
OwogICAgICAgICAgICAgaXRlcmF0b3IgZW5kID0gc3RhdGljRnVuY3Rpb25zLT5lbmQoKTsKICAg
ICAgICAgICAgIGZvciAoaXRlcmF0b3IgaXQgPSBzdGF0aWNGdW5jdGlvbnMtPmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgICAgIFN0cmluZ0ltcGwqIG5hbWUgPSBpdC0+
Zmlyc3QuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgU3RhdGljRnVuY3Rpb25FbnRyeSogZW50cnkg
PSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgICAgIFN0cmluZ0ltcGwqIG5hbWUgPSBp
dC0+a2V5LmdldCgpOworICAgICAgICAgICAgICAgIFN0YXRpY0Z1bmN0aW9uRW50cnkqIGVudHJ5
ID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAgICAgICAgIGlmICghKGVudHJ5LT5hdHRyaWJ1
dGVzICYga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RW51bSkgfHwgKG1vZGUgPT0gSW5jbHVkZURv
bnRFbnVtUHJvcGVydGllcykpCiAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRk
KElkZW50aWZpZXIoZXhlYywgbmFtZSkpOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NsYXNzUmVmLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNDbGFzc1JlZi5jcHAKaW5kZXggMTM1MzRkMDc4YzZiOWI4NzgxZjA5OTZhNmJi
OTg4YjM3ZjRkYmQzYy4uMmYzMzNjMmI4NTgwZGEzMjM1OTBiYTY5ODM4YzgzMmIyOThkMmMwNyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NsYXNzUmVmLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2xhc3NSZWYuY3BwCkBAIC0xMDcsMTMgKzEw
NywxMyBAQCBPcGFxdWVKU0NsYXNzOjp+T3BhcXVlSlNDbGFzcygpCiAgICAgaWYgKG1fc3RhdGlj
VmFsdWVzKSB7CiAgICAgICAgIE9wYXF1ZUpTQ2xhc3NTdGF0aWNWYWx1ZXNUYWJsZTo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gbV9zdGF0aWNWYWx1ZXMtPmVuZCgpOwogICAgICAgICBmb3IgKE9wYXF1
ZUpTQ2xhc3NTdGF0aWNWYWx1ZXNUYWJsZTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3N0YXRpY1Zh
bHVlcy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgQVNTRVJUKCFpdC0+
Zmlyc3QtPmlzSWRlbnRpZmllcigpKTsKKyAgICAgICAgICAgIEFTU0VSVCghaXQtPmtleS0+aXNJ
ZGVudGlmaWVyKCkpOwogICAgIH0KIAogICAgIGlmIChtX3N0YXRpY0Z1bmN0aW9ucykgewogICAg
ICAgICBPcGFxdWVKU0NsYXNzU3RhdGljRnVuY3Rpb25zVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IG1fc3RhdGljRnVuY3Rpb25zLT5lbmQoKTsKICAgICAgICAgZm9yIChPcGFxdWVKU0NsYXNz
U3RhdGljRnVuY3Rpb25zVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zdGF0aWNGdW5jdGlv
bnMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIEFTU0VSVCghaXQtPmZp
cnN0LT5pc0lkZW50aWZpZXIoKSk7CisgICAgICAgICAgICBBU1NFUlQoIWl0LT5rZXktPmlzSWRl
bnRpZmllcigpKTsKICAgICB9CiAjZW5kaWYKICAgICAKQEAgLTE0Nyw4ICsxNDcsOCBAQCBPcGFx
dWVKU0NsYXNzQ29udGV4dERhdGE6Ok9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YShKU0M6OkpTR2xv
YmFsRGF0YSYsIE9wYXF1ZUpTQwogICAgICAgICBzdGF0aWNWYWx1ZXMgPSBhZG9wdFB0cihuZXcg
T3BhcXVlSlNDbGFzc1N0YXRpY1ZhbHVlc1RhYmxlKTsKICAgICAgICAgT3BhcXVlSlNDbGFzc1N0
YXRpY1ZhbHVlc1RhYmxlOjpjb25zdF9pdGVyYXRvciBlbmQgPSBqc0NsYXNzLT5tX3N0YXRpY1Zh
bHVlcy0+ZW5kKCk7CiAgICAgICAgIGZvciAoT3BhcXVlSlNDbGFzc1N0YXRpY1ZhbHVlc1RhYmxl
Ojpjb25zdF9pdGVyYXRvciBpdCA9IGpzQ2xhc3MtPm1fc3RhdGljVmFsdWVzLT5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIEFTU0VSVCghaXQtPmZpcnN0LT5pc0lkZW50
aWZpZXIoKSk7Ci0gICAgICAgICAgICBzdGF0aWNWYWx1ZXMtPmFkZChTdHJpbmdJbXBsOjpjcmVh
dGUoaXQtPmZpcnN0LT5jaGFyYWN0ZXJzKCksIGl0LT5maXJzdC0+bGVuZ3RoKCkpLCBhZG9wdFB0
cihuZXcgU3RhdGljVmFsdWVFbnRyeShpdC0+c2Vjb25kLT5nZXRQcm9wZXJ0eSwgaXQtPnNlY29u
ZC0+c2V0UHJvcGVydHksIGl0LT5zZWNvbmQtPmF0dHJpYnV0ZXMpKSk7CisgICAgICAgICAgICBB
U1NFUlQoIWl0LT5rZXktPmlzSWRlbnRpZmllcigpKTsKKyAgICAgICAgICAgIHN0YXRpY1ZhbHVl
cy0+YWRkKFN0cmluZ0ltcGw6OmNyZWF0ZShpdC0+a2V5LT5jaGFyYWN0ZXJzKCksIGl0LT5rZXkt
Pmxlbmd0aCgpKSwgYWRvcHRQdHIobmV3IFN0YXRpY1ZhbHVlRW50cnkoaXQtPnZhbHVlLT5nZXRQ
cm9wZXJ0eSwgaXQtPnZhbHVlLT5zZXRQcm9wZXJ0eSwgaXQtPnZhbHVlLT5hdHRyaWJ1dGVzKSkp
OwogICAgICAgICB9CiAgICAgfQogCkBAIC0xNTYsMTUgKzE1NiwxNSBAQCBPcGFxdWVKU0NsYXNz
Q29udGV4dERhdGE6Ok9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YShKU0M6OkpTR2xvYmFsRGF0YSYs
IE9wYXF1ZUpTQwogICAgICAgICBzdGF0aWNGdW5jdGlvbnMgPSBhZG9wdFB0cihuZXcgT3BhcXVl
SlNDbGFzc1N0YXRpY0Z1bmN0aW9uc1RhYmxlKTsKICAgICAgICAgT3BhcXVlSlNDbGFzc1N0YXRp
Y0Z1bmN0aW9uc1RhYmxlOjpjb25zdF9pdGVyYXRvciBlbmQgPSBqc0NsYXNzLT5tX3N0YXRpY0Z1
bmN0aW9ucy0+ZW5kKCk7CiAgICAgICAgIGZvciAoT3BhcXVlSlNDbGFzc1N0YXRpY0Z1bmN0aW9u
c1RhYmxlOjpjb25zdF9pdGVyYXRvciBpdCA9IGpzQ2xhc3MtPm1fc3RhdGljRnVuY3Rpb25zLT5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIEFTU0VSVCghaXQtPmZpcnN0
LT5pc0lkZW50aWZpZXIoKSk7Ci0gICAgICAgICAgICBzdGF0aWNGdW5jdGlvbnMtPmFkZChTdHJp
bmdJbXBsOjpjcmVhdGUoaXQtPmZpcnN0LT5jaGFyYWN0ZXJzKCksIGl0LT5maXJzdC0+bGVuZ3Ro
KCkpLCBhZG9wdFB0cihuZXcgU3RhdGljRnVuY3Rpb25FbnRyeShpdC0+c2Vjb25kLT5jYWxsQXNG
dW5jdGlvbiwgaXQtPnNlY29uZC0+YXR0cmlidXRlcykpKTsKKyAgICAgICAgICAgIEFTU0VSVCgh
aXQtPmtleS0+aXNJZGVudGlmaWVyKCkpOworICAgICAgICAgICAgc3RhdGljRnVuY3Rpb25zLT5h
ZGQoU3RyaW5nSW1wbDo6Y3JlYXRlKGl0LT5rZXktPmNoYXJhY3RlcnMoKSwgaXQtPmtleS0+bGVu
Z3RoKCkpLCBhZG9wdFB0cihuZXcgU3RhdGljRnVuY3Rpb25FbnRyeShpdC0+dmFsdWUtPmNhbGxB
c0Z1bmN0aW9uLCBpdC0+dmFsdWUtPmF0dHJpYnV0ZXMpKSk7CiAgICAgICAgIH0KICAgICB9CiB9
CiAKIE9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YSYgT3BhcXVlSlNDbGFzczo6Y29udGV4dERhdGEo
RXhlY1N0YXRlKiBleGVjKQogewotICAgIE93blB0cjxPcGFxdWVKU0NsYXNzQ29udGV4dERhdGE+
JiBjb250ZXh0RGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKS5vcGFxdWVKU0NsYXNzRGF0YS5hZGQo
dGhpcywgbnVsbHB0cikuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBPd25QdHI8T3BhcXVlSlNDbGFz
c0NvbnRleHREYXRhPiYgY29udGV4dERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCkub3BhcXVlSlND
bGFzc0RhdGEuYWRkKHRoaXMsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoIWNv
bnRleHREYXRhKQogICAgICAgICBjb250ZXh0RGF0YSA9IGFkb3B0UHRyKG5ldyBPcGFxdWVKU0Ns
YXNzQ29udGV4dERhdGEoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzKSk7CiAgICAgcmV0dXJuICpj
b250ZXh0RGF0YTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5j
cHAKaW5kZXggN2I4MjhhY2FiNzM2ODQ3ZGY2MTVjZjYyNmMwNDdiYzE1NGM4OTc3OC4uNTY1ZDZk
YjFhZDQ4YmI2YjFkZjEyYmZmMGJjYmY3MmQyNDYyNTgzZSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKQEAgLTQ4MCw3ICs0ODAsNyBAQCB2b2lkIENv
ZGVCbG9jazo6ZHVtcChFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiAgICAgICAgICAgICBkYXRhTG9n
KCIgICUxZCA9IHtcbiIsIGkpOwogICAgICAgICAgICAgU3RyaW5nSnVtcFRhYmxlOjpTdHJpbmdP
ZmZzZXRUYWJsZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0
Y2hKdW1wVGFibGVzW2ldLm9mZnNldFRhYmxlLmVuZCgpOwogICAgICAgICAgICAgZm9yIChTdHJp
bmdKdW1wVGFibGU6OlN0cmluZ09mZnNldFRhYmxlOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbV9y
YXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW2ldLm9mZnNldFRhYmxlLmJlZ2luKCk7
IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCi0gICAgICAgICAgICAgICAgZGF0YUxvZygiXHRcdFwiJXNc
IiA9PiAlMDRkXG4iLCBVU3RyaW5nKGl0ZXItPmZpcnN0KS51dGY4KCkuZGF0YSgpLCBpdGVyLT5z
ZWNvbmQuYnJhbmNoT2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJcdFx0XCIlc1wi
ID0+ICUwNGRcbiIsIFVTdHJpbmcoaXRlci0+a2V5KS51dGY4KCkuZGF0YSgpLCBpdGVyLT52YWx1
ZS5icmFuY2hPZmZzZXQpOwogICAgICAgICAgICAgZGF0YUxvZygiICAgICAgfVxuIik7CiAgICAg
ICAgICAgICArK2k7CiAgICAgICAgIH0gd2hpbGUgKGkgPCBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3
aXRjaEp1bXBUYWJsZXMuc2l6ZSgpKTsKQEAgLTE2MDQsNyArMTYwNCw3IEBAIHZvaWQgRXZhbENv
ZGVDYWNoZTo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgRXZh
bENhY2hlTWFwOjppdGVyYXRvciBlbmQgPSBtX2NhY2hlTWFwLmVuZCgpOwogICAgIGZvciAoRXZh
bENhY2hlTWFwOjppdGVyYXRvciBwdHIgPSBtX2NhY2hlTWFwLmJlZ2luKCk7IHB0ciAhPSBlbmQ7
ICsrcHRyKQotICAgICAgICB2aXNpdG9yLmFwcGVuZCgmcHRyLT5zZWNvbmQpOworICAgICAgICB2
aXNpdG9yLmFwcGVuZCgmcHRyLT52YWx1ZSk7CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjp2aXNpdEFn
Z3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9KdW1wVGFibGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9KdW1wVGFibGUuaAppbmRleCA1YmJlMDQ3MTA3ZjViMDFjMDI4OWJlYTMzMTg2ZTFmODRh
M2FhZmM3Li42MDM2Y2RhNTFkNWJjZjU2NWVhZTk3ZThkYjI2NTUxYzkwMjU1YzczIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSnVtcFRhYmxlLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0p1bXBUYWJsZS5oCkBAIC01Nyw3ICs1Nyw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgU3RyaW5nT2Zmc2V0VGFibGU6OmNvbnN0X2l0
ZXJhdG9yIGxvYyA9IG9mZnNldFRhYmxlLmZpbmQodmFsdWUpOwogICAgICAgICAgICAgaWYgKGxv
YyA9PSBlbmQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRPZmZzZXQ7Ci0gICAgICAg
ICAgICByZXR1cm4gbG9jLT5zZWNvbmQuYnJhbmNoT2Zmc2V0OworICAgICAgICAgICAgcmV0dXJu
IGxvYy0+dmFsdWUuYnJhbmNoT2Zmc2V0OwogICAgICAgICB9CiAKICNpZiBFTkFCTEUoSklUKQpA
QCAtNjcsNyArNjcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIFN0cmluZ09mZnNl
dFRhYmxlOjpjb25zdF9pdGVyYXRvciBsb2MgPSBvZmZzZXRUYWJsZS5maW5kKHZhbHVlKTsKICAg
ICAgICAgICAgIGlmIChsb2MgPT0gZW5kKQogICAgICAgICAgICAgICAgIHJldHVybiBjdGlEZWZh
dWx0OwotICAgICAgICAgICAgcmV0dXJuIGxvYy0+c2Vjb25kLmN0aU9mZnNldDsKKyAgICAgICAg
ICAgIHJldHVybiBsb2MtPnZhbHVlLmN0aU9mZnNldDsKICAgICAgICAgfQogI2VuZGlmCiAgICAg
fTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MYXp5T3BlcmFu
ZFZhbHVlUHJvZmlsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGF6eU9w
ZXJhbmRWYWx1ZVByb2ZpbGUuY3BwCmluZGV4IGYxOTliNjkyMzBhOWJhMDA5ZTY1OTFmM2Q0OTAx
NzRjOTVlNjE1N2QuLmVkMmI2YjZkMTdjMzc4MDFlMDUwNDMzYTM0NWE5YmMwYzFiYjAzNjAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVl
UHJvZmlsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xhenlPcGVy
YW5kVmFsdWVQcm9maWxlLmNwcApAQCAtODEsNyArODEsNyBAQCBMYXp5T3BlcmFuZFZhbHVlUHJv
ZmlsZSogTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVQYXJzZXI6OmdldElmUHJlc2VudCgKICAgICBp
ZiAoaXRlciA9PSBtX21hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCi0gICAgcmV0
dXJuIGl0ZXItPnNlY29uZDsKKyAgICByZXR1cm4gaXRlci0+dmFsdWU7CiB9CiAKIFByZWRpY3Rl
ZFR5cGUgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVQYXJzZXI6OnByZWRpY3Rpb24oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9y
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuY3BwCmluZGV4IGE1MjBhNGM3OGIwOWJmNzg3MmViOGZlMWUzZmEzYTVhMDFlYzcwNTIuLmZk
YjBhYTk5ZDY5MDdmYzE5ZTMzZWQ2OTE4MDQ1OGQ2OWQwOTFiNjkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3Bw
CkBAIC0yMDMsNyArMjAzLDcgQEAgYm9vbCBCeXRlY29kZUdlbmVyYXRvcjo6YWRkVmFyKGNvbnN0
IElkZW50aWZpZXImIGlkZW50LCBib29sIGlzQ29uc3RhbnQsIFJlZ2lzdGUKICAgICBTeW1ib2xU
YWJsZTo6QWRkUmVzdWx0IHJlc3VsdCA9IHN5bWJvbFRhYmxlKCkuYWRkKGlkZW50LmltcGwoKSwg
bmV3RW50cnkpOwogCiAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICByMCA9
ICZyZWdpc3RlckZvcihyZXN1bHQuaXRlcmF0b3ItPnNlY29uZC5nZXRJbmRleCgpKTsKKyAgICAg
ICAgcjAgPSAmcmVnaXN0ZXJGb3IocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXRJbmRleCgpKTsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtMjE3LDcgKzIxNyw3IEBAIGludCBC
eXRlY29kZUdlbmVyYXRvcjo6YWRkR2xvYmFsVmFyKGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBi
b29sIGlzQ29uc3RhbnQpCiAgICAgU3ltYm9sVGFibGVFbnRyeSBuZXdFbnRyeShpbmRleCwgaXND
b25zdGFudCA/IFJlYWRPbmx5IDogMCk7CiAgICAgU3ltYm9sVGFibGU6OkFkZFJlc3VsdCByZXN1
bHQgPSBzeW1ib2xUYWJsZSgpLmFkZChpZGVudC5pbXBsKCksIG5ld0VudHJ5KTsKICAgICBpZiAo
IXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICBpbmRleCA9IHJlc3VsdC5pdGVyYXRvci0+c2Vj
b25kLmdldEluZGV4KCk7CisgICAgICAgIGluZGV4ID0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5n
ZXRJbmRleCgpOwogICAgIHJldHVybiBpbmRleDsKIH0KIApAQCAtOTcyLDcgKzk3Miw3IEBAIHVu
c2lnbmVkIEJ5dGVjb2RlR2VuZXJhdG9yOjphZGRDb25zdGFudChjb25zdCBJZGVudGlmaWVyJiBp
ZGVudCkKICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpCiAgICAgICAgIG1fY29kZUJsb2NrLT5h
ZGRJZGVudGlmaWVyKElkZW50aWZpZXIobV9nbG9iYWxEYXRhLCByZXApKTsKIAotICAgIHJldHVy
biByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZTsKIH0KIAogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmFkZENvbnN0YW50VmFs
dWUoSlNWYWx1ZSB2KQpAQCAtOTg1LDcgKzk4NSw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjphZGRDb25zdGFudFZhbHVlKEpTVmFsdWUgdikKICAgICAgICAgKyttX25leHRDb25z
dGFudE9mZnNldDsKICAgICAgICAgbV9jb2RlQmxvY2stPmFkZENvbnN0YW50KEpTVmFsdWUodikp
OwogICAgIH0gZWxzZQotICAgICAgICBpbmRleCA9IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOwor
ICAgICAgICBpbmRleCA9IHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAKICAgICByZXR1cm4gJm1f
Y29uc3RhbnRQb29sUmVnaXN0ZXJzW2luZGV4XTsKIH0KQEAgLTExMzIsNyArMTEzMiw3IEBAIFJl
Z2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TG9hZChSZWdpc3RlcklEKiBkc3QsIGRv
dWJsZSBudW1iZXIpCiAgICAgLy8gd29yayBjb3JyZWN0bHkgd2l0aCBOYU4gYXMgYSBrZXkuCiAg
ICAgaWYgKGlzbmFuKG51bWJlcikgfHwgbnVtYmVyID09IEhhc2hUcmFpdHM8ZG91YmxlPjo6ZW1w
dHlWYWx1ZSgpIHx8IEhhc2hUcmFpdHM8ZG91YmxlPjo6aXNEZWxldGVkVmFsdWUobnVtYmVyKSkK
ICAgICAgICAgcmV0dXJuIGVtaXRMb2FkKGRzdCwganNOdW1iZXIobnVtYmVyKSk7Ci0gICAgSlNW
YWx1ZSYgdmFsdWVJbk1hcCA9IG1fbnVtYmVyTWFwLmFkZChudW1iZXIsIEpTVmFsdWUoKSkuaXRl
cmF0b3ItPnNlY29uZDsKKyAgICBKU1ZhbHVlJiB2YWx1ZUluTWFwID0gbV9udW1iZXJNYXAuYWRk
KG51bWJlciwgSlNWYWx1ZSgpKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCF2YWx1ZUluTWFw
KQogICAgICAgICB2YWx1ZUluTWFwID0ganNOdW1iZXIobnVtYmVyKTsKICAgICByZXR1cm4gZW1p
dExvYWQoZHN0LCB2YWx1ZUluTWFwKTsKQEAgLTExNDAsNyArMTE0MCw3IEBAIFJlZ2lzdGVySUQq
IEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TG9hZChSZWdpc3RlcklEKiBkc3QsIGRvdWJsZSBudW1i
ZXIpCiAKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TG9hZChSZWdpc3RlcklE
KiBkc3QsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIpCiB7Ci0gICAgSlNTdHJpbmcqJiBz
dHJpbmdJbk1hcCA9IG1fc3RyaW5nTWFwLmFkZChpZGVudGlmaWVyLmltcGwoKSwgMCkuaXRlcmF0
b3ItPnNlY29uZDsKKyAgICBKU1N0cmluZyomIHN0cmluZ0luTWFwID0gbV9zdHJpbmdNYXAuYWRk
KGlkZW50aWZpZXIuaW1wbCgpLCAwKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCFzdHJpbmdJ
bk1hcCkKICAgICAgICAgc3RyaW5nSW5NYXAgPSBqc093bmVkU3RyaW5nKGdsb2JhbERhdGEoKSwg
aWRlbnRpZmllci51c3RyaW5nKCkpOwogICAgIHJldHVybiBlbWl0TG9hZChkc3QsIEpTVmFsdWUo
c3RyaW5nSW5NYXApKTsKQEAgLTE2NDgsNyArMTY0OCw3IEBAIHVuc2lnbmVkIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjphZGRDb25zdGFudEJ1ZmZlcih1bnNpZ25lZCBsZW5ndGgpCiAKIEpTU3RyaW5nKiBC
eXRlY29kZUdlbmVyYXRvcjo6YWRkU3RyaW5nQ29uc3RhbnQoY29uc3QgSWRlbnRpZmllciYgaWRl
bnRpZmllcikKIHsKLSAgICBKU1N0cmluZyomIHN0cmluZ0luTWFwID0gbV9zdHJpbmdNYXAuYWRk
KGlkZW50aWZpZXIuaW1wbCgpLCAwKS5pdGVyYXRvci0+c2Vjb25kOworICAgIEpTU3RyaW5nKiYg
c3RyaW5nSW5NYXAgPSBtX3N0cmluZ01hcC5hZGQoaWRlbnRpZmllci5pbXBsKCksIDApLml0ZXJh
dG9yLT52YWx1ZTsKICAgICBpZiAoIXN0cmluZ0luTWFwKSB7CiAgICAgICAgIHN0cmluZ0luTWFw
ID0ganNTdHJpbmcoZ2xvYmFsRGF0YSgpLCBpZGVudGlmaWVyLnVzdHJpbmcoKSk7CiAgICAgICAg
IGFkZENvbnN0YW50VmFsdWUoc3RyaW5nSW5NYXApOwpAQCAtMTcyMCw4ICsxNzIwLDggQEAgUmVn
aXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRMYXp5TmV3RnVuY3Rpb24oUmVnaXN0ZXJJ
RCogZHN0LCBGdW5jdGlvbkJvZHkKIHsKICAgICBGdW5jdGlvbk9mZnNldE1hcDo6QWRkUmVzdWx0
IHB0ciA9IG1fZnVuY3Rpb25PZmZzZXRzLmFkZChmdW5jdGlvbiwgMCk7CiAgICAgaWYgKHB0ci5p
c05ld0VudHJ5KQotICAgICAgICBwdHIuaXRlcmF0b3ItPnNlY29uZCA9IG1fY29kZUJsb2NrLT5h
ZGRGdW5jdGlvbkRlY2wobWFrZUZ1bmN0aW9uKG1fZ2xvYmFsRGF0YSwgZnVuY3Rpb24pKTsKLSAg
ICByZXR1cm4gZW1pdE5ld0Z1bmN0aW9uSW50ZXJuYWwoZHN0LCBwdHIuaXRlcmF0b3ItPnNlY29u
ZCwgdHJ1ZSk7CisgICAgICAgIHB0ci5pdGVyYXRvci0+dmFsdWUgPSBtX2NvZGVCbG9jay0+YWRk
RnVuY3Rpb25EZWNsKG1ha2VGdW5jdGlvbihtX2dsb2JhbERhdGEsIGZ1bmN0aW9uKSk7CisgICAg
cmV0dXJuIGVtaXROZXdGdW5jdGlvbkludGVybmFsKGRzdCwgcHRyLml0ZXJhdG9yLT52YWx1ZSwg
dHJ1ZSk7CiB9CiAKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3RnVuY3Rp
b25JbnRlcm5hbChSZWdpc3RlcklEKiBkc3QsIHVuc2lnbmVkIGluZGV4LCBib29sIGRvTnVsbENo
ZWNrKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rl
c0NvZGVnZW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0Nv
ZGVnZW4uY3BwCmluZGV4IGUyM2YxZTRkNmI3MGU0Yzg5YjQyYjI4ZjIyYjA0ZjBhYTVkYjY4M2Qu
LjlmY2IyMWM3N2E0ODFmMjQ5ZjUwMjcyNWExMDBlMDc1ZjgxMGQzN2IgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKQEAgLTI1
OCw3ICsyNTgsNyBAQCBSZWdpc3RlcklEKiBQcm9wZXJ0eUxpc3ROb2RlOjplbWl0Qnl0ZWNvZGUo
Qnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZQogICAgICAgICAgICAgR2V0dGVy
U2V0dGVyUGFpciBwYWlyKG5vZGUsIHN0YXRpY19jYXN0PFByb3BlcnR5Tm9kZSo+KDApKTsKICAg
ICAgICAgICAgIEdldHRlclNldHRlck1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1hcC5hZGQobm9k
ZS0+bmFtZSgpLmltcGwoKSwgcGFpcik7CiAgICAgICAgICAgICBpZiAoIXJlc3VsdC5pc05ld0Vu
dHJ5KQotICAgICAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLnNlY29uZCA9IG5v
ZGU7CisgICAgICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5zZWNvbmQgPSBub2Rl
OwogICAgICAgICB9CiAKICAgICAgICAgLy8gSXRlcmF0ZSBvdmVyIHRoZSByZW1haW5pbmcgcHJv
cGVydGllcyBpbiB0aGUgbGlzdC4KQEAgLTI3Niw3ICsyNzYsNyBAQCBSZWdpc3RlcklEKiBQcm9w
ZXJ0eUxpc3ROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwg
UmVnaXN0ZQogICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm1fdHlwZSA9PSBQcm9wZXJ0eU5vZGU6
OkdldHRlciB8fCBub2RlLT5tX3R5cGUgPT0gUHJvcGVydHlOb2RlOjpTZXR0ZXIpOwogICAgICAg
ICAgICAgR2V0dGVyU2V0dGVyTWFwOjppdGVyYXRvciBpdCA9IG1hcC5maW5kKG5vZGUtPm5hbWUo
KS5pbXBsKCkpOwogICAgICAgICAgICAgQVNTRVJUKGl0ICE9IG1hcC5lbmQoKSk7Ci0gICAgICAg
ICAgICBHZXR0ZXJTZXR0ZXJQYWlyJiBwYWlyID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIEdl
dHRlclNldHRlclBhaXImIHBhaXIgPSBpdC0+dmFsdWU7CiAKICAgICAgICAgICAgIC8vIFdhcyB0
aGlzIGFscmVhZHkgZ2VuZXJhdGVkIGFzIGEgcGFydCBvZiBpdHMgcGFydG5lcj8KICAgICAgICAg
ICAgIGlmIChwYWlyLnNlY29uZCA9PSBub2RlKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1
Z2dlci9EZWJ1Z2dlci5jcHAKaW5kZXggZWRlOGE5YmEyNDhiOWE4OTRiNzkxNzRlZDVkMzIwZjg4
ZjVjY2IzZS4uMTQ2YmFkMTU2NjkyYjUxMDQ2MDExZTNhMzc0ZmNlZDU1OWUxYTg3MCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3BwCkBAIC01OSw3ICs1OSw3
IEBAIGlubGluZSBSZWNvbXBpbGVyOjp+UmVjb21waWxlcigpCiAgICAgLy8gSmF2YVNjcmlwdCBp
biB0aGUgaW5zcGVjdG9yLgogICAgIFNvdXJjZVByb3ZpZGVyTWFwOjpjb25zdF9pdGVyYXRvciBl
bmQgPSBtX3NvdXJjZVByb3ZpZGVycy5lbmQoKTsKICAgICBmb3IgKFNvdXJjZVByb3ZpZGVyTWFw
Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gbV9zb3VyY2VQcm92aWRlcnMuYmVnaW4oKTsgaXRlciAh
PSBlbmQ7ICsraXRlcikKLSAgICAgICAgbV9kZWJ1Z2dlci0+c291cmNlUGFyc2VkKGl0ZXItPnNl
Y29uZCwgaXRlci0+Zmlyc3QsIC0xLCBVU3RyaW5nKCkpOworICAgICAgICBtX2RlYnVnZ2VyLT5z
b3VyY2VQYXJzZWQoaXRlci0+dmFsdWUsIGl0ZXItPmtleSwgLTEsIFVTdHJpbmcoKSk7CiB9CiAK
IGlubGluZSB2b2lkIFJlY29tcGlsZXI6Om9wZXJhdG9yKCkoSlNDZWxsKiBjZWxsKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBc3NlbWJseUhlbHBlcnMuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBc3NlbWJseUhlbHBlcnMuY3BwCmluZGV4IDE1
ZjZkMTlhNWZjNGM5YjViYTZhZGQ5ZTQwMjIxNGZjMGU5ZTBhMzcuLjIyYzg0Y2JhZWIyMjZmNzg3
ZWQwZDJiN2E5MDVlOTIwOTQxNjAxZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXNzZW1ibHlIZWxwZXJzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5jcHAKQEAgLTQxLDkgKzQxLDkgQEAgVmVjdG9yPEJ5dGVj
b2RlQW5kTWFjaGluZU9mZnNldD4mIEFzc2VtYmx5SGVscGVyczo6ZGVjb2RlZENvZGVNYXBGb3Io
Q29kZUJsb2NrKgogICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgVmVjdG9yPEJ5dGVjb2RlQW5kTWFj
aGluZU9mZnNldD4gPjo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fZGVjb2RlZENvZGVNYXBzLmFkZChj
b2RlQmxvY2ssIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+KCkpOwogICAgIAogICAg
IGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgY29kZUJsb2NrLT5qaXRDb2RlTWFwKCkt
PmRlY29kZShyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7CisgICAgICAgIGNvZGVCbG9jay0+aml0
Q29kZU1hcCgpLT5kZWNvZGUocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CiAgICAgCi0gICAgcmV0
dXJuIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3It
PnZhbHVlOwogfQogCiAjaWYgRU5BQkxFKFNBTVBMSU5HX0ZMQUdTKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZUNhY2hlLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlQ2FjaGUuaAppbmRleCBmNmE3NDVjNjY1ODcxMzNiMTJj
YmQ0NGZmM2E5MjlhOTNjMWJhMTA3Li44ZWQxNTc4ZjI2ZDNhNGU3NWUyM2E5ZDhlZWZmMDlhYjRh
YjYwMDljIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
Q2FjaGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlQ2FjaGUu
aApAQCAtMTMyLDEwICsxMzIsMTAgQEAgcHVibGljOgogICAgICAgICBNYXA6Oml0ZXJhdG9yIGJl
Z2luID0gbV9tYXAuYmVnaW4oKTsKICAgICAgICAgTWFwOjppdGVyYXRvciBlbmQgPSBtX21hcC5l
bmQoKTsKICAgICAgICAgZm9yIChNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBiZWdpbjsgaXRlciAhPSBl
bmQ7ICsraXRlcikgewotICAgICAgICAgICAgaWYgKCFpdGVyLT5zZWNvbmQuY29kZUJsb2NrKQor
ICAgICAgICAgICAgaWYgKCFpdGVyLT52YWx1ZS5jb2RlQmxvY2spCiAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICBpZiAoaXRlci0+c2Vjb25kLm93bmVkKSB7Ci0gICAgICAg
ICAgICAgICAgZGVsZXRlIGl0ZXItPnNlY29uZC5jb2RlQmxvY2s7CisgICAgICAgICAgICBpZiAo
aXRlci0+dmFsdWUub3duZWQpIHsKKyAgICAgICAgICAgICAgICBkZWxldGUgaXRlci0+dmFsdWUu
Y29kZUJsb2NrOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CkBAIC0xNDUsNyArMTQ1LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgTWFwOjpp
dGVyYXRvciBpdGVyID0gbV9tYXAuZmluZChrZXkpOwogICAgICAgICBpZiAoaXRlciAhPSBtX21h
cC5lbmQoKSkKLSAgICAgICAgICAgIHJldHVybiBpdGVyLT5zZWNvbmQuY29kZUJsb2NrOworICAg
ICAgICAgICAgcmV0dXJuIGl0ZXItPnZhbHVlLmNvZGVCbG9jazsKICAgICAgICAgCiAgICAgICAg
IEJ5dGVDb2RlQ2FjaGVWYWx1ZSB2YWx1ZTsKICAgICAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCmluZGV4IDY1NGFjOTgyYTA0MzE1OTg5
N2VlZGE1NWRmNWMxMjE3ZDI2MmJjNWEuLmE0MTA2YWFmNGU4ZDNlZWUyNzY4ODg2NTM0ZTg3M2Ri
MWJiMjQxNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwCkBAIC01ODMsOSArNTgzLDkgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIEhh
c2hNYXA8SlNDZWxsKiwgTm9kZUluZGV4Pjo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fY2VsbENvbnN0
YW50Tm9kZXMuYWRkKGNlbGwsIE5vTm9kZSk7CiAgICAgICAgIGlmIChyZXN1bHQuaXNOZXdFbnRy
eSkKLSAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gYWRkVG9HcmFwaChXZWFr
SlNDb25zdGFudCwgT3BJbmZvKGNlbGwpKTsKKyAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+
dmFsdWUgPSBhZGRUb0dyYXBoKFdlYWtKU0NvbnN0YW50LCBPcEluZm8oY2VsbCkpOwogICAgICAg
ICAKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICByZXR1
cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAgICB9CiAgICAgCiAgICAgQ29kZU9yaWdpbiBj
dXJyZW50Q29kZU9yaWdpbigpCkBAIC0yNjk0LDcgKzI2OTQsNyBAQCBCeXRlQ29kZVBhcnNlcjo6
SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lU3RhY2tFbnRyeShCeXRlQ29kZVBhcnNlciogYnl0ZUNv
ZGVQYXJzZQogICAgICAgICAgICAgSWRlbnRpZmllck1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IGJ5
dGVDb2RlUGFyc2VyLT5tX2lkZW50aWZpZXJNYXAuYWRkKHJlcCwgYnl0ZUNvZGVQYXJzZXItPm1f
Y29kZUJsb2NrLT5udW1iZXJPZklkZW50aWZpZXJzKCkpOwogICAgICAgICAgICAgaWYgKHJlc3Vs
dC5pc05ld0VudHJ5KQogICAgICAgICAgICAgICAgIGJ5dGVDb2RlUGFyc2VyLT5tX2NvZGVCbG9j
ay0+YWRkSWRlbnRpZmllcihJZGVudGlmaWVyKGJ5dGVDb2RlUGFyc2VyLT5tX2dsb2JhbERhdGEs
IHJlcCkpOwotICAgICAgICAgICAgbV9pZGVudGlmaWVyUmVtYXBbaV0gPSByZXN1bHQuaXRlcmF0
b3ItPnNlY29uZDsKKyAgICAgICAgICAgIG1faWRlbnRpZmllclJlbWFwW2ldID0gcmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgfQogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGNvZGVCbG9jay0+bnVtYmVyT2ZDb25zdGFudFJlZ2lzdGVycygpOyArK2kpIHsKICAgICAgICAg
ICAgIEpTVmFsdWUgdmFsdWUgPSBjb2RlQmxvY2stPmdldENvbnN0YW50KGkgKyBGaXJzdENvbnN0
YW50UmVnaXN0ZXJJbmRleCk7CkBAIC0yNzEyLDcgKzI3MTIsNyBAQCBCeXRlQ29kZVBhcnNlcjo6
SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lU3RhY2tFbnRyeShCeXRlQ29kZVBhcnNlciogYnl0ZUNv
ZGVQYXJzZQogICAgICAgICAgICAgICAgIGJ5dGVDb2RlUGFyc2VyLT5tX2NvZGVCbG9jay0+YWRk
Q29uc3RhbnQodmFsdWUpOwogICAgICAgICAgICAgICAgIGJ5dGVDb2RlUGFyc2VyLT5tX2NvbnN0
YW50cy5hcHBlbmQoQ29uc3RhbnRSZWNvcmQoKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBtX2NvbnN0YW50UmVtYXBbaV0gPSByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAg
ICAgIG1fY29uc3RhbnRSZW1hcFtpXSA9IHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIG1fY2FsbHNpdGVCbG9ja0hlYWROZWVkc0xpbmtpbmcgPSB0
cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAppbmRleCAzNDQ0MThiYjUzZmIxZGFh
OTA0ZjE3NDZkNGQzY2E2MWNmYWVjYjY1Li5mOGFiYzlhZGIzNmIzNjdhNTU2ZGI3ZTZiODkzZmI3
ZjUzYzk4YjYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcApAQCAtNTE1LDcgKzUx
NSw3IEBAIHZvaWQgSGVhcDo6bWFya1Byb3RlY3RlZE9iamVjdHMoSGVhcFJvb3RWaXNpdG9yJiBo
ZWFwUm9vdFZpc2l0b3IpCiB7CiAgICAgUHJvdGVjdENvdW50U2V0OjppdGVyYXRvciBlbmQgPSBt
X3Byb3RlY3RlZFZhbHVlcy5lbmQoKTsKICAgICBmb3IgKFByb3RlY3RDb3VudFNldDo6aXRlcmF0
b3IgaXQgPSBtX3Byb3RlY3RlZFZhbHVlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAg
ICAgIGhlYXBSb290VmlzaXRvci52aXNpdCgmaXQtPmZpcnN0KTsKKyAgICAgICAgaGVhcFJvb3RW
aXNpdG9yLnZpc2l0KCZpdC0+a2V5KTsKIH0KIAogdm9pZCBIZWFwOjpwdXNoVGVtcFNvcnRWZWN0
b3IoVmVjdG9yPFZhbHVlU3RyaW5nUGFpcj4qIHRlbXBWZWN0b3IpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwLmgKaW5kZXggNzA0MDkwOGUxN2M5ZDhmZGQ2YjMyZGQ4YWY0NTZhYzk5MTQzOGYxNS4u
ZTk4Y2VlZTA0MmJhODBiNTdiYjg0ZTU5ZjkyN2YyYTIwNzVjMzI0ZiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXAuaApAQCAtMzM4LDcgKzMzOCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHsK
ICAgICAgICAgUHJvdGVjdENvdW50U2V0OjppdGVyYXRvciBlbmQgPSBtX3Byb3RlY3RlZFZhbHVl
cy5lbmQoKTsKICAgICAgICAgZm9yIChQcm90ZWN0Q291bnRTZXQ6Oml0ZXJhdG9yIGl0ID0gbV9w
cm90ZWN0ZWRWYWx1ZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgZnVu
Y3RvcihpdC0+Zmlyc3QpOworICAgICAgICAgICAgZnVuY3RvcihpdC0+a2V5KTsKICAgICAgICAg
bV9oYW5kbGVTZXQuZm9yRWFjaFN0cm9uZ0hhbmRsZShmdW5jdG9yLCBtX3Byb3RlY3RlZFZhbHVl
cyk7CiAKICAgICAgICAgcmV0dXJuIGZ1bmN0b3IucmV0dXJuVmFsdWUoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmNwcAppbmRleCAwMWIxMjYwYzk5MWJlNGY1NDRjM2E1YmJlMzdlNDgyODQyNzky
NjA0Li5jODUyMjcwNjBhNWNlNDk2ZWQxMWY0NDY1MmY4ODllYzRjZTQxMWQwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuY3BwCkBAIC02ODMsOCArNjgzLDggQEAgSklUQ29kZSBKSVQ6OnByaXZh
dGVDb21waWxlKENvZGVQdHIqIGZ1bmN0aW9uRW50cnlBcml0eUNoZWNrLCBKSVRDb21waWxhdGlv
bkVmZm8KIAogICAgICAgICAgICAgU3RyaW5nSnVtcFRhYmxlOjpTdHJpbmdPZmZzZXRUYWJsZTo6
aXRlcmF0b3IgZW5kID0gcmVjb3JkLmp1bXBUYWJsZS5zdHJpbmdKdW1wVGFibGUtPm9mZnNldFRh
YmxlLmVuZCgpOyAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yIChTdHJpbmdKdW1wVGFibGU6
OlN0cmluZ09mZnNldFRhYmxlOjppdGVyYXRvciBpdCA9IHJlY29yZC5qdW1wVGFibGUuc3RyaW5n
SnVtcFRhYmxlLT5vZmZzZXRUYWJsZS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBpdC0+c2Vjb25kLmJyYW5jaE9mZnNldDsKLSAg
ICAgICAgICAgICAgICBpdC0+c2Vjb25kLmN0aU9mZnNldCA9IG9mZnNldCA/IHBhdGNoQnVmZmVy
LmxvY2F0aW9uT2YobV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyBvZmZzZXRdKSA6IHJlY29yZC5q
dW1wVGFibGUuc3RyaW5nSnVtcFRhYmxlLT5jdGlEZWZhdWx0OworICAgICAgICAgICAgICAgIHVu
c2lnbmVkIG9mZnNldCA9IGl0LT52YWx1ZS5icmFuY2hPZmZzZXQ7CisgICAgICAgICAgICAgICAg
aXQtPnZhbHVlLmN0aU9mZnNldCA9IG9mZnNldCA/IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YobV9s
YWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyBvZmZzZXRdKSA6IHJlY29yZC5qdW1wVGFibGUuc3RyaW5n
SnVtcFRhYmxlLT5jdGlEZWZhdWx0OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAppbmRleCBkYmNkNTBlNWNjYjdkYzcz
MzVjZjU4N2YzNzBiZmIyOTgxMWNjMTNlLi5kMGU4OTJiYjY1ZTZhOTRmZjg2YTY1MjE5MjFiMjgz
MDczZWE1YjRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJz
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcApAQCAtMzUz
NSwyMiArMzUzNSwyMiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgSklUVGh1bmtzOjpjdGlTdHVi
KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgVGh1bmtHZW5lcmF0bwogewogICAgIENUSVN0dWJN
YXA6OkFkZFJlc3VsdCBlbnRyeSA9IG1fY3RpU3R1Yk1hcC5hZGQoZ2VuZXJhdG9yLCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYoKSk7CiAgICAgaWYgKGVudHJ5LmlzTmV3RW50cnkpCi0gICAgICAgIGVu
dHJ5Lml0ZXJhdG9yLT5zZWNvbmQgPSBnZW5lcmF0b3IoZ2xvYmFsRGF0YSk7Ci0gICAgcmV0dXJu
IGVudHJ5Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgIGVudHJ5Lml0ZXJhdG9yLT52YWx1ZSA9
IGdlbmVyYXRvcihnbG9iYWxEYXRhKTsKKyAgICByZXR1cm4gZW50cnkuaXRlcmF0b3ItPnZhbHVl
OwogfQogCiBOYXRpdmVFeGVjdXRhYmxlKiBKSVRUaHVua3M6Omhvc3RGdW5jdGlvblN0dWIoSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgTmF0aXZlRnVu
Y3Rpb24gY29uc3RydWN0b3IpCiB7CiAgICAgSG9zdEZ1bmN0aW9uU3R1Yk1hcDo6QWRkUmVzdWx0
IHJlc3VsdCA9IG1faG9zdEZ1bmN0aW9uU3R1Yk1hcC0+YWRkKGZ1bmN0aW9uLCBQYXNzV2VhazxO
YXRpdmVFeGVjdXRhYmxlPigpKTsKLSAgICBpZiAoIXJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKQot
ICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IFBhc3NXZWFrPE5hdGl2ZUV4ZWN1dGFi
bGU+KCpnbG9iYWxEYXRhLCBOYXRpdmVFeGVjdXRhYmxlOjpjcmVhdGUoKmdsb2JhbERhdGEsIEpJ
VDo6Y29tcGlsZUNUSU5hdGl2ZUNhbGwoZ2xvYmFsRGF0YSwgZnVuY3Rpb24pLCBmdW5jdGlvbiwg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoY3RpTmF0aXZl
Q29uc3RydWN0KCkpLCBjb25zdHJ1Y3RvciwgTm9JbnRyaW5zaWMpKTsKLSAgICByZXR1cm4gcmVz
dWx0Lml0ZXJhdG9yLT5zZWNvbmQuZ2V0KCk7CisgICAgaWYgKCFyZXN1bHQuaXRlcmF0b3ItPnZh
bHVlKQorICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gUGFzc1dlYWs8TmF0aXZlRXhl
Y3V0YWJsZT4oKmdsb2JhbERhdGEsIE5hdGl2ZUV4ZWN1dGFibGU6OmNyZWF0ZSgqZ2xvYmFsRGF0
YSwgSklUOjpjb21waWxlQ1RJTmF0aXZlQ2FsbChnbG9iYWxEYXRhLCBmdW5jdGlvbiksIGZ1bmN0
aW9uLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihjdGlO
YXRpdmVDb25zdHJ1Y3QoKSksIGNvbnN0cnVjdG9yLCBOb0ludHJpbnNpYykpOworICAgIHJldHVy
biByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpOwogfQogCiBOYXRpdmVFeGVjdXRhYmxlKiBK
SVRUaHVua3M6Omhvc3RGdW5jdGlvblN0dWIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBOYXRp
dmVGdW5jdGlvbiBmdW5jdGlvbiwgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yLCBJbnRyaW5zaWMg
aW50cmluc2ljKQogewogICAgIEhvc3RGdW5jdGlvblN0dWJNYXA6OkFkZFJlc3VsdCBlbnRyeSA9
IG1faG9zdEZ1bmN0aW9uU3R1Yk1hcC0+YWRkKGZ1bmN0aW9uLCBQYXNzV2VhazxOYXRpdmVFeGVj
dXRhYmxlPigpKTsKLSAgICBpZiAoIWVudHJ5Lml0ZXJhdG9yLT5zZWNvbmQpIHsKKyAgICBpZiAo
IWVudHJ5Lml0ZXJhdG9yLT52YWx1ZSkgewogICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
Y29kZTsKICAgICAgICAgaWYgKGdlbmVyYXRvcikgewogICAgICAgICAgICAgaWYgKGdsb2JhbERh
dGEtPmNhblVzZUpJVCgpKQpAQCAtMzU1OSw5ICszNTU5LDkgQEAgTmF0aXZlRXhlY3V0YWJsZSog
SklUVGh1bmtzOjpob3N0RnVuY3Rpb25TdHViKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgTmF0
aXZlRnUKICAgICAgICAgICAgICAgICBjb2RlID0gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCk7CiAg
ICAgICAgIH0gZWxzZQogICAgICAgICAgICAgY29kZSA9IEpJVDo6Y29tcGlsZUNUSU5hdGl2ZUNh
bGwoZ2xvYmFsRGF0YSwgZnVuY3Rpb24pOwotICAgICAgICBlbnRyeS5pdGVyYXRvci0+c2Vjb25k
ID0gUGFzc1dlYWs8TmF0aXZlRXhlY3V0YWJsZT4oKmdsb2JhbERhdGEsIE5hdGl2ZUV4ZWN1dGFi
bGU6OmNyZWF0ZSgqZ2xvYmFsRGF0YSwgY29kZSwgZnVuY3Rpb24sIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGN0aU5hdGl2ZUNvbnN0cnVjdCgpKSwgY2Fs
bEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0b3IsIGludHJpbnNpYykpOworICAgICAgICBlbnRyeS5p
dGVyYXRvci0+dmFsdWUgPSBQYXNzV2VhazxOYXRpdmVFeGVjdXRhYmxlPigqZ2xvYmFsRGF0YSwg
TmF0aXZlRXhlY3V0YWJsZTo6Y3JlYXRlKCpnbG9iYWxEYXRhLCBjb2RlLCBmdW5jdGlvbiwgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoY3RpTmF0aXZlQ29u
c3RydWN0KCkpLCBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3RvciwgaW50cmluc2ljKSk7CiAg
ICAgfQotICAgIHJldHVybiBlbnRyeS5pdGVyYXRvci0+c2Vjb25kLmdldCgpOworICAgIHJldHVy
biBlbnRyeS5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7CiB9CiAKIHZvaWQgSklUVGh1bmtzOjpjbGVh
ckhvc3RGdW5jdGlvblN0dWJzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
YXJzZXIvUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNw
cAppbmRleCBhMDNhZjI0ZGZhMzM2ZWU2YWM3NmVlNzdmMDdkODhjNmJkYzk3ODBjLi5lYmVhMDY4
ZjNlNTc3YzQ5YTgzNDJmOTliYzY4MTEyYzYyMGZkOWNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9QYXJzZXIuY3BwCkBAIC0xMzMxLDEwICsxMzMxLDEwIEBAIHRlbXBsYXRlIDxjbGFz
cyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3Npb24gUGFyc2VyPExleGVyVHlwZT46OnBhcnNlU3Ry
aWN0T2JqZWN0CiAgICAgICAgIGlmICghbV9zeW50YXhBbHJlYWR5VmFsaWRhdGVkKSB7CiAgICAg
ICAgICAgICBPYmplY3RWYWxpZGF0aW9uTWFwOjpBZGRSZXN1bHQgcHJvcGVydHlFbnRyeSA9IG9i
amVjdFZhbGlkYXRvci5hZGQoY29udGV4dC5nZXROYW1lKHByb3BlcnR5KS5pbXBsKCksIGNvbnRl
eHQuZ2V0VHlwZShwcm9wZXJ0eSkpOwogICAgICAgICAgICAgaWYgKCFwcm9wZXJ0eUVudHJ5Lmlz
TmV3RW50cnkpIHsKLSAgICAgICAgICAgICAgICBmYWlsSWZUcnVlKHByb3BlcnR5RW50cnkuaXRl
cmF0b3ItPnNlY29uZCA9PSBQcm9wZXJ0eU5vZGU6OkNvbnN0YW50KTsKKyAgICAgICAgICAgICAg
ICBmYWlsSWZUcnVlKHByb3BlcnR5RW50cnkuaXRlcmF0b3ItPnZhbHVlID09IFByb3BlcnR5Tm9k
ZTo6Q29uc3RhbnQpOwogICAgICAgICAgICAgICAgIGZhaWxJZlRydWUoY29udGV4dC5nZXRUeXBl
KHByb3BlcnR5KSA9PSBQcm9wZXJ0eU5vZGU6OkNvbnN0YW50KTsKLSAgICAgICAgICAgICAgICBm
YWlsSWZUcnVlKGNvbnRleHQuZ2V0VHlwZShwcm9wZXJ0eSkgJiBwcm9wZXJ0eUVudHJ5Lml0ZXJh
dG9yLT5zZWNvbmQpOwotICAgICAgICAgICAgICAgIHByb3BlcnR5RW50cnkuaXRlcmF0b3ItPnNl
Y29uZCB8PSBjb250ZXh0LmdldFR5cGUocHJvcGVydHkpOworICAgICAgICAgICAgICAgIGZhaWxJ
ZlRydWUoY29udGV4dC5nZXRUeXBlKHByb3BlcnR5KSAmIHByb3BlcnR5RW50cnkuaXRlcmF0b3It
PnZhbHVlKTsKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eUVudHJ5Lml0ZXJhdG9yLT52YWx1ZSB8
PSBjb250ZXh0LmdldFR5cGUocHJvcGVydHkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAg
ICAgICAgIHRhaWwgPSBjb250ZXh0LmNyZWF0ZVByb3BlcnR5TGlzdChtX2xleGVyLT5sYXN0TGlu
ZU51bWJlcigpLCBwcm9wZXJ0eSwgdGFpbCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcHJvZmlsZXIvUHJvZmlsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmls
ZXIvUHJvZmlsZS5jcHAKaW5kZXggNDlkNmRlOTdhOThhYjBjNTNmZWVhNjViMzg5NjlmZDMwMTEz
Mzk5Ny4uYWE3MzMyYWUwYzMxNDcxYTIyNGJmZGEyMWUwY2FlZjgyM2UyNTM4OCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGUuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlLmNwcApAQCAtMTA3LDI4ICsxMDcsMjgg
QEAgdm9pZCBQcm9maWxlOjpkZWJ1Z1ByaW50RGF0YSgpIGNvbnN0CiAgICAgbV9oZWFkLT5kZWJ1
Z1ByaW50RGF0YSgwKTsKIH0KIAotdHlwZWRlZiBwYWlyPFN0cmluZ0ltcGwqLCB1bnNpZ25lZD4g
TmFtZUNvdW50UGFpcjsKK3R5cGVkZWYgV1RGOjpLZXlWYWx1ZVBhaXI8RnVuY3Rpb25DYWxsSGFz
aENvdW50OjpWYWx1ZVR5cGUsIHVuc2lnbmVkPiBOYW1lQ291bnRFbnRyeTsKIAotc3RhdGljIGlu
bGluZSBib29sIGZ1bmN0aW9uTmFtZUNvdW50UGFpckNvbXBhcmF0b3IoY29uc3QgTmFtZUNvdW50
UGFpciYgYSwgY29uc3QgTmFtZUNvdW50UGFpciYgYikKK3N0YXRpYyBpbmxpbmUgYm9vbCBmdW5j
dGlvbk5hbWVDb3VudEVudHJ5Q29tcGFyYXRvcihjb25zdCBOYW1lQ291bnRFbnRyeSYgYSwgY29u
c3QgTmFtZUNvdW50RW50cnkmIGIpCiB7Ci0gICAgcmV0dXJuIGEuc2Vjb25kID4gYi5zZWNvbmQ7
CisgICAgcmV0dXJuIGEudmFsdWUgPiBiLnZhbHVlOwogfQogCiB2b2lkIFByb2ZpbGU6OmRlYnVn
UHJpbnREYXRhU2FtcGxlU3R5bGUoKSBjb25zdAogewotICAgIHR5cGVkZWYgVmVjdG9yPE5hbWVD
b3VudFBhaXI+IE5hbWVDb3VudFBhaXJWZWN0b3I7CisgICAgdHlwZWRlZiBWZWN0b3I8TmFtZUNv
dW50RW50cnk+IE5hbWVDb3VudEVudHJ5VmVjdG9yOwogCiAgICAgRnVuY3Rpb25DYWxsSGFzaENv
dW50IGNvdW50ZWRGdW5jdGlvbnM7CiAgICAgZGF0YUxvZygiQ2FsbCBncmFwaDpcbiIpOwogICAg
IG1faGVhZC0+ZGVidWdQcmludERhdGFTYW1wbGVTdHlsZSgwLCBjb3VudGVkRnVuY3Rpb25zKTsK
IAogICAgIGRhdGFMb2coIlxuVG90YWwgbnVtYmVyIGluIHN0YWNrOlxuIik7Ci0gICAgTmFtZUNv
dW50UGFpclZlY3RvciBzb3J0ZWRGdW5jdGlvbnMoY291bnRlZEZ1bmN0aW9ucy5zaXplKCkpOwor
ICAgIE5hbWVDb3VudEVudHJ5VmVjdG9yIHNvcnRlZEZ1bmN0aW9ucyhjb3VudGVkRnVuY3Rpb25z
LnNpemUoKSk7CiAgICAgY29weVRvVmVjdG9yKGNvdW50ZWRGdW5jdGlvbnMsIHNvcnRlZEZ1bmN0
aW9ucyk7CiAKLSAgICBzdGQ6OnNvcnQoc29ydGVkRnVuY3Rpb25zLmJlZ2luKCksIHNvcnRlZEZ1
bmN0aW9ucy5lbmQoKSwgZnVuY3Rpb25OYW1lQ291bnRQYWlyQ29tcGFyYXRvcik7Ci0gICAgZm9y
IChOYW1lQ291bnRQYWlyVmVjdG9yOjppdGVyYXRvciBpdCA9IHNvcnRlZEZ1bmN0aW9ucy5iZWdp
bigpOyBpdCAhPSBzb3J0ZWRGdW5jdGlvbnMuZW5kKCk7ICsraXQpCi0gICAgICAgIGRhdGFMb2co
IiAgICAgICAgJS0xMmQlc1xuIiwgKCppdCkuc2Vjb25kLCBVU3RyaW5nKCgqaXQpLmZpcnN0KS51
dGY4KCkuZGF0YSgpKTsKKyAgICBzdGQ6OnNvcnQoc29ydGVkRnVuY3Rpb25zLmJlZ2luKCksIHNv
cnRlZEZ1bmN0aW9ucy5lbmQoKSwgZnVuY3Rpb25OYW1lQ291bnRFbnRyeUNvbXBhcmF0b3IpOwor
ICAgIGZvciAoTmFtZUNvdW50RW50cnlWZWN0b3I6Oml0ZXJhdG9yIGl0ID0gc29ydGVkRnVuY3Rp
b25zLmJlZ2luKCk7IGl0ICE9IHNvcnRlZEZ1bmN0aW9ucy5lbmQoKTsgKytpdCkKKyAgICAgICAg
ZGF0YUxvZygiICAgICAgICAlLTEyZCVzXG4iLCAoKml0KS52YWx1ZSwgVVN0cmluZygoKml0KS5r
ZXkpLnV0ZjgoKS5kYXRhKCkpOwogCiAgICAgZGF0YUxvZygiXG5Tb3J0IGJ5IHRvcCBvZiBzdGFj
aywgc2FtZSBjb2xsYXBzZWQgKHdoZW4gPj0gNSk6XG4iKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5jcHAKaW5kZXggMTgyYmNjNDYyMDIyYjRlYzJjYmFj
Njg1NWM1MDI5ZjY0YzcxMWZmZi4uOTIyY2FhMmI2MDAwMGJjYzEyN2MzM2MwOTUxZjgzZmVkZjZi
MzI1MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmll
ci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5jcHAK
QEAgLTEwOCw3ICsxMDgsNyBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IElkZW50aWZpZXI6OmFk
ZChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IGNoYXIqIGMpCiAKICAgICBjb25zdCBM
aXRlcmFsSWRlbnRpZmllclRhYmxlOjppdGVyYXRvciYgaXRlciA9IGxpdGVyYWxJZGVudGlmaWVy
VGFibGUuZmluZChjKTsKICAgICBpZiAoaXRlciAhPSBsaXRlcmFsSWRlbnRpZmllclRhYmxlLmVu
ZCgpKQotICAgICAgICByZXR1cm4gaXRlci0+c2Vjb25kOworICAgICAgICByZXR1cm4gaXRlci0+
dmFsdWU7CiAKICAgICBIYXNoU2V0PFN0cmluZ0ltcGwqPjo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9
IGlkZW50aWZpZXJUYWJsZS5hZGQ8Y29uc3QgTENoYXIqLCBJZGVudGlmaWVyQ1N0cmluZ1RyYW5z
bGF0b3I+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihjKSk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uY3BwCmluZGV4IGExMDM2MTAwNzMy
NjhiMTIzNjY4MDcwMjE1OTBiMGQ0NjU3ZmEyMTIuLmMwMmRhZDQxMzc0NjFhYTU2NjgwNGMwYTMw
MWJkN2NhMGQxMDc5ZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQWN0aXZhdGlvbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
Y3RpdmF0aW9uLmNwcApAQCAtMTI3LDExICsxMjcsMTEgQEAgdm9pZCBKU0FjdGl2YXRpb246Omdl
dE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9w
ZXIKICAgICBKU0FjdGl2YXRpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBY3RpdmF0aW9uKj4o
b2JqZWN0KTsKICAgICBTeW1ib2xUYWJsZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gdGhpc09iamVj
dC0+c3ltYm9sVGFibGUoKS5lbmQoKTsKICAgICBmb3IgKFN5bWJvbFRhYmxlOjpjb25zdF9pdGVy
YXRvciBpdCA9IHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kLmdldEF0dHJpYnV0ZXMoKSAmIERvbnRFbnVt
ICYmIG1vZGUgIT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykKKyAgICAgICAgaWYgKGl0LT52
YWx1ZS5nZXRBdHRyaWJ1dGVzKCkgJiBEb250RW51bSAmJiBtb2RlICE9IEluY2x1ZGVEb250RW51
bVByb3BlcnRpZXMpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGl0LT5zZWNv
bmQuZ2V0SW5kZXgoKSA+PSB0aGlzT2JqZWN0LT5tX251bUNhcHR1cmVkVmFycykKKyAgICAgICAg
aWYgKGl0LT52YWx1ZS5nZXRJbmRleCgpID49IHRoaXNPYmplY3QtPm1fbnVtQ2FwdHVyZWRWYXJz
KQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50
aWZpZXIoZXhlYywgaXQtPmZpcnN0LmdldCgpKSk7CisgICAgICAgIHByb3BlcnR5TmFtZXMuYWRk
KElkZW50aWZpZXIoZXhlYywgaXQtPmtleS5nZXQoKSkpOwogICAgIH0KICAgICAvLyBTa2lwIHRo
ZSBKU1ZhcmlhYmxlT2JqZWN0IGltcGxlbWVudGF0aW9uIG9mIGdldE93blByb3BlcnR5TmFtZXMK
ICAgICBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9w
ZXJ0eU5hbWVzLCBtb2RlKTsKQEAgLTE0NCw3ICsxNDQsNyBAQCBpbmxpbmUgYm9vbCBKU0FjdGl2
YXRpb246OnN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLAogICAgIFN5bWJvbFRhYmxlOjppdGVyYXRvciBpdGVyID0gc3ltYm9sVGFibGUoKS5maW5k
KHByb3BlcnR5TmFtZS5pbXBsKCkpOwogICAgIGlmIChpdGVyID09IHN5bWJvbFRhYmxlKCkuZW5k
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBTeW1ib2xUYWJsZUVudHJ5JiBlbnRyeSA9
IGl0ZXItPnNlY29uZDsKKyAgICBTeW1ib2xUYWJsZUVudHJ5JiBlbnRyeSA9IGl0ZXItPnZhbHVl
OwogICAgIEFTU0VSVCghZW50cnkuaXNOdWxsKCkpOwogICAgIGlmIChlbnRyeS5nZXRJbmRleCgp
ID49IG1fbnVtQ2FwdHVyZWRWYXJzKQogICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCmluZGV4IGFhMWI4YjdkOTgxY2ZjNjUyZjY5
MjFjZDQ3OTgyODQ4YjgzZjk5YTAuLjZkZDEyOTE1ODhlNTAyMzliOTI0MjJjNjcwNTI5NjBlODcz
OThlYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXku
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCkBAIC0y
MDQsNyArMjA0LDcgQEAgaW5saW5lIFNwYXJzZUFycmF5VmFsdWVNYXA6OkFkZFJlc3VsdCBTcGFy
c2VBcnJheVZhbHVlTWFwOjphZGQoSlNBcnJheSogYXJyYXksIHUKIGlubGluZSB2b2lkIFNwYXJz
ZUFycmF5VmFsdWVNYXA6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIEpTQXJyYXkqIGFycmF5LCB1bnNp
Z25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQogewogICAgIEFkZFJlc3Vs
dCByZXN1bHQgPSBhZGQoYXJyYXksIGkpOwotICAgIFNwYXJzZUFycmF5RW50cnkmIGVudHJ5ID0g
cmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgU3BhcnNlQXJyYXlFbnRyeSYgZW50cnkgPSBy
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogCiAgICAgLy8gVG8gc2F2ZSBhIHNlcGFyYXRlIGZpbmQg
JiBhZGQsIHdlIGZpcnN0IGFsd2F5cyBhZGQgdG8gdGhlIHNwYXJzZSBtYXAuCiAgICAgLy8gSW4g
dGhlIHVuY29tbW9uIGNhc2UgdGhhdCB0aGlzIGlzIGEgbmV3IHByb3BlcnR5LCBhbmQgdGhlIGFy
cmF5IGlzIG5vdApAQCAtMjQ3LDcgKzI0Nyw3IEBAIGlubGluZSB2b2lkIFNwYXJzZUFycmF5VmFs
dWVNYXA6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIEpTQXJyYXkqIGFycmF5LCB1bnNpZ25lZCBpCiBp
bmxpbmUgYm9vbCBTcGFyc2VBcnJheVZhbHVlTWFwOjpwdXREaXJlY3QoRXhlY1N0YXRlKiBleGVj
LCBKU0FycmF5KiBhcnJheSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRU
aHJvdykKIHsKICAgICBBZGRSZXN1bHQgcmVzdWx0ID0gYWRkKGFycmF5LCBpKTsKLSAgICBTcGFy
c2VBcnJheUVudHJ5JiBlbnRyeSA9IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgIFNwYXJz
ZUFycmF5RW50cnkmIGVudHJ5ID0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIAogICAgIC8vIFRv
IHNhdmUgYSBzZXBhcmF0ZSBmaW5kICYgYWRkLCB3ZSBmaXJzdCBhbHdheXMgYWRkIHRvIHRoZSBz
cGFyc2UgbWFwLgogICAgIC8vIEluIHRoZSB1bmNvbW1vbiBjYXNlIHRoYXQgdGhpcyBpcyBhIG5l
dyBwcm9wZXJ0eSwgYW5kIHRoZSBhcnJheSBpcyBub3QKQEAgLTMxMyw3ICszMTMsNyBAQCBpbmxp
bmUgdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIGl0ZXJhdG9yIGVuZCA9IG1fbWFwLmVuZCgpOwogICAgIGZvciAoaXRl
cmF0b3IgaXQgPSBtX21hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHZpc2l0
b3IuYXBwZW5kKCZpdC0+c2Vjb25kKTsKKyAgICAgICAgdmlzaXRvci5hcHBlbmQoJml0LT52YWx1
ZSk7CiB9CiAKIHZvaWQgSlNBcnJheTo6YWxsb2NhdGVTcGFyc2VNYXAoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhKQpAQCAtMzQ5LDcgKzM0OSw3IEBAIHZvaWQgSlNBcnJheTo6ZW50ZXJEaWN0aW9u
YXJ5TW9kZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiAgICAgICAgIC8vIFRoaXMgd2lsbCBh
bHdheXMgYmUgYSBuZXcgZW50cnkgaW4gdGhlIG1hcCwgc28gbm8gbmVlZCB0byBjaGVjayB3ZSBj
YW4gd3JpdGUsCiAgICAgICAgIC8vIGFuZCBhdHRyaWJ1dGVzIGFyZSBkZWZhdWx0IHNvIG5vIG5l
ZWQgdG8gc2V0IHRoZW0uCiAgICAgICAgIGlmICh2YWx1ZSkKLSAgICAgICAgICAgIG1hcC0+YWRk
KHRoaXMsIGkpLml0ZXJhdG9yLT5zZWNvbmQuc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsK
KyAgICAgICAgICAgIG1hcC0+YWRkKHRoaXMsIGkpLml0ZXJhdG9yLT52YWx1ZS5zZXQoZ2xvYmFs
RGF0YSwgdGhpcywgdmFsdWUpOwogICAgIH0KIAogICAgIHZvaWQqIG5ld1Jhd1N0b3JhZ2UgPSAw
OwpAQCAtNDI1LDcgKzQyNSw3IEBAIGJvb2wgSlNBcnJheTo6ZGVmaW5lT3duTnVtZXJpY1Byb3Bl
cnR5KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5kZXgsIFByb3BlcnR5CiAKICAgICAvLyAx
LiBMZXQgY3VycmVudCBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbR2V0T3duUHJvcGVy
dHldXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIHByb3BlcnR5IG5hbWUgUC4KICAgICBTcGFy
c2VBcnJheVZhbHVlTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbWFwLT5hZGQodGhpcywgaW5kZXgp
OwotICAgIFNwYXJzZUFycmF5RW50cnkqIGVudHJ5SW5NYXAgPSAmcmVzdWx0Lml0ZXJhdG9yLT5z
ZWNvbmQ7CisgICAgU3BhcnNlQXJyYXlFbnRyeSogZW50cnlJbk1hcCA9ICZyZXN1bHQuaXRlcmF0
b3ItPnZhbHVlOwogCiAgICAgLy8gMi4gTGV0IGV4dGVuc2libGUgYmUgdGhlIHZhbHVlIG9mIHRo
ZSBbW0V4dGVuc2libGVdXSBpbnRlcm5hbCBwcm9wZXJ0eSBvZiBPLgogICAgIC8vIDMuIElmIGN1
cnJlbnQgaXMgdW5kZWZpbmVkIGFuZCBleHRlbnNpYmxlIGlzIGZhbHNlLCB0aGVuIFJlamVjdC4K
QEAgLTY1Nyw3ICs2NTcsNyBAQCBib29sIEpTQXJyYXk6OmdldE93blByb3BlcnR5U2xvdEJ5SW5k
ZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkCiAgICAgfSBlbHNlIGlm
IChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSB0aGlzT2JqZWN0LT5tX3NwYXJzZVZhbHVlTWFw
KSB7CiAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLT5maW5k
KGkpOwogICAgICAgICBpZiAoaXQgIT0gbWFwLT5ub3RGb3VuZCgpKSB7Ci0gICAgICAgICAgICBp
dC0+c2Vjb25kLmdldChzbG90KTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS5nZXQoc2xvdCk7CiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KQEAgLTcwNSw3ICs3MDUs
NyBAQCBib29sIEpTQXJyYXk6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCogb2Jq
ZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0CiAgICAgICAgIH0gZWxzZSBpZiAoU3BhcnNlQXJy
YXlWYWx1ZU1hcCogbWFwID0gdGhpc09iamVjdC0+bV9zcGFyc2VWYWx1ZU1hcCkgewogICAgICAg
ICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAtPmZpbmQoaSk7CiAg
ICAgICAgICAgICBpZiAoaXQgIT0gbWFwLT5ub3RGb3VuZCgpKSB7Ci0gICAgICAgICAgICAgICAg
aXQtPnNlY29uZC5nZXQoZGVzY3JpcHRvcik7CisgICAgICAgICAgICAgICAgaXQtPnZhbHVlLmdl
dChkZXNjcmlwdG9yKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQpAQCAtODM4LDcgKzgzOCw3IEBAIHZvaWQgSlNBcnJheTo6cHV0QnlJbmRl
eEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUK
ICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvciA9IHN0b3JhZ2UtPm1fdmVjdG9yOwog
ICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7
CiAgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICB2ZWN0b3JbaXQtPmZpcnN0XS5zZXQo
Z2xvYmFsRGF0YSwgdGhpcywgaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCkpOworICAgICAg
ICB2ZWN0b3JbaXQtPmtleV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIGl0LT52YWx1ZS5nZXROb25T
cGFyc2VNb2RlKCkpOwogICAgIGRlYWxsb2NhdGVTcGFyc2VNYXAoKTsKIAogICAgIC8vIFN0b3Jl
IHRoZSBuZXcgcHJvcGVydHkgaW50byB0aGUgdmVjdG9yLgpAQCAtOTA4LDcgKzkwOCw3IEBAIGJv
b2wgSlNBcnJheTo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiBl
eGVjLCB1bnNpZ25lZCBpLCBKU1ZhCiAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiB2ZWN0b3Ig
PSBzdG9yYWdlLT5tX3ZlY3RvcjsKICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVy
YXRvciBlbmQgPSBtYXAtPmVuZCgpOwogICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAg
dmVjdG9yW2l0LT5maXJzdF0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIGl0LT5zZWNvbmQuZ2V0Tm9u
U3BhcnNlTW9kZSgpKTsKKyAgICAgICAgdmVjdG9yW2l0LT5rZXldLnNldChnbG9iYWxEYXRhLCB0
aGlzLCBpdC0+dmFsdWUuZ2V0Tm9uU3BhcnNlTW9kZSgpKTsKICAgICBkZWFsbG9jYXRlU3BhcnNl
TWFwKCk7CiAKICAgICAvLyBTdG9yZSB0aGUgbmV3IHByb3BlcnR5IGludG8gdGhlIHZlY3Rvci4K
QEAgLTk1Miw3ICs5NTIsNyBAQCBib29sIEpTQXJyYXk6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChK
U0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSkKICAgICB9IGVsc2UgaWYg
KFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHRoaXNPYmplY3QtPm1fc3BhcnNlVmFsdWVNYXAp
IHsKICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAtPmZpbmQo
aSk7CiAgICAgICAgIGlmIChpdCAhPSBtYXAtPm5vdEZvdW5kKCkpIHsKLSAgICAgICAgICAgIGlm
IChpdC0+c2Vjb25kLmF0dHJpYnV0ZXMgJiBEb250RGVsZXRlKQorICAgICAgICAgICAgaWYgKGl0
LT52YWx1ZS5hdHRyaWJ1dGVzICYgRG9udERlbGV0ZSkKICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgICAgICBtYXAtPnJlbW92ZShpdCk7CiAgICAgICAgIH0KQEAgLTk5MCw4
ICs5OTAsOCBAQCB2b2lkIEpTQXJyYXk6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9i
amVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbQogICAgICAgICAKICAgICAgICAgU3Bh
cnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKICAgICAg
ICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAobW9kZSA9PSBJbmNsdWRl
RG9udEVudW1Qcm9wZXJ0aWVzIHx8ICEoaXQtPnNlY29uZC5hdHRyaWJ1dGVzICYgRG9udEVudW0p
KQotICAgICAgICAgICAgICAgIGtleXMuYXBwZW5kKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpdC0+
Zmlyc3QpKTsKKyAgICAgICAgICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRp
ZXMgfHwgIShpdC0+dmFsdWUuYXR0cmlidXRlcyAmIERvbnRFbnVtKSkKKyAgICAgICAgICAgICAg
ICBrZXlzLmFwcGVuZChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaXQtPmtleSkpOwogICAgICAgICB9
CiAKICAgICAgICAgcXNvcnQoa2V5cy5iZWdpbigpLCBrZXlzLnNpemUoKSwgc2l6ZW9mKHVuc2ln
bmVkKSwgY29tcGFyZUtleXNGb3JRU29ydCk7CkBAIC0xMTg0LDcgKzExODQsNyBAQCBib29sIEpT
QXJyYXk6OnNldExlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIG5ld0xlbmd0aCwgYm9v
bCB0aHJvd0V4Y2VwdGlvbgogICAgICAgICAgICAga2V5cy5yZXNlcnZlQ2FwYWNpdHkobWluKG1h
cC0+c2l6ZSgpLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGxlbmd0aCAtIG5ld0xlbmd0aCkpKTsKICAg
ICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC0+
ZW5kKCk7CiAgICAgICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBpbmRleCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihpdC0+Zmlyc3QpOworICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGl0LT5r
ZXkpOwogICAgICAgICAgICAgICAgIGlmIChpbmRleCA8IGxlbmd0aCAmJiBpbmRleCA+PSBuZXdM
ZW5ndGgpCiAgICAgICAgICAgICAgICAgICAgIGtleXMuYXBwZW5kKGluZGV4KTsKICAgICAgICAg
ICAgIH0KQEAgLTExOTksNyArMTE5OSw3IEBAIGJvb2wgSlNBcnJheTo6c2V0TGVuZ3RoKEV4ZWNT
dGF0ZSogZXhlYywgdW5zaWduZWQgbmV3TGVuZ3RoLCBib29sIHRocm93RXhjZXB0aW9uCiAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0ga2V5c1stLWldOwogICAgICAgICAgICAg
ICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+ZmluZChpbmRl
eCk7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChpdCAhPSBtYXAtPm5vdEZvdW5kKCkpOwot
ICAgICAgICAgICAgICAgICAgICBpZiAoaXQtPnNlY29uZC5hdHRyaWJ1dGVzICYgRG9udERlbGV0
ZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoaXQtPnZhbHVlLmF0dHJpYnV0ZXMgJiBEb250
RGVsZXRlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlLT5tX2xlbmd0aCA9IGlu
ZGV4ICsgMTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhy
b3dFeGNlcHRpb24sICJVbmFibGUgdG8gZGVsZXRlIHByb3BlcnR5LiIpOwogICAgICAgICAgICAg
ICAgICAgICB9CkBAIC0xNjY5LDcgKzE2NjksNyBAQCB2b2lkIEpTQXJyYXk6OnNvcnQoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIGNvbXBhcmVGdW5jdGlvbiwgQ2FsbFR5cGUgY2FsbFR5cGUsCiAK
ICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5l
bmQoKTsKICAgICAgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICB0cmVlLmFi
c3RyYWN0b3IoKS5tX25vZGVzW251bURlZmluZWRdLnZhbHVlID0gaXQtPnNlY29uZC5nZXROb25T
cGFyc2VNb2RlKCk7CisgICAgICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzW251bURl
ZmluZWRdLnZhbHVlID0gaXQtPnZhbHVlLmdldE5vblNwYXJzZU1vZGUoKTsKICAgICAgICAgICAg
IHRyZWUuaW5zZXJ0KG51bURlZmluZWQpOwogICAgICAgICAgICAgKytudW1EZWZpbmVkOwogICAg
ICAgICB9CkBAIC0xNzg0LDcgKzE3ODQsNyBAQCB1bnNpZ25lZCBKU0FycmF5Ojpjb21wYWN0Rm9y
U29ydGluZyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiAKICAgICAgICAgU3BhcnNlQXJyYXlW
YWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKICAgICAgICAgZm9yIChT
cGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KQotICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbbnVtRGVmaW5lZCsr
XS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpKTsK
KyAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW251bURlZmluZWQrK10uc2V0V2l0aG91dFdy
aXRlQmFycmllcihpdC0+dmFsdWUuZ2V0Tm9uU3BhcnNlTW9kZSgpKTsKIAogICAgICAgICBkZWFs
bG9jYXRlU3BhcnNlTWFwKCk7CiAgICAgfQpAQCAtMTgzMSwxMyArMTgzMSwxMyBAQCB2b2lkIEpT
QXJyYXk6OmNoZWNrQ29uc2lzdGVuY3koQ29uc2lzdGVuY3lDaGVja1R5cGUgdHlwZSkKICAgICBp
ZiAobV9zcGFyc2VWYWx1ZU1hcCkgewogICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25z
dF9pdGVyYXRvciBlbmQgPSBtX3NwYXJzZVZhbHVlTWFwLT5lbmQoKTsKICAgICAgICAgZm9yIChT
cGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fc3BhcnNlVmFsdWVNYXAt
PmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgdW5zaWduZWQgaW5kZXgg
PSBpdC0+Zmlyc3Q7CisgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGl0LT5rZXk7CiAgICAg
ICAgICAgICBBU1NFUlQoaW5kZXggPCBzdG9yYWdlLT5tX2xlbmd0aCk7CiAgICAgICAgICAgICBB
U1NFUlQoaW5kZXggPj0gbV92ZWN0b3JMZW5ndGgpOwogICAgICAgICAgICAgQVNTRVJUKGluZGV4
IDw9IE1BWF9BUlJBWV9JTkRFWCk7Ci0gICAgICAgICAgICBBU1NFUlQoaXQtPnNlY29uZCk7Cisg
ICAgICAgICAgICBBU1NFUlQoaXQtPnZhbHVlKTsKICAgICAgICAgICAgIGlmICh0eXBlICE9IERl
c3RydWN0b3JDb25zaXN0ZW5jeUNoZWNrKQotICAgICAgICAgICAgICAgIGl0LT5zZWNvbmQuZ2V0
Tm9uU3BhcnNlTW9kZSgpLmlzVW5kZWZpbmVkKCk7IC8vIExpa2VseSB0byBjcmFzaCBpZiB0aGUg
b2JqZWN0IHdhcyBkZWFsbG9jYXRlZC4KKyAgICAgICAgICAgICAgICBpdC0+dmFsdWUuZ2V0Tm9u
U3BhcnNlTW9kZSgpLmlzVW5kZWZpbmVkKCk7IC8vIExpa2VseSB0byBjcmFzaCBpZiB0aGUgb2Jq
ZWN0IHdhcyBkZWFsbG9jYXRlZC4KICAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFyaWFibGVPYmplY3QuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5jcHAKaW5kZXggOGNhNjk1
MDc0NTExOWMwNDk2ZjdkNmUwMWRjMWNlYzhmMjg5NGQ5OC4uN2MyZjZhM2IyNjAwZjA3YjM3NGM0
ZWViNGU5NTNjOWMzODBjN2NlMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5jcHAKQEAgLTU2LDggKzU2LDggQEAgdm9pZCBKU1Zhcmlh
YmxlT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0
ZSogZXhlYywgUHIKICAgICBKU1ZhcmlhYmxlT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
VmFyaWFibGVPYmplY3QqPihvYmplY3QpOwogICAgIFN5bWJvbFRhYmxlOjpjb25zdF9pdGVyYXRv
ciBlbmQgPSB0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgpLmVuZCgpOwogICAgIGZvciAoU3ltYm9s
VGFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKCEoaXQtPnNlY29uZC5nZXRBdHRy
aWJ1dGVzKCkgJiBEb250RW51bSkgfHwgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGll
cykpCi0gICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyKGV4ZWMsIGl0LT5m
aXJzdC5nZXQoKSkpOworICAgICAgICBpZiAoIShpdC0+dmFsdWUuZ2V0QXR0cmlidXRlcygpICYg
RG9udEVudW0pIHx8IChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpKQorICAgICAg
ICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihleGVjLCBpdC0+a2V5LmdldCgpKSk7
CiAgICAgfQogICAgIAogICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmpl
Y3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5oCmluZGV4IGJjZmU0YWI4OTVmNjBhOTkyOGM0
MjE5YTRiNDFkMzZlMTczYzRjYWQuLmFlM2ExZGY1ZDFlYmM3OTczNzZkZWQ1ODYyZWEyNTI1Zjdi
MzgwNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFyaWFi
bGVPYmplY3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhcmlhYmxl
T2JqZWN0LmgKQEAgLTE0NSw3ICsxNDUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgU3lt
Ym9sVGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSBzeW1ib2xUYWJsZSgpLmZpbmQocHJvcGVydHlOYW1l
LmltcGwoKSk7CiAgICAgICAgIGlmIChpdGVyID09IHN5bWJvbFRhYmxlKCkuZW5kKCkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIFN5bWJvbFRhYmxlRW50cnkmIGVudHJ5ID0g
aXRlci0+c2Vjb25kOworICAgICAgICBTeW1ib2xUYWJsZUVudHJ5JiBlbnRyeSA9IGl0ZXItPnZh
bHVlOwogICAgICAgICBBU1NFUlQoIWVudHJ5LmlzTnVsbCgpKTsKICAgICAgICAgZW50cnkuc2V0
QXR0cmlidXRlcyhhdHRyaWJ1dGVzKTsKICAgICAgICAgcmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRl
eCgpKS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGUuY3BwCmluZGV4IGQ1ZWRiYmM3ZjM0NmJmMjNmMjVkMGYw
MTYxY2JiZjU3M2Y0NDA1ZDAuLjQzYjQ3YWJlOTJkMzQ4YmE0NzUyMWJmMGM4MTJlMTk0N2ZiYmRi
NDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hl
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZS5jcHAK
QEAgLTM4LDcgKzM4LDcgQEAgUmVnRXhwKiBSZWdFeHBDYWNoZTo6bG9va3VwT3JDcmVhdGUoY29u
c3QgVVN0cmluZyYgcGF0dGVyblN0cmluZywgUmVnRXhwRmxhZ3MgZmwKICAgICBSZWdFeHBLZXkg
a2V5KGZsYWdzLCBwYXR0ZXJuU3RyaW5nKTsKICAgICBSZWdFeHBDYWNoZU1hcDo6aXRlcmF0b3Ig
cmVzdWx0ID0gbV93ZWFrQ2FjaGUuZmluZChrZXkpOwogICAgIGlmIChyZXN1bHQgIT0gbV93ZWFr
Q2FjaGUuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZC5nZXQoKTsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdC0+dmFsdWUuZ2V0KCk7CiAgICAgUmVnRXhwKiByZWdFeHAgPSBSZWdF
eHA6OmNyZWF0ZVdpdGhvdXRDYWNoaW5nKCptX2dsb2JhbERhdGEsIHBhdHRlcm5TdHJpbmcsIGZs
YWdzKTsKICNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCiAgICAgbV9nbG9iYWxEYXRhLT5hZGRS
ZWdFeHBUb1RyYWNlKHJlZ0V4cCk7CkBAIC04MSw3ICs4MSw3IEBAIHZvaWQgUmVnRXhwQ2FjaGU6
OmludmFsaWRhdGVDb2RlKCkKICAgICBtX25leHRFbnRyeUluU3Ryb25nQ2FjaGUgPSAwOwogICAg
IFJlZ0V4cENhY2hlTWFwOjppdGVyYXRvciBlbmQgPSBtX3dlYWtDYWNoZS5lbmQoKTsKICAgICBm
b3IgKFJlZ0V4cENhY2hlTWFwOjppdGVyYXRvciBwdHIgPSBtX3dlYWtDYWNoZS5iZWdpbigpOyBw
dHIgIT0gZW5kOyArK3B0cikKLSAgICAgICAgcHRyLT5zZWNvbmQtPmludmFsaWRhdGVDb2RlKCk7
CisgICAgICAgIHB0ci0+dmFsdWUtPmludmFsaWRhdGVDb2RlKCk7CiB9CiAKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ01hcC5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha0dDTWFwLmgKaW5kZXggYzY0Y2M4NmYwZDFiOWM3MjY5
MmJlZTk0MzY5ZTlmNWI0ZGIyZWY1YS4uMDIyNWU5MjNmNjdhYjNhY2NhYTQ2MWQyYjc3YTc4Y2Uw
MDFhMjdjZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha0dD
TWFwLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha0dDTWFwLmgKQEAg
LTY0LDcgKzY0LDcgQEAgcHVibGljOgogICAgICAgICB7CiAgICAgICAgIH0KICAgICAgICAgCi0g
ICAgICAgIHN0ZDo6cGFpcjxLZXlUeXBlLCBFeHRlcm5hbFR5cGU+IGdldCgpIGNvbnN0IHsgcmV0
dXJuIHN0ZDo6bWFrZV9wYWlyKG1faXRlcmF0b3ItPmZpcnN0LCBIYW5kbGVUeXBlczxNYXBwZWRU
eXBlPjo6Z2V0RnJvbVNsb3QoY29uc3RfY2FzdDxKU1ZhbHVlKj4oJm1faXRlcmF0b3ItPnNlY29u
ZC0+anNWYWx1ZSgpKSkpOyB9CisgICAgICAgIHN0ZDo6cGFpcjxLZXlUeXBlLCBFeHRlcm5hbFR5
cGU+IGdldCgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKG1faXRlcmF0b3ItPmtleSwg
SGFuZGxlVHlwZXM8TWFwcGVkVHlwZT46OmdldEZyb21TbG90KGNvbnN0X2Nhc3Q8SlNWYWx1ZSo+
KCZtX2l0ZXJhdG9yLT52YWx1ZS0+anNWYWx1ZSgpKSkpOyB9CiAgICAgICAgIAogICAgICAgICBp
dGVyYXRvciYgb3BlcmF0b3IrKygpIHsgKyttX2l0ZXJhdG9yOyByZXR1cm4gKnRoaXM7IH0KICAg
ICAgICAgCkBAIC04OSw3ICs4OSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIG1hcF9pdGVy
YXRvciBlbmQgPSBtX21hcC5lbmQoKTsKICAgICAgICAgZm9yIChtYXBfaXRlcmF0b3IgcHRyID0g
bV9tYXAuYmVnaW4oKTsgcHRyICE9IGVuZDsgKytwdHIpCi0gICAgICAgICAgICBXZWFrU2V0Ojpk
ZWFsbG9jYXRlKHB0ci0+c2Vjb25kKTsKKyAgICAgICAgICAgIFdlYWtTZXQ6OmRlYWxsb2NhdGUo
cHRyLT52YWx1ZSk7CiAgICAgICAgIG1fbWFwLmNsZWFyKCk7CiAgICAgfQogCkBAIC0xMDYsNyAr
MTA2LDcgQEAgcHVibGljOgogICAgIHZvaWQgcmVtb3ZlKGl0ZXJhdG9yIGl0ZXIpCiAgICAgewog
ICAgICAgICBBU1NFUlQoaXRlci5tX2l0ZXJhdG9yICE9IG1fbWFwLmVuZCgpKTsKLSAgICAgICAg
V2Vha0ltcGwqIGltcGwgPSBpdGVyLm1faXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgV2Vha0lt
cGwqIGltcGwgPSBpdGVyLm1faXRlcmF0b3ItPnZhbHVlOwogICAgICAgICBBU1NFUlQoaW1wbCk7
CiAgICAgICAgIFdlYWtTZXQ6OmRlYWxsb2NhdGUoaW1wbCk7CiAgICAgICAgIG1fbWFwLnJlbW92
ZShpdGVyLm1faXRlcmF0b3IpOwpAQCAtMTIxLDcgKzEyMSw3IEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgICAgIHR5cGVuYW1lIE1hcFR5cGU6OkFkZFJlc3VsdCByZXN1bHQgPSBtX21hcC5hZGQoa2V5
LCAwKTsKICAgICAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICAgICAgcmVzdWx0
Lml0ZXJhdG9yLT5zZWNvbmQgPSBnbG9iYWxEYXRhLmhlYXAud2Vha1NldCgpLT5hbGxvY2F0ZSh2
YWx1ZSwgdGhpcywgRmluYWxpemVyQ2FsbGJhY2s6OmZpbmFsaXplckNvbnRleHRGb3Ioa2V5KSk7
CisgICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gZ2xvYmFsRGF0YS5oZWFwLndl
YWtTZXQoKS0+YWxsb2NhdGUodmFsdWUsIHRoaXMsIEZpbmFsaXplckNhbGxiYWNrOjpmaW5hbGl6
ZXJDb250ZXh0Rm9yKGtleSkpOwogCiAgICAgICAgIC8vIFdlYWtHQ01hcCBleHBvc2VzIGEgZGlm
ZmVyZW50IGl0ZXJhdG9yLCBzbyB3ZSBuZWVkIHRvIHdyYXAgaXQgYW5kIGNyZWF0ZSBvdXIgb3du
IEFkZFJlc3VsdC4KICAgICAgICAgcmV0dXJuIEFkZFJlc3VsdChpdGVyYXRvcihyZXN1bHQuaXRl
cmF0b3IpLCByZXN1bHQuaXNOZXdFbnRyeSk7CkBAIC0xMzEsOCArMTMxLDggQEAgcHVibGljOgog
ICAgIHsKICAgICAgICAgdHlwZW5hbWUgTWFwVHlwZTo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fbWFw
LmFkZChrZXksIDApOwogICAgICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICAg
ICAgV2Vha1NldDo6ZGVhbGxvY2F0ZShyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7Ci0gICAgICAg
IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gZ2xvYmFsRGF0YS5oZWFwLndlYWtTZXQoKS0+YWxs
b2NhdGUodmFsdWUsIHRoaXMsIEZpbmFsaXplckNhbGxiYWNrOjpmaW5hbGl6ZXJDb250ZXh0Rm9y
KGtleSkpOworICAgICAgICAgICAgV2Vha1NldDo6ZGVhbGxvY2F0ZShyZXN1bHQuaXRlcmF0b3It
PnZhbHVlKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGdsb2JhbERhdGEuaGVh
cC53ZWFrU2V0KCktPmFsbG9jYXRlKHZhbHVlLCB0aGlzLCBGaW5hbGl6ZXJDYWxsYmFjazo6Zmlu
YWxpemVyQ29udGV4dEZvcihrZXkpKTsKICAgICB9CiAKICAgICBFeHRlcm5hbFR5cGUgdGFrZShj
b25zdCBLZXlUeXBlJiBrZXkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9v
bHMvUHJvZmlsZVRyZWVOb2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvUHJvZmls
ZVRyZWVOb2RlLmgKaW5kZXggOWRlMzlhZDhhMjk4NjIyYzQzM2E2N2ViNjRhNzIyMDRkZTE5ZTZj
Mi4uZTJmOTMyM2EyYTU2NWZhOTI3NmQ0MDliMjlkYjViM2U3ZjFjNDIzYiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1Byb2ZpbGVUcmVlTm9kZS5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90b29scy9Qcm9maWxlVHJlZU5vZGUuaApAQCAtMzAsNyArMzAsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgUHJvZmlsZVRyZWVOb2RlIHsKICAgICB0eXBlZGVm
IEhhc2hNYXA8U3RyaW5nLCBQcm9maWxlVHJlZU5vZGU+IE1hcDsKLSAgICB0eXBlZGVmIHN0ZDo6
cGFpcjxTdHJpbmcsIFByb2ZpbGVUcmVlTm9kZT4gTWFwRW50cnk7CisgICAgdHlwZWRlZiBIYXNo
TWFwPFN0cmluZywgUHJvZmlsZVRyZWVOb2RlPjo6VmFsdWVUeXBlIE1hcEVudHJ5OwogCiBwdWJs
aWM6CiAgICAgUHJvZmlsZVRyZWVOb2RlKCkKQEAgLTUxLDcgKzUxLDcgQEAgcHVibGljOgogICAg
IAogICAgICAgICBQcm9maWxlVHJlZU5vZGUgbmV3RW50cnk7CiAgICAgICAgIE1hcDo6QWRkUmVz
dWx0IHJlc3VsdCA9IG1fY2hpbGRyZW4tPmFkZChTdHJpbmcobmFtZSksIG5ld0VudHJ5KTsKLSAg
ICAgICAgUHJvZmlsZVRyZWVOb2RlKiBjaGlsZEluTWFwID0gJnJlc3VsdC5pdGVyYXRvci0+c2Vj
b25kOworICAgICAgICBQcm9maWxlVHJlZU5vZGUqIGNoaWxkSW5NYXAgPSAmcmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZTsKICAgICAgICAgKytjaGlsZEluTWFwLT5tX2NvdW50OwogICAgICAgICByZXR1
cm4gY2hpbGRJbk1hcDsKICAgICB9CkBAIC03Miw3ICs3Miw3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIHJldHVybiAwOwogICAgICAgICB1aW50NjRfdCBjaGlsZENvdW50ID0gMDsKICAgICAgICAg
Zm9yIChNYXA6Oml0ZXJhdG9yIGl0ID0gbV9jaGlsZHJlbi0+YmVnaW4oKTsgaXQgIT0gbV9jaGls
ZHJlbi0+ZW5kKCk7ICsraXQpCi0gICAgICAgICAgICBjaGlsZENvdW50ICs9IGl0LT5zZWNvbmQu
Y291bnQoKTsKKyAgICAgICAgICAgIGNoaWxkQ291bnQgKz0gaXQtPnZhbHVlLmNvdW50KCk7CiAg
ICAgICAgIHJldHVybiBjaGlsZENvdW50OwogICAgIH0KICAgICAKQEAgLTk3LDE5ICs5NywxOSBA
QCBwcml2YXRlOgogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGluZGVudDsg
KytpKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAiKTsKICAgICAgICAgICAgIGRhdGFM
b2coIiUgOGxsZDogJXMgKCVsbGQgc3RhY2sgdG9wKVxuIiwKLSAgICAgICAgICAgICAgICBzdGF0
aWNfY2FzdDxsb25nIGxvbmc+KGVudHJ5LT5zZWNvbmQuY291bnQoKSksCi0gICAgICAgICAgICAg
ICAgZW50cnktPmZpcnN0LnV0ZjgoKS5kYXRhKCksCi0gICAgICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8bG9uZyBsb25nPihlbnRyeS0+c2Vjb25kLmNvdW50KCkgLSBlbnRyeS0+c2Vjb25kLmNoaWxk
Q291bnQoKSkpOworICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oZW50cnkt
PnZhbHVlLmNvdW50KCkpLAorICAgICAgICAgICAgICAgIGVudHJ5LT5rZXkudXRmOCgpLmRhdGEo
KSwKKyAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KGVudHJ5LT52YWx1ZS5j
b3VudCgpIC0gZW50cnktPnZhbHVlLmNoaWxkQ291bnQoKSkpOwogCiAgICAgICAgICAgICAvLyBS
ZWN1cnNpdmVseSBkdW1wIHRoZSBjaGlsZCBub2Rlcy4KLSAgICAgICAgICAgIGVudHJ5LT5zZWNv
bmQuZHVtcEludGVybmFsKGluZGVudCArIDEpOworICAgICAgICAgICAgZW50cnktPnZhbHVlLmR1
bXBJbnRlcm5hbChpbmRlbnQgKyAxKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIHN0YXRpYyBp
bnQgY29tcGFyZUVudHJpZXMoY29uc3Qgdm9pZCogYSwgY29uc3Qgdm9pZCogYikKICAgICB7Ci0g
ICAgICAgIHVpbnQ2NF90IGRhID0gKCpzdGF0aWNfY2FzdDxNYXBFbnRyeSogY29uc3QgKj4oYSkp
LT5zZWNvbmQuY291bnQoKTsKLSAgICAgICAgdWludDY0X3QgZGIgPSAoKnN0YXRpY19jYXN0PE1h
cEVudHJ5KiBjb25zdCAqPihiKSktPnNlY29uZC5jb3VudCgpOworICAgICAgICB1aW50NjRfdCBk
YSA9ICgqc3RhdGljX2Nhc3Q8TWFwRW50cnkqIGNvbnN0ICo+KGEpKS0+dmFsdWUuY291bnQoKTsK
KyAgICAgICAgdWludDY0X3QgZGIgPSAoKnN0YXRpY19jYXN0PE1hcEVudHJ5KiBjb25zdCAqPihi
KSktPnZhbHVlLmNvdW50KCk7CiAgICAgICAgIHJldHVybiAoZGEgPCBkYikgLSAoZGEgPiBkYik7
CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoQ291bnRlZFNldC5oIGIv
U291cmNlL1dURi93dGYvSGFzaENvdW50ZWRTZXQuaAppbmRleCBkN2Q5ZTQzYTlhNTVhMWZkZmE4
ODNmNzg5N2ExMDc3OTlhNWNmZjc0Li40Zjk2YTM5OTUyZmY1MzBmZDYzOThlYmNhOGE3ZmRiNjIx
NGJhMWY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoQ291bnRlZFNldC5oCisrKyBi
L1NvdXJjZS9XVEYvd3RmL0hhc2hDb3VudGVkU2V0LmgKQEAgLTE0Niw3ICsxNDYsNyBAQCBuYW1l
c3BhY2UgV1RGIHsKICAgICBpbmxpbmUgdHlwZW5hbWUgSGFzaENvdW50ZWRTZXQ8VmFsdWUsIEhh
c2hGdW5jdGlvbnMsIFRyYWl0cz46OkFkZFJlc3VsdCBIYXNoQ291bnRlZFNldDxWYWx1ZSwgSGFz
aEZ1bmN0aW9ucywgVHJhaXRzPjo6YWRkKGNvbnN0IFZhbHVlVHlwZSAmdmFsdWUpCiAgICAgewog
ICAgICAgICBBZGRSZXN1bHQgcmVzdWx0ID0gbV9pbXBsLmFkZCh2YWx1ZSwgMCk7Ci0gICAgICAg
ICsrcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgICsrcmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCkBAIC0xNjIsMTEgKzE2
MiwxMSBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgaWYgKGl0ID09IGVuZCgpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIHVuc2lnbmVkIG9sZFZhbCA9IGl0LT5zZWNv
bmQ7CisgICAgICAgIHVuc2lnbmVkIG9sZFZhbCA9IGl0LT52YWx1ZTsKICAgICAgICAgQVNTRVJU
KG9sZFZhbCk7CiAgICAgICAgIHVuc2lnbmVkIG5ld1ZhbCA9IG9sZFZhbCAtIDE7CiAgICAgICAg
IGlmIChuZXdWYWwpIHsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQgPSBuZXdWYWw7CisgICAgICAg
ICAgICBpdC0+dmFsdWUgPSBuZXdWYWw7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIH0KIApAQCAtMjE4LDcgKzIxOCw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBpdGVy
YXRvciBpdCA9IGNvbGxlY3Rpb24uYmVnaW4oKTsKICAgICAgICAgaXRlcmF0b3IgZW5kID0gY29s
bGVjdGlvbi5lbmQoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaXQgIT0gZW5kOyAr
K2l0LCArK2kpCi0gICAgICAgICAgICB2ZWN0b3JbaV0gPSAoKml0KS5maXJzdDsKKyAgICAgICAg
ICAgIHZlY3RvcltpXSA9ICgqaXQpLmtleTsKICAgICB9CiAKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvSGFzaEl0ZXJhdG9ycy5oIGIvU291cmNlL1dURi93dGYvSGFzaEl0ZXJhdG9ycy5o
CmluZGV4IDZhZmEyZmE1N2U3MGFkMDMyMDg1MGYzNzMzZGNkNzk5NzE0YjAwODMuLjliZTRkZTMy
M2M1NjU4YjMzZjk1YjJmOTc3NmVjNWFlZTUyNzRiMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
d3RmL0hhc2hJdGVyYXRvcnMuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoSXRlcmF0b3JzLmgK
QEAgLTMzLDkgKzMzLDkgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
SGFzaFRhYmxlVHlwZSwgdHlwZW5hbWUgS2V5VHlwZSwgdHlwZW5hbWUgTWFwcGVkVHlwZT4gc3Ry
dWN0IEhhc2hUYWJsZUtleXNJdGVyYXRvcjsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFi
bGVUeXBlLCB0eXBlbmFtZSBLZXlUeXBlLCB0eXBlbmFtZSBNYXBwZWRUeXBlPiBzdHJ1Y3QgSGFz
aFRhYmxlVmFsdWVzSXRlcmF0b3I7CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGVU
eXBlLCB0eXBlbmFtZSBLZXlUeXBlLCB0eXBlbmFtZSBNYXBwZWRUeXBlPiBzdHJ1Y3QgSGFzaFRh
YmxlQ29uc3RJdGVyYXRvckFkYXB0ZXI8SGFzaFRhYmxlVHlwZSwgc3RkOjpwYWlyPEtleVR5cGUs
IE1hcHBlZFR5cGU+ID4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZVR5cGUsIHR5
cGVuYW1lIEtleVR5cGUsIHR5cGVuYW1lIE1hcHBlZFR5cGU+IHN0cnVjdCBIYXNoVGFibGVDb25z
dEl0ZXJhdG9yQWRhcHRlcjxIYXNoVGFibGVUeXBlLCBLZXlWYWx1ZVBhaXI8S2V5VHlwZSwgTWFw
cGVkVHlwZT4gPiB7CiAgICAgcHJpdmF0ZToKLSAgICAgICAgdHlwZWRlZiBzdGQ6OnBhaXI8S2V5
VHlwZSwgTWFwcGVkVHlwZT4gVmFsdWVUeXBlOworICAgICAgICB0eXBlZGVmIEtleVZhbHVlUGFp
cjxLZXlUeXBlLCBNYXBwZWRUeXBlPiBWYWx1ZVR5cGU7CiAgICAgcHVibGljOgogICAgICAgICB0
eXBlZGVmIEhhc2hUYWJsZUNvbnN0S2V5c0l0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleVR5cGUs
IE1hcHBlZFR5cGU+IEtleXM7CiAgICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlQ29uc3RWYWx1ZXNJ
dGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXlUeXBlLCBNYXBwZWRUeXBlPiBWYWx1ZXM7CkBAIC01
Niw5ICs1Niw5IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICB0eXBlbmFtZSBIYXNoVGFibGVU
eXBlOjpjb25zdF9pdGVyYXRvciBtX2ltcGw7CiAgICAgfTsKIAotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEhhc2hUYWJsZVR5cGUsIHR5cGVuYW1lIEtleVR5cGUsIHR5cGVuYW1lIE1hcHBlZFR5cGU+
IHN0cnVjdCBIYXNoVGFibGVJdGVyYXRvckFkYXB0ZXI8SGFzaFRhYmxlVHlwZSwgc3RkOjpwYWly
PEtleVR5cGUsIE1hcHBlZFR5cGU+ID4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJs
ZVR5cGUsIHR5cGVuYW1lIEtleVR5cGUsIHR5cGVuYW1lIE1hcHBlZFR5cGU+IHN0cnVjdCBIYXNo
VGFibGVJdGVyYXRvckFkYXB0ZXI8SGFzaFRhYmxlVHlwZSwgS2V5VmFsdWVQYWlyPEtleVR5cGUs
IE1hcHBlZFR5cGU+ID4gewogICAgIHByaXZhdGU6Ci0gICAgICAgIHR5cGVkZWYgc3RkOjpwYWly
PEtleVR5cGUsIE1hcHBlZFR5cGU+IFZhbHVlVHlwZTsKKyAgICAgICAgdHlwZWRlZiBLZXlWYWx1
ZVBhaXI8S2V5VHlwZSwgTWFwcGVkVHlwZT4gVmFsdWVUeXBlOwogICAgIHB1YmxpYzoKICAgICAg
ICAgdHlwZWRlZiBIYXNoVGFibGVLZXlzSXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5VHlwZSwg
TWFwcGVkVHlwZT4gS2V5czsKICAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVWYWx1ZXNJdGVyYXRv
cjxIYXNoVGFibGVUeXBlLCBLZXlUeXBlLCBNYXBwZWRUeXBlPiBWYWx1ZXM7CkBAIC04NiwxMiAr
ODYsMTIgQEAgbmFtZXNwYWNlIFdURiB7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFi
bGVUeXBlLCB0eXBlbmFtZSBLZXlUeXBlLCB0eXBlbmFtZSBNYXBwZWRUeXBlPiBzdHJ1Y3QgSGFz
aFRhYmxlQ29uc3RLZXlzSXRlcmF0b3IgewogICAgIHByaXZhdGU6Ci0gICAgICAgIHR5cGVkZWYg
SGFzaFRhYmxlQ29uc3RJdGVyYXRvckFkYXB0ZXI8SGFzaFRhYmxlVHlwZSwgc3RkOjpwYWlyPEtl
eVR5cGUsIE1hcHBlZFR5cGU+ID4gQ29uc3RJdGVyYXRvcjsKKyAgICAgICAgdHlwZWRlZiBIYXNo
VGFibGVDb25zdEl0ZXJhdG9yQWRhcHRlcjxIYXNoVGFibGVUeXBlLCBLZXlWYWx1ZVBhaXI8S2V5
VHlwZSwgTWFwcGVkVHlwZT4gPiBDb25zdEl0ZXJhdG9yOwogCiAgICAgcHVibGljOgogICAgICAg
ICBIYXNoVGFibGVDb25zdEtleXNJdGVyYXRvcihjb25zdCBDb25zdEl0ZXJhdG9yJiBpbXBsKSA6
IG1faW1wbChpbXBsKSB7fQogICAgICAgICAKLSAgICAgICAgY29uc3QgS2V5VHlwZSogZ2V0KCkg
Y29uc3QgeyByZXR1cm4gJihtX2ltcGwuZ2V0KCktPmZpcnN0KTsgfQorICAgICAgICBjb25zdCBL
ZXlUeXBlKiBnZXQoKSBjb25zdCB7IHJldHVybiAmKG1faW1wbC5nZXQoKS0+a2V5KTsgfQogICAg
ICAgICBjb25zdCBLZXlUeXBlJiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqZ2V0KCk7IH0K
ICAgICAgICAgY29uc3QgS2V5VHlwZSogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIGdldCgp
OyB9CiAKQEAgLTEwMywxMiArMTAzLDEyIEBAIG5hbWVzcGFjZSBXVEYgewogCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgSGFzaFRhYmxlVHlwZSwgdHlwZW5hbWUgS2V5VHlwZSwgdHlwZW5hbWUgTWFw
cGVkVHlwZT4gc3RydWN0IEhhc2hUYWJsZUNvbnN0VmFsdWVzSXRlcmF0b3IgewogICAgIHByaXZh
dGU6Ci0gICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlQ29uc3RJdGVyYXRvckFkYXB0ZXI8SGFzaFRh
YmxlVHlwZSwgc3RkOjpwYWlyPEtleVR5cGUsIE1hcHBlZFR5cGU+ID4gQ29uc3RJdGVyYXRvcjsK
KyAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVDb25zdEl0ZXJhdG9yQWRhcHRlcjxIYXNoVGFibGVU
eXBlLCBLZXlWYWx1ZVBhaXI8S2V5VHlwZSwgTWFwcGVkVHlwZT4gPiBDb25zdEl0ZXJhdG9yOwog
CiAgICAgcHVibGljOgogICAgICAgICBIYXNoVGFibGVDb25zdFZhbHVlc0l0ZXJhdG9yKGNvbnN0
IENvbnN0SXRlcmF0b3ImIGltcGwpIDogbV9pbXBsKGltcGwpIHt9CiAgICAgICAgIAotICAgICAg
ICBjb25zdCBNYXBwZWRUeXBlKiBnZXQoKSBjb25zdCB7IHJldHVybiAmKG1faW1wbC5nZXQoKS0+
c2Vjb25kKTsgfQorICAgICAgICBjb25zdCBNYXBwZWRUeXBlKiBnZXQoKSBjb25zdCB7IHJldHVy
biAmKG1faW1wbC5nZXQoKS0+dmFsdWUpOyB9CiAgICAgICAgIGNvbnN0IE1hcHBlZFR5cGUmIG9w
ZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICpnZXQoKTsgfQogICAgICAgICBjb25zdCBNYXBwZWRU
eXBlKiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gZ2V0KCk7IH0KIApAQCAtMTIwLDEzICsx
MjAsMTMgQEAgbmFtZXNwYWNlIFdURiB7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFi
bGVUeXBlLCB0eXBlbmFtZSBLZXlUeXBlLCB0eXBlbmFtZSBNYXBwZWRUeXBlPiBzdHJ1Y3QgSGFz
aFRhYmxlS2V5c0l0ZXJhdG9yIHsKICAgICBwcml2YXRlOgotICAgICAgICB0eXBlZGVmIEhhc2hU
YWJsZUl0ZXJhdG9yQWRhcHRlcjxIYXNoVGFibGVUeXBlLCBzdGQ6OnBhaXI8S2V5VHlwZSwgTWFw
cGVkVHlwZT4gPiBJdGVyYXRvcjsKLSAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVDb25zdEl0ZXJh
dG9yQWRhcHRlcjxIYXNoVGFibGVUeXBlLCBzdGQ6OnBhaXI8S2V5VHlwZSwgTWFwcGVkVHlwZT4g
PiBDb25zdEl0ZXJhdG9yOworICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUl0ZXJhdG9yQWRhcHRl
cjxIYXNoVGFibGVUeXBlLCBLZXlWYWx1ZVBhaXI8S2V5VHlwZSwgTWFwcGVkVHlwZT4gPiBJdGVy
YXRvcjsKKyAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVDb25zdEl0ZXJhdG9yQWRhcHRlcjxIYXNo
VGFibGVUeXBlLCBLZXlWYWx1ZVBhaXI8S2V5VHlwZSwgTWFwcGVkVHlwZT4gPiBDb25zdEl0ZXJh
dG9yOwogCiAgICAgcHVibGljOgogICAgICAgICBIYXNoVGFibGVLZXlzSXRlcmF0b3IoY29uc3Qg
SXRlcmF0b3ImIGltcGwpIDogbV9pbXBsKGltcGwpIHt9CiAgICAgICAgIAotICAgICAgICBLZXlU
eXBlKiBnZXQoKSBjb25zdCB7IHJldHVybiAmKG1faW1wbC5nZXQoKS0+Zmlyc3QpOyB9CisgICAg
ICAgIEtleVR5cGUqIGdldCgpIGNvbnN0IHsgcmV0dXJuICYobV9pbXBsLmdldCgpLT5rZXkpOyB9
CiAgICAgICAgIEtleVR5cGUmIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICpnZXQoKTsgfQog
ICAgICAgICBLZXlUeXBlKiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gZ2V0KCk7IH0KIApA
QCAtMTQzLDEzICsxNDMsMTMgQEAgbmFtZXNwYWNlIFdURiB7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBIYXNoVGFibGVUeXBlLCB0eXBlbmFtZSBLZXlUeXBlLCB0eXBlbmFtZSBNYXBwZWRUeXBl
PiBzdHJ1Y3QgSGFzaFRhYmxlVmFsdWVzSXRlcmF0b3IgewogICAgIHByaXZhdGU6Ci0gICAgICAg
IHR5cGVkZWYgSGFzaFRhYmxlSXRlcmF0b3JBZGFwdGVyPEhhc2hUYWJsZVR5cGUsIHN0ZDo6cGFp
cjxLZXlUeXBlLCBNYXBwZWRUeXBlPiA+IEl0ZXJhdG9yOwotICAgICAgICB0eXBlZGVmIEhhc2hU
YWJsZUNvbnN0SXRlcmF0b3JBZGFwdGVyPEhhc2hUYWJsZVR5cGUsIHN0ZDo6cGFpcjxLZXlUeXBl
LCBNYXBwZWRUeXBlPiA+IENvbnN0SXRlcmF0b3I7CisgICAgICAgIHR5cGVkZWYgSGFzaFRhYmxl
SXRlcmF0b3JBZGFwdGVyPEhhc2hUYWJsZVR5cGUsIEtleVZhbHVlUGFpcjxLZXlUeXBlLCBNYXBw
ZWRUeXBlPiA+IEl0ZXJhdG9yOworICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUNvbnN0SXRlcmF0
b3JBZGFwdGVyPEhhc2hUYWJsZVR5cGUsIEtleVZhbHVlUGFpcjxLZXlUeXBlLCBNYXBwZWRUeXBl
PiA+IENvbnN0SXRlcmF0b3I7CiAKICAgICBwdWJsaWM6CiAgICAgICAgIEhhc2hUYWJsZVZhbHVl
c0l0ZXJhdG9yKGNvbnN0IEl0ZXJhdG9yJiBpbXBsKSA6IG1faW1wbChpbXBsKSB7fQogICAgICAg
ICAKLSAgICAgICAgTWFwcGVkVHlwZSogZ2V0KCkgY29uc3QgeyByZXR1cm4gJihtX2ltcGwuZ2V0
KCktPnNlY29uZCk7IH0KKyAgICAgICAgTWFwcGVkVHlwZSogZ2V0KCkgY29uc3QgeyByZXR1cm4g
JihtX2ltcGwuZ2V0KCktPnZhbHVlKTsgfQogICAgICAgICBNYXBwZWRUeXBlJiBvcGVyYXRvcioo
KSBjb25zdCB7IHJldHVybiAqZ2V0KCk7IH0KICAgICAgICAgTWFwcGVkVHlwZSogb3BlcmF0b3It
PigpIGNvbnN0IHsgcmV0dXJuIGdldCgpOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L0hhc2hNYXAuaCBiL1NvdXJjZS9XVEYvd3RmL0hhc2hNYXAuaAppbmRleCAyNmE5ZDljNWNiMTU4
ZDNhNWZlYjcyZWM1Y2M4NTBhOGU2MDE2M2RkLi5mYTU2M2VhNjNmNjAzYWYyMGE2MmM0NjQ3MGRj
NjYzNTJlYWE4Y2RlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoTWFwLmgKKysrIGIv
U291cmNlL1dURi93dGYvSGFzaE1hcC5oCkBAIC0yNSw4ICsyNSw2IEBACiAKIG5hbWVzcGFjZSBX
VEYgewogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgUGFpclR5cGU+IHN0cnVjdCBQYWlyRmlyc3RF
eHRyYWN0b3I7Ci0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgUmVmZXJlbmNlVHlw
ZU1ha2VyIHsKICAgICAgICAgdHlwZWRlZiBUJiBSZWZlcmVuY2VUeXBlOwogICAgIH07CkBAIC0z
NCw2ICszMiwxMCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgdHlwZWRlZiBUJiBSZWZlcmVu
Y2VUeXBlOwogICAgIH07CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgS2V5VmFs
dWVQYWlyS2V5RXh0cmFjdG9yIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IHR5cGVuYW1lIFQ6Oktl
eVR5cGUmIGV4dHJhY3QoY29uc3QgVCYgcCkgeyByZXR1cm4gcC5rZXk7IH0KKyAgICB9OworCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1l
IEhhc2hBcmcgPSB0eXBlbmFtZSBEZWZhdWx0SGFzaDxLZXlBcmc+OjpIYXNoLAogICAgICAgICB0
eXBlbmFtZSBLZXlUcmFpdHNBcmcgPSBIYXNoVHJhaXRzPEtleUFyZz4sIHR5cGVuYW1lIE1hcHBl
ZFRyYWl0c0FyZyA9IEhhc2hUcmFpdHM8TWFwcGVkQXJnPiA+CiAgICAgY2xhc3MgSGFzaE1hcCB7
CkBAIC00MSw3ICs0Myw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgIHByaXZhdGU6CiAgICAgICAg
IHR5cGVkZWYgS2V5VHJhaXRzQXJnIEtleVRyYWl0czsKICAgICAgICAgdHlwZWRlZiBNYXBwZWRU
cmFpdHNBcmcgTWFwcGVkVHJhaXRzOwotICAgICAgICB0eXBlZGVmIFBhaXJIYXNoVHJhaXRzPEtl
eVRyYWl0cywgTWFwcGVkVHJhaXRzPiBWYWx1ZVRyYWl0czsKKyAgICAgICAgdHlwZWRlZiBLZXlW
YWx1ZVBhaXJUcmFpdHM8S2V5VHJhaXRzLCBNYXBwZWRUcmFpdHM+IFZhbHVlVHJhaXRzOwogCiAg
ICAgcHVibGljOgogICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIEtleVRyYWl0czo6VHJhaXRUeXBl
IEtleVR5cGU7CkBAIC01Nyw3ICs1OSw3IEBAIG5hbWVzcGFjZSBXVEYgewogCiAgICAgICAgIHR5
cGVkZWYgSGFzaEFyZyBIYXNoRnVuY3Rpb25zOwogCi0gICAgICAgIHR5cGVkZWYgSGFzaFRhYmxl
PEtleVR5cGUsIFZhbHVlVHlwZSwgUGFpckZpcnN0RXh0cmFjdG9yPFZhbHVlVHlwZT4sCisgICAg
ICAgIHR5cGVkZWYgSGFzaFRhYmxlPEtleVR5cGUsIFZhbHVlVHlwZSwgS2V5VmFsdWVQYWlyS2V5
RXh0cmFjdG9yPFZhbHVlVHlwZT4sCiAgICAgICAgICAgICBIYXNoRnVuY3Rpb25zLCBWYWx1ZVRy
YWl0cywgS2V5VHJhaXRzPiBIYXNoVGFibGVUeXBlOwogCiAgICAgICAgIGNsYXNzIEhhc2hNYXBL
ZXlzUHJveHk7CkBAIC0yMDMsMTggKzIwNSwxNCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAg
SGFzaFRhYmxlVHlwZSBtX2ltcGw7CiAgICAgfTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFBh
aXJUeXBlPiBzdHJ1Y3QgUGFpckZpcnN0RXh0cmFjdG9yIHsKLSAgICAgICAgc3RhdGljIGNvbnN0
IHR5cGVuYW1lIFBhaXJUeXBlOjpmaXJzdF90eXBlJiBleHRyYWN0KGNvbnN0IFBhaXJUeXBlJiBw
KSB7IHJldHVybiBwLmZpcnN0OyB9Ci0gICAgfTsKLQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZh
bHVlVHJhaXRzLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zPgogICAgIHN0cnVjdCBIYXNoTWFwVHJh
bnNsYXRvciB7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyB1bnNpZ25lZCBo
YXNoKGNvbnN0IFQmIGtleSkgeyByZXR1cm4gSGFzaEZ1bmN0aW9uczo6aGFzaChrZXkpOyB9CiAg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IHN0YXRpYyBib29sIGVxdWFs
KGNvbnN0IFQmIGEsIGNvbnN0IFUmIGIpIHsgcmV0dXJuIEhhc2hGdW5jdGlvbnM6OmVxdWFsKGEs
IGIpOyB9CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1l
IFY+IHN0YXRpYyB2b2lkIHRyYW5zbGF0ZShUJiBsb2NhdGlvbiwgY29uc3QgVSYga2V5LCBjb25z
dCBWJiBtYXBwZWQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGxvY2F0aW9uLmZpcnN0ID0ga2V5
OwotICAgICAgICAgICAgVmFsdWVUcmFpdHM6OlNlY29uZFRyYWl0czo6c3RvcmUobWFwcGVkLCBs
b2NhdGlvbi5zZWNvbmQpOworICAgICAgICAgICAgbG9jYXRpb24ua2V5ID0ga2V5OworICAgICAg
ICAgICAgVmFsdWVUcmFpdHM6Ok1hcHBlZFRyYWl0czo6c3RvcmUobWFwcGVkLCBsb2NhdGlvbi52
YWx1ZSk7CiAgICAgICAgIH0KICAgICB9OwogCkBAIC0yMjQsOCArMjIyLDggQEAgbmFtZXNwYWNl
IFdURiB7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IHN0YXRpYyBi
b29sIGVxdWFsKGNvbnN0IFQmIGEsIGNvbnN0IFUmIGIpIHsgcmV0dXJuIFRyYW5zbGF0b3I6OmVx
dWFsKGEsIGIpOyB9CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5
cGVuYW1lIFY+IHN0YXRpYyB2b2lkIHRyYW5zbGF0ZShUJiBsb2NhdGlvbiwgY29uc3QgVSYga2V5
LCBjb25zdCBWJiBtYXBwZWQsIHVuc2lnbmVkIGhhc2hDb2RlKQogICAgICAgICB7Ci0gICAgICAg
ICAgICBUcmFuc2xhdG9yOjp0cmFuc2xhdGUobG9jYXRpb24uZmlyc3QsIGtleSwgaGFzaENvZGUp
OwotICAgICAgICAgICAgVmFsdWVUcmFpdHM6OlNlY29uZFRyYWl0czo6c3RvcmUobWFwcGVkLCBs
b2NhdGlvbi5zZWNvbmQpOworICAgICAgICAgICAgVHJhbnNsYXRvcjo6dHJhbnNsYXRlKGxvY2F0
aW9uLmtleSwga2V5LCBoYXNoQ29kZSk7CisgICAgICAgICAgICBWYWx1ZVRyYWl0czo6TWFwcGVk
VHJhaXRzOjpzdG9yZShtYXBwZWQsIGxvY2F0aW9uLnZhbHVlKTsKICAgICAgICAgfQogICAgIH07
CiAKQEAgLTMzMyw3ICszMzEsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgQWRkUmVzdWx0
IHJlc3VsdCA9IGlubGluZUFkZChrZXksIG1hcHBlZCk7CiAgICAgICAgIGlmICghcmVzdWx0Lmlz
TmV3RW50cnkpIHsKICAgICAgICAgICAgIC8vIFRoZSBpbmxpbmVBZGQgY2FsbCBhYm92ZSBmb3Vu
ZCBhbiBleGlzdGluZyBoYXNoIHRhYmxlIGVudHJ5OyB3ZSBuZWVkIHRvIHNldCB0aGUgbWFwcGVk
IHZhbHVlLgotICAgICAgICAgICAgTWFwcGVkVHJhaXRzOjpzdG9yZShtYXBwZWQsIHJlc3VsdC5p
dGVyYXRvci0+c2Vjb25kKTsKKyAgICAgICAgICAgIE1hcHBlZFRyYWl0czo6c3RvcmUobWFwcGVk
LCByZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgIH0KQEAgLTM2MCw3ICszNTgsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAg
VmFsdWVUeXBlKiBlbnRyeSA9IGNvbnN0X2Nhc3Q8SGFzaFRhYmxlVHlwZSY+KG1faW1wbCkubG9v
a3VwKGtleSk7CiAgICAgICAgIGlmICghZW50cnkpCiAgICAgICAgICAgICByZXR1cm4gTWFwcGVk
VHJhaXRzOjpwZWVrKE1hcHBlZFRyYWl0czo6ZW1wdHlWYWx1ZSgpKTsKLSAgICAgICAgcmV0dXJu
IE1hcHBlZFRyYWl0czo6cGVlayhlbnRyeS0+c2Vjb25kKTsKKyAgICAgICAgcmV0dXJuIE1hcHBl
ZFRyYWl0czo6cGVlayhlbnRyeS0+dmFsdWUpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+CkBA
IC0zOTEsNyArMzg5LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIGl0ZXJhdG9yIGl0ID0g
ZmluZChrZXkpOwogICAgICAgICBpZiAoaXQgPT0gZW5kKCkpCiAgICAgICAgICAgICByZXR1cm4g
TWFwcGVkVHJhaXRzOjpwYXNzT3V0KE1hcHBlZFRyYWl0czo6ZW1wdHlWYWx1ZSgpKTsKLSAgICAg
ICAgTWFwcGVkUGFzc091dFR5cGUgcmVzdWx0ID0gTWFwcGVkVHJhaXRzOjpwYXNzT3V0KGl0LT5z
ZWNvbmQpOworICAgICAgICBNYXBwZWRQYXNzT3V0VHlwZSByZXN1bHQgPSBNYXBwZWRUcmFpdHM6
OnBhc3NPdXQoaXQtPnZhbHVlKTsKICAgICAgICAgcmVtb3ZlKGl0KTsKICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKICAgICB9CkBAIC00MTMsOCArNDExLDggQEAgbmFtZXNwYWNlIFdURiB7CiAgICAg
ICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCA9IGEuZW5kKCk7CiAgICAgICAgIGNvbnN0X2l0ZXJhdG9y
IG5vdEZvdW5kID0gYi5lbmQoKTsKICAgICAgICAgZm9yIChjb25zdF9pdGVyYXRvciBpdCA9IGEu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBjb25zdF9pdGVyYXRvciBi
UG9zID0gYi5maW5kKGl0LT5maXJzdCk7Ci0gICAgICAgICAgICBpZiAoYlBvcyA9PSBub3RGb3Vu
ZCB8fCBpdC0+c2Vjb25kICE9IGJQb3MtPnNlY29uZCkKKyAgICAgICAgICAgIGNvbnN0X2l0ZXJh
dG9yIGJQb3MgPSBiLmZpbmQoaXQtPmtleSk7CisgICAgICAgICAgICBpZiAoYlBvcyA9PSBub3RG
b3VuZCB8fCBpdC0+dmFsdWUgIT0gYlBvcy0+dmFsdWUpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICB9CiAKQEAgLTQzMyw3ICs0MzEsNyBAQCBuYW1lc3BhY2UgV1RGIHsK
ICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBIYXNoVGFibGVUeXBlOjpjb25zdF9pdGVyYXRvciBp
dGVyYXRvcjsKICAgICAgICAgaXRlcmF0b3IgZW5kID0gY29sbGVjdGlvbi5lbmQoKTsKICAgICAg
ICAgZm9yIChpdGVyYXRvciBpdCA9IGNvbGxlY3Rpb24uYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KQotICAgICAgICAgICAgZGVsZXRlIGl0LT5zZWNvbmQ7CisgICAgICAgICAgICBkZWxldGUgaXQt
PnZhbHVlOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5
cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+CkBAIC00NDgsNyArNDQ2LDcgQEAgbmFt
ZXNwYWNlIFdURiB7CiAgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgSGFzaFRhYmxlVHlwZTo6Y29u
c3RfaXRlcmF0b3IgaXRlcmF0b3I7CiAgICAgICAgIGl0ZXJhdG9yIGVuZCA9IGNvbGxlY3Rpb24u
ZW5kKCk7CiAgICAgICAgIGZvciAoaXRlcmF0b3IgaXQgPSBjb2xsZWN0aW9uLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIGRlbGV0ZSBpdC0+Zmlyc3Q7CisgICAgICAgICAg
ICBkZWxldGUgaXQtPmtleTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dURi93dGYvSGFzaFRhYmxlLmggYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaApp
bmRleCAwNmZlZWQ2MGUyY2I5ZDg1NDdlZWFhMDUyYjkxOTg5NjczOWE0YmIzLi4yNzNiNzQ0OWMw
YjBmMDAwYTkwMmJmMDVmMjdlNTAwYTNjMGIzYTE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi9IYXNoVGFibGUuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaApAQCAtMjg1LDYg
KzI4NSwxMiBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgc3dhcChhLnNlY29uZCwgYi5zZWNv
bmQpOwogICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGlu
ZSB2b2lkIGhhc2hUYWJsZVN3YXAoS2V5VmFsdWVQYWlyPFQsIFU+JiBhLCBLZXlWYWx1ZVBhaXI8
VCwgVT4mIGIpCisgICAgeworICAgICAgICBzd2FwKGEua2V5LCBiLmtleSk7CisgICAgICAgIHN3
YXAoYS52YWx1ZSwgYi52YWx1ZSk7CisgICAgfQorCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwg
Ym9vbCB1c2VTd2FwPiBzdHJ1Y3QgTW92ZXI7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Ry
dWN0IE1vdmVyPFQsIHRydWU+IHsgc3RhdGljIHZvaWQgbW92ZShUJiBmcm9tLCBUJiB0bykgeyBo
YXNoVGFibGVTd2FwKGZyb20sIHRvKTsgfSB9OwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBNb3ZlcjxULCBmYWxzZT4geyBzdGF0aWMgdm9pZCBtb3ZlKFQmIGZyb20sIFQmIHRvKSB7
IHRvID0gZnJvbTsgfSB9OwpAQCAtMTA4Miw3ICsxMDg4LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAg
ICAgICAgICAgICBBU1NFUlQoZW50cnkgPT0gaXQubV9wb3NpdGlvbik7CiAgICAgICAgICAgICAr
K2NvdW50OwogCi0gICAgICAgICAgICBWYWx1ZUNoZWNrPEtleT46OmNoZWNrQ29uc2lzdGVuY3ko
aXQtPmZpcnN0KTsKKyAgICAgICAgICAgIFZhbHVlQ2hlY2s8S2V5Pjo6Y2hlY2tDb25zaXN0ZW5j
eShpdC0+a2V5KTsKICAgICAgICAgfQogCiAgICAgICAgIEFTU0VSVChjb3VudCA9PSBtX2tleUNv
dW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0hhc2hUcmFpdHMuaCBiL1NvdXJjZS9X
VEYvd3RmL0hhc2hUcmFpdHMuaAppbmRleCBmZGYxYWI5NDFmNmQyOWI1YzI3NWJhZjNlNmI4MDdj
ZDUwNjQzZGZjLi4xNWYyMjM0YmQzMWM4ZmM3ZDhhOGE5YWZhYWI2YTZkYWVjNWVkM2EwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoVHJhaXRzLmgKKysrIGIvU291cmNlL1dURi93dGYv
SGFzaFRyYWl0cy5oCkBAIC0xODksNiArMTg5LDQxIEBAIG5hbWVzcGFjZSBXVEYgewogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEZpcnN0LCB0eXBlbmFtZSBTZWNvbmQ+CiAgICAgc3RydWN0IEhhc2hU
cmFpdHM8cGFpcjxGaXJzdCwgU2Vjb25kPiA+IDogcHVibGljIFBhaXJIYXNoVHJhaXRzPEhhc2hU
cmFpdHM8Rmlyc3Q+LCBIYXNoVHJhaXRzPFNlY29uZD4gPiB7IH07CiAKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBLZXlUeXBlQXJnLCB0eXBlbmFtZSBWYWx1ZVR5cGVBcmc+CisgICAgc3RydWN0IEtl
eVZhbHVlUGFpciB7CisgICAgICAgIHR5cGVkZWYgS2V5VHlwZUFyZyBLZXlUeXBlOworCisgICAg
ICAgIEtleVZhbHVlUGFpcigpIDoga2V5KCksIHZhbHVlKCkgeyB9CisgICAgICAgIEtleVZhbHVl
UGFpcihjb25zdCBLZXlUeXBlQXJnJiBrZXksIGNvbnN0IFZhbHVlVHlwZUFyZyYgdmFsdWUpIDog
a2V5KGtleSksIHZhbHVlKHZhbHVlKSB7IH0KKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
T3RoZXJLZXlUeXBlLCB0eXBlbmFtZSBPdGhlck1hcHBlZFR5cGU+CisgICAgICAgIEtleVZhbHVl
UGFpcihjb25zdCBLZXlWYWx1ZVBhaXI8T3RoZXJLZXlUeXBlLCBPdGhlck1hcHBlZFR5cGU+JiBv
dGhlcikgOiBrZXkob3RoZXIua2V5KSwgdmFsdWUob3RoZXIudmFsdWUpIHsgfQorCisgICAgICAg
IEtleVR5cGVBcmcga2V5OworICAgICAgICBWYWx1ZVR5cGVBcmcgdmFsdWU7CisgICAgfTsKKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRz
QXJnPgorICAgIHN0cnVjdCBLZXlWYWx1ZVBhaXJUcmFpdHMgOiBHZW5lcmljSGFzaFRyYWl0czxL
ZXlWYWx1ZVBhaXI8dHlwZW5hbWUgS2V5VHJhaXRzQXJnOjpUcmFpdFR5cGUsIHR5cGVuYW1lIE1h
cHBlZFRyYWl0c0FyZzo6VHJhaXRUeXBlPiA+IHsKKyAgICAgICAgdHlwZWRlZiBLZXlUcmFpdHNB
cmcgS2V5VHJhaXRzOworICAgICAgICB0eXBlZGVmIE1hcHBlZFRyYWl0c0FyZyBNYXBwZWRUcmFp
dHM7CisgICAgICAgIHR5cGVkZWYgS2V5VmFsdWVQYWlyPHR5cGVuYW1lIEtleVRyYWl0czo6VHJh
aXRUeXBlLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHM6OlRyYWl0VHlwZT4gVHJhaXRUeXBlOworICAg
ICAgICB0eXBlZGVmIEtleVZhbHVlUGFpcjx0eXBlbmFtZSBLZXlUcmFpdHM6OkVtcHR5VmFsdWVU
eXBlLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHM6OkVtcHR5VmFsdWVUeXBlPiBFbXB0eVZhbHVlVHlw
ZTsKKworICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gS2V5VHJh
aXRzOjplbXB0eVZhbHVlSXNaZXJvICYmIE1hcHBlZFRyYWl0czo6ZW1wdHlWYWx1ZUlzWmVybzsK
KyAgICAgICAgc3RhdGljIEVtcHR5VmFsdWVUeXBlIGVtcHR5VmFsdWUoKSB7IHJldHVybiBLZXlW
YWx1ZVBhaXI8dHlwZW5hbWUgS2V5VHJhaXRzOjpFbXB0eVZhbHVlVHlwZSwgdHlwZW5hbWUgTWFw
cGVkVHJhaXRzOjpFbXB0eVZhbHVlVHlwZT4oS2V5VHJhaXRzOjplbXB0eVZhbHVlKCksIE1hcHBl
ZFRyYWl0czo6ZW1wdHlWYWx1ZSgpKTsgfQorCisgICAgICAgIHN0YXRpYyBjb25zdCBib29sIG5l
ZWRzRGVzdHJ1Y3Rpb24gPSBLZXlUcmFpdHM6Om5lZWRzRGVzdHJ1Y3Rpb24gfHwgTWFwcGVkVHJh
aXRzOjpuZWVkc0Rlc3RydWN0aW9uOworCisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluaW11
bVRhYmxlU2l6ZSA9IEtleVRyYWl0czo6bWluaW11bVRhYmxlU2l6ZTsKKworICAgICAgICBzdGF0
aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoVHJhaXRUeXBlJiBzbG90KSB7IEtleVRyYWl0
czo6Y29uc3RydWN0RGVsZXRlZFZhbHVlKHNsb3Qua2V5KTsgfQorICAgICAgICBzdGF0aWMgYm9v
bCBpc0RlbGV0ZWRWYWx1ZShjb25zdCBUcmFpdFR5cGUmIHZhbHVlKSB7IHJldHVybiBLZXlUcmFp
dHM6OmlzRGVsZXRlZFZhbHVlKHZhbHVlLmtleSk7IH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBNYXBwZWQ+CisgICAgc3RydWN0IEhhc2hUcmFpdHM8S2V5
VmFsdWVQYWlyPEtleSwgTWFwcGVkPiA+IDogcHVibGljIEtleVZhbHVlUGFpclRyYWl0czxIYXNo
VHJhaXRzPEtleT4sIEhhc2hUcmFpdHM8TWFwcGVkPiA+IHsgfTsKKwogfSAvLyBuYW1lc3BhY2Ug
V1RGCiAKIHVzaW5nIFdURjo6SGFzaFRyYWl0czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L01ldGFBbGxvY2F0b3IuY3BwIGIvU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvci5jcHAKaW5k
ZXggMjAyMzdmMjE4MWRmNDk1Yjg5NjRlNTMxODg3MmU1ZjNlMTgzOTc1MC4uODZlOTM3YWEzZTAx
ZjdmZDMzM2Y2NDhjOWI4ZjAxY2JjY2RiNjU0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYv
TWV0YUFsbG9jYXRvci5jcHAKKysrIGIvU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvci5jcHAK
QEAgLTMwNCw5ICszMDQsOSBAQCB2b2lkIE1ldGFBbGxvY2F0b3I6OmFkZEZyZWVTcGFjZSh2b2lk
KiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVzKQogICAgICAgICAvLyBXZSBoYXZlIHNvbWV0aGlu
ZyB3ZSBjYW4gY29hbGVzY2Ugd2l0aCBvbiB0aGUgbGVmdC4gUmVtb3ZlIGl0IGZyb20gdGhlIHRy
ZWUsIGFuZAogICAgICAgICAvLyByZW1vdmUgaXRzIGVuZCBmcm9tIHRoZSBlbmQgYWRkcmVzcyBt
YXAuCiAgICAgICAgIAotICAgICAgICBBU1NFUlQocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVp
bnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGxlZnROZWlnaGJvci0+c2Vjb25kLT5tX3N0YXJ0KSAr
IGxlZnROZWlnaGJvci0+c2Vjb25kLT5tX3NpemVJbkJ5dGVzKSA9PSBsZWZ0TmVpZ2hib3ItPmZp
cnN0KTsKKyAgICAgICAgQVNTRVJUKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0
X2Nhc3Q8dWludHB0cl90PihsZWZ0TmVpZ2hib3ItPnZhbHVlLT5tX3N0YXJ0KSArIGxlZnROZWln
aGJvci0+dmFsdWUtPm1fc2l6ZUluQnl0ZXMpID09IGxlZnROZWlnaGJvci0+a2V5KTsKICAgICAg
ICAgCi0gICAgICAgIEZyZWVTcGFjZU5vZGUqIGxlZnROb2RlID0gbGVmdE5laWdoYm9yLT5zZWNv
bmQ7CisgICAgICAgIEZyZWVTcGFjZU5vZGUqIGxlZnROb2RlID0gbGVmdE5laWdoYm9yLT52YWx1
ZTsKICAgICAgICAgCiAgICAgICAgIHZvaWQqIGxlZnRTdGFydCA9IGxlZnROb2RlLT5tX3N0YXJ0
OwogICAgICAgICBzaXplX3QgbGVmdFNpemUgPSBsZWZ0Tm9kZS0+bV9zaXplSW5CeXRlczsKQEAg
LTMyMiwxMCArMzIyLDEwIEBAIHZvaWQgTWV0YUFsbG9jYXRvcjo6YWRkRnJlZVNwYWNlKHZvaWQq
IHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMpCiAgICAgICAgICAgICAvLyBGcmVlaW5nIHNvbWV0
aGluZyBpbiB0aGUgbWlkZGxlIG9mIGZyZWUgYmxvY2tzLiBDb2FsZXNjZSBib3RoIGxlZnQgYW5k
CiAgICAgICAgICAgICAvLyByaWdodCwgd2hpbHN0IHJlbW92aW5nIHRoZSByaWdodCBuZWlnaGJv
ciBmcm9tIHRoZSBtYXBzLgogICAgICAgICAgICAgCi0gICAgICAgICAgICBBU1NFUlQocmlnaHRO
ZWlnaGJvci0+c2Vjb25kLT5tX3N0YXJ0ID09IHJpZ2h0TmVpZ2hib3ItPmZpcnN0KTsKKyAgICAg
ICAgICAgIEFTU0VSVChyaWdodE5laWdoYm9yLT52YWx1ZS0+bV9zdGFydCA9PSByaWdodE5laWdo
Ym9yLT5rZXkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBGcmVlU3BhY2VOb2RlKiByaWdo
dE5vZGUgPSByaWdodE5laWdoYm9yLT5zZWNvbmQ7Ci0gICAgICAgICAgICB2b2lkKiByaWdodFN0
YXJ0ID0gcmlnaHROZWlnaGJvci0+Zmlyc3Q7CisgICAgICAgICAgICBGcmVlU3BhY2VOb2RlKiBy
aWdodE5vZGUgPSByaWdodE5laWdoYm9yLT52YWx1ZTsKKyAgICAgICAgICAgIHZvaWQqIHJpZ2h0
U3RhcnQgPSByaWdodE5laWdoYm9yLT5rZXk7CiAgICAgICAgICAgICBzaXplX3QgcmlnaHRTaXpl
ID0gcmlnaHROb2RlLT5tX3NpemVJbkJ5dGVzOwogICAgICAgICAgICAgdm9pZCogcmlnaHRFbmQg
PSByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocmln
aHRTdGFydCkgKyByaWdodFNpemUpOwogICAgICAgICAgICAgCkBAIC0zNTIsOCArMzUyLDggQEAg
dm9pZCBNZXRhQWxsb2NhdG9yOjphZGRGcmVlU3BhY2Uodm9pZCogc3RhcnQsIHNpemVfdCBzaXpl
SW5CeXRlcykKICAgICAgICAgLy8gQ2Fubm90IGNvYWxlc2NlIHdpdGggbGVmdDsgdHJ5IHRvIHNl
ZSBpZiB3ZSBjYW4gY29hbGVzY2Ugd2l0aCByaWdodC4KICAgICAgICAgCiAgICAgICAgIGlmIChy
aWdodE5laWdoYm9yICE9IG1fZnJlZVNwYWNlU3RhcnRBZGRyZXNzTWFwLmVuZCgpKSB7Ci0gICAg
ICAgICAgICBGcmVlU3BhY2VOb2RlKiByaWdodE5vZGUgPSByaWdodE5laWdoYm9yLT5zZWNvbmQ7
Ci0gICAgICAgICAgICB2b2lkKiByaWdodFN0YXJ0ID0gcmlnaHROZWlnaGJvci0+Zmlyc3Q7Cisg
ICAgICAgICAgICBGcmVlU3BhY2VOb2RlKiByaWdodE5vZGUgPSByaWdodE5laWdoYm9yLT52YWx1
ZTsKKyAgICAgICAgICAgIHZvaWQqIHJpZ2h0U3RhcnQgPSByaWdodE5laWdoYm9yLT5rZXk7CiAg
ICAgICAgICAgICBzaXplX3QgcmlnaHRTaXplID0gcmlnaHROb2RlLT5tX3NpemVJbkJ5dGVzOwog
ICAgICAgICAgICAgdm9pZCogcmlnaHRFbmQgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWlu
dGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocmlnaHRTdGFydCkgKyByaWdodFNpemUpOwogICAgICAg
ICAgICAgCkBAIC0zOTUsNyArMzk1LDcgQEAgdm9pZCBNZXRhQWxsb2NhdG9yOjppbmNyZW1lbnRQ
YWdlT2NjdXBhbmN5KHZvaWQqIGFkZHJlc3MsIHNpemVfdCBzaXplSW5CeXRlcykKICAgICAgICAg
ICAgIG1fYnl0ZXNDb21taXR0ZWQgKz0gbV9wYWdlU2l6ZTsKICAgICAgICAgICAgIG5vdGlmeU5l
ZWRQYWdlKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHBhZ2UgPDwgbV9sb2dQYWdlU2l6ZSkpOwog
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGl0ZXItPnNlY29uZCsrOworICAgICAgICAgICAg
aXRlci0+dmFsdWUrKzsKICAgICB9CiB9CiAKQEAgLTQwNyw3ICs0MDcsNyBAQCB2b2lkIE1ldGFB
bGxvY2F0b3I6OmRlY3JlbWVudFBhZ2VPY2N1cGFuY3kodm9pZCogYWRkcmVzcywgc2l6ZV90IHNp
emVJbkJ5dGVzKQogICAgIGZvciAodWludHB0cl90IHBhZ2UgPSBmaXJzdFBhZ2U7IHBhZ2UgPD0g
bGFzdFBhZ2U7ICsrcGFnZSkgewogICAgICAgICBIYXNoTWFwPHVpbnRwdHJfdCwgc2l6ZV90Pjo6
aXRlcmF0b3IgaXRlciA9IG1fcGFnZU9jY3VwYW5jeU1hcC5maW5kKHBhZ2UpOwogICAgICAgICBB
U1NFUlQoaXRlciAhPSBtX3BhZ2VPY2N1cGFuY3lNYXAuZW5kKCkpOwotICAgICAgICBpZiAoIS0t
KGl0ZXItPnNlY29uZCkpIHsKKyAgICAgICAgaWYgKCEtLShpdGVyLT52YWx1ZSkpIHsKICAgICAg
ICAgICAgIG1fcGFnZU9jY3VwYW5jeU1hcC5yZW1vdmUoaXRlcik7CiAgICAgICAgICAgICBtX2J5
dGVzQ29tbWl0dGVkIC09IG1fcGFnZVNpemU7CiAgICAgICAgICAgICBub3RpZnlQYWdlSXNGcmVl
KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHBhZ2UgPDwgbV9sb2dQYWdlU2l6ZSkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvUmVmQ291bnRlZExlYWtDb3VudGVyLmNwcCBiL1NvdXJjZS9X
VEYvd3RmL1JlZkNvdW50ZWRMZWFrQ291bnRlci5jcHAKaW5kZXggNjcwZjJhMGNlYzU5OWM2ZDRm
MzE2NDRlYmViNTg3NDE1ZWY0MzIxYS4uNGEwNDUyODI0ODlmZTk1YTE3ZTIzOTE5NzczZDM3Y2Iy
NDQxMGJlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUmVmQ291bnRlZExlYWtDb3VudGVy
LmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9SZWZDb3VudGVkTGVha0NvdW50ZXIuY3BwCkBAIC03
MSw3ICs3MSw3IEBAIFJlZkNvdW50ZWRMZWFrQ291bnRlcjo6flJlZkNvdW50ZWRMZWFrQ291bnRl
cigpCiAgICAgICAgICAgICBMT0coUmVmQ291bnRlZExlYWtzLCAiTEVBSzogJXUgJXMiLCBtX2Nv
dW50LCBtX2Rlc2NyaXB0aW9uKTsKICAgICAgICAgZWxzZSBpZiAoIWxvZ2dlZFN1cHByZXNzaW9u
UmVhc29uKSB7CiAgICAgICAgICAgICAvLyBUaGlzIGxvZ3Mgb25seSBvbmUgcmVhc29uLiBMYXRl
ciB3ZSBjb3VsZCBjaGFuZ2UgaXQgc28gd2UgbG9nIGFsbCB0aGUgcmVhc29ucy4KLSAgICAgICAg
ICAgIExPRyhSZWZDb3VudGVkTGVha3MsICJObyBsZWFrIGNoZWNraW5nIGRvbmU6ICVzIiwgbGVh
a01lc3NhZ2VTdXBwcmVzc2lvblJlYXNvbnMtPmJlZ2luKCktPmZpcnN0KTsKKyAgICAgICAgICAg
IExPRyhSZWZDb3VudGVkTGVha3MsICJObyBsZWFrIGNoZWNraW5nIGRvbmU6ICVzIiwgbGVha01l
c3NhZ2VTdXBwcmVzc2lvblJlYXNvbnMtPmJlZ2luKCktPmtleSk7CiAgICAgICAgICAgICBsb2dn
ZWRTdXBwcmVzc2lvblJlYXNvbiA9IHRydWU7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL3d0Zi9SZWZQdHJIYXNoTWFwLmggYi9Tb3VyY2UvV1RGL3d0Zi9SZWZQdHJI
YXNoTWFwLmgKaW5kZXggMGFmMzZiZTYwMjdmYjUwMGJiZmVhNWMyMWRjNmUwOGNkZjAxOWY4Yi4u
YzgzNGUyMjQ2ZDAxNGU4OTY2NWZhMjM0NjZkYWE5YWI4MjI2Zjk5NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi93dGYvUmVmUHRySGFzaE1hcC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1JlZlB0ckhh
c2hNYXAuaApAQCAtMzQsNyArMzQsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICBwcml2YXRlOgog
ICAgICAgICB0eXBlZGVmIEtleVRyYWl0c0FyZyBLZXlUcmFpdHM7CiAgICAgICAgIHR5cGVkZWYg
TWFwcGVkVHJhaXRzQXJnIE1hcHBlZFRyYWl0czsKLSAgICAgICAgdHlwZWRlZiBQYWlySGFzaFRy
YWl0czxLZXlUcmFpdHMsIE1hcHBlZFRyYWl0cz4gVmFsdWVUcmFpdHM7CisgICAgICAgIHR5cGVk
ZWYgS2V5VmFsdWVQYWlyVHJhaXRzPEtleVRyYWl0cywgTWFwcGVkVHJhaXRzPiBWYWx1ZVRyYWl0
czsKIAogICAgIHB1YmxpYzoKICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBLZXlUcmFpdHM6OlRy
YWl0VHlwZSBLZXlUeXBlOwpAQCAtNTEsNyArNTEsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAg
ICAgCiAgICAgICAgIHR5cGVkZWYgSGFzaEFyZyBIYXNoRnVuY3Rpb25zOwogCi0gICAgICAgIHR5
cGVkZWYgSGFzaFRhYmxlPEtleVR5cGUsIFZhbHVlVHlwZSwgUGFpckZpcnN0RXh0cmFjdG9yPFZh
bHVlVHlwZT4sCisgICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlPEtleVR5cGUsIFZhbHVlVHlwZSwg
S2V5VmFsdWVQYWlyS2V5RXh0cmFjdG9yPFZhbHVlVHlwZT4sCiAgICAgICAgICAgICBIYXNoRnVu
Y3Rpb25zLCBWYWx1ZVRyYWl0cywgS2V5VHJhaXRzPiBIYXNoVGFibGVUeXBlOwogCiAgICAgICAg
IHR5cGVkZWYgSGFzaE1hcFRyYW5zbGF0b3I8VmFsdWVUcmFpdHMsIEhhc2hGdW5jdGlvbnM+CkBA
IC0yMTYsNyArMjE2LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIEFkZFJlc3VsdCByZXN1
bHQgPSBpbmxpbmVBZGQoa2V5LCBtYXBwZWQpOwogICAgICAgICBpZiAoIXJlc3VsdC5pc05ld0Vu
dHJ5KSB7CiAgICAgICAgICAgICAvLyBUaGUgaW5saW5lQWRkIGNhbGwgYWJvdmUgZm91bmQgYW4g
ZXhpc3RpbmcgaGFzaCB0YWJsZSBlbnRyeTsgd2UgbmVlZCB0byBzZXQgdGhlIG1hcHBlZCB2YWx1
ZS4KLSAgICAgICAgICAgIE1hcHBlZFRyYWl0czo6c3RvcmUobWFwcGVkLCByZXN1bHQuaXRlcmF0
b3ItPnNlY29uZCk7CisgICAgICAgICAgICBNYXBwZWRUcmFpdHM6OnN0b3JlKG1hcHBlZCwgcmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgICB9CkBAIC0yMjgsNyArMjI4LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIEFkZFJl
c3VsdCByZXN1bHQgPSBpbmxpbmVBZGQoa2V5LCBtYXBwZWQpOwogICAgICAgICBpZiAoIXJlc3Vs
dC5pc05ld0VudHJ5KSB7CiAgICAgICAgICAgICAvLyBUaGUgaW5saW5lQWRkIGNhbGwgYWJvdmUg
Zm91bmQgYW4gZXhpc3RpbmcgaGFzaCB0YWJsZSBlbnRyeTsgd2UgbmVlZCB0byBzZXQgdGhlIG1h
cHBlZCB2YWx1ZS4KLSAgICAgICAgICAgIE1hcHBlZFRyYWl0czo6c3RvcmUobWFwcGVkLCByZXN1
bHQuaXRlcmF0b3ItPnNlY29uZCk7CisgICAgICAgICAgICBNYXBwZWRUcmFpdHM6OnN0b3JlKG1h
cHBlZCwgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKICAgICB9CkBAIC0yNTQsNyArMjU0LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAg
ICAgIFZhbHVlVHlwZSogZW50cnkgPSBjb25zdF9jYXN0PEhhc2hUYWJsZVR5cGUmPihtX2ltcGwp
Lmxvb2t1cChrZXkpOwogICAgICAgICBpZiAoIWVudHJ5KQogICAgICAgICAgICAgcmV0dXJuIE1h
cHBlZFRyYWl0czo6cGVlayhNYXBwZWRUcmFpdHM6OmVtcHR5VmFsdWUoKSk7Ci0gICAgICAgIHJl
dHVybiBNYXBwZWRUcmFpdHM6OnBlZWsoZW50cnktPnNlY29uZCk7CisgICAgICAgIHJldHVybiBN
YXBwZWRUcmFpdHM6OnBlZWsoZW50cnktPnZhbHVlKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBN
YXBwZWRUcmFpdHM+CkBAIC0yNjQsNyArMjY0LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAg
IFZhbHVlVHlwZSogZW50cnkgPSBjb25zdF9jYXN0PEhhc2hUYWJsZVR5cGUmPihtX2ltcGwpLnRl
bXBsYXRlIGxvb2t1cDxUcmFuc2xhdG9yPihrZXkpOwogICAgICAgICBpZiAoIWVudHJ5KQogICAg
ICAgICAgICAgcmV0dXJuIE1hcHBlZFRyYWl0czo6cGVlayhNYXBwZWRUcmFpdHM6OmVtcHR5VmFs
dWUoKSk7Ci0gICAgICAgIHJldHVybiBNYXBwZWRUcmFpdHM6OnBlZWsoZW50cnktPnNlY29uZCk7
CisgICAgICAgIHJldHVybiBNYXBwZWRUcmFpdHM6OnBlZWsoZW50cnktPnZhbHVlKTsKICAgICB9
CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBl
bmFtZSBXLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHM+CkBAIC0zMDgsNyArMzA4LDcgQEAgbmFtZXNw
YWNlIFdURiB7CiAgICAgICAgIGl0ZXJhdG9yIGl0ID0gZmluZChrZXkpOwogICAgICAgICBpZiAo
aXQgPT0gZW5kKCkpCiAgICAgICAgICAgICByZXR1cm4gTWFwcGVkVHJhaXRzOjpwYXNzT3V0KE1h
cHBlZFRyYWl0czo6ZW1wdHlWYWx1ZSgpKTsKLSAgICAgICAgTWFwcGVkUGFzc091dFR5cGUgcmVz
dWx0ID0gTWFwcGVkVHJhaXRzOjpwYXNzT3V0KGl0LT5zZWNvbmQpOworICAgICAgICBNYXBwZWRQ
YXNzT3V0VHlwZSByZXN1bHQgPSBNYXBwZWRUcmFpdHM6OnBhc3NPdXQoaXQtPnZhbHVlKTsKICAg
ICAgICAgcmVtb3ZlKGl0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CkBAIC0zMjAs
NyArMzIwLDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIGl0ZXJhdG9yIGl0ID0gZmluZChr
ZXkpOwogICAgICAgICBpZiAoaXQgPT0gZW5kKCkpCiAgICAgICAgICAgICByZXR1cm4gTWFwcGVk
VHJhaXRzOjpwYXNzT3V0KE1hcHBlZFRyYWl0czo6ZW1wdHlWYWx1ZSgpKTsKLSAgICAgICAgTWFw
cGVkUGFzc091dFR5cGUgcmVzdWx0ID0gTWFwcGVkVHJhaXRzOjpwYXNzT3V0KGl0LT5zZWNvbmQp
OworICAgICAgICBNYXBwZWRQYXNzT3V0VHlwZSByZXN1bHQgPSBNYXBwZWRUcmFpdHM6OnBhc3NP
dXQoaXQtPnZhbHVlKTsKICAgICAgICAgcmVtb3ZlKGl0KTsKICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9TcGVjdHJ1bS5oIGIvU291cmNl
L1dURi93dGYvU3BlY3RydW0uaAppbmRleCA1ZTdhNDg0Y2Q4NzY2YmNhZjIyY2E0YzkzZGRjZTk3
MGRkMmJhMjEzLi5mMGYxOWViMWNiZmFlMmEzZmFkOTJhOGUyOWRkOGVhMjk4OWI0NDU5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9TcGVjdHJ1bS5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1Nw
ZWN0cnVtLmgKQEAgLTQ0LDcgKzQ0LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgdHlwZW5h
bWUgSGFzaE1hcDxULCB1bnNpZ25lZCBsb25nPjo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fbWFwLmFk
ZChrZXksIGNvdW50KTsKICAgICAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAg
ICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kICs9IGNvdW50OworICAgICAgICAgICAgcmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZSArPSBjb3VudDsKICAgICB9CiAgICAgCiAgICAgdW5zaWduZWQgbG9u
ZyBnZXQoY29uc3QgVCYga2V5KSBjb25zdApAQCAtODgsNyArODgsNyBAQCBwdWJsaWM6CiAgICAg
ewogICAgICAgICBWZWN0b3I8S2V5QW5kQ291bnQ+IGxpc3Q7CiAgICAgICAgIGZvciAoY29uc3Rf
aXRlcmF0b3IgaXRlciA9IGJlZ2luKCk7IGl0ZXIgIT0gZW5kKCk7ICsraXRlcikKLSAgICAgICAg
ICAgIGxpc3QuYXBwZW5kKEtleUFuZENvdW50KGl0ZXItPmZpcnN0LCBpdGVyLT5zZWNvbmQpKTsK
KyAgICAgICAgICAgIGxpc3QuYXBwZW5kKEtleUFuZENvdW50KGl0ZXItPmtleSwgaXRlci0+dmFs
dWUpKTsKICAgICAgICAgCiAgICAgICAgIHN0ZDo6c29ydChsaXN0LmJlZ2luKCksIGxpc3QuZW5k
KCkpOwogICAgICAgICByZXR1cm4gbGlzdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1Ro
cmVhZGluZ1B0aHJlYWRzLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNw
cAppbmRleCBhYmQzNTBkYmJhM2ExODMyM2E1MTczM2M4ZjE1ZDZmZDQ4YzFiYzc1Li43NDNjOTRh
M2IwOWRjMDIzYjdhZWQyNjUyMTI4NjAzMTFlNjdiZDAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHAKKysrIGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5n
UHRocmVhZHMuY3BwCkBAIC0xMTksOCArMTE5LDggQEAgc3RhdGljIFRocmVhZElkZW50aWZpZXIg
aWRlbnRpZmllckJ5UHRocmVhZEhhbmRsZShjb25zdCBwdGhyZWFkX3QmIHB0aHJlYWRIYW5kbGUK
IAogICAgIFRocmVhZE1hcDo6aXRlcmF0b3IgaSA9IHRocmVhZE1hcCgpLmJlZ2luKCk7CiAgICAg
Zm9yICg7IGkgIT0gdGhyZWFkTWFwKCkuZW5kKCk7ICsraSkgewotICAgICAgICBpZiAocHRocmVh
ZF9lcXVhbChpLT5zZWNvbmQsIHB0aHJlYWRIYW5kbGUpKQotICAgICAgICAgICAgcmV0dXJuIGkt
PmZpcnN0OworICAgICAgICBpZiAocHRocmVhZF9lcXVhbChpLT52YWx1ZSwgcHRocmVhZEhhbmRs
ZSkpCisgICAgICAgICAgICByZXR1cm4gaS0+a2V5OwogICAgIH0KIAogICAgIHJldHVybiAwOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlv
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uLmNw
cAppbmRleCBlMWMyYzlmMTJiODc1NTFjODc1ODg4YTY5Y2JlZGI2ZmFlMjE2YzZjLi45MWY4NDUw
YjgxYmZhNjNmODkxZGNkMGQ5MTNmMTA5ZTY4YmE0MTgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uLmNwcApAQCAtMTkyLDcgKzE5Miw3
IEBAIEdlb2xvY2F0aW9uOjpHZW9Ob3RpZmllciogR2VvbG9jYXRpb246OldhdGNoZXJzOjpmaW5k
KGludCBpZCkKICAgICBJZFRvTm90aWZpZXJNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2lkVG9Ob3Rp
Zmllck1hcC5maW5kKGlkKTsKICAgICBpZiAoaXRlciA9PSBtX2lkVG9Ob3RpZmllck1hcC5lbmQo
KSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGl0ZXItPnNlY29uZC5nZXQoKTsKKyAg
ICByZXR1cm4gaXRlci0+dmFsdWUuZ2V0KCk7CiB9CiAKIHZvaWQgR2VvbG9jYXRpb246OldhdGNo
ZXJzOjpyZW1vdmUoaW50IGlkKQpAQCAtMjAxLDcgKzIwMSw3IEBAIHZvaWQgR2VvbG9jYXRpb246
OldhdGNoZXJzOjpyZW1vdmUoaW50IGlkKQogICAgIElkVG9Ob3RpZmllck1hcDo6aXRlcmF0b3Ig
aXRlciA9IG1faWRUb05vdGlmaWVyTWFwLmZpbmQoaWQpOwogICAgIGlmIChpdGVyID09IG1faWRU
b05vdGlmaWVyTWFwLmVuZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgbV9ub3RpZmllclRvSWRN
YXAucmVtb3ZlKGl0ZXItPnNlY29uZCk7CisgICAgbV9ub3RpZmllclRvSWRNYXAucmVtb3ZlKGl0
ZXItPnZhbHVlKTsKICAgICBtX2lkVG9Ob3RpZmllck1hcC5yZW1vdmUoaXRlcik7CiB9CiAKQEAg
LTIxMCw3ICsyMTAsNyBAQCB2b2lkIEdlb2xvY2F0aW9uOjpXYXRjaGVyczo6cmVtb3ZlKEdlb05v
dGlmaWVyKiBub3RpZmllcikKICAgICBOb3RpZmllclRvSWRNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBt
X25vdGlmaWVyVG9JZE1hcC5maW5kKG5vdGlmaWVyKTsKICAgICBpZiAoaXRlciA9PSBtX25vdGlm
aWVyVG9JZE1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIG1faWRUb05vdGlmaWVyTWFw
LnJlbW92ZShpdGVyLT5zZWNvbmQpOworICAgIG1faWRUb05vdGlmaWVyTWFwLnJlbW92ZShpdGVy
LT52YWx1ZSk7CiAgICAgbV9ub3RpZmllclRvSWRNYXAucmVtb3ZlKGl0ZXIpOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tl
bmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNl
QmFja2VuZEltcGwuY3BwCmluZGV4IGIwNWIzMjg2M2QwNzJmYjY1N2RjYTljOGQ2NGUwYjg1MWFk
MDkyNDUuLjM3MDQzZmQ1NWFmMmI0Yjc5MDgyNTRlOWYyMWQ3MjljNTE1MzIxZGYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZElt
cGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNl
QmFja2VuZEltcGwuY3BwCkBAIC0xMzIsNyArMTMyLDcgQEAgUGFzc1JlZlB0cjxET01TdHJpbmdM
aXN0PiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpvYmplY3RTdG9yZU5hbWVzKCkgY29uc3QKIHsK
ICAgICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4gb2JqZWN0U3RvcmVOYW1lcyA9IERPTVN0cmluZ0xp
c3Q6OmNyZWF0ZSgpOwogICAgIGZvciAoT2JqZWN0U3RvcmVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV9vYmplY3RTdG9yZXMuYmVnaW4oKTsgaXQgIT0gbV9vYmplY3RTdG9yZXMuZW5kKCk7ICsr
aXQpCi0gICAgICAgIG9iamVjdFN0b3JlTmFtZXMtPmFwcGVuZChpdC0+Zmlyc3QpOworICAgICAg
ICBvYmplY3RTdG9yZU5hbWVzLT5hcHBlbmQoaXQtPmtleSk7CiAgICAgb2JqZWN0U3RvcmVOYW1l
cy0+c29ydCgpOwogICAgIHJldHVybiBvYmplY3RTdG9yZU5hbWVzLnJlbGVhc2UoKTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNr
ZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5
QmFja2VuZEltcGwuY3BwCmluZGV4IGY1YjljODc3NDA2NzQzZjBlNWE2MDlhNGNjZTlkNWU0ZGEy
OWEzMWMuLjI5NjBiMDJjYjJlNmI4ZDY3MTRjMjA3YTk5ZDU3NTgxZjcwNWRlNmUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1w
bC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJh
Y2tlbmRJbXBsLmNwcApAQCAtMTE3LDcgKzExNyw3IEBAIHZvaWQgSURCRmFjdG9yeUJhY2tlbmRJ
bXBsOjpkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2Fs
CiAgICAgaWYgKGl0ICE9IG1fZGF0YWJhc2VCYWNrZW5kTWFwLmVuZCgpKSB7CiAgICAgICAgIC8v
IElmIHRoZXJlIGFyZSBhbnkgY29ubmVjdGlvbnMgdG8gdGhlIGRhdGFiYXNlLCBkaXJlY3RseSBk
ZWxldGUgdGhlCiAgICAgICAgIC8vIGRhdGFiYXNlLgotICAgICAgICBpdC0+c2Vjb25kLT5kZWxl
dGVEYXRhYmFzZShjYWxsYmFja3MpOworICAgICAgICBpdC0+dmFsdWUtPmRlbGV0ZURhdGFiYXNl
KGNhbGxiYWNrcyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTE0MCw3ICsxNDAsNyBA
QCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVu
QmFja2luZ1N0b3JlKFBhc3NSZWZQdHI8UwogICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJh
Y2tpbmdTdG9yZTsKICAgICBJREJCYWNraW5nU3RvcmVNYXA6Oml0ZXJhdG9yIGl0MiA9IG1fYmFj
a2luZ1N0b3JlTWFwLmZpbmQoZmlsZUlkZW50aWZpZXIpOwogICAgIGlmIChpdDIgIT0gbV9iYWNr
aW5nU3RvcmVNYXAuZW5kKCkpCi0gICAgICAgIGJhY2tpbmdTdG9yZSA9IGl0Mi0+c2Vjb25kOwor
ICAgICAgICBiYWNraW5nU3RvcmUgPSBpdDItPnZhbHVlOwogICAgIGVsc2UgewogI2lmIFVTRShM
RVZFTERCKQogICAgICAgICBiYWNraW5nU3RvcmUgPSBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpv
cGVuKHNlY3VyaXR5T3JpZ2luLmdldCgpLCBkYXRhRGlyZWN0b3J5LCBmaWxlSWRlbnRpZmllciwg
dGhpcyk7CkBAIC0xNjUsNyArMTY1LDcgQEAgdm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6Om9w
ZW5JbnRlcm5hbChjb25zdCBTdHJpbmcmIG5hbWUsIElEQkNhbGxiYWNrcyogY2FsbGIKICAgICBp
ZiAoaXQgIT0gbV9kYXRhYmFzZUJhY2tlbmRNYXAuZW5kKCkpIHsKICAgICAgICAgLy8gSWYgaXQn
cyBhbHJlYWR5IGJlZW4gb3BlbmVkLCB3ZSBoYXZlIHRvIHdhaXQgZm9yIGFueSBwZW5kaW5nCiAg
ICAgICAgIC8vIHNldFZlcnNpb24gY2FsbHMgdG8gY29tcGxldGUuCi0gICAgICAgIGl0LT5zZWNv
bmQtPm9wZW5Db25uZWN0aW9uKGNhbGxiYWNrcyk7CisgICAgICAgIGl0LT52YWx1ZS0+b3BlbkNv
bm5lY3Rpb24oY2FsbGJhY2tzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCmluZGV4
IDU5NGY2NmU5ZThkNjY1ZmQzMzE0NWQwZmU2M2MyMWRjM2IyYjM2NWYuLjE3MGZlOGIyMzFjOGY1
NjJiOTliZjA0MWE3ZWYwMzQ1ZTE3ZWIwYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKQEAgLTIzOCw3ICsyMzgsNyBAQCBQ
YXNzUmVmUHRyPElEQkluZGV4PiBJREJPYmplY3RTdG9yZTo6aW5kZXgoY29uc3QgU3RyaW5nJiBu
YW1lLCBFeGNlcHRpb25Db2RlJiBlYwogCiAgICAgSURCSW5kZXhNYXA6Oml0ZXJhdG9yIGl0ID0g
bV9pbmRleE1hcC5maW5kKG5hbWUpOwogICAgIGlmIChpdCAhPSBtX2luZGV4TWFwLmVuZCgpKQot
ICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKIAog
ICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGluZGV4QmFja2VuZCA9IG1fYmFj
a2VuZC0+aW5kZXgobmFtZSwgZWMpOwogICAgIEFTU0VSVCghaW5kZXhCYWNrZW5kICE9ICFlYyk7
IC8vIElmIHdlIGRpZG4ndCBnZXQgYW4gaW5kZXgsIHdlIHNob3VsZCBoYXZlIGdvdHRlbiBhbiBl
eGNlcHRpb24gY29kZS4gQW5kIHZpY2UgdmVyc2EuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3Bw
CmluZGV4IDVkMmQ1MGMyYWViZTdmNDAwZDYwZDhlMTA4NmIwMDVmZjliM2Q1NTMuLjFlNDgxNGRh
MGQ3YmYzY2NjMzBiZDdhZjc0MWFhMzI0MWI3OGRjN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZElt
cGwuY3BwCkBAIC03OCw3ICs3OCw3IEBAIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6aW5kZXhOYW1lcygpIGNvbnN0CiB7CiAgICAgUmVmUHRyPERP
TVN0cmluZ0xpc3Q+IGluZGV4TmFtZXMgPSBET01TdHJpbmdMaXN0OjpjcmVhdGUoKTsKICAgICBm
b3IgKEluZGV4TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1faW5kZXhlcy5iZWdpbigpOyBpdCAh
PSBtX2luZGV4ZXMuZW5kKCk7ICsraXQpCi0gICAgICAgIGluZGV4TmFtZXMtPmFwcGVuZChpdC0+
Zmlyc3QpOworICAgICAgICBpbmRleE5hbWVzLT5hcHBlbmQoaXQtPmtleSk7CiAgICAgaW5kZXhO
YW1lcy0+c29ydCgpOwogICAgIHJldHVybiBpbmRleE5hbWVzLnJlbGVhc2UoKTsKIH0KQEAgLTIw
Niw3ICsyMDYsNyBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dChQYXNzUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJwVmFsdWUsCiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KICAgICAgICAgZm9yIChJbmRleE1hcDo6aXRlcmF0b3IgaXQgPSBtX2luZGV4
ZXMuYmVnaW4oKTsgaXQgIT0gbV9pbmRleGVzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgICAgICBj
b25zdCBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4mIGluZGV4ID0gaXQtPnNlY29uZDsKKyAg
ICAgICAgICAgIGNvbnN0IFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiYgaW5kZXggPSBpdC0+
dmFsdWU7CiAgICAgICAgICAgICBSZWZQdHI8SURCS2V5PiBpbmRleEtleSA9IGZldGNoS2V5RnJv
bUtleVBhdGgodmFsdWUuZ2V0KCksIGluZGV4LT5rZXlQYXRoKCkpOwogICAgICAgICAgICAgaWYg
KGluZGV4S2V5ICYmICFpbmRleEtleS0+dmFsaWQoKSkgewogICAgICAgICAgICAgICAgIGVjID0g
SURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOwpAQCAtMjg2LDcgKzI4Niw3IEBAIHZvaWQg
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFBhc3NSZWZQdHI8CiAKICAgICBWZWN0b3I8UmVmUHRyPElEQktleT4gPiBpbmRleEtl
eXM7CiAgICAgZm9yIChJbmRleE1hcDo6aXRlcmF0b3IgaXQgPSBvYmplY3RTdG9yZS0+bV9pbmRl
eGVzLmJlZ2luKCk7IGl0ICE9IG9iamVjdFN0b3JlLT5tX2luZGV4ZXMuZW5kKCk7ICsraXQpIHsK
LSAgICAgICAgY29uc3QgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+JiBpbmRleCA9IGl0LT5z
ZWNvbmQ7CisgICAgICAgIGNvbnN0IFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiYgaW5kZXgg
PSBpdC0+dmFsdWU7CiAKICAgICAgICAgUmVmUHRyPElEQktleT4gaW5kZXhLZXkgPSBmZXRjaEtl
eUZyb21LZXlQYXRoKHZhbHVlLmdldCgpLCBpbmRleC0+a2V5UGF0aCgpKTsKICAgICAgICAgaWYg
KCFpbmRleEtleSkgewpAQCAtMzI1LDcgKzMyNSw3IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6cHV0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8
CiAKICAgICBpbnQgaSA9IDA7CiAgICAgZm9yIChJbmRleE1hcDo6aXRlcmF0b3IgaXQgPSBvYmpl
Y3RTdG9yZS0+bV9pbmRleGVzLmJlZ2luKCk7IGl0ICE9IG9iamVjdFN0b3JlLT5tX2luZGV4ZXMu
ZW5kKCk7ICsraXQsICsraSkgewotICAgICAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4m
IGluZGV4ID0gaXQtPnNlY29uZDsKKyAgICAgICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+
JiBpbmRleCA9IGl0LT52YWx1ZTsKICAgICAgICAgaWYgKCFpbmRleC0+aGFzVmFsaWRJZCgpKQog
ICAgICAgICAgICAgY29udGludWU7IC8vIFRoZSBpbmRleCBvYmplY3QgaGFzIGJlZW4gY3JlYXRl
ZCwgYnV0IGRvZXMgbm90IGV4aXN0IGluIHRoZSBkYXRhYmFzZSB5ZXQuCiAKQEAgLTQwOCwxMCAr
NDA4LDEwIEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW50ZXJuYWwo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQCiAgICAgICAgICAgICByZWNvcmRJZGVu
dGlmaWVyID0gYmFja2luZ1N0b3JlQ3Vyc29yLT5vYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIo
KTsKIAogICAgICAgICAgICAgZm9yIChJbmRleE1hcDo6aXRlcmF0b3IgaXQgPSBvYmplY3RTdG9y
ZS0+bV9pbmRleGVzLmJlZ2luKCk7IGl0ICE9IG9iamVjdFN0b3JlLT5tX2luZGV4ZXMuZW5kKCk7
ICsraXQpIHsKLSAgICAgICAgICAgICAgICBpZiAoIWl0LT5zZWNvbmQtPmhhc1ZhbGlkSWQoKSkK
KyAgICAgICAgICAgICAgICBpZiAoIWl0LT52YWx1ZS0+aGFzVmFsaWRJZCgpKQogICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsgLy8gVGhlIGluZGV4IG9iamVjdCBoYXMgYmVlbiBjcmVhdGVk
LCBidXQgZG9lcyBub3QgZXhpc3QgaW4gdGhlIGRhdGFiYXNlIHlldC4KIAotICAgICAgICAgICAg
ICAgIGJvb2wgc3VjY2VzcyA9IG9iamVjdFN0b3JlLT5tX2JhY2tpbmdTdG9yZS0+ZGVsZXRlSW5k
ZXhEYXRhRm9yUmVjb3JkKG9iamVjdFN0b3JlLT5tX2RhdGFiYXNlSWQsIG9iamVjdFN0b3JlLT5p
ZCgpLCBpdC0+c2Vjb25kLT5pZCgpLCByZWNvcmRJZGVudGlmaWVyLmdldCgpKTsKKyAgICAgICAg
ICAgICAgICBib29sIHN1Y2Nlc3MgPSBvYmplY3RTdG9yZS0+bV9iYWNraW5nU3RvcmUtPmRlbGV0
ZUluZGV4RGF0YUZvclJlY29yZChvYmplY3RTdG9yZS0+bV9kYXRhYmFzZUlkLCBvYmplY3RTdG9y
ZS0+aWQoKSwgaXQtPnZhbHVlLT5pZCgpLCByZWNvcmRJZGVudGlmaWVyLmdldCgpKTsKICAgICAg
ICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOwogICAgICAgICAgICAg
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFu
c2FjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2Fj
dGlvbi5jcHAKaW5kZXggOWUwYjNhOGY3MjljNGI2MWQwODRjN2FkY2QyMGMxYTFhNjJjODUxZS4u
YmFiYzcxYTg5OTk0OGMzYzRkNzEyY2I4Y2Q5ZTZiYWYyNjAxMWJhNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcApAQCAtOTMs
NyArOTMsNyBAQCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBJREJUcmFuc2FjdGlvbjo6b2Jq
ZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcAogCiAgICAgSURCT2JqZWN0U3RvcmVN
YXA6Oml0ZXJhdG9yIGl0ID0gbV9vYmplY3RTdG9yZU1hcC5maW5kKG5hbWUpOwogICAgIGlmIChp
dCAhPSBtX29iamVjdFN0b3JlTWFwLmVuZCgpKQotICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsK
KyAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKIAogICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbnRlcmZhY2U+IG9iamVjdFN0b3JlQmFja2VuZCA9IG1fYmFja2VuZC0+b2JqZWN0U3Rv
cmUobmFtZSwgZWMpOwogICAgIGlmICghb2JqZWN0U3RvcmVCYWNrZW5kKSB7CkBAIC0yMjcsNyAr
MjI3LDcgQEAgYm9vbCBJREJUcmFuc2FjdGlvbjo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2
ZW50PiBldmVudCkKIAogICAgIC8vIEJyZWFrIHJlZmVyZW5jZSBjeWNsZXMuCiAgICAgZm9yIChJ
REJPYmplY3RTdG9yZU1hcDo6aXRlcmF0b3IgaXQgPSBtX29iamVjdFN0b3JlTWFwLmJlZ2luKCk7
IGl0ICE9IG1fb2JqZWN0U3RvcmVNYXAuZW5kKCk7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQt
PnRyYW5zYWN0aW9uRmluaXNoZWQoKTsKKyAgICAgICAgaXQtPnZhbHVlLT50cmFuc2FjdGlvbkZp
bmlzaGVkKCk7CiAgICAgbV9vYmplY3RTdG9yZU1hcC5jbGVhcigpOwogCiAgICAgVmVjdG9yPFJl
ZlB0cjxFdmVudFRhcmdldD4gPiB0YXJnZXRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJkYXRhYmFzZS9BYnN0cmFjdERhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZGF0YWJhc2UvQWJzdHJhY3REYXRhYmFzZS5jcHAKaW5kZXggZTUxYzI0NDQ4
NjZhNmNjY2JkOWI0YTlmOTdkNjlkYjIyNTMyYWZkMi4uZjA0YmNkODliMWFmYWZkMjY4ZDYyMmVm
NzhlMGI5Njg2ODk2ZGVjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9BYnN0cmFjdERhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmRhdGFiYXNlL0Fic3RyYWN0RGF0YWJhc2UuY3BwCkBAIC0yODIsNyArMjgyLDcgQEAgYm9v
bCBBYnN0cmFjdERhdGFiYXNlOjpwZXJmb3JtT3BlbkFuZFZlcmlmeShib29sIHNob3VsZFNldFZl
cnNpb25Jbk5ld0RhdGFiYXNlLAogICAgICAgICBHdWlkVmVyc2lvbk1hcDo6aXRlcmF0b3IgZW50
cnkgPSBndWlkVG9WZXJzaW9uTWFwKCkuZmluZChtX2d1aWQpOwogICAgICAgICBpZiAoZW50cnkg
IT0gZ3VpZFRvVmVyc2lvbk1hcCgpLmVuZCgpKSB7CiAgICAgICAgICAgICAvLyBNYXAgbnVsbCBz
dHJpbmcgdG8gZW1wdHkgc3RyaW5nIChzZWUgdXBkYXRlR3VpZFZlcnNpb25NYXAoKSkuCi0gICAg
ICAgICAgICBjdXJyZW50VmVyc2lvbiA9IGVudHJ5LT5zZWNvbmQuaXNOdWxsKCkgPyBTdHJpbmco
IiIpIDogZW50cnktPnNlY29uZC5pc29sYXRlZENvcHkoKTsKKyAgICAgICAgICAgIGN1cnJlbnRW
ZXJzaW9uID0gZW50cnktPnZhbHVlLmlzTnVsbCgpID8gU3RyaW5nKCIiKSA6IGVudHJ5LT52YWx1
ZS5pc29sYXRlZENvcHkoKTsKICAgICAgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiQ3VycmVudCBj
YWNoZWQgdmVyc2lvbiBmb3IgZ3VpZCAlaSBpcyAlcyIsIG1fZ3VpZCwgY3VycmVudFZlcnNpb24u
YXNjaWkoKS5kYXRhKCkpOwogCiAjaWYgUExBVEZPUk0oQ0hST01JVU0pCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5jcHAKaW5k
ZXggMjMzYjM3MjFiNmUzNjBkMTg2NTk1Y2MwOTI3OWM0YTg4ZTNjNmQ1YS4uM2NmY2ZmZWU3YjFi
YWJmOGRmNzQzMDg0NWY0YTAzNmIxNTNiN2EyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNwcApAQCAtMjUyLDcgKzI1
Miw3IEBAIHZvaWQgRGF0YWJhc2VUcmFja2VyOjppbnRlcnJ1cHRBbGxEYXRhYmFzZXNGb3JDb250
ZXh0KGNvbnN0IFNjcmlwdEV4ZWN1dGlvbkNvbnRlCiAKICAgICAgICAgRGF0YWJhc2VOYW1lTWFw
Ojpjb25zdF9pdGVyYXRvciBkYk5hbWVNYXBFbmRJdCA9IG5hbWVNYXAtPmVuZCgpOwogICAgICAg
ICBmb3IgKERhdGFiYXNlTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgZGJOYW1lTWFwSXQgPSBuYW1l
TWFwLT5iZWdpbigpOyBkYk5hbWVNYXBJdCAhPSBkYk5hbWVNYXBFbmRJdDsgKytkYk5hbWVNYXBJ
dCkgewotICAgICAgICAgICAgRGF0YWJhc2VTZXQqIGRhdGFiYXNlU2V0ID0gZGJOYW1lTWFwSXQt
PnNlY29uZDsKKyAgICAgICAgICAgIERhdGFiYXNlU2V0KiBkYXRhYmFzZVNldCA9IGRiTmFtZU1h
cEl0LT52YWx1ZTsKICAgICAgICAgICAgIERhdGFiYXNlU2V0Ojpjb25zdF9pdGVyYXRvciBkYlNl
dEVuZEl0ID0gZGF0YWJhc2VTZXQtPmVuZCgpOwogICAgICAgICAgICAgZm9yIChEYXRhYmFzZVNl
dDo6Y29uc3RfaXRlcmF0b3IgZGJTZXRJdCA9IGRhdGFiYXNlU2V0LT5iZWdpbigpOyBkYlNldEl0
ICE9IGRiU2V0RW5kSXQ7ICsrZGJTZXRJdCkgewogICAgICAgICAgICAgICAgIGlmICgoKmRiU2V0
SXQpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgPT0gY29udGV4dCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvT3JpZ2luVXNhZ2VSZWNvcmQuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9PcmlnaW5Vc2FnZVJlY29yZC5jcHAK
aW5kZXggNDQzNTUwYTU3MzA5ZjMzNjNmMGZjYTk4ZjUwOGMwMjc2ZDBkOTlkYi4uMmJmOGFmNGFl
MDA5OTI4MGFjYTE3NTc3NDhiYTIxY2Y5MGI3MDJkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9PcmlnaW5Vc2FnZVJlY29yZC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9PcmlnaW5Vc2FnZVJlY29yZC5jcHAKQEAgLTkz
LDcgKzkzLDcgQEAgdW5zaWduZWQgbG9uZyBsb25nIE9yaWdpblVzYWdlUmVjb3JkOjpkaXNrVXNh
Z2UoKQogICAgIEhhc2hNYXA8U3RyaW5nLCBEYXRhYmFzZUVudHJ5Pjo6aXRlcmF0b3IgaURhdGFi
YXNlID0gbV9kYXRhYmFzZU1hcC5iZWdpbigpOwogICAgIEhhc2hNYXA8U3RyaW5nLCBEYXRhYmFz
ZUVudHJ5Pjo6aXRlcmF0b3IgZW5kRGF0YWJhc2UgPSBtX2RhdGFiYXNlTWFwLmVuZCgpOwogICAg
IGZvciAoOyBpRGF0YWJhc2UgIT0gZW5kRGF0YWJhc2U7ICsraURhdGFiYXNlKQotICAgICAgICBt
X2NhY2hlZERpc2tVc2FnZSArPSBpRGF0YWJhc2UtPnNlY29uZC5zaXplOworICAgICAgICBtX2Nh
Y2hlZERpc2tVc2FnZSArPSBpRGF0YWJhc2UtPnZhbHVlLnNpemU7CiAKICAgICBtX2NhY2hlZERp
c2tVc2FnZUlzVmFsaWQgPSB0cnVlOwogICAgIHJldHVybiBtX2NhY2hlZERpc2tVc2FnZTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rp
b25Db29yZGluYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NR
TFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwCmluZGV4IDgzN2I4ZmJkMjIwNWFkYzk3NDg2ZGQz
ZjBlOGYwMjA3MzgwZjhkOWIuLmRhM2E3ZWU3NWI4YzAxMjU5NDY2ZWM0YTdlYWRhOTdiZDFjMjNi
ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJh
bnNhY3Rpb25Db29yZGluYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcApAQCAtNzgsNyArNzgsNyBAQCB2
b2lkIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OmFjcXVpcmVMb2NrKFNRTFRyYW5zYWN0aW9u
KiB0cmFuc2FjdGlvbikKICAgICAgICAgY29vcmRpbmF0aW9uSW5mb0l0ZXJhdG9yID0gbV9jb29y
ZGluYXRpb25JbmZvTWFwLmFkZChkYklkZW50aWZpZXIsIENvb3JkaW5hdGlvbkluZm8oKSkuaXRl
cmF0b3I7CiAgICAgfQogCi0gICAgQ29vcmRpbmF0aW9uSW5mbyYgaW5mbyA9IGNvb3JkaW5hdGlv
bkluZm9JdGVyYXRvci0+c2Vjb25kOworICAgIENvb3JkaW5hdGlvbkluZm8mIGluZm8gPSBjb29y
ZGluYXRpb25JbmZvSXRlcmF0b3ItPnZhbHVlOwogICAgIGluZm8ucGVuZGluZ1RyYW5zYWN0aW9u
cy5hcHBlbmQodHJhbnNhY3Rpb24pOwogICAgIHByb2Nlc3NQZW5kaW5nVHJhbnNhY3Rpb25zKGlu
Zm8pOwogfQpAQCAtOTIsNyArOTIsNyBAQCB2b2lkIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6
OnJlbGVhc2VMb2NrKFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKIAogICAgIENvb3JkaW5h
dGlvbkluZm9NYXA6Oml0ZXJhdG9yIGNvb3JkaW5hdGlvbkluZm9JdGVyYXRvciA9IG1fY29vcmRp
bmF0aW9uSW5mb01hcC5maW5kKGRiSWRlbnRpZmllcik7CiAgICAgQVNTRVJUKGNvb3JkaW5hdGlv
bkluZm9JdGVyYXRvciAhPSBtX2Nvb3JkaW5hdGlvbkluZm9NYXAuZW5kKCkpOwotICAgIENvb3Jk
aW5hdGlvbkluZm8mIGluZm8gPSBjb29yZGluYXRpb25JbmZvSXRlcmF0b3ItPnNlY29uZDsKKyAg
ICBDb29yZGluYXRpb25JbmZvJiBpbmZvID0gY29vcmRpbmF0aW9uSW5mb0l0ZXJhdG9yLT52YWx1
ZTsKIAogICAgIGlmICh0cmFuc2FjdGlvbi0+aXNSZWFkT25seSgpKSB7CiAgICAgICAgIEFTU0VS
VChpbmZvLmFjdGl2ZVJlYWRUcmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb24pKTsKQEAg
LTExMCw3ICsxMTAsNyBAQCB2b2lkIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OnNodXRkb3du
KCkKICAgICAvLyBOb3RpZnkgYWxsIHRyYW5zYWN0aW9ucyBpbiBwcm9ncmVzcyB0aGF0IHRoZSBk
YXRhYmFzZSB0aHJlYWQgaXMgc2h1dHRpbmcgZG93bgogICAgIGZvciAoQ29vcmRpbmF0aW9uSW5m
b01hcDo6aXRlcmF0b3IgY29vcmRpbmF0aW9uSW5mb0l0ZXJhdG9yID0gbV9jb29yZGluYXRpb25J
bmZvTWFwLmJlZ2luKCk7CiAgICAgICAgICBjb29yZGluYXRpb25JbmZvSXRlcmF0b3IgIT0gbV9j
b29yZGluYXRpb25JbmZvTWFwLmVuZCgpOyArK2Nvb3JkaW5hdGlvbkluZm9JdGVyYXRvcikgewot
ICAgICAgICBDb29yZGluYXRpb25JbmZvJiBpbmZvID0gY29vcmRpbmF0aW9uSW5mb0l0ZXJhdG9y
LT5zZWNvbmQ7CisgICAgICAgIENvb3JkaW5hdGlvbkluZm8mIGluZm8gPSBjb29yZGluYXRpb25J
bmZvSXRlcmF0b3ItPnZhbHVlOwogICAgICAgICBpZiAoaW5mby5hY3RpdmVXcml0ZVRyYW5zYWN0
aW9uKQogICAgICAgICAgICAgaW5mby5hY3RpdmVXcml0ZVRyYW5zYWN0aW9uLT5ub3RpZnlEYXRh
YmFzZVRocmVhZElzU2h1dHRpbmdEb3duKCk7CiAgICAgICAgIGZvciAoSGFzaFNldDxSZWZQdHI8
U1FMVHJhbnNhY3Rpb24+ID46Oml0ZXJhdG9yIGFjdGl2ZVJlYWRUcmFuc2FjdGlvbnNJdGVyYXRv
ciA9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9t
aXVtL0RhdGFiYXNlVHJhY2tlckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZGF0YWJhc2UvY2hyb21pdW0vRGF0YWJhc2VUcmFja2VyQ2hyb21pdW0uY3BwCmluZGV4IDEx
N2ZkYmVlZDMxZDYzYjY0Yjk0MTgwM2I4ZWFkY2Q5OTg1Y2VlZmMuLjYwYTc2Y2E1Yzk1OTgyYmVh
OTRjZTA3YmFmNjZlZGE1ZDgyN2M1YWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZGF0YWJhc2UvY2hyb21pdW0vRGF0YWJhc2VUcmFja2VyQ2hyb21pdW0uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvY2hyb21pdW0vRGF0YWJhc2VUcmFj
a2VyQ2hyb21pdW0uY3BwCkBAIC0xODAsNyArMTgwLDcgQEAgdm9pZCBEYXRhYmFzZVRyYWNrZXI6
OmludGVycnVwdEFsbERhdGFiYXNlc0ZvckNvbnRleHQoY29uc3QgU2NyaXB0RXhlY3V0aW9uQ29u
dGUKIAogICAgIERhdGFiYXNlTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgZGJOYW1lTWFwRW5kSXQg
PSBuYW1lTWFwLT5lbmQoKTsKICAgICBmb3IgKERhdGFiYXNlTmFtZU1hcDo6Y29uc3RfaXRlcmF0
b3IgZGJOYW1lTWFwSXQgPSBuYW1lTWFwLT5iZWdpbigpOyBkYk5hbWVNYXBJdCAhPSBkYk5hbWVN
YXBFbmRJdDsgKytkYk5hbWVNYXBJdCkgewotICAgICAgICBEYXRhYmFzZVNldCogZGF0YWJhc2VT
ZXQgPSBkYk5hbWVNYXBJdC0+c2Vjb25kOworICAgICAgICBEYXRhYmFzZVNldCogZGF0YWJhc2VT
ZXQgPSBkYk5hbWVNYXBJdC0+dmFsdWU7CiAgICAgICAgIERhdGFiYXNlU2V0Ojpjb25zdF9pdGVy
YXRvciBlbmQgPSBkYXRhYmFzZVNldC0+ZW5kKCk7CiAgICAgICAgIGZvciAoRGF0YWJhc2VTZXQ6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZGF0YWJhc2VTZXQtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgewogICAgICAgICAgICAgaWYgKCgqaXQpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgPT0g
Y29udGV4dCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2Uv
Y2hyb21pdW0vUXVvdGFUcmFja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0
YWJhc2UvY2hyb21pdW0vUXVvdGFUcmFja2VyLmNwcAppbmRleCAxMGIwOGEyYjcyM2NkYTI5MjBk
NDNkZWZhMThjMzExNWVmYTFiMjI4Li4zZjI0MmEyMjE1MjcwZGFlNmZlZGQ4NzFlYTYwMzY1MmI1
ZDIyOWQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL2No
cm9taXVtL1F1b3RhVHJhY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9jaHJvbWl1bS9RdW90YVRyYWNrZXIuY3BwCkBAIC01Myw4ICs1Myw4IEBAIHZvaWQg
UXVvdGFUcmFja2VyOjpnZXREYXRhYmFzZVNpemVBbmRTcGFjZUF2YWlsYWJsZVRvT3JpZ2luKAog
ICAgICAgICBNdXRleExvY2tlciBsb2NrRGF0YShtX2RhdGFHdWFyZCk7CiAgICAgICAgIEFTU0VS
VChtX2RhdGFiYXNlU2l6ZXMuY29udGFpbnMob3JpZ2luSWRlbnRpZmllcikpOwogICAgICAgICBI
YXNoTWFwPFN0cmluZywgU2l6ZU1hcD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9kYXRhYmFzZVNp
emVzLmZpbmQob3JpZ2luSWRlbnRpZmllcik7Ci0gICAgICAgIEFTU0VSVChpdC0+c2Vjb25kLmNv
bnRhaW5zKGRhdGFiYXNlTmFtZSkpOwotICAgICAgICAqZGF0YWJhc2VTaXplID0gaXQtPnNlY29u
ZC5nZXQoZGF0YWJhc2VOYW1lKTsKKyAgICAgICAgQVNTRVJUKGl0LT52YWx1ZS5jb250YWlucyhk
YXRhYmFzZU5hbWUpKTsKKyAgICAgICAgKmRhdGFiYXNlU2l6ZSA9IGl0LT52YWx1ZS5nZXQoZGF0
YWJhc2VOYW1lKTsKIAogICAgICAgICBpZiAobV9zcGFjZUF2YWlsYWJsZVRvT3JpZ2lucy5jb250
YWlucyhvcmlnaW5JZGVudGlmaWVyKSkgewogICAgICAgICAgICAgKnNwYWNlQXZhaWxhYmxlID0g
bV9zcGFjZUF2YWlsYWJsZVRvT3JpZ2lucy5nZXQob3JpZ2luSWRlbnRpZmllcik7CkBAIC03Miw3
ICs3Miw3IEBAIHZvaWQgUXVvdGFUcmFja2VyOjp1cGRhdGVEYXRhYmFzZVNpemUoCiB7CiAgICAg
TXV0ZXhMb2NrZXIgbG9ja0RhdGEobV9kYXRhR3VhcmQpOwogICAgIEhhc2hNYXA8U3RyaW5nLCBT
aXplTWFwPjo6aXRlcmF0b3IgaXQgPSBtX2RhdGFiYXNlU2l6ZXMuYWRkKG9yaWdpbklkZW50aWZp
ZXIsIFNpemVNYXAoKSkuaXRlcmF0b3I7Ci0gICAgaXQtPnNlY29uZC5zZXQoZGF0YWJhc2VOYW1l
LCBkYXRhYmFzZVNpemUpOworICAgIGl0LT52YWx1ZS5zZXQoZGF0YWJhc2VOYW1lLCBkYXRhYmFz
ZVNpemUpOwogfQogCiB2b2lkIFF1b3RhVHJhY2tlcjo6dXBkYXRlU3BhY2VBdmFpbGFibGVUb09y
aWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIsIHVuc2lnbmVkIGxvbmcgbG9uZyBz
cGFjZUF2YWlsYWJsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29j
a2V0cy9XZWJTb2NrZXREZWZsYXRlRnJhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2Vic29ja2V0cy9XZWJTb2NrZXREZWZsYXRlRnJhbWVyLmNwcAppbmRleCA3NmMwNDBkMWM5Mzcy
YWI3MGUyMjY0NjBhODdkMmE1NWYyYzg4ZmYwLi42N2JiM2RhYTEyOTk4ODQ1MTExMDY5MGUxOTJl
YTBkYTAwNzY2Y2Q5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tl
dHMvV2ViU29ja2V0RGVmbGF0ZUZyYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJzb2NrZXRzL1dlYlNvY2tldERlZmxhdGVGcmFtZXIuY3BwCkBAIC04Nyw3ICs4Nyw3IEBA
IGJvb2wgV2ViU29ja2V0RXh0ZW5zaW9uRGVmbGF0ZUZyYW1lOjpwcm9jZXNzUmVzcG9uc2UoY29u
c3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluCiAgICAgaW50IHdpbmRvd0JpdHMgPSAxNTsKICAgICBI
YXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgcGFyYW1ldGVyID0gc2VydmVy
UGFyYW1ldGVycy5maW5kKCJtYXhfd2luZG93X2JpdHMiKTsKICAgICBpZiAocGFyYW1ldGVyICE9
IHNlcnZlclBhcmFtZXRlcnMuZW5kKCkpIHsKLSAgICAgICAgd2luZG93Qml0cyA9IHBhcmFtZXRl
ci0+c2Vjb25kLnRvSW50KCk7CisgICAgICAgIHdpbmRvd0JpdHMgPSBwYXJhbWV0ZXItPnZhbHVl
LnRvSW50KCk7CiAgICAgICAgIGlmICh3aW5kb3dCaXRzIDwgOCB8fCB3aW5kb3dCaXRzID4gMTUp
IHsKICAgICAgICAgICAgIG1fZmFpbHVyZVJlYXNvbiA9ICJSZWNlaXZlZCBpbnZhbGlkIG1heF93
aW5kb3dfYml0cyBwYXJhbWV0ZXIiOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtOTgs
NyArOTgsNyBAQCBib29sIFdlYlNvY2tldEV4dGVuc2lvbkRlZmxhdGVGcmFtZTo6cHJvY2Vzc1Jl
c3BvbnNlKGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbgogICAgIFdlYlNvY2tldERlZmxhdGVy
OjpDb250ZXh0VGFrZU92ZXJNb2RlIG1vZGUgPSBXZWJTb2NrZXREZWZsYXRlcjo6VGFrZU92ZXJD
b250ZXh0OwogICAgIHBhcmFtZXRlciA9IHNlcnZlclBhcmFtZXRlcnMuZmluZCgibm9fY29udGV4
dF90YWtlb3ZlciIpOwogICAgIGlmIChwYXJhbWV0ZXIgIT0gc2VydmVyUGFyYW1ldGVycy5lbmQo
KSkgewotICAgICAgICBpZiAoIXBhcmFtZXRlci0+c2Vjb25kLmlzTnVsbCgpKSB7CisgICAgICAg
IGlmICghcGFyYW1ldGVyLT52YWx1ZS5pc051bGwoKSkgewogICAgICAgICAgICAgbV9mYWlsdXJl
UmVhc29uID0gIlJlY2VpdmVkIGludmFsaWQgbm9fY29udGV4dF90YWtlb3ZlciBwYXJhbWV0ZXIi
OwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0RXh0ZW5zaW9uRGlzcGF0Y2hl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0RXh0ZW5z
aW9uRGlzcGF0Y2hlci5jcHAKaW5kZXggN2M1OTJhZDFiZjI4MDY4YzgzMDMzNjliNjA2NTY3M2I2
YmE3ZTk3NC4uNTYwOWY2NTgxYWFiOTc0MmIwZmQ4NWZmMTVkMTVmYTUwZWQyOWY1YiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEV4dGVuc2lv
bkRpc3BhdGNoZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9X
ZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyLmNwcApAQCAtMTgxLDEwICsxODEsMTAgQEAgdm9p
ZCBXZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyOjphcHBlbmRBY2NlcHRlZEV4dGVuc2lvbihj
b25zdCBTdHJpbmcmIGV4dGVuc2kKICAgICAvLyBGSVhNRTogU2hvdWxkIHVzZSBMaXN0SGFzaFNl
dCB0byBrZWVwIHRoZSBvcmRlciBvZiB0aGUgcGFyYW1ldGVycy4KICAgICBmb3IgKEhhc2hNYXA8
U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdGVyYXRvciA9IGV4dGVuc2lvblBhcmFt
ZXRlcnMuYmVnaW4oKTsgaXRlcmF0b3IgIT0gZXh0ZW5zaW9uUGFyYW1ldGVycy5lbmQoKTsgKytp
dGVyYXRvcikgewogICAgICAgICBtX2FjY2VwdGVkRXh0ZW5zaW9uc0J1aWxkZXIuYXBwZW5kKCI7
ICIpOwotICAgICAgICBtX2FjY2VwdGVkRXh0ZW5zaW9uc0J1aWxkZXIuYXBwZW5kKGl0ZXJhdG9y
LT5maXJzdCk7Ci0gICAgICAgIGlmICghaXRlcmF0b3ItPnNlY29uZC5pc051bGwoKSkgeworICAg
ICAgICBtX2FjY2VwdGVkRXh0ZW5zaW9uc0J1aWxkZXIuYXBwZW5kKGl0ZXJhdG9yLT5rZXkpOwor
ICAgICAgICBpZiAoIWl0ZXJhdG9yLT52YWx1ZS5pc051bGwoKSkgewogICAgICAgICAgICAgbV9h
Y2NlcHRlZEV4dGVuc2lvbnNCdWlsZGVyLmFwcGVuZCgiPSIpOwotICAgICAgICAgICAgbV9hY2Nl
cHRlZEV4dGVuc2lvbnNCdWlsZGVyLmFwcGVuZChpdGVyYXRvci0+c2Vjb25kKTsKKyAgICAgICAg
ICAgIG1fYWNjZXB0ZWRFeHRlbnNpb25zQnVpbGRlci5hcHBlbmQoaXRlcmF0b3ItPnZhbHVlKTsK
ICAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQVhPYmplY3RDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FY
T2JqZWN0Q2FjaGUuY3BwCmluZGV4IDAyZDViZmIyMzllZTZiZGE0ZTg4MGIwM2U5MjNmYzM5ZWU2
NWEzYTYuLjVlOTUzNTNiNjYxMDI0MTE2NGZkNTBlZDkwYTUzMjY5YTA1MDdhYjcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcApAQCAtOTEsNyAr
OTEsNyBAQCBBWE9iamVjdENhY2hlOjp+QVhPYmplY3RDYWNoZSgpCiB7CiAgICAgSGFzaE1hcDxB
WElELCBSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4gPjo6aXRlcmF0b3IgZW5kID0gbV9vYmpl
Y3RzLmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDxBWElELCBSZWZQdHI8QWNjZXNzaWJpbGl0eU9i
amVjdD4gPjo6aXRlcmF0b3IgaXQgPSBtX29iamVjdHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7Ci0gICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iaiA9ICgqaXQpLnNlY29uZC5nZXQo
KTsKKyAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqID0gKCppdCkudmFsdWUuZ2V0KCk7
CiAgICAgICAgIGRldGFjaFdyYXBwZXIob2JqKTsKICAgICAgICAgb2JqLT5kZXRhY2goKTsKICAg
ICAgICAgcmVtb3ZlQVhJRChvYmopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvZ29iamVjdC9ET01PYmplY3RDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9n
b2JqZWN0L0RPTU9iamVjdENhY2hlLmNwcAppbmRleCAyZTdmMTA2ZTc5ZTMxYzczMTU0YWI5Y2Zh
YTE5YTU4OWU5ZGU3ZGQ1Li5kZDdkMDQ5NzE4YzgxMjJmMjRiMzhkYjg4M2U1YjZiNjRlMmVjMDY2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0RPTU9iamVjdENh
Y2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0RPTU9iamVjdENh
Y2hlLmNwcApAQCAtNzQsNyArNzQsNyBAQCB2b2lkIERPTU9iamVjdENhY2hlOjpjbGVhckJ5RnJh
bWUoV2ViQ29yZTo6RnJhbWUqIGZyYW1lKQogICAgIC8vIGl0ZXJhdGluZyB0aGUgY2FjaGUgaXRz
ZWxmLgogICAgIERPTU9iamVjdE1hcDo6aXRlcmF0b3IgZW5kID0gZG9tT2JqZWN0cygpLmVuZCgp
OwogICAgIGZvciAoRE9NT2JqZWN0TWFwOjppdGVyYXRvciBpdGVyID0gZG9tT2JqZWN0cygpLmJl
Z2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKLSAgICAgICAgRE9NT2JqZWN0Q2FjaGVEYXRh
KiBkYXRhID0gaXRlci0+c2Vjb25kOworICAgICAgICBET01PYmplY3RDYWNoZURhdGEqIGRhdGEg
PSBpdGVyLT52YWx1ZTsKICAgICAgICAgQVNTRVJUKGRhdGEpOwogICAgICAgICBpZiAoKCFmcmFt
ZSB8fCBkYXRhLT5mcmFtZSA9PSBmcmFtZSkgJiYgZGF0YS0+dGltZXNSZXR1cm5lZCkKICAgICAg
ICAgICAgIHRvVW5yZWYuYXBwZW5kKGRhdGEpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvRE9NT2JqZWN0SGFzaFRhYmxlTWFwLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9ET01PYmplY3RIYXNoVGFibGVNYXAuaAppbmRleCAyMTZiOTQ1YzQ5YjkxMWUzZjQ1
ZWZlNWE3ZTRjMTMyOTZmMzBlYjFiLi5lZGQ4NzAyMjljYmRmNjNkOTE5YmE4NTljZWVhNWQ5YzQx
OTNjNjFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01PYmplY3RI
YXNoVGFibGVNYXAuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01PYmplY3RI
YXNoVGFibGVNYXAuaApAQCAtMzksMTUgKzM5LDE1IEBAIHB1YmxpYzoKICAgICB+RE9NT2JqZWN0
SGFzaFRhYmxlTWFwKCkKICAgICB7CiAgICAgICAgIGZvciAoSGFzaE1hcDxjb25zdCBKU0M6Okhh
c2hUYWJsZSosIEpTQzo6SGFzaFRhYmxlPjo6aXRlcmF0b3IgaXRlciA9IG1fbWFwLmJlZ2luKCk7
IGl0ZXIgIT0gbV9tYXAuZW5kKCk7ICsraXRlcikKLSAgICAgICAgICAgIGl0ZXItPnNlY29uZC5k
ZWxldGVUYWJsZSgpOworICAgICAgICAgICAgaXRlci0+dmFsdWUuZGVsZXRlVGFibGUoKTsKICAg
ICB9CiAKICAgICBjb25zdCBKU0M6Okhhc2hUYWJsZSogZ2V0KGNvbnN0IEpTQzo6SGFzaFRhYmxl
KiBzdGF0aWNUYWJsZSkKICAgICB7CiAgICAgICAgIEhhc2hNYXA8Y29uc3QgSlNDOjpIYXNoVGFi
bGUqLCBKU0M6Okhhc2hUYWJsZT46Oml0ZXJhdG9yIGl0ZXIgPSBtX21hcC5maW5kKHN0YXRpY1Rh
YmxlKTsKICAgICAgICAgaWYgKGl0ZXIgIT0gbV9tYXAuZW5kKCkpCi0gICAgICAgICAgICByZXR1
cm4gJml0ZXItPnNlY29uZDsKLSAgICAgICAgcmV0dXJuICZtX21hcC5zZXQoc3RhdGljVGFibGUs
IEpTQzo6SGFzaFRhYmxlKCpzdGF0aWNUYWJsZSkpLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAg
ICAgICByZXR1cm4gJml0ZXItPnZhbHVlOworICAgICAgICByZXR1cm4gJm1fbWFwLnNldChzdGF0
aWNUYWJsZSwgSlNDOjpIYXNoVGFibGUoKnN0YXRpY1RhYmxlKSkuaXRlcmF0b3ItPnZhbHVlOwog
ICAgIH0KIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0RPTVdyYXBwZXJXb3JsZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01XcmFw
cGVyV29ybGQuY3BwCmluZGV4IGExZjg2ZDQyMzNkMTNiYTYwNmEyODQ1NDhiMmI2NzQ2ZWU3ZDhh
MmQuLjEwZDZiNGJjZjlkNWNiNTFlMWUyOGRlYTNmOThlYTBiMzRjMjcwZGMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTVdyYXBwZXJXb3JsZC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NV3JhcHBlcldvcmxkLmNwcApAQCAtMzQsNyArMzQs
NyBAQCB2b2lkIEpTU3RyaW5nT3duZXI6OmZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93
bj4gaGFuZGxlLCB2b2lkKiBjb250ZXh0KQogewogICAgIEpTU3RyaW5nKiBqc1N0cmluZyA9IGpz
Q2FzdDxKU1N0cmluZyo+KGhhbmRsZS5nZXQoKS5hc0NlbGwoKSk7CiAgICAgU3RyaW5nSW1wbCog
c3RyaW5nSW1wbCA9IHN0YXRpY19jYXN0PFN0cmluZ0ltcGwqPihjb250ZXh0KTsKLSAgICBBU1NF
UlRfVU5VU0VEKGpzU3RyaW5nLCBtX3dvcmxkLT5tX3N0cmluZ0NhY2hlLmZpbmQoc3RyaW5nSW1w
bCktPnNlY29uZC53YXMoanNTdHJpbmcpKTsKKyAgICBBU1NFUlRfVU5VU0VEKGpzU3RyaW5nLCBt
X3dvcmxkLT5tX3N0cmluZ0NhY2hlLmZpbmQoc3RyaW5nSW1wbCktPnZhbHVlLndhcyhqc1N0cmlu
ZykpOwogICAgIG1fd29ybGQtPm1fc3RyaW5nQ2FjaGUucmVtb3ZlKHN0cmluZ0ltcGwpOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAppbmRleCAzNDZj
MjY3OWRmZTkzN2MwYzU3Y2I3NzkxOTlhZDAyZDU3NzdjZTQzLi40ZGQ0YTAyNTMzMWVhYzI1MWY0
YzMyNzJmYTk2MDZmMGE3NjFhMjVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTUJpbmRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NQmluZGluZy5jcHAKQEAgLTI1OCw3ICsyNTgsNyBAQCBTdHJ1Y3R1cmUqIGNhY2hlRE9NU3Ry
dWN0dXJlKEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0
dQogewogICAgIEpTRE9NU3RydWN0dXJlTWFwJiBzdHJ1Y3R1cmVzID0gZ2xvYmFsT2JqZWN0LT5z
dHJ1Y3R1cmVzKCk7CiAgICAgQVNTRVJUKCFzdHJ1Y3R1cmVzLmNvbnRhaW5zKGNsYXNzSW5mbykp
OwotICAgIHJldHVybiBzdHJ1Y3R1cmVzLnNldChjbGFzc0luZm8sIFdyaXRlQmFycmllcjxTdHJ1
Y3R1cmU+KGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVy
ZSkpLml0ZXJhdG9yLT5zZWNvbmQuZ2V0KCk7CisgICAgcmV0dXJuIHN0cnVjdHVyZXMuc2V0KGNs
YXNzSW5mbywgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4oZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRh
KCksIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKSkuaXRlcmF0b3ItPnZhbHVlLmdldCgpOwogfQog
CiBKU0M6OkpTT2JqZWN0KiB0b0pTU2VxdWVuY2UoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZh
bHVlLCB1bnNpZ25lZCYgbGVuZ3RoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01CaW5kaW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJp
bmRpbmcuaAppbmRleCA0YWY4MzUzMjgwNjdkYmY2MDU1NmJhZjMwMzA5OGUzMzhmZjIyMGViLi5m
MjRjYTUyZTI4YjBkOGRlNjViMGExZGQyY2M5OWE0OTY2ZTQ5MTllIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaApAQCAtMTUwLDcgKzE1MCw3IEBAIGVudW0gUGFy
YW1ldGVyRGVmYXVsdFBvbGljeSB7CiAgICAgewogICAgICAgICBpZiAoY2xlYXJJbmxpbmVDYWNo
ZWRXcmFwcGVyKHdvcmxkLCBkb21PYmplY3QsIHdyYXBwZXIpKQogICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICBBU1NFUlQod29ybGQtPm1fd3JhcHBlcnMuZmluZChkb21PYmplY3QpLT5zZWNv
bmQud2FzKHdyYXBwZXIpKTsKKyAgICAgICAgQVNTRVJUKHdvcmxkLT5tX3dyYXBwZXJzLmZpbmQo
ZG9tT2JqZWN0KS0+dmFsdWUud2FzKHdyYXBwZXIpKTsKICAgICAgICAgd29ybGQtPm1fd3JhcHBl
cnMucmVtb3ZlKGRvbU9iamVjdCk7CiAgICAgfQogICAgIApAQCAtMzUxLDcgKzM1MSw3IEBAIGVu
dW0gUGFyYW1ldGVyRGVmYXVsdFBvbGljeSB7CiAgICAgICAgIEpTU3RyaW5nQ2FjaGUmIHN0cmlu
Z0NhY2hlID0gY3VycmVudFdvcmxkKGV4ZWMpLT5tX3N0cmluZ0NhY2hlOwogICAgICAgICBKU1N0
cmluZ0NhY2hlOjppdGVyYXRvciBpdCA9IHN0cmluZ0NhY2hlLmZpbmQoc3RyaW5nSW1wbCk7CiAg
ICAgICAgIGlmIChpdCAhPSBzdHJpbmdDYWNoZS5lbmQoKSkKLSAgICAgICAgICAgIHJldHVybiBp
dC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgcmV0dXJuIGl0LT52YWx1ZS5nZXQoKTsKIAog
ICAgICAgICByZXR1cm4ganNTdHJpbmdTbG93Q2FzZShleGVjLCBzdHJpbmdDYWNoZSwgc3RyaW5n
SW1wbCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01HbG9iYWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9i
YWxPYmplY3QuY3BwCmluZGV4IDMxZmZiNTRkNDVmYmRhNGExNjdlYWI1NDE4MzE5MWZhNjgxYjg4
NWMuLmU0MDU4YjhhZTdkZWEwYjI5MjhmNTk1NGNlYTcwOGVkZmExMDllZWEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAKQEAgLTg4LDEx
ICs4OCwxMSBAQCB2b2lkIEpTRE9NR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAKICAgICBKU0RPTVN0cnVjdHVyZU1hcDo6aXRl
cmF0b3IgZW5kID0gdGhpc09iamVjdC0+c3RydWN0dXJlcygpLmVuZCgpOwogICAgIGZvciAoSlNE
T01TdHJ1Y3R1cmVNYXA6Oml0ZXJhdG9yIGl0ID0gdGhpc09iamVjdC0+c3RydWN0dXJlcygpLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgdmlzaXRvci5hcHBlbmQoJml0LT5zZWNv
bmQpOworICAgICAgICB2aXNpdG9yLmFwcGVuZCgmaXQtPnZhbHVlKTsKIAogICAgIEpTRE9NQ29u
c3RydWN0b3JNYXA6Oml0ZXJhdG9yIGVuZDIgPSB0aGlzT2JqZWN0LT5jb25zdHJ1Y3RvcnMoKS5l
bmQoKTsKICAgICBmb3IgKEpTRE9NQ29uc3RydWN0b3JNYXA6Oml0ZXJhdG9yIGl0MiA9IHRoaXNP
YmplY3QtPmNvbnN0cnVjdG9ycygpLmJlZ2luKCk7IGl0MiAhPSBlbmQyOyArK2l0MikKLSAgICAg
ICAgdmlzaXRvci5hcHBlbmQoJml0Mi0+c2Vjb25kKTsKKyAgICAgICAgdmlzaXRvci5hcHBlbmQo
Jml0Mi0+dmFsdWUpOwogCiAgICAgaWYgKHRoaXNPYmplY3QtPm1faW5qZWN0ZWRTY3JpcHQpCiAg
ICAgICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2luamVjdGVkU2NyaXB0KTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oCmluZGV4IDc0
ZjM1YjBiNzkyYzFjMDYwMzdkMWFkZWYzYjIzMTM2NThhOTJkYWQuLjQ5YTliMWE2MmVmNjc2ZDEx
MWQ1NzE4ZGVkYjcwZWQ5ZjQ4M2IwNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01HbG9iYWxPYmplY3QuaApAQCAtOTUsNyArOTUsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIEpTQzo6SlNPYmplY3QqIGNvbnN0cnVjdG9yID0gQ29uc3RydWN0b3JDbGFz
czo6Y3JlYXRlKGV4ZWMsIENvbnN0cnVjdG9yQ2xhc3M6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5n
bG9iYWxEYXRhKCksIGNvbnN0X2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3Qp
LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSwgY29uc3RfY2FzdDxKU0RPTUdsb2Jh
bE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOwogICAgICAgICBBU1NFUlQoIWNvbnN0X2Nhc3Q8SlNE
T01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpLT5jb25zdHJ1Y3RvcnMoKS5jb250YWlucygm
Q29uc3RydWN0b3JDbGFzczo6c19pbmZvKSk7CiAgICAgICAgIEpTQzo6V3JpdGVCYXJyaWVyPEpT
Qzo6SlNPYmplY3Q+IHRlbXA7Ci0gICAgICAgIGNvbnN0X2Nhc3Q8SlNET01HbG9iYWxPYmplY3Qq
PihnbG9iYWxPYmplY3QpLT5jb25zdHJ1Y3RvcnMoKS5hZGQoJkNvbnN0cnVjdG9yQ2xhc3M6OnNf
aW5mbywgdGVtcCkuaXRlcmF0b3ItPnNlY29uZC5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9i
YWxPYmplY3QsIGNvbnN0cnVjdG9yKTsKKyAgICAgICAgY29uc3RfY2FzdDxKU0RPTUdsb2JhbE9i
amVjdCo+KGdsb2JhbE9iamVjdCktPmNvbnN0cnVjdG9ycygpLmFkZCgmQ29uc3RydWN0b3JDbGFz
czo6c19pbmZvLCB0ZW1wKS5pdGVyYXRvci0+dmFsdWUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwg
Z2xvYmFsT2JqZWN0LCBjb25zdHJ1Y3Rvcik7CiAgICAgICAgIHJldHVybiBjb25zdHJ1Y3RvcjsK
ICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1BhZ2VTY3Jp
cHREZWJ1Z1NlcnZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9QYWdlU2NyaXB0
RGVidWdTZXJ2ZXIuY3BwCmluZGV4IGVmZTRiNjc2OGZmNzYzZTAwN2E2MjY0ZjcyNDJkNmFhMjJl
OTczM2QuLmNhYzZjZTIxYTJkYTYwYzY3NDNlMzI5NDZhYzA2ZDk0YzI1MjBkNjYgMTAwNzU1Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUGFnZVNjcmlwdERlYnVnU2VydmVyLmNw
cApAQCAtODUsOSArODUsOSBAQCB2b2lkIFBhZ2VTY3JpcHREZWJ1Z1NlcnZlcjo6YWRkTGlzdGVu
ZXIoU2NyaXB0RGVidWdMaXN0ZW5lciogbGlzdGVuZXIsIFBhZ2UqIHBhZwogCiAgICAgUGFnZUxp
c3RlbmVyc01hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fcGFnZUxpc3RlbmVyc01hcC5hZGQocGFn
ZSwgMCk7CiAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXN1bHQuaXRlcmF0
b3ItPnNlY29uZCA9IG5ldyBMaXN0ZW5lclNldDsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZSA9IG5ldyBMaXN0ZW5lclNldDsKIAotICAgIExpc3RlbmVyU2V0KiBsaXN0ZW5lcnMgPSBy
ZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBMaXN0ZW5lclNldCogbGlzdGVuZXJzID0gcmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAgICBsaXN0ZW5lcnMtPmFkZChsaXN0ZW5lcik7CiAKICAg
ICByZWNvbXBpbGVBbGxKU0Z1bmN0aW9uc1Nvb24oKTsKQEAgLTEwMyw3ICsxMDMsNyBAQCB2b2lk
IFBhZ2VTY3JpcHREZWJ1Z1NlcnZlcjo6cmVtb3ZlTGlzdGVuZXIoU2NyaXB0RGVidWdMaXN0ZW5l
ciogbGlzdGVuZXIsIFBhZ2UqCiAgICAgaWYgKGl0ID09IG1fcGFnZUxpc3RlbmVyc01hcC5lbmQo
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgTGlzdGVuZXJTZXQqIGxpc3RlbmVycyA9IGl0LT5z
ZWNvbmQ7CisgICAgTGlzdGVuZXJTZXQqIGxpc3RlbmVycyA9IGl0LT52YWx1ZTsKICAgICBsaXN0
ZW5lcnMtPnJlbW92ZShsaXN0ZW5lcik7CiAgICAgaWYgKGxpc3RlbmVycy0+aXNFbXB0eSgpKSB7
CiAgICAgICAgIG1fcGFnZUxpc3RlbmVyc01hcC5yZW1vdmUoaXQpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENhY2hlZEZyYW1lRGF0YS5jcHAKaW5kZXggMjEw
MGM2YjAyNjFiMmRmZDI1ZjczYTRkN2FiMzkzOWE1ZTIyODYzZC4uZDI0MjZhMjBiYTJjNzJhYTRj
MjNmYjViMjFiMzkwYThhZjI2YjJkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY3JpcHRDYWNoZWRGcmFtZURhdGEuY3BwCkBAIC01Myw4ICs1Myw4IEBAIFNjcmlw
dENhY2hlZEZyYW1lRGF0YTo6U2NyaXB0Q2FjaGVkRnJhbWVEYXRhKEZyYW1lKiBmcmFtZSkKIAog
ICAgIFNjcmlwdENvbnRyb2xsZXI6OlNoZWxsTWFwOjppdGVyYXRvciB3aW5kb3dTaGVsbHNFbmQg
PSB3aW5kb3dTaGVsbHMuZW5kKCk7CiAgICAgZm9yIChTY3JpcHRDb250cm9sbGVyOjpTaGVsbE1h
cDo6aXRlcmF0b3IgaXRlciA9IHdpbmRvd1NoZWxscy5iZWdpbigpOyBpdGVyICE9IHdpbmRvd1No
ZWxsc0VuZDsgKytpdGVyKSB7Ci0gICAgICAgIEpTRE9NV2luZG93KiB3aW5kb3cgPSBpdGVyLT5z
ZWNvbmQtPndpbmRvdygpOwotICAgICAgICBtX3dpbmRvd3MuYWRkKGl0ZXItPmZpcnN0LmdldCgp
LCBTdHJvbmc8SlNET01XaW5kb3c+KHdpbmRvdy0+Z2xvYmFsRGF0YSgpLCB3aW5kb3cpKTsKKyAg
ICAgICAgSlNET01XaW5kb3cqIHdpbmRvdyA9IGl0ZXItPnZhbHVlLT53aW5kb3coKTsKKyAgICAg
ICAgbV93aW5kb3dzLmFkZChpdGVyLT5rZXkuZ2V0KCksIFN0cm9uZzxKU0RPTVdpbmRvdz4od2lu
ZG93LT5nbG9iYWxEYXRhKCksIHdpbmRvdykpOwogICAgIH0KIAogICAgIHNjcmlwdENvbnRyb2xs
ZXItPmF0dGFjaERlYnVnZ2VyKDApOwpAQCAtNzQsOCArNzQsOCBAQCB2b2lkIFNjcmlwdENhY2hl
ZEZyYW1lRGF0YTo6cmVzdG9yZShGcmFtZSogZnJhbWUpCiAKICAgICBTY3JpcHRDb250cm9sbGVy
OjpTaGVsbE1hcDo6aXRlcmF0b3Igd2luZG93U2hlbGxzRW5kID0gd2luZG93U2hlbGxzLmVuZCgp
OwogICAgIGZvciAoU2NyaXB0Q29udHJvbGxlcjo6U2hlbGxNYXA6Oml0ZXJhdG9yIGl0ZXIgPSB3
aW5kb3dTaGVsbHMuYmVnaW4oKTsgaXRlciAhPSB3aW5kb3dTaGVsbHNFbmQ7ICsraXRlcikgewot
ICAgICAgICBET01XcmFwcGVyV29ybGQqIHdvcmxkID0gaXRlci0+Zmlyc3QuZ2V0KCk7Ci0gICAg
ICAgIEpTRE9NV2luZG93U2hlbGwqIHdpbmRvd1NoZWxsID0gaXRlci0+c2Vjb25kLmdldCgpOwor
ICAgICAgICBET01XcmFwcGVyV29ybGQqIHdvcmxkID0gaXRlci0+a2V5LmdldCgpOworICAgICAg
ICBKU0RPTVdpbmRvd1NoZWxsKiB3aW5kb3dTaGVsbCA9IGl0ZXItPnZhbHVlLmdldCgpOwogCiAg
ICAgICAgIGlmIChKU0RPTVdpbmRvdyogd2luZG93ID0gbV93aW5kb3dzLmdldCh3b3JsZCkuZ2V0
KCkpCiAgICAgICAgICAgICB3aW5kb3dTaGVsbC0+c2V0V2luZG93KHdpbmRvdy0+Z2xvYmFsRGF0
YSgpLCB3aW5kb3cpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2Ny
aXB0Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250
cm9sbGVyLmNwcAppbmRleCA0MTQzZjQ0YjUxNGY2OWVkY2RjM2IzMGUzNWJjMGQ2NjlkOTI1NmQz
Li5lMjc4MmU0Njk0YmU5NWI1NGQ1MDYwMmZlN2NkYThlNjM1ODVmZDY5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcApAQCAtOTMsNyArOTMs
NyBAQCBTY3JpcHRDb250cm9sbGVyOjp+U2NyaXB0Q29udHJvbGxlcigpCiAgICAgLy8gSXQncyBs
aWtlbHkgdGhhdCBkZXN0cm95aW5nIG1fd2luZG93U2hlbGxzIHdpbGwgY3JlYXRlIGEgbG90IG9m
IGdhcmJhZ2UuCiAgICAgaWYgKCFtX3dpbmRvd1NoZWxscy5pc0VtcHR5KCkpIHsKICAgICAgICAg
d2hpbGUgKCFtX3dpbmRvd1NoZWxscy5pc0VtcHR5KCkpCi0gICAgICAgICAgICBkZXN0cm95V2lu
ZG93U2hlbGwobV93aW5kb3dTaGVsbHMuYmVnaW4oKS0+Zmlyc3QuZ2V0KCkpOworICAgICAgICAg
ICAgZGVzdHJveVdpbmRvd1NoZWxsKG1fd2luZG93U2hlbGxzLmJlZ2luKCktPmtleS5nZXQoKSk7
CiAgICAgICAgIGdjQ29udHJvbGxlcigpLmdhcmJhZ2VDb2xsZWN0U29vbigpOwogICAgIH0KIH0K
QEAgLTE4MCw3ICsxODAsNyBAQCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmNsZWFyV2luZG93U2hl
bGwoYm9vbCBnb2luZ0ludG9QYWdlQ2FjaGUpCiAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKIAogICAgIGZvciAoU2hlbGxNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3dpbmRv
d1NoZWxscy5iZWdpbigpOyBpdGVyICE9IG1fd2luZG93U2hlbGxzLmVuZCgpOyArK2l0ZXIpIHsK
LSAgICAgICAgSlNET01XaW5kb3dTaGVsbCogd2luZG93U2hlbGwgPSBpdGVyLT5zZWNvbmQuZ2V0
KCk7CisgICAgICAgIEpTRE9NV2luZG93U2hlbGwqIHdpbmRvd1NoZWxsID0gaXRlci0+dmFsdWUu
Z2V0KCk7CiAKICAgICAgICAgLy8gQ2xlYXIgdGhlIGRlYnVnZ2VyIGZyb20gdGhlIGN1cnJlbnQg
d2luZG93IGJlZm9yZSBzZXR0aW5nIHRoZSBuZXcgd2luZG93LgogICAgICAgICBhdHRhY2hEZWJ1
Z2dlcih3aW5kb3dTaGVsbCwgMCk7CkBAIC0yNTYsNyArMjU2LDcgQEAgYm9vbCBTY3JpcHRDb250
cm9sbGVyOjpjYW5BY2Nlc3NGcm9tQ3VycmVudE9yaWdpbihGcmFtZSAqZnJhbWUpCiB2b2lkIFNj
cmlwdENvbnRyb2xsZXI6OmF0dGFjaERlYnVnZ2VyKEpTQzo6RGVidWdnZXIqIGRlYnVnZ2VyKQog
ewogICAgIGZvciAoU2hlbGxNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3dpbmRvd1NoZWxscy5iZWdp
bigpOyBpdGVyICE9IG1fd2luZG93U2hlbGxzLmVuZCgpOyArK2l0ZXIpCi0gICAgICAgIGF0dGFj
aERlYnVnZ2VyKGl0ZXItPnNlY29uZC5nZXQoKSwgZGVidWdnZXIpOworICAgICAgICBhdHRhY2hE
ZWJ1Z2dlcihpdGVyLT52YWx1ZS5nZXQoKSwgZGVidWdnZXIpOwogfQogCiB2b2lkIFNjcmlwdENv
bnRyb2xsZXI6OmF0dGFjaERlYnVnZ2VyKEpTRE9NV2luZG93U2hlbGwqIHNoZWxsLCBKU0M6OkRl
YnVnZ2VyKiBkZWJ1Z2dlcikKQEAgLTI3OCw3ICsyNzgsNyBAQCB2b2lkIFNjcmlwdENvbnRyb2xs
ZXI6OnVwZGF0ZURvY3VtZW50KCkKIAogICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CiAgICAgZm9yIChTaGVsbE1hcDo6aXRlcmF0b3IgaXRlciA9IG1fd2luZG93U2hlbGxz
LmJlZ2luKCk7IGl0ZXIgIT0gbV93aW5kb3dTaGVsbHMuZW5kKCk7ICsraXRlcikKLSAgICAgICAg
aXRlci0+c2Vjb25kLT53aW5kb3coKS0+dXBkYXRlRG9jdW1lbnQoKTsKKyAgICAgICAgaXRlci0+
dmFsdWUtPndpbmRvdygpLT51cGRhdGVEb2N1bWVudCgpOwogfQogCiB2b2lkIFNjcmlwdENvbnRy
b2xsZXI6OnVwZGF0ZVNlY3VyaXR5T3JpZ2luKCkKQEAgLTMxNCw3ICszMTQsNyBAQCBQYXNzUmVm
UHRyPEJpbmRpbmdzOjpSb290T2JqZWN0PiBTY3JpcHRDb250cm9sbGVyOjpjcmVhdGVSb290T2Jq
ZWN0KHZvaWQqIG5hdGl2ZQogewogICAgIFJvb3RPYmplY3RNYXA6Oml0ZXJhdG9yIGl0ID0gbV9y
b290T2JqZWN0cy5maW5kKG5hdGl2ZUhhbmRsZSk7CiAgICAgaWYgKGl0ICE9IG1fcm9vdE9iamVj
dHMuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gaXQt
PnZhbHVlOwogCiAgICAgUmVmUHRyPEJpbmRpbmdzOjpSb290T2JqZWN0PiByb290T2JqZWN0ID0g
QmluZGluZ3M6OlJvb3RPYmplY3Q6OmNyZWF0ZShuYXRpdmVIYW5kbGUsIGdsb2JhbE9iamVjdChw
bHVnaW5Xb3JsZCgpKSk7CiAKQEAgLTM5OSw3ICszOTksNyBAQCB2b2lkIFNjcmlwdENvbnRyb2xs
ZXI6OmNsZWFudXBTY3JpcHRPYmplY3RzRm9yUGx1Z2luKHZvaWQqIG5hdGl2ZUhhbmRsZSkKICAg
ICBpZiAoaXQgPT0gbV9yb290T2JqZWN0cy5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
aXQtPnNlY29uZC0+aW52YWxpZGF0ZSgpOworICAgIGl0LT52YWx1ZS0+aW52YWxpZGF0ZSgpOwog
ICAgIG1fcm9vdE9iamVjdHMucmVtb3ZlKGl0KTsKIH0KIApAQCAtNDA5LDcgKzQwOSw3IEBAIHZv
aWQgU2NyaXB0Q29udHJvbGxlcjo6Y2xlYXJTY3JpcHRPYmplY3RzKCkKIAogICAgIFJvb3RPYmpl
Y3RNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcm9vdE9iamVjdHMuZW5kKCk7CiAgICAgZm9y
IChSb290T2JqZWN0TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fcm9vdE9iamVjdHMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5pbnZhbGlkYXRlKCk7Cisg
ICAgICAgIGl0LT52YWx1ZS0+aW52YWxpZGF0ZSgpOwogCiAgICAgbV9yb290T2JqZWN0cy5jbGVh
cigpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250
cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmgK
aW5kZXggNWUxNTFhYWUzM2Y4MTYwZTA2ZDQ3ODVhMmRlOWQwOWRhYWFhODIxYy4uZjY0Zjg5MDlh
NjBkNzNhMWUyY2JmNTA5MGRkOWE4NTA2YzIwZWI3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuaApAQCAtNzIsMTIgKzcyLDEyIEBAIHB1YmxpYzoK
ICAgICBKU0RPTVdpbmRvd1NoZWxsKiB3aW5kb3dTaGVsbChET01XcmFwcGVyV29ybGQqIHdvcmxk
KQogICAgIHsKICAgICAgICAgU2hlbGxNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3dpbmRvd1NoZWxs
cy5maW5kKHdvcmxkKTsKLSAgICAgICAgcmV0dXJuIChpdGVyICE9IG1fd2luZG93U2hlbGxzLmVu
ZCgpKSA/IGl0ZXItPnNlY29uZC5nZXQoKSA6IGluaXRTY3JpcHQod29ybGQpOworICAgICAgICBy
ZXR1cm4gKGl0ZXIgIT0gbV93aW5kb3dTaGVsbHMuZW5kKCkpID8gaXRlci0+dmFsdWUuZ2V0KCkg
OiBpbml0U2NyaXB0KHdvcmxkKTsKICAgICB9CiAgICAgSlNET01XaW5kb3dTaGVsbCogZXhpc3Rp
bmdXaW5kb3dTaGVsbChET01XcmFwcGVyV29ybGQqIHdvcmxkKSBjb25zdAogICAgIHsKICAgICAg
ICAgU2hlbGxNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX3dpbmRvd1NoZWxscy5maW5kKHdv
cmxkKTsKLSAgICAgICAgcmV0dXJuIChpdGVyICE9IG1fd2luZG93U2hlbGxzLmVuZCgpKSA/IGl0
ZXItPnNlY29uZC5nZXQoKSA6IDA7CisgICAgICAgIHJldHVybiAoaXRlciAhPSBtX3dpbmRvd1No
ZWxscy5lbmQoKSkgPyBpdGVyLT52YWx1ZS5nZXQoKSA6IDA7CiAgICAgfQogICAgIEpTRE9NV2lu
ZG93KiBnbG9iYWxPYmplY3QoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCkKICAgICB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHAKaW5kZXggMWQ2
MTE3Y2ZkZWMyMzIxNjQ1MDVlZmQ5YTY0N2U1Y2YwZTE1NWQ0YS4uMWY4ZmQyMTNlZmVlZGEwNjZh
YjMwNGNiMjg2NGI5N2I4YjY3Y2IwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NjcmlwdERlYnVnU2VydmVyLmNwcApAQCAtNzYsOSArNzYsOSBAQCBTdHJpbmcgU2NyaXB0
RGVidWdTZXJ2ZXI6OnNldEJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgY29uc3Qg
U2NyaXB0QnJlYQogICAgIFNvdXJjZUlkVG9CcmVha3BvaW50c01hcDo6aXRlcmF0b3IgaXQgPSBt
X3NvdXJjZUlkVG9CcmVha3BvaW50cy5maW5kKHNvdXJjZUlEVmFsdWUpOwogICAgIGlmIChpdCA9
PSBtX3NvdXJjZUlkVG9CcmVha3BvaW50cy5lbmQoKSkKICAgICAgICAgaXQgPSBtX3NvdXJjZUlk
VG9CcmVha3BvaW50cy5zZXQoc291cmNlSURWYWx1ZSwgTGluZVRvQnJlYWtwb2ludE1hcCgpKS5p
dGVyYXRvcjsKLSAgICBpZiAoaXQtPnNlY29uZC5jb250YWlucyhzY3JpcHRCcmVha3BvaW50Lmxp
bmVOdW1iZXIgKyAxKSkKKyAgICBpZiAoaXQtPnZhbHVlLmNvbnRhaW5zKHNjcmlwdEJyZWFrcG9p
bnQubGluZU51bWJlciArIDEpKQogICAgICAgICByZXR1cm4gIiI7Ci0gICAgaXQtPnNlY29uZC5z
ZXQoc2NyaXB0QnJlYWtwb2ludC5saW5lTnVtYmVyICsgMSwgc2NyaXB0QnJlYWtwb2ludCk7Cisg
ICAgaXQtPnZhbHVlLnNldChzY3JpcHRCcmVha3BvaW50LmxpbmVOdW1iZXIgKyAxLCBzY3JpcHRC
cmVha3BvaW50KTsKICAgICAqYWN0dWFsTGluZU51bWJlciA9IHNjcmlwdEJyZWFrcG9pbnQubGlu
ZU51bWJlcjsKICAgICAvLyBGSVhNRShXSzUzMDAzKTogaW1wbGVtZW50IHNldHRpbmcgYnJlYWtw
b2ludHMgYnkgbGluZTpjb2x1bW4uCiAgICAgKmFjdHVhbENvbHVtbk51bWJlciA9IDA7CkBAIC0x
MDAsNyArMTAwLDcgQEAgdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6cmVtb3ZlQnJlYWtwb2ludChj
b25zdCBTdHJpbmcmIGJyZWFrcG9pbnRJZCkKICAgICAgICAgcmV0dXJuOwogICAgIFNvdXJjZUlk
VG9CcmVha3BvaW50c01hcDo6aXRlcmF0b3IgaXQgPSBtX3NvdXJjZUlkVG9CcmVha3BvaW50cy5m
aW5kKHNvdXJjZUlEVmFsdWUpOwogICAgIGlmIChpdCAhPSBtX3NvdXJjZUlkVG9CcmVha3BvaW50
cy5lbmQoKSkKLSAgICAgICAgaXQtPnNlY29uZC5yZW1vdmUobGluZU51bWJlciArIDEpOworICAg
ICAgICBpdC0+dmFsdWUucmVtb3ZlKGxpbmVOdW1iZXIgKyAxKTsKIH0KIAogYm9vbCBTY3JpcHRE
ZWJ1Z1NlcnZlcjo6aGFzQnJlYWtwb2ludChpbnRwdHJfdCBzb3VyY2VJRCwgY29uc3QgVGV4dFBv
c2l0aW9uJiBwb3NpdGlvbikgY29uc3QKQEAgLTExNCwxNiArMTE0LDE2IEBAIGJvb2wgU2NyaXB0
RGVidWdTZXJ2ZXI6Omhhc0JyZWFrcG9pbnQoaW50cHRyX3Qgc291cmNlSUQsIGNvbnN0IFRleHRQ
b3NpdGlvbiYgcG9zCiAgICAgaW50IGxpbmVOdW1iZXIgPSBwb3NpdGlvbi5tX2xpbmUub25lQmFz
ZWRJbnQoKTsKICAgICBpZiAobGluZU51bWJlciA8PSAwKQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgTGluZVRvQnJlYWtwb2ludE1hcDo6Y29uc3RfaXRlcmF0b3IgYnJlYWtJdCA9IGl0LT5z
ZWNvbmQuZmluZChsaW5lTnVtYmVyKTsKLSAgICBpZiAoYnJlYWtJdCA9PSBpdC0+c2Vjb25kLmVu
ZCgpKQorICAgIExpbmVUb0JyZWFrcG9pbnRNYXA6OmNvbnN0X2l0ZXJhdG9yIGJyZWFrSXQgPSBp
dC0+dmFsdWUuZmluZChsaW5lTnVtYmVyKTsKKyAgICBpZiAoYnJlYWtJdCA9PSBpdC0+dmFsdWUu
ZW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIEFuIGVtcHR5IGNvbmRpdGlv
biBjb3VudHMgYXMgbm8gY29uZGl0aW9uIHdoaWNoIGlzIGVxdWl2YWxlbnQgdG8gInRydWUiLgot
ICAgIGlmIChicmVha0l0LT5zZWNvbmQuY29uZGl0aW9uLmlzRW1wdHkoKSkKKyAgICBpZiAoYnJl
YWtJdC0+dmFsdWUuY29uZGl0aW9uLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAK
ICAgICBKU1ZhbHVlIGV4Y2VwdGlvbjsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IG1fY3VycmVudENh
bGxGcmFtZS0+ZXZhbHVhdGUoc3RyaW5nVG9VU3RyaW5nKGJyZWFrSXQtPnNlY29uZC5jb25kaXRp
b24pLCBleGNlcHRpb24pOworICAgIEpTVmFsdWUgcmVzdWx0ID0gbV9jdXJyZW50Q2FsbEZyYW1l
LT5ldmFsdWF0ZShzdHJpbmdUb1VTdHJpbmcoYnJlYWtJdC0+dmFsdWUuY29uZGl0aW9uKSwgZXhj
ZXB0aW9uKTsKICAgICBpZiAoZXhjZXB0aW9uKSB7CiAgICAgICAgIC8vIEFuIGVycm9uZW91cyBj
b25kaXRpb24gY291bnRzIGFzICJmYWxzZSIuCiAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3Bw
CmluZGV4IDdjNzE2YzBiYTFlMmY5MWJmNTA2MTJlODM5ZGU0ZWJlZjNmNDQyNDYuLjZjY2I2Njg0
MmY1ODY1ODdhMDNiOTE4Y2M4ZjQyOGE2N2ViOWIxMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcApAQCAtMzk3LDggKzM5
Nyw4IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIEhhbmRsZSBkdXBsaWNhdGUgcmVmZXJlbmNlcwog
ICAgICAgICBpZiAoZm91bmQgIT0gbV9vYmplY3RQb29sLmVuZCgpKSB7CiAgICAgICAgICAgICB3
cml0ZShPYmplY3RSZWZlcmVuY2VUYWcpOwotICAgICAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0
PGludDMyX3Q+KGZvdW5kLT5zZWNvbmQpIDwgbV9vYmplY3RQb29sLnNpemUoKSk7Ci0gICAgICAg
ICAgICB3cml0ZU9iamVjdEluZGV4KGZvdW5kLT5zZWNvbmQpOworICAgICAgICAgICAgQVNTRVJU
KHN0YXRpY19jYXN0PGludDMyX3Q+KGZvdW5kLT52YWx1ZSkgPCBtX29iamVjdFBvb2wuc2l6ZSgp
KTsKKyAgICAgICAgICAgIHdyaXRlT2JqZWN0SW5kZXgoZm91bmQtPnZhbHVlKTsKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKQEAgLTYzMSw3ICs2MzEsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgIE9iamVjdFBvb2w6Oml0ZXJhdG9yIGluZGV4ID0gbV90cmFuc2Zl
cnJlZE1lc3NhZ2VQb3J0cy5maW5kKG9iaik7CiAgICAgICAgICAgICAgICAgaWYgKGluZGV4ICE9
IG1fdHJhbnNmZXJyZWRNZXNzYWdlUG9ydHMuZW5kKCkpIHsKICAgICAgICAgICAgICAgICAgICAg
d3JpdGUoTWVzc2FnZVBvcnRSZWZlcmVuY2VUYWcpOwotICAgICAgICAgICAgICAgICAgICB3cml0
ZShpbmRleC0+c2Vjb25kKTsKKyAgICAgICAgICAgICAgICAgICAgd3JpdGUoaW5kZXgtPnZhbHVl
KTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTY0NSw3ICs2NDUsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgIE9iamVjdFBvb2w6Oml0ZXJhdG9yIGluZGV4ID0gbV90cmFuc2Zl
cnJlZEFycmF5QnVmZmVycy5maW5kKG9iaik7CiAgICAgICAgICAgICAgICAgaWYgKGluZGV4ICE9
IG1fdHJhbnNmZXJyZWRBcnJheUJ1ZmZlcnMuZW5kKCkpIHsKICAgICAgICAgICAgICAgICAgICAg
d3JpdGUoQXJyYXlCdWZmZXJUcmFuc2ZlclRhZyk7Ci0gICAgICAgICAgICAgICAgICAgIHdyaXRl
KGluZGV4LT5zZWNvbmQpOworICAgICAgICAgICAgICAgICAgICB3cml0ZShpbmRleC0+dmFsdWUp
OwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgaWYgKCFzdGFydE9iamVjdEludGVybmFsKG9iaikpIC8vIGhhbmRsZSBk
dXBsaWNhdGVzCkBAIC03NDQsNyArNzQ0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgU3RyaW5nQ29u
c3RhbnRQb29sOjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gbV9jb25zdGFudFBvb2wuYWRkKHN0ci5p
bXBsKCksIG1fY29uc3RhbnRQb29sLnNpemUoKSk7CiAgICAgICAgIGlmICghYWRkUmVzdWx0Lmlz
TmV3RW50cnkpIHsKICAgICAgICAgICAgIHdyaXRlKFN0cmluZ1Bvb2xUYWcpOwotICAgICAgICAg
ICAgd3JpdGVTdHJpbmdJbmRleChhZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7CisgICAgICAg
ICAgICB3cml0ZVN0cmluZ0luZGV4KGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KaW5kZXggM2M5YWU3NjU0ZjI3MTgzMDdhOGY5
YTI0ZTVhZThkNjVjMWM0ODY4OS4uMTI2OTFiZDNkOTc0MDE4NDI1NzUzOGU5ZDdmYjRmZDQ0ZmJh
ZTAyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9yVjgucG0KKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9yVjgucG0KQEAgLTI4MDksNyArMjgwOSw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5j
dGlvblRlbXBsYXRlPiAke2NsYXNzTmFtZX06OkdldFJhd1RlbXBsYXRlKCkKICAgICBWOEJpbmRp
bmdQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpjdXJyZW50
KCk7CiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciBy
ZXN1bHQgPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwogICAgIGlmIChyZXN1
bHQgIT0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAogICAgIHY4OjpIYW5k
bGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1w
bGF0ZT4gdGVtcGwgPSBjcmVhdGVSYXdUZW1wbGF0ZSgpOwpAQCAtMjgyMiw3ICsyODIyLDcgQEAg
djg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+ICR7Y2xhc3NOYW1lfTo6R2V0VGVt
cGxhdGUoKQogICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhKiBkYXRhID0gVjhCaW5kaW5nUGVy
SXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6VGVt
cGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZmluZCgmaW5m
byk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAg
ICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwog
CiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4
OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhGbG9hdDY0QXJyYXkuY3BwIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4RmxvYXQ2NEFycmF5LmNwcAppbmRleCAyNTJj
YzNjMmNhNjk0OGJjZTE0ZDM2NzM5MDNjZGEwYmZlNGJlNWZiLi4xOGYwNzA2Y2VkNTg2ZWMwODkx
ODIxYWNiMjZmMGQ5ZDFiZWYzNDE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVjgvVjhGbG9hdDY0QXJyYXkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOEZsb2F0NjRBcnJheS5jcHAKQEAgLTkyLDcgKzky
LDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4RmxvYXQ2NEFycmF5
OjpHZXRSYXdUZW1wbGF0ZSgpCiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGEqIGRhdGEgPSBW
OEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4QmluZGluZ1Blcklzb2xh
dGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+cmF3VGVtcGxhdGVN
YXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnJhd1RlbXBsYXRlTWFw
KCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAg
djg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0gY3JlYXRlUmF3VGVt
cGxhdGUoKTsKQEAgLTEwNSw3ICsxMDUsNyBAQCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25U
ZW1wbGF0ZT4gVjhGbG9hdDY0QXJyYXk6OkdldFRlbXBsYXRlKCkKICAgICBWOEJpbmRpbmdQZXJJ
c29sYXRlRGF0YSogZGF0YSA9IFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpjdXJyZW50KCk7CiAg
ICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQg
PSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwogICAgIGlmIChyZXN1bHQgIT0gZGF0
YS0+dGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOwor
ICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5k
bGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwg
PQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4
VGVzdEFjdGl2ZURPTU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVjgvVjhUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcAppbmRleCBiNjg2ODcxMDdjODE2YjMx
NGU4YWVlMjBhM2FjYzM3ZmY0ZTM2ZjRkLi42ZWUzOThjOTc4ZGExNjY3ZjY1ZTM3ZDAyOTQ1MDk3
NTc0OTZhMmU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVjgvVjhUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcApAQCAtMTMwLDcg
KzEzMCw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3RBY3Rp
dmVET01PYmplY3Q6OkdldFJhd1RlbXBsYXRlKCkKICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0
YSogZGF0YSA9IFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhCaW5k
aW5nUGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT5y
YXdUZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+cmF3
VGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAg
ICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVT
Y29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPSBj
cmVhdGVSYXdUZW1wbGF0ZSgpOwpAQCAtMTQzLDcgKzE0Myw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4
OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3RBY3RpdmVET01PYmplY3Q6OkdldFRlbXBsYXRlKCkK
ICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4QmluZGluZ1Blcklzb2xhdGVE
YXRhOjpjdXJyZW50KCk7CiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFw
OjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwogICAg
IGlmIChyZXN1bHQgIT0gZGF0YS0+dGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJu
IHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAogICAgIHY4
OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rp
b25UZW1wbGF0ZT4gdGVtcGwgPQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RDdXN0b21OYW1lZEdldHRlci5jcHAK
aW5kZXggNjk0MDQ1NDFjY2I2MGMxNDAxNDVkMzBiYmQxNTdlZmE5Mjk4ZGJlYi4uYjJkNGVhNjcy
YmUwZjc1ZWRlMTIwM2E4MTg0MjdhMTBjMWQ2ZjNiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Q3VzdG9t
TmFtZWRHZXR0ZXIuY3BwCkBAIC04Miw3ICs4Miw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5j
dGlvblRlbXBsYXRlPiBWOFRlc3RDdXN0b21OYW1lZEdldHRlcjo6R2V0UmF3VGVtcGxhdGUoKQog
ICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhKiBkYXRhID0gVjhCaW5kaW5nUGVySXNvbGF0ZURh
dGE6OmN1cnJlbnQoKTsKICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6
Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAg
ICAgaWYgKHJlc3VsdCAhPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICBy
ZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAg
ICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpG
dW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9IGNyZWF0ZVJhd1RlbXBsYXRlKCk7CkBAIC05NSw3ICs5
NSw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3RDdXN0b21O
YW1lZEdldHRlcjo6R2V0VGVtcGxhdGUoKQogICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhKiBk
YXRhID0gVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOEJpbmRpbmdQ
ZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnRlbXBs
YXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT50ZW1wbGF0ZU1h
cCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVy
biByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAg
IHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRDb25z
dHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhU
ZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAKaW5kZXggM2ZkYjZjYjc4MDcyYmE4MjM1Y2YyMzY4ZmJi
MTNhNWMyNDJhNjc4NC4uMmE4Y2IyMDI5OWFhMDE1YzkzZDJmYWVkNTAxZGNjNzAxYzI4NGRmMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVz
dEV2ZW50Q29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9WOC9WOFRlc3RFdmVudENvbnN0cnVjdG9yLmNwcApAQCAtMTE4LDcgKzExOCw3IEBA
IHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3RFdmVudENvbnN0cnVj
dG9yOjpHZXRSYXdUZW1wbGF0ZSgpCiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGEqIGRhdGEg
PSBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4QmluZGluZ1Blcklz
b2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+cmF3VGVtcGxh
dGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnJhd1RlbXBsYXRl
TWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAg
ICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0gY3JlYXRlUmF3
VGVtcGxhdGUoKTsKQEAgLTEzMSw3ICsxMzEsNyBAQCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rp
b25UZW1wbGF0ZT4gVjhUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6R2V0VGVtcGxhdGUoKQogICAgIFY4
QmluZGluZ1Blcklzb2xhdGVEYXRhKiBkYXRhID0gVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OmN1
cnJlbnQoKTsKICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJh
dG9yIHJlc3VsdCA9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJl
c3VsdCAhPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0
LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRs
ZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBs
YXRlPiB0ZW1wbCA9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVjgvVjhUZXN0RXZlbnRUYXJnZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50VGFyZ2V0LmNwcAppbmRleCAyMDAwOGQ5YjE4M2U2
ODliYWNhNjk1MzY3NDlhODVkNDZjNGZjZDA0Li44ZjQ5Y2M0NmNhZjVlZTBiY2I5Njk1NDJjYWJi
ZTg0MTU1ZjFiZGVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVjgvVjhUZXN0RXZlbnRUYXJnZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudFRhcmdldC5jcHAKQEAgLTE0NSw3ICsxNDUs
NyBAQCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0RXZlbnRUYXJn
ZXQ6OkdldFJhd1RlbXBsYXRlKCkKICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YSogZGF0YSA9
IFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhCaW5kaW5nUGVySXNv
bGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT5yYXdUZW1wbGF0
ZU1hcCgpLmZpbmQoJmluZm8pOwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+cmF3VGVtcGxhdGVN
YXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1
cm4gcmVzdWx0LT52YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAg
ICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPSBjcmVhdGVSYXdU
ZW1wbGF0ZSgpOwpAQCAtMTU4LDcgKzE1OCw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlv
blRlbXBsYXRlPiBWOFRlc3RFdmVudFRhcmdldDo6R2V0VGVtcGxhdGUoKQogICAgIFY4QmluZGlu
Z1Blcklzb2xhdGVEYXRhKiBkYXRhID0gVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OmN1cnJlbnQo
KTsKICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJl
c3VsdCA9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAh
PSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNv
bmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3Bl
IGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0
ZW1wbCA9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VjgvVjhUZXN0SW50ZXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOFRlc3RJbnRlcmZhY2UuY3BwCmluZGV4IGQ2NDRkZjkzYmY0M2U2YWRhOWZmMTM0
OTZjMDlmYTVkYmQ0YWQ4NGEuLmRmNDllM2E2M2YxM2QyODljMmVjNGI2ZGZiOTEwOTVhMjZjN2Zm
YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9W
OFRlc3RJbnRlcmZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOFRlc3RJbnRlcmZhY2UuY3BwCkBAIC0yNzMsNyArMjczLDcgQEAgdjg6OlBlcnNp
c3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdEludGVyZmFjZTo6R2V0UmF3VGVtcGxh
dGUoKQogICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhKiBkYXRhID0gVjhCaW5kaW5nUGVySXNv
bGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6VGVtcGxh
dGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZmluZCgmaW5m
byk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAg
ICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVl
OwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50
PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9IGNyZWF0ZVJhd1RlbXBsYXRlKCk7CkBAIC0y
ODYsNyArMjg2LDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVz
dEludGVyZmFjZTo6R2V0VGVtcGxhdGUoKQogICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhKiBk
YXRhID0gVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOEJpbmRpbmdQ
ZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnRlbXBs
YXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT50ZW1wbGF0ZU1h
cCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVy
biByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAg
IHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TWVkaWFRdWVy
eUxpc3RMaXN0ZW5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VjgvVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAKaW5kZXggODZjNTUyOGVhZjk3ZjZl
OGI1MzQyMDU4N2MyOThhZWRkMzcyNDViNS4uMzMyYTE1MmM1MDc5YWI4NTZmYWQ0NmNmYTA2OTg1
OTVkZjIwZjIzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Y4L1Y4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
LmNwcApAQCAtODIsNyArODIsNyBAQCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0
ZT4gVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6R2V0UmF3VGVtcGxhdAogICAgIFY4Qmlu
ZGluZ1Blcklzb2xhdGVEYXRhKiBkYXRhID0gVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OmN1cnJl
bnQoKTsKICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9y
IHJlc3VsdCA9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJl
c3VsdCAhPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVz
dWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6Okhh
bmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRl
bXBsYXRlPiB0ZW1wbCA9IGNyZWF0ZVJhd1RlbXBsYXRlKCk7CkBAIC05NSw3ICs5NSw3IEBAIHY4
OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3RNZWRpYVF1ZXJ5TGlzdExp
c3RlbmVyOjpHZXRUZW1wbGF0ZSgpCiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGEqIGRhdGEg
PSBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4QmluZGluZ1Blcklz
b2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+dGVtcGxhdGVN
YXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnRlbXBsYXRlTWFwKCku
ZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6
OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROYW1lZENvbnN0cnVj
dG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RO
YW1lZENvbnN0cnVjdG9yLmNwcAppbmRleCAyNjk0NzA3MjI1ZTc4ODY2NWViOWRmZmY0ODY4MDQw
MmI0OTRjODBmLi4wZGE5YmVmOTVjODQ5NmViNDhmZDkxN2VjNDY1YjFjYTA5OGRkNjVlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TmFt
ZWRDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Y4L1Y4VGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwCkBAIC0xMjIsNyArMTIyLDcgQEAgdjg6
OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdE5hbWVkQ29uc3RydWN0b3I6
OkdldFJhd1RlbXBsYXRlKCkKICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4
QmluZGluZ1Blcklzb2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhCaW5kaW5nUGVySXNvbGF0
ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT5yYXdUZW1wbGF0ZU1h
cCgpLmZpbmQoJmluZm8pOwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+cmF3VGVtcGxhdGVNYXAo
KS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4g
cmVzdWx0LT52YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2
ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPSBjcmVhdGVSYXdUZW1w
bGF0ZSgpOwpAQCAtMTM1LDcgKzEzNSw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRl
bXBsYXRlPiBWOFRlc3ROYW1lZENvbnN0cnVjdG9yOjpHZXRUZW1wbGF0ZSgpCiAgICAgVjhCaW5k
aW5nUGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6Y3VycmVu
dCgpOwogICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3Ig
cmVzdWx0ID0gZGF0YS0+dGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0
ICE9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNl
Y29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2Nv
cGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+
IHRlbXBsID0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9WOC9WOFRlc3RPYmouY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Y4L1Y4VGVzdE9iai5jcHAKaW5kZXggNGFjNDAyNjNiODE0OTliZGVjYjZiOTM5ZmFjNmM2ODI1
ZDFjNzYxYi4uNmRkNmZjNjcxY2E0ZWVmNWJlOGQzZTIyY2RmMTQ3Y2Q2MTdiYzIzNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9i
ai5jcHAKQEAgLTIzNjEsNyArMjM2MSw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRl
bXBsYXRlPiBWOFRlc3RPYmo6OkdldFJhd1RlbXBsYXRlKCkKICAgICBWOEJpbmRpbmdQZXJJc29s
YXRlRGF0YSogZGF0YSA9IFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAg
VjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBk
YXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwogICAgIGlmIChyZXN1bHQgIT0gZGF0
YS0+cmF3VGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25k
OworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBo
YW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVt
cGwgPSBjcmVhdGVSYXdUZW1wbGF0ZSgpOwpAQCAtMjM3NCw3ICsyMzc0LDcgQEAgdjg6OlBlcnNp
c3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdE9iajo6R2V0VGVtcGxhdGUoKQogICAg
IFY4QmluZGluZ1Blcklzb2xhdGVEYXRhKiBkYXRhID0gVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6
OmN1cnJlbnQoKTsKICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0
ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYg
KHJlc3VsdCAhPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVz
dWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6Okhh
bmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRl
bXBsYXRlPiB0ZW1wbCA9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2UuY3BwCmluZGV4IDk2MjQ1MmU1ZDhkYzMzNTQ3NzZhZDUxNjk2Y2I2
NmI3MGY0ZTQ0ZjcuLjQyNjk2ZDE5YWViNzhlODE4NzFlMDJkYmYyMWVmZjc3ZTU5NmVjNWMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2UuY3BwCkBAIC0yNjUsNyArMjY1LDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVt
cGxhdGU+IFY4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6R2V0UmEKICAgICBW
OEJpbmRpbmdQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpj
dXJyZW50KCk7CiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVy
YXRvciByZXN1bHQgPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwogICAgIGlm
IChyZXN1bHQgIT0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJu
IHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAogICAgIHY4
OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rp
b25UZW1wbGF0ZT4gdGVtcGwgPSBjcmVhdGVSYXdUZW1wbGF0ZSgpOwpAQCAtMjc4LDcgKzI3OCw3
IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2U6OkdldFRlCiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGEq
IGRhdGEgPSBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4QmluZGlu
Z1Blcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+dGVt
cGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnRlbXBsYXRl
TWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAg
ICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L05QVjhPYmplY3QuY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvTlBWOE9iamVjdC5jcHAKaW5kZXggNWMzMzU5Mzc3MDVlZjIzYzg2
ZDY2NzBiYjFjYjkzODdhZjM2ODEyNC4uNTY4MDczMGI0MmQwOGI1YzM3YmE3MTg5NDQwNmIyZTBi
OWE5MmFlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvTlBWOE9iamVj
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvTlBWOE9iamVjdC5jcHAKQEAg
LTc4LDcgKzc4LDcgQEAgc3RhdGljIHZvaWQgZnJlZVY4TlBPYmplY3QoTlBPYmplY3QqIG5wT2Jq
ZWN0KQogICAgIGlmIChpbnQgdjhPYmplY3RIYXNoID0gdjhOcE9iamVjdC0+djhPYmplY3QtPkdl
dElkZW50aXR5SGFzaCgpKSB7CiAgICAgICAgIFY4TlBPYmplY3RNYXA6Oml0ZXJhdG9yIGl0ZXIg
PSBzdGF0aWNWOE5QT2JqZWN0TWFwKCktPmZpbmQodjhPYmplY3RIYXNoKTsKICAgICAgICAgaWYg
KGl0ZXIgIT0gc3RhdGljVjhOUE9iamVjdE1hcCgpLT5lbmQoKSkgewotICAgICAgICAgICAgVjhO
UE9iamVjdFZlY3RvciYgb2JqZWN0cyA9IGl0ZXItPnNlY29uZDsKKyAgICAgICAgICAgIFY4TlBP
YmplY3RWZWN0b3ImIG9iamVjdHMgPSBpdGVyLT52YWx1ZTsKICAgICAgICAgICAgIGZvciAoc2l6
ZV90IGluZGV4ID0gMDsgaW5kZXggPCBvYmplY3RzLnNpemUoKTsgKytpbmRleCkgewogICAgICAg
ICAgICAgICAgIGlmIChvYmplY3RzLmF0KGluZGV4KSA9PSB2OE5wT2JqZWN0KSB7CiAgICAgICAg
ICAgICAgICAgICAgIG9iamVjdHMucmVtb3ZlKGluZGV4KTsKQEAgLTE1Myw3ICsxNTMsNyBAQCBO
UE9iamVjdCogbnBDcmVhdGVWOFNjcmlwdE9iamVjdChOUFAgbnBwLCB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IG9iamVjdCwgRE9NV2luZAogICAgIEFTU0VSVCh2OE9iamVjdEhhc2gpOwogICAgIFY4
TlBPYmplY3RNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBzdGF0aWNWOE5QT2JqZWN0TWFwKCktPmZpbmQo
djhPYmplY3RIYXNoKTsKICAgICBpZiAoaXRlciAhPSBzdGF0aWNWOE5QT2JqZWN0TWFwKCktPmVu
ZCgpKSB7Ci0gICAgICAgIFY4TlBPYmplY3RWZWN0b3ImIG9iamVjdHMgPSBpdGVyLT5zZWNvbmQ7
CisgICAgICAgIFY4TlBPYmplY3RWZWN0b3ImIG9iamVjdHMgPSBpdGVyLT52YWx1ZTsKICAgICAg
ICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG9iamVjdHMuc2l6ZSgpOyArK2luZGV4
KSB7CiAgICAgICAgICAgICBWOE5QT2JqZWN0KiB2OG5wT2JqZWN0ID0gb2JqZWN0cy5hdChpbmRl
eCk7CiAgICAgICAgICAgICBpZiAodjhucE9iamVjdC0+cm9vdE9iamVjdCA9PSByb290KSB7CkBA
IC0xNzMsNyArMTczLDcgQEAgTlBPYmplY3QqIG5wQ3JlYXRlVjhTY3JpcHRPYmplY3QoTlBQIG5w
cCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBvYmplY3QsIERPTVdpbmQKICNlbmRpZgogICAgIHY4
bnBPYmplY3QtPnJvb3RPYmplY3QgPSByb290OwogCi0gICAgaXRlci0+c2Vjb25kLmFwcGVuZCh2
OG5wT2JqZWN0KTsKKyAgICBpdGVyLT52YWx1ZS5hcHBlbmQodjhucE9iamVjdCk7CiAKICAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxOUE9iamVjdCo+KHY4bnBPYmplY3QpOwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcAppbmRleCBiNTU0
ZDU1YTY4ZTFiYTdjMzJhYTliYmQ2MDYyYjNiODQ5ZmU2MWJhLi5kODNhYzk2NjhlNjA5ZDRjYWUx
MmNiYmYwMWE5MmM0Y2RhYjcwYzg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9TY3JpcHRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9TY3JpcHRDb250cm9sbGVyLmNwcApAQCAtMTI0LDggKzEyNCw4IEBAIHZvaWQgU2NyaXB0Q29u
dHJvbGxlcjo6Y2xlYXJTY3JpcHRPYmplY3RzKCkKIHsKICAgICBQbHVnaW5PYmplY3RNYXA6Oml0
ZXJhdG9yIGl0ID0gbV9wbHVnaW5PYmplY3RzLmJlZ2luKCk7CiAgICAgZm9yICg7IGl0ICE9IG1f
cGx1Z2luT2JqZWN0cy5lbmQoKTsgKytpdCkgewotICAgICAgICBfTlBOX1VucmVnaXN0ZXJPYmpl
Y3QoaXQtPnNlY29uZCk7Ci0gICAgICAgIF9OUE5fUmVsZWFzZU9iamVjdChpdC0+c2Vjb25kKTsK
KyAgICAgICAgX05QTl9VbnJlZ2lzdGVyT2JqZWN0KGl0LT52YWx1ZSk7CisgICAgICAgIF9OUE5f
UmVsZWFzZU9iamVjdChpdC0+dmFsdWUpOwogICAgIH0KICAgICBtX3BsdWdpbk9iamVjdHMuY2xl
YXIoKTsKIApAQCAtMzcyLDggKzM3Miw4IEBAIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6Y2xlYW51
cFNjcmlwdE9iamVjdHNGb3JQbHVnaW4oV2lkZ2V0KiBuYXRpdmVIYW5kbGUpCiAgICAgUGx1Z2lu
T2JqZWN0TWFwOjppdGVyYXRvciBpdCA9IG1fcGx1Z2luT2JqZWN0cy5maW5kKG5hdGl2ZUhhbmRs
ZSk7CiAgICAgaWYgKGl0ID09IG1fcGx1Z2luT2JqZWN0cy5lbmQoKSkKICAgICAgICAgcmV0dXJu
OwotICAgIF9OUE5fVW5yZWdpc3Rlck9iamVjdChpdC0+c2Vjb25kKTsKLSAgICBfTlBOX1JlbGVh
c2VPYmplY3QoaXQtPnNlY29uZCk7CisgICAgX05QTl9VbnJlZ2lzdGVyT2JqZWN0KGl0LT52YWx1
ZSk7CisgICAgX05QTl9SZWxlYXNlT2JqZWN0KGl0LT52YWx1ZSk7CiAgICAgbV9wbHVnaW5PYmpl
Y3RzLnJlbW92ZShpdCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCmluZGV4IDZjZjkwMjA4MzY5MmVmYzBjYzM0OTUy
YmFhOTg2NWRmNzllNGIxNjAuLjQ4ZGY3ODMwN2UzMGIwYTZhMjg5MzYyMjYxMTQwMDJiNmVhMWNm
ZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2VyaWFsaXplZFNj
cmlwdFZhbHVlLmNwcApAQCAtMTA1LDcgKzEwNSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAg
IHR5cGVuYW1lIEhhbmRsZVRvVDo6aXRlcmF0b3IgcmVzdWx0ID0gbV9tYXAuZmluZCgqaGFuZGxl
KTsKICAgICAgICAgaWYgKHJlc3VsdCAhPSBtX21hcC5lbmQoKSkgewotICAgICAgICAgICAgKnZh
bHVlT3V0ID0gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgICAgICAqdmFsdWVPdXQgPSByZXN1bHQt
PnZhbHVlOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0
dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5k
aW5nUGVyQ29udGV4dERhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5k
aW5nUGVyQ29udGV4dERhdGEuY3BwCmluZGV4IGEwMTBlZmE3OGQ1NmM2MDAwZWEwMmVmN2ZkZTUy
ZGJmYWY2NDY5NmQuLjcxMTIyN2Q4NmRjNGIyMTNlZTdkYThhMDQzMTM2YTFmNGFkM2I1MTkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZ1BlckNvbnRleHRE
YXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmdQZXJDb250
ZXh0RGF0YS5jcHAKQEAgLTQwLDcgKzQwLDcgQEAgdm9pZCBWOEJpbmRpbmdQZXJDb250ZXh0RGF0
YTo6ZGlzcG9zZSgpCiAgICAgewogICAgICAgICBXcmFwcGVyQm9pbGVycGxhdGVNYXA6Oml0ZXJh
dG9yIGl0ID0gbV93cmFwcGVyQm9pbGVycGxhdGVzLmJlZ2luKCk7CiAgICAgICAgIGZvciAoOyBp
dCAhPSBtX3dyYXBwZXJCb2lsZXJwbGF0ZXMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgICAgIHY4
OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBpdC0+c2Vjb25kOworICAgICAgICAg
ICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlciA9IGl0LT52YWx1ZTsKICAgICAg
ICAgICAgIHdyYXBwZXIuRGlzcG9zZSgpOwogICAgICAgICB9CiAgICAgICAgIG1fd3JhcHBlckJv
aWxlcnBsYXRlcy5jbGVhcigpOwpAQCAtNDksNyArNDksNyBAQCB2b2lkIFY4QmluZGluZ1BlckNv
bnRleHREYXRhOjpkaXNwb3NlKCkKICAgICB7CiAgICAgICAgIENvbnN0cnVjdG9yTWFwOjppdGVy
YXRvciBpdCA9IG1fY29uc3RydWN0b3JNYXAuYmVnaW4oKTsKICAgICAgICAgZm9yICg7IGl0ICE9
IG1fY29uc3RydWN0b3JNYXAuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgICAgIHY4OjpQZXJzaXN0
ZW50PHY4OjpGdW5jdGlvbj4gd3JhcHBlciA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICB2ODo6
UGVyc2lzdGVudDx2ODo6RnVuY3Rpb24+IHdyYXBwZXIgPSBpdC0+dmFsdWU7CiAgICAgICAgICAg
ICB3cmFwcGVyLkRpc3Bvc2UoKTsKICAgICAgICAgfQogICAgICAgICBtX2NvbnN0cnVjdG9yTWFw
LmNsZWFyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTU1h
cC5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01NYXAuaAppbmRleCA3ZWMxMTA1
MmM3MjkxOWEyNWM2NDcyYzAxMGRkNGZiYWNlN2E0MGRlLi41MTM3ZDRmMGViMWNjMzhkNjNjOTgw
ODA2ZTJlNDZiMmNjNzljMDMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9WOERPTU1hcC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NTWFwLmgK
QEAgLTEwNSw3ICsxMDUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgcmVt
b3ZlSWZQcmVzZW50KEtleVR5cGUqIGtleSwgdjg6OlBlcnNpc3RlbnQ8VmFsdWVUeXBlPiB2YWx1
ZSkKICAgICAgICAgewogICAgICAgICAgICAgdHlwZW5hbWUgSGFzaE1hcDxLZXlUeXBlKiwgVmFs
dWVUeXBlKj46Oml0ZXJhdG9yIGl0ID0gbV9tYXAuZmluZChrZXkpOwotICAgICAgICAgICAgaWYg
KGl0ID09IG1fbWFwLmVuZCgpIHx8IGl0LT5zZWNvbmQgIT0gKnZhbHVlKQorICAgICAgICAgICAg
aWYgKGl0ID09IG1fbWFwLmVuZCgpIHx8IGl0LT52YWx1ZSAhPSAqdmFsdWUpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICBtX21hcC5yZW1vdmUoaXQpOwpAQCAt
MTI1LDcgKzEyNSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIHZpc2l0b3It
PnN0YXJ0TWFwKCk7CiAgICAgICAgICAgICB0eXBlbmFtZSBIYXNoTWFwPEtleVR5cGUqLCBWYWx1
ZVR5cGUqPjo6aXRlcmF0b3IgaXQgPSBtX21hcC5iZWdpbigpOwogICAgICAgICAgICAgZm9yICg7
IGl0ICE9IG1fbWFwLmVuZCgpOyArK2l0KQotICAgICAgICAgICAgICAgIHZpc2l0b3ItPnZpc2l0
RE9NV3JhcHBlcihzdG9yZSwgaXQtPmZpcnN0LCB2ODo6UGVyc2lzdGVudDxWYWx1ZVR5cGU+KGl0
LT5zZWNvbmQpKTsKKyAgICAgICAgICAgICAgICB2aXNpdG9yLT52aXNpdERPTVdyYXBwZXIoc3Rv
cmUsIGl0LT5rZXksIHY4OjpQZXJzaXN0ZW50PFZhbHVlVHlwZT4oaXQtPnZhbHVlKSk7CiAgICAg
ICAgICAgICB2aXNpdG9yLT5lbmRNYXAoKTsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEdDQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9WOEdDQ29udHJvbGxlci5jcHAKaW5kZXggY2Q2MTI1YmQ0ZDZhNjU5YWYx
MmRlNjgyYmRjMjg0ODllNTE2NGUzZC4uOGNhYzMxOWU5ZjllNzE4Y2JmYzFjNTNjYjUwOGM3OWE2
ZDRiMmNjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhHQ0NvbnRy
b2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVy
LmNwcApAQCAtOTQsOSArOTQsOSBAQCBzdGF0aWMgdm9pZCBlbnVtZXJhdGVHbG9iYWxIYW5kbGVz
KCkKIHsKICAgICBHbG9iYWxIYW5kbGVNYXAmIGdsb2JhbEhhbmRsZU1hcCA9IGN1cnJlbnRHbG9i
YWxIYW5kbGVNYXAoKTsKICAgICBmb3IgKEdsb2JhbEhhbmRsZU1hcDo6aXRlcmF0b3IgaXQgPSBn
bG9iYWxIYW5kbGVNYXAuYmVnaW4oKSwgZW5kID0gZ2xvYmFsSGFuZGxlTWFwLmVuZCgpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKLSAgICAgICAgR2xvYmFsSGFuZGxlSW5mbyogaW5mbyA9IGl0LT5zZWNv
bmQ7CisgICAgICAgIEdsb2JhbEhhbmRsZUluZm8qIGluZm8gPSBpdC0+dmFsdWU7CiAgICAgICAg
IFVOVVNFRF9QQVJBTShpbmZvKTsKLSAgICAgICAgdjg6OlZhbHVlKiBoYW5kbGUgPSBpdC0+Zmly
c3Q7CisgICAgICAgIHY4OjpWYWx1ZSogaGFuZGxlID0gaXQtPmtleTsKICAgICAgICAgVU5VU0VE
X1BBUkFNKGhhbmRsZSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhQcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5
LmNwcAppbmRleCBjZjczNDE2ZmQ2MWRlYjc1ZmMyZDM5M2QxOWRiNmRjMDAxZDJiNGI1Li45NzZk
NTcyNzYwYzk5YzczMTEzY2E2YmZiMWM5NDlhOWIyZjEyMTUwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9WOFByb3h5LmNwcApAQCAtMjI5LDcgKzIyOSw3IEBAIHZvaWQgVjhQcm94eTo6ZXZh
bHVhdGVJbklzb2xhdGVkV29ybGQoaW50IHdvcmxkSUQsIGNvbnN0IFZlY3RvcjxTY3JpcHRTb3Vy
Y2VDb2RlCiAgICAgaWYgKHdvcmxkSUQgPiAwKSB7CiAgICAgICAgIElzb2xhdGVkV29ybGRNYXA6
Oml0ZXJhdG9yIGl0ZXIgPSBtX2lzb2xhdGVkV29ybGRzLmZpbmQod29ybGRJRCk7CiAgICAgICAg
IGlmIChpdGVyICE9IG1faXNvbGF0ZWRXb3JsZHMuZW5kKCkpIHsKLSAgICAgICAgICAgIGlzb2xh
dGVkQ29udGV4dCA9IGl0ZXItPnNlY29uZDsKKyAgICAgICAgICAgIGlzb2xhdGVkQ29udGV4dCA9
IGl0ZXItPnZhbHVlOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaXNvbGF0ZWRDb250
ZXh0ID0gbmV3IFY4SXNvbGF0ZWRDb250ZXh0KHRoaXMsIGV4dGVuc2lvbkdyb3VwLCB3b3JsZElE
KTsKICAgICAgICAgICAgIGlmIChpc29sYXRlZENvbnRleHQtPmNvbnRleHQoKS5Jc0VtcHR5KCkp
IHsKQEAgLTI0Myw3ICsyNDMsNyBAQCB2b2lkIFY4UHJveHk6OmV2YWx1YXRlSW5Jc29sYXRlZFdv
cmxkKGludCB3b3JsZElELCBjb25zdCBWZWN0b3I8U2NyaXB0U291cmNlQ29kZQogCiAgICAgICAg
IElzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbk1hcDo6aXRlcmF0b3Igc2VjdXJpdHlPcmlnaW5J
dGVyID0gbV9pc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW5zLmZpbmQod29ybGRJRCk7CiAgICAg
ICAgIGlmIChzZWN1cml0eU9yaWdpbkl0ZXIgIT0gbV9pc29sYXRlZFdvcmxkU2VjdXJpdHlPcmln
aW5zLmVuZCgpKQotICAgICAgICAgICAgaXNvbGF0ZWRDb250ZXh0LT5zZXRTZWN1cml0eU9yaWdp
bihzZWN1cml0eU9yaWdpbkl0ZXItPnNlY29uZCk7CisgICAgICAgICAgICBpc29sYXRlZENvbnRl
eHQtPnNldFNlY3VyaXR5T3JpZ2luKHNlY3VyaXR5T3JpZ2luSXRlci0+dmFsdWUpOwogICAgIH0g
ZWxzZSB7CiAgICAgICAgIGlzb2xhdGVkQ29udGV4dCA9IG5ldyBWOElzb2xhdGVkQ29udGV4dCh0
aGlzLCBleHRlbnNpb25Hcm91cCwgd29ybGRJRCk7CiAgICAgICAgIGlmIChpc29sYXRlZENvbnRl
eHQtPmNvbnRleHQoKS5Jc0VtcHR5KCkpIHsKQEAgLTI3NCw3ICsyNzQsNyBAQCB2b2lkIFY4UHJv
eHk6OnNldElzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbihpbnQgd29ybGRJRCwgUGFzc1JlZlB0
cjxTZWN1cml0eU9yaQogICAgIG1faXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2lucy5zZXQod29y
bGRJRCwgc2VjdXJpdHlPcmlnaW4pOwogICAgIElzb2xhdGVkV29ybGRNYXA6Oml0ZXJhdG9yIGl0
ZXIgPSBtX2lzb2xhdGVkV29ybGRzLmZpbmQod29ybGRJRCk7CiAgICAgaWYgKGl0ZXIgIT0gbV9p
c29sYXRlZFdvcmxkcy5lbmQoKSkKLSAgICAgICAgaXRlci0+c2Vjb25kLT5zZXRTZWN1cml0eU9y
aWdpbihzZWN1cml0eU9yaWdpbik7CisgICAgICAgIGl0ZXItPnZhbHVlLT5zZXRTZWN1cml0eU9y
aWdpbihzZWN1cml0eU9yaWdpbik7CiB9CiAKIFBhc3NPd25QdHI8djg6OlNjcmlwdERhdGE+IFY4
UHJveHk6OnByZWNvbXBpbGVTY3JpcHQodjg6OkhhbmRsZTx2ODo6U3RyaW5nPiBjb2RlLCBDYWNo
ZWRTY3JpcHQqIGNhY2hlZFNjcmlwdCkKQEAgLTUyOCw3ICs1MjgsNyBAQCB2b2lkIFY4UHJveHk6
OnJlc2V0SXNvbGF0ZWRXb3JsZHMoKQogewogICAgIGZvciAoSXNvbGF0ZWRXb3JsZE1hcDo6aXRl
cmF0b3IgaXRlciA9IG1faXNvbGF0ZWRXb3JsZHMuYmVnaW4oKTsKICAgICAgICAgIGl0ZXIgIT0g
bV9pc29sYXRlZFdvcmxkcy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIGl0ZXItPnNlY29uZC0+
ZGVzdHJveSgpOworICAgICAgICBpdGVyLT52YWx1ZS0+ZGVzdHJveSgpOwogICAgIH0KICAgICBt
X2lzb2xhdGVkV29ybGRzLmNsZWFyKCk7CiAgICAgbV9pc29sYXRlZFdvcmxkU2VjdXJpdHlPcmln
aW5zLmNsZWFyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ucHJ1
bnRpbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvbnBydW50aW1lLmNwcAppbmRl
eCA4ZDgwY2Y5MzMxODZlODU0N2MxODUxODNkN2U3NDg0YmNlMWU4NGEzLi4yYjAzNjdjZDE1ZjJh
NGZiMTEzZDRjYzBiZjc2N2VjOGNmMWIwYTVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9ucHJ1bnRpbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L25wcnVudGltZS5jcHAKQEAgLTE2NCw3ICsxNjQsNyBAQCBOUElkZW50aWZpZXIgX05QTl9HZXRT
dHJpbmdJZGVudGlmaWVyKGNvbnN0IE5QVVRGOCogbmFtZSkKICAgICAgICAgU3RyaW5nSWRlbnRp
Zmllck1hcCogaWRlbnRNYXAgPSBnZXRTdHJpbmdJZGVudGlmaWVyTWFwKCk7CiAgICAgICAgIFN0
cmluZ0lkZW50aWZpZXJNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBpZGVudE1hcC0+ZmluZChrZXkpOwog
ICAgICAgICBpZiAoaXRlciAhPSBpZGVudE1hcC0+ZW5kKCkpCi0gICAgICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8TlBJZGVudGlmaWVyPihpdGVyLT5zZWNvbmQpOworICAgICAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PE5QSWRlbnRpZmllcj4oaXRlci0+dmFsdWUpOwogCiAgICAgICAgIHNp
emVfdCBuYW1lTGVuID0ga2V5Lm1fbGVuZ3RoOwogCkBAIC0yMTEsNyArMjExLDcgQEAgTlBJZGVu
dGlmaWVyIF9OUE5fR2V0SW50SWRlbnRpZmllcihpbnQzMl90IGludElkKQogICAgIEludElkZW50
aWZpZXJNYXAqIGlkZW50TWFwID0gZ2V0SW50SWRlbnRpZmllck1hcCgpOwogICAgIEludElkZW50
aWZpZXJNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBpZGVudE1hcC0+ZmluZChpbnRJZCk7CiAgICAgaWYg
KGl0ZXIgIT0gaWRlbnRNYXAtPmVuZCgpKQotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TlBJ
ZGVudGlmaWVyPihpdGVyLT5zZWNvbmQpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TlBJ
ZGVudGlmaWVyPihpdGVyLT52YWx1ZSk7CiAKICAgICAvLyBXZSBuZXZlciByZWxlYXNlIGlkZW50
aWZpZXJzLCBzbyB0aGlzIGRpY3Rpb25hcnkgd2lsbCBncm93LgogICAgIFByaXZhdGVJZGVudGlm
aWVyKiBpZGVudGlmaWVyID0gcmVpbnRlcnByZXRfY2FzdDxQcml2YXRlSWRlbnRpZmllcio+KG1h
bGxvYyhzaXplb2YoUHJpdmF0ZUlkZW50aWZpZXIpKSk7CkBAIC0zODgsNyArMzg4LDcgQEAgdm9p
ZCBfTlBOX1JlZ2lzdGVyT2JqZWN0KE5QT2JqZWN0KiBucE9iamVjdCwgTlBPYmplY3QqIG93bmVy
KQogICAgICAgICBOUE9iamVjdE1hcDo6aXRlcmF0b3Igb3duZXJFbnRyeSA9IGxpdmVPYmplY3RN
YXAoKS5maW5kKG93bmVyKTsKICAgICAgICAgTlBPYmplY3QqIHBhcmVudCA9IDA7CiAgICAgICAg
IGlmIChsaXZlT2JqZWN0TWFwKCkuZW5kKCkgIT0gb3duZXJFbnRyeSkKLSAgICAgICAgICAgIHBh
cmVudCA9IG93bmVyRW50cnktPnNlY29uZDsKKyAgICAgICAgICAgIHBhcmVudCA9IG93bmVyRW50
cnktPnZhbHVlOwogCiAgICAgICAgIGlmIChwYXJlbnQpCiAgICAgICAgICAgICBvd25lciA9IHBh
cmVudDsKQEAgLTQwOCw3ICs0MDgsNyBAQCB2b2lkIF9OUE5fVW5yZWdpc3Rlck9iamVjdChOUE9i
amVjdCogbnBPYmplY3QpCiAKICAgICBOUE9iamVjdCogb3duZXIgPSAwOwogICAgIGlmIChsaXZl
T2JqZWN0TWFwKCkuZmluZChucE9iamVjdCkgIT0gbGl2ZU9iamVjdE1hcCgpLmVuZCgpKQotICAg
ICAgICBvd25lciA9IGxpdmVPYmplY3RNYXAoKS5maW5kKG5wT2JqZWN0KS0+c2Vjb25kOworICAg
ICAgICBvd25lciA9IGxpdmVPYmplY3RNYXAoKS5maW5kKG5wT2JqZWN0KS0+dmFsdWU7CiAKICAg
ICBpZiAoIW93bmVyKSB7CiAgICAgICAgIC8vIFVucmVnaXN0ZXJpbmcgYSBvd25lciBvYmplY3Q7
IGFsc28gdW5yZWdpc3RlciBpdCdzIGRlc2NlbmRhbnRzLgpAQCAtNDQzLDcgKzQ0Myw3IEBAIHZv
aWQgX05QTl9VbnJlZ2lzdGVyT2JqZWN0KE5QT2JqZWN0KiBucE9iamVjdCkKICAgICB9IGVsc2Ug
ewogICAgICAgICBOUFJvb3RPYmplY3RNYXA6Oml0ZXJhdG9yIG93bmVyRW50cnkgPSByb290T2Jq
ZWN0TWFwKCkuZmluZChvd25lcik7CiAgICAgICAgIGlmIChvd25lckVudHJ5ICE9IHJvb3RPYmpl
Y3RNYXAoKS5lbmQoKSkgewotICAgICAgICAgICAgTlBPYmplY3RTZXQqIGxpc3QgPSBvd25lckVu
dHJ5LT5zZWNvbmQ7CisgICAgICAgICAgICBOUE9iamVjdFNldCogbGlzdCA9IG93bmVyRW50cnkt
PnZhbHVlOwogICAgICAgICAgICAgQVNTRVJUKGxpc3QtPmZpbmQobnBPYmplY3QpICE9IGxpc3Qt
PmVuZCgpKTsKICAgICAgICAgICAgIGxpc3QtPnJlbW92ZShucE9iamVjdCk7CiAgICAgICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9JZGVudGlmaWVyUmVwLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JyaWRnZS9JZGVudGlmaWVyUmVwLmNwcAppbmRleCAyYWNmMTQxNTNkMWRi
OWUxMmI3MjU1OGE1Mzg4ZDk4NmZmOGE1ZTg1Li4xZGY1OGE5ZTQxNTgxYzNiZWMzMTUxZmYyMWJj
ZWFhMjQ3MmRjMWY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvSWRlbnRpZmll
clJlcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL0lkZW50aWZpZXJSZXAuY3BwCkBA
IC02OSwxMyArNjksMTMgQEAgSWRlbnRpZmllclJlcCogSWRlbnRpZmllclJlcDo6Z2V0KGludCBp
bnRJRCkKICAgICAKICAgICBJbnRJZGVudGlmaWVyTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gaW50
SWRlbnRpZmllck1hcCgpLmFkZChpbnRJRCwgMCk7CiAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5
KSB7Ci0gICAgICAgIEFTU0VSVCghcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOwotICAgICAgICBy
ZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IG5ldyBJZGVudGlmaWVyUmVwKGludElEKTsKKyAgICAg
ICAgQVNTRVJUKCFyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZSA9IG5ldyBJZGVudGlmaWVyUmVwKGludElEKTsKICAgICAgICAgCi0gICAgICAg
IGlkZW50aWZpZXJTZXQoKS5hZGQocmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOworICAgICAgICBp
ZGVudGlmaWVyU2V0KCkuYWRkKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwogICAgIH0KICAgICAK
LSAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgcmV0dXJuIHJlc3VsdC5p
dGVyYXRvci0+dmFsdWU7CiB9CiAKIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8U3RyaW5nSW1wbD4s
IElkZW50aWZpZXJSZXAqPiBTdHJpbmdJZGVudGlmaWVyTWFwOwpAQCAtOTUsMTMgKzk1LDEzIEBA
IElkZW50aWZpZXJSZXAqIElkZW50aWZpZXJSZXA6OmdldChjb25zdCBjaGFyKiBuYW1lKQogICAg
IFVTdHJpbmcgc3RyaW5nID0gc3RyaW5nVG9VU3RyaW5nKFN0cmluZzo6ZnJvbVVURjhXaXRoTGF0
aW4xRmFsbGJhY2sobmFtZSwgc3RybGVuKG5hbWUpKSk7CiAgICAgU3RyaW5nSWRlbnRpZmllck1h
cDo6QWRkUmVzdWx0IHJlc3VsdCA9IHN0cmluZ0lkZW50aWZpZXJNYXAoKS5hZGQoc3RyaW5nLmlt
cGwoKSwgMCk7CiAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIEFTU0VSVCgh
cmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOwotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29u
ZCA9IG5ldyBJZGVudGlmaWVyUmVwKG5hbWUpOworICAgICAgICBBU1NFUlQoIXJlc3VsdC5pdGVy
YXRvci0+dmFsdWUpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gbmV3IElkZW50
aWZpZXJSZXAobmFtZSk7CiAgICAgICAgIAotICAgICAgICBpZGVudGlmaWVyU2V0KCkuYWRkKHJl
c3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKKyAgICAgICAgaWRlbnRpZmllclNldCgpLmFkZChyZXN1
bHQuaXRlcmF0b3ItPnZhbHVlKTsKICAgICB9CiAgICAgCi0gICAgcmV0dXJuIHJlc3VsdC5pdGVy
YXRvci0+c2Vjb25kOworICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogfQogCiBi
b29sIElkZW50aWZpZXJSZXA6OmlzVmFsaWQoSWRlbnRpZmllclJlcCogaWRlbnRpZmllcikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9OUF9qc29iamVjdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9icmlkZ2UvTlBfanNvYmplY3QuY3BwCmluZGV4IDgzOTg2YWY1ODNjNTkwNDJmMWJm
Nzc3NTEyMDdhODAzNTNhZDEzZWEuLjM0Njg3M2Q2NTMyOTRmM2EwZTIyMGJiMGYzNmUwYmQ4ZDA4
NzRlNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9OUF9qc29iamVjdC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL05QX2pzb2JqZWN0LmNwcApAQCAtNjYsOCArNjYs
OCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBpdGVyID0gbV9tYXAuYWRkKHJvb3RPYmplY3QsIEpT
VG9OUE9iamVjdE1hcCgpKS5pdGVyYXRvcjsKICAgICAgICAgfQogCi0gICAgICAgIEFTU0VSVChp
dGVyLT5zZWNvbmQuZmluZChqc09iamVjdCkgPT0gaXRlci0+c2Vjb25kLmVuZCgpKTsKLSAgICAg
ICAgaXRlci0+c2Vjb25kLmFkZChqc09iamVjdCwgbnBPYmplY3QpOworICAgICAgICBBU1NFUlQo
aXRlci0+dmFsdWUuZmluZChqc09iamVjdCkgPT0gaXRlci0+dmFsdWUuZW5kKCkpOworICAgICAg
ICBpdGVyLT52YWx1ZS5hZGQoanNPYmplY3QsIG5wT2JqZWN0KTsKICAgICB9CiAKICAgICB2b2lk
IHJlbW92ZShSb290T2JqZWN0KiByb290T2JqZWN0KQpAQCAtODEsOSArODEsOSBAQCBwdWJsaWM6
CiAgICAgewogICAgICAgICBIYXNoTWFwPFJvb3RPYmplY3QqLCBKU1RvTlBPYmplY3RNYXA+Ojpp
dGVyYXRvciBpdGVyID0gbV9tYXAuZmluZChyb290T2JqZWN0KTsKICAgICAgICAgQVNTRVJUKGl0
ZXIgIT0gbV9tYXAuZW5kKCkpOwotICAgICAgICBBU1NFUlQoaXRlci0+c2Vjb25kLmZpbmQoanNP
YmplY3QpICE9IGl0ZXItPnNlY29uZC5lbmQoKSk7CisgICAgICAgIEFTU0VSVChpdGVyLT52YWx1
ZS5maW5kKGpzT2JqZWN0KSAhPSBpdGVyLT52YWx1ZS5lbmQoKSk7CiAKLSAgICAgICAgaXRlci0+
c2Vjb25kLnJlbW92ZShqc09iamVjdCk7CisgICAgICAgIGl0ZXItPnZhbHVlLnJlbW92ZShqc09i
amVjdCk7CiAgICAgfQogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJp
ZGdlL2puaS9qc2MvSmF2YUNsYXNzSlNDLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkv
anNjL0phdmFDbGFzc0pTQy5jcHAKaW5kZXggOTc1NmU3ZGY2MDVjMDk1M2U4YmI0ZTI4NTRiMWU1
NDQ5MWE5ZWYxNS4uNWRhYjNlNDFmMjM5YjEwNGFhMjliZjg0MDFjZTM5M2FmMmI1ODMxZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YUNsYXNzSlNDLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhQ2xhc3NKU0MuY3BwCkBAIC0x
MDcsNyArMTA3LDcgQEAgSmF2YUNsYXNzOjp+SmF2YUNsYXNzKCkKIAogICAgIE1ldGhvZExpc3RN
YXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fbWV0aG9kcy5lbmQoKTsKICAgICBmb3IgKE1ldGhv
ZExpc3RNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9tZXRob2RzLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewotICAgICAgICBjb25zdCBNZXRob2RMaXN0KiBtZXRob2RMaXN0ID0gaXQtPnNl
Y29uZDsKKyAgICAgICAgY29uc3QgTWV0aG9kTGlzdCogbWV0aG9kTGlzdCA9IGl0LT52YWx1ZTsK
ICAgICAgICAgZGVsZXRlQWxsVmFsdWVzKCptZXRob2RMaXN0KTsKICAgICAgICAgZGVsZXRlIG1l
dGhvZExpc3Q7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRp
bWVfcm9vdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9yb290LmNwcAppbmRl
eCBlODg0ZTYxYjEzODc2ZTg3N2E2Yzk5ZTY4M2VkYjk5NDEyN2UzZGYxLi45ZGRiOTU1ZTE5Y2Jl
MjZjOTgzNmRkOTQ4OWUwMmRjMDEwOGFlNzJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
cmlkZ2UvcnVudGltZV9yb290LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGlt
ZV9yb290LmNwcApAQCAtMTA1LDcgKzEwNSw3IEBAIHZvaWQgUm9vdE9iamVjdDo6aW52YWxpZGF0
ZSgpCiAgICAgewogICAgICAgICBIYXNoTWFwPFJ1bnRpbWVPYmplY3QqLCBKU0M6OldlYWs8UnVu
dGltZU9iamVjdD4gPjo6aXRlcmF0b3IgZW5kID0gbV9ydW50aW1lT2JqZWN0cy5lbmQoKTsKICAg
ICAgICAgZm9yIChIYXNoTWFwPFJ1bnRpbWVPYmplY3QqLCBKU0M6OldlYWs8UnVudGltZU9iamVj
dD4gPjo6aXRlcmF0b3IgaXQgPSBtX3J1bnRpbWVPYmplY3RzLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgewotICAgICAgICAgICAgaXQtPnNlY29uZC5nZXQoKS0+aW52YWxpZGF0ZSgpOworICAg
ICAgICAgICAgaXQtPnZhbHVlLmdldCgpLT5pbnZhbGlkYXRlKCk7CiAgICAgICAgIH0KIAogICAg
ICAgICBtX3J1bnRpbWVPYmplY3RzLmNsZWFyKCk7CkBAIC0xMjYsNyArMTI2LDcgQEAgdm9pZCBS
b290T2JqZWN0OjppbnZhbGlkYXRlKCkKIAogICAgIFByb3RlY3RDb3VudFNldDo6aXRlcmF0b3Ig
ZW5kID0gbV9wcm90ZWN0Q291bnRTZXQuZW5kKCk7CiAgICAgZm9yIChQcm90ZWN0Q291bnRTZXQ6
Oml0ZXJhdG9yIGl0ID0gbV9wcm90ZWN0Q291bnRTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KQotICAgICAgICBKU0M6OmdjVW5wcm90ZWN0KGl0LT5maXJzdCk7CisgICAgICAgIEpTQzo6Z2NV
bnByb3RlY3QoaXQtPmtleSk7CiAgICAgbV9wcm90ZWN0Q291bnRTZXQuY2xlYXIoKTsKIAogICAg
IHJvb3RPYmplY3RTZXQoKS0+cmVtb3ZlKHRoaXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0NhbnZhc1ZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYW52YXNW
YWx1ZS5jcHAKaW5kZXggNzgzY2VlZjgyYjUwZjg4NWUzNzA1OWU3NWRlMTU2ZGVkZjI3ZDE2MS4u
OWE5NTU0MGQ5NmVjY2MxOTcwNzI4NGI1N2I2YjJkMWM2OTBiMTY0NyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0NhbnZhc1ZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTQ2FudmFzVmFsdWUuY3BwCkBAIC00OSwxNCArNDksMTQgQEAgdm9pZCBDU1NDYW52YXNW
YWx1ZTo6Y2FudmFzQ2hhbmdlZChIVE1MQ2FudmFzRWxlbWVudCosIGNvbnN0IEZsb2F0UmVjdCYg
Y2hhbmdlZFIKICAgICBJbnRSZWN0IGltYWdlQ2hhbmdlUmVjdCA9IGVuY2xvc2luZ0ludFJlY3Qo
Y2hhbmdlZFJlY3QpOwogICAgIFJlbmRlck9iamVjdFNpemVDb3VudE1hcDo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gY2xpZW50cygpLmVuZCgpOwogICAgIGZvciAoUmVuZGVyT2JqZWN0U2l6ZUNvdW50
TWFwOjpjb25zdF9pdGVyYXRvciBjdXJyID0gY2xpZW50cygpLmJlZ2luKCk7IGN1cnIgIT0gZW5k
OyArK2N1cnIpCi0gICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyT2JqZWN0Kj4oY3Vyci0+Zmlyc3Qp
LT5pbWFnZUNoYW5nZWQoc3RhdGljX2Nhc3Q8V3JhcHBlZEltYWdlUHRyPih0aGlzKSwgJmltYWdl
Q2hhbmdlUmVjdCk7CisgICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyT2JqZWN0Kj4oY3Vyci0+a2V5
KS0+aW1hZ2VDaGFuZ2VkKHN0YXRpY19jYXN0PFdyYXBwZWRJbWFnZVB0cj4odGhpcyksICZpbWFn
ZUNoYW5nZVJlY3QpOwogfQogCiB2b2lkIENTU0NhbnZhc1ZhbHVlOjpjYW52YXNSZXNpemVkKEhU
TUxDYW52YXNFbGVtZW50KikKIHsKICAgICBSZW5kZXJPYmplY3RTaXplQ291bnRNYXA6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IGNsaWVudHMoKS5lbmQoKTsKICAgICBmb3IgKFJlbmRlck9iamVjdFNp
emVDb3VudE1hcDo6Y29uc3RfaXRlcmF0b3IgY3VyciA9IGNsaWVudHMoKS5iZWdpbigpOyBjdXJy
ICE9IGVuZDsgKytjdXJyKQotICAgICAgICBjb25zdF9jYXN0PFJlbmRlck9iamVjdCo+KGN1cnIt
PmZpcnN0KS0+aW1hZ2VDaGFuZ2VkKHN0YXRpY19jYXN0PFdyYXBwZWRJbWFnZVB0cj4odGhpcykp
OworICAgICAgICBjb25zdF9jYXN0PFJlbmRlck9iamVjdCo+KGN1cnItPmtleSktPmltYWdlQ2hh
bmdlZChzdGF0aWNfY2FzdDxXcmFwcGVkSW1hZ2VQdHI+KHRoaXMpKTsKIH0KIAogdm9pZCBDU1ND
YW52YXNWYWx1ZTo6Y2FudmFzRGVzdHJveWVkKEhUTUxDYW52YXNFbGVtZW50KiBlbGVtZW50KQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlv
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNw
cAppbmRleCA4ZDMzMTY4OGUyYmM1MGQxOTQ0ZDU4MzU2NzBiZDNiYTgxOTA5ZmJhLi40YzQxODNi
ZjM1MTZjNTkxZWM2MmQ2OTIxMThkNjg0MzA2MGQ5YmRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcApAQCAtMTIyOCw4ICsxMjI4
LDggQEAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGNvdW50ZXJUb0NTU1ZhbHVlKGNvbnN0
IFJlbmRlclN0eWxlKiBzdHlsZSwgQ1NTUHJvcGUKIAogICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+
IGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7CiAgICAgZm9yIChD
b3VudGVyRGlyZWN0aXZlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQg
IT0gbWFwLT5lbmQoKTsgKytpdCkgewotICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29s
KCkuY3JlYXRlVmFsdWUoaXQtPmZpcnN0LmdldCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NU
UklORykpOwotICAgICAgICBzaG9ydCBudW1iZXIgPSBwcm9wZXJ0eUlEID09IENTU1Byb3BlcnR5
Q291bnRlckluY3JlbWVudCA/IGl0LT5zZWNvbmQubV9pbmNyZW1lbnRWYWx1ZSA6IGl0LT5zZWNv
bmQubV9yZXNldFZhbHVlOworICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3Jl
YXRlVmFsdWUoaXQtPmtleS5nZXQoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpKTsK
KyAgICAgICAgc2hvcnQgbnVtYmVyID0gcHJvcGVydHlJRCA9PSBDU1NQcm9wZXJ0eUNvdW50ZXJJ
bmNyZW1lbnQgPyBpdC0+dmFsdWUubV9pbmNyZW1lbnRWYWx1ZSA6IGl0LT52YWx1ZS5tX3Jlc2V0
VmFsdWU7CiAgICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZSgo
ZG91YmxlKW51bWJlciwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKICAgICB9CiAg
ICAgcmV0dXJuIGxpc3QucmVsZWFzZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0Nyb3NzZmFkZVZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDcm9zc2ZhZGVW
YWx1ZS5jcHAKaW5kZXggNGZmMDhhZmNhNWZkNGExMDU1ZjVlZDE1ZmQxZThmYTkyNDA0YTZlMi4u
ZGM0OTQzMDk1MDJmZmNkOGVhMDk4ZjM0NWY2NGNkZWNhODZlM2U3YSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0Nyb3NzZmFkZVZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTQ3Jvc3NmYWRlVmFsdWUuY3BwCkBAIC0xNjEsNyArMTYxLDcgQEAgdm9pZCBDU1ND
cm9zc2ZhZGVWYWx1ZTo6Y3Jvc3NmYWRlQ2hhbmdlZChjb25zdCBJbnRSZWN0JikKIHsKICAgICBS
ZW5kZXJPYmplY3RTaXplQ291bnRNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGNsaWVudHMoKS5l
bmQoKTsKICAgICBmb3IgKFJlbmRlck9iamVjdFNpemVDb3VudE1hcDo6Y29uc3RfaXRlcmF0b3Ig
Y3VyciA9IGNsaWVudHMoKS5iZWdpbigpOyBjdXJyICE9IGVuZDsgKytjdXJyKSB7Ci0gICAgICAg
IFJlbmRlck9iamVjdCogY2xpZW50ID0gY29uc3RfY2FzdDxSZW5kZXJPYmplY3QqPihjdXJyLT5m
aXJzdCk7CisgICAgICAgIFJlbmRlck9iamVjdCogY2xpZW50ID0gY29uc3RfY2FzdDxSZW5kZXJP
YmplY3QqPihjdXJyLT5rZXkpOwogICAgICAgICBjbGllbnQtPmltYWdlQ2hhbmdlZChzdGF0aWNf
Y2FzdDxXcmFwcGVkSW1hZ2VQdHI+KHRoaXMpKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0ZvbnRGYWNlU291cmNlLmNwcAppbmRleCBkZDkwNGQzN2ZiOTU0ZTQ0ZGJhNjUzODc2NzM1
ODMxMTk4ZmFkM2Q3Li5jZTQ1MzY3YWMzMzIzNzJhMGZiOWVjOGM1YTUyZmI5ZjA4ODllZGY2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5jcHAKQEAgLTExNCw3ICsxMTQs
NyBAQCBTaW1wbGVGb250RGF0YSogQ1NTRm9udEZhY2VTb3VyY2U6OmdldEZvbnREYXRhKGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaQogICAgIHVuc2lnbmVkIGhhc2hLZXkgPSAoZm9u
dERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCkgKyAxKSA8PCA2IHwgZm9udERlc2NyaXB0
aW9uLndpZHRoVmFyaWFudCgpIDw8IDQKICAgICAgICAgICAgICAgICAgICAgICAgfCAoZm9udERl
c2NyaXB0aW9uLnRleHRPcmllbnRhdGlvbigpID09IFRleHRPcmllbnRhdGlvblVwcmlnaHQgPyA4
IDogMCkgfCAoZm9udERlc2NyaXB0aW9uLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwgPyA0IDog
MCkgfCAoc3ludGhldGljQm9sZCA/IDIgOiAwKSB8IChzeW50aGV0aWNJdGFsaWMgPyAxIDogMCk7
CiAKLSAgICBTaW1wbGVGb250RGF0YSomIGNhY2hlZERhdGEgPSBtX2ZvbnREYXRhVGFibGUuYWRk
KGhhc2hLZXksIDApLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgU2ltcGxlRm9udERhdGEqJiBjYWNo
ZWREYXRhID0gbV9mb250RGF0YVRhYmxlLmFkZChoYXNoS2V5LCAwKS5pdGVyYXRvci0+dmFsdWU7
CiAgICAgaWYgKGNhY2hlZERhdGEpCiAgICAgICAgIHJldHVybiBjYWNoZWREYXRhOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3BwCmluZGV4IGNiMzI2MmU1MjE2MTljYTYyYmYy
OWJlZjQ1YTJmYTE2NTM2NWI2NjYuLjQzMjUyMDQxNGQxNDM5YjMwZTNjMTgxZDg5NzgzYjZhNWFj
MGRkYzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3BwCkBAIC0yODUsNyAr
Mjg1LDcgQEAgdm9pZCBDU1NGb250U2VsZWN0b3I6OmFkZEZvbnRGYWNlUnVsZShjb25zdCBTdHls
ZVJ1bGVGb250RmFjZSogZm9udEZhY2VSdWxlKQogICAgICAgICBpZiAoZmFtaWx5TmFtZS5pc0Vt
cHR5KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBPd25QdHI8VmVjdG9yPFJl
ZlB0cjxDU1NGb250RmFjZT4gPiA+JiBmYW1pbHlGb250RmFjZXMgPSBtX2ZvbnRGYWNlcy5hZGQo
ZmFtaWx5TmFtZSwgbnVsbHB0cikuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgT3duUHRyPFZl
Y3RvcjxSZWZQdHI8Q1NTRm9udEZhY2U+ID4gPiYgZmFtaWx5Rm9udEZhY2VzID0gbV9mb250RmFj
ZXMuYWRkKGZhbWlseU5hbWUsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgaWYg
KCFmYW1pbHlGb250RmFjZXMpIHsKICAgICAgICAgICAgIGZhbWlseUZvbnRGYWNlcyA9IGFkb3B0
UHRyKG5ldyBWZWN0b3I8UmVmUHRyPENTU0ZvbnRGYWNlPiA+KTsKIApAQCAtNDg3LDEzICs0ODcs
MTMgQEAgRm9udERhdGEqIENTU0ZvbnRTZWxlY3Rvcjo6Z2V0Rm9udERhdGEoY29uc3QgRm9udERl
c2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGMKICAgICAgICAgcmV0dXJuIGZvbnREYXRhRm9y
R2VuZXJpY0ZhbWlseShtX2RvY3VtZW50LCBmb250RGVzY3JpcHRpb24sIGZhbWlseU5hbWUpOwog
ICAgIH0KIAotICAgIE93blB0cjxIYXNoTWFwPHVuc2lnbmVkLCBSZWZQdHI8Q1NTU2VnbWVudGVk
Rm9udEZhY2U+ID4gPiYgc2VnbWVudGVkRm9udEZhY2VDYWNoZSA9IG1fZm9udHMuYWRkKGZhbWls
eSwgbnVsbHB0cikuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBPd25QdHI8SGFzaE1hcDx1bnNpZ25l
ZCwgUmVmUHRyPENTU1NlZ21lbnRlZEZvbnRGYWNlPiA+ID4mIHNlZ21lbnRlZEZvbnRGYWNlQ2Fj
aGUgPSBtX2ZvbnRzLmFkZChmYW1pbHksIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKICAgICBp
ZiAoIXNlZ21lbnRlZEZvbnRGYWNlQ2FjaGUpCiAgICAgICAgIHNlZ21lbnRlZEZvbnRGYWNlQ2Fj
aGUgPSBhZG9wdFB0cihuZXcgSGFzaE1hcDx1bnNpZ25lZCwgUmVmUHRyPENTU1NlZ21lbnRlZEZv
bnRGYWNlPiA+KTsKIAogICAgIEZvbnRUcmFpdHNNYXNrIHRyYWl0c01hc2sgPSBmb250RGVzY3Jp
cHRpb24udHJhaXRzTWFzaygpOwogCi0gICAgUmVmUHRyPENTU1NlZ21lbnRlZEZvbnRGYWNlPiYg
ZmFjZSA9IHNlZ21lbnRlZEZvbnRGYWNlQ2FjaGUtPmFkZCh0cmFpdHNNYXNrLCAwKS5pdGVyYXRv
ci0+c2Vjb25kOworICAgIFJlZlB0cjxDU1NTZWdtZW50ZWRGb250RmFjZT4mIGZhY2UgPSBzZWdt
ZW50ZWRGb250RmFjZUNhY2hlLT5hZGQodHJhaXRzTWFzaywgMCkuaXRlcmF0b3ItPnZhbHVlOwog
ICAgIGlmICghZmFjZSkgewogICAgICAgICBmYWNlID0gQ1NTU2VnbWVudGVkRm9udEZhY2U6OmNy
ZWF0ZSh0aGlzKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlR2Vu
ZXJhdG9yVmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlR2VuZXJhdG9yVmFs
dWUuY3BwCmluZGV4IDliZTQ0NmJkMGZiODViMDY0ZDY5ZjE4NjMyNjk5YTAzOWEwYWMxZDYuLmEz
NDFlMmZjYWU1NzliZDcyOTIxZDZiZjM4MjdkOTJmMmYwYTlhNTkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZUdlbmVyYXRvclZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5jcHAKQEAgLTU2LDcgKzU2LDcgQEAgdm9p
ZCBDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjphZGRDbGllbnQoUmVuZGVyT2JqZWN0KiByZW5kZXJl
ciwgY29uc3QgSW50U2l6ZSYgc2kKICAgICBpZiAoaXQgPT0gbV9jbGllbnRzLmVuZCgpKQogICAg
ICAgICBtX2NsaWVudHMuYWRkKHJlbmRlcmVyLCBTaXplQW5kQ291bnQoc2l6ZSwgMSkpOwogICAg
IGVsc2UgewotICAgICAgICBTaXplQW5kQ291bnQmIHNpemVDb3VudCA9IGl0LT5zZWNvbmQ7Cisg
ICAgICAgIFNpemVBbmRDb3VudCYgc2l6ZUNvdW50ID0gaXQtPnZhbHVlOwogICAgICAgICArK3Np
emVDb3VudC5jb3VudDsKICAgICB9CiB9CkBAIC02OCw3ICs2OCw3IEBAIHZvaWQgQ1NTSW1hZ2VH
ZW5lcmF0b3JWYWx1ZTo6cmVtb3ZlQ2xpZW50KFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiAgICAg
QVNTRVJUKGl0ICE9IG1fY2xpZW50cy5lbmQoKSk7CiAKICAgICBJbnRTaXplIHJlbW92ZWRJbWFn
ZVNpemU7Ci0gICAgU2l6ZUFuZENvdW50JiBzaXplQ291bnQgPSBpdC0+c2Vjb25kOworICAgIFNp
emVBbmRDb3VudCYgc2l6ZUNvdW50ID0gaXQtPnZhbHVlOwogICAgIEludFNpemUgc2l6ZSA9IHNp
emVDb3VudC5zaXplOwogICAgIGlmICghc2l6ZS5pc0VtcHR5KCkpIHsKICAgICAgICAgbV9zaXpl
cy5yZW1vdmUoc2l6ZSk7CkBAIC04Niw3ICs4Niw3IEBAIEltYWdlKiBDU1NJbWFnZUdlbmVyYXRv
clZhbHVlOjpnZXRJbWFnZShSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBJbnRTaXplJiBz
CiB7CiAgICAgUmVuZGVyT2JqZWN0U2l6ZUNvdW50TWFwOjppdGVyYXRvciBpdCA9IG1fY2xpZW50
cy5maW5kKHJlbmRlcmVyKTsKICAgICBpZiAoaXQgIT0gbV9jbGllbnRzLmVuZCgpKSB7Ci0gICAg
ICAgIFNpemVBbmRDb3VudCYgc2l6ZUNvdW50ID0gaXQtPnNlY29uZDsKKyAgICAgICAgU2l6ZUFu
ZENvdW50JiBzaXplQ291bnQgPSBpdC0+dmFsdWU7CiAgICAgICAgIEludFNpemUgb2xkU2l6ZSA9
IHNpemVDb3VudC5zaXplOwogICAgICAgICBpZiAob2xkU2l6ZSAhPSBzaXplKSB7CiAgICAgICAg
ICAgICBSZWZQdHI8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4gcHJvdGVjdCh0aGlzKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuY3BwCmluZGV4IGNmOWVjOWUyZWQy
ZjlmZWYyYmJkOTRmZjY1ZTBhYWUzMmEzODQxMDIuLmFkMmU5ZTI1YjA0MDA0MGQ0NmE3ZWZmYzdj
MDgyYWE1NTA5NWY5NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWdtZW50
ZWRGb250RmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRG
YWNlLmNwcApAQCAtMTA2LDcgKzEwNiw3IEBAIEZvbnREYXRhKiBDU1NTZWdtZW50ZWRGb250RmFj
ZTo6Z2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpCiAgICAg
Rm9udFRyYWl0c01hc2sgZGVzaXJlZFRyYWl0c01hc2sgPSBmb250RGVzY3JpcHRpb24udHJhaXRz
TWFzaygpOwogICAgIHVuc2lnbmVkIGhhc2hLZXkgPSAoKGZvbnREZXNjcmlwdGlvbi5jb21wdXRl
ZFBpeGVsU2l6ZSgpICsgMSkgPDwgKEZvbnRUcmFpdHNNYXNrV2lkdGggKyAxKSkgfCAoKGZvbnRE
ZXNjcmlwdGlvbi5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsID8gMSA6IDApIDw8IEZvbnRUcmFp
dHNNYXNrV2lkdGgpIHwgZGVzaXJlZFRyYWl0c01hc2s7CiAKLSAgICBTZWdtZW50ZWRGb250RGF0
YSomIGZvbnREYXRhID0gbV9mb250RGF0YVRhYmxlLmFkZChoYXNoS2V5LCAwKS5pdGVyYXRvci0+
c2Vjb25kOworICAgIFNlZ21lbnRlZEZvbnREYXRhKiYgZm9udERhdGEgPSBtX2ZvbnREYXRhVGFi
bGUuYWRkKGhhc2hLZXksIDApLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoZm9udERhdGEpCiAg
ICAgICAgIHJldHVybiBmb250RGF0YTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1NlbGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvci5jcHAKaW5k
ZXggNTI4YjZjNGRjZTAwYjRhM2VhYWIwM2Q2ZDZkYTVhOWMxMzBhMzM1My4uNTFkNWRkMjAzMGJl
MWJlOTA5YjZmOGJhZDJjOTM3MGU0NTU4NmMyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1NlbGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VsZWN0b3Iu
Y3BwCkBAIC0zNzcsNyArMzc3LDcgQEAgQ1NTU2VsZWN0b3I6OlBzZXVkb1R5cGUgQ1NTU2VsZWN0
b3I6OnBhcnNlUHNldWRvVHlwZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpCiAgICAgICAgIHJl
dHVybiBQc2V1ZG9Vbmtub3duOwogICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCosIENTU1Nl
bGVjdG9yOjpQc2V1ZG9UeXBlPiogbmFtZVRvUHNldWRvVHlwZSA9IG5hbWVUb1BzZXVkb1R5cGVN
YXAoKTsKICAgICBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBDU1NTZWxlY3Rvcjo6UHNldWRv
VHlwZT46Oml0ZXJhdG9yIHNsb3QgPSBuYW1lVG9Qc2V1ZG9UeXBlLT5maW5kKG5hbWUuaW1wbCgp
KTsKLSAgICByZXR1cm4gc2xvdCA9PSBuYW1lVG9Qc2V1ZG9UeXBlLT5lbmQoKSA/IFBzZXVkb1Vu
a25vd24gOiBzbG90LT5zZWNvbmQ7CisgICAgcmV0dXJuIHNsb3QgPT0gbmFtZVRvUHNldWRvVHlw
ZS0+ZW5kKCkgPyBQc2V1ZG9Vbmtub3duIDogc2xvdC0+dmFsdWU7CiB9CiAKIGJvb2wgQ1NTU2Vs
ZWN0b3I6OmlzVW5rbm93blBzZXVkb1R5cGUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlUG9vbC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTVmFsdWVQb29sLmNwcAppbmRleCBjZTc1N2I5MzNiM2Y0YTMwMmU4NzE2NTY4
ZDAzZTAzZGJmMWIwNzZjLi5jMTY4OTkxOWQxNmVlMTZmMGVlMDczMTkxOTk2ZTk3YzVjOGZjOTBj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVQb29sLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVQb29sLmNwcApAQCAtNzgsOCArNzgsOCBAQCBQYXNz
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NWYWx1ZVBvb2w6OmNyZWF0ZUNvbG9yVmFsdWUo
dW5zaWduZWQgcmdiVmFsdWUpCiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBkdW1teVZh
bHVlOwogICAgIENvbG9yVmFsdWVDYWNoZTo6QWRkUmVzdWx0IGVudHJ5ID0gbV9jb2xvclZhbHVl
Q2FjaGUuYWRkKHJnYlZhbHVlLCBkdW1teVZhbHVlKTsKICAgICBpZiAoZW50cnkuaXNOZXdFbnRy
eSkKLSAgICAgICAgZW50cnkuaXRlcmF0b3ItPnNlY29uZCA9IENTU1ByaW1pdGl2ZVZhbHVlOjpj
cmVhdGVDb2xvcihyZ2JWYWx1ZSk7Ci0gICAgcmV0dXJuIGVudHJ5Lml0ZXJhdG9yLT5zZWNvbmQ7
CisgICAgICAgIGVudHJ5Lml0ZXJhdG9yLT52YWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVh
dGVDb2xvcihyZ2JWYWx1ZSk7CisgICAgcmV0dXJuIGVudHJ5Lml0ZXJhdG9yLT52YWx1ZTsKIH0K
IAogUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NTVmFsdWVQb29sOjpjcmVhdGVWYWx1
ZShkb3VibGUgdmFsdWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMgdHlwZSkKQEAgLTEx
Myw3ICsxMTMsNyBAQCBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NWYWx1ZVBvb2w6
OmNyZWF0ZVZhbHVlKGRvdWJsZSB2YWx1ZSwgQ1NTUHJpbWl0aQogCiBQYXNzUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiBDU1NWYWx1ZVBvb2w6OmNyZWF0ZUZvbnRGYW1pbHlWYWx1ZShjb25zdCBT
dHJpbmcmIGZhbWlseU5hbWUpCiB7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYgdmFs
dWUgPSBtX2ZvbnRGYW1pbHlWYWx1ZUNhY2hlLmFkZChmYW1pbHlOYW1lLCAwKS5pdGVyYXRvci0+
c2Vjb25kOworICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mIHZhbHVlID0gbV9mb250RmFt
aWx5VmFsdWVDYWNoZS5hZGQoZmFtaWx5TmFtZSwgMCkuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlm
ICghdmFsdWUpCiAgICAgICAgIHZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShmYW1p
bHlOYW1lLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORyk7CiAgICAgcmV0dXJuIHZhbHVl
OwpAQCAtMTI2LDcgKzEyNiw3IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWVMaXN0PiBDU1NWYWx1ZVBv
b2w6OmNyZWF0ZUZvbnRGYWNlVmFsdWUoY29uc3QgQXRvbWljU3RyaW5nJiBzCiAgICAgaWYgKG1f
Zm9udEZhY2VWYWx1ZUNhY2hlLnNpemUoKSA+IG1heGltdW1Gb250RmFjZUNhY2hlU2l6ZSkKICAg
ICAgICAgbV9mb250RmFjZVZhbHVlQ2FjaGUuY2xlYXIoKTsKIAotICAgIFJlZlB0cjxDU1NWYWx1
ZUxpc3Q+JiB2YWx1ZSA9IG1fZm9udEZhY2VWYWx1ZUNhY2hlLmFkZChzdHJpbmcsIDApLml0ZXJh
dG9yLT5zZWNvbmQ7CisgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4mIHZhbHVlID0gbV9mb250RmFj
ZVZhbHVlQ2FjaGUuYWRkKHN0cmluZywgMCkuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghdmFs
dWUpCiAgICAgICAgIHZhbHVlID0gQ1NTUGFyc2VyOjpwYXJzZUZvbnRGYWNlVmFsdWUoc3RyaW5n
KTsKICAgICByZXR1cm4gdmFsdWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvUHJv
cGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Qcm9w
ZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24uY3BwCmluZGV4IDUwNWQ0ZGQ4NGRlNzQzYTFmMzll
NDcyYjBiYTllODY2OWI5OTQ2ZmUuLmE1OTdkNzdmODFlNDlkZjBiZjViMDJhOTdmOWVlODVhZTJl
ZGEzY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Qcm9wZXJ0eVNldENTU1N0eWxl
RGVjbGFyYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Qcm9wZXJ0eVNldENTU1N0
eWxlRGVjbGFyYXRpb24uY3BwCkBAIC0yODYsNyArMjg2LDcgQEAgQ1NTVmFsdWUqIFByb3BlcnR5
U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6Y2xvbmVBbmRDYWNoZUZvckNTU09NKENTU1ZhbHVlKiBp
bnRlcm4KICAgICBpZiAoIW1fY3Nzb21DU1NWYWx1ZUNsb25lcykKICAgICAgICAgbV9jc3NvbUNT
U1ZhbHVlQ2xvbmVzID0gYWRvcHRQdHIobmV3IEhhc2hNYXA8Q1NTVmFsdWUqLCBSZWZQdHI8Q1NT
VmFsdWU+ID4pOwogICAgIAotICAgIFJlZlB0cjxDU1NWYWx1ZT4mIGNsb25lZFZhbHVlID0gbV9j
c3NvbUNTU1ZhbHVlQ2xvbmVzLT5hZGQoaW50ZXJuYWxWYWx1ZSwgUmVmUHRyPENTU1ZhbHVlPigp
KS5pdGVyYXRvci0+c2Vjb25kOworICAgIFJlZlB0cjxDU1NWYWx1ZT4mIGNsb25lZFZhbHVlID0g
bV9jc3NvbUNTU1ZhbHVlQ2xvbmVzLT5hZGQoaW50ZXJuYWxWYWx1ZSwgUmVmUHRyPENTU1ZhbHVl
PigpKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCFjbG9uZWRWYWx1ZSkKICAgICAgICAgY2xv
bmVkVmFsdWUgPSBpbnRlcm5hbFZhbHVlLT5jbG9uZUZvckNTU09NKCk7CiAgICAgcmV0dXJuIGNs
b25lZFZhbHVlLmdldCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVp
bGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyLmNwcAppbmRleCA3OWVk
ZjdjMmU5MDg2MGFjOWFiMGFkOTkzMzUwMmU0NzBlMDUzZGM3Li4xMmRiM2E3YWJjYzMwYTlhNGZi
NGZhZmJhOWVkZmE5ODRmNWNmNDBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyLmNwcApA
QCAtOTgzLDIxICs5ODMsMjEgQEAgcHVibGljOgogICAgICAgICB0eXBlZGVmIENvdW50ZXJEaXJl
Y3RpdmVNYXA6Oml0ZXJhdG9yIEl0ZXJhdG9yOwogICAgICAgICBJdGVyYXRvciBlbmQgPSBwYXJl
bnRNYXAuZW5kKCk7CiAgICAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSBwYXJlbnRNYXAuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBDb3VudGVyRGlyZWN0aXZlcyYgZGly
ZWN0aXZlcyA9IG1hcC5hZGQoaXQtPmZpcnN0LCBDb3VudGVyRGlyZWN0aXZlcygpKS5pdGVyYXRv
ci0+c2Vjb25kOworICAgICAgICAgICAgQ291bnRlckRpcmVjdGl2ZXMmIGRpcmVjdGl2ZXMgPSBt
YXAuYWRkKGl0LT5rZXksIENvdW50ZXJEaXJlY3RpdmVzKCkpLml0ZXJhdG9yLT52YWx1ZTsKICAg
ICAgICAgICAgIGlmIChjb3VudGVyQmVoYXZpb3IgPT0gUmVzZXQpIHsKLSAgICAgICAgICAgICAg
ICBkaXJlY3RpdmVzLm1fcmVzZXQgPSBpdC0+c2Vjb25kLm1fcmVzZXQ7Ci0gICAgICAgICAgICAg
ICAgZGlyZWN0aXZlcy5tX3Jlc2V0VmFsdWUgPSBpdC0+c2Vjb25kLm1fcmVzZXRWYWx1ZTsKKyAg
ICAgICAgICAgICAgICBkaXJlY3RpdmVzLm1fcmVzZXQgPSBpdC0+dmFsdWUubV9yZXNldDsKKyAg
ICAgICAgICAgICAgICBkaXJlY3RpdmVzLm1fcmVzZXRWYWx1ZSA9IGl0LT52YWx1ZS5tX3Jlc2V0
VmFsdWU7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8vIEluaGVyaXRp
bmcgYSBjb3VudGVyLWluY3JlbWVudCBtZWFucyB0YWtpbmcgdGhlIHBhcmVudCdzIGN1cnJlbnQg
dmFsdWUgZm9yIHRoZSBjb3VudGVyCiAgICAgICAgICAgICAgICAgLy8gYW5kIGFkZGluZyBpdCB0
byBpdHNlbGYuCi0gICAgICAgICAgICAgICAgZGlyZWN0aXZlcy5tX2luY3JlbWVudCA9IGl0LT5z
ZWNvbmQubV9pbmNyZW1lbnQ7CisgICAgICAgICAgICAgICAgZGlyZWN0aXZlcy5tX2luY3JlbWVu
dCA9IGl0LT52YWx1ZS5tX2luY3JlbWVudDsKICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzLm1f
aW5jcmVtZW50VmFsdWUgPSAwOwogICAgICAgICAgICAgICAgIGlmIChkaXJlY3RpdmVzLm1faW5j
cmVtZW50KSB7CiAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGluY3JlbWVudFZhbHVlID0gZGly
ZWN0aXZlcy5tX2luY3JlbWVudFZhbHVlOwotICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVz
Lm1faW5jcmVtZW50VmFsdWUgPSBjbGFtcFRvSW50ZWdlcihpbmNyZW1lbnRWYWx1ZSArIGl0LT5z
ZWNvbmQubV9pbmNyZW1lbnRWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXMu
bV9pbmNyZW1lbnRWYWx1ZSA9IGNsYW1wVG9JbnRlZ2VyKGluY3JlbWVudFZhbHVlICsgaXQtPnZh
bHVlLm1faW5jcmVtZW50VmFsdWUpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICAgICAgIGRpcmVjdGl2ZXMubV9pbmNyZW1lbnQgPSB0cnVlOwotICAgICAgICAgICAg
ICAgICAgICBkaXJlY3RpdmVzLm1faW5jcmVtZW50VmFsdWUgPSBpdC0+c2Vjb25kLm1faW5jcmVt
ZW50VmFsdWU7CisgICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXMubV9pbmNyZW1lbnRWYWx1
ZSA9IGl0LT52YWx1ZS5tX2luY3JlbWVudFZhbHVlOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KICAgICAgICAgfQpAQCAtMTAxNSw5ICsxMDE1LDkgQEAgcHVibGljOgogICAgICAg
ICBJdGVyYXRvciBlbmQgPSBtYXAuZW5kKCk7CiAgICAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSBt
YXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQogICAgICAgICAgICAgaWYgKGNvdW50ZXJCZWhh
dmlvciA9PSBSZXNldCkKLSAgICAgICAgICAgICAgICBpdC0+c2Vjb25kLm1fcmVzZXQgPSBmYWxz
ZTsKKyAgICAgICAgICAgICAgICBpdC0+dmFsdWUubV9yZXNldCA9IGZhbHNlOwogICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIGl0LT5zZWNvbmQubV9pbmNyZW1lbnQgPSBmYWxzZTsK
KyAgICAgICAgICAgICAgICBpdC0+dmFsdWUubV9pbmNyZW1lbnQgPSBmYWxzZTsKIAogICAgICAg
ICBpbnQgbGVuZ3RoID0gbGlzdCA/IGxpc3QtPmxlbmd0aCgpIDogMDsKICAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewpAQCAtMTAzMSw3ICsxMDMxLDcgQEAgcHVibGlj
OgogCiAgICAgICAgICAgICBBdG9taWNTdHJpbmcgaWRlbnRpZmllciA9IHN0YXRpY19jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlKj4ocGFpci0+Zmlyc3QoKSktPmdldFN0cmluZ1ZhbHVlKCk7CiAgICAg
ICAgICAgICBpbnQgdmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHBhaXIt
PnNlY29uZCgpKS0+Z2V0SW50VmFsdWUoKTsKLSAgICAgICAgICAgIENvdW50ZXJEaXJlY3RpdmVz
JiBkaXJlY3RpdmVzID0gbWFwLmFkZChpZGVudGlmaWVyLmltcGwoKSwgQ291bnRlckRpcmVjdGl2
ZXMoKSkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgICAgIENvdW50ZXJEaXJlY3RpdmVzJiBk
aXJlY3RpdmVzID0gbWFwLmFkZChpZGVudGlmaWVyLmltcGwoKSwgQ291bnRlckRpcmVjdGl2ZXMo
KSkuaXRlcmF0b3ItPnZhbHVlOwogICAgICAgICAgICAgaWYgKGNvdW50ZXJCZWhhdmlvciA9PSBS
ZXNldCkgewogICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXMubV9yZXNldCA9IHRydWU7CiAgICAg
ICAgICAgICAgICAgZGlyZWN0aXZlcy5tX3Jlc2V0VmFsdWUgPSB2YWx1ZTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnR5U2V0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVByb3BlcnR5U2V0LmNwcAppbmRleCBkNzMyNTU5MDU1YjQ4NjQyZTFhYTNjMzA4
N2M4NDNmZmI4ZmIxZTRmLi4xNDQ3ZDAxYmFmN2NhZDhlMmZjNDY4YjEwMWE3NTM0Njk4MTg5MGU3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0eVNldC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydHlTZXQuY3BwCkBAIC03MSw3ICs3MSw3
IEBAIFN0eWxlUHJvcGVydHlTZXQ6OlN0eWxlUHJvcGVydHlTZXQoY29uc3QgQ1NTUHJvcGVydHkq
IHByb3BlcnRpZXMsIGludCBudW1Qcm9wZXJ0CiAKICAgICAgICAgSGFzaE1hcDxpbnQsIGJvb2w+
OjppdGVyYXRvciBpdCA9IGNhbmRpZGF0ZXMuZmluZChwcm9wZXJ0eS5pZCgpKTsKICAgICAgICAg
aWYgKGl0ICE9IGNhbmRpZGF0ZXMuZW5kKCkpIHsKLSAgICAgICAgICAgIGlmICghaW1wb3J0YW50
ICYmIGl0LT5zZWNvbmQpCisgICAgICAgICAgICBpZiAoIWltcG9ydGFudCAmJiBpdC0+dmFsdWUp
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICByZW1vdmVQcm9wZXJ0eShw
cm9wZXJ0eS5pZCgpKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlUmVzb2x2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3Bw
CmluZGV4IGIxZjZkZWI5NGI4NGE0NjZiMTY2ODIxNGE3NTQ2ZTE0YjI4YjcyNTQuLjk3MWI2ZmZj
ZWY3MjM0ZTY4OGY5MTU3MjI4NDI1NmY1MzYzZTVkMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVS
ZXNvbHZlci5jcHAKQEAgLTQ1Nyw3ICs0NTcsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxl
Y3RGZWF0dXJlcygpCiAgICAgbV9mZWF0dXJlcy5hZGQobV9hdXRob3JTdHlsZS0+ZmVhdHVyZXMo
KSk7CiAjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKICAgICBmb3IgKFNjb3BlZFJ1bGVTZXRNYXA6
Oml0ZXJhdG9yIGl0ID0gbV9zY29wZWRBdXRob3JTdHlsZXMuYmVnaW4oKTsgaXQgIT0gbV9zY29w
ZWRBdXRob3JTdHlsZXMuZW5kKCk7ICsraXQpCi0gICAgICAgIG1fZmVhdHVyZXMuYWRkKGl0LT5z
ZWNvbmQtPmZlYXR1cmVzKCkpOworICAgICAgICBtX2ZlYXR1cmVzLmFkZChpdC0+dmFsdWUtPmZl
YXR1cmVzKCkpOwogI2VuZGlmCiAgICAgaWYgKG1fdXNlclN0eWxlKQogICAgICAgICBtX2ZlYXR1
cmVzLmFkZChtX3VzZXJTdHlsZS0+ZmVhdHVyZXMoKSk7CkBAIC00OTQsNyArNDk0LDcgQEAgaW5s
aW5lIFJ1bGVTZXQqIFN0eWxlUmVzb2x2ZXI6OnJ1bGVTZXRGb3JTY29wZShjb25zdCBDb250YWlu
ZXJOb2RlKiBzY29wZSkgY29uc3QKICAgICBpZiAoIXNjb3BlLT5oYXNTY29wZWRIVE1MU3R5bGVD
aGlsZCgpKQogICAgICAgICByZXR1cm4gMDsKICAgICBTY29wZWRSdWxlU2V0TWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IG1fc2NvcGVkQXV0aG9yU3R5bGVzLmZpbmQoc2NvcGUpOwotICAgIHJldHVy
biBpdCAhPSBtX3Njb3BlZEF1dGhvclN0eWxlcy5lbmQoKSA/IGl0LT5zZWNvbmQuZ2V0KCkgOiAw
OyAKKyAgICByZXR1cm4gaXQgIT0gbV9zY29wZWRBdXRob3JTdHlsZXMuZW5kKCkgPyBpdC0+dmFs
dWUuZ2V0KCkgOiAwOyAKIH0KICNlbmRpZgogCkBAIC01MTMsOCArNTEzLDggQEAgdm9pZCBTdHls
ZVJlc29sdmVyOjphcHBlbmRBdXRob3JTdHlsZXNoZWV0cyh1bnNpZ25lZCBmaXJzdE5ldywgY29u
c3QgVmVjdG9yPFJlZlAKICAgICAgICAgaWYgKHNjb3BlKSB7CiAgICAgICAgICAgICBTY29wZWRS
dWxlU2V0TWFwOjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gbV9zY29wZWRBdXRob3JTdHlsZXMuYWRk
KHNjb3BlLCBudWxscHRyKTsKICAgICAgICAgICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkK
LSAgICAgICAgICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IFJ1bGVTZXQ6OmNy
ZWF0ZSgpOwotICAgICAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQtPmFkZFJ1bGVz
RnJvbVNoZWV0KHNoZWV0LCAqbV9tZWRpdW0sIHRoaXMsIHNjb3BlKTsKKyAgICAgICAgICAgICAg
ICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gUnVsZVNldDo6Y3JlYXRlKCk7CisgICAgICAg
ICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5hZGRSdWxlc0Zyb21TaGVldChzaGVldCwg
Km1fbWVkaXVtLCB0aGlzLCBzY29wZSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
fQogI2VuZGlmCkBAIC02MzUsMTAgKzYzNSwxMCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OnN3ZWVw
TWF0Y2hlZFByb3BlcnRpZXNDYWNoZSgpCiAgICAgTWF0Y2hlZFByb3BlcnRpZXNDYWNoZTo6aXRl
cmF0b3IgaXQgPSBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUuYmVnaW4oKTsKICAgICBNYXRjaGVk
UHJvcGVydGllc0NhY2hlOjppdGVyYXRvciBlbmQgPSBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUu
ZW5kKCk7CiAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBWZWN0b3I8TWF0
Y2hlZFByb3BlcnRpZXM+JiBtYXRjaGVkUHJvcGVydGllcyA9IGl0LT5zZWNvbmQubWF0Y2hlZFBy
b3BlcnRpZXM7CisgICAgICAgIFZlY3RvcjxNYXRjaGVkUHJvcGVydGllcz4mIG1hdGNoZWRQcm9w
ZXJ0aWVzID0gaXQtPnZhbHVlLm1hdGNoZWRQcm9wZXJ0aWVzOwogICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAg
ICBpZiAobWF0Y2hlZFByb3BlcnRpZXNbaV0ucHJvcGVydGllcy0+aGFzT25lUmVmKCkpIHsKLSAg
ICAgICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgICAgICAg
ICB0b1JlbW92ZS5hcHBlbmQoaXQtPmtleSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE3MDcsNyArMTcwNyw3IEBAIHZvaWQgU3R5bGVSZXNv
bHZlcjo6a2V5ZnJhbWVTdHlsZXNGb3JBbmltYXRpb24oRWxlbWVudCogZSwgY29uc3QgUmVuZGVy
U3R5bGUqIGVsCiAgICAgaWYgKGl0ID09IG1fa2V5ZnJhbWVzUnVsZU1hcC5lbmQoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgY29uc3QgU3R5bGVSdWxlS2V5ZnJhbWVzKiBrZXlmcmFtZXNSdWxl
ID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICBjb25zdCBTdHlsZVJ1bGVLZXlmcmFtZXMqIGtleWZy
YW1lc1J1bGUgPSBpdC0+dmFsdWUuZ2V0KCk7CiAKICAgICAvLyBDb25zdHJ1Y3QgYW5kIHBvcHVs
YXRlIHRoZSBzdHlsZSBmb3IgZWFjaCBrZXlmcmFtZQogICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8
U3R5bGVLZXlmcmFtZT4gPiYga2V5ZnJhbWVzID0ga2V5ZnJhbWVzUnVsZS0+a2V5ZnJhbWVzKCk7
CkBAIC0yNDAzLDcgKzI0MDMsNyBAQCB2b2lkIFJ1bGVTZXQ6OmFkZFRvUnVsZVNldChBdG9taWNT
dHJpbmdJbXBsKiBrZXksIEF0b21SdWxlTWFwJiBtYXAsIGNvbnN0IFJ1bGVEYQogewogICAgIGlm
ICgha2V5KQogICAgICAgICByZXR1cm47Ci0gICAgT3duUHRyPFZlY3RvcjxSdWxlRGF0YT4gPiYg
cnVsZXMgPSBtYXAuYWRkKGtleSwgbnVsbHB0cikuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBPd25Q
dHI8VmVjdG9yPFJ1bGVEYXRhPiA+JiBydWxlcyA9IG1hcC5hZGQoa2V5LCBudWxscHRyKS5pdGVy
YXRvci0+dmFsdWU7CiAgICAgaWYgKCFydWxlcykKICAgICAgICAgcnVsZXMgPSBhZG9wdFB0cihu
ZXcgVmVjdG9yPFJ1bGVEYXRhPik7CiAgICAgcnVsZXMtPmFwcGVuZChydWxlRGF0YSk7CkBAIC0y
NTY0LDcgKzI1NjQsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2hyaW5rTWFwVmVjdG9yc1RvRml0
KFJ1bGVTZXQ6OkF0b21SdWxlTWFwJiBtYXApCiB7CiAgICAgUnVsZVNldDo6QXRvbVJ1bGVNYXA6
Oml0ZXJhdG9yIGVuZCA9IG1hcC5lbmQoKTsKICAgICBmb3IgKFJ1bGVTZXQ6OkF0b21SdWxlTWFw
OjppdGVyYXRvciBpdCA9IG1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0
LT5zZWNvbmQtPnNocmlua1RvRml0KCk7CisgICAgICAgIGl0LT52YWx1ZS0+c2hyaW5rVG9GaXQo
KTsKIH0KIAogdm9pZCBSdWxlU2V0OjpzaHJpbmtUb0ZpdCgpCkBAIC0yNzAwLDcgKzI3MDAsNyBA
QCBjb25zdCBTdHlsZVJlc29sdmVyOjpNYXRjaGVkUHJvcGVydGllc0NhY2hlSXRlbSogU3R5bGVS
ZXNvbHZlcjo6ZmluZEZyb21NYXRjaGVkUAogICAgIE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGU6Oml0
ZXJhdG9yIGl0ID0gbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlLmZpbmQoaGFzaCk7CiAgICAgaWYg
KGl0ID09IG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZS5lbmQoKSkKICAgICAgICAgcmV0dXJuIDA7
Ci0gICAgTWF0Y2hlZFByb3BlcnRpZXNDYWNoZUl0ZW0mIGNhY2hlSXRlbSA9IGl0LT5zZWNvbmQ7
CisgICAgTWF0Y2hlZFByb3BlcnRpZXNDYWNoZUl0ZW0mIGNhY2hlSXRlbSA9IGl0LT52YWx1ZTsK
IAogICAgIHNpemVfdCBzaXplID0gbWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgp
OwogICAgIGlmIChzaXplICE9IGNhY2hlSXRlbS5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hlY2tlZFJhZGlvQnV0dG9ucy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9kb20vQ2hlY2tlZFJhZGlvQnV0dG9ucy5jcHAKaW5kZXggZTY3MjMyOWFm
OGRlMzc4YmVmZGZjMTRmOGFjYmQwZjJlYzBjNzQwNS4uOWZhNTA5YmI5NTFkMzgwOTE0MDAwMDEx
ZWU1Y2U2NTE0YTk4ZDQ2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0NoZWNrZWRS
YWRpb0J1dHRvbnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGVja2VkUmFkaW9CdXR0
b25zLmNwcApAQCAtMTg1LDcgKzE4NSw3IEBAIHZvaWQgQ2hlY2tlZFJhZGlvQnV0dG9uczo6YWRk
QnV0dG9uKEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgaWYgKCFtX25hbWVUb0dyb3Vw
TWFwKQogICAgICAgICBtX25hbWVUb0dyb3VwTWFwID0gYWRvcHRQdHIobmV3IE5hbWVUb0dyb3Vw
TWFwKTsKIAotICAgIE93blB0cjxSYWRpb0J1dHRvbkdyb3VwPiYgZ3JvdXAgPSBtX25hbWVUb0dy
b3VwTWFwLT5hZGQoZWxlbWVudC0+bmFtZSgpLmltcGwoKSwgUGFzc093blB0cjxSYWRpb0J1dHRv
bkdyb3VwPigpKS5pdGVyYXRvci0+c2Vjb25kOworICAgIE93blB0cjxSYWRpb0J1dHRvbkdyb3Vw
PiYgZ3JvdXAgPSBtX25hbWVUb0dyb3VwTWFwLT5hZGQoZWxlbWVudC0+bmFtZSgpLmltcGwoKSwg
UGFzc093blB0cjxSYWRpb0J1dHRvbkdyb3VwPigpKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYg
KCFncm91cCkKICAgICAgICAgZ3JvdXAgPSBSYWRpb0J1dHRvbkdyb3VwOjpjcmVhdGUoKTsKICAg
ICBncm91cC0+YWRkKGVsZW1lbnQpOwpAQCAtMjQ2LDggKzI0Niw4IEBAIHZvaWQgQ2hlY2tlZFJh
ZGlvQnV0dG9uczo6cmVtb3ZlQnV0dG9uKEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQpCiAgICAg
TmFtZVRvR3JvdXBNYXA6Oml0ZXJhdG9yIGl0ID0gbV9uYW1lVG9Hcm91cE1hcC0+ZmluZChlbGVt
ZW50LT5uYW1lKCkuaW1wbCgpKTsKICAgICBpZiAoaXQgPT0gbV9uYW1lVG9Hcm91cE1hcC0+ZW5k
KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBpdC0+c2Vjb25kLT5yZW1vdmUoZWxlbWVudCk7Ci0g
ICAgaWYgKGl0LT5zZWNvbmQtPmlzRW1wdHkoKSkgeworICAgIGl0LT52YWx1ZS0+cmVtb3ZlKGVs
ZW1lbnQpOworICAgIGlmIChpdC0+dmFsdWUtPmlzRW1wdHkoKSkgewogICAgICAgICAvLyBGSVhN
RTogV2UgbWF5IHNraXAgZGVhbGxvY2F0aW5nIHRoZSBlbXB0eSBSYWRpb0J1dHRvbkdyb3VwIGZv
cgogICAgICAgICAvLyBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudC4gSWYgd2UgZG8gc28sIHdlIG5l
ZWQgdG8gY2hhbmdlIHRoZSBrZXkgdHlwZQogICAgICAgICAvLyBvZiBtX25hbWVUb0dyb3VwTWFw
IGZyb20gQXRvbWljU3RyaW5nSW1wbCogdG8gUmVmUHRyPEF0b21pY1N0cmluZ0ltcGw+LgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0NoaWxkTGlzdE11dGF0aW9uU2NvcGUuY3BwIGIv
U291cmNlL1dlYkNvcmUvZG9tL0NoaWxkTGlzdE11dGF0aW9uU2NvcGUuY3BwCmluZGV4IGY0YTJk
YTA0YWI2MTU4MTNmODY0YWUxMzU2ZjRlYWE0ZGIwYmZlNDkuLmFmZDhkZDlmMWIwMDk4NWM3YTI3
YmJiYmRhM2ViZjgwNzc2ZDRjN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGls
ZExpc3RNdXRhdGlvblNjb3BlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGRMaXN0
TXV0YXRpb25TY29wZS5jcHAKQEAgLTE5MiwyNyArMTkyLDI3IEBAIHZvaWQgQ2hpbGRMaXN0TXV0
YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXI6OmNoaWxkQWRkZWQoTm9kZSog
dGFyZ2V0CiB7CiAgICAgSGFzaE1hcDxOb2RlKiwgT3duUHRyPENoaWxkTGlzdE11dGF0aW9uU2Nv
cGU6Ok11dGF0aW9uQWNjdW11bGF0b3I+ID46Oml0ZXJhdG9yIGl0ZXIgPSBtX2FjY3VtdWxhdGlv
bnMuZmluZCh0YXJnZXQpOwogICAgIEFTU0VSVChpdGVyICE9IG1fYWNjdW11bGF0aW9ucy5lbmQo
KSk7Ci0gICAgaWYgKGl0ZXIgPT0gbV9hY2N1bXVsYXRpb25zLmVuZCgpIHx8ICFpdGVyLT5zZWNv
bmQpCisgICAgaWYgKGl0ZXIgPT0gbV9hY2N1bXVsYXRpb25zLmVuZCgpIHx8ICFpdGVyLT52YWx1
ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaXRlci0+c2Vjb25kLT5jaGlsZEFkZGVkKGNoaWxk
KTsKKyAgICBpdGVyLT52YWx1ZS0+Y2hpbGRBZGRlZChjaGlsZCk7CiB9CiAKIHZvaWQgQ2hpbGRM
aXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXI6OndpbGxSZW1vdmVD
aGlsZChOb2RlKiB0YXJnZXQsIE5vZGUqIGNoaWxkKQogewogICAgIEhhc2hNYXA8Tm9kZSosIE93
blB0cjxDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdG9yPiA+OjppdGVy
YXRvciBpdGVyID0gbV9hY2N1bXVsYXRpb25zLmZpbmQodGFyZ2V0KTsKICAgICBBU1NFUlQoaXRl
ciAhPSBtX2FjY3VtdWxhdGlvbnMuZW5kKCkpOwotICAgIGlmIChpdGVyID09IG1fYWNjdW11bGF0
aW9ucy5lbmQoKSB8fCAhaXRlci0+c2Vjb25kKQorICAgIGlmIChpdGVyID09IG1fYWNjdW11bGF0
aW9ucy5lbmQoKSB8fCAhaXRlci0+dmFsdWUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGl0ZXIt
PnNlY29uZC0+d2lsbFJlbW92ZUNoaWxkKGNoaWxkKTsKKyAgICBpdGVyLT52YWx1ZS0+d2lsbFJl
bW92ZUNoaWxkKGNoaWxkKTsKIH0KIAogdm9pZCBDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRh
dGlvbkFjY3VtdWxhdGlvblJvdXRlcjo6aW5jcmVtZW50U2NvcGluZ0xldmVsKE5vZGUqIHRhcmdl
dCkKIHsKICAgICBTY29waW5nTGV2ZWxNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX3Njb3BpbmdM
ZXZlbHMuYWRkKHRhcmdldCwgMSk7CiAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkgewotICAg
ICAgICArKyhyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7CisgICAgICAgICsrKHJlc3VsdC5pdGVy
YXRvci0+dmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0yMjksOCArMjI5LDgg
QEAgdm9pZCBDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRl
cjo6ZGVjcmVtZW50U2NvcGluZ0xldmVsKE4KICAgICBTY29waW5nTGV2ZWxNYXA6Oml0ZXJhdG9y
IGl0ZXIgPSBtX3Njb3BpbmdMZXZlbHMuZmluZCh0YXJnZXQpOwogICAgIEFTU0VSVChpdGVyICE9
IG1fc2NvcGluZ0xldmVscy5lbmQoKSk7CiAKLSAgICAtLShpdGVyLT5zZWNvbmQpOwotICAgIGlm
IChpdGVyLT5zZWNvbmQgPiAwKQorICAgIC0tKGl0ZXItPnZhbHVlKTsKKyAgICBpZiAoaXRlci0+
dmFsdWUgPiAwKQogICAgICAgICByZXR1cm47CiAKICAgICBtX3Njb3BpbmdMZXZlbHMucmVtb3Zl
KGl0ZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggZDE1MWY1NmMwZjFhNzMyYzU0ZDEz
ZWEzYWQ1NzNkNGZiNWJkMmM4Yi4uNGI1ZTU1ZWVkMDNlOWNiODNiOTg3YjlhZTE1ZGU5MDRkYjc1
YzUyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC0yODEyLDcgKzI4MTIsNyBAQCBjb25z
dCBWZWN0b3I8UmVmUHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4gPiogRG9jdW1lbnQ6OnBhZ2VHcm91
cFVzZXJTaGVldHMoKSBjb25zdAogCiAgICAgVXNlclN0eWxlU2hlZXRNYXA6OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IHNoZWV0c01hcC0+ZW5kKCk7CiAgICAgZm9yIChVc2VyU3R5bGVTaGVldE1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBzaGVldHNNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewotICAgICAgICBjb25zdCBVc2VyU3R5bGVTaGVldFZlY3Rvciogc2hlZXRzID0gaXQtPnNlY29u
ZC5nZXQoKTsKKyAgICAgICAgY29uc3QgVXNlclN0eWxlU2hlZXRWZWN0b3IqIHNoZWV0cyA9IGl0
LT52YWx1ZS5nZXQoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNoZWV0cy0+
c2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIGNvbnN0IFVzZXJTdHlsZVNoZWV0KiBzaGVldCA9
IHNoZWV0cy0+YXQoaSkuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoc2hlZXQtPmluamVjdGVkRnJh
bWVzKCkgPT0gSW5qZWN0SW5Ub3BGcmFtZU9ubHkgJiYgb3duZXJFbGVtZW50KCkpCkBAIC00NjE4
LDcgKzQ2MTgsNyBAQCBIVE1MQWxsQ29sbGVjdGlvbiogRG9jdW1lbnQ6OmFsbCgpCiAKIEhUTUxD
b2xsZWN0aW9uKiBEb2N1bWVudDo6d2luZG93TmFtZWRJdGVtcyhjb25zdCBBdG9taWNTdHJpbmcm
IG5hbWUpCiB7Ci0gICAgT3duUHRyPEhUTUxOYW1lQ29sbGVjdGlvbj4mIGNvbGxlY3Rpb24gPSBt
X3dpbmRvd05hbWVkSXRlbUNvbGxlY3Rpb25zLmFkZChuYW1lLmltcGwoKSwgbnVsbHB0cikuaXRl
cmF0b3ItPnNlY29uZDsKKyAgICBPd25QdHI8SFRNTE5hbWVDb2xsZWN0aW9uPiYgY29sbGVjdGlv
biA9IG1fd2luZG93TmFtZWRJdGVtQ29sbGVjdGlvbnMuYWRkKG5hbWUuaW1wbCgpLCBudWxscHRy
KS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCFjb2xsZWN0aW9uKQogICAgICAgICBjb2xsZWN0
aW9uID0gSFRNTE5hbWVDb2xsZWN0aW9uOjpjcmVhdGUodGhpcywgV2luZG93TmFtZWRJdGVtcywg
bmFtZSk7CiAgICAgcmV0dXJuIGNvbGxlY3Rpb24uZ2V0KCk7CkBAIC00NjI2LDcgKzQ2MjYsNyBA
QCBIVE1MQ29sbGVjdGlvbiogRG9jdW1lbnQ6OndpbmRvd05hbWVkSXRlbXMoY29uc3QgQXRvbWlj
U3RyaW5nJiBuYW1lKQogCiBIVE1MQ29sbGVjdGlvbiogRG9jdW1lbnQ6OmRvY3VtZW50TmFtZWRJ
dGVtcyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpCiB7Ci0gICAgT3duUHRyPEhUTUxOYW1lQ29s
bGVjdGlvbj4mIGNvbGxlY3Rpb24gPSBtX2RvY3VtZW50TmFtZWRJdGVtQ29sbGVjdGlvbnMuYWRk
KG5hbWUuaW1wbCgpLCBudWxscHRyKS5pdGVyYXRvci0+c2Vjb25kOworICAgIE93blB0cjxIVE1M
TmFtZUNvbGxlY3Rpb24+JiBjb2xsZWN0aW9uID0gbV9kb2N1bWVudE5hbWVkSXRlbUNvbGxlY3Rp
b25zLmFkZChuYW1lLmltcGwoKSwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICgh
Y29sbGVjdGlvbikKICAgICAgICAgY29sbGVjdGlvbiA9IEhUTUxOYW1lQ29sbGVjdGlvbjo6Y3Jl
YXRlKHRoaXMsIERvY3VtZW50TmFtZWRJdGVtcywgbmFtZSk7CiAgICAgcmV0dXJuIGNvbGxlY3Rp
b24uZ2V0KCk7CkBAIC00NzIxLDcgKzQ3MjEsNyBAQCB2b2lkIERvY3VtZW50OjpzZXRTdGF0ZUZv
ck5ld0Zvcm1FbGVtZW50cyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgc3RhdGVWZWN0b3IpCiAgICAg
ICAgIEZvcm1FbGVtZW50S2V5IGtleShhLmltcGwoKSwgYi5pbXBsKCkpOwogICAgICAgICBJdGVy
YXRvciBpdCA9IG1fc3RhdGVGb3JOZXdGb3JtRWxlbWVudHMuZmluZChrZXkpOwogICAgICAgICBp
ZiAoaXQgIT0gbV9zdGF0ZUZvck5ld0Zvcm1FbGVtZW50cy5lbmQoKSkKLSAgICAgICAgICAgIGl0
LT5zZWNvbmQuYXBwZW5kKGMpOworICAgICAgICAgICAgaXQtPnZhbHVlLmFwcGVuZChjKTsKICAg
ICAgICAgZWxzZSB7CiAgICAgICAgICAgICBWZWN0b3I8U3RyaW5nPiB2KDEpOwogICAgICAgICAg
ICAgdlswXSA9IGM7CkBAIC00NzQxLDEwICs0NzQxLDEwIEBAIGJvb2wgRG9jdW1lbnQ6OnRha2VT
dGF0ZUZvckZvcm1FbGVtZW50KEF0b21pY1N0cmluZ0ltcGwqIG5hbWUsIEF0b21pY1N0cmluZ0lt
cGwqCiAgICAgSXRlcmF0b3IgaXQgPSBtX3N0YXRlRm9yTmV3Rm9ybUVsZW1lbnRzLmZpbmQoRm9y
bUVsZW1lbnRLZXkobmFtZSwgdHlwZSkpOwogICAgIGlmIChpdCA9PSBtX3N0YXRlRm9yTmV3Rm9y
bUVsZW1lbnRzLmVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgQVNTRVJUKGl0LT5z
ZWNvbmQuc2l6ZSgpKTsKLSAgICBzdGF0ZSA9IGl0LT5zZWNvbmQubGFzdCgpOwotICAgIGlmIChp
dC0+c2Vjb25kLnNpemUoKSA+IDEpCi0gICAgICAgIGl0LT5zZWNvbmQucmVtb3ZlTGFzdCgpOwor
ICAgIEFTU0VSVChpdC0+dmFsdWUuc2l6ZSgpKTsKKyAgICBzdGF0ZSA9IGl0LT52YWx1ZS5sYXN0
KCk7CisgICAgaWYgKGl0LT52YWx1ZS5zaXplKCkgPiAxKQorICAgICAgICBpdC0+dmFsdWUucmVt
b3ZlTGFzdCgpOwogICAgIGVsc2UKICAgICAgICAgbV9zdGF0ZUZvck5ld0Zvcm1FbGVtZW50cy5y
ZW1vdmUoaXQpOwogICAgIHJldHVybiB0cnVlOwpAQCAtNTAzNCw3ICs1MDM0LDcgQEAgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dCogRG9jdW1lbnQ6OmdldENTU0NhbnZhc0NvbnRleHQoY29uc3QgU3Ry
aW5nJiB0eXBlLCBjb25zdAogCiBIVE1MQ2FudmFzRWxlbWVudCogRG9jdW1lbnQ6OmdldENTU0Nh
bnZhc0VsZW1lbnQoY29uc3QgU3RyaW5nJiBuYW1lKQogewotICAgIFJlZlB0cjxIVE1MQ2FudmFz
RWxlbWVudD4mIGVsZW1lbnQgPSBtX2Nzc0NhbnZhc0VsZW1lbnRzLmFkZChuYW1lLCAwKS5pdGVy
YXRvci0+c2Vjb25kOworICAgIFJlZlB0cjxIVE1MQ2FudmFzRWxlbWVudD4mIGVsZW1lbnQgPSBt
X2Nzc0NhbnZhc0VsZW1lbnRzLmFkZChuYW1lLCAwKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYg
KCFlbGVtZW50KQogICAgICAgICBlbGVtZW50ID0gSFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZSh0
aGlzKTsKICAgICByZXR1cm4gZWxlbWVudC5nZXQoKTsKQEAgLTU4NjAsMTAgKzU4NjAsMTAgQEAg
UGFzc1JlZlB0cjxOb2RlTGlzdD4gRG9jdW1lbnQ6OmdldEl0ZW1zKGNvbnN0IFN0cmluZyYgdHlw
ZU5hbWVzKQogCiAgICAgTm9kZUxpc3RzTm9kZURhdGE6Ok1pY3JvRGF0YUl0ZW1MaXN0Q2FjaGU6
OkFkZFJlc3VsdCByZXN1bHQgPSBub2RlTGlzdHMtPm1fbWljcm9EYXRhSXRlbUxpc3RDYWNoZS5h
ZGQobG9jYWxUeXBlTmFtZXMsIDApOwogICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0gICAg
ICAgIHJldHVybiBQYXNzUmVmUHRyPE5vZGVMaXN0PihyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7
CisgICAgICAgIHJldHVybiBQYXNzUmVmUHRyPE5vZGVMaXN0PihyZXN1bHQuaXRlcmF0b3ItPnZh
bHVlKTsKIAogICAgIFJlZlB0cjxNaWNyb0RhdGFJdGVtTGlzdD4gbGlzdCA9IE1pY3JvRGF0YUl0
ZW1MaXN0OjpjcmVhdGUodGhpcywgdHlwZU5hbWVzKTsKLSAgICByZXN1bHQuaXRlcmF0b3ItPnNl
Y29uZCA9IGxpc3QuZ2V0KCk7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGxpc3QuZ2V0
KCk7CiAgICAgcmV0dXJuIGxpc3QucmVsZWFzZSgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwCmluZGV4IDA1NTEwNzcxMTRiNGJjN2Vh
N2I4YjFjNGVjZTk1ZTEwNDNlZDg1ZGUuLmI5MGM0YTVkNDk2OTU2Yzg0MzE1M2FlNjdmNzkxMTI4
ZWQzMThkZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNv
bnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRy
b2xsZXIuY3BwCkBAIC0zMTEsNyArMzExLDcgQEAgRG9jdW1lbnRNYXJrZXIqIERvY3VtZW50TWFy
a2VyQ29udHJvbGxlcjo6bWFya2VyQ29udGFpbmluZ1BvaW50KGNvbnN0IExheW91dFBvaW4KICAg
ICBNYXJrZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fbWFya2Vycy5lbmQoKTsKICAgICBmb3IgKE1h
cmtlck1hcDo6aXRlcmF0b3Igbm9kZUl0ZXJhdG9yID0gbV9tYXJrZXJzLmJlZ2luKCk7IG5vZGVJ
dGVyYXRvciAhPSBlbmQ7ICsrbm9kZUl0ZXJhdG9yKSB7CiAgICAgICAgIC8vIGlubmVyIGxvb3A7
IHByb2Nlc3MgZWFjaCBtYXJrZXIgaW4gdGhpcyBub2RlCi0gICAgICAgIE1hcmtlckxpc3QqIGxp
c3QgPSBub2RlSXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgTWFya2VyTGlzdCogbGlzdCA9IG5v
ZGVJdGVyYXRvci0+dmFsdWU7CiAgICAgICAgIHVuc2lnbmVkIG1hcmtlckNvdW50ID0gbGlzdC0+
c2l6ZSgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIG1hcmtlckluZGV4ID0gMDsgbWFya2VySW5k
ZXggPCBtYXJrZXJDb3VudDsgKyttYXJrZXJJbmRleCkgewogICAgICAgICAgICAgUmVuZGVyZWRE
b2N1bWVudE1hcmtlciYgbWFya2VyID0gbGlzdC0+YXQobWFya2VySW5kZXgpOwpAQCAtMzk5LDcg
KzM5OSw3IEBAIFZlY3RvcjxJbnRSZWN0PiBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbmRl
cmVkUmVjdHNGb3JNYXJrZXJzKERvY3VtZW50TWFya2VyCiAgICAgTWFya2VyTWFwOjppdGVyYXRv
ciBlbmQgPSBtX21hcmtlcnMuZW5kKCk7CiAgICAgZm9yIChNYXJrZXJNYXA6Oml0ZXJhdG9yIG5v
ZGVJdGVyYXRvciA9IG1fbWFya2Vycy5iZWdpbigpOyBub2RlSXRlcmF0b3IgIT0gZW5kOyArK25v
ZGVJdGVyYXRvcikgewogICAgICAgICAvLyBpbm5lciBsb29wOyBwcm9jZXNzIGVhY2ggbWFya2Vy
IGluIHRoaXMgbm9kZQotICAgICAgICBNYXJrZXJMaXN0KiBsaXN0ID0gbm9kZUl0ZXJhdG9yLT5z
ZWNvbmQ7CisgICAgICAgIE1hcmtlckxpc3QqIGxpc3QgPSBub2RlSXRlcmF0b3ItPnZhbHVlOwog
ICAgICAgICB1bnNpZ25lZCBtYXJrZXJDb3VudCA9IGxpc3QtPnNpemUoKTsKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBtYXJrZXJJbmRleCA9IDA7IG1hcmtlckluZGV4IDwgbWFya2VyQ291bnQ7ICsr
bWFya2VySW5kZXgpIHsKICAgICAgICAgICAgIGNvbnN0IFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIm
IG1hcmtlciA9IGxpc3QtPmF0KG1hcmtlckluZGV4KTsKQEAgLTQyNiw3ICs0MjYsNyBAQCB2b2lk
IERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVtb3ZlTWFya2VycyhOb2RlKiBub2RlLCBEb2N1
bWVudE1hcmtlcjo6TWFya2VyVAogICAgIAogICAgIE1hcmtlck1hcDo6aXRlcmF0b3IgaXRlcmF0
b3IgPSBtX21hcmtlcnMuZmluZChub2RlKTsKICAgICBpZiAoaXRlcmF0b3IgIT0gbV9tYXJrZXJz
LmVuZCgpKQotICAgICAgICByZW1vdmVNYXJrZXJzRnJvbUxpc3Qobm9kZSwgaXRlcmF0b3ItPnNl
Y29uZCwgbWFya2VyVHlwZXMpOworICAgICAgICByZW1vdmVNYXJrZXJzRnJvbUxpc3Qobm9kZSwg
aXRlcmF0b3ItPnZhbHVlLCBtYXJrZXJUeXBlcyk7CiB9CiAKIHZvaWQgRG9jdW1lbnRNYXJrZXJD
b250cm9sbGVyOjpyZW1vdmVNYXJrZXJzKERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlcyBtYXJr
ZXJUeXBlcykKQEAgLTQzOSw3ICs0MzksNyBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxl
cjo6cmVtb3ZlTWFya2VycyhEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZXMgbWFya2VyVAogICAg
IE1hcmtlck1hcCBtYXJrZXJNYXBDb3B5ID0gbV9tYXJrZXJzOwogICAgIE1hcmtlck1hcDo6aXRl
cmF0b3IgZW5kID0gbWFya2VyTWFwQ29weS5lbmQoKTsKICAgICBmb3IgKE1hcmtlck1hcDo6aXRl
cmF0b3IgaSA9IG1hcmtlck1hcENvcHkuYmVnaW4oKTsgaSAhPSBlbmQ7ICsraSkKLSAgICAgICAg
cmVtb3ZlTWFya2Vyc0Zyb21MaXN0KGktPmZpcnN0LmdldCgpLCBpLT5zZWNvbmQsIG1hcmtlclR5
cGVzKTsKKyAgICAgICAgcmVtb3ZlTWFya2Vyc0Zyb21MaXN0KGktPmtleS5nZXQoKSwgaS0+dmFs
dWUsIG1hcmtlclR5cGVzKTsKICAgICBtX3Bvc3NpYmx5RXhpc3RpbmdNYXJrZXJUeXBlcy5yZW1v
dmUobWFya2VyVHlwZXMpOwogfQogCkBAIC00OTUsMTAgKzQ5NSwxMCBAQCB2b2lkIERvY3VtZW50
TWFya2VyQ29udHJvbGxlcjo6cmVwYWludE1hcmtlcnMoRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5
cGVzIG1hcmtlcgogICAgIC8vIG91dGVyIGxvb3A6IHByb2Nlc3MgZWFjaCBtYXJrZXJlZCBub2Rl
IGluIHRoZSBkb2N1bWVudAogICAgIE1hcmtlck1hcDo6aXRlcmF0b3IgZW5kID0gbV9tYXJrZXJz
LmVuZCgpOwogICAgIGZvciAoTWFya2VyTWFwOjppdGVyYXRvciBpID0gbV9tYXJrZXJzLmJlZ2lu
KCk7IGkgIT0gZW5kOyArK2kpIHsKLSAgICAgICAgTm9kZSogbm9kZSA9IGktPmZpcnN0LmdldCgp
OworICAgICAgICBOb2RlKiBub2RlID0gaS0+a2V5LmdldCgpOwogCiAgICAgICAgIC8vIGlubmVy
IGxvb3A6IHByb2Nlc3MgZWFjaCBtYXJrZXIgaW4gdGhlIGN1cnJlbnQgbm9kZQotICAgICAgICBN
YXJrZXJMaXN0KiBsaXN0ID0gaS0+c2Vjb25kOworICAgICAgICBNYXJrZXJMaXN0KiBsaXN0ID0g
aS0+dmFsdWU7CiAgICAgICAgIGJvb2wgbm9kZU5lZWRzUmVwYWludCA9IGZhbHNlOwogICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSAhPSBsaXN0LT5zaXplKCk7ICsraSkgewogICAgICAgICAg
ICAgRG9jdW1lbnRNYXJrZXIgbWFya2VyID0gbGlzdC0+YXQoaSk7CkBAIC01MjYsNyArNTI2LDcg
QEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmludmFsaWRhdGVSZW5kZXJlZFJlY3Rz
Rm9yTWFya2Vyc0luUmVjdChjb25zdCBMYXkKICAgICBmb3IgKE1hcmtlck1hcDo6aXRlcmF0b3Ig
aSA9IG1fbWFya2Vycy5iZWdpbigpOyBpICE9IGVuZDsgKytpKSB7CiAKICAgICAgICAgLy8gaW5u
ZXIgbG9vcDogcHJvY2VzcyBlYWNoIHJlY3QgaW4gdGhlIGN1cnJlbnQgbm9kZQotICAgICAgICBN
YXJrZXJMaXN0KiBsaXN0ID0gaS0+c2Vjb25kOworICAgICAgICBNYXJrZXJMaXN0KiBsaXN0ID0g
aS0+dmFsdWU7CiAgICAgICAgIGZvciAoc2l6ZV90IGxpc3RJbmRleCA9IDA7IGxpc3RJbmRleCA8
IGxpc3QtPnNpemUoKTsgKytsaXN0SW5kZXgpCiAgICAgICAgICAgICBsaXN0LT5hdChsaXN0SW5k
ZXgpLmludmFsaWRhdGUocik7CiAgICAgfQpAQCAtNjc1LDkgKzY3NSw5IEBAIHZvaWQgRG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyOjpzaG93TWFya2VycygpIGNvbnN0CiAgICAgZnByaW50ZihzdGRl
cnIsICIlZCBub2RlcyBoYXZlIG1hcmtlcnM6XG4iLCBtX21hcmtlcnMuc2l6ZSgpKTsKICAgICBN
YXJrZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fbWFya2Vycy5lbmQoKTsKICAgICBmb3Ig
KE1hcmtlck1hcDo6Y29uc3RfaXRlcmF0b3Igbm9kZUl0ZXJhdG9yID0gbV9tYXJrZXJzLmJlZ2lu
KCk7IG5vZGVJdGVyYXRvciAhPSBlbmQ7ICsrbm9kZUl0ZXJhdG9yKSB7Ci0gICAgICAgIE5vZGUq
IG5vZGUgPSBub2RlSXRlcmF0b3ItPmZpcnN0LmdldCgpOworICAgICAgICBOb2RlKiBub2RlID0g
bm9kZUl0ZXJhdG9yLT5rZXkuZ2V0KCk7CiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXAiLCBu
b2RlKTsKLSAgICAgICAgTWFya2VyTGlzdCogbGlzdCA9IG5vZGVJdGVyYXRvci0+c2Vjb25kOwor
ICAgICAgICBNYXJrZXJMaXN0KiBsaXN0ID0gbm9kZUl0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBtYXJrZXJJbmRleCA9IDA7IG1hcmtlckluZGV4IDwgbGlzdC0+c2l6ZSgp
OyArK21hcmtlckluZGV4KSB7CiAgICAgICAgICAgICBjb25zdCBEb2N1bWVudE1hcmtlciYgbWFy
a2VyID0gbGlzdC0+YXQobWFya2VySW5kZXgpOwogICAgICAgICAgICAgZnByaW50ZihzdGRlcnIs
ICIgJWQ6WyVkOiVkXSglZCkiLCBtYXJrZXIudHlwZSgpLCBtYXJrZXIuc3RhcnRPZmZzZXQoKSwg
bWFya2VyLmVuZE9mZnNldCgpLCBtYXJrZXIuYWN0aXZlTWF0Y2goKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRPcmRlcmVkTWFwLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudE9yZGVyZWRNYXAuY3BwCmluZGV4IDA4MmFhMDc0MGE3MWNjZGY1MGUxZDQy
ZDIzZDMxN2U2M2FmMmY0ZGEuLjEyOTdlNTEwMmZiNGU3OWNlM2RiMTEyMzU3MDIxZTNkZDA1NTRh
NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE9yZGVyZWRNYXAuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE9yZGVyZWRNYXAuY3BwCkBAIC05OCw3
ICs5OCw3IEBAIHZvaWQgRG9jdW1lbnRPcmRlcmVkTWFwOjpyZW1vdmUoQXRvbWljU3RyaW5nSW1w
bCoga2V5LCBFbGVtZW50KiBlbGVtZW50KQogCiAgICAgbV9tYXAuY2hlY2tDb25zaXN0ZW5jeSgp
OwogICAgIE1hcDo6aXRlcmF0b3IgY2FjaGVkSXRlbSA9IG1fbWFwLmZpbmQoa2V5KTsKLSAgICBp
ZiAoY2FjaGVkSXRlbSAhPSBtX21hcC5lbmQoKSAmJiBjYWNoZWRJdGVtLT5zZWNvbmQgPT0gZWxl
bWVudCkKKyAgICBpZiAoY2FjaGVkSXRlbSAhPSBtX21hcC5lbmQoKSAmJiBjYWNoZWRJdGVtLT52
YWx1ZSA9PSBlbGVtZW50KQogICAgICAgICBtX21hcC5yZW1vdmUoY2FjaGVkSXRlbSk7CiAgICAg
ZWxzZQogICAgICAgICBtX2R1cGxpY2F0ZUNvdW50cy5yZW1vdmUoa2V5KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50QXR0cmlidXRlRGF0YS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vRWxlbWVudEF0dHJpYnV0ZURhdGEuY3BwCmluZGV4IDlmNTE5YWRiNGM0MWY1NDhm
MmNhMDYxMmM4NTlkMjFjMjA0NmRjMjAuLmM3YWY1MzYzMjQ0MWI5MDA5ODU5MmM5YTJkNTVhODk5
YjNjYTEwMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50QXR0cmlidXRl
RGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmNw
cApAQCAtNTAsMTAgKzUwLDEwIEBAIFBhc3NSZWZQdHI8QXR0cj4gRWxlbWVudEF0dHJpYnV0ZURh
dGE6OmVuc3VyZUF0dHIoRWxlbWVudCogZWxlbWVudCwgY29uc3QgUXVhbGlmCiB7CiAgICAgQXR0
ck1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IGF0dHJNYXAoKS5hZGQoc3RkOjptYWtlX3BhaXIoZWxl
bWVudCwgbmFtZSksIDApOwogICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICBy
ZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IEF0dHI6OmNyZWF0ZShlbGVtZW50LCBuYW1lKTsKKyAg
ICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IEF0dHI6OmNyZWF0ZShlbGVtZW50LCBuYW1l
KTsKICAgICAgICAgKyttX2F0dHJDb3VudDsKICAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdC5pdGVy
YXRvci0+c2Vjb25kLmdldCgpOworICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdl
dCgpOwogfQogCiB2b2lkIEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpzZXRBdHRyKEVsZW1lbnQqIGVs
ZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIEF0dHIqIGF0dHIpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRMaXN0ZW5lck1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRXZlbnRMaXN0ZW5lck1hcC5jcHAKaW5kZXggYzFmZDRkN2M5NTdhNjRiZmY3ODhmOTAx
ZTYxZGUwMWNhMDkyMjc3ZS4uYWY4YzQ4YWVkZTU1MTM2Zjc0ZmUxODQ3ODFkMDUyOGI0MWQ3Y2Nh
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TGlzdGVuZXJNYXAuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudExpc3RlbmVyTWFwLmNwcApAQCAtMTAyLDcgKzEw
Miw3IEBAIFZlY3RvcjxBdG9taWNTdHJpbmc+IEV2ZW50TGlzdGVuZXJNYXA6OmV2ZW50VHlwZXMo
KSBjb25zdAogICAgICAgICBFdmVudExpc3RlbmVySGFzaE1hcDo6aXRlcmF0b3IgaXQgPSBtX2hh
c2hNYXAtPmJlZ2luKCk7CiAgICAgICAgIEV2ZW50TGlzdGVuZXJIYXNoTWFwOjppdGVyYXRvciBl
bmQgPSBtX2hhc2hNYXAtPmVuZCgpOwogICAgICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KQot
ICAgICAgICAgICAgdHlwZXMuYXBwZW5kKGl0LT5maXJzdCk7CisgICAgICAgICAgICB0eXBlcy5h
cHBlbmQoaXQtPmtleSk7CiAgICAgfSBlbHNlIGlmIChtX3NpbmdsZUV2ZW50TGlzdGVuZXJWZWN0
b3IpCiAgICAgICAgIHR5cGVzLmFwcGVuZChtX3NpbmdsZUV2ZW50TGlzdGVuZXJUeXBlKTsKIApA
QCAtMTM2LDkgKzEzNiw5IEBAIGJvb2wgRXZlbnRMaXN0ZW5lck1hcDo6YWRkKGNvbnN0IEF0b21p
Y1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuCiAgICAgaWYgKG1faGFz
aE1hcCkgewogICAgICAgICBFdmVudExpc3RlbmVySGFzaE1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9
IG1faGFzaE1hcC0+YWRkKGV2ZW50VHlwZSwgbnVsbHB0cik7CiAgICAgICAgIGlmIChyZXN1bHQu
aXNOZXdFbnRyeSkKLSAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gYWRvcHRQ
dHIobmV3IEV2ZW50TGlzdGVuZXJWZWN0b3IpOworICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZSA9IGFkb3B0UHRyKG5ldyBFdmVudExpc3RlbmVyVmVjdG9yKTsKIAotICAgICAgICBy
ZXR1cm4gYWRkTGlzdGVuZXJUb1ZlY3RvcihyZXN1bHQuaXRlcmF0b3ItPnNlY29uZC5nZXQoKSwg
bGlzdGVuZXIsIHVzZUNhcHR1cmUpOworICAgICAgICByZXR1cm4gYWRkTGlzdGVuZXJUb1ZlY3Rv
cihyZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpLCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSk7CiAg
ICAgfQogCiAgICAgaWYgKCFtX3NpbmdsZUV2ZW50TGlzdGVuZXJWZWN0b3IpIHsKQEAgLTE3OSw4
ICsxNzksOCBAQCBib29sIEV2ZW50TGlzdGVuZXJNYXA6OnJlbW92ZShjb25zdCBBdG9taWNTdHJp
bmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciogbGlzdAogICAgIGlmIChpdCA9PSBtX2hhc2hN
YXAtPmVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBib29sIHdhc1JlbW92ZWQg
PSByZW1vdmVMaXN0ZW5lckZyb21WZWN0b3IoaXQtPnNlY29uZC5nZXQoKSwgbGlzdGVuZXIsIHVz
ZUNhcHR1cmUsIGluZGV4T2ZSZW1vdmVkTGlzdGVuZXIpOwotICAgIGlmIChpdC0+c2Vjb25kLT5p
c0VtcHR5KCkpCisgICAgYm9vbCB3YXNSZW1vdmVkID0gcmVtb3ZlTGlzdGVuZXJGcm9tVmVjdG9y
KGl0LT52YWx1ZS5nZXQoKSwgbGlzdGVuZXIsIHVzZUNhcHR1cmUsIGluZGV4T2ZSZW1vdmVkTGlz
dGVuZXIpOworICAgIGlmIChpdC0+dmFsdWUtPmlzRW1wdHkoKSkKICAgICAgICAgbV9oYXNoTWFw
LT5yZW1vdmUoaXQpOwogICAgIHJldHVybiB3YXNSZW1vdmVkOwogfQpAQCAtMTkzLDcgKzE5Myw3
IEBAIEV2ZW50TGlzdGVuZXJWZWN0b3IqIEV2ZW50TGlzdGVuZXJNYXA6OmZpbmQoY29uc3QgQXRv
bWljU3RyaW5nJiBldmVudFR5cGUpCiAgICAgICAgIEV2ZW50TGlzdGVuZXJIYXNoTWFwOjppdGVy
YXRvciBpdCA9IG1faGFzaE1hcC0+ZmluZChldmVudFR5cGUpOwogICAgICAgICBpZiAoaXQgPT0g
bV9oYXNoTWFwLT5lbmQoKSkKICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4g
aXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgcmV0dXJuIGl0LT52YWx1ZS5nZXQoKTsKICAgICB9
CiAKICAgICBpZiAobV9zaW5nbGVFdmVudExpc3RlbmVyVHlwZSA9PSBldmVudFR5cGUpCkBAIC0y
MjcsNyArMjI3LDcgQEAgdm9pZCBFdmVudExpc3RlbmVyTWFwOjpyZW1vdmVGaXJzdEV2ZW50TGlz
dGVuZXJDcmVhdGVkRnJvbU1hcmt1cChjb25zdCBBdG9taWNTdHIKICAgICAgICAgRXZlbnRMaXN0
ZW5lckhhc2hNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IG1faGFzaE1hcC0+ZmluZChldmVudFR5cGUp
OwogICAgICAgICBBU1NFUlQocmVzdWx0ICE9IG1faGFzaE1hcC0+ZW5kKCkpOwogCi0gICAgICAg
IEV2ZW50TGlzdGVuZXJWZWN0b3IqIGxpc3RlbmVyVmVjdG9yID0gcmVzdWx0LT5zZWNvbmQuZ2V0
KCk7CisgICAgICAgIEV2ZW50TGlzdGVuZXJWZWN0b3IqIGxpc3RlbmVyVmVjdG9yID0gcmVzdWx0
LT52YWx1ZS5nZXQoKTsKICAgICAgICAgQVNTRVJUKGxpc3RlbmVyVmVjdG9yKTsKIAogICAgICAg
ICByZW1vdmVGaXJzdExpc3RlbmVyQ3JlYXRlZEZyb21NYXJrdXAobGlzdGVuZXJWZWN0b3IpOwpA
QCAtMjY1LDcgKzI2NSw3IEBAIHZvaWQgRXZlbnRMaXN0ZW5lck1hcDo6Y29weUV2ZW50TGlzdGVu
ZXJzTm90Q3JlYXRlZEZyb21NYXJrdXBUb1RhcmdldChFdmVudFRhcmdlCiAgICAgaWYgKG1faGFz
aE1hcCkgewogICAgICAgICBFdmVudExpc3RlbmVySGFzaE1hcDo6aXRlcmF0b3IgZW5kID0gbV9o
YXNoTWFwLT5lbmQoKTsKICAgICAgICAgZm9yIChFdmVudExpc3RlbmVySGFzaE1hcDo6aXRlcmF0
b3IgaXQgPSBtX2hhc2hNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAg
IGNvcHlMaXN0ZW5lcnNOb3RDcmVhdGVkRnJvbU1hcmt1cFRvVGFyZ2V0KGl0LT5maXJzdCwgaXQt
PnNlY29uZC5nZXQoKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGNvcHlMaXN0ZW5lcnNOb3RDcmVh
dGVkRnJvbU1hcmt1cFRvVGFyZ2V0KGl0LT5rZXksIGl0LT52YWx1ZS5nZXQoKSwgdGFyZ2V0KTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMzI1LDcgKzMyNSw3IEBAIEV2ZW50TGlzdGVu
ZXIqIEV2ZW50TGlzdGVuZXJJdGVyYXRvcjo6bmV4dExpc3RlbmVyKCkKIAogICAgIGlmIChtX21h
cC0+bV9oYXNoTWFwKSB7CiAgICAgICAgIGZvciAoOyBtX21hcEl0ZXJhdG9yICE9IG1fbWFwRW5k
OyArK21fbWFwSXRlcmF0b3IpIHsKLSAgICAgICAgICAgIEV2ZW50TGlzdGVuZXJWZWN0b3ImIGxp
c3RlbmVycyA9ICptX21hcEl0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgICAgICBFdmVudExpc3Rl
bmVyVmVjdG9yJiBsaXN0ZW5lcnMgPSAqbV9tYXBJdGVyYXRvci0+dmFsdWU7CiAgICAgICAgICAg
ICBpZiAobV9pbmRleCA8IGxpc3RlbmVycy5zaXplKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IGxpc3RlbmVyc1ttX2luZGV4KytdLmxpc3RlbmVyLmdldCgpOwogICAgICAgICAgICAgbV9pbmRl
eCA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25PYnNlcnZlcklu
dGVyZXN0R3JvdXAuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uT2JzZXJ2ZXJJbnRl
cmVzdEdyb3VwLmNwcAppbmRleCBkZDAyODhkNTEzOTNjZTJmMDcwYWU3NDA5MjQ4NjdhYjM4NWJi
NzljLi42YzJkZWM3YmEyMTBiZjNlYTkxMmY5NjhiZDVkZDYxMDQ1Yzc5M2Q4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25PYnNlcnZlckludGVyZXN0R3JvdXAuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cC5jcHAK
QEAgLTYyLDcgKzYyLDcgQEAgTXV0YXRpb25PYnNlcnZlckludGVyZXN0R3JvdXA6Ok11dGF0aW9u
T2JzZXJ2ZXJJbnRlcmVzdEdyb3VwKEhhc2hNYXA8V2ViS2l0TXV0YXQKIGJvb2wgTXV0YXRpb25P
YnNlcnZlckludGVyZXN0R3JvdXA6OmlzT2xkVmFsdWVSZXF1ZXN0ZWQoKQogewogICAgIGZvciAo
SGFzaE1hcDxXZWJLaXRNdXRhdGlvbk9ic2VydmVyKiwgTXV0YXRpb25SZWNvcmREZWxpdmVyeU9w
dGlvbnM+OjppdGVyYXRvciBpdGVyID0gbV9vYnNlcnZlcnMuYmVnaW4oKTsgaXRlciAhPSBtX29i
c2VydmVycy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIGlmIChoYXNPbGRWYWx1ZShpdGVyLT5z
ZWNvbmQpKQorICAgICAgICBpZiAoaGFzT2xkVmFsdWUoaXRlci0+dmFsdWUpKQogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKQEAgLTczLDggKzczLDgg
QEAgdm9pZCBNdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cDo6ZW5xdWV1ZU11dGF0aW9uUmVj
b3JkKFBhc3NSZWZQdHI8TXV0YXRpb25SZWMKICAgICBSZWZQdHI8TXV0YXRpb25SZWNvcmQ+IG11
dGF0aW9uID0gcHJwTXV0YXRpb247CiAgICAgUmVmUHRyPE11dGF0aW9uUmVjb3JkPiBtdXRhdGlv
bldpdGhOdWxsT2xkVmFsdWU7CiAgICAgZm9yIChIYXNoTWFwPFdlYktpdE11dGF0aW9uT2JzZXJ2
ZXIqLCBNdXRhdGlvblJlY29yZERlbGl2ZXJ5T3B0aW9ucz46Oml0ZXJhdG9yIGl0ZXIgPSBtX29i
c2VydmVycy5iZWdpbigpOyBpdGVyICE9IG1fb2JzZXJ2ZXJzLmVuZCgpOyArK2l0ZXIpIHsKLSAg
ICAgICAgV2ViS2l0TXV0YXRpb25PYnNlcnZlciogb2JzZXJ2ZXIgPSBpdGVyLT5maXJzdDsKLSAg
ICAgICAgaWYgKGhhc09sZFZhbHVlKGl0ZXItPnNlY29uZCkpIHsKKyAgICAgICAgV2ViS2l0TXV0
YXRpb25PYnNlcnZlciogb2JzZXJ2ZXIgPSBpdGVyLT5rZXk7CisgICAgICAgIGlmIChoYXNPbGRW
YWx1ZShpdGVyLT52YWx1ZSkpIHsKICAgICAgICAgICAgIG9ic2VydmVyLT5lbnF1ZXVlTXV0YXRp
b25SZWNvcmQobXV0YXRpb24pOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlLmNwcAppbmRleCAzOWE0MDBjNjY0ZWE2MmE4MDM2M2FkNGVkMjQyYmY0Nzk3NDUzNzk3
Li4yNGI1YTI5N2JjMTQ2Yzk0YjlmMDYxZDg3OWVkNzQxYTI5MjZlYmY2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUu
Y3BwCkBAIC0xODcsNyArMTg3LDcgQEAgdm9pZCBOb2RlOjpkdW1wU3RhdGlzdGljcygpCiAgICAg
ICAgICAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2Rl
KTsKICAgICAgICAgICAgICAgICBIYXNoTWFwPFN0cmluZywgc2l6ZV90Pjo6QWRkUmVzdWx0IHJl
c3VsdCA9IHBlclRhZ0NvdW50LmFkZChlbGVtZW50LT50YWdOYW1lKCksIDEpOwogICAgICAgICAg
ICAgICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgICAgICAgICAgICAgIHJlc3Vs
dC5pdGVyYXRvci0+c2Vjb25kKys7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRv
ci0+dmFsdWUrKzsKIAogICAgICAgICAgICAgICAgIGlmIChFbGVtZW50QXR0cmlidXRlRGF0YSog
YXR0cmlidXRlRGF0YSA9IGVsZW1lbnQtPmF0dHJpYnV0ZURhdGEoKSkgewogICAgICAgICAgICAg
ICAgICAgICBhdHRyaWJ1dGVzICs9IGF0dHJpYnV0ZURhdGEtPmxlbmd0aCgpOwpAQCAtMjc1LDcg
KzI3NSw3IEBAIHZvaWQgTm9kZTo6ZHVtcFN0YXRpc3RpY3MoKQogCiAgICAgcHJpbnRmKCJFbGVt
ZW50IHRhZyBuYW1lIGRpc3RpYnV0aW9uOlxuIik7CiAgICAgZm9yIChIYXNoTWFwPFN0cmluZywg
c2l6ZV90Pjo6aXRlcmF0b3IgaXQgPSBwZXJUYWdDb3VudC5iZWdpbigpOyBpdCAhPSBwZXJUYWdD
b3VudC5lbmQoKTsgKytpdCkKLSAgICAgICAgcHJpbnRmKCIgIE51bWJlciBvZiA8JXM+IHRhZ3M6
ICV6dVxuIiwgaXQtPmZpcnN0LnV0ZjgoKS5kYXRhKCksIGl0LT5zZWNvbmQpOworICAgICAgICBw
cmludGYoIiAgTnVtYmVyIG9mIDwlcz4gdGFnczogJXp1XG4iLCBpdC0+a2V5LnV0ZjgoKS5kYXRh
KCksIGl0LT52YWx1ZSk7CiAKICAgICBwcmludGYoIkF0dHJpYnV0ZXM6XG4iKTsKICAgICBwcmlu
dGYoIiAgTnVtYmVyIG9mIEF0dHJpYnV0ZXMgKG5vbi1Ob2RlIGFuZCBOb2RlKTogJXp1IFslenVd
XG4iLCBhdHRyaWJ1dGVzLCBzaXplb2YoQXR0cmlidXRlKSk7CkBAIC00OTYsNyArNDk2LDcgQEAg
dm9pZCBOb2RlOjpjbGVhclJhcmVEYXRhKCkKICAgICBOb2RlUmFyZURhdGE6Ok5vZGVSYXJlRGF0
YU1hcCYgZGF0YU1hcCA9IE5vZGVSYXJlRGF0YTo6cmFyZURhdGFNYXAoKTsKICAgICBOb2RlUmFy
ZURhdGE6Ok5vZGVSYXJlRGF0YU1hcDo6aXRlcmF0b3IgaXQgPSBkYXRhTWFwLmZpbmQodGhpcyk7
CiAgICAgQVNTRVJUKGl0ICE9IGRhdGFNYXAuZW5kKCkpOwotICAgIGRlbGV0ZSBpdC0+c2Vjb25k
OworICAgIGRlbGV0ZSBpdC0+dmFsdWU7CiAgICAgZGF0YU1hcC5yZW1vdmUoaXQpOwogICAgIGNs
ZWFyRmxhZyhIYXNSYXJlRGF0YUZsYWcpOwogfQpAQCAtMTYxMCwxNCArMTYxMCwxNCBAQCBQYXNz
UmVmUHRyPE5vZGVMaXN0PiBOb2RlOjpnZXRFbGVtZW50c0J5VGFnTmFtZShjb25zdCBBdG9taWNT
dHJpbmcmIGxvY2FsTmFtZSkKIAogICAgIE5vZGVMaXN0c05vZGVEYXRhOjpUYWdOb2RlTGlzdENh
Y2hlOjpBZGRSZXN1bHQgcmVzdWx0ID0gZW5zdXJlUmFyZURhdGEoKS0+ZW5zdXJlTm9kZUxpc3Rz
KHRoaXMpLT5tX3RhZ05vZGVMaXN0Q2FjaGUuYWRkKGxvY2FsTmFtZUF0b20sIDApOwogICAgIGlm
ICghcmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJldHVybiBQYXNzUmVmUHRyPFRhZ05vZGVM
aXN0PihyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7CisgICAgICAgIHJldHVybiBQYXNzUmVmUHRy
PFRhZ05vZGVMaXN0PihyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKIAogICAgIFJlZlB0cjxUYWdO
b2RlTGlzdD4gbGlzdDsKICAgICBpZiAoZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkKICAg
ICAgICAgbGlzdCA9IEhUTUxUYWdOb2RlTGlzdDo6Y3JlYXRlKHRoaXMsIHN0YXJBdG9tLCBsb2Nh
bE5hbWVBdG9tKTsKICAgICBlbHNlCiAgICAgICAgIGxpc3QgPSBUYWdOb2RlTGlzdDo6Y3JlYXRl
KHRoaXMsIHN0YXJBdG9tLCBsb2NhbE5hbWVBdG9tKTsKLSAgICByZXN1bHQuaXRlcmF0b3ItPnNl
Y29uZCA9IGxpc3QuZ2V0KCk7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGxpc3QuZ2V0
KCk7CiAgICAgcmV0dXJuIGxpc3QucmVsZWFzZSgpOyAgIAogfQogCkBAIC0xNjM0LDEwICsxNjM0
LDEwIEBAIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IE5vZGU6OmdldEVsZW1lbnRzQnlUYWdOYW1lTlMo
Y29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVCiAgICAgTm9kZUxpc3RzTm9kZURhdGE6OlRh
Z05vZGVMaXN0Q2FjaGVOUzo6QWRkUmVzdWx0IHJlc3VsdAogICAgICAgICA9IGVuc3VyZVJhcmVE
YXRhKCktPmVuc3VyZU5vZGVMaXN0cyh0aGlzKS0+bV90YWdOb2RlTGlzdENhY2hlTlMuYWRkKFF1
YWxpZmllZE5hbWUobnVsbEF0b20sIGxvY2FsTmFtZUF0b20sIG5hbWVzcGFjZVVSSSkuaW1wbCgp
LCAwKTsKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXR1cm4gUGFzc1Jl
ZlB0cjxUYWdOb2RlTGlzdD4ocmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOworICAgICAgICByZXR1
cm4gUGFzc1JlZlB0cjxUYWdOb2RlTGlzdD4ocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CiAKICAg
ICBSZWZQdHI8VGFnTm9kZUxpc3Q+IGxpc3QgPSBUYWdOb2RlTGlzdDo6Y3JlYXRlKHRoaXMsIG5h
bWVzcGFjZVVSSS5pc0VtcHR5KCkgPyBudWxsQXRvbSA6IG5hbWVzcGFjZVVSSSwgbG9jYWxOYW1l
QXRvbSk7Ci0gICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBsaXN0LmdldCgpOworICAgIHJl
c3VsdC5pdGVyYXRvci0+dmFsdWUgPSBsaXN0LmdldCgpOwogICAgIHJldHVybiBsaXN0LnJlbGVh
c2UoKTsKIH0KIApAQCAtMTY0NSwxMCArMTY0NSwxMCBAQCBQYXNzUmVmUHRyPE5vZGVMaXN0PiBO
b2RlOjpnZXRFbGVtZW50c0J5TmFtZShjb25zdCBTdHJpbmcmIGVsZW1lbnROYW1lKQogewogICAg
IE5vZGVMaXN0c05vZGVEYXRhOjpOYW1lTm9kZUxpc3RDYWNoZTo6QWRkUmVzdWx0IHJlc3VsdCA9
IGVuc3VyZVJhcmVEYXRhKCktPmVuc3VyZU5vZGVMaXN0cyh0aGlzKS0+bV9uYW1lTm9kZUxpc3RD
YWNoZS5hZGQoZWxlbWVudE5hbWUsIDApOwogICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0g
ICAgICAgIHJldHVybiBQYXNzUmVmUHRyPE5vZGVMaXN0PihyZXN1bHQuaXRlcmF0b3ItPnNlY29u
ZCk7CisgICAgICAgIHJldHVybiBQYXNzUmVmUHRyPE5vZGVMaXN0PihyZXN1bHQuaXRlcmF0b3It
PnZhbHVlKTsKIAogICAgIFJlZlB0cjxOYW1lTm9kZUxpc3Q+IGxpc3QgPSBOYW1lTm9kZUxpc3Q6
OmNyZWF0ZSh0aGlzLCBlbGVtZW50TmFtZSk7Ci0gICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQg
PSBsaXN0LmdldCgpOworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBsaXN0LmdldCgpOwog
ICAgIHJldHVybiBsaXN0LnJlbGVhc2UoKTsKIH0KIApAQCAtMTY1NywxMCArMTY1NywxMCBAQCBQ
YXNzUmVmUHRyPE5vZGVMaXN0PiBOb2RlOjpnZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNvbnN0IFN0
cmluZyYgY2xhc3NOYW1lcykKICAgICBOb2RlTGlzdHNOb2RlRGF0YTo6Q2xhc3NOb2RlTGlzdENh
Y2hlOjpBZGRSZXN1bHQgcmVzdWx0CiAgICAgICAgID0gZW5zdXJlUmFyZURhdGEoKS0+ZW5zdXJl
Tm9kZUxpc3RzKHRoaXMpLT5tX2NsYXNzTm9kZUxpc3RDYWNoZS5hZGQoY2xhc3NOYW1lcywgMCk7
CiAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgcmV0dXJuIFBhc3NSZWZQdHI8
Tm9kZUxpc3Q+KHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKKyAgICAgICAgcmV0dXJuIFBhc3NS
ZWZQdHI8Tm9kZUxpc3Q+KHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwogCiAgICAgUmVmUHRyPENs
YXNzTm9kZUxpc3Q+IGxpc3QgPSBDbGFzc05vZGVMaXN0OjpjcmVhdGUodGhpcywgY2xhc3NOYW1l
cyk7Ci0gICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBsaXN0LmdldCgpOworICAgIHJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUgPSBsaXN0LmdldCgpOwogICAgIHJldHVybiBsaXN0LnJlbGVhc2Uo
KTsKIH0KIApAQCAtMjMwMCwxMCArMjMwMCwxMCBAQCB2b2lkIE5vZGVMaXN0c05vZGVEYXRhOjpp
bnZhbGlkYXRlQ2FjaGVzKCkKIHsKICAgICBUYWdOb2RlTGlzdENhY2hlOjpjb25zdF9pdGVyYXRv
ciB0YWdDYWNoZUVuZCA9IG1fdGFnTm9kZUxpc3RDYWNoZS5lbmQoKTsKICAgICBmb3IgKFRhZ05v
ZGVMaXN0Q2FjaGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90YWdOb2RlTGlzdENhY2hlLmJlZ2lu
KCk7IGl0ICE9IHRhZ0NhY2hlRW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5pbnZhbGlk
YXRlQ2FjaGUoKTsKKyAgICAgICAgaXQtPnZhbHVlLT5pbnZhbGlkYXRlQ2FjaGUoKTsKICAgICBU
YWdOb2RlTGlzdENhY2hlTlM6OmNvbnN0X2l0ZXJhdG9yIHRhZ0NhY2hlTlNFbmQgPSBtX3RhZ05v
ZGVMaXN0Q2FjaGVOUy5lbmQoKTsKICAgICBmb3IgKFRhZ05vZGVMaXN0Q2FjaGVOUzo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX3RhZ05vZGVMaXN0Q2FjaGVOUy5iZWdpbigpOyBpdCAhPSB0YWdDYWNo
ZU5TRW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5pbnZhbGlkYXRlQ2FjaGUoKTsKKyAg
ICAgICAgaXQtPnZhbHVlLT5pbnZhbGlkYXRlQ2FjaGUoKTsKICAgICBpbnZhbGlkYXRlQ2FjaGVz
VGhhdERlcGVuZE9uQXR0cmlidXRlcygpOwogfQogCkBAIC0yMzE2LDE4ICsyMzE2LDE4IEBAIHZv
aWQgTm9kZUxpc3RzTm9kZURhdGE6OmludmFsaWRhdGVDYWNoZXNUaGF0RGVwZW5kT25BdHRyaWJ1
dGVzKCkKIAogICAgIENsYXNzTm9kZUxpc3RDYWNoZTo6aXRlcmF0b3IgY2xhc3NDYWNoZUVuZCA9
IG1fY2xhc3NOb2RlTGlzdENhY2hlLmVuZCgpOwogICAgIGZvciAoQ2xhc3NOb2RlTGlzdENhY2hl
OjppdGVyYXRvciBpdCA9IG1fY2xhc3NOb2RlTGlzdENhY2hlLmJlZ2luKCk7IGl0ICE9IGNsYXNz
Q2FjaGVFbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPmludmFsaWRhdGVDYWNoZSgpOwor
ICAgICAgICBpdC0+dmFsdWUtPmludmFsaWRhdGVDYWNoZSgpOwogCiAgICAgTmFtZU5vZGVMaXN0
Q2FjaGU6Oml0ZXJhdG9yIG5hbWVDYWNoZUVuZCA9IG1fbmFtZU5vZGVMaXN0Q2FjaGUuZW5kKCk7
CiAgICAgZm9yIChOYW1lTm9kZUxpc3RDYWNoZTo6aXRlcmF0b3IgaXQgPSBtX25hbWVOb2RlTGlz
dENhY2hlLmJlZ2luKCk7IGl0ICE9IG5hbWVDYWNoZUVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNl
Y29uZC0+aW52YWxpZGF0ZUNhY2hlKCk7CisgICAgICAgIGl0LT52YWx1ZS0+aW52YWxpZGF0ZUNh
Y2hlKCk7CiAgICAgaWYgKG1fbGFiZWxzTm9kZUxpc3RDYWNoZSkKICAgICAgICAgbV9sYWJlbHNO
b2RlTGlzdENhY2hlLT5pbnZhbGlkYXRlQ2FjaGUoKTsKIAogI2lmIEVOQUJMRShNSUNST0RBVEEp
CiAgICAgTWljcm9EYXRhSXRlbUxpc3RDYWNoZTo6aXRlcmF0b3IgaXRlbUxpc3RDYWNoZUVuZCA9
IG1fbWljcm9EYXRhSXRlbUxpc3RDYWNoZS5lbmQoKTsKICAgICBmb3IgKE1pY3JvRGF0YUl0ZW1M
aXN0Q2FjaGU6Oml0ZXJhdG9yIGl0ID0gbV9taWNyb0RhdGFJdGVtTGlzdENhY2hlLmJlZ2luKCk7
IGl0ICE9IGl0ZW1MaXN0Q2FjaGVFbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPmludmFs
aWRhdGVDYWNoZSgpOworICAgICAgICBpdC0+dmFsdWUtPmludmFsaWRhdGVDYWNoZSgpOwogI2Vu
ZGlmCiB9CiAKQEAgLTI1OTEsNyArMjU5MSw3IEBAIHZvaWQgTm9kZTo6Y29sbGVjdE1hdGNoaW5n
T2JzZXJ2ZXJzRm9yTXV0YXRpb24oSGFzaE1hcDxXZWJLaXRNdXRhdGlvbk9ic2VydmVyKiwKICAg
ICAgICAgICAgICAgICBNdXRhdGlvblJlY29yZERlbGl2ZXJ5T3B0aW9ucyBkZWxpdmVyeU9wdGlv
bnMgPSByZWdpc3RyYXRpb24tPmRlbGl2ZXJ5T3B0aW9ucygpOwogICAgICAgICAgICAgICAgIEhh
c2hNYXA8V2ViS2l0TXV0YXRpb25PYnNlcnZlciosIE11dGF0aW9uUmVjb3JkRGVsaXZlcnlPcHRp
b25zPjo6QWRkUmVzdWx0IHJlc3VsdCA9IG9ic2VydmVycy5hZGQocmVnaXN0cmF0aW9uLT5vYnNl
cnZlcigpLCBkZWxpdmVyeU9wdGlvbnMpOwogICAgICAgICAgICAgICAgIGlmICghcmVzdWx0Lmlz
TmV3RW50cnkpCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kIHw9
IGRlbGl2ZXJ5T3B0aW9uczsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZSB8PSBkZWxpdmVyeU9wdGlvbnM7CiAKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAt
MjYwNCw3ICsyNjA0LDcgQEAgdm9pZCBOb2RlOjpjb2xsZWN0TWF0Y2hpbmdPYnNlcnZlcnNGb3JN
dXRhdGlvbihIYXNoTWFwPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIqLAogICAgICAgICAgICAgICAg
IE11dGF0aW9uUmVjb3JkRGVsaXZlcnlPcHRpb25zIGRlbGl2ZXJ5T3B0aW9ucyA9IHJlZ2lzdHJh
dGlvbi0+ZGVsaXZlcnlPcHRpb25zKCk7CiAgICAgICAgICAgICAgICAgSGFzaE1hcDxXZWJLaXRN
dXRhdGlvbk9ic2VydmVyKiwgTXV0YXRpb25SZWNvcmREZWxpdmVyeU9wdGlvbnM+OjpBZGRSZXN1
bHQgcmVzdWx0ID0gb2JzZXJ2ZXJzLmFkZChyZWdpc3RyYXRpb24tPm9ic2VydmVyKCksIGRlbGl2
ZXJ5T3B0aW9ucyk7CiAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgfD0gZGVsaXZlcnlPcHRp
b25zOworICAgICAgICAgICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlIHw9IGRlbGl2
ZXJ5T3B0aW9uczsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwIGIvU291cmNlL1dl
YkNvcmUvZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHAKaW5kZXggZTcxOGE1NThiZGFiZTYz
ZDEyOGMzMWQ5ZjJmYzJlZTMzZDA1YjZkYS4uYTBlNWUwMGU3ZDFjM2UyMWEyNTMzZTM5NjEyNGNl
YmYyYzBkY2U1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1Byb2Nlc3NpbmdJbnN0
cnVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlv
bi5jcHAKQEAgLTExNiw3ICsxMTYsNyBAQCB2b2lkIFByb2Nlc3NpbmdJbnN0cnVjdGlvbjo6Y2hl
Y2tTdHlsZVNoZWV0KCkKICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0
ZXJhdG9yIGkgPSBhdHRycy5maW5kKCJ0eXBlIik7CiAgICAgICAgIFN0cmluZyB0eXBlOwogICAg
ICAgICBpZiAoaSAhPSBhdHRycy5lbmQoKSkKLSAgICAgICAgICAgIHR5cGUgPSBpLT5zZWNvbmQ7
CisgICAgICAgICAgICB0eXBlID0gaS0+dmFsdWU7CiAKICAgICAgICAgbV9pc0NTUyA9IHR5cGUu
aXNFbXB0eSgpIHx8IHR5cGUgPT0gInRleHQvY3NzIjsKICNpZiBFTkFCTEUoWFNMVCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcAppbmRleCA5MjQ0NWNh
ODBkYWY2MzMyMzlkMmY3OWNlZTk4ZGQ5ZGQ0NDFiMzIzLi41MzViNTcwYjVkN2RlOWY0YWY5MzU4
M2U3YzcxZDEyYjJkNzUzNWE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0
RXhlY3V0aW9uQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1
dGlvbkNvbnRleHQuY3BwCkBAIC0xNzMsOSArMTczLDkgQEAgYm9vbCBTY3JpcHRFeGVjdXRpb25D
b250ZXh0OjpjYW5TdXNwZW5kQWN0aXZlRE9NT2JqZWN0cygpCiAgICAgbV9pdGVyYXRpbmdBY3Rp
dmVET01PYmplY3RzID0gdHJ1ZTsKICAgICBIYXNoTWFwPEFjdGl2ZURPTU9iamVjdCosIHZvaWQq
Pjo6aXRlcmF0b3IgYWN0aXZlT2JqZWN0c0VuZCA9IG1fYWN0aXZlRE9NT2JqZWN0cy5lbmQoKTsK
ICAgICBmb3IgKEhhc2hNYXA8QWN0aXZlRE9NT2JqZWN0Kiwgdm9pZCo+OjppdGVyYXRvciBpdGVy
ID0gbV9hY3RpdmVET01PYmplY3RzLmJlZ2luKCk7IGl0ZXIgIT0gYWN0aXZlT2JqZWN0c0VuZDsg
KytpdGVyKSB7Ci0gICAgICAgIEFTU0VSVChpdGVyLT5maXJzdC0+c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpID09IHRoaXMpOwotICAgICAgICBBU1NFUlQoaXRlci0+Zmlyc3QtPnN1c3BlbmRJZk5l
ZWRlZENhbGxlZCgpKTsKLSAgICAgICAgaWYgKCFpdGVyLT5maXJzdC0+Y2FuU3VzcGVuZCgpKSB7
CisgICAgICAgIEFTU0VSVChpdGVyLT5rZXktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSA9PSB0
aGlzKTsKKyAgICAgICAgQVNTRVJUKGl0ZXItPmtleS0+c3VzcGVuZElmTmVlZGVkQ2FsbGVkKCkp
OworICAgICAgICBpZiAoIWl0ZXItPmtleS0+Y2FuU3VzcGVuZCgpKSB7CiAgICAgICAgICAgICBt
X2l0ZXJhdGluZ0FjdGl2ZURPTU9iamVjdHMgPSBmYWxzZTsKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgfQpAQCAtMTkwLDkgKzE5MCw5IEBAIHZvaWQgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dDo6c3VzcGVuZEFjdGl2ZURPTU9iamVjdHMoQWN0aXZlRE9NT2JqZWN0OjpSZWFzb25G
b3JTCiAgICAgbV9pdGVyYXRpbmdBY3RpdmVET01PYmplY3RzID0gdHJ1ZTsKICAgICBIYXNoTWFw
PEFjdGl2ZURPTU9iamVjdCosIHZvaWQqPjo6aXRlcmF0b3IgYWN0aXZlT2JqZWN0c0VuZCA9IG1f
YWN0aXZlRE9NT2JqZWN0cy5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8QWN0aXZlRE9NT2JqZWN0
Kiwgdm9pZCo+OjppdGVyYXRvciBpdGVyID0gbV9hY3RpdmVET01PYmplY3RzLmJlZ2luKCk7IGl0
ZXIgIT0gYWN0aXZlT2JqZWN0c0VuZDsgKytpdGVyKSB7Ci0gICAgICAgIEFTU0VSVChpdGVyLT5m
aXJzdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpID09IHRoaXMpOwotICAgICAgICBBU1NFUlQo
aXRlci0+Zmlyc3QtPnN1c3BlbmRJZk5lZWRlZENhbGxlZCgpKTsKLSAgICAgICAgaXRlci0+Zmly
c3QtPnN1c3BlbmQod2h5KTsKKyAgICAgICAgQVNTRVJUKGl0ZXItPmtleS0+c2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpID09IHRoaXMpOworICAgICAgICBBU1NFUlQoaXRlci0+a2V5LT5zdXNwZW5k
SWZOZWVkZWRDYWxsZWQoKSk7CisgICAgICAgIGl0ZXItPmtleS0+c3VzcGVuZCh3aHkpOwogICAg
IH0KICAgICBtX2l0ZXJhdGluZ0FjdGl2ZURPTU9iamVjdHMgPSBmYWxzZTsKICAgICBtX2FjdGl2
ZURPTU9iamVjdHNBcmVTdXNwZW5kZWQgPSB0cnVlOwpAQCAtMjA2LDkgKzIwNiw5IEBAIHZvaWQg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6cmVzdW1lQWN0aXZlRE9NT2JqZWN0cygpCiAgICAgbV9p
dGVyYXRpbmdBY3RpdmVET01PYmplY3RzID0gdHJ1ZTsKICAgICBIYXNoTWFwPEFjdGl2ZURPTU9i
amVjdCosIHZvaWQqPjo6aXRlcmF0b3IgYWN0aXZlT2JqZWN0c0VuZCA9IG1fYWN0aXZlRE9NT2Jq
ZWN0cy5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8QWN0aXZlRE9NT2JqZWN0Kiwgdm9pZCo+Ojpp
dGVyYXRvciBpdGVyID0gbV9hY3RpdmVET01PYmplY3RzLmJlZ2luKCk7IGl0ZXIgIT0gYWN0aXZl
T2JqZWN0c0VuZDsgKytpdGVyKSB7Ci0gICAgICAgIEFTU0VSVChpdGVyLT5maXJzdC0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpID09IHRoaXMpOwotICAgICAgICBBU1NFUlQoaXRlci0+Zmlyc3Qt
PnN1c3BlbmRJZk5lZWRlZENhbGxlZCgpKTsKLSAgICAgICAgaXRlci0+Zmlyc3QtPnJlc3VtZSgp
OworICAgICAgICBBU1NFUlQoaXRlci0+a2V5LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgPT0g
dGhpcyk7CisgICAgICAgIEFTU0VSVChpdGVyLT5rZXktPnN1c3BlbmRJZk5lZWRlZENhbGxlZCgp
KTsKKyAgICAgICAgaXRlci0+a2V5LT5yZXN1bWUoKTsKICAgICB9CiAgICAgbV9pdGVyYXRpbmdB
Y3RpdmVET01PYmplY3RzID0gZmFsc2U7CiB9CkBAIC0yMjAsOSArMjIwLDkgQEAgdm9pZCBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0OjpzdG9wQWN0aXZlRE9NT2JqZWN0cygpCiAgICAgbV9pdGVyYXRp
bmdBY3RpdmVET01PYmplY3RzID0gdHJ1ZTsKICAgICBIYXNoTWFwPEFjdGl2ZURPTU9iamVjdCos
IHZvaWQqPjo6aXRlcmF0b3IgYWN0aXZlT2JqZWN0c0VuZCA9IG1fYWN0aXZlRE9NT2JqZWN0cy5l
bmQoKTsKICAgICBmb3IgKEhhc2hNYXA8QWN0aXZlRE9NT2JqZWN0Kiwgdm9pZCo+OjppdGVyYXRv
ciBpdGVyID0gbV9hY3RpdmVET01PYmplY3RzLmJlZ2luKCk7IGl0ZXIgIT0gYWN0aXZlT2JqZWN0
c0VuZDsgKytpdGVyKSB7Ci0gICAgICAgIEFTU0VSVChpdGVyLT5maXJzdC0+c2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpID09IHRoaXMpOwotICAgICAgICBBU1NFUlQoaXRlci0+Zmlyc3QtPnN1c3Bl
bmRJZk5lZWRlZENhbGxlZCgpKTsKLSAgICAgICAgaXRlci0+Zmlyc3QtPnN0b3AoKTsKKyAgICAg
ICAgQVNTRVJUKGl0ZXItPmtleS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpID09IHRoaXMpOwor
ICAgICAgICBBU1NFUlQoaXRlci0+a2V5LT5zdXNwZW5kSWZOZWVkZWRDYWxsZWQoKSk7CisgICAg
ICAgIGl0ZXItPmtleS0+c3RvcCgpOwogICAgIH0KICAgICBtX2l0ZXJhdGluZ0FjdGl2ZURPTU9i
amVjdHMgPSBmYWxzZTsKIApAQCAtMzgwLDcgKzM4MCw3IEBAIHZvaWQgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dDo6YWRqdXN0TWluaW11bVRpbWVySW50ZXJ2YWwoZG91YmxlIG9sZE1pbmltdW1UaW1l
ckluCiB7CiAgICAgaWYgKG1pbmltdW1UaW1lckludGVydmFsKCkgIT0gb2xkTWluaW11bVRpbWVy
SW50ZXJ2YWwpIHsKICAgICAgICAgZm9yIChUaW1lb3V0TWFwOjppdGVyYXRvciBpdGVyID0gbV90
aW1lb3V0cy5iZWdpbigpOyBpdGVyICE9IG1fdGltZW91dHMuZW5kKCk7ICsraXRlcikgewotICAg
ICAgICAgICAgRE9NVGltZXIqIHRpbWVyID0gaXRlci0+c2Vjb25kOworICAgICAgICAgICAgRE9N
VGltZXIqIHRpbWVyID0gaXRlci0+dmFsdWU7CiAgICAgICAgICAgICB0aW1lci0+YWRqdXN0TWlu
aW11bVRpbWVySW50ZXJ2YWwob2xkTWluaW11bVRpbWVySW50ZXJ2YWwpOwogICAgICAgICB9CiAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NwYWNlU3BsaXRTdHJpbmcuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZG9tL1NwYWNlU3BsaXRTdHJpbmcuY3BwCmluZGV4IDljY2U3ZDk1
YjVlMTA0NDNjMDNlZGE1YjcyZjExMmM1NzA1MmU1MTIuLjFkYzFmYjBkZGUxZjAyM2YzZjhhNjUz
YjIzYWMzZDg3MzhlOGMzNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TcGFjZVNw
bGl0U3RyaW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU3BhY2VTcGxpdFN0cmluZy5j
cHAKQEAgLTE1MCw3ICsxNTAsNyBAQCBTcGFjZVNwbGl0U3RyaW5nRGF0YTo6flNwYWNlU3BsaXRT
dHJpbmdEYXRhKCkKIAogUGFzc1JlZlB0cjxTcGFjZVNwbGl0U3RyaW5nRGF0YT4gU3BhY2VTcGxp
dFN0cmluZ0RhdGE6OmNyZWF0ZShjb25zdCBBdG9taWNTdHJpbmcmIHN0cmluZykKIHsKLSAgICBT
cGFjZVNwbGl0U3RyaW5nRGF0YSomIGRhdGEgPSBzaGFyZWREYXRhTWFwKCkuYWRkKHN0cmluZywg
MCkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBTcGFjZVNwbGl0U3RyaW5nRGF0YSomIGRhdGEgPSBz
aGFyZWREYXRhTWFwKCkuYWRkKHN0cmluZywgMCkuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICgh
ZGF0YSkgewogICAgICAgICBkYXRhID0gbmV3IFNwYWNlU3BsaXRTdHJpbmdEYXRhKHN0cmluZyk7
CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihkYXRhKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVt
ZW50LmNwcAppbmRleCAwMDdjM2FmMGMwZTFhMjZkYzdhZWM3NDZiOTMxZWYxOWFjY2RjNDFmLi4x
ZGUxMTYzZjZlNmYzOGNiOTIzMDhlZmQwM2MyMDEwMmI5YTllN2I4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9t
L1N0eWxlZEVsZW1lbnQuY3BwCkBAIC0yODIsMTQgKzI4MiwxNCBAQCB2b2lkIFN0eWxlZEVsZW1l
bnQ6OnVwZGF0ZUF0dHJpYnV0ZVN0eWxlKCkKICAgICBQcmVzZW50YXRpb25BdHRyaWJ1dGVDYWNo
ZTo6aXRlcmF0b3IgY2FjaGVJdGVyYXRvcjsKICAgICBpZiAoY2FjaGVIYXNoKSB7CiAgICAgICAg
IGNhY2hlSXRlcmF0b3IgPSBwcmVzZW50YXRpb25BdHRyaWJ1dGVDYWNoZSgpLmFkZChjYWNoZUhh
c2gsIG51bGxwdHIpLml0ZXJhdG9yOwotICAgICAgICBpZiAoY2FjaGVJdGVyYXRvci0+c2Vjb25k
ICYmIGNhY2hlSXRlcmF0b3ItPnNlY29uZC0+a2V5ICE9IGNhY2hlS2V5KQorICAgICAgICBpZiAo
Y2FjaGVJdGVyYXRvci0+dmFsdWUgJiYgY2FjaGVJdGVyYXRvci0+dmFsdWUtPmtleSAhPSBjYWNo
ZUtleSkKICAgICAgICAgICAgIGNhY2hlSGFzaCA9IDA7CiAgICAgfSBlbHNlCiAgICAgICAgIGNh
Y2hlSXRlcmF0b3IgPSBwcmVzZW50YXRpb25BdHRyaWJ1dGVDYWNoZSgpLmVuZCgpOwogCiAgICAg
UmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IHN0eWxlOwotICAgIGlmIChjYWNoZUhhc2ggJiYgY2Fj
aGVJdGVyYXRvci0+c2Vjb25kKSB7Ci0gICAgICAgIHN0eWxlID0gY2FjaGVJdGVyYXRvci0+c2Vj
b25kLT52YWx1ZTsKKyAgICBpZiAoY2FjaGVIYXNoICYmIGNhY2hlSXRlcmF0b3ItPnZhbHVlKSB7
CisgICAgICAgIHN0eWxlID0gY2FjaGVJdGVyYXRvci0+dmFsdWUtPnZhbHVlOwogICAgICAgICBw
cmVzZW50YXRpb25BdHRyaWJ1dGVDYWNoZUNsZWFuZXIoKS5kaWRIaXRQcmVzZW50YXRpb25BdHRy
aWJ1dGVDYWNoZSgpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHN0eWxlID0gU3R5bGVQcm9wZXJ0
eVNldDo6Y3JlYXRlKGlzU1ZHRWxlbWVudCgpID8gU1ZHQXR0cmlidXRlTW9kZSA6IENTU1F1aXJr
c01vZGUpOwpAQCAtMzA4LDcgKzMwOCw3IEBAIHZvaWQgU3R5bGVkRWxlbWVudDo6dXBkYXRlQXR0
cmlidXRlU3R5bGUoKQogICAgICAgICBhdHRyaWJ1dGVEYXRhKCktPnNldEF0dHJpYnV0ZVN0eWxl
KHN0eWxlKTsKICAgICB9CiAKLSAgICBpZiAoIWNhY2hlSGFzaCB8fCBjYWNoZUl0ZXJhdG9yLT5z
ZWNvbmQpCisgICAgaWYgKCFjYWNoZUhhc2ggfHwgY2FjaGVJdGVyYXRvci0+dmFsdWUpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIE93blB0cjxQcmVzZW50YXRpb25BdHRyaWJ1dGVDYWNoZUVudHJ5
PiBuZXdFbnRyeSA9IGFkb3B0UHRyKG5ldyBQcmVzZW50YXRpb25BdHRyaWJ1dGVDYWNoZUVudHJ5
KTsKQEAgLTMyMSw3ICszMjEsNyBAQCB2b2lkIFN0eWxlZEVsZW1lbnQ6OnVwZGF0ZUF0dHJpYnV0
ZVN0eWxlKCkKICAgICAgICAgcHJlc2VudGF0aW9uQXR0cmlidXRlQ2FjaGUoKS5jbGVhcigpOwog
ICAgICAgICBwcmVzZW50YXRpb25BdHRyaWJ1dGVDYWNoZSgpLnNldChjYWNoZUhhc2gsIG5ld0Vu
dHJ5LnJlbGVhc2UoKSk7CiAgICAgfSBlbHNlCi0gICAgICAgIGNhY2hlSXRlcmF0b3ItPnNlY29u
ZCA9IG5ld0VudHJ5LnJlbGVhc2UoKTsKKyAgICAgICAgY2FjaGVJdGVyYXRvci0+dmFsdWUgPSBu
ZXdFbnRyeS5yZWxlYXNlKCk7CiB9CiAKIHZvaWQgU3R5bGVkRWxlbWVudDo6YWRkUHJvcGVydHlU
b0F0dHJpYnV0ZVN0eWxlKFN0eWxlUHJvcGVydHlTZXQqIHN0eWxlLCBDU1NQcm9wZXJ0eUlEIHBy
b3BlcnR5SUQsIGludCBpZGVudGlmaWVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MQ29sbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9u
LmNwcAppbmRleCBjM2E3MTUzY2FlNDVhZDYwMWE4NWM4NTA5OWUzZjE1MTg5OTcyN2M5Li43NGI5
OGM2ZmI0MWU3OTA3NzkzNjc2YmUzMGE4NzYyMzljNTM4MjQyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxDb2xsZWN0aW9uLmNwcApAQCAtMzU5LDcgKzM1OSw3IEBAIFBhc3NSZWZQdHI8Tm9kZUxp
c3Q+IEhUTUxDb2xsZWN0aW9uOjp0YWdzKGNvbnN0IFN0cmluZyYgbmFtZSkKIAogdm9pZCBIVE1M
Q29sbGVjdGlvbjo6YXBwZW5kKE5vZGVDYWNoZU1hcCYgbWFwLCBjb25zdCBBdG9taWNTdHJpbmcm
IGtleSwgRWxlbWVudCogZWxlbWVudCkKIHsKLSAgICBPd25QdHI8VmVjdG9yPEVsZW1lbnQqPiA+
JiB2ZWN0b3IgPSBtYXAuYWRkKGtleS5pbXBsKCksIG51bGxwdHIpLml0ZXJhdG9yLT5zZWNvbmQ7
CisgICAgT3duUHRyPFZlY3RvcjxFbGVtZW50Kj4gPiYgdmVjdG9yID0gbWFwLmFkZChrZXkuaW1w
bCgpLCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCF2ZWN0b3IpCiAgICAgICAg
IHZlY3RvciA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8RWxlbWVudCo+KTsKICAgICB2ZWN0b3ItPmFw
cGVuZChlbGVtZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db2Rl
R2VuZXJhdG9ySW5zcGVjdG9yLnB5IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3IucHkKaW5kZXggNWE1YWZmZDRiZTUyZGI5ZmIwMzExNTE5NzI1N2JkMzcw
YmVhYjA1OS4uZDEzMmU5YTExYmU0M2RiNzEzMmVjMGY2YzAxZmUyNTQ4YjQ0YmM4NyAxMDA3NTUK
LS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkK
QEAgLTEzMTcsNyArMTMxNyw3IEBAIGNsYXNzIFR5cGVCaW5kaW5nczoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICAg
ICAgSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciAlcztcbiIgJSBpdF9uYW1lKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgi
ICAgICAgICAlcyA9IG9iamVjdC0+ZmluZChcIiVzXCIpO1xuIiAlIChpdF9uYW1lLCBwcm9wX2Rh
dGEucFsibmFtZSJdKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgQVNTRVJUKCVzICE9IG9iamVjdC0+ZW5k
KCkpO1xuIiAlIGl0X25hbWUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgICAgICVzKCVzLT5zZWNvbmQuZ2V0KCkp
O1xuIiAlIChwcm9wX2RhdGEucGFyYW1fdHlwZV9iaW5kaW5nLmdldF92YWxpZGF0b3JfY2FsbF90
ZXh0KCksIGl0X25hbWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgICAgICAlcyglcy0+dmFsdWUuZ2V0KCkpO1xu
IiAlIChwcm9wX2RhdGEucGFyYW1fdHlwZV9iaW5kaW5nLmdldF92YWxpZGF0b3JfY2FsbF90ZXh0
KCksIGl0X25hbWUpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
bGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgIH1cbiIpCiAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIGNsb3NlZF9maWVsZF9zZXQ6CkBAIC0xMzI5LDcgKzEzMjksNyBA
QCBjbGFzcyBUeXBlQmluZGluZ3M6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgICAgIEluc3BlY3Rvck9iamVjdDo6
aXRlcmF0b3IgJXM7XG4iICUgaXRfbmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgJXMgPSBvYmplY3Qt
PmZpbmQoXCIlc1wiKTtcbiIgJSAoaXRfbmFtZSwgcHJvcF9kYXRhLnBbIm5hbWUiXSkpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXds
aW5lKCIgICAgICAgIGlmICglcyAhPSBvYmplY3QtPmVuZCgpKSB7XG4iICUgaXRfbmFtZSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5l
d2xpbmUoIiAgICAgICAgICAgICVzKCVzLT5zZWNvbmQuZ2V0KCkpO1xuIiAlIChwcm9wX2RhdGEu
cGFyYW1fdHlwZV9iaW5kaW5nLmdldF92YWxpZGF0b3JfY2FsbF90ZXh0KCksIGl0X25hbWUpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIu
bmV3bGluZSgiICAgICAgICAgICAgJXMoJXMtPnZhbHVlLmdldCgpKTtcbiIgJSAocHJvcF9kYXRh
LnBhcmFtX3R5cGVfYmluZGluZy5nZXRfdmFsaWRhdG9yX2NhbGxfdGV4dCgpLCBpdF9uYW1lKSkK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBjbG9zZWRfZmllbGRf
c2V0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0
b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgICAgICsrZm91bmRQcm9wZXJ0aWVzQ291bnQ7XG4i
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0
ZXIubmV3bGluZSgiICAgICAgICB9XG4iKQpAQCAtMjAwMiw3ICsyMDAyLDcgQEAgJG1lc3NhZ2VI
YW5kbGVycwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgKCgqdGhpcykuKml0LT5zZWNv
bmQpKGNhbGxJZCwgbWVzc2FnZU9iamVjdC5nZXQoKSk7CisgICAgKCgqdGhpcykuKml0LT52YWx1
ZSkoY2FsbElkLCBtZXNzYWdlT2JqZWN0LmdldCgpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlckltcGw6OnNlbmRSZXNwb25zZShsb25nIGNhbGxJZCwgUGFzc1JlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHJlc3VsdCwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzLCBFcnJvclN0cmluZyBpbnZvY2F0
aW9uRXJyb3IpCkBAIC0yMDg1LDcgKzIwODUsNyBAQCBSIEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVySW1wbDo6Z2V0UHJvcGVydHlWYWx1ZUltcGwoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsCiAg
ICAgICAgIHJldHVybiB2YWx1ZTsKICAgICB9CiAKLSAgICBpZiAoIWFzX21ldGhvZCh2YWx1ZUl0
ZXJhdG9yLT5zZWNvbmQuZ2V0KCksICZ2YWx1ZSkpCisgICAgaWYgKCFhc19tZXRob2QodmFsdWVJ
dGVyYXRvci0+dmFsdWUuZ2V0KCksICZ2YWx1ZSkpCiAgICAgICAgIHByb3RvY29sRXJyb3JzLT5w
dXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJQYXJhbWV0ZXIgJyVzJyBoYXMgd3JvbmcgdHlwZS4g
SXQgbXVzdCBiZSAnJXMnLiIsIG5hbWUudXRmOCgpLmRhdGEoKSwgdHlwZV9uYW1lKSk7CiAgICAg
ZWxzZQogICAgICAgICBpZiAodmFsdWVGb3VuZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9ET01QYXRjaFN1cHBvcnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0RPTVBhdGNoU3VwcG9ydC5jcHAKaW5kZXggZDdmY2I5YWFjMDhlODg1MzY4NmNmZGRiNTFmYTFl
MTBkMjk5NDljZC4uMDcxMTUzM2I3OTdlMDk5NTEyOTQ3YjIyYzVhNDE3Y2JmN2E0ODE2MCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5jcHAKQEAgLTIzNCwy
NCArMjM0LDI0IEBAIERPTVBhdGNoU3VwcG9ydDo6ZGlmZihjb25zdCBWZWN0b3I8T3duUHRyPERp
Z2VzdD4gPiYgb2xkTGlzdCwgY29uc3QgVmVjdG9yPE93blB0CiAKICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG5ld0xpc3Quc2l6ZSgpOyArK2kpIHsKICAgICAgICAgRGlmZlRhYmxlOjppdGVy
YXRvciBpdCA9IG5ld1RhYmxlLmFkZChuZXdMaXN0W2ldLT5tX3NoYTEsIFZlY3RvcjxzaXplX3Q+
KCkpLml0ZXJhdG9yOwotICAgICAgICBpdC0+c2Vjb25kLmFwcGVuZChpKTsKKyAgICAgICAgaXQt
PnZhbHVlLmFwcGVuZChpKTsKICAgICB9CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9s
ZExpc3Quc2l6ZSgpOyArK2kpIHsKICAgICAgICAgRGlmZlRhYmxlOjppdGVyYXRvciBpdCA9IG9s
ZFRhYmxlLmFkZChvbGRMaXN0W2ldLT5tX3NoYTEsIFZlY3RvcjxzaXplX3Q+KCkpLml0ZXJhdG9y
OwotICAgICAgICBpdC0+c2Vjb25kLmFwcGVuZChpKTsKKyAgICAgICAgaXQtPnZhbHVlLmFwcGVu
ZChpKTsKICAgICB9CiAKICAgICBmb3IgKERpZmZUYWJsZTo6aXRlcmF0b3IgbmV3SXQgPSBuZXdU
YWJsZS5iZWdpbigpOyBuZXdJdCAhPSBuZXdUYWJsZS5lbmQoKTsgKytuZXdJdCkgewotICAgICAg
ICBpZiAobmV3SXQtPnNlY29uZC5zaXplKCkgIT0gMSkKKyAgICAgICAgaWYgKG5ld0l0LT52YWx1
ZS5zaXplKCkgIT0gMSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIERpZmZUYWJs
ZTo6aXRlcmF0b3Igb2xkSXQgPSBvbGRUYWJsZS5maW5kKG5ld0l0LT5maXJzdCk7Ci0gICAgICAg
IGlmIChvbGRJdCA9PSBvbGRUYWJsZS5lbmQoKSB8fCBvbGRJdC0+c2Vjb25kLnNpemUoKSAhPSAx
KQorICAgICAgICBEaWZmVGFibGU6Oml0ZXJhdG9yIG9sZEl0ID0gb2xkVGFibGUuZmluZChuZXdJ
dC0+a2V5KTsKKyAgICAgICAgaWYgKG9sZEl0ID09IG9sZFRhYmxlLmVuZCgpIHx8IG9sZEl0LT52
YWx1ZS5zaXplKCkgIT0gMSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIG5ld01h
cFtuZXdJdC0+c2Vjb25kWzBdXSA9IG1ha2VfcGFpcihuZXdMaXN0W25ld0l0LT5zZWNvbmRbMF1d
LmdldCgpLCBvbGRJdC0+c2Vjb25kWzBdKTsKLSAgICAgICAgb2xkTWFwW29sZEl0LT5zZWNvbmRb
MF1dID0gbWFrZV9wYWlyKG9sZExpc3Rbb2xkSXQtPnNlY29uZFswXV0uZ2V0KCksIG5ld0l0LT5z
ZWNvbmRbMF0pOworICAgICAgICBuZXdNYXBbbmV3SXQtPnZhbHVlWzBdXSA9IG1ha2VfcGFpcihu
ZXdMaXN0W25ld0l0LT52YWx1ZVswXV0uZ2V0KCksIG9sZEl0LT52YWx1ZVswXSk7CisgICAgICAg
IG9sZE1hcFtvbGRJdC0+dmFsdWVbMF1dID0gbWFrZV9wYWlyKG9sZExpc3Rbb2xkSXQtPnZhbHVl
WzBdXS5nZXQoKSwgbmV3SXQtPnZhbHVlWzBdKTsKICAgICB9CiAKICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgbmV3TGlzdC5zaXplKCkgPiAwICYmIGkgPCBuZXdMaXN0LnNpemUoKSAtIDE7ICsraSkg
ewpAQCAtMzYxLDcgKzM2MSw3IEBAIGJvb2wgRE9NUGF0Y2hTdXBwb3J0Ojppbm5lclBhdGNoQ2hp
bGRyZW4oQ29udGFpbmVyTm9kZSogcGFyZW50Tm9kZSwgY29uc3QgVmVjdG9yCiAKICAgICAvLyAy
LiBQYXRjaCBub2RlcyBtYXJrZWQgZm9yIG1lcmdlLgogICAgIGZvciAoSGFzaE1hcDxEaWdlc3Qq
LCBEaWdlc3QqPjo6aXRlcmF0b3IgaXQgPSBtZXJnZXMuYmVnaW4oKTsgaXQgIT0gbWVyZ2VzLmVu
ZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmICghaW5uZXJQYXRjaE5vZGUoaXQtPnNlY29uZCwgaXQt
PmZpcnN0LCBlYykpCisgICAgICAgIGlmICghaW5uZXJQYXRjaE5vZGUoaXQtPnZhbHVlLCBpdC0+
a2V5LCBlYykpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC00NjAsNyAr
NDYwLDcgQEAgYm9vbCBET01QYXRjaFN1cHBvcnQ6OnJlbW92ZUNoaWxkQW5kTW92ZVRvTmV3KERp
Z2VzdCogb2xkRGlnZXN0LCBFeGNlcHRpb25Db2RlJgogICAgIC8vIGhpZ2ggdGhhdCBpdCB3aWxs
IGdldCBtZXJnZWQgYmFjayBpbnRvIHRoZSBvcmlnaW5hbCBET00gZHVyaW5nIHRoZSBmdXJ0aGVy
IHBhdGNoaW5nLgogICAgIFVudXNlZE5vZGVzTWFwOjppdGVyYXRvciBpdCA9IG1fdW51c2VkTm9k
ZXNNYXAuZmluZChvbGREaWdlc3QtPm1fc2hhMSk7CiAgICAgaWYgKGl0ICE9IG1fdW51c2VkTm9k
ZXNNYXAuZW5kKCkpIHsKLSAgICAgICAgRGlnZXN0KiBuZXdEaWdlc3QgPSBpdC0+c2Vjb25kOwor
ICAgICAgICBEaWdlc3QqIG5ld0RpZ2VzdCA9IGl0LT52YWx1ZTsKICAgICAgICAgTm9kZSogbmV3
Tm9kZSA9IG5ld0RpZ2VzdC0+bV9ub2RlOwogICAgICAgICBpZiAoIW1fZG9tRWRpdG9yLT5yZXBs
YWNlQ2hpbGQobmV3Tm9kZS0+cGFyZW50Tm9kZSgpLCBvbGROb2RlLCBuZXdOb2RlLCBlYykpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwCmluZGV4IDYwNTE3MTM1ZDg1OWE5M2FjNmNlNGEz
MWJlNmNjYzUwNTYyMmJkMmUuLjczYTNlMTM4NWE4MzljZmIxNTI5YTc0ZjdkM2E3NzM0MjhlMWI0
ZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdE1h
bmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdE1h
bmFnZXIuY3BwCkBAIC05OCw3ICs5OCw3IEBAIHZvaWQgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjpk
aXNjYXJkSW5qZWN0ZWRTY3JpcHRzKCkKIHsKICAgICBJZFRvSW5qZWN0ZWRTY3JpcHRNYXA6Oml0
ZXJhdG9yIGVuZCA9IG1faWRUb0luamVjdGVkU2NyaXB0LmVuZCgpOwogICAgIGZvciAoSWRUb0lu
amVjdGVkU2NyaXB0TWFwOjppdGVyYXRvciBpdCA9IG1faWRUb0luamVjdGVkU2NyaXB0LmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgZGlzY2FyZEluamVjdGVkU2NyaXB0KGl0LT5z
ZWNvbmQuc2NyaXB0U3RhdGUoKSk7CisgICAgICAgIGRpc2NhcmRJbmplY3RlZFNjcmlwdChpdC0+
dmFsdWUuc2NyaXB0U3RhdGUoKSk7CiAgICAgbV9pZFRvSW5qZWN0ZWRTY3JpcHQuY2xlYXIoKTsK
IH0KIApAQCAtMTA3LDExICsxMDcsMTEgQEAgdm9pZCBJbmplY3RlZFNjcmlwdE1hbmFnZXI6OmRp
c2NhcmRJbmplY3RlZFNjcmlwdHNGb3IoRE9NV2luZG93KiB3aW5kb3cpCiAgICAgVmVjdG9yPGxv
bmc+IGlkc1RvUmVtb3ZlOwogICAgIElkVG9JbmplY3RlZFNjcmlwdE1hcDo6aXRlcmF0b3IgZW5k
ID0gbV9pZFRvSW5qZWN0ZWRTY3JpcHQuZW5kKCk7CiAgICAgZm9yIChJZFRvSW5qZWN0ZWRTY3Jp
cHRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pZFRvSW5qZWN0ZWRTY3JpcHQuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7Ci0gICAgICAgIFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSA9IGl0LT5zZWNv
bmQuc2NyaXB0U3RhdGUoKTsKKyAgICAgICAgU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlID0gaXQt
PnZhbHVlLnNjcmlwdFN0YXRlKCk7CiAgICAgICAgIGlmICh3aW5kb3cgIT0gZG9tV2luZG93RnJv
bVNjcmlwdFN0YXRlKHNjcmlwdFN0YXRlKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICBkaXNjYXJkSW5qZWN0ZWRTY3JpcHQoc2NyaXB0U3RhdGUpOwotICAgICAgICBpZHNUb1JlbW92
ZS5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgaWRzVG9SZW1vdmUuYXBwZW5kKGl0LT5rZXkp
OwogICAgIH0KIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaWRzVG9SZW1vdmUuc2l6ZSgp
OyBpKyspCkBAIC0xMjYsNyArMTI2LDcgQEAgYm9vbCBJbmplY3RlZFNjcmlwdE1hbmFnZXI6OmNh
bkFjY2Vzc0luc3BlY3RlZFdvcmtlckNvbnRleHQoU2NyaXB0U3RhdGUqKQogdm9pZCBJbmplY3Rl
ZFNjcmlwdE1hbmFnZXI6OnJlbGVhc2VPYmplY3RHcm91cChjb25zdCBTdHJpbmcmIG9iamVjdEdy
b3VwKQogewogICAgIGZvciAoSWRUb0luamVjdGVkU2NyaXB0TWFwOjppdGVyYXRvciBpdCA9IG1f
aWRUb0luamVjdGVkU2NyaXB0LmJlZ2luKCk7IGl0ICE9IG1faWRUb0luamVjdGVkU2NyaXB0LmVu
ZCgpOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLnJlbGVhc2VPYmplY3RHcm91cChvYmplY3RH
cm91cCk7CisgICAgICAgIGl0LT52YWx1ZS5yZWxlYXNlT2JqZWN0R3JvdXAob2JqZWN0R3JvdXAp
OwogfQogCiBTdHJpbmcgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjppbmplY3RlZFNjcmlwdFNvdXJj
ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmNwcAppbmRleCBi
YTdhNzMzNTFjMDljODkyMzVlNDZiYzE0YWM4ODJhMTRlOWRmMjY2Li45YjNjNGQ1ZmQxNjM2ZWEz
MjJiMzY5MzI1ZGE1NWMzNjljZWJhYTU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JBZ2VudC5jcHAKQEAgLTEzMSw3ICsxMzEsNyBAQCB2b2lkIEluc3BlY3RvckFnZW50
OjplbmFibGUoRXJyb3JTdHJpbmcqKQogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKSAm
JiBFTkFCTEUoV09SS0VSUykKICAgICBXb3JrZXJzTWFwOjppdGVyYXRvciB3b3JrZXJzRW5kID0g
bV93b3JrZXJzLmVuZCgpOwogICAgIGZvciAoV29ya2Vyc01hcDo6aXRlcmF0b3IgaXQgPSBtX3dv
cmtlcnMuYmVnaW4oKTsgaXQgIT0gd29ya2Vyc0VuZDsgKytpdCkgewotICAgICAgICBJbnNwZWN0
b3JXb3JrZXJSZXNvdXJjZSogd29ya2VyID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgSW5z
cGVjdG9yV29ya2VyUmVzb3VyY2UqIHdvcmtlciA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAg
bV9mcm9udGVuZC0+aW5zcGVjdG9yKCktPmRpZENyZWF0ZVdvcmtlcih3b3JrZXItPmlkKCksIHdv
cmtlci0+dXJsKCksIHdvcmtlci0+aXNTaGFyZWRXb3JrZXIoKSk7CiAgICAgfQogI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcAppbmRleCAz
NjRlNGQ0MWFhMGQzMzExYmYzYjAzMGZmZDE1Y2QyMjc5MTZkMDY4Li44NjgzYzQ0MjE3YzRjNDEw
ZTkyMGI5MWQ1NDAyNDFjNDY3NWQxOGQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKQEAgLTE4MywxMCArMTgzLDEwIEBAIGlubGluZSB2b2lk
IFNlbGVjdG9yUHJvZmlsZTo6Y29tbWl0U2VsZWN0b3IoYm9vbCBtYXRjaGVkKQogCiAgICAgUnVs
ZU1hdGNoaW5nU3RhdHNNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX3J1bGVNYXRjaGluZ1N0YXRz
LmFkZChtYWtlS2V5KCksIFJ1bGVNYXRjaGluZ1N0YXRzKG1fY3VycmVudE1hdGNoRGF0YSwgbWF0
Y2hUaW1lTXMsIDEsIG1hdGNoZWQgPyAxIDogMCkpOwogICAgIGlmICghcmVzdWx0LmlzTmV3RW50
cnkpIHsKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQudG90YWxUaW1lICs9IG1hdGNo
VGltZU1zOwotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZC5oaXRzICs9IDE7CisgICAg
ICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUudG90YWxUaW1lICs9IG1hdGNoVGltZU1zOworICAg
ICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmhpdHMgKz0gMTsKICAgICAgICAgaWYgKG1hdGNo
ZWQpCi0gICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZC5tYXRjaGVzICs9IDE7Cisg
ICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLm1hdGNoZXMgKz0gMTsKICAgICB9CiB9
CiAKQEAgLTE5OSw3ICsxOTksNyBAQCBpbmxpbmUgdm9pZCBTZWxlY3RvclByb2ZpbGU6OmNvbW1p
dFNlbGVjdG9yVGltZSgpCiAgICAgaWYgKGl0ID09IG1fcnVsZU1hdGNoaW5nU3RhdHMuZW5kKCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGl0LT5zZWNvbmQudG90YWxUaW1lICs9IHByb2Nlc3Np
bmdUaW1lTXM7CisgICAgaXQtPnZhbHVlLnRvdGFsVGltZSArPSBwcm9jZXNzaW5nVGltZU1zOwog
fQogCiBQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OlNlbGVjdG9yUHJvZmlsZT4gU2VsZWN0
b3JQcm9maWxlOjp0b0luc3BlY3Rvck9iamVjdCgpIGNvbnN0CkBAIC0yMDcsMTIgKzIwNywxMiBA
QCBQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OlNlbGVjdG9yUHJvZmlsZT4gU2VsZWN0b3JQ
cm9maWxlOjp0b0luc3BlY3Rvck9iamVjdAogICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8
VHlwZUJ1aWxkZXI6OkNTUzo6U2VsZWN0b3JQcm9maWxlRW50cnk+ID4gc2VsZWN0b3JQcm9maWxl
RGF0YSA9IFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6Q1NTOjpTZWxlY3RvclByb2Zp
bGVFbnRyeT46OmNyZWF0ZSgpOwogICAgIGZvciAoUnVsZU1hdGNoaW5nU3RhdHNNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbV9ydWxlTWF0Y2hpbmdTdGF0cy5iZWdpbigpOyBpdCAhPSBtX3J1bGVN
YXRjaGluZ1N0YXRzLmVuZCgpOyArK2l0KSB7CiAgICAgICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6
Q1NTOjpTZWxlY3RvclByb2ZpbGVFbnRyeT4gZW50cnkgPSBUeXBlQnVpbGRlcjo6Q1NTOjpTZWxl
Y3RvclByb2ZpbGVFbnRyeTo6Y3JlYXRlKCkKLSAgICAgICAgICAgIC5zZXRTZWxlY3RvcihpdC0+
c2Vjb25kLnNlbGVjdG9yKQotICAgICAgICAgICAgLnNldFVybChpdC0+c2Vjb25kLnVybCkKLSAg
ICAgICAgICAgIC5zZXRMaW5lTnVtYmVyKGl0LT5zZWNvbmQubGluZU51bWJlcikKLSAgICAgICAg
ICAgIC5zZXRUaW1lKGl0LT5zZWNvbmQudG90YWxUaW1lKQotICAgICAgICAgICAgLnNldEhpdENv
dW50KGl0LT5zZWNvbmQuaGl0cykKLSAgICAgICAgICAgIC5zZXRNYXRjaENvdW50KGl0LT5zZWNv
bmQubWF0Y2hlcyk7CisgICAgICAgICAgICAuc2V0U2VsZWN0b3IoaXQtPnZhbHVlLnNlbGVjdG9y
KQorICAgICAgICAgICAgLnNldFVybChpdC0+dmFsdWUudXJsKQorICAgICAgICAgICAgLnNldExp
bmVOdW1iZXIoaXQtPnZhbHVlLmxpbmVOdW1iZXIpCisgICAgICAgICAgICAuc2V0VGltZShpdC0+
dmFsdWUudG90YWxUaW1lKQorICAgICAgICAgICAgLnNldEhpdENvdW50KGl0LT52YWx1ZS5oaXRz
KQorICAgICAgICAgICAgLnNldE1hdGNoQ291bnQoaXQtPnZhbHVlLm1hdGNoZXMpOwogICAgICAg
ICBzZWxlY3RvclByb2ZpbGVEYXRhLT5hZGRJdGVtKGVudHJ5LnJlbGVhc2UoKSk7CiAgICAgfQog
CkBAIC04MzIsNyArODMyLDcgQEAgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlKiBJ
bnNwZWN0b3JDU1NBZ2VudDo6YXNJbnNwZWN0b3JTdHlsZVNoZWV0KEVsZW0KICAgICAgICAgcmV0
dXJuIGluc3BlY3RvclN0eWxlU2hlZXQuZ2V0KCk7CiAgICAgfQogCi0gICAgcmV0dXJuIGl0LT5z
ZWNvbmQuZ2V0KCk7CisgICAgcmV0dXJuIGl0LT52YWx1ZS5nZXQoKTsKIH0KIAogRWxlbWVudCog
SW5zcGVjdG9yQ1NTQWdlbnQ6OmVsZW1lbnRGb3JJZChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcs
IGludCBub2RlSWQpCkBAIC05MjYsNyArOTI2LDcgQEAgSW5zcGVjdG9yU3R5bGVTaGVldCogSW5z
cGVjdG9yQ1NTQWdlbnQ6OmFzc2VydFN0eWxlU2hlZXRGb3JJZChFcnJvclN0cmluZyogZXJyb3IK
ICAgICAgICAgKmVycm9yU3RyaW5nID0gIk5vIHN0eWxlIHNoZWV0IHdpdGggZ2l2ZW4gaWQgZm91
bmQiOwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQuZ2V0
KCk7CisgICAgcmV0dXJuIGl0LT52YWx1ZS5nZXQoKTsKIH0KIAogVHlwZUJ1aWxkZXI6OkNTUzo6
Q1NTUnVsZTo6T3JpZ2luOjpFbnVtIEluc3BlY3RvckNTU0FnZW50OjpkZXRlY3RPcmlnaW4oQ1NT
U3R5bGVTaGVldCogcGFnZVN0eWxlU2hlZXQsIERvY3VtZW50KiBvd25lckRvY3VtZW50KQpAQCAt
MTAwMiw3ICsxMDAyLDcgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6ZGlkUmVtb3ZlRE9NTm9k
ZShOb2RlKiBub2RlKQogICAgIGlmIChpdCA9PSBtX25vZGVUb0luc3BlY3RvclN0eWxlU2hlZXQu
ZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1faWRUb0luc3BlY3RvclN0eWxlU2hlZXQu
cmVtb3ZlKGl0LT5zZWNvbmQtPmlkKCkpOworICAgIG1faWRUb0luc3BlY3RvclN0eWxlU2hlZXQu
cmVtb3ZlKGl0LT52YWx1ZS0+aWQoKSk7CiAgICAgbV9ub2RlVG9JbnNwZWN0b3JTdHlsZVNoZWV0
LnJlbW92ZShub2RlKTsKIH0KIApAQCAtMTAxNSw3ICsxMDE1LDcgQEAgdm9pZCBJbnNwZWN0b3JD
U1NBZ2VudDo6ZGlkTW9kaWZ5RE9NQXR0cihFbGVtZW50KiBlbGVtZW50KQogICAgIGlmIChpdCA9
PSBtX25vZGVUb0luc3BlY3RvclN0eWxlU2hlZXQuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGl0LT5zZWNvbmQtPmRpZE1vZGlmeUVsZW1lbnRBdHRyaWJ1dGUoKTsKKyAgICBpdC0+dmFs
dWUtPmRpZE1vZGlmeUVsZW1lbnRBdHRyaWJ1dGUoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDU1NB
Z2VudDo6c3R5bGVTaGVldENoYW5nZWQoSW5zcGVjdG9yU3R5bGVTaGVldCogc3R5bGVTaGVldCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb25zb2xlQWdl
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnNvbGVBZ2VudC5j
cHAKaW5kZXggMTZjOTA5ZTRkMDU3YjllZjkwNWYxODMwOWE5ZmM5YWVjODUzOTJhZC4uOWU2YzAz
NWMxMDFlYmM1OWNhNDRhZjZjNDg2MTgzYTBlMjNlYjAxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnNvbGVBZ2VudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnNvbGVBZ2VudC5jcHAKQEAgLTE2OSw3ICsxNjks
NyBAQCB2b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6c3RvcFRpbWluZyhjb25zdCBTdHJpbmcm
IHRpdGxlLCBQYXNzUmVmUHRyPFNjcmlwdENhbAogICAgIGlmIChpdCA9PSBtX3RpbWVzLmVuZCgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBkb3VibGUgc3RhcnRUaW1lID0gaXQtPnNlY29uZDsK
KyAgICBkb3VibGUgc3RhcnRUaW1lID0gaXQtPnZhbHVlOwogICAgIG1fdGltZXMucmVtb3ZlKGl0
KTsKIAogICAgIGRvdWJsZSBlbGFwc2VkID0gY3VycmVudFRpbWUoKSAqIDEwMDAgLSBzdGFydFRp
bWU7CkBAIC0xOTIsNyArMTkyLDcgQEAgdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmNvdW50
KFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiBhcmd1bWVudHMsIFBhc3NSZWYKICAgICBpZiAo
aXQgPT0gbV9jb3VudHMuZW5kKCkpCiAgICAgICAgIGNvdW50ID0gMTsKICAgICBlbHNlIHsKLSAg
ICAgICAgY291bnQgPSBpdC0+c2Vjb25kICsgMTsKKyAgICAgICAgY291bnQgPSBpdC0+dmFsdWUg
KyAxOwogICAgICAgICBtX2NvdW50cy5yZW1vdmUoaXQpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKaW5kZXggNDhhYmQxMmY4ZTEz
M2M4MjY1NTI0MzI1ZjFhMjc4OWNiOGY4NjVjOS4uMjcwZTYzNzNjMDA3NGYwNjkwNGQzZDYyMTk0
OGZhNWI0ZmIzNzc3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckRPTUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RE9NQWdlbnQuY3BwCkBAIC00NjIsNyArNDYyLDcgQEAgTm9kZSogSW5zcGVjdG9yRE9NQWdlbnQ6
Om5vZGVGb3JJZChpbnQgaWQpCiAKICAgICBIYXNoTWFwPGludCwgTm9kZSo+OjppdGVyYXRvciBp
dCA9IG1faWRUb05vZGUuZmluZChpZCk7CiAgICAgaWYgKGl0ICE9IG1faWRUb05vZGUuZW5kKCkp
Ci0gICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwog
ICAgIHJldHVybiAwOwogfQogCkBAIC04ODgsOSArODg4LDkgQEAgdm9pZCBJbnNwZWN0b3JET01B
Z2VudDo6cGVyZm9ybVNlYXJjaChFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgd2hpdGVzcGFj
ZVRyaW0KICAgICBTZWFyY2hSZXN1bHRzOjppdGVyYXRvciByZXN1bHRzSXQgPSBtX3NlYXJjaFJl
c3VsdHMuYWRkKCpzZWFyY2hJZCwgVmVjdG9yPFJlZlB0cjxOb2RlPiA+KCkpLml0ZXJhdG9yOwog
CiAgICAgZm9yIChMaXN0SGFzaFNldDxOb2RlKj46Oml0ZXJhdG9yIGl0ID0gcmVzdWx0Q29sbGVj
dG9yLmJlZ2luKCk7IGl0ICE9IHJlc3VsdENvbGxlY3Rvci5lbmQoKTsgKytpdCkKLSAgICAgICAg
cmVzdWx0c0l0LT5zZWNvbmQuYXBwZW5kKCppdCk7CisgICAgICAgIHJlc3VsdHNJdC0+dmFsdWUu
YXBwZW5kKCppdCk7CiAKLSAgICAqcmVzdWx0Q291bnQgPSByZXN1bHRzSXQtPnNlY29uZC5zaXpl
KCk7CisgICAgKnJlc3VsdENvdW50ID0gcmVzdWx0c0l0LT52YWx1ZS5zaXplKCk7CiB9CiAKIHZv
aWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldFNlYXJjaFJlc3VsdHMoRXJyb3JTdHJpbmcqIGVycm9y
U3RyaW5nLCBjb25zdCBTdHJpbmcmIHNlYXJjaElkLCBpbnQgZnJvbUluZGV4LCBpbnQgdG9JbmRl
eCwgUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxpbnQ+ID4mIG5vZGVJZHMpCkBAIC05MDEsNyAr
OTAxLDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0U2VhcmNoUmVzdWx0cyhFcnJvclN0
cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIGludCBzaXplID0gaXQtPnNlY29uZC5zaXplKCk7CisgICAgaW50IHNpemUgPSBpdC0+
dmFsdWUuc2l6ZSgpOwogICAgIGlmIChmcm9tSW5kZXggPCAwIHx8IHRvSW5kZXggPiBzaXplIHx8
IGZyb21JbmRleCA+PSB0b0luZGV4KSB7CiAgICAgICAgICplcnJvclN0cmluZyA9ICJJbnZhbGlk
IHNlYXJjaCByZXN1bHQgcmFuZ2UiOwogICAgICAgICByZXR1cm47CkBAIC05MDksNyArOTA5LDcg
QEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0U2VhcmNoUmVzdWx0cyhFcnJvclN0cmluZyog
ZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYKIAogICAgIG5vZGVJZHMgPSBUeXBlQnVpbGRlcjo6
QXJyYXk8aW50Pjo6Y3JlYXRlKCk7CiAgICAgZm9yIChpbnQgaSA9IGZyb21JbmRleDsgaSA8IHRv
SW5kZXg7ICsraSkKLSAgICAgICAgbm9kZUlkcy0+YWRkSXRlbShwdXNoTm9kZVBhdGhUb0Zyb250
ZW5kKChpdC0+c2Vjb25kKVtpXS5nZXQoKSkpOworICAgICAgICBub2RlSWRzLT5hZGRJdGVtKHB1
c2hOb2RlUGF0aFRvRnJvbnRlbmQoKGl0LT52YWx1ZSlbaV0uZ2V0KCkpKTsKIH0KIAogdm9pZCBJ
bnNwZWN0b3JET01BZ2VudDo6ZGlzY2FyZFNlYXJjaFJlc3VsdHMoRXJyb3JTdHJpbmcqLCBjb25z
dCBTdHJpbmcmIHNlYXJjaElkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IDIzMWFlZTU0ZjVmMjQzNzQ5N2Zl
ZDgwOTk3YzE3YWQyMzZmMGQyNjQuLmEwMTNkZDk4ZWRlOWY0MjFiY2M1OTY3YWZkNThmMGZmZjY4
YTNhYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01E
ZWJ1Z2dlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RE9NRGVidWdnZXJBZ2VudC5jcHAKQEAgLTQwMSw4ICs0MDEsOCBAQCB2b2lkIEluc3BlY3RvckRP
TURlYnVnZ2VyQWdlbnQ6OndpbGxTZW5kWE1MSHR0cFJlcXVlc3QoY29uc3QgU3RyaW5nJiB1cmwp
CiAgICAgZWxzZSB7CiAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHhockJyZWFrcG9p
bnRzID0gbV9zdGF0ZS0+Z2V0T2JqZWN0KERPTURlYnVnZ2VyQWdlbnRTdGF0ZTo6eGhyQnJlYWtw
b2ludHMpOwogICAgICAgICBmb3IgKEluc3BlY3Rvck9iamVjdDo6aXRlcmF0b3IgaXQgPSB4aHJC
cmVha3BvaW50cy0+YmVnaW4oKTsgaXQgIT0geGhyQnJlYWtwb2ludHMtPmVuZCgpOyArK2l0KSB7
Ci0gICAgICAgICAgICBpZiAodXJsLmNvbnRhaW5zKGl0LT5maXJzdCkpIHsKLSAgICAgICAgICAg
ICAgICBicmVha3BvaW50VVJMID0gaXQtPmZpcnN0OworICAgICAgICAgICAgaWYgKHVybC5jb250
YWlucyhpdC0+a2V5KSkgeworICAgICAgICAgICAgICAgIGJyZWFrcG9pbnRVUkwgPSBpdC0+a2V5
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQu
Y3BwCmluZGV4IDNmNjY5NjBiMWVmMWUxM2IxMDFjYjU0MGZiNDhlMTZmOWIzNGZiZDYuLjk0N2M3
NzI2ZWI4NWY3ZGNjMDhmYzFmOTczYWFkY2Y2ODE2M2I2MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuY3BwCkBAIC03OCw3
ICs3OCw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpjbGVhckZyb250ZW5kKCkK
IHsKICAgICBET01TdG9yYWdlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBkb21TdG9yYWdlRW5kID0g
bV9yZXNvdXJjZXMuZW5kKCk7CiAgICAgZm9yIChET01TdG9yYWdlUmVzb3VyY2VzTWFwOjppdGVy
YXRvciBpdCA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGRvbVN0b3JhZ2VFbmQ7ICsraXQp
Ci0gICAgICAgIGl0LT5zZWNvbmQtPnVuYmluZCgpOworICAgICAgICBpdC0+dmFsdWUtPnVuYmlu
ZCgpOwogICAgIG1fZnJvbnRlbmQgPSAwOwogICAgIGRpc2FibGUoMCk7CiB9CkBAIC05Nyw3ICs5
Nyw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcq
KQogCiAgICAgRE9NU3RvcmFnZVJlc291cmNlc01hcDo6aXRlcmF0b3IgcmVzb3VyY2VzRW5kID0g
bV9yZXNvdXJjZXMuZW5kKCk7CiAgICAgZm9yIChET01TdG9yYWdlUmVzb3VyY2VzTWFwOjppdGVy
YXRvciBpdCA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IHJlc291cmNlc0VuZDsgKytpdCkK
LSAgICAgICAgaXQtPnNlY29uZC0+YmluZChtX2Zyb250ZW5kKTsKKyAgICAgICAgaXQtPnZhbHVl
LT5iaW5kKG1fZnJvbnRlbmQpOwogfQogCiB2b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6
ZGlzYWJsZShFcnJvclN0cmluZyopCkBAIC0xNjEsOCArMTYxLDggQEAgU3RyaW5nIEluc3BlY3Rv
ckRPTVN0b3JhZ2VBZ2VudDo6c3RvcmFnZUlkKFN0b3JhZ2UqIHN0b3JhZ2UpCiAgICAgYm9vbCBp
c0xvY2FsU3RvcmFnZSA9IChmcmFtZS0+ZG9tV2luZG93KCktPmxvY2FsU3RvcmFnZShlYykgPT0g
c3RvcmFnZSAmJiAhZWMpOwogICAgIERPTVN0b3JhZ2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGRv
bVN0b3JhZ2VFbmQgPSBtX3Jlc291cmNlcy5lbmQoKTsKICAgICBmb3IgKERPTVN0b3JhZ2VSZXNv
dXJjZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZG9tU3Rv
cmFnZUVuZDsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnNlY29uZC0+aXNTYW1lSG9zdEFuZFR5
cGUoZnJhbWUsIGlzTG9jYWxTdG9yYWdlKSkKLSAgICAgICAgICAgIHJldHVybiBpdC0+Zmlyc3Q7
CisgICAgICAgIGlmIChpdC0+dmFsdWUtPmlzU2FtZUhvc3RBbmRUeXBlKGZyYW1lLCBpc0xvY2Fs
U3RvcmFnZSkpCisgICAgICAgICAgICByZXR1cm4gaXQtPmtleTsKICAgICB9CiAgICAgcmV0dXJu
IFN0cmluZygpOwogfQpAQCAtMTcyLDE0ICsxNzIsMTQgQEAgSW5zcGVjdG9yRE9NU3RvcmFnZVJl
c291cmNlKiBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmdldERPTVN0b3JhZ2VSZXNvdXJjZUZv
ckkKICAgICBET01TdG9yYWdlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2Vz
LmZpbmQoc3RvcmFnZUlkKTsKICAgICBpZiAoaXQgPT0gbV9yZXNvdXJjZXMuZW5kKCkpCiAgICAg
ICAgIHJldHVybiAwOwotICAgIHJldHVybiBpdC0+c2Vjb25kLmdldCgpOworICAgIHJldHVybiBp
dC0+dmFsdWUuZ2V0KCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpkaWRV
c2VET01TdG9yYWdlKFN0b3JhZ2VBcmVhKiBzdG9yYWdlQXJlYSwgYm9vbCBpc0xvY2FsU3RvcmFn
ZSwgRnJhbWUqIGZyYW1lKQogewogICAgIERPTVN0b3JhZ2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9y
IGRvbVN0b3JhZ2VFbmQgPSBtX3Jlc291cmNlcy5lbmQoKTsKICAgICBmb3IgKERPTVN0b3JhZ2VS
ZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZG9t
U3RvcmFnZUVuZDsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnNlY29uZC0+aXNTYW1lSG9zdEFu
ZFR5cGUoZnJhbWUsIGlzTG9jYWxTdG9yYWdlKSkKKyAgICAgICAgaWYgKGl0LT52YWx1ZS0+aXNT
YW1lSG9zdEFuZFR5cGUoZnJhbWUsIGlzTG9jYWxTdG9yYWdlKSkKICAgICAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JEYXRhYmFzZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JE
YXRhYmFzZUFnZW50LmNwcAppbmRleCBlOGY1ZDRhZWMwNmZhYTI3NTE0MjI2ODAwYjE0NGU3M2Vm
Y2Q3OGZhLi5hNzljYzBhOTkyYTU4OWNhYjNkYTBjZDk2MDA0N2I2Njg1ZDhiZTUzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuY3Bw
CkBAIC0yNzUsNyArMjc1LDcgQEAgdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjplbmFibGUo
RXJyb3JTdHJpbmcqKQogCiAgICAgRGF0YWJhc2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGRhdGFi
YXNlc0VuZCA9IG1fcmVzb3VyY2VzLmVuZCgpOwogICAgIGZvciAoRGF0YWJhc2VSZXNvdXJjZXNN
YXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZGF0YWJhc2VzRW5k
OyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5iaW5kKG1fZnJvbnRlbmRQcm92aWRlci0+ZnJv
bnRlbmQoKSk7CisgICAgICAgIGl0LT52YWx1ZS0+YmluZChtX2Zyb250ZW5kUHJvdmlkZXItPmZy
b250ZW5kKCkpOwogfQogCiB2b2lkIEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmRpc2FibGUoRXJy
b3JTdHJpbmcqKQpAQCAtMzMzLDggKzMzMyw4IEBAIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VBZ2Vu
dDo6ZXhlY3V0ZVNRTChFcnJvclN0cmluZyogZXJyb3IsIGNvbnN0IFN0cmluZyYgZGF0YWJhCiBT
dHJpbmcgSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6ZGF0YWJhc2VJZChEYXRhYmFzZSogZGF0YWJh
c2UpCiB7CiAgICAgZm9yIChEYXRhYmFzZVJlc291cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBtX3Jl
c291cmNlcy5iZWdpbigpOyBpdCAhPSBtX3Jlc291cmNlcy5lbmQoKTsgKytpdCkgewotICAgICAg
ICBpZiAoaXQtPnNlY29uZC0+ZGF0YWJhc2UoKSA9PSBkYXRhYmFzZSkKLSAgICAgICAgICAgIHJl
dHVybiBpdC0+Zmlyc3Q7CisgICAgICAgIGlmIChpdC0+dmFsdWUtPmRhdGFiYXNlKCkgPT0gZGF0
YWJhc2UpCisgICAgICAgICAgICByZXR1cm4gaXQtPmtleTsKICAgICB9CiAgICAgcmV0dXJuIFN0
cmluZygpOwogfQpAQCAtMzQyLDggKzM0Miw4IEBAIFN0cmluZyBJbnNwZWN0b3JEYXRhYmFzZUFn
ZW50OjpkYXRhYmFzZUlkKERhdGFiYXNlKiBkYXRhYmFzZSkKIEluc3BlY3RvckRhdGFiYXNlUmVz
b3VyY2UqIEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmZpbmRCeUZpbGVOYW1lKGNvbnN0IFN0cmlu
ZyYgZmlsZU5hbWUpCiB7CiAgICAgZm9yIChEYXRhYmFzZVJlc291cmNlc01hcDo6aXRlcmF0b3Ig
aXQgPSBtX3Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSBtX3Jlc291cmNlcy5lbmQoKTsgKytpdCkg
ewotICAgICAgICBpZiAoaXQtPnNlY29uZC0+ZGF0YWJhc2UoKS0+ZmlsZU5hbWUoKSA9PSBmaWxl
TmFtZSkKLSAgICAgICAgICAgIHJldHVybiBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICBpZiAo
aXQtPnZhbHVlLT5kYXRhYmFzZSgpLT5maWxlTmFtZSgpID09IGZpbGVOYW1lKQorICAgICAgICAg
ICAgcmV0dXJuIGl0LT52YWx1ZS5nZXQoKTsKICAgICB9CiAgICAgcmV0dXJuIDA7CiB9CkBAIC0z
NTMsNyArMzUzLDcgQEAgRGF0YWJhc2UqIEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmRhdGFiYXNl
Rm9ySWQoY29uc3QgU3RyaW5nJiBkYXRhYmFzZUlkKQogICAgIERhdGFiYXNlUmVzb3VyY2VzTWFw
OjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmZpbmQoZGF0YWJhc2VJZCk7CiAgICAgaWYgKGl0
ID09IG1fcmVzb3VyY2VzLmVuZCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gaXQt
PnNlY29uZC0+ZGF0YWJhc2UoKTsKKyAgICByZXR1cm4gaXQtPnZhbHVlLT5kYXRhYmFzZSgpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAKaW5kZXggZGFiZGFhYTRiZDBlODM3Yjg5
ODJjYjJjMmQ1MDkwYzkyYTk1MDFjNy4uZDgxZTJjZjI1NzQ2OGIzYzUyYzk1ZWM5ZTQ0MmZhMDQ3
YTUzNTVlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRl
YnVnZ2VyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50LmNwcApAQCAtMjQwLDkgKzI0MCw5IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudDo6c2V0QnJlYWtwb2ludEJ5VXJsKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgaW50
IGxpCiAKICAgICBTY3JpcHRCcmVha3BvaW50IGJyZWFrcG9pbnQobGluZU51bWJlciwgY29sdW1u
TnVtYmVyLCBjb25kaXRpb24pOwogICAgIGZvciAoU2NyaXB0c01hcDo6aXRlcmF0b3IgaXQgPSBt
X3NjcmlwdHMuYmVnaW4oKTsgaXQgIT0gbV9zY3JpcHRzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAg
IGlmICghbWF0Y2hlcyhpdC0+c2Vjb25kLnVybCwgdXJsLCBpc1JlZ2V4KSkKKyAgICAgICAgaWYg
KCFtYXRjaGVzKGl0LT52YWx1ZS51cmwsIHVybCwgaXNSZWdleCkpCiAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRpb24+IGxv
Y2F0aW9uID0gcmVzb2x2ZUJyZWFrcG9pbnQoYnJlYWtwb2ludElkLCBpdC0+Zmlyc3QsIGJyZWFr
cG9pbnQpOworICAgICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj4g
bG9jYXRpb24gPSByZXNvbHZlQnJlYWtwb2ludChicmVha3BvaW50SWQsIGl0LT5rZXksIGJyZWFr
cG9pbnQpOwogICAgICAgICBpZiAobG9jYXRpb24pCiAgICAgICAgICAgICBsb2NhdGlvbnMtPmFk
ZEl0ZW0obG9jYXRpb24pOwogICAgIH0KQEAgLTI5Miw4ICsyOTIsOCBAQCB2b2lkIEluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQ6OnJlbW92ZUJyZWFrcG9pbnQoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJp
bmcmIGJyZWFrcAogICAgIEJyZWFrcG9pbnRJZFRvRGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzTWFw
OjppdGVyYXRvciBkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNJdGVyYXRvciA9IG1fYnJlYWtwb2lu
dElkVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHMuZmluZChicmVha3BvaW50SWQpOwogICAgIGlm
IChkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNJdGVyYXRvciA9PSBtX2JyZWFrcG9pbnRJZFRvRGVi
dWdTZXJ2ZXJCcmVha3BvaW50SWRzLmVuZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNJdGVyYXRvci0+c2Vjb25k
LnNpemUoKTsgKytpKQotICAgICAgICBzY3JpcHREZWJ1Z1NlcnZlcigpLnJlbW92ZUJyZWFrcG9p
bnQoZGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzSXRlcmF0b3ItPnNlY29uZFtpXSk7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNJdGVyYXRvci0+dmFs
dWUuc2l6ZSgpOyArK2kpCisgICAgICAgIHNjcmlwdERlYnVnU2VydmVyKCkucmVtb3ZlQnJlYWtw
b2ludChkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNJdGVyYXRvci0+dmFsdWVbaV0pOwogICAgIG1f
YnJlYWtwb2ludElkVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHMucmVtb3ZlKGRlYnVnU2VydmVy
QnJlYWtwb2ludElkc0l0ZXJhdG9yKTsKIH0KIApAQCAtMzIxLDcgKzMyMSw3IEBAIFBhc3NSZWZQ
dHI8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj4gSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dDo6cmVzb2x2ZUJyZWFrCiAgICAgU2NyaXB0c01hcDo6aXRlcmF0b3Igc2NyaXB0SXRlcmF0b3Ig
PSBtX3NjcmlwdHMuZmluZChzY3JpcHRJZCk7CiAgICAgaWYgKHNjcmlwdEl0ZXJhdG9yID09IG1f
c2NyaXB0cy5lbmQoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgU2NyaXB0JiBzY3JpcHQgPSBz
Y3JpcHRJdGVyYXRvci0+c2Vjb25kOworICAgIFNjcmlwdCYgc2NyaXB0ID0gc2NyaXB0SXRlcmF0
b3ItPnZhbHVlOwogICAgIGlmIChicmVha3BvaW50LmxpbmVOdW1iZXIgPCBzY3JpcHQuc3RhcnRM
aW5lIHx8IHNjcmlwdC5lbmRMaW5lIDwgYnJlYWtwb2ludC5saW5lTnVtYmVyKQogICAgICAgICBy
ZXR1cm4gMDsKIApAQCAtMzM0LDcgKzMzNCw3IEBAIFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRl
YnVnZ2VyOjpMb2NhdGlvbj4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6cmVzb2x2ZUJyZWFrCiAg
ICAgQnJlYWtwb2ludElkVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNNYXA6Oml0ZXJhdG9yIGRl
YnVnU2VydmVyQnJlYWtwb2ludElkc0l0ZXJhdG9yID0gbV9icmVha3BvaW50SWRUb0RlYnVnU2Vy
dmVyQnJlYWtwb2ludElkcy5maW5kKGJyZWFrcG9pbnRJZCk7CiAgICAgaWYgKGRlYnVnU2VydmVy
QnJlYWtwb2ludElkc0l0ZXJhdG9yID09IG1fYnJlYWtwb2ludElkVG9EZWJ1Z1NlcnZlckJyZWFr
cG9pbnRJZHMuZW5kKCkpCiAgICAgICAgIGRlYnVnU2VydmVyQnJlYWtwb2ludElkc0l0ZXJhdG9y
ID0gbV9icmVha3BvaW50SWRUb0RlYnVnU2VydmVyQnJlYWtwb2ludElkcy5zZXQoYnJlYWtwb2lu
dElkLCBWZWN0b3I8U3RyaW5nPigpKS5pdGVyYXRvcjsKLSAgICBkZWJ1Z1NlcnZlckJyZWFrcG9p
bnRJZHNJdGVyYXRvci0+c2Vjb25kLmFwcGVuZChkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZCk7Cisg
ICAgZGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzSXRlcmF0b3ItPnZhbHVlLmFwcGVuZChkZWJ1Z1Nl
cnZlckJyZWFrcG9pbnRJZCk7CiAKICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpM
b2NhdGlvbj4gbG9jYXRpb24gPSBUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uOjpjcmVh
dGUoKQogICAgICAgICAuc2V0U2NyaXB0SWQoc2NyaXB0SWQpCkBAIC0zNjAsNyArMzYwLDcgQEAg
dm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZWFyY2hJbkNvbnRlbnQoRXJyb3JTdHJpbmcq
IGVycm9yLCBjb25zdCBTdHJpbmcmIHMKIAogICAgIFNjcmlwdHNNYXA6Oml0ZXJhdG9yIGl0ID0g
bV9zY3JpcHRzLmZpbmQoc2NyaXB0SWQpOwogICAgIGlmIChpdCAhPSBtX3NjcmlwdHMuZW5kKCkp
Ci0gICAgICAgIHJlc3VsdHMgPSBDb250ZW50U2VhcmNoVXRpbHM6OnNlYXJjaEluVGV4dEJ5TGlu
ZXMoaXQtPnNlY29uZC5zb3VyY2UsIHF1ZXJ5LCBjYXNlU2Vuc2l0aXZlLCBpc1JlZ2V4KTsKKyAg
ICAgICAgcmVzdWx0cyA9IENvbnRlbnRTZWFyY2hVdGlsczo6c2VhcmNoSW5UZXh0QnlMaW5lcyhp
dC0+dmFsdWUuc291cmNlLCBxdWVyeSwgY2FzZVNlbnNpdGl2ZSwgaXNSZWdleCk7CiAgICAgZWxz
ZQogICAgICAgICAqZXJyb3IgPSAiTm8gc2NyaXB0IGZvciBpZDogIiArIHNjcmlwdElkOwogfQpA
QCAtMzgxLDcgKzM4MSw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Z2V0U2NyaXB0
U291cmNlKEVycm9yU3RyaW5nKiBlcnJvciwgY29uc3QgU3RyaW5nJiBzCiB7CiAgICAgU2NyaXB0
c01hcDo6aXRlcmF0b3IgaXQgPSBtX3NjcmlwdHMuZmluZChzY3JpcHRJZCk7CiAgICAgaWYgKGl0
ICE9IG1fc2NyaXB0cy5lbmQoKSkKLSAgICAgICAgKnNjcmlwdFNvdXJjZSA9IGl0LT5zZWNvbmQu
c291cmNlOworICAgICAgICAqc2NyaXB0U291cmNlID0gaXQtPnZhbHVlLnNvdXJjZTsKICAgICBl
bHNlCiAgICAgICAgICplcnJvciA9ICJObyBzY3JpcHQgZm9yIGlkOiAiICsgc2NyaXB0SWQ7CiB9
CkBAIC01NTAsNyArNTUwLDcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRQYXJz
ZVNvdXJjZShjb25zdCBTdHJpbmcmIHNjcmlwdElkLCBjb25zdCBTY3JpcHQKIAogICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGJyZWFrcG9pbnRzQ29va2llID0gbV9zdGF0ZS0+Z2V0T2JqZWN0
KERlYnVnZ2VyQWdlbnRTdGF0ZTo6amF2YVNjcmlwdEJyZWFrcG9pbnRzKTsKICAgICBmb3IgKElu
c3BlY3Rvck9iamVjdDo6aXRlcmF0b3IgaXQgPSBicmVha3BvaW50c0Nvb2tpZS0+YmVnaW4oKTsg
aXQgIT0gYnJlYWtwb2ludHNDb29raWUtPmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IGJyZWFrcG9pbnRPYmplY3QgPSBpdC0+c2Vjb25kLT5hc09iamVjdCgp
OworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBicmVha3BvaW50T2JqZWN0ID0gaXQt
PnZhbHVlLT5hc09iamVjdCgpOwogICAgICAgICBib29sIGlzUmVnZXg7CiAgICAgICAgIGJyZWFr
cG9pbnRPYmplY3QtPmdldEJvb2xlYW4oImlzUmVnZXgiLCAmaXNSZWdleCk7CiAgICAgICAgIFN0
cmluZyB1cmw7CkBAIC01NjEsOSArNTYxLDkgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpkaWRQYXJzZVNvdXJjZShjb25zdCBTdHJpbmcmIHNjcmlwdElkLCBjb25zdCBTY3JpcHQKICAg
ICAgICAgYnJlYWtwb2ludE9iamVjdC0+Z2V0TnVtYmVyKCJsaW5lTnVtYmVyIiwgJmJyZWFrcG9p
bnQubGluZU51bWJlcik7CiAgICAgICAgIGJyZWFrcG9pbnRPYmplY3QtPmdldE51bWJlcigiY29s
dW1uTnVtYmVyIiwgJmJyZWFrcG9pbnQuY29sdW1uTnVtYmVyKTsKICAgICAgICAgYnJlYWtwb2lu
dE9iamVjdC0+Z2V0U3RyaW5nKCJjb25kaXRpb24iLCAmYnJlYWtwb2ludC5jb25kaXRpb24pOwot
ICAgICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj4gbG9jYXRpb24g
PSByZXNvbHZlQnJlYWtwb2ludChpdC0+Zmlyc3QsIHNjcmlwdElkLCBicmVha3BvaW50KTsKKyAg
ICAgICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRpb24+IGxvY2F0aW9uID0g
cmVzb2x2ZUJyZWFrcG9pbnQoaXQtPmtleSwgc2NyaXB0SWQsIGJyZWFrcG9pbnQpOwogICAgICAg
ICBpZiAobG9jYXRpb24pCi0gICAgICAgICAgICBtX2Zyb250ZW5kLT5icmVha3BvaW50UmVzb2x2
ZWQoaXQtPmZpcnN0LCBsb2NhdGlvbik7CisgICAgICAgICAgICBtX2Zyb250ZW5kLT5icmVha3Bv
aW50UmVzb2x2ZWQoaXQtPmtleSwgbG9jYXRpb24pOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck1lbW9yeUFnZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JNZW1vcnlBZ2VudC5jcHAKaW5kZXggMGNhZDQ5
YWExNDg2MzMwMmFmZWM3NzJjNjhjZjU3MzZiMThlYWU0ZC4uODZkY2IyYjgwZjA1MTY0N2I0MzJk
MGRlODcyNTZmZjliNTFmYWZiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3Rvck1lbW9yeUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yTWVtb3J5QWdlbnQuY3BwCkBAIC0xMjAsOCArMTIwLDggQEAgcHVibGljOgogICAg
IHsKICAgICAgICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6TWVtb3J5
OjpOb2RlQ291bnQ+ID4gY2hpbGRyZW5TdGF0cyA9IFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVp
bGRlcjo6TWVtb3J5OjpOb2RlQ291bnQ+OjpjcmVhdGUoKTsKICAgICAgICAgZm9yIChIYXNoTWFw
PFN0cmluZywgaW50Pjo6aXRlcmF0b3IgaXQgPSBtX25vZGVOYW1lVG9Db3VudC5iZWdpbigpOyBp
dCAhPSBtX25vZGVOYW1lVG9Db3VudC5lbmQoKTsgKytpdCkgewotICAgICAgICAgICAgUmVmUHRy
PE5vZGVDb3VudD4gbm9kZUNvdW50ID0gTm9kZUNvdW50OjpjcmVhdGUoKS5zZXROb2RlTmFtZShp
dC0+Zmlyc3QpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLnNldENvdW50KGl0LT5zZWNvbmQpOworICAgICAgICAgICAgUmVmUHRy
PE5vZGVDb3VudD4gbm9kZUNvdW50ID0gTm9kZUNvdW50OjpjcmVhdGUoKS5zZXROb2RlTmFtZShp
dC0+a2V5KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC5zZXRDb3VudChpdC0+dmFsdWUpOwogICAgICAgICAgICAgY2hpbGRyZW5T
dGF0cy0+YWRkSXRlbShub2RlQ291bnQpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBjaGls
ZHJlblN0YXRzLnJlbGVhc2UoKTsKQEAgLTEzMSw4ICsxMzEsOCBAQCBwdWJsaWM6CiAgICAgewog
ICAgICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpNZW1vcnk6Okxp
c3RlbmVyQ291bnQ+ID4gbGlzdGVuZXJTdGF0cyA9IFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVp
bGRlcjo6TWVtb3J5OjpMaXN0ZW5lckNvdW50Pjo6Y3JlYXRlKCk7CiAgICAgICAgIGZvciAoSGFz
aE1hcDxBdG9taWNTdHJpbmcsIGludD46Oml0ZXJhdG9yIGl0ID0gbV9ldmVudFR5cGVUb0NvdW50
LmJlZ2luKCk7IGl0ICE9IG1fZXZlbnRUeXBlVG9Db3VudC5lbmQoKTsgKytpdCkgewotICAgICAg
ICAgICAgUmVmUHRyPExpc3RlbmVyQ291bnQ+IGxpc3RlbmVyQ291bnQgPSBMaXN0ZW5lckNvdW50
OjpjcmVhdGUoKS5zZXRUeXBlKGl0LT5maXJzdCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0Q291bnQo
aXQtPnNlY29uZCk7CisgICAgICAgICAgICBSZWZQdHI8TGlzdGVuZXJDb3VudD4gbGlzdGVuZXJD
b3VudCA9IExpc3RlbmVyQ291bnQ6OmNyZWF0ZSgpLnNldFR5cGUoaXQtPmtleSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAuc2V0Q291bnQoaXQtPnZhbHVlKTsKICAgICAgICAgICAgIGxpc3RlbmVyU3RhdHMt
PmFkZEl0ZW0obGlzdGVuZXJDb3VudCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGxpc3Rl
bmVyU3RhdHMucmVsZWFzZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvclBhZ2VBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yUGFnZUFnZW50LmNwcAppbmRleCAwZTc2ZDZmNTI4MTU1NDAwNTdmMjNhNmFjODFlYzdhOWY3
OWJiMzU5Li4yNTg1OTJjMTU5YThmYjdiMjhlZDBkY2RjYWNlMzQzYzUyNWI3Mzg1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcApAQCAtNDM0
LDcgKzQzNCw3IEBAIHN0YXRpYyBWZWN0b3I8Q2FjaGVkUmVzb3VyY2UqPiBjYWNoZWRSZXNvdXJj
ZXNGb3JGcmFtZShGcmFtZSogZnJhbWUpCiAgICAgY29uc3QgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6
OkRvY3VtZW50UmVzb3VyY2VNYXAmIGFsbFJlc291cmNlcyA9IGZyYW1lLT5kb2N1bWVudCgpLT5j
YWNoZWRSZXNvdXJjZUxvYWRlcigpLT5hbGxDYWNoZWRSZXNvdXJjZXMoKTsKICAgICBDYWNoZWRS
ZXNvdXJjZUxvYWRlcjo6RG9jdW1lbnRSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
YWxsUmVzb3VyY2VzLmVuZCgpOwogICAgIGZvciAoQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OkRvY3Vt
ZW50UmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYWxsUmVzb3VyY2VzLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3Vy
Y2UgPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICBDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVz
b3VyY2UgPSBpdC0+dmFsdWUuZ2V0KCk7CiAKICAgICAgICAgc3dpdGNoIChjYWNoZWRSZXNvdXJj
ZS0+dHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3VyY2U6
CkBAIC03MDQsNyArNzA0LDcgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRpZENsZWFyV2lu
ZG93T2JqZWN0SW5Xb3JsZChGcmFtZSogZnJhbWUsIERPTVdyYXBwZXJXb3IKICAgICAgICAgSW5z
cGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBzY3JpcHRzLT5lbmQoKTsKICAgICAg
ICAgZm9yIChJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gc2NyaXB0cy0+YmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBTdHJpbmcgc2NyaXB0VGV4dDsK
LSAgICAgICAgICAgIGlmIChpdC0+c2Vjb25kLT5hc1N0cmluZygmc2NyaXB0VGV4dCkpCisgICAg
ICAgICAgICBpZiAoaXQtPnZhbHVlLT5hc1N0cmluZygmc2NyaXB0VGV4dCkpCiAgICAgICAgICAg
ICAgICAgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXItPmluamVjdFNjcmlwdChzY3JpcHRUZXh0LCBt
YWluV29ybGRTY3JpcHRTdGF0ZShmcmFtZSkpOwogICAgICAgICB9CiAgICAgfQpAQCAtNzM2LDgg
KzczNiw4IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpmcmFtZURldGFjaGVkKEZyYW1lKiBm
cmFtZSkKIHsKICAgICBIYXNoTWFwPEZyYW1lKiwgU3RyaW5nPjo6aXRlcmF0b3IgaXRlcmF0b3Ig
PSBtX2ZyYW1lVG9JZGVudGlmaWVyLmZpbmQoZnJhbWUpOwogICAgIGlmIChpdGVyYXRvciAhPSBt
X2ZyYW1lVG9JZGVudGlmaWVyLmVuZCgpKSB7Ci0gICAgICAgIG1fZnJvbnRlbmQtPmZyYW1lRGV0
YWNoZWQoaXRlcmF0b3ItPnNlY29uZCk7Ci0gICAgICAgIG1faWRlbnRpZmllclRvRnJhbWUucmVt
b3ZlKGl0ZXJhdG9yLT5zZWNvbmQpOworICAgICAgICBtX2Zyb250ZW5kLT5mcmFtZURldGFjaGVk
KGl0ZXJhdG9yLT52YWx1ZSk7CisgICAgICAgIG1faWRlbnRpZmllclRvRnJhbWUucmVtb3ZlKGl0
ZXJhdG9yLT52YWx1ZSk7CiAgICAgICAgIG1fZnJhbWVUb0lkZW50aWZpZXIucmVtb3ZlKGl0ZXJh
dG9yKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yUHJvZmlsZXJBZ2VudC5jcHAKaW5kZXggM2Y3NzI4OWQyMDM5YjdjMzU4NmIzMzhkN2Y4NDk5
YTk1MzBjYTU3Zi4uNWZmMDdmNDg0NWM4NDYwMmQ1MThiOTlkNGJhYzI0OWIzNGExMjczNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50
LmNwcApAQCAtMjQ3LDEwICsyNDcsMTAgQEAgdm9pZCBJbnNwZWN0b3JQcm9maWxlckFnZW50Ojpn
ZXRQcm9maWxlSGVhZGVycyhFcnJvclN0cmluZyosIFJlZlB0cjxUeXBlQnVpbGRlcjoKIAogICAg
IFByb2ZpbGVzTWFwOjppdGVyYXRvciBwcm9maWxlc0VuZCA9IG1fcHJvZmlsZXMuZW5kKCk7CiAg
ICAgZm9yIChQcm9maWxlc01hcDo6aXRlcmF0b3IgaXQgPSBtX3Byb2ZpbGVzLmJlZ2luKCk7IGl0
ICE9IHByb2ZpbGVzRW5kOyArK2l0KQotICAgICAgICBoZWFkZXJzLT5hZGRJdGVtKGNyZWF0ZVBy
b2ZpbGVIZWFkZXIoKml0LT5zZWNvbmQpKTsKKyAgICAgICAgaGVhZGVycy0+YWRkSXRlbShjcmVh
dGVQcm9maWxlSGVhZGVyKCppdC0+dmFsdWUpKTsKICAgICBIZWFwU25hcHNob3RzTWFwOjppdGVy
YXRvciBzbmFwc2hvdHNFbmQgPSBtX3NuYXBzaG90cy5lbmQoKTsKICAgICBmb3IgKEhlYXBTbmFw
c2hvdHNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zbmFwc2hvdHMuYmVnaW4oKTsgaXQgIT0gc25hcHNo
b3RzRW5kOyArK2l0KQotICAgICAgICBoZWFkZXJzLT5hZGRJdGVtKGNyZWF0ZVNuYXBzaG90SGVh
ZGVyKCppdC0+c2Vjb25kKSk7CisgICAgICAgIGhlYWRlcnMtPmFkZEl0ZW0oY3JlYXRlU25hcHNo
b3RIZWFkZXIoKml0LT52YWx1ZSkpOwogfQogCiBuYW1lc3BhY2UgewpAQCAtMjc0LDE1ICsyNzQs
MTUgQEAgdm9pZCBJbnNwZWN0b3JQcm9maWxlckFnZW50OjpnZXRQcm9maWxlKEVycm9yU3RyaW5n
KiwgY29uc3QgU3RyaW5nJiB0eXBlLCBpbnQgcmEKICAgICBpZiAodHlwZSA9PSBDUFVQcm9maWxl
VHlwZSkgewogICAgICAgICBQcm9maWxlc01hcDo6aXRlcmF0b3IgaXQgPSBtX3Byb2ZpbGVzLmZp
bmQodWlkKTsKICAgICAgICAgaWYgKGl0ICE9IG1fcHJvZmlsZXMuZW5kKCkpIHsKLSAgICAgICAg
ICAgIHByb2ZpbGVPYmplY3QgPSBjcmVhdGVQcm9maWxlSGVhZGVyKCppdC0+c2Vjb25kKTsKLSAg
ICAgICAgICAgIHByb2ZpbGVPYmplY3QtPnNldE9iamVjdCgiaGVhZCIsIGl0LT5zZWNvbmQtPmJ1
aWxkSW5zcGVjdG9yT2JqZWN0Rm9ySGVhZCgpKTsKLSAgICAgICAgICAgIGlmIChpdC0+c2Vjb25k
LT5ib3R0b21VcEhlYWQoKSkKLSAgICAgICAgICAgICAgICBwcm9maWxlT2JqZWN0LT5zZXRPYmpl
Y3QoImJvdHRvbVVwSGVhZCIsIGl0LT5zZWNvbmQtPmJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9yQm90
dG9tVXBIZWFkKCkpOworICAgICAgICAgICAgcHJvZmlsZU9iamVjdCA9IGNyZWF0ZVByb2ZpbGVI
ZWFkZXIoKml0LT52YWx1ZSk7CisgICAgICAgICAgICBwcm9maWxlT2JqZWN0LT5zZXRPYmplY3Qo
ImhlYWQiLCBpdC0+dmFsdWUtPmJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9ySGVhZCgpKTsKKyAgICAg
ICAgICAgIGlmIChpdC0+dmFsdWUtPmJvdHRvbVVwSGVhZCgpKQorICAgICAgICAgICAgICAgIHBy
b2ZpbGVPYmplY3QtPnNldE9iamVjdCgiYm90dG9tVXBIZWFkIiwgaXQtPnZhbHVlLT5idWlsZElu
c3BlY3Rvck9iamVjdEZvckJvdHRvbVVwSGVhZCgpKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBp
ZiAodHlwZSA9PSBIZWFwUHJvZmlsZVR5cGUpIHsKICAgICAgICAgSGVhcFNuYXBzaG90c01hcDo6
aXRlcmF0b3IgaXQgPSBtX3NuYXBzaG90cy5maW5kKHVpZCk7CiAgICAgICAgIGlmIChpdCAhPSBt
X3NuYXBzaG90cy5lbmQoKSkgewotICAgICAgICAgICAgUmVmUHRyPFNjcmlwdEhlYXBTbmFwc2hv
dD4gc25hcHNob3QgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgUmVmUHRyPFNjcmlwdEhlYXBT
bmFwc2hvdD4gc25hcHNob3QgPSBpdC0+dmFsdWU7CiAgICAgICAgICAgICBwcm9maWxlT2JqZWN0
ID0gY3JlYXRlU25hcHNob3RIZWFkZXIoKnNuYXBzaG90KTsKICAgICAgICAgICAgIGlmIChtX2Zy
b250ZW5kKSB7CiAgICAgICAgICAgICAgICAgT3V0cHV0U3RyZWFtIHN0cmVhbShtX2Zyb250ZW5k
LCB1aWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJl
c291cmNlQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291
cmNlQWdlbnQuY3BwCmluZGV4IDg5MWQyMWU0MDY0ZmRhNDFhMTY1MjkyZGZiYjhmMWMzYjcwYTBh
MGIuLjQ5YzU4NWNmODQ1NTRiM2I1MTQzMzdiNTE1MTA2ZTdlM2EwM2YxNmYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5jcHAKQEAg
LTEwMCw3ICsxMDAsNyBAQCBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxk
T2JqZWN0Rm9ySGVhZGVycyhjb25zdCBIVFRQSGVhZGVyTWFwJiBoZQogICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IGhlYWRlcnNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGhlYWRlcnMuZW5kKCk7CiAg
ICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGhlYWRlcnMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBoZWFkZXJzT2JqZWN0LT5zZXRTdHJpbmcoaXQt
PmZpcnN0LnN0cmluZygpLCBpdC0+c2Vjb25kKTsKKyAgICAgICAgaGVhZGVyc09iamVjdC0+c2V0
U3RyaW5nKGl0LT5rZXkuc3RyaW5nKCksIGl0LT52YWx1ZSk7CiAgICAgcmV0dXJuIGhlYWRlcnNP
YmplY3Q7CiB9CiAKQEAgLTIxMCw4ICsyMTAsOCBAQCB2b2lkIEluc3BlY3RvclJlc291cmNlQWdl
bnQ6OndpbGxTZW5kUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIERvY3VtZW50TAog
ICAgICAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGhlYWRlcnMtPmVu
ZCgpOwogICAgICAgICBmb3IgKEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBo
ZWFkZXJzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIFN0cmluZyB2
YWx1ZTsKLSAgICAgICAgICAgIGlmIChpdC0+c2Vjb25kLT5hc1N0cmluZygmdmFsdWUpKQotICAg
ICAgICAgICAgICAgIHJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKGl0LT5maXJzdCwgdmFsdWUp
OworICAgICAgICAgICAgaWYgKGl0LT52YWx1ZS0+YXNTdHJpbmcoJnZhbHVlKSkKKyAgICAgICAg
ICAgICAgICByZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZChpdC0+a2V5LCB2YWx1ZSk7CiAgICAg
ICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JTdGF0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUu
Y3BwCmluZGV4IDdlMDJlYjdhMjFiZWRmMTc0N2Y4Zjg3OGE0NzgwN2NiODA5ZDU3ZTQuLmY0OGFj
YmE2MzY5OTk2Y2Q5MTZkM2ZlNTJkYzNhZTdhZjZlZWQwMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmNwcApAQCAtODAsNyArODAsNyBAQCBib29sIEluc3Bl
Y3RvclN0YXRlOjpnZXRCb29sZWFuKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKQogICAgIElu
c3BlY3Rvck9iamVjdDo6aXRlcmF0b3IgaXQgPSBtX3Byb3BlcnRpZXMtPmZpbmQocHJvcGVydHlO
YW1lKTsKICAgICBib29sIHZhbHVlID0gZmFsc2U7CiAgICAgaWYgKGl0ICE9IG1fcHJvcGVydGll
cy0+ZW5kKCkpCi0gICAgICAgIGl0LT5zZWNvbmQtPmFzQm9vbGVhbigmdmFsdWUpOworICAgICAg
ICBpdC0+dmFsdWUtPmFzQm9vbGVhbigmdmFsdWUpOwogICAgIHJldHVybiB2YWx1ZTsKIH0KIApA
QCAtODksNyArODksNyBAQCBTdHJpbmcgSW5zcGVjdG9yU3RhdGU6OmdldFN0cmluZyhjb25zdCBT
dHJpbmcmIHByb3BlcnR5TmFtZSkKICAgICBJbnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9yIGl0ID0g
bV9wcm9wZXJ0aWVzLT5maW5kKHByb3BlcnR5TmFtZSk7CiAgICAgU3RyaW5nIHZhbHVlOwogICAg
IGlmIChpdCAhPSBtX3Byb3BlcnRpZXMtPmVuZCgpKQotICAgICAgICBpdC0+c2Vjb25kLT5hc1N0
cmluZygmdmFsdWUpOworICAgICAgICBpdC0+dmFsdWUtPmFzU3RyaW5nKCZ2YWx1ZSk7CiAgICAg
cmV0dXJuIHZhbHVlOwogfQogCkBAIC05OCw3ICs5OCw3IEBAIGxvbmcgSW5zcGVjdG9yU3RhdGU6
OmdldExvbmcoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCiAgICAgSW5zcGVjdG9yT2JqZWN0
OjppdGVyYXRvciBpdCA9IG1fcHJvcGVydGllcy0+ZmluZChwcm9wZXJ0eU5hbWUpOwogICAgIGxv
bmcgdmFsdWUgPSAwOwogICAgIGlmIChpdCAhPSBtX3Byb3BlcnRpZXMtPmVuZCgpKQotICAgICAg
ICBpdC0+c2Vjb25kLT5hc051bWJlcigmdmFsdWUpOworICAgICAgICBpdC0+dmFsdWUtPmFzTnVt
YmVyKCZ2YWx1ZSk7CiAgICAgcmV0dXJuIHZhbHVlOwogfQogCkBAIC0xMDcsNyArMTA3LDcgQEAg
ZG91YmxlIEluc3BlY3RvclN0YXRlOjpnZXREb3VibGUoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5h
bWUpCiAgICAgSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciBpdCA9IG1fcHJvcGVydGllcy0+Zmlu
ZChwcm9wZXJ0eU5hbWUpOwogICAgIGRvdWJsZSB2YWx1ZSA9IDA7CiAgICAgaWYgKGl0ICE9IG1f
cHJvcGVydGllcy0+ZW5kKCkpCi0gICAgICAgIGl0LT5zZWNvbmQtPmFzTnVtYmVyKCZ2YWx1ZSk7
CisgICAgICAgIGl0LT52YWx1ZS0+YXNOdW1iZXIoJnZhbHVlKTsKICAgICByZXR1cm4gdmFsdWU7
CiB9CiAKQEAgLTExOCw3ICsxMTgsNyBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5z
cGVjdG9yU3RhdGU6OmdldE9iamVjdChjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZQogICAgICAg
ICBtX3Byb3BlcnRpZXMtPnNldE9iamVjdChwcm9wZXJ0eU5hbWUsIEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCkpOwogICAgICAgICBpdCA9IG1fcHJvcGVydGllcy0+ZmluZChwcm9wZXJ0eU5hbWUp
OwogICAgIH0KLSAgICByZXR1cm4gaXQtPnNlY29uZC0+YXNPYmplY3QoKTsKKyAgICByZXR1cm4g
aXQtPnZhbHVlLT5hc09iamVjdCgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKaW5kZXgg
NGNmNTUzOGZlMTY1Y2YzODNkZmY2MTg3MWE2NDQwYTdiNjFjMjY1ZS4uNWI3ZGU0ZDhlYjc3MGQx
ZmYyNWM1Y2EzMzM4MmJiOTc1NmVkY2Q5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcApAQCAtNTEwLDcgKzUxMCw3IEBAIFBhc3NSZWZQ
dHI8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTU3R5bGU+IEluc3BlY3RvclN0eWxlOjpzdHlsZVdpdGhQ
cm9wZXJ0aWVzKCkgY29uCiAgICAgICAgICAgICAgICAgICAgICAgICBzaG91bGRJbmFjdGl2YXRl
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIHByZXZpb3VzUGFyc2VkT2s7Ci0gICAgICAgICAgICAgICAgICAgICAgICBib29s
IHN1Y2Nlc3MgPSBhY3RpdmVJdC0+c2Vjb25kLT5nZXRCb29sZWFuKFR5cGVCdWlsZGVyOjpDU1M6
OkNTU1Byb3BlcnR5OjpQYXJzZWRPaywgJnByZXZpb3VzUGFyc2VkT2spOworICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gYWN0aXZlSXQtPnZhbHVlLT5nZXRCb29sZWFuKFR5
cGVCdWlsZGVyOjpDU1M6OkNTU1Byb3BlcnR5OjpQYXJzZWRPaywgJnByZXZpb3VzUGFyc2VkT2sp
OwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgIXByZXZpb3VzUGFyc2Vk
T2spCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkSW5hY3RpdmF0ZSA9IHRydWU7
CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTUxOCw4ICs1MTgsOCBAQCBQYXNzUmVmUHRyPFR5
cGVCdWlsZGVyOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JTdHlsZTo6c3R5bGVXaXRoUHJvcGVy
dGllcygpIGNvbgogICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVUb1ByZXZpb3VzQWN0
aXZlUHJvcGVydHkuc2V0KGNhbm9uaWNhbFByb3BlcnR5TmFtZSwgcHJvcGVydHkpOwogCiAgICAg
ICAgICAgICAgICAgaWYgKHNob3VsZEluYWN0aXZhdGUpIHsKLSAgICAgICAgICAgICAgICAgICAg
YWN0aXZlSXQtPnNlY29uZC0+c2V0U3RhdHVzKFR5cGVCdWlsZGVyOjpDU1M6OkNTU1Byb3BlcnR5
OjpTdGF0dXM6OkluYWN0aXZlKTsKLSAgICAgICAgICAgICAgICAgICAgYWN0aXZlSXQtPnNlY29u
ZC0+cmVtb3ZlKFR5cGVCdWlsZGVyOjpDU1M6OkNTU1Byb3BlcnR5OjpTaG9ydGhhbmROYW1lKTsK
KyAgICAgICAgICAgICAgICAgICAgYWN0aXZlSXQtPnZhbHVlLT5zZXRTdGF0dXMoVHlwZUJ1aWxk
ZXI6OkNTUzo6Q1NTUHJvcGVydHk6OlN0YXR1czo6SW5hY3RpdmUpOworICAgICAgICAgICAgICAg
ICAgICBhY3RpdmVJdC0+dmFsdWUtPnJlbW92ZShUeXBlQnVpbGRlcjo6Q1NTOjpDU1NQcm9wZXJ0
eTo6U2hvcnRoYW5kTmFtZSk7CiAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZVRvUHJl
dmlvdXNBY3RpdmVQcm9wZXJ0eS5zZXQoY2Fub25pY2FsUHJvcGVydHlOYW1lLCBwcm9wZXJ0eSk7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTEwMTUsNyArMTAx
NSw3IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yU3R5bGU+IEluc3BlY3RvclN0eWxlU2hlZXQ6Omlu
c3BlY3RvclN0eWxlRm9ySWQoY29uc3QgSW5zcGVjCiAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JT
dHlsZT4gaW5zcGVjdG9yU3R5bGUgPSBJbnNwZWN0b3JTdHlsZTo6Y3JlYXRlKGlkLCBzdHlsZSwg
dGhpcyk7CiAgICAgICAgIHJldHVybiBpbnNwZWN0b3JTdHlsZS5yZWxlYXNlKCk7CiAgICAgfQot
ICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgIHJldHVybiBpdC0+dmFsdWU7CiB9CiAKIHZvaWQg
SW5zcGVjdG9yU3R5bGVTaGVldDo6cmVtZW1iZXJJbnNwZWN0b3JTdHlsZShSZWZQdHI8SW5zcGVj
dG9yU3R5bGU+IGluc3BlY3RvclN0eWxlKQpAQCAtMTEwMCw4ICsxMTAwLDggQEAgYm9vbCBJbnNw
ZWN0b3JTdHlsZVNoZWV0OjplbnN1cmVTb3VyY2VEYXRhKCkKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwLCBzaXplID0gcnVsZXMuc2l6ZSgpOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIFN0eWxl
UnVsZVJhbmdlTWFwOjppdGVyYXRvciBpdCA9IHJ1bGVSYW5nZU1hcC5maW5kKHJ1bGVzLmF0KGkp
LT5zdHlsZVJ1bGUoKSk7CiAgICAgICAgIGlmIChpdCAhPSBydWxlUmFuZ2VNYXAuZW5kKCkpIHsK
LSAgICAgICAgICAgIGZpeFVucGFyc2VkUHJvcGVydHlSYW5nZXMoaXQtPnNlY29uZC5nZXQoKSwg
bV9wYXJzZWRTdHlsZVNoZWV0LT50ZXh0KCkpOwotICAgICAgICAgICAgcmFuZ2VzVmVjdG9yLT5h
cHBlbmQoaXQtPnNlY29uZCk7CisgICAgICAgICAgICBmaXhVbnBhcnNlZFByb3BlcnR5UmFuZ2Vz
KGl0LT52YWx1ZS5nZXQoKSwgbV9wYXJzZWRTdHlsZVNoZWV0LT50ZXh0KCkpOworICAgICAgICAg
ICAgcmFuZ2VzVmVjdG9yLT5hcHBlbmQoaXQtPnZhbHVlKTsKICAgICAgICAgfQogICAgIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcAppbmRleCBlODg2
MWMwZmE1YjEwNGNiNmQ1MTQzMmQ4YWQxYjhiNWI2MmFlMTIzLi5hZTcwZjI4ZTQ1ZWRkNDc2OTM0
ZTlhMmUwMjUxZWMwMWEwYjRkZmQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yVmFsdWVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yVmFsdWVzLmNwcApAQCAtNzIwLDcgKzcyMCw3IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9y
VmFsdWU+IEluc3BlY3Rvck9iamVjdEJhc2U6OmdldChjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0
CiAgICAgRGljdGlvbmFyeTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2RhdGEuZmluZChuYW1lKTsK
ICAgICBpZiAoaXQgPT0gbV9kYXRhLmVuZCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1
cm4gaXQtPnNlY29uZDsKKyAgICByZXR1cm4gaXQtPnZhbHVlOwogfQogCiB2b2lkIEluc3BlY3Rv
ck9iamVjdEJhc2U6OnJlbW92ZShjb25zdCBTdHJpbmcmIG5hbWUpCkBAIC03NDIsOSArNzQyLDkg
QEAgdm9pZCBJbnNwZWN0b3JPYmplY3RCYXNlOjp3cml0ZUpTT04oU3RyaW5nQnVpbGRlciogb3V0
cHV0KSBjb25zdAogICAgICAgICBBU1NFUlQoaXQgIT0gbV9kYXRhLmVuZCgpKTsKICAgICAgICAg
aWYgKGkpCiAgICAgICAgICAgICBvdXRwdXQtPmFwcGVuZCgnLCcpOwotICAgICAgICBkb3VibGVR
dW90ZVN0cmluZyhpdC0+Zmlyc3QsIG91dHB1dCk7CisgICAgICAgIGRvdWJsZVF1b3RlU3RyaW5n
KGl0LT5rZXksIG91dHB1dCk7CiAgICAgICAgIG91dHB1dC0+YXBwZW5kKCc6Jyk7Ci0gICAgICAg
IGl0LT5zZWNvbmQtPndyaXRlSlNPTihvdXRwdXQpOworICAgICAgICBpdC0+dmFsdWUtPndyaXRl
SlNPTihvdXRwdXQpOwogICAgIH0KICAgICBvdXRwdXQtPmFwcGVuZCgnfScpOwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvcldvcmtlckFnZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JXb3JrZXJBZ2VudC5jcHAKaW5kZXgg
MWIzODU5NTcxY2FmYzIzZTRjNTQxZDM0OWMyNjBkYTFmZTRmM2I5Ni4uMDYxZjQ3NGVmMTA1MDA0
Y2Q4ODY4YmY2NWE3YWJhZGM2NWNkY2ViZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvcldvcmtlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yV29ya2VyQWdlbnQuY3BwCkBAIC0xOTksOSArMTk5LDkgQEAgdm9pZCBJ
bnNwZWN0b3JXb3JrZXJBZ2VudDo6d29ya2VyQ29udGV4dFRlcm1pbmF0ZWQoV29ya2VyQ29udGV4
dFByb3h5KiBwcm94eSkKIHsKICAgICBtX2RlZGljYXRlZFdvcmtlcnMucmVtb3ZlKHByb3h5KTsK
ICAgICBmb3IgKFdvcmtlckNoYW5uZWxzOjppdGVyYXRvciBpdCA9IG1faWRUb0NoYW5uZWwuYmVn
aW4oKTsgaXQgIT0gbV9pZFRvQ2hhbm5lbC5lbmQoKTsgKytpdCkgewotICAgICAgICBpZiAocHJv
eHkgPT0gaXQtPnNlY29uZC0+cHJveHkoKSkgewotICAgICAgICAgICAgbV9pbnNwZWN0b3JGcm9u
dGVuZC0+d29ya2VyKCktPndvcmtlclRlcm1pbmF0ZWQoaXQtPmZpcnN0KTsKLSAgICAgICAgICAg
IGRlbGV0ZSBpdC0+c2Vjb25kOworICAgICAgICBpZiAocHJveHkgPT0gaXQtPnZhbHVlLT5wcm94
eSgpKSB7CisgICAgICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kLT53b3JrZXIoKS0+d29ya2Vy
VGVybWluYXRlZChpdC0+a2V5KTsKKyAgICAgICAgICAgIGRlbGV0ZSBpdC0+dmFsdWU7CiAgICAg
ICAgICAgICBtX2lkVG9DaGFubmVsLnJlbW92ZShpdCk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KQEAgLTIxMSwxNCArMjExLDE0IEBAIHZvaWQgSW5zcGVjdG9yV29ya2VyQWdlbnQ6
OndvcmtlckNvbnRleHRUZXJtaW5hdGVkKFdvcmtlckNvbnRleHRQcm94eSogcHJveHkpCiB2b2lk
IEluc3BlY3RvcldvcmtlckFnZW50OjpjcmVhdGVXb3JrZXJGcm9udGVuZENoYW5uZWxzRm9yRXhp
c3RpbmdXb3JrZXJzKCkKIHsKICAgICBmb3IgKERlZGljYXRlZFdvcmtlcnM6Oml0ZXJhdG9yIGl0
ID0gbV9kZWRpY2F0ZWRXb3JrZXJzLmJlZ2luKCk7IGl0ICE9IG1fZGVkaWNhdGVkV29ya2Vycy5l
bmQoKTsgKytpdCkKLSAgICAgICAgY3JlYXRlV29ya2VyRnJvbnRlbmRDaGFubmVsKGl0LT5maXJz
dCwgaXQtPnNlY29uZCk7CisgICAgICAgIGNyZWF0ZVdvcmtlckZyb250ZW5kQ2hhbm5lbChpdC0+
a2V5LCBpdC0+dmFsdWUpOwogfQogCiB2b2lkIEluc3BlY3RvcldvcmtlckFnZW50OjpkZXN0cm95
V29ya2VyRnJvbnRlbmRDaGFubmVscygpCiB7CiAgICAgZm9yIChXb3JrZXJDaGFubmVsczo6aXRl
cmF0b3IgaXQgPSBtX2lkVG9DaGFubmVsLmJlZ2luKCk7IGl0ICE9IG1faWRUb0NoYW5uZWwuZW5k
KCk7ICsraXQpIHsKLSAgICAgICAgaXQtPnNlY29uZC0+ZGlzY29ubmVjdEZyb21Xb3JrZXJDb250
ZXh0KCk7Ci0gICAgICAgIGRlbGV0ZSBpdC0+c2Vjb25kOworICAgICAgICBpdC0+dmFsdWUtPmRp
c2Nvbm5lY3RGcm9tV29ya2VyQ29udGV4dCgpOworICAgICAgICBkZWxldGUgaXQtPnZhbHVlOwog
ICAgIH0KICAgICBtX2lkVG9DaGFubmVsLmNsZWFyKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvTmV0d29ya1Jlc291cmNlc0RhdGEuY3BwIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL05ldHdvcmtSZXNvdXJjZXNEYXRhLmNwcAppbmRleCBhMDEyNGRmMDBiNGRl
NjI0ZGMzOWQ1MGNiNGM3MDAxZTM5OGRhMzQ1Li5iNWNmMGU0YTJiMDQwMTgzYjI3ZmYyMGY3Mjcw
MGExMWY5NTAyN2U0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvTmV0d29y
a1Jlc291cmNlc0RhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9OZXR3b3Jr
UmVzb3VyY2VzRGF0YS5jcHAKQEAgLTI1NSw5ICsyNTUsOSBAQCB2b2lkIE5ldHdvcmtSZXNvdXJj
ZXNEYXRhOjpjbGVhcihjb25zdCBTdHJpbmcmIHByZXNlcnZlZExvYWRlcklkKQogICAgIFJlc291
cmNlRGF0YU1hcDo6aXRlcmF0b3IgaXQ7CiAgICAgUmVzb3VyY2VEYXRhTWFwOjppdGVyYXRvciBl
bmQgPSBtX3JlcXVlc3RJZFRvUmVzb3VyY2VEYXRhTWFwLmVuZCgpOwogICAgIGZvciAoaXQgPSBt
X3JlcXVlc3RJZFRvUmVzb3VyY2VEYXRhTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewot
ICAgICAgICBSZXNvdXJjZURhdGEqIHJlc291cmNlRGF0YSA9IGl0LT5zZWNvbmQ7CisgICAgICAg
IFJlc291cmNlRGF0YSogcmVzb3VyY2VEYXRhID0gaXQtPnZhbHVlOwogICAgICAgICBpZiAoIXBy
ZXNlcnZlZExvYWRlcklkLmlzTnVsbCgpICYmIHJlc291cmNlRGF0YS0+bG9hZGVySWQoKSA9PSBw
cmVzZXJ2ZWRMb2FkZXJJZCkKLSAgICAgICAgICAgIHByZXNlcnZlZE1hcC5zZXQoaXQtPmZpcnN0
LCBpdC0+c2Vjb25kKTsKKyAgICAgICAgICAgIHByZXNlcnZlZE1hcC5zZXQoaXQtPmtleSwgaXQt
PnZhbHVlKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgZGVsZXRlIHJlc291cmNlRGF0YTsK
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5BY2Nl
c3NDb250cm9sLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpbkFjY2Vzc0Nv
bnRyb2wuY3BwCmluZGV4IDAzZTk1MzQ1MTVlYTRkYjEwZjIyYTgxNzBkNDhhNTgxNGQ0OWJjMmUu
LjFkNjY3YTQzNTBlYTUwMDQxZGM1YzAzYTlmYmVhZDFmOTUxM2JiNTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuY3BwCkBAIC02OCw3
ICs2OCw3IEBAIGJvb2wgaXNTaW1wbGVDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3QoY29uc3QgU3Ry
aW5nJiBtZXRob2QsIGNvbnN0IEhUVFBIZWFkZXJNYXAmCiAKICAgICBIVFRQSGVhZGVyTWFwOjpj
b25zdF9pdGVyYXRvciBlbmQgPSBoZWFkZXJNYXAuZW5kKCk7CiAgICAgZm9yIChIVFRQSGVhZGVy
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGhlYWRlck1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKLSAgICAgICAgaWYgKCFpc09uQWNjZXNzQ29udHJvbFNpbXBsZVJlcXVlc3RIZWFkZXJX
aGl0ZWxpc3QoaXQtPmZpcnN0LCBpdC0+c2Vjb25kKSkKKyAgICAgICAgaWYgKCFpc09uQWNjZXNz
Q29udHJvbFNpbXBsZVJlcXVlc3RIZWFkZXJXaGl0ZWxpc3QoaXQtPmtleSwgaXQtPnZhbHVlKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTExNiwxNCArMTE2LDE0IEBA
IFJlc291cmNlUmVxdWVzdCBjcmVhdGVBY2Nlc3NDb250cm9sUHJlZmxpZ2h0UmVxdWVzdChjb25z
dCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlCiAgICAgaWYgKHJlcXVlc3RIZWFkZXJGaWVsZHMuc2l6
ZSgpID4gMCkgewogICAgICAgICBTdHJpbmdCdWlsZGVyIGhlYWRlckJ1ZmZlcjsKICAgICAgICAg
SFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSByZXF1ZXN0SGVhZGVyRmllbGRzLmJl
Z2luKCk7Ci0gICAgICAgIGhlYWRlckJ1ZmZlci5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAg
aGVhZGVyQnVmZmVyLmFwcGVuZChpdC0+a2V5KTsKICAgICAgICAgKytpdDsKIAogICAgICAgICBI
VFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSByZXF1ZXN0SGVhZGVyRmllbGRzLmVu
ZCgpOwogICAgICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBoZWFk
ZXJCdWZmZXIuYXBwZW5kKCcsJyk7CiAgICAgICAgICAgICBoZWFkZXJCdWZmZXIuYXBwZW5kKCcg
Jyk7Ci0gICAgICAgICAgICBoZWFkZXJCdWZmZXIuYXBwZW5kKGl0LT5maXJzdCk7CisgICAgICAg
ICAgICBoZWFkZXJCdWZmZXIuYXBwZW5kKGl0LT5rZXkpOwogICAgICAgICB9CiAKICAgICAgICAg
cHJlZmxpZ2h0UmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoIkFjY2Vzcy1Db250cm9sLVJlcXVl
c3QtSGVhZGVycyIsIGhlYWRlckJ1ZmZlci50b1N0cmluZygpLmxvd2VyKCkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2Fj
aGUuY3BwCmluZGV4IDE5OGRkYWZhM2M3YzY3Mjk1ODI1ZjBhNjhiODJjNzhiMDA0ODc5OGUuLjMx
YzViNWViZGRkMzA4NGU5YTBlMzZkMzU0YjEwOThiZDllNzllMTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5j
cHAKQEAgLTEyNyw4ICsxMjcsOCBAQCBib29sIENyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2Fj
aGVJdGVtOjphbGxvd3NDcm9zc09yaWdpbkhlYWRlcnMoY29uc3QgSFRUUEhlYQogewogICAgIEhU
VFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHJlcXVlc3RIZWFkZXJzLmVuZCgpOwog
ICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSByZXF1ZXN0SGVhZGVy
cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKCFtX2hlYWRlcnMuY29u
dGFpbnMoaXQtPmZpcnN0KSAmJiAhaXNPbkFjY2Vzc0NvbnRyb2xTaW1wbGVSZXF1ZXN0SGVhZGVy
V2hpdGVsaXN0KGl0LT5maXJzdCwgaXQtPnNlY29uZCkpIHsKLSAgICAgICAgICAgIGVycm9yRGVz
Y3JpcHRpb24gPSAiUmVxdWVzdCBoZWFkZXIgZmllbGQgIiArIGl0LT5maXJzdC5zdHJpbmcoKSAr
ICIgaXMgbm90IGFsbG93ZWQgYnkgQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVycy4iOworICAg
ICAgICBpZiAoIW1faGVhZGVycy5jb250YWlucyhpdC0+a2V5KSAmJiAhaXNPbkFjY2Vzc0NvbnRy
b2xTaW1wbGVSZXF1ZXN0SGVhZGVyV2hpdGVsaXN0KGl0LT5rZXksIGl0LT52YWx1ZSkpIHsKKyAg
ICAgICAgICAgIGVycm9yRGVzY3JpcHRpb24gPSAiUmVxdWVzdCBoZWFkZXIgZmllbGQgIiArIGl0
LT5rZXkuc3RyaW5nKCkgKyAiIGlzIG5vdCBhbGxvd2VkIGJ5IEFjY2Vzcy1Db250cm9sLUFsbG93
LUhlYWRlcnMuIjsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0K
QEAgLTE2OSw3ICsxNjksNyBAQCBib29sIENyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGU6
OmNhblNraXBQcmVmbGlnaHQoY29uc3QgU3RyaW5nJiBvcmlnaW4sIGNvbgogICAgIGlmIChjYWNo
ZUl0ID09IG1fcHJlZmxpZ2h0SGFzaE1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgaWYgKGNhY2hlSXQtPnNlY29uZC0+YWxsb3dzUmVxdWVzdChpbmNsdWRlQ3JlZGVudGlh
bHMsIG1ldGhvZCwgcmVxdWVzdEhlYWRlcnMpKQorICAgIGlmIChjYWNoZUl0LT52YWx1ZS0+YWxs
b3dzUmVxdWVzdChpbmNsdWRlQ3JlZGVudGlhbHMsIG1ldGhvZCwgcmVxdWVzdEhlYWRlcnMpKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIG1fcHJlZmxpZ2h0SGFzaE1hcC5yZW1vdmUoY2Fj
aGVJdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAppbmRleCA4Mjlk
MjFhNTEzOGUwYmJhNGMxMjUxMmNkNWQwNzFiNDQ1N2VkMWQzLi44MzM1ZmRkNmJhZGVmZTVkZmM3
MWQzY2RiNjdiODUzOWU4M2U1Y2IzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
RG9jdW1lbnRMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExv
YWRlci5jcHAKQEAgLTU3MCw3ICs1NzAsNyBAQCB2b2lkIERvY3VtZW50TG9hZGVyOjpnZXRTdWJy
ZXNvdXJjZXMoVmVjdG9yPFBhc3NSZWZQdHI8QXJjaGl2ZVJlc291cmNlPiA+JiBzdWJyZQogICAg
IGNvbnN0IENhY2hlZFJlc291cmNlTG9hZGVyOjpEb2N1bWVudFJlc291cmNlTWFwJiBhbGxSZXNv
dXJjZXMgPSBkb2N1bWVudC0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS0+YWxsQ2FjaGVkUmVzb3Vy
Y2VzKCk7CiAgICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OkRvY3VtZW50UmVzb3VyY2VNYXA6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IGFsbFJlc291cmNlcy5lbmQoKTsKICAgICBmb3IgKENhY2hlZFJl
c291cmNlTG9hZGVyOjpEb2N1bWVudFJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGFs
bFJlc291cmNlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgUmVmUHRyPEFy
Y2hpdmVSZXNvdXJjZT4gc3VicmVzb3VyY2UgPSB0aGlzLT5zdWJyZXNvdXJjZShLVVJMKFBhcnNl
ZFVSTFN0cmluZywgaXQtPnNlY29uZC0+dXJsKCkpKTsKKyAgICAgICAgUmVmUHRyPEFyY2hpdmVS
ZXNvdXJjZT4gc3VicmVzb3VyY2UgPSB0aGlzLT5zdWJyZXNvdXJjZShLVVJMKFBhcnNlZFVSTFN0
cmluZywgaXQtPnZhbHVlLT51cmwoKSkpOwogICAgICAgICBpZiAoc3VicmVzb3VyY2UpCiAgICAg
ICAgICAgICBzdWJyZXNvdXJjZXMuYXBwZW5kKHN1YnJlc291cmNlLnJlbGVhc2UoKSk7CiAgICAg
fQpAQCAtNjAyLDggKzYwMiw4IEBAIHZvaWQgRG9jdW1lbnRMb2FkZXI6OnN1YnN0aXR1dGVSZXNv
dXJjZURlbGl2ZXJ5VGltZXJGaXJlZChUaW1lcjxEb2N1bWVudExvYWRlcj4qCiAKICAgICBTdWJz
dGl0dXRlUmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGNvcHkuZW5kKCk7CiAgICAg
Zm9yIChTdWJzdGl0dXRlUmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY29weS5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgUmVmUHRyPFJlc291cmNlTG9hZGVyPiBs
b2FkZXIgPSBpdC0+Zmlyc3Q7Ci0gICAgICAgIFN1YnN0aXR1dGVSZXNvdXJjZSogcmVzb3VyY2Ug
PSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICBSZWZQdHI8UmVzb3VyY2VMb2FkZXI+IGxvYWRl
ciA9IGl0LT5rZXk7CisgICAgICAgIFN1YnN0aXR1dGVSZXNvdXJjZSogcmVzb3VyY2UgPSBpdC0+
dmFsdWUuZ2V0KCk7CiAgICAgICAgIAogICAgICAgICBpZiAocmVzb3VyY2UpIHsKICAgICAgICAg
ICAgIFNoYXJlZEJ1ZmZlciogZGF0YSA9IHJlc291cmNlLT5kYXRhKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvTWFpblJlc291cmNlTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9NYWluUmVzb3VyY2VMb2FkZXIuY3BwCmluZGV4IDNhNTc2MTUyN2YyZGI1N2M1
YmIwMGQ2MTExZTBiMWNlZmMyMzg5NTAuLjYyMDFmMzBhYmZkNTZjZjViM2M2YTllMzQ5ZmZlNTU0
NjUyNjE2NWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9NYWluUmVzb3VyY2VM
b2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9NYWluUmVzb3VyY2VMb2FkZXIu
Y3BwCkBAIC0zNjUsNyArMzY1LDcgQEAgdm9pZCBNYWluUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2Vp
dmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByKQogCiAgICAgSFRUUEhlYWRlck1h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSByLmh0dHBIZWFkZXJGaWVsZHMoKS5maW5kKEF0b21pY1N0
cmluZygieC1mcmFtZS1vcHRpb25zIikpOwogICAgIGlmIChpdCAhPSByLmh0dHBIZWFkZXJGaWVs
ZHMoKS5lbmQoKSkgewotICAgICAgICBTdHJpbmcgY29udGVudCA9IGl0LT5zZWNvbmQ7CisgICAg
ICAgIFN0cmluZyBjb250ZW50ID0gaXQtPnZhbHVlOwogICAgICAgICBpZiAobV9mcmFtZS0+bG9h
ZGVyKCktPnNob3VsZEludGVycnVwdExvYWRGb3JYRnJhbWVPcHRpb25zKGNvbnRlbnQsIHIudXJs
KCkpKSB7CiAgICAgICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnRpbnVlQWZ0
ZXJYRnJhbWVPcHRpb25zRGVuaWVkKG1fZnJhbWUuZ2V0KCksIGRvY3VtZW50TG9hZGVyKCksIGlk
ZW50aWZpZXIoKSwgcik7CiAgICAgICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywg
Y29uc29sZU1lc3NhZ2UsICgiUmVmdXNlZCB0byBkaXNwbGF5IGRvY3VtZW50IGJlY2F1c2UgZGlz
cGxheSBmb3JiaWRkZW4gYnkgWC1GcmFtZS1PcHRpb25zLlxuIikpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFNjaGVkdWxlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcAppbmRleCA4MDA0ZDhmMmViMmQ4
YmMzNjA2YTA2OWZjN2VlYTM1MWFmY2ZjZGFhLi44ZWI0NGQ0OWQyOWE2ODQ2NjRkODMyNWNhMjYx
ZjU3NWM2NDEwYjYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VM
b2FkU2NoZWR1bGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyLmNwcApAQCAtMTc0LDcgKzE3NCw3IEBAIHZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1
bGVyOjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhSZXNvdXJjZUxvYWRQcmlvcml0eSBtaW5pbXVtUHJp
CiAgICAgbV9ob3N0cy5jaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgSG9zdE1hcDo6aXRlcmF0b3Ig
ZW5kID0gbV9ob3N0cy5lbmQoKTsKICAgICBmb3IgKEhvc3RNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBt
X2hvc3RzLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCi0gICAgICAgIGhvc3RzVG9TZXJ2
ZS5hcHBlbmQoaXRlci0+c2Vjb25kKTsKKyAgICAgICAgaG9zdHNUb1NlcnZlLmFwcGVuZChpdGVy
LT52YWx1ZSk7CiAKICAgICBpbnQgc2l6ZSA9IGhvc3RzVG9TZXJ2ZS5zaXplKCk7CiAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9TdWJmcmFtZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvU3ViZnJh
bWVMb2FkZXIuY3BwCmluZGV4IDFmZjQ3ZTY2NGRiZTU0ODg2M2ZiNDhkNGE3NTNiNjRlOTA3OGMy
NDcuLjFhYzRkZDNmYzhlNzRhZmJiODUwYTY5N2IyYmYzNzNkZjAwOWM3OGUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9TdWJmcmFtZUxvYWRlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvbG9hZGVyL1N1YmZyYW1lTG9hZGVyLmNwcApAQCAtMjA3LDEyICsyMDcsMTIgQEAgUGFz
c1JlZlB0cjxXaWRnZXQ+IFN1YmZyYW1lTG9hZGVyOjpjcmVhdGVKYXZhQXBwbGV0V2lkZ2V0KGNv
bnN0IExheW91dFNpemUmIHNpemUKICAgICBWZWN0b3I8U3RyaW5nPiBwYXJhbVZhbHVlczsKICAg
ICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gYXJncy5lbmQo
KTsKICAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9
IGFyZ3MuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChlcXVhbElnbm9y
aW5nQ2FzZShpdC0+Zmlyc3QsICJiYXNldXJsIikpCi0gICAgICAgICAgICBiYXNlVVJMU3RyaW5n
ID0gaXQtPnNlY29uZDsKLSAgICAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoaXQtPmZp
cnN0LCAiY29kZWJhc2UiKSkKLSAgICAgICAgICAgIGNvZGVCYXNlVVJMU3RyaW5nID0gaXQtPnNl
Y29uZDsKLSAgICAgICAgcGFyYW1OYW1lcy5hcHBlbmQoaXQtPmZpcnN0KTsKLSAgICAgICAgcGFy
YW1WYWx1ZXMuYXBwZW5kKGl0LT5zZWNvbmQpOworICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nh
c2UoaXQtPmtleSwgImJhc2V1cmwiKSkKKyAgICAgICAgICAgIGJhc2VVUkxTdHJpbmcgPSBpdC0+
dmFsdWU7CisgICAgICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGl0LT5rZXksICJjb2Rl
YmFzZSIpKQorICAgICAgICAgICAgY29kZUJhc2VVUkxTdHJpbmcgPSBpdC0+dmFsdWU7CisgICAg
ICAgIHBhcmFtTmFtZXMuYXBwZW5kKGl0LT5rZXkpOworICAgICAgICBwYXJhbVZhbHVlcy5hcHBl
bmQoaXQtPnZhbHVlKTsKICAgICB9CiAKICAgICBpZiAoIWNvZGVCYXNlVVJMU3RyaW5nLmlzRW1w
dHkoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxp
Y2F0aW9uQ2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0
aW9uQ2FjaGUuY3BwCmluZGV4IDYzY2Q3YmJiZmE4Nzg5ZjRhZGIzZGY1MmNiNGU5YzE3ZGQ3MTU5
NDQuLmI3ZWE2NTI0YzQwMzk3NWZmMGRmOTQ2YTJmMGQwMTFjYjE3MDBhNmEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZS5jcHAKQEAg
LTEwMCwxMSArMTAwLDExIEBAIHVuc2lnbmVkIEFwcGxpY2F0aW9uQ2FjaGU6OnJlbW92ZVJlc291
cmNlKGNvbnN0IFN0cmluZyYgdXJsKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIC8vIFRoZSBy
ZXNvdXJjZSBleGlzdHMsIGdldCBpdHMgdHlwZSBzbyB3ZSBjYW4gcmV0dXJuIGl0LgotICAgIHVu
c2lnbmVkIHR5cGUgPSBpdC0+c2Vjb25kLT50eXBlKCk7CisgICAgdW5zaWduZWQgdHlwZSA9IGl0
LT52YWx1ZS0+dHlwZSgpOwogCiAgICAgbV9yZXNvdXJjZXMucmVtb3ZlKGl0KTsKIAotICAgIG1f
ZXN0aW1hdGVkU2l6ZUluU3RvcmFnZSAtPSBpdC0+c2Vjb25kLT5lc3RpbWF0ZWRTaXplSW5TdG9y
YWdlKCk7CisgICAgbV9lc3RpbWF0ZWRTaXplSW5TdG9yYWdlIC09IGl0LT52YWx1ZS0+ZXN0aW1h
dGVkU2l6ZUluU3RvcmFnZSgpOwogCiAgICAgcmV0dXJuIHR5cGU7CiB9ICAgIApAQCAtMTgwLDcg
KzE4MCw3IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZTo6Y2xlYXJTdG9yYWdlSUQoKQogICAgIAog
ICAgIFJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3Jlc291cmNlcy5lbmQoKTsK
ICAgICBmb3IgKFJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+Y2xlYXJTdG9yYWdl
SUQoKTsKKyAgICAgICAgaXQtPnZhbHVlLT5jbGVhclN0b3JhZ2VJRCgpOwogfQogICAgIAogdm9p
ZCBBcHBsaWNhdGlvbkNhY2hlOjpkZWxldGVDYWNoZUZvck9yaWdpbihTZWN1cml0eU9yaWdpbiog
b3JpZ2luKQpAQCAtMjE4LDggKzIxOCw4IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZTo6ZHVtcCgp
CiAgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+ID46
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcmVzb3VyY2VzLmVuZCgpOwogICAgIAogICAgIGZvciAo
SGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+ID46OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0g
ICAgICAgIHByaW50ZigiJXMgIiwgaXQtPmZpcnN0LmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAg
QXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpkdW1wVHlwZShpdC0+c2Vjb25kLT50eXBlKCkpOwor
ICAgICAgICBwcmludGYoIiVzICIsIGl0LT5rZXkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICBB
cHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OmR1bXBUeXBlKGl0LT52YWx1ZS0+dHlwZSgpKTsKICAg
ICB9CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNo
ZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNh
Y2hlL0FwcGxpY2F0aW9uQ2FjaGVHcm91cC5jcHAKaW5kZXggNGU0MjkzOGJiNWQ1N2Q2MTJiZGYz
NTBjZjE5MzQwNDAyNDI3OWFmOS4uZDY0NTAzMGVmMDBlN2QwMTc4NzkwZjc3OTQwYzdiMGRjOGUz
YTMwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0
aW9uQ2FjaGVHcm91cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0Fw
cGxpY2F0aW9uQ2FjaGVHcm91cC5jcHAKQEAgLTc3NSw5ICs3NzUsOSBAQCB2b2lkIEFwcGxpY2F0
aW9uQ2FjaGVHcm91cDo6ZGlkRmluaXNoTG9hZGluZ01hbmlmZXN0KCkKICAgICBpZiAoaXNVcGdy
YWRlQXR0ZW1wdCkgewogICAgICAgICBBcHBsaWNhdGlvbkNhY2hlOjpSZXNvdXJjZU1hcDo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gbV9uZXdlc3RDYWNoZS0+ZW5kKCk7CiAgICAgICAgIGZvciAoQXBw
bGljYXRpb25DYWNoZTo6UmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9uZXdlc3RD
YWNoZS0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCB0
eXBlID0gaXQtPnNlY29uZC0+dHlwZSgpOworICAgICAgICAgICAgdW5zaWduZWQgdHlwZSA9IGl0
LT52YWx1ZS0+dHlwZSgpOwogICAgICAgICAgICAgaWYgKHR5cGUgJiBBcHBsaWNhdGlvbkNhY2hl
UmVzb3VyY2U6Ok1hc3RlcikKLSAgICAgICAgICAgICAgICBhZGRFbnRyeShpdC0+Zmlyc3QsIHR5
cGUpOworICAgICAgICAgICAgICAgIGFkZEVudHJ5KGl0LT5rZXksIHR5cGUpOwogICAgICAgICB9
CiAgICAgfQogICAgIApAQCAtMTAxNiw3ICsxMDE2LDcgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hl
R3JvdXA6OnN0YXJ0TG9hZGluZ0VudHJ5KCkKIAogICAgIEFTU0VSVCghbV9jdXJyZW50SGFuZGxl
KTsKICAgICAKLSAgICBtX2N1cnJlbnRIYW5kbGUgPSBjcmVhdGVSZXNvdXJjZUhhbmRsZShLVVJM
KFBhcnNlZFVSTFN0cmluZywgaXQtPmZpcnN0KSwgbV9uZXdlc3RDYWNoZSA/IG1fbmV3ZXN0Q2Fj
aGUtPnJlc291cmNlRm9yVVJMKGl0LT5maXJzdCkgOiAwKTsKKyAgICBtX2N1cnJlbnRIYW5kbGUg
PSBjcmVhdGVSZXNvdXJjZUhhbmRsZShLVVJMKFBhcnNlZFVSTFN0cmluZywgaXQtPmtleSksIG1f
bmV3ZXN0Q2FjaGUgPyBtX25ld2VzdENhY2hlLT5yZXNvdXJjZUZvclVSTChpdC0+a2V5KSA6IDAp
OwogfQogCiB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6ZGVsaXZlckRlbGF5ZWRNYWluUmVz
b3VyY2VzKCkKQEAgLTEwNjUsNyArMTA2NSw3IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3Vw
OjphZGRFbnRyeShjb25zdCBTdHJpbmcmIHVybCwgdW5zaWduZWQgdHlwZSkKICAgICBFbnRyeU1h
cDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fcGVuZGluZ0VudHJpZXMuYWRkKHVybCwgdHlwZSk7CiAg
ICAgCiAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9y
LT5zZWNvbmQgfD0gdHlwZTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSB8PSB0eXBl
OwogfQogCiB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6YXNzb2NpYXRlRG9jdW1lbnRMb2Fk
ZXJXaXRoQ2FjaGUoRG9jdW1lbnRMb2FkZXIqIGxvYWRlciwgQXBwbGljYXRpb25DYWNoZSogY2Fj
aGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRp
b25DYWNoZUhvc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0
aW9uQ2FjaGVIb3N0LmNwcAppbmRleCA4MDFjMWIzNjcwMzFhMzM5ZGI0NDcwN2E5MmQxYmM4MGQ0
MWQ4Yzc5Li5mZTlmMDEwYTBmZTY1MDNkMGJjNWU1YjkyNzcwYTNmN2I2NDM0NGZkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUhvc3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hl
SG9zdC5jcHAKQEAgLTI4Miw3ICsyODIsNyBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVIb3N0Ojpm
aWxsUmVzb3VyY2VMaXN0KFJlc291cmNlSW5mb0xpc3QqIHJlc291cmNlcykKICAgICAgCiAgICAg
QXBwbGljYXRpb25DYWNoZTo6UmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGNhY2hl
LT5lbmQoKTsKICAgICBmb3IgKEFwcGxpY2F0aW9uQ2FjaGU6OlJlc291cmNlTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IGNhY2hlLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAg
UmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4gcmVzb3VyY2UgPSBpdC0+c2Vjb25kOwor
ICAgICAgICBSZWZQdHI8QXBwbGljYXRpb25DYWNoZVJlc291cmNlPiByZXNvdXJjZSA9IGl0LT52
YWx1ZTsKICAgICAgICAgdW5zaWduZWQgdHlwZSA9IHJlc291cmNlLT50eXBlKCk7CiAgICAgICAg
IGJvb2wgaXNNYXN0ZXIgICA9IHR5cGUgJiBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6Ok1hc3Rl
cjsKICAgICAgICAgYm9vbCBpc01hbmlmZXN0ID0gdHlwZSAmIEFwcGxpY2F0aW9uQ2FjaGVSZXNv
dXJjZTo6TWFuaWZlc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2Fj
aGUvQXBwbGljYXRpb25DYWNoZVJlc291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9h
cHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuY3BwCmluZGV4IGQ4MzE3ODRiNDE5NmFk
ZjM4MmNmMzU1ZTBlZWYwMmQ2YTdhODA3OTAuLjk5NzY2ZTNhNjZiZDM2ZWI0MmZlZDJhOTI2OWQz
NGIwNjYxOTRkN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9B
cHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9h
cHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuY3BwCkBAIC01NCw3ICs1NCw3IEBAIGlu
dDY0X3QgQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjplc3RpbWF0ZWRTaXplSW5TdG9yYWdlKCkK
IAogICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHJlc3BvbnNlKCkuaHR0
cEhlYWRlckZpZWxkcygpLmVuZCgpOwogICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSByZXNwb25zZSgpLmh0dHBIZWFkZXJGaWVsZHMoKS5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpCi0gICAgICAgIG1fZXN0aW1hdGVkU2l6ZUluU3RvcmFnZSArPSAoaXQtPmZpcnN0
Lmxlbmd0aCgpICsgaXQtPnNlY29uZC5sZW5ndGgoKSArIDIpICogc2l6ZW9mKFVDaGFyKTsKKyAg
ICAgICAgbV9lc3RpbWF0ZWRTaXplSW5TdG9yYWdlICs9IChpdC0+a2V5Lmxlbmd0aCgpICsgaXQt
PnZhbHVlLmxlbmd0aCgpICsgMikgKiBzaXplb2YoVUNoYXIpOwogCiAgICAgbV9lc3RpbWF0ZWRT
aXplSW5TdG9yYWdlICs9IHVybCgpLnN0cmluZygpLmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKTsK
ICAgICBtX2VzdGltYXRlZFNpemVJblN0b3JhZ2UgKz0gc2l6ZW9mKGludCk7IC8vIHJlc3BvbnNl
KCkubV9odHRwU3RhdHVzQ29kZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2Fw
cGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAKaW5kZXggNWQxMDNiMmZmN2I0
Y2JhNTRlMDM3YmE2Yzg3OTYyMzA0ZDA1ZWU2MS4uNWE5MDgxZmYyZGVjOGZjZTYyMjMxNzhiMGUw
OWM1OGY1YjI4OThmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hl
L0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
YXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwCkBAIC0xMzcsOCArMTM3LDggQEAg
QXBwbGljYXRpb25DYWNoZUdyb3VwKiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZmluZE9yQ3Jl
YXRlQ2FjaGVHcm91cChjb25zdCBLVVIKICAgICBDYWNoZUdyb3VwTWFwOjpBZGRSZXN1bHQgcmVz
dWx0ID0gbV9jYWNoZXNJbk1lbW9yeS5hZGQobWFuaWZlc3RVUkwsIDApOwogICAgIAogICAgIGlm
ICghcmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgQVNTRVJUKHJlc3VsdC5pdGVyYXRvci0+
c2Vjb25kKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgICAg
ICBBU1NFUlQocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CisgICAgICAgIHJldHVybiByZXN1bHQu
aXRlcmF0b3ItPnZhbHVlOwogICAgIH0KIAogICAgIC8vIExvb2sgdXAgdGhlIGdyb3VwIGluIHRo
ZSBkYXRhYmFzZQpAQCAtMTUwLDcgKzE1MCw3IEBAIEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogQXBw
bGljYXRpb25DYWNoZVN0b3JhZ2U6OmZpbmRPckNyZWF0ZUNhY2hlR3JvdXAoY29uc3QgS1VSCiAg
ICAgICAgIG1fY2FjaGVIb3N0U2V0LmFkZCh1cmxIb3N0SGFzaChtYW5pZmVzdFVSTCkpOwogICAg
IH0KICAgICAKLSAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IGdyb3VwOworICAgIHJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUgPSBncm91cDsKICAgICAKICAgICByZXR1cm4gZ3JvdXA7CiB9CkBA
IC0xOTcsNyArMTk3LDcgQEAgQXBwbGljYXRpb25DYWNoZUdyb3VwKiBBcHBsaWNhdGlvbkNhY2hl
U3RvcmFnZTo6Y2FjaGVHcm91cEZvclVSTChjb25zdCBLVVJMJiB1cmwKICAgICAvLyBDaGVjayBp
ZiBhIGNhY2hlIGFscmVhZHkgZXhpc3RzIGluIG1lbW9yeS4KICAgICBDYWNoZUdyb3VwTWFwOjpj
b25zdF9pdGVyYXRvciBlbmQgPSBtX2NhY2hlc0luTWVtb3J5LmVuZCgpOwogICAgIGZvciAoQ2Fj
aGVHcm91cE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2NhY2hlc0luTWVtb3J5LmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIGdyb3Vw
ID0gaXQtPnNlY29uZDsKKyAgICAgICAgQXBwbGljYXRpb25DYWNoZUdyb3VwKiBncm91cCA9IGl0
LT52YWx1ZTsKIAogICAgICAgICBBU1NFUlQoIWdyb3VwLT5pc09ic29sZXRlKCkpOwogCkBAIC0y
NjgsNyArMjY4LDcgQEAgQXBwbGljYXRpb25DYWNoZUdyb3VwKiBBcHBsaWNhdGlvbkNhY2hlU3Rv
cmFnZTo6ZmFsbGJhY2tDYWNoZUdyb3VwRm9yVVJMKGNvbnN0IEsKICAgICAvLyBDaGVjayBpZiBh
biBhcHByb3ByaWF0ZSBjYWNoZSBhbHJlYWR5IGV4aXN0cyBpbiBtZW1vcnkuCiAgICAgQ2FjaGVH
cm91cE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9jYWNoZXNJbk1lbW9yeS5lbmQoKTsKICAg
ICBmb3IgKENhY2hlR3JvdXBNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9jYWNoZXNJbk1lbW9y
eS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgQXBwbGljYXRpb25DYWNoZUdy
b3VwKiBncm91cCA9IGl0LT5zZWNvbmQ7CisgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVHcm91cCog
Z3JvdXAgPSBpdC0+dmFsdWU7CiAgICAgICAgIAogICAgICAgICBBU1NFUlQoIWdyb3VwLT5pc09i
c29sZXRlKCkpOwogCkBAIC03MTMsMTMgKzcxMywxMyBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVT
dG9yYWdlOjpzdG9yZShBcHBsaWNhdGlvbkNhY2hlKiBjYWNoZSwgUmVzb3VyY2VTdG9yYWdlSURK
bwogICAgIHsKICAgICAgICAgQXBwbGljYXRpb25DYWNoZTo6UmVzb3VyY2VNYXA6OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IGNhY2hlLT5lbmQoKTsKICAgICAgICAgZm9yIChBcHBsaWNhdGlvbkNhY2hl
OjpSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjYWNoZS0+YmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBvbGRTdG9yYWdlSUQgPSBpdC0+c2Vj
b25kLT5zdG9yYWdlSUQoKTsKLSAgICAgICAgICAgIGlmICghc3RvcmUoaXQtPnNlY29uZC5nZXQo
KSwgY2FjaGVTdG9yYWdlSUQpKQorICAgICAgICAgICAgdW5zaWduZWQgb2xkU3RvcmFnZUlEID0g
aXQtPnZhbHVlLT5zdG9yYWdlSUQoKTsKKyAgICAgICAgICAgIGlmICghc3RvcmUoaXQtPnZhbHVl
LmdldCgpLCBjYWNoZVN0b3JhZ2VJRCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgICAgICAgICAvLyBTdG9yaW5nIHRoZSByZXNvdXJjZSBzdWNjZWVkZWQuIExvZyBpdHMg
b2xkIHN0b3JhZ2VJRCBpbiBjYXNlCiAgICAgICAgICAgICAvLyBpdCBuZWVkcyB0byBiZSByZXN0
b3JlZCBsYXRlci4KLSAgICAgICAgICAgIHN0b3JhZ2VJREpvdXJuYWwtPmFkZChpdC0+c2Vjb25k
LmdldCgpLCBvbGRTdG9yYWdlSUQpOworICAgICAgICAgICAgc3RvcmFnZUlESm91cm5hbC0+YWRk
KGl0LT52YWx1ZS5nZXQoKSwgb2xkU3RvcmFnZUlEKTsKICAgICAgICAgfQogICAgIH0KICAgICAK
QEAgLTgzOSw5ICs4MzksOSBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZShB
cHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqIHJlc291cmNlLCB1bnNpZ25lZAogICAgIAogICAgIEhU
VFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHJlc291cmNlLT5yZXNwb25zZSgpLmh0
dHBIZWFkZXJGaWVsZHMoKS5lbmQoKTsKICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gcmVzb3VyY2UtPnJlc3BvbnNlKCkuaHR0cEhlYWRlckZpZWxkcygpLmJlZ2lu
KCk7IGl0IT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5m
aXJzdCk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5rZXkpOwogICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZCgoVUNoYXIpJzonKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQoaXQtPnNlY29uZCk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT52YWx1
ZSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKChVQ2hhciknXG4nKTsKICAgICB9CiAg
ICAgCkBAIC0xMjQxLDcgKzEyNDEsNyBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpl
bXB0eSgpCiAgICAgLy8gdW50aWwgYSBjYWNoZSB1cGRhdGUgcHJvY2VzcyBoYXMgYmVlbiBpbml0
aWF0ZWQuCiAgICAgQ2FjaGVHcm91cE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9jYWNoZXNJ
bk1lbW9yeS5lbmQoKTsKICAgICBmb3IgKENhY2hlR3JvdXBNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV9jYWNoZXNJbk1lbW9yeS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0
LT5zZWNvbmQtPmNsZWFyU3RvcmFnZUlEKCk7CisgICAgICAgIGl0LT52YWx1ZS0+Y2xlYXJTdG9y
YWdlSUQoKTsKICAgICAKICAgICBjaGVja0ZvckRlbGV0ZWRSZXNvdXJjZXMoKTsKIH0KQEAgLTEz
MDMsNyArMTMwMyw3IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlQ29weU9m
Q2FjaGUoY29uc3QgU3RyaW5nJiBjYWNoZURpcmVjdG9yeSwgQXBwCiAgICAgLy8gVHJhdmVyc2Ug
dGhlIGNhY2hlIGFuZCBhZGQgY29waWVzIG9mIGFsbCByZXNvdXJjZXMuCiAgICAgQXBwbGljYXRp
b25DYWNoZTo6UmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGNhY2hlLT5lbmQoKTsK
ICAgICBmb3IgKEFwcGxpY2F0aW9uQ2FjaGU6OlJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IGNhY2hlLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgQXBwbGljYXRp
b25DYWNoZVJlc291cmNlKiByZXNvdXJjZSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIEFw
cGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2UgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAg
ICAgIAogICAgICAgICBSZWZQdHI8QXBwbGljYXRpb25DYWNoZVJlc291cmNlPiByZXNvdXJjZUNv
cHkgPSBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OmNyZWF0ZShyZXNvdXJjZS0+dXJsKCksIHJl
c291cmNlLT5yZXNwb25zZSgpLCByZXNvdXJjZS0+dHlwZSgpLCByZXNvdXJjZS0+ZGF0YSgpLCBy
ZXNvdXJjZS0+cGF0aCgpKTsKICAgICAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvYXJjaGl2ZS9BcmNoaXZlRmFjdG9yeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
YXJjaGl2ZS9BcmNoaXZlRmFjdG9yeS5jcHAKaW5kZXggNTIxZGViMWQ3MDQ2YjUwNWY3MDc1NGZk
MmJiNWFlODcwZTc0MTQ1OS4uMmZjZjMyOTQwMjVhZTczNGUzNWUwZDE3YzY5ZTI1MTY0Mjc3NGU3
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvQXJjaGl2ZUZhY3Rv
cnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL0FyY2hpdmVGYWN0b3J5
LmNwcApAQCAtOTIsNyArOTIsNyBAQCB2b2lkIEFyY2hpdmVGYWN0b3J5OjpyZWdpc3Rlcktub3du
QXJjaGl2ZU1JTUVUeXBlcygpCiAgICAgQXJjaGl2ZU1JTUVUeXBlc01hcDo6aXRlcmF0b3IgZW5k
ID0gYXJjaGl2ZU1JTUVUeXBlcygpLmVuZCgpOwogCiAgICAgZm9yICg7IGkgIT0gZW5kOyArK2kp
Ci0gICAgICAgIG1pbWVUeXBlcy5hZGQoaS0+Zmlyc3QpOworICAgICAgICBtaW1lVHlwZXMuYWRk
KGktPmtleSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNo
ZS9DYWNoZWRSYXdSZXNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2Fj
aGVkUmF3UmVzb3VyY2UuY3BwCmluZGV4IGIwYTcwMzMwNGI1OTM3YjY2YzAxNDQwMzJkMzNkY2Iw
MWU2NjAyM2YuLjFkNDljZDA1ZTY0ZjM1YTdmN2M0YjRmZWU3ZTAyNDc5ZGU3YWEwMjggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNlLmNwcApA
QCAtMTUyLDggKzE1Miw4IEBAIGJvb2wgQ2FjaGVkUmF3UmVzb3VyY2U6OmNhblJldXNlKGNvbnN0
IFJlc291cmNlUmVxdWVzdCYgbmV3UmVxdWVzdCkgY29uc3QKIAogICAgIEhUVFBIZWFkZXJNYXA6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG5ld0hlYWRlcnMuZW5kKCk7CiAgICAgZm9yIChIVFRQSGVh
ZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpID0gbmV3SGVhZGVycy5iZWdpbigpOyBpICE9IGVuZDsg
KytpKSB7Ci0gICAgICAgIEF0b21pY1N0cmluZyBoZWFkZXJOYW1lID0gaS0+Zmlyc3Q7Ci0gICAg
ICAgIGlmIChpLT5zZWNvbmQgIT0gb2xkSGVhZGVycy5nZXQoaGVhZGVyTmFtZSkpCisgICAgICAg
IEF0b21pY1N0cmluZyBoZWFkZXJOYW1lID0gaS0+a2V5OworICAgICAgICBpZiAoaS0+dmFsdWUg
IT0gb2xkSGVhZGVycy5nZXQoaGVhZGVyTmFtZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNo
ZS9DYWNoZWRSZXNvdXJjZS5jcHAKaW5kZXggMDM2OGE3MjQ1MjVmYWZlNjQ5MDU4N2JlYjJiNGY2
ZTZlOWZjYzZlNi4uNDRjNGU1MmNjYjY3MjRmNjQ0NWMxYzgxNjI0NWZmMGJjNmEyNjZiYSAxMDA3
NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwCkBAIC01
OTAsOCArNTkwLDggQEAgdm9pZCBDYWNoZWRSZXNvdXJjZTo6c3dpdGNoQ2xpZW50c1RvUmV2YWxp
ZGF0ZWRSZXNvdXJjZSgpCiAgICAgVmVjdG9yPENhY2hlZFJlc291cmNlQ2xpZW50Kj4gY2xpZW50
c1RvTW92ZTsKICAgICBIYXNoQ291bnRlZFNldDxDYWNoZWRSZXNvdXJjZUNsaWVudCo+OjppdGVy
YXRvciBlbmQyID0gbV9jbGllbnRzLmVuZCgpOwogICAgIGZvciAoSGFzaENvdW50ZWRTZXQ8Q2Fj
aGVkUmVzb3VyY2VDbGllbnQqPjo6aXRlcmF0b3IgaXQgPSBtX2NsaWVudHMuYmVnaW4oKTsgaXQg
IT0gZW5kMjsgKytpdCkgewotICAgICAgICBDYWNoZWRSZXNvdXJjZUNsaWVudCogY2xpZW50ID0g
aXQtPmZpcnN0OwotICAgICAgICB1bnNpZ25lZCBjb3VudCA9IGl0LT5zZWNvbmQ7CisgICAgICAg
IENhY2hlZFJlc291cmNlQ2xpZW50KiBjbGllbnQgPSBpdC0+a2V5OworICAgICAgICB1bnNpZ25l
ZCBjb3VudCA9IGl0LT52YWx1ZTsKICAgICAgICAgd2hpbGUgKGNvdW50KSB7CiAgICAgICAgICAg
ICBjbGllbnRzVG9Nb3ZlLmFwcGVuZChjbGllbnQpOwogICAgICAgICAgICAgLS1jb3VudDsKQEAg
LTYyNSw5ICs2MjUsOSBAQCB2b2lkIENhY2hlZFJlc291cmNlOjp1cGRhdGVSZXNwb25zZUFmdGVy
UmV2YWxpZGF0aW9uKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHZhbAogICAgIEhUVFBIZWFkZXJN
YXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG5ld0hlYWRlcnMuZW5kKCk7CiAgICAgZm9yIChIVFRQ
SGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG5ld0hlYWRlcnMuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7CiAgICAgICAgIC8vIERvbid0IGFsbG93IDMwNCByZXNwb25zZSB0byB1cGRh
dGUgY29udGVudCBoZWFkZXJzLCB0aGVzZSBjYW4ndCBjaGFuZ2UgYnV0IHNvbWUgc2VydmVycyBz
ZW5kIHdyb25nIHZhbHVlcy4KLSAgICAgICAgaWYgKGl0LT5maXJzdC5zdGFydHNXaXRoKGNvbnRl
bnRIZWFkZXJQcmVmaXgsIGZhbHNlKSkKKyAgICAgICAgaWYgKGl0LT5rZXkuc3RhcnRzV2l0aChj
b250ZW50SGVhZGVyUHJlZml4LCBmYWxzZSkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgbV9yZXNwb25zZS5zZXRIVFRQSGVhZGVyRmllbGQoaXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsK
KyAgICAgICAgbV9yZXNwb25zZS5zZXRIVFRQSGVhZGVyRmllbGQoaXQtPmtleSwgaXQtPnZhbHVl
KTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9D
YWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlci5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hl
L0NhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyLmgKaW5kZXggOGIzNzgwYjVlNjRiMjE0MzQ2Mjg5
NmJkYTJhNmEyNjVhNWE4YTA3NC4uNzkzM2IwYjgxNGM1MjEyNTZlMDc2MGY4NjFiNDMxMDk3Yjg5
YjU5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291
cmNlQ2xpZW50V2Fsa2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hl
ZFJlc291cmNlQ2xpZW50V2Fsa2VyLmgKQEAgLTQyLDcgKzQyLDcgQEAgcHVibGljOgogICAgICAg
ICBJdGVyYXRvciBlbmQgPSBzZXQuZW5kKCk7CiAgICAgICAgIHNpemVfdCBjbGllbnRJbmRleCA9
IDA7CiAgICAgICAgIGZvciAoSXRlcmF0b3IgY3VycmVudCA9IHNldC5iZWdpbigpOyBjdXJyZW50
ICE9IGVuZDsgKytjdXJyZW50KQotICAgICAgICAgICAgbV9jbGllbnRWZWN0b3JbY2xpZW50SW5k
ZXgrK10gPSBjdXJyZW50LT5maXJzdDsKKyAgICAgICAgICAgIG1fY2xpZW50VmVjdG9yW2NsaWVu
dEluZGV4KytdID0gY3VycmVudC0+a2V5OwogICAgIH0KIAogICAgIFQqIG5leHQoKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAK
aW5kZXggODQ2ZjNhNzM5Zjk1ZDMyMDA5OGIyOWMzMGRhMzg0Yzc5ODZkMWEyMi4uM2I1MzgzZTc4
NmY0N2IwYmY3ODIzMzg0YTkwMzIwODRlNzJlMzYyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwCkBAIC0xMjgsNyArMTI4
LDcgQEAgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6On5DYWNoZWRSZXNvdXJjZUxvYWRlcigpCiAgICAg
Y2xlYXJQcmVsb2FkcygpOwogICAgIERvY3VtZW50UmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGVuZCA9
IG1fZG9jdW1lbnRSZXNvdXJjZXMuZW5kKCk7CiAgICAgZm9yIChEb2N1bWVudFJlc291cmNlTWFw
OjppdGVyYXRvciBpdCA9IG1fZG9jdW1lbnRSZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5zZXRPd25pbmdDYWNoZWRSZXNvdXJjZUxvYWRlcigw
KTsKKyAgICAgICAgaXQtPnZhbHVlLT5zZXRPd25pbmdDYWNoZWRSZXNvdXJjZUxvYWRlcigwKTsK
IAogICAgIC8vIE1ha2Ugc3VyZSBubyByZXF1ZXN0cyBzdGlsbCBwb2ludCB0byB0aGlzIENhY2hl
ZFJlc291cmNlTG9hZGVyCiAgICAgQVNTRVJUKG1fcmVxdWVzdENvdW50ID09IDApOwpAQCAtNDI4
LDcgKzQyOCw3IEBAIENhY2hlZFJlc291cmNlKiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVz
dFJlc291cmNlKENhY2hlZFJlc291cmNlOjpUeXBlIHR5cGUsCiAgICAgaWYgKG1lbW9yeUNhY2hl
KCktPmRpc2FibGVkKCkpIHsKICAgICAgICAgRG9jdW1lbnRSZXNvdXJjZU1hcDo6aXRlcmF0b3Ig
aXQgPSBtX2RvY3VtZW50UmVzb3VyY2VzLmZpbmQodXJsLnN0cmluZygpKTsKICAgICAgICAgaWYg
KGl0ICE9IG1fZG9jdW1lbnRSZXNvdXJjZXMuZW5kKCkpIHsKLSAgICAgICAgICAgIGl0LT5zZWNv
bmQtPnNldE93bmluZ0NhY2hlZFJlc291cmNlTG9hZGVyKDApOworICAgICAgICAgICAgaXQtPnZh
bHVlLT5zZXRPd25pbmdDYWNoZWRSZXNvdXJjZUxvYWRlcigwKTsKICAgICAgICAgICAgIG1fZG9j
dW1lbnRSZXNvdXJjZXMucmVtb3ZlKGl0KTsKICAgICAgICAgfQogICAgIH0KQEAgLTY1Myw3ICs2
NTMsNyBAQCB2b2lkIENhY2hlZFJlc291cmNlTG9hZGVyOjpzZXRBdXRvTG9hZEltYWdlcyhib29s
IGVuYWJsZSkKIAogICAgIERvY3VtZW50UmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fZG9j
dW1lbnRSZXNvdXJjZXMuZW5kKCk7CiAgICAgZm9yIChEb2N1bWVudFJlc291cmNlTWFwOjppdGVy
YXRvciBpdCA9IG1fZG9jdW1lbnRSZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7
Ci0gICAgICAgIENhY2hlZFJlc291cmNlKiByZXNvdXJjZSA9IGl0LT5zZWNvbmQuZ2V0KCk7Cisg
ICAgICAgIENhY2hlZFJlc291cmNlKiByZXNvdXJjZSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAg
ICAgaWYgKHJlc291cmNlLT50eXBlKCkgPT0gQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3VyY2Up
IHsKICAgICAgICAgICAgIENhY2hlZEltYWdlKiBpbWFnZSA9IGNvbnN0X2Nhc3Q8Q2FjaGVkSW1h
Z2UqPihzdGF0aWNfY2FzdDxjb25zdCBDYWNoZWRJbWFnZSo+KHJlc291cmNlKSk7CiAKQEAgLTY3
Myw3ICs2NzMsNyBAQCB2b2lkIENhY2hlZFJlc291cmNlTG9hZGVyOjpyZW1vdmVDYWNoZWRSZXNv
dXJjZShDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UpIGNvbnN0CiAjaWZuZGVmIE5ERUJVRwogICAg
IERvY3VtZW50UmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9kb2N1bWVudFJlc291cmNlcy5m
aW5kKHJlc291cmNlLT51cmwoKSk7CiAgICAgaWYgKGl0ICE9IG1fZG9jdW1lbnRSZXNvdXJjZXMu
ZW5kKCkpCi0gICAgICAgIEFTU0VSVChpdC0+c2Vjb25kLmdldCgpID09IHJlc291cmNlKTsKKyAg
ICAgICAgQVNTRVJUKGl0LT52YWx1ZS5nZXQoKSA9PSByZXNvdXJjZSk7CiAjZW5kaWYKICAgICBt
X2RvY3VtZW50UmVzb3VyY2VzLnJlbW92ZShyZXNvdXJjZS0+dXJsKCkpOwogfQpAQCAtNzAzLDkg
KzcwMyw5IEBAIHZvaWQgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmdhcmJhZ2VDb2xsZWN0RG9jdW1l
bnRSZXNvdXJjZXNUaW1lckZpcmVkKFRpbWVyPENhY2hlCiAgICAgU3RyaW5nVmVjdG9yIHJlc291
cmNlc1RvRGVsZXRlOwogCiAgICAgZm9yIChEb2N1bWVudFJlc291cmNlTWFwOjppdGVyYXRvciBp
dCA9IG1fZG9jdW1lbnRSZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gbV9kb2N1bWVudFJlc291cmNl
cy5lbmQoKTsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnNlY29uZC0+aGFzT25lSGFuZGxlKCkp
IHsKLSAgICAgICAgICAgIHJlc291cmNlc1RvRGVsZXRlLmFwcGVuZChpdC0+Zmlyc3QpOwotICAg
ICAgICAgICAgaXQtPnNlY29uZC0+c2V0T3duaW5nQ2FjaGVkUmVzb3VyY2VMb2FkZXIoMCk7Cisg
ICAgICAgIGlmIChpdC0+dmFsdWUtPmhhc09uZUhhbmRsZSgpKSB7CisgICAgICAgICAgICByZXNv
dXJjZXNUb0RlbGV0ZS5hcHBlbmQoaXQtPmtleSk7CisgICAgICAgICAgICBpdC0+dmFsdWUtPnNl
dE93bmluZ0NhY2hlZFJlc291cmNlTG9hZGVyKDApOwogICAgICAgICB9CiAgICAgfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmNwcAppbmRleCAxMTI3NWUwNmQ4
MTIyM2M0NzQxODZlNTNmOGQ3Y2JiMzYxY2YwZGVlLi5kMmRiNGRhNzdkYzY4OTRjZmVjNWFkNjY5
NjU5NjllZjQ0MDhjZTUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUv
TWVtb3J5Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9NZW1vcnlD
YWNoZS5jcHAKQEAgLTUzOCw3ICs1MzgsNyBAQCB2b2lkIE1lbW9yeUNhY2hlOjpyZW1vdmVSZXNv
dXJjZXNXaXRoT3JpZ2luKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCiAKICAgICBDYWNoZWRSZXNv
dXJjZU1hcDo6aXRlcmF0b3IgZSA9IG1fcmVzb3VyY2VzLmVuZCgpOwogICAgIGZvciAoQ2FjaGVk
UmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZTsg
KytpdCkgewotICAgICAgICBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UgPSBpdC0+c2Vjb25kOwor
ICAgICAgICBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UgPSBpdC0+dmFsdWU7CiAgICAgICAgIFJl
ZlB0cjxTZWN1cml0eU9yaWdpbj4gcmVzb3VyY2VPcmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6Y3Jl
YXRlRnJvbVN0cmluZyhyZXNvdXJjZS0+dXJsKCkpOwogICAgICAgICBpZiAoIXJlc291cmNlT3Jp
Z2luKQogICAgICAgICAgICAgY29udGludWU7CkBAIC01NTQsNyArNTU0LDcgQEAgdm9pZCBNZW1v
cnlDYWNoZTo6Z2V0T3JpZ2luc1dpdGhDYWNoZShTZWN1cml0eU9yaWdpblNldCYgb3JpZ2lucykK
IHsKICAgICBDYWNoZWRSZXNvdXJjZU1hcDo6aXRlcmF0b3IgZSA9IG1fcmVzb3VyY2VzLmVuZCgp
OwogICAgIGZvciAoQ2FjaGVkUmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMu
YmVnaW4oKTsgaXQgIT0gZTsgKytpdCkKLSAgICAgICAgb3JpZ2lucy5hZGQoU2VjdXJpdHlPcmln
aW46OmNyZWF0ZUZyb21TdHJpbmcoaXQtPnNlY29uZC0+dXJsKCkpKTsKKyAgICAgICAgb3JpZ2lu
cy5hZGQoU2VjdXJpdHlPcmlnaW46OmNyZWF0ZUZyb21TdHJpbmcoaXQtPnZhbHVlLT51cmwoKSkp
OwogfQogCiB2b2lkIE1lbW9yeUNhY2hlOjpyZW1vdmVGcm9tTGl2ZURlY29kZWRSZXNvdXJjZXNM
aXN0KENhY2hlZFJlc291cmNlKiByZXNvdXJjZSkKQEAgLTY4Nyw3ICs2ODcsNyBAQCBNZW1vcnlD
YWNoZTo6U3RhdGlzdGljcyBNZW1vcnlDYWNoZTo6Z2V0U3RhdGlzdGljcygpCiAgICAgU3RhdGlz
dGljcyBzdGF0czsKICAgICBDYWNoZWRSZXNvdXJjZU1hcDo6aXRlcmF0b3IgZSA9IG1fcmVzb3Vy
Y2VzLmVuZCgpOwogICAgIGZvciAoQ2FjaGVkUmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGkgPSBtX3Jl
c291cmNlcy5iZWdpbigpOyBpICE9IGU7ICsraSkgewotICAgICAgICBDYWNoZWRSZXNvdXJjZSog
cmVzb3VyY2UgPSBpLT5zZWNvbmQ7CisgICAgICAgIENhY2hlZFJlc291cmNlKiByZXNvdXJjZSA9
IGktPnZhbHVlOwogICAgICAgICBzd2l0Y2ggKHJlc291cmNlLT50eXBlKCkpIHsKICAgICAgICAg
Y2FzZSBDYWNoZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJjZToKICAgICAgICAgICAgIHN0YXRzLmlt
YWdlcy5hZGRSZXNvdXJjZShyZXNvdXJjZSk7CkBAIC03MjMsNyArNzIzLDcgQEAgdm9pZCBNZW1v
cnlDYWNoZTo6c2V0RGlzYWJsZWQoYm9vbCBkaXNhYmxlZCkKICAgICAgICAgQ2FjaGVkUmVzb3Vy
Y2VNYXA6Oml0ZXJhdG9yIGkgPSBtX3Jlc291cmNlcy5iZWdpbigpOwogICAgICAgICBpZiAoaSA9
PSBtX3Jlc291cmNlcy5lbmQoKSkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBldmljdChp
LT5zZWNvbmQpOworICAgICAgICBldmljdChpLT52YWx1ZSk7CiAgICAgfQogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmNwcAppbmRleCBjZTRmMDEwNDY2YzBm
YjhkMWRkNmUyYzVjZjJjZDJlOWQzMTJlNjg2Li41YmRhNjMzMWUyOTRiNDc4NGI1NTYyNzVkMzEy
NWFhNGRlMTA4ZDc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29u
RGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFz
ZS5jcHAKQEAgLTE4NSw3ICsxODUsNyBAQCB2b2lkIEljb25EYXRhYmFzZTo6cmVtb3ZlQWxsSWNv
bnMoKQogICAgICAgICBIYXNoTWFwPFN0cmluZywgUGFnZVVSTFJlY29yZCo+OjppdGVyYXRvciBp
dGVyID0gbV9wYWdlVVJMVG9SZWNvcmRNYXAuYmVnaW4oKTsKICAgICAgICAgSGFzaE1hcDxTdHJp
bmcsIFBhZ2VVUkxSZWNvcmQqPjo6aXRlcmF0b3IgZW5kID0gbV9wYWdlVVJMVG9SZWNvcmRNYXAu
ZW5kKCk7CiAgICAgICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKQotICAgICAgICAgICAg
KCppdGVyKS5zZWNvbmQtPnNldEljb25SZWNvcmQoMCk7CisgICAgICAgICAgICAoKml0ZXIpLnZh
bHVlLT5zZXRJY29uUmVjb3JkKDApOwogICAgICAgICAgICAgCiAgICAgICAgIC8vIENsZWFyIHRo
ZSBpY29uVVJMIC0+IEljb25SZWNvcmQgbWFwCiAgICAgICAgIG1faWNvblVSTFRvUmVjb3JkTWFw
LmNsZWFyKCk7CkBAIC03NTQsNyArNzU0LDcgQEAgc2l6ZV90IEljb25EYXRhYmFzZTo6aWNvblJl
Y29yZENvdW50V2l0aERhdGEoKQogICAgIEhhc2hNYXA8U3RyaW5nLCBJY29uUmVjb3JkKj46Oml0
ZXJhdG9yIGVuZCA9IG1faWNvblVSTFRvUmVjb3JkTWFwLmVuZCgpOwogICAgIAogICAgIGZvciAo
OyBpICE9IGVuZDsgKytpKQotICAgICAgICByZXN1bHQgKz0gKCgqaSkuc2Vjb25kLT5pbWFnZURh
dGFTdGF0dXMoKSA9PSBJbWFnZURhdGFTdGF0dXNQcmVzZW50KTsKKyAgICAgICAgcmVzdWx0ICs9
ICgoKmkpLnZhbHVlLT5pbWFnZURhdGFTdGF0dXMoKSA9PSBJbWFnZURhdGFTdGF0dXNQcmVzZW50
KTsKICAgICAgICAgICAgIAogICAgIHJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdp
bmRvdy5jcHAKaW5kZXggOWI4NGI2NzdlNDRkMTE0YjgxNzcyZmRhY2UwZTA2YmE0YzE0OTNkNy4u
NTdlYzU1ZWU0OGFlN2E3NTQzYjQwZGNiNDFjNDc4ODAxMjlmMjMzOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RE9NV2luZG93LmNwcApAQCAtMjQ2LDcgKzI0Niw3IEBAIGJvb2wgRE9NV2luZG93OjpkaXNwYXRj
aEFsbFBlbmRpbmdCZWZvcmVVbmxvYWRFdmVudHMoKQogICAgIFZlY3RvcjxSZWZQdHI8RE9NV2lu
ZG93PiA+IHdpbmRvd3M7CiAgICAgRE9NV2luZG93U2V0OjppdGVyYXRvciBlbmQgPSBzZXQuZW5k
KCk7CiAgICAgZm9yIChET01XaW5kb3dTZXQ6Oml0ZXJhdG9yIGl0ID0gc2V0LmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkKLSAgICAgICAgd2luZG93cy5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAg
ICAgd2luZG93cy5hcHBlbmQoaXQtPmtleSk7CiAKICAgICBzaXplX3Qgc2l6ZSA9IHdpbmRvd3Mu
c2l6ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CkBAIC0yODgs
NyArMjg4LDcgQEAgdm9pZCBET01XaW5kb3c6OmRpc3BhdGNoQWxsUGVuZGluZ1VubG9hZEV2ZW50
cygpCiAgICAgVmVjdG9yPFJlZlB0cjxET01XaW5kb3c+ID4gd2luZG93czsKICAgICBET01XaW5k
b3dTZXQ6Oml0ZXJhdG9yIGVuZCA9IHNldC5lbmQoKTsKICAgICBmb3IgKERPTVdpbmRvd1NldDo6
aXRlcmF0b3IgaXQgPSBzZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICB3aW5k
b3dzLmFwcGVuZChpdC0+Zmlyc3QpOworICAgICAgICB3aW5kb3dzLmFwcGVuZChpdC0+a2V5KTsK
IAogICAgIHNpemVfdCBzaXplID0gd2luZG93cy5zaXplKCk7CiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBzaXplOyArK2kpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZl
bnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAppbmRl
eCBiNjUxNzJmNTVkYTc5YmI5NDVlNzY0YzIyNTdlMDA1ZWI0YWJjOTYwLi41MGZmOTUwYTU2NDg2
MDBhMGY2Y2ZiYzdhNTM2MTJlNDYwYzMyZjZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRs
ZXIuY3BwCkBAIC0zNTQzLDcgKzM1NDMsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlVG91
Y2hFdmVudChjb25zdCBQbGF0Zm9ybVRvdWNoRXZlbnQmIGV2ZW50KQogICAgICAgICAvLyByZWxl
YXNlZCBvciBjYW5jZWxsZWQgaXQgd2lsbCBvbmx5IGFwcGVhciBpbiB0aGUgY2hhbmdlZFRvdWNo
ZXMgbGlzdC4KICAgICAgICAgaWYgKHBvaW50U3RhdGUgIT0gUGxhdGZvcm1Ub3VjaFBvaW50OjpU
b3VjaFJlbGVhc2VkICYmIHBvaW50U3RhdGUgIT0gUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaENh
bmNlbGxlZCkgewogICAgICAgICAgICAgdG91Y2hlcy0+YXBwZW5kKHRvdWNoKTsKLSAgICAgICAg
ICAgIHRhcmdldFRvdWNoZXNJdGVyYXRvci0+c2Vjb25kLT5hcHBlbmQodG91Y2gpOworICAgICAg
ICAgICAgdGFyZ2V0VG91Y2hlc0l0ZXJhdG9yLT52YWx1ZS0+YXBwZW5kKHRvdWNoKTsKICAgICAg
ICAgfQogCiAgICAgICAgIC8vIE5vdyBidWlsZCB1cCB0aGUgY29ycmVjdCBsaXN0IGZvciBjaGFu
Z2VkVG91Y2hlcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKaW5kZXggNWI5YmZlODAwODdkZWQzNjViMjA1
YjRlZmYwNjc0NTc5MDNjMDNmNy4uYTcyZjE3YTQxOWU3NmMxMzlkMWMxOWUwY2MyYmMzY2MxMTQz
MjE4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKQEAgLTU2Niw3ICs1NjYsNyBAQCB2b2lkIEZyYW1l
OjppbmplY3RVc2VyU2NyaXB0cyhVc2VyU2NyaXB0SW5qZWN0aW9uVGltZSBpbmplY3Rpb25UaW1l
KQogICAgICAgICByZXR1cm47CiAgICAgVXNlclNjcmlwdE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gdXNlclNjcmlwdHMtPmVuZCgpOwogICAgIGZvciAoVXNlclNjcmlwdE1hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSB1c2VyU2NyaXB0cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAg
ICBpbmplY3RVc2VyU2NyaXB0c0ZvcldvcmxkKGl0LT5maXJzdC5nZXQoKSwgKml0LT5zZWNvbmQs
IGluamVjdGlvblRpbWUpOworICAgICAgICBpbmplY3RVc2VyU2NyaXB0c0ZvcldvcmxkKGl0LT5r
ZXkuZ2V0KCksICppdC0+dmFsdWUsIGluamVjdGlvblRpbWUpOwogfQogCiB2b2lkIEZyYW1lOjpp
bmplY3RVc2VyU2NyaXB0c0ZvcldvcmxkKERPTVdyYXBwZXJXb3JsZCogd29ybGQsIGNvbnN0IFVz
ZXJTY3JpcHRWZWN0b3ImIHVzZXJTY3JpcHRzLCBVc2VyU2NyaXB0SW5qZWN0aW9uVGltZSBpbmpl
Y3Rpb25UaW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlR3JvdXAuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlR3JvdXAuY3BwCmluZGV4IGY5MzljOWJmZDJhMzc2
MTlmNjU3N2JmN2QyNWZkZjE3MmIzYTA3MzcuLjY4OTYwZDE5OTE1NWRlNzQyOWU4MDQ1MmJkY2Vi
YTViNzM4ZDEzMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5jcHAKQEAgLTkzLDEyICs5Mywx
MiBAQCBQYWdlR3JvdXAqIFBhZ2VHcm91cDo6cGFnZUdyb3VwKGNvbnN0IFN0cmluZyYgZ3JvdXBO
YW1lKQogICAgIFBhZ2VHcm91cE1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IHBhZ2VHcm91cHMtPmFk
ZChncm91cE5hbWUsIDApOwogCiAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAg
IEFTU0VSVCghcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOwotICAgICAgICByZXN1bHQuaXRlcmF0
b3ItPnNlY29uZCA9IG5ldyBQYWdlR3JvdXAoZ3JvdXBOYW1lKTsKKyAgICAgICAgQVNTRVJUKCFy
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9
IG5ldyBQYWdlR3JvdXAoZ3JvdXBOYW1lKTsKICAgICB9CiAKLSAgICBBU1NFUlQocmVzdWx0Lml0
ZXJhdG9yLT5zZWNvbmQpOwotICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAg
ICBBU1NFUlQocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CisgICAgcmV0dXJuIHJlc3VsdC5pdGVy
YXRvci0+dmFsdWU7CiB9CiAKIHZvaWQgUGFnZUdyb3VwOjpjbG9zZUxvY2FsU3RvcmFnZSgpCkBA
IC0xMDksOCArMTA5LDggQEAgdm9pZCBQYWdlR3JvdXA6OmNsb3NlTG9jYWxTdG9yYWdlKCkKICAg
ICBQYWdlR3JvdXBNYXA6Oml0ZXJhdG9yIGVuZCA9IHBhZ2VHcm91cHMtPmVuZCgpOwogCiAgICAg
Zm9yIChQYWdlR3JvdXBNYXA6Oml0ZXJhdG9yIGl0ID0gcGFnZUdyb3Vwcy0+YmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kLT5oYXNMb2NhbFN0b3JhZ2Uo
KSkKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPmxvY2FsU3RvcmFnZSgpLT5jbG9zZSgpOworICAg
ICAgICBpZiAoaXQtPnZhbHVlLT5oYXNMb2NhbFN0b3JhZ2UoKSkKKyAgICAgICAgICAgIGl0LT52
YWx1ZS0+bG9jYWxTdG9yYWdlKCktPmNsb3NlKCk7CiAgICAgfQogfQogCkBAIC0xMjEsOCArMTIx
LDggQEAgdm9pZCBQYWdlR3JvdXA6OmNsZWFyTG9jYWxTdG9yYWdlRm9yQWxsT3JpZ2lucygpCiAK
ICAgICBQYWdlR3JvdXBNYXA6Oml0ZXJhdG9yIGVuZCA9IHBhZ2VHcm91cHMtPmVuZCgpOwogICAg
IGZvciAoUGFnZUdyb3VwTWFwOjppdGVyYXRvciBpdCA9IHBhZ2VHcm91cHMtPmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnNlY29uZC0+aGFzTG9jYWxTdG9yYWdl
KCkpCi0gICAgICAgICAgICBpdC0+c2Vjb25kLT5sb2NhbFN0b3JhZ2UoKS0+Y2xlYXJBbGxPcmln
aW5zRm9yRGVsZXRpb24oKTsKKyAgICAgICAgaWYgKGl0LT52YWx1ZS0+aGFzTG9jYWxTdG9yYWdl
KCkpCisgICAgICAgICAgICBpdC0+dmFsdWUtPmxvY2FsU3RvcmFnZSgpLT5jbGVhckFsbE9yaWdp
bnNGb3JEZWxldGlvbigpOwogICAgIH0KIH0KIApAQCAtMTMzLDggKzEzMyw4IEBAIHZvaWQgUGFn
ZUdyb3VwOjpjbGVhckxvY2FsU3RvcmFnZUZvck9yaWdpbihTZWN1cml0eU9yaWdpbiogb3JpZ2lu
KQogCiAgICAgUGFnZUdyb3VwTWFwOjppdGVyYXRvciBlbmQgPSBwYWdlR3JvdXBzLT5lbmQoKTsK
ICAgICBmb3IgKFBhZ2VHcm91cE1hcDo6aXRlcmF0b3IgaXQgPSBwYWdlR3JvdXBzLT5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQtPmhhc0xvY2FsU3Rv
cmFnZSgpKQotICAgICAgICAgICAgaXQtPnNlY29uZC0+bG9jYWxTdG9yYWdlKCktPmNsZWFyT3Jp
Z2luRm9yRGVsZXRpb24ob3JpZ2luKTsKKyAgICAgICAgaWYgKGl0LT52YWx1ZS0+aGFzTG9jYWxT
dG9yYWdlKCkpCisgICAgICAgICAgICBpdC0+dmFsdWUtPmxvY2FsU3RvcmFnZSgpLT5jbGVhck9y
aWdpbkZvckRlbGV0aW9uKG9yaWdpbik7CiAgICAgfSAgICAKIH0KICAgICAKQEAgLTE0NSw4ICsx
NDUsOCBAQCB2b2lkIFBhZ2VHcm91cDo6c3luY0xvY2FsU3RvcmFnZSgpCiAKICAgICBQYWdlR3Jv
dXBNYXA6Oml0ZXJhdG9yIGVuZCA9IHBhZ2VHcm91cHMtPmVuZCgpOwogICAgIGZvciAoUGFnZUdy
b3VwTWFwOjppdGVyYXRvciBpdCA9IHBhZ2VHcm91cHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgewotICAgICAgICBpZiAoaXQtPnNlY29uZC0+aGFzTG9jYWxTdG9yYWdlKCkpCi0gICAgICAg
ICAgICBpdC0+c2Vjb25kLT5sb2NhbFN0b3JhZ2UoKS0+c3luYygpOworICAgICAgICBpZiAoaXQt
PnZhbHVlLT5oYXNMb2NhbFN0b3JhZ2UoKSkKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+bG9jYWxT
dG9yYWdlKCktPnN5bmMoKTsKICAgICB9CiB9CiAKQEAgLTI2OSw3ICsyNjksNyBAQCB2b2lkIFBh
Z2VHcm91cDo6YWRkVXNlclNjcmlwdFRvV29ybGQoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCwgY29u
c3QgU3RyaW5nJiBzb3VyYwogICAgIE93blB0cjxVc2VyU2NyaXB0PiB1c2VyU2NyaXB0ID0gYWRv
cHRQdHIobmV3IFVzZXJTY3JpcHQoc291cmNlLCB1cmwsIHdoaXRlbGlzdCwgYmxhY2tsaXN0LCBp
bmplY3Rpb25UaW1lLCBpbmplY3RlZEZyYW1lcykpOwogICAgIGlmICghbV91c2VyU2NyaXB0cykK
ICAgICAgICAgbV91c2VyU2NyaXB0cyA9IGFkb3B0UHRyKG5ldyBVc2VyU2NyaXB0TWFwKTsKLSAg
ICBPd25QdHI8VXNlclNjcmlwdFZlY3Rvcj4mIHNjcmlwdHNJbldvcmxkID0gbV91c2VyU2NyaXB0
cy0+YWRkKHdvcmxkLCBudWxscHRyKS5pdGVyYXRvci0+c2Vjb25kOworICAgIE93blB0cjxVc2Vy
U2NyaXB0VmVjdG9yPiYgc2NyaXB0c0luV29ybGQgPSBtX3VzZXJTY3JpcHRzLT5hZGQod29ybGQs
IG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoIXNjcmlwdHNJbldvcmxkKQogICAg
ICAgICBzY3JpcHRzSW5Xb3JsZCA9IGFkb3B0UHRyKG5ldyBVc2VyU2NyaXB0VmVjdG9yKTsKICAg
ICBzY3JpcHRzSW5Xb3JsZC0+YXBwZW5kKHVzZXJTY3JpcHQucmVsZWFzZSgpKTsKQEAgLTI4Niw3
ICsyODYsNyBAQCB2b2lkIFBhZ2VHcm91cDo6YWRkVXNlclN0eWxlU2hlZXRUb1dvcmxkKERPTVdy
YXBwZXJXb3JsZCogd29ybGQsIGNvbnN0IFN0cmluZyYgcwogICAgIE93blB0cjxVc2VyU3R5bGVT
aGVldD4gdXNlclN0eWxlU2hlZXQgPSBhZG9wdFB0cihuZXcgVXNlclN0eWxlU2hlZXQoc291cmNl
LCB1cmwsIHdoaXRlbGlzdCwgYmxhY2tsaXN0LCBpbmplY3RlZEZyYW1lcywgbGV2ZWwpKTsKICAg
ICBpZiAoIW1fdXNlclN0eWxlU2hlZXRzKQogICAgICAgICBtX3VzZXJTdHlsZVNoZWV0cyA9IGFk
b3B0UHRyKG5ldyBVc2VyU3R5bGVTaGVldE1hcCk7Ci0gICAgT3duUHRyPFVzZXJTdHlsZVNoZWV0
VmVjdG9yPiYgc3R5bGVTaGVldHNJbldvcmxkID0gbV91c2VyU3R5bGVTaGVldHMtPmFkZCh3b3Js
ZCwgbnVsbHB0cikuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBPd25QdHI8VXNlclN0eWxlU2hlZXRW
ZWN0b3I+JiBzdHlsZVNoZWV0c0luV29ybGQgPSBtX3VzZXJTdHlsZVNoZWV0cy0+YWRkKHdvcmxk
LCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCFzdHlsZVNoZWV0c0luV29ybGQp
CiAgICAgICAgIHN0eWxlU2hlZXRzSW5Xb3JsZCA9IGFkb3B0UHRyKG5ldyBVc2VyU3R5bGVTaGVl
dFZlY3Rvcik7CiAgICAgc3R5bGVTaGVldHNJbldvcmxkLT5hcHBlbmQodXNlclN0eWxlU2hlZXQu
cmVsZWFzZSgpKTsKQEAgLTMwNiw3ICszMDYsNyBAQCB2b2lkIFBhZ2VHcm91cDo6cmVtb3ZlVXNl
clNjcmlwdEZyb21Xb3JsZChET01XcmFwcGVyV29ybGQqIHdvcmxkLCBjb25zdCBLVVJMJiB1cgog
ICAgIGlmIChpdCA9PSBtX3VzZXJTY3JpcHRzLT5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogICAg
IAotICAgIFVzZXJTY3JpcHRWZWN0b3IqIHNjcmlwdHMgPSBpdC0+c2Vjb25kLmdldCgpOworICAg
IFVzZXJTY3JpcHRWZWN0b3IqIHNjcmlwdHMgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgZm9yIChp
bnQgaSA9IHNjcmlwdHMtPnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7CiAgICAgICAgIGlmIChz
Y3JpcHRzLT5hdChpKS0+dXJsKCkgPT0gdXJsKQogICAgICAgICAgICAgc2NyaXB0cy0+cmVtb3Zl
KGkpOwpAQCAtMzI4LDcgKzMyOCw3IEBAIHZvaWQgUGFnZUdyb3VwOjpyZW1vdmVVc2VyU3R5bGVT
aGVldEZyb21Xb3JsZChET01XcmFwcGVyV29ybGQqIHdvcmxkLCBjb25zdCBLVVJMCiAgICAgaWYg
KGl0ID09IG1fdXNlclN0eWxlU2hlZXRzLT5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAot
ICAgIFVzZXJTdHlsZVNoZWV0VmVjdG9yKiBzdHlsZXNoZWV0cyA9IGl0LT5zZWNvbmQuZ2V0KCk7
CisgICAgVXNlclN0eWxlU2hlZXRWZWN0b3IqIHN0eWxlc2hlZXRzID0gaXQtPnZhbHVlLmdldCgp
OwogICAgIGZvciAoaW50IGkgPSBzdHlsZXNoZWV0cy0+c2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkp
IHsKICAgICAgICAgaWYgKHN0eWxlc2hlZXRzLT5hdChpKS0+dXJsKCkgPT0gdXJsKSB7CiAgICAg
ICAgICAgICBzdHlsZXNoZWV0cy0+cmVtb3ZlKGkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJp
YWxpemVyLmNwcAppbmRleCAxMzU1ZmExZTE2ZGJjNTk5MjkzNDJhNTM2YTU4YmZmZTdmZjYzMjdj
Li44NzQ5NmJlYWNjYmYwYjc5NWI2NGFhMjczMDQ4NTBiMmZmNGZmYzZhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcApAQCAtMzM4LDcgKzMzOCw3IEBAIEtVUkwgUGFnZVNl
cmlhbGl6ZXI6OnVybEZvckJsYW5rRnJhbWUoRnJhbWUqIGZyYW1lKQogewogICAgIEhhc2hNYXA8
RnJhbWUqLCBLVVJMPjo6aXRlcmF0b3IgaXRlciA9IG1fYmxhbmtGcmFtZVVSTHMuZmluZChmcmFt
ZSk7CiAgICAgaWYgKGl0ZXIgIT0gbV9ibGFua0ZyYW1lVVJMcy5lbmQoKSkKLSAgICAgICAgcmV0
dXJuIGl0ZXItPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGl0ZXItPnZhbHVlOwogICAgIFN0cmlu
ZyB1cmwgPSAid3ljaXd5ZzovL2ZyYW1lLyIgKyBTdHJpbmc6Om51bWJlcihtX2JsYW5rRnJhbWVD
b3VudGVyKyspOwogICAgIEtVUkwgZmFrZVVSTChQYXJzZWRVUkxTdHJpbmcsIHVybCk7CiAgICAg
bV9ibGFua0ZyYW1lVVJMcy5hZGQoZnJhbWUsIGZha2VVUkwpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9TZWN1cml0eVBvbGljeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Nl
Y3VyaXR5UG9saWN5LmNwcAppbmRleCBjMmE1YWIxMTQzNWVmNmRiMDU3NjhjNzZjYTAzNTdiNTYy
NTgzMzEyLi41YjM2ZjRmNzE2YzQ0YmZiMDlmMjBlNjMyY2MwZDAzODZmM2NjYTNjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5UG9saWN5LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1NlY3VyaXR5UG9saWN5LmNwcApAQCAtMTMzLDkgKzEzMyw5IEBAIHZvaWQg
U2VjdXJpdHlQb2xpY3k6OmFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KGNvbnN0IFNlY3Vy
aXR5T3JpZ2luJiBzb3VyY2VPCiAgICAgU3RyaW5nIHNvdXJjZVN0cmluZyA9IHNvdXJjZU9yaWdp
bi50b1N0cmluZygpOwogICAgIE9yaWdpbkFjY2Vzc01hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG9y
aWdpbkFjY2Vzc01hcCgpLmFkZChzb3VyY2VTdHJpbmcsIG51bGxwdHIpOwogICAgIGlmIChyZXN1
bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBhZG9wdFB0
cihuZXcgT3JpZ2luQWNjZXNzV2hpdGVMaXN0KTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZSA9IGFkb3B0UHRyKG5ldyBPcmlnaW5BY2Nlc3NXaGl0ZUxpc3QpOwogCi0gICAgT3JpZ2lu
QWNjZXNzV2hpdGVMaXN0KiBsaXN0ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQuZ2V0KCk7Cisg
ICAgT3JpZ2luQWNjZXNzV2hpdGVMaXN0KiBsaXN0ID0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5n
ZXQoKTsKICAgICBsaXN0LT5hcHBlbmQoT3JpZ2luQWNjZXNzRW50cnkoZGVzdGluYXRpb25Qcm90
b2NvbCwgZGVzdGluYXRpb25Eb21haW4sIGFsbG93RGVzdGluYXRpb25TdWJkb21haW5zID8gT3Jp
Z2luQWNjZXNzRW50cnk6OkFsbG93U3ViZG9tYWlucyA6IE9yaWdpbkFjY2Vzc0VudHJ5OjpEaXNh
bGxvd1N1YmRvbWFpbnMpKTsKIH0KIApAQCAtMTUyLDcgKzE1Miw3IEBAIHZvaWQgU2VjdXJpdHlQ
b2xpY3k6OnJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KGNvbnN0IFNlY3VyaXR5T3Jp
Z2luJiBzb3VyCiAgICAgaWYgKGl0ID09IG1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgT3JpZ2luQWNjZXNzV2hpdGVMaXN0KiBsaXN0ID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICBP
cmlnaW5BY2Nlc3NXaGl0ZUxpc3QqIGxpc3QgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgc2l6ZV90
IGluZGV4ID0gbGlzdC0+ZmluZChPcmlnaW5BY2Nlc3NFbnRyeShkZXN0aW5hdGlvblByb3RvY29s
LCBkZXN0aW5hdGlvbkRvbWFpbiwgYWxsb3dEZXN0aW5hdGlvblN1YmRvbWFpbnMgPyBPcmlnaW5B
Y2Nlc3NFbnRyeTo6QWxsb3dTdWJkb21haW5zIDogT3JpZ2luQWNjZXNzRW50cnk6OkRpc2FsbG93
U3ViZG9tYWlucykpOwogICAgIGlmIChpbmRleCA9PSBub3RGb3VuZCkKICAgICAgICAgcmV0dXJu
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcAppbmRleCA3YTljY2VmYjc4MTljMTBjZDI0NTYyY2Mx
MzQ1MzlmOWE1MmQ1NzdkLi5kM2Q2MGE1ZmI5ZGM1OGE2Mzk3MTFmNWY4NWNkYTk1YWJmMDNlNWUw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcApAQCAtNjAsNyArNjAsNyBAQCBzdGF0aWMgaW5s
aW5lIHZvaWQgc2V0R2VuZXJpY0ZvbnRGYW1pbHlNYXAoU2NyaXB0Rm9udEZhbWlseU1hcCYgZm9u
dE1hcCwgY29uc3QgQQogICAgICAgICBpZiAoaXQgPT0gZm9udE1hcC5lbmQoKSkKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgZm9udE1hcC5yZW1vdmUoaXQpOwotICAgIH0gZWxzZSBpZiAo
aXQgIT0gZm9udE1hcC5lbmQoKSAmJiBpdC0+c2Vjb25kID09IGZhbWlseSkKKyAgICB9IGVsc2Ug
aWYgKGl0ICE9IGZvbnRNYXAuZW5kKCkgJiYgaXQtPnZhbHVlID09IGZhbWlseSkKICAgICAgICAg
cmV0dXJuOwogICAgIGVsc2UKICAgICAgICAgZm9udE1hcC5zZXQoc3RhdGljX2Nhc3Q8aW50Pihz
Y3JpcHQpLCBmYW1pbHkpOwpAQCAtNzMsNyArNzMsNyBAQCBzdGF0aWMgaW5saW5lIGNvbnN0IEF0
b21pY1N0cmluZyYgZ2V0R2VuZXJpY0ZvbnRGYW1pbHlGb3JTY3JpcHQoY29uc3QgU2NyaXB0Rm9u
dAogewogICAgIFNjcmlwdEZvbnRGYW1pbHlNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZm9udE1h
cC5maW5kKHN0YXRpY19jYXN0PGludD4oc2NyaXB0KSk7CiAgICAgaWYgKGl0ICE9IGZvbnRNYXAu
ZW5kKCkpCi0gICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gaXQtPnZh
bHVlOwogICAgIGlmIChzY3JpcHQgIT0gVVNDUklQVF9DT01NT04pCiAgICAgICAgIHJldHVybiBn
ZXRHZW5lcmljRm9udEZhbWlseUZvclNjcmlwdChmb250TWFwLCBVU0NSSVBUX0NPTU1PTik7CiAg
ICAgcmV0dXJuIGVtcHR5QXRvbTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU3Bl
ZWNoSW5wdXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TcGVlY2hJbnB1dC5jcHAKaW5kZXgg
MDEyOGVmOGE0MGE0MjQzNTRhYjVmOGU1MGJhOGVjYzYyMjU3YjNjOS4uODMyOGM1ZDRkZjMyOTk0
MmI1OWYzZWNjMjI1MzU2OGNlMmE4YTExZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9TcGVlY2hJbnB1dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TcGVlY2hJbnB1dC5j
cHAKQEAgLTYyLDcgKzYyLDcgQEAgaW50IFNwZWVjaElucHV0OjpyZWdpc3Rlckxpc3RlbmVyKFNw
ZWVjaElucHV0TGlzdGVuZXIqIGxpc3RlbmVyKQogI2lmIGRlZmluZWQoREVCVUcpCiAgICAgLy8g
Q2hlY2sgaWYgYWxyZWFkeSBwcmVzZW50LgogICAgIGZvciAoSGFzaE1hcDxpbnQsIFNwZWVjaElu
cHV0TGlzdGVuZXIqPjo6aXRlcmF0b3IgaXQgPSBtX2xpc3RlbmVycy5iZWdpbigpOyBpdCAhPSBt
X2xpc3RlbmVycy5lbmQoKTsgKytpdCkKLSAgICAgIEFTU0VSVChpdC0+c2Vjb25kICE9IGxpc3Rl
bmVyKTsKKyAgICAgIEFTU0VSVChpdC0+dmFsdWUgIT0gbGlzdGVuZXIpOwogI2VuZGlmCiAKICAg
ICBtX2xpc3RlbmVycy5hZGQobV9uZXh0TGlzdGVuZXJJZCwgbGlzdGVuZXIpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9XaW5kb3dGZWF0dXJlcy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1dpbmRvd0ZlYXR1cmVzLmNwcAppbmRleCA3NTY0MTUyOGRmZWMyZjRiZWM3ZWVhMzNk
MDc0MGEwZGM3ZDdiYWM0Li4xYjZiMWQwYjE2MzJlODJhOTRlZjA0Njc5ZDBhN2Q0N2FkMzFjYjUw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1dpbmRvd0ZlYXR1cmVzLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1dpbmRvd0ZlYXR1cmVzLmNwcApAQCAtMjEyLDcgKzIxMiw3
IEBAIGJvb2wgV2luZG93RmVhdHVyZXM6OmJvb2xGZWF0dXJlKGNvbnN0IERpYWxvZ0ZlYXR1cmVz
TWFwJiBmZWF0dXJlcywgY29uc3QgY2hhcioKICAgICBEaWFsb2dGZWF0dXJlc01hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBmZWF0dXJlcy5maW5kKGtleSk7CiAgICAgaWYgKGl0ID09IGZlYXR1cmVz
LmVuZCgpKQogICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlOwotICAgIGNvbnN0IFN0cmluZyYg
dmFsdWUgPSBpdC0+c2Vjb25kOworICAgIGNvbnN0IFN0cmluZyYgdmFsdWUgPSBpdC0+dmFsdWU7
CiAgICAgcmV0dXJuIHZhbHVlLmlzTnVsbCgpIHx8IHZhbHVlID09ICIxIiB8fCB2YWx1ZSA9PSAi
eWVzIiB8fCB2YWx1ZSA9PSAib24iOwogfQogCkBAIC0yMjQsNyArMjI0LDcgQEAgZmxvYXQgV2lu
ZG93RmVhdHVyZXM6OmZsb2F0RmVhdHVyZShjb25zdCBEaWFsb2dGZWF0dXJlc01hcCYgZmVhdHVy
ZXMsIGNvbnN0IGNoYXIKICAgICAvLyBGSVhNRTogVGhlIHRvRG91YmxlIGZ1bmN0aW9uIGRvZXMg
bm90IG9mZmVyIGEgd2F5IHRvIHRlbGwgIjBxIiBmcm9tIHN0cmluZyB3aXRoIG5vIGRpZ2l0cyBp
biBpdDogQm90aAogICAgIC8vIHJldHVybiB0aGUgbnVtYmVyIDAgYW5kIGZhbHNlIGZvciBvay4g
QnV0ICIwcSIgc2hvdWxkIHlpZWxkIHRoZSBtaW5pbXVtIHJhdGhlciB0aGFuIHRoZSBkZWZhdWx0
LgogICAgIGJvb2wgb2s7Ci0gICAgZG91YmxlIHBhcnNlZE51bWJlciA9IGl0LT5zZWNvbmQudG9E
b3VibGUoJm9rKTsKKyAgICBkb3VibGUgcGFyc2VkTnVtYmVyID0gaXQtPnZhbHVlLnRvRG91Ymxl
KCZvayk7CiAgICAgaWYgKChwYXJzZWROdW1iZXIgPT0gMCAmJiAhb2spIHx8IGlzbmFuKHBhcnNl
ZE51bWJlcikpCiAgICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7CiAgICAgaWYgKHBhcnNlZE51
bWJlciA8IG1pbiB8fCBtYXggPD0gbWluKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmNwcAppbmRleCBlMmZiMjFlZDJjMjM3ZDBk
ZmUwMGE5MzExNmM5OGRkMmFhNGYxYTUyLi5iY2M4MDliYzYxODg2Zjg3Mjg3NTI5YTI2ODlmMGJl
ZDQ3OTdmYmY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Bbmlt
YXRpb25Db250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9B
bmltYXRpb25Db250cm9sbGVyLmNwcApAQCAtOTEsMTQgKzkxLDE0IEBAIGRvdWJsZSBBbmltYXRp
b25Db250cm9sbGVyUHJpdmF0ZTo6dXBkYXRlQW5pbWF0aW9ucyhTZXRDaGFuZ2VkIGNhbGxTZXRD
aGFuZ2VkLyoKIAogICAgIFJlbmRlck9iamVjdEFuaW1hdGlvbk1hcDo6Y29uc3RfaXRlcmF0b3Ig
YW5pbWF0aW9uc0VuZCA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5lbmQoKTsKICAgICBmb3IgKFJl
bmRlck9iamVjdEFuaW1hdGlvbk1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2NvbXBvc2l0ZUFu
aW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gYW5pbWF0aW9uc0VuZDsgKytpdCkgewotICAgICAgICBD
b21wb3NpdGVBbmltYXRpb24qIGNvbXBBbmltID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAg
Q29tcG9zaXRlQW5pbWF0aW9uKiBjb21wQW5pbSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAg
aWYgKCFjb21wQW5pbS0+c3VzcGVuZGVkKCkgJiYgY29tcEFuaW0tPmhhc0FuaW1hdGlvbnMoKSkg
ewogICAgICAgICAgICAgZG91YmxlIHQgPSBjb21wQW5pbS0+dGltZVRvTmV4dFNlcnZpY2UoKTsK
ICAgICAgICAgICAgIGlmICh0ICE9IC0xICYmICh0IDwgdGltZVRvTmV4dFNlcnZpY2UgfHwgdGlt
ZVRvTmV4dFNlcnZpY2UgPT0gLTEpKQogICAgICAgICAgICAgICAgIHRpbWVUb05leHRTZXJ2aWNl
ID0gdDsKICAgICAgICAgICAgIGlmICghdGltZVRvTmV4dFNlcnZpY2UpIHsKICAgICAgICAgICAg
ICAgICBpZiAoY2FsbFNldENoYW5nZWQgPT0gQ2FsbFNldENoYW5nZWQpIHsKLSAgICAgICAgICAg
ICAgICAgICAgTm9kZSogbm9kZSA9IGl0LT5maXJzdC0+bm9kZSgpOworICAgICAgICAgICAgICAg
ICAgICBOb2RlKiBub2RlID0gaXQtPmtleS0+bm9kZSgpOwogICAgICAgICAgICAgICAgICAgICBB
U1NFUlQoIW5vZGUgfHwgKG5vZGUtPmRvY3VtZW50KCkgJiYgIW5vZGUtPmRvY3VtZW50KCktPmlu
UGFnZUNhY2hlKCkpKTsKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0TmVlZHNTdHlsZVJl
Y2FsYyhTeW50aGV0aWNTdHlsZUNoYW5nZSk7CiAgICAgICAgICAgICAgICAgICAgIGNhbGxlZFNl
dENoYW5nZWQgPSB0cnVlOwpAQCAtMjg4LDkgKzI4OCw5IEBAIHZvaWQgQW5pbWF0aW9uQ29udHJv
bGxlclByaXZhdGU6OnN1c3BlbmRBbmltYXRpb25zRm9yRG9jdW1lbnQoRG9jdW1lbnQqIGRvY3Vt
ZW50CiAgICAgCiAgICAgUmVuZGVyT2JqZWN0QW5pbWF0aW9uTWFwOjpjb25zdF9pdGVyYXRvciBh
bmltYXRpb25zRW5kID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmVuZCgpOwogICAgIGZvciAoUmVu
ZGVyT2JqZWN0QW5pbWF0aW9uTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fY29tcG9zaXRlQW5p
bWF0aW9ucy5iZWdpbigpOyBpdCAhPSBhbmltYXRpb25zRW5kOyArK2l0KSB7Ci0gICAgICAgIFJl
bmRlck9iamVjdCogcmVuZGVyZXIgPSBpdC0+Zmlyc3Q7CisgICAgICAgIFJlbmRlck9iamVjdCog
cmVuZGVyZXIgPSBpdC0+a2V5OwogICAgICAgICBpZiAocmVuZGVyZXItPmRvY3VtZW50KCkgPT0g
ZG9jdW1lbnQpIHsKLSAgICAgICAgICAgIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcEFuaW0gPSBp
dC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wQW5p
bSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGNvbXBBbmltLT5zdXNwZW5kQW5pbWF0
aW9ucygpOwogICAgICAgICB9CiAgICAgfQpAQCAtMzA0LDkgKzMwNCw5IEBAIHZvaWQgQW5pbWF0
aW9uQ29udHJvbGxlclByaXZhdGU6OnJlc3VtZUFuaW1hdGlvbnNGb3JEb2N1bWVudChEb2N1bWVu
dCogZG9jdW1lbnQpCiAgICAgCiAgICAgUmVuZGVyT2JqZWN0QW5pbWF0aW9uTWFwOjpjb25zdF9p
dGVyYXRvciBhbmltYXRpb25zRW5kID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmVuZCgpOwogICAg
IGZvciAoUmVuZGVyT2JqZWN0QW5pbWF0aW9uTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fY29t
cG9zaXRlQW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBhbmltYXRpb25zRW5kOyArK2l0KSB7Ci0g
ICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBpdC0+Zmlyc3Q7CisgICAgICAgIFJlbmRl
ck9iamVjdCogcmVuZGVyZXIgPSBpdC0+a2V5OwogICAgICAgICBpZiAocmVuZGVyZXItPmRvY3Vt
ZW50KCkgPT0gZG9jdW1lbnQpIHsKLSAgICAgICAgICAgIENvbXBvc2l0ZUFuaW1hdGlvbiogY29t
cEFuaW0gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgQ29tcG9zaXRlQW5pbWF0aW9u
KiBjb21wQW5pbSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGNvbXBBbmltLT5yZXN1
bWVBbmltYXRpb25zKCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0zOTUsOCArMzk1LDggQEAgdW5z
aWduZWQgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6Om51bWJlck9mQWN0aXZlQW5pbWF0aW9u
cyhEb2N1bWVudCogZG9jdW1lbnQKICAgICAKICAgICBSZW5kZXJPYmplY3RBbmltYXRpb25NYXA6
OmNvbnN0X2l0ZXJhdG9yIGFuaW1hdGlvbnNFbmQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuZW5k
KCk7CiAgICAgZm9yIChSZW5kZXJPYmplY3RBbmltYXRpb25NYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGFuaW1hdGlvbnNFbmQ7ICsr
aXQpIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGl0LT5maXJzdDsKLSAgICAg
ICAgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wQW5pbSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAg
ICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBpdC0+a2V5OworICAgICAgICBDb21wb3NpdGVB
bmltYXRpb24qIGNvbXBBbmltID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICBpZiAocmVuZGVy
ZXItPmRvY3VtZW50KCkgPT0gZG9jdW1lbnQpCiAgICAgICAgICAgICBjb3VudCArPSBjb21wQW5p
bS0+bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHAKaW5kZXggYmZhYTli
YWJkZTk0NTIwNjI3M2JlYzRjMTVmYTkyNjlmOWE3MTYxMS4uYWUyYzJjYTBhYWUzNjM1ZTAzNjM5
MGFiN2MyNzUzN2E5ZDkwMTNiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmlt
YXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2Fu
aW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uY3BwCkBAIC01Nyw3ICs1Nyw3IEBAIHZvaWQgQ29t
cG9zaXRlQW5pbWF0aW9uOjpjbGVhclJlbmRlcmVyKCkKICAgICAgICAgLy8gYW4gYW5pbWF0aW9u
IGNhbGxiYWNrIChzZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIy
MDUyKQogICAgICAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciB0
cmFuc2l0aW9uc0VuZCA9IG1fdHJhbnNpdGlvbnMuZW5kKCk7CiAgICAgICAgIGZvciAoQ1NTUHJv
cGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJl
Z2luKCk7IGl0ICE9IHRyYW5zaXRpb25zRW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBJbXBsaWNp
dEFuaW1hdGlvbiogdHJhbnNpdGlvbiA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBJ
bXBsaWNpdEFuaW1hdGlvbiogdHJhbnNpdGlvbiA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAg
ICAgIGFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+YW5pbWF0aW9uV2lsbEJlUmVtb3ZlZCh0cmFuc2l0
aW9uKTsKICAgICAgICAgICAgIHRyYW5zaXRpb24tPmNsZWFyKCk7CiAgICAgICAgIH0KQEAgLTY2
LDcgKzY2LDcgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OmNsZWFyUmVuZGVyZXIoKQogICAg
ICAgICBtX2tleWZyYW1lQW5pbWF0aW9ucy5jaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgICAgIEFu
aW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGFuaW1hdGlvbnNFbmQgPSBtX2tleWZyYW1l
QW5pbWF0aW9ucy5lbmQoKTsKICAgICAgICAgZm9yIChBbmltYXRpb25OYW1lTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGFuaW1hdGlv
bnNFbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIEtleWZyYW1lQW5pbWF0aW9uKiBhbmltID0gaXQt
PnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgIEtleWZyYW1lQW5pbWF0aW9uKiBhbmltID0gaXQt
PnZhbHVlLmdldCgpOwogICAgICAgICAgICAgYW5pbWF0aW9uQ29udHJvbGxlcigpLT5hbmltYXRp
b25XaWxsQmVSZW1vdmVkKGFuaW0pOwogICAgICAgICAgICAgYW5pbS0+Y2xlYXIoKTsKICAgICAg
ICAgfQpAQCAtODMsNyArODMsNyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlVHJh
bnNpdGlvbnMoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgUmVuZGVyU3R5bGUqCiAgICAgLy8gaW4g
dGhlIG5leHQgbG9vcCBhbmQgdGhlbiB0b3NzIHRoZSBvbmVzIHRoYXQgZGlkbid0IGdldCBtYXJr
ZWQuCiAgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
bV90cmFuc2l0aW9ucy5lbmQoKTsKICAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPnNldEFjdGl2ZShmYWxzZSk7CisgICAgICAgIGl0LT52
YWx1ZS0+c2V0QWN0aXZlKGZhbHNlKTsKICAgICAgICAgCiAgICAgUmVmUHRyPFJlbmRlclN0eWxl
PiBtb2RpZmllZEN1cnJlbnRTdHlsZTsKICAgICAKQEAgLTE4MCw3ICsxODAsNyBAQCB2b2lkIENv
bXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlVHJhbnNpdGlvbnMoUmVuZGVyT2JqZWN0KiByZW5kZXJl
ciwgUmVuZGVyU3R5bGUqCiAgICAgVmVjdG9yPGludD4gdG9CZVJlbW92ZWQ7CiAgICAgZW5kID0g
bV90cmFuc2l0aW9ucy5lbmQoKTsKICAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKLSAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kLmdldCgp
OworICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT52YWx1ZS5nZXQoKTsKICAg
ICAgICAgaWYgKCFhbmltLT5hY3RpdmUoKSkgewogICAgICAgICAgICAgYW5pbWF0aW9uQ29udHJv
bGxlcigpLT5hbmltYXRpb25XaWxsQmVSZW1vdmVkKGFuaW0pOwogICAgICAgICAgICAgdG9CZVJl
bW92ZWQuYXBwZW5kKGFuaW0tPmFuaW1hdGluZ1Byb3BlcnR5KCkpOwpAQCAtMjA2LDEzICsyMDYs
MTMgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnVwZGF0ZUtleWZyYW1lQW5pbWF0aW9ucyhS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBSZW5kZXIKICAgICAgICAgLy8gVGhlIGN1cnJlbnQgYW5k
IHRhcmdldCBhbmltYXRpb25zIGFyZSB0aGUgc2FtZSBzbyB3ZSBqdXN0IG5lZWQgdG8gdG9zcyBh
bnkgCiAgICAgICAgIC8vIGFuaW1hdGlvbiB3aGljaCBpcyBmaW5pc2hlZCAocG9zdEFjdGl2ZSku
CiAgICAgICAgIGZvciAoQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2tl
eWZyYW1lQW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBrZmVuZDsgKytpdCkgewotICAgICAgICAg
ICAgaWYgKGl0LT5zZWNvbmQtPnBvc3RBY3RpdmUoKSkKLSAgICAgICAgICAgICAgICBpdC0+c2Vj
b25kLT5zZXRJbmRleCgtMSk7CisgICAgICAgICAgICBpZiAoaXQtPnZhbHVlLT5wb3N0QWN0aXZl
KCkpCisgICAgICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRJbmRleCgtMSk7CiAgICAgICAgIH0K
ICAgICB9IGVsc2UgewogICAgICAgICAvLyBNYXJrIGFsbCBleGlzdGluZyBhbmltYXRpb25zIGFz
IG5vIGxvbmdlciBhY3RpdmUuCiAgICAgICAgIGZvciAoQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBrZmVuZDsg
KytpdCkKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNldEluZGV4KC0xKTsKKyAgICAgICAgICAg
IGl0LT52YWx1ZS0+c2V0SW5kZXgoLTEpOwogICAgICAgICAgICAgCiAgICAgICAgIC8vIFRvc3Mg
dGhlIGFuaW1hdGlvbiBvcmRlciBtYXAuCiAgICAgICAgIG1fa2V5ZnJhbWVBbmltYXRpb25PcmRl
ck1hcC5jbGVhcigpOwpAQCAtMjYxLDcgKzI2MSw3IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9u
Ojp1cGRhdGVLZXlmcmFtZUFuaW1hdGlvbnMoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgUmVuZGVy
CiAgICAgVmVjdG9yPEF0b21pY1N0cmluZ0ltcGwqPiBhbmltc1RvQmVSZW1vdmVkOwogICAgIGtm
ZW5kID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuZW5kKCk7CiAgICAgZm9yIChBbmltYXRpb25OYW1l
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmJlZ2luKCk7IGl0
ICE9IGtmZW5kOyArK2l0KSB7Ci0gICAgICAgIEtleWZyYW1lQW5pbWF0aW9uKiBrZXlmcmFtZUFu
aW0gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICBLZXlmcmFtZUFuaW1hdGlvbioga2V5ZnJh
bWVBbmltID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICBpZiAoa2V5ZnJhbWVBbmltLT5pbmRl
eCgpIDwgMCkgewogICAgICAgICAgICAgYW5pbXNUb0JlUmVtb3ZlZC5hcHBlbmQoa2V5ZnJhbWVB
bmltLT5uYW1lKCkuaW1wbCgpKTsKICAgICAgICAgICAgIGFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+
YW5pbWF0aW9uV2lsbEJlUmVtb3ZlZChrZXlmcmFtZUFuaW0pOwpAQCAtMjg5LDcgKzI4OSw3IEBA
IFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IENvbXBvc2l0ZUFuaW1hdGlvbjo6YW5pbWF0ZShSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyLCBSZW5kCiAgICAgICAgIGlmICghbV90cmFuc2l0aW9ucy5pc0Vt
cHR5KCkpIHsKICAgICAgICAgICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IG1fdHJhbnNpdGlvbnMuZW5kKCk7CiAgICAgICAgICAgICBmb3IgKENTU1By
b3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgICAgICBpZiAoSW1wbGljaXRB
bmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kLmdldCgpKQorICAgICAgICAgICAgICAgIGlmIChJ
bXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT52YWx1ZS5nZXQoKSkKICAgICAgICAgICAgICAg
ICAgICAgYW5pbS0+YW5pbWF0ZSh0aGlzLCByZW5kZXJlciwgY3VycmVudFN0eWxlLCB0YXJnZXRT
dHlsZSwgcmVzdWx0U3R5bGUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0zMTEsNyAr
MzExLDcgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gQ29tcG9zaXRlQW5pbWF0aW9uOjpnZXRB
bmltYXRlZFN0eWxlKCkgY29uc3QKICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHJlc3VsdFN0eWxl
OwogICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1f
dHJhbnNpdGlvbnMuZW5kKCk7CiAgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7Ci0gICAgICAgIGlmIChJbXBsaWNpdEFuaW1hdGlvbiogaW1wbGljaXRBbmltYXRpb24gPSBp
dC0+c2Vjb25kLmdldCgpKQorICAgICAgICBpZiAoSW1wbGljaXRBbmltYXRpb24qIGltcGxpY2l0
QW5pbWF0aW9uID0gaXQtPnZhbHVlLmdldCgpKQogICAgICAgICAgICAgaW1wbGljaXRBbmltYXRp
b24tPmdldEFuaW1hdGVkU3R5bGUocmVzdWx0U3R5bGUpOwogICAgIH0KIApAQCAtMzMyLDcgKzMz
Miw3IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpzZXRBbmltYXRpbmcoYm9vbCBhbmltYXRp
bmcpCiAgICAgaWYgKCFtX3RyYW5zaXRpb25zLmlzRW1wdHkoKSkgewogICAgICAgICBDU1NQcm9w
ZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciB0cmFuc2l0aW9uc0VuZCA9IG1fdHJh
bnNpdGlvbnMuZW5kKCk7CiAgICAgICAgIGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IHRyYW5zaXRp
b25zRW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogdHJhbnNpdGlv
biA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogdHJh
bnNpdGlvbiA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIHRyYW5zaXRpb24tPnNldEFu
aW1hdGluZyhhbmltYXRpbmcpOwogICAgICAgICB9CiAgICAgfQpAQCAtMzQwLDcgKzM0MCw3IEBA
IHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpzZXRBbmltYXRpbmcoYm9vbCBhbmltYXRpbmcpCiAg
ICAgICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsKICAgICAgICAg
QW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fa2V5ZnJh
bWVBbmltYXRpb25zLmVuZCgpOwogICAgICAgICBmb3IgKEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gYW5pbWF0
aW9uc0VuZDsgKytpdCkgewotICAgICAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24qIGFuaW0gPSBp
dC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24qIGFuaW0gPSBp
dC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBhbmltLT5zZXRBbmltYXRpbmcoYW5pbWF0aW5n
KTsKICAgICAgICAgfQogICAgIH0KQEAgLTM1NSw3ICszNTUsNyBAQCBkb3VibGUgQ29tcG9zaXRl
QW5pbWF0aW9uOjp0aW1lVG9OZXh0U2VydmljZSgpIGNvbnN0CiAgICAgaWYgKCFtX3RyYW5zaXRp
b25zLmlzRW1wdHkoKSkgewogICAgICAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25z
dF9pdGVyYXRvciB0cmFuc2l0aW9uc0VuZCA9IG1fdHJhbnNpdGlvbnMuZW5kKCk7CiAgICAgICAg
IGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Ry
YW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IHRyYW5zaXRpb25zRW5kOyArK2l0KSB7Ci0gICAgICAg
ICAgICBJbXBsaWNpdEFuaW1hdGlvbiogdHJhbnNpdGlvbiA9IGl0LT5zZWNvbmQuZ2V0KCk7Cisg
ICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogdHJhbnNpdGlvbiA9IGl0LT52YWx1ZS5nZXQo
KTsKICAgICAgICAgICAgIGRvdWJsZSB0ID0gdHJhbnNpdGlvbiA/IHRyYW5zaXRpb24tPnRpbWVU
b05leHRTZXJ2aWNlKCkgOiAtMTsKICAgICAgICAgICAgIGlmICh0IDwgbWluVCB8fCBtaW5UID09
IC0xKQogICAgICAgICAgICAgICAgIG1pblQgPSB0OwpAQCAtMzY3LDcgKzM2Nyw3IEBAIGRvdWJs
ZSBDb21wb3NpdGVBbmltYXRpb246OnRpbWVUb05leHRTZXJ2aWNlKCkgY29uc3QKICAgICAgICAg
bV9rZXlmcmFtZUFuaW1hdGlvbnMuY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgICAgICBBbmltYXRp
b25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBhbmltYXRpb25zRW5kID0gbV9rZXlmcmFtZUFuaW1h
dGlvbnMuZW5kKCk7CiAgICAgICAgIGZvciAoQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBhbmltYXRpb25zRW5k
OyArK2l0KSB7Ci0gICAgICAgICAgICBLZXlmcmFtZUFuaW1hdGlvbiogYW5pbWF0aW9uID0gaXQt
PnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgIEtleWZyYW1lQW5pbWF0aW9uKiBhbmltYXRpb24g
PSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBkb3VibGUgdCA9IGFuaW1hdGlvbiA/IGFu
aW1hdGlvbi0+dGltZVRvTmV4dFNlcnZpY2UoKSA6IC0xOwogICAgICAgICAgICAgaWYgKHQgPCBt
aW5UIHx8IG1pblQgPT0gLTEpCiAgICAgICAgICAgICAgICAgbWluVCA9IHQ7CkBAIC0zODksNyAr
Mzg5LDcgQEAgUGFzc1JlZlB0cjxLZXlmcmFtZUFuaW1hdGlvbj4gQ29tcG9zaXRlQW5pbWF0aW9u
OjpnZXRBbmltYXRpb25Gb3JQcm9wZXJ0eShDU1NQcm8KICAgICAgICAgbV9rZXlmcmFtZUFuaW1h
dGlvbnMuY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgICAgICBBbmltYXRpb25OYW1lTWFwOjpjb25z
dF9pdGVyYXRvciBhbmltYXRpb25zRW5kID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuZW5kKCk7CiAg
ICAgICAgIGZvciAoQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2tleWZy
YW1lQW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBhbmltYXRpb25zRW5kOyArK2l0KSB7Ci0gICAg
ICAgICAgICBSZWZQdHI8S2V5ZnJhbWVBbmltYXRpb24+IGFuaW0gPSBpdC0+c2Vjb25kOworICAg
ICAgICAgICAgUmVmUHRyPEtleWZyYW1lQW5pbWF0aW9uPiBhbmltID0gaXQtPnZhbHVlOwogICAg
ICAgICAgICAgaWYgKGFuaW0tPmhhc0FuaW1hdGlvbkZvclByb3BlcnR5KHByb3BlcnR5KSkKICAg
ICAgICAgICAgICAgICByZXR2YWwgPSBhbmltOwogICAgICAgICB9CkBAIC00MDksMTQgKzQwOSwx
NCBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6c3VzcGVuZEFuaW1hdGlvbnMoKQogICAgICAg
ICBtX2tleWZyYW1lQW5pbWF0aW9ucy5jaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgICAgIEFuaW1h
dGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGFuaW1hdGlvbnNFbmQgPSBtX2tleWZyYW1lQW5p
bWF0aW9ucy5lbmQoKTsKICAgICAgICAgZm9yIChBbmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGFuaW1hdGlvbnNF
bmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGlmIChLZXlmcmFtZUFuaW1hdGlvbiogYW5pbSA9IGl0
LT5zZWNvbmQuZ2V0KCkpCisgICAgICAgICAgICBpZiAoS2V5ZnJhbWVBbmltYXRpb24qIGFuaW0g
PSBpdC0+dmFsdWUuZ2V0KCkpCiAgICAgICAgICAgICAgICAgYW5pbS0+dXBkYXRlUGxheVN0YXRl
KEFuaW1QbGF5U3RhdGVQYXVzZWQpOwogICAgICAgICB9CiAgICAgfQogICAgIGlmICghbV90cmFu
c2l0aW9ucy5pc0VtcHR5KCkpIHsKICAgICAgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6
Y29uc3RfaXRlcmF0b3IgdHJhbnNpdGlvbnNFbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOwogICAg
ICAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSB0cmFuc2l0aW9uc0VuZDsgKytpdCkgewotICAg
ICAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kLmdldCgpOworICAg
ICAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAg
ICAgICAgICBpZiAoYW5pbSAmJiBhbmltLT5oYXNTdHlsZSgpKQogICAgICAgICAgICAgICAgIGFu
aW0tPnVwZGF0ZVBsYXlTdGF0ZShBbmltUGxheVN0YXRlUGF1c2VkKTsKICAgICAgICAgfQpAQCAt
NDM0LDcgKzQzNCw3IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpyZXN1bWVBbmltYXRpb25z
KCkKICAgICAgICAgbV9rZXlmcmFtZUFuaW1hdGlvbnMuY2hlY2tDb25zaXN0ZW5jeSgpOwogICAg
ICAgICBBbmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBhbmltYXRpb25zRW5kID0gbV9r
ZXlmcmFtZUFuaW1hdGlvbnMuZW5kKCk7CiAgICAgICAgIGZvciAoQW5pbWF0aW9uTmFtZU1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBh
bmltYXRpb25zRW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBLZXlmcmFtZUFuaW1hdGlvbiogYW5p
bSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBLZXlmcmFtZUFuaW1hdGlvbiogYW5p
bSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGlmIChhbmltICYmIGFuaW0tPnBsYXlT
dGF0ZVBsYXlpbmcoKSkKICAgICAgICAgICAgICAgICBhbmltLT51cGRhdGVQbGF5U3RhdGUoQW5p
bVBsYXlTdGF0ZVBsYXlpbmcpOwogICAgICAgICB9CkBAIC00NDMsNyArNDQzLDcgQEAgdm9pZCBD
b21wb3NpdGVBbmltYXRpb246OnJlc3VtZUFuaW1hdGlvbnMoKQogICAgIGlmICghbV90cmFuc2l0
aW9ucy5pc0VtcHR5KCkpIHsKICAgICAgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29u
c3RfaXRlcmF0b3IgdHJhbnNpdGlvbnNFbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOwogICAgICAg
ICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90
cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSB0cmFuc2l0aW9uc0VuZDsgKytpdCkgewotICAgICAg
ICAgICAgSW1wbGljaXRBbmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAg
ICAgICAgSW1wbGljaXRBbmltYXRpb24qIGFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAg
ICAgICBpZiAoYW5pbSAmJiBhbmltLT5oYXNTdHlsZSgpKQogICAgICAgICAgICAgICAgIGFuaW0t
PnVwZGF0ZVBsYXlTdGF0ZShBbmltUGxheVN0YXRlUGxheWluZyk7CiAgICAgICAgIH0KQEAgLTQ1
NSw3ICs0NTUsNyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6b3ZlcnJpZGVJbXBsaWNpdEFu
aW1hdGlvbnMoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSkKICAgICBDU1NQcm9wZXJ0eVRyYW5zaXRp
b25zTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOwogICAgIGlm
ICghbV90cmFuc2l0aW9ucy5pc0VtcHR5KCkpIHsKICAgICAgICAgZm9yIChDU1NQcm9wZXJ0eVRy
YW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9
IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9
IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGlmIChhbmltICYmIGFuaW0tPmFuaW1hdGlu
Z1Byb3BlcnR5KCkgPT0gcHJvcGVydHkpCiAgICAgICAgICAgICAgICAgYW5pbS0+c2V0T3ZlcnJp
ZGRlbih0cnVlKTsKICAgICAgICAgfQpAQCAtNDY3LDcgKzQ2Nyw3IEBAIHZvaWQgQ29tcG9zaXRl
QW5pbWF0aW9uOjpyZXN1bWVPdmVycmlkZGVuSW1wbGljaXRBbmltYXRpb25zKENTU1Byb3BlcnR5
SUQgcHJvcGVyCiAgICAgaWYgKCFtX3RyYW5zaXRpb25zLmlzRW1wdHkoKSkgewogICAgICAgICBD
U1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3RyYW5zaXRp
b25zLmVuZCgpOwogICAgICAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
LSAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZC5nZXQoKTsK
KyAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnZhbHVlLmdldCgpOwog
ICAgICAgICAgICAgaWYgKGFuaW0gJiYgYW5pbS0+YW5pbWF0aW5nUHJvcGVydHkoKSA9PSBwcm9w
ZXJ0eSkKICAgICAgICAgICAgICAgICBhbmltLT5zZXRPdmVycmlkZGVuKGZhbHNlKTsKICAgICAg
ICAgfQpAQCAtNDgwLDcgKzQ4MCw3IEBAIGJvb2wgQ29tcG9zaXRlQW5pbWF0aW9uOjppc0FuaW1h
dGluZ1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHksIGJvb2wgYWNjZWxlCiAgICAgICAg
IG1fa2V5ZnJhbWVBbmltYXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsKICAgICAgICAgQW5pbWF0
aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fa2V5ZnJhbWVBbmlt
YXRpb25zLmVuZCgpOwogICAgICAgICBmb3IgKEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gYW5pbWF0aW9uc0Vu
ZDsgKytpdCkgewotICAgICAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24qIGFuaW0gPSBpdC0+c2Vj
b25kLmdldCgpOworICAgICAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24qIGFuaW0gPSBpdC0+dmFs
dWUuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoYW5pbSAmJiBhbmltLT5pc0FuaW1hdGluZ1Byb3Bl
cnR5KHByb3BlcnR5LCBhY2NlbGVyYXRlZE9ubHksIGlzUnVubmluZ05vdykpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTQ4OSw3ICs0ODksNyBAQCBib29sIENv
bXBvc2l0ZUFuaW1hdGlvbjo6aXNBbmltYXRpbmdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3Bl
cnR5LCBib29sIGFjY2VsZQogICAgIGlmICghbV90cmFuc2l0aW9ucy5pc0VtcHR5KCkpIHsKICAg
ICAgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgdHJhbnNpdGlv
bnNFbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOwogICAgICAgICBmb3IgKENTU1Byb3BlcnR5VHJh
bnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBp
dCAhPSB0cmFuc2l0aW9uc0VuZDsgKytpdCkgewotICAgICAgICAgICAgSW1wbGljaXRBbmltYXRp
b24qIGFuaW0gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgSW1wbGljaXRBbmltYXRp
b24qIGFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoYW5pbSAmJiBhbmlt
LT5pc0FuaW1hdGluZ1Byb3BlcnR5KHByb3BlcnR5LCBhY2NlbGVyYXRlZE9ubHksIGlzUnVubmlu
Z05vdykpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTU1NSw3
ICs1NTUsNyBAQCB1bnNpZ25lZCBDb21wb3NpdGVBbmltYXRpb246Om51bWJlck9mQWN0aXZlQW5p
bWF0aW9ucygpIGNvbnN0CiAgICAgICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zLmNoZWNrQ29uc2lz
dGVuY3koKTsKICAgICAgICAgQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0
aW9uc0VuZCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmVuZCgpOwogICAgICAgICBmb3IgKEFuaW1h
dGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVn
aW4oKTsgaXQgIT0gYW5pbWF0aW9uc0VuZDsgKytpdCkgewotICAgICAgICAgICAgS2V5ZnJhbWVB
bmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgS2V5ZnJhbWVB
bmltYXRpb24qIGFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoYW5pbS0+
cnVubmluZygpKQogICAgICAgICAgICAgICAgICsrY291bnQ7CiAgICAgICAgIH0KQEAgLTU2NCw3
ICs1NjQsNyBAQCB1bnNpZ25lZCBDb21wb3NpdGVBbmltYXRpb246Om51bWJlck9mQWN0aXZlQW5p
bWF0aW9ucygpIGNvbnN0CiAgICAgaWYgKCFtX3RyYW5zaXRpb25zLmlzRW1wdHkoKSkgewogICAg
ICAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciB0cmFuc2l0aW9u
c0VuZCA9IG1fdHJhbnNpdGlvbnMuZW5kKCk7CiAgICAgICAgIGZvciAoQ1NTUHJvcGVydHlUcmFu
c2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0
ICE9IHRyYW5zaXRpb25zRW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlv
biogYW5pbSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlv
biogYW5pbSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGlmIChhbmltLT5ydW5uaW5n
KCkpCiAgICAgICAgICAgICAgICAgKytjb3VudDsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGFuZ3VhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vTGFuZ3VhZ2UuY3BwCmluZGV4IDQ3ZjA5ZjYwOTI5OTcxZTMxNzM1NmU0OWZiY2I2M2I1ZGI0
MTdmMzcuLmIzZjk3YmVjOTcyMTViODA5YjM0MWVhYzAxYTYxN2U4MWFhN2EwNmUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xhbmd1YWdlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9MYW5ndWFnZS5jcHAKQEAgLTUzLDcgKzUzLDcgQEAgdm9pZCBsYW5ndWFn
ZURpZENoYW5nZSgpCiB7CiAgICAgT2JzZXJ2ZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IG9ic2VydmVy
TWFwKCkuZW5kKCk7CiAgICAgZm9yIChPYnNlcnZlck1hcDo6aXRlcmF0b3IgaXRlciA9IG9ic2Vy
dmVyTWFwKCkuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikKLSAgICAgICAgaXRlci0+c2Vj
b25kKGl0ZXItPmZpcnN0KTsKKyAgICAgICAgaXRlci0+dmFsdWUoaXRlci0+a2V5KTsKIH0KIAog
U3RyaW5nIGRlZmF1bHRMYW5ndWFnZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9IUlRGRWxldmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1
ZGlvL0hSVEZFbGV2YXRpb24uY3BwCmluZGV4IGViMDdkNGVjOWY5MmI3NDI4NTAyMTgzMjUyYjEw
MTk1MjlmMjE4YzMuLjA3ZTAwMTg1OGMxYjYyMjQxZTRiNzZhYjNjZmQ2NTBhNmRhNGFjM2MgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0hSVEZFbGV2YXRpb24uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0hSVEZFbGV2YXRpb24uY3BwCkBA
IC03OSw3ICs3OSw3IEBAIHN0YXRpYyBBdWRpb0J1cyogZ2V0Q29uY2F0ZW5hdGVkSW1wdWxzZVJl
c3BvbnNlc0ZvclN1YmplY3QoY29uc3QgU3RyaW5nJiBzdWJqZWN0CiAgICAgICAgIGJ1cyA9IGNv
bmNhdGVuYXRlZEltcHVsc2VSZXNwb25zZXMubGVha1B0cigpOwogICAgICAgICBhdWRpb0J1c01h
cC5zZXQoc3ViamVjdE5hbWUsIGJ1cyk7CiAgICAgfSBlbHNlCi0gICAgICAgIGJ1cyA9IGl0ZXJh
dG9yLT5zZWNvbmQ7CisgICAgICAgIGJ1cyA9IGl0ZXJhdG9yLT52YWx1ZTsKIAogICAgIHNpemVf
dCByZXNwb25zZUxlbmd0aCA9IGJ1cy0+bGVuZ3RoKCk7CiAgICAgc2l6ZV90IGV4cGVjdGVkTGVu
Z3RoID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihUb3RhbE51bWJlck9mUmVzcG9uc2VzICogUmVzcG9u
c2VGcmFtZVNpemUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2ti
ZXJyeS9Db29raWVNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVy
cnkvQ29va2llTWFuYWdlci5jcHAKaW5kZXggYmY2M2I2MTY5NWJjZmZhOTg2NmY3ZjQzMWVmNTg3
MjgxNjM1OTVlMy4uZjc5ODIwYzk1MDMxYmRhMTdmMmFiNWFjYWFjMmNlYmY4MmY5ZTk0OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9Db29raWVNYW5hZ2Vy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0Nvb2tpZU1hbmFn
ZXIuY3BwCkBAIC0yMjYsNyArMjI2LDcgQEAgU3RyaW5nIENvb2tpZU1hbmFnZXI6OmdlbmVyYXRl
SHRtbEZyYWdtZW50Rm9yQ29va2llcygpCiAKICAgICBWZWN0b3I8UGFyc2VkQ29va2llKj4gY29v
a2llQ2FuZGlkYXRlczsKICAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBDb29raWVNYXAqPjo6aXRl
cmF0b3IgaXQgPSBtX21hbmFnZXJNYXAuYmVnaW4oKTsgaXQgIT0gbV9tYW5hZ2VyTWFwLmVuZCgp
OyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5nZXRBbGxDaGlsZENvb2tpZXMoJmNvb2tpZUNh
bmRpZGF0ZXMpOworICAgICAgICBpdC0+dmFsdWUtPmdldEFsbENoaWxkQ29va2llcygmY29va2ll
Q2FuZGlkYXRlcyk7CiAKICAgICBTdHJpbmcgcmVzdWx0OwogICAgIFBhcnNlZENvb2tpZSogY29v
a2llID0gMDsKQEAgLTM0NSw3ICszNDUsNyBAQCB2b2lkIENvb2tpZU1hbmFnZXI6OnJlbW92ZUFs
bENvb2tpZXMoQmFja2luZ1N0b3JlUmVtb3ZhbFBvbGljeSBiYWNraW5nU3RvcmVSZW1vdgogICAg
IEhhc2hNYXA8U3RyaW5nLCBDb29raWVNYXAqPjo6aXRlcmF0b3IgZmlyc3QgPSBtX21hbmFnZXJN
YXAuYmVnaW4oKTsKICAgICBIYXNoTWFwPFN0cmluZywgQ29va2llTWFwKj46Oml0ZXJhdG9yIGVu
ZCA9IG1fbWFuYWdlck1hcC5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBDb29raWVN
YXAqPjo6aXRlcmF0b3IgaXQgPSBmaXJzdDsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+
c2Vjb25kLT5kZWxldGVBbGxDb29raWVzQW5kRG9tYWlucygpOworICAgICAgICBpdC0+dmFsdWUt
PmRlbGV0ZUFsbENvb2tpZXNBbmREb21haW5zKCk7CiAKICAgICBpZiAoYmFja2luZ1N0b3JlUmVt
b3ZhbCA9PSBSZW1vdmVGcm9tQmFja2luZ1N0b3JlKQogICAgICAgICBtX2Nvb2tpZUJhY2tpbmdT
dG9yZS0+cmVtb3ZlQWxsKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9i
bGFja2JlcnJ5L0Nvb2tpZU1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2Jl
cnJ5L0Nvb2tpZU1hcC5jcHAKaW5kZXggZTM1NGU4YmVkNjRmNzE3YjM1ODUyYjdiOGNjZGZkNWZm
ZTBiNTY2Ny4uZDdiN2YxOTc0MzY5MTYxNDA4ZTcxYzVhN2U2YWM0ZGZhYTBiZTUzNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9Db29raWVNYXAuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvQ29va2llTWFwLmNwcApAQCAt
MTY2LDcgKzE2Niw3IEBAIFBhcnNlZENvb2tpZSogQ29va2llTWFwOjpyZW1vdmVPbGRlc3RDb29r
aWUoKQogICAgICAgICBDb29raWVMb2coIkNvb2tpZU1hcCAtIGxvb2tpbmcgaW50byBzdWJkb21h
aW5zIik7CiAKICAgICAgICAgZm9yIChIYXNoTWFwPFN0cmluZywgQ29va2llTWFwKj46Oml0ZXJh
dG9yIGl0ID0gbV9zdWJkb21haW5zLmJlZ2luKCk7IGl0ICE9IG1fc3ViZG9tYWlucy5lbmQoKTsg
KytpdCkgewotICAgICAgICAgICAgb2xkZXN0Q29va2llID0gaXQtPnNlY29uZC0+cmVtb3ZlT2xk
ZXN0Q29va2llKCk7CisgICAgICAgICAgICBvbGRlc3RDb29raWUgPSBpdC0+dmFsdWUtPnJlbW92
ZU9sZGVzdENvb2tpZSgpOwogICAgICAgICAgICAgaWYgKG9sZGVzdENvb2tpZSkKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMjA4LDcgKzIwOCw3IEBAIHZvaWQgQ29va2ll
TWFwOjpnZXRBbGxDaGlsZENvb2tpZXMoVmVjdG9yPFBhcnNlZENvb2tpZSo+KiBzdGFja09mQ29v
a2llcykKICAgICBDb29raWVMb2coIkNvb2tpZU1hcCAtIGdldEFsbENoaWxkQ29va2llcyBpbiBN
YXAgLSAlcyIsIGdldE5hbWUoKS51dGY4KCkuZGF0YSgpKTsKICAgICBnZXRBbGxDb29raWVzKHN0
YWNrT2ZDb29raWVzKTsKICAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBDb29raWVNYXAqPjo6aXRl
cmF0b3IgaXQgPSBtX3N1YmRvbWFpbnMuYmVnaW4oKTsgaXQgIT0gbV9zdWJkb21haW5zLmVuZCgp
OyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5nZXRBbGxDaGlsZENvb2tpZXMoc3RhY2tPZkNv
b2tpZXMpOworICAgICAgICBpdC0+dmFsdWUtPmdldEFsbENoaWxkQ29va2llcyhzdGFja09mQ29v
a2llcyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2NmL0JpbmFyeVByb3BlcnR5TGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jZi9CaW5hcnlQcm9wZXJ0eUxpc3QuY3BwCmluZGV4IDRiYzdjMmU2MDdlYWIz
ZTBiNDczNjBhNjIyNmUxYTI3YTUyMDhiMDkuLjQ4YTBmOTE3ZTkzZWY4OTIxNTZlZDQ3MTIxMjhk
MDBmOWMwZjc5ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL0JpbmFy
eVByb3BlcnR5TGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2YvQmluYXJ5
UHJvcGVydHlMaXN0LmNwcApAQCAtMjI5LDcgKzIyOSw3IEBAIHZvaWQgQmluYXJ5UHJvcGVydHlM
aXN0UGxhbjo6d3JpdGVJbnRlZ2VyQXJyYXkoY29uc3QgaW50KiBpbnRlZ2Vycywgc2l6ZV90IHNp
emUpCiAgICAgICAgIHJldHVybjsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsr
aSkKICAgICAgICAgd3JpdGVJbnRlZ2VyKGludGVnZXJzW2ldKTsKLSAgICBhZGRSZXN1bHQuaXRl
cmF0b3ItPnNlY29uZCA9IG1fY3VycmVudE9iamVjdFJlZmVyZW5jZSsrOworICAgIGFkZFJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUgPSBtX2N1cnJlbnRPYmplY3RSZWZlcmVuY2UrKzsKICAgICB3cml0
ZUFycmF5T2JqZWN0KHNpemUpOwogICAgIG1fY3VycmVudEFnZ3JlZ2F0ZVNpemUgPSBzYXZlZEFn
Z3JlZ2F0ZVNpemU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9zdXBwb3J0L1dlYkhUVFBMb2FkSW5mby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jaHJvbWl1bS9zdXBwb3J0L1dlYkhUVFBMb2FkSW5mby5jcHAKaW5kZXggZDdkNTdmMjEyMTA0
ZmU5OTA3NTY2MzI1MGQ0NDIzYjFlNjI2YjYyNy4uODAwZjZhYzI5M2M2ZDk5OWIxZGE4ZmQyNGZj
ZTdjNGYxMjNmZWZkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vc3VwcG9ydC9XZWJIVFRQTG9hZEluZm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViSFRUUExvYWRJbmZvLmNwcApAQCAtMTA1LDcgKzEwNSw3
IEBAIHN0YXRpYyB2b2lkIGFkZEhlYWRlcihIVFRQSGVhZGVyTWFwKiBtYXAsIGNvbnN0IFdlYlN0
cmluZyYgbmFtZSwgY29uc3QgV2ViU3RyaW5nCiB7CiAgICAgSFRUUEhlYWRlck1hcDo6QWRkUmVz
dWx0IHJlc3VsdCA9IG1hcC0+YWRkKG5hbWUsIHZhbHVlKTsKICAgICBpZiAoIXJlc3VsdC5pc05l
d0VudHJ5KQotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCArPSAiLCAiICsgU3RyaW5n
KHZhbHVlKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSArPSAiLCAiICsgU3RyaW5n
KHZhbHVlKTsKIH0KIAogdm9pZCBXZWJIVFRQTG9hZEluZm86OmFkZFJlcXVlc3RIZWFkZXIoY29u
c3QgV2ViU3RyaW5nJiBuYW1lLCBjb25zdCBXZWJTdHJpbmcmIHZhbHVlKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJVUkxSZXF1ZXN0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVVJMUmVxdWVz
dC5jcHAKaW5kZXggZjQzN2I1MTY0M2IyMzRiNjA5Zjc3MjVmYjhkNzZkNzMxZjU2MTdlYS4uZTM4
NTEwMTRmY2RkNDViZmFjYjQ4Yjk3YmJhNzZlMzFkOGI0YTAxNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJVUkxSZXF1ZXN0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlVSTFJlcXVlc3Qu
Y3BwCkBAIC0xOTUsNyArMTk1LDcgQEAgdm9pZCBXZWJVUkxSZXF1ZXN0Ojp2aXNpdEhUVFBIZWFk
ZXJGaWVsZHMoV2ViSFRUUEhlYWRlclZpc2l0b3IqIHZpc2l0b3IpIGNvbnN0CiB7CiAgICAgY29u
c3QgSFRUUEhlYWRlck1hcCYgbWFwID0gbV9wcml2YXRlLT5tX3Jlc291cmNlUmVxdWVzdC0+aHR0
cEhlYWRlckZpZWxkcygpOwogICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtYXAuYmVnaW4oKTsgaXQgIT0gbWFwLmVuZCgpOyArK2l0KQotICAgICAgICB2aXNpdG9y
LT52aXNpdEhlYWRlcihpdC0+Zmlyc3QsIGl0LT5zZWNvbmQpOworICAgICAgICB2aXNpdG9yLT52
aXNpdEhlYWRlcihpdC0+a2V5LCBpdC0+dmFsdWUpOwogfQogCiBXZWJIVFRQQm9keSBXZWJVUkxS
ZXF1ZXN0OjpodHRwQm9keSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlVSTFJlc3BvbnNlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVVJMUmVzcG9uc2UuY3BwCmluZGV4IDA1NjU4
MDUwZDg5NDhlNDJjODhiMjg3NTc2ZmNmOThjMWJmODM5YmYuLjA2ZTk0M2JlYjQ3ZmFhNTAzZjJk
OWVkMzljMmVkNjdhZDYwZjNmYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2Nocm9taXVtL3N1cHBvcnQvV2ViVVJMUmVzcG9uc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVVJMUmVzcG9uc2UuY3BwCkBAIC0yNTEsNyAr
MjUxLDcgQEAgdm9pZCBXZWJVUkxSZXNwb25zZTo6YWRkSFRUUEhlYWRlckZpZWxkKGNvbnN0IFdl
YlN0cmluZyYgbmFtZSwgY29uc3QgV2ViU3RyaW5nJgogICAgIEhUVFBIZWFkZXJNYXA6OkFkZFJl
c3VsdCByZXN1bHQgPQogICAgICAgICBjb25zdF9jYXN0PEhUVFBIZWFkZXJNYXAqPigmbWFwKS0+
YWRkKG5hbWUsIHZhbHVlU3RyKTsKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAg
ICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCArPSAiLCAiICsgdmFsdWVTdHI7CisgICAgICAgIHJl
c3VsdC5pdGVyYXRvci0+dmFsdWUgKz0gIiwgIiArIHZhbHVlU3RyOwogfQogCiB2b2lkIFdlYlVS
TFJlc3BvbnNlOjpjbGVhckhUVFBIZWFkZXJGaWVsZChjb25zdCBXZWJTdHJpbmcmIG5hbWUpCkBA
IC0yNjUsNyArMjY1LDcgQEAgdm9pZCBXZWJVUkxSZXNwb25zZTo6dmlzaXRIVFRQSGVhZGVyRmll
bGRzKFdlYkhUVFBIZWFkZXJWaXNpdG9yKiB2aXNpdG9yKSBjb25zdAogewogICAgIGNvbnN0IEhU
VFBIZWFkZXJNYXAmIG1hcCA9IG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlc3BvbnNlLT5odHRwSGVh
ZGVyRmllbGRzKCk7CiAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9
IG1hcC5iZWdpbigpOyBpdCAhPSBtYXAuZW5kKCk7ICsraXQpCi0gICAgICAgIHZpc2l0b3ItPnZp
c2l0SGVhZGVyKGl0LT5maXJzdCwgaXQtPnNlY29uZCk7CisgICAgICAgIHZpc2l0b3ItPnZpc2l0
SGVhZGVyKGl0LT5rZXksIGl0LT52YWx1ZSk7CiB9CiAKIGRvdWJsZSBXZWJVUkxSZXNwb25zZTo6
bGFzdE1vZGlmaWVkRGF0ZSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udENhY2hlLmNwcAppbmRleCA0N2YyNTFjODQxNGExZTJkYjU5ZjAwNGE5MDQ0YWEw
ZjhjMmU5ZDY1Li43YTRlOWM3ZmRiMzVmY2E3Njk0NTYyMTc0YmQ5YTdmNmMwZTc5OWY4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAKQEAgLTE5
OSw3ICsxOTksNyBAQCBGb250UGxhdGZvcm1EYXRhKiBGb250Q2FjaGU6OmdldENhY2hlZEZvbnRQ
bGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmbwogICAgICAgICBnRm9udFBsYXRm
b3JtRGF0YUNhY2hlLT5zZXQoa2V5LCByZXN1bHQpOwogICAgICAgICBmb3VuZFJlc3VsdCA9IHJl
c3VsdDsKICAgICB9IGVsc2UgewotICAgICAgICByZXN1bHQgPSBpdC0+c2Vjb25kOworICAgICAg
ICByZXN1bHQgPSBpdC0+dmFsdWU7CiAgICAgICAgIGZvdW5kUmVzdWx0ID0gdHJ1ZTsKICAgICB9
CiAKQEAgLTI5NCwyMCArMjk0LDIwIEBAIFNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldENh
Y2hlZEZvbnREYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEqIHBsYXRmb3JtRGF0CiAgICAgICAg
IHJldHVybiBuZXdWYWx1ZS5maXJzdDsKICAgICB9CiAKLSAgICBpZiAoIXJlc3VsdC5nZXQoKS0+
c2Vjb25kLnNlY29uZCkgewotICAgICAgICBBU1NFUlQoZ0luYWN0aXZlRm9udERhdGEtPmNvbnRh
aW5zKHJlc3VsdC5nZXQoKS0+c2Vjb25kLmZpcnN0KSk7Ci0gICAgICAgIGdJbmFjdGl2ZUZvbnRE
YXRhLT5yZW1vdmUocmVzdWx0LmdldCgpLT5zZWNvbmQuZmlyc3QpOworICAgIGlmICghcmVzdWx0
LmdldCgpLT52YWx1ZS5zZWNvbmQpIHsKKyAgICAgICAgQVNTRVJUKGdJbmFjdGl2ZUZvbnREYXRh
LT5jb250YWlucyhyZXN1bHQuZ2V0KCktPnZhbHVlLmZpcnN0KSk7CisgICAgICAgIGdJbmFjdGl2
ZUZvbnREYXRhLT5yZW1vdmUocmVzdWx0LmdldCgpLT52YWx1ZS5maXJzdCk7CiAgICAgfQogCiAg
ICAgaWYgKHNob3VsZFJldGFpbiA9PSBSZXRhaW4pCi0gICAgICAgIHJlc3VsdC5nZXQoKS0+c2Vj
b25kLnNlY29uZCsrOwotICAgIGVsc2UgaWYgKCFyZXN1bHQuZ2V0KCktPnNlY29uZC5zZWNvbmQp
IHsKKyAgICAgICAgcmVzdWx0LmdldCgpLT52YWx1ZS5zZWNvbmQrKzsKKyAgICBlbHNlIGlmICgh
cmVzdWx0LmdldCgpLT52YWx1ZS5zZWNvbmQpIHsKICAgICAgICAgLy8gSWYgc2hvdWxkUmV0YWlu
IGlzIERvTm90UmV0YWluIGFuZCBjb3VudCBpcyAwLCB3ZSB3YW50IHRvIHJlbW92ZSB0aGUgZm9u
dERhdGEgZnJvbSAKICAgICAgICAgLy8gZ0luYWN0aXZlRm9udERhdGEgKGFib3ZlKSBhbmQgcmUt
YWRkIGhlcmUgdG8gdXBkYXRlIExSVSBwb3NpdGlvbi4KLSAgICAgICAgZ0luYWN0aXZlRm9udERh
dGEtPmFkZChyZXN1bHQuZ2V0KCktPnNlY29uZC5maXJzdCk7CisgICAgICAgIGdJbmFjdGl2ZUZv
bnREYXRhLT5hZGQocmVzdWx0LmdldCgpLT52YWx1ZS5maXJzdCk7CiAgICAgfQogCi0gICAgcmV0
dXJuIHJlc3VsdC5nZXQoKS0+c2Vjb25kLmZpcnN0OworICAgIHJldHVybiByZXN1bHQuZ2V0KCkt
PnZhbHVlLmZpcnN0OwogfQogCiBTaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXROb25SZXRh
aW5lZExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVz
Y3JpcHRpb24pCkBAIC0zMjMsOCArMzIzLDggQEAgdm9pZCBGb250Q2FjaGU6OnJlbGVhc2VGb250
RGF0YShjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEpCiAgICAgRm9udERhdGFDYWNoZTo6
aXRlcmF0b3IgaXQgPSBnRm9udERhdGFDYWNoZS0+ZmluZChmb250RGF0YS0+cGxhdGZvcm1EYXRh
KCkpOwogICAgIEFTU0VSVChpdCAhPSBnRm9udERhdGFDYWNoZS0+ZW5kKCkpOwogCi0gICAgQVNT
RVJUKGl0LT5zZWNvbmQuc2Vjb25kKTsKLSAgICBpZiAoIS0taXQtPnNlY29uZC5zZWNvbmQpCisg
ICAgQVNTRVJUKGl0LT52YWx1ZS5zZWNvbmQpOworICAgIGlmICghLS1pdC0+dmFsdWUuc2Vjb25k
KQogICAgICAgICBnSW5hY3RpdmVGb250RGF0YS0+YWRkKGZvbnREYXRhKTsKIH0KIApAQCAtMzcy
LDggKzM3Miw4IEBAIHZvaWQgRm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGEoaW50IGNv
dW50KQogICAgICAgICBrZXlzVG9SZW1vdmUucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShnRm9udFBs
YXRmb3JtRGF0YUNhY2hlLT5zaXplKCkpOwogICAgICAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGU6
Oml0ZXJhdG9yIHBsYXRmb3JtRGF0YUVuZCA9IGdGb250UGxhdGZvcm1EYXRhQ2FjaGUtPmVuZCgp
OwogICAgICAgICBmb3IgKEZvbnRQbGF0Zm9ybURhdGFDYWNoZTo6aXRlcmF0b3IgcGxhdGZvcm1E
YXRhID0gZ0ZvbnRQbGF0Zm9ybURhdGFDYWNoZS0+YmVnaW4oKTsgcGxhdGZvcm1EYXRhICE9IHBs
YXRmb3JtRGF0YUVuZDsgKytwbGF0Zm9ybURhdGEpIHsKLSAgICAgICAgICAgIGlmIChwbGF0Zm9y
bURhdGEtPnNlY29uZCAmJiAhZ0ZvbnREYXRhQ2FjaGUtPmNvbnRhaW5zKCpwbGF0Zm9ybURhdGEt
PnNlY29uZCkpCi0gICAgICAgICAgICAgICAga2V5c1RvUmVtb3ZlLmFwcGVuZChwbGF0Zm9ybURh
dGEtPmZpcnN0KTsKKyAgICAgICAgICAgIGlmIChwbGF0Zm9ybURhdGEtPnZhbHVlICYmICFnRm9u
dERhdGFDYWNoZS0+Y29udGFpbnMoKnBsYXRmb3JtRGF0YS0+dmFsdWUpKQorICAgICAgICAgICAg
ICAgIGtleXNUb1JlbW92ZS5hcHBlbmQocGxhdGZvcm1EYXRhLT5rZXkpOwogICAgICAgICB9CiAg
ICAgICAgIAogICAgICAgICBzaXplX3Qga2V5c1RvUmVtb3ZlQ291bnQgPSBrZXlzVG9SZW1vdmUu
c2l6ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5
cGhQYWdlVHJlZU5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5
cGhQYWdlVHJlZU5vZGUuY3BwCmluZGV4IDg3ZTkzZmQ5OGZmOGRlZjA5NDgxNmE1MjQzNGU5MDA1
ZTg5OTk1OWQuLjYzNWVjN2IyMjlhYjRjYTk5MThiNTVmZWRkN2ZhOTg3YjQxOTI2NTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZVRyZWVOb2Rl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2VUcmVl
Tm9kZS5jcHAKQEAgLTc0LDcgKzc0LDcgQEAgc2l6ZV90IEdseXBoUGFnZVRyZWVOb2RlOjp0cmVl
R2x5cGhQYWdlQ291bnQoKQogICAgIGlmIChyb290cykgewogICAgICAgICBIYXNoTWFwPGludCwg
R2x5cGhQYWdlVHJlZU5vZGUqPjo6aXRlcmF0b3IgZW5kID0gcm9vdHMtPmVuZCgpOwogICAgICAg
ICBmb3IgKEhhc2hNYXA8aW50LCBHbHlwaFBhZ2VUcmVlTm9kZSo+OjppdGVyYXRvciBpdCA9IHJv
b3RzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBjb3VudCArPSBpdC0+
c2Vjb25kLT5wYWdlQ291bnQoKTsKKyAgICAgICAgICAgIGNvdW50ICs9IGl0LT52YWx1ZS0+cGFn
ZUNvdW50KCk7CiAgICAgfQogICAgIAogICAgIGlmIChwYWdlWmVyb1Jvb3QpCkBAIC04OCw3ICs4
OCw3IEBAIHNpemVfdCBHbHlwaFBhZ2VUcmVlTm9kZTo6cGFnZUNvdW50KCkgY29uc3QKICAgICBz
aXplX3QgY291bnQgPSBtX3BhZ2UgJiYgbV9wYWdlLT5vd25lcigpID09IHRoaXMgPyAxIDogMDsK
ICAgICBIYXNoTWFwPGNvbnN0IEZvbnREYXRhKiwgR2x5cGhQYWdlVHJlZU5vZGUqPjo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gbV9jaGlsZHJlbi5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8Y29uc3Qg
Rm9udERhdGEqLCBHbHlwaFBhZ2VUcmVlTm9kZSo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fY2hp
bGRyZW4uYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBjb3VudCArPSBpdC0+c2Vj
b25kLT5wYWdlQ291bnQoKTsKKyAgICAgICAgY291bnQgKz0gaXQtPnZhbHVlLT5wYWdlQ291bnQo
KTsKIAogICAgIHJldHVybiBjb3VudDsKIH0KQEAgLTk5LDcgKzk5LDcgQEAgdm9pZCBHbHlwaFBh
Z2VUcmVlTm9kZTo6cHJ1bmVUcmVlQ3VzdG9tRm9udERhdGEoY29uc3QgRm9udERhdGEqIGZvbnRE
YXRhKQogICAgIGlmIChyb290cykgewogICAgICAgICBIYXNoTWFwPGludCwgR2x5cGhQYWdlVHJl
ZU5vZGUqPjo6aXRlcmF0b3IgZW5kID0gcm9vdHMtPmVuZCgpOwogICAgICAgICBmb3IgKEhhc2hN
YXA8aW50LCBHbHlwaFBhZ2VUcmVlTm9kZSo+OjppdGVyYXRvciBpdCA9IHJvb3RzLT5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBpdC0+c2Vjb25kLT5wcnVuZUN1c3RvbUZv
bnREYXRhKGZvbnREYXRhKTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+cHJ1bmVDdXN0b21Gb250
RGF0YShmb250RGF0YSk7CiAgICAgfQogICAgIAogICAgIGlmIChwYWdlWmVyb1Jvb3QpCkBAIC0x
MTEsNyArMTExLDcgQEAgdm9pZCBHbHlwaFBhZ2VUcmVlTm9kZTo6cHJ1bmVUcmVlRm9udERhdGEo
Y29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKQogICAgIGlmIChyb290cykgewogICAgICAg
ICBIYXNoTWFwPGludCwgR2x5cGhQYWdlVHJlZU5vZGUqPjo6aXRlcmF0b3IgZW5kID0gcm9vdHMt
PmVuZCgpOwogICAgICAgICBmb3IgKEhhc2hNYXA8aW50LCBHbHlwaFBhZ2VUcmVlTm9kZSo+Ojpp
dGVyYXRvciBpdCA9IHJvb3RzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAg
ICBpdC0+c2Vjb25kLT5wcnVuZUZvbnREYXRhKGZvbnREYXRhKTsKKyAgICAgICAgICAgIGl0LT52
YWx1ZS0+cHJ1bmVGb250RGF0YShmb250RGF0YSk7CiAgICAgfQogICAgIAogICAgIGlmIChwYWdl
WmVyb1Jvb3QpCkBAIC0zNjIsNyArMzYyLDcgQEAgdm9pZCBHbHlwaFBhZ2VUcmVlTm9kZTo6cHJ1
bmVDdXN0b21Gb250RGF0YShjb25zdCBGb250RGF0YSogZm9udERhdGEpCiAgICAgICAgIHJldHVy
bjsKICAgICBIYXNoTWFwPGNvbnN0IEZvbnREYXRhKiwgR2x5cGhQYWdlVHJlZU5vZGUqPjo6aXRl
cmF0b3IgZW5kID0gbV9jaGlsZHJlbi5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8Y29uc3QgRm9u
dERhdGEqLCBHbHlwaFBhZ2VUcmVlTm9kZSo+OjppdGVyYXRvciBpdCA9IG1fY2hpbGRyZW4uYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5wcnVuZUN1c3RvbUZv
bnREYXRhKGZvbnREYXRhKTsKKyAgICAgICAgaXQtPnZhbHVlLT5wcnVuZUN1c3RvbUZvbnREYXRh
KGZvbnREYXRhKTsKIH0KIAogdm9pZCBHbHlwaFBhZ2VUcmVlTm9kZTo6cHJ1bmVGb250RGF0YShj
b25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEsIHVuc2lnbmVkIGxldmVsKQpAQCAtMzc4LDcg
KzM3OCw3IEBAIHZvaWQgR2x5cGhQYWdlVHJlZU5vZGU6OnBydW5lRm9udERhdGEoY29uc3QgU2lt
cGxlRm9udERhdGEqIGZvbnREYXRhLCB1bnNpZ25lZCBsCiAgICAgLy8gUHJ1bmUgYW55IGJyYW5j
aCB0aGF0IGNvbnRhaW5zIHRoaXMgRm9udERhdGEuCiAgICAgSGFzaE1hcDxjb25zdCBGb250RGF0
YSosIEdseXBoUGFnZVRyZWVOb2RlKj46Oml0ZXJhdG9yIGNoaWxkID0gbV9jaGlsZHJlbi5maW5k
KGZvbnREYXRhKTsKICAgICBpZiAoY2hpbGQgIT0gbV9jaGlsZHJlbi5lbmQoKSkgewotICAgICAg
ICBHbHlwaFBhZ2VUcmVlTm9kZSogbm9kZSA9IGNoaWxkLT5zZWNvbmQ7CisgICAgICAgIEdseXBo
UGFnZVRyZWVOb2RlKiBub2RlID0gY2hpbGQtPnZhbHVlOwogICAgICAgICBtX2NoaWxkcmVuLnJl
bW92ZShmb250RGF0YSk7CiAgICAgICAgIHVuc2lnbmVkIGN1c3RvbUZvbnRDb3VudCA9IG5vZGUt
Pm1fY3VzdG9tRm9udENvdW50OwogICAgICAgICBkZWxldGUgbm9kZTsKQEAgLTM5NCw3ICszOTQs
NyBAQCB2b2lkIEdseXBoUGFnZVRyZWVOb2RlOjpwcnVuZUZvbnREYXRhKGNvbnN0IFNpbXBsZUZv
bnREYXRhKiBmb250RGF0YSwgdW5zaWduZWQgbAogCiAgICAgSGFzaE1hcDxjb25zdCBGb250RGF0
YSosIEdseXBoUGFnZVRyZWVOb2RlKj46Oml0ZXJhdG9yIGVuZCA9IG1fY2hpbGRyZW4uZW5kKCk7
CiAgICAgZm9yIChIYXNoTWFwPGNvbnN0IEZvbnREYXRhKiwgR2x5cGhQYWdlVHJlZU5vZGUqPjo6
aXRlcmF0b3IgaXQgPSBtX2NoaWxkcmVuLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAg
ICAgaXQtPnNlY29uZC0+cHJ1bmVGb250RGF0YShmb250RGF0YSwgbGV2ZWwpOworICAgICAgICBp
dC0+dmFsdWUtPnBydW5lRm9udERhdGEoZm9udERhdGEsIGxldmVsKTsKIH0KIAogI2lmbmRlZiBO
REVCVUcKQEAgLTQwNiw4ICs0MDYsOCBAQCB2b2lkIEdseXBoUGFnZVRyZWVOb2RlOjpwcnVuZUZv
bnREYXRhKGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwgdW5zaWduZWQgbAogCiAgICAg
ICAgIEhhc2hNYXA8Y29uc3QgRm9udERhdGEqLCBHbHlwaFBhZ2VUcmVlTm9kZSo+OjppdGVyYXRv
ciBlbmQgPSBtX2NoaWxkcmVuLmVuZCgpOwogICAgICAgICBmb3IgKEhhc2hNYXA8Y29uc3QgRm9u
dERhdGEqLCBHbHlwaFBhZ2VUcmVlTm9kZSo+OjppdGVyYXRvciBpdCA9IG1fY2hpbGRyZW4uYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBwcmludGYoIiVzXHQlcCAlc1xu
IiwgaW5kZW50LmRhdGEoKSwgaXQtPmZpcnN0LCBpdC0+Zmlyc3QtPmRlc2NyaXB0aW9uKCkudXRm
OCgpLmRhdGEoKSk7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLT5zaG93U3VidHJlZSgpOworICAg
ICAgICAgICAgcHJpbnRmKCIlc1x0JXAgJXNcbiIsIGluZGVudC5kYXRhKCksIGl0LT5rZXksIGl0
LT5rZXktPmRlc2NyaXB0aW9uKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBpdC0+dmFs
dWUtPnNob3dTdWJ0cmVlKCk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKG1fc3lzdGVtRmFsbGJh
Y2tDaGlsZCkgewogICAgICAgICAgICAgcHJpbnRmKCIlc1x0KiBmYWxsYmFja1xuIiwgaW5kZW50
LmRhdGEoKSk7CkBAIC00MjUsOCArNDI1LDggQEAgdm9pZCBzaG93R2x5cGhQYWdlVHJlZXMoKQog
ICAgIHNob3dHbHlwaFBhZ2VUcmVlKDApOwogICAgIEhhc2hNYXA8aW50LCBXZWJDb3JlOjpHbHlw
aFBhZ2VUcmVlTm9kZSo+OjppdGVyYXRvciBlbmQgPSBXZWJDb3JlOjpHbHlwaFBhZ2VUcmVlTm9k
ZTo6cm9vdHMtPmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDxpbnQsIFdlYkNvcmU6OkdseXBoUGFn
ZVRyZWVOb2RlKj46Oml0ZXJhdG9yIGl0ID0gV2ViQ29yZTo6R2x5cGhQYWdlVHJlZU5vZGU6OnJv
b3RzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgcHJpbnRmKCJcblBhZ2Ug
JWQ6XG4iLCBpdC0+Zmlyc3QpOwotICAgICAgICBzaG93R2x5cGhQYWdlVHJlZShpdC0+Zmlyc3Qp
OworICAgICAgICBwcmludGYoIlxuUGFnZSAlZDpcbiIsIGl0LT5rZXkpOworICAgICAgICBzaG93
R2x5cGhQYWdlVHJlZShpdC0+a2V5KTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlLmNwcAppbmRleCA4NDg0
ZGE5NzFmOGVkOTA4MTZjOGYyYmIwMzRhYWYzZWNkYzczMzIyLi4wZDI4NTY2OTg3NGEzMjkzMDc1
YjMwNjFiYzdjYzZiZjE0N2MxMWUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmUuY3BwCkBAIC0xMTIsOSArMTEyLDkgQEAg
dm9pZCBUaWxlZEJhY2tpbmdTdG9yZTo6dXBkYXRlVGlsZUJ1ZmZlcnMoKQogICAgIFZlY3RvcjxS
ZWZQdHI8VGlsZT4gPiBkaXJ0eVRpbGVzOwogICAgIFRpbGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1f
dGlsZXMuZW5kKCk7CiAgICAgZm9yIChUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmICghaXQtPnNlY29uZC0+aXNEaXJ0
eSgpKQorICAgICAgICBpZiAoIWl0LT52YWx1ZS0+aXNEaXJ0eSgpKQogICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIGRpcnR5VGlsZXMuYXBwZW5kKGl0LT5zZWNvbmQpOworICAgICAgICBk
aXJ0eVRpbGVzLmFwcGVuZChpdC0+dmFsdWUpOwogICAgIH0KIAogICAgIGlmIChkaXJ0eVRpbGVz
LmlzRW1wdHkoKSkgewpAQCAtMzk3LDEzICszOTcsMTMgQEAgYm9vbCBUaWxlZEJhY2tpbmdTdG9y
ZTo6cmVzaXplRWRnZVRpbGVzKCkKICAgICBWZWN0b3I8VGlsZTo6Q29vcmRpbmF0ZT4gdGlsZXNU
b1JlbW92ZTsKICAgICBUaWxlTWFwOjppdGVyYXRvciBlbmQgPSBtX3RpbGVzLmVuZCgpOwogICAg
IGZvciAoVGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgewotICAgICAgICBUaWxlOjpDb29yZGluYXRlIHRpbGVDb29yZGluYXRlID0gaXQtPnNl
Y29uZC0+Y29vcmRpbmF0ZSgpOwotICAgICAgICBJbnRSZWN0IHRpbGVSZWN0ID0gaXQtPnNlY29u
ZC0+cmVjdCgpOworICAgICAgICBUaWxlOjpDb29yZGluYXRlIHRpbGVDb29yZGluYXRlID0gaXQt
PnZhbHVlLT5jb29yZGluYXRlKCk7CisgICAgICAgIEludFJlY3QgdGlsZVJlY3QgPSBpdC0+dmFs
dWUtPnJlY3QoKTsKICAgICAgICAgSW50UmVjdCBleHBlY3RlZFRpbGVSZWN0ID0gdGlsZVJlY3RG
b3JDb29yZGluYXRlKHRpbGVDb29yZGluYXRlKTsKICAgICAgICAgaWYgKGV4cGVjdGVkVGlsZVJl
Y3QuaXNFbXB0eSgpKQogICAgICAgICAgICAgdGlsZXNUb1JlbW92ZS5hcHBlbmQodGlsZUNvb3Jk
aW5hdGUpOwogICAgICAgICBlbHNlIGlmIChleHBlY3RlZFRpbGVSZWN0ICE9IHRpbGVSZWN0KSB7
Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLT5yZXNpemUoZXhwZWN0ZWRUaWxlUmVjdC5zaXplKCkp
OworICAgICAgICAgICAgaXQtPnZhbHVlLT5yZXNpemUoZXhwZWN0ZWRUaWxlUmVjdC5zaXplKCkp
OwogICAgICAgICAgICAgd2FzUmVzaXplZCA9IHRydWU7CiAgICAgICAgIH0KICAgICB9CkBAIC00
MjIsOCArNDIyLDggQEAgdm9pZCBUaWxlZEJhY2tpbmdTdG9yZTo6c2V0S2VlcFJlY3QoY29uc3Qg
SW50UmVjdCYga2VlcFJlY3QpCiAgICAgVmVjdG9yPFRpbGU6OkNvb3JkaW5hdGU+IHRvUmVtb3Zl
OwogICAgIFRpbGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fdGlsZXMuZW5kKCk7CiAgICAgZm9yIChU
aWxlTWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7
Ci0gICAgICAgIFRpbGU6OkNvb3JkaW5hdGUgY29vcmRpbmF0ZSA9IGl0LT5zZWNvbmQtPmNvb3Jk
aW5hdGUoKTsKLSAgICAgICAgRmxvYXRSZWN0IHRpbGVSZWN0ID0gaXQtPnNlY29uZC0+cmVjdCgp
OworICAgICAgICBUaWxlOjpDb29yZGluYXRlIGNvb3JkaW5hdGUgPSBpdC0+dmFsdWUtPmNvb3Jk
aW5hdGUoKTsKKyAgICAgICAgRmxvYXRSZWN0IHRpbGVSZWN0ID0gaXQtPnZhbHVlLT5yZWN0KCk7
CiAgICAgICAgIGlmICghdGlsZVJlY3QuaW50ZXJzZWN0cyhrZWVwUmVjdEYpKQogICAgICAgICAg
ICAgdG9SZW1vdmUuYXBwZW5kKGNvb3JkaW5hdGUpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9jZi9NZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb25DRi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vY2YvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0YuY3BwCmlu
ZGV4IDg3NWQxMmRmYmU3YmI0MjIxYmU3NTUyNGY4MWFjZDIwN2NhM2E3ODAuLjAzNmQ4ZjMyNmMw
YmY1YzJjODc1YTQ0YmIxNDA4MGE4NjRiZGY0MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9jZi9NZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb25DRi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZm
b3VuZGF0aW9uL2NmL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGLmNwcApAQCAtOTEy
LDcgKzkxMiw3IEBAIEFWRldyYXBwZXIqIEFWRldyYXBwZXI6OmF2ZldyYXBwZXJGb3JDYWxsYmFj
a0NvbnRleHQodm9pZCogY29udGV4dCkKICAgICBpZiAoaXQgPT0gbWFwKCkuZW5kKCkpCiAgICAg
ICAgIHJldHVybiAwOwogCi0gICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgcmV0dXJuIGl0LT52
YWx1ZTsKIH0KIAogdm9pZCBBVkZXcmFwcGVyOjpzY2hlZHVsZURpc2Nvbm5lY3RBbmREZWxldGUo
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJy
eS9MYXllclRpbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNr
YmVycnkvTGF5ZXJUaWxlci5jcHAKaW5kZXggZDUxN2FhYTdiNDAyNDQ4OTMyZGQ0MmJmOWRhYjQw
ZDEwMmE4ZDJjNC4uZjRjYmY0Nzc4Yjg5NzAzZmJmNjAxZTQwY2RlYjIyMTA4Njg3YTI0NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXll
clRpbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2Jl
cnJ5L0xheWVyVGlsZXIuY3BwCkBAIC0zODAsMTkgKzM4MCwxOSBAQCB2b2lkIExheWVyVGlsZXI6
OnVwbG9hZFRleHR1cmVzSWZOZWVkZWQoKQogICAgIGZvciAoVGlsZUpvYnNNYXA6OmNvbnN0X2l0
ZXJhdG9yIHRpbGVKb2JzSXRlciA9IHRpbGVKb2JzTWFwLmJlZ2luKCk7IHRpbGVKb2JzSXRlciAh
PSB0aWxlSm9ic0l0ZXJFbmQ7ICsrdGlsZUpvYnNJdGVyKSB7CiAgICAgICAgIEludFBvaW50IG9y
aWdpbiA9IG9yaWdpbk9mVGlsZSh0aWxlSm9ic0l0ZXItPmZpcnN0KTsKIAotICAgICAgICBMYXll
clRpbGUqIHRpbGUgPSBtX3RpbGVzQ29tcG9zaXRpbmdUaHJlYWQuZ2V0KHRpbGVKb2JzSXRlci0+
Zmlyc3QpOworICAgICAgICBMYXllclRpbGUqIHRpbGUgPSBtX3RpbGVzQ29tcG9zaXRpbmdUaHJl
YWQuZ2V0KHRpbGVKb2JzSXRlci0+a2V5KTsKICAgICAgICAgaWYgKCF0aWxlKSB7CiAgICAgICAg
ICAgICBpZiAob3JpZ2luLngoKSA+PSBtX3JlcXVpcmVkVGV4dHVyZVNpemUud2lkdGgoKSB8fCBv
cmlnaW4ueSgpID49IG1fcmVxdWlyZWRUZXh0dXJlU2l6ZS5oZWlnaHQoKSkKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgIHRpbGUgPSBuZXcgTGF5ZXJUaWxlKCk7Ci0gICAg
ICAgICAgICBtX3RpbGVzQ29tcG9zaXRpbmdUaHJlYWQuYWRkKHRpbGVKb2JzSXRlci0+Zmlyc3Qs
IHRpbGUpOworICAgICAgICAgICAgbV90aWxlc0NvbXBvc2l0aW5nVGhyZWFkLmFkZCh0aWxlSm9i
c0l0ZXItPmtleSwgdGlsZSk7CiAgICAgICAgIH0KIAogICAgICAgICBJbnRSZWN0IHRpbGVSZWN0
KG9yaWdpbiwgdGlsZVNpemUoKSk7CiAgICAgICAgIHRpbGVSZWN0LnNldFdpZHRoKG1pbihtX3Jl
cXVpcmVkVGV4dHVyZVNpemUud2lkdGgoKSAtIHRpbGVSZWN0LngoKSwgdGlsZVJlY3Qud2lkdGgo
KSkpOwogICAgICAgICB0aWxlUmVjdC5zZXRIZWlnaHQobWluKG1fcmVxdWlyZWRUZXh0dXJlU2l6
ZS5oZWlnaHQoKSAtIHRpbGVSZWN0LnkoKSwgdGlsZVJlY3QuaGVpZ2h0KCkpKTsKIAotICAgICAg
ICBwZXJmb3JtVGlsZUpvYih0aWxlLCAqdGlsZUpvYnNJdGVyLT5zZWNvbmQsIHRpbGVSZWN0KTsK
KyAgICAgICAgcGVyZm9ybVRpbGVKb2IodGlsZSwgKnRpbGVKb2JzSXRlci0+dmFsdWUsIHRpbGVS
ZWN0KTsKICAgICB9CiAKICAgICBtX3RleHR1cmVKb2JzLmNsZWFyKCk7CkBAIC00MzUsMTEgKzQz
NSwxMSBAQCB2b2lkIExheWVyVGlsZXI6OmFkZFRpbGVKb2IoY29uc3QgVGlsZUluZGV4JiBpbmRl
eCwgY29uc3QgVGV4dHVyZUpvYiYgam9iLCBUaWxlSgogICAgICAgICByZXR1cm47CiAKICAgICAv
LyBJbiB0aGlzIGNhc2Ugd2UgbGVhdmUgdGhlIHByZXZpb3VzIGpvYi4KLSAgICBpZiAoam9iLm1f
dHlwZSA9PSBUZXh0dXJlSm9iOjpEaXJ0eUNvbnRlbnRzICYmIHJlc3VsdC5pdGVyYXRvci0+c2Vj
b25kLT5tX3R5cGUgPT0gVGV4dHVyZUpvYjo6RGlzY2FyZENvbnRlbnRzKQorICAgIGlmIChqb2Iu
bV90eXBlID09IFRleHR1cmVKb2I6OkRpcnR5Q29udGVudHMgJiYgcmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZS0+bV90eXBlID09IFRleHR1cmVKb2I6OkRpc2NhcmRDb250ZW50cykKICAgICAgICAgcmV0
dXJuOwogCiAgICAgLy8gT3ZlcnJpZGUgdGhlIHByZXZpb3VzIGpvYi4KLSAgICByZXN1bHQuaXRl
cmF0b3ItPnNlY29uZCA9ICZqb2I7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9ICZqb2I7
CiB9CiAKIHZvaWQgTGF5ZXJUaWxlcjo6cGVyZm9ybVRpbGVKb2IoTGF5ZXJUaWxlKiB0aWxlLCBj
b25zdCBUZXh0dXJlSm9iJiBqb2IsIGNvbnN0IEludFJlY3QmIHRpbGVSZWN0KQpAQCAtNzMzLDcg
KzczMyw3IEBAIHZvaWQgTGF5ZXJUaWxlcjo6YmluZENvbnRlbnRzVGV4dHVyZSgpCiAgICAgaWYg
KG1fdGlsZXNDb21wb3NpdGluZ1RocmVhZC5zaXplKCkgIT0gMSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgY29uc3QgTGF5ZXJUaWxlKiB0aWxlID0gbV90aWxlc0NvbXBvc2l0aW5nVGhyZWFkLmJl
Z2luKCktPnNlY29uZDsKKyAgICBjb25zdCBMYXllclRpbGUqIHRpbGUgPSBtX3RpbGVzQ29tcG9z
aXRpbmdUaHJlYWQuYmVnaW4oKS0+dmFsdWU7CiAKICAgICBBU1NFUlQodGlsZS0+aGFzVGV4dHVy
ZSgpKTsKICAgICBpZiAoIXRpbGUtPmhhc1RleHR1cmUoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCmluZGV4IDFk
OWI0YzFhNjg1OWQ5ZWM2ZjdlMDUwMjg2YmJhMWZiYmZmZjJkMGYuLmJhYjlhNDA3ZWE3NDQzOTM3
YTFmNjMyMDk2MGJiYjlmNzc0ZDgxYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcApAQCAtNDc1LDcgKzQ3NSw3
IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjptb3ZlT3JDb3B5QW5pbWF0aW9ucyhNb3ZlT3JDb3B5
IG9wZXJhdGlvbiwgUGxhdGZvcm1DQUxheWVyCiAgICAgLy8gTG9vayBmb3IgcnVubmluZyBhbmlt
YXRpb25zIGFmZmVjdGluZyB0aGlzIHByb3BlcnR5LgogICAgIEFuaW1hdGlvbnNNYXA6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IG1fcnVubmluZ0FuaW1hdGlvbnMuZW5kKCk7CiAgICAgZm9yIChBbmlt
YXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fcnVubmluZ0FuaW1hdGlvbnMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IFZlY3RvcjxMYXllclByb3BlcnR5
QW5pbWF0aW9uPiYgcHJvcGVydHlBbmltYXRpb25zID0gaXQtPnNlY29uZDsKKyAgICAgICAgY29u
c3QgVmVjdG9yPExheWVyUHJvcGVydHlBbmltYXRpb24+JiBwcm9wZXJ0eUFuaW1hdGlvbnMgPSBp
dC0+dmFsdWU7CiAgICAgICAgIHNpemVfdCBudW1BbmltYXRpb25zID0gcHJvcGVydHlBbmltYXRp
b25zLnNpemUoKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1BbmltYXRpb25z
OyArK2kpIHsKICAgICAgICAgICAgIGNvbnN0IExheWVyUHJvcGVydHlBbmltYXRpb24mIGN1cnJB
bmltYXRpb24gPSBwcm9wZXJ0eUFuaW1hdGlvbnNbaV07CkBAIC03MDksNyArNzA5LDcgQEAgdm9p
ZCBHcmFwaGljc0xheWVyQ0E6OnBhdXNlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9u
TmFtZSwgZG91YmxlIHRpbWVPZmYKIAogICAgIEFuaW1hdGlvbnNUb1Byb2Nlc3NNYXA6Oml0ZXJh
dG9yIGl0ID0gbV9hbmltYXRpb25zVG9Qcm9jZXNzLmZpbmQoYW5pbWF0aW9uTmFtZSk7CiAgICAg
aWYgKGl0ICE9IG1fYW5pbWF0aW9uc1RvUHJvY2Vzcy5lbmQoKSkgewotICAgICAgICBBbmltYXRp
b25Qcm9jZXNzaW5nQWN0aW9uJiBwcm9jZXNzaW5nSW5mbyA9IGl0LT5zZWNvbmQ7CisgICAgICAg
IEFuaW1hdGlvblByb2Nlc3NpbmdBY3Rpb24mIHByb2Nlc3NpbmdJbmZvID0gaXQtPnZhbHVlOwog
ICAgICAgICAvLyBJZiBhbiBhbmltYXRpb24gaXMgc2NoZWR1bGVkIHRvIGJlIHJlbW92ZWQsIGRv
bid0IGNoYW5nZSB0aGUgcmVtb3ZlIHRvIGEgcGF1c2UuCiAgICAgICAgIGlmIChwcm9jZXNzaW5n
SW5mby5hY3Rpb24gIT0gUmVtb3ZlKQogICAgICAgICAgICAgcHJvY2Vzc2luZ0luZm8uYWN0aW9u
ID0gUGF1c2U7CkBAIC04NDQsNyArODQ0LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OmxheWVy
RGlkRGlzcGxheShQbGF0Zm9ybUxheWVyKiBsYXllcikKICAgICBpZiAobGF5ZXJDbG9uZU1hcCkg
ewogICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+
ZW5kKCk7CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJD
bG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBQbGF0Zm9y
bUNBTGF5ZXIqIGN1cnJDbG9uZSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBQbGF0
Zm9ybUNBTGF5ZXIqIGN1cnJDbG9uZSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGlm
ICghY3VyckNsb25lKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCkBAIC0xMTg2LDEwICsx
MTg2LDEwIEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVHZW9tZXRyeShmbG9hdCBwYWdl
U2NhbGVGYWN0b3IsIGNvbnN0IEZsb2F0UG9pbnQmIHBvCiAgICAgICAgIGlmIChMYXllck1hcCog
bGF5ZXJDbG9uZU1hcCA9IG1fc3RydWN0dXJhbExheWVyQ2xvbmVzLmdldCgpKSB7CiAgICAgICAg
ICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7
CiAgICAgICAgICAgICBmb3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGxheWVyQ2xv
bmVNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgICAgIFBsYXRm
b3JtQ0FMYXllciogY2xvbmUgPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgICAgIFBs
YXRmb3JtQ0FMYXllciogY2xvbmUgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICAgICAg
RmxvYXRQb2ludCBjbG9uZVBvc2l0aW9uID0gbGF5ZXJQb3NpdGlvbjsKIAotICAgICAgICAgICAg
ICAgIGlmIChtX3JlcGxpY2FMYXllciAmJiBpc1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQtPmZpcnN0
KSkgeworICAgICAgICAgICAgICAgIGlmIChtX3JlcGxpY2FMYXllciAmJiBpc1JlcGxpY2F0ZWRS
b290Q2xvbmUoaXQtPmtleSkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gTWFpbnRhaW4gdGhl
IHNwZWNpYWwtY2FzZSBwb3NpdGlvbiBmb3IgdGhlIHJvb3Qgb2YgYSBjbG9uZSBzdWJ0cmVlLAog
ICAgICAgICAgICAgICAgICAgICAvLyB3aGljaCB3ZSBzZXQgdXAgaW4gcmVwbGljYXRlZExheWVy
Um9vdCgpLgogICAgICAgICAgICAgICAgICAgICBjbG9uZVBvc2l0aW9uID0gcG9zaXRpb25Gb3JD
bG9uZVJvb3RMYXllcigpOwpAQCAtMTIxMywxMCArMTIxMywxMCBAQCB2b2lkIEdyYXBoaWNzTGF5
ZXJDQTo6dXBkYXRlR2VvbWV0cnkoZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBjb25zdCBGbG9hdFBv
aW50JiBwbwogICAgIGlmIChMYXllck1hcCogbGF5ZXJDbG9uZU1hcCA9IG1fbGF5ZXJDbG9uZXMu
Z2V0KCkpIHsKICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxheWVyQ2xv
bmVNYXAtPmVuZCgpOwogICAgICAgICBmb3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9
IGxheWVyQ2xvbmVNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAg
UGxhdGZvcm1DQUxheWVyKiBjbG9uZSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBQ
bGF0Zm9ybUNBTGF5ZXIqIGNsb25lID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAgICAgRmxv
YXRQb2ludCBjbG9uZVBvc2l0aW9uID0gYWRqdXN0ZWRQb3NpdGlvbjsKIAotICAgICAgICAgICAg
aWYgKCFtX3N0cnVjdHVyYWxMYXllciAmJiBtX3JlcGxpY2FMYXllciAmJiBpc1JlcGxpY2F0ZWRS
b290Q2xvbmUoaXQtPmZpcnN0KSkgeworICAgICAgICAgICAgaWYgKCFtX3N0cnVjdHVyYWxMYXll
ciAmJiBtX3JlcGxpY2FMYXllciAmJiBpc1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQtPmtleSkpIHsK
ICAgICAgICAgICAgICAgICAvLyBNYWludGFpbiB0aGUgc3BlY2lhbC1jYXNlIHBvc2l0aW9uIGZv
ciB0aGUgcm9vdCBvZiBhIGNsb25lIHN1YnRyZWUsCiAgICAgICAgICAgICAgICAgLy8gd2hpY2gg
d2Ugc2V0IHVwIGluIHJlcGxpY2F0ZWRMYXllclJvb3QoKS4KICAgICAgICAgICAgICAgICBjbG9u
ZVBvc2l0aW9uID0gcG9zaXRpb25Gb3JDbG9uZVJvb3RMYXllcigpOwpAQCAtMTIzNiw4ICsxMjM2
LDggQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZVRyYW5zZm9ybSgpCiAgICAgaWYgKExh
eWVyTWFwKiBsYXllckNsb25lTWFwID0gcHJpbWFyeUxheWVyQ2xvbmVzKCkpIHsKICAgICAgICAg
TGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxheWVyQ2xvbmVNYXAtPmVuZCgpOwogICAg
ICAgICBmb3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGxheWVyQ2xvbmVNYXAtPmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgUGxhdGZvcm1DQUxheWVyKiBj
dXJyTGF5ZXIgPSBpdC0+c2Vjb25kLmdldCgpOwotICAgICAgICAgICAgaWYgKG1fcmVwbGljYUxh
eWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9uZShpdC0+Zmlyc3QpKSB7CisgICAgICAgICAgICBQ
bGF0Zm9ybUNBTGF5ZXIqIGN1cnJMYXllciA9IGl0LT52YWx1ZS5nZXQoKTsKKyAgICAgICAgICAg
IGlmIChtX3JlcGxpY2FMYXllciAmJiBpc1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQtPmtleSkpIHsK
ICAgICAgICAgICAgICAgICAvLyBNYWludGFpbiB0aGUgc3BlY2lhbC1jYXNlIHRyYW5zZm9ybSBm
b3IgdGhlIHJvb3Qgb2YgYSBjbG9uZSBzdWJ0cmVlLAogICAgICAgICAgICAgICAgIC8vIHdoaWNo
IHdlIHNldCB1cCBpbiByZXBsaWNhdGVkTGF5ZXJSb290KCkuCiAgICAgICAgICAgICAgICAgY3Vy
ckxheWVyLT5zZXRUcmFuc2Zvcm0oVHJhbnNmb3JtYXRpb25NYXRyaXgoKSk7CkBAIC0xMjU0LDcg
KzEyNTQsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlQ2hpbGRyZW5UcmFuc2Zvcm0o
KQogICAgIGlmIChMYXllck1hcCogbGF5ZXJDbG9uZU1hcCA9IHByaW1hcnlMYXllckNsb25lcygp
KSB7CiAgICAgICAgIExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBsYXllckNsb25lTWFw
LT5lbmQoKTsKICAgICAgICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXll
ckNsb25lTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBpdC0+c2Vj
b25kLT5zZXRTdWJsYXllclRyYW5zZm9ybShtX2NoaWxkcmVuVHJhbnNmb3JtKTsKKyAgICAgICAg
ICAgIGl0LT52YWx1ZS0+c2V0U3VibGF5ZXJUcmFuc2Zvcm0obV9jaGlsZHJlblRyYW5zZm9ybSk7
CiAgICAgfQogfQogCkBAIC0xMjY1LDcgKzEyNjUsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6
dXBkYXRlTWFza3NUb0JvdW5kcygpCiAgICAgaWYgKExheWVyTWFwKiBsYXllckNsb25lTWFwID0g
bV9sYXllckNsb25lcy5nZXQoKSkgewogICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQot
ICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0TWFza3NUb0JvdW5kcyhtX21hc2tzVG9Cb3VuZHMp
OworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRNYXNrc1RvQm91bmRzKG1fbWFza3NUb0JvdW5k
cyk7CiAgICAgfQogCiAgICAgdXBkYXRlRGVidWdJbmRpY2F0b3JzKCk7CkBAIC0xMjgzLDcgKzEy
ODMsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlQ29udGVudHNWaXNpYmlsaXR5KCkK
ICAgICAgICAgaWYgKExheWVyTWFwKiBsYXllckNsb25lTWFwID0gbV9sYXllckNsb25lcy5nZXQo
KSkgewogICAgICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxheWVyQ2xv
bmVNYXAtPmVuZCgpOwogICAgICAgICAgICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBsYXllckNsb25lTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAg
ICAgICAgaXQtPnNlY29uZC0+c2V0Q29udGVudHMoMCk7CisgICAgICAgICAgICAgICAgaXQtPnZh
bHVlLT5zZXRDb250ZW50cygwKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTEyOTUsNyArMTI5
NSw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVDb250ZW50c09wYXF1ZSgpCiAgICAg
aWYgKExheWVyTWFwKiBsYXllckNsb25lTWFwID0gbV9sYXllckNsb25lcy5nZXQoKSkgewogICAg
ICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7
CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1h
cC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0
T3BhcXVlKG1fY29udGVudHNPcGFxdWUpOworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRPcGFx
dWUobV9jb250ZW50c09wYXF1ZSk7CiAgICAgfQogfQogCkBAIC0xMzA3LDcgKzEzMDcsNyBAQCB2
b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlQmFja2ZhY2VWaXNpYmlsaXR5KCkKICAgICAgICAg
aWYgKExheWVyTWFwKiBsYXllckNsb25lTWFwID0gbV9zdHJ1Y3R1cmFsTGF5ZXJDbG9uZXMuZ2V0
KCkpIHsKICAgICAgICAgICAgIExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBsYXllckNs
b25lTWFwLT5lbmQoKTsKICAgICAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAg
ICAgICAgIGl0LT5zZWNvbmQtPnNldERvdWJsZVNpZGVkKG1fYmFja2ZhY2VWaXNpYmlsaXR5KTsK
KyAgICAgICAgICAgICAgICBpdC0+dmFsdWUtPnNldERvdWJsZVNpZGVkKG1fYmFja2ZhY2VWaXNp
YmlsaXR5KTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTMxNiw3ICsxMzE2LDcgQEAgdm9pZCBH
cmFwaGljc0xheWVyQ0E6OnVwZGF0ZUJhY2tmYWNlVmlzaWJpbGl0eSgpCiAgICAgaWYgKExheWVy
TWFwKiBsYXllckNsb25lTWFwID0gbV9sYXllckNsb25lcy5nZXQoKSkgewogICAgICAgICBMYXll
ck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAgICAg
IGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0RG91YmxlU2lk
ZWQobV9iYWNrZmFjZVZpc2liaWxpdHkpOworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXREb3Vi
bGVTaWRlZChtX2JhY2tmYWNlVmlzaWJpbGl0eSk7CiAgICAgfQogfQogCkBAIC0xMzI4LDEwICsx
MzI4LDEwIEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVGaWx0ZXJzKCkKICAgICBpZiAo
TGF5ZXJNYXAqIGxheWVyQ2xvbmVNYXAgPSBwcmltYXJ5TGF5ZXJDbG9uZXMoKSkgewogICAgICAg
ICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAg
ICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAobV9yZXBsaWNhTGF5
ZXIgJiYgaXNSZXBsaWNhdGVkUm9vdENsb25lKGl0LT5maXJzdCkpCisgICAgICAgICAgICBpZiAo
bV9yZXBsaWNhTGF5ZXIgJiYgaXNSZXBsaWNhdGVkUm9vdENsb25lKGl0LT5rZXkpKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRGaWx0ZXJz
KG1fZmlsdGVycyk7CisgICAgICAgICAgICBpdC0+dmFsdWUtPnNldEZpbHRlcnMobV9maWx0ZXJz
KTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTE0MTksNyArMTQxOSw3IEBAIHZvaWQgR3JhcGhp
Y3NMYXllckNBOjplbnN1cmVTdHJ1Y3R1cmFsTGF5ZXIoU3RydWN0dXJhbExheWVyUHVycG9zZSBw
dXJwb3NlLCBmbG9hCiAgICAgaWYgKG1fbGF5ZXJDbG9uZXMpIHsKICAgICAgICAgTGF5ZXJNYXA6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fbGF5ZXJDbG9uZXMtPmVuZCgpOwogICAgICAgICBmb3Ig
KExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fbGF5ZXJDbG9uZXMtPmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgUGxhdGZvcm1DQUxheWVyKiBjdXJyTGF5ZXIg
PSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgUGxhdGZvcm1DQUxheWVyKiBjdXJyTGF5
ZXIgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBjdXJyTGF5ZXItPnNldFBvc2l0aW9u
KHBvaW50KTsKICAgICAgICAgICAgIGN1cnJMYXllci0+c2V0QW5jaG9yUG9pbnQoYW5jaG9yUG9p
bnQpOwogICAgICAgICAgICAgY3VyckxheWVyLT5zZXRUcmFuc2Zvcm0oVHJhbnNmb3JtYXRpb25N
YXRyaXgoKSk7CkBAIC0xNDY0LDcgKzE0NjQsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBk
YXRlTGF5ZXJEcmF3c0NvbnRlbnQoZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBjb25zdCBGbG9hdAog
ICAgICAgICBpZiAobV9sYXllckNsb25lcykgewogICAgICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IG1fbGF5ZXJDbG9uZXMtPmVuZCgpOwogICAgICAgICAgICAgZm9yIChM
YXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2xheWVyQ2xvbmVzLT5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCi0gICAgICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0Q29udGVudHMoMCk7
CisgICAgICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRDb250ZW50cygwKTsKICAgICAgICAgfQog
ICAgIH0KICAgICB1cGRhdGVEZWJ1Z0luZGljYXRvcnMoKTsKQEAgLTE1MTcsNyArMTUxNyw3IEBA
IHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVDb250ZW50c0ltYWdlKCkKICAgICAgICAgaWYg
KG1fY29udGVudHNMYXllckNsb25lcykgewogICAgICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IG1fY29udGVudHNMYXllckNsb25lcy0+ZW5kKCk7CiAgICAgICAgICAgICBm
b3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fY29udGVudHNMYXllckNsb25lcy0+
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNl
dENvbnRlbnRzKG1fY29udGVudHNMYXllci0+Y29udGVudHMoKSk7CisgICAgICAgICAgICAgICAg
aXQtPnZhbHVlLT5zZXRDb250ZW50cyhtX2NvbnRlbnRzTGF5ZXItPmNvbnRlbnRzKCkpOwogICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICB1cGRhdGVDb250ZW50c1JlY3QoKTsKQEAgLTE1NjEs
OCArMTU2MSw4IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVDb250ZW50c1JlY3QoKQog
ICAgIGlmIChtX2NvbnRlbnRzTGF5ZXJDbG9uZXMpIHsKICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IG1fY29udGVudHNMYXllckNsb25lcy0+ZW5kKCk7CiAgICAgICAgIGZv
ciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9jb250ZW50c0xheWVyQ2xvbmVzLT5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNldFBv
c2l0aW9uKHBvaW50KTsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNldEJvdW5kcyhyZWN0KTsK
KyAgICAgICAgICAgIGl0LT52YWx1ZS0+c2V0UG9zaXRpb24ocG9pbnQpOworICAgICAgICAgICAg
aXQtPnZhbHVlLT5zZXRCb3VuZHMocmVjdCk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0xNTc3
LDggKzE1NzcsOCBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlTWFza0xheWVyKCkKICAg
ICBpZiAoTGF5ZXJNYXAqIGxheWVyQ2xvbmVNYXAgPSBtX2xheWVyQ2xvbmVzLmdldCgpKSB7CiAg
ICAgICAgIExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBsYXllckNsb25lTWFwLT5lbmQo
KTsKICAgICAgICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXllckNsb25l
TWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsgICAgICAgICAgICAKLSAgICAgICAgICAg
IFBsYXRmb3JtQ0FMYXllciogbWFza0Nsb25lID0gbWFza0xheWVyQ2xvbmVNYXAgPyBtYXNrTGF5
ZXJDbG9uZU1hcC0+Z2V0KGl0LT5maXJzdCkuZ2V0KCkgOiAwOwotICAgICAgICAgICAgaXQtPnNl
Y29uZC0+c2V0TWFzayhtYXNrQ2xvbmUpOworICAgICAgICAgICAgUGxhdGZvcm1DQUxheWVyKiBt
YXNrQ2xvbmUgPSBtYXNrTGF5ZXJDbG9uZU1hcCA/IG1hc2tMYXllckNsb25lTWFwLT5nZXQoaXQt
PmtleSkuZ2V0KCkgOiAwOworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRNYXNrKG1hc2tDbG9u
ZSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0xNjQyLDEzICsxNjQyLDEzIEBAIHZvaWQgR3Jh
cGhpY3NMYXllckNBOjp1cGRhdGVMYXllckFuaW1hdGlvbnMoKQogICAgIGlmIChtX2FuaW1hdGlv
bnNUb1Byb2Nlc3Muc2l6ZSgpKSB7CiAgICAgICAgIEFuaW1hdGlvbnNUb1Byb2Nlc3NNYXA6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IG1fYW5pbWF0aW9uc1RvUHJvY2Vzcy5lbmQoKTsKICAgICAgICAg
Zm9yIChBbmltYXRpb25zVG9Qcm9jZXNzTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fYW5pbWF0
aW9uc1RvUHJvY2Vzcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGNv
bnN0IFN0cmluZyYgY3VyckFuaW1hdGlvbk5hbWUgPSBpdC0+Zmlyc3Q7CisgICAgICAgICAgICBj
b25zdCBTdHJpbmcmIGN1cnJBbmltYXRpb25OYW1lID0gaXQtPmtleTsKICAgICAgICAgICAgIEFu
aW1hdGlvbnNNYXA6Oml0ZXJhdG9yIGFuaW1hdGlvbkl0ID0gbV9ydW5uaW5nQW5pbWF0aW9ucy5m
aW5kKGN1cnJBbmltYXRpb25OYW1lKTsKICAgICAgICAgICAgIGlmIChhbmltYXRpb25JdCA9PSBt
X3J1bm5pbmdBbmltYXRpb25zLmVuZCgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0g
ICAgICAgICAgICBjb25zdCBBbmltYXRpb25Qcm9jZXNzaW5nQWN0aW9uJiBwcm9jZXNzaW5nSW5m
byA9IGl0LT5zZWNvbmQ7Ci0gICAgICAgICAgICBjb25zdCBWZWN0b3I8TGF5ZXJQcm9wZXJ0eUFu
aW1hdGlvbj4mIGFuaW1hdGlvbnMgPSBhbmltYXRpb25JdC0+c2Vjb25kOworICAgICAgICAgICAg
Y29uc3QgQW5pbWF0aW9uUHJvY2Vzc2luZ0FjdGlvbiYgcHJvY2Vzc2luZ0luZm8gPSBpdC0+dmFs
dWU7CisgICAgICAgICAgICBjb25zdCBWZWN0b3I8TGF5ZXJQcm9wZXJ0eUFuaW1hdGlvbj4mIGFu
aW1hdGlvbnMgPSBhbmltYXRpb25JdC0+dmFsdWU7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgICAgICBjb25z
dCBMYXllclByb3BlcnR5QW5pbWF0aW9uJiBjdXJyQW5pbWF0aW9uID0gYW5pbWF0aW9uc1tpXTsK
ICAgICAgICAgICAgICAgICBzd2l0Y2ggKHByb2Nlc3NpbmdJbmZvLmFjdGlvbikgewpAQCAtMTY4
MCw3ICsxNjgwLDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUxheWVyQW5pbWF0aW9u
cygpCiAgICAgICAgICAgICAgICAgYW5pbWF0aW9ucy5hcHBlbmQocGVuZGluZ0FuaW1hdGlvbik7
CiAgICAgICAgICAgICAgICAgbV9ydW5uaW5nQW5pbWF0aW9ucy5hZGQocGVuZGluZ0FuaW1hdGlv
bi5tX25hbWUsIGFuaW1hdGlvbnMpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICBWZWN0b3I8TGF5ZXJQcm9wZXJ0eUFuaW1hdGlvbj4mIGFuaW1hdGlvbnMgPSBpdC0+c2Vj
b25kOworICAgICAgICAgICAgICAgIFZlY3RvcjxMYXllclByb3BlcnR5QW5pbWF0aW9uPiYgYW5p
bWF0aW9ucyA9IGl0LT52YWx1ZTsKICAgICAgICAgICAgICAgICBhbmltYXRpb25zLmFwcGVuZChw
ZW5kaW5nQW5pbWF0aW9uKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTcwNSwxMSAr
MTcwNSwxMSBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c2V0QW5pbWF0aW9uT25MYXllcihQbGF0
Zm9ybUNBQW5pbWF0aW9uKiBjYUFuaW0sIEFuaW1hdGVkUAogICAgICAgICBMYXllck1hcDo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAoTGF5
ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7CiAgICAgICAgICAgICAvLyBTa2lwIGltbWVkaWF0ZSByZXBsaWNhcywgc2lu
Y2UgdGhleSBtb3ZlIHdpdGggdGhlIG9yaWdpbmFsLgotICAgICAgICAgICAgaWYgKG1fcmVwbGlj
YUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9uZShpdC0+Zmlyc3QpKQorICAgICAgICAgICAg
aWYgKG1fcmVwbGljYUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9uZShpdC0+a2V5KSkKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgaXQtPnNlY29uZC0+cmVtb3Zl
QW5pbWF0aW9uRm9yS2V5KGFuaW1hdGlvbklEKTsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPmFk
ZEFuaW1hdGlvbkZvcktleShhbmltYXRpb25JRCwgY2FBbmltKTsKKyAgICAgICAgICAgIGl0LT52
YWx1ZS0+cmVtb3ZlQW5pbWF0aW9uRm9yS2V5KGFuaW1hdGlvbklEKTsKKyAgICAgICAgICAgIGl0
LT52YWx1ZS0+YWRkQW5pbWF0aW9uRm9yS2V5KGFuaW1hdGlvbklELCBjYUFuaW0pOwogICAgICAg
ICB9CiAgICAgfQogfQpAQCAtMTc0NCwxMCArMTc0NCwxMCBAQCBib29sIEdyYXBoaWNzTGF5ZXJD
QTo6cmVtb3ZlQ0FBbmltYXRpb25Gcm9tTGF5ZXIoQW5pbWF0ZWRQcm9wZXJ0eUlEIHByb3BlcnR5
LCBjbwogICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1h
cC0+ZW5kKCk7CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5
ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICAvLyBT
a2lwIGltbWVkaWF0ZSByZXBsaWNhcywgc2luY2UgdGhleSBtb3ZlIHdpdGggdGhlIG9yaWdpbmFs
LgotICAgICAgICAgICAgaWYgKG1fcmVwbGljYUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9u
ZShpdC0+Zmlyc3QpKQorICAgICAgICAgICAgaWYgKG1fcmVwbGljYUxheWVyICYmIGlzUmVwbGlj
YXRlZFJvb3RDbG9uZShpdC0+a2V5KSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAg
ICAgICAgICAgaXQtPnNlY29uZCAtPnJlbW92ZUFuaW1hdGlvbkZvcktleShhbmltYXRpb25JRCk7
CisgICAgICAgICAgICBpdC0+dmFsdWUgLT5yZW1vdmVBbmltYXRpb25Gb3JLZXkoYW5pbWF0aW9u
SUQpOwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiB0cnVlOwpAQCAtMTc3Niw5ICsxNzc2
LDkgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnBhdXNlQ0FBbmltYXRpb25PbkxheWVyKEFuaW1h
dGVkUHJvcGVydHlJRCBwcm9wZXJ0eSwgY29uc3QKICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IGxheWVyQ2xvbmVNYXAtPmVuZCgpOwogICAgICAgICBmb3IgKExheWVyTWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IGxheWVyQ2xvbmVNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgewogICAgICAgICAgICAgLy8gU2tpcCBpbW1lZGlhdGUgcmVwbGljYXMsIHNpbmNlIHRo
ZXkgbW92ZSB3aXRoIHRoZSBvcmlnaW5hbC4KLSAgICAgICAgICAgIGlmIChtX3JlcGxpY2FMYXll
ciAmJiBpc1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQtPmZpcnN0KSkKKyAgICAgICAgICAgIGlmICht
X3JlcGxpY2FMYXllciAmJiBpc1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQtPmtleSkpCiAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLT5hZGRBbmltYXRpb25G
b3JLZXkoYW5pbWF0aW9uSUQsIG5ld0FuaW0uZ2V0KCkpOworICAgICAgICAgICAgaXQtPnZhbHVl
LT5hZGRBbmltYXRpb25Gb3JLZXkoYW5pbWF0aW9uSUQsIG5ld0FuaW0uZ2V0KCkpOwogICAgICAg
ICB9CiAgICAgfQogfQpAQCAtMjI4Miw4ICsyMjgyLDggQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6
OnN1c3BlbmRBbmltYXRpb25zKGRvdWJsZSB0aW1lKQogICAgIGlmIChMYXllck1hcCogbGF5ZXJD
bG9uZU1hcCA9IHByaW1hcnlMYXllckNsb25lcygpKSB7CiAgICAgICAgIExheWVyTWFwOjpjb25z
dF9pdGVyYXRvciBlbmQgPSBsYXllckNsb25lTWFwLT5lbmQoKTsKICAgICAgICAgZm9yIChMYXll
ck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXllckNsb25lTWFwLT5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNldFNwZWVkKDApOwotICAgICAg
ICAgICAgaXQtPnNlY29uZC0+c2V0VGltZU9mZnNldCh0KTsKKyAgICAgICAgICAgIGl0LT52YWx1
ZS0+c2V0U3BlZWQoMCk7CisgICAgICAgICAgICBpdC0+dmFsdWUtPnNldFRpbWVPZmZzZXQodCk7
CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0yMjk3LDggKzIyOTcsOCBAQCB2b2lkIEdyYXBoaWNz
TGF5ZXJDQTo6cmVzdW1lQW5pbWF0aW9ucygpCiAgICAgaWYgKExheWVyTWFwKiBsYXllckNsb25l
TWFwID0gcHJpbWFyeUxheWVyQ2xvbmVzKCkpIHsKICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IGxheWVyQ2xvbmVNYXAtPmVuZCgpOwogICAgICAgICBmb3IgKExheWVyTWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IGxheWVyQ2xvbmVNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgewotICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0U3BlZWQoMSk7Ci0gICAgICAgICAg
ICBpdC0+c2Vjb25kLT5zZXRUaW1lT2Zmc2V0KDApOworICAgICAgICAgICAgaXQtPnZhbHVlLT5z
ZXRTcGVlZCgxKTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+c2V0VGltZU9mZnNldCgwKTsKICAg
ICAgICAgfQogICAgIH0KIH0KQEAgLTI1MDgsMTMgKzI1MDgsMTMgQEAgUGFzc1JlZlB0cjxQbGF0
Zm9ybUNBTGF5ZXI+IEdyYXBoaWNzTGF5ZXJDQTo6ZmluZE9yTWFrZUNsb25lKENsb25lSUQgY2xv
bmVJRCwgUGwKICAgICBMYXllck1hcDo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IGNsb25lcy0+YWRk
KGNsb25lSUQsIGR1bW15KTsKICAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5KSB7CiAgICAg
ICAgIC8vIFZhbHVlIHdhcyBub3QgYWRkZWQsIHNvIGl0IGV4aXN0cyBhbHJlYWR5LgotICAgICAg
ICByZXN1bHRMYXllciA9IGFkZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLmdldCgpOworICAgICAg
ICByZXN1bHRMYXllciA9IGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7CiAgICAgfSBl
bHNlIHsKICAgICAgICAgcmVzdWx0TGF5ZXIgPSBjbG9uZUxheWVyKHNvdXJjZUxheWVyLCBjbG9u
ZUxldmVsKTsKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgIHJlc3VsdExheWVyLT5zZXROYW1lKFN0
cmluZzo6Zm9ybWF0KCJDbG9uZSAlZCBvZiBsYXllciAlcCIsIGNsb25lSURbMFVdLCBzb3VyY2VM
YXllci0+cGxhdGZvcm1MYXllcigpKSk7CiAjZW5kaWYKLSAgICAgICAgYWRkUmVzdWx0Lml0ZXJh
dG9yLT5zZWNvbmQgPSByZXN1bHRMYXllcjsKKyAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZSA9IHJlc3VsdExheWVyOwogICAgIH0KIAogICAgIHJldHVybiByZXN1bHRMYXllcjsKQEAg
LTI3MDYsOSArMjcwNiw5IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpzZXRPcGFjaXR5SW50ZXJu
YWwoZmxvYXQgYWNjdW11bGF0ZWRPcGFjaXR5KQogICAgIGlmIChsYXllckNsb25lTWFwKSB7CiAg
ICAgICAgIExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBsYXllckNsb25lTWFwLT5lbmQo
KTsKICAgICAgICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXllckNsb25l
TWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGlmIChtX3JlcGxp
Y2FMYXllciAmJiBpc1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQtPmZpcnN0KSkKKyAgICAgICAgICAg
IGlmIChtX3JlcGxpY2FMYXllciAmJiBpc1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQtPmtleSkpCiAg
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRPcGFj
aXR5KG1fb3BhY2l0eSk7CisgICAgICAgICAgICBpdC0+dmFsdWUtPnNldE9wYWNpdHkobV9vcGFj
aXR5KTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTI3MjAsMTAgKzI3MjAsMTAgQEAgdm9pZCBH
cmFwaGljc0xheWVyQ0E6OnVwZGF0ZU9wYWNpdHlPbkxheWVyKCkKICAgICBpZiAoTGF5ZXJNYXAq
IGxheWVyQ2xvbmVNYXAgPSBwcmltYXJ5TGF5ZXJDbG9uZXMoKSkgewogICAgICAgICBMYXllck1h
cDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAgICAgIGZv
ciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAobV9yZXBsaWNhTGF5ZXIgJiYgaXNS
ZXBsaWNhdGVkUm9vdENsb25lKGl0LT5maXJzdCkpCisgICAgICAgICAgICBpZiAobV9yZXBsaWNh
TGF5ZXIgJiYgaXNSZXBsaWNhdGVkUm9vdENsb25lKGl0LT5rZXkpKQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogCi0gICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRPcGFjaXR5KG1fb3BhY2l0
eSk7CisgICAgICAgICAgICBpdC0+dmFsdWUtPnNldE9wYWNpdHkobV9vcGFjaXR5KTsKICAgICAg
ICAgfQogICAgICAgICAKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYS9tYWMvVGlsZUNhY2hlLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2EvbWFjL1RpbGVDYWNoZS5tbQppbmRleCAwOTdkZmJmYzZjMDViNTdmYmU0YmQy
NzU5NWU4NWJjMDUwYzlhN2FmLi5lOWQ5Y2U0MGU4Njc1MTY0MDRjYjg3ZDg1MmVmMjdkMGU1NDk0
Y2JjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMv
VGlsZUNhY2hlLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21h
Yy9UaWxlQ2FjaGUubW0KQEAgLTE5MSw5ICsxOTEsOSBAQCB2b2lkIFRpbGVDYWNoZTo6c2V0U2Nh
bGUoQ0dGbG9hdCBzY2FsZSkKICAgICByZXZhbGlkYXRlVGlsZXMoKTsKIAogICAgIGZvciAoVGls
ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCksIGVuZCA9IG1fdGlsZXMu
ZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBbaXQtPnNlY29uZC5nZXQoKSBzZXRD
b250ZW50c1NjYWxlOmRldmljZVNjYWxlRmFjdG9yXTsKKyAgICAgICAgW2l0LT52YWx1ZS5nZXQo
KSBzZXRDb250ZW50c1NjYWxlOmRldmljZVNjYWxlRmFjdG9yXTsKIAotICAgICAgICBJbnRSZWN0
IHRpbGVSZWN0ID0gcmVjdEZvclRpbGVJbmRleChpdC0+Zmlyc3QpOworICAgICAgICBJbnRSZWN0
IHRpbGVSZWN0ID0gcmVjdEZvclRpbGVJbmRleChpdC0+a2V5KTsKICAgICAgICAgRmxvYXRSZWN0
IHNjYWxlZFRpbGVSZWN0ID0gdGlsZVJlY3Q7CiAKICAgICAgICAgc2NhbGVkVGlsZVJlY3Quc2Nh
bGUoMSAvIG1fc2NhbGUpOwpAQCAtMjEzLDcgKzIxMyw3IEBAIHZvaWQgVGlsZUNhY2hlOjpzZXRB
Y2NlbGVyYXRlc0RyYXdpbmcoYm9vbCBhY2NlbGVyYXRlc0RyYXdpbmcpCiAgICAgbV9hY2NlbGVy
YXRlc0RyYXdpbmcgPSBhY2NlbGVyYXRlc0RyYXdpbmc7CiAKICAgICBmb3IgKFRpbGVNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpLCBlbmQgPSBtX3RpbGVzLmVuZCgpOyBp
dCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIFtpdC0+c2Vjb25kLmdldCgpIHNldEFjY2VsZXJhdGVz
RHJhd2luZzptX2FjY2VsZXJhdGVzRHJhd2luZ107CisgICAgICAgIFtpdC0+dmFsdWUuZ2V0KCkg
c2V0QWNjZWxlcmF0ZXNEcmF3aW5nOm1fYWNjZWxlcmF0ZXNEcmF3aW5nXTsKICNlbHNlCiAgICAg
VU5VU0VEX1BBUkFNKGFjY2VsZXJhdGVzRHJhd2luZyk7CiAjZW5kaWYKQEAgLTI0OSw3ICsyNDks
NyBAQCB2b2lkIFRpbGVDYWNoZTo6c2V0VGlsZURlYnVnQm9yZGVyV2lkdGgoZmxvYXQgYm9yZGVy
V2lkdGgpCiAKICAgICBtX3RpbGVEZWJ1Z0JvcmRlcldpZHRoID0gYm9yZGVyV2lkdGg7CiAgICAg
Zm9yIChUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKSwgZW5kID0g
bV90aWxlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBbaXQtPnNlY29uZC5nZXQo
KSBzZXRCb3JkZXJXaWR0aDptX3RpbGVEZWJ1Z0JvcmRlcldpZHRoXTsKKyAgICAgICAgW2l0LT52
YWx1ZS5nZXQoKSBzZXRCb3JkZXJXaWR0aDptX3RpbGVEZWJ1Z0JvcmRlcldpZHRoXTsKIH0KIAog
dm9pZCBUaWxlQ2FjaGU6OnNldFRpbGVEZWJ1Z0JvcmRlckNvbG9yKENHQ29sb3JSZWYgYm9yZGVy
Q29sb3IpCkBAIC0yNTksNyArMjU5LDcgQEAgdm9pZCBUaWxlQ2FjaGU6OnNldFRpbGVEZWJ1Z0Jv
cmRlckNvbG9yKENHQ29sb3JSZWYgYm9yZGVyQ29sb3IpCiAKICAgICBtX3RpbGVEZWJ1Z0JvcmRl
ckNvbG9yID0gYm9yZGVyQ29sb3I7CiAgICAgZm9yIChUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IG1fdGlsZXMuYmVnaW4oKSwgZW5kID0gbV90aWxlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0
KQotICAgICAgICBbaXQtPnNlY29uZC5nZXQoKSBzZXRCb3JkZXJDb2xvcjptX3RpbGVEZWJ1Z0Jv
cmRlckNvbG9yLmdldCgpXTsKKyAgICAgICAgW2l0LT52YWx1ZS5nZXQoKSBzZXRCb3JkZXJDb2xv
cjptX3RpbGVEZWJ1Z0JvcmRlckNvbG9yLmdldCgpXTsKIH0KIAogSW50UmVjdCBUaWxlQ2FjaGU6
OmJvdW5kcygpIGNvbnN0CkBAIC0zMzQsOSArMzM0LDkgQEAgdm9pZCBUaWxlQ2FjaGU6OnJldmFs
aWRhdGVUaWxlcygpCiAgICAgVmVjdG9yPFRpbGVJbmRleD4gdGlsZXNUb1JlbW92ZTsKIAogICAg
IGZvciAoVGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCksIGVuZCA9IG1fdGls
ZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBjb25zdCBUaWxlSW5kZXgmIHRp
bGVJbmRleCA9IGl0LT5maXJzdDsKKyAgICAgICAgY29uc3QgVGlsZUluZGV4JiB0aWxlSW5kZXgg
PSBpdC0+a2V5OwogCi0gICAgICAgIFdlYlRpbGVMYXllciogdGlsZUxheWVyID0gaXQtPnNlY29u
ZC5nZXQoKTsKKyAgICAgICAgV2ViVGlsZUxheWVyKiB0aWxlTGF5ZXIgPSBpdC0+dmFsdWUuZ2V0
KCk7CiAKICAgICAgICAgaWYgKCFyZWN0Rm9yVGlsZUluZGV4KHRpbGVJbmRleCkuaW50ZXJzZWN0
cyh0aWxlQ292ZXJhZ2VSZWN0KSkgewogICAgICAgICAgICAgLy8gUmVtb3ZlIHRoaXMgbGF5ZXIu
CkBAIC0zNjQsNyArMzY0LDcgQEAgdm9pZCBUaWxlQ2FjaGU6OnJldmFsaWRhdGVUaWxlcygpCiAg
ICAgICAgICAgICBUaWxlSW5kZXggdGlsZUluZGV4KHgsIHkpOwogCiAgICAgICAgICAgICBJbnRS
ZWN0IHRpbGVSZWN0ID0gcmVjdEZvclRpbGVJbmRleCh0aWxlSW5kZXgpOwotICAgICAgICAgICAg
UmV0YWluUHRyPFdlYlRpbGVMYXllcj4mIHRpbGVMYXllciA9IG1fdGlsZXMuYWRkKHRpbGVJbmRl
eCwgMCkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgICAgIFJldGFpblB0cjxXZWJUaWxlTGF5
ZXI+JiB0aWxlTGF5ZXIgPSBtX3RpbGVzLmFkZCh0aWxlSW5kZXgsIDApLml0ZXJhdG9yLT52YWx1
ZTsKICAgICAgICAgICAgIGlmICghdGlsZUxheWVyKSB7CiAgICAgICAgICAgICAgICAgdGlsZUxh
eWVyID0gY3JlYXRlVGlsZUxheWVyKHRpbGVSZWN0KTsKICAgICAgICAgICAgICAgICBbbV90aWxl
Q29udGFpbmVyTGF5ZXIuZ2V0KCkgYWRkU3VibGF5ZXI6dGlsZUxheWVyLmdldCgpXTsKQEAgLTM4
Myw3ICszODMsNyBAQCB2b2lkIFRpbGVDYWNoZTo6cmV2YWxpZGF0ZVRpbGVzKCkKIAogICAgIG1f
dGlsZUNvdmVyYWdlUmVjdCA9IEludFJlY3QoKTsKICAgICBmb3IgKFRpbGVNYXA6Oml0ZXJhdG9y
IGl0ID0gbV90aWxlcy5iZWdpbigpLCBlbmQgPSBtX3RpbGVzLmVuZCgpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKLSAgICAgICAgY29uc3QgVGlsZUluZGV4JiB0aWxlSW5kZXggPSBpdC0+Zmlyc3Q7Cisg
ICAgICAgIGNvbnN0IFRpbGVJbmRleCYgdGlsZUluZGV4ID0gaXQtPmtleTsKIAogICAgICAgICBt
X3RpbGVDb3ZlcmFnZVJlY3QudW5pdGUocmVjdEZvclRpbGVJbmRleCh0aWxlSW5kZXgpKTsKICAg
ICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4v
UGxhdGZvcm1DQUxheWVyV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwCmluZGV4IDQ4YjIwZDBiOGJkMjQyYWI1NDli
OGZlNDQyZGY0NGFiMzY3MmViODUuLjcwMTY4YjIxMDRkYjM2OWRhMDc1N2ExMTQ0NjIyMTExYmMz
MDYxZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dp
bi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwCkBAIC0xNjcsNyArMTY3LDcgQEAg
dm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OmFuaW1hdGlvblN0YXJ0ZWQoQ0ZUaW1lSW50ZXJ2YWwgYmVn
aW5UaW1lKQogCiAgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9u
PiA+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2FuaW1hdGlvbnMuZW5kKCk7CiAgICAgZm9yIChI
YXNoTWFwPFN0cmluZywgUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+ID46OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV9hbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAg
aXQtPnNlY29uZC0+c2V0QWN0dWFsU3RhcnRUaW1lSWZOZWVkZWQoY2FjZkJlZ2luVGltZSk7Cisg
ICAgICAgIGl0LT52YWx1ZS0+c2V0QWN0dWFsU3RhcnRUaW1lSWZOZWVkZWQoY2FjZkJlZ2luVGlt
ZSk7CiAKICAgICBpZiAobV9vd25lcikKICAgICAgICAgbV9vd25lci0+cGxhdGZvcm1DQUxheWVy
QW5pbWF0aW9uU3RhcnRlZChiZWdpblRpbWUpOwpAQCAtMTc3LDggKzE3Nyw4IEBAIHN0YXRpYyB2
b2lkIHJlc3VibWl0QWxsQW5pbWF0aW9ucyhQbGF0Zm9ybUNBTGF5ZXIqIGxheWVyKQogewogICAg
IEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8UGxhdGZvcm1DQUFuaW1hdGlvbj4gPjo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gbGF5ZXItPmFuaW1hdGlvbnMoKS5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8
U3RyaW5nLCBSZWZQdHI8UGxhdGZvcm1DQUFuaW1hdGlvbj4gPjo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBsYXllci0+YW5pbWF0aW9ucygpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAg
ICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHMoQWRvcHRDRiwgaXQtPmZpcnN0LmNyZWF0ZUNGU3Ry
aW5nKCkpOwotICAgICAgICBDQUNGTGF5ZXJBZGRBbmltYXRpb24obGF5ZXItPnBsYXRmb3JtTGF5
ZXIoKSwgcy5nZXQoKSwgaXQtPnNlY29uZC0+cGxhdGZvcm1BbmltYXRpb24oKSk7CisgICAgICAg
IFJldGFpblB0cjxDRlN0cmluZ1JlZj4gcyhBZG9wdENGLCBpdC0+a2V5LmNyZWF0ZUNGU3RyaW5n
KCkpOworICAgICAgICBDQUNGTGF5ZXJBZGRBbmltYXRpb24obGF5ZXItPnBsYXRmb3JtTGF5ZXIo
KSwgcy5nZXQoKSwgaXQtPnZhbHVlLT5wbGF0Zm9ybUFuaW1hdGlvbigpKTsKICAgICB9CiB9CiAK
QEAgLTMyOCw3ICszMjgsNyBAQCBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+IFBsYXRm
b3JtQ0FMYXllcjo6YW5pbWF0aW9uRm9yS2V5KGNvbnN0IFN0cmluZyYgawogICAgIGlmIChpdCA9
PSBtX2FuaW1hdGlvbnMuZW5kKCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgcmV0dXJuIGl0
LT5zZWNvbmQ7CisgICAgcmV0dXJuIGl0LT52YWx1ZTsKIH0KIAogUGxhdGZvcm1DQUxheWVyKiBQ
bGF0Zm9ybUNBTGF5ZXI6Om1hc2soKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENhY2hlQ2hyb21pdW1XaW4uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENhY2hlQ2hyb21pdW1X
aW4uY3BwCmluZGV4IGQ0ZDU5MmUxYmVlMmRkMzMwYjQ2MzFhMzgxZjI0MjllODFmZDM4MTAuLmFm
ZmQyYWFjZmYwYTM0YzljYzdkZDRiZGNkOTY4YmQzZmI0YjI1YzQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUNocm9taXVtV2lu
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250
Q2FjaGVDaHJvbWl1bVdpbi5jcHAKQEAgLTIyMiwxMCArMjIyLDEwIEBAIHN0YXRpYyBib29sIExv
b2t1cEFsdE5hbWUoY29uc3QgU3RyaW5nJiBuYW1lLCBTdHJpbmcmIGFsdE5hbWUpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIHN0YXRpYyBpbnQgc3lzdGVtQ3AgPSA6OkdldEFDUCgpOwot
ICAgIGludCBmb250Q3AgPSBpdGVyLT5zZWNvbmQtPmNvZGVQYWdlOworICAgIGludCBmb250Q3Ag
PSBpdGVyLT52YWx1ZS0+Y29kZVBhZ2U7CiAKICAgICBpZiAoKGlzQXNjaWkgJiYgc3lzdGVtQ3Ag
PT0gZm9udENwKSB8fCAoIWlzQXNjaWkgJiYgc3lzdGVtQ3AgIT0gZm9udENwKSkgewotICAgICAg
ICBhbHROYW1lID0gU3RyaW5nKGl0ZXItPnNlY29uZC0+bmFtZSk7CisgICAgICAgIGFsdE5hbWUg
PSBTdHJpbmcoaXRlci0+dmFsdWUtPm5hbWUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAKQEAgLTI3Niw3ICsyNzYsNyBAQCBzdGF0aWMgYm9vbCBmb250Q29udGFpbnNDaGFyYWN0ZXIo
Y29uc3QgRm9udFBsYXRmb3JtRGF0YSogZm9udERhdGEsCiAKICAgICBIYXNoTWFwPGNvbnN0IHdj
aGFyX3QqLCBpY3U6OlVuaWNvZGVTZXQqPjo6aXRlcmF0b3IgaXQgPSBmb250Q21hcENhY2hlLT5m
aW5kKGZhbWlseSk7CiAgICAgaWYgKGl0ICE9IGZvbnRDbWFwQ2FjaGUtPmVuZCgpKSAKLSAgICAg
ICAgcmV0dXJuIGl0LT5zZWNvbmQtPmNvbnRhaW5zKGNoYXJhY3Rlcik7CisgICAgICAgIHJldHVy
biBpdC0+dmFsdWUtPmNvbnRhaW5zKGNoYXJhY3Rlcik7CiAgICAgCiAgICAgSEZPTlQgaGZvbnQg
PSBmb250RGF0YS0+aGZvbnQoKTsgCiAgICAgSFduZERDIGhkYygwKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRVdGlsc0Nocm9taXVt
V2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRV
dGlsc0Nocm9taXVtV2luLmNwcAppbmRleCBjYzUyYzUyZWI3MDU3ODJkZTFmOTY4ZGM4MDNjNDVl
NGYyYWUyMjkyLi4yZmZhYmJiNzY4MmRlYThhMGUxZmM5ZmRhZWU5YzcxODA1YTQyYTA4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250VXRp
bHNDaHJvbWl1bVdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vRm9udFV0aWxzQ2hyb21pdW1XaW4uY3BwCkBAIC00MTUsNyArNDE1LDcgQEAgYm9v
bCBnZXREZXJpdmVkRm9udERhdGEoY29uc3QgVUNoYXIqIGZhbWlseSwKICAgICAgICAgLy8gY2hl
Y2sgaXQgYWdhaW5zdCB3aGF0IHdlIGFjdHVhbGx5IHdhbnQgKGFzIGlzIGRvbmUgaW4KICAgICAg
ICAgLy8gRm9udENhY2hlV2luLmNwcCkKICAgICAgICAgRm9udERhdGFDYWNoZTo6QWRkUmVzdWx0
IGVudHJ5ID0gZm9udERhdGFDYWNoZS5hZGQoZm9udEtleSwgRm9udERhdGEoKSk7Ci0gICAgICAg
IGRlcml2ZWQgPSAmZW50cnkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgZGVyaXZlZCA9ICZl
bnRyeS5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgIGRlcml2ZWQtPmhmb250ID0gQ3JlYXRlRm9u
dEluZGlyZWN0KGxvZ2ZvbnQpOwogICAgICAgICAvLyBHZXRBc2NlbnQgbWF5IHJldHVybiBrVW5k
ZWZpbmVkQXNjZW50LCBidXQgd2Ugc3RpbGwgd2FudCB0bwogICAgICAgICAvLyBjYWNoZSBpdCBz
byB0aGF0IHdlIHdvbid0IGhhdmUgdG8gY2FsbCBDcmVhdGVGb250SW5kaXJlY3Qgb25jZQpAQCAt
NDIzLDcgKzQyMyw3IEBAIGJvb2wgZ2V0RGVyaXZlZEZvbnREYXRhKGNvbnN0IFVDaGFyKiBmYW1p
bHksCiAgICAgICAgIGRlcml2ZWQtPmFzY2VudCA9IGdldEFzY2VudChkZXJpdmVkLT5oZm9udCk7
CiAgICAgICAgIGRlcml2ZWQtPnNwYWNlR2x5cGggPSBnZXRTcGFjZUdseXBoKGRlcml2ZWQtPmhm
b250KTsKICAgICB9IGVsc2UgewotICAgICAgICBkZXJpdmVkID0gJml0ZXItPnNlY29uZDsKKyAg
ICAgICAgZGVyaXZlZCA9ICZpdGVyLT52YWx1ZTsKICAgICAgICAgLy8gTGFzdCB0aW1lLCBHZXRB
c2NlbnQgZmFpbGVkIHNvIHRoYXQgb25seSBIRk9OVCB3YXMKICAgICAgICAgLy8gY2FjaGVkLiBU
cnkgb25jZSBtb3JlIGFzc3VtaW5nIHRoYXQgVHJ5UHJlbG9hZEZvbnQKICAgICAgICAgLy8gd2Fz
IGNhbGxlZCBieSBhIGNhbGxlciBiZXR3ZWVuIGNhbGxzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5
ZXJDaHJvbWl1bS5jcHAKaW5kZXggN2RkZTQyZTE4N2M5NDdjYWM4NWFkODEzMWJiMzRjZmU1OTk4
MGEzMC4uYzc3MzljMzJlOWJhYTJlZDQ4ZmRkZmZlYjRjZjM2ZjBiMGJiZGNiZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXll
ckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCkBAIC03NDgsNyArNzQ4LDcgQEAgaW50IEdy
YXBoaWNzTGF5ZXJDaHJvbWl1bTo6bWFwQW5pbWF0aW9uTmFtZVRvSWQoY29uc3QgU3RyaW5nJiBh
bmltYXRpb25OYW1lKQogICAgIGlmICghbV9hbmltYXRpb25JZE1hcC5jb250YWlucyhhbmltYXRp
b25OYW1lKSkKICAgICAgICAgbV9hbmltYXRpb25JZE1hcC5hZGQoYW5pbWF0aW9uTmFtZSwgc19u
ZXh0QW5pbWF0aW9uSWQrKyk7CiAKLSAgICByZXR1cm4gbV9hbmltYXRpb25JZE1hcC5maW5kKGFu
aW1hdGlvbk5hbWUpLT5zZWNvbmQ7CisgICAgcmV0dXJuIG1fYW5pbWF0aW9uSWRNYXAuZmluZChh
bmltYXRpb25OYW1lKS0+dmFsdWU7CiB9CiAKIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpu
b3RpZnlBbmltYXRpb25TdGFydGVkKGRvdWJsZSBzdGFydFRpbWUpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdl
ci5jcHAKaW5kZXggZDRkOGMxODJjZmU1MjVmNTYwMDg4YWExMjY2OThkOWQ5MzI0YWUxMi4uMmQx
OThkYWVjMmFlNjk3ZDQ4MTM0NzQ5ZjJiNzdlOTkwZGUzZDg2MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5h
Z2VyLmNwcApAQCAtMTQyLDcgKzE0Miw3IEBAIHZvaWQgVGV4dHVyZU1hbmFnZXI6OnJlbGVhc2VU
b2tlbihUZXh0dXJlVG9rZW4gdG9rZW4pCiB7CiAgICAgVGV4dHVyZU1hcDo6aXRlcmF0b3IgaXQg
PSBtX3RleHR1cmVzLmZpbmQodG9rZW4pOwogICAgIGlmIChpdCAhPSBtX3RleHR1cmVzLmVuZCgp
KQotICAgICAgICByZW1vdmVUZXh0dXJlKHRva2VuLCBpdC0+c2Vjb25kKTsKKyAgICAgICAgcmVt
b3ZlVGV4dHVyZSh0b2tlbiwgaXQtPnZhbHVlKTsKIH0KIAogYm9vbCBUZXh0dXJlTWFuYWdlcjo6
aGFzVGV4dHVyZShUZXh0dXJlVG9rZW4gdG9rZW4pCkBAIC0xNzAsMTMgKzE3MCwxMyBAQCB2b2lk
IFRleHR1cmVNYW5hZ2VyOjp1bnByb3RlY3RUZXh0dXJlKFRleHR1cmVUb2tlbiB0b2tlbikKIHsK
ICAgICBUZXh0dXJlTWFwOjppdGVyYXRvciBpdCA9IG1fdGV4dHVyZXMuZmluZCh0b2tlbik7CiAg
ICAgaWYgKGl0ICE9IG1fdGV4dHVyZXMuZW5kKCkpCi0gICAgICAgIGl0LT5zZWNvbmQuaXNQcm90
ZWN0ZWQgPSBmYWxzZTsKKyAgICAgICAgaXQtPnZhbHVlLmlzUHJvdGVjdGVkID0gZmFsc2U7CiB9
CiAKIHZvaWQgVGV4dHVyZU1hbmFnZXI6OnVucHJvdGVjdEFsbFRleHR1cmVzKCkKIHsKICAgICBm
b3IgKFRleHR1cmVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90ZXh0dXJlcy5iZWdpbigpOyBpdCAhPSBt
X3RleHR1cmVzLmVuZCgpOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLmlzUHJvdGVjdGVkID0g
ZmFsc2U7CisgICAgICAgIGl0LT52YWx1ZS5pc1Byb3RlY3RlZCA9IGZhbHNlOwogfQogCiB2b2lk
IFRleHR1cmVNYW5hZ2VyOjpldmljdFRleHR1cmUoVGV4dHVyZVRva2VuIHRva2VuLCBUZXh0dXJl
SW5mbyBpbmZvKQpAQCAtMjU3LDcgKzI1Nyw3IEBAIHVuc2lnbmVkIFRleHR1cmVNYW5hZ2VyOjph
bGxvY2F0ZVRleHR1cmUoVGV4dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yLCBUZXh0dXJlVG9rCiB7
CiAgICAgVGV4dHVyZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RleHR1cmVzLmZpbmQodG9rZW4pOwog
ICAgIEFTU0VSVChpdCAhPSBtX3RleHR1cmVzLmVuZCgpKTsKLSAgICBUZXh0dXJlSW5mbyogaW5m
byA9ICZpdC5nZXQoKS0+c2Vjb25kOworICAgIFRleHR1cmVJbmZvKiBpbmZvID0gJml0LmdldCgp
LT52YWx1ZTsKICAgICBBU1NFUlQoaW5mby0+aXNQcm90ZWN0ZWQpOwogCiAgICAgdW5zaWduZWQg
dGV4dHVyZUlkID0gYWxsb2NhdG9yLT5jcmVhdGVUZXh0dXJlKGluZm8tPnNpemUsIGluZm8tPmZv
cm1hdCk7CkBAIC0yNzUsOCArMjc1LDggQEAgYm9vbCBUZXh0dXJlTWFuYWdlcjo6cmVxdWVzdFRl
eHR1cmUoVGV4dHVyZVRva2VuIHRva2VuLCBJbnRTaXplIHNpemUsIHVuc2lnbmVkIGYKIAogICAg
IFRleHR1cmVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90ZXh0dXJlcy5maW5kKHRva2VuKTsKICAgICBp
ZiAoaXQgIT0gbV90ZXh0dXJlcy5lbmQoKSkgewotICAgICAgICBBU1NFUlQoaXQtPnNlY29uZC5z
aXplICE9IHNpemUgfHwgaXQtPnNlY29uZC5mb3JtYXQgIT0gZm9ybWF0KTsKLSAgICAgICAgcmVt
b3ZlVGV4dHVyZSh0b2tlbiwgaXQtPnNlY29uZCk7CisgICAgICAgIEFTU0VSVChpdC0+dmFsdWUu
c2l6ZSAhPSBzaXplIHx8IGl0LT52YWx1ZS5mb3JtYXQgIT0gZm9ybWF0KTsKKyAgICAgICAgcmVt
b3ZlVGV4dHVyZSh0b2tlbiwgaXQtPnZhbHVlKTsKICAgICB9CiAKICAgICBzaXplX3QgbWVtb3J5
UmVxdWlyZWRCeXRlcyA9IG1lbW9yeVVzZUJ5dGVzKHNpemUsIGZvcm1hdCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hy
b21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGls
ZWRMYXllckNocm9taXVtLmNwcAppbmRleCA2OGY0OTY0YmE5ZDE4ZTE2NjUyMTQwZmQzNjUzMGRm
ZWQ4NWQyMzJjLi44NTU2ZjYxNWI4N2VjMjMzNzRiYmQ2ZTk1ODM1ODA4ZGMyZjI3MTBlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExh
eWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTIwOCw5ICsyMDgsOSBAQCB2b2lkIFRp
bGVkTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyhDQ0xheWVySW1wbCogbGF5ZXIpCiAg
ICAgVmVjdG9yPFVwZGF0YWJsZVRpbGUqPiBpbnZhbGlkVGlsZXM7CiAKICAgICBmb3IgKENDTGF5
ZXJUaWxpbmdEYXRhOjpUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbV90aWxlci0+dGls
ZXMoKS5iZWdpbigpOyBpdGVyICE9IG1fdGlsZXItPnRpbGVzKCkuZW5kKCk7ICsraXRlcikgewot
ICAgICAgICBpbnQgaSA9IGl0ZXItPmZpcnN0LmZpcnN0OwotICAgICAgICBpbnQgaiA9IGl0ZXIt
PmZpcnN0LnNlY29uZDsKLSAgICAgICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHN0YXRpY19jYXN0
PFVwZGF0YWJsZVRpbGUqPihpdGVyLT5zZWNvbmQuZ2V0KCkpOworICAgICAgICBpbnQgaSA9IGl0
ZXItPmtleS5maXJzdDsKKyAgICAgICAgaW50IGogPSBpdGVyLT5rZXkuc2Vjb25kOworICAgICAg
ICBVcGRhdGFibGVUaWxlKiB0aWxlID0gc3RhdGljX2Nhc3Q8VXBkYXRhYmxlVGlsZSo+KGl0ZXIt
PnZhbHVlLmdldCgpKTsKICAgICAgICAgdGlsZS0+aXNJblVzZU9uSW1wbCA9IGZhbHNlOwogICAg
ICAgICBpZiAoIXRpbGUtPm1hbmFnZWRUZXh0dXJlKCktPmlzVmFsaWQobV90aWxlci0+dGlsZVNp
emUoKSwgbV90ZXh0dXJlRm9ybWF0KSkgewogICAgICAgICAgICAgaW52YWxpZFRpbGVzLmFwcGVu
ZCh0aWxlKTsKQEAgLTIzNyw3ICsyMzcsNyBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6c2V0
TGF5ZXJUcmVlSG9zdChDQ0xheWVyVHJlZUhvc3QqIGhvc3QpCiB7CiAgICAgaWYgKGhvc3QgJiYg
aG9zdCAhPSBsYXllclRyZWVIb3N0KCkpIHsKICAgICAgICAgZm9yIChDQ0xheWVyVGlsaW5nRGF0
YTo6VGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1fdGlsZXItPnRpbGVzKCkuYmVnaW4o
KTsgaXRlciAhPSBtX3RpbGVyLT50aWxlcygpLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgICAg
IFVwZGF0YWJsZVRpbGUqIHRpbGUgPSBzdGF0aWNfY2FzdDxVcGRhdGFibGVUaWxlKj4oaXRlci0+
c2Vjb25kLmdldCgpKTsKKyAgICAgICAgICAgIFVwZGF0YWJsZVRpbGUqIHRpbGUgPSBzdGF0aWNf
Y2FzdDxVcGRhdGFibGVUaWxlKj4oaXRlci0+dmFsdWUuZ2V0KCkpOwogICAgICAgICAgICAgdGls
ZS0+bWFuYWdlZFRleHR1cmUoKS0+c2V0VGV4dHVyZU1hbmFnZXIoaG9zdC0+Y29udGVudHNUZXh0
dXJlTWFuYWdlcigpKTsKICAgICAgICAgfQogICAgIH0KQEAgLTI4OSw3ICsyODksNyBAQCB2b2lk
IFRpbGVkTGF5ZXJDaHJvbWl1bTo6aW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgbGF5ZXJS
ZWN0KQogICAgICAgICByZXR1cm47CiAKICAgICBmb3IgKENDTGF5ZXJUaWxpbmdEYXRhOjpUaWxl
TWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbV90aWxlci0+dGlsZXMoKS5iZWdpbigpOyBpdGVy
ICE9IG1fdGlsZXItPnRpbGVzKCkuZW5kKCk7ICsraXRlcikgewotICAgICAgICBVcGRhdGFibGVU
aWxlKiB0aWxlID0gc3RhdGljX2Nhc3Q8VXBkYXRhYmxlVGlsZSo+KGl0ZXItPnNlY29uZC5nZXQo
KSk7CisgICAgICAgIFVwZGF0YWJsZVRpbGUqIHRpbGUgPSBzdGF0aWNfY2FzdDxVcGRhdGFibGVU
aWxlKj4oaXRlci0+dmFsdWUuZ2V0KCkpOwogICAgICAgICBBU1NFUlQodGlsZSk7CiAgICAgICAg
IEludFJlY3QgYm91bmQgPSBtX3RpbGVyLT50aWxlUmVjdCh0aWxlKTsKICAgICAgICAgYm91bmQu
aW50ZXJzZWN0KGxheWVyUmVjdCk7CkBAIC01NDYsNyArNTQ2LDcgQEAgdm9pZCBUaWxlZExheWVy
Q2hyb21pdW06OnJlc2V0VXBkYXRlU3RhdGUoKQogewogICAgIENDTGF5ZXJUaWxpbmdEYXRhOjpU
aWxlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3RpbGVyLT50aWxlcygpLmVuZCgpOwogICAg
IGZvciAoQ0NMYXllclRpbGluZ0RhdGE6OlRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBt
X3RpbGVyLT50aWxlcygpLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKLSAgICAgICAg
VXBkYXRhYmxlVGlsZSogdGlsZSA9IHN0YXRpY19jYXN0PFVwZGF0YWJsZVRpbGUqPihpdGVyLT5z
ZWNvbmQuZ2V0KCkpOworICAgICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gc3RhdGljX2Nhc3Q8
VXBkYXRhYmxlVGlsZSo+KGl0ZXItPnZhbHVlLmdldCgpKTsKICAgICAgICAgdGlsZS0+dXBkYXRl
UmVjdCA9IEludFJlY3QoKTsKICAgICAgICAgdGlsZS0+cGFydGlhbFVwZGF0ZSA9IGZhbHNlOwog
ICAgICAgICB0aWxlLT51cGRhdGVkID0gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RhbWFnZVRyYWNrZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1hZ2VUcmFja2Vy
LmNwcAppbmRleCA4OGYwNjg1YTIyNTNmZDk0NmU0YTdhMzlkZDk5ODhjN2Q1M2Q5NjZjLi5jN2E3
MTE3ZGQ2OWM5MWEzZWNiMTg5YzM2MDczOWE4MzFjMDRhYjEzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RhbWFnZVRyYWNrZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGFt
YWdlVHJhY2tlci5jcHAKQEAgLTIwMiw3ICsyMDIsNyBAQCBGbG9hdFJlY3QgQ0NEYW1hZ2VUcmFj
a2VyOjp0cmFja0RhbWFnZUZyb21MZWZ0b3ZlclJlY3RzKCkKICAgICBGbG9hdFJlY3QgZGFtYWdl
UmVjdCA9IEZsb2F0UmVjdCgpOwogCiAgICAgZm9yIChSZWN0TWFwOjppdGVyYXRvciBpdCA9IG1f
Y3VycmVudFJlY3RIaXN0b3J5LT5iZWdpbigpOyBpdCAhPSBtX2N1cnJlbnRSZWN0SGlzdG9yeS0+
ZW5kKCk7ICsraXQpCi0gICAgICAgIGRhbWFnZVJlY3QudW5pdGUoaXQtPnNlY29uZCk7CisgICAg
ICAgIGRhbWFnZVJlY3QudW5pdGUoaXQtPnZhbHVlKTsKIAogICAgIG1fY3VycmVudFJlY3RIaXN0
b3J5LT5jbGVhcigpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVGlsaW5nRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVGlsaW5nRGF0YS5jcHAKaW5kZXgg
YWIxMzJhZTE0ZmJhZGVjMzljMzNjYjBlYWVjMGVkZjk2OWZjNDk3OC4uNTU2YWY5YzNmYzQ5ZTIy
OTVhYzdhNWZkOTNlMTg4MjliZmRiY2UxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRpbGluZ0RhdGEuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUaWxpbmdE
YXRhLmNwcApAQCAtMTQxLDggKzE0MSw4IEBAIHZvaWQgQ0NMYXllclRpbGluZ0RhdGE6OnNldEJv
dW5kcyhjb25zdCBJbnRTaXplJiBzaXplKQogICAgIGxheWVyUmVjdFRvVGlsZUluZGljZXMoSW50
UmVjdChJbnRQb2ludCgpLCBzaXplKSwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKICAgICBW
ZWN0b3I8VGlsZU1hcEtleT4gaW52YWxpZFRpbGVLZXlzOwogICAgIGZvciAoVGlsZU1hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IG1fdGlsZXMuZW5kKCk7ICsr
aXQpIHsKLSAgICAgICAgaWYgKGl0LT5maXJzdC5maXJzdCA+IHJpZ2h0IHx8IGl0LT5maXJzdC5z
ZWNvbmQgPiBib3R0b20pCi0gICAgICAgICAgICBpbnZhbGlkVGlsZUtleXMuYXBwZW5kKGl0LT5m
aXJzdCk7CisgICAgICAgIGlmIChpdC0+a2V5LmZpcnN0ID4gcmlnaHQgfHwgaXQtPmtleS5zZWNv
bmQgPiBib3R0b20pCisgICAgICAgICAgICBpbnZhbGlkVGlsZUtleXMuYXBwZW5kKGl0LT5rZXkp
OwogICAgIH0KICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGludmFsaWRUaWxlS2V5cy5zaXpl
KCk7ICsraSkKICAgICAgICAgbV90aWxlcy5yZW1vdmUoaW52YWxpZFRpbGVLZXlzW2ldKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCmluZGV4IGI2NDVmMmJjNzE3NTA3OTllMmQ2MjEw
YjI0MmJkOWRlMmUzZjBmMmQuLjFkNWMwMjNjZmM1YmMxZGZiM2NlMDRkYzhiNWZlMzdlNGI3NmY0
M2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcApAQCAtNjIxLDcgKzYyMSw3IEBA
IHZvaWQgQ0NMYXllclRyZWVIb3N0OjpzdGFydFJhdGVMaW1pdGVyKEdyYXBoaWNzQ29udGV4dDNE
KiBjb250ZXh0KQogICAgIEFTU0VSVChjb250ZXh0KTsKICAgICBSYXRlTGltaXRlck1hcDo6aXRl
cmF0b3IgaXQgPSBtX3JhdGVMaW1pdGVycy5maW5kKGNvbnRleHQpOwogICAgIGlmIChpdCAhPSBt
X3JhdGVMaW1pdGVycy5lbmQoKSkKLSAgICAgICAgaXQtPnNlY29uZC0+c3RhcnQoKTsKKyAgICAg
ICAgaXQtPnZhbHVlLT5zdGFydCgpOwogICAgIGVsc2UgewogICAgICAgICBSZWZQdHI8UmF0ZUxp
bWl0ZXI+IHJhdGVMaW1pdGVyID0gUmF0ZUxpbWl0ZXI6OmNyZWF0ZShjb250ZXh0LCB0aGlzKTsK
ICAgICAgICAgbV9yYXRlTGltaXRlcnMuc2V0KGNvbnRleHQsIHJhdGVMaW1pdGVyKTsKQEAgLTY0
MCw3ICs2NDAsNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c3RvcFJhdGVMaW1pdGVyKEdyYXBo
aWNzQ29udGV4dDNEKiBjb250ZXh0KQogewogICAgIFJhdGVMaW1pdGVyTWFwOjppdGVyYXRvciBp
dCA9IG1fcmF0ZUxpbWl0ZXJzLmZpbmQoY29udGV4dCk7CiAgICAgaWYgKGl0ICE9IG1fcmF0ZUxp
bWl0ZXJzLmVuZCgpKSB7Ci0gICAgICAgIGl0LT5zZWNvbmQtPnN0b3AoKTsKKyAgICAgICAgaXQt
PnZhbHVlLT5zdG9wKCk7CiAgICAgICAgIG1fcmF0ZUxpbWl0ZXJzLnJlbW92ZShpdCk7CiAgICAg
fQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9DdXN0b21GaWx0ZXJQcm9ncmFtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyUHJvZ3JhbS5jcHAKaW5kZXggMTMwNDQxYTFjZDA3NWVm
NTc5NWI5M2MwYzk3YjdiMTEwZTlkNzJhZS4uNzg1OWM4YmJhNTdlNGIxYjU0YzI4Y2E0ZmZmMGZh
NWJiYzZkZWVkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9DdXN0b21GaWx0ZXJQcm9ncmFtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclByb2dyYW0uY3BwCkBAIC03Nyw3ICs3
Nyw3IEBAIHZvaWQgQ3VzdG9tRmlsdGVyUHJvZ3JhbTo6cmVtb3ZlQ2xpZW50KEN1c3RvbUZpbHRl
clByb2dyYW1DbGllbnQqIGNsaWVudCkKIHZvaWQgQ3VzdG9tRmlsdGVyUHJvZ3JhbTo6bm90aWZ5
Q2xpZW50cygpCiB7CiAgICAgZm9yIChDdXN0b21GaWx0ZXJQcm9ncmFtQ2xpZW50TGlzdDo6aXRl
cmF0b3IgaXRlciA9IG1fY2xpZW50cy5iZWdpbigpLCBlbmQgPSBtX2NsaWVudHMuZW5kKCk7IGl0
ZXIgIT0gZW5kOyArK2l0ZXIpCi0gICAgICAgIGl0ZXItPmZpcnN0LT5ub3RpZnlDdXN0b21GaWx0
ZXJQcm9ncmFtTG9hZGVkKHRoaXMpOworICAgICAgICBpdGVyLT5rZXktPm5vdGlmeUN1c3RvbUZp
bHRlclByb2dyYW1Mb2FkZWQodGhpcyk7CiB9CiAKICNpZiBFTkFCTEUoV0VCR0wpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR0xDb250ZXh0R3RrLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HTENvbnRleHRHdGsuY3Bw
CmluZGV4IGQ0NjBkMTJjMDIxMWMzYjFlOTZlYjE2YjgyMTM1MTYxOGU5Y2U2NTIuLmMyNTEwYTU5
M2VlODM4NDljMTgwYjY3MWFlOGFkMTY0MWY0NjdkZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HTENvbnRleHRHdGsuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HTENvbnRleHRHdGsuY3BwCkBAIC00OCw3ICs0
OCw3IEBAIEdMQ29udGV4dCogR0xDb250ZXh0OjpnZXRDb250ZXh0Rm9yV2lkZ2V0KEd0a1dpZGdl
dCogd2lkZ2V0KQogICAgIFdpbmRvd0NvbnRleHRNYXAmIHdpbmRvd0NvbnRleHRzID0gd2luZG93
Q29udGV4dHNNYXAoKTsKICAgICBXaW5kb3dDb250ZXh0TWFwOjppdGVyYXRvciBpID0gd2luZG93
Q29udGV4dHNNYXAoKS5maW5kKHdpZGdldCk7CiAgICAgaWYgKGkgIT0gd2luZG93Q29udGV4dHMu
ZW5kKCkpCi0gICAgICAgIHJldHVybiBpLT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIHJldHVybiBp
LT52YWx1ZS5nZXQoKTsKIAogICAgIC8vIEl0J3MgaW1wb3J0YW50IHRoYXQgdGhpcyBjb250ZXh0
IGRvZXNuJ3QgaGFuZyBhcm91bmQgYWZ0ZXIgdGhlIHdpbmRvdwogICAgIC8vIGlzIHVubWFwcGVk
LCBzbyB3ZSBtYWtlIHN1cmUgdG8gY2xlYW4gaXQgdXAgb25jZSB0aGF0IGhhcHBlbnMuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6
elNraWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFy
ZkJ1enpTa2lhLmNwcAppbmRleCBmNjhlYTYxOTI0NWY4NjZlNWJkMGQ1NzhkMDEwNDg0NDUyNTg0
YzJiLi4xZTg4NjdiYjc1N2YyMjQyZThmNDk2MmY4NzViMWJkZjdhZTk5MTJlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNraWEu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZC
dXp6U2tpYS5jcHAKQEAgLTI0NCwxOCArMjQ0LDE4IEBAIHN0YXRpYyBIQl9GYWNlUmVjXyogZ2V0
Q2FjaGVkSGFyZmJ1enpGYWNlKEZvbnRQbGF0Zm9ybURhdGEqIHBsYXRmb3JtRGF0YSkKICAgICAg
ICAgZ0hhcmZidXp6RmFjZUNhY2hlLT5zZXQodW5pcXVlSUQsIGVudHJ5KTsKICAgICAgICAgcmV0
dXJuIGVudHJ5LmZpcnN0OwogICAgIH0KLSAgICArKyhyZXN1bHQuZ2V0KCktPnNlY29uZC5zZWNv
bmQpOwotICAgIHJldHVybiByZXN1bHQuZ2V0KCktPnNlY29uZC5maXJzdDsKKyAgICArKyhyZXN1
bHQuZ2V0KCktPnZhbHVlLnNlY29uZCk7CisgICAgcmV0dXJuIHJlc3VsdC5nZXQoKS0+dmFsdWUu
Zmlyc3Q7CiB9CiAKIHN0YXRpYyB2b2lkIHJlbGVhc2VDYWNoZWRIYXJmYnV6ekZhY2UoU2tGb250
SUQgdW5pcXVlSUQpCiB7CiAgICAgSGFyZmJ1enpGYWNlQ2FjaGU6Oml0ZXJhdG9yIHJlc3VsdCA9
IGdIYXJmYnV6ekZhY2VDYWNoZS0+ZmluZCh1bmlxdWVJRCk7CiAgICAgQVNTRVJUKHJlc3VsdCAh
PSBnSGFyZmJ1enpGYWNlQ2FjaGUtPmVuZCgpKTsKLSAgICBBU1NFUlQocmVzdWx0LmdldCgpLT5z
ZWNvbmQuc2Vjb25kID4gMCk7Ci0gICAgLS0ocmVzdWx0LmdldCgpLT5zZWNvbmQuc2Vjb25kKTsK
LSAgICBpZiAoIShyZXN1bHQuZ2V0KCktPnNlY29uZC5zZWNvbmQpKSB7Ci0gICAgICAgIEhCX0Zy
ZWVGYWNlKHJlc3VsdC5nZXQoKS0+c2Vjb25kLmZpcnN0KTsKKyAgICBBU1NFUlQocmVzdWx0Lmdl
dCgpLT52YWx1ZS5zZWNvbmQgPiAwKTsKKyAgICAtLShyZXN1bHQuZ2V0KCktPnZhbHVlLnNlY29u
ZCk7CisgICAgaWYgKCEocmVzdWx0LmdldCgpLT52YWx1ZS5zZWNvbmQpKSB7CisgICAgICAgIEhC
X0ZyZWVGYWNlKHJlc3VsdC5nZXQoKS0+dmFsdWUuZmlyc3QpOwogICAgICAgICBnSGFyZmJ1enpG
YWNlQ2FjaGUtPnJlbW92ZSh1bmlxdWVJRCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckFUU1VJ
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENv
bnRyb2xsZXJBVFNVSS5jcHAKaW5kZXggYmU5Zjc0MTA0ZmU3NDM0NDU3MTU2NDE2M2NmN2FhZDcw
ZTA3MmM0Zi4uNjJlYTRiZWQxYmEwNWM0NWQ5YmIyM2EzMzMyNWY1YjRjYzI3MzU5NSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29u
dHJvbGxlckFUU1VJLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9t
YWMvQ29tcGxleFRleHRDb250cm9sbGVyQVRTVUkuY3BwCkBAIC0yNzksNyArMjc5LDcgQEAgc3Rh
dGljIEFUU1VTdHlsZSBpbml0aWFsaXplQVRTVVN0eWxlKGNvbnN0IFNpbXBsZUZvbnREYXRhKiBm
b250RGF0YSwgVHlwZXNldHRpbmcKIHsKICAgICB1bnNpZ25lZCBrZXkgPSB0eXBlc2V0dGluZ0Zl
YXR1cmVzICsgMTsKICAgICBIYXNoTWFwPHVuc2lnbmVkLCBBVFNVU3R5bGU+OjpBZGRSZXN1bHQg
YWRkUmVzdWx0ID0gZm9udERhdGEtPm1fQVRTVVN0eWxlTWFwLmFkZChrZXksIDApOwotICAgIEFU
U1VTdHlsZSYgYXRzdVN0eWxlID0gYWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgQVRT
VVN0eWxlJiBhdHN1U3R5bGUgPSBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICgh
YWRkUmVzdWx0LmlzTmV3RW50cnkpCiAgICAgICAgIHJldHVybiBhdHN1U3R5bGU7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0
YUNvcmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1w
bGVGb250RGF0YUNvcmVUZXh0LmNwcAppbmRleCAwNTE5Mzc0MmM1ODUyZGJlOWM5Y2VkNjRiOWEw
N2FhZDJjMWVhNDc3Li4wYjcxMzM0N2Y2MDQ2MzU1NDllNTBkNTYzNjUyMThiMjM0NDI2YWNmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9u
dERhdGFDb3JlVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL1NpbXBsZUZvbnREYXRhQ29yZVRleHQuY3BwCkBAIC00Myw3ICs0Myw3IEBAIENGRGljdGlv
bmFyeVJlZiBTaW1wbGVGb250RGF0YTo6Z2V0Q0ZTdHJpbmdBdHRyaWJ1dGVzKFR5cGVzZXR0aW5n
RmVhdHVyZXMgdHlwZXNlCiB7CiAgICAgdW5zaWduZWQga2V5ID0gdHlwZXNldHRpbmdGZWF0dXJl
cyArIDE7CiAgICAgSGFzaE1hcDx1bnNpZ25lZCwgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4g
Pjo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IG1fQ0ZTdHJpbmdBdHRyaWJ1dGVzLmFkZChrZXksIFJl
dGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+KCkpOwotICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlS
ZWY+JiBhdHRyaWJ1dGVzRGljdGlvbmFyeSA9IGFkZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOwor
ICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+JiBhdHRyaWJ1dGVzRGljdGlvbmFyeSA9IGFk
ZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSkK
ICAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZXNEaWN0aW9uYXJ5LmdldCgpOwogICAgIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRh
TWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnRE
YXRhTWFjLm1tCmluZGV4IGQ1ZDU1NjA2ZDRmZjI1MzAwNjM5ODc1NjI3ZjUzNWZmMzcxYzBlZDYu
LjhhMWZiZDEyMGYwNzFhOGQ0ZjE2NWZkMGRkMWNkYmZjYWE0MDdlODMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YU1hYy5tbQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFN
YWMubW0KQEAgLTMyMyw3ICszMjMsNyBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybURl
c3Ryb3koKQogI2lmIFVTRShBVFNVSSkKICAgICBIYXNoTWFwPHVuc2lnbmVkLCBBVFNVU3R5bGU+
OjppdGVyYXRvciBlbmQgPSBtX0FUU1VTdHlsZU1hcC5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8
dW5zaWduZWQsIEFUU1VTdHlsZT46Oml0ZXJhdG9yIGl0ID0gbV9BVFNVU3R5bGVNYXAuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBBVFNVRGlzcG9zZVN0eWxlKGl0LT5zZWNvbmQp
OworICAgICAgICBBVFNVRGlzcG9zZVN0eWxlKGl0LT52YWx1ZSk7CiAjZW5kaWYKIH0KIApAQCAt
NDczLDcgKzQ3Myw3IEBAIGJvb2wgU2ltcGxlRm9udERhdGE6OmNhblJlbmRlckNvbWJpbmluZ0No
YXJhY3RlclNlcXVlbmNlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzCiAKICAgICBXVEY6Okhhc2hN
YXA8U3RyaW5nLCBib29sPjo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IG1fY29tYmluaW5nQ2hhcmFj
dGVyU2VxdWVuY2VTdXBwb3J0LT5hZGQoU3RyaW5nKGNoYXJhY3RlcnMsIGxlbmd0aCksIGZhbHNl
KTsKICAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXR1cm4gYWRkUmVz
dWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBhZGRSZXN1bHQuaXRlcmF0b3It
PnZhbHVlOwogCiAgICAgUmV0YWluUHRyPENHRm9udFJlZj4gY2dGb250KEFkb3B0Q0YsIENURm9u
dENvcHlHcmFwaGljc0ZvbnQocGxhdGZvcm1EYXRhKCkuY3RGb250KCksIDApKTsKIApAQCAtNDkz
LDcgKzQ5Myw3IEBAIGJvb2wgU2ltcGxlRm9udERhdGE6OmNhblJlbmRlckNvbWJpbmluZ0NoYXJh
Y3RlclNlcXVlbmNlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogCi0gICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSB0cnVlOwor
ICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSB0cnVlOwogICAgIHJldHVybiB0cnVlOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
R3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcAppbmRl
eCBjYjNhNWI3N2U1ZjU1MzkxMDBmZjI1ZjRkZmFjMDBmNzhkNjBhMGYzLi44MzQ4ZmVjY2QxYjQz
OWU1ZjAyM2JjN2UzY2UwYjM3OTk1ZGQxZjZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0Nv
bnRleHQzRE9wZW5HTENvbW1vbi5jcHAKQEAgLTQ2MSw3ICs0NjEsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpjb21waWxlU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQogICAgIGlm
IChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIFNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3VsdC0+c2Vjb25kOworICAgIFNoYWRl
clNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3VsdC0+dmFsdWU7CiAKICAgICBTdHJpbmcgdHJhbnNs
YXRlZFNoYWRlclNvdXJjZTsKICAgICBTdHJpbmcgc2hhZGVySW5mb0xvZzsKQEAgLTExNjcsNyAr
MTE2Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlcml2KFBsYXRmb3JtM0RP
YmplY3Qgc2hhZGVyLCBHQzNEZW51bSBwbmFtZSwgR0MzCiAgICAgICAgICAgICAqdmFsdWUgPSBz
dGF0aWNfY2FzdDxpbnQ+KGZhbHNlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQot
ICAgICAgICAqdmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ+KHJlc3VsdC0+c2Vjb25kLmlzVmFsaWQp
OworICAgICAgICAqdmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ+KHJlc3VsdC0+dmFsdWUuaXNWYWxp
ZCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSU5GT19MT0dfTEVOR1RIOgogICAgICAgICBp
ZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKSB7CkBAIC0xMTk0LDcgKzExOTQs
NyBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlckluZm9Mb2coUGxhdGZvcm0z
RE9iamVjdCBzaGFkZXIpCiAgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQo
KSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOyAKIAotICAgIFNoYWRlclNvdXJjZUVudHJ5IGVu
dHJ5ID0gcmVzdWx0LT5zZWNvbmQ7CisgICAgU2hhZGVyU291cmNlRW50cnkgZW50cnkgPSByZXN1
bHQtPnZhbHVlOwogICAgIGlmICghZW50cnkuaXNWYWxpZCkKICAgICAgICAgcmV0dXJuIGVudHJ5
LmxvZzsKIApAQCAtMTIyMCw3ICsxMjIwLDcgQEAgU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCiAgICAgaWYgKHJlc3VsdCA9
PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOyAKIAot
ICAgIHJldHVybiByZXN1bHQtPnNlY29uZC5zb3VyY2U7CisgICAgcmV0dXJuIHJlc3VsdC0+dmFs
dWUuc291cmNlOwogfQogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmNwcAppbmRl
eCA0YzkyYzU5N2QzZjg4ODg5M2I0YjYwZjVjZDg1MmI2NjFkYjMyMGY0Li5hOTU5MDUxZmMyMDhi
ZDZiYzg0YTlkZDA4YTNlMGY0NWJlMThhNjQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJBbmlt
YXRpb24uY3BwCkBAIC0xODIsNyArMTgyLDcgQEAgYm9vbCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9u
czo6aGFzQWN0aXZlQW5pbWF0aW9uc09mVHlwZShBbmltYXRlZFByb3BlcnR5SUQgdHlwZSkKIHsK
ICAgICBIYXNoTWFwPFN0cmluZywgVGV4dHVyZU1hcHBlckFuaW1hdGlvbj46OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IG1fYW5pbWF0aW9ucy5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBU
ZXh0dXJlTWFwcGVyQW5pbWF0aW9uPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2FuaW1hdGlvbnMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IFRleHR1cmVNYXBwZXJB
bmltYXRpb24mIGFuaW1hdGlvbiA9IGl0LT5zZWNvbmQ7CisgICAgICAgIGNvbnN0IFRleHR1cmVN
YXBwZXJBbmltYXRpb24mIGFuaW1hdGlvbiA9IGl0LT52YWx1ZTsKICAgICAgICAgaWYgKGFuaW1h
dGlvbi5pc0FjdGl2ZSgpICYmIGFuaW1hdGlvbi5wcm9wZXJ0eSgpID09IHR5cGUpCiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0xOTMsNyArMTkzLDcgQEAgYm9vbCBUZXh0dXJl
TWFwcGVyQW5pbWF0aW9uczo6aGFzUnVubmluZ0FuaW1hdGlvbnMoKSBjb25zdAogewogICAgIEhh
c2hNYXA8U3RyaW5nLCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uPjo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gbV9hbmltYXRpb25zLmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIFRleHR1cmVN
YXBwZXJBbmltYXRpb24+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fYW5pbWF0aW9ucy5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgY29uc3QgVGV4dHVyZU1hcHBlckFuaW1hdGlv
biYgYW5pbWF0aW9uID0gaXQtPnNlY29uZDsKKyAgICAgICAgY29uc3QgVGV4dHVyZU1hcHBlckFu
aW1hdGlvbiYgYW5pbWF0aW9uID0gaXQtPnZhbHVlOwogICAgICAgICBpZiAoYW5pbWF0aW9uLnN0
YXRlKCkgPT0gVGV4dHVyZU1hcHBlckFuaW1hdGlvbjo6UGxheWluZ1N0YXRlKQogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMjUyLDE0ICsyNTIsMTQgQEAgdm9pZCBUZXh0dXJl
TWFwcGVyQW5pbWF0aW9uczo6cGF1c2UoY29uc3QgU3RyaW5nJiBuYW1lLCBkb3VibGUgb2Zmc2V0
KQogICAgIEhhc2hNYXA8U3RyaW5nLCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uPjo6aXRlcmF0b3Ig
aXQgPSBtX2FuaW1hdGlvbnMuZmluZChuYW1lKTsKICAgICBpZiAoaXQgPT0gbV9hbmltYXRpb25z
LmVuZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgaXQtPnNlY29uZC5wYXVzZShvZmZzZXQpOwor
ICAgIGl0LT52YWx1ZS5wYXVzZShvZmZzZXQpOwogfQogCiB2b2lkIFRleHR1cmVNYXBwZXJBbmlt
YXRpb25zOjphcHBseShUZXh0dXJlTWFwcGVyQW5pbWF0aW9uQ2xpZW50KiBjbGllbnQpCiB7CiAg
ICAgSGFzaE1hcDxTdHJpbmcsIFRleHR1cmVNYXBwZXJBbmltYXRpb24+OjppdGVyYXRvciBlbmQg
PSBtX2FuaW1hdGlvbnMuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPFN0cmluZywgVGV4dHVyZU1h
cHBlckFuaW1hdGlvbj46Oml0ZXJhdG9yIGl0ID0gbV9hbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC5hcHBseShjbGllbnQpOworICAgICAgICBp
dC0+dmFsdWUuYXBwbHkoY2xpZW50KTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcAppbmRl
eCA1OWViNGE2ZjM0Y2I0ZTViZWEyYTYxMTM0NTI4ZDYzNzUxOTI0MjczLi5jMDc0OWNkZWJmNzdi
MGJiM2Q5YTE0NTU4ZjEzMTk4OWRlNmNkOGI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcApAQCAt
MTAyLDcgKzEwMiw3IEBAIHN0cnVjdCBUZXh0dXJlTWFwcGVyR0xEYXRhIHsKICAgICAgICAgICAg
IEdMQ29udGV4dCBjdXJyZW50R0xDb25leHQgPSBnZXRDdXJyZW50R0xDb250ZXh0KCk7CiAgICAg
ICAgICAgICBHTENvbnRleHREYXRhTWFwOjppdGVyYXRvciBpdCA9IGdsQ29udGV4dERhdGFNYXAo
KS5maW5kKGN1cnJlbnRHTENvbmV4dCk7CiAgICAgICAgICAgICBpZiAoaXQgIT0gZ2xDb250ZXh0
RGF0YU1hcCgpLmVuZCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAg
ICAgICAgICAgICAgIHJldHVybiBpdC0+dmFsdWU7CiAKICAgICAgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgU2hhcmVkR0xEYXRhKGdldEN1cnJlbnRHTENvbnRleHQoKSkpOwogICAgICAgICB9
CkBAIC0xNjksNyArMTY5LDcgQEAgc3RydWN0IFRleHR1cmVNYXBwZXJHTERhdGEgewogICAgICAg
ICAgICAgR0xDb250ZXh0RGF0YU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gZ2xDb250ZXh0RGF0
YU1hcCgpLmVuZCgpOwogICAgICAgICAgICAgR0xDb250ZXh0RGF0YU1hcDo6aXRlcmF0b3IgaXQ7
CiAgICAgICAgICAgICBmb3IgKGl0ID0gZ2xDb250ZXh0RGF0YU1hcCgpLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgewotICAgICAgICAgICAgICAgIGlmIChpdC0+c2Vjb25kID09IHRoaXMpCisg
ICAgICAgICAgICAgICAgaWYgKGl0LT52YWx1ZSA9PSB0aGlzKQogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1h
bmFnZXIuaAppbmRleCA1YjM5YTA5MjhmMmJhZmMwMTE4M2JkNGQxYjQ2ZWNiN2MwYjk1ZWQwLi5m
NjVjYjJmNjhkNTcyYWVmNDdiNzhhNDBkOTM2OTZlZGRhOWI1YWM5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1h
bmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaApAQCAtMTA5LDcgKzEwOSw3IEBAIHB1YmxpYzoKIAog
ICAgICAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU1hcDo6aXRlcmF0b3IgaXQgPSBtX3Rl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtTWFwLmZpbmQoc2hhZGVyVHlwZSk7CiAgICAgICAgIGlm
IChpdCAhPSBtX3RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtTWFwLmVuZCgpKQotICAgICAgICAg
ICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwogCiAg
ICAgICAgIHN3aXRjaCAoc2hhZGVyVHlwZSkgewogICAgICAgICBjYXNlIFNpbXBsZToKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRQbGF0Zm9y
bURhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udFBs
YXRmb3JtRGF0YS5jcHAKaW5kZXggMTk3OTBhZDQ5YjMzMDNkZDdiNjJjN2U3YTBhODIzNjc3YjRj
ZmY1MS4uMTlmNTI0NTVkMTFiMzU0Y2M0ZDQzZTY4Mzk5Y2U3OWFjOTliYzBiMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udFBsYXRmb3JtRGF0
YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udFBs
YXRmb3JtRGF0YS5jcHAKQEAgLTI4Nyw5ICsyODcsOSBAQCBzdGF0aWMgUGFzc1JlZlB0cjxGaXhl
ZFNpemVGb250RGF0YT4gY3JlYXRlRml4ZWRTaXplRm9udERhdGEoY29uc3QgQXRvbWljU3RyaW5n
JgogICAgIEZpeGVkU2l6ZUZvbnREYXRhS2V5IGtleShmYW1pbHksIHdlaWdodCwgaXRhbGljKTsK
ICAgICBGaXhlZFNpemVGb250Q2FjaGU6OkFkZFJlc3VsdCByZXN1bHQgPSBnX2ZpeGVkU2l6ZUZv
bnRDYWNoZS5hZGQoa2V5LCBSZWZQdHI8Rml4ZWRTaXplRm9udERhdGE+KCkpOwogICAgIGlmIChy
ZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBGaXhl
ZFNpemVGb250RGF0YTo6Y3JlYXRlKGZhbWlseSwgd2VpZ2h0LCBpdGFsaWMpOworICAgICAgICBy
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gRml4ZWRTaXplRm9udERhdGE6OmNyZWF0ZShmYW1pbHks
IHdlaWdodCwgaXRhbGljKTsKIAotICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsK
KyAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIAogc3RhdGljIExPTkcgdG9H
RElGb250V2VpZ2h0KEZvbnRXZWlnaHQgZm9udFdlaWdodCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmNwcAppbmRleCAxYTg0ZjhiZDMxOTUyYjI4ZTI2ODI3
MWRkMmE1ZjU3ZjQ0ZDgyN2Q3Li5hZGZjNjZlMDE1ZTUwMjI2Nzg4YzIxNDc2OGExNWIyOTEzNjg0
M2I4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRGF0YU9iamVjdEd0
ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RhdGFPYmplY3RHdGsuY3Bw
CkBAIC0xNzEsNyArMTcxLDcgQEAgRGF0YU9iamVjdEd0ayogRGF0YU9iamVjdEd0azo6Zm9yQ2xp
cGJvYXJkKEd0a0NsaXBib2FyZCogY2xpcGJvYXJkKQogICAgIH0KIAogICAgIEhhc2hNYXA8R3Rr
Q2xpcGJvYXJkKiwgUmVmUHRyPERhdGFPYmplY3RHdGs+ID46Oml0ZXJhdG9yIGl0ID0gb2JqZWN0
TWFwLmZpbmQoY2xpcGJvYXJkKTsKLSAgICByZXR1cm4gaXQtPnNlY29uZC5nZXQoKTsKKyAgICBy
ZXR1cm4gaXQtPnZhbHVlLmdldCgpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvR3RrRHJhZ0FuZERyb3BIZWxwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL0d0a0RyYWdBbmREcm9wSGVscGVyLmNwcAppbmRleCA3NjNkMTIwZDA5NDE2
MjI3MjY2MGM2MDYzMmExOTI5ODZmNTQyZWE0Li5mYzJmNTZlNjE2NmViMWFhY2RiYWRhOGY1MmZl
ZjNjNmRkODg2NGNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3Rr
RHJhZ0FuZERyb3BIZWxwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9H
dGtEcmFnQW5kRHJvcEhlbHBlci5jcHAKQEAgLTcwLDcgKzcwLDcgQEAgdm9pZCBHdGtEcmFnQW5k
RHJvcEhlbHBlcjo6aGFuZGxlR2V0RHJhZ0RhdGEoR2RrRHJhZ0NvbnRleHQqIGNvbnRleHQsIEd0
a1NlbGVjdGkKICAgICBEcmFnZ2luZ0RhdGFPYmplY3RzTWFwOjppdGVyYXRvciBpdGVyYXRvciA9
IG1fZHJhZ2dpbmdEYXRhT2JqZWN0cy5maW5kKGNvbnRleHQpOwogICAgIGlmIChpdGVyYXRvciA9
PSBtX2RyYWdnaW5nRGF0YU9iamVjdHMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBQYXN0
ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT5maWxsU2VsZWN0aW9uRGF0
YShzZWxlY3Rpb25EYXRhLCBpbmZvLCBpdGVyYXRvci0+c2Vjb25kLmdldCgpKTsKKyAgICBQYXN0
ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT5maWxsU2VsZWN0aW9uRGF0
YShzZWxlY3Rpb25EYXRhLCBpbmZvLCBpdGVyYXRvci0+dmFsdWUuZ2V0KCkpOwogfQogCiBzdHJ1
Y3QgSGFuZGxlRHJhZ0xhdGVyRGF0YSB7CkBAIC0xMTYsNyArMTE2LDcgQEAgdm9pZCBHdGtEcmFn
QW5kRHJvcEhlbHBlcjo6aGFuZGxlRHJhZ0xlYXZlKEdka0RyYWdDb250ZXh0KiBnZGtDb250ZXh0
LCBEcmFnRXhpdGUKICAgICAvLyB0aGUgZHJhZy1kcm9wIHNpZ25hbC4gV2Ugd2FudCB0aGUgYWN0
aW9ucyBmb3IgZHJhZy1sZWF2ZSB0byBoYXBwZW4gYWZ0ZXIKICAgICAvLyB0aG9zZSBmb3IgZHJh
Zy1kcm9wLCBzbyBzY2hlZHVsZSB0aGVtIHRvIGhhcHBlbiBhc3luY2hyb25vdXNseSBoZXJlLgog
ICAgIEhhbmRsZURyYWdMYXRlckRhdGEqIGRhdGEgPSBuZXcgSGFuZGxlRHJhZ0xhdGVyRGF0YTsK
LSAgICBkYXRhLT5jb250ZXh0ID0gaXRlcmF0b3ItPnNlY29uZDsKKyAgICBkYXRhLT5jb250ZXh0
ID0gaXRlcmF0b3ItPnZhbHVlOwogICAgIGRhdGEtPmNvbnRleHQtPmV4aXRlZENhbGxiYWNrID0g
ZXhpdGVkQ2FsbGJhY2s7CiAgICAgZGF0YS0+Z2x1ZSA9IHRoaXM7CiAgICAgZ190aW1lb3V0X2Fk
ZCgwLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihoYW5kbGVEcmFnTGVhdmVMYXRlckNh
bGxiYWNrKSwgZGF0YSk7CkBAIC0xNDAsNyArMTQwLDcgQEAgUGFzc093blB0cjxEcmFnRGF0YT4g
R3RrRHJhZ0FuZERyb3BIZWxwZXI6OmhhbmRsZURyYWdNb3Rpb24oR2RrRHJhZ0NvbnRleHQqIGNv
bnQKICAgICAgICAgbV9kcm9wcGluZ0NvbnRleHRzLnNldChjb250ZXh0LCBkcm9wcGluZ0NvbnRl
eHQpOwogICAgICAgICBxdWVyeU5ld0Ryb3BDb250ZXh0RGF0YShkcm9wcGluZ0NvbnRleHQsIG1f
d2lkZ2V0LCB0aW1lKTsKICAgICB9IGVsc2UgewotICAgICAgICBkcm9wcGluZ0NvbnRleHQgPSBp
dGVyYXRvci0+c2Vjb25kOworICAgICAgICBkcm9wcGluZ0NvbnRleHQgPSBpdGVyYXRvci0+dmFs
dWU7CiAgICAgICAgIGRyb3BwaW5nQ29udGV4dC0+bGFzdE1vdGlvblBvc2l0aW9uID0gcG9zaXRp
b247CiAgICAgfQogCkBAIC0xNjIsNyArMTYyLDcgQEAgUGFzc093blB0cjxEcmFnRGF0YT4gR3Rr
RHJhZ0FuZERyb3BIZWxwZXI6OmhhbmRsZURyYWdEYXRhUmVjZWl2ZWQoR2RrRHJhZ0NvbnRleHQK
ICAgICBpZiAoaXRlcmF0b3IgPT0gbV9kcm9wcGluZ0NvbnRleHRzLmVuZCgpKQogICAgICAgICBy
ZXR1cm4gYWRvcHRQdHIoc3RhdGljX2Nhc3Q8RHJhZ0RhdGEqPigwKSk7CiAKLSAgICBEcm9wcGlu
Z0NvbnRleHQqIGRyb3BwaW5nQ29udGV4dCA9IGl0ZXJhdG9yLT5zZWNvbmQ7CisgICAgRHJvcHBp
bmdDb250ZXh0KiBkcm9wcGluZ0NvbnRleHQgPSBpdGVyYXRvci0+dmFsdWU7CiAgICAgZHJvcHBp
bmdDb250ZXh0LT5wZW5kaW5nRGF0YVJlcXVlc3RzLS07CiAgICAgUGFzdGVib2FyZEhlbHBlcjo6
ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+ZmlsbERhdGFPYmplY3RGcm9tRHJvcERhdGEoc2Vs
ZWN0aW9uRGF0YSwgaW5mbywgZHJvcHBpbmdDb250ZXh0LT5kYXRhT2JqZWN0LmdldCgpKTsKIApA
QCAtMTg1LDcgKzE4NSw3IEBAIFBhc3NPd25QdHI8RHJhZ0RhdGE+IEd0a0RyYWdBbmREcm9wSGVs
cGVyOjpoYW5kbGVEcmFnRHJvcChHZGtEcmFnQ29udGV4dCogY29udGV4CiAgICAgaWYgKGl0ZXJh
dG9yID09IG1fZHJvcHBpbmdDb250ZXh0cy5lbmQoKSkKICAgICAgICAgcmV0dXJuIGFkb3B0UHRy
KHN0YXRpY19jYXN0PERyYWdEYXRhKj4oMCkpOwogCi0gICAgRHJvcHBpbmdDb250ZXh0KiBkcm9w
cGluZ0NvbnRleHQgPSBpdGVyYXRvci0+c2Vjb25kOworICAgIERyb3BwaW5nQ29udGV4dCogZHJv
cHBpbmdDb250ZXh0ID0gaXRlcmF0b3ItPnZhbHVlOwogICAgIGRyb3BwaW5nQ29udGV4dC0+ZHJv
cEhhcHBlbmVkID0gdHJ1ZTsKIAogICAgIHJldHVybiBhZG9wdFB0cihuZXcgRHJhZ0RhdGEoZHJv
cHBpbmdDb250ZXh0LT5kYXRhT2JqZWN0LmdldCgpLCBwb3NpdGlvbiwgCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGszLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0azMuY3BwCmluZGV4IDU0MTNiYjc5NTMy
NDg1M2MyMGNkZDE3N2MyN2RkNTYzMDA4MTU2YWIuLjA2ZmU2YjZlMzZkZWY1ZTcxYzE2YWY4YTZi
M2JkZTI0OGE0YzhmMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9S
ZW5kZXJUaGVtZUd0azMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5k
ZXJUaGVtZUd0azMuY3BwCkBAIC01Niw3ICs1Niw3IEBAIHN0YXRpYyB2b2lkIGd0a1N0eWxlQ2hh
bmdlZENhbGxiYWNrKEdPYmplY3QqLCBHUGFyYW1TcGVjKikKIHsKICAgICBTdHlsZUNvbnRleHRN
YXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHN0eWxlQ29udGV4dE1hcCgpLmVuZCgpOwogICAgIGZv
ciAoU3R5bGVDb250ZXh0TWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gc3R5bGVDb250ZXh0TWFw
KCkuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikKLSAgICAgICAgZ3RrX3N0eWxlX2NvbnRl
eHRfaW52YWxpZGF0ZShpdGVyLT5zZWNvbmQuZ2V0KCkpOworICAgICAgICBndGtfc3R5bGVfY29u
dGV4dF9pbnZhbGlkYXRlKGl0ZXItPnZhbHVlLmdldCgpKTsKIAogICAgIFBhZ2U6OnNjaGVkdWxl
Rm9yY2VkU3R5bGVSZWNhbGNGb3JBbGxQYWdlcygpOwogfQpAQCAtNzksNyArNzksNyBAQCBzdGF0
aWMgR3RrU3R5bGVDb250ZXh0KiBnZXRTdHlsZUNvbnRleHQoR1R5cGUgd2lkZ2V0VHlwZSkKIHsK
ICAgICBTdHlsZUNvbnRleHRNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBzdHlsZUNvbnRleHRNYXAo
KS5hZGQod2lkZ2V0VHlwZSwgMCk7CiAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAg
ICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLmdldCgpOworICAgICAgICByZXR1cm4g
cmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKIAogICAgIEd0a1dpZGdldFBhdGgqIHBhdGgg
PSBndGtfd2lkZ2V0X3BhdGhfbmV3KCk7CiAgICAgZ3RrX3dpZGdldF9wYXRoX2FwcGVuZF90eXBl
KHBhdGgsIHdpZGdldFR5cGUpOwpAQCAtMTExLDcgKzExMSw3IEBAIHN0YXRpYyBHdGtTdHlsZUNv
bnRleHQqIGdldFN0eWxlQ29udGV4dChHVHlwZSB3aWRnZXRUeXBlKQogICAgIGd0a19zdHlsZV9j
b250ZXh0X3NldF9wYXRoKGNvbnRleHQuZ2V0KCksIHBhdGgpOwogICAgIGd0a193aWRnZXRfcGF0
aF9mcmVlKHBhdGgpOwogCi0gICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBjb250ZXh0Owor
ICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBjb250ZXh0OwogICAgIHJldHVybiBjb250ZXh0
LmdldCgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Ny
b2xsYmFyVGhlbWVNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsYmFy
VGhlbWVNYWMubW0KaW5kZXggZTQ3NDY4YmQ1NjAzODY1ODkyZTJjMTRkOTRhMzEzZGFhMDc2YTJj
My4uMmM4MGEyOTg2ZmZjOTk3N2RmNWViMWIwZTZhNzgxMzVmYzE1NzhmOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbGJhclRoZW1lTWFjLm1tCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxiYXJUaGVtZU1hYy5tbQpAQCAtODUsOCAr
ODUsOCBAQCBzdGF0aWMgU2Nyb2xsYmFyUGFpbnRlck1hcCogc2Nyb2xsYmFyTWFwKCkKICAgICAg
ICAgcmV0dXJuOwogICAgIFNjcm9sbGJhclBhaW50ZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IHNjcm9s
bGJhck1hcCgpLT5lbmQoKTsKICAgICBmb3IgKFNjcm9sbGJhclBhaW50ZXJNYXA6Oml0ZXJhdG9y
IGl0ID0gc2Nyb2xsYmFyTWFwKCktPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAg
ICBpdC0+Zmlyc3QtPnN0eWxlQ2hhbmdlZCgpOwotICAgICAgICBpdC0+Zmlyc3QtPmludmFsaWRh
dGUoKTsKKyAgICAgICAgaXQtPmtleS0+c3R5bGVDaGFuZ2VkKCk7CisgICAgICAgIGl0LT5rZXkt
PmludmFsaWRhdGUoKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbFN0b3JhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9DcmVkZW50aWFsU3RvcmFnZS5jcHAKaW5kZXggZjA5ODRmODg1NThkNWM3
OWUyODM0ZTFhY2IyODZkOGE3OTdhMjVlNS4uMjgzN2ZmNjEzOTJmMGE1YjMxNWRiNzliMjM5MTYy
MTdmZjc4MmMwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9D
cmVkZW50aWFsU3RvcmFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9DcmVkZW50aWFsU3RvcmFnZS5jcHAKQEAgLTE0Nyw3ICsxNDcsNyBAQCBib29sIENyZWRlbnRp
YWxTdG9yYWdlOjpzZXQoY29uc3QgQ3JlZGVudGlhbCYgY3JlZGVudGlhbCwgY29uc3QgS1VSTCYg
dXJsKQogICAgIGlmIChpdGVyID09IHBhdGhUb0RlZmF1bHRQcm90ZWN0aW9uU3BhY2VNYXAoKS5l
bmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEFTU0VSVChvcmlnaW5zV2l0aENyZWRl
bnRpYWxzKCkuY29udGFpbnMob3JpZ2luU3RyaW5nRnJvbVVSTCh1cmwpKSk7Ci0gICAgcHJvdGVj
dGlvblNwYWNlVG9DcmVkZW50aWFsTWFwKCkuc2V0KGl0ZXItPnNlY29uZCwgY3JlZGVudGlhbCk7
CisgICAgcHJvdGVjdGlvblNwYWNlVG9DcmVkZW50aWFsTWFwKCkuc2V0KGl0ZXItPnZhbHVlLCBj
cmVkZW50aWFsKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTU2LDcgKzE1Niw3IEBAIENy
ZWRlbnRpYWwgQ3JlZGVudGlhbFN0b3JhZ2U6OmdldChjb25zdCBLVVJMJiB1cmwpCiAgICAgUGF0
aFRvRGVmYXVsdFByb3RlY3Rpb25TcGFjZU1hcDo6aXRlcmF0b3IgaXRlciA9IGZpbmREZWZhdWx0
UHJvdGVjdGlvblNwYWNlRm9yVVJMKHVybCk7CiAgICAgaWYgKGl0ZXIgPT0gcGF0aFRvRGVmYXVs
dFByb3RlY3Rpb25TcGFjZU1hcCgpLmVuZCgpKQogICAgICAgICByZXR1cm4gQ3JlZGVudGlhbCgp
OwotICAgIHJldHVybiBwcm90ZWN0aW9uU3BhY2VUb0NyZWRlbnRpYWxNYXAoKS5nZXQoaXRlci0+
c2Vjb25kKTsKKyAgICByZXR1cm4gcHJvdGVjdGlvblNwYWNlVG9DcmVkZW50aWFsTWFwKCkuZ2V0
KGl0ZXItPnZhbHVlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQSGVhZGVyTWFwLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUEhlYWRlck1hcC5jcHAKaW5kZXggNTAwOTFl
MTlkM2FmNTZmZjRhOGRmMTc1YmY4OTc4NzAwNzYxNDI4MC4uZGVmZTFhZTg0YmYwYWRmMDc3OTQ5
NTViMTFhNWRjNzNlYTAyM2UyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9IVFRQSGVhZGVyTWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL0hUVFBIZWFkZXJNYXAuY3BwCkBAIC01Miw3ICs1Miw3IEBAIFBhc3NPd25QdHI8Q3Jv
c3NUaHJlYWRIVFRQSGVhZGVyTWFwRGF0YT4gSFRUUEhlYWRlck1hcDo6Y29weURhdGEoKSBjb25z
dAogCiAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kX2l0ID0gZW5kKCk7CiAg
ICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGJlZ2luKCk7IGl0ICE9
IGVuZF9pdDsgKytpdCkgewotICAgICAgICBkYXRhLT5hcHBlbmQobWFrZV9wYWlyKGl0LT5maXJz
dC5zdHJpbmcoKS5pc29sYXRlZENvcHkoKSwgaXQtPnNlY29uZC5pc29sYXRlZENvcHkoKSkpOwor
ICAgICAgICBkYXRhLT5hcHBlbmQobWFrZV9wYWlyKGl0LT5rZXkuc3RyaW5nKCkuaXNvbGF0ZWRD
b3B5KCksIGl0LT52YWx1ZS5pc29sYXRlZENvcHkoKSkpOwogICAgIH0KICAgICByZXR1cm4gZGF0
YS5yZWxlYXNlKCk7CiB9CkBAIC0xMDAsNyArMTAwLDcgQEAgU3RyaW5nIEhUVFBIZWFkZXJNYXA6
OmdldChjb25zdCBjaGFyKiBuYW1lKSBjb25zdAogICAgIGNvbnN0X2l0ZXJhdG9yIGkgPSBmaW5k
PGNvbnN0IGNoYXIqLCBDYXNlRm9sZGluZ0NTdHJpbmdUcmFuc2xhdG9yPihuYW1lKTsKICAgICBp
ZiAoaSA9PSBlbmQoKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIHJldHVybiBpLT5z
ZWNvbmQ7CisgICAgcmV0dXJuIGktPnZhbHVlOwogfQogICAgIAogYm9vbCBIVFRQSGVhZGVyTWFw
Ojpjb250YWlucyhjb25zdCBjaGFyKiBuYW1lKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9NSU1FSGVhZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvTUlNRUhlYWRlci5jcHAKaW5kZXggNWQ2Yjg1OGY0NmU0MzgzZmNiMmZl
YTYyODU4YWY3NTMyZDQzYTVhZi4uZjRlM2ViZjY3NGRlNmJkMWQyNGE5NTkwYTQ4MThiZWI2ZmQ4
ZGU2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9NSU1FSGVh
ZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL01JTUVIZWFkZXIu
Y3BwCkBAIC04Niw3ICs4Niw3IEBAIFBhc3NSZWZQdHI8TUlNRUhlYWRlcj4gTUlNRUhlYWRlcjo6
cGFyc2VIZWFkZXIoU2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXIqIGJ1ZmZlcikKICAgICBLZXlWYWx1
ZU1hcDo6aXRlcmF0b3IgbWltZVBhcmFtZXRlcnNJdGVyYXRvciA9IGtleVZhbHVlUGFpcnMuZmlu
ZCgiY29udGVudC10eXBlIik7CiAgICAgaWYgKG1pbWVQYXJhbWV0ZXJzSXRlcmF0b3IgIT0ga2V5
VmFsdWVQYWlycy5lbmQoKSkgewogICAgICAgICAvLyBGSVhNRTogbWFrZSBDb250ZW50VHlwZVBh
cnNlciBtb3JlIGZsZXhpYmxlIHNvIHdlIGRvbid0IGhhdmUgdG8gc3ludGhlc2l6ZSB0aGUgIkNv
bnRlbnQtVHlwZToiLgotICAgICAgICBDb250ZW50VHlwZVBhcnNlciBjb250ZW50VHlwZVBhcnNl
cihtYWtlU3RyaW5nKCJDb250ZW50LVR5cGU6IiwgbWltZVBhcmFtZXRlcnNJdGVyYXRvci0+c2Vj
b25kKSk7CisgICAgICAgIENvbnRlbnRUeXBlUGFyc2VyIGNvbnRlbnRUeXBlUGFyc2VyKG1ha2VT
dHJpbmcoIkNvbnRlbnQtVHlwZToiLCBtaW1lUGFyYW1ldGVyc0l0ZXJhdG9yLT52YWx1ZSkpOwog
ICAgICAgICBtaW1lSGVhZGVyLT5tX2NvbnRlbnRUeXBlID0gY29udGVudFR5cGVQYXJzZXIubWlt
ZVR5cGUoKTsKICAgICAgICAgaWYgKCFtaW1lSGVhZGVyLT5pc011bHRpcGFydCgpKQogICAgICAg
ICAgICAgbWltZUhlYWRlci0+bV9jaGFyc2V0ID0gY29udGVudFR5cGVQYXJzZXIuY2hhcnNldCgp
LnN0cmlwV2hpdGVTcGFjZSgpOwpAQCAtMTA1LDExICsxMDUsMTEgQEAgUGFzc1JlZlB0cjxNSU1F
SGVhZGVyPiBNSU1FSGVhZGVyOjpwYXJzZUhlYWRlcihTaGFyZWRCdWZmZXJDaHVua1JlYWRlciog
YnVmZmVyKQogCiAgICAgbWltZVBhcmFtZXRlcnNJdGVyYXRvciA9IGtleVZhbHVlUGFpcnMuZmlu
ZCgiY29udGVudC10cmFuc2Zlci1lbmNvZGluZyIpOwogICAgIGlmIChtaW1lUGFyYW1ldGVyc0l0
ZXJhdG9yICE9IGtleVZhbHVlUGFpcnMuZW5kKCkpCi0gICAgICAgIG1pbWVIZWFkZXItPm1fY29u
dGVudFRyYW5zZmVyRW5jb2RpbmcgPSBwYXJzZUNvbnRlbnRUcmFuc2ZlckVuY29kaW5nKG1pbWVQ
YXJhbWV0ZXJzSXRlcmF0b3ItPnNlY29uZCk7CisgICAgICAgIG1pbWVIZWFkZXItPm1fY29udGVu
dFRyYW5zZmVyRW5jb2RpbmcgPSBwYXJzZUNvbnRlbnRUcmFuc2ZlckVuY29kaW5nKG1pbWVQYXJh
bWV0ZXJzSXRlcmF0b3ItPnZhbHVlKTsKIAogICAgIG1pbWVQYXJhbWV0ZXJzSXRlcmF0b3IgPSBr
ZXlWYWx1ZVBhaXJzLmZpbmQoImNvbnRlbnQtbG9jYXRpb24iKTsKICAgICBpZiAobWltZVBhcmFt
ZXRlcnNJdGVyYXRvciAhPSBrZXlWYWx1ZVBhaXJzLmVuZCgpKQotICAgICAgICBtaW1lSGVhZGVy
LT5tX2NvbnRlbnRMb2NhdGlvbiA9IG1pbWVQYXJhbWV0ZXJzSXRlcmF0b3ItPnNlY29uZDsKKyAg
ICAgICAgbWltZUhlYWRlci0+bV9jb250ZW50TG9jYXRpb24gPSBtaW1lUGFyYW1ldGVyc0l0ZXJh
dG9yLT52YWx1ZTsKIAogICAgIHJldHVybiBtaW1lSGVhZGVyLnJlbGVhc2UoKTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAKaW5k
ZXggN2RkYzQ3ZTRlYTc5OWE0NmRlZTZmMzJjZmQwNzhlZjc1MTU0ZjFlZS4uNmQxMmY5ZDg5YjAy
NDc3NDZhNTdlMWJiY2FmYjJjMjE3ZDU5MTAzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAKQEAgLTcxLDcgKzcxLDcgQEAgUGFz
c1JlZlB0cjxSZXNvdXJjZUhhbmRsZT4gUmVzb3VyY2VIYW5kbGU6OmNyZWF0ZShOZXR3b3JraW5n
Q29udGV4dCogY29udGV4dCwgY28KICAgICBCdWlsdGluUmVzb3VyY2VIYW5kbGVDb25zdHJ1Y3Rv
ck1hcDo6aXRlcmF0b3IgcHJvdG9jb2xNYXBJdGVtID0gYnVpbHRpblJlc291cmNlSGFuZGxlQ29u
c3RydWN0b3JNYXAoKS5maW5kKHJlcXVlc3QudXJsKCkucHJvdG9jb2woKSk7CiAKICAgICBpZiAo
cHJvdG9jb2xNYXBJdGVtICE9IGJ1aWx0aW5SZXNvdXJjZUhhbmRsZUNvbnN0cnVjdG9yTWFwKCku
ZW5kKCkpCi0gICAgICAgIHJldHVybiBwcm90b2NvbE1hcEl0ZW0tPnNlY29uZChyZXF1ZXN0LCBj
bGllbnQpOworICAgICAgICByZXR1cm4gcHJvdG9jb2xNYXBJdGVtLT52YWx1ZShyZXF1ZXN0LCBj
bGllbnQpOwogCiAgICAgUmVmUHRyPFJlc291cmNlSGFuZGxlPiBuZXdIYW5kbGUoYWRvcHRSZWYo
bmV3IFJlc291cmNlSGFuZGxlKHJlcXVlc3QsIGNsaWVudCwgZGVmZXJzTG9hZGluZywgc2hvdWxk
Q29udGVudFNuaWZmKSkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcAppbmRleCAzNTA5NzkyOTI3OGM3NjA2NGM0
YjBkZWI5YWZlMzlmZjE5YmU0YzI0Li41MzE1YzFlMzc2YWYyNjg2NGYzODE2MjI1NTliMDliOTZi
YTFlMjdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291
cmNlUmVxdWVzdEJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
UmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHAKQEAgLTM3Myw3ICszNzMsNyBAQCB2b2lkIFJlc291cmNl
UmVxdWVzdEJhc2U6OmFkZEhUVFBIZWFkZXJGaWVsZChjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUs
IGNvbnN0IFN0cgogICAgIHVwZGF0ZVJlc291cmNlUmVxdWVzdCgpOwogICAgIEhUVFBIZWFkZXJN
YXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX2h0dHBIZWFkZXJGaWVsZHMuYWRkKG5hbWUsIHZhbHVl
KTsKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXN1bHQuaXRlcmF0b3It
PnNlY29uZCArPSAiLCIgKyB2YWx1ZTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSAr
PSAiLCIgKyB2YWx1ZTsKIAogICAgIGlmICh1cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkp
CiAgICAgICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZhbHNlOwpAQCAtMzgzLDcgKzM4
Myw3IEBAIHZvaWQgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6YWRkSFRUUEhlYWRlckZpZWxkcyhjb25z
dCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJGaWVsZHMpCiB7CiAgICAgSFRUUEhlYWRlck1hcDo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gaGVhZGVyRmllbGRzLmVuZCgpOwogICAgIGZvciAoSFRUUEhlYWRl
ck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBoZWFkZXJGaWVsZHMuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KQotICAgICAgICBhZGRIVFRQSGVhZGVyRmllbGQoaXQtPmZpcnN0LCBpdC0+c2Vjb25k
KTsKKyAgICAgICAgYWRkSFRUUEhlYWRlckZpZWxkKGl0LT5rZXksIGl0LT52YWx1ZSk7CiB9CiAK
IGJvb2wgZXF1YWxJZ25vcmluZ0hlYWRlckZpZWxkcyhjb25zdCBSZXNvdXJjZVJlcXVlc3RCYXNl
JiBhLCBjb25zdCBSZXNvdXJjZVJlcXVlc3RCYXNlJiBiKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L05ldHdvcmtKb2IuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L05ldHdvcmtKb2IuY3BwCmluZGV4
IDdkYTJhYzNjMzAzODFlZmU0YjA5ZDA0ZDRiZGZiMGI4NTFjYjRmYTYuLjZhZGNiMWE2ZTk4NzVh
OTYwNTAzMWFiMDQ0ZGMwMWViM2JiY2EyNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9OZXR3b3JrSm9iLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvTmV0d29ya0pvYi5jcHAKQEAgLTI0NSw5
ICsyNDUsOSBAQCB2b2lkIE5ldHdvcmtKb2I6Om5vdGlmeUhlYWRlcnNSZWNlaXZlZChCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6TmV0d29ya1JlcXVlc3Q6OkhlYQogICAgIEJsYWNrQmVycnk6OlBsYXRm
b3JtOjpOZXR3b3JrUmVxdWVzdDo6SGVhZGVyTGlzdDo6Y29uc3RfaXRlcmF0b3IgZW5kSXQgPSBo
ZWFkZXJzLmVuZCgpOwogICAgIGZvciAoQmxhY2tCZXJyeTo6UGxhdGZvcm06Ok5ldHdvcmtSZXF1
ZXN0OjpIZWFkZXJMaXN0Ojpjb25zdF9pdGVyYXRvciBpdCA9IGhlYWRlcnMuYmVnaW4oKTsgaXQg
IT0gZW5kSXQ7ICsraXQpIHsKICAgICAgICAgaWYgKHNob3VsZERlZmVyTG9hZGluZygpKQotICAg
ICAgICAgICAgbV9kZWZlcnJlZERhdGEuZGVmZXJIZWFkZXJSZWNlaXZlZChpdC0+Zmlyc3QuY19z
dHIoKSwgaXQtPnNlY29uZC5jX3N0cigpKTsKKyAgICAgICAgICAgIG1fZGVmZXJyZWREYXRhLmRl
ZmVySGVhZGVyUmVjZWl2ZWQoaXQtPmtleS5jX3N0cigpLCBpdC0+dmFsdWUuY19zdHIoKSk7CiAg
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgU3RyaW5nIGtleVN0cmluZyhpdC0+Zmlyc3QuY19z
dHIoKSk7CisgICAgICAgICAgICBTdHJpbmcga2V5U3RyaW5nKGl0LT5rZXkuY19zdHIoKSk7CiAg
ICAgICAgICAgICBTdHJpbmcgdmFsdWVTdHJpbmc7CiAgICAgICAgICAgICBpZiAoZXF1YWxJZ25v
cmluZ0Nhc2Uoa2V5U3RyaW5nLCAiTG9jYXRpb24iKSkgewogICAgICAgICAgICAgICAgIC8vIExv
Y2F0aW9uLCBsaWtlIGFsbCBoZWFkZXJzLCBpcyBzdXBwb3NlZCB0byBiZSBMYXRpbi0xLiBCdXQg
c29tZSBzaXRlcyAod2lraXBlZGlhKSBzZW5kIGl0IGluIFVURi04LgpAQCAtMjU4LDExICsyNTgs
MTEgQEAgdm9pZCBOZXR3b3JrSm9iOjpub3RpZnlIZWFkZXJzUmVjZWl2ZWQoQmxhY2tCZXJyeTo6
UGxhdGZvcm06Ok5ldHdvcmtSZXF1ZXN0OjpIZWEKICAgICAgICAgICAgICAgICAvLyBGSVhNRTog
bWF5YmUgd2Ugc2hvdWxkIGRvIHRoaXMgd2l0aCBvdGhlciBoZWFkZXJzPwogICAgICAgICAgICAg
ICAgIC8vIFNraXAgaXQgZm9yIG5vdyAtIHdlIGRvbid0IHdhbnQgdG8gcmV3cml0ZSByYW5kb20g
Ynl0ZXMgdW5sZXNzIHdlJ3JlIHN1cmUuIChEZWZpbml0ZWx5IGRvbid0IHdhbnQgdG8KICAgICAg
ICAgICAgICAgICAvLyByZXdyaXRlIGNvb2tpZXMsIGZvciBpbnN0YW5jZS4pIE5lZWRzIG1vcmUg
aW52ZXN0aWdhdGlvbi4KLSAgICAgICAgICAgICAgICB2YWx1ZVN0cmluZyA9IFN0cmluZzo6ZnJv
bVVURjgoaXQtPnNlY29uZC5jX3N0cigpKTsKKyAgICAgICAgICAgICAgICB2YWx1ZVN0cmluZyA9
IFN0cmluZzo6ZnJvbVVURjgoaXQtPnZhbHVlLmNfc3RyKCkpOwogICAgICAgICAgICAgICAgIGlm
ICh2YWx1ZVN0cmluZy5pc051bGwoKSkKLSAgICAgICAgICAgICAgICAgICAgdmFsdWVTdHJpbmcg
PSBpdC0+c2Vjb25kLmNfc3RyKCk7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlU3RyaW5nID0g
aXQtPnZhbHVlLmNfc3RyKCk7CiAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICB2
YWx1ZVN0cmluZyA9IGl0LT5zZWNvbmQuY19zdHIoKTsKKyAgICAgICAgICAgICAgICB2YWx1ZVN0
cmluZyA9IGl0LT52YWx1ZS5jX3N0cigpOwogCiAgICAgICAgICAgICBoYW5kbGVOb3RpZnlIZWFk
ZXJSZWNlaXZlZChrZXlTdHJpbmcsIHZhbHVlU3RyaW5nKTsKICAgICAgICAgfQpAQCAtMzM2LDE0
ICszMzYsMTQgQEAgdm9pZCBOZXR3b3JrSm9iOjpoYW5kbGVOb3RpZnlNdWx0aXBhcnRIZWFkZXJS
ZWNlaXZlZChjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3QKICAgICAgICAgICAgIGJvb2wgbmVl
ZHNDb3B5ZnJvbU9yaWdpbmFsUmVzcG9uc2UgPSB0cnVlOwogICAgICAgICAgICAgaW50IHJlcGxh
Y2VIZWFkZXJzSW5kZXggPSAwOwogICAgICAgICAgICAgd2hpbGUgKEJsYWNrQmVycnk6OlBsYXRm
b3JtOjpNdWx0aXBhcnRTdHJlYW06OnJlcGxhY2VIZWFkZXJzW3JlcGxhY2VIZWFkZXJzSW5kZXhd
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGl0LT5maXJzdC5sb3dlcigpID09IEJsYWNrQmVycnk6
OlBsYXRmb3JtOjpNdWx0aXBhcnRTdHJlYW06OnJlcGxhY2VIZWFkZXJzW3JlcGxhY2VIZWFkZXJz
SW5kZXhdKSB7CisgICAgICAgICAgICAgICAgaWYgKGl0LT5rZXkubG93ZXIoKSA9PSBCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6TXVsdGlwYXJ0U3RyZWFtOjpyZXBsYWNlSGVhZGVyc1tyZXBsYWNlSGVh
ZGVyc0luZGV4XSkgewogICAgICAgICAgICAgICAgICAgICBuZWVkc0NvcHlmcm9tT3JpZ2luYWxS
ZXNwb25zZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgcmVwbGFjZUhlYWRlcnNJbmRleCsrOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgaWYgKG5lZWRzQ29weWZyb21PcmlnaW5hbFJlc3BvbnNlKQotICAg
ICAgICAgICAgICAgIG1fbXVsdGlwYXJ0UmVzcG9uc2UtPnNldEhUVFBIZWFkZXJGaWVsZChpdC0+
Zmlyc3QsIGl0LT5zZWNvbmQpOworICAgICAgICAgICAgICAgIG1fbXVsdGlwYXJ0UmVzcG9uc2Ut
PnNldEhUVFBIZWFkZXJGaWVsZChpdC0+a2V5LCBpdC0+dmFsdWUpOwogICAgICAgICB9CiAKICAg
ICAgICAgbV9tdWx0aXBhcnRSZXNwb25zZS0+c2V0SXNNdWx0aXBhcnRQYXlsb2FkKHRydWUpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jl
c291cmNlUmVxdWVzdEJsYWNrQmVycnkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9ibGFja2JlcnJ5L1Jlc291cmNlUmVxdWVzdEJsYWNrQmVycnkuY3BwCmluZGV4IDlhMzUw
YzFjZWIwYjhiNGUxMDExNDUxOGY1NGYyMGIxMTc4NWQ3NDQuLjQyOWM1OTYxZjJiNWQ5ZjI5YWM0
NGQyOTUyYWY4MzM2YzQ3ZWY4OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJjZVJlcXVlc3RCbGFja0JlcnJ5LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvUmVzb3VyY2VSZXF1ZXN0
QmxhY2tCZXJyeS5jcHAKQEAgLTE5NCw5ICsxOTQsOSBAQCB2b2lkIFJlc291cmNlUmVxdWVzdDo6
aW5pdGlhbGl6ZVBsYXRmb3JtUmVxdWVzdChOZXR3b3JrUmVxdWVzdCYgcGxhdGZvcm1SZXF1ZXN0
LAogICAgICAgICBib29sIGNvb2tpZUhlYWRlck1heUJlRGlydHkgPSBpc1JlZGlyZWN0IHx8IGNh
Y2hlUG9saWN5KCkgPT0gV2ViQ29yZTo6UmVsb2FkSWdub3JpbmdDYWNoZURhdGEgfHwgY2FjaGVQ
b2xpY3koKSA9PSBXZWJDb3JlOjpSZXR1cm5DYWNoZURhdGFFbHNlTG9hZDsKIAogICAgICAgICBm
b3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaHR0cEhlYWRlckZpZWxkcygp
LmJlZ2luKCk7IGl0ICE9IGh0dHBIZWFkZXJGaWVsZHMoKS5lbmQoKTsgKytpdCkgewotICAgICAg
ICAgICAgU3RyaW5nIGtleSA9IGl0LT5maXJzdDsKLSAgICAgICAgICAgIFN0cmluZyB2YWx1ZSA9
IGl0LT5zZWNvbmQ7Ci0gICAgICAgICAgICBpZiAoIWtleS5pc0VtcHR5KCkpIHsKKyAgICAgICAg
ICAgIFN0cmluZyBrZXkgPSBpdC0+a2V5OworICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0gaXQt
PnZhbHVlOworICAgICAgICAgICAgaWYgKCFrZXkuaXNFbXB0eSgpICYmICF2YWx1ZS5pc0VtcHR5
KCkpIHsKICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIHRoZSBlbmNvZGluZyBh
bmQgZW5jb2RlIHRoZSBjb29raWUncyB2YWx1ZSB1c2luZyBsYXRpbjEgb3IgdXRmOCB0byBzdXBw
b3J0IHVuaWNvZGUgY2hhcmFjdGVycy4KICAgICAgICAgICAgICAgICAvLyBXZSB3byd0IHVzZSB0
aGUgb2xkIGNvb2tpZXMgb2YgcmVzb3VyY2VSZXF1ZXN0IGZvciBuZXcgbG9jYXRpb24gYmVjYXVz
ZSB0aGVzZSBjb29raWVzIG1heSBiZSBjaGFuZ2VkIGJ5IHJlZGlyZWN0aW9uLgogICAgICAgICAg
ICAgICAgIGlmICghZXF1YWxJZ25vcmluZ0Nhc2Uoa2V5LCAiQ29va2llIikpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZOZXQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNG
TmV0LmNwcAppbmRleCAwZjM5ZWIwYmQ4Yzc2ZDUxMTAzZGFmYmVjM2ZiMTFhNWFkNmQ0NGVhLi4z
NzQ1ZjYzMWJhMGYyMThlODJlYjQ4ODEzODBlODIzOTJjMDYwMjE3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZOZXQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRk5l
dC5jcHAKQEAgLTQxOCw3ICs0MTgsNyBAQCBzdGF0aWMgQ0ZVUkxSZXF1ZXN0UmVmIG1ha2VGaW5h
bFJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBib29sIHNobwogICAgICAg
ICBpZiAoIXNzbFByb3BzKQogICAgICAgICAgICAgc3NsUHJvcHMuYWRvcHRDRihDRkRpY3Rpb25h
cnlDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDAsICZrQ0ZUeXBlRGljdGlvbmFy
eUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKICNpZiBQ
TEFURk9STShXSU4pCi0gICAgICAgIHdrU2V0Q2xpZW50Q2VydGlmaWNhdGVJblNTTFByb3BlcnRp
ZXMoc3NsUHJvcHMuZ2V0KCksIChjbGllbnRDZXJ0LT5zZWNvbmQpLmdldCgpKTsKKyAgICAgICAg
d2tTZXRDbGllbnRDZXJ0aWZpY2F0ZUluU1NMUHJvcGVydGllcyhzc2xQcm9wcy5nZXQoKSwgKGNs
aWVudENlcnQtPnZhbHVlKS5nZXQoKSk7CiAjZW5kaWYKICAgICB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0Q0ZOZXQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZVJlcXVlc3RDRk5l
dC5jcHAKaW5kZXggMjc5ZDc1NWIyYzhiMjI2YmFmODFjYjQ3MTc1OGJmNmM4NzVlN2FmMy4uYzRl
YWUyZWM2NWUxNjNlYWU5MGI5N2ViNWVlM2NjYmZiNTJiMmVkZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZVJlcXVlc3RDRk5ldC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZVJlcXVlc3RDRk5l
dC5jcHAKQEAgLTEyMCw4ICsxMjAsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0SGVhZGVyRmll
bGRzKENGTXV0YWJsZVVSTFJlcXVlc3RSZWYgcmVxdWVzdCwgY29uc3QgSFRUUEhlYQogCiAgICAg
SFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcmVxdWVzdEhlYWRlcnMuZW5kKCk7
CiAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHJlcXVlc3RIZWFk
ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBDRlN0cmluZ1JlZiBrZXkg
PSBpdC0+Zmlyc3QuY3JlYXRlQ0ZTdHJpbmcoKTsKLSAgICAgICAgQ0ZTdHJpbmdSZWYgdmFsdWUg
PSBpdC0+c2Vjb25kLmNyZWF0ZUNGU3RyaW5nKCk7CisgICAgICAgIENGU3RyaW5nUmVmIGtleSA9
IGl0LT5rZXkuY3JlYXRlQ0ZTdHJpbmcoKTsKKyAgICAgICAgQ0ZTdHJpbmdSZWYgdmFsdWUgPSBp
dC0+dmFsdWUuY3JlYXRlQ0ZTdHJpbmcoKTsKICAgICAgICAgQ0ZVUkxSZXF1ZXN0U2V0SFRUUEhl
YWRlckZpZWxkVmFsdWUocmVxdWVzdCwga2V5LCB2YWx1ZSk7CiAgICAgICAgIENGUmVsZWFzZShr
ZXkpOwogICAgICAgICBDRlJlbGVhc2UodmFsdWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNw
cAppbmRleCBmMGZkNDAzZjhjY2MzMWYwMWQ2ZmY4ZDAyOTY1NWE1OTIxMGYyYWNjLi4wZjhlNWFk
NzFiZWNhN2JkZmVjOTMzMDk4YzlkYjNiNTRiYjEwOGNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5h
Z2VyLmNwcApAQCAtNzAzLDggKzcwMyw4IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpp
bml0aWFsaXplSGFuZGxlKFJlc291cmNlSGFuZGxlKiBqb2IpCiAgICAgICAgIEhUVFBIZWFkZXJN
YXAgY3VzdG9tSGVhZGVycyA9IGpvYi0+Zmlyc3RSZXF1ZXN0KCkuaHR0cEhlYWRlckZpZWxkcygp
OwogICAgICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBjdXN0b21IZWFk
ZXJzLmVuZCgpOwogICAgICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gY3VzdG9tSGVhZGVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAg
IFN0cmluZyBrZXkgPSBpdC0+Zmlyc3Q7Ci0gICAgICAgICAgICBTdHJpbmcgdmFsdWUgPSBpdC0+
c2Vjb25kOworICAgICAgICAgICAgU3RyaW5nIGtleSA9IGl0LT5rZXk7CisgICAgICAgICAgICBT
dHJpbmcgdmFsdWUgPSBpdC0+dmFsdWU7CiAgICAgICAgICAgICBTdHJpbmcgaGVhZGVyU3RyaW5n
KGtleSk7CiAgICAgICAgICAgICBoZWFkZXJTdHJpbmcuYXBwZW5kKCI6ICIpOwogICAgICAgICAg
ICAgaGVhZGVyU3RyaW5nLmFwcGVuZCh2YWx1ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZVJlcXVlc3RNYWMubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZVJlcXVlc3RNYWMubW0KaW5kZXggMTIw
ZjRhY2I1NmJjYzA0ZjU1N2NmYzhhZjI0ZGY0OGI5MzFlZDNlYS4uMjE0NjNjZmRhNjlmZDg5NzUz
MDhlY2JkN2IxNDg5ZDgyZGU4ZDhkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9tYWMvUmVzb3VyY2VSZXF1ZXN0TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlUmVxdWVzdE1hYy5tbQpAQCAtMTUyLDcgKzE1
Miw3IEBAIHZvaWQgUmVzb3VyY2VSZXF1ZXN0Ojpkb1VwZGF0ZVBsYXRmb3JtUmVxdWVzdCgpCiAg
ICAgICAgIFtuc1JlcXVlc3Qgc2V0VmFsdWU6bmlsIGZvckhUVFBIZWFkZXJGaWVsZDpbb2xkSGVh
ZGVyRmllbGROYW1lcyBvYmplY3RBdEluZGV4OmkgLSAxXV07CiAgICAgSFRUUEhlYWRlck1hcDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gaHR0cEhlYWRlckZpZWxkcygpLmVuZCgpOwogICAgIGZvciAo
SFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBodHRwSGVhZGVyRmllbGRzKCkuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBbbnNSZXF1ZXN0IHNldFZhbHVlOml0LT5z
ZWNvbmQgZm9ySFRUUEhlYWRlckZpZWxkOml0LT5maXJzdF07CisgICAgICAgIFtuc1JlcXVlc3Qg
c2V0VmFsdWU6aXQtPnZhbHVlIGZvckhUVFBIZWFkZXJGaWVsZDppdC0+a2V5XTsKIAogICAgIC8v
IFRoZSBiZWxvdyBjaGVjayBjYW4gYmUgcmVtb3ZlZCBvbmNlIHdlIHJlcXVpcmUgYSB2ZXJzaW9u
IG9mIEZvdW5kYXRpb24gd2l0aCAtW05TTXV0YWJsZVVSTFJlcXVlc3Qgc2V0Q29udGVudERpc3Bv
c2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5Ol0gbWV0aG9kLgogICAgIHN0YXRpYyBib29sIHN1
cHBvcnRzQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5ID0gW05TTXV0YWJs
ZVVSTFJlcXVlc3QgaW5zdGFuY2VzUmVzcG9uZFRvU2VsZWN0b3I6QHNlbGVjdG9yKHNldENvbnRl
bnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheTopXTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvcXQvUmVzb3VyY2VSZXF1ZXN0UXQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9xdC9SZXNvdXJjZVJlcXVlc3RRdC5jcHAKaW5k
ZXggYmZiMjQxNDBiZGY0ZjVlZjE5YjlkOWFhMjE1ZjVlYjgxZGIzMDAxOS4uNGMyMmE2YTNhODQy
MzAyMzk3ZTQ3ZGFkOTJjM2EyM2Y1NDZkZjVmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9xdC9SZXNvdXJjZVJlcXVlc3RRdC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9xdC9SZXNvdXJjZVJlcXVlc3RRdC5jcHAKQEAgLTQ5LDgg
KzQ5LDggQEAgUU5ldHdvcmtSZXF1ZXN0IFJlc291cmNlUmVxdWVzdDo6dG9OZXR3b3JrUmVxdWVz
dChOZXR3b3JraW5nQ29udGV4dCAqY29udGV4dCkgY28KICAgICBjb25zdCBIVFRQSGVhZGVyTWFw
ICZoZWFkZXJzID0gaHR0cEhlYWRlckZpZWxkcygpOwogICAgIGZvciAoSFRUUEhlYWRlck1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBoZWFkZXJzLmJlZ2luKCksIGVuZCA9IGhlYWRlcnMuZW5kKCk7
CiAgICAgICAgICBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgUUJ5dGVBcnJheSBuYW1lID0g
UVN0cmluZyhpdC0+Zmlyc3QpLnRvQXNjaWkoKTsKLSAgICAgICAgUUJ5dGVBcnJheSB2YWx1ZSA9
IFFTdHJpbmcoaXQtPnNlY29uZCkudG9Bc2NpaSgpOworICAgICAgICBRQnl0ZUFycmF5IG5hbWUg
PSBRU3RyaW5nKGl0LT5rZXkpLnRvQXNjaWkoKTsKKyAgICAgICAgUUJ5dGVBcnJheSB2YWx1ZSA9
IFFTdHJpbmcoaXQtPnZhbHVlKS50b0FzY2lpKCk7CiAgICAgICAgIC8vIFFOZXR3b3JrUmVxdWVz
dDo6c2V0UmF3SGVhZGVyKCkgd291bGQgcmVtb3ZlIHRoZSBoZWFkZXIgaWYgdGhlIHZhbHVlIGlz
IG51bGwKICAgICAgICAgLy8gTWFrZSBzdXJlIHRvIHNldCBhbiBlbXB0eSBoZWFkZXIgaW5zdGVh
ZCBvZiBudWxsIGhlYWRlci4KICAgICAgICAgaWYgKCF2YWx1ZS5pc051bGwoKSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3RT
b3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJl
cXVlc3RTb3VwLmNwcAppbmRleCBkNzEyN2I0YjViOGU0NTlhNGNhZWM1NWE1NTI3YmJjZjNjODM3
Nzg1Li41N2FiNGQ2NDdiM2JmZmMyNWJhOTIzNzc4YzcxZDRmNGJlZTE1Y2I5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0U291
cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNl
UmVxdWVzdFNvdXAuY3BwCkBAIC00Myw3ICs0Myw3IEBAIHZvaWQgUmVzb3VyY2VSZXF1ZXN0Ojp1
cGRhdGVTb3VwTWVzc2FnZShTb3VwTWVzc2FnZSogc291cE1lc3NhZ2UpIGNvbnN0CiAgICAgaWYg
KCFoZWFkZXJzLmlzRW1wdHkoKSkgewogICAgICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVy
YXRvciBlbmQgPSBoZWFkZXJzLmVuZCgpOwogICAgICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gaGVhZGVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAg
ICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQoc291cEhlYWRlcnMsIGl0LT5maXJz
dC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBpdC0+c2Vjb25kLnV0ZjgoKS5kYXRhKCkpOworICAg
ICAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKHNvdXBIZWFkZXJzLCBpdC0+a2V5
LnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGl0LT52YWx1ZS51dGY4KCkuZGF0YSgpKTsKICAgICB9
CiAKICAgICBTdHJpbmcgZmlyc3RQYXJ0eVN0cmluZyA9IGZpcnN0UGFydHlGb3JDb29raWVzKCku
c3RyaW5nKCk7CkBAIC02Niw3ICs2Niw3IEBAIFNvdXBNZXNzYWdlKiBSZXNvdXJjZVJlcXVlc3Q6
OnRvU291cE1lc3NhZ2UoKSBjb25zdAogICAgIGlmICghaGVhZGVycy5pc0VtcHR5KCkpIHsKICAg
ICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaGVhZGVycy5lbmQoKTsK
ICAgICAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGhlYWRlcnMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgc291cF9tZXNzYWdlX2hlYWRl
cnNfYXBwZW5kKHNvdXBIZWFkZXJzLCBpdC0+Zmlyc3Quc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwg
aXQtPnNlY29uZC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9oZWFk
ZXJzX2FwcGVuZChzb3VwSGVhZGVycywgaXQtPmtleS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBp
dC0+dmFsdWUudXRmOCgpLmRhdGEoKSk7CiAgICAgfQogCiAgICAgU3RyaW5nIGZpcnN0UGFydHlT
dHJpbmcgPSBmaXJzdFBhcnR5Rm9yQ29va2llcygpLnN0cmluZygpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVzcG9uc2VTb3VwLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlc3BvbnNl
U291cC5jcHAKaW5kZXggMTU1MDQ4YjJiZjJmMjQ0MDJiYmQ4OWY0MzQ0NGY0MjRiMjZjYWZjYy4u
MmZmZWI1NjNhZGU4YzRiMGM3NGVjOTUxNGRlOTllNzIwYzk4ZDIxOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVzcG9uc2VTb3VwLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXNw
b25zZVNvdXAuY3BwCkBAIC00Niw3ICs0Niw3IEBAIFNvdXBNZXNzYWdlKiBSZXNvdXJjZVJlc3Bv
bnNlOjp0b1NvdXBNZXNzYWdlKCkgY29uc3QKICAgICBpZiAoIWhlYWRlcnMuaXNFbXB0eSgpKSB7
CiAgICAgICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGhlYWRlcnMuZW5k
KCk7CiAgICAgICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBoZWFk
ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9o
ZWFkZXJzX2FwcGVuZChzb3VwSGVhZGVycywgaXQtPmZpcnN0LnN0cmluZygpLnV0ZjgoKS5kYXRh
KCksIGl0LT5zZWNvbmQudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBzb3VwX21lc3NhZ2Vf
aGVhZGVyc19hcHBlbmQoc291cEhlYWRlcnMsIGl0LT5rZXkuc3RyaW5nKCkudXRmOCgpLmRhdGEo
KSwgaXQtPnZhbHVlLnV0ZjgoKS5kYXRhKCkpOwogICAgIH0KIAogICAgIHNvdXBfbWVzc2FnZV9z
ZXRfZmxhZ3Moc291cE1lc3NhZ2UsIG1fc291cEZsYWdzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvd2luL1Jlc291cmNlSGFuZGxlV2luLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvd2luL1Jlc291cmNlSGFuZGxlV2luLmNwcAppbmRl
eCAwMjEyZDBjZGE5OGM5ZjEzNzkyOGU2MTJmZGY5NTAzNjVhMDFkMGQ2Li5mMjUwNTI3NzViMGRl
ZGZlMjFjNzU1ZDNmODM5OTg1M2U3YTBmMzk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL3dpbi9SZXNvdXJjZUhhbmRsZVdpbi5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay93aW4vUmVzb3VyY2VIYW5kbGVXaW4uY3BwCkBAIC0zMjMs
MTUgKzMyMywxNSBAQCBib29sIFJlc291cmNlSGFuZGxlOjpzdGFydChOZXR3b3JraW5nQ29udGV4
dCogY29udGV4dCkKICAgICBjb25zdCBIVFRQSGVhZGVyTWFwJiBodHRwSGVhZGVyRmllbGRzID0g
Zmlyc3RSZXF1ZXN0KCkuaHR0cEhlYWRlckZpZWxkcygpOwogCiAgICAgZm9yIChIVFRQSGVhZGVy
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGh0dHBIZWFkZXJGaWVsZHMuYmVnaW4oKTsgaXQgIT0g
aHR0cEhlYWRlckZpZWxkcy5lbmQoKTsgKytpdCkgewotICAgICAgICBpZiAoZXF1YWxJZ25vcmlu
Z0Nhc2UoaXQtPmZpcnN0LCAiQWNjZXB0IikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UoaXQtPmZpcnN0
LCAiUmVmZXJlciIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKGl0LT5maXJzdCwgIlVzZXItQWdlbnQi
KSkKKyAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGl0LT5rZXksICJBY2NlcHQiKSB8fCBl
cXVhbElnbm9yaW5nQ2FzZShpdC0+a2V5LCAiUmVmZXJlciIpIHx8IGVxdWFsSWdub3JpbmdDYXNl
KGl0LT5rZXksICJVc2VyLUFnZW50IikpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAg
ICBpZiAoIWh0dHBIZWFkZXJzLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGh0dHBIZWFkZXJzLmFw
cGVuZCgnXG4nKTsKIAotICAgICAgICBodHRwSGVhZGVycy5hcHBlbmQoaXQtPmZpcnN0LmNoYXJh
Y3RlcnMoKSwgaXQtPmZpcnN0Lmxlbmd0aCgpKTsKKyAgICAgICAgaHR0cEhlYWRlcnMuYXBwZW5k
KGl0LT5rZXkuY2hhcmFjdGVycygpLCBpdC0+a2V5Lmxlbmd0aCgpKTsKICAgICAgICAgaHR0cEhl
YWRlcnMuYXBwZW5kKCc6Jyk7Ci0gICAgICAgIGh0dHBIZWFkZXJzLmFwcGVuZChpdC0+c2Vjb25k
LmNoYXJhY3RlcnMoKSwgaXQtPnNlY29uZC5sZW5ndGgoKSk7CisgICAgICAgIGh0dHBIZWFkZXJz
LmFwcGVuZChpdC0+dmFsdWUuY2hhcmFjdGVycygpLCBpdC0+dmFsdWUubGVuZ3RoKCkpOwogICAg
IH0KIAogICAgIElOVEVSTkVUX0JVRkZFUlNXIGludGVybmV0QnVmZmVyczsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1J1bkxvb3BRdC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9xdC9SdW5Mb29wUXQuY3BwCmluZGV4IDI4YWI2N2JkZTAxNTVhYzdmNWI4Njcy
NjYyODU4OTQ1NDQ0OTI0ZTYuLmZjN2EyZDFjYjViNzFjMzA5YjRjY2NlOTYzODg0Y2ZiMWNhZWU5
NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1J1bkxvb3BRdC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUnVuTG9vcFF0LmNwcApAQCAtMTI3LDcg
KzEyNyw3IEBAIHZvaWQgUnVuTG9vcDo6VGltZXJCYXNlOjp0aW1lckZpcmVkKFJ1bkxvb3AqIHJ1
bkxvb3AsIGludCBJRCkKIHsKICAgICBUaW1lck1hcDo6aXRlcmF0b3IgaXQgPSBydW5Mb29wLT5t
X2FjdGl2ZVRpbWVycy5maW5kKElEKTsKICAgICBBU1NFUlQoaXQgIT0gcnVuTG9vcC0+bV9hY3Rp
dmVUaW1lcnMuZW5kKCkpOwotICAgIFRpbWVyQmFzZSogdGltZXIgPSBpdC0+c2Vjb25kOworICAg
IFRpbWVyQmFzZSogdGltZXIgPSBpdC0+dmFsdWU7CiAKICAgICBpZiAoIXRpbWVyLT5tX2lzUmVw
ZWF0aW5nKSB7CiAgICAgICAgIC8vIFN0b3AgdGhlIHRpbWVyIChjYWxsaW5nIHN0b3Agd291bGQg
bmVlZCBhbm90aGVyIGhhc2ggdGFibGUgbG9va3VwKS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvTG9jYWxlVG9TY3JpcHRNYXBwaW5nRGVmYXVsdC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0xvY2FsZVRvU2NyaXB0TWFwcGluZ0RlZmF1bHQuY3Bw
CmluZGV4IDRlZDAzY2U0ZTA3ZTVkOGM5NzFmOWQxZmVkOTVmMDA4YmY0YTU2MTkuLjVkYzkzZmYw
OTRhODhlZTZlMGY1NTExN2QwMmNiYzZmNmI0YzQyMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvTG9jYWxlVG9TY3JpcHRNYXBwaW5nRGVmYXVsdC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Mb2NhbGVUb1NjcmlwdE1hcHBpbmdEZWZhdWx0
LmNwcApAQCAtMTYwLDcgKzE2MCw3IEBAIFVTY3JpcHRDb2RlIHNjcmlwdE5hbWVUb0NvZGUoY29u
c3QgU3RyaW5nJiBzY3JpcHROYW1lKQogCiAgICAgSGFzaE1hcDxTdHJpbmcsIFVTY3JpcHRDb2Rl
Pjo6aXRlcmF0b3IgaXQgPSBzY3JpcHROYW1lQ29kZU1hcC5maW5kKHNjcmlwdE5hbWUubG93ZXIo
KSk7CiAgICAgaWYgKGl0ICE9IHNjcmlwdE5hbWVDb2RlTWFwLmVuZCgpKQotICAgICAgICByZXR1
cm4gaXQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKICAgICByZXR1cm4gVVND
UklQVF9JTlZBTElEX0NPREU7CiB9CiAKQEAgLTM4Myw3ICszODMsNyBAQCBVU2NyaXB0Q29kZSBs
b2NhbGVUb1NjcmlwdENvZGVGb3JGb250U2VsZWN0aW9uKGNvbnN0IFN0cmluZyYgbG9jYWxlKQog
ICAgIHdoaWxlICghY2Fub25pY2FsTG9jYWxlLmlzRW1wdHkoKSkgewogICAgICAgICBIYXNoTWFw
PFN0cmluZywgVVNjcmlwdENvZGU+OjppdGVyYXRvciBpdCA9IGxvY2FsZVNjcmlwdE1hcC5maW5k
KGNhbm9uaWNhbExvY2FsZSk7CiAgICAgICAgIGlmIChpdCAhPSBsb2NhbGVTY3JpcHRNYXAuZW5k
KCkpCi0gICAgICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIHJldHVybiBp
dC0+dmFsdWU7CiAgICAgICAgIHNpemVfdCBwb3MgPSBjYW5vbmljYWxMb2NhbGUucmV2ZXJzZUZp
bmQoJ18nKTsKICAgICAgICAgaWYgKHBvcyA9PSBub3RGb3VuZCkKICAgICAgICAgICAgIGJyZWFr
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdS
ZWdpc3RyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1Jl
Z2lzdHJ5LmNwcAppbmRleCAwNTE1MDA1MmY1NGQ1MTdhMGEwMWY2MjYwNjE4ZWIxNTdkMThhN2Uz
Li5mNjA1YTBmMWI2MGVjNDhhMTY2NGIzNTdhMzNhZTRhNzQ4OTc2YTY5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcApA
QCAtMTk2LDggKzE5Niw4IEBAIHN0YXRpYyB2b2lkIHBydW5lQmxhY2tsaXN0ZWRDb2RlY3MoKQog
ICAgICAgICBUZXh0RW5jb2RpbmdOYW1lTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHRleHRFbmNv
ZGluZ05hbWVNYXAtPmJlZ2luKCk7CiAgICAgICAgIFRleHRFbmNvZGluZ05hbWVNYXA6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IHRleHRFbmNvZGluZ05hbWVNYXAtPmVuZCgpOwogICAgICAgICBmb3Ig
KDsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAoaXQtPnNlY29uZCA9PSBhdG9t
aWNOYW1lKQotICAgICAgICAgICAgICAgIG5hbWVzLmFwcGVuZChpdC0+Zmlyc3QpOworICAgICAg
ICAgICAgaWYgKGl0LT52YWx1ZSA9PSBhdG9taWNOYW1lKQorICAgICAgICAgICAgICAgIG5hbWVz
LmFwcGVuZChpdC0+a2V5KTsKICAgICAgICAgfQogCiAgICAgICAgIHNpemVfdCBsZW5ndGggPSBu
YW1lcy5zaXplKCk7CkBAIC0zNzksNyArMzc5LDcgQEAgdm9pZCBkdW1wVGV4dEVuY29kaW5nTmFt
ZU1hcCgpCiAgICAgVGV4dEVuY29kaW5nTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSB0ZXh0
RW5jb2RpbmdOYW1lTWFwLT5iZWdpbigpOwogICAgIFRleHRFbmNvZGluZ05hbWVNYXA6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IHRleHRFbmNvZGluZ05hbWVNYXAtPmVuZCgpOwogICAgIGZvciAoOyBp
dCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiJyVzJyA9PiAnJXMnXG4i
LCBpdC0+Zmlyc3QsIGl0LT5zZWNvbmQpOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiclcycg
PT4gJyVzJ1xuIiwgaXQtPmtleSwgaXQtPnZhbHVlKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3RyYW5zY29kZXIvRm9udFRyYW5zY29kZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC90cmFuc2NvZGVyL0ZvbnRUcmFuc2Nv
ZGVyLmNwcAppbmRleCA0ZTA3ZjUwZmJkYjBjNTdjM2VlY2E2ZjhiZTcxZjc1MDVkYjUzYmMwLi40
ODQyMjhjYWE4ZTc2MDcxYjM3YTlkMjBhOTkyZDUwYTFkNDFmNDBjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3RyYW5zY29kZXIvRm9udFRyYW5zY29kZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvdHJhbnNjb2Rlci9Gb250VHJhbnNjb2Rl
ci5jcHAKQEAgLTY2LDcgKzY2LDcgQEAgRm9udFRyYW5zY29kZXI6OkNvbnZlcnRlclR5cGUgRm9u
dFRyYW5zY29kZXI6OmNvbnZlcnRlclR5cGUoY29uc3QgRm9udERlc2NyaXB0aW8KICAgICBpZiAo
IWZvbnRGYW1pbHkuaXNOdWxsKCkpIHsKICAgICAgICAgSGFzaE1hcDxBdG9taWNTdHJpbmcsIENv
bnZlcnRlclR5cGU+Ojpjb25zdF9pdGVyYXRvciBmb3VuZCA9IG1fY29udmVydGVyVHlwZXMuZmlu
ZChmb250RmFtaWx5KTsKICAgICAgICAgaWYgKGZvdW5kICE9IG1fY29udmVydGVyVHlwZXMuZW5k
KCkpCi0gICAgICAgICAgICByZXR1cm4gZm91bmQtPnNlY29uZDsKKyAgICAgICAgICAgIHJldHVy
biBmb3VuZC0+dmFsdWU7CiAgICAgfQogCiAgICAgLy8gSUUncyBkZWZhdWx0IGZvbnRzIGZvciBK
YXBhbmVzZSBlbmNvZGluZ3MgY2hhbmdlIGJhY2tzbGFzaGVzIGludG8geWVuIHNpZ25zLgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC93aW5jZS9UZXh0Q29kZWNXaW5D
RS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3dpbmNlL1RleHRDb2RlY1dpbkNF
LmNwcAppbmRleCAwYzRlYzUwMTIxNDlhZDAxY2M1YzE4YjI0MTQzZGEwY2UyYjhmNGMzLi5mMDVk
ZTMyNDI4Yzg1MGZkZTZjMGU0MzA5ZTZiZmVmNTljMTUyN2RmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3dpbmNlL1RleHRDb2RlY1dpbkNFLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3dpbmNlL1RleHRDb2RlY1dpbkNFLmNwcApAQCAtMTAx
LDE3ICsxMDEsMTcgQEAgTGFuZ3VhZ2VNYW5hZ2VyOjpMYW5ndWFnZU1hbmFnZXIoKQogICAgICAg
ICAgICAgICAgIGkgPSBjb2RlUGFnZUNoYXJzZXRzKCkuc2V0KGNwSW5mby51aUNvZGVQYWdlLCBu
YW1lKS5pdGVyYXRvcjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChpICE9IGNvZGVQ
YWdlQ2hhcnNldHMoKS5lbmQoKSkgewotICAgICAgICAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBD
aGFyc2V0SW5mbz46Oml0ZXJhdG9yIGogPSBrbm93bkNoYXJzZXRzKCkuZmluZChTdHJpbmcoaS0+
c2Vjb25kLmRhdGEoKSwgaS0+c2Vjb25kLmxlbmd0aCgpKSk7CisgICAgICAgICAgICAgICAgSGFz
aE1hcDxTdHJpbmcsIENoYXJzZXRJbmZvPjo6aXRlcmF0b3IgaiA9IGtub3duQ2hhcnNldHMoKS5m
aW5kKFN0cmluZyhpLT52YWx1ZS5kYXRhKCksIGktPnZhbHVlLmxlbmd0aCgpKSk7CiAgICAgICAg
ICAgICAgICAgQVNTRVJUKGogIT0ga25vd25DaGFyc2V0cygpLmVuZCgpKTsKLSAgICAgICAgICAg
ICAgICBDaGFyc2V0SW5mbyYgaW5mbyA9IGotPnNlY29uZDsKLSAgICAgICAgICAgICAgICBpbmZv
Lm1fbmFtZSA9IGktPnNlY29uZC5kYXRhKCk7CisgICAgICAgICAgICAgICAgQ2hhcnNldEluZm8m
IGluZm8gPSBqLT52YWx1ZTsKKyAgICAgICAgICAgICAgICBpbmZvLm1fbmFtZSA9IGktPnZhbHVl
LmRhdGEoKTsKICAgICAgICAgICAgICAgICBpbmZvLm1fZnJpZW5kbHlOYW1lID0gY3BJbmZvLndz
ekRlc2NyaXB0aW9uOwogICAgICAgICAgICAgICAgIGluZm8ubV9hbGlhc2VzLmFwcGVuZChuYW1l
KTsKICAgICAgICAgICAgICAgICBpbmZvLm1fYWxpYXNlcy5hcHBlbmQoU3RyaW5nKGNwSW5mby53
c3pIZWFkZXJDaGFyc2V0KS5sYXRpbjEoKSk7CiAgICAgICAgICAgICAgICAgaW5mby5tX2FsaWFz
ZXMuYXBwZW5kKFN0cmluZyhjcEluZm8ud3N6Qm9keUNoYXJzZXQpLmxhdGluMSgpKTsKICAgICAg
ICAgICAgICAgICBTdHJpbmcgY3BOYW1lID0gImNwIiArIFN0cmluZzo6bnVtYmVyKGNwSW5mby51
aUNvZGVQYWdlKTsKICAgICAgICAgICAgICAgICBpbmZvLm1fYWxpYXNlcy5hcHBlbmQoY3BOYW1l
LmxhdGluMSgpKTsKLSAgICAgICAgICAgICAgICBzdXBwb3J0ZWRDaGFyc2V0cygpLmFkZChpLT5z
ZWNvbmQuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICBzdXBwb3J0ZWRDaGFyc2V0cygpLmFkZChp
LT52YWx1ZS5kYXRhKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGVudW1J
bnRlcmZhY2UtPlJlbGVhc2UoKTsKQEAgLTEyNCw3ICsxMjQsNyBAQCBzdGF0aWMgVUlOVCBnZXRD
b2RlUGFnZShjb25zdCBjaGFyKiBuYW1lKQogICAgIC8vIHNheWluZyAiPT0iIGlzIG5vdCBmb3Vu
ZCBmb3IgY29uc3RfaXRlcmF0b3IgYW5kIGl0ZXJhdG9yCiAgICAgY29uc3QgSGFzaE1hcDxTdHJp
bmcsIENoYXJzZXRJbmZvPiYgY2hhcnNldHMgPSBrbm93bkNoYXJzZXRzKCk7CiAgICAgSGFzaE1h
cDxTdHJpbmcsIENoYXJzZXRJbmZvPjo6Y29uc3RfaXRlcmF0b3IgaSA9IGNoYXJzZXRzLmZpbmQo
bmFtZSk7Ci0gICAgcmV0dXJuIGkgPT0gY2hhcnNldHMuZW5kKCkgPyBDUF9BQ1AgOiBpLT5zZWNv
bmQubV9jb2RlUGFnZTsKKyAgICByZXR1cm4gaSA9PSBjaGFyc2V0cy5lbmQoKSA/IENQX0FDUCA6
IGktPnZhbHVlLm1fY29kZVBhZ2U7CiB9CiAKIHN0YXRpYyBQYXNzT3duUHRyPFRleHRDb2RlYz4g
bmV3VGV4dENvZGVjV2luQ0UoY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZywgY29uc3Qgdm9p
ZCopCkBAIC0xNDcsOSArMTQ3LDkgQEAgdm9pZCBUZXh0Q29kZWNXaW5DRTo6cmVnaXN0ZXJFeHRl
bmRlZEVuY29kaW5nTmFtZXMoRW5jb2RpbmdOYW1lUmVnaXN0cmFyIHJlZ2lzdHIKICAgICBmb3Ig
KENoYXJzZXRTZXQ6Oml0ZXJhdG9yIGkgPSBzdXBwb3J0ZWRDaGFyc2V0cygpLmJlZ2luKCk7IGkg
IT0gc3VwcG9ydGVkQ2hhcnNldHMoKS5lbmQoKTsgKytpKSB7CiAgICAgICAgIEhhc2hNYXA8U3Ry
aW5nLCBDaGFyc2V0SW5mbz46Oml0ZXJhdG9yIGogPSBrbm93bkNoYXJzZXRzKCkuZmluZCgqaSk7
CiAgICAgICAgIGlmIChqICE9IGtub3duQ2hhcnNldHMoKS5lbmQoKSkgewotICAgICAgICAgICAg
cmVnaXN0cmFyKGotPnNlY29uZC5tX25hbWUuZGF0YSgpLCBqLT5zZWNvbmQubV9uYW1lLmRhdGEo
KSk7Ci0gICAgICAgICAgICBmb3IgKFZlY3RvcjxDU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgYWxp
YXMgPSBqLT5zZWNvbmQubV9hbGlhc2VzLmJlZ2luKCk7IGFsaWFzICE9IGotPnNlY29uZC5tX2Fs
aWFzZXMuZW5kKCk7ICsrYWxpYXMpCi0gICAgICAgICAgICAgICAgcmVnaXN0cmFyKGFsaWFzLT5k
YXRhKCksIGotPnNlY29uZC5tX25hbWUuZGF0YSgpKTsKKyAgICAgICAgICAgIHJlZ2lzdHJhcihq
LT52YWx1ZS5tX25hbWUuZGF0YSgpLCBqLT52YWx1ZS5tX25hbWUuZGF0YSgpKTsKKyAgICAgICAg
ICAgIGZvciAoVmVjdG9yPENTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBhbGlhcyA9IGotPnZhbHVl
Lm1fYWxpYXNlcy5iZWdpbigpOyBhbGlhcyAhPSBqLT52YWx1ZS5tX2FsaWFzZXMuZW5kKCk7ICsr
YWxpYXMpCisgICAgICAgICAgICAgICAgcmVnaXN0cmFyKGFsaWFzLT5kYXRhKCksIGotPnZhbHVl
Lm1fbmFtZS5kYXRhKCkpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMTYwLDcgKzE2MCw3IEBA
IHZvaWQgVGV4dENvZGVjV2luQ0U6OnJlZ2lzdGVyRXh0ZW5kZWRDb2RlY3MoVGV4dENvZGVjUmVn
aXN0cmFyIHJlZ2lzdHJhcikKICAgICBmb3IgKENoYXJzZXRTZXQ6Oml0ZXJhdG9yIGkgPSBzdXBw
b3J0ZWRDaGFyc2V0cygpLmJlZ2luKCk7IGkgIT0gc3VwcG9ydGVkQ2hhcnNldHMoKS5lbmQoKTsg
KytpKSB7CiAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBDaGFyc2V0SW5mbz46Oml0ZXJhdG9yIGog
PSBrbm93bkNoYXJzZXRzKCkuZmluZCgqaSk7CiAgICAgICAgIGlmIChqICE9IGtub3duQ2hhcnNl
dHMoKS5lbmQoKSkKLSAgICAgICAgICAgIHJlZ2lzdHJhcihqLT5zZWNvbmQubV9uYW1lLmRhdGEo
KSwgbmV3VGV4dENvZGVjV2luQ0UsIDApOworICAgICAgICAgICAgcmVnaXN0cmFyKGotPnZhbHVl
Lm1fbmFtZS5kYXRhKCksIG5ld1RleHRDb2RlY1dpbkNFLCAwKTsKICAgICB9CiB9CiAKQEAgLTI5
OSw3ICsyOTksNyBAQCB2b2lkIFRleHRDb2RlY1dpbkNFOjplbnVtZXJhdGVTdXBwb3J0ZWRFbmNv
ZGluZ3MoRW5jb2RpbmdSZWNlaXZlciYgcmVjZWl2ZXIpCiAgICAgbGFuZ3VhZ2VNYW5hZ2VyKCk7
CiAgICAgZm9yIChDaGFyc2V0U2V0OjppdGVyYXRvciBpID0gc3VwcG9ydGVkQ2hhcnNldHMoKS5i
ZWdpbigpOyBpICE9IHN1cHBvcnRlZENoYXJzZXRzKCkuZW5kKCk7ICsraSkgewogICAgICAgICBI
YXNoTWFwPFN0cmluZywgQ2hhcnNldEluZm8+OjppdGVyYXRvciBqID0ga25vd25DaGFyc2V0cygp
LmZpbmQoKmkpOwotICAgICAgICBpZiAoaiAhPSBrbm93bkNoYXJzZXRzKCkuZW5kKCkgJiYgIXJl
Y2VpdmVyLnJlY2VpdmUoai0+c2Vjb25kLm1fbmFtZS5kYXRhKCksIGotPnNlY29uZC5tX2ZyaWVu
ZGx5TmFtZS5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLCBqLT5zZWNvbmQubV9jb2Rl
UGFnZSkpCisgICAgICAgIGlmIChqICE9IGtub3duQ2hhcnNldHMoKS5lbmQoKSAmJiAhcmVjZWl2
ZXIucmVjZWl2ZShqLT52YWx1ZS5tX25hbWUuZGF0YSgpLCBqLT52YWx1ZS5tX2ZyaWVuZGx5TmFt
ZS5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLCBqLT52YWx1ZS5tX2NvZGVQYWdlKSkK
ICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRVdGlsaXRpZXNXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vd2luL0NsaXBib2FyZFV0aWxpdGllc1dpbi5jcHAKaW5kZXggZDYxYzAxNDMyNGFk
NjZlYzcxYmJhY2M0ODJkMGJiNzc2NjFjMjIxZi4uMjUyNzdiNzMxMDgyOTY4MzhiODkyNjk2OWU3
ZTllYTA2M2Q0ZmMzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0Ns
aXBib2FyZFV0aWxpdGllc1dpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2lu
L0NsaXBib2FyZFV0aWxpdGllc1dpbi5jcHAKQEAgLTc1LDcgKzc1LDcgQEAgc3RhdGljIGJvb2wg
Z2V0RGF0YU1hcEl0ZW0oY29uc3QgRHJhZ0RhdGFNYXAqIGRhdGFPYmplY3QsIEZPUk1BVEVUQyog
Zm9ybWF0LCBTdHIKICAgICBEcmFnRGF0YU1hcDo6Y29uc3RfaXRlcmF0b3IgZm91bmQgPSBkYXRh
T2JqZWN0LT5maW5kKGZvcm1hdC0+Y2ZGb3JtYXQpOwogICAgIGlmIChmb3VuZCA9PSBkYXRhT2Jq
ZWN0LT5lbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGl0ZW0gPSBmb3VuZC0+c2Vj
b25kWzBdOworICAgIGl0ZW0gPSBmb3VuZC0+dmFsdWVbMF07CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKQEAgLTgxOSw3ICs4MTksNyBAQCB2b2lkIGdldENsaXBib2FyZERhdGEoSURhdGFPYmplY3Qq
IGRhdGFPYmplY3QsIEZPUk1BVEVUQyogZm9ybWF0LCBWZWN0b3I8U3RyaW5nPgogICAgIENsaXBi
b2FyZEZvcm1hdE1hcDo6Y29uc3RfaXRlcmF0b3IgZm91bmQgPSBmb3JtYXRNYXAuZmluZChmb3Jt
YXQtPmNmRm9ybWF0KTsKICAgICBpZiAoZm91bmQgPT0gZm9ybWF0TWFwLmVuZCgpKQogICAgICAg
ICByZXR1cm47Ci0gICAgZm91bmQtPnNlY29uZC0+Z2V0U3RyaW5nKGRhdGFPYmplY3QsIGZvdW5k
LT5zZWNvbmQtPmZvcm1hdCwgZGF0YVN0cmluZ3MpOworICAgIGZvdW5kLT52YWx1ZS0+Z2V0U3Ry
aW5nKGRhdGFPYmplY3QsIGZvdW5kLT52YWx1ZS0+Zm9ybWF0LCBkYXRhU3RyaW5ncyk7CiB9CiAK
IHZvaWQgc2V0Q2xpcGJvYXJkRGF0YShJRGF0YU9iamVjdCogZGF0YU9iamVjdCwgVUlOVCBmb3Jt
YXQsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBkYXRhU3RyaW5ncykKQEAgLTgyOCw3ICs4MjgsNyBA
QCB2b2lkIHNldENsaXBib2FyZERhdGEoSURhdGFPYmplY3QqIGRhdGFPYmplY3QsIFVJTlQgZm9y
bWF0LCBjb25zdCBWZWN0b3I8U3RyaW5nPgogICAgIENsaXBib2FyZEZvcm1hdE1hcDo6Y29uc3Rf
aXRlcmF0b3IgZm91bmQgPSBmb3JtYXRNYXAuZmluZChmb3JtYXQpOwogICAgIGlmIChmb3VuZCA9
PSBmb3JtYXRNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBmb3VuZC0+c2Vjb25kLT5z
ZXRTdHJpbmcoZGF0YU9iamVjdCwgZm91bmQtPnNlY29uZC0+Zm9ybWF0LCBkYXRhU3RyaW5ncyk7
CisgICAgZm91bmQtPnZhbHVlLT5zZXRTdHJpbmcoZGF0YU9iamVjdCwgZm91bmQtPnZhbHVlLT5m
b3JtYXQsIGRhdGFTdHJpbmdzKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFdpbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xpcGJvYXJkV2luLmNwcAppbmRleCAxMmNiOGJmMDFl
MzBkNWMxZDZlMjM3NmFmZDk4NDgzOGE3MzEyZWNhLi44MGU5Zjg0ZTcxNzNiMjVmZTViNzMyYWQ3
YzJhOTljMmE2Zjc0MzFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4v
Q2xpcGJvYXJkV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xpcGJv
YXJkV2luLmNwcApAQCAtNTI1LDcgKzUyNSw3IEBAIEhhc2hTZXQ8U3RyaW5nPiBDbGlwYm9hcmRX
aW46OnR5cGVzKCkgY29uc3QKICAgICB9IGVsc2UgewogICAgICAgICBmb3IgKERyYWdEYXRhTWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fZHJhZ0RhdGFNYXAuYmVnaW4oKTsgaXQgIT0gbV9kcmFn
RGF0YU1hcC5lbmQoKTsgKytpdCkgewogICAgICAgICAgICAgRk9STUFURVRDIGRhdGE7Ci0gICAg
ICAgICAgICBkYXRhLmNmRm9ybWF0ID0gKCppdCkuZmlyc3Q7CisgICAgICAgICAgICBkYXRhLmNm
Rm9ybWF0ID0gKCppdCkua2V5OwogICAgICAgICAgICAgYWRkTWltZVR5cGVzRm9yRm9ybWF0KHJl
c3VsdHMsIGRhdGEpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vd2luL0ZpbGVTeXN0ZW1XaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vd2luL0ZpbGVTeXN0ZW1XaW4uY3BwCmluZGV4IDRjZTUxODc3MTIzNTNlOTBjMGQxNTZmODU0
MTlmY2IwNWRiMzdmYWMuLmIxMDQ5MjJlMmYzZjYwMzgwNDRlODFhZTI2ZTQxYThhNWVmODNiN2Eg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9GaWxlU3lzdGVtV2luLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5jcHAKQEAg
LTIwOSw3ICsyMDksNyBAQCBzdGF0aWMgU3RyaW5nIGNhY2hlZFN0b3JhZ2VEaXJlY3RvcnkoRFdP
UkQgcGF0aElkZW50aWZpZXIpCiAKICAgICBIYXNoTWFwPERXT1JELCBTdHJpbmc+OjppdGVyYXRv
ciBpdCA9IGRpcmVjdG9yaWVzLmZpbmQocGF0aElkZW50aWZpZXIpOwogICAgIGlmIChpdCAhPSBk
aXJlY3Rvcmllcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgIHJl
dHVybiBpdC0+dmFsdWU7CiAKICAgICBTdHJpbmcgZGlyZWN0b3J5ID0gc3RvcmFnZURpcmVjdG9y
eShwYXRoSWRlbnRpZmllcik7CiAgICAgZGlyZWN0b3JpZXMuYWRkKHBhdGhJZGVudGlmaWVyLCBk
aXJlY3RvcnkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1J1bkxv
b3BXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1J1bkxvb3BXaW4uY3BwCmlu
ZGV4IDE2NjNiNjYxMzNhYmMyY2IzZmQwMDU3ZDE5NjcxMjM3ZDBlNzk5ZGEuLjE3ZDY4NDVlOWZm
ZGMzOTI4YzA2N2M3YzE1ODgzYWFiOTBkMjlhNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3dpbi9SdW5Mb29wV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS93aW4vUnVuTG9vcFdpbi5jcHAKQEAgLTEyNiw3ICsxMjYsNyBAQCB2b2lkIFJ1bkxvb3A6OlRp
bWVyQmFzZTo6dGltZXJGaXJlZChSdW5Mb29wKiBydW5Mb29wLCB1aW50NjRfdCBJRCkKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIFRpbWVyQmFzZSogdGltZXIgPSBpdC0+c2Vjb25kOwor
ICAgIFRpbWVyQmFzZSogdGltZXIgPSBpdC0+dmFsdWU7CiAKICAgICBpZiAoIXRpbWVyLT5tX2lz
UmVwZWF0aW5nKSB7CiAgICAgICAgIHJ1bkxvb3AtPm1fYWN0aXZlVGltZXJzLnJlbW92ZShpdCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vV0NEYXRhT2JqZWN0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9XQ0RhdGFPYmplY3QuY3BwCmluZGV4IDBj
MDNjZTAwZjIyMWFlMGFjODFiOGVlNzJjZmUwZDA1NGEwNTY2NTQuLmRmYmQwMDVmYzQzNmY4ZDcy
MTZhMjE3NDY2OTliN2RmODFiNTgwNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3dpbi9XQ0RhdGFPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dp
bi9XQ0RhdGFPYmplY3QuY3BwCkBAIC0xNjksNyArMTY5LDcgQEAgSFJFU1VMVCBXQ0RhdGFPYmpl
Y3Q6OmNyZWF0ZUluc3RhbmNlKFdDRGF0YU9iamVjdCoqIHJlc3VsdCwgY29uc3QgRHJhZ0RhdGFN
YXAmIGQKICAgICAqcmVzdWx0ID0gbmV3IFdDRGF0YU9iamVjdDsKIAogICAgIGZvciAoRHJhZ0Rh
dGFNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZGF0YU1hcC5iZWdpbigpOyBpdCAhPSBkYXRhTWFw
LmVuZCgpOyArK2l0KQotICAgICAgICBzZXRDbGlwYm9hcmREYXRhKCpyZXN1bHQsIGl0LT5maXJz
dCwgaXQtPnNlY29uZCk7CisgICAgICAgIHNldENsaXBib2FyZERhdGEoKnJlc3VsdCwgaXQtPmtl
eSwgaXQtPnZhbHVlKTsKICAgICByZXR1cm4gU19PSzsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vd2luY2UvTUlNRVR5cGVSZWdpc3RyeVdpbkNFLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3dpbmNlL01JTUVUeXBlUmVnaXN0cnlXaW5DRS5jcHAKaW5kZXgg
OGEwZDNkMmI2MTYyYjQ2ZGJiN2Q2MmYyMmNhMDMyNmRjN2ZjZWRjNS4uZTk2ZmIyYmE3ZDk5OWNl
MmQzYWNiMGQwZjljNGMyNDg3NDdmZTVlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vd2luY2UvTUlNRVR5cGVSZWdpc3RyeVdpbkNFLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS93aW5jZS9NSU1FVHlwZVJlZ2lzdHJ5V2luQ0UuY3BwCkBAIC0xMDEsOCArMTAx
LDggQEAgU3RyaW5nIE1JTUVUeXBlUmVnaXN0cnk6OmdldFByZWZlcnJlZEV4dGVuc2lvbkZvck1J
TUVUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSkKICAgICBpbml0TUlNRVR5cGVFbnRlbnNpb25NYXAo
KTsKIAogICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46Oml0ZXJhdG9yIGkgPSBtaW1l
dHlwZU1hcC5iZWdpbigpOyBpICE9IG1pbWV0eXBlTWFwLmVuZCgpOyArK2kpIHsKLSAgICAgICAg
aWYgKGVxdWFsSWdub3JpbmdDYXNlKGktPnNlY29uZCwgdHlwZSkpCi0gICAgICAgICAgICByZXR1
cm4gaS0+Zmlyc3Q7CisgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShpLT52YWx1ZSwgdHlw
ZSkpCisgICAgICAgICAgICByZXR1cm4gaS0+a2V5OwogICAgIH0KIAogICAgIHJldHVybiBTdHJp
bmcoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L0NvbnRleHRNZW51
V3guY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvQ29udGV4dE1lbnVXeC5jcHAKaW5k
ZXggZjcyMjc2OWZhYTAzYWRjZTI0ZGEzYzBlYTczNTkzM2E4NjI0NzE2NC4uODAxOTJmMzhjZDFk
MzFhMDIwZDgxMjUxZDI0NDY1ZDMyMGRjZjcyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vd3gvQ29udGV4dE1lbnVXeC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vd3gvQ29udGV4dE1lbnVXeC5jcHAKQEAgLTY2LDggKzY2LDggQEAgdm9pZCBDb250ZXh0TWVu
dTo6YXBwZW5kSXRlbShDb250ZXh0TWVudUl0ZW0mIGl0ZW0pCiAKICAgICBJdGVtQWN0aW9uTWFw
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBzX2l0ZW1BY3Rpb25zLmVuZCgpOwogICAgIGZvciAoSXRl
bUFjdGlvbk1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBzX2l0ZW1BY3Rpb25zLmJlZ2luKCk7ICBp
dCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQgPT0gaXRlbURlc2NyaXB0
aW9uLmFjdGlvbikKLSAgICAgICAgICAgIGlkV3ggPSBpdC0+Zmlyc3Q7CisgICAgICAgIGlmIChp
dC0+dmFsdWUgPT0gaXRlbURlc2NyaXB0aW9uLmFjdGlvbikKKyAgICAgICAgICAgIGlkV3ggPSBp
dC0+a2V5OwogICAgIH0KIAogICAgIGlmIChpdGVtRGVzY3JpcHRpb24uc3ViTWVudSkgewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmNwcAppbmRleCA5MzAwNzgyMTdmZjg1
MDJmNmRjMGIxMTA2Yjc3ZDg1NGIzZDU5YWQ0Li43YmE3Mjg0YTYwMDhhYjFkYzMwOWY3YTI1NDMx
YzVjZTE4YTU1OTY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRh
dGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmNw
cApAQCAtMTYyLDcgKzE2Miw3IEBAIGJvb2wgUGx1Z2luRGF0YWJhc2U6OnJlZnJlc2goKQogICAg
ICAgICBNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIG1hcF9pdCA9ICgqaXQp
LT5taW1lVG9EZXNjcmlwdGlvbnMoKS5iZWdpbigpOwogICAgICAgICBNSU1FVG9EZXNjcmlwdGlv
bnNNYXA6OmNvbnN0X2l0ZXJhdG9yIG1hcF9lbmQgPSAoKml0KS0+bWltZVRvRGVzY3JpcHRpb25z
KCkuZW5kKCk7CiAgICAgICAgIGZvciAoOyBtYXBfaXQgIT0gbWFwX2VuZDsgKyttYXBfaXQpCi0g
ICAgICAgICAgICBtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuYWRkKG1hcF9pdC0+Zmlyc3QpOworICAg
ICAgICAgICAgbV9yZWdpc3RlcmVkTUlNRVR5cGVzLmFkZChtYXBfaXQtPmtleSk7CiAgICAgfQog
CiAgICAgcmV0dXJuIHRydWU7CkBAIC0yNDMsOSArMjQzLDkgQEAgU3RyaW5nIFBsdWdpbkRhdGFi
YXNlOjpNSU1FVHlwZUZvckV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGV4dGVuc2lvbikgY29uc3QK
ICAgICAgICAgTUlNRVRvRXh0ZW5zaW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWltZV9lbmQgPSAo
Kml0KS0+bWltZVRvRXh0ZW5zaW9ucygpLmVuZCgpOwogCiAgICAgICAgIGZvciAoTUlNRVRvRXh0
ZW5zaW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWltZV9pdCA9ICgqaXQpLT5taW1lVG9FeHRlbnNp
b25zKCkuYmVnaW4oKTsgbWltZV9pdCAhPSBtaW1lX2VuZDsgKyttaW1lX2l0KSB7Ci0gICAgICAg
ICAgICBtaW1lVHlwZSA9IG1pbWVfaXQtPmZpcnN0OworICAgICAgICAgICAgbWltZVR5cGUgPSBt
aW1lX2l0LT5rZXk7CiAgICAgICAgICAgICBQbHVnaW5QYWNrYWdlKiBwcmVmZXJyZWRQbHVnaW4g
PSBtX3ByZWZlcnJlZFBsdWdpbnMuZ2V0KG1pbWVUeXBlKS5nZXQoKTsKLSAgICAgICAgICAgIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBleHRlbnNpb25zID0gbWltZV9pdC0+c2Vjb25kOworICAgICAg
ICAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGV4dGVuc2lvbnMgPSBtaW1lX2l0LT52YWx1ZTsK
ICAgICAgICAgICAgIGJvb2wgZm91bmRNYXBwaW5nID0gZmFsc2U7CiAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZXh0ZW5zaW9ucy5zaXplKCk7IGkrKykgewogICAgICAgICAg
ICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShleHRlbnNpb25zW2ldLCBleHRlbnNpb24pKSB7
CkBAIC0zMzUsOCArMzM1LDggQEAgdm9pZCBQbHVnaW5EYXRhYmFzZTo6cmVtb3ZlKFBsdWdpblBh
Y2thZ2UqIHBhY2thZ2UpCiAgICAgTUlNRVRvRXh0ZW5zaW9uc01hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBwYWNrYWdlLT5taW1lVG9FeHRlbnNpb25zKCkuYmVnaW4oKTsKICAgICBNSU1FVG9FeHRl
bnNpb25zTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBwYWNrYWdlLT5taW1lVG9FeHRlbnNpb25z
KCkuZW5kKCk7CiAgICAgZm9yICggOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgUGx1Z2lu
UGFja2FnZUJ5TmFtZU1hcDo6aXRlcmF0b3IgcGFja2FnZUluTWFwID0gbV9wcmVmZXJyZWRQbHVn
aW5zLmZpbmQoaXQtPmZpcnN0KTsKLSAgICAgICAgaWYgKHBhY2thZ2VJbk1hcCAhPSBtX3ByZWZl
cnJlZFBsdWdpbnMuZW5kKCkgJiYgcGFja2FnZUluTWFwLT5zZWNvbmQgPT0gcGFja2FnZSkKKyAg
ICAgICAgUGx1Z2luUGFja2FnZUJ5TmFtZU1hcDo6aXRlcmF0b3IgcGFja2FnZUluTWFwID0gbV9w
cmVmZXJyZWRQbHVnaW5zLmZpbmQoaXQtPmtleSk7CisgICAgICAgIGlmIChwYWNrYWdlSW5NYXAg
IT0gbV9wcmVmZXJyZWRQbHVnaW5zLmVuZCgpICYmIHBhY2thZ2VJbk1hcC0+dmFsdWUgPT0gcGFj
a2FnZSkKICAgICAgICAgICAgIG1fcHJlZmVycmVkUGx1Z2lucy5yZW1vdmUocGFja2FnZUluTWFw
KTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luTWFp
blRocmVhZFNjaGVkdWxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbk1haW5U
aHJlYWRTY2hlZHVsZXIuY3BwCmluZGV4IDc1Mjg2NzZiMTJhYThiZGE4ZjMzYjMyZWY0MGNjODc2
NTc2NmQzMWEuLjM5YWU3OTRlMmZiMDk3MjE5YTUyMjNlYmZiZWVkZjY5YjZlMjg2MmMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luTWFpblRocmVhZFNjaGVkdWxlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVy
LmNwcApAQCAtNDksNyArNDksNyBAQCB2b2lkIFBsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXI6OnNj
aGVkdWxlQ2FsbChOUFAgbnBwLCBNYWluVGhyZWFkRnVuY3Rpb24gZnVuY3RpbwogICAgIGlmIChp
dCA9PSBtX2NhbGxRdWV1ZU1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaXQtPnNl
Y29uZC5hcHBlbmQoQ2FsbChmdW5jdGlvbiwgdXNlckRhdGEpKTsKKyAgICBpdC0+dmFsdWUuYXBw
ZW5kKENhbGwoZnVuY3Rpb24sIHVzZXJEYXRhKSk7CiAKICAgICBpZiAoIW1fY2FsbFBlbmRpbmcp
IHsKICAgICAgICAgY2FsbE9uTWFpblRocmVhZChtYWluVGhyZWFkQ2FsbGJhY2ssIHRoaXMpOwpA
QCAtOTcsNyArOTcsNyBAQCB2b2lkIFBsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXI6OmRpc3BhdGNo
Q2FsbHMoKQogICAgICAgICAvLyBFbXB0eSBhbGwgdGhlIHF1ZXVlcyBpbiB0aGUgb3JpZ2luYWwg
bWFwCiAgICAgICAgIENhbGxRdWV1ZU1hcDo6aXRlcmF0b3IgZW5kID0gbV9jYWxsUXVldWVNYXAu
ZW5kKCk7CiAgICAgICAgIGZvciAoQ2FsbFF1ZXVlTWFwOjppdGVyYXRvciBpdCA9IG1fY2FsbFF1
ZXVlTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIGl0LT5zZWNvbmQu
Y2xlYXIoKTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS5jbGVhcigpOwogICAgIH0KIAogICAgIG1f
Y2FsbFBlbmRpbmcgPSBmYWxzZTsKQEAgLTEwNSw3ICsxMDUsNyBAQCB2b2lkIFBsdWdpbk1haW5U
aHJlYWRTY2hlZHVsZXI6OmRpc3BhdGNoQ2FsbHMoKQogCiAgICAgQ2FsbFF1ZXVlTWFwOjppdGVy
YXRvciBlbmQgPSBjb3B5LmVuZCgpOwogICAgIGZvciAoQ2FsbFF1ZXVlTWFwOjppdGVyYXRvciBp
dCA9IGNvcHkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBkaXNwYXRjaENhbGxz
Rm9yUGx1Z2luKGl0LT5maXJzdCwgaXQtPnNlY29uZCk7CisgICAgICAgIGRpc3BhdGNoQ2FsbHNG
b3JQbHVnaW4oaXQtPmtleSwgaXQtPnZhbHVlKTsKIH0KIAogdm9pZCBQbHVnaW5NYWluVGhyZWFk
U2NoZWR1bGVyOjptYWluVGhyZWFkQ2FsbGJhY2sodm9pZCogY29udGV4dCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luU3RyZWFtLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsdWdpbnMvUGx1Z2luU3RyZWFtLmNwcAppbmRleCAwMDIzODBmNWY5NTNmOWJlZTJjNTY1ZTlj
YTVjMTMyYWQ0YzBhZjRhLi5mZGI3ODYwMzViMGQxNjU0ODIxZmNiNDYwYWQ0ZTJkM2E3MWE1YTM1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblN0cmVhbS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5TdHJlYW0uY3BwCkBAIC0xNDcsOSArMTQ3
LDkgQEAgdm9pZCBQbHVnaW5TdHJlYW06OnN0YXJ0U3RyZWFtKCkKIAogICAgICAgICBIVFRQSGVh
ZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3Jlc291cmNlUmVzcG9uc2UuaHR0cEhlYWRl
ckZpZWxkcygpLmVuZCgpOwogICAgICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV9yZXNvdXJjZVJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMoKS5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5m
aXJzdCk7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+a2V5KTsKICAgICAg
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHNlcGFyYXRvcik7Ci0gICAgICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZChpdC0+c2Vjb25kKTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKGl0LT52YWx1ZSk7CiAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4n
KTsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2JsYWNr
YmVycnkvUGx1Z2luRGF0YUJsYWNrQmVycnkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9i
bGFja2JlcnJ5L1BsdWdpbkRhdGFCbGFja0JlcnJ5LmNwcAppbmRleCBkOTIwZDFmYmQ1YTExMjQ2
MDNhOGNkOThmYTEzNDM1NmU3MzA2YjU5Li40NzQ2NjE2ZGUzMzVmYTgzY2VjOTZkOTMwZTIwZDhj
MjhlOTRjM2I3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2JsYWNrYmVycnkv
UGx1Z2luRGF0YUJsYWNrQmVycnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvYmxh
Y2tiZXJyeS9QbHVnaW5EYXRhQmxhY2tCZXJyeS5jcHAKQEAgLTQxLDggKzQxLDggQEAgdm9pZCBQ
bHVnaW5EYXRhOjppbml0UGx1Z2lucyhjb25zdCBQYWdlKikKICAgICAgICAgTUlNRVRvRGVzY3Jp
cHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuZW5kKCk7
CiAgICAgICAgIGZvciAoTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9
IG1pbWVUb0Rlc2NyaXB0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAg
ICAgIE1pbWVDbGFzc0luZm8gbWltZTsKLSAgICAgICAgICAgIG1pbWUudHlwZSA9IGl0LT5maXJz
dDsKLSAgICAgICAgICAgIG1pbWUuZGVzYyA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICBtaW1l
LnR5cGUgPSBpdC0+a2V5OworICAgICAgICAgICAgbWltZS5kZXNjID0gaXQtPnZhbHVlOwogICAg
ICAgICAgICAgbWltZS5leHRlbnNpb25zID0gcGFja2FnZS0+bWltZVRvRXh0ZW5zaW9ucygpLmdl
dChtaW1lLnR5cGUpOwogICAgICAgICAgICAgaW5mby5taW1lcy5hcHBlbmQobWltZSk7CiAgICAg
ICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1BsdWdpbkRhdGFF
ZmwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9lZmwvUGx1Z2luRGF0YUVmbC5jcHAKaW5k
ZXggYzIxZDUxYjE5ZDdiMjRiMmMxNTljMmRkYjM3YmY3ZmU1ZGQ4ZDk0Yy4uNDc1ZjlmZTU4MzNi
YWM0NTc2NWQ5M2E1ZmI0NmEyNmI3NjE5M2RmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGx1Z2lucy9lZmwvUGx1Z2luRGF0YUVmbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lu
cy9lZmwvUGx1Z2luRGF0YUVmbC5jcHAKQEAgLTQ3LDggKzQ3LDggQEAgdm9pZCBQbHVnaW5EYXRh
Ojppbml0UGx1Z2lucyhjb25zdCBQYWdlKikKICAgICAgICAgZm9yIChNSU1FVG9EZXNjcmlwdGlv
bnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWltZVRvRGVzY3JpcHRpb25zLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgTWltZUNsYXNzSW5mbyBtaW1lOwogCi0gICAg
ICAgICAgICBtaW1lLnR5cGUgPSBpdC0+Zmlyc3Q7Ci0gICAgICAgICAgICBtaW1lLmRlc2MgPSBp
dC0+c2Vjb25kOworICAgICAgICAgICAgbWltZS50eXBlID0gaXQtPmtleTsKKyAgICAgICAgICAg
IG1pbWUuZGVzYyA9IGl0LT52YWx1ZTsKICAgICAgICAgICAgIG1pbWUuZXh0ZW5zaW9ucyA9IHBh
Y2thZ2UtPm1pbWVUb0V4dGVuc2lvbnMoKS5nZXQobWltZS50eXBlKTsKIAogICAgICAgICAgICAg
aW5mby5taW1lcy5hcHBlbmQobWltZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVn
aW5zL3d4L1BsdWdpbkRhdGFXeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3d4L1BsdWdp
bkRhdGFXeC5jcHAKaW5kZXggMGViODkwZmVmMDVhMTE1ZWFjZTQyNjM3NjgwYTNkNmExMmY1Nzcy
OS4uMjc5NTJjNGFlOGJmYTQ5ZTk4YjExYWU5OTU5ZmM3NTRlNGRiMjNiZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGx1Z2lucy93eC9QbHVnaW5EYXRhV3guY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsdWdpbnMvd3gvUGx1Z2luRGF0YVd4LmNwcApAQCAtNTEsOCArNTEsOCBAQCB2b2lk
IFBsdWdpbkRhdGE6OmluaXRQbHVnaW5zKGNvbnN0IFBhZ2UqKQogICAgICAgICBmb3IgKE1JTUVU
b0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtaW1lVG9EZXNjcmlwdGlvbnMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBNaW1lQ2xhc3NJbmZvIG1p
bWU7CiAKLSAgICAgICAgICAgIG1pbWUudHlwZSA9IGl0LT5maXJzdDsKLSAgICAgICAgICAgIG1p
bWUuZGVzYyA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICBtaW1lLnR5cGUgPSBpdC0+a2V5Owor
ICAgICAgICAgICAgbWltZS5kZXNjID0gaXQtPnZhbHVlOwogICAgICAgICAgICAgbWltZS5leHRl
bnNpb25zID0gcGFja2FnZS0+bWltZVRvRXh0ZW5zaW9ucygpLmdldChtaW1lLnR5cGUpOwogCiAg
ICAgICAgICAgICBpbmZvLm1pbWVzLmFwcGVuZChtaW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9GbG93VGhyZWFkQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvRmxvd1RocmVhZENvbnRyb2xsZXIuY3BwCmluZGV4IGNmMjIwN2ZmZTZkMmEy
Nzg1ZmIwMzMxMTE0YzI5YmU1ODFkNzhlNDYuLmMwN2RhY2Y0MDBiZWNkNWEwNThhYzJiYzk0NjJm
YTAyYzk1ODY5YTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GbG93VGhy
ZWFkQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0Zsb3dUaHJl
YWRDb250cm9sbGVyLmNwcApAQCAtMTE2LDkgKzExNiw5IEBAIHZvaWQgRmxvd1RocmVhZENvbnRy
b2xsZXI6OnVucmVnaXN0ZXJOYW1lZEZsb3dDb250ZW50Tm9kZShOb2RlKiBjb250ZW50Tm9kZSkK
ICAgICBBU1NFUlQoY29udGVudE5vZGUgJiYgY29udGVudE5vZGUtPmlzRWxlbWVudE5vZGUoKSk7
CiAgICAgSGFzaE1hcDxOb2RlKiwgUmVuZGVyTmFtZWRGbG93VGhyZWFkKj46Oml0ZXJhdG9yIGl0
ID0gbV9tYXBOYW1lZEZsb3dDb250ZW50Tm9kZXMuZmluZChjb250ZW50Tm9kZSk7CiAgICAgQVNT
RVJUKGl0ICE9IG1fbWFwTmFtZWRGbG93Q29udGVudE5vZGVzLmVuZCgpKTsKLSAgICBBU1NFUlQo
aXQtPnNlY29uZCk7Ci0gICAgQVNTRVJUKGl0LT5zZWNvbmQtPmhhc0NvbnRlbnROb2RlKGNvbnRl
bnROb2RlKSk7Ci0gICAgaXQtPnNlY29uZC0+dW5yZWdpc3Rlck5hbWVkRmxvd0NvbnRlbnROb2Rl
KGNvbnRlbnROb2RlKTsKKyAgICBBU1NFUlQoaXQtPnZhbHVlKTsKKyAgICBBU1NFUlQoaXQtPnZh
bHVlLT5oYXNDb250ZW50Tm9kZShjb250ZW50Tm9kZSkpOworICAgIGl0LT52YWx1ZS0+dW5yZWdp
c3Rlck5hbWVkRmxvd0NvbnRlbnROb2RlKGNvbnRlbnROb2RlKTsKICAgICBtX21hcE5hbWVkRmxv
d0NvbnRlbnROb2Rlcy5yZW1vdmUoY29udGVudE5vZGUpOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAKaW5kZXggYmVhODdjOGJlZDA2MGViN2JlMGFjYWRi
ZTQ3M2EyZDdhODZhNjUwOC4uMWY5MTdhNDg1ZTQxMTM2ODcwZGZiZDhhMDZlOTg1MWNlYWRlMjdi
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcApAQCAtNDQ5
LDcgKzQ0OSw3IEBAIGJvb2wgSW5saW5lRmxvd0JveDo6cmVxdWlyZXNJZGVvZ3JhcGhpY0Jhc2Vs
aW5lKGNvbnN0IEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvCiAgICAgICAgICAgICBjb25zdCBW
ZWN0b3I8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogdXNlZEZvbnRzID0gMDsKICAgICAgICAgICAg
IGlmIChjdXJyLT5pc0lubGluZVRleHRCb3goKSkgewogICAgICAgICAgICAgICAgIEdseXBoT3Zl
cmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHRleHRCb3hEYXRh
TWFwLmZpbmQodG9JbmxpbmVUZXh0Qm94KGN1cnIpKTsKLSAgICAgICAgICAgICAgICB1c2VkRm9u
dHMgPSBpdCA9PSB0ZXh0Qm94RGF0YU1hcC5lbmQoKSA/IDAgOiAmaXQtPnNlY29uZC5maXJzdDsK
KyAgICAgICAgICAgICAgICB1c2VkRm9udHMgPSBpdCA9PSB0ZXh0Qm94RGF0YU1hcC5lbmQoKSA/
IDAgOiAmaXQtPnZhbHVlLmZpcnN0OwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAo
dXNlZEZvbnRzKSB7CkBAIC04MTIsNyArODEyLDcgQEAgaW5saW5lIHZvaWQgSW5saW5lRmxvd0Jv
eDo6YWRkVGV4dEJveFZpc3VhbE92ZXJmbG93KElubGluZVRleHRCb3gqIHRleHRCb3gsIEdseXAK
ICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSB0ZXh0Qm94LT5yZW5kZXJlcigpLT5zdHlsZShpc0Zp
cnN0TGluZVN0eWxlKCkpOwogICAgIAogICAgIEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRz
TWFwOjppdGVyYXRvciBpdCA9IHRleHRCb3hEYXRhTWFwLmZpbmQodGV4dEJveCk7Ci0gICAgR2x5
cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdyA9IGl0ID09IHRleHRCb3hEYXRhTWFwLmVuZCgpID8g
MCA6ICZpdC0+c2Vjb25kLnNlY29uZDsKKyAgICBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93
ID0gaXQgPT0gdGV4dEJveERhdGFNYXAuZW5kKCkgPyAwIDogJml0LT52YWx1ZS5zZWNvbmQ7CiAg
ICAgYm9vbCBpc0ZsaXBwZWRMaW5lID0gc3R5bGUtPmlzRmxpcHBlZExpbmVzV3JpdGluZ01vZGUo
KTsKIAogICAgIGludCB0b3BHbHlwaEVkZ2UgPSBnbHlwaE92ZXJmbG93ID8gKGlzRmxpcHBlZExp
bmUgPyBnbHlwaE92ZXJmbG93LT5ib3R0b20gOiBnbHlwaE92ZXJmbG93LT50b3ApIDogMDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCmluZGV4IDhiMjU3NjMyOWQxMjli
NGNjMmY1ZGQyZDAyOTQyNWU0YWMxMTg1MDcuLmY0YmQ4NTJlZjNiYjVlZjZkN2FiODgzNWQ3M2Jl
ZTI2ZGNlZjA5ZmMgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
bG9jay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcApA
QCAtNDIwMiw3ICs0MjAyLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6Y2xlYXJGbG9hdHMoQmxvY2tM
YXlvdXRQYXNzIGxheW91dFBhc3MpCiAKICAgICAgICAgUmVuZGVyZXJUb0Zsb2F0SW5mb01hcDo6
aXRlcmF0b3IgZW5kID0gZmxvYXRNYXAuZW5kKCk7CiAgICAgICAgIGZvciAoUmVuZGVyZXJUb0Zs
b2F0SW5mb01hcDo6aXRlcmF0b3IgaXQgPSBmbG9hdE1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKLSAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCA9ICgqaXQp
LnNlY29uZDsKKyAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCA9ICgq
aXQpLnZhbHVlOwogICAgICAgICAgICAgaWYgKCFmbG9hdGluZ09iamVjdC0+aXNEZXNjZW5kYW50
KCkpIHsKICAgICAgICAgICAgICAgICBjaGFuZ2VMb2dpY2FsVG9wID0gMDsKICAgICAgICAgICAg
ICAgICBjaGFuZ2VMb2dpY2FsQm90dG9tID0gbWF4KGNoYW5nZUxvZ2ljYWxCb3R0b20sIGxvZ2lj
YWxCb3R0b21Gb3JGbG9hdChmbG9hdGluZ09iamVjdCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAppbmRleCBlOTBkOTJmYWY4NjEz
YzkzNmIzNDVmZjZkY2I0NTdmMmNmODk3YzFmLi4zYWFlY2VlYzZlZWM1OTk4YTNmMWY2MWY2Y2Fk
NDNmNmFlYjEzN2Q5IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2tMaW5lTGF5b3V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2tMaW5lTGF5b3V0LmNwcApAQCAtNjYzLDE0ICs2NjMsMTQgQEAgc3RhdGljIGlubGluZSB2
b2lkIHNldExvZ2ljYWxXaWR0aEZvclRleHRSdW4oUm9vdElubGluZUJveCogbGluZUJveCwgQmlk
aVJ1biogcnUKICAgICBpZiAoIWZhbGxiYWNrRm9udHMuaXNFbXB0eSgpKSB7CiAgICAgICAgIEFT
U0VSVChydW4tPm1fYm94LT5pc1RleHQoKSk7CiAgICAgICAgIEdseXBoT3ZlcmZsb3dBbmRGYWxs
YmFja0ZvbnRzTWFwOjppdGVyYXRvciBpdCA9IHRleHRCb3hEYXRhTWFwLmFkZCh0b0lubGluZVRl
eHRCb3gocnVuLT5tX2JveCksIG1ha2VfcGFpcihWZWN0b3I8Y29uc3QgU2ltcGxlRm9udERhdGEq
PigpLCBHbHlwaE92ZXJmbG93KCkpKS5pdGVyYXRvcjsKLSAgICAgICAgQVNTRVJUKGl0LT5zZWNv
bmQuZmlyc3QuaXNFbXB0eSgpKTsKLSAgICAgICAgY29weVRvVmVjdG9yKGZhbGxiYWNrRm9udHMs
IGl0LT5zZWNvbmQuZmlyc3QpOworICAgICAgICBBU1NFUlQoaXQtPnZhbHVlLmZpcnN0LmlzRW1w
dHkoKSk7CisgICAgICAgIGNvcHlUb1ZlY3RvcihmYWxsYmFja0ZvbnRzLCBpdC0+dmFsdWUuZmly
c3QpOwogICAgICAgICBydW4tPm1fYm94LT5wYXJlbnQoKS0+Y2xlYXJEZXNjZW5kYW50c0hhdmVT
YW1lTGluZUhlaWdodEFuZEJhc2VsaW5lKCk7CiAgICAgfQogICAgIGlmICgoZ2x5cGhPdmVyZmxv
dy50b3AgfHwgZ2x5cGhPdmVyZmxvdy5ib3R0b20gfHwgZ2x5cGhPdmVyZmxvdy5sZWZ0IHx8IGds
eXBoT3ZlcmZsb3cucmlnaHQpKSB7CiAgICAgICAgIEFTU0VSVChydW4tPm1fYm94LT5pc1RleHQo
KSk7CiAgICAgICAgIEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFwOjppdGVyYXRvciBp
dCA9IHRleHRCb3hEYXRhTWFwLmFkZCh0b0lubGluZVRleHRCb3gocnVuLT5tX2JveCksIG1ha2Vf
cGFpcihWZWN0b3I8Y29uc3QgU2ltcGxlRm9udERhdGEqPigpLCBHbHlwaE92ZXJmbG93KCkpKS5p
dGVyYXRvcjsKLSAgICAgICAgaXQtPnNlY29uZC5zZWNvbmQgPSBnbHlwaE92ZXJmbG93OworICAg
ICAgICBpdC0+dmFsdWUuc2Vjb25kID0gZ2x5cGhPdmVyZmxvdzsKICAgICAgICAgcnVuLT5tX2Jv
eC0+Y2xlYXJLbm93blRvSGF2ZU5vT3ZlcmZsb3coKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCb3guY3BwCmluZGV4IDM3ZWNhMjgwZTJjMDMwMDVhMDU5NmQ4ZTFiY2M5
NjhjYzliZTRjZjIuLmFmMWM5N2RmZTliMTM4ZWM2Y2E2NWE2ZGVjZjBjZjllZGQ0ZmYyNjUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCkBAIC03ODUsNyArNzg1LDcgQEAg
TGF5b3V0U2l6ZSBSZW5kZXJCb3g6OmNhY2hlZFNpemVGb3JPdmVyZmxvd0NsaXAoKSBjb25zdAog
ICAgIGlmIChpdCA9PSBjYWNoZWRTaXplRm9yT3ZlcmZsb3dDbGlwTWFwKCkuZW5kKCkpCiAgICAg
ICAgIHJldHVybiBMYXlvdXRTaXplKCk7CiAKLSAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICBy
ZXR1cm4gaXQtPnZhbHVlOwogfQogCiB2b2lkIFJlbmRlckJveDo6dXBkYXRlQ2FjaGVkU2l6ZUZv
ck92ZXJmbG93Q2xpcCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94TW9kZWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eE1vZGVsT2JqZWN0LmNwcAppbmRleCAyYzNkNzRkNWY1ZTQ2OGY4NjRlMzk2ZWM2NjI5ZThmYTJm
OGQzMTIxLi43NzY1YmU5M2MzMTU0ZGNkM2E0YTFkZTQyODNjYmNlNjA5OWU3MGMwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKQEAg
LTEzNyw3ICsxMzcsNyBAQCB2b2lkIEltYWdlUXVhbGl0eUNvbnRyb2xsZXI6OmhpZ2hRdWFsaXR5
UmVwYWludFRpbWVyRmlyZWQoVGltZXI8SW1hZ2VRdWFsaXR5Q29udAogICAgIGlmIChtX2FuaW1h
dGVkUmVzaXplSXNBY3RpdmUpIHsKICAgICAgICAgbV9hbmltYXRlZFJlc2l6ZUlzQWN0aXZlID0g
ZmFsc2U7CiAgICAgICAgIGZvciAoT2JqZWN0TGF5ZXJTaXplTWFwOjppdGVyYXRvciBpdCA9IG1f
b2JqZWN0TGF5ZXJTaXplTWFwLmJlZ2luKCk7IGl0ICE9IG1fb2JqZWN0TGF5ZXJTaXplTWFwLmVu
ZCgpOyArK2l0KQotICAgICAgICAgICAgaXQtPmZpcnN0LT5yZXBhaW50KCk7CisgICAgICAgICAg
ICBpdC0+a2V5LT5yZXBhaW50KCk7CiAgICAgfQogfQogCkBAIC0xNjIsMTQgKzE2MiwxNCBAQCBi
b29sIEltYWdlUXVhbGl0eUNvbnRyb2xsZXI6OnNob3VsZFBhaW50QXRMb3dRdWFsaXR5KEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgUgogCiAgICAgLy8gTG9vayBvdXJzZWx2ZXMgdXAgaW4gdGhl
IGhhc2h0YWJsZXMuCiAgICAgT2JqZWN0TGF5ZXJTaXplTWFwOjppdGVyYXRvciBpID0gbV9vYmpl
Y3RMYXllclNpemVNYXAuZmluZChvYmplY3QpOwotICAgIExheWVyU2l6ZU1hcCogaW5uZXJNYXAg
PSBpICE9IG1fb2JqZWN0TGF5ZXJTaXplTWFwLmVuZCgpID8gJmktPnNlY29uZCA6IDA7CisgICAg
TGF5ZXJTaXplTWFwKiBpbm5lck1hcCA9IGkgIT0gbV9vYmplY3RMYXllclNpemVNYXAuZW5kKCkg
PyAmaS0+dmFsdWUgOiAwOwogICAgIExheW91dFNpemUgb2xkU2l6ZTsKICAgICBib29sIGlzRmly
c3RSZXNpemUgPSB0cnVlOwogICAgIGlmIChpbm5lck1hcCkgewogICAgICAgICBMYXllclNpemVN
YXA6Oml0ZXJhdG9yIGogPSBpbm5lck1hcC0+ZmluZChsYXllcik7CiAgICAgICAgIGlmIChqICE9
IGlubmVyTWFwLT5lbmQoKSkgewogICAgICAgICAgICAgaXNGaXJzdFJlc2l6ZSA9IGZhbHNlOwot
ICAgICAgICAgICAgb2xkU2l6ZSA9IGotPnNlY29uZDsKKyAgICAgICAgICAgIG9sZFNpemUgPSBq
LT52YWx1ZTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckNvdW50ZXIuY3BwCmluZGV4IDA4MDdlYTlkZDk3ODE2YTNmNjdiY2EwZmM1ODg4YjU4Y2Q3
ZjFkNGUuLmRjNDM4YmUyOGEzYmRjYTViM2VlMGYwMTI3ZWI0NDliZjFhMmJiNzAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb3VudGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ291bnRlci5jcHAKQEAgLTU2MywxMSArNTYzLDEx
IEBAIHZvaWQgUmVuZGVyQ291bnRlcjo6ZGVzdHJveUNvdW50ZXJOb2RlcyhSZW5kZXJPYmplY3Qq
IG93bmVyKQogICAgIENvdW50ZXJNYXBzOjppdGVyYXRvciBtYXBzSXRlcmF0b3IgPSBtYXBzLmZp
bmQob3duZXIpOwogICAgIGlmIChtYXBzSXRlcmF0b3IgPT0gbWFwcy5lbmQoKSkKICAgICAgICAg
cmV0dXJuOwotICAgIENvdW50ZXJNYXAqIG1hcCA9IG1hcHNJdGVyYXRvci0+c2Vjb25kOworICAg
IENvdW50ZXJNYXAqIG1hcCA9IG1hcHNJdGVyYXRvci0+dmFsdWU7CiAgICAgQ291bnRlck1hcDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKICAgICBmb3IgKENvdW50ZXJNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgQXRvbWljU3RyaW5nIGlkZW50aWZpZXIoaXQtPmZpcnN0LmdldCgpKTsKLSAgICAgICAgZGVz
dHJveUNvdW50ZXJOb2RlV2l0aG91dE1hcFJlbW92YWwoaWRlbnRpZmllciwgaXQtPnNlY29uZC5n
ZXQoKSk7CisgICAgICAgIEF0b21pY1N0cmluZyBpZGVudGlmaWVyKGl0LT5rZXkuZ2V0KCkpOwor
ICAgICAgICBkZXN0cm95Q291bnRlck5vZGVXaXRob3V0TWFwUmVtb3ZhbChpZGVudGlmaWVyLCBp
dC0+dmFsdWUuZ2V0KCkpOwogICAgIH0KICAgICBtYXBzLnJlbW92ZShtYXBzSXRlcmF0b3IpOwog
ICAgIGRlbGV0ZSBtYXA7CkBAIC01ODIsNyArNTgyLDcgQEAgdm9pZCBSZW5kZXJDb3VudGVyOjpk
ZXN0cm95Q291bnRlck5vZGUoUmVuZGVyT2JqZWN0KiBvd25lciwgY29uc3QgQXRvbWljU3RyaW5n
JgogICAgIENvdW50ZXJNYXA6Oml0ZXJhdG9yIG1hcEl0ZXJhdG9yID0gbWFwLT5maW5kKGlkZW50
aWZpZXIuaW1wbCgpKTsKICAgICBpZiAobWFwSXRlcmF0b3IgPT0gbWFwLT5lbmQoKSkKICAgICAg
ICAgcmV0dXJuOwotICAgIGRlc3Ryb3lDb3VudGVyTm9kZVdpdGhvdXRNYXBSZW1vdmFsKGlkZW50
aWZpZXIsIG1hcEl0ZXJhdG9yLT5zZWNvbmQuZ2V0KCkpOworICAgIGRlc3Ryb3lDb3VudGVyTm9k
ZVdpdGhvdXRNYXBSZW1vdmFsKGlkZW50aWZpZXIsIG1hcEl0ZXJhdG9yLT52YWx1ZS5nZXQoKSk7
CiAgICAgbWFwLT5yZW1vdmUobWFwSXRlcmF0b3IpOwogICAgIC8vIFdlIGRvIG5vdCBkZWxldGUg
Im1hcCIgaGVyZSBldmVuIGlmIGVtcHR5IGJlY2F1c2Ugd2UgZXhwZWN0IHRvIHJldXNlCiAgICAg
Ly8gaXQgc29vbi4gSW4gb3JkZXIgZm9yIGEgcmVuZGVyZXIgdG8gbG9zZSBhbGwgaXRzIGNvdW50
ZXJzIHBlcm1hbmVudGx5LApAQCAtNjE5LDIyICs2MTksMjIgQEAgc3RhdGljIHZvaWQgdXBkYXRl
Q291bnRlcnMoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKICAgICBDb3VudGVyRGlyZWN0aXZlTWFw
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBkaXJlY3RpdmVNYXAtPmVuZCgpOwogICAgIGlmICghcmVu
ZGVyZXItPmhhc0NvdW50ZXJOb2RlTWFwKCkpIHsKICAgICAgICAgZm9yIChDb3VudGVyRGlyZWN0
aXZlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGRpcmVjdGl2ZU1hcC0+YmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KQotICAgICAgICAgICAgbWFrZUNvdW50ZXJOb2RlKHJlbmRlcmVyLCBBdG9taWNT
dHJpbmcoaXQtPmZpcnN0LmdldCgpKSwgZmFsc2UpOworICAgICAgICAgICAgbWFrZUNvdW50ZXJO
b2RlKHJlbmRlcmVyLCBBdG9taWNTdHJpbmcoaXQtPmtleS5nZXQoKSksIGZhbHNlKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICBDb3VudGVyTWFwKiBjb3VudGVyTWFwID0gY291bnRlck1h
cHMoKS5nZXQocmVuZGVyZXIpOwogICAgIEFTU0VSVChjb3VudGVyTWFwKTsKICAgICBmb3IgKENv
dW50ZXJEaXJlY3RpdmVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZGlyZWN0aXZlTWFwLT5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgUmVmUHRyPENvdW50ZXJOb2RlPiBub2Rl
ID0gY291bnRlck1hcC0+Z2V0KGl0LT5maXJzdC5nZXQoKSk7CisgICAgICAgIFJlZlB0cjxDb3Vu
dGVyTm9kZT4gbm9kZSA9IGNvdW50ZXJNYXAtPmdldChpdC0+a2V5LmdldCgpKTsKICAgICAgICAg
aWYgKCFub2RlKSB7Ci0gICAgICAgICAgICBtYWtlQ291bnRlck5vZGUocmVuZGVyZXIsIEF0b21p
Y1N0cmluZyhpdC0+Zmlyc3QuZ2V0KCkpLCBmYWxzZSk7CisgICAgICAgICAgICBtYWtlQ291bnRl
ck5vZGUocmVuZGVyZXIsIEF0b21pY1N0cmluZyhpdC0+a2V5LmdldCgpKSwgZmFsc2UpOwogICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgUmVmUHRyPENvdW50ZXJOb2Rl
PiBuZXdQYXJlbnQgPSAwOwogICAgICAgICBSZWZQdHI8Q291bnRlck5vZGU+IG5ld1ByZXZpb3Vz
U2libGluZyA9IDA7CiAgICAgICAgIAotICAgICAgICBmaW5kUGxhY2VGb3JDb3VudGVyKHJlbmRl
cmVyLCBBdG9taWNTdHJpbmcoaXQtPmZpcnN0LmdldCgpKSwgbm9kZS0+aGFzUmVzZXRUeXBlKCks
IG5ld1BhcmVudCwgbmV3UHJldmlvdXNTaWJsaW5nKTsKLSAgICAgICAgaWYgKG5vZGUgIT0gY291
bnRlck1hcC0+Z2V0KGl0LT5maXJzdC5nZXQoKSkpCisgICAgICAgIGZpbmRQbGFjZUZvckNvdW50
ZXIocmVuZGVyZXIsIEF0b21pY1N0cmluZyhpdC0+a2V5LmdldCgpKSwgbm9kZS0+aGFzUmVzZXRU
eXBlKCksIG5ld1BhcmVudCwgbmV3UHJldmlvdXNTaWJsaW5nKTsKKyAgICAgICAgaWYgKG5vZGUg
IT0gY291bnRlck1hcC0+Z2V0KGl0LT5rZXkuZ2V0KCkpKQogICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgIENvdW50ZXJOb2RlKiBwYXJlbnQgPSBub2RlLT5wYXJlbnQoKTsKICAgICAgICAg
aWYgKG5ld1BhcmVudCA9PSBwYXJlbnQgJiYgbmV3UHJldmlvdXNTaWJsaW5nID09IG5vZGUtPnBy
ZXZpb3VzU2libGluZygpKQpAQCAtNjQyLDcgKzY0Miw3IEBAIHN0YXRpYyB2b2lkIHVwZGF0ZUNv
dW50ZXJzKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiAgICAgICAgIGlmIChwYXJlbnQpCiAgICAg
ICAgICAgICBwYXJlbnQtPnJlbW92ZUNoaWxkKG5vZGUuZ2V0KCkpOwogICAgICAgICBpZiAobmV3
UGFyZW50KQotICAgICAgICAgICAgbmV3UGFyZW50LT5pbnNlcnRBZnRlcihub2RlLmdldCgpLCBu
ZXdQcmV2aW91c1NpYmxpbmcuZ2V0KCksIGl0LT5maXJzdC5nZXQoKSk7CisgICAgICAgICAgICBu
ZXdQYXJlbnQtPmluc2VydEFmdGVyKG5vZGUuZ2V0KCksIG5ld1ByZXZpb3VzU2libGluZy5nZXQo
KSwgaXQtPmtleS5nZXQoKSk7CiAgICAgfQogfQogCkBAIC02NzEsMjEgKzY3MSwyMSBAQCB2b2lk
IFJlbmRlckNvdW50ZXI6OnJlbmRlcmVyU3R5bGVDaGFuZ2VkKFJlbmRlck9iamVjdCogcmVuZGVy
ZXIsIGNvbnN0IFJlbmRlclN0eQogICAgICAgICAgICAgQ291bnRlckRpcmVjdGl2ZU1hcDo6Y29u
c3RfaXRlcmF0b3IgbmV3TWFwRW5kID0gbmV3Q291bnRlckRpcmVjdGl2ZXMtPmVuZCgpOwogICAg
ICAgICAgICAgQ291bnRlckRpcmVjdGl2ZU1hcDo6Y29uc3RfaXRlcmF0b3Igb2xkTWFwRW5kID0g
b2xkQ291bnRlckRpcmVjdGl2ZXMtPmVuZCgpOwogICAgICAgICAgICAgZm9yIChDb3VudGVyRGly
ZWN0aXZlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG5ld0NvdW50ZXJEaXJlY3RpdmVzLT5iZWdp
bigpOyBpdCAhPSBuZXdNYXBFbmQ7ICsraXQpIHsKLSAgICAgICAgICAgICAgICBDb3VudGVyRGly
ZWN0aXZlTWFwOjpjb25zdF9pdGVyYXRvciBvbGRNYXBJdCA9IG9sZENvdW50ZXJEaXJlY3RpdmVz
LT5maW5kKGl0LT5maXJzdCk7CisgICAgICAgICAgICAgICAgQ291bnRlckRpcmVjdGl2ZU1hcDo6
Y29uc3RfaXRlcmF0b3Igb2xkTWFwSXQgPSBvbGRDb3VudGVyRGlyZWN0aXZlcy0+ZmluZChpdC0+
a2V5KTsKICAgICAgICAgICAgICAgICBpZiAob2xkTWFwSXQgIT0gb2xkTWFwRW5kKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChvbGRNYXBJdC0+c2Vjb25kID09IGl0LT5zZWNvbmQpCisgICAg
ICAgICAgICAgICAgICAgIGlmIChvbGRNYXBJdC0+dmFsdWUgPT0gaXQtPnZhbHVlKQogICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIFJlbmRlckNv
dW50ZXI6OmRlc3Ryb3lDb3VudGVyTm9kZShyZW5kZXJlciwgaXQtPmZpcnN0LmdldCgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgUmVuZGVyQ291bnRlcjo6ZGVzdHJveUNvdW50ZXJOb2RlKHJlbmRl
cmVyLCBpdC0+a2V5LmdldCgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
Ly8gV2UgbXVzdCBjcmVhdGUgdGhpcyBub2RlIGhlcmUsIGJlY2F1c2UgdGhlIGNoYW5nZWQgbm9k
ZSBtYXkgYmUgYSBub2RlIHdpdGggbm8gZGlzcGxheSBzdWNoIGFzCiAgICAgICAgICAgICAgICAg
Ly8gYXMgdGhvc2UgY3JlYXRlZCBieSB0aGUgaW5jcmVtZW50IG9yIHJlc2V0IGRpcmVjdGl2ZXMg
YW5kIHRoZSByZS1sYXlvdXQgdGhhdCB3aWxsIGhhcHBlbiB3aWxsCiAgICAgICAgICAgICAgICAg
Ly8gbm90IGNhdGNoIHRoZSBjaGFuZ2UgaWYgdGhlIG5vZGUgaGFkIG5vIGNoaWxkcmVuLgotICAg
ICAgICAgICAgICAgIG1ha2VDb3VudGVyTm9kZShyZW5kZXJlciwgaXQtPmZpcnN0LmdldCgpLCBm
YWxzZSk7CisgICAgICAgICAgICAgICAgbWFrZUNvdW50ZXJOb2RlKHJlbmRlcmVyLCBpdC0+a2V5
LmdldCgpLCBmYWxzZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyBEZXN0cm95aW5n
IG9sZCBjb3VudGVycyB0aGF0IGRvIG5vdCBleGlzdCBpbiB0aGUgbmV3IGNvdW50ZXJEaXJlY3Rp
dmUgbWFwLgogICAgICAgICAgICAgZm9yIChDb3VudGVyRGlyZWN0aXZlTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IG9sZENvdW50ZXJEaXJlY3RpdmVzLT5iZWdpbigpOyBpdCAhPW9sZE1hcEVuZDsg
KytpdCkgewotICAgICAgICAgICAgICAgIGlmICghbmV3Q291bnRlckRpcmVjdGl2ZXMtPmNvbnRh
aW5zKGl0LT5maXJzdCkpCi0gICAgICAgICAgICAgICAgICAgIFJlbmRlckNvdW50ZXI6OmRlc3Ry
b3lDb3VudGVyTm9kZShyZW5kZXJlciwgaXQtPmZpcnN0LmdldCgpKTsKKyAgICAgICAgICAgICAg
ICBpZiAoIW5ld0NvdW50ZXJEaXJlY3RpdmVzLT5jb250YWlucyhpdC0+a2V5KSkKKyAgICAgICAg
ICAgICAgICAgICAgUmVuZGVyQ291bnRlcjo6ZGVzdHJveUNvdW50ZXJOb2RlKHJlbmRlcmVyLCBp
dC0+a2V5LmdldCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIGlmIChyZW5kZXJlci0+aGFzQ291bnRlck5vZGVNYXAoKSkKQEAgLTY5Nyw3ICs2OTcsNyBA
QCB2b2lkIFJlbmRlckNvdW50ZXI6OnJlbmRlcmVyU3R5bGVDaGFuZ2VkKFJlbmRlck9iamVjdCog
cmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eQogICAgICAgICAgICAgLy8gV2UgbXVzdCBjcmVhdGUg
dGhpcyBub2RlIGhlcmUsIGJlY2F1c2UgdGhlIGFkZGVkIG5vZGUgbWF5IGJlIGEgbm9kZSB3aXRo
IG5vIGRpc3BsYXkgc3VjaCBhcwogICAgICAgICAgICAgLy8gYXMgdGhvc2UgY3JlYXRlZCBieSB0
aGUgaW5jcmVtZW50IG9yIHJlc2V0IGRpcmVjdGl2ZXMgYW5kIHRoZSByZS1sYXlvdXQgdGhhdCB3
aWxsIGhhcHBlbiB3aWxsCiAgICAgICAgICAgICAvLyBub3QgY2F0Y2ggdGhlIGNoYW5nZSBpZiB0
aGUgbm9kZSBoYWQgbm8gY2hpbGRyZW4uCi0gICAgICAgICAgICBtYWtlQ291bnRlck5vZGUocmVu
ZGVyZXIsIGl0LT5maXJzdC5nZXQoKSwgZmFsc2UpOworICAgICAgICAgICAgbWFrZUNvdW50ZXJO
b2RlKHJlbmRlcmVyLCBpdC0+a2V5LmdldCgpLCBmYWxzZSk7CiAgICAgICAgIH0KICAgICB9CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAKaW5kZXgg
MzkzOTY0YWRlMGI5NWE0ZDg4NjdiNjkzMDM5YjVhZGVjMTliMDM0NC4uMGFmZGZkM2VmNWI5OTQ2
OTdiMDFhMjlkNGEyMDFhYWIwZjIyZjYxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJGbG93VGhyZWFkLmNwcApAQCAtNjU2LDcgKzY1Niw3IEBAIHZvaWQgUmVuZGVyRmxv
d1RocmVhZDo6c2V0UmVnaW9uUmFuZ2VGb3JCb3goY29uc3QgUmVuZGVyQm94KiBib3gsIExheW91
dFVuaXQgb2ZmCiAgICAgfQogCiAgICAgLy8gSWYgbm90aGluZyBjaGFuZ2VkLCBqdXN0IGJhaWwu
Ci0gICAgUmVuZGVyUmVnaW9uUmFuZ2UmIHJhbmdlID0gaXQtPnNlY29uZDsKKyAgICBSZW5kZXJS
ZWdpb25SYW5nZSYgcmFuZ2UgPSBpdC0+dmFsdWU7CiAgICAgaWYgKHJhbmdlLnN0YXJ0UmVnaW9u
KCkgPT0gc3RhcnRSZWdpb24gJiYgcmFuZ2UuZW5kUmVnaW9uKCkgPT0gZW5kUmVnaW9uKQogICAg
ICAgICByZXR1cm47CiAKQEAgLTY4Niw3ICs2ODYsNyBAQCB2b2lkIFJlbmRlckZsb3dUaHJlYWQ6
OmdldFJlZ2lvblJhbmdlRm9yQm94KGNvbnN0IFJlbmRlckJveCogYm94LCBSZW5kZXJSZWdpb24q
JgogICAgIGlmIChpdCA9PSBtX3JlZ2lvblJhbmdlTWFwLmVuZCgpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBjb25zdCBSZW5kZXJSZWdpb25SYW5nZSYgcmFuZ2UgPSBpdC0+c2Vjb25kOworICAg
IGNvbnN0IFJlbmRlclJlZ2lvblJhbmdlJiByYW5nZSA9IGl0LT52YWx1ZTsKICAgICBzdGFydFJl
Z2lvbiA9IHJhbmdlLnN0YXJ0UmVnaW9uKCk7CiAgICAgZW5kUmVnaW9uID0gcmFuZ2UuZW5kUmVn
aW9uKCk7CiAgICAgQVNTRVJUKG1fcmVnaW9uTGlzdC5jb250YWlucyhzdGFydFJlZ2lvbikgJiYg
bV9yZWdpb25MaXN0LmNvbnRhaW5zKGVuZFJlZ2lvbikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllci5jcHAKaW5kZXggODc3NWM1N2I3YTdjOWUzOGMwOTQyNzJhZjcxNjM5YzU0
OTYzNWJlMC4uYWZiZDYzMTI1MDBlMDU1NDY5NTc4Y2Y5ZWVkODk3ZDQ1NmJiZjJkNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCkBAIC0yNzcyLDcgKzI3NzIsNyBA
QCB2b2lkIFJlbmRlckxheWVyOjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0
IExheW91dFJlY3QmIGRhbWFnZVJlY3QsCiAgICAgcGFpbnRMYXllcih0aGlzLCBjb250ZXh0LCBk
YW1hZ2VSZWN0LCBwYWludEJlaGF2aW9yLCBwYWludGluZ1Jvb3QsIHJlZ2lvbiwgJm92ZXJsYXBU
ZXN0UmVxdWVzdHMsIHBhaW50RmxhZ3MpOwogICAgIE92ZXJsYXBUZXN0UmVxdWVzdE1hcDo6aXRl
cmF0b3IgZW5kID0gb3ZlcmxhcFRlc3RSZXF1ZXN0cy5lbmQoKTsKICAgICBmb3IgKE92ZXJsYXBU
ZXN0UmVxdWVzdE1hcDo6aXRlcmF0b3IgaXQgPSBvdmVybGFwVGVzdFJlcXVlc3RzLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPmZpcnN0LT5zZXRPdmVybGFwVGVzdFJlc3Vs
dChmYWxzZSk7CisgICAgICAgIGl0LT5rZXktPnNldE92ZXJsYXBUZXN0UmVzdWx0KGZhbHNlKTsK
IH0KIAogdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRPdmVybGF5U2Nyb2xsYmFycyhHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QsIFBhaW50QmVoYXZp
b3IgcGFpbnRCZWhhdmlvciwgUmVuZGVyT2JqZWN0KiBwYWludGluZ1Jvb3QpCkBAIC0yODQxLDEx
ICsyODQxLDExIEBAIHN0YXRpYyB2b2lkIHBlcmZvcm1PdmVybGFwVGVzdHMoT3ZlcmxhcFRlc3RS
ZXF1ZXN0TWFwJiBvdmVybGFwVGVzdFJlcXVlc3RzLCBjb25zCiAgICAgT3ZlcmxhcFRlc3RSZXF1
ZXN0TWFwOjppdGVyYXRvciBlbmQgPSBvdmVybGFwVGVzdFJlcXVlc3RzLmVuZCgpOwogICAgIExh
eW91dFJlY3QgYm91bmRpbmdCb3ggPSBsYXllci0+Ym91bmRpbmdCb3gocm9vdExheWVyKTsKICAg
ICBmb3IgKE92ZXJsYXBUZXN0UmVxdWVzdE1hcDo6aXRlcmF0b3IgaXQgPSBvdmVybGFwVGVzdFJl
cXVlc3RzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoIWJvdW5kaW5n
Qm94LmludGVyc2VjdHMoaXQtPnNlY29uZCkpCisgICAgICAgIGlmICghYm91bmRpbmdCb3guaW50
ZXJzZWN0cyhpdC0+dmFsdWUpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaXQt
PmZpcnN0LT5zZXRPdmVybGFwVGVzdFJlc3VsdCh0cnVlKTsKLSAgICAgICAgb3ZlcmxhcHBlZFJl
cXVlc3RDbGllbnRzLmFwcGVuZChpdC0+Zmlyc3QpOworICAgICAgICBpdC0+a2V5LT5zZXRPdmVy
bGFwVGVzdFJlc3VsdCh0cnVlKTsKKyAgICAgICAgb3ZlcmxhcHBlZFJlcXVlc3RDbGllbnRzLmFw
cGVuZChpdC0+a2V5KTsKICAgICB9CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvdmVybGFw
cGVkUmVxdWVzdENsaWVudHMuc2l6ZSgpOyArK2kpCiAgICAgICAgIG92ZXJsYXBUZXN0UmVxdWVz
dHMucmVtb3ZlKG92ZXJsYXBwZWRSZXF1ZXN0Q2xpZW50c1tpXSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlckluZm8uY3BwCmluZGV4IDcwM2RmNjM4
Yzc5NTJlODhiZWI2MzhhMzZlNDU3YmYzZTExYzgyNzYuLjA3NjE5NWM3NWIwYjUxYWI2N2JkOTA5
ZmVmMzYzODc5MWUyNjI3ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllckZpbHRlckluZm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllckZpbHRlckluZm8uY3BwCkBAIC00OSw3ICs0OSw3IEBAIFJlbmRlckxheWVyRmls
dGVySW5mbyogUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvOjpmaWx0ZXJJbmZvRm9yUmVuZGVyTGF5ZXIo
Y29uc3QgUmVuCiAgICAgaWYgKCFzX2ZpbHRlck1hcCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAg
UmVuZGVyTGF5ZXJGaWx0ZXJJbmZvTWFwOjppdGVyYXRvciBpdGVyID0gc19maWx0ZXJNYXAtPmZp
bmQobGF5ZXIpOwotICAgIHJldHVybiAoaXRlciAhPSBzX2ZpbHRlck1hcC0+ZW5kKCkpID8gaXRl
ci0+c2Vjb25kIDogMDsKKyAgICByZXR1cm4gKGl0ZXIgIT0gc19maWx0ZXJNYXAtPmVuZCgpKSA/
IGl0ZXItPnZhbHVlIDogMDsKIH0KIAogUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvKiBSZW5kZXJMYXll
ckZpbHRlckluZm86OmNyZWF0ZUZpbHRlckluZm9Gb3JSZW5kZXJMYXllcklmTmVlZGVkKFJlbmRl
ckxheWVyKiBsYXllcikKQEAgLTYwLDcgKzYwLDcgQEAgUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvKiBS
ZW5kZXJMYXllckZpbHRlckluZm86OmNyZWF0ZUZpbHRlckluZm9Gb3JSZW5kZXJMYXllcklmTmUK
ICAgICBSZW5kZXJMYXllckZpbHRlckluZm9NYXA6Oml0ZXJhdG9yIGl0ZXIgPSBzX2ZpbHRlck1h
cC0+ZmluZChsYXllcik7CiAgICAgaWYgKGl0ZXIgIT0gc19maWx0ZXJNYXAtPmVuZCgpKSB7CiAg
ICAgICAgIEFTU0VSVChsYXllci0+aGFzRmlsdGVySW5mbygpKTsKLSAgICAgICAgcmV0dXJuIGl0
ZXItPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGl0ZXItPnZhbHVlOwogICAgIH0KICAgICAKICAg
ICBSZW5kZXJMYXllckZpbHRlckluZm8qIGZpbHRlciA9IG5ldyBSZW5kZXJMYXllckZpbHRlcklu
Zm8obGF5ZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5h
bWVkRmxvd1RocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRG
bG93VGhyZWFkLmNwcAppbmRleCAwODhiODcyNDhkYTM1NTI1OWEyMGI2OTkwMzU1ZDg4NzQ2NzEz
ZGY0Li4yYjNlNjcxMWFmMWFlMjhlYTE1ZDg1MGQ5OTNiNGZkMTRjMDliYzU4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93VGhyZWFkLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93VGhyZWFkLmNwcApAQCAt
MTExLDcgKzExMSw3IEBAIGJvb2wgUmVuZGVyTmFtZWRGbG93VGhyZWFkOjpkZXBlbmRzT24oUmVu
ZGVyTmFtZWRGbG93VGhyZWFkKiBvdGhlclJlbmRlckZsb3dUaHJlCiAgICAgUmVuZGVyTmFtZWRG
bG93VGhyZWFkQ291bnRlZFNldDo6Y29uc3RfaXRlcmF0b3IgaXRlcmF0b3IgPSBtX2xheW91dEJl
Zm9yZVRocmVhZHNTZXQuYmVnaW4oKTsKICAgICBSZW5kZXJOYW1lZEZsb3dUaHJlYWRDb3VudGVk
U2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2xheW91dEJlZm9yZVRocmVhZHNTZXQuZW5kKCk7
CiAgICAgZm9yICg7IGl0ZXJhdG9yICE9IGVuZDsgKytpdGVyYXRvcikgewotICAgICAgICBjb25z
dCBSZW5kZXJOYW1lZEZsb3dUaHJlYWQqIGJlZm9yZUZsb3dUaHJlYWQgPSAoKml0ZXJhdG9yKS5m
aXJzdDsKKyAgICAgICAgY29uc3QgUmVuZGVyTmFtZWRGbG93VGhyZWFkKiBiZWZvcmVGbG93VGhy
ZWFkID0gKCppdGVyYXRvcikua2V5OwogICAgICAgICBpZiAoYmVmb3JlRmxvd1RocmVhZC0+ZGVw
ZW5kc09uKG90aGVyUmVuZGVyRmxvd1RocmVhZCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CkBAIC0yMzcsNyArMjM3LDcgQEAgdm9pZCBSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OnJl
bW92ZURlcGVuZGVuY3lPbkZsb3dUaHJlYWQoUmVuZGVyTmFtZWRGbG93VGhyZWFkKgogdm9pZCBS
ZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OnB1c2hEZXBlbmRlbmNpZXMoUmVuZGVyTmFtZWRGbG93VGhy
ZWFkTGlzdCYgbGlzdCkKIHsKICAgICBmb3IgKFJlbmRlck5hbWVkRmxvd1RocmVhZENvdW50ZWRT
ZXQ6Oml0ZXJhdG9yIGl0ZXIgPSBtX2xheW91dEJlZm9yZVRocmVhZHNTZXQuYmVnaW4oKTsgaXRl
ciAhPSBtX2xheW91dEJlZm9yZVRocmVhZHNTZXQuZW5kKCk7ICsraXRlcikgewotICAgICAgICBS
ZW5kZXJOYW1lZEZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSAoKml0ZXIpLmZpcnN0OworICAgICAg
ICBSZW5kZXJOYW1lZEZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSAoKml0ZXIpLmtleTsKICAgICAg
ICAgaWYgKGxpc3QuY29udGFpbnMoZmxvd1RocmVhZCkpCiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgZmxvd1RocmVhZC0+cHVzaERlcGVuZGVuY2llcyhsaXN0KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZWdpb24uY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5jcHAKaW5kZXggYTdiYTJlYWRjMTU5MjA5ZGY0Y2Vl
Yzk4ZTJmNjVkNzViZGEzMmFkNS4uYmNmMjdjMmFiZTM5MjQxMTY0MmU5ODQyZjM3ODY3MTA0NWYy
NGFkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5jcHAKQEAgLTEw
Miw3ICsxMDIsNyBAQCB2b2lkIFJlbmRlclJlZ2lvbjo6c2V0UmVnaW9uQm94ZXNSZWdpb25TdHls
ZSgpCiAgICAgICAgIHJldHVybjsKIAogICAgIGZvciAoUmVuZGVyQm94UmVnaW9uSW5mb01hcDo6
aXRlcmF0b3IgaXRlciA9IG1fcmVuZGVyQm94UmVnaW9uSW5mby5iZWdpbigpLCBlbmQgPSBtX3Jl
bmRlckJveFJlZ2lvbkluZm8uZW5kKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKLSAgICAgICAg
Y29uc3QgUmVuZGVyQm94KiBib3ggPSBpdGVyLT5maXJzdDsKKyAgICAgICAgY29uc3QgUmVuZGVy
Qm94KiBib3ggPSBpdGVyLT5rZXk7CiAgICAgICAgIGlmICghYm94LT5jYW5IYXZlUmVnaW9uU3R5
bGUoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCkBAIC0xMjIsMTQgKzEyMiwxNCBAQCB2b2lk
IFJlbmRlclJlZ2lvbjo6cmVzdG9yZVJlZ2lvbkJveGVzT3JpZ2luYWxTdHlsZSgpCiAgICAgICAg
IHJldHVybjsKIAogICAgIGZvciAoUmVuZGVyQm94UmVnaW9uSW5mb01hcDo6aXRlcmF0b3IgaXRl
ciA9IG1fcmVuZGVyQm94UmVnaW9uSW5mby5iZWdpbigpLCBlbmQgPSBtX3JlbmRlckJveFJlZ2lv
bkluZm8uZW5kKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKLSAgICAgICAgY29uc3QgUmVuZGVy
Qm94KiBib3ggPSBpdGVyLT5maXJzdDsKKyAgICAgICAgY29uc3QgUmVuZGVyQm94KiBib3ggPSBp
dGVyLT5rZXk7CiAgICAgICAgIFJlbmRlckJveFJlZ2lvblN0eWxlTWFwOjppdGVyYXRvciBpdCA9
IG1fcmVuZGVyQm94UmVnaW9uU3R5bGUuZmluZChib3gpOwogICAgICAgICBpZiAoaXQgPT0gbV9y
ZW5kZXJCb3hSZWdpb25TdHlsZS5lbmQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAg
ICAgIC8vIFJlc3RvcmUgdGhlIGJveCBzdHlsZSB0byB0aGUgb3JpZ2luYWwgc3R5bGUgYW5kIHN0
b3JlIHRoZSBib3ggc3R5bGUgaW4gcmVnaW9uIGZvciBsYXRlciB1c2UuCiAgICAgICAgIFJlZlB0
cjxSZW5kZXJTdHlsZT4gYm94UmVnaW9uU3R5bGUgPSBib3gtPnN0eWxlKCk7Ci0gICAgICAgIChj
b25zdF9jYXN0PFJlbmRlckJveCo+KGJveCkpLT5zZXRTdHlsZUludGVybmFsKGl0LT5zZWNvbmQp
OworICAgICAgICAoY29uc3RfY2FzdDxSZW5kZXJCb3gqPihib3gpKS0+c2V0U3R5bGVJbnRlcm5h
bChpdC0+dmFsdWUpOwogICAgICAgICBtX3JlbmRlckJveFJlZ2lvblN0eWxlLnNldChib3gsIGJv
eFJlZ2lvblN0eWxlKTsKICAgICB9CiB9CkBAIC0yNDYsNyArMjQ2LDcgQEAgUmVuZGVyQm94UmVn
aW9uSW5mbyogUmVuZGVyUmVnaW9uOjpzZXRSZW5kZXJCb3hSZWdpb25JbmZvKGNvbnN0IFJlbmRl
ckJveCogYm94LAogICAgIGlmICghbV9pc1ZhbGlkIHx8ICFtX2Zsb3dUaHJlYWQpCiAgICAgICAg
IHJldHVybiAwOwogCi0gICAgT3duUHRyPFJlbmRlckJveFJlZ2lvbkluZm8+JiBib3hJbmZvID0g
bV9yZW5kZXJCb3hSZWdpb25JbmZvLmFkZChib3gsIG51bGxwdHIpLml0ZXJhdG9yLT5zZWNvbmQ7
CisgICAgT3duUHRyPFJlbmRlckJveFJlZ2lvbkluZm8+JiBib3hJbmZvID0gbV9yZW5kZXJCb3hS
ZWdpb25JbmZvLmFkZChib3gsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoYm94
SW5mbykKICAgICAgICAgKmJveEluZm8gPSBSZW5kZXJCb3hSZWdpb25JbmZvKGxvZ2ljYWxMZWZ0
SW5zZXQsIGxvZ2ljYWxSaWdodEluc2V0LCBjb250YWluaW5nQmxvY2tDaGFpbklzSW5zZXQpOwog
ICAgIGVsc2UKQEAgLTI4Nyw3ICsyODcsNyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBSZW5k
ZXJSZWdpb246OnJlbmRlckJveFJlZ2lvblN0eWxlKGNvbnN0IFJlbmRlckJveCogcmVuZAogCiAg
ICAgUmVuZGVyQm94UmVnaW9uU3R5bGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZW5kZXJCb3hSZWdp
b25TdHlsZS5maW5kKHJlbmRlckJveCk7CiAgICAgaWYgKGl0ICE9IG1fcmVuZGVyQm94UmVnaW9u
U3R5bGUuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgICAgICByZXR1cm4g
aXQtPnZhbHVlOwogICAgIHJldHVybiBjb21wdXRlU3R5bGVJblJlZ2lvbihyZW5kZXJCb3gpOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0
aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3Bw
CmluZGV4IDhkODdiMTU3YjY5MTllOWI5MjNiYWE5ZDk3NWQ5M2ZiM2ZhOThmYjQuLjc0OGI5NDVi
NmI0NGJkZGU0NDRhMDA1OTkzNWU5NzE0NzhmY2EwODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCkBAIC0xNDE5LDcgKzE0MTksNyBAQCBD
b2xsYXBzZWRCb3JkZXJWYWx1ZSYgUmVuZGVyVGFibGVTZWN0aW9uOjpjYWNoZWRDb2xsYXBzZWRC
b3JkZXIoY29uc3QgUmVuZGVyVGFibAogICAgIEFTU0VSVCh0YWJsZSgpLT5jb2xsYXBzZUJvcmRl
cnMoKSk7CiAgICAgSGFzaE1hcDxwYWlyPGNvbnN0IFJlbmRlclRhYmxlQ2VsbCosIGludD4sIENv
bGxhcHNlZEJvcmRlclZhbHVlPjo6aXRlcmF0b3IgaXQgPSBtX2NlbGxzQ29sbGFwc2VkQm9yZGVy
cy5maW5kKG1ha2VfcGFpcihjZWxsLCBzaWRlKSk7CiAgICAgQVNTRVJUKGl0ICE9IG1fY2VsbHND
b2xsYXBzZWRCb3JkZXJzLmVuZCgpKTsKLSAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICByZXR1
cm4gaXQtPnZhbHVlOwogfQogCiBSZW5kZXJUYWJsZVNlY3Rpb24qIFJlbmRlclRhYmxlU2VjdGlv
bjo6Y3JlYXRlQW5vbnltb3VzV2l0aFBhcmVudFJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCog
cGFyZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
TWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCmluZGV4
IDgwMWIyMzVhOWM5ZTEwYmRkNTE0YzJjMzJkNTE1ZjlhYmYyY2E2MTIuLjc4ODdkZTgwNmVlMTJk
MjlmMDJhYWM1NDdjZDQyNDMxYzM2NDhlMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWVNYWMubW0KQEAgLTM2MCw3ICszNjAsNyBAQCBDb2xvciBSZW5kZXJUaGVtZU1h
Yzo6c3lzdGVtQ29sb3IoaW50IGNzc1ZhbHVlSWQpIGNvbnN0CiAgICAgewogICAgICAgICBIYXNo
TWFwPGludCwgUkdCQTMyPjo6aXRlcmF0b3IgaXQgPSBtX3N5c3RlbUNvbG9yQ2FjaGUuZmluZChj
c3NWYWx1ZUlkKTsKICAgICAgICAgaWYgKGl0ICE9IG1fc3lzdGVtQ29sb3JDYWNoZS5lbmQoKSkK
LSAgICAgICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgICAgICAgICAgcmV0dXJuIGl0LT52
YWx1ZTsKICAgICB9CiAKICAgICBDb2xvciBjb2xvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJWaWV3LmNwcAppbmRleCA3ZjI3MDk4ZmU1MGE3Y2UyNjRmNmQzNTNkMWRiNTI3ZThmMTAw
ZGNmLi42MWE5OWFkYjJkOWJjNWFmNmEyZWQxODk3N2E4ZWE4ZTk2ZDIxYjY4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCkBAIC00MjgsNyArNDI4LDcgQEAgSW50UmVj
dCBSZW5kZXJWaWV3OjpzZWxlY3Rpb25Cb3VuZHMoYm9vbCBjbGlwVG9WaXNpYmxlQ29udGVudCkg
Y29uc3QKICAgICBMYXlvdXRSZWN0IHNlbFJlY3Q7CiAgICAgU2VsZWN0aW9uTWFwOjppdGVyYXRv
ciBlbmQgPSBzZWxlY3RlZE9iamVjdHMuZW5kKCk7CiAgICAgZm9yIChTZWxlY3Rpb25NYXA6Oml0
ZXJhdG9yIGkgPSBzZWxlY3RlZE9iamVjdHMuYmVnaW4oKTsgaSAhPSBlbmQ7ICsraSkgewotICAg
ICAgICBSZW5kZXJTZWxlY3Rpb25JbmZvKiBpbmZvID0gaS0+c2Vjb25kOworICAgICAgICBSZW5k
ZXJTZWxlY3Rpb25JbmZvKiBpbmZvID0gaS0+dmFsdWU7CiAgICAgICAgIC8vIFJlbmRlclNlbGVj
dGlvbkluZm86OnJlY3QoKSBpcyBpbiB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIHJlcGFpbnRDb250
YWluZXIsIHNvIG1hcCB0byBwYWdlIGNvb3JkaW5hdGVzLgogICAgICAgICBMYXlvdXRSZWN0IGN1
cnJSZWN0ID0gaW5mby0+cmVjdCgpOwogICAgICAgICBpZiAoUmVuZGVyQm94TW9kZWxPYmplY3Qq
IHJlcGFpbnRDb250YWluZXIgPSBpbmZvLT5yZXBhaW50Q29udGFpbmVyKCkpIHsKQEAgLTUwOSw3
ICs1MDksNyBAQCB2b2lkIFJlbmRlclZpZXc6OnNldFNlbGVjdGlvbihSZW5kZXJPYmplY3QqIHN0
YXJ0LCBpbnQgc3RhcnRQb3MsIFJlbmRlck9iamVjdCogZQogICAgIC8vIE5vdyBjbGVhciB0aGUg
c2VsZWN0aW9uLgogICAgIFNlbGVjdGVkT2JqZWN0TWFwOjppdGVyYXRvciBvbGRPYmplY3RzRW5k
ID0gb2xkU2VsZWN0ZWRPYmplY3RzLmVuZCgpOwogICAgIGZvciAoU2VsZWN0ZWRPYmplY3RNYXA6
Oml0ZXJhdG9yIGkgPSBvbGRTZWxlY3RlZE9iamVjdHMuYmVnaW4oKTsgaSAhPSBvbGRPYmplY3Rz
RW5kOyArK2kpCi0gICAgICAgIGktPmZpcnN0LT5zZXRTZWxlY3Rpb25TdGF0ZUlmTmVlZGVkKFNl
bGVjdGlvbk5vbmUpOworICAgICAgICBpLT5rZXktPnNldFNlbGVjdGlvblN0YXRlSWZOZWVkZWQo
U2VsZWN0aW9uTm9uZSk7CiAKICAgICAvLyBzZXQgc2VsZWN0aW9uIHN0YXJ0IGFuZCBlbmQKICAg
ICBtX3NlbGVjdGlvblN0YXJ0ID0gc3RhcnQ7CkBAIC01NzIsOSArNTcyLDkgQEAgdm9pZCBSZW5k
ZXJWaWV3OjpzZXRTZWxlY3Rpb24oUmVuZGVyT2JqZWN0KiBzdGFydCwgaW50IHN0YXJ0UG9zLCBS
ZW5kZXJPYmplY3QqIGUKIAogICAgIC8vIEhhdmUgYW55IG9mIHRoZSBvbGQgc2VsZWN0ZWQgb2Jq
ZWN0cyBjaGFuZ2VkIGNvbXBhcmVkIHRvIHRoZSBuZXcgc2VsZWN0aW9uPwogICAgIGZvciAoU2Vs
ZWN0ZWRPYmplY3RNYXA6Oml0ZXJhdG9yIGkgPSBvbGRTZWxlY3RlZE9iamVjdHMuYmVnaW4oKTsg
aSAhPSBvbGRPYmplY3RzRW5kOyArK2kpIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiBvYmogPSBp
LT5maXJzdDsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBvYmogPSBpLT5rZXk7CiAgICAgICAgIFJl
bmRlclNlbGVjdGlvbkluZm8qIG5ld0luZm8gPSBuZXdTZWxlY3RlZE9iamVjdHMuZ2V0KG9iaik7
Ci0gICAgICAgIFJlbmRlclNlbGVjdGlvbkluZm8qIG9sZEluZm8gPSBpLT5zZWNvbmQ7CisgICAg
ICAgIFJlbmRlclNlbGVjdGlvbkluZm8qIG9sZEluZm8gPSBpLT52YWx1ZTsKICAgICAgICAgaWYg
KCFuZXdJbmZvIHx8IG9sZEluZm8tPnJlY3QoKSAhPSBuZXdJbmZvLT5yZWN0KCkgfHwgb2xkSW5m
by0+c3RhdGUoKSAhPSBuZXdJbmZvLT5zdGF0ZSgpIHx8CiAgICAgICAgICAgICAobV9zZWxlY3Rp
b25TdGFydCA9PSBvYmogJiYgb2xkU3RhcnRQb3MgIT0gbV9zZWxlY3Rpb25TdGFydFBvcykgfHwK
ICAgICAgICAgICAgIChtX3NlbGVjdGlvbkVuZCA9PSBvYmogJiYgb2xkRW5kUG9zICE9IG1fc2Vs
ZWN0aW9uRW5kUG9zKSkgewpAQCAtNTkxLDcgKzU5MSw3IEBAIHZvaWQgUmVuZGVyVmlldzo6c2V0
U2VsZWN0aW9uKFJlbmRlck9iamVjdCogc3RhcnQsIGludCBzdGFydFBvcywgUmVuZGVyT2JqZWN0
KiBlCiAgICAgLy8gQW55IG5ldyBvYmplY3RzIHRoYXQgcmVtYWluIHdlcmUgbm90IGZvdW5kIGlu
IHRoZSBvbGQgb2JqZWN0cyBkaWN0LCBhbmQgc28gdGhleSBuZWVkIHRvIGJlIHVwZGF0ZWQuCiAg
ICAgU2VsZWN0ZWRPYmplY3RNYXA6Oml0ZXJhdG9yIG5ld09iamVjdHNFbmQgPSBuZXdTZWxlY3Rl
ZE9iamVjdHMuZW5kKCk7CiAgICAgZm9yIChTZWxlY3RlZE9iamVjdE1hcDo6aXRlcmF0b3IgaSA9
IG5ld1NlbGVjdGVkT2JqZWN0cy5iZWdpbigpOyBpICE9IG5ld09iamVjdHNFbmQ7ICsraSkgewot
ICAgICAgICBSZW5kZXJTZWxlY3Rpb25JbmZvKiBuZXdJbmZvID0gaS0+c2Vjb25kOworICAgICAg
ICBSZW5kZXJTZWxlY3Rpb25JbmZvKiBuZXdJbmZvID0gaS0+dmFsdWU7CiAgICAgICAgIG5ld0lu
Zm8tPnJlcGFpbnQoKTsKICAgICAgICAgZGVsZXRlIG5ld0luZm87CiAgICAgfQpAQCAtNTk5LDkg
KzU5OSw5IEBAIHZvaWQgUmVuZGVyVmlldzo6c2V0U2VsZWN0aW9uKFJlbmRlck9iamVjdCogc3Rh
cnQsIGludCBzdGFydFBvcywgUmVuZGVyT2JqZWN0KiBlCiAgICAgLy8gSGF2ZSBhbnkgb2YgdGhl
IG9sZCBibG9ja3MgY2hhbmdlZD8KICAgICBTZWxlY3RlZEJsb2NrTWFwOjppdGVyYXRvciBvbGRC
bG9ja3NFbmQgPSBvbGRTZWxlY3RlZEJsb2Nrcy5lbmQoKTsKICAgICBmb3IgKFNlbGVjdGVkQmxv
Y2tNYXA6Oml0ZXJhdG9yIGkgPSBvbGRTZWxlY3RlZEJsb2Nrcy5iZWdpbigpOyBpICE9IG9sZEJs
b2Nrc0VuZDsgKytpKSB7Ci0gICAgICAgIFJlbmRlckJsb2NrKiBibG9jayA9IGktPmZpcnN0Owor
ICAgICAgICBSZW5kZXJCbG9jayogYmxvY2sgPSBpLT5rZXk7CiAgICAgICAgIFJlbmRlckJsb2Nr
U2VsZWN0aW9uSW5mbyogbmV3SW5mbyA9IG5ld1NlbGVjdGVkQmxvY2tzLmdldChibG9jayk7Ci0g
ICAgICAgIFJlbmRlckJsb2NrU2VsZWN0aW9uSW5mbyogb2xkSW5mbyA9IGktPnNlY29uZDsKKyAg
ICAgICAgUmVuZGVyQmxvY2tTZWxlY3Rpb25JbmZvKiBvbGRJbmZvID0gaS0+dmFsdWU7CiAgICAg
ICAgIGlmICghbmV3SW5mbyB8fCBvbGRJbmZvLT5yZWN0cygpICE9IG5ld0luZm8tPnJlY3RzKCkg
fHwgb2xkSW5mby0+c3RhdGUoKSAhPSBuZXdJbmZvLT5zdGF0ZSgpKSB7CiAgICAgICAgICAgICBv
bGRJbmZvLT5yZXBhaW50KCk7CiAgICAgICAgICAgICBpZiAobmV3SW5mbykgewpAQCAtNjE2LDcg
KzYxNiw3IEBAIHZvaWQgUmVuZGVyVmlldzo6c2V0U2VsZWN0aW9uKFJlbmRlck9iamVjdCogc3Rh
cnQsIGludCBzdGFydFBvcywgUmVuZGVyT2JqZWN0KiBlCiAgICAgLy8gQW55IG5ldyBibG9ja3Mg
dGhhdCByZW1haW4gd2VyZSBub3QgZm91bmQgaW4gdGhlIG9sZCBibG9ja3MgZGljdCwgYW5kIHNv
IHRoZXkgbmVlZCB0byBiZSB1cGRhdGVkLgogICAgIFNlbGVjdGVkQmxvY2tNYXA6Oml0ZXJhdG9y
IG5ld0Jsb2Nrc0VuZCA9IG5ld1NlbGVjdGVkQmxvY2tzLmVuZCgpOwogICAgIGZvciAoU2VsZWN0
ZWRCbG9ja01hcDo6aXRlcmF0b3IgaSA9IG5ld1NlbGVjdGVkQmxvY2tzLmJlZ2luKCk7IGkgIT0g
bmV3QmxvY2tzRW5kOyArK2kpIHsKLSAgICAgICAgUmVuZGVyQmxvY2tTZWxlY3Rpb25JbmZvKiBu
ZXdJbmZvID0gaS0+c2Vjb25kOworICAgICAgICBSZW5kZXJCbG9ja1NlbGVjdGlvbkluZm8qIG5l
d0luZm8gPSBpLT52YWx1ZTsKICAgICAgICAgbmV3SW5mby0+cmVwYWludCgpOwogICAgICAgICBk
ZWxldGUgbmV3SW5mbzsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyV2lkZ2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRn
ZXQuY3BwCmluZGV4IGRhODdhOTdiZTU3YTlkN2UxZmE4NmYwZjllNDRlZThiNDgxYTRmNjUuLjFh
MzE3MjNmMWFiMTgyYmQ0NzkwZDc2Yjc5MTU2N2Q5ZDhlOTcwMjYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCkBAIC03MCw5ICs3MCw5IEBAIHZvaWQgUmVuZGVy
V2lkZ2V0OjpyZXN1bWVXaWRnZXRIaWVyYXJjaHlVcGRhdGVzKCkKICAgICAgICAgd2lkZ2V0TmV3
UGFyZW50TWFwKCkuY2xlYXIoKTsKICAgICAgICAgV2lkZ2V0VG9QYXJlbnRNYXA6Oml0ZXJhdG9y
IGVuZCA9IG1hcC5lbmQoKTsKICAgICAgICAgZm9yIChXaWRnZXRUb1BhcmVudE1hcDo6aXRlcmF0
b3IgaXQgPSBtYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBXaWRn
ZXQqIGNoaWxkID0gaXQtPmZpcnN0LmdldCgpOworICAgICAgICAgICAgV2lkZ2V0KiBjaGlsZCA9
IGl0LT5rZXkuZ2V0KCk7CiAgICAgICAgICAgICBTY3JvbGxWaWV3KiBjdXJyZW50UGFyZW50ID0g
Y2hpbGQtPnBhcmVudCgpOwotICAgICAgICAgICAgRnJhbWVWaWV3KiBuZXdQYXJlbnQgPSBpdC0+
c2Vjb25kOworICAgICAgICAgICAgRnJhbWVWaWV3KiBuZXdQYXJlbnQgPSBpdC0+dmFsdWU7CiAg
ICAgICAgICAgICBpZiAobmV3UGFyZW50ICE9IGN1cnJlbnRQYXJlbnQpIHsKICAgICAgICAgICAg
ICAgICBpZiAoY3VycmVudFBhcmVudCkKICAgICAgICAgICAgICAgICAgICAgY3VycmVudFBhcmVu
dC0+cmVtb3ZlQ2hpbGQoY2hpbGQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1Jvb3RJbmxpbmVCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxp
bmVCb3guY3BwCmluZGV4IDliOTczYjNiMmNmNTIyOTExNTVhYmQ1YmU4MDQ2NWIzNzAwNWM3YmIu
LmQwYzQ1MDcwN2MzZWNhZmEwMTJmNmIwMTEwODM0NTAxOTZiZjBlOWMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAKQEAgLTc0Myw4ICs3NDMsOCBAQCB2b2lk
IFJvb3RJbmxpbmVCb3g6OmFzY2VudEFuZERlc2NlbnRGb3JCb3goSW5saW5lQm94KiBib3gsIEds
eXBoT3ZlcmZsb3dBbmRGYWxsYgogICAgIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cgPSAw
OwogICAgIGlmIChib3gtPmlzVGV4dCgpKSB7CiAgICAgICAgIEdseXBoT3ZlcmZsb3dBbmRGYWxs
YmFja0ZvbnRzTWFwOjppdGVyYXRvciBpdCA9IHRleHRCb3hEYXRhTWFwLmZpbmQodG9JbmxpbmVU
ZXh0Qm94KGJveCkpOwotICAgICAgICB1c2VkRm9udHMgPSBpdCA9PSB0ZXh0Qm94RGF0YU1hcC5l
bmQoKSA/IDAgOiAmaXQtPnNlY29uZC5maXJzdDsKLSAgICAgICAgZ2x5cGhPdmVyZmxvdyA9IGl0
ID09IHRleHRCb3hEYXRhTWFwLmVuZCgpID8gMCA6ICZpdC0+c2Vjb25kLnNlY29uZDsKKyAgICAg
ICAgdXNlZEZvbnRzID0gaXQgPT0gdGV4dEJveERhdGFNYXAuZW5kKCkgPyAwIDogJml0LT52YWx1
ZS5maXJzdDsKKyAgICAgICAgZ2x5cGhPdmVyZmxvdyA9IGl0ID09IHRleHRCb3hEYXRhTWFwLmVu
ZCgpID8gMCA6ICZpdC0+dmFsdWUuc2Vjb25kOwogICAgIH0KICAgICAgICAgCiAgICAgYm9vbCBp
bmNsdWRlTGVhZGluZyA9IGluY2x1ZGVMZWFkaW5nRm9yQm94KGJveCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVmVydGljYWxQb3NpdGlvbkNhY2hlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvVmVydGljYWxQb3NpdGlvbkNhY2hlLmgKaW5kZXggYmIzOTg3Nzcy
MWRhNzA1YzM3YmQzYjg4MTkwMjRjZDI3ZTM2ZTVjZS4uYjdjZDdlMDg1ZTdmOWJlZGI1MjhmNjJk
ZWVmNTdhN2JiOGFhNWJlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Zl
cnRpY2FsUG9zaXRpb25DYWNoZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9WZXJ0
aWNhbFBvc2l0aW9uQ2FjaGUuaApAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNv
bnN0IEhhc2hNYXA8UmVuZGVyT2JqZWN0KiwgaW50Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXBU
b0NoZWNrLmZpbmQocmVuZGVyZXIpOwogICAgICAgICBpZiAoaXQgPT0gbWFwVG9DaGVjay5lbmQo
KSkKICAgICAgICAgICAgIHJldHVybiBQb3NpdGlvblVuZGVmaW5lZDsKLSAgICAgICAgcmV0dXJu
IGl0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBpdC0+dmFsdWU7CiAgICAgfQogICAgIAogICAg
IHZvaWQgc2V0KFJlbmRlck9iamVjdCogcmVuZGVyZXIsIEZvbnRCYXNlbGluZSBiYXNlbGluZVR5
cGUsIGludCBwb3NpdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR0lubGluZVRleHQuY3BwCmluZGV4IDA5ZDQ0NmI3ZDZlZWI5ZmY1NzhkNTQ2YTA5
NTAyNzRjNWE3ZmFkNGIuLjU0NzdlODE3NTVhMTI5OTVjOTU3MTEyYjVlNzFmYWY1N2I0ZWFjZGIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5l
VGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxp
bmVUZXh0LmNwcApAQCAtMTg0LDcgKzE4NCw3IEBAIGJvb2wgUmVuZGVyU1ZHSW5saW5lVGV4dDo6
Y2hhcmFjdGVyU3RhcnRzTmV3VGV4dENodW5rKGludCBwb3NpdGlvbikgY29uc3QKICAgICBpZiAo
aXQgPT0gbV9sYXlvdXRBdHRyaWJ1dGVzLmNoYXJhY3RlckRhdGFNYXAoKS5lbmQoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIGl0LT5zZWNvbmQueCAhPSBTVkdUZXh0TGF5
b3V0QXR0cmlidXRlczo6ZW1wdHlWYWx1ZSgpIHx8IGl0LT5zZWNvbmQueSAhPSBTVkdUZXh0TGF5
b3V0QXR0cmlidXRlczo6ZW1wdHlWYWx1ZSgpOworICAgIHJldHVybiBpdC0+dmFsdWUueCAhPSBT
VkdUZXh0TGF5b3V0QXR0cmlidXRlczo6ZW1wdHlWYWx1ZSgpIHx8IGl0LT52YWx1ZS55ICE9IFNW
R1RleHRMYXlvdXRBdHRyaWJ1dGVzOjplbXB0eVZhbHVlKCk7CiB9CiAKIFZpc2libGVQb3NpdGlv
biBSZW5kZXJTVkdJbmxpbmVUZXh0Ojpwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50
JiBwb2ludCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VGaWx0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKaW5kZXggZDVkNzkyZGVkNjBkZGY4NzUwYmEzZDg0YTU0
ZGY0OTViOTZhNjczYy4uYTFlOGI4YzFmOTdhNTgzMjNlNzIyMWNjYTM1MzM5NTI1YjY3ZDkzNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZUZpbHRlci5jcHAKQEAgLTMzOSw3ICszMzksNyBAQCB2b2lkIFJlbmRlclNWR1Jlc291
cmNlRmlsdGVyOjpwcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKFJlbmRlck9iamVjdCogb2JqZWN0
LCBjbwogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyogcHJpbWl0dmUg
PSBzdGF0aWNfY2FzdDxTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMqPihvYmpl
Y3QtPm5vZGUoKSk7CiAKICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIEZp
bHRlckRhdGEqIGZpbHRlckRhdGEgPSBpdC0+c2Vjb25kOworICAgICAgICBGaWx0ZXJEYXRhKiBm
aWx0ZXJEYXRhID0gaXQtPnZhbHVlOwogICAgICAgICBpZiAoIWZpbHRlckRhdGEtPmJ1aWxkZWQp
CiAgICAgICAgICAgICBjb250aW51ZTsKIApAQCAtMzU0LDcgKzM1NCw3IEBAIHZvaWQgUmVuZGVy
U1ZHUmVzb3VyY2VGaWx0ZXI6OnByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQoUmVuZGVyT2JqZWN0
KiBvYmplY3QsIGNvCiAgICAgICAgIGJ1aWxkZXItPmNsZWFyUmVzdWx0c1JlY3Vyc2l2ZShlZmZl
Y3QpOwogCiAgICAgICAgIC8vIFJlcGFpbnQgdGhlIGltYWdlIG9uIHRoZSBzY3JlZW4uCi0gICAg
ICAgIG1hcmtDbGllbnRGb3JJbnZhbGlkYXRpb24oaXQtPmZpcnN0LCBSZXBhaW50SW52YWxpZGF0
aW9uKTsKKyAgICAgICAgbWFya0NsaWVudEZvckludmFsaWRhdGlvbihpdC0+a2V5LCBSZXBhaW50
SW52YWxpZGF0aW9uKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwCmluZGV4IGY4ZjQ5
M2RiODVhMGRkYjdhNjljMWYxNmNiMTc1ZjcwYWQ5ZGNiODMuLjM1MzNiMzVjMTg2OWVmZTllNDVl
NWQwNzg1MzY1MzEyMDQ1YmQ4ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcApAQCAtMTQwLDcgKzE0
MCw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudDo6YXBwbHlSZXNvdXJjZShSZW5k
ZXJPYmplY3QqIG9iamVjdCwgUmVuZGVyU3R5bGUqCiAgICAgaWYgKGdyYWRpZW50VW5pdHMoKSA9
PSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1ggJiYgb2JqZWN0
Qm91bmRpbmdCb3guaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBPd25Q
dHI8R3JhZGllbnREYXRhPiYgZ3JhZGllbnREYXRhID0gbV9ncmFkaWVudE1hcC5hZGQob2JqZWN0
LCBudWxscHRyKS5pdGVyYXRvci0+c2Vjb25kOworICAgIE93blB0cjxHcmFkaWVudERhdGE+JiBn
cmFkaWVudERhdGEgPSBtX2dyYWRpZW50TWFwLmFkZChvYmplY3QsIG51bGxwdHIpLml0ZXJhdG9y
LT52YWx1ZTsKICAgICBpZiAoIWdyYWRpZW50RGF0YSkKICAgICAgICAgZ3JhZGllbnREYXRhID0g
YWRvcHRQdHIobmV3IEdyYWRpZW50RGF0YSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcAppbmRleCA0ZGM1
MDFiODA2YjNkOGRmMjU0NzQ1NDNiY2ZjZmYzODc2MGQ2MjY5Li41YjM4M2UyM2E0MjQ1OTQ3MzBj
Zjk3NzBiMTIxM2FhMjc1YmRjYTg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwCkBAIC04Myw3ICs4Myw3
IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuOjphcHBseVJlc291cmNlKFJlbmRlck9i
amVjdCogb2JqZWN0LCBSZW5kZXJTdHlsZSoKICAgICBpZiAobV9hdHRyaWJ1dGVzLnBhdHRlcm5V
bml0cygpID09IFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCAm
JiBvYmplY3RCb3VuZGluZ0JveC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIE93blB0cjxQYXR0ZXJuRGF0YT4mIHBhdHRlcm5EYXRhID0gbV9wYXR0ZXJuTWFwLmFkZChv
YmplY3QsIG51bGxwdHIpLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgT3duUHRyPFBhdHRlcm5EYXRh
PiYgcGF0dGVybkRhdGEgPSBtX3BhdHRlcm5NYXAuYWRkKG9iamVjdCwgbnVsbHB0cikuaXRlcmF0
b3ItPnZhbHVlOwogICAgIGlmICghcGF0dGVybkRhdGEpCiAgICAgICAgIHBhdHRlcm5EYXRhID0g
YWRvcHRQdHIobmV3IFBhdHRlcm5EYXRhKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXNDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR1Jlc291cmNlc0NhY2hlLmNwcAppbmRleCAwM2U2YzdiNGJlNTZmNTA5YzEy
MWJiYTU1ZWQyMmQ2NTM5MGM4OWY4Li4wMDczYjczNTRkMTE5ZTc0MDI2N2MwNzEzZGNkMTY5NTQz
MTNhOWVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jlc291
cmNlc0NhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jlc291
cmNlc0NhY2hlLmNwcApAQCAtMTcyLDExICsxNzIsMTEgQEAgdm9pZCBTVkdSZXNvdXJjZXNDYWNo
ZTo6cmVzb3VyY2VEZXN0cm95ZWQoUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqIHJlc291cmNl
KQogCiAgICAgSGFzaE1hcDxSZW5kZXJPYmplY3QqLCBTVkdSZXNvdXJjZXMqPjo6aXRlcmF0b3Ig
ZW5kID0gY2FjaGUtPm1fY2FjaGUuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPFJlbmRlck9iamVj
dCosIFNWR1Jlc291cmNlcyo+OjppdGVyYXRvciBpdCA9IGNhY2hlLT5tX2NhY2hlLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpdC0+c2Vjb25kLT5yZXNvdXJjZURlc3Ryb3ll
ZChyZXNvdXJjZSk7CisgICAgICAgIGl0LT52YWx1ZS0+cmVzb3VyY2VEZXN0cm95ZWQocmVzb3Vy
Y2UpOwogCiAgICAgICAgIC8vIE1hcmsgdXNlcnMgb2YgZGVzdHJveWVkIHJlc291cmNlcyBhcyBw
ZW5kaW5nIHJlc29sdXRpb24gYmFzZWQgb24gdGhlIGlkIG9mIHRoZSBvbGQgcmVzb3VyY2UuCiAg
ICAgICAgIEVsZW1lbnQqIHJlc291cmNlRWxlbWVudCA9IHRvRWxlbWVudChyZXNvdXJjZS0+bm9k
ZSgpKTsKLSAgICAgICAgU1ZHU3R5bGVkRWxlbWVudCogY2xpZW50RWxlbWVudCA9IHRvU1ZHU3R5
bGVkRWxlbWVudChpdC0+Zmlyc3QtPm5vZGUoKSk7CisgICAgICAgIFNWR1N0eWxlZEVsZW1lbnQq
IGNsaWVudEVsZW1lbnQgPSB0b1NWR1N0eWxlZEVsZW1lbnQoaXQtPmtleS0+bm9kZSgpKTsKICAg
ICAgICAgU1ZHRG9jdW1lbnRFeHRlbnNpb25zKiBleHRlbnNpb25zID0gY2xpZW50RWxlbWVudC0+
ZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpOwogCiAgICAgICAgIGV4dGVuc2lvbnMt
PmFkZFBlbmRpbmdSZXNvdXJjZShyZXNvdXJjZUVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoSFRN
TE5hbWVzOjppZEF0dHIpLCBjbGllbnRFbGVtZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHUm9vdElubGluZUJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR1Jvb3RJbmxpbmVCb3guY3BwCmluZGV4IDU3MTQ2YzkwYzgzOGFiNjUz
M2E0M2U3MzgwNTZlMzgyZTVlODVjOWYuLmE0MjhjNjE0ZGRmMTI0NWEwMzg1OGU1MzVjMTIwMDBk
YzY3OGM3MzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUm9v
dElubGluZUJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSb290
SW5saW5lQm94LmNwcApAQCAtMjI3LDE3ICsyMjcsMTcgQEAgc3RhdGljIGlubGluZSB2b2lkIHN3
YXBJdGVtc0luTGF5b3V0QXR0cmlidXRlcyhTVkdUZXh0TGF5b3V0QXR0cmlidXRlcyogZmlyc3RB
dHQKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGZpcnN0UHJlc2VudCAmJiBsYXN0UHJlc2Vu
dCkgewotICAgICAgICBzdGQ6OnN3YXAoaXRGaXJzdC0+c2Vjb25kLCBpdExhc3QtPnNlY29uZCk7
CisgICAgICAgIHN0ZDo6c3dhcChpdEZpcnN0LT52YWx1ZSwgaXRMYXN0LT52YWx1ZSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoZmlyc3RQcmVzZW50ICYmICFsYXN0UHJlc2Vu
dCkgewotICAgICAgICBsYXN0QXR0cmlidXRlcy0+Y2hhcmFjdGVyRGF0YU1hcCgpLnNldChsYXN0
UG9zaXRpb24gKyAxLCBpdEZpcnN0LT5zZWNvbmQpOworICAgICAgICBsYXN0QXR0cmlidXRlcy0+
Y2hhcmFjdGVyRGF0YU1hcCgpLnNldChsYXN0UG9zaXRpb24gKyAxLCBpdEZpcnN0LT52YWx1ZSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICAvLyAhZmlyc3RQcmVzZW50ICYmIGxhc3RQ
cmVzZW50Ci0gICAgZmlyc3RBdHRyaWJ1dGVzLT5jaGFyYWN0ZXJEYXRhTWFwKCkuc2V0KGZpcnN0
UG9zaXRpb24gKyAxLCBpdExhc3QtPnNlY29uZCk7CisgICAgZmlyc3RBdHRyaWJ1dGVzLT5jaGFy
YWN0ZXJEYXRhTWFwKCkuc2V0KGZpcnN0UG9zaXRpb24gKyAxLCBpdExhc3QtPnZhbHVlKTsKIH0K
IAogc3RhdGljIGlubGluZSB2b2lkIGZpbmRGaXJzdEFuZExhc3RBdHRyaWJ1dGVzSW5WZWN0b3Io
VmVjdG9yPFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzKj4mIGF0dHJpYnV0ZXMsIFJlbmRlclNWR0lu
bGluZVRleHQqIGZpcnN0Q29udGV4dCwgUmVuZGVyU1ZHSW5saW5lVGV4dCogbGFzdENvbnRleHQs
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRB
dHRyaWJ1dGVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91
dEF0dHJpYnV0ZXMuY3BwCmluZGV4IGE5MjU5NmNlZWVkYmUyNWFmNzc3ZGY0YTRjODNjZDNlZjk3
YjljZTguLjY3ZmEwZmE5ODJhZDYwYmE3MjY1MWE4NDU0OTU4MWY3ZWI1MGNkMGEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEF0dHJpYnV0ZXMu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEF0dHJp
YnV0ZXMuY3BwCkBAIC02Miw4ICs2Miw4IEBAIHZvaWQgU1ZHVGV4dExheW91dEF0dHJpYnV0ZXM6
OmR1bXAoKSBjb25zdAogICAgIGZwcmludGYoc3RkZXJyLCAiY29udGV4dDogJXBcbiIsIG1fY29u
dGV4dCk7CiAgICAgY29uc3QgU1ZHQ2hhcmFjdGVyRGF0YU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gbV9jaGFyYWN0ZXJEYXRhTWFwLmVuZCgpOwogICAgIGZvciAoU1ZHQ2hhcmFjdGVyRGF0YU1h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2NoYXJhY3RlckRhdGFNYXAuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IFNWR0NoYXJhY3RlckRhdGEmIGRhdGEgPSBpdC0+
c2Vjb25kOwotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAtLS0+IHBvcz0laSwgZGF0YT17Iiwg
aXQtPmZpcnN0KTsKKyAgICAgICAgY29uc3QgU1ZHQ2hhcmFjdGVyRGF0YSYgZGF0YSA9IGl0LT52
YWx1ZTsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIgLS0tPiBwb3M9JWksIGRhdGE9eyIsIGl0
LT5rZXkpOwogICAgICAgICBkdW1wU1ZHQ2hhcmFjdGVyRGF0YU1hcFZhbHVlKCJ4IiwgZGF0YS54
KTsKICAgICAgICAgZHVtcFNWR0NoYXJhY3RlckRhdGFNYXBWYWx1ZSgieSIsIGRhdGEueSk7CiAg
ICAgICAgIGR1bXBTVkdDaGFyYWN0ZXJEYXRhTWFwVmFsdWUoImR4IiwgZGF0YS5keCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1
dGVzQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlv
dXRBdHRyaWJ1dGVzQnVpbGRlci5jcHAKaW5kZXggMDJhMjEyM2ViNjY3ZWNjZjczZjA4MGY2YmI0
ZTZmZWNhNWQyZjNlNi4uZjIwOWVlNDhiMTVlNWU5OTI1YWQ2NzU1YmNjNDQ3NjVlNGRiNWZiZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0
cmlidXRlc0J1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
VGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyLmNwcApAQCAtMTYyLDcgKzE2Miw3IEBAIHZvaWQg
U1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyOjpidWlsZExheW91dEF0dHJpYnV0ZXMoUmVu
ZGVyU1ZHVGV4dCogdGV4dFJvCiAgICAgICAgIGRhdGEueSA9IDA7CiAgICAgICAgIG1fY2hhcmFj
dGVyRGF0YU1hcC5zZXQoMSwgZGF0YSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgU1ZHQ2hhcmFj
dGVyRGF0YSYgZGF0YSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFNWR0NoYXJhY3RlckRhdGEmIGRh
dGEgPSBpdC0+dmFsdWU7CiAgICAgICAgIGlmIChkYXRhLnggPT0gU1ZHVGV4dExheW91dEF0dHJp
YnV0ZXM6OmVtcHR5VmFsdWUoKSkKICAgICAgICAgICAgIGRhdGEueCA9IDA7CiAgICAgICAgIGlm
IChkYXRhLnkgPT0gU1ZHVGV4dExheW91dEF0dHJpYnV0ZXM6OmVtcHR5VmFsdWUoKSkKQEAgLTIz
MSw3ICsyMzEsNyBAQCB2b2lkIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlcjo6ZmlsbENo
YXJhY3RlckRhdGFNYXAoY29uc3QgVGV4dFBvc2l0aW9uJiBwbwogICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgIH0KIAotICAgICAgICB1cGRhdGVDaGFyYWN0ZXJEYXRhKGksIGxhc3RSb3Rh
dGlvbiwgaXQtPnNlY29uZCwgbGVuZ3RoQ29udGV4dCwgeExpc3RQdHIsIHlMaXN0UHRyLCBkeExp
c3RQdHIsIGR5TGlzdFB0ciwgcm90YXRlTGlzdFB0cik7CisgICAgICAgIHVwZGF0ZUNoYXJhY3Rl
ckRhdGEoaSwgbGFzdFJvdGF0aW9uLCBpdC0+dmFsdWUsIGxlbmd0aENvbnRleHQsIHhMaXN0UHRy
LCB5TGlzdFB0ciwgZHhMaXN0UHRyLCBkeUxpc3RQdHIsIHJvdGF0ZUxpc3RQdHIpOwogICAgIH0K
IAogICAgIC8vIFRoZSBsYXN0IHJvdGF0aW9uIHZhbHVlIGFsd2F5cyBzcGFucyB0aGUgd2hvbGUg
c2NvcGUuCkBAIC0yNDcsNyArMjQ3LDcgQEAgdm9pZCBTVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1
aWxkZXI6OmZpbGxDaGFyYWN0ZXJEYXRhTWFwKGNvbnN0IFRleHRQb3NpdGlvbiYgcG8KICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgaXQtPnNlY29uZC5yb3RhdGUg
PSBsYXN0Um90YXRpb247CisgICAgICAgIGl0LT52YWx1ZS5yb3RhdGUgPSBsYXN0Um90YXRpb247
CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1RleHRMYXlvdXRFbmdpbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdU
ZXh0TGF5b3V0RW5naW5lLmNwcAppbmRleCA1YzU0OWIyMWM4NzUyMDg0NzI0NmFmMjU0ZmQwNTlm
MmUzYjliNWU4Li5iYTJiNzYzOWQzZjk1YjczODk0NzVmYTJkYzAwYzlhNmFhODViMzE1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2lu
ZS5jcHAKQEAgLTQ3NSw3ICs0NzUsNyBAQCB2b2lkIFNWR1RleHRMYXlvdXRFbmdpbmU6OmxheW91
dFRleHRPbkxpbmVPclBhdGgoU1ZHSW5saW5lVGV4dEJveCogdGV4dEJveCwgUmVuZAogICAgICAg
ICBTVkdDaGFyYWN0ZXJEYXRhIGRhdGE7CiAgICAgICAgIFNWR0NoYXJhY3RlckRhdGFNYXA6Oml0
ZXJhdG9yIGl0ID0gY2hhcmFjdGVyRGF0YU1hcC5maW5kKG1fbG9naWNhbENoYXJhY3Rlck9mZnNl
dCArIDEpOwogICAgICAgICBpZiAoaXQgIT0gY2hhcmFjdGVyRGF0YU1hcC5lbmQoKSkKLSAgICAg
ICAgICAgIGRhdGEgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgZGF0YSA9IGl0LT52YWx1ZTsK
IAogICAgICAgICBmbG9hdCB4ID0gZGF0YS54OwogICAgICAgICBmbG9hdCB5ID0gZGF0YS55Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljc0J1
aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljc0J1
aWxkZXIuY3BwCmluZGV4IGM5NGYwYzc0YTRiNjliOGVlYzY2MDU2YWRjMGJiZjExNmI2ZTQ2OWYu
LmQwOTc5YjFkOTdjOTNmZTM2OTk4YzdjYTFkNWZkODE4Y2Y5YmNhZDEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3NCdWlsZGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNzQnVpbGRlci5jcHAK
QEAgLTE3MCw3ICsxNzAsNyBAQCB2b2lkIFNWR1RleHRNZXRyaWNzQnVpbGRlcjo6bWVhc3VyZVRl
eHRSZW5kZXJlcihSZW5kZXJTVkdJbmxpbmVUZXh0KiB0ZXh0LCBNZWFzdQogICAgICAgICAgICAg
aWYgKGRhdGEtPmFsbENoYXJhY3RlcnNNYXApIHsKICAgICAgICAgICAgICAgICBjb25zdCBTVkdD
aGFyYWN0ZXJEYXRhTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGRhdGEtPmFsbENoYXJhY3RlcnNN
YXAtPmZpbmQoZGF0YS0+dmFsdWVMaXN0UG9zaXRpb24gKyBtX3RleHRQb3NpdGlvbiAtIGRhdGEt
PnNraXBwZWRDaGFyYWN0ZXJzICsgMSk7CiAgICAgICAgICAgICAgICAgaWYgKGl0ICE9IGRhdGEt
PmFsbENoYXJhY3RlcnNNYXAtPmVuZCgpKQotICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVz
LT5jaGFyYWN0ZXJEYXRhTWFwKCkuc2V0KG1fdGV4dFBvc2l0aW9uICsgMSwgaXQtPnNlY29uZCk7
CisgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMtPmNoYXJhY3RlckRhdGFNYXAoKS5zZXQo
bV90ZXh0UG9zaXRpb24gKyAxLCBpdC0+dmFsdWUpOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgdGV4dE1ldHJpY3NWYWx1ZXMtPmFwcGVuZChtX2N1cnJlbnRNZXRyaWNzKTsKICAgICAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCmluZGV4IDMwNDkw
NTg2MzE2NWU4NjMyNDM0MGNlOGRiZWZiYjBhNzZiMzc0ZjkuLjJmOTgxY2ViOTVmNTA2ODhmYTUy
NTFiYzA1ODk1Mjc1ZTVhNjUxOGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
U3RvcmFnZUFyZWFTeW5jLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VB
cmVhU3luYy5jcHAKQEAgLTE4OCw3ICsxODgsNyBAQCB2b2lkIFN0b3JhZ2VBcmVhU3luYzo6c3lu
Y1RpbWVyRmlyZWQoVGltZXI8U3RvcmFnZUFyZWFTeW5jPiopCiAgICAgICAgICAgICAgICAgcGFy
dGlhbFN5bmMgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgbV9pdGVtc1BlbmRpbmdTeW5jLnNldChjaGFuZ2VkX2l0LT5maXJzdC5pc29s
YXRlZENvcHkoKSwgY2hhbmdlZF9pdC0+c2Vjb25kLmlzb2xhdGVkQ29weSgpKTsKKyAgICAgICAg
ICAgIG1faXRlbXNQZW5kaW5nU3luYy5zZXQoY2hhbmdlZF9pdC0+a2V5Lmlzb2xhdGVkQ29weSgp
LCBjaGFuZ2VkX2l0LT52YWx1ZS5pc29sYXRlZENvcHkoKSk7CiAgICAgICAgIH0KIAogICAgICAg
ICBpZiAocGFydGlhbFN5bmMpIHsKQEAgLTE5OCw3ICsxOTgsNyBAQCB2b2lkIFN0b3JhZ2VBcmVh
U3luYzo6c3luY1RpbWVyRmlyZWQoVGltZXI8U3RvcmFnZUFyZWFTeW5jPiopCiAgICAgICAgICAg
ICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6aXRlcmF0b3IgcGVuZGluZ19pdCA9IG1faXRlbXNQ
ZW5kaW5nU3luYy5iZWdpbigpOwogICAgICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46
Oml0ZXJhdG9yIHBlbmRpbmdfZW5kID0gbV9pdGVtc1BlbmRpbmdTeW5jLmVuZCgpOwogICAgICAg
ICAgICAgZm9yICg7IHBlbmRpbmdfaXQgIT0gcGVuZGluZ19lbmQ7ICsrcGVuZGluZ19pdCkKLSAg
ICAgICAgICAgICAgICBtX2NoYW5nZWRJdGVtcy5yZW1vdmUocGVuZGluZ19pdC0+Zmlyc3QpOwor
ICAgICAgICAgICAgICAgIG1fY2hhbmdlZEl0ZW1zLnJlbW92ZShwZW5kaW5nX2l0LT5rZXkpOwog
ICAgICAgICB9CiAKICAgICAgICAgaWYgKCFtX3N5bmNTY2hlZHVsZWQpIHsKQEAgLTM0NSw3ICsz
NDUsNyBAQCB2b2lkIFN0b3JhZ2VBcmVhU3luYzo6cGVyZm9ybUltcG9ydCgpCiAgICAgSGFzaE1h
cDxTdHJpbmcsIFN0cmluZz46Oml0ZXJhdG9yIGVuZCA9IGl0ZW1NYXAuZW5kKCk7CiAKICAgICBm
b3IgKDsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBtX3N0b3JhZ2VBcmVhLT5pbXBvcnRJdGVt
KGl0LT5maXJzdCwgaXQtPnNlY29uZCk7CisgICAgICAgIG1fc3RvcmFnZUFyZWEtPmltcG9ydEl0
ZW0oaXQtPmtleSwgaXQtPnZhbHVlKTsKIAogICAgIG1hcmtJbXBvcnRlZCgpOwogfQpAQCAtNDMz
LDEzICs0MzMsMTMgQEAgdm9pZCBTdG9yYWdlQXJlYVN5bmM6OnN5bmMoYm9vbCBjbGVhckl0ZW1z
LCBjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgaXRlbXMKICAgICB0cmFuc2FjdGlvbi5i
ZWdpbigpOwogICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gaXRlbXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIC8vIEJhc2Vk
IG9uIHRoZSBudWxsLW5lc3Mgb2YgdGhlIHNlY29uZCBhcmd1bWVudCwgZGVjaWRlIHdoZXRoZXIg
dGhpcyBpcyBhbiBpbnNlcnQgb3IgYSBkZWxldGUuCi0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCYg
cXVlcnkgPSBpdC0+c2Vjb25kLmlzTnVsbCgpID8gcmVtb3ZlIDogaW5zZXJ0OworICAgICAgICBT
UUxpdGVTdGF0ZW1lbnQmIHF1ZXJ5ID0gaXQtPnZhbHVlLmlzTnVsbCgpID8gcmVtb3ZlIDogaW5z
ZXJ0OwogCi0gICAgICAgIHF1ZXJ5LmJpbmRUZXh0KDEsIGl0LT5maXJzdCk7CisgICAgICAgIHF1
ZXJ5LmJpbmRUZXh0KDEsIGl0LT5rZXkpOwogCiAgICAgICAgIC8vIElmIHRoZSBzZWNvbmQgYXJn
dW1lbnQgaXMgbm9uLW51bGwsIHdlJ3JlIGRvaW5nIGFuIGluc2VydCwgc28gYmluZCBpdCBhcyB0
aGUgdmFsdWUuCi0gICAgICAgIGlmICghaXQtPnNlY29uZC5pc051bGwoKSkKLSAgICAgICAgICAg
IHF1ZXJ5LmJpbmRCbG9iKDIsIGl0LT5zZWNvbmQpOworICAgICAgICBpZiAoIWl0LT52YWx1ZS5p
c051bGwoKSkKKyAgICAgICAgICAgIHF1ZXJ5LmJpbmRCbG9iKDIsIGl0LT52YWx1ZSk7CiAKICAg
ICAgICAgaW50IHJlc3VsdCA9IHF1ZXJ5LnN0ZXAoKTsKICAgICAgICAgaWYgKHJlc3VsdCAhPSBT
UUxSZXN1bHREb25lKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3Jh
Z2VNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTWFwLmNwcAppbmRleCA4
ZTQyZDJmMTc2ZGQzYjExMTJhMDFhNTFkOGRiNjJmNGIzOGJiYTM1Li40MGUxYTM4ZjFjYTRhNzlm
MGNlMjQ3MDExNTM0N2FkYjkyOWY0OTgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL1N0b3JhZ2VNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU1h
cC5jcHAKQEAgLTg5LDcgKzg5LDcgQEAgU3RyaW5nIFN0b3JhZ2VNYXA6OmtleSh1bnNpZ25lZCBp
bmRleCkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCiAgICAgc2V0SXRlcmF0b3JUb0luZGV4
KGluZGV4KTsKLSAgICByZXR1cm4gbV9pdGVyYXRvci0+Zmlyc3Q7CisgICAgcmV0dXJuIG1faXRl
cmF0b3ItPmtleTsKIH0KIAogU3RyaW5nIFN0b3JhZ2VNYXA6OmdldEl0ZW0oY29uc3QgU3RyaW5n
JiBrZXkpIGNvbnN0CkBAIC0xMzMsNyArMTMzLDcgQEAgUGFzc1JlZlB0cjxTdG9yYWdlTWFwPiBT
dG9yYWdlTWFwOjpzZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHUK
IAogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+OjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gbV9t
YXAuYWRkKGtleSwgdmFsdWUpOwogICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkpCi0gICAg
ICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gdmFsdWU7CisgICAgICAgIGFkZFJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUgPSB2YWx1ZTsKIAogICAgIGludmFsaWRhdGVJdGVyYXRvcigpOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBs
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwCmlu
ZGV4IDU0YjY0MGNlNTJmNWRhOTExZDcyZDZjNTc2MzBkYjUxNjVkY2RhYjMuLmM4YWMyYmQzYTgx
NDIxNjU0OWYwZjk5NTFlZDhkYTE3MTg1ODdiZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwCkBAIC01NSw3ICs1NSw3IEBAIFBhc3NSZWZQ
dHI8U3RvcmFnZU5hbWVzcGFjZT4gU3RvcmFnZU5hbWVzcGFjZUltcGw6OmxvY2FsU3RvcmFnZU5h
bWVzcGFjZShjb25zdCBTCiAgICAgICAgIHJldHVybiBzdG9yYWdlTmFtZXNwYWNlLnJlbGVhc2Uo
KTsKICAgICB9CiAKLSAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICByZXR1cm4gaXQtPnZhbHVl
OwogfQogCiBQYXNzUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IFN0b3JhZ2VOYW1lc3BhY2VJbXBs
OjpzZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSh1bnNpZ25lZCBxdW90YSkKQEAgLTk3LDcgKzk3LDcg
QEAgUGFzc1JlZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6Y29w
eSgpCiAKICAgICBTdG9yYWdlQXJlYU1hcDo6aXRlcmF0b3IgZW5kID0gbV9zdG9yYWdlQXJlYU1h
cC5lbmQoKTsKICAgICBmb3IgKFN0b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBpID0gbV9zdG9yYWdl
QXJlYU1hcC5iZWdpbigpOyBpICE9IGVuZDsgKytpKQotICAgICAgICBuZXdOYW1lc3BhY2UtPm1f
c3RvcmFnZUFyZWFNYXAuc2V0KGktPmZpcnN0LCBpLT5zZWNvbmQtPmNvcHkoKSk7CisgICAgICAg
IG5ld05hbWVzcGFjZS0+bV9zdG9yYWdlQXJlYU1hcC5zZXQoaS0+a2V5LCBpLT52YWx1ZS0+Y29w
eSgpKTsKICAgICByZXR1cm4gbmV3TmFtZXNwYWNlLnJlbGVhc2UoKTsKIH0KIApAQCAtMTMxLDcg
KzEzMSw3IEBAIHZvaWQgU3RvcmFnZU5hbWVzcGFjZUltcGw6OmNsb3NlKCkKIAogICAgIFN0b3Jh
Z2VBcmVhTWFwOjppdGVyYXRvciBlbmQgPSBtX3N0b3JhZ2VBcmVhTWFwLmVuZCgpOwogICAgIGZv
ciAoU3RvcmFnZUFyZWFNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zdG9yYWdlQXJlYU1hcC5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPmNsb3NlKCk7CisgICAgICAg
IGl0LT52YWx1ZS0+Y2xvc2UoKTsKIAogICAgIGlmIChtX3N5bmNNYW5hZ2VyKQogICAgICAgICBt
X3N5bmNNYW5hZ2VyLT5jbG9zZSgpOwpAQCAtMTU0LDcgKzE1NCw3IEBAIHZvaWQgU3RvcmFnZU5h
bWVzcGFjZUltcGw6OmNsZWFyQWxsT3JpZ2luc0ZvckRlbGV0aW9uKCkKIAogICAgIFN0b3JhZ2VB
cmVhTWFwOjppdGVyYXRvciBlbmQgPSBtX3N0b3JhZ2VBcmVhTWFwLmVuZCgpOwogICAgIGZvciAo
U3RvcmFnZUFyZWFNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zdG9yYWdlQXJlYU1hcC5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPmNsZWFyRm9yT3JpZ2luRGVsZXRp
b24oKTsKKyAgICAgICAgaXQtPnZhbHVlLT5jbGVhckZvck9yaWdpbkRlbGV0aW9uKCk7CiB9CiAg
ICAgCiB2b2lkIFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpzeW5jKCkKQEAgLTE2Miw3ICsxNjIsNyBA
QCB2b2lkIFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpzeW5jKCkKICAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOwogICAgIFN0b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBlbmQgPSBtX3N0b3JhZ2VBcmVh
TWFwLmVuZCgpOwogICAgIGZvciAoU3RvcmFnZUFyZWFNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zdG9y
YWdlQXJlYU1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQt
PnN5bmMoKTsKKyAgICAgICAgaXQtPnZhbHVlLT5zeW5jKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudEV4dGVu
c2lvbnMuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5jcHAK
aW5kZXggM2Y1OTcwNWIxNzE1NDM3YmJiNzc1ZTg5YzNiNDkyNDAzMGI2ODNjNS4uM2Q3ZDAyNzM5
ZDNkNjIzNGM1NTBkZGUxN2I4YzliZWRhOTExNTVkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5jcHAKQEAgLTE1Niw3ICsxNTYsNyBAQCB2b2lkIFNWR0Rv
Y3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlQW5pbWF0aW9uRWxlbWVudEZyb21UYXJnZXQoU1ZHU01J
TEVsZW1lbnQqIGFuaQogICAgIEhhc2hNYXA8U1ZHRWxlbWVudCosIEhhc2hTZXQ8U1ZHU01JTEVs
ZW1lbnQqPiogPjo6aXRlcmF0b3IgaXQgPSBtX2FuaW1hdGVkRWxlbWVudHMuZmluZCh0YXJnZXRF
bGVtZW50KTsKICAgICBBU1NFUlQoaXQgIT0gbV9hbmltYXRlZEVsZW1lbnRzLmVuZCgpKTsKICAg
ICAKLSAgICBIYXNoU2V0PFNWR1NNSUxFbGVtZW50Kj4qIGFuaW1hdGlvbkVsZW1lbnRzRm9yVGFy
Z2V0ID0gaXQtPnNlY29uZDsKKyAgICBIYXNoU2V0PFNWR1NNSUxFbGVtZW50Kj4qIGFuaW1hdGlv
bkVsZW1lbnRzRm9yVGFyZ2V0ID0gaXQtPnZhbHVlOwogICAgIEFTU0VSVCghYW5pbWF0aW9uRWxl
bWVudHNGb3JUYXJnZXQtPmlzRW1wdHkoKSk7CiAKICAgICBhbmltYXRpb25FbGVtZW50c0ZvclRh
cmdldC0+cmVtb3ZlKGFuaW1hdGlvbkVsZW1lbnQpOwpAQCAtMjEzLDkgKzIxMyw5IEBAIHZvaWQg
U1ZHRG9jdW1lbnRFeHRlbnNpb25zOjphZGRQZW5kaW5nUmVzb3VyY2UoY29uc3QgQXRvbWljU3Ry
aW5nJiBpZCwgU1ZHU3R5bGVkCiAKICAgICAvLyBUaGUgSGFzaE1hcCBhZGQgZnVuY3Rpb24gbGVh
dmVzIHRoZSBtYXAgYWxvbmUgYW5kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBlbGVtZW50IGlu
IHRoZQogICAgIC8vIG1hcCBpZiB0aGUgZWxlbWVudCBhbHJlYWR5IGV4aXN0cy4gU28gd2UgYWRk
IHdpdGggYSB2YWx1ZSBvZiAwLCBhbmQgaXQgZWl0aGVyIGZpbmRzIHRoZQotICAgIC8vIGV4aXN0
aW5nIGVsZW1lbnQgb3IgYWRkcyBhIG5ldyBvbmUgaW4gYSBzaW5nbGUgb3BlcmF0aW9uLiBUaGUg
Ii5pdGVyYXRvci0+c2Vjb25kIiBpZGlvbSBnZXRzCisgICAgLy8gZXhpc3RpbmcgZWxlbWVudCBv
ciBhZGRzIGEgbmV3IG9uZSBpbiBhIHNpbmdsZSBvcGVyYXRpb24uIFRoZSAiLml0ZXJhdG9yLT52
YWx1ZSIgaWRpb20gZ2V0cwogICAgIC8vIHVzIHRvIHRoZSBpdGVyYXRvciBmcm9tIGFkZCdzIHJl
c3VsdCwgYW5kIHRoZW4gdG8gdGhlIHZhbHVlIGluc2lkZSB0aGUgaGFzaCB0YWJsZS4KLSAgICBT
VkdQZW5kaW5nRWxlbWVudHMqJiBzZXQgPSBtX3BlbmRpbmdSZXNvdXJjZXMuYWRkKGlkLCAwKS5p
dGVyYXRvci0+c2Vjb25kOworICAgIFNWR1BlbmRpbmdFbGVtZW50cyomIHNldCA9IG1fcGVuZGlu
Z1Jlc291cmNlcy5hZGQoaWQsIDApLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoIXNldCkKICAg
ICAgICAgc2V0ID0gbmV3IFNWR1BlbmRpbmdFbGVtZW50czsKICAgICBzZXQtPmFkZChlbGVtZW50
KTsKQEAgLTI0MCw3ICsyNDAsNyBAQCBib29sIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6aXNFbGVt
ZW50UGVuZGluZ1Jlc291cmNlcyhTVkdTdHlsZWRFbGVtZW50KiBlbGVtZW50KQogCiAgICAgSGFz
aE1hcDxBdG9taWNTdHJpbmcsIFNWR1BlbmRpbmdFbGVtZW50cyo+Ojpjb25zdF9pdGVyYXRvciBl
bmQgPSBtX3BlbmRpbmdSZXNvdXJjZXMuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPEF0b21pY1N0
cmluZywgU1ZHUGVuZGluZ0VsZW1lbnRzKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wZW5kaW5n
UmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBTVkdQZW5kaW5n
RWxlbWVudHMqIGVsZW1lbnRzID0gaXQtPnNlY29uZDsKKyAgICAgICAgU1ZHUGVuZGluZ0VsZW1l
bnRzKiBlbGVtZW50cyA9IGl0LT52YWx1ZTsKICAgICAgICAgQVNTRVJUKGVsZW1lbnRzKTsKIAog
ICAgICAgICBpZiAoZWxlbWVudHMtPmNvbnRhaW5zKGVsZW1lbnQpKQpAQCAtMjY4LDEzICsyNjgs
MTMgQEAgdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlbW92ZUVsZW1lbnRGcm9tUGVuZGlu
Z1Jlc291cmNlcyhTVkdTdHlsZWRFbGVtZW50KgogICAgICAgICBWZWN0b3I8QXRvbWljU3RyaW5n
PiB0b0JlUmVtb3ZlZDsKICAgICAgICAgSGFzaE1hcDxBdG9taWNTdHJpbmcsIFNWR1BlbmRpbmdF
bGVtZW50cyo+OjppdGVyYXRvciBlbmQgPSBtX3BlbmRpbmdSZXNvdXJjZXMuZW5kKCk7CiAgICAg
ICAgIGZvciAoSGFzaE1hcDxBdG9taWNTdHJpbmcsIFNWR1BlbmRpbmdFbGVtZW50cyo+OjppdGVy
YXRvciBpdCA9IG1fcGVuZGluZ1Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
LSAgICAgICAgICAgIFNWR1BlbmRpbmdFbGVtZW50cyogZWxlbWVudHMgPSBpdC0+c2Vjb25kOwor
ICAgICAgICAgICAgU1ZHUGVuZGluZ0VsZW1lbnRzKiBlbGVtZW50cyA9IGl0LT52YWx1ZTsKICAg
ICAgICAgICAgIEFTU0VSVChlbGVtZW50cyk7CiAgICAgICAgICAgICBBU1NFUlQoIWVsZW1lbnRz
LT5pc0VtcHR5KCkpOwogCiAgICAgICAgICAgICBlbGVtZW50cy0+cmVtb3ZlKGVsZW1lbnQpOwog
ICAgICAgICAgICAgaWYgKGVsZW1lbnRzLT5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgdG9C
ZVJlbW92ZWQuYXBwZW5kKGl0LT5maXJzdCk7CisgICAgICAgICAgICAgICAgdG9CZVJlbW92ZWQu
YXBwZW5kKGl0LT5rZXkpOwogICAgICAgICB9CiAKICAgICAgICAgZWxlbWVudC0+Y2xlYXJIYXNQ
ZW5kaW5nUmVzb3VyY2VzSWZQb3NzaWJsZSgpOwpAQCAtMjkwLDEzICsyOTAsMTMgQEAgdm9pZCBT
VkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlbW92ZUVsZW1lbnRGcm9tUGVuZGluZ1Jlc291cmNlcyhT
VkdTdHlsZWRFbGVtZW50KgogICAgICAgICBWZWN0b3I8QXRvbWljU3RyaW5nPiB0b0JlUmVtb3Zl
ZDsKICAgICAgICAgSGFzaE1hcDxBdG9taWNTdHJpbmcsIFNWR1BlbmRpbmdFbGVtZW50cyo+Ojpp
dGVyYXRvciBlbmQgPSBtX3BlbmRpbmdSZXNvdXJjZXNGb3JSZW1vdmFsLmVuZCgpOwogICAgICAg
ICBmb3IgKEhhc2hNYXA8QXRvbWljU3RyaW5nLCBTVkdQZW5kaW5nRWxlbWVudHMqPjo6aXRlcmF0
b3IgaXQgPSBtX3BlbmRpbmdSZXNvdXJjZXNGb3JSZW1vdmFsLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgewotICAgICAgICAgICAgU1ZHUGVuZGluZ0VsZW1lbnRzKiBlbGVtZW50cyA9IGl0LT5z
ZWNvbmQ7CisgICAgICAgICAgICBTVkdQZW5kaW5nRWxlbWVudHMqIGVsZW1lbnRzID0gaXQtPnZh
bHVlOwogICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnRzKTsKICAgICAgICAgICAgIEFTU0VSVCgh
ZWxlbWVudHMtPmlzRW1wdHkoKSk7CiAKICAgICAgICAgICAgIGVsZW1lbnRzLT5yZW1vdmUoZWxl
bWVudCk7CiAgICAgICAgICAgICBpZiAoZWxlbWVudHMtPmlzRW1wdHkoKSkKLSAgICAgICAgICAg
ICAgICB0b0JlUmVtb3ZlZC5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgICAgICAgICB0b0Jl
UmVtb3ZlZC5hcHBlbmQoaXQtPmtleSk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBXZSB1c2Ug
dGhlIHJlbW92ZVBlbmRpbmdSZXNvdXJjZUZvclJlbW92YWwgZnVuY3Rpb24gaGVyZSBiZWNhdXNl
IGl0IGRlYWxzIHdpdGggc2V0IGxpZmV0aW1lIGNvcnJlY3RseS4KQEAgLTM1Niw3ICszNTYsNyBA
QCBIYXNoU2V0PFNWR0VsZW1lbnQqPiogU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpzZXRPZkVsZW1l
bnRzUmVmZXJlbmNpbmdUYXJnZXQoU1ZHRQogICAgIGNvbnN0IEhhc2hNYXA8U1ZHRWxlbWVudCos
IE93blB0cjxIYXNoU2V0PFNWR0VsZW1lbnQqPiA+ID46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9l
bGVtZW50RGVwZW5kZW5jaWVzLmZpbmQocmVmZXJlbmNlZEVsZW1lbnQpOwogICAgIGlmIChpdCA9
PSBtX2VsZW1lbnREZXBlbmRlbmNpZXMuZW5kKCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJl
dHVybiBpdC0+c2Vjb25kLmdldCgpOworICAgIHJldHVybiBpdC0+dmFsdWUuZ2V0KCk7CiB9CiAK
IHZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjphZGRFbGVtZW50UmVmZXJlbmNpbmdUYXJnZXQo
U1ZHRWxlbWVudCogcmVmZXJlbmNpbmdFbGVtZW50LCBTVkdFbGVtZW50KiByZWZlcmVuY2VkRWxl
bWVudCkKQEAgLTM4MCw4ICszODAsOCBAQCB2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVt
b3ZlQWxsVGFyZ2V0UmVmZXJlbmNlc0ZvckVsZW1lbnQoU1ZHRWxlbWVudCogcmVmZQogCiAgICAg
SGFzaE1hcDxTVkdFbGVtZW50KiwgT3duUHRyPEhhc2hTZXQ8U1ZHRWxlbWVudCo+ID4gPjo6aXRl
cmF0b3IgZW5kID0gbV9lbGVtZW50RGVwZW5kZW5jaWVzLmVuZCgpOwogICAgIGZvciAoSGFzaE1h
cDxTVkdFbGVtZW50KiwgT3duUHRyPEhhc2hTZXQ8U1ZHRWxlbWVudCo+ID4gPjo6aXRlcmF0b3Ig
aXQgPSBtX2VsZW1lbnREZXBlbmRlbmNpZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0g
ICAgICAgIFNWR0VsZW1lbnQqIHJlZmVyZW5jZWRFbGVtZW50ID0gaXQtPmZpcnN0OwotICAgICAg
ICBIYXNoU2V0PFNWR0VsZW1lbnQqPiogcmVmZXJlbmNpbmdFbGVtZW50cyA9IGl0LT5zZWNvbmQu
Z2V0KCk7CisgICAgICAgIFNWR0VsZW1lbnQqIHJlZmVyZW5jZWRFbGVtZW50ID0gaXQtPmtleTsK
KyAgICAgICAgSGFzaFNldDxTVkdFbGVtZW50Kj4qIHJlZmVyZW5jaW5nRWxlbWVudHMgPSBpdC0+
dmFsdWUuZ2V0KCk7CiAgICAgICAgIEhhc2hTZXQ8U1ZHRWxlbWVudCo+OjppdGVyYXRvciBzZXRJ
dCA9IHJlZmVyZW5jaW5nRWxlbWVudHMtPmZpbmQocmVmZXJlbmNpbmdFbGVtZW50KTsKICAgICAg
ICAgaWYgKHNldEl0ID09IHJlZmVyZW5jaW5nRWxlbWVudHMtPmVuZCgpKQogICAgICAgICAgICAg
Y29udGludWU7CkBAIC00MDIsMTAgKzQwMiwxMCBAQCB2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9u
czo6cmVtb3ZlQWxsRWxlbWVudFJlZmVyZW5jZXNGb3JUYXJnZXQoU1ZHRWxlbWVudCogcmVmZQog
ICAgIEhhc2hNYXA8U1ZHRWxlbWVudCosIE93blB0cjxIYXNoU2V0PFNWR0VsZW1lbnQqPiA+ID46
Oml0ZXJhdG9yIGl0ID0gbV9lbGVtZW50RGVwZW5kZW5jaWVzLmZpbmQocmVmZXJlbmNlZEVsZW1l
bnQpOwogICAgIGlmIChpdCA9PSBtX2VsZW1lbnREZXBlbmRlbmNpZXMuZW5kKCkpCiAgICAgICAg
IHJldHVybjsKLSAgICBBU1NFUlQoaXQtPmZpcnN0ID09IHJlZmVyZW5jZWRFbGVtZW50KTsKKyAg
ICBBU1NFUlQoaXQtPmtleSA9PSByZWZlcmVuY2VkRWxlbWVudCk7CiAgICAgVmVjdG9yPFNWR0Vs
ZW1lbnQqPiB0b0JlTm90aWZpZWQ7CiAKLSAgICBIYXNoU2V0PFNWR0VsZW1lbnQqPiogcmVmZXJl
bmNpbmdFbGVtZW50cyA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgSGFzaFNldDxTVkdFbGVtZW50
Kj4qIHJlZmVyZW5jaW5nRWxlbWVudHMgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgSGFzaFNldDxT
VkdFbGVtZW50Kj46Oml0ZXJhdG9yIHNldEVuZCA9IHJlZmVyZW5jaW5nRWxlbWVudHMtPmVuZCgp
OwogICAgIGZvciAoSGFzaFNldDxTVkdFbGVtZW50Kj46Oml0ZXJhdG9yIHNldEl0ID0gcmVmZXJl
bmNpbmdFbGVtZW50cy0+YmVnaW4oKTsgc2V0SXQgIT0gc2V0RW5kOyArK3NldEl0KQogICAgICAg
ICB0b0JlTm90aWZpZWQuYXBwZW5kKCpzZXRJdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAK
aW5kZXggZTNiNWU2OTA5YTgxZjc0YmI0ZDk4NmU5MGZiMmMwODczNmIyYzhjYy4uNGM2MmIyNDFi
NmRlM2RjOWM3NGJmZTY3MzA2YmZkMThkZjkyMzAyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50
LmNwcApAQCAtNzcsNyArNzcsNyBAQCBTVkdFbGVtZW50Ojp+U1ZHRWxlbWVudCgpCiAgICAgICAg
IFNWR0VsZW1lbnRSYXJlRGF0YTo6U1ZHRWxlbWVudFJhcmVEYXRhTWFwOjppdGVyYXRvciBpdCA9
IHJhcmVEYXRhTWFwLmZpbmQodGhpcyk7CiAgICAgICAgIEFTU0VSVChpdCAhPSByYXJlRGF0YU1h
cC5lbmQoKSk7CiAKLSAgICAgICAgU1ZHRWxlbWVudFJhcmVEYXRhKiByYXJlRGF0YSA9IGl0LT5z
ZWNvbmQ7CisgICAgICAgIFNWR0VsZW1lbnRSYXJlRGF0YSogcmFyZURhdGEgPSBpdC0+dmFsdWU7
CiAgICAgICAgIHJhcmVEYXRhLT5kZXN0cm95QW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzKCk7
CiAgICAgICAgIGlmIChTVkdDdXJzb3JFbGVtZW50KiBjdXJzb3JFbGVtZW50ID0gcmFyZURhdGEt
PmN1cnNvckVsZW1lbnQoKSkKICAgICAgICAgICAgIGN1cnNvckVsZW1lbnQtPnJlbW92ZUNsaWVu
dCh0aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRp
bWVDb250YWluZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNv
bnRhaW5lci5jcHAKaW5kZXggYzQ5NjM4Mzg5ODU3ZTA1ZTk3OTA3ZGMwMzhmNzhlMGEyZTkzODdm
OC4uMzI3ZDIyN2E3OTU1MzA1YjNkMDFkY2I4MTgyZDUyYTgxNjFkNzU5NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNvbnRhaW5lci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNvbnRhaW5lci5jcHAKQEAgLTIx
MSw3ICsyMTEsNyBAQCBTdHJpbmcgU01JTFRpbWVDb250YWluZXI6OmJhc2VWYWx1ZUZvcihFbGVt
ZW50QXR0cmlidXRlUGFpciBrZXkpCiAgICAgLy8gQ3VycmVudGx5IGFuaW1hdGlvbiBvdmVyd3Jp
dGVzIHRoZW0gc28gd2UgbmVlZCB0byBzYXZlIHRoZW0gc29tZXdoZXJlLgogICAgIEJhc2VWYWx1
ZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3NhdmVkQmFzZVZhbHVlcy5maW5kKGtleSk7CiAgICAgaWYg
KGl0ICE9IG1fc2F2ZWRCYXNlVmFsdWVzLmVuZCgpKQotICAgICAgICByZXR1cm4gaXQtPnNlY29u
ZDsKKyAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKICAgICAKICAgICBTVkdFbGVtZW50KiB0YXJn
ZXRFbGVtZW50ID0ga2V5LmZpcnN0OwogICAgIFF1YWxpZmllZE5hbWUgYXR0cmlidXRlTmFtZSA9
IGtleS5zZWNvbmQ7CkBAIC0yODQsNyArMjg0LDcgQEAgdm9pZCBTTUlMVGltZUNvbnRhaW5lcjo6
dXBkYXRlQW5pbWF0aW9ucyhTTUlMVGltZSBlbGFwc2VkKQogICAgIFZlY3RvcjxTVkdTTUlMRWxl
bWVudCo+IGFuaW1hdGlvbnNUb0FwcGx5OwogICAgIFJlc3VsdEVsZW1lbnRNYXA6Oml0ZXJhdG9y
IGVuZCA9IHJlc3VsdHNFbGVtZW50cy5lbmQoKTsKICAgICBmb3IgKFJlc3VsdEVsZW1lbnRNYXA6
Oml0ZXJhdG9yIGl0ID0gcmVzdWx0c0VsZW1lbnRzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkK
LSAgICAgICAgYW5pbWF0aW9uc1RvQXBwbHkuYXBwZW5kKGl0LT5zZWNvbmQuZ2V0KCkpOworICAg
ICAgICBhbmltYXRpb25zVG9BcHBseS5hcHBlbmQoaXQtPnZhbHVlLmdldCgpKTsKIAogICAgIC8v
IFNvcnQgPGFuaW1hdGVUcmFuZm9ybT4gdG8gYmUgdGhlIGxhc3Qgb25lIHRvIGJlIGFwcGxpZWQu
IDxhbmltYXRlPiBtYXkgY2hhbmdlIHRyYW5zZm9ybSBhdHRyaWJ1dGUgYXMKICAgICAvLyB3ZWxs
IChkaXJlY3RseSBvciBpbmRpcmVjdGx5IGJ5IG1vZGlmeWluZyA8dXNlPiB4L3kpIGFuZCB0aGlz
IHdheSB0cmFuc2Zvcm1zIGNvbWJpbmUgcHJvcGVybHkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvU1ZHSW1hZ2VDYWNoZS5jcHAKaW5kZXggMjg2OWY2MWU0NWFhY2Y3ZGVhNWM0OGEw
ZTljNjFiY2M2ZTRjYmU3ZC4uNzcyMDVjOWEwYzg1NTQ0NGUzMWJiZjY5ODNlYmE1ZmNmZmMxOWVi
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlQ2FjaGUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZUNhY2hlLmNwcApA
QCAtNDIsNyArNDIsNyBAQCBTVkdJbWFnZUNhY2hlOjp+U1ZHSW1hZ2VDYWNoZSgpCiAKICAgICBJ
bWFnZURhdGFNYXA6Oml0ZXJhdG9yIGVuZCA9IG1faW1hZ2VEYXRhTWFwLmVuZCgpOwogICAgIGZv
ciAoSW1hZ2VEYXRhTWFwOjppdGVyYXRvciBpdCA9IG1faW1hZ2VEYXRhTWFwLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkKLSAgICAgICAgZGVsZXRlIGl0LT5zZWNvbmQuYnVmZmVyOworICAgICAg
ICBkZWxldGUgaXQtPnZhbHVlLmJ1ZmZlcjsKIAogICAgIG1faW1hZ2VEYXRhTWFwLmNsZWFyKCk7
CiB9CkBAIC01Niw3ICs1Niw3IEBAIHZvaWQgU1ZHSW1hZ2VDYWNoZTo6cmVtb3ZlUmVuZGVyZXJG
cm9tQ2FjaGUoY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKICAgICBpZiAoaXQgPT0gbV9p
bWFnZURhdGFNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGRlbGV0ZSBpdC0+c2Vj
b25kLmJ1ZmZlcjsKKyAgICBkZWxldGUgaXQtPnZhbHVlLmJ1ZmZlcjsKICAgICBtX2ltYWdlRGF0
YU1hcC5yZW1vdmUoaXQpOwogfQogCkBAIC03MywxNCArNzMsMTQgQEAgU1ZHSW1hZ2VDYWNoZTo6
U2l6ZUFuZFpvb20gU1ZHSW1hZ2VDYWNoZTo6cmVxdWVzdGVkU2l6ZUFuZFpvb20oY29uc3QgUmVu
ZGVyT2JqZWMKICAgICBTaXplQW5kWm9vbU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3NpemVB
bmRab29tTWFwLmZpbmQocmVuZGVyZXIpOwogICAgIGlmIChpdCA9PSBtX3NpemVBbmRab29tTWFw
LmVuZCgpKQogICAgICAgICByZXR1cm4gU2l6ZUFuZFpvb20oKTsKLSAgICByZXR1cm4gaXQtPnNl
Y29uZDsKKyAgICByZXR1cm4gaXQtPnZhbHVlOwogfQogCiB2b2lkIFNWR0ltYWdlQ2FjaGU6Omlt
YWdlQ29udGVudENoYW5nZWQoKQogewogICAgIEltYWdlRGF0YU1hcDo6aXRlcmF0b3IgZW5kID0g
bV9pbWFnZURhdGFNYXAuZW5kKCk7CiAgICAgZm9yIChJbWFnZURhdGFNYXA6Oml0ZXJhdG9yIGl0
ID0gbV9pbWFnZURhdGFNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+
c2Vjb25kLmltYWdlTmVlZHNVcGRhdGUgPSB0cnVlOworICAgICAgICBpdC0+dmFsdWUuaW1hZ2VO
ZWVkc1VwZGF0ZSA9IHRydWU7CiAKICAgICAvLyBJZiB3ZSdyZSBpbiB0aGUgbWlkZGxlIG9mIGxh
eW91dCwgc3RhcnQgcmVkcmF3aW5nIGRpcnR5CiAgICAgLy8gaW1hZ2VzIG9uIGEgdGltZXI7IG90
aGVyd2lzZSBpdCdzIHNhZmUgdG8gZHJhdyBpbW1lZGlhdGVseS4KQEAgLTk2LDcgKzk2LDcgQEAg
dm9pZCBTVkdJbWFnZUNhY2hlOjpyZWRyYXcoKQogewogICAgIEltYWdlRGF0YU1hcDo6aXRlcmF0
b3IgZW5kID0gbV9pbWFnZURhdGFNYXAuZW5kKCk7CiAgICAgZm9yIChJbWFnZURhdGFNYXA6Oml0
ZXJhdG9yIGl0ID0gbV9pbWFnZURhdGFNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0g
ICAgICAgIEltYWdlRGF0YSYgZGF0YSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIEltYWdlRGF0YSYg
ZGF0YSA9IGl0LT52YWx1ZTsKICAgICAgICAgaWYgKCFkYXRhLmltYWdlTmVlZHNVcGRhdGUpCiAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgLy8gSWYgdGhlIGNvbnRlbnQgY2hhbmdlZCB3
ZSByZWRyYXcgdXNpbmcgb3VyIGV4aXN0aW5nIEltYWdlQnVmZmVyLgpAQCAtMTMxLDE0ICsxMzEs
MTQgQEAgSW1hZ2UqIFNWR0ltYWdlQ2FjaGU6Omxvb2t1cE9yQ3JlYXRlQml0bWFwSW1hZ2VGb3JS
ZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QqIHIKICAgICBpZiAoc2l6ZUl0ID09IG1fc2l6ZUFu
ZFpvb21NYXAuZW5kKCkpCiAgICAgICAgIHJldHVybiBJbWFnZTo6bnVsbEltYWdlKCk7CiAKLSAg
ICBJbnRTaXplIHNpemUgPSBzaXplSXQtPnNlY29uZC5zaXplOwotICAgIGZsb2F0IHpvb20gPSBz
aXplSXQtPnNlY29uZC56b29tOworICAgIEludFNpemUgc2l6ZSA9IHNpemVJdC0+dmFsdWUuc2l6
ZTsKKyAgICBmbG9hdCB6b29tID0gc2l6ZUl0LT52YWx1ZS56b29tOwogICAgIEFTU0VSVCghc2l6
ZS5pc0VtcHR5KCkpOwogCiAgICAgLy8gTG9va3VwIGltYWdlIGZvciByZW5kZXJlciBpbiBjYWNo
ZSBhbmQgZXZlbnR1YWxseSB1cGRhdGUgaXQuCiAgICAgSW1hZ2VEYXRhTWFwOjppdGVyYXRvciBp
dCA9IG1faW1hZ2VEYXRhTWFwLmZpbmQocmVuZGVyZXIpOwogICAgIGlmIChpdCAhPSBtX2ltYWdl
RGF0YU1hcC5lbmQoKSkgewotICAgICAgICBJbWFnZURhdGEmIGRhdGEgPSBpdC0+c2Vjb25kOwor
ICAgICAgICBJbWFnZURhdGEmIGRhdGEgPSBpdC0+dmFsdWU7CiAKICAgICAgICAgLy8gQ29tbW9u
IGNhc2U6IGltYWdlIHNpemUgJiB6b29tIHJlbWFpbmVkIHRoZSBzYW1lLgogICAgICAgICBpZiAo
ZGF0YS5zaXplQW5kWm9vbS5zaXplID09IHNpemUgJiYgZGF0YS5zaXplQW5kWm9vbS56b29tID09
IHpvb20pCkBAIC0xNjAsNyArMTYwLDcgQEAgSW1hZ2UqIFNWR0ltYWdlQ2FjaGU6Omxvb2t1cE9y
Q3JlYXRlQml0bWFwSW1hZ2VGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QqIHIKICAgICBJ
bWFnZSogbmV3SW1hZ2VQdHIgPSBuZXdJbWFnZS5nZXQoKTsKICAgICBBU1NFUlQobmV3SW1hZ2VQ
dHIpOwogCi0gICAgbV9pbWFnZURhdGFNYXAuYWRkKHJlbmRlcmVyLCBJbWFnZURhdGEobmV3QnVm
ZmVyLmxlYWtQdHIoKSwgbmV3SW1hZ2UucmVsZWFzZSgpLCBzaXplSXQtPnNlY29uZCkpOworICAg
IG1faW1hZ2VEYXRhTWFwLmFkZChyZW5kZXJlciwgSW1hZ2VEYXRhKG5ld0J1ZmZlci5sZWFrUHRy
KCksIG5ld0ltYWdlLnJlbGVhc2UoKSwgc2l6ZUl0LT52YWx1ZSkpOwogICAgIHJldHVybiBuZXdJ
bWFnZVB0cjsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oCmluZGV4IDcxMzI0MWM4ZTg5NDE1NDI2MWE5NzgxYTdj
NmY0ZDVjYmU1MWY2ZTIuLmI5MWRmMDQyZGQ1MjRmZTdjOTJiZTA5YWRjZTRiMWViNmQwMzYzOWMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRl
ckJ1aWxkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdG
aWx0ZXJCdWlsZGVyLmgKQEAgLTUwLDcgKzUwLDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAg
Ly8gT25seSBhbGxvd2VkIGZvciBlZmZlY3RzIGJlbG9uZ3MgdG8gdGhpcyBidWlsZGVyLgogICAg
ICAgICBBU1NFUlQobV9lZmZlY3RSZWZlcmVuY2VzLmNvbnRhaW5zKGVmZmVjdCkpOwotICAgICAg
ICByZXR1cm4gbV9lZmZlY3RSZWZlcmVuY2VzLmZpbmQoZWZmZWN0KS0+c2Vjb25kOworICAgICAg
ICByZXR1cm4gbV9lZmZlY3RSZWZlcmVuY2VzLmZpbmQoZWZmZWN0KS0+dmFsdWU7CiAgICAgfQog
CiAgICAgLy8gUmVxdWlyZWQgdG8gY2hhbmdlIHRoZSBhdHRyaWJ1dGVzIG9mIGEgZmlsdGVyIGR1
cmluZyBhbiBzdmdBdHRyaWJ1dGVDaGFuZ2VkLgpAQCAtNjYsNyArNjYsNyBAQCBwcml2YXRlOgog
ICAgIHsKICAgICAgICAgSGFzaE1hcDxBdG9taWNTdHJpbmcsIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+
ID46Oml0ZXJhdG9yIGVuZCA9IG1fYnVpbHRpbkVmZmVjdHMuZW5kKCk7CiAgICAgICAgIGZvciAo
SGFzaE1hcDxBdG9taWNTdHJpbmcsIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+ID46Oml0ZXJhdG9yIGl0
ZXJhdG9yID0gbV9idWlsdGluRWZmZWN0cy5iZWdpbigpOyBpdGVyYXRvciAhPSBlbmQ7ICsraXRl
cmF0b3IpCi0gICAgICAgICAgICAgbV9lZmZlY3RSZWZlcmVuY2VzLmFkZChpdGVyYXRvci0+c2Vj
b25kLCBGaWx0ZXJFZmZlY3RTZXQoKSk7CisgICAgICAgICAgICAgbV9lZmZlY3RSZWZlcmVuY2Vz
LmFkZChpdGVyYXRvci0+dmFsdWUsIEZpbHRlckVmZmVjdFNldCgpKTsKICAgICB9CiAKICAgICBI
YXNoTWFwPEF0b21pY1N0cmluZywgUmVmUHRyPEZpbHRlckVmZmVjdD4gPiBtX2J1aWx0aW5FZmZl
Y3RzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0
ZWRQcm9wZXJ0eS5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQ
cm9wZXJ0eS5oCmluZGV4IDcxNGVmMTY5ODM2ZTk0NjdkYWQ2ZTliZmQ0NGI3NmI5MzMzYWNkMmEu
LjZkYTRmNjliM2EwNmQwNjQzMjM2ZTI2OWYxYjkxNGQ5OWVhMzVlNTkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHkuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5LmgKQEAgLTU1
LDggKzU1LDggQEAgcHVibGljOgogICAgICAgICBDYWNoZSogY2FjaGUgPSBhbmltYXRlZFByb3Bl
cnR5Q2FjaGUoKTsKICAgICAgICAgY29uc3QgQ2FjaGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGNh
Y2hlLT5lbmQoKTsKICAgICAgICAgZm9yIChDYWNoZTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjYWNo
ZS0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAoaXQtPnNlY29u
ZCA9PSB0aGlzKSB7Ci0gICAgICAgICAgICAgICAgY2FjaGUtPnJlbW92ZShpdC0+Zmlyc3QpOwor
ICAgICAgICAgICAgaWYgKGl0LT52YWx1ZSA9PSB0aGlzKSB7CisgICAgICAgICAgICAgICAgY2Fj
aGUtPnJlbW92ZShpdC0+a2V5KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMv
U1ZHQXR0cmlidXRlVG9Qcm9wZXJ0eU1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVy
dGllcy9TVkdBdHRyaWJ1dGVUb1Byb3BlcnR5TWFwLmNwcAppbmRleCBiZTMxY2MzYzdkYTJmNTBm
NTFmNjliNTU0NDAyNjVkYjEzNWI1MjhjLi5jYzQ2Y2NmYTA4MWZmYzg4MzA5YjdlZjIyZDYzZjBm
MzRlZmQ4MTdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdB
dHRyaWJ1dGVUb1Byb3BlcnR5TWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVy
dGllcy9TVkdBdHRyaWJ1dGVUb1Byb3BlcnR5TWFwLmNwcApAQCAtMzEsNyArMzEsNyBAQCB2b2lk
IFNWR0F0dHJpYnV0ZVRvUHJvcGVydHlNYXA6OmFkZFByb3BlcnRpZXMoU1ZHQXR0cmlidXRlVG9Q
cm9wZXJ0eU1hcCYgbWFwKQogewogICAgIEF0dHJpYnV0ZVRvUHJvcGVydGllc01hcDo6aXRlcmF0
b3IgZW5kID0gbWFwLm1fbWFwLmVuZCgpOwogICAgIGZvciAoQXR0cmlidXRlVG9Qcm9wZXJ0aWVz
TWFwOjppdGVyYXRvciBpdCA9IG1hcC5tX21hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
LSAgICAgICAgUHJvcGVydGllc1ZlY3RvciogdmVjdG9yID0gaXQtPnNlY29uZDsKKyAgICAgICAg
UHJvcGVydGllc1ZlY3RvciogdmVjdG9yID0gaXQtPnZhbHVlOwogICAgICAgICBBU1NFUlQodmVj
dG9yKTsKIAogICAgICAgICBQcm9wZXJ0aWVzVmVjdG9yOjppdGVyYXRvciB2ZWN0b3JFbmQgPSB2
ZWN0b3ItPmVuZCgpOwpAQCAtODEsMTIgKzgxLDEyIEBAIHZvaWQgU1ZHQXR0cmlidXRlVG9Qcm9w
ZXJ0eU1hcDo6c3luY2hyb25pemVQcm9wZXJ0aWVzKFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50
CiAgICAgQVNTRVJUKGNvbnRleHRFbGVtZW50KTsKICAgICBBdHRyaWJ1dGVUb1Byb3BlcnRpZXNN
YXA6Oml0ZXJhdG9yIGVuZCA9IG1fbWFwLmVuZCgpOwogICAgIGZvciAoQXR0cmlidXRlVG9Qcm9w
ZXJ0aWVzTWFwOjppdGVyYXRvciBpdCA9IG1fbWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewotICAgICAgICBQcm9wZXJ0aWVzVmVjdG9yKiB2ZWN0b3IgPSBpdC0+c2Vjb25kOworICAgICAg
ICBQcm9wZXJ0aWVzVmVjdG9yKiB2ZWN0b3IgPSBpdC0+dmFsdWU7CiAgICAgICAgIEFTU0VSVCh2
ZWN0b3IpOwogCiAgICAgICAgIFByb3BlcnRpZXNWZWN0b3I6Oml0ZXJhdG9yIHZlY3RvckVuZCA9
IHZlY3Rvci0+ZW5kKCk7CiAgICAgICAgIGZvciAoUHJvcGVydGllc1ZlY3Rvcjo6aXRlcmF0b3Ig
dmVjdG9ySXQgPSB2ZWN0b3ItPmJlZ2luKCk7IHZlY3Rvckl0ICE9IHZlY3RvckVuZDsgKyt2ZWN0
b3JJdCkKLSAgICAgICAgICAgIHN5bmNocm9uaXplUHJvcGVydHkoY29udGV4dEVsZW1lbnQsIGl0
LT5maXJzdCwgKnZlY3Rvckl0KTsKKyAgICAgICAgICAgIHN5bmNocm9uaXplUHJvcGVydHkoY29u
dGV4dEVsZW1lbnQsIGl0LT5rZXksICp2ZWN0b3JJdCk7CiAgICAgfSAKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAKaW5kZXggYjEwYzE0NzBlZDQ4ZWI4YjgwZjhm
YzlhMmU1Nzk2MTlmMTlkZGRjYy4uMGVlYWUzZjg4MDdlZDhmN2RhOWY2NWYxOTE5ZGM4NTk5ZGMx
Y2E1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuY3BwCkBAIC0xNzgs
NyArMTc4LDcgQEAgYm9vbCBXb3JrZXJDb250ZXh0OjpoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25z
dAogICAgIEFjdGl2ZURPTU9iamVjdHNNYXAmIGFjdGl2ZU9iamVjdHMgPSBhY3RpdmVET01PYmpl
Y3RzKCk7CiAgICAgQWN0aXZlRE9NT2JqZWN0c01hcDo6Y29uc3RfaXRlcmF0b3IgYWN0aXZlT2Jq
ZWN0c0VuZCA9IGFjdGl2ZU9iamVjdHMuZW5kKCk7CiAgICAgZm9yIChBY3RpdmVET01PYmplY3Rz
TWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gYWN0aXZlT2JqZWN0cy5iZWdpbigpOyBpdGVyICE9
IGFjdGl2ZU9iamVjdHNFbmQ7ICsraXRlcikgewotICAgICAgICBpZiAoaXRlci0+Zmlyc3QtPmhh
c1BlbmRpbmdBY3Rpdml0eSgpKQorICAgICAgICBpZiAoaXRlci0+a2V5LT5oYXNQZW5kaW5nQWN0
aXZpdHkoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJFdmVudFF1ZXVlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3dvcmtlcnMvV29ya2VyRXZlbnRRdWV1ZS5jcHAKaW5kZXggNTlhOTMwN2VhYzE3ODRiNjk5
YzNmZWQyMGE0NTVhNzlmMDg5MTA3ZS4uMjM1NTI5ZjFmZWI5NzEyOGMzMWQ5NmEzMGRhMGNkZmZi
YmU5ZDBlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJFdmVudFF1
ZXVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckV2ZW50UXVldWUuY3Bw
CkBAIC0xMjcsNyArMTI3LDcgQEAgdm9pZCBXb3JrZXJFdmVudFF1ZXVlOjpjbG9zZSgpCiB7CiAg
ICAgbV9pc0Nsb3NlZCA9IHRydWU7CiAgICAgZm9yIChFdmVudFRhc2tNYXA6Oml0ZXJhdG9yIGl0
ID0gbV9ldmVudFRhc2tNYXAuYmVnaW4oKTsgaXQgIT0gbV9ldmVudFRhc2tNYXAuZW5kKCk7ICsr
aXQpIHsKLSAgICAgICAgRXZlbnREaXNwYXRjaGVyVGFzayogdGFzayA9IGl0LT5zZWNvbmQ7Cisg
ICAgICAgIEV2ZW50RGlzcGF0Y2hlclRhc2sqIHRhc2sgPSBpdC0+dmFsdWU7CiAgICAgICAgIHRh
c2stPmNhbmNlbCgpOwogICAgIH0KICAgICBtX2V2ZW50VGFza01hcC5jbGVhcigpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKaW5kZXggYTcxYzQ0NTU1Mzg3ZjVmZjg2ODQ0MzUy
OTg3NDI0NDQyYzY4ODUwMS4uOTk2N2IyMmFlOTZlMmIxZGI3OWIyZTI3YjNhMDcwYjczNDAxYmVh
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCkBAIC05MDEsNyArOTAxLDcg
QEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6c2V0UmVxdWVzdEhlYWRlckludGVybmFsKGNvbnN0IEF0
b21pY1N0cmluZyYgbmFtZSwgY29uc3QgU3QKIHsKICAgICBIVFRQSGVhZGVyTWFwOjpBZGRSZXN1
bHQgcmVzdWx0ID0gbV9yZXF1ZXN0SGVhZGVycy5hZGQobmFtZSwgdmFsdWUpOwogICAgIGlmICgh
cmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kICs9ICIs
ICIgKyB2YWx1ZTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSArPSAiLCAiICsgdmFs
dWU7CiB9CiAKIFN0cmluZyBYTUxIdHRwUmVxdWVzdDo6Z2V0UmVxdWVzdEhlYWRlcihjb25zdCBB
dG9taWNTdHJpbmcmIG5hbWUpIGNvbnN0CkBAIC05MjgsMTYgKzkyOCwxNiBAQCBTdHJpbmcgWE1M
SHR0cFJlcXVlc3Q6OmdldEFsbFJlc3BvbnNlSGVhZGVycyhFeGNlcHRpb25Db2RlJiBlYykgY29u
c3QKICAgICAgICAgLy8gICAgIDIpIFRoZXJlJ3Mgbm8ga25vd24gaGFybSBpbiBoaWRpbmcgU2V0
LUNvb2tpZSBoZWFkZXIgZmllbGRzIGVudGlyZWx5OyB3ZSBkb24ndAogICAgICAgICAvLyAgICAg
ICAga25vdyBhbnkgd2lkZWx5IHVzZWQgdGVjaG5pcXVlIHRoYXQgcmVxdWlyZXMgYWNjZXNzIHRv
IHRoZW0uCiAgICAgICAgIC8vICAgICAzKSBGaXJlZm94IGhhcyBpbXBsZW1lbnRlZCB0aGlzIHBv
bGljeS4KLSAgICAgICAgaWYgKGlzU2V0Q29va2llSGVhZGVyKGl0LT5maXJzdCkgJiYgIXNlY3Vy
aXR5T3JpZ2luKCktPmNhbkxvYWRMb2NhbFJlc291cmNlcygpKQorICAgICAgICBpZiAoaXNTZXRD
b29raWVIZWFkZXIoaXQtPmtleSkgJiYgIXNlY3VyaXR5T3JpZ2luKCktPmNhbkxvYWRMb2NhbFJl
c291cmNlcygpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaWYgKCFtX3NhbWVP
cmlnaW5SZXF1ZXN0ICYmICFpc09uQWNjZXNzQ29udHJvbFJlc3BvbnNlSGVhZGVyV2hpdGVsaXN0
KGl0LT5maXJzdCkgJiYgIWFjY2Vzc0NvbnRyb2xFeHBvc2VIZWFkZXJTZXQuY29udGFpbnMoaXQt
PmZpcnN0KSkKKyAgICAgICAgaWYgKCFtX3NhbWVPcmlnaW5SZXF1ZXN0ICYmICFpc09uQWNjZXNz
Q29udHJvbFJlc3BvbnNlSGVhZGVyV2hpdGVsaXN0KGl0LT5rZXkpICYmICFhY2Nlc3NDb250cm9s
RXhwb3NlSGVhZGVyU2V0LmNvbnRhaW5zKGl0LT5rZXkpKQogICAgICAgICAgICAgY29udGludWU7
CiAKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQoaXQtPmtleSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KCc6Jyk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCcgJyk7Ci0gICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKGl0LT5zZWNvbmQpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZChpdC0+dmFsdWUpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXHInKTsKICAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUveG1sL1hQYXRoRnVuY3Rpb25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0
aEZ1bmN0aW9ucy5jcHAKaW5kZXggNzA3Y2M3ZmNlMmM3MzYxOGU4Mjk4NmRkNmI5NmM1ZmVmNzM5
OGVjYi4uZWNiOWZmOTgxMjkzYzkzNGU2YTYyY2JiYzZmMDk4NjNiZGZiOGI3MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoRnVuY3Rpb25zLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS94bWwvWFBhdGhGdW5jdGlvbnMuY3BwCkBAIC03MjMsNyArNzIzLDcgQEAgRnVuY3Rpb24q
IGNyZWF0ZUZ1bmN0aW9uKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgVmVjdG9yPEV4cHJlc3Np
b24qPiYgYXJncykKICAgICBIYXNoTWFwPFN0cmluZywgRnVuY3Rpb25SZWM+OjppdGVyYXRvciBm
dW5jdGlvbk1hcEl0ZXIgPSBmdW5jdGlvbk1hcC0+ZmluZChuYW1lKTsKICAgICBGdW5jdGlvblJl
YyogZnVuY3Rpb25SZWMgPSAwOwogCi0gICAgaWYgKGZ1bmN0aW9uTWFwSXRlciA9PSBmdW5jdGlv
bk1hcC0+ZW5kKCkgfHwgIShmdW5jdGlvblJlYyA9ICZmdW5jdGlvbk1hcEl0ZXItPnNlY29uZCkt
PmFyZ3MuY29udGFpbnMoYXJncy5zaXplKCkpKQorICAgIGlmIChmdW5jdGlvbk1hcEl0ZXIgPT0g
ZnVuY3Rpb25NYXAtPmVuZCgpIHx8ICEoZnVuY3Rpb25SZWMgPSAmZnVuY3Rpb25NYXBJdGVyLT52
YWx1ZSktPmFyZ3MuY29udGFpbnMoYXJncy5zaXplKCkpKQogICAgICAgICByZXR1cm4gMDsKIAog
ICAgIEZ1bmN0aW9uKiBmdW5jdGlvbiA9IGZ1bmN0aW9uUmVjLT5mYWN0b3J5Rm4oKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aFBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS94bWwvWFBhdGhQYXJzZXIuY3BwCmluZGV4IDYyZDhlZTM3ZmQ2ZWJiNzRhNTgwYTAwYzU5YmVi
NmNkNDBjNWE4YjcuLjEwOThlNTRhMjI5MDc3OWYxZTA4ZTk4MDIxMDEzMDM3ZTY2ZGE4OWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aFBhcnNlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUveG1sL1hQYXRoUGFyc2VyLmNwcApAQCAtMTA2LDcgKzEwNiw3IEBAIHN0YXRpYyBi
b29sIGlzQXhpc05hbWUoY29uc3QgU3RyaW5nJiBuYW1lLCBTdGVwOjpBeGlzJiB0eXBlKQogICAg
IEF4aXNOYW1lc01hcDo6aXRlcmF0b3IgaXQgPSBheGlzTmFtZXMuZmluZChuYW1lKTsKICAgICBp
ZiAoaXQgPT0gYXhpc05hbWVzLmVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgdHlw
ZSA9IGl0LT5zZWNvbmQ7CisgICAgdHlwZSA9IGl0LT52YWx1ZTsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JMaWJ4c2x0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yTGlieHNsdC5jcHAKaW5kZXgg
MDc2YTg1MmQwNmQ4MzcxMDM3NjIyNjQ1YjAxMTk0NTJlY2JlMjRkNC4uOWVhMmFhNzIxMDVjZjdh
ODA0OTM2ZDMwNzEyNDk4OGY0YzQyMWU1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1s
L1hTTFRQcm9jZXNzb3JMaWJ4c2x0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFNMVFBy
b2Nlc3NvckxpYnhzbHQuY3BwCkBAIC0yMjUsOCArMjI1LDggQEAgc3RhdGljIGNvbnN0IGNoYXIq
KiB4c2x0UGFyYW1BcnJheUZyb21QYXJhbWV0ZXJNYXAoWFNMVFByb2Nlc3Nvcjo6UGFyYW1ldGVy
TWFwJgogICAgIFhTTFRQcm9jZXNzb3I6OlBhcmFtZXRlck1hcDo6aXRlcmF0b3IgZW5kID0gcGFy
YW1ldGVycy5lbmQoKTsKICAgICB1bnNpZ25lZCBpbmRleCA9IDA7CiAgICAgZm9yIChYU0xUUHJv
Y2Vzc29yOjpQYXJhbWV0ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gcGFyYW1ldGVycy5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgcGFyYW1ldGVyQXJyYXlbaW5kZXgrK10gPSBmYXN0
U3RyRHVwKGl0LT5maXJzdC51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgcGFyYW1ldGVyQXJyYXlb
aW5kZXgrK10gPSBmYXN0U3RyRHVwKGl0LT5zZWNvbmQudXRmOCgpLmRhdGEoKSk7CisgICAgICAg
IHBhcmFtZXRlckFycmF5W2luZGV4KytdID0gZmFzdFN0ckR1cChpdC0+a2V5LnV0ZjgoKS5kYXRh
KCkpOworICAgICAgICBwYXJhbWV0ZXJBcnJheVtpbmRleCsrXSA9IGZhc3RTdHJEdXAoaXQtPnZh
bHVlLnV0ZjgoKS5kYXRhKCkpOwogICAgIH0KICAgICBwYXJhbWV0ZXJBcnJheVtpbmRleF0gPSAw
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvclF0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yUXQuY3BwCmluZGV4IGMwYWI0ZDY5MzE3
ZDVjMzFjMzZjYjRhYTAzZGJlNzA2YzE1M2E5OTguLmE0YzlkNzRjZDJhYTVhZTViN2QzYzc5ZmYx
NTgwZDE2M2Y1NzA4ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vz
c29yUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yUXQuY3BwCkBA
IC0xNDMsNyArMTQzLDcgQEAgYm9vbCBYU0xUUHJvY2Vzc29yOjp0cmFuc2Zvcm1Ub1N0cmluZyhO
b2RlKiBzb3VyY2VOb2RlLCBTdHJpbmcmLCBTdHJpbmcmIHJlc3VsdFMKIAogICAgIFhTTFRQcm9j
ZXNzb3I6OlBhcmFtZXRlck1hcDo6aXRlcmF0b3IgZW5kID0gbV9wYXJhbWV0ZXJzLmVuZCgpOwog
ICAgIGZvciAoWFNMVFByb2Nlc3Nvcjo6UGFyYW1ldGVyTWFwOjppdGVyYXRvciBpdCA9IG1fcGFy
YW1ldGVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHF1ZXJ5LmJpbmRWYXJp
YWJsZShRU3RyaW5nKGl0LT5maXJzdCksIFFYbWxJdGVtKFFWYXJpYW50KFFTdHJpbmcoaXQtPnNl
Y29uZCkpKSk7CisgICAgICAgIHF1ZXJ5LmJpbmRWYXJpYWJsZShRU3RyaW5nKGl0LT5rZXkpLCBR
WG1sSXRlbShRVmFyaWFudChRU3RyaW5nKGl0LT52YWx1ZSkpKSk7CiAKICAgICBRU3RyaW5nIHNv
dXJjZTsKICAgICBpZiAoc291cmNlSXNEb2N1bWVudCAmJiBvd25lckRvY3VtZW50LT50cmFuc2Zv
cm1Tb3VyY2UoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvQmFj
a2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvQmFja2luZ1N0b3Jl
LmNwcAppbmRleCAwNjNlM2UwMDNkMjQ4ODBhMTQwZDY0ZmMwNDNkZTYzZGQwNmFlYjI5Li5lYWI1
ZDQ2NzExNDQ0ZTM1M2NiZDQwM2I5OWZhZTI0N2U3ZDRhMTgzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2JsYWNrYmVycnkvQXBpL0JhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9ibGFja2JlcnJ5L0FwaS9CYWNraW5nU3RvcmUuY3BwCkBAIC03MzUsOCArNzM1LDggQEAgdm9p
ZCBCYWNraW5nU3RvcmVQcml2YXRlOjpzZXRCYWNraW5nU3RvcmVSZWN0KGNvbnN0IFBsYXRmb3Jt
OjpJbnRSZWN0JiBiYWNraW5nU3QKICAgICAvLyBvdXIgbmV3IGJhY2tpbmcgc3RvcmUgcmVjdC4K
ICAgICBUaWxlTWFwOjpjb25zdF9pdGVyYXRvciB0aWxlTWFwRW5kID0gY3VycmVudE1hcC5lbmQo
KTsKICAgICBmb3IgKFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY3VycmVudE1hcC5iZWdp
bigpOyBpdCAhPSB0aWxlTWFwRW5kOyArK2l0KSB7Ci0gICAgICAgIFRpbGVJbmRleCBvbGRJbmRl
eCA9IGl0LT5maXJzdDsKLSAgICAgICAgQmFja2luZ1N0b3JlVGlsZSogdGlsZSA9IGl0LT5zZWNv
bmQ7CisgICAgICAgIFRpbGVJbmRleCBvbGRJbmRleCA9IGl0LT5rZXk7CisgICAgICAgIEJhY2tp
bmdTdG9yZVRpbGUqIHRpbGUgPSBpdC0+dmFsdWU7CiAKICAgICAgICAgLy8gUmVzZXQgdGhlIG9s
ZCBpbmRleC4KICAgICAgICAgcmVzZXRUaWxlKG9sZEluZGV4LCB0aWxlLCBmYWxzZSAvKnJlc2V0
QmFja2dyb3VuZCovKTsKQEAgLTc5Miw4ICs3OTIsOCBAQCB2b2lkIEJhY2tpbmdTdG9yZVByaXZh
dGU6OnNldEJhY2tpbmdTdG9yZVJlY3QoY29uc3QgUGxhdGZvcm06OkludFJlY3QmIGJhY2tpbmdT
dAogICAgIHNpemVfdCBpID0gMDsKICAgICBUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBsZWZ0T3Zl
ckVuZCA9IGxlZnRPdmVyVGlsZXMuZW5kKCk7CiAgICAgZm9yIChUaWxlTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IGxlZnRPdmVyVGlsZXMuYmVnaW4oKTsgaXQgIT0gbGVmdE92ZXJFbmQ7ICsraXQp
IHsKLSAgICAgICAgVGlsZUluZGV4IG9sZEluZGV4ID0gaXQtPmZpcnN0OwotICAgICAgICBCYWNr
aW5nU3RvcmVUaWxlKiB0aWxlID0gaXQtPnNlY29uZDsKKyAgICAgICAgVGlsZUluZGV4IG9sZElu
ZGV4ID0gaXQtPmtleTsKKyAgICAgICAgQmFja2luZ1N0b3JlVGlsZSogdGlsZSA9IGl0LT52YWx1
ZTsKICAgICAgICAgaWYgKGkgPj0gaW5kZXhlc1RvRmlsbC5zaXplKCkpIHsKICAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xNjgzLDcgKzE2
ODMsNyBAQCBQbGF0Zm9ybTo6SW50UmVjdCBCYWNraW5nU3RvcmVQcml2YXRlOjp2aXNpYmxlVGls
ZXNSZWN0KCkgY29uc3QKICAgICBUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBjdXJyZW50
TWFwLmVuZCgpOwogICAgIGZvciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjdXJyZW50
TWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBUaWxlUmVjdCB0aWxlUmVj
dDsKLSAgICAgICAgdGlsZVJlY3QuZmlyc3QgPSBpdC0+Zmlyc3Q7CisgICAgICAgIHRpbGVSZWN0
LmZpcnN0ID0gaXQtPmtleTsKICAgICAgICAgdGlsZVJlY3Quc2Vjb25kID0gdGhpcy0+dGlsZVJl
Y3QoKTsKICAgICAgICAgUGxhdGZvcm06OkludFJlY3QgdGlsZSA9IG1hcEZyb21UaWxlc1RvVHJh
bnNmb3JtZWRDb250ZW50cyh0aWxlUmVjdCk7CiAgICAgICAgIGlmICh0aWxlLmludGVyc2VjdHMo
dmlzaWJsZUNvbnRlbnRzUmVjdCgpKSkKQEAgLTE3NDQsNyArMTc0NCw3IEBAIHZvaWQgQmFja2lu
Z1N0b3JlUHJpdmF0ZTo6cmVzZXRUaWxlcyhib29sIHJlc2V0QmFja2dyb3VuZCkKIAogICAgIFRp
bGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGN1cnJlbnRNYXAuZW5kKCk7CiAgICAgZm9yIChU
aWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGN1cnJlbnRNYXAuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KQotICAgICAgICByZXNldFRpbGUoaXQtPmZpcnN0LCBpdC0+c2Vjb25kLCByZXNldEJh
Y2tncm91bmQpOworICAgICAgICByZXNldFRpbGUoaXQtPmtleSwgaXQtPnZhbHVlLCByZXNldEJh
Y2tncm91bmQpOwogfQogCiB2b2lkIEJhY2tpbmdTdG9yZVByaXZhdGU6OnVwZGF0ZVRpbGVzKGJv
b2wgdXBkYXRlVmlzaWJsZSwgYm9vbCBpbW1lZGlhdGUpCkBAIC0xNzU3LDEwICsxNzU3LDEwIEBA
IHZvaWQgQmFja2luZ1N0b3JlUHJpdmF0ZTo6dXBkYXRlVGlsZXMoYm9vbCB1cGRhdGVWaXNpYmxl
LCBib29sIGltbWVkaWF0ZSkKIAogICAgIFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGN1
cnJlbnRNYXAuZW5kKCk7CiAgICAgZm9yIChUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGN1
cnJlbnRNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGJvb2wgaXNWaXNp
YmxlID0gaXNUaWxlVmlzaWJsZShpdC0+Zmlyc3QpOworICAgICAgICBib29sIGlzVmlzaWJsZSA9
IGlzVGlsZVZpc2libGUoaXQtPmtleSk7CiAgICAgICAgIGlmICghdXBkYXRlVmlzaWJsZSAmJiBp
c1Zpc2libGUpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgdXBkYXRlVGlsZShpdC0+
Zmlyc3QsIGltbWVkaWF0ZSk7CisgICAgICAgIHVwZGF0ZVRpbGUoaXQtPmtleSwgaW1tZWRpYXRl
KTsKICAgICB9CiB9CiAKQEAgLTE3ODEsOCArMTc4MSw4IEBAIHZvaWQgQmFja2luZ1N0b3JlUHJp
dmF0ZTo6dXBkYXRlVGlsZXNGb3JTY3JvbGxPck5vdFJlbmRlcmVkUmVnaW9uKGJvb2wgY2hlY2tM
b2FkCiAKICAgICBUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBjdXJyZW50TWFwLmVuZCgp
OwogICAgIGZvciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjdXJyZW50TWFwLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBUaWxlSW5kZXggaW5kZXggPSBpdC0+Zmly
c3Q7Ci0gICAgICAgIEJhY2tpbmdTdG9yZVRpbGUqIHRpbGUgPSBpdC0+c2Vjb25kOworICAgICAg
ICBUaWxlSW5kZXggaW5kZXggPSBpdC0+a2V5OworICAgICAgICBCYWNraW5nU3RvcmVUaWxlKiB0
aWxlID0gaXQtPnZhbHVlOwogICAgICAgICBib29sIGlzVmlzaWJsZSA9IGlzVGlsZVZpc2libGUo
aW5kZXgpOwogICAgICAgICAvLyBUaGUgcmVjdCBpbiB0cmFuc2Zvcm1lZCBjb250ZW50cyBjb29y
ZGluYXRlcy4KICAgICAgICAgUGxhdGZvcm06OkludFJlY3QgcmVjdChvcmlnaW5PZlRpbGUoaW5k
ZXgpLCB0aWxlU2l6ZSgpKTsKQEAgLTE5MjUsOCArMTkyNSw4IEBAIEJhY2tpbmdTdG9yZVByaXZh
dGU6OlRpbGVSZWN0TGlzdCBCYWNraW5nU3RvcmVQcml2YXRlOjptYXBGcm9tVHJhbnNmb3JtZWRD
b250ZW50CiAgICAgVGlsZVJlY3RMaXN0IHRpbGVSZWN0TGlzdDsKICAgICBUaWxlTWFwOjpjb25z
dF9pdGVyYXRvciBlbmQgPSB0aWxlTWFwLmVuZCgpOwogICAgIGZvciAoVGlsZU1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSB0aWxlTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAg
ICBUaWxlSW5kZXggaW5kZXggPSBpdC0+Zmlyc3Q7Ci0gICAgICAgIEJhY2tpbmdTdG9yZVRpbGUq
IHRpbGUgPSBpdC0+c2Vjb25kOworICAgICAgICBUaWxlSW5kZXggaW5kZXggPSBpdC0+a2V5Owor
ICAgICAgICBCYWNraW5nU3RvcmVUaWxlKiB0aWxlID0gaXQtPnZhbHVlOwogCiAgICAgICAgIC8v
IE5lZWQgdG8gbWFwIHRoZSByZWN0IHRvIHRpbGUgY29vcmRpbmF0ZXMuCiAgICAgICAgIFBsYXRm
b3JtOjpJbnRSZWN0IHIgPSByZWN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2Jl
cnJ5L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50QmxhY2tCZXJyeS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRCbGFj
a0JlcnJ5LmNwcAppbmRleCA0Njg4MTJmNTM0ZWMwMDUxNDFmOWE4MGFmNDYxMmI1MGZjMjBhMzYy
Li5hM2Y2YWRkMTBhNWQ0NjI0NGNhYTk4NDIxNDc3OTQ3YzJhODA4Y2Y4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRC
bGFja0JlcnJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBv
cnQvRnJhbWVMb2FkZXJDbGllbnRCbGFja0JlcnJ5LmNwcApAQCAtOTQzLDggKzk0Myw4IEBAIHZv
aWQgRnJhbWVMb2FkZXJDbGllbnRCbGFja0JlcnJ5OjpkaXNwYXRjaFdpbGxTZW5kUmVxdWVzdChE
b2N1bWVudExvYWRlciogZG9jTG9hCiAgICAgbV93ZWJQYWdlUHJpdmF0ZS0+bV9jbGllbnQtPnBv
cHVsYXRlQ3VzdG9tSGVhZGVycyhwbGF0Zm9ybVJlcXVlc3QpOwogICAgIGNvbnN0IE5ldHdvcmtS
ZXF1ZXN0OjpIZWFkZXJMaXN0JiBoZWFkZXJMaXN0cyA9IHBsYXRmb3JtUmVxdWVzdC5nZXRIZWFk
ZXJMaXN0UmVmKCk7CiAgICAgZm9yIChOZXR3b3JrUmVxdWVzdDo6SGVhZGVyTGlzdDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBoZWFkZXJMaXN0cy5iZWdpbigpOyBpdCAhPSBoZWFkZXJMaXN0cy5lbmQo
KTsgKytpdCkgewotICAgICAgICBzdGQ6OnN0cmluZyBoZWFkZXJTdHJpbmcgPSBpdC0+Zmlyc3Q7
Ci0gICAgICAgIHN0ZDo6c3RyaW5nIGhlYWRlclZhbHVlU3RyaW5nID0gaXQtPnNlY29uZDsKKyAg
ICAgICAgc3RkOjpzdHJpbmcgaGVhZGVyU3RyaW5nID0gaXQtPmtleTsKKyAgICAgICAgc3RkOjpz
dHJpbmcgaGVhZGVyVmFsdWVTdHJpbmcgPSBpdC0+dmFsdWU7CiAgICAgICAgIHJlcXVlc3Quc2V0
SFRUUEhlYWRlckZpZWxkKFN0cmluZzo6ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2soaGVhZGVy
U3RyaW5nLmRhdGEoKSwgaGVhZGVyU3RyaW5nLmxlbmd0aCgpKSwgU3RyaW5nOjpmcm9tVVRGOFdp
dGhMYXRpbjFGYWxsYmFjayhoZWFkZXJWYWx1ZVN0cmluZy5kYXRhKCksIGhlYWRlclZhbHVlU3Ry
aW5nLmxlbmd0aCgpKSk7CiAgICAgfQogICAgIGlmICghaXNNYWluUmVzb3VyY2VMb2FkKSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvTm90aWZp
Y2F0aW9uUHJlc2VudGVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29y
ZVN1cHBvcnQvTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbC5jcHAKaW5kZXggNmIyOTIxMDI5NDYy
NzdkYTI4ZTc5OGQ3ZWVkZjhiOTM5YzUzMTljNy4uNDhjY2YzYWM1MWFiZGUzNjVhYjAyNzU5ZDFk
YWRjNDE2ZmMwMGY1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNv
cmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmNw
cApAQCAtODEsNyArODEsNyBAQCB2b2lkIE5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6OmNhbmNl
bChOb3RpZmljYXRpb24qIG5vdGlmaWNhdGlvbikKICAgICBpZiAoaXQgPT0gbV9ub3RpZmljYXRp
b25zLmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3BsYXRmb3JtUHJlc2VudGVyLT5j
YW5jZWwoc3RkOjpzdHJpbmcoaXQtPnNlY29uZC51dGY4KCkuZGF0YSgpKSk7CisgICAgbV9wbGF0
Zm9ybVByZXNlbnRlci0+Y2FuY2VsKHN0ZDo6c3RyaW5nKGl0LT52YWx1ZS51dGY4KCkuZGF0YSgp
KSk7CiAgICAgbV9ub3RpZmljYXRpb25zLnJlbW92ZShpdCk7CiB9CiAKQEAgLTEwOCwxMiArMTA4
LDEyIEBAIHZvaWQgTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6b25QZXJtaXNzaW9uKGNvbnN0
IHN0ZDo6c3RyaW5nJiBkb21haW4sIGJvb2wgaXNBCiAgICAgU3RyaW5nIGRvbWFpblN0cmluZyA9
IFN0cmluZzo6ZnJvbVVURjgoZG9tYWluLmNfc3RyKCkpOwogICAgIFBlcm1pc3Npb25SZXF1ZXN0
TWFwOjppdGVyYXRvciBpdCA9IG1fcGVybWlzc2lvblJlcXVlc3RzLmJlZ2luKCk7CiAgICAgZm9y
ICg7IGl0ICE9IG1fcGVybWlzc2lvblJlcXVlc3RzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGlm
IChpdC0+Zmlyc3QtPnVybCgpLmhvc3QoKSAhPSBkb21haW5TdHJpbmcpCisgICAgICAgIGlmIChp
dC0+a2V5LT51cmwoKS5ob3N0KCkgIT0gZG9tYWluU3RyaW5nKQogICAgICAgICAgICAgY29udGlu
dWU7CiAKICAgICAgICAgaWYgKGlzQWxsb3dlZCkgewogICAgICAgICAgICAgbV9hbGxvd2VkRG9t
YWlucy5hZGQoZG9tYWluU3RyaW5nKTsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPmhhbmRsZUV2
ZW50KCk7CisgICAgICAgICAgICBpdC0+dmFsdWUtPmhhbmRsZUV2ZW50KCk7CiAgICAgICAgIH0g
ZWxzZQogICAgICAgICAgICAgbV9hbGxvd2VkRG9tYWlucy5yZW1vdmUoZG9tYWluU3RyaW5nKTsK
IApAQCAtMTQ0LDkgKzE0NCw5IEBAIHZvaWQgTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6bm90
aWZpY2F0aW9uQ2xpY2tlZChjb25zdCBzdGQ6OnN0cmluZyYgaWQpCiAgICAgU3RyaW5nIGlkU3Ry
aW5nID0gU3RyaW5nOjpmcm9tVVRGOChpZC5jX3N0cigpKTsKICAgICBOb3RpZmljYXRpb25NYXA6
Oml0ZXJhdG9yIGl0ID0gbV9ub3RpZmljYXRpb25zLmJlZ2luKCk7CiAgICAgZm9yICg7IGl0ICE9
IG1fbm90aWZpY2F0aW9ucy5lbmQoKTsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnNlY29uZCA9
PSBpZFN0cmluZyAmJiBpdC0+Zmlyc3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkgewotICAg
ICAgICAgICAgUmVmUHRyPE5vdGlmaWNhdGlvbj4gbm90aWZpY2F0aW9uID0gaXQtPmZpcnN0Owot
ICAgICAgICAgICAgaXQtPmZpcnN0LT5kaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnRO
YW1lcygpLmNsaWNrRXZlbnQsIGZhbHNlLCB0cnVlKSk7CisgICAgICAgIGlmIChpdC0+dmFsdWUg
PT0gaWRTdHJpbmcgJiYgaXQtPmtleS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSB7CisgICAg
ICAgICAgICBSZWZQdHI8Tm90aWZpY2F0aW9uPiBub3RpZmljYXRpb24gPSBpdC0+a2V5OworICAg
ICAgICAgICAgaXQtPmtleS0+ZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMo
KS5jbGlja0V2ZW50LCBmYWxzZSwgdHJ1ZSkpOwogICAgICAgICAgICAgbV9ub3RpZmljYXRpb25z
LnJlbW92ZShub3RpZmljYXRpb24pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9GYXRGaW5n
ZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0ZhdEZpbmdl
cnMuY3BwCmluZGV4IGZlN2Y4NDhkNzVjMTE2YzZjYTlkZmM0MmY0NmRkMmRjY2Q5ODI3YTkuLmE4
MWY2ZjExM2E5YTllMTNmM2E5YjRjZTRlOWYxMDZkMjNlNzVmNGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0ZhdEZpbmdlcnMuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0ZhdEZpbmdlcnMuY3BwCkBAIC0y
MjksOCArMjI5LDggQEAgY29uc3QgRmF0RmluZ2Vyc1Jlc3VsdCBGYXRGaW5nZXJzOjpmaW5kQmVz
dFBvaW50KCkKIAogICAgIFZlY3RvcjxJbnRlcnNlY3RpbmdSZWdpb24+Ojpjb25zdF9pdGVyYXRv
ciBlbmRJdCA9IGludGVyc2VjdGluZ1JlZ2lvbnMuZW5kKCk7CiAgICAgZm9yIChWZWN0b3I8SW50
ZXJzZWN0aW5nUmVnaW9uPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBpbnRlcnNlY3RpbmdSZWdpb25z
LmJlZ2luKCk7IGl0ICE9IGVuZEl0OyArK2l0KSB7Ci0gICAgICAgIE5vZGUqIGN1cnJlbnROb2Rl
ID0gaXQtPmZpcnN0OwotICAgICAgICBQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbiBjdXJyZW50SW50
ZXJzZWN0aW9uUmVnaW9uID0gaXQtPnNlY29uZDsKKyAgICAgICAgTm9kZSogY3VycmVudE5vZGUg
PSBpdC0+a2V5OworICAgICAgICBQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbiBjdXJyZW50SW50ZXJz
ZWN0aW9uUmVnaW9uID0gaXQtPnZhbHVlOwogCiAgICAgICAgIGludCBjdXJyZW50SW50ZXJzZWN0
aW9uUmVnaW9uQXJlYSA9IGN1cnJlbnRJbnRlcnNlY3Rpb25SZWdpb24uYXJlYSgpOwogICAgICAg
ICBpZiAoY3VycmVudEludGVyc2VjdGlvblJlZ2lvbkFyZWEgPiBsYXJnZXN0SW50ZXJzZWN0aW9u
UmVnaW9uQXJlYQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1
cHBvcnQvRnJhbWVMYXllcnMuY3BwIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1
cHBvcnQvRnJhbWVMYXllcnMuY3BwCmluZGV4IGI4NzU2NDZkYTRmOWFjOTYyZGMzMjkwYTQ2Mjk3
MWUyNmJjZDQ0OTEuLjg3ZDdiNWIwYjM4YmI2MGE5ZGZmODcxMWNkN2ViMzM5NGQ5YjUwNzIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0ZyYW1lTGF5
ZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9GcmFt
ZUxheWVycy5jcHAKQEAgLTkxLDcgKzkxLDcgQEAgdm9pZCBGcmFtZUxheWVyczo6cmVtb3ZlTGF5
ZXJCeUZyYW1lKEZyYW1lKiBmcmFtZSkKICAgICBBU1NFUlQoZnJhbWUpOwogICAgIEZyYW1lTGF5
ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9mcmFtZUxheWVycy5maW5kKGZyYW1lKTsKICAgICBpZiAo
aXQgIT0gbV9mcmFtZUxheWVycy5lbmQoKSkgewotICAgICAgICBMYXllcldlYktpdFRocmVhZCog
bGF5ZXIgPSBpdC0+c2Vjb25kOworICAgICAgICBMYXllcldlYktpdFRocmVhZCogbGF5ZXIgPSBp
dC0+dmFsdWU7CiAgICAgICAgIGlmIChsYXllci0+c3VwZXJsYXllcigpKQogICAgICAgICAgICAg
bGF5ZXItPnJlbW92ZUZyb21TdXBlcmxheWVyKCk7CiAgICAgICAgIG1fZnJhbWVMYXllcnMucmVt
b3ZlKGl0KTsKQEAgLTEwNCw3ICsxMDQsNyBAQCB2b2lkIEZyYW1lTGF5ZXJzOjpjb21taXRPbldl
YktpdFRocmVhZChkb3VibGUgc2NhbGUpCiAgICAgQVNTRVJUKG1fcm9vdExheWVyKTsKICAgICBp
ZiAoIWlzUm9vdExheWVyTWFpbkZyYW1lTGF5ZXIoKSkgewogICAgICAgICBmb3IgKEZyYW1lTGF5
ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9mcmFtZUxheWVycy5iZWdpbigpOyBpdCAhPSBtX2ZyYW1l
TGF5ZXJzLmVuZCgpOyArK2l0KQotICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0QWJzb2x1dGVP
ZmZzZXQoZnJhbWVMYXllckFic29sdXRlT2Zmc2V0KGl0LT5maXJzdCkpOworICAgICAgICAgICAg
aXQtPnZhbHVlLT5zZXRBYnNvbHV0ZU9mZnNldChmcmFtZUxheWVyQWJzb2x1dGVPZmZzZXQoaXQt
PmtleSkpOwogICAgIH0KICAgICBtX3Jvb3RMYXllci0+Y29tbWl0T25XZWJLaXRUaHJlYWQoc2Nh
bGUpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViR2VvbG9j
YXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuY3BwCmluZGV4IDRj
MGVkOWNkNzE3YjZmNGQ1YWE2YWZhZjk3MGJlYjY5Njc5Njg5ZDMuLjFlZWFjNjY3YmRmNjZiM2Yx
OTNmYjMzNWEzODcxMjhmYmM5MTI2NzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0
TWFuYWdlci5jcHAKQEAgLTY0LDcgKzY0LDcgQEAgYm9vbCBXZWJHZW9sb2NhdGlvblBlcm1pc3Np
b25SZXF1ZXN0TWFuYWdlcjo6cmVtb3ZlKGNvbnN0IFdlYktpdDo6V2ViR2VvbG9jYXRpb24KICAg
ICBHZW9sb2NhdGlvbklkTWFwOjppdGVyYXRvciBpdCA9IG1fcHJpdmF0ZS0+bV9nZW9sb2NhdGlv
bklkTWFwLmZpbmQoZ2VvbG9jYXRpb24pOwogICAgIGlmIChpdCA9PSBtX3ByaXZhdGUtPm1fZ2Vv
bG9jYXRpb25JZE1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlkID0gaXQt
PnNlY29uZDsKKyAgICBpZCA9IGl0LT52YWx1ZTsKICAgICBtX3ByaXZhdGUtPm1fZ2VvbG9jYXRp
b25JZE1hcC5yZW1vdmUoaXQpOwogICAgIG1fcHJpdmF0ZS0+bV9pZEdlb2xvY2F0aW9uTWFwLnJl
bW92ZShpZCk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC03NSw3ICs3NSw3IEBAIGJvb2wgV2ViR2Vv
bG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXI6OnJlbW92ZShpbnQgaWQsIFdlYktpdDo6
V2ViR2VvbG9jYXRpCiAgICAgSWRHZW9sb2NhdGlvbk1hcDo6aXRlcmF0b3IgaXQgPSBtX3ByaXZh
dGUtPm1faWRHZW9sb2NhdGlvbk1hcC5maW5kKGlkKTsKICAgICBpZiAoaXQgPT0gbV9wcml2YXRl
LT5tX2lkR2VvbG9jYXRpb25NYXAuZW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBH
ZW9sb2NhdGlvbiogZ2VvbG9jYXRpb24gPSBpdC0+c2Vjb25kOworICAgIEdlb2xvY2F0aW9uKiBn
ZW9sb2NhdGlvbiA9IGl0LT52YWx1ZTsKICAgICBwZXJtaXNzaW9uUmVxdWVzdCA9IFdlYkdlb2xv
Y2F0aW9uUGVybWlzc2lvblJlcXVlc3QoZ2VvbG9jYXRpb24pOwogICAgIG1fcHJpdmF0ZS0+bV9p
ZEdlb2xvY2F0aW9uTWFwLnJlbW92ZShpdCk7CiAgICAgbV9wcml2YXRlLT5tX2dlb2xvY2F0aW9u
SWRNYXAucmVtb3ZlKGdlb2xvY2F0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvV2ViU29ja2V0RXh0ZW5zaW9uRGlzcGF0Y2hlclRlc3QuY3BwIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyVGVzdC5j
cHAKaW5kZXggMzU4OTgzYjgzOTkzMTRjZGEwMzdjOGMwMzI0OWVlOWI2NzJlOTY3Yi4uMjQ1MTRj
ZDU4ZmJmZDAwYWFhODg3MjQyYTFhYzM2MzMxY2FlYjc4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9XZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyVGVzdC5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJTb2NrZXRFeHRlbnNpb25EaXNw
YXRjaGVyVGVzdC5jcHAKQEAgLTEwMywxMCArMTAzLDEwIEBAIFRFU1RfRihXZWJTb2NrZXRFeHRl
bnNpb25EaXNwYXRjaGVyVGVzdCwgVGVzdFBhcmFtZXRlcnMpCiAgICAgRVhQRUNUX0VRKDIsIG1f
cGFyc2VkUGFyYW1ldGVyc1swXS5zaXplKCkpOwogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+
OjppdGVyYXRvciBwYXJhbWV0ZXIgPSBtX3BhcnNlZFBhcmFtZXRlcnNbMF0uZmluZCgibWF4LWNo
YW5uZWxzIik7CiAgICAgRVhQRUNUX1RSVUUocGFyYW1ldGVyICE9IG1fcGFyc2VkUGFyYW1ldGVy
c1swXS5lbmQoKSk7Ci0gICAgRVhQRUNUX0VRKCI0IiwgcGFyYW1ldGVyLT5zZWNvbmQpOworICAg
IEVYUEVDVF9FUSgiNCIsIHBhcmFtZXRlci0+dmFsdWUpOwogICAgIHBhcmFtZXRlciA9IG1fcGFy
c2VkUGFyYW1ldGVyc1swXS5maW5kKCJmbG93LWNvbnRyb2wiKTsKICAgICBFWFBFQ1RfVFJVRShw
YXJhbWV0ZXIgIT0gbV9wYXJzZWRQYXJhbWV0ZXJzWzBdLmVuZCgpKTsKLSAgICBFWFBFQ1RfVFJV
RShwYXJhbWV0ZXItPnNlY29uZC5pc051bGwoKSk7CisgICAgRVhQRUNUX1RSVUUocGFyYW1ldGVy
LT52YWx1ZS5pc051bGwoKSk7CiB9CiAKIFRFU1RfRihXZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRj
aGVyVGVzdCwgVGVzdE11bHRpcGxlKQpAQCAtMTMxLDEyICsxMzEsMTIgQEAgVEVTVF9GKFdlYlNv
Y2tldEV4dGVuc2lvbkRpc3BhdGNoZXJUZXN0LCBUZXN0TXVsdGlwbGUpCiAgICAgICAgIGNvbnN0
IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBwYXJzZWRQYXJhbWV0ZXJzID0gbV9wYXJzZWRQYXJh
bWV0ZXJzW2ldOwogICAgICAgICBFWFBFQ1RfRVEoZXhwZWN0ZWRbaV0ucGFyYW1ldGVycy5zaXpl
KCksIG1fcGFyc2VkUGFyYW1ldGVyc1tpXS5zaXplKCkpOwogICAgICAgICBmb3IgKEhhc2hNYXA8
U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdGVyYXRvciA9IGV4cGVjdGVkUGFyYW1l
dGVycy5iZWdpbigpOyBpdGVyYXRvciAhPSBleHBlY3RlZFBhcmFtZXRlcnMuZW5kKCk7ICsraXRl
cmF0b3IpIHsKLSAgICAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVy
YXRvciBwYXJzZWQgPSBwYXJzZWRQYXJhbWV0ZXJzLmZpbmQoaXRlcmF0b3ItPmZpcnN0KTsKKyAg
ICAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBwYXJzZWQg
PSBwYXJzZWRQYXJhbWV0ZXJzLmZpbmQoaXRlcmF0b3ItPmtleSk7CiAgICAgICAgICAgICBFWFBF
Q1RfVFJVRShwYXJzZWQgIT0gcGFyc2VkUGFyYW1ldGVycy5lbmQoKSk7Ci0gICAgICAgICAgICBp
ZiAoaXRlcmF0b3ItPnNlY29uZC5pc051bGwoKSkKLSAgICAgICAgICAgICAgICBFWFBFQ1RfVFJV
RShwYXJzZWQtPnNlY29uZC5pc051bGwoKSk7CisgICAgICAgICAgICBpZiAoaXRlcmF0b3ItPnZh
bHVlLmlzTnVsbCgpKQorICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVFKHBhcnNlZC0+dmFsdWUu
aXNOdWxsKCkpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIEVYUEVDVF9FUShp
dGVyYXRvci0+c2Vjb25kLCBwYXJzZWQtPnNlY29uZCk7CisgICAgICAgICAgICAgICAgRVhQRUNU
X0VRKGl0ZXJhdG9yLT52YWx1ZSwgcGFyc2VkLT52YWx1ZSk7CiAgICAgICAgIH0KICAgICB9CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0
cmF0ZWdpZXNHdGsuY3BwIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvUGxhdGZv
cm1TdHJhdGVnaWVzR3RrLmNwcAppbmRleCAyOTIxNzNhZTI5MmY1MTIxMTg3ZThiZTUwNTAzOTNk
N2MzMzg0YzVhLi45MTAzYzg0NjA5NGQ1MWY4ZjViOTQ4NzRjZDY3YWYwNDc5OTA5YWUwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdp
ZXNHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L1BsYXRmb3Jt
U3RyYXRlZ2llc0d0ay5jcHAKQEAgLTg4LDggKzg4LDggQEAgdm9pZCBQbGF0Zm9ybVN0cmF0ZWdp
ZXNHdGs6OmdldFBsdWdpbkluZm8oY29uc3QgUGFnZSogcGFnZSwgVmVjdG9yPFBsdWdpbkluZm8+
JgogICAgICAgICBNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1p
bWVUb0Rlc2NyaXB0aW9ucy5lbmQoKTsKICAgICAgICAgZm9yIChNSU1FVG9EZXNjcmlwdGlvbnNN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWltZVRvRGVzY3JpcHRpb25zLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgewogICAgICAgICAgICAgTWltZUNsYXNzSW5mbyBtaW1lOwotICAgICAgICAg
ICAgbWltZS50eXBlID0gaXQtPmZpcnN0OwotICAgICAgICAgICAgbWltZS5kZXNjID0gaXQtPnNl
Y29uZDsKKyAgICAgICAgICAgIG1pbWUudHlwZSA9IGl0LT5rZXk7CisgICAgICAgICAgICBtaW1l
LmRlc2MgPSBpdC0+dmFsdWU7CiAgICAgICAgICAgICBtaW1lLmV4dGVuc2lvbnMgPSBwYWNrYWdl
LT5taW1lVG9FeHRlbnNpb25zKCkuZ2V0KG1pbWUudHlwZSk7CiAgICAgICAgICAgICBwbHVnaW5J
bmZvLm1pbWVzLmFwcGVuZChtaW1lKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdGZhdmljb25kYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0ZmF2aWNvbmRhdGFiYXNlLmNwcAppbmRleCBhMWZkMzdhMWUzMWRl
ZTg4MmZmNGNiOGNmNmM2ZjMwOTRiMWM1NjFkLi4wMDZhYjJiN2YzNDFhZTZhNDBjMmMwMjJjNWMw
Y2M1NzRjN2VmNjQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
ZmF2aWNvbmRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
ZmF2aWNvbmRhdGFiYXNlLmNwcApAQCAtNjExLDE4ICs2MTEsMTggQEAgc3RhdGljIHZvaWQgd2Vi
a2l0RmF2aWNvbkRhdGFiYXNlSW1wb3J0RmluaXNoZWQoV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBk
YXRhYmFzZSkKICAgICBWZWN0b3I8U3RyaW5nPiB0b0RlbGV0ZVVSTHM7CiAgICAgUGVuZGluZ0lj
b25SZXF1ZXN0TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBkYXRhYmFzZS0+cHJpdi0+cGVuZGlu
Z0ljb25SZXF1ZXN0cy5lbmQoKTsKICAgICBmb3IgKFBlbmRpbmdJY29uUmVxdWVzdE1hcDo6Y29u
c3RfaXRlcmF0b3IgaXRlciA9IGRhdGFiYXNlLT5wcml2LT5wZW5kaW5nSWNvblJlcXVlc3RzLmJl
Z2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKLSAgICAgICAgU3RyaW5nIGljb25VUkwgPSBp
Y29uRGF0YWJhc2UoKS5zeW5jaHJvbm91c0ljb25VUkxGb3JQYWdlVVJMKGl0ZXItPmZpcnN0KTsK
KyAgICAgICAgU3RyaW5nIGljb25VUkwgPSBpY29uRGF0YWJhc2UoKS5zeW5jaHJvbm91c0ljb25V
UkxGb3JQYWdlVVJMKGl0ZXItPmtleSk7CiAgICAgICAgIGlmICghaWNvblVSTC5pc0VtcHR5KCkp
CiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBQZW5kaW5nSWNvblJlcXVlc3RWZWN0
b3IqIGljb25zID0gaXRlci0+c2Vjb25kOworICAgICAgICBQZW5kaW5nSWNvblJlcXVlc3RWZWN0
b3IqIGljb25zID0gaXRlci0+dmFsdWU7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
aWNvbnMtPnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBQZW5kaW5nSWNvblJlcXVlc3QqIHJl
cXVlc3QgPSBpY29ucy0+YXQoaSkuZ2V0KCk7CiAgICAgICAgICAgICBpZiAocmVxdWVzdC0+YXN5
bmNSZXN1bHQoKSkKICAgICAgICAgICAgICAgICByZXF1ZXN0LT5hc3luY1Jlc3VsdENvbXBsZXRl
KDApOwogICAgICAgICB9CiAKLSAgICAgICAgdG9EZWxldGVVUkxzLmFwcGVuZChpdGVyLT5maXJz
dCk7CisgICAgICAgIHRvRGVsZXRlVVJMcy5hcHBlbmQoaXRlci0+a2V5KTsKICAgICB9CiAKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRvRGVsZXRlVVJMcy5zaXplKCk7ICsraSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJwbHVnaW4uY3BwIGIvU291
cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnBsdWdpbi5jcHAKaW5kZXggZTAzYjFlYTZk
YTMzYjdlMmYwMDIyNTVjZTg3Nzc4NjI0Y2RhNzA4Yy4uMDFkMGJiNWYyYmZkNzAwZjZiM2M5ZmM0
ZjhlNDIwYzU3MjQ4NmVjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdHdlYnBsdWdpbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdl
YnBsdWdpbi5jcHAKQEAgLTIzNywxMCArMjM3LDEwIEBAIEdTTGlzdCogd2Via2l0X3dlYl9wbHVn
aW5fZ2V0X21pbWV0eXBlcyhXZWJLaXRXZWJQbHVnaW4qIHBsdWdpbikKIAogICAgIGZvciAoTUlN
RVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1pbWVUb0Rlc2NyaXB0aW9u
cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgV2ViS2l0V2ViUGx1Z2luTUlN
RVR5cGUqIG1pbWVUeXBlID0gZ19zbGljZV9uZXcwKFdlYktpdFdlYlBsdWdpbk1JTUVUeXBlKTsK
LSAgICAgICAgbWltZVR5cGUtPm5hbWUgPSBnX3N0cmR1cChpdC0+Zmlyc3QudXRmOCgpLmRhdGEo
KSk7Ci0gICAgICAgIG1pbWVUeXBlLT5kZXNjcmlwdGlvbiA9IGdfc3RyZHVwKGl0LT5zZWNvbmQu
dXRmOCgpLmRhdGEoKSk7CisgICAgICAgIG1pbWVUeXBlLT5uYW1lID0gZ19zdHJkdXAoaXQtPmtl
eS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgbWltZVR5cGUtPmRlc2NyaXB0aW9uID0gZ19zdHJk
dXAoaXQtPnZhbHVlLnV0ZjgoKS5kYXRhKCkpOwogCi0gICAgICAgIFZlY3RvcjxTdHJpbmc+IGV4
dGVuc2lvbnMgPSBwcml2LT5jb3JlUGx1Z2luLT5taW1lVG9FeHRlbnNpb25zKCkuZ2V0KGl0LT5m
aXJzdCk7CisgICAgICAgIFZlY3RvcjxTdHJpbmc+IGV4dGVuc2lvbnMgPSBwcml2LT5jb3JlUGx1
Z2luLT5taW1lVG9FeHRlbnNpb25zKCkuZ2V0KGl0LT5rZXkpOwogICAgICAgICBtaW1lVHlwZS0+
ZXh0ZW5zaW9ucyA9IHN0YXRpY19jYXN0PGdjaGFyKio+KGdfbWFsbG9jMChzaXplb2YoY2hhciop
ICogKGV4dGVuc2lvbnMuc2l6ZSgpICsgMSkpKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGV4dGVuc2lvbnMuc2l6ZSgpOyBpKyspCiAgICAgICAgICAgICBtaW1lVHlwZS0+ZXh0
ZW5zaW9uc1tpXSA9IGdfc3RyZHVwKGV4dGVuc2lvbnNbaV0udXRmOCgpLmRhdGEoKSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9IaXN0b3J5L1dlYkhpc3RvcnkubW0gYi9Tb3VyY2Uv
V2ViS2l0L21hYy9IaXN0b3J5L1dlYkhpc3RvcnkubW0KaW5kZXggNjk2NGZjOTQ5YjUxMjE3M2E2
YmRjNWU3MGI1NjE4ZDMxY2I2NzdhMy4uZTc4MWQzMmZkMWRlOTUwZDkxNGFmNDgzNDk3NjQyMGRm
NTg3ZGFmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvSGlzdG9yeS9XZWJIaXN0b3J5
Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL0hpc3RvcnkvV2ViSGlzdG9yeS5tbQpAQCAtMjM4
LDcgKzIzOCw3IEBAIHN0YXRpYyBpbmxpbmUgV2ViSGlzdG9yeURhdGVLZXkgZGF0ZUtleShOU1Rp
bWVJbnRlcnZhbCBkYXRlKQogICAgICAgICByZXR1cm4gTk87CiAKICAgICBEYXRlVG9FbnRyaWVz
TWFwOjppdGVyYXRvciBpdCA9IF9lbnRyaWVzQnlEYXRlLT5maW5kKGRhdGVLZXkpOwotICAgIE5T
TXV0YWJsZUFycmF5ICplbnRyaWVzRm9yRGF0ZSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgTlNN
dXRhYmxlQXJyYXkgKmVudHJpZXNGb3JEYXRlID0gaXQtPnZhbHVlLmdldCgpOwogICAgIFtlbnRy
aWVzRm9yRGF0ZSByZW1vdmVPYmplY3RJZGVudGljYWxUbzplbnRyeV07CiAgICAgCiAgICAgLy8g
cmVtb3ZlIHRoaXMgZGF0ZSBlbnRpcmVseSBpZiB0aGVyZSBhcmUgbm8gb3RoZXIgZW50cmllcyBv
biBpdApAQCAtNDQwLDcgKzQ0MCw3IEBAIHN0YXRpYyBpbmxpbmUgV2ViSGlzdG9yeURhdGVLZXkg
ZGF0ZUtleShOU1RpbWVJbnRlcnZhbCBkYXRlKQogICAgICAgICBkYXlzQXNUaW1lSW50ZXJ2YWxz
LnJlc2VydmVDYXBhY2l0eShfZW50cmllc0J5RGF0ZS0+c2l6ZSgpKTsKICAgICAgICAgRGF0ZVRv
RW50cmllc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gX2VudHJpZXNCeURhdGUtPmVuZCgpOwog
ICAgICAgICBmb3IgKERhdGVUb0VudHJpZXNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gX2VudHJp
ZXNCeURhdGUtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIGRheXNBc1Rp
bWVJbnRlcnZhbHMuYXBwZW5kKGl0LT5maXJzdCk7CisgICAgICAgICAgICBkYXlzQXNUaW1lSW50
ZXJ2YWxzLmFwcGVuZChpdC0+a2V5KTsKIAogICAgICAgICBzb3J0KGRheXNBc1RpbWVJbnRlcnZh
bHMuYmVnaW4oKSwgZGF5c0FzVGltZUludGVydmFscy5lbmQoKSk7CiAgICAgICAgIHNpemVfdCBj
b3VudCA9IGRheXNBc1RpbWVJbnRlcnZhbHMuc2l6ZSgpOwpAQCAtODk3LDcgKzg5Nyw3IEBAIFdl
Ykhpc3RvcnlXcml0ZXI6OldlYkhpc3RvcnlXcml0ZXIoRGF0ZVRvRW50cmllc01hcCogZW50cmll
c0J5RGF0ZSkKICAgICBtX2RhdGVLZXlzLnJlc2VydmVDYXBhY2l0eShtX2VudHJpZXNCeURhdGUt
PnNpemUoKSk7CiAgICAgRGF0ZVRvRW50cmllc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9l
bnRyaWVzQnlEYXRlLT5lbmQoKTsKICAgICBmb3IgKERhdGVUb0VudHJpZXNNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbV9lbnRyaWVzQnlEYXRlLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0g
ICAgICAgIG1fZGF0ZUtleXMuYXBwZW5kKGl0LT5maXJzdCk7CisgICAgICAgIG1fZGF0ZUtleXMu
YXBwZW5kKGl0LT5rZXkpOwogICAgIHNvcnQobV9kYXRlS2V5cy5iZWdpbigpLCBtX2RhdGVLZXlz
LmVuZCgpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJDb3Jl
U3RhdGlzdGljcy5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3Mu
bW0KaW5kZXggZDU5M2Y4Y2FmMWVjM2FjY2E1YjRiMzBhODNjYmQ2YjJjMTk1NDE1Mi4uMDczZDU5
MDNmYWFiMTU0ZDk2NjU4ZmU0YjYzYzU3MGNiYzVmYzdhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21h
Yy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tCkBAIC04OSw4ICs4OSw4IEBAIHVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwogICAgIE93blB0cjxUeXBlQ291bnRTZXQ+IGNvdW50cyhKU0RPTVdpbmRv
dzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAucHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50cygp
KTsKICAgICBIYXNoQ291bnRlZFNldDxjb25zdCBjaGFyKj46Oml0ZXJhdG9yIGVuZCA9IGNvdW50
cy0+ZW5kKCk7CiAgICAgZm9yIChIYXNoQ291bnRlZFNldDxjb25zdCBjaGFyKj46Oml0ZXJhdG9y
IGl0ID0gY291bnRzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBpdC0+c2Vjb25kOyArK2kpCi0gICAgICAgICAgICBbcmVzdWx0IGFk
ZE9iamVjdDpbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6aXQtPmZpcnN0XV07CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdC0+dmFsdWU7ICsraSkKKyAgICAgICAgICAg
IFtyZXN1bHQgYWRkT2JqZWN0OltOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzppdC0+a2V5
XV07CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTEwNCw4ICsxMDQsOCBAQCB1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKICAgICBPd25QdHI8VHlwZUNvdW50U2V0PiBjb3VudHMoSlNE
T01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLm9iamVjdFR5cGVDb3VudHMoKSk7
CiAgICAgSGFzaENvdW50ZWRTZXQ8Y29uc3QgY2hhcio+OjppdGVyYXRvciBlbmQgPSBjb3VudHMt
PmVuZCgpOwogICAgIGZvciAoSGFzaENvdW50ZWRTZXQ8Y29uc3QgY2hhcio+OjppdGVyYXRvciBp
dCA9IGNvdW50cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgaXQtPnNlY29uZDsgKytpKQotICAgICAgICAgICAgW3Jlc3VsdCBhZGRP
YmplY3Q6W05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOml0LT5maXJzdF1dOworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXQtPnZhbHVlOyArK2kpCisgICAgICAgICAgICBb
cmVzdWx0IGFkZE9iamVjdDpbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6aXQtPmtleV1d
OwogICAgIAogICAgIHJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyLm1tIGIvU291cmNl
L1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlci5tbQpp
bmRleCBlNDlkNTBmNGJjYmQ1YzFjYmNiODM3YzhmMjk0NjNkNGRjMmY0OWY2Li4zY2UwODliZWQy
N2E0YzIzYWYyM2M3NTA5MjRhOWQ4OWFjMGM3MTFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXIu
bW0KQEAgLTczLDcgKzczLDcgQEAgTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkqIE5ldHNjYXBlUGx1
Z2luSG9zdE1hbmFnZXI6Omhvc3RGb3JQbHVnaW4oY29uc3QgV1RGOjpTdHIKICAgICAKICAgICAv
LyBUaGUgcGFja2FnZSB3YXMgYWxyZWFkeSBpbiB0aGUgbWFwLCBqdXN0IHJldHVybiBpdC4KICAg
ICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9y
LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogICAgICAg
ICAKICAgICBtYWNoX3BvcnRfdCBjbGllbnRQb3J0OwogICAgIGlmIChtYWNoX3BvcnRfYWxsb2Nh
dGUobWFjaF90YXNrX3NlbGYoKSwgTUFDSF9QT1JUX1JJR0hUX1JFQ0VJVkUsICZjbGllbnRQb3J0
KSAhPSBLRVJOX1NVQ0NFU1MpIHsKQEAgLTk1LDcgKzk1LDcgQEAgTmV0c2NhcGVQbHVnaW5Ib3N0
UHJveHkqIE5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXI6Omhvc3RGb3JQbHVnaW4oY29uc3QgV1RG
OjpTdHIKICAgICAKICAgICBOZXRzY2FwZVBsdWdpbkhvc3RQcm94eSogaG9zdFByb3h5ID0gbmV3
IE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5KGNsaWVudFBvcnQsIHBsdWdpbkhvc3RQb3J0LCBwbHVn
aW5Ib3N0UFNOLCBzaG91bGRDYWNoZU1pc3NpbmdQcm9wZXJ0aWVzQW5kTWV0aG9kcyk7CiAgICAg
Ci0gICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBob3N0UHJveHk7CisgICAgcmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZSA9IGhvc3RQcm94eTsKICAgICAKICAgICByZXR1cm4gaG9zdFByb3h5Owog
fQpAQCAtMjA0LDcgKzIwNCw3IEBAIHZvaWQgTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlcjo6cGx1
Z2luSG9zdERpZWQoTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkqIHBsdWdpbkhvCiAKICAgICAvLyBU
aGlzIGhhcyBPKG4pIGNvbXBsZXhpdHkgYnV0IHRoZSBudW1iZXIgb2YgYWN0aXZlIHBsdWctaW4g
aG9zdHMgaXMgdmVyeSBzbWFsbCBzbyBpdCBzaG91bGRuJ3QgbWF0dGVyLgogICAgIGZvciAoUGx1
Z2luSG9zdE1hcDo6aXRlcmF0b3IgaXQgPSBtX3BsdWdpbkhvc3RzLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnNlY29uZCA9PSBwbHVnaW5Ib3N0KSB7CisgICAg
ICAgIGlmIChpdC0+dmFsdWUgPT0gcGx1Z2luSG9zdCkgewogICAgICAgICAgICAgbV9wbHVnaW5I
b3N0cy5yZW1vdmUoaXQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0yODYs
NyArMjg2LDcgQEAgdm9pZCBOZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyOjpkaWRDcmVhdGVXaW5k
b3coKQogICAgIC8vIFNlZSBpZiBhbnkgb2Ygb3VyIGhvc3RzIGFyZSBpbiBmdWxsLXNjcmVlbiBt
b2RlLgogICAgIFBsdWdpbkhvc3RNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fcGx1Z2luSG9zdHMuZW5k
KCk7CiAgICAgZm9yIChQbHVnaW5Ib3N0TWFwOjppdGVyYXRvciBpdCA9IG1fcGx1Z2luSG9zdHMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIE5ldHNjYXBlUGx1Z2luSG9zdFBy
b3h5KiBob3N0UHJveHkgPSBpdC0+c2Vjb25kOworICAgICAgICBOZXRzY2FwZVBsdWdpbkhvc3RQ
cm94eSogaG9zdFByb3h5ID0gaXQtPnZhbHVlOwogICAgICAgICAKICAgICAgICAgaWYgKCFob3N0
UHJveHktPmlzTWVudUJhclZpc2libGUoKSkgewogICAgICAgICAgICAgLy8gTWFrZSBvdXJzZWx2
ZXMgdGhlIGZyb250IHByb2Nlc3MuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9QbHVn
aW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkhvc3RQcm94eS5tbSBiL1NvdXJjZS9XZWJLaXQvbWFj
L1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdFByb3h5Lm1tCmluZGV4IGFmNmYyYmU5
OTY5Y2IxMWNiMzNhNTYzMTdmZGRhOGMyY2Y2MWNmNWUuLjBmYjI2ZDBhOWI4NDc1MjI2YmVmY2Mz
NDk2OGI5ZjUwNmViOTE1YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMv
SG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdFByb3h5Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFj
L1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdFByb3h5Lm1tCkBAIC0xNDQsNyArMTQ0
LDcgQEAgdm9pZCBOZXRzY2FwZVBsdWdpbkhvc3RQcm94eTo6cGx1Z2luSG9zdERpZWQoKQogICAK
ICAgICBQbHVnaW5JbnN0YW5jZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaW5zdGFuY2VzLmVu
ZCgpOwogICAgIGZvciAoUGx1Z2luSW5zdGFuY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaW5z
dGFuY2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+cGx1
Z2luSG9zdERpZWQoKTsKKyAgICAgICAgaXQtPnZhbHVlLT5wbHVnaW5Ib3N0RGllZCgpOwogICAg
IAogICAgIE5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXI6OnNoYXJlZCgpLnBsdWdpbkhvc3REaWVk
KHRoaXMpOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0
ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tIGIvU291cmNlL1dlYktpdC9tYWMvUGx1
Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tCmluZGV4IGViODZhMmVm
MTk1YjFmODBiYWQ4NDRhMmFkNTdjNzY1OWVlNGU1ZjAuLmUxZGNlNDI3OGQzZjY2Yjg3ODNhNDIz
N2YxNjU1YjRlMjgxNjYxYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMv
SG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW0KQEAgLTE0
NSw3ICsxNDUsNyBAQCB1aW50MzJfdCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OkxvY2Fs
T2JqZWN0TWFwOjppZEZvck9iamVjdChKU0dsb2JhbERhdGEmCiAgICAgCiAgICAgSGFzaE1hcDxK
U0M6OkpTT2JqZWN0KiwgcGFpcjx1aW50MzJfdCwgdWludDMyX3Q+ID46Oml0ZXJhdG9yIGl0ZXIg
PSBtX2pzT2JqZWN0VG9JRE1hcC5maW5kKG9iamVjdCk7CiAgICAgaWYgKGl0ZXIgIT0gbV9qc09i
amVjdFRvSURNYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdGVyLT5zZWNvbmQuZmlyc3Q7Cisg
ICAgICAgIHJldHVybiBpdGVyLT52YWx1ZS5maXJzdDsKICAgICAKICAgICBkbyB7CiAgICAgICAg
IG9iamVjdElEID0gKyttX29iamVjdElEQ291bnRlcjsKQEAgLTE2Miw3ICsxNjIsNyBAQCB2b2lk
IE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6TG9jYWxPYmplY3RNYXA6OnJldGFpbihKU0M6
OkpTT2JqZWN0KiBvYmplY3QpCiAgICAgSGFzaE1hcDxKU0M6OkpTT2JqZWN0KiwgcGFpcjx1aW50
MzJfdCwgdWludDMyX3Q+ID46Oml0ZXJhdG9yIGl0ZXIgPSBtX2pzT2JqZWN0VG9JRE1hcC5maW5k
KG9iamVjdCk7CiAgICAgQVNTRVJUKGl0ZXIgIT0gbV9qc09iamVjdFRvSURNYXAuZW5kKCkpOwog
Ci0gICAgaXRlci0+c2Vjb25kLnNlY29uZCA9IGl0ZXItPnNlY29uZC5zZWNvbmQgKyAxOworICAg
IGl0ZXItPnZhbHVlLnNlY29uZCA9IGl0ZXItPnZhbHVlLnNlY29uZCArIDE7CiB9CiAKIHZvaWQg
TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpMb2NhbE9iamVjdE1hcDo6cmVsZWFzZShKU0M6
OkpTT2JqZWN0KiBvYmplY3QpCkBAIC0xNzAsMTAgKzE3MCwxMCBAQCB2b2lkIE5ldHNjYXBlUGx1
Z2luSW5zdGFuY2VQcm94eTo6TG9jYWxPYmplY3RNYXA6OnJlbGVhc2UoSlNDOjpKU09iamVjdCog
b2JqZWN0KQogICAgIEhhc2hNYXA8SlNDOjpKU09iamVjdCosIHBhaXI8dWludDMyX3QsIHVpbnQz
Ml90PiA+OjppdGVyYXRvciBpdGVyID0gbV9qc09iamVjdFRvSURNYXAuZmluZChvYmplY3QpOwog
ICAgIEFTU0VSVChpdGVyICE9IG1fanNPYmplY3RUb0lETWFwLmVuZCgpKTsKIAotICAgIEFTU0VS
VChpdGVyLT5zZWNvbmQuc2Vjb25kID4gMCk7Ci0gICAgaXRlci0+c2Vjb25kLnNlY29uZCA9IGl0
ZXItPnNlY29uZC5zZWNvbmQgLSAxOwotICAgIGlmICghaXRlci0+c2Vjb25kLnNlY29uZCkgewot
ICAgICAgICBtX2lkVG9KU09iamVjdE1hcC5yZW1vdmUoaXRlci0+c2Vjb25kLmZpcnN0KTsKKyAg
ICBBU1NFUlQoaXRlci0+dmFsdWUuc2Vjb25kID4gMCk7CisgICAgaXRlci0+dmFsdWUuc2Vjb25k
ID0gaXRlci0+dmFsdWUuc2Vjb25kIC0gMTsKKyAgICBpZiAoIWl0ZXItPnZhbHVlLnNlY29uZCkg
eworICAgICAgICBtX2lkVG9KU09iamVjdE1hcC5yZW1vdmUoaXRlci0+dmFsdWUuZmlyc3QpOwog
ICAgICAgICBtX2pzT2JqZWN0VG9JRE1hcC5yZW1vdmUoaXRlcik7CiAgICAgfQogfQpAQCAtMTk3
LDEwICsxOTcsMTAgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OkxvY2FsT2Jq
ZWN0TWFwOjpmb3JnZXQodWludDMyX3Qgb2JqZWN0SUQpCiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KIAotICAgIEhhc2hNYXA8SlNDOjpKU09iamVjdCosIHBhaXI8dWludDMyX3QsIHVpbnQz
Ml90PiA+OjppdGVyYXRvciBySXRlciA9IG1fanNPYmplY3RUb0lETWFwLmZpbmQoaXRlci0+c2Vj
b25kLmdldCgpKTsKKyAgICBIYXNoTWFwPEpTQzo6SlNPYmplY3QqLCBwYWlyPHVpbnQzMl90LCB1
aW50MzJfdD4gPjo6aXRlcmF0b3Igckl0ZXIgPSBtX2pzT2JqZWN0VG9JRE1hcC5maW5kKGl0ZXIt
PnZhbHVlLmdldCgpKTsKIAogICAgIC8vIElmIHRoZSBvYmplY3QgaXMgYmVpbmcgc2VudCB0byBw
bHVnLWluIHJpZ2h0IG5vdywgdGhlbiBpdCdzIG5vdCB0aGUgdGltZSB0byBmb3JnZXQuCi0gICAg
aWYgKHJJdGVyLT5zZWNvbmQuc2Vjb25kICE9IDEpCisgICAgaWYgKHJJdGVyLT52YWx1ZS5zZWNv
bmQgIT0gMSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgbV9qc09iamVjdFRvSURNYXAu
cmVtb3ZlKHJJdGVyKTsKQEAgLTMzMCw3ICszMzAsNyBAQCB2b2lkIE5ldHNjYXBlUGx1Z2luSW5z
dGFuY2VQcm94eTo6ZGVzdHJveSgpCiAgICAgCiAgICAgRnJhbWVMb2FkTWFwOjppdGVyYXRvciBl
bmQgPSBtX3BlbmRpbmdGcmFtZUxvYWRzLmVuZCgpOwogICAgIGZvciAoRnJhbWVMb2FkTWFwOjpp
dGVyYXRvciBpdCA9IG1fcGVuZGluZ0ZyYW1lTG9hZHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KQotICAgICAgICBbKGl0LT5maXJzdCkgX3NldEludGVybmFsTG9hZERlbGVnYXRlOm5pbF07Cisg
ICAgICAgIFsoaXQtPmtleSkgX3NldEludGVybmFsTG9hZERlbGVnYXRlOm5pbF07CiAKICAgICBf
V0tQSERlc3Ryb3lQbHVnaW5JbnN0YW5jZShtX3BsdWdpbkhvc3RQcm94eS0+cG9ydCgpLCBtX3Bs
dWdpbklELCByZXF1ZXN0SUQpOwogIApAQCAtNjc4LDcgKzY3OCw3IEBAIHZvaWQgTmV0c2NhcGVQ
bHVnaW5JbnN0YW5jZVByb3h5Ojp3ZWJGcmFtZURpZEZpbmlzaExvYWRXaXRoUmVhc29uKFdlYkZy
YW1lKiB3ZWJGCiAgICAgRnJhbWVMb2FkTWFwOjppdGVyYXRvciBpdCA9IG1fcGVuZGluZ0ZyYW1l
TG9hZHMuZmluZCh3ZWJGcmFtZSk7CiAgICAgQVNTRVJUKGl0ICE9IG1fcGVuZGluZ0ZyYW1lTG9h
ZHMuZW5kKCkpOwogICAgICAgICAKLSAgICBQbHVnaW5SZXF1ZXN0KiBwbHVnaW5SZXF1ZXN0ID0g
aXQtPnNlY29uZC5nZXQoKTsKKyAgICBQbHVnaW5SZXF1ZXN0KiBwbHVnaW5SZXF1ZXN0ID0gaXQt
PnZhbHVlLmdldCgpOwogICAgIF9XS1BITG9hZFVSTE5vdGlmeShtX3BsdWdpbkhvc3RQcm94eS0+
cG9ydCgpLCBtX3BsdWdpbklELCBwbHVnaW5SZXF1ZXN0LT5yZXF1ZXN0SUQoKSwgcmVhc29uKTsK
ICAKICAgICBtX3BlbmRpbmdGcmFtZUxvYWRzLnJlbW92ZShpdCk7CkBAIC0xNjM4LDcgKzE2Mzgs
NyBAQCB2b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6Y2FuY2VsQ2hlY2tJZkFsbG93
ZWRUb0xvYWRVUkwodWludDMyX3QgY2hlY2tJRAogICAgIGlmIChpdCA9PSBtX3VybENoZWNrcy5l
bmQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIFdlYlBsdWdpbkNvbnRhaW5lckNoZWNr
ICpjaGVjayA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgV2ViUGx1Z2luQ29udGFpbmVyQ2hlY2sg
KmNoZWNrID0gaXQtPnZhbHVlLmdldCgpOwogICAgIFtjaGVjayBjYW5jZWxdOwogICAgIG1fdXJs
Q2hlY2tzLnJlbW92ZShpdCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9QbHVn
aW5zL0hvc3RlZC9Qcm94eUluc3RhbmNlLm1tIGIvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9I
b3N0ZWQvUHJveHlJbnN0YW5jZS5tbQppbmRleCAwOTQ0M2RjMTYyOGE2NjhmMmZiMjE0ZjNiNTMx
N2M2YjU0NDQ0MWNhLi42MmI2MDhlNjVkZTNlMDNjMzUyOGIzMzc5OGJiNDQ2NzZkZjJlNWZhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9Qcm94eUluc3RhbmNl
Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL1Byb3h5SW5zdGFuY2Uu
bW0KQEAgLTM1NSw4ICszNTUsOCBAQCBNZXRob2RMaXN0IFByb3h5SW5zdGFuY2U6Om1ldGhvZHNO
YW1lZChjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKQogICAgIE1ldGhvZE1hcDo6aXRlcmF0
b3IgZXhpc3RpbmdNYXBFbnRyeSA9IG1fbWV0aG9kcy5maW5kKGlkZW50aWZpZXIuaW1wbCgpKTsK
ICAgICBpZiAoZXhpc3RpbmdNYXBFbnRyeSAhPSBtX21ldGhvZHMuZW5kKCkpIHsKICAgICAgICAg
TWV0aG9kTGlzdCBtZXRob2RMaXN0OwotICAgICAgICBpZiAoZXhpc3RpbmdNYXBFbnRyeS0+c2Vj
b25kKQotICAgICAgICAgICAgbWV0aG9kTGlzdC5hcHBlbmQoZXhpc3RpbmdNYXBFbnRyeS0+c2Vj
b25kKTsKKyAgICAgICAgaWYgKGV4aXN0aW5nTWFwRW50cnktPnZhbHVlKQorICAgICAgICAgICAg
bWV0aG9kTGlzdC5hcHBlbmQoZXhpc3RpbmdNYXBFbnRyeS0+dmFsdWUpOwogICAgICAgICByZXR1
cm4gbWV0aG9kTGlzdDsKICAgICB9CiAgICAgCkBAIC0zNzgsMTEgKzM3OCwxMSBAQCBNZXRob2RM
aXN0IFByb3h5SW5zdGFuY2U6Om1ldGhvZHNOYW1lZChjb25zdCBJZGVudGlmaWVyJiBpZGVudGlm
aWVyKQogICAgIC8vIEFkZCBhIG5ldyBlbnRyeSB0byB0aGUgbWFwIHVubGVzcyBhbiBlbnRyeSB3
YXMgYWRkZWQgd2hpbGUgd2Ugd2VyZSBpbiB3YWl0Rm9yUmVwbHkuCiAgICAgTWV0aG9kTWFwOjpB
ZGRSZXN1bHQgbWFwQWRkUmVzdWx0ID0gbV9tZXRob2RzLmFkZChpZGVudGlmaWVyLmltcGwoKSwg
MCk7CiAgICAgaWYgKG1hcEFkZFJlc3VsdC5pc05ld0VudHJ5ICYmIHJlcGx5LT5tX3Jlc3VsdCkK
LSAgICAgICAgbWFwQWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBuZXcgUHJveHlNZXRob2Qo
bWV0aG9kTmFtZSk7CisgICAgICAgIG1hcEFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBuZXcg
UHJveHlNZXRob2QobWV0aG9kTmFtZSk7CiAKICAgICBNZXRob2RMaXN0IG1ldGhvZExpc3Q7Ci0g
ICAgaWYgKG1hcEFkZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKQotICAgICAgICBtZXRob2RMaXN0
LmFwcGVuZChtYXBBZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7CisgICAgaWYgKG1hcEFkZFJl
c3VsdC5pdGVyYXRvci0+dmFsdWUpCisgICAgICAgIG1ldGhvZExpc3QuYXBwZW5kKG1hcEFkZFJl
c3VsdC5pdGVyYXRvci0+dmFsdWUpOwogICAgIHJldHVybiBtZXRob2RMaXN0OwogfQogCkBAIC0z
OTQsNyArMzk0LDcgQEAgRmllbGQqIFByb3h5SW5zdGFuY2U6OmZpZWxkTmFtZWQoY29uc3QgSWRl
bnRpZmllciYgaWRlbnRpZmllcikKICAgICAvLyBJZiB3ZSBhbHJlYWR5IGhhdmUgYW4gZW50cnkg
aW4gdGhlIG1hcCwgdXNlIGl0LgogICAgIEZpZWxkTWFwOjppdGVyYXRvciBleGlzdGluZ01hcEVu
dHJ5ID0gbV9maWVsZHMuZmluZChpZGVudGlmaWVyLmltcGwoKSk7CiAgICAgaWYgKGV4aXN0aW5n
TWFwRW50cnkgIT0gbV9maWVsZHMuZW5kKCkpCi0gICAgICAgIHJldHVybiBleGlzdGluZ01hcEVu
dHJ5LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBleGlzdGluZ01hcEVudHJ5LT52YWx1ZTsKICAg
ICAKICAgICB1aW50NjRfdCBwcm9wZXJ0eU5hbWUgPSByZWludGVycHJldF9jYXN0PHVpbnQ2NF90
PihfTlBOX0dldFN0cmluZ0lkZW50aWZpZXIoaWRlbnRpZmllci5hc2NpaSgpLmRhdGEoKSkpOwog
ICAgIHVpbnQzMl90IHJlcXVlc3RJRCA9IG1faW5zdGFuY2VQcm94eS0+bmV4dFJlcXVlc3RJRCgp
OwpAQCAtNDE0LDggKzQxNCw4IEBAIEZpZWxkKiBQcm94eUluc3RhbmNlOjpmaWVsZE5hbWVkKGNv
bnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIpCiAgICAgLy8gQWRkIGEgbmV3IGVudHJ5IHRvIHRo
ZSBtYXAgdW5sZXNzIGFuIGVudHJ5IHdhcyBhZGRlZCB3aGlsZSB3ZSB3ZXJlIGluIHdhaXRGb3JS
ZXBseS4KICAgICBGaWVsZE1hcDo6QWRkUmVzdWx0IG1hcEFkZFJlc3VsdCA9IG1fZmllbGRzLmFk
ZChpZGVudGlmaWVyLmltcGwoKSwgMCk7CiAgICAgaWYgKG1hcEFkZFJlc3VsdC5pc05ld0VudHJ5
ICYmIHJlcGx5LT5tX3Jlc3VsdCkKLSAgICAgICAgbWFwQWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNv
bmQgPSBuZXcgUHJveHlGaWVsZChwcm9wZXJ0eU5hbWUpOwotICAgIHJldHVybiBtYXBBZGRSZXN1
bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgbWFwQWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZSA9IG5ldyBQcm94eUZpZWxkKHByb3BlcnR5TmFtZSk7CisgICAgcmV0dXJuIG1hcEFkZFJlc3Vs
dC5pdGVyYXRvci0+dmFsdWU7CiB9CiAKIEpTQzo6SlNWYWx1ZSBQcm94eUluc3RhbmNlOjpmaWVs
ZFZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgRmllbGQqIGZpZWxkKSBjb25zdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblZpZXcubW0g
Yi9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5tbQppbmRl
eCA1ZjFmNTU2OTQxYTk0YzEwZjRkNWI3MWIyODMzODM5ZWEyNWJlMDQzLi4xZTliMDExMWQ3MGMw
NWNiNzJlNWM4ZGU2OTdlYmE0ZjA4Zjk3ODhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21h
Yy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21h
Yy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5tbQpAQCAtNzEwLDcgKzcxMCw3IEBAIHN0
YXRpYyBpbmxpbmUgdm9pZCBnZXROUFJlY3QoY29uc3QgTlNSZWN0JiBuciwgTlBSZWN0JiBucHIp
CiAKICAgICBIYXNoTWFwPHVpbnQzMl90LCBQbHVnaW5UaW1lcio+Ojpjb25zdF9pdGVyYXRvciBl
bmQgPSB0aW1lcnMtPmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDx1aW50MzJfdCwgUGx1Z2luVGlt
ZXIqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSB0aW1lcnMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgewotICAgICAgICBQbHVnaW5UaW1lciogdGltZXIgPSBpdC0+c2Vjb25kOworICAgICAgICBQ
bHVnaW5UaW1lciogdGltZXIgPSBpdC0+dmFsdWU7CiAgICAgICAgIHRpbWVyLT5zdG9wKCk7CiAg
ICAgfSAgICAKIH0KQEAgLTcyOCw3ICs3MjgsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZ2V0TlBS
ZWN0KGNvbnN0IE5TUmVjdCYgbnIsIE5QUmVjdCYgbnByKQogICAgIAogICAgIEhhc2hNYXA8dWlu
dDMyX3QsIFBsdWdpblRpbWVyKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHRpbWVycy0+ZW5kKCk7
CiAgICAgZm9yIChIYXNoTWFwPHVpbnQzMl90LCBQbHVnaW5UaW1lcio+Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IHRpbWVycy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFBsdWdp
blRpbWVyKiB0aW1lciA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFBsdWdpblRpbWVyKiB0aW1lciA9
IGl0LT52YWx1ZTsKICAgICAgICAgQVNTRVJUKCF0aW1lci0+aXNBY3RpdmUoKSk7CiAgICAgICAg
IHRpbWVyLT5zdGFydChfaXNDb21wbGV0ZWx5T2JzY3VyZWQpOwogICAgIH0gICAgCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJOb3RpZmljYXRpb25DbGll
bnQubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJOb3RpZmljYXRpb25D
bGllbnQubW0KaW5kZXggYzhiMWUyZDFlMzdhMDEyMGI4OTA3MDBhOWJkNTg2NmZmODU2YTgxZi4u
ZGQzZTE5YjAyNzQ2YWJkMGRiYzc3ZDZkNjU5ZmI2NDg4ZGIzZTdjNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViTm90aWZpY2F0aW9uQ2xpZW50Lm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYk5vdGlmaWNhdGlvbkNsaWVu
dC5tbQpAQCAtNzIsNyArNzIsNyBAQCBib29sIFdlYk5vdGlmaWNhdGlvbkNsaWVudDo6c2hvdyhO
b3RpZmljYXRpb24qIG5vdGlmaWNhdGlvbikKICAgICBtX25vdGlmaWNhdGlvbk1hcC5zZXQobm90
aWZpY2F0aW9uLCB3ZWJOb3RpZmljYXRpb24pOwogCiAgICAgTm90aWZpY2F0aW9uQ29udGV4dE1h
cDo6aXRlcmF0b3IgaXQgPSBtX25vdGlmaWNhdGlvbkNvbnRleHRNYXAuYWRkKG5vdGlmaWNhdGlv
bi0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBWZWN0b3I8UmV0YWluUHRyPFdlYk5vdGlmaWNh
dGlvbj4gPigpKS5pdGVyYXRvcjsKLSAgICBpdC0+c2Vjb25kLmFwcGVuZCh3ZWJOb3RpZmljYXRp
b24pOworICAgIGl0LT52YWx1ZS5hcHBlbmQod2ViTm90aWZpY2F0aW9uKTsKIAogICAgIFtbbV93
ZWJWaWV3IF9ub3RpZmljYXRpb25Qcm92aWRlcl0gc2hvd05vdGlmaWNhdGlvbjp3ZWJOb3RpZmlj
YXRpb24uZ2V0KCkgZnJvbVdlYlZpZXc6bV93ZWJWaWV3XTsKICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTEwMiw3ICsxMDIsNyBAQCB2b2lkIFdlYk5vdGlmaWNhdGlvbkNsaWVudDo6Y2xlYXJOb3RpZmlj
YXRpb25zKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCiAgICAgaWYgKGl0ID09IG1f
bm90aWZpY2F0aW9uQ29udGV4dE1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAg
IFZlY3RvcjxSZXRhaW5QdHI8V2ViTm90aWZpY2F0aW9uPiA+JiB3ZWJOb3RpZmljYXRpb25zID0g
aXQtPnNlY29uZDsKKyAgICBWZWN0b3I8UmV0YWluUHRyPFdlYk5vdGlmaWNhdGlvbj4gPiYgd2Vi
Tm90aWZpY2F0aW9ucyA9IGl0LT52YWx1ZTsKICAgICBOU011dGFibGVBcnJheSAqbnNJRHMgPSBb
TlNNdXRhYmxlQXJyYXkgYXJyYXldOwogICAgIHNpemVfdCBjb3VudCA9IHdlYk5vdGlmaWNhdGlv
bnMuc2l6ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewpAQCAt
MTI4LDEwICsxMjgsMTAgQEAgdm9pZCBXZWJOb3RpZmljYXRpb25DbGllbnQ6Om5vdGlmaWNhdGlv
bk9iamVjdERlc3Ryb3llZChOb3RpZmljYXRpb24qIG5vdGlmaWNhdGkKIAogICAgIE5vdGlmaWNh
dGlvbkNvbnRleHRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9ub3RpZmljYXRpb25Db250ZXh0TWFwLmZp
bmQobm90aWZpY2F0aW9uLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwogICAgIEFTU0VSVChp
dCAhPSBtX25vdGlmaWNhdGlvbkNvbnRleHRNYXAuZW5kKCkpOwotICAgIHNpemVfdCBpbmRleCA9
IGl0LT5zZWNvbmQuZmluZCh3ZWJOb3RpZmljYXRpb24pOworICAgIHNpemVfdCBpbmRleCA9IGl0
LT52YWx1ZS5maW5kKHdlYk5vdGlmaWNhdGlvbik7CiAgICAgQVNTRVJUKGluZGV4ICE9IG5vdEZv
dW5kKTsKLSAgICBpdC0+c2Vjb25kLnJlbW92ZShpbmRleCk7Ci0gICAgaWYgKGl0LT5zZWNvbmQu
aXNFbXB0eSgpKQorICAgIGl0LT52YWx1ZS5yZW1vdmUoaW5kZXgpOworICAgIGlmIChpdC0+dmFs
dWUuaXNFbXB0eSgpKQogICAgICAgICBtX25vdGlmaWNhdGlvbkNvbnRleHRNYXAucmVtb3ZlKGl0
KTsKIAogICAgIFtbbV93ZWJWaWV3IF9ub3RpZmljYXRpb25Qcm92aWRlcl0gbm90aWZpY2F0aW9u
RGVzdHJveWVkOndlYk5vdGlmaWNhdGlvbi5nZXQoKV07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmll
dy9XZWJIVE1MVmlldy5tbQppbmRleCA0MmRkMTA0OTJiYTRkMTBlZGU5NDg2YWZmMWU4NTEyYzhi
YjQ5NmRjLi4wN2QwOTZlZDUyNmJiMzk4ZDYwZTQzM2M3NGViOWIxNzgwNWJlZWQ4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0KQEAgLTIzNzAsNyArMjM3MCw3IEBA
IHN0YXRpYyBTdHJpbmcgY29tbWFuZE5hbWVGb3JTZWxlY3RvcihTRUwgc2VsZWN0b3IpCiAgICAg
c3RhdGljIGNvbnN0IFNlbGVjdG9yTmFtZU1hcCogZXhjZXB0aW9uTWFwID0gY3JlYXRlU2VsZWN0
b3JFeGNlcHRpb25NYXAoKTsKICAgICBTZWxlY3Rvck5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gZXhjZXB0aW9uTWFwLT5maW5kKHNlbGVjdG9yKTsKICAgICBpZiAoaXQgIT0gZXhjZXB0aW9u
TWFwLT5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBp
dC0+dmFsdWU7CiAKICAgICAvLyBSZW1vdmUgdGhlIHRyYWlsaW5nIGNvbG9uLgogICAgIC8vIE5v
IG5lZWQgdG8gY2FwaXRhbGl6ZSB0aGUgY29tbWFuZCBuYW1lIHNpbmNlIEVkaXRvciBjb21tYW5k
IG5hbWVzIGFyZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3Bw
IGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCmluZGV4IDUyYzY0NTc0YmI5YmNl
ODY0ZTM2MDY3ODBkMGM4YzBlOWEwOWNkZjEuLjhhM2IzZmE3NTQxOWUwYmQ2OTUxYTIyMDczZDY0
OTJhOWMzMzY4NjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAKQEAgLTIyMjgsNyArMjIy
OCw3IEBAIHN0YXRpYyB2b2lkIGV4dHJhY3RDb250ZW50VHlwZUZyb21QbHVnaW5WZWN0b3IoY29u
c3QgVmVjdG9yPFBsdWdpblBhY2thZ2UqPiYgcGx1CiAgICAgICAgIE1JTUVUb0Rlc2NyaXB0aW9u
c01hcDo6Y29uc3RfaXRlcmF0b3IgbWFwX2l0ID0gcGx1Z2luc1tpXS0+bWltZVRvRGVzY3JpcHRp
b25zKCkuYmVnaW4oKTsKICAgICAgICAgTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVy
YXRvciBtYXBfZW5kID0gcGx1Z2luc1tpXS0+bWltZVRvRGVzY3JpcHRpb25zKCkuZW5kKCk7CiAg
ICAgICAgIGZvciAoOyBtYXBfaXQgIT0gbWFwX2VuZDsgKyttYXBfaXQpCi0gICAgICAgICAgICAq
bGlzdCA8PCBtYXBfaXQtPmZpcnN0OworICAgICAgICAgICAgKmxpc3QgPDwgbWFwX2l0LT5rZXk7
CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGx1Z2lu
ZGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBsdWdpbmRhdGFiYXNlLmNw
cAppbmRleCBhN2EzYjVmMmMxZTg5ZjQ3NDM3YzA4YTk3ZmNiMjk2Nzg2YmY4ZTU4Li5jNTMyOGM4
ZjY3NWYyYzY2ZjdiOWI0MjBkNjUxMzdmZDlmODZiODk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L3F0L0FwaS9xd2VicGx1Z2luZGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQv
QXBpL3F3ZWJwbHVnaW5kYXRhYmFzZS5jcHAKQEAgLTEyMiw4ICsxMjIsOCBAQCBRTGlzdDxRV2Vi
UGx1Z2luSW5mbzo6TWltZVR5cGU+IFFXZWJQbHVnaW5JbmZvOjptaW1lVHlwZXMoKSBjb25zdAog
CiAgICAgICAgIGZvciAoTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9
IG1pbWVUb0Rlc2NyaXB0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAg
ICAgIE1pbWVUeXBlIG1pbWVUeXBlOwotICAgICAgICAgICAgbWltZVR5cGUubmFtZSA9IGl0LT5m
aXJzdDsKLSAgICAgICAgICAgIG1pbWVUeXBlLmRlc2NyaXB0aW9uID0gaXQtPnNlY29uZDsKKyAg
ICAgICAgICAgIG1pbWVUeXBlLm5hbWUgPSBpdC0+a2V5OworICAgICAgICAgICAgbWltZVR5cGUu
ZGVzY3JpcHRpb24gPSBpdC0+dmFsdWU7CiAKICAgICAgICAgICAgIFFTdHJpbmdMaXN0IGZpbGVF
eHRlbnNpb25zOwogICAgICAgICAgICAgVmVjdG9yPFN0cmluZz4gZXh0ZW5zaW9ucyA9IG1fcGFj
a2FnZS0+bWltZVRvRXh0ZW5zaW9ucygpLmdldChtaW1lVHlwZS5uYW1lKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzUXQuY3Bw
IGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNRdC5j
cHAKaW5kZXggY2Q0YWIwZDcyZDg2ODEyNWRjODZlZTk4N2JjY2U2ZWYzYWIxYWQ4OS4uN2Q0YjBi
NzVmOWQyYzRlNzY3OWRiM2QwN2I1NjE3YTQyMTQwNGM1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNRdC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNRdC5jcHAKQEAg
LTEzMyw4ICsxMzMsOCBAQCB2b2lkIFBsYXRmb3JtU3RyYXRlZ2llc1F0OjpnZXRQbHVnaW5JbmZv
KGNvbnN0IFdlYkNvcmU6OlBhZ2UqIHBhZ2UsIFZlY3RvcjxXZWJDbwogICAgICAgICBmb3IgKE1J
TUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtaW1lVG9EZXNjcmlwdGlv
bnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBNaW1lQ2xhc3NJbmZv
IG1pbWU7CiAKLSAgICAgICAgICAgIG1pbWUudHlwZSA9IGl0LT5maXJzdDsKLSAgICAgICAgICAg
IG1pbWUuZGVzYyA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICBtaW1lLnR5cGUgPSBpdC0+a2V5
OworICAgICAgICAgICAgbWltZS5kZXNjID0gaXQtPnZhbHVlOwogICAgICAgICAgICAgbWltZS5l
eHRlbnNpb25zID0gcGFja2FnZS0+bWltZVRvRXh0ZW5zaW9ucygpLmdldChtaW1lLnR5cGUpOwog
CiAgICAgICAgICAgICBpbmZvLm1pbWVzLmFwcGVuZChtaW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvd2luL0NPTVByb3BlcnR5QmFnLmggYi9Tb3VyY2UvV2ViS2l0L3dpbi9DT01Qcm9w
ZXJ0eUJhZy5oCmluZGV4IGRkMGE4YzQyZjRkMWNlYzJjOTQyODk4NTIzNTZhMGYyYmRkYTFiNWMu
LjBhYWZjMmE1MzE4NTA2MWU0ZDg5OGNhYzc0MTllY2JhMDY0NjlkOGMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvd2luL0NPTVByb3BlcnR5QmFnLmgKKysrIGIvU291cmNlL1dlYktpdC93aW4v
Q09NUHJvcGVydHlCYWcuaApAQCAtMTQ1LDkgKzE0NSw5IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgQ09NUHJvcGVydHlCYWc8VmFsdWVUeXBlLCBLZXlUeXBlLCBIYXNoVHlwZT46OlJlYWQo
TFBDCiAKICAgICBWQVJUWVBFIHJlcXVlc3RlZFR5cGUgPSBWX1ZUKHBWYXIpOwogICAgIFZfVlQo
cFZhcikgPSBWVF9FTVBUWTsKLSAgICBDT01WYXJpYW50U2V0dGVyPFZhbHVlVHlwZT46OnNldFZh
cmlhbnQocFZhciwgaXQtPnNlY29uZCk7CisgICAgQ09NVmFyaWFudFNldHRlcjxWYWx1ZVR5cGU+
OjpzZXRWYXJpYW50KHBWYXIsIGl0LT52YWx1ZSk7CiAKLSAgICBpZiAocmVxdWVzdGVkVHlwZSAh
PSBDT01WYXJpYW50U2V0dGVyPFZhbHVlVHlwZT46OnZhcmlhbnRUeXBlKGl0LT5zZWNvbmQpICYm
IHJlcXVlc3RlZFR5cGUgIT0gVlRfRU1QVFkpCisgICAgaWYgKHJlcXVlc3RlZFR5cGUgIT0gQ09N
VmFyaWFudFNldHRlcjxWYWx1ZVR5cGU+Ojp2YXJpYW50VHlwZShpdC0+dmFsdWUpICYmIHJlcXVl
c3RlZFR5cGUgIT0gVlRfRU1QVFkpCiAgICAgICAgIHJldHVybiA6OlZhcmlhbnRDaGFuZ2VUeXBl
KHBWYXIsIHBWYXIsIFZBUklBTlRfTk9VU0VST1ZFUlJJREUgfCBWQVJJQU5UX0FMUEhBQk9PTCwg
cmVxdWVzdGVkVHlwZSk7CiAKICAgICByZXR1cm4gU19PSzsKQEAgLTIxNSwxMiArMjE1LDEyIEBA
IEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgQ09NUHJvcGVydHlCYWc8VmFsdWVUeXBlLCBLZXlU
eXBlLCBIYXNoVHlwZT46OkdldFByb3BlCiAgICAgICAgIC8vcFByb3BCYWdbal0uY2xzaWQ7ICAg
IC8vIChDTFNJRCkgQ0xTSUQgb2YgdGhlIG9iamVjdC4gVGhpcyBtZW1iZXIgaXMgdmFsaWQgb25s
eSBpZiBkd1R5cGUgaXMgUFJPUEJBRzJfVFlQRV9PQkpFQ1QuCiAKICAgICAgICAgcFByb3BCYWdb
al0uZHdUeXBlID0gUFJPUEJBRzJfVFlQRV9EQVRBOwotICAgICAgICBwUHJvcEJhZ1tqXS52dCA9
IENPTVZhcmlhbnRTZXR0ZXI8VmFsdWVUeXBlPjo6dmFyaWFudFR5cGUoY3VycmVudC0+c2Vjb25k
KTsKKyAgICAgICAgcFByb3BCYWdbal0udnQgPSBDT01WYXJpYW50U2V0dGVyPFZhbHVlVHlwZT46
OnZhcmlhbnRUeXBlKGN1cnJlbnQtPnZhbHVlKTsKICAgICAgICAgcFByb3BCYWdbal0uZHdIaW50
ID0gaVByb3BlcnR5ICsgajsKLSAgICAgICAgcFByb3BCYWdbal0ucHN0ck5hbWUgPSAoTFBPTEVT
VFIpQ29UYXNrTWVtQWxsb2Moc2l6ZW9mKHdjaGFyX3QpKihjdXJyZW50LT5maXJzdC5sZW5ndGgo
KSsxKSk7CisgICAgICAgIHBQcm9wQmFnW2pdLnBzdHJOYW1lID0gKExQT0xFU1RSKUNvVGFza01l
bUFsbG9jKHNpemVvZih3Y2hhcl90KSooY3VycmVudC0+a2V5Lmxlbmd0aCgpKzEpKTsKICAgICAg
ICAgaWYgKCFwUHJvcEJhZ1tqXS5wc3RyTmFtZSkKICAgICAgICAgICAgIHJldHVybiBFX09VVE9G
TUVNT1JZOwotICAgICAgICB3Y3NjcHlfcyhwUHJvcEJhZ1tqXS5wc3RyTmFtZSwgY3VycmVudC0+
Zmlyc3QubGVuZ3RoKCkrMSwgc3RhdGljX2Nhc3Q8U3RyaW5nPihjdXJyZW50LT5maXJzdCkuY2hh
cmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSk7CisgICAgICAgIHdjc2NweV9zKHBQcm9wQmFn
W2pdLnBzdHJOYW1lLCBjdXJyZW50LT5rZXkubGVuZ3RoKCkrMSwgc3RhdGljX2Nhc3Q8U3RyaW5n
PihjdXJyZW50LT5rZXkpLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkpOwogICAgICAg
ICArKypwY1Byb3BlcnRpZXM7CiAgICAgfQogICAgIHJldHVybiBTX09LOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN0YXRpc3RpY3MuY3BwIGIvU291cmNlL1dlYktpdC93
aW4vV2ViQ29yZVN0YXRpc3RpY3MuY3BwCmluZGV4IDBlMzA1NzY4MmQ2Y2M3MWI0NDRlY2RlZTEx
Mjg4MzU1MzFlNzgwOGYuLjQzMDhmNTRmOWM3YTFmYWIxODFmM2Q5YWU0YmQ5MmFiNWM1NTljZDkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdGF0aXN0aWNzLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3RhdGlzdGljcy5jcHAKQEAgLTE0NSw3ICsxNDUs
NyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkNvcmVTdGF0aXN0aWNzOjpqYXZhU2Ny
aXB0UHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50cwogICAgIEl0ZXJhdG9yIGVuZCA9IGpzT2JqZWN0
VHlwZU5hbWVzLT5lbmQoKTsKICAgICBIYXNoTWFwPFN0cmluZywgaW50PiB0eXBlQ291bnRNYXA7
CiAgICAgZm9yIChJdGVyYXRvciBjdXJyZW50ID0ganNPYmplY3RUeXBlTmFtZXMtPmJlZ2luKCk7
IGN1cnJlbnQgIT0gZW5kOyArK2N1cnJlbnQpCi0gICAgICAgIHR5cGVDb3VudE1hcC5zZXQoY3Vy
cmVudC0+Zmlyc3QsIGN1cnJlbnQtPnNlY29uZCk7CisgICAgICAgIHR5cGVDb3VudE1hcC5zZXQo
Y3VycmVudC0+a2V5LCBjdXJyZW50LT52YWx1ZSk7CiAKICAgICBDT01QdHI8SVByb3BlcnR5QmFn
Mj4gcmVzdWx0cyhBZG9wdENPTSwgQ09NUHJvcGVydHlCYWc8aW50Pjo6Y3JlYXRlSW5zdGFuY2Uo
dHlwZUNvdW50TWFwKSk7CiAgICAgcmVzdWx0cy5jb3B5UmVmVG8odHlwZU5hbWVzQW5kQ291bnRz
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRm
b3JtU3RyYXRlZ2llcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJQ
bGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCmluZGV4IDIzMGYzMzIzZjU0MjkxZDAxZTE0MTk4MTc4ZmEy
MTZhNDhjMGNmNWIuLmYxMzBmNzZiZDJhNjc2OTdhZGU3YTM2Nzg4NDUyNDNhOWY2YTcxYTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3Ry
YXRlZ2llcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViUGxh
dGZvcm1TdHJhdGVnaWVzLmNwcApAQCAtOTMsOCArOTMsOCBAQCB2b2lkIFdlYlBsYXRmb3JtU3Ry
YXRlZ2llczo6Z2V0UGx1Z2luSW5mbyhjb25zdCBXZWJDb3JlOjpQYWdlKiwgVmVjdG9yPFdlYkNv
cmU6OgogICAgICAgICBmb3IgKE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAg
ICAgICAgICBNaW1lQ2xhc3NJbmZvIG1pbWU7CiAKLSAgICAgICAgICAgIG1pbWUudHlwZSA9IGl0
LT5maXJzdDsKLSAgICAgICAgICAgIG1pbWUuZGVzYyA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAg
ICBtaW1lLnR5cGUgPSBpdC0+a2V5OworICAgICAgICAgICAgbWltZS5kZXNjID0gaXQtPnZhbHVl
OwogICAgICAgICAgICAgbWltZS5leHRlbnNpb25zID0gcGFja2FnZS0+bWltZVRvRXh0ZW5zaW9u
cygpLmdldChtaW1lLnR5cGUpOwogCiAgICAgICAgICAgICBpbmZvLm1pbWVzLmFwcGVuZChtaW1l
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYkhpc3RvcnkuY3BwIGIvU291cmNl
L1dlYktpdC93aW4vV2ViSGlzdG9yeS5jcHAKaW5kZXggZTg0MmMxNDA3MzVjNzE5OTFhNWQxMWU4
YjlkM2I1N2Y3ZDVjZDI3Yi4uODIzMzVhNzhhNzVmOGM4MjJkZDk5NmU1ZDY4OThjMzljMDRlM2Iz
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vV2ViSGlzdG9yeS5jcHAKKysrIGIvU291
cmNlL1dlYktpdC93aW4vV2ViSGlzdG9yeS5jcHAKQEAgLTgzNCw3ICs4MzQsNyBAQCBIUkVTVUxU
IFdlYkhpc3Rvcnk6OnJlbW92ZUl0ZW1Gcm9tRGF0ZUNhY2hlcyhJV2ViSGlzdG9yeUl0ZW0qIGVu
dHJ5KQogCiAgICAgRGF0ZVRvRW50cmllc01hcDo6aXRlcmF0b3IgZm91bmQgPSBtX2VudHJpZXNC
eURhdGUuZmluZChkYXRlS2V5KTsKICAgICBBU1NFUlQoZm91bmQgIT0gbV9lbnRyaWVzQnlEYXRl
LmVuZCgpKTsKLSAgICBDRk11dGFibGVBcnJheVJlZiBlbnRyaWVzRm9yRGF0ZSA9IGZvdW5kLT5z
ZWNvbmQuZ2V0KCk7CisgICAgQ0ZNdXRhYmxlQXJyYXlSZWYgZW50cmllc0ZvckRhdGUgPSBmb3Vu
ZC0+dmFsdWUuZ2V0KCk7CiAKICAgICBDRkluZGV4IGNvdW50ID0gQ0ZBcnJheUdldENvdW50KGVu
dHJpZXNGb3JEYXRlKTsKICAgICBmb3IgKGludCBpID0gY291bnQgLSAxOyBpID49IDA7IC0taSkg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vV2ViS2l0Q09NQVBJLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvd2luL1dlYktpdENPTUFQSS5jcHAKaW5kZXggOWM5Y2MwMjZiNDdiNGZlYTk2MGM2
Mzk4NDZlMGViYTUxYzQ2NTNjMi4uNGQ4ZmYwOTViZGE5NjA3ZDI5YTE0NWI4NTdjNzhkZGZmOGUz
NWU3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vV2ViS2l0Q09NQVBJLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJLaXRDT01BUEkuY3BwCkBAIC01Miw3ICs1Miw3IEBAIHN0
YXRpYyBDT01QdHI8SUNsYXNzRmFjdG9yeT4gY2xhc3NGYWN0b3J5KGNvbnN0IENMU0lEJiBjbHNp
ZCkKICAgICBzdGF0aWMgRmFjdG9yeU1hcCYgZmFjdG9yaWVzID0gKm5ldyBGYWN0b3J5TWFwOwog
CiAgICAgRmFjdG9yeU1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IGZhY3Rvcmllcy5hZGQoY2xzaWQs
IDApOwotICAgIENPTVB0cjxJQ2xhc3NGYWN0b3J5PiYgZmFjdG9yeSA9IHJlc3VsdC5pdGVyYXRv
ci0+c2Vjb25kOworICAgIENPTVB0cjxJQ2xhc3NGYWN0b3J5PiYgZmFjdG9yeSA9IHJlc3VsdC5p
dGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5ICYmIEZBSUxFRChEbGxH
ZXRDbGFzc09iamVjdChjbHNpZCwgX191dWlkb2YoZmFjdG9yeSksIHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCoqPigmZmFjdG9yeSkpKSkKICAgICAgICAgZmFjdG9yeSA9IDA7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvd2luL1dlYktpdFN0YXRpc3RpY3MuY3BwIGIvU291cmNlL1dlYktpdC93
aW4vV2ViS2l0U3RhdGlzdGljcy5jcHAKaW5kZXggOWNkOTVjN2FjOTM1OTUzMDA3ZTE1N2RjYTc0
ZTgwN2M0NWFlZTA2ZS4uYzdiOGVkMWFjNzdjZTZlMTkyNmFhNWRiMjI0MjRmMmVlZTFhMzUwYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vV2ViS2l0U3RhdGlzdGljcy5jcHAKKysrIGIv
U291cmNlL1dlYktpdC93aW4vV2ViS2l0U3RhdGlzdGljcy5jcHAKQEAgLTE0NCw5ICsxNDQsOSBA
QCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYktpdFN0YXRpc3RpY3M6OmNvbUNsYXNzTmFt
ZUNvdW50cygKICAgICBJdGVyYXRvciBlbmQgPSBnQ2xhc3NOYW1lQ291bnQuZW5kKCk7CiAgICAg
VmVjdG9yPFVDaGFyPiB2ZWN0b3I7CiAgICAgZm9yIChJdGVyYXRvciBjdXJyZW50ID0gZ0NsYXNz
TmFtZUNvdW50LmJlZ2luKCk7IGN1cnJlbnQgIT0gZW5kOyArK2N1cnJlbnQpIHsKLSAgICAgICAg
YXBwZW5kKHZlY3RvciwgU3RyaW5nOjpmb3JtYXQoIiU0dSIsIGN1cnJlbnQtPnNlY29uZCkpOwor
ICAgICAgICBhcHBlbmQodmVjdG9yLCBTdHJpbmc6OmZvcm1hdCgiJTR1IiwgY3VycmVudC0+dmFs
dWUpKTsKICAgICAgICAgdmVjdG9yLmFwcGVuZCgnXHQnKTsKLSAgICAgICAgYXBwZW5kKHZlY3Rv
ciwgc3RhdGljX2Nhc3Q8U3RyaW5nPihjdXJyZW50LT5maXJzdCkpOworICAgICAgICBhcHBlbmQo
dmVjdG9yLCBzdGF0aWNfY2FzdDxTdHJpbmc+KGN1cnJlbnQtPmtleSkpOwogICAgICAgICB2ZWN0
b3IuYXBwZW5kKCdcbicpOwogICAgIH0KICAgICAqb3V0cHV0ID0gQlN0cmluZyhTdHJpbmc6OmFk
b3B0KHZlY3RvcikpLnJlbGVhc2UoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1dl
Yk5vdGlmaWNhdGlvbkNlbnRlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJOb3RpZmljYXRp
b25DZW50ZXIuY3BwCmluZGV4IGM3MTkyZDhkM2NkYjJjZGFlMmJhYTcxYWU2MGY3YmE5ZDgxZWQ3
ZWEuLjMxYzgxMTlhNTAyYjljZWU2NWU0MjBiZjUxN2VlNzlhYTEyODQxYjAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvd2luL1dlYk5vdGlmaWNhdGlvbkNlbnRlci5jcHAKKysrIGIvU291cmNl
L1dlYktpdC93aW4vV2ViTm90aWZpY2F0aW9uQ2VudGVyLmNwcApAQCAtMTIwLDcgKzEyMCw3IEBA
IHZvaWQgV2ViTm90aWZpY2F0aW9uQ2VudGVyOjpwb3N0Tm90aWZpY2F0aW9uSW50ZXJuYWwoSVdl
Yk5vdGlmaWNhdGlvbiogbm90aWZpY2F0CiAKICAgICAvLyBJbnRlbnRpb25hbGx5IG1ha2UgYSBj
b3B5IG9mIHRoZSBsaXN0IHRvIGF2b2lkIHRoZSBwb3NzaWJpbGl0eSBvZiBlcnJvcnMKICAgICAv
LyBmcm9tIGEgbXV0YXRpb24gb2YgdGhlIGxpc3QgaW4gdGhlIG9uTm90aWZ5IGNhbGxiYWNrLgot
ICAgIE9iamVjdE9ic2VydmVyTGlzdCBsaXN0ID0gaXQtPnNlY29uZDsKKyAgICBPYmplY3RPYnNl
cnZlckxpc3QgbGlzdCA9IGl0LT52YWx1ZTsKIAogICAgIE9ic2VydmVyTGlzdEl0ZXJhdG9yIGVu
ZCA9IGxpc3QuZW5kKCk7CiAgICAgZm9yIChPYnNlcnZlckxpc3RJdGVyYXRvciBpdDIgPSBsaXN0
LmJlZ2luKCk7IGl0MiAhPSBlbmQ7ICsraXQyKSB7CkBAIC0xNDksNyArMTQ5LDcgQEAgSFJFU1VM
VCBTVERNRVRIT0RDQUxMVFlQRSBXZWJOb3RpZmljYXRpb25DZW50ZXI6OmFkZE9ic2VydmVyKAog
ICAgIFN0cmluZyBuYW1lKG5vdGlmaWNhdGlvbk5hbWUsIFN5c1N0cmluZ0xlbihub3RpZmljYXRp
b25OYW1lKSk7CiAgICAgTWFwcGVkT2JzZXJ2ZXJzOjppdGVyYXRvciBpdCA9IGQtPm1fbWFwcGVk
T2JzZXJ2ZXJzLmZpbmQobmFtZSk7CiAgICAgaWYgKGl0ICE9IGQtPm1fbWFwcGVkT2JzZXJ2ZXJz
LmVuZCgpKQotICAgICAgICBpdC0+c2Vjb25kLmFwcGVuZChPYmplY3RPYnNlcnZlclBhaXIoYW5P
YmplY3QsIG9ic2VydmVyKSk7CisgICAgICAgIGl0LT52YWx1ZS5hcHBlbmQoT2JqZWN0T2JzZXJ2
ZXJQYWlyKGFuT2JqZWN0LCBvYnNlcnZlcikpOwogICAgIGVsc2UgewogICAgICAgICBPYmplY3RP
YnNlcnZlckxpc3QgbGlzdDsKICAgICAgICAgbGlzdC5hcHBlbmQoT2JqZWN0T2JzZXJ2ZXJQYWly
KGFuT2JqZWN0LCBvYnNlcnZlcikpOwpAQCAtMTk4LDcgKzE5OCw3IEBAIEhSRVNVTFQgU1RETUVU
SE9EQ0FMTFRZUEUgV2ViTm90aWZpY2F0aW9uQ2VudGVyOjpyZW1vdmVPYnNlcnZlcigKICAgICBp
ZiAoaXQgPT0gZC0+bV9tYXBwZWRPYnNlcnZlcnMuZW5kKCkpCiAgICAgICAgIHJldHVybiBFX0ZB
SUw7CiAKLSAgICBPYmplY3RPYnNlcnZlckxpc3QmIG9ic2VydmVyTGlzdCA9IGl0LT5zZWNvbmQ7
CisgICAgT2JqZWN0T2JzZXJ2ZXJMaXN0JiBvYnNlcnZlckxpc3QgPSBpdC0+dmFsdWU7CiAgICAg
T2JzZXJ2ZXJMaXN0SXRlcmF0b3IgZW5kID0gb2JzZXJ2ZXJMaXN0LmVuZCgpOwogCiAgICAgaW50
IGkgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW5jZS9XZWJDb3JlU3VwcG9ydC9Q
bGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVT
dXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmNwcAppbmRleCAzZjhjOTA3YzczOWYwOGNk
Yjk5MTZlODM2ZjliMDhkZTY3ODQ1MWNmLi5kNTU3OTcyMzExNjE1OTFkNWZkYjE3MTU4MDQ0NThk
Yjc4MmM5MWYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0
L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3dpbmNlL1dl
YkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmNwcApAQCAtOTQsOCArOTQsOCBA
QCB2b2lkIFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjpnZXRQbHVnaW5JbmZvKGNvbnN0IFBhZ2Uq
LCBWZWN0b3I8UGx1Z2luSW5mbz4mIG91dAogICAgICAgICBmb3IgKE1JTUVUb0Rlc2NyaXB0aW9u
c01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBNaW1lQ2xhc3NJbmZvIG1pbWU7CiAKLSAgICAg
ICAgICAgIG1pbWUudHlwZSA9IGl0LT5maXJzdDsKLSAgICAgICAgICAgIG1pbWUuZGVzYyA9IGl0
LT5zZWNvbmQ7CisgICAgICAgICAgICBtaW1lLnR5cGUgPSBpdC0+a2V5OworICAgICAgICAgICAg
bWltZS5kZXNjID0gaXQtPnZhbHVlOwogICAgICAgICAgICAgbWltZS5leHRlbnNpb25zID0gcGFj
a2FnZS0+bWltZVRvRXh0ZW5zaW9ucygpLmdldChtaW1lLnR5cGUpOwogCiAgICAgICAgICAgICBp
bmZvLm1pbWVzLmFwcGVuZChtaW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRm
b3JtL0NvcmVJUEMvQXJndW1lbnRDb2RlcnMuaCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0Nv
cmVJUEMvQXJndW1lbnRDb2RlcnMuaAppbmRleCAwNzBmNDU4MzA3OWY3YjRlZWJmY2Y0YTJhODg4
NDc4NmQ4YzU1NDBhLi5hZjE2M2JlNmQ5YjY0YzMwOWQ5MTlhZDFiNzM2NTg4ZWIyNjMxY2JhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50Q29kZXJz
LmgKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVudENvZGVycy5o
CkBAIC03Miw2ICs3MiwyOSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBzdHJ1
Y3QgQXJndW1lbnRDb2RlcjxzdGQ6OnBhaXI8VCwgVT4gPiB7CiAgICAgfQogfTsKIAordGVtcGxh
dGU8dHlwZW5hbWUgS2V5VHlwZSwgdHlwZW5hbWUgVmFsdWVUeXBlPiBzdHJ1Y3QgQXJndW1lbnRD
b2RlcjxXVEY6OktleVZhbHVlUGFpcjxLZXlUeXBlLCBWYWx1ZVR5cGU+ID4geworICAgIHN0YXRp
YyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0IFdURjo6S2V5VmFs
dWVQYWlyPEtleVR5cGUsIFZhbHVlVHlwZT4mIHBhaXIpCisgICAgeworICAgICAgICBlbmNvZGVy
LT5lbmNvZGUocGFpci5rZXkpOworICAgICAgICBlbmNvZGVyLT5lbmNvZGUocGFpci52YWx1ZSk7
CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciogZGVjb2Rl
ciwgV1RGOjpLZXlWYWx1ZVBhaXI8S2V5VHlwZSwgVmFsdWVUeXBlPiYgcGFpcikKKyAgICB7Cisg
ICAgICAgIEtleVR5cGUga2V5OworICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZShrZXkpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIFZhbHVlVHlwZSB2YWx1ZTsKKyAg
ICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgICAgIHBhaXIua2V5ID0ga2V5OworICAgICAgICBwYWlyLnZhbHVlID0gdmFs
dWU7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK307CisKIHRlbXBsYXRlPGJvb2wgZml4
ZWRTaXplRWxlbWVudHMsIHR5cGVuYW1lIFQ+IHN0cnVjdCBWZWN0b3JBcmd1bWVudENvZGVyOwog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgVmVjdG9yQXJndW1lbnRDb2RlcjxmYWxzZSwg
VD4gewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Db25uZWN0
aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5jcHAK
aW5kZXggZjdjMzcyM2Y3ZWY3ZGQyMjkxZWE1OTE1MDYwMDkzZGMxYzQxOGJiNS4uOTMyYWJiMjNj
YjQwMjNlYzkzNjViN2ZlZjM5NDU0OWZmZDYwODYzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvUGxhdGZvcm0vQ29yZUlQQy9Db25uZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uY3BwCkBAIC0xMDMsMTIgKzEwMywxMiBAQCBQYXNz
UmVmUHRyPENvbm5lY3Rpb246OlN5bmNNZXNzYWdlU3RhdGU+IENvbm5lY3Rpb246OlN5bmNNZXNz
YWdlU3RhdGU6OmdldE9yQ3JlYQogICAgIFN5bmNNZXNzYWdlU3RhdGVNYXA6OkFkZFJlc3VsdCBy
ZXN1bHQgPSBzeW5jTWVzc2FnZVN0YXRlTWFwKCkuYWRkKHJ1bkxvb3AsIDApOwogCiAgICAgaWYg
KCFyZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICBBU1NFUlQocmVzdWx0Lml0ZXJhdG9yLT5z
ZWNvbmQpOwotICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAg
IEFTU0VSVChyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5p
dGVyYXRvci0+dmFsdWU7CiAgICAgfQogCiAgICAgUmVmUHRyPFN5bmNNZXNzYWdlU3RhdGU+IHN5
bmNNZXNzYWdlU3RhdGUgPSBhZG9wdFJlZihuZXcgU3luY01lc3NhZ2VTdGF0ZShydW5Mb29wKSk7
Ci0gICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBzeW5jTWVzc2FnZVN0YXRlLmdldCgpOwor
ICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBzeW5jTWVzc2FnZVN0YXRlLmdldCgpOwogCiAg
ICAgcmV0dXJuIHN5bmNNZXNzYWdlU3RhdGUucmVsZWFzZSgpOwogfQpAQCAtMzYzLDEwICszNjMs
MTAgQEAgUGFzc093blB0cjxBcmd1bWVudERlY29kZXI+IENvbm5lY3Rpb246OndhaXRGb3JNZXNz
YWdlKE1lc3NhZ2VJRCBtZXNzYWdlSUQsIHVpbnQKICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2Vy
KG1fd2FpdEZvck1lc3NhZ2VNdXRleCk7CiAKICAgICAgICAgSGFzaE1hcDxzdGQ6OnBhaXI8dW5z
aWduZWQsIHVpbnQ2NF90PiwgQXJndW1lbnREZWNvZGVyKj46Oml0ZXJhdG9yIGl0ID0gbV93YWl0
Rm9yTWVzc2FnZU1hcC5maW5kKG1lc3NhZ2VBbmREZXN0aW5hdGlvbik7Ci0gICAgICAgIGlmIChp
dC0+c2Vjb25kKSB7CisgICAgICAgIGlmIChpdC0+dmFsdWUpIHsKICAgICAgICAgICAgIC8vIEZJ
WE1FOiBtX3dhaXRGb3JNZXNzYWdlTWFwIHNob3VsZCByZWFsbHkgaG9sZCBPd25QdHJzIHRvCiAg
ICAgICAgICAgICAvLyBBcmd1bWVudERlY29kZXJzLCBidXQgSGFzaE1hcCBkb2Vzbid0IGN1cnJl
bnRseSBzdXBwb3J0IE93blB0cnMuCi0gICAgICAgICAgICBPd25QdHI8QXJndW1lbnREZWNvZGVy
PiBhcmd1bWVudHMgPSBhZG9wdFB0cihpdC0+c2Vjb25kKTsKKyAgICAgICAgICAgIE93blB0cjxB
cmd1bWVudERlY29kZXI+IGFyZ3VtZW50cyA9IGFkb3B0UHRyKGl0LT52YWx1ZSk7CiAgICAgICAg
ICAgICBtX3dhaXRGb3JNZXNzYWdlTWFwLnJlbW92ZShpdCk7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIHJldHVybiBhcmd1bWVudHMucmVsZWFzZSgpOwpAQCAtNTQwLDggKzU0MCw4IEBAIHZv
aWQgQ29ubmVjdGlvbjo6cHJvY2Vzc0luY29taW5nTWVzc2FnZShNZXNzYWdlSUQgbWVzc2FnZUlE
LCBQYXNzT3duUHRyPEFyZ3VtZW50CiAgICAgICAgIAogICAgICAgICBIYXNoTWFwPHN0ZDo6cGFp
cjx1bnNpZ25lZCwgdWludDY0X3Q+LCBBcmd1bWVudERlY29kZXIqPjo6aXRlcmF0b3IgaXQgPSBt
X3dhaXRGb3JNZXNzYWdlTWFwLmZpbmQoc3RkOjptYWtlX3BhaXIobWVzc2FnZUlELnRvSW50KCks
IGluY29taW5nTWVzc2FnZS5kZXN0aW5hdGlvbklEKCkpKTsKICAgICAgICAgaWYgKGl0ICE9IG1f
d2FpdEZvck1lc3NhZ2VNYXAuZW5kKCkpIHsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQgPSBpbmNv
bWluZ01lc3NhZ2UucmVsZWFzZUFyZ3VtZW50cygpLmxlYWtQdHIoKTsKLSAgICAgICAgICAgIEFT
U0VSVChpdC0+c2Vjb25kKTsKKyAgICAgICAgICAgIGl0LT52YWx1ZSA9IGluY29taW5nTWVzc2Fn
ZS5yZWxlYXNlQXJndW1lbnRzKCkubGVha1B0cigpOworICAgICAgICAgICAgQVNTRVJUKGl0LT52
YWx1ZSk7CiAgICAgICAgIAogICAgICAgICAgICAgbV93YWl0Rm9yTWVzc2FnZUNvbmRpdGlvbi5z
aWduYWwoKTsKICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtL2d0ay9Xb3JrUXVldWVHdGsuY3BwIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0v
Z3RrL1dvcmtRdWV1ZUd0ay5jcHAKaW5kZXggMWRmYWI4M2NjZmIyNGM5ZjAwZWU0MGQyZGFhMWM5
NWIxNjM4MmE0My4uNjg4NWQ0ODViZDExNmQzMjhkZWNkMDJhYWY1NGM5MTg3ODJiMmYxNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vZ3RrL1dvcmtRdWV1ZUd0ay5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vZ3RrL1dvcmtRdWV1ZUd0ay5jcHAKQEAgLTE2Niw3
ICsxNjYsNyBAQCB2b2lkIFdvcmtRdWV1ZTo6cmVnaXN0ZXJFdmVudFNvdXJjZUhhbmRsZXIoaW50
IGZpbGVEZXNjcmlwdG9yLCBpbnQgY29uZGl0aW9uLCBjbwogICAgICAgICBWZWN0b3I8RXZlbnRT
b3VyY2UqPiBzb3VyY2VzOwogICAgICAgICBFdmVudFNvdXJjZUl0ZXJhdG9yIGl0ID0gbV9ldmVu
dFNvdXJjZXMuZmluZChmaWxlRGVzY3JpcHRvcik7CiAgICAgICAgIGlmIChpdCAhPSBtX2V2ZW50
U291cmNlcy5lbmQoKSkgCi0gICAgICAgICAgICBzb3VyY2VzID0gaXQtPnNlY29uZDsKKyAgICAg
ICAgICAgIHNvdXJjZXMgPSBpdC0+dmFsdWU7CiAKICAgICAgICAgc291cmNlcy5hcHBlbmQoZXZl
bnRTb3VyY2UpOwogICAgICAgICBtX2V2ZW50U291cmNlcy5zZXQoZmlsZURlc2NyaXB0b3IsIHNv
dXJjZXMpOwpAQCAtMTg2LDcgKzE4Niw3IEBAIHZvaWQgV29ya1F1ZXVlOjp1bnJlZ2lzdGVyRXZl
bnRTb3VyY2VIYW5kbGVyKGludCBmaWxlRGVzY3JpcHRvcikKICAgICBBU1NFUlQobV9ldmVudFNv
dXJjZXMuY29udGFpbnMoZmlsZURlc2NyaXB0b3IpKTsKIAogICAgIGlmIChpdCAhPSBtX2V2ZW50
U291cmNlcy5lbmQoKSkgewotICAgICAgICBWZWN0b3I8RXZlbnRTb3VyY2UqPiBzb3VyY2VzID0g
aXQtPnNlY29uZDsKKyAgICAgICAgVmVjdG9yPEV2ZW50U291cmNlKj4gc291cmNlcyA9IGl0LT52
YWx1ZTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNvdXJjZXMuc2l6ZSgpOyBp
KyspCiAgICAgICAgICAgICBzb3VyY2VzW2ldLT5jYW5jZWwoKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvUGxhdGZvcm0vbWFjL1dvcmtRdWV1ZU1hYy5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9QbGF0Zm9ybS9tYWMvV29ya1F1ZXVlTWFjLmNwcAppbmRleCBhZTQ3M2VlNWNjODRlNTg0Mjli
MDQzOWNjZDkyMWFjMmM0OTJmZmFhLi42ZTU0Y2VlMGI3MDk4NDBhNTRmNzZjZGFhNDI0ZmVlYjQ2
MjkwOWIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9tYWMvV29ya1F1ZXVl
TWFjLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9tYWMvV29ya1F1ZXVlTWFjLmNw
cApAQCAtMTUzLDcgKzE1Myw3IEBAIHZvaWQgV29ya1F1ZXVlOjp1bnJlZ2lzdGVyTWFjaFBvcnRF
dmVudEhhbmRsZXIobWFjaF9wb3J0X3QgbWFjaFBvcnQpCiAgICAgCiAgICAgQVNTRVJUKG1fZXZl
bnRTb3VyY2VzLmNvbnRhaW5zKG1hY2hQb3J0KSk7CiAKLSAgICBFdmVudFNvdXJjZSogZXZlbnRT
b3VyY2UgPSBpdC0+c2Vjb25kOworICAgIEV2ZW50U291cmNlKiBldmVudFNvdXJjZSA9IGl0LT52
YWx1ZTsKICAgICAvLyBDYW5jZWwgYW5kIHJlbGVhc2UgdGhlIHNvdXJjZS4gSXQgd2lsbCBiZSBk
ZWxldGVkIGluIGl0cyBmaW5hbGl6ZSBoYW5kbGVyLgogICAgIGRpc3BhdGNoX3NvdXJjZV9jYW5j
ZWwoZXZlbnRTb3VyY2UtPmRpc3BhdGNoU291cmNlKCkpOwogICAgIGRpc3BhdGNoX3JlbGVhc2Uo
ZXZlbnRTb3VyY2UtPmRpc3BhdGNoU291cmNlKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvU2hhcmVkL1BsdWdpbnMvTlBSZW1vdGVPYmplY3RNYXAuY3BwIGIvU291cmNlL1dlYktpdDIv
U2hhcmVkL1BsdWdpbnMvTlBSZW1vdGVPYmplY3RNYXAuY3BwCmluZGV4IDc2NDFhZjVlOGM4OTJk
MWQzN2VlOTZkYTliN2U2MDU4OTk3M2U4OGEuLmI1ZWMyZDlkYTM5ZjI2ZGNiNDMyMGQ5NWUwM2Yy
ZmNhZTRlN2Q3ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9QbHVnaW5zL05Q
UmVtb3RlT2JqZWN0TWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvUGx1Z2lucy9O
UFJlbW90ZU9iamVjdE1hcC5jcHAKQEAgLTIwMCw3ICsyMDAsNyBAQCB2b2lkIE5QUmVtb3RlT2Jq
ZWN0TWFwOjpwbHVnaW5EZXN0cm95ZWQoUGx1Z2luKiBwbHVnaW4pCiAKICAgICAvLyBHYXRoZXIg
dGhlIHJlY2VpdmVycyBhc3NvY2lhdGVkIHdpdGggdGhpcyBwbHVnLWluLgogICAgIGZvciAoSGFz
aE1hcDx1aW50NjRfdCwgTlBPYmplY3RNZXNzYWdlUmVjZWl2ZXIqPjo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtX3JlZ2lzdGVyZWROUE9iamVjdHMuYmVnaW4oKSwgZW5kID0gbV9yZWdpc3RlcmVkTlBP
YmplY3RzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgTlBPYmplY3RNZXNzYWdl
UmVjZWl2ZXIqIG5wT2JqZWN0TWVzc2FnZVJlY2VpdmVyID0gaXQtPnNlY29uZDsKKyAgICAgICAg
TlBPYmplY3RNZXNzYWdlUmVjZWl2ZXIqIG5wT2JqZWN0TWVzc2FnZVJlY2VpdmVyID0gaXQtPnZh
bHVlOwogICAgICAgICBpZiAobnBPYmplY3RNZXNzYWdlUmVjZWl2ZXItPnBsdWdpbigpID09IHBs
dWdpbikKICAgICAgICAgICAgIG1lc3NhZ2VSZWNlaXZlcnMuYXBwZW5kKG5wT2JqZWN0TWVzc2Fn
ZVJlY2VpdmVyKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvVXNl
ck1lc3NhZ2VDb2RlcnMuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Vc2VyTWVzc2FnZUNvZGVy
cy5oCmluZGV4IGFjZTcyZmQyZTMzZTNiYzExN2ZjMmZhNDU1ZjE1ZDg3NzdmYzAwM2YuLjU3YzBj
MTZiMTJhMGU1MTZkOTk3MTU2OGEyOTM0OWE2OTk3N2UzYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9Vc2VyTWVzc2FnZUNvZGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9Vc2VyTWVzc2FnZUNvZGVycy5oCkBAIC05Myw4ICs5Myw4IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIEltbXV0YWJsZURpY3Rpb25hcnk6Ok1hcFR5cGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bWFwLmJlZ2luKCk7CiAgICAgICAgICAgICBJbW11dGFibGVEaWN0aW9uYXJ5OjpNYXBUeXBlOjpj
b25zdF9pdGVyYXRvciBlbmQgPSBtYXAuZW5kKCk7CiAgICAgICAgICAgICBmb3IgKDsgaXQgIT0g
ZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKGl0LT5maXJzdCk7
Ci0gICAgICAgICAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKE93bmVyKGl0LT5zZWNvbmQuZ2V0KCkp
KTsKKyAgICAgICAgICAgICAgICBlbmNvZGVyLT5lbmNvZGUoaXQtPmtleSk7CisgICAgICAgICAg
ICAgICAgZW5jb2Rlci0+ZW5jb2RlKE93bmVyKGl0LT52YWx1ZS5nZXQoKSkpOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcmVmZXJlbmNlc1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9XZWJQcmVmZXJlbmNlc1N0b3JlLmNwcAppbmRleCA4NjY4YmVjMGMwYTRmYzgx
MDE5ZTc3NzBkMDYwZDMyNWFjYmEzNWJhLi45Nzg0ZTVmZDgxMGM1ODQ2ZTIyODYwOTg0YjQzN2Ux
NTQ5OGU5YmMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJlZmVyZW5j
ZXNTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByZWZlcmVuY2VzU3Rv
cmUuY3BwCkBAIC0xNTEsNyArMTUxLDcgQEAgc3RhdGljIHR5cGVuYW1lIE1hcFR5cGU6Ok1hcHBl
ZFR5cGUgdmFsdWVGb3JLZXkoY29uc3QgTWFwVHlwZSYgbWFwLCBjb25zdCB0eXBlbmEKIHsKICAg
ICB0eXBlbmFtZSBNYXBUeXBlOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC5maW5kKGtleSk7CiAg
ICAgaWYgKGl0ICE9IG1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAg
ICAgIHJldHVybiBpdC0+dmFsdWU7CiAKICAgICByZXR1cm4gZGVmYXVsdFZhbHVlRm9yS2V5PHR5
cGVuYW1lIE1hcFR5cGU6Ok1hcHBlZFR5cGU+KGtleSk7CiB9CkBAIC0xODcsNyArMTg3LDcgQEAg
Ym9vbCBXZWJQcmVmZXJlbmNlc1N0b3JlOjpnZXRCb29sVmFsdWVGb3JLZXkoY29uc3QgU3RyaW5n
JiBrZXkpIGNvbnN0CiAgICAgLy8gRklYTUU6IEV4dGVuZCBvdmVycmlkaW5nIHRvIG90aGVyIGtl
eSB0eXBlcyB1c2VkIGZyb20gTGF5b3V0VGVzdENvbnRyb2xsZXIuCiAgICAgQm9vbE92ZXJyaWRl
c01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBib29sVGVzdFJ1bm5lck92ZXJyaWRlc01hcCgpLmZp
bmQoa2V5KTsKICAgICBpZiAoaXQgIT0gYm9vbFRlc3RSdW5uZXJPdmVycmlkZXNNYXAoKS5lbmQo
KSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBpdC0+dmFsdWU7
CiAgICAgcmV0dXJuIHZhbHVlRm9yS2V5KG1fYm9vbFZhbHVlcywga2V5KTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9XZWJDb3JlQXJndW1lbnRDb2RlcnNHdGsu
Y3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9XZWJDb3JlQXJndW1lbnRDb2RlcnNHdGsu
Y3BwCmluZGV4IDlkNmUyNWM2NmQ4NmIzZTJmMWQ5NDM3NDM3YmEyZmFiNDYwMjVhM2IuLjQxMzcw
YmFlNzM5YTJlMDc2NjIzNjEwOWJkNjAzODk5NGFiYzJkMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9ndGsvV2ViQ29yZUFyZ3VtZW50Q29kZXJzR3RrLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL1dlYkNvcmVBcmd1bWVudENvZGVyc0d0ay5jcHAKQEAgLTE0
NCw3ICsxNDQsNyBAQCBib29sIEFyZ3VtZW50Q29kZXI8UmVzb3VyY2VSZXNwb25zZT46OmRlY29k
ZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIFJlc291cmNlUgogICAgIGlmICghZGVjb2Rlci0+
ZGVjb2RlKGhlYWRlcnMpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgZm9yIChIVFRQSGVh
ZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGhlYWRlcnMuYmVnaW4oKSwgZW5kID0gaGVhZGVy
cy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICByZXNwb25zZS5zZXRIVFRQSGVhZGVy
RmllbGQoaXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsKKyAgICAgICAgcmVzcG9uc2Uuc2V0SFRUUEhl
YWRlckZpZWxkKGl0LT5rZXksIGl0LT52YWx1ZSk7CiAKICAgICB1aW50MzJfdCBzb3VwTWVzc2Fn
ZUZsYWdzOwogICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHNvdXBNZXNzYWdlRmxhZ3MpKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9XZWJDb3JlQXJndW1lbnRDb2RlcnNN
YWMubW0gYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1dlYkNvcmVBcmd1bWVudENvZGVyc01h
Yy5tbQppbmRleCAxOTZhYjExYzdhNzQzMTA3ZDM4MDBlMWZmOGZhNWJlMWYyYjNiODE4Li4wZjlk
M2Q4YTNiZmI3Mzc0M2IzOTMzNTMzNWRjNWY1OGMxZDE0NzgwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvbWFjL1dlYkNvcmVBcmd1bWVudENvZGVyc01hYy5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1dlYkNvcmVBcmd1bWVudENvZGVyc01hYy5tbQpAQCAtMTgz
LDcgKzE4Myw3IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxSZXNvdXJjZUVycm9yPjo6ZGVjb2RlKEFy
Z3VtZW50RGVjb2RlciogZGVjb2RlciwgUmVzb3VyY2VFcnJvCiAgICAgSGFzaE1hcDxTdHJpbmcs
IFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gc3RyaW5nVXNlckluZm9NYXAuYmVnaW4oKTsK
ICAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gc3RyaW5n
VXNlckluZm9NYXAuZW5kKCk7CiAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAg
W3VzZXJJbmZvIHNldE9iamVjdDpuc1N0cmluZyhpdC0+c2Vjb25kKSBmb3JLZXk6bnNTdHJpbmco
aXQtPmZpcnN0KV07CisgICAgICAgIFt1c2VySW5mbyBzZXRPYmplY3Q6bnNTdHJpbmcoaXQtPnZh
bHVlKSBmb3JLZXk6bnNTdHJpbmcoaXQtPmtleSldOwogCiAgICAgaWYgKGNlcnRpZmljYXRlLmNl
cnRpZmljYXRlQ2hhaW4oKSkKICAgICAgICAgW3VzZXJJbmZvIHNldE9iamVjdDooTlNBcnJheSAq
KWNlcnRpZmljYXRlLmNlcnRpZmljYXRlQ2hhaW4oKSBmb3JLZXk6QCJOU0Vycm9yUGVlckNlcnRp
ZmljYXRlQ2hhaW5LZXkiXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9B
cmd1bWVudENvZGVyc1F0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9Bcmd1bWVudENv
ZGVyc1F0LmNwcAppbmRleCBjODliZjQ0ZjE3MTkwYjAyYzQxMTJiY2JlZDZlMGM0MWZhM2M2NzVm
Li5hNDM5Y2FmZjFlNDg4ZTEwMmM1NTBhZDA0ZjM0NmQ1OTk2ZGQxODkyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvQXJndW1lbnRDb2RlcnNRdC5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL3F0L0FyZ3VtZW50Q29kZXJzUXQuY3BwCkBAIC04Niw4ICs4Niw4IEBA
IGJvb2wgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpEcmFnRGF0YT46OmRlY29kZShBcmd1bWVudERl
Y29kZXIqIGRlY29kZXIsIERyYWdEYXRhCiAgICAgICAgIE1JTUVEYXRhSGFzaE1hcDo6aXRlcmF0
b3IgaXQgPSBtYXAuYmVnaW4oKTsKICAgICAgICAgTUlNRURhdGFIYXNoTWFwOjppdGVyYXRvciBl
bmQgPSBtYXAuZW5kKCk7CiAgICAgICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgICAgIFFCeXRlQXJyYXkgYnl0ZXMoKGNoYXIqKWl0LT5zZWNvbmQuZGF0YSgpLCBpdC0+c2Vj
b25kLnNpemUoKSk7Ci0gICAgICAgICAgICBtaW1lRGF0YS0+c2V0RGF0YShpdC0+Zmlyc3QsIGJ5
dGVzKTsKKyAgICAgICAgICAgIFFCeXRlQXJyYXkgYnl0ZXMoKGNoYXIqKWl0LT52YWx1ZS5kYXRh
KCksIGl0LT52YWx1ZS5zaXplKCkpOworICAgICAgICAgICAgbWltZURhdGEtPnNldERhdGEoaXQt
PmtleSwgYnl0ZXMpOwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCmluZGV4IDBlMTdjMDYzM2IyYzI2
MzAyOGFjMmQyMzZhNmE0N2Q0MDc5MGQ5YjIuLjc5ZTQ2YTM4MTQ4N2RjZjAyYmVlODA1OGE3OWQ3
OWRiZmI5NjA1ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFdlYlZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFdlYlZpZXcuY3BwCkBAIC0xODAwLDcgKzE4MDAsNyBAQCBHTGlzdCogd2Via2l0X3dl
Yl92aWV3X2dldF9zdWJyZXNvdXJjZXMoV2ViS2l0V2ViVmlldyogd2ViVmlldykKICAgICBXZWJL
aXRXZWJWaWV3UHJpdmF0ZSogcHJpdiA9IHdlYlZpZXctPnByaXY7CiAgICAgUmVzb3VyY2VzTWFw
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBwcml2LT5zdWJyZXNvdXJjZXNNYXAuZW5kKCk7CiAgICAg
Zm9yIChSZXNvdXJjZXNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcHJpdi0+c3VicmVzb3VyY2Vz
TWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgc3VicmVzb3VyY2VzID0gZ19s
aXN0X3ByZXBlbmQoc3VicmVzb3VyY2VzLCBpdC0+c2Vjb25kLmdldCgpKTsKKyAgICAgICAgc3Vi
cmVzb3VyY2VzID0gZ19saXN0X3ByZXBlbmQoc3VicmVzb3VyY2VzLCBpdC0+dmFsdWUuZ2V0KCkp
OwogCiAgICAgcmV0dXJuIGdfbGlzdF9yZXZlcnNlKHN1YnJlc291cmNlcyk7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ByaW50aW5nVmlldy5tbSBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLUHJpbnRpbmdWaWV3Lm1tCmluZGV4
IDYzYzU4ODk1ZjcxMjkzYjFiNTQ1OGQ5ZWI2ODQxZDBhMDY0ODE0OWQuLmNhMWNhZDU4MjU5OWZk
MGM2MGIyNTI0YzZiYzc3Mjc2OWQyZmQzOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvbWFjL1dLUHJpbnRpbmdWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvbWFjL1dLUHJpbnRpbmdWaWV3Lm1tCkBAIC0xOTQsOCArMTk0LDggQEAgc3Rh
dGljIEJPT0wgaXNGb3JjaW5nUHJldmlld1VwZGF0ZTsKIC0gKHVpbnQ2NF90KV9leHBlY3RlZFBy
ZXZpZXdDYWxsYmFja0ZvclJlY3Q6KGNvbnN0IEludFJlY3QmKXJlY3QKIHsKICAgICBmb3IgKEhh
c2hNYXA8dWludDY0X3QsIFdlYkNvcmU6OkludFJlY3Q+OjppdGVyYXRvciBpdGVyID0gX2V4cGVj
dGVkUHJldmlld0NhbGxiYWNrcy5iZWdpbigpOyBpdGVyICE9IF9leHBlY3RlZFByZXZpZXdDYWxs
YmFja3MuZW5kKCk7ICsraXRlcikgewotICAgICAgICBpZiAoaXRlci0+c2Vjb25kICA9PSByZWN0
KQotICAgICAgICAgICAgcmV0dXJuIGl0ZXItPmZpcnN0OworICAgICAgICBpZiAoaXRlci0+dmFs
dWUgID09IHJlY3QpCisgICAgICAgICAgICByZXR1cm4gaXRlci0+a2V5OwogICAgIH0KICAgICBy
ZXR1cm4gMDsKIH0KQEAgLTIyOSw4ICsyMjksOCBAQCBzdGF0aWMgdm9pZCBwYWdlRGlkRHJhd1Rv
UERGKFdLRGF0YVJlZiBkYXRhUmVmLCBXS0Vycm9yUmVmLCB2b2lkKiB1bnR5cGVkQ29udGV4dAog
ICAgICAgICAgICAgQVNTRVJUKFt2aWV3IF9pc1ByaW50aW5nUHJldmlld10pOwogCiAgICAgICAg
ICAgICBpZiAoZGF0YSkgewotICAgICAgICAgICAgICAgIEhhc2hNYXA8V2ViQ29yZTo6SW50UmVj
dCwgVmVjdG9yPHVpbnQ4X3Q+ID46OkFkZFJlc3VsdCBlbnRyeSA9IHZpZXctPl9wYWdlUHJldmll
d3MuYWRkKGl0ZXItPnNlY29uZCwgVmVjdG9yPHVpbnQ4X3Q+KCkpOwotICAgICAgICAgICAgICAg
IGVudHJ5Lml0ZXJhdG9yLT5zZWNvbmQuYXBwZW5kKGRhdGEtPmJ5dGVzKCksIGRhdGEtPnNpemUo
KSk7CisgICAgICAgICAgICAgICAgSGFzaE1hcDxXZWJDb3JlOjpJbnRSZWN0LCBWZWN0b3I8dWlu
dDhfdD4gPjo6QWRkUmVzdWx0IGVudHJ5ID0gdmlldy0+X3BhZ2VQcmV2aWV3cy5hZGQoaXRlci0+
dmFsdWUsIFZlY3Rvcjx1aW50OF90PigpKTsKKyAgICAgICAgICAgICAgICBlbnRyeS5pdGVyYXRv
ci0+dmFsdWUuYXBwZW5kKGRhdGEtPmJ5dGVzKCksIGRhdGEtPnNpemUoKSk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB2aWV3LT5fZXhwZWN0ZWRQcmV2aWV3Q2FsbGJhY2tzLnJlbW92ZShj
b250ZXh0LT5jYWxsYmFja0lEKTsKICAgICAgICAgICAgIGJvb2wgcmVjZWl2ZWRSZXNwb25zZVRv
TGF0ZXN0UmVxdWVzdCA9IHZpZXctPl9sYXRlc3RFeHBlY3RlZFByZXZpZXdDYWxsYmFjayA9PSBj
b250ZXh0LT5jYWxsYmFja0lEOwpAQCAtNDk0LDcgKzQ5NCw3IEBAIHN0YXRpYyB2b2lkIHByZXBh
cmVEYXRhRm9yUHJpbnRpbmdPblNlY29uZGFyeVRocmVhZCh2b2lkKiB1bnR5cGVkQ29udGV4dCkK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgcGRm
RGF0YUJ5dGVzID0gcGFnZVByZXZpZXdJdGVyYXRvci0+c2Vjb25kOworICAgIGNvbnN0IFZlY3Rv
cjx1aW50OF90PiYgcGRmRGF0YUJ5dGVzID0gcGFnZVByZXZpZXdJdGVyYXRvci0+dmFsdWU7CiAg
ICAgUmV0YWluUHRyPE5TRGF0YT4gcGRmRGF0YShBZG9wdE5TLCBbW05TRGF0YSBhbGxvY10gaW5p
dFdpdGhCeXRlczpwZGZEYXRhQnl0ZXMuZGF0YSgpIGxlbmd0aDpwZGZEYXRhQnl0ZXMuc2l6ZSgp
XSk7CiAgICAgUmV0YWluUHRyPFBERkRvY3VtZW50PiBwZGZEb2N1bWVudChBZG9wdE5TLCBbW3Bk
ZkRvY3VtZW50Q2xhc3MoKSBhbGxvY10gaW5pdFdpdGhEYXRhOnBkZkRhdGEuZ2V0KCldKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCmluZGV4IDQzMjE5OTQw
YjJlZTNhNDI5MjliNGI4OTk0OTdmZTQyYjZkMjZlNmUuLjFhZTJiZjA3NWYxMGUwOWFlZmI4M2I1
MTU5NWMxY2ExZDc3NWM1MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvbWFjL1dLVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9X
S1ZpZXcubW0KQEAgLTQxMyw3ICs0MTMsNyBAQCBzdGF0aWMgU3RyaW5nIGNvbW1hbmROYW1lRm9y
U2VsZWN0b3IoU0VMIHNlbGVjdG9yKQogICAgIHN0YXRpYyBjb25zdCBTZWxlY3Rvck5hbWVNYXAq
IGV4Y2VwdGlvbk1hcCA9IGNyZWF0ZVNlbGVjdG9yRXhjZXB0aW9uTWFwKCk7CiAgICAgU2VsZWN0
b3JOYW1lTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGV4Y2VwdGlvbk1hcC0+ZmluZChzZWxlY3Rv
cik7CiAgICAgaWYgKGl0ICE9IGV4Y2VwdGlvbk1hcC0+ZW5kKCkpCi0gICAgICAgIHJldHVybiBp
dC0+c2Vjb25kOworICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwogICAgIAogICAgIC8vIFJlbW92
ZSB0aGUgdHJhaWxpbmcgY29sb24uCiAgICAgLy8gTm8gbmVlZCB0byBjYXBpdGFsaXplIHRoZSBj
b21tYW5kIG5hbWUgc2luY2UgRWRpdG9yIGNvbW1hbmQgbmFtZXMgYXJlCkBAIC03MjcsNyArNzI3
LDcgQEAgc3RhdGljIHZvaWQgdmFsaWRhdGVDb21tYW5kQ2FsbGJhY2soV0tTdHJpbmdSZWYgY29t
bWFuZE5hbWUsIGJvb2wgaXNFbmFibGVkLCBpbnQKIAogICAgIC8vIEFkZCB0aGlzIGl0ZW0gdG8g
dGhlIHZlY3RvciBvZiBpdGVtcyBmb3IgYSBnaXZlbiBjb21tYW5kIHRoYXQgYXJlIGF3YWl0aW5n
IHZhbGlkYXRpb24uCiAgICAgVmFsaWRhdGlvbk1hcDo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IF9k
YXRhLT5fdmFsaWRhdGlvbk1hcC5hZGQoY29tbWFuZE5hbWUsIFZhbGlkYXRpb25WZWN0b3IoKSk7
Ci0gICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQuYXBwZW5kKGl0ZW0pOworICAgIGFkZFJl
c3VsdC5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKGl0ZW0pOwogICAgIGlmIChhZGRSZXN1bHQuaXNO
ZXdFbnRyeSkgewogICAgICAgICAvLyBJZiB3ZSBhcmUgbm90IGFscmVhZHkgYXdhaXRpbmcgdmFs
aWRhdGlvbiBmb3IgdGhpcyBjb21tYW5kLCBzdGFydCB0aGUgYXN5bmNocm9ub3VzIHZhbGlkYXRp
b24gcHJvY2Vzcy4KICAgICAgICAgLy8gRklYTUU6IFRoZW9yZXRpY2FsbHksIHRoZXJlIGlzIGEg
cmFjZSBoZXJlOyB3aGVuIHdlIGdldCB0aGUgYW5zd2VyIGl0IG1pZ2h0IGJlIG9sZCwgZnJvbSBh
IHByZXZpb3VzIHRpbWUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9HZW9s
b2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9HZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcApp
bmRleCA3MWJlYWY1YTVjMzFkNDU1Y2E4ZDJiMWEyODgxY2EyYTcyNzE0N2IyLi4wZDQxNjM1NTQ2
NWZmOTBkYTZiY2YwOGVjMzViODRjMTcxYTUzOTk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVl
c3RNYW5hZ2VyUHJveHkuY3BwCkBAIC00Miw3ICs0Miw3IEBAIHZvaWQgR2VvbG9jYXRpb25QZXJt
aXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eTo6aW52YWxpZGF0ZVJlcXVlc3RzKCkKICAgICBQZW5k
aW5nUmVxdWVzdE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BlbmRpbmdSZXF1ZXN0cy5iZWdp
bigpOwogICAgIFBlbmRpbmdSZXF1ZXN0TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BlbmRp
bmdSZXF1ZXN0cy5lbmQoKTsKICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBp
dC0+c2Vjb25kLT5pbnZhbGlkYXRlKCk7CisgICAgICAgIGl0LT52YWx1ZS0+aW52YWxpZGF0ZSgp
OwogCiAgICAgbV9wZW5kaW5nUmVxdWVzdHMuY2xlYXIoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvV2ViSW5zcGVjdG9yU2VydmVyLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvV2ViSW5zcGVjdG9y
U2VydmVyLmNwcAppbmRleCBmMzM1ODQ5ZWQ3MDAzOWNkM2NmYzZiNmY1YzZmZDQ0MmE4MDRlODU0
Li5mZTQ1MjQzYTZlNzg3MGI5MzgwNDU5NTU5NzkyN2M2OTMyYTNjMWU4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL1dlYkluc3BlY3RvclNlcnZl
ci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9XZWJJ
bnNwZWN0b3JTZXJ2ZXIuY3BwCkBAIC02Nyw3ICs2Nyw3IEBAIFdlYkluc3BlY3RvclNlcnZlcjo6
fldlYkluc3BlY3RvclNlcnZlcigpCiAgICAgLy8gQ2xvc2UgYW55IHJlbWFpbmluZyBvcGVuIGNv
bm5lY3Rpb25zLgogICAgIEhhc2hNYXA8dW5zaWduZWQsIFdlYlNvY2tldFNlcnZlckNvbm5lY3Rp
b24qPjo6aXRlcmF0b3IgZW5kID0gbV9jb25uZWN0aW9uTWFwLmVuZCgpOwogICAgIGZvciAoSGFz
aE1hcDx1bnNpZ25lZCwgV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbio+OjppdGVyYXRvciBpdCA9
IG1fY29ubmVjdGlvbk1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgV2Vi
U29ja2V0U2VydmVyQ29ubmVjdGlvbiogY29ubmVjdGlvbiA9IGl0LT5zZWNvbmQ7CisgICAgICAg
IFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24qIGNvbm5lY3Rpb24gPSBpdC0+dmFsdWU7CiAgICAg
ICAgIFdlYkluc3BlY3RvclByb3h5KiBjbGllbnQgPSBtX2NsaWVudE1hcC5nZXQoY29ubmVjdGlv
bi0+aWRlbnRpZmllcigpKTsKICAgICAgICAgY2xvc2VDb25uZWN0aW9uKGNsaWVudCwgY29ubmVj
dGlvbik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0luc3Bl
Y3RvclNlcnZlci9XZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbi5jcHAK
aW5kZXggOWZmYmJiZTM2YThmY2NjYTNkYTM3MmFjNTliZjI3MTI0NzgxMjRkNy4uZDc2ZWM4ZjQx
NTg5MDEwM2FhMDBlOGI4OTZiYmM4MjRlOTY1MDNiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9XZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL1dlYlNvY2tl
dFNlcnZlckNvbm5lY3Rpb24uY3BwCkBAIC0xMDIsOSArMTAyLDkgQEAgdm9pZCBXZWJTb2NrZXRT
ZXJ2ZXJDb25uZWN0aW9uOjpzZW5kSFRUUFJlc3BvbnNlSGVhZGVyKGludCBzdGF0dXNDb2RlLCBj
b25zdCBTdHIKICAgICBidWlsZGVyLmFwcGVuZCgiXHJcbiIpOwogICAgIEhUVFBIZWFkZXJNYXA6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGhlYWRlckZpZWxkcy5lbmQoKTsKICAgICBmb3IgKEhUVFBI
ZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaGVhZGVyRmllbGRzLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgewotICAgICAgICBidWlsZGVyLmFwcGVuZChpdC0+Zmlyc3QpOworICAgICAg
ICBidWlsZGVyLmFwcGVuZChpdC0+a2V5KTsKICAgICAgICAgYnVpbGRlci5hcHBlbmQoIjogIik7
Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKGl0LT5zZWNvbmQgKyAiXHJcbiIpOworICAgICAgICBi
dWlsZGVyLmFwcGVuZChpdC0+dmFsdWUgKyAiXHJcbiIpOwogICAgIH0KICAgICBidWlsZGVyLmFw
cGVuZCgiXHJcbiIpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvSW5z
cGVjdG9yU2VydmVyL3F0L1dlYkluc3BlY3RvclNlcnZlclF0LmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvcXQvV2ViSW5zcGVjdG9yU2VydmVyUXQuY3BwCmlu
ZGV4IDlmODRhNjU2YmVlMGFjNWI0ZWMzZTk1MjFjYzFlNjgzYWUzYWY5NmMuLjAyNWIxNDExYWNl
NzEwMTExMjk4MDAyNTBjZjg2MmIyMGM4YjBmYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvcXQvV2ViSW5zcGVjdG9yU2VydmVyUXQuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvcXQvV2ViSW5zcGVj
dG9yU2VydmVyUXQuY3BwCkBAIC02MiwxNiArNjIsMTYgQEAgdm9pZCBXZWJJbnNwZWN0b3JTZXJ2
ZXI6OmJ1aWxkUGFnZUxpc3QoVmVjdG9yPGNoYXI+JiBkYXRhLCBTdHJpbmcmIGNvbnRlbnRUeXBl
KQogICAgIGJ1aWxkZXIuYXBwZW5kKCJbICIpOwogICAgIENsaWVudE1hcDo6aXRlcmF0b3IgZW5k
ID0gbV9jbGllbnRNYXAuZW5kKCk7CiAgICAgZm9yIChDbGllbnRNYXA6Oml0ZXJhdG9yIGl0ID0g
bV9jbGllbnRNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFdlYlBhZ2VQ
cm94eSogd2ViUGFnZSA9IGl0LT5zZWNvbmQtPnBhZ2UoKTsKKyAgICAgICAgV2ViUGFnZVByb3h5
KiB3ZWJQYWdlID0gaXQtPnZhbHVlLT5wYWdlKCk7CiAgICAgICAgIGlmIChpdCAhPSBtX2NsaWVu
dE1hcC5iZWdpbigpKQogICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoIiwgIik7Ci0gICAgICAg
IGJ1aWxkZXIuYXBwZW5kKCJ7IFwiaWRcIjogIiArIFN0cmluZzo6bnVtYmVyKGl0LT5maXJzdCkp
OworICAgICAgICBidWlsZGVyLmFwcGVuZCgieyBcImlkXCI6ICIgKyBTdHJpbmc6Om51bWJlcihp
dC0+a2V5KSk7CiAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIsIFwidGl0bGVcIjogXCIiKTsKICAg
ICAgICAgYnVpbGRlci5hcHBlbmQod2ViUGFnZS0+cGFnZVRpdGxlKCkpOwogICAgICAgICBidWls
ZGVyLmFwcGVuZCgiXCIsIFwidXJsXCI6IFwiIik7CiAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHdl
YlBhZ2UtPmFjdGl2ZVVSTCgpKTsKICAgICAgICAgYnVpbGRlci5hcHBlbmQoIlwiLCBcImluc3Bl
Y3RvclVybFwiOiBcIiIpOwotICAgICAgICBidWlsZGVyLmFwcGVuZCgiL3dlYmtpdC9pbnNwZWN0
b3IvaW5zcGVjdG9yLmh0bWw/cGFnZT0iICsgU3RyaW5nOjpudW1iZXIoaXQtPmZpcnN0KSk7Cisg
ICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIvd2Via2l0L2luc3BlY3Rvci9pbnNwZWN0b3IuaHRtbD9w
YWdlPSIgKyBTdHJpbmc6Om51bWJlcihpdC0+a2V5KSk7CiAgICAgICAgIGJ1aWxkZXIuYXBwZW5k
KCJcIiB9Iik7CiAgICAgfQogICAgIGJ1aWxkZXIuYXBwZW5kKCIgXSIpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL05vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uUGVybWlz
c2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL05v
dGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuY3Bw
CmluZGV4IDA3OTIyOTg1ZTQ1NjVmM2M3M2NhZGMzYTBjZjQ1NTIxN2M2MTk5NjkuLjRhMGM0NzUy
OTM3Yjg3MmQ1ZGUyNjljOTE2OTRlMjIxOGQzMjBlMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9Ob3RpZmljYXRpb25zL05vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0
TWFuYWdlclByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTm90aWZpY2F0
aW9ucy9Ob3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5jcHAKQEAgLTQz
LDcgKzQzLDcgQEAgdm9pZCBOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94
eTo6aW52YWxpZGF0ZVJlcXVlc3RzKCkKICAgICBQZW5kaW5nUmVxdWVzdE1hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX3BlbmRpbmdSZXF1ZXN0cy5iZWdpbigpOwogICAgIFBlbmRpbmdSZXF1ZXN0
TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BlbmRpbmdSZXF1ZXN0cy5lbmQoKTsKICAgICBm
b3IgKDsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5pbnZhbGlkYXRlKCk7
CisgICAgICAgIGl0LT52YWx1ZS0+aW52YWxpZGF0ZSgpOwogICAgIAogICAgIG1fcGVuZGluZ1Jl
cXVlc3RzLmNsZWFyKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
UGx1Z2lucy9QbHVnaW5Qcm9jZXNzUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1BsdWdpbnMvUGx1Z2luUHJvY2Vzc1Byb3h5LmNwcAppbmRleCA0M2ZhMmY0Y2JiMDQwOTJiMmMx
OTAyYmU5MGNhOTFlOGQ0NDYwODc1Li4zNjlhZGUyZGRjMjY1MzAzZDgwNDJkNWUzMzJmMDJjYTQw
MjQ3ZGNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9QbHVn
aW5Qcm9jZXNzUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5z
L1BsdWdpblByb2Nlc3NQcm94eS5jcHAKQEAgLTE0NiwxMCArMTQ2LDEwIEBAIHZvaWQgUGx1Z2lu
UHJvY2Vzc1Byb3h5OjpwbHVnaW5Qcm9jZXNzQ3Jhc2hlZE9yRmFpbGVkVG9MYXVuY2goKQogICAg
IH0KIAogICAgIHdoaWxlICghbV9wZW5kaW5nR2V0U2l0ZXNSZXBsaWVzLmlzRW1wdHkoKSkKLSAg
ICAgICAgZGlkR2V0U2l0ZXNXaXRoRGF0YShWZWN0b3I8U3RyaW5nPigpLCBtX3BlbmRpbmdHZXRT
aXRlc1JlcGxpZXMuYmVnaW4oKS0+Zmlyc3QpOworICAgICAgICBkaWRHZXRTaXRlc1dpdGhEYXRh
KFZlY3RvcjxTdHJpbmc+KCksIG1fcGVuZGluZ0dldFNpdGVzUmVwbGllcy5iZWdpbigpLT5rZXkp
OwogCiAgICAgd2hpbGUgKCFtX3BlbmRpbmdDbGVhclNpdGVEYXRhUmVwbGllcy5pc0VtcHR5KCkp
Ci0gICAgICAgIGRpZENsZWFyU2l0ZURhdGEobV9wZW5kaW5nQ2xlYXJTaXRlRGF0YVJlcGxpZXMu
YmVnaW4oKS0+Zmlyc3QpOworICAgICAgICBkaWRDbGVhclNpdGVEYXRhKG1fcGVuZGluZ0NsZWFy
U2l0ZURhdGFSZXBsaWVzLmJlZ2luKCktPmtleSk7CiAKICAgICAvLyBUZWxsIHRoZSBwbHVnLWlu
IHByb2Nlc3MgbWFuYWdlciB0byBmb3JnZXQgYWJvdXQgdGhpcyBwbHVnLWluIHByb2Nlc3MgcHJv
eHkuIFRoaXMgbWF5IGNhdXNlIHVzIHRvIGJlIGRlbGV0ZWQuCiAgICAgbV9wbHVnaW5Qcm9jZXNz
TWFuYWdlci0+cmVtb3ZlUGx1Z2luUHJvY2Vzc1Byb3h5KHRoaXMpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYkNvbnRleHQuY3BwCmluZGV4IDJlY2ZmOWQ0YjA3NzE5NGIwNTg1YTNmMWQ5NDIw
NjVlYTJmMmI1NWMuLjJmMzMzOGY1YjkxZmJlMGNhZDI0MjUwZjc0MDcyNjM2ODRiZTU2ZDYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5jcHAKQEAgLTg3MCw3ICs4NzAsNyBA
QCBzdGF0aWMgUGFzc1JlZlB0cjxNdXRhYmxlRGljdGlvbmFyeT4gY3JlYXRlRGljdGlvbmFyeUZy
b21IYXNoTWFwKGNvbnN0IEhhc2hNYXA8UwogICAgIFJlZlB0cjxNdXRhYmxlRGljdGlvbmFyeT4g
cmVzdWx0ID0gTXV0YWJsZURpY3Rpb25hcnk6OmNyZWF0ZSgpOwogICAgIEhhc2hNYXA8U3RyaW5n
LCB1aW50NjRfdD46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC5lbmQoKTsKICAgICBmb3IgKEhh
c2hNYXA8U3RyaW5nLCB1aW50NjRfdD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgcmVzdWx0LT5zZXQoaXQtPmZpcnN0LCBSZWZQdHI8
V2ViVUludDY0PihXZWJVSW50NjQ6OmNyZWF0ZShpdC0+c2Vjb25kKSkuZ2V0KCkpOworICAgICAg
ICByZXN1bHQtPnNldChpdC0+a2V5LCBSZWZQdHI8V2ViVUludDY0PihXZWJVSW50NjQ6OmNyZWF0
ZShpdC0+dmFsdWUpKS5nZXQoKSk7CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJY29uRGF0YWJhc2UuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkljb25EYXRhYmFzZS5jcHAKaW5kZXggODAxNmNmYmQ2
ZTdlMWY3NjhhYThkMTZjMjVlY2M3ZjZiMDc5MzVmYy4uZWYzMzJmYTJhYzZkODdkNzVmMzVjZjQx
ZmU4ZjBjODA3OWI1YjE2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
Ykljb25EYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkljb25E
YXRhYmFzZS5jcHAKQEAgLTI1MCwxNCArMjUwLDE0IEBAIHZvaWQgV2ViSWNvbkRhdGFiYXNlOjpk
aWRGaW5pc2hVUkxJbXBvcnQoKQogICAgIEhhc2hNYXA8dWludDY0X3QsIFN0cmluZz46Oml0ZXJh
dG9yIGVuZCA9IG1fcGVuZGluZ0xvYWREZWNpc2lvblVSTE1hcC5lbmQoKTsKICAgICAKICAgICBm
b3IgKDsgaSAhPSBlbmQ7ICsraSkgewotICAgICAgICBMT0coSWNvbkRhdGFiYXNlLCAiV0syIFVJ
UHJvY2VzcyBwZXJmb3JtaW5nIGRlbGF5ZWQgY2FsbGJhY2sgb24gY2FsbGJhY2sgSUQgJWkgZm9y
IHBhZ2UgdXJsICVzIiwgKGludClpLT5maXJzdCwgaS0+c2Vjb25kLmFzY2lpKCkuZGF0YSgpKTsK
LSAgICAgICAgSWNvbkxvYWREZWNpc2lvbiBkZWNpc2lvbiA9IG1faWNvbkRhdGFiYXNlSW1wbC0+
c3luY2hyb25vdXNMb2FkRGVjaXNpb25Gb3JJY29uVVJMKGktPnNlY29uZCwgMCk7CisgICAgICAg
IExPRyhJY29uRGF0YWJhc2UsICJXSzIgVUlQcm9jZXNzIHBlcmZvcm1pbmcgZGVsYXllZCBjYWxs
YmFjayBvbiBjYWxsYmFjayBJRCAlaSBmb3IgcGFnZSB1cmwgJXMiLCAoaW50KWktPmtleSwgaS0+
dmFsdWUuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICBJY29uTG9hZERlY2lzaW9uIGRlY2lzaW9u
ID0gbV9pY29uRGF0YWJhc2VJbXBsLT5zeW5jaHJvbm91c0xvYWREZWNpc2lvbkZvckljb25VUkwo
aS0+dmFsdWUsIDApOwogCiAgICAgICAgIC8vIERlY2lzaW9ucyBzaG91bGQgbmV2ZXIgYmUgdW5r
bm93biBhZnRlciB0aGUgaW5pdGFsIGltcG9ydCBpcyBjb21wbGV0ZQogICAgICAgICBBU1NFUlQo
ZGVjaXNpb24gIT0gSWNvbkxvYWRVbmtub3duKTsKIAogICAgICAgICAvLyBGSVhNRSAoTXVsdGkt
V2ViUHJvY2Vzcyk6IFdlIG5lZWQgdG8ga25vdyB3aGljaCBjb25uZWN0aW9uIHRvIHNlbmQgdGhp
cyBtZXNzYWdlIHRvLgotICAgICAgICBtX3dlYkNvbnRleHQtPnNlbmRUb0FsbFByb2Nlc3NlcyhN
ZXNzYWdlczo6V2ViSWNvbkRhdGFiYXNlUHJveHk6OlJlY2VpdmVkSWNvbkxvYWREZWNpc2lvbihz
dGF0aWNfY2FzdDxpbnQ+KGRlY2lzaW9uKSwgaS0+Zmlyc3QpKTsKKyAgICAgICAgbV93ZWJDb250
ZXh0LT5zZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYkljb25EYXRhYmFzZVByb3h5OjpS
ZWNlaXZlZEljb25Mb2FkRGVjaXNpb24oc3RhdGljX2Nhc3Q8aW50PihkZWNpc2lvbiksIGktPmtl
eSkpOwogICAgIH0KICAgICAKICAgICBtX3BlbmRpbmdMb2FkRGVjaXNpb25VUkxNYXAuY2xlYXIo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5k
ZXJlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIu
Y3BwCmluZGV4IDk4ZTBiNTQ1MmFmZDI5OWQ0YTRlZDJmYjJiMDkzOTU5YzlhZjVhMWQuLmNjMzM3
MTViNzg2MTBkMWFiMjIxYjQ3MTU1ZDQ3N2FhNWVhMGIyNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJlci5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVyLmNwcApAQCAtMTgwLDcgKzE4MCw3
IEBAIHZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmFkanVzdFBvc2l0aW9uRm9yRml4ZWRMYXll
cnMoKQogCiAgICAgTGF5ZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fZml4ZWRMYXllcnMuZW5kKCk7
CiAgICAgZm9yIChMYXllck1hcDo6aXRlcmF0b3IgaXQgPSBtX2ZpeGVkTGF5ZXJzLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgdG9UZXh0dXJlTWFwcGVyTGF5ZXIoaXQtPnNlY29u
ZCktPnNldFNjcm9sbFBvc2l0aW9uRGVsdGFJZk5lZWRlZChJbnRQb2ludChzY3JvbGxQb3NpdGlv
bi54KCkgLSBtX3JlbmRlcmVkQ29udGVudHNTY3JvbGxQb3NpdGlvbi54KCksIHNjcm9sbFBvc2l0
aW9uLnkoKSAtIG1fcmVuZGVyZWRDb250ZW50c1Njcm9sbFBvc2l0aW9uLnkoKSkpOworICAgICAg
ICB0b1RleHR1cmVNYXBwZXJMYXllcihpdC0+dmFsdWUpLT5zZXRTY3JvbGxQb3NpdGlvbkRlbHRh
SWZOZWVkZWQoSW50UG9pbnQoc2Nyb2xsUG9zaXRpb24ueCgpIC0gbV9yZW5kZXJlZENvbnRlbnRz
U2Nyb2xsUG9zaXRpb24ueCgpLCBzY3JvbGxQb3NpdGlvbi55KCkgLSBtX3JlbmRlcmVkQ29udGVu
dHNTY3JvbGxQb3NpdGlvbi55KCkpKTsKIH0KIAogdm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6
ZGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24oY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uKQpAQCAtMTky
LDcgKzE5Miw3IEBAIHZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnNldExheWVyQ2hpbGRyZW4o
V2ViTGF5ZXJJRCBpZCwgY29uc3QgVmVjdG9yPFdlYkxheWVyCiB7CiAgICAgZW5zdXJlTGF5ZXIo
aWQpOwogICAgIExheWVyTWFwOjppdGVyYXRvciBpdCA9IG1fbGF5ZXJzLmZpbmQoaWQpOwotICAg
IEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gaXQtPnNlY29uZDsKKyAgICBHcmFwaGljc0xheWVyKiBs
YXllciA9IGl0LT52YWx1ZTsKICAgICBWZWN0b3I8R3JhcGhpY3NMYXllcio+IGNoaWxkcmVuOwog
CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZElEcy5zaXplKCk7ICsraSkgewpAQCAt
MjEzLDcgKzIxMyw3IEBAIHZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnNldExheWVyU3RhdGUo
V2ViTGF5ZXJJRCBpZCwgY29uc3QgV2ViTGF5ZXJJbmZvJiBsYXllCiAgICAgTGF5ZXJNYXA6Oml0
ZXJhdG9yIGl0ID0gbV9sYXllcnMuZmluZChpZCk7CiAgICAgQVNTRVJUKGl0ICE9IG1fbGF5ZXJz
LmVuZCgpKTsKIAotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gaXQtPnNlY29uZDsKKyAgICBH
cmFwaGljc0xheWVyKiBsYXllciA9IGl0LT52YWx1ZTsKIAogICAgIGxheWVyLT5zZXRSZXBsaWNh
dGVkQnlMYXllcihsYXllckJ5SUQobGF5ZXJJbmZvLnJlcGxpY2EpKTsKICAgICBsYXllci0+c2V0
TWFza0xheWVyKGxheWVyQnlJRChsYXllckluZm8ubWFzaykpOwpAQCAtMzM2LDcgKzMzNiw3IEBA
IHZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmFzc2lnbkltYWdlVG9MYXllcihHcmFwaGljc0xh
eWVyKiBsYXllciwgaW50NjRfdCBpbWFnCiAKICAgICBIYXNoTWFwPGludDY0X3QsIFJlZlB0cjxU
ZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlPiA+OjppdGVyYXRvciBpdCA9IG1fZGlyZWN0bHlDb21w
b3NpdGVkSW1hZ2VzLmZpbmQoaW1hZ2VJRCk7CiAgICAgQVNTRVJUKGl0ICE9IG1fZGlyZWN0bHlD
b21wb3NpdGVkSW1hZ2VzLmVuZCgpKTsKLSAgICBsYXllci0+c2V0Q29udGVudHNUb01lZGlhKGl0
LT5zZWNvbmQuZ2V0KCkpOworICAgIGxheWVyLT5zZXRDb250ZW50c1RvTWVkaWEoaXQtPnZhbHVl
LmdldCgpKTsKIH0KIAogdm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6Y29tbWl0VGlsZU9wZXJh
dGlvbnMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQ
cm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcApp
bmRleCA0NWI3OGY3ZmRhNmZlYjg5YmRlNGMxMWFkZmQwZjkwZjRiY2Q5MWVjLi4zMjJlMjUzODNi
OGU1YTQ0Mjc3MjdiMmQzMmEzZTIyOWYwMjJlZmNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcApAQCAtMjQ4LDkgKzI0OCw5IEBAIGJvb2wgV2ViUHJv
Y2Vzc1Byb3h5OjpjaGVja1VSTFJlY2VpdmVkRnJvbVdlYlByb2Nlc3MoY29uc3QgS1VSTCYgdXJs
KQogICAgIC8vIEl0ZW1zIGluIGJhY2svZm9yd2FyZCBsaXN0IGhhdmUgYmVlbiBhbHJlYWR5IGNo
ZWNrZWQuCiAgICAgLy8gT25lIGNhc2Ugd2hlcmUgd2UgZG9uJ3QgaGF2ZSBzYW5kYm94IGV4dGVu
c2lvbnMgZm9yIGZpbGUgVVJMcyBpbiBiL2YgbGlzdCBpcyBpZiB0aGUgbGlzdCBoYXMgYmVlbiBy
ZWluc3RhdGVkIGFmdGVyIGEgY3Jhc2ggb3IgYSBicm93c2VyIHJlc3RhcnQuCiAgICAgZm9yIChX
ZWJCYWNrRm9yd2FyZExpc3RJdGVtTWFwOjppdGVyYXRvciBpdGVyID0gbV9iYWNrRm9yd2FyZExp
c3RJdGVtTWFwLmJlZ2luKCksIGVuZCA9IG1fYmFja0ZvcndhcmRMaXN0SXRlbU1hcC5lbmQoKTsg
aXRlciAhPSBlbmQ7ICsraXRlcikgewotICAgICAgICBpZiAoS1VSTChLVVJMKCksIGl0ZXItPnNl
Y29uZC0+dXJsKCkpLmZpbGVTeXN0ZW1QYXRoKCkgPT0gcGF0aCkKKyAgICAgICAgaWYgKEtVUkwo
S1VSTCgpLCBpdGVyLT52YWx1ZS0+dXJsKCkpLmZpbGVTeXN0ZW1QYXRoKCkgPT0gcGF0aCkKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoS1VSTChLVVJMKCksIGl0ZXItPnNl
Y29uZC0+b3JpZ2luYWxVUkwoKSkuZmlsZVN5c3RlbVBhdGgoKSA9PSBwYXRoKQorICAgICAgICBp
ZiAoS1VSTChLVVJMKCksIGl0ZXItPnZhbHVlLT5vcmlnaW5hbFVSTCgpKS5maWxlU3lzdGVtUGF0
aCgpID09IHBhdGgpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTI3Mywx
NSArMjczLDE1IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5OjphZGRCYWNrRm9yd2FyZEl0ZW0odWlu
dDY0X3QgaXRlbUlELCBjb25zdCBTdHJpbmcmIG9yaWdpbmFsCiAKICAgICBXZWJCYWNrRm9yd2Fy
ZExpc3RJdGVtTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9iYWNrRm9yd2FyZExpc3RJdGVtTWFw
LmFkZChpdGVtSUQsIDApOwogICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICBy
ZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW06OmNyZWF0ZShv
cmlnaW5hbFVSTCwgdXJsLCB0aXRsZSwgYmFja0ZvcndhcmREYXRhLmRhdGEoKSwgYmFja0Zvcndh
cmREYXRhLnNpemUoKSwgaXRlbUlEKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9
IFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW06OmNyZWF0ZShvcmlnaW5hbFVSTCwgdXJsLCB0aXRsZSwg
YmFja0ZvcndhcmREYXRhLmRhdGEoKSwgYmFja0ZvcndhcmREYXRhLnNpemUoKSwgaXRlbUlEKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8vIFVwZGF0ZSBleGlzdGluZyBpdGVtLgot
ICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLT5zZXRPcmlnaW5hbFVSTChvcmlnaW5hbFVSTCk7
Ci0gICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQtPnNldFVSTCh1cmwpOwotICAgIHJlc3VsdC5p
dGVyYXRvci0+c2Vjb25kLT5zZXRUaXRsZSh0aXRsZSk7Ci0gICAgcmVzdWx0Lml0ZXJhdG9yLT5z
ZWNvbmQtPnNldEJhY2tGb3J3YXJkRGF0YShiYWNrRm9yd2FyZERhdGEuZGF0YSgpLCBiYWNrRm9y
d2FyZERhdGEuc2l6ZSgpKTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5zZXRPcmlnaW5h
bFVSTChvcmlnaW5hbFVSTCk7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+c2V0VVJMKHVy
bCk7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+c2V0VGl0bGUodGl0bGUpOworICAgIHJl
c3VsdC5pdGVyYXRvci0+dmFsdWUtPnNldEJhY2tGb3J3YXJkRGF0YShiYWNrRm9yd2FyZERhdGEu
ZGF0YSgpLCBiYWNrRm9yd2FyZERhdGEuc2l6ZSgpKTsKIH0KIAogI2lmIEVOQUJMRShQTFVHSU5f
UFJPQ0VTUykKQEAgLTQ4MCw3ICs0ODAsNyBAQCBzaXplX3QgV2ViUHJvY2Vzc1Byb3h5OjpmcmFt
ZUNvdW50SW5QYWdlKFdlYlBhZ2VQcm94eSogcGFnZSkgY29uc3QKIHsKICAgICBzaXplX3QgcmVz
dWx0ID0gMDsKICAgICBmb3IgKEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxXZWJGcmFtZVByb3h5
PiA+Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gbV9mcmFtZU1hcC5iZWdpbigpOyBpdGVyICE9IG1f
ZnJhbWVNYXAuZW5kKCk7ICsraXRlcikgewotICAgICAgICBpZiAoaXRlci0+c2Vjb25kLT5wYWdl
KCkgPT0gcGFnZSkKKyAgICAgICAgaWYgKGl0ZXItPnZhbHVlLT5wYWdlKCkgPT0gcGFnZSkKICAg
ICAgICAgICAgICsrcmVzdWx0OwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVyQmFja2luZ1N0b3JlLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXllckJhY2tpbmdTdG9yZS5jcHAKaW5kZXggY2Fh
ZmZlOWU1MzlmOWMyYTM5NWM3OTdlYzU0YjYzNmY1MmQ5MWZhZi4uMmEyOWE0NzQ4ZmFlNDViNTc0
NGQ3ZGJhYmQ0MTM5NjZmNzgyMjhiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL3F0L0xheWVyQmFja2luZ1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvcXQvTGF5ZXJCYWNraW5nU3RvcmUuY3BwCkBAIC04MCwxNCArODAsMTQgQEAgdm9pZCBMYXll
ckJhY2tpbmdTdG9yZTo6dXBkYXRlVGlsZShpbnQgaWQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJl
Y3QsIGNvbnN0IEludFIKIHsKICAgICBIYXNoTWFwPGludCwgTGF5ZXJCYWNraW5nU3RvcmVUaWxl
Pjo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmZpbmQoaWQpOwogICAgIEFTU0VSVChpdCAhPSBtX3Rp
bGVzLmVuZCgpKTsKLSAgICBpdC0+c2Vjb25kLnNldEJhY2tCdWZmZXIodGFyZ2V0UmVjdCwgc291
cmNlUmVjdCwgYmFja0J1ZmZlciwgb2Zmc2V0KTsKKyAgICBpdC0+dmFsdWUuc2V0QmFja0J1ZmZl
cih0YXJnZXRSZWN0LCBzb3VyY2VSZWN0LCBiYWNrQnVmZmVyLCBvZmZzZXQpOwogfQogCiBQYXNz
UmVmUHRyPEJpdG1hcFRleHR1cmU+IExheWVyQmFja2luZ1N0b3JlOjp0ZXh0dXJlKCkgY29uc3QK
IHsKICAgICBIYXNoTWFwPGludCwgTGF5ZXJCYWNraW5nU3RvcmVUaWxlPjo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gbV90aWxlcy5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8aW50LCBMYXllckJhY2tp
bmdTdG9yZVRpbGU+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7Ci0gICAgICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiB0ZXh0dXJlID0gaXQt
PnNlY29uZC50ZXh0dXJlKCk7CisgICAgICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiB0ZXh0dXJl
ID0gaXQtPnZhbHVlLnRleHR1cmUoKTsKICAgICAgICAgaWYgKHRleHR1cmUpCiAgICAgICAgICAg
ICByZXR1cm4gdGV4dHVyZTsKICAgICB9CkBAIC0xMDMsNyArMTAzLDcgQEAgdm9pZCBMYXllckJh
Y2tpbmdTdG9yZTo6cGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1h
cHBlciwgY29uc3QKICAgICBIYXNoTWFwPGludCwgTGF5ZXJCYWNraW5nU3RvcmVUaWxlPjo6aXRl
cmF0b3IgZW5kID0gbV90aWxlcy5lbmQoKTsKICAgICBGbG9hdFJlY3QgY292ZXJlZFJlY3Q7CiAg
ICAgZm9yIChIYXNoTWFwPGludCwgTGF5ZXJCYWNraW5nU3RvcmVUaWxlPjo6aXRlcmF0b3IgaXQg
PSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBMYXllckJhY2tp
bmdTdG9yZVRpbGUmIHRpbGUgPSBpdC0+c2Vjb25kOworICAgICAgICBMYXllckJhY2tpbmdTdG9y
ZVRpbGUmIHRpbGUgPSBpdC0+dmFsdWU7CiAgICAgICAgIGlmICghdGlsZS50ZXh0dXJlKCkpCiAg
ICAgICAgICAgICBjb250aW51ZTsKIApAQCAtMTM0LDcgKzEzNCw3IEBAIHZvaWQgTGF5ZXJCYWNr
aW5nU3RvcmU6OmNvbW1pdFRpbGVPcGVyYXRpb25zKFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBw
ZXIpCiAKICAgICBIYXNoTWFwPGludCwgTGF5ZXJCYWNraW5nU3RvcmVUaWxlPjo6aXRlcmF0b3Ig
dGlsZXNFbmQgPSBtX3RpbGVzLmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDxpbnQsIExheWVyQmFj
a2luZ1N0b3JlVGlsZT46Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpOyBpdCAhPSB0aWxl
c0VuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC5zd2FwQnVmZmVycyh0ZXh0dXJlTWFwcGVy
KTsKKyAgICAgICAgaXQtPnZhbHVlLnN3YXBCdWZmZXJzKHRleHR1cmVNYXBwZXIpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvR2VvbG9jYXRpb24vR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuY3BwIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9HZW9sb2NhdGlvbi9HZW9sb2NhdGlvblBlcm1pc3Np
b25SZXF1ZXN0TWFuYWdlci5jcHAKaW5kZXggZDZiZGI4ZTE1MzE0NTBiMTJhYmM4MmQ4NmIyZmMw
MTNmMTM1NDNiNy4uZmNhNzFhMWQwOTVmZWVmYWJhMDVhNmE3MjVmZGI0MzYzNTgxNGI2NiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9HZW9sb2NhdGlvbi9HZW9sb2NhdGlv
blBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9HZW9sb2NhdGlvbi9HZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5jcHAK
QEAgLTc0LDcgKzc0LDcgQEAgdm9pZCBHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdl
cjo6Y2FuY2VsUmVxdWVzdEZvckdlb2xvY2F0aW9uKEdlb2xvY2F0aW8KICAgICAgICAgcmV0dXJu
OwogCiAgICAgbV9nZW9sb2NhdGlvblRvSURNYXAucmVtb3ZlKGl0KTsKLSAgICBtX2lkVG9HZW9s
b2NhdGlvbk1hcC5yZW1vdmUoaXQtPnNlY29uZCk7CisgICAgbV9pZFRvR2VvbG9jYXRpb25NYXAu
cmVtb3ZlKGl0LT52YWx1ZSk7CiB9CiAKIHZvaWQgR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVz
dE1hbmFnZXI6OmRpZFJlY2VpdmVHZW9sb2NhdGlvblBlcm1pc3Npb25EZWNpc2lvbih1aW50NjRf
dCBnZW9sb2NhdGlvbklELCBib29sIGFsbG93ZWQpCkBAIC04Myw3ICs4Myw3IEBAIHZvaWQgR2Vv
bG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXI6OmRpZFJlY2VpdmVHZW9sb2NhdGlvblBl
cm1pc3Npb25EZWNpc2lvCiAgICAgaWYgKGl0ID09IG1faWRUb0dlb2xvY2F0aW9uTWFwLmVuZCgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBHZW9sb2NhdGlvbiogZ2VvbG9jYXRpb24gPSBpdC0+
c2Vjb25kOworICAgIEdlb2xvY2F0aW9uKiBnZW9sb2NhdGlvbiA9IGl0LT52YWx1ZTsKICAgICBn
ZW9sb2NhdGlvbi0+c2V0SXNBbGxvd2VkKGFsbG93ZWQpOwogCiAgICAgbV9pZFRvR2VvbG9jYXRp
b25NYXAucmVtb3ZlKGl0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxlTm9kZUhhbmRsZS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZU5vZGVI
YW5kbGUuY3BwCmluZGV4IDBjNDI5NWU2MTJjZGQ3NmYwM2E1MzEzZDQ1ZTZjZWMxZmIxZTg1OTYu
Ljc3ZTAzMDkzZDVmZDBkOTY0MjRkMzE1NGY3N2M5NGQ0MTk0YjE2ZWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxl
Tm9kZUhhbmRsZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlLmNwcApAQCAtNjksMTAgKzY5LDEwIEBA
IFBhc3NSZWZQdHI8SW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlPiBJbmplY3RlZEJ1bmRsZU5vZGVI
YW5kbGU6OmdldE9yQ3JlYXRlKE5vZGUqCiAKICAgICBET01IYW5kbGVDYWNoZTo6QWRkUmVzdWx0
IHJlc3VsdCA9IGRvbUhhbmRsZUNhY2hlKCkuYWRkKG5vZGUsIDApOwogICAgIGlmICghcmVzdWx0
LmlzTmV3RW50cnkpCi0gICAgICAgIHJldHVybiBQYXNzUmVmUHRyPEluamVjdGVkQnVuZGxlTm9k
ZUhhbmRsZT4ocmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOworICAgICAgICByZXR1cm4gUGFzc1Jl
ZlB0cjxJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU+KHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwog
CiAgICAgUmVmUHRyPEluamVjdGVkQnVuZGxlTm9kZUhhbmRsZT4gbm9kZUhhbmRsZSA9IEluamVj
dGVkQnVuZGxlTm9kZUhhbmRsZTo6Y3JlYXRlKG5vZGUpOwotICAgIHJlc3VsdC5pdGVyYXRvci0+
c2Vjb25kID0gbm9kZUhhbmRsZS5nZXQoKTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0g
bm9kZUhhbmRsZS5nZXQoKTsKICAgICByZXR1cm4gbm9kZUhhbmRsZS5yZWxlYXNlKCk7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9N
L0luamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGUuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5jcHAKaW5kZXgg
MWI3NGYwMTI0MDA4ZGIzYzA3ODI4ZWE2ZjZkMmMwNWFjMDU5YzMwNi4uZDYwMDBhYjkxMzMyOWNk
NTdkYWIzZTNmZDY0MDE0Yzc2ZTk1MmRjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0
ZWRCdW5kbGVSYW5nZUhhbmRsZS5jcHAKQEAgLTQ4LDEwICs0OCwxMCBAQCBQYXNzUmVmUHRyPElu
amVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU+IEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OmdldE9y
Q3JlYXRlKFJhbgogCiAgICAgRE9NSGFuZGxlQ2FjaGU6OkFkZFJlc3VsdCByZXN1bHQgPSBkb21I
YW5kbGVDYWNoZSgpLmFkZChyYW5nZSwgMCk7CiAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkK
LSAgICAgICAgcmV0dXJuIFBhc3NSZWZQdHI8SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZT4ocmVz
dWx0Lml0ZXJhdG9yLT5zZWNvbmQpOworICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxJbmplY3Rl
ZEJ1bmRsZVJhbmdlSGFuZGxlPihyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKIAogICAgIFJlZlB0
cjxJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlPiByYW5nZUhhbmRsZSA9IEluamVjdGVkQnVuZGxl
UmFuZ2VIYW5kbGU6OmNyZWF0ZShyYW5nZSk7Ci0gICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQg
PSByYW5nZUhhbmRsZS5nZXQoKTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gcmFuZ2VI
YW5kbGUuZ2V0KCk7CiAgICAgcmV0dXJuIHJhbmdlSGFuZGxlLnJlbGVhc2UoKTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Ob3RpZmljYXRpb25zL1dlYk5vdGlm
aWNhdGlvbk1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Ob3RpZmljYXRp
b25zL1dlYk5vdGlmaWNhdGlvbk1hbmFnZXIuY3BwCmluZGV4IGUxMGNhY2IwYTYxYzM0MDJmOTYy
ZWFlYjVhZjY1Y2YxODIxYjZlOWEuLjc4MjBjYzQ0N2JhNDE5Njg0YTJjMDRiNjg2YzA0NzE4N2M4
ZGM0MzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTm90aWZpY2F0aW9u
cy9XZWJOb3RpZmljYXRpb25NYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL05vdGlmaWNhdGlvbnMvV2ViTm90aWZpY2F0aW9uTWFuYWdlci5jcHAKQEAgLTk5LDcgKzk5
LDcgQEAgTm90aWZpY2F0aW9uQ2xpZW50OjpQZXJtaXNzaW9uIFdlYk5vdGlmaWNhdGlvbk1hbmFn
ZXI6OnBvbGljeUZvck9yaWdpbihXZWJDb3JlOjoKICAgICBBU1NFUlQoIW9yaWdpbi0+aXNVbmlx
dWUoKSk7CiAgICAgSGFzaE1hcDxTdHJpbmcsIGJvb2w+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1f
cGVybWlzc2lvbnNNYXAuZmluZChvcmlnaW4tPnRvUmF3U3RyaW5nKCkpOwogICAgIGlmIChpdCAh
PSBtX3Blcm1pc3Npb25zTWFwLmVuZCgpKQotICAgICAgICByZXR1cm4gaXQtPnNlY29uZCA/IE5v
dGlmaWNhdGlvbkNsaWVudDo6UGVybWlzc2lvbkFsbG93ZWQgOiBOb3RpZmljYXRpb25DbGllbnQ6
OlBlcm1pc3Npb25EZW5pZWQ7CisgICAgICAgIHJldHVybiBpdC0+dmFsdWUgPyBOb3RpZmljYXRp
b25DbGllbnQ6OlBlcm1pc3Npb25BbGxvd2VkIDogTm90aWZpY2F0aW9uQ2xpZW50OjpQZXJtaXNz
aW9uRGVuaWVkOwogI2VuZGlmCiAgICAgCiAgICAgcmV0dXJuIE5vdGlmaWNhdGlvbkNsaWVudDo6
UGVybWlzc2lvbk5vdEFsbG93ZWQ7CkBAIC0xMTYsNyArMTE2LDcgQEAgYm9vbCBXZWJOb3RpZmlj
YXRpb25NYW5hZ2VyOjpzaG93KE5vdGlmaWNhdGlvbiogbm90aWZpY2F0aW9uLCBXZWJQYWdlKiBw
YWdlKQogICAgIG1fbm90aWZpY2F0aW9uSURNYXAuc2V0KG5vdGlmaWNhdGlvbklELCBub3RpZmlj
YXRpb24pOwogICAgIAogICAgIE5vdGlmaWNhdGlvbkNvbnRleHRNYXA6Oml0ZXJhdG9yIGl0ID0g
bV9ub3RpZmljYXRpb25Db250ZXh0TWFwLmFkZChub3RpZmljYXRpb24tPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKSwgVmVjdG9yPHVpbnQ2NF90PigpKS5pdGVyYXRvcjsKLSAgICBpdC0+c2Vjb25k
LmFwcGVuZChub3RpZmljYXRpb25JRCk7CisgICAgaXQtPnZhbHVlLmFwcGVuZChub3RpZmljYXRp
b25JRCk7CiAgICAgCiAgICAgbV9wcm9jZXNzLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6
OldlYlBhZ2VQcm94eTo6U2hvd05vdGlmaWNhdGlvbihub3RpZmljYXRpb24tPnRpdGxlKCksIG5v
dGlmaWNhdGlvbi0+Ym9keSgpLCBub3RpZmljYXRpb24tPmljb25VUkwoKS5zdHJpbmcoKSwgbm90
aWZpY2F0aW9uLT5yZXBsYWNlSWQoKSwgbm90aWZpY2F0aW9uLT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCktPnNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCksIG5vdGlmaWNhdGlvbklEKSwgcGFn
ZS0+cGFnZUlEKCkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMTQ2LDcgKzE0Niw3IEBAIHZvaWQg
V2ViTm90aWZpY2F0aW9uTWFuYWdlcjo6Y2xlYXJOb3RpZmljYXRpb25zKFdlYkNvcmU6OlNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqCiAgICAgaWYgKGl0ID09IG1fbm90aWZpY2F0aW9uQ29udGV4dE1h
cC5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIFZlY3Rvcjx1aW50NjRfdD4mIG5v
dGlmaWNhdGlvbklEcyA9IGl0LT5zZWNvbmQ7CisgICAgVmVjdG9yPHVpbnQ2NF90PiYgbm90aWZp
Y2F0aW9uSURzID0gaXQtPnZhbHVlOwogICAgIG1fcHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5zZW5k
KE1lc3NhZ2VzOjpXZWJOb3RpZmljYXRpb25NYW5hZ2VyUHJveHk6OkNsZWFyTm90aWZpY2F0aW9u
cyhub3RpZmljYXRpb25JRHMpLCBwYWdlLT5wYWdlSUQoKSk7CiAgICAgc2l6ZV90IGNvdW50ID0g
bm90aWZpY2F0aW9uSURzLnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50
OyArK2kpIHsKQEAgLTIyOSwxMCArMjI5LDEwIEBAIHZvaWQgV2ViTm90aWZpY2F0aW9uTWFuYWdl
cjo6cmVtb3ZlTm90aWZpY2F0aW9uRnJvbUNvbnRleHRNYXAodWludDY0X3Qgbm90aWZpY2F0CiAg
ICAgLy8gVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiBmb3IgbWFuYWdpbmcgdGhlIGhhc2ggbWFw
cy4KICAgICBOb3RpZmljYXRpb25Db250ZXh0TWFwOjppdGVyYXRvciBpdCA9IG1fbm90aWZpY2F0
aW9uQ29udGV4dE1hcC5maW5kKG5vdGlmaWNhdGlvbi0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
KTsKICAgICBBU1NFUlQoaXQgIT0gbV9ub3RpZmljYXRpb25Db250ZXh0TWFwLmVuZCgpKTsKLSAg
ICBzaXplX3QgaW5kZXggPSBpdC0+c2Vjb25kLmZpbmQobm90aWZpY2F0aW9uSUQpOworICAgIHNp
emVfdCBpbmRleCA9IGl0LT52YWx1ZS5maW5kKG5vdGlmaWNhdGlvbklEKTsKICAgICBBU1NFUlQo
aW5kZXggIT0gbm90Rm91bmQpOwotICAgIGl0LT5zZWNvbmQucmVtb3ZlKGluZGV4KTsKLSAgICBp
ZiAoaXQtPnNlY29uZC5pc0VtcHR5KCkpCisgICAgaXQtPnZhbHVlLnJlbW92ZShpbmRleCk7Cisg
ICAgaWYgKGl0LT52YWx1ZS5pc0VtcHR5KCkpCiAgICAgICAgIG1fbm90aWZpY2F0aW9uQ29udGV4
dE1hcC5yZW1vdmUoaXQpOwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0TWFwLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAu
Y3BwCmluZGV4IDFiZjk0Y2I0ZmI3OTI2YjRhZTRmNGUwMGZjN2JkYmZlODg3OTE4YmUuLjVjOWRh
YzdlYjEyYzU2MzY1ZDRiMmYxZjAxYjk4YjlhZDc3MmJiY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRp
bWVPYmplY3RNYXAuY3BwCkBAIC0yMTEsNyArMjExLDcgQEAgdm9pZCBOUFJ1bnRpbWVPYmplY3RN
YXA6OmludmFsaWRhdGUoKQogICAgIFZlY3RvcjxOUE9iamVjdCo+IG9iamVjdHM7CiAKICAgICBm
b3IgKEhhc2hNYXA8TlBPYmplY3QqLCBKU0M6OldlYWs8SlNOUE9iamVjdD4gPjo6aXRlcmF0b3Ig
cHRyID0gbV9qc05QT2JqZWN0cy5iZWdpbigpLCBlbmQgPSBtX2pzTlBPYmplY3RzLmVuZCgpOyBw
dHIgIT0gZW5kOyArK3B0cikKLSAgICAgICAgb2JqZWN0cy5hcHBlbmQocHRyLT5zZWNvbmQtPmxl
YWtOUE9iamVjdCgpKTsKKyAgICAgICAgb2JqZWN0cy5hcHBlbmQocHRyLT52YWx1ZS0+bGVha05Q
T2JqZWN0KCkpOwogCiAgICAgbV9qc05QT2JqZWN0cy5jbGVhcigpOwogCkBAIC0yOTQsNyArMjk0
LDcgQEAgdm9pZCBOUFJ1bnRpbWVPYmplY3RNYXA6OmZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6
VW5rbm93bj4gaGFuZGxlLCB2b2lkKiBjb250ZXgKIAogICAgIEhhc2hNYXA8TlBPYmplY3QqLCBK
U0M6OldlYWs8SlNOUE9iamVjdD4gPjo6aXRlcmF0b3IgZm91bmQgPSBtX2pzTlBPYmplY3RzLmZp
bmQoc3RhdGljX2Nhc3Q8TlBPYmplY3QqPihjb250ZXh0KSk7CiAgICAgQVNTRVJUKGZvdW5kICE9
IG1fanNOUE9iamVjdHMuZW5kKCkpOwotICAgIEFTU0VSVChmb3VuZC0+c2Vjb25kLndhcyhvYmpl
Y3QpKTsKKyAgICBBU1NFUlQoZm91bmQtPnZhbHVlLndhcyhvYmplY3QpKTsKICAgICBtX2pzTlBP
YmplY3RzLnJlbW92ZShmb3VuZCk7CiAKICAgICBhZGRUb0ludmFsaWRhdGlvblF1ZXVlKG9iamVj
dC0+bGVha05QT2JqZWN0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbi5jcHAKaW5kZXggZGI2ZDhk
ODZlM2ZhZjE0MmI5NGYxOWFmNTk2ZTBhMzM2MjdlNTUxOC4uMjUxMTgwZWY5ZDFjYTRiMDNjMDY2
MTEyNTViOWI3Mjg3N2M4ZGQxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW4uY3BwCkBAIC0xOTMs
OCArMTkzLDggQEAgTlBFcnJvciBOZXRzY2FwZVBsdWdpbjo6ZGVzdHJveVN0cmVhbShOUFN0cmVh
bSogc3RyZWFtLCBOUFJlYXNvbiByZWFzb24pCiAgICAgTmV0c2NhcGVQbHVnaW5TdHJlYW0qIHBs
dWdpblN0cmVhbSA9IDA7CiAKICAgICBmb3IgKFN0cmVhbXNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV9zdHJlYW1zLmJlZ2luKCksIGVuZCA9IG1fc3RyZWFtcy5lbmQoKTsgaXQgIT0gZW5kOyAr
K2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kLT5ucFN0cmVhbSgpID09IHN0cmVhbSkgewot
ICAgICAgICAgICAgcGx1Z2luU3RyZWFtID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgaWYg
KGl0LT52YWx1ZS0+bnBTdHJlYW0oKSA9PSBzdHJlYW0pIHsKKyAgICAgICAgICAgIHBsdWdpblN0
cmVhbSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgfQpAQCAtMzgxLDcgKzM4MSw3IEBAIHZvaWQgTmV0c2NhcGVQbHVnaW46OnVuc2NoZWR1bGVU
aW1lcih1bnNpZ25lZCB0aW1lcklEKQogICAgIGlmIChpdCA9PSBtX3RpbWVycy5lbmQoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgT3duUHRyPFRpbWVyPiB0aW1lciA9IGFkb3B0UHRyKGl0LT5z
ZWNvbmQpOworICAgIE93blB0cjxUaW1lcj4gdGltZXIgPSBhZG9wdFB0cihpdC0+dmFsdWUpOwog
ICAgIG1fdGltZXJzLnJlbW92ZShpdCk7CiAKICAgICB0aW1lci0+c3RvcCgpOwpAQCAtNzE4LDgg
KzcxOCw4IEBAIHZvaWQgTmV0c2NhcGVQbHVnaW46OmZyYW1lRGlkRmluaXNoTG9hZGluZyh1aW50
NjRfdCByZXF1ZXN0SUQpCiAgICAgaWYgKGl0ID09IG1fcGVuZGluZ1VSTE5vdGlmaWNhdGlvbnMu
ZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFN0cmluZyB1cmwgPSBpdC0+c2Vjb25kLmZp
cnN0OwotICAgIHZvaWQqIG5vdGlmaWNhdGlvbkRhdGEgPSBpdC0+c2Vjb25kLnNlY29uZDsKKyAg
ICBTdHJpbmcgdXJsID0gaXQtPnZhbHVlLmZpcnN0OworICAgIHZvaWQqIG5vdGlmaWNhdGlvbkRh
dGEgPSBpdC0+dmFsdWUuc2Vjb25kOwogCiAgICAgbV9wZW5kaW5nVVJMTm90aWZpY2F0aW9ucy5y
ZW1vdmUoaXQpOwogICAgIApAQCAtNzM0LDggKzczNCw4IEBAIHZvaWQgTmV0c2NhcGVQbHVnaW46
OmZyYW1lRGlkRmFpbCh1aW50NjRfdCByZXF1ZXN0SUQsIGJvb2wgd2FzQ2FuY2VsbGVkKQogICAg
IGlmIChpdCA9PSBtX3BlbmRpbmdVUkxOb3RpZmljYXRpb25zLmVuZCgpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBTdHJpbmcgdXJsID0gaXQtPnNlY29uZC5maXJzdDsKLSAgICB2b2lkKiBub3Rp
ZmljYXRpb25EYXRhID0gaXQtPnNlY29uZC5zZWNvbmQ7CisgICAgU3RyaW5nIHVybCA9IGl0LT52
YWx1ZS5maXJzdDsKKyAgICB2b2lkKiBub3RpZmljYXRpb25EYXRhID0gaXQtPnZhbHVlLnNlY29u
ZDsKIAogICAgIG1fcGVuZGluZ1VSTE5vdGlmaWNhdGlvbnMucmVtb3ZlKGl0KTsKICAgICAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAppbmRl
eCA1M2ZjZTg0Mjk5ZTc4ZDQ2NzQ0NzQwMjhlMmQwZWI3OThhNjA4ODUxLi41N2I4OTA3YzBjOTY3
ZjQxZWQ4OTEyMTRiMWJmNGM0MjI0MDRhZjIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCkBAIC0xNzAsOSArMTcwLDkgQEAgc3RhdGlj
IFN0cmluZyBidWlsZEhUVFBIZWFkZXJzKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNl
LCBsb25nIGxvbmcmIGV4cGUKICAgICAKICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRv
ciBlbmQgPSByZXNwb25zZS5odHRwSGVhZGVyRmllbGRzKCkuZW5kKCk7CiAgICAgZm9yIChIVFRQ
SGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMo
KS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQoaXQtPmZpcnN0LmNoYXJhY3RlcnMoKSwgaXQtPmZpcnN0Lmxlbmd0aCgpKTsKKyAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPmtleS5jaGFyYWN0ZXJzKCksIGl0LT5rZXkubGVuZ3Ro
KCkpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChzZXBhcmF0b3IuY2hhcmFjdGVycygp
LCBzZXBhcmF0b3IubGVuZ3RoKCkpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+
c2Vjb25kLmNoYXJhY3RlcnMoKSwgaXQtPnNlY29uZC5sZW5ndGgoKSk7CisgICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKGl0LT52YWx1ZS5jaGFyYWN0ZXJzKCksIGl0LT52YWx1ZS5sZW5ndGgo
KSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwogICAgIH0KICAgICAKQEAg
LTI4Miw3ICsyODIsNyBAQCBQbHVnaW5WaWV3Ojp+UGx1Z2luVmlldygpCiAKICAgICAvLyBDYW5j
ZWwgYWxsIHBlbmRpbmcgZnJhbWUgbG9hZHMuCiAgICAgZm9yIChGcmFtZUxvYWRNYXA6Oml0ZXJh
dG9yIGl0ID0gbV9wZW5kaW5nRnJhbWVMb2Fkcy5iZWdpbigpLCBlbmQgPSBtX3BlbmRpbmdGcmFt
ZUxvYWRzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5maXJzdC0+c2V0TG9h
ZExpc3RlbmVyKDApOworICAgICAgICBpdC0+a2V5LT5zZXRMb2FkTGlzdGVuZXIoMCk7CiAKICAg
ICBpZiAobV9wbHVnaW4gJiYgbV9pc0luaXRpYWxpemVkKSB7CiAgICAgICAgIG1faXNCZWluZ0Rl
c3Ryb3llZCA9IHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmNwcAppbmRleCA4MDUyYTAyNjE2
Nzk4MTE2MWYzMDJkOWU5N2ExMGRmZGE1ZjI4ZGU3Li4zMjk1ZDczZmY4NTFiMDI5ZTIzODgwNjVj
ZmM1OGE2NmZjNmQxYWMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5jcHAKQEAgLTUyLDcgKzUy
LDcgQEAgV2ViR3JhcGhpY3NMYXllciogV2ViR3JhcGhpY3NMYXllcjo6bGF5ZXJCeUlEKFdlYktp
dDo6V2ViTGF5ZXJJRCBpZCkKICAgICBIYXNoTWFwPFdlYkxheWVySUQsIFdlYkdyYXBoaWNzTGF5
ZXIqPjo6aXRlcmF0b3IgaXQgPSB0YWJsZS5maW5kKGlkKTsKICAgICBpZiAoaXQgPT0gdGFibGUu
ZW5kKCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgIHJl
dHVybiBpdC0+dmFsdWU7CiB9CiAKIHN0YXRpYyBXZWJMYXllcklEIHRvV2ViTGF5ZXJJRChHcmFw
aGljc0xheWVyKiBsYXllcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJCYWNrRm9yd2FyZExpc3RQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViQmFja0ZvcndhcmRMaXN0UHJveHkuY3BwCmluZGV4IDRjYTRlNWZk
YjcyY2ZjZWFjNjk1NDVkZDE3ZDlmN2EyY2M4NDY4MzguLmJlODJhMTk3YTczNmQ2MjMyYTU0Mzdk
YTljMjkwMmViMDVjYTNhMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJCYWNrRm9yd2FyZExpc3RQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFByb3h5LmNwcApAQCAtMTMwLDkg
KzEzMCw5IEBAIHZvaWQgV2ViQmFja0ZvcndhcmRMaXN0UHJveHk6OnJlbW92ZUl0ZW0odWludDY0
X3QgaXRlbUlEKQogICAgIGlmIChpdCA9PSBpZFRvSGlzdG9yeUl0ZW1NYXAoKS5lbmQoKSkKICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICBXZWJDb3JlOjpwYWdlQ2FjaGUoKS0+cmVtb3Zl
KGl0LT5zZWNvbmQuZ2V0KCkpOworICAgIFdlYkNvcmU6OnBhZ2VDYWNoZSgpLT5yZW1vdmUoaXQt
PnZhbHVlLmdldCgpKTsKIAotICAgIGhpc3RvcnlJdGVtVG9JRE1hcCgpLnJlbW92ZShpdC0+c2Vj
b25kKTsKKyAgICBoaXN0b3J5SXRlbVRvSURNYXAoKS5yZW1vdmUoaXQtPnZhbHVlKTsKICAgICBp
ZFRvSGlzdG9yeUl0ZW1NYXAoKS5yZW1vdmUoaXQpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0gYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KaW5kZXggYzZiYTAxMjU1
MDhlMDJkZTVmZmM4MDUxZWYwM2Y2NDM3MjIxNDVmNS4uNjgzOWM4NDk3Zjg0ZTBiOTMyMzM2NWM0
ZjUyNDA1Mzc4NDE4ZDI4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQpAQCAtMTIwLDcgKzEyMCw3IEBAIHN0YXRpYyBTdHJp
bmcgY29tbWFuZE5hbWVGb3JTZWxlY3Rvck5hbWUoY29uc3QgU3RyaW5nJiBzZWxlY3Rvck5hbWUp
CiAgICAgc3RhdGljIGNvbnN0IFNlbGVjdG9yTmFtZU1hcCogZXhjZXB0aW9uTWFwID0gY3JlYXRl
U2VsZWN0b3JFeGNlcHRpb25NYXAoKTsKICAgICBTZWxlY3Rvck5hbWVNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gZXhjZXB0aW9uTWFwLT5maW5kKHNlbGVjdG9yTmFtZSk7CiAgICAgaWYgKGl0ICE9
IGV4Y2VwdGlvbk1hcC0+ZW5kKCkpCi0gICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgICAg
ICByZXR1cm4gaXQtPnZhbHVlOwogCiAgICAgLy8gUmVtb3ZlIHRoZSB0cmFpbGluZyBjb2xvbi4K
ICAgICAvLyBObyBuZWVkIHRvIGNhcGl0YWxpemUgdGhlIGNvbW1hbmQgbmFtZSBzaW5jZSBFZGl0
b3IgY29tbWFuZCBuYW1lcyBhcmUgbm90IGNhc2Ugc2Vuc2l0aXZlLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmNwcApp
bmRleCA5YmMwMjU2M2YxMTU4NmMxZjYxM2VkYjFiMDdkMDg1Mjk4MDMzNDEwLi5mZDFlNDJhM2Rm
YzMxZjcyODQwYmFhMTQ3ZDMyMzM4NTVmNGYzYjBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmNwcApAQCAtMzg0
LDcgKzM4NCw3IEBAIGludDY0X3QgTGF5ZXJUcmVlSG9zdFF0OjphZG9wdEltYWdlQmFja2luZ1N0
b3JlKEltYWdlKiBpbWFnZSkKICAgICBIYXNoTWFwPGludDY0X3QsIGludD46Oml0ZXJhdG9yIGl0
ID0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5maW5kKGtleSk7CiAKICAgICBp
ZiAoaXQgIT0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5lbmQoKSkgewotICAg
ICAgICArKyhpdC0+c2Vjb25kKTsKKyAgICAgICAgKysoaXQtPnZhbHVlKTsKICAgICAgICAgcmV0
dXJuIGtleTsKICAgICB9CiAKQEAgLTQwOSw5ICs0MDksOSBAQCB2b2lkIExheWVyVHJlZUhvc3RR
dDo6cmVsZWFzZUltYWdlQmFja2luZ1N0b3JlKGludDY0X3Qga2V5KQogICAgIGlmIChpdCA9PSBt
X2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLmVuZCgpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBpdC0+c2Vjb25kLS07CisgICAgaXQtPnZhbHVlLS07CiAKLSAgICBpZiAoaXQtPnNl
Y29uZCkKKyAgICBpZiAoaXQtPnZhbHVlKQogICAgICAgICByZXR1cm47CiAKICAgICBtX2RpcmVj
dGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLnJlbW92ZShpdCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAppbmRleCAwOTBmMGZjYjg0NTdhNjc1ODVjODRhZjJjOGE2
ZjhiNmI5NTZjZmVlLi5jNDFmZWUzM2I0ZWU3ZGRiODQ4NTdlYTcyNGUzYzg5Yzk5OWE5OGIyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKQEAgLTMxNyw3ICszMTcs
NyBAQCB2b2lkIFdlYlByb2Nlc3M6OnZpc2l0ZWRMaW5rU3RhdGVDaGFuZ2VkKGNvbnN0IFZlY3Rv
cjxXZWJDb3JlOjpMaW5rSGFzaD4mIGxpbmtIYQogICAgICAgICBIYXNoTWFwPHVpbnQ2NF90LCBS
ZWZQdHI8V2ViUGFnZUdyb3VwUHJveHk+ID46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wYWdlR3Jv
dXBNYXAuYmVnaW4oKTsKICAgICAgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPFdlYlBhZ2VH
cm91cFByb3h5PiA+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BhZ2VHcm91cE1hcC5lbmQoKTsK
ICAgICAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIFBhZ2U6OnZpc2l0
ZWRTdGF0ZUNoYW5nZWQoUGFnZUdyb3VwOjpwYWdlR3JvdXAoaXQtPnNlY29uZC0+aWRlbnRpZmll
cigpKSwgbGlua0hhc2hlc1tpXSk7CisgICAgICAgICAgICBQYWdlOjp2aXNpdGVkU3RhdGVDaGFu
Z2VkKFBhZ2VHcm91cDo6cGFnZUdyb3VwKGl0LT52YWx1ZS0+aWRlbnRpZmllcigpKSwgbGlua0hh
c2hlc1tpXSk7CiAgICAgfQogCiAgICAgcGFnZUNhY2hlKCktPm1hcmtQYWdlc0ZvclZpc3RlZExp
bmtTdHlsZVJlY2FsYygpOwpAQCAtMzI5LDcgKzMyOSw3IEBAIHZvaWQgV2ViUHJvY2Vzczo6YWxs
VmlzaXRlZExpbmtTdGF0ZUNoYW5nZWQoKQogICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxX
ZWJQYWdlR3JvdXBQcm94eT4gPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BhZ2VHcm91cE1hcC5i
ZWdpbigpOwogICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxXZWJQYWdlR3JvdXBQcm94eT4g
Pjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wYWdlR3JvdXBNYXAuZW5kKCk7CiAgICAgZm9yICg7
IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgUGFnZTo6YWxsVmlzaXRlZFN0YXRlQ2hhbmdlZChQ
YWdlR3JvdXA6OnBhZ2VHcm91cChpdC0+c2Vjb25kLT5pZGVudGlmaWVyKCkpKTsKKyAgICAgICAg
UGFnZTo6YWxsVmlzaXRlZFN0YXRlQ2hhbmdlZChQYWdlR3JvdXA6OnBhZ2VHcm91cChpdC0+dmFs
dWUtPmlkZW50aWZpZXIoKSkpOwogCiAgICAgcGFnZUNhY2hlKCktPm1hcmtQYWdlc0ZvclZpc3Rl
ZExpbmtTdHlsZVJlY2FsYygpOwogfQpAQCAtNTA1LDcgKzUwNSw3IEBAIFdlYlBhZ2UqIFdlYlBy
b2Nlc3M6OmZvY3VzZWRXZWJQYWdlKCkgY29uc3QKIHsgICAgCiAgICAgSGFzaE1hcDx1aW50NjRf
dCwgUmVmUHRyPFdlYlBhZ2U+ID46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGFnZU1hcC5lbmQo
KTsKICAgICBmb3IgKEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxXZWJQYWdlPiA+Ojpjb25zdF9p
dGVyYXRvciBpdCA9IG1fcGFnZU1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgV2ViUGFnZSogcGFnZSA9ICgqaXQpLnNlY29uZC5nZXQoKTsKKyAgICAgICAgV2ViUGFnZSog
cGFnZSA9ICgqaXQpLnZhbHVlLmdldCgpOwogICAgICAgICBpZiAocGFnZS0+d2luZG93QW5kV2Vi
UGFnZUFyZUZvY3VzZWQoKSkKICAgICAgICAgICAgIHJldHVybiBwYWdlOwogICAgIH0KQEAgLTUy
MywxNCArNTIzLDE0IEBAIHZvaWQgV2ViUHJvY2Vzczo6Y3JlYXRlV2ViUGFnZSh1aW50NjRfdCBw
YWdlSUQsIGNvbnN0IFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMmCiAgICAgLy8gbGluaykgdGhl
IFdlYlBhZ2UgZ2V0cyBjcmVhdGVkIGJvdGggaW4gdGhlIHN5bmNocm9ub3VzIGhhbmRsZXIgYW5k
IHRocm91Z2ggdGhlIG5vcm1hbCB3YXkuIAogICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxX
ZWJQYWdlPiA+OjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9wYWdlTWFwLmFkZChwYWdlSUQsIDApOwog
ICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICBBU1NFUlQoIXJlc3VsdC5pdGVy
YXRvci0+c2Vjb25kKTsKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBXZWJQYWdl
OjpjcmVhdGUocGFnZUlELCBwYXJhbWV0ZXJzKTsKKyAgICAgICAgQVNTRVJUKCFyZXN1bHQuaXRl
cmF0b3ItPnZhbHVlKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IFdlYlBhZ2U6
OmNyZWF0ZShwYWdlSUQsIHBhcmFtZXRlcnMpOwogCiAgICAgICAgIC8vIEJhbGFuY2VkIGJ5IGFu
IGVuYWJsZVRlcm1pbmF0aW9uIGluIHJlbW92ZVdlYlBhZ2UuCiAgICAgICAgIGRpc2FibGVUZXJt
aW5hdGlvbigpOwogICAgIH0KIAotICAgIEFTU0VSVChyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7
CisgICAgQVNTRVJUKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwogfQogCiB2b2lkIFdlYlByb2Nl
c3M6OnJlbW92ZVdlYlBhZ2UodWludDY0X3QgcGFnZUlEKQpAQCAtNzQ0LDExICs3NDQsMTEgQEAg
V2ViUGFnZUdyb3VwUHJveHkqIFdlYlByb2Nlc3M6OndlYlBhZ2VHcm91cChjb25zdCBXZWJQYWdl
R3JvdXBEYXRhJiBwYWdlR3JvdXBEYXQKIHsKICAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8
V2ViUGFnZUdyb3VwUHJveHk+ID46OkFkZFJlc3VsdCByZXN1bHQgPSBtX3BhZ2VHcm91cE1hcC5h
ZGQocGFnZUdyb3VwRGF0YS5wYWdlR3JvdXBJRCwgMCk7CiAgICAgaWYgKHJlc3VsdC5pc05ld0Vu
dHJ5KSB7Ci0gICAgICAgIEFTU0VSVCghcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOwotICAgICAg
ICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IFdlYlBhZ2VHcm91cFByb3h5OjpjcmVhdGUocGFn
ZUdyb3VwRGF0YSk7CisgICAgICAgIEFTU0VSVCghcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7Cisg
ICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBXZWJQYWdlR3JvdXBQcm94eTo6Y3JlYXRl
KHBhZ2VHcm91cERhdGEpOwogICAgIH0KIAotICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnNl
Y29uZC5nZXQoKTsKKyAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKIH0K
IAogc3RhdGljIGJvb2wgY2FuUGx1Z2luSGFuZGxlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNw
b25zZSYgcmVzcG9uc2UpCkBAIC04NDIsNyArODQyLDcgQEAgc3RhdGljIHZvaWQgZnJvbUNvdW50
ZWRTZXRUb0hhc2hNYXAoVHlwZUNvdW50U2V0KiBjb3VudGVkU2V0LCBIYXNoTWFwPFN0cmluZywg
dWkKIHsKICAgICBUeXBlQ291bnRTZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGNvdW50ZWRTZXQt
PmVuZCgpOwogICAgIGZvciAoVHlwZUNvdW50U2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IGNvdW50
ZWRTZXQtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgbWFwLnNldChpdC0+Zmly
c3QsIGl0LT5zZWNvbmQpOworICAgICAgICBtYXAuc2V0KGl0LT5rZXksIGl0LT52YWx1ZSk7CiB9
CiAKIHN0YXRpYyB2b2lkIGdldFdlYkNvcmVNZW1vcnlDYWNoZVN0YXRpc3RpY3MoVmVjdG9yPEhh
c2hNYXA8U3RyaW5nLCB1aW50NjRfdD4gPiYgcmVzdWx0KQpAQCAtMTAxMiw3ICsxMDEyLDcgQEAg
dm9pZCBXZWJQcm9jZXNzOjpzZXRUZXh0Q2hlY2tlclN0YXRlKGNvbnN0IFRleHRDaGVja2VyU3Rh
dGUmIHRleHRDaGVja2VyU3RhdGUpCiAKICAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8V2Vi
UGFnZT4gPjo6aXRlcmF0b3IgZW5kID0gbV9wYWdlTWFwLmVuZCgpOwogICAgIGZvciAoSGFzaE1h
cDx1aW50NjRfdCwgUmVmUHRyPFdlYlBhZ2U+ID46Oml0ZXJhdG9yIGl0ID0gbV9wYWdlTWFwLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBXZWJQYWdlKiBwYWdlID0gKCppdCku
c2Vjb25kLmdldCgpOworICAgICAgICBXZWJQYWdlKiBwYWdlID0gKCppdCkudmFsdWUuZ2V0KCk7
CiAgICAgICAgIGlmIChjb250aW51b3VzU3BlbGxDaGVja2luZ1R1cm5lZE9mZikKICAgICAgICAg
ICAgIHBhZ2UtPnVubWFya0FsbE1pc3NwZWxsaW5ncygpOwogICAgICAgICBpZiAoZ3JhbW1hckNo
ZWNraW5nVHVybmVkT2ZmKQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hh
bmdlTG9nCmluZGV4IDc2MWZmZDFmZjI3ODA1MjJhNmJlNWI2MmI1NWJlMzY2N2IzMDM3OWUuLjk2
ZTliYzE4N2Q1ZmQ5OWVmYzE4YmUxOGU0M2RmODdmNjFlM2E5MGMgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzOCBAQAorMjAxMi0w
NC0yNSAgQ2FpbyBNYXJjZWxvIGRlIE9saXZlaXJhIEZpbGhvICA8Y2Fpby5vbGl2ZWlyYUBvcGVu
Ym9zc2Eub3JnPgorCisgICAgICAgIFJlbmFtZSBmaXJzdC9zZWNvbmQgdG8ga2V5L3ZhbHVlIGlu
IEhhc2hNYXAgaXRlcmF0b3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD04Mjc4NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vQ3BwQm91bmRDbGFzcy5jcHA6Cisg
ICAgICAgIChDcHBCb3VuZENsYXNzOjp+Q3BwQm91bmRDbGFzcyk6CisgICAgICAgIChDcHBCb3Vu
ZENsYXNzOjppbnZva2UpOgorICAgICAgICAoQ3BwQm91bmRDbGFzczo6Z2V0UHJvcGVydHkpOgor
ICAgICAgICAoQ3BwQm91bmRDbGFzczo6c2V0UHJvcGVydHkpOgorICAgICAgICAoQ3BwQm91bmRD
bGFzczo6YmluZENhbGxiYWNrKToKKyAgICAgICAgKENwcEJvdW5kQ2xhc3M6OmJpbmRQcm9wZXJ0
eSk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTW9ja1dlYlNwZWVjaElucHV0
Q29udHJvbGxlci5jcHA6CisgICAgICAgIChNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyOjph
ZGRNb2NrUmVjb2duaXRpb25SZXN1bHQpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL05vdGlmaWNhdGlvblByZXNlbnRlci5jcHA6CisgICAgICAgIChOb3RpZmljYXRpb25QcmVz
ZW50ZXI6OnNpbXVsYXRlQ2xpY2spOgorICAgICAgICAoTm90aWZpY2F0aW9uUHJlc2VudGVyOjpz
aG93KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5j
cHA6CisgICAgICAgIChhcHBseUZvbnRNYXApOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2No
cm9taXVtL1dlYlZpZXdIb3N0LmNwcDoKKyAgICAgICAgKFdlYlZpZXdIb3N0OjpwcmludFJlc291
cmNlRGVzY3JpcHRpb24pOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9BY2Nlc3NpYmls
aXR5Q29udHJvbGxlcldpbi5jcHA6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6
fkFjY2Vzc2liaWxpdHlDb250cm9sbGVyKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlDb250cm9s
bGVyOjp3aW5Ob3RpZmljYXRpb25SZWNlaXZlZCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUv
d2luL0xheW91dFRlc3RDb250cm9sbGVyV2luLmNwcDoKKyAgICAgICAgKHdvcmxkSURGb3JXb3Js
ZCk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xh
dGVkV29ybGQpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9SZXNvdXJjZUxvYWREZWxl
Z2F0ZS5jcHA6CisgICAgICAgIChSZXNvdXJjZUxvYWREZWxlZ2F0ZTo6ZGVzY3JpcHRpb25TdWl0
YWJsZUZvclRlc3RSZXN1bHQpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV1RSOjpMYXlvdXRUZXN0
Q29udHJvbGxlcjo6d29ybGRJREZvcldvcmxkKToKKyAgICAgICAgKFdUUjo6TGF5b3V0VGVzdENv
bnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKToKKwogMjAxMi0wNC0yNSAg
S3Jpc3TDs2YgS29zenR5w7MgIDxra3Jpc3RvZkBpbmYudS1zemVnZWQuaHU+CiAKICAgICAgICAg
W1F0XVtOUldUXSBSdW4gZWFjaCBEUlQgaW4gaXQncyBvd24geHZmYgpkaWZmIC0tZ2l0IGEvVG9v
bHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vQ3BwQm91bmRDbGFzcy5jcHAgYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9DcHBCb3VuZENsYXNzLmNwcAppbmRleCA5YjRhM2I2NDY0NWQw
NTdiNDE3MmUxYzdkZmEwN2M3YTYyZTc3Y2Y4Li4xYjI5ZDJiMGY1NWQwMWY3Mzg3MTQ1Nzg3N2Y5
ZGJkZjA2ZjFiNDkxIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9D
cHBCb3VuZENsYXNzLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9DcHBC
b3VuZENsYXNzLmNwcApAQCAtMjAzLDEwICsyMDMsMTAgQEAgYm9vbCBDcHBOUE9iamVjdDo6c2V0
UHJvcGVydHkoTlBPYmplY3QqIG5wT2JqLCBOUElkZW50aWZpZXIgaWRlbnQsIGNvbnN0IE5QVmFy
aWEKIENwcEJvdW5kQ2xhc3M6On5DcHBCb3VuZENsYXNzKCkKIHsKICAgICBmb3IgKE1ldGhvZExp
c3Q6Oml0ZXJhdG9yIGkgPSBtX21ldGhvZHMuYmVnaW4oKTsgaSAhPSBtX21ldGhvZHMuZW5kKCk7
ICsraSkKLSAgICAgICAgZGVsZXRlIGktPnNlY29uZDsKKyAgICAgICAgZGVsZXRlIGktPnZhbHVl
OwogCiAgICAgZm9yIChQcm9wZXJ0eUxpc3Q6Oml0ZXJhdG9yIGkgPSBtX3Byb3BlcnRpZXMuYmVn
aW4oKTsgaSAhPSBtX3Byb3BlcnRpZXMuZW5kKCk7ICsraSkKLSAgICAgICAgZGVsZXRlIGktPnNl
Y29uZDsKKyAgICAgICAgZGVsZXRlIGktPnZhbHVlOwogCiAgICAgLy8gVW5yZWdpc3RlciBvdXJz
ZWx2ZXMgaWYgd2Ugd2VyZSBib3VuZCB0byBhIGZyYW1lLgogICAgIGlmIChtX2JvdW5kVG9GcmFt
ZSkKQEAgLTIzNyw3ICsyMzcsNyBAQCBib29sIENwcEJvdW5kQ2xhc3M6Omludm9rZShOUElkZW50
aWZpZXIgaWRlbnQsCiAgICAgICAgIH0KICAgICAgICAgY2FsbGJhY2sgPSBtX2ZhbGxiYWNrQ2Fs
bGJhY2suZ2V0KCk7CiAgICAgfSBlbHNlCi0gICAgICAgIGNhbGxiYWNrID0gKCptZXRob2QpLnNl
Y29uZDsKKyAgICAgICAgY2FsbGJhY2sgPSAoKm1ldGhvZCkudmFsdWU7CiAKICAgICAvLyBCdWls
ZCBhIENwcEFyZ3VtZW50TGlzdCBhcmd1bWVudCB2ZWN0b3IgZnJvbSB0aGUgTlBWYXJpYW50cyBj
b21pbmcgaW4uCiAgICAgQ3BwQXJndW1lbnRMaXN0IGNwcEFyZ3VtZW50cyhhcmd1bWVudENvdW50
KTsKQEAgLTI2MCw3ICsyNjAsNyBAQCBib29sIENwcEJvdW5kQ2xhc3M6OmdldFByb3BlcnR5KE5Q
SWRlbnRpZmllciBpZGVudCwgTlBWYXJpYW50KiByZXN1bHQpIGNvbnN0CiAgICAgfQogCiAgICAg
Q3BwVmFyaWFudCBjcHBWYWx1ZTsKLSAgICBpZiAoIWNhbGxiYWNrLT5zZWNvbmQtPmdldFZhbHVl
KCZjcHBWYWx1ZSkpCisgICAgaWYgKCFjYWxsYmFjay0+dmFsdWUtPmdldFZhbHVlKCZjcHBWYWx1
ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBjcHBWYWx1ZS5jb3B5VG9OUFZhcmlhbnQo
cmVzdWx0KTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI3NCw3ICsyNzQsNyBAQCBib29sIENwcEJv
dW5kQ2xhc3M6OnNldFByb3BlcnR5KE5QSWRlbnRpZmllciBpZGVudCwgY29uc3QgTlBWYXJpYW50
KiB2YWx1ZSkKIAogICAgIENwcFZhcmlhbnQgY3BwVmFsdWU7CiAgICAgY3BwVmFsdWUuc2V0KCp2
YWx1ZSk7Ci0gICAgcmV0dXJuICgqY2FsbGJhY2spLnNlY29uZC0+c2V0VmFsdWUoY3BwVmFsdWUp
OworICAgIHJldHVybiAoKmNhbGxiYWNrKS52YWx1ZS0+c2V0VmFsdWUoY3BwVmFsdWUpOwogfQog
CiB2b2lkIENwcEJvdW5kQ2xhc3M6OmJpbmRDYWxsYmFjayhjb25zdCBzdHJpbmcmIG5hbWUsIENh
bGxiYWNrKiBjYWxsYmFjaykKQEAgLTI4Miw3ICsyODIsNyBAQCB2b2lkIENwcEJvdW5kQ2xhc3M6
OmJpbmRDYWxsYmFjayhjb25zdCBzdHJpbmcmIG5hbWUsIENhbGxiYWNrKiBjYWxsYmFjaykKICAg
ICBOUElkZW50aWZpZXIgaWRlbnQgPSBXZWJCaW5kaW5nczo6Z2V0U3RyaW5nSWRlbnRpZmllcihu
YW1lLmNfc3RyKCkpOwogICAgIE1ldGhvZExpc3Q6Oml0ZXJhdG9yIG9sZENhbGxiYWNrID0gbV9t
ZXRob2RzLmZpbmQoaWRlbnQpOwogICAgIGlmIChvbGRDYWxsYmFjayAhPSBtX21ldGhvZHMuZW5k
KCkpIHsKLSAgICAgICAgZGVsZXRlIG9sZENhbGxiYWNrLT5zZWNvbmQ7CisgICAgICAgIGRlbGV0
ZSBvbGRDYWxsYmFjay0+dmFsdWU7CiAgICAgICAgIGlmICghY2FsbGJhY2spIHsKICAgICAgICAg
ICAgIG1fbWV0aG9kcy5yZW1vdmUob2xkQ2FsbGJhY2spOwogICAgICAgICAgICAgcmV0dXJuOwpA
QCAtMzA5LDcgKzMwOSw3IEBAIHZvaWQgQ3BwQm91bmRDbGFzczo6YmluZFByb3BlcnR5KGNvbnN0
IHN0cmluZyYgbmFtZSwgUHJvcGVydHlDYWxsYmFjayogY2FsbGJhY2spCiAgICAgTlBJZGVudGlm
aWVyIGlkZW50ID0gV2ViQmluZGluZ3M6OmdldFN0cmluZ0lkZW50aWZpZXIobmFtZS5jX3N0cigp
KTsKICAgICBQcm9wZXJ0eUxpc3Q6Oml0ZXJhdG9yIG9sZENhbGxiYWNrID0gbV9wcm9wZXJ0aWVz
LmZpbmQoaWRlbnQpOwogICAgIGlmIChvbGRDYWxsYmFjayAhPSBtX3Byb3BlcnRpZXMuZW5kKCkp
IHsKLSAgICAgICAgZGVsZXRlIG9sZENhbGxiYWNrLT5zZWNvbmQ7CisgICAgICAgIGRlbGV0ZSBv
bGRDYWxsYmFjay0+dmFsdWU7CiAgICAgICAgIGlmICghY2FsbGJhY2spIHsKICAgICAgICAgICAg
IG1fcHJvcGVydGllcy5yZW1vdmUob2xkQ2FsbGJhY2spOwogICAgICAgICAgICAgcmV0dXJuOwpk
aWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTW9ja1dlYlNwZWVjaElu
cHV0Q29udHJvbGxlci5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9Nb2NrV2Vi
U3BlZWNoSW5wdXRDb250cm9sbGVyLmNwcAppbmRleCBhNWZlM2VkYTY3YzdmZWNiNGVmZDhlYThl
N2MzY2ViY2U3NmI3ZTRiLi44ZmNjMDg0NTliYjQwOWEzZWNkNDVjZTVlZWY0YWZhZWVlZTE0OTRh
IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9Nb2NrV2ViU3BlZWNo
SW5wdXRDb250cm9sbGVyLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9N
b2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyLmNwcApAQCAtNTAsNyArNTAsNyBAQCB2b2lkIE1v
Y2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXI6OmFkZE1vY2tSZWNvZ25pdGlvblJlc3VsdChjb25z
dCBXZWJTdHJpbmcmIHJlcwogICAgICAgICBTdHJpbmcgbGFuZ1N0cmluZyA9IFN0cmluZzo6ZnJv
bVVURjgobGFuZ3VhZ2UudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIGlmICghbV9yZWNvZ25pdGlv
blJlc3VsdHMuY29udGFpbnMobGFuZ1N0cmluZykpCiAgICAgICAgICAgICBtX3JlY29nbml0aW9u
UmVzdWx0cy5zZXQobGFuZ1N0cmluZywgVmVjdG9yPFdlYlNwZWVjaElucHV0UmVzdWx0PigpKTsK
LSAgICAgICAgbV9yZWNvZ25pdGlvblJlc3VsdHMuZmluZChsYW5nU3RyaW5nKS0+c2Vjb25kLmFw
cGVuZChyZXMpOworICAgICAgICBtX3JlY29nbml0aW9uUmVzdWx0cy5maW5kKGxhbmdTdHJpbmcp
LT52YWx1ZS5hcHBlbmQocmVzKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL2Nocm9taXVtL05vdGlmaWNhdGlvblByZXNlbnRlci5jcHAgYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9Ob3RpZmljYXRpb25QcmVzZW50ZXIuY3BwCmluZGV4IDBjNTQw
MGY1ZTllOGY3MTcwZWNmNTk5YTgxYmQ0MjZmYmQ3NzI5MWQuLmEyMTU4OGY3NDRlNWMzZjVhYjcw
ZGJkYjAzYzI3NWM1MDcwOGYwM2EgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL05vdGlmaWNhdGlvblByZXNlbnRlci5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vTm90aWZpY2F0aW9uUHJlc2VudGVyLmNwcApAQCAtNzUsNyArNzUsNyBAQCBi
b29sIE5vdGlmaWNhdGlvblByZXNlbnRlcjo6c2ltdWxhdGVDbGljayhjb25zdCBXZWJTdHJpbmcm
IHRpdGxlKQogICAgIGlmIChtX2FjdGl2ZU5vdGlmaWNhdGlvbnMuZmluZChpZCkgPT0gbV9hY3Rp
dmVOb3RpZmljYXRpb25zLmVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAg
Y29uc3QgV2ViTm90aWZpY2F0aW9uJiBub3RpZmljYXRpb24gPSBtX2FjdGl2ZU5vdGlmaWNhdGlv
bnMuZmluZChpZCktPnNlY29uZDsKKyAgICBjb25zdCBXZWJOb3RpZmljYXRpb24mIG5vdGlmaWNh
dGlvbiA9IG1fYWN0aXZlTm90aWZpY2F0aW9ucy5maW5kKGlkKS0+dmFsdWU7CiAgICAgV2ViTm90
aWZpY2F0aW9uIGV2ZW50VGFyZ2V0KG5vdGlmaWNhdGlvbik7CiAgICAgZXZlbnRUYXJnZXQuZGlz
cGF0Y2hDbGlja0V2ZW50KCk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC04OSw3ICs4OSw3IEBAIGJv
b2wgTm90aWZpY2F0aW9uUHJlc2VudGVyOjpzaG93KGNvbnN0IFdlYk5vdGlmaWNhdGlvbiYgbm90
aWZpY2F0aW9uKQogICAgICAgICBXVEY6OlN0cmluZyByZXBsYWNlSWQobm90aWZpY2F0aW9uLnJl
cGxhY2VJZCgpLmRhdGEoKSwgbm90aWZpY2F0aW9uLnJlcGxhY2VJZCgpLmxlbmd0aCgpKTsKICAg
ICAgICAgaWYgKG1fcmVwbGFjZW1lbnRzLmZpbmQocmVwbGFjZUlkKSAhPSBtX3JlcGxhY2VtZW50
cy5lbmQoKSkKICAgICAgICAgICAgIHByaW50ZigiUkVQTEFDSU5HIE5PVElGSUNBVElPTiAlc1xu
IiwKLSAgICAgICAgICAgICAgICAgICBtX3JlcGxhY2VtZW50cy5maW5kKHJlcGxhY2VJZCktPnNl
Y29uZC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICBtX3JlcGxhY2VtZW50cy5m
aW5kKHJlcGxhY2VJZCktPnZhbHVlLnV0ZjgoKS5kYXRhKCkpOwogCiAgICAgICAgIG1fcmVwbGFj
ZW1lbnRzLnNldChyZXBsYWNlSWQsIFdURjo6U3RyaW5nKGlkZW50aWZpZXIuZGF0YSgpLCBpZGVu
dGlmaWVyLmxlbmd0aCgpKSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vV2ViUHJlZmVyZW5jZXMuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vV2ViUHJlZmVyZW5jZXMuY3BwCmluZGV4IGI0NmM3ZjY1MDlmMjRlYmY2YjM1ZmU5NTQ3
YzMzNDA3OTRjYjhlMWQuLjFjN2E3ZjZhNmU0MzJmNTcwNjUxZDI3Y2ZjMDlmMGM2NTRjODZiNmMg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZlcmVuY2Vz
LmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5j
cHAKQEAgLTE1Niw5ICsxNTYsOSBAQCB0eXBlZGVmIHZvaWQgKCpTZXRGb250RmFtaWx5V3JhcHBl
cikoV2ViU2V0dGluZ3MqLCBjb25zdCBXZWJTdHJpbmcmLCBVU2NyaXB0Q29kZQogc3RhdGljIHZv
aWQgYXBwbHlGb250TWFwKFdlYlNldHRpbmdzKiBzZXR0aW5ncywgY29uc3QgV2ViUHJlZmVyZW5j
ZXM6OlNjcmlwdEZvbnRGYW1pbHlNYXAmIG1hcCwgU2V0Rm9udEZhbWlseVdyYXBwZXIgc2V0dGVy
KQogewogICAgIGZvciAoV2ViUHJlZmVyZW5jZXM6OlNjcmlwdEZvbnRGYW1pbHlNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ZXIgPSBtYXAuYmVnaW4oKTsgaXRlciAhPSBtYXAuZW5kKCk7ICsraXRlcikg
ewotICAgICAgICBjb25zdCBXZWJTdHJpbmcmIGZvbnQgPSBpdGVyLT5zZWNvbmQ7CisgICAgICAg
IGNvbnN0IFdlYlN0cmluZyYgZm9udCA9IGl0ZXItPnZhbHVlOwogICAgICAgICBpZiAoIWZvbnQu
aXNOdWxsKCkgJiYgIWZvbnQuaXNFbXB0eSgpKQotICAgICAgICAgICAgKCpzZXR0ZXIpKHNldHRp
bmdzLCBmb250LCBzdGF0aWNfY2FzdDxVU2NyaXB0Q29kZT4oaXRlci0+Zmlyc3QpKTsKKyAgICAg
ICAgICAgICgqc2V0dGVyKShzZXR0aW5ncywgZm9udCwgc3RhdGljX2Nhc3Q8VVNjcmlwdENvZGU+
KGl0ZXItPmtleSkpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vV2ViVmlld0hvc3QuY3BwCmluZGV4IDZmZjk1YzU2MjQxNzA4YmNhMzMxY2IwYzJjMmRjYTlk
N2RlODBkMWIuLmUyZmQyNDBmMmRhYTA3OGE1NTU5MjM5OTg3NzBlNDJjYzA3M2JlYjkgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcAorKysg
Yi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5jcHAKQEAgLTE2NDks
NyArMTY0OSw3IEBAIHZvaWQgV2ViVmlld0hvc3Q6OnByaW50RnJhbWVVc2VyR2VzdHVyZVN0YXR1
cyhXZWJGcmFtZSogd2ViZnJhbWUsIGNvbnN0IGNoYXIqIG1zCiB2b2lkIFdlYlZpZXdIb3N0Ojpw
cmludFJlc291cmNlRGVzY3JpcHRpb24odW5zaWduZWQgaWRlbnRpZmllcikKIHsKICAgICBSZXNv
dXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlSWRlbnRpZmllck1hcC5maW5kKGlkZW50
aWZpZXIpOwotICAgIHByaW50ZigiJXMiLCBpdCAhPSBtX3Jlc291cmNlSWRlbnRpZmllck1hcC5l
bmQoKSA/IGl0LT5zZWNvbmQuY19zdHIoKSA6ICI8dW5rbm93bj4iKTsKKyAgICBwcmludGYoIiVz
IiwgaXQgIT0gbV9yZXNvdXJjZUlkZW50aWZpZXJNYXAuZW5kKCkgPyBpdC0+dmFsdWUuY19zdHIo
KSA6ICI8dW5rbm93bj4iKTsKIH0KIAogdm9pZCBXZWJWaWV3SG9zdDo6c2V0UGVuZGluZ0V4dHJh
RGF0YShQYXNzT3duUHRyPFRlc3RTaGVsbEV4dHJhRGF0YT4gZXh0cmFEYXRhKQpkaWZmIC0tZ2l0
IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyV2luLmNw
cCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlcldpbi5j
cHAKaW5kZXggN2Y5YWE2Y2MyZWU5MjliMmJmOGVhNDE2ZjVkNjViYjA1NmUzZWFkMS4uZWIzOGI1
NDM1YzE2OWQyYmRmYjA1NjhjNjNlYTIwM2I1YzZmYTNkYyAxMDA2NDQKLS0tIGEvVG9vbHMvRHVt
cFJlbmRlclRyZWUvd2luL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyV2luLmNwcAorKysgYi9Ub29s
cy9EdW1wUmVuZGVyVHJlZS93aW4vQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJXaW4uY3BwCkBAIC01
OCw3ICs1OCw3IEBAIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjp+QWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXIoKQogICAgICAgICBVbmhvb2tXaW5FdmVudChtX25vdGlmaWNhdGlvbnNFdmVudEhvb2sp
OwogCiAgICAgZm9yIChIYXNoTWFwPFBsYXRmb3JtVUlFbGVtZW50LCBKU09iamVjdFJlZj46Oml0
ZXJhdG9yIGl0ID0gbV9ub3RpZmljYXRpb25MaXN0ZW5lcnMuYmVnaW4oKTsgaXQgIT0gbV9ub3Rp
ZmljYXRpb25MaXN0ZW5lcnMuZW5kKCk7ICsraXQpCi0gICAgICAgIEpTVmFsdWVVbnByb3RlY3Qo
ZnJhbWUtPmdsb2JhbENvbnRleHQoKSwgaXQtPnNlY29uZCk7CisgICAgICAgIEpTVmFsdWVVbnBy
b3RlY3QoZnJhbWUtPmdsb2JhbENvbnRleHQoKSwgaXQtPnZhbHVlKTsKIH0KIAogQWNjZXNzaWJp
bGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6ZWxlbWVudEF0UG9pbnQoaW50
IHgsIGludCB5KQpAQCAtMjkzLDcgKzI5Myw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXI6OnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKCkKIHZvaWQgQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXI6Ondpbk5vdGlmaWNhdGlvblJlY2VpdmVkKFBsYXRmb3JtVUlFbGVtZW50IGVsZW1lbnQs
IGNvbnN0IHN0cmluZyYgZXZlbnROYW1lKQogewogICAgIGZvciAoSGFzaE1hcDxQbGF0Zm9ybVVJ
RWxlbWVudCwgSlNPYmplY3RSZWY+OjppdGVyYXRvciBpdCA9IG1fbm90aWZpY2F0aW9uTGlzdGVu
ZXJzLmJlZ2luKCk7IGl0ICE9IG1fbm90aWZpY2F0aW9uTGlzdGVuZXJzLmVuZCgpOyArK2l0KSB7
Ci0gICAgICAgIENPTVB0cjxJU2VydmljZVByb3ZpZGVyPiB0aGlzU2VydmljZVByb3ZpZGVyKFF1
ZXJ5LCBpdC0+Zmlyc3QpOworICAgICAgICBDT01QdHI8SVNlcnZpY2VQcm92aWRlcj4gdGhpc1Nl
cnZpY2VQcm92aWRlcihRdWVyeSwgaXQtPmtleSk7CiAgICAgICAgIGlmICghdGhpc1NlcnZpY2VQ
cm92aWRlcikKICAgICAgICAgICAgIGNvbnRpbnVlOwogCkBAIC0zMTYsNyArMzE2LDcgQEAgdm9p
ZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6d2luTm90aWZpY2F0aW9uUmVjZWl2ZWQoUGxhdGZv
cm1VSUVsZW1lbnQgZWxlbWVudCwKIAogICAgICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4g
anNOb3RpZmljYXRpb24oQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGV2ZW50
TmFtZS5jX3N0cigpKSk7CiAgICAgICAgIEpTVmFsdWVSZWYgYXJndW1lbnQgPSBKU1ZhbHVlTWFr
ZVN0cmluZyhmcmFtZS0+Z2xvYmFsQ29udGV4dCgpLCBqc05vdGlmaWNhdGlvbi5nZXQoKSk7Ci0g
ICAgICAgIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24oZnJhbWUtPmdsb2JhbENvbnRleHQoKSwgaXQt
PnNlY29uZCwgTlVMTCwgMSwgJmFyZ3VtZW50LCBOVUxMKTsKKyAgICAgICAgSlNPYmplY3RDYWxs
QXNGdW5jdGlvbihmcmFtZS0+Z2xvYmFsQ29udGV4dCgpLCBpdC0+dmFsdWUsIDAsIDEsICZhcmd1
bWVudCwgMCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS93
aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJXaW4uY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2lu
L0xheW91dFRlc3RDb250cm9sbGVyV2luLmNwcAppbmRleCBhZTdlMDljY2E3ZGY4M2M1NDgyMmMy
MDNlMTI2MTQ3NzA1NDI5NDhlLi42OThjNTEyMjljNzg2Mjk3YjhhNWIyOWYxYjM4NTI0ZTFlMzRh
NTk1IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vTGF5b3V0VGVzdENvbnRy
b2xsZXJXaW4uY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9MYXlvdXRUZXN0Q29u
dHJvbGxlcldpbi5jcHAKQEAgLTEyODIsOCArMTI4Miw4IEBAIHVuc2lnbmVkIHdvcmxkSURGb3JX
b3JsZChJV2ViU2NyaXB0V29ybGQqIHdvcmxkKQogewogICAgIFdvcmxkTWFwOjpjb25zdF9pdGVy
YXRvciBlbmQgPSB3b3JsZE1hcCgpLmVuZCgpOwogICAgIGZvciAoV29ybGRNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gd29ybGRNYXAoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgaWYgKGl0LT5zZWNvbmQgPT0gd29ybGQpCi0gICAgICAgICAgICByZXR1cm4gaXQtPmZpcnN0
OworICAgICAgICBpZiAoaXQtPnZhbHVlID09IHdvcmxkKQorICAgICAgICAgICAgcmV0dXJuIGl0
LT5rZXk7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CkBAIC0xMzA3LDcgKzEzMDcsNyBAQCB2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCh1bnNp
Z25lZCB3b3JsZElELCBKU09iagogICAgICAgICBpZiAoRkFJTEVEKFdlYktpdENyZWF0ZUluc3Rh
bmNlKF9fdXVpZG9mKFdlYlNjcmlwdFdvcmxkKSwgMCwgX191dWlkb2Yod29ybGQpLCByZWludGVy
cHJldF9jYXN0PHZvaWQqKj4oJndvcmxkKSkpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0g
ZWxzZSB7Ci0gICAgICAgIENPTVB0cjxJV2ViU2NyaXB0V29ybGQ+JiB3b3JsZFNsb3QgPSB3b3Js
ZE1hcCgpLmFkZCh3b3JsZElELCAwKS5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICBDT01QdHI8
SVdlYlNjcmlwdFdvcmxkPiYgd29ybGRTbG90ID0gd29ybGRNYXAoKS5hZGQod29ybGRJRCwgMCku
aXRlcmF0b3ItPnZhbHVlOwogICAgICAgICBpZiAoIXdvcmxkU2xvdCAmJiBGQUlMRUQoV2ViS2l0
Q3JlYXRlSW5zdGFuY2UoX191dWlkb2YoV2ViU2NyaXB0V29ybGQpLCAwLCBfX3V1aWRvZih3b3Js
ZFNsb3QpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJndvcmxkU2xvdCkpKSkKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgd29ybGQgPSB3b3JsZFNsb3Q7CmRpZmYgLS1naXQgYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS93aW4vUmVzb3VyY2VMb2FkRGVsZWdhdGUuY3BwIGIvVG9vbHMvRHVt
cFJlbmRlclRyZWUvd2luL1Jlc291cmNlTG9hZERlbGVnYXRlLmNwcAppbmRleCAyNmI3MjJhNGVh
NWNkYzY0ZjEzN2NlZjc3MmMzNDhmNjk1NDg5NzY0Li5hOGNkM2JkMGMxMDZiZjIyYjQ2ZGFhOWMx
MzJmNjMxODY3YjVlMWY4IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vUmVz
b3VyY2VMb2FkRGVsZWdhdGUuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9SZXNv
dXJjZUxvYWREZWxlZ2F0ZS5jcHAKQEAgLTY2LDcgKzY2LDcgQEAgd3N0cmluZyBSZXNvdXJjZUxv
YWREZWxlZ2F0ZTo6ZGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQodW5zaWduZWQgbG9u
ZyBpZGUKICAgICBpZiAoaXQgPT0gbV91cmxNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybiBMIjx1
bmtub3duPiI7CiAKLSAgICByZXR1cm4gdXJsU3VpdGFibGVGb3JUZXN0UmVzdWx0KGl0LT5zZWNv
bmQpOworICAgIHJldHVybiB1cmxTdWl0YWJsZUZvclRlc3RSZXN1bHQoaXQtPnZhbHVlKTsKIH0K
IAogd3N0cmluZyBSZXNvdXJjZUxvYWREZWxlZ2F0ZTo6ZGVzY3JpcHRpb25TdWl0YWJsZUZvclRl
c3RSZXN1bHQoSVdlYlVSTFJlcXVlc3QqIHJlcXVlc3QpCmRpZmYgLS1naXQgYS9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcCBiL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvTGF5b3V0VGVzdENvbnRyb2xsZXIu
Y3BwCmluZGV4IGJiMzk2OGM0OWM4Y2I4ZmI5MDM2MmFlYWE2MTUzOWNkNWM5MzdkMDYuLjQ5NDM1
NDY0YjdmZTQ5NWMyZTU0ODlkZmQwZGFmNWViZjMzOTJiNjggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCisr
KyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvTGF5b3V0VGVzdENvbnRy
b2xsZXIuY3BwCkBAIC00OTksOCArNDk5LDggQEAgdW5zaWduZWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OndvcmxkSURGb3JXb3JsZChXS0J1bmRsZVNjcmlwdFdvcmxkUmVmIHdvcmxkKQogewogICAg
IFdvcmxkTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSB3b3JsZE1hcCgpLmVuZCgpOwogICAgIGZv
ciAoV29ybGRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gd29ybGRNYXAoKS5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQgPT0gd29ybGQpCi0gICAgICAg
ICAgICByZXR1cm4gaXQtPmZpcnN0OworICAgICAgICBpZiAoaXQtPnZhbHVlID09IHdvcmxkKQor
ICAgICAgICAgICAgcmV0dXJuIGl0LT5rZXk7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CkBAIC01
MTQsNyArNTE0LDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJ
bklzb2xhdGVkV29ybGQoSlNDb250ZXh0UmVmIGNvbnRleHQsIHUKICAgICBpZiAoIXdvcmxkSUQp
CiAgICAgICAgIHdvcmxkLmFkb3B0KFdLQnVuZGxlU2NyaXB0V29ybGRDcmVhdGVXb3JsZCgpKTsK
ICAgICBlbHNlIHsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tCdW5kbGVTY3JpcHRXb3JsZFJlZj4m
IHdvcmxkU2xvdCA9IHdvcmxkTWFwKCkuYWRkKHdvcmxkSUQsIDApLml0ZXJhdG9yLT5zZWNvbmQ7
CisgICAgICAgIFdLUmV0YWluUHRyPFdLQnVuZGxlU2NyaXB0V29ybGRSZWY+JiB3b3JsZFNsb3Qg
PSB3b3JsZE1hcCgpLmFkZCh3b3JsZElELCAwKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgIGlm
ICghd29ybGRTbG90KQogICAgICAgICAgICAgd29ybGRTbG90LmFkb3B0KFdLQnVuZGxlU2NyaXB0
V29ybGRDcmVhdGVXb3JsZCgpKTsKICAgICAgICAgd29ybGQgPSB3b3JsZFNsb3Q7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155084</attachid>
            <date>2012-07-27 16:20:40 -0700</date>
            <delta_ts>2012-07-30 06:00:02 -0700</delta_ts>
            <desc>Patch for the EWS, not ready for review</desc>
            <filename>0001-Draft-of-rename-first-second-to-key-value.patch</filename>
            <type>text/plain</type>
            <size>566060</size>
            <attacher name="Caio Marcelo de Oliveira Filho">cmarcelo</attacher>
            
              <data encoding="base64">RnJvbSA2ZDljOWZmYjVkNmMxN2U2Njc5MDMyMGU4MTVhOTYzNDZhMGUyZTFkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBDYWlvIE1hcmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gPGNhaW8u
b2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KRGF0ZTogRnJpLCAyNyBKdWwgMjAxMiAxMTo1Nzo1MyAt
MDMwMApTdWJqZWN0OiBbUEFUQ0hdIERyYWZ0IG9mIHJlbmFtZSBmaXJzdC9zZWNvbmQgdG8ga2V5
L3ZhbHVlCgotLS0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5o
ICAgICAgIHwgICAgOCArKy0tCiAuLi4vSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmpl
Y3RGdW5jdGlvbnMuaCB8ICAgIDggKystLQogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Ns
YXNzUmVmLmNwcCAgICAgICAgICAgfCAgIDE0ICsrKy0tLQogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5jcHAgICAgICAgfCAgICA4ICsrLS0KIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9KdW1wVGFibGUuaCAgICAgICAgIHwgICAgNCArLQogLi4uL2J5dGVj
b2RlL0xhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcCAgICAgICAgICAgfCAgICAyICstCiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2FtcGxpbmdUb29sLmNwcCAgICB8ICAgIDYgKy0t
CiAuLi4vYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcCAgICAgICAgICAgICB8ICAg
MjAgKysrKy0tLS0KIC4uLi9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2Vu
LmNwcCAgIHwgICAgNCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2Vy
LmNwcCAgICAgICAgfCAgICAyICstCiAuLi4vZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9u
UGhhc2UuY3BwICAgICAgICB8ICAgMjIgKysrKy0tLS0tCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5jcHAgICB8ICAgIDQgKy0KIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQnl0ZUNvZGVDYWNoZS5oICAgICAgIHwgICAgOCArKy0tCiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcCAgICB8ICAgIDggKystLQogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAgICAgICAgICAgICAgICAgfCAgICAyICst
CiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmggICAgICAgICAgICAgICAgICB8ICAg
IDIgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmNwcCAg
IHwgICAgNCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmNwcCAgICAg
ICAgICAgfCAgICAyICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrLmggICAgICAg
ICAgICAgICAgICB8ICAgIDQgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcCAg
ICAgICAgICAgICAgICAgIHwgICAgNCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRT
dHVicy5jcHAgICAgICAgICAgICAgfCAgICA0ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL1BhcnNlci5jcHAgICAgICAgICAgICB8ICAgIDYgKy0tCiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcHJvZmlsZXIvUHJvZmlsZS5jcHAgICAgICAgICB8ICAgIDQgKy0KIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuY3BwICAgICAgIHwgICAgMiArLQogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmNwcCAgICAgfCAgICA4ICsrLS0KIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwICAgICAgICAgIHwgICAzOCAr
KysrKysrLS0tLS0tLS0KIC4uLi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVP
YmplY3QuY3BwIHwgICAgNCArLQogLi4uL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xU
YWJsZU9iamVjdC5oICAgfCAgIDEyICsrLS0tCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9SZWdFeHBDYWNoZS5jcHAgICAgICB8ICAgIDIgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1dlYWtHQ01hcC5oICAgICAgICAgIHwgICAgNiArLS0KIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS90b29scy9Qcm9maWxlVHJlZU5vZGUuaCAgICAgIHwgICAxNiArKystLS0tCiBTb3VyY2Uv
V1RGL3d0Zi9IYXNoQ291bnRlZFNldC5oICAgICAgICAgICAgICAgICAgICB8ICAgIDggKystLQog
U291cmNlL1dURi93dGYvSGFzaEl0ZXJhdG9ycy5oICAgICAgICAgICAgICAgICAgICAgfCAgICA2
ICstLQogU291cmNlL1dURi93dGYvSGFzaE1hcC5oICAgICAgICAgICAgICAgICAgICAgICAgICAg
fCAgIDQ2ICsrKysrKystLS0tLS0tLS0tLQogU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmggICAg
ICAgICAgICAgICAgICAgICAgICAgfCAgICA2ICstLQogU291cmNlL1dURi93dGYvSGFzaFRyYWl0
cy5oICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDE3ICsrKystLS0KIFNvdXJjZS9XVEYvd3Rm
L01ldGFBbGxvY2F0b3IuY3BwICAgICAgICAgICAgICAgICAgIHwgICAxOCArKystLS0tCiBTb3Vy
Y2UvV1RGL3d0Zi9SZWZDb3VudGVkTGVha0NvdW50ZXIuY3BwICAgICAgICAgICB8ICAgIDIgKy0K
IFNvdXJjZS9XVEYvd3RmL1JlZlB0ckhhc2hNYXAuaCAgICAgICAgICAgICAgICAgICAgIHwgICAx
MiArKy0tLQogU291cmNlL1dURi93dGYvU3BlY3RydW0uaCAgICAgICAgICAgICAgICAgICAgICAg
ICAgfCAgICA0ICstCiBTb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHAgICAgICAg
ICAgICAgICB8ICAgIDQgKy0KIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vR2Vv
bG9jYXRpb24uY3BwIHwgICAgNiArLS0KIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkRhdGFiYXNlLmNwcCAgIHwgICAgMiArLQogLi4uL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRh
dGFiYXNlQmFja2VuZEltcGwuY3BwICAgfCAgICAyICstCiAuLi4vTW9kdWxlcy9pbmRleGVkZGIv
SURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcCAgICB8ICAgIDYgKy0tCiAuLi4vV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAgICB8ICAgMTIgKystLS0KIC4uLi9pbmRl
eGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAgICAgICAgIHwgICAxMCArKy0tCiAu
Li4vV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAgICB8ICAgMTAg
KystLQogLi4uL01vZHVsZXMvd2ViZGF0YWJhc2UvQWJzdHJhY3REYXRhYmFzZS5jcHAgICAgICAg
fCAgICAyICstCiAuLi4vTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3BwICAg
ICAgICB8ICAgIDIgKy0KIC4uLi9Nb2R1bGVzL3dlYmRhdGFiYXNlL09yaWdpblVzYWdlUmVjb3Jk
LmNwcCAgICAgIHwgICAgMiArLQogLi4uL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQ29vcmRp
bmF0b3IuY3BwICAgICAgfCAgICA2ICstLQogLi4uL2Nocm9taXVtL0RhdGFiYXNlVHJhY2tlckNo
cm9taXVtLmNwcCAgICAgICAgICAgfCAgICAyICstCiAuLi4vTW9kdWxlcy93ZWJkYXRhYmFzZS9j
aHJvbWl1bS9RdW90YVRyYWNrZXIuY3BwICB8ICAgIDYgKy0tCiAuLi4vTW9kdWxlcy93ZWJzb2Nr
ZXRzL1dlYlNvY2tldERlZmxhdGVGcmFtZXIuY3BwICB8ICAgIDQgKy0KIC4uLi93ZWJzb2NrZXRz
L1dlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXIuY3BwICAgIHwgICAgNiArLS0KIFNvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAgICAgIHwgICAgMiArLQogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9ET01PYmplY3RDYWNoZS5jcHAgfCAgICAyICst
CiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01PYmplY3RIYXNoVGFibGVNYXAuaCB8ICAg
IDYgKy0tCiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwICAgICAg
ICB8ICAgIDIgKy0KIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0
LmNwcCAgIHwgICAgNCArLQogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxP
YmplY3QuaCAgICAgfCAgICAyICstCiAuLi4vV2ViQ29yZS9iaW5kaW5ncy9qcy9QYWdlU2NyaXB0
RGVidWdTZXJ2ZXIuY3BwICB8ICAgIDQgKy0KIC4uLi9XZWJDb3JlL2JpbmRpbmdzL2pzL1Njcmlw
dENhY2hlZEZyYW1lRGF0YS5jcHAgIHwgICAgOCArKy0tCiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcCAgICB8ICAgMjAgKysrKy0tLS0KIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuaCAgICAgIHwgICAgNCArLQogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwICAgfCAgIDE0ICsrKy0t
LQogLi4uL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcCAgfCAg
IDEwICsrLS0KIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4
LnBtIHwgICAgNCArLQogLi4uL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOEZsb2F0NjRBcnJh
eS5jcHAgICAgfCAgICA0ICstCiAuLi4vc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEFjdGl2ZURPTU9i
amVjdC5jcHAgICAgICB8ICAgIDQgKy0KIC4uLi9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Q3VzdG9t
TmFtZWRHZXR0ZXIuY3BwICAgIHwgICAgNCArLQogLi4uL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RF
dmVudENvbnN0cnVjdG9yLmNwcCAgICAgfCAgICA0ICstCiAuLi4vYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Y4L1Y4VGVzdEV2ZW50VGFyZ2V0LmNwcCB8ICAgIDQgKy0KIC4uLi9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVjgvVjhUZXN0RXhjZXB0aW9uLmNwcCAgIHwgICAgNCArLQogLi4uL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RJbnRlcmZhY2UuY3BwICAgfCAgICA0ICstCiAuLi4vdGVz
dC9WOC9WOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcCAgICAgICB8ICAgIDQgKy0KIC4u
Li9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAgICAgIHwgICAgNCAr
LQogLi4uL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROb2RlLmNwcCAgICAgICAgfCAg
ICA0ICstCiAuLi4vV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNw
cCB8ICAgIDQgKy0KIC4uLi9WOC9WOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Uu
Y3BwICAgIHwgICAgNCArLQogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvTlBWOE9iamVjdC5j
cHAgICAgICAgICAgfCAgICA2ICstLQogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0
Q29udHJvbGxlci5jcHAgICAgfCAgICA4ICsrLS0KIC4uLi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Nl
cmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgIHwgICAgMiArLQogLi4uL2JpbmRpbmdzL3Y4L1Y4Qmlu
ZGluZ1BlckNvbnRleHREYXRhLmNwcCAgICAgICAgfCAgICA0ICstCiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9WOERPTU1hcC5oICAgICAgICAgICAgICB8ICAgIDQgKy0KIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVyLmNwcCAgICAgIHwgICAgNCArLQogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAgICAgICAgICAgICAgfCAgIDEyICsrLS0t
CiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ucHJ1bnRpbWUuY3BwICAgICAgICAgICB8ICAg
MTAgKystLQogU291cmNlL1dlYkNvcmUvYnJpZGdlL0lkZW50aWZpZXJSZXAuY3BwICAgICAgICAg
ICAgfCAgIDE2ICsrKy0tLS0KIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9OUF9qc29iamVjdC5jcHAg
ICAgICAgICAgICAgIHwgICAgOCArKy0tCiBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9K
YXZhQ2xhc3NKU0MuY3BwICAgICB8ICAgIDIgKy0KIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50
aW1lX3Jvb3QuY3BwICAgICAgICAgICAgIHwgICAgNCArLQogU291cmNlL1dlYkNvcmUvY3NzL0NT
U0NhbnZhc1ZhbHVlLmNwcCAgICAgICAgICAgICAgfCAgICA0ICstCiBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcCB8ICAgIDQgKy0KIFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NDcm9zc2ZhZGVWYWx1ZS5jcHAgICAgICAgICAgIHwgICAgMiArLQogU291cmNl
L1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU291cmNlLmNwcCAgICAgICAgICAgfCAgICAyICstCiBT
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmNwcCAgICAgICAgICAgICB8ICAgIDYg
Ky0tCiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5jcHAgICAgICB8
ICAgIDYgKy0tCiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuY3BwICAg
ICAgICB8ICAgIDIgKy0KIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvci5jcHAgICAgICAg
ICAgICAgICAgIHwgICAgMiArLQogU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlUG9vbC5jcHAg
ICAgICAgICAgICAgICAgfCAgICA4ICsrLS0KIC4uLi9XZWJDb3JlL2Nzcy9Qcm9wZXJ0eVNldENT
U1N0eWxlRGVjbGFyYXRpb24uY3BwIHwgICAgMiArLQogU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
QnVpbGRlci5jcHAgICAgICAgICAgICAgICAgfCAgIDE4ICsrKy0tLS0KIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVJlc29sdmVyLmNwcCAgICAgICAgICAgICAgIHwgICAyMiArKysrLS0tLS0KIFNv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0Q29udGVudHMuY3BwICAgICAgICAgIHwgICAgMiAr
LQogU291cmNlL1dlYkNvcmUvZG9tL0NoZWNrZWRSYWRpb0J1dHRvbnMuY3BwICAgICAgICAgfCAg
ICA2ICstLQogU291cmNlL1dlYkNvcmUvZG9tL0NoaWxkTGlzdE11dGF0aW9uU2NvcGUuY3BwICAg
ICAgfCAgIDE0ICsrKy0tLQogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCAgICAgICAg
ICAgICAgICAgICAgfCAgIDEyICsrLS0tCiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJr
ZXJDb250cm9sbGVyLmNwcCAgICB8ICAgMTggKysrLS0tLQogU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50T3JkZXJlZE1hcC5jcHAgICAgICAgICAgfCAgICAyICstCiBTb3VyY2UvV2ViQ29yZS9k
b20vRWxlbWVudEF0dHJpYnV0ZURhdGEuY3BwICAgICAgICB8ICAgIDIgKy0KIFNvdXJjZS9XZWJD
b3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwICAgICAgICAgICAgIHwgICAgMiArLQogU291cmNl
L1dlYkNvcmUvZG9tL0V2ZW50TGlzdGVuZXJNYXAuY3BwICAgICAgICAgICAgfCAgIDE4ICsrKy0t
LS0KIFNvdXJjZS9XZWJDb3JlL2RvbS9JZFRhcmdldE9ic2VydmVyUmVnaXN0cnkuY3BwICAgIHwg
ICAgNiArLS0KIC4uLi9XZWJDb3JlL2RvbS9NdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cC5j
cHAgIHwgICAgNiArLS0KIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcCAgICAgICAgICAgICAg
ICAgICAgICAgIHwgICAxNCArKystLS0KIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEu
aCAgICAgICAgICAgICAgICAgIHwgICAxOCArKystLS0tCiBTb3VyY2UvV2ViQ29yZS9kb20vUHJv
Y2Vzc2luZ0luc3RydWN0aW9uLmNwcCAgICAgICB8ICAgIDIgKy0KIFNvdXJjZS9XZWJDb3JlL2Rv
bS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcCAgICAgIHwgICAyNiArKysrKy0tLS0tCiBTb3Vy
Y2UvV2ViQ29yZS9kb20vU2VsZWN0b3JRdWVyeS5jcHAgICAgICAgICAgICAgICB8ICAgIDIgKy0K
IFNvdXJjZS9XZWJDb3JlL2RvbS9TcGFjZVNwbGl0U3RyaW5nLmNwcCAgICAgICAgICAgIHwgICAg
MiArLQogU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwICAgICAgICAgICAgICAg
fCAgIDEwICsrLS0KIFNvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUNvbnRyb2xsZXIuY3BwICAgICAg
ICAgICAgIHwgICAyOCArKysrKy0tLS0tLQogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVj
dGlvbi5jcHAgICAgICAgICAgICAgfCAgICAyICstCiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTEZyYW1lYnVmZmVyLmNwcCAgICB8ICAgMjIgKysrKy0tLS0tCiBTb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weSB8ICAgIDggKystLQogU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5jcHAgICAgICAgfCAgIDE4ICsrKy0t
LS0KIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwIHwg
ICAyMCArKysrLS0tLQogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50
LmNwcCAgICAgfCAgIDM0ICsrKysrKy0tLS0tLS0KIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDb25zb2xlQWdlbnQuY3BwIHwgICAgNCArLQogU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckRPTUFnZW50LmNwcCAgICAgfCAgIDEwICsrLS0KIC4uLi9pbnNwZWN0b3Iv
SW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudC5jcHAgICAgICAgIHwgICAgNCArLQogLi4uL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5jcHAgfCAgIDE2ICsrKy0tLS0K
IC4uLi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmNwcCAgIHwgICAx
MiArKy0tLQogLi4uL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3Bw
ICAgfCAgIDIyICsrKystLS0tLQogLi4uL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckluZGV4
ZWREQkFnZW50LmNwcCAgfCAgICA0ICstCiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yTWVtb3J5QWdlbnQuY3BwICB8ICAgIDggKystLQogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvclBhZ2VBZ2VudC5jcHAgICAgfCAgICA4ICsrLS0KIC4uLi9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcCAgIHwgICAxMiArKy0tLQogLi4uL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuY3BwICAgfCAgICA2ICstLQogU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmNwcCAgICAgICAgfCAgIDEwICsr
LS0KIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcCAgIHwg
ICAgNiArLS0KIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwICAg
ICAgIHwgICAgNiArLS0KIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JXb3JrZXJB
Z2VudC5jcHAgIHwgICAxMiArKy0tLQogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL05ldHdvcmtS
ZXNvdXJjZXNEYXRhLmNwcCAgfCAgICA0ICstCiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NP
cmlnaW5BY2Nlc3NDb250cm9sLmNwcCB8ICAgIDYgKy0tCiAuLi4vbG9hZGVyL0Nyb3NzT3JpZ2lu
UHJlZmxpZ2h0UmVzdWx0Q2FjaGUuY3BwICAgICB8ICAgIDYgKy0tCiBTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwICAgICAgICAgICB8ICAgIDYgKy0tCiBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvTWFpblJlc291cmNlTG9hZGVyLmNwcCAgICAgICB8ICAgIDIgKy0KIFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwICAgIHwgICAgMiArLQog
Li4uL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGUuY3BwICAgfCAgIDEw
ICsrLS0KIC4uLi9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmNwcCAgICAg
IHwgICAgOCArKy0tCiAuLi4vbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVIb3N0LmNw
cCAgICAgICB8ICAgIDIgKy0KIC4uLi9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVJl
c291cmNlLmNwcCAgIHwgICAgMiArLQogLi4uL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNh
Y2hlU3RvcmFnZS5jcHAgICAgfCAgIDI0ICsrKysrLS0tLS0KIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9hcmNoaXZlL0FyY2hpdmVGYWN0b3J5LmNwcCAgIHwgICAgMiArLQogU291cmNlL1dlYkNvcmUv
bG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNlLmNwcCAgfCAgICA0ICstCiBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwICAgICB8ICAgIDggKystLQogLi4u
L2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlci5oICAgICAgfCAgICAyICst
CiAuLi4vV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwICB8ICAg
MTQgKysrLS0tCiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuY3BwICAg
ICAgICB8ICAgIDggKystLQogU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNl
LmNwcCAgICAgICAgfCAgIDEyICsrLS0tCiBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5j
cHAgICAgICAgICAgICAgICAgICB8ICAgIDQgKy0KIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRI
YW5kbGVyLmNwcCAgICAgICAgICAgICAgIHwgICAgMiArLQogU291cmNlL1dlYkNvcmUvcGFnZS9G
cmFtZS5jcHAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICstCiBTb3VyY2UvV2ViQ29yZS9w
YWdlL1BhZ2VHcm91cC5jcHAgICAgICAgICAgICAgICAgICB8ICAgMzIgKysrKysrLS0tLS0tLQog
U291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAgICAgICAgICAgICAgfCAgICAy
ICstCiBTb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5UG9saWN5LmNwcCAgICAgICAgICAgICB8
ICAgIDYgKy0tCiBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcCAgICAgICAgICAgICAg
ICAgICB8ICAgIDQgKy0KIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU3BlZWNoSW5wdXQuY3BwICAgICAg
ICAgICAgICAgIHwgICAgMiArLQogU291cmNlL1dlYkNvcmUvcGFnZS9XaW5kb3dGZWF0dXJlcy5j
cHAgICAgICAgICAgICAgfCAgICA0ICstCiAuLi4vV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Bbmlt
YXRpb25Db250cm9sbGVyLmNwcCB8ICAgMTYgKysrLS0tLQogLi4uL1dlYkNvcmUvcGFnZS9hbmlt
YXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmNwcCAgfCAgIDUwICsrKysrKysrKystLS0tLS0tLS0t
CiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MYW5ndWFnZS5jcHAgICAgICAgICAgICAgICB8ICAg
IDIgKy0KIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuY3BwICAgICAg
IHwgICAgMiArLQogLi4uL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViSFRUUExvYWRJbmZv
LmNwcCAgfCAgICAyICstCiAuLi4vcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJVUkxSZXF1
ZXN0LmNwcCAgICB8ICAgIDIgKy0KIC4uLi9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlVS
TFJlc3BvbnNlLmNwcCAgIHwgICAgNCArLQogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhY2hlLmNwcCAgICAgfCAgIDI0ICsrKysrLS0tLS0KIC4uLi9wbGF0Zm9ybS9ncmFw
aGljcy9HbHlwaFBhZ2VUcmVlTm9kZS5jcHAgICAgICAgIHwgICAyMiArKysrLS0tLS0KIC4uLi9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyQW5pbWF0aW9uLmNwcCAgIHwgICAxNCArKyst
LS0KIC4uLi9wbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZS5jcHAgICAgICAgIHwg
ICAxNCArKystLS0KIC4uLi9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0u
Y3BwICAgIHwgICAgMiArLQogLi4uL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJv
bWl1bS5jcHAgICAgfCAgICA2ICstLQogLi4uL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJD
aHJvbWl1bS5jcHAgICAgICAgfCAgIDE0ICsrKy0tLQogLi4uL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDRGFtYWdlVHJhY2tlci5jcHAgICAgICAgfCAgICAyICstCiAuLi4vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRpbGluZ0RhdGEuY3BwICAgICB8ICAgIDQgKy0KIC4uLi9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwICAgICAgIHwgICAgNiArLS0KIC4uLi9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcCAgIHwgICAgMiArLQogLi4u
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVzb3VyY2VQcm92aWRlci5jcHAgICAgfCAgIDM4ICsr
KysrKystLS0tLS0tLQogLi4uL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyUHJvZ3JhbS5j
cHAgICAgICAgfCAgICAyICstCiAuLi4vcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1
enpTa2lhLmNwcCAgICB8ICAgMTIgKystLS0KIC4uLi9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJm
QnV6ek5HRmFjZS5jcHAgICAgICAgIHwgICAxMiArKy0tLQogLi4uL2dyYXBoaWNzL21hYy9TaW1w
bGVGb250RGF0YUNvcmVUZXh0LmNwcCAgICAgICAgfCAgICAyICstCiAuLi4vcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhTWFjLm1tICAgICB8ICAgIDQgKy0KIC4uLi9ncmFwaGlj
cy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcCAgIHwgICAgMiArLQogLi4uL29w
ZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAgICAgICAgfCAgICA4ICsrLS0K
IC4uLi9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcCAgIHwgICAg
NCArLQogLi4uL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAg
fCAgICA0ICstCiAuLi4vcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udFBsYXRmb3JtRGF0YS5j
cHAgICB8ICAgIDQgKy0KIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3Rr
LmNwcCAgICAgIHwgICAgMiArLQogLi4uL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0RyYWdBbmRE
cm9wSGVscGVyLmNwcCAgfCAgIDEwICsrLS0KIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9S
ZW5kZXJUaGVtZUd0azMuY3BwICAgIHwgICAgNiArLS0KIC4uLi9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvQ3JlZGVudGlhbFN0b3JhZ2UuY3BwIHwgICAgNCArLQogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9IVFRQSGVhZGVyTWFwLmNwcCAgfCAgICA0ICstCiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL01JTUVIZWFkZXIuY3BwICAgICB8ICAgIDYgKy0tCiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNwcCB8ICAgIDIgKy0KIC4u
Li9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwICAgICAgIHwgICAgNCAr
LQogLi4uL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRk5ldC5jcHAgICAgfCAg
ICAyICstCiAuLi4vcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZVJlcXVlc3RDRk5ldC5jcHAg
ICB8ICAgIDQgKy0KIC4uLi9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNwcCAg
ICAgICAgIHwgICAgNCArLQogLi4uL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlUmVxdWVz
dE1hYy5tbSAgICAgfCAgICAyICstCiAuLi4vcGxhdGZvcm0vbmV0d29yay9xdC9SZXNvdXJjZVJl
cXVlc3RRdC5jcHAgICAgICB8ICAgIDQgKy0KIC4uLi9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVz
b3VyY2VSZXF1ZXN0U291cC5jcHAgIHwgICAgNCArLQogLi4uL3BsYXRmb3JtL25ldHdvcmsvc291
cC9SZXNvdXJjZVJlc3BvbnNlU291cC5jcHAgfCAgICAyICstCiAuLi4vcGxhdGZvcm0vbmV0d29y
ay93aW4vUmVzb3VyY2VIYW5kbGVXaW4uY3BwICAgICB8ICAgIDQgKy0KIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3F0L1J1bkxvb3BRdC5jcHAgICAgICAgICAgIHwgICAgMiArLQogLi4uL3BsYXRm
b3JtL3RleHQvTG9jYWxlVG9TY3JpcHRNYXBwaW5nRGVmYXVsdC5jcHAgfCAgICA0ICstCiAuLi4v
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcCB8ICAgIDYgKy0t
CiAuLi4vcGxhdGZvcm0vdGV4dC90cmFuc2NvZGVyL0ZvbnRUcmFuc2NvZGVyLmNwcCAgICB8ICAg
IDIgKy0KIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvd2luL1RleHRDb2RlY1dpbi5jcHAg
IHwgICAyMCArKysrLS0tLQogLi4uL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFV0aWxp
dGllc1dpbi5jcHAgfCAgICA2ICstLQogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0ZpbGVT
eXN0ZW1XaW4uY3BwICAgICAgfCAgICAyICstCiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4v
UnVuTG9vcFdpbi5jcHAgICAgICAgICB8ICAgIDIgKy0KIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3dpbi9XQ0RhdGFPYmplY3QuY3BwICAgICAgIHwgICAgMiArLQogLi4uL3BsYXRmb3JtL3dpbmNl
L01JTUVUeXBlUmVnaXN0cnlXaW5DRS5jcHAgICAgICAgfCAgICAyICstCiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS93eC9Db250ZXh0TWVudVd4LmNwcCAgICAgICB8ICAgIDQgKy0KIFNvdXJjZS9X
ZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3BwICAgICAgICAgIHwgICAxMCArKy0tCiAu
Li4vV2ViQ29yZS9wbHVnaW5zL1BsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXIuY3BwICB8ICAgIDYg
Ky0tCiBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblN0cmVhbS5jcHAgICAgICAgICAgICB8
ICAgIDQgKy0KIC4uLi9wbHVnaW5zL2JsYWNrYmVycnkvUGx1Z2luRGF0YUJsYWNrQmVycnkuY3Bw
ICAgIHwgICAgNCArLQogU291cmNlL1dlYkNvcmUvcGx1Z2lucy93eC9QbHVnaW5EYXRhV3guY3Bw
ICAgICAgICAgfCAgICA0ICstCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmxvd1RocmVhZENv
bnRyb2xsZXIuY3BwICB8ICAgIDYgKy0tCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5l
Rmxvd0JveC5jcHAgICAgICAgICB8ICAgIDQgKy0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9jay5jcHAgICAgICAgICAgIHwgICAgMiArLQogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAgfCAgICA2ICstLQogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcCAgfCAgICA2ICstLQogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwICAgICAgICAgfCAgIDM0ICsrKysrKy0t
LS0tLS0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcCAgICAg
IHwgICAgNCArLQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCAgICAg
ICAgICAgfCAgICA4ICsrLS0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZp
bHRlckluZm8uY3BwIHwgICAgNCArLQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5h
bWVkRmxvd1RocmVhZC5jcHAgfCAgICA0ICstCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyUmVnaW9uLmNwcCAgICAgICAgICB8ICAgMTQgKysrLS0tCiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcCAgICB8ICAgIDIgKy0KIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbSAgICAgICAgIHwgICAgMiArLQogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwICAgICAgICAgICAgfCAgIDIyICsrKystLS0t
LQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAgICAgICAgICAgfCAg
ICA0ICstCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAgICAgICAg
ICB8ICAgIDQgKy0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9WZXJ0aWNhbFBvc2l0aW9uQ2Fj
aGUuaCAgIHwgICAgMiArLQogLi4uL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxp
bmVUZXh0LmNwcCAgfCAgICAyICstCiAuLi4vcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlci5jcHAgICAgICB8ICAgIDQgKy0KIC4uLi9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlR3JhZGllbnQuY3BwICAgIHwgICAgMiArLQogLi4uL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcCAgICAgfCAgICAyICstCiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR1Jlc291cmNlc0NhY2hlLmNwcCB8ICAgIDQgKy0KIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHUm9vdElubGluZUJveC5jcHAgIHwgICAgNiArLS0KIC4uLi9yZW5k
ZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1dGVzLmNwcCAgICAgIHwgICAgNCArLQogLi4u
L3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXIuY3BwICAgICAgICAgfCAgICA2ICst
LQogLi4uL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lLmNwcCAgfCAg
ICAyICstCiAuLi4vcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljc0J1aWxkZXIuY3BwICAgICAg
ICB8ICAgIDIgKy0KIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmNwcCAg
ICAgICAgIHwgICAxNCArKystLS0KIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU1hcC5j
cHAgICAgICAgICAgICAgIHwgICAgNCArLQogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdl
TmFtZXNwYWNlSW1wbC5jcHAgICAgfCAgIDEwICsrLS0KIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdE
b2N1bWVudEV4dGVuc2lvbnMuY3BwICAgICAgIHwgICAyOCArKysrKy0tLS0tLQogU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwICAgICAgICAgICAgICAgICAgfCAgICAyICstCiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmNwcCB8ICAgIDIgKy0K
IFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZUNhY2hlLmNwcCAgICAgIHwgICAy
MCArKysrLS0tLQogLi4uL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaCAg
ICAgICAgfCAgICA0ICstCiAuLi4vV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFBy
b3BlcnR5LmggICB8ICAgIDQgKy0KIC4uLi9zdmcvcHJvcGVydGllcy9TVkdBdHRyaWJ1dGVUb1By
b3BlcnR5TWFwLmNwcCAgIHwgICAgNiArLS0KIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2Vy
Q29udGV4dC5jcHAgICAgICAgICAgIHwgICAgMiArLQogU291cmNlL1dlYkNvcmUvd29ya2Vycy9X
b3JrZXJFdmVudFF1ZXVlLmNwcCAgICAgICAgfCAgICAyICstCiBTb3VyY2UvV2ViQ29yZS94bWwv
WE1MSHR0cFJlcXVlc3QuY3BwICAgICAgICAgICAgICB8ICAgMTAgKystLQogU291cmNlL1dlYkNv
cmUveG1sL1hQYXRoRnVuY3Rpb25zLmNwcCAgICAgICAgICAgICAgfCAgICAyICstCiBTb3VyY2Uv
V2ViQ29yZS94bWwvWFBhdGhQYXJzZXIuY3BwICAgICAgICAgICAgICAgICB8ICAgIDIgKy0KIFNv
dXJjZS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yTGlieHNsdC5jcHAgICAgICAgIHwgICAgNCAr
LQogU291cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JRdC5jcHAgICAgICAgICAgICAgfCAg
ICAyICstCiBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL0JhY2tpbmdTdG9yZS5jcHAgICAg
ICB8ICAgMjQgKysrKystLS0tLQogLi4uL1dlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNl
bnRlckltcGwuY3BwICAgfCAgIDEyICsrLS0tCiAuLi4vV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0
U3VwcG9ydC9BYm91dERhdGEuY3BwICB8ICAgIDIgKy0KIC4uLi9ibGFja2JlcnJ5L1dlYktpdFN1
cHBvcnQvRnJhbWVMYXllcnMuY3BwICAgICAgIHwgICAgNiArLS0KIC4uLi9zcmMvV2ViR2VvbG9j
YXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuY3BwIHwgICAgNCArLQogU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViSURCTWV0YWRhdGEuY3BwICAgICAgfCAgICA0ICstCiBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJbnRlbnQuY3BwICAgICAgICAgICB8ICAgIDIgKy0KIC4u
Li90ZXN0cy9XZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyVGVzdC5jcHAgICAgIHwgICAxMiAr
Ky0tLQogLi4uL2VmbC9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNFZmwuY3BwICAg
fCAgICA0ICstCiBTb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2ludGVudC5jcHAgICAgICAgICAg
ICAgICB8ICAgIDIgKy0KIC4uLi9ndGsvV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVz
R3RrLmNwcCAgIHwgICAgNCArLQogU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGZhdmlj
b25kYXRhYmFzZS5jcHAgfCAgICA2ICstLQogU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtp
dHdlYnBsdWdpbi5jcHAgICAgICAgfCAgICA2ICstLQogU291cmNlL1dlYktpdC9tYWMvSGlzdG9y
eS9XZWJIaXN0b3J5Lm1tICAgICAgICAgICAgfCAgICA2ICstLQogU291cmNlL1dlYktpdC9tYWMv
TWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbSAgICAgICAgfCAgICA4ICsrLS0KIC4uLi9QbHVnaW5z
L0hvc3RlZC9OZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyLm1tICAgIHwgICAgOCArKy0tCiAuLi4v
bWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdFByb3h5Lm1tICB8ICAgIDIgKy0K
IC4uLi9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW0gIHwgICAy
MiArKysrLS0tLS0KIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL1Byb3h5SW5zdGFu
Y2UubW0gIHwgICAxNiArKystLS0tCiBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5ldHNj
YXBlUGx1Z2luVmlldy5tbSB8ICAgIDQgKy0KIC4uLi9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViTm90
aWZpY2F0aW9uQ2xpZW50Lm1tICAgIHwgICAxMCArKy0tCiBTb3VyY2UvV2ViS2l0L21hYy9XZWJW
aWV3L1dlYkhUTUxWaWV3Lm1tICAgICAgICAgICB8ICAgIDIgKy0KIFNvdXJjZS9XZWJLaXQvcXQv
QXBpL3F3ZWJwYWdlLmNwcCAgICAgICAgICAgICAgICAgIHwgICAgMiArLQogU291cmNlL1dlYktp
dC9xdC9BcGkvcXdlYnBsdWdpbmRhdGFiYXNlLmNwcCAgICAgICAgfCAgICA0ICstCiAuLi4vcXQv
V2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzUXQuY3BwICAgICB8ICAgIDQgKy0KIFNv
dXJjZS9XZWJLaXQvd2luL0NPTVByb3BlcnR5QmFnLmggICAgICAgICAgICAgICAgIHwgICAxMCAr
Ky0tCiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3RhdGlzdGljcy5jcHAgICAgICAgICAgICB8
ICAgIDIgKy0KIC4uLi93aW4vV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNw
cCAgIHwgICAgNCArLQogU291cmNlL1dlYktpdC93aW4vV2ViSGlzdG9yeS5jcHAgICAgICAgICAg
ICAgICAgICAgfCAgICAyICstCiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJLaXRDT01BUEkuY3BwICAg
ICAgICAgICAgICAgICB8ICAgIDIgKy0KIFNvdXJjZS9XZWJLaXQvd2luL1dlYktpdFN0YXRpc3Rp
Y3MuY3BwICAgICAgICAgICAgIHwgICAgNCArLQogU291cmNlL1dlYktpdC93aW4vV2ViTm90aWZp
Y2F0aW9uQ2VudGVyLmNwcCAgICAgICAgfCAgICA2ICstLQogLi4uL1dlYkNvcmVTdXBwb3J0L1Bs
YXRmb3JtU3RyYXRlZ2llc1dpbkNFLmNwcCAgICAgfCAgICA0ICstCiBTb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50Q29kZXJzLmggICB8ICAgIDggKystLQogU291cmNlL1dl
YktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Db25uZWN0aW9uLmNwcCAgICAgfCAgIDE0ICsrKy0tLQog
U291cmNlL1dlYktpdDIvUGxhdGZvcm0vZ3RrL1dvcmtRdWV1ZUd0ay5jcHAgICAgICAgfCAgICA0
ICstCiBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9tYWMvV29ya1F1ZXVlTWFjLmNwcCAgICAgICB8
ICAgIDIgKy0KIC4uLi9XZWJLaXQyL1NoYXJlZC9QbHVnaW5zL05QUmVtb3RlT2JqZWN0TWFwLmNw
cCAgIHwgICAgMiArLQogU291cmNlL1dlYktpdDIvU2hhcmVkL1VzZXJNZXNzYWdlQ29kZXJzLmgg
ICAgICAgICAgfCAgICA0ICstCiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViSW50ZW50RGF0YS5j
cHAgICAgICAgICAgICB8ICAgIDIgKy0KIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcmVmZXJl
bmNlc1N0b3JlLmNwcCAgICAgIHwgICAgNCArLQogLi4uL1dlYktpdDIvU2hhcmVkL21hYy9XZWJD
b3JlQXJndW1lbnRDb2RlcnNNYWMubW0gfCAgICAyICstCiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
cXQvQXJndW1lbnRDb2RlcnNRdC5jcHAgICAgICB8ICAgIDQgKy0KIC4uLi9TaGFyZWQvc291cC9X
ZWJDb3JlQXJndW1lbnRDb2RlcnNTb3VwLmNwcCAgICAgIHwgICAgMiArLQogU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwICAgfCAgICAyICstCiBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAgICAgICB8ICAgIDIgKy0KIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwIHwgICAgMiAr
LQogLi4uL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcCAgICAgICAgfCAg
ICAyICstCiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ByaW50aW5nVmlldy5t
bSB8ICAgMTAgKystLQogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1t
ICAgICAgICAgfCAgICA0ICstCiAuLi4vR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFn
ZXJQcm94eS5jcHAgICB8ICAgIDIgKy0KIC4uLi9JbnNwZWN0b3JTZXJ2ZXIvV2ViSW5zcGVjdG9y
U2VydmVyLmNwcCAgICAgICAgIHwgICAgNCArLQogLi4uL0luc3BlY3RvclNlcnZlci9XZWJTb2Nr
ZXRTZXJ2ZXJDb25uZWN0aW9uLmNwcCAgfCAgICA0ICstCiAuLi4vSW5zcGVjdG9yU2VydmVyL3F0
L1dlYkluc3BlY3RvclNlcnZlclF0LmNwcCAgICB8ICAgIDYgKy0tCiAuLi4vVUlQcm9jZXNzL0xh
eWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwICAgICAgICB8ICAgIDIgKy0KIC4uLi9Ob3RpZmlj
YXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5jcHAgIHwgICAgMiArLQogLi4uL1VJ
UHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NQcm94eS5jcHAgICAgICAgfCAgICA0ICstCiBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5jcHAgICAgICAgICAgICB8ICAgIDIg
Ky0KIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJY29uRGF0YWJhc2UuY3BwICAgICAgIHwg
ICAgNiArLS0KIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJlci5j
cHAgIHwgICAxMiArKy0tLQogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94
eS5jcHAgICAgICAgfCAgIDE2ICsrKy0tLS0KIC4uLi9XZWJLaXQyL1VJUHJvY2Vzcy90ZXhtYXAv
TGF5ZXJCYWNraW5nU3RvcmUuY3BwIHwgICAxMCArKy0tCiAuLi4vR2VvbG9jYXRpb25QZXJtaXNz
aW9uUmVxdWVzdE1hbmFnZXIuY3BwICAgICAgICB8ICAgIDQgKy0KIC4uLi9ET00vSW5qZWN0ZWRC
dW5kbGVOb2RlSGFuZGxlLmNwcCAgICAgICAgICAgICAgIHwgICAgNCArLQogLi4uL0RPTS9Jbmpl
Y3RlZEJ1bmRsZVJhbmdlSGFuZGxlLmNwcCAgICAgICAgICAgICAgfCAgICA0ICstCiAuLi4vTm90
aWZpY2F0aW9ucy9XZWJOb3RpZmljYXRpb25NYW5hZ2VyLmNwcCAgICAgICB8ICAgMTIgKystLS0K
IC4uLi9QbHVnaW5zL05ldHNjYXBlL05QUnVudGltZU9iamVjdE1hcC5jcHAgICAgICAgIHwgICAg
MiArLQogLi4uL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbi5jcHAg
fCAgIDE0ICsrKy0tLQogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZp
ZXcuY3BwICAgfCAgICA2ICstLQogLi4uL0xheWVyVHJlZUNvb3JkaW5hdG9yL0xheWVyVHJlZUNv
b3JkaW5hdG9yLmNwcCAgfCAgICA2ICstLQogLi4uL0xheWVyVHJlZUNvb3JkaW5hdG9yL1dlYkdy
YXBoaWNzTGF5ZXIuY3BwICAgICAgfCAgICAyICstCiAuLi4vV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YkJhY2tGb3J3YXJkTGlzdFByb3h5LmNwcCB8ICAgIDQgKy0KIC4uLi9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbSAgIHwgICAgMiArLQogU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcCAgICAgICAgICAgfCAgIDIyICsrKystLS0tLQogLi4u
L2Nocm9taXVtL01vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIuY3BwICAgICAgfCAgICAyICst
CiAuLi4vY2hyb21pdW0vTm90aWZpY2F0aW9uUHJlc2VudGVyLmNwcCAgICAgICAgICAgICB8ICAg
IDQgKy0KIC4uLi9jaHJvbWl1bS9UZXN0UnVubmVyL0NwcEJvdW5kQ2xhc3MuY3BwICAgICAgICAg
IHwgICAxNCArKystLS0KIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZlcmVu
Y2VzLmNwcCAgIHwgICAgNCArLQogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmll
d0hvc3QuY3BwICAgICAgfCAgICAyICstCiAuLi4vRHVtcFJlbmRlclRyZWUvbWFjL0xheW91dFRl
c3RDb250cm9sbGVyTWFjLm1tICB8ICAgIDYgKy0tCiAuLi4vd2luL0FjY2Vzc2liaWxpdHlDb250
cm9sbGVyV2luLmNwcCAgICAgICAgICAgICB8ICAgIDYgKy0tCiAuLi4vRHVtcFJlbmRlclRyZWUv
d2luL0xheW91dFRlc3RDb250cm9sbGVyV2luLmNwcCB8ICAgIDYgKy0tCiBUb29scy9EdW1wUmVu
ZGVyVHJlZS93aW4vUmVzb3VyY2VMb2FkRGVsZWdhdGUuY3BwICB8ICAgIDIgKy0KIC4uLi9XZWJL
aXQyL0RPTVdpbmRvd0V4dGVuc2lvbkJhc2ljX0J1bmRsZS5jcHAgICAgIHwgICAgNCArLQogLi4u
L1dlYktpdDIvRE9NV2luZG93RXh0ZW5zaW9uTm9DYWNoZV9CdW5kbGUuY3BwICAgfCAgICA0ICst
CiAuLi4vSW5qZWN0ZWRCdW5kbGUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwICAgICAgICB8ICAg
IDYgKy0tCiAzNjMgZmlsZXMgY2hhbmdlZCwgMTI2MiBpbnNlcnRpb25zKCspLCAxMjc1IGRlbGV0
aW9ucygtKQoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFj
a09iamVjdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgK
aW5kZXggMmMzZTBlOC4uODg4NmYxMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U0NhbGxiYWNrT2JqZWN0LmgKQEAgLTgzLDEzICs4MywxMyBAQCBzdHJ1Y3QgSlNDYWxsYmFja09i
amVjdERhdGEgOiBXZWFrSGFuZGxlT3duZXIgewogICAgICAgICAgICAgUHJpdmF0ZVByb3BlcnR5
TWFwOjpjb25zdF9pdGVyYXRvciBsb2NhdGlvbiA9IG1fcHJvcGVydHlNYXAuZmluZChwcm9wZXJ0
eU5hbWUuaW1wbCgpKTsKICAgICAgICAgICAgIGlmIChsb2NhdGlvbiA9PSBtX3Byb3BlcnR5TWFw
LmVuZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7Ci0gICAgICAgICAgICBy
ZXR1cm4gbG9jYXRpb24tPnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgIHJldHVybiBsb2NhdGlv
bi0+dmFsdWUuZ2V0KCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHZvaWQgc2V0UHJp
dmF0ZVByb3BlcnR5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlKQogICAgICAgICB7CiAg
ICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gZW1wdHk7Ci0gICAgICAgICAgICBtX3By
b3BlcnR5TWFwLmFkZChwcm9wZXJ0eU5hbWUuaW1wbCgpLCBlbXB0eSkuaXRlcmF0b3ItPnNlY29u
ZC5zZXQoZ2xvYmFsRGF0YSwgb3duZXIsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcHJvcGVydHlN
YXAuYWRkKHByb3BlcnR5TmFtZS5pbXBsKCksIGVtcHR5KS5pdGVyYXRvci0+dmFsdWUuc2V0KGds
b2JhbERhdGEsIG93bmVyLCB2YWx1ZSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHZv
aWQgZGVsZXRlUHJpdmF0ZVByb3BlcnR5KGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkK
QEAgLTEwMCw4ICsxMDAsOCBAQCBzdHJ1Y3QgSlNDYWxsYmFja09iamVjdERhdGEgOiBXZWFrSGFu
ZGxlT3duZXIgewogICAgICAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCiAgICAgICAgIHsKICAgICAgICAgICAgIGZvciAoUHJpdmF0ZVByb3BlcnR5TWFwOjppdGVy
YXRvciBwdHIgPSBtX3Byb3BlcnR5TWFwLmJlZ2luKCk7IHB0ciAhPSBtX3Byb3BlcnR5TWFwLmVu
ZCgpOyArK3B0cikgewotICAgICAgICAgICAgICAgIGlmIChwdHItPnNlY29uZCkKLSAgICAgICAg
ICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJnB0ci0+c2Vjb25kKTsKKyAgICAgICAgICAgICAg
ICBpZiAocHRyLT52YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJnB0
ci0+dmFsdWUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgKaW5kZXggMTYw
ZjQ4OC4uMmNhZTIxYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Nh
bGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgKQEAgLTQ2NSw4ICs0NjUsOCBAQCB2b2lkIEpTQ2Fs
bGJhY2tPYmplY3Q8UGFyZW50Pjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0
LCBFeGVjU3RhdGUqCiAgICAgICAgICAgICB0eXBlZGVmIE9wYXF1ZUpTQ2xhc3NTdGF0aWNWYWx1
ZXNUYWJsZTo6Y29uc3RfaXRlcmF0b3IgaXRlcmF0b3I7CiAgICAgICAgICAgICBpdGVyYXRvciBl
bmQgPSBzdGF0aWNWYWx1ZXMtPmVuZCgpOwogICAgICAgICAgICAgZm9yIChpdGVyYXRvciBpdCA9
IHN0YXRpY1ZhbHVlcy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICAg
ICAgU3RyaW5nSW1wbCogbmFtZSA9IGl0LT5maXJzdC5nZXQoKTsKLSAgICAgICAgICAgICAgICBT
dGF0aWNWYWx1ZUVudHJ5KiBlbnRyeSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICAg
ICAgU3RyaW5nSW1wbCogbmFtZSA9IGl0LT5rZXkuZ2V0KCk7CisgICAgICAgICAgICAgICAgU3Rh
dGljVmFsdWVFbnRyeSogZW50cnkgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICAgICAg
aWYgKGVudHJ5LT5nZXRQcm9wZXJ0eSAmJiAoIShlbnRyeS0+YXR0cmlidXRlcyAmIGtKU1Byb3Bl
cnR5QXR0cmlidXRlRG9udEVudW0pIHx8IChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRp
ZXMpKSkKICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihl
eGVjLCBuYW1lKSk7CiAgICAgICAgICAgICB9CkBAIC00NzYsOCArNDc2LDggQEAgdm9pZCBKU0Nh
bGxiYWNrT2JqZWN0PFBhcmVudD46OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVj
dCwgRXhlY1N0YXRlKgogICAgICAgICAgICAgdHlwZWRlZiBPcGFxdWVKU0NsYXNzU3RhdGljRnVu
Y3Rpb25zVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0ZXJhdG9yOwogICAgICAgICAgICAgaXRlcmF0
b3IgZW5kID0gc3RhdGljRnVuY3Rpb25zLT5lbmQoKTsKICAgICAgICAgICAgIGZvciAoaXRlcmF0
b3IgaXQgPSBzdGF0aWNGdW5jdGlvbnMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAg
ICAgICAgICAgICAgIFN0cmluZ0ltcGwqIG5hbWUgPSBpdC0+Zmlyc3QuZ2V0KCk7Ci0gICAgICAg
ICAgICAgICAgU3RhdGljRnVuY3Rpb25FbnRyeSogZW50cnkgPSBpdC0+c2Vjb25kLmdldCgpOwor
ICAgICAgICAgICAgICAgIFN0cmluZ0ltcGwqIG5hbWUgPSBpdC0+a2V5LmdldCgpOworICAgICAg
ICAgICAgICAgIFN0YXRpY0Z1bmN0aW9uRW50cnkqIGVudHJ5ID0gaXQtPnZhbHVlLmdldCgpOwog
ICAgICAgICAgICAgICAgIGlmICghKGVudHJ5LT5hdHRyaWJ1dGVzICYga0pTUHJvcGVydHlBdHRy
aWJ1dGVEb250RW51bSkgfHwgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykpCiAg
ICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXIoZXhlYywgbmFt
ZSkpOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU0NsYXNzUmVmLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDbGFzc1JlZi5j
cHAKaW5kZXggMTM0NDMxNi4uOTY1ZWVkZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU0NsYXNzUmVmLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
Q2xhc3NSZWYuY3BwCkBAIC0xMDcsMTMgKzEwNywxMyBAQCBPcGFxdWVKU0NsYXNzOjp+T3BhcXVl
SlNDbGFzcygpCiAgICAgaWYgKG1fc3RhdGljVmFsdWVzKSB7CiAgICAgICAgIE9wYXF1ZUpTQ2xh
c3NTdGF0aWNWYWx1ZXNUYWJsZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9zdGF0aWNWYWx1ZXMt
PmVuZCgpOwogICAgICAgICBmb3IgKE9wYXF1ZUpTQ2xhc3NTdGF0aWNWYWx1ZXNUYWJsZTo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtX3N0YXRpY1ZhbHVlcy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KQotICAgICAgICAgICAgQVNTRVJUKCFpdC0+Zmlyc3QtPmlzSWRlbnRpZmllcigpKTsKKyAgICAg
ICAgICAgIEFTU0VSVCghaXQtPmtleS0+aXNJZGVudGlmaWVyKCkpOwogICAgIH0KIAogICAgIGlm
IChtX3N0YXRpY0Z1bmN0aW9ucykgewogICAgICAgICBPcGFxdWVKU0NsYXNzU3RhdGljRnVuY3Rp
b25zVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fc3RhdGljRnVuY3Rpb25zLT5lbmQoKTsK
ICAgICAgICAgZm9yIChPcGFxdWVKU0NsYXNzU3RhdGljRnVuY3Rpb25zVGFibGU6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbV9zdGF0aWNGdW5jdGlvbnMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkK
LSAgICAgICAgICAgIEFTU0VSVCghaXQtPmZpcnN0LT5pc0lkZW50aWZpZXIoKSk7CisgICAgICAg
ICAgICBBU1NFUlQoIWl0LT5rZXktPmlzSWRlbnRpZmllcigpKTsKICAgICB9CiAjZW5kaWYKICAg
ICAKQEAgLTE0Nyw4ICsxNDcsOCBAQCBPcGFxdWVKU0NsYXNzQ29udGV4dERhdGE6Ok9wYXF1ZUpT
Q2xhc3NDb250ZXh0RGF0YShKU0M6OkpTR2xvYmFsRGF0YSYsIE9wYXF1ZUpTQwogICAgICAgICBz
dGF0aWNWYWx1ZXMgPSBhZG9wdFB0cihuZXcgT3BhcXVlSlNDbGFzc1N0YXRpY1ZhbHVlc1RhYmxl
KTsKICAgICAgICAgT3BhcXVlSlNDbGFzc1N0YXRpY1ZhbHVlc1RhYmxlOjpjb25zdF9pdGVyYXRv
ciBlbmQgPSBqc0NsYXNzLT5tX3N0YXRpY1ZhbHVlcy0+ZW5kKCk7CiAgICAgICAgIGZvciAoT3Bh
cXVlSlNDbGFzc1N0YXRpY1ZhbHVlc1RhYmxlOjpjb25zdF9pdGVyYXRvciBpdCA9IGpzQ2xhc3Mt
Pm1fc3RhdGljVmFsdWVzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAg
IEFTU0VSVCghaXQtPmZpcnN0LT5pc0lkZW50aWZpZXIoKSk7Ci0gICAgICAgICAgICBzdGF0aWNW
YWx1ZXMtPmFkZChTdHJpbmdJbXBsOjpjcmVhdGUoaXQtPmZpcnN0LT5jaGFyYWN0ZXJzKCksIGl0
LT5maXJzdC0+bGVuZ3RoKCkpLCBhZG9wdFB0cihuZXcgU3RhdGljVmFsdWVFbnRyeShpdC0+c2Vj
b25kLT5nZXRQcm9wZXJ0eSwgaXQtPnNlY29uZC0+c2V0UHJvcGVydHksIGl0LT5zZWNvbmQtPmF0
dHJpYnV0ZXMpKSk7CisgICAgICAgICAgICBBU1NFUlQoIWl0LT5rZXktPmlzSWRlbnRpZmllcigp
KTsKKyAgICAgICAgICAgIHN0YXRpY1ZhbHVlcy0+YWRkKFN0cmluZ0ltcGw6OmNyZWF0ZShpdC0+
a2V5LT5jaGFyYWN0ZXJzKCksIGl0LT5rZXktPmxlbmd0aCgpKSwgYWRvcHRQdHIobmV3IFN0YXRp
Y1ZhbHVlRW50cnkoaXQtPnZhbHVlLT5nZXRQcm9wZXJ0eSwgaXQtPnZhbHVlLT5zZXRQcm9wZXJ0
eSwgaXQtPnZhbHVlLT5hdHRyaWJ1dGVzKSkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xNTYs
MTUgKzE1NiwxNSBAQCBPcGFxdWVKU0NsYXNzQ29udGV4dERhdGE6Ok9wYXF1ZUpTQ2xhc3NDb250
ZXh0RGF0YShKU0M6OkpTR2xvYmFsRGF0YSYsIE9wYXF1ZUpTQwogICAgICAgICBzdGF0aWNGdW5j
dGlvbnMgPSBhZG9wdFB0cihuZXcgT3BhcXVlSlNDbGFzc1N0YXRpY0Z1bmN0aW9uc1RhYmxlKTsK
ICAgICAgICAgT3BhcXVlSlNDbGFzc1N0YXRpY0Z1bmN0aW9uc1RhYmxlOjpjb25zdF9pdGVyYXRv
ciBlbmQgPSBqc0NsYXNzLT5tX3N0YXRpY0Z1bmN0aW9ucy0+ZW5kKCk7CiAgICAgICAgIGZvciAo
T3BhcXVlSlNDbGFzc1N0YXRpY0Z1bmN0aW9uc1RhYmxlOjpjb25zdF9pdGVyYXRvciBpdCA9IGpz
Q2xhc3MtPm1fc3RhdGljRnVuY3Rpb25zLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAg
ICAgICAgICAgIEFTU0VSVCghaXQtPmZpcnN0LT5pc0lkZW50aWZpZXIoKSk7Ci0gICAgICAgICAg
ICBzdGF0aWNGdW5jdGlvbnMtPmFkZChTdHJpbmdJbXBsOjpjcmVhdGUoaXQtPmZpcnN0LT5jaGFy
YWN0ZXJzKCksIGl0LT5maXJzdC0+bGVuZ3RoKCkpLCBhZG9wdFB0cihuZXcgU3RhdGljRnVuY3Rp
b25FbnRyeShpdC0+c2Vjb25kLT5jYWxsQXNGdW5jdGlvbiwgaXQtPnNlY29uZC0+YXR0cmlidXRl
cykpKTsKKyAgICAgICAgICAgIEFTU0VSVCghaXQtPmtleS0+aXNJZGVudGlmaWVyKCkpOworICAg
ICAgICAgICAgc3RhdGljRnVuY3Rpb25zLT5hZGQoU3RyaW5nSW1wbDo6Y3JlYXRlKGl0LT5rZXkt
PmNoYXJhY3RlcnMoKSwgaXQtPmtleS0+bGVuZ3RoKCkpLCBhZG9wdFB0cihuZXcgU3RhdGljRnVu
Y3Rpb25FbnRyeShpdC0+dmFsdWUtPmNhbGxBc0Z1bmN0aW9uLCBpdC0+dmFsdWUtPmF0dHJpYnV0
ZXMpKSk7CiAgICAgICAgIH0KICAgICB9CiB9CiAKIE9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YSYg
T3BhcXVlSlNDbGFzczo6Y29udGV4dERhdGEoRXhlY1N0YXRlKiBleGVjKQogewotICAgIE93blB0
cjxPcGFxdWVKU0NsYXNzQ29udGV4dERhdGE+JiBjb250ZXh0RGF0YSA9IGV4ZWMtPmdsb2JhbERh
dGEoKS5vcGFxdWVKU0NsYXNzRGF0YS5hZGQodGhpcywgbnVsbHB0cikuaXRlcmF0b3ItPnNlY29u
ZDsKKyAgICBPd25QdHI8T3BhcXVlSlNDbGFzc0NvbnRleHREYXRhPiYgY29udGV4dERhdGEgPSBl
eGVjLT5nbG9iYWxEYXRhKCkub3BhcXVlSlNDbGFzc0RhdGEuYWRkKHRoaXMsIG51bGxwdHIpLml0
ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoIWNvbnRleHREYXRhKQogICAgICAgICBjb250ZXh0RGF0
YSA9IGFkb3B0UHRyKG5ldyBPcGFxdWVKU0NsYXNzQ29udGV4dERhdGEoZXhlYy0+Z2xvYmFsRGF0
YSgpLCB0aGlzKSk7CiAgICAgcmV0dXJuICpjb250ZXh0RGF0YTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKaW5kZXggNTM3NGE1My4uMjYzOWQ3MiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKQEAgLTY1Niw3
ICs2NTYsNyBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAg
ICAgICBkYXRhTG9nKCIgICUxZCA9IHtcbiIsIGkpOwogICAgICAgICAgICAgU3RyaW5nSnVtcFRh
YmxlOjpTdHJpbmdPZmZzZXRUYWJsZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9yYXJlRGF0YS0+
bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW2ldLm9mZnNldFRhYmxlLmVuZCgpOwogICAgICAgICAg
ICAgZm9yIChTdHJpbmdKdW1wVGFibGU6OlN0cmluZ09mZnNldFRhYmxlOjpjb25zdF9pdGVyYXRv
ciBpdGVyID0gbV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW2ldLm9mZnNldFRh
YmxlLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCi0gICAgICAgICAgICAgICAgZGF0YUxv
ZygiXHRcdFwiJXNcIiA9PiAlMDRkXG4iLCBVU3RyaW5nKGl0ZXItPmZpcnN0KS51dGY4KCkuZGF0
YSgpLCBpdGVyLT5zZWNvbmQuYnJhbmNoT2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBkYXRhTG9n
KCJcdFx0XCIlc1wiID0+ICUwNGRcbiIsIFVTdHJpbmcoaXRlci0+a2V5KS51dGY4KCkuZGF0YSgp
LCBpdGVyLT52YWx1ZS5icmFuY2hPZmZzZXQpOwogICAgICAgICAgICAgZGF0YUxvZygiICAgICAg
fVxuIik7CiAgICAgICAgICAgICArK2k7CiAgICAgICAgIH0gd2hpbGUgKGkgPCBtX3JhcmVEYXRh
LT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuc2l6ZSgpKTsKQEAgLTE4ODksNyArMTg4OSw3IEBA
IHZvaWQgRXZhbENvZGVDYWNoZTo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgRXZhbENhY2hlTWFwOjppdGVyYXRvciBlbmQgPSBtX2NhY2hlTWFwLmVuZCgpOwog
ICAgIGZvciAoRXZhbENhY2hlTWFwOjppdGVyYXRvciBwdHIgPSBtX2NhY2hlTWFwLmJlZ2luKCk7
IHB0ciAhPSBlbmQ7ICsrcHRyKQotICAgICAgICB2aXNpdG9yLmFwcGVuZCgmcHRyLT5zZWNvbmQp
OworICAgICAgICB2aXNpdG9yLmFwcGVuZCgmcHRyLT52YWx1ZSk7CiB9CiAKIHZvaWQgQ29kZUJs
b2NrOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKQEAgLTI5NDYsOCArMjk0
Niw4IEBAIFVTdHJpbmcgQ29kZUJsb2NrOjpuYW1lRm9yUmVnaXN0ZXIoaW50IHJlZ2lzdGVyTnVt
YmVyKQogewogICAgIFN5bWJvbFRhYmxlOjppdGVyYXRvciBlbmQgPSBtX3N5bWJvbFRhYmxlLT5l
bmQoKTsKICAgICBmb3IgKFN5bWJvbFRhYmxlOjppdGVyYXRvciBwdHIgPSBtX3N5bWJvbFRhYmxl
LT5iZWdpbigpOyBwdHIgIT0gZW5kOyArK3B0cikgewotICAgICAgICBpZiAocHRyLT5zZWNvbmQu
Z2V0SW5kZXgoKSA9PSByZWdpc3Rlck51bWJlcikKLSAgICAgICAgICAgIHJldHVybiBVU3RyaW5n
KHB0ci0+Zmlyc3QpOworICAgICAgICBpZiAocHRyLT52YWx1ZS5nZXRJbmRleCgpID09IHJlZ2lz
dGVyTnVtYmVyKQorICAgICAgICAgICAgcmV0dXJuIFVTdHJpbmcocHRyLT5rZXkpOwogICAgIH0K
ICAgICBpZiAobmVlZHNBY3RpdmF0aW9uKCkgJiYgcmVnaXN0ZXJOdW1iZXIgPT0gYWN0aXZhdGlv
blJlZ2lzdGVyKCkpCiAgICAgICAgIHJldHVybiAiYWN0aXZhdGlvbiI7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSnVtcFRhYmxlLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvSnVtcFRhYmxlLmgKaW5kZXggNWJiZTA0Ny4uNjAzNmNkYSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0p1bXBUYWJsZS5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9KdW1wVGFibGUuaApAQCAtNTcsNyArNTcs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIFN0cmluZ09mZnNldFRhYmxlOjpjb25z
dF9pdGVyYXRvciBsb2MgPSBvZmZzZXRUYWJsZS5maW5kKHZhbHVlKTsKICAgICAgICAgICAgIGlm
IChsb2MgPT0gZW5kKQogICAgICAgICAgICAgICAgIHJldHVybiBkZWZhdWx0T2Zmc2V0OwotICAg
ICAgICAgICAgcmV0dXJuIGxvYy0+c2Vjb25kLmJyYW5jaE9mZnNldDsKKyAgICAgICAgICAgIHJl
dHVybiBsb2MtPnZhbHVlLmJyYW5jaE9mZnNldDsKICAgICAgICAgfQogCiAjaWYgRU5BQkxFKEpJ
VCkKQEAgLTY3LDcgKzY3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBTdHJpbmdP
ZmZzZXRUYWJsZTo6Y29uc3RfaXRlcmF0b3IgbG9jID0gb2Zmc2V0VGFibGUuZmluZCh2YWx1ZSk7
CiAgICAgICAgICAgICBpZiAobG9jID09IGVuZCkKICAgICAgICAgICAgICAgICByZXR1cm4gY3Rp
RGVmYXVsdDsKLSAgICAgICAgICAgIHJldHVybiBsb2MtPnNlY29uZC5jdGlPZmZzZXQ7CisgICAg
ICAgICAgICByZXR1cm4gbG9jLT52YWx1ZS5jdGlPZmZzZXQ7CiAgICAgICAgIH0KICNlbmRpZgog
ICAgIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGF6eU9w
ZXJhbmRWYWx1ZVByb2ZpbGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xh
enlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcAppbmRleCA1OWYwZDAyLi5mOTIzZTRhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVByb2Zp
bGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MYXp5T3BlcmFuZFZh
bHVlUHJvZmlsZS5jcHAKQEAgLTgxLDcgKzgxLDcgQEAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUq
IExhenlPcGVyYW5kVmFsdWVQcm9maWxlUGFyc2VyOjpnZXRJZlByZXNlbnQoCiAgICAgaWYgKGl0
ZXIgPT0gbV9tYXAuZW5kKCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIAotICAgIHJldHVybiBp
dGVyLT5zZWNvbmQ7CisgICAgcmV0dXJuIGl0ZXItPnZhbHVlOwogfQogCiBTcGVjdWxhdGVkVHlw
ZSBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZVBhcnNlcjo6cHJlZGljdGlvbigKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TYW1wbGluZ1Rvb2wuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NhbXBsaW5nVG9vbC5jcHAKaW5kZXggZjA3ZGM3OS4u
ZjliODI0NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NhbXBs
aW5nVG9vbC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NhbXBsaW5n
VG9vbC5jcHAKQEAgLTQxMCw3ICs0MTAsNyBAQCB2b2lkIFNhbXBsaW5nVG9vbDo6ZHVtcChFeGVj
U3RhdGUqIGV4ZWMpCiAgICAgVmVjdG9yPFNjcmlwdFNhbXBsZVJlY29yZCo+IGNvZGVCbG9ja1Nh
bXBsZXMoc2NvcGVDb3VudCk7CiAgICAgU2NyaXB0U2FtcGxlUmVjb3JkTWFwOjppdGVyYXRvciBp
dGVyID0gbV9zY29wZVNhbXBsZU1hcC0+YmVnaW4oKTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8
IHNjb3BlQ291bnQ7ICsraSwgKytpdGVyKQotICAgICAgICBjb2RlQmxvY2tTYW1wbGVzW2ldID0g
aXRlci0+c2Vjb25kLmdldCgpOworICAgICAgICBjb2RlQmxvY2tTYW1wbGVzW2ldID0gaXRlci0+
dmFsdWUuZ2V0KCk7CiAKICAgICBxc29ydChjb2RlQmxvY2tTYW1wbGVzLmJlZ2luKCksIHNjb3Bl
Q291bnQsIHNpemVvZihTY3JpcHRTYW1wbGVSZWNvcmQqKSwgY29tcGFyZVNjcmlwdFNhbXBsZVJl
Y29yZHMpOwogCkBAIC00NDYsOCArNDQ2LDggQEAgdm9pZCBTYW1wbGluZ1Rvb2w6OmR1bXAoRXhl
Y1N0YXRlKiBleGVjKQogICAgICAgICAgICAgICAgIFZlY3RvcjxMaW5lQ291bnRJbmZvPiBsaW5l
Q291bnRJbmZvKGxpbmVzQ291bnQpOwogICAgICAgICAgICAgICAgIGludCBsaW5lbm8gPSAwOwog
ICAgICAgICAgICAgICAgIGZvciAoSGFzaE1hcDx1bnNpZ25lZCx1bnNpZ25lZD46Oml0ZXJhdG9y
IGl0ZXIgPSBsaW5lQ291bnRzLmJlZ2luKCk7IGl0ZXIgIT0gbGluZUNvdW50cy5lbmQoKTsgKytp
dGVyLCArK2xpbmVubykgewotICAgICAgICAgICAgICAgICAgICBsaW5lQ291bnRJbmZvW2xpbmVu
b10ubGluZSA9IGl0ZXItPmZpcnN0OwotICAgICAgICAgICAgICAgICAgICBsaW5lQ291bnRJbmZv
W2xpbmVub10uY291bnQgPSBpdGVyLT5zZWNvbmQ7CisgICAgICAgICAgICAgICAgICAgIGxpbmVD
b3VudEluZm9bbGluZW5vXS5saW5lID0gaXRlci0+a2V5OworICAgICAgICAgICAgICAgICAgICBs
aW5lQ291bnRJbmZvW2xpbmVub10uY291bnQgPSBpdGVyLT52YWx1ZTsKICAgICAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgICAgICBxc29ydChsaW5lQ291bnRJbmZvLmJlZ2luKCksIGxpbmVz
Q291bnQsIHNpemVvZihMaW5lQ291bnRJbmZvKSwgY29tcGFyZUxpbmVDb3VudEluZm9TYW1wbGlu
Zyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0
ZWNvZGVHZW5lcmF0b3IuY3BwCmluZGV4IDMzZjI4MmMuLmVlYzlkNjUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
Y3BwCkBAIC0yMTIsNyArMjEyLDcgQEAgYm9vbCBCeXRlY29kZUdlbmVyYXRvcjo6YWRkVmFyKGNv
bnN0IElkZW50aWZpZXImIGlkZW50LCBib29sIGlzQ29uc3RhbnQsIFJlZ2lzdGUKICAgICBTeW1i
b2xUYWJsZTo6QWRkUmVzdWx0IHJlc3VsdCA9IHN5bWJvbFRhYmxlKCkuYWRkKGlkZW50LmltcGwo
KSwgbmV3RW50cnkpOwogCiAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICBy
MCA9ICZyZWdpc3RlckZvcihyZXN1bHQuaXRlcmF0b3ItPnNlY29uZC5nZXRJbmRleCgpKTsKKyAg
ICAgICAgcjAgPSAmcmVnaXN0ZXJGb3IocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXRJbmRleCgp
KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtMjMwLDggKzIzMCw4IEBAIGlu
dCBCeXRlY29kZUdlbmVyYXRvcjo6YWRkR2xvYmFsVmFyKAogICAgICAgICBuZXdFbnRyeS5hdHRl
bXB0VG9XYXRjaCgpOwogICAgIFN5bWJvbFRhYmxlOjpBZGRSZXN1bHQgcmVzdWx0ID0gc3ltYm9s
VGFibGUoKS5hZGQoaWRlbnQuaW1wbCgpLCBuZXdFbnRyeSk7CiAgICAgaWYgKCFyZXN1bHQuaXNO
ZXdFbnRyeSkgewotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZC5ub3RpZnlXcml0ZSgp
OwotICAgICAgICBpbmRleCA9IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLmdldEluZGV4KCk7Cisg
ICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUubm90aWZ5V3JpdGUoKTsKKyAgICAgICAgaW5k
ZXggPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldEluZGV4KCk7CiAgICAgfQogICAgIHJldHVy
biBpbmRleDsKIH0KQEAgLTEwMzYsNyArMTAzNiw3IEBAIHVuc2lnbmVkIEJ5dGVjb2RlR2VuZXJh
dG9yOjphZGRDb25zdGFudChjb25zdCBJZGVudGlmaWVyJiBpZGVudCkKICAgICBpZiAocmVzdWx0
LmlzTmV3RW50cnkpCiAgICAgICAgIG1fY29kZUJsb2NrLT5hZGRJZGVudGlmaWVyKElkZW50aWZp
ZXIobV9nbG9iYWxEYXRhLCByZXApKTsKIAotICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnNl
Y29uZDsKKyAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIAogUmVnaXN0ZXJJ
RCogQnl0ZWNvZGVHZW5lcmF0b3I6OmFkZENvbnN0YW50VmFsdWUoSlNWYWx1ZSB2KQpAQCAtMTA0
OSw3ICsxMDQ5LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmFkZENvbnN0YW50
VmFsdWUoSlNWYWx1ZSB2KQogICAgICAgICArK21fbmV4dENvbnN0YW50T2Zmc2V0OwogICAgICAg
ICBtX2NvZGVCbG9jay0+YWRkQ29uc3RhbnQoSlNWYWx1ZSh2KSk7CiAgICAgfSBlbHNlCi0gICAg
ICAgIGluZGV4ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgIGluZGV4ID0gcmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZTsKIAogICAgIHJldHVybiAmbV9jb25zdGFudFBvb2xSZWdpc3Rl
cnNbaW5kZXhdOwogfQpAQCAtMTE5Niw3ICsxMTk2LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXRMb2FkKFJlZ2lzdGVySUQqIGRzdCwgZG91YmxlIG51bWJlcikKICAgICAv
LyB3b3JrIGNvcnJlY3RseSB3aXRoIE5hTiBhcyBhIGtleS4KICAgICBpZiAoaXNuYW4obnVtYmVy
KSB8fCBudW1iZXIgPT0gSGFzaFRyYWl0czxkb3VibGU+OjplbXB0eVZhbHVlKCkgfHwgSGFzaFRy
YWl0czxkb3VibGU+Ojppc0RlbGV0ZWRWYWx1ZShudW1iZXIpKQogICAgICAgICByZXR1cm4gZW1p
dExvYWQoZHN0LCBqc051bWJlcihudW1iZXIpKTsKLSAgICBKU1ZhbHVlJiB2YWx1ZUluTWFwID0g
bV9udW1iZXJNYXAuYWRkKG51bWJlciwgSlNWYWx1ZSgpKS5pdGVyYXRvci0+c2Vjb25kOworICAg
IEpTVmFsdWUmIHZhbHVlSW5NYXAgPSBtX251bWJlck1hcC5hZGQobnVtYmVyLCBKU1ZhbHVlKCkp
Lml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoIXZhbHVlSW5NYXApCiAgICAgICAgIHZhbHVlSW5N
YXAgPSBqc051bWJlcihudW1iZXIpOwogICAgIHJldHVybiBlbWl0TG9hZChkc3QsIHZhbHVlSW5N
YXApOwpAQCAtMTIwNCw3ICsxMjA0LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRMb2FkKFJlZ2lzdGVySUQqIGRzdCwgZG91YmxlIG51bWJlcikKIAogUmVnaXN0ZXJJRCog
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRMb2FkKFJlZ2lzdGVySUQqIGRzdCwgY29uc3QgSWRlbnRp
ZmllciYgaWRlbnRpZmllcikKIHsKLSAgICBKU1N0cmluZyomIHN0cmluZ0luTWFwID0gbV9zdHJp
bmdNYXAuYWRkKGlkZW50aWZpZXIuaW1wbCgpLCAwKS5pdGVyYXRvci0+c2Vjb25kOworICAgIEpT
U3RyaW5nKiYgc3RyaW5nSW5NYXAgPSBtX3N0cmluZ01hcC5hZGQoaWRlbnRpZmllci5pbXBsKCks
IDApLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoIXN0cmluZ0luTWFwKQogICAgICAgICBzdHJp
bmdJbk1hcCA9IGpzT3duZWRTdHJpbmcoZ2xvYmFsRGF0YSgpLCBpZGVudGlmaWVyLnVzdHJpbmco
KSk7CiAgICAgcmV0dXJuIGVtaXRMb2FkKGRzdCwgSlNWYWx1ZShzdHJpbmdJbk1hcCkpOwpAQCAt
MTc0Miw3ICsxNzQyLDcgQEAgdW5zaWduZWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmFkZENvbnN0YW50
QnVmZmVyKHVuc2lnbmVkIGxlbmd0aCkKIAogSlNTdHJpbmcqIEJ5dGVjb2RlR2VuZXJhdG9yOjph
ZGRTdHJpbmdDb25zdGFudChjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKQogewotICAgIEpT
U3RyaW5nKiYgc3RyaW5nSW5NYXAgPSBtX3N0cmluZ01hcC5hZGQoaWRlbnRpZmllci5pbXBsKCks
IDApLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgSlNTdHJpbmcqJiBzdHJpbmdJbk1hcCA9IG1fc3Ry
aW5nTWFwLmFkZChpZGVudGlmaWVyLmltcGwoKSwgMCkuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlm
ICghc3RyaW5nSW5NYXApIHsKICAgICAgICAgc3RyaW5nSW5NYXAgPSBqc1N0cmluZyhnbG9iYWxE
YXRhKCksIGlkZW50aWZpZXIudXN0cmluZygpKTsKICAgICAgICAgYWRkQ29uc3RhbnRWYWx1ZShz
dHJpbmdJbk1hcCk7CkBAIC0xODE0LDggKzE4MTQsOCBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdExhenlOZXdGdW5jdGlvbihSZWdpc3RlcklEKiBkc3QsIEZ1bmN0aW9uQm9k
eQogewogICAgIEZ1bmN0aW9uT2Zmc2V0TWFwOjpBZGRSZXN1bHQgcHRyID0gbV9mdW5jdGlvbk9m
ZnNldHMuYWRkKGZ1bmN0aW9uLCAwKTsKICAgICBpZiAocHRyLmlzTmV3RW50cnkpCi0gICAgICAg
IHB0ci5pdGVyYXRvci0+c2Vjb25kID0gbV9jb2RlQmxvY2stPmFkZEZ1bmN0aW9uRGVjbChtYWtl
RnVuY3Rpb24obV9nbG9iYWxEYXRhLCBmdW5jdGlvbikpOwotICAgIHJldHVybiBlbWl0TmV3RnVu
Y3Rpb25JbnRlcm5hbChkc3QsIHB0ci5pdGVyYXRvci0+c2Vjb25kLCB0cnVlKTsKKyAgICAgICAg
cHRyLml0ZXJhdG9yLT52YWx1ZSA9IG1fY29kZUJsb2NrLT5hZGRGdW5jdGlvbkRlY2wobWFrZUZ1
bmN0aW9uKG1fZ2xvYmFsRGF0YSwgZnVuY3Rpb24pKTsKKyAgICByZXR1cm4gZW1pdE5ld0Z1bmN0
aW9uSW50ZXJuYWwoZHN0LCBwdHIuaXRlcmF0b3ItPnZhbHVlLCB0cnVlKTsKIH0KIAogUmVnaXN0
ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXROZXdGdW5jdGlvbkludGVybmFsKFJlZ2lzdGVy
SUQqIGRzdCwgdW5zaWduZWQgaW5kZXgsIGJvb2wgZG9OdWxsQ2hlY2spCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKaW5kZXggZDI0
M2U4Yy4uMGJmNjZhNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9Ob2Rlc0NvZGVnZW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvTm9kZXNDb2RlZ2VuLmNwcApAQCAtMjU4LDcgKzI1OCw3IEBAIFJlZ2lzdGVySUQqIFBy
b3BlcnR5TGlzdE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9y
LCBSZWdpc3RlCiAgICAgICAgICAgICBHZXR0ZXJTZXR0ZXJQYWlyIHBhaXIobm9kZSwgc3RhdGlj
X2Nhc3Q8UHJvcGVydHlOb2RlKj4oMCkpOwogICAgICAgICAgICAgR2V0dGVyU2V0dGVyTWFwOjpB
ZGRSZXN1bHQgcmVzdWx0ID0gbWFwLmFkZChub2RlLT5uYW1lKCkuaW1wbCgpLCBwYWlyKTsKICAg
ICAgICAgICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgICAgICAgICAgcmVzdWx0
Lml0ZXJhdG9yLT5zZWNvbmQuc2Vjb25kID0gbm9kZTsKKyAgICAgICAgICAgICAgICByZXN1bHQu
aXRlcmF0b3ItPnZhbHVlLnNlY29uZCA9IG5vZGU7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBJ
dGVyYXRlIG92ZXIgdGhlIHJlbWFpbmluZyBwcm9wZXJ0aWVzIGluIHRoZSBsaXN0LgpAQCAtMjc2
LDcgKzI3Niw3IEBAIFJlZ2lzdGVySUQqIFByb3BlcnR5TGlzdE5vZGU6OmVtaXRCeXRlY29kZShC
eXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlCiAgICAgICAgICAgICBBU1NFUlQo
bm9kZS0+bV90eXBlID09IFByb3BlcnR5Tm9kZTo6R2V0dGVyIHx8IG5vZGUtPm1fdHlwZSA9PSBQ
cm9wZXJ0eU5vZGU6OlNldHRlcik7CiAgICAgICAgICAgICBHZXR0ZXJTZXR0ZXJNYXA6Oml0ZXJh
dG9yIGl0ID0gbWFwLmZpbmQobm9kZS0+bmFtZSgpLmltcGwoKSk7CiAgICAgICAgICAgICBBU1NF
UlQoaXQgIT0gbWFwLmVuZCgpKTsKLSAgICAgICAgICAgIEdldHRlclNldHRlclBhaXImIHBhaXIg
PSBpdC0+c2Vjb25kOworICAgICAgICAgICAgR2V0dGVyU2V0dGVyUGFpciYgcGFpciA9IGl0LT52
YWx1ZTsKIAogICAgICAgICAgICAgLy8gV2FzIHRoaXMgYWxyZWFkeSBnZW5lcmF0ZWQgYXMgYSBw
YXJ0IG9mIGl0cyBwYXJ0bmVyPwogICAgICAgICAgICAgaWYgKHBhaXIuc2Vjb25kID09IG5vZGUp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcAppbmRleCAwYTY2
ZDZmLi41NDgzZDJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIv
RGVidWdnZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dl
ci5jcHAKQEAgLTU5LDcgKzU5LDcgQEAgaW5saW5lIFJlY29tcGlsZXI6On5SZWNvbXBpbGVyKCkK
ICAgICAvLyBKYXZhU2NyaXB0IGluIHRoZSBpbnNwZWN0b3IuCiAgICAgU291cmNlUHJvdmlkZXJN
YXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fc291cmNlUHJvdmlkZXJzLmVuZCgpOwogICAgIGZv
ciAoU291cmNlUHJvdmlkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX3NvdXJjZVByb3Zp
ZGVycy5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQotICAgICAgICBtX2RlYnVnZ2VyLT5z
b3VyY2VQYXJzZWQoaXRlci0+c2Vjb25kLCBpdGVyLT5maXJzdCwgLTEsIFVTdHJpbmcoKSk7Cisg
ICAgICAgIG1fZGVidWdnZXItPnNvdXJjZVBhcnNlZChpdGVyLT52YWx1ZSwgaXRlci0+a2V5LCAt
MSwgVVN0cmluZygpKTsKIH0KIAogaW5saW5lIHZvaWQgUmVjb21waWxlcjo6b3BlcmF0b3IoKShK
U0NlbGwqIGNlbGwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fy
Z3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAppbmRleCA5MjA4Y2RlLi44OGQ0
MDViIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1Np
bXBsaWZpY2F0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKQEAgLTIxNCw3ICsyMTQsNyBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBpZiBpdCdzIGEg
dmFyaWFibGUgdGhhdCB3ZSB0aGluayBpcyBhbGlhc2VkIHRvCiAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyB0aGUgYXJndW1lbnRzLCB0aGF0IHdlIGtub3cgdGhhdCBpdCBtaWdodCBhY3R1YWxs
eSBub3QgYmUuCiAgICAgICAgICAgICAgICAgICAgICAgICBBcmd1bWVudHNBbGlhc2luZ0RhdGEm
IGRhdGEgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fYXJndW1lbnRzQWxpYXNpbmcu
ZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT5zZWNvbmQ7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9hcmd1bWVudHNBbGlhc2luZy5maW5kKHZhcmlhYmxlQWNjZXNzRGF0YSktPnZhbHVl
OwogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXJnZU5vbkFyZ3VtZW50c0Fzc2lnbm1l
bnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEubWVyZ2VDYWxsQ29udGV4dChub2Rl
LmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtMjMyLDcgKzIzMiw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIEFyZ3Vt
ZW50c0FsaWFzaW5nRGF0YSYgZGF0YSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2FyZ3Vt
ZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+c2Vjb25kOworICAgICAgICAg
ICAgICAgICAgICAgICAgbV9hcmd1bWVudHNBbGlhc2luZy5maW5kKHZhcmlhYmxlQWNjZXNzRGF0
YSktPnZhbHVlOwogICAgICAgICAgICAgICAgICAgICBkYXRhLm1lcmdlQXJndW1lbnRzQXNzaWdu
bWVudCgpOwogICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgdmFy
aWFibGUncyB1c2VzIGFyZSBpbiB0aGUgc2FtZSBjb250ZXh0IGFzCiAgICAgICAgICAgICAgICAg
ICAgIC8vIHRoZSBhcmd1bWVudHMgaXQgaXMgYWxpYXNpbmcuCkBAIC0yNDcsNyArMjQ3LDcgQEAg
cHVibGljOgogICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5pc0Nh
cHR1cmVkKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICAgICAgQXJndW1lbnRzQWxpYXNpbmdEYXRhJiBkYXRhID0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIG1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT5zZWNvbmQ7
CisgICAgICAgICAgICAgICAgICAgICAgICBtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFi
bGVBY2Nlc3NEYXRhKS0+dmFsdWU7CiAgICAgICAgICAgICAgICAgICAgIGRhdGEubWVyZ2VDYWxs
Q29udGV4dChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQpAQCAtMjU3LDcgKzI1Nyw3IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJl
ZCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAg
IEFyZ3VtZW50c0FsaWFzaW5nRGF0YSYgZGF0YSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICBt
X2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+c2Vjb25kOworICAg
ICAgICAgICAgICAgICAgICAgICAgbV9hcmd1bWVudHNBbGlhc2luZy5maW5kKHZhcmlhYmxlQWNj
ZXNzRGF0YSktPnZhbHVlOwogICAgICAgICAgICAgICAgICAgICBkYXRhLm1lcmdlQ2FsbENvbnRl
eHQobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CiAgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgICAgICAvLyBJZiBhIHZhcmlhYmxlIGlzIHVzZWQgaW4gYSBmbHVz
aCB0aGVuIGJ5IGRlZmluaXRpb24gaXQgZXNjYXBlcy4KQEAgLTI3MCw3ICsyNzAsNyBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVy
ZWQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAg
ICBBcmd1bWVudHNBbGlhc2luZ0RhdGEmIGRhdGEgPQotICAgICAgICAgICAgICAgICAgICAgICAg
bV9hcmd1bWVudHNBbGlhc2luZy5maW5kKHZhcmlhYmxlQWNjZXNzRGF0YSktPnNlY29uZDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFj
Y2Vzc0RhdGEpLT52YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXJnZU5vbkFyZ3Vt
ZW50c0Fzc2lnbm1lbnQoKTsKICAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXJnZUNhbGxDb250
ZXh0KG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKQEAgLTM1MSw3ICszNTEsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIEFyZ3VtZW50c0FsaWFzaW5nRGF0YSYg
ZGF0YSA9Ci0gICAgICAgICAgICAgICAgICAgIG1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJp
YWJsZUFjY2Vzc0RhdGEpLT5zZWNvbmQ7CisgICAgICAgICAgICAgICAgICAgIG1fYXJndW1lbnRz
QWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT52YWx1ZTsKICAgICAgICAgICAgICAg
ICBpZiAoZGF0YS5pc1ZhbGlkKCkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgICAgIApAQCAtNDUxLDcgKzQ1MSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAg
ICAgICAgLy8gdGhpbmdzLiBOb3RlIGFsc28gdGhhdCB0aGUgU2V0TG9jYWwgc2hvdWxkIGJlY29t
ZSBkZWFkIGFzIHNvb24gYXMKICAgICAgICAgICAgICAgICAgICAgLy8gd2UgcmVwbGFjZSBhbGwg
dXNlcyBvZiB0aGlzIHZhcmlhYmxlIHdpdGggR2V0TXlBcmd1bWVudHNMZW5ndGggYW5kCiAgICAg
ICAgICAgICAgICAgICAgIC8vIEdldE15QXJndW1lbnRCeVZhbC4KLSAgICAgICAgICAgICAgICAg
ICAgQVNTRVJUKG1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT5z
ZWNvbmQuaXNWYWxpZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1fYXJndW1lbnRz
QWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT52YWx1ZS5pc1ZhbGlkKCkpOwogICAg
ICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IHZhcmlhYmxlQWNjZXNzRGF0YS0+bWVyZ2VJc0Fy
Z3VtZW50c0FsaWFzKHRydWUpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICB9CkBAIC03MDMsNyArNzAzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmICh2
YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKSkKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIAotICAgICAgICAgICAgQXJndW1lbnRzQWxpYXNpbmdEYXRhJiBkYXRhID0g
bV9hcmd1bWVudHNBbGlhc2luZy5maW5kKHZhcmlhYmxlQWNjZXNzRGF0YSktPnNlY29uZDsKKyAg
ICAgICAgICAgIEFyZ3VtZW50c0FsaWFzaW5nRGF0YSYgZGF0YSA9IG1fYXJndW1lbnRzQWxpYXNp
bmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT52YWx1ZTsKICAgICAgICAgICAgIGRhdGEuZXNj
YXBlcyA9IHRydWU7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtNzUwLDcgKzc1
MCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAg
Ci0gICAgICAgIEFyZ3VtZW50c0FsaWFzaW5nRGF0YSYgZGF0YSA9IG1fYXJndW1lbnRzQWxpYXNp
bmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT5zZWNvbmQ7CisgICAgICAgIEFyZ3VtZW50c0Fs
aWFzaW5nRGF0YSYgZGF0YSA9IG1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vz
c0RhdGEpLT52YWx1ZTsKICAgICAgICAgZGF0YS5tZXJnZUNhbGxDb250ZXh0KG5vZGUuY29kZU9y
aWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAgIH0KICAgICAKQEAgLTc3Myw3ICs3NzMsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgQXJndW1lbnRzQWxpYXNpbmdEYXRhJiBkYXRhID0KLSAgICAgICAgICAgICAgICBtX2FyZ3Vt
ZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+c2Vjb25kOworICAgICAgICAg
ICAgICAgIG1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT52YWx1
ZTsKICAgICAgICAgICAgIGlmICghZGF0YS5pc1ZhbGlkKCkpCiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCkBAIC04MDksNyArODA5LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICAmJiAhbV9jcmVhdGVzQXJndW1lbnRzLmNvbnRhaW5zKGNo
aWxkLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgIGJvb2wgaXNBbGlh
c2VkQXJndW1lbnRzUmVnaXN0ZXIgPQogICAgICAgICAgICAgICAgICF2YXJpYWJsZUFjY2Vzc0Rh
dGEtPmlzQ2FwdHVyZWQoKQotICAgICAgICAgICAgICAgICYmIG1fYXJndW1lbnRzQWxpYXNpbmcu
ZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT5zZWNvbmQuaXNWYWxpZCgpCisgICAgICAgICAgICAg
ICAgJiYgbV9hcmd1bWVudHNBbGlhc2luZy5maW5kKHZhcmlhYmxlQWNjZXNzRGF0YSktPnZhbHVl
LmlzVmFsaWQoKQogICAgICAgICAgICAgICAgICYmICFtX2NyZWF0ZXNBcmd1bWVudHMuY29udGFp
bnMoY2hpbGQuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAgICAgaWYgKCFp
c0RlYWRBcmd1bWVudHNSZWdpc3RlciAmJiAhaXNBbGlhc2VkQXJndW1lbnRzUmVnaXN0ZXIpCiAg
ICAgICAgICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fzc2VtYmx5SGVscGVycy5jcHAKaW5kZXggNzc5OWVlNS4uYjViNjY4NCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBc3NlbWJseUhlbHBlcnMuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXNzZW1ibHlIZWxwZXJzLmNwcApAQCAtNDksOSAr
NDksOSBAQCBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiYgQXNzZW1ibHlIZWxwZXJz
OjpkZWNvZGVkQ29kZU1hcEZvcihDb2RlQmxvY2sqCiAgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBW
ZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiA+OjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9k
ZWNvZGVkQ29kZU1hcHMuYWRkKGNvZGVCbG9jaywgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9m
ZnNldD4oKSk7CiAgICAgCiAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICBjb2Rl
QmxvY2stPmppdENvZGVNYXAoKS0+ZGVjb2RlKHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKKyAg
ICAgICAgY29kZUJsb2NrLT5qaXRDb2RlTWFwKCktPmRlY29kZShyZXN1bHQuaXRlcmF0b3ItPnZh
bHVlKTsKICAgICAKLSAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgcmV0
dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiB9CiAKICNpZiBFTkFCTEUoU0FNUExJTkdfRkxB
R1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlQ2Fj
aGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVDYWNoZS5oCmluZGV4
IGY2YTc0NWMuLjhlZDE1NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQnl0ZUNvZGVDYWNoZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0
ZUNvZGVDYWNoZS5oCkBAIC0xMzIsMTAgKzEzMiwxMCBAQCBwdWJsaWM6CiAgICAgICAgIE1hcDo6
aXRlcmF0b3IgYmVnaW4gPSBtX21hcC5iZWdpbigpOwogICAgICAgICBNYXA6Oml0ZXJhdG9yIGVu
ZCA9IG1fbWFwLmVuZCgpOwogICAgICAgICBmb3IgKE1hcDo6aXRlcmF0b3IgaXRlciA9IGJlZ2lu
OyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0gICAgICAgICAgICBpZiAoIWl0ZXItPnNlY29uZC5j
b2RlQmxvY2spCisgICAgICAgICAgICBpZiAoIWl0ZXItPnZhbHVlLmNvZGVCbG9jaykKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChpdGVyLT5zZWNvbmQub3duZWQp
IHsKLSAgICAgICAgICAgICAgICBkZWxldGUgaXRlci0+c2Vjb25kLmNvZGVCbG9jazsKKyAgICAg
ICAgICAgIGlmIChpdGVyLT52YWx1ZS5vd25lZCkgeworICAgICAgICAgICAgICAgIGRlbGV0ZSBp
dGVyLT52YWx1ZS5jb2RlQmxvY2s7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KQEAgLTE0NSw3ICsxNDUsNyBAQCBwdWJsaWM6CiAgICAgewogICAg
ICAgICBNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX21hcC5maW5kKGtleSk7CiAgICAgICAgIGlmIChp
dGVyICE9IG1fbWFwLmVuZCgpKQotICAgICAgICAgICAgcmV0dXJuIGl0ZXItPnNlY29uZC5jb2Rl
QmxvY2s7CisgICAgICAgICAgICByZXR1cm4gaXRlci0+dmFsdWUuY29kZUJsb2NrOwogICAgICAg
ICAKICAgICAgICAgQnl0ZUNvZGVDYWNoZVZhbHVlIHZhbHVlOwogICAgICAgICAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKaW5kZXggZTRlOTRl
OS4uYzlmYzQxZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRl
Q29kZVBhcnNlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29k
ZVBhcnNlci5jcHAKQEAgLTY1Myw5ICs2NTMsOSBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAg
SGFzaE1hcDxKU0NlbGwqLCBOb2RlSW5kZXg+OjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9jZWxsQ29u
c3RhbnROb2Rlcy5hZGQoY2VsbCwgTm9Ob2RlKTsKICAgICAgICAgaWYgKHJlc3VsdC5pc05ld0Vu
dHJ5KQotICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBhZGRUb0dyYXBoKFdl
YWtKU0NvbnN0YW50LCBPcEluZm8oY2VsbCkpOworICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZSA9IGFkZFRvR3JhcGgoV2Vha0pTQ29uc3RhbnQsIE9wSW5mbyhjZWxsKSk7CiAgICAg
ICAgIAotICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgIHJl
dHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogICAgIH0KICAgICAKICAgICBDb2RlT3JpZ2lu
IGN1cnJlbnRDb2RlT3JpZ2luKCkKQEAgLTMxNjEsNyArMzE2MSw3IEBAIEJ5dGVDb2RlUGFyc2Vy
OjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmVTdGFja0VudHJ5KAogICAgICAgICAgICAgSWRlbnRp
Zmllck1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IGJ5dGVDb2RlUGFyc2VyLT5tX2lkZW50aWZpZXJN
YXAuYWRkKHJlcCwgYnl0ZUNvZGVQYXJzZXItPm1fY29kZUJsb2NrLT5udW1iZXJPZklkZW50aWZp
ZXJzKCkpOwogICAgICAgICAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQogICAgICAgICAgICAg
ICAgIGJ5dGVDb2RlUGFyc2VyLT5tX2NvZGVCbG9jay0+YWRkSWRlbnRpZmllcihJZGVudGlmaWVy
KGJ5dGVDb2RlUGFyc2VyLT5tX2dsb2JhbERhdGEsIHJlcCkpOwotICAgICAgICAgICAgbV9pZGVu
dGlmaWVyUmVtYXBbaV0gPSByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgICAgIG1f
aWRlbnRpZmllclJlbWFwW2ldID0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgfQog
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvZGVCbG9jay0+bnVtYmVyT2ZDb25zdGFu
dFJlZ2lzdGVycygpOyArK2kpIHsKICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBjb2RlQmxv
Y2stPmdldENvbnN0YW50KGkgKyBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7CkBAIC0zMTc5
LDcgKzMxNzksNyBAQCBCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lU3Rh
Y2tFbnRyeSgKICAgICAgICAgICAgICAgICBieXRlQ29kZVBhcnNlci0+bV9jb2RlQmxvY2stPmFk
ZENvbnN0YW50KHZhbHVlKTsKICAgICAgICAgICAgICAgICBieXRlQ29kZVBhcnNlci0+bV9jb25z
dGFudHMuYXBwZW5kKENvbnN0YW50UmVjb3JkKCkpOwogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgbV9jb25zdGFudFJlbWFwW2ldID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAg
ICAgICBtX2NvbnN0YW50UmVtYXBbaV0gPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogICAgICAg
ICB9CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb2RlQmxvY2stPm51bWJlck9m
R2xvYmFsUmVzb2x2ZUluZm9zKCk7ICsraSkKICAgICAgICAgICAgIGJ5dGVDb2RlUGFyc2VyLT5t
X2NvZGVCbG9jay0+YWRkR2xvYmFsUmVzb2x2ZUluZm8oc3RkOjpudW1lcmljX2xpbWl0czx1bnNp
Z25lZD46Om1heCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXAuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKaW5kZXggMzc3MTMy
Ny4uYTMzOWI2YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKQEAgLTM0NSw3ICsz
NDUsNyBAQCB2b2lkIEhlYXA6Om1hcmtQcm90ZWN0ZWRPYmplY3RzKEhlYXBSb290VmlzaXRvciYg
aGVhcFJvb3RWaXNpdG9yKQogewogICAgIFByb3RlY3RDb3VudFNldDo6aXRlcmF0b3IgZW5kID0g
bV9wcm90ZWN0ZWRWYWx1ZXMuZW5kKCk7CiAgICAgZm9yIChQcm90ZWN0Q291bnRTZXQ6Oml0ZXJh
dG9yIGl0ID0gbV9wcm90ZWN0ZWRWYWx1ZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAg
ICAgICBoZWFwUm9vdFZpc2l0b3IudmlzaXQoJml0LT5maXJzdCk7CisgICAgICAgIGhlYXBSb290
VmlzaXRvci52aXNpdCgmaXQtPmtleSk7CiB9CiAKIHZvaWQgSGVhcDo6cHVzaFRlbXBTb3J0VmVj
dG9yKFZlY3RvcjxWYWx1ZVN0cmluZ1BhaXI+KiB0ZW1wVmVjdG9yKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5oCmluZGV4IDU5NWU5MzcuLjY1NGU2YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXAuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwLmgKQEAgLTM0NSw3ICszNDUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB7CiAgICAgICAg
IFByb3RlY3RDb3VudFNldDo6aXRlcmF0b3IgZW5kID0gbV9wcm90ZWN0ZWRWYWx1ZXMuZW5kKCk7
CiAgICAgICAgIGZvciAoUHJvdGVjdENvdW50U2V0OjppdGVyYXRvciBpdCA9IG1fcHJvdGVjdGVk
VmFsdWVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIGZ1bmN0b3IoaXQt
PmZpcnN0KTsKKyAgICAgICAgICAgIGZ1bmN0b3IoaXQtPmtleSk7CiAgICAgICAgIG1faGFuZGxl
U2V0LmZvckVhY2hTdHJvbmdIYW5kbGUoZnVuY3RvciwgbV9wcm90ZWN0ZWRWYWx1ZXMpOwogCiAg
ICAgICAgIHJldHVybiBmdW5jdG9yLnJldHVyblZhbHVlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9KSVRTdHViUm91dGluZVNldC5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9KSVRTdHViUm91dGluZVNldC5jcHAKaW5kZXggMDU0YmYwNi4uOGUyNzkx
ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSklUU3R1YlJvdXRpbmVT
ZXQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pJVFN0dWJSb3V0aW5lU2V0
LmNwcApAQCAtODIsNyArODIsNyBAQCB2b2lkIEpJVFN0dWJSb3V0aW5lU2V0OjptYXJrU2xvdyh1
aW50cHRyX3QgYWRkcmVzcykKICAgICBpZiAoaXRlciA9PSBtX2FkZHJlc3NUb1JvdXRpbmVNYXAu
ZW5kKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBpdGVyLT5zZWNvbmQtPm1fbWF5QmVF
eGVjdXRpbmcgPSB0cnVlOworICAgIGl0ZXItPnZhbHVlLT5tX21heUJlRXhlY3V0aW5nID0gdHJ1
ZTsKIH0KIAogdm9pZCBKSVRTdHViUm91dGluZVNldDo6ZGVsZXRlVW5tYXJrZWRKZXR0aXNvbmVk
U3R1YlJvdXRpbmVzKCkKQEAgLTk3LDcgKzk3LDcgQEAgdm9pZCBKSVRTdHViUm91dGluZVNldDo6
ZGVsZXRlVW5tYXJrZWRKZXR0aXNvbmVkU3R1YlJvdXRpbmVzKCkKICAgICAgICAgdWludHB0cl90
IHN0ZXAgPSBKSVRTdHViUm91dGluZTo6YWRkcmVzc1N0ZXAoKTsKICAgICAgICAgZm9yICh1aW50
cHRyX3QgaXRlciA9IHN0YXJ0OyBpdGVyIDwgZW5kOyBpdGVyICs9IHN0ZXApIHsKICAgICAgICAg
ICAgIEFTU0VSVChtX2FkZHJlc3NUb1JvdXRpbmVNYXAuZmluZChpdGVyKSAhPSBtX2FkZHJlc3NU
b1JvdXRpbmVNYXAuZW5kKCkpOwotICAgICAgICAgICAgQVNTRVJUKG1fYWRkcmVzc1RvUm91dGlu
ZU1hcC5maW5kKGl0ZXIpLT5zZWNvbmQgPT0gcm91dGluZSk7CisgICAgICAgICAgICBBU1NFUlQo
bV9hZGRyZXNzVG9Sb3V0aW5lTWFwLmZpbmQoaXRlciktPnZhbHVlID09IHJvdXRpbmUpOwogICAg
ICAgICAgICAgbV9hZGRyZXNzVG9Sb3V0aW5lTWFwLnJlbW92ZShpdGVyKTsKICAgICAgICAgfQog
ICAgICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFj
ay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suY3BwCmluZGV4IDAy
YTEzMDcuLmY0NzVhZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtTdGFjay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmNw
cApAQCAtNTk3LDcgKzU5Nyw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBNYXJrU3RhY2s6OmludGVy
bmFsQXBwZW5kKEpTVmFsdWUqIHNsb3QpCiAgICAgICAgICAgICBpZiAoYWRkUmVzdWx0LmlzTmV3
RW50cnkpCiAgICAgICAgICAgICAgICAgc3RyaW5nLT5zZXRIYXNoQ29uc3RTaW5nbGV0b24oKTsK
ICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIEpTVmFsdWUgZXhpc3RpbmdKU1Zh
bHVlID0gYWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgICAgICAgICAgSlNWYWx1
ZSBleGlzdGluZ0pTVmFsdWUgPSBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogICAgICAgICAg
ICAgICAgIGlmICh2YWx1ZSAhPSBleGlzdGluZ0pTVmFsdWUpCiAgICAgICAgICAgICAgICAgICAg
IGpzQ2FzdDxKU1N0cmluZyo+KGV4aXN0aW5nSlNWYWx1ZS5hc0NlbGwoKSktPmNsZWFySGFzaENv
bnN0U2luZ2xldG9uKCk7CiAgICAgICAgICAgICAgICAgKnNsb3QgPSBleGlzdGluZ0pTVmFsdWU7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrLmgKaW5kZXggMDc2OThmZC4uM2MzZDFkMCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vhay5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1dlYWsuaApAQCAtMTY0LDggKzE2NCw4IEBAIHRlbXBsYXRlPHR5cGVu
YW1lIE1hcCwgdHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZT4gaW5saW5lIHZvaWQgd2Vha1Jl
bW92ZShNYXAmCiAgICAgdHlwZW5hbWUgTWFwOjppdGVyYXRvciBpdCA9IG1hcC5maW5kKGtleSk7
CiAgICAgQVNTRVJUX1VOVVNFRCh2YWx1ZSwgdmFsdWUpOwogICAgIEFTU0VSVChpdCAhPSBtYXAu
ZW5kKCkpOwotICAgIEFTU0VSVChpdC0+c2Vjb25kLndhcyh2YWx1ZSkpOwotICAgIEFTU0VSVCgh
aXQtPnNlY29uZCk7CisgICAgQVNTRVJUKGl0LT52YWx1ZS53YXModmFsdWUpKTsKKyAgICBBU1NF
UlQoIWl0LT52YWx1ZSk7CiAgICAgbWFwLnJlbW92ZShpdCk7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmNwcAppbmRleCA1MmE3MTU4Li44MzdiOGQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuY3BwCkBAIC03MTEsOCArNzExLDggQEAgSklUQ29kZSBKSVQ6OnByaXZhdGVDb21waWxlKENv
ZGVQdHIqIGZ1bmN0aW9uRW50cnlBcml0eUNoZWNrLCBKSVRDb21waWxhdGlvbkVmZm8KIAogICAg
ICAgICAgICAgU3RyaW5nSnVtcFRhYmxlOjpTdHJpbmdPZmZzZXRUYWJsZTo6aXRlcmF0b3IgZW5k
ID0gcmVjb3JkLmp1bXBUYWJsZS5zdHJpbmdKdW1wVGFibGUtPm9mZnNldFRhYmxlLmVuZCgpOyAg
ICAgICAgICAgIAogICAgICAgICAgICAgZm9yIChTdHJpbmdKdW1wVGFibGU6OlN0cmluZ09mZnNl
dFRhYmxlOjppdGVyYXRvciBpdCA9IHJlY29yZC5qdW1wVGFibGUuc3RyaW5nSnVtcFRhYmxlLT5v
ZmZzZXRUYWJsZS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgICAgICB1
bnNpZ25lZCBvZmZzZXQgPSBpdC0+c2Vjb25kLmJyYW5jaE9mZnNldDsKLSAgICAgICAgICAgICAg
ICBpdC0+c2Vjb25kLmN0aU9mZnNldCA9IG9mZnNldCA/IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Yo
bV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyBvZmZzZXRdKSA6IHJlY29yZC5qdW1wVGFibGUuc3Ry
aW5nSnVtcFRhYmxlLT5jdGlEZWZhdWx0OworICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNl
dCA9IGl0LT52YWx1ZS5icmFuY2hPZmZzZXQ7CisgICAgICAgICAgICAgICAgaXQtPnZhbHVlLmN0
aU9mZnNldCA9IG9mZnNldCA/IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YobV9sYWJlbHNbYnl0ZWNv
ZGVPZmZzZXQgKyBvZmZzZXRdKSA6IHJlY29yZC5qdW1wVGFibGUuc3RyaW5nSnVtcFRhYmxlLT5j
dGlEZWZhdWx0OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFN0dWJzLmNwcAppbmRleCAwZjAzYTBhLi5iZTZhODVhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcApAQCAtMzQyOCw4ICszNDI4LDggQEAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIEpJVFRodW5rczo6Y3RpU3R1YihKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEsIFRodW5rR2VuZXJhdG8KIHsKICAgICBDVElTdHViTWFwOjpBZGRSZXN1bHQgZW50cnkgPSBt
X2N0aVN0dWJNYXAuYWRkKGdlbmVyYXRvciwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCkpOwogICAg
IGlmIChlbnRyeS5pc05ld0VudHJ5KQotICAgICAgICBlbnRyeS5pdGVyYXRvci0+c2Vjb25kID0g
Z2VuZXJhdG9yKGdsb2JhbERhdGEpOwotICAgIHJldHVybiBlbnRyeS5pdGVyYXRvci0+c2Vjb25k
OworICAgICAgICBlbnRyeS5pdGVyYXRvci0+dmFsdWUgPSBnZW5lcmF0b3IoZ2xvYmFsRGF0YSk7
CisgICAgcmV0dXJuIGVudHJ5Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIAogTmF0aXZlRXhlY3V0YWJs
ZSogSklUVGh1bmtzOjpob3N0RnVuY3Rpb25TdHViKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwg
TmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCmluZGV4IDU1OGY1MGUuLjU5MGRmNzYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAKQEAgLTEzMjUsMTAgKzEz
MjUsMTAgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBQYXJz
ZXI8TGV4ZXJUeXBlPjo6cGFyc2VTdHJpY3RPYmplY3QKICAgICAgICAgaWYgKCFtX3N5bnRheEFs
cmVhZHlWYWxpZGF0ZWQpIHsKICAgICAgICAgICAgIE9iamVjdFZhbGlkYXRpb25NYXA6OkFkZFJl
c3VsdCBwcm9wZXJ0eUVudHJ5ID0gb2JqZWN0VmFsaWRhdG9yLmFkZChjb250ZXh0LmdldE5hbWUo
cHJvcGVydHkpLmltcGwoKSwgY29udGV4dC5nZXRUeXBlKHByb3BlcnR5KSk7CiAgICAgICAgICAg
ICBpZiAoIXByb3BlcnR5RW50cnkuaXNOZXdFbnRyeSkgewotICAgICAgICAgICAgICAgIGZhaWxJ
ZlRydWUocHJvcGVydHlFbnRyeS5pdGVyYXRvci0+c2Vjb25kID09IFByb3BlcnR5Tm9kZTo6Q29u
c3RhbnQpOworICAgICAgICAgICAgICAgIGZhaWxJZlRydWUocHJvcGVydHlFbnRyeS5pdGVyYXRv
ci0+dmFsdWUgPT0gUHJvcGVydHlOb2RlOjpDb25zdGFudCk7CiAgICAgICAgICAgICAgICAgZmFp
bElmVHJ1ZShjb250ZXh0LmdldFR5cGUocHJvcGVydHkpID09IFByb3BlcnR5Tm9kZTo6Q29uc3Rh
bnQpOwotICAgICAgICAgICAgICAgIGZhaWxJZlRydWUoY29udGV4dC5nZXRUeXBlKHByb3BlcnR5
KSAmIHByb3BlcnR5RW50cnkuaXRlcmF0b3ItPnNlY29uZCk7Ci0gICAgICAgICAgICAgICAgcHJv
cGVydHlFbnRyeS5pdGVyYXRvci0+c2Vjb25kIHw9IGNvbnRleHQuZ2V0VHlwZShwcm9wZXJ0eSk7
CisgICAgICAgICAgICAgICAgZmFpbElmVHJ1ZShjb250ZXh0LmdldFR5cGUocHJvcGVydHkpICYg
cHJvcGVydHlFbnRyeS5pdGVyYXRvci0+dmFsdWUpOworICAgICAgICAgICAgICAgIHByb3BlcnR5
RW50cnkuaXRlcmF0b3ItPnZhbHVlIHw9IGNvbnRleHQuZ2V0VHlwZShwcm9wZXJ0eSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgdGFpbCA9IGNvbnRleHQuY3JlYXRlUHJvcGVy
dHlMaXN0KG1fbGV4ZXItPmxhc3RMaW5lTnVtYmVyKCksIHByb3BlcnR5LCB0YWlsKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlLmNwcAppbmRleCA5MmUzMmM0Li40NGRk
NTJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZS5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGUuY3BwCkBAIC0x
MTEsNyArMTExLDcgQEAgdHlwZWRlZiBXVEY6OktleVZhbHVlUGFpcjxGdW5jdGlvbkNhbGxIYXNo
Q291bnQ6OlZhbHVlVHlwZSwgdW5zaWduZWQ+IE5hbWVDb3VudFAKIAogc3RhdGljIGlubGluZSBi
b29sIGZ1bmN0aW9uTmFtZUNvdW50UGFpckNvbXBhcmF0b3IoY29uc3QgTmFtZUNvdW50UGFpciYg
YSwgY29uc3QgTmFtZUNvdW50UGFpciYgYikKIHsKLSAgICByZXR1cm4gYS5zZWNvbmQgPiBiLnNl
Y29uZDsKKyAgICByZXR1cm4gYS52YWx1ZSA+IGIudmFsdWU7CiB9CiAKIHZvaWQgUHJvZmlsZTo6
ZGVidWdQcmludERhdGFTYW1wbGVTdHlsZSgpIGNvbnN0CkBAIC0xMjgsNyArMTI4LDcgQEAgdm9p
ZCBQcm9maWxlOjpkZWJ1Z1ByaW50RGF0YVNhbXBsZVN0eWxlKCkgY29uc3QKIAogICAgIHN0ZDo6
c29ydChzb3J0ZWRGdW5jdGlvbnMuYmVnaW4oKSwgc29ydGVkRnVuY3Rpb25zLmVuZCgpLCBmdW5j
dGlvbk5hbWVDb3VudFBhaXJDb21wYXJhdG9yKTsKICAgICBmb3IgKE5hbWVDb3VudFBhaXJWZWN0
b3I6Oml0ZXJhdG9yIGl0ID0gc29ydGVkRnVuY3Rpb25zLmJlZ2luKCk7IGl0ICE9IHNvcnRlZEZ1
bmN0aW9ucy5lbmQoKTsgKytpdCkKLSAgICAgICAgZGF0YUxvZygiICAgICAgICAlLTEyZCVzXG4i
LCAoKml0KS5zZWNvbmQsIFVTdHJpbmcoKCppdCkuZmlyc3QpLnV0ZjgoKS5kYXRhKCkpOworICAg
ICAgICBkYXRhTG9nKCIgICAgICAgICUtMTJkJXNcbiIsICgqaXQpLnZhbHVlLCBVU3RyaW5nKCgq
aXQpLmtleSkudXRmOCgpLmRhdGEoKSk7CiAKICAgICBkYXRhTG9nKCJcblNvcnQgYnkgdG9wIG9m
IHN0YWNrLCBzYW1lIGNvbGxhcHNlZCAod2hlbiA+PSA1KTpcbiIpOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmNwcAppbmRleCAyMDc3MDkyLi45MDNlODQ5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmNwcApAQCAt
MTA4LDcgKzEwOCw3IEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gSWRlbnRpZmllcjo6YWRkKEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgY2hhciogYykKIAogICAgIGNvbnN0IExpdGVy
YWxJZGVudGlmaWVyVGFibGU6Oml0ZXJhdG9yJiBpdGVyID0gbGl0ZXJhbElkZW50aWZpZXJUYWJs
ZS5maW5kKGMpOwogICAgIGlmIChpdGVyICE9IGxpdGVyYWxJZGVudGlmaWVyVGFibGUuZW5kKCkp
Ci0gICAgICAgIHJldHVybiBpdGVyLT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBpdGVyLT52YWx1
ZTsKIAogICAgIEhhc2hTZXQ8U3RyaW5nSW1wbCo+OjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gaWRl
bnRpZmllclRhYmxlLmFkZDxjb25zdCBMQ2hhciosIElkZW50aWZpZXJDU3RyaW5nVHJhbnNsYXRv
cj4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KGMpKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5jcHAKaW5kZXggNTQxN2IwMC4uYzczZDM0
ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9u
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uY3Bw
CkBAIC0xMjcsMTEgKzEyNywxMSBAQCB2b2lkIEpTQWN0aXZhdGlvbjo6Z2V0T3duUHJvcGVydHlO
YW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcgogICAgIEpTQWN0
aXZhdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FjdGl2YXRpb24qPihvYmplY3QpOwogICAg
IFN5bWJvbFRhYmxlOjpjb25zdF9pdGVyYXRvciBlbmQgPSB0aGlzT2JqZWN0LT5zeW1ib2xUYWJs
ZSgpLmVuZCgpOwogICAgIGZvciAoU3ltYm9sVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdGhp
c09iamVjdC0+c3ltYm9sVGFibGUoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgaWYgKGl0LT5zZWNvbmQuZ2V0QXR0cmlidXRlcygpICYgRG9udEVudW0gJiYgbW9kZSAhPSBJ
bmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKQorICAgICAgICBpZiAoaXQtPnZhbHVlLmdldEF0dHJp
YnV0ZXMoKSAmIERvbnRFbnVtICYmIG1vZGUgIT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykK
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoaXQtPnNlY29uZC5nZXRJbmRleCgp
ID49IHRoaXNPYmplY3QtPm1fbnVtQ2FwdHVyZWRWYXJzKQorICAgICAgICBpZiAoaXQtPnZhbHVl
LmdldEluZGV4KCkgPj0gdGhpc09iamVjdC0+bV9udW1DYXB0dXJlZFZhcnMpCiAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihleGVjLCBp
dC0+Zmlyc3QuZ2V0KCkpKTsKKyAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihl
eGVjLCBpdC0+a2V5LmdldCgpKSk7CiAgICAgfQogICAgIC8vIFNraXAgdGhlIEpTVmFyaWFibGVP
YmplY3QgaW1wbGVtZW50YXRpb24gb2YgZ2V0T3duUHJvcGVydHlOYW1lcwogICAgIEpTT2JqZWN0
OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1v
ZGUpOwpAQCAtMTQ0LDcgKzE0NCw3IEBAIGlubGluZSBib29sIEpTQWN0aXZhdGlvbjo6c3ltYm9s
VGFibGVQdXRXaXRoQXR0cmlidXRlcyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsCiAgICAgU3lt
Ym9sVGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSBzeW1ib2xUYWJsZSgpLmZpbmQocHJvcGVydHlOYW1l
LnB1YmxpY05hbWUoKSk7CiAgICAgaWYgKGl0ZXIgPT0gc3ltYm9sVGFibGUoKS5lbmQoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFN5bWJvbFRhYmxlRW50cnkmIGVudHJ5ID0gaXRlci0+
c2Vjb25kOworICAgIFN5bWJvbFRhYmxlRW50cnkmIGVudHJ5ID0gaXRlci0+dmFsdWU7CiAgICAg
QVNTRVJUKCFlbnRyeS5pc051bGwoKSk7CiAgICAgaWYgKGVudHJ5LmdldEluZGV4KCkgPj0gbV9u
dW1DYXB0dXJlZFZhcnMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKaW5kZXggNzIxODYwNC4uZjU4NDhkOSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKQEAgLTIwNCw3ICsyMDQsNyBAQCBp
bmxpbmUgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6QWRkUmVzdWx0IFNwYXJzZUFycmF5VmFsdWVNYXA6
OmFkZChKU0FycmF5KiBhcnJheSwgdQogaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6
cHV0KEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJheSogYXJyYXksIHVuc2lnbmVkIGksIEpTVmFsdWUg
dmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCiB7CiAgICAgQWRkUmVzdWx0IHJlc3VsdCA9IGFkZChh
cnJheSwgaSk7Ci0gICAgU3BhcnNlQXJyYXlFbnRyeSYgZW50cnkgPSByZXN1bHQuaXRlcmF0b3It
PnNlY29uZDsKKyAgICBTcGFyc2VBcnJheUVudHJ5JiBlbnRyeSA9IHJlc3VsdC5pdGVyYXRvci0+
dmFsdWU7CiAKICAgICAvLyBUbyBzYXZlIGEgc2VwYXJhdGUgZmluZCAmIGFkZCwgd2UgZmlyc3Qg
YWx3YXlzIGFkZCB0byB0aGUgc3BhcnNlIG1hcC4KICAgICAvLyBJbiB0aGUgdW5jb21tb24gY2Fz
ZSB0aGF0IHRoaXMgaXMgYSBuZXcgcHJvcGVydHksIGFuZCB0aGUgYXJyYXkgaXMgbm90CkBAIC0y
NDcsNyArMjQ3LDcgQEAgaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6cHV0KEV4ZWNT
dGF0ZSogZXhlYywgSlNBcnJheSogYXJyYXksIHVuc2lnbmVkIGkKIGlubGluZSBib29sIFNwYXJz
ZUFycmF5VmFsdWVNYXA6OnB1dERpcmVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTQXJyYXkqIGFycmF5
LCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQogewogICAgIEFk
ZFJlc3VsdCByZXN1bHQgPSBhZGQoYXJyYXksIGkpOwotICAgIFNwYXJzZUFycmF5RW50cnkmIGVu
dHJ5ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgU3BhcnNlQXJyYXlFbnRyeSYgZW50
cnkgPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogCiAgICAgLy8gVG8gc2F2ZSBhIHNlcGFyYXRl
IGZpbmQgJiBhZGQsIHdlIGZpcnN0IGFsd2F5cyBhZGQgdG8gdGhlIHNwYXJzZSBtYXAuCiAgICAg
Ly8gSW4gdGhlIHVuY29tbW9uIGNhc2UgdGhhdCB0aGlzIGlzIGEgbmV3IHByb3BlcnR5LCBhbmQg
dGhlIGFycmF5IGlzIG5vdApAQCAtMzEzLDcgKzMxMyw3IEBAIGlubGluZSB2b2lkIFNwYXJzZUFy
cmF5VmFsdWVNYXA6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
aXRlcmF0b3IgZW5kID0gbV9tYXAuZW5kKCk7CiAgICAgZm9yIChpdGVyYXRvciBpdCA9IG1fbWFw
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgdmlzaXRvci5hcHBlbmQoJml0LT5z
ZWNvbmQpOworICAgICAgICB2aXNpdG9yLmFwcGVuZCgmaXQtPnZhbHVlKTsKIH0KIAogdm9pZCBK
U0FycmF5OjphbGxvY2F0ZVNwYXJzZU1hcChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCkBAIC0z
NDksNyArMzQ5LDcgQEAgdm9pZCBKU0FycmF5OjplbnRlckRpY3Rpb25hcnlNb2RlKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSkKICAgICAgICAgLy8gVGhpcyB3aWxsIGFsd2F5cyBiZSBhIG5ldyBl
bnRyeSBpbiB0aGUgbWFwLCBzbyBubyBuZWVkIHRvIGNoZWNrIHdlIGNhbiB3cml0ZSwKICAgICAg
ICAgLy8gYW5kIGF0dHJpYnV0ZXMgYXJlIGRlZmF1bHQgc28gbm8gbmVlZCB0byBzZXQgdGhlbS4K
ICAgICAgICAgaWYgKHZhbHVlKQotICAgICAgICAgICAgbWFwLT5hZGQodGhpcywgaSkuaXRlcmF0
b3ItPnNlY29uZC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgICAgICAgICAgbWFw
LT5hZGQodGhpcywgaSkuaXRlcmF0b3ItPnZhbHVlLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1
ZSk7CiAgICAgfQogCiAgICAgdm9pZCogbmV3UmF3U3RvcmFnZSA9IDA7CkBAIC00MjUsNyArNDI1
LDcgQEAgYm9vbCBKU0FycmF5OjpkZWZpbmVPd25OdW1lcmljUHJvcGVydHkoRXhlY1N0YXRlKiBl
eGVjLCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHkKIAogICAgIC8vIDEuIExldCBjdXJyZW50IGJl
IHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tHZXRPd25Qcm9wZXJ0eV1dIGludGVybmFsIG1l
dGhvZCBvZiBPIHdpdGggcHJvcGVydHkgbmFtZSBQLgogICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6
OkFkZFJlc3VsdCByZXN1bHQgPSBtYXAtPmFkZCh0aGlzLCBpbmRleCk7Ci0gICAgU3BhcnNlQXJy
YXlFbnRyeSogZW50cnlJbk1hcCA9ICZyZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBTcGFy
c2VBcnJheUVudHJ5KiBlbnRyeUluTWFwID0gJnJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAKICAg
ICAvLyAyLiBMZXQgZXh0ZW5zaWJsZSBiZSB0aGUgdmFsdWUgb2YgdGhlIFtbRXh0ZW5zaWJsZV1d
IGludGVybmFsIHByb3BlcnR5IG9mIE8uCiAgICAgLy8gMy4gSWYgY3VycmVudCBpcyB1bmRlZmlu
ZWQgYW5kIGV4dGVuc2libGUgaXMgZmFsc2UsIHRoZW4gUmVqZWN0LgpAQCAtNjU2LDcgKzY1Niw3
IEBAIGJvb2wgSlNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0NlbGwqIGNlbGws
IEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQKICAgICB9IGVsc2UgaWYgKFNwYXJzZUFycmF5VmFs
dWVNYXAqIG1hcCA9IHRoaXNPYmplY3QtPm1fc3BhcnNlVmFsdWVNYXApIHsKICAgICAgICAgU3Bh
cnNlQXJyYXlWYWx1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAtPmZpbmQoaSk7CiAgICAgICAgIGlm
IChpdCAhPSBtYXAtPm5vdEZvdW5kKCkpIHsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQuZ2V0KHNs
b3QpOworICAgICAgICAgICAgaXQtPnZhbHVlLmdldChzbG90KTsKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICB9CiAgICAgfQpAQCAtNzAyLDcgKzcwMiw3IEBAIGJvb2wgSlNBcnJh
eTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSog
ZXhlYywgUHJvcGVyCiAgICAgICAgIH0gZWxzZSBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFw
ID0gdGhpc09iamVjdC0+bV9zcGFyc2VWYWx1ZU1hcCkgewogICAgICAgICAgICAgU3BhcnNlQXJy
YXlWYWx1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAtPmZpbmQoaSk7CiAgICAgICAgICAgICBpZiAo
aXQgIT0gbWFwLT5ub3RGb3VuZCgpKSB7Ci0gICAgICAgICAgICAgICAgaXQtPnNlY29uZC5nZXQo
ZGVzY3JpcHRvcik7CisgICAgICAgICAgICAgICAgaXQtPnZhbHVlLmdldChkZXNjcmlwdG9yKTsK
ICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpA
QCAtODM0LDcgKzgzNCw3IEBAIHZvaWQgSlNBcnJheTo6cHV0QnlJbmRleEJleW9uZFZlY3Rvckxl
bmd0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUKICAgICBXcml0ZUJhcnJp
ZXI8VW5rbm93bj4qIHZlY3RvciA9IHN0b3JhZ2UtPm1fdmVjdG9yOwogICAgIFNwYXJzZUFycmF5
VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7CiAgICAgZm9yIChTcGFy
c2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KQotICAgICAgICB2ZWN0b3JbaXQtPmZpcnN0XS5zZXQoZ2xvYmFsRGF0YSwgdGhp
cywgaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCkpOworICAgICAgICB2ZWN0b3JbaXQtPmtl
eV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIGl0LT52YWx1ZS5nZXROb25TcGFyc2VNb2RlKCkpOwog
ICAgIGRlYWxsb2NhdGVTcGFyc2VNYXAoKTsKIAogICAgIC8vIFN0b3JlIHRoZSBuZXcgcHJvcGVy
dHkgaW50byB0aGUgdmVjdG9yLgpAQCAtOTA0LDcgKzkwNCw3IEBAIGJvb2wgSlNBcnJheTo6cHV0
RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBp
LCBKU1ZhCiAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiB2ZWN0b3IgPSBzdG9yYWdlLT5tX3Zl
Y3RvcjsKICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAt
PmVuZCgpOwogICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgdmVjdG9yW2l0LT5maXJz
dF0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpKTsK
KyAgICAgICAgdmVjdG9yW2l0LT5rZXldLnNldChnbG9iYWxEYXRhLCB0aGlzLCBpdC0+dmFsdWUu
Z2V0Tm9uU3BhcnNlTW9kZSgpKTsKICAgICBkZWFsbG9jYXRlU3BhcnNlTWFwKCk7CiAKICAgICAv
LyBTdG9yZSB0aGUgbmV3IHByb3BlcnR5IGludG8gdGhlIHZlY3Rvci4KQEAgLTk0Nyw3ICs5NDcs
NyBAQCBib29sIEpTQXJyYXk6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4
ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSkKICAgICB9IGVsc2UgaWYgKFNwYXJzZUFycmF5VmFs
dWVNYXAqIG1hcCA9IHRoaXNPYmplY3QtPm1fc3BhcnNlVmFsdWVNYXApIHsKICAgICAgICAgU3Bh
cnNlQXJyYXlWYWx1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAtPmZpbmQoaSk7CiAgICAgICAgIGlm
IChpdCAhPSBtYXAtPm5vdEZvdW5kKCkpIHsKLSAgICAgICAgICAgIGlmIChpdC0+c2Vjb25kLmF0
dHJpYnV0ZXMgJiBEb250RGVsZXRlKQorICAgICAgICAgICAgaWYgKGl0LT52YWx1ZS5hdHRyaWJ1
dGVzICYgRG9udERlbGV0ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
ICAgICBtYXAtPnJlbW92ZShpdCk7CiAgICAgICAgIH0KQEAgLTk4NSw4ICs5ODUsOCBAQCB2b2lk
IEpTQXJyYXk6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbQogICAgICAgICAKICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1h
cDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKICAgICAgICAgZm9yIChTcGFyc2VB
cnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0
aWVzIHx8ICEoaXQtPnNlY29uZC5hdHRyaWJ1dGVzICYgRG9udEVudW0pKQotICAgICAgICAgICAg
ICAgIGtleXMuYXBwZW5kKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpdC0+Zmlyc3QpKTsKKyAgICAg
ICAgICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMgfHwgIShpdC0+dmFs
dWUuYXR0cmlidXRlcyAmIERvbnRFbnVtKSkKKyAgICAgICAgICAgICAgICBrZXlzLmFwcGVuZChz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oaXQtPmtleSkpOwogICAgICAgICB9CiAKICAgICAgICAgcXNv
cnQoa2V5cy5iZWdpbigpLCBrZXlzLnNpemUoKSwgc2l6ZW9mKHVuc2lnbmVkKSwgY29tcGFyZUtl
eXNGb3JRU29ydCk7CkBAIC0xMTc5LDcgKzExNzksNyBAQCBib29sIEpTQXJyYXk6OnNldExlbmd0
aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIG5ld0xlbmd0aCwgYm9vbCB0aHJvd0V4Y2VwdGlv
bgogICAgICAgICAgICAga2V5cy5yZXNlcnZlQ2FwYWNpdHkobWluKG1hcC0+c2l6ZSgpLCBzdGF0
aWNfY2FzdDxzaXplX3Q+KGxlbmd0aCAtIG5ld0xlbmd0aCkpKTsKICAgICAgICAgICAgIFNwYXJz
ZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7CiAgICAgICAg
ICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRl
eCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihpdC0+Zmlyc3QpOworICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGl0LT5rZXkpOwogICAgICAgICAg
ICAgICAgIGlmIChpbmRleCA8IGxlbmd0aCAmJiBpbmRleCA+PSBuZXdMZW5ndGgpCiAgICAgICAg
ICAgICAgICAgICAgIGtleXMuYXBwZW5kKGluZGV4KTsKICAgICAgICAgICAgIH0KQEAgLTExOTQs
NyArMTE5NCw3IEBAIGJvb2wgSlNBcnJheTo6c2V0TGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgdW5z
aWduZWQgbmV3TGVuZ3RoLCBib29sIHRocm93RXhjZXB0aW9uCiAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGluZGV4ID0ga2V5c1stLWldOwogICAgICAgICAgICAgICAgICAgICBTcGFyc2VB
cnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+ZmluZChpbmRleCk7CiAgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChpdCAhPSBtYXAtPm5vdEZvdW5kKCkpOwotICAgICAgICAgICAgICAg
ICAgICBpZiAoaXQtPnNlY29uZC5hdHRyaWJ1dGVzICYgRG9udERlbGV0ZSkgeworICAgICAgICAg
ICAgICAgICAgICBpZiAoaXQtPnZhbHVlLmF0dHJpYnV0ZXMgJiBEb250RGVsZXRlKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBzdG9yYWdlLT5tX2xlbmd0aCA9IGluZGV4ICsgMTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJV
bmFibGUgdG8gZGVsZXRlIHByb3BlcnR5LiIpOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0x
NjY5LDcgKzE2NjksNyBAQCB2b2lkIEpTQXJyYXk6OnNvcnQoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIGNvbXBhcmVGdW5jdGlvbiwgQ2FsbFR5cGUgY2FsbFR5cGUsCiAKICAgICAgICAgU3BhcnNl
QXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKICAgICAgICAg
Zm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25v
ZGVzW251bURlZmluZWRdLnZhbHVlID0gaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCk7Cisg
ICAgICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzW251bURlZmluZWRdLnZhbHVlID0g
aXQtPnZhbHVlLmdldE5vblNwYXJzZU1vZGUoKTsKICAgICAgICAgICAgIHRyZWUuaW5zZXJ0KG51
bURlZmluZWQpOwogICAgICAgICAgICAgKytudW1EZWZpbmVkOwogICAgICAgICB9CkBAIC0xNzg0
LDcgKzE3ODQsNyBAQCB1bnNpZ25lZCBKU0FycmF5Ojpjb21wYWN0Rm9yU29ydGluZyhKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEpCiAKICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKICAgICAgICAgZm9yIChTcGFyc2VBcnJheVZhbHVl
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQot
ICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbbnVtRGVmaW5lZCsrXS5zZXRXaXRob3V0V3Jp
dGVCYXJyaWVyKGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpKTsKKyAgICAgICAgICAgIHN0
b3JhZ2UtPm1fdmVjdG9yW251bURlZmluZWQrK10uc2V0V2l0aG91dFdyaXRlQmFycmllcihpdC0+
dmFsdWUuZ2V0Tm9uU3BhcnNlTW9kZSgpKTsKIAogICAgICAgICBkZWFsbG9jYXRlU3BhcnNlTWFw
KCk7CiAgICAgfQpAQCAtMTgzMSwxMyArMTgzMSwxMyBAQCB2b2lkIEpTQXJyYXk6OmNoZWNrQ29u
c2lzdGVuY3koQ29uc2lzdGVuY3lDaGVja1R5cGUgdHlwZSkKICAgICBpZiAobV9zcGFyc2VWYWx1
ZU1hcCkgewogICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQg
PSBtX3NwYXJzZVZhbHVlTWFwLT5lbmQoKTsKICAgICAgICAgZm9yIChTcGFyc2VBcnJheVZhbHVl
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fc3BhcnNlVmFsdWVNYXAtPmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgewotICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBpdC0+Zmlyc3Q7Cisg
ICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGl0LT5rZXk7CiAgICAgICAgICAgICBBU1NFUlQo
aW5kZXggPCBzdG9yYWdlLT5tX2xlbmd0aCk7CiAgICAgICAgICAgICBBU1NFUlQoaW5kZXggPj0g
bV92ZWN0b3JMZW5ndGgpOwogICAgICAgICAgICAgQVNTRVJUKGluZGV4IDw9IE1BWF9BUlJBWV9J
TkRFWCk7Ci0gICAgICAgICAgICBBU1NFUlQoaXQtPnNlY29uZCk7CisgICAgICAgICAgICBBU1NF
UlQoaXQtPnZhbHVlKTsKICAgICAgICAgICAgIGlmICh0eXBlICE9IERlc3RydWN0b3JDb25zaXN0
ZW5jeUNoZWNrKQotICAgICAgICAgICAgICAgIGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgp
LmlzVW5kZWZpbmVkKCk7IC8vIExpa2VseSB0byBjcmFzaCBpZiB0aGUgb2JqZWN0IHdhcyBkZWFs
bG9jYXRlZC4KKyAgICAgICAgICAgICAgICBpdC0+dmFsdWUuZ2V0Tm9uU3BhcnNlTW9kZSgpLmlz
VW5kZWZpbmVkKCk7IC8vIExpa2VseSB0byBjcmFzaCBpZiB0aGUgb2JqZWN0IHdhcyBkZWFsbG9j
YXRlZC4KICAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAKaW5kZXggOTI3YWQyNS4uY2YxYTQ0
YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJs
ZU9iamVjdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xU
YWJsZU9iamVjdC5jcHAKQEAgLTU1LDggKzU1LDggQEAgdm9pZCBKU1N5bWJvbFRhYmxlT2JqZWN0
OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywK
ICAgICBKU1N5bWJvbFRhYmxlT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU3ltYm9sVGFi
bGVPYmplY3QqPihvYmplY3QpOwogICAgIFN5bWJvbFRhYmxlOjpjb25zdF9pdGVyYXRvciBlbmQg
PSB0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgpLmVuZCgpOwogICAgIGZvciAoU3ltYm9sVGFibGU6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKCEoaXQtPnNlY29uZC5nZXRBdHRyaWJ1dGVz
KCkgJiBEb250RW51bSkgfHwgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykpCi0g
ICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyKGV4ZWMsIGl0LT5maXJzdC5n
ZXQoKSkpOworICAgICAgICBpZiAoIShpdC0+dmFsdWUuZ2V0QXR0cmlidXRlcygpICYgRG9udEVu
dW0pIHx8IChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpKQorICAgICAgICAgICAg
cHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihleGVjLCBpdC0+a2V5LmdldCgpKSk7CiAgICAg
fQogICAgIAogICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4
ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oCmluZGV4IDJiYmUyMWQuLmRmMTUyNDggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmpl
Y3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2Jq
ZWN0LmgKQEAgLTc2LDcgKzc2LDcgQEAgaW5saW5lIGJvb2wgc3ltYm9sVGFibGVHZXQoCiAgICAg
U3ltYm9sVGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSBzeW1ib2xUYWJsZS5maW5kKHByb3BlcnR5TmFt
ZS5wdWJsaWNOYW1lKCkpOwogICAgIGlmIChpdGVyID09IHN5bWJvbFRhYmxlLmVuZCgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgU3ltYm9sVGFibGVFbnRyeTo6RmFzdCBlbnRyeSA9IGl0
ZXItPnNlY29uZDsKKyAgICBTeW1ib2xUYWJsZUVudHJ5OjpGYXN0IGVudHJ5ID0gaXRlci0+dmFs
dWU7CiAgICAgQVNTRVJUKCFlbnRyeS5pc051bGwoKSk7CiAgICAgc2xvdC5zZXRWYWx1ZShvYmpl
Y3QtPnJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuZ2V0KCkpOwogICAgIHJldHVybiB0cnVl
OwpAQCAtOTAsNyArOTAsNyBAQCBpbmxpbmUgYm9vbCBzeW1ib2xUYWJsZUdldCgKICAgICBTeW1i
b2xUYWJsZTo6aXRlcmF0b3IgaXRlciA9IHN5bWJvbFRhYmxlLmZpbmQocHJvcGVydHlOYW1lLnB1
YmxpY05hbWUoKSk7CiAgICAgaWYgKGl0ZXIgPT0gc3ltYm9sVGFibGUuZW5kKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBTeW1ib2xUYWJsZUVudHJ5OjpGYXN0IGVudHJ5ID0gaXRlci0+
c2Vjb25kOworICAgIFN5bWJvbFRhYmxlRW50cnk6OkZhc3QgZW50cnkgPSBpdGVyLT52YWx1ZTsK
ICAgICBBU1NFUlQoIWVudHJ5LmlzTnVsbCgpKTsKICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0
b3IoCiAgICAgICAgIG9iamVjdC0+cmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKS5nZXQoKSwg
ZW50cnkuZ2V0QXR0cmlidXRlcygpIHwgRG9udERlbGV0ZSk7CkBAIC0xMDYsNyArMTA2LDcgQEAg
aW5saW5lIGJvb2wgc3ltYm9sVGFibGVHZXQoCiAgICAgU3ltYm9sVGFibGU6Oml0ZXJhdG9yIGl0
ZXIgPSBzeW1ib2xUYWJsZS5maW5kKHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCkpOwogICAgIGlm
IChpdGVyID09IHN5bWJvbFRhYmxlLmVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
U3ltYm9sVGFibGVFbnRyeTo6RmFzdCBlbnRyeSA9IGl0ZXItPnNlY29uZDsKKyAgICBTeW1ib2xU
YWJsZUVudHJ5OjpGYXN0IGVudHJ5ID0gaXRlci0+dmFsdWU7CiAgICAgQVNTRVJUKCFlbnRyeS5p
c051bGwoKSk7CiAgICAgc2xvdC5zZXRWYWx1ZShvYmplY3QtPnJlZ2lzdGVyQXQoZW50cnkuZ2V0
SW5kZXgoKSkuZ2V0KCkpOwogICAgIHNsb3RJc1dyaXRlYWJsZSA9ICFlbnRyeS5pc1JlYWRPbmx5
KCk7CkBAIC0xMjYsNyArMTI2LDcgQEAgaW5saW5lIGJvb2wgc3ltYm9sVGFibGVQdXQoCiAgICAg
aWYgKGl0ZXIgPT0gc3ltYm9sVGFibGUuZW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICBib29sIHdhc0ZhdDsKLSAgICBTeW1ib2xUYWJsZUVudHJ5OjpGYXN0IGZhc3RFbnRyeSA9IGl0
ZXItPnNlY29uZC5nZXRGYXN0KHdhc0ZhdCk7CisgICAgU3ltYm9sVGFibGVFbnRyeTo6RmFzdCBm
YXN0RW50cnkgPSBpdGVyLT52YWx1ZS5nZXRGYXN0KHdhc0ZhdCk7CiAgICAgQVNTRVJUKCFmYXN0
RW50cnkuaXNOdWxsKCkpOwogICAgIGlmIChmYXN0RW50cnkuaXNSZWFkT25seSgpKSB7CiAgICAg
ICAgIGlmIChzaG91bGRUaHJvdykKQEAgLTEzNCw3ICsxMzQsNyBAQCBpbmxpbmUgYm9vbCBzeW1i
b2xUYWJsZVB1dCgKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGlmIChVTkxJS0VM
WSh3YXNGYXQpKQotICAgICAgICBpdGVyLT5zZWNvbmQubm90aWZ5V3JpdGUoKTsKKyAgICAgICAg
aXRlci0+dmFsdWUubm90aWZ5V3JpdGUoKTsKICAgICBvYmplY3QtPnJlZ2lzdGVyQXQoZmFzdEVu
dHJ5LmdldEluZGV4KCkpLnNldChnbG9iYWxEYXRhLCBvYmplY3QsIHZhbHVlKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KQEAgLTE0OSw3ICsxNDksNyBAQCBpbmxpbmUgYm9vbCBzeW1ib2xUYWJsZVB1
dFdpdGhBdHRyaWJ1dGVzKAogICAgIFN5bWJvbFRhYmxlOjppdGVyYXRvciBpdGVyID0gb2JqZWN0
LT5zeW1ib2xUYWJsZSgpLmZpbmQocHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSk7CiAgICAgaWYg
KGl0ZXIgPT0gb2JqZWN0LT5zeW1ib2xUYWJsZSgpLmVuZCgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgU3ltYm9sVGFibGVFbnRyeSYgZW50cnkgPSBpdGVyLT5zZWNvbmQ7CisgICAgU3lt
Ym9sVGFibGVFbnRyeSYgZW50cnkgPSBpdGVyLT52YWx1ZTsKICAgICBBU1NFUlQoIWVudHJ5Lmlz
TnVsbCgpKTsKICAgICBlbnRyeS5ub3RpZnlXcml0ZSgpOwogICAgIGVudHJ5LnNldEF0dHJpYnV0
ZXMoYXR0cmlidXRlcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9SZWdFeHBDYWNoZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBD
YWNoZS5jcHAKaW5kZXggNTNhMTNhNC4uYWI0Zjk4NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlLmNwcApAQCAtODAsNyArODAsNyBAQCB2b2lkIFJlZ0V4
cENhY2hlOjppbnZhbGlkYXRlQ29kZSgpCiAKICAgICBSZWdFeHBDYWNoZU1hcDo6aXRlcmF0b3Ig
ZW5kID0gbV93ZWFrQ2FjaGUuZW5kKCk7CiAgICAgZm9yIChSZWdFeHBDYWNoZU1hcDo6aXRlcmF0
b3IgaXQgPSBtX3dlYWtDYWNoZS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAg
UmVnRXhwKiByZWdFeHAgPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICBSZWdFeHAqIHJlZ0V4
cCA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgaWYgKCFyZWdFeHApIC8vIFNraXAgem9tYmll
cy4KICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICByZWdFeHAtPmludmFsaWRhdGVDb2Rl
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrR0NNYXAu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ01hcC5oCmluZGV4IDY5MjYx
NjUuLjUyZTVlMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dl
YWtHQ01hcC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ01hcC5o
CkBAIC02Myw3ICs2Myw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHR5cGVuYW1lIE1hcFR5
cGU6Oml0ZXJhdG9yIGVuZCA9IG1fbWFwLmVuZCgpOwogICAgICAgICBmb3IgKHR5cGVuYW1lIE1h
cFR5cGU6Oml0ZXJhdG9yIHB0ciA9IG1fbWFwLmJlZ2luKCk7IHB0ciAhPSBlbmQ7ICsrcHRyKQot
ICAgICAgICAgICAgV2Vha1NldDo6ZGVhbGxvY2F0ZShwdHItPnNlY29uZCk7CisgICAgICAgICAg
ICBXZWFrU2V0OjpkZWFsbG9jYXRlKHB0ci0+dmFsdWUpOwogICAgICAgICBtX21hcC5jbGVhcigp
OwogICAgIH0KIApAQCAtODAsOCArODAsOCBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVF9VTlVT
RUQoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5hcGlMb2NrKCkuY3VycmVudFRocmVhZElzSG9sZGlu
Z0xvY2soKSk7CiAgICAgICAgIHR5cGVuYW1lIE1hcFR5cGU6OkFkZFJlc3VsdCByZXN1bHQgPSBt
X21hcC5hZGQoa2V5LCAwKTsKICAgICAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAg
ICAgICAgIFdlYWtTZXQ6OmRlYWxsb2NhdGUocmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOwotICAg
ICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IFdlYWtTZXQ6OmFsbG9jYXRlKHZhbHVlLCB0
aGlzLCBGaW5hbGl6ZXJDYWxsYmFjazo6ZmluYWxpemVyQ29udGV4dEZvcihrZXkpKTsKKyAgICAg
ICAgICAgIFdlYWtTZXQ6OmRlYWxsb2NhdGUocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CisgICAg
ICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBXZWFrU2V0OjphbGxvY2F0ZSh2YWx1ZSwgdGhp
cywgRmluYWxpemVyQ2FsbGJhY2s6OmZpbmFsaXplckNvbnRleHRGb3Ioa2V5KSk7CiAgICAgfQog
CiAgICAgdm9pZCByZW1vdmUoY29uc3QgS2V5VHlwZSYga2V5KQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rvb2xzL1Byb2ZpbGVUcmVlTm9kZS5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rvb2xzL1Byb2ZpbGVUcmVlTm9kZS5oCmluZGV4IDdiNTFlZmIuLjdiNWE5NWUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Qcm9maWxlVHJlZU5vZGUuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvUHJvZmlsZVRyZWVOb2RlLmgKQEAgLTUx
LDcgKzUxLDcgQEAgcHVibGljOgogICAgIAogICAgICAgICBQcm9maWxlVHJlZU5vZGUgbmV3RW50
cnk7CiAgICAgICAgIE1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fY2hpbGRyZW4tPmFkZChTdHJp
bmcobmFtZSksIG5ld0VudHJ5KTsKLSAgICAgICAgUHJvZmlsZVRyZWVOb2RlKiBjaGlsZEluTWFw
ID0gJnJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICBQcm9maWxlVHJlZU5vZGUqIGNo
aWxkSW5NYXAgPSAmcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgKytjaGlsZEluTWFw
LT5tX2NvdW50OwogICAgICAgICByZXR1cm4gY2hpbGRJbk1hcDsKICAgICB9CkBAIC03Miw3ICs3
Miw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB1aW50NjRfdCBj
aGlsZENvdW50ID0gMDsKICAgICAgICAgZm9yIChNYXA6Oml0ZXJhdG9yIGl0ID0gbV9jaGlsZHJl
bi0+YmVnaW4oKTsgaXQgIT0gbV9jaGlsZHJlbi0+ZW5kKCk7ICsraXQpCi0gICAgICAgICAgICBj
aGlsZENvdW50ICs9IGl0LT5zZWNvbmQuY291bnQoKTsKKyAgICAgICAgICAgIGNoaWxkQ291bnQg
Kz0gaXQtPnZhbHVlLmNvdW50KCk7CiAgICAgICAgIHJldHVybiBjaGlsZENvdW50OwogICAgIH0K
ICAgICAKQEAgLTk3LDE5ICs5NywxOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGluZGVudDsgKytpKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIiAg
ICAiKTsKICAgICAgICAgICAgIGRhdGFMb2coIiUgOGxsZDogJXMgKCVsbGQgc3RhY2sgdG9wKVxu
IiwKLSAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KGVudHJ5LT5zZWNvbmQu
Y291bnQoKSksCi0gICAgICAgICAgICAgICAgZW50cnktPmZpcnN0LnV0ZjgoKS5kYXRhKCksCi0g
ICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihlbnRyeS0+c2Vjb25kLmNvdW50
KCkgLSBlbnRyeS0+c2Vjb25kLmNoaWxkQ291bnQoKSkpOworICAgICAgICAgICAgICAgIHN0YXRp
Y19jYXN0PGxvbmcgbG9uZz4oZW50cnktPnZhbHVlLmNvdW50KCkpLAorICAgICAgICAgICAgICAg
IGVudHJ5LT5rZXkudXRmOCgpLmRhdGEoKSwKKyAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxs
b25nIGxvbmc+KGVudHJ5LT52YWx1ZS5jb3VudCgpIC0gZW50cnktPnZhbHVlLmNoaWxkQ291bnQo
KSkpOwogCiAgICAgICAgICAgICAvLyBSZWN1cnNpdmVseSBkdW1wIHRoZSBjaGlsZCBub2Rlcy4K
LSAgICAgICAgICAgIGVudHJ5LT5zZWNvbmQuZHVtcEludGVybmFsKGluZGVudCArIDEpOworICAg
ICAgICAgICAgZW50cnktPnZhbHVlLmR1bXBJbnRlcm5hbChpbmRlbnQgKyAxKTsKICAgICAgICAg
fQogICAgIH0KIAogICAgIHN0YXRpYyBpbnQgY29tcGFyZUVudHJpZXMoY29uc3Qgdm9pZCogYSwg
Y29uc3Qgdm9pZCogYikKICAgICB7Ci0gICAgICAgIHVpbnQ2NF90IGRhID0gKCpzdGF0aWNfY2Fz
dDxNYXBFbnRyeSogY29uc3QgKj4oYSkpLT5zZWNvbmQuY291bnQoKTsKLSAgICAgICAgdWludDY0
X3QgZGIgPSAoKnN0YXRpY19jYXN0PE1hcEVudHJ5KiBjb25zdCAqPihiKSktPnNlY29uZC5jb3Vu
dCgpOworICAgICAgICB1aW50NjRfdCBkYSA9ICgqc3RhdGljX2Nhc3Q8TWFwRW50cnkqIGNvbnN0
ICo+KGEpKS0+dmFsdWUuY291bnQoKTsKKyAgICAgICAgdWludDY0X3QgZGIgPSAoKnN0YXRpY19j
YXN0PE1hcEVudHJ5KiBjb25zdCAqPihiKSktPnZhbHVlLmNvdW50KCk7CiAgICAgICAgIHJldHVy
biAoZGEgPCBkYikgLSAoZGEgPiBkYik7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi9IYXNoQ291bnRlZFNldC5oIGIvU291cmNlL1dURi93dGYvSGFzaENvdW50ZWRTZXQuaApp
bmRleCBlZjg5YmRiLi5lZmY0YTI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoQ291
bnRlZFNldC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0hhc2hDb3VudGVkU2V0LmgKQEAgLTE1NCw3
ICsxNTQsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICBpbmxpbmUgdHlwZW5hbWUgSGFzaENvdW50
ZWRTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OkFkZFJlc3VsdCBIYXNoQ291bnRl
ZFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6YWRkKGNvbnN0IFZhbHVlVHlwZSAm
dmFsdWUpCiAgICAgewogICAgICAgICBBZGRSZXN1bHQgcmVzdWx0ID0gbV9pbXBsLmFkZCh2YWx1
ZSwgMCk7Ci0gICAgICAgICsrcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgICsrcmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAg
CkBAIC0xNzAsMTEgKzE3MCwxMSBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgaWYgKGl0ID09
IGVuZCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIHVuc2lnbmVkIG9s
ZFZhbCA9IGl0LT5zZWNvbmQ7CisgICAgICAgIHVuc2lnbmVkIG9sZFZhbCA9IGl0LT52YWx1ZTsK
ICAgICAgICAgQVNTRVJUKG9sZFZhbCk7CiAgICAgICAgIHVuc2lnbmVkIG5ld1ZhbCA9IG9sZFZh
bCAtIDE7CiAgICAgICAgIGlmIChuZXdWYWwpIHsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQgPSBu
ZXdWYWw7CisgICAgICAgICAgICBpdC0+dmFsdWUgPSBuZXdWYWw7CiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIH0KIApAQCAtMjI2LDcgKzIyNiw3IEBAIG5hbWVzcGFjZSBXVEYg
ewogICAgICAgICBpdGVyYXRvciBpdCA9IGNvbGxlY3Rpb24uYmVnaW4oKTsKICAgICAgICAgaXRl
cmF0b3IgZW5kID0gY29sbGVjdGlvbi5lbmQoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaXQgIT0gZW5kOyArK2l0LCArK2kpCi0gICAgICAgICAgICB2ZWN0b3JbaV0gPSAoKml0KS5m
aXJzdDsKKyAgICAgICAgICAgIHZlY3RvcltpXSA9ICgqaXQpLmtleTsKICAgICB9CiAKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvSGFzaEl0ZXJhdG9ycy5oIGIvU291cmNlL1dURi93dGYv
SGFzaEl0ZXJhdG9ycy5oCmluZGV4IDYzOWZmNzIuLjNhODQxOGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvd3RmL0hhc2hJdGVyYXRvcnMuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoSXRlcmF0
b3JzLmgKQEAgLTkxLDcgKzkxLDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgcHVibGljOgogICAg
ICAgICBIYXNoVGFibGVDb25zdEtleXNJdGVyYXRvcihjb25zdCBDb25zdEl0ZXJhdG9yJiBpbXBs
KSA6IG1faW1wbChpbXBsKSB7fQogICAgICAgICAKLSAgICAgICAgY29uc3QgS2V5VHlwZSogZ2V0
KCkgY29uc3QgeyByZXR1cm4gJihtX2ltcGwuZ2V0KCktPmZpcnN0KTsgfQorICAgICAgICBjb25z
dCBLZXlUeXBlKiBnZXQoKSBjb25zdCB7IHJldHVybiAmKG1faW1wbC5nZXQoKS0+a2V5KTsgfQog
ICAgICAgICBjb25zdCBLZXlUeXBlJiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqZ2V0KCk7
IH0KICAgICAgICAgY29uc3QgS2V5VHlwZSogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIGdl
dCgpOyB9CiAKQEAgLTEwOCw3ICsxMDgsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICBwdWJsaWM6
CiAgICAgICAgIEhhc2hUYWJsZUNvbnN0VmFsdWVzSXRlcmF0b3IoY29uc3QgQ29uc3RJdGVyYXRv
ciYgaW1wbCkgOiBtX2ltcGwoaW1wbCkge30KICAgICAgICAgCi0gICAgICAgIGNvbnN0IE1hcHBl
ZFR5cGUqIGdldCgpIGNvbnN0IHsgcmV0dXJuICYobV9pbXBsLmdldCgpLT5zZWNvbmQpOyB9Cisg
ICAgICAgIGNvbnN0IE1hcHBlZFR5cGUqIGdldCgpIGNvbnN0IHsgcmV0dXJuICYobV9pbXBsLmdl
dCgpLT52YWx1ZSk7IH0KICAgICAgICAgY29uc3QgTWFwcGVkVHlwZSYgb3BlcmF0b3IqKCkgY29u
c3QgeyByZXR1cm4gKmdldCgpOyB9CiAgICAgICAgIGNvbnN0IE1hcHBlZFR5cGUqIG9wZXJhdG9y
LT4oKSBjb25zdCB7IHJldHVybiBnZXQoKTsgfQogCkBAIC0xNDksNyArMTQ5LDcgQEAgbmFtZXNw
YWNlIFdURiB7CiAgICAgcHVibGljOgogICAgICAgICBIYXNoVGFibGVWYWx1ZXNJdGVyYXRvcihj
b25zdCBJdGVyYXRvciYgaW1wbCkgOiBtX2ltcGwoaW1wbCkge30KICAgICAgICAgCi0gICAgICAg
IE1hcHBlZFR5cGUqIGdldCgpIGNvbnN0IHsgcmV0dXJuICYobV9pbXBsLmdldCgpLT5zZWNvbmQp
OyB9CisgICAgICAgIE1hcHBlZFR5cGUqIGdldCgpIGNvbnN0IHsgcmV0dXJuICYobV9pbXBsLmdl
dCgpLT52YWx1ZSk7IH0KICAgICAgICAgTWFwcGVkVHlwZSYgb3BlcmF0b3IqKCkgY29uc3QgeyBy
ZXR1cm4gKmdldCgpOyB9CiAgICAgICAgIE1hcHBlZFR5cGUqIG9wZXJhdG9yLT4oKSBjb25zdCB7
IHJldHVybiBnZXQoKTsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoTWFwLmgg
Yi9Tb3VyY2UvV1RGL3d0Zi9IYXNoTWFwLmgKaW5kZXggOTAxMDQ3NC4uMTBlZTQyNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dURi93dGYvSGFzaE1hcC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0hhc2hN
YXAuaApAQCAtMzUsNyArMzUsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICB9OwogCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEtleVZhbHVlUGFpcktleUV4dHJhY3RvciB7Ci0gICAg
ICAgIHN0YXRpYyBjb25zdCB0eXBlbmFtZSBUOjpLZXlUeXBlJiBleHRyYWN0KGNvbnN0IFQmIHAp
IHsgcmV0dXJuIHAuZmlyc3Q7IH0KKyAgICAgICAgc3RhdGljIGNvbnN0IHR5cGVuYW1lIFQ6Oktl
eVR5cGUmIGV4dHJhY3QoY29uc3QgVCYgcCkgeyByZXR1cm4gcC5rZXk7IH0KICAgICB9OwogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1l
IEhhc2hBcmcgPSB0eXBlbmFtZSBEZWZhdWx0SGFzaDxLZXlBcmc+OjpIYXNoLApAQCAtMjExLDcg
KzIxMSw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNJ
c0VtcHR5VmFsdWVGdW5jdGlvbiA9IHRydWU7CiAgICAgICAgIHN0YXRpYyBib29sIGlzRW1wdHlW
YWx1ZShjb25zdCB0eXBlbmFtZSBLZXlWYWx1ZVBhaXJIYXNoVHJhaXRzPEtleVRyYWl0cywgTWFw
cGVkVHJhaXRzPjo6VHJhaXRUeXBlJiB2YWx1ZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIGlzSGFzaFRyYWl0c0VtcHR5VmFsdWU8S2V5VHJhaXRzPih2YWx1ZS5maXJzdCk7CisgICAg
ICAgICAgICByZXR1cm4gaXNIYXNoVHJhaXRzRW1wdHlWYWx1ZTxLZXlUcmFpdHM+KHZhbHVlLmtl
eSk7CiAgICAgICAgIH0KICAgICB9OwogCkBAIC0yMjEsOCArMjIxLDggQEAgbmFtZXNwYWNlIFdU
RiB7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IHN0YXRpYyBib29s
IGVxdWFsKGNvbnN0IFQmIGEsIGNvbnN0IFUmIGIpIHsgcmV0dXJuIEhhc2hGdW5jdGlvbnM6OmVx
dWFsKGEsIGIpOyB9CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5
cGVuYW1lIFY+IHN0YXRpYyB2b2lkIHRyYW5zbGF0ZShUJiBsb2NhdGlvbiwgY29uc3QgVSYga2V5
LCBjb25zdCBWJiBtYXBwZWQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGxvY2F0aW9uLmZpcnN0
ID0ga2V5OwotICAgICAgICAgICAgVmFsdWVUcmFpdHM6OlZhbHVlVHJhaXRzOjpzdG9yZShtYXBw
ZWQsIGxvY2F0aW9uLnNlY29uZCk7CisgICAgICAgICAgICBsb2NhdGlvbi5rZXkgPSBrZXk7Cisg
ICAgICAgICAgICBWYWx1ZVRyYWl0czo6VmFsdWVUcmFpdHM6OnN0b3JlKG1hcHBlZCwgbG9jYXRp
b24udmFsdWUpOwogICAgICAgICB9CiAgICAgfTsKIApAQCAtMjMyLDggKzIzMiw4IEBAIG5hbWVz
cGFjZSBXVEYgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBzdGF0
aWMgYm9vbCBlcXVhbChjb25zdCBUJiBhLCBjb25zdCBVJiBiKSB7IHJldHVybiBUcmFuc2xhdG9y
OjplcXVhbChhLCBiKTsgfQogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
LCB0eXBlbmFtZSBWPiBzdGF0aWMgdm9pZCB0cmFuc2xhdGUoVCYgbG9jYXRpb24sIGNvbnN0IFUm
IGtleSwgY29uc3QgViYgbWFwcGVkLCB1bnNpZ25lZCBoYXNoQ29kZSkKICAgICAgICAgewotICAg
ICAgICAgICAgVHJhbnNsYXRvcjo6dHJhbnNsYXRlKGxvY2F0aW9uLmZpcnN0LCBrZXksIGhhc2hD
b2RlKTsKLSAgICAgICAgICAgIFZhbHVlVHJhaXRzOjpWYWx1ZVRyYWl0czo6c3RvcmUobWFwcGVk
LCBsb2NhdGlvbi5zZWNvbmQpOworICAgICAgICAgICAgVHJhbnNsYXRvcjo6dHJhbnNsYXRlKGxv
Y2F0aW9uLmtleSwga2V5LCBoYXNoQ29kZSk7CisgICAgICAgICAgICBWYWx1ZVRyYWl0czo6VmFs
dWVUcmFpdHM6OnN0b3JlKG1hcHBlZCwgbG9jYXRpb24udmFsdWUpOwogICAgICAgICB9CiAgICAg
fTsKIApAQCAtMzQxLDcgKzM0MSw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBBZGRSZXN1
bHQgcmVzdWx0ID0gaW5saW5lQWRkKGtleSwgbWFwcGVkKTsKICAgICAgICAgaWYgKCFyZXN1bHQu
aXNOZXdFbnRyeSkgewogICAgICAgICAgICAgLy8gVGhlIGlubGluZUFkZCBjYWxsIGFib3ZlIGZv
dW5kIGFuIGV4aXN0aW5nIGhhc2ggdGFibGUgZW50cnk7IHdlIG5lZWQgdG8gc2V0IHRoZSBtYXBw
ZWQgdmFsdWUuCi0gICAgICAgICAgICBNYXBwZWRUcmFpdHM6OnN0b3JlKG1hcHBlZCwgcmVzdWx0
Lml0ZXJhdG9yLT5zZWNvbmQpOworICAgICAgICAgICAgTWFwcGVkVHJhaXRzOjpzdG9yZShtYXBw
ZWQsIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICAgfQpAQCAtMzY4LDcgKzM2OCw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAg
ICBWYWx1ZVR5cGUqIGVudHJ5ID0gY29uc3RfY2FzdDxIYXNoVGFibGVUeXBlJj4obV9pbXBsKS5s
b29rdXAoa2V5KTsKICAgICAgICAgaWYgKCFlbnRyeSkKICAgICAgICAgICAgIHJldHVybiBNYXBw
ZWRUcmFpdHM6OnBlZWsoTWFwcGVkVHJhaXRzOjplbXB0eVZhbHVlKCkpOwotICAgICAgICByZXR1
cm4gTWFwcGVkVHJhaXRzOjpwZWVrKGVudHJ5LT5zZWNvbmQpOworICAgICAgICByZXR1cm4gTWFw
cGVkVHJhaXRzOjpwZWVrKGVudHJ5LT52YWx1ZSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4K
QEAgLTM5OSw3ICszOTksNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgaXRlcmF0b3IgaXQg
PSBmaW5kKGtleSk7CiAgICAgICAgIGlmIChpdCA9PSBlbmQoKSkKICAgICAgICAgICAgIHJldHVy
biBNYXBwZWRUcmFpdHM6OnBhc3NPdXQoTWFwcGVkVHJhaXRzOjplbXB0eVZhbHVlKCkpOwotICAg
ICAgICBNYXBwZWRQYXNzT3V0VHlwZSByZXN1bHQgPSBNYXBwZWRUcmFpdHM6OnBhc3NPdXQoaXQt
PnNlY29uZCk7CisgICAgICAgIE1hcHBlZFBhc3NPdXRUeXBlIHJlc3VsdCA9IE1hcHBlZFRyYWl0
czo6cGFzc091dChpdC0+dmFsdWUpOwogICAgICAgICByZW1vdmUoaXQpOwogICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgIH0KQEAgLTQyMSw4ICs0MjEsOCBAQCBuYW1lc3BhY2UgV1RGIHsKICAg
ICAgICAgY29uc3RfaXRlcmF0b3IgZW5kID0gYS5lbmQoKTsKICAgICAgICAgY29uc3RfaXRlcmF0
b3Igbm90Rm91bmQgPSBiLmVuZCgpOwogICAgICAgICBmb3IgKGNvbnN0X2l0ZXJhdG9yIGl0ID0g
YS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGNvbnN0X2l0ZXJhdG9y
IGJQb3MgPSBiLmZpbmQoaXQtPmZpcnN0KTsKLSAgICAgICAgICAgIGlmIChiUG9zID09IG5vdEZv
dW5kIHx8IGl0LT5zZWNvbmQgIT0gYlBvcy0+c2Vjb25kKQorICAgICAgICAgICAgY29uc3RfaXRl
cmF0b3IgYlBvcyA9IGIuZmluZChpdC0+a2V5KTsKKyAgICAgICAgICAgIGlmIChiUG9zID09IG5v
dEZvdW5kIHx8IGl0LT52YWx1ZSAhPSBiUG9zLT52YWx1ZSkKICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIH0KIApAQCAtNDM1LDM0ICs0MzUsMjIgQEAgbmFtZXNwYWNlIFdU
RiB7CiAgICAgICAgIHJldHVybiAhKGEgPT0gYik7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgSGFzaFRhYmxlVHlwZT4KLSAgICB2b2lkIGRlbGV0ZUFsbFBhaXJTZWNvbmRzKEhhc2hU
YWJsZVR5cGUmIGNvbGxlY3Rpb24pCi0gICAgewotICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIEhh
c2hUYWJsZVR5cGU6OmNvbnN0X2l0ZXJhdG9yIGl0ZXJhdG9yOwotICAgICAgICBpdGVyYXRvciBl
bmQgPSBjb2xsZWN0aW9uLmVuZCgpOwotICAgICAgICBmb3IgKGl0ZXJhdG9yIGl0ID0gY29sbGVj
dGlvbi5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBkZWxldGUgaXQtPnNl
Y29uZDsKLSAgICB9Ci0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBl
bmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgogICAgIGlubGluZSB2b2lkIGRlbGV0ZUFs
bFZhbHVlcyhjb25zdCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+JiBjb2xsZWN0aW9uKQogICAgIHsK
LSAgICAgICAgZGVsZXRlQWxsUGFpclNlY29uZHMoY29sbGVjdGlvbik7Ci0gICAgfQotCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlVHlwZT4KLSAgICB2b2lkIGRlbGV0ZUFsbFBhaXJG
aXJzdHMoSGFzaFRhYmxlVHlwZSYgY29sbGVjdGlvbikKLSAgICB7Ci0gICAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgSGFzaFRhYmxlVHlwZTo6Y29uc3RfaXRlcmF0b3IgaXRlcmF0b3I7CisgICAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6Y29uc3RfaXRlcmF0b3Ig
aXRlcmF0b3I7CiAgICAgICAgIGl0ZXJhdG9yIGVuZCA9IGNvbGxlY3Rpb24uZW5kKCk7CiAgICAg
ICAgIGZvciAoaXRlcmF0b3IgaXQgPSBjb2xsZWN0aW9uLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkKLSAgICAgICAgICAgIGRlbGV0ZSBpdC0+Zmlyc3Q7CisgICAgICAgICAgICBkZWxldGUgaXQt
PnZhbHVlOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5
cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+CiAgICAgaW5saW5lIHZvaWQgZGVsZXRl
QWxsS2V5cyhjb25zdCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+JiBjb2xsZWN0aW9uKQogICAgIHsK
LSAgICAgICAgZGVsZXRlQWxsUGFpckZpcnN0cyhjb2xsZWN0aW9uKTsKKyAgICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojpjb25zdF9pdGVyYXRvciBpdGVyYXRv
cjsKKyAgICAgICAgaXRlcmF0b3IgZW5kID0gY29sbGVjdGlvbi5lbmQoKTsKKyAgICAgICAgZm9y
IChpdGVyYXRvciBpdCA9IGNvbGxlY3Rpb24uYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAg
ICAgICAgICAgZGVsZXRlIGl0LT5rZXk7CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5
cGVuYW1lIFk+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaCBiL1NvdXJj
ZS9XVEYvd3RmL0hhc2hUYWJsZS5oCmluZGV4IDFjZTNjNWMuLjE2ZmRkOWUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0hhc2hUYWJs
ZS5oCkBAIC0yODYsOCArMjg2LDggQEAgbmFtZXNwYWNlIFdURiB7CiAKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgdm9pZCBoYXNoVGFibGVTd2FwKEtleVZhbHVl
UGFpcjxULCBVPiYgYSwgS2V5VmFsdWVQYWlyPFQsIFU+JiBiKQogICAgIHsKLSAgICAgICAgc3dh
cChhLmZpcnN0LCBiLmZpcnN0KTsKLSAgICAgICAgc3dhcChhLnNlY29uZCwgYi5zZWNvbmQpOwor
ICAgICAgICBzd2FwKGEua2V5LCBiLmtleSk7CisgICAgICAgIHN3YXAoYS52YWx1ZSwgYi52YWx1
ZSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgYm9vbCB1c2VTd2FwPiBzdHJ1
Y3QgTW92ZXI7CkBAIC0xMjQ2LDcgKzEyNDYsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAg
ICAgIEFTU0VSVChlbnRyeSA9PSBpdC5tX3Bvc2l0aW9uKTsKICAgICAgICAgICAgICsrY291bnQ7
CiAKLSAgICAgICAgICAgIFZhbHVlQ2hlY2s8S2V5Pjo6Y2hlY2tDb25zaXN0ZW5jeShpdC0+Zmly
c3QpOworICAgICAgICAgICAgVmFsdWVDaGVjazxLZXk+OjpjaGVja0NvbnNpc3RlbmN5KGl0LT5r
ZXkpOwogICAgICAgICB9CiAKICAgICAgICAgQVNTRVJUKGNvdW50ID09IG1fa2V5Q291bnQpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvSGFzaFRyYWl0cy5oIGIvU291cmNlL1dURi93dGYv
SGFzaFRyYWl0cy5oCmluZGV4IGViZTc5NWUuLjczYmYyYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
VEYvd3RmL0hhc2hUcmFpdHMuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoVHJhaXRzLmgKQEAg
LTE5MywyMSArMTkzLDIwIEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICB9CiAKICAgICAgICAg
S2V5VmFsdWVQYWlyKGNvbnN0IEtleVR5cGVBcmcmIGtleSwgY29uc3QgVmFsdWVUeXBlQXJnJiB2
YWx1ZSkKLSAgICAgICAgICAgIDogZmlyc3Qoa2V5KQotICAgICAgICAgICAgLCBzZWNvbmQodmFs
dWUpCisgICAgICAgICAgICA6IGtleShrZXkpCisgICAgICAgICAgICAsIHZhbHVlKHZhbHVlKQog
ICAgICAgICB7CiAgICAgICAgIH0KIAogICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3RoZXJL
ZXlUeXBlLCB0eXBlbmFtZSBPdGhlclZhbHVlVHlwZT4KICAgICAgICAgS2V5VmFsdWVQYWlyKGNv
bnN0IEtleVZhbHVlUGFpcjxPdGhlcktleVR5cGUsIE90aGVyVmFsdWVUeXBlPiYgb3RoZXIpCi0g
ICAgICAgICAgICA6IGZpcnN0KG90aGVyLmZpcnN0KQotICAgICAgICAgICAgLCBzZWNvbmQob3Ro
ZXIuc2Vjb25kKQorICAgICAgICAgICAgOiBrZXkob3RoZXIua2V5KQorICAgICAgICAgICAgLCB2
YWx1ZShvdGhlci52YWx1ZSkKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgLy8gVE9E
TzogUmVuYW1lIHRoZXNlIHRvIGtleSBhbmQgdmFsdWUuIFNlZSBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI3ODQuCi0gICAgICAgIEtleVR5cGVBcmcgZmlyc3Q7Ci0g
ICAgICAgIFZhbHVlVHlwZUFyZyBzZWNvbmQ7CisgICAgICAgIEtleVR5cGVBcmcga2V5OworICAg
ICAgICBWYWx1ZVR5cGVBcmcgdmFsdWU7CiAgICAgfTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEtleVRyYWl0c0FyZywgdHlwZW5hbWUgVmFsdWVUcmFpdHNBcmc+CkBAIC0yMjQsOCArMjIzLDgg
QEAgbmFtZXNwYWNlIFdURiB7CiAKICAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5pbXVtVGFi
bGVTaXplID0gS2V5VHJhaXRzOjptaW5pbXVtVGFibGVTaXplOwogCi0gICAgICAgIHN0YXRpYyB2
b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShUcmFpdFR5cGUmIHNsb3QpIHsgS2V5VHJhaXRzOjpj
b25zdHJ1Y3REZWxldGVkVmFsdWUoc2xvdC5maXJzdCk7IH0KLSAgICAgICAgc3RhdGljIGJvb2wg
aXNEZWxldGVkVmFsdWUoY29uc3QgVHJhaXRUeXBlJiB2YWx1ZSkgeyByZXR1cm4gS2V5VHJhaXRz
Ojppc0RlbGV0ZWRWYWx1ZSh2YWx1ZS5maXJzdCk7IH0KKyAgICAgICAgc3RhdGljIHZvaWQgY29u
c3RydWN0RGVsZXRlZFZhbHVlKFRyYWl0VHlwZSYgc2xvdCkgeyBLZXlUcmFpdHM6OmNvbnN0cnVj
dERlbGV0ZWRWYWx1ZShzbG90LmtleSk7IH0KKyAgICAgICAgc3RhdGljIGJvb2wgaXNEZWxldGVk
VmFsdWUoY29uc3QgVHJhaXRUeXBlJiB2YWx1ZSkgeyByZXR1cm4gS2V5VHJhaXRzOjppc0RlbGV0
ZWRWYWx1ZSh2YWx1ZS5rZXkpOyB9CiAgICAgfTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtl
eSwgdHlwZW5hbWUgVmFsdWU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2Nh
dG9yLmNwcCBiL1NvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3IuY3BwCmluZGV4IDBhN2EzMWUu
LjM2ZGU5ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3IuY3BwCisr
KyBiL1NvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3IuY3BwCkBAIC0zMDksOSArMzA5LDkgQEAg
dm9pZCBNZXRhQWxsb2NhdG9yOjphZGRGcmVlU3BhY2Uodm9pZCogc3RhcnQsIHNpemVfdCBzaXpl
SW5CeXRlcykKICAgICAgICAgLy8gV2UgaGF2ZSBzb21ldGhpbmcgd2UgY2FuIGNvYWxlc2NlIHdp
dGggb24gdGhlIGxlZnQuIFJlbW92ZSBpdCBmcm9tIHRoZSB0cmVlLCBhbmQKICAgICAgICAgLy8g
cmVtb3ZlIGl0cyBlbmQgZnJvbSB0aGUgZW5kIGFkZHJlc3MgbWFwLgogICAgICAgICAKLSAgICAg
ICAgQVNTRVJUKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0
cl90PihsZWZ0TmVpZ2hib3ItPnNlY29uZC0+bV9zdGFydCkgKyBsZWZ0TmVpZ2hib3ItPnNlY29u
ZC0+bV9zaXplSW5CeXRlcykgPT0gbGVmdE5laWdoYm9yLT5maXJzdCk7CisgICAgICAgIEFTU0VS
VChyZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obGVm
dE5laWdoYm9yLT52YWx1ZS0+bV9zdGFydCkgKyBsZWZ0TmVpZ2hib3ItPnZhbHVlLT5tX3NpemVJ
bkJ5dGVzKSA9PSBsZWZ0TmVpZ2hib3ItPmtleSk7CiAgICAgICAgIAotICAgICAgICBGcmVlU3Bh
Y2VOb2RlKiBsZWZ0Tm9kZSA9IGxlZnROZWlnaGJvci0+c2Vjb25kOworICAgICAgICBGcmVlU3Bh
Y2VOb2RlKiBsZWZ0Tm9kZSA9IGxlZnROZWlnaGJvci0+dmFsdWU7CiAgICAgICAgIAogICAgICAg
ICB2b2lkKiBsZWZ0U3RhcnQgPSBsZWZ0Tm9kZS0+bV9zdGFydDsKICAgICAgICAgc2l6ZV90IGxl
ZnRTaXplID0gbGVmdE5vZGUtPm1fc2l6ZUluQnl0ZXM7CkBAIC0zMjcsMTAgKzMyNywxMCBAQCB2
b2lkIE1ldGFBbGxvY2F0b3I6OmFkZEZyZWVTcGFjZSh2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJ
bkJ5dGVzKQogICAgICAgICAgICAgLy8gRnJlZWluZyBzb21ldGhpbmcgaW4gdGhlIG1pZGRsZSBv
ZiBmcmVlIGJsb2Nrcy4gQ29hbGVzY2UgYm90aCBsZWZ0IGFuZAogICAgICAgICAgICAgLy8gcmln
aHQsIHdoaWxzdCByZW1vdmluZyB0aGUgcmlnaHQgbmVpZ2hib3IgZnJvbSB0aGUgbWFwcy4KICAg
ICAgICAgICAgIAotICAgICAgICAgICAgQVNTRVJUKHJpZ2h0TmVpZ2hib3ItPnNlY29uZC0+bV9z
dGFydCA9PSByaWdodE5laWdoYm9yLT5maXJzdCk7CisgICAgICAgICAgICBBU1NFUlQocmlnaHRO
ZWlnaGJvci0+dmFsdWUtPm1fc3RhcnQgPT0gcmlnaHROZWlnaGJvci0+a2V5KTsKICAgICAgICAg
ICAgIAotICAgICAgICAgICAgRnJlZVNwYWNlTm9kZSogcmlnaHROb2RlID0gcmlnaHROZWlnaGJv
ci0+c2Vjb25kOwotICAgICAgICAgICAgdm9pZCogcmlnaHRTdGFydCA9IHJpZ2h0TmVpZ2hib3It
PmZpcnN0OworICAgICAgICAgICAgRnJlZVNwYWNlTm9kZSogcmlnaHROb2RlID0gcmlnaHROZWln
aGJvci0+dmFsdWU7CisgICAgICAgICAgICB2b2lkKiByaWdodFN0YXJ0ID0gcmlnaHROZWlnaGJv
ci0+a2V5OwogICAgICAgICAgICAgc2l6ZV90IHJpZ2h0U2l6ZSA9IHJpZ2h0Tm9kZS0+bV9zaXpl
SW5CeXRlczsKICAgICAgICAgICAgIHZvaWQqIHJpZ2h0RW5kID0gcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHJpZ2h0U3RhcnQpICsgcmlnaHRTaXpl
KTsKICAgICAgICAgICAgIApAQCAtMzU3LDggKzM1Nyw4IEBAIHZvaWQgTWV0YUFsbG9jYXRvcjo6
YWRkRnJlZVNwYWNlKHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMpCiAgICAgICAgIC8v
IENhbm5vdCBjb2FsZXNjZSB3aXRoIGxlZnQ7IHRyeSB0byBzZWUgaWYgd2UgY2FuIGNvYWxlc2Nl
IHdpdGggcmlnaHQuCiAgICAgICAgIAogICAgICAgICBpZiAocmlnaHROZWlnaGJvciAhPSBtX2Zy
ZWVTcGFjZVN0YXJ0QWRkcmVzc01hcC5lbmQoKSkgewotICAgICAgICAgICAgRnJlZVNwYWNlTm9k
ZSogcmlnaHROb2RlID0gcmlnaHROZWlnaGJvci0+c2Vjb25kOwotICAgICAgICAgICAgdm9pZCog
cmlnaHRTdGFydCA9IHJpZ2h0TmVpZ2hib3ItPmZpcnN0OworICAgICAgICAgICAgRnJlZVNwYWNl
Tm9kZSogcmlnaHROb2RlID0gcmlnaHROZWlnaGJvci0+dmFsdWU7CisgICAgICAgICAgICB2b2lk
KiByaWdodFN0YXJ0ID0gcmlnaHROZWlnaGJvci0+a2V5OwogICAgICAgICAgICAgc2l6ZV90IHJp
Z2h0U2l6ZSA9IHJpZ2h0Tm9kZS0+bV9zaXplSW5CeXRlczsKICAgICAgICAgICAgIHZvaWQqIHJp
Z2h0RW5kID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRy
X3Q+KHJpZ2h0U3RhcnQpICsgcmlnaHRTaXplKTsKICAgICAgICAgICAgIApAQCAtNDA0LDcgKzQw
NCw3IEBAIHZvaWQgTWV0YUFsbG9jYXRvcjo6aW5jcmVtZW50UGFnZU9jY3VwYW5jeSh2b2lkKiBh
ZGRyZXNzLCBzaXplX3Qgc2l6ZUluQnl0ZXMpCiAgICAgICAgICAgICBtX2J5dGVzQ29tbWl0dGVk
ICs9IG1fcGFnZVNpemU7CiAgICAgICAgICAgICBub3RpZnlOZWVkUGFnZShyZWludGVycHJldF9j
YXN0PHZvaWQqPihwYWdlIDw8IG1fbG9nUGFnZVNpemUpKTsKICAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICBpdGVyLT5zZWNvbmQrKzsKKyAgICAgICAgICAgIGl0ZXItPnZhbHVlKys7CiAgICAg
fQogfQogCkBAIC00MTYsNyArNDE2LDcgQEAgdm9pZCBNZXRhQWxsb2NhdG9yOjpkZWNyZW1lbnRQ
YWdlT2NjdXBhbmN5KHZvaWQqIGFkZHJlc3MsIHNpemVfdCBzaXplSW5CeXRlcykKICAgICBmb3Ig
KHVpbnRwdHJfdCBwYWdlID0gZmlyc3RQYWdlOyBwYWdlIDw9IGxhc3RQYWdlOyArK3BhZ2UpIHsK
ICAgICAgICAgSGFzaE1hcDx1aW50cHRyX3QsIHNpemVfdD46Oml0ZXJhdG9yIGl0ZXIgPSBtX3Bh
Z2VPY2N1cGFuY3lNYXAuZmluZChwYWdlKTsKICAgICAgICAgQVNTRVJUKGl0ZXIgIT0gbV9wYWdl
T2NjdXBhbmN5TWFwLmVuZCgpKTsKLSAgICAgICAgaWYgKCEtLShpdGVyLT5zZWNvbmQpKSB7Cisg
ICAgICAgIGlmICghLS0oaXRlci0+dmFsdWUpKSB7CiAgICAgICAgICAgICBtX3BhZ2VPY2N1cGFu
Y3lNYXAucmVtb3ZlKGl0ZXIpOwogICAgICAgICAgICAgbV9ieXRlc0NvbW1pdHRlZCAtPSBtX3Bh
Z2VTaXplOwogICAgICAgICAgICAgbm90aWZ5UGFnZUlzRnJlZShyZWludGVycHJldF9jYXN0PHZv
aWQqPihwYWdlIDw8IG1fbG9nUGFnZVNpemUpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L1JlZkNvdW50ZWRMZWFrQ291bnRlci5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9SZWZDb3VudGVkTGVh
a0NvdW50ZXIuY3BwCmluZGV4IDY3MGYyYTAuLjRhMDQ1MjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
VEYvd3RmL1JlZkNvdW50ZWRMZWFrQ291bnRlci5jcHAKKysrIGIvU291cmNlL1dURi93dGYvUmVm
Q291bnRlZExlYWtDb3VudGVyLmNwcApAQCAtNzEsNyArNzEsNyBAQCBSZWZDb3VudGVkTGVha0Nv
dW50ZXI6On5SZWZDb3VudGVkTGVha0NvdW50ZXIoKQogICAgICAgICAgICAgTE9HKFJlZkNvdW50
ZWRMZWFrcywgIkxFQUs6ICV1ICVzIiwgbV9jb3VudCwgbV9kZXNjcmlwdGlvbik7CiAgICAgICAg
IGVsc2UgaWYgKCFsb2dnZWRTdXBwcmVzc2lvblJlYXNvbikgewogICAgICAgICAgICAgLy8gVGhp
cyBsb2dzIG9ubHkgb25lIHJlYXNvbi4gTGF0ZXIgd2UgY291bGQgY2hhbmdlIGl0IHNvIHdlIGxv
ZyBhbGwgdGhlIHJlYXNvbnMuCi0gICAgICAgICAgICBMT0coUmVmQ291bnRlZExlYWtzLCAiTm8g
bGVhayBjaGVja2luZyBkb25lOiAlcyIsIGxlYWtNZXNzYWdlU3VwcHJlc3Npb25SZWFzb25zLT5i
ZWdpbigpLT5maXJzdCk7CisgICAgICAgICAgICBMT0coUmVmQ291bnRlZExlYWtzLCAiTm8gbGVh
ayBjaGVja2luZyBkb25lOiAlcyIsIGxlYWtNZXNzYWdlU3VwcHJlc3Npb25SZWFzb25zLT5iZWdp
bigpLT5rZXkpOwogICAgICAgICAgICAgbG9nZ2VkU3VwcHJlc3Npb25SZWFzb24gPSB0cnVlOwog
ICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUmVmUHRySGFzaE1h
cC5oIGIvU291cmNlL1dURi93dGYvUmVmUHRySGFzaE1hcC5oCmluZGV4IDVmYWU5MGUuLjk1NDE4
MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1JlZlB0ckhhc2hNYXAuaAorKysgYi9Tb3Vy
Y2UvV1RGL3d0Zi9SZWZQdHJIYXNoTWFwLmgKQEAgLTIxNiw3ICsyMTYsNyBAQCBuYW1lc3BhY2Ug
V1RGIHsKICAgICAgICAgQWRkUmVzdWx0IHJlc3VsdCA9IGlubGluZUFkZChrZXksIG1hcHBlZCk7
CiAgICAgICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpIHsKICAgICAgICAgICAgIC8vIFRoZSBp
bmxpbmVBZGQgY2FsbCBhYm92ZSBmb3VuZCBhbiBleGlzdGluZyBoYXNoIHRhYmxlIGVudHJ5OyB3
ZSBuZWVkIHRvIHNldCB0aGUgbWFwcGVkIHZhbHVlLgotICAgICAgICAgICAgTWFwcGVkVHJhaXRz
OjpzdG9yZShtYXBwZWQsIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKKyAgICAgICAgICAgIE1h
cHBlZFRyYWl0czo6c3RvcmUobWFwcGVkLCByZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKICAgICAg
ICAgfQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTIyOCw3ICsyMjgsNyBAQCBu
YW1lc3BhY2UgV1RGIHsKICAgICAgICAgQWRkUmVzdWx0IHJlc3VsdCA9IGlubGluZUFkZChrZXks
IG1hcHBlZCk7CiAgICAgICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpIHsKICAgICAgICAgICAg
IC8vIFRoZSBpbmxpbmVBZGQgY2FsbCBhYm92ZSBmb3VuZCBhbiBleGlzdGluZyBoYXNoIHRhYmxl
IGVudHJ5OyB3ZSBuZWVkIHRvIHNldCB0aGUgbWFwcGVkIHZhbHVlLgotICAgICAgICAgICAgTWFw
cGVkVHJhaXRzOjpzdG9yZShtYXBwZWQsIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKKyAgICAg
ICAgICAgIE1hcHBlZFRyYWl0czo6c3RvcmUobWFwcGVkLCByZXN1bHQuaXRlcmF0b3ItPnZhbHVl
KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTI1NCw3ICsy
NTQsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgVmFsdWVUeXBlKiBlbnRyeSA9IGNvbnN0
X2Nhc3Q8SGFzaFRhYmxlVHlwZSY+KG1faW1wbCkubG9va3VwKGtleSk7CiAgICAgICAgIGlmICgh
ZW50cnkpCiAgICAgICAgICAgICByZXR1cm4gTWFwcGVkVHJhaXRzOjpwZWVrKE1hcHBlZFRyYWl0
czo6ZW1wdHlWYWx1ZSgpKTsKLSAgICAgICAgcmV0dXJuIE1hcHBlZFRyYWl0czo6cGVlayhlbnRy
eS0+c2Vjb25kKTsKKyAgICAgICAgcmV0dXJuIE1hcHBlZFRyYWl0czo6cGVlayhlbnRyeS0+dmFs
dWUpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVu
YW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0cz4KQEAgLTI2NCw3ICsyNjQs
NyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgVmFsdWVUeXBlKiBlbnRyeSA9IGNvbnN0X2Nh
c3Q8SGFzaFRhYmxlVHlwZSY+KG1faW1wbCkudGVtcGxhdGUgbG9va3VwPFRyYW5zbGF0b3I+KGtl
eSk7CiAgICAgICAgIGlmICghZW50cnkpCiAgICAgICAgICAgICByZXR1cm4gTWFwcGVkVHJhaXRz
OjpwZWVrKE1hcHBlZFRyYWl0czo6ZW1wdHlWYWx1ZSgpKTsKLSAgICAgICAgcmV0dXJuIE1hcHBl
ZFRyYWl0czo6cGVlayhlbnRyeS0+c2Vjb25kKTsKKyAgICAgICAgcmV0dXJuIE1hcHBlZFRyYWl0
czo6cGVlayhlbnRyeS0+dmFsdWUpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0
cz4KQEAgLTMwOCw3ICszMDgsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgaXRlcmF0b3Ig
aXQgPSBmaW5kKGtleSk7CiAgICAgICAgIGlmIChpdCA9PSBlbmQoKSkKICAgICAgICAgICAgIHJl
dHVybiBNYXBwZWRUcmFpdHM6OnBhc3NPdXQoTWFwcGVkVHJhaXRzOjplbXB0eVZhbHVlKCkpOwot
ICAgICAgICBNYXBwZWRQYXNzT3V0VHlwZSByZXN1bHQgPSBNYXBwZWRUcmFpdHM6OnBhc3NPdXQo
aXQtPnNlY29uZCk7CisgICAgICAgIE1hcHBlZFBhc3NPdXRUeXBlIHJlc3VsdCA9IE1hcHBlZFRy
YWl0czo6cGFzc091dChpdC0+dmFsdWUpOwogICAgICAgICByZW1vdmUoaXQpOwogICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTMyMCw3ICszMjAsNyBAQCBuYW1lc3BhY2UgV1RGIHsK
ICAgICAgICAgaXRlcmF0b3IgaXQgPSBmaW5kKGtleSk7CiAgICAgICAgIGlmIChpdCA9PSBlbmQo
KSkKICAgICAgICAgICAgIHJldHVybiBNYXBwZWRUcmFpdHM6OnBhc3NPdXQoTWFwcGVkVHJhaXRz
OjplbXB0eVZhbHVlKCkpOwotICAgICAgICBNYXBwZWRQYXNzT3V0VHlwZSByZXN1bHQgPSBNYXBw
ZWRUcmFpdHM6OnBhc3NPdXQoaXQtPnNlY29uZCk7CisgICAgICAgIE1hcHBlZFBhc3NPdXRUeXBl
IHJlc3VsdCA9IE1hcHBlZFRyYWl0czo6cGFzc091dChpdC0+dmFsdWUpOwogICAgICAgICByZW1v
dmUoaXQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XVEYvd3RmL1NwZWN0cnVtLmggYi9Tb3VyY2UvV1RGL3d0Zi9TcGVjdHJ1bS5oCmluZGV4IDVl
N2E0ODQuLmYwZjE5ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1NwZWN0cnVtLmgKKysr
IGIvU291cmNlL1dURi93dGYvU3BlY3RydW0uaApAQCAtNDQsNyArNDQsNyBAQCBwdWJsaWM6CiAg
ICAgewogICAgICAgICB0eXBlbmFtZSBIYXNoTWFwPFQsIHVuc2lnbmVkIGxvbmc+OjpBZGRSZXN1
bHQgcmVzdWx0ID0gbV9tYXAuYWRkKGtleSwgY291bnQpOwogICAgICAgICBpZiAoIXJlc3VsdC5p
c05ld0VudHJ5KQotICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgKz0gY291bnQ7
CisgICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlICs9IGNvdW50OwogICAgIH0KICAg
ICAKICAgICB1bnNpZ25lZCBsb25nIGdldChjb25zdCBUJiBrZXkpIGNvbnN0CkBAIC04OCw3ICs4
OCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIFZlY3RvcjxLZXlBbmRDb3VudD4gbGlzdDsK
ICAgICAgICAgZm9yIChjb25zdF9pdGVyYXRvciBpdGVyID0gYmVnaW4oKTsgaXRlciAhPSBlbmQo
KTsgKytpdGVyKQotICAgICAgICAgICAgbGlzdC5hcHBlbmQoS2V5QW5kQ291bnQoaXRlci0+Zmly
c3QsIGl0ZXItPnNlY29uZCkpOworICAgICAgICAgICAgbGlzdC5hcHBlbmQoS2V5QW5kQ291bnQo
aXRlci0+a2V5LCBpdGVyLT52YWx1ZSkpOwogICAgICAgICAKICAgICAgICAgc3RkOjpzb3J0KGxp
c3QuYmVnaW4oKSwgbGlzdC5lbmQoKSk7CiAgICAgICAgIHJldHVybiBsaXN0OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwIGIvU291cmNlL1dURi93dGYv
VGhyZWFkaW5nUHRocmVhZHMuY3BwCmluZGV4IDkyMWRkM2IuLmZlNjczMzYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHAKQEAgLTExNCw4ICsxMTQsOCBAQCBzdGF0aWMgVGhyZWFk
SWRlbnRpZmllciBpZGVudGlmaWVyQnlQdGhyZWFkSGFuZGxlKGNvbnN0IHB0aHJlYWRfdCYgcHRo
cmVhZEhhbmRsZQogCiAgICAgVGhyZWFkTWFwOjppdGVyYXRvciBpID0gdGhyZWFkTWFwKCkuYmVn
aW4oKTsKICAgICBmb3IgKDsgaSAhPSB0aHJlYWRNYXAoKS5lbmQoKTsgKytpKSB7Ci0gICAgICAg
IGlmIChwdGhyZWFkX2VxdWFsKGktPnNlY29uZCwgcHRocmVhZEhhbmRsZSkpCi0gICAgICAgICAg
ICByZXR1cm4gaS0+Zmlyc3Q7CisgICAgICAgIGlmIChwdGhyZWFkX2VxdWFsKGktPnZhbHVlLCBw
dGhyZWFkSGFuZGxlKSkKKyAgICAgICAgICAgIHJldHVybiBpLT5rZXk7CiAgICAgfQogCiAgICAg
cmV0dXJuIDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9u
L0dlb2xvY2F0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vR2Vv
bG9jYXRpb24uY3BwCmluZGV4IDU3Y2FmMzEuLmEzZWY0MDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vR2VvbG9jYXRpb24uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vR2VvbG9jYXRpb24uY3BwCkBAIC0xOTIsNyArMTky
LDcgQEAgR2VvbG9jYXRpb246Okdlb05vdGlmaWVyKiBHZW9sb2NhdGlvbjo6V2F0Y2hlcnM6OmZp
bmQoaW50IGlkKQogICAgIElkVG9Ob3RpZmllck1hcDo6aXRlcmF0b3IgaXRlciA9IG1faWRUb05v
dGlmaWVyTWFwLmZpbmQoaWQpOwogICAgIGlmIChpdGVyID09IG1faWRUb05vdGlmaWVyTWFwLmVu
ZCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gaXRlci0+c2Vjb25kLmdldCgpOwor
ICAgIHJldHVybiBpdGVyLT52YWx1ZS5nZXQoKTsKIH0KIAogdm9pZCBHZW9sb2NhdGlvbjo6V2F0
Y2hlcnM6OnJlbW92ZShpbnQgaWQpCkBAIC0yMDEsNyArMjAxLDcgQEAgdm9pZCBHZW9sb2NhdGlv
bjo6V2F0Y2hlcnM6OnJlbW92ZShpbnQgaWQpCiAgICAgSWRUb05vdGlmaWVyTWFwOjppdGVyYXRv
ciBpdGVyID0gbV9pZFRvTm90aWZpZXJNYXAuZmluZChpZCk7CiAgICAgaWYgKGl0ZXIgPT0gbV9p
ZFRvTm90aWZpZXJNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBtX25vdGlmaWVyVG9J
ZE1hcC5yZW1vdmUoaXRlci0+c2Vjb25kKTsKKyAgICBtX25vdGlmaWVyVG9JZE1hcC5yZW1vdmUo
aXRlci0+dmFsdWUpOwogICAgIG1faWRUb05vdGlmaWVyTWFwLnJlbW92ZShpdGVyKTsKIH0KIApA
QCAtMjEwLDcgKzIxMCw3IEBAIHZvaWQgR2VvbG9jYXRpb246OldhdGNoZXJzOjpyZW1vdmUoR2Vv
Tm90aWZpZXIqIG5vdGlmaWVyKQogICAgIE5vdGlmaWVyVG9JZE1hcDo6aXRlcmF0b3IgaXRlciA9
IG1fbm90aWZpZXJUb0lkTWFwLmZpbmQobm90aWZpZXIpOwogICAgIGlmIChpdGVyID09IG1fbm90
aWZpZXJUb0lkTWFwLmVuZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgbV9pZFRvTm90aWZpZXJN
YXAucmVtb3ZlKGl0ZXItPnNlY29uZCk7CisgICAgbV9pZFRvTm90aWZpZXJNYXAucmVtb3ZlKGl0
ZXItPnZhbHVlKTsKICAgICBtX25vdGlmaWVyVG9JZE1hcC5yZW1vdmUoaXRlcik7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcAppbmRl
eCA1YzNkZmNiLi40NzRjOTc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCRGF0YWJhc2UuY3BwCkBAIC0xMDYsNyArMTA2LDcgQEAgUGFzc1JlZlB0cjxET01T
dHJpbmdMaXN0PiBJREJEYXRhYmFzZTo6b2JqZWN0U3RvcmVOYW1lcygpIGNvbnN0CiB7CiAgICAg
UmVmUHRyPERPTVN0cmluZ0xpc3Q+IG9iamVjdFN0b3JlTmFtZXMgPSBET01TdHJpbmdMaXN0Ojpj
cmVhdGUoKTsKICAgICBmb3IgKElEQkRhdGFiYXNlTWV0YWRhdGE6Ok9iamVjdFN0b3JlTWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmJlZ2luKCk7IGl0ICE9
IG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmVuZCgpOyArK2l0KQotICAgICAgICBvYmplY3RTdG9y
ZU5hbWVzLT5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgb2JqZWN0U3RvcmVOYW1lcy0+YXBw
ZW5kKGl0LT5rZXkpOwogICAgIG9iamVjdFN0b3JlTmFtZXMtPnNvcnQoKTsKICAgICByZXR1cm4g
b2JqZWN0U3RvcmVOYW1lcy5yZWxlYXNlKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCmluZGV4
IGU0NTE0N2QuLmE5YmMzZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCkBAIC0xMzgsNyArMTM4
LDcgQEAgSURCRGF0YWJhc2VNZXRhZGF0YSBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjptZXRhZGF0
YSgpIGNvbnN0CiB7CiAgICAgSURCRGF0YWJhc2VNZXRhZGF0YSBtZXRhZGF0YShtX25hbWUsIG1f
dmVyc2lvbiwgSURCRGF0YWJhc2VNZXRhZGF0YTo6Tm9JbnRWZXJzaW9uKTsKICAgICBmb3IgKE9i
amVjdFN0b3JlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fb2JqZWN0U3RvcmVzLmJlZ2luKCk7
IGl0ICE9IG1fb2JqZWN0U3RvcmVzLmVuZCgpOyArK2l0KQotICAgICAgICBtZXRhZGF0YS5vYmpl
Y3RTdG9yZXMuc2V0KGl0LT5maXJzdCwgaXQtPnNlY29uZC0+bWV0YWRhdGEoKSk7CisgICAgICAg
IG1ldGFkYXRhLm9iamVjdFN0b3Jlcy5zZXQoaXQtPmtleSwgaXQtPnZhbHVlLT5tZXRhZGF0YSgp
KTsKICAgICByZXR1cm4gbWV0YWRhdGE7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwCmluZGV4IGRm
YjE0NTcuLmE5MzY3ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcApAQCAtMTA2LDcgKzEwNiw3IEBA
IHZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcm
IG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsCiAgICAgaWYgKGl0ICE9IG1fZGF0YWJhc2VCYWNrZW5k
TWFwLmVuZCgpKSB7CiAgICAgICAgIC8vIElmIHRoZXJlIGFyZSBhbnkgY29ubmVjdGlvbnMgdG8g
dGhlIGRhdGFiYXNlLCBkaXJlY3RseSBkZWxldGUgdGhlCiAgICAgICAgIC8vIGRhdGFiYXNlLgot
ICAgICAgICBpdC0+c2Vjb25kLT5kZWxldGVEYXRhYmFzZShjYWxsYmFja3MpOworICAgICAgICBp
dC0+dmFsdWUtPmRlbGV0ZURhdGFiYXNlKGNhbGxiYWNrcyk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKQEAgLTEzMyw3ICsxMzMsNyBAQCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gSURC
RmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuQmFja2luZ1N0b3JlKFBhc3NSZWZQdHI8UwogICAgIFJl
ZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZTsKICAgICBJREJCYWNraW5nU3RvcmVN
YXA6Oml0ZXJhdG9yIGl0MiA9IG1fYmFja2luZ1N0b3JlTWFwLmZpbmQoZmlsZUlkZW50aWZpZXIp
OwogICAgIGlmIChpdDIgIT0gbV9iYWNraW5nU3RvcmVNYXAuZW5kKCkpCi0gICAgICAgIGJhY2tp
bmdTdG9yZSA9IGl0Mi0+c2Vjb25kOworICAgICAgICBiYWNraW5nU3RvcmUgPSBpdDItPnZhbHVl
OwogICAgIGVsc2UgewogI2lmIFVTRShMRVZFTERCKQogICAgICAgICBiYWNraW5nU3RvcmUgPSBJ
REJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuKHNlY3VyaXR5T3JpZ2luLmdldCgpLCBkYXRhRGly
ZWN0b3J5LCBmaWxlSWRlbnRpZmllciwgdGhpcyk7CkBAIC0xNTgsNyArMTU4LDcgQEAgdm9pZCBJ
REJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4gY2EKICAgICBpZiAoaXQgIT0gbV9kYXRhYmFzZUJhY2tlbmRNYXAuZW5k
KCkpIHsKICAgICAgICAgLy8gSWYgaXQncyBhbHJlYWR5IGJlZW4gb3BlbmVkLCB3ZSBoYXZlIHRv
IHdhaXQgZm9yIGFueSBwZW5kaW5nCiAgICAgICAgIC8vIHNldFZlcnNpb24gY2FsbHMgdG8gY29t
cGxldGUuCi0gICAgICAgIGl0LT5zZWNvbmQtPm9wZW5Db25uZWN0aW9uKGNhbGxiYWNrcyk7Cisg
ICAgICAgIGl0LT52YWx1ZS0+b3BlbkNvbm5lY3Rpb24oY2FsbGJhY2tzKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCT2JqZWN0U3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCT2JqZWN0U3RvcmUuY3BwCmluZGV4IDdmN2NkNzQuLjZlNTVjNGUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKQEAgLTY0
LDcgKzY0LDcgQEAgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBJREJPYmplY3RTdG9yZTo6aW5k
ZXhOYW1lcygpIGNvbnN0CiAgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZTo6aW5kZXhOYW1l
cyIpOwogICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiBpbmRleE5hbWVzID0gRE9NU3RyaW5nTGlz
dDo6Y3JlYXRlKCk7CiAgICAgZm9yIChJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbmRleE1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtX21ldGFkYXRhLmluZGV4ZXMuYmVnaW4oKTsgaXQgIT0gbV9t
ZXRhZGF0YS5pbmRleGVzLmVuZCgpOyArK2l0KQotICAgICAgICBpbmRleE5hbWVzLT5hcHBlbmQo
aXQtPmZpcnN0KTsKKyAgICAgICAgaW5kZXhOYW1lcy0+YXBwZW5kKGl0LT5rZXkpOwogICAgIGlu
ZGV4TmFtZXMtPnNvcnQoKTsKICAgICByZXR1cm4gaW5kZXhOYW1lcy5yZWxlYXNlKCk7CiB9CkBA
IC0yMDQsOCArMjA0LDggQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6
cHV0KElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6UHV0TW8KICAgICBWZWN0b3I8SW5k
ZXhLZXlzPiBpbmRleEtleXM7CiAgICAgZm9yIChJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbmRl
eE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX21ldGFkYXRhLmluZGV4ZXMuYmVnaW4oKTsgaXQg
IT0gbV9tZXRhZGF0YS5pbmRleGVzLmVuZCgpOyArK2l0KSB7CiAgICAgICAgIEluZGV4S2V5cyBr
ZXlzOwotICAgICAgICBnZW5lcmF0ZUluZGV4S2V5c0ZvclZhbHVlKGl0LT5zZWNvbmQsIHZhbHVl
LCAma2V5cyk7Ci0gICAgICAgIGluZGV4TmFtZXMuYXBwZW5kKGl0LT5maXJzdCk7CisgICAgICAg
IGdlbmVyYXRlSW5kZXhLZXlzRm9yVmFsdWUoaXQtPnZhbHVlLCB2YWx1ZSwgJmtleXMpOworICAg
ICAgICBpbmRleE5hbWVzLmFwcGVuZChpdC0+a2V5KTsKICAgICAgICAgaW5kZXhLZXlzLmFwcGVu
ZChrZXlzKTsKICAgICB9CiAgICAgQVNTRVJUKGluZGV4S2V5cy5zaXplKCkgPT0gaW5kZXhOYW1l
cy5zaXplKCkpOwpAQCAtMzU1LDcgKzM1NSw3IEBAIFBhc3NSZWZQdHI8SURCSW5kZXg+IElEQk9i
amVjdFN0b3JlOjppbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjCiAK
ICAgICBJREJJbmRleE1hcDo6aXRlcmF0b3IgaXQgPSBtX2luZGV4TWFwLmZpbmQobmFtZSk7CiAg
ICAgaWYgKGl0ICE9IG1faW5kZXhNYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdC0+c2Vjb25k
OworICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwogCiAgICAgUmVmUHRyPElEQkluZGV4QmFja2Vu
ZEludGVyZmFjZT4gaW5kZXhCYWNrZW5kID0gbV9iYWNrZW5kLT5pbmRleChuYW1lLCBlYyk7CiAg
ICAgQVNTRVJUKCFpbmRleEJhY2tlbmQgIT0gIWVjKTsgLy8gSWYgd2UgZGlkbid0IGdldCBhbiBp
bmRleCwgd2Ugc2hvdWxkIGhhdmUgZ290dGVuIGFuIGV4Y2VwdGlvbiBjb2RlLiBBbmQgdmljZSB2
ZXJzYS4KQEAgLTM2NSw3ICszNjUsNyBAQCBQYXNzUmVmUHRyPElEQkluZGV4PiBJREJPYmplY3RT
dG9yZTo6aW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYwogICAgIElE
Qk9iamVjdFN0b3JlTWV0YWRhdGE6OkluZGV4TWFwOjpjb25zdF9pdGVyYXRvciBtZGl0ID0gbV9t
ZXRhZGF0YS5pbmRleGVzLmZpbmQobmFtZSk7CiAgICAgQVNTRVJUKG1kaXQgIT0gbV9tZXRhZGF0
YS5pbmRleGVzLmVuZCgpKTsKIAotICAgIFJlZlB0cjxJREJJbmRleD4gaW5kZXggPSBJREJJbmRl
eDo6Y3JlYXRlKG1kaXQtPnNlY29uZCwgaW5kZXhCYWNrZW5kLnJlbGVhc2UoKSwgdGhpcywgbV90
cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgUmVmUHRyPElEQkluZGV4PiBpbmRleCA9IElEQkluZGV4
OjpjcmVhdGUobWRpdC0+dmFsdWUsIGluZGV4QmFja2VuZC5yZWxlYXNlKCksIHRoaXMsIG1fdHJh
bnNhY3Rpb24uZ2V0KCkpOwogICAgIG1faW5kZXhNYXAuc2V0KG5hbWUsIGluZGV4KTsKICAgICBy
ZXR1cm4gaW5kZXgucmVsZWFzZSgpOwogfQpAQCAtMzg5LDcgKzM4OSw3IEBAIHZvaWQgSURCT2Jq
ZWN0U3RvcmU6OmRlbGV0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCiAgICAgaWYgKCFlYykgewogICAgICAgICBJREJJbmRleE1hcDo6aXRlcmF0b3IgaXQgPSBt
X2luZGV4TWFwLmZpbmQobmFtZSk7CiAgICAgICAgIGlmIChpdCAhPSBtX2luZGV4TWFwLmVuZCgp
KSB7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLT5tYXJrRGVsZXRlZCgpOworICAgICAgICAgICAg
aXQtPnZhbHVlLT5tYXJrRGVsZXRlZCgpOwogICAgICAgICAgICAgbV9pbmRleE1hcC5yZW1vdmUo
bmFtZSk7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcAppbmRleCA3NDY5
MzNlLi4zZDRhOGNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcApAQCAtNzQsNyArNzQs
NyBAQCBJREJPYmplY3RTdG9yZU1ldGFkYXRhIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Om1l
dGFkYXRhKCkgY29uc3QKIHsKICAgICBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG1ldGFkYXRhKG1f
bmFtZSwgbV9rZXlQYXRoLCBtX2F1dG9JbmNyZW1lbnQpOwogICAgIGZvciAoSW5kZXhNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbV9pbmRleGVzLmJlZ2luKCk7IGl0ICE9IG1faW5kZXhlcy5lbmQo
KTsgKytpdCkKLSAgICAgICAgbWV0YWRhdGEuaW5kZXhlcy5zZXQoaXQtPmZpcnN0LCBpdC0+c2Vj
b25kLT5tZXRhZGF0YSgpKTsKKyAgICAgICAgbWV0YWRhdGEuaW5kZXhlcy5zZXQoaXQtPmtleSwg
aXQtPnZhbHVlLT5tZXRhZGF0YSgpKTsKICAgICByZXR1cm4gbWV0YWRhdGE7CiB9CiAKQEAgLTI5
MiwxMiArMjkyLDEyIEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJu
YWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8CiAKICAgICBmb3IgKEluZGV4
TWFwOjppdGVyYXRvciBpdCA9IG9iamVjdFN0b3JlLT5tX2luZGV4ZXMuYmVnaW4oKTsgaXQgIT0g
b2JqZWN0U3RvcmUtPm1faW5kZXhlcy5lbmQoKTsgKytpdCkgewogCi0gICAgICAgIGNvbnN0IFJl
ZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiYgaW5kZXggPSBpdC0+c2Vjb25kOworICAgICAgICBj
b25zdCBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4mIGluZGV4ID0gaXQtPnZhbHVlOwogICAg
ICAgICBpZiAoIWluZGV4LT5oYXNWYWxpZElkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsgLy8g
VGhlIGluZGV4IG9iamVjdCBoYXMgYmVlbiBjcmVhdGVkLCBidXQgZG9lcyBub3QgZXhpc3QgaW4g
dGhlIGRhdGFiYXNlIHlldC4KIAogICAgICAgICBPd25QdHI8SW5kZXhXcml0ZXI+IGluZGV4V3Jp
dGVyOwotICAgICAgICBpbmRleFdyaXRlciA9IGFkb3B0UHRyKG5ldyBJbmRleFdyaXRlcihpbmRl
eC0+bWV0YWRhdGEoKSwgaW5kZXhLZXlNYXAuZ2V0KGl0LT5maXJzdCkpKTsKKyAgICAgICAgaW5k
ZXhXcml0ZXIgPSBhZG9wdFB0cihuZXcgSW5kZXhXcml0ZXIoaW5kZXgtPm1ldGFkYXRhKCksIGlu
ZGV4S2V5TWFwLmdldChpdC0+a2V5KSkpOwogCiAgICAgICAgIFN0cmluZyBlcnJvck1lc3NhZ2U7
CiAgICAgICAgIGlmICghaW5kZXhXcml0ZXItPnZlcmlmeUluZGV4S2V5cygqb2JqZWN0U3RvcmUt
PmJhY2tpbmdTdG9yZSgpLApAQCAtMzY2LDEwICszNjYsMTAgQEAgdm9pZCBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpkZWxldGVJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFz
c1JlZlAKICAgICAgICAgICAgIHJlY29yZElkZW50aWZpZXIgPSBiYWNraW5nU3RvcmVDdXJzb3It
Pm9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcigpOwogCiAgICAgICAgICAgICBmb3IgKEluZGV4
TWFwOjppdGVyYXRvciBpdCA9IG9iamVjdFN0b3JlLT5tX2luZGV4ZXMuYmVnaW4oKTsgaXQgIT0g
b2JqZWN0U3RvcmUtPm1faW5kZXhlcy5lbmQoKTsgKytpdCkgewotICAgICAgICAgICAgICAgIGlm
ICghaXQtPnNlY29uZC0+aGFzVmFsaWRJZCgpKQorICAgICAgICAgICAgICAgIGlmICghaXQtPnZh
bHVlLT5oYXNWYWxpZElkKCkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBUaGUg
aW5kZXggb2JqZWN0IGhhcyBiZWVuIGNyZWF0ZWQsIGJ1dCBkb2VzIG5vdCBleGlzdCBpbiB0aGUg
ZGF0YWJhc2UgeWV0LgogCi0gICAgICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gb2JqZWN0U3Rv
cmUtPmJhY2tpbmdTdG9yZSgpLT5kZWxldGVJbmRleERhdGFGb3JSZWNvcmQob2JqZWN0U3RvcmUt
PmRhdGFiYXNlSWQoKSwgb2JqZWN0U3RvcmUtPmlkKCksIGl0LT5zZWNvbmQtPmlkKCksIHJlY29y
ZElkZW50aWZpZXIuZ2V0KCkpOworICAgICAgICAgICAgICAgIGJvb2wgc3VjY2VzcyA9IG9iamVj
dFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+ZGVsZXRlSW5kZXhEYXRhRm9yUmVjb3JkKG9iamVjdFN0
b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0b3JlLT5pZCgpLCBpdC0+dmFsdWUtPmlkKCksIHJl
Y29yZElkZW50aWZpZXIuZ2V0KCkpOwogICAgICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoc3Vj
Y2Vzcywgc3VjY2Vzcyk7CiAgICAgICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcAppbmRleCA3NjEyMzQ3Li5iM2Jl
OTA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFu
c2FjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJh
bnNhY3Rpb24uY3BwCkBAIC0xNDIsNyArMTQyLDcgQEAgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9y
ZT4gSURCVHJhbnNhY3Rpb246Om9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXAK
IAogICAgIElEQk9iamVjdFN0b3JlTWFwOjppdGVyYXRvciBpdCA9IG1fb2JqZWN0U3RvcmVNYXAu
ZmluZChuYW1lKTsKICAgICBpZiAoaXQgIT0gbV9vYmplY3RTdG9yZU1hcC5lbmQoKSkKLSAgICAg
ICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBpdC0+dmFsdWU7CiAKICAgICBS
ZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBvYmplY3RTdG9yZUJhY2tlbmQg
PSBtX2JhY2tlbmQtPm9iamVjdFN0b3JlKG5hbWUsIGVjKTsKICAgICBBU1NFUlQoIW9iamVjdFN0
b3JlQmFja2VuZCAhPSAhZWMpOyAvLyBJZiB3ZSBkaWRuJ3QgZ2V0IGEgc3RvcmUsIHdlIHNob3Vs
ZCBoYXZlIGdvdHRlbiBhbiBleGNlcHRpb24gY29kZS4gQW5kIHZpY2UgdmVyc2EuCkBAIC0xNTMs
NyArMTUzLDcgQEAgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gSURCVHJhbnNhY3Rpb246Om9i
amVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXAKICAgICBJREJEYXRhYmFzZU1ldGFk
YXRhOjpPYmplY3RTdG9yZU1hcDo6Y29uc3RfaXRlcmF0b3IgbWRpdCA9IG1ldGFkYXRhLm9iamVj
dFN0b3Jlcy5maW5kKG5hbWUpOwogICAgIEFTU0VSVChtZGl0ICE9IG1ldGFkYXRhLm9iamVjdFN0
b3Jlcy5lbmQoKSk7CiAKLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmU+IG9iamVjdFN0b3JlID0g
SURCT2JqZWN0U3RvcmU6OmNyZWF0ZShtZGl0LT5zZWNvbmQsIG9iamVjdFN0b3JlQmFja2VuZCwg
dGhpcyk7CisgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlPiBvYmplY3RTdG9yZSA9IElEQk9iamVj
dFN0b3JlOjpjcmVhdGUobWRpdC0+dmFsdWUsIG9iamVjdFN0b3JlQmFja2VuZCwgdGhpcyk7CiAg
ICAgb2JqZWN0U3RvcmVDcmVhdGVkKG5hbWUsIG9iamVjdFN0b3JlKTsKICAgICByZXR1cm4gb2Jq
ZWN0U3RvcmUucmVsZWFzZSgpOwogfQpAQCAtMTczLDcgKzE3Myw3IEBAIHZvaWQgSURCVHJhbnNh
Y3Rpb246Om9iamVjdFN0b3JlRGVsZXRlZChjb25zdCBTdHJpbmcmIG5hbWUpCiAgICAgQVNTRVJU
KGlzVmVyc2lvbkNoYW5nZSgpKTsKICAgICBJREJPYmplY3RTdG9yZU1hcDo6aXRlcmF0b3IgaXQg
PSBtX29iamVjdFN0b3JlTWFwLmZpbmQobmFtZSk7CiAgICAgaWYgKGl0ICE9IG1fb2JqZWN0U3Rv
cmVNYXAuZW5kKCkpIHsKLSAgICAgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlPiBvYmplY3RTdG9y
ZSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZT4gb2JqZWN0U3Rv
cmUgPSBpdC0+dmFsdWU7CiAgICAgICAgIG1fb2JqZWN0U3RvcmVNYXAucmVtb3ZlKG5hbWUpOwog
ICAgICAgICBvYmplY3RTdG9yZS0+bWFya0RlbGV0ZWQoKTsKICAgICAgICAgbV9vYmplY3RTdG9y
ZUNsZWFudXBNYXAuc2V0KG9iamVjdFN0b3JlLCBvYmplY3RTdG9yZS0+bWV0YWRhdGEoKSk7CkBA
IC0yODAsNyArMjgwLDcgQEAgdm9pZCBJREJUcmFuc2FjdGlvbjo6b25BYm9ydCgpCiAKICAgICBp
ZiAoaXNWZXJzaW9uQ2hhbmdlKCkpIHsKICAgICAgICAgZm9yIChJREJPYmplY3RTdG9yZU1ldGFk
YXRhTWFwOjppdGVyYXRvciBpdCA9IG1fb2JqZWN0U3RvcmVDbGVhbnVwTWFwLmJlZ2luKCk7IGl0
ICE9IG1fb2JqZWN0U3RvcmVDbGVhbnVwTWFwLmVuZCgpOyArK2l0KQotICAgICAgICAgICAgaXQt
PmZpcnN0LT5zZXRNZXRhZGF0YShpdC0+c2Vjb25kKTsKKyAgICAgICAgICAgIGl0LT5rZXktPnNl
dE1ldGFkYXRhKGl0LT52YWx1ZSk7CiAgICAgfQogICAgIG1fb2JqZWN0U3RvcmVDbGVhbnVwTWFw
LmNsZWFyKCk7CiAgICAgY2xvc2VPcGVuQ3Vyc29ycygpOwpAQCAtMzY2LDcgKzM2Niw3IEBAIGJv
b2wgSURCVHJhbnNhY3Rpb246OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQp
CiAKICAgICAvLyBCcmVhayByZWZlcmVuY2UgY3ljbGVzLgogICAgIGZvciAoSURCT2JqZWN0U3Rv
cmVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9vYmplY3RTdG9yZU1hcC5iZWdpbigpOyBpdCAhPSBtX29i
amVjdFN0b3JlTWFwLmVuZCgpOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT50cmFuc2FjdGlv
bkZpbmlzaGVkKCk7CisgICAgICAgIGl0LT52YWx1ZS0+dHJhbnNhY3Rpb25GaW5pc2hlZCgpOwog
ICAgIG1fb2JqZWN0U3RvcmVNYXAuY2xlYXIoKTsKIAogICAgIFZlY3RvcjxSZWZQdHI8RXZlbnRU
YXJnZXQ+ID4gdGFyZ2V0czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvQWJzdHJhY3REYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmRhdGFiYXNlL0Fic3RyYWN0RGF0YWJhc2UuY3BwCmluZGV4IGM3NTM5YzYuLjYyOTA3ZTMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvQWJzdHJhY3REYXRh
YmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9BYnN0cmFj
dERhdGFiYXNlLmNwcApAQCAtMjgyLDcgKzI4Miw3IEBAIGJvb2wgQWJzdHJhY3REYXRhYmFzZTo6
cGVyZm9ybU9wZW5BbmRWZXJpZnkoYm9vbCBzaG91bGRTZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwK
ICAgICAgICAgR3VpZFZlcnNpb25NYXA6Oml0ZXJhdG9yIGVudHJ5ID0gZ3VpZFRvVmVyc2lvbk1h
cCgpLmZpbmQobV9ndWlkKTsKICAgICAgICAgaWYgKGVudHJ5ICE9IGd1aWRUb1ZlcnNpb25NYXAo
KS5lbmQoKSkgewogICAgICAgICAgICAgLy8gTWFwIG51bGwgc3RyaW5nIHRvIGVtcHR5IHN0cmlu
ZyAoc2VlIHVwZGF0ZUd1aWRWZXJzaW9uTWFwKCkpLgotICAgICAgICAgICAgY3VycmVudFZlcnNp
b24gPSBlbnRyeS0+c2Vjb25kLmlzTnVsbCgpID8gZW1wdHlTdHJpbmcoKSA6IGVudHJ5LT5zZWNv
bmQuaXNvbGF0ZWRDb3B5KCk7CisgICAgICAgICAgICBjdXJyZW50VmVyc2lvbiA9IGVudHJ5LT52
YWx1ZS5pc051bGwoKSA/IGVtcHR5U3RyaW5nKCkgOiBlbnRyeS0+dmFsdWUuaXNvbGF0ZWRDb3B5
KCk7CiAgICAgICAgICAgICBMT0coU3RvcmFnZUFQSSwgIkN1cnJlbnQgY2FjaGVkIHZlcnNpb24g
Zm9yIGd1aWQgJWkgaXMgJXMiLCBtX2d1aWQsIGN1cnJlbnRWZXJzaW9uLmFzY2lpKCkuZGF0YSgp
KTsKIAogI2lmIFBMQVRGT1JNKENIUk9NSVVNKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3BwCmluZGV4IDBlNTc5M2MuLmE3
ZTgyMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0
YWJhc2VUcmFja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNl
L0RhdGFiYXNlVHJhY2tlci5jcHAKQEAgLTI1Miw3ICsyNTIsNyBAQCB2b2lkIERhdGFiYXNlVHJh
Y2tlcjo6aW50ZXJydXB0QWxsRGF0YWJhc2VzRm9yQ29udGV4dChjb25zdCBTY3JpcHRFeGVjdXRp
b25Db250ZQogCiAgICAgICAgIERhdGFiYXNlTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgZGJOYW1l
TWFwRW5kSXQgPSBuYW1lTWFwLT5lbmQoKTsKICAgICAgICAgZm9yIChEYXRhYmFzZU5hbWVNYXA6
OmNvbnN0X2l0ZXJhdG9yIGRiTmFtZU1hcEl0ID0gbmFtZU1hcC0+YmVnaW4oKTsgZGJOYW1lTWFw
SXQgIT0gZGJOYW1lTWFwRW5kSXQ7ICsrZGJOYW1lTWFwSXQpIHsKLSAgICAgICAgICAgIERhdGFi
YXNlU2V0KiBkYXRhYmFzZVNldCA9IGRiTmFtZU1hcEl0LT5zZWNvbmQ7CisgICAgICAgICAgICBE
YXRhYmFzZVNldCogZGF0YWJhc2VTZXQgPSBkYk5hbWVNYXBJdC0+dmFsdWU7CiAgICAgICAgICAg
ICBEYXRhYmFzZVNldDo6Y29uc3RfaXRlcmF0b3IgZGJTZXRFbmRJdCA9IGRhdGFiYXNlU2V0LT5l
bmQoKTsKICAgICAgICAgICAgIGZvciAoRGF0YWJhc2VTZXQ6OmNvbnN0X2l0ZXJhdG9yIGRiU2V0
SXQgPSBkYXRhYmFzZVNldC0+YmVnaW4oKTsgZGJTZXRJdCAhPSBkYlNldEVuZEl0OyArK2RiU2V0
SXQpIHsKICAgICAgICAgICAgICAgICBpZiAoKCpkYlNldEl0KS0+c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpID09IGNvbnRleHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmRhdGFiYXNlL09yaWdpblVzYWdlUmVjb3JkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZGF0YWJhc2UvT3JpZ2luVXNhZ2VSZWNvcmQuY3BwCmluZGV4IDQ0MzU1MGEuLjJiZjhhZjQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvT3JpZ2luVXNh
Z2VSZWNvcmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvT3Jp
Z2luVXNhZ2VSZWNvcmQuY3BwCkBAIC05Myw3ICs5Myw3IEBAIHVuc2lnbmVkIGxvbmcgbG9uZyBP
cmlnaW5Vc2FnZVJlY29yZDo6ZGlza1VzYWdlKCkKICAgICBIYXNoTWFwPFN0cmluZywgRGF0YWJh
c2VFbnRyeT46Oml0ZXJhdG9yIGlEYXRhYmFzZSA9IG1fZGF0YWJhc2VNYXAuYmVnaW4oKTsKICAg
ICBIYXNoTWFwPFN0cmluZywgRGF0YWJhc2VFbnRyeT46Oml0ZXJhdG9yIGVuZERhdGFiYXNlID0g
bV9kYXRhYmFzZU1hcC5lbmQoKTsKICAgICBmb3IgKDsgaURhdGFiYXNlICE9IGVuZERhdGFiYXNl
OyArK2lEYXRhYmFzZSkKLSAgICAgICAgbV9jYWNoZWREaXNrVXNhZ2UgKz0gaURhdGFiYXNlLT5z
ZWNvbmQuc2l6ZTsKKyAgICAgICAgbV9jYWNoZWREaXNrVXNhZ2UgKz0gaURhdGFiYXNlLT52YWx1
ZS5zaXplOwogCiAgICAgbV9jYWNoZWREaXNrVXNhZ2VJc1ZhbGlkID0gdHJ1ZTsKICAgICByZXR1
cm4gbV9jYWNoZWREaXNrVXNhZ2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcAppbmRl
eCA4MzdiOGZiLi5kYTNhN2VlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwCkBA
IC03OCw3ICs3OCw3IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6YWNxdWlyZUxv
Y2soU1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQogICAgICAgICBjb29yZGluYXRpb25JbmZv
SXRlcmF0b3IgPSBtX2Nvb3JkaW5hdGlvbkluZm9NYXAuYWRkKGRiSWRlbnRpZmllciwgQ29vcmRp
bmF0aW9uSW5mbygpKS5pdGVyYXRvcjsKICAgICB9CiAKLSAgICBDb29yZGluYXRpb25JbmZvJiBp
bmZvID0gY29vcmRpbmF0aW9uSW5mb0l0ZXJhdG9yLT5zZWNvbmQ7CisgICAgQ29vcmRpbmF0aW9u
SW5mbyYgaW5mbyA9IGNvb3JkaW5hdGlvbkluZm9JdGVyYXRvci0+dmFsdWU7CiAgICAgaW5mby5w
ZW5kaW5nVHJhbnNhY3Rpb25zLmFwcGVuZCh0cmFuc2FjdGlvbik7CiAgICAgcHJvY2Vzc1BlbmRp
bmdUcmFuc2FjdGlvbnMoaW5mbyk7CiB9CkBAIC05Miw3ICs5Miw3IEBAIHZvaWQgU1FMVHJhbnNh
Y3Rpb25Db29yZGluYXRvcjo6cmVsZWFzZUxvY2soU1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9u
KQogCiAgICAgQ29vcmRpbmF0aW9uSW5mb01hcDo6aXRlcmF0b3IgY29vcmRpbmF0aW9uSW5mb0l0
ZXJhdG9yID0gbV9jb29yZGluYXRpb25JbmZvTWFwLmZpbmQoZGJJZGVudGlmaWVyKTsKICAgICBB
U1NFUlQoY29vcmRpbmF0aW9uSW5mb0l0ZXJhdG9yICE9IG1fY29vcmRpbmF0aW9uSW5mb01hcC5l
bmQoKSk7Ci0gICAgQ29vcmRpbmF0aW9uSW5mbyYgaW5mbyA9IGNvb3JkaW5hdGlvbkluZm9JdGVy
YXRvci0+c2Vjb25kOworICAgIENvb3JkaW5hdGlvbkluZm8mIGluZm8gPSBjb29yZGluYXRpb25J
bmZvSXRlcmF0b3ItPnZhbHVlOwogCiAgICAgaWYgKHRyYW5zYWN0aW9uLT5pc1JlYWRPbmx5KCkp
IHsKICAgICAgICAgQVNTRVJUKGluZm8uYWN0aXZlUmVhZFRyYW5zYWN0aW9ucy5jb250YWlucyh0
cmFuc2FjdGlvbikpOwpAQCAtMTEwLDcgKzExMCw3IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb25Db29y
ZGluYXRvcjo6c2h1dGRvd24oKQogICAgIC8vIE5vdGlmeSBhbGwgdHJhbnNhY3Rpb25zIGluIHBy
b2dyZXNzIHRoYXQgdGhlIGRhdGFiYXNlIHRocmVhZCBpcyBzaHV0dGluZyBkb3duCiAgICAgZm9y
IChDb29yZGluYXRpb25JbmZvTWFwOjppdGVyYXRvciBjb29yZGluYXRpb25JbmZvSXRlcmF0b3Ig
PSBtX2Nvb3JkaW5hdGlvbkluZm9NYXAuYmVnaW4oKTsKICAgICAgICAgIGNvb3JkaW5hdGlvbklu
Zm9JdGVyYXRvciAhPSBtX2Nvb3JkaW5hdGlvbkluZm9NYXAuZW5kKCk7ICsrY29vcmRpbmF0aW9u
SW5mb0l0ZXJhdG9yKSB7Ci0gICAgICAgIENvb3JkaW5hdGlvbkluZm8mIGluZm8gPSBjb29yZGlu
YXRpb25JbmZvSXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgQ29vcmRpbmF0aW9uSW5mbyYgaW5m
byA9IGNvb3JkaW5hdGlvbkluZm9JdGVyYXRvci0+dmFsdWU7CiAgICAgICAgIGlmIChpbmZvLmFj
dGl2ZVdyaXRlVHJhbnNhY3Rpb24pCiAgICAgICAgICAgICBpbmZvLmFjdGl2ZVdyaXRlVHJhbnNh
Y3Rpb24tPm5vdGlmeURhdGFiYXNlVGhyZWFkSXNTaHV0dGluZ0Rvd24oKTsKICAgICAgICAgZm9y
IChIYXNoU2V0PFJlZlB0cjxTUUxUcmFuc2FjdGlvbj4gPjo6aXRlcmF0b3IgYWN0aXZlUmVhZFRy
YW5zYWN0aW9uc0l0ZXJhdG9yID0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZGF0YWJhc2UvY2hyb21pdW0vRGF0YWJhc2VUcmFja2VyQ2hyb21pdW0uY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9jaHJvbWl1bS9EYXRhYmFzZVRyYWNrZXJDaHJv
bWl1bS5jcHAKaW5kZXggMTE3ZmRiZS4uNjBhNzZjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9jaHJvbWl1bS9EYXRhYmFzZVRyYWNrZXJDaHJvbWl1bS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9jaHJvbWl1bS9EYXRh
YmFzZVRyYWNrZXJDaHJvbWl1bS5jcHAKQEAgLTE4MCw3ICsxODAsNyBAQCB2b2lkIERhdGFiYXNl
VHJhY2tlcjo6aW50ZXJydXB0QWxsRGF0YWJhc2VzRm9yQ29udGV4dChjb25zdCBTY3JpcHRFeGVj
dXRpb25Db250ZQogCiAgICAgRGF0YWJhc2VOYW1lTWFwOjpjb25zdF9pdGVyYXRvciBkYk5hbWVN
YXBFbmRJdCA9IG5hbWVNYXAtPmVuZCgpOwogICAgIGZvciAoRGF0YWJhc2VOYW1lTWFwOjpjb25z
dF9pdGVyYXRvciBkYk5hbWVNYXBJdCA9IG5hbWVNYXAtPmJlZ2luKCk7IGRiTmFtZU1hcEl0ICE9
IGRiTmFtZU1hcEVuZEl0OyArK2RiTmFtZU1hcEl0KSB7Ci0gICAgICAgIERhdGFiYXNlU2V0KiBk
YXRhYmFzZVNldCA9IGRiTmFtZU1hcEl0LT5zZWNvbmQ7CisgICAgICAgIERhdGFiYXNlU2V0KiBk
YXRhYmFzZVNldCA9IGRiTmFtZU1hcEl0LT52YWx1ZTsKICAgICAgICAgRGF0YWJhc2VTZXQ6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IGRhdGFiYXNlU2V0LT5lbmQoKTsKICAgICAgICAgZm9yIChEYXRh
YmFzZVNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBkYXRhYmFzZVNldC0+YmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBpZiAoKCppdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKSA9PSBjb250ZXh0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9jaHJvbWl1bS9RdW90YVRyYWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJkYXRhYmFzZS9jaHJvbWl1bS9RdW90YVRyYWNrZXIuY3BwCmluZGV4IDAzNDRjYTguLjM4
MmEzZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvY2hy
b21pdW0vUXVvdGFUcmFja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRh
dGFiYXNlL2Nocm9taXVtL1F1b3RhVHJhY2tlci5jcHAKQEAgLTUzLDggKzUzLDggQEAgdm9pZCBR
dW90YVRyYWNrZXI6OmdldERhdGFiYXNlU2l6ZUFuZFNwYWNlQXZhaWxhYmxlVG9PcmlnaW4oCiAg
ICAgICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhKG1fZGF0YUd1YXJkKTsKICAgICAgICAgQVNTRVJU
KG1fZGF0YWJhc2VTaXplcy5jb250YWlucyhvcmlnaW5JZGVudGlmaWVyKSk7CiAgICAgICAgIEhh
c2hNYXA8U3RyaW5nLCBTaXplTWFwPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2RhdGFiYXNlU2l6
ZXMuZmluZChvcmlnaW5JZGVudGlmaWVyKTsKLSAgICAgICAgQVNTRVJUKGl0LT5zZWNvbmQuY29u
dGFpbnMoZGF0YWJhc2VOYW1lKSk7Ci0gICAgICAgICpkYXRhYmFzZVNpemUgPSBpdC0+c2Vjb25k
LmdldChkYXRhYmFzZU5hbWUpOworICAgICAgICBBU1NFUlQoaXQtPnZhbHVlLmNvbnRhaW5zKGRh
dGFiYXNlTmFtZSkpOworICAgICAgICAqZGF0YWJhc2VTaXplID0gaXQtPnZhbHVlLmdldChkYXRh
YmFzZU5hbWUpOwogCiAgICAgICAgIGlmIChtX3NwYWNlQXZhaWxhYmxlVG9PcmlnaW5zLmNvbnRh
aW5zKG9yaWdpbklkZW50aWZpZXIpKSB7CiAgICAgICAgICAgICAqc3BhY2VBdmFpbGFibGUgPSBt
X3NwYWNlQXZhaWxhYmxlVG9PcmlnaW5zLmdldChvcmlnaW5JZGVudGlmaWVyKTsKQEAgLTcyLDcg
KzcyLDcgQEAgdm9pZCBRdW90YVRyYWNrZXI6OnVwZGF0ZURhdGFiYXNlU2l6ZSgKIHsKICAgICBN
dXRleExvY2tlciBsb2NrRGF0YShtX2RhdGFHdWFyZCk7CiAgICAgSGFzaE1hcDxTdHJpbmcsIFNp
emVNYXA+OjppdGVyYXRvciBpdCA9IG1fZGF0YWJhc2VTaXplcy5hZGQob3JpZ2luSWRlbnRpZmll
ciwgU2l6ZU1hcCgpKS5pdGVyYXRvcjsKLSAgICBpdC0+c2Vjb25kLnNldChkYXRhYmFzZU5hbWUs
IGRhdGFiYXNlU2l6ZSk7CisgICAgaXQtPnZhbHVlLnNldChkYXRhYmFzZU5hbWUsIGRhdGFiYXNl
U2l6ZSk7CiB9CiAKIHZvaWQgUXVvdGFUcmFja2VyOjp1cGRhdGVTcGFjZUF2YWlsYWJsZVRvT3Jp
Z2luKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllciwgdW5zaWduZWQgbG9uZyBsb25nIHNw
YWNlQXZhaWxhYmxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2Nr
ZXRzL1dlYlNvY2tldERlZmxhdGVGcmFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJzb2NrZXRzL1dlYlNvY2tldERlZmxhdGVGcmFtZXIuY3BwCmluZGV4IDc2YzA0MGQuLjY3YmIz
ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2Nr
ZXREZWZsYXRlRnJhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tl
dHMvV2ViU29ja2V0RGVmbGF0ZUZyYW1lci5jcHAKQEAgLTg3LDcgKzg3LDcgQEAgYm9vbCBXZWJT
b2NrZXRFeHRlbnNpb25EZWZsYXRlRnJhbWU6OnByb2Nlc3NSZXNwb25zZShjb25zdCBIYXNoTWFw
PFN0cmluZywgU3RyaW4KICAgICBpbnQgd2luZG93Qml0cyA9IDE1OwogICAgIEhhc2hNYXA8U3Ry
aW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBwYXJhbWV0ZXIgPSBzZXJ2ZXJQYXJhbWV0ZXJz
LmZpbmQoIm1heF93aW5kb3dfYml0cyIpOwogICAgIGlmIChwYXJhbWV0ZXIgIT0gc2VydmVyUGFy
YW1ldGVycy5lbmQoKSkgewotICAgICAgICB3aW5kb3dCaXRzID0gcGFyYW1ldGVyLT5zZWNvbmQu
dG9JbnQoKTsKKyAgICAgICAgd2luZG93Qml0cyA9IHBhcmFtZXRlci0+dmFsdWUudG9JbnQoKTsK
ICAgICAgICAgaWYgKHdpbmRvd0JpdHMgPCA4IHx8IHdpbmRvd0JpdHMgPiAxNSkgewogICAgICAg
ICAgICAgbV9mYWlsdXJlUmVhc29uID0gIlJlY2VpdmVkIGludmFsaWQgbWF4X3dpbmRvd19iaXRz
IHBhcmFtZXRlciI7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC05OCw3ICs5OCw3IEBA
IGJvb2wgV2ViU29ja2V0RXh0ZW5zaW9uRGVmbGF0ZUZyYW1lOjpwcm9jZXNzUmVzcG9uc2UoY29u
c3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluCiAgICAgV2ViU29ja2V0RGVmbGF0ZXI6OkNvbnRleHRU
YWtlT3Zlck1vZGUgbW9kZSA9IFdlYlNvY2tldERlZmxhdGVyOjpUYWtlT3ZlckNvbnRleHQ7CiAg
ICAgcGFyYW1ldGVyID0gc2VydmVyUGFyYW1ldGVycy5maW5kKCJub19jb250ZXh0X3Rha2VvdmVy
Iik7CiAgICAgaWYgKHBhcmFtZXRlciAhPSBzZXJ2ZXJQYXJhbWV0ZXJzLmVuZCgpKSB7Ci0gICAg
ICAgIGlmICghcGFyYW1ldGVyLT5zZWNvbmQuaXNOdWxsKCkpIHsKKyAgICAgICAgaWYgKCFwYXJh
bWV0ZXItPnZhbHVlLmlzTnVsbCgpKSB7CiAgICAgICAgICAgICBtX2ZhaWx1cmVSZWFzb24gPSAi
UmVjZWl2ZWQgaW52YWxpZCBub19jb250ZXh0X3Rha2VvdmVyIHBhcmFtZXRlciI7CiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRj
aGVyLmNwcAppbmRleCA3YzU5MmFkLi41NjA5ZjY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0RXh0ZW5zaW9uRGlzcGF0Y2hlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEV4dGVuc2lvbkRp
c3BhdGNoZXIuY3BwCkBAIC0xODEsMTAgKzE4MSwxMCBAQCB2b2lkIFdlYlNvY2tldEV4dGVuc2lv
bkRpc3BhdGNoZXI6OmFwcGVuZEFjY2VwdGVkRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZXh0ZW5z
aQogICAgIC8vIEZJWE1FOiBTaG91bGQgdXNlIExpc3RIYXNoU2V0IHRvIGtlZXAgdGhlIG9yZGVy
IG9mIHRoZSBwYXJhbWV0ZXJzLgogICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNv
bnN0X2l0ZXJhdG9yIGl0ZXJhdG9yID0gZXh0ZW5zaW9uUGFyYW1ldGVycy5iZWdpbigpOyBpdGVy
YXRvciAhPSBleHRlbnNpb25QYXJhbWV0ZXJzLmVuZCgpOyArK2l0ZXJhdG9yKSB7CiAgICAgICAg
IG1fYWNjZXB0ZWRFeHRlbnNpb25zQnVpbGRlci5hcHBlbmQoIjsgIik7Ci0gICAgICAgIG1fYWNj
ZXB0ZWRFeHRlbnNpb25zQnVpbGRlci5hcHBlbmQoaXRlcmF0b3ItPmZpcnN0KTsKLSAgICAgICAg
aWYgKCFpdGVyYXRvci0+c2Vjb25kLmlzTnVsbCgpKSB7CisgICAgICAgIG1fYWNjZXB0ZWRFeHRl
bnNpb25zQnVpbGRlci5hcHBlbmQoaXRlcmF0b3ItPmtleSk7CisgICAgICAgIGlmICghaXRlcmF0
b3ItPnZhbHVlLmlzTnVsbCgpKSB7CiAgICAgICAgICAgICBtX2FjY2VwdGVkRXh0ZW5zaW9uc0J1
aWxkZXIuYXBwZW5kKCI9Iik7Ci0gICAgICAgICAgICBtX2FjY2VwdGVkRXh0ZW5zaW9uc0J1aWxk
ZXIuYXBwZW5kKGl0ZXJhdG9yLT5zZWNvbmQpOworICAgICAgICAgICAgbV9hY2NlcHRlZEV4dGVu
c2lvbnNCdWlsZGVyLmFwcGVuZChpdGVyYXRvci0+dmFsdWUpOwogICAgICAgICB9CiAgICAgfQog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKaW5k
ZXggZGFkNGM4NC4uNmIzYTM3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BWE9iamVjdENhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FYT2JqZWN0Q2FjaGUuY3BwCkBAIC05NCw3ICs5NCw3IEBAIEFYT2JqZWN0Q2FjaGU6On5BWE9i
amVjdENhY2hlKCkKIHsKICAgICBIYXNoTWFwPEFYSUQsIFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2Jq
ZWN0PiA+OjppdGVyYXRvciBlbmQgPSBtX29iamVjdHMuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFw
PEFYSUQsIFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiA+OjppdGVyYXRvciBpdCA9IG1fb2Jq
ZWN0cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgQWNjZXNzaWJpbGl0eU9i
amVjdCogb2JqID0gKCppdCkuc2Vjb25kLmdldCgpOworICAgICAgICBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBvYmogPSAoKml0KS52YWx1ZS5nZXQoKTsKICAgICAgICAgZGV0YWNoV3JhcHBlcihvYmop
OwogICAgICAgICBvYmotPmRldGFjaCgpOwogICAgICAgICByZW1vdmVBWElEKG9iaik7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0RPTU9iamVjdENhY2hlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvRE9NT2JqZWN0Q2FjaGUuY3BwCmlu
ZGV4IDJlN2YxMDYuLmRkN2QwNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2dvYmplY3QvRE9NT2JqZWN0Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2dvYmplY3QvRE9NT2JqZWN0Q2FjaGUuY3BwCkBAIC03NCw3ICs3NCw3IEBAIHZvaWQgRE9NT2Jq
ZWN0Q2FjaGU6OmNsZWFyQnlGcmFtZShXZWJDb3JlOjpGcmFtZSogZnJhbWUpCiAgICAgLy8gaXRl
cmF0aW5nIHRoZSBjYWNoZSBpdHNlbGYuCiAgICAgRE9NT2JqZWN0TWFwOjppdGVyYXRvciBlbmQg
PSBkb21PYmplY3RzKCkuZW5kKCk7CiAgICAgZm9yIChET01PYmplY3RNYXA6Oml0ZXJhdG9yIGl0
ZXIgPSBkb21PYmplY3RzKCkuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewotICAgICAg
ICBET01PYmplY3RDYWNoZURhdGEqIGRhdGEgPSBpdGVyLT5zZWNvbmQ7CisgICAgICAgIERPTU9i
amVjdENhY2hlRGF0YSogZGF0YSA9IGl0ZXItPnZhbHVlOwogICAgICAgICBBU1NFUlQoZGF0YSk7
CiAgICAgICAgIGlmICgoIWZyYW1lIHx8IGRhdGEtPmZyYW1lID09IGZyYW1lKSAmJiBkYXRhLT50
aW1lc1JldHVybmVkKQogICAgICAgICAgICAgdG9VbnJlZi5hcHBlbmQoZGF0YSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01PYmplY3RIYXNoVGFibGVNYXAuaCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTU9iamVjdEhhc2hUYWJsZU1hcC5oCmluZGV4
IDY0ODI4ZDYuLjc1M2MwNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0RPTU9iamVjdEhhc2hUYWJsZU1hcC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0RPTU9iamVjdEhhc2hUYWJsZU1hcC5oCkBAIC0zOSwxNSArMzksMTUgQEAgcHVibGljOgogICAg
IH5ET01PYmplY3RIYXNoVGFibGVNYXAoKQogICAgIHsKICAgICAgICAgZm9yIChIYXNoTWFwPGNv
bnN0IEpTQzo6SGFzaFRhYmxlKiwgSlNDOjpIYXNoVGFibGU+OjppdGVyYXRvciBpdGVyID0gbV9t
YXAuYmVnaW4oKTsgaXRlciAhPSBtX21hcC5lbmQoKTsgKytpdGVyKQotICAgICAgICAgICAgaXRl
ci0+c2Vjb25kLmRlbGV0ZVRhYmxlKCk7CisgICAgICAgICAgICBpdGVyLT52YWx1ZS5kZWxldGVU
YWJsZSgpOwogICAgIH0KIAogICAgIGNvbnN0IEpTQzo6SGFzaFRhYmxlKiBnZXQoY29uc3QgSlND
OjpIYXNoVGFibGUqIHN0YXRpY1RhYmxlKQogICAgIHsKICAgICAgICAgSGFzaE1hcDxjb25zdCBK
U0M6Okhhc2hUYWJsZSosIEpTQzo6SGFzaFRhYmxlPjo6aXRlcmF0b3IgaXRlciA9IG1fbWFwLmZp
bmQoc3RhdGljVGFibGUpOwogICAgICAgICBpZiAoaXRlciAhPSBtX21hcC5lbmQoKSkKLSAgICAg
ICAgICAgIHJldHVybiAmaXRlci0+c2Vjb25kOwotICAgICAgICByZXR1cm4gJm1fbWFwLnNldChz
dGF0aWNUYWJsZSwgc3RhdGljVGFibGUtPmNvcHkoKSkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAg
ICAgICAgIHJldHVybiAmaXRlci0+dmFsdWU7CisgICAgICAgIHJldHVybiAmbV9tYXAuc2V0KHN0
YXRpY1RhYmxlLCBzdGF0aWNUYWJsZS0+Y29weSgpKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgfQog
CiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01C
aW5kaW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAK
aW5kZXggMzFmMjVkYS4uYTE5OThmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01CaW5kaW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTUJpbmRpbmcuY3BwCkBAIC0yNzQsNyArMjc0LDcgQEAgU3RydWN0dXJlKiBjYWNoZURPTVN0
cnVjdHVyZShKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVj
dHUKIHsKICAgICBKU0RPTVN0cnVjdHVyZU1hcCYgc3RydWN0dXJlcyA9IGdsb2JhbE9iamVjdC0+
c3RydWN0dXJlcygpOwogICAgIEFTU0VSVCghc3RydWN0dXJlcy5jb250YWlucyhjbGFzc0luZm8p
KTsKLSAgICByZXR1cm4gc3RydWN0dXJlcy5zZXQoY2xhc3NJbmZvLCBXcml0ZUJhcnJpZXI8U3Ry
dWN0dXJlPihnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1
cmUpKS5pdGVyYXRvci0+c2Vjb25kLmdldCgpOworICAgIHJldHVybiBzdHJ1Y3R1cmVzLnNldChj
bGFzc0luZm8sIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0
YSgpLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkpLml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01HbG9iYWxPYmplY3QuY3BwCmluZGV4IDM2MTA0ODAuLmQzYzQyOWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAKQEAgLTg4
LDExICs4OCwxMSBAQCB2b2lkIEpTRE9NR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAKICAgICBKU0RPTVN0cnVjdHVyZU1hcDo6
aXRlcmF0b3IgZW5kID0gdGhpc09iamVjdC0+c3RydWN0dXJlcygpLmVuZCgpOwogICAgIGZvciAo
SlNET01TdHJ1Y3R1cmVNYXA6Oml0ZXJhdG9yIGl0ID0gdGhpc09iamVjdC0+c3RydWN0dXJlcygp
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgdmlzaXRvci5hcHBlbmQoJml0LT5z
ZWNvbmQpOworICAgICAgICB2aXNpdG9yLmFwcGVuZCgmaXQtPnZhbHVlKTsKIAogICAgIEpTRE9N
Q29uc3RydWN0b3JNYXA6Oml0ZXJhdG9yIGVuZDIgPSB0aGlzT2JqZWN0LT5jb25zdHJ1Y3RvcnMo
KS5lbmQoKTsKICAgICBmb3IgKEpTRE9NQ29uc3RydWN0b3JNYXA6Oml0ZXJhdG9yIGl0MiA9IHRo
aXNPYmplY3QtPmNvbnN0cnVjdG9ycygpLmJlZ2luKCk7IGl0MiAhPSBlbmQyOyArK2l0MikKLSAg
ICAgICAgdmlzaXRvci5hcHBlbmQoJml0Mi0+c2Vjb25kKTsKKyAgICAgICAgdmlzaXRvci5hcHBl
bmQoJml0Mi0+dmFsdWUpOwogfQogCiB2b2lkIEpTRE9NR2xvYmFsT2JqZWN0OjpzZXRDdXJyZW50
RXZlbnQoRXZlbnQqIGN1cnJlbnRFdmVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTUdsb2JhbE9iamVjdC5oCmluZGV4IGJkYWI1NjguLjljYzE3MWIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuaApAQCAtOTMsNyArOTMs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEpTQzo6SlNPYmplY3QqIGNvbnN0cnVj
dG9yID0gQ29uc3RydWN0b3JDbGFzczo6Y3JlYXRlKGV4ZWMsIENvbnN0cnVjdG9yQ2xhc3M6OmNy
ZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIGNvbnN0X2Nhc3Q8SlNET01HbG9iYWxP
YmplY3QqPihnbG9iYWxPYmplY3QpLCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSwg
Y29uc3RfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOwogICAgICAgICBB
U1NFUlQoIWNvbnN0X2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpLT5jb25z
dHJ1Y3RvcnMoKS5jb250YWlucygmQ29uc3RydWN0b3JDbGFzczo6c19pbmZvKSk7CiAgICAgICAg
IEpTQzo6V3JpdGVCYXJyaWVyPEpTQzo6SlNPYmplY3Q+IHRlbXA7Ci0gICAgICAgIGNvbnN0X2Nh
c3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpLT5jb25zdHJ1Y3RvcnMoKS5hZGQo
JkNvbnN0cnVjdG9yQ2xhc3M6OnNfaW5mbywgdGVtcCkuaXRlcmF0b3ItPnNlY29uZC5zZXQoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QsIGNvbnN0cnVjdG9yKTsKKyAgICAgICAgY29u
c3RfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCktPmNvbnN0cnVjdG9ycygp
LmFkZCgmQ29uc3RydWN0b3JDbGFzczo6c19pbmZvLCB0ZW1wKS5pdGVyYXRvci0+dmFsdWUuc2V0
KGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LCBjb25zdHJ1Y3Rvcik7CiAgICAgICAg
IHJldHVybiBjb25zdHJ1Y3RvcjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCmluZGV4IGZmMGFlZWYuLmVkNzQz
Y2MgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1BhZ2VTY3JpcHREZWJ1
Z1NlcnZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUGFnZVNjcmlwdERl
YnVnU2VydmVyLmNwcApAQCAtODIsNyArODIsNyBAQCB2b2lkIFBhZ2VTY3JpcHREZWJ1Z1NlcnZl
cjo6YWRkTGlzdGVuZXIoU2NyaXB0RGVidWdMaXN0ZW5lciogbGlzdGVuZXIsIFBhZ2UqIHBhZwog
ICAgIEFTU0VSVF9BUkcobGlzdGVuZXIsIGxpc3RlbmVyKTsKICAgICBBU1NFUlRfQVJHKHBhZ2Us
IHBhZ2UpOwogCi0gICAgT3duUHRyPExpc3RlbmVyU2V0PiYgbGlzdGVuZXJzID0gbV9wYWdlTGlz
dGVuZXJzTWFwLmFkZChwYWdlLCBudWxscHRyKS5pdGVyYXRvci0+c2Vjb25kOworICAgIE93blB0
cjxMaXN0ZW5lclNldD4mIGxpc3RlbmVycyA9IG1fcGFnZUxpc3RlbmVyc01hcC5hZGQocGFnZSwg
bnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghbGlzdGVuZXJzKQogICAgICAgICBs
aXN0ZW5lcnMgPSBhZG9wdFB0cihuZXcgTGlzdGVuZXJTZXQpOwogICAgIGxpc3RlbmVycy0+YWRk
KGxpc3RlbmVyKTsKQEAgLTEwMCw3ICsxMDAsNyBAQCB2b2lkIFBhZ2VTY3JpcHREZWJ1Z1NlcnZl
cjo6cmVtb3ZlTGlzdGVuZXIoU2NyaXB0RGVidWdMaXN0ZW5lciogbGlzdGVuZXIsIFBhZ2UqCiAg
ICAgaWYgKGl0ID09IG1fcGFnZUxpc3RlbmVyc01hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgTGlzdGVuZXJTZXQqIGxpc3RlbmVycyA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgTGlz
dGVuZXJTZXQqIGxpc3RlbmVycyA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICBsaXN0ZW5lcnMtPnJl
bW92ZShsaXN0ZW5lcik7CiAgICAgaWYgKGxpc3RlbmVycy0+aXNFbXB0eSgpKSB7CiAgICAgICAg
IG1fcGFnZUxpc3RlbmVyc01hcC5yZW1vdmUoaXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1NjcmlwdENhY2hlZEZyYW1lRGF0YS5jcHAKaW5kZXggOWNmNGU5OS4uYjk5
YTNkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q2FjaGVk
RnJhbWVEYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDYWNo
ZWRGcmFtZURhdGEuY3BwCkBAIC01Myw4ICs1Myw4IEBAIFNjcmlwdENhY2hlZEZyYW1lRGF0YTo6
U2NyaXB0Q2FjaGVkRnJhbWVEYXRhKEZyYW1lKiBmcmFtZSkKIAogICAgIFNjcmlwdENvbnRyb2xs
ZXI6OlNoZWxsTWFwOjppdGVyYXRvciB3aW5kb3dTaGVsbHNFbmQgPSB3aW5kb3dTaGVsbHMuZW5k
KCk7CiAgICAgZm9yIChTY3JpcHRDb250cm9sbGVyOjpTaGVsbE1hcDo6aXRlcmF0b3IgaXRlciA9
IHdpbmRvd1NoZWxscy5iZWdpbigpOyBpdGVyICE9IHdpbmRvd1NoZWxsc0VuZDsgKytpdGVyKSB7
Ci0gICAgICAgIEpTRE9NV2luZG93KiB3aW5kb3cgPSBpdGVyLT5zZWNvbmQtPndpbmRvdygpOwot
ICAgICAgICBtX3dpbmRvd3MuYWRkKGl0ZXItPmZpcnN0LmdldCgpLCBTdHJvbmc8SlNET01XaW5k
b3c+KHdpbmRvdy0+Z2xvYmFsRGF0YSgpLCB3aW5kb3cpKTsKKyAgICAgICAgSlNET01XaW5kb3cq
IHdpbmRvdyA9IGl0ZXItPnZhbHVlLT53aW5kb3coKTsKKyAgICAgICAgbV93aW5kb3dzLmFkZChp
dGVyLT5rZXkuZ2V0KCksIFN0cm9uZzxKU0RPTVdpbmRvdz4od2luZG93LT5nbG9iYWxEYXRhKCks
IHdpbmRvdykpOwogICAgIH0KIAogICAgIHNjcmlwdENvbnRyb2xsZXItPmF0dGFjaERlYnVnZ2Vy
KDApOwpAQCAtNzQsOCArNzQsOCBAQCB2b2lkIFNjcmlwdENhY2hlZEZyYW1lRGF0YTo6cmVzdG9y
ZShGcmFtZSogZnJhbWUpCiAKICAgICBTY3JpcHRDb250cm9sbGVyOjpTaGVsbE1hcDo6aXRlcmF0
b3Igd2luZG93U2hlbGxzRW5kID0gd2luZG93U2hlbGxzLmVuZCgpOwogICAgIGZvciAoU2NyaXB0
Q29udHJvbGxlcjo6U2hlbGxNYXA6Oml0ZXJhdG9yIGl0ZXIgPSB3aW5kb3dTaGVsbHMuYmVnaW4o
KTsgaXRlciAhPSB3aW5kb3dTaGVsbHNFbmQ7ICsraXRlcikgewotICAgICAgICBET01XcmFwcGVy
V29ybGQqIHdvcmxkID0gaXRlci0+Zmlyc3QuZ2V0KCk7Ci0gICAgICAgIEpTRE9NV2luZG93U2hl
bGwqIHdpbmRvd1NoZWxsID0gaXRlci0+c2Vjb25kLmdldCgpOworICAgICAgICBET01XcmFwcGVy
V29ybGQqIHdvcmxkID0gaXRlci0+a2V5LmdldCgpOworICAgICAgICBKU0RPTVdpbmRvd1NoZWxs
KiB3aW5kb3dTaGVsbCA9IGl0ZXItPnZhbHVlLmdldCgpOwogCiAgICAgICAgIGlmIChKU0RPTVdp
bmRvdyogd2luZG93ID0gbV93aW5kb3dzLmdldCh3b3JsZCkuZ2V0KCkpCiAgICAgICAgICAgICB3
aW5kb3dTaGVsbC0+c2V0V2luZG93KHdpbmRvdy0+Z2xvYmFsRGF0YSgpLCB3aW5kb3cpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAppbmRleCAw
NmM3OTk2Li41M2I0NWFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
Y3JpcHRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3Jp
cHRDb250cm9sbGVyLmNwcApAQCAtOTMsNyArOTMsNyBAQCBTY3JpcHRDb250cm9sbGVyOjp+U2Ny
aXB0Q29udHJvbGxlcigpCiAgICAgLy8gSXQncyBsaWtlbHkgdGhhdCBkZXN0cm95aW5nIG1fd2lu
ZG93U2hlbGxzIHdpbGwgY3JlYXRlIGEgbG90IG9mIGdhcmJhZ2UuCiAgICAgaWYgKCFtX3dpbmRv
d1NoZWxscy5pc0VtcHR5KCkpIHsKICAgICAgICAgd2hpbGUgKCFtX3dpbmRvd1NoZWxscy5pc0Vt
cHR5KCkpCi0gICAgICAgICAgICBkZXN0cm95V2luZG93U2hlbGwobV93aW5kb3dTaGVsbHMuYmVn
aW4oKS0+Zmlyc3QuZ2V0KCkpOworICAgICAgICAgICAgZGVzdHJveVdpbmRvd1NoZWxsKG1fd2lu
ZG93U2hlbGxzLmJlZ2luKCktPmtleS5nZXQoKSk7CiAgICAgICAgIGdjQ29udHJvbGxlcigpLmdh
cmJhZ2VDb2xsZWN0U29vbigpOwogICAgIH0KIH0KQEAgLTE4MCw3ICsxODAsNyBAQCB2b2lkIFNj
cmlwdENvbnRyb2xsZXI6OmNsZWFyV2luZG93U2hlbGwoYm9vbCBnb2luZ0ludG9QYWdlQ2FjaGUp
CiAgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERh
dGEoKSk7CiAKICAgICBmb3IgKFNoZWxsTWFwOjppdGVyYXRvciBpdGVyID0gbV93aW5kb3dTaGVs
bHMuYmVnaW4oKTsgaXRlciAhPSBtX3dpbmRvd1NoZWxscy5lbmQoKTsgKytpdGVyKSB7Ci0gICAg
ICAgIEpTRE9NV2luZG93U2hlbGwqIHdpbmRvd1NoZWxsID0gaXRlci0+c2Vjb25kLmdldCgpOwor
ICAgICAgICBKU0RPTVdpbmRvd1NoZWxsKiB3aW5kb3dTaGVsbCA9IGl0ZXItPnZhbHVlLmdldCgp
OwogCiAgICAgICAgIC8vIENsZWFyIHRoZSBkZWJ1Z2dlciBmcm9tIHRoZSBjdXJyZW50IHdpbmRv
dyBiZWZvcmUgc2V0dGluZyB0aGUgbmV3IHdpbmRvdy4KICAgICAgICAgYXR0YWNoRGVidWdnZXIo
d2luZG93U2hlbGwsIDApOwpAQCAtMjY0LDcgKzI2NCw3IEBAIGJvb2wgU2NyaXB0Q29udHJvbGxl
cjo6Y2FuQWNjZXNzRnJvbUN1cnJlbnRPcmlnaW4oRnJhbWUgKmZyYW1lKQogdm9pZCBTY3JpcHRD
b250cm9sbGVyOjphdHRhY2hEZWJ1Z2dlcihKU0M6OkRlYnVnZ2VyKiBkZWJ1Z2dlcikKIHsKICAg
ICBmb3IgKFNoZWxsTWFwOjppdGVyYXRvciBpdGVyID0gbV93aW5kb3dTaGVsbHMuYmVnaW4oKTsg
aXRlciAhPSBtX3dpbmRvd1NoZWxscy5lbmQoKTsgKytpdGVyKQotICAgICAgICBhdHRhY2hEZWJ1
Z2dlcihpdGVyLT5zZWNvbmQuZ2V0KCksIGRlYnVnZ2VyKTsKKyAgICAgICAgYXR0YWNoRGVidWdn
ZXIoaXRlci0+dmFsdWUuZ2V0KCksIGRlYnVnZ2VyKTsKIH0KIAogdm9pZCBTY3JpcHRDb250cm9s
bGVyOjphdHRhY2hEZWJ1Z2dlcihKU0RPTVdpbmRvd1NoZWxsKiBzaGVsbCwgSlNDOjpEZWJ1Z2dl
ciogZGVidWdnZXIpCkBAIC0yODUsOCArMjg1LDggQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjp1
cGRhdGVEb2N1bWVudCgpCiAgICAgICAgIHJldHVybjsKIAogICAgIGZvciAoU2hlbGxNYXA6Oml0
ZXJhdG9yIGl0ZXIgPSBtX3dpbmRvd1NoZWxscy5iZWdpbigpOyBpdGVyICE9IG1fd2luZG93U2hl
bGxzLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soaXRlci0+Zmly
c3QtPmdsb2JhbERhdGEoKSk7Ci0gICAgICAgIGl0ZXItPnNlY29uZC0+d2luZG93KCktPnVwZGF0
ZURvY3VtZW50KCk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGl0ZXItPmtleS0+Z2xvYmFs
RGF0YSgpKTsKKyAgICAgICAgaXRlci0+dmFsdWUtPndpbmRvdygpLT51cGRhdGVEb2N1bWVudCgp
OwogICAgIH0KIH0KIApAQCAtMzIzLDcgKzMyMyw3IEBAIFBhc3NSZWZQdHI8QmluZGluZ3M6OlJv
b3RPYmplY3Q+IFNjcmlwdENvbnRyb2xsZXI6OmNyZWF0ZVJvb3RPYmplY3Qodm9pZCogbmF0aXZl
CiB7CiAgICAgUm9vdE9iamVjdE1hcDo6aXRlcmF0b3IgaXQgPSBtX3Jvb3RPYmplY3RzLmZpbmQo
bmF0aXZlSGFuZGxlKTsKICAgICBpZiAoaXQgIT0gbV9yb290T2JqZWN0cy5lbmQoKSkKLSAgICAg
ICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBpdC0+dmFsdWU7CiAKICAgICBS
ZWZQdHI8QmluZGluZ3M6OlJvb3RPYmplY3Q+IHJvb3RPYmplY3QgPSBCaW5kaW5nczo6Um9vdE9i
amVjdDo6Y3JlYXRlKG5hdGl2ZUhhbmRsZSwgZ2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpKTsK
IApAQCAtMzM5LDggKzMzOSw4IEBAIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6c2V0Q2FwdHVyZUNh
bGxTdGFja0ZvclVuY2F1Z2h0RXhjZXB0aW9ucyhib29sKQogdm9pZCBTY3JpcHRDb250cm9sbGVy
Ojpjb2xsZWN0SXNvbGF0ZWRDb250ZXh0cyhWZWN0b3I8c3RkOjpwYWlyPEpTQzo6RXhlY1N0YXRl
KiwgU2VjdXJpdHlPcmlnaW4qPiA+JiByZXN1bHQpCiB7CiAgICAgZm9yIChTaGVsbE1hcDo6aXRl
cmF0b3IgaXRlciA9IG1fd2luZG93U2hlbGxzLmJlZ2luKCk7IGl0ZXIgIT0gbV93aW5kb3dTaGVs
bHMuZW5kKCk7ICsraXRlcikgewotICAgICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IGl0ZXIt
PnNlY29uZC0+d2luZG93KCktPmdsb2JhbEV4ZWMoKTsKLSAgICAgICAgU2VjdXJpdHlPcmlnaW4q
IG9yaWdpbiA9IGl0ZXItPnNlY29uZC0+d2luZG93KCktPmltcGwoKS0+c2VjdXJpdHlPcmlnaW4o
KTsKKyAgICAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBpdGVyLT52YWx1ZS0+d2luZG93KCkt
Pmdsb2JhbEV4ZWMoKTsKKyAgICAgICAgU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiA9IGl0ZXItPnZh
bHVlLT53aW5kb3coKS0+aW1wbCgpLT5zZWN1cml0eU9yaWdpbigpOwogICAgICAgICByZXN1bHQu
YXBwZW5kKHN0ZDo6cGFpcjxTY3JpcHRTdGF0ZSosIFNlY3VyaXR5T3JpZ2luKj4oZXhlYywgb3Jp
Z2luKSk7CiAgICAgfQogfQpAQCAtNDE4LDcgKzQxOCw3IEBAIHZvaWQgU2NyaXB0Q29udHJvbGxl
cjo6Y2xlYW51cFNjcmlwdE9iamVjdHNGb3JQbHVnaW4odm9pZCogbmF0aXZlSGFuZGxlKQogICAg
IGlmIChpdCA9PSBtX3Jvb3RPYmplY3RzLmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBp
dC0+c2Vjb25kLT5pbnZhbGlkYXRlKCk7CisgICAgaXQtPnZhbHVlLT5pbnZhbGlkYXRlKCk7CiAg
ICAgbV9yb290T2JqZWN0cy5yZW1vdmUoaXQpOwogfQogCkBAIC00MjgsNyArNDI4LDcgQEAgdm9p
ZCBTY3JpcHRDb250cm9sbGVyOjpjbGVhclNjcmlwdE9iamVjdHMoKQogCiAgICAgUm9vdE9iamVj
dE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9yb290T2JqZWN0cy5lbmQoKTsKICAgICBmb3Ig
KFJvb3RPYmplY3RNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9yb290T2JqZWN0cy5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPmludmFsaWRhdGUoKTsKKyAg
ICAgICAgaXQtPnZhbHVlLT5pbnZhbGlkYXRlKCk7CiAKICAgICBtX3Jvb3RPYmplY3RzLmNsZWFy
KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRy
b2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuaApp
bmRleCAwZWQ5ODY5Li5kNmE3ZjdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TY3JpcHRDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2NyaXB0Q29udHJvbGxlci5oCkBAIC03NCwxMiArNzQsMTIgQEAgcHVibGljOgogICAgIEpTRE9N
V2luZG93U2hlbGwqIHdpbmRvd1NoZWxsKERPTVdyYXBwZXJXb3JsZCogd29ybGQpCiAgICAgewog
ICAgICAgICBTaGVsbE1hcDo6aXRlcmF0b3IgaXRlciA9IG1fd2luZG93U2hlbGxzLmZpbmQod29y
bGQpOwotICAgICAgICByZXR1cm4gKGl0ZXIgIT0gbV93aW5kb3dTaGVsbHMuZW5kKCkpID8gaXRl
ci0+c2Vjb25kLmdldCgpIDogaW5pdFNjcmlwdCh3b3JsZCk7CisgICAgICAgIHJldHVybiAoaXRl
ciAhPSBtX3dpbmRvd1NoZWxscy5lbmQoKSkgPyBpdGVyLT52YWx1ZS5nZXQoKSA6IGluaXRTY3Jp
cHQod29ybGQpOwogICAgIH0KICAgICBKU0RPTVdpbmRvd1NoZWxsKiBleGlzdGluZ1dpbmRvd1No
ZWxsKERPTVdyYXBwZXJXb3JsZCogd29ybGQpIGNvbnN0CiAgICAgewogICAgICAgICBTaGVsbE1h
cDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1fd2luZG93U2hlbGxzLmZpbmQod29ybGQpOwotICAg
ICAgICByZXR1cm4gKGl0ZXIgIT0gbV93aW5kb3dTaGVsbHMuZW5kKCkpID8gaXRlci0+c2Vjb25k
LmdldCgpIDogMDsKKyAgICAgICAgcmV0dXJuIChpdGVyICE9IG1fd2luZG93U2hlbGxzLmVuZCgp
KSA/IGl0ZXItPnZhbHVlLmdldCgpIDogMDsKICAgICB9CiAgICAgSlNET01XaW5kb3cqIGdsb2Jh
bE9iamVjdChET01XcmFwcGVyV29ybGQqIHdvcmxkKQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmNwcAppbmRleCA5YWNlODJkLi5lNTg0
NzQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1Nl
cnZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2
ZXIuY3BwCkBAIC03NSw5ICs3NSw5IEBAIFN0cmluZyBTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0QnJl
YWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCBjb25zdCBTY3JpcHRCcmVhCiAgICAgU291
cmNlSWRUb0JyZWFrcG9pbnRzTWFwOjppdGVyYXRvciBpdCA9IG1fc291cmNlSWRUb0JyZWFrcG9p
bnRzLmZpbmQoc291cmNlSURWYWx1ZSk7CiAgICAgaWYgKGl0ID09IG1fc291cmNlSWRUb0JyZWFr
cG9pbnRzLmVuZCgpKQogICAgICAgICBpdCA9IG1fc291cmNlSWRUb0JyZWFrcG9pbnRzLnNldChz
b3VyY2VJRFZhbHVlLCBMaW5lVG9CcmVha3BvaW50TWFwKCkpLml0ZXJhdG9yOwotICAgIGlmIChp
dC0+c2Vjb25kLmNvbnRhaW5zKHNjcmlwdEJyZWFrcG9pbnQubGluZU51bWJlciArIDEpKQorICAg
IGlmIChpdC0+dmFsdWUuY29udGFpbnMoc2NyaXB0QnJlYWtwb2ludC5saW5lTnVtYmVyICsgMSkp
CiAgICAgICAgIHJldHVybiAiIjsKLSAgICBpdC0+c2Vjb25kLnNldChzY3JpcHRCcmVha3BvaW50
LmxpbmVOdW1iZXIgKyAxLCBzY3JpcHRCcmVha3BvaW50KTsKKyAgICBpdC0+dmFsdWUuc2V0KHNj
cmlwdEJyZWFrcG9pbnQubGluZU51bWJlciArIDEsIHNjcmlwdEJyZWFrcG9pbnQpOwogICAgICph
Y3R1YWxMaW5lTnVtYmVyID0gc2NyaXB0QnJlYWtwb2ludC5saW5lTnVtYmVyOwogICAgIC8vIEZJ
WE1FKFdLNTMwMDMpOiBpbXBsZW1lbnQgc2V0dGluZyBicmVha3BvaW50cyBieSBsaW5lOmNvbHVt
bi4KICAgICAqYWN0dWFsQ29sdW1uTnVtYmVyID0gMDsKQEAgLTk5LDcgKzk5LDcgQEAgdm9pZCBT
Y3JpcHREZWJ1Z1NlcnZlcjo6cmVtb3ZlQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIGJyZWFrcG9p
bnRJZCkKICAgICAgICAgcmV0dXJuOwogICAgIFNvdXJjZUlkVG9CcmVha3BvaW50c01hcDo6aXRl
cmF0b3IgaXQgPSBtX3NvdXJjZUlkVG9CcmVha3BvaW50cy5maW5kKHNvdXJjZUlEVmFsdWUpOwog
ICAgIGlmIChpdCAhPSBtX3NvdXJjZUlkVG9CcmVha3BvaW50cy5lbmQoKSkKLSAgICAgICAgaXQt
PnNlY29uZC5yZW1vdmUobGluZU51bWJlciArIDEpOworICAgICAgICBpdC0+dmFsdWUucmVtb3Zl
KGxpbmVOdW1iZXIgKyAxKTsKIH0KIAogYm9vbCBTY3JpcHREZWJ1Z1NlcnZlcjo6aGFzQnJlYWtw
b2ludChpbnRwdHJfdCBzb3VyY2VJRCwgY29uc3QgVGV4dFBvc2l0aW9uJiBwb3NpdGlvbikgY29u
c3QKQEAgLTExMywxNiArMTEzLDE2IEBAIGJvb2wgU2NyaXB0RGVidWdTZXJ2ZXI6Omhhc0JyZWFr
cG9pbnQoaW50cHRyX3Qgc291cmNlSUQsIGNvbnN0IFRleHRQb3NpdGlvbiYgcG9zCiAgICAgaW50
IGxpbmVOdW1iZXIgPSBwb3NpdGlvbi5tX2xpbmUub25lQmFzZWRJbnQoKTsKICAgICBpZiAobGlu
ZU51bWJlciA8PSAwKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgTGluZVRvQnJlYWtwb2lu
dE1hcDo6Y29uc3RfaXRlcmF0b3IgYnJlYWtJdCA9IGl0LT5zZWNvbmQuZmluZChsaW5lTnVtYmVy
KTsKLSAgICBpZiAoYnJlYWtJdCA9PSBpdC0+c2Vjb25kLmVuZCgpKQorICAgIExpbmVUb0JyZWFr
cG9pbnRNYXA6OmNvbnN0X2l0ZXJhdG9yIGJyZWFrSXQgPSBpdC0+dmFsdWUuZmluZChsaW5lTnVt
YmVyKTsKKyAgICBpZiAoYnJlYWtJdCA9PSBpdC0+dmFsdWUuZW5kKCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIC8vIEFuIGVtcHR5IGNvbmRpdGlvbiBjb3VudHMgYXMgbm8gY29uZGl0
aW9uIHdoaWNoIGlzIGVxdWl2YWxlbnQgdG8gInRydWUiLgotICAgIGlmIChicmVha0l0LT5zZWNv
bmQuY29uZGl0aW9uLmlzRW1wdHkoKSkKKyAgICBpZiAoYnJlYWtJdC0+dmFsdWUuY29uZGl0aW9u
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBKU1ZhbHVlIGV4Y2VwdGlv
bjsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IG1fY3VycmVudENhbGxGcmFtZS0+ZXZhbHVhdGUoc3Ry
aW5nVG9VU3RyaW5nKGJyZWFrSXQtPnNlY29uZC5jb25kaXRpb24pLCBleGNlcHRpb24pOworICAg
IEpTVmFsdWUgcmVzdWx0ID0gbV9jdXJyZW50Q2FsbEZyYW1lLT5ldmFsdWF0ZShzdHJpbmdUb1VT
dHJpbmcoYnJlYWtJdC0+dmFsdWUuY29uZGl0aW9uKSwgZXhjZXB0aW9uKTsKICAgICBpZiAoZXhj
ZXB0aW9uKSB7CiAgICAgICAgIC8vIEFuIGVycm9uZW91cyBjb25kaXRpb24gY291bnRzIGFzICJm
YWxzZSIuCiAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCmluZGV4IDJiNDdkNGIuLmY3OTcw
ZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNj
cmlwdFZhbHVlLmNwcApAQCAtNDA5LDggKzQwOSw4IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIEhh
bmRsZSBkdXBsaWNhdGUgcmVmZXJlbmNlcwogICAgICAgICBpZiAoZm91bmQgIT0gbV9vYmplY3RQ
b29sLmVuZCgpKSB7CiAgICAgICAgICAgICB3cml0ZShPYmplY3RSZWZlcmVuY2VUYWcpOwotICAg
ICAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludDMyX3Q+KGZvdW5kLT5zZWNvbmQpIDwgbV9v
YmplY3RQb29sLnNpemUoKSk7Ci0gICAgICAgICAgICB3cml0ZU9iamVjdEluZGV4KGZvdW5kLT5z
ZWNvbmQpOworICAgICAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludDMyX3Q+KGZvdW5kLT52
YWx1ZSkgPCBtX29iamVjdFBvb2wuc2l6ZSgpKTsKKyAgICAgICAgICAgIHdyaXRlT2JqZWN0SW5k
ZXgoZm91bmQtPnZhbHVlKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAK
QEAgLTY0Myw3ICs2NDMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIE9iamVjdFBvb2w6
Oml0ZXJhdG9yIGluZGV4ID0gbV90cmFuc2ZlcnJlZE1lc3NhZ2VQb3J0cy5maW5kKG9iaik7CiAg
ICAgICAgICAgICAgICAgaWYgKGluZGV4ICE9IG1fdHJhbnNmZXJyZWRNZXNzYWdlUG9ydHMuZW5k
KCkpIHsKICAgICAgICAgICAgICAgICAgICAgd3JpdGUoTWVzc2FnZVBvcnRSZWZlcmVuY2VUYWcp
OwotICAgICAgICAgICAgICAgICAgICB3cml0ZShpbmRleC0+c2Vjb25kKTsKKyAgICAgICAgICAg
ICAgICAgICAgd3JpdGUoaW5kZXgtPnZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIC8vIE1lc3NhZ2VQb3J0
IG9iamVjdCBjb3VsZCBub3QgYmUgZm91bmQgaW4gdHJhbnNmZXJyZWQgbWVzc2FnZSBwb3J0cwpA
QCAtNjU5LDcgKzY1OSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgT2JqZWN0UG9vbDo6
aXRlcmF0b3IgaW5kZXggPSBtX3RyYW5zZmVycmVkQXJyYXlCdWZmZXJzLmZpbmQob2JqKTsKICAg
ICAgICAgICAgICAgICBpZiAoaW5kZXggIT0gbV90cmFuc2ZlcnJlZEFycmF5QnVmZmVycy5lbmQo
KSkgewogICAgICAgICAgICAgICAgICAgICB3cml0ZShBcnJheUJ1ZmZlclRyYW5zZmVyVGFnKTsK
LSAgICAgICAgICAgICAgICAgICAgd3JpdGUoaW5kZXgtPnNlY29uZCk7CisgICAgICAgICAgICAg
ICAgICAgIHdyaXRlKGluZGV4LT52YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoIXN0YXJ0T2JqZWN0
SW50ZXJuYWwob2JqKSkgLy8gaGFuZGxlIGR1cGxpY2F0ZXMKQEAgLTc1OCw3ICs3NTgsNyBAQCBw
cml2YXRlOgogICAgICAgICBTdHJpbmdDb25zdGFudFBvb2w6OkFkZFJlc3VsdCBhZGRSZXN1bHQg
PSBtX2NvbnN0YW50UG9vbC5hZGQoc3RyLmltcGwoKSwgbV9jb25zdGFudFBvb2wuc2l6ZSgpKTsK
ICAgICAgICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSkgewogICAgICAgICAgICAgd3JpdGUo
U3RyaW5nUG9vbFRhZyk7Ci0gICAgICAgICAgICB3cml0ZVN0cmluZ0luZGV4KGFkZFJlc3VsdC5p
dGVyYXRvci0+c2Vjb25kKTsKKyAgICAgICAgICAgIHdyaXRlU3RyaW5nSW5kZXgoYWRkUmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgu
cG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQpp
bmRleCAwYTk1MjRkLi4zN2YxZmJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQpAQCAtMjkyMCw3ICsyOTIwLDcgQEAgdjg6OlBl
cnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+ICR7Y2xhc3NOYW1lfTo6R2V0UmF3VGVtcGxh
dGUoKQogICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhKiBkYXRhID0gVjhCaW5kaW5nUGVySXNv
bGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6VGVtcGxh
dGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZmluZCgmaW5m
byk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAg
ICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVl
OwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50
PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9IGNyZWF0ZVJhd1RlbXBsYXRlKCk7CkBAIC0y
OTMzLDcgKzI5MzMsNyBAQCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gJHtj
bGFzc05hbWV9OjpHZXRUZW1wbGF0ZSgpCiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGEqIGRh
dGEgPSBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4QmluZGluZ1Bl
cklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+dGVtcGxh
dGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnRlbXBsYXRlTWFw
KCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAg
djg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOEZsb2F0NjRBcnJheS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhGbG9hdDY0QXJy
YXkuY3BwCmluZGV4IGQ1MWM5ZmEuLjE0MmE2MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOEZsb2F0NjRBcnJheS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4RmxvYXQ2NEFycmF5LmNwcApAQCAt
OTMsNyArOTMsNyBAQCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhGbG9h
dDY0QXJyYXk6OkdldFJhd1RlbXBsYXRlKCkKICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YSog
ZGF0YSA9IFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhCaW5kaW5n
UGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT5yYXdU
ZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+cmF3VGVt
cGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAg
ICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29w
ZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPSBjcmVh
dGVSYXdUZW1wbGF0ZSgpOwpAQCAtMTA2LDcgKzEwNiw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpG
dW5jdGlvblRlbXBsYXRlPiBWOEZsb2F0NjRBcnJheTo6R2V0VGVtcGxhdGUoKQogICAgIFY4Qmlu
ZGluZ1Blcklzb2xhdGVEYXRhKiBkYXRhID0gVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OmN1cnJl
bnQoKTsKICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9y
IHJlc3VsdCA9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3Vs
dCAhPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5z
ZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNj
b3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRl
PiB0ZW1wbCA9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVjgvVjhUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RBY3RpdmVET01PYmplY3QuY3BwCmluZGV4IDBhOWI4OGEu
LjJmYmMzMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9WOC9WOFRlc3RBY3RpdmVET01PYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RBY3RpdmVET01PYmplY3QuY3BwCkBAIC0xMzEsNyAr
MTMxLDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdEFjdGl2
ZURPTU9iamVjdDo6R2V0UmF3VGVtcGxhdGUoKQogICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRh
KiBkYXRhID0gVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOEJpbmRp
bmdQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnJh
d1RlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT5yYXdU
ZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAg
ICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNj
b3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9IGNy
ZWF0ZVJhd1RlbXBsYXRlKCk7CkBAIC0xNDQsNyArMTQ0LDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6
OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdEFjdGl2ZURPTU9iamVjdDo6R2V0VGVtcGxhdGUoKQog
ICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhKiBkYXRhID0gVjhCaW5kaW5nUGVySXNvbGF0ZURh
dGE6OmN1cnJlbnQoKTsKICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6
Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAg
aWYgKHJlc3VsdCAhPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4g
cmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6
OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlv
blRlbXBsYXRlPiB0ZW1wbCA9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVjgvVjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcApp
bmRleCAxODBkNmZkLi44MzJiNGU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RDdXN0b21OYW1lZEdldHRl
ci5jcHAKQEAgLTgzLDcgKzgzLDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxh
dGU+IFY4VGVzdEN1c3RvbU5hbWVkR2V0dGVyOjpHZXRSYXdUZW1wbGF0ZSgpCiAgICAgVjhCaW5k
aW5nUGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6Y3VycmVu
dCgpOwogICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3Ig
cmVzdWx0ID0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVz
dWx0ICE9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1
bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFu
ZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVt
cGxhdGU+IHRlbXBsID0gY3JlYXRlUmF3VGVtcGxhdGUoKTsKQEAgLTk2LDcgKzk2LDcgQEAgdjg6
OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdEN1c3RvbU5hbWVkR2V0dGVy
OjpHZXRUZW1wbGF0ZSgpCiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOEJp
bmRpbmdQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4QmluZGluZ1Blcklzb2xhdGVE
YXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+dGVtcGxhdGVNYXAoKS5m
aW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZW5kKCkp
Ci0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+
dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNp
c3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudENvbnN0cnVjdG9yLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudENv
bnN0cnVjdG9yLmNwcAppbmRleCA4ZGRhOTI1Li4wMDY5NTYzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRDb25zdHJ1Y3Rvci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2
ZW50Q29uc3RydWN0b3IuY3BwCkBAIC0xMTksNyArMTE5LDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6
OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdEV2ZW50Q29uc3RydWN0b3I6OkdldFJhd1RlbXBsYXRl
KCkKICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4QmluZGluZ1Blcklzb2xh
dGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OlRlbXBsYXRl
TWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8p
OwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAg
ICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsK
IAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2
ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPSBjcmVhdGVSYXdUZW1wbGF0ZSgpOwpAQCAtMTMy
LDcgKzEzMiw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3RF
dmVudENvbnN0cnVjdG9yOjpHZXRUZW1wbGF0ZSgpCiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURh
dGEqIGRhdGEgPSBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4Qmlu
ZGluZ1Blcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+
dGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnRlbXBs
YXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7
CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVu
dFRhcmdldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhU
ZXN0RXZlbnRUYXJnZXQuY3BwCmluZGV4IGM1YmRiZWIuLjBiNTI1NzMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudFRhcmdldC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2
ZW50VGFyZ2V0LmNwcApAQCAtMTQ0LDcgKzE0NCw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5j
dGlvblRlbXBsYXRlPiBWOFRlc3RFdmVudFRhcmdldDo6R2V0UmF3VGVtcGxhdGUoKQogICAgIFY4
QmluZGluZ1Blcklzb2xhdGVEYXRhKiBkYXRhID0gVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OmN1
cnJlbnQoKTsKICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJh
dG9yIHJlc3VsdCA9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYg
KHJlc3VsdCAhPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4g
cmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6
OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlv
blRlbXBsYXRlPiB0ZW1wbCA9IGNyZWF0ZVJhd1RlbXBsYXRlKCk7CkBAIC0xNTcsNyArMTU3LDcg
QEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdEV2ZW50VGFyZ2V0
OjpHZXRUZW1wbGF0ZSgpCiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOEJp
bmRpbmdQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4QmluZGluZ1Blcklzb2xhdGVE
YXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+dGVtcGxhdGVNYXAoKS5m
aW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZW5kKCkp
Ci0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+
dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNp
c3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFeGNlcHRpb24uY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV4Y2VwdGlvbi5jcHAK
aW5kZXggZTJjOGU5Ni4uNDEyZDA5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV4Y2VwdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV4Y2VwdGlvbi5jcHAKQEAgLTczLDcg
KzczLDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdEV4Y2Vw
dGlvbjo6R2V0UmF3VGVtcGxhdGUoKQogICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhKiBkYXRh
ID0gVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOEJpbmRpbmdQZXJJ
c29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnJhd1RlbXBs
YXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT5yYXdUZW1wbGF0
ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJl
dHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwog
ICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9IGNyZWF0ZVJh
d1RlbXBsYXRlKCk7CkBAIC04Niw3ICs4Niw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlv
blRlbXBsYXRlPiBWOFRlc3RFeGNlcHRpb246OkdldFRlbXBsYXRlKCkKICAgICBWOEJpbmRpbmdQ
ZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpjdXJyZW50KCk7
CiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1
bHQgPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwogICAgIGlmIChyZXN1bHQgIT0g
ZGF0YS0+dGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25k
OworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBo
YW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVt
cGwgPQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4
L1Y4VGVzdEludGVyZmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVjgvVjhUZXN0SW50ZXJmYWNlLmNwcAppbmRleCAxZDdkY2I1Li4xODQ2ZDljIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0SW50ZXJm
YWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhU
ZXN0SW50ZXJmYWNlLmNwcApAQCAtMzEzLDcgKzMxMyw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpG
dW5jdGlvblRlbXBsYXRlPiBWOFRlc3RJbnRlcmZhY2U6OkdldFJhd1RlbXBsYXRlKCkKICAgICBW
OEJpbmRpbmdQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpj
dXJyZW50KCk7CiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVy
YXRvciByZXN1bHQgPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwogICAgIGlm
IChyZXN1bHQgIT0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJu
IHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAogICAgIHY4
OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rp
b25UZW1wbGF0ZT4gdGVtcGwgPSBjcmVhdGVSYXdUZW1wbGF0ZSgpOwpAQCAtMzI2LDcgKzMyNiw3
IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3RJbnRlcmZhY2U6
OkdldFRlbXBsYXRlKCkKICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4Qmlu
ZGluZ1Blcklzb2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURh
dGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmZp
bmQoJmluZm8pOwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+dGVtcGxhdGVNYXAoKS5lbmQoKSkK
LSAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52
YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lz
dGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVu
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCmluZGV4IDljMGMwZDguLjU3ODEwMmUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RNZWRpYVF1
ZXJ5TGlzdExpc3RlbmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVjgvVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAKQEAgLTgzLDcgKzgzLDcg
QEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdE1lZGlhUXVlcnlM
aXN0TGlzdGVuZXI6OkdldFJhd1RlbXBsYXQKICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YSog
ZGF0YSA9IFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhCaW5kaW5n
UGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT5yYXdU
ZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+cmF3VGVt
cGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAg
ICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29w
ZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPSBjcmVh
dGVSYXdUZW1wbGF0ZSgpOwpAQCAtOTYsNyArOTYsNyBAQCB2ODo6UGVyc2lzdGVudDx2ODo6RnVu
Y3Rpb25UZW1wbGF0ZT4gVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6R2V0VGVtcGxhdGUo
KQogICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhKiBkYXRhID0gVjhCaW5kaW5nUGVySXNvbGF0
ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVN
YXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAg
ICAgaWYgKHJlc3VsdCAhPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1
cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAg
djg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5j
dGlvblRlbXBsYXRlPiB0ZW1wbCA9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAK
aW5kZXggYWQ4NWNjZS4uNDNjMGJmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROYW1lZENvbnN0cnVjdG9y
LmNwcApAQCAtMTIzLDcgKzEyMyw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBs
YXRlPiBWOFRlc3ROYW1lZENvbnN0cnVjdG9yOjpHZXRSYXdUZW1wbGF0ZSgpCiAgICAgVjhCaW5k
aW5nUGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6Y3VycmVu
dCgpOwogICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3Ig
cmVzdWx0ID0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVz
dWx0ICE9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1
bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFu
ZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVt
cGxhdGU+IHRlbXBsID0gY3JlYXRlUmF3VGVtcGxhdGUoKTsKQEAgLTEzNiw3ICsxMzYsNyBAQCB2
ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0TmFtZWRDb25zdHJ1Y3Rv
cjo6R2V0VGVtcGxhdGUoKQogICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhKiBkYXRhID0gVjhC
aW5kaW5nUGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOEJpbmRpbmdQZXJJc29sYXRl
RGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnRlbXBsYXRlTWFwKCku
ZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmVuZCgp
KQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQt
PnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJz
aXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Tm9kZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Tm9kZS5jcHAKaW5kZXggY2Uz
N2UwMC4uZjlkNTkxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Y4L1Y4VGVzdE5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9WOC9WOFRlc3ROb2RlLmNwcApAQCAtODEsNyArODEsNyBAQCB2ODo6UGVyc2lz
dGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0Tm9kZTo6R2V0UmF3VGVtcGxhdGUoKQog
ICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhKiBkYXRhID0gVjhCaW5kaW5nUGVySXNvbGF0ZURh
dGE6OmN1cnJlbnQoKTsKICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6
Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAg
ICAgaWYgKHJlc3VsdCAhPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICBy
ZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAg
ICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpG
dW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9IGNyZWF0ZVJhd1RlbXBsYXRlKCk7CkBAIC05NCw3ICs5
NCw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3ROb2RlOjpH
ZXRUZW1wbGF0ZSgpCiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOEJpbmRp
bmdQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRh
OjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+dGVtcGxhdGVNYXAoKS5maW5k
KCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZW5kKCkpCi0g
ICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFs
dWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3Rl
bnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKaW5kZXggMzI2Yjk5Ny4u
YzEyZDY2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Y4L1Y4VGVzdE9iai5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKQEAgLTIyNDMsNyArMjI0Myw3IEBAIHY4OjpQZXJzaXN0ZW50
PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3RPYmo6OkdldFJhd1RlbXBsYXRlKCkKICAgICBW
OEJpbmRpbmdQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpj
dXJyZW50KCk7CiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVy
YXRvciByZXN1bHQgPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwogICAgIGlm
IChyZXN1bHQgIT0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJu
IHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAogICAgIHY4
OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rp
b25UZW1wbGF0ZT4gdGVtcGwgPSBjcmVhdGVSYXdUZW1wbGF0ZSgpOwpAQCAtMjI1Niw3ICsyMjU2
LDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdE9iajo6R2V0
VGVtcGxhdGUoKQogICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhKiBkYXRhID0gVjhCaW5kaW5n
UGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6
VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZmluZCgm
aW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAg
ICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVl
OwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50
PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCmluZGV4IDNiMGYyZjYuLmM1MTY2
YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9W
OFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2UuY3BwCkBAIC0yNjYsNyArMjY2LDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0
aW9uVGVtcGxhdGU+IFY4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6R2V0UmEK
ICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4QmluZGluZ1Blcklzb2xhdGVE
YXRhOjpjdXJyZW50KCk7CiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFw
OjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwog
ICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAg
cmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAog
ICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6
RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPSBjcmVhdGVSYXdUZW1wbGF0ZSgpOwpAQCAtMjc5LDcg
KzI3OSw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OkdldFRlCiAgICAgVjhCaW5kaW5nUGVySXNvbGF0
ZURhdGEqIGRhdGEgPSBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4
QmluZGluZ1Blcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0
YS0+dGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnRl
bXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2Nv
cGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L05QVjhPYmplY3QuY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvTlBWOE9iamVjdC5jcHAKaW5kZXggYTM3OTBkYS4uZmZj
OTgwOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L05QVjhPYmplY3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L05QVjhPYmplY3QuY3BwCkBAIC03
OSw3ICs3OSw3IEBAIHN0YXRpYyB2b2lkIGZyZWVWOE5QT2JqZWN0KE5QT2JqZWN0KiBucE9iamVj
dCkKICAgICBpZiAoaW50IHY4T2JqZWN0SGFzaCA9IHY4TnBPYmplY3QtPnY4T2JqZWN0LT5HZXRJ
ZGVudGl0eUhhc2goKSkgewogICAgICAgICBWOE5QT2JqZWN0TWFwOjppdGVyYXRvciBpdGVyID0g
c3RhdGljVjhOUE9iamVjdE1hcCgpLT5maW5kKHY4T2JqZWN0SGFzaCk7CiAgICAgICAgIGlmIChp
dGVyICE9IHN0YXRpY1Y4TlBPYmplY3RNYXAoKS0+ZW5kKCkpIHsKLSAgICAgICAgICAgIFY4TlBP
YmplY3RWZWN0b3ImIG9iamVjdHMgPSBpdGVyLT5zZWNvbmQ7CisgICAgICAgICAgICBWOE5QT2Jq
ZWN0VmVjdG9yJiBvYmplY3RzID0gaXRlci0+dmFsdWU7CiAgICAgICAgICAgICBmb3IgKHNpemVf
dCBpbmRleCA9IDA7IGluZGV4IDwgb2JqZWN0cy5zaXplKCk7ICsraW5kZXgpIHsKICAgICAgICAg
ICAgICAgICBpZiAob2JqZWN0cy5hdChpbmRleCkgPT0gdjhOcE9iamVjdCkgewogICAgICAgICAg
ICAgICAgICAgICBvYmplY3RzLnJlbW92ZShpbmRleCk7CkBAIC0xNTQsNyArMTU0LDcgQEAgTlBP
YmplY3QqIG5wQ3JlYXRlVjhTY3JpcHRPYmplY3QoTlBQIG5wcCwgdjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiBvYmplY3QsIERPTVdpbmQKICAgICBBU1NFUlQodjhPYmplY3RIYXNoKTsKICAgICBWOE5Q
T2JqZWN0TWFwOjppdGVyYXRvciBpdGVyID0gc3RhdGljVjhOUE9iamVjdE1hcCgpLT5maW5kKHY4
T2JqZWN0SGFzaCk7CiAgICAgaWYgKGl0ZXIgIT0gc3RhdGljVjhOUE9iamVjdE1hcCgpLT5lbmQo
KSkgewotICAgICAgICBWOE5QT2JqZWN0VmVjdG9yJiBvYmplY3RzID0gaXRlci0+c2Vjb25kOwor
ICAgICAgICBWOE5QT2JqZWN0VmVjdG9yJiBvYmplY3RzID0gaXRlci0+dmFsdWU7CiAgICAgICAg
IGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBvYmplY3RzLnNpemUoKTsgKytpbmRleCkg
ewogICAgICAgICAgICAgVjhOUE9iamVjdCogdjhucE9iamVjdCA9IG9iamVjdHMuYXQoaW5kZXgp
OwogICAgICAgICAgICAgaWYgKHY4bnBPYmplY3QtPnJvb3RPYmplY3QgPT0gcm9vdCkgewpAQCAt
MTc0LDcgKzE3NCw3IEBAIE5QT2JqZWN0KiBucENyZWF0ZVY4U2NyaXB0T2JqZWN0KE5QUCBucHAs
IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0LCBET01XaW5kCiAjZW5kaWYKICAgICB2OG5w
T2JqZWN0LT5yb290T2JqZWN0ID0gcm9vdDsKIAotICAgIGl0ZXItPnNlY29uZC5hcHBlbmQodjhu
cE9iamVjdCk7CisgICAgaXRlci0+dmFsdWUuYXBwZW5kKHY4bnBPYmplY3QpOwogCiAgICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8TlBPYmplY3QqPih2OG5wT2JqZWN0KTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAKaW5kZXggMTRjMDUw
YS4uMGJmM2Q5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0
Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29u
dHJvbGxlci5jcHAKQEAgLTExOSw4ICsxMTksOCBAQCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmNs
ZWFyU2NyaXB0T2JqZWN0cygpCiB7CiAgICAgUGx1Z2luT2JqZWN0TWFwOjppdGVyYXRvciBpdCA9
IG1fcGx1Z2luT2JqZWN0cy5iZWdpbigpOwogICAgIGZvciAoOyBpdCAhPSBtX3BsdWdpbk9iamVj
dHMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgX05QTl9VbnJlZ2lzdGVyT2JqZWN0KGl0LT5zZWNv
bmQpOwotICAgICAgICBfTlBOX1JlbGVhc2VPYmplY3QoaXQtPnNlY29uZCk7CisgICAgICAgIF9O
UE5fVW5yZWdpc3Rlck9iamVjdChpdC0+dmFsdWUpOworICAgICAgICBfTlBOX1JlbGVhc2VPYmpl
Y3QoaXQtPnZhbHVlKTsKICAgICB9CiAgICAgbV9wbHVnaW5PYmplY3RzLmNsZWFyKCk7CiAKQEAg
LTM0Niw4ICszNDYsOCBAQCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmNsZWFudXBTY3JpcHRPYmpl
Y3RzRm9yUGx1Z2luKFdpZGdldCogbmF0aXZlSGFuZGxlKQogICAgIFBsdWdpbk9iamVjdE1hcDo6
aXRlcmF0b3IgaXQgPSBtX3BsdWdpbk9iamVjdHMuZmluZChuYXRpdmVIYW5kbGUpOwogICAgIGlm
IChpdCA9PSBtX3BsdWdpbk9iamVjdHMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBfTlBO
X1VucmVnaXN0ZXJPYmplY3QoaXQtPnNlY29uZCk7Ci0gICAgX05QTl9SZWxlYXNlT2JqZWN0KGl0
LT5zZWNvbmQpOworICAgIF9OUE5fVW5yZWdpc3Rlck9iamVjdChpdC0+dmFsdWUpOworICAgIF9O
UE5fUmVsZWFzZU9iamVjdChpdC0+dmFsdWUpOwogICAgIG1fcGx1Z2luT2JqZWN0cy5yZW1vdmUo
aXQpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxp
emVkU2NyaXB0VmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlLmNwcAppbmRleCA5ZjFlMzI5Li5jZmE4MmEzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKQEAgLTEw
OSw3ICsxMDksNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICB0eXBlbmFtZSBIYW5kbGVUb1Q6
Oml0ZXJhdG9yIHJlc3VsdCA9IG1fbWFwLmZpbmQoKmhhbmRsZSk7CiAgICAgICAgIGlmIChyZXN1
bHQgIT0gbV9tYXAuZW5kKCkpIHsKLSAgICAgICAgICAgICp2YWx1ZU91dCA9IHJlc3VsdC0+c2Vj
b25kOworICAgICAgICAgICAgKnZhbHVlT3V0ID0gcmVzdWx0LT52YWx1ZTsKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZ1BlckNvbnRleHREYXRhLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZ1BlckNvbnRleHREYXRhLmNw
cAppbmRleCBmZmNhZjRjLi4zNWUyNzg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9WOEJpbmRpbmdQZXJDb250ZXh0RGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvVjhCaW5kaW5nUGVyQ29udGV4dERhdGEuY3BwCkBAIC00MCw3ICs0MCw3IEBA
IHZvaWQgVjhCaW5kaW5nUGVyQ29udGV4dERhdGE6OmRpc3Bvc2UoKQogICAgIHsKICAgICAgICAg
V3JhcHBlckJvaWxlcnBsYXRlTWFwOjppdGVyYXRvciBpdCA9IG1fd3JhcHBlckJvaWxlcnBsYXRl
cy5iZWdpbigpOwogICAgICAgICBmb3IgKDsgaXQgIT0gbV93cmFwcGVyQm9pbGVycGxhdGVzLmVu
ZCgpOyArK2l0KSB7Ci0gICAgICAgICAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFw
cGVyID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+
IHdyYXBwZXIgPSBpdC0+dmFsdWU7CiAgICAgICAgICAgICB3cmFwcGVyLkRpc3Bvc2UoKTsKICAg
ICAgICAgfQogICAgICAgICBtX3dyYXBwZXJCb2lsZXJwbGF0ZXMuY2xlYXIoKTsKQEAgLTQ5LDcg
KzQ5LDcgQEAgdm9pZCBWOEJpbmRpbmdQZXJDb250ZXh0RGF0YTo6ZGlzcG9zZSgpCiAgICAgewog
ICAgICAgICBDb25zdHJ1Y3Rvck1hcDo6aXRlcmF0b3IgaXQgPSBtX2NvbnN0cnVjdG9yTWFwLmJl
Z2luKCk7CiAgICAgICAgIGZvciAoOyBpdCAhPSBtX2NvbnN0cnVjdG9yTWFwLmVuZCgpOyArK2l0
KSB7Ci0gICAgICAgICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb24+IHdyYXBwZXIgPSBp
dC0+c2Vjb25kOworICAgICAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uPiB3cmFw
cGVyID0gaXQtPnZhbHVlOwogICAgICAgICAgICAgd3JhcHBlci5EaXNwb3NlKCk7CiAgICAgICAg
IH0KICAgICAgICAgbV9jb25zdHJ1Y3Rvck1hcC5jbGVhcigpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01NYXAuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4RE9NTWFwLmgKaW5kZXggNGRlMzU1OC4uZDc4NDgyNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01NYXAuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9WOERPTU1hcC5oCkBAIC0xMTAsNyArMTEwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICBib29sIHJlbW92ZUlmUHJlc2VudChLZXlUeXBlKiBrZXksIHY4OjpQZXJzaXN0
ZW50PFZhbHVlVHlwZT4gdmFsdWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIHR5cGVuYW1lIEhh
c2hNYXA8S2V5VHlwZSosIFZhbHVlVHlwZSo+OjppdGVyYXRvciBpdCA9IG1fbWFwLmZpbmQoa2V5
KTsKLSAgICAgICAgICAgIGlmIChpdCA9PSBtX21hcC5lbmQoKSB8fCBpdC0+c2Vjb25kICE9ICp2
YWx1ZSkKKyAgICAgICAgICAgIGlmIChpdCA9PSBtX21hcC5lbmQoKSB8fCBpdC0+dmFsdWUgIT0g
KnZhbHVlKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAgbV9t
YXAucmVtb3ZlKGl0KTsKQEAgLTEzMCw3ICsxMzAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgICAgICB2aXNpdG9yLT5zdGFydE1hcCgpOwogICAgICAgICAgICAgdHlwZW5hbWUgSGFz
aE1hcDxLZXlUeXBlKiwgVmFsdWVUeXBlKj46Oml0ZXJhdG9yIGl0ID0gbV9tYXAuYmVnaW4oKTsK
ICAgICAgICAgICAgIGZvciAoOyBpdCAhPSBtX21hcC5lbmQoKTsgKytpdCkKLSAgICAgICAgICAg
ICAgICB2aXNpdG9yLT52aXNpdERPTVdyYXBwZXIoc3RvcmUsIGl0LT5maXJzdCwgdjg6OlBlcnNp
c3RlbnQ8VmFsdWVUeXBlPihpdC0+c2Vjb25kKSk7CisgICAgICAgICAgICAgICAgdmlzaXRvci0+
dmlzaXRET01XcmFwcGVyKHN0b3JlLCBpdC0+a2V5LCB2ODo6UGVyc2lzdGVudDxWYWx1ZVR5cGU+
KGl0LT52YWx1ZSkpOwogICAgICAgICAgICAgdmlzaXRvci0+ZW5kTWFwKCk7CiAgICAgICAgIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xsZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xsZXIuY3BwCmluZGV4
IDY1MTgyYTcuLjU1ODgxYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1Y4R0NDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEdD
Q29udHJvbGxlci5jcHAKQEAgLTk4LDkgKzk4LDkgQEAgc3RhdGljIHZvaWQgZW51bWVyYXRlR2xv
YmFsSGFuZGxlcygpCiB7CiAgICAgR2xvYmFsSGFuZGxlTWFwJiBnbG9iYWxIYW5kbGVNYXAgPSBj
dXJyZW50R2xvYmFsSGFuZGxlTWFwKCk7CiAgICAgZm9yIChHbG9iYWxIYW5kbGVNYXA6Oml0ZXJh
dG9yIGl0ID0gZ2xvYmFsSGFuZGxlTWFwLmJlZ2luKCksIGVuZCA9IGdsb2JhbEhhbmRsZU1hcC5l
bmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIEdsb2JhbEhhbmRsZUluZm8qIGluZm8g
PSBpdC0+c2Vjb25kOworICAgICAgICBHbG9iYWxIYW5kbGVJbmZvKiBpbmZvID0gaXQtPnZhbHVl
OwogICAgICAgICBVTlVTRURfUEFSQU0oaW5mbyk7Ci0gICAgICAgIHY4OjpWYWx1ZSogaGFuZGxl
ID0gaXQtPmZpcnN0OworICAgICAgICB2ODo6VmFsdWUqIGhhbmRsZSA9IGl0LT5rZXk7CiAgICAg
ICAgIFVOVVNFRF9QQVJBTShoYW5kbGUpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhQcm94eS5jcHAKaW5kZXggMDgxZjc1Zi4uNjQ5MzNmMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhQcm94eS5jcHAKQEAgLTIzMCw3ICsyMzAsNyBAQCB2ODo6TG9jYWw8djg6OkFy
cmF5PiBWOFByb3h5OjpldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZChpbnQgd29ybGRJRCwgY29uc3Qg
VmVjdG9yPAogICAgIGlmICh3b3JsZElEID4gMCkgewogICAgICAgICBJc29sYXRlZFdvcmxkTWFw
OjppdGVyYXRvciBpdGVyID0gbV9pc29sYXRlZFdvcmxkcy5maW5kKHdvcmxkSUQpOwogICAgICAg
ICBpZiAoaXRlciAhPSBtX2lzb2xhdGVkV29ybGRzLmVuZCgpKSB7Ci0gICAgICAgICAgICBpc29s
YXRlZENvbnRleHQgPSBpdGVyLT5zZWNvbmQ7CisgICAgICAgICAgICBpc29sYXRlZENvbnRleHQg
PSBpdGVyLT52YWx1ZTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlzb2xhdGVkQ29u
dGV4dCA9IG5ldyBWOElzb2xhdGVkQ29udGV4dCh0aGlzLCBleHRlbnNpb25Hcm91cCwgd29ybGRJ
RCk7CiAgICAgICAgICAgICBpZiAoaXNvbGF0ZWRDb250ZXh0LT5jb250ZXh0KCkuSXNFbXB0eSgp
KSB7CkBAIC0yNDQsNyArMjQ0LDcgQEAgdjg6OkxvY2FsPHY4OjpBcnJheT4gVjhQcm94eTo6ZXZh
bHVhdGVJbklzb2xhdGVkV29ybGQoaW50IHdvcmxkSUQsIGNvbnN0IFZlY3RvcjwKIAogICAgICAg
ICBJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW5NYXA6Oml0ZXJhdG9yIHNlY3VyaXR5T3JpZ2lu
SXRlciA9IG1faXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2lucy5maW5kKHdvcmxkSUQpOwogICAg
ICAgICBpZiAoc2VjdXJpdHlPcmlnaW5JdGVyICE9IG1faXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3Jp
Z2lucy5lbmQoKSkKLSAgICAgICAgICAgIGlzb2xhdGVkQ29udGV4dC0+c2V0U2VjdXJpdHlPcmln
aW4oc2VjdXJpdHlPcmlnaW5JdGVyLT5zZWNvbmQpOworICAgICAgICAgICAgaXNvbGF0ZWRDb250
ZXh0LT5zZXRTZWN1cml0eU9yaWdpbihzZWN1cml0eU9yaWdpbkl0ZXItPnZhbHVlKTsKICAgICB9
IGVsc2UgewogICAgICAgICBpc29sYXRlZENvbnRleHQgPSBuZXcgVjhJc29sYXRlZENvbnRleHQo
dGhpcywgZXh0ZW5zaW9uR3JvdXAsIHdvcmxkSUQpOwogICAgICAgICBpZiAoaXNvbGF0ZWRDb250
ZXh0LT5jb250ZXh0KCkuSXNFbXB0eSgpKSB7CkBAIC0yNzcsNyArMjc3LDcgQEAgdm9pZCBWOFBy
b3h5OjpzZXRJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4oaW50IHdvcmxkSUQsIFBhc3NSZWZQ
dHI8U2VjdXJpdHlPcmkKICAgICBtX2lzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbnMuc2V0KHdv
cmxkSUQsIHNlY3VyaXR5T3JpZ2luKTsKICAgICBJc29sYXRlZFdvcmxkTWFwOjppdGVyYXRvciBp
dGVyID0gbV9pc29sYXRlZFdvcmxkcy5maW5kKHdvcmxkSUQpOwogICAgIGlmIChpdGVyICE9IG1f
aXNvbGF0ZWRXb3JsZHMuZW5kKCkpCi0gICAgICAgIGl0ZXItPnNlY29uZC0+c2V0U2VjdXJpdHlP
cmlnaW4oc2VjdXJpdHlPcmlnaW4pOworICAgICAgICBpdGVyLT52YWx1ZS0+c2V0U2VjdXJpdHlP
cmlnaW4oc2VjdXJpdHlPcmlnaW4pOwogfQogCiBQYXNzT3duUHRyPHY4OjpTY3JpcHREYXRhPiBW
OFByb3h5OjpwcmVjb21waWxlU2NyaXB0KHY4OjpIYW5kbGU8djg6OlN0cmluZz4gY29kZSwgQ2Fj
aGVkU2NyaXB0KiBjYWNoZWRTY3JpcHQpCkBAIC01NTMsNyArNTUzLDcgQEAgdm9pZCBWOFByb3h5
OjpyZXNldElzb2xhdGVkV29ybGRzKCkKIHsKICAgICBmb3IgKElzb2xhdGVkV29ybGRNYXA6Oml0
ZXJhdG9yIGl0ZXIgPSBtX2lzb2xhdGVkV29ybGRzLmJlZ2luKCk7CiAgICAgICAgICBpdGVyICE9
IG1faXNvbGF0ZWRXb3JsZHMuZW5kKCk7ICsraXRlcikgewotICAgICAgICBpdGVyLT5zZWNvbmQt
PmRlc3Ryb3koKTsKKyAgICAgICAgaXRlci0+dmFsdWUtPmRlc3Ryb3koKTsKICAgICB9CiAgICAg
bV9pc29sYXRlZFdvcmxkcy5jbGVhcigpOwogICAgIG1faXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3Jp
Z2lucy5jbGVhcigpOwpAQCAtNjk2LDcgKzY5Niw3IEBAIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4g
VjhQcm94eTo6aXNvbGF0ZWRXb3JsZENvbnRleHQoaW50IHdvcmxkSWQpCiAgICAgSXNvbGF0ZWRX
b3JsZE1hcDo6aXRlcmF0b3IgaXRlciA9IG1faXNvbGF0ZWRXb3JsZHMuZmluZCh3b3JsZElkKTsK
ICAgICBpZiAoaXRlciA9PSBtX2lzb2xhdGVkV29ybGRzLmVuZCgpKQogICAgICAgICByZXR1cm4g
djg6OkxvY2FsPHY4OjpDb250ZXh0PigpOwotICAgIHJldHVybiB2ODo6TG9jYWw8djg6OkNvbnRl
eHQ+OjpOZXcoaXRlci0+c2Vjb25kLT5jb250ZXh0KCkpOworICAgIHJldHVybiB2ODo6TG9jYWw8
djg6OkNvbnRleHQ+OjpOZXcoaXRlci0+dmFsdWUtPmNvbnRleHQoKSk7CiB9CiAKIGJvb2wgVjhQ
cm94eTo6bWF0Y2hlc0N1cnJlbnRDb250ZXh0KCkKQEAgLTc5OSw3ICs3OTksNyBAQCB2b2lkIFY4
UHJveHk6OmNvbGxlY3RJc29sYXRlZENvbnRleHRzKFZlY3RvcjxzdGQ6OnBhaXI8U2NyaXB0U3Rh
dGUqLCBTZWN1cml0eU9yaQogewogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAg
ICBmb3IgKElzb2xhdGVkV29ybGRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pc29sYXRlZFdvcmxkcy5i
ZWdpbigpOyBpdCAhPSBtX2lzb2xhdGVkV29ybGRzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIFY4
SXNvbGF0ZWRDb250ZXh0KiBpc29sYXRlZENvbnRleHQgPSBpdC0+c2Vjb25kOworICAgICAgICBW
OElzb2xhdGVkQ29udGV4dCogaXNvbGF0ZWRDb250ZXh0ID0gaXQtPnZhbHVlOwogICAgICAgICBp
ZiAoIWlzb2xhdGVkQ29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiB2OENvbnRleHQgPSBpc29sYXRl
ZENvbnRleHQtPmNvbnRleHQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L25wcnVudGltZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ucHJ1bnRpbWUu
Y3BwCmluZGV4IDhkODBjZjkuLjJiMDM2N2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L25wcnVudGltZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
bnBydW50aW1lLmNwcApAQCAtMTY0LDcgKzE2NCw3IEBAIE5QSWRlbnRpZmllciBfTlBOX0dldFN0
cmluZ0lkZW50aWZpZXIoY29uc3QgTlBVVEY4KiBuYW1lKQogICAgICAgICBTdHJpbmdJZGVudGlm
aWVyTWFwKiBpZGVudE1hcCA9IGdldFN0cmluZ0lkZW50aWZpZXJNYXAoKTsKICAgICAgICAgU3Ry
aW5nSWRlbnRpZmllck1hcDo6aXRlcmF0b3IgaXRlciA9IGlkZW50TWFwLT5maW5kKGtleSk7CiAg
ICAgICAgIGlmIChpdGVyICE9IGlkZW50TWFwLT5lbmQoKSkKLSAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxOUElkZW50aWZpZXI+KGl0ZXItPnNlY29uZCk7CisgICAgICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8TlBJZGVudGlmaWVyPihpdGVyLT52YWx1ZSk7CiAKICAgICAgICAgc2l6
ZV90IG5hbWVMZW4gPSBrZXkubV9sZW5ndGg7CiAKQEAgLTIxMSw3ICsyMTEsNyBAQCBOUElkZW50
aWZpZXIgX05QTl9HZXRJbnRJZGVudGlmaWVyKGludDMyX3QgaW50SWQpCiAgICAgSW50SWRlbnRp
Zmllck1hcCogaWRlbnRNYXAgPSBnZXRJbnRJZGVudGlmaWVyTWFwKCk7CiAgICAgSW50SWRlbnRp
Zmllck1hcDo6aXRlcmF0b3IgaXRlciA9IGlkZW50TWFwLT5maW5kKGludElkKTsKICAgICBpZiAo
aXRlciAhPSBpZGVudE1hcC0+ZW5kKCkpCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxOUElk
ZW50aWZpZXI+KGl0ZXItPnNlY29uZCk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxOUElk
ZW50aWZpZXI+KGl0ZXItPnZhbHVlKTsKIAogICAgIC8vIFdlIG5ldmVyIHJlbGVhc2UgaWRlbnRp
ZmllcnMsIHNvIHRoaXMgZGljdGlvbmFyeSB3aWxsIGdyb3cuCiAgICAgUHJpdmF0ZUlkZW50aWZp
ZXIqIGlkZW50aWZpZXIgPSByZWludGVycHJldF9jYXN0PFByaXZhdGVJZGVudGlmaWVyKj4obWFs
bG9jKHNpemVvZihQcml2YXRlSWRlbnRpZmllcikpKTsKQEAgLTM4OCw3ICszODgsNyBAQCB2b2lk
IF9OUE5fUmVnaXN0ZXJPYmplY3QoTlBPYmplY3QqIG5wT2JqZWN0LCBOUE9iamVjdCogb3duZXIp
CiAgICAgICAgIE5QT2JqZWN0TWFwOjppdGVyYXRvciBvd25lckVudHJ5ID0gbGl2ZU9iamVjdE1h
cCgpLmZpbmQob3duZXIpOwogICAgICAgICBOUE9iamVjdCogcGFyZW50ID0gMDsKICAgICAgICAg
aWYgKGxpdmVPYmplY3RNYXAoKS5lbmQoKSAhPSBvd25lckVudHJ5KQotICAgICAgICAgICAgcGFy
ZW50ID0gb3duZXJFbnRyeS0+c2Vjb25kOworICAgICAgICAgICAgcGFyZW50ID0gb3duZXJFbnRy
eS0+dmFsdWU7CiAKICAgICAgICAgaWYgKHBhcmVudCkKICAgICAgICAgICAgIG93bmVyID0gcGFy
ZW50OwpAQCAtNDA4LDcgKzQwOCw3IEBAIHZvaWQgX05QTl9VbnJlZ2lzdGVyT2JqZWN0KE5QT2Jq
ZWN0KiBucE9iamVjdCkKIAogICAgIE5QT2JqZWN0KiBvd25lciA9IDA7CiAgICAgaWYgKGxpdmVP
YmplY3RNYXAoKS5maW5kKG5wT2JqZWN0KSAhPSBsaXZlT2JqZWN0TWFwKCkuZW5kKCkpCi0gICAg
ICAgIG93bmVyID0gbGl2ZU9iamVjdE1hcCgpLmZpbmQobnBPYmplY3QpLT5zZWNvbmQ7CisgICAg
ICAgIG93bmVyID0gbGl2ZU9iamVjdE1hcCgpLmZpbmQobnBPYmplY3QpLT52YWx1ZTsKIAogICAg
IGlmICghb3duZXIpIHsKICAgICAgICAgLy8gVW5yZWdpc3RlcmluZyBhIG93bmVyIG9iamVjdDsg
YWxzbyB1bnJlZ2lzdGVyIGl0J3MgZGVzY2VuZGFudHMuCkBAIC00NDMsNyArNDQzLDcgQEAgdm9p
ZCBfTlBOX1VucmVnaXN0ZXJPYmplY3QoTlBPYmplY3QqIG5wT2JqZWN0KQogICAgIH0gZWxzZSB7
CiAgICAgICAgIE5QUm9vdE9iamVjdE1hcDo6aXRlcmF0b3Igb3duZXJFbnRyeSA9IHJvb3RPYmpl
Y3RNYXAoKS5maW5kKG93bmVyKTsKICAgICAgICAgaWYgKG93bmVyRW50cnkgIT0gcm9vdE9iamVj
dE1hcCgpLmVuZCgpKSB7Ci0gICAgICAgICAgICBOUE9iamVjdFNldCogbGlzdCA9IG93bmVyRW50
cnktPnNlY29uZDsKKyAgICAgICAgICAgIE5QT2JqZWN0U2V0KiBsaXN0ID0gb3duZXJFbnRyeS0+
dmFsdWU7CiAgICAgICAgICAgICBBU1NFUlQobGlzdC0+ZmluZChucE9iamVjdCkgIT0gbGlzdC0+
ZW5kKCkpOwogICAgICAgICAgICAgbGlzdC0+cmVtb3ZlKG5wT2JqZWN0KTsKICAgICAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL0lkZW50aWZpZXJSZXAuY3BwIGIvU291
cmNlL1dlYkNvcmUvYnJpZGdlL0lkZW50aWZpZXJSZXAuY3BwCmluZGV4IDJhY2YxNDEuLjFkZjU4
YTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9JZGVudGlmaWVyUmVwLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvSWRlbnRpZmllclJlcC5jcHAKQEAgLTY5LDEzICs2
OSwxMyBAQCBJZGVudGlmaWVyUmVwKiBJZGVudGlmaWVyUmVwOjpnZXQoaW50IGludElEKQogICAg
IAogICAgIEludElkZW50aWZpZXJNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBpbnRJZGVudGlmaWVy
TWFwKCkuYWRkKGludElELCAwKTsKICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAg
ICAgQVNTRVJUKCFyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7Ci0gICAgICAgIHJlc3VsdC5pdGVy
YXRvci0+c2Vjb25kID0gbmV3IElkZW50aWZpZXJSZXAoaW50SUQpOworICAgICAgICBBU1NFUlQo
IXJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVl
ID0gbmV3IElkZW50aWZpZXJSZXAoaW50SUQpOwogICAgICAgICAKLSAgICAgICAgaWRlbnRpZmll
clNldCgpLmFkZChyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7CisgICAgICAgIGlkZW50aWZpZXJT
ZXQoKS5hZGQocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CiAgICAgfQogICAgIAotICAgIHJldHVy
biByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZTsKIH0KIAogdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxTdHJpbmdJbXBsPiwgSWRlbnRpZmll
clJlcCo+IFN0cmluZ0lkZW50aWZpZXJNYXA7CkBAIC05NSwxMyArOTUsMTMgQEAgSWRlbnRpZmll
clJlcCogSWRlbnRpZmllclJlcDo6Z2V0KGNvbnN0IGNoYXIqIG5hbWUpCiAgICAgVVN0cmluZyBz
dHJpbmcgPSBzdHJpbmdUb1VTdHJpbmcoU3RyaW5nOjpmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFj
ayhuYW1lLCBzdHJsZW4obmFtZSkpKTsKICAgICBTdHJpbmdJZGVudGlmaWVyTWFwOjpBZGRSZXN1
bHQgcmVzdWx0ID0gc3RyaW5nSWRlbnRpZmllck1hcCgpLmFkZChzdHJpbmcuaW1wbCgpLCAwKTsK
ICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgQVNTRVJUKCFyZXN1bHQuaXRl
cmF0b3ItPnNlY29uZCk7Ci0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gbmV3IElk
ZW50aWZpZXJSZXAobmFtZSk7CisgICAgICAgIEFTU0VSVCghcmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZSk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBuZXcgSWRlbnRpZmllclJlcChu
YW1lKTsKICAgICAgICAgCi0gICAgICAgIGlkZW50aWZpZXJTZXQoKS5hZGQocmVzdWx0Lml0ZXJh
dG9yLT5zZWNvbmQpOworICAgICAgICBpZGVudGlmaWVyU2V0KCkuYWRkKHJlc3VsdC5pdGVyYXRv
ci0+dmFsdWUpOwogICAgIH0KICAgICAKLSAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT5zZWNv
bmQ7CisgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiB9CiAKIGJvb2wgSWRlbnRp
ZmllclJlcDo6aXNWYWxpZChJZGVudGlmaWVyUmVwKiBpZGVudGlmaWVyKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYnJpZGdlL05QX2pzb2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jy
aWRnZS9OUF9qc29iamVjdC5jcHAKaW5kZXggNjFlMzY3OS4uNjJlYmQyMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYnJpZGdlL05QX2pzb2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9icmlkZ2UvTlBfanNvYmplY3QuY3BwCkBAIC02NSw4ICs2NSw4IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIGl0ZXIgPSBtX21hcC5hZGQocm9vdE9iamVjdCwgSlNUb05QT2JqZWN0TWFwKCkpLml0
ZXJhdG9yOwogICAgICAgICB9CiAKLSAgICAgICAgQVNTRVJUKGl0ZXItPnNlY29uZC5maW5kKGpz
T2JqZWN0KSA9PSBpdGVyLT5zZWNvbmQuZW5kKCkpOwotICAgICAgICBpdGVyLT5zZWNvbmQuYWRk
KGpzT2JqZWN0LCBucE9iamVjdCk7CisgICAgICAgIEFTU0VSVChpdGVyLT52YWx1ZS5maW5kKGpz
T2JqZWN0KSA9PSBpdGVyLT52YWx1ZS5lbmQoKSk7CisgICAgICAgIGl0ZXItPnZhbHVlLmFkZChq
c09iamVjdCwgbnBPYmplY3QpOwogICAgIH0KIAogICAgIHZvaWQgcmVtb3ZlKFJvb3RPYmplY3Qq
IHJvb3RPYmplY3QpCkBAIC04MCw5ICs4MCw5IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIEhh
c2hNYXA8Um9vdE9iamVjdCosIEpTVG9OUE9iamVjdE1hcD46Oml0ZXJhdG9yIGl0ZXIgPSBtX21h
cC5maW5kKHJvb3RPYmplY3QpOwogICAgICAgICBBU1NFUlQoaXRlciAhPSBtX21hcC5lbmQoKSk7
Ci0gICAgICAgIEFTU0VSVChpdGVyLT5zZWNvbmQuZmluZChqc09iamVjdCkgIT0gaXRlci0+c2Vj
b25kLmVuZCgpKTsKKyAgICAgICAgQVNTRVJUKGl0ZXItPnZhbHVlLmZpbmQoanNPYmplY3QpICE9
IGl0ZXItPnZhbHVlLmVuZCgpKTsKIAotICAgICAgICBpdGVyLT5zZWNvbmQucmVtb3ZlKGpzT2Jq
ZWN0KTsKKyAgICAgICAgaXRlci0+dmFsdWUucmVtb3ZlKGpzT2JqZWN0KTsKICAgICB9CiAKIHBy
aXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhQ2xh
c3NKU0MuY3BwIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YUNsYXNzSlNDLmNw
cAppbmRleCBhZWI0MDIwLi5hNjA4MDFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9icmlk
Z2Uvam5pL2pzYy9KYXZhQ2xhc3NKU0MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9q
bmkvanNjL0phdmFDbGFzc0pTQy5jcHAKQEAgLTEwNyw3ICsxMDcsNyBAQCBKYXZhQ2xhc3M6On5K
YXZhQ2xhc3MoKQogCiAgICAgTWV0aG9kTGlzdE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9t
ZXRob2RzLmVuZCgpOwogICAgIGZvciAoTWV0aG9kTGlzdE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtX21ldGhvZHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IE1l
dGhvZExpc3QqIG1ldGhvZExpc3QgPSBpdC0+c2Vjb25kOworICAgICAgICBjb25zdCBNZXRob2RM
aXN0KiBtZXRob2RMaXN0ID0gaXQtPnZhbHVlOwogICAgICAgICBkZWxldGVBbGxWYWx1ZXMoKm1l
dGhvZExpc3QpOwogICAgICAgICBkZWxldGUgbWV0aG9kTGlzdDsKICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9yb290LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JyaWRnZS9ydW50aW1lX3Jvb3QuY3BwCmluZGV4IDliNjIyNGEuLjc0ZDgzMTkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX3Jvb3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JyaWRnZS9ydW50aW1lX3Jvb3QuY3BwCkBAIC0xMDUsNyArMTA1LDcgQEAgdm9pZCBS
b290T2JqZWN0OjppbnZhbGlkYXRlKCkKICAgICB7CiAgICAgICAgIEhhc2hNYXA8UnVudGltZU9i
amVjdCosIEpTQzo6V2VhazxSdW50aW1lT2JqZWN0PiA+OjppdGVyYXRvciBlbmQgPSBtX3J1bnRp
bWVPYmplY3RzLmVuZCgpOwogICAgICAgICBmb3IgKEhhc2hNYXA8UnVudGltZU9iamVjdCosIEpT
Qzo6V2VhazxSdW50aW1lT2JqZWN0PiA+OjppdGVyYXRvciBpdCA9IG1fcnVudGltZU9iamVjdHMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBSdW50aW1lT2JqZWN0KiBy
dW50aW1lT2JqZWN0ID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgIFJ1bnRpbWVPYmpl
Y3QqIHJ1bnRpbWVPYmplY3QgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoIXJ1
bnRpbWVPYmplY3QpIC8vIFNraXAgem9tYmllcy4KICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIHJ1bnRpbWVPYmplY3QtPmludmFsaWRhdGUoKTsKQEAgLTEyOSw3ICsxMjks
NyBAQCB2b2lkIFJvb3RPYmplY3Q6OmludmFsaWRhdGUoKQogCiAgICAgUHJvdGVjdENvdW50U2V0
OjppdGVyYXRvciBlbmQgPSBtX3Byb3RlY3RDb3VudFNldC5lbmQoKTsKICAgICBmb3IgKFByb3Rl
Y3RDb3VudFNldDo6aXRlcmF0b3IgaXQgPSBtX3Byb3RlY3RDb3VudFNldC5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCi0gICAgICAgIEpTQzo6Z2NVbnByb3RlY3QoaXQtPmZpcnN0KTsKKyAgICAg
ICAgSlNDOjpnY1VucHJvdGVjdChpdC0+a2V5KTsKICAgICBtX3Byb3RlY3RDb3VudFNldC5jbGVh
cigpOwogCiAgICAgcm9vdE9iamVjdFNldCgpLT5yZW1vdmUodGhpcyk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FudmFzVmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0NhbnZhc1ZhbHVlLmNwcAppbmRleCA3ODNjZWVmLi45YTk1NTQwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FudmFzVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NDYW52YXNWYWx1ZS5jcHAKQEAgLTQ5LDE0ICs0OSwxNCBAQCB2b2lkIENTU0NhbnZh
c1ZhbHVlOjpjYW52YXNDaGFuZ2VkKEhUTUxDYW52YXNFbGVtZW50KiwgY29uc3QgRmxvYXRSZWN0
JiBjaGFuZ2VkUgogICAgIEludFJlY3QgaW1hZ2VDaGFuZ2VSZWN0ID0gZW5jbG9zaW5nSW50UmVj
dChjaGFuZ2VkUmVjdCk7CiAgICAgUmVuZGVyT2JqZWN0U2l6ZUNvdW50TWFwOjpjb25zdF9pdGVy
YXRvciBlbmQgPSBjbGllbnRzKCkuZW5kKCk7CiAgICAgZm9yIChSZW5kZXJPYmplY3RTaXplQ291
bnRNYXA6OmNvbnN0X2l0ZXJhdG9yIGN1cnIgPSBjbGllbnRzKCkuYmVnaW4oKTsgY3VyciAhPSBl
bmQ7ICsrY3VycikKLSAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJPYmplY3QqPihjdXJyLT5maXJz
dCktPmltYWdlQ2hhbmdlZChzdGF0aWNfY2FzdDxXcmFwcGVkSW1hZ2VQdHI+KHRoaXMpLCAmaW1h
Z2VDaGFuZ2VSZWN0KTsKKyAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJPYmplY3QqPihjdXJyLT5r
ZXkpLT5pbWFnZUNoYW5nZWQoc3RhdGljX2Nhc3Q8V3JhcHBlZEltYWdlUHRyPih0aGlzKSwgJmlt
YWdlQ2hhbmdlUmVjdCk7CiB9CiAKIHZvaWQgQ1NTQ2FudmFzVmFsdWU6OmNhbnZhc1Jlc2l6ZWQo
SFRNTENhbnZhc0VsZW1lbnQqKQogewogICAgIFJlbmRlck9iamVjdFNpemVDb3VudE1hcDo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gY2xpZW50cygpLmVuZCgpOwogICAgIGZvciAoUmVuZGVyT2JqZWN0
U2l6ZUNvdW50TWFwOjpjb25zdF9pdGVyYXRvciBjdXJyID0gY2xpZW50cygpLmJlZ2luKCk7IGN1
cnIgIT0gZW5kOyArK2N1cnIpCi0gICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyT2JqZWN0Kj4oY3Vy
ci0+Zmlyc3QpLT5pbWFnZUNoYW5nZWQoc3RhdGljX2Nhc3Q8V3JhcHBlZEltYWdlUHRyPih0aGlz
KSk7CisgICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyT2JqZWN0Kj4oY3Vyci0+a2V5KS0+aW1hZ2VD
aGFuZ2VkKHN0YXRpY19jYXN0PFdyYXBwZWRJbWFnZVB0cj4odGhpcykpOwogfQogCiB2b2lkIENT
U0NhbnZhc1ZhbHVlOjpjYW52YXNEZXN0cm95ZWQoSFRNTENhbnZhc0VsZW1lbnQqIGVsZW1lbnQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0
aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24u
Y3BwCmluZGV4IGFlMjQ4ZWQuLmU0OWViNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCkBAIC0xMjUzLDggKzEyNTMsOCBAQCBz
dGF0aWMgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gY291bnRlclRvQ1NTVmFsdWUoY29uc3QgUmVuZGVy
U3R5bGUqIHN0eWxlLCBDU1NQcm9wZQogCiAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdCA9
IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKICAgICBmb3IgKENvdW50ZXJE
aXJlY3RpdmVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBtYXAt
PmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVh
dGVWYWx1ZShpdC0+Zmlyc3QuZ2V0KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKSk7
Ci0gICAgICAgIHNob3J0IG51bWJlciA9IHByb3BlcnR5SUQgPT0gQ1NTUHJvcGVydHlDb3VudGVy
SW5jcmVtZW50ID8gaXQtPnNlY29uZC5tX2luY3JlbWVudFZhbHVlIDogaXQtPnNlY29uZC5tX3Jl
c2V0VmFsdWU7CisgICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1
ZShpdC0+a2V5LmdldCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORykpOworICAgICAg
ICBzaG9ydCBudW1iZXIgPSBwcm9wZXJ0eUlEID09IENTU1Byb3BlcnR5Q291bnRlckluY3JlbWVu
dCA/IGl0LT52YWx1ZS5tX2luY3JlbWVudFZhbHVlIDogaXQtPnZhbHVlLm1fcmVzZXRWYWx1ZTsK
ICAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKChkb3VibGUp
bnVtYmVyLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOwogICAgIH0KICAgICByZXR1
cm4gbGlzdC5yZWxlYXNlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Jv
c3NmYWRlVmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Nyb3NzZmFkZVZhbHVlLmNw
cAppbmRleCA0ZmYwOGFmLi5kYzQ5NDMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTQ3Jvc3NmYWRlVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDcm9zc2Zh
ZGVWYWx1ZS5jcHAKQEAgLTE2MSw3ICsxNjEsNyBAQCB2b2lkIENTU0Nyb3NzZmFkZVZhbHVlOjpj
cm9zc2ZhZGVDaGFuZ2VkKGNvbnN0IEludFJlY3QmKQogewogICAgIFJlbmRlck9iamVjdFNpemVD
b3VudE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY2xpZW50cygpLmVuZCgpOwogICAgIGZvciAo
UmVuZGVyT2JqZWN0U2l6ZUNvdW50TWFwOjpjb25zdF9pdGVyYXRvciBjdXJyID0gY2xpZW50cygp
LmJlZ2luKCk7IGN1cnIgIT0gZW5kOyArK2N1cnIpIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiBj
bGllbnQgPSBjb25zdF9jYXN0PFJlbmRlck9iamVjdCo+KGN1cnItPmZpcnN0KTsKKyAgICAgICAg
UmVuZGVyT2JqZWN0KiBjbGllbnQgPSBjb25zdF9jYXN0PFJlbmRlck9iamVjdCo+KGN1cnItPmtl
eSk7CiAgICAgICAgIGNsaWVudC0+aW1hZ2VDaGFuZ2VkKHN0YXRpY19jYXN0PFdyYXBwZWRJbWFn
ZVB0cj4odGhpcykpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NGb250RmFjZVNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3Vy
Y2UuY3BwCmluZGV4IGRkOTA0ZDMuLmNlNDUzNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NGb250RmFjZVNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Zv
bnRGYWNlU291cmNlLmNwcApAQCAtMTE0LDcgKzExNCw3IEBAIFNpbXBsZUZvbnREYXRhKiBDU1NG
b250RmFjZVNvdXJjZTo6Z2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVz
Y3JpCiAgICAgdW5zaWduZWQgaGFzaEtleSA9IChmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhl
bFNpemUoKSArIDEpIDw8IDYgfCBmb250RGVzY3JpcHRpb24ud2lkdGhWYXJpYW50KCkgPDwgNAog
ICAgICAgICAgICAgICAgICAgICAgICB8IChmb250RGVzY3JpcHRpb24udGV4dE9yaWVudGF0aW9u
KCkgPT0gVGV4dE9yaWVudGF0aW9uVXByaWdodCA/IDggOiAwKSB8IChmb250RGVzY3JpcHRpb24u
b3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCA/IDQgOiAwKSB8IChzeW50aGV0aWNCb2xkID8gMiA6
IDApIHwgKHN5bnRoZXRpY0l0YWxpYyA/IDEgOiAwKTsKIAotICAgIFNpbXBsZUZvbnREYXRhKiYg
Y2FjaGVkRGF0YSA9IG1fZm9udERhdGFUYWJsZS5hZGQoaGFzaEtleSwgMCkuaXRlcmF0b3ItPnNl
Y29uZDsKKyAgICBTaW1wbGVGb250RGF0YSomIGNhY2hlZERhdGEgPSBtX2ZvbnREYXRhVGFibGUu
YWRkKGhhc2hLZXksIDApLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoY2FjaGVkRGF0YSkKICAg
ICAgICAgcmV0dXJuIGNhY2hlZERhdGE7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NGb250U2VsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rv
ci5jcHAKaW5kZXggMGE5YTNhMC4uZjM4M2ZiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRT
ZWxlY3Rvci5jcHAKQEAgLTI4NSw3ICsyODUsNyBAQCB2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6YWRk
Rm9udEZhY2VSdWxlKGNvbnN0IFN0eWxlUnVsZUZvbnRGYWNlKiBmb250RmFjZVJ1bGUpCiAgICAg
ICAgIGlmIChmYW1pbHlOYW1lLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0g
ICAgICAgIE93blB0cjxWZWN0b3I8UmVmUHRyPENTU0ZvbnRGYWNlPiA+ID4mIGZhbWlseUZvbnRG
YWNlcyA9IG1fZm9udEZhY2VzLmFkZChmYW1pbHlOYW1lLCBudWxscHRyKS5pdGVyYXRvci0+c2Vj
b25kOworICAgICAgICBPd25QdHI8VmVjdG9yPFJlZlB0cjxDU1NGb250RmFjZT4gPiA+JiBmYW1p
bHlGb250RmFjZXMgPSBtX2ZvbnRGYWNlcy5hZGQoZmFtaWx5TmFtZSwgbnVsbHB0cikuaXRlcmF0
b3ItPnZhbHVlOwogICAgICAgICBpZiAoIWZhbWlseUZvbnRGYWNlcykgewogICAgICAgICAgICAg
ZmFtaWx5Rm9udEZhY2VzID0gYWRvcHRQdHIobmV3IFZlY3RvcjxSZWZQdHI8Q1NTRm9udEZhY2U+
ID4pOwogCkBAIC00ODcsMTMgKzQ4NywxMyBAQCBGb250RGF0YSogQ1NTRm9udFNlbGVjdG9yOjpn
ZXRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgYwogICAg
ICAgICByZXR1cm4gZm9udERhdGFGb3JHZW5lcmljRmFtaWx5KG1fZG9jdW1lbnQsIGZvbnREZXNj
cmlwdGlvbiwgZmFtaWx5TmFtZSk7CiAgICAgfQogCi0gICAgT3duUHRyPEhhc2hNYXA8dW5zaWdu
ZWQsIFJlZlB0cjxDU1NTZWdtZW50ZWRGb250RmFjZT4gPiA+JiBzZWdtZW50ZWRGb250RmFjZUNh
Y2hlID0gbV9mb250cy5hZGQoZmFtaWx5LCBudWxscHRyKS5pdGVyYXRvci0+c2Vjb25kOworICAg
IE93blB0cjxIYXNoTWFwPHVuc2lnbmVkLCBSZWZQdHI8Q1NTU2VnbWVudGVkRm9udEZhY2U+ID4g
PiYgc2VnbWVudGVkRm9udEZhY2VDYWNoZSA9IG1fZm9udHMuYWRkKGZhbWlseSwgbnVsbHB0ciku
aXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghc2VnbWVudGVkRm9udEZhY2VDYWNoZSkKICAgICAg
ICAgc2VnbWVudGVkRm9udEZhY2VDYWNoZSA9IGFkb3B0UHRyKG5ldyBIYXNoTWFwPHVuc2lnbmVk
LCBSZWZQdHI8Q1NTU2VnbWVudGVkRm9udEZhY2U+ID4pOwogCiAgICAgRm9udFRyYWl0c01hc2sg
dHJhaXRzTWFzayA9IGZvbnREZXNjcmlwdGlvbi50cmFpdHNNYXNrKCk7CiAKLSAgICBSZWZQdHI8
Q1NTU2VnbWVudGVkRm9udEZhY2U+JiBmYWNlID0gc2VnbWVudGVkRm9udEZhY2VDYWNoZS0+YWRk
KHRyYWl0c01hc2ssIDApLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgUmVmUHRyPENTU1NlZ21lbnRl
ZEZvbnRGYWNlPiYgZmFjZSA9IHNlZ21lbnRlZEZvbnRGYWNlQ2FjaGUtPmFkZCh0cmFpdHNNYXNr
LCAwKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCFmYWNlKSB7CiAgICAgICAgIGZhY2UgPSBD
U1NTZWdtZW50ZWRGb250RmFjZTo6Y3JlYXRlKHRoaXMpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5jcHAKaW5kZXggOWJlNDQ2Yi4uYTM0MWUyZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZUdlbmVyYXRvclZhbHVlLmNwcApAQCAtNTYs
NyArNTYsNyBAQCB2b2lkIENTU0ltYWdlR2VuZXJhdG9yVmFsdWU6OmFkZENsaWVudChSZW5kZXJP
YmplY3QqIHJlbmRlcmVyLCBjb25zdCBJbnRTaXplJiBzaQogICAgIGlmIChpdCA9PSBtX2NsaWVu
dHMuZW5kKCkpCiAgICAgICAgIG1fY2xpZW50cy5hZGQocmVuZGVyZXIsIFNpemVBbmRDb3VudChz
aXplLCAxKSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIFNpemVBbmRDb3VudCYgc2l6ZUNvdW50ID0g
aXQtPnNlY29uZDsKKyAgICAgICAgU2l6ZUFuZENvdW50JiBzaXplQ291bnQgPSBpdC0+dmFsdWU7
CiAgICAgICAgICsrc2l6ZUNvdW50LmNvdW50OwogICAgIH0KIH0KQEAgLTY4LDcgKzY4LDcgQEAg
dm9pZCBDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjpyZW1vdmVDbGllbnQoUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlcikKICAgICBBU1NFUlQoaXQgIT0gbV9jbGllbnRzLmVuZCgpKTsKIAogICAgIEludFNp
emUgcmVtb3ZlZEltYWdlU2l6ZTsKLSAgICBTaXplQW5kQ291bnQmIHNpemVDb3VudCA9IGl0LT5z
ZWNvbmQ7CisgICAgU2l6ZUFuZENvdW50JiBzaXplQ291bnQgPSBpdC0+dmFsdWU7CiAgICAgSW50
U2l6ZSBzaXplID0gc2l6ZUNvdW50LnNpemU7CiAgICAgaWYgKCFzaXplLmlzRW1wdHkoKSkgewog
ICAgICAgICBtX3NpemVzLnJlbW92ZShzaXplKTsKQEAgLTg2LDcgKzg2LDcgQEAgSW1hZ2UqIENT
U0ltYWdlR2VuZXJhdG9yVmFsdWU6OmdldEltYWdlKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNv
bnN0IEludFNpemUmIHMKIHsKICAgICBSZW5kZXJPYmplY3RTaXplQ291bnRNYXA6Oml0ZXJhdG9y
IGl0ID0gbV9jbGllbnRzLmZpbmQocmVuZGVyZXIpOwogICAgIGlmIChpdCAhPSBtX2NsaWVudHMu
ZW5kKCkpIHsKLSAgICAgICAgU2l6ZUFuZENvdW50JiBzaXplQ291bnQgPSBpdC0+c2Vjb25kOwor
ICAgICAgICBTaXplQW5kQ291bnQmIHNpemVDb3VudCA9IGl0LT52YWx1ZTsKICAgICAgICAgSW50
U2l6ZSBvbGRTaXplID0gc2l6ZUNvdW50LnNpemU7CiAgICAgICAgIGlmIChvbGRTaXplICE9IHNp
emUpIHsKICAgICAgICAgICAgIFJlZlB0cjxDU1NJbWFnZUdlbmVyYXRvclZhbHVlPiBwcm90ZWN0
KHRoaXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRG
YWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5jcHAKaW5k
ZXggOTgzNDI1NC4uMWI3NTM0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Nl
Z21lbnRlZEZvbnRGYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VnbWVudGVk
Rm9udEZhY2UuY3BwCkBAIC0xMDYsNyArMTA2LDcgQEAgRm9udERhdGEqIENTU1NlZ21lbnRlZEZv
bnRGYWNlOjpnZXRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGkK
ICAgICBGb250VHJhaXRzTWFzayBkZXNpcmVkVHJhaXRzTWFzayA9IGZvbnREZXNjcmlwdGlvbi50
cmFpdHNNYXNrKCk7CiAgICAgdW5zaWduZWQgaGFzaEtleSA9ICgoZm9udERlc2NyaXB0aW9uLmNv
bXB1dGVkUGl4ZWxTaXplKCkgKyAxKSA8PCAoRm9udFRyYWl0c01hc2tXaWR0aCArIDEpKSB8ICgo
Zm9udERlc2NyaXB0aW9uLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwgPyAxIDogMCkgPDwgRm9u
dFRyYWl0c01hc2tXaWR0aCkgfCBkZXNpcmVkVHJhaXRzTWFzazsKIAotICAgIFNlZ21lbnRlZEZv
bnREYXRhKiYgZm9udERhdGEgPSBtX2ZvbnREYXRhVGFibGUuYWRkKGhhc2hLZXksIDApLml0ZXJh
dG9yLT5zZWNvbmQ7CisgICAgU2VnbWVudGVkRm9udERhdGEqJiBmb250RGF0YSA9IG1fZm9udERh
dGFUYWJsZS5hZGQoaGFzaEtleSwgMCkuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmIChmb250RGF0
YSkKICAgICAgICAgcmV0dXJuIGZvbnREYXRhOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTU2VsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlbGVjdG9yLmNw
cAppbmRleCAxMzQ3OWI2Li4zYjQ4Y2ZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTU2VsZWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvci5jcHAK
QEAgLTM3Niw3ICszNzYsNyBAQCBDU1NTZWxlY3Rvcjo6UHNldWRvVHlwZSBDU1NTZWxlY3Rvcjo6
cGFyc2VQc2V1ZG9UeXBlKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkKICAgICAgICAgcmV0dXJu
IFBzZXVkb1Vua25vd247CiAgICAgSGFzaE1hcDxBdG9taWNTdHJpbmdJbXBsKiwgQ1NTU2VsZWN0
b3I6OlBzZXVkb1R5cGU+KiBuYW1lVG9Qc2V1ZG9UeXBlID0gbmFtZVRvUHNldWRvVHlwZU1hcCgp
OwogICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCosIENTU1NlbGVjdG9yOjpQc2V1ZG9UeXBl
Pjo6aXRlcmF0b3Igc2xvdCA9IG5hbWVUb1BzZXVkb1R5cGUtPmZpbmQobmFtZS5pbXBsKCkpOwot
ICAgIHJldHVybiBzbG90ID09IG5hbWVUb1BzZXVkb1R5cGUtPmVuZCgpID8gUHNldWRvVW5rbm93
biA6IHNsb3QtPnNlY29uZDsKKyAgICByZXR1cm4gc2xvdCA9PSBuYW1lVG9Qc2V1ZG9UeXBlLT5l
bmQoKSA/IFBzZXVkb1Vua25vd24gOiBzbG90LT52YWx1ZTsKIH0KIAogYm9vbCBDU1NTZWxlY3Rv
cjo6aXNVbmtub3duUHNldWRvVHlwZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVQb29sLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NWYWx1ZVBvb2wuY3BwCmluZGV4IGNlNzU3YjkuLmMxNjg5OTEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZVBvb2wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NWYWx1ZVBvb2wuY3BwCkBAIC03OCw4ICs3OCw4IEBAIFBhc3NSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IENTU1ZhbHVlUG9vbDo6Y3JlYXRlQ29sb3JWYWx1ZSh1bnNpZ25lZCByZ2JW
YWx1ZSkKICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGR1bW15VmFsdWU7CiAgICAgQ29s
b3JWYWx1ZUNhY2hlOjpBZGRSZXN1bHQgZW50cnkgPSBtX2NvbG9yVmFsdWVDYWNoZS5hZGQocmdi
VmFsdWUsIGR1bW15VmFsdWUpOwogICAgIGlmIChlbnRyeS5pc05ld0VudHJ5KQotICAgICAgICBl
bnRyeS5pdGVyYXRvci0+c2Vjb25kID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUNvbG9yKHJn
YlZhbHVlKTsKLSAgICByZXR1cm4gZW50cnkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgZW50
cnkuaXRlcmF0b3ItPnZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUNvbG9yKHJnYlZh
bHVlKTsKKyAgICByZXR1cm4gZW50cnkuaXRlcmF0b3ItPnZhbHVlOwogfQogCiBQYXNzUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NWYWx1ZVBvb2w6OmNyZWF0ZVZhbHVlKGRvdWJsZSB2YWx1
ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcyB0eXBlKQpAQCAtMTEzLDcgKzExMyw3IEBA
IFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IENTU1ZhbHVlUG9vbDo6Y3JlYXRlVmFsdWUo
ZG91YmxlIHZhbHVlLCBDU1NQcmltaXRpCiAKIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IENTU1ZhbHVlUG9vbDo6Y3JlYXRlRm9udEZhbWlseVZhbHVlKGNvbnN0IFN0cmluZyYgZmFtaWx5
TmFtZSkKIHsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiB2YWx1ZSA9IG1fZm9udEZh
bWlseVZhbHVlQ2FjaGUuYWRkKGZhbWlseU5hbWUsIDApLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAg
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYgdmFsdWUgPSBtX2ZvbnRGYW1pbHlWYWx1ZUNhY2hl
LmFkZChmYW1pbHlOYW1lLCAwKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCF2YWx1ZSkKICAg
ICAgICAgdmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKGZhbWlseU5hbWUsIENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKTsKICAgICByZXR1cm4gdmFsdWU7CkBAIC0xMjYsNyAr
MTI2LDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZUxpc3Q+IENTU1ZhbHVlUG9vbDo6Y3JlYXRlRm9u
dEZhY2VWYWx1ZShjb25zdCBBdG9taWNTdHJpbmcmIHMKICAgICBpZiAobV9mb250RmFjZVZhbHVl
Q2FjaGUuc2l6ZSgpID4gbWF4aW11bUZvbnRGYWNlQ2FjaGVTaXplKQogICAgICAgICBtX2ZvbnRG
YWNlVmFsdWVDYWNoZS5jbGVhcigpOwogCi0gICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4mIHZhbHVl
ID0gbV9mb250RmFjZVZhbHVlQ2FjaGUuYWRkKHN0cmluZywgMCkuaXRlcmF0b3ItPnNlY29uZDsK
KyAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiYgdmFsdWUgPSBtX2ZvbnRGYWNlVmFsdWVDYWNoZS5h
ZGQoc3RyaW5nLCAwKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAg
dmFsdWUgPSBDU1NQYXJzZXI6OnBhcnNlRm9udEZhY2VWYWx1ZShzdHJpbmcpOwogICAgIHJldHVy
biB2YWx1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Qcm9wZXJ0eVNldENTU1N0
eWxlRGVjbGFyYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1Byb3BlcnR5U2V0Q1NTU3R5
bGVEZWNsYXJhdGlvbi5jcHAKaW5kZXggOGEwYWZkNi4uODBmMjA1NiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL1Byb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvY3NzL1Byb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAKQEAg
LTI5OSw3ICsyOTksNyBAQCBDU1NWYWx1ZSogUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9u
OjpjbG9uZUFuZENhY2hlRm9yQ1NTT00oQ1NTVmFsdWUqIGludGVybgogICAgIGlmICghbV9jc3Nv
bUNTU1ZhbHVlQ2xvbmVzKQogICAgICAgICBtX2Nzc29tQ1NTVmFsdWVDbG9uZXMgPSBhZG9wdFB0
cihuZXcgSGFzaE1hcDxDU1NWYWx1ZSosIFJlZlB0cjxDU1NWYWx1ZT4gPik7CiAgICAgCi0gICAg
UmVmUHRyPENTU1ZhbHVlPiYgY2xvbmVkVmFsdWUgPSBtX2Nzc29tQ1NTVmFsdWVDbG9uZXMtPmFk
ZChpbnRlcm5hbFZhbHVlLCBSZWZQdHI8Q1NTVmFsdWU+KCkpLml0ZXJhdG9yLT5zZWNvbmQ7Cisg
ICAgUmVmUHRyPENTU1ZhbHVlPiYgY2xvbmVkVmFsdWUgPSBtX2Nzc29tQ1NTVmFsdWVDbG9uZXMt
PmFkZChpbnRlcm5hbFZhbHVlLCBSZWZQdHI8Q1NTVmFsdWU+KCkpLml0ZXJhdG9yLT52YWx1ZTsK
ICAgICBpZiAoIWNsb25lZFZhbHVlKQogICAgICAgICBjbG9uZWRWYWx1ZSA9IGludGVybmFsVmFs
dWUtPmNsb25lRm9yQ1NTT00oKTsKICAgICByZXR1cm4gY2xvbmVkVmFsdWUuZ2V0KCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZUJ1aWxkZXIuY3BwCmluZGV4IGI2YmYzMzIuLmM3ZGRiMGI0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU3R5bGVCdWlsZGVyLmNwcApAQCAtMTAxNSwyMSArMTAxNSwyMSBAQCBwdWJsaWM6
CiAgICAgICAgIHR5cGVkZWYgQ291bnRlckRpcmVjdGl2ZU1hcDo6aXRlcmF0b3IgSXRlcmF0b3I7
CiAgICAgICAgIEl0ZXJhdG9yIGVuZCA9IHBhcmVudE1hcC5lbmQoKTsKICAgICAgICAgZm9yIChJ
dGVyYXRvciBpdCA9IHBhcmVudE1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgICAgIENvdW50ZXJEaXJlY3RpdmVzJiBkaXJlY3RpdmVzID0gbWFwLmFkZChpdC0+Zmlyc3Qs
IENvdW50ZXJEaXJlY3RpdmVzKCkpLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgICAgICBDb3Vu
dGVyRGlyZWN0aXZlcyYgZGlyZWN0aXZlcyA9IG1hcC5hZGQoaXQtPmtleSwgQ291bnRlckRpcmVj
dGl2ZXMoKSkuaXRlcmF0b3ItPnZhbHVlOwogICAgICAgICAgICAgaWYgKGNvdW50ZXJCZWhhdmlv
ciA9PSBSZXNldCkgewotICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXMubV9yZXNldCA9IGl0LT5z
ZWNvbmQubV9yZXNldDsKLSAgICAgICAgICAgICAgICBkaXJlY3RpdmVzLm1fcmVzZXRWYWx1ZSA9
IGl0LT5zZWNvbmQubV9yZXNldFZhbHVlOworICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXMubV9y
ZXNldCA9IGl0LT52YWx1ZS5tX3Jlc2V0OworICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXMubV9y
ZXNldFZhbHVlID0gaXQtPnZhbHVlLm1fcmVzZXRWYWx1ZTsKICAgICAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAgICAgLy8gSW5oZXJpdGluZyBhIGNvdW50ZXItaW5jcmVtZW50IG1lYW5z
IHRha2luZyB0aGUgcGFyZW50J3MgY3VycmVudCB2YWx1ZSBmb3IgdGhlIGNvdW50ZXIKICAgICAg
ICAgICAgICAgICAvLyBhbmQgYWRkaW5nIGl0IHRvIGl0c2VsZi4KLSAgICAgICAgICAgICAgICBk
aXJlY3RpdmVzLm1faW5jcmVtZW50ID0gaXQtPnNlY29uZC5tX2luY3JlbWVudDsKKyAgICAgICAg
ICAgICAgICBkaXJlY3RpdmVzLm1faW5jcmVtZW50ID0gaXQtPnZhbHVlLm1faW5jcmVtZW50Owog
ICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXMubV9pbmNyZW1lbnRWYWx1ZSA9IDA7CiAgICAgICAg
ICAgICAgICAgaWYgKGRpcmVjdGl2ZXMubV9pbmNyZW1lbnQpIHsKICAgICAgICAgICAgICAgICAg
ICAgZmxvYXQgaW5jcmVtZW50VmFsdWUgPSBkaXJlY3RpdmVzLm1faW5jcmVtZW50VmFsdWU7Ci0g
ICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXMubV9pbmNyZW1lbnRWYWx1ZSA9IGNsYW1wVG9J
bnRlZ2VyKGluY3JlbWVudFZhbHVlICsgaXQtPnNlY29uZC5tX2luY3JlbWVudFZhbHVlKTsKKyAg
ICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlcy5tX2luY3JlbWVudFZhbHVlID0gY2xhbXBUb0lu
dGVnZXIoaW5jcmVtZW50VmFsdWUgKyBpdC0+dmFsdWUubV9pbmNyZW1lbnRWYWx1ZSk7CiAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlcy5tX2lu
Y3JlbWVudCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXMubV9pbmNyZW1l
bnRWYWx1ZSA9IGl0LT5zZWNvbmQubV9pbmNyZW1lbnRWYWx1ZTsKKyAgICAgICAgICAgICAgICAg
ICAgZGlyZWN0aXZlcy5tX2luY3JlbWVudFZhbHVlID0gaXQtPnZhbHVlLm1faW5jcmVtZW50VmFs
dWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xMDQ3
LDkgKzEwNDcsOSBAQCBwdWJsaWM6CiAgICAgICAgIEl0ZXJhdG9yIGVuZCA9IG1hcC5lbmQoKTsK
ICAgICAgICAgZm9yIChJdGVyYXRvciBpdCA9IG1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
CiAgICAgICAgICAgICBpZiAoY291bnRlckJlaGF2aW9yID09IFJlc2V0KQotICAgICAgICAgICAg
ICAgIGl0LT5zZWNvbmQubV9yZXNldCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGl0LT52YWx1
ZS5tX3Jlc2V0ID0gZmFsc2U7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgaXQt
PnNlY29uZC5tX2luY3JlbWVudCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGl0LT52YWx1ZS5t
X2luY3JlbWVudCA9IGZhbHNlOwogCiAgICAgICAgIGludCBsZW5ndGggPSBsaXN0ID8gbGlzdC0+
bGVuZ3RoKCkgOiAwOwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7
CkBAIC0xMDYzLDcgKzEwNjMsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgICAgIEF0b21pY1N0cmlu
ZyBpZGVudGlmaWVyID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihwYWlyLT5maXJz
dCgpKS0+Z2V0U3RyaW5nVmFsdWUoKTsKICAgICAgICAgICAgIGludCB2YWx1ZSA9IHN0YXRpY19j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4ocGFpci0+c2Vjb25kKCkpLT5nZXRJbnRWYWx1ZSgpOwot
ICAgICAgICAgICAgQ291bnRlckRpcmVjdGl2ZXMmIGRpcmVjdGl2ZXMgPSBtYXAuYWRkKGlkZW50
aWZpZXIuaW1wbCgpLCBDb3VudGVyRGlyZWN0aXZlcygpKS5pdGVyYXRvci0+c2Vjb25kOworICAg
ICAgICAgICAgQ291bnRlckRpcmVjdGl2ZXMmIGRpcmVjdGl2ZXMgPSBtYXAuYWRkKGlkZW50aWZp
ZXIuaW1wbCgpLCBDb3VudGVyRGlyZWN0aXZlcygpKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAg
ICAgICBpZiAoY291bnRlckJlaGF2aW9yID09IFJlc2V0KSB7CiAgICAgICAgICAgICAgICAgZGly
ZWN0aXZlcy5tX3Jlc2V0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzLm1fcmVz
ZXRWYWx1ZSA9IHZhbHVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVz
b2x2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCmluZGV4IDky
YjkyNWMuLjVjMWRlNmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29s
dmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKQEAgLTQ5
NSw3ICs0OTUsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RGZWF0dXJlcygpCiAgICAg
bV9mZWF0dXJlcy5hZGQobV9hdXRob3JTdHlsZS0+ZmVhdHVyZXMoKSk7CiAjaWYgRU5BQkxFKFNU
WUxFX1NDT1BFRCkKICAgICBmb3IgKFNjb3BlZFJ1bGVTZXRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9z
Y29wZWRBdXRob3JTdHlsZXMuYmVnaW4oKTsgaXQgIT0gbV9zY29wZWRBdXRob3JTdHlsZXMuZW5k
KCk7ICsraXQpCi0gICAgICAgIG1fZmVhdHVyZXMuYWRkKGl0LT5zZWNvbmQtPmZlYXR1cmVzKCkp
OworICAgICAgICBtX2ZlYXR1cmVzLmFkZChpdC0+dmFsdWUtPmZlYXR1cmVzKCkpOwogI2VuZGlm
CiAgICAgaWYgKG1fdXNlclN0eWxlKQogICAgICAgICBtX2ZlYXR1cmVzLmFkZChtX3VzZXJTdHls
ZS0+ZmVhdHVyZXMoKSk7CkBAIC01MzIsNyArNTMyLDcgQEAgaW5saW5lIFJ1bGVTZXQqIFN0eWxl
UmVzb2x2ZXI6OnJ1bGVTZXRGb3JTY29wZShjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSkgY29u
c3QKICAgICBpZiAoIXNjb3BlLT5oYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpKQogICAgICAgICBy
ZXR1cm4gMDsKICAgICBTY29wZWRSdWxlU2V0TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fc2Nv
cGVkQXV0aG9yU3R5bGVzLmZpbmQoc2NvcGUpOwotICAgIHJldHVybiBpdCAhPSBtX3Njb3BlZEF1
dGhvclN0eWxlcy5lbmQoKSA/IGl0LT5zZWNvbmQuZ2V0KCkgOiAwOyAKKyAgICByZXR1cm4gaXQg
IT0gbV9zY29wZWRBdXRob3JTdHlsZXMuZW5kKCkgPyBpdC0+dmFsdWUuZ2V0KCkgOiAwOyAKIH0K
ICNlbmRpZgogCkBAIC01NTUsOCArNTU1LDggQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBlbmRB
dXRob3JTdHlsZXNoZWV0cyh1bnNpZ25lZCBmaXJzdE5ldywgY29uc3QgVmVjdG9yPFJlZlAKICAg
ICAgICAgaWYgKHNjb3BlKSB7CiAgICAgICAgICAgICBTY29wZWRSdWxlU2V0TWFwOjpBZGRSZXN1
bHQgYWRkUmVzdWx0ID0gbV9zY29wZWRBdXRob3JTdHlsZXMuYWRkKHNjb3BlLCBudWxscHRyKTsK
ICAgICAgICAgICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgICAgICBh
ZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IFJ1bGVTZXQ6OmNyZWF0ZSgpOwotICAgICAgICAg
ICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQtPmFkZFJ1bGVzRnJvbVNoZWV0KHNoZWV0LCAq
bV9tZWRpdW0sIHRoaXMsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICBhZGRSZXN1bHQuaXRlcmF0
b3ItPnZhbHVlID0gUnVsZVNldDo6Y3JlYXRlKCk7CisgICAgICAgICAgICBhZGRSZXN1bHQuaXRl
cmF0b3ItPnZhbHVlLT5hZGRSdWxlc0Zyb21TaGVldChzaGVldCwgKm1fbWVkaXVtLCB0aGlzLCBz
Y29wZSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogI2VuZGlmCkBAIC02ODYs
MTAgKzY4NiwxMCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OnN3ZWVwTWF0Y2hlZFByb3BlcnRpZXND
YWNoZSgpCiAgICAgTWF0Y2hlZFByb3BlcnRpZXNDYWNoZTo6aXRlcmF0b3IgaXQgPSBtX21hdGNo
ZWRQcm9wZXJ0aWVzQ2FjaGUuYmVnaW4oKTsKICAgICBNYXRjaGVkUHJvcGVydGllc0NhY2hlOjpp
dGVyYXRvciBlbmQgPSBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUuZW5kKCk7CiAgICAgZm9yICg7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBWZWN0b3I8TWF0Y2hlZFByb3BlcnRpZXM+JiBt
YXRjaGVkUHJvcGVydGllcyA9IGl0LT5zZWNvbmQubWF0Y2hlZFByb3BlcnRpZXM7CisgICAgICAg
IFZlY3RvcjxNYXRjaGVkUHJvcGVydGllcz4mIG1hdGNoZWRQcm9wZXJ0aWVzID0gaXQtPnZhbHVl
Lm1hdGNoZWRQcm9wZXJ0aWVzOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1hdGNo
ZWRQcm9wZXJ0aWVzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBpZiAobWF0Y2hlZFByb3Bl
cnRpZXNbaV0ucHJvcGVydGllcy0+aGFzT25lUmVmKCkpIHsKLSAgICAgICAgICAgICAgICB0b1Jl
bW92ZS5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQo
aXQtPmtleSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KQEAgLTE4NDcsNyArMTg0Nyw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6a2V5ZnJhbWVTdHls
ZXNGb3JBbmltYXRpb24oRWxlbWVudCogZSwgY29uc3QgUmVuZGVyU3R5bGUqIGVsCiAgICAgaWYg
KGl0ID09IG1fa2V5ZnJhbWVzUnVsZU1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
Y29uc3QgU3R5bGVSdWxlS2V5ZnJhbWVzKiBrZXlmcmFtZXNSdWxlID0gaXQtPnNlY29uZC5nZXQo
KTsKKyAgICBjb25zdCBTdHlsZVJ1bGVLZXlmcmFtZXMqIGtleWZyYW1lc1J1bGUgPSBpdC0+dmFs
dWUuZ2V0KCk7CiAKICAgICAvLyBDb25zdHJ1Y3QgYW5kIHBvcHVsYXRlIHRoZSBzdHlsZSBmb3Ig
ZWFjaCBrZXlmcmFtZQogICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVLZXlmcmFtZT4gPiYg
a2V5ZnJhbWVzID0ga2V5ZnJhbWVzUnVsZS0+a2V5ZnJhbWVzKCk7CkBAIC0yNTE1LDcgKzI1MTUs
NyBAQCBzdGF0aWMgdm9pZCByZXBvcnRBdG9tUnVsZU1hcChNZW1vcnlDbGFzc0luZm88UnVsZVNl
dD4qIGluZm8sIGNvbnN0IFJ1bGVTZXQ6OkF0bwogewogICAgIGluZm8tPmFkZEhhc2hNYXAoYXRv
bWljUnVsZU1hcCk7CiAgICAgZm9yIChSdWxlU2V0OjpBdG9tUnVsZU1hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBhdG9taWNSdWxlTWFwLmJlZ2luKCk7IGl0ICE9IGF0b21pY1J1bGVNYXAuZW5kKCk7
ICsraXQpCi0gICAgICAgIGluZm8tPmFkZEluc3RydW1lbnRlZFZlY3RvcigqaXQtPnNlY29uZCk7
CisgICAgICAgIGluZm8tPmFkZEluc3RydW1lbnRlZFZlY3RvcigqaXQtPnZhbHVlKTsKIH0KIAog
dm9pZCBSdWxlU2V0OjpyZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlP
YmplY3RJbmZvKSBjb25zdApAQCAtMjU4Niw3ICsyNTg2LDcgQEAgdm9pZCBSdWxlU2V0OjphZGRU
b1J1bGVTZXQoQXRvbWljU3RyaW5nSW1wbCoga2V5LCBBdG9tUnVsZU1hcCYgbWFwLCBjb25zdCBS
dWxlRGEKIHsKICAgICBpZiAoIWtleSkKICAgICAgICAgcmV0dXJuOwotICAgIE93blB0cjxWZWN0
b3I8UnVsZURhdGE+ID4mIHJ1bGVzID0gbWFwLmFkZChrZXksIG51bGxwdHIpLml0ZXJhdG9yLT5z
ZWNvbmQ7CisgICAgT3duUHRyPFZlY3RvcjxSdWxlRGF0YT4gPiYgcnVsZXMgPSBtYXAuYWRkKGtl
eSwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghcnVsZXMpCiAgICAgICAgIHJ1
bGVzID0gYWRvcHRQdHIobmV3IFZlY3RvcjxSdWxlRGF0YT4pOwogICAgIHJ1bGVzLT5hcHBlbmQo
cnVsZURhdGEpOwpAQCAtMjc0NSw3ICsyNzQ1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNocmlu
a01hcFZlY3RvcnNUb0ZpdChSdWxlU2V0OjpBdG9tUnVsZU1hcCYgbWFwKQogewogICAgIFJ1bGVT
ZXQ6OkF0b21SdWxlTWFwOjppdGVyYXRvciBlbmQgPSBtYXAuZW5kKCk7CiAgICAgZm9yIChSdWxl
U2V0OjpBdG9tUnVsZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5zaHJpbmtUb0ZpdCgpOworICAgICAgICBpdC0+dmFs
dWUtPnNocmlua1RvRml0KCk7CiB9CiAKIHZvaWQgUnVsZVNldDo6c2hyaW5rVG9GaXQoKQpAQCAt
Mjg5MSw3ICsyODkxLDcgQEAgY29uc3QgU3R5bGVSZXNvbHZlcjo6TWF0Y2hlZFByb3BlcnRpZXND
YWNoZUl0ZW0qIFN0eWxlUmVzb2x2ZXI6OmZpbmRGcm9tTWF0Y2hlZFAKICAgICBNYXRjaGVkUHJv
cGVydGllc0NhY2hlOjppdGVyYXRvciBpdCA9IG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZS5maW5k
KGhhc2gpOwogICAgIGlmIChpdCA9PSBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUuZW5kKCkpCiAg
ICAgICAgIHJldHVybiAwOwotICAgIE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVJdGVtJiBjYWNoZUl0
ZW0gPSBpdC0+c2Vjb25kOworICAgIE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVJdGVtJiBjYWNoZUl0
ZW0gPSBpdC0+dmFsdWU7CiAKICAgICBzaXplX3Qgc2l6ZSA9IG1hdGNoUmVzdWx0Lm1hdGNoZWRQ
cm9wZXJ0aWVzLnNpemUoKTsKICAgICBpZiAoc2l6ZSAhPSBjYWNoZUl0ZW0ubWF0Y2hlZFByb3Bl
cnRpZXMuc2l6ZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRD
b250ZW50cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldENvbnRlbnRzLmNwcApp
bmRleCA5NzBjODI4Li42MzAzZDBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVTaGVldENvbnRlbnRzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldENv
bnRlbnRzLmNwcApAQCAtMjYxLDcgKzI2MSw3IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgU3R5bGVT
aGVldENvbnRlbnRzOjpkZXRlcm1pbmVOYW1lc3BhY2UoY29uc3QgQXRvbWljU3RyaW5nJiBwCiAg
ICAgUHJlZml4TmFtZXNwYWNlVVJJTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fbmFtZXNwYWNl
cy5maW5kKHByZWZpeCk7CiAgICAgaWYgKGl0ID09IG1fbmFtZXNwYWNlcy5lbmQoKSkKICAgICAg
ICAgcmV0dXJuIG51bGxBdG9tOwotICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgIHJldHVybiBp
dC0+dmFsdWU7CiB9CiAKIHZvaWQgU3R5bGVTaGVldENvbnRlbnRzOjpwYXJzZUF1dGhvclN0eWxl
U2hlZXQoY29uc3QgQ2FjaGVkQ1NTU3R5bGVTaGVldCogY2FjaGVkU3R5bGVTaGVldCwgY29uc3Qg
U2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL0NoZWNrZWRSYWRpb0J1dHRvbnMuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0NoZWNr
ZWRSYWRpb0J1dHRvbnMuY3BwCmluZGV4IGU2NzIzMjkuLjlmYTUwOWIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9DaGVja2VkUmFkaW9CdXR0b25zLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vQ2hlY2tlZFJhZGlvQnV0dG9ucy5jcHAKQEAgLTE4NSw3ICsxODUsNyBAQCB2b2lk
IENoZWNrZWRSYWRpb0J1dHRvbnM6OmFkZEJ1dHRvbihIVE1MSW5wdXRFbGVtZW50KiBlbGVtZW50
KQogICAgIGlmICghbV9uYW1lVG9Hcm91cE1hcCkKICAgICAgICAgbV9uYW1lVG9Hcm91cE1hcCA9
IGFkb3B0UHRyKG5ldyBOYW1lVG9Hcm91cE1hcCk7CiAKLSAgICBPd25QdHI8UmFkaW9CdXR0b25H
cm91cD4mIGdyb3VwID0gbV9uYW1lVG9Hcm91cE1hcC0+YWRkKGVsZW1lbnQtPm5hbWUoKS5pbXBs
KCksIFBhc3NPd25QdHI8UmFkaW9CdXR0b25Hcm91cD4oKSkuaXRlcmF0b3ItPnNlY29uZDsKKyAg
ICBPd25QdHI8UmFkaW9CdXR0b25Hcm91cD4mIGdyb3VwID0gbV9uYW1lVG9Hcm91cE1hcC0+YWRk
KGVsZW1lbnQtPm5hbWUoKS5pbXBsKCksIFBhc3NPd25QdHI8UmFkaW9CdXR0b25Hcm91cD4oKSku
aXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghZ3JvdXApCiAgICAgICAgIGdyb3VwID0gUmFkaW9C
dXR0b25Hcm91cDo6Y3JlYXRlKCk7CiAgICAgZ3JvdXAtPmFkZChlbGVtZW50KTsKQEAgLTI0Niw4
ICsyNDYsOCBAQCB2b2lkIENoZWNrZWRSYWRpb0J1dHRvbnM6OnJlbW92ZUJ1dHRvbihIVE1MSW5w
dXRFbGVtZW50KiBlbGVtZW50KQogICAgIE5hbWVUb0dyb3VwTWFwOjppdGVyYXRvciBpdCA9IG1f
bmFtZVRvR3JvdXBNYXAtPmZpbmQoZWxlbWVudC0+bmFtZSgpLmltcGwoKSk7CiAgICAgaWYgKGl0
ID09IG1fbmFtZVRvR3JvdXBNYXAtPmVuZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgaXQtPnNl
Y29uZC0+cmVtb3ZlKGVsZW1lbnQpOwotICAgIGlmIChpdC0+c2Vjb25kLT5pc0VtcHR5KCkpIHsK
KyAgICBpdC0+dmFsdWUtPnJlbW92ZShlbGVtZW50KTsKKyAgICBpZiAoaXQtPnZhbHVlLT5pc0Vt
cHR5KCkpIHsKICAgICAgICAgLy8gRklYTUU6IFdlIG1heSBza2lwIGRlYWxsb2NhdGluZyB0aGUg
ZW1wdHkgUmFkaW9CdXR0b25Hcm91cCBmb3IKICAgICAgICAgLy8gcGVyZm9ybWFuY2UgaW1wcm92
ZW1lbnQuIElmIHdlIGRvIHNvLCB3ZSBuZWVkIHRvIGNoYW5nZSB0aGUga2V5IHR5cGUKICAgICAg
ICAgLy8gb2YgbV9uYW1lVG9Hcm91cE1hcCBmcm9tIEF0b21pY1N0cmluZ0ltcGwqIHRvIFJlZlB0
cjxBdG9taWNTdHJpbmdJbXBsPi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGls
ZExpc3RNdXRhdGlvblNjb3BlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZExpc3RNdXRh
dGlvblNjb3BlLmNwcAppbmRleCBmNGEyZGEwNC4uYWZkOGRkOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL0NoaWxkTGlzdE11dGF0aW9uU2NvcGUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9DaGlsZExpc3RNdXRhdGlvblNjb3BlLmNwcApAQCAtMTkyLDI3ICsxOTIsMjcgQEAg
dm9pZCBDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlcjo6
Y2hpbGRBZGRlZChOb2RlKiB0YXJnZXQKIHsKICAgICBIYXNoTWFwPE5vZGUqLCBPd25QdHI8Q2hp
bGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRvcj4gPjo6aXRlcmF0b3IgaXRl
ciA9IG1fYWNjdW11bGF0aW9ucy5maW5kKHRhcmdldCk7CiAgICAgQVNTRVJUKGl0ZXIgIT0gbV9h
Y2N1bXVsYXRpb25zLmVuZCgpKTsKLSAgICBpZiAoaXRlciA9PSBtX2FjY3VtdWxhdGlvbnMuZW5k
KCkgfHwgIWl0ZXItPnNlY29uZCkKKyAgICBpZiAoaXRlciA9PSBtX2FjY3VtdWxhdGlvbnMuZW5k
KCkgfHwgIWl0ZXItPnZhbHVlKQogICAgICAgICByZXR1cm47CiAKLSAgICBpdGVyLT5zZWNvbmQt
PmNoaWxkQWRkZWQoY2hpbGQpOworICAgIGl0ZXItPnZhbHVlLT5jaGlsZEFkZGVkKGNoaWxkKTsK
IH0KIAogdm9pZCBDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdGlvblJv
dXRlcjo6d2lsbFJlbW92ZUNoaWxkKE5vZGUqIHRhcmdldCwgTm9kZSogY2hpbGQpCiB7CiAgICAg
SGFzaE1hcDxOb2RlKiwgT3duUHRyPENoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNj
dW11bGF0b3I+ID46Oml0ZXJhdG9yIGl0ZXIgPSBtX2FjY3VtdWxhdGlvbnMuZmluZCh0YXJnZXQp
OwogICAgIEFTU0VSVChpdGVyICE9IG1fYWNjdW11bGF0aW9ucy5lbmQoKSk7Ci0gICAgaWYgKGl0
ZXIgPT0gbV9hY2N1bXVsYXRpb25zLmVuZCgpIHx8ICFpdGVyLT5zZWNvbmQpCisgICAgaWYgKGl0
ZXIgPT0gbV9hY2N1bXVsYXRpb25zLmVuZCgpIHx8ICFpdGVyLT52YWx1ZSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgaXRlci0+c2Vjb25kLT53aWxsUmVtb3ZlQ2hpbGQoY2hpbGQpOworICAgIGl0
ZXItPnZhbHVlLT53aWxsUmVtb3ZlQ2hpbGQoY2hpbGQpOwogfQogCiB2b2lkIENoaWxkTGlzdE11
dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVyOjppbmNyZW1lbnRTY29waW5n
TGV2ZWwoTm9kZSogdGFyZ2V0KQogewogICAgIFNjb3BpbmdMZXZlbE1hcDo6QWRkUmVzdWx0IHJl
c3VsdCA9IG1fc2NvcGluZ0xldmVscy5hZGQodGFyZ2V0LCAxKTsKICAgICBpZiAoIXJlc3VsdC5p
c05ld0VudHJ5KSB7Ci0gICAgICAgICsrKHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKKyAgICAg
ICAgKysocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
QEAgLTIyOSw4ICsyMjksOCBAQCB2b2lkIENoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9u
QWNjdW11bGF0aW9uUm91dGVyOjpkZWNyZW1lbnRTY29waW5nTGV2ZWwoTgogICAgIFNjb3BpbmdM
ZXZlbE1hcDo6aXRlcmF0b3IgaXRlciA9IG1fc2NvcGluZ0xldmVscy5maW5kKHRhcmdldCk7CiAg
ICAgQVNTRVJUKGl0ZXIgIT0gbV9zY29waW5nTGV2ZWxzLmVuZCgpKTsKIAotICAgIC0tKGl0ZXIt
PnNlY29uZCk7Ci0gICAgaWYgKGl0ZXItPnNlY29uZCA+IDApCisgICAgLS0oaXRlci0+dmFsdWUp
OworICAgIGlmIChpdGVyLT52YWx1ZSA+IDApCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fc2Nv
cGluZ0xldmVscy5yZW1vdmUoaXRlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCAxNjlk
OGE1Li5kOTRiYTUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTI5MzYsNyArMjkzNiw3
IEBAIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4gPiogRG9jdW1lbnQ6OnBhZ2VH
cm91cFVzZXJTaGVldHMoKSBjb25zdAogCiAgICAgVXNlclN0eWxlU2hlZXRNYXA6OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IHNoZWV0c01hcC0+ZW5kKCk7CiAgICAgZm9yIChVc2VyU3R5bGVTaGVldE1h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBzaGVldHNNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgewotICAgICAgICBjb25zdCBVc2VyU3R5bGVTaGVldFZlY3Rvciogc2hlZXRzID0gaXQtPnNl
Y29uZC5nZXQoKTsKKyAgICAgICAgY29uc3QgVXNlclN0eWxlU2hlZXRWZWN0b3IqIHNoZWV0cyA9
IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNoZWV0
cy0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIGNvbnN0IFVzZXJTdHlsZVNoZWV0KiBzaGVl
dCA9IHNoZWV0cy0+YXQoaSkuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoc2hlZXQtPmluamVjdGVk
RnJhbWVzKCkgPT0gSW5qZWN0SW5Ub3BGcmFtZU9ubHkgJiYgb3duZXJFbGVtZW50KCkpCkBAIC00
ODExLDEwICs0ODExLDEwIEBAIFBhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+IERvY3VtZW50Ojp3
aW5kb3dOYW1lZEl0ZW1zKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkKIHsKICAgICBOYW1lZENv
bGxlY3Rpb25NYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX3dpbmRvd05hbWVkSXRlbUNvbGxlY3Rp
b25zLmFkZChuYW1lLCAwKTsKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICBy
ZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQuaXRl
cmF0b3ItPnZhbHVlOwogCiAgICAgUmVmUHRyPEhUTUxOYW1lQ29sbGVjdGlvbj4gY29sbGVjdGlv
biA9IEhUTUxOYW1lQ29sbGVjdGlvbjo6Y3JlYXRlKHRoaXMsIFdpbmRvd05hbWVkSXRlbXMsIG5h
bWUpOwotICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gY29sbGVjdGlvbi5nZXQoKTsKKyAg
ICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gY29sbGVjdGlvbi5nZXQoKTsKICAgICByZXR1cm4g
Y29sbGVjdGlvbi5yZWxlYXNlKCk7CiB9CiAKQEAgLTQ4MjIsMTAgKzQ4MjIsMTAgQEAgUGFzc1Jl
ZlB0cjxIVE1MQ29sbGVjdGlvbj4gRG9jdW1lbnQ6OmRvY3VtZW50TmFtZWRJdGVtcyhjb25zdCBB
dG9taWNTdHJpbmcmIG5hbWUKIHsKICAgICBOYW1lZENvbGxlY3Rpb25NYXA6OkFkZFJlc3VsdCBy
ZXN1bHQgPSBtX2RvY3VtZW50TmFtZWRJdGVtQ29sbGVjdGlvbnMuYWRkKG5hbWUsIDApOwogICAg
IGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3It
PnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAKICAgICBS
ZWZQdHI8SFRNTE5hbWVDb2xsZWN0aW9uPiBjb2xsZWN0aW9uID0gSFRNTE5hbWVDb2xsZWN0aW9u
OjpjcmVhdGUodGhpcywgRG9jdW1lbnROYW1lZEl0ZW1zLCBuYW1lKTsKLSAgICByZXN1bHQuaXRl
cmF0b3ItPnNlY29uZCA9IGNvbGxlY3Rpb24uZ2V0KCk7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZSA9IGNvbGxlY3Rpb24uZ2V0KCk7CiAgICAgcmV0dXJuIGNvbGxlY3Rpb24ucmVsZWFzZSgp
OwogfQogCkBAIC01MTYwLDcgKzUxNjAsNyBAQCBDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBEb2N1
bWVudDo6Z2V0Q1NTQ2FudmFzQ29udGV4dChjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0CiAKIEhU
TUxDYW52YXNFbGVtZW50KiBEb2N1bWVudDo6Z2V0Q1NTQ2FudmFzRWxlbWVudChjb25zdCBTdHJp
bmcmIG5hbWUpCiB7Ci0gICAgUmVmUHRyPEhUTUxDYW52YXNFbGVtZW50PiYgZWxlbWVudCA9IG1f
Y3NzQ2FudmFzRWxlbWVudHMuYWRkKG5hbWUsIDApLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgUmVm
UHRyPEhUTUxDYW52YXNFbGVtZW50PiYgZWxlbWVudCA9IG1fY3NzQ2FudmFzRWxlbWVudHMuYWRk
KG5hbWUsIDApLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoIWVsZW1lbnQpCiAgICAgICAgIGVs
ZW1lbnQgPSBIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlKHRoaXMpOwogICAgIHJldHVybiBlbGVt
ZW50LmdldCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2Vy
Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyLmNwcAppbmRleCBhM2ViYzkzLi5iMmYwMDg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcApAQCAtMzExLDcgKzMxMSw3IEBAIERvY3Vt
ZW50TWFya2VyKiBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Om1hcmtlckNvbnRhaW5pbmdQb2lu
dChjb25zdCBMYXlvdXRQb2luCiAgICAgTWFya2VyTWFwOjppdGVyYXRvciBlbmQgPSBtX21hcmtl
cnMuZW5kKCk7CiAgICAgZm9yIChNYXJrZXJNYXA6Oml0ZXJhdG9yIG5vZGVJdGVyYXRvciA9IG1f
bWFya2Vycy5iZWdpbigpOyBub2RlSXRlcmF0b3IgIT0gZW5kOyArK25vZGVJdGVyYXRvcikgewog
ICAgICAgICAvLyBpbm5lciBsb29wOyBwcm9jZXNzIGVhY2ggbWFya2VyIGluIHRoaXMgbm9kZQot
ICAgICAgICBNYXJrZXJMaXN0KiBsaXN0ID0gbm9kZUl0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAg
IE1hcmtlckxpc3QqIGxpc3QgPSBub2RlSXRlcmF0b3ItPnZhbHVlOwogICAgICAgICB1bnNpZ25l
ZCBtYXJrZXJDb3VudCA9IGxpc3QtPnNpemUoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBtYXJr
ZXJJbmRleCA9IDA7IG1hcmtlckluZGV4IDwgbWFya2VyQ291bnQ7ICsrbWFya2VySW5kZXgpIHsK
ICAgICAgICAgICAgIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXImIG1hcmtlciA9IGxpc3QtPmF0KG1h
cmtlckluZGV4KTsKQEAgLTM5OSw3ICszOTksNyBAQCBWZWN0b3I8SW50UmVjdD4gRG9jdW1lbnRN
YXJrZXJDb250cm9sbGVyOjpyZW5kZXJlZFJlY3RzRm9yTWFya2VycyhEb2N1bWVudE1hcmtlcgog
ICAgIE1hcmtlck1hcDo6aXRlcmF0b3IgZW5kID0gbV9tYXJrZXJzLmVuZCgpOwogICAgIGZvciAo
TWFya2VyTWFwOjppdGVyYXRvciBub2RlSXRlcmF0b3IgPSBtX21hcmtlcnMuYmVnaW4oKTsgbm9k
ZUl0ZXJhdG9yICE9IGVuZDsgKytub2RlSXRlcmF0b3IpIHsKICAgICAgICAgLy8gaW5uZXIgbG9v
cDsgcHJvY2VzcyBlYWNoIG1hcmtlciBpbiB0aGlzIG5vZGUKLSAgICAgICAgTWFya2VyTGlzdCog
bGlzdCA9IG5vZGVJdGVyYXRvci0+c2Vjb25kOworICAgICAgICBNYXJrZXJMaXN0KiBsaXN0ID0g
bm9kZUl0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgdW5zaWduZWQgbWFya2VyQ291bnQgPSBsaXN0
LT5zaXplKCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgbWFya2VySW5kZXggPSAwOyBtYXJrZXJJ
bmRleCA8IG1hcmtlckNvdW50OyArK21hcmtlckluZGV4KSB7CiAgICAgICAgICAgICBjb25zdCBS
ZW5kZXJlZERvY3VtZW50TWFya2VyJiBtYXJrZXIgPSBsaXN0LT5hdChtYXJrZXJJbmRleCk7CkBA
IC00MjYsNyArNDI2LDcgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbW92ZU1h
cmtlcnMoTm9kZSogbm9kZSwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclQKICAgICAKICAgICBNYXJr
ZXJNYXA6Oml0ZXJhdG9yIGl0ZXJhdG9yID0gbV9tYXJrZXJzLmZpbmQobm9kZSk7CiAgICAgaWYg
KGl0ZXJhdG9yICE9IG1fbWFya2Vycy5lbmQoKSkKLSAgICAgICAgcmVtb3ZlTWFya2Vyc0Zyb21M
aXN0KG5vZGUsIGl0ZXJhdG9yLT5zZWNvbmQsIG1hcmtlclR5cGVzKTsKKyAgICAgICAgcmVtb3Zl
TWFya2Vyc0Zyb21MaXN0KG5vZGUsIGl0ZXJhdG9yLT52YWx1ZSwgbWFya2VyVHlwZXMpOwogfQog
CiB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVtb3ZlTWFya2VycyhEb2N1bWVudE1h
cmtlcjo6TWFya2VyVHlwZXMgbWFya2VyVHlwZXMpCkBAIC00MzksNyArNDM5LDcgQEAgdm9pZCBE
b2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbW92ZU1hcmtlcnMoRG9jdW1lbnRNYXJrZXI6Ok1h
cmtlclR5cGVzIG1hcmtlclQKICAgICBNYXJrZXJNYXAgbWFya2VyTWFwQ29weSA9IG1fbWFya2Vy
czsKICAgICBNYXJrZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IG1hcmtlck1hcENvcHkuZW5kKCk7CiAg
ICAgZm9yIChNYXJrZXJNYXA6Oml0ZXJhdG9yIGkgPSBtYXJrZXJNYXBDb3B5LmJlZ2luKCk7IGkg
IT0gZW5kOyArK2kpCi0gICAgICAgIHJlbW92ZU1hcmtlcnNGcm9tTGlzdChpLT5maXJzdC5nZXQo
KSwgaS0+c2Vjb25kLCBtYXJrZXJUeXBlcyk7CisgICAgICAgIHJlbW92ZU1hcmtlcnNGcm9tTGlz
dChpLT5rZXkuZ2V0KCksIGktPnZhbHVlLCBtYXJrZXJUeXBlcyk7CiAgICAgbV9wb3NzaWJseUV4
aXN0aW5nTWFya2VyVHlwZXMucmVtb3ZlKG1hcmtlclR5cGVzKTsKIH0KIApAQCAtNDk1LDEwICs0
OTUsMTAgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlcGFpbnRNYXJrZXJzKERv
Y3VtZW50TWFya2VyOjpNYXJrZXJUeXBlcyBtYXJrZXIKICAgICAvLyBvdXRlciBsb29wOiBwcm9j
ZXNzIGVhY2ggbWFya2VyZWQgbm9kZSBpbiB0aGUgZG9jdW1lbnQKICAgICBNYXJrZXJNYXA6Oml0
ZXJhdG9yIGVuZCA9IG1fbWFya2Vycy5lbmQoKTsKICAgICBmb3IgKE1hcmtlck1hcDo6aXRlcmF0
b3IgaSA9IG1fbWFya2Vycy5iZWdpbigpOyBpICE9IGVuZDsgKytpKSB7Ci0gICAgICAgIE5vZGUq
IG5vZGUgPSBpLT5maXJzdC5nZXQoKTsKKyAgICAgICAgTm9kZSogbm9kZSA9IGktPmtleS5nZXQo
KTsKIAogICAgICAgICAvLyBpbm5lciBsb29wOiBwcm9jZXNzIGVhY2ggbWFya2VyIGluIHRoZSBj
dXJyZW50IG5vZGUKLSAgICAgICAgTWFya2VyTGlzdCogbGlzdCA9IGktPnNlY29uZDsKKyAgICAg
ICAgTWFya2VyTGlzdCogbGlzdCA9IGktPnZhbHVlOwogICAgICAgICBib29sIG5vZGVOZWVkc1Jl
cGFpbnQgPSBmYWxzZTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgIT0gbGlzdC0+c2l6
ZSgpOyArK2kpIHsKICAgICAgICAgICAgIERvY3VtZW50TWFya2VyIG1hcmtlciA9IGxpc3QtPmF0
KGkpOwpAQCAtNTI2LDcgKzUyNiw3IEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpp
bnZhbGlkYXRlUmVuZGVyZWRSZWN0c0Zvck1hcmtlcnNJblJlY3QoY29uc3QgTGF5CiAgICAgZm9y
IChNYXJrZXJNYXA6Oml0ZXJhdG9yIGkgPSBtX21hcmtlcnMuYmVnaW4oKTsgaSAhPSBlbmQ7ICsr
aSkgewogCiAgICAgICAgIC8vIGlubmVyIGxvb3A6IHByb2Nlc3MgZWFjaCByZWN0IGluIHRoZSBj
dXJyZW50IG5vZGUKLSAgICAgICAgTWFya2VyTGlzdCogbGlzdCA9IGktPnNlY29uZDsKKyAgICAg
ICAgTWFya2VyTGlzdCogbGlzdCA9IGktPnZhbHVlOwogICAgICAgICBmb3IgKHNpemVfdCBsaXN0
SW5kZXggPSAwOyBsaXN0SW5kZXggPCBsaXN0LT5zaXplKCk7ICsrbGlzdEluZGV4KQogICAgICAg
ICAgICAgbGlzdC0+YXQobGlzdEluZGV4KS5pbnZhbGlkYXRlKHIpOwogICAgIH0KQEAgLTY3NSw5
ICs2NzUsOSBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6c2hvd01hcmtlcnMoKSBj
b25zdAogICAgIGZwcmludGYoc3RkZXJyLCAiJWQgbm9kZXMgaGF2ZSBtYXJrZXJzOlxuIiwgbV9t
YXJrZXJzLnNpemUoKSk7CiAgICAgTWFya2VyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX21h
cmtlcnMuZW5kKCk7CiAgICAgZm9yIChNYXJrZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIG5vZGVJdGVy
YXRvciA9IG1fbWFya2Vycy5iZWdpbigpOyBub2RlSXRlcmF0b3IgIT0gZW5kOyArK25vZGVJdGVy
YXRvcikgewotICAgICAgICBOb2RlKiBub2RlID0gbm9kZUl0ZXJhdG9yLT5maXJzdC5nZXQoKTsK
KyAgICAgICAgTm9kZSogbm9kZSA9IG5vZGVJdGVyYXRvci0+a2V5LmdldCgpOwogICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgIiVwIiwgbm9kZSk7Ci0gICAgICAgIE1hcmtlckxpc3QqIGxpc3QgPSBu
b2RlSXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgTWFya2VyTGlzdCogbGlzdCA9IG5vZGVJdGVy
YXRvci0+dmFsdWU7CiAgICAgICAgIGZvciAodW5zaWduZWQgbWFya2VySW5kZXggPSAwOyBtYXJr
ZXJJbmRleCA8IGxpc3QtPnNpemUoKTsgKyttYXJrZXJJbmRleCkgewogICAgICAgICAgICAgY29u
c3QgRG9jdW1lbnRNYXJrZXImIG1hcmtlciA9IGxpc3QtPmF0KG1hcmtlckluZGV4KTsKICAgICAg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiICVkOlslZDolZF0oJWQpIiwgbWFya2VyLnR5cGUoKSwg
bWFya2VyLnN0YXJ0T2Zmc2V0KCksIG1hcmtlci5lbmRPZmZzZXQoKSwgbWFya2VyLmFjdGl2ZU1h
dGNoKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50T3JkZXJlZE1h
cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRPcmRlcmVkTWFwLmNwcAppbmRleCAw
ODJhYTA3Li4xMjk3ZTUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRP
cmRlcmVkTWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRPcmRlcmVkTWFw
LmNwcApAQCAtOTgsNyArOTgsNyBAQCB2b2lkIERvY3VtZW50T3JkZXJlZE1hcDo6cmVtb3ZlKEF0
b21pY1N0cmluZ0ltcGwqIGtleSwgRWxlbWVudCogZWxlbWVudCkKIAogICAgIG1fbWFwLmNoZWNr
Q29uc2lzdGVuY3koKTsKICAgICBNYXA6Oml0ZXJhdG9yIGNhY2hlZEl0ZW0gPSBtX21hcC5maW5k
KGtleSk7Ci0gICAgaWYgKGNhY2hlZEl0ZW0gIT0gbV9tYXAuZW5kKCkgJiYgY2FjaGVkSXRlbS0+
c2Vjb25kID09IGVsZW1lbnQpCisgICAgaWYgKGNhY2hlZEl0ZW0gIT0gbV9tYXAuZW5kKCkgJiYg
Y2FjaGVkSXRlbS0+dmFsdWUgPT0gZWxlbWVudCkKICAgICAgICAgbV9tYXAucmVtb3ZlKGNhY2hl
ZEl0ZW0pOwogICAgIGVsc2UKICAgICAgICAgbV9kdXBsaWNhdGVDb3VudHMucmVtb3ZlKGtleSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0dHJpYnV0ZURhdGEuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmNwcAppbmRleCA2ZmI1
M2Q1Li5kZWY0MWRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0dHJp
YnV0ZURhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50QXR0cmlidXRlRGF0
YS5jcHAKQEAgLTExMSw3ICsxMTEsNyBAQCBzdGF0aWMgQXR0ckxpc3QqIGVuc3VyZUF0dHJMaXN0
Rm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50KQogICAgIEFTU0VSVCghYXR0ckxpc3RNYXAoKS5j
b250YWlucyhlbGVtZW50KSk7CiAgICAgZWxlbWVudC0+c2V0SGFzQXR0ckxpc3QoKTsKICAgICBB
dHRyTGlzdE1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IGF0dHJMaXN0TWFwKCkuYWRkKGVsZW1lbnQs
IGFkb3B0UHRyKG5ldyBBdHRyTGlzdCkpOwotICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnNl
Y29uZC5nZXQoKTsKKyAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKIH0K
IAogc3RhdGljIHZvaWQgcmVtb3ZlQXR0ckxpc3RGb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwCmluZGV4IGE3NWFhYjAuLmIyMjNm
N2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwCkBAIC0xMTAsNyArMTEw
LDcgQEAgRXZlbnRUYXJnZXQqIEV2ZW50UmVsYXRlZFRhcmdldEFkanVzdGVyOjpmaW5kUmVsYXRl
ZFRhcmdldChUcmVlU2NvcGUqIHNjb3BlKQogICAgICAgICBwYXJlbnRUcmVlU2NvcGVzLmFwcGVu
ZChzY29wZSk7CiAgICAgICAgIFJlbGF0ZWRUYXJnZXRNYXA6OmNvbnN0X2l0ZXJhdG9yIGZvdW5k
ID0gbV9yZWxhdGVkVGFyZ2V0TWFwLmZpbmQoc2NvcGUpOwogICAgICAgICBpZiAoZm91bmQgIT0g
bV9yZWxhdGVkVGFyZ2V0TWFwLmVuZCgpKSB7Ci0gICAgICAgICAgICByZWxhdGVkVGFyZ2V0ID0g
Zm91bmQtPnNlY29uZDsKKyAgICAgICAgICAgIHJlbGF0ZWRUYXJnZXQgPSBmb3VuZC0+dmFsdWU7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBzY29wZSA9IHNjb3BlLT5w
YXJlbnRUcmVlU2NvcGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudExp
c3RlbmVyTWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudExpc3RlbmVyTWFwLmNwcApp
bmRleCBjMWZkNGQ3Li5hZjhjNDhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZl
bnRMaXN0ZW5lck1hcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TGlzdGVuZXJN
YXAuY3BwCkBAIC0xMDIsNyArMTAyLDcgQEAgVmVjdG9yPEF0b21pY1N0cmluZz4gRXZlbnRMaXN0
ZW5lck1hcDo6ZXZlbnRUeXBlcygpIGNvbnN0CiAgICAgICAgIEV2ZW50TGlzdGVuZXJIYXNoTWFw
OjppdGVyYXRvciBpdCA9IG1faGFzaE1hcC0+YmVnaW4oKTsKICAgICAgICAgRXZlbnRMaXN0ZW5l
ckhhc2hNYXA6Oml0ZXJhdG9yIGVuZCA9IG1faGFzaE1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAo
OyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICB0eXBlcy5hcHBlbmQoaXQtPmZpcnN0KTsK
KyAgICAgICAgICAgIHR5cGVzLmFwcGVuZChpdC0+a2V5KTsKICAgICB9IGVsc2UgaWYgKG1fc2lu
Z2xlRXZlbnRMaXN0ZW5lclZlY3RvcikKICAgICAgICAgdHlwZXMuYXBwZW5kKG1fc2luZ2xlRXZl
bnRMaXN0ZW5lclR5cGUpOwogCkBAIC0xMzYsOSArMTM2LDkgQEAgYm9vbCBFdmVudExpc3RlbmVy
TWFwOjphZGQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRM
aXN0ZW4KICAgICBpZiAobV9oYXNoTWFwKSB7CiAgICAgICAgIEV2ZW50TGlzdGVuZXJIYXNoTWFw
OjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9oYXNoTWFwLT5hZGQoZXZlbnRUeXBlLCBudWxscHRyKTsK
ICAgICAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICAgICAgcmVzdWx0Lml0ZXJh
dG9yLT5zZWNvbmQgPSBhZG9wdFB0cihuZXcgRXZlbnRMaXN0ZW5lclZlY3Rvcik7CisgICAgICAg
ICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gYWRvcHRQdHIobmV3IEV2ZW50TGlzdGVuZXJW
ZWN0b3IpOwogCi0gICAgICAgIHJldHVybiBhZGRMaXN0ZW5lclRvVmVjdG9yKHJlc3VsdC5pdGVy
YXRvci0+c2Vjb25kLmdldCgpLCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSk7CisgICAgICAgIHJldHVy
biBhZGRMaXN0ZW5lclRvVmVjdG9yKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0KCksIGxpc3Rl
bmVyLCB1c2VDYXB0dXJlKTsKICAgICB9CiAKICAgICBpZiAoIW1fc2luZ2xlRXZlbnRMaXN0ZW5l
clZlY3RvcikgewpAQCAtMTc5LDggKzE3OSw4IEBAIGJvb2wgRXZlbnRMaXN0ZW5lck1hcDo6cmVt
b3ZlKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyKiBsaXN0CiAg
ICAgaWYgKGl0ID09IG1faGFzaE1hcC0+ZW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIGJvb2wgd2FzUmVtb3ZlZCA9IHJlbW92ZUxpc3RlbmVyRnJvbVZlY3RvcihpdC0+c2Vjb25k
LmdldCgpLCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSwgaW5kZXhPZlJlbW92ZWRMaXN0ZW5lcik7Ci0g
ICAgaWYgKGl0LT5zZWNvbmQtPmlzRW1wdHkoKSkKKyAgICBib29sIHdhc1JlbW92ZWQgPSByZW1v
dmVMaXN0ZW5lckZyb21WZWN0b3IoaXQtPnZhbHVlLmdldCgpLCBsaXN0ZW5lciwgdXNlQ2FwdHVy
ZSwgaW5kZXhPZlJlbW92ZWRMaXN0ZW5lcik7CisgICAgaWYgKGl0LT52YWx1ZS0+aXNFbXB0eSgp
KQogICAgICAgICBtX2hhc2hNYXAtPnJlbW92ZShpdCk7CiAgICAgcmV0dXJuIHdhc1JlbW92ZWQ7
CiB9CkBAIC0xOTMsNyArMTkzLDcgQEAgRXZlbnRMaXN0ZW5lclZlY3RvciogRXZlbnRMaXN0ZW5l
ck1hcDo6ZmluZChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSkKICAgICAgICAgRXZlbnRM
aXN0ZW5lckhhc2hNYXA6Oml0ZXJhdG9yIGl0ID0gbV9oYXNoTWFwLT5maW5kKGV2ZW50VHlwZSk7
CiAgICAgICAgIGlmIChpdCA9PSBtX2hhc2hNYXAtPmVuZCgpKQogICAgICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgICAgIHJldHVybiBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICByZXR1cm4gaXQt
PnZhbHVlLmdldCgpOwogICAgIH0KIAogICAgIGlmIChtX3NpbmdsZUV2ZW50TGlzdGVuZXJUeXBl
ID09IGV2ZW50VHlwZSkKQEAgLTIyNyw3ICsyMjcsNyBAQCB2b2lkIEV2ZW50TGlzdGVuZXJNYXA6
OnJlbW92ZUZpcnN0RXZlbnRMaXN0ZW5lckNyZWF0ZWRGcm9tTWFya3VwKGNvbnN0IEF0b21pY1N0
cgogICAgICAgICBFdmVudExpc3RlbmVySGFzaE1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gbV9oYXNo
TWFwLT5maW5kKGV2ZW50VHlwZSk7CiAgICAgICAgIEFTU0VSVChyZXN1bHQgIT0gbV9oYXNoTWFw
LT5lbmQoKSk7CiAKLSAgICAgICAgRXZlbnRMaXN0ZW5lclZlY3RvciogbGlzdGVuZXJWZWN0b3Ig
PSByZXN1bHQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgRXZlbnRMaXN0ZW5lclZlY3RvciogbGlz
dGVuZXJWZWN0b3IgPSByZXN1bHQtPnZhbHVlLmdldCgpOwogICAgICAgICBBU1NFUlQobGlzdGVu
ZXJWZWN0b3IpOwogCiAgICAgICAgIHJlbW92ZUZpcnN0TGlzdGVuZXJDcmVhdGVkRnJvbU1hcmt1
cChsaXN0ZW5lclZlY3Rvcik7CkBAIC0yNjUsNyArMjY1LDcgQEAgdm9pZCBFdmVudExpc3RlbmVy
TWFwOjpjb3B5RXZlbnRMaXN0ZW5lcnNOb3RDcmVhdGVkRnJvbU1hcmt1cFRvVGFyZ2V0KEV2ZW50
VGFyZ2UKICAgICBpZiAobV9oYXNoTWFwKSB7CiAgICAgICAgIEV2ZW50TGlzdGVuZXJIYXNoTWFw
OjppdGVyYXRvciBlbmQgPSBtX2hhc2hNYXAtPmVuZCgpOwogICAgICAgICBmb3IgKEV2ZW50TGlz
dGVuZXJIYXNoTWFwOjppdGVyYXRvciBpdCA9IG1faGFzaE1hcC0+YmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KQotICAgICAgICAgICAgY29weUxpc3RlbmVyc05vdENyZWF0ZWRGcm9tTWFya3VwVG9U
YXJnZXQoaXQtPmZpcnN0LCBpdC0+c2Vjb25kLmdldCgpLCB0YXJnZXQpOworICAgICAgICAgICAg
Y29weUxpc3RlbmVyc05vdENyZWF0ZWRGcm9tTWFya3VwVG9UYXJnZXQoaXQtPmtleSwgaXQtPnZh
bHVlLmdldCgpLCB0YXJnZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0zMjUsNyAr
MzI1LDcgQEAgRXZlbnRMaXN0ZW5lciogRXZlbnRMaXN0ZW5lckl0ZXJhdG9yOjpuZXh0TGlzdGVu
ZXIoKQogCiAgICAgaWYgKG1fbWFwLT5tX2hhc2hNYXApIHsKICAgICAgICAgZm9yICg7IG1fbWFw
SXRlcmF0b3IgIT0gbV9tYXBFbmQ7ICsrbV9tYXBJdGVyYXRvcikgewotICAgICAgICAgICAgRXZl
bnRMaXN0ZW5lclZlY3RvciYgbGlzdGVuZXJzID0gKm1fbWFwSXRlcmF0b3ItPnNlY29uZDsKKyAg
ICAgICAgICAgIEV2ZW50TGlzdGVuZXJWZWN0b3ImIGxpc3RlbmVycyA9ICptX21hcEl0ZXJhdG9y
LT52YWx1ZTsKICAgICAgICAgICAgIGlmIChtX2luZGV4IDwgbGlzdGVuZXJzLnNpemUoKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gbGlzdGVuZXJzW21faW5kZXgrK10ubGlzdGVuZXIuZ2V0KCk7
CiAgICAgICAgICAgICBtX2luZGV4ID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9JZFRhcmdldE9ic2VydmVyUmVnaXN0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0lkVGFy
Z2V0T2JzZXJ2ZXJSZWdpc3RyeS5jcHAKaW5kZXggNWZjMjZhYy4uYWFmYThhMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL0lkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL0lkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeS5jcHAKQEAgLTQyLDkg
KzQyLDkgQEAgdm9pZCBJZFRhcmdldE9ic2VydmVyUmVnaXN0cnk6OmFkZE9ic2VydmVyKGNvbnN0
IEF0b21pY1N0cmluZyYgaWQsIElkVGFyZ2V0T2JzZXIKICAgICAKICAgICBJZFRvT2JzZXJ2ZXJT
ZXRNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX3JlZ2lzdHJ5LmFkZChpZC5pbXBsKCksIG51bGxw
dHIpOwogICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9y
LT5zZWNvbmQgPSBhZG9wdFB0cihuZXcgT2JzZXJ2ZXJTZXQoKSk7CisgICAgICAgIHJlc3VsdC5p
dGVyYXRvci0+dmFsdWUgPSBhZG9wdFB0cihuZXcgT2JzZXJ2ZXJTZXQoKSk7CiAKLSAgICByZXN1
bHQuaXRlcmF0b3ItPnNlY29uZC0+YWRkKG9ic2VydmVyKTsKKyAgICByZXN1bHQuaXRlcmF0b3It
PnZhbHVlLT5hZGQob2JzZXJ2ZXIpOwogfQogCiB2b2lkIElkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3Ry
eTo6cmVtb3ZlT2JzZXJ2ZXIoY29uc3QgQXRvbWljU3RyaW5nJiBpZCwgSWRUYXJnZXRPYnNlcnZl
ciogb2JzZXJ2ZXIpCkBAIC01NCw3ICs1NCw3IEBAIHZvaWQgSWRUYXJnZXRPYnNlcnZlclJlZ2lz
dHJ5OjpyZW1vdmVPYnNlcnZlcihjb25zdCBBdG9taWNTdHJpbmcmIGlkLCBJZFRhcmdldE9iCiAK
ICAgICBJZFRvT2JzZXJ2ZXJTZXRNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3JlZ2lzdHJ5LmZpbmQo
aWQuaW1wbCgpKTsKIAotICAgIE9ic2VydmVyU2V0KiBzZXQgPSBpdGVyLT5zZWNvbmQuZ2V0KCk7
CisgICAgT2JzZXJ2ZXJTZXQqIHNldCA9IGl0ZXItPnZhbHVlLmdldCgpOwogICAgIHNldC0+cmVt
b3ZlKG9ic2VydmVyKTsKICAgICBpZiAoc2V0LT5pc0VtcHR5KCkgJiYgc2V0ICE9IG1fbm90aWZ5
aW5nT2JzZXJ2ZXJzSW5TZXQpCiAgICAgICAgIG1fcmVnaXN0cnkucmVtb3ZlKGl0ZXIpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3Vw
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cC5j
cHAKaW5kZXggMjRjMGNiNS4uNGZhZDIyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L011dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vTXV0YXRpb25PYnNlcnZlckludGVyZXN0R3JvdXAuY3BwCkBAIC02Miw3ICs2Miw3IEBAIE11
dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3VwOjpNdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91
cChIYXNoTWFwPE11dGF0aW9uT2JzCiBib29sIE11dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3Vw
Ojppc09sZFZhbHVlUmVxdWVzdGVkKCkKIHsKICAgICBmb3IgKEhhc2hNYXA8TXV0YXRpb25PYnNl
cnZlciosIE11dGF0aW9uUmVjb3JkRGVsaXZlcnlPcHRpb25zPjo6aXRlcmF0b3IgaXRlciA9IG1f
b2JzZXJ2ZXJzLmJlZ2luKCk7IGl0ZXIgIT0gbV9vYnNlcnZlcnMuZW5kKCk7ICsraXRlcikgewot
ICAgICAgICBpZiAoaGFzT2xkVmFsdWUoaXRlci0+c2Vjb25kKSkKKyAgICAgICAgaWYgKGhhc09s
ZFZhbHVlKGl0ZXItPnZhbHVlKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAg
ICByZXR1cm4gZmFsc2U7CkBAIC03Myw4ICs3Myw4IEBAIHZvaWQgTXV0YXRpb25PYnNlcnZlcklu
dGVyZXN0R3JvdXA6OmVucXVldWVNdXRhdGlvblJlY29yZChQYXNzUmVmUHRyPE11dGF0aW9uUmVj
CiAgICAgUmVmUHRyPE11dGF0aW9uUmVjb3JkPiBtdXRhdGlvbiA9IHBycE11dGF0aW9uOwogICAg
IFJlZlB0cjxNdXRhdGlvblJlY29yZD4gbXV0YXRpb25XaXRoTnVsbE9sZFZhbHVlOwogICAgIGZv
ciAoSGFzaE1hcDxNdXRhdGlvbk9ic2VydmVyKiwgTXV0YXRpb25SZWNvcmREZWxpdmVyeU9wdGlv
bnM+OjppdGVyYXRvciBpdGVyID0gbV9vYnNlcnZlcnMuYmVnaW4oKTsgaXRlciAhPSBtX29ic2Vy
dmVycy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIE11dGF0aW9uT2JzZXJ2ZXIqIG9ic2VydmVy
ID0gaXRlci0+Zmlyc3Q7Ci0gICAgICAgIGlmIChoYXNPbGRWYWx1ZShpdGVyLT5zZWNvbmQpKSB7
CisgICAgICAgIE11dGF0aW9uT2JzZXJ2ZXIqIG9ic2VydmVyID0gaXRlci0+a2V5OworICAgICAg
ICBpZiAoaGFzT2xkVmFsdWUoaXRlci0+dmFsdWUpKSB7CiAgICAgICAgICAgICBvYnNlcnZlci0+
ZW5xdWV1ZU11dGF0aW9uUmVjb3JkKG11dGF0aW9uKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKaW5kZXggZjMwYzNmY2IuLjMwOTM4MTUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
Tm9kZS5jcHAKQEAgLTI3Myw3ICsyNzMsNyBAQCB2b2lkIE5vZGU6OmR1bXBTdGF0aXN0aWNzKCkK
IAogICAgIHByaW50ZigiRWxlbWVudCB0YWcgbmFtZSBkaXN0aWJ1dGlvbjpcbiIpOwogICAgIGZv
ciAoSGFzaE1hcDxTdHJpbmcsIHNpemVfdD46Oml0ZXJhdG9yIGl0ID0gcGVyVGFnQ291bnQuYmVn
aW4oKTsgaXQgIT0gcGVyVGFnQ291bnQuZW5kKCk7ICsraXQpCi0gICAgICAgIHByaW50ZigiICBO
dW1iZXIgb2YgPCVzPiB0YWdzOiAlenVcbiIsIGl0LT5maXJzdC51dGY4KCkuZGF0YSgpLCBpdC0+
c2Vjb25kKTsKKyAgICAgICAgcHJpbnRmKCIgIE51bWJlciBvZiA8JXM+IHRhZ3M6ICV6dVxuIiwg
aXQtPmZpcnN0LnV0ZjgoKS5kYXRhKCksIGl0LT52YWx1ZSk7CiAKICAgICBwcmludGYoIkF0dHJp
YnV0ZXM6XG4iKTsKICAgICBwcmludGYoIiAgTnVtYmVyIG9mIEF0dHJpYnV0ZXMgKG5vbi1Ob2Rl
IGFuZCBOb2RlKTogJXp1IFslenVdXG4iLCBhdHRyaWJ1dGVzLCBzaXplb2YoQXR0cmlidXRlKSk7
CkBAIC01MDYsNyArNTA2LDcgQEAgdm9pZCBOb2RlOjpjbGVhclJhcmVEYXRhKCkKICAgICAgICAg
Tm9kZVJhcmVEYXRhOjpOb2RlUmFyZURhdGFNYXAmIGRhdGFNYXAgPSBOb2RlUmFyZURhdGE6OnJh
cmVEYXRhTWFwKCk7CiAgICAgICAgIE5vZGVSYXJlRGF0YTo6Tm9kZVJhcmVEYXRhTWFwOjppdGVy
YXRvciBpdCA9IGRhdGFNYXAuZmluZCh0aGlzKTsKICAgICAgICAgQVNTRVJUKGl0ICE9IGRhdGFN
YXAuZW5kKCkpOwotICAgICAgICBkZWxldGUgaXQtPnNlY29uZDsKKyAgICAgICAgZGVsZXRlIGl0
LT52YWx1ZTsKICAgICAgICAgZGF0YU1hcC5yZW1vdmUoaXQpOwogICAgIH0KICAgICBjbGVhckZs
YWcoSGFzUmFyZURhdGFGbGFnKTsKQEAgLTIyNTYsMTggKzIyNTYsMTggQEAgdm9pZCBOb2RlTGlz
dHNOb2RlRGF0YTo6aW52YWxpZGF0ZUNhY2hlcyhjb25zdCBRdWFsaWZpZWROYW1lKiBhdHRyTmFt
ZSkKIHsKICAgICBOb2RlTGlzdEF0b21pY05hbWVDYWNoZU1hcDo6Y29uc3RfaXRlcmF0b3IgYXRv
bWljTmFtZUNhY2hlRW5kID0gbV9hdG9taWNOYW1lQ2FjaGVzLmVuZCgpOwogICAgIGZvciAoTm9k
ZUxpc3RBdG9taWNOYW1lQ2FjaGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9hdG9taWNOYW1l
Q2FjaGVzLmJlZ2luKCk7IGl0ICE9IGF0b21pY05hbWVDYWNoZUVuZDsgKytpdCkKLSAgICAgICAg
aXQtPnNlY29uZC0+aW52YWxpZGF0ZUNhY2hlKGF0dHJOYW1lKTsKKyAgICAgICAgaXQtPnZhbHVl
LT5pbnZhbGlkYXRlQ2FjaGUoYXR0ck5hbWUpOwogCiAgICAgTm9kZUxpc3ROYW1lQ2FjaGVNYXA6
OmNvbnN0X2l0ZXJhdG9yIG5hbWVDYWNoZUVuZCA9IG1fbmFtZUNhY2hlcy5lbmQoKTsKICAgICBm
b3IgKE5vZGVMaXN0TmFtZUNhY2hlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fbmFtZUNhY2hl
cy5iZWdpbigpOyBpdCAhPSBuYW1lQ2FjaGVFbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQt
PmludmFsaWRhdGVDYWNoZShhdHRyTmFtZSk7CisgICAgICAgIGl0LT52YWx1ZS0+aW52YWxpZGF0
ZUNhY2hlKGF0dHJOYW1lKTsKIAogICAgIGlmICghYXR0ck5hbWUpCiAgICAgICAgIHJldHVybjsK
IAogICAgIFRhZ05vZGVMaXN0Q2FjaGVOUzo6aXRlcmF0b3IgdGFnQ2FjaGVFbmQgPSBtX3RhZ05v
ZGVMaXN0Q2FjaGVOUy5lbmQoKTsKICAgICBmb3IgKFRhZ05vZGVMaXN0Q2FjaGVOUzo6aXRlcmF0
b3IgaXQgPSBtX3RhZ05vZGVMaXN0Q2FjaGVOUy5iZWdpbigpOyBpdCAhPSB0YWdDYWNoZUVuZDsg
KytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+aW52YWxpZGF0ZUNhY2hlKCk7CisgICAgICAgIGl0
LT52YWx1ZS0+aW52YWxpZGF0ZUNhY2hlKCk7CiB9CiAKIHZvaWQgTm9kZTo6Z2V0U3VicmVzb3Vy
Y2VVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiB1cmxzKSBjb25zdApAQCAtMjQyNCw3ICsyNDI0LDcg
QEAgdm9pZCBOb2RlOjpjb2xsZWN0TWF0Y2hpbmdPYnNlcnZlcnNGb3JNdXRhdGlvbihIYXNoTWFw
PE11dGF0aW9uT2JzZXJ2ZXIqLCBNdXRhdGkKICAgICAgICAgICAgICAgICBNdXRhdGlvblJlY29y
ZERlbGl2ZXJ5T3B0aW9ucyBkZWxpdmVyeU9wdGlvbnMgPSByZWdpc3RyYXRpb24tPmRlbGl2ZXJ5
T3B0aW9ucygpOwogICAgICAgICAgICAgICAgIEhhc2hNYXA8TXV0YXRpb25PYnNlcnZlciosIE11
dGF0aW9uUmVjb3JkRGVsaXZlcnlPcHRpb25zPjo6QWRkUmVzdWx0IHJlc3VsdCA9IG9ic2VydmVy
cy5hZGQocmVnaXN0cmF0aW9uLT5vYnNlcnZlcigpLCBkZWxpdmVyeU9wdGlvbnMpOwogICAgICAg
ICAgICAgICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgICAgICAgICAgICAgIHJl
c3VsdC5pdGVyYXRvci0+c2Vjb25kIHw9IGRlbGl2ZXJ5T3B0aW9uczsKKyAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSB8PSBkZWxpdmVyeU9wdGlvbnM7CiAKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQpAQCAtMjQzNyw3ICsyNDM3LDcgQEAgdm9pZCBOb2RlOjpjb2xs
ZWN0TWF0Y2hpbmdPYnNlcnZlcnNGb3JNdXRhdGlvbihIYXNoTWFwPE11dGF0aW9uT2JzZXJ2ZXIq
LCBNdXRhdGkKICAgICAgICAgICAgICAgICBNdXRhdGlvblJlY29yZERlbGl2ZXJ5T3B0aW9ucyBk
ZWxpdmVyeU9wdGlvbnMgPSByZWdpc3RyYXRpb24tPmRlbGl2ZXJ5T3B0aW9ucygpOwogICAgICAg
ICAgICAgICAgIEhhc2hNYXA8TXV0YXRpb25PYnNlcnZlciosIE11dGF0aW9uUmVjb3JkRGVsaXZl
cnlPcHRpb25zPjo6QWRkUmVzdWx0IHJlc3VsdCA9IG9ic2VydmVycy5hZGQocmVnaXN0cmF0aW9u
LT5vYnNlcnZlcigpLCBkZWxpdmVyeU9wdGlvbnMpOwogICAgICAgICAgICAgICAgIGlmICghcmVz
dWx0LmlzTmV3RW50cnkpCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vj
b25kIHw9IGRlbGl2ZXJ5T3B0aW9uczsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZSB8PSBkZWxpdmVyeU9wdGlvbnM7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRhLmggYi9T
b3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRhLmgKaW5kZXggMGJkYzNlOC4uM2E2OWI5YmUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRhLmgKQEAgLTY4LDEwICs2OCwxMCBAQCBwdWJsaWM6
CiAgICAgewogICAgICAgICBOb2RlTGlzdEF0b21pY05hbWVDYWNoZU1hcDo6QWRkUmVzdWx0IHJl
c3VsdCA9IG1fYXRvbWljTmFtZUNhY2hlcy5hZGQobmFtZWROb2RlTGlzdEtleShsaXN0VHlwZSwg
bmFtZSksIDApOwogICAgICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFQqPihyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7CisgICAgICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VCo+KHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwogCiAg
ICAgICAgIFJlZlB0cjxUPiBsaXN0ID0gVDo6Y3JlYXRlKG5vZGUsIG5hbWUpOwotICAgICAgICBy
ZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IGxpc3QuZ2V0KCk7CisgICAgICAgIHJlc3VsdC5pdGVy
YXRvci0+dmFsdWUgPSBsaXN0LmdldCgpOwogICAgICAgICByZXR1cm4gbGlzdC5yZWxlYXNlKCk7
CiAgICAgfQogCkBAIC04MCwxMCArODAsMTAgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgTm9k
ZUxpc3ROYW1lQ2FjaGVNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX25hbWVDYWNoZXMuYWRkKG5h
bWVkTm9kZUxpc3RLZXkobGlzdFR5cGUsIG5hbWUpLCAwKTsKICAgICAgICAgaWYgKCFyZXN1bHQu
aXNOZXdFbnRyeSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUKj4ocmVzdWx0Lml0
ZXJhdG9yLT5zZWNvbmQpOworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQqPihyZXN1
bHQuaXRlcmF0b3ItPnZhbHVlKTsKIAogICAgICAgICBSZWZQdHI8VD4gbGlzdCA9IFQ6OmNyZWF0
ZShub2RlLCBuYW1lKTsKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBsaXN0Lmdl
dCgpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gbGlzdC5nZXQoKTsKICAgICAg
ICAgcmV0dXJuIGxpc3QucmVsZWFzZSgpOwogICAgIH0KIApAQCAtOTIsMTAgKzkyLDEwIEBAIHB1
YmxpYzoKICAgICAgICAgUXVhbGlmaWVkTmFtZSBuYW1lKG51bGxBdG9tLCBsb2NhbE5hbWUsIG5h
bWVzcGFjZVVSSSk7CiAgICAgICAgIFRhZ05vZGVMaXN0Q2FjaGVOUzo6QWRkUmVzdWx0IHJlc3Vs
dCA9IG1fdGFnTm9kZUxpc3RDYWNoZU5TLmFkZChuYW1lLCAwKTsKICAgICAgICAgaWYgKCFyZXN1
bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnNlY29u
ZDsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogCiAgICAgICAg
IFJlZlB0cjxUYWdOb2RlTGlzdD4gbGlzdCA9IFRhZ05vZGVMaXN0OjpjcmVhdGUobm9kZSwgbmFt
ZXNwYWNlVVJJLCBsb2NhbE5hbWUpOwotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9
IGxpc3QuZ2V0KCk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBsaXN0LmdldCgp
OwogICAgICAgICByZXR1cm4gbGlzdC5yZWxlYXNlKCk7CiAgICAgfQogCkBAIC0xMzYsNyArMTM2
LDcgQEAgcHVibGljOgogICAgICAgICBpZiAob2xkRG9jdW1lbnQgIT0gbmV3RG9jdW1lbnQpIHsK
ICAgICAgICAgICAgIE5vZGVMaXN0QXRvbWljTmFtZUNhY2hlTWFwOjpjb25zdF9pdGVyYXRvciBh
dG9taWNOYW1lQ2FjaGVFbmQgPSBtX2F0b21pY05hbWVDYWNoZXMuZW5kKCk7CiAgICAgICAgICAg
ICBmb3IgKE5vZGVMaXN0QXRvbWljTmFtZUNhY2hlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1f
YXRvbWljTmFtZUNhY2hlcy5iZWdpbigpOyBpdCAhPSBhdG9taWNOYW1lQ2FjaGVFbmQ7ICsraXQp
IHsKLSAgICAgICAgICAgICAgICBEeW5hbWljU3VidHJlZU5vZGVMaXN0KiBsaXN0ID0gaXQtPnNl
Y29uZDsKKyAgICAgICAgICAgICAgICBEeW5hbWljU3VidHJlZU5vZGVMaXN0KiBsaXN0ID0gaXQt
PnZhbHVlOwogICAgICAgICAgICAgICAgIGlmIChsaXN0LT5pc1Jvb3RlZEF0RG9jdW1lbnQoKSkg
ewogICAgICAgICAgICAgICAgICAgICBvbGREb2N1bWVudC0+dW5yZWdpc3Rlck5vZGVMaXN0Q2Fj
aGUobGlzdCk7CiAgICAgICAgICAgICAgICAgICAgIG5ld0RvY3VtZW50LT5yZWdpc3Rlck5vZGVM
aXN0Q2FjaGUobGlzdCk7CkBAIC0xNDUsNyArMTQ1LDcgQEAgcHVibGljOgogCiAgICAgICAgICAg
ICBOb2RlTGlzdE5hbWVDYWNoZU1hcDo6Y29uc3RfaXRlcmF0b3IgbmFtZUNhY2hlRW5kID0gbV9u
YW1lQ2FjaGVzLmVuZCgpOwogICAgICAgICAgICAgZm9yIChOb2RlTGlzdE5hbWVDYWNoZU1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtX25hbWVDYWNoZXMuYmVnaW4oKTsgaXQgIT0gbmFtZUNhY2hl
RW5kOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAgRHluYW1pY1N1YnRyZWVOb2RlTGlzdCogbGlz
dCA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICAgICAgRHluYW1pY1N1YnRyZWVOb2RlTGlzdCog
bGlzdCA9IGl0LT52YWx1ZTsKICAgICAgICAgICAgICAgICBpZiAobGlzdC0+aXNSb290ZWRBdERv
Y3VtZW50KCkpIHsKICAgICAgICAgICAgICAgICAgICAgb2xkRG9jdW1lbnQtPnVucmVnaXN0ZXJO
b2RlTGlzdENhY2hlKGxpc3QpOwogICAgICAgICAgICAgICAgICAgICBuZXdEb2N1bWVudC0+cmVn
aXN0ZXJOb2RlTGlzdENhY2hlKGxpc3QpOwpAQCAtMTU0LDcgKzE1NCw3IEBAIHB1YmxpYzoKIAog
ICAgICAgICAgICAgVGFnTm9kZUxpc3RDYWNoZU5TOjpjb25zdF9pdGVyYXRvciB0YWdFbmQgPSBt
X3RhZ05vZGVMaXN0Q2FjaGVOUy5lbmQoKTsKICAgICAgICAgICAgIGZvciAoVGFnTm9kZUxpc3RD
YWNoZU5TOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGFnTm9kZUxpc3RDYWNoZU5TLmJlZ2luKCk7
IGl0ICE9IHRhZ0VuZDsgKytpdCkgewotICAgICAgICAgICAgICAgIER5bmFtaWNTdWJ0cmVlTm9k
ZUxpc3QqIGxpc3QgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgICAgIER5bmFtaWNTdWJ0cmVl
Tm9kZUxpc3QqIGxpc3QgPSBpdC0+dmFsdWU7CiAgICAgICAgICAgICAgICAgQVNTRVJUKCFsaXN0
LT5pc1Jvb3RlZEF0RG9jdW1lbnQoKSk7CiAgICAgICAgICAgICAgICAgb2xkRG9jdW1lbnQtPnVu
cmVnaXN0ZXJOb2RlTGlzdENhY2hlKGxpc3QpOwogICAgICAgICAgICAgICAgIG5ld0RvY3VtZW50
LT5yZWdpc3Rlck5vZGVMaXN0Q2FjaGUobGlzdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Qcm9j
ZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwCmluZGV4IDZiYmE1NmMuLjdmODllYmYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwCkBAIC0xMTcsNyArMTE3LDcg
QEAgdm9pZCBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246OmNoZWNrU3R5bGVTaGVldCgpCiAgICAgICAg
IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpID0gYXR0cnMuZmluZCgi
dHlwZSIpOwogICAgICAgICBTdHJpbmcgdHlwZTsKICAgICAgICAgaWYgKGkgIT0gYXR0cnMuZW5k
KCkpCi0gICAgICAgICAgICB0eXBlID0gaS0+c2Vjb25kOworICAgICAgICAgICAgdHlwZSA9IGkt
PnZhbHVlOwogCiAgICAgICAgIG1faXNDU1MgPSB0eXBlLmlzRW1wdHkoKSB8fCB0eXBlID09ICJ0
ZXh0L2NzcyI7CiAjaWYgRU5BQkxFKFhTTFQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0
RXhlY3V0aW9uQ29udGV4dC5jcHAKaW5kZXggOTI0NDVjYS4uNTM1YjU3MCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcApAQCAtMTczLDkgKzE3Myw5
IEBAIGJvb2wgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6Y2FuU3VzcGVuZEFjdGl2ZURPTU9iamVj
dHMoKQogICAgIG1faXRlcmF0aW5nQWN0aXZlRE9NT2JqZWN0cyA9IHRydWU7CiAgICAgSGFzaE1h
cDxBY3RpdmVET01PYmplY3QqLCB2b2lkKj46Oml0ZXJhdG9yIGFjdGl2ZU9iamVjdHNFbmQgPSBt
X2FjdGl2ZURPTU9iamVjdHMuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPEFjdGl2ZURPTU9iamVj
dCosIHZvaWQqPjo6aXRlcmF0b3IgaXRlciA9IG1fYWN0aXZlRE9NT2JqZWN0cy5iZWdpbigpOyBp
dGVyICE9IGFjdGl2ZU9iamVjdHNFbmQ7ICsraXRlcikgewotICAgICAgICBBU1NFUlQoaXRlci0+
Zmlyc3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSA9PSB0aGlzKTsKLSAgICAgICAgQVNTRVJU
KGl0ZXItPmZpcnN0LT5zdXNwZW5kSWZOZWVkZWRDYWxsZWQoKSk7Ci0gICAgICAgIGlmICghaXRl
ci0+Zmlyc3QtPmNhblN1c3BlbmQoKSkgeworICAgICAgICBBU1NFUlQoaXRlci0+a2V5LT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCkgPT0gdGhpcyk7CisgICAgICAgIEFTU0VSVChpdGVyLT5rZXkt
PnN1c3BlbmRJZk5lZWRlZENhbGxlZCgpKTsKKyAgICAgICAgaWYgKCFpdGVyLT5rZXktPmNhblN1
c3BlbmQoKSkgewogICAgICAgICAgICAgbV9pdGVyYXRpbmdBY3RpdmVET01PYmplY3RzID0gZmFs
c2U7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KQEAgLTE5MCw5ICsxOTAs
OSBAQCB2b2lkIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnN1c3BlbmRBY3RpdmVET01PYmplY3Rz
KEFjdGl2ZURPTU9iamVjdDo6UmVhc29uRm9yUwogICAgIG1faXRlcmF0aW5nQWN0aXZlRE9NT2Jq
ZWN0cyA9IHRydWU7CiAgICAgSGFzaE1hcDxBY3RpdmVET01PYmplY3QqLCB2b2lkKj46Oml0ZXJh
dG9yIGFjdGl2ZU9iamVjdHNFbmQgPSBtX2FjdGl2ZURPTU9iamVjdHMuZW5kKCk7CiAgICAgZm9y
IChIYXNoTWFwPEFjdGl2ZURPTU9iamVjdCosIHZvaWQqPjo6aXRlcmF0b3IgaXRlciA9IG1fYWN0
aXZlRE9NT2JqZWN0cy5iZWdpbigpOyBpdGVyICE9IGFjdGl2ZU9iamVjdHNFbmQ7ICsraXRlcikg
ewotICAgICAgICBBU1NFUlQoaXRlci0+Zmlyc3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSA9
PSB0aGlzKTsKLSAgICAgICAgQVNTRVJUKGl0ZXItPmZpcnN0LT5zdXNwZW5kSWZOZWVkZWRDYWxs
ZWQoKSk7Ci0gICAgICAgIGl0ZXItPmZpcnN0LT5zdXNwZW5kKHdoeSk7CisgICAgICAgIEFTU0VS
VChpdGVyLT5rZXktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSA9PSB0aGlzKTsKKyAgICAgICAg
QVNTRVJUKGl0ZXItPmtleS0+c3VzcGVuZElmTmVlZGVkQ2FsbGVkKCkpOworICAgICAgICBpdGVy
LT5rZXktPnN1c3BlbmQod2h5KTsKICAgICB9CiAgICAgbV9pdGVyYXRpbmdBY3RpdmVET01PYmpl
Y3RzID0gZmFsc2U7CiAgICAgbV9hY3RpdmVET01PYmplY3RzQXJlU3VzcGVuZGVkID0gdHJ1ZTsK
QEAgLTIwNiw5ICsyMDYsOSBAQCB2b2lkIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnJlc3VtZUFj
dGl2ZURPTU9iamVjdHMoKQogICAgIG1faXRlcmF0aW5nQWN0aXZlRE9NT2JqZWN0cyA9IHRydWU7
CiAgICAgSGFzaE1hcDxBY3RpdmVET01PYmplY3QqLCB2b2lkKj46Oml0ZXJhdG9yIGFjdGl2ZU9i
amVjdHNFbmQgPSBtX2FjdGl2ZURPTU9iamVjdHMuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPEFj
dGl2ZURPTU9iamVjdCosIHZvaWQqPjo6aXRlcmF0b3IgaXRlciA9IG1fYWN0aXZlRE9NT2JqZWN0
cy5iZWdpbigpOyBpdGVyICE9IGFjdGl2ZU9iamVjdHNFbmQ7ICsraXRlcikgewotICAgICAgICBB
U1NFUlQoaXRlci0+Zmlyc3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSA9PSB0aGlzKTsKLSAg
ICAgICAgQVNTRVJUKGl0ZXItPmZpcnN0LT5zdXNwZW5kSWZOZWVkZWRDYWxsZWQoKSk7Ci0gICAg
ICAgIGl0ZXItPmZpcnN0LT5yZXN1bWUoKTsKKyAgICAgICAgQVNTRVJUKGl0ZXItPmtleS0+c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpID09IHRoaXMpOworICAgICAgICBBU1NFUlQoaXRlci0+a2V5
LT5zdXNwZW5kSWZOZWVkZWRDYWxsZWQoKSk7CisgICAgICAgIGl0ZXItPmtleS0+cmVzdW1lKCk7
CiAgICAgfQogICAgIG1faXRlcmF0aW5nQWN0aXZlRE9NT2JqZWN0cyA9IGZhbHNlOwogfQpAQCAt
MjIwLDkgKzIyMCw5IEBAIHZvaWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6c3RvcEFjdGl2ZURP
TU9iamVjdHMoKQogICAgIG1faXRlcmF0aW5nQWN0aXZlRE9NT2JqZWN0cyA9IHRydWU7CiAgICAg
SGFzaE1hcDxBY3RpdmVET01PYmplY3QqLCB2b2lkKj46Oml0ZXJhdG9yIGFjdGl2ZU9iamVjdHNF
bmQgPSBtX2FjdGl2ZURPTU9iamVjdHMuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPEFjdGl2ZURP
TU9iamVjdCosIHZvaWQqPjo6aXRlcmF0b3IgaXRlciA9IG1fYWN0aXZlRE9NT2JqZWN0cy5iZWdp
bigpOyBpdGVyICE9IGFjdGl2ZU9iamVjdHNFbmQ7ICsraXRlcikgewotICAgICAgICBBU1NFUlQo
aXRlci0+Zmlyc3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSA9PSB0aGlzKTsKLSAgICAgICAg
QVNTRVJUKGl0ZXItPmZpcnN0LT5zdXNwZW5kSWZOZWVkZWRDYWxsZWQoKSk7Ci0gICAgICAgIGl0
ZXItPmZpcnN0LT5zdG9wKCk7CisgICAgICAgIEFTU0VSVChpdGVyLT5rZXktPnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKSA9PSB0aGlzKTsKKyAgICAgICAgQVNTRVJUKGl0ZXItPmtleS0+c3VzcGVu
ZElmTmVlZGVkQ2FsbGVkKCkpOworICAgICAgICBpdGVyLT5rZXktPnN0b3AoKTsKICAgICB9CiAg
ICAgbV9pdGVyYXRpbmdBY3RpdmVET01PYmplY3RzID0gZmFsc2U7CiAKQEAgLTM4MCw3ICszODAs
NyBAQCB2b2lkIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OmFkanVzdE1pbmltdW1UaW1lckludGVy
dmFsKGRvdWJsZSBvbGRNaW5pbXVtVGltZXJJbgogewogICAgIGlmIChtaW5pbXVtVGltZXJJbnRl
cnZhbCgpICE9IG9sZE1pbmltdW1UaW1lckludGVydmFsKSB7CiAgICAgICAgIGZvciAoVGltZW91
dE1hcDo6aXRlcmF0b3IgaXRlciA9IG1fdGltZW91dHMuYmVnaW4oKTsgaXRlciAhPSBtX3RpbWVv
dXRzLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgICAgIERPTVRpbWVyKiB0aW1lciA9IGl0ZXIt
PnNlY29uZDsKKyAgICAgICAgICAgIERPTVRpbWVyKiB0aW1lciA9IGl0ZXItPnZhbHVlOwogICAg
ICAgICAgICAgdGltZXItPmFkanVzdE1pbmltdW1UaW1lckludGVydmFsKG9sZE1pbmltdW1UaW1l
ckludGVydmFsKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9TZWxlY3RvclF1ZXJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TZWxlY3RvclF1ZXJ5
LmNwcAppbmRleCA3ODYyYWVmLi5lY2I1YTE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vU2VsZWN0b3JRdWVyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NlbGVjdG9yUXVl
cnkuY3BwCkBAIC0xNjksNyArMTY5LDcgQEAgU2VsZWN0b3JRdWVyeSogU2VsZWN0b3JRdWVyeUNh
Y2hlOjphZGQoY29uc3QgQXRvbWljU3RyaW5nJiBzZWxlY3RvcnMsIERvY3VtZW50KgogewogICAg
IEhhc2hNYXA8QXRvbWljU3RyaW5nLCBPd25QdHI8U2VsZWN0b3JRdWVyeT4gPjo6aXRlcmF0b3Ig
aXQgPSBtX2VudHJpZXMuZmluZChzZWxlY3RvcnMpOwogICAgIGlmIChpdCAhPSBtX2VudHJpZXMu
ZW5kKCkpCi0gICAgICAgIHJldHVybiBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICByZXR1cm4g
aXQtPnZhbHVlLmdldCgpOwogCiAgICAgQ1NTUGFyc2VyIHBhcnNlcihkb2N1bWVudCk7CiAgICAg
Q1NTU2VsZWN0b3JMaXN0IHNlbGVjdG9yTGlzdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9TcGFjZVNwbGl0U3RyaW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TcGFjZVNwbGl0
U3RyaW5nLmNwcAppbmRleCA5Y2NlN2Q5Li4xZGMxZmIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vU3BhY2VTcGxpdFN0cmluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1Nw
YWNlU3BsaXRTdHJpbmcuY3BwCkBAIC0xNTAsNyArMTUwLDcgQEAgU3BhY2VTcGxpdFN0cmluZ0Rh
dGE6On5TcGFjZVNwbGl0U3RyaW5nRGF0YSgpCiAKIFBhc3NSZWZQdHI8U3BhY2VTcGxpdFN0cmlu
Z0RhdGE+IFNwYWNlU3BsaXRTdHJpbmdEYXRhOjpjcmVhdGUoY29uc3QgQXRvbWljU3RyaW5nJiBz
dHJpbmcpCiB7Ci0gICAgU3BhY2VTcGxpdFN0cmluZ0RhdGEqJiBkYXRhID0gc2hhcmVkRGF0YU1h
cCgpLmFkZChzdHJpbmcsIDApLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgU3BhY2VTcGxpdFN0cmlu
Z0RhdGEqJiBkYXRhID0gc2hhcmVkRGF0YU1hcCgpLmFkZChzdHJpbmcsIDApLml0ZXJhdG9yLT52
YWx1ZTsKICAgICBpZiAoIWRhdGEpIHsKICAgICAgICAgZGF0YSA9IG5ldyBTcGFjZVNwbGl0U3Ry
aW5nRGF0YShzdHJpbmcpOwogICAgICAgICByZXR1cm4gYWRvcHRSZWYoZGF0YSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vU3R5bGVkRWxlbWVudC5jcHAKaW5kZXggOWFlNjcyZi4uMDIyZmRhOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcApAQCAtMjk5LDE0ICsyOTksMTQgQEAgdm9pZCBTdHls
ZWRFbGVtZW50Ojp1cGRhdGVBdHRyaWJ1dGVTdHlsZSgpCiAgICAgUHJlc2VudGF0aW9uQXR0cmli
dXRlQ2FjaGU6Oml0ZXJhdG9yIGNhY2hlSXRlcmF0b3I7CiAgICAgaWYgKGNhY2hlSGFzaCkgewog
ICAgICAgICBjYWNoZUl0ZXJhdG9yID0gcHJlc2VudGF0aW9uQXR0cmlidXRlQ2FjaGUoKS5hZGQo
Y2FjaGVIYXNoLCBudWxscHRyKS5pdGVyYXRvcjsKLSAgICAgICAgaWYgKGNhY2hlSXRlcmF0b3It
PnNlY29uZCAmJiBjYWNoZUl0ZXJhdG9yLT5zZWNvbmQtPmtleSAhPSBjYWNoZUtleSkKKyAgICAg
ICAgaWYgKGNhY2hlSXRlcmF0b3ItPnZhbHVlICYmIGNhY2hlSXRlcmF0b3ItPnZhbHVlLT5rZXkg
IT0gY2FjaGVLZXkpCiAgICAgICAgICAgICBjYWNoZUhhc2ggPSAwOwogICAgIH0gZWxzZQogICAg
ICAgICBjYWNoZUl0ZXJhdG9yID0gcHJlc2VudGF0aW9uQXR0cmlidXRlQ2FjaGUoKS5lbmQoKTsK
IAogICAgIFJlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBzdHlsZTsKLSAgICBpZiAoY2FjaGVIYXNo
ICYmIGNhY2hlSXRlcmF0b3ItPnNlY29uZCkgewotICAgICAgICBzdHlsZSA9IGNhY2hlSXRlcmF0
b3ItPnNlY29uZC0+dmFsdWU7CisgICAgaWYgKGNhY2hlSGFzaCAmJiBjYWNoZUl0ZXJhdG9yLT52
YWx1ZSkgeworICAgICAgICBzdHlsZSA9IGNhY2hlSXRlcmF0b3ItPnZhbHVlLT52YWx1ZTsKICAg
ICAgICAgcHJlc2VudGF0aW9uQXR0cmlidXRlQ2FjaGVDbGVhbmVyKCkuZGlkSGl0UHJlc2VudGF0
aW9uQXR0cmlidXRlQ2FjaGUoKTsKICAgICB9IGVsc2UgewogICAgICAgICBzdHlsZSA9IFN0eWxl
UHJvcGVydHlTZXQ6OmNyZWF0ZShpc1NWR0VsZW1lbnQoKSA/IFNWR0F0dHJpYnV0ZU1vZGUgOiBD
U1NRdWlya3NNb2RlKTsKQEAgLTMyMCw3ICszMjAsNyBAQCB2b2lkIFN0eWxlZEVsZW1lbnQ6OnVw
ZGF0ZUF0dHJpYnV0ZVN0eWxlKCkKIAogICAgIGF0dHJpYnV0ZURhdGEoKS0+c2V0QXR0cmlidXRl
U3R5bGUoc3R5bGUtPmlzRW1wdHkoKSA/IDAgOiBzdHlsZSk7CiAKLSAgICBpZiAoIWNhY2hlSGFz
aCB8fCBjYWNoZUl0ZXJhdG9yLT5zZWNvbmQpCisgICAgaWYgKCFjYWNoZUhhc2ggfHwgY2FjaGVJ
dGVyYXRvci0+dmFsdWUpCiAgICAgICAgIHJldHVybjsKIAogICAgIE93blB0cjxQcmVzZW50YXRp
b25BdHRyaWJ1dGVDYWNoZUVudHJ5PiBuZXdFbnRyeSA9IGFkb3B0UHRyKG5ldyBQcmVzZW50YXRp
b25BdHRyaWJ1dGVDYWNoZUVudHJ5KTsKQEAgLTMzMyw3ICszMzMsNyBAQCB2b2lkIFN0eWxlZEVs
ZW1lbnQ6OnVwZGF0ZUF0dHJpYnV0ZVN0eWxlKCkKICAgICAgICAgcHJlc2VudGF0aW9uQXR0cmli
dXRlQ2FjaGUoKS5jbGVhcigpOwogICAgICAgICBwcmVzZW50YXRpb25BdHRyaWJ1dGVDYWNoZSgp
LnNldChjYWNoZUhhc2gsIG5ld0VudHJ5LnJlbGVhc2UoKSk7CiAgICAgfSBlbHNlCi0gICAgICAg
IGNhY2hlSXRlcmF0b3ItPnNlY29uZCA9IG5ld0VudHJ5LnJlbGVhc2UoKTsKKyAgICAgICAgY2Fj
aGVJdGVyYXRvci0+dmFsdWUgPSBuZXdFbnRyeS5yZWxlYXNlKCk7CiB9CiAKIHZvaWQgU3R5bGVk
RWxlbWVudDo6YWRkUHJvcGVydHlUb0F0dHJpYnV0ZVN0eWxlKFN0eWxlUHJvcGVydHlTZXQqIHN0
eWxlLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGludCBpZGVudGlmaWVyKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9Gb3JtQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0Zvcm1Db250cm9sbGVyLmNwcAppbmRleCA1ZTM5ZmUyLi45NmU2YTljIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0Zvcm1Db250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0Zvcm1Db250cm9sbGVyLmNwcApAQCAtMjI0LDggKzIyNCw4IEBAIHZvaWQg
U2F2ZWRGb3JtU3RhdGU6OnNlcmlhbGl6ZVRvKFZlY3RvcjxTdHJpbmc+JiBzdGF0ZVZlY3Rvcikg
Y29uc3QKIHsKICAgICBzdGF0ZVZlY3Rvci5hcHBlbmQoU3RyaW5nOjpudW1iZXIobV9jb250cm9s
U3RhdGVDb3VudCkpOwogICAgIGZvciAoRm9ybUVsZW1lbnRTdGF0ZU1hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtX3N0YXRlRm9yTmV3Rm9ybUVsZW1lbnRzLmJlZ2luKCk7IGl0ICE9IG1fc3RhdGVG
b3JOZXdGb3JtRWxlbWVudHMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgY29uc3QgRm9ybUVsZW1l
bnRLZXkmIGtleSA9IGl0LT5maXJzdDsKLSAgICAgICAgY29uc3QgRGVxdWU8Rm9ybUNvbnRyb2xT
dGF0ZT4mIHF1ZXVlID0gaXQtPnNlY29uZDsKKyAgICAgICAgY29uc3QgRm9ybUVsZW1lbnRLZXkm
IGtleSA9IGl0LT5rZXk7CisgICAgICAgIGNvbnN0IERlcXVlPEZvcm1Db250cm9sU3RhdGU+JiBx
dWV1ZSA9IGl0LT52YWx1ZTsKICAgICAgICAgZm9yIChEZXF1ZTxGb3JtQ29udHJvbFN0YXRlPjo6
Y29uc3RfaXRlcmF0b3IgcXVlSXRlcmF0b3IgPSBxdWV1ZS5iZWdpbigpOyBxdWVJdGVyYXRvciAh
PSBxdWV1ZS5lbmQoKTsgKytxdWVJdGVyYXRvcikgewogICAgICAgICAgICAgc3RhdGVWZWN0b3Iu
YXBwZW5kKGtleS5uYW1lKCkpOwogICAgICAgICAgICAgc3RhdGVWZWN0b3IuYXBwZW5kKGtleS50
eXBlKCkpOwpAQCAtMjM5LDcgKzIzOSw3IEBAIHZvaWQgU2F2ZWRGb3JtU3RhdGU6OmFwcGVuZENv
bnRyb2xTdGF0ZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IEF0b21pY1N0CiAgICAg
Rm9ybUVsZW1lbnRLZXkga2V5KG5hbWUuaW1wbCgpLCB0eXBlLmltcGwoKSk7CiAgICAgRm9ybUVs
ZW1lbnRTdGF0ZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3N0YXRlRm9yTmV3Rm9ybUVsZW1lbnRzLmZp
bmQoa2V5KTsKICAgICBpZiAoaXQgIT0gbV9zdGF0ZUZvck5ld0Zvcm1FbGVtZW50cy5lbmQoKSkK
LSAgICAgICAgaXQtPnNlY29uZC5hcHBlbmQoc3RhdGUpOworICAgICAgICBpdC0+dmFsdWUuYXBw
ZW5kKHN0YXRlKTsKICAgICBlbHNlIHsKICAgICAgICAgRGVxdWU8Rm9ybUNvbnRyb2xTdGF0ZT4g
c3RhdGVMaXN0OwogICAgICAgICBzdGF0ZUxpc3QuYXBwZW5kKHN0YXRlKTsKQEAgLTI1NSwxMCAr
MjU1LDEwIEBAIEZvcm1Db250cm9sU3RhdGUgU2F2ZWRGb3JtU3RhdGU6OnRha2VDb250cm9sU3Rh
dGUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBjb25zCiAgICAgRm9ybUVsZW1lbnRTdGF0ZU1h
cDo6aXRlcmF0b3IgaXQgPSBtX3N0YXRlRm9yTmV3Rm9ybUVsZW1lbnRzLmZpbmQoRm9ybUVsZW1l
bnRLZXkobmFtZS5pbXBsKCksIHR5cGUuaW1wbCgpKSk7CiAgICAgaWYgKGl0ID09IG1fc3RhdGVG
b3JOZXdGb3JtRWxlbWVudHMuZW5kKCkpCiAgICAgICAgIHJldHVybiBGb3JtQ29udHJvbFN0YXRl
KCk7Ci0gICAgQVNTRVJUKGl0LT5zZWNvbmQuc2l6ZSgpKTsKLSAgICBGb3JtQ29udHJvbFN0YXRl
IHN0YXRlID0gaXQtPnNlY29uZC50YWtlRmlyc3QoKTsKKyAgICBBU1NFUlQoaXQtPnZhbHVlLnNp
emUoKSk7CisgICAgRm9ybUNvbnRyb2xTdGF0ZSBzdGF0ZSA9IGl0LT52YWx1ZS50YWtlRmlyc3Qo
KTsKICAgICBtX2NvbnRyb2xTdGF0ZUNvdW50LS07Ci0gICAgaWYgKCFpdC0+c2Vjb25kLnNpemUo
KSkKKyAgICBpZiAoIWl0LT52YWx1ZS5zaXplKCkpCiAgICAgICAgIG1fc3RhdGVGb3JOZXdGb3Jt
RWxlbWVudHMucmVtb3ZlKGl0KTsKICAgICByZXR1cm4gc3RhdGU7CiB9CkBAIC0zMjgsMTIgKzMy
OCwxMiBAQCBBdG9taWNTdHJpbmcgRm9ybUtleUdlbmVyYXRvcjo6Zm9ybUtleShjb25zdCBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlJiBjbwogICAgIH0KICAgICBGb3JtVG9LZXlNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9mb3JtVG9LZXlNYXAuZmluZChmb3JtKTsKICAgICBpZiAo
aXQgIT0gbV9mb3JtVG9LZXlNYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdC0+c2Vjb25kOwor
ICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwogCiAgICAgU3RyaW5nIHNpZ25hdHVyZSA9IGZvcm1T
aWduYXR1cmUoKmZvcm0pOwogICAgIEFTU0VSVCghc2lnbmF0dXJlLmlzTnVsbCgpKTsKICAgICBG
b3JtU2lnbmF0dXJlVG9OZXh0SW5kZXhNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX2Zvcm1TaWdu
YXR1cmVUb05leHRJbmRleE1hcC5hZGQoc2lnbmF0dXJlLCAwKTsKLSAgICB1bnNpZ25lZCBuZXh0
SW5kZXggPSByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCsrOworICAgIHVuc2lnbmVkIG5leHRJbmRl
eCA9IHJlc3VsdC5pdGVyYXRvci0+dmFsdWUrKzsKIAogICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRl
cjsKICAgICBidWlsZGVyLmFwcGVuZChzaWduYXR1cmUpOwpAQCAtMzg0LDggKzM4NCw4IEBAIFBh
c3NPd25QdHI8Rm9ybUNvbnRyb2xsZXI6OlNhdmVkRm9ybVN0YXRlTWFwPiBGb3JtQ29udHJvbGxl
cjo6Y3JlYXRlU2F2ZWRGb3JtU3RhCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgU2F2
ZWRGb3JtU3RhdGVNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBzdGF0ZU1hcC0+YWRkKGtleUdlbmVy
YXRvci0+Zm9ybUtleSgqY29udHJvbCkuaW1wbCgpLCBudWxscHRyKTsKICAgICAgICAgaWYgKHJl
c3VsdC5pc05ld0VudHJ5KQotICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBT
YXZlZEZvcm1TdGF0ZTo6Y3JlYXRlKCk7Ci0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25k
LT5hcHBlbmRDb250cm9sU3RhdGUoY29udHJvbC0+bmFtZSgpLCBjb250cm9sLT50eXBlKCksIGNv
bnRyb2wtPnNhdmVGb3JtQ29udHJvbFN0YXRlKCkpOworICAgICAgICAgICAgcmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZSA9IFNhdmVkRm9ybVN0YXRlOjpjcmVhdGUoKTsKKyAgICAgICAgcmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZS0+YXBwZW5kQ29udHJvbFN0YXRlKGNvbnRyb2wtPm5hbWUoKSwgY29udHJv
bC0+dHlwZSgpLCBjb250cm9sLT5zYXZlRm9ybUNvbnRyb2xTdGF0ZSgpKTsKICAgICB9CiAgICAg
cmV0dXJuIHN0YXRlTWFwLnJlbGVhc2UoKTsKIH0KQEAgLTM5Nyw4ICszOTcsOCBAQCBWZWN0b3I8
U3RyaW5nPiBGb3JtQ29udHJvbGxlcjo6Zm9ybUVsZW1lbnRzU3RhdGUoKSBjb25zdAogICAgIHN0
YXRlVmVjdG9yLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9mb3JtRWxlbWVudHNXaXRoU3RhdGUu
c2l6ZSgpICogNCk7CiAgICAgc3RhdGVWZWN0b3IuYXBwZW5kKGZvcm1TdGF0ZVNpZ25hdHVyZSgp
KTsKICAgICBmb3IgKFNhdmVkRm9ybVN0YXRlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHN0YXRl
TWFwLT5iZWdpbigpOyBpdCAhPSBzdGF0ZU1hcC0+ZW5kKCk7ICsraXQpIHsKLSAgICAgICAgc3Rh
dGVWZWN0b3IuYXBwZW5kKGl0LT5maXJzdC5nZXQoKSk7Ci0gICAgICAgIGl0LT5zZWNvbmQtPnNl
cmlhbGl6ZVRvKHN0YXRlVmVjdG9yKTsKKyAgICAgICAgc3RhdGVWZWN0b3IuYXBwZW5kKGl0LT5r
ZXkuZ2V0KCkpOworICAgICAgICBpdC0+dmFsdWUtPnNlcmlhbGl6ZVRvKHN0YXRlVmVjdG9yKTsK
ICAgICB9CiAgICAgYm9vbCBoYXNPbmx5U2lnbmF0dXJlID0gc3RhdGVWZWN0b3Iuc2l6ZSgpID09
IDE7CiAgICAgaWYgKGhhc09ubHlTaWduYXR1cmUpCkBAIC00MzYsOCArNDM2LDggQEAgRm9ybUNv
bnRyb2xTdGF0ZSBGb3JtQ29udHJvbGxlcjo6dGFrZVN0YXRlRm9yRm9ybUVsZW1lbnQoY29uc3Qg
SFRNTEZvcm1Db250cm9sRWwKICAgICBTYXZlZEZvcm1TdGF0ZU1hcDo6aXRlcmF0b3IgaXQgPSBt
X3NhdmVkRm9ybVN0YXRlTWFwLmZpbmQobV9mb3JtS2V5R2VuZXJhdG9yLT5mb3JtS2V5KGNvbnRy
b2wpLmltcGwoKSk7CiAgICAgaWYgKGl0ID09IG1fc2F2ZWRGb3JtU3RhdGVNYXAuZW5kKCkpCiAg
ICAgICAgIHJldHVybiBGb3JtQ29udHJvbFN0YXRlKCk7Ci0gICAgRm9ybUNvbnRyb2xTdGF0ZSBz
dGF0ZSA9IGl0LT5zZWNvbmQtPnRha2VDb250cm9sU3RhdGUoY29udHJvbC5uYW1lKCksIGNvbnRy
b2wudHlwZSgpKTsKLSAgICBpZiAoaXQtPnNlY29uZC0+aXNFbXB0eSgpKQorICAgIEZvcm1Db250
cm9sU3RhdGUgc3RhdGUgPSBpdC0+dmFsdWUtPnRha2VDb250cm9sU3RhdGUoY29udHJvbC5uYW1l
KCksIGNvbnRyb2wudHlwZSgpKTsKKyAgICBpZiAoaXQtPnZhbHVlLT5pc0VtcHR5KCkpCiAgICAg
ICAgIG1fc2F2ZWRGb3JtU3RhdGVNYXAucmVtb3ZlKGl0KTsKICAgICByZXR1cm4gc3RhdGU7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTENvbGxlY3Rpb24uY3BwCmluZGV4IDkxZTE4YTMuLjFlY2I2
NDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENvbGxlY3Rpb24uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENvbGxlY3Rpb24uY3BwCkBAIC01NTksNyArNTU5
LDcgQEAgUGFzc1JlZlB0cjxOb2RlTGlzdD4gSFRNTENvbGxlY3Rpb246OnRhZ3MoY29uc3QgU3Ry
aW5nJiBuYW1lKQogCiB2b2lkIEhUTUxDb2xsZWN0aW9uQ2FjaGVCYXNlOjphcHBlbmQoTm9kZUNh
Y2hlTWFwJiBtYXAsIGNvbnN0IEF0b21pY1N0cmluZyYga2V5LCBFbGVtZW50KiBlbGVtZW50KQog
ewotICAgIE93blB0cjxWZWN0b3I8RWxlbWVudCo+ID4mIHZlY3RvciA9IG1hcC5hZGQoa2V5Lmlt
cGwoKSwgbnVsbHB0cikuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBPd25QdHI8VmVjdG9yPEVsZW1l
bnQqPiA+JiB2ZWN0b3IgPSBtYXAuYWRkKGtleS5pbXBsKCksIG51bGxwdHIpLml0ZXJhdG9yLT52
YWx1ZTsKICAgICBpZiAoIXZlY3RvcikKICAgICAgICAgdmVjdG9yID0gYWRvcHRQdHIobmV3IFZl
Y3RvcjxFbGVtZW50Kj4pOwogICAgIHZlY3Rvci0+YXBwZW5kKGVsZW1lbnQpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcAppbmRleCBiOTFhZTUw
Li5kMDgxZTI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZy
YW1lYnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1l
YnVmZmVyLmNwcApAQCAtMzI3LDcgKzMyNyw3IEBAIFdlYkdMU2hhcmVkT2JqZWN0KiBXZWJHTEZy
YW1lYnVmZmVyOjpnZXRBdHRhY2htZW50T2JqZWN0KEdDM0RlbnVtIGF0dGFjaG1lbnQpIGNvCiBX
ZWJHTEZyYW1lYnVmZmVyOjpXZWJHTEF0dGFjaG1lbnQqIFdlYkdMRnJhbWVidWZmZXI6OmdldEF0
dGFjaG1lbnQoR0MzRGVudW0gYXR0YWNobWVudCkgY29uc3QKIHsKICAgICBjb25zdCBBdHRhY2ht
ZW50TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fYXR0YWNobWVudHMuZmluZChhdHRhY2htZW50
KTsKLSAgICByZXR1cm4gKGl0ICE9IG1fYXR0YWNobWVudHMuZW5kKCkpID8gaXQtPnNlY29uZC5n
ZXQoKSA6IDA7CisgICAgcmV0dXJuIChpdCAhPSBtX2F0dGFjaG1lbnRzLmVuZCgpKSA/IGl0LT52
YWx1ZS5nZXQoKSA6IDA7CiB9CiAKIHZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6cmVtb3ZlQXR0YWNo
bWVudEZyb21Cb3VuZEZyYW1lYnVmZmVyKEdDM0RlbnVtIGF0dGFjaG1lbnQpCkBAIC0zNjcsOSAr
MzY3LDkgQEAgdm9pZCBXZWJHTEZyYW1lYnVmZmVyOjpyZW1vdmVBdHRhY2htZW50RnJvbUJvdW5k
RnJhbWVidWZmZXIoV2ViR0xTaGFyZWRPYmplY3QqIGEKICAgICB3aGlsZSAoY2hlY2tNb3JlKSB7
CiAgICAgICAgIGNoZWNrTW9yZSA9IGZhbHNlOwogICAgICAgICBmb3IgKEF0dGFjaG1lbnRNYXA6
Oml0ZXJhdG9yIGl0ID0gbV9hdHRhY2htZW50cy5iZWdpbigpOyBpdCAhPSBtX2F0dGFjaG1lbnRz
LmVuZCgpOyArK2l0KSB7Ci0gICAgICAgICAgICBXZWJHTEF0dGFjaG1lbnQqIGF0dGFjaG1lbnRP
YmplY3QgPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgV2ViR0xBdHRhY2htZW50KiBh
dHRhY2htZW50T2JqZWN0ID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAgICAgaWYgKGF0dGFj
aG1lbnRPYmplY3QtPmlzU2hhcmVkT2JqZWN0KGF0dGFjaG1lbnQpKSB7Ci0gICAgICAgICAgICAg
ICAgR0MzRGVudW0gYXR0YWNobWVudFR5cGUgPSBpdC0+Zmlyc3Q7CisgICAgICAgICAgICAgICAg
R0MzRGVudW0gYXR0YWNobWVudFR5cGUgPSBpdC0+a2V5OwogICAgICAgICAgICAgICAgIGF0dGFj
aG1lbnRPYmplY3QtPnVuYXR0YWNoKGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0M0QoKSwgYXR0
YWNobWVudFR5cGUpOwogICAgICAgICAgICAgICAgIHJlbW92ZUF0dGFjaG1lbnRGcm9tQm91bmRG
cmFtZWJ1ZmZlcihhdHRhY2htZW50VHlwZSk7CiAgICAgICAgICAgICAgICAgY2hlY2tNb3JlID0g
dHJ1ZTsKQEAgLTQxOSw4ICs0MTksOCBAQCBHQzNEZW51bSBXZWJHTEZyYW1lYnVmZmVyOjpjaGVj
a1N0YXR1cyhjb25zdCBjaGFyKiogcmVhc29uKSBjb25zdAogICAgIGJvb2wgaGF2ZVN0ZW5jaWwg
PSBmYWxzZTsKICAgICBib29sIGhhdmVEZXB0aFN0ZW5jaWwgPSBmYWxzZTsKICAgICBmb3IgKEF0
dGFjaG1lbnRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9hdHRhY2htZW50cy5iZWdpbigpOyBp
dCAhPSBtX2F0dGFjaG1lbnRzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIFdlYkdMQXR0YWNobWVu
dCogYXR0YWNobWVudCA9IGl0LT5zZWNvbmQuZ2V0KCk7Ci0gICAgICAgIGlmICghaXNBdHRhY2ht
ZW50Q29tcGxldGUoYXR0YWNobWVudCwgaXQtPmZpcnN0LCByZWFzb24pKQorICAgICAgICBXZWJH
TEF0dGFjaG1lbnQqIGF0dGFjaG1lbnQgPSBpdC0+dmFsdWUuZ2V0KCk7CisgICAgICAgIGlmICgh
aXNBdHRhY2htZW50Q29tcGxldGUoYXR0YWNobWVudCwgaXQtPmtleSwgcmVhc29uKSkKICAgICAg
ICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfSU5DT01QTEVURV9B
VFRBQ0hNRU5UOwogICAgICAgICBpZiAoIWF0dGFjaG1lbnQtPmlzVmFsaWQoKSkgewogICAgICAg
ICAgICAgKnJlYXNvbiA9ICJhdHRhY2htZW50IGlzIG5vdCB2YWxpZCI7CkBAIC00MzAsNyArNDMw
LDcgQEAgR0MzRGVudW0gV2ViR0xGcmFtZWJ1ZmZlcjo6Y2hlY2tTdGF0dXMoY29uc3QgY2hhcioq
IHJlYXNvbikgY29uc3QKICAgICAgICAgICAgICpyZWFzb24gPSAiYXR0YWNobWVudCBpcyBhbiB1
bnN1cHBvcnRlZCBmb3JtYXQiOwogICAgICAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNE
OjpGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAgICAgIH0KLSAgICAgICAg
c3dpdGNoIChpdC0+Zmlyc3QpIHsKKyAgICAgICAgc3dpdGNoIChpdC0+a2V5KSB7CiAgICAgICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1FTlQ6CiAgICAgICAgICAgICBo
YXZlRGVwdGggPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7CkBAIC00ODgsNyArNDg4LDcgQEAg
Ym9vbCBXZWJHTEZyYW1lYnVmZmVyOjpoYXNTdGVuY2lsQnVmZmVyKCkgY29uc3QKIHZvaWQgV2Vi
R0xGcmFtZWJ1ZmZlcjo6ZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHQzRCogY29udGV4
dDNkLCBQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkKIHsKICAgICBmb3IgKEF0dGFjaG1lbnRNYXA6
Oml0ZXJhdG9yIGl0ID0gbV9hdHRhY2htZW50cy5iZWdpbigpOyBpdCAhPSBtX2F0dGFjaG1lbnRz
LmVuZCgpOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5vbkRldGFjaGVkKGNvbnRleHQzZCk7
CisgICAgICAgIGl0LT52YWx1ZS0+b25EZXRhY2hlZChjb250ZXh0M2QpOwogCiAgICAgY29udGV4
dDNkLT5kZWxldGVGcmFtZWJ1ZmZlcihvYmplY3QpOwogfQpAQCAtNDk5LDggKzQ5OSw4IEBAIGJv
b2wgV2ViR0xGcmFtZWJ1ZmZlcjo6aW5pdGlhbGl6ZUF0dGFjaG1lbnRzKEdyYXBoaWNzQ29udGV4
dDNEKiBnM2QsIGNvbnN0IGNoYXIqCiAgICAgR0MzRGJpdGZpZWxkIG1hc2sgPSAwOwogCiAgICAg
Zm9yIChBdHRhY2htZW50TWFwOjppdGVyYXRvciBpdCA9IG1fYXR0YWNobWVudHMuYmVnaW4oKTsg
aXQgIT0gbV9hdHRhY2htZW50cy5lbmQoKTsgKytpdCkgewotICAgICAgICBHQzNEZW51bSBhdHRh
Y2htZW50VHlwZSA9IGl0LT5maXJzdDsKLSAgICAgICAgV2ViR0xBdHRhY2htZW50KiBhdHRhY2ht
ZW50ID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgR0MzRGVudW0gYXR0YWNobWVudFR5cGUg
PSBpdC0+a2V5OworICAgICAgICBXZWJHTEF0dGFjaG1lbnQqIGF0dGFjaG1lbnQgPSBpdC0+dmFs
dWUuZ2V0KCk7CiAgICAgICAgIGlmICghYXR0YWNobWVudC0+aXNJbml0aWFsaXplZCgpKQogICAg
ICAgICAgICBtYXNrIHw9IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRDbGVhckJpdHNCeUF0dGFjaG1l
bnRUeXBlKGF0dGFjaG1lbnRUeXBlKTsKICAgICB9CkBAIC01NzEsOCArNTcxLDggQEAgYm9vbCBX
ZWJHTEZyYW1lYnVmZmVyOjppbml0aWFsaXplQXR0YWNobWVudHMoR3JhcGhpY3NDb250ZXh0M0Qq
IGczZCwgY29uc3QgY2hhcioKICAgICAgICAgZzNkLT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNE
OjpESVRIRVIpOwogCiAgICAgZm9yIChBdHRhY2htZW50TWFwOjppdGVyYXRvciBpdCA9IG1fYXR0
YWNobWVudHMuYmVnaW4oKTsgaXQgIT0gbV9hdHRhY2htZW50cy5lbmQoKTsgKytpdCkgewotICAg
ICAgICBHQzNEZW51bSBhdHRhY2htZW50VHlwZSA9IGl0LT5maXJzdDsKLSAgICAgICAgV2ViR0xB
dHRhY2htZW50KiBhdHRhY2htZW50ID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgR0MzRGVu
dW0gYXR0YWNobWVudFR5cGUgPSBpdC0+a2V5OworICAgICAgICBXZWJHTEF0dGFjaG1lbnQqIGF0
dGFjaG1lbnQgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgIEdDM0RiaXRmaWVsZCBiaXRzID0g
R3JhcGhpY3NDb250ZXh0M0Q6OmdldENsZWFyQml0c0J5QXR0YWNobWVudFR5cGUoYXR0YWNobWVu
dFR5cGUpOwogICAgICAgICBpZiAoYml0cyAmIG1hc2spCiAgICAgICAgICAgICBhdHRhY2htZW50
LT5zZXRJbml0aWFsaXplZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29k
ZUdlbmVyYXRvckluc3BlY3Rvci5weQppbmRleCBlYzM4MTJiLi5hOWVlYmNlIDEwMDc1NQotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQpAQCAt
MTMzNiw3ICsxMzM2LDcgQEAgY2xhc3MgVHlwZUJpbmRpbmdzOgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgICAgICBJ
bnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9yICVzO1xuIiAlIGl0X25hbWUpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAg
ICAgICVzID0gb2JqZWN0LT5maW5kKFwiJXNcIik7XG4iICUgKGl0X25hbWUsIHByb3BfZGF0YS5w
WyJuYW1lIl0pKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlk
YXRvcl93cml0ZXIubmV3bGluZSgiICAgICAgICBBU1NFUlQoJXMgIT0gb2JqZWN0LT5lbmQoKSk7
XG4iICUgaXRfbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgJXMoJXMtPnNlY29uZC5nZXQoKSk7XG4i
ICUgKHByb3BfZGF0YS5wYXJhbV90eXBlX2JpbmRpbmcuZ2V0X3ZhbGlkYXRvcl9jYWxsX3RleHQo
KSwgaXRfbmFtZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFs
aWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgICAgICVzKCVzLT52YWx1ZS5nZXQoKSk7XG4iICUg
KHByb3BfZGF0YS5wYXJhbV90eXBlX2JpbmRpbmcuZ2V0X3ZhbGlkYXRvcl9jYWxsX3RleHQoKSwg
aXRfbmFtZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRh
dG9yX3dyaXRlci5uZXdsaW5lKCIgICAgfVxuIikKIAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgY2xvc2VkX2ZpZWxkX3NldDoKQEAgLTEzNDgsNyArMTM0OCw3IEBAIGNs
YXNzIFR5cGVCaW5kaW5nczoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgSW5zcGVjdG9yT2JqZWN0OjppdGVy
YXRvciAlcztcbiIgJSBpdF9uYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgICAgICAlcyA9IG9iamVjdC0+Zmlu
ZChcIiVzXCIpO1xuIiAlIChpdF9uYW1lLCBwcm9wX2RhdGEucFsibmFtZSJdKSkKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUo
IiAgICAgICAgaWYgKCVzICE9IG9iamVjdC0+ZW5kKCkpIHtcbiIgJSBpdF9uYW1lKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGlu
ZSgiICAgICAgICAgICAgJXMoJXMtPnNlY29uZC5nZXQoKSk7XG4iICUgKHByb3BfZGF0YS5wYXJh
bV90eXBlX2JpbmRpbmcuZ2V0X3ZhbGlkYXRvcl9jYWxsX3RleHQoKSwgaXRfbmFtZSkpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXds
aW5lKCIgICAgICAgICAgICAlcyglcy0+dmFsdWUuZ2V0KCkpO1xuIiAlIChwcm9wX2RhdGEucGFy
YW1fdHlwZV9iaW5kaW5nLmdldF92YWxpZGF0b3JfY2FsbF90ZXh0KCksIGl0X25hbWUpKQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNsb3NlZF9maWVsZF9zZXQ6
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93
cml0ZXIubmV3bGluZSgiICAgICAgICAgICAgKytmb3VuZFByb3BlcnRpZXNDb3VudDtcbiIpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5u
ZXdsaW5lKCIgICAgICAgIH1cbiIpCkBAIC0yMDIxLDcgKzIwMjEsNyBAQCAkbWVzc2FnZUhhbmRs
ZXJzCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAoKCp0aGlzKS4qaXQtPnNlY29uZCko
Y2FsbElkLCBtZXNzYWdlT2JqZWN0LmdldCgpKTsKKyAgICAoKCp0aGlzKS4qaXQtPnZhbHVlKShj
YWxsSWQsIG1lc3NhZ2VPYmplY3QuZ2V0KCkpOwogfQogCiB2b2lkIEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVySW1wbDo6c2VuZFJlc3BvbnNlKGxvbmcgY2FsbElkLCBQYXNzUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcmVzdWx0LCBjb25zdCBjaGFyKiBjb21tYW5kTmFtZSwgUGFzc1JlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMsIEVycm9yU3RyaW5nIGludm9jYXRpb25FcnJv
cikKQEAgLTIxMDUsNyArMjEwNSw3IEBAIFIgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBs
OjpnZXRQcm9wZXJ0eVZhbHVlSW1wbChJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwKICAgICAgICAg
cmV0dXJuIHZhbHVlOwogICAgIH0KIAotICAgIGlmICghYXNfbWV0aG9kKHZhbHVlSXRlcmF0b3It
PnNlY29uZC5nZXQoKSwgJnZhbHVlKSkKKyAgICBpZiAoIWFzX21ldGhvZCh2YWx1ZUl0ZXJhdG9y
LT52YWx1ZS5nZXQoKSwgJnZhbHVlKSkKICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJp
bmcoU3RyaW5nOjpmb3JtYXQoIlBhcmFtZXRlciAnJXMnIGhhcyB3cm9uZyB0eXBlLiBJdCBtdXN0
IGJlICclcycuIiwgbmFtZS51dGY4KCkuZGF0YSgpLCB0eXBlX25hbWUpKTsKICAgICBlbHNlCiAg
ICAgICAgIGlmICh2YWx1ZUZvdW5kKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0RPTVBhdGNoU3VwcG9ydC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NUGF0
Y2hTdXBwb3J0LmNwcAppbmRleCBjMDNkY2U0Li44ZTZjMTgwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcApAQCAtMjM3LDI0ICsyMzcsMjQgQEAgRE9N
UGF0Y2hTdXBwb3J0OjpkaWZmKGNvbnN0IFZlY3RvcjxPd25QdHI8RGlnZXN0PiA+JiBvbGRMaXN0
LCBjb25zdCBWZWN0b3I8T3duUHQKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbmV3TGlz
dC5zaXplKCk7ICsraSkgewogICAgICAgICBEaWZmVGFibGU6Oml0ZXJhdG9yIGl0ID0gbmV3VGFi
bGUuYWRkKG5ld0xpc3RbaV0tPm1fc2hhMSwgVmVjdG9yPHNpemVfdD4oKSkuaXRlcmF0b3I7Ci0g
ICAgICAgIGl0LT5zZWNvbmQuYXBwZW5kKGkpOworICAgICAgICBpdC0+dmFsdWUuYXBwZW5kKGkp
OwogICAgIH0KIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2xkTGlzdC5zaXplKCk7ICsr
aSkgewogICAgICAgICBEaWZmVGFibGU6Oml0ZXJhdG9yIGl0ID0gb2xkVGFibGUuYWRkKG9sZExp
c3RbaV0tPm1fc2hhMSwgVmVjdG9yPHNpemVfdD4oKSkuaXRlcmF0b3I7Ci0gICAgICAgIGl0LT5z
ZWNvbmQuYXBwZW5kKGkpOworICAgICAgICBpdC0+dmFsdWUuYXBwZW5kKGkpOwogICAgIH0KIAog
ICAgIGZvciAoRGlmZlRhYmxlOjppdGVyYXRvciBuZXdJdCA9IG5ld1RhYmxlLmJlZ2luKCk7IG5l
d0l0ICE9IG5ld1RhYmxlLmVuZCgpOyArK25ld0l0KSB7Ci0gICAgICAgIGlmIChuZXdJdC0+c2Vj
b25kLnNpemUoKSAhPSAxKQorICAgICAgICBpZiAobmV3SXQtPnZhbHVlLnNpemUoKSAhPSAxKQog
ICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgRGlmZlRhYmxlOjppdGVyYXRvciBvbGRJ
dCA9IG9sZFRhYmxlLmZpbmQobmV3SXQtPmZpcnN0KTsKLSAgICAgICAgaWYgKG9sZEl0ID09IG9s
ZFRhYmxlLmVuZCgpIHx8IG9sZEl0LT5zZWNvbmQuc2l6ZSgpICE9IDEpCisgICAgICAgIERpZmZU
YWJsZTo6aXRlcmF0b3Igb2xkSXQgPSBvbGRUYWJsZS5maW5kKG5ld0l0LT5rZXkpOworICAgICAg
ICBpZiAob2xkSXQgPT0gb2xkVGFibGUuZW5kKCkgfHwgb2xkSXQtPnZhbHVlLnNpemUoKSAhPSAx
KQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgbmV3TWFwW25ld0l0LT5zZWNvbmRb
MF1dID0gbWFrZV9wYWlyKG5ld0xpc3RbbmV3SXQtPnNlY29uZFswXV0uZ2V0KCksIG9sZEl0LT5z
ZWNvbmRbMF0pOwotICAgICAgICBvbGRNYXBbb2xkSXQtPnNlY29uZFswXV0gPSBtYWtlX3BhaXIo
b2xkTGlzdFtvbGRJdC0+c2Vjb25kWzBdXS5nZXQoKSwgbmV3SXQtPnNlY29uZFswXSk7CisgICAg
ICAgIG5ld01hcFtuZXdJdC0+dmFsdWVbMF1dID0gbWFrZV9wYWlyKG5ld0xpc3RbbmV3SXQtPnZh
bHVlWzBdXS5nZXQoKSwgb2xkSXQtPnZhbHVlWzBdKTsKKyAgICAgICAgb2xkTWFwW29sZEl0LT52
YWx1ZVswXV0gPSBtYWtlX3BhaXIob2xkTGlzdFtvbGRJdC0+dmFsdWVbMF1dLmdldCgpLCBuZXdJ
dC0+dmFsdWVbMF0pOwogICAgIH0KIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBuZXdMaXN0LnNp
emUoKSA+IDAgJiYgaSA8IG5ld0xpc3Quc2l6ZSgpIC0gMTsgKytpKSB7CkBAIC0zNjQsNyArMzY0
LDcgQEAgYm9vbCBET01QYXRjaFN1cHBvcnQ6OmlubmVyUGF0Y2hDaGlsZHJlbihDb250YWluZXJO
b2RlKiBwYXJlbnROb2RlLCBjb25zdCBWZWN0b3IKIAogICAgIC8vIDIuIFBhdGNoIG5vZGVzIG1h
cmtlZCBmb3IgbWVyZ2UuCiAgICAgZm9yIChIYXNoTWFwPERpZ2VzdCosIERpZ2VzdCo+OjppdGVy
YXRvciBpdCA9IG1lcmdlcy5iZWdpbigpOyBpdCAhPSBtZXJnZXMuZW5kKCk7ICsraXQpIHsKLSAg
ICAgICAgaWYgKCFpbm5lclBhdGNoTm9kZShpdC0+c2Vjb25kLCBpdC0+Zmlyc3QsIGVjKSkKKyAg
ICAgICAgaWYgKCFpbm5lclBhdGNoTm9kZShpdC0+dmFsdWUsIGl0LT5rZXksIGVjKSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTQ2Myw3ICs0NjMsNyBAQCBib29sIERP
TVBhdGNoU3VwcG9ydDo6cmVtb3ZlQ2hpbGRBbmRNb3ZlVG9OZXcoRGlnZXN0KiBvbGREaWdlc3Qs
IEV4Y2VwdGlvbkNvZGUmCiAgICAgLy8gaGlnaCB0aGF0IGl0IHdpbGwgZ2V0IG1lcmdlZCBiYWNr
IGludG8gdGhlIG9yaWdpbmFsIERPTSBkdXJpbmcgdGhlIGZ1cnRoZXIgcGF0Y2hpbmcuCiAgICAg
VW51c2VkTm9kZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbV91bnVzZWROb2Rlc01hcC5maW5kKG9sZERp
Z2VzdC0+bV9zaGExKTsKICAgICBpZiAoaXQgIT0gbV91bnVzZWROb2Rlc01hcC5lbmQoKSkgewot
ICAgICAgICBEaWdlc3QqIG5ld0RpZ2VzdCA9IGl0LT5zZWNvbmQ7CisgICAgICAgIERpZ2VzdCog
bmV3RGlnZXN0ID0gaXQtPnZhbHVlOwogICAgICAgICBOb2RlKiBuZXdOb2RlID0gbmV3RGlnZXN0
LT5tX25vZGU7CiAgICAgICAgIGlmICghbV9kb21FZGl0b3ItPnJlcGxhY2VDaGlsZChuZXdOb2Rl
LT5wYXJlbnROb2RlKCksIG9sZE5vZGUsIG5ld05vZGUsIGVjKSkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNj
cmlwdE1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0
TWFuYWdlci5jcHAKaW5kZXggNTJlYzc0OS4uMWQ1ZTMxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0TWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0TWFuYWdlci5jcHAKQEAgLTgyLDEwICs4Miwx
MCBAQCBJbmplY3RlZFNjcmlwdCBJbmplY3RlZFNjcmlwdE1hbmFnZXI6OmluamVjdGVkU2NyaXB0
Rm9ySWQoaW50IGlkKQogewogICAgIElkVG9JbmplY3RlZFNjcmlwdE1hcDo6aXRlcmF0b3IgaXQg
PSBtX2lkVG9JbmplY3RlZFNjcmlwdC5maW5kKGlkKTsKICAgICBpZiAoaXQgIT0gbV9pZFRvSW5q
ZWN0ZWRTY3JpcHQuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgICAgICBy
ZXR1cm4gaXQtPnZhbHVlOwogICAgIGZvciAoU2NyaXB0U3RhdGVUb0lkOjppdGVyYXRvciBpdCA9
IG1fc2NyaXB0U3RhdGVUb0lkLmJlZ2luKCk7IGl0ICE9IG1fc2NyaXB0U3RhdGVUb0lkLmVuZCgp
OyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kID09IGlkKQotICAgICAgICAgICAgcmV0
dXJuIGluamVjdGVkU2NyaXB0Rm9yKGl0LT5maXJzdCk7CisgICAgICAgIGlmIChpdC0+dmFsdWUg
PT0gaWQpCisgICAgICAgICAgICByZXR1cm4gaW5qZWN0ZWRTY3JpcHRGb3IoaXQtPmtleSk7CiAg
ICAgfQogICAgIHJldHVybiBJbmplY3RlZFNjcmlwdCgpOwogfQpAQCAtOTQsNyArOTQsNyBAQCBp
bnQgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjppbmplY3RlZFNjcmlwdElkRm9yKFNjcmlwdFN0YXRl
KiBzY3JpcHRTdGF0ZSkKIHsKICAgICBTY3JpcHRTdGF0ZVRvSWQ6Oml0ZXJhdG9yIGl0ID0gbV9z
Y3JpcHRTdGF0ZVRvSWQuZmluZChzY3JpcHRTdGF0ZSk7CiAgICAgaWYgKGl0ICE9IG1fc2NyaXB0
U3RhdGVUb0lkLmVuZCgpKQotICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICAgICAgcmV0
dXJuIGl0LT52YWx1ZTsKICAgICBpbnQgaWQgPSBtX25leHRJbmplY3RlZFNjcmlwdElkKys7CiAg
ICAgbV9zY3JpcHRTdGF0ZVRvSWQuc2V0KHNjcmlwdFN0YXRlLCBpZCk7CiAgICAgcmV0dXJuIGlk
OwpAQCAtMTI2LDExICsxMjYsMTEgQEAgdm9pZCBJbmplY3RlZFNjcmlwdE1hbmFnZXI6OmRpc2Nh
cmRJbmplY3RlZFNjcmlwdHNGb3IoRE9NV2luZG93KiB3aW5kb3cpCiAgICAgVmVjdG9yPGxvbmc+
IGlkc1RvUmVtb3ZlOwogICAgIElkVG9JbmplY3RlZFNjcmlwdE1hcDo6aXRlcmF0b3IgZW5kID0g
bV9pZFRvSW5qZWN0ZWRTY3JpcHQuZW5kKCk7CiAgICAgZm9yIChJZFRvSW5qZWN0ZWRTY3JpcHRN
YXA6Oml0ZXJhdG9yIGl0ID0gbV9pZFRvSW5qZWN0ZWRTY3JpcHQuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7Ci0gICAgICAgIFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSA9IGl0LT5zZWNvbmQu
c2NyaXB0U3RhdGUoKTsKKyAgICAgICAgU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlID0gaXQtPnZh
bHVlLnNjcmlwdFN0YXRlKCk7CiAgICAgICAgIGlmICh3aW5kb3cgIT0gZG9tV2luZG93RnJvbVNj
cmlwdFN0YXRlKHNjcmlwdFN0YXRlKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBt
X3NjcmlwdFN0YXRlVG9JZC5yZW1vdmUoc2NyaXB0U3RhdGUpOwotICAgICAgICBpZHNUb1JlbW92
ZS5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgaWRzVG9SZW1vdmUuYXBwZW5kKGl0LT5rZXkp
OwogICAgIH0KIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaWRzVG9SZW1vdmUuc2l6ZSgp
OyBpKyspCkBAIC0xMzksNyArMTM5LDcgQEAgdm9pZCBJbmplY3RlZFNjcmlwdE1hbmFnZXI6OmRp
c2NhcmRJbmplY3RlZFNjcmlwdHNGb3IoRE9NV2luZG93KiB3aW5kb3cpCiAgICAgLy8gTm93IHJl
bW92ZSBzY3JpcHQgc3RhdGVzIHRoYXQgaGF2ZSBpZCBidXQgbm8gaW5qZWN0ZWQgc2NyaXB0Lgog
ICAgIFZlY3RvcjxTY3JpcHRTdGF0ZSo+IHNjcmlwdFN0YXRlc1RvUmVtb3ZlOwogICAgIGZvciAo
U2NyaXB0U3RhdGVUb0lkOjppdGVyYXRvciBpdCA9IG1fc2NyaXB0U3RhdGVUb0lkLmJlZ2luKCk7
IGl0ICE9IG1fc2NyaXB0U3RhdGVUb0lkLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIFNjcmlwdFN0
YXRlKiBzY3JpcHRTdGF0ZSA9IGl0LT5maXJzdDsKKyAgICAgICAgU2NyaXB0U3RhdGUqIHNjcmlw
dFN0YXRlID0gaXQtPmtleTsKICAgICAgICAgaWYgKHdpbmRvdyA9PSBkb21XaW5kb3dGcm9tU2Ny
aXB0U3RhdGUoc2NyaXB0U3RhdGUpKQogICAgICAgICAgICAgc2NyaXB0U3RhdGVzVG9SZW1vdmUu
YXBwZW5kKHNjcmlwdFN0YXRlKTsKICAgICB9CkBAIC0xNTUsNyArMTU1LDcgQEAgYm9vbCBJbmpl
Y3RlZFNjcmlwdE1hbmFnZXI6OmNhbkFjY2Vzc0luc3BlY3RlZFdvcmtlckNvbnRleHQoU2NyaXB0
U3RhdGUqKQogdm9pZCBJbmplY3RlZFNjcmlwdE1hbmFnZXI6OnJlbGVhc2VPYmplY3RHcm91cChj
b25zdCBTdHJpbmcmIG9iamVjdEdyb3VwKQogewogICAgIGZvciAoSWRUb0luamVjdGVkU2NyaXB0
TWFwOjppdGVyYXRvciBpdCA9IG1faWRUb0luamVjdGVkU2NyaXB0LmJlZ2luKCk7IGl0ICE9IG1f
aWRUb0luamVjdGVkU2NyaXB0LmVuZCgpOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLnJlbGVh
c2VPYmplY3RHcm91cChvYmplY3RHcm91cCk7CisgICAgICAgIGl0LT52YWx1ZS5yZWxlYXNlT2Jq
ZWN0R3JvdXAob2JqZWN0R3JvdXApOwogfQogCiBTdHJpbmcgSW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
OjppbmplY3RlZFNjcmlwdFNvdXJjZSgpCkBAIC0xNzMsOSArMTczLDkgQEAgSW5qZWN0ZWRTY3Jp
cHQgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjppbmplY3RlZFNjcmlwdEZvcihTY3JpcHRTdGF0ZSog
aW5zcGVjdGVkU2MKIHsKICAgICBTY3JpcHRTdGF0ZVRvSWQ6Oml0ZXJhdG9yIGl0ID0gbV9zY3Jp
cHRTdGF0ZVRvSWQuZmluZChpbnNwZWN0ZWRTY3JpcHRTdGF0ZSk7CiAgICAgaWYgKGl0ICE9IG1f
c2NyaXB0U3RhdGVUb0lkLmVuZCgpKSB7Ci0gICAgICAgIElkVG9JbmplY3RlZFNjcmlwdE1hcDo6
aXRlcmF0b3IgaXQxID0gbV9pZFRvSW5qZWN0ZWRTY3JpcHQuZmluZChpdC0+c2Vjb25kKTsKKyAg
ICAgICAgSWRUb0luamVjdGVkU2NyaXB0TWFwOjppdGVyYXRvciBpdDEgPSBtX2lkVG9JbmplY3Rl
ZFNjcmlwdC5maW5kKGl0LT52YWx1ZSk7CiAgICAgICAgIGlmIChpdDEgIT0gbV9pZFRvSW5qZWN0
ZWRTY3JpcHQuZW5kKCkpCi0gICAgICAgICAgICByZXR1cm4gaXQxLT5zZWNvbmQ7CisgICAgICAg
ICAgICByZXR1cm4gaXQxLT52YWx1ZTsKICAgICB9CiAKICAgICBpZiAoIW1faW5zcGVjdGVkU3Rh
dGVBY2Nlc3NDaGVjayhpbnNwZWN0ZWRTY3JpcHRTdGF0ZSkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcAppbmRleCA0ZGIyN2I2Li4wNDYwMGRkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKQEAg
LTE4NiwxMCArMTg2LDEwIEBAIGlubGluZSB2b2lkIFNlbGVjdG9yUHJvZmlsZTo6Y29tbWl0U2Vs
ZWN0b3IoYm9vbCBtYXRjaGVkKQogCiAgICAgUnVsZU1hdGNoaW5nU3RhdHNNYXA6OkFkZFJlc3Vs
dCByZXN1bHQgPSBtX3J1bGVNYXRjaGluZ1N0YXRzLmFkZChtYWtlS2V5KCksIFJ1bGVNYXRjaGlu
Z1N0YXRzKG1fY3VycmVudE1hdGNoRGF0YSwgbWF0Y2hUaW1lTXMsIDEsIG1hdGNoZWQgPyAxIDog
MCkpOwogICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgcmVzdWx0Lml0ZXJh
dG9yLT5zZWNvbmQudG90YWxUaW1lICs9IG1hdGNoVGltZU1zOwotICAgICAgICByZXN1bHQuaXRl
cmF0b3ItPnNlY29uZC5oaXRzICs9IDE7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUu
dG90YWxUaW1lICs9IG1hdGNoVGltZU1zOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVl
LmhpdHMgKz0gMTsKICAgICAgICAgaWYgKG1hdGNoZWQpCi0gICAgICAgICAgICByZXN1bHQuaXRl
cmF0b3ItPnNlY29uZC5tYXRjaGVzICs9IDE7CisgICAgICAgICAgICByZXN1bHQuaXRlcmF0b3It
PnZhbHVlLm1hdGNoZXMgKz0gMTsKICAgICB9CiB9CiAKQEAgLTIwMiw3ICsyMDIsNyBAQCBpbmxp
bmUgdm9pZCBTZWxlY3RvclByb2ZpbGU6OmNvbW1pdFNlbGVjdG9yVGltZSgpCiAgICAgaWYgKGl0
ID09IG1fcnVsZU1hdGNoaW5nU3RhdHMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGl0
LT5zZWNvbmQudG90YWxUaW1lICs9IHByb2Nlc3NpbmdUaW1lTXM7CisgICAgaXQtPnZhbHVlLnRv
dGFsVGltZSArPSBwcm9jZXNzaW5nVGltZU1zOwogfQogCiBQYXNzUmVmUHRyPFR5cGVCdWlsZGVy
OjpDU1M6OlNlbGVjdG9yUHJvZmlsZT4gU2VsZWN0b3JQcm9maWxlOjp0b0luc3BlY3Rvck9iamVj
dCgpIGNvbnN0CkBAIC0yMTAsMTIgKzIxMCwxMiBAQCBQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpD
U1M6OlNlbGVjdG9yUHJvZmlsZT4gU2VsZWN0b3JQcm9maWxlOjp0b0luc3BlY3Rvck9iamVjdAog
ICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkNTUzo6U2VsZWN0b3JQ
cm9maWxlRW50cnk+ID4gc2VsZWN0b3JQcm9maWxlRGF0YSA9IFR5cGVCdWlsZGVyOjpBcnJheTxU
eXBlQnVpbGRlcjo6Q1NTOjpTZWxlY3RvclByb2ZpbGVFbnRyeT46OmNyZWF0ZSgpOwogICAgIGZv
ciAoUnVsZU1hdGNoaW5nU3RhdHNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9ydWxlTWF0Y2hp
bmdTdGF0cy5iZWdpbigpOyBpdCAhPSBtX3J1bGVNYXRjaGluZ1N0YXRzLmVuZCgpOyArK2l0KSB7
CiAgICAgICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpTZWxlY3RvclByb2ZpbGVFbnRyeT4g
ZW50cnkgPSBUeXBlQnVpbGRlcjo6Q1NTOjpTZWxlY3RvclByb2ZpbGVFbnRyeTo6Y3JlYXRlKCkK
LSAgICAgICAgICAgIC5zZXRTZWxlY3RvcihpdC0+c2Vjb25kLnNlbGVjdG9yKQotICAgICAgICAg
ICAgLnNldFVybChpdC0+c2Vjb25kLnVybCkKLSAgICAgICAgICAgIC5zZXRMaW5lTnVtYmVyKGl0
LT5zZWNvbmQubGluZU51bWJlcikKLSAgICAgICAgICAgIC5zZXRUaW1lKGl0LT5zZWNvbmQudG90
YWxUaW1lKQotICAgICAgICAgICAgLnNldEhpdENvdW50KGl0LT5zZWNvbmQuaGl0cykKLSAgICAg
ICAgICAgIC5zZXRNYXRjaENvdW50KGl0LT5zZWNvbmQubWF0Y2hlcyk7CisgICAgICAgICAgICAu
c2V0U2VsZWN0b3IoaXQtPnZhbHVlLnNlbGVjdG9yKQorICAgICAgICAgICAgLnNldFVybChpdC0+
dmFsdWUudXJsKQorICAgICAgICAgICAgLnNldExpbmVOdW1iZXIoaXQtPnZhbHVlLmxpbmVOdW1i
ZXIpCisgICAgICAgICAgICAuc2V0VGltZShpdC0+dmFsdWUudG90YWxUaW1lKQorICAgICAgICAg
ICAgLnNldEhpdENvdW50KGl0LT52YWx1ZS5oaXRzKQorICAgICAgICAgICAgLnNldE1hdGNoQ291
bnQoaXQtPnZhbHVlLm1hdGNoZXMpOwogICAgICAgICBzZWxlY3RvclByb2ZpbGVEYXRhLT5hZGRJ
dGVtKGVudHJ5LnJlbGVhc2UoKSk7CiAgICAgfQogCkBAIC01NDgsNyArNTQ4LDcgQEAgYm9vbCBJ
bnNwZWN0b3JDU1NBZ2VudDo6Zm9yY2VQc2V1ZG9TdGF0ZShFbGVtZW50KiBlbGVtZW50LCBDU1NT
ZWxlY3Rvcjo6UHNldWRvVHkKICAgICBpZiAoaXQgPT0gbV9ub2RlSWRUb0ZvcmNlZFBzZXVkb1N0
YXRlLmVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICB1bnNpZ25lZCBmb3JjZWRQ
c2V1ZG9TdGF0ZSA9IGl0LT5zZWNvbmQ7CisgICAgdW5zaWduZWQgZm9yY2VkUHNldWRvU3RhdGUg
PSBpdC0+dmFsdWU7CiAgICAgc3dpdGNoIChwc2V1ZG9UeXBlKSB7CiAgICAgY2FzZSBDU1NTZWxl
Y3Rvcjo6UHNldWRvQWN0aXZlOgogICAgICAgICByZXR1cm4gZm9yY2VkUHNldWRvU3RhdGUgJiBQ
c2V1ZG9BY3RpdmU7CkBAIC01NzEsNyArNTcxLDcgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6
cmVjYWxjU3R5bGVGb3JQc2V1ZG9TdGF0ZUlmTmVlZGVkKEVsZW1lbnQqIGVsZW1lbnQsIEluc3AK
IAogICAgIHVuc2lnbmVkIGZvcmNlZFBzZXVkb1N0YXRlID0gY29tcHV0ZVBzZXVkb0NsYXNzTWFz
ayhmb3JjZWRQc2V1ZG9DbGFzc2VzKTsKICAgICBOb2RlSWRUb0ZvcmNlZFBzZXVkb1N0YXRlOjpp
dGVyYXRvciBpdCA9IG1fbm9kZUlkVG9Gb3JjZWRQc2V1ZG9TdGF0ZS5maW5kKG5vZGVJZCk7Ci0g
ICAgdW5zaWduZWQgY3VycmVudEZvcmNlZFBzZXVkb1N0YXRlID0gaXQgPT0gbV9ub2RlSWRUb0Zv
cmNlZFBzZXVkb1N0YXRlLmVuZCgpID8gMCA6IGl0LT5zZWNvbmQ7CisgICAgdW5zaWduZWQgY3Vy
cmVudEZvcmNlZFBzZXVkb1N0YXRlID0gaXQgPT0gbV9ub2RlSWRUb0ZvcmNlZFBzZXVkb1N0YXRl
LmVuZCgpID8gMCA6IGl0LT52YWx1ZTsKICAgICBib29sIG5lZWRTdHlsZVJlY2FsYyA9IGZvcmNl
ZFBzZXVkb1N0YXRlICE9IGN1cnJlbnRGb3JjZWRQc2V1ZG9TdGF0ZTsKICAgICBpZiAoIW5lZWRT
dHlsZVJlY2FsYykKICAgICAgICAgcmV0dXJuOwpAQCAtOTAwLDcgKzkwMCw3IEBAIEluc3BlY3Rv
clN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZSogSW5zcGVjdG9yQ1NTQWdlbnQ6OmFzSW5zcGVjdG9y
U3R5bGVTaGVldChFbGVtCiAgICAgICAgIHJldHVybiBpbnNwZWN0b3JTdHlsZVNoZWV0LmdldCgp
OwogICAgIH0KIAotICAgIHJldHVybiBpdC0+c2Vjb25kLmdldCgpOworICAgIHJldHVybiBpdC0+
dmFsdWUuZ2V0KCk7CiB9CiAKIEVsZW1lbnQqIEluc3BlY3RvckNTU0FnZW50OjplbGVtZW50Rm9y
SWQoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkKQpAQCAtOTk0LDcgKzk5NCw3
IEBAIEluc3BlY3RvclN0eWxlU2hlZXQqIEluc3BlY3RvckNTU0FnZW50Ojphc3NlcnRTdHlsZVNo
ZWV0Rm9ySWQoRXJyb3JTdHJpbmcqIGVycm9yCiAgICAgICAgICplcnJvclN0cmluZyA9ICJObyBz
dHlsZSBzaGVldCB3aXRoIGdpdmVuIGlkIGZvdW5kIjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAg
fQotICAgIHJldHVybiBpdC0+c2Vjb25kLmdldCgpOworICAgIHJldHVybiBpdC0+dmFsdWUuZ2V0
KCk7CiB9CiAKIFR5cGVCdWlsZGVyOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46OkVudW0gSW5zcGVj
dG9yQ1NTQWdlbnQ6OmRldGVjdE9yaWdpbihDU1NTdHlsZVNoZWV0KiBwYWdlU3R5bGVTaGVldCwg
RG9jdW1lbnQqIG93bmVyRG9jdW1lbnQpCkBAIC0xMDcwLDcgKzEwNzAsNyBAQCB2b2lkIEluc3Bl
Y3RvckNTU0FnZW50OjpkaWRSZW1vdmVET01Ob2RlKE5vZGUqIG5vZGUpCiAgICAgaWYgKGl0ID09
IG1fbm9kZVRvSW5zcGVjdG9yU3R5bGVTaGVldC5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgbV9pZFRvSW5zcGVjdG9yU3R5bGVTaGVldC5yZW1vdmUoaXQtPnNlY29uZC0+aWQoKSk7Cisg
ICAgbV9pZFRvSW5zcGVjdG9yU3R5bGVTaGVldC5yZW1vdmUoaXQtPnZhbHVlLT5pZCgpKTsKICAg
ICBtX25vZGVUb0luc3BlY3RvclN0eWxlU2hlZXQucmVtb3ZlKG5vZGUpOwogfQogCkBAIC0xMDgz
LDcgKzEwODMsNyBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpkaWRNb2RpZnlET01BdHRyKEVs
ZW1lbnQqIGVsZW1lbnQpCiAgICAgaWYgKGl0ID09IG1fbm9kZVRvSW5zcGVjdG9yU3R5bGVTaGVl
dC5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaXQtPnNlY29uZC0+ZGlkTW9kaWZ5RWxl
bWVudEF0dHJpYnV0ZSgpOworICAgIGl0LT52YWx1ZS0+ZGlkTW9kaWZ5RWxlbWVudEF0dHJpYnV0
ZSgpOwogfQogCiB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpzdHlsZVNoZWV0Q2hhbmdlZChJbnNw
ZWN0b3JTdHlsZVNoZWV0KiBzdHlsZVNoZWV0KQpAQCAtMTA5Niw3ICsxMDk2LDcgQEAgdm9pZCBJ
bnNwZWN0b3JDU1NBZ2VudDo6cmVzZXRQc2V1ZG9TdGF0ZXMoKQogewogICAgIEhhc2hTZXQ8RG9j
dW1lbnQqPiBkb2N1bWVudHNUb0NoYW5nZTsKICAgICBmb3IgKE5vZGVJZFRvRm9yY2VkUHNldWRv
U3RhdGU6Oml0ZXJhdG9yIGl0ID0gbV9ub2RlSWRUb0ZvcmNlZFBzZXVkb1N0YXRlLmJlZ2luKCks
IGVuZCA9IG1fbm9kZUlkVG9Gb3JjZWRQc2V1ZG9TdGF0ZS5lbmQoKTsgaXQgIT0gZW5kOyArK2l0
KSB7Ci0gICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSB0b0VsZW1lbnQobV9kb21BZ2VudC0+bm9k
ZUZvcklkKGl0LT5maXJzdCkpOworICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gdG9FbGVtZW50
KG1fZG9tQWdlbnQtPm5vZGVGb3JJZChpdC0+a2V5KSk7CiAgICAgICAgIGlmIChlbGVtZW50ICYm
IGVsZW1lbnQtPm93bmVyRG9jdW1lbnQoKSkKICAgICAgICAgICAgIGRvY3VtZW50c1RvQ2hhbmdl
LmFkZChlbGVtZW50LT5vd25lckRvY3VtZW50KCkpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb25zb2xlQWdlbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnNvbGVBZ2VudC5jcHAKaW5kZXggMjcwYzRhZS4u
NTUzOThmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNv
bnNvbGVBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNv
bnNvbGVBZ2VudC5jcHAKQEAgLTE3Nyw3ICsxNzcsNyBAQCB2b2lkIEluc3BlY3RvckNvbnNvbGVB
Z2VudDo6c3RvcFRpbWluZyhjb25zdCBTdHJpbmcmIHRpdGxlLCBQYXNzUmVmUHRyPFNjcmlwdENh
bAogICAgIGlmIChpdCA9PSBtX3RpbWVzLmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBk
b3VibGUgc3RhcnRUaW1lID0gaXQtPnNlY29uZDsKKyAgICBkb3VibGUgc3RhcnRUaW1lID0gaXQt
PnZhbHVlOwogICAgIG1fdGltZXMucmVtb3ZlKGl0KTsKIAogICAgIGRvdWJsZSBlbGFwc2VkID0g
Y3VycmVudFRpbWUoKSAqIDEwMDAgLSBzdGFydFRpbWU7CkBAIC0yMDAsNyArMjAwLDcgQEAgdm9p
ZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmNvdW50KFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRz
PiBhcmd1bWVudHMsIFBhc3NSZWYKICAgICBpZiAoaXQgPT0gbV9jb3VudHMuZW5kKCkpCiAgICAg
ICAgIGNvdW50ID0gMTsKICAgICBlbHNlIHsKLSAgICAgICAgY291bnQgPSBpdC0+c2Vjb25kICsg
MTsKKyAgICAgICAgY291bnQgPSBpdC0+dmFsdWUgKyAxOwogICAgICAgICBtX2NvdW50cy5yZW1v
dmUoaXQpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckRPTUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JE
T01BZ2VudC5jcHAKaW5kZXggOTFhMzgzMS4uMGViZDM0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCkBAIC00NzUsNyArNDc1LDcgQEAgTm9k
ZSogSW5zcGVjdG9yRE9NQWdlbnQ6Om5vZGVGb3JJZChpbnQgaWQpCiAKICAgICBIYXNoTWFwPGlu
dCwgTm9kZSo+OjppdGVyYXRvciBpdCA9IG1faWRUb05vZGUuZmluZChpZCk7CiAgICAgaWYgKGl0
ICE9IG1faWRUb05vZGUuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgICAg
ICByZXR1cm4gaXQtPnZhbHVlOwogICAgIHJldHVybiAwOwogfQogCkBAIC05MTAsOSArOTEwLDkg
QEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cGVyZm9ybVNlYXJjaChFcnJvclN0cmluZyosIGNv
bnN0IFN0cmluZyYgd2hpdGVzcGFjZVRyaW0KICAgICBTZWFyY2hSZXN1bHRzOjppdGVyYXRvciBy
ZXN1bHRzSXQgPSBtX3NlYXJjaFJlc3VsdHMuYWRkKCpzZWFyY2hJZCwgVmVjdG9yPFJlZlB0cjxO
b2RlPiA+KCkpLml0ZXJhdG9yOwogCiAgICAgZm9yIChMaXN0SGFzaFNldDxOb2RlKj46Oml0ZXJh
dG9yIGl0ID0gcmVzdWx0Q29sbGVjdG9yLmJlZ2luKCk7IGl0ICE9IHJlc3VsdENvbGxlY3Rvci5l
bmQoKTsgKytpdCkKLSAgICAgICAgcmVzdWx0c0l0LT5zZWNvbmQuYXBwZW5kKCppdCk7CisgICAg
ICAgIHJlc3VsdHNJdC0+dmFsdWUuYXBwZW5kKCppdCk7CiAKLSAgICAqcmVzdWx0Q291bnQgPSBy
ZXN1bHRzSXQtPnNlY29uZC5zaXplKCk7CisgICAgKnJlc3VsdENvdW50ID0gcmVzdWx0c0l0LT52
YWx1ZS5zaXplKCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldFNlYXJjaFJlc3Vs
dHMoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHNlYXJjaElkLCBpbnQg
ZnJvbUluZGV4LCBpbnQgdG9JbmRleCwgUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxpbnQ+ID4m
IG5vZGVJZHMpCkBAIC05MjMsNyArOTIzLDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0
U2VhcmNoUmVzdWx0cyhFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGludCBzaXplID0gaXQtPnNlY29uZC5zaXplKCk7
CisgICAgaW50IHNpemUgPSBpdC0+dmFsdWUuc2l6ZSgpOwogICAgIGlmIChmcm9tSW5kZXggPCAw
IHx8IHRvSW5kZXggPiBzaXplIHx8IGZyb21JbmRleCA+PSB0b0luZGV4KSB7CiAgICAgICAgICpl
cnJvclN0cmluZyA9ICJJbnZhbGlkIHNlYXJjaCByZXN1bHQgcmFuZ2UiOwogICAgICAgICByZXR1
cm47CkBAIC05MzEsNyArOTMxLDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0U2VhcmNo
UmVzdWx0cyhFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYKIAogICAgIG5v
ZGVJZHMgPSBUeXBlQnVpbGRlcjo6QXJyYXk8aW50Pjo6Y3JlYXRlKCk7CiAgICAgZm9yIChpbnQg
aSA9IGZyb21JbmRleDsgaSA8IHRvSW5kZXg7ICsraSkKLSAgICAgICAgbm9kZUlkcy0+YWRkSXRl
bShwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKChpdC0+c2Vjb25kKVtpXS5nZXQoKSkpOworICAgICAg
ICBub2RlSWRzLT5hZGRJdGVtKHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoKGl0LT52YWx1ZSlbaV0u
Z2V0KCkpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6ZGlzY2FyZFNlYXJjaFJlc3Vs
dHMoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIHNlYXJjaElkKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQuY3BwCmluZGV4
IDgwMzIyOTUuLmM0ZmNiODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JET01EZWJ1Z2dlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudC5jcHAKQEAgLTQwMiw4ICs0MDIsOCBAQCB2b2lk
IEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OndpbGxTZW5kWE1MSHR0cFJlcXVlc3QoY29uc3Qg
U3RyaW5nJiB1cmwpCiAgICAgZWxzZSB7CiAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHhockJyZWFrcG9pbnRzID0gbV9zdGF0ZS0+Z2V0T2JqZWN0KERPTURlYnVnZ2VyQWdlbnRTdGF0
ZTo6eGhyQnJlYWtwb2ludHMpOwogICAgICAgICBmb3IgKEluc3BlY3Rvck9iamVjdDo6aXRlcmF0
b3IgaXQgPSB4aHJCcmVha3BvaW50cy0+YmVnaW4oKTsgaXQgIT0geGhyQnJlYWtwb2ludHMtPmVu
ZCgpOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAodXJsLmNvbnRhaW5zKGl0LT5maXJzdCkpIHsK
LSAgICAgICAgICAgICAgICBicmVha3BvaW50VVJMID0gaXQtPmZpcnN0OworICAgICAgICAgICAg
aWYgKHVybC5jb250YWlucyhpdC0+a2V5KSkgeworICAgICAgICAgICAgICAgIGJyZWFrcG9pbnRV
UkwgPSBpdC0+a2V5OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9N
U3RvcmFnZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01T
dG9yYWdlQWdlbnQuY3BwCmluZGV4IDcyNmVmNzIuLmQ1Y2QzMDUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuY3BwCkBAIC03
Nyw3ICs3Nyw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpjbGVhckZyb250ZW5k
KCkKIHsKICAgICBET01TdG9yYWdlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBkb21TdG9yYWdlRW5k
ID0gbV9yZXNvdXJjZXMuZW5kKCk7CiAgICAgZm9yIChET01TdG9yYWdlUmVzb3VyY2VzTWFwOjpp
dGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGRvbVN0b3JhZ2VFbmQ7ICsr
aXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPnVuYmluZCgpOworICAgICAgICBpdC0+dmFsdWUtPnVu
YmluZCgpOwogICAgIG1fZnJvbnRlbmQgPSAwOwogICAgIGRpc2FibGUoMCk7CiB9CkBAIC05Niw3
ICs5Niw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjplbmFibGUoRXJyb3JTdHJp
bmcqKQogCiAgICAgRE9NU3RvcmFnZVJlc291cmNlc01hcDo6aXRlcmF0b3IgcmVzb3VyY2VzRW5k
ID0gbV9yZXNvdXJjZXMuZW5kKCk7CiAgICAgZm9yIChET01TdG9yYWdlUmVzb3VyY2VzTWFwOjpp
dGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IHJlc291cmNlc0VuZDsgKytp
dCkKLSAgICAgICAgaXQtPnNlY29uZC0+YmluZChtX2Zyb250ZW5kKTsKKyAgICAgICAgaXQtPnZh
bHVlLT5iaW5kKG1fZnJvbnRlbmQpOwogfQogCiB2b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2Vu
dDo6ZGlzYWJsZShFcnJvclN0cmluZyopCkBAIC0xNTksOCArMTU5LDggQEAgU3RyaW5nIEluc3Bl
Y3RvckRPTVN0b3JhZ2VBZ2VudDo6c3RvcmFnZUlkKFN0b3JhZ2UqIHN0b3JhZ2UpCiAgICAgYm9v
bCBpc0xvY2FsU3RvcmFnZSA9IChmcmFtZS0+ZG9tV2luZG93KCktPmxvY2FsU3RvcmFnZShlYykg
PT0gc3RvcmFnZSAmJiAhZWMpOwogICAgIERPTVN0b3JhZ2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9y
IGRvbVN0b3JhZ2VFbmQgPSBtX3Jlc291cmNlcy5lbmQoKTsKICAgICBmb3IgKERPTVN0b3JhZ2VS
ZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZG9t
U3RvcmFnZUVuZDsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnNlY29uZC0+aXNTYW1lSG9zdEFu
ZFR5cGUoZnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCksIGlzTG9jYWxTdG9yYWdl
KSkKLSAgICAgICAgICAgIHJldHVybiBpdC0+Zmlyc3Q7CisgICAgICAgIGlmIChpdC0+dmFsdWUt
PmlzU2FtZUhvc3RBbmRUeXBlKGZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLCBp
c0xvY2FsU3RvcmFnZSkpCisgICAgICAgICAgICByZXR1cm4gaXQtPmtleTsKICAgICB9CiAgICAg
cmV0dXJuIFN0cmluZygpOwogfQpAQCAtMTcwLDggKzE3MCw4IEBAIFN0cmluZyBJbnNwZWN0b3JE
T01TdG9yYWdlQWdlbnQ6OnN0b3JhZ2VJZChTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4s
IGJvb2wKICAgICBBU1NFUlQoc2VjdXJpdHlPcmlnaW4pOwogICAgIERPTVN0b3JhZ2VSZXNvdXJj
ZXNNYXA6Oml0ZXJhdG9yIGRvbVN0b3JhZ2VFbmQgPSBtX3Jlc291cmNlcy5lbmQoKTsKICAgICBm
b3IgKERPTVN0b3JhZ2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMuYmVn
aW4oKTsgaXQgIT0gZG9tU3RvcmFnZUVuZDsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnNlY29u
ZC0+aXNTYW1lSG9zdEFuZFR5cGUoc2VjdXJpdHlPcmlnaW4sIGlzTG9jYWxTdG9yYWdlKSkKLSAg
ICAgICAgICAgIHJldHVybiBpdC0+Zmlyc3Q7CisgICAgICAgIGlmIChpdC0+dmFsdWUtPmlzU2Ft
ZUhvc3RBbmRUeXBlKHNlY3VyaXR5T3JpZ2luLCBpc0xvY2FsU3RvcmFnZSkpCisgICAgICAgICAg
ICByZXR1cm4gaXQtPmtleTsKICAgICB9CiAgICAgcmV0dXJuIFN0cmluZygpOwogfQpAQCAtMTgx
LDE0ICsxODEsMTQgQEAgSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlKiBJbnNwZWN0b3JET01T
dG9yYWdlQWdlbnQ6OmdldERPTVN0b3JhZ2VSZXNvdXJjZUZvckkKICAgICBET01TdG9yYWdlUmVz
b3VyY2VzTWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmZpbmQoc3RvcmFnZUlkKTsKICAg
ICBpZiAoaXQgPT0gbV9yZXNvdXJjZXMuZW5kKCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJl
dHVybiBpdC0+c2Vjb25kLmdldCgpOworICAgIHJldHVybiBpdC0+dmFsdWUuZ2V0KCk7CiB9CiAK
IHZvaWQgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpkaWRVc2VET01TdG9yYWdlKFN0b3JhZ2VB
cmVhKiBzdG9yYWdlQXJlYSwgYm9vbCBpc0xvY2FsU3RvcmFnZSwgRnJhbWUqIGZyYW1lKQogewog
ICAgIERPTVN0b3JhZ2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGRvbVN0b3JhZ2VFbmQgPSBtX3Jl
c291cmNlcy5lbmQoKTsKICAgICBmb3IgKERPTVN0b3JhZ2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9y
IGl0ID0gbV9yZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZG9tU3RvcmFnZUVuZDsgKytpdCkgewot
ICAgICAgICBpZiAoaXQtPnNlY29uZC0+aXNTYW1lSG9zdEFuZFR5cGUoZnJhbWUtPmRvY3VtZW50
KCktPnNlY3VyaXR5T3JpZ2luKCksIGlzTG9jYWxTdG9yYWdlKSkKKyAgICAgICAgaWYgKGl0LT52
YWx1ZS0+aXNTYW1lSG9zdEFuZFR5cGUoZnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2lu
KCksIGlzTG9jYWxTdG9yYWdlKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmNwcApp
bmRleCBjY2IwMDNjLi40ZWQ0YWExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuY3BwCkBAIC0yNzUsNyArMjc1LDcgQEAgdm9pZCBJ
bnNwZWN0b3JEYXRhYmFzZUFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcqKQogCiAgICAgRGF0YWJh
c2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGRhdGFiYXNlc0VuZCA9IG1fcmVzb3VyY2VzLmVuZCgp
OwogICAgIGZvciAoRGF0YWJhc2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNvdXJj
ZXMuYmVnaW4oKTsgaXQgIT0gZGF0YWJhc2VzRW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25k
LT5iaW5kKG1fZnJvbnRlbmRQcm92aWRlci0+ZnJvbnRlbmQoKSk7CisgICAgICAgIGl0LT52YWx1
ZS0+YmluZChtX2Zyb250ZW5kUHJvdmlkZXItPmZyb250ZW5kKCkpOwogfQogCiB2b2lkIEluc3Bl
Y3RvckRhdGFiYXNlQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcqKQpAQCAtMzMzLDggKzMzMyw4
IEBAIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6ZXhlY3V0ZVNRTChFcnJvclN0cmluZyog
ZXJyb3IsIGNvbnN0IFN0cmluZyYgZGF0YWJhCiBTdHJpbmcgSW5zcGVjdG9yRGF0YWJhc2VBZ2Vu
dDo6ZGF0YWJhc2VJZChEYXRhYmFzZSogZGF0YWJhc2UpCiB7CiAgICAgZm9yIChEYXRhYmFzZVJl
c291cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSBtX3Jl
c291cmNlcy5lbmQoKTsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnNlY29uZC0+ZGF0YWJhc2Uo
KSA9PSBkYXRhYmFzZSkKLSAgICAgICAgICAgIHJldHVybiBpdC0+Zmlyc3Q7CisgICAgICAgIGlm
IChpdC0+dmFsdWUtPmRhdGFiYXNlKCkgPT0gZGF0YWJhc2UpCisgICAgICAgICAgICByZXR1cm4g
aXQtPmtleTsKICAgICB9CiAgICAgcmV0dXJuIFN0cmluZygpOwogfQpAQCAtMzQyLDggKzM0Miw4
IEBAIFN0cmluZyBJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjpkYXRhYmFzZUlkKERhdGFiYXNlKiBk
YXRhYmFzZSkKIEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UqIEluc3BlY3RvckRhdGFiYXNlQWdl
bnQ6OmZpbmRCeUZpbGVOYW1lKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpCiB7CiAgICAgZm9yIChE
YXRhYmFzZVJlc291cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5iZWdpbigpOyBp
dCAhPSBtX3Jlc291cmNlcy5lbmQoKTsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnNlY29uZC0+
ZGF0YWJhc2UoKS0+ZmlsZU5hbWUoKSA9PSBmaWxlTmFtZSkKLSAgICAgICAgICAgIHJldHVybiBp
dC0+c2Vjb25kLmdldCgpOworICAgICAgICBpZiAoaXQtPnZhbHVlLT5kYXRhYmFzZSgpLT5maWxl
TmFtZSgpID09IGZpbGVOYW1lKQorICAgICAgICAgICAgcmV0dXJuIGl0LT52YWx1ZS5nZXQoKTsK
ICAgICB9CiAgICAgcmV0dXJuIDA7CiB9CkBAIC0zNTMsNyArMzUzLDcgQEAgRGF0YWJhc2UqIElu
c3BlY3RvckRhdGFiYXNlQWdlbnQ6OmRhdGFiYXNlRm9ySWQoY29uc3QgU3RyaW5nJiBkYXRhYmFz
ZUlkKQogICAgIERhdGFiYXNlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2Vz
LmZpbmQoZGF0YWJhc2VJZCk7CiAgICAgaWYgKGl0ID09IG1fcmVzb3VyY2VzLmVuZCgpKQogICAg
ICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gaXQtPnNlY29uZC0+ZGF0YWJhc2UoKTsKKyAgICBy
ZXR1cm4gaXQtPnZhbHVlLT5kYXRhYmFzZSgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJB
Z2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dC5jcHAKaW5kZXggZDZlNDRkOS4uMTJmODE3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcApAQCAtMjQyLDkgKzI0Miw5IEBA
IHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0QnJlYWtwb2ludEJ5VXJsKEVycm9yU3Ry
aW5nKiBlcnJvclN0cmluZywgaW50IGxpCiAKICAgICBTY3JpcHRCcmVha3BvaW50IGJyZWFrcG9p
bnQobGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBjb25kaXRpb24pOwogICAgIGZvciAoU2NyaXB0
c01hcDo6aXRlcmF0b3IgaXQgPSBtX3NjcmlwdHMuYmVnaW4oKTsgaXQgIT0gbV9zY3JpcHRzLmVu
ZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmICghbWF0Y2hlcyhpdC0+c2Vjb25kLnVybCwgdXJsLCBp
c1JlZ2V4KSkKKyAgICAgICAgaWYgKCFtYXRjaGVzKGl0LT52YWx1ZS51cmwsIHVybCwgaXNSZWdl
eCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpE
ZWJ1Z2dlcjo6TG9jYXRpb24+IGxvY2F0aW9uID0gcmVzb2x2ZUJyZWFrcG9pbnQoYnJlYWtwb2lu
dElkLCBpdC0+Zmlyc3QsIGJyZWFrcG9pbnQpOworICAgICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6
OkRlYnVnZ2VyOjpMb2NhdGlvbj4gbG9jYXRpb24gPSByZXNvbHZlQnJlYWtwb2ludChicmVha3Bv
aW50SWQsIGl0LT5rZXksIGJyZWFrcG9pbnQpOwogICAgICAgICBpZiAobG9jYXRpb24pCiAgICAg
ICAgICAgICBsb2NhdGlvbnMtPmFkZEl0ZW0obG9jYXRpb24pOwogICAgIH0KQEAgLTI5Niw4ICsy
OTYsOCBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnJlbW92ZUJyZWFrcG9pbnQoRXJy
b3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGJyZWFrcAogICAgIEJyZWFrcG9pbnRJZFRvRGVidWdT
ZXJ2ZXJCcmVha3BvaW50SWRzTWFwOjppdGVyYXRvciBkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNJ
dGVyYXRvciA9IG1fYnJlYWtwb2ludElkVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHMuZmluZChi
cmVha3BvaW50SWQpOwogICAgIGlmIChkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNJdGVyYXRvciA9
PSBtX2JyZWFrcG9pbnRJZFRvRGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzLmVuZCgpKQogICAgICAg
ICByZXR1cm47Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkZWJ1Z1NlcnZlckJyZWFrcG9p
bnRJZHNJdGVyYXRvci0+c2Vjb25kLnNpemUoKTsgKytpKQotICAgICAgICBzY3JpcHREZWJ1Z1Nl
cnZlcigpLnJlbW92ZUJyZWFrcG9pbnQoZGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzSXRlcmF0b3It
PnNlY29uZFtpXSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkZWJ1Z1NlcnZlckJyZWFr
cG9pbnRJZHNJdGVyYXRvci0+dmFsdWUuc2l6ZSgpOyArK2kpCisgICAgICAgIHNjcmlwdERlYnVn
U2VydmVyKCkucmVtb3ZlQnJlYWtwb2ludChkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNJdGVyYXRv
ci0+dmFsdWVbaV0pOwogICAgIG1fYnJlYWtwb2ludElkVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJ
ZHMucmVtb3ZlKGRlYnVnU2VydmVyQnJlYWtwb2ludElkc0l0ZXJhdG9yKTsKIH0KIApAQCAtMzI1
LDcgKzMyNSw3IEBAIFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj4g
SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6cmVzb2x2ZUJyZWFrCiAgICAgU2NyaXB0c01hcDo6aXRl
cmF0b3Igc2NyaXB0SXRlcmF0b3IgPSBtX3NjcmlwdHMuZmluZChzY3JpcHRJZCk7CiAgICAgaWYg
KHNjcmlwdEl0ZXJhdG9yID09IG1fc2NyaXB0cy5lbmQoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgU2NyaXB0JiBzY3JpcHQgPSBzY3JpcHRJdGVyYXRvci0+c2Vjb25kOworICAgIFNjcmlwdCYg
c2NyaXB0ID0gc2NyaXB0SXRlcmF0b3ItPnZhbHVlOwogICAgIGlmIChicmVha3BvaW50LmxpbmVO
dW1iZXIgPCBzY3JpcHQuc3RhcnRMaW5lIHx8IHNjcmlwdC5lbmRMaW5lIDwgYnJlYWtwb2ludC5s
aW5lTnVtYmVyKQogICAgICAgICByZXR1cm4gMDsKIApAQCAtMzM4LDcgKzMzOCw3IEBAIFBhc3NS
ZWZQdHI8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj4gSW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6cmVzb2x2ZUJyZWFrCiAgICAgQnJlYWtwb2ludElkVG9EZWJ1Z1NlcnZlckJyZWFrcG9p
bnRJZHNNYXA6Oml0ZXJhdG9yIGRlYnVnU2VydmVyQnJlYWtwb2ludElkc0l0ZXJhdG9yID0gbV9i
cmVha3BvaW50SWRUb0RlYnVnU2VydmVyQnJlYWtwb2ludElkcy5maW5kKGJyZWFrcG9pbnRJZCk7
CiAgICAgaWYgKGRlYnVnU2VydmVyQnJlYWtwb2ludElkc0l0ZXJhdG9yID09IG1fYnJlYWtwb2lu
dElkVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHMuZW5kKCkpCiAgICAgICAgIGRlYnVnU2VydmVy
QnJlYWtwb2ludElkc0l0ZXJhdG9yID0gbV9icmVha3BvaW50SWRUb0RlYnVnU2VydmVyQnJlYWtw
b2ludElkcy5zZXQoYnJlYWtwb2ludElkLCBWZWN0b3I8U3RyaW5nPigpKS5pdGVyYXRvcjsKLSAg
ICBkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNJdGVyYXRvci0+c2Vjb25kLmFwcGVuZChkZWJ1Z1Nl
cnZlckJyZWFrcG9pbnRJZCk7CisgICAgZGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzSXRlcmF0b3It
PnZhbHVlLmFwcGVuZChkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZCk7CiAKICAgICBSZWZQdHI8VHlw
ZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj4gbG9jYXRpb24gPSBUeXBlQnVpbGRlcjo6RGVi
dWdnZXI6OkxvY2F0aW9uOjpjcmVhdGUoKQogICAgICAgICAuc2V0U2NyaXB0SWQoc2NyaXB0SWQp
CkBAIC0zNjQsNyArMzY0LDcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZWFyY2hJ
bkNvbnRlbnQoRXJyb3JTdHJpbmcqIGVycm9yLCBjb25zdCBTdHJpbmcmIHMKIAogICAgIFNjcmlw
dHNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zY3JpcHRzLmZpbmQoc2NyaXB0SWQpOwogICAgIGlmIChp
dCAhPSBtX3NjcmlwdHMuZW5kKCkpCi0gICAgICAgIHJlc3VsdHMgPSBDb250ZW50U2VhcmNoVXRp
bHM6OnNlYXJjaEluVGV4dEJ5TGluZXMoaXQtPnNlY29uZC5zb3VyY2UsIHF1ZXJ5LCBjYXNlU2Vu
c2l0aXZlLCBpc1JlZ2V4KTsKKyAgICAgICAgcmVzdWx0cyA9IENvbnRlbnRTZWFyY2hVdGlsczo6
c2VhcmNoSW5UZXh0QnlMaW5lcyhpdC0+dmFsdWUuc291cmNlLCBxdWVyeSwgY2FzZVNlbnNpdGl2
ZSwgaXNSZWdleCk7CiAgICAgZWxzZQogICAgICAgICAqZXJyb3IgPSAiTm8gc2NyaXB0IGZvciBp
ZDogIiArIHNjcmlwdElkOwogfQpAQCAtMzk3LDcgKzM5Nyw3IEBAIHZvaWQgSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudDo6Z2V0U2NyaXB0U291cmNlKEVycm9yU3RyaW5nKiBlcnJvciwgY29uc3QgU3Ry
aW5nJiBzCiB7CiAgICAgU2NyaXB0c01hcDo6aXRlcmF0b3IgaXQgPSBtX3NjcmlwdHMuZmluZChz
Y3JpcHRJZCk7CiAgICAgaWYgKGl0ICE9IG1fc2NyaXB0cy5lbmQoKSkKLSAgICAgICAgKnNjcmlw
dFNvdXJjZSA9IGl0LT5zZWNvbmQuc291cmNlOworICAgICAgICAqc2NyaXB0U291cmNlID0gaXQt
PnZhbHVlLnNvdXJjZTsKICAgICBlbHNlCiAgICAgICAgICplcnJvciA9ICJObyBzY3JpcHQgZm9y
IGlkOiAiICsgc2NyaXB0SWQ7CiB9CkBAIC02MjQsNyArNjI0LDcgQEAgdm9pZCBJbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50OjpkaWRQYXJzZVNvdXJjZShjb25zdCBTdHJpbmcmIHNjcmlwdElkLCBjb25z
dCBTY3JpcHQKIAogICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJyZWFrcG9pbnRzQ29va2ll
ID0gbV9zdGF0ZS0+Z2V0T2JqZWN0KERlYnVnZ2VyQWdlbnRTdGF0ZTo6amF2YVNjcmlwdEJyZWFr
cG9pbnRzKTsKICAgICBmb3IgKEluc3BlY3Rvck9iamVjdDo6aXRlcmF0b3IgaXQgPSBicmVha3Bv
aW50c0Nvb2tpZS0+YmVnaW4oKTsgaXQgIT0gYnJlYWtwb2ludHNDb29raWUtPmVuZCgpOyArK2l0
KSB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJyZWFrcG9pbnRPYmplY3QgPSBp
dC0+c2Vjb25kLT5hc09iamVjdCgpOworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBi
cmVha3BvaW50T2JqZWN0ID0gaXQtPnZhbHVlLT5hc09iamVjdCgpOwogICAgICAgICBib29sIGlz
UmVnZXg7CiAgICAgICAgIGJyZWFrcG9pbnRPYmplY3QtPmdldEJvb2xlYW4oImlzUmVnZXgiLCAm
aXNSZWdleCk7CiAgICAgICAgIFN0cmluZyB1cmw7CkBAIC02MzUsOSArNjM1LDkgQEAgdm9pZCBJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRQYXJzZVNvdXJjZShjb25zdCBTdHJpbmcmIHNjcmlw
dElkLCBjb25zdCBTY3JpcHQKICAgICAgICAgYnJlYWtwb2ludE9iamVjdC0+Z2V0TnVtYmVyKCJs
aW5lTnVtYmVyIiwgJmJyZWFrcG9pbnQubGluZU51bWJlcik7CiAgICAgICAgIGJyZWFrcG9pbnRP
YmplY3QtPmdldE51bWJlcigiY29sdW1uTnVtYmVyIiwgJmJyZWFrcG9pbnQuY29sdW1uTnVtYmVy
KTsKICAgICAgICAgYnJlYWtwb2ludE9iamVjdC0+Z2V0U3RyaW5nKCJjb25kaXRpb24iLCAmYnJl
YWtwb2ludC5jb25kaXRpb24pOwotICAgICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkRlYnVnZ2Vy
OjpMb2NhdGlvbj4gbG9jYXRpb24gPSByZXNvbHZlQnJlYWtwb2ludChpdC0+Zmlyc3QsIHNjcmlw
dElkLCBicmVha3BvaW50KTsKKyAgICAgICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6
TG9jYXRpb24+IGxvY2F0aW9uID0gcmVzb2x2ZUJyZWFrcG9pbnQoaXQtPmtleSwgc2NyaXB0SWQs
IGJyZWFrcG9pbnQpOwogICAgICAgICBpZiAobG9jYXRpb24pCi0gICAgICAgICAgICBtX2Zyb250
ZW5kLT5icmVha3BvaW50UmVzb2x2ZWQoaXQtPmZpcnN0LCBsb2NhdGlvbik7CisgICAgICAgICAg
ICBtX2Zyb250ZW5kLT5icmVha3BvaW50UmVzb2x2ZWQoaXQtPmtleSwgbG9jYXRpb24pOwogICAg
IH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvcklu
ZGV4ZWREQkFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbmRl
eGVkREJBZ2VudC5jcHAKaW5kZXggYzU4NGIxZS4uYzVkZTg5YSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwCkBAIC0zMTcs
MTIgKzMxNywxMiBAQCBwdWJsaWM6CiAgICAgICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8
VHlwZUJ1aWxkZXI6OkluZGV4ZWREQjo6T2JqZWN0U3RvcmU+ID4gb2JqZWN0U3RvcmVzID0gVHlw
ZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpJbmRleGVkREI6Ok9iamVjdFN0b3JlPjo6Y3Jl
YXRlKCk7CiAKICAgICAgICAgZm9yIChJREJEYXRhYmFzZU1ldGFkYXRhOjpPYmplY3RTdG9yZU1h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBkYXRhYmFzZU1ldGFkYXRhLm9iamVjdFN0b3Jlcy5iZWdp
bigpOyBpdCAhPSBkYXRhYmFzZU1ldGFkYXRhLm9iamVjdFN0b3Jlcy5lbmQoKTsgKytpdCkgewot
ICAgICAgICAgICAgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRh
ZGF0YSA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFk
YXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhID0gaXQtPnZhbHVlOwogCiAgICAgICAgICAgICBSZWZQ
dHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpJbmRleGVkREI6Ok9iamVjdFN0b3Jl
SW5kZXg+ID4gaW5kZXhlcyA9IFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6SW5kZXhl
ZERCOjpPYmplY3RTdG9yZUluZGV4Pjo6Y3JlYXRlKCk7CiAKICAgICAgICAgICAgIGZvciAoSURC
T2JqZWN0U3RvcmVNZXRhZGF0YTo6SW5kZXhNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gb2JqZWN0
U3RvcmVNZXRhZGF0YS5pbmRleGVzLmJlZ2luKCk7IGl0ICE9IG9iamVjdFN0b3JlTWV0YWRhdGEu
aW5kZXhlcy5lbmQoKTsgKytpdCkgewotICAgICAgICAgICAgICAgIGNvbnN0IElEQkluZGV4TWV0
YWRhdGEmIGluZGV4TWV0YWRhdGEgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgICAgIGNvbnN0
IElEQkluZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEgPSBpdC0+dmFsdWU7CiAKICAgICAgICAg
ICAgICAgICBSZWZQdHI8T2JqZWN0U3RvcmVJbmRleD4gb2JqZWN0U3RvcmVJbmRleCA9IE9iamVj
dFN0b3JlSW5kZXg6OmNyZWF0ZSgpCiAgICAgICAgICAgICAgICAgICAgIC5zZXROYW1lKGluZGV4
TWV0YWRhdGEubmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JNZW1vcnlBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
TWVtb3J5QWdlbnQuY3BwCmluZGV4IGRiNDExNDUuLjYwZjY5NzkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JNZW1vcnlBZ2VudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck1lbW9yeUFnZW50LmNwcApAQCAtMTcxLDggKzE3
MSw4IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8
VHlwZUJ1aWxkZXI6Ok1lbW9yeTo6Tm9kZUNvdW50PiA+IGNoaWxkcmVuU3RhdHMgPSBUeXBlQnVp
bGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6Ok1lbW9yeTo6Tm9kZUNvdW50Pjo6Y3JlYXRlKCk7CiAg
ICAgICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIGludD46Oml0ZXJhdG9yIGl0ID0gbV9ub2RlTmFt
ZVRvQ291bnQuYmVnaW4oKTsgaXQgIT0gbV9ub2RlTmFtZVRvQ291bnQuZW5kKCk7ICsraXQpIHsK
LSAgICAgICAgICAgIFJlZlB0cjxOb2RlQ291bnQ+IG5vZGVDb3VudCA9IE5vZGVDb3VudDo6Y3Jl
YXRlKCkuc2V0Tm9kZU5hbWUoaXQtPmZpcnN0KQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRDb3VudChpdC0+c2Vjb25kKTsK
KyAgICAgICAgICAgIFJlZlB0cjxOb2RlQ291bnQ+IG5vZGVDb3VudCA9IE5vZGVDb3VudDo6Y3Jl
YXRlKCkuc2V0Tm9kZU5hbWUoaXQtPmtleSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0Q291bnQoaXQtPnZhbHVlKTsKICAg
ICAgICAgICAgIGNoaWxkcmVuU3RhdHMtPmFkZEl0ZW0obm9kZUNvdW50KTsKICAgICAgICAgfQog
ICAgICAgICByZXR1cm4gY2hpbGRyZW5TdGF0cy5yZWxlYXNlKCk7CkBAIC0xODIsOCArMTgyLDgg
QEAgcHVibGljOgogICAgIHsKICAgICAgICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBl
QnVpbGRlcjo6TWVtb3J5OjpMaXN0ZW5lckNvdW50PiA+IGxpc3RlbmVyU3RhdHMgPSBUeXBlQnVp
bGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6Ok1lbW9yeTo6TGlzdGVuZXJDb3VudD46OmNyZWF0ZSgp
OwogICAgICAgICBmb3IgKEhhc2hNYXA8QXRvbWljU3RyaW5nLCBpbnQ+OjppdGVyYXRvciBpdCA9
IG1fZXZlbnRUeXBlVG9Db3VudC5iZWdpbigpOyBpdCAhPSBtX2V2ZW50VHlwZVRvQ291bnQuZW5k
KCk7ICsraXQpIHsKLSAgICAgICAgICAgIFJlZlB0cjxMaXN0ZW5lckNvdW50PiBsaXN0ZW5lckNv
dW50ID0gTGlzdGVuZXJDb3VudDo6Y3JlYXRlKCkuc2V0VHlwZShpdC0+Zmlyc3QpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLnNldENvdW50KGl0LT5zZWNvbmQpOworICAgICAgICAgICAgUmVmUHRyPExpc3Rl
bmVyQ291bnQ+IGxpc3RlbmVyQ291bnQgPSBMaXN0ZW5lckNvdW50OjpjcmVhdGUoKS5zZXRUeXBl
KGl0LT5rZXkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldENvdW50KGl0LT52YWx1ZSk7CiAgICAgICAg
ICAgICBsaXN0ZW5lclN0YXRzLT5hZGRJdGVtKGxpc3RlbmVyQ291bnQpOwogICAgICAgICB9CiAg
ICAgICAgIHJldHVybiBsaXN0ZW5lclN0YXRzLnJlbGVhc2UoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKaW5kZXggOTlkMDJmZS4uM2IzOWI5
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2Vu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5j
cHAKQEAgLTQ1MCw3ICs0NTAsNyBAQCBzdGF0aWMgVmVjdG9yPENhY2hlZFJlc291cmNlKj4gY2Fj
aGVkUmVzb3VyY2VzRm9yRnJhbWUoRnJhbWUqIGZyYW1lKQogICAgIGNvbnN0IENhY2hlZFJlc291
cmNlTG9hZGVyOjpEb2N1bWVudFJlc291cmNlTWFwJiBhbGxSZXNvdXJjZXMgPSBmcmFtZS0+ZG9j
dW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS0+YWxsQ2FjaGVkUmVzb3VyY2VzKCk7CiAg
ICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OkRvY3VtZW50UmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IGFsbFJlc291cmNlcy5lbmQoKTsKICAgICBmb3IgKENhY2hlZFJlc291cmNlTG9h
ZGVyOjpEb2N1bWVudFJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGFsbFJlc291cmNl
cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgQ2FjaGVkUmVzb3VyY2UqIGNh
Y2hlZFJlc291cmNlID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgQ2FjaGVkUmVzb3VyY2Uq
IGNhY2hlZFJlc291cmNlID0gaXQtPnZhbHVlLmdldCgpOwogCiAgICAgICAgIHN3aXRjaCAoY2Fj
aGVkUmVzb3VyY2UtPnR5cGUoKSkgewogICAgICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpJbWFn
ZVJlc291cmNlOgpAQCAtNzU0LDcgKzc1NCw3IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50Ojpk
aWRDbGVhcldpbmRvd09iamVjdEluV29ybGQoRnJhbWUqIGZyYW1lLCBET01XcmFwcGVyV29yCiAg
ICAgICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gc2NyaXB0cy0+ZW5k
KCk7CiAgICAgICAgIGZvciAoSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciBpdCA9IHNj
cmlwdHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgU3RyaW5nIHNj
cmlwdFRleHQ7Ci0gICAgICAgICAgICBpZiAoaXQtPnNlY29uZC0+YXNTdHJpbmcoJnNjcmlwdFRl
eHQpKQorICAgICAgICAgICAgaWYgKGl0LT52YWx1ZS0+YXNTdHJpbmcoJnNjcmlwdFRleHQpKQog
ICAgICAgICAgICAgICAgIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLT5pbmplY3RTY3JpcHQoc2Ny
aXB0VGV4dCwgbWFpbldvcmxkU2NyaXB0U3RhdGUoZnJhbWUpKTsKICAgICAgICAgfQogICAgIH0K
QEAgLTc4Niw4ICs3ODYsOCBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZnJhbWVEZXRhY2hl
ZChGcmFtZSogZnJhbWUpCiB7CiAgICAgSGFzaE1hcDxGcmFtZSosIFN0cmluZz46Oml0ZXJhdG9y
IGl0ZXJhdG9yID0gbV9mcmFtZVRvSWRlbnRpZmllci5maW5kKGZyYW1lKTsKICAgICBpZiAoaXRl
cmF0b3IgIT0gbV9mcmFtZVRvSWRlbnRpZmllci5lbmQoKSkgewotICAgICAgICBtX2Zyb250ZW5k
LT5mcmFtZURldGFjaGVkKGl0ZXJhdG9yLT5zZWNvbmQpOwotICAgICAgICBtX2lkZW50aWZpZXJU
b0ZyYW1lLnJlbW92ZShpdGVyYXRvci0+c2Vjb25kKTsKKyAgICAgICAgbV9mcm9udGVuZC0+ZnJh
bWVEZXRhY2hlZChpdGVyYXRvci0+dmFsdWUpOworICAgICAgICBtX2lkZW50aWZpZXJUb0ZyYW1l
LnJlbW92ZShpdGVyYXRvci0+dmFsdWUpOwogICAgICAgICBtX2ZyYW1lVG9JZGVudGlmaWVyLnJl
bW92ZShpdGVyYXRvcik7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwCmluZGV4IDM4Njg3ZWMuLjQ1M2VjOTcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2Vu
dC5jcHAKQEAgLTI0NiwxMCArMjQ2LDEwIEBAIHZvaWQgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6
Z2V0UHJvZmlsZUhlYWRlcnMoRXJyb3JTdHJpbmcqLCBSZWZQdHI8VHlwZUJ1aWxkZXI6CiAKICAg
ICBQcm9maWxlc01hcDo6aXRlcmF0b3IgcHJvZmlsZXNFbmQgPSBtX3Byb2ZpbGVzLmVuZCgpOwog
ICAgIGZvciAoUHJvZmlsZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wcm9maWxlcy5iZWdpbigpOyBp
dCAhPSBwcm9maWxlc0VuZDsgKytpdCkKLSAgICAgICAgaGVhZGVycy0+YWRkSXRlbShjcmVhdGVQ
cm9maWxlSGVhZGVyKCppdC0+c2Vjb25kKSk7CisgICAgICAgIGhlYWRlcnMtPmFkZEl0ZW0oY3Jl
YXRlUHJvZmlsZUhlYWRlcigqaXQtPnZhbHVlKSk7CiAgICAgSGVhcFNuYXBzaG90c01hcDo6aXRl
cmF0b3Igc25hcHNob3RzRW5kID0gbV9zbmFwc2hvdHMuZW5kKCk7CiAgICAgZm9yIChIZWFwU25h
cHNob3RzTWFwOjppdGVyYXRvciBpdCA9IG1fc25hcHNob3RzLmJlZ2luKCk7IGl0ICE9IHNuYXBz
aG90c0VuZDsgKytpdCkKLSAgICAgICAgaGVhZGVycy0+YWRkSXRlbShjcmVhdGVTbmFwc2hvdEhl
YWRlcigqaXQtPnNlY29uZCkpOworICAgICAgICBoZWFkZXJzLT5hZGRJdGVtKGNyZWF0ZVNuYXBz
aG90SGVhZGVyKCppdC0+dmFsdWUpKTsKIH0KIAogbmFtZXNwYWNlIHsKQEAgLTI3NywxNiArMjc3
LDE2IEBAIHZvaWQgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6Z2V0UHJvZmlsZShFcnJvclN0cmlu
ZyogZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogICAgICAgICBwcm9maWxlT2JqZWN0ID0gVHlwZUJ1aWxkZXI6OlByb2ZpbGVyOjpQcm9m
aWxlOjpjcmVhdGUoKTsKLSAgICAgICAgcHJvZmlsZU9iamVjdC0+c2V0SGVhZChpdC0+c2Vjb25k
LT5idWlsZEluc3BlY3Rvck9iamVjdEZvckhlYWQoKSk7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25k
LT5ib3R0b21VcEhlYWQoKSkKLSAgICAgICAgICAgIHByb2ZpbGVPYmplY3QtPnNldEJvdHRvbVVw
SGVhZChpdC0+c2Vjb25kLT5idWlsZEluc3BlY3Rvck9iamVjdEZvckJvdHRvbVVwSGVhZCgpKTsK
KyAgICAgICAgcHJvZmlsZU9iamVjdC0+c2V0SGVhZChpdC0+dmFsdWUtPmJ1aWxkSW5zcGVjdG9y
T2JqZWN0Rm9ySGVhZCgpKTsKKyAgICAgICAgaWYgKGl0LT52YWx1ZS0+Ym90dG9tVXBIZWFkKCkp
CisgICAgICAgICAgICBwcm9maWxlT2JqZWN0LT5zZXRCb3R0b21VcEhlYWQoaXQtPnZhbHVlLT5i
dWlsZEluc3BlY3Rvck9iamVjdEZvckJvdHRvbVVwSGVhZCgpKTsKICAgICB9IGVsc2UgaWYgKHR5
cGUgPT0gSGVhcFByb2ZpbGVUeXBlKSB7CiAgICAgICAgIEhlYXBTbmFwc2hvdHNNYXA6Oml0ZXJh
dG9yIGl0ID0gbV9zbmFwc2hvdHMuZmluZCh1aWQpOwogICAgICAgICBpZiAoaXQgPT0gbV9zbmFw
c2hvdHMuZW5kKCkpIHsKICAgICAgICAgICAgICplcnJvclN0cmluZyA9ICJQcm9maWxlIHdhc24n
dCBmb3VuZCI7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgUmVmUHRy
PFNjcmlwdEhlYXBTbmFwc2hvdD4gc25hcHNob3QgPSBpdC0+c2Vjb25kOworICAgICAgICBSZWZQ
dHI8U2NyaXB0SGVhcFNuYXBzaG90PiBzbmFwc2hvdCA9IGl0LT52YWx1ZTsKICAgICAgICAgcHJv
ZmlsZU9iamVjdCA9IFR5cGVCdWlsZGVyOjpQcm9maWxlcjo6UHJvZmlsZTo6Y3JlYXRlKCk7CiAg
ICAgICAgIGlmIChtX2Zyb250ZW5kKSB7CiAgICAgICAgICAgICBPdXRwdXRTdHJlYW0gc3RyZWFt
KG1fZnJvbnRlbmQsIHVpZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yUmVzb3VyY2VBZ2VudC5jcHAKaW5kZXggODc3NmJiOC4uZDQ0ZTU0YSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmNwcApA
QCAtMTAxLDcgKzEwMSw3IEBAIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVp
bGRPYmplY3RGb3JIZWFkZXJzKGNvbnN0IEhUVFBIZWFkZXJNYXAmIGhlCiAgICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gaGVhZGVyc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CiAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaGVhZGVycy5lbmQoKTsK
ICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaGVhZGVycy5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGhlYWRlcnNPYmplY3QtPnNldFN0cmluZyhp
dC0+Zmlyc3Quc3RyaW5nKCksIGl0LT5zZWNvbmQpOworICAgICAgICBoZWFkZXJzT2JqZWN0LT5z
ZXRTdHJpbmcoaXQtPmtleS5zdHJpbmcoKSwgaXQtPnZhbHVlKTsKICAgICByZXR1cm4gaGVhZGVy
c09iamVjdDsKIH0KIApAQCAtMjEyLDggKzIxMiw4IEBAIHZvaWQgSW5zcGVjdG9yUmVzb3VyY2VB
Z2VudDo6d2lsbFNlbmRSZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbnRM
CiAgICAgICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaGVhZGVycy0+
ZW5kKCk7CiAgICAgICAgIGZvciAoSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciBpdCA9
IGhlYWRlcnMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgU3RyaW5n
IHZhbHVlOwotICAgICAgICAgICAgaWYgKGl0LT5zZWNvbmQtPmFzU3RyaW5nKCZ2YWx1ZSkpCi0g
ICAgICAgICAgICAgICAgcmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoaXQtPmZpcnN0LCB2YWx1
ZSk7CisgICAgICAgICAgICBpZiAoaXQtPnZhbHVlLT5hc1N0cmluZygmdmFsdWUpKQorICAgICAg
ICAgICAgICAgIHJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKGl0LT5rZXksIHZhbHVlKTsKICAg
ICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclN0YXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdGF0
ZS5jcHAKaW5kZXggNzBhMjQzOS4uYmFmMTBjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yU3RhdGUuY3BwCkBAIC04MCw3ICs4MCw3IEBAIGJvb2wgSW5zcGVjdG9yU3Rh
dGU6OmdldEJvb2xlYW4oY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCiAgICAgSW5zcGVjdG9y
T2JqZWN0OjppdGVyYXRvciBpdCA9IG1fcHJvcGVydGllcy0+ZmluZChwcm9wZXJ0eU5hbWUpOwog
ICAgIGJvb2wgdmFsdWUgPSBmYWxzZTsKICAgICBpZiAoaXQgIT0gbV9wcm9wZXJ0aWVzLT5lbmQo
KSkKLSAgICAgICAgaXQtPnNlY29uZC0+YXNCb29sZWFuKCZ2YWx1ZSk7CisgICAgICAgIGl0LT52
YWx1ZS0+YXNCb29sZWFuKCZ2YWx1ZSk7CiAgICAgcmV0dXJuIHZhbHVlOwogfQogCkBAIC04OSw3
ICs4OSw3IEBAIFN0cmluZyBJbnNwZWN0b3JTdGF0ZTo6Z2V0U3RyaW5nKGNvbnN0IFN0cmluZyYg
cHJvcGVydHlOYW1lKQogICAgIEluc3BlY3Rvck9iamVjdDo6aXRlcmF0b3IgaXQgPSBtX3Byb3Bl
cnRpZXMtPmZpbmQocHJvcGVydHlOYW1lKTsKICAgICBTdHJpbmcgdmFsdWU7CiAgICAgaWYgKGl0
ICE9IG1fcHJvcGVydGllcy0+ZW5kKCkpCi0gICAgICAgIGl0LT5zZWNvbmQtPmFzU3RyaW5nKCZ2
YWx1ZSk7CisgICAgICAgIGl0LT52YWx1ZS0+YXNTdHJpbmcoJnZhbHVlKTsKICAgICByZXR1cm4g
dmFsdWU7CiB9CiAKQEAgLTk4LDcgKzk4LDcgQEAgbG9uZyBJbnNwZWN0b3JTdGF0ZTo6Z2V0TG9u
Zyhjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSkKICAgICBJbnNwZWN0b3JPYmplY3Q6Oml0ZXJh
dG9yIGl0ID0gbV9wcm9wZXJ0aWVzLT5maW5kKHByb3BlcnR5TmFtZSk7CiAgICAgbG9uZyB2YWx1
ZSA9IDA7CiAgICAgaWYgKGl0ICE9IG1fcHJvcGVydGllcy0+ZW5kKCkpCi0gICAgICAgIGl0LT5z
ZWNvbmQtPmFzTnVtYmVyKCZ2YWx1ZSk7CisgICAgICAgIGl0LT52YWx1ZS0+YXNOdW1iZXIoJnZh
bHVlKTsKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKQEAgLTEwNyw3ICsxMDcsNyBAQCBkb3VibGUg
SW5zcGVjdG9yU3RhdGU6OmdldERvdWJsZShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSkKICAg
ICBJbnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9yIGl0ID0gbV9wcm9wZXJ0aWVzLT5maW5kKHByb3Bl
cnR5TmFtZSk7CiAgICAgZG91YmxlIHZhbHVlID0gMDsKICAgICBpZiAoaXQgIT0gbV9wcm9wZXJ0
aWVzLT5lbmQoKSkKLSAgICAgICAgaXQtPnNlY29uZC0+YXNOdW1iZXIoJnZhbHVlKTsKKyAgICAg
ICAgaXQtPnZhbHVlLT5hc051bWJlcigmdmFsdWUpOwogICAgIHJldHVybiB2YWx1ZTsKIH0KIApA
QCAtMTE4LDcgKzExOCw3IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JT
dGF0ZTo6Z2V0T2JqZWN0KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lCiAgICAgICAgIG1fcHJv
cGVydGllcy0+c2V0T2JqZWN0KHByb3BlcnR5TmFtZSwgSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KSk7CiAgICAgICAgIGl0ID0gbV9wcm9wZXJ0aWVzLT5maW5kKHByb3BlcnR5TmFtZSk7CiAgICAg
fQotICAgIHJldHVybiBpdC0+c2Vjb25kLT5hc09iamVjdCgpOworICAgIHJldHVybiBpdC0+dmFs
dWUtPmFzT2JqZWN0KCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcAppbmRleCA2YTNkZTA5
Li5jYmVlNjhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
U3R5bGVTaGVldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0
eWxlU2hlZXQuY3BwCkBAIC01MzUsNyArNTM1LDcgQEAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6
Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yU3R5bGU6OnN0eWxlV2l0aFByb3BlcnRpZXMoKSBjb24K
ICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZEluYWN0aXZhdGUgPSB0cnVlOwogICAgICAg
ICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJldmlv
dXNQYXJzZWRPazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc3VjY2VzcyA9IGFjdGl2
ZUl0LT5zZWNvbmQtPmdldEJvb2xlYW4oVHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUHJvcGVydHk6OlBh
cnNlZE9rLCAmcHJldmlvdXNQYXJzZWRPayk7CisgICAgICAgICAgICAgICAgICAgICAgICBib29s
IHN1Y2Nlc3MgPSBhY3RpdmVJdC0+dmFsdWUtPmdldEJvb2xlYW4oVHlwZUJ1aWxkZXI6OkNTUzo6
Q1NTUHJvcGVydHk6OlBhcnNlZE9rLCAmcHJldmlvdXNQYXJzZWRPayk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoc3VjY2VzcyAmJiAhcHJldmlvdXNQYXJzZWRPaykKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzaG91bGRJbmFjdGl2YXRlID0gdHJ1ZTsKICAgICAgICAgICAgICAg
ICAgICAgfQpAQCAtNTQzLDcgKzU0Myw3IEBAIFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6
Q1NTU3R5bGU+IEluc3BlY3RvclN0eWxlOjpzdHlsZVdpdGhQcm9wZXJ0aWVzKCkgY29uCiAgICAg
ICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZVRvUHJldmlvdXNBY3RpdmVQcm9wZXJ0eS5zZXQo
Y2Fub25pY2FsUHJvcGVydHlOYW1lLCBwcm9wZXJ0eSk7CiAKICAgICAgICAgICAgICAgICBpZiAo
c2hvdWxkSW5hY3RpdmF0ZSkgewotICAgICAgICAgICAgICAgICAgICBhY3RpdmVJdC0+c2Vjb25k
LT5zZXRTdGF0dXMoVHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUHJvcGVydHk6OlN0YXR1czo6SW5hY3Rp
dmUpOworICAgICAgICAgICAgICAgICAgICBhY3RpdmVJdC0+dmFsdWUtPnNldFN0YXR1cyhUeXBl
QnVpbGRlcjo6Q1NTOjpDU1NQcm9wZXJ0eTo6U3RhdHVzOjpJbmFjdGl2ZSk7CiAgICAgICAgICAg
ICAgICAgICAgIHByb3BlcnR5TmFtZVRvUHJldmlvdXNBY3RpdmVQcm9wZXJ0eS5zZXQoY2Fub25p
Y2FsUHJvcGVydHlOYW1lLCBwcm9wZXJ0eSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfSBlbHNlIHsKQEAgLTEwMzUsNyArMTAzNSw3IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yU3R5
bGU+IEluc3BlY3RvclN0eWxlU2hlZXQ6Omluc3BlY3RvclN0eWxlRm9ySWQoY29uc3QgSW5zcGVj
CiAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JTdHlsZT4gaW5zcGVjdG9yU3R5bGUgPSBJbnNwZWN0
b3JTdHlsZTo6Y3JlYXRlKGlkLCBzdHlsZSwgdGhpcyk7CiAgICAgICAgIHJldHVybiBpbnNwZWN0
b3JTdHlsZS5yZWxlYXNlKCk7CiAgICAgfQotICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgIHJl
dHVybiBpdC0+dmFsdWU7CiB9CiAKIHZvaWQgSW5zcGVjdG9yU3R5bGVTaGVldDo6cmVtZW1iZXJJ
bnNwZWN0b3JTdHlsZShSZWZQdHI8SW5zcGVjdG9yU3R5bGU+IGluc3BlY3RvclN0eWxlKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcAppbmRleCBiNmM3MTRi
Li45M2M2ZDM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
VmFsdWVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVz
LmNwcApAQCAtNzE3LDcgKzcxNyw3IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IEluc3Bl
Y3Rvck9iamVjdEJhc2U6OmdldChjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0CiAgICAgRGljdGlv
bmFyeTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2RhdGEuZmluZChuYW1lKTsKICAgICBpZiAoaXQg
PT0gbV9kYXRhLmVuZCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gaXQtPnNlY29u
ZDsKKyAgICByZXR1cm4gaXQtPnZhbHVlOwogfQogCiB2b2lkIEluc3BlY3Rvck9iamVjdEJhc2U6
OnJlbW92ZShjb25zdCBTdHJpbmcmIG5hbWUpCkBAIC03MzksOSArNzM5LDkgQEAgdm9pZCBJbnNw
ZWN0b3JPYmplY3RCYXNlOjp3cml0ZUpTT04oU3RyaW5nQnVpbGRlciogb3V0cHV0KSBjb25zdAog
ICAgICAgICBBU1NFUlQoaXQgIT0gbV9kYXRhLmVuZCgpKTsKICAgICAgICAgaWYgKGkpCiAgICAg
ICAgICAgICBvdXRwdXQtPmFwcGVuZCgnLCcpOwotICAgICAgICBkb3VibGVRdW90ZVN0cmluZyhp
dC0+Zmlyc3QsIG91dHB1dCk7CisgICAgICAgIGRvdWJsZVF1b3RlU3RyaW5nKGl0LT5rZXksIG91
dHB1dCk7CiAgICAgICAgIG91dHB1dC0+YXBwZW5kKCc6Jyk7Ci0gICAgICAgIGl0LT5zZWNvbmQt
PndyaXRlSlNPTihvdXRwdXQpOworICAgICAgICBpdC0+dmFsdWUtPndyaXRlSlNPTihvdXRwdXQp
OwogICAgIH0KICAgICBvdXRwdXQtPmFwcGVuZCgnfScpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvcldvcmtlckFnZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JXb3JrZXJBZ2VudC5jcHAKaW5kZXggMWIzODU5NS4uMDYx
ZjQ3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvcldvcmtl
ckFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yV29ya2Vy
QWdlbnQuY3BwCkBAIC0xOTksOSArMTk5LDkgQEAgdm9pZCBJbnNwZWN0b3JXb3JrZXJBZ2VudDo6
d29ya2VyQ29udGV4dFRlcm1pbmF0ZWQoV29ya2VyQ29udGV4dFByb3h5KiBwcm94eSkKIHsKICAg
ICBtX2RlZGljYXRlZFdvcmtlcnMucmVtb3ZlKHByb3h5KTsKICAgICBmb3IgKFdvcmtlckNoYW5u
ZWxzOjppdGVyYXRvciBpdCA9IG1faWRUb0NoYW5uZWwuYmVnaW4oKTsgaXQgIT0gbV9pZFRvQ2hh
bm5lbC5lbmQoKTsgKytpdCkgewotICAgICAgICBpZiAocHJveHkgPT0gaXQtPnNlY29uZC0+cHJv
eHkoKSkgewotICAgICAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZC0+d29ya2VyKCktPndvcmtl
clRlcm1pbmF0ZWQoaXQtPmZpcnN0KTsKLSAgICAgICAgICAgIGRlbGV0ZSBpdC0+c2Vjb25kOwor
ICAgICAgICBpZiAocHJveHkgPT0gaXQtPnZhbHVlLT5wcm94eSgpKSB7CisgICAgICAgICAgICBt
X2luc3BlY3RvckZyb250ZW5kLT53b3JrZXIoKS0+d29ya2VyVGVybWluYXRlZChpdC0+a2V5KTsK
KyAgICAgICAgICAgIGRlbGV0ZSBpdC0+dmFsdWU7CiAgICAgICAgICAgICBtX2lkVG9DaGFubmVs
LnJlbW92ZShpdCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTIxMSwxNCAr
MjExLDE0IEBAIHZvaWQgSW5zcGVjdG9yV29ya2VyQWdlbnQ6OndvcmtlckNvbnRleHRUZXJtaW5h
dGVkKFdvcmtlckNvbnRleHRQcm94eSogcHJveHkpCiB2b2lkIEluc3BlY3RvcldvcmtlckFnZW50
OjpjcmVhdGVXb3JrZXJGcm9udGVuZENoYW5uZWxzRm9yRXhpc3RpbmdXb3JrZXJzKCkKIHsKICAg
ICBmb3IgKERlZGljYXRlZFdvcmtlcnM6Oml0ZXJhdG9yIGl0ID0gbV9kZWRpY2F0ZWRXb3JrZXJz
LmJlZ2luKCk7IGl0ICE9IG1fZGVkaWNhdGVkV29ya2Vycy5lbmQoKTsgKytpdCkKLSAgICAgICAg
Y3JlYXRlV29ya2VyRnJvbnRlbmRDaGFubmVsKGl0LT5maXJzdCwgaXQtPnNlY29uZCk7CisgICAg
ICAgIGNyZWF0ZVdvcmtlckZyb250ZW5kQ2hhbm5lbChpdC0+a2V5LCBpdC0+dmFsdWUpOwogfQog
CiB2b2lkIEluc3BlY3RvcldvcmtlckFnZW50OjpkZXN0cm95V29ya2VyRnJvbnRlbmRDaGFubmVs
cygpCiB7CiAgICAgZm9yIChXb3JrZXJDaGFubmVsczo6aXRlcmF0b3IgaXQgPSBtX2lkVG9DaGFu
bmVsLmJlZ2luKCk7IGl0ICE9IG1faWRUb0NoYW5uZWwuZW5kKCk7ICsraXQpIHsKLSAgICAgICAg
aXQtPnNlY29uZC0+ZGlzY29ubmVjdEZyb21Xb3JrZXJDb250ZXh0KCk7Ci0gICAgICAgIGRlbGV0
ZSBpdC0+c2Vjb25kOworICAgICAgICBpdC0+dmFsdWUtPmRpc2Nvbm5lY3RGcm9tV29ya2VyQ29u
dGV4dCgpOworICAgICAgICBkZWxldGUgaXQtPnZhbHVlOwogICAgIH0KICAgICBtX2lkVG9DaGFu
bmVsLmNsZWFyKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvTmV0
d29ya1Jlc291cmNlc0RhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL05ldHdvcmtS
ZXNvdXJjZXNEYXRhLmNwcAppbmRleCA2MTlhMTlhLi5iNDFhMWM5MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL05ldHdvcmtSZXNvdXJjZXNEYXRhLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvTmV0d29ya1Jlc291cmNlc0RhdGEuY3BwCkBAIC0yNTUsOSAr
MjU1LDkgQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VzRGF0YTo6Y2xlYXIoY29uc3QgU3RyaW5nJiBw
cmVzZXJ2ZWRMb2FkZXJJZCkKICAgICBSZXNvdXJjZURhdGFNYXA6Oml0ZXJhdG9yIGl0OwogICAg
IFJlc291cmNlRGF0YU1hcDo6aXRlcmF0b3IgZW5kID0gbV9yZXF1ZXN0SWRUb1Jlc291cmNlRGF0
YU1hcC5lbmQoKTsKICAgICBmb3IgKGl0ID0gbV9yZXF1ZXN0SWRUb1Jlc291cmNlRGF0YU1hcC5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgUmVzb3VyY2VEYXRhKiByZXNvdXJj
ZURhdGEgPSBpdC0+c2Vjb25kOworICAgICAgICBSZXNvdXJjZURhdGEqIHJlc291cmNlRGF0YSA9
IGl0LT52YWx1ZTsKICAgICAgICAgaWYgKCFwcmVzZXJ2ZWRMb2FkZXJJZC5pc051bGwoKSAmJiBy
ZXNvdXJjZURhdGEtPmxvYWRlcklkKCkgPT0gcHJlc2VydmVkTG9hZGVySWQpCi0gICAgICAgICAg
ICBwcmVzZXJ2ZWRNYXAuc2V0KGl0LT5maXJzdCwgaXQtPnNlY29uZCk7CisgICAgICAgICAgICBw
cmVzZXJ2ZWRNYXAuc2V0KGl0LT5rZXksIGl0LT52YWx1ZSk7CiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIGRlbGV0ZSByZXNvdXJjZURhdGE7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luQWNjZXNzQ29udHJvbC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmNwcAppbmRleCBhYmEyYmEwLi45YjI2
ZmM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5BY2Nlc3ND
b250cm9sLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5BY2Nlc3ND
b250cm9sLmNwcApAQCAtNjgsNyArNjgsNyBAQCBib29sIGlzU2ltcGxlQ3Jvc3NPcmlnaW5BY2Nl
c3NSZXF1ZXN0KGNvbnN0IFN0cmluZyYgbWV0aG9kLCBjb25zdCBIVFRQSGVhZGVyTWFwJgogCiAg
ICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaGVhZGVyTWFwLmVuZCgpOwog
ICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBoZWFkZXJNYXAuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmICghaXNPbkFjY2Vzc0NvbnRyb2xT
aW1wbGVSZXF1ZXN0SGVhZGVyV2hpdGVsaXN0KGl0LT5maXJzdCwgaXQtPnNlY29uZCkpCisgICAg
ICAgIGlmICghaXNPbkFjY2Vzc0NvbnRyb2xTaW1wbGVSZXF1ZXN0SGVhZGVyV2hpdGVsaXN0KGl0
LT5rZXksIGl0LT52YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBA
IC0xMTYsMTQgKzExNiwxNCBAQCBSZXNvdXJjZVJlcXVlc3QgY3JlYXRlQWNjZXNzQ29udHJvbFBy
ZWZsaWdodFJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZQogICAgIGlmIChyZXF1
ZXN0SGVhZGVyRmllbGRzLnNpemUoKSA+IDApIHsKICAgICAgICAgU3RyaW5nQnVpbGRlciBoZWFk
ZXJCdWZmZXI7CiAgICAgICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcmVx
dWVzdEhlYWRlckZpZWxkcy5iZWdpbigpOwotICAgICAgICBoZWFkZXJCdWZmZXIuYXBwZW5kKGl0
LT5maXJzdCk7CisgICAgICAgIGhlYWRlckJ1ZmZlci5hcHBlbmQoaXQtPmtleSk7CiAgICAgICAg
ICsraXQ7CiAKICAgICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcmVx
dWVzdEhlYWRlckZpZWxkcy5lbmQoKTsKICAgICAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkg
ewogICAgICAgICAgICAgaGVhZGVyQnVmZmVyLmFwcGVuZCgnLCcpOwogICAgICAgICAgICAgaGVh
ZGVyQnVmZmVyLmFwcGVuZCgnICcpOwotICAgICAgICAgICAgaGVhZGVyQnVmZmVyLmFwcGVuZChp
dC0+Zmlyc3QpOworICAgICAgICAgICAgaGVhZGVyQnVmZmVyLmFwcGVuZChpdC0+a2V5KTsKICAg
ICAgICAgfQogCiAgICAgICAgIHByZWZsaWdodFJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKCJB
Y2Nlc3MtQ29udHJvbC1SZXF1ZXN0LUhlYWRlcnMiLCBoZWFkZXJCdWZmZXIudG9TdHJpbmcoKS5s
b3dlcigpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpblBy
ZWZsaWdodFJlc3VsdENhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdp
blByZWZsaWdodFJlc3VsdENhY2hlLmNwcAppbmRleCAwNGQ1ODgxLi45ZDUxYzg3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNo
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luUHJlZmxpZ2h0UmVz
dWx0Q2FjaGUuY3BwCkBAIC0xMjUsOCArMTI1LDggQEAgYm9vbCBDcm9zc09yaWdpblByZWZsaWdo
dFJlc3VsdENhY2hlSXRlbTo6YWxsb3dzQ3Jvc3NPcmlnaW5IZWFkZXJzKGNvbnN0IEhUVFBIZWEK
IHsKICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSByZXF1ZXN0SGVhZGVy
cy5lbmQoKTsKICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcmVx
dWVzdEhlYWRlcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmICghbV9o
ZWFkZXJzLmNvbnRhaW5zKGl0LT5maXJzdCkgJiYgIWlzT25BY2Nlc3NDb250cm9sU2ltcGxlUmVx
dWVzdEhlYWRlcldoaXRlbGlzdChpdC0+Zmlyc3QsIGl0LT5zZWNvbmQpKSB7Ci0gICAgICAgICAg
ICBlcnJvckRlc2NyaXB0aW9uID0gIlJlcXVlc3QgaGVhZGVyIGZpZWxkICIgKyBpdC0+Zmlyc3Qu
c3RyaW5nKCkgKyAiIGlzIG5vdCBhbGxvd2VkIGJ5IEFjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRl
cnMuIjsKKyAgICAgICAgaWYgKCFtX2hlYWRlcnMuY29udGFpbnMoaXQtPmtleSkgJiYgIWlzT25B
Y2Nlc3NDb250cm9sU2ltcGxlUmVxdWVzdEhlYWRlcldoaXRlbGlzdChpdC0+a2V5LCBpdC0+dmFs
dWUpKSB7CisgICAgICAgICAgICBlcnJvckRlc2NyaXB0aW9uID0gIlJlcXVlc3QgaGVhZGVyIGZp
ZWxkICIgKyBpdC0+a2V5LnN0cmluZygpICsgIiBpcyBub3QgYWxsb3dlZCBieSBBY2Nlc3MtQ29u
dHJvbC1BbGxvdy1IZWFkZXJzLiI7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IH0KICAgICB9CkBAIC0xNjcsNyArMTY3LDcgQEAgYm9vbCBDcm9zc09yaWdpblByZWZsaWdodFJl
c3VsdENhY2hlOjpjYW5Ta2lwUHJlZmxpZ2h0KGNvbnN0IFN0cmluZyYgb3JpZ2luLCBjb24KICAg
ICBpZiAoY2FjaGVJdCA9PSBtX3ByZWZsaWdodEhhc2hNYXAuZW5kKCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIGlmIChjYWNoZUl0LT5zZWNvbmQtPmFsbG93c1JlcXVlc3QoaW5jbHVk
ZUNyZWRlbnRpYWxzLCBtZXRob2QsIHJlcXVlc3RIZWFkZXJzKSkKKyAgICBpZiAoY2FjaGVJdC0+
dmFsdWUtPmFsbG93c1JlcXVlc3QoaW5jbHVkZUNyZWRlbnRpYWxzLCBtZXRob2QsIHJlcXVlc3RI
ZWFkZXJzKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBtX3ByZWZsaWdodEhhc2hNYXAu
cmVtb3ZlKGNhY2hlSXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3Vt
ZW50TG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAK
aW5kZXggM2Y0OTNjMS4uMzAwZmEzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVy
L0RvY3VtZW50TG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRM
b2FkZXIuY3BwCkBAIC02MTAsNyArNjEwLDcgQEAgdm9pZCBEb2N1bWVudExvYWRlcjo6Z2V0U3Vi
cmVzb3VyY2VzKFZlY3RvcjxQYXNzUmVmUHRyPEFyY2hpdmVSZXNvdXJjZT4gPiYgc3VicmUKICAg
ICBjb25zdCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6RG9jdW1lbnRSZXNvdXJjZU1hcCYgYWxsUmVz
b3VyY2VzID0gZG9jdW1lbnQtPmNhY2hlZFJlc291cmNlTG9hZGVyKCktPmFsbENhY2hlZFJlc291
cmNlcygpOwogICAgIENhY2hlZFJlc291cmNlTG9hZGVyOjpEb2N1bWVudFJlc291cmNlTWFwOjpj
b25zdF9pdGVyYXRvciBlbmQgPSBhbGxSZXNvdXJjZXMuZW5kKCk7CiAgICAgZm9yIChDYWNoZWRS
ZXNvdXJjZUxvYWRlcjo6RG9jdW1lbnRSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBh
bGxSZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFJlZlB0cjxB
cmNoaXZlUmVzb3VyY2U+IHN1YnJlc291cmNlID0gdGhpcy0+c3VicmVzb3VyY2UoS1VSTChQYXJz
ZWRVUkxTdHJpbmcsIGl0LT5zZWNvbmQtPnVybCgpKSk7CisgICAgICAgIFJlZlB0cjxBcmNoaXZl
UmVzb3VyY2U+IHN1YnJlc291cmNlID0gdGhpcy0+c3VicmVzb3VyY2UoS1VSTChQYXJzZWRVUkxT
dHJpbmcsIGl0LT52YWx1ZS0+dXJsKCkpKTsKICAgICAgICAgaWYgKHN1YnJlc291cmNlKQogICAg
ICAgICAgICAgc3VicmVzb3VyY2VzLmFwcGVuZChzdWJyZXNvdXJjZS5yZWxlYXNlKCkpOwogICAg
IH0KQEAgLTY0Miw4ICs2NDIsOCBAQCB2b2lkIERvY3VtZW50TG9hZGVyOjpzdWJzdGl0dXRlUmVz
b3VyY2VEZWxpdmVyeVRpbWVyRmlyZWQoVGltZXI8RG9jdW1lbnRMb2FkZXI+KgogCiAgICAgU3Vi
c3RpdHV0ZVJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBjb3B5LmVuZCgpOwogICAg
IGZvciAoU3Vic3RpdHV0ZVJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGNvcHkuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFJlZlB0cjxSZXNvdXJjZUxvYWRlcj4g
bG9hZGVyID0gaXQtPmZpcnN0OwotICAgICAgICBTdWJzdGl0dXRlUmVzb3VyY2UqIHJlc291cmNl
ID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgUmVmUHRyPFJlc291cmNlTG9hZGVyPiBsb2Fk
ZXIgPSBpdC0+a2V5OworICAgICAgICBTdWJzdGl0dXRlUmVzb3VyY2UqIHJlc291cmNlID0gaXQt
PnZhbHVlLmdldCgpOwogICAgICAgICAKICAgICAgICAgaWYgKHJlc291cmNlKSB7CiAgICAgICAg
ICAgICBTaGFyZWRCdWZmZXIqIGRhdGEgPSByZXNvdXJjZS0+ZGF0YSgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvbG9hZGVyL01haW5SZXNvdXJjZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvTWFpblJlc291cmNlTG9hZGVyLmNwcAppbmRleCBmZTdkMWY5Li45Y2E0ODI5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvTWFpblJlc291cmNlTG9hZGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvTWFpblJlc291cmNlTG9hZGVyLmNwcApAQCAt
MzYzLDcgKzM2Myw3IEBAIHZvaWQgTWFpblJlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9u
c2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcikKIAogICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gci5odHRwSGVhZGVyRmllbGRzKCkuZmluZChBdG9taWNTdHJpbmcoIngt
ZnJhbWUtb3B0aW9ucyIpKTsKICAgICBpZiAoaXQgIT0gci5odHRwSGVhZGVyRmllbGRzKCkuZW5k
KCkpIHsKLSAgICAgICAgU3RyaW5nIGNvbnRlbnQgPSBpdC0+c2Vjb25kOworICAgICAgICBTdHJp
bmcgY29udGVudCA9IGl0LT52YWx1ZTsKICAgICAgICAgaWYgKG1fZnJhbWUtPmxvYWRlcigpLT5z
aG91bGRJbnRlcnJ1cHRMb2FkRm9yWEZyYW1lT3B0aW9ucyhjb250ZW50LCByLnVybCgpKSkgewog
ICAgICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjb250aW51ZUFmdGVyWEZyYW1l
T3B0aW9uc0RlbmllZChtX2ZyYW1lLmdldCgpLCBkb2N1bWVudExvYWRlcigpLCBpZGVudGlmaWVy
KCksIHIpOwogICAgICAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGNvbnNvbGVN
ZXNzYWdlLCAoIlJlZnVzZWQgdG8gZGlzcGxheSBkb2N1bWVudCBiZWNhdXNlIGRpc3BsYXkgZm9y
YmlkZGVuIGJ5IFgtRnJhbWUtT3B0aW9ucy5cbiIpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL1Jlc291cmNlTG9hZFNjaGVkdWxlci5jcHAKaW5kZXggODAwNGQ4Zi4uOGViNDRkNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFNjaGVkdWxlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFNjaGVkdWxlci5jcHAKQEAg
LTE3NCw3ICsxNzQsNyBAQCB2b2lkIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2VydmVQZW5kaW5n
UmVxdWVzdHMoUmVzb3VyY2VMb2FkUHJpb3JpdHkgbWluaW11bVByaQogICAgIG1faG9zdHMuY2hl
Y2tDb25zaXN0ZW5jeSgpOwogICAgIEhvc3RNYXA6Oml0ZXJhdG9yIGVuZCA9IG1faG9zdHMuZW5k
KCk7CiAgICAgZm9yIChIb3N0TWFwOjppdGVyYXRvciBpdGVyID0gbV9ob3N0cy5iZWdpbigpOyBp
dGVyICE9IGVuZDsgKytpdGVyKQotICAgICAgICBob3N0c1RvU2VydmUuYXBwZW5kKGl0ZXItPnNl
Y29uZCk7CisgICAgICAgIGhvc3RzVG9TZXJ2ZS5hcHBlbmQoaXRlci0+dmFsdWUpOwogCiAgICAg
aW50IHNpemUgPSBob3N0c1RvU2VydmUuc2l6ZSgpOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
c2l6ZTsgKytpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUv
QXBwbGljYXRpb25DYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBw
bGljYXRpb25DYWNoZS5jcHAKaW5kZXggNjNjZDdiYi4uYjdlYTY1MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlLmNwcApAQCAtMTAw
LDExICsxMDAsMTEgQEAgdW5zaWduZWQgQXBwbGljYXRpb25DYWNoZTo6cmVtb3ZlUmVzb3VyY2Uo
Y29uc3QgU3RyaW5nJiB1cmwpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgLy8gVGhlIHJlc291
cmNlIGV4aXN0cywgZ2V0IGl0cyB0eXBlIHNvIHdlIGNhbiByZXR1cm4gaXQuCi0gICAgdW5zaWdu
ZWQgdHlwZSA9IGl0LT5zZWNvbmQtPnR5cGUoKTsKKyAgICB1bnNpZ25lZCB0eXBlID0gaXQtPnZh
bHVlLT50eXBlKCk7CiAKICAgICBtX3Jlc291cmNlcy5yZW1vdmUoaXQpOwogCi0gICAgbV9lc3Rp
bWF0ZWRTaXplSW5TdG9yYWdlIC09IGl0LT5zZWNvbmQtPmVzdGltYXRlZFNpemVJblN0b3JhZ2Uo
KTsKKyAgICBtX2VzdGltYXRlZFNpemVJblN0b3JhZ2UgLT0gaXQtPnZhbHVlLT5lc3RpbWF0ZWRT
aXplSW5TdG9yYWdlKCk7CiAKICAgICByZXR1cm4gdHlwZTsKIH0gICAgCkBAIC0xODAsNyArMTgw
LDcgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlOjpjbGVhclN0b3JhZ2VJRCgpCiAgICAgCiAgICAg
UmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcmVzb3VyY2VzLmVuZCgpOwogICAg
IGZvciAoUmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5jbGVhclN0b3JhZ2VJRCgp
OworICAgICAgICBpdC0+dmFsdWUtPmNsZWFyU3RvcmFnZUlEKCk7CiB9CiAgICAgCiB2b2lkIEFw
cGxpY2F0aW9uQ2FjaGU6OmRlbGV0ZUNhY2hlRm9yT3JpZ2luKFNlY3VyaXR5T3JpZ2luKiBvcmln
aW4pCkBAIC0yMTgsOCArMjE4LDggQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlOjpkdW1wKCkKICAg
ICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4gPjo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gbV9yZXNvdXJjZXMuZW5kKCk7CiAgICAgCiAgICAgZm9yIChIYXNo
TWFwPFN0cmluZywgUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4gPjo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX3Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgcHJpbnRmKCIlcyAiLCBpdC0+Zmlyc3QuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICBBcHBs
aWNhdGlvbkNhY2hlUmVzb3VyY2U6OmR1bXBUeXBlKGl0LT5zZWNvbmQtPnR5cGUoKSk7CisgICAg
ICAgIHByaW50ZigiJXMgIiwgaXQtPmtleS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIEFwcGxp
Y2F0aW9uQ2FjaGVSZXNvdXJjZTo6ZHVtcFR5cGUoaXQtPnZhbHVlLT50eXBlKCkpOwogICAgIH0K
IH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0Fw
cGxpY2F0aW9uQ2FjaGVHcm91cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUv
QXBwbGljYXRpb25DYWNoZUdyb3VwLmNwcAppbmRleCA0ZTQyOTM4Li5kNjQ1MDMwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3Vw
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNo
ZUdyb3VwLmNwcApAQCAtNzc1LDkgKzc3NSw5IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3Vw
OjpkaWRGaW5pc2hMb2FkaW5nTWFuaWZlc3QoKQogICAgIGlmIChpc1VwZ3JhZGVBdHRlbXB0KSB7
CiAgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGU6OlJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBl
bmQgPSBtX25ld2VzdENhY2hlLT5lbmQoKTsKICAgICAgICAgZm9yIChBcHBsaWNhdGlvbkNhY2hl
OjpSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX25ld2VzdENhY2hlLT5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHR5cGUgPSBpdC0+c2Vj
b25kLT50eXBlKCk7CisgICAgICAgICAgICB1bnNpZ25lZCB0eXBlID0gaXQtPnZhbHVlLT50eXBl
KCk7CiAgICAgICAgICAgICBpZiAodHlwZSAmIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6TWFz
dGVyKQotICAgICAgICAgICAgICAgIGFkZEVudHJ5KGl0LT5maXJzdCwgdHlwZSk7CisgICAgICAg
ICAgICAgICAgYWRkRW50cnkoaXQtPmtleSwgdHlwZSk7CiAgICAgICAgIH0KICAgICB9CiAgICAg
CkBAIC0xMDE2LDcgKzEwMTYsNyBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6c3RhcnRM
b2FkaW5nRW50cnkoKQogCiAgICAgQVNTRVJUKCFtX2N1cnJlbnRIYW5kbGUpOwogICAgIAotICAg
IG1fY3VycmVudEhhbmRsZSA9IGNyZWF0ZVJlc291cmNlSGFuZGxlKEtVUkwoUGFyc2VkVVJMU3Ry
aW5nLCBpdC0+Zmlyc3QpLCBtX25ld2VzdENhY2hlID8gbV9uZXdlc3RDYWNoZS0+cmVzb3VyY2VG
b3JVUkwoaXQtPmZpcnN0KSA6IDApOworICAgIG1fY3VycmVudEhhbmRsZSA9IGNyZWF0ZVJlc291
cmNlSGFuZGxlKEtVUkwoUGFyc2VkVVJMU3RyaW5nLCBpdC0+a2V5KSwgbV9uZXdlc3RDYWNoZSA/
IG1fbmV3ZXN0Q2FjaGUtPnJlc291cmNlRm9yVVJMKGl0LT5rZXkpIDogMCk7CiB9CiAKIHZvaWQg
QXBwbGljYXRpb25DYWNoZUdyb3VwOjpkZWxpdmVyRGVsYXllZE1haW5SZXNvdXJjZXMoKQpAQCAt
MTA2NSw3ICsxMDY1LDcgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmFkZEVudHJ5KGNv
bnN0IFN0cmluZyYgdXJsLCB1bnNpZ25lZCB0eXBlKQogICAgIEVudHJ5TWFwOjpBZGRSZXN1bHQg
cmVzdWx0ID0gbV9wZW5kaW5nRW50cmllcy5hZGQodXJsLCB0eXBlKTsKICAgICAKICAgICBpZiAo
IXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCB8PSB0
eXBlOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlIHw9IHR5cGU7CiB9CiAKIHZvaWQg
QXBwbGljYXRpb25DYWNoZUdyb3VwOjphc3NvY2lhdGVEb2N1bWVudExvYWRlcldpdGhDYWNoZShE
b2N1bWVudExvYWRlciogbG9hZGVyLCBBcHBsaWNhdGlvbkNhY2hlKiBjYWNoZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlSG9zdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUhvc3Qu
Y3BwCmluZGV4IDgwMWMxYjMuLmZlOWYwMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVIb3N0LmNwcApAQCAtMjgyLDcgKzI4
Miw3IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZUhvc3Q6OmZpbGxSZXNvdXJjZUxpc3QoUmVzb3Vy
Y2VJbmZvTGlzdCogcmVzb3VyY2VzKQogICAgICAKICAgICBBcHBsaWNhdGlvbkNhY2hlOjpSZXNv
dXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY2FjaGUtPmVuZCgpOwogICAgIGZvciAoQXBw
bGljYXRpb25DYWNoZTo6UmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY2FjaGUtPmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBSZWZQdHI8QXBwbGljYXRpb25DYWNo
ZVJlc291cmNlPiByZXNvdXJjZSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFJlZlB0cjxBcHBsaWNh
dGlvbkNhY2hlUmVzb3VyY2U+IHJlc291cmNlID0gaXQtPnZhbHVlOwogICAgICAgICB1bnNpZ25l
ZCB0eXBlID0gcmVzb3VyY2UtPnR5cGUoKTsKICAgICAgICAgYm9vbCBpc01hc3RlciAgID0gdHlw
ZSAmIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6TWFzdGVyOwogICAgICAgICBib29sIGlzTWFu
aWZlc3QgPSB0eXBlICYgQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpNYW5pZmVzdDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlUmVz
b3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2Fj
aGVSZXNvdXJjZS5jcHAKaW5kZXggZDgzMTc4NC4uOTk3NjZlMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVSZXNvdXJj
ZS5jcHAKQEAgLTU0LDcgKzU0LDcgQEAgaW50NjRfdCBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6
OmVzdGltYXRlZFNpemVJblN0b3JhZ2UoKQogCiAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gcmVzcG9uc2UoKS5odHRwSGVhZGVyRmllbGRzKCkuZW5kKCk7CiAgICAgZm9y
IChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHJlc3BvbnNlKCkuaHR0cEhlYWRl
ckZpZWxkcygpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgbV9lc3RpbWF0ZWRT
aXplSW5TdG9yYWdlICs9IChpdC0+Zmlyc3QubGVuZ3RoKCkgKyBpdC0+c2Vjb25kLmxlbmd0aCgp
ICsgMikgKiBzaXplb2YoVUNoYXIpOworICAgICAgICBtX2VzdGltYXRlZFNpemVJblN0b3JhZ2Ug
Kz0gKGl0LT5rZXkubGVuZ3RoKCkgKyBpdC0+dmFsdWUubGVuZ3RoKCkgKyAyKSAqIHNpemVvZihV
Q2hhcik7CiAKICAgICBtX2VzdGltYXRlZFNpemVJblN0b3JhZ2UgKz0gdXJsKCkuc3RyaW5nKCku
bGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIpOwogICAgIG1fZXN0aW1hdGVkU2l6ZUluU3RvcmFnZSAr
PSBzaXplb2YoaW50KTsgLy8gcmVzcG9uc2UoKS5tX2h0dHBTdGF0dXNDb2RlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2Uu
Y3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9y
YWdlLmNwcAppbmRleCA1ZDEwM2IyLi41YTkwODFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAKQEAg
LTEzNyw4ICsxMzcsOCBAQCBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIEFwcGxpY2F0aW9uQ2FjaGVT
dG9yYWdlOjpmaW5kT3JDcmVhdGVDYWNoZUdyb3VwKGNvbnN0IEtVUgogICAgIENhY2hlR3JvdXBN
YXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX2NhY2hlc0luTWVtb3J5LmFkZChtYW5pZmVzdFVSTCwg
MCk7CiAgICAgCiAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICBBU1NFUlQo
cmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOwotICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9y
LT5zZWNvbmQ7CisgICAgICAgIEFTU0VSVChyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAgICAgfQogCiAgICAgLy8gTG9vayB1
cCB0aGUgZ3JvdXAgaW4gdGhlIGRhdGFiYXNlCkBAIC0xNTAsNyArMTUwLDcgQEAgQXBwbGljYXRp
b25DYWNoZUdyb3VwKiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZmluZE9yQ3JlYXRlQ2FjaGVH
cm91cChjb25zdCBLVVIKICAgICAgICAgbV9jYWNoZUhvc3RTZXQuYWRkKHVybEhvc3RIYXNoKG1h
bmlmZXN0VVJMKSk7CiAgICAgfQogICAgIAotICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0g
Z3JvdXA7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGdyb3VwOwogICAgIAogICAgIHJl
dHVybiBncm91cDsKIH0KQEAgLTE5Nyw3ICsxOTcsNyBAQCBBcHBsaWNhdGlvbkNhY2hlR3JvdXAq
IEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjYWNoZUdyb3VwRm9yVVJMKGNvbnN0IEtVUkwmIHVy
bAogICAgIC8vIENoZWNrIGlmIGEgY2FjaGUgYWxyZWFkeSBleGlzdHMgaW4gbWVtb3J5LgogICAg
IENhY2hlR3JvdXBNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fY2FjaGVzSW5NZW1vcnkuZW5k
KCk7CiAgICAgZm9yIChDYWNoZUdyb3VwTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fY2FjaGVz
SW5NZW1vcnkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIEFwcGxpY2F0aW9u
Q2FjaGVHcm91cCogZ3JvdXAgPSBpdC0+c2Vjb25kOworICAgICAgICBBcHBsaWNhdGlvbkNhY2hl
R3JvdXAqIGdyb3VwID0gaXQtPnZhbHVlOwogCiAgICAgICAgIEFTU0VSVCghZ3JvdXAtPmlzT2Jz
b2xldGUoKSk7CiAKQEAgLTI2OCw3ICsyNjgsNyBAQCBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIEFw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpmYWxsYmFja0NhY2hlR3JvdXBGb3JVUkwoY29uc3QgSwog
ICAgIC8vIENoZWNrIGlmIGFuIGFwcHJvcHJpYXRlIGNhY2hlIGFscmVhZHkgZXhpc3RzIGluIG1l
bW9yeS4KICAgICBDYWNoZUdyb3VwTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2NhY2hlc0lu
TWVtb3J5LmVuZCgpOwogICAgIGZvciAoQ2FjaGVHcm91cE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtX2NhY2hlc0luTWVtb3J5LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBB
cHBsaWNhdGlvbkNhY2hlR3JvdXAqIGdyb3VwID0gaXQtPnNlY29uZDsKKyAgICAgICAgQXBwbGlj
YXRpb25DYWNoZUdyb3VwKiBncm91cCA9IGl0LT52YWx1ZTsKICAgICAgICAgCiAgICAgICAgIEFT
U0VSVCghZ3JvdXAtPmlzT2Jzb2xldGUoKSk7CiAKQEAgLTcxMywxMyArNzEzLDEzIEBAIGJvb2wg
QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hlLCBS
ZXNvdXJjZVN0b3JhZ2VJREpvCiAgICAgewogICAgICAgICBBcHBsaWNhdGlvbkNhY2hlOjpSZXNv
dXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY2FjaGUtPmVuZCgpOwogICAgICAgICBmb3Ig
KEFwcGxpY2F0aW9uQ2FjaGU6OlJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGNhY2hl
LT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIG9sZFN0
b3JhZ2VJRCA9IGl0LT5zZWNvbmQtPnN0b3JhZ2VJRCgpOwotICAgICAgICAgICAgaWYgKCFzdG9y
ZShpdC0+c2Vjb25kLmdldCgpLCBjYWNoZVN0b3JhZ2VJRCkpCisgICAgICAgICAgICB1bnNpZ25l
ZCBvbGRTdG9yYWdlSUQgPSBpdC0+dmFsdWUtPnN0b3JhZ2VJRCgpOworICAgICAgICAgICAgaWYg
KCFzdG9yZShpdC0+dmFsdWUuZ2V0KCksIGNhY2hlU3RvcmFnZUlEKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgIC8vIFN0b3JpbmcgdGhlIHJlc291cmNlIHN1
Y2NlZWRlZC4gTG9nIGl0cyBvbGQgc3RvcmFnZUlEIGluIGNhc2UKICAgICAgICAgICAgIC8vIGl0
IG5lZWRzIHRvIGJlIHJlc3RvcmVkIGxhdGVyLgotICAgICAgICAgICAgc3RvcmFnZUlESm91cm5h
bC0+YWRkKGl0LT5zZWNvbmQuZ2V0KCksIG9sZFN0b3JhZ2VJRCk7CisgICAgICAgICAgICBzdG9y
YWdlSURKb3VybmFsLT5hZGQoaXQtPnZhbHVlLmdldCgpLCBvbGRTdG9yYWdlSUQpOwogICAgICAg
ICB9CiAgICAgfQogICAgIApAQCAtODM5LDkgKzgzOSw5IEBAIGJvb2wgQXBwbGljYXRpb25DYWNo
ZVN0b3JhZ2U6OnN0b3JlKEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2UsIHVuc2ln
bmVkCiAgICAgCiAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcmVzb3Vy
Y2UtPnJlc3BvbnNlKCkuaHR0cEhlYWRlckZpZWxkcygpLmVuZCgpOwogICAgIGZvciAoSFRUUEhl
YWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSByZXNvdXJjZS0+cmVzcG9uc2UoKS5odHRwSGVh
ZGVyRmllbGRzKCkuYmVnaW4oKTsgaXQhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQt
PmtleSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKChVQ2hhciknOicpOwotICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+c2Vjb25kKTsKKyAgICAgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQoaXQtPnZhbHVlKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoKFVDaGFy
KSdcbicpOwogICAgIH0KICAgICAKQEAgLTEyNDEsNyArMTI0MSw3IEBAIHZvaWQgQXBwbGljYXRp
b25DYWNoZVN0b3JhZ2U6OmVtcHR5KCkKICAgICAvLyB1bnRpbCBhIGNhY2hlIHVwZGF0ZSBwcm9j
ZXNzIGhhcyBiZWVuIGluaXRpYXRlZC4KICAgICBDYWNoZUdyb3VwTWFwOjpjb25zdF9pdGVyYXRv
ciBlbmQgPSBtX2NhY2hlc0luTWVtb3J5LmVuZCgpOwogICAgIGZvciAoQ2FjaGVHcm91cE1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2NhY2hlc0luTWVtb3J5LmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+Y2xlYXJTdG9yYWdlSUQoKTsKKyAgICAgICAgaXQt
PnZhbHVlLT5jbGVhclN0b3JhZ2VJRCgpOwogICAgIAogICAgIGNoZWNrRm9yRGVsZXRlZFJlc291
cmNlcygpOwogfQpAQCAtMTMwMyw3ICsxMzAzLDcgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3Rv
cmFnZTo6c3RvcmVDb3B5T2ZDYWNoZShjb25zdCBTdHJpbmcmIGNhY2hlRGlyZWN0b3J5LCBBcHAK
ICAgICAvLyBUcmF2ZXJzZSB0aGUgY2FjaGUgYW5kIGFkZCBjb3BpZXMgb2YgYWxsIHJlc291cmNl
cy4KICAgICBBcHBsaWNhdGlvbkNhY2hlOjpSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gY2FjaGUtPmVuZCgpOwogICAgIGZvciAoQXBwbGljYXRpb25DYWNoZTo6UmVzb3VyY2VNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY2FjaGUtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewot
ICAgICAgICBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqIHJlc291cmNlID0gaXQtPnNlY29uZC5n
ZXQoKTsKKyAgICAgICAgQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJjZSA9IGl0LT52
YWx1ZS5nZXQoKTsKICAgICAgICAgCiAgICAgICAgIFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlUmVz
b3VyY2U+IHJlc291cmNlQ29weSA9IEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6Y3JlYXRlKHJl
c291cmNlLT51cmwoKSwgcmVzb3VyY2UtPnJlc3BvbnNlKCksIHJlc291cmNlLT50eXBlKCksIHJl
c291cmNlLT5kYXRhKCksIHJlc291cmNlLT5wYXRoKCkpOwogICAgICAgICAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL0FyY2hpdmVGYWN0b3J5LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL0FyY2hpdmVGYWN0b3J5LmNwcAppbmRleCBmNjk3MGFh
Li5jZDM4NzZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9BcmNo
aXZlRmFjdG9yeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvQXJjaGl2
ZUZhY3RvcnkuY3BwCkBAIC05NSw3ICs5NSw3IEBAIHZvaWQgQXJjaGl2ZUZhY3Rvcnk6OnJlZ2lz
dGVyS25vd25BcmNoaXZlTUlNRVR5cGVzKCkKICAgICBBcmNoaXZlTUlNRVR5cGVzTWFwOjppdGVy
YXRvciBlbmQgPSBhcmNoaXZlTUlNRVR5cGVzKCkuZW5kKCk7CiAKICAgICBmb3IgKDsgaSAhPSBl
bmQ7ICsraSkKLSAgICAgICAgbWltZVR5cGVzLmFkZChpLT5maXJzdCk7CisgICAgICAgIG1pbWVU
eXBlcy5hZGQoaS0+a2V5KTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9j
YWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5jcHAKaW5kZXggYjBhNzAzMy4uMWQ0OWNkMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2UuY3BwCkBA
IC0xNTIsOCArMTUyLDggQEAgYm9vbCBDYWNoZWRSYXdSZXNvdXJjZTo6Y2FuUmV1c2UoY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiBuZXdSZXF1ZXN0KSBjb25zdAogCiAgICAgSFRUUEhlYWRlck1hcDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gbmV3SGVhZGVycy5lbmQoKTsKICAgICBmb3IgKEhUVFBIZWFk
ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGkgPSBuZXdIZWFkZXJzLmJlZ2luKCk7IGkgIT0gZW5kOyAr
K2kpIHsKLSAgICAgICAgQXRvbWljU3RyaW5nIGhlYWRlck5hbWUgPSBpLT5maXJzdDsKLSAgICAg
ICAgaWYgKGktPnNlY29uZCAhPSBvbGRIZWFkZXJzLmdldChoZWFkZXJOYW1lKSkKKyAgICAgICAg
QXRvbWljU3RyaW5nIGhlYWRlck5hbWUgPSBpLT5rZXk7CisgICAgICAgIGlmIChpLT52YWx1ZSAh
PSBvbGRIZWFkZXJzLmdldChoZWFkZXJOYW1lKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hl
L0NhY2hlZFJlc291cmNlLmNwcAppbmRleCA3NGZhNDk0Li5mMTdhNGQ2IDEwMDc1NQotLS0gYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5jcHAKQEAgLTYwNyw4ICs2MDcs
OCBAQCB2b2lkIENhY2hlZFJlc291cmNlOjpzd2l0Y2hDbGllbnRzVG9SZXZhbGlkYXRlZFJlc291
cmNlKCkKICAgICBWZWN0b3I8Q2FjaGVkUmVzb3VyY2VDbGllbnQqPiBjbGllbnRzVG9Nb3ZlOwog
ICAgIEhhc2hDb3VudGVkU2V0PENhY2hlZFJlc291cmNlQ2xpZW50Kj46Oml0ZXJhdG9yIGVuZDIg
PSBtX2NsaWVudHMuZW5kKCk7CiAgICAgZm9yIChIYXNoQ291bnRlZFNldDxDYWNoZWRSZXNvdXJj
ZUNsaWVudCo+OjppdGVyYXRvciBpdCA9IG1fY2xpZW50cy5iZWdpbigpOyBpdCAhPSBlbmQyOyAr
K2l0KSB7Ci0gICAgICAgIENhY2hlZFJlc291cmNlQ2xpZW50KiBjbGllbnQgPSBpdC0+Zmlyc3Q7
Ci0gICAgICAgIHVuc2lnbmVkIGNvdW50ID0gaXQtPnNlY29uZDsKKyAgICAgICAgQ2FjaGVkUmVz
b3VyY2VDbGllbnQqIGNsaWVudCA9IGl0LT5rZXk7CisgICAgICAgIHVuc2lnbmVkIGNvdW50ID0g
aXQtPnZhbHVlOwogICAgICAgICB3aGlsZSAoY291bnQpIHsKICAgICAgICAgICAgIGNsaWVudHNU
b01vdmUuYXBwZW5kKGNsaWVudCk7CiAgICAgICAgICAgICAtLWNvdW50OwpAQCAtNjQyLDkgKzY0
Miw5IEBAIHZvaWQgQ2FjaGVkUmVzb3VyY2U6OnVwZGF0ZVJlc3BvbnNlQWZ0ZXJSZXZhbGlkYXRp
b24oY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgdmFsCiAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gbmV3SGVhZGVycy5lbmQoKTsKICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbmV3SGVhZGVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKICAgICAgICAgLy8gRG9uJ3QgYWxsb3cgMzA0IHJlc3BvbnNlIHRvIHVwZGF0ZSBjb250ZW50
IGhlYWRlcnMsIHRoZXNlIGNhbid0IGNoYW5nZSBidXQgc29tZSBzZXJ2ZXJzIHNlbmQgd3Jvbmcg
dmFsdWVzLgotICAgICAgICBpZiAoaXQtPmZpcnN0LnN0YXJ0c1dpdGgoY29udGVudEhlYWRlclBy
ZWZpeCwgZmFsc2UpKQorICAgICAgICBpZiAoaXQtPmtleS5zdGFydHNXaXRoKGNvbnRlbnRIZWFk
ZXJQcmVmaXgsIGZhbHNlKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBtX3Jlc3Bv
bnNlLnNldEhUVFBIZWFkZXJGaWVsZChpdC0+Zmlyc3QsIGl0LT5zZWNvbmQpOworICAgICAgICBt
X3Jlc3BvbnNlLnNldEhUVFBIZWFkZXJGaWVsZChpdC0+a2V5LCBpdC0+dmFsdWUpOwogICAgIH0K
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291
cmNlQ2xpZW50V2Fsa2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVz
b3VyY2VDbGllbnRXYWxrZXIuaAppbmRleCA4YjM3ODBiLi43OTMzYjBiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxr
ZXIuaApAQCAtNDIsNyArNDIsNyBAQCBwdWJsaWM6CiAgICAgICAgIEl0ZXJhdG9yIGVuZCA9IHNl
dC5lbmQoKTsKICAgICAgICAgc2l6ZV90IGNsaWVudEluZGV4ID0gMDsKICAgICAgICAgZm9yIChJ
dGVyYXRvciBjdXJyZW50ID0gc2V0LmJlZ2luKCk7IGN1cnJlbnQgIT0gZW5kOyArK2N1cnJlbnQp
Ci0gICAgICAgICAgICBtX2NsaWVudFZlY3RvcltjbGllbnRJbmRleCsrXSA9IGN1cnJlbnQtPmZp
cnN0OworICAgICAgICAgICAgbV9jbGllbnRWZWN0b3JbY2xpZW50SW5kZXgrK10gPSBjdXJyZW50
LT5rZXk7CiAgICAgfQogCiAgICAgVCogbmV4dCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
bG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcAppbmRleCBlMTk4N2MzLi5kZDI3
YmM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNv
dXJjZUxvYWRlci5jcHAKQEAgLTEyNiw3ICsxMjYsNyBAQCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6
fkNhY2hlZFJlc291cmNlTG9hZGVyKCkKICAgICBjbGVhclByZWxvYWRzKCk7CiAgICAgRG9jdW1l
bnRSZXNvdXJjZU1hcDo6aXRlcmF0b3IgZW5kID0gbV9kb2N1bWVudFJlc291cmNlcy5lbmQoKTsK
ICAgICBmb3IgKERvY3VtZW50UmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9kb2N1bWVudFJl
c291cmNlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPnNl
dE93bmluZ0NhY2hlZFJlc291cmNlTG9hZGVyKDApOworICAgICAgICBpdC0+dmFsdWUtPnNldE93
bmluZ0NhY2hlZFJlc291cmNlTG9hZGVyKDApOwogCiAgICAgLy8gTWFrZSBzdXJlIG5vIHJlcXVl
c3RzIHN0aWxsIHBvaW50IHRvIHRoaXMgQ2FjaGVkUmVzb3VyY2VMb2FkZXIKICAgICBBU1NFUlQo
bV9yZXF1ZXN0Q291bnQgPT0gMCk7CkBAIC00MTksNyArNDE5LDcgQEAgQ2FjaGVkUmVzb3VyY2VI
YW5kbGU8Q2FjaGVkUmVzb3VyY2U+IENhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0UmVzb3Vy
Y2UoQ2FjaGUKICAgICBpZiAobWVtb3J5Q2FjaGUoKS0+ZGlzYWJsZWQoKSkgewogICAgICAgICBE
b2N1bWVudFJlc291cmNlTWFwOjppdGVyYXRvciBpdCA9IG1fZG9jdW1lbnRSZXNvdXJjZXMuZmlu
ZCh1cmwuc3RyaW5nKCkpOwogICAgICAgICBpZiAoaXQgIT0gbV9kb2N1bWVudFJlc291cmNlcy5l
bmQoKSkgewotICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0T3duaW5nQ2FjaGVkUmVzb3VyY2VM
b2FkZXIoMCk7CisgICAgICAgICAgICBpdC0+dmFsdWUtPnNldE93bmluZ0NhY2hlZFJlc291cmNl
TG9hZGVyKDApOwogICAgICAgICAgICAgbV9kb2N1bWVudFJlc291cmNlcy5yZW1vdmUoaXQpOwog
ICAgICAgICB9CiAgICAgfQpAQCAtNjMxLDcgKzYzMSw3IEBAIHZvaWQgQ2FjaGVkUmVzb3VyY2VM
b2FkZXI6OnNldEF1dG9Mb2FkSW1hZ2VzKGJvb2wgZW5hYmxlKQogCiAgICAgRG9jdW1lbnRSZXNv
dXJjZU1hcDo6aXRlcmF0b3IgZW5kID0gbV9kb2N1bWVudFJlc291cmNlcy5lbmQoKTsKICAgICBm
b3IgKERvY3VtZW50UmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9kb2N1bWVudFJlc291cmNl
cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgQ2FjaGVkUmVzb3VyY2UqIHJl
c291cmNlID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgQ2FjaGVkUmVzb3VyY2UqIHJlc291
cmNlID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICBpZiAocmVzb3VyY2UtPnR5cGUoKSA9PSBD
YWNoZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJjZSkgewogICAgICAgICAgICAgQ2FjaGVkSW1hZ2Uq
IGltYWdlID0gY29uc3RfY2FzdDxDYWNoZWRJbWFnZSo+KHN0YXRpY19jYXN0PGNvbnN0IENhY2hl
ZEltYWdlKj4ocmVzb3VyY2UpKTsKIApAQCAtNjUxLDcgKzY1MSw3IEBAIHZvaWQgQ2FjaGVkUmVz
b3VyY2VMb2FkZXI6OnJlbW92ZUNhY2hlZFJlc291cmNlKENhY2hlZFJlc291cmNlKiByZXNvdXJj
ZSkgY29uc3QKICNpZm5kZWYgTkRFQlVHCiAgICAgRG9jdW1lbnRSZXNvdXJjZU1hcDo6aXRlcmF0
b3IgaXQgPSBtX2RvY3VtZW50UmVzb3VyY2VzLmZpbmQocmVzb3VyY2UtPnVybCgpKTsKICAgICBp
ZiAoaXQgIT0gbV9kb2N1bWVudFJlc291cmNlcy5lbmQoKSkKLSAgICAgICAgQVNTRVJUKGl0LT5z
ZWNvbmQuZ2V0KCkgPT0gcmVzb3VyY2UpOworICAgICAgICBBU1NFUlQoaXQtPnZhbHVlLmdldCgp
ID09IHJlc291cmNlKTsKICNlbmRpZgogICAgIG1fZG9jdW1lbnRSZXNvdXJjZXMucmVtb3ZlKHJl
c291cmNlLT51cmwoKSk7CiB9CkBAIC02ODEsOSArNjgxLDkgQEAgdm9pZCBDYWNoZWRSZXNvdXJj
ZUxvYWRlcjo6Z2FyYmFnZUNvbGxlY3REb2N1bWVudFJlc291cmNlc1RpbWVyRmlyZWQoVGltZXI8
Q2FjaGUKICAgICBTdHJpbmdWZWN0b3IgcmVzb3VyY2VzVG9EZWxldGU7CiAKICAgICBmb3IgKERv
Y3VtZW50UmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9kb2N1bWVudFJlc291cmNlcy5iZWdp
bigpOyBpdCAhPSBtX2RvY3VtZW50UmVzb3VyY2VzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGlm
IChpdC0+c2Vjb25kLT5oYXNPbmVIYW5kbGUoKSkgewotICAgICAgICAgICAgcmVzb3VyY2VzVG9E
ZWxldGUuYXBwZW5kKGl0LT5maXJzdCk7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRPd25p
bmdDYWNoZWRSZXNvdXJjZUxvYWRlcigwKTsKKyAgICAgICAgaWYgKGl0LT52YWx1ZS0+aGFzT25l
SGFuZGxlKCkpIHsKKyAgICAgICAgICAgIHJlc291cmNlc1RvRGVsZXRlLmFwcGVuZChpdC0+a2V5
KTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+c2V0T3duaW5nQ2FjaGVkUmVzb3VyY2VMb2FkZXIo
MCk7CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9jYWNoZS9NZW1vcnlDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvTWVt
b3J5Q2FjaGUuY3BwCmluZGV4IDI5OWQxMGEuLmZlY2FiM2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
bG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmNwcApAQCAtNTQwLDcgKzU0MCw3IEBAIHZvaWQgTWVt
b3J5Q2FjaGU6OnJlbW92ZVJlc291cmNlc1dpdGhPcmlnaW4oU2VjdXJpdHlPcmlnaW4qIG9yaWdp
bikKIAogICAgIENhY2hlZFJlc291cmNlTWFwOjppdGVyYXRvciBlID0gbV9yZXNvdXJjZXMuZW5k
KCk7CiAgICAgZm9yIChDYWNoZWRSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNl
cy5iZWdpbigpOyBpdCAhPSBlOyArK2l0KSB7Ci0gICAgICAgIENhY2hlZFJlc291cmNlKiByZXNv
dXJjZSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIENhY2hlZFJlc291cmNlKiByZXNvdXJjZSA9IGl0
LT52YWx1ZTsKICAgICAgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiByZXNvdXJjZU9yaWdpbiA9
IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGVGcm9tU3RyaW5nKHJlc291cmNlLT51cmwoKSk7CiAgICAg
ICAgIGlmICghcmVzb3VyY2VPcmlnaW4pCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTU1Niw3
ICs1NTYsNyBAQCB2b2lkIE1lbW9yeUNhY2hlOjpnZXRPcmlnaW5zV2l0aENhY2hlKFNlY3VyaXR5
T3JpZ2luU2V0JiBvcmlnaW5zKQogewogICAgIENhY2hlZFJlc291cmNlTWFwOjppdGVyYXRvciBl
ID0gbV9yZXNvdXJjZXMuZW5kKCk7CiAgICAgZm9yIChDYWNoZWRSZXNvdXJjZU1hcDo6aXRlcmF0
b3IgaXQgPSBtX3Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSBlOyArK2l0KQotICAgICAgICBvcmln
aW5zLmFkZChTZWN1cml0eU9yaWdpbjo6Y3JlYXRlRnJvbVN0cmluZyhpdC0+c2Vjb25kLT51cmwo
KSkpOworICAgICAgICBvcmlnaW5zLmFkZChTZWN1cml0eU9yaWdpbjo6Y3JlYXRlRnJvbVN0cmlu
ZyhpdC0+dmFsdWUtPnVybCgpKSk7CiB9CiAKIHZvaWQgTWVtb3J5Q2FjaGU6OnJlbW92ZUZyb21M
aXZlRGVjb2RlZFJlc291cmNlc0xpc3QoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlKQpAQCAtNjg5
LDcgKzY4OSw3IEBAIE1lbW9yeUNhY2hlOjpTdGF0aXN0aWNzIE1lbW9yeUNhY2hlOjpnZXRTdGF0
aXN0aWNzKCkKICAgICBTdGF0aXN0aWNzIHN0YXRzOwogICAgIENhY2hlZFJlc291cmNlTWFwOjpp
dGVyYXRvciBlID0gbV9yZXNvdXJjZXMuZW5kKCk7CiAgICAgZm9yIChDYWNoZWRSZXNvdXJjZU1h
cDo6aXRlcmF0b3IgaSA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7IGkgIT0gZTsgKytpKSB7Ci0gICAg
ICAgIENhY2hlZFJlc291cmNlKiByZXNvdXJjZSA9IGktPnNlY29uZDsKKyAgICAgICAgQ2FjaGVk
UmVzb3VyY2UqIHJlc291cmNlID0gaS0+dmFsdWU7CiAgICAgICAgIHN3aXRjaCAocmVzb3VyY2Ut
PnR5cGUoKSkgewogICAgICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpJbWFnZVJlc291cmNlOgog
ICAgICAgICAgICAgc3RhdHMuaW1hZ2VzLmFkZFJlc291cmNlKHJlc291cmNlKTsKQEAgLTcyNSw3
ICs3MjUsNyBAQCB2b2lkIE1lbW9yeUNhY2hlOjpzZXREaXNhYmxlZChib29sIGRpc2FibGVkKQog
ICAgICAgICBDYWNoZWRSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaSA9IG1fcmVzb3VyY2VzLmJlZ2lu
KCk7CiAgICAgICAgIGlmIChpID09IG1fcmVzb3VyY2VzLmVuZCgpKQogICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGV2aWN0KGktPnNlY29uZCk7CisgICAgICAgIGV2aWN0KGktPnZhbHVlKTsK
ICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25E
YXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuY3Bw
CmluZGV4IDdjMTM1ODYuLmUwZDc4ZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9pY29uL0ljb25EYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24v
SWNvbkRhdGFiYXNlLmNwcApAQCAtMTg2LDcgKzE4Niw3IEBAIHZvaWQgSWNvbkRhdGFiYXNlOjpy
ZW1vdmVBbGxJY29ucygpCiAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBQYWdlVVJMUmVjb3JkKj46
Oml0ZXJhdG9yIGl0ZXIgPSBtX3BhZ2VVUkxUb1JlY29yZE1hcC5iZWdpbigpOwogICAgICAgICBI
YXNoTWFwPFN0cmluZywgUGFnZVVSTFJlY29yZCo+OjppdGVyYXRvciBlbmQgPSBtX3BhZ2VVUkxU
b1JlY29yZE1hcC5lbmQoKTsKICAgICAgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCi0g
ICAgICAgICAgICAoKml0ZXIpLnNlY29uZC0+c2V0SWNvblJlY29yZCgwKTsKKyAgICAgICAgICAg
ICgqaXRlcikudmFsdWUtPnNldEljb25SZWNvcmQoMCk7CiAgICAgICAgICAgICAKICAgICAgICAg
Ly8gQ2xlYXIgdGhlIGljb25VUkwgLT4gSWNvblJlY29yZCBtYXAKICAgICAgICAgbV9pY29uVVJM
VG9SZWNvcmRNYXAuY2xlYXIoKTsKQEAgLTc3OSw3ICs3NzksNyBAQCBzaXplX3QgSWNvbkRhdGFi
YXNlOjppY29uUmVjb3JkQ291bnRXaXRoRGF0YSgpCiAgICAgSGFzaE1hcDxTdHJpbmcsIEljb25S
ZWNvcmQqPjo6aXRlcmF0b3IgZW5kID0gbV9pY29uVVJMVG9SZWNvcmRNYXAuZW5kKCk7CiAgICAg
CiAgICAgZm9yICg7IGkgIT0gZW5kOyArK2kpCi0gICAgICAgIHJlc3VsdCArPSAoKCppKS5zZWNv
bmQtPmltYWdlRGF0YVN0YXR1cygpID09IEltYWdlRGF0YVN0YXR1c1ByZXNlbnQpOworICAgICAg
ICByZXN1bHQgKz0gKCgqaSkudmFsdWUtPmltYWdlRGF0YVN0YXR1cygpID09IEltYWdlRGF0YVN0
YXR1c1ByZXNlbnQpOwogICAgICAgICAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTE1
NDAsMTMgKzE1NDAsMTMgQEAgdm9pZCBJY29uRGF0YWJhc2U6OnBlcmZvcm1QZW5kaW5nUmV0YWlu
QW5kUmVsZWFzZU9wZXJhdGlvbnMoKQogICAgIH0KIAogICAgIGZvciAoSGFzaENvdW50ZWRTZXQ8
U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSB0b1JldGFpbi5iZWdpbigpLCBlbmQgPSB0b1Jl
dGFpbi5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIEFTU0VSVCghaXQtPmZpcnN0
LmltcGwoKSB8fCBpdC0+Zmlyc3QuaW1wbCgpLT5oYXNPbmVSZWYoKSk7Ci0gICAgICAgIHBlcmZv
cm1SZXRhaW5JY29uRm9yUGFnZVVSTChpdC0+Zmlyc3QsIGl0LT5zZWNvbmQpOworICAgICAgICBB
U1NFUlQoIWl0LT5rZXkuaW1wbCgpIHx8IGl0LT5rZXkuaW1wbCgpLT5oYXNPbmVSZWYoKSk7Cisg
ICAgICAgIHBlcmZvcm1SZXRhaW5JY29uRm9yUGFnZVVSTChpdC0+a2V5LCBpdC0+dmFsdWUpOwog
ICAgIH0KIAogICAgIGZvciAoSGFzaENvdW50ZWRTZXQ8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSB0b1JlbGVhc2UuYmVnaW4oKSwgZW5kID0gdG9SZWxlYXNlLmVuZCgpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKLSAgICAgICAgQVNTRVJUKCFpdC0+Zmlyc3QuaW1wbCgpIHx8IGl0LT5maXJzdC5p
bXBsKCktPmhhc09uZVJlZigpKTsKLSAgICAgICAgcGVyZm9ybVJlbGVhc2VJY29uRm9yUGFnZVVS
TChpdC0+Zmlyc3QsIGl0LT5zZWNvbmQpOworICAgICAgICBBU1NFUlQoIWl0LT5rZXkuaW1wbCgp
IHx8IGl0LT5rZXkuaW1wbCgpLT5oYXNPbmVSZWYoKSk7CisgICAgICAgIHBlcmZvcm1SZWxlYXNl
SWNvbkZvclBhZ2VVUkwoaXQtPmtleSwgaXQtPnZhbHVlKTsKICAgICB9CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRE9NV2luZG93LmNwcAppbmRleCAyZTE5ODM3Li5hZjE5MjgwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9E
T01XaW5kb3cuY3BwCkBAIC0yNDcsNyArMjQ3LDcgQEAgYm9vbCBET01XaW5kb3c6OmRpc3BhdGNo
QWxsUGVuZGluZ0JlZm9yZVVubG9hZEV2ZW50cygpCiAgICAgVmVjdG9yPFJlZlB0cjxET01XaW5k
b3c+ID4gd2luZG93czsKICAgICBET01XaW5kb3dTZXQ6Oml0ZXJhdG9yIGVuZCA9IHNldC5lbmQo
KTsKICAgICBmb3IgKERPTVdpbmRvd1NldDo6aXRlcmF0b3IgaXQgPSBzZXQuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KQotICAgICAgICB3aW5kb3dzLmFwcGVuZChpdC0+Zmlyc3QpOworICAgICAg
ICB3aW5kb3dzLmFwcGVuZChpdC0+a2V5KTsKIAogICAgIHNpemVfdCBzaXplID0gd2luZG93cy5z
aXplKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKQEAgLTI4OSw3
ICsyODksNyBAQCB2b2lkIERPTVdpbmRvdzo6ZGlzcGF0Y2hBbGxQZW5kaW5nVW5sb2FkRXZlbnRz
KCkKICAgICBWZWN0b3I8UmVmUHRyPERPTVdpbmRvdz4gPiB3aW5kb3dzOwogICAgIERPTVdpbmRv
d1NldDo6aXRlcmF0b3IgZW5kID0gc2V0LmVuZCgpOwogICAgIGZvciAoRE9NV2luZG93U2V0Ojpp
dGVyYXRvciBpdCA9IHNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHdpbmRv
d3MuYXBwZW5kKGl0LT5maXJzdCk7CisgICAgICAgIHdpbmRvd3MuYXBwZW5kKGl0LT5rZXkpOwog
CiAgICAgc2l6ZV90IHNpemUgPSB3aW5kb3dzLnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHNpemU7ICsraSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVu
dEhhbmRsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4
IDhlZWEzZmEuLjdiYThmM2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRI
YW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKQEAg
LTM1ODUsNyArMzU4NSw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVUb3VjaEV2ZW50KGNv
bnN0IFBsYXRmb3JtVG91Y2hFdmVudCYgZXZlbnQpCiAgICAgICAgIC8vIHJlbGVhc2VkIG9yIGNh
bmNlbGxlZCBpdCB3aWxsIG9ubHkgYXBwZWFyIGluIHRoZSBjaGFuZ2VkVG91Y2hlcyBsaXN0Lgog
ICAgICAgICBpZiAocG9pbnRTdGF0ZSAhPSBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoUmVsZWFz
ZWQgJiYgcG9pbnRTdGF0ZSAhPSBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoQ2FuY2VsbGVkKSB7
CiAgICAgICAgICAgICB0b3VjaGVzLT5hcHBlbmQodG91Y2gpOwotICAgICAgICAgICAgdGFyZ2V0
VG91Y2hlc0l0ZXJhdG9yLT5zZWNvbmQtPmFwcGVuZCh0b3VjaCk7CisgICAgICAgICAgICB0YXJn
ZXRUb3VjaGVzSXRlcmF0b3ItPnZhbHVlLT5hcHBlbmQodG91Y2gpOwogICAgICAgICB9CiAKICAg
ICAgICAgLy8gTm93IGJ1aWxkIHVwIHRoZSBjb3JyZWN0IGxpc3QgZm9yIGNoYW5nZWRUb3VjaGVz
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0ZyYW1lLmNwcAppbmRleCA1NjkyMDhmLi42MDllYWJlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Zy
YW1lLmNwcApAQCAtNTc3LDcgKzU3Nyw3IEBAIHZvaWQgRnJhbWU6OmluamVjdFVzZXJTY3JpcHRz
KFVzZXJTY3JpcHRJbmplY3Rpb25UaW1lIGluamVjdGlvblRpbWUpCiAgICAgICAgIHJldHVybjsK
ICAgICBVc2VyU2NyaXB0TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSB1c2VyU2NyaXB0cy0+ZW5k
KCk7CiAgICAgZm9yIChVc2VyU2NyaXB0TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHVzZXJTY3Jp
cHRzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGluamVjdFVzZXJTY3JpcHRz
Rm9yV29ybGQoaXQtPmZpcnN0LmdldCgpLCAqaXQtPnNlY29uZCwgaW5qZWN0aW9uVGltZSk7Cisg
ICAgICAgIGluamVjdFVzZXJTY3JpcHRzRm9yV29ybGQoaXQtPmtleS5nZXQoKSwgKml0LT52YWx1
ZSwgaW5qZWN0aW9uVGltZSk7CiB9CiAKIHZvaWQgRnJhbWU6OmluamVjdFVzZXJTY3JpcHRzRm9y
V29ybGQoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCwgY29uc3QgVXNlclNjcmlwdFZlY3RvciYgdXNl
clNjcmlwdHMsIFVzZXJTY3JpcHRJbmplY3Rpb25UaW1lIGluamVjdGlvblRpbWUpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1BhZ2VHcm91cC5jcHAKaW5kZXggNDVkMjVmNS4uMDMyN2JiMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9QYWdlR3JvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
UGFnZUdyb3VwLmNwcApAQCAtOTMsMTIgKzkzLDEyIEBAIFBhZ2VHcm91cCogUGFnZUdyb3VwOjpw
YWdlR3JvdXAoY29uc3QgU3RyaW5nJiBncm91cE5hbWUpCiAgICAgUGFnZUdyb3VwTWFwOjpBZGRS
ZXN1bHQgcmVzdWx0ID0gcGFnZUdyb3Vwcy0+YWRkKGdyb3VwTmFtZSwgMCk7CiAKICAgICBpZiAo
cmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgQVNTRVJUKCFyZXN1bHQuaXRlcmF0b3ItPnNl
Y29uZCk7Ci0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gbmV3IFBhZ2VHcm91cChn
cm91cE5hbWUpOworICAgICAgICBBU1NFUlQoIXJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOworICAg
ICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gbmV3IFBhZ2VHcm91cChncm91cE5hbWUpOwog
ICAgIH0KIAotICAgIEFTU0VSVChyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7Ci0gICAgcmV0dXJu
IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgIEFTU0VSVChyZXN1bHQuaXRlcmF0b3ItPnZh
bHVlKTsKKyAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIAogdm9pZCBQYWdl
R3JvdXA6OmNsb3NlTG9jYWxTdG9yYWdlKCkKQEAgLTEwOSw4ICsxMDksOCBAQCB2b2lkIFBhZ2VH
cm91cDo6Y2xvc2VMb2NhbFN0b3JhZ2UoKQogICAgIFBhZ2VHcm91cE1hcDo6aXRlcmF0b3IgZW5k
ID0gcGFnZUdyb3Vwcy0+ZW5kKCk7CiAKICAgICBmb3IgKFBhZ2VHcm91cE1hcDo6aXRlcmF0b3Ig
aXQgPSBwYWdlR3JvdXBzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYg
KGl0LT5zZWNvbmQtPmhhc0xvY2FsU3RvcmFnZSgpKQotICAgICAgICAgICAgaXQtPnNlY29uZC0+
bG9jYWxTdG9yYWdlKCktPmNsb3NlKCk7CisgICAgICAgIGlmIChpdC0+dmFsdWUtPmhhc0xvY2Fs
U3RvcmFnZSgpKQorICAgICAgICAgICAgaXQtPnZhbHVlLT5sb2NhbFN0b3JhZ2UoKS0+Y2xvc2Uo
KTsKICAgICB9CiB9CiAKQEAgLTEyMSw4ICsxMjEsOCBAQCB2b2lkIFBhZ2VHcm91cDo6Y2xlYXJM
b2NhbFN0b3JhZ2VGb3JBbGxPcmlnaW5zKCkKIAogICAgIFBhZ2VHcm91cE1hcDo6aXRlcmF0b3Ig
ZW5kID0gcGFnZUdyb3Vwcy0+ZW5kKCk7CiAgICAgZm9yIChQYWdlR3JvdXBNYXA6Oml0ZXJhdG9y
IGl0ID0gcGFnZUdyb3Vwcy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlm
IChpdC0+c2Vjb25kLT5oYXNMb2NhbFN0b3JhZ2UoKSkKLSAgICAgICAgICAgIGl0LT5zZWNvbmQt
PmxvY2FsU3RvcmFnZSgpLT5jbGVhckFsbE9yaWdpbnNGb3JEZWxldGlvbigpOworICAgICAgICBp
ZiAoaXQtPnZhbHVlLT5oYXNMb2NhbFN0b3JhZ2UoKSkKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+
bG9jYWxTdG9yYWdlKCktPmNsZWFyQWxsT3JpZ2luc0ZvckRlbGV0aW9uKCk7CiAgICAgfQogfQog
CkBAIC0xMzMsOCArMTMzLDggQEAgdm9pZCBQYWdlR3JvdXA6OmNsZWFyTG9jYWxTdG9yYWdlRm9y
T3JpZ2luKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCiAKICAgICBQYWdlR3JvdXBNYXA6Oml0ZXJh
dG9yIGVuZCA9IHBhZ2VHcm91cHMtPmVuZCgpOwogICAgIGZvciAoUGFnZUdyb3VwTWFwOjppdGVy
YXRvciBpdCA9IHBhZ2VHcm91cHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAg
ICBpZiAoaXQtPnNlY29uZC0+aGFzTG9jYWxTdG9yYWdlKCkpCi0gICAgICAgICAgICBpdC0+c2Vj
b25kLT5sb2NhbFN0b3JhZ2UoKS0+Y2xlYXJPcmlnaW5Gb3JEZWxldGlvbihvcmlnaW4pOworICAg
ICAgICBpZiAoaXQtPnZhbHVlLT5oYXNMb2NhbFN0b3JhZ2UoKSkKKyAgICAgICAgICAgIGl0LT52
YWx1ZS0+bG9jYWxTdG9yYWdlKCktPmNsZWFyT3JpZ2luRm9yRGVsZXRpb24ob3JpZ2luKTsKICAg
ICB9ICAgIAogfQogICAgIApAQCAtMTQ1LDggKzE0NSw4IEBAIHZvaWQgUGFnZUdyb3VwOjpzeW5j
TG9jYWxTdG9yYWdlKCkKIAogICAgIFBhZ2VHcm91cE1hcDo6aXRlcmF0b3IgZW5kID0gcGFnZUdy
b3Vwcy0+ZW5kKCk7CiAgICAgZm9yIChQYWdlR3JvdXBNYXA6Oml0ZXJhdG9yIGl0ID0gcGFnZUdy
b3Vwcy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25k
LT5oYXNMb2NhbFN0b3JhZ2UoKSkKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPmxvY2FsU3RvcmFn
ZSgpLT5zeW5jKCk7CisgICAgICAgIGlmIChpdC0+dmFsdWUtPmhhc0xvY2FsU3RvcmFnZSgpKQor
ICAgICAgICAgICAgaXQtPnZhbHVlLT5sb2NhbFN0b3JhZ2UoKS0+c3luYygpOwogICAgIH0KIH0K
IApAQCAtMjY5LDcgKzI2OSw3IEBAIHZvaWQgUGFnZUdyb3VwOjphZGRVc2VyU2NyaXB0VG9Xb3Js
ZChET01XcmFwcGVyV29ybGQqIHdvcmxkLCBjb25zdCBTdHJpbmcmIHNvdXJjCiAgICAgT3duUHRy
PFVzZXJTY3JpcHQ+IHVzZXJTY3JpcHQgPSBhZG9wdFB0cihuZXcgVXNlclNjcmlwdChzb3VyY2Us
IHVybCwgd2hpdGVsaXN0LCBibGFja2xpc3QsIGluamVjdGlvblRpbWUsIGluamVjdGVkRnJhbWVz
KSk7CiAgICAgaWYgKCFtX3VzZXJTY3JpcHRzKQogICAgICAgICBtX3VzZXJTY3JpcHRzID0gYWRv
cHRQdHIobmV3IFVzZXJTY3JpcHRNYXApOwotICAgIE93blB0cjxVc2VyU2NyaXB0VmVjdG9yPiYg
c2NyaXB0c0luV29ybGQgPSBtX3VzZXJTY3JpcHRzLT5hZGQod29ybGQsIG51bGxwdHIpLml0ZXJh
dG9yLT5zZWNvbmQ7CisgICAgT3duUHRyPFVzZXJTY3JpcHRWZWN0b3I+JiBzY3JpcHRzSW5Xb3Js
ZCA9IG1fdXNlclNjcmlwdHMtPmFkZCh3b3JsZCwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwog
ICAgIGlmICghc2NyaXB0c0luV29ybGQpCiAgICAgICAgIHNjcmlwdHNJbldvcmxkID0gYWRvcHRQ
dHIobmV3IFVzZXJTY3JpcHRWZWN0b3IpOwogICAgIHNjcmlwdHNJbldvcmxkLT5hcHBlbmQodXNl
clNjcmlwdC5yZWxlYXNlKCkpOwpAQCAtMjg2LDcgKzI4Niw3IEBAIHZvaWQgUGFnZUdyb3VwOjph
ZGRVc2VyU3R5bGVTaGVldFRvV29ybGQoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCwgY29uc3QgU3Ry
aW5nJiBzCiAgICAgT3duUHRyPFVzZXJTdHlsZVNoZWV0PiB1c2VyU3R5bGVTaGVldCA9IGFkb3B0
UHRyKG5ldyBVc2VyU3R5bGVTaGVldChzb3VyY2UsIHVybCwgd2hpdGVsaXN0LCBibGFja2xpc3Qs
IGluamVjdGVkRnJhbWVzLCBsZXZlbCkpOwogICAgIGlmICghbV91c2VyU3R5bGVTaGVldHMpCiAg
ICAgICAgIG1fdXNlclN0eWxlU2hlZXRzID0gYWRvcHRQdHIobmV3IFVzZXJTdHlsZVNoZWV0TWFw
KTsKLSAgICBPd25QdHI8VXNlclN0eWxlU2hlZXRWZWN0b3I+JiBzdHlsZVNoZWV0c0luV29ybGQg
PSBtX3VzZXJTdHlsZVNoZWV0cy0+YWRkKHdvcmxkLCBudWxscHRyKS5pdGVyYXRvci0+c2Vjb25k
OworICAgIE93blB0cjxVc2VyU3R5bGVTaGVldFZlY3Rvcj4mIHN0eWxlU2hlZXRzSW5Xb3JsZCA9
IG1fdXNlclN0eWxlU2hlZXRzLT5hZGQod29ybGQsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsK
ICAgICBpZiAoIXN0eWxlU2hlZXRzSW5Xb3JsZCkKICAgICAgICAgc3R5bGVTaGVldHNJbldvcmxk
ID0gYWRvcHRQdHIobmV3IFVzZXJTdHlsZVNoZWV0VmVjdG9yKTsKICAgICBzdHlsZVNoZWV0c0lu
V29ybGQtPmFwcGVuZCh1c2VyU3R5bGVTaGVldC5yZWxlYXNlKCkpOwpAQCAtMzA2LDcgKzMwNiw3
IEBAIHZvaWQgUGFnZUdyb3VwOjpyZW1vdmVVc2VyU2NyaXB0RnJvbVdvcmxkKERPTVdyYXBwZXJX
b3JsZCogd29ybGQsIGNvbnN0IEtVUkwmIHVyCiAgICAgaWYgKGl0ID09IG1fdXNlclNjcmlwdHMt
PmVuZCgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgVXNlclNjcmlwdFZlY3Rvciogc2Ny
aXB0cyA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgVXNlclNjcmlwdFZlY3Rvciogc2NyaXB0cyA9
IGl0LT52YWx1ZS5nZXQoKTsKICAgICBmb3IgKGludCBpID0gc2NyaXB0cy0+c2l6ZSgpIC0gMTsg
aSA+PSAwOyAtLWkpIHsKICAgICAgICAgaWYgKHNjcmlwdHMtPmF0KGkpLT51cmwoKSA9PSB1cmwp
CiAgICAgICAgICAgICBzY3JpcHRzLT5yZW1vdmUoaSk7CkBAIC0zMjgsNyArMzI4LDcgQEAgdm9p
ZCBQYWdlR3JvdXA6OnJlbW92ZVVzZXJTdHlsZVNoZWV0RnJvbVdvcmxkKERPTVdyYXBwZXJXb3Js
ZCogd29ybGQsIGNvbnN0IEtVUkwKICAgICBpZiAoaXQgPT0gbV91c2VyU3R5bGVTaGVldHMtPmVu
ZCgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgVXNlclN0eWxlU2hlZXRWZWN0b3IqIHN0
eWxlc2hlZXRzID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICBVc2VyU3R5bGVTaGVldFZlY3Rvciog
c3R5bGVzaGVldHMgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgZm9yIChpbnQgaSA9IHN0eWxlc2hl
ZXRzLT5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgewogICAgICAgICBpZiAoc3R5bGVzaGVldHMt
PmF0KGkpLT51cmwoKSA9PSB1cmwpIHsKICAgICAgICAgICAgIHN0eWxlc2hlZXRzLT5yZW1vdmUo
aSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCmluZGV4IGM5MTFkNTQuLmEx
NjE0OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCkBAIC0zMzksNyAr
MzM5LDcgQEAgS1VSTCBQYWdlU2VyaWFsaXplcjo6dXJsRm9yQmxhbmtGcmFtZShGcmFtZSogZnJh
bWUpCiB7CiAgICAgSGFzaE1hcDxGcmFtZSosIEtVUkw+OjppdGVyYXRvciBpdGVyID0gbV9ibGFu
a0ZyYW1lVVJMcy5maW5kKGZyYW1lKTsKICAgICBpZiAoaXRlciAhPSBtX2JsYW5rRnJhbWVVUkxz
LmVuZCgpKQotICAgICAgICByZXR1cm4gaXRlci0+c2Vjb25kOworICAgICAgICByZXR1cm4gaXRl
ci0+dmFsdWU7CiAgICAgU3RyaW5nIHVybCA9ICJ3eWNpd3lnOi8vZnJhbWUvIiArIFN0cmluZzo6
bnVtYmVyKG1fYmxhbmtGcmFtZUNvdW50ZXIrKyk7CiAgICAgS1VSTCBmYWtlVVJMKFBhcnNlZFVS
TFN0cmluZywgdXJsKTsKICAgICBtX2JsYW5rRnJhbWVVUkxzLmFkZChmcmFtZSwgZmFrZVVSTCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5UG9saWN5LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlQb2xpY3kuY3BwCmluZGV4IGMyYTVhYjEuLjViMzZm
NGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlQb2xpY3kuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlQb2xpY3kuY3BwCkBAIC0xMzMsOSArMTMz
LDkgQEAgdm9pZCBTZWN1cml0eVBvbGljeTo6YWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnko
Y29uc3QgU2VjdXJpdHlPcmlnaW4mIHNvdXJjZU8KICAgICBTdHJpbmcgc291cmNlU3RyaW5nID0g
c291cmNlT3JpZ2luLnRvU3RyaW5nKCk7CiAgICAgT3JpZ2luQWNjZXNzTWFwOjpBZGRSZXN1bHQg
cmVzdWx0ID0gb3JpZ2luQWNjZXNzTWFwKCkuYWRkKHNvdXJjZVN0cmluZywgbnVsbHB0cik7CiAg
ICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29u
ZCA9IGFkb3B0UHRyKG5ldyBPcmlnaW5BY2Nlc3NXaGl0ZUxpc3QpOworICAgICAgICByZXN1bHQu
aXRlcmF0b3ItPnZhbHVlID0gYWRvcHRQdHIobmV3IE9yaWdpbkFjY2Vzc1doaXRlTGlzdCk7CiAK
LSAgICBPcmlnaW5BY2Nlc3NXaGl0ZUxpc3QqIGxpc3QgPSByZXN1bHQuaXRlcmF0b3ItPnNlY29u
ZC5nZXQoKTsKKyAgICBPcmlnaW5BY2Nlc3NXaGl0ZUxpc3QqIGxpc3QgPSByZXN1bHQuaXRlcmF0
b3ItPnZhbHVlLmdldCgpOwogICAgIGxpc3QtPmFwcGVuZChPcmlnaW5BY2Nlc3NFbnRyeShkZXN0
aW5hdGlvblByb3RvY29sLCBkZXN0aW5hdGlvbkRvbWFpbiwgYWxsb3dEZXN0aW5hdGlvblN1YmRv
bWFpbnMgPyBPcmlnaW5BY2Nlc3NFbnRyeTo6QWxsb3dTdWJkb21haW5zIDogT3JpZ2luQWNjZXNz
RW50cnk6OkRpc2FsbG93U3ViZG9tYWlucykpOwogfQogCkBAIC0xNTIsNyArMTUyLDcgQEAgdm9p
ZCBTZWN1cml0eVBvbGljeTo6cmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoY29uc3Qg
U2VjdXJpdHlPcmlnaW4mIHNvdXIKICAgICBpZiAoaXQgPT0gbWFwLmVuZCgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBPcmlnaW5BY2Nlc3NXaGl0ZUxpc3QqIGxpc3QgPSBpdC0+c2Vjb25kLmdl
dCgpOworICAgIE9yaWdpbkFjY2Vzc1doaXRlTGlzdCogbGlzdCA9IGl0LT52YWx1ZS5nZXQoKTsK
ICAgICBzaXplX3QgaW5kZXggPSBsaXN0LT5maW5kKE9yaWdpbkFjY2Vzc0VudHJ5KGRlc3RpbmF0
aW9uUHJvdG9jb2wsIGRlc3RpbmF0aW9uRG9tYWluLCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlu
cyA/IE9yaWdpbkFjY2Vzc0VudHJ5OjpBbGxvd1N1YmRvbWFpbnMgOiBPcmlnaW5BY2Nlc3NFbnRy
eTo6RGlzYWxsb3dTdWJkb21haW5zKSk7CiAgICAgaWYgKGluZGV4ID09IG5vdEZvdW5kKQogICAg
ICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCmluZGV4IGRkNTU1MDEuLjZjMWRi
YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCkBAIC02MCw3ICs2MCw3IEBAIHN0YXRpYyBp
bmxpbmUgdm9pZCBzZXRHZW5lcmljRm9udEZhbWlseU1hcChTY3JpcHRGb250RmFtaWx5TWFwJiBm
b250TWFwLCBjb25zdCBBCiAgICAgICAgIGlmIChpdCA9PSBmb250TWFwLmVuZCgpKQogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICBmb250TWFwLnJlbW92ZShpdCk7Ci0gICAgfSBlbHNlIGlm
IChpdCAhPSBmb250TWFwLmVuZCgpICYmIGl0LT5zZWNvbmQgPT0gZmFtaWx5KQorICAgIH0gZWxz
ZSBpZiAoaXQgIT0gZm9udE1hcC5lbmQoKSAmJiBpdC0+dmFsdWUgPT0gZmFtaWx5KQogICAgICAg
ICByZXR1cm47CiAgICAgZWxzZQogICAgICAgICBmb250TWFwLnNldChzdGF0aWNfY2FzdDxpbnQ+
KHNjcmlwdCksIGZhbWlseSk7CkBAIC03Myw3ICs3Myw3IEBAIHN0YXRpYyBpbmxpbmUgY29uc3Qg
QXRvbWljU3RyaW5nJiBnZXRHZW5lcmljRm9udEZhbWlseUZvclNjcmlwdChjb25zdCBTY3JpcHRG
b250CiB7CiAgICAgU2NyaXB0Rm9udEZhbWlseU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBmb250
TWFwLmZpbmQoc3RhdGljX2Nhc3Q8aW50PihzY3JpcHQpKTsKICAgICBpZiAoaXQgIT0gZm9udE1h
cC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBpdC0+
dmFsdWU7CiAgICAgaWYgKHNjcmlwdCAhPSBVU0NSSVBUX0NPTU1PTikKICAgICAgICAgcmV0dXJu
IGdldEdlbmVyaWNGb250RmFtaWx5Rm9yU2NyaXB0KGZvbnRNYXAsIFVTQ1JJUFRfQ09NTU9OKTsK
ICAgICByZXR1cm4gZW1wdHlBdG9tOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9T
cGVlY2hJbnB1dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NwZWVjaElucHV0LmNwcAppbmRl
eCAwMTI4ZWY4Li44MzI4YzVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NwZWVj
aElucHV0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NwZWVjaElucHV0LmNwcApAQCAt
NjIsNyArNjIsNyBAQCBpbnQgU3BlZWNoSW5wdXQ6OnJlZ2lzdGVyTGlzdGVuZXIoU3BlZWNoSW5w
dXRMaXN0ZW5lciogbGlzdGVuZXIpCiAjaWYgZGVmaW5lZChERUJVRykKICAgICAvLyBDaGVjayBp
ZiBhbHJlYWR5IHByZXNlbnQuCiAgICAgZm9yIChIYXNoTWFwPGludCwgU3BlZWNoSW5wdXRMaXN0
ZW5lcio+OjppdGVyYXRvciBpdCA9IG1fbGlzdGVuZXJzLmJlZ2luKCk7IGl0ICE9IG1fbGlzdGVu
ZXJzLmVuZCgpOyArK2l0KQotICAgICAgQVNTRVJUKGl0LT5zZWNvbmQgIT0gbGlzdGVuZXIpOwor
ICAgICAgQVNTRVJUKGl0LT52YWx1ZSAhPSBsaXN0ZW5lcik7CiAjZW5kaWYKIAogICAgIG1fbGlz
dGVuZXJzLmFkZChtX25leHRMaXN0ZW5lcklkLCBsaXN0ZW5lcik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1dpbmRvd0ZlYXR1cmVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
V2luZG93RmVhdHVyZXMuY3BwCmluZGV4IDc1NjQxNTIuLjFiNmIxZDAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvV2luZG93RmVhdHVyZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvV2luZG93RmVhdHVyZXMuY3BwCkBAIC0yMTIsNyArMjEyLDcgQEAgYm9vbCBXaW5kb3dG
ZWF0dXJlczo6Ym9vbEZlYXR1cmUoY29uc3QgRGlhbG9nRmVhdHVyZXNNYXAmIGZlYXR1cmVzLCBj
b25zdCBjaGFyKgogICAgIERpYWxvZ0ZlYXR1cmVzTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGZl
YXR1cmVzLmZpbmQoa2V5KTsKICAgICBpZiAoaXQgPT0gZmVhdHVyZXMuZW5kKCkpCiAgICAgICAg
IHJldHVybiBkZWZhdWx0VmFsdWU7Ci0gICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGl0LT5zZWNv
bmQ7CisgICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGl0LT52YWx1ZTsKICAgICByZXR1cm4gdmFs
dWUuaXNOdWxsKCkgfHwgdmFsdWUgPT0gIjEiIHx8IHZhbHVlID09ICJ5ZXMiIHx8IHZhbHVlID09
ICJvbiI7CiB9CiAKQEAgLTIyNCw3ICsyMjQsNyBAQCBmbG9hdCBXaW5kb3dGZWF0dXJlczo6Zmxv
YXRGZWF0dXJlKGNvbnN0IERpYWxvZ0ZlYXR1cmVzTWFwJiBmZWF0dXJlcywgY29uc3QgY2hhcgog
ICAgIC8vIEZJWE1FOiBUaGUgdG9Eb3VibGUgZnVuY3Rpb24gZG9lcyBub3Qgb2ZmZXIgYSB3YXkg
dG8gdGVsbCAiMHEiIGZyb20gc3RyaW5nIHdpdGggbm8gZGlnaXRzIGluIGl0OiBCb3RoCiAgICAg
Ly8gcmV0dXJuIHRoZSBudW1iZXIgMCBhbmQgZmFsc2UgZm9yIG9rLiBCdXQgIjBxIiBzaG91bGQg
eWllbGQgdGhlIG1pbmltdW0gcmF0aGVyIHRoYW4gdGhlIGRlZmF1bHQuCiAgICAgYm9vbCBvazsK
LSAgICBkb3VibGUgcGFyc2VkTnVtYmVyID0gaXQtPnNlY29uZC50b0RvdWJsZSgmb2spOworICAg
IGRvdWJsZSBwYXJzZWROdW1iZXIgPSBpdC0+dmFsdWUudG9Eb3VibGUoJm9rKTsKICAgICBpZiAo
KHBhcnNlZE51bWJlciA9PSAwICYmICFvaykgfHwgaXNuYW4ocGFyc2VkTnVtYmVyKSkKICAgICAg
ICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTsKICAgICBpZiAocGFyc2VkTnVtYmVyIDwgbWluIHx8IG1h
eCA8PSBtaW4pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Bbmlt
YXRpb25Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1h
dGlvbkNvbnRyb2xsZXIuY3BwCmluZGV4IGM0OTExOWUuLjVlMDcxN2UgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCkBA
IC05MywxNCArOTMsMTQgQEAgZG91YmxlIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjp1cGRh
dGVBbmltYXRpb25zKFNldENoYW5nZWQgY2FsbFNldENoYW5nZWQvKgogCiAgICAgUmVuZGVyT2Jq
ZWN0QW5pbWF0aW9uTWFwOjpjb25zdF9pdGVyYXRvciBhbmltYXRpb25zRW5kID0gbV9jb21wb3Np
dGVBbmltYXRpb25zLmVuZCgpOwogICAgIGZvciAoUmVuZGVyT2JqZWN0QW5pbWF0aW9uTWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBh
bmltYXRpb25zRW5kOyArK2l0KSB7Ci0gICAgICAgIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcEFu
aW0gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBB
bmltID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICBpZiAoIWNvbXBBbmltLT5zdXNwZW5kZWQo
KSAmJiBjb21wQW5pbS0+aGFzQW5pbWF0aW9ucygpKSB7CiAgICAgICAgICAgICBkb3VibGUgdCA9
IGNvbXBBbmltLT50aW1lVG9OZXh0U2VydmljZSgpOwogICAgICAgICAgICAgaWYgKHQgIT0gLTEg
JiYgKHQgPCB0aW1lVG9OZXh0U2VydmljZSB8fCB0aW1lVG9OZXh0U2VydmljZSA9PSAtMSkpCiAg
ICAgICAgICAgICAgICAgdGltZVRvTmV4dFNlcnZpY2UgPSB0OwogICAgICAgICAgICAgaWYgKCF0
aW1lVG9OZXh0U2VydmljZSkgewogICAgICAgICAgICAgICAgIGlmIChjYWxsU2V0Q2hhbmdlZCA9
PSBDYWxsU2V0Q2hhbmdlZCkgewotICAgICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gaXQt
PmZpcnN0LT5ub2RlKCk7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBpdC0+a2V5
LT5ub2RlKCk7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghbm9kZSB8fCAobm9kZS0+ZG9j
dW1lbnQoKSAmJiAhbm9kZS0+ZG9jdW1lbnQoKS0+aW5QYWdlQ2FjaGUoKSkpOwogICAgICAgICAg
ICAgICAgICAgICBub2RlLT5zZXROZWVkc1N0eWxlUmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdl
KTsKICAgICAgICAgICAgICAgICAgICAgY2FsbGVkU2V0Q2hhbmdlZCA9IHRydWU7CkBAIC0yOTIs
OSArMjkyLDkgQEAgdm9pZCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6c3VzcGVuZEFuaW1h
dGlvbnNGb3JEb2N1bWVudChEb2N1bWVudCogZG9jdW1lbnQKICAgICAKICAgICBSZW5kZXJPYmpl
Y3RBbmltYXRpb25NYXA6OmNvbnN0X2l0ZXJhdG9yIGFuaW1hdGlvbnNFbmQgPSBtX2NvbXBvc2l0
ZUFuaW1hdGlvbnMuZW5kKCk7CiAgICAgZm9yIChSZW5kZXJPYmplY3RBbmltYXRpb25NYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGFu
aW1hdGlvbnNFbmQ7ICsraXQpIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGl0
LT5maXJzdDsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGl0LT5rZXk7CiAgICAg
ICAgIGlmIChyZW5kZXJlci0+ZG9jdW1lbnQoKSA9PSBkb2N1bWVudCkgewotICAgICAgICAgICAg
Q29tcG9zaXRlQW5pbWF0aW9uKiBjb21wQW5pbSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAg
ICAgICBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBBbmltID0gaXQtPnZhbHVlLmdldCgpOwogICAg
ICAgICAgICAgY29tcEFuaW0tPnN1c3BlbmRBbmltYXRpb25zKCk7CiAgICAgICAgIH0KICAgICB9
CkBAIC0zMDgsOSArMzA4LDkgQEAgdm9pZCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6cmVz
dW1lQW5pbWF0aW9uc0ZvckRvY3VtZW50KERvY3VtZW50KiBkb2N1bWVudCkKICAgICAKICAgICBS
ZW5kZXJPYmplY3RBbmltYXRpb25NYXA6OmNvbnN0X2l0ZXJhdG9yIGFuaW1hdGlvbnNFbmQgPSBt
X2NvbXBvc2l0ZUFuaW1hdGlvbnMuZW5kKCk7CiAgICAgZm9yIChSZW5kZXJPYmplY3RBbmltYXRp
b25NYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmJlZ2luKCk7
IGl0ICE9IGFuaW1hdGlvbnNFbmQ7ICsraXQpIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5k
ZXJlciA9IGl0LT5maXJzdDsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGl0LT5r
ZXk7CiAgICAgICAgIGlmIChyZW5kZXJlci0+ZG9jdW1lbnQoKSA9PSBkb2N1bWVudCkgewotICAg
ICAgICAgICAgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wQW5pbSA9IGl0LT5zZWNvbmQuZ2V0KCk7
CisgICAgICAgICAgICBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBBbmltID0gaXQtPnZhbHVlLmdl
dCgpOwogICAgICAgICAgICAgY29tcEFuaW0tPnJlc3VtZUFuaW1hdGlvbnMoKTsKICAgICAgICAg
fQogICAgIH0KQEAgLTM5Niw4ICszOTYsOCBAQCB1bnNpZ25lZCBBbmltYXRpb25Db250cm9sbGVy
UHJpdmF0ZTo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKERvY3VtZW50KiBkb2N1bWVudAogICAg
IAogICAgIFJlbmRlck9iamVjdEFuaW1hdGlvbk1hcDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9u
c0VuZCA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5lbmQoKTsKICAgICBmb3IgKFJlbmRlck9iamVj
dEFuaW1hdGlvbk1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMu
YmVnaW4oKTsgaXQgIT0gYW5pbWF0aW9uc0VuZDsgKytpdCkgewotICAgICAgICBSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyID0gaXQtPmZpcnN0OwotICAgICAgICBDb21wb3NpdGVBbmltYXRpb24qIGNv
bXBBbmltID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJl
ciA9IGl0LT5rZXk7CisgICAgICAgIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcEFuaW0gPSBpdC0+
dmFsdWUuZ2V0KCk7CiAgICAgICAgIGlmIChyZW5kZXJlci0+ZG9jdW1lbnQoKSA9PSBkb2N1bWVu
dCkKICAgICAgICAgICAgIGNvdW50ICs9IGNvbXBBbmltLT5udW1iZXJPZkFjdGl2ZUFuaW1hdGlv
bnMoKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9D
b21wb3NpdGVBbmltYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ29t
cG9zaXRlQW5pbWF0aW9uLmNwcAppbmRleCBmMzU3NzgxLi4wYjBmMzc5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHAKQEAg
LTU4LDcgKzU4LDcgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OmNsZWFyUmVuZGVyZXIoKQog
ICAgICAgICAvLyBhbiBhbmltYXRpb24gY2FsbGJhY2sgKHNlZSBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIwNTIpCiAgICAgICAgIENTU1Byb3BlcnR5VHJhbnNpdGlv
bnNNYXA6OmNvbnN0X2l0ZXJhdG9yIHRyYW5zaXRpb25zRW5kID0gbV90cmFuc2l0aW9ucy5lbmQo
KTsKICAgICAgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gdHJhbnNpdGlvbnNFbmQ7ICsraXQp
IHsKLSAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiB0cmFuc2l0aW9uID0gaXQtPnNlY29u
ZC5nZXQoKTsKKyAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiB0cmFuc2l0aW9uID0gaXQt
PnZhbHVlLmdldCgpOwogICAgICAgICAgICAgYW5pbWF0aW9uQ29udHJvbGxlcigpLT5hbmltYXRp
b25XaWxsQmVSZW1vdmVkKHRyYW5zaXRpb24pOwogICAgICAgICAgICAgdHJhbnNpdGlvbi0+Y2xl
YXIoKTsKICAgICAgICAgfQpAQCAtNjcsNyArNjcsNyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlv
bjo6Y2xlYXJSZW5kZXJlcigpCiAgICAgICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zLmNoZWNrQ29u
c2lzdGVuY3koKTsKICAgICAgICAgQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgYW5p
bWF0aW9uc0VuZCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmVuZCgpOwogICAgICAgICBmb3IgKEFu
aW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMu
YmVnaW4oKTsgaXQgIT0gYW5pbWF0aW9uc0VuZDsgKytpdCkgewotICAgICAgICAgICAgS2V5ZnJh
bWVBbmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgS2V5ZnJh
bWVBbmltYXRpb24qIGFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBhbmltYXRp
b25Db250cm9sbGVyKCktPmFuaW1hdGlvbldpbGxCZVJlbW92ZWQoYW5pbSk7CiAgICAgICAgICAg
ICBhbmltLT5jbGVhcigpOwogICAgICAgICB9CkBAIC04NCw3ICs4NCw3IEBAIHZvaWQgQ29tcG9z
aXRlQW5pbWF0aW9uOjp1cGRhdGVUcmFuc2l0aW9ucyhSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBS
ZW5kZXJTdHlsZSoKICAgICAvLyBpbiB0aGUgbmV4dCBsb29wIGFuZCB0aGVuIHRvc3MgdGhlIG9u
ZXMgdGhhdCBkaWRuJ3QgZ2V0IG1hcmtlZC4KICAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFw
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOwogICAgIGZvciAoQ1NT
UHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25z
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+c2V0QWN0aXZl
KGZhbHNlKTsKKyAgICAgICAgaXQtPnZhbHVlLT5zZXRBY3RpdmUoZmFsc2UpOwogICAgICAgICAK
ICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG1vZGlmaWVkQ3VycmVudFN0eWxlOwogICAgIApAQCAt
MTgxLDcgKzE4MSw3IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVUcmFuc2l0aW9u
cyhSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBSZW5kZXJTdHlsZSoKICAgICBWZWN0b3I8aW50PiB0
b0JlUmVtb3ZlZDsKICAgICBlbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOwogICAgIGZvciAoQ1NT
UHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25z
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiog
YW5pbSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmlt
ID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICBpZiAoIWFuaW0tPmFjdGl2ZSgpKSB7CiAgICAg
ICAgICAgICBhbmltYXRpb25Db250cm9sbGVyKCktPmFuaW1hdGlvbldpbGxCZVJlbW92ZWQoYW5p
bSk7CiAgICAgICAgICAgICB0b0JlUmVtb3ZlZC5hcHBlbmQoYW5pbS0+YW5pbWF0aW5nUHJvcGVy
dHkoKSk7CkBAIC0yMDcsMTMgKzIwNywxMyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBk
YXRlS2V5ZnJhbWVBbmltYXRpb25zKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIFJlbmRlcgogICAg
ICAgICAvLyBUaGUgY3VycmVudCBhbmQgdGFyZ2V0IGFuaW1hdGlvbnMgYXJlIHRoZSBzYW1lIHNv
IHdlIGp1c3QgbmVlZCB0byB0b3NzIGFueSAKICAgICAgICAgLy8gYW5pbWF0aW9uIHdoaWNoIGlz
IGZpbmlzaGVkIChwb3N0QWN0aXZlKS4KICAgICAgICAgZm9yIChBbmltYXRpb25OYW1lTWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGtm
ZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAoaXQtPnNlY29uZC0+cG9zdEFjdGl2ZSgpKQot
ICAgICAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNldEluZGV4KC0xKTsKKyAgICAgICAgICAgIGlm
IChpdC0+dmFsdWUtPnBvc3RBY3RpdmUoKSkKKyAgICAgICAgICAgICAgICBpdC0+dmFsdWUtPnNl
dEluZGV4KC0xKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIE1hcmsgYWxs
IGV4aXN0aW5nIGFuaW1hdGlvbnMgYXMgbm8gbG9uZ2VyIGFjdGl2ZS4KICAgICAgICAgZm9yIChB
bmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVBbmltYXRpb25z
LmJlZ2luKCk7IGl0ICE9IGtmZW5kOyArK2l0KQotICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0
SW5kZXgoLTEpOworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRJbmRleCgtMSk7CiAgICAgICAg
ICAgICAKICAgICAgICAgLy8gVG9zcyB0aGUgYW5pbWF0aW9uIG9yZGVyIG1hcC4KICAgICAgICAg
bV9rZXlmcmFtZUFuaW1hdGlvbk9yZGVyTWFwLmNsZWFyKCk7CkBAIC0yNjIsNyArMjYyLDcgQEAg
dm9pZCBDb21wb3NpdGVBbmltYXRpb246OnVwZGF0ZUtleWZyYW1lQW5pbWF0aW9ucyhSZW5kZXJP
YmplY3QqIHJlbmRlcmVyLCBSZW5kZXIKICAgICBWZWN0b3I8QXRvbWljU3RyaW5nSW1wbCo+IGFu
aW1zVG9CZVJlbW92ZWQ7CiAgICAga2ZlbmQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5lbmQoKTsK
ICAgICBmb3IgKEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFt
ZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0ga2ZlbmQ7ICsraXQpIHsKLSAgICAgICAgS2V5ZnJh
bWVBbmltYXRpb24qIGtleWZyYW1lQW5pbSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIEtl
eWZyYW1lQW5pbWF0aW9uKiBrZXlmcmFtZUFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAg
IGlmIChrZXlmcmFtZUFuaW0tPmluZGV4KCkgPCAwKSB7CiAgICAgICAgICAgICBhbmltc1RvQmVS
ZW1vdmVkLmFwcGVuZChrZXlmcmFtZUFuaW0tPm5hbWUoKS5pbXBsKCkpOwogICAgICAgICAgICAg
YW5pbWF0aW9uQ29udHJvbGxlcigpLT5hbmltYXRpb25XaWxsQmVSZW1vdmVkKGtleWZyYW1lQW5p
bSk7CkBAIC0yOTAsNyArMjkwLDcgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gQ29tcG9zaXRl
QW5pbWF0aW9uOjphbmltYXRlKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIFJlbmQKICAgICAgICAg
aWYgKCFtX3RyYW5zaXRpb25zLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgQ1NTUHJvcGVydHlU
cmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsK
ICAgICAgICAgICAgIGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAg
ICAgICAgICAgIGlmIChJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT5zZWNvbmQuZ2V0KCkp
CisgICAgICAgICAgICAgICAgaWYgKEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnZhbHVl
LmdldCgpKQogICAgICAgICAgICAgICAgICAgICBhbmltLT5hbmltYXRlKHRoaXMsIHJlbmRlcmVy
LCBjdXJyZW50U3R5bGUsIHRhcmdldFN0eWxlLCByZXN1bHRTdHlsZSk7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KQEAgLTMxMiw3ICszMTIsNyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBD
b21wb3NpdGVBbmltYXRpb246OmdldEFuaW1hdGVkU3R5bGUoKSBjb25zdAogICAgIFJlZlB0cjxS
ZW5kZXJTdHlsZT4gcmVzdWx0U3R5bGU7CiAgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKICAgICBmb3IgKENTU1By
b3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKEltcGxpY2l0QW5pbWF0aW9u
KiBpbXBsaWNpdEFuaW1hdGlvbiA9IGl0LT5zZWNvbmQuZ2V0KCkpCisgICAgICAgIGlmIChJbXBs
aWNpdEFuaW1hdGlvbiogaW1wbGljaXRBbmltYXRpb24gPSBpdC0+dmFsdWUuZ2V0KCkpCiAgICAg
ICAgICAgICBpbXBsaWNpdEFuaW1hdGlvbi0+Z2V0QW5pbWF0ZWRTdHlsZShyZXN1bHRTdHlsZSk7
CiAgICAgfQogCkBAIC0zMzMsNyArMzMzLDcgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnNl
dEFuaW1hdGluZyhib29sIGFuaW1hdGluZykKICAgICBpZiAoIW1fdHJhbnNpdGlvbnMuaXNFbXB0
eSgpKSB7CiAgICAgICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9y
IHRyYW5zaXRpb25zRW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKICAgICAgICAgZm9yIChDU1NQ
cm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMu
YmVnaW4oKTsgaXQgIT0gdHJhbnNpdGlvbnNFbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIEltcGxp
Y2l0QW5pbWF0aW9uKiB0cmFuc2l0aW9uID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAg
IEltcGxpY2l0QW5pbWF0aW9uKiB0cmFuc2l0aW9uID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAg
ICAgICAgdHJhbnNpdGlvbi0+c2V0QW5pbWF0aW5nKGFuaW1hdGluZyk7CiAgICAgICAgIH0KICAg
ICB9CkBAIC0zNDEsNyArMzQxLDcgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnNldEFuaW1h
dGluZyhib29sIGFuaW1hdGluZykKICAgICAgICAgbV9rZXlmcmFtZUFuaW1hdGlvbnMuY2hlY2tD
b25zaXN0ZW5jeSgpOwogICAgICAgICBBbmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBh
bmltYXRpb25zRW5kID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuZW5kKCk7CiAgICAgICAgIGZvciAo
QW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lQW5pbWF0aW9u
cy5iZWdpbigpOyBpdCAhPSBhbmltYXRpb25zRW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBLZXlm
cmFtZUFuaW1hdGlvbiogYW5pbSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBLZXlm
cmFtZUFuaW1hdGlvbiogYW5pbSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGFuaW0t
PnNldEFuaW1hdGluZyhhbmltYXRpbmcpOwogICAgICAgICB9CiAgICAgfQpAQCAtMzU2LDcgKzM1
Niw3IEBAIGRvdWJsZSBDb21wb3NpdGVBbmltYXRpb246OnRpbWVUb05leHRTZXJ2aWNlKCkgY29u
c3QKICAgICBpZiAoIW1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSB7CiAgICAgICAgIENTU1Byb3Bl
cnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIHRyYW5zaXRpb25zRW5kID0gbV90cmFu
c2l0aW9ucy5lbmQoKTsKICAgICAgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gdHJhbnNpdGlv
bnNFbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiB0cmFuc2l0aW9u
ID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiB0cmFu
c2l0aW9uID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAgICAgZG91YmxlIHQgPSB0cmFuc2l0
aW9uID8gdHJhbnNpdGlvbi0+dGltZVRvTmV4dFNlcnZpY2UoKSA6IC0xOwogICAgICAgICAgICAg
aWYgKHQgPCBtaW5UIHx8IG1pblQgPT0gLTEpCiAgICAgICAgICAgICAgICAgbWluVCA9IHQ7CkBA
IC0zNjgsNyArMzY4LDcgQEAgZG91YmxlIENvbXBvc2l0ZUFuaW1hdGlvbjo6dGltZVRvTmV4dFNl
cnZpY2UoKSBjb25zdAogICAgICAgICBtX2tleWZyYW1lQW5pbWF0aW9ucy5jaGVja0NvbnNpc3Rl
bmN5KCk7CiAgICAgICAgIEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGFuaW1hdGlv
bnNFbmQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5lbmQoKTsKICAgICAgICAgZm9yIChBbmltYXRp
b25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmJlZ2lu
KCk7IGl0ICE9IGFuaW1hdGlvbnNFbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIEtleWZyYW1lQW5p
bWF0aW9uKiBhbmltYXRpb24gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgS2V5ZnJh
bWVBbmltYXRpb24qIGFuaW1hdGlvbiA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGRv
dWJsZSB0ID0gYW5pbWF0aW9uID8gYW5pbWF0aW9uLT50aW1lVG9OZXh0U2VydmljZSgpIDogLTE7
CiAgICAgICAgICAgICBpZiAodCA8IG1pblQgfHwgbWluVCA9PSAtMSkKICAgICAgICAgICAgICAg
ICBtaW5UID0gdDsKQEAgLTM5MCw3ICszOTAsNyBAQCBQYXNzUmVmUHRyPEtleWZyYW1lQW5pbWF0
aW9uPiBDb21wb3NpdGVBbmltYXRpb246OmdldEFuaW1hdGlvbkZvclByb3BlcnR5KENTU1Bybwog
ICAgICAgICBtX2tleWZyYW1lQW5pbWF0aW9ucy5jaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgICAg
IEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGFuaW1hdGlvbnNFbmQgPSBtX2tleWZy
YW1lQW5pbWF0aW9ucy5lbmQoKTsKICAgICAgICAgZm9yIChBbmltYXRpb25OYW1lTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGFuaW1h
dGlvbnNFbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIFJlZlB0cjxLZXlmcmFtZUFuaW1hdGlvbj4g
YW5pbSA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICBSZWZQdHI8S2V5ZnJhbWVBbmltYXRpb24+
IGFuaW0gPSBpdC0+dmFsdWU7CiAgICAgICAgICAgICBpZiAoYW5pbS0+aGFzQW5pbWF0aW9uRm9y
UHJvcGVydHkocHJvcGVydHkpKQogICAgICAgICAgICAgICAgIHJldHZhbCA9IGFuaW07CiAgICAg
ICAgIH0KQEAgLTQxMCwxNCArNDEwLDE0IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpzdXNw
ZW5kQW5pbWF0aW9ucygpCiAgICAgICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zLmNoZWNrQ29uc2lz
dGVuY3koKTsKICAgICAgICAgQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0
aW9uc0VuZCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmVuZCgpOwogICAgICAgICBmb3IgKEFuaW1h
dGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVn
aW4oKTsgaXQgIT0gYW5pbWF0aW9uc0VuZDsgKytpdCkgewotICAgICAgICAgICAgaWYgKEtleWZy
YW1lQW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZC5nZXQoKSkKKyAgICAgICAgICAgIGlmIChL
ZXlmcmFtZUFuaW1hdGlvbiogYW5pbSA9IGl0LT52YWx1ZS5nZXQoKSkKICAgICAgICAgICAgICAg
ICBhbmltLT51cGRhdGVQbGF5U3RhdGUoQW5pbVBsYXlTdGF0ZVBhdXNlZCk7CiAgICAgICAgIH0K
ICAgICB9CiAgICAgaWYgKCFtX3RyYW5zaXRpb25zLmlzRW1wdHkoKSkgewogICAgICAgICBDU1NQ
cm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciB0cmFuc2l0aW9uc0VuZCA9IG1f
dHJhbnNpdGlvbnMuZW5kKCk7CiAgICAgICAgIGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IHRyYW5z
aXRpb25zRW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9
IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9
IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGlmIChhbmltICYmIGFuaW0tPmhhc1N0eWxl
KCkpCiAgICAgICAgICAgICAgICAgYW5pbS0+dXBkYXRlUGxheVN0YXRlKEFuaW1QbGF5U3RhdGVQ
YXVzZWQpOwogICAgICAgICB9CkBAIC00MzUsNyArNDM1LDcgQEAgdm9pZCBDb21wb3NpdGVBbmlt
YXRpb246OnJlc3VtZUFuaW1hdGlvbnMoKQogICAgICAgICBtX2tleWZyYW1lQW5pbWF0aW9ucy5j
aGVja0NvbnNpc3RlbmN5KCk7CiAgICAgICAgIEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJh
dG9yIGFuaW1hdGlvbnNFbmQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5lbmQoKTsKICAgICAgICAg
Zm9yIChBbmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVBbmlt
YXRpb25zLmJlZ2luKCk7IGl0ICE9IGFuaW1hdGlvbnNFbmQ7ICsraXQpIHsKLSAgICAgICAgICAg
IEtleWZyYW1lQW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAg
IEtleWZyYW1lQW5pbWF0aW9uKiBhbmltID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAgICAg
aWYgKGFuaW0gJiYgYW5pbS0+cGxheVN0YXRlUGxheWluZygpKQogICAgICAgICAgICAgICAgIGFu
aW0tPnVwZGF0ZVBsYXlTdGF0ZShBbmltUGxheVN0YXRlUGxheWluZyk7CiAgICAgICAgIH0KQEAg
LTQ0NCw3ICs0NDQsNyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6cmVzdW1lQW5pbWF0aW9u
cygpCiAgICAgaWYgKCFtX3RyYW5zaXRpb25zLmlzRW1wdHkoKSkgewogICAgICAgICBDU1NQcm9w
ZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciB0cmFuc2l0aW9uc0VuZCA9IG1fdHJh
bnNpdGlvbnMuZW5kKCk7CiAgICAgICAgIGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IHRyYW5zaXRp
b25zRW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0
LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0
LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGlmIChhbmltICYmIGFuaW0tPmhhc1N0eWxlKCkp
CiAgICAgICAgICAgICAgICAgYW5pbS0+dXBkYXRlUGxheVN0YXRlKEFuaW1QbGF5U3RhdGVQbGF5
aW5nKTsKICAgICAgICAgfQpAQCAtNDU2LDcgKzQ1Niw3IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0
aW9uOjpvdmVycmlkZUltcGxpY2l0QW5pbWF0aW9ucyhDU1NQcm9wZXJ0eUlEIHByb3BlcnR5KQog
ICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fdHJh
bnNpdGlvbnMuZW5kKCk7CiAgICAgaWYgKCFtX3RyYW5zaXRpb25zLmlzRW1wdHkoKSkgewogICAg
ICAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIElt
cGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgIElt
cGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAgICAgaWYg
KGFuaW0gJiYgYW5pbS0+YW5pbWF0aW5nUHJvcGVydHkoKSA9PSBwcm9wZXJ0eSkKICAgICAgICAg
ICAgICAgICBhbmltLT5zZXRPdmVycmlkZGVuKHRydWUpOwogICAgICAgICB9CkBAIC00NjgsNyAr
NDY4LDcgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnJlc3VtZU92ZXJyaWRkZW5JbXBsaWNp
dEFuaW1hdGlvbnMoQ1NTUHJvcGVydHlJRCBwcm9wZXIKICAgICBpZiAoIW1fdHJhbnNpdGlvbnMu
aXNFbXB0eSgpKSB7CiAgICAgICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IG1fdHJhbnNpdGlvbnMuZW5kKCk7CiAgICAgICAgIGZvciAoQ1NTUHJvcGVy
dHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGFu
aW0gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGFu
aW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoYW5pbSAmJiBhbmltLT5hbmlt
YXRpbmdQcm9wZXJ0eSgpID09IHByb3BlcnR5KQogICAgICAgICAgICAgICAgIGFuaW0tPnNldE92
ZXJyaWRkZW4oZmFsc2UpOwogICAgICAgICB9CkBAIC00ODEsNyArNDgxLDcgQEAgYm9vbCBDb21w
b3NpdGVBbmltYXRpb246OmlzQW5pbWF0aW5nUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0
eSwgYm9vbCBhY2NlbGUKICAgICAgICAgbV9rZXlmcmFtZUFuaW1hdGlvbnMuY2hlY2tDb25zaXN0
ZW5jeSgpOwogICAgICAgICBBbmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBhbmltYXRp
b25zRW5kID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuZW5kKCk7CiAgICAgICAgIGZvciAoQW5pbWF0
aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5iZWdp
bigpOyBpdCAhPSBhbmltYXRpb25zRW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBLZXlmcmFtZUFu
aW1hdGlvbiogYW5pbSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBLZXlmcmFtZUFu
aW1hdGlvbiogYW5pbSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGlmIChhbmltICYm
IGFuaW0tPmlzQW5pbWF0aW5nUHJvcGVydHkocHJvcGVydHksIGFjY2VsZXJhdGVkT25seSwgaXNS
dW5uaW5nTm93KSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAt
NDkwLDcgKzQ5MCw3IEBAIGJvb2wgQ29tcG9zaXRlQW5pbWF0aW9uOjppc0FuaW1hdGluZ1Byb3Bl
cnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHksIGJvb2wgYWNjZWxlCiAgICAgaWYgKCFtX3RyYW5z
aXRpb25zLmlzRW1wdHkoKSkgewogICAgICAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpj
b25zdF9pdGVyYXRvciB0cmFuc2l0aW9uc0VuZCA9IG1fdHJhbnNpdGlvbnMuZW5kKCk7CiAgICAg
ICAgIGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
X3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IHRyYW5zaXRpb25zRW5kOyArK2l0KSB7Ci0gICAg
ICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAg
ICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAg
ICAgICAgIGlmIChhbmltICYmIGFuaW0tPmlzQW5pbWF0aW5nUHJvcGVydHkocHJvcGVydHksIGFj
Y2VsZXJhdGVkT25seSwgaXNSdW5uaW5nTm93KSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgfQpAQCAtNTU2LDcgKzU1Niw3IEBAIHVuc2lnbmVkIENvbXBvc2l0ZUFuaW1h
dGlvbjo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKCkgY29uc3QKICAgICAgICAgbV9rZXlmcmFt
ZUFuaW1hdGlvbnMuY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgICAgICBBbmltYXRpb25OYW1lTWFw
Ojpjb25zdF9pdGVyYXRvciBhbmltYXRpb25zRW5kID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuZW5k
KCk7CiAgICAgICAgIGZvciAoQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
X2tleWZyYW1lQW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBhbmltYXRpb25zRW5kOyArK2l0KSB7
Ci0gICAgICAgICAgICBLZXlmcmFtZUFuaW1hdGlvbiogYW5pbSA9IGl0LT5zZWNvbmQuZ2V0KCk7
CisgICAgICAgICAgICBLZXlmcmFtZUFuaW1hdGlvbiogYW5pbSA9IGl0LT52YWx1ZS5nZXQoKTsK
ICAgICAgICAgICAgIGlmIChhbmltLT5ydW5uaW5nKCkpCiAgICAgICAgICAgICAgICAgKytjb3Vu
dDsKICAgICAgICAgfQpAQCAtNTY1LDcgKzU2NSw3IEBAIHVuc2lnbmVkIENvbXBvc2l0ZUFuaW1h
dGlvbjo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKCkgY29uc3QKICAgICBpZiAoIW1fdHJhbnNp
dGlvbnMuaXNFbXB0eSgpKSB7CiAgICAgICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNv
bnN0X2l0ZXJhdG9yIHRyYW5zaXRpb25zRW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKICAgICAg
ICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1f
dHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gdHJhbnNpdGlvbnNFbmQ7ICsraXQpIHsKLSAgICAg
ICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAg
ICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAg
ICAgICAgaWYgKGFuaW0tPnJ1bm5pbmcoKSkKICAgICAgICAgICAgICAgICArK2NvdW50OwogICAg
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MYW5ndWFnZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MYW5ndWFnZS5jcHAKaW5kZXggNDdmMDlmNi4uYjNm
OTdiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGFuZ3VhZ2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xhbmd1YWdlLmNwcApAQCAtNTMsNyArNTMsNyBA
QCB2b2lkIGxhbmd1YWdlRGlkQ2hhbmdlKCkKIHsKICAgICBPYnNlcnZlck1hcDo6aXRlcmF0b3Ig
ZW5kID0gb2JzZXJ2ZXJNYXAoKS5lbmQoKTsKICAgICBmb3IgKE9ic2VydmVyTWFwOjppdGVyYXRv
ciBpdGVyID0gb2JzZXJ2ZXJNYXAoKS5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQotICAg
ICAgICBpdGVyLT5zZWNvbmQoaXRlci0+Zmlyc3QpOworICAgICAgICBpdGVyLT52YWx1ZShpdGVy
LT5rZXkpOwogfQogCiBTdHJpbmcgZGVmYXVsdExhbmd1YWdlKCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5jcHAKaW5kZXggMjg5YzY2OS4uOGY1MjEwMyAxMDA3
NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5jcHAKQEAgLTY5Miw3
ICs2OTIsNyBAQCBTdHJpbmcgTUlNRVR5cGVSZWdpc3RyeTo6Z2V0Tm9ybWFsaXplZE1JTUVUeXBl
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCiAgICAgTUlNRVR5cGVBc3NvY2lhdGlvbk1hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtaW1lVHlwZUFzc29jaWF0aW9uTWFwKCkuZmluZChtaW1lVHlwZSk7
CiAKICAgICBpZiAoaXQgIT0gbWltZVR5cGVBc3NvY2lhdGlvbk1hcCgpLmVuZCgpKQotICAgICAg
ICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKICNlbmRpZgog
ICAgIHJldHVybiBtaW1lVHlwZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViSFRUUExvYWRJbmZvLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViSFRUUExvYWRJbmZvLmNwcAppbmRleCA3NzYy
ZmQ4Li42NjM3MWI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9zdXBwb3J0L1dlYkhUVFBMb2FkSW5mby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vc3VwcG9ydC9XZWJIVFRQTG9hZEluZm8uY3BwCkBAIC0xMDYsNyArMTA2LDcg
QEAgc3RhdGljIHZvaWQgYWRkSGVhZGVyKEhUVFBIZWFkZXJNYXAqIG1hcCwgY29uc3QgV2ViU3Ry
aW5nJiBuYW1lLCBjb25zdCBXZWJTdHJpbmcKICAgICBIVFRQSGVhZGVyTWFwOjpBZGRSZXN1bHQg
cmVzdWx0ID0gbWFwLT5hZGQobmFtZSwgdmFsdWUpOwogICAgIC8vIEl0IGlzIGltcG9ydGFudCB0
aGF0IHZhbHVlcyBhcmUgc2VwYXJhdGVkIGJ5ICdcbicsIG5vdCBjb21tYSwgb3RoZXJ3aXNlIFNl
dC1Db29raWUgaGVhZGVyIGlzIG5vdCBwYXJzZWFibGUuCiAgICAgaWYgKCFyZXN1bHQuaXNOZXdF
bnRyeSkKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgKz0gIlxuIiArIFN0cmluZyh2
YWx1ZSk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgKz0gIlxuIiArIFN0cmluZyh2
YWx1ZSk7CiB9CiAKIHZvaWQgV2ViSFRUUExvYWRJbmZvOjphZGRSZXF1ZXN0SGVhZGVyKGNvbnN0
IFdlYlN0cmluZyYgbmFtZSwgY29uc3QgV2ViU3RyaW5nJiB2YWx1ZSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVVJMUmVxdWVzdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlVSTFJlcXVlc3Qu
Y3BwCmluZGV4IGY0MzdiNTEuLmUzODUxMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVVJMUmVxdWVzdC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJVUkxSZXF1ZXN0LmNwcApAQCAtMTk1
LDcgKzE5NSw3IEBAIHZvaWQgV2ViVVJMUmVxdWVzdDo6dmlzaXRIVFRQSGVhZGVyRmllbGRzKFdl
YkhUVFBIZWFkZXJWaXNpdG9yKiB2aXNpdG9yKSBjb25zdAogewogICAgIGNvbnN0IEhUVFBIZWFk
ZXJNYXAmIG1hcCA9IG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlcXVlc3QtPmh0dHBIZWFkZXJGaWVs
ZHMoKTsKICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLmJl
Z2luKCk7IGl0ICE9IG1hcC5lbmQoKTsgKytpdCkKLSAgICAgICAgdmlzaXRvci0+dmlzaXRIZWFk
ZXIoaXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsKKyAgICAgICAgdmlzaXRvci0+dmlzaXRIZWFkZXIo
aXQtPmtleSwgaXQtPnZhbHVlKTsKIH0KIAogV2ViSFRUUEJvZHkgV2ViVVJMUmVxdWVzdDo6aHR0
cEJvZHkoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vc3VwcG9ydC9XZWJVUkxSZXNwb25zZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
aHJvbWl1bS9zdXBwb3J0L1dlYlVSTFJlc3BvbnNlLmNwcAppbmRleCAxZjliOTY4Li44MDU2NjY0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dl
YlVSTFJlc3BvbnNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9z
dXBwb3J0L1dlYlVSTFJlc3BvbnNlLmNwcApAQCAtMjYxLDcgKzI2MSw3IEBAIHZvaWQgV2ViVVJM
UmVzcG9uc2U6OmFkZEhUVFBIZWFkZXJGaWVsZChjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0
IFdlYlN0cmluZyYKICAgICBIVFRQSGVhZGVyTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0KICAgICAg
ICAgY29uc3RfY2FzdDxIVFRQSGVhZGVyTWFwKj4oJm1hcCktPmFkZChuYW1lLCB2YWx1ZVN0cik7
CiAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5z
ZWNvbmQgKz0gIiwgIiArIHZhbHVlU3RyOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVl
ICs9ICIsICIgKyB2YWx1ZVN0cjsKIH0KIAogdm9pZCBXZWJVUkxSZXNwb25zZTo6Y2xlYXJIVFRQ
SGVhZGVyRmllbGQoY29uc3QgV2ViU3RyaW5nJiBuYW1lKQpAQCAtMjc1LDcgKzI3NSw3IEBAIHZv
aWQgV2ViVVJMUmVzcG9uc2U6OnZpc2l0SFRUUEhlYWRlckZpZWxkcyhXZWJIVFRQSGVhZGVyVmlz
aXRvciogdmlzaXRvcikgY29uc3QKIHsKICAgICBjb25zdCBIVFRQSGVhZGVyTWFwJiBtYXAgPSBt
X3ByaXZhdGUtPm1fcmVzb3VyY2VSZXNwb25zZS0+aHR0cEhlYWRlckZpZWxkcygpOwogICAgIGZv
ciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAuYmVnaW4oKTsgaXQgIT0g
bWFwLmVuZCgpOyArK2l0KQotICAgICAgICB2aXNpdG9yLT52aXNpdEhlYWRlcihpdC0+Zmlyc3Qs
IGl0LT5zZWNvbmQpOworICAgICAgICB2aXNpdG9yLT52aXNpdEhlYWRlcihpdC0+a2V5LCBpdC0+
dmFsdWUpOwogfQogCiBkb3VibGUgV2ViVVJMUmVzcG9uc2U6Omxhc3RNb2RpZmllZERhdGUoKSBj
b25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
Y2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAK
aW5kZXggNDdmMjUxYy4uN2E0ZTljNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250Q2FjaGUuY3BwCkBAIC0xOTksNyArMTk5LDcgQEAgRm9udFBsYXRmb3JtRGF0
YSogRm9udENhY2hlOjpnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgZm8KICAgICAgICAgZ0ZvbnRQbGF0Zm9ybURhdGFDYWNoZS0+c2V0KGtleSwgcmVzdWx0
KTsKICAgICAgICAgZm91bmRSZXN1bHQgPSByZXN1bHQ7CiAgICAgfSBlbHNlIHsKLSAgICAgICAg
cmVzdWx0ID0gaXQtPnNlY29uZDsKKyAgICAgICAgcmVzdWx0ID0gaXQtPnZhbHVlOwogICAgICAg
ICBmb3VuZFJlc3VsdCA9IHRydWU7CiAgICAgfQogCkBAIC0yOTQsMjAgKzI5NCwyMCBAQCBTaW1w
bGVGb250RGF0YSogRm9udENhY2hlOjpnZXRDYWNoZWRGb250RGF0YShjb25zdCBGb250UGxhdGZv
cm1EYXRhKiBwbGF0Zm9ybURhdAogICAgICAgICByZXR1cm4gbmV3VmFsdWUuZmlyc3Q7CiAgICAg
fQogCi0gICAgaWYgKCFyZXN1bHQuZ2V0KCktPnNlY29uZC5zZWNvbmQpIHsKLSAgICAgICAgQVNT
RVJUKGdJbmFjdGl2ZUZvbnREYXRhLT5jb250YWlucyhyZXN1bHQuZ2V0KCktPnNlY29uZC5maXJz
dCkpOwotICAgICAgICBnSW5hY3RpdmVGb250RGF0YS0+cmVtb3ZlKHJlc3VsdC5nZXQoKS0+c2Vj
b25kLmZpcnN0KTsKKyAgICBpZiAoIXJlc3VsdC5nZXQoKS0+dmFsdWUuc2Vjb25kKSB7CisgICAg
ICAgIEFTU0VSVChnSW5hY3RpdmVGb250RGF0YS0+Y29udGFpbnMocmVzdWx0LmdldCgpLT52YWx1
ZS5maXJzdCkpOworICAgICAgICBnSW5hY3RpdmVGb250RGF0YS0+cmVtb3ZlKHJlc3VsdC5nZXQo
KS0+dmFsdWUuZmlyc3QpOwogICAgIH0KIAogICAgIGlmIChzaG91bGRSZXRhaW4gPT0gUmV0YWlu
KQotICAgICAgICByZXN1bHQuZ2V0KCktPnNlY29uZC5zZWNvbmQrKzsKLSAgICBlbHNlIGlmICgh
cmVzdWx0LmdldCgpLT5zZWNvbmQuc2Vjb25kKSB7CisgICAgICAgIHJlc3VsdC5nZXQoKS0+dmFs
dWUuc2Vjb25kKys7CisgICAgZWxzZSBpZiAoIXJlc3VsdC5nZXQoKS0+dmFsdWUuc2Vjb25kKSB7
CiAgICAgICAgIC8vIElmIHNob3VsZFJldGFpbiBpcyBEb05vdFJldGFpbiBhbmQgY291bnQgaXMg
MCwgd2Ugd2FudCB0byByZW1vdmUgdGhlIGZvbnREYXRhIGZyb20gCiAgICAgICAgIC8vIGdJbmFj
dGl2ZUZvbnREYXRhIChhYm92ZSkgYW5kIHJlLWFkZCBoZXJlIHRvIHVwZGF0ZSBMUlUgcG9zaXRp
b24uCi0gICAgICAgIGdJbmFjdGl2ZUZvbnREYXRhLT5hZGQocmVzdWx0LmdldCgpLT5zZWNvbmQu
Zmlyc3QpOworICAgICAgICBnSW5hY3RpdmVGb250RGF0YS0+YWRkKHJlc3VsdC5nZXQoKS0+dmFs
dWUuZmlyc3QpOwogICAgIH0KIAotICAgIHJldHVybiByZXN1bHQuZ2V0KCktPnNlY29uZC5maXJz
dDsKKyAgICByZXR1cm4gcmVzdWx0LmdldCgpLT52YWx1ZS5maXJzdDsKIH0KIAogU2ltcGxlRm9u
dERhdGEqIEZvbnRDYWNoZTo6Z2V0Tm9uUmV0YWluZWRMYXN0UmVzb3J0RmFsbGJhY2tGb250KGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKQpAQCAtMzIzLDggKzMyMyw4IEBA
IHZvaWQgRm9udENhY2hlOjpyZWxlYXNlRm9udERhdGEoY29uc3QgU2ltcGxlRm9udERhdGEqIGZv
bnREYXRhKQogICAgIEZvbnREYXRhQ2FjaGU6Oml0ZXJhdG9yIGl0ID0gZ0ZvbnREYXRhQ2FjaGUt
PmZpbmQoZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpKTsKICAgICBBU1NFUlQoaXQgIT0gZ0ZvbnRE
YXRhQ2FjaGUtPmVuZCgpKTsKIAotICAgIEFTU0VSVChpdC0+c2Vjb25kLnNlY29uZCk7Ci0gICAg
aWYgKCEtLWl0LT5zZWNvbmQuc2Vjb25kKQorICAgIEFTU0VSVChpdC0+dmFsdWUuc2Vjb25kKTsK
KyAgICBpZiAoIS0taXQtPnZhbHVlLnNlY29uZCkKICAgICAgICAgZ0luYWN0aXZlRm9udERhdGEt
PmFkZChmb250RGF0YSk7CiB9CiAKQEAgLTM3Miw4ICszNzIsOCBAQCB2b2lkIEZvbnRDYWNoZTo6
cHVyZ2VJbmFjdGl2ZUZvbnREYXRhKGludCBjb3VudCkKICAgICAgICAga2V5c1RvUmVtb3ZlLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkoZ0ZvbnRQbGF0Zm9ybURhdGFDYWNoZS0+c2l6ZSgpKTsKICAg
ICAgICAgRm9udFBsYXRmb3JtRGF0YUNhY2hlOjppdGVyYXRvciBwbGF0Zm9ybURhdGFFbmQgPSBn
Rm9udFBsYXRmb3JtRGF0YUNhY2hlLT5lbmQoKTsKICAgICAgICAgZm9yIChGb250UGxhdGZvcm1E
YXRhQ2FjaGU6Oml0ZXJhdG9yIHBsYXRmb3JtRGF0YSA9IGdGb250UGxhdGZvcm1EYXRhQ2FjaGUt
PmJlZ2luKCk7IHBsYXRmb3JtRGF0YSAhPSBwbGF0Zm9ybURhdGFFbmQ7ICsrcGxhdGZvcm1EYXRh
KSB7Ci0gICAgICAgICAgICBpZiAocGxhdGZvcm1EYXRhLT5zZWNvbmQgJiYgIWdGb250RGF0YUNh
Y2hlLT5jb250YWlucygqcGxhdGZvcm1EYXRhLT5zZWNvbmQpKQotICAgICAgICAgICAgICAgIGtl
eXNUb1JlbW92ZS5hcHBlbmQocGxhdGZvcm1EYXRhLT5maXJzdCk7CisgICAgICAgICAgICBpZiAo
cGxhdGZvcm1EYXRhLT52YWx1ZSAmJiAhZ0ZvbnREYXRhQ2FjaGUtPmNvbnRhaW5zKCpwbGF0Zm9y
bURhdGEtPnZhbHVlKSkKKyAgICAgICAgICAgICAgICBrZXlzVG9SZW1vdmUuYXBwZW5kKHBsYXRm
b3JtRGF0YS0+a2V5KTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgc2l6ZV90IGtleXNU
b1JlbW92ZUNvdW50ID0ga2V5c1RvUmVtb3ZlLnNpemUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZVRyZWVOb2RlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZVRyZWVOb2RlLmNwcAppbmRleCA4N2U5
M2ZkLi42MzVlYzdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HbHlwaFBhZ2VUcmVlTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR2x5cGhQYWdlVHJlZU5vZGUuY3BwCkBAIC03NCw3ICs3NCw3IEBAIHNpemVfdCBHbHlw
aFBhZ2VUcmVlTm9kZTo6dHJlZUdseXBoUGFnZUNvdW50KCkKICAgICBpZiAocm9vdHMpIHsKICAg
ICAgICAgSGFzaE1hcDxpbnQsIEdseXBoUGFnZVRyZWVOb2RlKj46Oml0ZXJhdG9yIGVuZCA9IHJv
b3RzLT5lbmQoKTsKICAgICAgICAgZm9yIChIYXNoTWFwPGludCwgR2x5cGhQYWdlVHJlZU5vZGUq
Pjo6aXRlcmF0b3IgaXQgPSByb290cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAg
ICAgICAgY291bnQgKz0gaXQtPnNlY29uZC0+cGFnZUNvdW50KCk7CisgICAgICAgICAgICBjb3Vu
dCArPSBpdC0+dmFsdWUtPnBhZ2VDb3VudCgpOwogICAgIH0KICAgICAKICAgICBpZiAocGFnZVpl
cm9Sb290KQpAQCAtODgsNyArODgsNyBAQCBzaXplX3QgR2x5cGhQYWdlVHJlZU5vZGU6OnBhZ2VD
b3VudCgpIGNvbnN0CiAgICAgc2l6ZV90IGNvdW50ID0gbV9wYWdlICYmIG1fcGFnZS0+b3duZXIo
KSA9PSB0aGlzID8gMSA6IDA7CiAgICAgSGFzaE1hcDxjb25zdCBGb250RGF0YSosIEdseXBoUGFn
ZVRyZWVOb2RlKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fY2hpbGRyZW4uZW5kKCk7CiAgICAg
Zm9yIChIYXNoTWFwPGNvbnN0IEZvbnREYXRhKiwgR2x5cGhQYWdlVHJlZU5vZGUqPjo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX2NoaWxkcmVuLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAg
ICAgY291bnQgKz0gaXQtPnNlY29uZC0+cGFnZUNvdW50KCk7CisgICAgICAgIGNvdW50ICs9IGl0
LT52YWx1ZS0+cGFnZUNvdW50KCk7CiAKICAgICByZXR1cm4gY291bnQ7CiB9CkBAIC05OSw3ICs5
OSw3IEBAIHZvaWQgR2x5cGhQYWdlVHJlZU5vZGU6OnBydW5lVHJlZUN1c3RvbUZvbnREYXRhKGNv
bnN0IEZvbnREYXRhKiBmb250RGF0YSkKICAgICBpZiAocm9vdHMpIHsKICAgICAgICAgSGFzaE1h
cDxpbnQsIEdseXBoUGFnZVRyZWVOb2RlKj46Oml0ZXJhdG9yIGVuZCA9IHJvb3RzLT5lbmQoKTsK
ICAgICAgICAgZm9yIChIYXNoTWFwPGludCwgR2x5cGhQYWdlVHJlZU5vZGUqPjo6aXRlcmF0b3Ig
aXQgPSByb290cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgaXQtPnNl
Y29uZC0+cHJ1bmVDdXN0b21Gb250RGF0YShmb250RGF0YSk7CisgICAgICAgICAgICBpdC0+dmFs
dWUtPnBydW5lQ3VzdG9tRm9udERhdGEoZm9udERhdGEpOwogICAgIH0KICAgICAKICAgICBpZiAo
cGFnZVplcm9Sb290KQpAQCAtMTExLDcgKzExMSw3IEBAIHZvaWQgR2x5cGhQYWdlVHJlZU5vZGU6
OnBydW5lVHJlZUZvbnREYXRhKGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSkKICAgICBp
ZiAocm9vdHMpIHsKICAgICAgICAgSGFzaE1hcDxpbnQsIEdseXBoUGFnZVRyZWVOb2RlKj46Oml0
ZXJhdG9yIGVuZCA9IHJvb3RzLT5lbmQoKTsKICAgICAgICAgZm9yIChIYXNoTWFwPGludCwgR2x5
cGhQYWdlVHJlZU5vZGUqPjo6aXRlcmF0b3IgaXQgPSByb290cy0+YmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KQotICAgICAgICAgICAgaXQtPnNlY29uZC0+cHJ1bmVGb250RGF0YShmb250RGF0YSk7
CisgICAgICAgICAgICBpdC0+dmFsdWUtPnBydW5lRm9udERhdGEoZm9udERhdGEpOwogICAgIH0K
ICAgICAKICAgICBpZiAocGFnZVplcm9Sb290KQpAQCAtMzYyLDcgKzM2Miw3IEBAIHZvaWQgR2x5
cGhQYWdlVHJlZU5vZGU6OnBydW5lQ3VzdG9tRm9udERhdGEoY29uc3QgRm9udERhdGEqIGZvbnRE
YXRhKQogICAgICAgICByZXR1cm47CiAgICAgSGFzaE1hcDxjb25zdCBGb250RGF0YSosIEdseXBo
UGFnZVRyZWVOb2RlKj46Oml0ZXJhdG9yIGVuZCA9IG1fY2hpbGRyZW4uZW5kKCk7CiAgICAgZm9y
IChIYXNoTWFwPGNvbnN0IEZvbnREYXRhKiwgR2x5cGhQYWdlVHJlZU5vZGUqPjo6aXRlcmF0b3Ig
aXQgPSBtX2NoaWxkcmVuLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNl
Y29uZC0+cHJ1bmVDdXN0b21Gb250RGF0YShmb250RGF0YSk7CisgICAgICAgIGl0LT52YWx1ZS0+
cHJ1bmVDdXN0b21Gb250RGF0YShmb250RGF0YSk7CiB9CiAKIHZvaWQgR2x5cGhQYWdlVHJlZU5v
ZGU6OnBydW5lRm9udERhdGEoY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhLCB1bnNpZ25l
ZCBsZXZlbCkKQEAgLTM3OCw3ICszNzgsNyBAQCB2b2lkIEdseXBoUGFnZVRyZWVOb2RlOjpwcnVu
ZUZvbnREYXRhKGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwgdW5zaWduZWQgbAogICAg
IC8vIFBydW5lIGFueSBicmFuY2ggdGhhdCBjb250YWlucyB0aGlzIEZvbnREYXRhLgogICAgIEhh
c2hNYXA8Y29uc3QgRm9udERhdGEqLCBHbHlwaFBhZ2VUcmVlTm9kZSo+OjppdGVyYXRvciBjaGls
ZCA9IG1fY2hpbGRyZW4uZmluZChmb250RGF0YSk7CiAgICAgaWYgKGNoaWxkICE9IG1fY2hpbGRy
ZW4uZW5kKCkpIHsKLSAgICAgICAgR2x5cGhQYWdlVHJlZU5vZGUqIG5vZGUgPSBjaGlsZC0+c2Vj
b25kOworICAgICAgICBHbHlwaFBhZ2VUcmVlTm9kZSogbm9kZSA9IGNoaWxkLT52YWx1ZTsKICAg
ICAgICAgbV9jaGlsZHJlbi5yZW1vdmUoZm9udERhdGEpOwogICAgICAgICB1bnNpZ25lZCBjdXN0
b21Gb250Q291bnQgPSBub2RlLT5tX2N1c3RvbUZvbnRDb3VudDsKICAgICAgICAgZGVsZXRlIG5v
ZGU7CkBAIC0zOTQsNyArMzk0LDcgQEAgdm9pZCBHbHlwaFBhZ2VUcmVlTm9kZTo6cHJ1bmVGb250
RGF0YShjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEsIHVuc2lnbmVkIGwKIAogICAgIEhh
c2hNYXA8Y29uc3QgRm9udERhdGEqLCBHbHlwaFBhZ2VUcmVlTm9kZSo+OjppdGVyYXRvciBlbmQg
PSBtX2NoaWxkcmVuLmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDxjb25zdCBGb250RGF0YSosIEds
eXBoUGFnZVRyZWVOb2RlKj46Oml0ZXJhdG9yIGl0ID0gbV9jaGlsZHJlbi5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPnBydW5lRm9udERhdGEoZm9udERhdGEs
IGxldmVsKTsKKyAgICAgICAgaXQtPnZhbHVlLT5wcnVuZUZvbnREYXRhKGZvbnREYXRhLCBsZXZl
bCk7CiB9CiAKICNpZm5kZWYgTkRFQlVHCkBAIC00MDYsOCArNDA2LDggQEAgdm9pZCBHbHlwaFBh
Z2VUcmVlTm9kZTo6cHJ1bmVGb250RGF0YShjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEs
IHVuc2lnbmVkIGwKIAogICAgICAgICBIYXNoTWFwPGNvbnN0IEZvbnREYXRhKiwgR2x5cGhQYWdl
VHJlZU5vZGUqPjo6aXRlcmF0b3IgZW5kID0gbV9jaGlsZHJlbi5lbmQoKTsKICAgICAgICAgZm9y
IChIYXNoTWFwPGNvbnN0IEZvbnREYXRhKiwgR2x5cGhQYWdlVHJlZU5vZGUqPjo6aXRlcmF0b3Ig
aXQgPSBtX2NoaWxkcmVuLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAg
cHJpbnRmKCIlc1x0JXAgJXNcbiIsIGluZGVudC5kYXRhKCksIGl0LT5maXJzdCwgaXQtPmZpcnN0
LT5kZXNjcmlwdGlvbigpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICAgICAgaXQtPnNlY29uZC0+
c2hvd1N1YnRyZWUoKTsKKyAgICAgICAgICAgIHByaW50ZigiJXNcdCVwICVzXG4iLCBpbmRlbnQu
ZGF0YSgpLCBpdC0+a2V5LCBpdC0+a2V5LT5kZXNjcmlwdGlvbigpLnV0ZjgoKS5kYXRhKCkpOwor
ICAgICAgICAgICAgaXQtPnZhbHVlLT5zaG93U3VidHJlZSgpOwogICAgICAgICB9CiAgICAgICAg
IGlmIChtX3N5c3RlbUZhbGxiYWNrQ2hpbGQpIHsKICAgICAgICAgICAgIHByaW50ZigiJXNcdCog
ZmFsbGJhY2tcbiIsIGluZGVudC5kYXRhKCkpOwpAQCAtNDI1LDggKzQyNSw4IEBAIHZvaWQgc2hv
d0dseXBoUGFnZVRyZWVzKCkKICAgICBzaG93R2x5cGhQYWdlVHJlZSgwKTsKICAgICBIYXNoTWFw
PGludCwgV2ViQ29yZTo6R2x5cGhQYWdlVHJlZU5vZGUqPjo6aXRlcmF0b3IgZW5kID0gV2ViQ29y
ZTo6R2x5cGhQYWdlVHJlZU5vZGU6OnJvb3RzLT5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8aW50
LCBXZWJDb3JlOjpHbHlwaFBhZ2VUcmVlTm9kZSo+OjppdGVyYXRvciBpdCA9IFdlYkNvcmU6Okds
eXBoUGFnZVRyZWVOb2RlOjpyb290cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAg
ICAgIHByaW50ZigiXG5QYWdlICVkOlxuIiwgaXQtPmZpcnN0KTsKLSAgICAgICAgc2hvd0dseXBo
UGFnZVRyZWUoaXQtPmZpcnN0KTsKKyAgICAgICAgcHJpbnRmKCJcblBhZ2UgJWQ6XG4iLCBpdC0+
a2V5KTsKKyAgICAgICAgc2hvd0dseXBoUGFnZVRyZWUoaXQtPmtleSk7CiAgICAgfQogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVy
QW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
TGF5ZXJBbmltYXRpb24uY3BwCmluZGV4IDJmZTY0MTQuLmY3MDY4N2YgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJBbmltYXRpb24uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJBbmlt
YXRpb24uY3BwCkBAIC0xOTAsNyArMTkwLDcgQEAgYm9vbCBHcmFwaGljc0xheWVyQW5pbWF0aW9u
czo6aGFzQWN0aXZlQW5pbWF0aW9uc09mVHlwZShBbmltYXRlZFByb3BlcnR5SUQgdHlwZSkKIHsK
ICAgICBIYXNoTWFwPFN0cmluZywgVmVjdG9yPEdyYXBoaWNzTGF5ZXJBbmltYXRpb24+ID46OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IG1fYW5pbWF0aW9ucy5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8
U3RyaW5nLCBWZWN0b3I8R3JhcGhpY3NMYXllckFuaW1hdGlvbj4gPjo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtX2FuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGNv
bnN0IFZlY3RvcjxHcmFwaGljc0xheWVyQW5pbWF0aW9uPiYgYW5pbWF0aW9ucyA9IGl0LT5zZWNv
bmQ7CisgICAgICAgIGNvbnN0IFZlY3RvcjxHcmFwaGljc0xheWVyQW5pbWF0aW9uPiYgYW5pbWF0
aW9ucyA9IGl0LT52YWx1ZTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhbmltYXRp
b25zLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBpZiAoYW5pbWF0aW9uc1tpXS5pc0FjdGl2
ZSgpICYmIGFuaW1hdGlvbnNbaV0ucHJvcGVydHkoKSA9PSB0eXBlKQogICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwpAQCAtMjAzLDcgKzIwMyw3IEBAIGJvb2wgR3JhcGhpY3NMYXllckFuaW1h
dGlvbnM6Omhhc1J1bm5pbmdBbmltYXRpb25zKCkgY29uc3QKIHsKICAgICBIYXNoTWFwPFN0cmlu
ZywgVmVjdG9yPEdyYXBoaWNzTGF5ZXJBbmltYXRpb24+ID46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IG1fYW5pbWF0aW9ucy5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8R3Jh
cGhpY3NMYXllckFuaW1hdGlvbj4gPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2FuaW1hdGlvbnMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IFZlY3RvcjxHcmFwaGlj
c0xheWVyQW5pbWF0aW9uPiYgYW5pbWF0aW9ucyA9IGl0LT5zZWNvbmQ7CisgICAgICAgIGNvbnN0
IFZlY3RvcjxHcmFwaGljc0xheWVyQW5pbWF0aW9uPiYgYW5pbWF0aW9ucyA9IGl0LT52YWx1ZTsK
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhbmltYXRpb25zLnNpemUoKTsgKytpKSB7
CiAgICAgICAgICAgICBpZiAoYW5pbWF0aW9uc1tpXS5zdGF0ZSgpID09IEdyYXBoaWNzTGF5ZXJB
bmltYXRpb246OlBsYXlpbmdTdGF0ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTI2Niw3ICsyNjYsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zOjphZGQoY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBHcmFwaGljc0xheWVyQW5pbWF0aQogewogICAgIEhhc2hNYXA8
U3RyaW5nLCBWZWN0b3I8R3JhcGhpY3NMYXllckFuaW1hdGlvbj4gPjo6aXRlcmF0b3IgaXQgPSBt
X2FuaW1hdGlvbnMuZmluZChuYW1lKTsKICAgICBpZiAoaXQgIT0gbV9hbmltYXRpb25zLmVuZCgp
KSB7Ci0gICAgICAgIGl0LT5zZWNvbmQuYXBwZW5kKGFuaW1hdGlvbik7CisgICAgICAgIGl0LT52
YWx1ZS5hcHBlbmQoYW5pbWF0aW9uKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMjgx
LDE2ICsyODEsMTYgQEAgdm9pZCBHcmFwaGljc0xheWVyQW5pbWF0aW9uczo6cGF1c2UoY29uc3Qg
U3RyaW5nJiBuYW1lLCBkb3VibGUgb2Zmc2V0KQogICAgIGlmIChpdCA9PSBtX2FuaW1hdGlvbnMu
ZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaXQt
PnNlY29uZC5zaXplKCk7IGkrKykgCi0gICAgICAgIGl0LT5zZWNvbmRbaV0ucGF1c2Uob2Zmc2V0
KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGl0LT52YWx1ZS5zaXplKCk7IGkrKykgCisg
ICAgICAgIGl0LT52YWx1ZVtpXS5wYXVzZShvZmZzZXQpOwogfQogCiB2b2lkIEdyYXBoaWNzTGF5
ZXJBbmltYXRpb25zOjphcHBseShHcmFwaGljc0xheWVyQW5pbWF0aW9uOjpDbGllbnQqIGNsaWVu
dCkKIHsKICAgICBIYXNoTWFwPFN0cmluZywgVmVjdG9yPEdyYXBoaWNzTGF5ZXJBbmltYXRpb24+
ID46Oml0ZXJhdG9yIGVuZCA9IG1fYW5pbWF0aW9ucy5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8
U3RyaW5nLCBWZWN0b3I8R3JhcGhpY3NMYXllckFuaW1hdGlvbj4gPjo6aXRlcmF0b3IgaXQgPSBt
X2FuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgaXQtPnNlY29uZC5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIGl0LT5z
ZWNvbmRbaV0uYXBwbHkoY2xpZW50KTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBp
dC0+dmFsdWUuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBpdC0+dmFsdWVbaV0uYXBwbHkoY2xp
ZW50KTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlLmNwcAppbmRleCBiNDg1ZGNmLi5kZjdmYTdkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmdTdG9y
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5n
U3RvcmUuY3BwCkBAIC0xMTYsOSArMTE2LDkgQEAgdm9pZCBUaWxlZEJhY2tpbmdTdG9yZTo6dXBk
YXRlVGlsZUJ1ZmZlcnMoKQogICAgIFZlY3RvcjxSZWZQdHI8VGlsZT4gPiBkaXJ0eVRpbGVzOwog
ICAgIFRpbGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fdGlsZXMuZW5kKCk7CiAgICAgZm9yIChUaWxl
TWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0g
ICAgICAgIGlmICghaXQtPnNlY29uZC0+aXNEaXJ0eSgpKQorICAgICAgICBpZiAoIWl0LT52YWx1
ZS0+aXNEaXJ0eSgpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGRpcnR5VGlsZXMu
YXBwZW5kKGl0LT5zZWNvbmQpOworICAgICAgICBkaXJ0eVRpbGVzLmFwcGVuZChpdC0+dmFsdWUp
OwogICAgIH0KIAogICAgIGlmIChkaXJ0eVRpbGVzLmlzRW1wdHkoKSkgewpAQCAtNDAxLDEzICs0
MDEsMTMgQEAgYm9vbCBUaWxlZEJhY2tpbmdTdG9yZTo6cmVzaXplRWRnZVRpbGVzKCkKICAgICBW
ZWN0b3I8VGlsZTo6Q29vcmRpbmF0ZT4gdGlsZXNUb1JlbW92ZTsKICAgICBUaWxlTWFwOjppdGVy
YXRvciBlbmQgPSBtX3RpbGVzLmVuZCgpOwogICAgIGZvciAoVGlsZU1hcDo6aXRlcmF0b3IgaXQg
PSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBUaWxlOjpDb29y
ZGluYXRlIHRpbGVDb29yZGluYXRlID0gaXQtPnNlY29uZC0+Y29vcmRpbmF0ZSgpOwotICAgICAg
ICBJbnRSZWN0IHRpbGVSZWN0ID0gaXQtPnNlY29uZC0+cmVjdCgpOworICAgICAgICBUaWxlOjpD
b29yZGluYXRlIHRpbGVDb29yZGluYXRlID0gaXQtPnZhbHVlLT5jb29yZGluYXRlKCk7CisgICAg
ICAgIEludFJlY3QgdGlsZVJlY3QgPSBpdC0+dmFsdWUtPnJlY3QoKTsKICAgICAgICAgSW50UmVj
dCBleHBlY3RlZFRpbGVSZWN0ID0gdGlsZVJlY3RGb3JDb29yZGluYXRlKHRpbGVDb29yZGluYXRl
KTsKICAgICAgICAgaWYgKGV4cGVjdGVkVGlsZVJlY3QuaXNFbXB0eSgpKQogICAgICAgICAgICAg
dGlsZXNUb1JlbW92ZS5hcHBlbmQodGlsZUNvb3JkaW5hdGUpOwogICAgICAgICBlbHNlIGlmIChl
eHBlY3RlZFRpbGVSZWN0ICE9IHRpbGVSZWN0KSB7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLT5y
ZXNpemUoZXhwZWN0ZWRUaWxlUmVjdC5zaXplKCkpOworICAgICAgICAgICAgaXQtPnZhbHVlLT5y
ZXNpemUoZXhwZWN0ZWRUaWxlUmVjdC5zaXplKCkpOwogICAgICAgICAgICAgd2FzUmVzaXplZCA9
IHRydWU7CiAgICAgICAgIH0KICAgICB9CkBAIC00MjYsOCArNDI2LDggQEAgdm9pZCBUaWxlZEJh
Y2tpbmdTdG9yZTo6c2V0S2VlcFJlY3QoY29uc3QgSW50UmVjdCYga2VlcFJlY3QpCiAgICAgVmVj
dG9yPFRpbGU6OkNvb3JkaW5hdGU+IHRvUmVtb3ZlOwogICAgIFRpbGVNYXA6Oml0ZXJhdG9yIGVu
ZCA9IG1fdGlsZXMuZW5kKCk7CiAgICAgZm9yIChUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1fdGls
ZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFRpbGU6OkNvb3JkaW5hdGUg
Y29vcmRpbmF0ZSA9IGl0LT5zZWNvbmQtPmNvb3JkaW5hdGUoKTsKLSAgICAgICAgRmxvYXRSZWN0
IHRpbGVSZWN0ID0gaXQtPnNlY29uZC0+cmVjdCgpOworICAgICAgICBUaWxlOjpDb29yZGluYXRl
IGNvb3JkaW5hdGUgPSBpdC0+dmFsdWUtPmNvb3JkaW5hdGUoKTsKKyAgICAgICAgRmxvYXRSZWN0
IHRpbGVSZWN0ID0gaXQtPnZhbHVlLT5yZWN0KCk7CiAgICAgICAgIGlmICghdGlsZVJlY3QuaW50
ZXJzZWN0cyhrZWVwUmVjdEYpKQogICAgICAgICAgICAgdG9SZW1vdmUuYXBwZW5kKGNvb3JkaW5h
dGUpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDFl
YjIzN2MuLmRkNGNhN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcApA
QCAtODc3LDcgKzg3Nyw3IEBAIGludCBHcmFwaGljc0xheWVyQ2hyb21pdW06Om1hcEFuaW1hdGlv
bk5hbWVUb0lkKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSkKICAgICBpZiAoIW1fYW5pbWF0
aW9uSWRNYXAuY29udGFpbnMoYW5pbWF0aW9uTmFtZSkpCiAgICAgICAgIG1fYW5pbWF0aW9uSWRN
YXAuYWRkKGFuaW1hdGlvbk5hbWUsIEFuaW1hdGlvbklkVmVuZG9yOjpnZXROZXh0QW5pbWF0aW9u
SWQoKSk7CiAKLSAgICByZXR1cm4gbV9hbmltYXRpb25JZE1hcC5maW5kKGFuaW1hdGlvbk5hbWUp
LT5zZWNvbmQ7CisgICAgcmV0dXJuIG1fYW5pbWF0aW9uSWRNYXAuZmluZChhbmltYXRpb25OYW1l
KS0+dmFsdWU7CiB9CiAKIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpub3RpZnlBbmltYXRp
b25TdGFydGVkKGRvdWJsZSBzdGFydFRpbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9t
aXVtLmNwcAppbmRleCBjNGYxMzhhLi5iNTFiNDVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5jcHAKQEAgLTMzNCwxNSArMzM0LDE1IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpkZWNpZGVSZW5kZXJQYXNzQWxsb2NhdGlvbnNGb3JGcmFtZShjb25zdCBDQ1JlbmRl
clBhCiAgICAgVmVjdG9yPGludD4gcGFzc2VzVG9EZWxldGU7CiAgICAgSGFzaE1hcDxpbnQsIE93
blB0cjxDYWNoZWRUZXh0dXJlPiA+Ojpjb25zdF9pdGVyYXRvciBwYXNzSXRlcmF0b3I7CiAgICAg
Zm9yIChwYXNzSXRlcmF0b3IgPSBtX3JlbmRlclBhc3NUZXh0dXJlcy5iZWdpbigpOyBwYXNzSXRl
cmF0b3IgIT0gbV9yZW5kZXJQYXNzVGV4dHVyZXMuZW5kKCk7ICsrcGFzc0l0ZXJhdG9yKSB7Ci0g
ICAgICAgIGNvbnN0IENDUmVuZGVyUGFzcyogcmVuZGVyUGFzc0luRnJhbWUgPSByZW5kZXJQYXNz
ZXNJbkZyYW1lLmdldChwYXNzSXRlcmF0b3ItPmZpcnN0KTsKKyAgICAgICAgY29uc3QgQ0NSZW5k
ZXJQYXNzKiByZW5kZXJQYXNzSW5GcmFtZSA9IHJlbmRlclBhc3Nlc0luRnJhbWUuZ2V0KHBhc3NJ
dGVyYXRvci0+a2V5KTsKICAgICAgICAgaWYgKCFyZW5kZXJQYXNzSW5GcmFtZSkgewotICAgICAg
ICAgICAgcGFzc2VzVG9EZWxldGUuYXBwZW5kKHBhc3NJdGVyYXRvci0+Zmlyc3QpOworICAgICAg
ICAgICAgcGFzc2VzVG9EZWxldGUuYXBwZW5kKHBhc3NJdGVyYXRvci0+a2V5KTsKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKICAgICAgICAgY29uc3QgSW50U2l6ZSYgcmVxdWly
ZWRTaXplID0gcmVuZGVyUGFzc1RleHR1cmVTaXplKHJlbmRlclBhc3NJbkZyYW1lKTsKICAgICAg
ICAgR0MzRGVudW0gcmVxdWlyZWRGb3JtYXQgPSByZW5kZXJQYXNzVGV4dHVyZUZvcm1hdChyZW5k
ZXJQYXNzSW5GcmFtZSk7Ci0gICAgICAgIENhY2hlZFRleHR1cmUqIHRleHR1cmUgPSBwYXNzSXRl
cmF0b3ItPnNlY29uZC5nZXQoKTsKKyAgICAgICAgQ2FjaGVkVGV4dHVyZSogdGV4dHVyZSA9IHBh
c3NJdGVyYXRvci0+dmFsdWUuZ2V0KCk7CiAgICAgICAgIEFTU0VSVCh0ZXh0dXJlKTsKIAogICAg
ICAgICBpZiAodGV4dHVyZS0+aWQoKSAmJiAodGV4dHVyZS0+c2l6ZSgpICE9IHJlcXVpcmVkU2l6
ZSB8fCB0ZXh0dXJlLT5mb3JtYXQoKSAhPSByZXF1aXJlZEZvcm1hdCkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21p
dW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRM
YXllckNocm9taXVtLmNwcAppbmRleCA2ODc0MGVmLi4zMGVkZGM2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVk
TGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTIxMiw5ICsyMTIsOSBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJv
bWl1bTo6cHVzaFByb3BlcnRpZXNUbyhDQ0xheWVySW1wbCogbGF5ZXIpCiAgICAgVmVjdG9yPFVw
ZGF0YWJsZVRpbGUqPiBpbnZhbGlkVGlsZXM7CiAKICAgICBmb3IgKENDTGF5ZXJUaWxpbmdEYXRh
OjpUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbV90aWxlci0+dGlsZXMoKS5iZWdpbigp
OyBpdGVyICE9IG1fdGlsZXItPnRpbGVzKCkuZW5kKCk7ICsraXRlcikgewotICAgICAgICBpbnQg
aSA9IGl0ZXItPmZpcnN0LmZpcnN0OwotICAgICAgICBpbnQgaiA9IGl0ZXItPmZpcnN0LnNlY29u
ZDsKLSAgICAgICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHN0YXRpY19jYXN0PFVwZGF0YWJsZVRp
bGUqPihpdGVyLT5zZWNvbmQuZ2V0KCkpOworICAgICAgICBpbnQgaSA9IGl0ZXItPmtleS5maXJz
dDsKKyAgICAgICAgaW50IGogPSBpdGVyLT5rZXkuc2Vjb25kOworICAgICAgICBVcGRhdGFibGVU
aWxlKiB0aWxlID0gc3RhdGljX2Nhc3Q8VXBkYXRhYmxlVGlsZSo+KGl0ZXItPnZhbHVlLmdldCgp
KTsKICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIG5vdCBldmVyIGJlIG51bGwuCiAgICAg
ICAgIGlmICghdGlsZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMjQ0LDcgKzI0NCw3IEBA
IHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpzZXRMYXllclRyZWVIb3N0KENDTGF5ZXJUcmVlSG9z
dCogaG9zdCkKIHsKICAgICBpZiAoaG9zdCAmJiBob3N0ICE9IGxheWVyVHJlZUhvc3QoKSkgewog
ICAgICAgICBmb3IgKENDTGF5ZXJUaWxpbmdEYXRhOjpUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBp
dGVyID0gbV90aWxlci0+dGlsZXMoKS5iZWdpbigpOyBpdGVyICE9IG1fdGlsZXItPnRpbGVzKCku
ZW5kKCk7ICsraXRlcikgewotICAgICAgICAgICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHN0YXRp
Y19jYXN0PFVwZGF0YWJsZVRpbGUqPihpdGVyLT5zZWNvbmQuZ2V0KCkpOworICAgICAgICAgICAg
VXBkYXRhYmxlVGlsZSogdGlsZSA9IHN0YXRpY19jYXN0PFVwZGF0YWJsZVRpbGUqPihpdGVyLT52
YWx1ZS5nZXQoKSk7CiAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgbm90IGV2ZXIg
YmUgbnVsbC4KICAgICAgICAgICAgIGlmICghdGlsZSkKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKQEAgLTMxMiw3ICszMTIsNyBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6aW52YWxpZGF0
ZUNvbnRlbnRSZWN0KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQogICAgICAgICByZXR1cm47
CiAKICAgICBmb3IgKENDTGF5ZXJUaWxpbmdEYXRhOjpUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBp
dGVyID0gbV90aWxlci0+dGlsZXMoKS5iZWdpbigpOyBpdGVyICE9IG1fdGlsZXItPnRpbGVzKCku
ZW5kKCk7ICsraXRlcikgewotICAgICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gc3RhdGljX2Nh
c3Q8VXBkYXRhYmxlVGlsZSo+KGl0ZXItPnNlY29uZC5nZXQoKSk7CisgICAgICAgIFVwZGF0YWJs
ZVRpbGUqIHRpbGUgPSBzdGF0aWNfY2FzdDxVcGRhdGFibGVUaWxlKj4oaXRlci0+dmFsdWUuZ2V0
KCkpOwogICAgICAgICBBU1NFUlQodGlsZSk7CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3Vs
ZCBub3QgZXZlciBiZSBudWxsLgogICAgICAgICBpZiAoIXRpbGUpCkBAIC01NzQsNyArNTc0LDcg
QEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KGNv
bnN0IENDUHJpb3JpdHlDYWxjdWxhdG9yJgogCiAgICAgLy8gTm93IHNldCBwcmlvcml0aWVzIG9u
IGFsbCB0aWxlcy4KICAgICBmb3IgKENDTGF5ZXJUaWxpbmdEYXRhOjpUaWxlTWFwOjpjb25zdF9p
dGVyYXRvciBpdGVyID0gbV90aWxlci0+dGlsZXMoKS5iZWdpbigpOyBpdGVyICE9IG1fdGlsZXIt
PnRpbGVzKCkuZW5kKCk7ICsraXRlcikgewotICAgICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0g
c3RhdGljX2Nhc3Q8VXBkYXRhYmxlVGlsZSo+KGl0ZXItPnNlY29uZC5nZXQoKSk7CisgICAgICAg
IFVwZGF0YWJsZVRpbGUqIHRpbGUgPSBzdGF0aWNfY2FzdDxVcGRhdGFibGVUaWxlKj4oaXRlci0+
dmFsdWUuZ2V0KCkpOwogICAgICAgICBJbnRSZWN0IHRpbGVSZWN0ID0gbV90aWxlci0+dGlsZVJl
Y3QodGlsZSk7CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGluZGljYXRlcyB0aGUgInNtYWxsIGFu
aW1hdGVkIGxheWVyIiBjYXNlLiBUaGlzIHNwZWNpYWwgY2FzZQogICAgICAgICAvLyBjYW4gYmUg
cmVtb3ZlZCBzb29uIHdpdGggYmV0dGVyIHByaW9yaXRpZXMsIGJ1dCBmb3Igbm93IHBhaW50IHRo
ZXNlIGxheWVycyBhZnRlcgpAQCAtNjAwLDcgKzYwMCw3IEBAIHZvaWQgVGlsZWRMYXllckNocm9t
aXVtOjpyZXNldFVwZGF0ZVN0YXRlKCkKIHsKICAgICBDQ0xheWVyVGlsaW5nRGF0YTo6VGlsZU1h
cDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV90aWxlci0+dGlsZXMoKS5lbmQoKTsKICAgICBmb3Ig
KENDTGF5ZXJUaWxpbmdEYXRhOjpUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbV90aWxl
ci0+dGlsZXMoKS5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0gICAgICAgIFVwZGF0
YWJsZVRpbGUqIHRpbGUgPSBzdGF0aWNfY2FzdDxVcGRhdGFibGVUaWxlKj4oaXRlci0+c2Vjb25k
LmdldCgpKTsKKyAgICAgICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHN0YXRpY19jYXN0PFVwZGF0
YWJsZVRpbGUqPihpdGVyLT52YWx1ZS5nZXQoKSk7CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNo
b3VsZCBub3QgZXZlciBiZSBudWxsLgogICAgICAgICBpZiAoIXRpbGUpCiAgICAgICAgICAgICBj
b250aW51ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDRGFtYWdlVHJhY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RhbWFnZVRyYWNrZXIuY3BwCmluZGV4IDVkNTg1NWMuLjIz
NzYwNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDRGFtYWdlVHJhY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1hZ2VUcmFja2VyLmNwcApAQCAtMjMzLDcgKzIzMyw3
IEBAIEZsb2F0UmVjdCBDQ0RhbWFnZVRyYWNrZXI6OnRyYWNrRGFtYWdlRnJvbUxlZnRvdmVyUmVj
dHMoKQogICAgIEZsb2F0UmVjdCBkYW1hZ2VSZWN0ID0gRmxvYXRSZWN0KCk7CiAKICAgICBmb3Ig
KFJlY3RNYXA6Oml0ZXJhdG9yIGl0ID0gbV9jdXJyZW50UmVjdEhpc3RvcnktPmJlZ2luKCk7IGl0
ICE9IG1fY3VycmVudFJlY3RIaXN0b3J5LT5lbmQoKTsgKytpdCkKLSAgICAgICAgZGFtYWdlUmVj
dC51bml0ZShpdC0+c2Vjb25kKTsKKyAgICAgICAgZGFtYWdlUmVjdC51bml0ZShpdC0+dmFsdWUp
OwogCiAgICAgbV9jdXJyZW50UmVjdEhpc3RvcnktPmNsZWFyKCk7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUaWxpbmdE
YXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUaWxpbmdEYXRhLmNwcAppbmRleCA0OWQyMzM2Li4wY2RhZjE3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVGlsaW5n
RGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRpbGluZ0RhdGEuY3BwCkBAIC0xNDQsOCArMTQ0LDggQEAgdm9pZCBDQ0xheWVy
VGlsaW5nRGF0YTo6c2V0Qm91bmRzKGNvbnN0IEludFNpemUmIHNpemUpCiAgICAgY29udGVudFJl
Y3RUb1RpbGVJbmRpY2VzKEludFJlY3QoSW50UG9pbnQoKSwgc2l6ZSksIGxlZnQsIHRvcCwgcmln
aHQsIGJvdHRvbSk7CiAgICAgVmVjdG9yPFRpbGVNYXBLZXk+IGludmFsaWRUaWxlS2V5czsKICAg
ICBmb3IgKFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpOyBpdCAh
PSBtX3RpbGVzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+Zmlyc3QuZmlyc3QgPiBy
aWdodCB8fCBpdC0+Zmlyc3Quc2Vjb25kID4gYm90dG9tKQotICAgICAgICAgICAgaW52YWxpZFRp
bGVLZXlzLmFwcGVuZChpdC0+Zmlyc3QpOworICAgICAgICBpZiAoaXQtPmtleS5maXJzdCA+IHJp
Z2h0IHx8IGl0LT5rZXkuc2Vjb25kID4gYm90dG9tKQorICAgICAgICAgICAgaW52YWxpZFRpbGVL
ZXlzLmFwcGVuZChpdC0+a2V5KTsKICAgICB9CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBp
bnZhbGlkVGlsZUtleXMuc2l6ZSgpOyArK2kpCiAgICAgICAgIG1fdGlsZXMucmVtb3ZlKGludmFs
aWRUaWxlS2V5c1tpXSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAppbmRleCBmZjk3
Y2YzLi5hZjFiZGI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTEyMCw3
ICsxMjAsNyBAQCBDQ0xheWVyVHJlZUhvc3Q6On5DQ0xheWVyVHJlZUhvc3QoKQogICAgIG51bUxh
eWVyVHJlZUluc3RhbmNlcy0tOwogICAgIFJhdGVMaW1pdGVyTWFwOjppdGVyYXRvciBpdCA9IG1f
cmF0ZUxpbWl0ZXJzLmJlZ2luKCk7CiAgICAgaWYgKGl0ICE9IG1fcmF0ZUxpbWl0ZXJzLmVuZCgp
KQotICAgICAgICBpdC0+c2Vjb25kLT5zdG9wKCk7CisgICAgICAgIGl0LT52YWx1ZS0+c3RvcCgp
OwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c2V0U3VyZmFjZVJlYWR5KCkKQEAgLTY1Niw3
ICs2NTYsNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c3RhcnRSYXRlTGltaXRlcihXZWJLaXQ6
OldlYkdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQogICAgIEFTU0VSVChjb250ZXh0KTsKICAg
ICBSYXRlTGltaXRlck1hcDo6aXRlcmF0b3IgaXQgPSBtX3JhdGVMaW1pdGVycy5maW5kKGNvbnRl
eHQpOwogICAgIGlmIChpdCAhPSBtX3JhdGVMaW1pdGVycy5lbmQoKSkKLSAgICAgICAgaXQtPnNl
Y29uZC0+c3RhcnQoKTsKKyAgICAgICAgaXQtPnZhbHVlLT5zdGFydCgpOwogICAgIGVsc2Ugewog
ICAgICAgICBSZWZQdHI8UmF0ZUxpbWl0ZXI+IHJhdGVMaW1pdGVyID0gUmF0ZUxpbWl0ZXI6OmNy
ZWF0ZShjb250ZXh0LCB0aGlzKTsKICAgICAgICAgbV9yYXRlTGltaXRlcnMuc2V0KGNvbnRleHQs
IHJhdGVMaW1pdGVyKTsKQEAgLTY2OCw3ICs2NjgsNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6
c3RvcFJhdGVMaW1pdGVyKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCiB7
CiAgICAgUmF0ZUxpbWl0ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yYXRlTGltaXRlcnMuZmluZChj
b250ZXh0KTsKICAgICBpZiAoaXQgIT0gbV9yYXRlTGltaXRlcnMuZW5kKCkpIHsKLSAgICAgICAg
aXQtPnNlY29uZC0+c3RvcCgpOworICAgICAgICBpdC0+dmFsdWUtPnN0b3AoKTsKICAgICAgICAg
bV9yYXRlTGltaXRlcnMucmVtb3ZlKGl0KTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBs
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdEltcGwuY3BwCmluZGV4IDQ5M2YzNWEuLjEwNjU2YWMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCkBAIC00MDMsNyArNDAzLDcgQEAgc3RhdGljIGlu
bGluZSBDQ1JlbmRlclBhc3MqIGZpbmRSZW5kZXJQYXNzQnlJZChpbnQgcmVuZGVyUGFzc0lkLCBj
b25zdCBDQ0xheWVyVHIKIHsKICAgICBDQ1JlbmRlclBhc3NJZEhhc2hNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gZnJhbWUucmVuZGVyUGFzc2VzQnlJZC5maW5kKHJlbmRlclBhc3NJZCk7CiAgICAg
QVNTRVJUKGl0ICE9IGZyYW1lLnJlbmRlclBhc3Nlc0J5SWQuZW5kKCkpOwotICAgIHJldHVybiBp
dC0+c2Vjb25kLmdldCgpOworICAgIHJldHVybiBpdC0+dmFsdWUuZ2V0KCk7CiB9CiAKIHN0YXRp
YyB2b2lkIHJlbW92ZVJlbmRlclBhc3Nlc1JlY3Vyc2l2ZShpbnQgcmVtb3ZlUmVuZGVyUGFzc0lk
LCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpGcmFtZURhdGEmIGZyYW1lKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZXNvdXJjZVByb3Zp
ZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
UmVzb3VyY2VQcm92aWRlci5jcHAKaW5kZXggNDljM2IyNC4uYjk0YzY2YSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZXNvdXJjZVBy
b3ZpZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1Jlc291cmNlUHJvdmlkZXIuY3BwCkBAIC04Myw3ICs4Myw3IEBAIGJvb2wgQ0NSZXNv
dXJjZVByb3ZpZGVyOjppblVzZUJ5Q29uc3VtZXIoUmVzb3VyY2VJZCBpZCkKICAgICBBU1NFUlQo
Q0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwogICAgIFJlc291cmNlTWFwOjppdGVyYXRvciBpdCA9
IG1fcmVzb3VyY2VzLmZpbmQoaWQpOwogICAgIEFTU0VSVChpdCAhPSBtX3Jlc291cmNlcy5lbmQo
KSk7Ci0gICAgcmV0dXJuICEhaXQtPnNlY29uZC5sb2NrRm9yUmVhZENvdW50OworICAgIHJldHVy
biAhIWl0LT52YWx1ZS5sb2NrRm9yUmVhZENvdW50OwogfQogCiBDQ1Jlc291cmNlUHJvdmlkZXI6
OlJlc291cmNlSWQgQ0NSZXNvdXJjZVByb3ZpZGVyOjpjcmVhdGVSZXNvdXJjZShpbnQgcG9vbCwg
Y29uc3QgSW50U2l6ZSYgc2l6ZSwgR0MzRGVudW0gZm9ybWF0LCBUZXh0dXJlVXNhZ2VIaW50IGhp
bnQpCkBAIC0xMzMsOSArMTMzLDkgQEAgdm9pZCBDQ1Jlc291cmNlUHJvdmlkZXI6OmRlbGV0ZVJl
c291cmNlKFJlc291cmNlSWQgaWQpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgUmVzb3Vy
Y2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMuZmluZChpZCk7Ci0gICAgQVNTRVJUKGl0
ICE9IG1fcmVzb3VyY2VzLmVuZCgpICYmICFpdC0+c2Vjb25kLmxvY2tlZEZvcldyaXRlICYmICFp
dC0+c2Vjb25kLmxvY2tGb3JSZWFkQ291bnQpOwotICAgIGlmICghaXQtPnNlY29uZC5leHRlcm5h
bCkKLSAgICAgICAgR0xDKGNvbnRleHQzZCwgY29udGV4dDNkLT5kZWxldGVUZXh0dXJlKGl0LT5z
ZWNvbmQuZ2xJZCkpOworICAgIEFTU0VSVChpdCAhPSBtX3Jlc291cmNlcy5lbmQoKSAmJiAhaXQt
PnZhbHVlLmxvY2tlZEZvcldyaXRlICYmICFpdC0+dmFsdWUubG9ja0ZvclJlYWRDb3VudCk7Cisg
ICAgaWYgKCFpdC0+dmFsdWUuZXh0ZXJuYWwpCisgICAgICAgIEdMQyhjb250ZXh0M2QsIGNvbnRl
eHQzZC0+ZGVsZXRlVGV4dHVyZShpdC0+dmFsdWUuZ2xJZCkpOwogICAgIG1fcmVzb3VyY2VzLnJl
bW92ZShpdCk7CiB9CiAKQEAgLTE0NCw4ICsxNDQsOCBAQCB2b2lkIENDUmVzb3VyY2VQcm92aWRl
cjo6ZGVsZXRlT3duZWRSZXNvdXJjZXMoaW50IHBvb2wpCiAgICAgQVNTRVJUKENDUHJveHk6Omlz
SW1wbFRocmVhZCgpKTsKICAgICBWZWN0b3I8UmVzb3VyY2VJZD4gdG9EZWxldGU7CiAgICAgZm9y
IChSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSBt
X3Jlc291cmNlcy5lbmQoKTsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnNlY29uZC5wb29sID09
IHBvb2wgJiYgIWl0LT5zZWNvbmQuZXh0ZXJuYWwpCi0gICAgICAgICAgICB0b0RlbGV0ZS5hcHBl
bmQoaXQtPmZpcnN0KTsKKyAgICAgICAgaWYgKGl0LT52YWx1ZS5wb29sID09IHBvb2wgJiYgIWl0
LT52YWx1ZS5leHRlcm5hbCkKKyAgICAgICAgICAgIHRvRGVsZXRlLmFwcGVuZChpdC0+a2V5KTsK
ICAgICB9CiAgICAgZm9yIChWZWN0b3I8UmVzb3VyY2VJZD46Oml0ZXJhdG9yIGl0ID0gdG9EZWxl
dGUuYmVnaW4oKTsgaXQgIT0gdG9EZWxldGUuZW5kKCk7ICsraXQpCiAgICAgICAgIGRlbGV0ZVJl
c291cmNlKCppdCk7CkBAIC0xNjEsMjcgKzE2MSwyNyBAQCB2b2lkIENDUmVzb3VyY2VQcm92aWRl
cjo6dXBsb2FkKFJlc291cmNlSWQgaWQsIGNvbnN0IHVpbnQ4X3QqIGltYWdlLCBjb25zdCBJbnRS
ZQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIFJlc291cmNlTWFwOjppdGVyYXRvciBpdCA9
IG1fcmVzb3VyY2VzLmZpbmQoaWQpOwotICAgIEFTU0VSVChpdCAhPSBtX3Jlc291cmNlcy5lbmQo
KSAmJiAhaXQtPnNlY29uZC5sb2NrZWRGb3JXcml0ZSAmJiAhaXQtPnNlY29uZC5sb2NrRm9yUmVh
ZENvdW50ICYmICFpdC0+c2Vjb25kLmV4dGVybmFsKTsKKyAgICBBU1NFUlQoaXQgIT0gbV9yZXNv
dXJjZXMuZW5kKCkgJiYgIWl0LT52YWx1ZS5sb2NrZWRGb3JXcml0ZSAmJiAhaXQtPnZhbHVlLmxv
Y2tGb3JSZWFkQ291bnQgJiYgIWl0LT52YWx1ZS5leHRlcm5hbCk7CiAKLSAgICBjb250ZXh0M2Qt
PmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBpdC0+c2Vjb25kLmds
SWQpOwotICAgIG1fdGV4U3ViSW1hZ2UtPnVwbG9hZChpbWFnZSwgaW1hZ2VSZWN0LCBzb3VyY2VS
ZWN0LCBkZXN0UmVjdCwgaXQtPnNlY29uZC5mb3JtYXQsIGNvbnRleHQzZCk7CisgICAgY29udGV4
dDNkLT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgaXQtPnZhbHVl
LmdsSWQpOworICAgIG1fdGV4U3ViSW1hZ2UtPnVwbG9hZChpbWFnZSwgaW1hZ2VSZWN0LCBzb3Vy
Y2VSZWN0LCBkZXN0UmVjdCwgaXQtPnZhbHVlLmZvcm1hdCwgY29udGV4dDNkKTsKIH0KIAogdW5z
aWduZWQgQ0NSZXNvdXJjZVByb3ZpZGVyOjpsb2NrRm9yV3JpdGUoUmVzb3VyY2VJZCBpZCkKIHsK
ICAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwogICAgIFJlc291cmNlTWFwOjpp
dGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmZpbmQoaWQpOwotICAgIEFTU0VSVChpdCAhPSBtX3Jl
c291cmNlcy5lbmQoKSAmJiAhaXQtPnNlY29uZC5sb2NrZWRGb3JXcml0ZSAmJiAhaXQtPnNlY29u
ZC5sb2NrRm9yUmVhZENvdW50ICYmICFpdC0+c2Vjb25kLmV4dGVybmFsKTsKLSAgICBpdC0+c2Vj
b25kLmxvY2tlZEZvcldyaXRlID0gdHJ1ZTsKLSAgICByZXR1cm4gaXQtPnNlY29uZC5nbElkOwor
ICAgIEFTU0VSVChpdCAhPSBtX3Jlc291cmNlcy5lbmQoKSAmJiAhaXQtPnZhbHVlLmxvY2tlZEZv
cldyaXRlICYmICFpdC0+dmFsdWUubG9ja0ZvclJlYWRDb3VudCAmJiAhaXQtPnZhbHVlLmV4dGVy
bmFsKTsKKyAgICBpdC0+dmFsdWUubG9ja2VkRm9yV3JpdGUgPSB0cnVlOworICAgIHJldHVybiBp
dC0+dmFsdWUuZ2xJZDsKIH0KIAogdm9pZCBDQ1Jlc291cmNlUHJvdmlkZXI6OnVubG9ja0Zvcldy
aXRlKFJlc291cmNlSWQgaWQpCiB7CiAgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgp
KTsKICAgICBSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5maW5kKGlkKTsK
LSAgICBBU1NFUlQoaXQgIT0gbV9yZXNvdXJjZXMuZW5kKCkgJiYgaXQtPnNlY29uZC5sb2NrZWRG
b3JXcml0ZSAmJiAhaXQtPnNlY29uZC5leHRlcm5hbCk7Ci0gICAgaXQtPnNlY29uZC5sb2NrZWRG
b3JXcml0ZSA9IGZhbHNlOworICAgIEFTU0VSVChpdCAhPSBtX3Jlc291cmNlcy5lbmQoKSAmJiBp
dC0+dmFsdWUubG9ja2VkRm9yV3JpdGUgJiYgIWl0LT52YWx1ZS5leHRlcm5hbCk7CisgICAgaXQt
PnZhbHVlLmxvY2tlZEZvcldyaXRlID0gZmFsc2U7CiB9CiAKIHZvaWQgQ0NSZXNvdXJjZVByb3Zp
ZGVyOjpmbHVzaCgpCkBAIC0yMTMsMTcgKzIxMywxNyBAQCB1bnNpZ25lZCBDQ1Jlc291cmNlUHJv
dmlkZXI6OmxvY2tGb3JSZWFkKFJlc291cmNlSWQgaWQpCiB7CiAgICAgQVNTRVJUKENDUHJveHk6
OmlzSW1wbFRocmVhZCgpKTsKICAgICBSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291
cmNlcy5maW5kKGlkKTsKLSAgICBBU1NFUlQoaXQgIT0gbV9yZXNvdXJjZXMuZW5kKCkgJiYgIWl0
LT5zZWNvbmQubG9ja2VkRm9yV3JpdGUpOwotICAgICsrKGl0LT5zZWNvbmQubG9ja0ZvclJlYWRD
b3VudCk7Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQuZ2xJZDsKKyAgICBBU1NFUlQoaXQgIT0gbV9y
ZXNvdXJjZXMuZW5kKCkgJiYgIWl0LT52YWx1ZS5sb2NrZWRGb3JXcml0ZSk7CisgICAgKysoaXQt
PnZhbHVlLmxvY2tGb3JSZWFkQ291bnQpOworICAgIHJldHVybiBpdC0+dmFsdWUuZ2xJZDsKIH0K
IAogdm9pZCBDQ1Jlc291cmNlUHJvdmlkZXI6OnVubG9ja0ZvclJlYWQoUmVzb3VyY2VJZCBpZCkK
IHsKICAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwogICAgIFJlc291cmNlTWFw
OjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmZpbmQoaWQpOwotICAgIEFTU0VSVChpdCAhPSBt
X3Jlc291cmNlcy5lbmQoKSAmJiBpdC0+c2Vjb25kLmxvY2tGb3JSZWFkQ291bnQgPiAwKTsKLSAg
ICAtLShpdC0+c2Vjb25kLmxvY2tGb3JSZWFkQ291bnQpOworICAgIEFTU0VSVChpdCAhPSBtX3Jl
c291cmNlcy5lbmQoKSAmJiBpdC0+dmFsdWUubG9ja0ZvclJlYWRDb3VudCA+IDApOworICAgIC0t
KGl0LT52YWx1ZS5sb2NrRm9yUmVhZENvdW50KTsKIH0KIAogQ0NSZXNvdXJjZVByb3ZpZGVyOjpD
Q1Jlc291cmNlUHJvdmlkZXIoQ0NHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclBy
b2dyYW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0
b21GaWx0ZXJQcm9ncmFtLmNwcAppbmRleCA2MGNmZjIyLi4yYmU1NTdmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclByb2dy
YW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3Vz
dG9tRmlsdGVyUHJvZ3JhbS5jcHAKQEAgLTc3LDcgKzc3LDcgQEAgdm9pZCBDdXN0b21GaWx0ZXJQ
cm9ncmFtOjpyZW1vdmVDbGllbnQoQ3VzdG9tRmlsdGVyUHJvZ3JhbUNsaWVudCogY2xpZW50KQog
dm9pZCBDdXN0b21GaWx0ZXJQcm9ncmFtOjpub3RpZnlDbGllbnRzKCkKIHsKICAgICBmb3IgKEN1
c3RvbUZpbHRlclByb2dyYW1DbGllbnRMaXN0OjppdGVyYXRvciBpdGVyID0gbV9jbGllbnRzLmJl
Z2luKCksIGVuZCA9IG1fY2xpZW50cy5lbmQoKTsgaXRlciAhPSBlbmQ7ICsraXRlcikKLSAgICAg
ICAgaXRlci0+Zmlyc3QtPm5vdGlmeUN1c3RvbUZpbHRlclByb2dyYW1Mb2FkZWQodGhpcyk7Cisg
ICAgICAgIGl0ZXItPmtleS0+bm90aWZ5Q3VzdG9tRmlsdGVyUHJvZ3JhbUxvYWRlZCh0aGlzKTsK
IH0KIAogI2lmIFVTRSgzRF9HUkFQSElDUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNraWEuY3BwCmluZGV4IGY2OGVh
NjEuLjFlODg2N2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2hhcmZidXp6L0hhcmZCdXp6U2tpYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTa2lhLmNwcApAQCAtMjQ0LDE4ICsyNDQsMTggQEAg
c3RhdGljIEhCX0ZhY2VSZWNfKiBnZXRDYWNoZWRIYXJmYnV6ekZhY2UoRm9udFBsYXRmb3JtRGF0
YSogcGxhdGZvcm1EYXRhKQogICAgICAgICBnSGFyZmJ1enpGYWNlQ2FjaGUtPnNldCh1bmlxdWVJ
RCwgZW50cnkpOwogICAgICAgICByZXR1cm4gZW50cnkuZmlyc3Q7CiAgICAgfQotICAgICsrKHJl
c3VsdC5nZXQoKS0+c2Vjb25kLnNlY29uZCk7Ci0gICAgcmV0dXJuIHJlc3VsdC5nZXQoKS0+c2Vj
b25kLmZpcnN0OworICAgICsrKHJlc3VsdC5nZXQoKS0+dmFsdWUuc2Vjb25kKTsKKyAgICByZXR1
cm4gcmVzdWx0LmdldCgpLT52YWx1ZS5maXJzdDsKIH0KIAogc3RhdGljIHZvaWQgcmVsZWFzZUNh
Y2hlZEhhcmZidXp6RmFjZShTa0ZvbnRJRCB1bmlxdWVJRCkKIHsKICAgICBIYXJmYnV6ekZhY2VD
YWNoZTo6aXRlcmF0b3IgcmVzdWx0ID0gZ0hhcmZidXp6RmFjZUNhY2hlLT5maW5kKHVuaXF1ZUlE
KTsKICAgICBBU1NFUlQocmVzdWx0ICE9IGdIYXJmYnV6ekZhY2VDYWNoZS0+ZW5kKCkpOwotICAg
IEFTU0VSVChyZXN1bHQuZ2V0KCktPnNlY29uZC5zZWNvbmQgPiAwKTsKLSAgICAtLShyZXN1bHQu
Z2V0KCktPnNlY29uZC5zZWNvbmQpOwotICAgIGlmICghKHJlc3VsdC5nZXQoKS0+c2Vjb25kLnNl
Y29uZCkpIHsKLSAgICAgICAgSEJfRnJlZUZhY2UocmVzdWx0LmdldCgpLT5zZWNvbmQuZmlyc3Qp
OworICAgIEFTU0VSVChyZXN1bHQuZ2V0KCktPnZhbHVlLnNlY29uZCA+IDApOworICAgIC0tKHJl
c3VsdC5nZXQoKS0+dmFsdWUuc2Vjb25kKTsKKyAgICBpZiAoIShyZXN1bHQuZ2V0KCktPnZhbHVl
LnNlY29uZCkpIHsKKyAgICAgICAgSEJfRnJlZUZhY2UocmVzdWx0LmdldCgpLT52YWx1ZS5maXJz
dCk7CiAgICAgICAgIGdIYXJmYnV6ekZhY2VDYWNoZS0+cmVtb3ZlKHVuaXF1ZUlEKTsKICAgICB9
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6
ei9uZy9IYXJmQnV6ek5HRmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9oYXJmYnV6ei9uZy9IYXJmQnV6ek5HRmFjZS5jcHAKaW5kZXggN2RkMDQ4Yi4uNjA0NzU5YiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcv
SGFyZkJ1enpOR0ZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2hhcmZidXp6L25nL0hhcmZCdXp6TkdGYWNlLmNwcApAQCAtNjAsOCArNjAsOCBAQCBIYXJmQnV6
ek5HRmFjZTo6SGFyZkJ1enpOR0ZhY2UoRm9udFBsYXRmb3JtRGF0YSogcGxhdGZvcm1EYXRhLCB1
aW50NjRfdCB1bmlxdWVJRAogICAgICAgICBBU1NFUlQobV9mYWNlKTsKICAgICAgICAgaGFyZmJ1
enpGYWNlQ2FjaGUoKS0+c2V0KG1fdW5pcXVlSUQsIEZhY2VDYWNoZUVudHJ5KG1fZmFjZSwgMSkp
OwogICAgIH0gZWxzZSB7Ci0gICAgICAgICsrKHJlc3VsdC5nZXQoKS0+c2Vjb25kLnNlY29uZCk7
Ci0gICAgICAgIG1fZmFjZSA9IHJlc3VsdC5nZXQoKS0+c2Vjb25kLmZpcnN0OworICAgICAgICAr
KyhyZXN1bHQuZ2V0KCktPnZhbHVlLnNlY29uZCk7CisgICAgICAgIG1fZmFjZSA9IHJlc3VsdC5n
ZXQoKS0+dmFsdWUuZmlyc3Q7CiAgICAgfQogfQogCkBAIC02OSwxMCArNjksMTAgQEAgSGFyZkJ1
enpOR0ZhY2U6On5IYXJmQnV6ek5HRmFjZSgpCiB7CiAgICAgSGFyZkJ1enpOR0ZhY2VDYWNoZTo6
aXRlcmF0b3IgcmVzdWx0ID0gaGFyZmJ1enpGYWNlQ2FjaGUoKS0+ZmluZChtX3VuaXF1ZUlEKTsK
ICAgICBBU1NFUlQocmVzdWx0ICE9IGhhcmZidXp6RmFjZUNhY2hlKCktPmVuZCgpKTsKLSAgICBB
U1NFUlQocmVzdWx0LmdldCgpLT5zZWNvbmQuc2Vjb25kID4gMCk7Ci0gICAgLS0ocmVzdWx0Lmdl
dCgpLT5zZWNvbmQuc2Vjb25kKTsKLSAgICBpZiAoIShyZXN1bHQuZ2V0KCktPnNlY29uZC5zZWNv
bmQpKSB7Ci0gICAgICAgIGhiX2ZhY2VfZGVzdHJveShyZXN1bHQuZ2V0KCktPnNlY29uZC5maXJz
dCk7CisgICAgQVNTRVJUKHJlc3VsdC5nZXQoKS0+dmFsdWUuc2Vjb25kID4gMCk7CisgICAgLS0o
cmVzdWx0LmdldCgpLT52YWx1ZS5zZWNvbmQpOworICAgIGlmICghKHJlc3VsdC5nZXQoKS0+dmFs
dWUuc2Vjb25kKSkgeworICAgICAgICBoYl9mYWNlX2Rlc3Ryb3kocmVzdWx0LmdldCgpLT52YWx1
ZS5maXJzdCk7CiAgICAgICAgIGhhcmZidXp6RmFjZUNhY2hlKCktPnJlbW92ZShtX3VuaXF1ZUlE
KTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvU2ltcGxlRm9udERhdGFDb3JlVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFDb3JlVGV4dC5jcHAKaW5kZXggMDUxOTM3NC4u
MGI3MTMzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L1NpbXBsZUZvbnREYXRhQ29yZVRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YUNvcmVUZXh0LmNwcApAQCAtNDMsNyArNDMsNyBA
QCBDRkRpY3Rpb25hcnlSZWYgU2ltcGxlRm9udERhdGE6OmdldENGU3RyaW5nQXR0cmlidXRlcyhU
eXBlc2V0dGluZ0ZlYXR1cmVzIHR5cGVzZQogewogICAgIHVuc2lnbmVkIGtleSA9IHR5cGVzZXR0
aW5nRmVhdHVyZXMgKyAxOwogICAgIEhhc2hNYXA8dW5zaWduZWQsIFJldGFpblB0cjxDRkRpY3Rp
b25hcnlSZWY+ID46OkFkZFJlc3VsdCBhZGRSZXN1bHQgPSBtX0NGU3RyaW5nQXR0cmlidXRlcy5h
ZGQoa2V5LCBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPigpKTsKLSAgICBSZXRhaW5QdHI8Q0ZE
aWN0aW9uYXJ5UmVmPiYgYXR0cmlidXRlc0RpY3Rpb25hcnkgPSBhZGRSZXN1bHQuaXRlcmF0b3It
PnNlY29uZDsKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiYgYXR0cmlidXRlc0RpY3Rp
b25hcnkgPSBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghYWRkUmVzdWx0Lmlz
TmV3RW50cnkpCiAgICAgICAgIHJldHVybiBhdHRyaWJ1dGVzRGljdGlvbmFyeS5nZXQoKTsKICAg
ICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1w
bGVGb250RGF0YU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9T
aW1wbGVGb250RGF0YU1hYy5tbQppbmRleCA1ODdiOWRkLi45MjQwZTA5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW0K
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRh
TWFjLm1tCkBAIC00NjEsNyArNDYxLDcgQEAgYm9vbCBTaW1wbGVGb250RGF0YTo6Y2FuUmVuZGVy
Q29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMKIAogICAg
IFdURjo6SGFzaE1hcDxTdHJpbmcsIGJvb2w+OjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gbV9jb21i
aW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZVN1cHBvcnQtPmFkZChTdHJpbmcoY2hhcmFjdGVycywgbGVu
Z3RoKSwgZmFsc2UpOwogICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJl
dHVybiBhZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGFkZFJlc3Vs
dC5pdGVyYXRvci0+dmFsdWU7CiAKICAgICBSZXRhaW5QdHI8Q0dGb250UmVmPiBjZ0ZvbnQoQWRv
cHRDRiwgQ1RGb250Q29weUdyYXBoaWNzRm9udChwbGF0Zm9ybURhdGEoKS5jdEZvbnQoKSwgMCkp
OwogCkBAIC00ODEsNyArNDgxLDcgQEAgYm9vbCBTaW1wbGVGb250RGF0YTo6Y2FuUmVuZGVyQ29t
YmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29u
ZCA9IHRydWU7CisgICAgYWRkUmVzdWx0LnZhbHVlLT5zZWNvbmQgPSB0cnVlOwogICAgIHJldHVy
biB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3BwCmluZGV4
IDVhNjI4ODEuLjdlMTY0ZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24u
Y3BwCkBAIC0xMTcsNyArMTE3LDcgQEAgU3RyaW5nIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbjo6
Z2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFOR0xFKFBsYXRmb3JtM0RPYmplY3QKICAgICBpZiAo
cmVzdWx0ID09IG1fY29udGV4dC0+bV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCiAgICAgICAgIHJl
dHVybiAiIjsKIAotICAgIEdyYXBoaWNzQ29udGV4dDNEOjpTaGFkZXJTb3VyY2VFbnRyeSYgZW50
cnkgPSByZXN1bHQtPnNlY29uZDsKKyAgICBHcmFwaGljc0NvbnRleHQzRDo6U2hhZGVyU291cmNl
RW50cnkmIGVudHJ5ID0gcmVzdWx0LT52YWx1ZTsKIAogICAgIFN0cmluZyB0cmFuc2xhdGVkU2hh
ZGVyU291cmNlOwogICAgIFN0cmluZyBzaGFkZXJJbmZvTG9nOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdM
Q29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFw
aGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAKaW5kZXggMjI1NjI4Mi4uZmRlMjIwYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNz
Q29udGV4dDNET3BlbkdMQ29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCkBAIC00ODAs
NyArNDgwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29tcGlsZVNoYWRlcihQbGF0Zm9y
bTNET2JqZWN0IHNoYWRlcikKIAogICAgIGlmIChsZW5ndGgpIHsKICAgICAgICAgSGFzaE1hcDxQ
bGF0Zm9ybTNET2JqZWN0LCBHcmFwaGljc0NvbnRleHQzRDo6U2hhZGVyU291cmNlRW50cnk+Ojpp
dGVyYXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7Ci0gICAgICAg
IEdyYXBoaWNzQ29udGV4dDNEOjpTaGFkZXJTb3VyY2VFbnRyeSYgZW50cnkgPSByZXN1bHQtPnNl
Y29uZDsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OlNoYWRlclNvdXJjZUVudHJ5JiBlbnRy
eSA9IHJlc3VsdC0+dmFsdWU7CiAKICAgICAgICAgR0xzaXplaSBzaXplID0gMDsKICAgICAgICAg
T3duQXJyYXlQdHI8R0xjaGFyPiBpbmZvID0gYWRvcHRBcnJheVB0cihuZXcgR0xjaGFyW2xlbmd0
aF0pOwpAQCAtMTE1Miw3ICsxMTUyLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hh
ZGVyaXYoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIsIEdDM0RlbnVtIHBuYW1lLCBHQzMKICAgICAg
ICAgICAgICp2YWx1ZSA9IHN0YXRpY19jYXN0PGludD4oZmFsc2UpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9Ci0gICAgICAgICp2YWx1ZSA9IHN0YXRpY19jYXN0PGludD4ocmVzdWx0
LT5zZWNvbmQuaXNWYWxpZCk7CisgICAgICAgICp2YWx1ZSA9IHN0YXRpY19jYXN0PGludD4ocmVz
dWx0LT52YWx1ZS5pc1ZhbGlkKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJTkZPX0xPR19M
RU5HVEg6CiAgICAgICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpIHsK
QEAgLTExNzksNyArMTE3OSw3IEBAIFN0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVy
SW5mb0xvZyhQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKICAgICBpZiAocmVzdWx0ID09IG1fc2hh
ZGVyU291cmNlTWFwLmVuZCgpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7IAogCi0gICAgU2hh
ZGVyU291cmNlRW50cnkgZW50cnkgPSByZXN1bHQtPnNlY29uZDsKKyAgICBTaGFkZXJTb3VyY2VF
bnRyeSBlbnRyeSA9IHJlc3VsdC0+dmFsdWU7CiAgICAgaWYgKCFlbnRyeS5pc1ZhbGlkKQogICAg
ICAgICByZXR1cm4gZW50cnkubG9nOwogCkBAIC0xMjA1LDcgKzEyMDUsNyBAQCBTdHJpbmcgR3Jh
cGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlclNvdXJjZShQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikK
ICAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQogICAgICAgICByZXR1
cm4gU3RyaW5nKCk7IAogCi0gICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kLnNvdXJjZTsKKyAgICBy
ZXR1cm4gcmVzdWx0LT52YWx1ZS5zb3VyY2U7CiB9CiAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcApp
bmRleCA4NjcwNGJjLi4zNmYwMmY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcApAQCAtMTE3LDcg
KzExNyw3IEBAIHN0cnVjdCBUZXh0dXJlTWFwcGVyR0xEYXRhIHsKICAgICAgICAgICAgIEdMQ29u
dGV4dCBjdXJyZW50R0xDb25leHQgPSBnZXRDdXJyZW50R0xDb250ZXh0KCk7CiAgICAgICAgICAg
ICBHTENvbnRleHREYXRhTWFwOjppdGVyYXRvciBpdCA9IGdsQ29udGV4dERhdGFNYXAoKS5maW5k
KGN1cnJlbnRHTENvbmV4dCk7CiAgICAgICAgICAgICBpZiAoaXQgIT0gZ2xDb250ZXh0RGF0YU1h
cCgpLmVuZCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgICAgICAg
ICAgICAgIHJldHVybiBpdC0+dmFsdWU7CiAKICAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgU2hhcmVkR0xEYXRhKGdldEN1cnJlbnRHTENvbnRleHQoKSkpOwogICAgICAgICB9CkBAIC0x
MzYsNyArMTM2LDcgQEAgc3RydWN0IFRleHR1cmVNYXBwZXJHTERhdGEgewogICAgICAgICAgICAg
R0xDb250ZXh0RGF0YU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gZ2xDb250ZXh0RGF0YU1hcCgp
LmVuZCgpOwogICAgICAgICAgICAgR0xDb250ZXh0RGF0YU1hcDo6aXRlcmF0b3IgaXQ7CiAgICAg
ICAgICAgICBmb3IgKGl0ID0gZ2xDb250ZXh0RGF0YU1hcCgpLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgewotICAgICAgICAgICAgICAgIGlmIChpdC0+c2Vjb25kID09IHRoaXMpCisgICAgICAg
ICAgICAgICAgaWYgKGl0LT52YWx1ZSA9PSB0aGlzKQogICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
ci5jcHAKaW5kZXggMGZiZGJlOS4uNDY0OWY0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
clNoYWRlck1hbmFnZXIuY3BwCkBAIC0yMDgsNyArMjA4LDcgQEAgUGFzc1JlZlB0cjxUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbT4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OmdldFNoYWRl
clByb2cKIAogICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtTWFwOjppdGVyYXRvciBpdCA9
IG1fdGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1NYXAuZmluZChzaGFkZXJUeXBlKTsKICAgICBp
ZiAoaXQgIT0gbV90ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU1hcC5lbmQoKSkKLSAgICAgICAg
cmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBpdC0+dmFsdWU7CiAKICAgICBzd2l0
Y2ggKHNoYWRlclR5cGUpIHsKICAgICBjYXNlIFNpbXBsZToKQEAgLTc2NSw3ICs3NjUsNyBAQCBQ
YXNzUmVmUHRyPFN0YW5kYXJkRmlsdGVyUHJvZ3JhbT4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFn
ZXI6OmdldFNoYWRlckZvckZpbHRlcgogCiAgICAgICAgIG1fZmlsdGVyTWFwLmFkZChrZXksIHBy
b2dyYW0pOwogICAgIH0gZWxzZQotICAgICAgICBwcm9ncmFtID0gaXRlcmF0b3ItPnNlY29uZDsK
KyAgICAgICAgcHJvZ3JhbSA9IGl0ZXJhdG9yLT52YWx1ZTsKIAogICAgIHJldHVybiBwcm9ncmFt
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2Uv
Rm9udFBsYXRmb3JtRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW5jZS9Gb250UGxhdGZvcm1EYXRhLmNwcAppbmRleCAxOTc5MGFkLi4xOWY1MjQ1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250UGxhdGZvcm1E
YXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250
UGxhdGZvcm1EYXRhLmNwcApAQCAtMjg3LDkgKzI4Nyw5IEBAIHN0YXRpYyBQYXNzUmVmUHRyPEZp
eGVkU2l6ZUZvbnREYXRhPiBjcmVhdGVGaXhlZFNpemVGb250RGF0YShjb25zdCBBdG9taWNTdHJp
bmcmCiAgICAgRml4ZWRTaXplRm9udERhdGFLZXkga2V5KGZhbWlseSwgd2VpZ2h0LCBpdGFsaWMp
OwogICAgIEZpeGVkU2l6ZUZvbnRDYWNoZTo6QWRkUmVzdWx0IHJlc3VsdCA9IGdfZml4ZWRTaXpl
Rm9udENhY2hlLmFkZChrZXksIFJlZlB0cjxGaXhlZFNpemVGb250RGF0YT4oKSk7CiAgICAgaWYg
KHJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IEZp
eGVkU2l6ZUZvbnREYXRhOjpjcmVhdGUoZmFtaWx5LCB3ZWlnaHQsIGl0YWxpYyk7CisgICAgICAg
IHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBGaXhlZFNpemVGb250RGF0YTo6Y3JlYXRlKGZhbWls
eSwgd2VpZ2h0LCBpdGFsaWMpOwogCi0gICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25k
OworICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogfQogCiBzdGF0aWMgTE9ORyB0
b0dESUZvbnRXZWlnaHQoRm9udFdlaWdodCBmb250V2VpZ2h0KQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RhdGFPYmplY3RHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL0RhdGFPYmplY3RHdGsuY3BwCmluZGV4IDFhODRmOGIuLmFkZmM2NmUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRGF0YU9iamVjdEd0ay5jcHAKQEAgLTE3
MSw3ICsxNzEsNyBAQCBEYXRhT2JqZWN0R3RrKiBEYXRhT2JqZWN0R3RrOjpmb3JDbGlwYm9hcmQo
R3RrQ2xpcGJvYXJkKiBjbGlwYm9hcmQpCiAgICAgfQogCiAgICAgSGFzaE1hcDxHdGtDbGlwYm9h
cmQqLCBSZWZQdHI8RGF0YU9iamVjdEd0az4gPjo6aXRlcmF0b3IgaXQgPSBvYmplY3RNYXAuZmlu
ZChjbGlwYm9hcmQpOwotICAgIHJldHVybiBpdC0+c2Vjb25kLmdldCgpOworICAgIHJldHVybiBp
dC0+dmFsdWUuZ2V0KCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9HdGtEcmFnQW5kRHJvcEhlbHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvR3RrRHJhZ0FuZERyb3BIZWxwZXIuY3BwCmluZGV4IDc2M2QxMjAuLmZjMmY1NmUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtEcmFnQW5kRHJvcEhlbHBl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0RyYWdBbmREcm9wSGVs
cGVyLmNwcApAQCAtNzAsNyArNzAsNyBAQCB2b2lkIEd0a0RyYWdBbmREcm9wSGVscGVyOjpoYW5k
bGVHZXREcmFnRGF0YShHZGtEcmFnQ29udGV4dCogY29udGV4dCwgR3RrU2VsZWN0aQogICAgIERy
YWdnaW5nRGF0YU9iamVjdHNNYXA6Oml0ZXJhdG9yIGl0ZXJhdG9yID0gbV9kcmFnZ2luZ0RhdGFP
YmplY3RzLmZpbmQoY29udGV4dCk7CiAgICAgaWYgKGl0ZXJhdG9yID09IG1fZHJhZ2dpbmdEYXRh
T2JqZWN0cy5lbmQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIFBhc3RlYm9hcmRIZWxwZXI6OmRl
ZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPmZpbGxTZWxlY3Rpb25EYXRhKHNlbGVjdGlvbkRhdGEs
IGluZm8sIGl0ZXJhdG9yLT5zZWNvbmQuZ2V0KCkpOworICAgIFBhc3RlYm9hcmRIZWxwZXI6OmRl
ZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPmZpbGxTZWxlY3Rpb25EYXRhKHNlbGVjdGlvbkRhdGEs
IGluZm8sIGl0ZXJhdG9yLT52YWx1ZS5nZXQoKSk7CiB9CiAKIHN0cnVjdCBIYW5kbGVEcmFnTGF0
ZXJEYXRhIHsKQEAgLTExNiw3ICsxMTYsNyBAQCB2b2lkIEd0a0RyYWdBbmREcm9wSGVscGVyOjpo
YW5kbGVEcmFnTGVhdmUoR2RrRHJhZ0NvbnRleHQqIGdka0NvbnRleHQsIERyYWdFeGl0ZQogICAg
IC8vIHRoZSBkcmFnLWRyb3Agc2lnbmFsLiBXZSB3YW50IHRoZSBhY3Rpb25zIGZvciBkcmFnLWxl
YXZlIHRvIGhhcHBlbiBhZnRlcgogICAgIC8vIHRob3NlIGZvciBkcmFnLWRyb3AsIHNvIHNjaGVk
dWxlIHRoZW0gdG8gaGFwcGVuIGFzeW5jaHJvbm91c2x5IGhlcmUuCiAgICAgSGFuZGxlRHJhZ0xh
dGVyRGF0YSogZGF0YSA9IG5ldyBIYW5kbGVEcmFnTGF0ZXJEYXRhOwotICAgIGRhdGEtPmNvbnRl
eHQgPSBpdGVyYXRvci0+c2Vjb25kOworICAgIGRhdGEtPmNvbnRleHQgPSBpdGVyYXRvci0+dmFs
dWU7CiAgICAgZGF0YS0+Y29udGV4dC0+ZXhpdGVkQ2FsbGJhY2sgPSBleGl0ZWRDYWxsYmFjazsK
ICAgICBkYXRhLT5nbHVlID0gdGhpczsKICAgICBnX3RpbWVvdXRfYWRkKDAsIHJlaW50ZXJwcmV0
X2Nhc3Q8R1NvdXJjZUZ1bmM+KGhhbmRsZURyYWdMZWF2ZUxhdGVyQ2FsbGJhY2spLCBkYXRhKTsK
QEAgLTE0MCw3ICsxNDAsNyBAQCBQYXNzT3duUHRyPERyYWdEYXRhPiBHdGtEcmFnQW5kRHJvcEhl
bHBlcjo6aGFuZGxlRHJhZ01vdGlvbihHZGtEcmFnQ29udGV4dCogY29udAogICAgICAgICBtX2Ry
b3BwaW5nQ29udGV4dHMuc2V0KGNvbnRleHQsIGRyb3BwaW5nQ29udGV4dCk7CiAgICAgICAgIHF1
ZXJ5TmV3RHJvcENvbnRleHREYXRhKGRyb3BwaW5nQ29udGV4dCwgbV93aWRnZXQsIHRpbWUpOwog
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGRyb3BwaW5nQ29udGV4dCA9IGl0ZXJhdG9yLT5zZWNvbmQ7
CisgICAgICAgIGRyb3BwaW5nQ29udGV4dCA9IGl0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgZHJv
cHBpbmdDb250ZXh0LT5sYXN0TW90aW9uUG9zaXRpb24gPSBwb3NpdGlvbjsKICAgICB9CiAKQEAg
LTE2Miw3ICsxNjIsNyBAQCBQYXNzT3duUHRyPERyYWdEYXRhPiBHdGtEcmFnQW5kRHJvcEhlbHBl
cjo6aGFuZGxlRHJhZ0RhdGFSZWNlaXZlZChHZGtEcmFnQ29udGV4dAogICAgIGlmIChpdGVyYXRv
ciA9PSBtX2Ryb3BwaW5nQ29udGV4dHMuZW5kKCkpCiAgICAgICAgIHJldHVybiBhZG9wdFB0cihz
dGF0aWNfY2FzdDxEcmFnRGF0YSo+KDApKTsKIAotICAgIERyb3BwaW5nQ29udGV4dCogZHJvcHBp
bmdDb250ZXh0ID0gaXRlcmF0b3ItPnNlY29uZDsKKyAgICBEcm9wcGluZ0NvbnRleHQqIGRyb3Bw
aW5nQ29udGV4dCA9IGl0ZXJhdG9yLT52YWx1ZTsKICAgICBkcm9wcGluZ0NvbnRleHQtPnBlbmRp
bmdEYXRhUmVxdWVzdHMtLTsKICAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2Fy
ZEhlbHBlcigpLT5maWxsRGF0YU9iamVjdEZyb21Ecm9wRGF0YShzZWxlY3Rpb25EYXRhLCBpbmZv
LCBkcm9wcGluZ0NvbnRleHQtPmRhdGFPYmplY3QuZ2V0KCkpOwogCkBAIC0xODUsNyArMTg1LDcg
QEAgUGFzc093blB0cjxEcmFnRGF0YT4gR3RrRHJhZ0FuZERyb3BIZWxwZXI6OmhhbmRsZURyYWdE
cm9wKEdka0RyYWdDb250ZXh0KiBjb250ZXgKICAgICBpZiAoaXRlcmF0b3IgPT0gbV9kcm9wcGlu
Z0NvbnRleHRzLmVuZCgpKQogICAgICAgICByZXR1cm4gYWRvcHRQdHIoc3RhdGljX2Nhc3Q8RHJh
Z0RhdGEqPigwKSk7CiAKLSAgICBEcm9wcGluZ0NvbnRleHQqIGRyb3BwaW5nQ29udGV4dCA9IGl0
ZXJhdG9yLT5zZWNvbmQ7CisgICAgRHJvcHBpbmdDb250ZXh0KiBkcm9wcGluZ0NvbnRleHQgPSBp
dGVyYXRvci0+dmFsdWU7CiAgICAgZHJvcHBpbmdDb250ZXh0LT5kcm9wSGFwcGVuZWQgPSB0cnVl
OwogCiAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBEcmFnRGF0YShkcm9wcGluZ0NvbnRleHQtPmRh
dGFPYmplY3QuZ2V0KCksIHBvc2l0aW9uLCAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0azMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL1JlbmRlclRoZW1lR3RrMy5jcHAKaW5kZXggNzc0OTM5MS4uMGE4MzgyNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrMy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrMy5jcHAKQEAgLTU2LDcg
KzU2LDcgQEAgc3RhdGljIHZvaWQgZ3RrU3R5bGVDaGFuZ2VkQ2FsbGJhY2soR09iamVjdCosIEdQ
YXJhbVNwZWMqKQogewogICAgIFN0eWxlQ29udGV4dE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
c3R5bGVDb250ZXh0TWFwKCkuZW5kKCk7CiAgICAgZm9yIChTdHlsZUNvbnRleHRNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ZXIgPSBzdHlsZUNvbnRleHRNYXAoKS5iZWdpbigpOyBpdGVyICE9IGVuZDsg
KytpdGVyKQotICAgICAgICBndGtfc3R5bGVfY29udGV4dF9pbnZhbGlkYXRlKGl0ZXItPnNlY29u
ZC5nZXQoKSk7CisgICAgICAgIGd0a19zdHlsZV9jb250ZXh0X2ludmFsaWRhdGUoaXRlci0+dmFs
dWUuZ2V0KCkpOwogCiAgICAgUGFnZTo6c2NoZWR1bGVGb3JjZWRTdHlsZVJlY2FsY0ZvckFsbFBh
Z2VzKCk7CiB9CkBAIC03OSw3ICs3OSw3IEBAIHN0YXRpYyBHdGtTdHlsZUNvbnRleHQqIGdldFN0
eWxlQ29udGV4dChHVHlwZSB3aWRnZXRUeXBlKQogewogICAgIFN0eWxlQ29udGV4dE1hcDo6QWRk
UmVzdWx0IHJlc3VsdCA9IHN0eWxlQ29udGV4dE1hcCgpLmFkZCh3aWRnZXRUeXBlLCAwKTsKICAg
ICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9y
LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdl
dCgpOwogCiAgICAgR3RrV2lkZ2V0UGF0aCogcGF0aCA9IGd0a193aWRnZXRfcGF0aF9uZXcoKTsK
ICAgICBndGtfd2lkZ2V0X3BhdGhfYXBwZW5kX3R5cGUocGF0aCwgd2lkZ2V0VHlwZSk7CkBAIC0x
MTEsNyArMTExLDcgQEAgc3RhdGljIEd0a1N0eWxlQ29udGV4dCogZ2V0U3R5bGVDb250ZXh0KEdU
eXBlIHdpZGdldFR5cGUpCiAgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X3BhdGgoY29udGV4dC5n
ZXQoKSwgcGF0aCk7CiAgICAgZ3RrX3dpZGdldF9wYXRoX2ZyZWUocGF0aCk7CiAKLSAgICByZXN1
bHQuaXRlcmF0b3ItPnNlY29uZCA9IGNvbnRleHQ7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZSA9IGNvbnRleHQ7CiAgICAgcmV0dXJuIGNvbnRleHQuZ2V0KCk7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbFN0b3JhZ2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFsU3RvcmFnZS5jcHAKaW5k
ZXggZjYyNGQ0Zi4uOGI1YWM0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9DcmVkZW50aWFsU3RvcmFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9DcmVkZW50aWFsU3RvcmFnZS5jcHAKQEAgLTE0Nyw3ICsxNDcsNyBAQCBib29s
IENyZWRlbnRpYWxTdG9yYWdlOjpzZXQoY29uc3QgQ3JlZGVudGlhbCYgY3JlZGVudGlhbCwgY29u
c3QgS1VSTCYgdXJsKQogICAgIGlmIChpdGVyID09IHBhdGhUb0RlZmF1bHRQcm90ZWN0aW9uU3Bh
Y2VNYXAoKS5lbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEFTU0VSVChvcmlnaW5z
V2l0aENyZWRlbnRpYWxzKCkuY29udGFpbnMob3JpZ2luU3RyaW5nRnJvbVVSTCh1cmwpKSk7Ci0g
ICAgcHJvdGVjdGlvblNwYWNlVG9DcmVkZW50aWFsTWFwKCkuc2V0KGl0ZXItPnNlY29uZCwgY3Jl
ZGVudGlhbCk7CisgICAgcHJvdGVjdGlvblNwYWNlVG9DcmVkZW50aWFsTWFwKCkuc2V0KGl0ZXIt
PnZhbHVlLCBjcmVkZW50aWFsKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTU2LDcgKzE1
Niw3IEBAIENyZWRlbnRpYWwgQ3JlZGVudGlhbFN0b3JhZ2U6OmdldChjb25zdCBLVVJMJiB1cmwp
CiAgICAgUGF0aFRvRGVmYXVsdFByb3RlY3Rpb25TcGFjZU1hcDo6aXRlcmF0b3IgaXRlciA9IGZp
bmREZWZhdWx0UHJvdGVjdGlvblNwYWNlRm9yVVJMKHVybCk7CiAgICAgaWYgKGl0ZXIgPT0gcGF0
aFRvRGVmYXVsdFByb3RlY3Rpb25TcGFjZU1hcCgpLmVuZCgpKQogICAgICAgICByZXR1cm4gQ3Jl
ZGVudGlhbCgpOwotICAgIHJldHVybiBwcm90ZWN0aW9uU3BhY2VUb0NyZWRlbnRpYWxNYXAoKS5n
ZXQoaXRlci0+c2Vjb25kKTsKKyAgICByZXR1cm4gcHJvdGVjdGlvblNwYWNlVG9DcmVkZW50aWFs
TWFwKCkuZ2V0KGl0ZXItPnZhbHVlKTsKIH0KIAogdm9pZCBDcmVkZW50aWFsU3RvcmFnZTo6c2V0
UHJpdmF0ZU1vZGUoYm9vbCBtb2RlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9IVFRQSGVhZGVyTWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvSFRUUEhlYWRlck1hcC5jcHAKaW5kZXggNTAwOTFlMS4uZGVmZTFhZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQSGVhZGVyTWFwLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBIZWFkZXJNYXAuY3BwCkBAIC01
Miw3ICs1Miw3IEBAIFBhc3NPd25QdHI8Q3Jvc3NUaHJlYWRIVFRQSGVhZGVyTWFwRGF0YT4gSFRU
UEhlYWRlck1hcDo6Y29weURhdGEoKSBjb25zdAogCiAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3Rf
aXRlcmF0b3IgZW5kX2l0ID0gZW5kKCk7CiAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IGJlZ2luKCk7IGl0ICE9IGVuZF9pdDsgKytpdCkgewotICAgICAgICBkYXRh
LT5hcHBlbmQobWFrZV9wYWlyKGl0LT5maXJzdC5zdHJpbmcoKS5pc29sYXRlZENvcHkoKSwgaXQt
PnNlY29uZC5pc29sYXRlZENvcHkoKSkpOworICAgICAgICBkYXRhLT5hcHBlbmQobWFrZV9wYWly
KGl0LT5rZXkuc3RyaW5nKCkuaXNvbGF0ZWRDb3B5KCksIGl0LT52YWx1ZS5pc29sYXRlZENvcHko
KSkpOwogICAgIH0KICAgICByZXR1cm4gZGF0YS5yZWxlYXNlKCk7CiB9CkBAIC0xMDAsNyArMTAw
LDcgQEAgU3RyaW5nIEhUVFBIZWFkZXJNYXA6OmdldChjb25zdCBjaGFyKiBuYW1lKSBjb25zdAog
ICAgIGNvbnN0X2l0ZXJhdG9yIGkgPSBmaW5kPGNvbnN0IGNoYXIqLCBDYXNlRm9sZGluZ0NTdHJp
bmdUcmFuc2xhdG9yPihuYW1lKTsKICAgICBpZiAoaSA9PSBlbmQoKSkKICAgICAgICAgcmV0dXJu
IFN0cmluZygpOwotICAgIHJldHVybiBpLT5zZWNvbmQ7CisgICAgcmV0dXJuIGktPnZhbHVlOwog
fQogICAgIAogYm9vbCBIVFRQSGVhZGVyTWFwOjpjb250YWlucyhjb25zdCBjaGFyKiBuYW1lKSBj
b25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9NSU1FSGVh
ZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvTUlNRUhlYWRlci5jcHAK
aW5kZXggNWQ2Yjg1OC4uZjRlM2ViZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9NSU1FSGVhZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL01JTUVIZWFkZXIuY3BwCkBAIC04Niw3ICs4Niw3IEBAIFBhc3NSZWZQdHI8TUlNRUhl
YWRlcj4gTUlNRUhlYWRlcjo6cGFyc2VIZWFkZXIoU2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXIqIGJ1
ZmZlcikKICAgICBLZXlWYWx1ZU1hcDo6aXRlcmF0b3IgbWltZVBhcmFtZXRlcnNJdGVyYXRvciA9
IGtleVZhbHVlUGFpcnMuZmluZCgiY29udGVudC10eXBlIik7CiAgICAgaWYgKG1pbWVQYXJhbWV0
ZXJzSXRlcmF0b3IgIT0ga2V5VmFsdWVQYWlycy5lbmQoKSkgewogICAgICAgICAvLyBGSVhNRTog
bWFrZSBDb250ZW50VHlwZVBhcnNlciBtb3JlIGZsZXhpYmxlIHNvIHdlIGRvbid0IGhhdmUgdG8g
c3ludGhlc2l6ZSB0aGUgIkNvbnRlbnQtVHlwZToiLgotICAgICAgICBDb250ZW50VHlwZVBhcnNl
ciBjb250ZW50VHlwZVBhcnNlcihtYWtlU3RyaW5nKCJDb250ZW50LVR5cGU6IiwgbWltZVBhcmFt
ZXRlcnNJdGVyYXRvci0+c2Vjb25kKSk7CisgICAgICAgIENvbnRlbnRUeXBlUGFyc2VyIGNvbnRl
bnRUeXBlUGFyc2VyKG1ha2VTdHJpbmcoIkNvbnRlbnQtVHlwZToiLCBtaW1lUGFyYW1ldGVyc0l0
ZXJhdG9yLT52YWx1ZSkpOwogICAgICAgICBtaW1lSGVhZGVyLT5tX2NvbnRlbnRUeXBlID0gY29u
dGVudFR5cGVQYXJzZXIubWltZVR5cGUoKTsKICAgICAgICAgaWYgKCFtaW1lSGVhZGVyLT5pc011
bHRpcGFydCgpKQogICAgICAgICAgICAgbWltZUhlYWRlci0+bV9jaGFyc2V0ID0gY29udGVudFR5
cGVQYXJzZXIuY2hhcnNldCgpLnN0cmlwV2hpdGVTcGFjZSgpOwpAQCAtMTA1LDExICsxMDUsMTEg
QEAgUGFzc1JlZlB0cjxNSU1FSGVhZGVyPiBNSU1FSGVhZGVyOjpwYXJzZUhlYWRlcihTaGFyZWRC
dWZmZXJDaHVua1JlYWRlciogYnVmZmVyKQogCiAgICAgbWltZVBhcmFtZXRlcnNJdGVyYXRvciA9
IGtleVZhbHVlUGFpcnMuZmluZCgiY29udGVudC10cmFuc2Zlci1lbmNvZGluZyIpOwogICAgIGlm
IChtaW1lUGFyYW1ldGVyc0l0ZXJhdG9yICE9IGtleVZhbHVlUGFpcnMuZW5kKCkpCi0gICAgICAg
IG1pbWVIZWFkZXItPm1fY29udGVudFRyYW5zZmVyRW5jb2RpbmcgPSBwYXJzZUNvbnRlbnRUcmFu
c2ZlckVuY29kaW5nKG1pbWVQYXJhbWV0ZXJzSXRlcmF0b3ItPnNlY29uZCk7CisgICAgICAgIG1p
bWVIZWFkZXItPm1fY29udGVudFRyYW5zZmVyRW5jb2RpbmcgPSBwYXJzZUNvbnRlbnRUcmFuc2Zl
ckVuY29kaW5nKG1pbWVQYXJhbWV0ZXJzSXRlcmF0b3ItPnZhbHVlKTsKIAogICAgIG1pbWVQYXJh
bWV0ZXJzSXRlcmF0b3IgPSBrZXlWYWx1ZVBhaXJzLmZpbmQoImNvbnRlbnQtbG9jYXRpb24iKTsK
ICAgICBpZiAobWltZVBhcmFtZXRlcnNJdGVyYXRvciAhPSBrZXlWYWx1ZVBhaXJzLmVuZCgpKQot
ICAgICAgICBtaW1lSGVhZGVyLT5tX2NvbnRlbnRMb2NhdGlvbiA9IG1pbWVQYXJhbWV0ZXJzSXRl
cmF0b3ItPnNlY29uZDsKKyAgICAgICAgbWltZUhlYWRlci0+bV9jb250ZW50TG9jYXRpb24gPSBt
aW1lUGFyYW1ldGVyc0l0ZXJhdG9yLT52YWx1ZTsKIAogICAgIHJldHVybiBtaW1lSGVhZGVyLnJl
bGVhc2UoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
UmVzb3VyY2VIYW5kbGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNv
dXJjZUhhbmRsZS5jcHAKaW5kZXggN2RkYzQ3ZS4uNmQxMmY5ZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAKQEAgLTcxLDcgKzcx
LDcgQEAgUGFzc1JlZlB0cjxSZXNvdXJjZUhhbmRsZT4gUmVzb3VyY2VIYW5kbGU6OmNyZWF0ZShO
ZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY28KICAgICBCdWlsdGluUmVzb3VyY2VIYW5kbGVD
b25zdHJ1Y3Rvck1hcDo6aXRlcmF0b3IgcHJvdG9jb2xNYXBJdGVtID0gYnVpbHRpblJlc291cmNl
SGFuZGxlQ29uc3RydWN0b3JNYXAoKS5maW5kKHJlcXVlc3QudXJsKCkucHJvdG9jb2woKSk7CiAK
ICAgICBpZiAocHJvdG9jb2xNYXBJdGVtICE9IGJ1aWx0aW5SZXNvdXJjZUhhbmRsZUNvbnN0cnVj
dG9yTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiBwcm90b2NvbE1hcEl0ZW0tPnNlY29uZChy
ZXF1ZXN0LCBjbGllbnQpOworICAgICAgICByZXR1cm4gcHJvdG9jb2xNYXBJdGVtLT52YWx1ZShy
ZXF1ZXN0LCBjbGllbnQpOwogCiAgICAgUmVmUHRyPFJlc291cmNlSGFuZGxlPiBuZXdIYW5kbGUo
YWRvcHRSZWYobmV3IFJlc291cmNlSGFuZGxlKHJlcXVlc3QsIGNsaWVudCwgZGVmZXJzTG9hZGlu
Zywgc2hvdWxkQ29udGVudFNuaWZmKSkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcAppbmRleCAzNTA5NzkyLi41
MzE1YzFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291
cmNlUmVxdWVzdEJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
UmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHAKQEAgLTM3Myw3ICszNzMsNyBAQCB2b2lkIFJlc291cmNl
UmVxdWVzdEJhc2U6OmFkZEhUVFBIZWFkZXJGaWVsZChjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUs
IGNvbnN0IFN0cgogICAgIHVwZGF0ZVJlc291cmNlUmVxdWVzdCgpOwogICAgIEhUVFBIZWFkZXJN
YXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX2h0dHBIZWFkZXJGaWVsZHMuYWRkKG5hbWUsIHZhbHVl
KTsKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXN1bHQuaXRlcmF0b3It
PnNlY29uZCArPSAiLCIgKyB2YWx1ZTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSAr
PSAiLCIgKyB2YWx1ZTsKIAogICAgIGlmICh1cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkp
CiAgICAgICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZhbHNlOwpAQCAtMzgzLDcgKzM4
Myw3IEBAIHZvaWQgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6YWRkSFRUUEhlYWRlckZpZWxkcyhjb25z
dCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJGaWVsZHMpCiB7CiAgICAgSFRUUEhlYWRlck1hcDo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gaGVhZGVyRmllbGRzLmVuZCgpOwogICAgIGZvciAoSFRUUEhlYWRl
ck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBoZWFkZXJGaWVsZHMuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KQotICAgICAgICBhZGRIVFRQSGVhZGVyRmllbGQoaXQtPmZpcnN0LCBpdC0+c2Vjb25k
KTsKKyAgICAgICAgYWRkSFRUUEhlYWRlckZpZWxkKGl0LT5rZXksIGl0LT52YWx1ZSk7CiB9CiAK
IGJvb2wgZXF1YWxJZ25vcmluZ0hlYWRlckZpZWxkcyhjb25zdCBSZXNvdXJjZVJlcXVlc3RCYXNl
JiBhLCBjb25zdCBSZXNvdXJjZVJlcXVlc3RCYXNlJiBiKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRk5ldC5jcHAKaW5k
ZXggZjZkMWYzOC4uMDFlOGI4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZOZXQuY3BwCkBAIC00MjgsNyArNDI4
LDcgQEAgc3RhdGljIENGVVJMUmVxdWVzdFJlZiBtYWtlRmluYWxSZXF1ZXN0KGNvbnN0IFJlc291
cmNlUmVxdWVzdCYgcmVxdWVzdCwgYm9vbCBzaG8KICAgICAgICAgaWYgKCFzc2xQcm9wcykKICAg
ICAgICAgICAgIHNzbFByb3BzLmFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlTXV0YWJsZShrQ0ZB
bGxvY2F0b3JEZWZhdWx0LCAwLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZU
eXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CiAjaWYgUExBVEZPUk0oV0lOKQotICAgICAg
ICB3a1NldENsaWVudENlcnRpZmljYXRlSW5TU0xQcm9wZXJ0aWVzKHNzbFByb3BzLmdldCgpLCAo
Y2xpZW50Q2VydC0+c2Vjb25kKS5nZXQoKSk7CisgICAgICAgIHdrU2V0Q2xpZW50Q2VydGlmaWNh
dGVJblNTTFByb3BlcnRpZXMoc3NsUHJvcHMuZ2V0KCksIChjbGllbnRDZXJ0LT52YWx1ZSkuZ2V0
KCkpOwogI2VuZGlmCiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2NmL1Jlc291cmNlUmVxdWVzdENGTmV0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0Q0ZOZXQuY3BwCmluZGV4IDUyMGQ2ODUu
LmQ2ZGY2MWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2Yv
UmVzb3VyY2VSZXF1ZXN0Q0ZOZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0Q0ZOZXQuY3BwCkBAIC0xMjAsOCArMTIwLDggQEAgc3Rh
dGljIGlubGluZSB2b2lkIHNldEhlYWRlckZpZWxkcyhDRk11dGFibGVVUkxSZXF1ZXN0UmVmIHJl
cXVlc3QsIGNvbnN0IEhUVFBIZWEKIAogICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IHJlcXVlc3RIZWFkZXJzLmVuZCgpOwogICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSByZXF1ZXN0SGVhZGVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKLSAgICAgICAgQ0ZTdHJpbmdSZWYga2V5ID0gaXQtPmZpcnN0LmNyZWF0ZUNGU3RyaW5nKCk7
Ci0gICAgICAgIENGU3RyaW5nUmVmIHZhbHVlID0gaXQtPnNlY29uZC5jcmVhdGVDRlN0cmluZygp
OworICAgICAgICBDRlN0cmluZ1JlZiBrZXkgPSBpdC0+a2V5LmNyZWF0ZUNGU3RyaW5nKCk7Cisg
ICAgICAgIENGU3RyaW5nUmVmIHZhbHVlID0gaXQtPnZhbHVlLmNyZWF0ZUNGU3RyaW5nKCk7CiAg
ICAgICAgIENGVVJMUmVxdWVzdFNldEhUVFBIZWFkZXJGaWVsZFZhbHVlKHJlcXVlc3QsIGtleSwg
dmFsdWUpOwogICAgICAgICBDRlJlbGVhc2Uoa2V5KTsKICAgICAgICAgQ0ZSZWxlYXNlKHZhbHVl
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNv
dXJjZUhhbmRsZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
dXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHAKaW5kZXggYWYwNzVlZi4uNjViY2MxMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFu
ZGxlTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJs
L1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHAKQEAgLTcwMyw4ICs3MDMsOCBAQCB2b2lkIFJlc291
cmNlSGFuZGxlTWFuYWdlcjo6aW5pdGlhbGl6ZUhhbmRsZShSZXNvdXJjZUhhbmRsZSogam9iKQog
ICAgICAgICBIVFRQSGVhZGVyTWFwIGN1c3RvbUhlYWRlcnMgPSBqb2ItPmZpcnN0UmVxdWVzdCgp
Lmh0dHBIZWFkZXJGaWVsZHMoKTsKICAgICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gY3VzdG9tSGVhZGVycy5lbmQoKTsKICAgICAgICAgZm9yIChIVFRQSGVhZGVyTWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IGN1c3RvbUhlYWRlcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7Ci0gICAgICAgICAgICBTdHJpbmcga2V5ID0gaXQtPmZpcnN0OwotICAgICAgICAgICAg
U3RyaW5nIHZhbHVlID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIFN0cmluZyBrZXkgPSBpdC0+
a2V5OworICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0gaXQtPnZhbHVlOwogICAgICAgICAgICAg
U3RyaW5nIGhlYWRlclN0cmluZyhrZXkpOwogICAgICAgICAgICAgaGVhZGVyU3RyaW5nLmFwcGVu
ZCgiOiAiKTsKICAgICAgICAgICAgIGhlYWRlclN0cmluZy5hcHBlbmQodmFsdWUpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VSZXF1ZXN0
TWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VSZXF1
ZXN0TWFjLm1tCmluZGV4IDk2YzQ5N2QuLjkzMjE2Y2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlUmVxdWVzdE1hYy5tbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZVJlcXVlc3RNYWMubW0KQEAg
LTE1NSw3ICsxNTUsNyBAQCB2b2lkIFJlc291cmNlUmVxdWVzdDo6ZG9VcGRhdGVQbGF0Zm9ybVJl
cXVlc3QoKQogICAgICAgICBbbnNSZXF1ZXN0IHNldFZhbHVlOm5pbCBmb3JIVFRQSGVhZGVyRmll
bGQ6W29sZEhlYWRlckZpZWxkTmFtZXMgb2JqZWN0QXRJbmRleDppIC0gMV1dOwogICAgIEhUVFBI
ZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGh0dHBIZWFkZXJGaWVsZHMoKS5lbmQoKTsK
ICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaHR0cEhlYWRlckZp
ZWxkcygpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgW25zUmVxdWVzdCBzZXRW
YWx1ZTppdC0+c2Vjb25kIGZvckhUVFBIZWFkZXJGaWVsZDppdC0+Zmlyc3RdOworICAgICAgICBb
bnNSZXF1ZXN0IHNldFZhbHVlOml0LT52YWx1ZSBmb3JIVFRQSGVhZGVyRmllbGQ6aXQtPmtleV07
CiAKICAgICAvLyBUaGUgYmVsb3cgY2hlY2sgY2FuIGJlIHJlbW92ZWQgb25jZSB3ZSByZXF1aXJl
IGEgdmVyc2lvbiBvZiBGb3VuZGF0aW9uIHdpdGggLVtOU011dGFibGVVUkxSZXF1ZXN0IHNldENv
bnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheTpdIG1ldGhvZC4KICAgICBzdGF0
aWMgYm9vbCBzdXBwb3J0c0NvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheSA9
IFtOU011dGFibGVVUkxSZXF1ZXN0IGluc3RhbmNlc1Jlc3BvbmRUb1NlbGVjdG9yOkBzZWxlY3Rv
cihzZXRDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXk6KV07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3F0L1Jlc291cmNlUmVxdWVzdFF0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvcXQvUmVzb3VyY2VSZXF1ZXN0
UXQuY3BwCmluZGV4IGRiYjdiNzQuLmU4NGU2NzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvcXQvUmVzb3VyY2VSZXF1ZXN0UXQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvcXQvUmVzb3VyY2VSZXF1ZXN0UXQuY3BwCkBAIC00OSw4
ICs0OSw4IEBAIFFOZXR3b3JrUmVxdWVzdCBSZXNvdXJjZVJlcXVlc3Q6OnRvTmV0d29ya1JlcXVl
c3QoTmV0d29ya2luZ0NvbnRleHQgKmNvbnRleHQpIGNvCiAgICAgY29uc3QgSFRUUEhlYWRlck1h
cCAmaGVhZGVycyA9IGh0dHBIZWFkZXJGaWVsZHMoKTsKICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaGVhZGVycy5iZWdpbigpLCBlbmQgPSBoZWFkZXJzLmVuZCgp
OwogICAgICAgICAgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFFCeXRlQXJyYXkgbmFtZSA9
IFFTdHJpbmcoaXQtPmZpcnN0KS50b0xhdGluMSgpOwotICAgICAgICBRQnl0ZUFycmF5IHZhbHVl
ID0gUVN0cmluZyhpdC0+c2Vjb25kKS50b0xhdGluMSgpOworICAgICAgICBRQnl0ZUFycmF5IG5h
bWUgPSBRU3RyaW5nKGl0LT5rZXkpLnRvTGF0aW4xKCk7CisgICAgICAgIFFCeXRlQXJyYXkgdmFs
dWUgPSBRU3RyaW5nKGl0LT52YWx1ZSkudG9MYXRpbjEoKTsKICAgICAgICAgLy8gUU5ldHdvcmtS
ZXF1ZXN0OjpzZXRSYXdIZWFkZXIoKSB3b3VsZCByZW1vdmUgdGhlIGhlYWRlciBpZiB0aGUgdmFs
dWUgaXMgbnVsbAogICAgICAgICAvLyBNYWtlIHN1cmUgdG8gc2V0IGFuIGVtcHR5IGhlYWRlciBp
bnN0ZWFkIG9mIG51bGwgaGVhZGVyLgogICAgICAgICBpZiAoIXZhbHVlLmlzTnVsbCgpKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVx
dWVzdFNvdXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291
cmNlUmVxdWVzdFNvdXAuY3BwCmluZGV4IGQ3MTI3YjQuLjU3YWI0ZDYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1
ZXN0U291cC5jcHAKQEAgLTQzLDcgKzQzLDcgQEAgdm9pZCBSZXNvdXJjZVJlcXVlc3Q6OnVwZGF0
ZVNvdXBNZXNzYWdlKFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSkgY29uc3QKICAgICBpZiAoIWhl
YWRlcnMuaXNFbXB0eSgpKSB7CiAgICAgICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IGhlYWRlcnMuZW5kKCk7CiAgICAgICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBoZWFkZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAg
ICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChzb3VwSGVhZGVycywgaXQtPmZpcnN0LnN0
cmluZygpLnV0ZjgoKS5kYXRhKCksIGl0LT5zZWNvbmQudXRmOCgpLmRhdGEoKSk7CisgICAgICAg
ICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQoc291cEhlYWRlcnMsIGl0LT5rZXkuc3Ry
aW5nKCkudXRmOCgpLmRhdGEoKSwgaXQtPnZhbHVlLnV0ZjgoKS5kYXRhKCkpOwogICAgIH0KIAog
ICAgIFN0cmluZyBmaXJzdFBhcnR5U3RyaW5nID0gZmlyc3RQYXJ0eUZvckNvb2tpZXMoKS5zdHJp
bmcoKTsKQEAgLTY2LDcgKzY2LDcgQEAgU291cE1lc3NhZ2UqIFJlc291cmNlUmVxdWVzdDo6dG9T
b3VwTWVzc2FnZSgpIGNvbnN0CiAgICAgaWYgKCFoZWFkZXJzLmlzRW1wdHkoKSkgewogICAgICAg
ICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBoZWFkZXJzLmVuZCgpOwogICAg
ICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaGVhZGVycy5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19h
cHBlbmQoc291cEhlYWRlcnMsIGl0LT5maXJzdC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBpdC0+
c2Vjb25kLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNf
YXBwZW5kKHNvdXBIZWFkZXJzLCBpdC0+a2V5LnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGl0LT52
YWx1ZS51dGY4KCkuZGF0YSgpKTsKICAgICB9CiAKICAgICBTdHJpbmcgZmlyc3RQYXJ0eVN0cmlu
ZyA9IGZpcnN0UGFydHlGb3JDb29raWVzKCkuc3RyaW5nKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXNwb25zZVNvdXAuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVzcG9uc2VTb3Vw
LmNwcAppbmRleCBkZGFhODkzLi43MzlkNDRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXNwb25zZVNvdXAuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlc3BvbnNlU291cC5jcHAK
QEAgLTQ2LDcgKzQ2LDcgQEAgU291cE1lc3NhZ2UqIFJlc291cmNlUmVzcG9uc2U6OnRvU291cE1l
c3NhZ2UoKSBjb25zdAogICAgIGlmICghaGVhZGVycy5pc0VtcHR5KCkpIHsKICAgICAgICAgSFRU
UEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaGVhZGVycy5lbmQoKTsKICAgICAgICAg
Zm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGhlYWRlcnMuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5k
KHNvdXBIZWFkZXJzLCBpdC0+Zmlyc3Quc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgaXQtPnNlY29u
ZC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVu
ZChzb3VwSGVhZGVycywgaXQtPmtleS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBpdC0+dmFsdWUu
dXRmOCgpLmRhdGEoKSk7CiAgICAgfQogCiAgICAgc291cF9tZXNzYWdlX3NldF9mbGFncyhzb3Vw
TWVzc2FnZSwgbV9zb3VwRmxhZ3MpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay93aW4vUmVzb3VyY2VIYW5kbGVXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay93aW4vUmVzb3VyY2VIYW5kbGVXaW4uY3BwCmluZGV4IDAyMTJkMGMuLjU1
MTQyOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvd2luL1Jl
c291cmNlSGFuZGxlV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L3dpbi9SZXNvdXJjZUhhbmRsZVdpbi5jcHAKQEAgLTMyOSw5ICszMjksOSBAQCBib29sIFJlc291
cmNlSGFuZGxlOjpzdGFydChOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCkKICAgICAgICAgaWYg
KCFodHRwSGVhZGVycy5pc0VtcHR5KCkpCiAgICAgICAgICAgICBodHRwSGVhZGVycy5hcHBlbmQo
J1xuJyk7CiAKLSAgICAgICAgaHR0cEhlYWRlcnMuYXBwZW5kKGl0LT5maXJzdC5jaGFyYWN0ZXJz
KCksIGl0LT5maXJzdC5sZW5ndGgoKSk7CisgICAgICAgIGh0dHBIZWFkZXJzLmFwcGVuZChpdC0+
a2V5LmNoYXJhY3RlcnMoKSwgaXQtPmtleS5sZW5ndGgoKSk7CiAgICAgICAgIGh0dHBIZWFkZXJz
LmFwcGVuZCgnOicpOwotICAgICAgICBodHRwSGVhZGVycy5hcHBlbmQoaXQtPnNlY29uZC5jaGFy
YWN0ZXJzKCksIGl0LT5zZWNvbmQubGVuZ3RoKCkpOworICAgICAgICBodHRwSGVhZGVycy5hcHBl
bmQoaXQtPnZhbHVlLmNoYXJhY3RlcnMoKSwgaXQtPnZhbHVlLmxlbmd0aCgpKTsKICAgICB9CiAK
ICAgICBJTlRFUk5FVF9CVUZGRVJTVyBpbnRlcm5ldEJ1ZmZlcnM7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SdW5Mb29wUXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vcXQvUnVuTG9vcFF0LmNwcAppbmRleCAyYTg3ZTJmLi41MDFiZDVjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SdW5Mb29wUXQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3F0L1J1bkxvb3BRdC5jcHAKQEAgLTEwOSw3ICsxMDksNyBAQCB2b2lk
IFJ1bkxvb3A6OlRpbWVyQmFzZTo6dGltZXJGaXJlZChSdW5Mb29wKiBydW5Mb29wLCBpbnQgSUQp
CiB7CiAgICAgVGltZXJNYXA6Oml0ZXJhdG9yIGl0ID0gcnVuTG9vcC0+bV9hY3RpdmVUaW1lcnMu
ZmluZChJRCk7CiAgICAgQVNTRVJUKGl0ICE9IHJ1bkxvb3AtPm1fYWN0aXZlVGltZXJzLmVuZCgp
KTsKLSAgICBUaW1lckJhc2UqIHRpbWVyID0gaXQtPnNlY29uZDsKKyAgICBUaW1lckJhc2UqIHRp
bWVyID0gaXQtPnZhbHVlOwogCiAgICAgaWYgKCF0aW1lci0+bV9pc1JlcGVhdGluZykgewogICAg
ICAgICAvLyBTdG9wIHRoZSB0aW1lciAoY2FsbGluZyBzdG9wIHdvdWxkIG5lZWQgYW5vdGhlciBo
YXNoIHRhYmxlIGxvb2t1cCkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L0xvY2FsZVRvU2NyaXB0TWFwcGluZ0RlZmF1bHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9Mb2NhbGVUb1NjcmlwdE1hcHBpbmdEZWZhdWx0LmNwcAppbmRleCA5MDk0NzM4
Li41ODI2NDkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0xvY2Fs
ZVRvU2NyaXB0TWFwcGluZ0RlZmF1bHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvTG9jYWxlVG9TY3JpcHRNYXBwaW5nRGVmYXVsdC5jcHAKQEAgLTE2Niw3ICsxNjYsNyBA
QCBVU2NyaXB0Q29kZSBzY3JpcHROYW1lVG9Db2RlKGNvbnN0IFN0cmluZyYgc2NyaXB0TmFtZSkK
IAogICAgIEhhc2hNYXA8U3RyaW5nLCBVU2NyaXB0Q29kZT46Oml0ZXJhdG9yIGl0ID0gc2NyaXB0
TmFtZUNvZGVNYXAuZmluZChzY3JpcHROYW1lLmxvd2VyKCkpOwogICAgIGlmIChpdCAhPSBzY3Jp
cHROYW1lQ29kZU1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAg
IHJldHVybiBpdC0+dmFsdWU7CiAgICAgcmV0dXJuIFVTQ1JJUFRfSU5WQUxJRF9DT0RFOwogfQog
CkBAIC0zODksNyArMzg5LDcgQEAgVVNjcmlwdENvZGUgbG9jYWxlVG9TY3JpcHRDb2RlRm9yRm9u
dFNlbGVjdGlvbihjb25zdCBTdHJpbmcmIGxvY2FsZSkKICAgICB3aGlsZSAoIWNhbm9uaWNhbExv
Y2FsZS5pc0VtcHR5KCkpIHsKICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFVTY3JpcHRDb2RlPjo6
aXRlcmF0b3IgaXQgPSBsb2NhbGVTY3JpcHRNYXAuZmluZChjYW5vbmljYWxMb2NhbGUpOwogICAg
ICAgICBpZiAoaXQgIT0gbG9jYWxlU2NyaXB0TWFwLmVuZCgpKQotICAgICAgICAgICAgcmV0dXJu
IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwogICAgICAgICBzaXpl
X3QgcG9zID0gY2Fub25pY2FsTG9jYWxlLnJldmVyc2VGaW5kKCdfJyk7CiAgICAgICAgIGlmIChw
b3MgPT0gbm90Rm91bmQpCiAgICAgICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnkuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAKaW5kZXggYmQ4Yjdh
NS4uNzcyNzk3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0
RW5jb2RpbmdSZWdpc3RyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9U
ZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAKQEAgLTE5Niw4ICsxOTYsOCBAQCBzdGF0aWMgdm9pZCBw
cnVuZUJsYWNrbGlzdGVkQ29kZWNzKCkKICAgICAgICAgVGV4dEVuY29kaW5nTmFtZU1hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSB0ZXh0RW5jb2RpbmdOYW1lTWFwLT5iZWdpbigpOwogICAgICAgICBU
ZXh0RW5jb2RpbmdOYW1lTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSB0ZXh0RW5jb2RpbmdOYW1l
TWFwLT5lbmQoKTsKICAgICAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAg
ICAgaWYgKGl0LT5zZWNvbmQgPT0gYXRvbWljTmFtZSkKLSAgICAgICAgICAgICAgICBuYW1lcy5h
cHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgICAgIGlmIChpdC0+dmFsdWUgPT0gYXRvbWljTmFt
ZSkKKyAgICAgICAgICAgICAgICBuYW1lcy5hcHBlbmQoaXQtPmtleSk7CiAgICAgICAgIH0KIAog
ICAgICAgICBzaXplX3QgbGVuZ3RoID0gbmFtZXMuc2l6ZSgpOwpAQCAtMzc5LDcgKzM3OSw3IEBA
IHZvaWQgZHVtcFRleHRFbmNvZGluZ05hbWVNYXAoKQogICAgIFRleHRFbmNvZGluZ05hbWVNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdGV4dEVuY29kaW5nTmFtZU1hcC0+YmVnaW4oKTsKICAgICBU
ZXh0RW5jb2RpbmdOYW1lTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSB0ZXh0RW5jb2RpbmdOYW1l
TWFwLT5lbmQoKTsKICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBmcHJpbnRm
KHN0ZGVyciwgIiclcycgPT4gJyVzJ1xuIiwgaXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsKKyAgICAg
ICAgZnByaW50ZihzdGRlcnIsICInJXMnID0+ICclcydcbiIsIGl0LT5rZXksIGl0LT52YWx1ZSk7
CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC90
cmFuc2NvZGVyL0ZvbnRUcmFuc2NvZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvdHJhbnNjb2Rlci9Gb250VHJhbnNjb2Rlci5jcHAKaW5kZXggNGUwN2Y1MC4uNDg0MjI4YyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC90cmFuc2NvZGVyL0ZvbnRU
cmFuc2NvZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3RyYW5zY29k
ZXIvRm9udFRyYW5zY29kZXIuY3BwCkBAIC02Niw3ICs2Niw3IEBAIEZvbnRUcmFuc2NvZGVyOjpD
b252ZXJ0ZXJUeXBlIEZvbnRUcmFuc2NvZGVyOjpjb252ZXJ0ZXJUeXBlKGNvbnN0IEZvbnREZXNj
cmlwdGlvCiAgICAgaWYgKCFmb250RmFtaWx5LmlzTnVsbCgpKSB7CiAgICAgICAgIEhhc2hNYXA8
QXRvbWljU3RyaW5nLCBDb252ZXJ0ZXJUeXBlPjo6Y29uc3RfaXRlcmF0b3IgZm91bmQgPSBtX2Nv
bnZlcnRlclR5cGVzLmZpbmQoZm9udEZhbWlseSk7CiAgICAgICAgIGlmIChmb3VuZCAhPSBtX2Nv
bnZlcnRlclR5cGVzLmVuZCgpKQotICAgICAgICAgICAgcmV0dXJuIGZvdW5kLT5zZWNvbmQ7Cisg
ICAgICAgICAgICByZXR1cm4gZm91bmQtPnZhbHVlOwogICAgIH0KIAogICAgIC8vIElFJ3MgZGVm
YXVsdCBmb250cyBmb3IgSmFwYW5lc2UgZW5jb2RpbmdzIGNoYW5nZSBiYWNrc2xhc2hlcyBpbnRv
IHllbiBzaWducy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvd2lu
L1RleHRDb2RlY1dpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3dpbi9UZXh0
Q29kZWNXaW4uY3BwCmluZGV4IGUxOTIzN2QuLjg3OWFmNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvd2luL1RleHRDb2RlY1dpbi5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC93aW4vVGV4dENvZGVjV2luLmNwcApAQCAtMTA1LDE3ICsxMDUs
MTcgQEAgTGFuZ3VhZ2VNYW5hZ2VyOjpMYW5ndWFnZU1hbmFnZXIoKQogICAgICAgICAgICAgaSA9
IGNvZGVQYWdlQ2hhcnNldHMoKS5zZXQoY3BJbmZvLnVpQ29kZVBhZ2UsIG5hbWUpLml0ZXJhdG9y
OwogICAgICAgICB9CiAgICAgICAgIGlmIChpICE9IGNvZGVQYWdlQ2hhcnNldHMoKS5lbmQoKSkg
ewotICAgICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIENoYXJzZXRJbmZvPjo6aXRlcmF0b3IgaiA9
IGtub3duQ2hhcnNldHMoKS5maW5kKFN0cmluZyhpLT5zZWNvbmQuZGF0YSgpLCBpLT5zZWNvbmQu
bGVuZ3RoKCkpKTsKKyAgICAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBDaGFyc2V0SW5mbz46Oml0
ZXJhdG9yIGogPSBrbm93bkNoYXJzZXRzKCkuZmluZChTdHJpbmcoaS0+dmFsdWUuZGF0YSgpLCBp
LT52YWx1ZS5sZW5ndGgoKSkpOwogICAgICAgICAgICAgQVNTRVJUKGogIT0ga25vd25DaGFyc2V0
cygpLmVuZCgpKTsKLSAgICAgICAgICAgIENoYXJzZXRJbmZvJiBpbmZvID0gai0+c2Vjb25kOwot
ICAgICAgICAgICAgaW5mby5tX25hbWUgPSBpLT5zZWNvbmQuZGF0YSgpOworICAgICAgICAgICAg
Q2hhcnNldEluZm8mIGluZm8gPSBqLT52YWx1ZTsKKyAgICAgICAgICAgIGluZm8ubV9uYW1lID0g
aS0+dmFsdWUuZGF0YSgpOwogICAgICAgICAgICAgaW5mby5tX2ZyaWVuZGx5TmFtZSA9IGNwSW5m
by53c3pEZXNjcmlwdGlvbjsKICAgICAgICAgICAgIGluZm8ubV9hbGlhc2VzLmFwcGVuZChuYW1l
KTsKICAgICAgICAgICAgIGluZm8ubV9hbGlhc2VzLmFwcGVuZChTdHJpbmcoY3BJbmZvLndzekhl
YWRlckNoYXJzZXQpLmxhdGluMSgpKTsKICAgICAgICAgICAgIGluZm8ubV9hbGlhc2VzLmFwcGVu
ZChTdHJpbmcoY3BJbmZvLndzekJvZHlDaGFyc2V0KS5sYXRpbjEoKSk7CiAgICAgICAgICAgICBT
dHJpbmcgY3BOYW1lID0gImNwIiArIFN0cmluZzo6bnVtYmVyKGNwSW5mby51aUNvZGVQYWdlKTsK
ICAgICAgICAgICAgIGluZm8ubV9hbGlhc2VzLmFwcGVuZChjcE5hbWUubGF0aW4xKCkpOwotICAg
ICAgICAgICAgc3VwcG9ydGVkQ2hhcnNldHMoKS5hZGQoaS0+c2Vjb25kLmRhdGEoKSk7CisgICAg
ICAgICAgICBzdXBwb3J0ZWRDaGFyc2V0cygpLmFkZChpLT52YWx1ZS5kYXRhKCkpOwogICAgICAg
ICB9CiAgICAgfQogfQpAQCAtMTI2LDcgKzEyNiw3IEBAIHN0YXRpYyBVSU5UIGdldENvZGVQYWdl
KGNvbnN0IGNoYXIqIG5hbWUpCiAgICAgLy8gc2F5aW5nICI9PSIgaXMgbm90IGZvdW5kIGZvciBj
b25zdF9pdGVyYXRvciBhbmQgaXRlcmF0b3IKICAgICBjb25zdCBIYXNoTWFwPFN0cmluZywgQ2hh
cnNldEluZm8+JiBjaGFyc2V0cyA9IGtub3duQ2hhcnNldHMoKTsKICAgICBIYXNoTWFwPFN0cmlu
ZywgQ2hhcnNldEluZm8+Ojpjb25zdF9pdGVyYXRvciBpID0gY2hhcnNldHMuZmluZChuYW1lKTsK
LSAgICByZXR1cm4gaSA9PSBjaGFyc2V0cy5lbmQoKSA/IENQX0FDUCA6IGktPnNlY29uZC5tX2Nv
ZGVQYWdlOworICAgIHJldHVybiBpID09IGNoYXJzZXRzLmVuZCgpID8gQ1BfQUNQIDogaS0+dmFs
dWUubV9jb2RlUGFnZTsKIH0KIAogc3RhdGljIFBhc3NPd25QdHI8VGV4dENvZGVjPiBuZXdUZXh0
Q29kZWNXaW4oY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZywgY29uc3Qgdm9pZCopCkBAIC0x
NDksOSArMTQ5LDkgQEAgdm9pZCBUZXh0Q29kZWNXaW46OnJlZ2lzdGVyRXh0ZW5kZWRFbmNvZGlu
Z05hbWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJhciByZWdpc3RyYXIKICAgICBmb3IgKENoYXJzZXRT
ZXQ6Oml0ZXJhdG9yIGkgPSBzdXBwb3J0ZWRDaGFyc2V0cygpLmJlZ2luKCk7IGkgIT0gc3VwcG9y
dGVkQ2hhcnNldHMoKS5lbmQoKTsgKytpKSB7CiAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBDaGFy
c2V0SW5mbz46Oml0ZXJhdG9yIGogPSBrbm93bkNoYXJzZXRzKCkuZmluZCgqaSk7CiAgICAgICAg
IGlmIChqICE9IGtub3duQ2hhcnNldHMoKS5lbmQoKSkgewotICAgICAgICAgICAgcmVnaXN0cmFy
KGotPnNlY29uZC5tX25hbWUuZGF0YSgpLCBqLT5zZWNvbmQubV9uYW1lLmRhdGEoKSk7Ci0gICAg
ICAgICAgICBmb3IgKFZlY3RvcjxDU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgYWxpYXMgPSBqLT5z
ZWNvbmQubV9hbGlhc2VzLmJlZ2luKCk7IGFsaWFzICE9IGotPnNlY29uZC5tX2FsaWFzZXMuZW5k
KCk7ICsrYWxpYXMpCi0gICAgICAgICAgICAgICAgcmVnaXN0cmFyKGFsaWFzLT5kYXRhKCksIGot
PnNlY29uZC5tX25hbWUuZGF0YSgpKTsKKyAgICAgICAgICAgIHJlZ2lzdHJhcihqLT52YWx1ZS5t
X25hbWUuZGF0YSgpLCBqLT52YWx1ZS5tX25hbWUuZGF0YSgpKTsKKyAgICAgICAgICAgIGZvciAo
VmVjdG9yPENTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBhbGlhcyA9IGotPnZhbHVlLm1fYWxpYXNl
cy5iZWdpbigpOyBhbGlhcyAhPSBqLT52YWx1ZS5tX2FsaWFzZXMuZW5kKCk7ICsrYWxpYXMpCisg
ICAgICAgICAgICAgICAgcmVnaXN0cmFyKGFsaWFzLT5kYXRhKCksIGotPnZhbHVlLm1fbmFtZS5k
YXRhKCkpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMTYyLDcgKzE2Miw3IEBAIHZvaWQgVGV4
dENvZGVjV2luOjpyZWdpc3RlckV4dGVuZGVkQ29kZWNzKFRleHRDb2RlY1JlZ2lzdHJhciByZWdp
c3RyYXIpCiAgICAgZm9yIChDaGFyc2V0U2V0OjppdGVyYXRvciBpID0gc3VwcG9ydGVkQ2hhcnNl
dHMoKS5iZWdpbigpOyBpICE9IHN1cHBvcnRlZENoYXJzZXRzKCkuZW5kKCk7ICsraSkgewogICAg
ICAgICBIYXNoTWFwPFN0cmluZywgQ2hhcnNldEluZm8+OjppdGVyYXRvciBqID0ga25vd25DaGFy
c2V0cygpLmZpbmQoKmkpOwogICAgICAgICBpZiAoaiAhPSBrbm93bkNoYXJzZXRzKCkuZW5kKCkp
Ci0gICAgICAgICAgICByZWdpc3RyYXIoai0+c2Vjb25kLm1fbmFtZS5kYXRhKCksIG5ld1RleHRD
b2RlY1dpbiwgMCk7CisgICAgICAgICAgICByZWdpc3RyYXIoai0+dmFsdWUubV9uYW1lLmRhdGEo
KSwgbmV3VGV4dENvZGVjV2luLCAwKTsKICAgICB9CiB9CiAKQEAgLTMwMSw3ICszMDEsNyBAQCB2
b2lkIFRleHRDb2RlY1dpbjo6ZW51bWVyYXRlU3VwcG9ydGVkRW5jb2RpbmdzKEVuY29kaW5nUmVj
ZWl2ZXImIHJlY2VpdmVyKQogICAgIGxhbmd1YWdlTWFuYWdlcigpOwogICAgIGZvciAoQ2hhcnNl
dFNldDo6aXRlcmF0b3IgaSA9IHN1cHBvcnRlZENoYXJzZXRzKCkuYmVnaW4oKTsgaSAhPSBzdXBw
b3J0ZWRDaGFyc2V0cygpLmVuZCgpOyArK2kpIHsKICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIENo
YXJzZXRJbmZvPjo6aXRlcmF0b3IgaiA9IGtub3duQ2hhcnNldHMoKS5maW5kKCppKTsKLSAgICAg
ICAgaWYgKGogIT0ga25vd25DaGFyc2V0cygpLmVuZCgpICYmICFyZWNlaXZlci5yZWNlaXZlKGot
PnNlY29uZC5tX25hbWUuZGF0YSgpLCBqLT5zZWNvbmQubV9mcmllbmRseU5hbWUuY2hhcmFjdGVy
c1dpdGhOdWxsVGVybWluYXRpb24oKSwgai0+c2Vjb25kLm1fY29kZVBhZ2UpKQorICAgICAgICBp
ZiAoaiAhPSBrbm93bkNoYXJzZXRzKCkuZW5kKCkgJiYgIXJlY2VpdmVyLnJlY2VpdmUoai0+dmFs
dWUubV9uYW1lLmRhdGEoKSwgai0+dmFsdWUubV9mcmllbmRseU5hbWUuY2hhcmFjdGVyc1dpdGhO
dWxsVGVybWluYXRpb24oKSwgai0+dmFsdWUubV9jb2RlUGFnZSkpCiAgICAgICAgICAgICBicmVh
azsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xp
cGJvYXJkVXRpbGl0aWVzV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlw
Ym9hcmRVdGlsaXRpZXNXaW4uY3BwCmluZGV4IDYxZTM2MjEuLjc1ZmY5ZGUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRVdGlsaXRpZXNXaW4uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRVdGlsaXRpZXNXaW4uY3Bw
CkBAIC03Niw3ICs3Niw3IEBAIHN0YXRpYyBib29sIGdldERhdGFNYXBJdGVtKGNvbnN0IERyYWdE
YXRhTWFwKiBkYXRhT2JqZWN0LCBGT1JNQVRFVEMqIGZvcm1hdCwgU3RyCiAgICAgRHJhZ0RhdGFN
YXA6OmNvbnN0X2l0ZXJhdG9yIGZvdW5kID0gZGF0YU9iamVjdC0+ZmluZChmb3JtYXQtPmNmRm9y
bWF0KTsKICAgICBpZiAoZm91bmQgPT0gZGF0YU9iamVjdC0+ZW5kKCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBpdGVtID0gZm91bmQtPnNlY29uZFswXTsKKyAgICBpdGVtID0gZm91bmQt
PnZhbHVlWzBdOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC04MjYsNyArODI2LDcgQEAgdm9p
ZCBnZXRDbGlwYm9hcmREYXRhKElEYXRhT2JqZWN0KiBkYXRhT2JqZWN0LCBGT1JNQVRFVEMqIGZv
cm1hdCwgVmVjdG9yPFN0cmluZz4KICAgICBDbGlwYm9hcmRGb3JtYXRNYXA6OmNvbnN0X2l0ZXJh
dG9yIGZvdW5kID0gZm9ybWF0TWFwLmZpbmQoZm9ybWF0LT5jZkZvcm1hdCk7CiAgICAgaWYgKGZv
dW5kID09IGZvcm1hdE1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGZvdW5kLT5zZWNv
bmQtPmdldFN0cmluZyhkYXRhT2JqZWN0LCBmb3VuZC0+c2Vjb25kLT5mb3JtYXQsIGRhdGFTdHJp
bmdzKTsKKyAgICBmb3VuZC0+dmFsdWUtPmdldFN0cmluZyhkYXRhT2JqZWN0LCBmb3VuZC0+dmFs
dWUtPmZvcm1hdCwgZGF0YVN0cmluZ3MpOwogfQogCiB2b2lkIHNldENsaXBib2FyZERhdGEoSURh
dGFPYmplY3QqIGRhdGFPYmplY3QsIFVJTlQgZm9ybWF0LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
ZGF0YVN0cmluZ3MpCkBAIC04MzUsNyArODM1LDcgQEAgdm9pZCBzZXRDbGlwYm9hcmREYXRhKElE
YXRhT2JqZWN0KiBkYXRhT2JqZWN0LCBVSU5UIGZvcm1hdCwgY29uc3QgVmVjdG9yPFN0cmluZz4K
ICAgICBDbGlwYm9hcmRGb3JtYXRNYXA6OmNvbnN0X2l0ZXJhdG9yIGZvdW5kID0gZm9ybWF0TWFw
LmZpbmQoZm9ybWF0KTsKICAgICBpZiAoZm91bmQgPT0gZm9ybWF0TWFwLmVuZCgpKQogICAgICAg
ICByZXR1cm47Ci0gICAgZm91bmQtPnNlY29uZC0+c2V0U3RyaW5nKGRhdGFPYmplY3QsIGZvdW5k
LT5zZWNvbmQtPmZvcm1hdCwgZGF0YVN0cmluZ3MpOworICAgIGZvdW5kLT52YWx1ZS0+c2V0U3Ry
aW5nKGRhdGFPYmplY3QsIGZvdW5kLT52YWx1ZS0+Zm9ybWF0LCBkYXRhU3RyaW5ncyk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3dpbi9GaWxlU3lzdGVtV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9G
aWxlU3lzdGVtV2luLmNwcAppbmRleCBlZTAyNTVlLi4wNzlmOGQ2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vd2luL0ZpbGVTeXN0ZW1XaW4uY3BwCkBAIC0yMzgsNyArMjM4LDcgQEAg
c3RhdGljIFN0cmluZyBjYWNoZWRTdG9yYWdlRGlyZWN0b3J5KERXT1JEIHBhdGhJZGVudGlmaWVy
KQogCiAgICAgSGFzaE1hcDxEV09SRCwgU3RyaW5nPjo6aXRlcmF0b3IgaXQgPSBkaXJlY3Rvcmll
cy5maW5kKHBhdGhJZGVudGlmaWVyKTsKICAgICBpZiAoaXQgIT0gZGlyZWN0b3JpZXMuZW5kKCkp
Ci0gICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwog
CiAgICAgU3RyaW5nIGRpcmVjdG9yeSA9IHN0b3JhZ2VEaXJlY3RvcnkocGF0aElkZW50aWZpZXIp
OwogICAgIGRpcmVjdG9yaWVzLmFkZChwYXRoSWRlbnRpZmllciwgZGlyZWN0b3J5KTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9SdW5Mb29wV2luLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9SdW5Mb29wV2luLmNwcAppbmRleCAxNjYzYjY2Li4xN2Q2
ODQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUnVuTG9vcFdpbi5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1J1bkxvb3BXaW4uY3BwCkBAIC0x
MjYsNyArMTI2LDcgQEAgdm9pZCBSdW5Mb29wOjpUaW1lckJhc2U6OnRpbWVyRmlyZWQoUnVuTG9v
cCogcnVuTG9vcCwgdWludDY0X3QgSUQpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBU
aW1lckJhc2UqIHRpbWVyID0gaXQtPnNlY29uZDsKKyAgICBUaW1lckJhc2UqIHRpbWVyID0gaXQt
PnZhbHVlOwogCiAgICAgaWYgKCF0aW1lci0+bV9pc1JlcGVhdGluZykgewogICAgICAgICBydW5M
b29wLT5tX2FjdGl2ZVRpbWVycy5yZW1vdmUoaXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vd2luL1dDRGF0YU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS93aW4vV0NEYXRhT2JqZWN0LmNwcAppbmRleCAwYzAzY2UwLi5kZmJkMDA1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vV0NEYXRhT2JqZWN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vV0NEYXRhT2JqZWN0LmNwcApAQCAtMTY5LDcgKzE2OSw3
IEBAIEhSRVNVTFQgV0NEYXRhT2JqZWN0OjpjcmVhdGVJbnN0YW5jZShXQ0RhdGFPYmplY3QqKiBy
ZXN1bHQsIGNvbnN0IERyYWdEYXRhTWFwJiBkCiAgICAgKnJlc3VsdCA9IG5ldyBXQ0RhdGFPYmpl
Y3Q7CiAKICAgICBmb3IgKERyYWdEYXRhTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGRhdGFNYXAu
YmVnaW4oKTsgaXQgIT0gZGF0YU1hcC5lbmQoKTsgKytpdCkKLSAgICAgICAgc2V0Q2xpcGJvYXJk
RGF0YSgqcmVzdWx0LCBpdC0+Zmlyc3QsIGl0LT5zZWNvbmQpOworICAgICAgICBzZXRDbGlwYm9h
cmREYXRhKCpyZXN1bHQsIGl0LT5rZXksIGl0LT52YWx1ZSk7CiAgICAgcmV0dXJuIFNfT0s7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbmNlL01JTUVUeXBlUmVn
aXN0cnlXaW5DRS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW5jZS9NSU1FVHlwZVJl
Z2lzdHJ5V2luQ0UuY3BwCmluZGV4IDhhMGQzZDIuLjg4ODg0NzEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3dpbmNlL01JTUVUeXBlUmVnaXN0cnlXaW5DRS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luY2UvTUlNRVR5cGVSZWdpc3RyeVdpbkNFLmNwcApA
QCAtMTAxLDcgKzEwMSw3IEBAIFN0cmluZyBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRQcmVmZXJyZWRF
eHRlbnNpb25Gb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIHR5cGUpCiAgICAgaW5pdE1JTUVUeXBl
RW50ZW5zaW9uTWFwKCk7CiAKICAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+OjppdGVy
YXRvciBpID0gbWltZXR5cGVNYXAuYmVnaW4oKTsgaSAhPSBtaW1ldHlwZU1hcC5lbmQoKTsgKytp
KSB7Ci0gICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShpLT5zZWNvbmQsIHR5cGUpKQorICAg
ICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoaS0+dmFsdWUsIHR5cGUpKQogICAgICAgICAgICAg
cmV0dXJuIGktPmZpcnN0OwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vd3gvQ29udGV4dE1lbnVXeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC9D
b250ZXh0TWVudVd4LmNwcAppbmRleCA0MTg5YWE5Li5kZjJlZTUyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS93eC9Db250ZXh0TWVudVd4LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS93eC9Db250ZXh0TWVudVd4LmNwcApAQCAtNjcsOCArNjcsOCBAQCB2b2lk
IENvbnRleHRNZW51OjphcHBlbmRJdGVtKENvbnRleHRNZW51SXRlbSYgaXRlbSkKIAogICAgIEl0
ZW1BY3Rpb25NYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHNfaXRlbUFjdGlvbnMuZW5kKCk7CiAg
ICAgZm9yIChJdGVtQWN0aW9uTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHNfaXRlbUFjdGlvbnMu
YmVnaW4oKTsgIGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnNlY29uZCA9PSBp
dGVtRGVzY3JpcHRpb24uYWN0aW9uKQotICAgICAgICAgICAgaWRXeCA9IGl0LT5maXJzdDsKKyAg
ICAgICAgaWYgKGl0LT52YWx1ZSA9PSBpdGVtRGVzY3JpcHRpb24uYWN0aW9uKQorICAgICAgICAg
ICAgaWRXeCA9IGl0LT5rZXk7CiAgICAgfQogCiAgICAgaWYgKGl0ZW1EZXNjcmlwdGlvbi5zdWJN
ZW51KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3BwCmluZGV4IDk1
MDhjNWIuLmZjY2IwMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2lu
RGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2Uu
Y3BwCkBAIC0xNjIsNyArMTYyLDcgQEAgYm9vbCBQbHVnaW5EYXRhYmFzZTo6cmVmcmVzaCgpCiAg
ICAgICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWFwX2l0ID0gKCpp
dCktPm1pbWVUb0Rlc2NyaXB0aW9ucygpLmJlZ2luKCk7CiAgICAgICAgIE1JTUVUb0Rlc2NyaXB0
aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWFwX2VuZCA9ICgqaXQpLT5taW1lVG9EZXNjcmlwdGlv
bnMoKS5lbmQoKTsKICAgICAgICAgZm9yICg7IG1hcF9pdCAhPSBtYXBfZW5kOyArK21hcF9pdCkK
LSAgICAgICAgICAgIG1fcmVnaXN0ZXJlZE1JTUVUeXBlcy5hZGQobWFwX2l0LT5maXJzdCk7Cisg
ICAgICAgICAgICBtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuYWRkKG1hcF9pdC0+a2V5KTsKICAgICB9
CiAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI0Myw5ICsyNDMsOSBAQCBTdHJpbmcgUGx1Z2luRGF0
YWJhc2U6Ok1JTUVUeXBlRm9yRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uKSBjb25z
dAogICAgICAgICBNSU1FVG9FeHRlbnNpb25zTWFwOjpjb25zdF9pdGVyYXRvciBtaW1lX2VuZCA9
ICgqaXQpLT5taW1lVG9FeHRlbnNpb25zKCkuZW5kKCk7CiAKICAgICAgICAgZm9yIChNSU1FVG9F
eHRlbnNpb25zTWFwOjpjb25zdF9pdGVyYXRvciBtaW1lX2l0ID0gKCppdCktPm1pbWVUb0V4dGVu
c2lvbnMoKS5iZWdpbigpOyBtaW1lX2l0ICE9IG1pbWVfZW5kOyArK21pbWVfaXQpIHsKLSAgICAg
ICAgICAgIG1pbWVUeXBlID0gbWltZV9pdC0+Zmlyc3Q7CisgICAgICAgICAgICBtaW1lVHlwZSA9
IG1pbWVfaXQtPmtleTsKICAgICAgICAgICAgIFBsdWdpblBhY2thZ2UqIHByZWZlcnJlZFBsdWdp
biA9IG1fcHJlZmVycmVkUGx1Z2lucy5nZXQobWltZVR5cGUpLmdldCgpOwotICAgICAgICAgICAg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIGV4dGVuc2lvbnMgPSBtaW1lX2l0LT5zZWNvbmQ7CisgICAg
ICAgICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZXh0ZW5zaW9ucyA9IG1pbWVfaXQtPnZhbHVl
OwogICAgICAgICAgICAgYm9vbCBmb3VuZE1hcHBpbmcgPSBmYWxzZTsKICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBleHRlbnNpb25zLnNpemUoKTsgaSsrKSB7CiAgICAgICAg
ICAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGV4dGVuc2lvbnNbaV0sIGV4dGVuc2lvbikp
IHsKQEAgLTMzNSw4ICszMzUsOCBAQCB2b2lkIFBsdWdpbkRhdGFiYXNlOjpyZW1vdmUoUGx1Z2lu
UGFja2FnZSogcGFja2FnZSkKICAgICBNSU1FVG9FeHRlbnNpb25zTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IHBhY2thZ2UtPm1pbWVUb0V4dGVuc2lvbnMoKS5iZWdpbigpOwogICAgIE1JTUVUb0V4
dGVuc2lvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHBhY2thZ2UtPm1pbWVUb0V4dGVuc2lv
bnMoKS5lbmQoKTsKICAgICBmb3IgKCA7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBQbHVn
aW5QYWNrYWdlQnlOYW1lTWFwOjppdGVyYXRvciBwYWNrYWdlSW5NYXAgPSBtX3ByZWZlcnJlZFBs
dWdpbnMuZmluZChpdC0+Zmlyc3QpOwotICAgICAgICBpZiAocGFja2FnZUluTWFwICE9IG1fcHJl
ZmVycmVkUGx1Z2lucy5lbmQoKSAmJiBwYWNrYWdlSW5NYXAtPnNlY29uZCA9PSBwYWNrYWdlKQor
ICAgICAgICBQbHVnaW5QYWNrYWdlQnlOYW1lTWFwOjppdGVyYXRvciBwYWNrYWdlSW5NYXAgPSBt
X3ByZWZlcnJlZFBsdWdpbnMuZmluZChpdC0+a2V5KTsKKyAgICAgICAgaWYgKHBhY2thZ2VJbk1h
cCAhPSBtX3ByZWZlcnJlZFBsdWdpbnMuZW5kKCkgJiYgcGFja2FnZUluTWFwLT52YWx1ZSA9PSBw
YWNrYWdlKQogICAgICAgICAgICAgbV9wcmVmZXJyZWRQbHVnaW5zLnJlbW92ZShwYWNrYWdlSW5N
YXApOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5N
YWluVGhyZWFkU2NoZWR1bGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luTWFp
blRocmVhZFNjaGVkdWxlci5jcHAKaW5kZXggNzUyODY3Ni4uMzlhZTc5NCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXIuY3BwCkBA
IC00OSw3ICs0OSw3IEBAIHZvaWQgUGx1Z2luTWFpblRocmVhZFNjaGVkdWxlcjo6c2NoZWR1bGVD
YWxsKE5QUCBucHAsIE1haW5UaHJlYWRGdW5jdGlvbiBmdW5jdGlvCiAgICAgaWYgKGl0ID09IG1f
Y2FsbFF1ZXVlTWFwLmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpdC0+c2Vjb25kLmFw
cGVuZChDYWxsKGZ1bmN0aW9uLCB1c2VyRGF0YSkpOworICAgIGl0LT52YWx1ZS5hcHBlbmQoQ2Fs
bChmdW5jdGlvbiwgdXNlckRhdGEpKTsKIAogICAgIGlmICghbV9jYWxsUGVuZGluZykgewogICAg
ICAgICBjYWxsT25NYWluVGhyZWFkKG1haW5UaHJlYWRDYWxsYmFjaywgdGhpcyk7CkBAIC05Nyw3
ICs5Nyw3IEBAIHZvaWQgUGx1Z2luTWFpblRocmVhZFNjaGVkdWxlcjo6ZGlzcGF0Y2hDYWxscygp
CiAgICAgICAgIC8vIEVtcHR5IGFsbCB0aGUgcXVldWVzIGluIHRoZSBvcmlnaW5hbCBtYXAKICAg
ICAgICAgQ2FsbFF1ZXVlTWFwOjppdGVyYXRvciBlbmQgPSBtX2NhbGxRdWV1ZU1hcC5lbmQoKTsK
ICAgICAgICAgZm9yIChDYWxsUXVldWVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9jYWxsUXVldWVNYXAu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgaXQtPnNlY29uZC5jbGVhcigp
OworICAgICAgICAgICAgaXQtPnZhbHVlLmNsZWFyKCk7CiAgICAgfQogCiAgICAgbV9jYWxsUGVu
ZGluZyA9IGZhbHNlOwpAQCAtMTA1LDcgKzEwNSw3IEBAIHZvaWQgUGx1Z2luTWFpblRocmVhZFNj
aGVkdWxlcjo6ZGlzcGF0Y2hDYWxscygpCiAKICAgICBDYWxsUXVldWVNYXA6Oml0ZXJhdG9yIGVu
ZCA9IGNvcHkuZW5kKCk7CiAgICAgZm9yIChDYWxsUXVldWVNYXA6Oml0ZXJhdG9yIGl0ID0gY29w
eS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGRpc3BhdGNoQ2FsbHNGb3JQbHVn
aW4oaXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsKKyAgICAgICAgZGlzcGF0Y2hDYWxsc0ZvclBsdWdp
bihpdC0+a2V5LCBpdC0+dmFsdWUpOwogfQogCiB2b2lkIFBsdWdpbk1haW5UaHJlYWRTY2hlZHVs
ZXI6Om1haW5UaHJlYWRDYWxsYmFjayh2b2lkKiBjb250ZXh0KQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5TdHJlYW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lu
cy9QbHVnaW5TdHJlYW0uY3BwCmluZGV4IDAwMjM4MGYuLmZkYjc4NjAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luU3RyZWFtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbHVnaW5zL1BsdWdpblN0cmVhbS5jcHAKQEAgLTE0Nyw5ICsxNDcsOSBAQCB2b2lkIFBsdWdp
blN0cmVhbTo6c3RhcnRTdHJlYW0oKQogCiAgICAgICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IG1fcmVzb3VyY2VSZXNwb25zZS5odHRwSGVhZGVyRmllbGRzKCkuZW5kKCk7
CiAgICAgICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Jlc291
cmNlUmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkcygpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5rZXkpOwogICAgICAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQoc2VwYXJhdG9yKTsKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KGl0LT5zZWNvbmQpOworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPnZhbHVl
KTsKICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwogICAgICAgICB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvYmxhY2tiZXJyeS9QbHVnaW5EYXRh
QmxhY2tCZXJyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2JsYWNrYmVycnkvUGx1Z2lu
RGF0YUJsYWNrQmVycnkuY3BwCmluZGV4IGQ5MjBkMWYuLjQ3NDY2MTYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsdWdpbnMvYmxhY2tiZXJyeS9QbHVnaW5EYXRhQmxhY2tCZXJyeS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ibGFja2JlcnJ5L1BsdWdpbkRhdGFCbGFja0Jl
cnJ5LmNwcApAQCAtNDEsOCArNDEsOCBAQCB2b2lkIFBsdWdpbkRhdGE6OmluaXRQbHVnaW5zKGNv
bnN0IFBhZ2UqKQogICAgICAgICBNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5lbmQoKTsKICAgICAgICAgZm9yIChNSU1FVG9EZXNj
cmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWltZVRvRGVzY3JpcHRpb25zLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgTWltZUNsYXNzSW5mbyBtaW1lOwot
ICAgICAgICAgICAgbWltZS50eXBlID0gaXQtPmZpcnN0OwotICAgICAgICAgICAgbWltZS5kZXNj
ID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIG1pbWUudHlwZSA9IGl0LT5rZXk7CisgICAgICAg
ICAgICBtaW1lLmRlc2MgPSBpdC0+dmFsdWU7CiAgICAgICAgICAgICBtaW1lLmV4dGVuc2lvbnMg
PSBwYWNrYWdlLT5taW1lVG9FeHRlbnNpb25zKCkuZ2V0KG1pbWUudHlwZSk7CiAgICAgICAgICAg
ICBpbmZvLm1pbWVzLmFwcGVuZChtaW1lKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGx1Z2lucy93eC9QbHVnaW5EYXRhV3guY3BwIGIvU291cmNlL1dlYkNvcmUvcGx1
Z2lucy93eC9QbHVnaW5EYXRhV3guY3BwCmluZGV4IDBlYjg5MGYuLjI3OTUyYzQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd3gvUGx1Z2luRGF0YVd4LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbHVnaW5zL3d4L1BsdWdpbkRhdGFXeC5jcHAKQEAgLTUxLDggKzUxLDggQEAg
dm9pZCBQbHVnaW5EYXRhOjppbml0UGx1Z2lucyhjb25zdCBQYWdlKikKICAgICAgICAgZm9yIChN
SU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWltZVRvRGVzY3JpcHRp
b25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgTWltZUNsYXNzSW5m
byBtaW1lOwogCi0gICAgICAgICAgICBtaW1lLnR5cGUgPSBpdC0+Zmlyc3Q7Ci0gICAgICAgICAg
ICBtaW1lLmRlc2MgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgbWltZS50eXBlID0gaXQtPmtl
eTsKKyAgICAgICAgICAgIG1pbWUuZGVzYyA9IGl0LT52YWx1ZTsKICAgICAgICAgICAgIG1pbWUu
ZXh0ZW5zaW9ucyA9IHBhY2thZ2UtPm1pbWVUb0V4dGVuc2lvbnMoKS5nZXQobWltZS50eXBlKTsK
IAogICAgICAgICAgICAgaW5mby5taW1lcy5hcHBlbmQobWltZSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvRmxvd1RocmVhZENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0Zsb3dUaHJlYWRDb250cm9sbGVyLmNwcAppbmRleCBkYzk0MzJjLi40
ODcxYWY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmxvd1RocmVhZENv
bnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GbG93VGhyZWFkQ29u
dHJvbGxlci5jcHAKQEAgLTEyMyw5ICsxMjMsOSBAQCB2b2lkIEZsb3dUaHJlYWRDb250cm9sbGVy
Ojp1bnJlZ2lzdGVyTmFtZWRGbG93Q29udGVudE5vZGUoTm9kZSogY29udGVudE5vZGUpCiAgICAg
QVNTRVJUKGNvbnRlbnROb2RlICYmIGNvbnRlbnROb2RlLT5pc0VsZW1lbnROb2RlKCkpOwogICAg
IEhhc2hNYXA8Tm9kZSosIFJlbmRlck5hbWVkRmxvd1RocmVhZCo+OjppdGVyYXRvciBpdCA9IG1f
bWFwTmFtZWRGbG93Q29udGVudE5vZGVzLmZpbmQoY29udGVudE5vZGUpOwogICAgIEFTU0VSVChp
dCAhPSBtX21hcE5hbWVkRmxvd0NvbnRlbnROb2Rlcy5lbmQoKSk7Ci0gICAgQVNTRVJUKGl0LT5z
ZWNvbmQpOwotICAgIEFTU0VSVChpdC0+c2Vjb25kLT5oYXNDb250ZW50Tm9kZShjb250ZW50Tm9k
ZSkpOwotICAgIGl0LT5zZWNvbmQtPnVucmVnaXN0ZXJOYW1lZEZsb3dDb250ZW50Tm9kZShjb250
ZW50Tm9kZSk7CisgICAgQVNTRVJUKGl0LT52YWx1ZSk7CisgICAgQVNTRVJUKGl0LT52YWx1ZS0+
aGFzQ29udGVudE5vZGUoY29udGVudE5vZGUpKTsKKyAgICBpdC0+dmFsdWUtPnVucmVnaXN0ZXJO
YW1lZEZsb3dDb250ZW50Tm9kZShjb250ZW50Tm9kZSk7CiAgICAgbV9tYXBOYW1lZEZsb3dDb250
ZW50Tm9kZXMucmVtb3ZlKGNvbnRlbnROb2RlKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0lubGluZUZsb3dCb3guY3BwCmluZGV4IGE5NmY2MTIuLjMzNjdkMWQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAKQEAgLTQ1OCw3ICs0NTgsNyBAQCBi
b29sIElubGluZUZsb3dCb3g6OnJlcXVpcmVzSWRlb2dyYXBoaWNCYXNlbGluZShjb25zdCBHbHlw
aE92ZXJmbG93QW5kRmFsbGJhY2tGbwogICAgICAgICAgICAgY29uc3QgVmVjdG9yPGNvbnN0IFNp
bXBsZUZvbnREYXRhKj4qIHVzZWRGb250cyA9IDA7CiAgICAgICAgICAgICBpZiAoY3Vyci0+aXNJ
bmxpbmVUZXh0Qm94KCkpIHsKICAgICAgICAgICAgICAgICBHbHlwaE92ZXJmbG93QW5kRmFsbGJh
Y2tGb250c01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSB0ZXh0Qm94RGF0YU1hcC5maW5kKHRvSW5s
aW5lVGV4dEJveChjdXJyKSk7Ci0gICAgICAgICAgICAgICAgdXNlZEZvbnRzID0gaXQgPT0gdGV4
dEJveERhdGFNYXAuZW5kKCkgPyAwIDogJml0LT5zZWNvbmQuZmlyc3Q7CisgICAgICAgICAgICAg
ICAgdXNlZEZvbnRzID0gaXQgPT0gdGV4dEJveERhdGFNYXAuZW5kKCkgPyAwIDogJml0LT52YWx1
ZS5maXJzdDsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKHVzZWRGb250cykgewpA
QCAtODIyLDcgKzgyMiw3IEBAIGlubGluZSB2b2lkIElubGluZUZsb3dCb3g6OmFkZFRleHRCb3hW
aXN1YWxPdmVyZmxvdyhJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94LCBHbHlwCiAgICAgUmVuZGVyU3R5
bGUqIHN0eWxlID0gdGV4dEJveC0+cmVuZGVyZXIoKS0+c3R5bGUoaXNGaXJzdExpbmVTdHlsZSgp
KTsKICAgICAKICAgICBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcDo6aXRlcmF0b3Ig
aXQgPSB0ZXh0Qm94RGF0YU1hcC5maW5kKHRleHRCb3gpOwotICAgIEdseXBoT3ZlcmZsb3cqIGds
eXBoT3ZlcmZsb3cgPSBpdCA9PSB0ZXh0Qm94RGF0YU1hcC5lbmQoKSA/IDAgOiAmaXQtPnNlY29u
ZC5zZWNvbmQ7CisgICAgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdyA9IGl0ID09IHRleHRC
b3hEYXRhTWFwLmVuZCgpID8gMCA6ICZpdC0+dmFsdWUuc2Vjb25kOwogICAgIGJvb2wgaXNGbGlw
cGVkTGluZSA9IHN0eWxlLT5pc0ZsaXBwZWRMaW5lc1dyaXRpbmdNb2RlKCk7CiAKICAgICBpbnQg
dG9wR2x5cGhFZGdlID0gZ2x5cGhPdmVyZmxvdyA/IChpc0ZsaXBwZWRMaW5lID8gZ2x5cGhPdmVy
Zmxvdy0+Ym90dG9tIDogZ2x5cGhPdmVyZmxvdy0+dG9wKSA6IDA7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmNwcAppbmRleCAzNjA4OGU5Li5jOWJmMWVmIDEwMDc1NQotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKQEAgLTQzNjksNyArNDM2OSw3IEBAIHZv
aWQgUmVuZGVyQmxvY2s6OmNsZWFyRmxvYXRzKCkKIAogICAgICAgICBSZW5kZXJlclRvRmxvYXRJ
bmZvTWFwOjppdGVyYXRvciBlbmQgPSBmbG9hdE1hcC5lbmQoKTsKICAgICAgICAgZm9yIChSZW5k
ZXJlclRvRmxvYXRJbmZvTWFwOjppdGVyYXRvciBpdCA9IGZsb2F0TWFwLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgewotICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0
ID0gKCppdCkuc2Vjb25kOworICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2Jq
ZWN0ID0gKCppdCkudmFsdWU7CiAgICAgICAgICAgICBpZiAoIWZsb2F0aW5nT2JqZWN0LT5pc0Rl
c2NlbmRhbnQoKSkgewogICAgICAgICAgICAgICAgIGNoYW5nZUxvZ2ljYWxUb3AgPSAwOwogICAg
ICAgICAgICAgICAgIGNoYW5nZUxvZ2ljYWxCb3R0b20gPSBtYXgoY2hhbmdlTG9naWNhbEJvdHRv
bSwgbG9naWNhbEJvdHRvbUZvckZsb2F0KGZsb2F0aW5nT2JqZWN0KSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCmluZGV4IDA4OGMx
NGMuLjJjZmYwY2MgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
bG9ja0xpbmVMYXlvdXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
bG9ja0xpbmVMYXlvdXQuY3BwCkBAIC02NzcsMTQgKzY3NywxNCBAQCBzdGF0aWMgaW5saW5lIHZv
aWQgc2V0TG9naWNhbFdpZHRoRm9yVGV4dFJ1bihSb290SW5saW5lQm94KiBsaW5lQm94LCBCaWRp
UnVuKiBydQogICAgIGlmICghZmFsbGJhY2tGb250cy5pc0VtcHR5KCkpIHsKICAgICAgICAgQVNT
RVJUKHJ1bi0+bV9ib3gtPmlzVGV4dCgpKTsKICAgICAgICAgR2x5cGhPdmVyZmxvd0FuZEZhbGxi
YWNrRm9udHNNYXA6Oml0ZXJhdG9yIGl0ID0gdGV4dEJveERhdGFNYXAuYWRkKHRvSW5saW5lVGV4
dEJveChydW4tPm1fYm94KSwgbWFrZV9wYWlyKFZlY3Rvcjxjb25zdCBTaW1wbGVGb250RGF0YSo+
KCksIEdseXBoT3ZlcmZsb3coKSkpLml0ZXJhdG9yOwotICAgICAgICBBU1NFUlQoaXQtPnNlY29u
ZC5maXJzdC5pc0VtcHR5KCkpOwotICAgICAgICBjb3B5VG9WZWN0b3IoZmFsbGJhY2tGb250cywg
aXQtPnNlY29uZC5maXJzdCk7CisgICAgICAgIEFTU0VSVChpdC0+dmFsdWUuZmlyc3QuaXNFbXB0
eSgpKTsKKyAgICAgICAgY29weVRvVmVjdG9yKGZhbGxiYWNrRm9udHMsIGl0LT52YWx1ZS5maXJz
dCk7CiAgICAgICAgIHJ1bi0+bV9ib3gtPnBhcmVudCgpLT5jbGVhckRlc2NlbmRhbnRzSGF2ZVNh
bWVMaW5lSGVpZ2h0QW5kQmFzZWxpbmUoKTsKICAgICB9CiAgICAgaWYgKChnbHlwaE92ZXJmbG93
LnRvcCB8fCBnbHlwaE92ZXJmbG93LmJvdHRvbSB8fCBnbHlwaE92ZXJmbG93LmxlZnQgfHwgZ2x5
cGhPdmVyZmxvdy5yaWdodCkpIHsKICAgICAgICAgQVNTRVJUKHJ1bi0+bV9ib3gtPmlzVGV4dCgp
KTsKICAgICAgICAgR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXA6Oml0ZXJhdG9yIGl0
ID0gdGV4dEJveERhdGFNYXAuYWRkKHRvSW5saW5lVGV4dEJveChydW4tPm1fYm94KSwgbWFrZV9w
YWlyKFZlY3Rvcjxjb25zdCBTaW1wbGVGb250RGF0YSo+KCksIEdseXBoT3ZlcmZsb3coKSkpLml0
ZXJhdG9yOwotICAgICAgICBpdC0+c2Vjb25kLnNlY29uZCA9IGdseXBoT3ZlcmZsb3c7CisgICAg
ICAgIGl0LT52YWx1ZS5zZWNvbmQgPSBnbHlwaE92ZXJmbG93OwogICAgICAgICBydW4tPm1fYm94
LT5jbGVhcktub3duVG9IYXZlTm9PdmVyZmxvdygpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCmluZGV4IDVlZWYzY2Mu
LjJmNWI1NTA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
TW9kZWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hN
b2RlbE9iamVjdC5jcHAKQEAgLTEzNyw3ICsxMzcsNyBAQCB2b2lkIEltYWdlUXVhbGl0eUNvbnRy
b2xsZXI6OmhpZ2hRdWFsaXR5UmVwYWludFRpbWVyRmlyZWQoVGltZXI8SW1hZ2VRdWFsaXR5Q29u
dAogICAgIGlmIChtX2FuaW1hdGVkUmVzaXplSXNBY3RpdmUpIHsKICAgICAgICAgbV9hbmltYXRl
ZFJlc2l6ZUlzQWN0aXZlID0gZmFsc2U7CiAgICAgICAgIGZvciAoT2JqZWN0TGF5ZXJTaXplTWFw
OjppdGVyYXRvciBpdCA9IG1fb2JqZWN0TGF5ZXJTaXplTWFwLmJlZ2luKCk7IGl0ICE9IG1fb2Jq
ZWN0TGF5ZXJTaXplTWFwLmVuZCgpOyArK2l0KQotICAgICAgICAgICAgaXQtPmZpcnN0LT5yZXBh
aW50KCk7CisgICAgICAgICAgICBpdC0+a2V5LT5yZXBhaW50KCk7CiAgICAgfQogfQogCkBAIC0x
NjIsMTQgKzE2MiwxNCBAQCBib29sIEltYWdlUXVhbGl0eUNvbnRyb2xsZXI6OnNob3VsZFBhaW50
QXRMb3dRdWFsaXR5KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgUgogCiAgICAgLy8gTG9vayBv
dXJzZWx2ZXMgdXAgaW4gdGhlIGhhc2h0YWJsZXMuCiAgICAgT2JqZWN0TGF5ZXJTaXplTWFwOjpp
dGVyYXRvciBpID0gbV9vYmplY3RMYXllclNpemVNYXAuZmluZChvYmplY3QpOwotICAgIExheWVy
U2l6ZU1hcCogaW5uZXJNYXAgPSBpICE9IG1fb2JqZWN0TGF5ZXJTaXplTWFwLmVuZCgpID8gJmkt
PnNlY29uZCA6IDA7CisgICAgTGF5ZXJTaXplTWFwKiBpbm5lck1hcCA9IGkgIT0gbV9vYmplY3RM
YXllclNpemVNYXAuZW5kKCkgPyAmaS0+dmFsdWUgOiAwOwogICAgIExheW91dFNpemUgb2xkU2l6
ZTsKICAgICBib29sIGlzRmlyc3RSZXNpemUgPSB0cnVlOwogICAgIGlmIChpbm5lck1hcCkgewog
ICAgICAgICBMYXllclNpemVNYXA6Oml0ZXJhdG9yIGogPSBpbm5lck1hcC0+ZmluZChsYXllcik7
CiAgICAgICAgIGlmIChqICE9IGlubmVyTWFwLT5lbmQoKSkgewogICAgICAgICAgICAgaXNGaXJz
dFJlc2l6ZSA9IGZhbHNlOwotICAgICAgICAgICAgb2xkU2l6ZSA9IGotPnNlY29uZDsKKyAgICAg
ICAgICAgIG9sZFNpemUgPSBqLT52YWx1ZTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwCmluZGV4IGRlNDVkODkuLjU0NTdhM2Eg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb3VudGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ291bnRlci5jcHAKQEAgLTU3MSwx
MSArNTcxLDExIEBAIHZvaWQgUmVuZGVyQ291bnRlcjo6ZGVzdHJveUNvdW50ZXJOb2RlcyhSZW5k
ZXJPYmplY3QqIG93bmVyKQogICAgIENvdW50ZXJNYXBzOjppdGVyYXRvciBtYXBzSXRlcmF0b3Ig
PSBtYXBzLmZpbmQob3duZXIpOwogICAgIGlmIChtYXBzSXRlcmF0b3IgPT0gbWFwcy5lbmQoKSkK
ICAgICAgICAgcmV0dXJuOwotICAgIENvdW50ZXJNYXAqIG1hcCA9IG1hcHNJdGVyYXRvci0+c2Vj
b25kLmdldCgpOworICAgIENvdW50ZXJNYXAqIG1hcCA9IG1hcHNJdGVyYXRvci0+dmFsdWUuZ2V0
KCk7CiAgICAgQ291bnRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKICAg
ICBmb3IgKENvdW50ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKLSAgICAgICAgQXRvbWljU3RyaW5nIGlkZW50aWZpZXIoaXQtPmZpcnN0
LmdldCgpKTsKLSAgICAgICAgZGVzdHJveUNvdW50ZXJOb2RlV2l0aG91dE1hcFJlbW92YWwoaWRl
bnRpZmllciwgaXQtPnNlY29uZC5nZXQoKSk7CisgICAgICAgIEF0b21pY1N0cmluZyBpZGVudGlm
aWVyKGl0LT5rZXkuZ2V0KCkpOworICAgICAgICBkZXN0cm95Q291bnRlck5vZGVXaXRob3V0TWFw
UmVtb3ZhbChpZGVudGlmaWVyLCBpdC0+dmFsdWUuZ2V0KCkpOwogICAgIH0KICAgICBtYXBzLnJl
bW92ZShtYXBzSXRlcmF0b3IpOwogICAgIG93bmVyLT5zZXRIYXNDb3VudGVyTm9kZU1hcChmYWxz
ZSk7CkBAIC01ODksNyArNTg5LDcgQEAgdm9pZCBSZW5kZXJDb3VudGVyOjpkZXN0cm95Q291bnRl
ck5vZGUoUmVuZGVyT2JqZWN0KiBvd25lciwgY29uc3QgQXRvbWljU3RyaW5nJgogICAgIENvdW50
ZXJNYXA6Oml0ZXJhdG9yIG1hcEl0ZXJhdG9yID0gbWFwLT5maW5kKGlkZW50aWZpZXIuaW1wbCgp
KTsKICAgICBpZiAobWFwSXRlcmF0b3IgPT0gbWFwLT5lbmQoKSkKICAgICAgICAgcmV0dXJuOwot
ICAgIGRlc3Ryb3lDb3VudGVyTm9kZVdpdGhvdXRNYXBSZW1vdmFsKGlkZW50aWZpZXIsIG1hcEl0
ZXJhdG9yLT5zZWNvbmQuZ2V0KCkpOworICAgIGRlc3Ryb3lDb3VudGVyTm9kZVdpdGhvdXRNYXBS
ZW1vdmFsKGlkZW50aWZpZXIsIG1hcEl0ZXJhdG9yLT52YWx1ZS5nZXQoKSk7CiAgICAgbWFwLT5y
ZW1vdmUobWFwSXRlcmF0b3IpOwogICAgIC8vIFdlIGRvIG5vdCBkZWxldGUgIm1hcCIgaGVyZSBl
dmVuIGlmIGVtcHR5IGJlY2F1c2Ugd2UgZXhwZWN0IHRvIHJldXNlCiAgICAgLy8gaXQgc29vbi4g
SW4gb3JkZXIgZm9yIGEgcmVuZGVyZXIgdG8gbG9zZSBhbGwgaXRzIGNvdW50ZXJzIHBlcm1hbmVu
dGx5LApAQCAtNjI5LDIyICs2MjksMjIgQEAgc3RhdGljIHZvaWQgdXBkYXRlQ291bnRlcnMoUmVu
ZGVyT2JqZWN0KiByZW5kZXJlcikKICAgICBDb3VudGVyRGlyZWN0aXZlTWFwOjpjb25zdF9pdGVy
YXRvciBlbmQgPSBkaXJlY3RpdmVNYXAtPmVuZCgpOwogICAgIGlmICghcmVuZGVyZXItPmhhc0Nv
dW50ZXJOb2RlTWFwKCkpIHsKICAgICAgICAgZm9yIChDb3VudGVyRGlyZWN0aXZlTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IGRpcmVjdGl2ZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQot
ICAgICAgICAgICAgbWFrZUNvdW50ZXJOb2RlKHJlbmRlcmVyLCBBdG9taWNTdHJpbmcoaXQtPmZp
cnN0LmdldCgpKSwgZmFsc2UpOworICAgICAgICAgICAgbWFrZUNvdW50ZXJOb2RlKHJlbmRlcmVy
LCBBdG9taWNTdHJpbmcoaXQtPmtleS5nZXQoKSksIGZhbHNlKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICBDb3VudGVyTWFwKiBjb3VudGVyTWFwID0gY291bnRlck1hcHMoKS5nZXQocmVu
ZGVyZXIpOwogICAgIEFTU0VSVChjb3VudGVyTWFwKTsKICAgICBmb3IgKENvdW50ZXJEaXJlY3Rp
dmVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZGlyZWN0aXZlTWFwLT5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKLSAgICAgICAgUmVmUHRyPENvdW50ZXJOb2RlPiBub2RlID0gY291bnRlck1h
cC0+Z2V0KGl0LT5maXJzdC5nZXQoKSk7CisgICAgICAgIFJlZlB0cjxDb3VudGVyTm9kZT4gbm9k
ZSA9IGNvdW50ZXJNYXAtPmdldChpdC0+a2V5LmdldCgpKTsKICAgICAgICAgaWYgKCFub2RlKSB7
Ci0gICAgICAgICAgICBtYWtlQ291bnRlck5vZGUocmVuZGVyZXIsIEF0b21pY1N0cmluZyhpdC0+
Zmlyc3QuZ2V0KCkpLCBmYWxzZSk7CisgICAgICAgICAgICBtYWtlQ291bnRlck5vZGUocmVuZGVy
ZXIsIEF0b21pY1N0cmluZyhpdC0+a2V5LmdldCgpKSwgZmFsc2UpOwogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIH0KICAgICAgICAgUmVmUHRyPENvdW50ZXJOb2RlPiBuZXdQYXJlbnQg
PSAwOwogICAgICAgICBSZWZQdHI8Q291bnRlck5vZGU+IG5ld1ByZXZpb3VzU2libGluZyA9IDA7
CiAgICAgICAgIAotICAgICAgICBmaW5kUGxhY2VGb3JDb3VudGVyKHJlbmRlcmVyLCBBdG9taWNT
dHJpbmcoaXQtPmZpcnN0LmdldCgpKSwgbm9kZS0+aGFzUmVzZXRUeXBlKCksIG5ld1BhcmVudCwg
bmV3UHJldmlvdXNTaWJsaW5nKTsKLSAgICAgICAgaWYgKG5vZGUgIT0gY291bnRlck1hcC0+Z2V0
KGl0LT5maXJzdC5nZXQoKSkpCisgICAgICAgIGZpbmRQbGFjZUZvckNvdW50ZXIocmVuZGVyZXIs
IEF0b21pY1N0cmluZyhpdC0+a2V5LmdldCgpKSwgbm9kZS0+aGFzUmVzZXRUeXBlKCksIG5ld1Bh
cmVudCwgbmV3UHJldmlvdXNTaWJsaW5nKTsKKyAgICAgICAgaWYgKG5vZGUgIT0gY291bnRlck1h
cC0+Z2V0KGl0LT5rZXkuZ2V0KCkpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIENv
dW50ZXJOb2RlKiBwYXJlbnQgPSBub2RlLT5wYXJlbnQoKTsKICAgICAgICAgaWYgKG5ld1BhcmVu
dCA9PSBwYXJlbnQgJiYgbmV3UHJldmlvdXNTaWJsaW5nID09IG5vZGUtPnByZXZpb3VzU2libGlu
ZygpKQpAQCAtNjUyLDcgKzY1Miw3IEBAIHN0YXRpYyB2b2lkIHVwZGF0ZUNvdW50ZXJzKFJlbmRl
ck9iamVjdCogcmVuZGVyZXIpCiAgICAgICAgIGlmIChwYXJlbnQpCiAgICAgICAgICAgICBwYXJl
bnQtPnJlbW92ZUNoaWxkKG5vZGUuZ2V0KCkpOwogICAgICAgICBpZiAobmV3UGFyZW50KQotICAg
ICAgICAgICAgbmV3UGFyZW50LT5pbnNlcnRBZnRlcihub2RlLmdldCgpLCBuZXdQcmV2aW91c1Np
YmxpbmcuZ2V0KCksIGl0LT5maXJzdC5nZXQoKSk7CisgICAgICAgICAgICBuZXdQYXJlbnQtPmlu
c2VydEFmdGVyKG5vZGUuZ2V0KCksIG5ld1ByZXZpb3VzU2libGluZy5nZXQoKSwgaXQtPmtleS5n
ZXQoKSk7CiAgICAgfQogfQogCkBAIC02ODQsMjEgKzY4NCwyMSBAQCB2b2lkIFJlbmRlckNvdW50
ZXI6OnJlbmRlcmVyU3R5bGVDaGFuZ2VkKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IFJl
bmRlclN0eQogICAgICAgICAgICAgQ291bnRlckRpcmVjdGl2ZU1hcDo6Y29uc3RfaXRlcmF0b3Ig
bmV3TWFwRW5kID0gbmV3Q291bnRlckRpcmVjdGl2ZXMtPmVuZCgpOwogICAgICAgICAgICAgQ291
bnRlckRpcmVjdGl2ZU1hcDo6Y29uc3RfaXRlcmF0b3Igb2xkTWFwRW5kID0gb2xkQ291bnRlckRp
cmVjdGl2ZXMtPmVuZCgpOwogICAgICAgICAgICAgZm9yIChDb3VudGVyRGlyZWN0aXZlTWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IG5ld0NvdW50ZXJEaXJlY3RpdmVzLT5iZWdpbigpOyBpdCAhPSBu
ZXdNYXBFbmQ7ICsraXQpIHsKLSAgICAgICAgICAgICAgICBDb3VudGVyRGlyZWN0aXZlTWFwOjpj
b25zdF9pdGVyYXRvciBvbGRNYXBJdCA9IG9sZENvdW50ZXJEaXJlY3RpdmVzLT5maW5kKGl0LT5m
aXJzdCk7CisgICAgICAgICAgICAgICAgQ291bnRlckRpcmVjdGl2ZU1hcDo6Y29uc3RfaXRlcmF0
b3Igb2xkTWFwSXQgPSBvbGRDb3VudGVyRGlyZWN0aXZlcy0+ZmluZChpdC0+a2V5KTsKICAgICAg
ICAgICAgICAgICBpZiAob2xkTWFwSXQgIT0gb2xkTWFwRW5kKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChvbGRNYXBJdC0+c2Vjb25kID09IGl0LT5zZWNvbmQpCisgICAgICAgICAgICAgICAg
ICAgIGlmIChvbGRNYXBJdC0+dmFsdWUgPT0gaXQtPnZhbHVlKQogICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIFJlbmRlckNvdW50ZXI6OmRlc3Ry
b3lDb3VudGVyTm9kZShyZW5kZXJlciwgaXQtPmZpcnN0LmdldCgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgUmVuZGVyQ291bnRlcjo6ZGVzdHJveUNvdW50ZXJOb2RlKHJlbmRlcmVyLCBpdC0+a2V5
LmdldCgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgLy8gV2UgbXVzdCBj
cmVhdGUgdGhpcyBub2RlIGhlcmUsIGJlY2F1c2UgdGhlIGNoYW5nZWQgbm9kZSBtYXkgYmUgYSBu
b2RlIHdpdGggbm8gZGlzcGxheSBzdWNoIGFzCiAgICAgICAgICAgICAgICAgLy8gYXMgdGhvc2Ug
Y3JlYXRlZCBieSB0aGUgaW5jcmVtZW50IG9yIHJlc2V0IGRpcmVjdGl2ZXMgYW5kIHRoZSByZS1s
YXlvdXQgdGhhdCB3aWxsIGhhcHBlbiB3aWxsCiAgICAgICAgICAgICAgICAgLy8gbm90IGNhdGNo
IHRoZSBjaGFuZ2UgaWYgdGhlIG5vZGUgaGFkIG5vIGNoaWxkcmVuLgotICAgICAgICAgICAgICAg
IG1ha2VDb3VudGVyTm9kZShyZW5kZXJlciwgaXQtPmZpcnN0LmdldCgpLCBmYWxzZSk7CisgICAg
ICAgICAgICAgICAgbWFrZUNvdW50ZXJOb2RlKHJlbmRlcmVyLCBpdC0+a2V5LmdldCgpLCBmYWxz
ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyBEZXN0cm95aW5nIG9sZCBjb3VudGVy
cyB0aGF0IGRvIG5vdCBleGlzdCBpbiB0aGUgbmV3IGNvdW50ZXJEaXJlY3RpdmUgbWFwLgogICAg
ICAgICAgICAgZm9yIChDb3VudGVyRGlyZWN0aXZlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG9s
ZENvdW50ZXJEaXJlY3RpdmVzLT5iZWdpbigpOyBpdCAhPW9sZE1hcEVuZDsgKytpdCkgewotICAg
ICAgICAgICAgICAgIGlmICghbmV3Q291bnRlckRpcmVjdGl2ZXMtPmNvbnRhaW5zKGl0LT5maXJz
dCkpCi0gICAgICAgICAgICAgICAgICAgIFJlbmRlckNvdW50ZXI6OmRlc3Ryb3lDb3VudGVyTm9k
ZShyZW5kZXJlciwgaXQtPmZpcnN0LmdldCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoIW5ld0Nv
dW50ZXJEaXJlY3RpdmVzLT5jb250YWlucyhpdC0+a2V5KSkKKyAgICAgICAgICAgICAgICAgICAg
UmVuZGVyQ291bnRlcjo6ZGVzdHJveUNvdW50ZXJOb2RlKHJlbmRlcmVyLCBpdC0+a2V5LmdldCgp
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChyZW5k
ZXJlci0+aGFzQ291bnRlck5vZGVNYXAoKSkKQEAgLTcxMCw3ICs3MTAsNyBAQCB2b2lkIFJlbmRl
ckNvdW50ZXI6OnJlbmRlcmVyU3R5bGVDaGFuZ2VkKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNv
bnN0IFJlbmRlclN0eQogICAgICAgICAgICAgLy8gV2UgbXVzdCBjcmVhdGUgdGhpcyBub2RlIGhl
cmUsIGJlY2F1c2UgdGhlIGFkZGVkIG5vZGUgbWF5IGJlIGEgbm9kZSB3aXRoIG5vIGRpc3BsYXkg
c3VjaCBhcwogICAgICAgICAgICAgLy8gYXMgdGhvc2UgY3JlYXRlZCBieSB0aGUgaW5jcmVtZW50
IG9yIHJlc2V0IGRpcmVjdGl2ZXMgYW5kIHRoZSByZS1sYXlvdXQgdGhhdCB3aWxsIGhhcHBlbiB3
aWxsCiAgICAgICAgICAgICAvLyBub3QgY2F0Y2ggdGhlIGNoYW5nZSBpZiB0aGUgbm9kZSBoYWQg
bm8gY2hpbGRyZW4uCi0gICAgICAgICAgICBtYWtlQ291bnRlck5vZGUocmVuZGVyZXIsIGl0LT5m
aXJzdC5nZXQoKSwgZmFsc2UpOworICAgICAgICAgICAgbWFrZUNvdW50ZXJOb2RlKHJlbmRlcmVy
LCBpdC0+a2V5LmdldCgpLCBmYWxzZSk7CiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAKaW5kZXggMWIwOWNiYi4uMzUz
YzEyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJl
YWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNw
cApAQCAtNjQyLDcgKzY0Miw3IEBAIHZvaWQgUmVuZGVyRmxvd1RocmVhZDo6c2V0UmVnaW9uUmFu
Z2VGb3JCb3goY29uc3QgUmVuZGVyQm94KiBib3gsIExheW91dFVuaXQgb2ZmCiAgICAgfQogCiAg
ICAgLy8gSWYgbm90aGluZyBjaGFuZ2VkLCBqdXN0IGJhaWwuCi0gICAgUmVuZGVyUmVnaW9uUmFu
Z2UmIHJhbmdlID0gaXQtPnNlY29uZDsKKyAgICBSZW5kZXJSZWdpb25SYW5nZSYgcmFuZ2UgPSBp
dC0+dmFsdWU7CiAgICAgaWYgKHJhbmdlLnN0YXJ0UmVnaW9uKCkgPT0gc3RhcnRSZWdpb24gJiYg
cmFuZ2UuZW5kUmVnaW9uKCkgPT0gZW5kUmVnaW9uKQogICAgICAgICByZXR1cm47CiAKQEAgLTY3
Miw3ICs2NzIsNyBAQCB2b2lkIFJlbmRlckZsb3dUaHJlYWQ6OmdldFJlZ2lvblJhbmdlRm9yQm94
KGNvbnN0IFJlbmRlckJveCogYm94LCBSZW5kZXJSZWdpb24qJgogICAgIGlmIChpdCA9PSBtX3Jl
Z2lvblJhbmdlTWFwLmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBjb25zdCBSZW5kZXJS
ZWdpb25SYW5nZSYgcmFuZ2UgPSBpdC0+c2Vjb25kOworICAgIGNvbnN0IFJlbmRlclJlZ2lvblJh
bmdlJiByYW5nZSA9IGl0LT52YWx1ZTsKICAgICBzdGFydFJlZ2lvbiA9IHJhbmdlLnN0YXJ0UmVn
aW9uKCk7CiAgICAgZW5kUmVnaW9uID0gcmFuZ2UuZW5kUmVnaW9uKCk7CiAgICAgQVNTRVJUKG1f
cmVnaW9uTGlzdC5jb250YWlucyhzdGFydFJlZ2lvbikgJiYgbV9yZWdpb25MaXN0LmNvbnRhaW5z
KGVuZFJlZ2lvbikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKaW5k
ZXggYjJjMWNmZS4uMGIzODEyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuY3BwCkBAIC0yODM2LDcgKzI4MzYsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludChHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QsCiAgICAg
cGFpbnRMYXllcih0aGlzLCBjb250ZXh0LCBkYW1hZ2VSZWN0LCBwYWludEJlaGF2aW9yLCBwYWlu
dGluZ1Jvb3QsIHJlZ2lvbiwgJm92ZXJsYXBUZXN0UmVxdWVzdHMsIHBhaW50RmxhZ3MpOwogICAg
IE92ZXJsYXBUZXN0UmVxdWVzdE1hcDo6aXRlcmF0b3IgZW5kID0gb3ZlcmxhcFRlc3RSZXF1ZXN0
cy5lbmQoKTsKICAgICBmb3IgKE92ZXJsYXBUZXN0UmVxdWVzdE1hcDo6aXRlcmF0b3IgaXQgPSBv
dmVybGFwVGVzdFJlcXVlc3RzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQt
PmZpcnN0LT5zZXRPdmVybGFwVGVzdFJlc3VsdChmYWxzZSk7CisgICAgICAgIGl0LT5rZXktPnNl
dE92ZXJsYXBUZXN0UmVzdWx0KGZhbHNlKTsKIH0KIAogdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRP
dmVybGF5U2Nyb2xsYmFycyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IExheW91dFJl
Y3QmIGRhbWFnZVJlY3QsIFBhaW50QmVoYXZpb3IgcGFpbnRCZWhhdmlvciwgUmVuZGVyT2JqZWN0
KiBwYWludGluZ1Jvb3QpCkBAIC0yOTA1LDExICsyOTA1LDExIEBAIHN0YXRpYyB2b2lkIHBlcmZv
cm1PdmVybGFwVGVzdHMoT3ZlcmxhcFRlc3RSZXF1ZXN0TWFwJiBvdmVybGFwVGVzdFJlcXVlc3Rz
LCBjb25zCiAgICAgT3ZlcmxhcFRlc3RSZXF1ZXN0TWFwOjppdGVyYXRvciBlbmQgPSBvdmVybGFw
VGVzdFJlcXVlc3RzLmVuZCgpOwogICAgIExheW91dFJlY3QgYm91bmRpbmdCb3ggPSBsYXllci0+
Ym91bmRpbmdCb3gocm9vdExheWVyKTsKICAgICBmb3IgKE92ZXJsYXBUZXN0UmVxdWVzdE1hcDo6
aXRlcmF0b3IgaXQgPSBvdmVybGFwVGVzdFJlcXVlc3RzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgewotICAgICAgICBpZiAoIWJvdW5kaW5nQm94LmludGVyc2VjdHMoaXQtPnNlY29uZCkpCisg
ICAgICAgIGlmICghYm91bmRpbmdCb3guaW50ZXJzZWN0cyhpdC0+dmFsdWUpKQogICAgICAgICAg
ICAgY29udGludWU7CiAKLSAgICAgICAgaXQtPmZpcnN0LT5zZXRPdmVybGFwVGVzdFJlc3VsdCh0
cnVlKTsKLSAgICAgICAgb3ZlcmxhcHBlZFJlcXVlc3RDbGllbnRzLmFwcGVuZChpdC0+Zmlyc3Qp
OworICAgICAgICBpdC0+a2V5LT5zZXRPdmVybGFwVGVzdFJlc3VsdCh0cnVlKTsKKyAgICAgICAg
b3ZlcmxhcHBlZFJlcXVlc3RDbGllbnRzLmFwcGVuZChpdC0+a2V5KTsKICAgICB9CiAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBvdmVybGFwcGVkUmVxdWVzdENsaWVudHMuc2l6ZSgpOyArK2kp
CiAgICAgICAgIG92ZXJsYXBUZXN0UmVxdWVzdHMucmVtb3ZlKG92ZXJsYXBwZWRSZXF1ZXN0Q2xp
ZW50c1tpXSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXJGaWx0ZXJJbmZvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZp
bHRlckluZm8uY3BwCmluZGV4IGFjYmYwN2QuLmNiNGM1ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlckluZm8uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlckluZm8uY3BwCkBAIC01Niw3ICs1Niw3
IEBAIFJlbmRlckxheWVyRmlsdGVySW5mbyogUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvOjpmaWx0ZXJJ
bmZvRm9yUmVuZGVyTGF5ZXIoY29uc3QgUmVuCiAgICAgaWYgKCFzX2ZpbHRlck1hcCkKICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvTWFwOjppdGVyYXRvciBpdGVy
ID0gc19maWx0ZXJNYXAtPmZpbmQobGF5ZXIpOwotICAgIHJldHVybiAoaXRlciAhPSBzX2ZpbHRl
ck1hcC0+ZW5kKCkpID8gaXRlci0+c2Vjb25kIDogMDsKKyAgICByZXR1cm4gKGl0ZXIgIT0gc19m
aWx0ZXJNYXAtPmVuZCgpKSA/IGl0ZXItPnZhbHVlIDogMDsKIH0KIAogUmVuZGVyTGF5ZXJGaWx0
ZXJJbmZvKiBSZW5kZXJMYXllckZpbHRlckluZm86OmNyZWF0ZUZpbHRlckluZm9Gb3JSZW5kZXJM
YXllcklmTmVlZGVkKFJlbmRlckxheWVyKiBsYXllcikKQEAgLTY3LDcgKzY3LDcgQEAgUmVuZGVy
TGF5ZXJGaWx0ZXJJbmZvKiBSZW5kZXJMYXllckZpbHRlckluZm86OmNyZWF0ZUZpbHRlckluZm9G
b3JSZW5kZXJMYXllcklmTmUKICAgICBSZW5kZXJMYXllckZpbHRlckluZm9NYXA6Oml0ZXJhdG9y
IGl0ZXIgPSBzX2ZpbHRlck1hcC0+ZmluZChsYXllcik7CiAgICAgaWYgKGl0ZXIgIT0gc19maWx0
ZXJNYXAtPmVuZCgpKSB7CiAgICAgICAgIEFTU0VSVChsYXllci0+aGFzRmlsdGVySW5mbygpKTsK
LSAgICAgICAgcmV0dXJuIGl0ZXItPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGl0ZXItPnZhbHVl
OwogICAgIH0KICAgICAKICAgICBSZW5kZXJMYXllckZpbHRlckluZm8qIGZpbHRlciA9IG5ldyBS
ZW5kZXJMYXllckZpbHRlckluZm8obGF5ZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd1RocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTmFtZWRGbG93VGhyZWFkLmNwcAppbmRleCAyMjdhZjdkLi43ZmIyNjIzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93VGhyZWFk
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93VGhyZWFk
LmNwcApAQCAtMTE2LDcgKzExNiw3IEBAIGJvb2wgUmVuZGVyTmFtZWRGbG93VGhyZWFkOjpkZXBl
bmRzT24oUmVuZGVyTmFtZWRGbG93VGhyZWFkKiBvdGhlclJlbmRlckZsb3dUaHJlCiAgICAgUmVu
ZGVyTmFtZWRGbG93VGhyZWFkQ291bnRlZFNldDo6Y29uc3RfaXRlcmF0b3IgaXRlcmF0b3IgPSBt
X2xheW91dEJlZm9yZVRocmVhZHNTZXQuYmVnaW4oKTsKICAgICBSZW5kZXJOYW1lZEZsb3dUaHJl
YWRDb3VudGVkU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2xheW91dEJlZm9yZVRocmVhZHNT
ZXQuZW5kKCk7CiAgICAgZm9yICg7IGl0ZXJhdG9yICE9IGVuZDsgKytpdGVyYXRvcikgewotICAg
ICAgICBjb25zdCBSZW5kZXJOYW1lZEZsb3dUaHJlYWQqIGJlZm9yZUZsb3dUaHJlYWQgPSAoKml0
ZXJhdG9yKS5maXJzdDsKKyAgICAgICAgY29uc3QgUmVuZGVyTmFtZWRGbG93VGhyZWFkKiBiZWZv
cmVGbG93VGhyZWFkID0gKCppdGVyYXRvcikua2V5OwogICAgICAgICBpZiAoYmVmb3JlRmxvd1Ro
cmVhZC0+ZGVwZW5kc09uKG90aGVyUmVuZGVyRmxvd1RocmVhZCkpCiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CkBAIC0yNDYsNyArMjQ2LDcgQEAgdm9pZCBSZW5kZXJOYW1lZEZsb3dU
aHJlYWQ6OnJlbW92ZURlcGVuZGVuY3lPbkZsb3dUaHJlYWQoUmVuZGVyTmFtZWRGbG93VGhyZWFk
Kgogdm9pZCBSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OnB1c2hEZXBlbmRlbmNpZXMoUmVuZGVyTmFt
ZWRGbG93VGhyZWFkTGlzdCYgbGlzdCkKIHsKICAgICBmb3IgKFJlbmRlck5hbWVkRmxvd1RocmVh
ZENvdW50ZWRTZXQ6Oml0ZXJhdG9yIGl0ZXIgPSBtX2xheW91dEJlZm9yZVRocmVhZHNTZXQuYmVn
aW4oKTsgaXRlciAhPSBtX2xheW91dEJlZm9yZVRocmVhZHNTZXQuZW5kKCk7ICsraXRlcikgewot
ICAgICAgICBSZW5kZXJOYW1lZEZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSAoKml0ZXIpLmZpcnN0
OworICAgICAgICBSZW5kZXJOYW1lZEZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSAoKml0ZXIpLmtl
eTsKICAgICAgICAgaWYgKGxpc3QuY29udGFpbnMoZmxvd1RocmVhZCkpCiAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgZmxvd1RocmVhZC0+cHVzaERlcGVuZGVuY2llcyhsaXN0KTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZWdpb24uY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5jcHAKaW5kZXggNTM2MjgzNi4uYmVj
ODgzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5jcHAKQEAgLTIz
MSw3ICsyMzEsNyBAQCBSZW5kZXJCb3hSZWdpb25JbmZvKiBSZW5kZXJSZWdpb246OnNldFJlbmRl
ckJveFJlZ2lvbkluZm8oY29uc3QgUmVuZGVyQm94KiBib3gsCiAgICAgaWYgKCFtX2lzVmFsaWQg
fHwgIW1fZmxvd1RocmVhZCkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBPd25QdHI8UmVuZGVy
Qm94UmVnaW9uSW5mbz4mIGJveEluZm8gPSBtX3JlbmRlckJveFJlZ2lvbkluZm8uYWRkKGJveCwg
bnVsbHB0cikuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBPd25QdHI8UmVuZGVyQm94UmVnaW9uSW5m
bz4mIGJveEluZm8gPSBtX3JlbmRlckJveFJlZ2lvbkluZm8uYWRkKGJveCwgbnVsbHB0cikuaXRl
cmF0b3ItPnZhbHVlOwogICAgIGlmIChib3hJbmZvKQogICAgICAgICAqYm94SW5mbyA9IFJlbmRl
ckJveFJlZ2lvbkluZm8obG9naWNhbExlZnRJbnNldCwgbG9naWNhbFJpZ2h0SW5zZXQsIGNvbnRh
aW5pbmdCbG9ja0NoYWluSXNJbnNldCk7CiAgICAgZWxzZQpAQCAtMjkxLDggKzI5MSw4IEBAIHZv
aWQgUmVuZGVyUmVnaW9uOjpzZXRSZWdpb25PYmplY3RzUmVnaW9uU3R5bGUoKQogICAgICAgICBS
ZWZQdHI8UmVuZGVyU3R5bGU+IG9iamVjdFN0eWxlSW5SZWdpb247CiAgICAgICAgIGJvb2wgb2Jq
ZWN0UmVnaW9uU3R5bGVDYWNoZWQgPSBmYWxzZTsKICAgICAgICAgaWYgKGl0ICE9IG1fcmVuZGVy
T2JqZWN0UmVnaW9uU3R5bGUuZW5kKCkpIHsKLSAgICAgICAgICAgIG9iamVjdFN0eWxlSW5SZWdp
b24gPSBpdC0+c2Vjb25kLnN0eWxlOwotICAgICAgICAgICAgQVNTRVJUKGl0LT5zZWNvbmQuY2Fj
aGVkKTsKKyAgICAgICAgICAgIG9iamVjdFN0eWxlSW5SZWdpb24gPSBpdC0+dmFsdWUuc3R5bGU7
CisgICAgICAgICAgICBBU1NFUlQoaXQtPnZhbHVlLmNhY2hlZCk7CiAgICAgICAgICAgICBvYmpl
Y3RSZWdpb25TdHlsZUNhY2hlZCA9IHRydWU7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAg
b2JqZWN0U3R5bGVJblJlZ2lvbiA9IGNvbXB1dGVTdHlsZUluUmVnaW9uKG9iamVjdCk7CkBAIC0z
MTAsMTIgKzMxMCwxMiBAQCB2b2lkIFJlbmRlclJlZ2lvbjo6cmVzdG9yZVJlZ2lvbk9iamVjdHNP
cmlnaW5hbFN0eWxlKCkKIAogICAgIFJlbmRlck9iamVjdFJlZ2lvblN0eWxlTWFwIHRlbXA7CiAg
ICAgZm9yIChSZW5kZXJPYmplY3RSZWdpb25TdHlsZU1hcDo6aXRlcmF0b3IgaXRlciA9IG1fcmVu
ZGVyT2JqZWN0UmVnaW9uU3R5bGUuYmVnaW4oKSwgZW5kID0gbV9yZW5kZXJPYmplY3RSZWdpb25T
dHlsZS5lbmQoKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewotICAgICAgICBSZW5kZXJPYmplY3Qq
IG9iamVjdCA9IGNvbnN0X2Nhc3Q8UmVuZGVyT2JqZWN0Kj4oaXRlci0+Zmlyc3QpOworICAgICAg
ICBSZW5kZXJPYmplY3QqIG9iamVjdCA9IGNvbnN0X2Nhc3Q8UmVuZGVyT2JqZWN0Kj4oaXRlci0+
a2V5KTsKICAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBvYmplY3RSZWdpb25TdHlsZSA9IG9i
amVjdC0+c3R5bGUoKTsKLSAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBvYmplY3RPcmlnaW5h
bFN0eWxlID0gaXRlci0+c2Vjb25kLnN0eWxlOworICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+
IG9iamVjdE9yaWdpbmFsU3R5bGUgPSBpdGVyLT52YWx1ZS5zdHlsZTsKICAgICAgICAgb2JqZWN0
LT5zZXRTdHlsZUludGVybmFsKG9iamVjdE9yaWdpbmFsU3R5bGUpOwogCi0gICAgICAgIGJvb2wg
c2hvdWxkQ2FjaGVSZWdpb25TdHlsZSA9IGl0ZXItPnNlY29uZC5jYWNoZWQ7CisgICAgICAgIGJv
b2wgc2hvdWxkQ2FjaGVSZWdpb25TdHlsZSA9IGl0ZXItPnZhbHVlLmNhY2hlZDsKICAgICAgICAg
aWYgKCFzaG91bGRDYWNoZVJlZ2lvblN0eWxlKSB7CiAgICAgICAgICAgICAvLyBDaGVjayB3aGV0
aGVyIHdlIHNob3VsZCBjYWNoZSB0aGUgY29tcHV0ZWQgc3R5bGUgaW4gcmVnaW9uLgogICAgICAg
ICAgICAgdW5zaWduZWQgY2hhbmdlZENvbnRleHRTZW5zaXRpdmVQcm9wZXJ0aWVzID0gQ29udGV4
dFNlbnNpdGl2ZVByb3BlcnR5Tm9uZTsKQEAgLTM1Nyw3ICszNTcsNyBAQCB2b2lkIFJlbmRlclJl
Z2lvbjo6Y29tcHV0ZUNoaWxkcmVuU3R5bGVJblJlZ2lvbihjb25zdCBSZW5kZXJPYmplY3QqIG9i
amVjdCkKICAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBjaGlsZFN0eWxlSW5SZWdpb247CiAg
ICAgICAgIGJvb2wgb2JqZWN0UmVnaW9uU3R5bGVDYWNoZWQgPSBmYWxzZTsKICAgICAgICAgaWYg
KGl0ICE9IG1fcmVuZGVyT2JqZWN0UmVnaW9uU3R5bGUuZW5kKCkpIHsKLSAgICAgICAgICAgIGNo
aWxkU3R5bGVJblJlZ2lvbiA9IGl0LT5zZWNvbmQuc3R5bGU7CisgICAgICAgICAgICBjaGlsZFN0
eWxlSW5SZWdpb24gPSBpdC0+dmFsdWUuc3R5bGU7CiAgICAgICAgICAgICBvYmplY3RSZWdpb25T
dHlsZUNhY2hlZCA9IHRydWU7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAoY2hp
bGQtPmlzQW5vbnltb3VzKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGFibGVTZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
YWJsZVNlY3Rpb24uY3BwCmluZGV4IDFmMTM3OWUuLjRmY2NjYWYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCkBAIC0xNDU2LDcgKzE0NTYs
NyBAQCBDb2xsYXBzZWRCb3JkZXJWYWx1ZSYgUmVuZGVyVGFibGVTZWN0aW9uOjpjYWNoZWRDb2xs
YXBzZWRCb3JkZXIoY29uc3QgUmVuZGVyVGFibAogICAgIEFTU0VSVCh0YWJsZSgpLT5jb2xsYXBz
ZUJvcmRlcnMoKSk7CiAgICAgSGFzaE1hcDxwYWlyPGNvbnN0IFJlbmRlclRhYmxlQ2VsbCosIGlu
dD4sIENvbGxhcHNlZEJvcmRlclZhbHVlPjo6aXRlcmF0b3IgaXQgPSBtX2NlbGxzQ29sbGFwc2Vk
Qm9yZGVycy5maW5kKG1ha2VfcGFpcihjZWxsLCBzaWRlKSk7CiAgICAgQVNTRVJUKGl0ICE9IG1f
Y2VsbHNDb2xsYXBzZWRCb3JkZXJzLmVuZCgpKTsKLSAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAg
ICByZXR1cm4gaXQtPnZhbHVlOwogfQogCiBSZW5kZXJUYWJsZVNlY3Rpb24qIFJlbmRlclRhYmxl
U2VjdGlvbjo6Y3JlYXRlQW5vbnltb3VzV2l0aFBhcmVudFJlbmRlcmVyKGNvbnN0IFJlbmRlck9i
amVjdCogcGFyZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1t
CmluZGV4IDFiOTIwMDYuLjQxYmFmMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWVNYWMubW0KQEAgLTM4MCw3ICszODAsNyBAQCBDb2xvciBSZW5kZXJUaGVtZU1hYzo6
c3lzdGVtQ29sb3IoaW50IGNzc1ZhbHVlSWQpIGNvbnN0CiAgICAgewogICAgICAgICBIYXNoTWFw
PGludCwgUkdCQTMyPjo6aXRlcmF0b3IgaXQgPSBtX3N5c3RlbUNvbG9yQ2FjaGUuZmluZChjc3NW
YWx1ZUlkKTsKICAgICAgICAgaWYgKGl0ICE9IG1fc3lzdGVtQ29sb3JDYWNoZS5lbmQoKSkKLSAg
ICAgICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgICAgICAgICAgcmV0dXJuIGl0LT52YWx1
ZTsKICAgICB9CiAKICAgICBDb2xvciBjb2xvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJWaWV3LmNwcAppbmRleCBlYmFlNjZlLi43MDA3MGFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclZpZXcuY3BwCkBAIC00NDcsNyArNDQ3LDcgQEAgSW50UmVjdCBSZW5kZXJWaWV3
OjpzZWxlY3Rpb25Cb3VuZHMoYm9vbCBjbGlwVG9WaXNpYmxlQ29udGVudCkgY29uc3QKICAgICAg
ICAgICAgIHNlbGVjdGVkT2JqZWN0cy5zZXQob3MsIGFkb3B0UHRyKG5ldyBSZW5kZXJTZWxlY3Rp
b25JbmZvKG9zLCBjbGlwVG9WaXNpYmxlQ29udGVudCkpKTsKICAgICAgICAgICAgIFJlbmRlckJs
b2NrKiBjYiA9IG9zLT5jb250YWluaW5nQmxvY2soKTsKICAgICAgICAgICAgIHdoaWxlIChjYiAm
JiAhY2ItPmlzUmVuZGVyVmlldygpKSB7Ci0gICAgICAgICAgICAgICAgT3duUHRyPFJlbmRlclNl
bGVjdGlvbkluZm8+JiBibG9ja0luZm8gPSBzZWxlY3RlZE9iamVjdHMuYWRkKGNiLCBudWxscHRy
KS5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICAgICAgICAgIE93blB0cjxSZW5kZXJTZWxlY3Rp
b25JbmZvPiYgYmxvY2tJbmZvID0gc2VsZWN0ZWRPYmplY3RzLmFkZChjYiwgbnVsbHB0cikuaXRl
cmF0b3ItPnZhbHVlOwogICAgICAgICAgICAgICAgIGlmIChibG9ja0luZm8pCiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGJsb2NrSW5mbyA9IGFkb3B0UHRyKG5l
dyBSZW5kZXJTZWxlY3Rpb25JbmZvKGNiLCBjbGlwVG9WaXNpYmxlQ29udGVudCkpOwpAQCAtNDYy
LDcgKzQ2Miw3IEBAIEludFJlY3QgUmVuZGVyVmlldzo6c2VsZWN0aW9uQm91bmRzKGJvb2wgY2xp
cFRvVmlzaWJsZUNvbnRlbnQpIGNvbnN0CiAgICAgTGF5b3V0UmVjdCBzZWxSZWN0OwogICAgIFNl
bGVjdGlvbk1hcDo6aXRlcmF0b3IgZW5kID0gc2VsZWN0ZWRPYmplY3RzLmVuZCgpOwogICAgIGZv
ciAoU2VsZWN0aW9uTWFwOjppdGVyYXRvciBpID0gc2VsZWN0ZWRPYmplY3RzLmJlZ2luKCk7IGkg
IT0gZW5kOyArK2kpIHsKLSAgICAgICAgUmVuZGVyU2VsZWN0aW9uSW5mbyogaW5mbyA9IGktPnNl
Y29uZC5nZXQoKTsKKyAgICAgICAgUmVuZGVyU2VsZWN0aW9uSW5mbyogaW5mbyA9IGktPnZhbHVl
LmdldCgpOwogICAgICAgICAvLyBSZW5kZXJTZWxlY3Rpb25JbmZvOjpyZWN0KCkgaXMgaW4gdGhl
IGNvb3JkaW5hdGVzIG9mIHRoZSByZXBhaW50Q29udGFpbmVyLCBzbyBtYXAgdG8gcGFnZSBjb29y
ZGluYXRlcy4KICAgICAgICAgTGF5b3V0UmVjdCBjdXJyUmVjdCA9IGluZm8tPnJlY3QoKTsKICAg
ICAgICAgaWYgKFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyID0gaW5mby0+
cmVwYWludENvbnRhaW5lcigpKSB7CkBAIC01MjcsNyArNTI3LDcgQEAgdm9pZCBSZW5kZXJWaWV3
OjpzZXRTZWxlY3Rpb24oUmVuZGVyT2JqZWN0KiBzdGFydCwgaW50IHN0YXJ0UG9zLCBSZW5kZXJP
YmplY3QqIGUKICAgICAgICAgICAgIGlmIChibG9ja1JlcGFpbnRNb2RlID09IFJlcGFpbnROZXdY
T1JPbGQpIHsKICAgICAgICAgICAgICAgICBSZW5kZXJCbG9jayogY2IgPSBvcy0+Y29udGFpbmlu
Z0Jsb2NrKCk7CiAgICAgICAgICAgICAgICAgd2hpbGUgKGNiICYmICFjYi0+aXNSZW5kZXJWaWV3
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgT3duUHRyPFJlbmRlckJsb2NrU2VsZWN0aW9uSW5m
bz4mIGJsb2NrSW5mbyA9IG9sZFNlbGVjdGVkQmxvY2tzLmFkZChjYiwgbnVsbHB0cikuaXRlcmF0
b3ItPnNlY29uZDsKKyAgICAgICAgICAgICAgICAgICAgT3duUHRyPFJlbmRlckJsb2NrU2VsZWN0
aW9uSW5mbz4mIGJsb2NrSW5mbyA9IG9sZFNlbGVjdGVkQmxvY2tzLmFkZChjYiwgbnVsbHB0ciku
aXRlcmF0b3ItPnZhbHVlOwogICAgICAgICAgICAgICAgICAgICBpZiAoYmxvY2tJbmZvKQogICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGJsb2NrSW5m
byA9IGFkb3B0UHRyKG5ldyBSZW5kZXJCbG9ja1NlbGVjdGlvbkluZm8oY2IpKTsKQEAgLTU0Miw3
ICs1NDIsNyBAQCB2b2lkIFJlbmRlclZpZXc6OnNldFNlbGVjdGlvbihSZW5kZXJPYmplY3QqIHN0
YXJ0LCBpbnQgc3RhcnRQb3MsIFJlbmRlck9iamVjdCogZQogICAgIC8vIE5vdyBjbGVhciB0aGUg
c2VsZWN0aW9uLgogICAgIFNlbGVjdGVkT2JqZWN0TWFwOjppdGVyYXRvciBvbGRPYmplY3RzRW5k
ID0gb2xkU2VsZWN0ZWRPYmplY3RzLmVuZCgpOwogICAgIGZvciAoU2VsZWN0ZWRPYmplY3RNYXA6
Oml0ZXJhdG9yIGkgPSBvbGRTZWxlY3RlZE9iamVjdHMuYmVnaW4oKTsgaSAhPSBvbGRPYmplY3Rz
RW5kOyArK2kpCi0gICAgICAgIGktPmZpcnN0LT5zZXRTZWxlY3Rpb25TdGF0ZUlmTmVlZGVkKFNl
bGVjdGlvbk5vbmUpOworICAgICAgICBpLT5rZXktPnNldFNlbGVjdGlvblN0YXRlSWZOZWVkZWQo
U2VsZWN0aW9uTm9uZSk7CiAKICAgICAvLyBzZXQgc2VsZWN0aW9uIHN0YXJ0IGFuZCBlbmQKICAg
ICBtX3NlbGVjdGlvblN0YXJ0ID0gc3RhcnQ7CkBAIC01ODAsNyArNTgwLDcgQEAgdm9pZCBSZW5k
ZXJWaWV3OjpzZXRTZWxlY3Rpb24oUmVuZGVyT2JqZWN0KiBzdGFydCwgaW50IHN0YXJ0UG9zLCBS
ZW5kZXJPYmplY3QqIGUKICAgICAgICAgICAgIG5ld1NlbGVjdGVkT2JqZWN0cy5zZXQobywgYWRv
cHRQdHIobmV3IFJlbmRlclNlbGVjdGlvbkluZm8obywgdHJ1ZSkpKTsKICAgICAgICAgICAgIFJl
bmRlckJsb2NrKiBjYiA9IG8tPmNvbnRhaW5pbmdCbG9jaygpOwogICAgICAgICAgICAgd2hpbGUg
KGNiICYmICFjYi0+aXNSZW5kZXJWaWV3KCkpIHsKLSAgICAgICAgICAgICAgICBPd25QdHI8UmVu
ZGVyQmxvY2tTZWxlY3Rpb25JbmZvPiYgYmxvY2tJbmZvID0gbmV3U2VsZWN0ZWRCbG9ja3MuYWRk
KGNiLCBudWxscHRyKS5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICAgICAgICAgIE93blB0cjxS
ZW5kZXJCbG9ja1NlbGVjdGlvbkluZm8+JiBibG9ja0luZm8gPSBuZXdTZWxlY3RlZEJsb2Nrcy5h
ZGQoY2IsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgICAgICAgICBpZiAoYmxv
Y2tJbmZvKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBibG9j
a0luZm8gPSBhZG9wdFB0cihuZXcgUmVuZGVyQmxvY2tTZWxlY3Rpb25JbmZvKGNiKSk7CkBAIC01
OTgsOSArNTk4LDkgQEAgdm9pZCBSZW5kZXJWaWV3OjpzZXRTZWxlY3Rpb24oUmVuZGVyT2JqZWN0
KiBzdGFydCwgaW50IHN0YXJ0UG9zLCBSZW5kZXJPYmplY3QqIGUKIAogICAgIC8vIEhhdmUgYW55
IG9mIHRoZSBvbGQgc2VsZWN0ZWQgb2JqZWN0cyBjaGFuZ2VkIGNvbXBhcmVkIHRvIHRoZSBuZXcg
c2VsZWN0aW9uPwogICAgIGZvciAoU2VsZWN0ZWRPYmplY3RNYXA6Oml0ZXJhdG9yIGkgPSBvbGRT
ZWxlY3RlZE9iamVjdHMuYmVnaW4oKTsgaSAhPSBvbGRPYmplY3RzRW5kOyArK2kpIHsKLSAgICAg
ICAgUmVuZGVyT2JqZWN0KiBvYmogPSBpLT5maXJzdDsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBv
YmogPSBpLT5rZXk7CiAgICAgICAgIFJlbmRlclNlbGVjdGlvbkluZm8qIG5ld0luZm8gPSBuZXdT
ZWxlY3RlZE9iamVjdHMuZ2V0KG9iaik7Ci0gICAgICAgIFJlbmRlclNlbGVjdGlvbkluZm8qIG9s
ZEluZm8gPSBpLT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIFJlbmRlclNlbGVjdGlvbkluZm8qIG9s
ZEluZm8gPSBpLT52YWx1ZS5nZXQoKTsKICAgICAgICAgaWYgKCFuZXdJbmZvIHx8IG9sZEluZm8t
PnJlY3QoKSAhPSBuZXdJbmZvLT5yZWN0KCkgfHwgb2xkSW5mby0+c3RhdGUoKSAhPSBuZXdJbmZv
LT5zdGF0ZSgpIHx8CiAgICAgICAgICAgICAobV9zZWxlY3Rpb25TdGFydCA9PSBvYmogJiYgb2xk
U3RhcnRQb3MgIT0gbV9zZWxlY3Rpb25TdGFydFBvcykgfHwKICAgICAgICAgICAgIChtX3NlbGVj
dGlvbkVuZCA9PSBvYmogJiYgb2xkRW5kUG9zICE9IG1fc2VsZWN0aW9uRW5kUG9zKSkgewpAQCAt
NjE1LDE0ICs2MTUsMTQgQEAgdm9pZCBSZW5kZXJWaWV3OjpzZXRTZWxlY3Rpb24oUmVuZGVyT2Jq
ZWN0KiBzdGFydCwgaW50IHN0YXJ0UG9zLCBSZW5kZXJPYmplY3QqIGUKICAgICAvLyBBbnkgbmV3
IG9iamVjdHMgdGhhdCByZW1haW4gd2VyZSBub3QgZm91bmQgaW4gdGhlIG9sZCBvYmplY3RzIGRp
Y3QsIGFuZCBzbyB0aGV5IG5lZWQgdG8gYmUgdXBkYXRlZC4KICAgICBTZWxlY3RlZE9iamVjdE1h
cDo6aXRlcmF0b3IgbmV3T2JqZWN0c0VuZCA9IG5ld1NlbGVjdGVkT2JqZWN0cy5lbmQoKTsKICAg
ICBmb3IgKFNlbGVjdGVkT2JqZWN0TWFwOjppdGVyYXRvciBpID0gbmV3U2VsZWN0ZWRPYmplY3Rz
LmJlZ2luKCk7IGkgIT0gbmV3T2JqZWN0c0VuZDsgKytpKQotICAgICAgICBpLT5zZWNvbmQtPnJl
cGFpbnQoKTsKKyAgICAgICAgaS0+dmFsdWUtPnJlcGFpbnQoKTsKIAogICAgIC8vIEhhdmUgYW55
IG9mIHRoZSBvbGQgYmxvY2tzIGNoYW5nZWQ/CiAgICAgU2VsZWN0ZWRCbG9ja01hcDo6aXRlcmF0
b3Igb2xkQmxvY2tzRW5kID0gb2xkU2VsZWN0ZWRCbG9ja3MuZW5kKCk7CiAgICAgZm9yIChTZWxl
Y3RlZEJsb2NrTWFwOjppdGVyYXRvciBpID0gb2xkU2VsZWN0ZWRCbG9ja3MuYmVnaW4oKTsgaSAh
PSBvbGRCbG9ja3NFbmQ7ICsraSkgewotICAgICAgICBSZW5kZXJCbG9jayogYmxvY2sgPSBpLT5m
aXJzdDsKKyAgICAgICAgUmVuZGVyQmxvY2sqIGJsb2NrID0gaS0+a2V5OwogICAgICAgICBSZW5k
ZXJCbG9ja1NlbGVjdGlvbkluZm8qIG5ld0luZm8gPSBuZXdTZWxlY3RlZEJsb2Nrcy5nZXQoYmxv
Y2spOwotICAgICAgICBSZW5kZXJCbG9ja1NlbGVjdGlvbkluZm8qIG9sZEluZm8gPSBpLT5zZWNv
bmQuZ2V0KCk7CisgICAgICAgIFJlbmRlckJsb2NrU2VsZWN0aW9uSW5mbyogb2xkSW5mbyA9IGkt
PnZhbHVlLmdldCgpOwogICAgICAgICBpZiAoIW5ld0luZm8gfHwgb2xkSW5mby0+cmVjdHMoKSAh
PSBuZXdJbmZvLT5yZWN0cygpIHx8IG9sZEluZm8tPnN0YXRlKCkgIT0gbmV3SW5mby0+c3RhdGUo
KSkgewogICAgICAgICAgICAgb2xkSW5mby0+cmVwYWludCgpOwogICAgICAgICAgICAgaWYgKG5l
d0luZm8pIHsKQEAgLTYzNSw3ICs2MzUsNyBAQCB2b2lkIFJlbmRlclZpZXc6OnNldFNlbGVjdGlv
bihSZW5kZXJPYmplY3QqIHN0YXJ0LCBpbnQgc3RhcnRQb3MsIFJlbmRlck9iamVjdCogZQogICAg
IC8vIEFueSBuZXcgYmxvY2tzIHRoYXQgcmVtYWluIHdlcmUgbm90IGZvdW5kIGluIHRoZSBvbGQg
YmxvY2tzIGRpY3QsIGFuZCBzbyB0aGV5IG5lZWQgdG8gYmUgdXBkYXRlZC4KICAgICBTZWxlY3Rl
ZEJsb2NrTWFwOjppdGVyYXRvciBuZXdCbG9ja3NFbmQgPSBuZXdTZWxlY3RlZEJsb2Nrcy5lbmQo
KTsKICAgICBmb3IgKFNlbGVjdGVkQmxvY2tNYXA6Oml0ZXJhdG9yIGkgPSBuZXdTZWxlY3RlZEJs
b2Nrcy5iZWdpbigpOyBpICE9IG5ld0Jsb2Nrc0VuZDsgKytpKQotICAgICAgICBpLT5zZWNvbmQt
PnJlcGFpbnQoKTsKKyAgICAgICAgaS0+dmFsdWUtPnJlcGFpbnQoKTsKIAogICAgIG1fZnJhbWVW
aWV3LT5lbmREZWZlcnJlZFJlcGFpbnRzKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJXaWRnZXQuY3BwCmluZGV4IDNhMzAyNjAuLjJiOTVlOTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCkBAIC03MCw5ICs3MCw5IEBAIHZvaWQgUmVuZGVy
V2lkZ2V0OjpyZXN1bWVXaWRnZXRIaWVyYXJjaHlVcGRhdGVzKCkKICAgICAgICAgd2lkZ2V0TmV3
UGFyZW50TWFwKCkuY2xlYXIoKTsKICAgICAgICAgV2lkZ2V0VG9QYXJlbnRNYXA6Oml0ZXJhdG9y
IGVuZCA9IG1hcC5lbmQoKTsKICAgICAgICAgZm9yIChXaWRnZXRUb1BhcmVudE1hcDo6aXRlcmF0
b3IgaXQgPSBtYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBXaWRn
ZXQqIGNoaWxkID0gaXQtPmZpcnN0LmdldCgpOworICAgICAgICAgICAgV2lkZ2V0KiBjaGlsZCA9
IGl0LT5rZXkuZ2V0KCk7CiAgICAgICAgICAgICBTY3JvbGxWaWV3KiBjdXJyZW50UGFyZW50ID0g
Y2hpbGQtPnBhcmVudCgpOwotICAgICAgICAgICAgRnJhbWVWaWV3KiBuZXdQYXJlbnQgPSBpdC0+
c2Vjb25kOworICAgICAgICAgICAgRnJhbWVWaWV3KiBuZXdQYXJlbnQgPSBpdC0+dmFsdWU7CiAg
ICAgICAgICAgICBpZiAobmV3UGFyZW50ICE9IGN1cnJlbnRQYXJlbnQpIHsKICAgICAgICAgICAg
ICAgICBpZiAoY3VycmVudFBhcmVudCkKICAgICAgICAgICAgICAgICAgICAgY3VycmVudFBhcmVu
dC0+cmVtb3ZlQ2hpbGQoY2hpbGQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1Jvb3RJbmxpbmVCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxp
bmVCb3guY3BwCmluZGV4IDNkMzBjYzAuLjdhMjY0MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUm9vdElubGluZUJveC5jcHAKQEAgLTc1MCw4ICs3NTAsOCBAQCB2b2lkIFJvb3RJbmxp
bmVCb3g6OmFzY2VudEFuZERlc2NlbnRGb3JCb3goSW5saW5lQm94KiBib3gsIEdseXBoT3ZlcmZs
b3dBbmRGYWxsYgogICAgIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cgPSAwOwogICAgIGlm
IChib3gtPmlzVGV4dCgpKSB7CiAgICAgICAgIEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRz
TWFwOjppdGVyYXRvciBpdCA9IHRleHRCb3hEYXRhTWFwLmZpbmQodG9JbmxpbmVUZXh0Qm94KGJv
eCkpOwotICAgICAgICB1c2VkRm9udHMgPSBpdCA9PSB0ZXh0Qm94RGF0YU1hcC5lbmQoKSA/IDAg
OiAmaXQtPnNlY29uZC5maXJzdDsKLSAgICAgICAgZ2x5cGhPdmVyZmxvdyA9IGl0ID09IHRleHRC
b3hEYXRhTWFwLmVuZCgpID8gMCA6ICZpdC0+c2Vjb25kLnNlY29uZDsKKyAgICAgICAgdXNlZEZv
bnRzID0gaXQgPT0gdGV4dEJveERhdGFNYXAuZW5kKCkgPyAwIDogJml0LT52YWx1ZS5maXJzdDsK
KyAgICAgICAgZ2x5cGhPdmVyZmxvdyA9IGl0ID09IHRleHRCb3hEYXRhTWFwLmVuZCgpID8gMCA6
ICZpdC0+dmFsdWUuc2Vjb25kOwogICAgIH0KICAgICAgICAgCiAgICAgYm9vbCBpbmNsdWRlTGVh
ZGluZyA9IGluY2x1ZGVMZWFkaW5nRm9yQm94KGJveCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvVmVydGljYWxQb3NpdGlvbkNhY2hlLmggYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvVmVydGljYWxQb3NpdGlvbkNhY2hlLmgKaW5kZXggYmIzOTg3Ny4uYjdjZDdlMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1ZlcnRpY2FsUG9zaXRpb25DYWNo
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9WZXJ0aWNhbFBvc2l0aW9uQ2FjaGUu
aApAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNvbnN0IEhhc2hNYXA8UmVuZGVy
T2JqZWN0KiwgaW50Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXBUb0NoZWNrLmZpbmQocmVuZGVy
ZXIpOwogICAgICAgICBpZiAoaXQgPT0gbWFwVG9DaGVjay5lbmQoKSkKICAgICAgICAgICAgIHJl
dHVybiBQb3NpdGlvblVuZGVmaW5lZDsKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAg
ICAgIHJldHVybiBpdC0+dmFsdWU7CiAgICAgfQogICAgIAogICAgIHZvaWQgc2V0KFJlbmRlck9i
amVjdCogcmVuZGVyZXIsIEZvbnRCYXNlbGluZSBiYXNlbGluZVR5cGUsIGludCBwb3NpdGlvbikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5l
VGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRl
eHQuY3BwCmluZGV4IDQ1NGY3YWE2Li4yMzcxZDFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAKQEAgLTE1OCw3ICsxNTgs
NyBAQCBib29sIFJlbmRlclNWR0lubGluZVRleHQ6OmNoYXJhY3RlclN0YXJ0c05ld1RleHRDaHVu
ayhpbnQgcG9zaXRpb24pIGNvbnN0CiAgICAgaWYgKGl0ID09IG1fbGF5b3V0QXR0cmlidXRlcy5j
aGFyYWN0ZXJEYXRhTWFwKCkuZW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJl
dHVybiBpdC0+c2Vjb25kLnggIT0gU1ZHVGV4dExheW91dEF0dHJpYnV0ZXM6OmVtcHR5VmFsdWUo
KSB8fCBpdC0+c2Vjb25kLnkgIT0gU1ZHVGV4dExheW91dEF0dHJpYnV0ZXM6OmVtcHR5VmFsdWUo
KTsKKyAgICByZXR1cm4gaXQtPnZhbHVlLnggIT0gU1ZHVGV4dExheW91dEF0dHJpYnV0ZXM6OmVt
cHR5VmFsdWUoKSB8fCBpdC0+dmFsdWUueSAhPSBTVkdUZXh0TGF5b3V0QXR0cmlidXRlczo6ZW1w
dHlWYWx1ZSgpOwogfQogCiBWaXNpYmxlUG9zaXRpb24gUmVuZGVyU1ZHSW5saW5lVGV4dDo6cG9z
aXRpb25Gb3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCmlu
ZGV4IDBmOTE2MTAuLjlmZjk0NjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCkBAIC0zNDAsNyArMzQwLDcg
QEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdl
ZChSZW5kZXJPYmplY3QqIG9iamVjdCwgY28KICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFy
ZEF0dHJpYnV0ZXMqIHByaW1pdHZlID0gc3RhdGljX2Nhc3Q8U1ZHRmlsdGVyUHJpbWl0aXZlU3Rh
bmRhcmRBdHRyaWJ1dGVzKj4ob2JqZWN0LT5ub2RlKCkpOwogCiAgICAgZm9yICg7IGl0ICE9IGVu
ZDsgKytpdCkgewotICAgICAgICBGaWx0ZXJEYXRhKiBmaWx0ZXJEYXRhID0gaXQtPnNlY29uZDsK
KyAgICAgICAgRmlsdGVyRGF0YSogZmlsdGVyRGF0YSA9IGl0LT52YWx1ZTsKICAgICAgICAgaWYg
KCFmaWx0ZXJEYXRhLT5idWlsZGVkKQogICAgICAgICAgICAgY29udGludWU7CiAKQEAgLTM1NSw3
ICszNTUsNyBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwcmltaXRpdmVBdHRyaWJ1
dGVDaGFuZ2VkKFJlbmRlck9iamVjdCogb2JqZWN0LCBjbwogICAgICAgICBidWlsZGVyLT5jbGVh
clJlc3VsdHNSZWN1cnNpdmUoZWZmZWN0KTsKIAogICAgICAgICAvLyBSZXBhaW50IHRoZSBpbWFn
ZSBvbiB0aGUgc2NyZWVuLgotICAgICAgICBtYXJrQ2xpZW50Rm9ySW52YWxpZGF0aW9uKGl0LT5m
aXJzdCwgUmVwYWludEludmFsaWRhdGlvbik7CisgICAgICAgIG1hcmtDbGllbnRGb3JJbnZhbGlk
YXRpb24oaXQtPmtleSwgUmVwYWludEludmFsaWRhdGlvbik7CiAgICAgfQogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGll
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdy
YWRpZW50LmNwcAppbmRleCA1OGUwMDc5Li4zMGNlMWI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAK
QEAgLTE0MCw3ICsxNDAsNyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQ6OmFwcGx5
UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiBvYmplY3QsIFJlbmRlclN0eWxlKgogICAgIGlmIChncmFk
aWVudFVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5H
Qk9YICYmIG9iamVjdEJvdW5kaW5nQm94LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgT3duUHRyPEdyYWRpZW50RGF0YT4mIGdyYWRpZW50RGF0YSA9IG1fZ3JhZGllbnRN
YXAuYWRkKG9iamVjdCwgbnVsbHB0cikuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBPd25QdHI8R3Jh
ZGllbnREYXRhPiYgZ3JhZGllbnREYXRhID0gbV9ncmFkaWVudE1hcC5hZGQob2JqZWN0LCBudWxs
cHRyKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCFncmFkaWVudERhdGEpCiAgICAgICAgIGdy
YWRpZW50RGF0YSA9IGFkb3B0UHRyKG5ldyBHcmFkaWVudERhdGEpOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5j
cHAKaW5kZXggYjRhZjk5OS4uM2ExODgyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcApAQCAtODQsNyAr
ODQsNyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlUGF0dGVybjo6YXBwbHlSZXNvdXJjZShSZW5k
ZXJPYmplY3QqIG9iamVjdCwgUmVuZGVyU3R5bGUqCiAgICAgaWYgKG1fYXR0cmlidXRlcy5wYXR0
ZXJuVW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdC
T1ggJiYgb2JqZWN0Qm91bmRpbmdCb3guaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBPd25QdHI8UGF0dGVybkRhdGE+JiBwYXR0ZXJuRGF0YSA9IG1fcGF0dGVybk1hcC5h
ZGQob2JqZWN0LCBudWxscHRyKS5pdGVyYXRvci0+c2Vjb25kOworICAgIE93blB0cjxQYXR0ZXJu
RGF0YT4mIHBhdHRlcm5EYXRhID0gbV9wYXR0ZXJuTWFwLmFkZChvYmplY3QsIG51bGxwdHIpLml0
ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoIXBhdHRlcm5EYXRhKQogICAgICAgICBwYXR0ZXJuRGF0
YSA9IGFkb3B0UHRyKG5ldyBQYXR0ZXJuRGF0YSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzQ2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXNDYWNoZS5jcHAKaW5kZXggMjk3YzA3Yi4uOGI0OGNm
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXND
YWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXND
YWNoZS5jcHAKQEAgLTE5OCwxMSArMTk4LDExIEBAIHZvaWQgU1ZHUmVzb3VyY2VzQ2FjaGU6OnJl
c291cmNlRGVzdHJveWVkKFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKiByZXNvdXJjZSkKIAog
ICAgIEhhc2hNYXA8Y29uc3QgUmVuZGVyT2JqZWN0KiwgU1ZHUmVzb3VyY2VzKj46Oml0ZXJhdG9y
IGVuZCA9IGNhY2hlLT5tX2NhY2hlLmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDxjb25zdCBSZW5k
ZXJPYmplY3QqLCBTVkdSZXNvdXJjZXMqPjo6aXRlcmF0b3IgaXQgPSBjYWNoZS0+bV9jYWNoZS5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaXQtPnNlY29uZC0+cmVzb3VyY2VE
ZXN0cm95ZWQocmVzb3VyY2UpOworICAgICAgICBpdC0+dmFsdWUtPnJlc291cmNlRGVzdHJveWVk
KHJlc291cmNlKTsKIAogICAgICAgICAvLyBNYXJrIHVzZXJzIG9mIGRlc3Ryb3llZCByZXNvdXJj
ZXMgYXMgcGVuZGluZyByZXNvbHV0aW9uIGJhc2VkIG9uIHRoZSBpZCBvZiB0aGUgb2xkIHJlc291
cmNlLgogICAgICAgICBFbGVtZW50KiByZXNvdXJjZUVsZW1lbnQgPSB0b0VsZW1lbnQocmVzb3Vy
Y2UtPm5vZGUoKSk7Ci0gICAgICAgIFNWR1N0eWxlZEVsZW1lbnQqIGNsaWVudEVsZW1lbnQgPSB0
b1NWR1N0eWxlZEVsZW1lbnQoaXQtPmZpcnN0LT5ub2RlKCkpOworICAgICAgICBTVkdTdHlsZWRF
bGVtZW50KiBjbGllbnRFbGVtZW50ID0gdG9TVkdTdHlsZWRFbGVtZW50KGl0LT5rZXktPm5vZGUo
KSk7CiAgICAgICAgIFNWR0RvY3VtZW50RXh0ZW5zaW9ucyogZXh0ZW5zaW9ucyA9IGNsaWVudEVs
ZW1lbnQtPmRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKTsKIAogICAgICAgICBleHRl
bnNpb25zLT5hZGRQZW5kaW5nUmVzb3VyY2UocmVzb3VyY2VFbGVtZW50LT5mYXN0R2V0QXR0cmli
dXRlKEhUTUxOYW1lczo6aWRBdHRyKSwgY2xpZW50RWxlbWVudCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jvb3RJbmxpbmVCb3guY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSb290SW5saW5lQm94LmNwcAppbmRleCAzNGU5M2EwLi41
NDZmZWMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jvb3RJ
bmxpbmVCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUm9vdElu
bGluZUJveC5jcHAKQEAgLTIyNiwxNyArMjI2LDE3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzd2Fw
SXRlbXNJbkxheW91dEF0dHJpYnV0ZXMoU1ZHVGV4dExheW91dEF0dHJpYnV0ZXMqIGZpcnN0QXR0
CiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChmaXJzdFByZXNlbnQgJiYgbGFzdFByZXNlbnQp
IHsKLSAgICAgICAgc3RkOjpzd2FwKGl0Rmlyc3QtPnNlY29uZCwgaXRMYXN0LT5zZWNvbmQpOwor
ICAgICAgICBzdGQ6OnN3YXAoaXRGaXJzdC0+dmFsdWUsIGl0TGFzdC0+dmFsdWUpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKGZpcnN0UHJlc2VudCAmJiAhbGFzdFByZXNlbnQp
IHsKLSAgICAgICAgbGFzdEF0dHJpYnV0ZXMtPmNoYXJhY3RlckRhdGFNYXAoKS5zZXQobGFzdFBv
c2l0aW9uICsgMSwgaXRGaXJzdC0+c2Vjb25kKTsKKyAgICAgICAgbGFzdEF0dHJpYnV0ZXMtPmNo
YXJhY3RlckRhdGFNYXAoKS5zZXQobGFzdFBvc2l0aW9uICsgMSwgaXRGaXJzdC0+dmFsdWUpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgLy8gIWZpcnN0UHJlc2VudCAmJiBsYXN0UHJl
c2VudAotICAgIGZpcnN0QXR0cmlidXRlcy0+Y2hhcmFjdGVyRGF0YU1hcCgpLnNldChmaXJzdFBv
c2l0aW9uICsgMSwgaXRMYXN0LT5zZWNvbmQpOworICAgIGZpcnN0QXR0cmlidXRlcy0+Y2hhcmFj
dGVyRGF0YU1hcCgpLnNldChmaXJzdFBvc2l0aW9uICsgMSwgaXRMYXN0LT52YWx1ZSk7CiB9CiAK
IHN0YXRpYyBpbmxpbmUgdm9pZCBmaW5kRmlyc3RBbmRMYXN0QXR0cmlidXRlc0luVmVjdG9yKFZl
Y3RvcjxTVkdUZXh0TGF5b3V0QXR0cmlidXRlcyo+JiBhdHRyaWJ1dGVzLCBSZW5kZXJTVkdJbmxp
bmVUZXh0KiBmaXJzdENvbnRleHQsIFJlbmRlclNWR0lubGluZVRleHQqIGxhc3RDb250ZXh0LApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0
cmlidXRlcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRB
dHRyaWJ1dGVzLmNwcAppbmRleCBhOTI1OTZjLi42N2ZhMGZhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1dGVzLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1dGVzLmNwcApA
QCAtNjIsOCArNjIsOCBAQCB2b2lkIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzOjpkdW1wKCkgY29u
c3QKICAgICBmcHJpbnRmKHN0ZGVyciwgImNvbnRleHQ6ICVwXG4iLCBtX2NvbnRleHQpOwogICAg
IGNvbnN0IFNWR0NoYXJhY3RlckRhdGFNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fY2hhcmFj
dGVyRGF0YU1hcC5lbmQoKTsKICAgICBmb3IgKFNWR0NoYXJhY3RlckRhdGFNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbV9jaGFyYWN0ZXJEYXRhTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewotICAgICAgICBjb25zdCBTVkdDaGFyYWN0ZXJEYXRhJiBkYXRhID0gaXQtPnNlY29uZDsKLSAg
ICAgICAgZnByaW50ZihzdGRlcnIsICIgLS0tPiBwb3M9JWksIGRhdGE9eyIsIGl0LT5maXJzdCk7
CisgICAgICAgIGNvbnN0IFNWR0NoYXJhY3RlckRhdGEmIGRhdGEgPSBpdC0+dmFsdWU7CisgICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiIC0tLT4gcG9zPSVpLCBkYXRhPXsiLCBpdC0+a2V5KTsKICAg
ICAgICAgZHVtcFNWR0NoYXJhY3RlckRhdGFNYXBWYWx1ZSgieCIsIGRhdGEueCk7CiAgICAgICAg
IGR1bXBTVkdDaGFyYWN0ZXJEYXRhTWFwVmFsdWUoInkiLCBkYXRhLnkpOwogICAgICAgICBkdW1w
U1ZHQ2hhcmFjdGVyRGF0YU1hcFZhbHVlKCJkeCIsIGRhdGEuZHgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRl
c0J1aWxkZXIuY3BwCmluZGV4IGJlMmExMmYuLmI5NjlhNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1dGVz
QnVpbGRlci5jcHAKQEAgLTE0OSw3ICsxNDksNyBAQCB2b2lkIFNWR1RleHRMYXlvdXRBdHRyaWJ1
dGVzQnVpbGRlcjo6YnVpbGRDaGFyYWN0ZXJEYXRhTWFwKFJlbmRlclNWR1RleHQqIHRleHRSbwog
ICAgICAgICBkYXRhLnkgPSAwOwogICAgICAgICBtX2NoYXJhY3RlckRhdGFNYXAuc2V0KDEsIGRh
dGEpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIFNWR0NoYXJhY3RlckRhdGEmIGRhdGEgPSBpdC0+
c2Vjb25kOworICAgICAgICBTVkdDaGFyYWN0ZXJEYXRhJiBkYXRhID0gaXQtPnZhbHVlOwogICAg
ICAgICBpZiAoZGF0YS54ID09IFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzOjplbXB0eVZhbHVlKCkp
CiAgICAgICAgICAgICBkYXRhLnggPSAwOwogICAgICAgICBpZiAoZGF0YS55ID09IFNWR1RleHRM
YXlvdXRBdHRyaWJ1dGVzOjplbXB0eVZhbHVlKCkpCkBAIC0yMTMsNyArMjEzLDcgQEAgdm9pZCBT
VkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXI6OmZpbGxDaGFyYWN0ZXJEYXRhTWFwKGNvbnN0
IFRleHRQb3NpdGlvbiYgcG8KICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAg
ICAgICAgdXBkYXRlQ2hhcmFjdGVyRGF0YShpLCBsYXN0Um90YXRpb24sIGl0LT5zZWNvbmQsIGxl
bmd0aENvbnRleHQsIHhMaXN0UHRyLCB5TGlzdFB0ciwgZHhMaXN0UHRyLCBkeUxpc3RQdHIsIHJv
dGF0ZUxpc3RQdHIpOworICAgICAgICB1cGRhdGVDaGFyYWN0ZXJEYXRhKGksIGxhc3RSb3RhdGlv
biwgaXQtPnZhbHVlLCBsZW5ndGhDb250ZXh0LCB4TGlzdFB0ciwgeUxpc3RQdHIsIGR4TGlzdFB0
ciwgZHlMaXN0UHRyLCByb3RhdGVMaXN0UHRyKTsKICAgICB9CiAKICAgICAvLyBUaGUgbGFzdCBy
b3RhdGlvbiB2YWx1ZSBhbHdheXMgc3BhbnMgdGhlIHdob2xlIHNjb3BlLgpAQCAtMjI5LDcgKzIy
OSw3IEBAIHZvaWQgU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyOjpmaWxsQ2hhcmFjdGVy
RGF0YU1hcChjb25zdCBUZXh0UG9zaXRpb24mIHBvCiAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgfQogCi0gICAgICAgIGl0LT5zZWNvbmQucm90YXRlID0gbGFzdFJvdGF0aW9uOworICAg
ICAgICBpdC0+dmFsdWUucm90YXRlID0gbGFzdFJvdGF0aW9uOwogICAgIH0KIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZS5jcHAK
aW5kZXggNWM1NDliMi4uYmEyYjc2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmUuY3BwCkBAIC00NzUsNyArNDc1LDcgQEAgdm9p
ZCBTVkdUZXh0TGF5b3V0RW5naW5lOjpsYXlvdXRUZXh0T25MaW5lT3JQYXRoKFNWR0lubGluZVRl
eHRCb3gqIHRleHRCb3gsIFJlbmQKICAgICAgICAgU1ZHQ2hhcmFjdGVyRGF0YSBkYXRhOwogICAg
ICAgICBTVkdDaGFyYWN0ZXJEYXRhTWFwOjppdGVyYXRvciBpdCA9IGNoYXJhY3RlckRhdGFNYXAu
ZmluZChtX2xvZ2ljYWxDaGFyYWN0ZXJPZmZzZXQgKyAxKTsKICAgICAgICAgaWYgKGl0ICE9IGNo
YXJhY3RlckRhdGFNYXAuZW5kKCkpCi0gICAgICAgICAgICBkYXRhID0gaXQtPnNlY29uZDsKKyAg
ICAgICAgICAgIGRhdGEgPSBpdC0+dmFsdWU7CiAKICAgICAgICAgZmxvYXQgeCA9IGRhdGEueDsK
ICAgICAgICAgZmxvYXQgeSA9IGRhdGEueTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3NCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3NCdWlsZGVyLmNwcAppbmRleCA2ODVlNTE1Li4wYTJk
ZjViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRy
aWNzQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0
TWV0cmljc0J1aWxkZXIuY3BwCkBAIC0xNzEsNyArMTcxLDcgQEAgdm9pZCBTVkdUZXh0TWV0cmlj
c0J1aWxkZXI6Om1lYXN1cmVUZXh0UmVuZGVyZXIoUmVuZGVyU1ZHSW5saW5lVGV4dCogdGV4dCwg
TWVhc3UKICAgICAgICAgICAgIGlmIChkYXRhLT5hbGxDaGFyYWN0ZXJzTWFwKSB7CiAgICAgICAg
ICAgICAgICAgY29uc3QgU1ZHQ2hhcmFjdGVyRGF0YU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBk
YXRhLT5hbGxDaGFyYWN0ZXJzTWFwLT5maW5kKGRhdGEtPnZhbHVlTGlzdFBvc2l0aW9uICsgbV90
ZXh0UG9zaXRpb24gLSBkYXRhLT5za2lwcGVkQ2hhcmFjdGVycyAtIHN1cnJvZ2F0ZVBhaXJDaGFy
YWN0ZXJzICsgMSk7CiAgICAgICAgICAgICAgICAgaWYgKGl0ICE9IGRhdGEtPmFsbENoYXJhY3Rl
cnNNYXAtPmVuZCgpKQotICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLT5jaGFyYWN0ZXJE
YXRhTWFwKCkuc2V0KG1fdGV4dFBvc2l0aW9uICsgMSwgaXQtPnNlY29uZCk7CisgICAgICAgICAg
ICAgICAgICAgIGF0dHJpYnV0ZXMtPmNoYXJhY3RlckRhdGFNYXAoKS5zZXQobV90ZXh0UG9zaXRp
b24gKyAxLCBpdC0+dmFsdWUpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgdGV4dE1ldHJp
Y3NWYWx1ZXMtPmFwcGVuZChtX2N1cnJlbnRNZXRyaWNzKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwIGIvU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCmluZGV4IDQ0MjA5YzYuLmZjYjEyNmEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5jcHAKQEAgLTE4OCw3
ICsxODgsNyBAQCB2b2lkIFN0b3JhZ2VBcmVhU3luYzo6c3luY1RpbWVyRmlyZWQoVGltZXI8U3Rv
cmFnZUFyZWFTeW5jPiopCiAgICAgICAgICAgICAgICAgcGFydGlhbFN5bmMgPSB0cnVlOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9pdGVtc1Bl
bmRpbmdTeW5jLnNldChjaGFuZ2VkX2l0LT5maXJzdC5pc29sYXRlZENvcHkoKSwgY2hhbmdlZF9p
dC0+c2Vjb25kLmlzb2xhdGVkQ29weSgpKTsKKyAgICAgICAgICAgIG1faXRlbXNQZW5kaW5nU3lu
Yy5zZXQoY2hhbmdlZF9pdC0+a2V5Lmlzb2xhdGVkQ29weSgpLCBjaGFuZ2VkX2l0LT52YWx1ZS5p
c29sYXRlZENvcHkoKSk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAocGFydGlhbFN5bmMpIHsK
QEAgLTE5OCw3ICsxOTgsNyBAQCB2b2lkIFN0b3JhZ2VBcmVhU3luYzo6c3luY1RpbWVyRmlyZWQo
VGltZXI8U3RvcmFnZUFyZWFTeW5jPiopCiAgICAgICAgICAgICBIYXNoTWFwPFN0cmluZywgU3Ry
aW5nPjo6aXRlcmF0b3IgcGVuZGluZ19pdCA9IG1faXRlbXNQZW5kaW5nU3luYy5iZWdpbigpOwog
ICAgICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46Oml0ZXJhdG9yIHBlbmRpbmdfZW5k
ID0gbV9pdGVtc1BlbmRpbmdTeW5jLmVuZCgpOwogICAgICAgICAgICAgZm9yICg7IHBlbmRpbmdf
aXQgIT0gcGVuZGluZ19lbmQ7ICsrcGVuZGluZ19pdCkKLSAgICAgICAgICAgICAgICBtX2NoYW5n
ZWRJdGVtcy5yZW1vdmUocGVuZGluZ19pdC0+Zmlyc3QpOworICAgICAgICAgICAgICAgIG1fY2hh
bmdlZEl0ZW1zLnJlbW92ZShwZW5kaW5nX2l0LT5rZXkpOwogICAgICAgICB9CiAKICAgICAgICAg
aWYgKCFtX3N5bmNTY2hlZHVsZWQpIHsKQEAgLTM0NSw3ICszNDUsNyBAQCB2b2lkIFN0b3JhZ2VB
cmVhU3luYzo6cGVyZm9ybUltcG9ydCgpCiAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46Oml0
ZXJhdG9yIGVuZCA9IGl0ZW1NYXAuZW5kKCk7CiAKICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0
KQotICAgICAgICBtX3N0b3JhZ2VBcmVhLT5pbXBvcnRJdGVtKGl0LT5maXJzdCwgaXQtPnNlY29u
ZCk7CisgICAgICAgIG1fc3RvcmFnZUFyZWEtPmltcG9ydEl0ZW0oaXQtPmtleSwgaXQtPnZhbHVl
KTsKIAogICAgIG1hcmtJbXBvcnRlZCgpOwogfQpAQCAtNDM5LDEzICs0MzksMTMgQEAgdm9pZCBT
dG9yYWdlQXJlYVN5bmM6OnN5bmMoYm9vbCBjbGVhckl0ZW1zLCBjb25zdCBIYXNoTWFwPFN0cmlu
ZywgU3RyaW5nPiYgaXRlbXMKICAgICB0cmFuc2FjdGlvbi5iZWdpbigpOwogICAgIGZvciAoSGFz
aE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaXRlbXMuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIC8vIEJhc2VkIG9uIHRoZSBudWxsLW5lc3Mgb2Yg
dGhlIHNlY29uZCBhcmd1bWVudCwgZGVjaWRlIHdoZXRoZXIgdGhpcyBpcyBhbiBpbnNlcnQgb3Ig
YSBkZWxldGUuCi0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCYgcXVlcnkgPSBpdC0+c2Vjb25kLmlz
TnVsbCgpID8gcmVtb3ZlIDogaW5zZXJ0OworICAgICAgICBTUUxpdGVTdGF0ZW1lbnQmIHF1ZXJ5
ID0gaXQtPnZhbHVlLmlzTnVsbCgpID8gcmVtb3ZlIDogaW5zZXJ0OwogCi0gICAgICAgIHF1ZXJ5
LmJpbmRUZXh0KDEsIGl0LT5maXJzdCk7CisgICAgICAgIHF1ZXJ5LmJpbmRUZXh0KDEsIGl0LT5r
ZXkpOwogCiAgICAgICAgIC8vIElmIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgbm9uLW51bGwsIHdl
J3JlIGRvaW5nIGFuIGluc2VydCwgc28gYmluZCBpdCBhcyB0aGUgdmFsdWUuCi0gICAgICAgIGlm
ICghaXQtPnNlY29uZC5pc051bGwoKSkKLSAgICAgICAgICAgIHF1ZXJ5LmJpbmRCbG9iKDIsIGl0
LT5zZWNvbmQpOworICAgICAgICBpZiAoIWl0LT52YWx1ZS5pc051bGwoKSkKKyAgICAgICAgICAg
IHF1ZXJ5LmJpbmRCbG9iKDIsIGl0LT52YWx1ZSk7CiAKICAgICAgICAgaW50IHJlc3VsdCA9IHF1
ZXJ5LnN0ZXAoKTsKICAgICAgICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHREb25lKSB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VNYXAuY3BwIGIvU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9TdG9yYWdlTWFwLmNwcAppbmRleCA4ZTQyZDJmLi40MGUxYTM4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VNYXAuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU1hcC5jcHAKQEAgLTg5LDcgKzg5LDcgQEAgU3RyaW5n
IFN0b3JhZ2VNYXA6OmtleSh1bnNpZ25lZCBpbmRleCkKICAgICAgICAgcmV0dXJuIFN0cmluZygp
OwogCiAgICAgc2V0SXRlcmF0b3JUb0luZGV4KGluZGV4KTsKLSAgICByZXR1cm4gbV9pdGVyYXRv
ci0+Zmlyc3Q7CisgICAgcmV0dXJuIG1faXRlcmF0b3ItPmtleTsKIH0KIAogU3RyaW5nIFN0b3Jh
Z2VNYXA6OmdldEl0ZW0oY29uc3QgU3RyaW5nJiBrZXkpIGNvbnN0CkBAIC0xMzMsNyArMTMzLDcg
QEAgUGFzc1JlZlB0cjxTdG9yYWdlTWFwPiBTdG9yYWdlTWFwOjpzZXRJdGVtKGNvbnN0IFN0cmlu
ZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHUKIAogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+
OjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gbV9tYXAuYWRkKGtleSwgdmFsdWUpOwogICAgIGlmICgh
YWRkUmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25k
ID0gdmFsdWU7CisgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSB2YWx1ZTsKIAog
ICAgIGludmFsaWRhdGVJdGVyYXRvcigpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
U3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwCmluZGV4IDlkMWFjNTEuLjQ1MDFiMTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwCkBAIC01NSw3
ICs1NSw3IEBAIFBhc3NSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gU3RvcmFnZU5hbWVzcGFjZUlt
cGw6OmxvY2FsU3RvcmFnZU5hbWVzcGFjZShjb25zdCBTCiAgICAgICAgIHJldHVybiBzdG9yYWdl
TmFtZXNwYWNlLnJlbGVhc2UoKTsKICAgICB9CiAKLSAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAg
ICByZXR1cm4gaXQtPnZhbHVlOwogfQogCiBQYXNzUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IFN0
b3JhZ2VOYW1lc3BhY2VJbXBsOjpzZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSh1bnNpZ25lZCBxdW90
YSkKQEAgLTk3LDcgKzk3LDcgQEAgUGFzc1JlZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiBTdG9yYWdl
TmFtZXNwYWNlSW1wbDo6Y29weSgpCiAKICAgICBTdG9yYWdlQXJlYU1hcDo6aXRlcmF0b3IgZW5k
ID0gbV9zdG9yYWdlQXJlYU1hcC5lbmQoKTsKICAgICBmb3IgKFN0b3JhZ2VBcmVhTWFwOjppdGVy
YXRvciBpID0gbV9zdG9yYWdlQXJlYU1hcC5iZWdpbigpOyBpICE9IGVuZDsgKytpKQotICAgICAg
ICBuZXdOYW1lc3BhY2UtPm1fc3RvcmFnZUFyZWFNYXAuc2V0KGktPmZpcnN0LCBpLT5zZWNvbmQt
PmNvcHkoKSk7CisgICAgICAgIG5ld05hbWVzcGFjZS0+bV9zdG9yYWdlQXJlYU1hcC5zZXQoaS0+
a2V5LCBpLT52YWx1ZS0+Y29weSgpKTsKICAgICByZXR1cm4gbmV3TmFtZXNwYWNlLnJlbGVhc2Uo
KTsKIH0KIApAQCAtMTMxLDcgKzEzMSw3IEBAIHZvaWQgU3RvcmFnZU5hbWVzcGFjZUltcGw6OmNs
b3NlKCkKIAogICAgIFN0b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBlbmQgPSBtX3N0b3JhZ2VBcmVh
TWFwLmVuZCgpOwogICAgIGZvciAoU3RvcmFnZUFyZWFNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zdG9y
YWdlQXJlYU1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQt
PmNsb3NlKCk7CisgICAgICAgIGl0LT52YWx1ZS0+Y2xvc2UoKTsKIAogICAgIGlmIChtX3N5bmNN
YW5hZ2VyKQogICAgICAgICBtX3N5bmNNYW5hZ2VyLT5jbG9zZSgpOwpAQCAtMTU0LDcgKzE1NCw3
IEBAIHZvaWQgU3RvcmFnZU5hbWVzcGFjZUltcGw6OmNsZWFyQWxsT3JpZ2luc0ZvckRlbGV0aW9u
KCkKIAogICAgIFN0b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBlbmQgPSBtX3N0b3JhZ2VBcmVhTWFw
LmVuZCgpOwogICAgIGZvciAoU3RvcmFnZUFyZWFNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zdG9yYWdl
QXJlYU1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPmNs
ZWFyRm9yT3JpZ2luRGVsZXRpb24oKTsKKyAgICAgICAgaXQtPnZhbHVlLT5jbGVhckZvck9yaWdp
bkRlbGV0aW9uKCk7CiB9CiAgICAgCiB2b2lkIFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpzeW5jKCkK
QEAgLTE2Miw3ICsxNjIsNyBAQCB2b2lkIFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpzeW5jKCkKICAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIFN0b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBl
bmQgPSBtX3N0b3JhZ2VBcmVhTWFwLmVuZCgpOwogICAgIGZvciAoU3RvcmFnZUFyZWFNYXA6Oml0
ZXJhdG9yIGl0ID0gbV9zdG9yYWdlQXJlYU1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0g
ICAgICAgIGl0LT5zZWNvbmQtPnN5bmMoKTsKKyAgICAgICAgaXQtPnZhbHVlLT5zeW5jKCk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0RvY3Vt
ZW50RXh0ZW5zaW9ucy5jcHAKaW5kZXggMTUyY2U4Yi4uNDgzNTI0OSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5jcHAKQEAgLTE1Niw3ICsxNTYsNyBAQCB2
b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlQW5pbWF0aW9uRWxlbWVudEZyb21UYXJn
ZXQoU1ZHU01JTEVsZW1lbnQqIGFuaQogICAgIEhhc2hNYXA8U1ZHRWxlbWVudCosIEhhc2hTZXQ8
U1ZHU01JTEVsZW1lbnQqPiogPjo6aXRlcmF0b3IgaXQgPSBtX2FuaW1hdGVkRWxlbWVudHMuZmlu
ZCh0YXJnZXRFbGVtZW50KTsKICAgICBBU1NFUlQoaXQgIT0gbV9hbmltYXRlZEVsZW1lbnRzLmVu
ZCgpKTsKICAgICAKLSAgICBIYXNoU2V0PFNWR1NNSUxFbGVtZW50Kj4qIGFuaW1hdGlvbkVsZW1l
bnRzRm9yVGFyZ2V0ID0gaXQtPnNlY29uZDsKKyAgICBIYXNoU2V0PFNWR1NNSUxFbGVtZW50Kj4q
IGFuaW1hdGlvbkVsZW1lbnRzRm9yVGFyZ2V0ID0gaXQtPnZhbHVlOwogICAgIEFTU0VSVCghYW5p
bWF0aW9uRWxlbWVudHNGb3JUYXJnZXQtPmlzRW1wdHkoKSk7CiAKICAgICBhbmltYXRpb25FbGVt
ZW50c0ZvclRhcmdldC0+cmVtb3ZlKGFuaW1hdGlvbkVsZW1lbnQpOwpAQCAtMTczLDcgKzE3Myw3
IEBAIHZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZW1vdmVBbGxBbmltYXRpb25FbGVtZW50
c0Zyb21UYXJnZXQoU1ZHRWxlbWVudCogdGFyCiAgICAgaWYgKGl0ID09IG1fYW5pbWF0ZWRFbGVt
ZW50cy5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSGFzaFNldDxTVkdTTUlMRWxlbWVu
dCo+KiBhbmltYXRpb25FbGVtZW50c0ZvclRhcmdldCA9IGl0LT5zZWNvbmQ7CisgICAgSGFzaFNl
dDxTVkdTTUlMRWxlbWVudCo+KiBhbmltYXRpb25FbGVtZW50c0ZvclRhcmdldCA9IGl0LT52YWx1
ZTsKICAgICBWZWN0b3I8U1ZHU01JTEVsZW1lbnQqPiB0b0JlUmVzZXQ7CiAKICAgICBIYXNoU2V0
PFNWR1NNSUxFbGVtZW50Kj46Oml0ZXJhdG9yIGVuZCA9IGFuaW1hdGlvbkVsZW1lbnRzRm9yVGFy
Z2V0LT5lbmQoKTsKQEAgLTIxOSw5ICsyMTksOSBAQCB2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9u
czo6YWRkUGVuZGluZ1Jlc291cmNlKGNvbnN0IEF0b21pY1N0cmluZyYgaWQsIFNWR1N0eWxlZAog
CiAgICAgLy8gVGhlIEhhc2hNYXAgYWRkIGZ1bmN0aW9uIGxlYXZlcyB0aGUgbWFwIGFsb25lIGFu
ZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgZWxlbWVudCBpbiB0aGUKICAgICAvLyBtYXAgaWYg
dGhlIGVsZW1lbnQgYWxyZWFkeSBleGlzdHMuIFNvIHdlIGFkZCB3aXRoIGEgdmFsdWUgb2YgMCwg
YW5kIGl0IGVpdGhlciBmaW5kcyB0aGUKLSAgICAvLyBleGlzdGluZyBlbGVtZW50IG9yIGFkZHMg
YSBuZXcgb25lIGluIGEgc2luZ2xlIG9wZXJhdGlvbi4gVGhlICIuaXRlcmF0b3ItPnNlY29uZCIg
aWRpb20gZ2V0cworICAgIC8vIGV4aXN0aW5nIGVsZW1lbnQgb3IgYWRkcyBhIG5ldyBvbmUgaW4g
YSBzaW5nbGUgb3BlcmF0aW9uLiBUaGUgIi5pdGVyYXRvci0+dmFsdWUiIGlkaW9tIGdldHMKICAg
ICAvLyB1cyB0byB0aGUgaXRlcmF0b3IgZnJvbSBhZGQncyByZXN1bHQsIGFuZCB0aGVuIHRvIHRo
ZSB2YWx1ZSBpbnNpZGUgdGhlIGhhc2ggdGFibGUuCi0gICAgU1ZHUGVuZGluZ0VsZW1lbnRzKiYg
c2V0ID0gbV9wZW5kaW5nUmVzb3VyY2VzLmFkZChpZCwgMCkuaXRlcmF0b3ItPnNlY29uZDsKKyAg
ICBTVkdQZW5kaW5nRWxlbWVudHMqJiBzZXQgPSBtX3BlbmRpbmdSZXNvdXJjZXMuYWRkKGlkLCAw
KS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCFzZXQpCiAgICAgICAgIHNldCA9IG5ldyBTVkdQ
ZW5kaW5nRWxlbWVudHM7CiAgICAgc2V0LT5hZGQoZWxlbWVudCk7CkBAIC0yNDYsNyArMjQ2LDcg
QEAgYm9vbCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OmlzRWxlbWVudFBlbmRpbmdSZXNvdXJjZXMo
U1ZHU3R5bGVkRWxlbWVudCogZWxlbWVudCkKIAogICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBT
VkdQZW5kaW5nRWxlbWVudHMqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wZW5kaW5nUmVzb3Vy
Y2VzLmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDxBdG9taWNTdHJpbmcsIFNWR1BlbmRpbmdFbGVt
ZW50cyo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGVuZGluZ1Jlc291cmNlcy5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgU1ZHUGVuZGluZ0VsZW1lbnRzKiBlbGVtZW50cyA9
IGl0LT5zZWNvbmQ7CisgICAgICAgIFNWR1BlbmRpbmdFbGVtZW50cyogZWxlbWVudHMgPSBpdC0+
dmFsdWU7CiAgICAgICAgIEFTU0VSVChlbGVtZW50cyk7CiAKICAgICAgICAgaWYgKGVsZW1lbnRz
LT5jb250YWlucyhlbGVtZW50KSkKQEAgLTI3NCwxMyArMjc0LDEzIEBAIHZvaWQgU1ZHRG9jdW1l
bnRFeHRlbnNpb25zOjpyZW1vdmVFbGVtZW50RnJvbVBlbmRpbmdSZXNvdXJjZXMoU1ZHU3R5bGVk
RWxlbWVudCoKICAgICAgICAgVmVjdG9yPEF0b21pY1N0cmluZz4gdG9CZVJlbW92ZWQ7CiAgICAg
ICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBTVkdQZW5kaW5nRWxlbWVudHMqPjo6aXRlcmF0b3Ig
ZW5kID0gbV9wZW5kaW5nUmVzb3VyY2VzLmVuZCgpOwogICAgICAgICBmb3IgKEhhc2hNYXA8QXRv
bWljU3RyaW5nLCBTVkdQZW5kaW5nRWxlbWVudHMqPjo6aXRlcmF0b3IgaXQgPSBtX3BlbmRpbmdS
ZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBTVkdQZW5k
aW5nRWxlbWVudHMqIGVsZW1lbnRzID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIFNWR1BlbmRp
bmdFbGVtZW50cyogZWxlbWVudHMgPSBpdC0+dmFsdWU7CiAgICAgICAgICAgICBBU1NFUlQoZWxl
bWVudHMpOwogICAgICAgICAgICAgQVNTRVJUKCFlbGVtZW50cy0+aXNFbXB0eSgpKTsKIAogICAg
ICAgICAgICAgZWxlbWVudHMtPnJlbW92ZShlbGVtZW50KTsKICAgICAgICAgICAgIGlmIChlbGVt
ZW50cy0+aXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHRvQmVSZW1vdmVkLmFwcGVuZChpdC0+
Zmlyc3QpOworICAgICAgICAgICAgICAgIHRvQmVSZW1vdmVkLmFwcGVuZChpdC0+a2V5KTsKICAg
ICAgICAgfQogCiAgICAgICAgIGVsZW1lbnQtPmNsZWFySGFzUGVuZGluZ1Jlc291cmNlc0lmUG9z
c2libGUoKTsKQEAgLTI5NiwxMyArMjk2LDEzIEBAIHZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25z
OjpyZW1vdmVFbGVtZW50RnJvbVBlbmRpbmdSZXNvdXJjZXMoU1ZHU3R5bGVkRWxlbWVudCoKICAg
ICAgICAgVmVjdG9yPEF0b21pY1N0cmluZz4gdG9CZVJlbW92ZWQ7CiAgICAgICAgIEhhc2hNYXA8
QXRvbWljU3RyaW5nLCBTVkdQZW5kaW5nRWxlbWVudHMqPjo6aXRlcmF0b3IgZW5kID0gbV9wZW5k
aW5nUmVzb3VyY2VzRm9yUmVtb3ZhbC5lbmQoKTsKICAgICAgICAgZm9yIChIYXNoTWFwPEF0b21p
Y1N0cmluZywgU1ZHUGVuZGluZ0VsZW1lbnRzKj46Oml0ZXJhdG9yIGl0ID0gbV9wZW5kaW5nUmVz
b3VyY2VzRm9yUmVtb3ZhbC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAg
IFNWR1BlbmRpbmdFbGVtZW50cyogZWxlbWVudHMgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAg
U1ZHUGVuZGluZ0VsZW1lbnRzKiBlbGVtZW50cyA9IGl0LT52YWx1ZTsKICAgICAgICAgICAgIEFT
U0VSVChlbGVtZW50cyk7CiAgICAgICAgICAgICBBU1NFUlQoIWVsZW1lbnRzLT5pc0VtcHR5KCkp
OwogCiAgICAgICAgICAgICBlbGVtZW50cy0+cmVtb3ZlKGVsZW1lbnQpOwogICAgICAgICAgICAg
aWYgKGVsZW1lbnRzLT5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgdG9CZVJlbW92ZWQuYXBw
ZW5kKGl0LT5maXJzdCk7CisgICAgICAgICAgICAgICAgdG9CZVJlbW92ZWQuYXBwZW5kKGl0LT5r
ZXkpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gV2UgdXNlIHRoZSByZW1vdmVQZW5kaW5nUmVz
b3VyY2VGb3JSZW1vdmFsIGZ1bmN0aW9uIGhlcmUgYmVjYXVzZSBpdCBkZWFscyB3aXRoIHNldCBs
aWZldGltZSBjb3JyZWN0bHkuCkBAIC0zNjIsNyArMzYyLDcgQEAgSGFzaFNldDxTVkdFbGVtZW50
Kj4qIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6c2V0T2ZFbGVtZW50c1JlZmVyZW5jaW5nVGFyZ2V0
KFNWR0UKICAgICBjb25zdCBIYXNoTWFwPFNWR0VsZW1lbnQqLCBPd25QdHI8SGFzaFNldDxTVkdF
bGVtZW50Kj4gPiA+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fZWxlbWVudERlcGVuZGVuY2llcy5m
aW5kKHJlZmVyZW5jZWRFbGVtZW50KTsKICAgICBpZiAoaXQgPT0gbV9lbGVtZW50RGVwZW5kZW5j
aWVzLmVuZCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gaXQtPnNlY29uZC5nZXQo
KTsKKyAgICByZXR1cm4gaXQtPnZhbHVlLmdldCgpOwogfQogCiB2b2lkIFNWR0RvY3VtZW50RXh0
ZW5zaW9uczo6YWRkRWxlbWVudFJlZmVyZW5jaW5nVGFyZ2V0KFNWR0VsZW1lbnQqIHJlZmVyZW5j
aW5nRWxlbWVudCwgU1ZHRWxlbWVudCogcmVmZXJlbmNlZEVsZW1lbnQpCkBAIC0zODYsOCArMzg2
LDggQEAgdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlbW92ZUFsbFRhcmdldFJlZmVyZW5j
ZXNGb3JFbGVtZW50KFNWR0VsZW1lbnQqIHJlZmUKIAogICAgIEhhc2hNYXA8U1ZHRWxlbWVudCos
IE93blB0cjxIYXNoU2V0PFNWR0VsZW1lbnQqPiA+ID46Oml0ZXJhdG9yIGVuZCA9IG1fZWxlbWVu
dERlcGVuZGVuY2llcy5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8U1ZHRWxlbWVudCosIE93blB0
cjxIYXNoU2V0PFNWR0VsZW1lbnQqPiA+ID46Oml0ZXJhdG9yIGl0ID0gbV9lbGVtZW50RGVwZW5k
ZW5jaWVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBTVkdFbGVtZW50KiBy
ZWZlcmVuY2VkRWxlbWVudCA9IGl0LT5maXJzdDsKLSAgICAgICAgSGFzaFNldDxTVkdFbGVtZW50
Kj4qIHJlZmVyZW5jaW5nRWxlbWVudHMgPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICBTVkdF
bGVtZW50KiByZWZlcmVuY2VkRWxlbWVudCA9IGl0LT5rZXk7CisgICAgICAgIEhhc2hTZXQ8U1ZH
RWxlbWVudCo+KiByZWZlcmVuY2luZ0VsZW1lbnRzID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAg
ICBIYXNoU2V0PFNWR0VsZW1lbnQqPjo6aXRlcmF0b3Igc2V0SXQgPSByZWZlcmVuY2luZ0VsZW1l
bnRzLT5maW5kKHJlZmVyZW5jaW5nRWxlbWVudCk7CiAgICAgICAgIGlmIChzZXRJdCA9PSByZWZl
cmVuY2luZ0VsZW1lbnRzLT5lbmQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtNDA4LDEw
ICs0MDgsMTAgQEAgdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlbW92ZUFsbEVsZW1lbnRS
ZWZlcmVuY2VzRm9yVGFyZ2V0KFNWR0VsZW1lbnQqIHJlZmUKICAgICBIYXNoTWFwPFNWR0VsZW1l
bnQqLCBPd25QdHI8SGFzaFNldDxTVkdFbGVtZW50Kj4gPiA+OjppdGVyYXRvciBpdCA9IG1fZWxl
bWVudERlcGVuZGVuY2llcy5maW5kKHJlZmVyZW5jZWRFbGVtZW50KTsKICAgICBpZiAoaXQgPT0g
bV9lbGVtZW50RGVwZW5kZW5jaWVzLmVuZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJU
KGl0LT5maXJzdCA9PSByZWZlcmVuY2VkRWxlbWVudCk7CisgICAgQVNTRVJUKGl0LT5rZXkgPT0g
cmVmZXJlbmNlZEVsZW1lbnQpOwogICAgIFZlY3RvcjxTVkdFbGVtZW50Kj4gdG9CZU5vdGlmaWVk
OwogCi0gICAgSGFzaFNldDxTVkdFbGVtZW50Kj4qIHJlZmVyZW5jaW5nRWxlbWVudHMgPSBpdC0+
c2Vjb25kLmdldCgpOworICAgIEhhc2hTZXQ8U1ZHRWxlbWVudCo+KiByZWZlcmVuY2luZ0VsZW1l
bnRzID0gaXQtPnZhbHVlLmdldCgpOwogICAgIEhhc2hTZXQ8U1ZHRWxlbWVudCo+OjppdGVyYXRv
ciBzZXRFbmQgPSByZWZlcmVuY2luZ0VsZW1lbnRzLT5lbmQoKTsKICAgICBmb3IgKEhhc2hTZXQ8
U1ZHRWxlbWVudCo+OjppdGVyYXRvciBzZXRJdCA9IHJlZmVyZW5jaW5nRWxlbWVudHMtPmJlZ2lu
KCk7IHNldEl0ICE9IHNldEVuZDsgKytzZXRJdCkKICAgICAgICAgdG9CZU5vdGlmaWVkLmFwcGVu
ZCgqc2V0SXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCmluZGV4IGM4MGIyNTcuLmFmOGQ4
ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAKQEAgLTY4LDcgKzY4LDcgQEAgU1ZHRWxl
bWVudDo6flNWR0VsZW1lbnQoKQogICAgICAgICBTVkdFbGVtZW50UmFyZURhdGE6OlNWR0VsZW1l
bnRSYXJlRGF0YU1hcDo6aXRlcmF0b3IgaXQgPSByYXJlRGF0YU1hcC5maW5kKHRoaXMpOwogICAg
ICAgICBBU1NFUlQoaXQgIT0gcmFyZURhdGFNYXAuZW5kKCkpOwogCi0gICAgICAgIFNWR0VsZW1l
bnRSYXJlRGF0YSogcmFyZURhdGEgPSBpdC0+c2Vjb25kOworICAgICAgICBTVkdFbGVtZW50UmFy
ZURhdGEqIHJhcmVEYXRhID0gaXQtPnZhbHVlOwogICAgICAgICByYXJlRGF0YS0+ZGVzdHJveUFu
aW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygpOwogICAgICAgICBpZiAoU1ZHQ3Vyc29yRWxlbWVu
dCogY3Vyc29yRWxlbWVudCA9IHJhcmVEYXRhLT5jdXJzb3JFbGVtZW50KCkpCiAgICAgICAgICAg
ICBjdXJzb3JFbGVtZW50LT5yZW1vdmVDbGllbnQodGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuY3BwCmluZGV4IGIwMzJmMzEuLjBl
ZmE2YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWVD
b250YWluZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWVD
b250YWluZXIuY3BwCkBAIC0yNzIsNyArMjcyLDcgQEAgdm9pZCBTTUlMVGltZUNvbnRhaW5lcjo6
dXBkYXRlQW5pbWF0aW9ucyhTTUlMVGltZSBlbGFwc2VkLCBib29sIHNlZWtUb1RpbWUpCiAgICAg
VmVjdG9yPFNWR1NNSUxFbGVtZW50Kj4gYW5pbWF0aW9uc1RvQXBwbHk7CiAgICAgUmVzdWx0RWxl
bWVudE1hcDo6aXRlcmF0b3IgZW5kID0gcmVzdWx0c0VsZW1lbnRzLmVuZCgpOwogICAgIGZvciAo
UmVzdWx0RWxlbWVudE1hcDo6aXRlcmF0b3IgaXQgPSByZXN1bHRzRWxlbWVudHMuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFNWR1NNSUxFbGVtZW50KiBhbmltYXRpb24gPSBp
dC0+c2Vjb25kLmdldCgpOworICAgICAgICBTVkdTTUlMRWxlbWVudCogYW5pbWF0aW9uID0gaXQt
PnZhbHVlLmdldCgpOwogICAgICAgICBpZiAoY29udHJpYnV0aW5nRWxlbWVudHMuY29udGFpbnMo
YW5pbWF0aW9uKSkKICAgICAgICAgICAgIGFuaW1hdGlvbnNUb0FwcGx5LmFwcGVuZChhbmltYXRp
b24pOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJ
bWFnZUNhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZUNhY2hl
LmNwcAppbmRleCA2OTNlZTJhLi4yNWZjYzc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvU1ZHSW1hZ2VDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dy
YXBoaWNzL1NWR0ltYWdlQ2FjaGUuY3BwCkBAIC00Nyw4ICs0Nyw4IEBAIFNWR0ltYWdlQ2FjaGU6
On5TVkdJbWFnZUNhY2hlKCkKICAgICAgICAgLy8gQ2hlY2tzIGlmIHRoZSBjbGllbnQgKGl0LT5m
aXJzdCkgaXMgc3RpbGwgdmFsaWQuIFRoZSBjbGllbnQgc2hvdWxkIHJlbW92ZSBpdHNlbGYgZnJv
bSB0aGlzCiAgICAgICAgIC8vIGNhY2hlIGJlZm9yZSBpdHMgZW5kIG9mIGxpZmUsIG90aGVyd2lz
ZSB0aGUgZm9sbG93aW5nIEFTU0VSVCB3aWxsIGNyYXNoIG9uIHB1cmUgdmlydHVhbAogICAgICAg
ICAvLyBmdW5jdGlvbiBjYWxsIG9yIGEgZ2VuZXJhbCBjcmFzaC4KLSAgICAgICAgQVNTRVJUKGl0
LT5maXJzdC0+cmVzb3VyY2VDbGllbnRUeXBlKCkgPT0gQ2FjaGVkSW1hZ2VDbGllbnQ6OmV4cGVj
dGVkVHlwZSgpKTsKLSAgICAgICAgZGVsZXRlIGl0LT5zZWNvbmQuYnVmZmVyOworICAgICAgICBB
U1NFUlQoaXQtPmtleS0+cmVzb3VyY2VDbGllbnRUeXBlKCkgPT0gQ2FjaGVkSW1hZ2VDbGllbnQ6
OmV4cGVjdGVkVHlwZSgpKTsKKyAgICAgICAgZGVsZXRlIGl0LT52YWx1ZS5idWZmZXI7CiAgICAg
fQogCiAgICAgbV9pbWFnZURhdGFNYXAuY2xlYXIoKTsKQEAgLTYzLDcgKzYzLDcgQEAgdm9pZCBT
VkdJbWFnZUNhY2hlOjpyZW1vdmVDbGllbnRGcm9tQ2FjaGUoY29uc3QgQ2FjaGVkSW1hZ2VDbGll
bnQqIGNsaWVudCkKICAgICBpZiAoaXQgPT0gbV9pbWFnZURhdGFNYXAuZW5kKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGRlbGV0ZSBpdC0+c2Vjb25kLmJ1ZmZlcjsKKyAgICBkZWxldGUgaXQt
PnZhbHVlLmJ1ZmZlcjsKICAgICBtX2ltYWdlRGF0YU1hcC5yZW1vdmUoaXQpOwogfQogCkBAIC04
MCwxNCArODAsMTQgQEAgU1ZHSW1hZ2VDYWNoZTo6U2l6ZUFuZFNjYWxlcyBTVkdJbWFnZUNhY2hl
OjpyZXF1ZXN0ZWRTaXplQW5kU2NhbGVzKGNvbnN0IENhY2hlZEkKICAgICBTaXplQW5kU2NhbGVz
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fc2l6ZUFuZFNjYWxlc01hcC5maW5kKGNsaWVudCk7
CiAgICAgaWYgKGl0ID09IG1fc2l6ZUFuZFNjYWxlc01hcC5lbmQoKSkKICAgICAgICAgcmV0dXJu
IFNpemVBbmRTY2FsZXMoKTsKLSAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICByZXR1cm4gaXQt
PnZhbHVlOwogfQogCiB2b2lkIFNWR0ltYWdlQ2FjaGU6OmltYWdlQ29udGVudENoYW5nZWQoKQog
ewogICAgIEltYWdlRGF0YU1hcDo6aXRlcmF0b3IgZW5kID0gbV9pbWFnZURhdGFNYXAuZW5kKCk7
CiAgICAgZm9yIChJbWFnZURhdGFNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pbWFnZURhdGFNYXAuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLmltYWdlTmVlZHNVcGRh
dGUgPSB0cnVlOworICAgICAgICBpdC0+dmFsdWUuaW1hZ2VOZWVkc1VwZGF0ZSA9IHRydWU7CiAK
ICAgICAvLyBJZiB3ZSdyZSBpbiB0aGUgbWlkZGxlIG9mIGxheW91dCwgc3RhcnQgcmVkcmF3aW5n
IGRpcnR5CiAgICAgLy8gaW1hZ2VzIG9uIGEgdGltZXI7IG90aGVyd2lzZSBpdCdzIHNhZmUgdG8g
ZHJhdyBpbW1lZGlhdGVseS4KQEAgLTEwMyw3ICsxMDMsNyBAQCB2b2lkIFNWR0ltYWdlQ2FjaGU6
OnJlZHJhdygpCiB7CiAgICAgSW1hZ2VEYXRhTWFwOjppdGVyYXRvciBlbmQgPSBtX2ltYWdlRGF0
YU1hcC5lbmQoKTsKICAgICBmb3IgKEltYWdlRGF0YU1hcDo6aXRlcmF0b3IgaXQgPSBtX2ltYWdl
RGF0YU1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgSW1hZ2VEYXRhJiBk
YXRhID0gaXQtPnNlY29uZDsKKyAgICAgICAgSW1hZ2VEYXRhJiBkYXRhID0gaXQtPnZhbHVlOwog
ICAgICAgICBpZiAoIWRhdGEuaW1hZ2VOZWVkc1VwZGF0ZSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAvLyBJZiB0aGUgY29udGVudCBjaGFuZ2VkIHdlIHJlZHJhdyB1c2luZyBvdXIg
ZXhpc3RpbmcgSW1hZ2VCdWZmZXIuCkBAIC0xMzksOSArMTM5LDkgQEAgSW1hZ2UqIFNWR0ltYWdl
Q2FjaGU6Omxvb2t1cE9yQ3JlYXRlQml0bWFwSW1hZ2VGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJP
YmplY3QqIHIKICAgICBpZiAoc2l6ZUl0ID09IG1fc2l6ZUFuZFNjYWxlc01hcC5lbmQoKSkKICAg
ICAgICAgcmV0dXJuIEltYWdlOjpudWxsSW1hZ2UoKTsKIAotICAgIEludFNpemUgc2l6ZSA9IHNp
emVJdC0+c2Vjb25kLnNpemU7Ci0gICAgZmxvYXQgem9vbSA9IHNpemVJdC0+c2Vjb25kLnpvb207
Ci0gICAgZmxvYXQgc2NhbGUgPSBzaXplSXQtPnNlY29uZC5zY2FsZTsKKyAgICBJbnRTaXplIHNp
emUgPSBzaXplSXQtPnZhbHVlLnNpemU7CisgICAgZmxvYXQgem9vbSA9IHNpemVJdC0+dmFsdWUu
em9vbTsKKyAgICBmbG9hdCBzY2FsZSA9IHNpemVJdC0+dmFsdWUuc2NhbGU7CiAKICAgICAvLyBG
SVhNRSAoODUzMzUpOiBUaGlzIG5lZWRzIHRvIHRha2UgQ1NTIHRyYW5zZm9ybSBzY2FsZSBpbnRv
IGFjY291bnQgYXMgd2VsbC4KICAgICBQYWdlKiBwYWdlID0gcmVuZGVyZXItPmRvY3VtZW50KCkt
PnBhZ2UoKTsKQEAgLTE1Myw3ICsxNTMsNyBAQCBJbWFnZSogU1ZHSW1hZ2VDYWNoZTo6bG9va3Vw
T3JDcmVhdGVCaXRtYXBJbWFnZUZvclJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCogcgogICAg
IC8vIExvb2t1cCBpbWFnZSBmb3IgY2xpZW50IGluIGNhY2hlIGFuZCBldmVudHVhbGx5IHVwZGF0
ZSBpdC4KICAgICBJbWFnZURhdGFNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pbWFnZURhdGFNYXAuZmlu
ZChjbGllbnQpOwogICAgIGlmIChpdCAhPSBtX2ltYWdlRGF0YU1hcC5lbmQoKSkgewotICAgICAg
ICBJbWFnZURhdGEmIGRhdGEgPSBpdC0+c2Vjb25kOworICAgICAgICBJbWFnZURhdGEmIGRhdGEg
PSBpdC0+dmFsdWU7CiAKICAgICAgICAgLy8gQ29tbW9uIGNhc2U6IGltYWdlIHNpemUgJiB6b29t
IHJlbWFpbmVkIHRoZSBzYW1lLgogICAgICAgICBpZiAoZGF0YS5zaXplQW5kU2NhbGVzLnNpemUg
PT0gc2l6ZSAmJiBkYXRhLnNpemVBbmRTY2FsZXMuem9vbSA9PSB6b29tICYmIGRhdGEuc2l6ZUFu
ZFNjYWxlcy5zY2FsZSA9PSBzY2FsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaAppbmRleCA0NGQzMjI3Li4xOTE1ODBk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0
ZXJCdWlsZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZH
RmlsdGVyQnVpbGRlci5oCkBAIC01MCw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAg
IC8vIE9ubHkgYWxsb3dlZCBmb3IgZWZmZWN0cyBiZWxvbmdzIHRvIHRoaXMgYnVpbGRlci4KICAg
ICAgICAgQVNTRVJUKG1fZWZmZWN0UmVmZXJlbmNlcy5jb250YWlucyhlZmZlY3QpKTsKLSAgICAg
ICAgcmV0dXJuIG1fZWZmZWN0UmVmZXJlbmNlcy5maW5kKGVmZmVjdCktPnNlY29uZDsKKyAgICAg
ICAgcmV0dXJuIG1fZWZmZWN0UmVmZXJlbmNlcy5maW5kKGVmZmVjdCktPnZhbHVlOwogICAgIH0K
IAogICAgIC8vIFJlcXVpcmVkIHRvIGNoYW5nZSB0aGUgYXR0cmlidXRlcyBvZiBhIGZpbHRlciBk
dXJpbmcgYW4gc3ZnQXR0cmlidXRlQ2hhbmdlZC4KQEAgLTY2LDcgKzY2LDcgQEAgcHJpdmF0ZToK
ICAgICB7CiAgICAgICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBSZWZQdHI8RmlsdGVyRWZmZWN0
PiA+OjppdGVyYXRvciBlbmQgPSBtX2J1aWx0aW5FZmZlY3RzLmVuZCgpOwogICAgICAgICBmb3Ig
KEhhc2hNYXA8QXRvbWljU3RyaW5nLCBSZWZQdHI8RmlsdGVyRWZmZWN0PiA+OjppdGVyYXRvciBp
dGVyYXRvciA9IG1fYnVpbHRpbkVmZmVjdHMuYmVnaW4oKTsgaXRlcmF0b3IgIT0gZW5kOyArK2l0
ZXJhdG9yKQotICAgICAgICAgICAgIG1fZWZmZWN0UmVmZXJlbmNlcy5hZGQoaXRlcmF0b3ItPnNl
Y29uZCwgRmlsdGVyRWZmZWN0U2V0KCkpOworICAgICAgICAgICAgIG1fZWZmZWN0UmVmZXJlbmNl
cy5hZGQoaXRlcmF0b3ItPnZhbHVlLCBGaWx0ZXJFZmZlY3RTZXQoKSk7CiAgICAgfQogCiAgICAg
SGFzaE1hcDxBdG9taWNTdHJpbmcsIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+ID4gbV9idWlsdGluRWZm
ZWN0czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1h
dGVkUHJvcGVydHkuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVk
UHJvcGVydHkuaAppbmRleCA2ZGZkYWM2Li42YTFmMDA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eS5oCkBAIC01OCw4ICs1OCw4
IEBAIHB1YmxpYzoKICAgICAgICAgQ2FjaGUqIGNhY2hlID0gYW5pbWF0ZWRQcm9wZXJ0eUNhY2hl
KCk7CiAgICAgICAgIGNvbnN0IENhY2hlOjpjb25zdF9pdGVyYXRvciBlbmQgPSBjYWNoZS0+ZW5k
KCk7CiAgICAgICAgIGZvciAoQ2FjaGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY2FjaGUtPmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgaWYgKGl0LT5zZWNvbmQgPT0gdGhp
cykgewotICAgICAgICAgICAgICAgIGNhY2hlLT5yZW1vdmUoaXQtPmZpcnN0KTsKKyAgICAgICAg
ICAgIGlmIChpdC0+dmFsdWUgPT0gdGhpcykgeworICAgICAgICAgICAgICAgIGNhY2hlLT5yZW1v
dmUoaXQtPmtleSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0F0dHJp
YnV0ZVRvUHJvcGVydHlNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZH
QXR0cmlidXRlVG9Qcm9wZXJ0eU1hcC5jcHAKaW5kZXggYmUzMWNjMy4uY2M0NmNjZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQXR0cmlidXRlVG9Qcm9wZXJ0
eU1hcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQXR0cmlidXRl
VG9Qcm9wZXJ0eU1hcC5jcHAKQEAgLTMxLDcgKzMxLDcgQEAgdm9pZCBTVkdBdHRyaWJ1dGVUb1By
b3BlcnR5TWFwOjphZGRQcm9wZXJ0aWVzKFNWR0F0dHJpYnV0ZVRvUHJvcGVydHlNYXAmIG1hcCkK
IHsKICAgICBBdHRyaWJ1dGVUb1Byb3BlcnRpZXNNYXA6Oml0ZXJhdG9yIGVuZCA9IG1hcC5tX21h
cC5lbmQoKTsKICAgICBmb3IgKEF0dHJpYnV0ZVRvUHJvcGVydGllc01hcDo6aXRlcmF0b3IgaXQg
PSBtYXAubV9tYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFByb3BlcnRp
ZXNWZWN0b3IqIHZlY3RvciA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFByb3BlcnRpZXNWZWN0b3Iq
IHZlY3RvciA9IGl0LT52YWx1ZTsKICAgICAgICAgQVNTRVJUKHZlY3Rvcik7CiAKICAgICAgICAg
UHJvcGVydGllc1ZlY3Rvcjo6aXRlcmF0b3IgdmVjdG9yRW5kID0gdmVjdG9yLT5lbmQoKTsKQEAg
LTgxLDEyICs4MSwxMiBAQCB2b2lkIFNWR0F0dHJpYnV0ZVRvUHJvcGVydHlNYXA6OnN5bmNocm9u
aXplUHJvcGVydGllcyhTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudAogICAgIEFTU0VSVChjb250
ZXh0RWxlbWVudCk7CiAgICAgQXR0cmlidXRlVG9Qcm9wZXJ0aWVzTWFwOjppdGVyYXRvciBlbmQg
PSBtX21hcC5lbmQoKTsKICAgICBmb3IgKEF0dHJpYnV0ZVRvUHJvcGVydGllc01hcDo6aXRlcmF0
b3IgaXQgPSBtX21hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgUHJvcGVy
dGllc1ZlY3RvciogdmVjdG9yID0gaXQtPnNlY29uZDsKKyAgICAgICAgUHJvcGVydGllc1ZlY3Rv
ciogdmVjdG9yID0gaXQtPnZhbHVlOwogICAgICAgICBBU1NFUlQodmVjdG9yKTsKIAogICAgICAg
ICBQcm9wZXJ0aWVzVmVjdG9yOjppdGVyYXRvciB2ZWN0b3JFbmQgPSB2ZWN0b3ItPmVuZCgpOwog
ICAgICAgICBmb3IgKFByb3BlcnRpZXNWZWN0b3I6Oml0ZXJhdG9yIHZlY3Rvckl0ID0gdmVjdG9y
LT5iZWdpbigpOyB2ZWN0b3JJdCAhPSB2ZWN0b3JFbmQ7ICsrdmVjdG9ySXQpCi0gICAgICAgICAg
ICBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnRleHRFbGVtZW50LCBpdC0+Zmlyc3QsICp2ZWN0b3JJ
dCk7CisgICAgICAgICAgICBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnRleHRFbGVtZW50LCBpdC0+
a2V5LCAqdmVjdG9ySXQpOwogICAgIH0gCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtl
ckNvbnRleHQuY3BwCmluZGV4IDQ1ZTVlYmUuLmIyNjIwYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd29y
a2Vycy9Xb3JrZXJDb250ZXh0LmNwcApAQCAtMTc5LDcgKzE3OSw3IEBAIGJvb2wgV29ya2VyQ29u
dGV4dDo6aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QKICAgICBBY3RpdmVET01PYmplY3RzTWFw
JiBhY3RpdmVPYmplY3RzID0gYWN0aXZlRE9NT2JqZWN0cygpOwogICAgIEFjdGl2ZURPTU9iamVj
dHNNYXA6OmNvbnN0X2l0ZXJhdG9yIGFjdGl2ZU9iamVjdHNFbmQgPSBhY3RpdmVPYmplY3RzLmVu
ZCgpOwogICAgIGZvciAoQWN0aXZlRE9NT2JqZWN0c01hcDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9
IGFjdGl2ZU9iamVjdHMuYmVnaW4oKTsgaXRlciAhPSBhY3RpdmVPYmplY3RzRW5kOyArK2l0ZXIp
IHsKLSAgICAgICAgaWYgKGl0ZXItPmZpcnN0LT5oYXNQZW5kaW5nQWN0aXZpdHkoKSkKKyAgICAg
ICAgaWYgKGl0ZXItPmtleS0+aGFzUGVuZGluZ0FjdGl2aXR5KCkpCiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29y
a2VyRXZlbnRRdWV1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckV2ZW50UXVl
dWUuY3BwCmluZGV4IDU5YTkzMDcuLjIzNTUyOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3dvcmtlcnMvV29ya2VyRXZlbnRRdWV1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vy
cy9Xb3JrZXJFdmVudFF1ZXVlLmNwcApAQCAtMTI3LDcgKzEyNyw3IEBAIHZvaWQgV29ya2VyRXZl
bnRRdWV1ZTo6Y2xvc2UoKQogewogICAgIG1faXNDbG9zZWQgPSB0cnVlOwogICAgIGZvciAoRXZl
bnRUYXNrTWFwOjppdGVyYXRvciBpdCA9IG1fZXZlbnRUYXNrTWFwLmJlZ2luKCk7IGl0ICE9IG1f
ZXZlbnRUYXNrTWFwLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIEV2ZW50RGlzcGF0Y2hlclRhc2sq
IHRhc2sgPSBpdC0+c2Vjb25kOworICAgICAgICBFdmVudERpc3BhdGNoZXJUYXNrKiB0YXNrID0g
aXQtPnZhbHVlOwogICAgICAgICB0YXNrLT5jYW5jZWwoKTsKICAgICB9CiAgICAgbV9ldmVudFRh
c2tNYXAuY2xlYXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVx
dWVzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCmluZGV4IDc2
OGEwMTkuLjI1ZWRjNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVx
dWVzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcApAQCAt
OTIwLDcgKzkyMCw3IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OnNldFJlcXVlc3RIZWFkZXJJbnRl
cm5hbChjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IFN0CiB7CiAgICAgSFRUUEhlYWRl
ck1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fcmVxdWVzdEhlYWRlcnMuYWRkKG5hbWUsIHZhbHVl
KTsKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXN1bHQuaXRlcmF0b3It
PnNlY29uZCArPSAiLCAiICsgdmFsdWU7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUg
Kz0gIiwgIiArIHZhbHVlOwogfQogCiBTdHJpbmcgWE1MSHR0cFJlcXVlc3Q6OmdldFJlcXVlc3RI
ZWFkZXIoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKSBjb25zdApAQCAtOTQ3LDE2ICs5NDcsMTYg
QEAgU3RyaW5nIFhNTEh0dHBSZXF1ZXN0OjpnZXRBbGxSZXNwb25zZUhlYWRlcnMoRXhjZXB0aW9u
Q29kZSYgZWMpIGNvbnN0CiAgICAgICAgIC8vICAgICAyKSBUaGVyZSdzIG5vIGtub3duIGhhcm0g
aW4gaGlkaW5nIFNldC1Db29raWUgaGVhZGVyIGZpZWxkcyBlbnRpcmVseTsgd2UgZG9uJ3QKICAg
ICAgICAgLy8gICAgICAgIGtub3cgYW55IHdpZGVseSB1c2VkIHRlY2huaXF1ZSB0aGF0IHJlcXVp
cmVzIGFjY2VzcyB0byB0aGVtLgogICAgICAgICAvLyAgICAgMykgRmlyZWZveCBoYXMgaW1wbGVt
ZW50ZWQgdGhpcyBwb2xpY3kuCi0gICAgICAgIGlmIChpc1NldENvb2tpZUhlYWRlcihpdC0+Zmly
c3QpICYmICFzZWN1cml0eU9yaWdpbigpLT5jYW5Mb2FkTG9jYWxSZXNvdXJjZXMoKSkKKyAgICAg
ICAgaWYgKGlzU2V0Q29va2llSGVhZGVyKGl0LT5rZXkpICYmICFzZWN1cml0eU9yaWdpbigpLT5j
YW5Mb2FkTG9jYWxSZXNvdXJjZXMoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAg
IGlmICghbV9zYW1lT3JpZ2luUmVxdWVzdCAmJiAhaXNPbkFjY2Vzc0NvbnRyb2xSZXNwb25zZUhl
YWRlcldoaXRlbGlzdChpdC0+Zmlyc3QpICYmICFhY2Nlc3NDb250cm9sRXhwb3NlSGVhZGVyU2V0
LmNvbnRhaW5zKGl0LT5maXJzdCkpCisgICAgICAgIGlmICghbV9zYW1lT3JpZ2luUmVxdWVzdCAm
JiAhaXNPbkFjY2Vzc0NvbnRyb2xSZXNwb25zZUhlYWRlcldoaXRlbGlzdChpdC0+a2V5KSAmJiAh
YWNjZXNzQ29udHJvbEV4cG9zZUhlYWRlclNldC5jb250YWlucyhpdC0+a2V5KSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogCi0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5maXJzdCk7
CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5rZXkpOwogICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZCgnOicpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnICcpOwot
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+c2Vjb25kKTsKKyAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQoaXQtPnZhbHVlKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
J1xyJyk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwogICAgIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aEZ1bmN0aW9ucy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS94bWwvWFBhdGhGdW5jdGlvbnMuY3BwCmluZGV4IDNjOTBlM2IuLjAwMTliYzQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aEZ1bmN0aW9ucy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUveG1sL1hQYXRoRnVuY3Rpb25zLmNwcApAQCAtNzIzLDcgKzcyMyw3IEBAIEZ1bmN0
aW9uKiBjcmVhdGVGdW5jdGlvbihjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFZlY3RvcjxFeHBy
ZXNzaW9uKj4mIGFyZ3MpCiAgICAgSGFzaE1hcDxTdHJpbmcsIEZ1bmN0aW9uUmVjPjo6aXRlcmF0
b3IgZnVuY3Rpb25NYXBJdGVyID0gZnVuY3Rpb25NYXAtPmZpbmQobmFtZSk7CiAgICAgRnVuY3Rp
b25SZWMqIGZ1bmN0aW9uUmVjID0gMDsKIAotICAgIGlmIChmdW5jdGlvbk1hcEl0ZXIgPT0gZnVu
Y3Rpb25NYXAtPmVuZCgpIHx8ICEoZnVuY3Rpb25SZWMgPSAmZnVuY3Rpb25NYXBJdGVyLT5zZWNv
bmQpLT5hcmdzLmNvbnRhaW5zKGFyZ3Muc2l6ZSgpKSkKKyAgICBpZiAoZnVuY3Rpb25NYXBJdGVy
ID09IGZ1bmN0aW9uTWFwLT5lbmQoKSB8fCAhKGZ1bmN0aW9uUmVjID0gJmZ1bmN0aW9uTWFwSXRl
ci0+dmFsdWUpLT5hcmdzLmNvbnRhaW5zKGFyZ3Muc2l6ZSgpKSkKICAgICAgICAgcmV0dXJuIDA7
CiAKICAgICBGdW5jdGlvbiogZnVuY3Rpb24gPSBmdW5jdGlvblJlYy0+ZmFjdG9yeUZuKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhQYXJzZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUveG1sL1hQYXRoUGFyc2VyLmNwcAppbmRleCA2MmQ4ZWUzLi4xMDk4ZTU0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3htbC9YUGF0aFBhcnNlci5jcHAKQEAgLTEwNiw3ICsxMDYsNyBAQCBzdGF0aWMgYm9vbCBp
c0F4aXNOYW1lKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RlcDo6QXhpcyYgdHlwZSkKICAgICBBeGlz
TmFtZXNNYXA6Oml0ZXJhdG9yIGl0ID0gYXhpc05hbWVzLmZpbmQobmFtZSk7CiAgICAgaWYgKGl0
ID09IGF4aXNOYW1lcy5lbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHR5cGUgPSBp
dC0+c2Vjb25kOworICAgIHR5cGUgPSBpdC0+dmFsdWU7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yTGlieHNsdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwCmluZGV4IDA3NmE4
NTIuLjllYTJhYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29y
TGlieHNsdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JMaWJ4c2x0
LmNwcApAQCAtMjI1LDggKzIyNSw4IEBAIHN0YXRpYyBjb25zdCBjaGFyKiogeHNsdFBhcmFtQXJy
YXlGcm9tUGFyYW1ldGVyTWFwKFhTTFRQcm9jZXNzb3I6OlBhcmFtZXRlck1hcCYKICAgICBYU0xU
UHJvY2Vzc29yOjpQYXJhbWV0ZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IHBhcmFtZXRlcnMuZW5kKCk7
CiAgICAgdW5zaWduZWQgaW5kZXggPSAwOwogICAgIGZvciAoWFNMVFByb2Nlc3Nvcjo6UGFyYW1l
dGVyTWFwOjppdGVyYXRvciBpdCA9IHBhcmFtZXRlcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7Ci0gICAgICAgIHBhcmFtZXRlckFycmF5W2luZGV4KytdID0gZmFzdFN0ckR1cChpdC0+Zmly
c3QudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIHBhcmFtZXRlckFycmF5W2luZGV4KytdID0gZmFz
dFN0ckR1cChpdC0+c2Vjb25kLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBwYXJhbWV0ZXJBcnJh
eVtpbmRleCsrXSA9IGZhc3RTdHJEdXAoaXQtPmtleS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAg
cGFyYW1ldGVyQXJyYXlbaW5kZXgrK10gPSBmYXN0U3RyRHVwKGl0LT52YWx1ZS51dGY4KCkuZGF0
YSgpKTsKICAgICB9CiAgICAgcGFyYW1ldGVyQXJyYXlbaW5kZXhdID0gMDsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JRdC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS94bWwvWFNMVFByb2Nlc3NvclF0LmNwcAppbmRleCBjMGFiNGQ2Li5hNGM5ZDc0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvclF0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvclF0LmNwcApAQCAtMTQzLDcgKzE0Myw3IEBAIGJvb2wg
WFNMVFByb2Nlc3Nvcjo6dHJhbnNmb3JtVG9TdHJpbmcoTm9kZSogc291cmNlTm9kZSwgU3RyaW5n
JiwgU3RyaW5nJiByZXN1bHRTCiAKICAgICBYU0xUUHJvY2Vzc29yOjpQYXJhbWV0ZXJNYXA6Oml0
ZXJhdG9yIGVuZCA9IG1fcGFyYW1ldGVycy5lbmQoKTsKICAgICBmb3IgKFhTTFRQcm9jZXNzb3I6
OlBhcmFtZXRlck1hcDo6aXRlcmF0b3IgaXQgPSBtX3BhcmFtZXRlcnMuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KQotICAgICAgICBxdWVyeS5iaW5kVmFyaWFibGUoUVN0cmluZyhpdC0+Zmlyc3Qp
LCBRWG1sSXRlbShRVmFyaWFudChRU3RyaW5nKGl0LT5zZWNvbmQpKSkpOworICAgICAgICBxdWVy
eS5iaW5kVmFyaWFibGUoUVN0cmluZyhpdC0+a2V5KSwgUVhtbEl0ZW0oUVZhcmlhbnQoUVN0cmlu
ZyhpdC0+dmFsdWUpKSkpOwogCiAgICAgUVN0cmluZyBzb3VyY2U7CiAgICAgaWYgKHNvdXJjZUlz
RG9jdW1lbnQgJiYgb3duZXJEb2N1bWVudC0+dHJhbnNmb3JtU291cmNlKCkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL0JhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2JsYWNrYmVycnkvQXBpL0JhY2tpbmdTdG9yZS5jcHAKaW5kZXggYTBmYTI5NS4uMzBm
ZDJkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9CYWNraW5nU3Rv
cmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvQmFja2luZ1N0b3JlLmNw
cApAQCAtNzkxLDggKzc5MSw4IEBAIHZvaWQgQmFja2luZ1N0b3JlUHJpdmF0ZTo6c2V0QmFja2lu
Z1N0b3JlUmVjdChjb25zdCBQbGF0Zm9ybTo6SW50UmVjdCYgYmFja2luZ1N0CiAgICAgLy8gb3Vy
IG5ldyBiYWNraW5nIHN0b3JlIHJlY3QuCiAgICAgVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgdGls
ZU1hcEVuZCA9IGN1cnJlbnRNYXAuZW5kKCk7CiAgICAgZm9yIChUaWxlTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IGN1cnJlbnRNYXAuYmVnaW4oKTsgaXQgIT0gdGlsZU1hcEVuZDsgKytpdCkgewot
ICAgICAgICBUaWxlSW5kZXggb2xkSW5kZXggPSBpdC0+Zmlyc3Q7Ci0gICAgICAgIEJhY2tpbmdT
dG9yZVRpbGUqIHRpbGUgPSBpdC0+c2Vjb25kOworICAgICAgICBUaWxlSW5kZXggb2xkSW5kZXgg
PSBpdC0+a2V5OworICAgICAgICBCYWNraW5nU3RvcmVUaWxlKiB0aWxlID0gaXQtPnZhbHVlOwog
CiAgICAgICAgIC8vIFJlc2V0IHRoZSBvbGQgaW5kZXguCiAgICAgICAgIHJlc2V0VGlsZShvbGRJ
bmRleCwgdGlsZSwgZmFsc2UgLypyZXNldEJhY2tncm91bmQqLyk7CkBAIC04NDgsOCArODQ4LDgg
QEAgdm9pZCBCYWNraW5nU3RvcmVQcml2YXRlOjpzZXRCYWNraW5nU3RvcmVSZWN0KGNvbnN0IFBs
YXRmb3JtOjpJbnRSZWN0JiBiYWNraW5nU3QKICAgICBzaXplX3QgaSA9IDA7CiAgICAgVGlsZU1h
cDo6Y29uc3RfaXRlcmF0b3IgbGVmdE92ZXJFbmQgPSBsZWZ0T3ZlclRpbGVzLmVuZCgpOwogICAg
IGZvciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsZWZ0T3ZlclRpbGVzLmJlZ2luKCk7
IGl0ICE9IGxlZnRPdmVyRW5kOyArK2l0KSB7Ci0gICAgICAgIFRpbGVJbmRleCBvbGRJbmRleCA9
IGl0LT5maXJzdDsKLSAgICAgICAgQmFja2luZ1N0b3JlVGlsZSogdGlsZSA9IGl0LT5zZWNvbmQ7
CisgICAgICAgIFRpbGVJbmRleCBvbGRJbmRleCA9IGl0LT5rZXk7CisgICAgICAgIEJhY2tpbmdT
dG9yZVRpbGUqIHRpbGUgPSBpdC0+dmFsdWU7CiAgICAgICAgIGlmIChpID49IGluZGV4ZXNUb0Zp
bGwuc2l6ZSgpKSB7CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAg
ICAgIGJyZWFrOwpAQCAtMTg0OSw3ICsxODQ5LDcgQEAgUGxhdGZvcm06OkludFJlY3QgQmFja2lu
Z1N0b3JlUHJpdmF0ZTo6dmlzaWJsZVRpbGVzUmVjdCgpIGNvbnN0CiAgICAgVGlsZU1hcDo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gY3VycmVudE1hcC5lbmQoKTsKICAgICBmb3IgKFRpbGVNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gY3VycmVudE1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
ICAgICAgICAgVGlsZVJlY3QgdGlsZVJlY3Q7Ci0gICAgICAgIHRpbGVSZWN0LmZpcnN0ID0gaXQt
PmZpcnN0OworICAgICAgICB0aWxlUmVjdC5maXJzdCA9IGl0LT5rZXk7CiAgICAgICAgIHRpbGVS
ZWN0LnNlY29uZCA9IHRoaXMtPnRpbGVSZWN0KCk7CiAgICAgICAgIFBsYXRmb3JtOjpJbnRSZWN0
IHRpbGUgPSBtYXBGcm9tVGlsZXNUb1RyYW5zZm9ybWVkQ29udGVudHModGlsZVJlY3QpOwogICAg
ICAgICBpZiAodGlsZS5pbnRlcnNlY3RzKHZpc2libGVDb250ZW50c1JlY3QoKSkpCkBAIC0xOTEw
LDcgKzE5MTAsNyBAQCB2b2lkIEJhY2tpbmdTdG9yZVByaXZhdGU6OnJlc2V0VGlsZXMoYm9vbCBy
ZXNldEJhY2tncm91bmQpCiAKICAgICBUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBjdXJy
ZW50TWFwLmVuZCgpOwogICAgIGZvciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjdXJy
ZW50TWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgcmVzZXRUaWxlKGl0LT5m
aXJzdCwgaXQtPnNlY29uZCwgcmVzZXRCYWNrZ3JvdW5kKTsKKyAgICAgICAgcmVzZXRUaWxlKGl0
LT5rZXksIGl0LT52YWx1ZSwgcmVzZXRCYWNrZ3JvdW5kKTsKIH0KIAogdm9pZCBCYWNraW5nU3Rv
cmVQcml2YXRlOjp1cGRhdGVUaWxlcyhib29sIHVwZGF0ZVZpc2libGUsIGJvb2wgaW1tZWRpYXRl
KQpAQCAtMTkyMywxMCArMTkyMywxMCBAQCB2b2lkIEJhY2tpbmdTdG9yZVByaXZhdGU6OnVwZGF0
ZVRpbGVzKGJvb2wgdXBkYXRlVmlzaWJsZSwgYm9vbCBpbW1lZGlhdGUpCiAKICAgICBUaWxlTWFw
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBjdXJyZW50TWFwLmVuZCgpOwogICAgIGZvciAoVGlsZU1h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjdXJyZW50TWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgewotICAgICAgICBib29sIGlzVmlzaWJsZSA9IGlzVGlsZVZpc2libGUoaXQtPmZpcnN0KTsK
KyAgICAgICAgYm9vbCBpc1Zpc2libGUgPSBpc1RpbGVWaXNpYmxlKGl0LT5rZXkpOwogICAgICAg
ICBpZiAoIXVwZGF0ZVZpc2libGUgJiYgaXNWaXNpYmxlKQogICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIHVwZGF0ZVRpbGUoaXQtPmZpcnN0LCBpbW1lZGlhdGUpOworICAgICAgICB1cGRh
dGVUaWxlKGl0LT5rZXksIGltbWVkaWF0ZSk7CiAgICAgfQogfQogCkBAIC0xOTQ3LDggKzE5NDcs
OCBAQCB2b2lkIEJhY2tpbmdTdG9yZVByaXZhdGU6OnVwZGF0ZVRpbGVzRm9yU2Nyb2xsT3JOb3RS
ZW5kZXJlZFJlZ2lvbihib29sIGNoZWNrTG9hZAogCiAgICAgVGlsZU1hcDo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gY3VycmVudE1hcC5lbmQoKTsKICAgICBmb3IgKFRpbGVNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gY3VycmVudE1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAg
VGlsZUluZGV4IGluZGV4ID0gaXQtPmZpcnN0OwotICAgICAgICBCYWNraW5nU3RvcmVUaWxlKiB0
aWxlID0gaXQtPnNlY29uZDsKKyAgICAgICAgVGlsZUluZGV4IGluZGV4ID0gaXQtPmtleTsKKyAg
ICAgICAgQmFja2luZ1N0b3JlVGlsZSogdGlsZSA9IGl0LT52YWx1ZTsKICAgICAgICAgYm9vbCBp
c1Zpc2libGUgPSBpc1RpbGVWaXNpYmxlKGluZGV4KTsKICAgICAgICAgLy8gVGhlIHJlY3QgaW4g
dHJhbnNmb3JtZWQgY29udGVudHMgY29vcmRpbmF0ZXMuCiAgICAgICAgIFBsYXRmb3JtOjpJbnRS
ZWN0IHJlY3Qob3JpZ2luT2ZUaWxlKGluZGV4KSwgdGlsZVNpemUoKSk7CkBAIC0yMDkxLDggKzIw
OTEsOCBAQCBCYWNraW5nU3RvcmVQcml2YXRlOjpUaWxlUmVjdExpc3QgQmFja2luZ1N0b3JlUHJp
dmF0ZTo6bWFwRnJvbVRyYW5zZm9ybWVkQ29udGVudAogICAgIFRpbGVSZWN0TGlzdCB0aWxlUmVj
dExpc3Q7CiAgICAgVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gdGlsZU1hcC5lbmQoKTsK
ICAgICBmb3IgKFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdGlsZU1hcC5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgVGlsZUluZGV4IGluZGV4ID0gaXQtPmZpcnN0Owot
ICAgICAgICBCYWNraW5nU3RvcmVUaWxlKiB0aWxlID0gaXQtPnNlY29uZDsKKyAgICAgICAgVGls
ZUluZGV4IGluZGV4ID0gaXQtPmtleTsKKyAgICAgICAgQmFja2luZ1N0b3JlVGlsZSogdGlsZSA9
IGl0LT52YWx1ZTsKIAogICAgICAgICAvLyBOZWVkIHRvIG1hcCB0aGUgcmVjdCB0byB0aWxlIGNv
b3JkaW5hdGVzLgogICAgICAgICBQbGF0Zm9ybTo6SW50UmVjdCByID0gcmVjdDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25Q
cmVzZW50ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9y
dC9Ob3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmNwcAppbmRleCA2YjI5MjEwLi4yY2Q3YzE3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvTm90aWZp
Y2F0aW9uUHJlc2VudGVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dl
YkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlckltcGwuY3BwCkBAIC04MSw3ICs4MSw3
IEBAIHZvaWQgTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6Y2FuY2VsKE5vdGlmaWNhdGlvbiog
bm90aWZpY2F0aW9uKQogICAgIGlmIChpdCA9PSBtX25vdGlmaWNhdGlvbnMuZW5kKCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIG1fcGxhdGZvcm1QcmVzZW50ZXItPmNhbmNlbChzdGQ6OnN0cmlu
ZyhpdC0+c2Vjb25kLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICBtX3BsYXRmb3JtUHJlc2VudGVyLT5j
YW5jZWwoc3RkOjpzdHJpbmcoaXQtPnZhbHVlLnV0ZjgoKS5kYXRhKCkpKTsKICAgICBtX25vdGlm
aWNhdGlvbnMucmVtb3ZlKGl0KTsKIH0KIApAQCAtMTA4LDEyICsxMDgsMTIgQEAgdm9pZCBOb3Rp
ZmljYXRpb25QcmVzZW50ZXJJbXBsOjpvblBlcm1pc3Npb24oY29uc3Qgc3RkOjpzdHJpbmcmIGRv
bWFpbiwgYm9vbCBpc0EKICAgICBTdHJpbmcgZG9tYWluU3RyaW5nID0gU3RyaW5nOjpmcm9tVVRG
OChkb21haW4uY19zdHIoKSk7CiAgICAgUGVybWlzc2lvblJlcXVlc3RNYXA6Oml0ZXJhdG9yIGl0
ID0gbV9wZXJtaXNzaW9uUmVxdWVzdHMuYmVnaW4oKTsKICAgICBmb3IgKDsgaXQgIT0gbV9wZXJt
aXNzaW9uUmVxdWVzdHMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5maXJzdC0+dXJs
KCkuaG9zdCgpICE9IGRvbWFpblN0cmluZykKKyAgICAgICAgaWYgKGl0LT5rZXktPnVybCgpLmhv
c3QoKSAhPSBkb21haW5TdHJpbmcpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBp
ZiAoaXNBbGxvd2VkKSB7CiAgICAgICAgICAgICBtX2FsbG93ZWREb21haW5zLmFkZChkb21haW5T
dHJpbmcpOwotICAgICAgICAgICAgaXQtPnNlY29uZC0+aGFuZGxlRXZlbnQoKTsKKyAgICAgICAg
ICAgIGl0LT52YWx1ZS0+aGFuZGxlRXZlbnQoKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAg
ICBtX2FsbG93ZWREb21haW5zLnJlbW92ZShkb21haW5TdHJpbmcpOwogCkBAIC0xNDQsOSArMTQ0
LDkgQEAgdm9pZCBOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpub3RpZmljYXRpb25DbGlja2Vk
KGNvbnN0IHN0ZDo6c3RyaW5nJiBpZCkKICAgICBTdHJpbmcgaWRTdHJpbmcgPSBTdHJpbmc6OmZy
b21VVEY4KGlkLmNfc3RyKCkpOwogICAgIE5vdGlmaWNhdGlvbk1hcDo6aXRlcmF0b3IgaXQgPSBt
X25vdGlmaWNhdGlvbnMuYmVnaW4oKTsKICAgICBmb3IgKDsgaXQgIT0gbV9ub3RpZmljYXRpb25z
LmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kID09IGlkU3RyaW5nICYmIGl0
LT5maXJzdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSB7Ci0gICAgICAgICAgICBSZWZQdHI8
Tm90aWZpY2F0aW9uPiBub3RpZmljYXRpb24gPSBpdC0+Zmlyc3Q7Ci0gICAgICAgICAgICBpdC0+
Zmlyc3QtPmRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuY2xpY2tFdmVu
dCwgZmFsc2UsIHRydWUpKTsKKyAgICAgICAgaWYgKGl0LT52YWx1ZSA9PSBpZFN0cmluZyAmJiBp
dC0+Zmlyc3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkgeworICAgICAgICAgICAgUmVmUHRy
PE5vdGlmaWNhdGlvbj4gbm90aWZpY2F0aW9uID0gaXQtPmtleTsKKyAgICAgICAgICAgIGl0LT5r
ZXktPmRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuY2xpY2tFdmVudCwg
ZmFsc2UsIHRydWUpKTsKICAgICAgICAgICAgIG1fbm90aWZpY2F0aW9ucy5yZW1vdmUobm90aWZp
Y2F0aW9uKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvQWJvdXREYXRhLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0Fib3V0RGF0YS5jcHAKaW5kZXggNWY1
NjVjOS4uMTM0ODA4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktp
dFN1cHBvcnQvQWJvdXREYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2Vi
S2l0U3VwcG9ydC9BYm91dERhdGEuY3BwCkBAIC0yMDUsNyArMjA1LDcgQEAgc3RhdGljIHZvaWQg
ZHVtcEpTQ1R5cGVDb3VudFNldFRvVGFibGVIVE1MKFN0cmluZyYgdGFibGVIVE1MLCBKU0M6OlR5
cGVDb3VudFNldCoKICAgICAgICAgcmV0dXJuOwogCiAgICAgZm9yIChKU0M6OlR5cGVDb3VudFNl
dDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHR5cGVDb3VudFNldC0+YmVnaW4oKTsgaXRlciAhPSB0
eXBlQ291bnRTZXQtPmVuZCgpOyArK2l0ZXIpCi0gICAgICAgIHRhYmxlSFRNTCArPSBudW1iZXJU
b0hUTUxUcihpdGVyLT5maXJzdCwgaXRlci0+c2Vjb25kKTsKKyAgICAgICAgdGFibGVIVE1MICs9
IG51bWJlclRvSFRNTFRyKGl0ZXItPmtleSwgaXRlci0+dmFsdWUpOwogfQogCiBzdGF0aWMgU3Ry
aW5nIG1lbW9yeVBhZ2UoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dl
YktpdFN1cHBvcnQvRnJhbWVMYXllcnMuY3BwIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dl
YktpdFN1cHBvcnQvRnJhbWVMYXllcnMuY3BwCmluZGV4IGI4NzU2NDYuLmViNzIzYWUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0ZyYW1lTGF5ZXJz
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9GcmFtZUxh
eWVycy5jcHAKQEAgLTkxLDcgKzkxLDcgQEAgdm9pZCBGcmFtZUxheWVyczo6cmVtb3ZlTGF5ZXJC
eUZyYW1lKEZyYW1lKiBmcmFtZSkKICAgICBBU1NFUlQoZnJhbWUpOwogICAgIEZyYW1lTGF5ZXJN
YXA6Oml0ZXJhdG9yIGl0ID0gbV9mcmFtZUxheWVycy5maW5kKGZyYW1lKTsKICAgICBpZiAoaXQg
IT0gbV9mcmFtZUxheWVycy5lbmQoKSkgewotICAgICAgICBMYXllcldlYktpdFRocmVhZCogbGF5
ZXIgPSBpdC0+c2Vjb25kOworICAgICAgICBMYXllcldlYktpdFRocmVhZCogbGF5ZXIgPSBpdC0+
dmFsdWU7CiAgICAgICAgIGlmIChsYXllci0+c3VwZXJsYXllcigpKQogICAgICAgICAgICAgbGF5
ZXItPnJlbW92ZUZyb21TdXBlcmxheWVyKCk7CiAgICAgICAgIG1fZnJhbWVMYXllcnMucmVtb3Zl
KGl0KTsKQEAgLTEwNCw3ICsxMDQsNyBAQCB2b2lkIEZyYW1lTGF5ZXJzOjpjb21taXRPbldlYktp
dFRocmVhZChkb3VibGUgc2NhbGUpCiAgICAgQVNTRVJUKG1fcm9vdExheWVyKTsKICAgICBpZiAo
IWlzUm9vdExheWVyTWFpbkZyYW1lTGF5ZXIoKSkgewogICAgICAgICBmb3IgKEZyYW1lTGF5ZXJN
YXA6Oml0ZXJhdG9yIGl0ID0gbV9mcmFtZUxheWVycy5iZWdpbigpOyBpdCAhPSBtX2ZyYW1lTGF5
ZXJzLmVuZCgpOyArK2l0KQotICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0QWJzb2x1dGVPZmZz
ZXQoZnJhbWVMYXllckFic29sdXRlT2Zmc2V0KGl0LT5maXJzdCkpOworICAgICAgICAgICAgaXQt
PnZhbHVlLT5zZXRBYnNvbHV0ZU9mZnNldChmcmFtZUxheWVyQWJzb2x1dGVPZmZzZXQoaXQtPmtl
eSkpOwogICAgIH0KICAgICBtX3Jvb3RMYXllci0+Y29tbWl0T25XZWJLaXRUaHJlYWQoc2NhbGUp
OwogfQpAQCAtMTEyLDcgKzExMiw3IEBAIHZvaWQgRnJhbWVMYXllcnM6OmNvbW1pdE9uV2ViS2l0
VGhyZWFkKGRvdWJsZSBzY2FsZSkKIHZvaWQgRnJhbWVMYXllcnM6OmNhbGN1bGF0ZVJvb3RMYXll
cigpCiB7CiAgICAgaWYgKG1fZnJhbWVMYXllcnMuc2l6ZSgpID09IDEgJiYgbV9mcmFtZUxheWVy
cy5iZWdpbigpLT5maXJzdCA9PSBtX3BhZ2VQcml2YXRlLT5tX21haW5GcmFtZSkKLSAgICAgICAg
bV9yb290TGF5ZXIgPSBtX2ZyYW1lTGF5ZXJzLmJlZ2luKCktPnNlY29uZDsKKyAgICAgICAgbV9y
b290TGF5ZXIgPSBtX2ZyYW1lTGF5ZXJzLmJlZ2luKCktPnZhbHVlOwogICAgIGVsc2UgaWYgKG1f
cm9vdEdyYXBoaWNzTGF5ZXIpCiAgICAgICAgIG1fcm9vdExheWVyID0gbV9yb290R3JhcGhpY3NM
YXllci0+cGxhdGZvcm1MYXllcigpOwogICAgIGVsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyLmNw
cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdlb2xvY2F0aW9uUGVybWlzc2lvblJl
cXVlc3RNYW5hZ2VyLmNwcAppbmRleCA0YzBlZDljLi4xZWVhYzY2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFu
YWdlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViR2VvbG9jYXRpb25Q
ZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuY3BwCkBAIC02NCw3ICs2NCw3IEBAIGJvb2wgV2ViR2Vv
bG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXI6OnJlbW92ZShjb25zdCBXZWJLaXQ6Oldl
Ykdlb2xvY2F0aW9uCiAgICAgR2VvbG9jYXRpb25JZE1hcDo6aXRlcmF0b3IgaXQgPSBtX3ByaXZh
dGUtPm1fZ2VvbG9jYXRpb25JZE1hcC5maW5kKGdlb2xvY2F0aW9uKTsKICAgICBpZiAoaXQgPT0g
bV9wcml2YXRlLT5tX2dlb2xvY2F0aW9uSWRNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBpZCA9IGl0LT5zZWNvbmQ7CisgICAgaWQgPSBpdC0+dmFsdWU7CiAgICAgbV9wcml2
YXRlLT5tX2dlb2xvY2F0aW9uSWRNYXAucmVtb3ZlKGl0KTsKICAgICBtX3ByaXZhdGUtPm1faWRH
ZW9sb2NhdGlvbk1hcC5yZW1vdmUoaWQpOwogICAgIHJldHVybiB0cnVlOwpAQCAtNzUsNyArNzUs
NyBAQCBib29sIFdlYkdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyOjpyZW1vdmUo
aW50IGlkLCBXZWJLaXQ6OldlYkdlb2xvY2F0aQogICAgIElkR2VvbG9jYXRpb25NYXA6Oml0ZXJh
dG9yIGl0ID0gbV9wcml2YXRlLT5tX2lkR2VvbG9jYXRpb25NYXAuZmluZChpZCk7CiAgICAgaWYg
KGl0ID09IG1fcHJpdmF0ZS0+bV9pZEdlb2xvY2F0aW9uTWFwLmVuZCgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgR2VvbG9jYXRpb24qIGdlb2xvY2F0aW9uID0gaXQtPnNlY29uZDsKKyAg
ICBHZW9sb2NhdGlvbiogZ2VvbG9jYXRpb24gPSBpdC0+dmFsdWU7CiAgICAgcGVybWlzc2lvblJl
cXVlc3QgPSBXZWJHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0KGdlb2xvY2F0aW9uKTsKICAg
ICBtX3ByaXZhdGUtPm1faWRHZW9sb2NhdGlvbk1hcC5yZW1vdmUoaXQpOwogICAgIG1fcHJpdmF0
ZS0+bV9nZW9sb2NhdGlvbklkTWFwLnJlbW92ZShnZW9sb2NhdGlvbik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJNZXRhZGF0YS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJJREJNZXRhZGF0YS5jcHAKaW5kZXggMDFkODc4YS4uZjJmYzI4
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCTWV0YWRhdGEu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQk1ldGFkYXRhLmNwcApA
QCAtNDYsNyArNDYsNyBAQCBXZWJJREJNZXRhZGF0YTo6V2ViSURCTWV0YWRhdGEoY29uc3QgV2Vi
Q29yZTo6SURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEpCiAKICAgICBzaXplX3QgaSA9IDA7
CiAgICAgZm9yIChJREJEYXRhYmFzZU1ldGFkYXRhOjpPYmplY3RTdG9yZU1hcDo6Y29uc3RfaXRl
cmF0b3Igc3RvcmVJdGVyYXRvciA9IG1ldGFkYXRhLm9iamVjdFN0b3Jlcy5iZWdpbigpOyBzdG9y
ZUl0ZXJhdG9yICE9IG1ldGFkYXRhLm9iamVjdFN0b3Jlcy5lbmQoKTsgKytzdG9yZUl0ZXJhdG9y
KSB7Ci0gICAgICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlID0g
c3RvcmVJdGVyYXRvci0+c2Vjb25kOworICAgICAgICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFk
YXRhJiBvYmplY3RTdG9yZSA9IHN0b3JlSXRlcmF0b3ItPnZhbHVlOwogICAgICAgICBPYmplY3RT
dG9yZSB3ZWJPYmplY3RTdG9yZTsKICAgICAgICAgd2ViT2JqZWN0U3RvcmUubmFtZSA9IG9iamVj
dFN0b3JlLm5hbWU7CiAgICAgICAgIHdlYk9iamVjdFN0b3JlLmtleVBhdGggPSBvYmplY3RTdG9y
ZS5rZXlQYXRoOwpAQCAtNTUsNyArNTUsNyBAQCBXZWJJREJNZXRhZGF0YTo6V2ViSURCTWV0YWRh
dGEoY29uc3QgV2ViQ29yZTo6SURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEpCiAKICAgICAg
ICAgc2l6ZV90IGogPSAwOwogICAgICAgICBmb3IgKElEQk9iamVjdFN0b3JlTWV0YWRhdGE6Oklu
ZGV4TWFwOjpjb25zdF9pdGVyYXRvciBpbmRleEl0ZXJhdG9yID0gb2JqZWN0U3RvcmUuaW5kZXhl
cy5iZWdpbigpOyBpbmRleEl0ZXJhdG9yICE9IG9iamVjdFN0b3JlLmluZGV4ZXMuZW5kKCk7ICsr
aW5kZXhJdGVyYXRvcikgewotICAgICAgICAgICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5k
ZXggPSBpbmRleEl0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgICAgICBjb25zdCBJREJJbmRleE1l
dGFkYXRhJiBpbmRleCA9IGluZGV4SXRlcmF0b3ItPnZhbHVlOwogICAgICAgICAgICAgSW5kZXgg
d2ViSW5kZXg7CiAgICAgICAgICAgICB3ZWJJbmRleC5uYW1lID0gaW5kZXgubmFtZTsKICAgICAg
ICAgICAgIHdlYkluZGV4LmtleVBhdGggPSBpbmRleC5rZXlQYXRoOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW50ZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYkludGVudC5jcHAKaW5kZXggNTU3NzVlYy4uMDQxYzdmMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW50ZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJbnRlbnQuY3BwCkBAIC0xODgsNyArMTg4LDcgQEAgV2Vi
U3RyaW5nIFdlYkludGVudDo6ZXh0cmFzVmFsdWUoY29uc3QgV2ViU3RyaW5nJiBuYW1lKSBjb25z
dAogICAgIFdURjo6SGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIHZhbCA9
IG1fcHJpdmF0ZS0+ZXh0cmFzKCkuZmluZChuYW1lKTsKICAgICBpZiAodmFsID09IG1fcHJpdmF0
ZS0+ZXh0cmFzKCkuZW5kKCkpCiAgICAgICAgIHJldHVybiBXZWJTdHJpbmcoKTsKLSAgICByZXR1
cm4gdmFsLT5zZWNvbmQ7CisgICAgcmV0dXJuIHZhbC0+dmFsdWU7CiAjZWxzZQogICAgIHJldHVy
biBXZWJTdHJpbmcoKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9XZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyVGVzdC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL1dlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXJUZXN0LmNwcApp
bmRleCAzNTg5ODNiLi4yNDUxNGNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL1dlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXJUZXN0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXJUZXN0LmNw
cApAQCAtMTAzLDEwICsxMDMsMTAgQEAgVEVTVF9GKFdlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNo
ZXJUZXN0LCBUZXN0UGFyYW1ldGVycykKICAgICBFWFBFQ1RfRVEoMiwgbV9wYXJzZWRQYXJhbWV0
ZXJzWzBdLnNpemUoKSk7CiAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46Oml0ZXJhdG9yIHBh
cmFtZXRlciA9IG1fcGFyc2VkUGFyYW1ldGVyc1swXS5maW5kKCJtYXgtY2hhbm5lbHMiKTsKICAg
ICBFWFBFQ1RfVFJVRShwYXJhbWV0ZXIgIT0gbV9wYXJzZWRQYXJhbWV0ZXJzWzBdLmVuZCgpKTsK
LSAgICBFWFBFQ1RfRVEoIjQiLCBwYXJhbWV0ZXItPnNlY29uZCk7CisgICAgRVhQRUNUX0VRKCI0
IiwgcGFyYW1ldGVyLT52YWx1ZSk7CiAgICAgcGFyYW1ldGVyID0gbV9wYXJzZWRQYXJhbWV0ZXJz
WzBdLmZpbmQoImZsb3ctY29udHJvbCIpOwogICAgIEVYUEVDVF9UUlVFKHBhcmFtZXRlciAhPSBt
X3BhcnNlZFBhcmFtZXRlcnNbMF0uZW5kKCkpOwotICAgIEVYUEVDVF9UUlVFKHBhcmFtZXRlci0+
c2Vjb25kLmlzTnVsbCgpKTsKKyAgICBFWFBFQ1RfVFJVRShwYXJhbWV0ZXItPnZhbHVlLmlzTnVs
bCgpKTsKIH0KIAogVEVTVF9GKFdlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXJUZXN0LCBUZXN0
TXVsdGlwbGUpCkBAIC0xMzEsMTIgKzEzMSwxMiBAQCBURVNUX0YoV2ViU29ja2V0RXh0ZW5zaW9u
RGlzcGF0Y2hlclRlc3QsIFRlc3RNdWx0aXBsZSkKICAgICAgICAgY29uc3QgSGFzaE1hcDxTdHJp
bmcsIFN0cmluZz4mIHBhcnNlZFBhcmFtZXRlcnMgPSBtX3BhcnNlZFBhcmFtZXRlcnNbaV07CiAg
ICAgICAgIEVYUEVDVF9FUShleHBlY3RlZFtpXS5wYXJhbWV0ZXJzLnNpemUoKSwgbV9wYXJzZWRQ
YXJhbWV0ZXJzW2ldLnNpemUoKSk7CiAgICAgICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIFN0cmlu
Zz46OmNvbnN0X2l0ZXJhdG9yIGl0ZXJhdG9yID0gZXhwZWN0ZWRQYXJhbWV0ZXJzLmJlZ2luKCk7
IGl0ZXJhdG9yICE9IGV4cGVjdGVkUGFyYW1ldGVycy5lbmQoKTsgKytpdGVyYXRvcikgewotICAg
ICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIHBhcnNlZCA9
IHBhcnNlZFBhcmFtZXRlcnMuZmluZChpdGVyYXRvci0+Zmlyc3QpOworICAgICAgICAgICAgSGFz
aE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIHBhcnNlZCA9IHBhcnNlZFBhcmFt
ZXRlcnMuZmluZChpdGVyYXRvci0+a2V5KTsKICAgICAgICAgICAgIEVYUEVDVF9UUlVFKHBhcnNl
ZCAhPSBwYXJzZWRQYXJhbWV0ZXJzLmVuZCgpKTsKLSAgICAgICAgICAgIGlmIChpdGVyYXRvci0+
c2Vjb25kLmlzTnVsbCgpKQotICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVFKHBhcnNlZC0+c2Vj
b25kLmlzTnVsbCgpKTsKKyAgICAgICAgICAgIGlmIChpdGVyYXRvci0+dmFsdWUuaXNOdWxsKCkp
CisgICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUocGFyc2VkLT52YWx1ZS5pc051bGwoKSk7CiAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgRVhQRUNUX0VRKGl0ZXJhdG9yLT5zZWNv
bmQsIHBhcnNlZC0+c2Vjb25kKTsKKyAgICAgICAgICAgICAgICBFWFBFQ1RfRVEoaXRlcmF0b3It
PnZhbHVlLCBwYXJzZWQtPnZhbHVlKTsKICAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc0VmbC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNF
ZmwuY3BwCmluZGV4IDViNDAzMDguLjA5OGQzMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
ZWZsL1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc0VmbC5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzRWZsLmNwcApAQCAt
OTksOCArOTksOCBAQCB2b2lkIFBsYXRmb3JtU3RyYXRlZ2llc0VmbDo6Z2V0UGx1Z2luSW5mbyhj
b25zdCBQYWdlKiBwYWdlLCBWZWN0b3I8UGx1Z2luSW5mbz4mCiAgICAgICAgIGZvciAoTUlNRVRv
RGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIE1pbWVDbGFzc0luZm8gbWlt
ZTsKIAotICAgICAgICAgICAgbWltZS50eXBlID0gaXQtPmZpcnN0OwotICAgICAgICAgICAgbWlt
ZS5kZXNjID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIG1pbWUudHlwZSA9IGl0LT5rZXk7Cisg
ICAgICAgICAgICBtaW1lLmRlc2MgPSBpdC0+dmFsdWU7CiAgICAgICAgICAgICBtaW1lLmV4dGVu
c2lvbnMgPSBwYWNrYWdlLT5taW1lVG9FeHRlbnNpb25zKCkuZ2V0KG1pbWUudHlwZSk7CiAgICAg
ICAgICAgICBwbHVnaW5JbmZvLm1pbWVzLmFwcGVuZChtaW1lKTsKICAgICAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19pbnRlbnQuY3BwIGIvU291cmNlL1dlYktp
dC9lZmwvZXdrL2V3a19pbnRlbnQuY3BwCmluZGV4IDc2YzJkNjguLjgzYmNlODcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfaW50ZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2VmbC9ld2svZXdrX2ludGVudC5jcHAKQEAgLTEyMCw3ICsxMjAsNyBAQCBjb25zdCBjaGFy
KiBld2tfaW50ZW50X2V4dHJhX2dldChjb25zdCBFd2tfSW50ZW50KiBpbnRlbnQsIGNvbnN0IGNo
YXIqIGtleSkKICAgICBXVEY6Okhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRv
ciB2YWwgPSBjb3JlLT5leHRyYXMoKS5maW5kKFN0cmluZzo6ZnJvbVVURjgoa2V5KSk7CiAgICAg
aWYgKHZhbCA9PSBjb3JlLT5leHRyYXMoKS5lbmQoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
cmV0dXJuIGVpbmFfc3RyaW5nc2hhcmVfYWRkKHZhbC0+c2Vjb25kLnV0ZjgoKS5kYXRhKCkpOwor
ICAgIHJldHVybiBlaW5hX3N0cmluZ3NoYXJlX2FkZCh2YWwtPnZhbHVlLnV0ZjgoKS5kYXRhKCkp
OwogI2Vsc2UKICAgICByZXR1cm4gMDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9ndGsvV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzR3RrLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc0d0ay5jcHAKaW5kZXgg
MjkyMTczYS4uOTEwM2M4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1
cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzR3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9X
ZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNHdGsuY3BwCkBAIC04OCw4ICs4OCw4IEBA
IHZvaWQgUGxhdGZvcm1TdHJhdGVnaWVzR3RrOjpnZXRQbHVnaW5JbmZvKGNvbnN0IFBhZ2UqIHBh
Z2UsIFZlY3RvcjxQbHVnaW5JbmZvPiYKICAgICAgICAgTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpj
b25zdF9pdGVyYXRvciBlbmQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuZW5kKCk7CiAgICAgICAgIGZv
ciAoTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1pbWVUb0Rlc2Ny
aXB0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIE1pbWVDbGFz
c0luZm8gbWltZTsKLSAgICAgICAgICAgIG1pbWUudHlwZSA9IGl0LT5maXJzdDsKLSAgICAgICAg
ICAgIG1pbWUuZGVzYyA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICBtaW1lLnR5cGUgPSBpdC0+
a2V5OworICAgICAgICAgICAgbWltZS5kZXNjID0gaXQtPnZhbHVlOwogICAgICAgICAgICAgbWlt
ZS5leHRlbnNpb25zID0gcGFja2FnZS0+bWltZVRvRXh0ZW5zaW9ucygpLmdldChtaW1lLnR5cGUp
OwogICAgICAgICAgICAgcGx1Z2luSW5mby5taW1lcy5hcHBlbmQobWltZSk7CiAgICAgICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRmYXZpY29uZGF0YWJh
c2UuY3BwIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGZhdmljb25kYXRhYmFzZS5j
cHAKaW5kZXggNmJhYmZlNC4uYjNhMWQ3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdGZhdmljb25kYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdGZhdmljb25kYXRhYmFzZS5jcHAKQEAgLTYxNCwxOCArNjE0LDE4IEBAIHN0
YXRpYyB2b2lkIHdlYmtpdEZhdmljb25EYXRhYmFzZUltcG9ydEZpbmlzaGVkKFdlYktpdEZhdmlj
b25EYXRhYmFzZSogZGF0YWJhc2UpCiAgICAgVmVjdG9yPFN0cmluZz4gdG9EZWxldGVVUkxzOwog
ICAgIFBlbmRpbmdJY29uUmVxdWVzdE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gZGF0YWJhc2Ut
PnByaXYtPnBlbmRpbmdJY29uUmVxdWVzdHMuZW5kKCk7CiAgICAgZm9yIChQZW5kaW5nSWNvblJl
cXVlc3RNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBkYXRhYmFzZS0+cHJpdi0+cGVuZGluZ0lj
b25SZXF1ZXN0cy5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0gICAgICAgIFN0cmlu
ZyBpY29uVVJMID0gaWNvbkRhdGFiYXNlKCkuc3luY2hyb25vdXNJY29uVVJMRm9yUGFnZVVSTChp
dGVyLT5maXJzdCk7CisgICAgICAgIFN0cmluZyBpY29uVVJMID0gaWNvbkRhdGFiYXNlKCkuc3lu
Y2hyb25vdXNJY29uVVJMRm9yUGFnZVVSTChpdGVyLT5rZXkpOwogICAgICAgICBpZiAoIWljb25V
UkwuaXNFbXB0eSgpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgUGVuZGluZ0lj
b25SZXF1ZXN0VmVjdG9yKiBpY29ucyA9IGl0ZXItPnNlY29uZDsKKyAgICAgICAgUGVuZGluZ0lj
b25SZXF1ZXN0VmVjdG9yKiBpY29ucyA9IGl0ZXItPnZhbHVlOwogICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGljb25zLT5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgUGVuZGluZ0lj
b25SZXF1ZXN0KiByZXF1ZXN0ID0gaWNvbnMtPmF0KGkpLmdldCgpOwogICAgICAgICAgICAgaWYg
KHJlcXVlc3QtPmFzeW5jUmVzdWx0KCkpCiAgICAgICAgICAgICAgICAgcmVxdWVzdC0+YXN5bmNS
ZXN1bHRDb21wbGV0ZSgwKTsKICAgICAgICAgfQogCi0gICAgICAgIHRvRGVsZXRlVVJMcy5hcHBl
bmQoaXRlci0+Zmlyc3QpOworICAgICAgICB0b0RlbGV0ZVVSTHMuYXBwZW5kKGl0ZXItPmtleSk7
CiAgICAgfQogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0b0RlbGV0ZVVSTHMuc2l6ZSgp
OyArK2kpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2VicGx1
Z2luLmNwcCBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJwbHVnaW4uY3BwCmlu
ZGV4IGUwM2IxZWEuLjAxZDBiYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXR3ZWJwbHVnaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXR3ZWJwbHVnaW4uY3BwCkBAIC0yMzcsMTAgKzIzNywxMCBAQCBHU0xpc3QqIHdlYmtpdF93ZWJf
cGx1Z2luX2dldF9taW1ldHlwZXMoV2ViS2l0V2ViUGx1Z2luKiBwbHVnaW4pCiAKICAgICBmb3Ig
KE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtaW1lVG9EZXNjcmlw
dGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIFdlYktpdFdlYlBsdWdp
bk1JTUVUeXBlKiBtaW1lVHlwZSA9IGdfc2xpY2VfbmV3MChXZWJLaXRXZWJQbHVnaW5NSU1FVHlw
ZSk7Ci0gICAgICAgIG1pbWVUeXBlLT5uYW1lID0gZ19zdHJkdXAoaXQtPmZpcnN0LnV0ZjgoKS5k
YXRhKCkpOwotICAgICAgICBtaW1lVHlwZS0+ZGVzY3JpcHRpb24gPSBnX3N0cmR1cChpdC0+c2Vj
b25kLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBtaW1lVHlwZS0+bmFtZSA9IGdfc3RyZHVwKGl0
LT5rZXkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIG1pbWVUeXBlLT5kZXNjcmlwdGlvbiA9IGdf
c3RyZHVwKGl0LT52YWx1ZS51dGY4KCkuZGF0YSgpKTsKIAotICAgICAgICBWZWN0b3I8U3RyaW5n
PiBleHRlbnNpb25zID0gcHJpdi0+Y29yZVBsdWdpbi0+bWltZVRvRXh0ZW5zaW9ucygpLmdldChp
dC0+Zmlyc3QpOworICAgICAgICBWZWN0b3I8U3RyaW5nPiBleHRlbnNpb25zID0gcHJpdi0+Y29y
ZVBsdWdpbi0+bWltZVRvRXh0ZW5zaW9ucygpLmdldChpdC0+a2V5KTsKICAgICAgICAgbWltZVR5
cGUtPmV4dGVuc2lvbnMgPSBzdGF0aWNfY2FzdDxnY2hhcioqPihnX21hbGxvYzAoc2l6ZW9mKGNo
YXIqKSAqIChleHRlbnNpb25zLnNpemUoKSArIDEpKSk7CiAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBleHRlbnNpb25zLnNpemUoKTsgaSsrKQogICAgICAgICAgICAgbWltZVR5cGUt
PmV4dGVuc2lvbnNbaV0gPSBnX3N0cmR1cChleHRlbnNpb25zW2ldLnV0ZjgoKS5kYXRhKCkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvSGlzdG9yeS9XZWJIaXN0b3J5Lm1tIGIvU291
cmNlL1dlYktpdC9tYWMvSGlzdG9yeS9XZWJIaXN0b3J5Lm1tCmluZGV4IDY5NjRmYzkuLmU3ODFk
MzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL0hpc3RvcnkvV2ViSGlzdG9yeS5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0L21hYy9IaXN0b3J5L1dlYkhpc3RvcnkubW0KQEAgLTIzOCw3ICsy
MzgsNyBAQCBzdGF0aWMgaW5saW5lIFdlYkhpc3RvcnlEYXRlS2V5IGRhdGVLZXkoTlNUaW1lSW50
ZXJ2YWwgZGF0ZSkKICAgICAgICAgcmV0dXJuIE5POwogCiAgICAgRGF0ZVRvRW50cmllc01hcDo6
aXRlcmF0b3IgaXQgPSBfZW50cmllc0J5RGF0ZS0+ZmluZChkYXRlS2V5KTsKLSAgICBOU011dGFi
bGVBcnJheSAqZW50cmllc0ZvckRhdGUgPSBpdC0+c2Vjb25kLmdldCgpOworICAgIE5TTXV0YWJs
ZUFycmF5ICplbnRyaWVzRm9yRGF0ZSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICBbZW50cmllc0Zv
ckRhdGUgcmVtb3ZlT2JqZWN0SWRlbnRpY2FsVG86ZW50cnldOwogICAgIAogICAgIC8vIHJlbW92
ZSB0aGlzIGRhdGUgZW50aXJlbHkgaWYgdGhlcmUgYXJlIG5vIG90aGVyIGVudHJpZXMgb24gaXQK
QEAgLTQ0MCw3ICs0NDAsNyBAQCBzdGF0aWMgaW5saW5lIFdlYkhpc3RvcnlEYXRlS2V5IGRhdGVL
ZXkoTlNUaW1lSW50ZXJ2YWwgZGF0ZSkKICAgICAgICAgZGF5c0FzVGltZUludGVydmFscy5yZXNl
cnZlQ2FwYWNpdHkoX2VudHJpZXNCeURhdGUtPnNpemUoKSk7CiAgICAgICAgIERhdGVUb0VudHJp
ZXNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IF9lbnRyaWVzQnlEYXRlLT5lbmQoKTsKICAgICAg
ICAgZm9yIChEYXRlVG9FbnRyaWVzTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IF9lbnRyaWVzQnlE
YXRlLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBkYXlzQXNUaW1lSW50
ZXJ2YWxzLmFwcGVuZChpdC0+Zmlyc3QpOworICAgICAgICAgICAgZGF5c0FzVGltZUludGVydmFs
cy5hcHBlbmQoaXQtPmtleSk7CiAKICAgICAgICAgc29ydChkYXlzQXNUaW1lSW50ZXJ2YWxzLmJl
Z2luKCksIGRheXNBc1RpbWVJbnRlcnZhbHMuZW5kKCkpOwogICAgICAgICBzaXplX3QgY291bnQg
PSBkYXlzQXNUaW1lSW50ZXJ2YWxzLnNpemUoKTsKQEAgLTg5Nyw3ICs4OTcsNyBAQCBXZWJIaXN0
b3J5V3JpdGVyOjpXZWJIaXN0b3J5V3JpdGVyKERhdGVUb0VudHJpZXNNYXAqIGVudHJpZXNCeURh
dGUpCiAgICAgbV9kYXRlS2V5cy5yZXNlcnZlQ2FwYWNpdHkobV9lbnRyaWVzQnlEYXRlLT5zaXpl
KCkpOwogICAgIERhdGVUb0VudHJpZXNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fZW50cmll
c0J5RGF0ZS0+ZW5kKCk7CiAgICAgZm9yIChEYXRlVG9FbnRyaWVzTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fZW50cmllc0J5RGF0ZS0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAg
ICBtX2RhdGVLZXlzLmFwcGVuZChpdC0+Zmlyc3QpOworICAgICAgICBtX2RhdGVLZXlzLmFwcGVu
ZChpdC0+a2V5KTsKICAgICBzb3J0KG1fZGF0ZUtleXMuYmVnaW4oKSwgbV9kYXRlS2V5cy5lbmQo
KSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViQ29yZVN0YXRp
c3RpY3MubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tCmlu
ZGV4IDI5NmRkNmIuLjhkZTYzMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL01pc2Mv
V2ViQ29yZVN0YXRpc3RpY3MubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJDb3Jl
U3RhdGlzdGljcy5tbQpAQCAtODksOCArODksOCBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
ICAgICBPd25QdHI8VHlwZUNvdW50U2V0PiBjb3VudHMoSlNET01XaW5kb3c6OmNvbW1vbkpTR2xv
YmFsRGF0YSgpLT5oZWFwLnByb3RlY3RlZE9iamVjdFR5cGVDb3VudHMoKSk7CiAgICAgSGFzaENv
dW50ZWRTZXQ8Y29uc3QgY2hhcio+OjppdGVyYXRvciBlbmQgPSBjb3VudHMtPmVuZCgpOwogICAg
IGZvciAoSGFzaENvdW50ZWRTZXQ8Y29uc3QgY2hhcio+OjppdGVyYXRvciBpdCA9IGNvdW50cy0+
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgaXQtPnNlY29uZDsgKytpKQotICAgICAgICAgICAgW3Jlc3VsdCBhZGRPYmplY3Q6W05TU3Ry
aW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOml0LT5maXJzdF1dOworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgaXQtPnZhbHVlOyArK2kpCisgICAgICAgICAgICBbcmVzdWx0IGFkZE9i
amVjdDpbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6aXQtPmtleV1dOwogICAgIAogICAg
IHJldHVybiByZXN1bHQ7CiB9CkBAIC0xMDQsOCArMTA0LDggQEAgdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CiAgICAgT3duUHRyPFR5cGVDb3VudFNldD4gY291bnRzKEpTRE9NV2luZG93Ojpjb21t
b25KU0dsb2JhbERhdGEoKS0+aGVhcC5vYmplY3RUeXBlQ291bnRzKCkpOwogICAgIEhhc2hDb3Vu
dGVkU2V0PGNvbnN0IGNoYXIqPjo6aXRlcmF0b3IgZW5kID0gY291bnRzLT5lbmQoKTsKICAgICBm
b3IgKEhhc2hDb3VudGVkU2V0PGNvbnN0IGNoYXIqPjo6aXRlcmF0b3IgaXQgPSBjb3VudHMtPmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGl0LT5zZWNvbmQ7ICsraSkKLSAgICAgICAgICAgIFtyZXN1bHQgYWRkT2JqZWN0OltOU1N0cmlu
ZyBzdHJpbmdXaXRoVVRGOFN0cmluZzppdC0+Zmlyc3RdXTsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGl0LT52YWx1ZTsgKytpKQorICAgICAgICAgICAgW3Jlc3VsdCBhZGRPYmpl
Y3Q6W05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOml0LT5rZXldXTsKICAgICAKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9I
b3N0ZWQvTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlci5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1Bs
dWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXIubW0KaW5kZXggZTQ5ZDUwZi4u
M2NlMDg5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0
c2NhcGVQbHVnaW5Ib3N0TWFuYWdlci5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5z
L0hvc3RlZC9OZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyLm1tCkBAIC03Myw3ICs3Myw3IEBAIE5l
dHNjYXBlUGx1Z2luSG9zdFByb3h5KiBOZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyOjpob3N0Rm9y
UGx1Z2luKGNvbnN0IFdURjo6U3RyCiAgICAgCiAgICAgLy8gVGhlIHBhY2thZ2Ugd2FzIGFscmVh
ZHkgaW4gdGhlIG1hcCwganVzdCByZXR1cm4gaXQuCiAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRy
eSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICByZXR1
cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgCiAgICAgbWFjaF9wb3J0X3QgY2xp
ZW50UG9ydDsKICAgICBpZiAobWFjaF9wb3J0X2FsbG9jYXRlKG1hY2hfdGFza19zZWxmKCksIE1B
Q0hfUE9SVF9SSUdIVF9SRUNFSVZFLCAmY2xpZW50UG9ydCkgIT0gS0VSTl9TVUNDRVNTKSB7CkBA
IC05NSw3ICs5NSw3IEBAIE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5KiBOZXRzY2FwZVBsdWdpbkhv
c3RNYW5hZ2VyOjpob3N0Rm9yUGx1Z2luKGNvbnN0IFdURjo6U3RyCiAgICAgCiAgICAgTmV0c2Nh
cGVQbHVnaW5Ib3N0UHJveHkqIGhvc3RQcm94eSA9IG5ldyBOZXRzY2FwZVBsdWdpbkhvc3RQcm94
eShjbGllbnRQb3J0LCBwbHVnaW5Ib3N0UG9ydCwgcGx1Z2luSG9zdFBTTiwgc2hvdWxkQ2FjaGVN
aXNzaW5nUHJvcGVydGllc0FuZE1ldGhvZHMpOwogICAgIAotICAgIHJlc3VsdC5pdGVyYXRvci0+
c2Vjb25kID0gaG9zdFByb3h5OworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBob3N0UHJv
eHk7CiAgICAgCiAgICAgcmV0dXJuIGhvc3RQcm94eTsKIH0KQEAgLTIwNCw3ICsyMDQsNyBAQCB2
b2lkIE5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXI6OnBsdWdpbkhvc3REaWVkKE5ldHNjYXBlUGx1
Z2luSG9zdFByb3h5KiBwbHVnaW5IbwogCiAgICAgLy8gVGhpcyBoYXMgTyhuKSBjb21wbGV4aXR5
IGJ1dCB0aGUgbnVtYmVyIG9mIGFjdGl2ZSBwbHVnLWluIGhvc3RzIGlzIHZlcnkgc21hbGwgc28g
aXQgc2hvdWxkbid0IG1hdHRlci4KICAgICBmb3IgKFBsdWdpbkhvc3RNYXA6Oml0ZXJhdG9yIGl0
ID0gbV9wbHVnaW5Ib3N0cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYg
KGl0LT5zZWNvbmQgPT0gcGx1Z2luSG9zdCkgeworICAgICAgICBpZiAoaXQtPnZhbHVlID09IHBs
dWdpbkhvc3QpIHsKICAgICAgICAgICAgIG1fcGx1Z2luSG9zdHMucmVtb3ZlKGl0KTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMjg2LDcgKzI4Niw3IEBAIHZvaWQgTmV0c2Nh
cGVQbHVnaW5Ib3N0TWFuYWdlcjo6ZGlkQ3JlYXRlV2luZG93KCkKICAgICAvLyBTZWUgaWYgYW55
IG9mIG91ciBob3N0cyBhcmUgaW4gZnVsbC1zY3JlZW4gbW9kZS4KICAgICBQbHVnaW5Ib3N0TWFw
OjppdGVyYXRvciBlbmQgPSBtX3BsdWdpbkhvc3RzLmVuZCgpOwogICAgIGZvciAoUGx1Z2luSG9z
dE1hcDo6aXRlcmF0b3IgaXQgPSBtX3BsdWdpbkhvc3RzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgewotICAgICAgICBOZXRzY2FwZVBsdWdpbkhvc3RQcm94eSogaG9zdFByb3h5ID0gaXQtPnNl
Y29uZDsKKyAgICAgICAgTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkqIGhvc3RQcm94eSA9IGl0LT52
YWx1ZTsKICAgICAgICAgCiAgICAgICAgIGlmICghaG9zdFByb3h5LT5pc01lbnVCYXJWaXNpYmxl
KCkpIHsKICAgICAgICAgICAgIC8vIE1ha2Ugb3Vyc2VsdmVzIHRoZSBmcm9udCBwcm9jZXNzLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVn
aW5Ib3N0UHJveHkubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2Fw
ZVBsdWdpbkhvc3RQcm94eS5tbQppbmRleCBhZjZmMmJlLi4wZmIyNmQwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkhvc3RQcm94eS5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkhv
c3RQcm94eS5tbQpAQCAtMTQ0LDcgKzE0NCw3IEBAIHZvaWQgTmV0c2NhcGVQbHVnaW5Ib3N0UHJv
eHk6OnBsdWdpbkhvc3REaWVkKCkKICAgCiAgICAgUGx1Z2luSW5zdGFuY2VNYXA6OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IGluc3RhbmNlcy5lbmQoKTsKICAgICBmb3IgKFBsdWdpbkluc3RhbmNlTWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IGluc3RhbmNlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
Ci0gICAgICAgIGl0LT5zZWNvbmQtPnBsdWdpbkhvc3REaWVkKCk7CisgICAgICAgIGl0LT52YWx1
ZS0+cGx1Z2luSG9zdERpZWQoKTsKICAgICAKICAgICBOZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2Vy
OjpzaGFyZWQoKS5wbHVnaW5Ib3N0RGllZCh0aGlzKTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5t
bSBiL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFu
Y2VQcm94eS5tbQppbmRleCA0YTdkM2QyLi5hZWE1N2ZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW0KKysr
IGIvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5j
ZVByb3h5Lm1tCkBAIC0xNDUsNyArMTQ1LDcgQEAgdWludDMyX3QgTmV0c2NhcGVQbHVnaW5JbnN0
YW5jZVByb3h5OjpMb2NhbE9iamVjdE1hcDo6aWRGb3JPYmplY3QoSlNHbG9iYWxEYXRhJgogICAg
IAogICAgIEhhc2hNYXA8SlNDOjpKU09iamVjdCosIHBhaXI8dWludDMyX3QsIHVpbnQzMl90PiA+
OjppdGVyYXRvciBpdGVyID0gbV9qc09iamVjdFRvSURNYXAuZmluZChvYmplY3QpOwogICAgIGlm
IChpdGVyICE9IG1fanNPYmplY3RUb0lETWFwLmVuZCgpKQotICAgICAgICByZXR1cm4gaXRlci0+
c2Vjb25kLmZpcnN0OworICAgICAgICByZXR1cm4gaXRlci0+dmFsdWUuZmlyc3Q7CiAgICAgCiAg
ICAgZG8gewogICAgICAgICBvYmplY3RJRCA9ICsrbV9vYmplY3RJRENvdW50ZXI7CkBAIC0xNjIs
NyArMTYyLDcgQEAgdm9pZCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OkxvY2FsT2JqZWN0
TWFwOjpyZXRhaW4oSlNDOjpKU09iamVjdCogb2JqZWN0KQogICAgIEhhc2hNYXA8SlNDOjpKU09i
amVjdCosIHBhaXI8dWludDMyX3QsIHVpbnQzMl90PiA+OjppdGVyYXRvciBpdGVyID0gbV9qc09i
amVjdFRvSURNYXAuZmluZChvYmplY3QpOwogICAgIEFTU0VSVChpdGVyICE9IG1fanNPYmplY3RU
b0lETWFwLmVuZCgpKTsKIAotICAgIGl0ZXItPnNlY29uZC5zZWNvbmQgPSBpdGVyLT5zZWNvbmQu
c2Vjb25kICsgMTsKKyAgICBpdGVyLT52YWx1ZS5zZWNvbmQgPSBpdGVyLT52YWx1ZS5zZWNvbmQg
KyAxOwogfQogCiB2b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6TG9jYWxPYmplY3RN
YXA6OnJlbGVhc2UoSlNDOjpKU09iamVjdCogb2JqZWN0KQpAQCAtMTcwLDEwICsxNzAsMTAgQEAg
dm9pZCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OkxvY2FsT2JqZWN0TWFwOjpyZWxlYXNl
KEpTQzo6SlNPYmplY3QqIG9iamVjdCkKICAgICBIYXNoTWFwPEpTQzo6SlNPYmplY3QqLCBwYWly
PHVpbnQzMl90LCB1aW50MzJfdD4gPjo6aXRlcmF0b3IgaXRlciA9IG1fanNPYmplY3RUb0lETWFw
LmZpbmQob2JqZWN0KTsKICAgICBBU1NFUlQoaXRlciAhPSBtX2pzT2JqZWN0VG9JRE1hcC5lbmQo
KSk7CiAKLSAgICBBU1NFUlQoaXRlci0+c2Vjb25kLnNlY29uZCA+IDApOwotICAgIGl0ZXItPnNl
Y29uZC5zZWNvbmQgPSBpdGVyLT5zZWNvbmQuc2Vjb25kIC0gMTsKLSAgICBpZiAoIWl0ZXItPnNl
Y29uZC5zZWNvbmQpIHsKLSAgICAgICAgbV9pZFRvSlNPYmplY3RNYXAucmVtb3ZlKGl0ZXItPnNl
Y29uZC5maXJzdCk7CisgICAgQVNTRVJUKGl0ZXItPnZhbHVlLnNlY29uZCA+IDApOworICAgIGl0
ZXItPnZhbHVlLnNlY29uZCA9IGl0ZXItPnZhbHVlLnNlY29uZCAtIDE7CisgICAgaWYgKCFpdGVy
LT52YWx1ZS5zZWNvbmQpIHsKKyAgICAgICAgbV9pZFRvSlNPYmplY3RNYXAucmVtb3ZlKGl0ZXIt
PnZhbHVlLmZpcnN0KTsKICAgICAgICAgbV9qc09iamVjdFRvSURNYXAucmVtb3ZlKGl0ZXIpOwog
ICAgIH0KIH0KQEAgLTE5NywxMCArMTk3LDEwIEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5j
ZVByb3h5OjpMb2NhbE9iamVjdE1hcDo6Zm9yZ2V0KHVpbnQzMl90IG9iamVjdElEKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBIYXNoTWFwPEpTQzo6SlNPYmplY3QqLCBwYWly
PHVpbnQzMl90LCB1aW50MzJfdD4gPjo6aXRlcmF0b3Igckl0ZXIgPSBtX2pzT2JqZWN0VG9JRE1h
cC5maW5kKGl0ZXItPnNlY29uZC5nZXQoKSk7CisgICAgSGFzaE1hcDxKU0M6OkpTT2JqZWN0Kiwg
cGFpcjx1aW50MzJfdCwgdWludDMyX3Q+ID46Oml0ZXJhdG9yIHJJdGVyID0gbV9qc09iamVjdFRv
SURNYXAuZmluZChpdGVyLT52YWx1ZS5nZXQoKSk7CiAKICAgICAvLyBJZiB0aGUgb2JqZWN0IGlz
IGJlaW5nIHNlbnQgdG8gcGx1Zy1pbiByaWdodCBub3csIHRoZW4gaXQncyBub3QgdGhlIHRpbWUg
dG8gZm9yZ2V0LgotICAgIGlmIChySXRlci0+c2Vjb25kLnNlY29uZCAhPSAxKQorICAgIGlmIChy
SXRlci0+dmFsdWUuc2Vjb25kICE9IDEpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIG1f
anNPYmplY3RUb0lETWFwLnJlbW92ZShySXRlcik7CkBAIC0zMzAsNyArMzMwLDcgQEAgdm9pZCBO
ZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmRlc3Ryb3koKQogICAgIAogICAgIEZyYW1lTG9h
ZE1hcDo6aXRlcmF0b3IgZW5kID0gbV9wZW5kaW5nRnJhbWVMb2Fkcy5lbmQoKTsKICAgICBmb3Ig
KEZyYW1lTG9hZE1hcDo6aXRlcmF0b3IgaXQgPSBtX3BlbmRpbmdGcmFtZUxvYWRzLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgWyhpdC0+Zmlyc3QpIF9zZXRJbnRlcm5hbExvYWRE
ZWxlZ2F0ZTpuaWxdOworICAgICAgICBbKGl0LT5rZXkpIF9zZXRJbnRlcm5hbExvYWREZWxlZ2F0
ZTpuaWxdOwogCiAgICAgX1dLUEhEZXN0cm95UGx1Z2luSW5zdGFuY2UobV9wbHVnaW5Ib3N0UHJv
eHktPnBvcnQoKSwgbV9wbHVnaW5JRCwgcmVxdWVzdElEKTsKICAKQEAgLTY3OCw3ICs2NzgsNyBA
QCB2b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6d2ViRnJhbWVEaWRGaW5pc2hMb2Fk
V2l0aFJlYXNvbihXZWJGcmFtZSogd2ViRgogICAgIEZyYW1lTG9hZE1hcDo6aXRlcmF0b3IgaXQg
PSBtX3BlbmRpbmdGcmFtZUxvYWRzLmZpbmQod2ViRnJhbWUpOwogICAgIEFTU0VSVChpdCAhPSBt
X3BlbmRpbmdGcmFtZUxvYWRzLmVuZCgpKTsKICAgICAgICAgCi0gICAgUGx1Z2luUmVxdWVzdCog
cGx1Z2luUmVxdWVzdCA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgUGx1Z2luUmVxdWVzdCogcGx1
Z2luUmVxdWVzdCA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICBfV0tQSExvYWRVUkxOb3RpZnkobV9w
bHVnaW5Ib3N0UHJveHktPnBvcnQoKSwgbV9wbHVnaW5JRCwgcGx1Z2luUmVxdWVzdC0+cmVxdWVz
dElEKCksIHJlYXNvbik7CiAgCiAgICAgbV9wZW5kaW5nRnJhbWVMb2Fkcy5yZW1vdmUoaXQpOwpA
QCAtMTYyOCw3ICsxNjI4LDcgQEAgdm9pZCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmNh
bmNlbENoZWNrSWZBbGxvd2VkVG9Mb2FkVVJMKHVpbnQzMl90IGNoZWNrSUQKICAgICBpZiAoaXQg
PT0gbV91cmxDaGVja3MuZW5kKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBXZWJQbHVn
aW5Db250YWluZXJDaGVjayAqY2hlY2sgPSBpdC0+c2Vjb25kLmdldCgpOworICAgIFdlYlBsdWdp
bkNvbnRhaW5lckNoZWNrICpjaGVjayA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICBbY2hlY2sgY2Fu
Y2VsXTsKICAgICBtX3VybENoZWNrcy5yZW1vdmUoaXQpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvUHJveHlJbnN0YW5jZS5tbSBiL1NvdXJjZS9XZWJL
aXQvbWFjL1BsdWdpbnMvSG9zdGVkL1Byb3h5SW5zdGFuY2UubW0KaW5kZXggODk4YzVlMi4uNTk4
ZWU4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvUHJveHlJ
bnN0YW5jZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9Qcm94eUlu
c3RhbmNlLm1tCkBAIC0zNTksOCArMzU5LDggQEAgTWV0aG9kTGlzdCBQcm94eUluc3RhbmNlOjpt
ZXRob2RzTmFtZWQoUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKICAgICBNZXRob2RNYXA6Oml0
ZXJhdG9yIGV4aXN0aW5nTWFwRW50cnkgPSBtX21ldGhvZHMuZmluZChuYW1lLmltcGwoKSk7CiAg
ICAgaWYgKGV4aXN0aW5nTWFwRW50cnkgIT0gbV9tZXRob2RzLmVuZCgpKSB7CiAgICAgICAgIE1l
dGhvZExpc3QgbWV0aG9kTGlzdDsKLSAgICAgICAgaWYgKGV4aXN0aW5nTWFwRW50cnktPnNlY29u
ZCkKLSAgICAgICAgICAgIG1ldGhvZExpc3QuYXBwZW5kKGV4aXN0aW5nTWFwRW50cnktPnNlY29u
ZCk7CisgICAgICAgIGlmIChleGlzdGluZ01hcEVudHJ5LT52YWx1ZSkKKyAgICAgICAgICAgIG1l
dGhvZExpc3QuYXBwZW5kKGV4aXN0aW5nTWFwRW50cnktPnZhbHVlKTsKICAgICAgICAgcmV0dXJu
IG1ldGhvZExpc3Q7CiAgICAgfQogICAgIApAQCAtMzgyLDExICszODIsMTEgQEAgTWV0aG9kTGlz
dCBQcm94eUluc3RhbmNlOjptZXRob2RzTmFtZWQoUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkK
ICAgICAvLyBBZGQgYSBuZXcgZW50cnkgdG8gdGhlIG1hcCB1bmxlc3MgYW4gZW50cnkgd2FzIGFk
ZGVkIHdoaWxlIHdlIHdlcmUgaW4gd2FpdEZvclJlcGx5LgogICAgIE1ldGhvZE1hcDo6QWRkUmVz
dWx0IG1hcEFkZFJlc3VsdCA9IG1fbWV0aG9kcy5hZGQobmFtZS5pbXBsKCksIDApOwogICAgIGlm
IChtYXBBZGRSZXN1bHQuaXNOZXdFbnRyeSAmJiByZXBseS0+bV9yZXN1bHQpCi0gICAgICAgIG1h
cEFkZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gbmV3IFByb3h5TWV0aG9kKG1ldGhvZE5hbWUp
OworICAgICAgICBtYXBBZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gbmV3IFByb3h5TWV0aG9k
KG1ldGhvZE5hbWUpOwogCiAgICAgTWV0aG9kTGlzdCBtZXRob2RMaXN0OwotICAgIGlmIChtYXBB
ZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZCkKLSAgICAgICAgbWV0aG9kTGlzdC5hcHBlbmQobWFw
QWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOworICAgIGlmIChtYXBBZGRSZXN1bHQuaXRlcmF0
b3ItPnZhbHVlKQorICAgICAgICBtZXRob2RMaXN0LmFwcGVuZChtYXBBZGRSZXN1bHQuaXRlcmF0
b3ItPnZhbHVlKTsKICAgICByZXR1cm4gbWV0aG9kTGlzdDsKIH0KIApAQCAtNDAyLDcgKzQwMiw3
IEBAIEZpZWxkKiBQcm94eUluc3RhbmNlOjpmaWVsZE5hbWVkKFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUpCiAgICAgLy8gSWYgd2UgYWxyZWFkeSBoYXZlIGFuIGVudHJ5IGluIHRoZSBtYXAsIHVz
ZSBpdC4KICAgICBGaWVsZE1hcDo6aXRlcmF0b3IgZXhpc3RpbmdNYXBFbnRyeSA9IG1fZmllbGRz
LmZpbmQobmFtZS5pbXBsKCkpOwogICAgIGlmIChleGlzdGluZ01hcEVudHJ5ICE9IG1fZmllbGRz
LmVuZCgpKQotICAgICAgICByZXR1cm4gZXhpc3RpbmdNYXBFbnRyeS0+c2Vjb25kOworICAgICAg
ICByZXR1cm4gZXhpc3RpbmdNYXBFbnRyeS0+dmFsdWU7CiAgICAgCiAgICAgdWludDY0X3QgaWRl
bnRpZmllciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDY0X3Q+KF9OUE5fR2V0U3RyaW5nSWRlbnRp
ZmllcihuYW1lLmFzY2lpKCkuZGF0YSgpKSk7CiAgICAgdWludDMyX3QgcmVxdWVzdElEID0gbV9p
bnN0YW5jZVByb3h5LT5uZXh0UmVxdWVzdElEKCk7CkBAIC00MjIsOCArNDIyLDggQEAgRmllbGQq
IFByb3h5SW5zdGFuY2U6OmZpZWxkTmFtZWQoUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKICAg
ICAvLyBBZGQgYSBuZXcgZW50cnkgdG8gdGhlIG1hcCB1bmxlc3MgYW4gZW50cnkgd2FzIGFkZGVk
IHdoaWxlIHdlIHdlcmUgaW4gd2FpdEZvclJlcGx5LgogICAgIEZpZWxkTWFwOjpBZGRSZXN1bHQg
bWFwQWRkUmVzdWx0ID0gbV9maWVsZHMuYWRkKG5hbWUuaW1wbCgpLCAwKTsKICAgICBpZiAobWFw
QWRkUmVzdWx0LmlzTmV3RW50cnkgJiYgcmVwbHktPm1fcmVzdWx0KQotICAgICAgICBtYXBBZGRS
ZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IG5ldyBQcm94eUZpZWxkKGlkZW50aWZpZXIpOwotICAg
IHJldHVybiBtYXBBZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgbWFwQWRkUmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZSA9IG5ldyBQcm94eUZpZWxkKGlkZW50aWZpZXIpOworICAgIHJl
dHVybiBtYXBBZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogfQogCiBKU0M6OkpTVmFsdWUgUHJv
eHlJbnN0YW5jZTo6ZmllbGRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEZpZWxkKiBmaWVs
ZCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViTmV0c2Nh
cGVQbHVnaW5WaWV3Lm1tIGIvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBs
dWdpblZpZXcubW0KaW5kZXggNGUxYWFkNC4uNmExZWI2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblZpZXcubW0KKysrIGIvU291cmNlL1dl
YktpdC9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblZpZXcubW0KQEAgLTcxMCw3ICs3MTAs
NyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZ2V0TlBSZWN0KGNvbnN0IE5TUmVjdCYgbnIsIE5QUmVj
dCYgbnByKQogCiAgICAgSGFzaE1hcDx1aW50MzJfdCwgUGx1Z2luVGltZXIqPjo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gdGltZXJzLT5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8dWludDMyX3QsIFBs
dWdpblRpbWVyKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdGltZXJzLT5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKLSAgICAgICAgUGx1Z2luVGltZXIqIHRpbWVyID0gaXQtPnNlY29uZDsKKyAg
ICAgICAgUGx1Z2luVGltZXIqIHRpbWVyID0gaXQtPnZhbHVlOwogICAgICAgICB0aW1lci0+c3Rv
cCgpOwogICAgIH0gICAgCiB9CkBAIC03MjgsNyArNzI4LDcgQEAgc3RhdGljIGlubGluZSB2b2lk
IGdldE5QUmVjdChjb25zdCBOU1JlY3QmIG5yLCBOUFJlY3QmIG5wcikKICAgICAKICAgICBIYXNo
TWFwPHVpbnQzMl90LCBQbHVnaW5UaW1lcio+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSB0aW1lcnMt
PmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDx1aW50MzJfdCwgUGx1Z2luVGltZXIqPjo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSB0aW1lcnMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAg
ICBQbHVnaW5UaW1lciogdGltZXIgPSBpdC0+c2Vjb25kOworICAgICAgICBQbHVnaW5UaW1lciog
dGltZXIgPSBpdC0+dmFsdWU7CiAgICAgICAgIEFTU0VSVCghdGltZXItPmlzQWN0aXZlKCkpOwog
ICAgICAgICB0aW1lci0+c3RhcnQoX2lzQ29tcGxldGVseU9ic2N1cmVkKTsKICAgICB9ICAgIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViTm90aWZpY2F0
aW9uQ2xpZW50Lm1tIGIvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViTm90aWZp
Y2F0aW9uQ2xpZW50Lm1tCmluZGV4IGUyYTA1YzYuLmYwYzQ5YTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYk5vdGlmaWNhdGlvbkNsaWVudC5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJOb3RpZmljYXRpb25DbGllbnQu
bW0KQEAgLTkwLDcgKzkwLDcgQEAgYm9vbCBXZWJOb3RpZmljYXRpb25DbGllbnQ6OnNob3coTm90
aWZpY2F0aW9uKiBub3RpZmljYXRpb24pCiAgICAgbV9ub3RpZmljYXRpb25NYXAuc2V0KG5vdGlm
aWNhdGlvbiwgd2ViTm90aWZpY2F0aW9uKTsKIAogICAgIE5vdGlmaWNhdGlvbkNvbnRleHRNYXA6
Oml0ZXJhdG9yIGl0ID0gbV9ub3RpZmljYXRpb25Db250ZXh0TWFwLmFkZChub3RpZmljYXRpb24t
PnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgVmVjdG9yPFJldGFpblB0cjxXZWJOb3RpZmljYXRp
b24+ID4oKSkuaXRlcmF0b3I7Ci0gICAgaXQtPnNlY29uZC5hcHBlbmQod2ViTm90aWZpY2F0aW9u
KTsKKyAgICBpdC0+dmFsdWUuYXBwZW5kKHdlYk5vdGlmaWNhdGlvbik7CiAKICAgICBbW21fd2Vi
VmlldyBfbm90aWZpY2F0aW9uUHJvdmlkZXJdIHNob3dOb3RpZmljYXRpb246d2ViTm90aWZpY2F0
aW9uLmdldCgpIGZyb21XZWJWaWV3Om1fd2ViVmlld107CiAgICAgcmV0dXJuIHRydWU7CkBAIC0x
MjAsNyArMTIwLDcgQEAgdm9pZCBXZWJOb3RpZmljYXRpb25DbGllbnQ6OmNsZWFyTm90aWZpY2F0
aW9ucyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogICAgIGlmIChpdCA9PSBtX25v
dGlmaWNhdGlvbkNvbnRleHRNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBW
ZWN0b3I8UmV0YWluUHRyPFdlYk5vdGlmaWNhdGlvbj4gPiYgd2ViTm90aWZpY2F0aW9ucyA9IGl0
LT5zZWNvbmQ7CisgICAgVmVjdG9yPFJldGFpblB0cjxXZWJOb3RpZmljYXRpb24+ID4mIHdlYk5v
dGlmaWNhdGlvbnMgPSBpdC0+dmFsdWU7CiAgICAgTlNNdXRhYmxlQXJyYXkgKm5zSURzID0gW05T
TXV0YWJsZUFycmF5IGFycmF5XTsKICAgICBzaXplX3QgY291bnQgPSB3ZWJOb3RpZmljYXRpb25z
LnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKQEAgLTE0
NiwxMCArMTQ2LDEwIEBAIHZvaWQgV2ViTm90aWZpY2F0aW9uQ2xpZW50Ojpub3RpZmljYXRpb25P
YmplY3REZXN0cm95ZWQoTm90aWZpY2F0aW9uKiBub3RpZmljYXRpCiAKICAgICBOb3RpZmljYXRp
b25Db250ZXh0TWFwOjppdGVyYXRvciBpdCA9IG1fbm90aWZpY2F0aW9uQ29udGV4dE1hcC5maW5k
KG5vdGlmaWNhdGlvbi0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKICAgICBBU1NFUlQoaXQg
IT0gbV9ub3RpZmljYXRpb25Db250ZXh0TWFwLmVuZCgpKTsKLSAgICBzaXplX3QgaW5kZXggPSBp
dC0+c2Vjb25kLmZpbmQod2ViTm90aWZpY2F0aW9uKTsKKyAgICBzaXplX3QgaW5kZXggPSBpdC0+
dmFsdWUuZmluZCh3ZWJOb3RpZmljYXRpb24pOwogICAgIEFTU0VSVChpbmRleCAhPSBub3RGb3Vu
ZCk7Ci0gICAgaXQtPnNlY29uZC5yZW1vdmUoaW5kZXgpOwotICAgIGlmIChpdC0+c2Vjb25kLmlz
RW1wdHkoKSkKKyAgICBpdC0+dmFsdWUucmVtb3ZlKGluZGV4KTsKKyAgICBpZiAoaXQtPnZhbHVl
LmlzRW1wdHkoKSkKICAgICAgICAgbV9ub3RpZmljYXRpb25Db250ZXh0TWFwLnJlbW92ZShpdCk7
CiAKICAgICBbW21fd2ViVmlldyBfbm90aWZpY2F0aW9uUHJvdmlkZXJdIG5vdGlmaWNhdGlvbkRl
c3Ryb3llZDp3ZWJOb3RpZmljYXRpb24uZ2V0KCldOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcv
V2ViSFRNTFZpZXcubW0KaW5kZXggNTA1ZGI1My4uYjlhMDAwNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCkBAIC0yMzc2LDcgKzIzNzYsNyBAQCBzdGF0aWMgU3Ry
aW5nIGNvbW1hbmROYW1lRm9yU2VsZWN0b3IoU0VMIHNlbGVjdG9yKQogICAgIHN0YXRpYyBjb25z
dCBTZWxlY3Rvck5hbWVNYXAqIGV4Y2VwdGlvbk1hcCA9IGNyZWF0ZVNlbGVjdG9yRXhjZXB0aW9u
TWFwKCk7CiAgICAgU2VsZWN0b3JOYW1lTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGV4Y2VwdGlv
bk1hcC0+ZmluZChzZWxlY3Rvcik7CiAgICAgaWYgKGl0ICE9IGV4Y2VwdGlvbk1hcC0+ZW5kKCkp
Ci0gICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwog
CiAgICAgLy8gUmVtb3ZlIHRoZSB0cmFpbGluZyBjb2xvbi4KICAgICAvLyBObyBuZWVkIHRvIGNh
cGl0YWxpemUgdGhlIGNvbW1hbmQgbmFtZSBzaW5jZSBFZGl0b3IgY29tbWFuZCBuYW1lcyBhcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAppbmRleCA4ZTk2MzNkLi45MDkzOTg3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9xdC9BcGkvcXdlYnBhZ2UuY3BwCkBAIC0yMjU5LDcgKzIyNTksNyBAQCBzdGF0aWMgdm9pZCBl
eHRyYWN0Q29udGVudFR5cGVGcm9tUGx1Z2luVmVjdG9yKGNvbnN0IFZlY3RvcjxQbHVnaW5QYWNr
YWdlKj4mIHBsdQogICAgICAgICBNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9y
IG1hcF9pdCA9IHBsdWdpbnNbaV0tPm1pbWVUb0Rlc2NyaXB0aW9ucygpLmJlZ2luKCk7CiAgICAg
ICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWFwX2VuZCA9IHBsdWdp
bnNbaV0tPm1pbWVUb0Rlc2NyaXB0aW9ucygpLmVuZCgpOwogICAgICAgICBmb3IgKDsgbWFwX2l0
ICE9IG1hcF9lbmQ7ICsrbWFwX2l0KQotICAgICAgICAgICAgKmxpc3QgPDwgbWFwX2l0LT5maXJz
dDsKKyAgICAgICAgICAgICpsaXN0IDw8IG1hcF9pdC0+a2V5OwogICAgIH0KIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBsdWdpbmRhdGFiYXNlLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvcXQvQXBpL3F3ZWJwbHVnaW5kYXRhYmFzZS5jcHAKaW5kZXggYTdhM2I1Zi4uYzUz
MjhjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBsdWdpbmRhdGFiYXNl
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGx1Z2luZGF0YWJhc2UuY3BwCkBA
IC0xMjIsOCArMTIyLDggQEAgUUxpc3Q8UVdlYlBsdWdpbkluZm86Ok1pbWVUeXBlPiBRV2ViUGx1
Z2luSW5mbzo6bWltZVR5cGVzKCkgY29uc3QKIAogICAgICAgICBmb3IgKE1JTUVUb0Rlc2NyaXB0
aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBNaW1lVHlwZSBtaW1lVHlwZTsKLSAgICAg
ICAgICAgIG1pbWVUeXBlLm5hbWUgPSBpdC0+Zmlyc3Q7Ci0gICAgICAgICAgICBtaW1lVHlwZS5k
ZXNjcmlwdGlvbiA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICBtaW1lVHlwZS5uYW1lID0gaXQt
PmtleTsKKyAgICAgICAgICAgIG1pbWVUeXBlLmRlc2NyaXB0aW9uID0gaXQtPnZhbHVlOwogCiAg
ICAgICAgICAgICBRU3RyaW5nTGlzdCBmaWxlRXh0ZW5zaW9uczsKICAgICAgICAgICAgIFZlY3Rv
cjxTdHJpbmc+IGV4dGVuc2lvbnMgPSBtX3BhY2thZ2UtPm1pbWVUb0V4dGVuc2lvbnMoKS5nZXQo
bWltZVR5cGUubmFtZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L1BsYXRmb3JtU3RyYXRlZ2llc1F0LmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1
cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzUXQuY3BwCmluZGV4IGNkNGFiMGQuLjdkNGIwYjcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVn
aWVzUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1T
dHJhdGVnaWVzUXQuY3BwCkBAIC0xMzMsOCArMTMzLDggQEAgdm9pZCBQbGF0Zm9ybVN0cmF0ZWdp
ZXNRdDo6Z2V0UGx1Z2luSW5mbyhjb25zdCBXZWJDb3JlOjpQYWdlKiBwYWdlLCBWZWN0b3I8V2Vi
Q28KICAgICAgICAgZm9yIChNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbWltZVRvRGVzY3JpcHRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAg
ICAgICAgTWltZUNsYXNzSW5mbyBtaW1lOwogCi0gICAgICAgICAgICBtaW1lLnR5cGUgPSBpdC0+
Zmlyc3Q7Ci0gICAgICAgICAgICBtaW1lLmRlc2MgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAg
bWltZS50eXBlID0gaXQtPmtleTsKKyAgICAgICAgICAgIG1pbWUuZGVzYyA9IGl0LT52YWx1ZTsK
ICAgICAgICAgICAgIG1pbWUuZXh0ZW5zaW9ucyA9IHBhY2thZ2UtPm1pbWVUb0V4dGVuc2lvbnMo
KS5nZXQobWltZS50eXBlKTsKIAogICAgICAgICAgICAgaW5mby5taW1lcy5hcHBlbmQobWltZSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9DT01Qcm9wZXJ0eUJhZy5oIGIvU291cmNl
L1dlYktpdC93aW4vQ09NUHJvcGVydHlCYWcuaAppbmRleCBjNzY4NjNmLi44ZTg0ZTQ3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9DT01Qcm9wZXJ0eUJhZy5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvd2luL0NPTVByb3BlcnR5QmFnLmgKQEAgLTE0Nyw5ICsxNDcsOSBAQCBIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIENPTVByb3BlcnR5QmFnPFZhbHVlVHlwZSwgS2V5VHlwZSwgSGFzaFR5
cGU+OjpSZWFkKExQQwogCiAgICAgVkFSVFlQRSByZXF1ZXN0ZWRUeXBlID0gVl9WVChwVmFyKTsK
ICAgICBWX1ZUKHBWYXIpID0gVlRfRU1QVFk7Ci0gICAgQ09NVmFyaWFudFNldHRlcjxWYWx1ZVR5
cGU+OjpzZXRWYXJpYW50KHBWYXIsIGl0LT5zZWNvbmQpOworICAgIENPTVZhcmlhbnRTZXR0ZXI8
VmFsdWVUeXBlPjo6c2V0VmFyaWFudChwVmFyLCBpdC0+dmFsdWUpOwogCi0gICAgaWYgKHJlcXVl
c3RlZFR5cGUgIT0gQ09NVmFyaWFudFNldHRlcjxWYWx1ZVR5cGU+Ojp2YXJpYW50VHlwZShpdC0+
c2Vjb25kKSAmJiByZXF1ZXN0ZWRUeXBlICE9IFZUX0VNUFRZKQorICAgIGlmIChyZXF1ZXN0ZWRU
eXBlICE9IENPTVZhcmlhbnRTZXR0ZXI8VmFsdWVUeXBlPjo6dmFyaWFudFR5cGUoaXQtPnZhbHVl
KSAmJiByZXF1ZXN0ZWRUeXBlICE9IFZUX0VNUFRZKQogICAgICAgICByZXR1cm4gOjpWYXJpYW50
Q2hhbmdlVHlwZShwVmFyLCBwVmFyLCBWQVJJQU5UX05PVVNFUk9WRVJSSURFIHwgVkFSSUFOVF9B
TFBIQUJPT0wsIHJlcXVlc3RlZFR5cGUpOwogCiAgICAgcmV0dXJuIFNfT0s7CkBAIC0yMTcsMTIg
KzIxNywxMiBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIENPTVByb3BlcnR5QmFnPFZhbHVl
VHlwZSwgS2V5VHlwZSwgSGFzaFR5cGU+OjpHZXRQcm9wZQogICAgICAgICAvL3BQcm9wQmFnW2pd
LmNsc2lkOyAgICAvLyAoQ0xTSUQpIENMU0lEIG9mIHRoZSBvYmplY3QuIFRoaXMgbWVtYmVyIGlz
IHZhbGlkIG9ubHkgaWYgZHdUeXBlIGlzIFBST1BCQUcyX1RZUEVfT0JKRUNULgogCiAgICAgICAg
IHBQcm9wQmFnW2pdLmR3VHlwZSA9IFBST1BCQUcyX1RZUEVfREFUQTsKLSAgICAgICAgcFByb3BC
YWdbal0udnQgPSBDT01WYXJpYW50U2V0dGVyPFZhbHVlVHlwZT46OnZhcmlhbnRUeXBlKGN1cnJl
bnQtPnNlY29uZCk7CisgICAgICAgIHBQcm9wQmFnW2pdLnZ0ID0gQ09NVmFyaWFudFNldHRlcjxW
YWx1ZVR5cGU+Ojp2YXJpYW50VHlwZShjdXJyZW50LT52YWx1ZSk7CiAgICAgICAgIHBQcm9wQmFn
W2pdLmR3SGludCA9IGlQcm9wZXJ0eSArIGo7Ci0gICAgICAgIHBQcm9wQmFnW2pdLnBzdHJOYW1l
ID0gKExQT0xFU1RSKUNvVGFza01lbUFsbG9jKHNpemVvZih3Y2hhcl90KSooY3VycmVudC0+Zmly
c3QubGVuZ3RoKCkrMSkpOworICAgICAgICBwUHJvcEJhZ1tqXS5wc3RyTmFtZSA9IChMUE9MRVNU
UilDb1Rhc2tNZW1BbGxvYyhzaXplb2Yod2NoYXJfdCkqKGN1cnJlbnQtPmtleS5sZW5ndGgoKSsx
KSk7CiAgICAgICAgIGlmICghcFByb3BCYWdbal0ucHN0ck5hbWUpCiAgICAgICAgICAgICByZXR1
cm4gRV9PVVRPRk1FTU9SWTsKLSAgICAgICAgd2NzY3B5X3MocFByb3BCYWdbal0ucHN0ck5hbWUs
IGN1cnJlbnQtPmZpcnN0Lmxlbmd0aCgpKzEsIHN0YXRpY19jYXN0PFN0cmluZz4oY3VycmVudC0+
Zmlyc3QpLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkpOworICAgICAgICB3Y3NjcHlf
cyhwUHJvcEJhZ1tqXS5wc3RyTmFtZSwgY3VycmVudC0+a2V5Lmxlbmd0aCgpKzEsIHN0YXRpY19j
YXN0PFN0cmluZz4oY3VycmVudC0+a2V5KS5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigp
KTsKICAgICAgICAgKysqcGNQcm9wZXJ0aWVzOwogICAgIH0KICAgICByZXR1cm4gU19PSzsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdGF0aXN0aWNzLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvd2luL1dlYkNvcmVTdGF0aXN0aWNzLmNwcAppbmRleCBjMWNhOWYyLi4yZjIyYjAz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3RhdGlzdGljcy5jcHAKKysr
IGIvU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN0YXRpc3RpY3MuY3BwCkBAIC0xNDUsNyArMTQ1
LDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJDb3JlU3RhdGlzdGljczo6amF2YVNj
cmlwdFByb3RlY3RlZE9iamVjdFR5cGVDb3VudHMKICAgICBJdGVyYXRvciBlbmQgPSBqc09iamVj
dFR5cGVOYW1lcy0+ZW5kKCk7CiAgICAgSGFzaE1hcDxTdHJpbmcsIGludD4gdHlwZUNvdW50TWFw
OwogICAgIGZvciAoSXRlcmF0b3IgY3VycmVudCA9IGpzT2JqZWN0VHlwZU5hbWVzLT5iZWdpbigp
OyBjdXJyZW50ICE9IGVuZDsgKytjdXJyZW50KQotICAgICAgICB0eXBlQ291bnRNYXAuc2V0KGN1
cnJlbnQtPmZpcnN0LCBjdXJyZW50LT5zZWNvbmQpOworICAgICAgICB0eXBlQ291bnRNYXAuc2V0
KGN1cnJlbnQtPmtleSwgY3VycmVudC0+dmFsdWUpOwogCiAgICAgQ09NUHRyPElQcm9wZXJ0eUJh
ZzI+IHJlc3VsdHMoQWRvcHRDT00sIENPTVByb3BlcnR5QmFnPGludD46OmNyZWF0ZUluc3RhbmNl
KHR5cGVDb3VudE1hcCkpOwogICAgIHJlc3VsdHMuY29weVJlZlRvKHR5cGVOYW1lc0FuZENvdW50
cyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0
Zm9ybVN0cmF0ZWdpZXMuY3BwIGIvU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2Vi
UGxhdGZvcm1TdHJhdGVnaWVzLmNwcAppbmRleCAyMzBmMzMyLi5mMTMwZjc2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3Ry
YXRlZ2llcy5jcHAKQEAgLTkzLDggKzkzLDggQEAgdm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6
OmdldFBsdWdpbkluZm8oY29uc3QgV2ViQ29yZTo6UGFnZSosIFZlY3RvcjxXZWJDb3JlOjoKICAg
ICAgICAgZm9yIChNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWlt
ZVRvRGVzY3JpcHRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAg
TWltZUNsYXNzSW5mbyBtaW1lOwogCi0gICAgICAgICAgICBtaW1lLnR5cGUgPSBpdC0+Zmlyc3Q7
Ci0gICAgICAgICAgICBtaW1lLmRlc2MgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgbWltZS50
eXBlID0gaXQtPmtleTsKKyAgICAgICAgICAgIG1pbWUuZGVzYyA9IGl0LT52YWx1ZTsKICAgICAg
ICAgICAgIG1pbWUuZXh0ZW5zaW9ucyA9IHBhY2thZ2UtPm1pbWVUb0V4dGVuc2lvbnMoKS5nZXQo
bWltZS50eXBlKTsKIAogICAgICAgICAgICAgaW5mby5taW1lcy5hcHBlbmQobWltZSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJIaXN0b3J5LmNwcCBiL1NvdXJjZS9XZWJLaXQv
d2luL1dlYkhpc3RvcnkuY3BwCmluZGV4IGU4NDJjMTQuLjgyMzM1YTcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvd2luL1dlYkhpc3RvcnkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL1dl
Ykhpc3RvcnkuY3BwCkBAIC04MzQsNyArODM0LDcgQEAgSFJFU1VMVCBXZWJIaXN0b3J5OjpyZW1v
dmVJdGVtRnJvbURhdGVDYWNoZXMoSVdlYkhpc3RvcnlJdGVtKiBlbnRyeSkKIAogICAgIERhdGVU
b0VudHJpZXNNYXA6Oml0ZXJhdG9yIGZvdW5kID0gbV9lbnRyaWVzQnlEYXRlLmZpbmQoZGF0ZUtl
eSk7CiAgICAgQVNTRVJUKGZvdW5kICE9IG1fZW50cmllc0J5RGF0ZS5lbmQoKSk7Ci0gICAgQ0ZN
dXRhYmxlQXJyYXlSZWYgZW50cmllc0ZvckRhdGUgPSBmb3VuZC0+c2Vjb25kLmdldCgpOworICAg
IENGTXV0YWJsZUFycmF5UmVmIGVudHJpZXNGb3JEYXRlID0gZm91bmQtPnZhbHVlLmdldCgpOwog
CiAgICAgQ0ZJbmRleCBjb3VudCA9IENGQXJyYXlHZXRDb3VudChlbnRyaWVzRm9yRGF0ZSk7CiAg
ICAgZm9yIChpbnQgaSA9IGNvdW50IC0gMTsgaSA+PSAwOyAtLWkpIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvd2luL1dlYktpdENPTUFQSS5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJL
aXRDT01BUEkuY3BwCmluZGV4IDljOWNjMDIuLjRkOGZmMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvd2luL1dlYktpdENPTUFQSS5jcHAKKysrIGIvU291cmNlL1dlYktpdC93aW4vV2ViS2l0
Q09NQVBJLmNwcApAQCAtNTIsNyArNTIsNyBAQCBzdGF0aWMgQ09NUHRyPElDbGFzc0ZhY3Rvcnk+
IGNsYXNzRmFjdG9yeShjb25zdCBDTFNJRCYgY2xzaWQpCiAgICAgc3RhdGljIEZhY3RvcnlNYXAm
IGZhY3RvcmllcyA9ICpuZXcgRmFjdG9yeU1hcDsKIAogICAgIEZhY3RvcnlNYXA6OkFkZFJlc3Vs
dCByZXN1bHQgPSBmYWN0b3JpZXMuYWRkKGNsc2lkLCAwKTsKLSAgICBDT01QdHI8SUNsYXNzRmFj
dG9yeT4mIGZhY3RvcnkgPSByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBDT01QdHI8SUNs
YXNzRmFjdG9yeT4mIGZhY3RvcnkgPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmIChy
ZXN1bHQuaXNOZXdFbnRyeSAmJiBGQUlMRUQoRGxsR2V0Q2xhc3NPYmplY3QoY2xzaWQsIF9fdXVp
ZG9mKGZhY3RvcnkpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJmZhY3RvcnkpKSkpCiAgICAg
ICAgIGZhY3RvcnkgPSAwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJLaXRT
dGF0aXN0aWNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvd2luL1dlYktpdFN0YXRpc3RpY3MuY3BwCmlu
ZGV4IDljZDk1YzcuLmM3YjhlZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYktp
dFN0YXRpc3RpY3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL1dlYktpdFN0YXRpc3RpY3Mu
Y3BwCkBAIC0xNDQsOSArMTQ0LDkgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJLaXRT
dGF0aXN0aWNzOjpjb21DbGFzc05hbWVDb3VudHMoCiAgICAgSXRlcmF0b3IgZW5kID0gZ0NsYXNz
TmFtZUNvdW50LmVuZCgpOwogICAgIFZlY3RvcjxVQ2hhcj4gdmVjdG9yOwogICAgIGZvciAoSXRl
cmF0b3IgY3VycmVudCA9IGdDbGFzc05hbWVDb3VudC5iZWdpbigpOyBjdXJyZW50ICE9IGVuZDsg
KytjdXJyZW50KSB7Ci0gICAgICAgIGFwcGVuZCh2ZWN0b3IsIFN0cmluZzo6Zm9ybWF0KCIlNHUi
LCBjdXJyZW50LT5zZWNvbmQpKTsKKyAgICAgICAgYXBwZW5kKHZlY3RvciwgU3RyaW5nOjpmb3Jt
YXQoIiU0dSIsIGN1cnJlbnQtPnZhbHVlKSk7CiAgICAgICAgIHZlY3Rvci5hcHBlbmQoJ1x0Jyk7
Ci0gICAgICAgIGFwcGVuZCh2ZWN0b3IsIHN0YXRpY19jYXN0PFN0cmluZz4oY3VycmVudC0+Zmly
c3QpKTsKKyAgICAgICAgYXBwZW5kKHZlY3Rvciwgc3RhdGljX2Nhc3Q8U3RyaW5nPihjdXJyZW50
LT5rZXkpKTsKICAgICAgICAgdmVjdG9yLmFwcGVuZCgnXG4nKTsKICAgICB9CiAgICAgKm91dHB1
dCA9IEJTdHJpbmcoU3RyaW5nOjphZG9wdCh2ZWN0b3IpKS5yZWxlYXNlKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJOb3RpZmljYXRpb25DZW50ZXIuY3BwIGIvU291cmNlL1dl
YktpdC93aW4vV2ViTm90aWZpY2F0aW9uQ2VudGVyLmNwcAppbmRleCBjNzE5MmQ4Li4zMWM4MTE5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJOb3RpZmljYXRpb25DZW50ZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL1dlYk5vdGlmaWNhdGlvbkNlbnRlci5jcHAKQEAgLTEy
MCw3ICsxMjAsNyBAQCB2b2lkIFdlYk5vdGlmaWNhdGlvbkNlbnRlcjo6cG9zdE5vdGlmaWNhdGlv
bkludGVybmFsKElXZWJOb3RpZmljYXRpb24qIG5vdGlmaWNhdAogCiAgICAgLy8gSW50ZW50aW9u
YWxseSBtYWtlIGEgY29weSBvZiB0aGUgbGlzdCB0byBhdm9pZCB0aGUgcG9zc2liaWxpdHkgb2Yg
ZXJyb3JzCiAgICAgLy8gZnJvbSBhIG11dGF0aW9uIG9mIHRoZSBsaXN0IGluIHRoZSBvbk5vdGlm
eSBjYWxsYmFjay4KLSAgICBPYmplY3RPYnNlcnZlckxpc3QgbGlzdCA9IGl0LT5zZWNvbmQ7Cisg
ICAgT2JqZWN0T2JzZXJ2ZXJMaXN0IGxpc3QgPSBpdC0+dmFsdWU7CiAKICAgICBPYnNlcnZlckxp
c3RJdGVyYXRvciBlbmQgPSBsaXN0LmVuZCgpOwogICAgIGZvciAoT2JzZXJ2ZXJMaXN0SXRlcmF0
b3IgaXQyID0gbGlzdC5iZWdpbigpOyBpdDIgIT0gZW5kOyArK2l0MikgewpAQCAtMTQ5LDcgKzE0
OSw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViTm90aWZpY2F0aW9uQ2VudGVyOjph
ZGRPYnNlcnZlcigKICAgICBTdHJpbmcgbmFtZShub3RpZmljYXRpb25OYW1lLCBTeXNTdHJpbmdM
ZW4obm90aWZpY2F0aW9uTmFtZSkpOwogICAgIE1hcHBlZE9ic2VydmVyczo6aXRlcmF0b3IgaXQg
PSBkLT5tX21hcHBlZE9ic2VydmVycy5maW5kKG5hbWUpOwogICAgIGlmIChpdCAhPSBkLT5tX21h
cHBlZE9ic2VydmVycy5lbmQoKSkKLSAgICAgICAgaXQtPnNlY29uZC5hcHBlbmQoT2JqZWN0T2Jz
ZXJ2ZXJQYWlyKGFuT2JqZWN0LCBvYnNlcnZlcikpOworICAgICAgICBpdC0+dmFsdWUuYXBwZW5k
KE9iamVjdE9ic2VydmVyUGFpcihhbk9iamVjdCwgb2JzZXJ2ZXIpKTsKICAgICBlbHNlIHsKICAg
ICAgICAgT2JqZWN0T2JzZXJ2ZXJMaXN0IGxpc3Q7CiAgICAgICAgIGxpc3QuYXBwZW5kKE9iamVj
dE9ic2VydmVyUGFpcihhbk9iamVjdCwgb2JzZXJ2ZXIpKTsKQEAgLTE5OCw3ICsxOTgsNyBAQCBI
UkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYk5vdGlmaWNhdGlvbkNlbnRlcjo6cmVtb3ZlT2Jz
ZXJ2ZXIoCiAgICAgaWYgKGl0ID09IGQtPm1fbWFwcGVkT2JzZXJ2ZXJzLmVuZCgpKQogICAgICAg
ICByZXR1cm4gRV9GQUlMOwogCi0gICAgT2JqZWN0T2JzZXJ2ZXJMaXN0JiBvYnNlcnZlckxpc3Qg
PSBpdC0+c2Vjb25kOworICAgIE9iamVjdE9ic2VydmVyTGlzdCYgb2JzZXJ2ZXJMaXN0ID0gaXQt
PnZhbHVlOwogICAgIE9ic2VydmVyTGlzdEl0ZXJhdG9yIGVuZCA9IG9ic2VydmVyTGlzdC5lbmQo
KTsKIAogICAgIGludCBpID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luY2UvV2Vi
Q29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuY3BwIGIvU291cmNlL1dlYktpdC93
aW5jZS9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5jcHAKaW5kZXggM2Y4
YzkwNy4uZDU1Nzk3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW5jZS9XZWJDb3JlU3Vw
cG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5jcHAKKysrIGIvU291cmNlL1dlYktpdC93aW5j
ZS9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5jcHAKQEAgLTk0LDggKzk0
LDggQEAgdm9pZCBQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6Z2V0UGx1Z2luSW5mbyhjb25zdCBQ
YWdlKiwgVmVjdG9yPFBsdWdpbkluZm8+JiBvdXQKICAgICAgICAgZm9yIChNSU1FVG9EZXNjcmlw
dGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWltZVRvRGVzY3JpcHRpb25zLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgTWltZUNsYXNzSW5mbyBtaW1lOwogCi0g
ICAgICAgICAgICBtaW1lLnR5cGUgPSBpdC0+Zmlyc3Q7Ci0gICAgICAgICAgICBtaW1lLmRlc2Mg
PSBpdC0+c2Vjb25kOworICAgICAgICAgICAgbWltZS50eXBlID0gaXQtPmtleTsKKyAgICAgICAg
ICAgIG1pbWUuZGVzYyA9IGl0LT52YWx1ZTsKICAgICAgICAgICAgIG1pbWUuZXh0ZW5zaW9ucyA9
IHBhY2thZ2UtPm1pbWVUb0V4dGVuc2lvbnMoKS5nZXQobWltZS50eXBlKTsKIAogICAgICAgICAg
ICAgaW5mby5taW1lcy5hcHBlbmQobWltZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50Q29kZXJzLmggYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9y
bS9Db3JlSVBDL0FyZ3VtZW50Q29kZXJzLmgKaW5kZXggZGQ1NGRmZS4uYWYxNjNiZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVudENvZGVycy5oCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQXJndW1lbnRDb2RlcnMuaApAQCAt
NzUsOCArNzUsOCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBzdHJ1Y3QgQXJn
dW1lbnRDb2RlcjxzdGQ6OnBhaXI8VCwgVT4gPiB7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlUeXBl
LCB0eXBlbmFtZSBWYWx1ZVR5cGU+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdURjo6S2V5VmFsdWVQ
YWlyPEtleVR5cGUsIFZhbHVlVHlwZT4gPiB7CiAgICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3Vt
ZW50RW5jb2RlciogZW5jb2RlciwgY29uc3QgV1RGOjpLZXlWYWx1ZVBhaXI8S2V5VHlwZSwgVmFs
dWVUeXBlPiYgcGFpcikKICAgICB7Ci0gICAgICAgIGVuY29kZXItPmVuY29kZShwYWlyLmZpcnN0
KTsKLSAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKHBhaXIuc2Vjb25kKTsKKyAgICAgICAgZW5jb2Rl
ci0+ZW5jb2RlKHBhaXIua2V5KTsKKyAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKHBhaXIudmFsdWUp
OwogICAgIH0KIAogICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXIqIGRlY29k
ZXIsIFdURjo6S2V5VmFsdWVQYWlyPEtleVR5cGUsIFZhbHVlVHlwZT4mIHBhaXIpCkBAIC04OSw4
ICs4OSw4IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEtleVR5cGUsIHR5cGVuYW1lIFZhbHVlVHlwZT4g
c3RydWN0IEFyZ3VtZW50Q29kZXI8V1RGOjpLZXlWYWx1CiAgICAgICAgIGlmICghZGVjb2Rlci0+
ZGVjb2RlKHZhbHVlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBwYWly
LmZpcnN0ID0ga2V5OwotICAgICAgICBwYWlyLnNlY29uZCA9IHZhbHVlOworICAgICAgICBwYWly
LmtleSA9IGtleTsKKyAgICAgICAgcGFpci52YWx1ZSA9IHZhbHVlOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29y
ZUlQQy9Db25uZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQ29u
bmVjdGlvbi5jcHAKaW5kZXggZDIyYjhiNC4uMzQ0OWUzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Db25uZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9QbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uY3BwCkBAIC0xMDIsMTIgKzEwMiwxMiBAQCBQ
YXNzUmVmUHRyPENvbm5lY3Rpb246OlN5bmNNZXNzYWdlU3RhdGU+IENvbm5lY3Rpb246OlN5bmNN
ZXNzYWdlU3RhdGU6OmdldE9yQ3JlYQogICAgIFN5bmNNZXNzYWdlU3RhdGVNYXA6OkFkZFJlc3Vs
dCByZXN1bHQgPSBzeW5jTWVzc2FnZVN0YXRlTWFwKCkuYWRkKHJ1bkxvb3AsIDApOwogCiAgICAg
aWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICBBU1NFUlQocmVzdWx0Lml0ZXJhdG9y
LT5zZWNvbmQpOwotICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAg
ICAgIEFTU0VSVChyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dC5pdGVyYXRvci0+dmFsdWU7CiAgICAgfQogCiAgICAgUmVmUHRyPFN5bmNNZXNzYWdlU3RhdGU+
IHN5bmNNZXNzYWdlU3RhdGUgPSBhZG9wdFJlZihuZXcgU3luY01lc3NhZ2VTdGF0ZShydW5Mb29w
KSk7Ci0gICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBzeW5jTWVzc2FnZVN0YXRlLmdldCgp
OworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBzeW5jTWVzc2FnZVN0YXRlLmdldCgpOwog
CiAgICAgcmV0dXJuIHN5bmNNZXNzYWdlU3RhdGUucmVsZWFzZSgpOwogfQpAQCAtMzYyLDEwICsz
NjIsMTAgQEAgUGFzc093blB0cjxBcmd1bWVudERlY29kZXI+IENvbm5lY3Rpb246OndhaXRGb3JN
ZXNzYWdlKE1lc3NhZ2VJRCBtZXNzYWdlSUQsIHVpbnQKICAgICAgICAgTXV0ZXhMb2NrZXIgbG9j
a2VyKG1fd2FpdEZvck1lc3NhZ2VNdXRleCk7CiAKICAgICAgICAgSGFzaE1hcDxzdGQ6OnBhaXI8
dW5zaWduZWQsIHVpbnQ2NF90PiwgQXJndW1lbnREZWNvZGVyKj46Oml0ZXJhdG9yIGl0ID0gbV93
YWl0Rm9yTWVzc2FnZU1hcC5maW5kKG1lc3NhZ2VBbmREZXN0aW5hdGlvbik7Ci0gICAgICAgIGlm
IChpdC0+c2Vjb25kKSB7CisgICAgICAgIGlmIChpdC0+dmFsdWUpIHsKICAgICAgICAgICAgIC8v
IEZJWE1FOiBtX3dhaXRGb3JNZXNzYWdlTWFwIHNob3VsZCByZWFsbHkgaG9sZCBPd25QdHJzIHRv
CiAgICAgICAgICAgICAvLyBBcmd1bWVudERlY29kZXJzLCBidXQgSGFzaE1hcCBkb2Vzbid0IGN1
cnJlbnRseSBzdXBwb3J0IE93blB0cnMuCi0gICAgICAgICAgICBPd25QdHI8QXJndW1lbnREZWNv
ZGVyPiBhcmd1bWVudHMgPSBhZG9wdFB0cihpdC0+c2Vjb25kKTsKKyAgICAgICAgICAgIE93blB0
cjxBcmd1bWVudERlY29kZXI+IGFyZ3VtZW50cyA9IGFkb3B0UHRyKGl0LT52YWx1ZSk7CiAgICAg
ICAgICAgICBtX3dhaXRGb3JNZXNzYWdlTWFwLnJlbW92ZShpdCk7CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIHJldHVybiBhcmd1bWVudHMucmVsZWFzZSgpOwpAQCAtNTM5LDggKzUzOSw4IEBA
IHZvaWQgQ29ubmVjdGlvbjo6cHJvY2Vzc0luY29taW5nTWVzc2FnZShNZXNzYWdlSUQgbWVzc2Fn
ZUlELCBQYXNzT3duUHRyPEFyZ3VtZW50CiAgICAgICAgIAogICAgICAgICBIYXNoTWFwPHN0ZDo6
cGFpcjx1bnNpZ25lZCwgdWludDY0X3Q+LCBBcmd1bWVudERlY29kZXIqPjo6aXRlcmF0b3IgaXQg
PSBtX3dhaXRGb3JNZXNzYWdlTWFwLmZpbmQoc3RkOjptYWtlX3BhaXIobWVzc2FnZUlELnRvSW50
KCksIGluY29taW5nTWVzc2FnZS5kZXN0aW5hdGlvbklEKCkpKTsKICAgICAgICAgaWYgKGl0ICE9
IG1fd2FpdEZvck1lc3NhZ2VNYXAuZW5kKCkpIHsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQgPSBp
bmNvbWluZ01lc3NhZ2UucmVsZWFzZUFyZ3VtZW50cygpLmxlYWtQdHIoKTsKLSAgICAgICAgICAg
IEFTU0VSVChpdC0+c2Vjb25kKTsKKyAgICAgICAgICAgIGl0LT52YWx1ZSA9IGluY29taW5nTWVz
c2FnZS5yZWxlYXNlQXJndW1lbnRzKCkubGVha1B0cigpOworICAgICAgICAgICAgQVNTRVJUKGl0
LT52YWx1ZSk7CiAgICAgICAgIAogICAgICAgICAgICAgbV93YWl0Rm9yTWVzc2FnZUNvbmRpdGlv
bi5zaWduYWwoKTsKICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1BsYXRmb3JtL2d0ay9Xb3JrUXVldWVHdGsuY3BwIGIvU291cmNlL1dlYktpdDIvUGxhdGZv
cm0vZ3RrL1dvcmtRdWV1ZUd0ay5jcHAKaW5kZXggMWRmYWI4My4uNjg4NWQ0OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vZ3RrL1dvcmtRdWV1ZUd0ay5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvUGxhdGZvcm0vZ3RrL1dvcmtRdWV1ZUd0ay5jcHAKQEAgLTE2Niw3ICsxNjYs
NyBAQCB2b2lkIFdvcmtRdWV1ZTo6cmVnaXN0ZXJFdmVudFNvdXJjZUhhbmRsZXIoaW50IGZpbGVE
ZXNjcmlwdG9yLCBpbnQgY29uZGl0aW9uLCBjbwogICAgICAgICBWZWN0b3I8RXZlbnRTb3VyY2Uq
PiBzb3VyY2VzOwogICAgICAgICBFdmVudFNvdXJjZUl0ZXJhdG9yIGl0ID0gbV9ldmVudFNvdXJj
ZXMuZmluZChmaWxlRGVzY3JpcHRvcik7CiAgICAgICAgIGlmIChpdCAhPSBtX2V2ZW50U291cmNl
cy5lbmQoKSkgCi0gICAgICAgICAgICBzb3VyY2VzID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAg
IHNvdXJjZXMgPSBpdC0+dmFsdWU7CiAKICAgICAgICAgc291cmNlcy5hcHBlbmQoZXZlbnRTb3Vy
Y2UpOwogICAgICAgICBtX2V2ZW50U291cmNlcy5zZXQoZmlsZURlc2NyaXB0b3IsIHNvdXJjZXMp
OwpAQCAtMTg2LDcgKzE4Niw3IEBAIHZvaWQgV29ya1F1ZXVlOjp1bnJlZ2lzdGVyRXZlbnRTb3Vy
Y2VIYW5kbGVyKGludCBmaWxlRGVzY3JpcHRvcikKICAgICBBU1NFUlQobV9ldmVudFNvdXJjZXMu
Y29udGFpbnMoZmlsZURlc2NyaXB0b3IpKTsKIAogICAgIGlmIChpdCAhPSBtX2V2ZW50U291cmNl
cy5lbmQoKSkgewotICAgICAgICBWZWN0b3I8RXZlbnRTb3VyY2UqPiBzb3VyY2VzID0gaXQtPnNl
Y29uZDsKKyAgICAgICAgVmVjdG9yPEV2ZW50U291cmNlKj4gc291cmNlcyA9IGl0LT52YWx1ZTsK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNvdXJjZXMuc2l6ZSgpOyBpKyspCiAg
ICAgICAgICAgICBzb3VyY2VzW2ldLT5jYW5jZWwoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvUGxhdGZvcm0vbWFjL1dvcmtRdWV1ZU1hYy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybS9tYWMvV29ya1F1ZXVlTWFjLmNwcAppbmRleCBhZTQ3M2VlLi42ZTU0Y2VlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9tYWMvV29ya1F1ZXVlTWFjLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9tYWMvV29ya1F1ZXVlTWFjLmNwcApAQCAtMTUzLDcgKzE1
Myw3IEBAIHZvaWQgV29ya1F1ZXVlOjp1bnJlZ2lzdGVyTWFjaFBvcnRFdmVudEhhbmRsZXIobWFj
aF9wb3J0X3QgbWFjaFBvcnQpCiAgICAgCiAgICAgQVNTRVJUKG1fZXZlbnRTb3VyY2VzLmNvbnRh
aW5zKG1hY2hQb3J0KSk7CiAKLSAgICBFdmVudFNvdXJjZSogZXZlbnRTb3VyY2UgPSBpdC0+c2Vj
b25kOworICAgIEV2ZW50U291cmNlKiBldmVudFNvdXJjZSA9IGl0LT52YWx1ZTsKICAgICAvLyBD
YW5jZWwgYW5kIHJlbGVhc2UgdGhlIHNvdXJjZS4gSXQgd2lsbCBiZSBkZWxldGVkIGluIGl0cyBm
aW5hbGl6ZSBoYW5kbGVyLgogICAgIGRpc3BhdGNoX3NvdXJjZV9jYW5jZWwoZXZlbnRTb3VyY2Ut
PmRpc3BhdGNoU291cmNlKCkpOwogICAgIGRpc3BhdGNoX3JlbGVhc2UoZXZlbnRTb3VyY2UtPmRp
c3BhdGNoU291cmNlKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1BsdWdp
bnMvTlBSZW1vdGVPYmplY3RNYXAuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1BsdWdpbnMv
TlBSZW1vdGVPYmplY3RNYXAuY3BwCmluZGV4IDc2NDFhZjUuLmI1ZWMyZDkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9QbHVnaW5zL05QUmVtb3RlT2JqZWN0TWFwLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvUGx1Z2lucy9OUFJlbW90ZU9iamVjdE1hcC5jcHAKQEAg
LTIwMCw3ICsyMDAsNyBAQCB2b2lkIE5QUmVtb3RlT2JqZWN0TWFwOjpwbHVnaW5EZXN0cm95ZWQo
UGx1Z2luKiBwbHVnaW4pCiAKICAgICAvLyBHYXRoZXIgdGhlIHJlY2VpdmVycyBhc3NvY2lhdGVk
IHdpdGggdGhpcyBwbHVnLWluLgogICAgIGZvciAoSGFzaE1hcDx1aW50NjRfdCwgTlBPYmplY3RN
ZXNzYWdlUmVjZWl2ZXIqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3JlZ2lzdGVyZWROUE9iamVj
dHMuYmVnaW4oKSwgZW5kID0gbV9yZWdpc3RlcmVkTlBPYmplY3RzLmVuZCgpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKLSAgICAgICAgTlBPYmplY3RNZXNzYWdlUmVjZWl2ZXIqIG5wT2JqZWN0TWVzc2Fn
ZVJlY2VpdmVyID0gaXQtPnNlY29uZDsKKyAgICAgICAgTlBPYmplY3RNZXNzYWdlUmVjZWl2ZXIq
IG5wT2JqZWN0TWVzc2FnZVJlY2VpdmVyID0gaXQtPnZhbHVlOwogICAgICAgICBpZiAobnBPYmpl
Y3RNZXNzYWdlUmVjZWl2ZXItPnBsdWdpbigpID09IHBsdWdpbikKICAgICAgICAgICAgIG1lc3Nh
Z2VSZWNlaXZlcnMuYXBwZW5kKG5wT2JqZWN0TWVzc2FnZVJlY2VpdmVyKTsKICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvVXNlck1lc3NhZ2VDb2RlcnMuaCBiL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9Vc2VyTWVzc2FnZUNvZGVycy5oCmluZGV4IDg1ZWQ1N2IuLjI5ZTdk
NjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Vc2VyTWVzc2FnZUNvZGVycy5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Vc2VyTWVzc2FnZUNvZGVycy5oCkBAIC05Myw4
ICs5Myw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIEltbXV0YWJsZURpY3Rpb25hcnk6Ok1hcFR5
cGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLmJlZ2luKCk7CiAgICAgICAgICAgICBJbW11dGFi
bGVEaWN0aW9uYXJ5OjpNYXBUeXBlOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAuZW5kKCk7CiAg
ICAgICAgICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAgZW5j
b2Rlci0+ZW5jb2RlKGl0LT5maXJzdCk7Ci0gICAgICAgICAgICAgICAgZW5jb2Rlci0+ZW5jb2Rl
KE93bmVyKGl0LT5zZWNvbmQuZ2V0KCkpKTsKKyAgICAgICAgICAgICAgICBlbmNvZGVyLT5lbmNv
ZGUoaXQtPmtleSk7CisgICAgICAgICAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKE93bmVyKGl0LT52
YWx1ZS5nZXQoKSkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJJbnRlbnREYXRh
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJJbnRlbnREYXRhLmNwcAppbmRleCA5NjEy
OGRiLi40MDJmMTUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViSW50ZW50
RGF0YS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkludGVudERhdGEuY3BwCkBA
IC02NSw3ICs2NSw3IEBAIFBhc3NSZWZQdHI8SW1tdXRhYmxlRGljdGlvbmFyeT4gV2ViSW50ZW50
RGF0YTo6ZXh0cmFzKCkgY29uc3QKICAgICBJbW11dGFibGVEaWN0aW9uYXJ5OjpNYXBUeXBlIHdr
RXh0cmFzOwogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBlbmQg
PSBtX3N0b3JlLmV4dHJhcy5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fc3RvcmUuZXh0cmFzLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkKLSAgICAgICAgd2tFeHRyYXMuc2V0KGl0LT5maXJzdCwgV2ViU3RyaW5nOjpjcmVhdGUo
aXQtPnNlY29uZCkpOworICAgICAgICB3a0V4dHJhcy5zZXQoaXQtPmtleSwgV2ViU3RyaW5nOjpj
cmVhdGUoaXQtPnZhbHVlKSk7CiAgICAgcmV0dXJuIEltbXV0YWJsZURpY3Rpb25hcnk6OmFkb3B0
KHdrRXh0cmFzKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlBy
ZWZlcmVuY2VzU3RvcmUuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByZWZlcmVuY2Vz
U3RvcmUuY3BwCmluZGV4IDg2NjhiZWMuLjk3ODRlNWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9XZWJQcmVmZXJlbmNlc1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5jcHAKQEAgLTE1MSw3ICsxNTEsNyBAQCBzdGF0aWMg
dHlwZW5hbWUgTWFwVHlwZTo6TWFwcGVkVHlwZSB2YWx1ZUZvcktleShjb25zdCBNYXBUeXBlJiBt
YXAsIGNvbnN0IHR5cGVuYQogewogICAgIHR5cGVuYW1lIE1hcFR5cGU6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbWFwLmZpbmQoa2V5KTsKICAgICBpZiAoaXQgIT0gbWFwLmVuZCgpKQotICAgICAgICBy
ZXR1cm4gaXQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKIAogICAgIHJldHVy
biBkZWZhdWx0VmFsdWVGb3JLZXk8dHlwZW5hbWUgTWFwVHlwZTo6TWFwcGVkVHlwZT4oa2V5KTsK
IH0KQEAgLTE4Nyw3ICsxODcsNyBAQCBib29sIFdlYlByZWZlcmVuY2VzU3RvcmU6OmdldEJvb2xW
YWx1ZUZvcktleShjb25zdCBTdHJpbmcmIGtleSkgY29uc3QKICAgICAvLyBGSVhNRTogRXh0ZW5k
IG92ZXJyaWRpbmcgdG8gb3RoZXIga2V5IHR5cGVzIHVzZWQgZnJvbSBMYXlvdXRUZXN0Q29udHJv
bGxlci4KICAgICBCb29sT3ZlcnJpZGVzTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGJvb2xUZXN0
UnVubmVyT3ZlcnJpZGVzTWFwKCkuZmluZChrZXkpOwogICAgIGlmIChpdCAhPSBib29sVGVzdFJ1
bm5lck92ZXJyaWRlc01hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAg
ICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKICAgICByZXR1cm4gdmFsdWVGb3JLZXkobV9ib29sVmFs
dWVzLCBrZXkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1dl
YkNvcmVBcmd1bWVudENvZGVyc01hYy5tbSBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvV2Vi
Q29yZUFyZ3VtZW50Q29kZXJzTWFjLm1tCmluZGV4IDE5NmFiMTEuLjBmOWQzZDggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvV2ViQ29yZUFyZ3VtZW50Q29kZXJzTWFjLm1t
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvV2ViQ29yZUFyZ3VtZW50Q29kZXJzTWFj
Lm1tCkBAIC0xODMsNyArMTgzLDcgQEAgYm9vbCBBcmd1bWVudENvZGVyPFJlc291cmNlRXJyb3I+
OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBSZXNvdXJjZUVycm8KICAgICBIYXNo
TWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBzdHJpbmdVc2VySW5mb01h
cC5iZWdpbigpOwogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBl
bmQgPSBzdHJpbmdVc2VySW5mb01hcC5lbmQoKTsKICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0
KQotICAgICAgICBbdXNlckluZm8gc2V0T2JqZWN0Om5zU3RyaW5nKGl0LT5zZWNvbmQpIGZvcktl
eTpuc1N0cmluZyhpdC0+Zmlyc3QpXTsKKyAgICAgICAgW3VzZXJJbmZvIHNldE9iamVjdDpuc1N0
cmluZyhpdC0+dmFsdWUpIGZvcktleTpuc1N0cmluZyhpdC0+a2V5KV07CiAKICAgICBpZiAoY2Vy
dGlmaWNhdGUuY2VydGlmaWNhdGVDaGFpbigpKQogICAgICAgICBbdXNlckluZm8gc2V0T2JqZWN0
OihOU0FycmF5ICopY2VydGlmaWNhdGUuY2VydGlmaWNhdGVDaGFpbigpIGZvcktleTpAIk5TRXJy
b3JQZWVyQ2VydGlmaWNhdGVDaGFpbktleSJdOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
U2hhcmVkL3F0L0FyZ3VtZW50Q29kZXJzUXQuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL3F0
L0FyZ3VtZW50Q29kZXJzUXQuY3BwCmluZGV4IGM4OWJmNDQuLmE0MzljYWYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9Bcmd1bWVudENvZGVyc1F0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvcXQvQXJndW1lbnRDb2RlcnNRdC5jcHAKQEAgLTg2LDggKzg2LDgg
QEAgYm9vbCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkRyYWdEYXRhPjo6ZGVjb2RlKEFyZ3VtZW50
RGVjb2RlciogZGVjb2RlciwgRHJhZ0RhdGEKICAgICAgICAgTUlNRURhdGFIYXNoTWFwOjppdGVy
YXRvciBpdCA9IG1hcC5iZWdpbigpOwogICAgICAgICBNSU1FRGF0YUhhc2hNYXA6Oml0ZXJhdG9y
IGVuZCA9IG1hcC5lbmQoKTsKICAgICAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgewotICAg
ICAgICAgICAgUUJ5dGVBcnJheSBieXRlcygoY2hhciopaXQtPnNlY29uZC5kYXRhKCksIGl0LT5z
ZWNvbmQuc2l6ZSgpKTsKLSAgICAgICAgICAgIG1pbWVEYXRhLT5zZXREYXRhKGl0LT5maXJzdCwg
Ynl0ZXMpOworICAgICAgICAgICAgUUJ5dGVBcnJheSBieXRlcygoY2hhciopaXQtPnZhbHVlLmRh
dGEoKSwgaXQtPnZhbHVlLnNpemUoKSk7CisgICAgICAgICAgICBtaW1lRGF0YS0+c2V0RGF0YShp
dC0+a2V5LCBieXRlcyk7CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9zb3VwL1dlYkNvcmVBcmd1bWVudENvZGVyc1NvdXAuY3BwIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL3NvdXAvV2ViQ29yZUFyZ3VtZW50Q29kZXJzU291cC5jcHAKaW5kZXgg
ZGJlMmM1MS4uMzNkOWJkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL3NvdXAv
V2ViQ29yZUFyZ3VtZW50Q29kZXJzU291cC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVk
L3NvdXAvV2ViQ29yZUFyZ3VtZW50Q29kZXJzU291cC5jcHAKQEAgLTE0NCw3ICsxNDQsNyBAQCBi
b29sIEFyZ3VtZW50Q29kZXI8UmVzb3VyY2VSZXNwb25zZT46OmRlY29kZShBcmd1bWVudERlY29k
ZXIqIGRlY29kZXIsIFJlc291cmNlUgogICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGhlYWRlcnMp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IGhlYWRlcnMuYmVnaW4oKSwgZW5kID0gaGVhZGVycy5lbmQoKTsgaXQgIT0g
ZW5kOyArK2l0KQotICAgICAgICByZXNwb25zZS5zZXRIVFRQSGVhZGVyRmllbGQoaXQtPmZpcnN0
LCBpdC0+c2Vjb25kKTsKKyAgICAgICAgcmVzcG9uc2Uuc2V0SFRUUEhlYWRlckZpZWxkKGl0LT5r
ZXksIGl0LT52YWx1ZSk7CiAKICAgICB1aW50MzJfdCBzb3VwTWVzc2FnZUZsYWdzOwogICAgIGlm
ICghZGVjb2Rlci0+ZGVjb2RlKHNvdXBNZXNzYWdlRmxhZ3MpKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCmluZGV4IGYyZWQ0MTcuLjc1Y2Zj
MzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250
ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4
dC5jcHAKQEAgLTk3LDcgKzk3LDcgQEAgc3RydWN0IF9Fd2tfQ29udGV4dCB7CiAgICAgICAgIEhh
c2hNYXA8dWludDY0X3QsIEV3a19Eb3dubG9hZF9Kb2IqPjo6aXRlcmF0b3IgaXQgPSBkb3dubG9h
ZEpvYnMuYmVnaW4oKTsKICAgICAgICAgSGFzaE1hcDx1aW50NjRfdCwgRXdrX0Rvd25sb2FkX0pv
Yio+OjppdGVyYXRvciBlbmQgPSBkb3dubG9hZEpvYnMuZW5kKCk7CiAgICAgICAgIGZvciAoIDsg
aXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgZXdrX2Rvd25sb2FkX2pvYl91bnJlZihpdC0+
c2Vjb25kKTsKKyAgICAgICAgICAgIGV3a19kb3dubG9hZF9qb2JfdW5yZWYoaXQtPnZhbHVlKTsK
ICAgICB9CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfdmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmll
dy5jcHAKaW5kZXggZmZjMGM5MS4uNWFkMWIyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcApAQCAtMzM1LDcgKzMzNSw3IEBAIHN0YXRpYyB2b2lk
IF9ld2tfdmlld19wcml2X2xvYWRpbmdfcmVzb3VyY2VzX2NsZWFyKExvYWRpbmdSZXNvdXJjZXNN
YXAmIGxvYWRpbmdSCiAgICAgTG9hZGluZ1Jlc291cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBsb2Fk
aW5nUmVzb3VyY2VzTWFwLmJlZ2luKCk7CiAgICAgTG9hZGluZ1Jlc291cmNlc01hcDo6aXRlcmF0
b3IgZW5kID0gbG9hZGluZ1Jlc291cmNlc01hcC5lbmQoKTsKICAgICBmb3IgKCA7IGl0ICE9IGVu
ZDsgKytpdCkKLSAgICAgICAgZXdrX3dlYl9yZXNvdXJjZV91bnJlZihpdC0+c2Vjb25kKTsKKyAg
ICAgICAgZXdrX3dlYl9yZXNvdXJjZV91bnJlZihpdC0+dmFsdWUpOwogCiAgICAgbG9hZGluZ1Jl
c291cmNlc01hcC5jbGVhcigpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcAppbmRleCA4YmY0ZDhmLi5iNjRiZWY2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcApA
QCAtMjI3Niw3ICsyMjc2LDcgQEAgR0xpc3QqIHdlYmtpdF93ZWJfdmlld19nZXRfc3VicmVzb3Vy
Y2VzKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiAgICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHBy
aXYgPSB3ZWJWaWV3LT5wcml2OwogICAgIFJlc291cmNlc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gcHJpdi0+c3VicmVzb3VyY2VzTWFwLmVuZCgpOwogICAgIGZvciAoUmVzb3VyY2VzTWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IHByaXYtPnN1YnJlc291cmNlc01hcC5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpCi0gICAgICAgIHN1YnJlc291cmNlcyA9IGdfbGlzdF9wcmVwZW5kKHN1YnJlc291
cmNlcywgaXQtPnNlY29uZC5nZXQoKSk7CisgICAgICAgIHN1YnJlc291cmNlcyA9IGdfbGlzdF9w
cmVwZW5kKHN1YnJlc291cmNlcywgaXQtPnZhbHVlLmdldCgpKTsKIAogICAgIHJldHVybiBnX2xp
c3RfcmV2ZXJzZShzdWJyZXNvdXJjZXMpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwCmluZGV4IGY2NWZhOTcuLmU3
NzA2ZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFdlYlZpZXdCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRXZWJWaWV3QmFzZS5jcHAKQEAgLTIyOCw3ICsyMjgsNyBAQCBzdGF0aWMgdm9pZCB3ZWJr
aXRXZWJWaWV3QmFzZUNvbnRhaW5lckZvcmFsbChHdGtDb250YWluZXIqIGNvbnRhaW5lciwgZ2Jv
b2xlYW4gaQogICAgIFdlYktpdFdlYlZpZXdDaGlsZHJlbk1hcCBjaGlsZHJlbiA9IHByaXYtPmNo
aWxkcmVuOwogICAgIFdlYktpdFdlYlZpZXdDaGlsZHJlbk1hcDo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gY2hpbGRyZW4uZW5kKCk7CiAgICAgZm9yIChXZWJLaXRXZWJWaWV3Q2hpbGRyZW5NYXA6OmNv
bnN0X2l0ZXJhdG9yIGN1cnJlbnQgPSBjaGlsZHJlbi5iZWdpbigpOyBjdXJyZW50ICE9IGVuZDsg
KytjdXJyZW50KQotICAgICAgICAoKmNhbGxiYWNrKShjdXJyZW50LT5maXJzdCwgY2FsbGJhY2tE
YXRhKTsKKyAgICAgICAgKCpjYWxsYmFjaykoY3VycmVudC0+a2V5LCBjYWxsYmFja0RhdGEpOwog
CiAgICAgaWYgKGluY2x1ZGVJbnRlcm5hbHMgJiYgcHJpdi0+aW5zcGVjdG9yVmlldykKICAgICAg
ICAgKCpjYWxsYmFjaykocHJpdi0+aW5zcGVjdG9yVmlldywgY2FsbGJhY2tEYXRhKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLUHJpbnRpbmdWaWV3Lm1t
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tQcmludGluZ1ZpZXcubW0KaW5k
ZXggNjNjNTg4OS4uY2ExY2FkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9tYWMvV0tQcmludGluZ1ZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9tYWMvV0tQcmludGluZ1ZpZXcubW0KQEAgLTE5NCw4ICsxOTQsOCBAQCBzdGF0aWMgQk9P
TCBpc0ZvcmNpbmdQcmV2aWV3VXBkYXRlOwogLSAodWludDY0X3QpX2V4cGVjdGVkUHJldmlld0Nh
bGxiYWNrRm9yUmVjdDooY29uc3QgSW50UmVjdCYpcmVjdAogewogICAgIGZvciAoSGFzaE1hcDx1
aW50NjRfdCwgV2ViQ29yZTo6SW50UmVjdD46Oml0ZXJhdG9yIGl0ZXIgPSBfZXhwZWN0ZWRQcmV2
aWV3Q2FsbGJhY2tzLmJlZ2luKCk7IGl0ZXIgIT0gX2V4cGVjdGVkUHJldmlld0NhbGxiYWNrcy5l
bmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIGlmIChpdGVyLT5zZWNvbmQgID09IHJlY3QpCi0gICAg
ICAgICAgICByZXR1cm4gaXRlci0+Zmlyc3Q7CisgICAgICAgIGlmIChpdGVyLT52YWx1ZSAgPT0g
cmVjdCkKKyAgICAgICAgICAgIHJldHVybiBpdGVyLT5rZXk7CiAgICAgfQogICAgIHJldHVybiAw
OwogfQpAQCAtMjI5LDggKzIyOSw4IEBAIHN0YXRpYyB2b2lkIHBhZ2VEaWREcmF3VG9QREYoV0tE
YXRhUmVmIGRhdGFSZWYsIFdLRXJyb3JSZWYsIHZvaWQqIHVudHlwZWRDb250ZXh0CiAgICAgICAg
ICAgICBBU1NFUlQoW3ZpZXcgX2lzUHJpbnRpbmdQcmV2aWV3XSk7CiAKICAgICAgICAgICAgIGlm
IChkYXRhKSB7Ci0gICAgICAgICAgICAgICAgSGFzaE1hcDxXZWJDb3JlOjpJbnRSZWN0LCBWZWN0
b3I8dWludDhfdD4gPjo6QWRkUmVzdWx0IGVudHJ5ID0gdmlldy0+X3BhZ2VQcmV2aWV3cy5hZGQo
aXRlci0+c2Vjb25kLCBWZWN0b3I8dWludDhfdD4oKSk7Ci0gICAgICAgICAgICAgICAgZW50cnku
aXRlcmF0b3ItPnNlY29uZC5hcHBlbmQoZGF0YS0+Ynl0ZXMoKSwgZGF0YS0+c2l6ZSgpKTsKKyAg
ICAgICAgICAgICAgICBIYXNoTWFwPFdlYkNvcmU6OkludFJlY3QsIFZlY3Rvcjx1aW50OF90PiA+
OjpBZGRSZXN1bHQgZW50cnkgPSB2aWV3LT5fcGFnZVByZXZpZXdzLmFkZChpdGVyLT52YWx1ZSwg
VmVjdG9yPHVpbnQ4X3Q+KCkpOworICAgICAgICAgICAgICAgIGVudHJ5Lml0ZXJhdG9yLT52YWx1
ZS5hcHBlbmQoZGF0YS0+Ynl0ZXMoKSwgZGF0YS0+c2l6ZSgpKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIHZpZXctPl9leHBlY3RlZFByZXZpZXdDYWxsYmFja3MucmVtb3ZlKGNvbnRleHQt
PmNhbGxiYWNrSUQpOwogICAgICAgICAgICAgYm9vbCByZWNlaXZlZFJlc3BvbnNlVG9MYXRlc3RS
ZXF1ZXN0ID0gdmlldy0+X2xhdGVzdEV4cGVjdGVkUHJldmlld0NhbGxiYWNrID09IGNvbnRleHQt
PmNhbGxiYWNrSUQ7CkBAIC00OTQsNyArNDk0LDcgQEAgc3RhdGljIHZvaWQgcHJlcGFyZURhdGFG
b3JQcmludGluZ09uU2Vjb25kYXJ5VGhyZWFkKHZvaWQqIHVudHlwZWRDb250ZXh0KQogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBwZGZEYXRhQnl0
ZXMgPSBwYWdlUHJldmlld0l0ZXJhdG9yLT5zZWNvbmQ7CisgICAgY29uc3QgVmVjdG9yPHVpbnQ4
X3Q+JiBwZGZEYXRhQnl0ZXMgPSBwYWdlUHJldmlld0l0ZXJhdG9yLT52YWx1ZTsKICAgICBSZXRh
aW5QdHI8TlNEYXRhPiBwZGZEYXRhKEFkb3B0TlMsIFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5
dGVzOnBkZkRhdGFCeXRlcy5kYXRhKCkgbGVuZ3RoOnBkZkRhdGFCeXRlcy5zaXplKCldKTsKICAg
ICBSZXRhaW5QdHI8UERGRG9jdW1lbnQ+IHBkZkRvY3VtZW50KEFkb3B0TlMsIFtbcGRmRG9jdW1l
bnRDbGFzcygpIGFsbG9jXSBpbml0V2l0aERhdGE6cGRmRGF0YS5nZXQoKV0pOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0gYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0KaW5kZXggYTExZWY2NS4uMjk3MTc0
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1t
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQpAQCAtNDIz
LDcgKzQyMyw3IEBAIHN0YXRpYyBTdHJpbmcgY29tbWFuZE5hbWVGb3JTZWxlY3RvcihTRUwgc2Vs
ZWN0b3IpCiAgICAgc3RhdGljIGNvbnN0IFNlbGVjdG9yTmFtZU1hcCogZXhjZXB0aW9uTWFwID0g
Y3JlYXRlU2VsZWN0b3JFeGNlcHRpb25NYXAoKTsKICAgICBTZWxlY3Rvck5hbWVNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gZXhjZXB0aW9uTWFwLT5maW5kKHNlbGVjdG9yKTsKICAgICBpZiAoaXQg
IT0gZXhjZXB0aW9uTWFwLT5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAg
ICAgIHJldHVybiBpdC0+dmFsdWU7CiAgICAgCiAgICAgLy8gUmVtb3ZlIHRoZSB0cmFpbGluZyBj
b2xvbi4KICAgICAvLyBObyBuZWVkIHRvIGNhcGl0YWxpemUgdGhlIGNvbW1hbmQgbmFtZSBzaW5j
ZSBFZGl0b3IgY29tbWFuZCBuYW1lcyBhcmUKQEAgLTczNyw3ICs3MzcsNyBAQCBzdGF0aWMgdm9p
ZCB2YWxpZGF0ZUNvbW1hbmRDYWxsYmFjayhXS1N0cmluZ1JlZiBjb21tYW5kTmFtZSwgYm9vbCBp
c0VuYWJsZWQsIGludAogCiAgICAgLy8gQWRkIHRoaXMgaXRlbSB0byB0aGUgdmVjdG9yIG9mIGl0
ZW1zIGZvciBhIGdpdmVuIGNvbW1hbmQgdGhhdCBhcmUgYXdhaXRpbmcgdmFsaWRhdGlvbi4KICAg
ICBWYWxpZGF0aW9uTWFwOjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gX2RhdGEtPl92YWxpZGF0aW9u
TWFwLmFkZChjb21tYW5kTmFtZSwgVmFsaWRhdGlvblZlY3RvcigpKTsKLSAgICBhZGRSZXN1bHQu
aXRlcmF0b3ItPnNlY29uZC5hcHBlbmQoaXRlbSk7CisgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZS5hcHBlbmQoaXRlbSk7CiAgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KSB7CiAgICAg
ICAgIC8vIElmIHdlIGFyZSBub3QgYWxyZWFkeSBhd2FpdGluZyB2YWxpZGF0aW9uIGZvciB0aGlz
IGNvbW1hbmQsIHN0YXJ0IHRoZSBhc3luY2hyb25vdXMgdmFsaWRhdGlvbiBwcm9jZXNzLgogICAg
ICAgICAvLyBGSVhNRTogVGhlb3JldGljYWxseSwgdGhlcmUgaXMgYSByYWNlIGhlcmU7IHdoZW4g
d2UgZ2V0IHRoZSBhbnN3ZXIgaXQgbWlnaHQgYmUgb2xkLCBmcm9tIGEgcHJldmlvdXMgdGltZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0dlb2xvY2F0aW9uUGVybWlzc2lv
blJlcXVlc3RNYW5hZ2VyUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0dlb2xv
Y2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuY3BwCmluZGV4IDcxYmVhZjUuLjBk
NDE2MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9HZW9sb2NhdGlvblBl
cm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5jcHAKQEAgLTQy
LDcgKzQyLDcgQEAgdm9pZCBHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5
OjppbnZhbGlkYXRlUmVxdWVzdHMoKQogICAgIFBlbmRpbmdSZXF1ZXN0TWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IG1fcGVuZGluZ1JlcXVlc3RzLmJlZ2luKCk7CiAgICAgUGVuZGluZ1JlcXVlc3RN
YXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGVuZGluZ1JlcXVlc3RzLmVuZCgpOwogICAgIGZv
ciAoOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPmludmFsaWRhdGUoKTsK
KyAgICAgICAgaXQtPnZhbHVlLT5pbnZhbGlkYXRlKCk7CiAKICAgICBtX3BlbmRpbmdSZXF1ZXN0
cy5jbGVhcigpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0luc3Bl
Y3RvclNlcnZlci9XZWJJbnNwZWN0b3JTZXJ2ZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0luc3BlY3RvclNlcnZlci9XZWJJbnNwZWN0b3JTZXJ2ZXIuY3BwCmluZGV4IGVjYjE3MWIu
LjNhOWUyM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JT
ZXJ2ZXIvV2ViSW5zcGVjdG9yU2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvSW5zcGVjdG9yU2VydmVyL1dlYkluc3BlY3RvclNlcnZlci5jcHAKQEAgLTY3LDcgKzY3LDcg
QEAgV2ViSW5zcGVjdG9yU2VydmVyOjp+V2ViSW5zcGVjdG9yU2VydmVyKCkKICAgICAvLyBDbG9z
ZSBhbnkgcmVtYWluaW5nIG9wZW4gY29ubmVjdGlvbnMuCiAgICAgSGFzaE1hcDx1bnNpZ25lZCwg
V2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbio+OjppdGVyYXRvciBlbmQgPSBtX2Nvbm5lY3Rpb25N
YXAuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPHVuc2lnbmVkLCBXZWJTb2NrZXRTZXJ2ZXJDb25u
ZWN0aW9uKj46Oml0ZXJhdG9yIGl0ID0gbV9jb25uZWN0aW9uTWFwLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewotICAgICAgICBXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uKiBjb25uZWN0aW9u
ID0gaXQtPnNlY29uZDsKKyAgICAgICAgV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbiogY29ubmVj
dGlvbiA9IGl0LT52YWx1ZTsKICAgICAgICAgV2ViSW5zcGVjdG9yUHJveHkqIGNsaWVudCA9IG1f
Y2xpZW50TWFwLmdldChjb25uZWN0aW9uLT5pZGVudGlmaWVyKCkpOwogICAgICAgICBjbG9zZUNv
bm5lY3Rpb24oY2xpZW50LCBjb25uZWN0aW9uKTsKICAgICB9CkBAIC03OCw3ICs3OCw3IEBAIGlu
dCBXZWJJbnNwZWN0b3JTZXJ2ZXI6OnJlZ2lzdGVyUGFnZShXZWJJbnNwZWN0b3JQcm94eSogY2xp
ZW50KQogI2lmbmRlZiBBU1NFUlRfRElTQUJMRUQKICAgICBDbGllbnRNYXA6Oml0ZXJhdG9yIGVu
ZCA9IG1fY2xpZW50TWFwLmVuZCgpOwogICAgIGZvciAoQ2xpZW50TWFwOjppdGVyYXRvciBpdCA9
IG1fY2xpZW50TWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgQVNTRVJUKGl0
LT5zZWNvbmQgIT0gY2xpZW50KTsKKyAgICAgICAgQVNTRVJUKGl0LT52YWx1ZSAhPSBjbGllbnQp
OwogI2VuZGlmCiAKICAgICBpbnQgcGFnZUlkID0gbV9uZXh0QXZhaWxhYmxlUGFnZUlkKys7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL1dlYlNv
Y2tldFNlcnZlckNvbm5lY3Rpb24uY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0luc3Bl
Y3RvclNlcnZlci9XZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uLmNwcAppbmRleCA1NzIwNmViLi5i
ZWRhNTNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvSW5zcGVjdG9yU2Vy
dmVyL1dlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbi5jcHAKQEAg
LTEwNiw5ICsxMDYsOSBAQCB2b2lkIFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb246OnNlbmRIVFRQ
UmVzcG9uc2VIZWFkZXIoaW50IHN0YXR1c0NvZGUsIGNvbnN0IFN0cgogICAgIGJ1aWxkZXIuYXBw
ZW5kKCJcclxuIik7CiAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaGVh
ZGVyRmllbGRzLmVuZCgpOwogICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBoZWFkZXJGaWVsZHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGJ1
aWxkZXIuYXBwZW5kKGl0LT5maXJzdCk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGl0LT5rZXkp
OwogICAgICAgICBidWlsZGVyLmFwcGVuZCgiOiAiKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQo
aXQtPnNlY29uZCArICJcclxuIik7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGl0LT52YWx1ZSAr
ICJcclxuIik7CiAgICAgfQogICAgIGJ1aWxkZXIuYXBwZW5kKCJcclxuIik7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvcXQvV2ViSW5zcGVj
dG9yU2VydmVyUXQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0luc3BlY3RvclNlcnZl
ci9xdC9XZWJJbnNwZWN0b3JTZXJ2ZXJRdC5jcHAKaW5kZXggOGRlMGY5My4uYTkzZWE5MSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9xdC9XZWJJ
bnNwZWN0b3JTZXJ2ZXJRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0luc3Bl
Y3RvclNlcnZlci9xdC9XZWJJbnNwZWN0b3JTZXJ2ZXJRdC5jcHAKQEAgLTgzLDE2ICs4MywxNiBA
QCB2b2lkIFdlYkluc3BlY3RvclNlcnZlcjo6YnVpbGRQYWdlTGlzdChWZWN0b3I8Y2hhcj4mIGRh
dGEsIFN0cmluZyYgY29udGVudFR5cGUpCiAgICAgYnVpbGRlci5hcHBlbmQoIlsgIik7CiAgICAg
Q2xpZW50TWFwOjppdGVyYXRvciBlbmQgPSBtX2NsaWVudE1hcC5lbmQoKTsKICAgICBmb3IgKENs
aWVudE1hcDo6aXRlcmF0b3IgaXQgPSBtX2NsaWVudE1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKLSAgICAgICAgV2ViUGFnZVByb3h5KiB3ZWJQYWdlID0gaXQtPnNlY29uZC0+cGFnZSgp
OworICAgICAgICBXZWJQYWdlUHJveHkqIHdlYlBhZ2UgPSBpdC0+dmFsdWUtPnBhZ2UoKTsKICAg
ICAgICAgaWYgKGl0ICE9IG1fY2xpZW50TWFwLmJlZ2luKCkpCiAgICAgICAgICAgICBidWlsZGVy
LmFwcGVuZCgiLCAiKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoInsgXCJpZFwiOiAiICsgU3Ry
aW5nOjpudW1iZXIoaXQtPmZpcnN0KSk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCJ7IFwiaWRc
IjogIiArIFN0cmluZzo6bnVtYmVyKGl0LT5rZXkpKTsKICAgICAgICAgYnVpbGRlci5hcHBlbmQo
IiwgXCJ0aXRsZVwiOiBcIiIpOwogICAgICAgICBidWlsZGVyLmFwcGVuZCh3ZWJQYWdlLT5wYWdl
VGl0bGUoKSk7CiAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCJcIiwgXCJ1cmxcIjogXCIiKTsKICAg
ICAgICAgYnVpbGRlci5hcHBlbmQod2ViUGFnZS0+YWN0aXZlVVJMKCkpOwogICAgICAgICBidWls
ZGVyLmFwcGVuZCgiXCIsIFwiaW5zcGVjdG9yVXJsXCI6IFwiIik7Ci0gICAgICAgIGJ1aWxkZXIu
YXBwZW5kKHJlbW90ZUluc3BlY3RvclBhZ2VQYXRoKCkgKyBTdHJpbmc6Om51bWJlcihpdC0+Zmly
c3QpKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQocmVtb3RlSW5zcGVjdG9yUGFnZVBhdGgoKSAr
IFN0cmluZzo6bnVtYmVyKGl0LT5rZXkpKTsKICAgICAgICAgYnVpbGRlci5hcHBlbmQoIlwiIH0i
KTsKICAgICB9CiAgICAgYnVpbGRlci5hcHBlbmQoIiBdIik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5jcHAKaW5kZXggNjI5
MjkxYS4uYWUxNWM5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVy
VHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9M
YXllclRyZWVDb29yZGluYXRvclByb3h5LmNwcApAQCAtNzIsNyArNzIsNyBAQCB2b2lkIExheWVy
VHJlZUNvb3JkaW5hdG9yUHJveHk6OnVwZGF0ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50
IHRpbGVJRCwgY29ucwogICAgICAgICAgICAgc3VyZmFjZSA9IFNoYXJlYWJsZVN1cmZhY2U6OmNy
ZWF0ZSh1cGRhdGVJbmZvLnN1cmZhY2VIYW5kbGUpOwogICAgICAgICAgICAgbV9zdXJmYWNlcy5h
ZGQodG9rZW4sIHN1cmZhY2UpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHN1cmZhY2Ug
PSBpdC0+c2Vjb25kOworICAgICAgICAgICAgc3VyZmFjZSA9IGl0LT52YWx1ZTsKICAgICB9IGVs
c2UKICAgICAgICAgc3VyZmFjZSA9IFNoYXJlYWJsZVN1cmZhY2U6OmNyZWF0ZSh1cGRhdGVJbmZv
LnN1cmZhY2VIYW5kbGUpOwogI2Vsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9Ob3RpZmljYXRpb25zL05vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclBy
b3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Ob3RpZmljYXRpb25zL05vdGlmaWNh
dGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcAppbmRleCAwNzkyMjk4Li40YTBj
NDc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTm90aWZpY2F0aW9ucy9O
b3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL05vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uUGVybWlzc2lvblJl
cXVlc3RNYW5hZ2VyUHJveHkuY3BwCkBAIC00Myw3ICs0Myw3IEBAIHZvaWQgTm90aWZpY2F0aW9u
UGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHk6OmludmFsaWRhdGVSZXF1ZXN0cygpCiAgICAg
UGVuZGluZ1JlcXVlc3RNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wZW5kaW5nUmVxdWVzdHMu
YmVnaW4oKTsKICAgICBQZW5kaW5nUmVxdWVzdE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9w
ZW5kaW5nUmVxdWVzdHMuZW5kKCk7CiAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAg
ICAgaXQtPnNlY29uZC0+aW52YWxpZGF0ZSgpOworICAgICAgICBpdC0+dmFsdWUtPmludmFsaWRh
dGUoKTsKICAgICAKICAgICBtX3BlbmRpbmdSZXF1ZXN0cy5jbGVhcigpOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc1Byb3h5LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NQcm94eS5j
cHAKaW5kZXggNDNmYTJmNC4uMzY5YWRlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc1Byb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzUHJveHkuY3BwCkBAIC0xNDYsMTAgKzE0
NiwxMCBAQCB2b2lkIFBsdWdpblByb2Nlc3NQcm94eTo6cGx1Z2luUHJvY2Vzc0NyYXNoZWRPckZh
aWxlZFRvTGF1bmNoKCkKICAgICB9CiAKICAgICB3aGlsZSAoIW1fcGVuZGluZ0dldFNpdGVzUmVw
bGllcy5pc0VtcHR5KCkpCi0gICAgICAgIGRpZEdldFNpdGVzV2l0aERhdGEoVmVjdG9yPFN0cmlu
Zz4oKSwgbV9wZW5kaW5nR2V0U2l0ZXNSZXBsaWVzLmJlZ2luKCktPmZpcnN0KTsKKyAgICAgICAg
ZGlkR2V0U2l0ZXNXaXRoRGF0YShWZWN0b3I8U3RyaW5nPigpLCBtX3BlbmRpbmdHZXRTaXRlc1Jl
cGxpZXMuYmVnaW4oKS0+a2V5KTsKIAogICAgIHdoaWxlICghbV9wZW5kaW5nQ2xlYXJTaXRlRGF0
YVJlcGxpZXMuaXNFbXB0eSgpKQotICAgICAgICBkaWRDbGVhclNpdGVEYXRhKG1fcGVuZGluZ0Ns
ZWFyU2l0ZURhdGFSZXBsaWVzLmJlZ2luKCktPmZpcnN0KTsKKyAgICAgICAgZGlkQ2xlYXJTaXRl
RGF0YShtX3BlbmRpbmdDbGVhclNpdGVEYXRhUmVwbGllcy5iZWdpbigpLT5rZXkpOwogCiAgICAg
Ly8gVGVsbCB0aGUgcGx1Zy1pbiBwcm9jZXNzIG1hbmFnZXIgdG8gZm9yZ2V0IGFib3V0IHRoaXMg
cGx1Zy1pbiBwcm9jZXNzIHByb3h5LiBUaGlzIG1heSBjYXVzZSB1cyB0byBiZSBkZWxldGVkLgog
ICAgIG1fcGx1Z2luUHJvY2Vzc01hbmFnZXItPnJlbW92ZVBsdWdpblByb2Nlc3NQcm94eSh0aGlz
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmNwcAppbmRleCAyMmU0ZTIwLi5h
YTRjZjY1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmNwcApAQCAtMTAx
OCw3ICsxMDE4LDcgQEAgc3RhdGljIFBhc3NSZWZQdHI8TXV0YWJsZURpY3Rpb25hcnk+IGNyZWF0
ZURpY3Rpb25hcnlGcm9tSGFzaE1hcChjb25zdCBIYXNoTWFwPFMKICAgICBSZWZQdHI8TXV0YWJs
ZURpY3Rpb25hcnk+IHJlc3VsdCA9IE11dGFibGVEaWN0aW9uYXJ5OjpjcmVhdGUoKTsKICAgICBI
YXNoTWFwPFN0cmluZywgdWludDY0X3Q+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAuZW5kKCk7
CiAgICAgZm9yIChIYXNoTWFwPFN0cmluZywgdWludDY0X3Q+Ojpjb25zdF9pdGVyYXRvciBpdCA9
IG1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHJlc3VsdC0+c2V0KGl0LT5m
aXJzdCwgUmVmUHRyPFdlYlVJbnQ2ND4oV2ViVUludDY0OjpjcmVhdGUoaXQtPnNlY29uZCkpLmdl
dCgpKTsKKyAgICAgICAgcmVzdWx0LT5zZXQoaXQtPmtleSwgUmVmUHRyPFdlYlVJbnQ2ND4oV2Vi
VUludDY0OjpjcmVhdGUoaXQtPnZhbHVlKSkuZ2V0KCkpOwogICAgIAogICAgIHJldHVybiByZXN1
bHQ7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViSWNvbkRhdGFi
YXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJY29uRGF0YWJhc2UuY3BwCmlu
ZGV4IGMwYzcwNjEuLmQyYTEwNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJJY29uRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJ
Y29uRGF0YWJhc2UuY3BwCkBAIC0yNjMsMTQgKzI2MywxNCBAQCB2b2lkIFdlYkljb25EYXRhYmFz
ZTo6ZGlkRmluaXNoVVJMSW1wb3J0KCkKICAgICBIYXNoTWFwPHVpbnQ2NF90LCBTdHJpbmc+Ojpp
dGVyYXRvciBlbmQgPSBtX3BlbmRpbmdMb2FkRGVjaXNpb25VUkxNYXAuZW5kKCk7CiAgICAgCiAg
ICAgZm9yICg7IGkgIT0gZW5kOyArK2kpIHsKLSAgICAgICAgTE9HKEljb25EYXRhYmFzZSwgIldL
MiBVSVByb2Nlc3MgcGVyZm9ybWluZyBkZWxheWVkIGNhbGxiYWNrIG9uIGNhbGxiYWNrIElEICVp
IGZvciBwYWdlIHVybCAlcyIsIChpbnQpaS0+Zmlyc3QsIGktPnNlY29uZC5hc2NpaSgpLmRhdGEo
KSk7Ci0gICAgICAgIEljb25Mb2FkRGVjaXNpb24gZGVjaXNpb24gPSBtX2ljb25EYXRhYmFzZUlt
cGwtPnN5bmNocm9ub3VzTG9hZERlY2lzaW9uRm9ySWNvblVSTChpLT5zZWNvbmQsIDApOworICAg
ICAgICBMT0coSWNvbkRhdGFiYXNlLCAiV0syIFVJUHJvY2VzcyBwZXJmb3JtaW5nIGRlbGF5ZWQg
Y2FsbGJhY2sgb24gY2FsbGJhY2sgSUQgJWkgZm9yIHBhZ2UgdXJsICVzIiwgKGludClpLT5rZXks
IGktPnZhbHVlLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgSWNvbkxvYWREZWNpc2lvbiBkZWNp
c2lvbiA9IG1faWNvbkRhdGFiYXNlSW1wbC0+c3luY2hyb25vdXNMb2FkRGVjaXNpb25Gb3JJY29u
VVJMKGktPnZhbHVlLCAwKTsKIAogICAgICAgICAvLyBEZWNpc2lvbnMgc2hvdWxkIG5ldmVyIGJl
IHVua25vd24gYWZ0ZXIgdGhlIGluaXRhbCBpbXBvcnQgaXMgY29tcGxldGUKICAgICAgICAgQVNT
RVJUKGRlY2lzaW9uICE9IEljb25Mb2FkVW5rbm93bik7CiAKICAgICAgICAgLy8gRklYTUUgKE11
bHRpLVdlYlByb2Nlc3MpOiBXZSBuZWVkIHRvIGtub3cgd2hpY2ggY29ubmVjdGlvbiB0byBzZW5k
IHRoaXMgbWVzc2FnZSB0by4KLSAgICAgICAgbV93ZWJDb250ZXh0LT5zZW5kVG9BbGxQcm9jZXNz
ZXMoTWVzc2FnZXM6OldlYkljb25EYXRhYmFzZVByb3h5OjpSZWNlaXZlZEljb25Mb2FkRGVjaXNp
b24oc3RhdGljX2Nhc3Q8aW50PihkZWNpc2lvbiksIGktPmZpcnN0KSk7CisgICAgICAgIG1fd2Vi
Q29udGV4dC0+c2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJJY29uRGF0YWJhc2VQcm94
eTo6UmVjZWl2ZWRJY29uTG9hZERlY2lzaW9uKHN0YXRpY19jYXN0PGludD4oZGVjaXNpb24pLCBp
LT5rZXkpKTsKICAgICB9CiAgICAgCiAgICAgbV9wZW5kaW5nTG9hZERlY2lzaW9uVVJMTWFwLmNs
ZWFyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViTGF5ZXJUcmVl
UmVuZGVyZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkxheWVyVHJlZVJlbmRl
cmVyLmNwcAppbmRleCA5NTA0OWEzLi44NDY5MjhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJlci5jcHAKQEAgLTE4OCw3ICsxODgsNyBAQCB2
b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjphZGp1c3RQb3NpdGlvbkZvckZpeGVkTGF5ZXJzKCkK
IAogICAgIExheWVyTWFwOjppdGVyYXRvciBlbmQgPSBtX2ZpeGVkTGF5ZXJzLmVuZCgpOwogICAg
IGZvciAoTGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9maXhlZExheWVycy5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCi0gICAgICAgIHRvVGV4dHVyZU1hcHBlckxheWVyKGl0LT5zZWNvbmQpLT5z
ZXRTY3JvbGxQb3NpdGlvbkRlbHRhSWZOZWVkZWQoSW50UG9pbnQoc2Nyb2xsUG9zaXRpb24ueCgp
IC0gbV9yZW5kZXJlZENvbnRlbnRzU2Nyb2xsUG9zaXRpb24ueCgpLCBzY3JvbGxQb3NpdGlvbi55
KCkgLSBtX3JlbmRlcmVkQ29udGVudHNTY3JvbGxQb3NpdGlvbi55KCkpKTsKKyAgICAgICAgdG9U
ZXh0dXJlTWFwcGVyTGF5ZXIoaXQtPnZhbHVlKS0+c2V0U2Nyb2xsUG9zaXRpb25EZWx0YUlmTmVl
ZGVkKEludFBvaW50KHNjcm9sbFBvc2l0aW9uLngoKSAtIG1fcmVuZGVyZWRDb250ZW50c1Njcm9s
bFBvc2l0aW9uLngoKSwgc2Nyb2xsUG9zaXRpb24ueSgpIC0gbV9yZW5kZXJlZENvbnRlbnRzU2Ny
b2xsUG9zaXRpb24ueSgpKSk7CiB9CiAKIHZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmRpZENo
YW5nZVNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFBvaW50JiBwb3NpdGlvbikKQEAgLTIxMSw3ICsy
MTEsNyBAQCB2b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpzeW5jQ2FudmFzKFdlYkxheWVySUQg
aWQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGNhbgogICAgICAgICBjYW52YXNCYWNraW5nU3Rv
cmUgPSBUZXh0dXJlTWFwcGVyU3VyZmFjZUJhY2tpbmdTdG9yZTo6Y3JlYXRlKCk7CiAgICAgICAg
IG1fc3VyZmFjZUJhY2tpbmdTdG9yZXMuc2V0KGlkLCBjYW52YXNCYWNraW5nU3RvcmUpOwogICAg
IH0gZWxzZQotICAgICAgICBjYW52YXNCYWNraW5nU3RvcmUgPSBpdC0+c2Vjb25kOworICAgICAg
ICBjYW52YXNCYWNraW5nU3RvcmUgPSBpdC0+dmFsdWU7CiAKICAgICBjYW52YXNCYWNraW5nU3Rv
cmUtPnNldEdyYXBoaWNzU3VyZmFjZShncmFwaGljc1N1cmZhY2VUb2tlbiwgY2FudmFzU2l6ZSk7
CiAgICAgbGF5ZXItPnNldENvbnRlbnRzVG9NZWRpYShjYW52YXNCYWNraW5nU3RvcmUuZ2V0KCkp
OwpAQCAtMjIyLDcgKzIyMiw3IEBAIHZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnNldExheWVy
Q2hpbGRyZW4oV2ViTGF5ZXJJRCBpZCwgY29uc3QgVmVjdG9yPFdlYkxheWVyCiB7CiAgICAgZW5z
dXJlTGF5ZXIoaWQpOwogICAgIExheWVyTWFwOjppdGVyYXRvciBpdCA9IG1fbGF5ZXJzLmZpbmQo
aWQpOwotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gaXQtPnNlY29uZDsKKyAgICBHcmFwaGlj
c0xheWVyKiBsYXllciA9IGl0LT52YWx1ZTsKICAgICBWZWN0b3I8R3JhcGhpY3NMYXllcio+IGNo
aWxkcmVuOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZElEcy5zaXplKCk7ICsr
aSkgewpAQCAtMjQ0LDcgKzI0NCw3IEBAIHZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnNldExh
eWVyRmlsdGVycyhXZWJMYXllcklEIGlkLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zCiAgICAgTGF5
ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9sYXllcnMuZmluZChpZCk7CiAgICAgQVNTRVJUKGl0ICE9
IG1fbGF5ZXJzLmVuZCgpKTsKIAotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gaXQtPnNlY29u
ZDsKKyAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IGl0LT52YWx1ZTsKICAgICBsYXllci0+c2V0
RmlsdGVycyhmaWx0ZXJzKTsKIH0KICNlbmRpZgpAQCAtMjU1LDcgKzI1NSw3IEBAIHZvaWQgV2Vi
TGF5ZXJUcmVlUmVuZGVyZXI6OnNldExheWVyU3RhdGUoV2ViTGF5ZXJJRCBpZCwgY29uc3QgV2Vi
TGF5ZXJJbmZvJiBsYXllCiAgICAgTGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9sYXllcnMuZmlu
ZChpZCk7CiAgICAgQVNTRVJUKGl0ICE9IG1fbGF5ZXJzLmVuZCgpKTsKIAotICAgIEdyYXBoaWNz
TGF5ZXIqIGxheWVyID0gaXQtPnNlY29uZDsKKyAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IGl0
LT52YWx1ZTsKIAogICAgIGxheWVyLT5zZXRSZXBsaWNhdGVkQnlMYXllcihsYXllckJ5SUQobGF5
ZXJJbmZvLnJlcGxpY2EpKTsKICAgICBsYXllci0+c2V0TWFza0xheWVyKGxheWVyQnlJRChsYXll
ckluZm8ubWFzaykpOwpAQCAtMzgxLDcgKzM4MSw3IEBAIHZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVy
ZXI6OmFzc2lnbkltYWdlVG9MYXllcihHcmFwaGljc0xheWVyKiBsYXllciwgaW50NjRfdCBpbWFn
CiAKICAgICBIYXNoTWFwPGludDY0X3QsIFJlZlB0cjxUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3Jl
PiA+OjppdGVyYXRvciBpdCA9IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmZpbmQoaW1hZ2VJ
RCk7CiAgICAgQVNTRVJUKGl0ICE9IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmVuZCgpKTsK
LSAgICBsYXllci0+c2V0Q29udGVudHNUb01lZGlhKGl0LT5zZWNvbmQuZ2V0KCkpOworICAgIGxh
eWVyLT5zZXRDb250ZW50c1RvTWVkaWEoaXQtPnZhbHVlLmdldCgpKTsKIH0KIAogdm9pZCBXZWJM
YXllclRyZWVSZW5kZXJlcjo6Y29tbWl0VGlsZU9wZXJhdGlvbnMoKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAppbmRleCBlM2NkYzg4Li4yOGEyYmQwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcApAQCAtMjUz
LDkgKzI1Myw5IEBAIGJvb2wgV2ViUHJvY2Vzc1Byb3h5OjpjaGVja1VSTFJlY2VpdmVkRnJvbVdl
YlByb2Nlc3MoY29uc3QgS1VSTCYgdXJsKQogICAgIC8vIEl0ZW1zIGluIGJhY2svZm9yd2FyZCBs
aXN0IGhhdmUgYmVlbiBhbHJlYWR5IGNoZWNrZWQuCiAgICAgLy8gT25lIGNhc2Ugd2hlcmUgd2Ug
ZG9uJ3QgaGF2ZSBzYW5kYm94IGV4dGVuc2lvbnMgZm9yIGZpbGUgVVJMcyBpbiBiL2YgbGlzdCBp
cyBpZiB0aGUgbGlzdCBoYXMgYmVlbiByZWluc3RhdGVkIGFmdGVyIGEgY3Jhc2ggb3IgYSBicm93
c2VyIHJlc3RhcnQuCiAgICAgZm9yIChXZWJCYWNrRm9yd2FyZExpc3RJdGVtTWFwOjppdGVyYXRv
ciBpdGVyID0gbV9iYWNrRm9yd2FyZExpc3RJdGVtTWFwLmJlZ2luKCksIGVuZCA9IG1fYmFja0Zv
cndhcmRMaXN0SXRlbU1hcC5lbmQoKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewotICAgICAgICBp
ZiAoS1VSTChLVVJMKCksIGl0ZXItPnNlY29uZC0+dXJsKCkpLmZpbGVTeXN0ZW1QYXRoKCkgPT0g
cGF0aCkKKyAgICAgICAgaWYgKEtVUkwoS1VSTCgpLCBpdGVyLT52YWx1ZS0+dXJsKCkpLmZpbGVT
eXN0ZW1QYXRoKCkgPT0gcGF0aCkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBp
ZiAoS1VSTChLVVJMKCksIGl0ZXItPnNlY29uZC0+b3JpZ2luYWxVUkwoKSkuZmlsZVN5c3RlbVBh
dGgoKSA9PSBwYXRoKQorICAgICAgICBpZiAoS1VSTChLVVJMKCksIGl0ZXItPnZhbHVlLT5vcmln
aW5hbFVSTCgpKS5maWxlU3lzdGVtUGF0aCgpID09IHBhdGgpCiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAKQEAgLTI3OCwxNSArMjc4LDE1IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5
OjphZGRCYWNrRm9yd2FyZEl0ZW0odWludDY0X3QgaXRlbUlELCBjb25zdCBTdHJpbmcmIG9yaWdp
bmFsCiAKICAgICBXZWJCYWNrRm9yd2FyZExpc3RJdGVtTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0g
bV9iYWNrRm9yd2FyZExpc3RJdGVtTWFwLmFkZChpdGVtSUQsIDApOwogICAgIGlmIChyZXN1bHQu
aXNOZXdFbnRyeSkgewotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IFdlYkJhY2tG
b3J3YXJkTGlzdEl0ZW06OmNyZWF0ZShvcmlnaW5hbFVSTCwgdXJsLCB0aXRsZSwgYmFja0Zvcndh
cmREYXRhLmRhdGEoKSwgYmFja0ZvcndhcmREYXRhLnNpemUoKSwgaXRlbUlEKTsKKyAgICAgICAg
cmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW06OmNyZWF0ZShv
cmlnaW5hbFVSTCwgdXJsLCB0aXRsZSwgYmFja0ZvcndhcmREYXRhLmRhdGEoKSwgYmFja0Zvcndh
cmREYXRhLnNpemUoKSwgaXRlbUlEKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8v
IFVwZGF0ZSBleGlzdGluZyBpdGVtLgotICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLT5zZXRP
cmlnaW5hbFVSTChvcmlnaW5hbFVSTCk7Ci0gICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQtPnNl
dFVSTCh1cmwpOwotICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLT5zZXRUaXRsZSh0aXRsZSk7
Ci0gICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQtPnNldEJhY2tGb3J3YXJkRGF0YShiYWNrRm9y
d2FyZERhdGEuZGF0YSgpLCBiYWNrRm9yd2FyZERhdGEuc2l6ZSgpKTsKKyAgICByZXN1bHQuaXRl
cmF0b3ItPnZhbHVlLT5zZXRPcmlnaW5hbFVSTChvcmlnaW5hbFVSTCk7CisgICAgcmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZS0+c2V0VVJMKHVybCk7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+
c2V0VGl0bGUodGl0bGUpOworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPnNldEJhY2tGb3J3
YXJkRGF0YShiYWNrRm9yd2FyZERhdGEuZGF0YSgpLCBiYWNrRm9yd2FyZERhdGEuc2l6ZSgpKTsK
IH0KIAogI2lmIEVOQUJMRShQTFVHSU5fUFJPQ0VTUykKQEAgLTUwMCw3ICs1MDAsNyBAQCBzaXpl
X3QgV2ViUHJvY2Vzc1Byb3h5OjpmcmFtZUNvdW50SW5QYWdlKFdlYlBhZ2VQcm94eSogcGFnZSkg
Y29uc3QKIHsKICAgICBzaXplX3QgcmVzdWx0ID0gMDsKICAgICBmb3IgKEhhc2hNYXA8dWludDY0
X3QsIFJlZlB0cjxXZWJGcmFtZVByb3h5PiA+Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gbV9mcmFt
ZU1hcC5iZWdpbigpOyBpdGVyICE9IG1fZnJhbWVNYXAuZW5kKCk7ICsraXRlcikgewotICAgICAg
ICBpZiAoaXRlci0+c2Vjb25kLT5wYWdlKCkgPT0gcGFnZSkKKyAgICAgICAgaWYgKGl0ZXItPnZh
bHVlLT5wYWdlKCkgPT0gcGFnZSkKICAgICAgICAgICAgICsrcmVzdWx0OwogICAgIH0KICAgICBy
ZXR1cm4gcmVzdWx0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3RleG1h
cC9MYXllckJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvdGV4bWFw
L0xheWVyQmFja2luZ1N0b3JlLmNwcAppbmRleCA0M2RiZTBjLi5lOGJmZjg2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvdGV4bWFwL0xheWVyQmFja2luZ1N0b3JlLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvdGV4bWFwL0xheWVyQmFja2luZ1N0b3JlLmNw
cApAQCAtODAsMTUgKzgwLDE1IEBAIHZvaWQgTGF5ZXJCYWNraW5nU3RvcmU6OnVwZGF0ZVRpbGUo
aW50IGlkLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSCiB7CiAgICAgSGFz
aE1hcDxpbnQsIExheWVyQmFja2luZ1N0b3JlVGlsZT46Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5m
aW5kKGlkKTsKICAgICBBU1NFUlQoaXQgIT0gbV90aWxlcy5lbmQoKSk7Ci0gICAgaXQtPnNlY29u
ZC5pbmNyZW1lbnRSZXBhaW50Q291bnQoKTsKLSAgICBpdC0+c2Vjb25kLnNldEJhY2tCdWZmZXIo
dGFyZ2V0UmVjdCwgc291cmNlUmVjdCwgYmFja0J1ZmZlciwgb2Zmc2V0KTsKKyAgICBpdC0+dmFs
dWUuaW5jcmVtZW50UmVwYWludENvdW50KCk7CisgICAgaXQtPnZhbHVlLnNldEJhY2tCdWZmZXIo
dGFyZ2V0UmVjdCwgc291cmNlUmVjdCwgYmFja0J1ZmZlciwgb2Zmc2V0KTsKIH0KIAogUGFzc1Jl
ZlB0cjxCaXRtYXBUZXh0dXJlPiBMYXllckJhY2tpbmdTdG9yZTo6dGV4dHVyZSgpIGNvbnN0CiB7
CiAgICAgSGFzaE1hcDxpbnQsIExheWVyQmFja2luZ1N0b3JlVGlsZT46OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IG1fdGlsZXMuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPGludCwgTGF5ZXJCYWNraW5n
U3RvcmVUaWxlPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewotICAgICAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gdGV4dHVyZSA9IGl0LT5z
ZWNvbmQudGV4dHVyZSgpOworICAgICAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gdGV4dHVyZSA9
IGl0LT52YWx1ZS50ZXh0dXJlKCk7CiAgICAgICAgIGlmICh0ZXh0dXJlKQogICAgICAgICAgICAg
cmV0dXJuIHRleHR1cmU7CiAgICAgfQpAQCAtMTEyLDcgKzExMiw3IEBAIHZvaWQgTGF5ZXJCYWNr
aW5nU3RvcmU6OnBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBw
ZXIsIGNvbnN0CiAgICAgSGFzaE1hcDxpbnQsIExheWVyQmFja2luZ1N0b3JlVGlsZT46Oml0ZXJh
dG9yIGVuZCA9IG1fdGlsZXMuZW5kKCk7CiAgICAgRmxvYXRSZWN0IGNvdmVyZWRSZWN0OwogICAg
IGZvciAoSGFzaE1hcDxpbnQsIExheWVyQmFja2luZ1N0b3JlVGlsZT46Oml0ZXJhdG9yIGl0ID0g
bV90aWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgTGF5ZXJCYWNraW5n
U3RvcmVUaWxlJiB0aWxlID0gaXQtPnNlY29uZDsKKyAgICAgICAgTGF5ZXJCYWNraW5nU3RvcmVU
aWxlJiB0aWxlID0gaXQtPnZhbHVlOwogICAgICAgICBpZiAoIXRpbGUudGV4dHVyZSgpKQogICAg
ICAgICAgICAgY29udGludWU7CiAKQEAgLTE1Niw3ICsxNTYsNyBAQCB2b2lkIExheWVyQmFja2lu
Z1N0b3JlOjpjb21taXRUaWxlT3BlcmF0aW9ucyhUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVy
KQogCiAgICAgSGFzaE1hcDxpbnQsIExheWVyQmFja2luZ1N0b3JlVGlsZT46Oml0ZXJhdG9yIHRp
bGVzRW5kID0gbV90aWxlcy5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8aW50LCBMYXllckJhY2tp
bmdTdG9yZVRpbGU+OjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0gdGlsZXNF
bmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQuc3dhcEJ1ZmZlcnModGV4dHVyZU1hcHBlcik7
CisgICAgICAgIGl0LT52YWx1ZS5zd2FwQnVmZmVycyh0ZXh0dXJlTWFwcGVyKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvR2VvbG9jYXRpb24vR2VvbG9jYXRpb25QZXJtaXNzaW9u
UmVxdWVzdE1hbmFnZXIuY3BwCmluZGV4IGQ2YmRiOGUuLmZjYTcxYTEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvR2VvbG9jYXRpb24vR2VvbG9jYXRpb25QZXJtaXNzaW9u
UmVxdWVzdE1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvR2VvbG9j
YXRpb24vR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuY3BwCkBAIC03NCw3ICs3
NCw3IEBAIHZvaWQgR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXI6OmNhbmNlbFJl
cXVlc3RGb3JHZW9sb2NhdGlvbihHZW9sb2NhdGlvCiAgICAgICAgIHJldHVybjsKIAogICAgIG1f
Z2VvbG9jYXRpb25Ub0lETWFwLnJlbW92ZShpdCk7Ci0gICAgbV9pZFRvR2VvbG9jYXRpb25NYXAu
cmVtb3ZlKGl0LT5zZWNvbmQpOworICAgIG1faWRUb0dlb2xvY2F0aW9uTWFwLnJlbW92ZShpdC0+
dmFsdWUpOwogfQogCiB2b2lkIEdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyOjpk
aWRSZWNlaXZlR2VvbG9jYXRpb25QZXJtaXNzaW9uRGVjaXNpb24odWludDY0X3QgZ2VvbG9jYXRp
b25JRCwgYm9vbCBhbGxvd2VkKQpAQCAtODMsNyArODMsNyBAQCB2b2lkIEdlb2xvY2F0aW9uUGVy
bWlzc2lvblJlcXVlc3RNYW5hZ2VyOjpkaWRSZWNlaXZlR2VvbG9jYXRpb25QZXJtaXNzaW9uRGVj
aXNpbwogICAgIGlmIChpdCA9PSBtX2lkVG9HZW9sb2NhdGlvbk1hcC5lbmQoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgR2VvbG9jYXRpb24qIGdlb2xvY2F0aW9uID0gaXQtPnNlY29uZDsKKyAg
ICBHZW9sb2NhdGlvbiogZ2VvbG9jYXRpb24gPSBpdC0+dmFsdWU7CiAgICAgZ2VvbG9jYXRpb24t
PnNldElzQWxsb3dlZChhbGxvd2VkKTsKIAogICAgIG1faWRUb0dlb2xvY2F0aW9uTWFwLnJlbW92
ZShpdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0RPTS9JbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGUuY3BwIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlLmNwcApp
bmRleCAwYzQyOTVlLi43N2UwMzA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGUuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVu
ZGxlTm9kZUhhbmRsZS5jcHAKQEAgLTY5LDEwICs2OSwxMCBAQCBQYXNzUmVmUHRyPEluamVjdGVk
QnVuZGxlTm9kZUhhbmRsZT4gSW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlOjpnZXRPckNyZWF0ZShO
b2RlKgogCiAgICAgRE9NSGFuZGxlQ2FjaGU6OkFkZFJlc3VsdCByZXN1bHQgPSBkb21IYW5kbGVD
YWNoZSgpLmFkZChub2RlLCAwKTsKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAg
ICByZXR1cm4gUGFzc1JlZlB0cjxJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU+KHJlc3VsdC5pdGVy
YXRvci0+c2Vjb25kKTsKKyAgICAgICAgcmV0dXJuIFBhc3NSZWZQdHI8SW5qZWN0ZWRCdW5kbGVO
b2RlSGFuZGxlPihyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKIAogICAgIFJlZlB0cjxJbmplY3Rl
ZEJ1bmRsZU5vZGVIYW5kbGU+IG5vZGVIYW5kbGUgPSBJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU6
OmNyZWF0ZShub2RlKTsKLSAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IG5vZGVIYW5kbGUu
Z2V0KCk7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IG5vZGVIYW5kbGUuZ2V0KCk7CiAg
ICAgcmV0dXJuIG5vZGVIYW5kbGUucmVsZWFzZSgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZVJhbmdl
SGFuZGxlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9N
L0luamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGUuY3BwCmluZGV4IDFiNzRmMDEuLmQ2MDAwYWIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0lu
amVjdGVkQnVuZGxlUmFuZ2VIYW5kbGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGUuY3BwCkBAIC00
OCwxMCArNDgsMTAgQEAgUGFzc1JlZlB0cjxJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlPiBJbmpl
Y3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpnZXRPckNyZWF0ZShSYW4KIAogICAgIERPTUhhbmRsZUNh
Y2hlOjpBZGRSZXN1bHQgcmVzdWx0ID0gZG9tSGFuZGxlQ2FjaGUoKS5hZGQocmFuZ2UsIDApOwog
ICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJldHVybiBQYXNzUmVmUHRyPElu
amVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU+KHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKKyAgICAg
ICAgcmV0dXJuIFBhc3NSZWZQdHI8SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZT4ocmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZSk7CiAKICAgICBSZWZQdHI8SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZT4g
cmFuZ2VIYW5kbGUgPSBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpjcmVhdGUocmFuZ2UpOwot
ICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gcmFuZ2VIYW5kbGUuZ2V0KCk7CisgICAgcmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZSA9IHJhbmdlSGFuZGxlLmdldCgpOwogICAgIHJldHVybiByYW5n
ZUhhbmRsZS5yZWxlYXNlKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvTm90aWZpY2F0aW9ucy9XZWJOb3RpZmljYXRpb25NYW5hZ2VyLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvTm90aWZpY2F0aW9ucy9XZWJOb3RpZmljYXRpb25NYW5hZ2VyLmNw
cAppbmRleCAyZDY2N2VmLi4yNTFjNDEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL05vdGlmaWNhdGlvbnMvV2ViTm90aWZpY2F0aW9uTWFuYWdlci5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Ob3RpZmljYXRpb25zL1dlYk5vdGlmaWNhdGlvbk1hbmFn
ZXIuY3BwCkBAIC05OSw3ICs5OSw3IEBAIE5vdGlmaWNhdGlvbkNsaWVudDo6UGVybWlzc2lvbiBX
ZWJOb3RpZmljYXRpb25NYW5hZ2VyOjpwb2xpY3lGb3JPcmlnaW4oV2ViQ29yZTo6CiAgICAgQVNT
RVJUKCFvcmlnaW4tPmlzVW5pcXVlKCkpOwogICAgIEhhc2hNYXA8U3RyaW5nLCBib29sPjo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtX3Blcm1pc3Npb25zTWFwLmZpbmQob3JpZ2luLT50b1Jhd1N0cmlu
ZygpKTsKICAgICBpZiAoaXQgIT0gbV9wZXJtaXNzaW9uc01hcC5lbmQoKSkKLSAgICAgICAgcmV0
dXJuIGl0LT5zZWNvbmQgPyBOb3RpZmljYXRpb25DbGllbnQ6OlBlcm1pc3Npb25BbGxvd2VkIDog
Tm90aWZpY2F0aW9uQ2xpZW50OjpQZXJtaXNzaW9uRGVuaWVkOworICAgICAgICByZXR1cm4gaXQt
PnZhbHVlID8gTm90aWZpY2F0aW9uQ2xpZW50OjpQZXJtaXNzaW9uQWxsb3dlZCA6IE5vdGlmaWNh
dGlvbkNsaWVudDo6UGVybWlzc2lvbkRlbmllZDsKICNlbmRpZgogICAgIAogICAgIHJldHVybiBO
b3RpZmljYXRpb25DbGllbnQ6OlBlcm1pc3Npb25Ob3RBbGxvd2VkOwpAQCAtMTE2LDcgKzExNiw3
IEBAIGJvb2wgV2ViTm90aWZpY2F0aW9uTWFuYWdlcjo6c2hvdyhOb3RpZmljYXRpb24qIG5vdGlm
aWNhdGlvbiwgV2ViUGFnZSogcGFnZSkKICAgICBtX25vdGlmaWNhdGlvbklETWFwLnNldChub3Rp
ZmljYXRpb25JRCwgbm90aWZpY2F0aW9uKTsKICAgICAKICAgICBOb3RpZmljYXRpb25Db250ZXh0
TWFwOjppdGVyYXRvciBpdCA9IG1fbm90aWZpY2F0aW9uQ29udGV4dE1hcC5hZGQobm90aWZpY2F0
aW9uLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIFZlY3Rvcjx1aW50NjRfdD4oKSkuaXRlcmF0
b3I7Ci0gICAgaXQtPnNlY29uZC5hcHBlbmQobm90aWZpY2F0aW9uSUQpOworICAgIGl0LT52YWx1
ZS5hcHBlbmQobm90aWZpY2F0aW9uSUQpOwogCiAjaWYgRU5BQkxFKE5PVElGSUNBVElPTlMpCiAg
ICAgbV9wcm9jZXNzLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6
U2hvd05vdGlmaWNhdGlvbihub3RpZmljYXRpb24tPnRpdGxlKCksIG5vdGlmaWNhdGlvbi0+Ym9k
eSgpLCBub3RpZmljYXRpb24tPmljb25VUkwoKS5zdHJpbmcoKSwgbm90aWZpY2F0aW9uLT50YWco
KSwgbm90aWZpY2F0aW9uLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnNlY3VyaXR5T3JpZ2lu
KCktPnRvU3RyaW5nKCksIG5vdGlmaWNhdGlvbklEKSwgcGFnZS0+cGFnZUlEKCkpOwpAQCAtMTUw
LDcgKzE1MCw3IEBAIHZvaWQgV2ViTm90aWZpY2F0aW9uTWFuYWdlcjo6Y2xlYXJOb3RpZmljYXRp
b25zKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqCiAgICAgaWYgKGl0ID09IG1fbm90
aWZpY2F0aW9uQ29udGV4dE1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIFZl
Y3Rvcjx1aW50NjRfdD4mIG5vdGlmaWNhdGlvbklEcyA9IGl0LT5zZWNvbmQ7CisgICAgVmVjdG9y
PHVpbnQ2NF90PiYgbm90aWZpY2F0aW9uSURzID0gaXQtPnZhbHVlOwogICAgIG1fcHJvY2Vzcy0+
Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJOb3RpZmljYXRpb25NYW5hZ2VyUHJveHk6
OkNsZWFyTm90aWZpY2F0aW9ucyhub3RpZmljYXRpb25JRHMpLCBwYWdlLT5wYWdlSUQoKSk7CiAg
ICAgc2l6ZV90IGNvdW50ID0gbm90aWZpY2F0aW9uSURzLnNpemUoKTsKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKQEAgLTIzMywxMCArMjMzLDEwIEBAIHZvaWQgV2Vi
Tm90aWZpY2F0aW9uTWFuYWdlcjo6cmVtb3ZlTm90aWZpY2F0aW9uRnJvbUNvbnRleHRNYXAodWlu
dDY0X3Qgbm90aWZpY2F0CiAgICAgLy8gVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiBmb3IgbWFu
YWdpbmcgdGhlIGhhc2ggbWFwcy4KICAgICBOb3RpZmljYXRpb25Db250ZXh0TWFwOjppdGVyYXRv
ciBpdCA9IG1fbm90aWZpY2F0aW9uQ29udGV4dE1hcC5maW5kKG5vdGlmaWNhdGlvbi0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpKTsKICAgICBBU1NFUlQoaXQgIT0gbV9ub3RpZmljYXRpb25Db250
ZXh0TWFwLmVuZCgpKTsKLSAgICBzaXplX3QgaW5kZXggPSBpdC0+c2Vjb25kLmZpbmQobm90aWZp
Y2F0aW9uSUQpOworICAgIHNpemVfdCBpbmRleCA9IGl0LT52YWx1ZS5maW5kKG5vdGlmaWNhdGlv
bklEKTsKICAgICBBU1NFUlQoaW5kZXggIT0gbm90Rm91bmQpOwotICAgIGl0LT5zZWNvbmQucmVt
b3ZlKGluZGV4KTsKLSAgICBpZiAoaXQtPnNlY29uZC5pc0VtcHR5KCkpCisgICAgaXQtPnZhbHVl
LnJlbW92ZShpbmRleCk7CisgICAgaWYgKGl0LT52YWx1ZS5pc0VtcHR5KCkpCiAgICAgICAgIG1f
bm90aWZpY2F0aW9uQ29udGV4dE1hcC5yZW1vdmUoaXQpOwogfQogI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lT2Jq
ZWN0TWFwLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9O
UFJ1bnRpbWVPYmplY3RNYXAuY3BwCmluZGV4IDJiMTE1ZjEuLjcxOTU3MDEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmpl
Y3RNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2Fw
ZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3BwCkBAIC0yMTIsNyArMjEyLDcgQEAgdm9pZCBOUFJ1bnRp
bWVPYmplY3RNYXA6OmludmFsaWRhdGUoKQogICAgIFZlY3RvcjxOUE9iamVjdCo+IG9iamVjdHM7
CiAKICAgICBmb3IgKEhhc2hNYXA8TlBPYmplY3QqLCBKU0M6OldlYWs8SlNOUE9iamVjdD4gPjo6
aXRlcmF0b3IgcHRyID0gbV9qc05QT2JqZWN0cy5iZWdpbigpLCBlbmQgPSBtX2pzTlBPYmplY3Rz
LmVuZCgpOyBwdHIgIT0gZW5kOyArK3B0cikgewotICAgICAgICBKU05QT2JqZWN0KiBqc05QT2Jq
ZWN0ID0gcHRyLT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIEpTTlBPYmplY3QqIGpzTlBPYmplY3Qg
PSBwdHItPnZhbHVlLmdldCgpOwogICAgICAgICBpZiAoIWpzTlBPYmplY3QpIC8vIFNraXAgem9t
Ymllcy4KICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBvYmplY3RzLmFwcGVuZChqc05Q
T2JqZWN0LT5sZWFrTlBPYmplY3QoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW4uY3BwIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luLmNwcAppbmRleCA0
ZDgyY2ZmMC4uOWZkODM2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Q
bHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW4uY3BwCkBAIC0xOTksOCAr
MTk5LDggQEAgTlBFcnJvciBOZXRzY2FwZVBsdWdpbjo6ZGVzdHJveVN0cmVhbShOUFN0cmVhbSog
c3RyZWFtLCBOUFJlYXNvbiByZWFzb24pCiAgICAgTmV0c2NhcGVQbHVnaW5TdHJlYW0qIHBsdWdp
blN0cmVhbSA9IDA7CiAKICAgICBmb3IgKFN0cmVhbXNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bV9zdHJlYW1zLmJlZ2luKCksIGVuZCA9IG1fc3RyZWFtcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0
KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kLT5ucFN0cmVhbSgpID09IHN0cmVhbSkgewotICAg
ICAgICAgICAgcGx1Z2luU3RyZWFtID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgaWYgKGl0
LT52YWx1ZS0+bnBTdHJlYW0oKSA9PSBzdHJlYW0pIHsKKyAgICAgICAgICAgIHBsdWdpblN0cmVh
bSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
fQpAQCAtMzg3LDcgKzM4Nyw3IEBAIHZvaWQgTmV0c2NhcGVQbHVnaW46OnVuc2NoZWR1bGVUaW1l
cih1bnNpZ25lZCB0aW1lcklEKQogICAgIGlmIChpdCA9PSBtX3RpbWVycy5lbmQoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgT3duUHRyPFRpbWVyPiB0aW1lciA9IGFkb3B0UHRyKGl0LT5zZWNv
bmQpOworICAgIE93blB0cjxUaW1lcj4gdGltZXIgPSBhZG9wdFB0cihpdC0+dmFsdWUpOwogICAg
IG1fdGltZXJzLnJlbW92ZShpdCk7CiAKICAgICB0aW1lci0+c3RvcCgpOwpAQCAtNzMwLDggKzcz
MCw4IEBAIHZvaWQgTmV0c2NhcGVQbHVnaW46OmZyYW1lRGlkRmluaXNoTG9hZGluZyh1aW50NjRf
dCByZXF1ZXN0SUQpCiAgICAgaWYgKGl0ID09IG1fcGVuZGluZ1VSTE5vdGlmaWNhdGlvbnMuZW5k
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFN0cmluZyB1cmwgPSBpdC0+c2Vjb25kLmZpcnN0
OwotICAgIHZvaWQqIG5vdGlmaWNhdGlvbkRhdGEgPSBpdC0+c2Vjb25kLnNlY29uZDsKKyAgICBT
dHJpbmcgdXJsID0gaXQtPnZhbHVlLmZpcnN0OworICAgIHZvaWQqIG5vdGlmaWNhdGlvbkRhdGEg
PSBpdC0+dmFsdWUuc2Vjb25kOwogCiAgICAgbV9wZW5kaW5nVVJMTm90aWZpY2F0aW9ucy5yZW1v
dmUoaXQpOwogICAgIApAQCAtNzQ2LDggKzc0Niw4IEBAIHZvaWQgTmV0c2NhcGVQbHVnaW46OmZy
YW1lRGlkRmFpbCh1aW50NjRfdCByZXF1ZXN0SUQsIGJvb2wgd2FzQ2FuY2VsbGVkKQogICAgIGlm
IChpdCA9PSBtX3BlbmRpbmdVUkxOb3RpZmljYXRpb25zLmVuZCgpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBTdHJpbmcgdXJsID0gaXQtPnNlY29uZC5maXJzdDsKLSAgICB2b2lkKiBub3RpZmlj
YXRpb25EYXRhID0gaXQtPnNlY29uZC5zZWNvbmQ7CisgICAgU3RyaW5nIHVybCA9IGl0LT52YWx1
ZS5maXJzdDsKKyAgICB2b2lkKiBub3RpZmljYXRpb25EYXRhID0gaXQtPnZhbHVlLnNlY29uZDsK
IAogICAgIG1fcGVuZGluZ1VSTE5vdGlmaWNhdGlvbnMucmVtb3ZlKGl0KTsKICAgICAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAppbmRleCAw
NzJhNjljLi5hMTA2ZTQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1Bs
dWdpbnMvUGx1Z2luVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVn
aW5zL1BsdWdpblZpZXcuY3BwCkBAIC0xNzAsOSArMTcwLDkgQEAgc3RhdGljIFN0cmluZyBidWls
ZEhUVFBIZWFkZXJzKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBsb25nIGxvbmcm
IGV4cGUKICAgICAKICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSByZXNw
b25zZS5odHRwSGVhZGVyRmllbGRzKCkuZW5kKCk7CiAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMoKS5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPmZpcnN0
LmNoYXJhY3RlcnMoKSwgaXQtPmZpcnN0Lmxlbmd0aCgpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQoaXQtPmtleS5jaGFyYWN0ZXJzKCksIGl0LT5rZXkubGVuZ3RoKCkpOwogICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZChzZXBhcmF0b3IuY2hhcmFjdGVycygpLCBzZXBhcmF0b3Iu
bGVuZ3RoKCkpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+c2Vjb25kLmNoYXJh
Y3RlcnMoKSwgaXQtPnNlY29uZC5sZW5ndGgoKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKGl0LT52YWx1ZS5jaGFyYWN0ZXJzKCksIGl0LT52YWx1ZS5sZW5ndGgoKSk7CiAgICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwogICAgIH0KICAgICAKQEAgLTI4Myw3ICsyODMs
NyBAQCBQbHVnaW5WaWV3Ojp+UGx1Z2luVmlldygpCiAKICAgICAvLyBDYW5jZWwgYWxsIHBlbmRp
bmcgZnJhbWUgbG9hZHMuCiAgICAgZm9yIChGcmFtZUxvYWRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9w
ZW5kaW5nRnJhbWVMb2Fkcy5iZWdpbigpLCBlbmQgPSBtX3BlbmRpbmdGcmFtZUxvYWRzLmVuZCgp
OyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5maXJzdC0+c2V0TG9hZExpc3RlbmVyKDAp
OworICAgICAgICBpdC0+a2V5LT5zZXRMb2FkTGlzdGVuZXIoMCk7CiAKICAgICBpZiAobV9wbHVn
aW4gJiYgbV9pc0luaXRpYWxpemVkKSB7CiAgICAgICAgIG1faXNCZWluZ0Rlc3Ryb3llZCA9IHRy
dWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJU
cmVlQ29vcmRpbmF0b3IvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3BwIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUNvb3JkaW5hdG9yL0xheWVyVHJlZUNvb3JkaW5h
dG9yLmNwcAppbmRleCBhZTM5OTQ0Li42N2MxNGZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvTGF5ZXJUcmVlQ29vcmRp
bmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRy
ZWVDb29yZGluYXRvci9MYXllclRyZWVDb29yZGluYXRvci5jcHAKQEAgLTQyNCw3ICs0MjQsNyBA
QCBpbnQ2NF90IExheWVyVHJlZUNvb3JkaW5hdG9yOjphZG9wdEltYWdlQmFja2luZ1N0b3JlKElt
YWdlKiBpbWFnZSkKICAgICBIYXNoTWFwPGludDY0X3QsIGludD46Oml0ZXJhdG9yIGl0ID0gbV9k
aXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5maW5kKGtleSk7CiAKICAgICBpZiAoaXQg
IT0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5lbmQoKSkgewotICAgICAgICAr
KyhpdC0+c2Vjb25kKTsKKyAgICAgICAgKysoaXQtPnZhbHVlKTsKICAgICAgICAgcmV0dXJuIGtl
eTsKICAgICB9CiAKQEAgLTQ0OSw5ICs0NDksOSBAQCB2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9y
OjpyZWxlYXNlSW1hZ2VCYWNraW5nU3RvcmUoaW50NjRfdCBrZXkpCiAgICAgaWYgKGl0ID09IG1f
ZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMuZW5kKCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGl0LT5zZWNvbmQtLTsKKyAgICBpdC0+dmFsdWUtLTsKIAotICAgIGlmIChpdC0+c2Vj
b25kKQorICAgIGlmIChpdC0+dmFsdWUpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fZGlyZWN0
bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMucmVtb3ZlKGl0KTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVDb29yZGluYXRvci9XZWJHcmFw
aGljc0xheWVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRy
ZWVDb29yZGluYXRvci9XZWJHcmFwaGljc0xheWVyLmNwcAppbmRleCAxOWNlNGQwLi5hNmQ1Zjc1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVl
Q29vcmRpbmF0b3IvV2ViR3JhcGhpY3NMYXllci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUNvb3JkaW5hdG9yL1dlYkdyYXBoaWNzTGF5ZXIuY3Bw
CkBAIC01Myw3ICs1Myw3IEBAIFdlYkdyYXBoaWNzTGF5ZXIqIFdlYkdyYXBoaWNzTGF5ZXI6Omxh
eWVyQnlJRChXZWJLaXQ6OldlYkxheWVySUQgaWQpCiAgICAgSGFzaE1hcDxXZWJMYXllcklELCBX
ZWJHcmFwaGljc0xheWVyKj46Oml0ZXJhdG9yIGl0ID0gdGFibGUuZmluZChpZCk7CiAgICAgaWYg
KGl0ID09IHRhYmxlLmVuZCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gaXQtPnNl
Y29uZDsKKyAgICByZXR1cm4gaXQtPnZhbHVlOwogfQogCiBzdGF0aWMgV2ViTGF5ZXJJRCB0b1dl
YkxheWVySUQoR3JhcGhpY3NMYXllciogbGF5ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFja0ZvcndhcmRMaXN0UHJveHkuY3BwIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFByb3h5LmNwcApp
bmRleCA0Y2E0ZTVmLi5iZTgyYTE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViQmFja0ZvcndhcmRMaXN0UHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9yd2FyZExpc3RQcm94eS5jcHAKQEAgLTEz
MCw5ICsxMzAsOSBAQCB2b2lkIFdlYkJhY2tGb3J3YXJkTGlzdFByb3h5OjpyZW1vdmVJdGVtKHVp
bnQ2NF90IGl0ZW1JRCkKICAgICBpZiAoaXQgPT0gaWRUb0hpc3RvcnlJdGVtTWFwKCkuZW5kKCkp
CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgV2ViQ29yZTo6cGFnZUNhY2hlKCktPnJl
bW92ZShpdC0+c2Vjb25kLmdldCgpKTsKKyAgICBXZWJDb3JlOjpwYWdlQ2FjaGUoKS0+cmVtb3Zl
KGl0LT52YWx1ZS5nZXQoKSk7CiAKLSAgICBoaXN0b3J5SXRlbVRvSURNYXAoKS5yZW1vdmUoaXQt
PnNlY29uZCk7CisgICAgaGlzdG9yeUl0ZW1Ub0lETWFwKCkucmVtb3ZlKGl0LT52YWx1ZSk7CiAg
ICAgaWRUb0hpc3RvcnlJdGVtTWFwKCkucmVtb3ZlKGl0KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCmluZGV4IDQzZDM4
MWUuLjYxMDk2MmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9tYWMvV2ViUGFnZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvbWFjL1dlYlBhZ2VNYWMubW0KQEAgLTEyMCw3ICsxMjAsNyBAQCBzdGF0aWMgU3RyaW5nIGNv
bW1hbmROYW1lRm9yU2VsZWN0b3JOYW1lKGNvbnN0IFN0cmluZyYgc2VsZWN0b3JOYW1lKQogICAg
IHN0YXRpYyBjb25zdCBTZWxlY3Rvck5hbWVNYXAqIGV4Y2VwdGlvbk1hcCA9IGNyZWF0ZVNlbGVj
dG9yRXhjZXB0aW9uTWFwKCk7CiAgICAgU2VsZWN0b3JOYW1lTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IGV4Y2VwdGlvbk1hcC0+ZmluZChzZWxlY3Rvck5hbWUpOwogICAgIGlmIChpdCAhPSBleGNl
cHRpb25NYXAtPmVuZCgpKQotICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICAgICAgcmV0
dXJuIGl0LT52YWx1ZTsKIAogICAgIC8vIFJlbW92ZSB0aGUgdHJhaWxpbmcgY29sb24uCiAgICAg
Ly8gTm8gbmVlZCB0byBjYXBpdGFsaXplIHRoZSBjb21tYW5kIG5hbWUgc2luY2UgRWRpdG9yIGNv
bW1hbmQgbmFtZXMgYXJlIG5vdCBjYXNlIHNlbnNpdGl2ZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlByb2Nlc3MuY3BwCmluZGV4IDZlYjhhYjdlLi5iNDBhOGViIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKQEAgLTMzNCw3ICszMzQsNyBAQCB2b2lkIFdl
YlByb2Nlc3M6OnZpc2l0ZWRMaW5rU3RhdGVDaGFuZ2VkKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpM
aW5rSGFzaD4mIGxpbmtIYQogICAgICAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8V2ViUGFn
ZUdyb3VwUHJveHk+ID46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wYWdlR3JvdXBNYXAuYmVnaW4o
KTsKICAgICAgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPFdlYlBhZ2VHcm91cFByb3h5PiA+
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BhZ2VHcm91cE1hcC5lbmQoKTsKICAgICAgICAgZm9y
ICg7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIFBhZ2U6OnZpc2l0ZWRTdGF0ZUNoYW5n
ZWQoUGFnZUdyb3VwOjpwYWdlR3JvdXAoaXQtPnNlY29uZC0+aWRlbnRpZmllcigpKSwgbGlua0hh
c2hlc1tpXSk7CisgICAgICAgICAgICBQYWdlOjp2aXNpdGVkU3RhdGVDaGFuZ2VkKFBhZ2VHcm91
cDo6cGFnZUdyb3VwKGl0LT52YWx1ZS0+aWRlbnRpZmllcigpKSwgbGlua0hhc2hlc1tpXSk7CiAg
ICAgfQogCiAgICAgcGFnZUNhY2hlKCktPm1hcmtQYWdlc0ZvclZpc3RlZExpbmtTdHlsZVJlY2Fs
YygpOwpAQCAtMzQ2LDcgKzM0Niw3IEBAIHZvaWQgV2ViUHJvY2Vzczo6YWxsVmlzaXRlZExpbmtT
dGF0ZUNoYW5nZWQoKQogICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxXZWJQYWdlR3JvdXBQ
cm94eT4gPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BhZ2VHcm91cE1hcC5iZWdpbigpOwogICAg
IEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxXZWJQYWdlR3JvdXBQcm94eT4gPjo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gbV9wYWdlR3JvdXBNYXAuZW5kKCk7CiAgICAgZm9yICg7IGl0ICE9IGVuZDsg
KytpdCkKLSAgICAgICAgUGFnZTo6YWxsVmlzaXRlZFN0YXRlQ2hhbmdlZChQYWdlR3JvdXA6OnBh
Z2VHcm91cChpdC0+c2Vjb25kLT5pZGVudGlmaWVyKCkpKTsKKyAgICAgICAgUGFnZTo6YWxsVmlz
aXRlZFN0YXRlQ2hhbmdlZChQYWdlR3JvdXA6OnBhZ2VHcm91cChpdC0+dmFsdWUtPmlkZW50aWZp
ZXIoKSkpOwogCiAgICAgcGFnZUNhY2hlKCktPm1hcmtQYWdlc0ZvclZpc3RlZExpbmtTdHlsZVJl
Y2FsYygpOwogfQpAQCAtNTIyLDcgKzUyMiw3IEBAIFdlYlBhZ2UqIFdlYlByb2Nlc3M6OmZvY3Vz
ZWRXZWJQYWdlKCkgY29uc3QKIHsgICAgCiAgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPFdl
YlBhZ2U+ID46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGFnZU1hcC5lbmQoKTsKICAgICBmb3Ig
KEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxXZWJQYWdlPiA+Ojpjb25zdF9pdGVyYXRvciBpdCA9
IG1fcGFnZU1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgV2ViUGFnZSog
cGFnZSA9ICgqaXQpLnNlY29uZC5nZXQoKTsKKyAgICAgICAgV2ViUGFnZSogcGFnZSA9ICgqaXQp
LnZhbHVlLmdldCgpOwogICAgICAgICBpZiAocGFnZS0+d2luZG93QW5kV2ViUGFnZUFyZUZvY3Vz
ZWQoKSkKICAgICAgICAgICAgIHJldHVybiBwYWdlOwogICAgIH0KQEAgLTU0MCwxNCArNTQwLDE0
IEBAIHZvaWQgV2ViUHJvY2Vzczo6Y3JlYXRlV2ViUGFnZSh1aW50NjRfdCBwYWdlSUQsIGNvbnN0
IFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMmCiAgICAgLy8gbGluaykgdGhlIFdlYlBhZ2UgZ2V0
cyBjcmVhdGVkIGJvdGggaW4gdGhlIHN5bmNocm9ub3VzIGhhbmRsZXIgYW5kIHRocm91Z2ggdGhl
IG5vcm1hbCB3YXkuIAogICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxXZWJQYWdlPiA+OjpB
ZGRSZXN1bHQgcmVzdWx0ID0gbV9wYWdlTWFwLmFkZChwYWdlSUQsIDApOwogICAgIGlmIChyZXN1
bHQuaXNOZXdFbnRyeSkgewotICAgICAgICBBU1NFUlQoIXJlc3VsdC5pdGVyYXRvci0+c2Vjb25k
KTsKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBXZWJQYWdlOjpjcmVhdGUocGFn
ZUlELCBwYXJhbWV0ZXJzKTsKKyAgICAgICAgQVNTRVJUKCFyZXN1bHQuaXRlcmF0b3ItPnZhbHVl
KTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IFdlYlBhZ2U6OmNyZWF0ZShwYWdl
SUQsIHBhcmFtZXRlcnMpOwogCiAgICAgICAgIC8vIEJhbGFuY2VkIGJ5IGFuIGVuYWJsZVRlcm1p
bmF0aW9uIGluIHJlbW92ZVdlYlBhZ2UuCiAgICAgICAgIGRpc2FibGVUZXJtaW5hdGlvbigpOwog
ICAgIH0KIAotICAgIEFTU0VSVChyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7CisgICAgQVNTRVJU
KHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwogfQogCiB2b2lkIFdlYlByb2Nlc3M6OnJlbW92ZVdl
YlBhZ2UodWludDY0X3QgcGFnZUlEKQpAQCAtNzg0LDExICs3ODQsMTEgQEAgV2ViUGFnZUdyb3Vw
UHJveHkqIFdlYlByb2Nlc3M6OndlYlBhZ2VHcm91cChjb25zdCBXZWJQYWdlR3JvdXBEYXRhJiBw
YWdlR3JvdXBEYXQKIHsKICAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8V2ViUGFnZUdyb3Vw
UHJveHk+ID46OkFkZFJlc3VsdCByZXN1bHQgPSBtX3BhZ2VHcm91cE1hcC5hZGQocGFnZUdyb3Vw
RGF0YS5wYWdlR3JvdXBJRCwgMCk7CiAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAg
ICAgIEFTU0VSVCghcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOwotICAgICAgICByZXN1bHQuaXRl
cmF0b3ItPnNlY29uZCA9IFdlYlBhZ2VHcm91cFByb3h5OjpjcmVhdGUocGFnZUdyb3VwRGF0YSk7
CisgICAgICAgIEFTU0VSVCghcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CisgICAgICAgIHJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUgPSBXZWJQYWdlR3JvdXBQcm94eTo6Y3JlYXRlKHBhZ2VHcm91cERh
dGEpOwogICAgIH0KIAotICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnNlY29uZC5nZXQoKTsK
KyAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKIH0KIAogc3RhdGljIGJv
b2wgY2FuUGx1Z2luSGFuZGxlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9u
c2UpCkBAIC04ODcsNyArODg3LDcgQEAgc3RhdGljIHZvaWQgZnJvbUNvdW50ZWRTZXRUb0hhc2hN
YXAoVHlwZUNvdW50U2V0KiBjb3VudGVkU2V0LCBIYXNoTWFwPFN0cmluZywgdWkKIHsKICAgICBU
eXBlQ291bnRTZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGNvdW50ZWRTZXQtPmVuZCgpOwogICAg
IGZvciAoVHlwZUNvdW50U2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IGNvdW50ZWRTZXQtPmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgbWFwLnNldChpdC0+Zmlyc3QsIGl0LT5zZWNv
bmQpOworICAgICAgICBtYXAuc2V0KGl0LT5rZXksIGl0LT52YWx1ZSk7CiB9CiAKIHN0YXRpYyB2
b2lkIGdldFdlYkNvcmVNZW1vcnlDYWNoZVN0YXRpc3RpY3MoVmVjdG9yPEhhc2hNYXA8U3RyaW5n
LCB1aW50NjRfdD4gPiYgcmVzdWx0KQpAQCAtMTA2Miw3ICsxMDYyLDcgQEAgdm9pZCBXZWJQcm9j
ZXNzOjpzZXRUZXh0Q2hlY2tlclN0YXRlKGNvbnN0IFRleHRDaGVja2VyU3RhdGUmIHRleHRDaGVj
a2VyU3RhdGUpCiAKICAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8V2ViUGFnZT4gPjo6aXRl
cmF0b3IgZW5kID0gbV9wYWdlTWFwLmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDx1aW50NjRfdCwg
UmVmUHRyPFdlYlBhZ2U+ID46Oml0ZXJhdG9yIGl0ID0gbV9wYWdlTWFwLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgewotICAgICAgICBXZWJQYWdlKiBwYWdlID0gKCppdCkuc2Vjb25kLmdldCgp
OworICAgICAgICBXZWJQYWdlKiBwYWdlID0gKCppdCkudmFsdWUuZ2V0KCk7CiAgICAgICAgIGlm
IChjb250aW51b3VzU3BlbGxDaGVja2luZ1R1cm5lZE9mZikKICAgICAgICAgICAgIHBhZ2UtPnVu
bWFya0FsbE1pc3NwZWxsaW5ncygpOwogICAgICAgICBpZiAoZ3JhbW1hckNoZWNraW5nVHVybmVk
T2ZmKQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTW9ja1dlYlNw
ZWVjaElucHV0Q29udHJvbGxlci5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9N
b2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyLmNwcAppbmRleCA3MTYyMjJmLi4xM2M4ZmYxIDEw
MDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9Nb2NrV2ViU3BlZWNoSW5w
dXRDb250cm9sbGVyLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9Nb2Nr
V2ViU3BlZWNoSW5wdXRDb250cm9sbGVyLmNwcApAQCAtNTIsNyArNTIsNyBAQCB2b2lkIE1vY2tX
ZWJTcGVlY2hJbnB1dENvbnRyb2xsZXI6OmFkZE1vY2tSZWNvZ25pdGlvblJlc3VsdChjb25zdCBX
ZWJTdHJpbmcmIHJlcwogICAgICAgICBTdHJpbmcgbGFuZ1N0cmluZyA9IFN0cmluZzo6ZnJvbVVU
RjgobGFuZ3VhZ2UudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIGlmICghbV9yZWNvZ25pdGlvblJl
c3VsdHMuY29udGFpbnMobGFuZ1N0cmluZykpCiAgICAgICAgICAgICBtX3JlY29nbml0aW9uUmVz
dWx0cy5zZXQobGFuZ1N0cmluZywgVmVjdG9yPFdlYlNwZWVjaElucHV0UmVzdWx0PigpKTsKLSAg
ICAgICAgbV9yZWNvZ25pdGlvblJlc3VsdHMuZmluZChsYW5nU3RyaW5nKS0+c2Vjb25kLmFwcGVu
ZChyZXMpOworICAgICAgICBtX3JlY29nbml0aW9uUmVzdWx0cy5maW5kKGxhbmdTdHJpbmcpLT52
YWx1ZS5hcHBlbmQocmVzKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL05vdGlmaWNhdGlvblByZXNlbnRlci5jcHAgYi9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9Ob3RpZmljYXRpb25QcmVzZW50ZXIuY3BwCmluZGV4IDBjNTQwMGYu
LmEyMTU4OGYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL05vdGlm
aWNhdGlvblByZXNlbnRlci5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
Tm90aWZpY2F0aW9uUHJlc2VudGVyLmNwcApAQCAtNzUsNyArNzUsNyBAQCBib29sIE5vdGlmaWNh
dGlvblByZXNlbnRlcjo6c2ltdWxhdGVDbGljayhjb25zdCBXZWJTdHJpbmcmIHRpdGxlKQogICAg
IGlmIChtX2FjdGl2ZU5vdGlmaWNhdGlvbnMuZmluZChpZCkgPT0gbV9hY3RpdmVOb3RpZmljYXRp
b25zLmVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgY29uc3QgV2ViTm90
aWZpY2F0aW9uJiBub3RpZmljYXRpb24gPSBtX2FjdGl2ZU5vdGlmaWNhdGlvbnMuZmluZChpZCkt
PnNlY29uZDsKKyAgICBjb25zdCBXZWJOb3RpZmljYXRpb24mIG5vdGlmaWNhdGlvbiA9IG1fYWN0
aXZlTm90aWZpY2F0aW9ucy5maW5kKGlkKS0+dmFsdWU7CiAgICAgV2ViTm90aWZpY2F0aW9uIGV2
ZW50VGFyZ2V0KG5vdGlmaWNhdGlvbik7CiAgICAgZXZlbnRUYXJnZXQuZGlzcGF0Y2hDbGlja0V2
ZW50KCk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC04OSw3ICs4OSw3IEBAIGJvb2wgTm90aWZpY2F0
aW9uUHJlc2VudGVyOjpzaG93KGNvbnN0IFdlYk5vdGlmaWNhdGlvbiYgbm90aWZpY2F0aW9uKQog
ICAgICAgICBXVEY6OlN0cmluZyByZXBsYWNlSWQobm90aWZpY2F0aW9uLnJlcGxhY2VJZCgpLmRh
dGEoKSwgbm90aWZpY2F0aW9uLnJlcGxhY2VJZCgpLmxlbmd0aCgpKTsKICAgICAgICAgaWYgKG1f
cmVwbGFjZW1lbnRzLmZpbmQocmVwbGFjZUlkKSAhPSBtX3JlcGxhY2VtZW50cy5lbmQoKSkKICAg
ICAgICAgICAgIHByaW50ZigiUkVQTEFDSU5HIE5PVElGSUNBVElPTiAlc1xuIiwKLSAgICAgICAg
ICAgICAgICAgICBtX3JlcGxhY2VtZW50cy5maW5kKHJlcGxhY2VJZCktPnNlY29uZC51dGY4KCku
ZGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICBtX3JlcGxhY2VtZW50cy5maW5kKHJlcGxhY2VJ
ZCktPnZhbHVlLnV0ZjgoKS5kYXRhKCkpOwogCiAgICAgICAgIG1fcmVwbGFjZW1lbnRzLnNldChy
ZXBsYWNlSWQsIFdURjo6U3RyaW5nKGlkZW50aWZpZXIuZGF0YSgpLCBpZGVudGlmaWVyLmxlbmd0
aCgpKSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
VGVzdFJ1bm5lci9DcHBCb3VuZENsYXNzLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL1Rlc3RSdW5uZXIvQ3BwQm91bmRDbGFzcy5jcHAKaW5kZXggOWI0YTNiNi4uMWIyOWQyYiAx
MDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9DcHBC
b3VuZENsYXNzLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVu
bmVyL0NwcEJvdW5kQ2xhc3MuY3BwCkBAIC0yMDMsMTAgKzIwMywxMCBAQCBib29sIENwcE5QT2Jq
ZWN0OjpzZXRQcm9wZXJ0eShOUE9iamVjdCogbnBPYmosIE5QSWRlbnRpZmllciBpZGVudCwgY29u
c3QgTlBWYXJpYQogQ3BwQm91bmRDbGFzczo6fkNwcEJvdW5kQ2xhc3MoKQogewogICAgIGZvciAo
TWV0aG9kTGlzdDo6aXRlcmF0b3IgaSA9IG1fbWV0aG9kcy5iZWdpbigpOyBpICE9IG1fbWV0aG9k
cy5lbmQoKTsgKytpKQotICAgICAgICBkZWxldGUgaS0+c2Vjb25kOworICAgICAgICBkZWxldGUg
aS0+dmFsdWU7CiAKICAgICBmb3IgKFByb3BlcnR5TGlzdDo6aXRlcmF0b3IgaSA9IG1fcHJvcGVy
dGllcy5iZWdpbigpOyBpICE9IG1fcHJvcGVydGllcy5lbmQoKTsgKytpKQotICAgICAgICBkZWxl
dGUgaS0+c2Vjb25kOworICAgICAgICBkZWxldGUgaS0+dmFsdWU7CiAKICAgICAvLyBVbnJlZ2lz
dGVyIG91cnNlbHZlcyBpZiB3ZSB3ZXJlIGJvdW5kIHRvIGEgZnJhbWUuCiAgICAgaWYgKG1fYm91
bmRUb0ZyYW1lKQpAQCAtMjM3LDcgKzIzNyw3IEBAIGJvb2wgQ3BwQm91bmRDbGFzczo6aW52b2tl
KE5QSWRlbnRpZmllciBpZGVudCwKICAgICAgICAgfQogICAgICAgICBjYWxsYmFjayA9IG1fZmFs
bGJhY2tDYWxsYmFjay5nZXQoKTsKICAgICB9IGVsc2UKLSAgICAgICAgY2FsbGJhY2sgPSAoKm1l
dGhvZCkuc2Vjb25kOworICAgICAgICBjYWxsYmFjayA9ICgqbWV0aG9kKS52YWx1ZTsKIAogICAg
IC8vIEJ1aWxkIGEgQ3BwQXJndW1lbnRMaXN0IGFyZ3VtZW50IHZlY3RvciBmcm9tIHRoZSBOUFZh
cmlhbnRzIGNvbWluZyBpbi4KICAgICBDcHBBcmd1bWVudExpc3QgY3BwQXJndW1lbnRzKGFyZ3Vt
ZW50Q291bnQpOwpAQCAtMjYwLDcgKzI2MCw3IEBAIGJvb2wgQ3BwQm91bmRDbGFzczo6Z2V0UHJv
cGVydHkoTlBJZGVudGlmaWVyIGlkZW50LCBOUFZhcmlhbnQqIHJlc3VsdCkgY29uc3QKICAgICB9
CiAKICAgICBDcHBWYXJpYW50IGNwcFZhbHVlOwotICAgIGlmICghY2FsbGJhY2stPnNlY29uZC0+
Z2V0VmFsdWUoJmNwcFZhbHVlKSkKKyAgICBpZiAoIWNhbGxiYWNrLT52YWx1ZS0+Z2V0VmFsdWUo
JmNwcFZhbHVlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGNwcFZhbHVlLmNvcHlUb05Q
VmFyaWFudChyZXN1bHQpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMjc0LDcgKzI3NCw3IEBAIGJv
b2wgQ3BwQm91bmRDbGFzczo6c2V0UHJvcGVydHkoTlBJZGVudGlmaWVyIGlkZW50LCBjb25zdCBO
UFZhcmlhbnQqIHZhbHVlKQogCiAgICAgQ3BwVmFyaWFudCBjcHBWYWx1ZTsKICAgICBjcHBWYWx1
ZS5zZXQoKnZhbHVlKTsKLSAgICByZXR1cm4gKCpjYWxsYmFjaykuc2Vjb25kLT5zZXRWYWx1ZShj
cHBWYWx1ZSk7CisgICAgcmV0dXJuICgqY2FsbGJhY2spLnZhbHVlLT5zZXRWYWx1ZShjcHBWYWx1
ZSk7CiB9CiAKIHZvaWQgQ3BwQm91bmRDbGFzczo6YmluZENhbGxiYWNrKGNvbnN0IHN0cmluZyYg
bmFtZSwgQ2FsbGJhY2sqIGNhbGxiYWNrKQpAQCAtMjgyLDcgKzI4Miw3IEBAIHZvaWQgQ3BwQm91
bmRDbGFzczo6YmluZENhbGxiYWNrKGNvbnN0IHN0cmluZyYgbmFtZSwgQ2FsbGJhY2sqIGNhbGxi
YWNrKQogICAgIE5QSWRlbnRpZmllciBpZGVudCA9IFdlYkJpbmRpbmdzOjpnZXRTdHJpbmdJZGVu
dGlmaWVyKG5hbWUuY19zdHIoKSk7CiAgICAgTWV0aG9kTGlzdDo6aXRlcmF0b3Igb2xkQ2FsbGJh
Y2sgPSBtX21ldGhvZHMuZmluZChpZGVudCk7CiAgICAgaWYgKG9sZENhbGxiYWNrICE9IG1fbWV0
aG9kcy5lbmQoKSkgewotICAgICAgICBkZWxldGUgb2xkQ2FsbGJhY2stPnNlY29uZDsKKyAgICAg
ICAgZGVsZXRlIG9sZENhbGxiYWNrLT52YWx1ZTsKICAgICAgICAgaWYgKCFjYWxsYmFjaykgewog
ICAgICAgICAgICAgbV9tZXRob2RzLnJlbW92ZShvbGRDYWxsYmFjayk7CiAgICAgICAgICAgICBy
ZXR1cm47CkBAIC0zMDksNyArMzA5LDcgQEAgdm9pZCBDcHBCb3VuZENsYXNzOjpiaW5kUHJvcGVy
dHkoY29uc3Qgc3RyaW5nJiBuYW1lLCBQcm9wZXJ0eUNhbGxiYWNrKiBjYWxsYmFjaykKICAgICBO
UElkZW50aWZpZXIgaWRlbnQgPSBXZWJCaW5kaW5nczo6Z2V0U3RyaW5nSWRlbnRpZmllcihuYW1l
LmNfc3RyKCkpOwogICAgIFByb3BlcnR5TGlzdDo6aXRlcmF0b3Igb2xkQ2FsbGJhY2sgPSBtX3By
b3BlcnRpZXMuZmluZChpZGVudCk7CiAgICAgaWYgKG9sZENhbGxiYWNrICE9IG1fcHJvcGVydGll
cy5lbmQoKSkgewotICAgICAgICBkZWxldGUgb2xkQ2FsbGJhY2stPnNlY29uZDsKKyAgICAgICAg
ZGVsZXRlIG9sZENhbGxiYWNrLT52YWx1ZTsKICAgICAgICAgaWYgKCFjYWxsYmFjaykgewogICAg
ICAgICAgICAgbV9wcm9wZXJ0aWVzLnJlbW92ZShvbGRDYWxsYmFjayk7CiAgICAgICAgICAgICBy
ZXR1cm47CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQcmVm
ZXJlbmNlcy5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNl
cy5jcHAKaW5kZXggYzRkZTBhYi4uNmVjMGU0MyAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vV2ViUHJlZmVyZW5jZXMuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL1dlYlByZWZlcmVuY2VzLmNwcApAQCAtMTU2LDkgKzE1Niw5IEBAIHR5cGVk
ZWYgdm9pZCAoKlNldEZvbnRGYW1pbHlXcmFwcGVyKShXZWJTZXR0aW5ncyosIGNvbnN0IFdlYlN0
cmluZyYsIFVTY3JpcHRDb2RlCiBzdGF0aWMgdm9pZCBhcHBseUZvbnRNYXAoV2ViU2V0dGluZ3Mq
IHNldHRpbmdzLCBjb25zdCBXZWJQcmVmZXJlbmNlczo6U2NyaXB0Rm9udEZhbWlseU1hcCYgbWFw
LCBTZXRGb250RmFtaWx5V3JhcHBlciBzZXR0ZXIpCiB7CiAgICAgZm9yIChXZWJQcmVmZXJlbmNl
czo6U2NyaXB0Rm9udEZhbWlseU1hcDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1hcC5iZWdpbigp
OyBpdGVyICE9IG1hcC5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIGNvbnN0IFdlYlN0cmluZyYg
Zm9udCA9IGl0ZXItPnNlY29uZDsKKyAgICAgICAgY29uc3QgV2ViU3RyaW5nJiBmb250ID0gaXRl
ci0+dmFsdWU7CiAgICAgICAgIGlmICghZm9udC5pc051bGwoKSAmJiAhZm9udC5pc0VtcHR5KCkp
Ci0gICAgICAgICAgICAoKnNldHRlcikoc2V0dGluZ3MsIGZvbnQsIHN0YXRpY19jYXN0PFVTY3Jp
cHRDb2RlPihpdGVyLT5maXJzdCkpOworICAgICAgICAgICAgKCpzZXR0ZXIpKHNldHRpbmdzLCBm
b250LCBzdGF0aWNfY2FzdDxVU2NyaXB0Q29kZT4oaXRlci0+a2V5KSk7CiAgICAgfQogfQogCmRp
ZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5jcHAg
Yi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5jcHAKaW5kZXggYmE1
ZWNmMC4uYjMyZTE0NSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
V2ViVmlld0hvc3QuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZp
ZXdIb3N0LmNwcApAQCAtMTc1NCw3ICsxNzU0LDcgQEAgdm9pZCBXZWJWaWV3SG9zdDo6cHJpbnRG
cmFtZVVzZXJHZXN0dXJlU3RhdHVzKFdlYkZyYW1lKiB3ZWJmcmFtZSwgY29uc3QgY2hhciogbXMK
IHZvaWQgV2ViVmlld0hvc3Q6OnByaW50UmVzb3VyY2VEZXNjcmlwdGlvbih1bnNpZ25lZCBpZGVu
dGlmaWVyKQogewogICAgIFJlc291cmNlTWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VJZGVu
dGlmaWVyTWFwLmZpbmQoaWRlbnRpZmllcik7Ci0gICAgcHJpbnRmKCIlcyIsIGl0ICE9IG1fcmVz
b3VyY2VJZGVudGlmaWVyTWFwLmVuZCgpID8gaXQtPnNlY29uZC5jX3N0cigpIDogIjx1bmtub3du
PiIpOworICAgIHByaW50ZigiJXMiLCBpdCAhPSBtX3Jlc291cmNlSWRlbnRpZmllck1hcC5lbmQo
KSA/IGl0LT52YWx1ZS5jX3N0cigpIDogIjx1bmtub3duPiIpOwogfQogCiB2b2lkIFdlYlZpZXdI
b3N0OjpzZXRQZW5kaW5nRXh0cmFEYXRhKFBhc3NPd25QdHI8VGVzdFNoZWxsRXh0cmFEYXRhPiBl
eHRyYURhdGEpCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvTGF5b3V0VGVz
dENvbnRyb2xsZXJNYWMubW0gYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvTGF5b3V0VGVzdENv
bnRyb2xsZXJNYWMubW0KaW5kZXggYTMyMjg3MS4uMTVmYWUzNCAxMDA2NDQKLS0tIGEvVG9vbHMv
RHVtcFJlbmRlclRyZWUvbWFjL0xheW91dFRlc3RDb250cm9sbGVyTWFjLm1tCisrKyBiL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL21hYy9MYXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbQpAQCAtOTA5LDgg
KzkwOSw4IEBAIHVuc2lnbmVkIHdvcmxkSURGb3JXb3JsZChXZWJTY3JpcHRXb3JsZCAqd29ybGQp
CiB7CiAgICAgV29ybGRNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHdvcmxkTWFwKCkuZW5kKCk7
CiAgICAgZm9yIChXb3JsZE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSB3b3JsZE1hcCgpLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnNlY29uZCA9PSB3b3JsZCkK
LSAgICAgICAgICAgIHJldHVybiBpdC0+Zmlyc3Q7CisgICAgICAgIGlmIChpdC0+dmFsdWUgPT0g
d29ybGQpCisgICAgICAgICAgICByZXR1cm4gaXQtPmtleTsKICAgICB9CiAKICAgICByZXR1cm4g
MDsKQEAgLTkzMiw3ICs5MzIsNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0
ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCh1bnNpZ25lZCB3b3JsZElELCBKU09iagogICAgIGlmICgh
d29ybGRJRCkKICAgICAgICAgd29ybGQgPSBbV2ViU2NyaXB0V29ybGQgd29ybGRdOwogICAgIGVs
c2UgewotICAgICAgICBSZXRhaW5QdHI8V2ViU2NyaXB0V29ybGQ+JiB3b3JsZFNsb3QgPSB3b3Js
ZE1hcCgpLmFkZCh3b3JsZElELCAwKS5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICBSZXRhaW5Q
dHI8V2ViU2NyaXB0V29ybGQ+JiB3b3JsZFNsb3QgPSB3b3JsZE1hcCgpLmFkZCh3b3JsZElELCAw
KS5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgIGlmICghd29ybGRTbG90KQogICAgICAgICAgICAg
d29ybGRTbG90LmFkb3B0TlMoW1tXZWJTY3JpcHRXb3JsZCBhbGxvY10gaW5pdF0pOwogICAgICAg
ICB3b3JsZCA9IHdvcmxkU2xvdC5nZXQoKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL3dpbi9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlcldpbi5jcHAgYi9Ub29scy9EdW1wUmVuZGVy
VHJlZS93aW4vQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJXaW4uY3BwCmluZGV4IDdmOWFhNmMuLjRm
NTZlZmQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9BY2Nlc3NpYmlsaXR5
Q29udHJvbGxlcldpbi5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0FjY2Vzc2li
aWxpdHlDb250cm9sbGVyV2luLmNwcApAQCAtNTgsNyArNTgsNyBAQCBBY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlcjo6fkFjY2Vzc2liaWxpdHlDb250cm9sbGVyKCkKICAgICAgICAgVW5ob29rV2luRXZl
bnQobV9ub3RpZmljYXRpb25zRXZlbnRIb29rKTsKIAogICAgIGZvciAoSGFzaE1hcDxQbGF0Zm9y
bVVJRWxlbWVudCwgSlNPYmplY3RSZWY+OjppdGVyYXRvciBpdCA9IG1fbm90aWZpY2F0aW9uTGlz
dGVuZXJzLmJlZ2luKCk7IGl0ICE9IG1fbm90aWZpY2F0aW9uTGlzdGVuZXJzLmVuZCgpOyArK2l0
KQotICAgICAgICBKU1ZhbHVlVW5wcm90ZWN0KGZyYW1lLT5nbG9iYWxDb250ZXh0KCksIGl0LT5z
ZWNvbmQpOworICAgICAgICBKU1ZhbHVlVW5wcm90ZWN0KGZyYW1lLT5nbG9iYWxDb250ZXh0KCks
IGl0LT52YWx1ZSk7CiB9CiAKIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXI6OmVsZW1lbnRBdFBvaW50KGludCB4LCBpbnQgeSkKQEAgLTI5Myw3ICsyOTMsNyBA
QCB2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpyZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5l
cigpCiB2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjp3aW5Ob3RpZmljYXRpb25SZWNlaXZl
ZChQbGF0Zm9ybVVJRWxlbWVudCBlbGVtZW50LCBjb25zdCBzdHJpbmcmIGV2ZW50TmFtZSkKIHsK
ICAgICBmb3IgKEhhc2hNYXA8UGxhdGZvcm1VSUVsZW1lbnQsIEpTT2JqZWN0UmVmPjo6aXRlcmF0
b3IgaXQgPSBtX25vdGlmaWNhdGlvbkxpc3RlbmVycy5iZWdpbigpOyBpdCAhPSBtX25vdGlmaWNh
dGlvbkxpc3RlbmVycy5lbmQoKTsgKytpdCkgewotICAgICAgICBDT01QdHI8SVNlcnZpY2VQcm92
aWRlcj4gdGhpc1NlcnZpY2VQcm92aWRlcihRdWVyeSwgaXQtPmZpcnN0KTsKKyAgICAgICAgQ09N
UHRyPElTZXJ2aWNlUHJvdmlkZXI+IHRoaXNTZXJ2aWNlUHJvdmlkZXIoUXVlcnksIGl0LT5rZXkp
OwogICAgICAgICBpZiAoIXRoaXNTZXJ2aWNlUHJvdmlkZXIpCiAgICAgICAgICAgICBjb250aW51
ZTsKIApAQCAtMzE2LDcgKzMxNiw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6Ondp
bk5vdGlmaWNhdGlvblJlY2VpdmVkKFBsYXRmb3JtVUlFbGVtZW50IGVsZW1lbnQsCiAKICAgICAg
ICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGpzTm90aWZpY2F0aW9uKEFkb3B0LCBKU1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhldmVudE5hbWUuY19zdHIoKSkpOwogICAgICAgICBKU1Zh
bHVlUmVmIGFyZ3VtZW50ID0gSlNWYWx1ZU1ha2VTdHJpbmcoZnJhbWUtPmdsb2JhbENvbnRleHQo
KSwganNOb3RpZmljYXRpb24uZ2V0KCkpOwotICAgICAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9u
KGZyYW1lLT5nbG9iYWxDb250ZXh0KCksIGl0LT5zZWNvbmQsIE5VTEwsIDEsICZhcmd1bWVudCwg
TlVMTCk7CisgICAgICAgIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24oZnJhbWUtPmdsb2JhbENvbnRl
eHQoKSwgaXQtPnZhbHVlLCBOVUxMLCAxLCAmYXJndW1lbnQsIE5VTEwpOwogICAgIH0KIH0KIApk
aWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0xheW91dFRlc3RDb250cm9sbGVy
V2luLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9MYXlvdXRUZXN0Q29udHJvbGxlcldp
bi5jcHAKaW5kZXggZmZjM2QyNi4uMDQzMDgwNCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvd2luL0xheW91dFRlc3RDb250cm9sbGVyV2luLmNwcAorKysgYi9Ub29scy9EdW1wUmVu
ZGVyVHJlZS93aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJXaW4uY3BwCkBAIC0xMjQ2LDggKzEyNDYs
OCBAQCB1bnNpZ25lZCB3b3JsZElERm9yV29ybGQoSVdlYlNjcmlwdFdvcmxkKiB3b3JsZCkKIHsK
ICAgICBXb3JsZE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gd29ybGRNYXAoKS5lbmQoKTsKICAg
ICBmb3IgKFdvcmxkTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHdvcmxkTWFwKCkuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kID09IHdvcmxkKQotICAg
ICAgICAgICAgcmV0dXJuIGl0LT5maXJzdDsKKyAgICAgICAgaWYgKGl0LT52YWx1ZSA9PSB3b3Js
ZCkKKyAgICAgICAgICAgIHJldHVybiBpdC0+a2V5OwogICAgIH0KIAogICAgIHJldHVybiAwOwpA
QCAtMTI3MSw3ICsxMjcxLDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVT
Y3JpcHRJbklzb2xhdGVkV29ybGQodW5zaWduZWQgd29ybGRJRCwgSlNPYmoKICAgICAgICAgaWYg
KEZBSUxFRChXZWJLaXRDcmVhdGVJbnN0YW5jZShfX3V1aWRvZihXZWJTY3JpcHRXb3JsZCksIDAs
IF9fdXVpZG9mKHdvcmxkKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZ3b3JsZCkpKSkKICAg
ICAgICAgICAgIHJldHVybjsKICAgICB9IGVsc2UgewotICAgICAgICBDT01QdHI8SVdlYlNjcmlw
dFdvcmxkPiYgd29ybGRTbG90ID0gd29ybGRNYXAoKS5hZGQod29ybGRJRCwgMCkuaXRlcmF0b3It
PnNlY29uZDsKKyAgICAgICAgQ09NUHRyPElXZWJTY3JpcHRXb3JsZD4mIHdvcmxkU2xvdCA9IHdv
cmxkTWFwKCkuYWRkKHdvcmxkSUQsIDApLml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgaWYgKCF3
b3JsZFNsb3QgJiYgRkFJTEVEKFdlYktpdENyZWF0ZUluc3RhbmNlKF9fdXVpZG9mKFdlYlNjcmlw
dFdvcmxkKSwgMCwgX191dWlkb2Yod29ybGRTbG90KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+
KCZ3b3JsZFNsb3QpKSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIHdvcmxkID0gd29y
bGRTbG90OwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1Jlc291cmNlTG9h
ZERlbGVnYXRlLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9SZXNvdXJjZUxvYWREZWxl
Z2F0ZS5jcHAKaW5kZXggMjZiNzIyYS4uYThjZDNiZCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJl
bmRlclRyZWUvd2luL1Jlc291cmNlTG9hZERlbGVnYXRlLmNwcAorKysgYi9Ub29scy9EdW1wUmVu
ZGVyVHJlZS93aW4vUmVzb3VyY2VMb2FkRGVsZWdhdGUuY3BwCkBAIC02Niw3ICs2Niw3IEBAIHdz
dHJpbmcgUmVzb3VyY2VMb2FkRGVsZWdhdGU6OmRlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVz
dWx0KHVuc2lnbmVkIGxvbmcgaWRlCiAgICAgaWYgKGl0ID09IG1fdXJsTWFwLmVuZCgpKQogICAg
ICAgICByZXR1cm4gTCI8dW5rbm93bj4iOwogCi0gICAgcmV0dXJuIHVybFN1aXRhYmxlRm9yVGVz
dFJlc3VsdChpdC0+c2Vjb25kKTsKKyAgICByZXR1cm4gdXJsU3VpdGFibGVGb3JUZXN0UmVzdWx0
KGl0LT52YWx1ZSk7CiB9CiAKIHdzdHJpbmcgUmVzb3VyY2VMb2FkRGVsZWdhdGU6OmRlc2NyaXB0
aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KElXZWJVUkxSZXF1ZXN0KiByZXF1ZXN0KQpkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL0RPTVdpbmRvd0V4dGVuc2lv
bkJhc2ljX0J1bmRsZS5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvRE9N
V2luZG93RXh0ZW5zaW9uQmFzaWNfQnVuZGxlLmNwcAppbmRleCA5OGJmYWIzLi41YjEyOTZmIDEw
MDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvRE9NV2luZG93RXh0
ZW5zaW9uQmFzaWNfQnVuZGxlLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdDIvRE9NV2luZG93RXh0ZW5zaW9uQmFzaWNfQnVuZGxlLmNwcApAQCAtMTcxLDggKzE3MSw4
IEBAIHZvaWQgRE9NV2luZG93RXh0ZW5zaW9uQmFzaWM6OndpbGxEZXN0cm95UGFnZShXS0J1bmRs
ZVJlZiwgV0tCdW5kbGVQYWdlUmVmKQogICAgIEhhc2hNYXA8V0tCdW5kbGVET01XaW5kb3dFeHRl
bnNpb25SZWYsIGludD46Oml0ZXJhdG9yIGl0ID0gbV9leHRlbnNpb25Ub1JlY29yZE1hcC5iZWdp
bigpOwogICAgIEhhc2hNYXA8V0tCdW5kbGVET01XaW5kb3dFeHRlbnNpb25SZWYsIGludD46Oml0
ZXJhdG9yIGVuZCA9IG1fZXh0ZW5zaW9uVG9SZWNvcmRNYXAuZW5kKCk7CiAgICAgZm9yICg7IGl0
ICE9IGVuZDsgKytpdCkgewotICAgICAgICB1cGRhdGVFeHRlbnNpb25TdGF0ZVJlY29yZChpdC0+
Zmlyc3QsIFJlbW92ZWQpOwotICAgICAgICBXS1JlbGVhc2UoaXQtPmZpcnN0KTsKKyAgICAgICAg
dXBkYXRlRXh0ZW5zaW9uU3RhdGVSZWNvcmQoaXQtPmtleSwgUmVtb3ZlZCk7CisgICAgICAgIFdL
UmVsZWFzZShpdC0+a2V5KTsKICAgICB9CiAKICAgICBtX2V4dGVuc2lvblRvUmVjb3JkTWFwLmNs
ZWFyKCk7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvRE9N
V2luZG93RXh0ZW5zaW9uTm9DYWNoZV9CdW5kbGUuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXQyL0RPTVdpbmRvd0V4dGVuc2lvbk5vQ2FjaGVfQnVuZGxlLmNwcAppbmRleCA4
ZjZjZDdiLi40MTFlMTE1IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdDIvRE9NV2luZG93RXh0ZW5zaW9uTm9DYWNoZV9CdW5kbGUuY3BwCisrKyBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9ET01XaW5kb3dFeHRlbnNpb25Ob0NhY2hlX0J1bmRs
ZS5jcHAKQEAgLTE3OCw4ICsxNzgsOCBAQCB2b2lkIERPTVdpbmRvd0V4dGVuc2lvbk5vQ2FjaGU6
OndpbGxEZXN0cm95UGFnZShXS0J1bmRsZVJlZiwgV0tCdW5kbGVQYWdlUmVmKQogICAgIEhhc2hN
YXA8V0tCdW5kbGVET01XaW5kb3dFeHRlbnNpb25SZWYsIGludD46Oml0ZXJhdG9yIGl0ID0gbV9l
eHRlbnNpb25Ub1JlY29yZE1hcC5iZWdpbigpOwogICAgIEhhc2hNYXA8V0tCdW5kbGVET01XaW5k
b3dFeHRlbnNpb25SZWYsIGludD46Oml0ZXJhdG9yIGVuZCA9IG1fZXh0ZW5zaW9uVG9SZWNvcmRN
YXAuZW5kKCk7CiAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICB1cGRhdGVF
eHRlbnNpb25TdGF0ZVJlY29yZChpdC0+Zmlyc3QsIFJlbW92ZWQpOwotICAgICAgICBXS1JlbGVh
c2UoaXQtPmZpcnN0KTsKKyAgICAgICAgdXBkYXRlRXh0ZW5zaW9uU3RhdGVSZWNvcmQoaXQtPmtl
eSwgUmVtb3ZlZCk7CisgICAgICAgIFdLUmVsZWFzZShpdC0+a2V5KTsKICAgICB9CiAKICAgICBt
X2V4dGVuc2lvblRvUmVjb3JkTWFwLmNsZWFyKCk7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcCBiL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3Bw
CmluZGV4IDQ5ODFiM2MuLjk3NmExNTEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvSW5qZWN0ZWRCdW5kbGUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCkBA
IC00NTIsOCArNDUyLDggQEAgdW5zaWduZWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OndvcmxkSURG
b3JXb3JsZChXS0J1bmRsZVNjcmlwdFdvcmxkUmVmIHdvcmxkKQogewogICAgIFdvcmxkTWFwOjpj
b25zdF9pdGVyYXRvciBlbmQgPSB3b3JsZE1hcCgpLmVuZCgpOwogICAgIGZvciAoV29ybGRNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gd29ybGRNYXAoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQgPT0gd29ybGQpCi0gICAgICAgICAgICByZXR1cm4g
aXQtPmZpcnN0OworICAgICAgICBpZiAoaXQtPnZhbHVlID09IHdvcmxkKQorICAgICAgICAgICAg
cmV0dXJuIGl0LT5rZXk7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CkBAIC00NjcsNyArNDY3LDcg
QEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29y
bGQoSlNDb250ZXh0UmVmIGNvbnRleHQsIHUKICAgICBpZiAoIXdvcmxkSUQpCiAgICAgICAgIHdv
cmxkLmFkb3B0KFdLQnVuZGxlU2NyaXB0V29ybGRDcmVhdGVXb3JsZCgpKTsKICAgICBlbHNlIHsK
LSAgICAgICAgV0tSZXRhaW5QdHI8V0tCdW5kbGVTY3JpcHRXb3JsZFJlZj4mIHdvcmxkU2xvdCA9
IHdvcmxkTWFwKCkuYWRkKHdvcmxkSUQsIDApLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgIFdL
UmV0YWluUHRyPFdLQnVuZGxlU2NyaXB0V29ybGRSZWY+JiB3b3JsZFNsb3QgPSB3b3JsZE1hcCgp
LmFkZCh3b3JsZElELCAwKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgIGlmICghd29ybGRTbG90
KQogICAgICAgICAgICAgd29ybGRTbG90LmFkb3B0KFdLQnVuZGxlU2NyaXB0V29ybGRDcmVhdGVX
b3JsZCgpKTsKICAgICAgICAgd29ybGQgPSB3b3JsZFNsb3Q7Ci0tIAoxLjcuOS41Cgo=
</data>
<flag name="commit-queue"
          id="164488"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155275</attachid>
            <date>2012-07-30 06:00:02 -0700</date>
            <delta_ts>2012-07-30 10:42:28 -0700</delta_ts>
            <desc>Patch for EWS</desc>
            <filename>0001-tmp.patch</filename>
            <type>text/plain</type>
            <size>589796</size>
            <attacher name="Caio Marcelo de Oliveira Filho">cmarcelo</attacher>
            
              <data encoding="base64">RnJvbSAyMzliMWU5MjU0ZWQyOGUxMDFmNWQ1ZGNlZGMzOWM1M2EyOWEwODViIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBDYWlvIE1hcmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gPGNhaW8u
b2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KRGF0ZTogTW9uLCAzMCBKdWwgMjAxMiAwMjozNDo1MSAt
MDMwMApTdWJqZWN0OiBbUEFUQ0hdIHRtcAoKLS0tCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQ2FsbGJhY2tPYmplY3QuaCAgICAgICB8ICA4ICstCiAuLi4vSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaCB8ICA4ICstCiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTQ2xhc3NSZWYuY3BwICAgICAgICAgICB8IDE0ICsrLS0KIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwICAgICAgIHwgIDggKy0KIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9KdW1wVGFibGUuaCAgICAgICAgIHwgIDQgKy0KIC4uLi9ieXRl
Y29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5jcHAgICAgICAgICAgIHwgIDIgKy0KIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TYW1wbGluZ1Rvb2wuY3BwICAgIHwgIDYgKy0KIC4u
Li9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwICAgICAgICAgICAgIHwgMjAgKyst
LS0KIC4uLi9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcCAgIHwg
IDQgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAgICAgICAg
IHwgIDIgKy0KIC4uLi9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAgICAg
ICAgIHwgMjIgKysrLS0tCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fzc2VtYmx5SGVs
cGVycy5jcHAgICB8ICA0ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
Q2FjaGUuaCAgICAgICB8ICA4ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcCAgICB8ICA4ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
LmNwcCAgICAgICAgICAgICAgICB8ICAyICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwLmggICAgICAgICAgICAgICAgICB8ICAyICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9KSVRTdHViUm91dGluZVNldC5jcHAgICB8ICA0ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrU3RhY2suY3BwICAgICAgICAgICB8ICAyICstCiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9XZWFrLmggICAgICAgICAgICAgICAgICB8ICA0ICstCiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVC5jcHAgICAgICAgICAgICAgICAgICB8ICA0ICstCiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcCAgICAgICAgICAgICB8ICA0ICstCiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAgICAgICAgICAgICB8ICA2ICstCiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZS5jcHAgICAgICAgICB8ICA0ICstCiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmNwcCAgICAgICB8ICAyICstCiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uY3BwICAgICB8ICA4ICst
CiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcCAgICAgICAgICB8IDM4
ICsrKystLS0tLQogLi4uL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVj
dC5jcHAgfCAgNCArLQogLi4uL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9i
amVjdC5oICAgfCAxMiArLS0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENh
Y2hlLmNwcCAgICAgIHwgIDIgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtH
Q01hcC5oICAgICAgICAgIHwgIDYgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Qcm9m
aWxlVHJlZU5vZGUuaCAgICAgIHwgMTYgKystLQogU291cmNlL1dURi93dGYvSGFzaENvdW50ZWRT
ZXQuaCAgICAgICAgICAgICAgICAgICAgfCAgOCArLQogU291cmNlL1dURi93dGYvSGFzaEl0ZXJh
dG9ycy5oICAgICAgICAgICAgICAgICAgICAgfCAgNiArLQogU291cmNlL1dURi93dGYvSGFzaE1h
cC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA0NiArKysrLS0tLS0tLQogU291cmNlL1dU
Ri93dGYvSGFzaFRhYmxlLmggICAgICAgICAgICAgICAgICAgICAgICAgfCAgNiArLQogU291cmNl
L1dURi93dGYvSGFzaFRyYWl0cy5oICAgICAgICAgICAgICAgICAgICAgICAgfCAxNyArKy0tCiBT
b3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9yLmNwcCAgICAgICAgICAgICAgICAgICB8IDE4ICsr
LS0tCiBTb3VyY2UvV1RGL3d0Zi9SZWZDb3VudGVkTGVha0NvdW50ZXIuY3BwICAgICAgICAgICB8
ICAyICstCiBTb3VyY2UvV1RGL3d0Zi9SZWZQdHJIYXNoTWFwLmggICAgICAgICAgICAgICAgICAg
ICB8IDEyICstLQogU291cmNlL1dURi93dGYvU3BlY3RydW0uaCAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCAgNCArLQogU291cmNlL1dURi93dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwICAgICAg
ICAgICAgICAgfCAgNCArLQogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9s
b2NhdGlvbi5jcHAgfCAgNiArLQogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
RGF0YWJhc2UuY3BwICAgfCAgMiArLQogLi4uL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNl
QmFja2VuZEltcGwuY3BwICAgfCAgMiArLQogLi4uL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3Rv
cnlCYWNrZW5kSW1wbC5jcHAgICAgfCAgNiArLQogLi4uL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCT2JqZWN0U3RvcmUuY3BwICAgfCAxMiArLS0KIC4uLi9pbmRleGVkZGIvSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbC5jcHAgICAgICAgIHwgMTAgKy0tCiAuLi4vV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAgICB8IDEwICstLQogLi4uL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvQWJzdHJhY3REYXRhYmFzZS5jcHAgICAgICAgfCAgMiArLQogLi4uL01vZHVsZXMv
d2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNwcCAgICAgICAgfCAgMiArLQogLi4uL01vZHVs
ZXMvd2ViZGF0YWJhc2UvT3JpZ2luVXNhZ2VSZWNvcmQuY3BwICAgICAgfCAgMiArLQogLi4uL3dl
YmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwICAgICAgfCAgNiArLQogLi4u
L2Nocm9taXVtL0RhdGFiYXNlVHJhY2tlckNocm9taXVtLmNwcCAgICAgICAgICAgfCAgMiArLQog
Li4uL01vZHVsZXMvd2ViZGF0YWJhc2UvY2hyb21pdW0vUXVvdGFUcmFja2VyLmNwcCAgfCAgNiAr
LQogLi4uL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXREZWZsYXRlRnJhbWVyLmNwcCAgfCAg
NCArLQogLi4uL3dlYnNvY2tldHMvV2ViU29ja2V0RXh0ZW5zaW9uRGlzcGF0Y2hlci5jcHAgICAg
fCAgNiArLQogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcCAg
ICAgfCAgMiArLQogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9ET01PYmplY3RDYWNo
ZS5jcHAgfCAgMiArLQogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NT2JqZWN0SGFzaFRh
YmxlTWFwLmggfCAgNiArLQogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5n
LmNwcCAgICAgICAgfCAgMiArLQogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9i
YWxPYmplY3QuY3BwICAgfCAgNCArLQogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01H
bG9iYWxPYmplY3QuaCAgICAgfCAgMiArLQogLi4uL1dlYkNvcmUvYmluZGluZ3MvanMvUGFnZVNj
cmlwdERlYnVnU2VydmVyLmNwcCAgfCAgNCArLQogLi4uL1dlYkNvcmUvYmluZGluZ3MvanMvU2Ny
aXB0Q2FjaGVkRnJhbWVEYXRhLmNwcCAgfCAgOCArLQogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2NyaXB0Q29udHJvbGxlci5jcHAgICAgfCAyMCArKy0tLQogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5oICAgICAgfCAgNCArLQogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwICAgfCAxNCArKy0tCiAuLi4vV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwICB8IDEwICstLQogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0gfCAgNCArLQogLi4u
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOEZsb2F0NjRBcnJheS5jcHAgICAgfCAgNCArLQog
Li4uL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RBY3RpdmVET01PYmplY3QuY3BwICAgICAgfCAgNCAr
LQogLi4uL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RDdXN0b21OYW1lZEdldHRlci5jcHAgICAgfCAg
NCArLQogLi4uL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudENvbnN0cnVjdG9yLmNwcCAgICAg
fCAgNCArLQogLi4uL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudFRhcmdldC5j
cHAgfCAgNCArLQogLi4uL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFeGNlcHRpb24u
Y3BwICAgfCAgNCArLQogLi4uL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RJbnRlcmZh
Y2UuY3BwICAgfCAgNCArLQogLi4uL3Rlc3QvVjgvVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5l
ci5jcHAgICAgICAgfCAgNCArLQogLi4uL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROYW1lZENvbnN0
cnVjdG9yLmNwcCAgICAgfCAgNCArLQogLi4uL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3ROb2RlLmNwcCAgICAgICAgfCAgNCArLQogLi4uL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Y4L1Y4VGVzdE9iai5jcHAgfCAgNCArLQogLi4uL1Y4L1Y4VGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZS5jcHAgICAgfCAgNCArLQogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvTlBWOE9iamVjdC5jcHAgICAgICAgICAgfCAgNiArLQogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAgICAgfCAgOCArLQogLi4uL1dlYkNvcmUvYmluZGlu
Z3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcCAgfCAgMiArLQogLi4uL2JpbmRpbmdzL3Y4
L1Y4QmluZGluZ1BlckNvbnRleHREYXRhLmNwcCAgICAgICAgfCAgNCArLQogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvVjhET01NYXAuaCAgICAgICAgICAgICAgfCAgNCArLQogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xsZXIuY3BwICAgICAgfCAgNCArLQogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAgICAgICAgICAgICAgfCAxMiArLS0KIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L25wcnVudGltZS5jcHAgICAgICAgICAgIHwgMTAgKy0t
CiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvSWRlbnRpZmllclJlcC5jcHAgICAgICAgICAgICB8IDE2
ICsrLS0KIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9OUF9qc29iamVjdC5jcHAgICAgICAgICAgICAg
IHwgIDggKy0KIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFDbGFzc0pTQy5jcHAg
ICAgIHwgIDIgKy0KIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX3Jvb3QuY3BwICAgICAg
ICAgICAgIHwgIDQgKy0KIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYW52YXNWYWx1ZS5jcHAgICAg
ICAgICAgICAgIHwgIDQgKy0KIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVj
bGFyYXRpb24uY3BwIHwgIDQgKy0KIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDcm9zc2ZhZGVWYWx1
ZS5jcHAgICAgICAgICAgIHwgIDIgKy0KIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNv
dXJjZS5jcHAgICAgICAgICAgIHwgIDIgKy0KIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2Vs
ZWN0b3IuY3BwICAgICAgICAgICAgIHwgIDYgKy0KIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFn
ZUdlbmVyYXRvclZhbHVlLmNwcCAgICAgIHwgIDYgKy0KIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NT
ZWdtZW50ZWRGb250RmFjZS5jcHAgICAgICAgIHwgIDIgKy0KIFNvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NTZWxlY3Rvci5jcHAgICAgICAgICAgICAgICAgIHwgIDIgKy0KIFNvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NWYWx1ZVBvb2wuY3BwICAgICAgICAgICAgICAgIHwgIDggKy0KIC4uLi9XZWJDb3JlL2Nz
cy9Qcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24uY3BwIHwgIDIgKy0KIFNvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZUJ1aWxkZXIuY3BwICAgICAgICAgICAgICAgIHwgMTggKystLS0KIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcCAgICAgICAgICAgICAgIHwgMjIgKysrLS0t
CiBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldENvbnRlbnRzLmNwcCAgICAgICAgICB8ICAy
ICstCiBTb3VyY2UvV2ViQ29yZS9kb20vQ2hlY2tlZFJhZGlvQnV0dG9ucy5jcHAgICAgICAgICB8
ICA2ICstCiBTb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5jcHAgICAg
ICB8IDE0ICsrLS0KIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgICAgICAgICAgICAg
ICAgICAgIHwgMTIgKy0tCiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyLmNwcCAgICB8IDE4ICsrLS0tCiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRPcmRlcmVk
TWFwLmNwcCAgICAgICAgICB8ICAyICstCiBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0dHJp
YnV0ZURhdGEuY3BwICAgICAgICB8ICAyICstCiBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNw
YXRjaGVyLmNwcCAgICAgICAgICAgICB8ICAyICstCiBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRM
aXN0ZW5lck1hcC5jcHAgICAgICAgICAgICB8IDE4ICsrLS0tCiBTb3VyY2UvV2ViQ29yZS9kb20v
SWRUYXJnZXRPYnNlcnZlclJlZ2lzdHJ5LmNwcCAgICB8ICA2ICstCiAuLi4vV2ViQ29yZS9kb20v
TXV0YXRpb25PYnNlcnZlckludGVyZXN0R3JvdXAuY3BwICB8ICA2ICstCiBTb3VyY2UvV2ViQ29y
ZS9kb20vTm9kZS5jcHAgICAgICAgICAgICAgICAgICAgICAgICB8IDE0ICsrLS0KIFNvdXJjZS9X
ZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaCAgICAgICAgICAgICAgICAgIHwgMTggKystLS0KIFNv
dXJjZS9XZWJDb3JlL2RvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwICAgICAgIHwgIDIgKy0K
IFNvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcCAgICAgIHwgMjYg
KysrLS0tLQogU291cmNlL1dlYkNvcmUvZG9tL1NlbGVjdG9yUXVlcnkuY3BwICAgICAgICAgICAg
ICAgfCAgMiArLQogU291cmNlL1dlYkNvcmUvZG9tL1NwYWNlU3BsaXRTdHJpbmcuY3BwICAgICAg
ICAgICAgfCAgMiArLQogU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwICAgICAg
ICAgICAgICAgfCAxMCArLS0KIC4uLi9lZGl0aW5nL21hYy9BbHRlcm5hdGl2ZVRleHRVSUNvbnRy
b2xsZXIubW0gICAgIHwgIDIgKy0KIFNvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUNvbnRyb2xsZXIu
Y3BwICAgICAgICAgICAgIHwgMjggKysrLS0tLQogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29s
bGVjdGlvbi5jcHAgICAgICAgICAgICAgfCAgMiArLQogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHAgICAgfCAyMiArKystLS0KIFNvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5IHwgIDggKy0KIFNvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9ET01QYXRjaFN1cHBvcnQuY3BwICAgICAgIHwgMTggKystLS0KIFNvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwIHwgMjAgKystLS0KIFNv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAgICAgIHwgMzQgKysr
Ky0tLS0KIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb25zb2xlQWdlbnQuY3Bw
IHwgIDQgKy0KIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAg
ICAgIHwgMTAgKy0tCiAuLi4vaW5zcGVjdG9yL0luc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQuY3Bw
ICAgICAgICB8ICA0ICstCiAuLi4vV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFn
ZUFnZW50LmNwcCB8IDE2ICsrLS0KIC4uLi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRh
YmFzZUFnZW50LmNwcCAgIHwgMTIgKy0tCiAuLi4vV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RGVidWdnZXJBZ2VudC5jcHAgICB8IDIyICsrKy0tLQogLi4uL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckluZGV4ZWREQkFnZW50LmNwcCAgfCAgNCArLQogU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3Rvck1lbW9yeUFnZW50LmNwcCAgfCAgOCArLQogU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAgICAgfCAgOCArLQogLi4uL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwICAgfCAxMiArLS0KIC4uLi9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmNwcCAgIHwgIDYgKy0KIFNvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5jcHAgICAgICAgIHwgMTAgKy0tCiBTb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAgICB8ICA2ICstCiBT
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcCAgICAgICB8ICA2ICst
CiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yV29ya2VyQWdlbnQuY3BwICB8IDEy
ICstLQogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL05ldHdvcmtSZXNvdXJjZXNEYXRhLmNwcCAg
fCAgNCArLQogU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luQWNjZXNzQ29udHJvbC5j
cHAgfCAgNiArLQogLi4uL2xvYWRlci9Dcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmNw
cCAgICAgfCAgNiArLQogU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcCAg
ICAgICAgICAgfCAgNiArLQogU291cmNlL1dlYkNvcmUvbG9hZGVyL01haW5SZXNvdXJjZUxvYWRl
ci5jcHAgICAgICAgfCAgMiArLQogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFNj
aGVkdWxlci5jcHAgICAgfCAgMiArLQogLi4uL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxp
Y2F0aW9uQ2FjaGUuY3BwICAgfCAxMCArLS0KIC4uLi9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRp
b25DYWNoZUdyb3VwLmNwcCAgICAgIHwgIDggKy0KIC4uLi9sb2FkZXIvYXBwY2FjaGUvQXBwbGlj
YXRpb25DYWNoZUhvc3QuY3BwICAgICAgIHwgIDIgKy0KIC4uLi9sb2FkZXIvYXBwY2FjaGUvQXBw
bGljYXRpb25DYWNoZVJlc291cmNlLmNwcCAgIHwgIDIgKy0KIC4uLi9sb2FkZXIvYXBwY2FjaGUv
QXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwICAgIHwgMjQgKysrLS0tCiBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvYXJjaGl2ZS9BcmNoaXZlRmFjdG9yeS5jcHAgICB8ICAyICstCiBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2UuY3BwICB8ICA0ICstCiBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwICAgICB8ICA4ICstCiAuLi4v
bG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyLmggICAgICB8ICAyICstCiAu
Li4vV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwICB8IDE0ICsr
LS0KIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5jcHAgICAgICAgIHwg
IDggKy0KIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFzZS5jcHAgICAgICAg
IHwgMTIgKy0tCiBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAgICAgICAgICAgICAg
ICAgICB8ICA0ICstCiBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgICAgICAg
ICAgICAgICB8ICAyICstCiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcCAgICAgICAgICAg
ICAgICAgICAgICB8ICAyICstCiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5jcHAgICAg
ICAgICAgICAgICAgICB8IDMyICsrKystLS0tCiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJp
YWxpemVyLmNwcCAgICAgICAgICAgICB8ICAyICstCiBTb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3Vy
aXR5UG9saWN5LmNwcCAgICAgICAgICAgICB8ICA2ICstCiBTb3VyY2UvV2ViQ29yZS9wYWdlL1Nl
dHRpbmdzLmNwcCAgICAgICAgICAgICAgICAgICB8ICA0ICstCiBTb3VyY2UvV2ViQ29yZS9wYWdl
L1NwZWVjaElucHV0LmNwcCAgICAgICAgICAgICAgICB8ICAyICstCiBTb3VyY2UvV2ViQ29yZS9w
YWdlL1dpbmRvd0ZlYXR1cmVzLmNwcCAgICAgICAgICAgICB8ICA0ICstCiAuLi4vV2ViQ29yZS9w
YWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmNwcCB8IDE2ICsrLS0KIC4uLi9XZWJD
b3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHAgIHwgNTAgKysrKysrLS0t
LS0tCiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MYW5ndWFnZS5jcHAgICAgICAgICAgICAgICB8
ICAyICstCiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmNwcCAgICAg
ICB8ICAyICstCiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9IUlRGRWxldmF0aW9uLmNw
cCAgICB8ICAyICstCiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9CaW5hcnlQcm9wZXJ0eUxp
c3QuY3BwICB8ICAyICstCiAuLi4vcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJIVFRQTG9h
ZEluZm8uY3BwICB8ICAyICstCiAuLi4vcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJVUkxS
ZXF1ZXN0LmNwcCAgICB8ICAyICstCiAuLi4vcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJV
UkxSZXNwb25zZS5jcHAgICB8ICA0ICstCiAuLi4vcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJl
ZnJlc2hNb25pdG9yLmNwcCAgICB8ICA0ICstCiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250Q2FjaGUuY3BwICAgICB8IDI0ICsrKy0tLQogLi4uL3BsYXRmb3JtL2dyYXBoaWNz
L0dseXBoUGFnZVRyZWVOb2RlLmNwcCAgICAgICAgfCAyMiArKystLS0KIC4uLi9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0xheWVyQW5pbWF0aW9uLmNwcCAgIHwgMTQgKystLQogLi4uL3BsYXRm
b3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlLmNwcCAgICAgICAgfCAxNCArKy0tCiAuLi4v
cGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcCAgICAgICB8IDkwICsrKysr
KysrKysrLS0tLS0tLS0tLS0KIC4uLi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9U
aWxlQ2FjaGUubW0gIHwgMjAgKystLS0KIC4uLi9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xh
eWVyQ2hyb21pdW0uY3BwICAgIHwgIDIgKy0KIC4uLi9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJl
bmRlcmVyQ2hyb21pdW0uY3BwICAgIHwgIDYgKy0KIC4uLi9ncmFwaGljcy9jaHJvbWl1bS9UaWxl
ZExheWVyQ2hyb21pdW0uY3BwICAgICAgIHwgMTQgKystLQogLi4uL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDRGFtYWdlVHJhY2tlci5jcHAgICAgICAgfCAgMiArLQogLi4uL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUaWxpbmdEYXRhLmNwcCAgICAgfCAgNCArLQogLi4uL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAgICAgICAgfCAgNiArLQogLi4uL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwICAgfCAgMiArLQogLi4uL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUmVzb3VyY2VQcm92aWRlci5jcHAgICAgfCAzOCArKysrLS0tLS0K
IC4uLi9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclByb2dyYW0uY3BwICAgICAgIHwgIDIg
Ky0KIC4uLi9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNraWEuY3BwICAgIHwg
MTIgKy0tCiAuLi4vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpOR0ZhY2UuY3BwICAgICAg
ICB8IDEyICstLQogLi4uL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YUNvcmVUZXh0LmNwcCAg
ICAgICAgfCAgMiArLQogLi4uL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YU1h
Yy5tbSAgICAgfCAgNCArLQogLi4uL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xD
b21tb24uY3BwICAgfCAgMiArLQogLi4uL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENv
bW1vbi5jcHAgICAgICAgfCAgOCArLQogLi4uL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyR0wuY3BwICAgfCAgNCArLQogLi4uL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyU2hhZGVyTWFuYWdlci5jcHAgfCAgNCArLQogLi4uL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNl
L0ZvbnRQbGF0Zm9ybURhdGEuY3BwICAgfCAgNCArLQogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL0RhdGFPYmplY3RHdGsuY3BwICAgICAgfCAgMiArLQogLi4uL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL0d0a0RyYWdBbmREcm9wSGVscGVyLmNwcCAgfCAxMCArLS0KIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0azMuY3BwICAgIHwgIDYgKy0KIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9TY3JvbGxiYXJUaGVtZU1hYy5tbSAgIHwgIDQgKy0KIC4uLi9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbFN0b3JhZ2UuY3BwIHwgIDQgKy0KIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUEhlYWRlck1hcC5jcHAgIHwgIDQgKy0KIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvTUlNRUhlYWRlci5jcHAgICAgIHwgIDYgKy0KIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwIHwgIDIgKy0K
IC4uLi9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwICAgICAgIHwgIDQg
Ky0KIC4uLi9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZOZXQuY3BwICAgIHwg
IDIgKy0KIC4uLi9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlUmVxdWVzdENGTmV0LmNwcCAg
IHwgIDQgKy0KIC4uLi9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNwcCAgICAg
ICAgIHwgIDQgKy0KIC4uLi9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZVJlcXVlc3RNYWMu
bW0gICAgIHwgIDIgKy0KIC4uLi9wbGF0Zm9ybS9uZXR3b3JrL3F0L1Jlc291cmNlUmVxdWVzdFF0
LmNwcCAgICAgIHwgIDQgKy0KIC4uLi9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1
ZXN0U291cC5jcHAgIHwgIDQgKy0KIC4uLi9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VS
ZXNwb25zZVNvdXAuY3BwIHwgIDIgKy0KIC4uLi9wbGF0Zm9ybS9uZXR3b3JrL3dpbi9SZXNvdXJj
ZUhhbmRsZVdpbi5jcHAgICAgIHwgIDQgKy0KIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1J1
bkxvb3BRdC5jcHAgICAgICAgICAgIHwgIDIgKy0KIC4uLi9wbGF0Zm9ybS90ZXh0L0xvY2FsZVRv
U2NyaXB0TWFwcGluZ0RlZmF1bHQuY3BwIHwgIDQgKy0KIC4uLi9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvVGV4dEVuY29kaW5nUmVnaXN0cnkuY3BwIHwgIDYgKy0KIC4uLi9wbGF0Zm9ybS90ZXh0L3Ry
YW5zY29kZXIvRm9udFRyYW5zY29kZXIuY3BwICAgIHwgIDIgKy0KIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvd2luL1RleHRDb2RlY1dpbi5jcHAgIHwgMjAgKystLS0KIC4uLi9XZWJDb3Jl
L3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRVdGlsaXRpZXNXaW4uY3BwIHwgIDYgKy0KIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3dpbi9GaWxlU3lzdGVtV2luLmNwcCAgICAgIHwgIDIgKy0KIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9SdW5Mb29wV2luLmNwcCAgICAgICAgIHwgIDIgKy0KIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9XQ0RhdGFPYmplY3QuY3BwICAgICAgIHwgIDIgKy0K
IC4uLi9wbGF0Zm9ybS93aW5jZS9NSU1FVHlwZVJlZ2lzdHJ5V2luQ0UuY3BwICAgICAgIHwgIDIg
Ky0KIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L0NvbnRleHRNZW51V3guY3BwICAgICAgIHwg
IDQgKy0KIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3BwICAgICAgICAg
IHwgMTAgKy0tCiAuLi4vV2ViQ29yZS9wbHVnaW5zL1BsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXIu
Y3BwICB8ICA2ICstCiBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblN0cmVhbS5jcHAgICAg
ICAgICAgICB8ICA0ICstCiAuLi4vcGx1Z2lucy9ibGFja2JlcnJ5L1BsdWdpbkRhdGFCbGFja0Jl
cnJ5LmNwcCAgICB8ICA0ICstCiBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3d4L1BsdWdpbkRhdGFX
eC5jcHAgICAgICAgICB8ICA0ICstCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmxvd1RocmVh
ZENvbnRyb2xsZXIuY3BwICB8ICA2ICstCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5l
Rmxvd0JveC5jcHAgICAgICAgICB8ICA0ICstCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2suY3BwICAgICAgICAgICB8ICAyICstCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcCB8ICA2ICstCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwICB8ICA2ICstCiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQ291bnRlci5jcHAgICAgICAgICB8IDM0ICsrKystLS0tCiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAgICAgICB8ICA0ICstCiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwICAgICAgICAgICB8ICA4ICstCiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvLmNwcCB8ICA0ICstCiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93VGhyZWFkLmNwcCB8ICA0ICst
CiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcCAgICAgICAgICB8IDE0
ICsrLS0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwICAg
IHwgIDIgKy0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbSAgICAg
ICAgIHwgIDIgKy0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcCAgICAg
ICAgICAgIHwgMjIgKysrLS0tCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0
LmNwcCAgICAgICAgICB8ICA0ICstCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGlu
ZUJveC5jcHAgICAgICAgICB8ICA0ICstCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVmVydGlj
YWxQb3NpdGlvbkNhY2hlLmggICB8ICAyICstCiAuLi4vV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR0lubGluZVRleHQuY3BwICB8ICAyICstCiAuLi4vcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZUZpbHRlci5jcHAgICAgICB8ICA0ICstCiAuLi4vcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcCAgICB8ICAyICstCiAuLi4vcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwICAgICB8ICAyICstCiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlc0NhY2hlLmNwcCB8ICA0ICstCiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1Jvb3RJbmxpbmVCb3guY3BwICB8ICA2ICstCiAuLi4vcmVuZGVy
aW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRlcy5jcHAgICAgICB8ICA0ICstCiAuLi4vc3Zn
L1NWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlci5jcHAgICAgICAgICB8ICA2ICstCiAuLi4v
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmUuY3BwICB8ICAyICstCiAu
Li4vcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljc0J1aWxkZXIuY3BwICAgICAgICB8ICAyICst
CiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5jcHAgICAgICAgICB8IDE0
ICsrLS0KIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU1hcC5jcHAgICAgICAgICAgICAg
IHwgIDQgKy0KIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3Bw
ICAgIHwgMTAgKy0tCiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmNw
cCAgICAgICB8IDI4ICsrKy0tLS0KIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcCAg
ICAgICAgICAgICAgICAgIHwgIDIgKy0KIFNvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU01J
TFRpbWVDb250YWluZXIuY3BwIHwgIDIgKy0KIFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9T
VkdJbWFnZUNhY2hlLmNwcCAgICAgIHwgMjAgKystLS0KIC4uLi9zdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdGaWx0ZXJCdWlsZGVyLmggICAgICAgIHwgIDQgKy0KIC4uLi9XZWJDb3JlL3N2Zy9wcm9w
ZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHkuaCAgIHwgIDQgKy0KIC4uLi9zdmcvcHJvcGVydGll
cy9TVkdBdHRyaWJ1dGVUb1Byb3BlcnR5TWFwLmNwcCAgIHwgIDYgKy0KIFNvdXJjZS9XZWJDb3Jl
L3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAgICAgICAgICAgIHwgIDIgKy0KIFNvdXJjZS9XZWJD
b3JlL3dvcmtlcnMvV29ya2VyRXZlbnRRdWV1ZS5jcHAgICAgICAgIHwgIDIgKy0KIFNvdXJjZS9X
ZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAgICAgICAgICAgICAgIHwgMTAgKy0tCiBTb3Vy
Y2UvV2ViQ29yZS94bWwvWFBhdGhGdW5jdGlvbnMuY3BwICAgICAgICAgICAgICB8ICAyICstCiBT
b3VyY2UvV2ViQ29yZS94bWwvWFBhdGhQYXJzZXIuY3BwICAgICAgICAgICAgICAgICB8ICAyICst
CiBTb3VyY2UvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwICAgICAgICB8ICA0
ICstCiBTb3VyY2UvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvclF0LmNwcCAgICAgICAgICAgICB8
ICAyICstCiBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL0JhY2tpbmdTdG9yZS5jcHAgICAg
ICB8IDI0ICsrKy0tLQogLi4uL1dlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlcklt
cGwuY3BwICAgfCAxMiArLS0KIC4uLi9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0Fi
b3V0RGF0YS5jcHAgIHwgIDIgKy0KIC4uLi9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvRnJhbWVM
YXllcnMuY3BwICAgICAgIHwgIDYgKy0KIC4uLi9zcmMvV2ViR2VvbG9jYXRpb25QZXJtaXNzaW9u
UmVxdWVzdE1hbmFnZXIuY3BwIHwgIDQgKy0KIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YklEQk1ldGFkYXRhLmNwcCAgICAgIHwgIDQgKy0KIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkludGVudC5jcHAgICAgICAgICAgIHwgIDIgKy0KIC4uLi90ZXN0cy9XZWJTb2NrZXRFeHRl
bnNpb25EaXNwYXRjaGVyVGVzdC5jcHAgICAgIHwgMTIgKy0tCiAuLi4vV2ViQ29yZVN1cHBvcnQv
RHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsLmNwcCAgICB8ICAyICstCiAuLi4vZWZsL1dlYkNvcmVT
dXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc0VmbC5jcHAgICB8ICA0ICstCiBTb3VyY2UvV2ViS2l0
L2VmbC9ld2svZXdrX2ludGVudC5jcHAgICAgICAgICAgICAgICB8ICAyICstCiAuLi4vZ3RrL1dl
YkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc0d0ay5jcHAgICB8ICA0ICstCiBTb3VyY2Uv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZmF2aWNvbmRhdGFiYXNlLmNwcCB8ICA2ICstCiBTb3Vy
Y2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2VicGx1Z2luLmNwcCAgICAgICB8ICA2ICstCiBT
b3VyY2UvV2ViS2l0L21hYy9IaXN0b3J5L1dlYkhpc3RvcnkubW0gICAgICAgICAgICB8ICA2ICst
CiBTb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tICAgICAgICB8ICA4
ICstCiAuLi4vUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlci5tbSAgICB8
ICA4ICstCiAuLi4vbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdFByb3h5Lm1t
ICB8ICAyICstCiAuLi4vUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5
Lm1tICB8IDIyICsrKy0tLQogU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvUHJveHlJ
bnN0YW5jZS5tbSAgfCAxNiArKy0tCiBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5ldHNj
YXBlUGx1Z2luVmlldy5tbSB8ICA0ICstCiAuLi4vbWFjL1dlYkNvcmVTdXBwb3J0L1dlYk5vdGlm
aWNhdGlvbkNsaWVudC5tbSAgICB8IDEwICstLQogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9X
ZWJIVE1MVmlldy5tbSAgICAgICAgICAgfCAgMiArLQogU291cmNlL1dlYktpdC9xdC9BcGkvcXdl
YnBhZ2UuY3BwICAgICAgICAgICAgICAgICAgfCAgMiArLQogU291cmNlL1dlYktpdC9xdC9BcGkv
cXdlYnBsdWdpbmRhdGFiYXNlLmNwcCAgICAgICAgfCAgNCArLQogLi4uL3F0L1dlYkNvcmVTdXBw
b3J0L1BsYXRmb3JtU3RyYXRlZ2llc1F0LmNwcCAgICAgfCAgNCArLQogU291cmNlL1dlYktpdC93
aW4vQ09NUHJvcGVydHlCYWcuaCAgICAgICAgICAgICAgICAgfCAxMCArLS0KIFNvdXJjZS9XZWJL
aXQvd2luL1dlYkNvcmVTdGF0aXN0aWNzLmNwcCAgICAgICAgICAgIHwgIDIgKy0KIC4uLi93aW4v
V2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcCAgIHwgIDQgKy0KIFNvdXJj
ZS9XZWJLaXQvd2luL1dlYkhpc3RvcnkuY3BwICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KIFNv
dXJjZS9XZWJLaXQvd2luL1dlYktpdENPTUFQSS5jcHAgICAgICAgICAgICAgICAgIHwgIDIgKy0K
IFNvdXJjZS9XZWJLaXQvd2luL1dlYktpdFN0YXRpc3RpY3MuY3BwICAgICAgICAgICAgIHwgIDQg
Ky0KIFNvdXJjZS9XZWJLaXQvd2luL1dlYk5vdGlmaWNhdGlvbkNlbnRlci5jcHAgICAgICAgIHwg
IDYgKy0KIC4uLi9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5jcHAgICAg
IHwgIDQgKy0KIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQXJndW1lbnRDb2RlcnMu
aCAgIHwgIDggKy0KIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5j
cHAgICAgIHwgMTQgKystLQogU291cmNlL1dlYktpdDIvUGxhdGZvcm0vZ3RrL1dvcmtRdWV1ZUd0
ay5jcHAgICAgICAgfCAgNCArLQogU291cmNlL1dlYktpdDIvUGxhdGZvcm0vbWFjL1dvcmtRdWV1
ZU1hYy5jcHAgICAgICAgfCAgMiArLQogLi4uL1dlYktpdDIvU2hhcmVkL1BsdWdpbnMvTlBSZW1v
dGVPYmplY3RNYXAuY3BwICAgfCAgMiArLQogU291cmNlL1dlYktpdDIvU2hhcmVkL1VzZXJNZXNz
YWdlQ29kZXJzLmggICAgICAgICAgfCAgNCArLQogU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYklu
dGVudERhdGEuY3BwICAgICAgICAgICAgfCAgMiArLQogU291cmNlL1dlYktpdDIvU2hhcmVkL1dl
YlByZWZlcmVuY2VzU3RvcmUuY3BwICAgICAgfCAgNCArLQogLi4uL1dlYktpdDIvU2hhcmVkL21h
Yy9XZWJDb3JlQXJndW1lbnRDb2RlcnNNYWMubW0gfCAgMiArLQogU291cmNlL1dlYktpdDIvU2hh
cmVkL3F0L0FyZ3VtZW50Q29kZXJzUXQuY3BwICAgICAgfCAgNCArLQogLi4uL1NoYXJlZC9zb3Vw
L1dlYkNvcmVBcmd1bWVudENvZGVyc1NvdXAuY3BwICAgICAgfCAgMiArLQogU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwICAgfCAgMiArLQogU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwICAgICAgfCAgMiArLQogU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAgfCAgMiArLQogLi4u
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcCAgICAgICAgfCAgMiArLQog
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tQcmludGluZ1ZpZXcubW0gfCAxMCAr
LS0KIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbSAgICAgICAgIHwg
IDQgKy0KIC4uLi9HZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcCAg
IHwgIDIgKy0KIC4uLi9JbnNwZWN0b3JTZXJ2ZXIvV2ViSW5zcGVjdG9yU2VydmVyLmNwcCAgICAg
ICAgIHwgIDQgKy0KIC4uLi9JbnNwZWN0b3JTZXJ2ZXIvV2ViU29ja2V0U2VydmVyQ29ubmVjdGlv
bi5jcHAgIHwgIDQgKy0KIC4uLi9JbnNwZWN0b3JTZXJ2ZXIvcXQvV2ViSW5zcGVjdG9yU2VydmVy
UXQuY3BwICAgIHwgIDYgKy0KIC4uLi9VSVByb2Nlc3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94
eS5jcHAgICAgICAgIHwgIDIgKy0KIC4uLi9Ob3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1h
bmFnZXJQcm94eS5jcHAgIHwgIDIgKy0KIC4uLi9VSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9j
ZXNzUHJveHkuY3BwICAgICAgIHwgIDQgKy0KIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJD
b250ZXh0LmNwcCAgICAgICAgICAgIHwgIDIgKy0KIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJJY29uRGF0YWJhc2UuY3BwICAgICAgIHwgIDYgKy0KIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJMYXllclRyZWVSZW5kZXJlci5jcHAgIHwgMTIgKy0tCiBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcCAgICAgICB8IDE2ICsrLS0KIC4uLi9XZWJLaXQyL1VJ
UHJvY2Vzcy90ZXhtYXAvTGF5ZXJCYWNraW5nU3RvcmUuY3BwIHwgMTAgKy0tCiAuLi4vR2VvbG9j
YXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuY3BwICAgICAgICB8ICA0ICstCiAuLi4vRE9N
L0luamVjdGVkQnVuZGxlTm9kZUhhbmRsZS5jcHAgICAgICAgICAgICAgICB8ICA0ICstCiAuLi4v
RE9NL0luamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGUuY3BwICAgICAgICAgICAgICB8ICA0ICstCiAu
Li4vTm90aWZpY2F0aW9ucy9XZWJOb3RpZmljYXRpb25NYW5hZ2VyLmNwcCAgICAgICB8IDEyICst
LQogLi4uL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0TWFwLmNwcCAgICAgICAgfCAg
MiArLQogLi4uL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbi5jcHAg
fCAxNCArKy0tCiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5j
cHAgICB8ICA2ICstCiAuLi4vTGF5ZXJUcmVlQ29vcmRpbmF0b3IvTGF5ZXJUcmVlQ29vcmRpbmF0
b3IuY3BwICB8ICA2ICstCiAuLi4vTGF5ZXJUcmVlQ29vcmRpbmF0b3IvV2ViR3JhcGhpY3NMYXll
ci5jcHAgICAgICB8ICAyICstCiAuLi4vV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJk
TGlzdFByb3h5LmNwcCB8ICA0ICstCiAuLi4vV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFj
L1dlYlBhZ2VNYWMubW0gICB8ICAyICstCiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBy
b2Nlc3MuY3BwICAgICAgICAgICB8IDIyICsrKy0tLQogLi4uL2Nocm9taXVtL01vY2tXZWJTcGVl
Y2hJbnB1dENvbnRyb2xsZXIuY3BwICAgICAgfCAgMiArLQogLi4uL2Nocm9taXVtL05vdGlmaWNh
dGlvblByZXNlbnRlci5jcHAgICAgICAgICAgICAgfCAgNCArLQogLi4uL2Nocm9taXVtL1Rlc3RS
dW5uZXIvQ3BwQm91bmRDbGFzcy5jcHAgICAgICAgICAgfCAxNCArKy0tCiBUb29scy9EdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5jcHAgICB8ICA0ICstCiBUb29scy9EdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5jcHAgICAgICB8ICAyICstCiAuLi4vRHVt
cFJlbmRlclRyZWUvbWFjL0xheW91dFRlc3RDb250cm9sbGVyTWFjLm1tICB8ICA2ICstCiAuLi4v
d2luL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyV2luLmNwcCAgICAgICAgICAgICB8ICA2ICstCiAu
Li4vRHVtcFJlbmRlclRyZWUvd2luL0xheW91dFRlc3RDb250cm9sbGVyV2luLmNwcCB8ICA2ICst
CiBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vUmVzb3VyY2VMb2FkRGVsZWdhdGUuY3BwICB8ICAy
ICstCiAuLi4vV2ViS2l0Mi9ET01XaW5kb3dFeHRlbnNpb25CYXNpY19CdW5kbGUuY3BwICAgICB8
ICA0ICstCiAuLi4vV2ViS2l0Mi9ET01XaW5kb3dFeHRlbnNpb25Ob0NhY2hlX0J1bmRsZS5jcHAg
ICB8ICA0ICstCiAuLi4vSW5qZWN0ZWRCdW5kbGUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwICAg
ICAgICB8ICA2ICstCiAzNzEgZmlsZXMgY2hhbmdlZCwgMTMyNSBpbnNlcnRpb25zKCspLCAxMzM4
IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlND
YWxsYmFja09iamVjdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2Jq
ZWN0LmgKaW5kZXggMmMzZTBlOC4uODg4NmYxMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgKQEAgLTgzLDEzICs4MywxMyBAQCBzdHJ1Y3QgSlNDYWxs
YmFja09iamVjdERhdGEgOiBXZWFrSGFuZGxlT3duZXIgewogICAgICAgICAgICAgUHJpdmF0ZVBy
b3BlcnR5TWFwOjpjb25zdF9pdGVyYXRvciBsb2NhdGlvbiA9IG1fcHJvcGVydHlNYXAuZmluZChw
cm9wZXJ0eU5hbWUuaW1wbCgpKTsKICAgICAgICAgICAgIGlmIChsb2NhdGlvbiA9PSBtX3Byb3Bl
cnR5TWFwLmVuZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7Ci0gICAgICAg
ICAgICByZXR1cm4gbG9jYXRpb24tPnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgIHJldHVybiBs
b2NhdGlvbi0+dmFsdWUuZ2V0KCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHZvaWQg
c2V0UHJpdmF0ZVByb3BlcnR5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25l
ciwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlKQogICAgICAg
ICB7CiAgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gZW1wdHk7Ci0gICAgICAgICAg
ICBtX3Byb3BlcnR5TWFwLmFkZChwcm9wZXJ0eU5hbWUuaW1wbCgpLCBlbXB0eSkuaXRlcmF0b3It
PnNlY29uZC5zZXQoZ2xvYmFsRGF0YSwgb3duZXIsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcHJv
cGVydHlNYXAuYWRkKHByb3BlcnR5TmFtZS5pbXBsKCksIGVtcHR5KS5pdGVyYXRvci0+dmFsdWUu
c2V0KGdsb2JhbERhdGEsIG93bmVyLCB2YWx1ZSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAg
ICAgIHZvaWQgZGVsZXRlUHJpdmF0ZVByb3BlcnR5KGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSkKQEAgLTEwMCw4ICsxMDAsOCBAQCBzdHJ1Y3QgSlNDYWxsYmFja09iamVjdERhdGEgOiBX
ZWFrSGFuZGxlT3duZXIgewogICAgICAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCiAgICAgICAgIHsKICAgICAgICAgICAgIGZvciAoUHJpdmF0ZVByb3BlcnR5TWFw
OjppdGVyYXRvciBwdHIgPSBtX3Byb3BlcnR5TWFwLmJlZ2luKCk7IHB0ciAhPSBtX3Byb3BlcnR5
TWFwLmVuZCgpOyArK3B0cikgewotICAgICAgICAgICAgICAgIGlmIChwdHItPnNlY29uZCkKLSAg
ICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJnB0ci0+c2Vjb25kKTsKKyAgICAgICAg
ICAgICAgICBpZiAocHRyLT52YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBl
bmQoJnB0ci0+dmFsdWUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgKaW5k
ZXggMTYwZjQ4OC4uMmNhZTIxYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgKQEAgLTQ2NSw4ICs0NjUsOCBAQCB2b2lk
IEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCog
b2JqZWN0LCBFeGVjU3RhdGUqCiAgICAgICAgICAgICB0eXBlZGVmIE9wYXF1ZUpTQ2xhc3NTdGF0
aWNWYWx1ZXNUYWJsZTo6Y29uc3RfaXRlcmF0b3IgaXRlcmF0b3I7CiAgICAgICAgICAgICBpdGVy
YXRvciBlbmQgPSBzdGF0aWNWYWx1ZXMtPmVuZCgpOwogICAgICAgICAgICAgZm9yIChpdGVyYXRv
ciBpdCA9IHN0YXRpY1ZhbHVlcy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAg
ICAgICAgICAgU3RyaW5nSW1wbCogbmFtZSA9IGl0LT5maXJzdC5nZXQoKTsKLSAgICAgICAgICAg
ICAgICBTdGF0aWNWYWx1ZUVudHJ5KiBlbnRyeSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAg
ICAgICAgICAgU3RyaW5nSW1wbCogbmFtZSA9IGl0LT5rZXkuZ2V0KCk7CisgICAgICAgICAgICAg
ICAgU3RhdGljVmFsdWVFbnRyeSogZW50cnkgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAg
ICAgICAgaWYgKGVudHJ5LT5nZXRQcm9wZXJ0eSAmJiAoIShlbnRyeS0+YXR0cmlidXRlcyAmIGtK
U1Byb3BlcnR5QXR0cmlidXRlRG9udEVudW0pIHx8IChtb2RlID09IEluY2x1ZGVEb250RW51bVBy
b3BlcnRpZXMpKSkKICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRp
ZmllcihleGVjLCBuYW1lKSk7CiAgICAgICAgICAgICB9CkBAIC00NzYsOCArNDc2LDggQEAgdm9p
ZCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3Qq
IG9iamVjdCwgRXhlY1N0YXRlKgogICAgICAgICAgICAgdHlwZWRlZiBPcGFxdWVKU0NsYXNzU3Rh
dGljRnVuY3Rpb25zVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0ZXJhdG9yOwogICAgICAgICAgICAg
aXRlcmF0b3IgZW5kID0gc3RhdGljRnVuY3Rpb25zLT5lbmQoKTsKICAgICAgICAgICAgIGZvciAo
aXRlcmF0b3IgaXQgPSBzdGF0aWNGdW5jdGlvbnMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewotICAgICAgICAgICAgICAgIFN0cmluZ0ltcGwqIG5hbWUgPSBpdC0+Zmlyc3QuZ2V0KCk7Ci0g
ICAgICAgICAgICAgICAgU3RhdGljRnVuY3Rpb25FbnRyeSogZW50cnkgPSBpdC0+c2Vjb25kLmdl
dCgpOworICAgICAgICAgICAgICAgIFN0cmluZ0ltcGwqIG5hbWUgPSBpdC0+a2V5LmdldCgpOwor
ICAgICAgICAgICAgICAgIFN0YXRpY0Z1bmN0aW9uRW50cnkqIGVudHJ5ID0gaXQtPnZhbHVlLmdl
dCgpOwogICAgICAgICAgICAgICAgIGlmICghKGVudHJ5LT5hdHRyaWJ1dGVzICYga0pTUHJvcGVy
dHlBdHRyaWJ1dGVEb250RW51bSkgfHwgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGll
cykpCiAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXIoZXhl
YywgbmFtZSkpOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU0NsYXNzUmVmLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDbGFz
c1JlZi5jcHAKaW5kZXggMTM0NDMxNi4uOTY1ZWVkZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU0NsYXNzUmVmLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTQ2xhc3NSZWYuY3BwCkBAIC0xMDcsMTMgKzEwNywxMyBAQCBPcGFxdWVKU0NsYXNzOjp+
T3BhcXVlSlNDbGFzcygpCiAgICAgaWYgKG1fc3RhdGljVmFsdWVzKSB7CiAgICAgICAgIE9wYXF1
ZUpTQ2xhc3NTdGF0aWNWYWx1ZXNUYWJsZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9zdGF0aWNW
YWx1ZXMtPmVuZCgpOwogICAgICAgICBmb3IgKE9wYXF1ZUpTQ2xhc3NTdGF0aWNWYWx1ZXNUYWJs
ZTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3N0YXRpY1ZhbHVlcy0+YmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KQotICAgICAgICAgICAgQVNTRVJUKCFpdC0+Zmlyc3QtPmlzSWRlbnRpZmllcigpKTsK
KyAgICAgICAgICAgIEFTU0VSVCghaXQtPmtleS0+aXNJZGVudGlmaWVyKCkpOwogICAgIH0KIAog
ICAgIGlmIChtX3N0YXRpY0Z1bmN0aW9ucykgewogICAgICAgICBPcGFxdWVKU0NsYXNzU3RhdGlj
RnVuY3Rpb25zVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fc3RhdGljRnVuY3Rpb25zLT5l
bmQoKTsKICAgICAgICAgZm9yIChPcGFxdWVKU0NsYXNzU3RhdGljRnVuY3Rpb25zVGFibGU6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbV9zdGF0aWNGdW5jdGlvbnMtPmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkKLSAgICAgICAgICAgIEFTU0VSVCghaXQtPmZpcnN0LT5pc0lkZW50aWZpZXIoKSk7Cisg
ICAgICAgICAgICBBU1NFUlQoIWl0LT5rZXktPmlzSWRlbnRpZmllcigpKTsKICAgICB9CiAjZW5k
aWYKICAgICAKQEAgLTE0Nyw4ICsxNDcsOCBAQCBPcGFxdWVKU0NsYXNzQ29udGV4dERhdGE6Ok9w
YXF1ZUpTQ2xhc3NDb250ZXh0RGF0YShKU0M6OkpTR2xvYmFsRGF0YSYsIE9wYXF1ZUpTQwogICAg
ICAgICBzdGF0aWNWYWx1ZXMgPSBhZG9wdFB0cihuZXcgT3BhcXVlSlNDbGFzc1N0YXRpY1ZhbHVl
c1RhYmxlKTsKICAgICAgICAgT3BhcXVlSlNDbGFzc1N0YXRpY1ZhbHVlc1RhYmxlOjpjb25zdF9p
dGVyYXRvciBlbmQgPSBqc0NsYXNzLT5tX3N0YXRpY1ZhbHVlcy0+ZW5kKCk7CiAgICAgICAgIGZv
ciAoT3BhcXVlSlNDbGFzc1N0YXRpY1ZhbHVlc1RhYmxlOjpjb25zdF9pdGVyYXRvciBpdCA9IGpz
Q2xhc3MtPm1fc3RhdGljVmFsdWVzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgICAgIEFTU0VSVCghaXQtPmZpcnN0LT5pc0lkZW50aWZpZXIoKSk7Ci0gICAgICAgICAgICBz
dGF0aWNWYWx1ZXMtPmFkZChTdHJpbmdJbXBsOjpjcmVhdGUoaXQtPmZpcnN0LT5jaGFyYWN0ZXJz
KCksIGl0LT5maXJzdC0+bGVuZ3RoKCkpLCBhZG9wdFB0cihuZXcgU3RhdGljVmFsdWVFbnRyeShp
dC0+c2Vjb25kLT5nZXRQcm9wZXJ0eSwgaXQtPnNlY29uZC0+c2V0UHJvcGVydHksIGl0LT5zZWNv
bmQtPmF0dHJpYnV0ZXMpKSk7CisgICAgICAgICAgICBBU1NFUlQoIWl0LT5rZXktPmlzSWRlbnRp
ZmllcigpKTsKKyAgICAgICAgICAgIHN0YXRpY1ZhbHVlcy0+YWRkKFN0cmluZ0ltcGw6OmNyZWF0
ZShpdC0+a2V5LT5jaGFyYWN0ZXJzKCksIGl0LT5rZXktPmxlbmd0aCgpKSwgYWRvcHRQdHIobmV3
IFN0YXRpY1ZhbHVlRW50cnkoaXQtPnZhbHVlLT5nZXRQcm9wZXJ0eSwgaXQtPnZhbHVlLT5zZXRQ
cm9wZXJ0eSwgaXQtPnZhbHVlLT5hdHRyaWJ1dGVzKSkpOwogICAgICAgICB9CiAgICAgfQogCkBA
IC0xNTYsMTUgKzE1NiwxNSBAQCBPcGFxdWVKU0NsYXNzQ29udGV4dERhdGE6Ok9wYXF1ZUpTQ2xh
c3NDb250ZXh0RGF0YShKU0M6OkpTR2xvYmFsRGF0YSYsIE9wYXF1ZUpTQwogICAgICAgICBzdGF0
aWNGdW5jdGlvbnMgPSBhZG9wdFB0cihuZXcgT3BhcXVlSlNDbGFzc1N0YXRpY0Z1bmN0aW9uc1Rh
YmxlKTsKICAgICAgICAgT3BhcXVlSlNDbGFzc1N0YXRpY0Z1bmN0aW9uc1RhYmxlOjpjb25zdF9p
dGVyYXRvciBlbmQgPSBqc0NsYXNzLT5tX3N0YXRpY0Z1bmN0aW9ucy0+ZW5kKCk7CiAgICAgICAg
IGZvciAoT3BhcXVlSlNDbGFzc1N0YXRpY0Z1bmN0aW9uc1RhYmxlOjpjb25zdF9pdGVyYXRvciBp
dCA9IGpzQ2xhc3MtPm1fc3RhdGljRnVuY3Rpb25zLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKLSAgICAgICAgICAgIEFTU0VSVCghaXQtPmZpcnN0LT5pc0lkZW50aWZpZXIoKSk7Ci0gICAg
ICAgICAgICBzdGF0aWNGdW5jdGlvbnMtPmFkZChTdHJpbmdJbXBsOjpjcmVhdGUoaXQtPmZpcnN0
LT5jaGFyYWN0ZXJzKCksIGl0LT5maXJzdC0+bGVuZ3RoKCkpLCBhZG9wdFB0cihuZXcgU3RhdGlj
RnVuY3Rpb25FbnRyeShpdC0+c2Vjb25kLT5jYWxsQXNGdW5jdGlvbiwgaXQtPnNlY29uZC0+YXR0
cmlidXRlcykpKTsKKyAgICAgICAgICAgIEFTU0VSVCghaXQtPmtleS0+aXNJZGVudGlmaWVyKCkp
OworICAgICAgICAgICAgc3RhdGljRnVuY3Rpb25zLT5hZGQoU3RyaW5nSW1wbDo6Y3JlYXRlKGl0
LT5rZXktPmNoYXJhY3RlcnMoKSwgaXQtPmtleS0+bGVuZ3RoKCkpLCBhZG9wdFB0cihuZXcgU3Rh
dGljRnVuY3Rpb25FbnRyeShpdC0+dmFsdWUtPmNhbGxBc0Z1bmN0aW9uLCBpdC0+dmFsdWUtPmF0
dHJpYnV0ZXMpKSk7CiAgICAgICAgIH0KICAgICB9CiB9CiAKIE9wYXF1ZUpTQ2xhc3NDb250ZXh0
RGF0YSYgT3BhcXVlSlNDbGFzczo6Y29udGV4dERhdGEoRXhlY1N0YXRlKiBleGVjKQogewotICAg
IE93blB0cjxPcGFxdWVKU0NsYXNzQ29udGV4dERhdGE+JiBjb250ZXh0RGF0YSA9IGV4ZWMtPmds
b2JhbERhdGEoKS5vcGFxdWVKU0NsYXNzRGF0YS5hZGQodGhpcywgbnVsbHB0cikuaXRlcmF0b3It
PnNlY29uZDsKKyAgICBPd25QdHI8T3BhcXVlSlNDbGFzc0NvbnRleHREYXRhPiYgY29udGV4dERh
dGEgPSBleGVjLT5nbG9iYWxEYXRhKCkub3BhcXVlSlNDbGFzc0RhdGEuYWRkKHRoaXMsIG51bGxw
dHIpLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoIWNvbnRleHREYXRhKQogICAgICAgICBjb250
ZXh0RGF0YSA9IGFkb3B0UHRyKG5ldyBPcGFxdWVKU0NsYXNzQ29udGV4dERhdGEoZXhlYy0+Z2xv
YmFsRGF0YSgpLCB0aGlzKSk7CiAgICAgcmV0dXJuICpjb250ZXh0RGF0YTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKaW5kZXggNTM3NGE1My4uMjYzOWQ3
MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKQEAg
LTY1Niw3ICs2NTYsNyBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcChFeGVjU3RhdGUqIGV4ZWMpCiAg
ICAgICAgICAgICBkYXRhTG9nKCIgICUxZCA9IHtcbiIsIGkpOwogICAgICAgICAgICAgU3RyaW5n
SnVtcFRhYmxlOjpTdHJpbmdPZmZzZXRUYWJsZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9yYXJl
RGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW2ldLm9mZnNldFRhYmxlLmVuZCgpOwogICAg
ICAgICAgICAgZm9yIChTdHJpbmdKdW1wVGFibGU6OlN0cmluZ09mZnNldFRhYmxlOjpjb25zdF9p
dGVyYXRvciBpdGVyID0gbV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW2ldLm9m
ZnNldFRhYmxlLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCi0gICAgICAgICAgICAgICAg
ZGF0YUxvZygiXHRcdFwiJXNcIiA9PiAlMDRkXG4iLCBVU3RyaW5nKGl0ZXItPmZpcnN0KS51dGY4
KCkuZGF0YSgpLCBpdGVyLT5zZWNvbmQuYnJhbmNoT2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBk
YXRhTG9nKCJcdFx0XCIlc1wiID0+ICUwNGRcbiIsIFVTdHJpbmcoaXRlci0+a2V5KS51dGY4KCku
ZGF0YSgpLCBpdGVyLT52YWx1ZS5icmFuY2hPZmZzZXQpOwogICAgICAgICAgICAgZGF0YUxvZygi
ICAgICAgfVxuIik7CiAgICAgICAgICAgICArK2k7CiAgICAgICAgIH0gd2hpbGUgKGkgPCBtX3Jh
cmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuc2l6ZSgpKTsKQEAgLTE4ODksNyArMTg4
OSw3IEBAIHZvaWQgRXZhbENvZGVDYWNoZTo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgRXZhbENhY2hlTWFwOjppdGVyYXRvciBlbmQgPSBtX2NhY2hlTWFwLmVu
ZCgpOwogICAgIGZvciAoRXZhbENhY2hlTWFwOjppdGVyYXRvciBwdHIgPSBtX2NhY2hlTWFwLmJl
Z2luKCk7IHB0ciAhPSBlbmQ7ICsrcHRyKQotICAgICAgICB2aXNpdG9yLmFwcGVuZCgmcHRyLT5z
ZWNvbmQpOworICAgICAgICB2aXNpdG9yLmFwcGVuZCgmcHRyLT52YWx1ZSk7CiB9CiAKIHZvaWQg
Q29kZUJsb2NrOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKQEAgLTI5NDYs
OCArMjk0Niw4IEBAIFVTdHJpbmcgQ29kZUJsb2NrOjpuYW1lRm9yUmVnaXN0ZXIoaW50IHJlZ2lz
dGVyTnVtYmVyKQogewogICAgIFN5bWJvbFRhYmxlOjppdGVyYXRvciBlbmQgPSBtX3N5bWJvbFRh
YmxlLT5lbmQoKTsKICAgICBmb3IgKFN5bWJvbFRhYmxlOjppdGVyYXRvciBwdHIgPSBtX3N5bWJv
bFRhYmxlLT5iZWdpbigpOyBwdHIgIT0gZW5kOyArK3B0cikgewotICAgICAgICBpZiAocHRyLT5z
ZWNvbmQuZ2V0SW5kZXgoKSA9PSByZWdpc3Rlck51bWJlcikKLSAgICAgICAgICAgIHJldHVybiBV
U3RyaW5nKHB0ci0+Zmlyc3QpOworICAgICAgICBpZiAocHRyLT52YWx1ZS5nZXRJbmRleCgpID09
IHJlZ2lzdGVyTnVtYmVyKQorICAgICAgICAgICAgcmV0dXJuIFVTdHJpbmcocHRyLT5rZXkpOwog
ICAgIH0KICAgICBpZiAobmVlZHNBY3RpdmF0aW9uKCkgJiYgcmVnaXN0ZXJOdW1iZXIgPT0gYWN0
aXZhdGlvblJlZ2lzdGVyKCkpCiAgICAgICAgIHJldHVybiAiYWN0aXZhdGlvbiI7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSnVtcFRhYmxlLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSnVtcFRhYmxlLmgKaW5kZXggNWJiZTA0Ny4uNjAzNmNk
YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0p1bXBUYWJsZS5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9KdW1wVGFibGUuaApAQCAtNTcs
NyArNTcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIFN0cmluZ09mZnNldFRhYmxl
Ojpjb25zdF9pdGVyYXRvciBsb2MgPSBvZmZzZXRUYWJsZS5maW5kKHZhbHVlKTsKICAgICAgICAg
ICAgIGlmIChsb2MgPT0gZW5kKQogICAgICAgICAgICAgICAgIHJldHVybiBkZWZhdWx0T2Zmc2V0
OwotICAgICAgICAgICAgcmV0dXJuIGxvYy0+c2Vjb25kLmJyYW5jaE9mZnNldDsKKyAgICAgICAg
ICAgIHJldHVybiBsb2MtPnZhbHVlLmJyYW5jaE9mZnNldDsKICAgICAgICAgfQogCiAjaWYgRU5B
QkxFKEpJVCkKQEAgLTY3LDcgKzY3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBT
dHJpbmdPZmZzZXRUYWJsZTo6Y29uc3RfaXRlcmF0b3IgbG9jID0gb2Zmc2V0VGFibGUuZmluZCh2
YWx1ZSk7CiAgICAgICAgICAgICBpZiAobG9jID09IGVuZCkKICAgICAgICAgICAgICAgICByZXR1
cm4gY3RpRGVmYXVsdDsKLSAgICAgICAgICAgIHJldHVybiBsb2MtPnNlY29uZC5jdGlPZmZzZXQ7
CisgICAgICAgICAgICByZXR1cm4gbG9jLT52YWx1ZS5jdGlPZmZzZXQ7CiAgICAgICAgIH0KICNl
bmRpZgogICAgIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0xhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcAppbmRleCA1OWYwZDAyLi5mOTIzZTRhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1
ZVByb2ZpbGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MYXp5T3Bl
cmFuZFZhbHVlUHJvZmlsZS5jcHAKQEAgLTgxLDcgKzgxLDcgQEAgTGF6eU9wZXJhbmRWYWx1ZVBy
b2ZpbGUqIExhenlPcGVyYW5kVmFsdWVQcm9maWxlUGFyc2VyOjpnZXRJZlByZXNlbnQoCiAgICAg
aWYgKGl0ZXIgPT0gbV9tYXAuZW5kKCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIAotICAgIHJl
dHVybiBpdGVyLT5zZWNvbmQ7CisgICAgcmV0dXJuIGl0ZXItPnZhbHVlOwogfQogCiBTcGVjdWxh
dGVkVHlwZSBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZVBhcnNlcjo6cHJlZGljdGlvbigKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TYW1wbGluZ1Rvb2wuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NhbXBsaW5nVG9vbC5jcHAKaW5kZXggZjA3
ZGM3OS4uZjliODI0NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1NhbXBsaW5nVG9vbC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Nh
bXBsaW5nVG9vbC5jcHAKQEAgLTQxMCw3ICs0MTAsNyBAQCB2b2lkIFNhbXBsaW5nVG9vbDo6ZHVt
cChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgVmVjdG9yPFNjcmlwdFNhbXBsZVJlY29yZCo+IGNvZGVC
bG9ja1NhbXBsZXMoc2NvcGVDb3VudCk7CiAgICAgU2NyaXB0U2FtcGxlUmVjb3JkTWFwOjppdGVy
YXRvciBpdGVyID0gbV9zY29wZVNhbXBsZU1hcC0+YmVnaW4oKTsKICAgICBmb3IgKGludCBpID0g
MDsgaSA8IHNjb3BlQ291bnQ7ICsraSwgKytpdGVyKQotICAgICAgICBjb2RlQmxvY2tTYW1wbGVz
W2ldID0gaXRlci0+c2Vjb25kLmdldCgpOworICAgICAgICBjb2RlQmxvY2tTYW1wbGVzW2ldID0g
aXRlci0+dmFsdWUuZ2V0KCk7CiAKICAgICBxc29ydChjb2RlQmxvY2tTYW1wbGVzLmJlZ2luKCks
IHNjb3BlQ291bnQsIHNpemVvZihTY3JpcHRTYW1wbGVSZWNvcmQqKSwgY29tcGFyZVNjcmlwdFNh
bXBsZVJlY29yZHMpOwogCkBAIC00NDYsOCArNDQ2LDggQEAgdm9pZCBTYW1wbGluZ1Rvb2w6OmR1
bXAoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICAgICAgICAgIFZlY3RvcjxMaW5lQ291bnRJbmZv
PiBsaW5lQ291bnRJbmZvKGxpbmVzQ291bnQpOwogICAgICAgICAgICAgICAgIGludCBsaW5lbm8g
PSAwOwogICAgICAgICAgICAgICAgIGZvciAoSGFzaE1hcDx1bnNpZ25lZCx1bnNpZ25lZD46Oml0
ZXJhdG9yIGl0ZXIgPSBsaW5lQ291bnRzLmJlZ2luKCk7IGl0ZXIgIT0gbGluZUNvdW50cy5lbmQo
KTsgKytpdGVyLCArK2xpbmVubykgewotICAgICAgICAgICAgICAgICAgICBsaW5lQ291bnRJbmZv
W2xpbmVub10ubGluZSA9IGl0ZXItPmZpcnN0OwotICAgICAgICAgICAgICAgICAgICBsaW5lQ291
bnRJbmZvW2xpbmVub10uY291bnQgPSBpdGVyLT5zZWNvbmQ7CisgICAgICAgICAgICAgICAgICAg
IGxpbmVDb3VudEluZm9bbGluZW5vXS5saW5lID0gaXRlci0+a2V5OworICAgICAgICAgICAgICAg
ICAgICBsaW5lQ291bnRJbmZvW2xpbmVub10uY291bnQgPSBpdGVyLT52YWx1ZTsKICAgICAgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBxc29ydChsaW5lQ291bnRJbmZvLmJlZ2luKCks
IGxpbmVzQ291bnQsIHNpemVvZihMaW5lQ291bnRJbmZvKSwgY29tcGFyZUxpbmVDb3VudEluZm9T
YW1wbGluZyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCmluZGV4IDMzZjI4MmMuLmVlYzlkNjUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuY3BwCkBAIC0yMTIsNyArMjEyLDcgQEAgYm9vbCBCeXRlY29kZUdlbmVyYXRvcjo6YWRk
VmFyKGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBib29sIGlzQ29uc3RhbnQsIFJlZ2lzdGUKICAg
ICBTeW1ib2xUYWJsZTo6QWRkUmVzdWx0IHJlc3VsdCA9IHN5bWJvbFRhYmxlKCkuYWRkKGlkZW50
LmltcGwoKSwgbmV3RW50cnkpOwogCiAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkgewotICAg
ICAgICByMCA9ICZyZWdpc3RlckZvcihyZXN1bHQuaXRlcmF0b3ItPnNlY29uZC5nZXRJbmRleCgp
KTsKKyAgICAgICAgcjAgPSAmcmVnaXN0ZXJGb3IocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXRJ
bmRleCgpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtMjMwLDggKzIzMCw4
IEBAIGludCBCeXRlY29kZUdlbmVyYXRvcjo6YWRkR2xvYmFsVmFyKAogICAgICAgICBuZXdFbnRy
eS5hdHRlbXB0VG9XYXRjaCgpOwogICAgIFN5bWJvbFRhYmxlOjpBZGRSZXN1bHQgcmVzdWx0ID0g
c3ltYm9sVGFibGUoKS5hZGQoaWRlbnQuaW1wbCgpLCBuZXdFbnRyeSk7CiAgICAgaWYgKCFyZXN1
bHQuaXNOZXdFbnRyeSkgewotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZC5ub3RpZnlX
cml0ZSgpOwotICAgICAgICBpbmRleCA9IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLmdldEluZGV4
KCk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUubm90aWZ5V3JpdGUoKTsKKyAgICAg
ICAgaW5kZXggPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldEluZGV4KCk7CiAgICAgfQogICAg
IHJldHVybiBpbmRleDsKIH0KQEAgLTEwMzYsNyArMTAzNiw3IEBAIHVuc2lnbmVkIEJ5dGVjb2Rl
R2VuZXJhdG9yOjphZGRDb25zdGFudChjb25zdCBJZGVudGlmaWVyJiBpZGVudCkKICAgICBpZiAo
cmVzdWx0LmlzTmV3RW50cnkpCiAgICAgICAgIG1fY29kZUJsb2NrLT5hZGRJZGVudGlmaWVyKElk
ZW50aWZpZXIobV9nbG9iYWxEYXRhLCByZXApKTsKIAotICAgIHJldHVybiByZXN1bHQuaXRlcmF0
b3ItPnNlY29uZDsKKyAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIAogUmVn
aXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmFkZENvbnN0YW50VmFsdWUoSlNWYWx1ZSB2KQpA
QCAtMTA0OSw3ICsxMDQ5LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmFkZENv
bnN0YW50VmFsdWUoSlNWYWx1ZSB2KQogICAgICAgICArK21fbmV4dENvbnN0YW50T2Zmc2V0Owog
ICAgICAgICBtX2NvZGVCbG9jay0+YWRkQ29uc3RhbnQoSlNWYWx1ZSh2KSk7CiAgICAgfSBlbHNl
Ci0gICAgICAgIGluZGV4ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgIGluZGV4
ID0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIAogICAgIHJldHVybiAmbV9jb25zdGFudFBvb2xS
ZWdpc3RlcnNbaW5kZXhdOwogfQpAQCAtMTE5Niw3ICsxMTk2LDcgQEAgUmVnaXN0ZXJJRCogQnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXRMb2FkKFJlZ2lzdGVySUQqIGRzdCwgZG91YmxlIG51bWJlcikK
ICAgICAvLyB3b3JrIGNvcnJlY3RseSB3aXRoIE5hTiBhcyBhIGtleS4KICAgICBpZiAoaXNuYW4o
bnVtYmVyKSB8fCBudW1iZXIgPT0gSGFzaFRyYWl0czxkb3VibGU+OjplbXB0eVZhbHVlKCkgfHwg
SGFzaFRyYWl0czxkb3VibGU+Ojppc0RlbGV0ZWRWYWx1ZShudW1iZXIpKQogICAgICAgICByZXR1
cm4gZW1pdExvYWQoZHN0LCBqc051bWJlcihudW1iZXIpKTsKLSAgICBKU1ZhbHVlJiB2YWx1ZUlu
TWFwID0gbV9udW1iZXJNYXAuYWRkKG51bWJlciwgSlNWYWx1ZSgpKS5pdGVyYXRvci0+c2Vjb25k
OworICAgIEpTVmFsdWUmIHZhbHVlSW5NYXAgPSBtX251bWJlck1hcC5hZGQobnVtYmVyLCBKU1Zh
bHVlKCkpLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoIXZhbHVlSW5NYXApCiAgICAgICAgIHZh
bHVlSW5NYXAgPSBqc051bWJlcihudW1iZXIpOwogICAgIHJldHVybiBlbWl0TG9hZChkc3QsIHZh
bHVlSW5NYXApOwpAQCAtMTIwNCw3ICsxMjA0LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXRMb2FkKFJlZ2lzdGVySUQqIGRzdCwgZG91YmxlIG51bWJlcikKIAogUmVnaXN0
ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRMb2FkKFJlZ2lzdGVySUQqIGRzdCwgY29uc3Qg
SWRlbnRpZmllciYgaWRlbnRpZmllcikKIHsKLSAgICBKU1N0cmluZyomIHN0cmluZ0luTWFwID0g
bV9zdHJpbmdNYXAuYWRkKGlkZW50aWZpZXIuaW1wbCgpLCAwKS5pdGVyYXRvci0+c2Vjb25kOwor
ICAgIEpTU3RyaW5nKiYgc3RyaW5nSW5NYXAgPSBtX3N0cmluZ01hcC5hZGQoaWRlbnRpZmllci5p
bXBsKCksIDApLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoIXN0cmluZ0luTWFwKQogICAgICAg
ICBzdHJpbmdJbk1hcCA9IGpzT3duZWRTdHJpbmcoZ2xvYmFsRGF0YSgpLCBpZGVudGlmaWVyLnVz
dHJpbmcoKSk7CiAgICAgcmV0dXJuIGVtaXRMb2FkKGRzdCwgSlNWYWx1ZShzdHJpbmdJbk1hcCkp
OwpAQCAtMTc0Miw3ICsxNzQyLDcgQEAgdW5zaWduZWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmFkZENv
bnN0YW50QnVmZmVyKHVuc2lnbmVkIGxlbmd0aCkKIAogSlNTdHJpbmcqIEJ5dGVjb2RlR2VuZXJh
dG9yOjphZGRTdHJpbmdDb25zdGFudChjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKQogewot
ICAgIEpTU3RyaW5nKiYgc3RyaW5nSW5NYXAgPSBtX3N0cmluZ01hcC5hZGQoaWRlbnRpZmllci5p
bXBsKCksIDApLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgSlNTdHJpbmcqJiBzdHJpbmdJbk1hcCA9
IG1fc3RyaW5nTWFwLmFkZChpZGVudGlmaWVyLmltcGwoKSwgMCkuaXRlcmF0b3ItPnZhbHVlOwog
ICAgIGlmICghc3RyaW5nSW5NYXApIHsKICAgICAgICAgc3RyaW5nSW5NYXAgPSBqc1N0cmluZyhn
bG9iYWxEYXRhKCksIGlkZW50aWZpZXIudXN0cmluZygpKTsKICAgICAgICAgYWRkQ29uc3RhbnRW
YWx1ZShzdHJpbmdJbk1hcCk7CkBAIC0xODE0LDggKzE4MTQsOCBAQCBSZWdpc3RlcklEKiBCeXRl
Y29kZUdlbmVyYXRvcjo6ZW1pdExhenlOZXdGdW5jdGlvbihSZWdpc3RlcklEKiBkc3QsIEZ1bmN0
aW9uQm9keQogewogICAgIEZ1bmN0aW9uT2Zmc2V0TWFwOjpBZGRSZXN1bHQgcHRyID0gbV9mdW5j
dGlvbk9mZnNldHMuYWRkKGZ1bmN0aW9uLCAwKTsKICAgICBpZiAocHRyLmlzTmV3RW50cnkpCi0g
ICAgICAgIHB0ci5pdGVyYXRvci0+c2Vjb25kID0gbV9jb2RlQmxvY2stPmFkZEZ1bmN0aW9uRGVj
bChtYWtlRnVuY3Rpb24obV9nbG9iYWxEYXRhLCBmdW5jdGlvbikpOwotICAgIHJldHVybiBlbWl0
TmV3RnVuY3Rpb25JbnRlcm5hbChkc3QsIHB0ci5pdGVyYXRvci0+c2Vjb25kLCB0cnVlKTsKKyAg
ICAgICAgcHRyLml0ZXJhdG9yLT52YWx1ZSA9IG1fY29kZUJsb2NrLT5hZGRGdW5jdGlvbkRlY2wo
bWFrZUZ1bmN0aW9uKG1fZ2xvYmFsRGF0YSwgZnVuY3Rpb24pKTsKKyAgICByZXR1cm4gZW1pdE5l
d0Z1bmN0aW9uSW50ZXJuYWwoZHN0LCBwdHIuaXRlcmF0b3ItPnZhbHVlLCB0cnVlKTsKIH0KIAog
UmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXROZXdGdW5jdGlvbkludGVybmFsKFJl
Z2lzdGVySUQqIGRzdCwgdW5zaWduZWQgaW5kZXgsIGJvb2wgZG9OdWxsQ2hlY2spCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKaW5k
ZXggZDI0M2U4Yy4uMGJmNjZhNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcApAQCAtMjU4LDcgKzI1OCw3IEBAIFJlZ2lzdGVy
SUQqIFByb3BlcnR5TGlzdE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2Vu
ZXJhdG9yLCBSZWdpc3RlCiAgICAgICAgICAgICBHZXR0ZXJTZXR0ZXJQYWlyIHBhaXIobm9kZSwg
c3RhdGljX2Nhc3Q8UHJvcGVydHlOb2RlKj4oMCkpOwogICAgICAgICAgICAgR2V0dGVyU2V0dGVy
TWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbWFwLmFkZChub2RlLT5uYW1lKCkuaW1wbCgpLCBwYWly
KTsKICAgICAgICAgICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgICAgICAgICAg
cmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQuc2Vjb25kID0gbm9kZTsKKyAgICAgICAgICAgICAgICBy
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlLnNlY29uZCA9IG5vZGU7CiAgICAgICAgIH0KIAogICAgICAg
ICAvLyBJdGVyYXRlIG92ZXIgdGhlIHJlbWFpbmluZyBwcm9wZXJ0aWVzIGluIHRoZSBsaXN0LgpA
QCAtMjc2LDcgKzI3Niw3IEBAIFJlZ2lzdGVySUQqIFByb3BlcnR5TGlzdE5vZGU6OmVtaXRCeXRl
Y29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlCiAgICAgICAgICAgICBB
U1NFUlQobm9kZS0+bV90eXBlID09IFByb3BlcnR5Tm9kZTo6R2V0dGVyIHx8IG5vZGUtPm1fdHlw
ZSA9PSBQcm9wZXJ0eU5vZGU6OlNldHRlcik7CiAgICAgICAgICAgICBHZXR0ZXJTZXR0ZXJNYXA6
Oml0ZXJhdG9yIGl0ID0gbWFwLmZpbmQobm9kZS0+bmFtZSgpLmltcGwoKSk7CiAgICAgICAgICAg
ICBBU1NFUlQoaXQgIT0gbWFwLmVuZCgpKTsKLSAgICAgICAgICAgIEdldHRlclNldHRlclBhaXIm
IHBhaXIgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgR2V0dGVyU2V0dGVyUGFpciYgcGFpciA9
IGl0LT52YWx1ZTsKIAogICAgICAgICAgICAgLy8gV2FzIHRoaXMgYWxyZWFkeSBnZW5lcmF0ZWQg
YXMgYSBwYXJ0IG9mIGl0cyBwYXJ0bmVyPwogICAgICAgICAgICAgaWYgKHBhaXIuc2Vjb25kID09
IG5vZGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdn
ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcAppbmRl
eCAwYTY2ZDZmLi41NDgzZDJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVi
dWdnZXIvRGVidWdnZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9E
ZWJ1Z2dlci5jcHAKQEAgLTU5LDcgKzU5LDcgQEAgaW5saW5lIFJlY29tcGlsZXI6On5SZWNvbXBp
bGVyKCkKICAgICAvLyBKYXZhU2NyaXB0IGluIHRoZSBpbnNwZWN0b3IuCiAgICAgU291cmNlUHJv
dmlkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fc291cmNlUHJvdmlkZXJzLmVuZCgpOwog
ICAgIGZvciAoU291cmNlUHJvdmlkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX3NvdXJj
ZVByb3ZpZGVycy5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQotICAgICAgICBtX2RlYnVn
Z2VyLT5zb3VyY2VQYXJzZWQoaXRlci0+c2Vjb25kLCBpdGVyLT5maXJzdCwgLTEsIFVTdHJpbmco
KSk7CisgICAgICAgIG1fZGVidWdnZXItPnNvdXJjZVBhcnNlZChpdGVyLT52YWx1ZSwgaXRlci0+
a2V5LCAtMSwgVVN0cmluZygpKTsKIH0KIAogaW5saW5lIHZvaWQgUmVjb21waWxlcjo6b3BlcmF0
b3IoKShKU0NlbGwqIGNlbGwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAppbmRleCA5MjA4Y2Rl
Li44OGQ0MDViIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3Vt
ZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKQEAgLTIxNCw3ICsyMTQsNyBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBpZiBp
dCdzIGEgdmFyaWFibGUgdGhhdCB3ZSB0aGluayBpcyBhbGlhc2VkIHRvCiAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyB0aGUgYXJndW1lbnRzLCB0aGF0IHdlIGtub3cgdGhhdCBpdCBtaWdodCBh
Y3R1YWxseSBub3QgYmUuCiAgICAgICAgICAgICAgICAgICAgICAgICBBcmd1bWVudHNBbGlhc2lu
Z0RhdGEmIGRhdGEgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fYXJndW1lbnRzQWxp
YXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT5zZWNvbmQ7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9hcmd1bWVudHNBbGlhc2luZy5maW5kKHZhcmlhYmxlQWNjZXNzRGF0YSkt
PnZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXJnZU5vbkFyZ3VtZW50c0Fz
c2lnbm1lbnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEubWVyZ2VDYWxsQ29udGV4
dChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwpAQCAtMjMyLDcgKzIzMiw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
IEFyZ3VtZW50c0FsaWFzaW5nRGF0YSYgZGF0YSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICBt
X2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+c2Vjb25kOworICAg
ICAgICAgICAgICAgICAgICAgICAgbV9hcmd1bWVudHNBbGlhc2luZy5maW5kKHZhcmlhYmxlQWNj
ZXNzRGF0YSktPnZhbHVlOwogICAgICAgICAgICAgICAgICAgICBkYXRhLm1lcmdlQXJndW1lbnRz
QXNzaWdubWVudCgpOwogICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGVuc3VyZXMgdGhhdCB0
aGUgdmFyaWFibGUncyB1c2VzIGFyZSBpbiB0aGUgc2FtZSBjb250ZXh0IGFzCiAgICAgICAgICAg
ICAgICAgICAgIC8vIHRoZSBhcmd1bWVudHMgaXQgaXMgYWxpYXNpbmcuCkBAIC0yNDcsNyArMjQ3
LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRh
LT5pc0NhcHR1cmVkKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICAgICAgQXJndW1lbnRzQWxpYXNpbmdEYXRhJiBkYXRhID0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIG1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT5z
ZWNvbmQ7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQo
dmFyaWFibGVBY2Nlc3NEYXRhKS0+dmFsdWU7CiAgICAgICAgICAgICAgICAgICAgIGRhdGEubWVy
Z2VDYWxsQ29udGV4dChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQpAQCAtMjU3LDcgKzI1Nyw3IEBA
IHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+aXND
YXB0dXJlZCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgICAgIEFyZ3VtZW50c0FsaWFzaW5nRGF0YSYgZGF0YSA9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+c2Vjb25k
OworICAgICAgICAgICAgICAgICAgICAgICAgbV9hcmd1bWVudHNBbGlhc2luZy5maW5kKHZhcmlh
YmxlQWNjZXNzRGF0YSktPnZhbHVlOwogICAgICAgICAgICAgICAgICAgICBkYXRhLm1lcmdlQ2Fs
bENvbnRleHQobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CiAgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgICAgICAvLyBJZiBhIHZhcmlhYmxlIGlzIHVzZWQgaW4g
YSBmbHVzaCB0aGVuIGJ5IGRlZmluaXRpb24gaXQgZXNjYXBlcy4KQEAgLTI3MCw3ICsyNzAsNyBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmlz
Q2FwdHVyZWQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgICAgICBBcmd1bWVudHNBbGlhc2luZ0RhdGEmIGRhdGEgPQotICAgICAgICAgICAgICAgICAg
ICAgICAgbV9hcmd1bWVudHNBbGlhc2luZy5maW5kKHZhcmlhYmxlQWNjZXNzRGF0YSktPnNlY29u
ZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJp
YWJsZUFjY2Vzc0RhdGEpLT52YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXJnZU5v
bkFyZ3VtZW50c0Fzc2lnbm1lbnQoKTsKICAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXJnZUNh
bGxDb250ZXh0KG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKQEAgLTM1MSw3ICszNTEsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIEFyZ3VtZW50c0FsaWFzaW5n
RGF0YSYgZGF0YSA9Ci0gICAgICAgICAgICAgICAgICAgIG1fYXJndW1lbnRzQWxpYXNpbmcuZmlu
ZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT5zZWNvbmQ7CisgICAgICAgICAgICAgICAgICAgIG1fYXJn
dW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT52YWx1ZTsKICAgICAgICAg
ICAgICAgICBpZiAoZGF0YS5pc1ZhbGlkKCkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgICAgIApAQCAtNDUxLDcgKzQ1MSw3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICAgICAgLy8gdGhpbmdzLiBOb3RlIGFsc28gdGhhdCB0aGUgU2V0TG9jYWwgc2hvdWxk
IGJlY29tZSBkZWFkIGFzIHNvb24gYXMKICAgICAgICAgICAgICAgICAgICAgLy8gd2UgcmVwbGFj
ZSBhbGwgdXNlcyBvZiB0aGlzIHZhcmlhYmxlIHdpdGggR2V0TXlBcmd1bWVudHNMZW5ndGggYW5k
CiAgICAgICAgICAgICAgICAgICAgIC8vIEdldE15QXJndW1lbnRCeVZhbC4KLSAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKG1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0Rh
dGEpLT5zZWNvbmQuaXNWYWxpZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1fYXJn
dW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT52YWx1ZS5pc1ZhbGlkKCkp
OwogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IHZhcmlhYmxlQWNjZXNzRGF0YS0+bWVy
Z2VJc0FyZ3VtZW50c0FsaWFzKHRydWUpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICB9CkBAIC03MDMsNyArNzAzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKSkKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIAotICAgICAgICAgICAgQXJndW1lbnRzQWxpYXNpbmdEYXRhJiBk
YXRhID0gbV9hcmd1bWVudHNBbGlhc2luZy5maW5kKHZhcmlhYmxlQWNjZXNzRGF0YSktPnNlY29u
ZDsKKyAgICAgICAgICAgIEFyZ3VtZW50c0FsaWFzaW5nRGF0YSYgZGF0YSA9IG1fYXJndW1lbnRz
QWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT52YWx1ZTsKICAgICAgICAgICAgIGRh
dGEuZXNjYXBlcyA9IHRydWU7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtNzUw
LDcgKzc1MCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAg
ICAgICAgCi0gICAgICAgIEFyZ3VtZW50c0FsaWFzaW5nRGF0YSYgZGF0YSA9IG1fYXJndW1lbnRz
QWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT5zZWNvbmQ7CisgICAgICAgIEFyZ3Vt
ZW50c0FsaWFzaW5nRGF0YSYgZGF0YSA9IG1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJs
ZUFjY2Vzc0RhdGEpLT52YWx1ZTsKICAgICAgICAgZGF0YS5tZXJnZUNhbGxDb250ZXh0KG5vZGUu
Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAgIH0KICAgICAKQEAgLTc3Myw3ICs3NzMs
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgQXJndW1lbnRzQWxpYXNpbmdEYXRhJiBkYXRhID0KLSAgICAgICAgICAgICAgICBt
X2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+c2Vjb25kOworICAg
ICAgICAgICAgICAgIG1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEp
LT52YWx1ZTsKICAgICAgICAgICAgIGlmICghZGF0YS5pc1ZhbGlkKCkpCiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCkBAIC04MDksNyArODA5LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAmJiAhbV9jcmVhdGVzQXJndW1lbnRzLmNvbnRh
aW5zKGNoaWxkLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgIGJvb2wg
aXNBbGlhc2VkQXJndW1lbnRzUmVnaXN0ZXIgPQogICAgICAgICAgICAgICAgICF2YXJpYWJsZUFj
Y2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKQotICAgICAgICAgICAgICAgICYmIG1fYXJndW1lbnRzQWxp
YXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT5zZWNvbmQuaXNWYWxpZCgpCisgICAgICAg
ICAgICAgICAgJiYgbV9hcmd1bWVudHNBbGlhc2luZy5maW5kKHZhcmlhYmxlQWNjZXNzRGF0YSkt
PnZhbHVlLmlzVmFsaWQoKQogICAgICAgICAgICAgICAgICYmICFtX2NyZWF0ZXNBcmd1bWVudHMu
Y29udGFpbnMoY2hpbGQuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAgICAg
aWYgKCFpc0RlYWRBcmd1bWVudHNSZWdpc3RlciAmJiAhaXNBbGlhc2VkQXJndW1lbnRzUmVnaXN0
ZXIpCiAgICAgICAgICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5jcHAKaW5kZXggNzc5OWVlNS4uYjViNjY4NCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBc3NlbWJseUhlbHBlcnMuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXNzZW1ibHlIZWxwZXJzLmNwcApAQCAt
NDksOSArNDksOSBAQCBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiYgQXNzZW1ibHlI
ZWxwZXJzOjpkZWNvZGVkQ29kZU1hcEZvcihDb2RlQmxvY2sqCiAgICAgSGFzaE1hcDxDb2RlQmxv
Y2sqLCBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiA+OjpBZGRSZXN1bHQgcmVzdWx0
ID0gbV9kZWNvZGVkQ29kZU1hcHMuYWRkKGNvZGVCbG9jaywgVmVjdG9yPEJ5dGVjb2RlQW5kTWFj
aGluZU9mZnNldD4oKSk7CiAgICAgCiAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQotICAgICAg
ICBjb2RlQmxvY2stPmppdENvZGVNYXAoKS0+ZGVjb2RlKHJlc3VsdC5pdGVyYXRvci0+c2Vjb25k
KTsKKyAgICAgICAgY29kZUJsb2NrLT5qaXRDb2RlTWFwKCktPmRlY29kZShyZXN1bHQuaXRlcmF0
b3ItPnZhbHVlKTsKICAgICAKLSAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7Cisg
ICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiB9CiAKICNpZiBFTkFCTEUoU0FNUExJ
TkdfRkxBR1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVD
b2RlQ2FjaGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVDYWNoZS5o
CmluZGV4IGY2YTc0NWMuLjhlZDE1NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQnl0ZUNvZGVDYWNoZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQnl0ZUNvZGVDYWNoZS5oCkBAIC0xMzIsMTAgKzEzMiwxMCBAQCBwdWJsaWM6CiAgICAgICAg
IE1hcDo6aXRlcmF0b3IgYmVnaW4gPSBtX21hcC5iZWdpbigpOwogICAgICAgICBNYXA6Oml0ZXJh
dG9yIGVuZCA9IG1fbWFwLmVuZCgpOwogICAgICAgICBmb3IgKE1hcDo6aXRlcmF0b3IgaXRlciA9
IGJlZ2luOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0gICAgICAgICAgICBpZiAoIWl0ZXItPnNl
Y29uZC5jb2RlQmxvY2spCisgICAgICAgICAgICBpZiAoIWl0ZXItPnZhbHVlLmNvZGVCbG9jaykK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChpdGVyLT5zZWNvbmQu
b3duZWQpIHsKLSAgICAgICAgICAgICAgICBkZWxldGUgaXRlci0+c2Vjb25kLmNvZGVCbG9jazsK
KyAgICAgICAgICAgIGlmIChpdGVyLT52YWx1ZS5vd25lZCkgeworICAgICAgICAgICAgICAgIGRl
bGV0ZSBpdGVyLT52YWx1ZS5jb2RlQmxvY2s7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE0NSw3ICsxNDUsNyBAQCBwdWJsaWM6CiAgICAg
ewogICAgICAgICBNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX21hcC5maW5kKGtleSk7CiAgICAgICAg
IGlmIChpdGVyICE9IG1fbWFwLmVuZCgpKQotICAgICAgICAgICAgcmV0dXJuIGl0ZXItPnNlY29u
ZC5jb2RlQmxvY2s7CisgICAgICAgICAgICByZXR1cm4gaXRlci0+dmFsdWUuY29kZUJsb2NrOwog
ICAgICAgICAKICAgICAgICAgQnl0ZUNvZGVDYWNoZVZhbHVlIHZhbHVlOwogICAgICAgICAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKaW5kZXgg
ZTRlOTRlOS4uYzlmYzQxZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
eXRlQ29kZVBhcnNlci5jcHAKQEAgLTY1Myw5ICs2NTMsOSBAQCBwcml2YXRlOgogICAgIHsKICAg
ICAgICAgSGFzaE1hcDxKU0NlbGwqLCBOb2RlSW5kZXg+OjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9j
ZWxsQ29uc3RhbnROb2Rlcy5hZGQoY2VsbCwgTm9Ob2RlKTsKICAgICAgICAgaWYgKHJlc3VsdC5p
c05ld0VudHJ5KQotICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBhZGRUb0dy
YXBoKFdlYWtKU0NvbnN0YW50LCBPcEluZm8oY2VsbCkpOworICAgICAgICAgICAgcmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZSA9IGFkZFRvR3JhcGgoV2Vha0pTQ29uc3RhbnQsIE9wSW5mbyhjZWxsKSk7
CiAgICAgICAgIAotICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAg
ICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogICAgIH0KICAgICAKICAgICBDb2Rl
T3JpZ2luIGN1cnJlbnRDb2RlT3JpZ2luKCkKQEAgLTMxNjEsNyArMzE2MSw3IEBAIEJ5dGVDb2Rl
UGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmVTdGFja0VudHJ5KAogICAgICAgICAgICAg
SWRlbnRpZmllck1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IGJ5dGVDb2RlUGFyc2VyLT5tX2lkZW50
aWZpZXJNYXAuYWRkKHJlcCwgYnl0ZUNvZGVQYXJzZXItPm1fY29kZUJsb2NrLT5udW1iZXJPZklk
ZW50aWZpZXJzKCkpOwogICAgICAgICAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQogICAgICAg
ICAgICAgICAgIGJ5dGVDb2RlUGFyc2VyLT5tX2NvZGVCbG9jay0+YWRkSWRlbnRpZmllcihJZGVu
dGlmaWVyKGJ5dGVDb2RlUGFyc2VyLT5tX2dsb2JhbERhdGEsIHJlcCkpOwotICAgICAgICAgICAg
bV9pZGVudGlmaWVyUmVtYXBbaV0gPSByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAg
ICAgIG1faWRlbnRpZmllclJlbWFwW2ldID0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAgICAg
ICAgfQogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvZGVCbG9jay0+bnVtYmVyT2ZD
b25zdGFudFJlZ2lzdGVycygpOyArK2kpIHsKICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBj
b2RlQmxvY2stPmdldENvbnN0YW50KGkgKyBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7CkBA
IC0zMTc5LDcgKzMxNzksNyBAQCBCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5s
aW5lU3RhY2tFbnRyeSgKICAgICAgICAgICAgICAgICBieXRlQ29kZVBhcnNlci0+bV9jb2RlQmxv
Y2stPmFkZENvbnN0YW50KHZhbHVlKTsKICAgICAgICAgICAgICAgICBieXRlQ29kZVBhcnNlci0+
bV9jb25zdGFudHMuYXBwZW5kKENvbnN0YW50UmVjb3JkKCkpOwogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgbV9jb25zdGFudFJlbWFwW2ldID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7Cisg
ICAgICAgICAgICBtX2NvbnN0YW50UmVtYXBbaV0gPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwog
ICAgICAgICB9CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb2RlQmxvY2stPm51
bWJlck9mR2xvYmFsUmVzb2x2ZUluZm9zKCk7ICsraSkKICAgICAgICAgICAgIGJ5dGVDb2RlUGFy
c2VyLT5tX2NvZGVCbG9jay0+YWRkR2xvYmFsUmVzb2x2ZUluZm8oc3RkOjpudW1lcmljX2xpbWl0
czx1bnNpZ25lZD46Om1heCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKaW5kZXgg
Mzc3MTMyNy4uYTMzOWI2YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKQEAgLTM0
NSw3ICszNDUsNyBAQCB2b2lkIEhlYXA6Om1hcmtQcm90ZWN0ZWRPYmplY3RzKEhlYXBSb290Vmlz
aXRvciYgaGVhcFJvb3RWaXNpdG9yKQogewogICAgIFByb3RlY3RDb3VudFNldDo6aXRlcmF0b3Ig
ZW5kID0gbV9wcm90ZWN0ZWRWYWx1ZXMuZW5kKCk7CiAgICAgZm9yIChQcm90ZWN0Q291bnRTZXQ6
Oml0ZXJhdG9yIGl0ID0gbV9wcm90ZWN0ZWRWYWx1ZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KQotICAgICAgICBoZWFwUm9vdFZpc2l0b3IudmlzaXQoJml0LT5maXJzdCk7CisgICAgICAgIGhl
YXBSb290VmlzaXRvci52aXNpdCgmaXQtPmtleSk7CiB9CiAKIHZvaWQgSGVhcDo6cHVzaFRlbXBT
b3J0VmVjdG9yKFZlY3RvcjxWYWx1ZVN0cmluZ1BhaXI+KiB0ZW1wVmVjdG9yKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5oCmluZGV4IDU5NWU5MzcuLjY1NGU2YjIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IZWFwLmgKQEAgLTM0NSw3ICszNDUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB7CiAg
ICAgICAgIFByb3RlY3RDb3VudFNldDo6aXRlcmF0b3IgZW5kID0gbV9wcm90ZWN0ZWRWYWx1ZXMu
ZW5kKCk7CiAgICAgICAgIGZvciAoUHJvdGVjdENvdW50U2V0OjppdGVyYXRvciBpdCA9IG1fcHJv
dGVjdGVkVmFsdWVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIGZ1bmN0
b3IoaXQtPmZpcnN0KTsKKyAgICAgICAgICAgIGZ1bmN0b3IoaXQtPmtleSk7CiAgICAgICAgIG1f
aGFuZGxlU2V0LmZvckVhY2hTdHJvbmdIYW5kbGUoZnVuY3RvciwgbV9wcm90ZWN0ZWRWYWx1ZXMp
OwogCiAgICAgICAgIHJldHVybiBmdW5jdG9yLnJldHVyblZhbHVlKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KSVRTdHViUm91dGluZVNldC5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9KSVRTdHViUm91dGluZVNldC5jcHAKaW5kZXggMDU0YmYwNi4u
OGUyNzkxZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSklUU3R1YlJv
dXRpbmVTZXQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pJVFN0dWJSb3V0
aW5lU2V0LmNwcApAQCAtODIsNyArODIsNyBAQCB2b2lkIEpJVFN0dWJSb3V0aW5lU2V0OjptYXJr
U2xvdyh1aW50cHRyX3QgYWRkcmVzcykKICAgICBpZiAoaXRlciA9PSBtX2FkZHJlc3NUb1JvdXRp
bmVNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBpdGVyLT5zZWNvbmQtPm1f
bWF5QmVFeGVjdXRpbmcgPSB0cnVlOworICAgIGl0ZXItPnZhbHVlLT5tX21heUJlRXhlY3V0aW5n
ID0gdHJ1ZTsKIH0KIAogdm9pZCBKSVRTdHViUm91dGluZVNldDo6ZGVsZXRlVW5tYXJrZWRKZXR0
aXNvbmVkU3R1YlJvdXRpbmVzKCkKQEAgLTk3LDcgKzk3LDcgQEAgdm9pZCBKSVRTdHViUm91dGlu
ZVNldDo6ZGVsZXRlVW5tYXJrZWRKZXR0aXNvbmVkU3R1YlJvdXRpbmVzKCkKICAgICAgICAgdWlu
dHB0cl90IHN0ZXAgPSBKSVRTdHViUm91dGluZTo6YWRkcmVzc1N0ZXAoKTsKICAgICAgICAgZm9y
ICh1aW50cHRyX3QgaXRlciA9IHN0YXJ0OyBpdGVyIDwgZW5kOyBpdGVyICs9IHN0ZXApIHsKICAg
ICAgICAgICAgIEFTU0VSVChtX2FkZHJlc3NUb1JvdXRpbmVNYXAuZmluZChpdGVyKSAhPSBtX2Fk
ZHJlc3NUb1JvdXRpbmVNYXAuZW5kKCkpOwotICAgICAgICAgICAgQVNTRVJUKG1fYWRkcmVzc1Rv
Um91dGluZU1hcC5maW5kKGl0ZXIpLT5zZWNvbmQgPT0gcm91dGluZSk7CisgICAgICAgICAgICBB
U1NFUlQobV9hZGRyZXNzVG9Sb3V0aW5lTWFwLmZpbmQoaXRlciktPnZhbHVlID09IHJvdXRpbmUp
OwogICAgICAgICAgICAgbV9hZGRyZXNzVG9Sb3V0aW5lTWFwLnJlbW92ZShpdGVyKTsKICAgICAg
ICAgfQogICAgICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtTdGFjay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suY3BwCmlu
ZGV4IDAyYTEzMDcuLmY0NzVhZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtTdGFjay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0
YWNrLmNwcApAQCAtNTk3LDcgKzU5Nyw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBNYXJrU3RhY2s6
OmludGVybmFsQXBwZW5kKEpTVmFsdWUqIHNsb3QpCiAgICAgICAgICAgICBpZiAoYWRkUmVzdWx0
LmlzTmV3RW50cnkpCiAgICAgICAgICAgICAgICAgc3RyaW5nLT5zZXRIYXNoQ29uc3RTaW5nbGV0
b24oKTsKICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIEpTVmFsdWUgZXhpc3Rp
bmdKU1ZhbHVlID0gYWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgICAgICAgICAg
SlNWYWx1ZSBleGlzdGluZ0pTVmFsdWUgPSBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogICAg
ICAgICAgICAgICAgIGlmICh2YWx1ZSAhPSBleGlzdGluZ0pTVmFsdWUpCiAgICAgICAgICAgICAg
ICAgICAgIGpzQ2FzdDxKU1N0cmluZyo+KGV4aXN0aW5nSlNWYWx1ZS5hc0NlbGwoKSktPmNsZWFy
SGFzaENvbnN0U2luZ2xldG9uKCk7CiAgICAgICAgICAgICAgICAgKnNsb3QgPSBleGlzdGluZ0pT
VmFsdWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrLmgKaW5kZXggMDc2OThmZC4uM2MzZDFkMCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vhay5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWsuaApAQCAtMTY0LDggKzE2NCw4IEBAIHRlbXBsYXRl
PHR5cGVuYW1lIE1hcCwgdHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZT4gaW5saW5lIHZvaWQg
d2Vha1JlbW92ZShNYXAmCiAgICAgdHlwZW5hbWUgTWFwOjppdGVyYXRvciBpdCA9IG1hcC5maW5k
KGtleSk7CiAgICAgQVNTRVJUX1VOVVNFRCh2YWx1ZSwgdmFsdWUpOwogICAgIEFTU0VSVChpdCAh
PSBtYXAuZW5kKCkpOwotICAgIEFTU0VSVChpdC0+c2Vjb25kLndhcyh2YWx1ZSkpOwotICAgIEFT
U0VSVCghaXQtPnNlY29uZCk7CisgICAgQVNTRVJUKGl0LT52YWx1ZS53YXModmFsdWUpKTsKKyAg
ICBBU1NFUlQoIWl0LT52YWx1ZSk7CiAgICAgbWFwLnJlbW92ZShpdCk7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmNwcAppbmRleCA1MmE3MTU4Li44MzdiOGQyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuY3BwCkBAIC03MTEsOCArNzExLDggQEAgSklUQ29kZSBKSVQ6OnByaXZhdGVDb21w
aWxlKENvZGVQdHIqIGZ1bmN0aW9uRW50cnlBcml0eUNoZWNrLCBKSVRDb21waWxhdGlvbkVmZm8K
IAogICAgICAgICAgICAgU3RyaW5nSnVtcFRhYmxlOjpTdHJpbmdPZmZzZXRUYWJsZTo6aXRlcmF0
b3IgZW5kID0gcmVjb3JkLmp1bXBUYWJsZS5zdHJpbmdKdW1wVGFibGUtPm9mZnNldFRhYmxlLmVu
ZCgpOyAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yIChTdHJpbmdKdW1wVGFibGU6OlN0cmlu
Z09mZnNldFRhYmxlOjppdGVyYXRvciBpdCA9IHJlY29yZC5qdW1wVGFibGUuc3RyaW5nSnVtcFRh
YmxlLT5vZmZzZXRUYWJsZS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBvZmZzZXQgPSBpdC0+c2Vjb25kLmJyYW5jaE9mZnNldDsKLSAgICAgICAg
ICAgICAgICBpdC0+c2Vjb25kLmN0aU9mZnNldCA9IG9mZnNldCA/IHBhdGNoQnVmZmVyLmxvY2F0
aW9uT2YobV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyBvZmZzZXRdKSA6IHJlY29yZC5qdW1wVGFi
bGUuc3RyaW5nSnVtcFRhYmxlLT5jdGlEZWZhdWx0OworICAgICAgICAgICAgICAgIHVuc2lnbmVk
IG9mZnNldCA9IGl0LT52YWx1ZS5icmFuY2hPZmZzZXQ7CisgICAgICAgICAgICAgICAgaXQtPnZh
bHVlLmN0aU9mZnNldCA9IG9mZnNldCA/IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YobV9sYWJlbHNb
Ynl0ZWNvZGVPZmZzZXQgKyBvZmZzZXRdKSA6IHJlY29yZC5qdW1wVGFibGUuc3RyaW5nSnVtcFRh
YmxlLT5jdGlEZWZhdWx0OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAppbmRleCAwZjAzYTBhLi5iZTZhODVhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcApAQCAtMzQyOCw4ICszNDI4LDggQEAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIEpJVFRodW5rczo6Y3RpU3R1YihKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEsIFRodW5rR2VuZXJhdG8KIHsKICAgICBDVElTdHViTWFwOjpBZGRSZXN1bHQgZW50
cnkgPSBtX2N0aVN0dWJNYXAuYWRkKGdlbmVyYXRvciwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCkp
OwogICAgIGlmIChlbnRyeS5pc05ld0VudHJ5KQotICAgICAgICBlbnRyeS5pdGVyYXRvci0+c2Vj
b25kID0gZ2VuZXJhdG9yKGdsb2JhbERhdGEpOwotICAgIHJldHVybiBlbnRyeS5pdGVyYXRvci0+
c2Vjb25kOworICAgICAgICBlbnRyeS5pdGVyYXRvci0+dmFsdWUgPSBnZW5lcmF0b3IoZ2xvYmFs
RGF0YSk7CisgICAgcmV0dXJuIGVudHJ5Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIAogTmF0aXZlRXhl
Y3V0YWJsZSogSklUVGh1bmtzOjpob3N0RnVuY3Rpb25TdHViKEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSwgTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9y
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCmluZGV4IDU1OGY1MGUuLjU5
MGRmNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAKQEAgLTEzMjUs
MTAgKzEzMjUsMTAgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lv
biBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VTdHJpY3RPYmplY3QKICAgICAgICAgaWYgKCFtX3N5
bnRheEFscmVhZHlWYWxpZGF0ZWQpIHsKICAgICAgICAgICAgIE9iamVjdFZhbGlkYXRpb25NYXA6
OkFkZFJlc3VsdCBwcm9wZXJ0eUVudHJ5ID0gb2JqZWN0VmFsaWRhdG9yLmFkZChjb250ZXh0Lmdl
dE5hbWUocHJvcGVydHkpLmltcGwoKSwgY29udGV4dC5nZXRUeXBlKHByb3BlcnR5KSk7CiAgICAg
ICAgICAgICBpZiAoIXByb3BlcnR5RW50cnkuaXNOZXdFbnRyeSkgewotICAgICAgICAgICAgICAg
IGZhaWxJZlRydWUocHJvcGVydHlFbnRyeS5pdGVyYXRvci0+c2Vjb25kID09IFByb3BlcnR5Tm9k
ZTo6Q29uc3RhbnQpOworICAgICAgICAgICAgICAgIGZhaWxJZlRydWUocHJvcGVydHlFbnRyeS5p
dGVyYXRvci0+dmFsdWUgPT0gUHJvcGVydHlOb2RlOjpDb25zdGFudCk7CiAgICAgICAgICAgICAg
ICAgZmFpbElmVHJ1ZShjb250ZXh0LmdldFR5cGUocHJvcGVydHkpID09IFByb3BlcnR5Tm9kZTo6
Q29uc3RhbnQpOwotICAgICAgICAgICAgICAgIGZhaWxJZlRydWUoY29udGV4dC5nZXRUeXBlKHBy
b3BlcnR5KSAmIHByb3BlcnR5RW50cnkuaXRlcmF0b3ItPnNlY29uZCk7Ci0gICAgICAgICAgICAg
ICAgcHJvcGVydHlFbnRyeS5pdGVyYXRvci0+c2Vjb25kIHw9IGNvbnRleHQuZ2V0VHlwZShwcm9w
ZXJ0eSk7CisgICAgICAgICAgICAgICAgZmFpbElmVHJ1ZShjb250ZXh0LmdldFR5cGUocHJvcGVy
dHkpICYgcHJvcGVydHlFbnRyeS5pdGVyYXRvci0+dmFsdWUpOworICAgICAgICAgICAgICAgIHBy
b3BlcnR5RW50cnkuaXRlcmF0b3ItPnZhbHVlIHw9IGNvbnRleHQuZ2V0VHlwZShwcm9wZXJ0eSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgdGFpbCA9IGNvbnRleHQuY3JlYXRl
UHJvcGVydHlMaXN0KG1fbGV4ZXItPmxhc3RMaW5lTnVtYmVyKCksIHByb3BlcnR5LCB0YWlsKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlLmNwcAppbmRleCA5MmUzMmM0
Li40NGRkNTJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJv
ZmlsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGUuY3Bw
CkBAIC0xMTEsNyArMTExLDcgQEAgdHlwZWRlZiBXVEY6OktleVZhbHVlUGFpcjxGdW5jdGlvbkNh
bGxIYXNoQ291bnQ6OlZhbHVlVHlwZSwgdW5zaWduZWQ+IE5hbWVDb3VudFAKIAogc3RhdGljIGlu
bGluZSBib29sIGZ1bmN0aW9uTmFtZUNvdW50UGFpckNvbXBhcmF0b3IoY29uc3QgTmFtZUNvdW50
UGFpciYgYSwgY29uc3QgTmFtZUNvdW50UGFpciYgYikKIHsKLSAgICByZXR1cm4gYS5zZWNvbmQg
PiBiLnNlY29uZDsKKyAgICByZXR1cm4gYS52YWx1ZSA+IGIudmFsdWU7CiB9CiAKIHZvaWQgUHJv
ZmlsZTo6ZGVidWdQcmludERhdGFTYW1wbGVTdHlsZSgpIGNvbnN0CkBAIC0xMjgsNyArMTI4LDcg
QEAgdm9pZCBQcm9maWxlOjpkZWJ1Z1ByaW50RGF0YVNhbXBsZVN0eWxlKCkgY29uc3QKIAogICAg
IHN0ZDo6c29ydChzb3J0ZWRGdW5jdGlvbnMuYmVnaW4oKSwgc29ydGVkRnVuY3Rpb25zLmVuZCgp
LCBmdW5jdGlvbk5hbWVDb3VudFBhaXJDb21wYXJhdG9yKTsKICAgICBmb3IgKE5hbWVDb3VudFBh
aXJWZWN0b3I6Oml0ZXJhdG9yIGl0ID0gc29ydGVkRnVuY3Rpb25zLmJlZ2luKCk7IGl0ICE9IHNv
cnRlZEZ1bmN0aW9ucy5lbmQoKTsgKytpdCkKLSAgICAgICAgZGF0YUxvZygiICAgICAgICAlLTEy
ZCVzXG4iLCAoKml0KS5zZWNvbmQsIFVTdHJpbmcoKCppdCkuZmlyc3QpLnV0ZjgoKS5kYXRhKCkp
OworICAgICAgICBkYXRhTG9nKCIgICAgICAgICUtMTJkJXNcbiIsICgqaXQpLnZhbHVlLCBVU3Ry
aW5nKCgqaXQpLmtleSkudXRmOCgpLmRhdGEoKSk7CiAKICAgICBkYXRhTG9nKCJcblNvcnQgYnkg
dG9wIG9mIHN0YWNrLCBzYW1lIGNvbGxhcHNlZCAod2hlbiA+PSA1KTpcbiIpOwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmNwcAppbmRleCAyMDc3MDkyLi45
MDNlODQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlm
aWVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmNw
cApAQCAtMTA4LDcgKzEwOCw3IEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gSWRlbnRpZmllcjo6
YWRkKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgY2hhciogYykKIAogICAgIGNvbnN0
IExpdGVyYWxJZGVudGlmaWVyVGFibGU6Oml0ZXJhdG9yJiBpdGVyID0gbGl0ZXJhbElkZW50aWZp
ZXJUYWJsZS5maW5kKGMpOwogICAgIGlmIChpdGVyICE9IGxpdGVyYWxJZGVudGlmaWVyVGFibGUu
ZW5kKCkpCi0gICAgICAgIHJldHVybiBpdGVyLT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBpdGVy
LT52YWx1ZTsKIAogICAgIEhhc2hTZXQ8U3RyaW5nSW1wbCo+OjpBZGRSZXN1bHQgYWRkUmVzdWx0
ID0gaWRlbnRpZmllclRhYmxlLmFkZDxjb25zdCBMQ2hhciosIElkZW50aWZpZXJDU3RyaW5nVHJh
bnNsYXRvcj4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KGMpKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5jcHAKaW5kZXggNTQxN2IwMC4u
YzczZDM0ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3Rp
dmF0aW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRp
b24uY3BwCkBAIC0xMjcsMTEgKzEyNywxMSBAQCB2b2lkIEpTQWN0aXZhdGlvbjo6Z2V0T3duUHJv
cGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcgogICAg
IEpTQWN0aXZhdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FjdGl2YXRpb24qPihvYmplY3Qp
OwogICAgIFN5bWJvbFRhYmxlOjpjb25zdF9pdGVyYXRvciBlbmQgPSB0aGlzT2JqZWN0LT5zeW1i
b2xUYWJsZSgpLmVuZCgpOwogICAgIGZvciAoU3ltYm9sVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
LSAgICAgICAgaWYgKGl0LT5zZWNvbmQuZ2V0QXR0cmlidXRlcygpICYgRG9udEVudW0gJiYgbW9k
ZSAhPSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKQorICAgICAgICBpZiAoaXQtPnZhbHVlLmdl
dEF0dHJpYnV0ZXMoKSAmIERvbnRFbnVtICYmIG1vZGUgIT0gSW5jbHVkZURvbnRFbnVtUHJvcGVy
dGllcykKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoaXQtPnNlY29uZC5nZXRJ
bmRleCgpID49IHRoaXNPYmplY3QtPm1fbnVtQ2FwdHVyZWRWYXJzKQorICAgICAgICBpZiAoaXQt
PnZhbHVlLmdldEluZGV4KCkgPj0gdGhpc09iamVjdC0+bV9udW1DYXB0dXJlZFZhcnMpCiAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihl
eGVjLCBpdC0+Zmlyc3QuZ2V0KCkpKTsKKyAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRp
ZmllcihleGVjLCBpdC0+a2V5LmdldCgpKSk7CiAgICAgfQogICAgIC8vIFNraXAgdGhlIEpTVmFy
aWFibGVPYmplY3QgaW1wbGVtZW50YXRpb24gb2YgZ2V0T3duUHJvcGVydHlOYW1lcwogICAgIEpT
T2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFt
ZXMsIG1vZGUpOwpAQCAtMTQ0LDcgKzE0NCw3IEBAIGlubGluZSBib29sIEpTQWN0aXZhdGlvbjo6
c3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRlcyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsCiAg
ICAgU3ltYm9sVGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSBzeW1ib2xUYWJsZSgpLmZpbmQocHJvcGVy
dHlOYW1lLnB1YmxpY05hbWUoKSk7CiAgICAgaWYgKGl0ZXIgPT0gc3ltYm9sVGFibGUoKS5lbmQo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFN5bWJvbFRhYmxlRW50cnkmIGVudHJ5ID0g
aXRlci0+c2Vjb25kOworICAgIFN5bWJvbFRhYmxlRW50cnkmIGVudHJ5ID0gaXRlci0+dmFsdWU7
CiAgICAgQVNTRVJUKCFlbnRyeS5pc051bGwoKSk7CiAgICAgaWYgKGVudHJ5LmdldEluZGV4KCkg
Pj0gbV9udW1DYXB0dXJlZFZhcnMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKaW5kZXggNzIxODYwNC4uZjU4NDhkOSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKQEAgLTIwNCw3ICsyMDQs
NyBAQCBpbmxpbmUgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6QWRkUmVzdWx0IFNwYXJzZUFycmF5VmFs
dWVNYXA6OmFkZChKU0FycmF5KiBhcnJheSwgdQogaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlWYWx1
ZU1hcDo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJheSogYXJyYXksIHVuc2lnbmVkIGksIEpT
VmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCiB7CiAgICAgQWRkUmVzdWx0IHJlc3VsdCA9
IGFkZChhcnJheSwgaSk7Ci0gICAgU3BhcnNlQXJyYXlFbnRyeSYgZW50cnkgPSByZXN1bHQuaXRl
cmF0b3ItPnNlY29uZDsKKyAgICBTcGFyc2VBcnJheUVudHJ5JiBlbnRyeSA9IHJlc3VsdC5pdGVy
YXRvci0+dmFsdWU7CiAKICAgICAvLyBUbyBzYXZlIGEgc2VwYXJhdGUgZmluZCAmIGFkZCwgd2Ug
Zmlyc3QgYWx3YXlzIGFkZCB0byB0aGUgc3BhcnNlIG1hcC4KICAgICAvLyBJbiB0aGUgdW5jb21t
b24gY2FzZSB0aGF0IHRoaXMgaXMgYSBuZXcgcHJvcGVydHksIGFuZCB0aGUgYXJyYXkgaXMgbm90
CkBAIC0yNDcsNyArMjQ3LDcgQEAgaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6cHV0
KEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJheSogYXJyYXksIHVuc2lnbmVkIGkKIGlubGluZSBib29s
IFNwYXJzZUFycmF5VmFsdWVNYXA6OnB1dERpcmVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTQXJyYXkq
IGFycmF5LCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQogewog
ICAgIEFkZFJlc3VsdCByZXN1bHQgPSBhZGQoYXJyYXksIGkpOwotICAgIFNwYXJzZUFycmF5RW50
cnkmIGVudHJ5ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgU3BhcnNlQXJyYXlFbnRy
eSYgZW50cnkgPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogCiAgICAgLy8gVG8gc2F2ZSBhIHNl
cGFyYXRlIGZpbmQgJiBhZGQsIHdlIGZpcnN0IGFsd2F5cyBhZGQgdG8gdGhlIHNwYXJzZSBtYXAu
CiAgICAgLy8gSW4gdGhlIHVuY29tbW9uIGNhc2UgdGhhdCB0aGlzIGlzIGEgbmV3IHByb3BlcnR5
LCBhbmQgdGhlIGFycmF5IGlzIG5vdApAQCAtMzEzLDcgKzMxMyw3IEBAIGlubGluZSB2b2lkIFNw
YXJzZUFycmF5VmFsdWVNYXA6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgaXRlcmF0b3IgZW5kID0gbV9tYXAuZW5kKCk7CiAgICAgZm9yIChpdGVyYXRvciBpdCA9
IG1fbWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgdmlzaXRvci5hcHBlbmQo
Jml0LT5zZWNvbmQpOworICAgICAgICB2aXNpdG9yLmFwcGVuZCgmaXQtPnZhbHVlKTsKIH0KIAog
dm9pZCBKU0FycmF5OjphbGxvY2F0ZVNwYXJzZU1hcChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEp
CkBAIC0zNDksNyArMzQ5LDcgQEAgdm9pZCBKU0FycmF5OjplbnRlckRpY3Rpb25hcnlNb2RlKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKICAgICAgICAgLy8gVGhpcyB3aWxsIGFsd2F5cyBiZSBh
IG5ldyBlbnRyeSBpbiB0aGUgbWFwLCBzbyBubyBuZWVkIHRvIGNoZWNrIHdlIGNhbiB3cml0ZSwK
ICAgICAgICAgLy8gYW5kIGF0dHJpYnV0ZXMgYXJlIGRlZmF1bHQgc28gbm8gbmVlZCB0byBzZXQg
dGhlbS4KICAgICAgICAgaWYgKHZhbHVlKQotICAgICAgICAgICAgbWFwLT5hZGQodGhpcywgaSku
aXRlcmF0b3ItPnNlY29uZC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgICAgICAg
ICAgbWFwLT5hZGQodGhpcywgaSkuaXRlcmF0b3ItPnZhbHVlLnNldChnbG9iYWxEYXRhLCB0aGlz
LCB2YWx1ZSk7CiAgICAgfQogCiAgICAgdm9pZCogbmV3UmF3U3RvcmFnZSA9IDA7CkBAIC00MjUs
NyArNDI1LDcgQEAgYm9vbCBKU0FycmF5OjpkZWZpbmVPd25OdW1lcmljUHJvcGVydHkoRXhlY1N0
YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHkKIAogICAgIC8vIDEuIExldCBjdXJy
ZW50IGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tHZXRPd25Qcm9wZXJ0eV1dIGludGVy
bmFsIG1ldGhvZCBvZiBPIHdpdGggcHJvcGVydHkgbmFtZSBQLgogICAgIFNwYXJzZUFycmF5VmFs
dWVNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtYXAtPmFkZCh0aGlzLCBpbmRleCk7Ci0gICAgU3Bh
cnNlQXJyYXlFbnRyeSogZW50cnlJbk1hcCA9ICZyZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAg
ICBTcGFyc2VBcnJheUVudHJ5KiBlbnRyeUluTWFwID0gJnJlc3VsdC5pdGVyYXRvci0+dmFsdWU7
CiAKICAgICAvLyAyLiBMZXQgZXh0ZW5zaWJsZSBiZSB0aGUgdmFsdWUgb2YgdGhlIFtbRXh0ZW5z
aWJsZV1dIGludGVybmFsIHByb3BlcnR5IG9mIE8uCiAgICAgLy8gMy4gSWYgY3VycmVudCBpcyB1
bmRlZmluZWQgYW5kIGV4dGVuc2libGUgaXMgZmFsc2UsIHRoZW4gUmVqZWN0LgpAQCAtNjU2LDcg
KzY1Niw3IEBAIGJvb2wgSlNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0NlbGwq
IGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQKICAgICB9IGVsc2UgaWYgKFNwYXJzZUFy
cmF5VmFsdWVNYXAqIG1hcCA9IHRoaXNPYmplY3QtPm1fc3BhcnNlVmFsdWVNYXApIHsKICAgICAg
ICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAtPmZpbmQoaSk7CiAgICAg
ICAgIGlmIChpdCAhPSBtYXAtPm5vdEZvdW5kKCkpIHsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQu
Z2V0KHNsb3QpOworICAgICAgICAgICAgaXQtPnZhbHVlLmdldChzbG90KTsKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQpAQCAtNzAyLDcgKzcwMiw3IEBAIGJvb2wg
SlNBcnJheTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVyCiAgICAgICAgIH0gZWxzZSBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1h
cCogbWFwID0gdGhpc09iamVjdC0+bV9zcGFyc2VWYWx1ZU1hcCkgewogICAgICAgICAgICAgU3Bh
cnNlQXJyYXlWYWx1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAtPmZpbmQoaSk7CiAgICAgICAgICAg
ICBpZiAoaXQgIT0gbWFwLT5ub3RGb3VuZCgpKSB7Ci0gICAgICAgICAgICAgICAgaXQtPnNlY29u
ZC5nZXQoZGVzY3JpcHRvcik7CisgICAgICAgICAgICAgICAgaXQtPnZhbHVlLmdldChkZXNjcmlw
dG9yKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQpAQCAtODM0LDcgKzgzNCw3IEBAIHZvaWQgSlNBcnJheTo6cHV0QnlJbmRleEJleW9uZFZl
Y3Rvckxlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUKICAgICBXcml0
ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvciA9IHN0b3JhZ2UtPm1fdmVjdG9yOwogICAgIFNwYXJz
ZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7CiAgICAgZm9y
IChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KQotICAgICAgICB2ZWN0b3JbaXQtPmZpcnN0XS5zZXQoZ2xvYmFsRGF0
YSwgdGhpcywgaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCkpOworICAgICAgICB2ZWN0b3Jb
aXQtPmtleV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIGl0LT52YWx1ZS5nZXROb25TcGFyc2VNb2Rl
KCkpOwogICAgIGRlYWxsb2NhdGVTcGFyc2VNYXAoKTsKIAogICAgIC8vIFN0b3JlIHRoZSBuZXcg
cHJvcGVydHkgaW50byB0aGUgdmVjdG9yLgpAQCAtOTA0LDcgKzkwNCw3IEBAIGJvb2wgSlNBcnJh
eTo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCB1bnNp
Z25lZCBpLCBKU1ZhCiAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiB2ZWN0b3IgPSBzdG9yYWdl
LT5tX3ZlY3RvcjsKICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQg
PSBtYXAtPmVuZCgpOwogICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgdmVjdG9yW2l0
LT5maXJzdF0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9k
ZSgpKTsKKyAgICAgICAgdmVjdG9yW2l0LT5rZXldLnNldChnbG9iYWxEYXRhLCB0aGlzLCBpdC0+
dmFsdWUuZ2V0Tm9uU3BhcnNlTW9kZSgpKTsKICAgICBkZWFsbG9jYXRlU3BhcnNlTWFwKCk7CiAK
ICAgICAvLyBTdG9yZSB0aGUgbmV3IHByb3BlcnR5IGludG8gdGhlIHZlY3Rvci4KQEAgLTk0Nyw3
ICs5NDcsNyBAQCBib29sIEpTQXJyYXk6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqIGNl
bGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSkKICAgICB9IGVsc2UgaWYgKFNwYXJzZUFy
cmF5VmFsdWVNYXAqIG1hcCA9IHRoaXNPYmplY3QtPm1fc3BhcnNlVmFsdWVNYXApIHsKICAgICAg
ICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAtPmZpbmQoaSk7CiAgICAg
ICAgIGlmIChpdCAhPSBtYXAtPm5vdEZvdW5kKCkpIHsKLSAgICAgICAgICAgIGlmIChpdC0+c2Vj
b25kLmF0dHJpYnV0ZXMgJiBEb250RGVsZXRlKQorICAgICAgICAgICAgaWYgKGl0LT52YWx1ZS5h
dHRyaWJ1dGVzICYgRG9udERlbGV0ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgICAgICBtYXAtPnJlbW92ZShpdCk7CiAgICAgICAgIH0KQEAgLTk4NSw4ICs5ODUsOCBA
QCB2b2lkIEpTQXJyYXk6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbQogICAgICAgICAKICAgICAgICAgU3BhcnNlQXJyYXlW
YWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKICAgICAgICAgZm9yIChT
cGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Q
cm9wZXJ0aWVzIHx8ICEoaXQtPnNlY29uZC5hdHRyaWJ1dGVzICYgRG9udEVudW0pKQotICAgICAg
ICAgICAgICAgIGtleXMuYXBwZW5kKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpdC0+Zmlyc3QpKTsK
KyAgICAgICAgICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMgfHwgIShp
dC0+dmFsdWUuYXR0cmlidXRlcyAmIERvbnRFbnVtKSkKKyAgICAgICAgICAgICAgICBrZXlzLmFw
cGVuZChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaXQtPmtleSkpOwogICAgICAgICB9CiAKICAgICAg
ICAgcXNvcnQoa2V5cy5iZWdpbigpLCBrZXlzLnNpemUoKSwgc2l6ZW9mKHVuc2lnbmVkKSwgY29t
cGFyZUtleXNGb3JRU29ydCk7CkBAIC0xMTc5LDcgKzExNzksNyBAQCBib29sIEpTQXJyYXk6OnNl
dExlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIG5ld0xlbmd0aCwgYm9vbCB0aHJvd0V4
Y2VwdGlvbgogICAgICAgICAgICAga2V5cy5yZXNlcnZlQ2FwYWNpdHkobWluKG1hcC0+c2l6ZSgp
LCBzdGF0aWNfY2FzdDxzaXplX3Q+KGxlbmd0aCAtIG5ld0xlbmd0aCkpKTsKICAgICAgICAgICAg
IFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7CiAg
ICAgICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBpbmRleCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihpdC0+Zmlyc3QpOworICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGl0LT5rZXkpOwogICAg
ICAgICAgICAgICAgIGlmIChpbmRleCA8IGxlbmd0aCAmJiBpbmRleCA+PSBuZXdMZW5ndGgpCiAg
ICAgICAgICAgICAgICAgICAgIGtleXMuYXBwZW5kKGluZGV4KTsKICAgICAgICAgICAgIH0KQEAg
LTExOTQsNyArMTE5NCw3IEBAIGJvb2wgSlNBcnJheTo6c2V0TGVuZ3RoKEV4ZWNTdGF0ZSogZXhl
YywgdW5zaWduZWQgbmV3TGVuZ3RoLCBib29sIHRocm93RXhjZXB0aW9uCiAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGluZGV4ID0ga2V5c1stLWldOwogICAgICAgICAgICAgICAgICAgICBT
cGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+ZmluZChpbmRleCk7CiAgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVChpdCAhPSBtYXAtPm5vdEZvdW5kKCkpOwotICAgICAgICAg
ICAgICAgICAgICBpZiAoaXQtPnNlY29uZC5hdHRyaWJ1dGVzICYgRG9udERlbGV0ZSkgeworICAg
ICAgICAgICAgICAgICAgICBpZiAoaXQtPnZhbHVlLmF0dHJpYnV0ZXMgJiBEb250RGVsZXRlKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlLT5tX2xlbmd0aCA9IGluZGV4ICsgMTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRp
b24sICJVbmFibGUgdG8gZGVsZXRlIHByb3BlcnR5LiIpOwogICAgICAgICAgICAgICAgICAgICB9
CkBAIC0xNjY5LDcgKzE2NjksNyBAQCB2b2lkIEpTQXJyYXk6OnNvcnQoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIGNvbXBhcmVGdW5jdGlvbiwgQ2FsbFR5cGUgY2FsbFR5cGUsCiAKICAgICAgICAg
U3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKICAg
ICAgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICB0cmVlLmFic3RyYWN0b3Io
KS5tX25vZGVzW251bURlZmluZWRdLnZhbHVlID0gaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2Rl
KCk7CisgICAgICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzW251bURlZmluZWRdLnZh
bHVlID0gaXQtPnZhbHVlLmdldE5vblNwYXJzZU1vZGUoKTsKICAgICAgICAgICAgIHRyZWUuaW5z
ZXJ0KG51bURlZmluZWQpOwogICAgICAgICAgICAgKytudW1EZWZpbmVkOwogICAgICAgICB9CkBA
IC0xNzg0LDcgKzE3ODQsNyBAQCB1bnNpZ25lZCBKU0FycmF5Ojpjb21wYWN0Rm9yU29ydGluZyhK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiAKICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKICAgICAgICAgZm9yIChTcGFyc2VBcnJh
eVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KQotICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbbnVtRGVmaW5lZCsrXS5zZXRXaXRo
b3V0V3JpdGVCYXJyaWVyKGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpKTsKKyAgICAgICAg
ICAgIHN0b3JhZ2UtPm1fdmVjdG9yW251bURlZmluZWQrK10uc2V0V2l0aG91dFdyaXRlQmFycmll
cihpdC0+dmFsdWUuZ2V0Tm9uU3BhcnNlTW9kZSgpKTsKIAogICAgICAgICBkZWFsbG9jYXRlU3Bh
cnNlTWFwKCk7CiAgICAgfQpAQCAtMTgzMSwxMyArMTgzMSwxMyBAQCB2b2lkIEpTQXJyYXk6OmNo
ZWNrQ29uc2lzdGVuY3koQ29uc2lzdGVuY3lDaGVja1R5cGUgdHlwZSkKICAgICBpZiAobV9zcGFy
c2VWYWx1ZU1hcCkgewogICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRv
ciBlbmQgPSBtX3NwYXJzZVZhbHVlTWFwLT5lbmQoKTsKICAgICAgICAgZm9yIChTcGFyc2VBcnJh
eVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fc3BhcnNlVmFsdWVNYXAtPmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBpdC0+Zmly
c3Q7CisgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGl0LT5rZXk7CiAgICAgICAgICAgICBB
U1NFUlQoaW5kZXggPCBzdG9yYWdlLT5tX2xlbmd0aCk7CiAgICAgICAgICAgICBBU1NFUlQoaW5k
ZXggPj0gbV92ZWN0b3JMZW5ndGgpOwogICAgICAgICAgICAgQVNTRVJUKGluZGV4IDw9IE1BWF9B
UlJBWV9JTkRFWCk7Ci0gICAgICAgICAgICBBU1NFUlQoaXQtPnNlY29uZCk7CisgICAgICAgICAg
ICBBU1NFUlQoaXQtPnZhbHVlKTsKICAgICAgICAgICAgIGlmICh0eXBlICE9IERlc3RydWN0b3JD
b25zaXN0ZW5jeUNoZWNrKQotICAgICAgICAgICAgICAgIGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNl
TW9kZSgpLmlzVW5kZWZpbmVkKCk7IC8vIExpa2VseSB0byBjcmFzaCBpZiB0aGUgb2JqZWN0IHdh
cyBkZWFsbG9jYXRlZC4KKyAgICAgICAgICAgICAgICBpdC0+dmFsdWUuZ2V0Tm9uU3BhcnNlTW9k
ZSgpLmlzVW5kZWZpbmVkKCk7IC8vIExpa2VseSB0byBjcmFzaCBpZiB0aGUgb2JqZWN0IHdhcyBk
ZWFsbG9jYXRlZC4KICAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAKaW5kZXggOTI3YWQyNS4u
Y2YxYTQ0YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1i
b2xUYWJsZU9iamVjdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
eW1ib2xUYWJsZU9iamVjdC5jcHAKQEAgLTU1LDggKzU1LDggQEAgdm9pZCBKU1N5bWJvbFRhYmxl
T2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSog
ZXhlYywKICAgICBKU1N5bWJvbFRhYmxlT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU3lt
Ym9sVGFibGVPYmplY3QqPihvYmplY3QpOwogICAgIFN5bWJvbFRhYmxlOjpjb25zdF9pdGVyYXRv
ciBlbmQgPSB0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgpLmVuZCgpOwogICAgIGZvciAoU3ltYm9s
VGFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKCEoaXQtPnNlY29uZC5nZXRBdHRy
aWJ1dGVzKCkgJiBEb250RW51bSkgfHwgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGll
cykpCi0gICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyKGV4ZWMsIGl0LT5m
aXJzdC5nZXQoKSkpOworICAgICAgICBpZiAoIShpdC0+dmFsdWUuZ2V0QXR0cmlidXRlcygpICYg
RG9udEVudW0pIHx8IChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpKQorICAgICAg
ICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihleGVjLCBpdC0+a2V5LmdldCgpKSk7
CiAgICAgfQogICAgIAogICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmpl
Y3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oCmluZGV4IDJiYmUyMWQuLmRmMTUy
NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFi
bGVPYmplY3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRh
YmxlT2JqZWN0LmgKQEAgLTc2LDcgKzc2LDcgQEAgaW5saW5lIGJvb2wgc3ltYm9sVGFibGVHZXQo
CiAgICAgU3ltYm9sVGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSBzeW1ib2xUYWJsZS5maW5kKHByb3Bl
cnR5TmFtZS5wdWJsaWNOYW1lKCkpOwogICAgIGlmIChpdGVyID09IHN5bWJvbFRhYmxlLmVuZCgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgU3ltYm9sVGFibGVFbnRyeTo6RmFzdCBlbnRy
eSA9IGl0ZXItPnNlY29uZDsKKyAgICBTeW1ib2xUYWJsZUVudHJ5OjpGYXN0IGVudHJ5ID0gaXRl
ci0+dmFsdWU7CiAgICAgQVNTRVJUKCFlbnRyeS5pc051bGwoKSk7CiAgICAgc2xvdC5zZXRWYWx1
ZShvYmplY3QtPnJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuZ2V0KCkpOwogICAgIHJldHVy
biB0cnVlOwpAQCAtOTAsNyArOTAsNyBAQCBpbmxpbmUgYm9vbCBzeW1ib2xUYWJsZUdldCgKICAg
ICBTeW1ib2xUYWJsZTo6aXRlcmF0b3IgaXRlciA9IHN5bWJvbFRhYmxlLmZpbmQocHJvcGVydHlO
YW1lLnB1YmxpY05hbWUoKSk7CiAgICAgaWYgKGl0ZXIgPT0gc3ltYm9sVGFibGUuZW5kKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBTeW1ib2xUYWJsZUVudHJ5OjpGYXN0IGVudHJ5ID0g
aXRlci0+c2Vjb25kOworICAgIFN5bWJvbFRhYmxlRW50cnk6OkZhc3QgZW50cnkgPSBpdGVyLT52
YWx1ZTsKICAgICBBU1NFUlQoIWVudHJ5LmlzTnVsbCgpKTsKICAgICBkZXNjcmlwdG9yLnNldERl
c2NyaXB0b3IoCiAgICAgICAgIG9iamVjdC0+cmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKS5n
ZXQoKSwgZW50cnkuZ2V0QXR0cmlidXRlcygpIHwgRG9udERlbGV0ZSk7CkBAIC0xMDYsNyArMTA2
LDcgQEAgaW5saW5lIGJvb2wgc3ltYm9sVGFibGVHZXQoCiAgICAgU3ltYm9sVGFibGU6Oml0ZXJh
dG9yIGl0ZXIgPSBzeW1ib2xUYWJsZS5maW5kKHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCkpOwog
ICAgIGlmIChpdGVyID09IHN5bWJvbFRhYmxlLmVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgU3ltYm9sVGFibGVFbnRyeTo6RmFzdCBlbnRyeSA9IGl0ZXItPnNlY29uZDsKKyAgICBT
eW1ib2xUYWJsZUVudHJ5OjpGYXN0IGVudHJ5ID0gaXRlci0+dmFsdWU7CiAgICAgQVNTRVJUKCFl
bnRyeS5pc051bGwoKSk7CiAgICAgc2xvdC5zZXRWYWx1ZShvYmplY3QtPnJlZ2lzdGVyQXQoZW50
cnkuZ2V0SW5kZXgoKSkuZ2V0KCkpOwogICAgIHNsb3RJc1dyaXRlYWJsZSA9ICFlbnRyeS5pc1Jl
YWRPbmx5KCk7CkBAIC0xMjYsNyArMTI2LDcgQEAgaW5saW5lIGJvb2wgc3ltYm9sVGFibGVQdXQo
CiAgICAgaWYgKGl0ZXIgPT0gc3ltYm9sVGFibGUuZW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBib29sIHdhc0ZhdDsKLSAgICBTeW1ib2xUYWJsZUVudHJ5OjpGYXN0IGZhc3RFbnRy
eSA9IGl0ZXItPnNlY29uZC5nZXRGYXN0KHdhc0ZhdCk7CisgICAgU3ltYm9sVGFibGVFbnRyeTo6
RmFzdCBmYXN0RW50cnkgPSBpdGVyLT52YWx1ZS5nZXRGYXN0KHdhc0ZhdCk7CiAgICAgQVNTRVJU
KCFmYXN0RW50cnkuaXNOdWxsKCkpOwogICAgIGlmIChmYXN0RW50cnkuaXNSZWFkT25seSgpKSB7
CiAgICAgICAgIGlmIChzaG91bGRUaHJvdykKQEAgLTEzNCw3ICsxMzQsNyBAQCBpbmxpbmUgYm9v
bCBzeW1ib2xUYWJsZVB1dCgKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGlmIChV
TkxJS0VMWSh3YXNGYXQpKQotICAgICAgICBpdGVyLT5zZWNvbmQubm90aWZ5V3JpdGUoKTsKKyAg
ICAgICAgaXRlci0+dmFsdWUubm90aWZ5V3JpdGUoKTsKICAgICBvYmplY3QtPnJlZ2lzdGVyQXQo
ZmFzdEVudHJ5LmdldEluZGV4KCkpLnNldChnbG9iYWxEYXRhLCBvYmplY3QsIHZhbHVlKTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTE0OSw3ICsxNDksNyBAQCBpbmxpbmUgYm9vbCBzeW1ib2xU
YWJsZVB1dFdpdGhBdHRyaWJ1dGVzKAogICAgIFN5bWJvbFRhYmxlOjppdGVyYXRvciBpdGVyID0g
b2JqZWN0LT5zeW1ib2xUYWJsZSgpLmZpbmQocHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSk7CiAg
ICAgaWYgKGl0ZXIgPT0gb2JqZWN0LT5zeW1ib2xUYWJsZSgpLmVuZCgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgU3ltYm9sVGFibGVFbnRyeSYgZW50cnkgPSBpdGVyLT5zZWNvbmQ7Cisg
ICAgU3ltYm9sVGFibGVFbnRyeSYgZW50cnkgPSBpdGVyLT52YWx1ZTsKICAgICBBU1NFUlQoIWVu
dHJ5LmlzTnVsbCgpKTsKICAgICBlbnRyeS5ub3RpZnlXcml0ZSgpOwogICAgIGVudHJ5LnNldEF0
dHJpYnV0ZXMoYXR0cmlidXRlcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9SZWdFeHBDYWNoZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9S
ZWdFeHBDYWNoZS5jcHAKaW5kZXggNTNhMTNhNC4uYWI0Zjk4NyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGUuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlLmNwcApAQCAtODAsNyArODAsNyBAQCB2b2lk
IFJlZ0V4cENhY2hlOjppbnZhbGlkYXRlQ29kZSgpCiAKICAgICBSZWdFeHBDYWNoZU1hcDo6aXRl
cmF0b3IgZW5kID0gbV93ZWFrQ2FjaGUuZW5kKCk7CiAgICAgZm9yIChSZWdFeHBDYWNoZU1hcDo6
aXRlcmF0b3IgaXQgPSBtX3dlYWtDYWNoZS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAg
ICAgICAgUmVnRXhwKiByZWdFeHAgPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICBSZWdFeHAq
IHJlZ0V4cCA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgaWYgKCFyZWdFeHApIC8vIFNraXAg
em9tYmllcy4KICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICByZWdFeHAtPmludmFsaWRh
dGVDb2RlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFr
R0NNYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ01hcC5oCmluZGV4
IDY5MjYxNjUuLjUyZTVlMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1dlYWtHQ01hcC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtH
Q01hcC5oCkBAIC02Myw3ICs2Myw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHR5cGVuYW1l
IE1hcFR5cGU6Oml0ZXJhdG9yIGVuZCA9IG1fbWFwLmVuZCgpOwogICAgICAgICBmb3IgKHR5cGVu
YW1lIE1hcFR5cGU6Oml0ZXJhdG9yIHB0ciA9IG1fbWFwLmJlZ2luKCk7IHB0ciAhPSBlbmQ7ICsr
cHRyKQotICAgICAgICAgICAgV2Vha1NldDo6ZGVhbGxvY2F0ZShwdHItPnNlY29uZCk7CisgICAg
ICAgICAgICBXZWFrU2V0OjpkZWFsbG9jYXRlKHB0ci0+dmFsdWUpOwogICAgICAgICBtX21hcC5j
bGVhcigpOwogICAgIH0KIApAQCAtODAsOCArODAsOCBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VS
VF9VTlVTRUQoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5hcGlMb2NrKCkuY3VycmVudFRocmVhZElz
SG9sZGluZ0xvY2soKSk7CiAgICAgICAgIHR5cGVuYW1lIE1hcFR5cGU6OkFkZFJlc3VsdCByZXN1
bHQgPSBtX21hcC5hZGQoa2V5LCAwKTsKICAgICAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkK
LSAgICAgICAgICAgIFdlYWtTZXQ6OmRlYWxsb2NhdGUocmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQp
OwotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IFdlYWtTZXQ6OmFsbG9jYXRlKHZh
bHVlLCB0aGlzLCBGaW5hbGl6ZXJDYWxsYmFjazo6ZmluYWxpemVyQ29udGV4dEZvcihrZXkpKTsK
KyAgICAgICAgICAgIFdlYWtTZXQ6OmRlYWxsb2NhdGUocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7
CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBXZWFrU2V0OjphbGxvY2F0ZSh2YWx1
ZSwgdGhpcywgRmluYWxpemVyQ2FsbGJhY2s6OmZpbmFsaXplckNvbnRleHRGb3Ioa2V5KSk7CiAg
ICAgfQogCiAgICAgdm9pZCByZW1vdmUoY29uc3QgS2V5VHlwZSYga2V5KQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1Byb2ZpbGVUcmVlTm9kZS5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rvb2xzL1Byb2ZpbGVUcmVlTm9kZS5oCmluZGV4IDdiNTFlZmIuLjdiNWE5
NWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Qcm9maWxlVHJlZU5v
ZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvUHJvZmlsZVRyZWVOb2RlLmgK
QEAgLTUxLDcgKzUxLDcgQEAgcHVibGljOgogICAgIAogICAgICAgICBQcm9maWxlVHJlZU5vZGUg
bmV3RW50cnk7CiAgICAgICAgIE1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fY2hpbGRyZW4tPmFk
ZChTdHJpbmcobmFtZSksIG5ld0VudHJ5KTsKLSAgICAgICAgUHJvZmlsZVRyZWVOb2RlKiBjaGls
ZEluTWFwID0gJnJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICBQcm9maWxlVHJlZU5v
ZGUqIGNoaWxkSW5NYXAgPSAmcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgKytjaGls
ZEluTWFwLT5tX2NvdW50OwogICAgICAgICByZXR1cm4gY2hpbGRJbk1hcDsKICAgICB9CkBAIC03
Miw3ICs3Miw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB1aW50
NjRfdCBjaGlsZENvdW50ID0gMDsKICAgICAgICAgZm9yIChNYXA6Oml0ZXJhdG9yIGl0ID0gbV9j
aGlsZHJlbi0+YmVnaW4oKTsgaXQgIT0gbV9jaGlsZHJlbi0+ZW5kKCk7ICsraXQpCi0gICAgICAg
ICAgICBjaGlsZENvdW50ICs9IGl0LT5zZWNvbmQuY291bnQoKTsKKyAgICAgICAgICAgIGNoaWxk
Q291bnQgKz0gaXQtPnZhbHVlLmNvdW50KCk7CiAgICAgICAgIHJldHVybiBjaGlsZENvdW50Owog
ICAgIH0KICAgICAKQEAgLTk3LDE5ICs5NywxOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGluZGVudDsgKytpKQogICAgICAgICAgICAgICAgIGRhdGFM
b2coIiAgICAiKTsKICAgICAgICAgICAgIGRhdGFMb2coIiUgOGxsZDogJXMgKCVsbGQgc3RhY2sg
dG9wKVxuIiwKLSAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KGVudHJ5LT5z
ZWNvbmQuY291bnQoKSksCi0gICAgICAgICAgICAgICAgZW50cnktPmZpcnN0LnV0ZjgoKS5kYXRh
KCksCi0gICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihlbnRyeS0+c2Vjb25k
LmNvdW50KCkgLSBlbnRyeS0+c2Vjb25kLmNoaWxkQ291bnQoKSkpOworICAgICAgICAgICAgICAg
IHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oZW50cnktPnZhbHVlLmNvdW50KCkpLAorICAgICAgICAg
ICAgICAgIGVudHJ5LT5rZXkudXRmOCgpLmRhdGEoKSwKKyAgICAgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxsb25nIGxvbmc+KGVudHJ5LT52YWx1ZS5jb3VudCgpIC0gZW50cnktPnZhbHVlLmNoaWxk
Q291bnQoKSkpOwogCiAgICAgICAgICAgICAvLyBSZWN1cnNpdmVseSBkdW1wIHRoZSBjaGlsZCBu
b2Rlcy4KLSAgICAgICAgICAgIGVudHJ5LT5zZWNvbmQuZHVtcEludGVybmFsKGluZGVudCArIDEp
OworICAgICAgICAgICAgZW50cnktPnZhbHVlLmR1bXBJbnRlcm5hbChpbmRlbnQgKyAxKTsKICAg
ICAgICAgfQogICAgIH0KIAogICAgIHN0YXRpYyBpbnQgY29tcGFyZUVudHJpZXMoY29uc3Qgdm9p
ZCogYSwgY29uc3Qgdm9pZCogYikKICAgICB7Ci0gICAgICAgIHVpbnQ2NF90IGRhID0gKCpzdGF0
aWNfY2FzdDxNYXBFbnRyeSogY29uc3QgKj4oYSkpLT5zZWNvbmQuY291bnQoKTsKLSAgICAgICAg
dWludDY0X3QgZGIgPSAoKnN0YXRpY19jYXN0PE1hcEVudHJ5KiBjb25zdCAqPihiKSktPnNlY29u
ZC5jb3VudCgpOworICAgICAgICB1aW50NjRfdCBkYSA9ICgqc3RhdGljX2Nhc3Q8TWFwRW50cnkq
IGNvbnN0ICo+KGEpKS0+dmFsdWUuY291bnQoKTsKKyAgICAgICAgdWludDY0X3QgZGIgPSAoKnN0
YXRpY19jYXN0PE1hcEVudHJ5KiBjb25zdCAqPihiKSktPnZhbHVlLmNvdW50KCk7CiAgICAgICAg
IHJldHVybiAoZGEgPCBkYikgLSAoZGEgPiBkYik7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9IYXNoQ291bnRlZFNldC5oIGIvU291cmNlL1dURi93dGYvSGFzaENvdW50ZWRT
ZXQuaAppbmRleCBlZjg5YmRiLi5lZmY0YTI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9I
YXNoQ291bnRlZFNldC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0hhc2hDb3VudGVkU2V0LmgKQEAg
LTE1NCw3ICsxNTQsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICBpbmxpbmUgdHlwZW5hbWUgSGFz
aENvdW50ZWRTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OkFkZFJlc3VsdCBIYXNo
Q291bnRlZFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6YWRkKGNvbnN0IFZhbHVl
VHlwZSAmdmFsdWUpCiAgICAgewogICAgICAgICBBZGRSZXN1bHQgcmVzdWx0ID0gbV9pbXBsLmFk
ZCh2YWx1ZSwgMCk7Ci0gICAgICAgICsrcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAg
ICsrcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9
CiAgICAgCkBAIC0xNzAsMTEgKzE3MCwxMSBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgaWYg
KGl0ID09IGVuZCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIHVuc2ln
bmVkIG9sZFZhbCA9IGl0LT5zZWNvbmQ7CisgICAgICAgIHVuc2lnbmVkIG9sZFZhbCA9IGl0LT52
YWx1ZTsKICAgICAgICAgQVNTRVJUKG9sZFZhbCk7CiAgICAgICAgIHVuc2lnbmVkIG5ld1ZhbCA9
IG9sZFZhbCAtIDE7CiAgICAgICAgIGlmIChuZXdWYWwpIHsKLSAgICAgICAgICAgIGl0LT5zZWNv
bmQgPSBuZXdWYWw7CisgICAgICAgICAgICBpdC0+dmFsdWUgPSBuZXdWYWw7CiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIApAQCAtMjI2LDcgKzIyNiw3IEBAIG5hbWVzcGFj
ZSBXVEYgewogICAgICAgICBpdGVyYXRvciBpdCA9IGNvbGxlY3Rpb24uYmVnaW4oKTsKICAgICAg
ICAgaXRlcmF0b3IgZW5kID0gY29sbGVjdGlvbi5lbmQoKTsKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaXQgIT0gZW5kOyArK2l0LCArK2kpCi0gICAgICAgICAgICB2ZWN0b3JbaV0gPSAo
Kml0KS5maXJzdDsKKyAgICAgICAgICAgIHZlY3RvcltpXSA9ICgqaXQpLmtleTsKICAgICB9CiAK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvSGFzaEl0ZXJhdG9ycy5oIGIvU291cmNlL1dU
Ri93dGYvSGFzaEl0ZXJhdG9ycy5oCmluZGV4IDYzOWZmNzIuLjNhODQxOGEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvd3RmL0hhc2hJdGVyYXRvcnMuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9IYXNo
SXRlcmF0b3JzLmgKQEAgLTkxLDcgKzkxLDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgcHVibGlj
OgogICAgICAgICBIYXNoVGFibGVDb25zdEtleXNJdGVyYXRvcihjb25zdCBDb25zdEl0ZXJhdG9y
JiBpbXBsKSA6IG1faW1wbChpbXBsKSB7fQogICAgICAgICAKLSAgICAgICAgY29uc3QgS2V5VHlw
ZSogZ2V0KCkgY29uc3QgeyByZXR1cm4gJihtX2ltcGwuZ2V0KCktPmZpcnN0KTsgfQorICAgICAg
ICBjb25zdCBLZXlUeXBlKiBnZXQoKSBjb25zdCB7IHJldHVybiAmKG1faW1wbC5nZXQoKS0+a2V5
KTsgfQogICAgICAgICBjb25zdCBLZXlUeXBlJiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiAq
Z2V0KCk7IH0KICAgICAgICAgY29uc3QgS2V5VHlwZSogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0
dXJuIGdldCgpOyB9CiAKQEAgLTEwOCw3ICsxMDgsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICBw
dWJsaWM6CiAgICAgICAgIEhhc2hUYWJsZUNvbnN0VmFsdWVzSXRlcmF0b3IoY29uc3QgQ29uc3RJ
dGVyYXRvciYgaW1wbCkgOiBtX2ltcGwoaW1wbCkge30KICAgICAgICAgCi0gICAgICAgIGNvbnN0
IE1hcHBlZFR5cGUqIGdldCgpIGNvbnN0IHsgcmV0dXJuICYobV9pbXBsLmdldCgpLT5zZWNvbmQp
OyB9CisgICAgICAgIGNvbnN0IE1hcHBlZFR5cGUqIGdldCgpIGNvbnN0IHsgcmV0dXJuICYobV9p
bXBsLmdldCgpLT52YWx1ZSk7IH0KICAgICAgICAgY29uc3QgTWFwcGVkVHlwZSYgb3BlcmF0b3Iq
KCkgY29uc3QgeyByZXR1cm4gKmdldCgpOyB9CiAgICAgICAgIGNvbnN0IE1hcHBlZFR5cGUqIG9w
ZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBnZXQoKTsgfQogCkBAIC0xNDksNyArMTQ5LDcgQEAg
bmFtZXNwYWNlIFdURiB7CiAgICAgcHVibGljOgogICAgICAgICBIYXNoVGFibGVWYWx1ZXNJdGVy
YXRvcihjb25zdCBJdGVyYXRvciYgaW1wbCkgOiBtX2ltcGwoaW1wbCkge30KICAgICAgICAgCi0g
ICAgICAgIE1hcHBlZFR5cGUqIGdldCgpIGNvbnN0IHsgcmV0dXJuICYobV9pbXBsLmdldCgpLT5z
ZWNvbmQpOyB9CisgICAgICAgIE1hcHBlZFR5cGUqIGdldCgpIGNvbnN0IHsgcmV0dXJuICYobV9p
bXBsLmdldCgpLT52YWx1ZSk7IH0KICAgICAgICAgTWFwcGVkVHlwZSYgb3BlcmF0b3IqKCkgY29u
c3QgeyByZXR1cm4gKmdldCgpOyB9CiAgICAgICAgIE1hcHBlZFR5cGUqIG9wZXJhdG9yLT4oKSBj
b25zdCB7IHJldHVybiBnZXQoKTsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9IYXNo
TWFwLmggYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoTWFwLmgKaW5kZXggOTAxMDQ3NC4uMTBlZTQyNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvSGFzaE1hcC5oCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L0hhc2hNYXAuaApAQCAtMzUsNyArMzUsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICB9OwogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEtleVZhbHVlUGFpcktleUV4dHJhY3RvciB7
Ci0gICAgICAgIHN0YXRpYyBjb25zdCB0eXBlbmFtZSBUOjpLZXlUeXBlJiBleHRyYWN0KGNvbnN0
IFQmIHApIHsgcmV0dXJuIHAuZmlyc3Q7IH0KKyAgICAgICAgc3RhdGljIGNvbnN0IHR5cGVuYW1l
IFQ6OktleVR5cGUmIGV4dHJhY3QoY29uc3QgVCYgcCkgeyByZXR1cm4gcC5rZXk7IH0KICAgICB9
OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5
cGVuYW1lIEhhc2hBcmcgPSB0eXBlbmFtZSBEZWZhdWx0SGFzaDxLZXlBcmc+OjpIYXNoLApAQCAt
MjExLDcgKzIxMSw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBzdGF0aWMgY29uc3QgYm9v
bCBoYXNJc0VtcHR5VmFsdWVGdW5jdGlvbiA9IHRydWU7CiAgICAgICAgIHN0YXRpYyBib29sIGlz
RW1wdHlWYWx1ZShjb25zdCB0eXBlbmFtZSBLZXlWYWx1ZVBhaXJIYXNoVHJhaXRzPEtleVRyYWl0
cywgTWFwcGVkVHJhaXRzPjo6VHJhaXRUeXBlJiB2YWx1ZSkKICAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIGlzSGFzaFRyYWl0c0VtcHR5VmFsdWU8S2V5VHJhaXRzPih2YWx1ZS5maXJzdCk7
CisgICAgICAgICAgICByZXR1cm4gaXNIYXNoVHJhaXRzRW1wdHlWYWx1ZTxLZXlUcmFpdHM+KHZh
bHVlLmtleSk7CiAgICAgICAgIH0KICAgICB9OwogCkBAIC0yMjEsOCArMjIxLDggQEAgbmFtZXNw
YWNlIFdURiB7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IHN0YXRp
YyBib29sIGVxdWFsKGNvbnN0IFQmIGEsIGNvbnN0IFUmIGIpIHsgcmV0dXJuIEhhc2hGdW5jdGlv
bnM6OmVxdWFsKGEsIGIpOyB9CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFUsIHR5cGVuYW1lIFY+IHN0YXRpYyB2b2lkIHRyYW5zbGF0ZShUJiBsb2NhdGlvbiwgY29uc3Qg
VSYga2V5LCBjb25zdCBWJiBtYXBwZWQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGxvY2F0aW9u
LmZpcnN0ID0ga2V5OwotICAgICAgICAgICAgVmFsdWVUcmFpdHM6OlZhbHVlVHJhaXRzOjpzdG9y
ZShtYXBwZWQsIGxvY2F0aW9uLnNlY29uZCk7CisgICAgICAgICAgICBsb2NhdGlvbi5rZXkgPSBr
ZXk7CisgICAgICAgICAgICBWYWx1ZVRyYWl0czo6VmFsdWVUcmFpdHM6OnN0b3JlKG1hcHBlZCwg
bG9jYXRpb24udmFsdWUpOwogICAgICAgICB9CiAgICAgfTsKIApAQCAtMjMyLDggKzIzMiw4IEBA
IG5hbWVzcGFjZSBXVEYgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
PiBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBUJiBhLCBjb25zdCBVJiBiKSB7IHJldHVybiBUcmFu
c2xhdG9yOjplcXVhbChhLCBiKTsgfQogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVLCB0eXBlbmFtZSBWPiBzdGF0aWMgdm9pZCB0cmFuc2xhdGUoVCYgbG9jYXRpb24sIGNv
bnN0IFUmIGtleSwgY29uc3QgViYgbWFwcGVkLCB1bnNpZ25lZCBoYXNoQ29kZSkKICAgICAgICAg
ewotICAgICAgICAgICAgVHJhbnNsYXRvcjo6dHJhbnNsYXRlKGxvY2F0aW9uLmZpcnN0LCBrZXks
IGhhc2hDb2RlKTsKLSAgICAgICAgICAgIFZhbHVlVHJhaXRzOjpWYWx1ZVRyYWl0czo6c3RvcmUo
bWFwcGVkLCBsb2NhdGlvbi5zZWNvbmQpOworICAgICAgICAgICAgVHJhbnNsYXRvcjo6dHJhbnNs
YXRlKGxvY2F0aW9uLmtleSwga2V5LCBoYXNoQ29kZSk7CisgICAgICAgICAgICBWYWx1ZVRyYWl0
czo6VmFsdWVUcmFpdHM6OnN0b3JlKG1hcHBlZCwgbG9jYXRpb24udmFsdWUpOwogICAgICAgICB9
CiAgICAgfTsKIApAQCAtMzQxLDcgKzM0MSw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBB
ZGRSZXN1bHQgcmVzdWx0ID0gaW5saW5lQWRkKGtleSwgbWFwcGVkKTsKICAgICAgICAgaWYgKCFy
ZXN1bHQuaXNOZXdFbnRyeSkgewogICAgICAgICAgICAgLy8gVGhlIGlubGluZUFkZCBjYWxsIGFi
b3ZlIGZvdW5kIGFuIGV4aXN0aW5nIGhhc2ggdGFibGUgZW50cnk7IHdlIG5lZWQgdG8gc2V0IHRo
ZSBtYXBwZWQgdmFsdWUuCi0gICAgICAgICAgICBNYXBwZWRUcmFpdHM6OnN0b3JlKG1hcHBlZCwg
cmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOworICAgICAgICAgICAgTWFwcGVkVHJhaXRzOjpzdG9y
ZShtYXBwZWQsIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwogICAgICAgICB9CiAgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAgICAgfQpAQCAtMzY4LDcgKzM2OCw3IEBAIG5hbWVzcGFjZSBXVEYgewog
ICAgICAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gY29uc3RfY2FzdDxIYXNoVGFibGVUeXBlJj4obV9p
bXBsKS5sb29rdXAoa2V5KTsKICAgICAgICAgaWYgKCFlbnRyeSkKICAgICAgICAgICAgIHJldHVy
biBNYXBwZWRUcmFpdHM6OnBlZWsoTWFwcGVkVHJhaXRzOjplbXB0eVZhbHVlKCkpOwotICAgICAg
ICByZXR1cm4gTWFwcGVkVHJhaXRzOjpwZWVrKGVudHJ5LT5zZWNvbmQpOworICAgICAgICByZXR1
cm4gTWFwcGVkVHJhaXRzOjpwZWVrKGVudHJ5LT52YWx1ZSk7CiAgICAgfQogCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5h
bWUgWD4KQEAgLTM5OSw3ICszOTksNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgaXRlcmF0
b3IgaXQgPSBmaW5kKGtleSk7CiAgICAgICAgIGlmIChpdCA9PSBlbmQoKSkKICAgICAgICAgICAg
IHJldHVybiBNYXBwZWRUcmFpdHM6OnBhc3NPdXQoTWFwcGVkVHJhaXRzOjplbXB0eVZhbHVlKCkp
OwotICAgICAgICBNYXBwZWRQYXNzT3V0VHlwZSByZXN1bHQgPSBNYXBwZWRUcmFpdHM6OnBhc3NP
dXQoaXQtPnNlY29uZCk7CisgICAgICAgIE1hcHBlZFBhc3NPdXRUeXBlIHJlc3VsdCA9IE1hcHBl
ZFRyYWl0czo6cGFzc091dChpdC0+dmFsdWUpOwogICAgICAgICByZW1vdmUoaXQpOwogICAgICAg
ICByZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTQyMSw4ICs0MjEsOCBAQCBuYW1lc3BhY2UgV1RG
IHsKICAgICAgICAgY29uc3RfaXRlcmF0b3IgZW5kID0gYS5lbmQoKTsKICAgICAgICAgY29uc3Rf
aXRlcmF0b3Igbm90Rm91bmQgPSBiLmVuZCgpOwogICAgICAgICBmb3IgKGNvbnN0X2l0ZXJhdG9y
IGl0ID0gYS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGNvbnN0X2l0
ZXJhdG9yIGJQb3MgPSBiLmZpbmQoaXQtPmZpcnN0KTsKLSAgICAgICAgICAgIGlmIChiUG9zID09
IG5vdEZvdW5kIHx8IGl0LT5zZWNvbmQgIT0gYlBvcy0+c2Vjb25kKQorICAgICAgICAgICAgY29u
c3RfaXRlcmF0b3IgYlBvcyA9IGIuZmluZChpdC0+a2V5KTsKKyAgICAgICAgICAgIGlmIChiUG9z
ID09IG5vdEZvdW5kIHx8IGl0LT52YWx1ZSAhPSBiUG9zLT52YWx1ZSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIApAQCAtNDM1LDM0ICs0MzUsMjIgQEAgbmFtZXNw
YWNlIFdURiB7CiAgICAgICAgIHJldHVybiAhKGEgPT0gYik7CiAgICAgfQogCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgSGFzaFRhYmxlVHlwZT4KLSAgICB2b2lkIGRlbGV0ZUFsbFBhaXJTZWNvbmRz
KEhhc2hUYWJsZVR5cGUmIGNvbGxlY3Rpb24pCi0gICAgewotICAgICAgICB0eXBlZGVmIHR5cGVu
YW1lIEhhc2hUYWJsZVR5cGU6OmNvbnN0X2l0ZXJhdG9yIGl0ZXJhdG9yOwotICAgICAgICBpdGVy
YXRvciBlbmQgPSBjb2xsZWN0aW9uLmVuZCgpOwotICAgICAgICBmb3IgKGl0ZXJhdG9yIGl0ID0g
Y29sbGVjdGlvbi5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBkZWxldGUg
aXQtPnNlY29uZDsKLSAgICB9Ci0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
LCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgogICAgIGlubGluZSB2b2lkIGRl
bGV0ZUFsbFZhbHVlcyhjb25zdCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+JiBjb2xsZWN0aW9uKQog
ICAgIHsKLSAgICAgICAgZGVsZXRlQWxsUGFpclNlY29uZHMoY29sbGVjdGlvbik7Ci0gICAgfQot
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlVHlwZT4KLSAgICB2b2lkIGRlbGV0ZUFs
bFBhaXJGaXJzdHMoSGFzaFRhYmxlVHlwZSYgY29sbGVjdGlvbikKLSAgICB7Ci0gICAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgSGFzaFRhYmxlVHlwZTo6Y29uc3RfaXRlcmF0b3IgaXRlcmF0b3I7Cisg
ICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6Y29uc3RfaXRl
cmF0b3IgaXRlcmF0b3I7CiAgICAgICAgIGl0ZXJhdG9yIGVuZCA9IGNvbGxlY3Rpb24uZW5kKCk7
CiAgICAgICAgIGZvciAoaXRlcmF0b3IgaXQgPSBjb2xsZWN0aW9uLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkKLSAgICAgICAgICAgIGRlbGV0ZSBpdC0+Zmlyc3Q7CisgICAgICAgICAgICBkZWxl
dGUgaXQtPnZhbHVlOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+CiAgICAgaW5saW5lIHZvaWQg
ZGVsZXRlQWxsS2V5cyhjb25zdCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+JiBjb2xsZWN0aW9uKQog
ICAgIHsKLSAgICAgICAgZGVsZXRlQWxsUGFpckZpcnN0cyhjb2xsZWN0aW9uKTsKKyAgICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojpjb25zdF9pdGVyYXRvciBp
dGVyYXRvcjsKKyAgICAgICAgaXRlcmF0b3IgZW5kID0gY29sbGVjdGlvbi5lbmQoKTsKKyAgICAg
ICAgZm9yIChpdGVyYXRvciBpdCA9IGNvbGxlY3Rpb24uYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KQorICAgICAgICAgICAgZGVsZXRlIGl0LT5rZXk7CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1l
IFgsIHR5cGVuYW1lIFk+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaCBi
L1NvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oCmluZGV4IDFjZTNjNWMuLjE2ZmRkOWUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0hh
c2hUYWJsZS5oCkBAIC0yODYsOCArMjg2LDggQEAgbmFtZXNwYWNlIFdURiB7CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgdm9pZCBoYXNoVGFibGVTd2FwKEtl
eVZhbHVlUGFpcjxULCBVPiYgYSwgS2V5VmFsdWVQYWlyPFQsIFU+JiBiKQogICAgIHsKLSAgICAg
ICAgc3dhcChhLmZpcnN0LCBiLmZpcnN0KTsKLSAgICAgICAgc3dhcChhLnNlY29uZCwgYi5zZWNv
bmQpOworICAgICAgICBzd2FwKGEua2V5LCBiLmtleSk7CisgICAgICAgIHN3YXAoYS52YWx1ZSwg
Yi52YWx1ZSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgYm9vbCB1c2VTd2Fw
PiBzdHJ1Y3QgTW92ZXI7CkBAIC0xMjQ2LDcgKzEyNDYsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAg
ICAgICAgICAgIEFTU0VSVChlbnRyeSA9PSBpdC5tX3Bvc2l0aW9uKTsKICAgICAgICAgICAgICsr
Y291bnQ7CiAKLSAgICAgICAgICAgIFZhbHVlQ2hlY2s8S2V5Pjo6Y2hlY2tDb25zaXN0ZW5jeShp
dC0+Zmlyc3QpOworICAgICAgICAgICAgVmFsdWVDaGVjazxLZXk+OjpjaGVja0NvbnNpc3RlbmN5
KGl0LT5rZXkpOwogICAgICAgICB9CiAKICAgICAgICAgQVNTRVJUKGNvdW50ID09IG1fa2V5Q291
bnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvSGFzaFRyYWl0cy5oIGIvU291cmNlL1dU
Ri93dGYvSGFzaFRyYWl0cy5oCmluZGV4IGViZTc5NWUuLjczYmYyYmUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvd3RmL0hhc2hUcmFpdHMuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoVHJhaXRz
LmgKQEAgLTE5MywyMSArMTkzLDIwIEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICB9CiAKICAg
ICAgICAgS2V5VmFsdWVQYWlyKGNvbnN0IEtleVR5cGVBcmcmIGtleSwgY29uc3QgVmFsdWVUeXBl
QXJnJiB2YWx1ZSkKLSAgICAgICAgICAgIDogZmlyc3Qoa2V5KQotICAgICAgICAgICAgLCBzZWNv
bmQodmFsdWUpCisgICAgICAgICAgICA6IGtleShrZXkpCisgICAgICAgICAgICAsIHZhbHVlKHZh
bHVlKQogICAgICAgICB7CiAgICAgICAgIH0KIAogICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
T3RoZXJLZXlUeXBlLCB0eXBlbmFtZSBPdGhlclZhbHVlVHlwZT4KICAgICAgICAgS2V5VmFsdWVQ
YWlyKGNvbnN0IEtleVZhbHVlUGFpcjxPdGhlcktleVR5cGUsIE90aGVyVmFsdWVUeXBlPiYgb3Ro
ZXIpCi0gICAgICAgICAgICA6IGZpcnN0KG90aGVyLmZpcnN0KQotICAgICAgICAgICAgLCBzZWNv
bmQob3RoZXIuc2Vjb25kKQorICAgICAgICAgICAgOiBrZXkob3RoZXIua2V5KQorICAgICAgICAg
ICAgLCB2YWx1ZShvdGhlci52YWx1ZSkKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAg
Ly8gVE9ETzogUmVuYW1lIHRoZXNlIHRvIGtleSBhbmQgdmFsdWUuIFNlZSBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI3ODQuCi0gICAgICAgIEtleVR5cGVBcmcgZmly
c3Q7Ci0gICAgICAgIFZhbHVlVHlwZUFyZyBzZWNvbmQ7CisgICAgICAgIEtleVR5cGVBcmcga2V5
OworICAgICAgICBWYWx1ZVR5cGVBcmcgdmFsdWU7CiAgICAgfTsKIAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgVmFsdWVUcmFpdHNBcmc+CkBAIC0yMjQsOCAr
MjIzLDggQEAgbmFtZXNwYWNlIFdURiB7CiAKICAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5p
bXVtVGFibGVTaXplID0gS2V5VHJhaXRzOjptaW5pbXVtVGFibGVTaXplOwogCi0gICAgICAgIHN0
YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShUcmFpdFR5cGUmIHNsb3QpIHsgS2V5VHJh
aXRzOjpjb25zdHJ1Y3REZWxldGVkVmFsdWUoc2xvdC5maXJzdCk7IH0KLSAgICAgICAgc3RhdGlj
IGJvb2wgaXNEZWxldGVkVmFsdWUoY29uc3QgVHJhaXRUeXBlJiB2YWx1ZSkgeyByZXR1cm4gS2V5
VHJhaXRzOjppc0RlbGV0ZWRWYWx1ZSh2YWx1ZS5maXJzdCk7IH0KKyAgICAgICAgc3RhdGljIHZv
aWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKFRyYWl0VHlwZSYgc2xvdCkgeyBLZXlUcmFpdHM6OmNv
bnN0cnVjdERlbGV0ZWRWYWx1ZShzbG90LmtleSk7IH0KKyAgICAgICAgc3RhdGljIGJvb2wgaXNE
ZWxldGVkVmFsdWUoY29uc3QgVHJhaXRUeXBlJiB2YWx1ZSkgeyByZXR1cm4gS2V5VHJhaXRzOjpp
c0RlbGV0ZWRWYWx1ZSh2YWx1ZS5rZXkpOyB9CiAgICAgfTsKIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEtleSwgdHlwZW5hbWUgVmFsdWU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9NZXRh
QWxsb2NhdG9yLmNwcCBiL1NvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3IuY3BwCmluZGV4IDBh
N2EzMWUuLjM2ZGU5ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3Iu
Y3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3IuY3BwCkBAIC0zMDksOSArMzA5
LDkgQEAgdm9pZCBNZXRhQWxsb2NhdG9yOjphZGRGcmVlU3BhY2Uodm9pZCogc3RhcnQsIHNpemVf
dCBzaXplSW5CeXRlcykKICAgICAgICAgLy8gV2UgaGF2ZSBzb21ldGhpbmcgd2UgY2FuIGNvYWxl
c2NlIHdpdGggb24gdGhlIGxlZnQuIFJlbW92ZSBpdCBmcm9tIHRoZSB0cmVlLCBhbmQKICAgICAg
ICAgLy8gcmVtb3ZlIGl0cyBlbmQgZnJvbSB0aGUgZW5kIGFkZHJlc3MgbWFwLgogICAgICAgICAK
LSAgICAgICAgQVNTRVJUKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8
dWludHB0cl90PihsZWZ0TmVpZ2hib3ItPnNlY29uZC0+bV9zdGFydCkgKyBsZWZ0TmVpZ2hib3It
PnNlY29uZC0+bV9zaXplSW5CeXRlcykgPT0gbGVmdE5laWdoYm9yLT5maXJzdCk7CisgICAgICAg
IEFTU0VSVChyZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJf
dD4obGVmdE5laWdoYm9yLT52YWx1ZS0+bV9zdGFydCkgKyBsZWZ0TmVpZ2hib3ItPnZhbHVlLT5t
X3NpemVJbkJ5dGVzKSA9PSBsZWZ0TmVpZ2hib3ItPmtleSk7CiAgICAgICAgIAotICAgICAgICBG
cmVlU3BhY2VOb2RlKiBsZWZ0Tm9kZSA9IGxlZnROZWlnaGJvci0+c2Vjb25kOworICAgICAgICBG
cmVlU3BhY2VOb2RlKiBsZWZ0Tm9kZSA9IGxlZnROZWlnaGJvci0+dmFsdWU7CiAgICAgICAgIAog
ICAgICAgICB2b2lkKiBsZWZ0U3RhcnQgPSBsZWZ0Tm9kZS0+bV9zdGFydDsKICAgICAgICAgc2l6
ZV90IGxlZnRTaXplID0gbGVmdE5vZGUtPm1fc2l6ZUluQnl0ZXM7CkBAIC0zMjcsMTAgKzMyNywx
MCBAQCB2b2lkIE1ldGFBbGxvY2F0b3I6OmFkZEZyZWVTcGFjZSh2b2lkKiBzdGFydCwgc2l6ZV90
IHNpemVJbkJ5dGVzKQogICAgICAgICAgICAgLy8gRnJlZWluZyBzb21ldGhpbmcgaW4gdGhlIG1p
ZGRsZSBvZiBmcmVlIGJsb2Nrcy4gQ29hbGVzY2UgYm90aCBsZWZ0IGFuZAogICAgICAgICAgICAg
Ly8gcmlnaHQsIHdoaWxzdCByZW1vdmluZyB0aGUgcmlnaHQgbmVpZ2hib3IgZnJvbSB0aGUgbWFw
cy4KICAgICAgICAgICAgIAotICAgICAgICAgICAgQVNTRVJUKHJpZ2h0TmVpZ2hib3ItPnNlY29u
ZC0+bV9zdGFydCA9PSByaWdodE5laWdoYm9yLT5maXJzdCk7CisgICAgICAgICAgICBBU1NFUlQo
cmlnaHROZWlnaGJvci0+dmFsdWUtPm1fc3RhcnQgPT0gcmlnaHROZWlnaGJvci0+a2V5KTsKICAg
ICAgICAgICAgIAotICAgICAgICAgICAgRnJlZVNwYWNlTm9kZSogcmlnaHROb2RlID0gcmlnaHRO
ZWlnaGJvci0+c2Vjb25kOwotICAgICAgICAgICAgdm9pZCogcmlnaHRTdGFydCA9IHJpZ2h0TmVp
Z2hib3ItPmZpcnN0OworICAgICAgICAgICAgRnJlZVNwYWNlTm9kZSogcmlnaHROb2RlID0gcmln
aHROZWlnaGJvci0+dmFsdWU7CisgICAgICAgICAgICB2b2lkKiByaWdodFN0YXJ0ID0gcmlnaHRO
ZWlnaGJvci0+a2V5OwogICAgICAgICAgICAgc2l6ZV90IHJpZ2h0U2l6ZSA9IHJpZ2h0Tm9kZS0+
bV9zaXplSW5CeXRlczsKICAgICAgICAgICAgIHZvaWQqIHJpZ2h0RW5kID0gcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHJpZ2h0U3RhcnQpICsgcmln
aHRTaXplKTsKICAgICAgICAgICAgIApAQCAtMzU3LDggKzM1Nyw4IEBAIHZvaWQgTWV0YUFsbG9j
YXRvcjo6YWRkRnJlZVNwYWNlKHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMpCiAgICAg
ICAgIC8vIENhbm5vdCBjb2FsZXNjZSB3aXRoIGxlZnQ7IHRyeSB0byBzZWUgaWYgd2UgY2FuIGNv
YWxlc2NlIHdpdGggcmlnaHQuCiAgICAgICAgIAogICAgICAgICBpZiAocmlnaHROZWlnaGJvciAh
PSBtX2ZyZWVTcGFjZVN0YXJ0QWRkcmVzc01hcC5lbmQoKSkgewotICAgICAgICAgICAgRnJlZVNw
YWNlTm9kZSogcmlnaHROb2RlID0gcmlnaHROZWlnaGJvci0+c2Vjb25kOwotICAgICAgICAgICAg
dm9pZCogcmlnaHRTdGFydCA9IHJpZ2h0TmVpZ2hib3ItPmZpcnN0OworICAgICAgICAgICAgRnJl
ZVNwYWNlTm9kZSogcmlnaHROb2RlID0gcmlnaHROZWlnaGJvci0+dmFsdWU7CisgICAgICAgICAg
ICB2b2lkKiByaWdodFN0YXJ0ID0gcmlnaHROZWlnaGJvci0+a2V5OwogICAgICAgICAgICAgc2l6
ZV90IHJpZ2h0U2l6ZSA9IHJpZ2h0Tm9kZS0+bV9zaXplSW5CeXRlczsKICAgICAgICAgICAgIHZv
aWQqIHJpZ2h0RW5kID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1
aW50cHRyX3Q+KHJpZ2h0U3RhcnQpICsgcmlnaHRTaXplKTsKICAgICAgICAgICAgIApAQCAtNDA0
LDcgKzQwNCw3IEBAIHZvaWQgTWV0YUFsbG9jYXRvcjo6aW5jcmVtZW50UGFnZU9jY3VwYW5jeSh2
b2lkKiBhZGRyZXNzLCBzaXplX3Qgc2l6ZUluQnl0ZXMpCiAgICAgICAgICAgICBtX2J5dGVzQ29t
bWl0dGVkICs9IG1fcGFnZVNpemU7CiAgICAgICAgICAgICBub3RpZnlOZWVkUGFnZShyZWludGVy
cHJldF9jYXN0PHZvaWQqPihwYWdlIDw8IG1fbG9nUGFnZVNpemUpKTsKICAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICBpdGVyLT5zZWNvbmQrKzsKKyAgICAgICAgICAgIGl0ZXItPnZhbHVlKys7
CiAgICAgfQogfQogCkBAIC00MTYsNyArNDE2LDcgQEAgdm9pZCBNZXRhQWxsb2NhdG9yOjpkZWNy
ZW1lbnRQYWdlT2NjdXBhbmN5KHZvaWQqIGFkZHJlc3MsIHNpemVfdCBzaXplSW5CeXRlcykKICAg
ICBmb3IgKHVpbnRwdHJfdCBwYWdlID0gZmlyc3RQYWdlOyBwYWdlIDw9IGxhc3RQYWdlOyArK3Bh
Z2UpIHsKICAgICAgICAgSGFzaE1hcDx1aW50cHRyX3QsIHNpemVfdD46Oml0ZXJhdG9yIGl0ZXIg
PSBtX3BhZ2VPY2N1cGFuY3lNYXAuZmluZChwYWdlKTsKICAgICAgICAgQVNTRVJUKGl0ZXIgIT0g
bV9wYWdlT2NjdXBhbmN5TWFwLmVuZCgpKTsKLSAgICAgICAgaWYgKCEtLShpdGVyLT5zZWNvbmQp
KSB7CisgICAgICAgIGlmICghLS0oaXRlci0+dmFsdWUpKSB7CiAgICAgICAgICAgICBtX3BhZ2VP
Y2N1cGFuY3lNYXAucmVtb3ZlKGl0ZXIpOwogICAgICAgICAgICAgbV9ieXRlc0NvbW1pdHRlZCAt
PSBtX3BhZ2VTaXplOwogICAgICAgICAgICAgbm90aWZ5UGFnZUlzRnJlZShyZWludGVycHJldF9j
YXN0PHZvaWQqPihwYWdlIDw8IG1fbG9nUGFnZVNpemUpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL1JlZkNvdW50ZWRMZWFrQ291bnRlci5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9SZWZDb3Vu
dGVkTGVha0NvdW50ZXIuY3BwCmluZGV4IDY3MGYyYTAuLjRhMDQ1MjggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvd3RmL1JlZkNvdW50ZWRMZWFrQ291bnRlci5jcHAKKysrIGIvU291cmNlL1dURi93
dGYvUmVmQ291bnRlZExlYWtDb3VudGVyLmNwcApAQCAtNzEsNyArNzEsNyBAQCBSZWZDb3VudGVk
TGVha0NvdW50ZXI6On5SZWZDb3VudGVkTGVha0NvdW50ZXIoKQogICAgICAgICAgICAgTE9HKFJl
ZkNvdW50ZWRMZWFrcywgIkxFQUs6ICV1ICVzIiwgbV9jb3VudCwgbV9kZXNjcmlwdGlvbik7CiAg
ICAgICAgIGVsc2UgaWYgKCFsb2dnZWRTdXBwcmVzc2lvblJlYXNvbikgewogICAgICAgICAgICAg
Ly8gVGhpcyBsb2dzIG9ubHkgb25lIHJlYXNvbi4gTGF0ZXIgd2UgY291bGQgY2hhbmdlIGl0IHNv
IHdlIGxvZyBhbGwgdGhlIHJlYXNvbnMuCi0gICAgICAgICAgICBMT0coUmVmQ291bnRlZExlYWtz
LCAiTm8gbGVhayBjaGVja2luZyBkb25lOiAlcyIsIGxlYWtNZXNzYWdlU3VwcHJlc3Npb25SZWFz
b25zLT5iZWdpbigpLT5maXJzdCk7CisgICAgICAgICAgICBMT0coUmVmQ291bnRlZExlYWtzLCAi
Tm8gbGVhayBjaGVja2luZyBkb25lOiAlcyIsIGxlYWtNZXNzYWdlU3VwcHJlc3Npb25SZWFzb25z
LT5iZWdpbigpLT5rZXkpOwogICAgICAgICAgICAgbG9nZ2VkU3VwcHJlc3Npb25SZWFzb24gPSB0
cnVlOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUmVmUHRy
SGFzaE1hcC5oIGIvU291cmNlL1dURi93dGYvUmVmUHRySGFzaE1hcC5oCmluZGV4IDVmYWU5MGUu
Ljk1NDE4MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1JlZlB0ckhhc2hNYXAuaAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi9SZWZQdHJIYXNoTWFwLmgKQEAgLTIxNiw3ICsyMTYsNyBAQCBuYW1l
c3BhY2UgV1RGIHsKICAgICAgICAgQWRkUmVzdWx0IHJlc3VsdCA9IGlubGluZUFkZChrZXksIG1h
cHBlZCk7CiAgICAgICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpIHsKICAgICAgICAgICAgIC8v
IFRoZSBpbmxpbmVBZGQgY2FsbCBhYm92ZSBmb3VuZCBhbiBleGlzdGluZyBoYXNoIHRhYmxlIGVu
dHJ5OyB3ZSBuZWVkIHRvIHNldCB0aGUgbWFwcGVkIHZhbHVlLgotICAgICAgICAgICAgTWFwcGVk
VHJhaXRzOjpzdG9yZShtYXBwZWQsIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKKyAgICAgICAg
ICAgIE1hcHBlZFRyYWl0czo6c3RvcmUobWFwcGVkLCByZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsK
ICAgICAgICAgfQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTIyOCw3ICsyMjgs
NyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgQWRkUmVzdWx0IHJlc3VsdCA9IGlubGluZUFk
ZChrZXksIG1hcHBlZCk7CiAgICAgICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpIHsKICAgICAg
ICAgICAgIC8vIFRoZSBpbmxpbmVBZGQgY2FsbCBhYm92ZSBmb3VuZCBhbiBleGlzdGluZyBoYXNo
IHRhYmxlIGVudHJ5OyB3ZSBuZWVkIHRvIHNldCB0aGUgbWFwcGVkIHZhbHVlLgotICAgICAgICAg
ICAgTWFwcGVkVHJhaXRzOjpzdG9yZShtYXBwZWQsIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsK
KyAgICAgICAgICAgIE1hcHBlZFRyYWl0czo6c3RvcmUobWFwcGVkLCByZXN1bHQuaXRlcmF0b3It
PnZhbHVlKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTI1
NCw3ICsyNTQsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgVmFsdWVUeXBlKiBlbnRyeSA9
IGNvbnN0X2Nhc3Q8SGFzaFRhYmxlVHlwZSY+KG1faW1wbCkubG9va3VwKGtleSk7CiAgICAgICAg
IGlmICghZW50cnkpCiAgICAgICAgICAgICByZXR1cm4gTWFwcGVkVHJhaXRzOjpwZWVrKE1hcHBl
ZFRyYWl0czo6ZW1wdHlWYWx1ZSgpKTsKLSAgICAgICAgcmV0dXJuIE1hcHBlZFRyYWl0czo6cGVl
ayhlbnRyeS0+c2Vjb25kKTsKKyAgICAgICAgcmV0dXJuIE1hcHBlZFRyYWl0czo6cGVlayhlbnRy
eS0+dmFsdWUpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUs
IHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0cz4KQEAgLTI2NCw3
ICsyNjQsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgVmFsdWVUeXBlKiBlbnRyeSA9IGNv
bnN0X2Nhc3Q8SGFzaFRhYmxlVHlwZSY+KG1faW1wbCkudGVtcGxhdGUgbG9va3VwPFRyYW5zbGF0
b3I+KGtleSk7CiAgICAgICAgIGlmICghZW50cnkpCiAgICAgICAgICAgICByZXR1cm4gTWFwcGVk
VHJhaXRzOjpwZWVrKE1hcHBlZFRyYWl0czo6ZW1wdHlWYWx1ZSgpKTsKLSAgICAgICAgcmV0dXJu
IE1hcHBlZFRyYWl0czo6cGVlayhlbnRyeS0+c2Vjb25kKTsKKyAgICAgICAgcmV0dXJuIE1hcHBl
ZFRyYWl0czo6cGVlayhlbnRyeS0+dmFsdWUpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIE1hcHBl
ZFRyYWl0cz4KQEAgLTMwOCw3ICszMDgsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgaXRl
cmF0b3IgaXQgPSBmaW5kKGtleSk7CiAgICAgICAgIGlmIChpdCA9PSBlbmQoKSkKICAgICAgICAg
ICAgIHJldHVybiBNYXBwZWRUcmFpdHM6OnBhc3NPdXQoTWFwcGVkVHJhaXRzOjplbXB0eVZhbHVl
KCkpOwotICAgICAgICBNYXBwZWRQYXNzT3V0VHlwZSByZXN1bHQgPSBNYXBwZWRUcmFpdHM6OnBh
c3NPdXQoaXQtPnNlY29uZCk7CisgICAgICAgIE1hcHBlZFBhc3NPdXRUeXBlIHJlc3VsdCA9IE1h
cHBlZFRyYWl0czo6cGFzc091dChpdC0+dmFsdWUpOwogICAgICAgICByZW1vdmUoaXQpOwogICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTMyMCw3ICszMjAsNyBAQCBuYW1lc3BhY2Ug
V1RGIHsKICAgICAgICAgaXRlcmF0b3IgaXQgPSBmaW5kKGtleSk7CiAgICAgICAgIGlmIChpdCA9
PSBlbmQoKSkKICAgICAgICAgICAgIHJldHVybiBNYXBwZWRUcmFpdHM6OnBhc3NPdXQoTWFwcGVk
VHJhaXRzOjplbXB0eVZhbHVlKCkpOwotICAgICAgICBNYXBwZWRQYXNzT3V0VHlwZSByZXN1bHQg
PSBNYXBwZWRUcmFpdHM6OnBhc3NPdXQoaXQtPnNlY29uZCk7CisgICAgICAgIE1hcHBlZFBhc3NP
dXRUeXBlIHJlc3VsdCA9IE1hcHBlZFRyYWl0czo6cGFzc091dChpdC0+dmFsdWUpOwogICAgICAg
ICByZW1vdmUoaXQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL1NwZWN0cnVtLmggYi9Tb3VyY2UvV1RGL3d0Zi9TcGVjdHJ1bS5oCmlu
ZGV4IDVlN2E0ODQuLmYwZjE5ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1NwZWN0cnVt
LmgKKysrIGIvU291cmNlL1dURi93dGYvU3BlY3RydW0uaApAQCAtNDQsNyArNDQsNyBAQCBwdWJs
aWM6CiAgICAgewogICAgICAgICB0eXBlbmFtZSBIYXNoTWFwPFQsIHVuc2lnbmVkIGxvbmc+OjpB
ZGRSZXN1bHQgcmVzdWx0ID0gbV9tYXAuYWRkKGtleSwgY291bnQpOwogICAgICAgICBpZiAoIXJl
c3VsdC5pc05ld0VudHJ5KQotICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgKz0g
Y291bnQ7CisgICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlICs9IGNvdW50OwogICAg
IH0KICAgICAKICAgICB1bnNpZ25lZCBsb25nIGdldChjb25zdCBUJiBrZXkpIGNvbnN0CkBAIC04
OCw3ICs4OCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIFZlY3RvcjxLZXlBbmRDb3VudD4g
bGlzdDsKICAgICAgICAgZm9yIChjb25zdF9pdGVyYXRvciBpdGVyID0gYmVnaW4oKTsgaXRlciAh
PSBlbmQoKTsgKytpdGVyKQotICAgICAgICAgICAgbGlzdC5hcHBlbmQoS2V5QW5kQ291bnQoaXRl
ci0+Zmlyc3QsIGl0ZXItPnNlY29uZCkpOworICAgICAgICAgICAgbGlzdC5hcHBlbmQoS2V5QW5k
Q291bnQoaXRlci0+a2V5LCBpdGVyLT52YWx1ZSkpOwogICAgICAgICAKICAgICAgICAgc3RkOjpz
b3J0KGxpc3QuYmVnaW4oKSwgbGlzdC5lbmQoKSk7CiAgICAgICAgIHJldHVybiBsaXN0OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwIGIvU291cmNlL1dU
Ri93dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwCmluZGV4IDkyMWRkM2IuLmZlNjczMzYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHAKQEAgLTExNCw4ICsxMTQsOCBAQCBzdGF0aWMg
VGhyZWFkSWRlbnRpZmllciBpZGVudGlmaWVyQnlQdGhyZWFkSGFuZGxlKGNvbnN0IHB0aHJlYWRf
dCYgcHRocmVhZEhhbmRsZQogCiAgICAgVGhyZWFkTWFwOjppdGVyYXRvciBpID0gdGhyZWFkTWFw
KCkuYmVnaW4oKTsKICAgICBmb3IgKDsgaSAhPSB0aHJlYWRNYXAoKS5lbmQoKTsgKytpKSB7Ci0g
ICAgICAgIGlmIChwdGhyZWFkX2VxdWFsKGktPnNlY29uZCwgcHRocmVhZEhhbmRsZSkpCi0gICAg
ICAgICAgICByZXR1cm4gaS0+Zmlyc3Q7CisgICAgICAgIGlmIChwdGhyZWFkX2VxdWFsKGktPnZh
bHVlLCBwdGhyZWFkSGFuZGxlKSkKKyAgICAgICAgICAgIHJldHVybiBpLT5rZXk7CiAgICAgfQog
CiAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xv
Y2F0aW9uL0dlb2xvY2F0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRp
b24vR2VvbG9jYXRpb24uY3BwCmluZGV4IDU3Y2FmMzEuLmEzZWY0MDIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vR2VvbG9jYXRpb24uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vR2VvbG9jYXRpb24uY3BwCkBAIC0xOTIs
NyArMTkyLDcgQEAgR2VvbG9jYXRpb246Okdlb05vdGlmaWVyKiBHZW9sb2NhdGlvbjo6V2F0Y2hl
cnM6OmZpbmQoaW50IGlkKQogICAgIElkVG9Ob3RpZmllck1hcDo6aXRlcmF0b3IgaXRlciA9IG1f
aWRUb05vdGlmaWVyTWFwLmZpbmQoaWQpOwogICAgIGlmIChpdGVyID09IG1faWRUb05vdGlmaWVy
TWFwLmVuZCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gaXRlci0+c2Vjb25kLmdl
dCgpOworICAgIHJldHVybiBpdGVyLT52YWx1ZS5nZXQoKTsKIH0KIAogdm9pZCBHZW9sb2NhdGlv
bjo6V2F0Y2hlcnM6OnJlbW92ZShpbnQgaWQpCkBAIC0yMDEsNyArMjAxLDcgQEAgdm9pZCBHZW9s
b2NhdGlvbjo6V2F0Y2hlcnM6OnJlbW92ZShpbnQgaWQpCiAgICAgSWRUb05vdGlmaWVyTWFwOjpp
dGVyYXRvciBpdGVyID0gbV9pZFRvTm90aWZpZXJNYXAuZmluZChpZCk7CiAgICAgaWYgKGl0ZXIg
PT0gbV9pZFRvTm90aWZpZXJNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBtX25vdGlm
aWVyVG9JZE1hcC5yZW1vdmUoaXRlci0+c2Vjb25kKTsKKyAgICBtX25vdGlmaWVyVG9JZE1hcC5y
ZW1vdmUoaXRlci0+dmFsdWUpOwogICAgIG1faWRUb05vdGlmaWVyTWFwLnJlbW92ZShpdGVyKTsK
IH0KIApAQCAtMjEwLDcgKzIxMCw3IEBAIHZvaWQgR2VvbG9jYXRpb246OldhdGNoZXJzOjpyZW1v
dmUoR2VvTm90aWZpZXIqIG5vdGlmaWVyKQogICAgIE5vdGlmaWVyVG9JZE1hcDo6aXRlcmF0b3Ig
aXRlciA9IG1fbm90aWZpZXJUb0lkTWFwLmZpbmQobm90aWZpZXIpOwogICAgIGlmIChpdGVyID09
IG1fbm90aWZpZXJUb0lkTWFwLmVuZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgbV9pZFRvTm90
aWZpZXJNYXAucmVtb3ZlKGl0ZXItPnNlY29uZCk7CisgICAgbV9pZFRvTm90aWZpZXJNYXAucmVt
b3ZlKGl0ZXItPnZhbHVlKTsKICAgICBtX25vdGlmaWVyVG9JZE1hcC5yZW1vdmUoaXRlcik7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFi
YXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNw
cAppbmRleCA1YzNkZmNiLi40NzRjOTc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwCkBAIC0xMDYsNyArMTA2LDcgQEAgUGFzc1JlZlB0
cjxET01TdHJpbmdMaXN0PiBJREJEYXRhYmFzZTo6b2JqZWN0U3RvcmVOYW1lcygpIGNvbnN0CiB7
CiAgICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+IG9iamVjdFN0b3JlTmFtZXMgPSBET01TdHJpbmdM
aXN0OjpjcmVhdGUoKTsKICAgICBmb3IgKElEQkRhdGFiYXNlTWV0YWRhdGE6Ok9iamVjdFN0b3Jl
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmJlZ2luKCk7
IGl0ICE9IG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmVuZCgpOyArK2l0KQotICAgICAgICBvYmpl
Y3RTdG9yZU5hbWVzLT5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgb2JqZWN0U3RvcmVOYW1l
cy0+YXBwZW5kKGl0LT5rZXkpOwogICAgIG9iamVjdFN0b3JlTmFtZXMtPnNvcnQoKTsKICAgICBy
ZXR1cm4gb2JqZWN0U3RvcmVOYW1lcy5yZWxlYXNlKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3Bw
CmluZGV4IGU0NTE0N2QuLmE5YmMzZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCkBAIC0xMzgs
NyArMTM4LDcgQEAgSURCRGF0YWJhc2VNZXRhZGF0YSBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpt
ZXRhZGF0YSgpIGNvbnN0CiB7CiAgICAgSURCRGF0YWJhc2VNZXRhZGF0YSBtZXRhZGF0YShtX25h
bWUsIG1fdmVyc2lvbiwgSURCRGF0YWJhc2VNZXRhZGF0YTo6Tm9JbnRWZXJzaW9uKTsKICAgICBm
b3IgKE9iamVjdFN0b3JlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fb2JqZWN0U3RvcmVzLmJl
Z2luKCk7IGl0ICE9IG1fb2JqZWN0U3RvcmVzLmVuZCgpOyArK2l0KQotICAgICAgICBtZXRhZGF0
YS5vYmplY3RTdG9yZXMuc2V0KGl0LT5maXJzdCwgaXQtPnNlY29uZC0+bWV0YWRhdGEoKSk7Cisg
ICAgICAgIG1ldGFkYXRhLm9iamVjdFN0b3Jlcy5zZXQoaXQtPmtleSwgaXQtPnZhbHVlLT5tZXRh
ZGF0YSgpKTsKICAgICByZXR1cm4gbWV0YWRhdGE7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwCmlu
ZGV4IGRmYjE0NTcuLmE5MzY3ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcApAQCAtMTA2LDcgKzEw
Niw3IEBAIHZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpkZWxldGVEYXRhYmFzZShjb25zdCBT
dHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsCiAgICAgaWYgKGl0ICE9IG1fZGF0YWJhc2VC
YWNrZW5kTWFwLmVuZCgpKSB7CiAgICAgICAgIC8vIElmIHRoZXJlIGFyZSBhbnkgY29ubmVjdGlv
bnMgdG8gdGhlIGRhdGFiYXNlLCBkaXJlY3RseSBkZWxldGUgdGhlCiAgICAgICAgIC8vIGRhdGFi
YXNlLgotICAgICAgICBpdC0+c2Vjb25kLT5kZWxldGVEYXRhYmFzZShjYWxsYmFja3MpOworICAg
ICAgICBpdC0+dmFsdWUtPmRlbGV0ZURhdGFiYXNlKGNhbGxiYWNrcyk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKQEAgLTEzMyw3ICsxMzMsNyBAQCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9y
ZT4gSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuQmFja2luZ1N0b3JlKFBhc3NSZWZQdHI8Uwog
ICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZTsKICAgICBJREJCYWNraW5n
U3RvcmVNYXA6Oml0ZXJhdG9yIGl0MiA9IG1fYmFja2luZ1N0b3JlTWFwLmZpbmQoZmlsZUlkZW50
aWZpZXIpOwogICAgIGlmIChpdDIgIT0gbV9iYWNraW5nU3RvcmVNYXAuZW5kKCkpCi0gICAgICAg
IGJhY2tpbmdTdG9yZSA9IGl0Mi0+c2Vjb25kOworICAgICAgICBiYWNraW5nU3RvcmUgPSBpdDIt
PnZhbHVlOwogICAgIGVsc2UgewogI2lmIFVTRShMRVZFTERCKQogICAgICAgICBiYWNraW5nU3Rv
cmUgPSBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuKHNlY3VyaXR5T3JpZ2luLmdldCgpLCBk
YXRhRGlyZWN0b3J5LCBmaWxlSWRlbnRpZmllciwgdGhpcyk7CkBAIC0xNTgsNyArMTU4LDcgQEAg
dm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4gY2EKICAgICBpZiAoaXQgIT0gbV9kYXRhYmFzZUJhY2tlbmRN
YXAuZW5kKCkpIHsKICAgICAgICAgLy8gSWYgaXQncyBhbHJlYWR5IGJlZW4gb3BlbmVkLCB3ZSBo
YXZlIHRvIHdhaXQgZm9yIGFueSBwZW5kaW5nCiAgICAgICAgIC8vIHNldFZlcnNpb24gY2FsbHMg
dG8gY29tcGxldGUuCi0gICAgICAgIGl0LT5zZWNvbmQtPm9wZW5Db25uZWN0aW9uKGNhbGxiYWNr
cyk7CisgICAgICAgIGl0LT52YWx1ZS0+b3BlbkNvbm5lY3Rpb24oY2FsbGJhY2tzKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCmluZGV4IDdmN2NkNzQuLjZlNTVjNGUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAK
QEAgLTY0LDcgKzY0LDcgQEAgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBJREJPYmplY3RTdG9y
ZTo6aW5kZXhOYW1lcygpIGNvbnN0CiAgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZTo6aW5k
ZXhOYW1lcyIpOwogICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiBpbmRleE5hbWVzID0gRE9NU3Ry
aW5nTGlzdDo6Y3JlYXRlKCk7CiAgICAgZm9yIChJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbmRl
eE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX21ldGFkYXRhLmluZGV4ZXMuYmVnaW4oKTsgaXQg
IT0gbV9tZXRhZGF0YS5pbmRleGVzLmVuZCgpOyArK2l0KQotICAgICAgICBpbmRleE5hbWVzLT5h
cHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgaW5kZXhOYW1lcy0+YXBwZW5kKGl0LT5rZXkpOwog
ICAgIGluZGV4TmFtZXMtPnNvcnQoKTsKICAgICByZXR1cm4gaW5kZXhOYW1lcy5yZWxlYXNlKCk7
CiB9CkBAIC0yMDQsOCArMjA0LDggQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RT
dG9yZTo6cHV0KElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6UHV0TW8KICAgICBWZWN0
b3I8SW5kZXhLZXlzPiBpbmRleEtleXM7CiAgICAgZm9yIChJREJPYmplY3RTdG9yZU1ldGFkYXRh
OjpJbmRleE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX21ldGFkYXRhLmluZGV4ZXMuYmVnaW4o
KTsgaXQgIT0gbV9tZXRhZGF0YS5pbmRleGVzLmVuZCgpOyArK2l0KSB7CiAgICAgICAgIEluZGV4
S2V5cyBrZXlzOwotICAgICAgICBnZW5lcmF0ZUluZGV4S2V5c0ZvclZhbHVlKGl0LT5zZWNvbmQs
IHZhbHVlLCAma2V5cyk7Ci0gICAgICAgIGluZGV4TmFtZXMuYXBwZW5kKGl0LT5maXJzdCk7Cisg
ICAgICAgIGdlbmVyYXRlSW5kZXhLZXlzRm9yVmFsdWUoaXQtPnZhbHVlLCB2YWx1ZSwgJmtleXMp
OworICAgICAgICBpbmRleE5hbWVzLmFwcGVuZChpdC0+a2V5KTsKICAgICAgICAgaW5kZXhLZXlz
LmFwcGVuZChrZXlzKTsKICAgICB9CiAgICAgQVNTRVJUKGluZGV4S2V5cy5zaXplKCkgPT0gaW5k
ZXhOYW1lcy5zaXplKCkpOwpAQCAtMzU1LDcgKzM1NSw3IEBAIFBhc3NSZWZQdHI8SURCSW5kZXg+
IElEQk9iamVjdFN0b3JlOjppbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUm
IGVjCiAKICAgICBJREJJbmRleE1hcDo6aXRlcmF0b3IgaXQgPSBtX2luZGV4TWFwLmZpbmQobmFt
ZSk7CiAgICAgaWYgKGl0ICE9IG1faW5kZXhNYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdC0+
c2Vjb25kOworICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwogCiAgICAgUmVmUHRyPElEQkluZGV4
QmFja2VuZEludGVyZmFjZT4gaW5kZXhCYWNrZW5kID0gbV9iYWNrZW5kLT5pbmRleChuYW1lLCBl
Yyk7CiAgICAgQVNTRVJUKCFpbmRleEJhY2tlbmQgIT0gIWVjKTsgLy8gSWYgd2UgZGlkbid0IGdl
dCBhbiBpbmRleCwgd2Ugc2hvdWxkIGhhdmUgZ290dGVuIGFuIGV4Y2VwdGlvbiBjb2RlLiBBbmQg
dmljZSB2ZXJzYS4KQEAgLTM2NSw3ICszNjUsNyBAQCBQYXNzUmVmUHRyPElEQkluZGV4PiBJREJP
YmplY3RTdG9yZTo6aW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYwog
ICAgIElEQk9iamVjdFN0b3JlTWV0YWRhdGE6OkluZGV4TWFwOjpjb25zdF9pdGVyYXRvciBtZGl0
ID0gbV9tZXRhZGF0YS5pbmRleGVzLmZpbmQobmFtZSk7CiAgICAgQVNTRVJUKG1kaXQgIT0gbV9t
ZXRhZGF0YS5pbmRleGVzLmVuZCgpKTsKIAotICAgIFJlZlB0cjxJREJJbmRleD4gaW5kZXggPSBJ
REJJbmRleDo6Y3JlYXRlKG1kaXQtPnNlY29uZCwgaW5kZXhCYWNrZW5kLnJlbGVhc2UoKSwgdGhp
cywgbV90cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgUmVmUHRyPElEQkluZGV4PiBpbmRleCA9IElE
QkluZGV4OjpjcmVhdGUobWRpdC0+dmFsdWUsIGluZGV4QmFja2VuZC5yZWxlYXNlKCksIHRoaXMs
IG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwogICAgIG1faW5kZXhNYXAuc2V0KG5hbWUsIGluZGV4KTsK
ICAgICByZXR1cm4gaW5kZXgucmVsZWFzZSgpOwogfQpAQCAtMzg5LDcgKzM4OSw3IEBAIHZvaWQg
SURCT2JqZWN0U3RvcmU6OmRlbGV0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9u
Q29kZSYgZWMpCiAgICAgaWYgKCFlYykgewogICAgICAgICBJREJJbmRleE1hcDo6aXRlcmF0b3Ig
aXQgPSBtX2luZGV4TWFwLmZpbmQobmFtZSk7CiAgICAgICAgIGlmIChpdCAhPSBtX2luZGV4TWFw
LmVuZCgpKSB7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLT5tYXJrRGVsZXRlZCgpOworICAgICAg
ICAgICAgaXQtPnZhbHVlLT5tYXJrRGVsZXRlZCgpOwogICAgICAgICAgICAgbV9pbmRleE1hcC5y
ZW1vdmUobmFtZSk7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcAppbmRl
eCA3NDY5MzNlLi4zZDRhOGNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcApAQCAtNzQs
NyArNzQsNyBAQCBJREJPYmplY3RTdG9yZU1ldGFkYXRhIElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6Om1ldGFkYXRhKCkgY29uc3QKIHsKICAgICBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG1ldGFk
YXRhKG1fbmFtZSwgbV9rZXlQYXRoLCBtX2F1dG9JbmNyZW1lbnQpOwogICAgIGZvciAoSW5kZXhN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9pbmRleGVzLmJlZ2luKCk7IGl0ICE9IG1faW5kZXhl
cy5lbmQoKTsgKytpdCkKLSAgICAgICAgbWV0YWRhdGEuaW5kZXhlcy5zZXQoaXQtPmZpcnN0LCBp
dC0+c2Vjb25kLT5tZXRhZGF0YSgpKTsKKyAgICAgICAgbWV0YWRhdGEuaW5kZXhlcy5zZXQoaXQt
PmtleSwgaXQtPnZhbHVlLT5tZXRhZGF0YSgpKTsKICAgICByZXR1cm4gbWV0YWRhdGE7CiB9CiAK
QEAgLTI5MiwxMiArMjkyLDEyIEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0
SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8CiAKICAgICBmb3Ig
KEluZGV4TWFwOjppdGVyYXRvciBpdCA9IG9iamVjdFN0b3JlLT5tX2luZGV4ZXMuYmVnaW4oKTsg
aXQgIT0gb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5lbmQoKTsgKytpdCkgewogCi0gICAgICAgIGNv
bnN0IFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiYgaW5kZXggPSBpdC0+c2Vjb25kOworICAg
ICAgICBjb25zdCBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4mIGluZGV4ID0gaXQtPnZhbHVl
OwogICAgICAgICBpZiAoIWluZGV4LT5oYXNWYWxpZElkKCkpCiAgICAgICAgICAgICBjb250aW51
ZTsgLy8gVGhlIGluZGV4IG9iamVjdCBoYXMgYmVlbiBjcmVhdGVkLCBidXQgZG9lcyBub3QgZXhp
c3QgaW4gdGhlIGRhdGFiYXNlIHlldC4KIAogICAgICAgICBPd25QdHI8SW5kZXhXcml0ZXI+IGlu
ZGV4V3JpdGVyOwotICAgICAgICBpbmRleFdyaXRlciA9IGFkb3B0UHRyKG5ldyBJbmRleFdyaXRl
cihpbmRleC0+bWV0YWRhdGEoKSwgaW5kZXhLZXlNYXAuZ2V0KGl0LT5maXJzdCkpKTsKKyAgICAg
ICAgaW5kZXhXcml0ZXIgPSBhZG9wdFB0cihuZXcgSW5kZXhXcml0ZXIoaW5kZXgtPm1ldGFkYXRh
KCksIGluZGV4S2V5TWFwLmdldChpdC0+a2V5KSkpOwogCiAgICAgICAgIFN0cmluZyBlcnJvck1l
c3NhZ2U7CiAgICAgICAgIGlmICghaW5kZXhXcml0ZXItPnZlcmlmeUluZGV4S2V5cygqb2JqZWN0
U3RvcmUtPmJhY2tpbmdTdG9yZSgpLApAQCAtMzY2LDEwICszNjYsMTAgQEAgdm9pZCBJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgUGFzc1JlZlAKICAgICAgICAgICAgIHJlY29yZElkZW50aWZpZXIgPSBiYWNraW5nU3RvcmVD
dXJzb3ItPm9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcigpOwogCiAgICAgICAgICAgICBmb3Ig
KEluZGV4TWFwOjppdGVyYXRvciBpdCA9IG9iamVjdFN0b3JlLT5tX2luZGV4ZXMuYmVnaW4oKTsg
aXQgIT0gb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5lbmQoKTsgKytpdCkgewotICAgICAgICAgICAg
ICAgIGlmICghaXQtPnNlY29uZC0+aGFzVmFsaWRJZCgpKQorICAgICAgICAgICAgICAgIGlmICgh
aXQtPnZhbHVlLT5oYXNWYWxpZElkKCkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAv
LyBUaGUgaW5kZXggb2JqZWN0IGhhcyBiZWVuIGNyZWF0ZWQsIGJ1dCBkb2VzIG5vdCBleGlzdCBp
biB0aGUgZGF0YWJhc2UgeWV0LgogCi0gICAgICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gb2Jq
ZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5kZWxldGVJbmRleERhdGFGb3JSZWNvcmQob2JqZWN0
U3RvcmUtPmRhdGFiYXNlSWQoKSwgb2JqZWN0U3RvcmUtPmlkKCksIGl0LT5zZWNvbmQtPmlkKCks
IHJlY29yZElkZW50aWZpZXIuZ2V0KCkpOworICAgICAgICAgICAgICAgIGJvb2wgc3VjY2VzcyA9
IG9iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+ZGVsZXRlSW5kZXhEYXRhRm9yUmVjb3JkKG9i
amVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0b3JlLT5pZCgpLCBpdC0+dmFsdWUtPmlk
KCksIHJlY29yZElkZW50aWZpZXIuZ2V0KCkpOwogICAgICAgICAgICAgICAgIEFTU0VSVF9VTlVT
RUQoc3VjY2Vzcywgc3VjY2Vzcyk7CiAgICAgICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcAppbmRleCA3NjEyMzQ3
Li5iM2JlOTA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJUcmFuc2FjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCVHJhbnNhY3Rpb24uY3BwCkBAIC0xNDIsNyArMTQyLDcgQEAgUGFzc1JlZlB0cjxJREJPYmpl
Y3RTdG9yZT4gSURCVHJhbnNhY3Rpb246Om9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwg
RXhjZXAKIAogICAgIElEQk9iamVjdFN0b3JlTWFwOjppdGVyYXRvciBpdCA9IG1fb2JqZWN0U3Rv
cmVNYXAuZmluZChuYW1lKTsKICAgICBpZiAoaXQgIT0gbV9vYmplY3RTdG9yZU1hcC5lbmQoKSkK
LSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBpdC0+dmFsdWU7CiAK
ICAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBvYmplY3RTdG9yZUJh
Y2tlbmQgPSBtX2JhY2tlbmQtPm9iamVjdFN0b3JlKG5hbWUsIGVjKTsKICAgICBBU1NFUlQoIW9i
amVjdFN0b3JlQmFja2VuZCAhPSAhZWMpOyAvLyBJZiB3ZSBkaWRuJ3QgZ2V0IGEgc3RvcmUsIHdl
IHNob3VsZCBoYXZlIGdvdHRlbiBhbiBleGNlcHRpb24gY29kZS4gQW5kIHZpY2UgdmVyc2EuCkBA
IC0xNTMsNyArMTUzLDcgQEAgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gSURCVHJhbnNhY3Rp
b246Om9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXAKICAgICBJREJEYXRhYmFz
ZU1ldGFkYXRhOjpPYmplY3RTdG9yZU1hcDo6Y29uc3RfaXRlcmF0b3IgbWRpdCA9IG1ldGFkYXRh
Lm9iamVjdFN0b3Jlcy5maW5kKG5hbWUpOwogICAgIEFTU0VSVChtZGl0ICE9IG1ldGFkYXRhLm9i
amVjdFN0b3Jlcy5lbmQoKSk7CiAKLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmU+IG9iamVjdFN0
b3JlID0gSURCT2JqZWN0U3RvcmU6OmNyZWF0ZShtZGl0LT5zZWNvbmQsIG9iamVjdFN0b3JlQmFj
a2VuZCwgdGhpcyk7CisgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlPiBvYmplY3RTdG9yZSA9IElE
Qk9iamVjdFN0b3JlOjpjcmVhdGUobWRpdC0+dmFsdWUsIG9iamVjdFN0b3JlQmFja2VuZCwgdGhp
cyk7CiAgICAgb2JqZWN0U3RvcmVDcmVhdGVkKG5hbWUsIG9iamVjdFN0b3JlKTsKICAgICByZXR1
cm4gb2JqZWN0U3RvcmUucmVsZWFzZSgpOwogfQpAQCAtMTczLDcgKzE3Myw3IEBAIHZvaWQgSURC
VHJhbnNhY3Rpb246Om9iamVjdFN0b3JlRGVsZXRlZChjb25zdCBTdHJpbmcmIG5hbWUpCiAgICAg
QVNTRVJUKGlzVmVyc2lvbkNoYW5nZSgpKTsKICAgICBJREJPYmplY3RTdG9yZU1hcDo6aXRlcmF0
b3IgaXQgPSBtX29iamVjdFN0b3JlTWFwLmZpbmQobmFtZSk7CiAgICAgaWYgKGl0ICE9IG1fb2Jq
ZWN0U3RvcmVNYXAuZW5kKCkpIHsKLSAgICAgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlPiBvYmpl
Y3RTdG9yZSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZT4gb2Jq
ZWN0U3RvcmUgPSBpdC0+dmFsdWU7CiAgICAgICAgIG1fb2JqZWN0U3RvcmVNYXAucmVtb3ZlKG5h
bWUpOwogICAgICAgICBvYmplY3RTdG9yZS0+bWFya0RlbGV0ZWQoKTsKICAgICAgICAgbV9vYmpl
Y3RTdG9yZUNsZWFudXBNYXAuc2V0KG9iamVjdFN0b3JlLCBvYmplY3RTdG9yZS0+bWV0YWRhdGEo
KSk7CkBAIC0yODAsNyArMjgwLDcgQEAgdm9pZCBJREJUcmFuc2FjdGlvbjo6b25BYm9ydCgpCiAK
ICAgICBpZiAoaXNWZXJzaW9uQ2hhbmdlKCkpIHsKICAgICAgICAgZm9yIChJREJPYmplY3RTdG9y
ZU1ldGFkYXRhTWFwOjppdGVyYXRvciBpdCA9IG1fb2JqZWN0U3RvcmVDbGVhbnVwTWFwLmJlZ2lu
KCk7IGl0ICE9IG1fb2JqZWN0U3RvcmVDbGVhbnVwTWFwLmVuZCgpOyArK2l0KQotICAgICAgICAg
ICAgaXQtPmZpcnN0LT5zZXRNZXRhZGF0YShpdC0+c2Vjb25kKTsKKyAgICAgICAgICAgIGl0LT5r
ZXktPnNldE1ldGFkYXRhKGl0LT52YWx1ZSk7CiAgICAgfQogICAgIG1fb2JqZWN0U3RvcmVDbGVh
bnVwTWFwLmNsZWFyKCk7CiAgICAgY2xvc2VPcGVuQ3Vyc29ycygpOwpAQCAtMzY2LDcgKzM2Niw3
IEBAIGJvb2wgSURCVHJhbnNhY3Rpb246OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4g
ZXZlbnQpCiAKICAgICAvLyBCcmVhayByZWZlcmVuY2UgY3ljbGVzLgogICAgIGZvciAoSURCT2Jq
ZWN0U3RvcmVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9vYmplY3RTdG9yZU1hcC5iZWdpbigpOyBpdCAh
PSBtX29iamVjdFN0b3JlTWFwLmVuZCgpOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT50cmFu
c2FjdGlvbkZpbmlzaGVkKCk7CisgICAgICAgIGl0LT52YWx1ZS0+dHJhbnNhY3Rpb25GaW5pc2hl
ZCgpOwogICAgIG1fb2JqZWN0U3RvcmVNYXAuY2xlYXIoKTsKIAogICAgIFZlY3RvcjxSZWZQdHI8
RXZlbnRUYXJnZXQ+ID4gdGFyZ2V0czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZGF0YWJhc2UvQWJzdHJhY3REYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmRhdGFiYXNlL0Fic3RyYWN0RGF0YWJhc2UuY3BwCmluZGV4IGM3NTM5YzYuLjYyOTA3
ZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvQWJzdHJh
Y3REYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9B
YnN0cmFjdERhdGFiYXNlLmNwcApAQCAtMjgyLDcgKzI4Miw3IEBAIGJvb2wgQWJzdHJhY3REYXRh
YmFzZTo6cGVyZm9ybU9wZW5BbmRWZXJpZnkoYm9vbCBzaG91bGRTZXRWZXJzaW9uSW5OZXdEYXRh
YmFzZSwKICAgICAgICAgR3VpZFZlcnNpb25NYXA6Oml0ZXJhdG9yIGVudHJ5ID0gZ3VpZFRvVmVy
c2lvbk1hcCgpLmZpbmQobV9ndWlkKTsKICAgICAgICAgaWYgKGVudHJ5ICE9IGd1aWRUb1ZlcnNp
b25NYXAoKS5lbmQoKSkgewogICAgICAgICAgICAgLy8gTWFwIG51bGwgc3RyaW5nIHRvIGVtcHR5
IHN0cmluZyAoc2VlIHVwZGF0ZUd1aWRWZXJzaW9uTWFwKCkpLgotICAgICAgICAgICAgY3VycmVu
dFZlcnNpb24gPSBlbnRyeS0+c2Vjb25kLmlzTnVsbCgpID8gZW1wdHlTdHJpbmcoKSA6IGVudHJ5
LT5zZWNvbmQuaXNvbGF0ZWRDb3B5KCk7CisgICAgICAgICAgICBjdXJyZW50VmVyc2lvbiA9IGVu
dHJ5LT52YWx1ZS5pc051bGwoKSA/IGVtcHR5U3RyaW5nKCkgOiBlbnRyeS0+dmFsdWUuaXNvbGF0
ZWRDb3B5KCk7CiAgICAgICAgICAgICBMT0coU3RvcmFnZUFQSSwgIkN1cnJlbnQgY2FjaGVkIHZl
cnNpb24gZm9yIGd1aWQgJWkgaXMgJXMiLCBtX2d1aWQsIGN1cnJlbnRWZXJzaW9uLmFzY2lpKCku
ZGF0YSgpKTsKIAogI2lmIFBMQVRGT1JNKENIUk9NSVVNKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3BwCmluZGV4IDBlNTc5
M2MuLmE3ZTgyMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvRGF0YWJhc2VUcmFja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRh
dGFiYXNlL0RhdGFiYXNlVHJhY2tlci5jcHAKQEAgLTI1Miw3ICsyNTIsNyBAQCB2b2lkIERhdGFi
YXNlVHJhY2tlcjo6aW50ZXJydXB0QWxsRGF0YWJhc2VzRm9yQ29udGV4dChjb25zdCBTY3JpcHRF
eGVjdXRpb25Db250ZQogCiAgICAgICAgIERhdGFiYXNlTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3Ig
ZGJOYW1lTWFwRW5kSXQgPSBuYW1lTWFwLT5lbmQoKTsKICAgICAgICAgZm9yIChEYXRhYmFzZU5h
bWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGRiTmFtZU1hcEl0ID0gbmFtZU1hcC0+YmVnaW4oKTsgZGJO
YW1lTWFwSXQgIT0gZGJOYW1lTWFwRW5kSXQ7ICsrZGJOYW1lTWFwSXQpIHsKLSAgICAgICAgICAg
IERhdGFiYXNlU2V0KiBkYXRhYmFzZVNldCA9IGRiTmFtZU1hcEl0LT5zZWNvbmQ7CisgICAgICAg
ICAgICBEYXRhYmFzZVNldCogZGF0YWJhc2VTZXQgPSBkYk5hbWVNYXBJdC0+dmFsdWU7CiAgICAg
ICAgICAgICBEYXRhYmFzZVNldDo6Y29uc3RfaXRlcmF0b3IgZGJTZXRFbmRJdCA9IGRhdGFiYXNl
U2V0LT5lbmQoKTsKICAgICAgICAgICAgIGZvciAoRGF0YWJhc2VTZXQ6OmNvbnN0X2l0ZXJhdG9y
IGRiU2V0SXQgPSBkYXRhYmFzZVNldC0+YmVnaW4oKTsgZGJTZXRJdCAhPSBkYlNldEVuZEl0OyAr
K2RiU2V0SXQpIHsKICAgICAgICAgICAgICAgICBpZiAoKCpkYlNldEl0KS0+c2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpID09IGNvbnRleHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmRhdGFiYXNlL09yaWdpblVzYWdlUmVjb3JkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZGF0YWJhc2UvT3JpZ2luVXNhZ2VSZWNvcmQuY3BwCmluZGV4IDQ0MzU1MGEuLjJi
ZjhhZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvT3Jp
Z2luVXNhZ2VSZWNvcmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvT3JpZ2luVXNhZ2VSZWNvcmQuY3BwCkBAIC05Myw3ICs5Myw3IEBAIHVuc2lnbmVkIGxvbmcg
bG9uZyBPcmlnaW5Vc2FnZVJlY29yZDo6ZGlza1VzYWdlKCkKICAgICBIYXNoTWFwPFN0cmluZywg
RGF0YWJhc2VFbnRyeT46Oml0ZXJhdG9yIGlEYXRhYmFzZSA9IG1fZGF0YWJhc2VNYXAuYmVnaW4o
KTsKICAgICBIYXNoTWFwPFN0cmluZywgRGF0YWJhc2VFbnRyeT46Oml0ZXJhdG9yIGVuZERhdGFi
YXNlID0gbV9kYXRhYmFzZU1hcC5lbmQoKTsKICAgICBmb3IgKDsgaURhdGFiYXNlICE9IGVuZERh
dGFiYXNlOyArK2lEYXRhYmFzZSkKLSAgICAgICAgbV9jYWNoZWREaXNrVXNhZ2UgKz0gaURhdGFi
YXNlLT5zZWNvbmQuc2l6ZTsKKyAgICAgICAgbV9jYWNoZWREaXNrVXNhZ2UgKz0gaURhdGFiYXNl
LT52YWx1ZS5zaXplOwogCiAgICAgbV9jYWNoZWREaXNrVXNhZ2VJc1ZhbGlkID0gdHJ1ZTsKICAg
ICByZXR1cm4gbV9jYWNoZWREaXNrVXNhZ2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNw
cAppbmRleCA4MzdiOGZiLi5kYTNhN2VlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3Iu
Y3BwCkBAIC03OCw3ICs3OCw3IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6YWNx
dWlyZUxvY2soU1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQogICAgICAgICBjb29yZGluYXRp
b25JbmZvSXRlcmF0b3IgPSBtX2Nvb3JkaW5hdGlvbkluZm9NYXAuYWRkKGRiSWRlbnRpZmllciwg
Q29vcmRpbmF0aW9uSW5mbygpKS5pdGVyYXRvcjsKICAgICB9CiAKLSAgICBDb29yZGluYXRpb25J
bmZvJiBpbmZvID0gY29vcmRpbmF0aW9uSW5mb0l0ZXJhdG9yLT5zZWNvbmQ7CisgICAgQ29vcmRp
bmF0aW9uSW5mbyYgaW5mbyA9IGNvb3JkaW5hdGlvbkluZm9JdGVyYXRvci0+dmFsdWU7CiAgICAg
aW5mby5wZW5kaW5nVHJhbnNhY3Rpb25zLmFwcGVuZCh0cmFuc2FjdGlvbik7CiAgICAgcHJvY2Vz
c1BlbmRpbmdUcmFuc2FjdGlvbnMoaW5mbyk7CiB9CkBAIC05Miw3ICs5Miw3IEBAIHZvaWQgU1FM
VHJhbnNhY3Rpb25Db29yZGluYXRvcjo6cmVsZWFzZUxvY2soU1FMVHJhbnNhY3Rpb24qIHRyYW5z
YWN0aW9uKQogCiAgICAgQ29vcmRpbmF0aW9uSW5mb01hcDo6aXRlcmF0b3IgY29vcmRpbmF0aW9u
SW5mb0l0ZXJhdG9yID0gbV9jb29yZGluYXRpb25JbmZvTWFwLmZpbmQoZGJJZGVudGlmaWVyKTsK
ICAgICBBU1NFUlQoY29vcmRpbmF0aW9uSW5mb0l0ZXJhdG9yICE9IG1fY29vcmRpbmF0aW9uSW5m
b01hcC5lbmQoKSk7Ci0gICAgQ29vcmRpbmF0aW9uSW5mbyYgaW5mbyA9IGNvb3JkaW5hdGlvbklu
Zm9JdGVyYXRvci0+c2Vjb25kOworICAgIENvb3JkaW5hdGlvbkluZm8mIGluZm8gPSBjb29yZGlu
YXRpb25JbmZvSXRlcmF0b3ItPnZhbHVlOwogCiAgICAgaWYgKHRyYW5zYWN0aW9uLT5pc1JlYWRP
bmx5KCkpIHsKICAgICAgICAgQVNTRVJUKGluZm8uYWN0aXZlUmVhZFRyYW5zYWN0aW9ucy5jb250
YWlucyh0cmFuc2FjdGlvbikpOwpAQCAtMTEwLDcgKzExMCw3IEBAIHZvaWQgU1FMVHJhbnNhY3Rp
b25Db29yZGluYXRvcjo6c2h1dGRvd24oKQogICAgIC8vIE5vdGlmeSBhbGwgdHJhbnNhY3Rpb25z
IGluIHByb2dyZXNzIHRoYXQgdGhlIGRhdGFiYXNlIHRocmVhZCBpcyBzaHV0dGluZyBkb3duCiAg
ICAgZm9yIChDb29yZGluYXRpb25JbmZvTWFwOjppdGVyYXRvciBjb29yZGluYXRpb25JbmZvSXRl
cmF0b3IgPSBtX2Nvb3JkaW5hdGlvbkluZm9NYXAuYmVnaW4oKTsKICAgICAgICAgIGNvb3JkaW5h
dGlvbkluZm9JdGVyYXRvciAhPSBtX2Nvb3JkaW5hdGlvbkluZm9NYXAuZW5kKCk7ICsrY29vcmRp
bmF0aW9uSW5mb0l0ZXJhdG9yKSB7Ci0gICAgICAgIENvb3JkaW5hdGlvbkluZm8mIGluZm8gPSBj
b29yZGluYXRpb25JbmZvSXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgQ29vcmRpbmF0aW9uSW5m
byYgaW5mbyA9IGNvb3JkaW5hdGlvbkluZm9JdGVyYXRvci0+dmFsdWU7CiAgICAgICAgIGlmIChp
bmZvLmFjdGl2ZVdyaXRlVHJhbnNhY3Rpb24pCiAgICAgICAgICAgICBpbmZvLmFjdGl2ZVdyaXRl
VHJhbnNhY3Rpb24tPm5vdGlmeURhdGFiYXNlVGhyZWFkSXNTaHV0dGluZ0Rvd24oKTsKICAgICAg
ICAgZm9yIChIYXNoU2V0PFJlZlB0cjxTUUxUcmFuc2FjdGlvbj4gPjo6aXRlcmF0b3IgYWN0aXZl
UmVhZFRyYW5zYWN0aW9uc0l0ZXJhdG9yID0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZGF0YWJhc2UvY2hyb21pdW0vRGF0YWJhc2VUcmFja2VyQ2hyb21pdW0uY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9jaHJvbWl1bS9EYXRhYmFzZVRyYWNr
ZXJDaHJvbWl1bS5jcHAKaW5kZXggMTE3ZmRiZS4uNjBhNzZjYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9jaHJvbWl1bS9EYXRhYmFzZVRyYWNrZXJDaHJv
bWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9jaHJvbWl1
bS9EYXRhYmFzZVRyYWNrZXJDaHJvbWl1bS5jcHAKQEAgLTE4MCw3ICsxODAsNyBAQCB2b2lkIERh
dGFiYXNlVHJhY2tlcjo6aW50ZXJydXB0QWxsRGF0YWJhc2VzRm9yQ29udGV4dChjb25zdCBTY3Jp
cHRFeGVjdXRpb25Db250ZQogCiAgICAgRGF0YWJhc2VOYW1lTWFwOjpjb25zdF9pdGVyYXRvciBk
Yk5hbWVNYXBFbmRJdCA9IG5hbWVNYXAtPmVuZCgpOwogICAgIGZvciAoRGF0YWJhc2VOYW1lTWFw
Ojpjb25zdF9pdGVyYXRvciBkYk5hbWVNYXBJdCA9IG5hbWVNYXAtPmJlZ2luKCk7IGRiTmFtZU1h
cEl0ICE9IGRiTmFtZU1hcEVuZEl0OyArK2RiTmFtZU1hcEl0KSB7Ci0gICAgICAgIERhdGFiYXNl
U2V0KiBkYXRhYmFzZVNldCA9IGRiTmFtZU1hcEl0LT5zZWNvbmQ7CisgICAgICAgIERhdGFiYXNl
U2V0KiBkYXRhYmFzZVNldCA9IGRiTmFtZU1hcEl0LT52YWx1ZTsKICAgICAgICAgRGF0YWJhc2VT
ZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGRhdGFiYXNlU2V0LT5lbmQoKTsKICAgICAgICAgZm9y
IChEYXRhYmFzZVNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBkYXRhYmFzZVNldC0+YmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBpZiAoKCppdCktPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKSA9PSBjb250ZXh0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJkYXRhYmFzZS9jaHJvbWl1bS9RdW90YVRyYWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJkYXRhYmFzZS9jaHJvbWl1bS9RdW90YVRyYWNrZXIuY3BwCmluZGV4IDAzNDRj
YTguLjM4MmEzZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvY2hyb21pdW0vUXVvdGFUcmFja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmRhdGFiYXNlL2Nocm9taXVtL1F1b3RhVHJhY2tlci5jcHAKQEAgLTUzLDggKzUzLDggQEAg
dm9pZCBRdW90YVRyYWNrZXI6OmdldERhdGFiYXNlU2l6ZUFuZFNwYWNlQXZhaWxhYmxlVG9Pcmln
aW4oCiAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhKG1fZGF0YUd1YXJkKTsKICAgICAgICAg
QVNTRVJUKG1fZGF0YWJhc2VTaXplcy5jb250YWlucyhvcmlnaW5JZGVudGlmaWVyKSk7CiAgICAg
ICAgIEhhc2hNYXA8U3RyaW5nLCBTaXplTWFwPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2RhdGFi
YXNlU2l6ZXMuZmluZChvcmlnaW5JZGVudGlmaWVyKTsKLSAgICAgICAgQVNTRVJUKGl0LT5zZWNv
bmQuY29udGFpbnMoZGF0YWJhc2VOYW1lKSk7Ci0gICAgICAgICpkYXRhYmFzZVNpemUgPSBpdC0+
c2Vjb25kLmdldChkYXRhYmFzZU5hbWUpOworICAgICAgICBBU1NFUlQoaXQtPnZhbHVlLmNvbnRh
aW5zKGRhdGFiYXNlTmFtZSkpOworICAgICAgICAqZGF0YWJhc2VTaXplID0gaXQtPnZhbHVlLmdl
dChkYXRhYmFzZU5hbWUpOwogCiAgICAgICAgIGlmIChtX3NwYWNlQXZhaWxhYmxlVG9PcmlnaW5z
LmNvbnRhaW5zKG9yaWdpbklkZW50aWZpZXIpKSB7CiAgICAgICAgICAgICAqc3BhY2VBdmFpbGFi
bGUgPSBtX3NwYWNlQXZhaWxhYmxlVG9PcmlnaW5zLmdldChvcmlnaW5JZGVudGlmaWVyKTsKQEAg
LTcyLDcgKzcyLDcgQEAgdm9pZCBRdW90YVRyYWNrZXI6OnVwZGF0ZURhdGFiYXNlU2l6ZSgKIHsK
ICAgICBNdXRleExvY2tlciBsb2NrRGF0YShtX2RhdGFHdWFyZCk7CiAgICAgSGFzaE1hcDxTdHJp
bmcsIFNpemVNYXA+OjppdGVyYXRvciBpdCA9IG1fZGF0YWJhc2VTaXplcy5hZGQob3JpZ2luSWRl
bnRpZmllciwgU2l6ZU1hcCgpKS5pdGVyYXRvcjsKLSAgICBpdC0+c2Vjb25kLnNldChkYXRhYmFz
ZU5hbWUsIGRhdGFiYXNlU2l6ZSk7CisgICAgaXQtPnZhbHVlLnNldChkYXRhYmFzZU5hbWUsIGRh
dGFiYXNlU2l6ZSk7CiB9CiAKIHZvaWQgUXVvdGFUcmFja2VyOjp1cGRhdGVTcGFjZUF2YWlsYWJs
ZVRvT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllciwgdW5zaWduZWQgbG9uZyBs
b25nIHNwYWNlQXZhaWxhYmxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJzb2NrZXRzL1dlYlNvY2tldERlZmxhdGVGcmFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldERlZmxhdGVGcmFtZXIuY3BwCmluZGV4IDc2YzA0MGQu
LjY3YmIzZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9X
ZWJTb2NrZXREZWZsYXRlRnJhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YnNvY2tldHMvV2ViU29ja2V0RGVmbGF0ZUZyYW1lci5jcHAKQEAgLTg3LDcgKzg3LDcgQEAgYm9v
bCBXZWJTb2NrZXRFeHRlbnNpb25EZWZsYXRlRnJhbWU6OnByb2Nlc3NSZXNwb25zZShjb25zdCBI
YXNoTWFwPFN0cmluZywgU3RyaW4KICAgICBpbnQgd2luZG93Qml0cyA9IDE1OwogICAgIEhhc2hN
YXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBwYXJhbWV0ZXIgPSBzZXJ2ZXJQYXJh
bWV0ZXJzLmZpbmQoIm1heF93aW5kb3dfYml0cyIpOwogICAgIGlmIChwYXJhbWV0ZXIgIT0gc2Vy
dmVyUGFyYW1ldGVycy5lbmQoKSkgewotICAgICAgICB3aW5kb3dCaXRzID0gcGFyYW1ldGVyLT5z
ZWNvbmQudG9JbnQoKTsKKyAgICAgICAgd2luZG93Qml0cyA9IHBhcmFtZXRlci0+dmFsdWUudG9J
bnQoKTsKICAgICAgICAgaWYgKHdpbmRvd0JpdHMgPCA4IHx8IHdpbmRvd0JpdHMgPiAxNSkgewog
ICAgICAgICAgICAgbV9mYWlsdXJlUmVhc29uID0gIlJlY2VpdmVkIGludmFsaWQgbWF4X3dpbmRv
d19iaXRzIHBhcmFtZXRlciI7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC05OCw3ICs5
OCw3IEBAIGJvb2wgV2ViU29ja2V0RXh0ZW5zaW9uRGVmbGF0ZUZyYW1lOjpwcm9jZXNzUmVzcG9u
c2UoY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluCiAgICAgV2ViU29ja2V0RGVmbGF0ZXI6OkNv
bnRleHRUYWtlT3Zlck1vZGUgbW9kZSA9IFdlYlNvY2tldERlZmxhdGVyOjpUYWtlT3ZlckNvbnRl
eHQ7CiAgICAgcGFyYW1ldGVyID0gc2VydmVyUGFyYW1ldGVycy5maW5kKCJub19jb250ZXh0X3Rh
a2VvdmVyIik7CiAgICAgaWYgKHBhcmFtZXRlciAhPSBzZXJ2ZXJQYXJhbWV0ZXJzLmVuZCgpKSB7
Ci0gICAgICAgIGlmICghcGFyYW1ldGVyLT5zZWNvbmQuaXNOdWxsKCkpIHsKKyAgICAgICAgaWYg
KCFwYXJhbWV0ZXItPnZhbHVlLmlzTnVsbCgpKSB7CiAgICAgICAgICAgICBtX2ZhaWx1cmVSZWFz
b24gPSAiUmVjZWl2ZWQgaW52YWxpZCBub19jb250ZXh0X3Rha2VvdmVyIHBhcmFtZXRlciI7CiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRFeHRlbnNpb25E
aXNwYXRjaGVyLmNwcAppbmRleCA3YzU5MmFkLi41NjA5ZjY1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0RXh0ZW5zaW9uRGlzcGF0Y2hlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEV4dGVu
c2lvbkRpc3BhdGNoZXIuY3BwCkBAIC0xODEsMTAgKzE4MSwxMCBAQCB2b2lkIFdlYlNvY2tldEV4
dGVuc2lvbkRpc3BhdGNoZXI6OmFwcGVuZEFjY2VwdGVkRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYg
ZXh0ZW5zaQogICAgIC8vIEZJWE1FOiBTaG91bGQgdXNlIExpc3RIYXNoU2V0IHRvIGtlZXAgdGhl
IG9yZGVyIG9mIHRoZSBwYXJhbWV0ZXJzLgogICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIFN0cmlu
Zz46OmNvbnN0X2l0ZXJhdG9yIGl0ZXJhdG9yID0gZXh0ZW5zaW9uUGFyYW1ldGVycy5iZWdpbigp
OyBpdGVyYXRvciAhPSBleHRlbnNpb25QYXJhbWV0ZXJzLmVuZCgpOyArK2l0ZXJhdG9yKSB7CiAg
ICAgICAgIG1fYWNjZXB0ZWRFeHRlbnNpb25zQnVpbGRlci5hcHBlbmQoIjsgIik7Ci0gICAgICAg
IG1fYWNjZXB0ZWRFeHRlbnNpb25zQnVpbGRlci5hcHBlbmQoaXRlcmF0b3ItPmZpcnN0KTsKLSAg
ICAgICAgaWYgKCFpdGVyYXRvci0+c2Vjb25kLmlzTnVsbCgpKSB7CisgICAgICAgIG1fYWNjZXB0
ZWRFeHRlbnNpb25zQnVpbGRlci5hcHBlbmQoaXRlcmF0b3ItPmtleSk7CisgICAgICAgIGlmICgh
aXRlcmF0b3ItPnZhbHVlLmlzTnVsbCgpKSB7CiAgICAgICAgICAgICBtX2FjY2VwdGVkRXh0ZW5z
aW9uc0J1aWxkZXIuYXBwZW5kKCI9Iik7Ci0gICAgICAgICAgICBtX2FjY2VwdGVkRXh0ZW5zaW9u
c0J1aWxkZXIuYXBwZW5kKGl0ZXJhdG9yLT5zZWNvbmQpOworICAgICAgICAgICAgbV9hY2NlcHRl
ZEV4dGVuc2lvbnNCdWlsZGVyLmFwcGVuZChpdGVyYXRvci0+dmFsdWUpOwogICAgICAgICB9CiAg
ICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVj
dENhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5j
cHAKaW5kZXggZGFkNGM4NC4uNmIzYTM3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCkBAIC05NCw3ICs5NCw3IEBAIEFYT2JqZWN0Q2FjaGU6
On5BWE9iamVjdENhY2hlKCkKIHsKICAgICBIYXNoTWFwPEFYSUQsIFJlZlB0cjxBY2Nlc3NpYmls
aXR5T2JqZWN0PiA+OjppdGVyYXRvciBlbmQgPSBtX29iamVjdHMuZW5kKCk7CiAgICAgZm9yIChI
YXNoTWFwPEFYSUQsIFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiA+OjppdGVyYXRvciBpdCA9
IG1fb2JqZWN0cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgQWNjZXNzaWJp
bGl0eU9iamVjdCogb2JqID0gKCppdCkuc2Vjb25kLmdldCgpOworICAgICAgICBBY2Nlc3NpYmls
aXR5T2JqZWN0KiBvYmogPSAoKml0KS52YWx1ZS5nZXQoKTsKICAgICAgICAgZGV0YWNoV3JhcHBl
cihvYmopOwogICAgICAgICBvYmotPmRldGFjaCgpOwogICAgICAgICByZW1vdmVBWElEKG9iaik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0RPTU9iamVjdENh
Y2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvRE9NT2JqZWN0Q2FjaGUu
Y3BwCmluZGV4IDJlN2YxMDYuLmRkN2QwNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2dvYmplY3QvRE9NT2JqZWN0Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2dvYmplY3QvRE9NT2JqZWN0Q2FjaGUuY3BwCkBAIC03NCw3ICs3NCw3IEBAIHZvaWQg
RE9NT2JqZWN0Q2FjaGU6OmNsZWFyQnlGcmFtZShXZWJDb3JlOjpGcmFtZSogZnJhbWUpCiAgICAg
Ly8gaXRlcmF0aW5nIHRoZSBjYWNoZSBpdHNlbGYuCiAgICAgRE9NT2JqZWN0TWFwOjppdGVyYXRv
ciBlbmQgPSBkb21PYmplY3RzKCkuZW5kKCk7CiAgICAgZm9yIChET01PYmplY3RNYXA6Oml0ZXJh
dG9yIGl0ZXIgPSBkb21PYmplY3RzKCkuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewot
ICAgICAgICBET01PYmplY3RDYWNoZURhdGEqIGRhdGEgPSBpdGVyLT5zZWNvbmQ7CisgICAgICAg
IERPTU9iamVjdENhY2hlRGF0YSogZGF0YSA9IGl0ZXItPnZhbHVlOwogICAgICAgICBBU1NFUlQo
ZGF0YSk7CiAgICAgICAgIGlmICgoIWZyYW1lIHx8IGRhdGEtPmZyYW1lID09IGZyYW1lKSAmJiBk
YXRhLT50aW1lc1JldHVybmVkKQogICAgICAgICAgICAgdG9VbnJlZi5hcHBlbmQoZGF0YSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01PYmplY3RIYXNoVGFibGVN
YXAuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTU9iamVjdEhhc2hUYWJsZU1hcC5o
CmluZGV4IDY0ODI4ZDYuLjc1M2MwNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0RPTU9iamVjdEhhc2hUYWJsZU1hcC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0RPTU9iamVjdEhhc2hUYWJsZU1hcC5oCkBAIC0zOSwxNSArMzksMTUgQEAgcHVibGlj
OgogICAgIH5ET01PYmplY3RIYXNoVGFibGVNYXAoKQogICAgIHsKICAgICAgICAgZm9yIChIYXNo
TWFwPGNvbnN0IEpTQzo6SGFzaFRhYmxlKiwgSlNDOjpIYXNoVGFibGU+OjppdGVyYXRvciBpdGVy
ID0gbV9tYXAuYmVnaW4oKTsgaXRlciAhPSBtX21hcC5lbmQoKTsgKytpdGVyKQotICAgICAgICAg
ICAgaXRlci0+c2Vjb25kLmRlbGV0ZVRhYmxlKCk7CisgICAgICAgICAgICBpdGVyLT52YWx1ZS5k
ZWxldGVUYWJsZSgpOwogICAgIH0KIAogICAgIGNvbnN0IEpTQzo6SGFzaFRhYmxlKiBnZXQoY29u
c3QgSlNDOjpIYXNoVGFibGUqIHN0YXRpY1RhYmxlKQogICAgIHsKICAgICAgICAgSGFzaE1hcDxj
b25zdCBKU0M6Okhhc2hUYWJsZSosIEpTQzo6SGFzaFRhYmxlPjo6aXRlcmF0b3IgaXRlciA9IG1f
bWFwLmZpbmQoc3RhdGljVGFibGUpOwogICAgICAgICBpZiAoaXRlciAhPSBtX21hcC5lbmQoKSkK
LSAgICAgICAgICAgIHJldHVybiAmaXRlci0+c2Vjb25kOwotICAgICAgICByZXR1cm4gJm1fbWFw
LnNldChzdGF0aWNUYWJsZSwgc3RhdGljVGFibGUtPmNvcHkoKSkuaXRlcmF0b3ItPnNlY29uZDsK
KyAgICAgICAgICAgIHJldHVybiAmaXRlci0+dmFsdWU7CisgICAgICAgIHJldHVybiAmbV9tYXAu
c2V0KHN0YXRpY1RhYmxlLCBzdGF0aWNUYWJsZS0+Y29weSgpKS5pdGVyYXRvci0+dmFsdWU7CiAg
ICAgfQogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01CaW5kaW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGlu
Zy5jcHAKaW5kZXggMzFmMjVkYS4uYTE5OThmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTUJpbmRpbmcuY3BwCkBAIC0yNzQsNyArMjc0LDcgQEAgU3RydWN0dXJlKiBjYWNo
ZURPTVN0cnVjdHVyZShKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUq
IHN0cnVjdHUKIHsKICAgICBKU0RPTVN0cnVjdHVyZU1hcCYgc3RydWN0dXJlcyA9IGdsb2JhbE9i
amVjdC0+c3RydWN0dXJlcygpOwogICAgIEFTU0VSVCghc3RydWN0dXJlcy5jb250YWlucyhjbGFz
c0luZm8pKTsKLSAgICByZXR1cm4gc3RydWN0dXJlcy5zZXQoY2xhc3NJbmZvLCBXcml0ZUJhcnJp
ZXI8U3RydWN0dXJlPihnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LCBz
dHJ1Y3R1cmUpKS5pdGVyYXRvci0+c2Vjb25kLmdldCgpOworICAgIHJldHVybiBzdHJ1Y3R1cmVz
LnNldChjbGFzc0luZm8sIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KGdsb2JhbE9iamVjdC0+Z2xv
YmFsRGF0YSgpLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkpLml0ZXJhdG9yLT52YWx1ZS5nZXQo
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwCmluZGV4IDM2MTA0ODAuLmQzYzQyOWEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAK
QEAgLTg4LDExICs4OCwxMSBAQCB2b2lkIEpTRE9NR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAKICAgICBKU0RPTVN0cnVjdHVy
ZU1hcDo6aXRlcmF0b3IgZW5kID0gdGhpc09iamVjdC0+c3RydWN0dXJlcygpLmVuZCgpOwogICAg
IGZvciAoSlNET01TdHJ1Y3R1cmVNYXA6Oml0ZXJhdG9yIGl0ID0gdGhpc09iamVjdC0+c3RydWN0
dXJlcygpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgdmlzaXRvci5hcHBlbmQo
Jml0LT5zZWNvbmQpOworICAgICAgICB2aXNpdG9yLmFwcGVuZCgmaXQtPnZhbHVlKTsKIAogICAg
IEpTRE9NQ29uc3RydWN0b3JNYXA6Oml0ZXJhdG9yIGVuZDIgPSB0aGlzT2JqZWN0LT5jb25zdHJ1
Y3RvcnMoKS5lbmQoKTsKICAgICBmb3IgKEpTRE9NQ29uc3RydWN0b3JNYXA6Oml0ZXJhdG9yIGl0
MiA9IHRoaXNPYmplY3QtPmNvbnN0cnVjdG9ycygpLmJlZ2luKCk7IGl0MiAhPSBlbmQyOyArK2l0
MikKLSAgICAgICAgdmlzaXRvci5hcHBlbmQoJml0Mi0+c2Vjb25kKTsKKyAgICAgICAgdmlzaXRv
ci5hcHBlbmQoJml0Mi0+dmFsdWUpOwogfQogCiB2b2lkIEpTRE9NR2xvYmFsT2JqZWN0OjpzZXRD
dXJyZW50RXZlbnQoRXZlbnQqIGN1cnJlbnRFdmVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oCmluZGV4IGJkYWI1NjguLjljYzE3MWIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuaApAQCAtOTMs
NyArOTMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEpTQzo6SlNPYmplY3QqIGNv
bnN0cnVjdG9yID0gQ29uc3RydWN0b3JDbGFzczo6Y3JlYXRlKGV4ZWMsIENvbnN0cnVjdG9yQ2xh
c3M6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIGNvbnN0X2Nhc3Q8SlNET01H
bG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpLCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlw
ZSgpKSwgY29uc3RfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOwogICAg
ICAgICBBU1NFUlQoIWNvbnN0X2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3Qp
LT5jb25zdHJ1Y3RvcnMoKS5jb250YWlucygmQ29uc3RydWN0b3JDbGFzczo6c19pbmZvKSk7CiAg
ICAgICAgIEpTQzo6V3JpdGVCYXJyaWVyPEpTQzo6SlNPYmplY3Q+IHRlbXA7Ci0gICAgICAgIGNv
bnN0X2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpLT5jb25zdHJ1Y3RvcnMo
KS5hZGQoJkNvbnN0cnVjdG9yQ2xhc3M6OnNfaW5mbywgdGVtcCkuaXRlcmF0b3ItPnNlY29uZC5z
ZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QsIGNvbnN0cnVjdG9yKTsKKyAgICAg
ICAgY29uc3RfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCktPmNvbnN0cnVj
dG9ycygpLmFkZCgmQ29uc3RydWN0b3JDbGFzczo6c19pbmZvLCB0ZW1wKS5pdGVyYXRvci0+dmFs
dWUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LCBjb25zdHJ1Y3Rvcik7CiAg
ICAgICAgIHJldHVybiBjb25zdHJ1Y3RvcjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCmluZGV4IGZmMGFlZWYu
LmVkNzQzY2MgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1BhZ2VTY3Jp
cHREZWJ1Z1NlcnZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUGFnZVNj
cmlwdERlYnVnU2VydmVyLmNwcApAQCAtODIsNyArODIsNyBAQCB2b2lkIFBhZ2VTY3JpcHREZWJ1
Z1NlcnZlcjo6YWRkTGlzdGVuZXIoU2NyaXB0RGVidWdMaXN0ZW5lciogbGlzdGVuZXIsIFBhZ2Uq
IHBhZwogICAgIEFTU0VSVF9BUkcobGlzdGVuZXIsIGxpc3RlbmVyKTsKICAgICBBU1NFUlRfQVJH
KHBhZ2UsIHBhZ2UpOwogCi0gICAgT3duUHRyPExpc3RlbmVyU2V0PiYgbGlzdGVuZXJzID0gbV9w
YWdlTGlzdGVuZXJzTWFwLmFkZChwYWdlLCBudWxscHRyKS5pdGVyYXRvci0+c2Vjb25kOworICAg
IE93blB0cjxMaXN0ZW5lclNldD4mIGxpc3RlbmVycyA9IG1fcGFnZUxpc3RlbmVyc01hcC5hZGQo
cGFnZSwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghbGlzdGVuZXJzKQogICAg
ICAgICBsaXN0ZW5lcnMgPSBhZG9wdFB0cihuZXcgTGlzdGVuZXJTZXQpOwogICAgIGxpc3RlbmVy
cy0+YWRkKGxpc3RlbmVyKTsKQEAgLTEwMCw3ICsxMDAsNyBAQCB2b2lkIFBhZ2VTY3JpcHREZWJ1
Z1NlcnZlcjo6cmVtb3ZlTGlzdGVuZXIoU2NyaXB0RGVidWdMaXN0ZW5lciogbGlzdGVuZXIsIFBh
Z2UqCiAgICAgaWYgKGl0ID09IG1fcGFnZUxpc3RlbmVyc01hcC5lbmQoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgTGlzdGVuZXJTZXQqIGxpc3RlbmVycyA9IGl0LT5zZWNvbmQuZ2V0KCk7Cisg
ICAgTGlzdGVuZXJTZXQqIGxpc3RlbmVycyA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICBsaXN0ZW5l
cnMtPnJlbW92ZShsaXN0ZW5lcik7CiAgICAgaWYgKGxpc3RlbmVycy0+aXNFbXB0eSgpKSB7CiAg
ICAgICAgIG1fcGFnZUxpc3RlbmVyc01hcC5yZW1vdmUoaXQpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENhY2hlZEZyYW1lRGF0YS5jcHAKaW5kZXggOWNmNGU5
OS4uYjk5YTNkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0
Q2FjaGVkRnJhbWVEYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3Jp
cHRDYWNoZWRGcmFtZURhdGEuY3BwCkBAIC01Myw4ICs1Myw4IEBAIFNjcmlwdENhY2hlZEZyYW1l
RGF0YTo6U2NyaXB0Q2FjaGVkRnJhbWVEYXRhKEZyYW1lKiBmcmFtZSkKIAogICAgIFNjcmlwdENv
bnRyb2xsZXI6OlNoZWxsTWFwOjppdGVyYXRvciB3aW5kb3dTaGVsbHNFbmQgPSB3aW5kb3dTaGVs
bHMuZW5kKCk7CiAgICAgZm9yIChTY3JpcHRDb250cm9sbGVyOjpTaGVsbE1hcDo6aXRlcmF0b3Ig
aXRlciA9IHdpbmRvd1NoZWxscy5iZWdpbigpOyBpdGVyICE9IHdpbmRvd1NoZWxsc0VuZDsgKytp
dGVyKSB7Ci0gICAgICAgIEpTRE9NV2luZG93KiB3aW5kb3cgPSBpdGVyLT5zZWNvbmQtPndpbmRv
dygpOwotICAgICAgICBtX3dpbmRvd3MuYWRkKGl0ZXItPmZpcnN0LmdldCgpLCBTdHJvbmc8SlNE
T01XaW5kb3c+KHdpbmRvdy0+Z2xvYmFsRGF0YSgpLCB3aW5kb3cpKTsKKyAgICAgICAgSlNET01X
aW5kb3cqIHdpbmRvdyA9IGl0ZXItPnZhbHVlLT53aW5kb3coKTsKKyAgICAgICAgbV93aW5kb3dz
LmFkZChpdGVyLT5rZXkuZ2V0KCksIFN0cm9uZzxKU0RPTVdpbmRvdz4od2luZG93LT5nbG9iYWxE
YXRhKCksIHdpbmRvdykpOwogICAgIH0KIAogICAgIHNjcmlwdENvbnRyb2xsZXItPmF0dGFjaERl
YnVnZ2VyKDApOwpAQCAtNzQsOCArNzQsOCBAQCB2b2lkIFNjcmlwdENhY2hlZEZyYW1lRGF0YTo6
cmVzdG9yZShGcmFtZSogZnJhbWUpCiAKICAgICBTY3JpcHRDb250cm9sbGVyOjpTaGVsbE1hcDo6
aXRlcmF0b3Igd2luZG93U2hlbGxzRW5kID0gd2luZG93U2hlbGxzLmVuZCgpOwogICAgIGZvciAo
U2NyaXB0Q29udHJvbGxlcjo6U2hlbGxNYXA6Oml0ZXJhdG9yIGl0ZXIgPSB3aW5kb3dTaGVsbHMu
YmVnaW4oKTsgaXRlciAhPSB3aW5kb3dTaGVsbHNFbmQ7ICsraXRlcikgewotICAgICAgICBET01X
cmFwcGVyV29ybGQqIHdvcmxkID0gaXRlci0+Zmlyc3QuZ2V0KCk7Ci0gICAgICAgIEpTRE9NV2lu
ZG93U2hlbGwqIHdpbmRvd1NoZWxsID0gaXRlci0+c2Vjb25kLmdldCgpOworICAgICAgICBET01X
cmFwcGVyV29ybGQqIHdvcmxkID0gaXRlci0+a2V5LmdldCgpOworICAgICAgICBKU0RPTVdpbmRv
d1NoZWxsKiB3aW5kb3dTaGVsbCA9IGl0ZXItPnZhbHVlLmdldCgpOwogCiAgICAgICAgIGlmIChK
U0RPTVdpbmRvdyogd2luZG93ID0gbV93aW5kb3dzLmdldCh3b3JsZCkuZ2V0KCkpCiAgICAgICAg
ICAgICB3aW5kb3dTaGVsbC0+c2V0V2luZG93KHdpbmRvdy0+Z2xvYmFsRGF0YSgpLCB3aW5kb3cp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcApp
bmRleCAwNmM3OTk2Li41M2I0NWFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TY3JpcHRDb250cm9sbGVyLmNwcApAQCAtOTMsNyArOTMsNyBAQCBTY3JpcHRDb250cm9sbGVy
Ojp+U2NyaXB0Q29udHJvbGxlcigpCiAgICAgLy8gSXQncyBsaWtlbHkgdGhhdCBkZXN0cm95aW5n
IG1fd2luZG93U2hlbGxzIHdpbGwgY3JlYXRlIGEgbG90IG9mIGdhcmJhZ2UuCiAgICAgaWYgKCFt
X3dpbmRvd1NoZWxscy5pc0VtcHR5KCkpIHsKICAgICAgICAgd2hpbGUgKCFtX3dpbmRvd1NoZWxs
cy5pc0VtcHR5KCkpCi0gICAgICAgICAgICBkZXN0cm95V2luZG93U2hlbGwobV93aW5kb3dTaGVs
bHMuYmVnaW4oKS0+Zmlyc3QuZ2V0KCkpOworICAgICAgICAgICAgZGVzdHJveVdpbmRvd1NoZWxs
KG1fd2luZG93U2hlbGxzLmJlZ2luKCktPmtleS5nZXQoKSk7CiAgICAgICAgIGdjQ29udHJvbGxl
cigpLmdhcmJhZ2VDb2xsZWN0U29vbigpOwogICAgIH0KIH0KQEAgLTE4MCw3ICsxODAsNyBAQCB2
b2lkIFNjcmlwdENvbnRyb2xsZXI6OmNsZWFyV2luZG93U2hlbGwoYm9vbCBnb2luZ0ludG9QYWdl
Q2FjaGUpCiAgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0ds
b2JhbERhdGEoKSk7CiAKICAgICBmb3IgKFNoZWxsTWFwOjppdGVyYXRvciBpdGVyID0gbV93aW5k
b3dTaGVsbHMuYmVnaW4oKTsgaXRlciAhPSBtX3dpbmRvd1NoZWxscy5lbmQoKTsgKytpdGVyKSB7
Ci0gICAgICAgIEpTRE9NV2luZG93U2hlbGwqIHdpbmRvd1NoZWxsID0gaXRlci0+c2Vjb25kLmdl
dCgpOworICAgICAgICBKU0RPTVdpbmRvd1NoZWxsKiB3aW5kb3dTaGVsbCA9IGl0ZXItPnZhbHVl
LmdldCgpOwogCiAgICAgICAgIC8vIENsZWFyIHRoZSBkZWJ1Z2dlciBmcm9tIHRoZSBjdXJyZW50
IHdpbmRvdyBiZWZvcmUgc2V0dGluZyB0aGUgbmV3IHdpbmRvdy4KICAgICAgICAgYXR0YWNoRGVi
dWdnZXIod2luZG93U2hlbGwsIDApOwpAQCAtMjY0LDcgKzI2NCw3IEBAIGJvb2wgU2NyaXB0Q29u
dHJvbGxlcjo6Y2FuQWNjZXNzRnJvbUN1cnJlbnRPcmlnaW4oRnJhbWUgKmZyYW1lKQogdm9pZCBT
Y3JpcHRDb250cm9sbGVyOjphdHRhY2hEZWJ1Z2dlcihKU0M6OkRlYnVnZ2VyKiBkZWJ1Z2dlcikK
IHsKICAgICBmb3IgKFNoZWxsTWFwOjppdGVyYXRvciBpdGVyID0gbV93aW5kb3dTaGVsbHMuYmVn
aW4oKTsgaXRlciAhPSBtX3dpbmRvd1NoZWxscy5lbmQoKTsgKytpdGVyKQotICAgICAgICBhdHRh
Y2hEZWJ1Z2dlcihpdGVyLT5zZWNvbmQuZ2V0KCksIGRlYnVnZ2VyKTsKKyAgICAgICAgYXR0YWNo
RGVidWdnZXIoaXRlci0+dmFsdWUuZ2V0KCksIGRlYnVnZ2VyKTsKIH0KIAogdm9pZCBTY3JpcHRD
b250cm9sbGVyOjphdHRhY2hEZWJ1Z2dlcihKU0RPTVdpbmRvd1NoZWxsKiBzaGVsbCwgSlNDOjpE
ZWJ1Z2dlciogZGVidWdnZXIpCkBAIC0yODUsOCArMjg1LDggQEAgdm9pZCBTY3JpcHRDb250cm9s
bGVyOjp1cGRhdGVEb2N1bWVudCgpCiAgICAgICAgIHJldHVybjsKIAogICAgIGZvciAoU2hlbGxN
YXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3dpbmRvd1NoZWxscy5iZWdpbigpOyBpdGVyICE9IG1fd2lu
ZG93U2hlbGxzLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soaXRl
ci0+Zmlyc3QtPmdsb2JhbERhdGEoKSk7Ci0gICAgICAgIGl0ZXItPnNlY29uZC0+d2luZG93KCkt
PnVwZGF0ZURvY3VtZW50KCk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGl0ZXItPmtleS0+
Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgaXRlci0+dmFsdWUtPndpbmRvdygpLT51cGRhdGVEb2N1
bWVudCgpOwogICAgIH0KIH0KIApAQCAtMzIzLDcgKzMyMyw3IEBAIFBhc3NSZWZQdHI8QmluZGlu
Z3M6OlJvb3RPYmplY3Q+IFNjcmlwdENvbnRyb2xsZXI6OmNyZWF0ZVJvb3RPYmplY3Qodm9pZCog
bmF0aXZlCiB7CiAgICAgUm9vdE9iamVjdE1hcDo6aXRlcmF0b3IgaXQgPSBtX3Jvb3RPYmplY3Rz
LmZpbmQobmF0aXZlSGFuZGxlKTsKICAgICBpZiAoaXQgIT0gbV9yb290T2JqZWN0cy5lbmQoKSkK
LSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBpdC0+dmFsdWU7CiAK
ICAgICBSZWZQdHI8QmluZGluZ3M6OlJvb3RPYmplY3Q+IHJvb3RPYmplY3QgPSBCaW5kaW5nczo6
Um9vdE9iamVjdDo6Y3JlYXRlKG5hdGl2ZUhhbmRsZSwgZ2xvYmFsT2JqZWN0KHBsdWdpbldvcmxk
KCkpKTsKIApAQCAtMzM5LDggKzMzOSw4IEBAIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6c2V0Q2Fw
dHVyZUNhbGxTdGFja0ZvclVuY2F1Z2h0RXhjZXB0aW9ucyhib29sKQogdm9pZCBTY3JpcHRDb250
cm9sbGVyOjpjb2xsZWN0SXNvbGF0ZWRDb250ZXh0cyhWZWN0b3I8c3RkOjpwYWlyPEpTQzo6RXhl
Y1N0YXRlKiwgU2VjdXJpdHlPcmlnaW4qPiA+JiByZXN1bHQpCiB7CiAgICAgZm9yIChTaGVsbE1h
cDo6aXRlcmF0b3IgaXRlciA9IG1fd2luZG93U2hlbGxzLmJlZ2luKCk7IGl0ZXIgIT0gbV93aW5k
b3dTaGVsbHMuZW5kKCk7ICsraXRlcikgewotICAgICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9
IGl0ZXItPnNlY29uZC0+d2luZG93KCktPmdsb2JhbEV4ZWMoKTsKLSAgICAgICAgU2VjdXJpdHlP
cmlnaW4qIG9yaWdpbiA9IGl0ZXItPnNlY29uZC0+d2luZG93KCktPmltcGwoKS0+c2VjdXJpdHlP
cmlnaW4oKTsKKyAgICAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBpdGVyLT52YWx1ZS0+d2lu
ZG93KCktPmdsb2JhbEV4ZWMoKTsKKyAgICAgICAgU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiA9IGl0
ZXItPnZhbHVlLT53aW5kb3coKS0+aW1wbCgpLT5zZWN1cml0eU9yaWdpbigpOwogICAgICAgICBy
ZXN1bHQuYXBwZW5kKHN0ZDo6cGFpcjxTY3JpcHRTdGF0ZSosIFNlY3VyaXR5T3JpZ2luKj4oZXhl
Yywgb3JpZ2luKSk7CiAgICAgfQogfQpAQCAtNDE4LDcgKzQxOCw3IEBAIHZvaWQgU2NyaXB0Q29u
dHJvbGxlcjo6Y2xlYW51cFNjcmlwdE9iamVjdHNGb3JQbHVnaW4odm9pZCogbmF0aXZlSGFuZGxl
KQogICAgIGlmIChpdCA9PSBtX3Jvb3RPYmplY3RzLmVuZCgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBpdC0+c2Vjb25kLT5pbnZhbGlkYXRlKCk7CisgICAgaXQtPnZhbHVlLT5pbnZhbGlkYXRl
KCk7CiAgICAgbV9yb290T2JqZWN0cy5yZW1vdmUoaXQpOwogfQogCkBAIC00MjgsNyArNDI4LDcg
QEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpjbGVhclNjcmlwdE9iamVjdHMoKQogCiAgICAgUm9v
dE9iamVjdE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9yb290T2JqZWN0cy5lbmQoKTsKICAg
ICBmb3IgKFJvb3RPYmplY3RNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9yb290T2JqZWN0cy5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPmludmFsaWRhdGUo
KTsKKyAgICAgICAgaXQtPnZhbHVlLT5pbnZhbGlkYXRlKCk7CiAKICAgICBtX3Jvb3RPYmplY3Rz
LmNsZWFyKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Njcmlw
dENvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xs
ZXIuaAppbmRleCAwZWQ5ODY5Li5kNmE3ZjdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvU2NyaXB0Q29udHJvbGxlci5oCkBAIC03NCwxMiArNzQsMTIgQEAgcHVibGljOgogICAg
IEpTRE9NV2luZG93U2hlbGwqIHdpbmRvd1NoZWxsKERPTVdyYXBwZXJXb3JsZCogd29ybGQpCiAg
ICAgewogICAgICAgICBTaGVsbE1hcDo6aXRlcmF0b3IgaXRlciA9IG1fd2luZG93U2hlbGxzLmZp
bmQod29ybGQpOwotICAgICAgICByZXR1cm4gKGl0ZXIgIT0gbV93aW5kb3dTaGVsbHMuZW5kKCkp
ID8gaXRlci0+c2Vjb25kLmdldCgpIDogaW5pdFNjcmlwdCh3b3JsZCk7CisgICAgICAgIHJldHVy
biAoaXRlciAhPSBtX3dpbmRvd1NoZWxscy5lbmQoKSkgPyBpdGVyLT52YWx1ZS5nZXQoKSA6IGlu
aXRTY3JpcHQod29ybGQpOwogICAgIH0KICAgICBKU0RPTVdpbmRvd1NoZWxsKiBleGlzdGluZ1dp
bmRvd1NoZWxsKERPTVdyYXBwZXJXb3JsZCogd29ybGQpIGNvbnN0CiAgICAgewogICAgICAgICBT
aGVsbE1hcDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1fd2luZG93U2hlbGxzLmZpbmQod29ybGQp
OwotICAgICAgICByZXR1cm4gKGl0ZXIgIT0gbV93aW5kb3dTaGVsbHMuZW5kKCkpID8gaXRlci0+
c2Vjb25kLmdldCgpIDogMDsKKyAgICAgICAgcmV0dXJuIChpdGVyICE9IG1fd2luZG93U2hlbGxz
LmVuZCgpKSA/IGl0ZXItPnZhbHVlLmdldCgpIDogMDsKICAgICB9CiAgICAgSlNET01XaW5kb3cq
IGdsb2JhbE9iamVjdChET01XcmFwcGVyV29ybGQqIHdvcmxkKQogICAgIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmNwcAppbmRleCA5YWNlODJk
Li5lNTg0NzQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRE
ZWJ1Z1NlcnZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVi
dWdTZXJ2ZXIuY3BwCkBAIC03NSw5ICs3NSw5IEBAIFN0cmluZyBTY3JpcHREZWJ1Z1NlcnZlcjo6
c2V0QnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCBjb25zdCBTY3JpcHRCcmVhCiAg
ICAgU291cmNlSWRUb0JyZWFrcG9pbnRzTWFwOjppdGVyYXRvciBpdCA9IG1fc291cmNlSWRUb0Jy
ZWFrcG9pbnRzLmZpbmQoc291cmNlSURWYWx1ZSk7CiAgICAgaWYgKGl0ID09IG1fc291cmNlSWRU
b0JyZWFrcG9pbnRzLmVuZCgpKQogICAgICAgICBpdCA9IG1fc291cmNlSWRUb0JyZWFrcG9pbnRz
LnNldChzb3VyY2VJRFZhbHVlLCBMaW5lVG9CcmVha3BvaW50TWFwKCkpLml0ZXJhdG9yOwotICAg
IGlmIChpdC0+c2Vjb25kLmNvbnRhaW5zKHNjcmlwdEJyZWFrcG9pbnQubGluZU51bWJlciArIDEp
KQorICAgIGlmIChpdC0+dmFsdWUuY29udGFpbnMoc2NyaXB0QnJlYWtwb2ludC5saW5lTnVtYmVy
ICsgMSkpCiAgICAgICAgIHJldHVybiAiIjsKLSAgICBpdC0+c2Vjb25kLnNldChzY3JpcHRCcmVh
a3BvaW50LmxpbmVOdW1iZXIgKyAxLCBzY3JpcHRCcmVha3BvaW50KTsKKyAgICBpdC0+dmFsdWUu
c2V0KHNjcmlwdEJyZWFrcG9pbnQubGluZU51bWJlciArIDEsIHNjcmlwdEJyZWFrcG9pbnQpOwog
ICAgICphY3R1YWxMaW5lTnVtYmVyID0gc2NyaXB0QnJlYWtwb2ludC5saW5lTnVtYmVyOwogICAg
IC8vIEZJWE1FKFdLNTMwMDMpOiBpbXBsZW1lbnQgc2V0dGluZyBicmVha3BvaW50cyBieSBsaW5l
OmNvbHVtbi4KICAgICAqYWN0dWFsQ29sdW1uTnVtYmVyID0gMDsKQEAgLTk5LDcgKzk5LDcgQEAg
dm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6cmVtb3ZlQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIGJy
ZWFrcG9pbnRJZCkKICAgICAgICAgcmV0dXJuOwogICAgIFNvdXJjZUlkVG9CcmVha3BvaW50c01h
cDo6aXRlcmF0b3IgaXQgPSBtX3NvdXJjZUlkVG9CcmVha3BvaW50cy5maW5kKHNvdXJjZUlEVmFs
dWUpOwogICAgIGlmIChpdCAhPSBtX3NvdXJjZUlkVG9CcmVha3BvaW50cy5lbmQoKSkKLSAgICAg
ICAgaXQtPnNlY29uZC5yZW1vdmUobGluZU51bWJlciArIDEpOworICAgICAgICBpdC0+dmFsdWUu
cmVtb3ZlKGxpbmVOdW1iZXIgKyAxKTsKIH0KIAogYm9vbCBTY3JpcHREZWJ1Z1NlcnZlcjo6aGFz
QnJlYWtwb2ludChpbnRwdHJfdCBzb3VyY2VJRCwgY29uc3QgVGV4dFBvc2l0aW9uJiBwb3NpdGlv
bikgY29uc3QKQEAgLTExMywxNiArMTEzLDE2IEBAIGJvb2wgU2NyaXB0RGVidWdTZXJ2ZXI6Omhh
c0JyZWFrcG9pbnQoaW50cHRyX3Qgc291cmNlSUQsIGNvbnN0IFRleHRQb3NpdGlvbiYgcG9zCiAg
ICAgaW50IGxpbmVOdW1iZXIgPSBwb3NpdGlvbi5tX2xpbmUub25lQmFzZWRJbnQoKTsKICAgICBp
ZiAobGluZU51bWJlciA8PSAwKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgTGluZVRvQnJl
YWtwb2ludE1hcDo6Y29uc3RfaXRlcmF0b3IgYnJlYWtJdCA9IGl0LT5zZWNvbmQuZmluZChsaW5l
TnVtYmVyKTsKLSAgICBpZiAoYnJlYWtJdCA9PSBpdC0+c2Vjb25kLmVuZCgpKQorICAgIExpbmVU
b0JyZWFrcG9pbnRNYXA6OmNvbnN0X2l0ZXJhdG9yIGJyZWFrSXQgPSBpdC0+dmFsdWUuZmluZChs
aW5lTnVtYmVyKTsKKyAgICBpZiAoYnJlYWtJdCA9PSBpdC0+dmFsdWUuZW5kKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIC8vIEFuIGVtcHR5IGNvbmRpdGlvbiBjb3VudHMgYXMgbm8g
Y29uZGl0aW9uIHdoaWNoIGlzIGVxdWl2YWxlbnQgdG8gInRydWUiLgotICAgIGlmIChicmVha0l0
LT5zZWNvbmQuY29uZGl0aW9uLmlzRW1wdHkoKSkKKyAgICBpZiAoYnJlYWtJdC0+dmFsdWUuY29u
ZGl0aW9uLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBKU1ZhbHVlIGV4
Y2VwdGlvbjsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IG1fY3VycmVudENhbGxGcmFtZS0+ZXZhbHVh
dGUoc3RyaW5nVG9VU3RyaW5nKGJyZWFrSXQtPnNlY29uZC5jb25kaXRpb24pLCBleGNlcHRpb24p
OworICAgIEpTVmFsdWUgcmVzdWx0ID0gbV9jdXJyZW50Q2FsbEZyYW1lLT5ldmFsdWF0ZShzdHJp
bmdUb1VTdHJpbmcoYnJlYWtJdC0+dmFsdWUuY29uZGl0aW9uKSwgZXhjZXB0aW9uKTsKICAgICBp
ZiAoZXhjZXB0aW9uKSB7CiAgICAgICAgIC8vIEFuIGVycm9uZW91cyBjb25kaXRpb24gY291bnRz
IGFzICJmYWxzZSIuCiAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCmluZGV4IDJiNDdkNGIu
LmY3OTcwZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6
ZWRTY3JpcHRWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFs
aXplZFNjcmlwdFZhbHVlLmNwcApAQCAtNDA5LDggKzQwOSw4IEBAIHByaXZhdGU6CiAgICAgICAg
IC8vIEhhbmRsZSBkdXBsaWNhdGUgcmVmZXJlbmNlcwogICAgICAgICBpZiAoZm91bmQgIT0gbV9v
YmplY3RQb29sLmVuZCgpKSB7CiAgICAgICAgICAgICB3cml0ZShPYmplY3RSZWZlcmVuY2VUYWcp
OwotICAgICAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludDMyX3Q+KGZvdW5kLT5zZWNvbmQp
IDwgbV9vYmplY3RQb29sLnNpemUoKSk7Ci0gICAgICAgICAgICB3cml0ZU9iamVjdEluZGV4KGZv
dW5kLT5zZWNvbmQpOworICAgICAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludDMyX3Q+KGZv
dW5kLT52YWx1ZSkgPCBtX29iamVjdFBvb2wuc2l6ZSgpKTsKKyAgICAgICAgICAgIHdyaXRlT2Jq
ZWN0SW5kZXgoZm91bmQtPnZhbHVlKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICB9CiAKQEAgLTY0Myw3ICs2NDMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIE9iamVj
dFBvb2w6Oml0ZXJhdG9yIGluZGV4ID0gbV90cmFuc2ZlcnJlZE1lc3NhZ2VQb3J0cy5maW5kKG9i
aik7CiAgICAgICAgICAgICAgICAgaWYgKGluZGV4ICE9IG1fdHJhbnNmZXJyZWRNZXNzYWdlUG9y
dHMuZW5kKCkpIHsKICAgICAgICAgICAgICAgICAgICAgd3JpdGUoTWVzc2FnZVBvcnRSZWZlcmVu
Y2VUYWcpOwotICAgICAgICAgICAgICAgICAgICB3cml0ZShpbmRleC0+c2Vjb25kKTsKKyAgICAg
ICAgICAgICAgICAgICAgd3JpdGUoaW5kZXgtPnZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIC8vIE1lc3Nh
Z2VQb3J0IG9iamVjdCBjb3VsZCBub3QgYmUgZm91bmQgaW4gdHJhbnNmZXJyZWQgbWVzc2FnZSBw
b3J0cwpAQCAtNjU5LDcgKzY1OSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgT2JqZWN0
UG9vbDo6aXRlcmF0b3IgaW5kZXggPSBtX3RyYW5zZmVycmVkQXJyYXlCdWZmZXJzLmZpbmQob2Jq
KTsKICAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT0gbV90cmFuc2ZlcnJlZEFycmF5QnVmZmVy
cy5lbmQoKSkgewogICAgICAgICAgICAgICAgICAgICB3cml0ZShBcnJheUJ1ZmZlclRyYW5zZmVy
VGFnKTsKLSAgICAgICAgICAgICAgICAgICAgd3JpdGUoaW5kZXgtPnNlY29uZCk7CisgICAgICAg
ICAgICAgICAgICAgIHdyaXRlKGluZGV4LT52YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoIXN0YXJ0
T2JqZWN0SW50ZXJuYWwob2JqKSkgLy8gaGFuZGxlIGR1cGxpY2F0ZXMKQEAgLTc1OCw3ICs3NTgs
NyBAQCBwcml2YXRlOgogICAgICAgICBTdHJpbmdDb25zdGFudFBvb2w6OkFkZFJlc3VsdCBhZGRS
ZXN1bHQgPSBtX2NvbnN0YW50UG9vbC5hZGQoc3RyLmltcGwoKSwgbV9jb25zdGFudFBvb2wuc2l6
ZSgpKTsKICAgICAgICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSkgewogICAgICAgICAgICAg
d3JpdGUoU3RyaW5nUG9vbFRhZyk7Ci0gICAgICAgICAgICB3cml0ZVN0cmluZ0luZGV4KGFkZFJl
c3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKKyAgICAgICAgICAgIHdyaXRlU3RyaW5nSW5kZXgoYWRk
UmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9yVjgucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JW
OC5wbQppbmRleCAzYTBmN2Q1Li41OGIwNjliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQpAQCAtMjkyNyw3ICsyOTI3LDcgQEAg
djg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+ICR7Y2xhc3NOYW1lfTo6R2V0UmF3
VGVtcGxhdGUoKQogICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhKiBkYXRhID0gVjhCaW5kaW5n
UGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6
VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZmlu
ZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmVuZCgp
KQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQt
PnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJz
aXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9IGNyZWF0ZVJhd1RlbXBsYXRlKCk7
CkBAIC0yOTQwLDcgKzI5NDAsNyBAQCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0
ZT4gJHtjbGFzc05hbWV9OjpHZXRUZW1wbGF0ZSgpCiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURh
dGEqIGRhdGEgPSBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4Qmlu
ZGluZ1Blcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+
dGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnRlbXBs
YXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7
CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOEZsb2F0NjRB
cnJheS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhGbG9h
dDY0QXJyYXkuY3BwCmluZGV4IGQ1MWM5ZmEuLjE0MmE2MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOEZsb2F0NjRBcnJheS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4RmxvYXQ2NEFycmF5LmNw
cApAQCAtOTMsNyArOTMsNyBAQCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4g
VjhGbG9hdDY0QXJyYXk6OkdldFJhd1RlbXBsYXRlKCkKICAgICBWOEJpbmRpbmdQZXJJc29sYXRl
RGF0YSogZGF0YSA9IFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhC
aW5kaW5nUGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRh
LT5yYXdUZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+
cmF3VGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOwor
ICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5k
bGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwg
PSBjcmVhdGVSYXdUZW1wbGF0ZSgpOwpAQCAtMTA2LDcgKzEwNiw3IEBAIHY4OjpQZXJzaXN0ZW50
PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOEZsb2F0NjRBcnJheTo6R2V0VGVtcGxhdGUoKQogICAg
IFY4QmluZGluZ1Blcklzb2xhdGVEYXRhKiBkYXRhID0gVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6
OmN1cnJlbnQoKTsKICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0
ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYg
KHJlc3VsdCAhPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVz
dWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6Okhh
bmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRl
bXBsYXRlPiB0ZW1wbCA9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVjgvVjhUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RBY3RpdmVET01PYmplY3QuY3BwCmluZGV4IDBh
OWI4OGEuLjJmYmMzMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9WOC9WOFRlc3RBY3RpdmVET01PYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RBY3RpdmVET01PYmplY3QuY3BwCkBAIC0x
MzEsNyArMTMxLDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVz
dEFjdGl2ZURPTU9iamVjdDo6R2V0UmF3VGVtcGxhdGUoKQogICAgIFY4QmluZGluZ1Blcklzb2xh
dGVEYXRhKiBkYXRhID0gVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBW
OEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRh
dGEtPnJhd1RlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRh
LT5yYXdUZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7
CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhh
bmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1w
bCA9IGNyZWF0ZVJhd1RlbXBsYXRlKCk7CkBAIC0xNDQsNyArMTQ0LDcgQEAgdjg6OlBlcnNpc3Rl
bnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdEFjdGl2ZURPTU9iamVjdDo6R2V0VGVtcGxh
dGUoKQogICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhKiBkYXRhID0gVjhCaW5kaW5nUGVySXNv
bGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6VGVtcGxh
dGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7
CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICBy
ZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAg
ICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpG
dW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEN1c3RvbU5hbWVkR2V0dGVy
LmNwcAppbmRleCAxODBkNmZkLi44MzJiNGU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RDdXN0b21OYW1l
ZEdldHRlci5jcHAKQEAgLTgzLDcgKzgzLDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9u
VGVtcGxhdGU+IFY4VGVzdEN1c3RvbU5hbWVkR2V0dGVyOjpHZXRSYXdUZW1wbGF0ZSgpCiAgICAg
VjhCaW5kaW5nUGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6
Y3VycmVudCgpOwogICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRl
cmF0b3IgcmVzdWx0ID0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBp
ZiAocmVzdWx0ICE9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVy
biByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2
ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0
aW9uVGVtcGxhdGU+IHRlbXBsID0gY3JlYXRlUmF3VGVtcGxhdGUoKTsKQEAgLTk2LDcgKzk2LDcg
QEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdEN1c3RvbU5hbWVk
R2V0dGVyOjpHZXRUZW1wbGF0ZSgpCiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGEqIGRhdGEg
PSBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4QmluZGluZ1Blcklz
b2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+dGVtcGxhdGVN
YXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnRlbXBsYXRlTWFwKCku
ZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6
OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudENvbnN0cnVj
dG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RF
dmVudENvbnN0cnVjdG9yLmNwcAppbmRleCA4ZGRhOTI1Li4wMDY5NTYzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRDb25zdHJ1
Y3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4
VGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCkBAIC0xMTksNyArMTE5LDcgQEAgdjg6OlBlcnNpc3Rl
bnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdEV2ZW50Q29uc3RydWN0b3I6OkdldFJhd1Rl
bXBsYXRlKCkKICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4QmluZGluZ1Bl
cklzb2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OlRl
bXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmZpbmQo
JmluZm8pOwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5lbmQoKSkK
LSAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52
YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lz
dGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPSBjcmVhdGVSYXdUZW1wbGF0ZSgpOwpA
QCAtMTMyLDcgKzEzMiw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBW
OFRlc3RFdmVudENvbnN0cnVjdG9yOjpHZXRUZW1wbGF0ZSgpCiAgICAgVjhCaW5kaW5nUGVySXNv
bGF0ZURhdGEqIGRhdGEgPSBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAg
IFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0g
ZGF0YS0+dGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEt
PnRlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxl
U2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3RFdmVudFRhcmdldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VjgvVjhUZXN0RXZlbnRUYXJnZXQuY3BwCmluZGV4IGM1YmRiZWIuLjBiNTI1NzMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudFRh
cmdldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4
VGVzdEV2ZW50VGFyZ2V0LmNwcApAQCAtMTQ0LDcgKzE0NCw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4
OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3RFdmVudFRhcmdldDo6R2V0UmF3VGVtcGxhdGUoKQog
ICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhKiBkYXRhID0gVjhCaW5kaW5nUGVySXNvbGF0ZURh
dGE6OmN1cnJlbnQoKTsKICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6
Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAg
ICAgaWYgKHJlc3VsdCAhPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICBy
ZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAg
ICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpG
dW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9IGNyZWF0ZVJhd1RlbXBsYXRlKCk7CkBAIC0xNTcsNyAr
MTU3LDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdEV2ZW50
VGFyZ2V0OjpHZXRUZW1wbGF0ZSgpCiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGEqIGRhdGEg
PSBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4QmluZGluZ1Blcklz
b2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+dGVtcGxhdGVN
YXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnRlbXBsYXRlTWFwKCku
ZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6
OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFeGNlcHRpb24uY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV4Y2VwdGlv
bi5jcHAKaW5kZXggZTJjOGU5Ni4uNDEyZDA5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV4Y2VwdGlvbi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV4Y2VwdGlvbi5jcHAKQEAg
LTczLDcgKzczLDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVz
dEV4Y2VwdGlvbjo6R2V0UmF3VGVtcGxhdGUoKQogICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRh
KiBkYXRhID0gVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOEJpbmRp
bmdQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnJh
d1RlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT5yYXdU
ZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAg
ICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNj
b3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9IGNy
ZWF0ZVJhd1RlbXBsYXRlKCk7CkBAIC04Niw3ICs4Niw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpG
dW5jdGlvblRlbXBsYXRlPiBWOFRlc3RFeGNlcHRpb246OkdldFRlbXBsYXRlKCkKICAgICBWOEJp
bmRpbmdQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpjdXJy
ZW50KCk7CiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRv
ciByZXN1bHQgPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwogICAgIGlmIChyZXN1
bHQgIT0gZGF0YS0+dGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC0+
c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVT
Y29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0
ZT4gdGVtcGwgPQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Y4L1Y4VGVzdEludGVyZmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVjgvVjhUZXN0SW50ZXJmYWNlLmNwcAppbmRleCAxZDdkY2I1Li4xODQ2ZDljIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0
SW50ZXJmYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VjgvVjhUZXN0SW50ZXJmYWNlLmNwcApAQCAtMzEzLDcgKzMxMyw3IEBAIHY4OjpQZXJzaXN0ZW50
PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3RJbnRlcmZhY2U6OkdldFJhd1RlbXBsYXRlKCkK
ICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4QmluZGluZ1Blcklzb2xhdGVE
YXRhOjpjdXJyZW50KCk7CiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFw
OjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwog
ICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAg
cmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAog
ICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6
RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPSBjcmVhdGVSYXdUZW1wbGF0ZSgpOwpAQCAtMzI2LDcg
KzMyNiw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3RJbnRl
cmZhY2U6OkdldFRlbXBsYXRlKCkKICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YSogZGF0YSA9
IFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhCaW5kaW5nUGVySXNv
bGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT50ZW1wbGF0ZU1h
cCgpLmZpbmQoJmluZm8pOwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+dGVtcGxhdGVNYXAoKS5l
bmQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVz
dWx0LT52YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6
UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE1lZGlhUXVlcnlMaXN0
TGlzdGVuZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4
VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCmluZGV4IDljMGMwZDguLjU3ODEwMmUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RN
ZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVjgvVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAKQEAgLTgzLDcg
KzgzLDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdE1lZGlh
UXVlcnlMaXN0TGlzdGVuZXI6OkdldFJhd1RlbXBsYXQKICAgICBWOEJpbmRpbmdQZXJJc29sYXRl
RGF0YSogZGF0YSA9IFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhC
aW5kaW5nUGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRh
LT5yYXdUZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+
cmF3VGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOwor
ICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5k
bGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwg
PSBjcmVhdGVSYXdUZW1wbGF0ZSgpOwpAQCAtOTYsNyArOTYsNyBAQCB2ODo6UGVyc2lzdGVudDx2
ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6R2V0VGVt
cGxhdGUoKQogICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhKiBkYXRhID0gVjhCaW5kaW5nUGVy
SXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6VGVt
cGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZmluZCgmaW5m
byk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAg
ICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwog
CiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4
OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TmFtZWRDb25zdHJ1Y3Rv
ci5jcHAKaW5kZXggYWQ4NWNjZS4uNDNjMGJmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROYW1lZENvbnN0
cnVjdG9yLmNwcApAQCAtMTIzLDcgKzEyMyw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlv
blRlbXBsYXRlPiBWOFRlc3ROYW1lZENvbnN0cnVjdG9yOjpHZXRSYXdUZW1wbGF0ZSgpCiAgICAg
VjhCaW5kaW5nUGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6
Y3VycmVudCgpOwogICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRl
cmF0b3IgcmVzdWx0ID0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBp
ZiAocmVzdWx0ICE9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVy
biByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2
ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0
aW9uVGVtcGxhdGU+IHRlbXBsID0gY3JlYXRlUmF3VGVtcGxhdGUoKTsKQEAgLTEzNiw3ICsxMzYs
NyBAQCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0TmFtZWRDb25z
dHJ1Y3Rvcjo6R2V0VGVtcGxhdGUoKQogICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhKiBkYXRh
ID0gVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOEJpbmRpbmdQZXJJ
c29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnRlbXBsYXRl
TWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT50ZW1wbGF0ZU1hcCgp
LmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBy
ZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4
OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Tm9kZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Tm9kZS5jcHAKaW5k
ZXggY2UzN2UwMC4uZjlkNTkxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROb2RlLmNwcApAQCAtODEsNyArODEsNyBAQCB2ODo6
UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0Tm9kZTo6R2V0UmF3VGVtcGxh
dGUoKQogICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhKiBkYXRhID0gVjhCaW5kaW5nUGVySXNv
bGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6VGVtcGxh
dGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZmluZCgmaW5m
byk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAg
ICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVl
OwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50
PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9IGNyZWF0ZVJhd1RlbXBsYXRlKCk7CkBAIC05
NCw3ICs5NCw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3RO
b2RlOjpHZXRUZW1wbGF0ZSgpCiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGEqIGRhdGEgPSBW
OEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4QmluZGluZ1Blcklzb2xh
dGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+dGVtcGxhdGVNYXAo
KS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZW5k
KCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBl
cnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKaW5kZXggMWYw
NzczZC4uYzM0YTFjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKQEAgLTIyNjIsNyArMjI2Miw3IEBAIHY4OjpQZXJz
aXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3RPYmo6OkdldFJhd1RlbXBsYXRlKCkK
ICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4QmluZGluZ1Blcklzb2xhdGVE
YXRhOjpjdXJyZW50KCk7CiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFw
OjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwog
ICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAg
cmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAog
ICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6
RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPSBjcmVhdGVSYXdUZW1wbGF0ZSgpOwpAQCAtMjI3NSw3
ICsyMjc1LDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdE9i
ajo6R2V0VGVtcGxhdGUoKQogICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhKiBkYXRhID0gVjhC
aW5kaW5nUGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOEJpbmRpbmdQZXJJc29sYXRl
RGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnRlbXBsYXRlTWFwKCku
ZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmVuZCgp
KQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQt
PnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJz
aXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9W
OC9WOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCmluZGV4IDNiMGYyZjYu
LmM1MTY2YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9WOC9WOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2UuY3BwCkBAIC0yNjYsNyArMjY2LDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6
OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6
R2V0UmEKICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4QmluZGluZ1Blcklz
b2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OlRlbXBs
YXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmZpbmQoJmlu
Zm8pOwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1
ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVu
dDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPSBjcmVhdGVSYXdUZW1wbGF0ZSgpOwpAQCAt
Mjc5LDcgKzI3OSw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OkdldFRlCiAgICAgVjhCaW5kaW5nUGVy
SXNvbGF0ZURhdGEqIGRhdGEgPSBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwog
ICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0
ID0gZGF0YS0+dGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRh
dGEtPnRlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFu
ZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBs
ID0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L05QVjhPYmplY3QuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvTlBWOE9iamVjdC5jcHAKaW5kZXggYTM3OTBk
YS4uZmZjOTgwOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L05QVjhP
YmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L05QVjhPYmplY3QuY3Bw
CkBAIC03OSw3ICs3OSw3IEBAIHN0YXRpYyB2b2lkIGZyZWVWOE5QT2JqZWN0KE5QT2JqZWN0KiBu
cE9iamVjdCkKICAgICBpZiAoaW50IHY4T2JqZWN0SGFzaCA9IHY4TnBPYmplY3QtPnY4T2JqZWN0
LT5HZXRJZGVudGl0eUhhc2goKSkgewogICAgICAgICBWOE5QT2JqZWN0TWFwOjppdGVyYXRvciBp
dGVyID0gc3RhdGljVjhOUE9iamVjdE1hcCgpLT5maW5kKHY4T2JqZWN0SGFzaCk7CiAgICAgICAg
IGlmIChpdGVyICE9IHN0YXRpY1Y4TlBPYmplY3RNYXAoKS0+ZW5kKCkpIHsKLSAgICAgICAgICAg
IFY4TlBPYmplY3RWZWN0b3ImIG9iamVjdHMgPSBpdGVyLT5zZWNvbmQ7CisgICAgICAgICAgICBW
OE5QT2JqZWN0VmVjdG9yJiBvYmplY3RzID0gaXRlci0+dmFsdWU7CiAgICAgICAgICAgICBmb3Ig
KHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgb2JqZWN0cy5zaXplKCk7ICsraW5kZXgpIHsKICAg
ICAgICAgICAgICAgICBpZiAob2JqZWN0cy5hdChpbmRleCkgPT0gdjhOcE9iamVjdCkgewogICAg
ICAgICAgICAgICAgICAgICBvYmplY3RzLnJlbW92ZShpbmRleCk7CkBAIC0xNTQsNyArMTU0LDcg
QEAgTlBPYmplY3QqIG5wQ3JlYXRlVjhTY3JpcHRPYmplY3QoTlBQIG5wcCwgdjg6OkhhbmRsZTx2
ODo6T2JqZWN0PiBvYmplY3QsIERPTVdpbmQKICAgICBBU1NFUlQodjhPYmplY3RIYXNoKTsKICAg
ICBWOE5QT2JqZWN0TWFwOjppdGVyYXRvciBpdGVyID0gc3RhdGljVjhOUE9iamVjdE1hcCgpLT5m
aW5kKHY4T2JqZWN0SGFzaCk7CiAgICAgaWYgKGl0ZXIgIT0gc3RhdGljVjhOUE9iamVjdE1hcCgp
LT5lbmQoKSkgewotICAgICAgICBWOE5QT2JqZWN0VmVjdG9yJiBvYmplY3RzID0gaXRlci0+c2Vj
b25kOworICAgICAgICBWOE5QT2JqZWN0VmVjdG9yJiBvYmplY3RzID0gaXRlci0+dmFsdWU7CiAg
ICAgICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBvYmplY3RzLnNpemUoKTsgKytp
bmRleCkgewogICAgICAgICAgICAgVjhOUE9iamVjdCogdjhucE9iamVjdCA9IG9iamVjdHMuYXQo
aW5kZXgpOwogICAgICAgICAgICAgaWYgKHY4bnBPYmplY3QtPnJvb3RPYmplY3QgPT0gcm9vdCkg
ewpAQCAtMTc0LDcgKzE3NCw3IEBAIE5QT2JqZWN0KiBucENyZWF0ZVY4U2NyaXB0T2JqZWN0KE5Q
UCBucHAsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0LCBET01XaW5kCiAjZW5kaWYKICAg
ICB2OG5wT2JqZWN0LT5yb290T2JqZWN0ID0gcm9vdDsKIAotICAgIGl0ZXItPnNlY29uZC5hcHBl
bmQodjhucE9iamVjdCk7CisgICAgaXRlci0+dmFsdWUuYXBwZW5kKHY4bnBPYmplY3QpOwogCiAg
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8TlBPYmplY3QqPih2OG5wT2JqZWN0KTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAKaW5kZXgg
MTRjMDUwYS4uMGJmM2Q5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
U2NyaXB0Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2Ny
aXB0Q29udHJvbGxlci5jcHAKQEAgLTExOSw4ICsxMTksOCBAQCB2b2lkIFNjcmlwdENvbnRyb2xs
ZXI6OmNsZWFyU2NyaXB0T2JqZWN0cygpCiB7CiAgICAgUGx1Z2luT2JqZWN0TWFwOjppdGVyYXRv
ciBpdCA9IG1fcGx1Z2luT2JqZWN0cy5iZWdpbigpOwogICAgIGZvciAoOyBpdCAhPSBtX3BsdWdp
bk9iamVjdHMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgX05QTl9VbnJlZ2lzdGVyT2JqZWN0KGl0
LT5zZWNvbmQpOwotICAgICAgICBfTlBOX1JlbGVhc2VPYmplY3QoaXQtPnNlY29uZCk7CisgICAg
ICAgIF9OUE5fVW5yZWdpc3Rlck9iamVjdChpdC0+dmFsdWUpOworICAgICAgICBfTlBOX1JlbGVh
c2VPYmplY3QoaXQtPnZhbHVlKTsKICAgICB9CiAgICAgbV9wbHVnaW5PYmplY3RzLmNsZWFyKCk7
CiAKQEAgLTM0Niw4ICszNDYsOCBAQCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmNsZWFudXBTY3Jp
cHRPYmplY3RzRm9yUGx1Z2luKFdpZGdldCogbmF0aXZlSGFuZGxlKQogICAgIFBsdWdpbk9iamVj
dE1hcDo6aXRlcmF0b3IgaXQgPSBtX3BsdWdpbk9iamVjdHMuZmluZChuYXRpdmVIYW5kbGUpOwog
ICAgIGlmIChpdCA9PSBtX3BsdWdpbk9iamVjdHMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKLSAg
ICBfTlBOX1VucmVnaXN0ZXJPYmplY3QoaXQtPnNlY29uZCk7Ci0gICAgX05QTl9SZWxlYXNlT2Jq
ZWN0KGl0LT5zZWNvbmQpOworICAgIF9OUE5fVW5yZWdpc3Rlck9iamVjdChpdC0+dmFsdWUpOwor
ICAgIF9OUE5fUmVsZWFzZU9iamVjdChpdC0+dmFsdWUpOwogICAgIG1fcGx1Z2luT2JqZWN0cy5y
ZW1vdmUoaXQpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9T
ZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2Vy
aWFsaXplZFNjcmlwdFZhbHVlLmNwcAppbmRleCA5ZjFlMzI5Li5jZmE4MmEzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAK
QEAgLTEwOSw3ICsxMDksNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICB0eXBlbmFtZSBIYW5k
bGVUb1Q6Oml0ZXJhdG9yIHJlc3VsdCA9IG1fbWFwLmZpbmQoKmhhbmRsZSk7CiAgICAgICAgIGlm
IChyZXN1bHQgIT0gbV9tYXAuZW5kKCkpIHsKLSAgICAgICAgICAgICp2YWx1ZU91dCA9IHJlc3Vs
dC0+c2Vjb25kOworICAgICAgICAgICAgKnZhbHVlT3V0ID0gcmVzdWx0LT52YWx1ZTsKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZ1BlckNvbnRleHRE
YXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZ1BlckNvbnRleHRE
YXRhLmNwcAppbmRleCBmZmNhZjRjLi4zNWUyNzg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9WOEJpbmRpbmdQZXJDb250ZXh0RGF0YS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nUGVyQ29udGV4dERhdGEuY3BwCkBAIC00MCw3ICs0
MCw3IEBAIHZvaWQgVjhCaW5kaW5nUGVyQ29udGV4dERhdGE6OmRpc3Bvc2UoKQogICAgIHsKICAg
ICAgICAgV3JhcHBlckJvaWxlcnBsYXRlTWFwOjppdGVyYXRvciBpdCA9IG1fd3JhcHBlckJvaWxl
cnBsYXRlcy5iZWdpbigpOwogICAgICAgICBmb3IgKDsgaXQgIT0gbV93cmFwcGVyQm9pbGVycGxh
dGVzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgICAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0
PiB3cmFwcGVyID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpP
YmplY3Q+IHdyYXBwZXIgPSBpdC0+dmFsdWU7CiAgICAgICAgICAgICB3cmFwcGVyLkRpc3Bvc2Uo
KTsKICAgICAgICAgfQogICAgICAgICBtX3dyYXBwZXJCb2lsZXJwbGF0ZXMuY2xlYXIoKTsKQEAg
LTQ5LDcgKzQ5LDcgQEAgdm9pZCBWOEJpbmRpbmdQZXJDb250ZXh0RGF0YTo6ZGlzcG9zZSgpCiAg
ICAgewogICAgICAgICBDb25zdHJ1Y3Rvck1hcDo6aXRlcmF0b3IgaXQgPSBtX2NvbnN0cnVjdG9y
TWFwLmJlZ2luKCk7CiAgICAgICAgIGZvciAoOyBpdCAhPSBtX2NvbnN0cnVjdG9yTWFwLmVuZCgp
OyArK2l0KSB7Ci0gICAgICAgICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb24+IHdyYXBw
ZXIgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9u
PiB3cmFwcGVyID0gaXQtPnZhbHVlOwogICAgICAgICAgICAgd3JhcHBlci5EaXNwb3NlKCk7CiAg
ICAgICAgIH0KICAgICAgICAgbV9jb25zdHJ1Y3Rvck1hcC5jbGVhcigpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01NYXAuaCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1Y4RE9NTWFwLmgKaW5kZXggNGRlMzU1OC4uZDc4NDgyNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01NYXAuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9WOERPTU1hcC5oCkBAIC0xMTAsNyArMTEwLDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICBib29sIHJlbW92ZUlmUHJlc2VudChLZXlUeXBlKiBrZXksIHY4OjpQ
ZXJzaXN0ZW50PFZhbHVlVHlwZT4gdmFsdWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIHR5cGVu
YW1lIEhhc2hNYXA8S2V5VHlwZSosIFZhbHVlVHlwZSo+OjppdGVyYXRvciBpdCA9IG1fbWFwLmZp
bmQoa2V5KTsKLSAgICAgICAgICAgIGlmIChpdCA9PSBtX21hcC5lbmQoKSB8fCBpdC0+c2Vjb25k
ICE9ICp2YWx1ZSkKKyAgICAgICAgICAgIGlmIChpdCA9PSBtX21hcC5lbmQoKSB8fCBpdC0+dmFs
dWUgIT0gKnZhbHVlKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAg
ICAgbV9tYXAucmVtb3ZlKGl0KTsKQEAgLTEzMCw3ICsxMzAsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgICAgICB2aXNpdG9yLT5zdGFydE1hcCgpOwogICAgICAgICAgICAgdHlwZW5h
bWUgSGFzaE1hcDxLZXlUeXBlKiwgVmFsdWVUeXBlKj46Oml0ZXJhdG9yIGl0ID0gbV9tYXAuYmVn
aW4oKTsKICAgICAgICAgICAgIGZvciAoOyBpdCAhPSBtX21hcC5lbmQoKTsgKytpdCkKLSAgICAg
ICAgICAgICAgICB2aXNpdG9yLT52aXNpdERPTVdyYXBwZXIoc3RvcmUsIGl0LT5maXJzdCwgdjg6
OlBlcnNpc3RlbnQ8VmFsdWVUeXBlPihpdC0+c2Vjb25kKSk7CisgICAgICAgICAgICAgICAgdmlz
aXRvci0+dmlzaXRET01XcmFwcGVyKHN0b3JlLCBpdC0+a2V5LCB2ODo6UGVyc2lzdGVudDxWYWx1
ZVR5cGU+KGl0LT52YWx1ZSkpOwogICAgICAgICAgICAgdmlzaXRvci0+ZW5kTWFwKCk7CiAgICAg
ICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhHQ0NvbnRy
b2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xsZXIuY3Bw
CmluZGV4IDY1MTgyYTcuLjU1ODgxYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4R0NDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9WOEdDQ29udHJvbGxlci5jcHAKQEAgLTk4LDkgKzk4LDkgQEAgc3RhdGljIHZvaWQgZW51bWVy
YXRlR2xvYmFsSGFuZGxlcygpCiB7CiAgICAgR2xvYmFsSGFuZGxlTWFwJiBnbG9iYWxIYW5kbGVN
YXAgPSBjdXJyZW50R2xvYmFsSGFuZGxlTWFwKCk7CiAgICAgZm9yIChHbG9iYWxIYW5kbGVNYXA6
Oml0ZXJhdG9yIGl0ID0gZ2xvYmFsSGFuZGxlTWFwLmJlZ2luKCksIGVuZCA9IGdsb2JhbEhhbmRs
ZU1hcC5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIEdsb2JhbEhhbmRsZUluZm8q
IGluZm8gPSBpdC0+c2Vjb25kOworICAgICAgICBHbG9iYWxIYW5kbGVJbmZvKiBpbmZvID0gaXQt
PnZhbHVlOwogICAgICAgICBVTlVTRURfUEFSQU0oaW5mbyk7Ci0gICAgICAgIHY4OjpWYWx1ZSog
aGFuZGxlID0gaXQtPmZpcnN0OworICAgICAgICB2ODo6VmFsdWUqIGhhbmRsZSA9IGl0LT5rZXk7
CiAgICAgICAgIFVOVVNFRF9QQVJBTShoYW5kbGUpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhQcm94eS5jcHAKaW5kZXggMDgxZjc1Zi4uNjQ5MzNmMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAKQEAgLTIzMCw3ICsyMzAsNyBAQCB2ODo6TG9jYWw8
djg6OkFycmF5PiBWOFByb3h5OjpldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZChpbnQgd29ybGRJRCwg
Y29uc3QgVmVjdG9yPAogICAgIGlmICh3b3JsZElEID4gMCkgewogICAgICAgICBJc29sYXRlZFdv
cmxkTWFwOjppdGVyYXRvciBpdGVyID0gbV9pc29sYXRlZFdvcmxkcy5maW5kKHdvcmxkSUQpOwog
ICAgICAgICBpZiAoaXRlciAhPSBtX2lzb2xhdGVkV29ybGRzLmVuZCgpKSB7Ci0gICAgICAgICAg
ICBpc29sYXRlZENvbnRleHQgPSBpdGVyLT5zZWNvbmQ7CisgICAgICAgICAgICBpc29sYXRlZENv
bnRleHQgPSBpdGVyLT52YWx1ZTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlzb2xh
dGVkQ29udGV4dCA9IG5ldyBWOElzb2xhdGVkQ29udGV4dCh0aGlzLCBleHRlbnNpb25Hcm91cCwg
d29ybGRJRCk7CiAgICAgICAgICAgICBpZiAoaXNvbGF0ZWRDb250ZXh0LT5jb250ZXh0KCkuSXNF
bXB0eSgpKSB7CkBAIC0yNDQsNyArMjQ0LDcgQEAgdjg6OkxvY2FsPHY4OjpBcnJheT4gVjhQcm94
eTo6ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQoaW50IHdvcmxkSUQsIGNvbnN0IFZlY3RvcjwKIAog
ICAgICAgICBJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW5NYXA6Oml0ZXJhdG9yIHNlY3VyaXR5
T3JpZ2luSXRlciA9IG1faXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2lucy5maW5kKHdvcmxkSUQp
OwogICAgICAgICBpZiAoc2VjdXJpdHlPcmlnaW5JdGVyICE9IG1faXNvbGF0ZWRXb3JsZFNlY3Vy
aXR5T3JpZ2lucy5lbmQoKSkKLSAgICAgICAgICAgIGlzb2xhdGVkQ29udGV4dC0+c2V0U2VjdXJp
dHlPcmlnaW4oc2VjdXJpdHlPcmlnaW5JdGVyLT5zZWNvbmQpOworICAgICAgICAgICAgaXNvbGF0
ZWRDb250ZXh0LT5zZXRTZWN1cml0eU9yaWdpbihzZWN1cml0eU9yaWdpbkl0ZXItPnZhbHVlKTsK
ICAgICB9IGVsc2UgewogICAgICAgICBpc29sYXRlZENvbnRleHQgPSBuZXcgVjhJc29sYXRlZENv
bnRleHQodGhpcywgZXh0ZW5zaW9uR3JvdXAsIHdvcmxkSUQpOwogICAgICAgICBpZiAoaXNvbGF0
ZWRDb250ZXh0LT5jb250ZXh0KCkuSXNFbXB0eSgpKSB7CkBAIC0yNzcsNyArMjc3LDcgQEAgdm9p
ZCBWOFByb3h5OjpzZXRJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4oaW50IHdvcmxkSUQsIFBh
c3NSZWZQdHI8U2VjdXJpdHlPcmkKICAgICBtX2lzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbnMu
c2V0KHdvcmxkSUQsIHNlY3VyaXR5T3JpZ2luKTsKICAgICBJc29sYXRlZFdvcmxkTWFwOjppdGVy
YXRvciBpdGVyID0gbV9pc29sYXRlZFdvcmxkcy5maW5kKHdvcmxkSUQpOwogICAgIGlmIChpdGVy
ICE9IG1faXNvbGF0ZWRXb3JsZHMuZW5kKCkpCi0gICAgICAgIGl0ZXItPnNlY29uZC0+c2V0U2Vj
dXJpdHlPcmlnaW4oc2VjdXJpdHlPcmlnaW4pOworICAgICAgICBpdGVyLT52YWx1ZS0+c2V0U2Vj
dXJpdHlPcmlnaW4oc2VjdXJpdHlPcmlnaW4pOwogfQogCiBQYXNzT3duUHRyPHY4OjpTY3JpcHRE
YXRhPiBWOFByb3h5OjpwcmVjb21waWxlU2NyaXB0KHY4OjpIYW5kbGU8djg6OlN0cmluZz4gY29k
ZSwgQ2FjaGVkU2NyaXB0KiBjYWNoZWRTY3JpcHQpCkBAIC01NTMsNyArNTUzLDcgQEAgdm9pZCBW
OFByb3h5OjpyZXNldElzb2xhdGVkV29ybGRzKCkKIHsKICAgICBmb3IgKElzb2xhdGVkV29ybGRN
YXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2lzb2xhdGVkV29ybGRzLmJlZ2luKCk7CiAgICAgICAgICBp
dGVyICE9IG1faXNvbGF0ZWRXb3JsZHMuZW5kKCk7ICsraXRlcikgewotICAgICAgICBpdGVyLT5z
ZWNvbmQtPmRlc3Ryb3koKTsKKyAgICAgICAgaXRlci0+dmFsdWUtPmRlc3Ryb3koKTsKICAgICB9
CiAgICAgbV9pc29sYXRlZFdvcmxkcy5jbGVhcigpOwogICAgIG1faXNvbGF0ZWRXb3JsZFNlY3Vy
aXR5T3JpZ2lucy5jbGVhcigpOwpAQCAtNjk2LDcgKzY5Niw3IEBAIHY4OjpMb2NhbDx2ODo6Q29u
dGV4dD4gVjhQcm94eTo6aXNvbGF0ZWRXb3JsZENvbnRleHQoaW50IHdvcmxkSWQpCiAgICAgSXNv
bGF0ZWRXb3JsZE1hcDo6aXRlcmF0b3IgaXRlciA9IG1faXNvbGF0ZWRXb3JsZHMuZmluZCh3b3Js
ZElkKTsKICAgICBpZiAoaXRlciA9PSBtX2lzb2xhdGVkV29ybGRzLmVuZCgpKQogICAgICAgICBy
ZXR1cm4gdjg6OkxvY2FsPHY4OjpDb250ZXh0PigpOwotICAgIHJldHVybiB2ODo6TG9jYWw8djg6
OkNvbnRleHQ+OjpOZXcoaXRlci0+c2Vjb25kLT5jb250ZXh0KCkpOworICAgIHJldHVybiB2ODo6
TG9jYWw8djg6OkNvbnRleHQ+OjpOZXcoaXRlci0+dmFsdWUtPmNvbnRleHQoKSk7CiB9CiAKIGJv
b2wgVjhQcm94eTo6bWF0Y2hlc0N1cnJlbnRDb250ZXh0KCkKQEAgLTc5OSw3ICs3OTksNyBAQCB2
b2lkIFY4UHJveHk6OmNvbGxlY3RJc29sYXRlZENvbnRleHRzKFZlY3RvcjxzdGQ6OnBhaXI8U2Ny
aXB0U3RhdGUqLCBTZWN1cml0eU9yaQogewogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29w
ZTsKICAgICBmb3IgKElzb2xhdGVkV29ybGRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pc29sYXRlZFdv
cmxkcy5iZWdpbigpOyBpdCAhPSBtX2lzb2xhdGVkV29ybGRzLmVuZCgpOyArK2l0KSB7Ci0gICAg
ICAgIFY4SXNvbGF0ZWRDb250ZXh0KiBpc29sYXRlZENvbnRleHQgPSBpdC0+c2Vjb25kOworICAg
ICAgICBWOElzb2xhdGVkQ29udGV4dCogaXNvbGF0ZWRDb250ZXh0ID0gaXQtPnZhbHVlOwogICAg
ICAgICBpZiAoIWlzb2xhdGVkQ29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiB2OENvbnRleHQgPSBp
c29sYXRlZENvbnRleHQtPmNvbnRleHQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L25wcnVudGltZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ucHJ1
bnRpbWUuY3BwCmluZGV4IDhkODBjZjkuLjJiMDM2N2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L25wcnVudGltZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvbnBydW50aW1lLmNwcApAQCAtMTY0LDcgKzE2NCw3IEBAIE5QSWRlbnRpZmllciBfTlBO
X0dldFN0cmluZ0lkZW50aWZpZXIoY29uc3QgTlBVVEY4KiBuYW1lKQogICAgICAgICBTdHJpbmdJ
ZGVudGlmaWVyTWFwKiBpZGVudE1hcCA9IGdldFN0cmluZ0lkZW50aWZpZXJNYXAoKTsKICAgICAg
ICAgU3RyaW5nSWRlbnRpZmllck1hcDo6aXRlcmF0b3IgaXRlciA9IGlkZW50TWFwLT5maW5kKGtl
eSk7CiAgICAgICAgIGlmIChpdGVyICE9IGlkZW50TWFwLT5lbmQoKSkKLSAgICAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxOUElkZW50aWZpZXI+KGl0ZXItPnNlY29uZCk7CisgICAgICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8TlBJZGVudGlmaWVyPihpdGVyLT52YWx1ZSk7CiAKICAgICAg
ICAgc2l6ZV90IG5hbWVMZW4gPSBrZXkubV9sZW5ndGg7CiAKQEAgLTIxMSw3ICsyMTEsNyBAQCBO
UElkZW50aWZpZXIgX05QTl9HZXRJbnRJZGVudGlmaWVyKGludDMyX3QgaW50SWQpCiAgICAgSW50
SWRlbnRpZmllck1hcCogaWRlbnRNYXAgPSBnZXRJbnRJZGVudGlmaWVyTWFwKCk7CiAgICAgSW50
SWRlbnRpZmllck1hcDo6aXRlcmF0b3IgaXRlciA9IGlkZW50TWFwLT5maW5kKGludElkKTsKICAg
ICBpZiAoaXRlciAhPSBpZGVudE1hcC0+ZW5kKCkpCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxOUElkZW50aWZpZXI+KGl0ZXItPnNlY29uZCk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxOUElkZW50aWZpZXI+KGl0ZXItPnZhbHVlKTsKIAogICAgIC8vIFdlIG5ldmVyIHJlbGVhc2Ug
aWRlbnRpZmllcnMsIHNvIHRoaXMgZGljdGlvbmFyeSB3aWxsIGdyb3cuCiAgICAgUHJpdmF0ZUlk
ZW50aWZpZXIqIGlkZW50aWZpZXIgPSByZWludGVycHJldF9jYXN0PFByaXZhdGVJZGVudGlmaWVy
Kj4obWFsbG9jKHNpemVvZihQcml2YXRlSWRlbnRpZmllcikpKTsKQEAgLTM4OCw3ICszODgsNyBA
QCB2b2lkIF9OUE5fUmVnaXN0ZXJPYmplY3QoTlBPYmplY3QqIG5wT2JqZWN0LCBOUE9iamVjdCog
b3duZXIpCiAgICAgICAgIE5QT2JqZWN0TWFwOjppdGVyYXRvciBvd25lckVudHJ5ID0gbGl2ZU9i
amVjdE1hcCgpLmZpbmQob3duZXIpOwogICAgICAgICBOUE9iamVjdCogcGFyZW50ID0gMDsKICAg
ICAgICAgaWYgKGxpdmVPYmplY3RNYXAoKS5lbmQoKSAhPSBvd25lckVudHJ5KQotICAgICAgICAg
ICAgcGFyZW50ID0gb3duZXJFbnRyeS0+c2Vjb25kOworICAgICAgICAgICAgcGFyZW50ID0gb3du
ZXJFbnRyeS0+dmFsdWU7CiAKICAgICAgICAgaWYgKHBhcmVudCkKICAgICAgICAgICAgIG93bmVy
ID0gcGFyZW50OwpAQCAtNDA4LDcgKzQwOCw3IEBAIHZvaWQgX05QTl9VbnJlZ2lzdGVyT2JqZWN0
KE5QT2JqZWN0KiBucE9iamVjdCkKIAogICAgIE5QT2JqZWN0KiBvd25lciA9IDA7CiAgICAgaWYg
KGxpdmVPYmplY3RNYXAoKS5maW5kKG5wT2JqZWN0KSAhPSBsaXZlT2JqZWN0TWFwKCkuZW5kKCkp
Ci0gICAgICAgIG93bmVyID0gbGl2ZU9iamVjdE1hcCgpLmZpbmQobnBPYmplY3QpLT5zZWNvbmQ7
CisgICAgICAgIG93bmVyID0gbGl2ZU9iamVjdE1hcCgpLmZpbmQobnBPYmplY3QpLT52YWx1ZTsK
IAogICAgIGlmICghb3duZXIpIHsKICAgICAgICAgLy8gVW5yZWdpc3RlcmluZyBhIG93bmVyIG9i
amVjdDsgYWxzbyB1bnJlZ2lzdGVyIGl0J3MgZGVzY2VuZGFudHMuCkBAIC00NDMsNyArNDQzLDcg
QEAgdm9pZCBfTlBOX1VucmVnaXN0ZXJPYmplY3QoTlBPYmplY3QqIG5wT2JqZWN0KQogICAgIH0g
ZWxzZSB7CiAgICAgICAgIE5QUm9vdE9iamVjdE1hcDo6aXRlcmF0b3Igb3duZXJFbnRyeSA9IHJv
b3RPYmplY3RNYXAoKS5maW5kKG93bmVyKTsKICAgICAgICAgaWYgKG93bmVyRW50cnkgIT0gcm9v
dE9iamVjdE1hcCgpLmVuZCgpKSB7Ci0gICAgICAgICAgICBOUE9iamVjdFNldCogbGlzdCA9IG93
bmVyRW50cnktPnNlY29uZDsKKyAgICAgICAgICAgIE5QT2JqZWN0U2V0KiBsaXN0ID0gb3duZXJF
bnRyeS0+dmFsdWU7CiAgICAgICAgICAgICBBU1NFUlQobGlzdC0+ZmluZChucE9iamVjdCkgIT0g
bGlzdC0+ZW5kKCkpOwogICAgICAgICAgICAgbGlzdC0+cmVtb3ZlKG5wT2JqZWN0KTsKICAgICAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL0lkZW50aWZpZXJSZXAuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL0lkZW50aWZpZXJSZXAuY3BwCmluZGV4IDJhY2YxNDEu
LjFkZjU4YTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9JZGVudGlmaWVyUmVw
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvSWRlbnRpZmllclJlcC5jcHAKQEAgLTY5
LDEzICs2OSwxMyBAQCBJZGVudGlmaWVyUmVwKiBJZGVudGlmaWVyUmVwOjpnZXQoaW50IGludElE
KQogICAgIAogICAgIEludElkZW50aWZpZXJNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBpbnRJZGVu
dGlmaWVyTWFwKCkuYWRkKGludElELCAwKTsKICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpIHsK
LSAgICAgICAgQVNTRVJUKCFyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7Ci0gICAgICAgIHJlc3Vs
dC5pdGVyYXRvci0+c2Vjb25kID0gbmV3IElkZW50aWZpZXJSZXAoaW50SUQpOworICAgICAgICBB
U1NFUlQoIXJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOworICAgICAgICByZXN1bHQuaXRlcmF0b3It
PnZhbHVlID0gbmV3IElkZW50aWZpZXJSZXAoaW50SUQpOwogICAgICAgICAKLSAgICAgICAgaWRl
bnRpZmllclNldCgpLmFkZChyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7CisgICAgICAgIGlkZW50
aWZpZXJTZXQoKS5hZGQocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CiAgICAgfQogICAgIAotICAg
IHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICByZXR1cm4gcmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZTsKIH0KIAogdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxTdHJpbmdJbXBsPiwgSWRl
bnRpZmllclJlcCo+IFN0cmluZ0lkZW50aWZpZXJNYXA7CkBAIC05NSwxMyArOTUsMTMgQEAgSWRl
bnRpZmllclJlcCogSWRlbnRpZmllclJlcDo6Z2V0KGNvbnN0IGNoYXIqIG5hbWUpCiAgICAgVVN0
cmluZyBzdHJpbmcgPSBzdHJpbmdUb1VTdHJpbmcoU3RyaW5nOjpmcm9tVVRGOFdpdGhMYXRpbjFG
YWxsYmFjayhuYW1lLCBzdHJsZW4obmFtZSkpKTsKICAgICBTdHJpbmdJZGVudGlmaWVyTWFwOjpB
ZGRSZXN1bHQgcmVzdWx0ID0gc3RyaW5nSWRlbnRpZmllck1hcCgpLmFkZChzdHJpbmcuaW1wbCgp
LCAwKTsKICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgQVNTRVJUKCFyZXN1
bHQuaXRlcmF0b3ItPnNlY29uZCk7Ci0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0g
bmV3IElkZW50aWZpZXJSZXAobmFtZSk7CisgICAgICAgIEFTU0VSVCghcmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZSk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBuZXcgSWRlbnRpZmll
clJlcChuYW1lKTsKICAgICAgICAgCi0gICAgICAgIGlkZW50aWZpZXJTZXQoKS5hZGQocmVzdWx0
Lml0ZXJhdG9yLT5zZWNvbmQpOworICAgICAgICBpZGVudGlmaWVyU2V0KCkuYWRkKHJlc3VsdC5p
dGVyYXRvci0+dmFsdWUpOwogICAgIH0KICAgICAKLSAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9y
LT5zZWNvbmQ7CisgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiB9CiAKIGJvb2wg
SWRlbnRpZmllclJlcDo6aXNWYWxpZChJZGVudGlmaWVyUmVwKiBpZGVudGlmaWVyKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL05QX2pzb2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JyaWRnZS9OUF9qc29iamVjdC5jcHAKaW5kZXggNjFlMzY3OS4uNjJlYmQyMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL05QX2pzb2JqZWN0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9icmlkZ2UvTlBfanNvYmplY3QuY3BwCkBAIC02NSw4ICs2NSw4IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIGl0ZXIgPSBtX21hcC5hZGQocm9vdE9iamVjdCwgSlNUb05QT2JqZWN0TWFw
KCkpLml0ZXJhdG9yOwogICAgICAgICB9CiAKLSAgICAgICAgQVNTRVJUKGl0ZXItPnNlY29uZC5m
aW5kKGpzT2JqZWN0KSA9PSBpdGVyLT5zZWNvbmQuZW5kKCkpOwotICAgICAgICBpdGVyLT5zZWNv
bmQuYWRkKGpzT2JqZWN0LCBucE9iamVjdCk7CisgICAgICAgIEFTU0VSVChpdGVyLT52YWx1ZS5m
aW5kKGpzT2JqZWN0KSA9PSBpdGVyLT52YWx1ZS5lbmQoKSk7CisgICAgICAgIGl0ZXItPnZhbHVl
LmFkZChqc09iamVjdCwgbnBPYmplY3QpOwogICAgIH0KIAogICAgIHZvaWQgcmVtb3ZlKFJvb3RP
YmplY3QqIHJvb3RPYmplY3QpCkBAIC04MCw5ICs4MCw5IEBAIHB1YmxpYzoKICAgICB7CiAgICAg
ICAgIEhhc2hNYXA8Um9vdE9iamVjdCosIEpTVG9OUE9iamVjdE1hcD46Oml0ZXJhdG9yIGl0ZXIg
PSBtX21hcC5maW5kKHJvb3RPYmplY3QpOwogICAgICAgICBBU1NFUlQoaXRlciAhPSBtX21hcC5l
bmQoKSk7Ci0gICAgICAgIEFTU0VSVChpdGVyLT5zZWNvbmQuZmluZChqc09iamVjdCkgIT0gaXRl
ci0+c2Vjb25kLmVuZCgpKTsKKyAgICAgICAgQVNTRVJUKGl0ZXItPnZhbHVlLmZpbmQoanNPYmpl
Y3QpICE9IGl0ZXItPnZhbHVlLmVuZCgpKTsKIAotICAgICAgICBpdGVyLT5zZWNvbmQucmVtb3Zl
KGpzT2JqZWN0KTsKKyAgICAgICAgaXRlci0+dmFsdWUucmVtb3ZlKGpzT2JqZWN0KTsKICAgICB9
CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9K
YXZhQ2xhc3NKU0MuY3BwIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YUNsYXNz
SlNDLmNwcAppbmRleCBhZWI0MDIwLi5hNjA4MDFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9icmlkZ2Uvam5pL2pzYy9KYXZhQ2xhc3NKU0MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jy
aWRnZS9qbmkvanNjL0phdmFDbGFzc0pTQy5jcHAKQEAgLTEwNyw3ICsxMDcsNyBAQCBKYXZhQ2xh
c3M6On5KYXZhQ2xhc3MoKQogCiAgICAgTWV0aG9kTGlzdE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gbV9tZXRob2RzLmVuZCgpOwogICAgIGZvciAoTWV0aG9kTGlzdE1hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtX21ldGhvZHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGNv
bnN0IE1ldGhvZExpc3QqIG1ldGhvZExpc3QgPSBpdC0+c2Vjb25kOworICAgICAgICBjb25zdCBN
ZXRob2RMaXN0KiBtZXRob2RMaXN0ID0gaXQtPnZhbHVlOwogICAgICAgICBkZWxldGVBbGxWYWx1
ZXMoKm1ldGhvZExpc3QpOwogICAgICAgICBkZWxldGUgbWV0aG9kTGlzdDsKICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9yb290LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JyaWRnZS9ydW50aW1lX3Jvb3QuY3BwCmluZGV4IDliNjIyNGEuLjc0ZDgzMTkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX3Jvb3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX3Jvb3QuY3BwCkBAIC0xMDUsNyArMTA1LDcgQEAg
dm9pZCBSb290T2JqZWN0OjppbnZhbGlkYXRlKCkKICAgICB7CiAgICAgICAgIEhhc2hNYXA8UnVu
dGltZU9iamVjdCosIEpTQzo6V2VhazxSdW50aW1lT2JqZWN0PiA+OjppdGVyYXRvciBlbmQgPSBt
X3J1bnRpbWVPYmplY3RzLmVuZCgpOwogICAgICAgICBmb3IgKEhhc2hNYXA8UnVudGltZU9iamVj
dCosIEpTQzo6V2VhazxSdW50aW1lT2JqZWN0PiA+OjppdGVyYXRvciBpdCA9IG1fcnVudGltZU9i
amVjdHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBSdW50aW1lT2Jq
ZWN0KiBydW50aW1lT2JqZWN0ID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgIFJ1bnRp
bWVPYmplY3QqIHJ1bnRpbWVPYmplY3QgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBp
ZiAoIXJ1bnRpbWVPYmplY3QpIC8vIFNraXAgem9tYmllcy4KICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgIHJ1bnRpbWVPYmplY3QtPmludmFsaWRhdGUoKTsKQEAgLTEyOSw3
ICsxMjksNyBAQCB2b2lkIFJvb3RPYmplY3Q6OmludmFsaWRhdGUoKQogCiAgICAgUHJvdGVjdENv
dW50U2V0OjppdGVyYXRvciBlbmQgPSBtX3Byb3RlY3RDb3VudFNldC5lbmQoKTsKICAgICBmb3Ig
KFByb3RlY3RDb3VudFNldDo6aXRlcmF0b3IgaXQgPSBtX3Byb3RlY3RDb3VudFNldC5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIEpTQzo6Z2NVbnByb3RlY3QoaXQtPmZpcnN0KTsK
KyAgICAgICAgSlNDOjpnY1VucHJvdGVjdChpdC0+a2V5KTsKICAgICBtX3Byb3RlY3RDb3VudFNl
dC5jbGVhcigpOwogCiAgICAgcm9vdE9iamVjdFNldCgpLT5yZW1vdmUodGhpcyk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FudmFzVmFsdWUuY3BwIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0NhbnZhc1ZhbHVlLmNwcAppbmRleCA3ODNjZWVmLi45YTk1NTQwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FudmFzVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NDYW52YXNWYWx1ZS5jcHAKQEAgLTQ5LDE0ICs0OSwxNCBAQCB2b2lkIENT
U0NhbnZhc1ZhbHVlOjpjYW52YXNDaGFuZ2VkKEhUTUxDYW52YXNFbGVtZW50KiwgY29uc3QgRmxv
YXRSZWN0JiBjaGFuZ2VkUgogICAgIEludFJlY3QgaW1hZ2VDaGFuZ2VSZWN0ID0gZW5jbG9zaW5n
SW50UmVjdChjaGFuZ2VkUmVjdCk7CiAgICAgUmVuZGVyT2JqZWN0U2l6ZUNvdW50TWFwOjpjb25z
dF9pdGVyYXRvciBlbmQgPSBjbGllbnRzKCkuZW5kKCk7CiAgICAgZm9yIChSZW5kZXJPYmplY3RT
aXplQ291bnRNYXA6OmNvbnN0X2l0ZXJhdG9yIGN1cnIgPSBjbGllbnRzKCkuYmVnaW4oKTsgY3Vy
ciAhPSBlbmQ7ICsrY3VycikKLSAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJPYmplY3QqPihjdXJy
LT5maXJzdCktPmltYWdlQ2hhbmdlZChzdGF0aWNfY2FzdDxXcmFwcGVkSW1hZ2VQdHI+KHRoaXMp
LCAmaW1hZ2VDaGFuZ2VSZWN0KTsKKyAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJPYmplY3QqPihj
dXJyLT5rZXkpLT5pbWFnZUNoYW5nZWQoc3RhdGljX2Nhc3Q8V3JhcHBlZEltYWdlUHRyPih0aGlz
KSwgJmltYWdlQ2hhbmdlUmVjdCk7CiB9CiAKIHZvaWQgQ1NTQ2FudmFzVmFsdWU6OmNhbnZhc1Jl
c2l6ZWQoSFRNTENhbnZhc0VsZW1lbnQqKQogewogICAgIFJlbmRlck9iamVjdFNpemVDb3VudE1h
cDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY2xpZW50cygpLmVuZCgpOwogICAgIGZvciAoUmVuZGVy
T2JqZWN0U2l6ZUNvdW50TWFwOjpjb25zdF9pdGVyYXRvciBjdXJyID0gY2xpZW50cygpLmJlZ2lu
KCk7IGN1cnIgIT0gZW5kOyArK2N1cnIpCi0gICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyT2JqZWN0
Kj4oY3Vyci0+Zmlyc3QpLT5pbWFnZUNoYW5nZWQoc3RhdGljX2Nhc3Q8V3JhcHBlZEltYWdlUHRy
Pih0aGlzKSk7CisgICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyT2JqZWN0Kj4oY3Vyci0+a2V5KS0+
aW1hZ2VDaGFuZ2VkKHN0YXRpY19jYXN0PFdyYXBwZWRJbWFnZVB0cj4odGhpcykpOwogfQogCiB2
b2lkIENTU0NhbnZhc1ZhbHVlOjpjYW52YXNEZXN0cm95ZWQoSFRNTENhbnZhc0VsZW1lbnQqIGVs
ZW1lbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURl
Y2xhcmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFy
YXRpb24uY3BwCmluZGV4IGFlMjQ4ZWQuLmU0OWViNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCkBAIC0xMjUzLDggKzEyNTMs
OCBAQCBzdGF0aWMgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gY291bnRlclRvQ1NTVmFsdWUoY29uc3Qg
UmVuZGVyU3R5bGUqIHN0eWxlLCBDU1NQcm9wZQogCiAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4g
bGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKICAgICBmb3IgKENv
dW50ZXJEaXJlY3RpdmVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAh
PSBtYXAtPmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2wo
KS5jcmVhdGVWYWx1ZShpdC0+Zmlyc3QuZ2V0KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RS
SU5HKSk7Ci0gICAgICAgIHNob3J0IG51bWJlciA9IHByb3BlcnR5SUQgPT0gQ1NTUHJvcGVydHlD
b3VudGVySW5jcmVtZW50ID8gaXQtPnNlY29uZC5tX2luY3JlbWVudFZhbHVlIDogaXQtPnNlY29u
ZC5tX3Jlc2V0VmFsdWU7CisgICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVh
dGVWYWx1ZShpdC0+a2V5LmdldCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORykpOwor
ICAgICAgICBzaG9ydCBudW1iZXIgPSBwcm9wZXJ0eUlEID09IENTU1Byb3BlcnR5Q291bnRlcklu
Y3JlbWVudCA/IGl0LT52YWx1ZS5tX2luY3JlbWVudFZhbHVlIDogaXQtPnZhbHVlLm1fcmVzZXRW
YWx1ZTsKICAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKChk
b3VibGUpbnVtYmVyLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOwogICAgIH0KICAg
ICByZXR1cm4gbGlzdC5yZWxlYXNlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTQ3Jvc3NmYWRlVmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Nyb3NzZmFkZVZh
bHVlLmNwcAppbmRleCA0ZmYwOGFmLi5kYzQ5NDMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTQ3Jvc3NmYWRlVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1ND
cm9zc2ZhZGVWYWx1ZS5jcHAKQEAgLTE2MSw3ICsxNjEsNyBAQCB2b2lkIENTU0Nyb3NzZmFkZVZh
bHVlOjpjcm9zc2ZhZGVDaGFuZ2VkKGNvbnN0IEludFJlY3QmKQogewogICAgIFJlbmRlck9iamVj
dFNpemVDb3VudE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY2xpZW50cygpLmVuZCgpOwogICAg
IGZvciAoUmVuZGVyT2JqZWN0U2l6ZUNvdW50TWFwOjpjb25zdF9pdGVyYXRvciBjdXJyID0gY2xp
ZW50cygpLmJlZ2luKCk7IGN1cnIgIT0gZW5kOyArK2N1cnIpIHsKLSAgICAgICAgUmVuZGVyT2Jq
ZWN0KiBjbGllbnQgPSBjb25zdF9jYXN0PFJlbmRlck9iamVjdCo+KGN1cnItPmZpcnN0KTsKKyAg
ICAgICAgUmVuZGVyT2JqZWN0KiBjbGllbnQgPSBjb25zdF9jYXN0PFJlbmRlck9iamVjdCo+KGN1
cnItPmtleSk7CiAgICAgICAgIGNsaWVudC0+aW1hZ2VDaGFuZ2VkKHN0YXRpY19jYXN0PFdyYXBw
ZWRJbWFnZVB0cj4odGhpcykpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NGb250RmFjZVNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZh
Y2VTb3VyY2UuY3BwCmluZGV4IGRkOTA0ZDMuLmNlNDUzNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0ZvbnRGYWNlU291cmNlLmNwcApAQCAtMTE0LDcgKzExNCw3IEBAIFNpbXBsZUZvbnREYXRh
KiBDU1NGb250RmFjZVNvdXJjZTo6Z2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBm
b250RGVzY3JpCiAgICAgdW5zaWduZWQgaGFzaEtleSA9IChmb250RGVzY3JpcHRpb24uY29tcHV0
ZWRQaXhlbFNpemUoKSArIDEpIDw8IDYgfCBmb250RGVzY3JpcHRpb24ud2lkdGhWYXJpYW50KCkg
PDwgNAogICAgICAgICAgICAgICAgICAgICAgICB8IChmb250RGVzY3JpcHRpb24udGV4dE9yaWVu
dGF0aW9uKCkgPT0gVGV4dE9yaWVudGF0aW9uVXByaWdodCA/IDggOiAwKSB8IChmb250RGVzY3Jp
cHRpb24ub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCA/IDQgOiAwKSB8IChzeW50aGV0aWNCb2xk
ID8gMiA6IDApIHwgKHN5bnRoZXRpY0l0YWxpYyA/IDEgOiAwKTsKIAotICAgIFNpbXBsZUZvbnRE
YXRhKiYgY2FjaGVkRGF0YSA9IG1fZm9udERhdGFUYWJsZS5hZGQoaGFzaEtleSwgMCkuaXRlcmF0
b3ItPnNlY29uZDsKKyAgICBTaW1wbGVGb250RGF0YSomIGNhY2hlZERhdGEgPSBtX2ZvbnREYXRh
VGFibGUuYWRkKGhhc2hLZXksIDApLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoY2FjaGVkRGF0
YSkKICAgICAgICAgcmV0dXJuIGNhY2hlZERhdGE7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRT
ZWxlY3Rvci5jcHAKaW5kZXggMGE5YTNhMC4uZjM4M2ZiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0ZvbnRTZWxlY3Rvci5jcHAKQEAgLTI4NSw3ICsyODUsNyBAQCB2b2lkIENTU0ZvbnRTZWxlY3Rv
cjo6YWRkRm9udEZhY2VSdWxlKGNvbnN0IFN0eWxlUnVsZUZvbnRGYWNlKiBmb250RmFjZVJ1bGUp
CiAgICAgICAgIGlmIChmYW1pbHlOYW1lLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogCi0gICAgICAgIE93blB0cjxWZWN0b3I8UmVmUHRyPENTU0ZvbnRGYWNlPiA+ID4mIGZhbWls
eUZvbnRGYWNlcyA9IG1fZm9udEZhY2VzLmFkZChmYW1pbHlOYW1lLCBudWxscHRyKS5pdGVyYXRv
ci0+c2Vjb25kOworICAgICAgICBPd25QdHI8VmVjdG9yPFJlZlB0cjxDU1NGb250RmFjZT4gPiA+
JiBmYW1pbHlGb250RmFjZXMgPSBtX2ZvbnRGYWNlcy5hZGQoZmFtaWx5TmFtZSwgbnVsbHB0ciku
aXRlcmF0b3ItPnZhbHVlOwogICAgICAgICBpZiAoIWZhbWlseUZvbnRGYWNlcykgewogICAgICAg
ICAgICAgZmFtaWx5Rm9udEZhY2VzID0gYWRvcHRQdHIobmV3IFZlY3RvcjxSZWZQdHI8Q1NTRm9u
dEZhY2U+ID4pOwogCkBAIC00ODcsMTMgKzQ4NywxMyBAQCBGb250RGF0YSogQ1NTRm9udFNlbGVj
dG9yOjpnZXRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwg
YwogICAgICAgICByZXR1cm4gZm9udERhdGFGb3JHZW5lcmljRmFtaWx5KG1fZG9jdW1lbnQsIGZv
bnREZXNjcmlwdGlvbiwgZmFtaWx5TmFtZSk7CiAgICAgfQogCi0gICAgT3duUHRyPEhhc2hNYXA8
dW5zaWduZWQsIFJlZlB0cjxDU1NTZWdtZW50ZWRGb250RmFjZT4gPiA+JiBzZWdtZW50ZWRGb250
RmFjZUNhY2hlID0gbV9mb250cy5hZGQoZmFtaWx5LCBudWxscHRyKS5pdGVyYXRvci0+c2Vjb25k
OworICAgIE93blB0cjxIYXNoTWFwPHVuc2lnbmVkLCBSZWZQdHI8Q1NTU2VnbWVudGVkRm9udEZh
Y2U+ID4gPiYgc2VnbWVudGVkRm9udEZhY2VDYWNoZSA9IG1fZm9udHMuYWRkKGZhbWlseSwgbnVs
bHB0cikuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghc2VnbWVudGVkRm9udEZhY2VDYWNoZSkK
ICAgICAgICAgc2VnbWVudGVkRm9udEZhY2VDYWNoZSA9IGFkb3B0UHRyKG5ldyBIYXNoTWFwPHVu
c2lnbmVkLCBSZWZQdHI8Q1NTU2VnbWVudGVkRm9udEZhY2U+ID4pOwogCiAgICAgRm9udFRyYWl0
c01hc2sgdHJhaXRzTWFzayA9IGZvbnREZXNjcmlwdGlvbi50cmFpdHNNYXNrKCk7CiAKLSAgICBS
ZWZQdHI8Q1NTU2VnbWVudGVkRm9udEZhY2U+JiBmYWNlID0gc2VnbWVudGVkRm9udEZhY2VDYWNo
ZS0+YWRkKHRyYWl0c01hc2ssIDApLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgUmVmUHRyPENTU1Nl
Z21lbnRlZEZvbnRGYWNlPiYgZmFjZSA9IHNlZ21lbnRlZEZvbnRGYWNlQ2FjaGUtPmFkZCh0cmFp
dHNNYXNrLCAwKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCFmYWNlKSB7CiAgICAgICAgIGZh
Y2UgPSBDU1NTZWdtZW50ZWRGb250RmFjZTo6Y3JlYXRlKHRoaXMpOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5jcHAKaW5kZXggOWJlNDQ2Yi4uYTM0MWUy
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZUdlbmVyYXRvclZhbHVlLmNwcApA
QCAtNTYsNyArNTYsNyBAQCB2b2lkIENTU0ltYWdlR2VuZXJhdG9yVmFsdWU6OmFkZENsaWVudChS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBJbnRTaXplJiBzaQogICAgIGlmIChpdCA9PSBt
X2NsaWVudHMuZW5kKCkpCiAgICAgICAgIG1fY2xpZW50cy5hZGQocmVuZGVyZXIsIFNpemVBbmRD
b3VudChzaXplLCAxKSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIFNpemVBbmRDb3VudCYgc2l6ZUNv
dW50ID0gaXQtPnNlY29uZDsKKyAgICAgICAgU2l6ZUFuZENvdW50JiBzaXplQ291bnQgPSBpdC0+
dmFsdWU7CiAgICAgICAgICsrc2l6ZUNvdW50LmNvdW50OwogICAgIH0KIH0KQEAgLTY4LDcgKzY4
LDcgQEAgdm9pZCBDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjpyZW1vdmVDbGllbnQoUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlcikKICAgICBBU1NFUlQoaXQgIT0gbV9jbGllbnRzLmVuZCgpKTsKIAogICAg
IEludFNpemUgcmVtb3ZlZEltYWdlU2l6ZTsKLSAgICBTaXplQW5kQ291bnQmIHNpemVDb3VudCA9
IGl0LT5zZWNvbmQ7CisgICAgU2l6ZUFuZENvdW50JiBzaXplQ291bnQgPSBpdC0+dmFsdWU7CiAg
ICAgSW50U2l6ZSBzaXplID0gc2l6ZUNvdW50LnNpemU7CiAgICAgaWYgKCFzaXplLmlzRW1wdHko
KSkgewogICAgICAgICBtX3NpemVzLnJlbW92ZShzaXplKTsKQEAgLTg2LDcgKzg2LDcgQEAgSW1h
Z2UqIENTU0ltYWdlR2VuZXJhdG9yVmFsdWU6OmdldEltYWdlKFJlbmRlck9iamVjdCogcmVuZGVy
ZXIsIGNvbnN0IEludFNpemUmIHMKIHsKICAgICBSZW5kZXJPYmplY3RTaXplQ291bnRNYXA6Oml0
ZXJhdG9yIGl0ID0gbV9jbGllbnRzLmZpbmQocmVuZGVyZXIpOwogICAgIGlmIChpdCAhPSBtX2Ns
aWVudHMuZW5kKCkpIHsKLSAgICAgICAgU2l6ZUFuZENvdW50JiBzaXplQ291bnQgPSBpdC0+c2Vj
b25kOworICAgICAgICBTaXplQW5kQ291bnQmIHNpemVDb3VudCA9IGl0LT52YWx1ZTsKICAgICAg
ICAgSW50U2l6ZSBvbGRTaXplID0gc2l6ZUNvdW50LnNpemU7CiAgICAgICAgIGlmIChvbGRTaXpl
ICE9IHNpemUpIHsKICAgICAgICAgICAgIFJlZlB0cjxDU1NJbWFnZUdlbmVyYXRvclZhbHVlPiBw
cm90ZWN0KHRoaXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlZ21lbnRl
ZEZvbnRGYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5j
cHAKaW5kZXggOTgzNDI1NC4uMWI3NTM0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1NlZ21lbnRlZEZvbnRGYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2Vn
bWVudGVkRm9udEZhY2UuY3BwCkBAIC0xMDYsNyArMTA2LDcgQEAgRm9udERhdGEqIENTU1NlZ21l
bnRlZEZvbnRGYWNlOjpnZXRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNj
cmlwdGkKICAgICBGb250VHJhaXRzTWFzayBkZXNpcmVkVHJhaXRzTWFzayA9IGZvbnREZXNjcmlw
dGlvbi50cmFpdHNNYXNrKCk7CiAgICAgdW5zaWduZWQgaGFzaEtleSA9ICgoZm9udERlc2NyaXB0
aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCkgKyAxKSA8PCAoRm9udFRyYWl0c01hc2tXaWR0aCArIDEp
KSB8ICgoZm9udERlc2NyaXB0aW9uLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwgPyAxIDogMCkg
PDwgRm9udFRyYWl0c01hc2tXaWR0aCkgfCBkZXNpcmVkVHJhaXRzTWFzazsKIAotICAgIFNlZ21l
bnRlZEZvbnREYXRhKiYgZm9udERhdGEgPSBtX2ZvbnREYXRhVGFibGUuYWRkKGhhc2hLZXksIDAp
Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgU2VnbWVudGVkRm9udERhdGEqJiBmb250RGF0YSA9IG1f
Zm9udERhdGFUYWJsZS5hZGQoaGFzaEtleSwgMCkuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmIChm
b250RGF0YSkKICAgICAgICAgcmV0dXJuIGZvbnREYXRhOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTU2VsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlbGVj
dG9yLmNwcAppbmRleCAxMzQ3OWI2Li4zYjQ4Y2ZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTU2VsZWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rv
ci5jcHAKQEAgLTM3Niw3ICszNzYsNyBAQCBDU1NTZWxlY3Rvcjo6UHNldWRvVHlwZSBDU1NTZWxl
Y3Rvcjo6cGFyc2VQc2V1ZG9UeXBlKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkKICAgICAgICAg
cmV0dXJuIFBzZXVkb1Vua25vd247CiAgICAgSGFzaE1hcDxBdG9taWNTdHJpbmdJbXBsKiwgQ1NT
U2VsZWN0b3I6OlBzZXVkb1R5cGU+KiBuYW1lVG9Qc2V1ZG9UeXBlID0gbmFtZVRvUHNldWRvVHlw
ZU1hcCgpOwogICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCosIENTU1NlbGVjdG9yOjpQc2V1
ZG9UeXBlPjo6aXRlcmF0b3Igc2xvdCA9IG5hbWVUb1BzZXVkb1R5cGUtPmZpbmQobmFtZS5pbXBs
KCkpOwotICAgIHJldHVybiBzbG90ID09IG5hbWVUb1BzZXVkb1R5cGUtPmVuZCgpID8gUHNldWRv
VW5rbm93biA6IHNsb3QtPnNlY29uZDsKKyAgICByZXR1cm4gc2xvdCA9PSBuYW1lVG9Qc2V1ZG9U
eXBlLT5lbmQoKSA/IFBzZXVkb1Vua25vd24gOiBzbG90LT52YWx1ZTsKIH0KIAogYm9vbCBDU1NT
ZWxlY3Rvcjo6aXNVbmtub3duUHNldWRvVHlwZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVQb29sLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NWYWx1ZVBvb2wuY3BwCmluZGV4IGNlNzU3YjkuLmMxNjg5OTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZVBvb2wuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NWYWx1ZVBvb2wuY3BwCkBAIC03OCw4ICs3OCw4IEBAIFBhc3NSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IENTU1ZhbHVlUG9vbDo6Y3JlYXRlQ29sb3JWYWx1ZSh1bnNpZ25l
ZCByZ2JWYWx1ZSkKICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGR1bW15VmFsdWU7CiAg
ICAgQ29sb3JWYWx1ZUNhY2hlOjpBZGRSZXN1bHQgZW50cnkgPSBtX2NvbG9yVmFsdWVDYWNoZS5h
ZGQocmdiVmFsdWUsIGR1bW15VmFsdWUpOwogICAgIGlmIChlbnRyeS5pc05ld0VudHJ5KQotICAg
ICAgICBlbnRyeS5pdGVyYXRvci0+c2Vjb25kID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUNv
bG9yKHJnYlZhbHVlKTsKLSAgICByZXR1cm4gZW50cnkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAg
ICAgZW50cnkuaXRlcmF0b3ItPnZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUNvbG9y
KHJnYlZhbHVlKTsKKyAgICByZXR1cm4gZW50cnkuaXRlcmF0b3ItPnZhbHVlOwogfQogCiBQYXNz
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NWYWx1ZVBvb2w6OmNyZWF0ZVZhbHVlKGRvdWJs
ZSB2YWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcyB0eXBlKQpAQCAtMTEzLDcgKzEx
Myw3IEBAIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IENTU1ZhbHVlUG9vbDo6Y3JlYXRl
VmFsdWUoZG91YmxlIHZhbHVlLCBDU1NQcmltaXRpCiAKIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+IENTU1ZhbHVlUG9vbDo6Y3JlYXRlRm9udEZhbWlseVZhbHVlKGNvbnN0IFN0cmluZyYg
ZmFtaWx5TmFtZSkKIHsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiB2YWx1ZSA9IG1f
Zm9udEZhbWlseVZhbHVlQ2FjaGUuYWRkKGZhbWlseU5hbWUsIDApLml0ZXJhdG9yLT5zZWNvbmQ7
CisgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYgdmFsdWUgPSBtX2ZvbnRGYW1pbHlWYWx1
ZUNhY2hlLmFkZChmYW1pbHlOYW1lLCAwKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCF2YWx1
ZSkKICAgICAgICAgdmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKGZhbWlseU5hbWUs
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKTsKICAgICByZXR1cm4gdmFsdWU7CkBAIC0x
MjYsNyArMTI2LDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZUxpc3Q+IENTU1ZhbHVlUG9vbDo6Y3Jl
YXRlRm9udEZhY2VWYWx1ZShjb25zdCBBdG9taWNTdHJpbmcmIHMKICAgICBpZiAobV9mb250RmFj
ZVZhbHVlQ2FjaGUuc2l6ZSgpID4gbWF4aW11bUZvbnRGYWNlQ2FjaGVTaXplKQogICAgICAgICBt
X2ZvbnRGYWNlVmFsdWVDYWNoZS5jbGVhcigpOwogCi0gICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4m
IHZhbHVlID0gbV9mb250RmFjZVZhbHVlQ2FjaGUuYWRkKHN0cmluZywgMCkuaXRlcmF0b3ItPnNl
Y29uZDsKKyAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiYgdmFsdWUgPSBtX2ZvbnRGYWNlVmFsdWVD
YWNoZS5hZGQoc3RyaW5nLCAwKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCF2YWx1ZSkKICAg
ICAgICAgdmFsdWUgPSBDU1NQYXJzZXI6OnBhcnNlRm9udEZhY2VWYWx1ZShzdHJpbmcpOwogICAg
IHJldHVybiB2YWx1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Qcm9wZXJ0eVNl
dENTU1N0eWxlRGVjbGFyYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1Byb3BlcnR5U2V0
Q1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAKaW5kZXggOGEwYWZkNi4uODBmMjA1NiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvY3NzL1Byb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1Byb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5j
cHAKQEAgLTI5OSw3ICsyOTksNyBAQCBDU1NWYWx1ZSogUHJvcGVydHlTZXRDU1NTdHlsZURlY2xh
cmF0aW9uOjpjbG9uZUFuZENhY2hlRm9yQ1NTT00oQ1NTVmFsdWUqIGludGVybgogICAgIGlmICgh
bV9jc3NvbUNTU1ZhbHVlQ2xvbmVzKQogICAgICAgICBtX2Nzc29tQ1NTVmFsdWVDbG9uZXMgPSBh
ZG9wdFB0cihuZXcgSGFzaE1hcDxDU1NWYWx1ZSosIFJlZlB0cjxDU1NWYWx1ZT4gPik7CiAgICAg
Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiYgY2xvbmVkVmFsdWUgPSBtX2Nzc29tQ1NTVmFsdWVDbG9u
ZXMtPmFkZChpbnRlcm5hbFZhbHVlLCBSZWZQdHI8Q1NTVmFsdWU+KCkpLml0ZXJhdG9yLT5zZWNv
bmQ7CisgICAgUmVmUHRyPENTU1ZhbHVlPiYgY2xvbmVkVmFsdWUgPSBtX2Nzc29tQ1NTVmFsdWVD
bG9uZXMtPmFkZChpbnRlcm5hbFZhbHVlLCBSZWZQdHI8Q1NTVmFsdWU+KCkpLml0ZXJhdG9yLT52
YWx1ZTsKICAgICBpZiAoIWNsb25lZFZhbHVlKQogICAgICAgICBjbG9uZWRWYWx1ZSA9IGludGVy
bmFsVmFsdWUtPmNsb25lRm9yQ1NTT00oKTsKICAgICByZXR1cm4gY2xvbmVkVmFsdWUuZ2V0KCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXIuY3BwCmluZGV4IGI2YmYzMzIuLmM3ZGRiMGI0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyLmNwcApAQCAtMTAxNSwyMSArMTAxNSwyMSBAQCBw
dWJsaWM6CiAgICAgICAgIHR5cGVkZWYgQ291bnRlckRpcmVjdGl2ZU1hcDo6aXRlcmF0b3IgSXRl
cmF0b3I7CiAgICAgICAgIEl0ZXJhdG9yIGVuZCA9IHBhcmVudE1hcC5lbmQoKTsKICAgICAgICAg
Zm9yIChJdGVyYXRvciBpdCA9IHBhcmVudE1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
LSAgICAgICAgICAgIENvdW50ZXJEaXJlY3RpdmVzJiBkaXJlY3RpdmVzID0gbWFwLmFkZChpdC0+
Zmlyc3QsIENvdW50ZXJEaXJlY3RpdmVzKCkpLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgICAg
ICBDb3VudGVyRGlyZWN0aXZlcyYgZGlyZWN0aXZlcyA9IG1hcC5hZGQoaXQtPmtleSwgQ291bnRl
ckRpcmVjdGl2ZXMoKSkuaXRlcmF0b3ItPnZhbHVlOwogICAgICAgICAgICAgaWYgKGNvdW50ZXJC
ZWhhdmlvciA9PSBSZXNldCkgewotICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXMubV9yZXNldCA9
IGl0LT5zZWNvbmQubV9yZXNldDsKLSAgICAgICAgICAgICAgICBkaXJlY3RpdmVzLm1fcmVzZXRW
YWx1ZSA9IGl0LT5zZWNvbmQubV9yZXNldFZhbHVlOworICAgICAgICAgICAgICAgIGRpcmVjdGl2
ZXMubV9yZXNldCA9IGl0LT52YWx1ZS5tX3Jlc2V0OworICAgICAgICAgICAgICAgIGRpcmVjdGl2
ZXMubV9yZXNldFZhbHVlID0gaXQtPnZhbHVlLm1fcmVzZXRWYWx1ZTsKICAgICAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gSW5oZXJpdGluZyBhIGNvdW50ZXItaW5jcmVtZW50
IG1lYW5zIHRha2luZyB0aGUgcGFyZW50J3MgY3VycmVudCB2YWx1ZSBmb3IgdGhlIGNvdW50ZXIK
ICAgICAgICAgICAgICAgICAvLyBhbmQgYWRkaW5nIGl0IHRvIGl0c2VsZi4KLSAgICAgICAgICAg
ICAgICBkaXJlY3RpdmVzLm1faW5jcmVtZW50ID0gaXQtPnNlY29uZC5tX2luY3JlbWVudDsKKyAg
ICAgICAgICAgICAgICBkaXJlY3RpdmVzLm1faW5jcmVtZW50ID0gaXQtPnZhbHVlLm1faW5jcmVt
ZW50OwogICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXMubV9pbmNyZW1lbnRWYWx1ZSA9IDA7CiAg
ICAgICAgICAgICAgICAgaWYgKGRpcmVjdGl2ZXMubV9pbmNyZW1lbnQpIHsKICAgICAgICAgICAg
ICAgICAgICAgZmxvYXQgaW5jcmVtZW50VmFsdWUgPSBkaXJlY3RpdmVzLm1faW5jcmVtZW50VmFs
dWU7Ci0gICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXMubV9pbmNyZW1lbnRWYWx1ZSA9IGNs
YW1wVG9JbnRlZ2VyKGluY3JlbWVudFZhbHVlICsgaXQtPnNlY29uZC5tX2luY3JlbWVudFZhbHVl
KTsKKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlcy5tX2luY3JlbWVudFZhbHVlID0gY2xh
bXBUb0ludGVnZXIoaW5jcmVtZW50VmFsdWUgKyBpdC0+dmFsdWUubV9pbmNyZW1lbnRWYWx1ZSk7
CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZl
cy5tX2luY3JlbWVudCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXMubV9p
bmNyZW1lbnRWYWx1ZSA9IGl0LT5zZWNvbmQubV9pbmNyZW1lbnRWYWx1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgZGlyZWN0aXZlcy5tX2luY3JlbWVudFZhbHVlID0gaXQtPnZhbHVlLm1faW5jcmVt
ZW50VmFsdWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CkBA
IC0xMDQ3LDkgKzEwNDcsOSBAQCBwdWJsaWM6CiAgICAgICAgIEl0ZXJhdG9yIGVuZCA9IG1hcC5l
bmQoKTsKICAgICAgICAgZm9yIChJdGVyYXRvciBpdCA9IG1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpCiAgICAgICAgICAgICBpZiAoY291bnRlckJlaGF2aW9yID09IFJlc2V0KQotICAgICAg
ICAgICAgICAgIGl0LT5zZWNvbmQubV9yZXNldCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGl0
LT52YWx1ZS5tX3Jlc2V0ID0gZmFsc2U7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgaXQtPnNlY29uZC5tX2luY3JlbWVudCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGl0LT52
YWx1ZS5tX2luY3JlbWVudCA9IGZhbHNlOwogCiAgICAgICAgIGludCBsZW5ndGggPSBsaXN0ID8g
bGlzdC0+bGVuZ3RoKCkgOiAwOwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsg
KytpKSB7CkBAIC0xMDYzLDcgKzEwNjMsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgICAgIEF0b21p
Y1N0cmluZyBpZGVudGlmaWVyID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihwYWly
LT5maXJzdCgpKS0+Z2V0U3RyaW5nVmFsdWUoKTsKICAgICAgICAgICAgIGludCB2YWx1ZSA9IHN0
YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4ocGFpci0+c2Vjb25kKCkpLT5nZXRJbnRWYWx1
ZSgpOwotICAgICAgICAgICAgQ291bnRlckRpcmVjdGl2ZXMmIGRpcmVjdGl2ZXMgPSBtYXAuYWRk
KGlkZW50aWZpZXIuaW1wbCgpLCBDb3VudGVyRGlyZWN0aXZlcygpKS5pdGVyYXRvci0+c2Vjb25k
OworICAgICAgICAgICAgQ291bnRlckRpcmVjdGl2ZXMmIGRpcmVjdGl2ZXMgPSBtYXAuYWRkKGlk
ZW50aWZpZXIuaW1wbCgpLCBDb3VudGVyRGlyZWN0aXZlcygpKS5pdGVyYXRvci0+dmFsdWU7CiAg
ICAgICAgICAgICBpZiAoY291bnRlckJlaGF2aW9yID09IFJlc2V0KSB7CiAgICAgICAgICAgICAg
ICAgZGlyZWN0aXZlcy5tX3Jlc2V0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBkaXJlY3RpdmVz
Lm1fcmVzZXRWYWx1ZSA9IHZhbHVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0
eWxlUmVzb2x2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCmlu
ZGV4IDkyYjkyNWMuLjVjMWRlNmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHls
ZVJlc29sdmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAK
QEAgLTQ5NSw3ICs0OTUsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RGZWF0dXJlcygp
CiAgICAgbV9mZWF0dXJlcy5hZGQobV9hdXRob3JTdHlsZS0+ZmVhdHVyZXMoKSk7CiAjaWYgRU5B
QkxFKFNUWUxFX1NDT1BFRCkKICAgICBmb3IgKFNjb3BlZFJ1bGVTZXRNYXA6Oml0ZXJhdG9yIGl0
ID0gbV9zY29wZWRBdXRob3JTdHlsZXMuYmVnaW4oKTsgaXQgIT0gbV9zY29wZWRBdXRob3JTdHls
ZXMuZW5kKCk7ICsraXQpCi0gICAgICAgIG1fZmVhdHVyZXMuYWRkKGl0LT5zZWNvbmQtPmZlYXR1
cmVzKCkpOworICAgICAgICBtX2ZlYXR1cmVzLmFkZChpdC0+dmFsdWUtPmZlYXR1cmVzKCkpOwog
I2VuZGlmCiAgICAgaWYgKG1fdXNlclN0eWxlKQogICAgICAgICBtX2ZlYXR1cmVzLmFkZChtX3Vz
ZXJTdHlsZS0+ZmVhdHVyZXMoKSk7CkBAIC01MzIsNyArNTMyLDcgQEAgaW5saW5lIFJ1bGVTZXQq
IFN0eWxlUmVzb2x2ZXI6OnJ1bGVTZXRGb3JTY29wZShjb25zdCBDb250YWluZXJOb2RlKiBzY29w
ZSkgY29uc3QKICAgICBpZiAoIXNjb3BlLT5oYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpKQogICAg
ICAgICByZXR1cm4gMDsKICAgICBTY29wZWRSdWxlU2V0TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9
IG1fc2NvcGVkQXV0aG9yU3R5bGVzLmZpbmQoc2NvcGUpOwotICAgIHJldHVybiBpdCAhPSBtX3Nj
b3BlZEF1dGhvclN0eWxlcy5lbmQoKSA/IGl0LT5zZWNvbmQuZ2V0KCkgOiAwOyAKKyAgICByZXR1
cm4gaXQgIT0gbV9zY29wZWRBdXRob3JTdHlsZXMuZW5kKCkgPyBpdC0+dmFsdWUuZ2V0KCkgOiAw
OyAKIH0KICNlbmRpZgogCkBAIC01NTUsOCArNTU1LDggQEAgdm9pZCBTdHlsZVJlc29sdmVyOjph
cHBlbmRBdXRob3JTdHlsZXNoZWV0cyh1bnNpZ25lZCBmaXJzdE5ldywgY29uc3QgVmVjdG9yPFJl
ZlAKICAgICAgICAgaWYgKHNjb3BlKSB7CiAgICAgICAgICAgICBTY29wZWRSdWxlU2V0TWFwOjpB
ZGRSZXN1bHQgYWRkUmVzdWx0ID0gbV9zY29wZWRBdXRob3JTdHlsZXMuYWRkKHNjb3BlLCBudWxs
cHRyKTsKICAgICAgICAgICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgICAg
ICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IFJ1bGVTZXQ6OmNyZWF0ZSgpOwotICAg
ICAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQtPmFkZFJ1bGVzRnJvbVNoZWV0KHNo
ZWV0LCAqbV9tZWRpdW0sIHRoaXMsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICBhZGRSZXN1bHQu
aXRlcmF0b3ItPnZhbHVlID0gUnVsZVNldDo6Y3JlYXRlKCk7CisgICAgICAgICAgICBhZGRSZXN1
bHQuaXRlcmF0b3ItPnZhbHVlLT5hZGRSdWxlc0Zyb21TaGVldChzaGVldCwgKm1fbWVkaXVtLCB0
aGlzLCBzY29wZSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogI2VuZGlmCkBA
IC02ODYsMTAgKzY4NiwxMCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OnN3ZWVwTWF0Y2hlZFByb3Bl
cnRpZXNDYWNoZSgpCiAgICAgTWF0Y2hlZFByb3BlcnRpZXNDYWNoZTo6aXRlcmF0b3IgaXQgPSBt
X21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUuYmVnaW4oKTsKICAgICBNYXRjaGVkUHJvcGVydGllc0Nh
Y2hlOjppdGVyYXRvciBlbmQgPSBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUuZW5kKCk7CiAgICAg
Zm9yICg7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBWZWN0b3I8TWF0Y2hlZFByb3BlcnRp
ZXM+JiBtYXRjaGVkUHJvcGVydGllcyA9IGl0LT5zZWNvbmQubWF0Y2hlZFByb3BlcnRpZXM7Cisg
ICAgICAgIFZlY3RvcjxNYXRjaGVkUHJvcGVydGllcz4mIG1hdGNoZWRQcm9wZXJ0aWVzID0gaXQt
PnZhbHVlLm1hdGNoZWRQcm9wZXJ0aWVzOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBpZiAobWF0Y2hl
ZFByb3BlcnRpZXNbaV0ucHJvcGVydGllcy0+aGFzT25lUmVmKCkpIHsKLSAgICAgICAgICAgICAg
ICB0b1JlbW92ZS5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgICAgICAgICB0b1JlbW92ZS5h
cHBlbmQoaXQtPmtleSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KQEAgLTE4NDcsNyArMTg0Nyw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6a2V5ZnJh
bWVTdHlsZXNGb3JBbmltYXRpb24oRWxlbWVudCogZSwgY29uc3QgUmVuZGVyU3R5bGUqIGVsCiAg
ICAgaWYgKGl0ID09IG1fa2V5ZnJhbWVzUnVsZU1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgY29uc3QgU3R5bGVSdWxlS2V5ZnJhbWVzKiBrZXlmcmFtZXNSdWxlID0gaXQtPnNlY29u
ZC5nZXQoKTsKKyAgICBjb25zdCBTdHlsZVJ1bGVLZXlmcmFtZXMqIGtleWZyYW1lc1J1bGUgPSBp
dC0+dmFsdWUuZ2V0KCk7CiAKICAgICAvLyBDb25zdHJ1Y3QgYW5kIHBvcHVsYXRlIHRoZSBzdHls
ZSBmb3IgZWFjaCBrZXlmcmFtZQogICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVLZXlmcmFt
ZT4gPiYga2V5ZnJhbWVzID0ga2V5ZnJhbWVzUnVsZS0+a2V5ZnJhbWVzKCk7CkBAIC0yNTE1LDcg
KzI1MTUsNyBAQCBzdGF0aWMgdm9pZCByZXBvcnRBdG9tUnVsZU1hcChNZW1vcnlDbGFzc0luZm88
UnVsZVNldD4qIGluZm8sIGNvbnN0IFJ1bGVTZXQ6OkF0bwogewogICAgIGluZm8tPmFkZEhhc2hN
YXAoYXRvbWljUnVsZU1hcCk7CiAgICAgZm9yIChSdWxlU2V0OjpBdG9tUnVsZU1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBhdG9taWNSdWxlTWFwLmJlZ2luKCk7IGl0ICE9IGF0b21pY1J1bGVNYXAu
ZW5kKCk7ICsraXQpCi0gICAgICAgIGluZm8tPmFkZEluc3RydW1lbnRlZFZlY3RvcigqaXQtPnNl
Y29uZCk7CisgICAgICAgIGluZm8tPmFkZEluc3RydW1lbnRlZFZlY3RvcigqaXQtPnZhbHVlKTsK
IH0KIAogdm9pZCBSdWxlU2V0OjpyZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBt
ZW1vcnlPYmplY3RJbmZvKSBjb25zdApAQCAtMjU4Niw3ICsyNTg2LDcgQEAgdm9pZCBSdWxlU2V0
OjphZGRUb1J1bGVTZXQoQXRvbWljU3RyaW5nSW1wbCoga2V5LCBBdG9tUnVsZU1hcCYgbWFwLCBj
b25zdCBSdWxlRGEKIHsKICAgICBpZiAoIWtleSkKICAgICAgICAgcmV0dXJuOwotICAgIE93blB0
cjxWZWN0b3I8UnVsZURhdGE+ID4mIHJ1bGVzID0gbWFwLmFkZChrZXksIG51bGxwdHIpLml0ZXJh
dG9yLT5zZWNvbmQ7CisgICAgT3duUHRyPFZlY3RvcjxSdWxlRGF0YT4gPiYgcnVsZXMgPSBtYXAu
YWRkKGtleSwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghcnVsZXMpCiAgICAg
ICAgIHJ1bGVzID0gYWRvcHRQdHIobmV3IFZlY3RvcjxSdWxlRGF0YT4pOwogICAgIHJ1bGVzLT5h
cHBlbmQocnVsZURhdGEpOwpAQCAtMjc0NSw3ICsyNzQ1LDcgQEAgc3RhdGljIGlubGluZSB2b2lk
IHNocmlua01hcFZlY3RvcnNUb0ZpdChSdWxlU2V0OjpBdG9tUnVsZU1hcCYgbWFwKQogewogICAg
IFJ1bGVTZXQ6OkF0b21SdWxlTWFwOjppdGVyYXRvciBlbmQgPSBtYXAuZW5kKCk7CiAgICAgZm9y
IChSdWxlU2V0OjpBdG9tUnVsZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5zaHJpbmtUb0ZpdCgpOworICAgICAgICBp
dC0+dmFsdWUtPnNocmlua1RvRml0KCk7CiB9CiAKIHZvaWQgUnVsZVNldDo6c2hyaW5rVG9GaXQo
KQpAQCAtMjg5MSw3ICsyODkxLDcgQEAgY29uc3QgU3R5bGVSZXNvbHZlcjo6TWF0Y2hlZFByb3Bl
cnRpZXNDYWNoZUl0ZW0qIFN0eWxlUmVzb2x2ZXI6OmZpbmRGcm9tTWF0Y2hlZFAKICAgICBNYXRj
aGVkUHJvcGVydGllc0NhY2hlOjppdGVyYXRvciBpdCA9IG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNo
ZS5maW5kKGhhc2gpOwogICAgIGlmIChpdCA9PSBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUuZW5k
KCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVJdGVtJiBj
YWNoZUl0ZW0gPSBpdC0+c2Vjb25kOworICAgIE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVJdGVtJiBj
YWNoZUl0ZW0gPSBpdC0+dmFsdWU7CiAKICAgICBzaXplX3Qgc2l6ZSA9IG1hdGNoUmVzdWx0Lm1h
dGNoZWRQcm9wZXJ0aWVzLnNpemUoKTsKICAgICBpZiAoc2l6ZSAhPSBjYWNoZUl0ZW0ubWF0Y2hl
ZFByb3BlcnRpZXMuc2l6ZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
U2hlZXRDb250ZW50cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldENvbnRlbnRz
LmNwcAppbmRleCA5NzBjODI4Li42MzAzZDBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvU3R5bGVTaGVldENvbnRlbnRzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVT
aGVldENvbnRlbnRzLmNwcApAQCAtMjYxLDcgKzI2MSw3IEBAIGNvbnN0IEF0b21pY1N0cmluZyYg
U3R5bGVTaGVldENvbnRlbnRzOjpkZXRlcm1pbmVOYW1lc3BhY2UoY29uc3QgQXRvbWljU3RyaW5n
JiBwCiAgICAgUHJlZml4TmFtZXNwYWNlVVJJTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fbmFt
ZXNwYWNlcy5maW5kKHByZWZpeCk7CiAgICAgaWYgKGl0ID09IG1fbmFtZXNwYWNlcy5lbmQoKSkK
ICAgICAgICAgcmV0dXJuIG51bGxBdG9tOwotICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgIHJl
dHVybiBpdC0+dmFsdWU7CiB9CiAKIHZvaWQgU3R5bGVTaGVldENvbnRlbnRzOjpwYXJzZUF1dGhv
clN0eWxlU2hlZXQoY29uc3QgQ2FjaGVkQ1NTU3R5bGVTaGVldCogY2FjaGVkU3R5bGVTaGVldCwg
Y29uc3QgU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL0NoZWNrZWRSYWRpb0J1dHRvbnMuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9t
L0NoZWNrZWRSYWRpb0J1dHRvbnMuY3BwCmluZGV4IGU2NzIzMjkuLjlmYTUwOWIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGVja2VkUmFkaW9CdXR0b25zLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vQ2hlY2tlZFJhZGlvQnV0dG9ucy5jcHAKQEAgLTE4NSw3ICsxODUsNyBA
QCB2b2lkIENoZWNrZWRSYWRpb0J1dHRvbnM6OmFkZEJ1dHRvbihIVE1MSW5wdXRFbGVtZW50KiBl
bGVtZW50KQogICAgIGlmICghbV9uYW1lVG9Hcm91cE1hcCkKICAgICAgICAgbV9uYW1lVG9Hcm91
cE1hcCA9IGFkb3B0UHRyKG5ldyBOYW1lVG9Hcm91cE1hcCk7CiAKLSAgICBPd25QdHI8UmFkaW9C
dXR0b25Hcm91cD4mIGdyb3VwID0gbV9uYW1lVG9Hcm91cE1hcC0+YWRkKGVsZW1lbnQtPm5hbWUo
KS5pbXBsKCksIFBhc3NPd25QdHI8UmFkaW9CdXR0b25Hcm91cD4oKSkuaXRlcmF0b3ItPnNlY29u
ZDsKKyAgICBPd25QdHI8UmFkaW9CdXR0b25Hcm91cD4mIGdyb3VwID0gbV9uYW1lVG9Hcm91cE1h
cC0+YWRkKGVsZW1lbnQtPm5hbWUoKS5pbXBsKCksIFBhc3NPd25QdHI8UmFkaW9CdXR0b25Hcm91
cD4oKSkuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghZ3JvdXApCiAgICAgICAgIGdyb3VwID0g
UmFkaW9CdXR0b25Hcm91cDo6Y3JlYXRlKCk7CiAgICAgZ3JvdXAtPmFkZChlbGVtZW50KTsKQEAg
LTI0Niw4ICsyNDYsOCBAQCB2b2lkIENoZWNrZWRSYWRpb0J1dHRvbnM6OnJlbW92ZUJ1dHRvbihI
VE1MSW5wdXRFbGVtZW50KiBlbGVtZW50KQogICAgIE5hbWVUb0dyb3VwTWFwOjppdGVyYXRvciBp
dCA9IG1fbmFtZVRvR3JvdXBNYXAtPmZpbmQoZWxlbWVudC0+bmFtZSgpLmltcGwoKSk7CiAgICAg
aWYgKGl0ID09IG1fbmFtZVRvR3JvdXBNYXAtPmVuZCgpKQogICAgICAgICByZXR1cm47Ci0gICAg
aXQtPnNlY29uZC0+cmVtb3ZlKGVsZW1lbnQpOwotICAgIGlmIChpdC0+c2Vjb25kLT5pc0VtcHR5
KCkpIHsKKyAgICBpdC0+dmFsdWUtPnJlbW92ZShlbGVtZW50KTsKKyAgICBpZiAoaXQtPnZhbHVl
LT5pc0VtcHR5KCkpIHsKICAgICAgICAgLy8gRklYTUU6IFdlIG1heSBza2lwIGRlYWxsb2NhdGlu
ZyB0aGUgZW1wdHkgUmFkaW9CdXR0b25Hcm91cCBmb3IKICAgICAgICAgLy8gcGVyZm9ybWFuY2Ug
aW1wcm92ZW1lbnQuIElmIHdlIGRvIHNvLCB3ZSBuZWVkIHRvIGNoYW5nZSB0aGUga2V5IHR5cGUK
ICAgICAgICAgLy8gb2YgbV9uYW1lVG9Hcm91cE1hcCBmcm9tIEF0b21pY1N0cmluZ0ltcGwqIHRv
IFJlZlB0cjxBdG9taWNTdHJpbmdJbXBsPi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9DaGlsZExpc3RNdXRhdGlvblNjb3BlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZExp
c3RNdXRhdGlvblNjb3BlLmNwcAppbmRleCBmNGEyZGEwNC4uYWZkOGRkOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL0NoaWxkTGlzdE11dGF0aW9uU2NvcGUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9DaGlsZExpc3RNdXRhdGlvblNjb3BlLmNwcApAQCAtMTkyLDI3ICsxOTIs
MjcgQEAgdm9pZCBDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdGlvblJv
dXRlcjo6Y2hpbGRBZGRlZChOb2RlKiB0YXJnZXQKIHsKICAgICBIYXNoTWFwPE5vZGUqLCBPd25Q
dHI8Q2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRvcj4gPjo6aXRlcmF0
b3IgaXRlciA9IG1fYWNjdW11bGF0aW9ucy5maW5kKHRhcmdldCk7CiAgICAgQVNTRVJUKGl0ZXIg
IT0gbV9hY2N1bXVsYXRpb25zLmVuZCgpKTsKLSAgICBpZiAoaXRlciA9PSBtX2FjY3VtdWxhdGlv
bnMuZW5kKCkgfHwgIWl0ZXItPnNlY29uZCkKKyAgICBpZiAoaXRlciA9PSBtX2FjY3VtdWxhdGlv
bnMuZW5kKCkgfHwgIWl0ZXItPnZhbHVlKQogICAgICAgICByZXR1cm47CiAKLSAgICBpdGVyLT5z
ZWNvbmQtPmNoaWxkQWRkZWQoY2hpbGQpOworICAgIGl0ZXItPnZhbHVlLT5jaGlsZEFkZGVkKGNo
aWxkKTsKIH0KIAogdm9pZCBDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxh
dGlvblJvdXRlcjo6d2lsbFJlbW92ZUNoaWxkKE5vZGUqIHRhcmdldCwgTm9kZSogY2hpbGQpCiB7
CiAgICAgSGFzaE1hcDxOb2RlKiwgT3duUHRyPENoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0
aW9uQWNjdW11bGF0b3I+ID46Oml0ZXJhdG9yIGl0ZXIgPSBtX2FjY3VtdWxhdGlvbnMuZmluZCh0
YXJnZXQpOwogICAgIEFTU0VSVChpdGVyICE9IG1fYWNjdW11bGF0aW9ucy5lbmQoKSk7Ci0gICAg
aWYgKGl0ZXIgPT0gbV9hY2N1bXVsYXRpb25zLmVuZCgpIHx8ICFpdGVyLT5zZWNvbmQpCisgICAg
aWYgKGl0ZXIgPT0gbV9hY2N1bXVsYXRpb25zLmVuZCgpIHx8ICFpdGVyLT52YWx1ZSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgaXRlci0+c2Vjb25kLT53aWxsUmVtb3ZlQ2hpbGQoY2hpbGQpOwor
ICAgIGl0ZXItPnZhbHVlLT53aWxsUmVtb3ZlQ2hpbGQoY2hpbGQpOwogfQogCiB2b2lkIENoaWxk
TGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVyOjppbmNyZW1lbnRT
Y29waW5nTGV2ZWwoTm9kZSogdGFyZ2V0KQogewogICAgIFNjb3BpbmdMZXZlbE1hcDo6QWRkUmVz
dWx0IHJlc3VsdCA9IG1fc2NvcGluZ0xldmVscy5hZGQodGFyZ2V0LCAxKTsKICAgICBpZiAoIXJl
c3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgICsrKHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsK
KyAgICAgICAgKysocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKQEAgLTIyOSw4ICsyMjksOCBAQCB2b2lkIENoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11
dGF0aW9uQWNjdW11bGF0aW9uUm91dGVyOjpkZWNyZW1lbnRTY29waW5nTGV2ZWwoTgogICAgIFNj
b3BpbmdMZXZlbE1hcDo6aXRlcmF0b3IgaXRlciA9IG1fc2NvcGluZ0xldmVscy5maW5kKHRhcmdl
dCk7CiAgICAgQVNTRVJUKGl0ZXIgIT0gbV9zY29waW5nTGV2ZWxzLmVuZCgpKTsKIAotICAgIC0t
KGl0ZXItPnNlY29uZCk7Ci0gICAgaWYgKGl0ZXItPnNlY29uZCA+IDApCisgICAgLS0oaXRlci0+
dmFsdWUpOworICAgIGlmIChpdGVyLT52YWx1ZSA+IDApCiAgICAgICAgIHJldHVybjsKIAogICAg
IG1fc2NvcGluZ0xldmVscy5yZW1vdmUoaXRlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRl
eCAxNjlkOGE1Li5kOTRiYTUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTI5MzYsNyAr
MjkzNiw3IEBAIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4gPiogRG9jdW1lbnQ6
OnBhZ2VHcm91cFVzZXJTaGVldHMoKSBjb25zdAogCiAgICAgVXNlclN0eWxlU2hlZXRNYXA6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IHNoZWV0c01hcC0+ZW5kKCk7CiAgICAgZm9yIChVc2VyU3R5bGVT
aGVldE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBzaGVldHNNYXAtPmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewotICAgICAgICBjb25zdCBVc2VyU3R5bGVTaGVldFZlY3Rvciogc2hlZXRzID0g
aXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgY29uc3QgVXNlclN0eWxlU2hlZXRWZWN0b3IqIHNo
ZWV0cyA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHNoZWV0cy0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIGNvbnN0IFVzZXJTdHlsZVNoZWV0
KiBzaGVldCA9IHNoZWV0cy0+YXQoaSkuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoc2hlZXQtPmlu
amVjdGVkRnJhbWVzKCkgPT0gSW5qZWN0SW5Ub3BGcmFtZU9ubHkgJiYgb3duZXJFbGVtZW50KCkp
CkBAIC00ODExLDEwICs0ODExLDEwIEBAIFBhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+IERvY3Vt
ZW50Ojp3aW5kb3dOYW1lZEl0ZW1zKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkKIHsKICAgICBO
YW1lZENvbGxlY3Rpb25NYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX3dpbmRvd05hbWVkSXRlbUNv
bGxlY3Rpb25zLmFkZChuYW1lLCAwKTsKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAg
ICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1
bHQuaXRlcmF0b3ItPnZhbHVlOwogCiAgICAgUmVmUHRyPEhUTUxOYW1lQ29sbGVjdGlvbj4gY29s
bGVjdGlvbiA9IEhUTUxOYW1lQ29sbGVjdGlvbjo6Y3JlYXRlKHRoaXMsIFdpbmRvd05hbWVkSXRl
bXMsIG5hbWUpOwotICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gY29sbGVjdGlvbi5nZXQo
KTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gY29sbGVjdGlvbi5nZXQoKTsKICAgICBy
ZXR1cm4gY29sbGVjdGlvbi5yZWxlYXNlKCk7CiB9CiAKQEAgLTQ4MjIsMTAgKzQ4MjIsMTAgQEAg
UGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gRG9jdW1lbnQ6OmRvY3VtZW50TmFtZWRJdGVtcyhj
b25zdCBBdG9taWNTdHJpbmcmIG5hbWUKIHsKICAgICBOYW1lZENvbGxlY3Rpb25NYXA6OkFkZFJl
c3VsdCByZXN1bHQgPSBtX2RvY3VtZW50TmFtZWRJdGVtQ29sbGVjdGlvbnMuYWRkKG5hbWUsIDAp
OwogICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJldHVybiByZXN1bHQuaXRl
cmF0b3ItPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAK
ICAgICBSZWZQdHI8SFRNTE5hbWVDb2xsZWN0aW9uPiBjb2xsZWN0aW9uID0gSFRNTE5hbWVDb2xs
ZWN0aW9uOjpjcmVhdGUodGhpcywgRG9jdW1lbnROYW1lZEl0ZW1zLCBuYW1lKTsKLSAgICByZXN1
bHQuaXRlcmF0b3ItPnNlY29uZCA9IGNvbGxlY3Rpb24uZ2V0KCk7CisgICAgcmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZSA9IGNvbGxlY3Rpb24uZ2V0KCk7CiAgICAgcmV0dXJuIGNvbGxlY3Rpb24ucmVs
ZWFzZSgpOwogfQogCkBAIC01MTYwLDcgKzUxNjAsNyBAQCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
KiBEb2N1bWVudDo6Z2V0Q1NTQ2FudmFzQ29udGV4dChjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0
CiAKIEhUTUxDYW52YXNFbGVtZW50KiBEb2N1bWVudDo6Z2V0Q1NTQ2FudmFzRWxlbWVudChjb25z
dCBTdHJpbmcmIG5hbWUpCiB7Ci0gICAgUmVmUHRyPEhUTUxDYW52YXNFbGVtZW50PiYgZWxlbWVu
dCA9IG1fY3NzQ2FudmFzRWxlbWVudHMuYWRkKG5hbWUsIDApLml0ZXJhdG9yLT5zZWNvbmQ7Cisg
ICAgUmVmUHRyPEhUTUxDYW52YXNFbGVtZW50PiYgZWxlbWVudCA9IG1fY3NzQ2FudmFzRWxlbWVu
dHMuYWRkKG5hbWUsIDApLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoIWVsZW1lbnQpCiAgICAg
ICAgIGVsZW1lbnQgPSBIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlKHRoaXMpOwogICAgIHJldHVy
biBlbGVtZW50LmdldCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
TWFya2VyQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJD
b250cm9sbGVyLmNwcAppbmRleCBhM2ViYzkzLi5iMmYwMDg5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcApAQCAtMzExLDcgKzMxMSw3IEBA
IERvY3VtZW50TWFya2VyKiBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Om1hcmtlckNvbnRhaW5p
bmdQb2ludChjb25zdCBMYXlvdXRQb2luCiAgICAgTWFya2VyTWFwOjppdGVyYXRvciBlbmQgPSBt
X21hcmtlcnMuZW5kKCk7CiAgICAgZm9yIChNYXJrZXJNYXA6Oml0ZXJhdG9yIG5vZGVJdGVyYXRv
ciA9IG1fbWFya2Vycy5iZWdpbigpOyBub2RlSXRlcmF0b3IgIT0gZW5kOyArK25vZGVJdGVyYXRv
cikgewogICAgICAgICAvLyBpbm5lciBsb29wOyBwcm9jZXNzIGVhY2ggbWFya2VyIGluIHRoaXMg
bm9kZQotICAgICAgICBNYXJrZXJMaXN0KiBsaXN0ID0gbm9kZUl0ZXJhdG9yLT5zZWNvbmQ7Cisg
ICAgICAgIE1hcmtlckxpc3QqIGxpc3QgPSBub2RlSXRlcmF0b3ItPnZhbHVlOwogICAgICAgICB1
bnNpZ25lZCBtYXJrZXJDb3VudCA9IGxpc3QtPnNpemUoKTsKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBtYXJrZXJJbmRleCA9IDA7IG1hcmtlckluZGV4IDwgbWFya2VyQ291bnQ7ICsrbWFya2VySW5k
ZXgpIHsKICAgICAgICAgICAgIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXImIG1hcmtlciA9IGxpc3Qt
PmF0KG1hcmtlckluZGV4KTsKQEAgLTM5OSw3ICszOTksNyBAQCBWZWN0b3I8SW50UmVjdD4gRG9j
dW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW5kZXJlZFJlY3RzRm9yTWFya2VycyhEb2N1bWVudE1h
cmtlcgogICAgIE1hcmtlck1hcDo6aXRlcmF0b3IgZW5kID0gbV9tYXJrZXJzLmVuZCgpOwogICAg
IGZvciAoTWFya2VyTWFwOjppdGVyYXRvciBub2RlSXRlcmF0b3IgPSBtX21hcmtlcnMuYmVnaW4o
KTsgbm9kZUl0ZXJhdG9yICE9IGVuZDsgKytub2RlSXRlcmF0b3IpIHsKICAgICAgICAgLy8gaW5u
ZXIgbG9vcDsgcHJvY2VzcyBlYWNoIG1hcmtlciBpbiB0aGlzIG5vZGUKLSAgICAgICAgTWFya2Vy
TGlzdCogbGlzdCA9IG5vZGVJdGVyYXRvci0+c2Vjb25kOworICAgICAgICBNYXJrZXJMaXN0KiBs
aXN0ID0gbm9kZUl0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgdW5zaWduZWQgbWFya2VyQ291bnQg
PSBsaXN0LT5zaXplKCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgbWFya2VySW5kZXggPSAwOyBt
YXJrZXJJbmRleCA8IG1hcmtlckNvdW50OyArK21hcmtlckluZGV4KSB7CiAgICAgICAgICAgICBj
b25zdCBSZW5kZXJlZERvY3VtZW50TWFya2VyJiBtYXJrZXIgPSBsaXN0LT5hdChtYXJrZXJJbmRl
eCk7CkBAIC00MjYsNyArNDI2LDcgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJl
bW92ZU1hcmtlcnMoTm9kZSogbm9kZSwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclQKICAgICAKICAg
ICBNYXJrZXJNYXA6Oml0ZXJhdG9yIGl0ZXJhdG9yID0gbV9tYXJrZXJzLmZpbmQobm9kZSk7CiAg
ICAgaWYgKGl0ZXJhdG9yICE9IG1fbWFya2Vycy5lbmQoKSkKLSAgICAgICAgcmVtb3ZlTWFya2Vy
c0Zyb21MaXN0KG5vZGUsIGl0ZXJhdG9yLT5zZWNvbmQsIG1hcmtlclR5cGVzKTsKKyAgICAgICAg
cmVtb3ZlTWFya2Vyc0Zyb21MaXN0KG5vZGUsIGl0ZXJhdG9yLT52YWx1ZSwgbWFya2VyVHlwZXMp
OwogfQogCiB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVtb3ZlTWFya2VycyhEb2N1
bWVudE1hcmtlcjo6TWFya2VyVHlwZXMgbWFya2VyVHlwZXMpCkBAIC00MzksNyArNDM5LDcgQEAg
dm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbW92ZU1hcmtlcnMoRG9jdW1lbnRNYXJr
ZXI6Ok1hcmtlclR5cGVzIG1hcmtlclQKICAgICBNYXJrZXJNYXAgbWFya2VyTWFwQ29weSA9IG1f
bWFya2VyczsKICAgICBNYXJrZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IG1hcmtlck1hcENvcHkuZW5k
KCk7CiAgICAgZm9yIChNYXJrZXJNYXA6Oml0ZXJhdG9yIGkgPSBtYXJrZXJNYXBDb3B5LmJlZ2lu
KCk7IGkgIT0gZW5kOyArK2kpCi0gICAgICAgIHJlbW92ZU1hcmtlcnNGcm9tTGlzdChpLT5maXJz
dC5nZXQoKSwgaS0+c2Vjb25kLCBtYXJrZXJUeXBlcyk7CisgICAgICAgIHJlbW92ZU1hcmtlcnNG
cm9tTGlzdChpLT5rZXkuZ2V0KCksIGktPnZhbHVlLCBtYXJrZXJUeXBlcyk7CiAgICAgbV9wb3Nz
aWJseUV4aXN0aW5nTWFya2VyVHlwZXMucmVtb3ZlKG1hcmtlclR5cGVzKTsKIH0KIApAQCAtNDk1
LDEwICs0OTUsMTAgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlcGFpbnRNYXJr
ZXJzKERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlcyBtYXJrZXIKICAgICAvLyBvdXRlciBsb29w
OiBwcm9jZXNzIGVhY2ggbWFya2VyZWQgbm9kZSBpbiB0aGUgZG9jdW1lbnQKICAgICBNYXJrZXJN
YXA6Oml0ZXJhdG9yIGVuZCA9IG1fbWFya2Vycy5lbmQoKTsKICAgICBmb3IgKE1hcmtlck1hcDo6
aXRlcmF0b3IgaSA9IG1fbWFya2Vycy5iZWdpbigpOyBpICE9IGVuZDsgKytpKSB7Ci0gICAgICAg
IE5vZGUqIG5vZGUgPSBpLT5maXJzdC5nZXQoKTsKKyAgICAgICAgTm9kZSogbm9kZSA9IGktPmtl
eS5nZXQoKTsKIAogICAgICAgICAvLyBpbm5lciBsb29wOiBwcm9jZXNzIGVhY2ggbWFya2VyIGlu
IHRoZSBjdXJyZW50IG5vZGUKLSAgICAgICAgTWFya2VyTGlzdCogbGlzdCA9IGktPnNlY29uZDsK
KyAgICAgICAgTWFya2VyTGlzdCogbGlzdCA9IGktPnZhbHVlOwogICAgICAgICBib29sIG5vZGVO
ZWVkc1JlcGFpbnQgPSBmYWxzZTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgIT0gbGlz
dC0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIERvY3VtZW50TWFya2VyIG1hcmtlciA9IGxp
c3QtPmF0KGkpOwpAQCAtNTI2LDcgKzUyNiw3IEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyOjppbnZhbGlkYXRlUmVuZGVyZWRSZWN0c0Zvck1hcmtlcnNJblJlY3QoY29uc3QgTGF5CiAg
ICAgZm9yIChNYXJrZXJNYXA6Oml0ZXJhdG9yIGkgPSBtX21hcmtlcnMuYmVnaW4oKTsgaSAhPSBl
bmQ7ICsraSkgewogCiAgICAgICAgIC8vIGlubmVyIGxvb3A6IHByb2Nlc3MgZWFjaCByZWN0IGlu
IHRoZSBjdXJyZW50IG5vZGUKLSAgICAgICAgTWFya2VyTGlzdCogbGlzdCA9IGktPnNlY29uZDsK
KyAgICAgICAgTWFya2VyTGlzdCogbGlzdCA9IGktPnZhbHVlOwogICAgICAgICBmb3IgKHNpemVf
dCBsaXN0SW5kZXggPSAwOyBsaXN0SW5kZXggPCBsaXN0LT5zaXplKCk7ICsrbGlzdEluZGV4KQog
ICAgICAgICAgICAgbGlzdC0+YXQobGlzdEluZGV4KS5pbnZhbGlkYXRlKHIpOwogICAgIH0KQEAg
LTY3NSw5ICs2NzUsOSBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6c2hvd01hcmtl
cnMoKSBjb25zdAogICAgIGZwcmludGYoc3RkZXJyLCAiJWQgbm9kZXMgaGF2ZSBtYXJrZXJzOlxu
IiwgbV9tYXJrZXJzLnNpemUoKSk7CiAgICAgTWFya2VyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQg
PSBtX21hcmtlcnMuZW5kKCk7CiAgICAgZm9yIChNYXJrZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIG5v
ZGVJdGVyYXRvciA9IG1fbWFya2Vycy5iZWdpbigpOyBub2RlSXRlcmF0b3IgIT0gZW5kOyArK25v
ZGVJdGVyYXRvcikgewotICAgICAgICBOb2RlKiBub2RlID0gbm9kZUl0ZXJhdG9yLT5maXJzdC5n
ZXQoKTsKKyAgICAgICAgTm9kZSogbm9kZSA9IG5vZGVJdGVyYXRvci0+a2V5LmdldCgpOwogICAg
ICAgICBmcHJpbnRmKHN0ZGVyciwgIiVwIiwgbm9kZSk7Ci0gICAgICAgIE1hcmtlckxpc3QqIGxp
c3QgPSBub2RlSXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgTWFya2VyTGlzdCogbGlzdCA9IG5v
ZGVJdGVyYXRvci0+dmFsdWU7CiAgICAgICAgIGZvciAodW5zaWduZWQgbWFya2VySW5kZXggPSAw
OyBtYXJrZXJJbmRleCA8IGxpc3QtPnNpemUoKTsgKyttYXJrZXJJbmRleCkgewogICAgICAgICAg
ICAgY29uc3QgRG9jdW1lbnRNYXJrZXImIG1hcmtlciA9IGxpc3QtPmF0KG1hcmtlckluZGV4KTsK
ICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiICVkOlslZDolZF0oJWQpIiwgbWFya2VyLnR5
cGUoKSwgbWFya2VyLnN0YXJ0T2Zmc2V0KCksIG1hcmtlci5lbmRPZmZzZXQoKSwgbWFya2VyLmFj
dGl2ZU1hdGNoKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50T3Jk
ZXJlZE1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRPcmRlcmVkTWFwLmNwcApp
bmRleCAwODJhYTA3Li4xMjk3ZTUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnRPcmRlcmVkTWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRPcmRl
cmVkTWFwLmNwcApAQCAtOTgsNyArOTgsNyBAQCB2b2lkIERvY3VtZW50T3JkZXJlZE1hcDo6cmVt
b3ZlKEF0b21pY1N0cmluZ0ltcGwqIGtleSwgRWxlbWVudCogZWxlbWVudCkKIAogICAgIG1fbWFw
LmNoZWNrQ29uc2lzdGVuY3koKTsKICAgICBNYXA6Oml0ZXJhdG9yIGNhY2hlZEl0ZW0gPSBtX21h
cC5maW5kKGtleSk7Ci0gICAgaWYgKGNhY2hlZEl0ZW0gIT0gbV9tYXAuZW5kKCkgJiYgY2FjaGVk
SXRlbS0+c2Vjb25kID09IGVsZW1lbnQpCisgICAgaWYgKGNhY2hlZEl0ZW0gIT0gbV9tYXAuZW5k
KCkgJiYgY2FjaGVkSXRlbS0+dmFsdWUgPT0gZWxlbWVudCkKICAgICAgICAgbV9tYXAucmVtb3Zl
KGNhY2hlZEl0ZW0pOwogICAgIGVsc2UKICAgICAgICAgbV9kdXBsaWNhdGVDb3VudHMucmVtb3Zl
KGtleSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0dHJpYnV0ZURh
dGEuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmNwcAppbmRl
eCA2ZmI1M2Q1Li5kZWY0MWRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVu
dEF0dHJpYnV0ZURhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50QXR0cmli
dXRlRGF0YS5jcHAKQEAgLTExMSw3ICsxMTEsNyBAQCBzdGF0aWMgQXR0ckxpc3QqIGVuc3VyZUF0
dHJMaXN0Rm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50KQogICAgIEFTU0VSVCghYXR0ckxpc3RN
YXAoKS5jb250YWlucyhlbGVtZW50KSk7CiAgICAgZWxlbWVudC0+c2V0SGFzQXR0ckxpc3QoKTsK
ICAgICBBdHRyTGlzdE1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IGF0dHJMaXN0TWFwKCkuYWRkKGVs
ZW1lbnQsIGFkb3B0UHRyKG5ldyBBdHRyTGlzdCkpOwotICAgIHJldHVybiByZXN1bHQuaXRlcmF0
b3ItPnNlY29uZC5nZXQoKTsKKyAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQo
KTsKIH0KIAogc3RhdGljIHZvaWQgcmVtb3ZlQXR0ckxpc3RGb3JFbGVtZW50KEVsZW1lbnQqIGVs
ZW1lbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwCmluZGV4IDk5Nzc3MWUu
LmQwYTc5OWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwCkBAIC0xMTAs
NyArMTEwLDcgQEAgRXZlbnRUYXJnZXQqIEV2ZW50UmVsYXRlZFRhcmdldEFkanVzdGVyOjpmaW5k
UmVsYXRlZFRhcmdldChUcmVlU2NvcGUqIHNjb3BlKQogICAgICAgICBwYXJlbnRUcmVlU2NvcGVz
LmFwcGVuZChzY29wZSk7CiAgICAgICAgIFJlbGF0ZWRUYXJnZXRNYXA6OmNvbnN0X2l0ZXJhdG9y
IGZvdW5kID0gbV9yZWxhdGVkVGFyZ2V0TWFwLmZpbmQoc2NvcGUpOwogICAgICAgICBpZiAoZm91
bmQgIT0gbV9yZWxhdGVkVGFyZ2V0TWFwLmVuZCgpKSB7Ci0gICAgICAgICAgICByZWxhdGVkVGFy
Z2V0ID0gZm91bmQtPnNlY29uZDsKKyAgICAgICAgICAgIHJlbGF0ZWRUYXJnZXQgPSBmb3VuZC0+
dmFsdWU7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBzY29wZSA9IHNj
b3BlLT5wYXJlbnRUcmVlU2NvcGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9F
dmVudExpc3RlbmVyTWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudExpc3RlbmVyTWFw
LmNwcAppbmRleCBjMWZkNGQ3Li5hZjhjNDhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vRXZlbnRMaXN0ZW5lck1hcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TGlz
dGVuZXJNYXAuY3BwCkBAIC0xMDIsNyArMTAyLDcgQEAgVmVjdG9yPEF0b21pY1N0cmluZz4gRXZl
bnRMaXN0ZW5lck1hcDo6ZXZlbnRUeXBlcygpIGNvbnN0CiAgICAgICAgIEV2ZW50TGlzdGVuZXJI
YXNoTWFwOjppdGVyYXRvciBpdCA9IG1faGFzaE1hcC0+YmVnaW4oKTsKICAgICAgICAgRXZlbnRM
aXN0ZW5lckhhc2hNYXA6Oml0ZXJhdG9yIGVuZCA9IG1faGFzaE1hcC0+ZW5kKCk7CiAgICAgICAg
IGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICB0eXBlcy5hcHBlbmQoaXQtPmZp
cnN0KTsKKyAgICAgICAgICAgIHR5cGVzLmFwcGVuZChpdC0+a2V5KTsKICAgICB9IGVsc2UgaWYg
KG1fc2luZ2xlRXZlbnRMaXN0ZW5lclZlY3RvcikKICAgICAgICAgdHlwZXMuYXBwZW5kKG1fc2lu
Z2xlRXZlbnRMaXN0ZW5lclR5cGUpOwogCkBAIC0xMzYsOSArMTM2LDkgQEAgYm9vbCBFdmVudExp
c3RlbmVyTWFwOjphZGQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8
RXZlbnRMaXN0ZW4KICAgICBpZiAobV9oYXNoTWFwKSB7CiAgICAgICAgIEV2ZW50TGlzdGVuZXJI
YXNoTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9oYXNoTWFwLT5hZGQoZXZlbnRUeXBlLCBudWxs
cHRyKTsKICAgICAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICAgICAgcmVzdWx0
Lml0ZXJhdG9yLT5zZWNvbmQgPSBhZG9wdFB0cihuZXcgRXZlbnRMaXN0ZW5lclZlY3Rvcik7Cisg
ICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gYWRvcHRQdHIobmV3IEV2ZW50TGlz
dGVuZXJWZWN0b3IpOwogCi0gICAgICAgIHJldHVybiBhZGRMaXN0ZW5lclRvVmVjdG9yKHJlc3Vs
dC5pdGVyYXRvci0+c2Vjb25kLmdldCgpLCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSk7CisgICAgICAg
IHJldHVybiBhZGRMaXN0ZW5lclRvVmVjdG9yKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0KCks
IGxpc3RlbmVyLCB1c2VDYXB0dXJlKTsKICAgICB9CiAKICAgICBpZiAoIW1fc2luZ2xlRXZlbnRM
aXN0ZW5lclZlY3RvcikgewpAQCAtMTc5LDggKzE3OSw4IEBAIGJvb2wgRXZlbnRMaXN0ZW5lck1h
cDo6cmVtb3ZlKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyKiBs
aXN0CiAgICAgaWYgKGl0ID09IG1faGFzaE1hcC0+ZW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIGJvb2wgd2FzUmVtb3ZlZCA9IHJlbW92ZUxpc3RlbmVyRnJvbVZlY3RvcihpdC0+
c2Vjb25kLmdldCgpLCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSwgaW5kZXhPZlJlbW92ZWRMaXN0ZW5l
cik7Ci0gICAgaWYgKGl0LT5zZWNvbmQtPmlzRW1wdHkoKSkKKyAgICBib29sIHdhc1JlbW92ZWQg
PSByZW1vdmVMaXN0ZW5lckZyb21WZWN0b3IoaXQtPnZhbHVlLmdldCgpLCBsaXN0ZW5lciwgdXNl
Q2FwdHVyZSwgaW5kZXhPZlJlbW92ZWRMaXN0ZW5lcik7CisgICAgaWYgKGl0LT52YWx1ZS0+aXNF
bXB0eSgpKQogICAgICAgICBtX2hhc2hNYXAtPnJlbW92ZShpdCk7CiAgICAgcmV0dXJuIHdhc1Jl
bW92ZWQ7CiB9CkBAIC0xOTMsNyArMTkzLDcgQEAgRXZlbnRMaXN0ZW5lclZlY3RvciogRXZlbnRM
aXN0ZW5lck1hcDo6ZmluZChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSkKICAgICAgICAg
RXZlbnRMaXN0ZW5lckhhc2hNYXA6Oml0ZXJhdG9yIGl0ID0gbV9oYXNoTWFwLT5maW5kKGV2ZW50
VHlwZSk7CiAgICAgICAgIGlmIChpdCA9PSBtX2hhc2hNYXAtPmVuZCgpKQogICAgICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICByZXR1
cm4gaXQtPnZhbHVlLmdldCgpOwogICAgIH0KIAogICAgIGlmIChtX3NpbmdsZUV2ZW50TGlzdGVu
ZXJUeXBlID09IGV2ZW50VHlwZSkKQEAgLTIyNyw3ICsyMjcsNyBAQCB2b2lkIEV2ZW50TGlzdGVu
ZXJNYXA6OnJlbW92ZUZpcnN0RXZlbnRMaXN0ZW5lckNyZWF0ZWRGcm9tTWFya3VwKGNvbnN0IEF0
b21pY1N0cgogICAgICAgICBFdmVudExpc3RlbmVySGFzaE1hcDo6aXRlcmF0b3IgcmVzdWx0ID0g
bV9oYXNoTWFwLT5maW5kKGV2ZW50VHlwZSk7CiAgICAgICAgIEFTU0VSVChyZXN1bHQgIT0gbV9o
YXNoTWFwLT5lbmQoKSk7CiAKLSAgICAgICAgRXZlbnRMaXN0ZW5lclZlY3RvciogbGlzdGVuZXJW
ZWN0b3IgPSByZXN1bHQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgRXZlbnRMaXN0ZW5lclZlY3Rv
ciogbGlzdGVuZXJWZWN0b3IgPSByZXN1bHQtPnZhbHVlLmdldCgpOwogICAgICAgICBBU1NFUlQo
bGlzdGVuZXJWZWN0b3IpOwogCiAgICAgICAgIHJlbW92ZUZpcnN0TGlzdGVuZXJDcmVhdGVkRnJv
bU1hcmt1cChsaXN0ZW5lclZlY3Rvcik7CkBAIC0yNjUsNyArMjY1LDcgQEAgdm9pZCBFdmVudExp
c3RlbmVyTWFwOjpjb3B5RXZlbnRMaXN0ZW5lcnNOb3RDcmVhdGVkRnJvbU1hcmt1cFRvVGFyZ2V0
KEV2ZW50VGFyZ2UKICAgICBpZiAobV9oYXNoTWFwKSB7CiAgICAgICAgIEV2ZW50TGlzdGVuZXJI
YXNoTWFwOjppdGVyYXRvciBlbmQgPSBtX2hhc2hNYXAtPmVuZCgpOwogICAgICAgICBmb3IgKEV2
ZW50TGlzdGVuZXJIYXNoTWFwOjppdGVyYXRvciBpdCA9IG1faGFzaE1hcC0+YmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KQotICAgICAgICAgICAgY29weUxpc3RlbmVyc05vdENyZWF0ZWRGcm9tTWFy
a3VwVG9UYXJnZXQoaXQtPmZpcnN0LCBpdC0+c2Vjb25kLmdldCgpLCB0YXJnZXQpOworICAgICAg
ICAgICAgY29weUxpc3RlbmVyc05vdENyZWF0ZWRGcm9tTWFya3VwVG9UYXJnZXQoaXQtPmtleSwg
aXQtPnZhbHVlLmdldCgpLCB0YXJnZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0z
MjUsNyArMzI1LDcgQEAgRXZlbnRMaXN0ZW5lciogRXZlbnRMaXN0ZW5lckl0ZXJhdG9yOjpuZXh0
TGlzdGVuZXIoKQogCiAgICAgaWYgKG1fbWFwLT5tX2hhc2hNYXApIHsKICAgICAgICAgZm9yICg7
IG1fbWFwSXRlcmF0b3IgIT0gbV9tYXBFbmQ7ICsrbV9tYXBJdGVyYXRvcikgewotICAgICAgICAg
ICAgRXZlbnRMaXN0ZW5lclZlY3RvciYgbGlzdGVuZXJzID0gKm1fbWFwSXRlcmF0b3ItPnNlY29u
ZDsKKyAgICAgICAgICAgIEV2ZW50TGlzdGVuZXJWZWN0b3ImIGxpc3RlbmVycyA9ICptX21hcEl0
ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgICAgIGlmIChtX2luZGV4IDwgbGlzdGVuZXJzLnNpemUo
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gbGlzdGVuZXJzW21faW5kZXgrK10ubGlzdGVuZXIu
Z2V0KCk7CiAgICAgICAgICAgICBtX2luZGV4ID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9JZFRhcmdldE9ic2VydmVyUmVnaXN0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9t
L0lkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeS5jcHAKaW5kZXggNWZjMjZhYy4uYWFmYThhMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0lkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0lkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeS5jcHAKQEAg
LTQyLDkgKzQyLDkgQEAgdm9pZCBJZFRhcmdldE9ic2VydmVyUmVnaXN0cnk6OmFkZE9ic2VydmVy
KGNvbnN0IEF0b21pY1N0cmluZyYgaWQsIElkVGFyZ2V0T2JzZXIKICAgICAKICAgICBJZFRvT2Jz
ZXJ2ZXJTZXRNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX3JlZ2lzdHJ5LmFkZChpZC5pbXBsKCks
IG51bGxwdHIpOwogICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgcmVzdWx0Lml0
ZXJhdG9yLT5zZWNvbmQgPSBhZG9wdFB0cihuZXcgT2JzZXJ2ZXJTZXQoKSk7CisgICAgICAgIHJl
c3VsdC5pdGVyYXRvci0+dmFsdWUgPSBhZG9wdFB0cihuZXcgT2JzZXJ2ZXJTZXQoKSk7CiAKLSAg
ICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZC0+YWRkKG9ic2VydmVyKTsKKyAgICByZXN1bHQuaXRl
cmF0b3ItPnZhbHVlLT5hZGQob2JzZXJ2ZXIpOwogfQogCiB2b2lkIElkVGFyZ2V0T2JzZXJ2ZXJS
ZWdpc3RyeTo6cmVtb3ZlT2JzZXJ2ZXIoY29uc3QgQXRvbWljU3RyaW5nJiBpZCwgSWRUYXJnZXRP
YnNlcnZlciogb2JzZXJ2ZXIpCkBAIC01NCw3ICs1NCw3IEBAIHZvaWQgSWRUYXJnZXRPYnNlcnZl
clJlZ2lzdHJ5OjpyZW1vdmVPYnNlcnZlcihjb25zdCBBdG9taWNTdHJpbmcmIGlkLCBJZFRhcmdl
dE9iCiAKICAgICBJZFRvT2JzZXJ2ZXJTZXRNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3JlZ2lzdHJ5
LmZpbmQoaWQuaW1wbCgpKTsKIAotICAgIE9ic2VydmVyU2V0KiBzZXQgPSBpdGVyLT5zZWNvbmQu
Z2V0KCk7CisgICAgT2JzZXJ2ZXJTZXQqIHNldCA9IGl0ZXItPnZhbHVlLmdldCgpOwogICAgIHNl
dC0+cmVtb3ZlKG9ic2VydmVyKTsKICAgICBpZiAoc2V0LT5pc0VtcHR5KCkgJiYgc2V0ICE9IG1f
bm90aWZ5aW5nT2JzZXJ2ZXJzSW5TZXQpCiAgICAgICAgIG1fcmVnaXN0cnkucmVtb3ZlKGl0ZXIp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uT2JzZXJ2ZXJJbnRlcmVz
dEdyb3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvbk9ic2VydmVySW50ZXJlc3RH
cm91cC5jcHAKaW5kZXggMjRjMGNiNS4uNGZhZDIyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL011dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3VwLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vTXV0YXRpb25PYnNlcnZlckludGVyZXN0R3JvdXAuY3BwCkBAIC02Miw3ICs2Miw3
IEBAIE11dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3VwOjpNdXRhdGlvbk9ic2VydmVySW50ZXJl
c3RHcm91cChIYXNoTWFwPE11dGF0aW9uT2JzCiBib29sIE11dGF0aW9uT2JzZXJ2ZXJJbnRlcmVz
dEdyb3VwOjppc09sZFZhbHVlUmVxdWVzdGVkKCkKIHsKICAgICBmb3IgKEhhc2hNYXA8TXV0YXRp
b25PYnNlcnZlciosIE11dGF0aW9uUmVjb3JkRGVsaXZlcnlPcHRpb25zPjo6aXRlcmF0b3IgaXRl
ciA9IG1fb2JzZXJ2ZXJzLmJlZ2luKCk7IGl0ZXIgIT0gbV9vYnNlcnZlcnMuZW5kKCk7ICsraXRl
cikgewotICAgICAgICBpZiAoaGFzT2xkVmFsdWUoaXRlci0+c2Vjb25kKSkKKyAgICAgICAgaWYg
KGhhc09sZFZhbHVlKGl0ZXItPnZhbHVlKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KICAgICByZXR1cm4gZmFsc2U7CkBAIC03Myw4ICs3Myw4IEBAIHZvaWQgTXV0YXRpb25PYnNl
cnZlckludGVyZXN0R3JvdXA6OmVucXVldWVNdXRhdGlvblJlY29yZChQYXNzUmVmUHRyPE11dGF0
aW9uUmVjCiAgICAgUmVmUHRyPE11dGF0aW9uUmVjb3JkPiBtdXRhdGlvbiA9IHBycE11dGF0aW9u
OwogICAgIFJlZlB0cjxNdXRhdGlvblJlY29yZD4gbXV0YXRpb25XaXRoTnVsbE9sZFZhbHVlOwog
ICAgIGZvciAoSGFzaE1hcDxNdXRhdGlvbk9ic2VydmVyKiwgTXV0YXRpb25SZWNvcmREZWxpdmVy
eU9wdGlvbnM+OjppdGVyYXRvciBpdGVyID0gbV9vYnNlcnZlcnMuYmVnaW4oKTsgaXRlciAhPSBt
X29ic2VydmVycy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIE11dGF0aW9uT2JzZXJ2ZXIqIG9i
c2VydmVyID0gaXRlci0+Zmlyc3Q7Ci0gICAgICAgIGlmIChoYXNPbGRWYWx1ZShpdGVyLT5zZWNv
bmQpKSB7CisgICAgICAgIE11dGF0aW9uT2JzZXJ2ZXIqIG9ic2VydmVyID0gaXRlci0+a2V5Owor
ICAgICAgICBpZiAoaGFzT2xkVmFsdWUoaXRlci0+dmFsdWUpKSB7CiAgICAgICAgICAgICBvYnNl
cnZlci0+ZW5xdWV1ZU11dGF0aW9uUmVjb3JkKG11dGF0aW9uKTsKICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKaW5kZXggZjMwYzNmY2IuLjMwOTM4MTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vTm9kZS5jcHAKQEAgLTI3Myw3ICsyNzMsNyBAQCB2b2lkIE5vZGU6OmR1bXBTdGF0aXN0
aWNzKCkKIAogICAgIHByaW50ZigiRWxlbWVudCB0YWcgbmFtZSBkaXN0aWJ1dGlvbjpcbiIpOwog
ICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIHNpemVfdD46Oml0ZXJhdG9yIGl0ID0gcGVyVGFnQ291
bnQuYmVnaW4oKTsgaXQgIT0gcGVyVGFnQ291bnQuZW5kKCk7ICsraXQpCi0gICAgICAgIHByaW50
ZigiICBOdW1iZXIgb2YgPCVzPiB0YWdzOiAlenVcbiIsIGl0LT5maXJzdC51dGY4KCkuZGF0YSgp
LCBpdC0+c2Vjb25kKTsKKyAgICAgICAgcHJpbnRmKCIgIE51bWJlciBvZiA8JXM+IHRhZ3M6ICV6
dVxuIiwgaXQtPmZpcnN0LnV0ZjgoKS5kYXRhKCksIGl0LT52YWx1ZSk7CiAKICAgICBwcmludGYo
IkF0dHJpYnV0ZXM6XG4iKTsKICAgICBwcmludGYoIiAgTnVtYmVyIG9mIEF0dHJpYnV0ZXMgKG5v
bi1Ob2RlIGFuZCBOb2RlKTogJXp1IFslenVdXG4iLCBhdHRyaWJ1dGVzLCBzaXplb2YoQXR0cmli
dXRlKSk7CkBAIC01MDYsNyArNTA2LDcgQEAgdm9pZCBOb2RlOjpjbGVhclJhcmVEYXRhKCkKICAg
ICAgICAgTm9kZVJhcmVEYXRhOjpOb2RlUmFyZURhdGFNYXAmIGRhdGFNYXAgPSBOb2RlUmFyZURh
dGE6OnJhcmVEYXRhTWFwKCk7CiAgICAgICAgIE5vZGVSYXJlRGF0YTo6Tm9kZVJhcmVEYXRhTWFw
OjppdGVyYXRvciBpdCA9IGRhdGFNYXAuZmluZCh0aGlzKTsKICAgICAgICAgQVNTRVJUKGl0ICE9
IGRhdGFNYXAuZW5kKCkpOwotICAgICAgICBkZWxldGUgaXQtPnNlY29uZDsKKyAgICAgICAgZGVs
ZXRlIGl0LT52YWx1ZTsKICAgICAgICAgZGF0YU1hcC5yZW1vdmUoaXQpOwogICAgIH0KICAgICBj
bGVhckZsYWcoSGFzUmFyZURhdGFGbGFnKTsKQEAgLTIyNTYsMTggKzIyNTYsMTggQEAgdm9pZCBO
b2RlTGlzdHNOb2RlRGF0YTo6aW52YWxpZGF0ZUNhY2hlcyhjb25zdCBRdWFsaWZpZWROYW1lKiBh
dHRyTmFtZSkKIHsKICAgICBOb2RlTGlzdEF0b21pY05hbWVDYWNoZU1hcDo6Y29uc3RfaXRlcmF0
b3IgYXRvbWljTmFtZUNhY2hlRW5kID0gbV9hdG9taWNOYW1lQ2FjaGVzLmVuZCgpOwogICAgIGZv
ciAoTm9kZUxpc3RBdG9taWNOYW1lQ2FjaGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9hdG9t
aWNOYW1lQ2FjaGVzLmJlZ2luKCk7IGl0ICE9IGF0b21pY05hbWVDYWNoZUVuZDsgKytpdCkKLSAg
ICAgICAgaXQtPnNlY29uZC0+aW52YWxpZGF0ZUNhY2hlKGF0dHJOYW1lKTsKKyAgICAgICAgaXQt
PnZhbHVlLT5pbnZhbGlkYXRlQ2FjaGUoYXR0ck5hbWUpOwogCiAgICAgTm9kZUxpc3ROYW1lQ2Fj
aGVNYXA6OmNvbnN0X2l0ZXJhdG9yIG5hbWVDYWNoZUVuZCA9IG1fbmFtZUNhY2hlcy5lbmQoKTsK
ICAgICBmb3IgKE5vZGVMaXN0TmFtZUNhY2hlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fbmFt
ZUNhY2hlcy5iZWdpbigpOyBpdCAhPSBuYW1lQ2FjaGVFbmQ7ICsraXQpCi0gICAgICAgIGl0LT5z
ZWNvbmQtPmludmFsaWRhdGVDYWNoZShhdHRyTmFtZSk7CisgICAgICAgIGl0LT52YWx1ZS0+aW52
YWxpZGF0ZUNhY2hlKGF0dHJOYW1lKTsKIAogICAgIGlmICghYXR0ck5hbWUpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIFRhZ05vZGVMaXN0Q2FjaGVOUzo6aXRlcmF0b3IgdGFnQ2FjaGVFbmQgPSBt
X3RhZ05vZGVMaXN0Q2FjaGVOUy5lbmQoKTsKICAgICBmb3IgKFRhZ05vZGVMaXN0Q2FjaGVOUzo6
aXRlcmF0b3IgaXQgPSBtX3RhZ05vZGVMaXN0Q2FjaGVOUy5iZWdpbigpOyBpdCAhPSB0YWdDYWNo
ZUVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+aW52YWxpZGF0ZUNhY2hlKCk7CisgICAg
ICAgIGl0LT52YWx1ZS0+aW52YWxpZGF0ZUNhY2hlKCk7CiB9CiAKIHZvaWQgTm9kZTo6Z2V0U3Vi
cmVzb3VyY2VVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiB1cmxzKSBjb25zdApAQCAtMjQyNCw3ICsy
NDI0LDcgQEAgdm9pZCBOb2RlOjpjb2xsZWN0TWF0Y2hpbmdPYnNlcnZlcnNGb3JNdXRhdGlvbihI
YXNoTWFwPE11dGF0aW9uT2JzZXJ2ZXIqLCBNdXRhdGkKICAgICAgICAgICAgICAgICBNdXRhdGlv
blJlY29yZERlbGl2ZXJ5T3B0aW9ucyBkZWxpdmVyeU9wdGlvbnMgPSByZWdpc3RyYXRpb24tPmRl
bGl2ZXJ5T3B0aW9ucygpOwogICAgICAgICAgICAgICAgIEhhc2hNYXA8TXV0YXRpb25PYnNlcnZl
ciosIE11dGF0aW9uUmVjb3JkRGVsaXZlcnlPcHRpb25zPjo6QWRkUmVzdWx0IHJlc3VsdCA9IG9i
c2VydmVycy5hZGQocmVnaXN0cmF0aW9uLT5vYnNlcnZlcigpLCBkZWxpdmVyeU9wdGlvbnMpOwog
ICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgICAgICAgICAg
ICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kIHw9IGRlbGl2ZXJ5T3B0aW9uczsKKyAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSB8PSBkZWxpdmVyeU9wdGlvbnM7CiAK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjQzNyw3ICsyNDM3LDcgQEAgdm9pZCBOb2Rl
Ojpjb2xsZWN0TWF0Y2hpbmdPYnNlcnZlcnNGb3JNdXRhdGlvbihIYXNoTWFwPE11dGF0aW9uT2Jz
ZXJ2ZXIqLCBNdXRhdGkKICAgICAgICAgICAgICAgICBNdXRhdGlvblJlY29yZERlbGl2ZXJ5T3B0
aW9ucyBkZWxpdmVyeU9wdGlvbnMgPSByZWdpc3RyYXRpb24tPmRlbGl2ZXJ5T3B0aW9ucygpOwog
ICAgICAgICAgICAgICAgIEhhc2hNYXA8TXV0YXRpb25PYnNlcnZlciosIE11dGF0aW9uUmVjb3Jk
RGVsaXZlcnlPcHRpb25zPjo6QWRkUmVzdWx0IHJlc3VsdCA9IG9ic2VydmVycy5hZGQocmVnaXN0
cmF0aW9uLT5vYnNlcnZlcigpLCBkZWxpdmVyeU9wdGlvbnMpOwogICAgICAgICAgICAgICAgIGlm
ICghcmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRv
ci0+c2Vjb25kIHw9IGRlbGl2ZXJ5T3B0aW9uczsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZSB8PSBkZWxpdmVyeU9wdGlvbnM7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRh
LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRhLmgKaW5kZXggMGJkYzNlOC4uM2E2
OWI5YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRhLmgKQEAgLTY4LDEwICs2OCwxMCBAQCBw
dWJsaWM6CiAgICAgewogICAgICAgICBOb2RlTGlzdEF0b21pY05hbWVDYWNoZU1hcDo6QWRkUmVz
dWx0IHJlc3VsdCA9IG1fYXRvbWljTmFtZUNhY2hlcy5hZGQobmFtZWROb2RlTGlzdEtleShsaXN0
VHlwZSwgbmFtZSksIDApOwogICAgICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQqPihyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7Cisg
ICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VCo+KHJlc3VsdC5pdGVyYXRvci0+dmFsdWUp
OwogCiAgICAgICAgIFJlZlB0cjxUPiBsaXN0ID0gVDo6Y3JlYXRlKG5vZGUsIG5hbWUpOwotICAg
ICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IGxpc3QuZ2V0KCk7CisgICAgICAgIHJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUgPSBsaXN0LmdldCgpOwogICAgICAgICByZXR1cm4gbGlzdC5yZWxl
YXNlKCk7CiAgICAgfQogCkBAIC04MCwxMCArODAsMTAgQEAgcHVibGljOgogICAgIHsKICAgICAg
ICAgTm9kZUxpc3ROYW1lQ2FjaGVNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX25hbWVDYWNoZXMu
YWRkKG5hbWVkTm9kZUxpc3RLZXkobGlzdFR5cGUsIG5hbWUpLCAwKTsKICAgICAgICAgaWYgKCFy
ZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUKj4ocmVz
dWx0Lml0ZXJhdG9yLT5zZWNvbmQpOworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQq
PihyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKIAogICAgICAgICBSZWZQdHI8VD4gbGlzdCA9IFQ6
OmNyZWF0ZShub2RlLCBuYW1lKTsKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBs
aXN0LmdldCgpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gbGlzdC5nZXQoKTsK
ICAgICAgICAgcmV0dXJuIGxpc3QucmVsZWFzZSgpOwogICAgIH0KIApAQCAtOTIsMTAgKzkyLDEw
IEBAIHB1YmxpYzoKICAgICAgICAgUXVhbGlmaWVkTmFtZSBuYW1lKG51bGxBdG9tLCBsb2NhbE5h
bWUsIG5hbWVzcGFjZVVSSSk7CiAgICAgICAgIFRhZ05vZGVMaXN0Q2FjaGVOUzo6QWRkUmVzdWx0
IHJlc3VsdCA9IG1fdGFnTm9kZUxpc3RDYWNoZU5TLmFkZChuYW1lLCAwKTsKICAgICAgICAgaWYg
KCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3It
PnNlY29uZDsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogCiAg
ICAgICAgIFJlZlB0cjxUYWdOb2RlTGlzdD4gbGlzdCA9IFRhZ05vZGVMaXN0OjpjcmVhdGUobm9k
ZSwgbmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUpOwotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNl
Y29uZCA9IGxpc3QuZ2V0KCk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBsaXN0
LmdldCgpOwogICAgICAgICByZXR1cm4gbGlzdC5yZWxlYXNlKCk7CiAgICAgfQogCkBAIC0xMzYs
NyArMTM2LDcgQEAgcHVibGljOgogICAgICAgICBpZiAob2xkRG9jdW1lbnQgIT0gbmV3RG9jdW1l
bnQpIHsKICAgICAgICAgICAgIE5vZGVMaXN0QXRvbWljTmFtZUNhY2hlTWFwOjpjb25zdF9pdGVy
YXRvciBhdG9taWNOYW1lQ2FjaGVFbmQgPSBtX2F0b21pY05hbWVDYWNoZXMuZW5kKCk7CiAgICAg
ICAgICAgICBmb3IgKE5vZGVMaXN0QXRvbWljTmFtZUNhY2hlTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IG1fYXRvbWljTmFtZUNhY2hlcy5iZWdpbigpOyBpdCAhPSBhdG9taWNOYW1lQ2FjaGVFbmQ7
ICsraXQpIHsKLSAgICAgICAgICAgICAgICBEeW5hbWljU3VidHJlZU5vZGVMaXN0KiBsaXN0ID0g
aXQtPnNlY29uZDsKKyAgICAgICAgICAgICAgICBEeW5hbWljU3VidHJlZU5vZGVMaXN0KiBsaXN0
ID0gaXQtPnZhbHVlOwogICAgICAgICAgICAgICAgIGlmIChsaXN0LT5pc1Jvb3RlZEF0RG9jdW1l
bnQoKSkgewogICAgICAgICAgICAgICAgICAgICBvbGREb2N1bWVudC0+dW5yZWdpc3Rlck5vZGVM
aXN0Q2FjaGUobGlzdCk7CiAgICAgICAgICAgICAgICAgICAgIG5ld0RvY3VtZW50LT5yZWdpc3Rl
ck5vZGVMaXN0Q2FjaGUobGlzdCk7CkBAIC0xNDUsNyArMTQ1LDcgQEAgcHVibGljOgogCiAgICAg
ICAgICAgICBOb2RlTGlzdE5hbWVDYWNoZU1hcDo6Y29uc3RfaXRlcmF0b3IgbmFtZUNhY2hlRW5k
ID0gbV9uYW1lQ2FjaGVzLmVuZCgpOwogICAgICAgICAgICAgZm9yIChOb2RlTGlzdE5hbWVDYWNo
ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX25hbWVDYWNoZXMuYmVnaW4oKTsgaXQgIT0gbmFt
ZUNhY2hlRW5kOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAgRHluYW1pY1N1YnRyZWVOb2RlTGlz
dCogbGlzdCA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICAgICAgRHluYW1pY1N1YnRyZWVOb2Rl
TGlzdCogbGlzdCA9IGl0LT52YWx1ZTsKICAgICAgICAgICAgICAgICBpZiAobGlzdC0+aXNSb290
ZWRBdERvY3VtZW50KCkpIHsKICAgICAgICAgICAgICAgICAgICAgb2xkRG9jdW1lbnQtPnVucmVn
aXN0ZXJOb2RlTGlzdENhY2hlKGxpc3QpOwogICAgICAgICAgICAgICAgICAgICBuZXdEb2N1bWVu
dC0+cmVnaXN0ZXJOb2RlTGlzdENhY2hlKGxpc3QpOwpAQCAtMTU0LDcgKzE1NCw3IEBAIHB1Ymxp
YzoKIAogICAgICAgICAgICAgVGFnTm9kZUxpc3RDYWNoZU5TOjpjb25zdF9pdGVyYXRvciB0YWdF
bmQgPSBtX3RhZ05vZGVMaXN0Q2FjaGVOUy5lbmQoKTsKICAgICAgICAgICAgIGZvciAoVGFnTm9k
ZUxpc3RDYWNoZU5TOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGFnTm9kZUxpc3RDYWNoZU5TLmJl
Z2luKCk7IGl0ICE9IHRhZ0VuZDsgKytpdCkgewotICAgICAgICAgICAgICAgIER5bmFtaWNTdWJ0
cmVlTm9kZUxpc3QqIGxpc3QgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgICAgIER5bmFtaWNT
dWJ0cmVlTm9kZUxpc3QqIGxpc3QgPSBpdC0+dmFsdWU7CiAgICAgICAgICAgICAgICAgQVNTRVJU
KCFsaXN0LT5pc1Jvb3RlZEF0RG9jdW1lbnQoKSk7CiAgICAgICAgICAgICAgICAgb2xkRG9jdW1l
bnQtPnVucmVnaXN0ZXJOb2RlTGlzdENhY2hlKGxpc3QpOwogICAgICAgICAgICAgICAgIG5ld0Rv
Y3VtZW50LT5yZWdpc3Rlck5vZGVMaXN0Q2FjaGUobGlzdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwCmluZGV4IDZiYmE1NmMuLjdmODllYmYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwCkBAIC0xMTcsNyAr
MTE3LDcgQEAgdm9pZCBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246OmNoZWNrU3R5bGVTaGVldCgpCiAg
ICAgICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpID0gYXR0cnMu
ZmluZCgidHlwZSIpOwogICAgICAgICBTdHJpbmcgdHlwZTsKICAgICAgICAgaWYgKGkgIT0gYXR0
cnMuZW5kKCkpCi0gICAgICAgICAgICB0eXBlID0gaS0+c2Vjb25kOworICAgICAgICAgICAgdHlw
ZSA9IGktPnZhbHVlOwogCiAgICAgICAgIG1faXNDU1MgPSB0eXBlLmlzRW1wdHkoKSB8fCB0eXBl
ID09ICJ0ZXh0L2NzcyI7CiAjaWYgRU5BQkxFKFhTTFQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
U2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAKaW5kZXggOTI0NDVjYS4uNTM1YjU3MCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcApAQCAtMTczLDkg
KzE3Myw5IEBAIGJvb2wgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6Y2FuU3VzcGVuZEFjdGl2ZURP
TU9iamVjdHMoKQogICAgIG1faXRlcmF0aW5nQWN0aXZlRE9NT2JqZWN0cyA9IHRydWU7CiAgICAg
SGFzaE1hcDxBY3RpdmVET01PYmplY3QqLCB2b2lkKj46Oml0ZXJhdG9yIGFjdGl2ZU9iamVjdHNF
bmQgPSBtX2FjdGl2ZURPTU9iamVjdHMuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPEFjdGl2ZURP
TU9iamVjdCosIHZvaWQqPjo6aXRlcmF0b3IgaXRlciA9IG1fYWN0aXZlRE9NT2JqZWN0cy5iZWdp
bigpOyBpdGVyICE9IGFjdGl2ZU9iamVjdHNFbmQ7ICsraXRlcikgewotICAgICAgICBBU1NFUlQo
aXRlci0+Zmlyc3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSA9PSB0aGlzKTsKLSAgICAgICAg
QVNTRVJUKGl0ZXItPmZpcnN0LT5zdXNwZW5kSWZOZWVkZWRDYWxsZWQoKSk7Ci0gICAgICAgIGlm
ICghaXRlci0+Zmlyc3QtPmNhblN1c3BlbmQoKSkgeworICAgICAgICBBU1NFUlQoaXRlci0+a2V5
LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgPT0gdGhpcyk7CisgICAgICAgIEFTU0VSVChpdGVy
LT5rZXktPnN1c3BlbmRJZk5lZWRlZENhbGxlZCgpKTsKKyAgICAgICAgaWYgKCFpdGVyLT5rZXkt
PmNhblN1c3BlbmQoKSkgewogICAgICAgICAgICAgbV9pdGVyYXRpbmdBY3RpdmVET01PYmplY3Rz
ID0gZmFsc2U7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KQEAgLTE5MCw5
ICsxOTAsOSBAQCB2b2lkIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnN1c3BlbmRBY3RpdmVET01P
YmplY3RzKEFjdGl2ZURPTU9iamVjdDo6UmVhc29uRm9yUwogICAgIG1faXRlcmF0aW5nQWN0aXZl
RE9NT2JqZWN0cyA9IHRydWU7CiAgICAgSGFzaE1hcDxBY3RpdmVET01PYmplY3QqLCB2b2lkKj46
Oml0ZXJhdG9yIGFjdGl2ZU9iamVjdHNFbmQgPSBtX2FjdGl2ZURPTU9iamVjdHMuZW5kKCk7CiAg
ICAgZm9yIChIYXNoTWFwPEFjdGl2ZURPTU9iamVjdCosIHZvaWQqPjo6aXRlcmF0b3IgaXRlciA9
IG1fYWN0aXZlRE9NT2JqZWN0cy5iZWdpbigpOyBpdGVyICE9IGFjdGl2ZU9iamVjdHNFbmQ7ICsr
aXRlcikgewotICAgICAgICBBU1NFUlQoaXRlci0+Zmlyc3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKSA9PSB0aGlzKTsKLSAgICAgICAgQVNTRVJUKGl0ZXItPmZpcnN0LT5zdXNwZW5kSWZOZWVk
ZWRDYWxsZWQoKSk7Ci0gICAgICAgIGl0ZXItPmZpcnN0LT5zdXNwZW5kKHdoeSk7CisgICAgICAg
IEFTU0VSVChpdGVyLT5rZXktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSA9PSB0aGlzKTsKKyAg
ICAgICAgQVNTRVJUKGl0ZXItPmtleS0+c3VzcGVuZElmTmVlZGVkQ2FsbGVkKCkpOworICAgICAg
ICBpdGVyLT5rZXktPnN1c3BlbmQod2h5KTsKICAgICB9CiAgICAgbV9pdGVyYXRpbmdBY3RpdmVE
T01PYmplY3RzID0gZmFsc2U7CiAgICAgbV9hY3RpdmVET01PYmplY3RzQXJlU3VzcGVuZGVkID0g
dHJ1ZTsKQEAgLTIwNiw5ICsyMDYsOSBAQCB2b2lkIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnJl
c3VtZUFjdGl2ZURPTU9iamVjdHMoKQogICAgIG1faXRlcmF0aW5nQWN0aXZlRE9NT2JqZWN0cyA9
IHRydWU7CiAgICAgSGFzaE1hcDxBY3RpdmVET01PYmplY3QqLCB2b2lkKj46Oml0ZXJhdG9yIGFj
dGl2ZU9iamVjdHNFbmQgPSBtX2FjdGl2ZURPTU9iamVjdHMuZW5kKCk7CiAgICAgZm9yIChIYXNo
TWFwPEFjdGl2ZURPTU9iamVjdCosIHZvaWQqPjo6aXRlcmF0b3IgaXRlciA9IG1fYWN0aXZlRE9N
T2JqZWN0cy5iZWdpbigpOyBpdGVyICE9IGFjdGl2ZU9iamVjdHNFbmQ7ICsraXRlcikgewotICAg
ICAgICBBU1NFUlQoaXRlci0+Zmlyc3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSA9PSB0aGlz
KTsKLSAgICAgICAgQVNTRVJUKGl0ZXItPmZpcnN0LT5zdXNwZW5kSWZOZWVkZWRDYWxsZWQoKSk7
Ci0gICAgICAgIGl0ZXItPmZpcnN0LT5yZXN1bWUoKTsKKyAgICAgICAgQVNTRVJUKGl0ZXItPmtl
eS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpID09IHRoaXMpOworICAgICAgICBBU1NFUlQoaXRl
ci0+a2V5LT5zdXNwZW5kSWZOZWVkZWRDYWxsZWQoKSk7CisgICAgICAgIGl0ZXItPmtleS0+cmVz
dW1lKCk7CiAgICAgfQogICAgIG1faXRlcmF0aW5nQWN0aXZlRE9NT2JqZWN0cyA9IGZhbHNlOwog
fQpAQCAtMjIwLDkgKzIyMCw5IEBAIHZvaWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6c3RvcEFj
dGl2ZURPTU9iamVjdHMoKQogICAgIG1faXRlcmF0aW5nQWN0aXZlRE9NT2JqZWN0cyA9IHRydWU7
CiAgICAgSGFzaE1hcDxBY3RpdmVET01PYmplY3QqLCB2b2lkKj46Oml0ZXJhdG9yIGFjdGl2ZU9i
amVjdHNFbmQgPSBtX2FjdGl2ZURPTU9iamVjdHMuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPEFj
dGl2ZURPTU9iamVjdCosIHZvaWQqPjo6aXRlcmF0b3IgaXRlciA9IG1fYWN0aXZlRE9NT2JqZWN0
cy5iZWdpbigpOyBpdGVyICE9IGFjdGl2ZU9iamVjdHNFbmQ7ICsraXRlcikgewotICAgICAgICBB
U1NFUlQoaXRlci0+Zmlyc3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSA9PSB0aGlzKTsKLSAg
ICAgICAgQVNTRVJUKGl0ZXItPmZpcnN0LT5zdXNwZW5kSWZOZWVkZWRDYWxsZWQoKSk7Ci0gICAg
ICAgIGl0ZXItPmZpcnN0LT5zdG9wKCk7CisgICAgICAgIEFTU0VSVChpdGVyLT5rZXktPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSA9PSB0aGlzKTsKKyAgICAgICAgQVNTRVJUKGl0ZXItPmtleS0+
c3VzcGVuZElmTmVlZGVkQ2FsbGVkKCkpOworICAgICAgICBpdGVyLT5rZXktPnN0b3AoKTsKICAg
ICB9CiAgICAgbV9pdGVyYXRpbmdBY3RpdmVET01PYmplY3RzID0gZmFsc2U7CiAKQEAgLTM4MCw3
ICszODAsNyBAQCB2b2lkIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OmFkanVzdE1pbmltdW1UaW1l
ckludGVydmFsKGRvdWJsZSBvbGRNaW5pbXVtVGltZXJJbgogewogICAgIGlmIChtaW5pbXVtVGlt
ZXJJbnRlcnZhbCgpICE9IG9sZE1pbmltdW1UaW1lckludGVydmFsKSB7CiAgICAgICAgIGZvciAo
VGltZW91dE1hcDo6aXRlcmF0b3IgaXRlciA9IG1fdGltZW91dHMuYmVnaW4oKTsgaXRlciAhPSBt
X3RpbWVvdXRzLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgICAgIERPTVRpbWVyKiB0aW1lciA9
IGl0ZXItPnNlY29uZDsKKyAgICAgICAgICAgIERPTVRpbWVyKiB0aW1lciA9IGl0ZXItPnZhbHVl
OwogICAgICAgICAgICAgdGltZXItPmFkanVzdE1pbmltdW1UaW1lckludGVydmFsKG9sZE1pbmlt
dW1UaW1lckludGVydmFsKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9TZWxlY3RvclF1ZXJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TZWxlY3Rv
clF1ZXJ5LmNwcAppbmRleCA3ODYyYWVmLi5lY2I1YTE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vU2VsZWN0b3JRdWVyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NlbGVj
dG9yUXVlcnkuY3BwCkBAIC0xNjksNyArMTY5LDcgQEAgU2VsZWN0b3JRdWVyeSogU2VsZWN0b3JR
dWVyeUNhY2hlOjphZGQoY29uc3QgQXRvbWljU3RyaW5nJiBzZWxlY3RvcnMsIERvY3VtZW50Kgog
ewogICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBPd25QdHI8U2VsZWN0b3JRdWVyeT4gPjo6aXRl
cmF0b3IgaXQgPSBtX2VudHJpZXMuZmluZChzZWxlY3RvcnMpOwogICAgIGlmIChpdCAhPSBtX2Vu
dHJpZXMuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICBy
ZXR1cm4gaXQtPnZhbHVlLmdldCgpOwogCiAgICAgQ1NTUGFyc2VyIHBhcnNlcihkb2N1bWVudCk7
CiAgICAgQ1NTU2VsZWN0b3JMaXN0IHNlbGVjdG9yTGlzdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9TcGFjZVNwbGl0U3RyaW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TcGFj
ZVNwbGl0U3RyaW5nLmNwcAppbmRleCA5Y2NlN2Q5Li4xZGMxZmIwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vU3BhY2VTcGxpdFN0cmluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL1NwYWNlU3BsaXRTdHJpbmcuY3BwCkBAIC0xNTAsNyArMTUwLDcgQEAgU3BhY2VTcGxpdFN0
cmluZ0RhdGE6On5TcGFjZVNwbGl0U3RyaW5nRGF0YSgpCiAKIFBhc3NSZWZQdHI8U3BhY2VTcGxp
dFN0cmluZ0RhdGE+IFNwYWNlU3BsaXRTdHJpbmdEYXRhOjpjcmVhdGUoY29uc3QgQXRvbWljU3Ry
aW5nJiBzdHJpbmcpCiB7Ci0gICAgU3BhY2VTcGxpdFN0cmluZ0RhdGEqJiBkYXRhID0gc2hhcmVk
RGF0YU1hcCgpLmFkZChzdHJpbmcsIDApLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgU3BhY2VTcGxp
dFN0cmluZ0RhdGEqJiBkYXRhID0gc2hhcmVkRGF0YU1hcCgpLmFkZChzdHJpbmcsIDApLml0ZXJh
dG9yLT52YWx1ZTsKICAgICBpZiAoIWRhdGEpIHsKICAgICAgICAgZGF0YSA9IG5ldyBTcGFjZVNw
bGl0U3RyaW5nRGF0YShzdHJpbmcpOwogICAgICAgICByZXR1cm4gYWRvcHRSZWYoZGF0YSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5jcHAKaW5kZXggOWFlNjcyZi4uMDIyZmRhOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcApAQCAtMjk5LDE0ICsyOTksMTQgQEAgdm9p
ZCBTdHlsZWRFbGVtZW50Ojp1cGRhdGVBdHRyaWJ1dGVTdHlsZSgpCiAgICAgUHJlc2VudGF0aW9u
QXR0cmlidXRlQ2FjaGU6Oml0ZXJhdG9yIGNhY2hlSXRlcmF0b3I7CiAgICAgaWYgKGNhY2hlSGFz
aCkgewogICAgICAgICBjYWNoZUl0ZXJhdG9yID0gcHJlc2VudGF0aW9uQXR0cmlidXRlQ2FjaGUo
KS5hZGQoY2FjaGVIYXNoLCBudWxscHRyKS5pdGVyYXRvcjsKLSAgICAgICAgaWYgKGNhY2hlSXRl
cmF0b3ItPnNlY29uZCAmJiBjYWNoZUl0ZXJhdG9yLT5zZWNvbmQtPmtleSAhPSBjYWNoZUtleSkK
KyAgICAgICAgaWYgKGNhY2hlSXRlcmF0b3ItPnZhbHVlICYmIGNhY2hlSXRlcmF0b3ItPnZhbHVl
LT5rZXkgIT0gY2FjaGVLZXkpCiAgICAgICAgICAgICBjYWNoZUhhc2ggPSAwOwogICAgIH0gZWxz
ZQogICAgICAgICBjYWNoZUl0ZXJhdG9yID0gcHJlc2VudGF0aW9uQXR0cmlidXRlQ2FjaGUoKS5l
bmQoKTsKIAogICAgIFJlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBzdHlsZTsKLSAgICBpZiAoY2Fj
aGVIYXNoICYmIGNhY2hlSXRlcmF0b3ItPnNlY29uZCkgewotICAgICAgICBzdHlsZSA9IGNhY2hl
SXRlcmF0b3ItPnNlY29uZC0+dmFsdWU7CisgICAgaWYgKGNhY2hlSGFzaCAmJiBjYWNoZUl0ZXJh
dG9yLT52YWx1ZSkgeworICAgICAgICBzdHlsZSA9IGNhY2hlSXRlcmF0b3ItPnZhbHVlLT52YWx1
ZTsKICAgICAgICAgcHJlc2VudGF0aW9uQXR0cmlidXRlQ2FjaGVDbGVhbmVyKCkuZGlkSGl0UHJl
c2VudGF0aW9uQXR0cmlidXRlQ2FjaGUoKTsKICAgICB9IGVsc2UgewogICAgICAgICBzdHlsZSA9
IFN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZShpc1NWR0VsZW1lbnQoKSA/IFNWR0F0dHJpYnV0ZU1v
ZGUgOiBDU1NRdWlya3NNb2RlKTsKQEAgLTMyMCw3ICszMjAsNyBAQCB2b2lkIFN0eWxlZEVsZW1l
bnQ6OnVwZGF0ZUF0dHJpYnV0ZVN0eWxlKCkKIAogICAgIGF0dHJpYnV0ZURhdGEoKS0+c2V0QXR0
cmlidXRlU3R5bGUoc3R5bGUtPmlzRW1wdHkoKSA/IDAgOiBzdHlsZSk7CiAKLSAgICBpZiAoIWNh
Y2hlSGFzaCB8fCBjYWNoZUl0ZXJhdG9yLT5zZWNvbmQpCisgICAgaWYgKCFjYWNoZUhhc2ggfHwg
Y2FjaGVJdGVyYXRvci0+dmFsdWUpCiAgICAgICAgIHJldHVybjsKIAogICAgIE93blB0cjxQcmVz
ZW50YXRpb25BdHRyaWJ1dGVDYWNoZUVudHJ5PiBuZXdFbnRyeSA9IGFkb3B0UHRyKG5ldyBQcmVz
ZW50YXRpb25BdHRyaWJ1dGVDYWNoZUVudHJ5KTsKQEAgLTMzMyw3ICszMzMsNyBAQCB2b2lkIFN0
eWxlZEVsZW1lbnQ6OnVwZGF0ZUF0dHJpYnV0ZVN0eWxlKCkKICAgICAgICAgcHJlc2VudGF0aW9u
QXR0cmlidXRlQ2FjaGUoKS5jbGVhcigpOwogICAgICAgICBwcmVzZW50YXRpb25BdHRyaWJ1dGVD
YWNoZSgpLnNldChjYWNoZUhhc2gsIG5ld0VudHJ5LnJlbGVhc2UoKSk7CiAgICAgfSBlbHNlCi0g
ICAgICAgIGNhY2hlSXRlcmF0b3ItPnNlY29uZCA9IG5ld0VudHJ5LnJlbGVhc2UoKTsKKyAgICAg
ICAgY2FjaGVJdGVyYXRvci0+dmFsdWUgPSBuZXdFbnRyeS5yZWxlYXNlKCk7CiB9CiAKIHZvaWQg
U3R5bGVkRWxlbWVudDo6YWRkUHJvcGVydHlUb0F0dHJpYnV0ZVN0eWxlKFN0eWxlUHJvcGVydHlT
ZXQqIHN0eWxlLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGludCBpZGVudGlmaWVyKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvQWx0ZXJuYXRpdmVUZXh0VUlDb250
cm9sbGVyLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvQWx0ZXJuYXRpdmVUZXh0VUlD
b250cm9sbGVyLm1tCmluZGV4IDk5OTE2YzEuLjZjYTVkNWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvbWFjL0FsdGVybmF0aXZlVGV4dFVJQ29udHJvbGxlci5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9BbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xsZXIubW0K
QEAgLTUwLDcgKzUwLDcgQEAgTlNUZXh0QWx0ZXJuYXRpdmVzKiBBbHRlcm5hdGl2ZVRleHRVSUNv
bnRyb2xsZXI6OkFsZXJuYXRpdmVUZXh0Q29udGV4dENvbnRyb2xsZXIKICAgICBIYXNoTWFwVHlw
ZTo6Y29uc3RfaXRlcmF0b3IgaXRyID0gbV9hbHRlcm5hdGl2ZXNPYmplY3RNYXAuZmluZChjb250
ZXh0KTsKICAgICBpZiAoaXRyID09IG1fYWx0ZXJuYXRpdmVzT2JqZWN0TWFwLmVuZCgpKQogICAg
ICAgICByZXR1cm4gTlVMTDsKLSAgICByZXR1cm4gaXRyLT5zZWNvbmQuZ2V0KCk7CisgICAgcmV0
dXJuIGl0ci0+dmFsdWUuZ2V0KCk7CiB9CiAKIHZvaWQgQWx0ZXJuYXRpdmVUZXh0VUlDb250cm9s
bGVyOjpBbGVybmF0aXZlVGV4dENvbnRleHRDb250cm9sbGVyOjpyZW1vdmVBbHRlcm5hdGl2ZXNG
b3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0Zvcm1Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUNvbnRyb2xs
ZXIuY3BwCmluZGV4IDVlMzlmZTIuLjk2ZTZhOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvRm9ybUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUNv
bnRyb2xsZXIuY3BwCkBAIC0yMjQsOCArMjI0LDggQEAgdm9pZCBTYXZlZEZvcm1TdGF0ZTo6c2Vy
aWFsaXplVG8oVmVjdG9yPFN0cmluZz4mIHN0YXRlVmVjdG9yKSBjb25zdAogewogICAgIHN0YXRl
VmVjdG9yLmFwcGVuZChTdHJpbmc6Om51bWJlcihtX2NvbnRyb2xTdGF0ZUNvdW50KSk7CiAgICAg
Zm9yIChGb3JtRWxlbWVudFN0YXRlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fc3RhdGVGb3JO
ZXdGb3JtRWxlbWVudHMuYmVnaW4oKTsgaXQgIT0gbV9zdGF0ZUZvck5ld0Zvcm1FbGVtZW50cy5l
bmQoKTsgKytpdCkgewotICAgICAgICBjb25zdCBGb3JtRWxlbWVudEtleSYga2V5ID0gaXQtPmZp
cnN0OwotICAgICAgICBjb25zdCBEZXF1ZTxGb3JtQ29udHJvbFN0YXRlPiYgcXVldWUgPSBpdC0+
c2Vjb25kOworICAgICAgICBjb25zdCBGb3JtRWxlbWVudEtleSYga2V5ID0gaXQtPmtleTsKKyAg
ICAgICAgY29uc3QgRGVxdWU8Rm9ybUNvbnRyb2xTdGF0ZT4mIHF1ZXVlID0gaXQtPnZhbHVlOwog
ICAgICAgICBmb3IgKERlcXVlPEZvcm1Db250cm9sU3RhdGU+Ojpjb25zdF9pdGVyYXRvciBxdWVJ
dGVyYXRvciA9IHF1ZXVlLmJlZ2luKCk7IHF1ZUl0ZXJhdG9yICE9IHF1ZXVlLmVuZCgpOyArK3F1
ZUl0ZXJhdG9yKSB7CiAgICAgICAgICAgICBzdGF0ZVZlY3Rvci5hcHBlbmQoa2V5Lm5hbWUoKSk7
CiAgICAgICAgICAgICBzdGF0ZVZlY3Rvci5hcHBlbmQoa2V5LnR5cGUoKSk7CkBAIC0yMzksNyAr
MjM5LDcgQEAgdm9pZCBTYXZlZEZvcm1TdGF0ZTo6YXBwZW5kQ29udHJvbFN0YXRlKGNvbnN0IEF0
b21pY1N0cmluZyYgbmFtZSwgY29uc3QgQXRvbWljU3QKICAgICBGb3JtRWxlbWVudEtleSBrZXko
bmFtZS5pbXBsKCksIHR5cGUuaW1wbCgpKTsKICAgICBGb3JtRWxlbWVudFN0YXRlTWFwOjppdGVy
YXRvciBpdCA9IG1fc3RhdGVGb3JOZXdGb3JtRWxlbWVudHMuZmluZChrZXkpOwogICAgIGlmIChp
dCAhPSBtX3N0YXRlRm9yTmV3Rm9ybUVsZW1lbnRzLmVuZCgpKQotICAgICAgICBpdC0+c2Vjb25k
LmFwcGVuZChzdGF0ZSk7CisgICAgICAgIGl0LT52YWx1ZS5hcHBlbmQoc3RhdGUpOwogICAgIGVs
c2UgewogICAgICAgICBEZXF1ZTxGb3JtQ29udHJvbFN0YXRlPiBzdGF0ZUxpc3Q7CiAgICAgICAg
IHN0YXRlTGlzdC5hcHBlbmQoc3RhdGUpOwpAQCAtMjU1LDEwICsyNTUsMTAgQEAgRm9ybUNvbnRy
b2xTdGF0ZSBTYXZlZEZvcm1TdGF0ZTo6dGFrZUNvbnRyb2xTdGF0ZShjb25zdCBBdG9taWNTdHJp
bmcmIG5hbWUsIGNvbnMKICAgICBGb3JtRWxlbWVudFN0YXRlTWFwOjppdGVyYXRvciBpdCA9IG1f
c3RhdGVGb3JOZXdGb3JtRWxlbWVudHMuZmluZChGb3JtRWxlbWVudEtleShuYW1lLmltcGwoKSwg
dHlwZS5pbXBsKCkpKTsKICAgICBpZiAoaXQgPT0gbV9zdGF0ZUZvck5ld0Zvcm1FbGVtZW50cy5l
bmQoKSkKICAgICAgICAgcmV0dXJuIEZvcm1Db250cm9sU3RhdGUoKTsKLSAgICBBU1NFUlQoaXQt
PnNlY29uZC5zaXplKCkpOwotICAgIEZvcm1Db250cm9sU3RhdGUgc3RhdGUgPSBpdC0+c2Vjb25k
LnRha2VGaXJzdCgpOworICAgIEFTU0VSVChpdC0+dmFsdWUuc2l6ZSgpKTsKKyAgICBGb3JtQ29u
dHJvbFN0YXRlIHN0YXRlID0gaXQtPnZhbHVlLnRha2VGaXJzdCgpOwogICAgIG1fY29udHJvbFN0
YXRlQ291bnQtLTsKLSAgICBpZiAoIWl0LT5zZWNvbmQuc2l6ZSgpKQorICAgIGlmICghaXQtPnZh
bHVlLnNpemUoKSkKICAgICAgICAgbV9zdGF0ZUZvck5ld0Zvcm1FbGVtZW50cy5yZW1vdmUoaXQp
OwogICAgIHJldHVybiBzdGF0ZTsKIH0KQEAgLTMyOCwxMiArMzI4LDEyIEBAIEF0b21pY1N0cmlu
ZyBGb3JtS2V5R2VuZXJhdG9yOjpmb3JtS2V5KGNvbnN0IEhUTUxGb3JtQ29udHJvbEVsZW1lbnRX
aXRoU3RhdGUmIGNvCiAgICAgfQogICAgIEZvcm1Ub0tleU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtX2Zvcm1Ub0tleU1hcC5maW5kKGZvcm0pOwogICAgIGlmIChpdCAhPSBtX2Zvcm1Ub0tleU1h
cC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBpdC0+
dmFsdWU7CiAKICAgICBTdHJpbmcgc2lnbmF0dXJlID0gZm9ybVNpZ25hdHVyZSgqZm9ybSk7CiAg
ICAgQVNTRVJUKCFzaWduYXR1cmUuaXNOdWxsKCkpOwogICAgIEZvcm1TaWduYXR1cmVUb05leHRJ
bmRleE1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fZm9ybVNpZ25hdHVyZVRvTmV4dEluZGV4TWFw
LmFkZChzaWduYXR1cmUsIDApOwotICAgIHVuc2lnbmVkIG5leHRJbmRleCA9IHJlc3VsdC5pdGVy
YXRvci0+c2Vjb25kKys7CisgICAgdW5zaWduZWQgbmV4dEluZGV4ID0gcmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZSsrOwogCiAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwogICAgIGJ1aWxkZXIuYXBw
ZW5kKHNpZ25hdHVyZSk7CkBAIC0zODQsOCArMzg0LDggQEAgUGFzc093blB0cjxGb3JtQ29udHJv
bGxlcjo6U2F2ZWRGb3JtU3RhdGVNYXA+IEZvcm1Db250cm9sbGVyOjpjcmVhdGVTYXZlZEZvcm1T
dGEKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBTYXZlZEZvcm1TdGF0ZU1hcDo6QWRk
UmVzdWx0IHJlc3VsdCA9IHN0YXRlTWFwLT5hZGQoa2V5R2VuZXJhdG9yLT5mb3JtS2V5KCpjb250
cm9sKS5pbXBsKCksIG51bGxwdHIpOwogICAgICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpCi0g
ICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IFNhdmVkRm9ybVN0YXRlOjpjcmVh
dGUoKTsKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQtPmFwcGVuZENvbnRyb2xTdGF0
ZShjb250cm9sLT5uYW1lKCksIGNvbnRyb2wtPnR5cGUoKSwgY29udHJvbC0+c2F2ZUZvcm1Db250
cm9sU3RhdGUoKSk7CisgICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gU2F2ZWRG
b3JtU3RhdGU6OmNyZWF0ZSgpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5hcHBl
bmRDb250cm9sU3RhdGUoY29udHJvbC0+bmFtZSgpLCBjb250cm9sLT50eXBlKCksIGNvbnRyb2wt
PnNhdmVGb3JtQ29udHJvbFN0YXRlKCkpOwogICAgIH0KICAgICByZXR1cm4gc3RhdGVNYXAucmVs
ZWFzZSgpOwogfQpAQCAtMzk3LDggKzM5Nyw4IEBAIFZlY3RvcjxTdHJpbmc+IEZvcm1Db250cm9s
bGVyOjpmb3JtRWxlbWVudHNTdGF0ZSgpIGNvbnN0CiAgICAgc3RhdGVWZWN0b3IucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShtX2Zvcm1FbGVtZW50c1dpdGhTdGF0ZS5zaXplKCkgKiA0KTsKICAgICBz
dGF0ZVZlY3Rvci5hcHBlbmQoZm9ybVN0YXRlU2lnbmF0dXJlKCkpOwogICAgIGZvciAoU2F2ZWRG
b3JtU3RhdGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gc3RhdGVNYXAtPmJlZ2luKCk7IGl0ICE9
IHN0YXRlTWFwLT5lbmQoKTsgKytpdCkgewotICAgICAgICBzdGF0ZVZlY3Rvci5hcHBlbmQoaXQt
PmZpcnN0LmdldCgpKTsKLSAgICAgICAgaXQtPnNlY29uZC0+c2VyaWFsaXplVG8oc3RhdGVWZWN0
b3IpOworICAgICAgICBzdGF0ZVZlY3Rvci5hcHBlbmQoaXQtPmtleS5nZXQoKSk7CisgICAgICAg
IGl0LT52YWx1ZS0+c2VyaWFsaXplVG8oc3RhdGVWZWN0b3IpOwogICAgIH0KICAgICBib29sIGhh
c09ubHlTaWduYXR1cmUgPSBzdGF0ZVZlY3Rvci5zaXplKCkgPT0gMTsKICAgICBpZiAoaGFzT25s
eVNpZ25hdHVyZSkKQEAgLTQzNiw4ICs0MzYsOCBAQCBGb3JtQ29udHJvbFN0YXRlIEZvcm1Db250
cm9sbGVyOjp0YWtlU3RhdGVGb3JGb3JtRWxlbWVudChjb25zdCBIVE1MRm9ybUNvbnRyb2xFbAog
ICAgIFNhdmVkRm9ybVN0YXRlTWFwOjppdGVyYXRvciBpdCA9IG1fc2F2ZWRGb3JtU3RhdGVNYXAu
ZmluZChtX2Zvcm1LZXlHZW5lcmF0b3ItPmZvcm1LZXkoY29udHJvbCkuaW1wbCgpKTsKICAgICBp
ZiAoaXQgPT0gbV9zYXZlZEZvcm1TdGF0ZU1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuIEZvcm1D
b250cm9sU3RhdGUoKTsKLSAgICBGb3JtQ29udHJvbFN0YXRlIHN0YXRlID0gaXQtPnNlY29uZC0+
dGFrZUNvbnRyb2xTdGF0ZShjb250cm9sLm5hbWUoKSwgY29udHJvbC50eXBlKCkpOwotICAgIGlm
IChpdC0+c2Vjb25kLT5pc0VtcHR5KCkpCisgICAgRm9ybUNvbnRyb2xTdGF0ZSBzdGF0ZSA9IGl0
LT52YWx1ZS0+dGFrZUNvbnRyb2xTdGF0ZShjb250cm9sLm5hbWUoKSwgY29udHJvbC50eXBlKCkp
OworICAgIGlmIChpdC0+dmFsdWUtPmlzRW1wdHkoKSkKICAgICAgICAgbV9zYXZlZEZvcm1TdGF0
ZU1hcC5yZW1vdmUoaXQpOwogICAgIHJldHVybiBzdGF0ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTENvbGxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MQ29sbGVjdGlvbi5jcHAKaW5kZXggOTFlMThhMy4uMWVjYjY0NCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MQ29sbGVjdGlvbi5jcHAKQEAgLTU1OSw3ICs1NTksNyBAQCBQYXNzUmVmUHRyPE5v
ZGVMaXN0PiBIVE1MQ29sbGVjdGlvbjo6dGFncyhjb25zdCBTdHJpbmcmIG5hbWUpCiAKIHZvaWQg
SFRNTENvbGxlY3Rpb25DYWNoZUJhc2U6OmFwcGVuZChOb2RlQ2FjaGVNYXAmIG1hcCwgY29uc3Qg
QXRvbWljU3RyaW5nJiBrZXksIEVsZW1lbnQqIGVsZW1lbnQpCiB7Ci0gICAgT3duUHRyPFZlY3Rv
cjxFbGVtZW50Kj4gPiYgdmVjdG9yID0gbWFwLmFkZChrZXkuaW1wbCgpLCBudWxscHRyKS5pdGVy
YXRvci0+c2Vjb25kOworICAgIE93blB0cjxWZWN0b3I8RWxlbWVudCo+ID4mIHZlY3RvciA9IG1h
cC5hZGQoa2V5LmltcGwoKSwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghdmVj
dG9yKQogICAgICAgICB2ZWN0b3IgPSBhZG9wdFB0cihuZXcgVmVjdG9yPEVsZW1lbnQqPik7CiAg
ICAgdmVjdG9yLT5hcHBlbmQoZWxlbWVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwCmluZGV4IGI5MWFlNTAuLmQwODFlMjQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwCkBAIC0zMjcs
NyArMzI3LDcgQEAgV2ViR0xTaGFyZWRPYmplY3QqIFdlYkdMRnJhbWVidWZmZXI6OmdldEF0dGFj
aG1lbnRPYmplY3QoR0MzRGVudW0gYXR0YWNobWVudCkgY28KIFdlYkdMRnJhbWVidWZmZXI6Oldl
YkdMQXR0YWNobWVudCogV2ViR0xGcmFtZWJ1ZmZlcjo6Z2V0QXR0YWNobWVudChHQzNEZW51bSBh
dHRhY2htZW50KSBjb25zdAogewogICAgIGNvbnN0IEF0dGFjaG1lbnRNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV9hdHRhY2htZW50cy5maW5kKGF0dGFjaG1lbnQpOwotICAgIHJldHVybiAoaXQg
IT0gbV9hdHRhY2htZW50cy5lbmQoKSkgPyBpdC0+c2Vjb25kLmdldCgpIDogMDsKKyAgICByZXR1
cm4gKGl0ICE9IG1fYXR0YWNobWVudHMuZW5kKCkpID8gaXQtPnZhbHVlLmdldCgpIDogMDsKIH0K
IAogdm9pZCBXZWJHTEZyYW1lYnVmZmVyOjpyZW1vdmVBdHRhY2htZW50RnJvbUJvdW5kRnJhbWVi
dWZmZXIoR0MzRGVudW0gYXR0YWNobWVudCkKQEAgLTM2Nyw5ICszNjcsOSBAQCB2b2lkIFdlYkdM
RnJhbWVidWZmZXI6OnJlbW92ZUF0dGFjaG1lbnRGcm9tQm91bmRGcmFtZWJ1ZmZlcihXZWJHTFNo
YXJlZE9iamVjdCogYQogICAgIHdoaWxlIChjaGVja01vcmUpIHsKICAgICAgICAgY2hlY2tNb3Jl
ID0gZmFsc2U7CiAgICAgICAgIGZvciAoQXR0YWNobWVudE1hcDo6aXRlcmF0b3IgaXQgPSBtX2F0
dGFjaG1lbnRzLmJlZ2luKCk7IGl0ICE9IG1fYXR0YWNobWVudHMuZW5kKCk7ICsraXQpIHsKLSAg
ICAgICAgICAgIFdlYkdMQXR0YWNobWVudCogYXR0YWNobWVudE9iamVjdCA9IGl0LT5zZWNvbmQu
Z2V0KCk7CisgICAgICAgICAgICBXZWJHTEF0dGFjaG1lbnQqIGF0dGFjaG1lbnRPYmplY3QgPSBp
dC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoYXR0YWNobWVudE9iamVjdC0+aXNTaGFy
ZWRPYmplY3QoYXR0YWNobWVudCkpIHsKLSAgICAgICAgICAgICAgICBHQzNEZW51bSBhdHRhY2ht
ZW50VHlwZSA9IGl0LT5maXJzdDsKKyAgICAgICAgICAgICAgICBHQzNEZW51bSBhdHRhY2htZW50
VHlwZSA9IGl0LT5rZXk7CiAgICAgICAgICAgICAgICAgYXR0YWNobWVudE9iamVjdC0+dW5hdHRh
Y2goY29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgpLCBhdHRhY2htZW50VHlwZSk7CiAgICAg
ICAgICAgICAgICAgcmVtb3ZlQXR0YWNobWVudEZyb21Cb3VuZEZyYW1lYnVmZmVyKGF0dGFjaG1l
bnRUeXBlKTsKICAgICAgICAgICAgICAgICBjaGVja01vcmUgPSB0cnVlOwpAQCAtNDE5LDggKzQx
OSw4IEBAIEdDM0RlbnVtIFdlYkdMRnJhbWVidWZmZXI6OmNoZWNrU3RhdHVzKGNvbnN0IGNoYXIq
KiByZWFzb24pIGNvbnN0CiAgICAgYm9vbCBoYXZlU3RlbmNpbCA9IGZhbHNlOwogICAgIGJvb2wg
aGF2ZURlcHRoU3RlbmNpbCA9IGZhbHNlOwogICAgIGZvciAoQXR0YWNobWVudE1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX2F0dGFjaG1lbnRzLmJlZ2luKCk7IGl0ICE9IG1fYXR0YWNobWVudHMu
ZW5kKCk7ICsraXQpIHsKLSAgICAgICAgV2ViR0xBdHRhY2htZW50KiBhdHRhY2htZW50ID0gaXQt
PnNlY29uZC5nZXQoKTsKLSAgICAgICAgaWYgKCFpc0F0dGFjaG1lbnRDb21wbGV0ZShhdHRhY2ht
ZW50LCBpdC0+Zmlyc3QsIHJlYXNvbikpCisgICAgICAgIFdlYkdMQXR0YWNobWVudCogYXR0YWNo
bWVudCA9IGl0LT52YWx1ZS5nZXQoKTsKKyAgICAgICAgaWYgKCFpc0F0dGFjaG1lbnRDb21wbGV0
ZShhdHRhY2htZW50LCBpdC0+a2V5LCByZWFzb24pKQogICAgICAgICAgICAgcmV0dXJuIEdyYXBo
aWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAgICAg
IGlmICghYXR0YWNobWVudC0+aXNWYWxpZCgpKSB7CiAgICAgICAgICAgICAqcmVhc29uID0gImF0
dGFjaG1lbnQgaXMgbm90IHZhbGlkIjsKQEAgLTQzMCw3ICs0MzAsNyBAQCBHQzNEZW51bSBXZWJH
TEZyYW1lYnVmZmVyOjpjaGVja1N0YXR1cyhjb25zdCBjaGFyKiogcmVhc29uKSBjb25zdAogICAg
ICAgICAgICAgKnJlYXNvbiA9ICJhdHRhY2htZW50IGlzIGFuIHVuc3VwcG9ydGVkIGZvcm1hdCI7
CiAgICAgICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0lOQ09N
UExFVEVfQVRUQUNITUVOVDsKICAgICAgICAgfQotICAgICAgICBzd2l0Y2ggKGl0LT5maXJzdCkg
eworICAgICAgICBzd2l0Y2ggKGl0LT5rZXkpIHsKICAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6REVQVEhfQVRUQUNITUVOVDoKICAgICAgICAgICAgIGhhdmVEZXB0aCA9IHRydWU7CiAg
ICAgICAgICAgICBicmVhazsKQEAgLTQ4OCw3ICs0ODgsNyBAQCBib29sIFdlYkdMRnJhbWVidWZm
ZXI6Omhhc1N0ZW5jaWxCdWZmZXIoKSBjb25zdAogdm9pZCBXZWJHTEZyYW1lYnVmZmVyOjpkZWxl
dGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M2QsIFBsYXRmb3JtM0RPYmpl
Y3Qgb2JqZWN0KQogewogICAgIGZvciAoQXR0YWNobWVudE1hcDo6aXRlcmF0b3IgaXQgPSBtX2F0
dGFjaG1lbnRzLmJlZ2luKCk7IGl0ICE9IG1fYXR0YWNobWVudHMuZW5kKCk7ICsraXQpCi0gICAg
ICAgIGl0LT5zZWNvbmQtPm9uRGV0YWNoZWQoY29udGV4dDNkKTsKKyAgICAgICAgaXQtPnZhbHVl
LT5vbkRldGFjaGVkKGNvbnRleHQzZCk7CiAKICAgICBjb250ZXh0M2QtPmRlbGV0ZUZyYW1lYnVm
ZmVyKG9iamVjdCk7CiB9CkBAIC00OTksOCArNDk5LDggQEAgYm9vbCBXZWJHTEZyYW1lYnVmZmVy
Ojppbml0aWFsaXplQXR0YWNobWVudHMoR3JhcGhpY3NDb250ZXh0M0QqIGczZCwgY29uc3QgY2hh
cioKICAgICBHQzNEYml0ZmllbGQgbWFzayA9IDA7CiAKICAgICBmb3IgKEF0dGFjaG1lbnRNYXA6
Oml0ZXJhdG9yIGl0ID0gbV9hdHRhY2htZW50cy5iZWdpbigpOyBpdCAhPSBtX2F0dGFjaG1lbnRz
LmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIEdDM0RlbnVtIGF0dGFjaG1lbnRUeXBlID0gaXQtPmZp
cnN0OwotICAgICAgICBXZWJHTEF0dGFjaG1lbnQqIGF0dGFjaG1lbnQgPSBpdC0+c2Vjb25kLmdl
dCgpOworICAgICAgICBHQzNEZW51bSBhdHRhY2htZW50VHlwZSA9IGl0LT5rZXk7CisgICAgICAg
IFdlYkdMQXR0YWNobWVudCogYXR0YWNobWVudCA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAg
aWYgKCFhdHRhY2htZW50LT5pc0luaXRpYWxpemVkKCkpCiAgICAgICAgICAgIG1hc2sgfD0gR3Jh
cGhpY3NDb250ZXh0M0Q6OmdldENsZWFyQml0c0J5QXR0YWNobWVudFR5cGUoYXR0YWNobWVudFR5
cGUpOwogICAgIH0KQEAgLTU3MSw4ICs1NzEsOCBAQCBib29sIFdlYkdMRnJhbWVidWZmZXI6Omlu
aXRpYWxpemVBdHRhY2htZW50cyhHcmFwaGljc0NvbnRleHQzRCogZzNkLCBjb25zdCBjaGFyKgog
ICAgICAgICBnM2QtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkRJVEhFUik7CiAKICAgICBm
b3IgKEF0dGFjaG1lbnRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9hdHRhY2htZW50cy5iZWdpbigpOyBp
dCAhPSBtX2F0dGFjaG1lbnRzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIEdDM0RlbnVtIGF0dGFj
aG1lbnRUeXBlID0gaXQtPmZpcnN0OwotICAgICAgICBXZWJHTEF0dGFjaG1lbnQqIGF0dGFjaG1l
bnQgPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICBHQzNEZW51bSBhdHRhY2htZW50VHlwZSA9
IGl0LT5rZXk7CisgICAgICAgIFdlYkdMQXR0YWNobWVudCogYXR0YWNobWVudCA9IGl0LT52YWx1
ZS5nZXQoKTsKICAgICAgICAgR0MzRGJpdGZpZWxkIGJpdHMgPSBHcmFwaGljc0NvbnRleHQzRDo6
Z2V0Q2xlYXJCaXRzQnlBdHRhY2htZW50VHlwZShhdHRhY2htZW50VHlwZSk7CiAgICAgICAgIGlm
IChiaXRzICYgbWFzaykKICAgICAgICAgICAgIGF0dGFjaG1lbnQtPnNldEluaXRpYWxpemVkKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3Bl
Y3Rvci5weSBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9y
LnB5CmluZGV4IGVjMzgxMmIuLmE5ZWViY2UgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisrKyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CkBAIC0xMzM2LDcgKzEzMzYsNyBAQCBj
bGFzcyBUeXBlQmluZGluZ3M6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgICAgIEluc3BlY3Rvck9iamVjdDo6aXRl
cmF0b3IgJXM7XG4iICUgaXRfbmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgJXMgPSBvYmplY3QtPmZp
bmQoXCIlc1wiKTtcbiIgJSAoaXRfbmFtZSwgcHJvcF9kYXRhLnBbIm5hbWUiXSkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5l
KCIgICAgICAgIEFTU0VSVCglcyAhPSBvYmplY3QtPmVuZCgpKTtcbiIgJSBpdF9uYW1lKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3
bGluZSgiICAgICAgICAlcyglcy0+c2Vjb25kLmdldCgpKTtcbiIgJSAocHJvcF9kYXRhLnBhcmFt
X3R5cGVfYmluZGluZy5nZXRfdmFsaWRhdG9yX2NhbGxfdGV4dCgpLCBpdF9uYW1lKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xp
bmUoIiAgICAgICAgJXMoJXMtPnZhbHVlLmdldCgpKTtcbiIgJSAocHJvcF9kYXRhLnBhcmFtX3R5
cGVfYmluZGluZy5nZXRfdmFsaWRhdG9yX2NhbGxfdGV4dCgpLCBpdF9uYW1lKSkKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUo
IiAgICB9XG4iKQogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBjbG9z
ZWRfZmllbGRfc2V0OgpAQCAtMTM0OCw3ICsxMzQ4LDcgQEAgY2xhc3MgVHlwZUJpbmRpbmdzOgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIu
bmV3bGluZSgiICAgICAgICBJbnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9yICVzO1xuIiAlIGl0X25h
bWUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dy
aXRlci5uZXdsaW5lKCIgICAgICAgICVzID0gb2JqZWN0LT5maW5kKFwiJXNcIik7XG4iICUgKGl0
X25hbWUsIHByb3BfZGF0YS5wWyJuYW1lIl0pKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgICAgICBpZiAoJXMgIT0g
b2JqZWN0LT5lbmQoKSkge1xuIiAlIGl0X25hbWUpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgICAgICAgICAlcygl
cy0+c2Vjb25kLmdldCgpKTtcbiIgJSAocHJvcF9kYXRhLnBhcmFtX3R5cGVfYmluZGluZy5nZXRf
dmFsaWRhdG9yX2NhbGxfdGV4dCgpLCBpdF9uYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgICAgICVz
KCVzLT52YWx1ZS5nZXQoKSk7XG4iICUgKHByb3BfZGF0YS5wYXJhbV90eXBlX2JpbmRpbmcuZ2V0
X3ZhbGlkYXRvcl9jYWxsX3RleHQoKSwgaXRfbmFtZSkpCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgY2xvc2VkX2ZpZWxkX3NldDoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAg
ICAgICAgICArK2ZvdW5kUHJvcGVydGllc0NvdW50O1xuIikKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgfVxu
IikKQEAgLTIwMjEsNyArMjAyMSw3IEBAICRtZXNzYWdlSGFuZGxlcnMKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgICgoKnRoaXMpLippdC0+c2Vjb25kKShjYWxsSWQsIG1lc3NhZ2VPYmpl
Y3QuZ2V0KCkpOworICAgICgoKnRoaXMpLippdC0+dmFsdWUpKGNhbGxJZCwgbWVzc2FnZU9iamVj
dC5nZXQoKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpzZW5k
UmVzcG9uc2UobG9uZyBjYWxsSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQs
IGNvbnN0IGNoYXIqIGNvbW1hbmROYW1lLCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90
b2NvbEVycm9ycywgRXJyb3JTdHJpbmcgaW52b2NhdGlvbkVycm9yKQpAQCAtMjEwNSw3ICsyMTA1
LDcgQEAgUiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OmdldFByb3BlcnR5VmFsdWVJ
bXBsKEluc3BlY3Rvck9iamVjdCogb2JqZWN0LAogICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAg
fQogCi0gICAgaWYgKCFhc19tZXRob2QodmFsdWVJdGVyYXRvci0+c2Vjb25kLmdldCgpLCAmdmFs
dWUpKQorICAgIGlmICghYXNfbWV0aG9kKHZhbHVlSXRlcmF0b3ItPnZhbHVlLmdldCgpLCAmdmFs
dWUpKQogICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgi
UGFyYW1ldGVyICclcycgaGFzIHdyb25nIHR5cGUuIEl0IG11c3QgYmUgJyVzJy4iLCBuYW1lLnV0
ZjgoKS5kYXRhKCksIHR5cGVfbmFtZSkpOwogICAgIGVsc2UKICAgICAgICAgaWYgKHZhbHVlRm91
bmQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01QYXRjaFN1cHBvcnQuY3BwCmluZGV4
IGMwM2RjZTQuLjhlNmMxODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9E
T01QYXRjaFN1cHBvcnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01QYXRj
aFN1cHBvcnQuY3BwCkBAIC0yMzcsMjQgKzIzNywyNCBAQCBET01QYXRjaFN1cHBvcnQ6OmRpZmYo
Y29uc3QgVmVjdG9yPE93blB0cjxEaWdlc3Q+ID4mIG9sZExpc3QsIGNvbnN0IFZlY3RvcjxPd25Q
dAogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuZXdMaXN0LnNpemUoKTsgKytpKSB7CiAg
ICAgICAgIERpZmZUYWJsZTo6aXRlcmF0b3IgaXQgPSBuZXdUYWJsZS5hZGQobmV3TGlzdFtpXS0+
bV9zaGExLCBWZWN0b3I8c2l6ZV90PigpKS5pdGVyYXRvcjsKLSAgICAgICAgaXQtPnNlY29uZC5h
cHBlbmQoaSk7CisgICAgICAgIGl0LT52YWx1ZS5hcHBlbmQoaSk7CiAgICAgfQogCiAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBvbGRMaXN0LnNpemUoKTsgKytpKSB7CiAgICAgICAgIERpZmZU
YWJsZTo6aXRlcmF0b3IgaXQgPSBvbGRUYWJsZS5hZGQob2xkTGlzdFtpXS0+bV9zaGExLCBWZWN0
b3I8c2l6ZV90PigpKS5pdGVyYXRvcjsKLSAgICAgICAgaXQtPnNlY29uZC5hcHBlbmQoaSk7Cisg
ICAgICAgIGl0LT52YWx1ZS5hcHBlbmQoaSk7CiAgICAgfQogCiAgICAgZm9yIChEaWZmVGFibGU6
Oml0ZXJhdG9yIG5ld0l0ID0gbmV3VGFibGUuYmVnaW4oKTsgbmV3SXQgIT0gbmV3VGFibGUuZW5k
KCk7ICsrbmV3SXQpIHsKLSAgICAgICAgaWYgKG5ld0l0LT5zZWNvbmQuc2l6ZSgpICE9IDEpCisg
ICAgICAgIGlmIChuZXdJdC0+dmFsdWUuc2l6ZSgpICE9IDEpCiAgICAgICAgICAgICBjb250aW51
ZTsKIAotICAgICAgICBEaWZmVGFibGU6Oml0ZXJhdG9yIG9sZEl0ID0gb2xkVGFibGUuZmluZChu
ZXdJdC0+Zmlyc3QpOwotICAgICAgICBpZiAob2xkSXQgPT0gb2xkVGFibGUuZW5kKCkgfHwgb2xk
SXQtPnNlY29uZC5zaXplKCkgIT0gMSkKKyAgICAgICAgRGlmZlRhYmxlOjppdGVyYXRvciBvbGRJ
dCA9IG9sZFRhYmxlLmZpbmQobmV3SXQtPmtleSk7CisgICAgICAgIGlmIChvbGRJdCA9PSBvbGRU
YWJsZS5lbmQoKSB8fCBvbGRJdC0+dmFsdWUuc2l6ZSgpICE9IDEpCiAgICAgICAgICAgICBjb250
aW51ZTsKIAotICAgICAgICBuZXdNYXBbbmV3SXQtPnNlY29uZFswXV0gPSBtYWtlX3BhaXIobmV3
TGlzdFtuZXdJdC0+c2Vjb25kWzBdXS5nZXQoKSwgb2xkSXQtPnNlY29uZFswXSk7Ci0gICAgICAg
IG9sZE1hcFtvbGRJdC0+c2Vjb25kWzBdXSA9IG1ha2VfcGFpcihvbGRMaXN0W29sZEl0LT5zZWNv
bmRbMF1dLmdldCgpLCBuZXdJdC0+c2Vjb25kWzBdKTsKKyAgICAgICAgbmV3TWFwW25ld0l0LT52
YWx1ZVswXV0gPSBtYWtlX3BhaXIobmV3TGlzdFtuZXdJdC0+dmFsdWVbMF1dLmdldCgpLCBvbGRJ
dC0+dmFsdWVbMF0pOworICAgICAgICBvbGRNYXBbb2xkSXQtPnZhbHVlWzBdXSA9IG1ha2VfcGFp
cihvbGRMaXN0W29sZEl0LT52YWx1ZVswXV0uZ2V0KCksIG5ld0l0LT52YWx1ZVswXSk7CiAgICAg
fQogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IG5ld0xpc3Quc2l6ZSgpID4gMCAmJiBpIDwgbmV3
TGlzdC5zaXplKCkgLSAxOyArK2kpIHsKQEAgLTM2NCw3ICszNjQsNyBAQCBib29sIERPTVBhdGNo
U3VwcG9ydDo6aW5uZXJQYXRjaENoaWxkcmVuKENvbnRhaW5lck5vZGUqIHBhcmVudE5vZGUsIGNv
bnN0IFZlY3RvcgogCiAgICAgLy8gMi4gUGF0Y2ggbm9kZXMgbWFya2VkIGZvciBtZXJnZS4KICAg
ICBmb3IgKEhhc2hNYXA8RGlnZXN0KiwgRGlnZXN0Kj46Oml0ZXJhdG9yIGl0ID0gbWVyZ2VzLmJl
Z2luKCk7IGl0ICE9IG1lcmdlcy5lbmQoKTsgKytpdCkgewotICAgICAgICBpZiAoIWlubmVyUGF0
Y2hOb2RlKGl0LT5zZWNvbmQsIGl0LT5maXJzdCwgZWMpKQorICAgICAgICBpZiAoIWlubmVyUGF0
Y2hOb2RlKGl0LT52YWx1ZSwgaXQtPmtleSwgZWMpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KIApAQCAtNDYzLDcgKzQ2Myw3IEBAIGJvb2wgRE9NUGF0Y2hTdXBwb3J0OjpyZW1v
dmVDaGlsZEFuZE1vdmVUb05ldyhEaWdlc3QqIG9sZERpZ2VzdCwgRXhjZXB0aW9uQ29kZSYKICAg
ICAvLyBoaWdoIHRoYXQgaXQgd2lsbCBnZXQgbWVyZ2VkIGJhY2sgaW50byB0aGUgb3JpZ2luYWwg
RE9NIGR1cmluZyB0aGUgZnVydGhlciBwYXRjaGluZy4KICAgICBVbnVzZWROb2Rlc01hcDo6aXRl
cmF0b3IgaXQgPSBtX3VudXNlZE5vZGVzTWFwLmZpbmQob2xkRGlnZXN0LT5tX3NoYTEpOwogICAg
IGlmIChpdCAhPSBtX3VudXNlZE5vZGVzTWFwLmVuZCgpKSB7Ci0gICAgICAgIERpZ2VzdCogbmV3
RGlnZXN0ID0gaXQtPnNlY29uZDsKKyAgICAgICAgRGlnZXN0KiBuZXdEaWdlc3QgPSBpdC0+dmFs
dWU7CiAgICAgICAgIE5vZGUqIG5ld05vZGUgPSBuZXdEaWdlc3QtPm1fbm9kZTsKICAgICAgICAg
aWYgKCFtX2RvbUVkaXRvci0+cmVwbGFjZUNoaWxkKG5ld05vZGUtPnBhcmVudE5vZGUoKSwgb2xk
Tm9kZSwgbmV3Tm9kZSwgZWMpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0TWFuYWdlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcAppbmRleCA1
MmVjNzQ5Li4xZDVlMzE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcApAQCAtODIsMTAgKzgyLDEwIEBAIEluamVjdGVkU2NyaXB0
IEluamVjdGVkU2NyaXB0TWFuYWdlcjo6aW5qZWN0ZWRTY3JpcHRGb3JJZChpbnQgaWQpCiB7CiAg
ICAgSWRUb0luamVjdGVkU2NyaXB0TWFwOjppdGVyYXRvciBpdCA9IG1faWRUb0luamVjdGVkU2Ny
aXB0LmZpbmQoaWQpOwogICAgIGlmIChpdCAhPSBtX2lkVG9JbmplY3RlZFNjcmlwdC5lbmQoKSkK
LSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBpdC0+dmFsdWU7CiAg
ICAgZm9yIChTY3JpcHRTdGF0ZVRvSWQ6Oml0ZXJhdG9yIGl0ID0gbV9zY3JpcHRTdGF0ZVRvSWQu
YmVnaW4oKTsgaXQgIT0gbV9zY3JpcHRTdGF0ZVRvSWQuZW5kKCk7ICsraXQpIHsKLSAgICAgICAg
aWYgKGl0LT5zZWNvbmQgPT0gaWQpCi0gICAgICAgICAgICByZXR1cm4gaW5qZWN0ZWRTY3JpcHRG
b3IoaXQtPmZpcnN0KTsKKyAgICAgICAgaWYgKGl0LT52YWx1ZSA9PSBpZCkKKyAgICAgICAgICAg
IHJldHVybiBpbmplY3RlZFNjcmlwdEZvcihpdC0+a2V5KTsKICAgICB9CiAgICAgcmV0dXJuIElu
amVjdGVkU2NyaXB0KCk7CiB9CkBAIC05NCw3ICs5NCw3IEBAIGludCBJbmplY3RlZFNjcmlwdE1h
bmFnZXI6OmluamVjdGVkU2NyaXB0SWRGb3IoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlKQogewog
ICAgIFNjcmlwdFN0YXRlVG9JZDo6aXRlcmF0b3IgaXQgPSBtX3NjcmlwdFN0YXRlVG9JZC5maW5k
KHNjcmlwdFN0YXRlKTsKICAgICBpZiAoaXQgIT0gbV9zY3JpcHRTdGF0ZVRvSWQuZW5kKCkpCi0g
ICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwogICAg
IGludCBpZCA9IG1fbmV4dEluamVjdGVkU2NyaXB0SWQrKzsKICAgICBtX3NjcmlwdFN0YXRlVG9J
ZC5zZXQoc2NyaXB0U3RhdGUsIGlkKTsKICAgICByZXR1cm4gaWQ7CkBAIC0xMjYsMTEgKzEyNiwx
MSBAQCB2b2lkIEluamVjdGVkU2NyaXB0TWFuYWdlcjo6ZGlzY2FyZEluamVjdGVkU2NyaXB0c0Zv
cihET01XaW5kb3cqIHdpbmRvdykKICAgICBWZWN0b3I8bG9uZz4gaWRzVG9SZW1vdmU7CiAgICAg
SWRUb0luamVjdGVkU2NyaXB0TWFwOjppdGVyYXRvciBlbmQgPSBtX2lkVG9JbmplY3RlZFNjcmlw
dC5lbmQoKTsKICAgICBmb3IgKElkVG9JbmplY3RlZFNjcmlwdE1hcDo6aXRlcmF0b3IgaXQgPSBt
X2lkVG9JbmplY3RlZFNjcmlwdC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAg
U2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlID0gaXQtPnNlY29uZC5zY3JpcHRTdGF0ZSgpOworICAg
ICAgICBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUgPSBpdC0+dmFsdWUuc2NyaXB0U3RhdGUoKTsK
ICAgICAgICAgaWYgKHdpbmRvdyAhPSBkb21XaW5kb3dGcm9tU2NyaXB0U3RhdGUoc2NyaXB0U3Rh
dGUpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIG1fc2NyaXB0U3RhdGVUb0lkLnJl
bW92ZShzY3JpcHRTdGF0ZSk7Ci0gICAgICAgIGlkc1RvUmVtb3ZlLmFwcGVuZChpdC0+Zmlyc3Qp
OworICAgICAgICBpZHNUb1JlbW92ZS5hcHBlbmQoaXQtPmtleSk7CiAgICAgfQogCiAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBpZHNUb1JlbW92ZS5zaXplKCk7IGkrKykKQEAgLTEzOSw3ICsx
MzksNyBAQCB2b2lkIEluamVjdGVkU2NyaXB0TWFuYWdlcjo6ZGlzY2FyZEluamVjdGVkU2NyaXB0
c0ZvcihET01XaW5kb3cqIHdpbmRvdykKICAgICAvLyBOb3cgcmVtb3ZlIHNjcmlwdCBzdGF0ZXMg
dGhhdCBoYXZlIGlkIGJ1dCBubyBpbmplY3RlZCBzY3JpcHQuCiAgICAgVmVjdG9yPFNjcmlwdFN0
YXRlKj4gc2NyaXB0U3RhdGVzVG9SZW1vdmU7CiAgICAgZm9yIChTY3JpcHRTdGF0ZVRvSWQ6Oml0
ZXJhdG9yIGl0ID0gbV9zY3JpcHRTdGF0ZVRvSWQuYmVnaW4oKTsgaXQgIT0gbV9zY3JpcHRTdGF0
ZVRvSWQuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlID0g
aXQtPmZpcnN0OworICAgICAgICBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUgPSBpdC0+a2V5Owog
ICAgICAgICBpZiAod2luZG93ID09IGRvbVdpbmRvd0Zyb21TY3JpcHRTdGF0ZShzY3JpcHRTdGF0
ZSkpCiAgICAgICAgICAgICBzY3JpcHRTdGF0ZXNUb1JlbW92ZS5hcHBlbmQoc2NyaXB0U3RhdGUp
OwogICAgIH0KQEAgLTE1NSw3ICsxNTUsNyBAQCBib29sIEluamVjdGVkU2NyaXB0TWFuYWdlcjo6
Y2FuQWNjZXNzSW5zcGVjdGVkV29ya2VyQ29udGV4dChTY3JpcHRTdGF0ZSopCiB2b2lkIEluamVj
dGVkU2NyaXB0TWFuYWdlcjo6cmVsZWFzZU9iamVjdEdyb3VwKGNvbnN0IFN0cmluZyYgb2JqZWN0
R3JvdXApCiB7CiAgICAgZm9yIChJZFRvSW5qZWN0ZWRTY3JpcHRNYXA6Oml0ZXJhdG9yIGl0ID0g
bV9pZFRvSW5qZWN0ZWRTY3JpcHQuYmVnaW4oKTsgaXQgIT0gbV9pZFRvSW5qZWN0ZWRTY3JpcHQu
ZW5kKCk7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQucmVsZWFzZU9iamVjdEdyb3VwKG9iamVj
dEdyb3VwKTsKKyAgICAgICAgaXQtPnZhbHVlLnJlbGVhc2VPYmplY3RHcm91cChvYmplY3RHcm91
cCk7CiB9CiAKIFN0cmluZyBJbmplY3RlZFNjcmlwdE1hbmFnZXI6OmluamVjdGVkU2NyaXB0U291
cmNlKCkKQEAgLTE3Myw5ICsxNzMsOSBAQCBJbmplY3RlZFNjcmlwdCBJbmplY3RlZFNjcmlwdE1h
bmFnZXI6OmluamVjdGVkU2NyaXB0Rm9yKFNjcmlwdFN0YXRlKiBpbnNwZWN0ZWRTYwogewogICAg
IFNjcmlwdFN0YXRlVG9JZDo6aXRlcmF0b3IgaXQgPSBtX3NjcmlwdFN0YXRlVG9JZC5maW5kKGlu
c3BlY3RlZFNjcmlwdFN0YXRlKTsKICAgICBpZiAoaXQgIT0gbV9zY3JpcHRTdGF0ZVRvSWQuZW5k
KCkpIHsKLSAgICAgICAgSWRUb0luamVjdGVkU2NyaXB0TWFwOjppdGVyYXRvciBpdDEgPSBtX2lk
VG9JbmplY3RlZFNjcmlwdC5maW5kKGl0LT5zZWNvbmQpOworICAgICAgICBJZFRvSW5qZWN0ZWRT
Y3JpcHRNYXA6Oml0ZXJhdG9yIGl0MSA9IG1faWRUb0luamVjdGVkU2NyaXB0LmZpbmQoaXQtPnZh
bHVlKTsKICAgICAgICAgaWYgKGl0MSAhPSBtX2lkVG9JbmplY3RlZFNjcmlwdC5lbmQoKSkKLSAg
ICAgICAgICAgIHJldHVybiBpdDEtPnNlY29uZDsKKyAgICAgICAgICAgIHJldHVybiBpdDEtPnZh
bHVlOwogICAgIH0KIAogICAgIGlmICghbV9pbnNwZWN0ZWRTdGF0ZUFjY2Vzc0NoZWNrKGluc3Bl
Y3RlZFNjcmlwdFN0YXRlKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDU1NBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Q1NTQWdlbnQuY3BwCmluZGV4IDRkYjI3YjYuLjA0NjAwZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcApAQCAtMTg2LDEwICsxODYsMTAgQEAg
aW5saW5lIHZvaWQgU2VsZWN0b3JQcm9maWxlOjpjb21taXRTZWxlY3Rvcihib29sIG1hdGNoZWQp
CiAKICAgICBSdWxlTWF0Y2hpbmdTdGF0c01hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fcnVsZU1h
dGNoaW5nU3RhdHMuYWRkKG1ha2VLZXkoKSwgUnVsZU1hdGNoaW5nU3RhdHMobV9jdXJyZW50TWF0
Y2hEYXRhLCBtYXRjaFRpbWVNcywgMSwgbWF0Y2hlZCA/IDEgOiAwKSk7CiAgICAgaWYgKCFyZXN1
bHQuaXNOZXdFbnRyeSkgewotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZC50b3RhbFRp
bWUgKz0gbWF0Y2hUaW1lTXM7Ci0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLmhpdHMg
Kz0gMTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS50b3RhbFRpbWUgKz0gbWF0Y2hU
aW1lTXM7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuaGl0cyArPSAxOwogICAgICAg
ICBpZiAobWF0Y2hlZCkKLSAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLm1hdGNo
ZXMgKz0gMTsKKyAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUubWF0Y2hlcyArPSAx
OwogICAgIH0KIH0KIApAQCAtMjAyLDcgKzIwMiw3IEBAIGlubGluZSB2b2lkIFNlbGVjdG9yUHJv
ZmlsZTo6Y29tbWl0U2VsZWN0b3JUaW1lKCkKICAgICBpZiAoaXQgPT0gbV9ydWxlTWF0Y2hpbmdT
dGF0cy5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaXQtPnNlY29uZC50b3RhbFRpbWUg
Kz0gcHJvY2Vzc2luZ1RpbWVNczsKKyAgICBpdC0+dmFsdWUudG90YWxUaW1lICs9IHByb2Nlc3Np
bmdUaW1lTXM7CiB9CiAKIFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6U2VsZWN0b3JQcm9m
aWxlPiBTZWxlY3RvclByb2ZpbGU6OnRvSW5zcGVjdG9yT2JqZWN0KCkgY29uc3QKQEAgLTIxMCwx
MiArMjEwLDEyIEBAIFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6U2VsZWN0b3JQcm9maWxl
PiBTZWxlY3RvclByb2ZpbGU6OnRvSW5zcGVjdG9yT2JqZWN0CiAgICAgUmVmUHRyPFR5cGVCdWls
ZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6Q1NTOjpTZWxlY3RvclByb2ZpbGVFbnRyeT4gPiBzZWxl
Y3RvclByb2ZpbGVEYXRhID0gVHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpDU1M6OlNl
bGVjdG9yUHJvZmlsZUVudHJ5Pjo6Y3JlYXRlKCk7CiAgICAgZm9yIChSdWxlTWF0Y2hpbmdTdGF0
c01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3J1bGVNYXRjaGluZ1N0YXRzLmJlZ2luKCk7IGl0
ICE9IG1fcnVsZU1hdGNoaW5nU3RhdHMuZW5kKCk7ICsraXQpIHsKICAgICAgICAgUmVmUHRyPFR5
cGVCdWlsZGVyOjpDU1M6OlNlbGVjdG9yUHJvZmlsZUVudHJ5PiBlbnRyeSA9IFR5cGVCdWlsZGVy
OjpDU1M6OlNlbGVjdG9yUHJvZmlsZUVudHJ5OjpjcmVhdGUoKQotICAgICAgICAgICAgLnNldFNl
bGVjdG9yKGl0LT5zZWNvbmQuc2VsZWN0b3IpCi0gICAgICAgICAgICAuc2V0VXJsKGl0LT5zZWNv
bmQudXJsKQotICAgICAgICAgICAgLnNldExpbmVOdW1iZXIoaXQtPnNlY29uZC5saW5lTnVtYmVy
KQotICAgICAgICAgICAgLnNldFRpbWUoaXQtPnNlY29uZC50b3RhbFRpbWUpCi0gICAgICAgICAg
ICAuc2V0SGl0Q291bnQoaXQtPnNlY29uZC5oaXRzKQotICAgICAgICAgICAgLnNldE1hdGNoQ291
bnQoaXQtPnNlY29uZC5tYXRjaGVzKTsKKyAgICAgICAgICAgIC5zZXRTZWxlY3RvcihpdC0+dmFs
dWUuc2VsZWN0b3IpCisgICAgICAgICAgICAuc2V0VXJsKGl0LT52YWx1ZS51cmwpCisgICAgICAg
ICAgICAuc2V0TGluZU51bWJlcihpdC0+dmFsdWUubGluZU51bWJlcikKKyAgICAgICAgICAgIC5z
ZXRUaW1lKGl0LT52YWx1ZS50b3RhbFRpbWUpCisgICAgICAgICAgICAuc2V0SGl0Q291bnQoaXQt
PnZhbHVlLmhpdHMpCisgICAgICAgICAgICAuc2V0TWF0Y2hDb3VudChpdC0+dmFsdWUubWF0Y2hl
cyk7CiAgICAgICAgIHNlbGVjdG9yUHJvZmlsZURhdGEtPmFkZEl0ZW0oZW50cnkucmVsZWFzZSgp
KTsKICAgICB9CiAKQEAgLTU0OCw3ICs1NDgsNyBAQCBib29sIEluc3BlY3RvckNTU0FnZW50Ojpm
b3JjZVBzZXVkb1N0YXRlKEVsZW1lbnQqIGVsZW1lbnQsIENTU1NlbGVjdG9yOjpQc2V1ZG9UeQog
ICAgIGlmIChpdCA9PSBtX25vZGVJZFRvRm9yY2VkUHNldWRvU3RhdGUuZW5kKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIHVuc2lnbmVkIGZvcmNlZFBzZXVkb1N0YXRlID0gaXQtPnNl
Y29uZDsKKyAgICB1bnNpZ25lZCBmb3JjZWRQc2V1ZG9TdGF0ZSA9IGl0LT52YWx1ZTsKICAgICBz
d2l0Y2ggKHBzZXVkb1R5cGUpIHsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9BY3RpdmU6
CiAgICAgICAgIHJldHVybiBmb3JjZWRQc2V1ZG9TdGF0ZSAmIFBzZXVkb0FjdGl2ZTsKQEAgLTU3
MSw3ICs1NzEsNyBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpyZWNhbGNTdHlsZUZvclBzZXVk
b1N0YXRlSWZOZWVkZWQoRWxlbWVudCogZWxlbWVudCwgSW5zcAogCiAgICAgdW5zaWduZWQgZm9y
Y2VkUHNldWRvU3RhdGUgPSBjb21wdXRlUHNldWRvQ2xhc3NNYXNrKGZvcmNlZFBzZXVkb0NsYXNz
ZXMpOwogICAgIE5vZGVJZFRvRm9yY2VkUHNldWRvU3RhdGU6Oml0ZXJhdG9yIGl0ID0gbV9ub2Rl
SWRUb0ZvcmNlZFBzZXVkb1N0YXRlLmZpbmQobm9kZUlkKTsKLSAgICB1bnNpZ25lZCBjdXJyZW50
Rm9yY2VkUHNldWRvU3RhdGUgPSBpdCA9PSBtX25vZGVJZFRvRm9yY2VkUHNldWRvU3RhdGUuZW5k
KCkgPyAwIDogaXQtPnNlY29uZDsKKyAgICB1bnNpZ25lZCBjdXJyZW50Rm9yY2VkUHNldWRvU3Rh
dGUgPSBpdCA9PSBtX25vZGVJZFRvRm9yY2VkUHNldWRvU3RhdGUuZW5kKCkgPyAwIDogaXQtPnZh
bHVlOwogICAgIGJvb2wgbmVlZFN0eWxlUmVjYWxjID0gZm9yY2VkUHNldWRvU3RhdGUgIT0gY3Vy
cmVudEZvcmNlZFBzZXVkb1N0YXRlOwogICAgIGlmICghbmVlZFN0eWxlUmVjYWxjKQogICAgICAg
ICByZXR1cm47CkBAIC05MDAsNyArOTAwLDcgQEAgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGlu
ZVN0eWxlKiBJbnNwZWN0b3JDU1NBZ2VudDo6YXNJbnNwZWN0b3JTdHlsZVNoZWV0KEVsZW0KICAg
ICAgICAgcmV0dXJuIGluc3BlY3RvclN0eWxlU2hlZXQuZ2V0KCk7CiAgICAgfQogCi0gICAgcmV0
dXJuIGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgcmV0dXJuIGl0LT52YWx1ZS5nZXQoKTsKIH0KIAog
RWxlbWVudCogSW5zcGVjdG9yQ1NTQWdlbnQ6OmVsZW1lbnRGb3JJZChFcnJvclN0cmluZyogZXJy
b3JTdHJpbmcsIGludCBub2RlSWQpCkBAIC05OTQsNyArOTk0LDcgQEAgSW5zcGVjdG9yU3R5bGVT
aGVldCogSW5zcGVjdG9yQ1NTQWdlbnQ6OmFzc2VydFN0eWxlU2hlZXRGb3JJZChFcnJvclN0cmlu
ZyogZXJyb3IKICAgICAgICAgKmVycm9yU3RyaW5nID0gIk5vIHN0eWxlIHNoZWV0IHdpdGggZ2l2
ZW4gaWQgZm91bmQiOwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgcmV0dXJuIGl0LT5z
ZWNvbmQuZ2V0KCk7CisgICAgcmV0dXJuIGl0LT52YWx1ZS5nZXQoKTsKIH0KIAogVHlwZUJ1aWxk
ZXI6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6RW51bSBJbnNwZWN0b3JDU1NBZ2VudDo6ZGV0ZWN0
T3JpZ2luKENTU1N0eWxlU2hlZXQqIHBhZ2VTdHlsZVNoZWV0LCBEb2N1bWVudCogb3duZXJEb2N1
bWVudCkKQEAgLTEwNzAsNyArMTA3MCw3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmRpZFJl
bW92ZURPTU5vZGUoTm9kZSogbm9kZSkKICAgICBpZiAoaXQgPT0gbV9ub2RlVG9JbnNwZWN0b3JT
dHlsZVNoZWV0LmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2lkVG9JbnNwZWN0b3JT
dHlsZVNoZWV0LnJlbW92ZShpdC0+c2Vjb25kLT5pZCgpKTsKKyAgICBtX2lkVG9JbnNwZWN0b3JT
dHlsZVNoZWV0LnJlbW92ZShpdC0+dmFsdWUtPmlkKCkpOwogICAgIG1fbm9kZVRvSW5zcGVjdG9y
U3R5bGVTaGVldC5yZW1vdmUobm9kZSk7CiB9CiAKQEAgLTEwODMsNyArMTA4Myw3IEBAIHZvaWQg
SW5zcGVjdG9yQ1NTQWdlbnQ6OmRpZE1vZGlmeURPTUF0dHIoRWxlbWVudCogZWxlbWVudCkKICAg
ICBpZiAoaXQgPT0gbV9ub2RlVG9JbnNwZWN0b3JTdHlsZVNoZWV0LmVuZCgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBpdC0+c2Vjb25kLT5kaWRNb2RpZnlFbGVtZW50QXR0cmlidXRlKCk7Cisg
ICAgaXQtPnZhbHVlLT5kaWRNb2RpZnlFbGVtZW50QXR0cmlidXRlKCk7CiB9CiAKIHZvaWQgSW5z
cGVjdG9yQ1NTQWdlbnQ6OnN0eWxlU2hlZXRDaGFuZ2VkKEluc3BlY3RvclN0eWxlU2hlZXQqIHN0
eWxlU2hlZXQpCkBAIC0xMDk2LDcgKzEwOTYsNyBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50Ojpy
ZXNldFBzZXVkb1N0YXRlcygpCiB7CiAgICAgSGFzaFNldDxEb2N1bWVudCo+IGRvY3VtZW50c1Rv
Q2hhbmdlOwogICAgIGZvciAoTm9kZUlkVG9Gb3JjZWRQc2V1ZG9TdGF0ZTo6aXRlcmF0b3IgaXQg
PSBtX25vZGVJZFRvRm9yY2VkUHNldWRvU3RhdGUuYmVnaW4oKSwgZW5kID0gbV9ub2RlSWRUb0Zv
cmNlZFBzZXVkb1N0YXRlLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgRWxlbWVu
dCogZWxlbWVudCA9IHRvRWxlbWVudChtX2RvbUFnZW50LT5ub2RlRm9ySWQoaXQtPmZpcnN0KSk7
CisgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSB0b0VsZW1lbnQobV9kb21BZ2VudC0+bm9kZUZv
cklkKGl0LT5rZXkpKTsKICAgICAgICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC0+b3duZXJEb2N1
bWVudCgpKQogICAgICAgICAgICAgZG9jdW1lbnRzVG9DaGFuZ2UuYWRkKGVsZW1lbnQtPm93bmVy
RG9jdW1lbnQoKSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckNvbnNvbGVBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ29uc29sZUFnZW50LmNwcAppbmRleCAyNzBjNGFlLi41NTM5OGY3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcApAQCAt
MTc3LDcgKzE3Nyw3IEBAIHZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50OjpzdG9wVGltaW5nKGNv
bnN0IFN0cmluZyYgdGl0bGUsIFBhc3NSZWZQdHI8U2NyaXB0Q2FsCiAgICAgaWYgKGl0ID09IG1f
dGltZXMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGRvdWJsZSBzdGFydFRpbWUgPSBp
dC0+c2Vjb25kOworICAgIGRvdWJsZSBzdGFydFRpbWUgPSBpdC0+dmFsdWU7CiAgICAgbV90aW1l
cy5yZW1vdmUoaXQpOwogCiAgICAgZG91YmxlIGVsYXBzZWQgPSBjdXJyZW50VGltZSgpICogMTAw
MCAtIHN0YXJ0VGltZTsKQEAgLTIwMCw3ICsyMDAsNyBAQCB2b2lkIEluc3BlY3RvckNvbnNvbGVB
Z2VudDo6Y291bnQoUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+IGFyZ3VtZW50cywgUGFzc1Jl
ZgogICAgIGlmIChpdCA9PSBtX2NvdW50cy5lbmQoKSkKICAgICAgICAgY291bnQgPSAxOwogICAg
IGVsc2UgewotICAgICAgICBjb3VudCA9IGl0LT5zZWNvbmQgKyAxOworICAgICAgICBjb3VudCA9
IGl0LT52YWx1ZSArIDE7CiAgICAgICAgIG1fY291bnRzLnJlbW92ZShpdCk7CiAgICAgfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAppbmRleCA5
MWEzODMxLi4wZWJkMzQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRE9NQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JET01BZ2VudC5jcHAKQEAgLTQ3NSw3ICs0NzUsNyBAQCBOb2RlKiBJbnNwZWN0b3JET01BZ2Vu
dDo6bm9kZUZvcklkKGludCBpZCkKIAogICAgIEhhc2hNYXA8aW50LCBOb2RlKj46Oml0ZXJhdG9y
IGl0ID0gbV9pZFRvTm9kZS5maW5kKGlkKTsKICAgICBpZiAoaXQgIT0gbV9pZFRvTm9kZS5lbmQo
KSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBpdC0+dmFsdWU7
CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTkxMCw5ICs5MTAsOSBAQCB2b2lkIEluc3BlY3RvckRP
TUFnZW50OjpwZXJmb3JtU2VhcmNoKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiB3aGl0ZXNw
YWNlVHJpbQogICAgIFNlYXJjaFJlc3VsdHM6Oml0ZXJhdG9yIHJlc3VsdHNJdCA9IG1fc2VhcmNo
UmVzdWx0cy5hZGQoKnNlYXJjaElkLCBWZWN0b3I8UmVmUHRyPE5vZGU+ID4oKSkuaXRlcmF0b3I7
CiAKICAgICBmb3IgKExpc3RIYXNoU2V0PE5vZGUqPjo6aXRlcmF0b3IgaXQgPSByZXN1bHRDb2xs
ZWN0b3IuYmVnaW4oKTsgaXQgIT0gcmVzdWx0Q29sbGVjdG9yLmVuZCgpOyArK2l0KQotICAgICAg
ICByZXN1bHRzSXQtPnNlY29uZC5hcHBlbmQoKml0KTsKKyAgICAgICAgcmVzdWx0c0l0LT52YWx1
ZS5hcHBlbmQoKml0KTsKIAotICAgICpyZXN1bHRDb3VudCA9IHJlc3VsdHNJdC0+c2Vjb25kLnNp
emUoKTsKKyAgICAqcmVzdWx0Q291bnQgPSByZXN1bHRzSXQtPnZhbHVlLnNpemUoKTsKIH0KIAog
dm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0U2VhcmNoUmVzdWx0cyhFcnJvclN0cmluZyogZXJy
b3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgc2VhcmNoSWQsIGludCBmcm9tSW5kZXgsIGludCB0b0lu
ZGV4LCBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PGludD4gPiYgbm9kZUlkcykKQEAgLTkyMyw3
ICs5MjMsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRTZWFyY2hSZXN1bHRzKEVycm9y
U3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJgogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgaW50IHNpemUgPSBpdC0+c2Vjb25kLnNpemUoKTsKKyAgICBpbnQgc2l6ZSA9IGl0
LT52YWx1ZS5zaXplKCk7CiAgICAgaWYgKGZyb21JbmRleCA8IDAgfHwgdG9JbmRleCA+IHNpemUg
fHwgZnJvbUluZGV4ID49IHRvSW5kZXgpIHsKICAgICAgICAgKmVycm9yU3RyaW5nID0gIkludmFs
aWQgc2VhcmNoIHJlc3VsdCByYW5nZSI7CiAgICAgICAgIHJldHVybjsKQEAgLTkzMSw3ICs5MzEs
NyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRTZWFyY2hSZXN1bHRzKEVycm9yU3RyaW5n
KiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJgogCiAgICAgbm9kZUlkcyA9IFR5cGVCdWlsZGVy
OjpBcnJheTxpbnQ+OjpjcmVhdGUoKTsKICAgICBmb3IgKGludCBpID0gZnJvbUluZGV4OyBpIDwg
dG9JbmRleDsgKytpKQotICAgICAgICBub2RlSWRzLT5hZGRJdGVtKHB1c2hOb2RlUGF0aFRvRnJv
bnRlbmQoKGl0LT5zZWNvbmQpW2ldLmdldCgpKSk7CisgICAgICAgIG5vZGVJZHMtPmFkZEl0ZW0o
cHVzaE5vZGVQYXRoVG9Gcm9udGVuZCgoaXQtPnZhbHVlKVtpXS5nZXQoKSkpOwogfQogCiB2b2lk
IEluc3BlY3RvckRPTUFnZW50OjpkaXNjYXJkU2VhcmNoUmVzdWx0cyhFcnJvclN0cmluZyosIGNv
bnN0IFN0cmluZyYgc2VhcmNoSWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudC5jcHAKaW5kZXggODAzMjI5NS4uYzRmY2I4MiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTURlYnVnZ2Vy
QWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01EZWJ1
Z2dlckFnZW50LmNwcApAQCAtNDAyLDggKzQwMiw4IEBAIHZvaWQgSW5zcGVjdG9yRE9NRGVidWdn
ZXJBZ2VudDo6d2lsbFNlbmRYTUxIdHRwUmVxdWVzdChjb25zdCBTdHJpbmcmIHVybCkKICAgICBl
bHNlIHsKICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4geGhyQnJlYWtwb2ludHMgPSBt
X3N0YXRlLT5nZXRPYmplY3QoRE9NRGVidWdnZXJBZ2VudFN0YXRlOjp4aHJCcmVha3BvaW50cyk7
CiAgICAgICAgIGZvciAoSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciBpdCA9IHhockJyZWFrcG9p
bnRzLT5iZWdpbigpOyBpdCAhPSB4aHJCcmVha3BvaW50cy0+ZW5kKCk7ICsraXQpIHsKLSAgICAg
ICAgICAgIGlmICh1cmwuY29udGFpbnMoaXQtPmZpcnN0KSkgewotICAgICAgICAgICAgICAgIGJy
ZWFrcG9pbnRVUkwgPSBpdC0+Zmlyc3Q7CisgICAgICAgICAgICBpZiAodXJsLmNvbnRhaW5zKGl0
LT5rZXkpKSB7CisgICAgICAgICAgICAgICAgYnJlYWtwb2ludFVSTCA9IGl0LT5rZXk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5jcHAKaW5k
ZXggNzI2ZWY3Mi4uZDVjZDMwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5jcHAKQEAgLTc3LDcgKzc3LDcgQEAgdm9pZCBJ
bnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmNsZWFyRnJvbnRlbmQoKQogewogICAgIERPTVN0b3Jh
Z2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGRvbVN0b3JhZ2VFbmQgPSBtX3Jlc291cmNlcy5lbmQo
KTsKICAgICBmb3IgKERPTVN0b3JhZ2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNv
dXJjZXMuYmVnaW4oKTsgaXQgIT0gZG9tU3RvcmFnZUVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNl
Y29uZC0+dW5iaW5kKCk7CisgICAgICAgIGl0LT52YWx1ZS0+dW5iaW5kKCk7CiAgICAgbV9mcm9u
dGVuZCA9IDA7CiAgICAgZGlzYWJsZSgwKTsKIH0KQEAgLTk2LDcgKzk2LDcgQEAgdm9pZCBJbnNw
ZWN0b3JET01TdG9yYWdlQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyopCiAKICAgICBET01TdG9y
YWdlUmVzb3VyY2VzTWFwOjppdGVyYXRvciByZXNvdXJjZXNFbmQgPSBtX3Jlc291cmNlcy5lbmQo
KTsKICAgICBmb3IgKERPTVN0b3JhZ2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNv
dXJjZXMuYmVnaW4oKTsgaXQgIT0gcmVzb3VyY2VzRW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vj
b25kLT5iaW5kKG1fZnJvbnRlbmQpOworICAgICAgICBpdC0+dmFsdWUtPmJpbmQobV9mcm9udGVu
ZCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpkaXNhYmxlKEVycm9yU3Ry
aW5nKikKQEAgLTE1OSw4ICsxNTksOCBAQCBTdHJpbmcgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50
OjpzdG9yYWdlSWQoU3RvcmFnZSogc3RvcmFnZSkKICAgICBib29sIGlzTG9jYWxTdG9yYWdlID0g
KGZyYW1lLT5kb21XaW5kb3coKS0+bG9jYWxTdG9yYWdlKGVjKSA9PSBzdG9yYWdlICYmICFlYyk7
CiAgICAgRE9NU3RvcmFnZVJlc291cmNlc01hcDo6aXRlcmF0b3IgZG9tU3RvcmFnZUVuZCA9IG1f
cmVzb3VyY2VzLmVuZCgpOwogICAgIGZvciAoRE9NU3RvcmFnZVJlc291cmNlc01hcDo6aXRlcmF0
b3IgaXQgPSBtX3Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSBkb21TdG9yYWdlRW5kOyArK2l0KSB7
Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kLT5pc1NhbWVIb3N0QW5kVHlwZShmcmFtZS0+ZG9jdW1l
bnQoKS0+c2VjdXJpdHlPcmlnaW4oKSwgaXNMb2NhbFN0b3JhZ2UpKQotICAgICAgICAgICAgcmV0
dXJuIGl0LT5maXJzdDsKKyAgICAgICAgaWYgKGl0LT52YWx1ZS0+aXNTYW1lSG9zdEFuZFR5cGUo
ZnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCksIGlzTG9jYWxTdG9yYWdlKSkKKyAg
ICAgICAgICAgIHJldHVybiBpdC0+a2V5OwogICAgIH0KICAgICByZXR1cm4gU3RyaW5nKCk7CiB9
CkBAIC0xNzAsOCArMTcwLDggQEAgU3RyaW5nIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6c3Rv
cmFnZUlkKFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbiwgYm9vbAogICAgIEFTU0VSVChz
ZWN1cml0eU9yaWdpbik7CiAgICAgRE9NU3RvcmFnZVJlc291cmNlc01hcDo6aXRlcmF0b3IgZG9t
U3RvcmFnZUVuZCA9IG1fcmVzb3VyY2VzLmVuZCgpOwogICAgIGZvciAoRE9NU3RvcmFnZVJlc291
cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSBkb21TdG9y
YWdlRW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kLT5pc1NhbWVIb3N0QW5kVHlw
ZShzZWN1cml0eU9yaWdpbiwgaXNMb2NhbFN0b3JhZ2UpKQotICAgICAgICAgICAgcmV0dXJuIGl0
LT5maXJzdDsKKyAgICAgICAgaWYgKGl0LT52YWx1ZS0+aXNTYW1lSG9zdEFuZFR5cGUoc2VjdXJp
dHlPcmlnaW4sIGlzTG9jYWxTdG9yYWdlKSkKKyAgICAgICAgICAgIHJldHVybiBpdC0+a2V5Owog
ICAgIH0KICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CkBAIC0xODEsMTQgKzE4MSwxNCBAQCBJbnNw
ZWN0b3JET01TdG9yYWdlUmVzb3VyY2UqIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6Z2V0RE9N
U3RvcmFnZVJlc291cmNlRm9ySQogICAgIERPTVN0b3JhZ2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9y
IGl0ID0gbV9yZXNvdXJjZXMuZmluZChzdG9yYWdlSWQpOwogICAgIGlmIChpdCA9PSBtX3Jlc291
cmNlcy5lbmQoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQuZ2V0
KCk7CisgICAgcmV0dXJuIGl0LT52YWx1ZS5nZXQoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JET01T
dG9yYWdlQWdlbnQ6OmRpZFVzZURPTVN0b3JhZ2UoU3RvcmFnZUFyZWEqIHN0b3JhZ2VBcmVhLCBi
b29sIGlzTG9jYWxTdG9yYWdlLCBGcmFtZSogZnJhbWUpCiB7CiAgICAgRE9NU3RvcmFnZVJlc291
cmNlc01hcDo6aXRlcmF0b3IgZG9tU3RvcmFnZUVuZCA9IG1fcmVzb3VyY2VzLmVuZCgpOwogICAg
IGZvciAoRE9NU3RvcmFnZVJlc291cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5i
ZWdpbigpOyBpdCAhPSBkb21TdG9yYWdlRW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vj
b25kLT5pc1NhbWVIb3N0QW5kVHlwZShmcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4o
KSwgaXNMb2NhbFN0b3JhZ2UpKQorICAgICAgICBpZiAoaXQtPnZhbHVlLT5pc1NhbWVIb3N0QW5k
VHlwZShmcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKSwgaXNMb2NhbFN0b3JhZ2Up
KQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuY3BwCmluZGV4IGNjYjAwM2MuLjRlZDRh
YTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFz
ZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJh
c2VBZ2VudC5jcHAKQEAgLTI3NSw3ICsyNzUsNyBAQCB2b2lkIEluc3BlY3RvckRhdGFiYXNlQWdl
bnQ6OmVuYWJsZShFcnJvclN0cmluZyopCiAKICAgICBEYXRhYmFzZVJlc291cmNlc01hcDo6aXRl
cmF0b3IgZGF0YWJhc2VzRW5kID0gbV9yZXNvdXJjZXMuZW5kKCk7CiAgICAgZm9yIChEYXRhYmFz
ZVJlc291cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSBk
YXRhYmFzZXNFbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPmJpbmQobV9mcm9udGVuZFBy
b3ZpZGVyLT5mcm9udGVuZCgpKTsKKyAgICAgICAgaXQtPnZhbHVlLT5iaW5kKG1fZnJvbnRlbmRQ
cm92aWRlci0+ZnJvbnRlbmQoKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6
ZGlzYWJsZShFcnJvclN0cmluZyopCkBAIC0zMzMsOCArMzMzLDggQEAgdm9pZCBJbnNwZWN0b3JE
YXRhYmFzZUFnZW50OjpleGVjdXRlU1FMKEVycm9yU3RyaW5nKiBlcnJvciwgY29uc3QgU3RyaW5n
JiBkYXRhYmEKIFN0cmluZyBJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjpkYXRhYmFzZUlkKERhdGFi
YXNlKiBkYXRhYmFzZSkKIHsKICAgICBmb3IgKERhdGFiYXNlUmVzb3VyY2VzTWFwOjppdGVyYXRv
ciBpdCA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IG1fcmVzb3VyY2VzLmVuZCgpOyArK2l0
KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kLT5kYXRhYmFzZSgpID09IGRhdGFiYXNlKQotICAg
ICAgICAgICAgcmV0dXJuIGl0LT5maXJzdDsKKyAgICAgICAgaWYgKGl0LT52YWx1ZS0+ZGF0YWJh
c2UoKSA9PSBkYXRhYmFzZSkKKyAgICAgICAgICAgIHJldHVybiBpdC0+a2V5OwogICAgIH0KICAg
ICByZXR1cm4gU3RyaW5nKCk7CiB9CkBAIC0zNDIsOCArMzQyLDggQEAgU3RyaW5nIEluc3BlY3Rv
ckRhdGFiYXNlQWdlbnQ6OmRhdGFiYXNlSWQoRGF0YWJhc2UqIGRhdGFiYXNlKQogSW5zcGVjdG9y
RGF0YWJhc2VSZXNvdXJjZSogSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6ZmluZEJ5RmlsZU5hbWUo
Y29uc3QgU3RyaW5nJiBmaWxlTmFtZSkKIHsKICAgICBmb3IgKERhdGFiYXNlUmVzb3VyY2VzTWFw
OjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IG1fcmVzb3VyY2VzLmVu
ZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kLT5kYXRhYmFzZSgpLT5maWxlTmFt
ZSgpID09IGZpbGVOYW1lKQotICAgICAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQuZ2V0KCk7Cisg
ICAgICAgIGlmIChpdC0+dmFsdWUtPmRhdGFiYXNlKCktPmZpbGVOYW1lKCkgPT0gZmlsZU5hbWUp
CisgICAgICAgICAgICByZXR1cm4gaXQtPnZhbHVlLmdldCgpOwogICAgIH0KICAgICByZXR1cm4g
MDsKIH0KQEAgLTM1Myw3ICszNTMsNyBAQCBEYXRhYmFzZSogSW5zcGVjdG9yRGF0YWJhc2VBZ2Vu
dDo6ZGF0YWJhc2VGb3JJZChjb25zdCBTdHJpbmcmIGRhdGFiYXNlSWQpCiAgICAgRGF0YWJhc2VS
ZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMuZmluZChkYXRhYmFzZUlkKTsK
ICAgICBpZiAoaXQgPT0gbV9yZXNvdXJjZXMuZW5kKCkpCiAgICAgICAgIHJldHVybiAwOwotICAg
IHJldHVybiBpdC0+c2Vjb25kLT5kYXRhYmFzZSgpOworICAgIHJldHVybiBpdC0+dmFsdWUtPmRh
dGFiYXNlKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAppbmRleCBkNmU0NGQ5
Li4xMmY4MTc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RGVidWdnZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQuY3BwCkBAIC0yNDIsOSArMjQyLDkgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1
Z2dlckFnZW50OjpzZXRCcmVha3BvaW50QnlVcmwoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBp
bnQgbGkKIAogICAgIFNjcmlwdEJyZWFrcG9pbnQgYnJlYWtwb2ludChsaW5lTnVtYmVyLCBjb2x1
bW5OdW1iZXIsIGNvbmRpdGlvbik7CiAgICAgZm9yIChTY3JpcHRzTWFwOjppdGVyYXRvciBpdCA9
IG1fc2NyaXB0cy5iZWdpbigpOyBpdCAhPSBtX3NjcmlwdHMuZW5kKCk7ICsraXQpIHsKLSAgICAg
ICAgaWYgKCFtYXRjaGVzKGl0LT5zZWNvbmQudXJsLCB1cmwsIGlzUmVnZXgpKQorICAgICAgICBp
ZiAoIW1hdGNoZXMoaXQtPnZhbHVlLnVybCwgdXJsLCBpc1JlZ2V4KSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj4g
bG9jYXRpb24gPSByZXNvbHZlQnJlYWtwb2ludChicmVha3BvaW50SWQsIGl0LT5maXJzdCwgYnJl
YWtwb2ludCk7CisgICAgICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0aW9u
PiBsb2NhdGlvbiA9IHJlc29sdmVCcmVha3BvaW50KGJyZWFrcG9pbnRJZCwgaXQtPmtleSwgYnJl
YWtwb2ludCk7CiAgICAgICAgIGlmIChsb2NhdGlvbikKICAgICAgICAgICAgIGxvY2F0aW9ucy0+
YWRkSXRlbShsb2NhdGlvbik7CiAgICAgfQpAQCAtMjk2LDggKzI5Niw4IEBAIHZvaWQgSW5zcGVj
dG9yRGVidWdnZXJBZ2VudDo6cmVtb3ZlQnJlYWtwb2ludChFcnJvclN0cmluZyosIGNvbnN0IFN0
cmluZyYgYnJlYWtwCiAgICAgQnJlYWtwb2ludElkVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNN
YXA6Oml0ZXJhdG9yIGRlYnVnU2VydmVyQnJlYWtwb2ludElkc0l0ZXJhdG9yID0gbV9icmVha3Bv
aW50SWRUb0RlYnVnU2VydmVyQnJlYWtwb2ludElkcy5maW5kKGJyZWFrcG9pbnRJZCk7CiAgICAg
aWYgKGRlYnVnU2VydmVyQnJlYWtwb2ludElkc0l0ZXJhdG9yID09IG1fYnJlYWtwb2ludElkVG9E
ZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGRlYnVnU2VydmVyQnJlYWtwb2ludElkc0l0ZXJhdG9yLT5zZWNv
bmQuc2l6ZSgpOyArK2kpCi0gICAgICAgIHNjcmlwdERlYnVnU2VydmVyKCkucmVtb3ZlQnJlYWtw
b2ludChkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNJdGVyYXRvci0+c2Vjb25kW2ldKTsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGRlYnVnU2VydmVyQnJlYWtwb2ludElkc0l0ZXJhdG9yLT52
YWx1ZS5zaXplKCk7ICsraSkKKyAgICAgICAgc2NyaXB0RGVidWdTZXJ2ZXIoKS5yZW1vdmVCcmVh
a3BvaW50KGRlYnVnU2VydmVyQnJlYWtwb2ludElkc0l0ZXJhdG9yLT52YWx1ZVtpXSk7CiAgICAg
bV9icmVha3BvaW50SWRUb0RlYnVnU2VydmVyQnJlYWtwb2ludElkcy5yZW1vdmUoZGVidWdTZXJ2
ZXJCcmVha3BvaW50SWRzSXRlcmF0b3IpOwogfQogCkBAIC0zMjUsNyArMzI1LDcgQEAgUGFzc1Jl
ZlB0cjxUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uPiBJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50OjpyZXNvbHZlQnJlYWsKICAgICBTY3JpcHRzTWFwOjppdGVyYXRvciBzY3JpcHRJdGVyYXRv
ciA9IG1fc2NyaXB0cy5maW5kKHNjcmlwdElkKTsKICAgICBpZiAoc2NyaXB0SXRlcmF0b3IgPT0g
bV9zY3JpcHRzLmVuZCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBTY3JpcHQmIHNjcmlwdCA9
IHNjcmlwdEl0ZXJhdG9yLT5zZWNvbmQ7CisgICAgU2NyaXB0JiBzY3JpcHQgPSBzY3JpcHRJdGVy
YXRvci0+dmFsdWU7CiAgICAgaWYgKGJyZWFrcG9pbnQubGluZU51bWJlciA8IHNjcmlwdC5zdGFy
dExpbmUgfHwgc2NyaXB0LmVuZExpbmUgPCBicmVha3BvaW50LmxpbmVOdW1iZXIpCiAgICAgICAg
IHJldHVybiAwOwogCkBAIC0zMzgsNyArMzM4LDcgQEAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6
RGVidWdnZXI6OkxvY2F0aW9uPiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZXNvbHZlQnJlYWsK
ICAgICBCcmVha3BvaW50SWRUb0RlYnVnU2VydmVyQnJlYWtwb2ludElkc01hcDo6aXRlcmF0b3Ig
ZGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzSXRlcmF0b3IgPSBtX2JyZWFrcG9pbnRJZFRvRGVidWdT
ZXJ2ZXJCcmVha3BvaW50SWRzLmZpbmQoYnJlYWtwb2ludElkKTsKICAgICBpZiAoZGVidWdTZXJ2
ZXJCcmVha3BvaW50SWRzSXRlcmF0b3IgPT0gbV9icmVha3BvaW50SWRUb0RlYnVnU2VydmVyQnJl
YWtwb2ludElkcy5lbmQoKSkKICAgICAgICAgZGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzSXRlcmF0
b3IgPSBtX2JyZWFrcG9pbnRJZFRvRGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzLnNldChicmVha3Bv
aW50SWQsIFZlY3RvcjxTdHJpbmc+KCkpLml0ZXJhdG9yOwotICAgIGRlYnVnU2VydmVyQnJlYWtw
b2ludElkc0l0ZXJhdG9yLT5zZWNvbmQuYXBwZW5kKGRlYnVnU2VydmVyQnJlYWtwb2ludElkKTsK
KyAgICBkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNJdGVyYXRvci0+dmFsdWUuYXBwZW5kKGRlYnVn
U2VydmVyQnJlYWtwb2ludElkKTsKIAogICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6RGVidWdnZXI6
OkxvY2F0aW9uPiBsb2NhdGlvbiA9IFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRpb246OmNy
ZWF0ZSgpCiAgICAgICAgIC5zZXRTY3JpcHRJZChzY3JpcHRJZCkKQEAgLTM2NCw3ICszNjQsNyBA
QCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNlYXJjaEluQ29udGVudChFcnJvclN0cmlu
ZyogZXJyb3IsIGNvbnN0IFN0cmluZyYgcwogCiAgICAgU2NyaXB0c01hcDo6aXRlcmF0b3IgaXQg
PSBtX3NjcmlwdHMuZmluZChzY3JpcHRJZCk7CiAgICAgaWYgKGl0ICE9IG1fc2NyaXB0cy5lbmQo
KSkKLSAgICAgICAgcmVzdWx0cyA9IENvbnRlbnRTZWFyY2hVdGlsczo6c2VhcmNoSW5UZXh0QnlM
aW5lcyhpdC0+c2Vjb25kLnNvdXJjZSwgcXVlcnksIGNhc2VTZW5zaXRpdmUsIGlzUmVnZXgpOwor
ICAgICAgICByZXN1bHRzID0gQ29udGVudFNlYXJjaFV0aWxzOjpzZWFyY2hJblRleHRCeUxpbmVz
KGl0LT52YWx1ZS5zb3VyY2UsIHF1ZXJ5LCBjYXNlU2Vuc2l0aXZlLCBpc1JlZ2V4KTsKICAgICBl
bHNlCiAgICAgICAgICplcnJvciA9ICJObyBzY3JpcHQgZm9yIGlkOiAiICsgc2NyaXB0SWQ7CiB9
CkBAIC0zOTcsNyArMzk3LDcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpnZXRTY3Jp
cHRTb3VyY2UoRXJyb3JTdHJpbmcqIGVycm9yLCBjb25zdCBTdHJpbmcmIHMKIHsKICAgICBTY3Jp
cHRzTWFwOjppdGVyYXRvciBpdCA9IG1fc2NyaXB0cy5maW5kKHNjcmlwdElkKTsKICAgICBpZiAo
aXQgIT0gbV9zY3JpcHRzLmVuZCgpKQotICAgICAgICAqc2NyaXB0U291cmNlID0gaXQtPnNlY29u
ZC5zb3VyY2U7CisgICAgICAgICpzY3JpcHRTb3VyY2UgPSBpdC0+dmFsdWUuc291cmNlOwogICAg
IGVsc2UKICAgICAgICAgKmVycm9yID0gIk5vIHNjcmlwdCBmb3IgaWQ6ICIgKyBzY3JpcHRJZDsK
IH0KQEAgLTYyNCw3ICs2MjQsNyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBh
cnNlU291cmNlKGNvbnN0IFN0cmluZyYgc2NyaXB0SWQsIGNvbnN0IFNjcmlwdAogCiAgICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gYnJlYWtwb2ludHNDb29raWUgPSBtX3N0YXRlLT5nZXRPYmpl
Y3QoRGVidWdnZXJBZ2VudFN0YXRlOjpqYXZhU2NyaXB0QnJlYWtwb2ludHMpOwogICAgIGZvciAo
SW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciBpdCA9IGJyZWFrcG9pbnRzQ29va2llLT5iZWdpbigp
OyBpdCAhPSBicmVha3BvaW50c0Nvb2tpZS0+ZW5kKCk7ICsraXQpIHsKLSAgICAgICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gYnJlYWtwb2ludE9iamVjdCA9IGl0LT5zZWNvbmQtPmFzT2JqZWN0
KCk7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJyZWFrcG9pbnRPYmplY3QgPSBp
dC0+dmFsdWUtPmFzT2JqZWN0KCk7CiAgICAgICAgIGJvb2wgaXNSZWdleDsKICAgICAgICAgYnJl
YWtwb2ludE9iamVjdC0+Z2V0Qm9vbGVhbigiaXNSZWdleCIsICZpc1JlZ2V4KTsKICAgICAgICAg
U3RyaW5nIHVybDsKQEAgLTYzNSw5ICs2MzUsOSBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ6OmRpZFBhcnNlU291cmNlKGNvbnN0IFN0cmluZyYgc2NyaXB0SWQsIGNvbnN0IFNjcmlwdAog
ICAgICAgICBicmVha3BvaW50T2JqZWN0LT5nZXROdW1iZXIoImxpbmVOdW1iZXIiLCAmYnJlYWtw
b2ludC5saW5lTnVtYmVyKTsKICAgICAgICAgYnJlYWtwb2ludE9iamVjdC0+Z2V0TnVtYmVyKCJj
b2x1bW5OdW1iZXIiLCAmYnJlYWtwb2ludC5jb2x1bW5OdW1iZXIpOwogICAgICAgICBicmVha3Bv
aW50T2JqZWN0LT5nZXRTdHJpbmcoImNvbmRpdGlvbiIsICZicmVha3BvaW50LmNvbmRpdGlvbik7
Ci0gICAgICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uPiBsb2NhdGlv
biA9IHJlc29sdmVCcmVha3BvaW50KGl0LT5maXJzdCwgc2NyaXB0SWQsIGJyZWFrcG9pbnQpOwor
ICAgICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj4gbG9jYXRpb24g
PSByZXNvbHZlQnJlYWtwb2ludChpdC0+a2V5LCBzY3JpcHRJZCwgYnJlYWtwb2ludCk7CiAgICAg
ICAgIGlmIChsb2NhdGlvbikKLSAgICAgICAgICAgIG1fZnJvbnRlbmQtPmJyZWFrcG9pbnRSZXNv
bHZlZChpdC0+Zmlyc3QsIGxvY2F0aW9uKTsKKyAgICAgICAgICAgIG1fZnJvbnRlbmQtPmJyZWFr
cG9pbnRSZXNvbHZlZChpdC0+a2V5LCBsb2NhdGlvbik7CiAgICAgfQogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcAppbmRl
eCBjNTg0YjFlLi5jNWRlODlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHAKQEAgLTMxNywxMiArMzE3LDEyIEBAIHB1Ymxp
YzoKICAgICAgICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6SW5kZXhl
ZERCOjpPYmplY3RTdG9yZT4gPiBvYmplY3RTdG9yZXMgPSBUeXBlQnVpbGRlcjo6QXJyYXk8VHlw
ZUJ1aWxkZXI6OkluZGV4ZWREQjo6T2JqZWN0U3RvcmU+OjpjcmVhdGUoKTsKIAogICAgICAgICBm
b3IgKElEQkRhdGFiYXNlTWV0YWRhdGE6Ok9iamVjdFN0b3JlTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IGRhdGFiYXNlTWV0YWRhdGEub2JqZWN0U3RvcmVzLmJlZ2luKCk7IGl0ICE9IGRhdGFiYXNl
TWV0YWRhdGEub2JqZWN0U3RvcmVzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgICAgICBjb25zdCBJ
REJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhID0gaXQtPnNlY29uZDsK
KyAgICAgICAgICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlTWV0
YWRhdGEgPSBpdC0+dmFsdWU7CiAKICAgICAgICAgICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJy
YXk8VHlwZUJ1aWxkZXI6OkluZGV4ZWREQjo6T2JqZWN0U3RvcmVJbmRleD4gPiBpbmRleGVzID0g
VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpJbmRleGVkREI6Ok9iamVjdFN0b3JlSW5k
ZXg+OjpjcmVhdGUoKTsKIAogICAgICAgICAgICAgZm9yIChJREJPYmplY3RTdG9yZU1ldGFkYXRh
OjpJbmRleE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBvYmplY3RTdG9yZU1ldGFkYXRhLmluZGV4
ZXMuYmVnaW4oKTsgaXQgIT0gb2JqZWN0U3RvcmVNZXRhZGF0YS5pbmRleGVzLmVuZCgpOyArK2l0
KSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0
YSA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICAgICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYg
aW5kZXhNZXRhZGF0YSA9IGl0LT52YWx1ZTsKIAogICAgICAgICAgICAgICAgIFJlZlB0cjxPYmpl
Y3RTdG9yZUluZGV4PiBvYmplY3RTdG9yZUluZGV4ID0gT2JqZWN0U3RvcmVJbmRleDo6Y3JlYXRl
KCkKICAgICAgICAgICAgICAgICAgICAgLnNldE5hbWUoaW5kZXhNZXRhZGF0YS5uYW1lKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck1lbW9yeUFnZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JNZW1vcnlBZ2VudC5jcHAKaW5k
ZXggMjA3YzU3ZC4uMzA5ZWIxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3Rvck1lbW9yeUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yTWVtb3J5QWdlbnQuY3BwCkBAIC0xNTYsOCArMTU2LDggQEAgcHVibGljOgogICAg
IHsKICAgICAgICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6TWVtb3J5
OjpOb2RlQ291bnQ+ID4gY2hpbGRyZW5TdGF0cyA9IFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVp
bGRlcjo6TWVtb3J5OjpOb2RlQ291bnQ+OjpjcmVhdGUoKTsKICAgICAgICAgZm9yIChIYXNoTWFw
PFN0cmluZywgaW50Pjo6aXRlcmF0b3IgaXQgPSBtX25vZGVOYW1lVG9Db3VudC5iZWdpbigpOyBp
dCAhPSBtX25vZGVOYW1lVG9Db3VudC5lbmQoKTsgKytpdCkgewotICAgICAgICAgICAgUmVmUHRy
PE5vZGVDb3VudD4gbm9kZUNvdW50ID0gTm9kZUNvdW50OjpjcmVhdGUoKS5zZXROb2RlTmFtZShp
dC0+Zmlyc3QpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLnNldENvdW50KGl0LT5zZWNvbmQpOworICAgICAgICAgICAgUmVmUHRy
PE5vZGVDb3VudD4gbm9kZUNvdW50ID0gTm9kZUNvdW50OjpjcmVhdGUoKS5zZXROb2RlTmFtZShp
dC0+a2V5KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC5zZXRDb3VudChpdC0+dmFsdWUpOwogICAgICAgICAgICAgY2hpbGRyZW5T
dGF0cy0+YWRkSXRlbShub2RlQ291bnQpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBjaGls
ZHJlblN0YXRzLnJlbGVhc2UoKTsKQEAgLTE2Nyw4ICsxNjcsOCBAQCBwdWJsaWM6CiAgICAgewog
ICAgICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpNZW1vcnk6Okxp
c3RlbmVyQ291bnQ+ID4gbGlzdGVuZXJTdGF0cyA9IFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVp
bGRlcjo6TWVtb3J5OjpMaXN0ZW5lckNvdW50Pjo6Y3JlYXRlKCk7CiAgICAgICAgIGZvciAoSGFz
aE1hcDxBdG9taWNTdHJpbmcsIGludD46Oml0ZXJhdG9yIGl0ID0gbV9ldmVudFR5cGVUb0NvdW50
LmJlZ2luKCk7IGl0ICE9IG1fZXZlbnRUeXBlVG9Db3VudC5lbmQoKTsgKytpdCkgewotICAgICAg
ICAgICAgUmVmUHRyPExpc3RlbmVyQ291bnQ+IGxpc3RlbmVyQ291bnQgPSBMaXN0ZW5lckNvdW50
OjpjcmVhdGUoKS5zZXRUeXBlKGl0LT5maXJzdCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0Q291bnQo
aXQtPnNlY29uZCk7CisgICAgICAgICAgICBSZWZQdHI8TGlzdGVuZXJDb3VudD4gbGlzdGVuZXJD
b3VudCA9IExpc3RlbmVyQ291bnQ6OmNyZWF0ZSgpLnNldFR5cGUoaXQtPmtleSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAuc2V0Q291bnQoaXQtPnZhbHVlKTsKICAgICAgICAgICAgIGxpc3RlbmVyU3RhdHMt
PmFkZEl0ZW0obGlzdGVuZXJDb3VudCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGxpc3Rl
bmVyU3RhdHMucmVsZWFzZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvclBhZ2VBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yUGFnZUFnZW50LmNwcAppbmRleCA5OWQwMmZlLi4zYjM5YjlmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcApAQCAtNDUwLDcgKzQ1MCw3
IEBAIHN0YXRpYyBWZWN0b3I8Q2FjaGVkUmVzb3VyY2UqPiBjYWNoZWRSZXNvdXJjZXNGb3JGcmFt
ZShGcmFtZSogZnJhbWUpCiAgICAgY29uc3QgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OkRvY3VtZW50
UmVzb3VyY2VNYXAmIGFsbFJlc291cmNlcyA9IGZyYW1lLT5kb2N1bWVudCgpLT5jYWNoZWRSZXNv
dXJjZUxvYWRlcigpLT5hbGxDYWNoZWRSZXNvdXJjZXMoKTsKICAgICBDYWNoZWRSZXNvdXJjZUxv
YWRlcjo6RG9jdW1lbnRSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gYWxsUmVzb3Vy
Y2VzLmVuZCgpOwogICAgIGZvciAoQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OkRvY3VtZW50UmVzb3Vy
Y2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYWxsUmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewotICAgICAgICBDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UgPSBpdC0+
c2Vjb25kLmdldCgpOworICAgICAgICBDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UgPSBp
dC0+dmFsdWUuZ2V0KCk7CiAKICAgICAgICAgc3dpdGNoIChjYWNoZWRSZXNvdXJjZS0+dHlwZSgp
KSB7CiAgICAgICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3VyY2U6CkBAIC03NTQs
NyArNzU0LDcgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRpZENsZWFyV2luZG93T2JqZWN0
SW5Xb3JsZChGcmFtZSogZnJhbWUsIERPTVdyYXBwZXJXb3IKICAgICAgICAgSW5zcGVjdG9yT2Jq
ZWN0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBzY3JpcHRzLT5lbmQoKTsKICAgICAgICAgZm9yIChJ
bnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gc2NyaXB0cy0+YmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBTdHJpbmcgc2NyaXB0VGV4dDsKLSAgICAgICAg
ICAgIGlmIChpdC0+c2Vjb25kLT5hc1N0cmluZygmc2NyaXB0VGV4dCkpCisgICAgICAgICAgICBp
ZiAoaXQtPnZhbHVlLT5hc1N0cmluZygmc2NyaXB0VGV4dCkpCiAgICAgICAgICAgICAgICAgbV9p
bmplY3RlZFNjcmlwdE1hbmFnZXItPmluamVjdFNjcmlwdChzY3JpcHRUZXh0LCBtYWluV29ybGRT
Y3JpcHRTdGF0ZShmcmFtZSkpOwogICAgICAgICB9CiAgICAgfQpAQCAtNzg2LDggKzc4Niw4IEBA
IHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpmcmFtZURldGFjaGVkKEZyYW1lKiBmcmFtZSkKIHsK
ICAgICBIYXNoTWFwPEZyYW1lKiwgU3RyaW5nPjo6aXRlcmF0b3IgaXRlcmF0b3IgPSBtX2ZyYW1l
VG9JZGVudGlmaWVyLmZpbmQoZnJhbWUpOwogICAgIGlmIChpdGVyYXRvciAhPSBtX2ZyYW1lVG9J
ZGVudGlmaWVyLmVuZCgpKSB7Ci0gICAgICAgIG1fZnJvbnRlbmQtPmZyYW1lRGV0YWNoZWQoaXRl
cmF0b3ItPnNlY29uZCk7Ci0gICAgICAgIG1faWRlbnRpZmllclRvRnJhbWUucmVtb3ZlKGl0ZXJh
dG9yLT5zZWNvbmQpOworICAgICAgICBtX2Zyb250ZW5kLT5mcmFtZURldGFjaGVkKGl0ZXJhdG9y
LT52YWx1ZSk7CisgICAgICAgIG1faWRlbnRpZmllclRvRnJhbWUucmVtb3ZlKGl0ZXJhdG9yLT52
YWx1ZSk7CiAgICAgICAgIG1fZnJhbWVUb0lkZW50aWZpZXIucmVtb3ZlKGl0ZXJhdG9yKTsKICAg
ICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJv
ZmlsZXJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmls
ZXJBZ2VudC5jcHAKaW5kZXggMzg2ODdlYy4uNDUzZWM5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcApAQCAtMjQ2LDEwICsy
NDYsMTAgQEAgdm9pZCBJbnNwZWN0b3JQcm9maWxlckFnZW50OjpnZXRQcm9maWxlSGVhZGVycyhF
cnJvclN0cmluZyosIFJlZlB0cjxUeXBlQnVpbGRlcjoKIAogICAgIFByb2ZpbGVzTWFwOjppdGVy
YXRvciBwcm9maWxlc0VuZCA9IG1fcHJvZmlsZXMuZW5kKCk7CiAgICAgZm9yIChQcm9maWxlc01h
cDo6aXRlcmF0b3IgaXQgPSBtX3Byb2ZpbGVzLmJlZ2luKCk7IGl0ICE9IHByb2ZpbGVzRW5kOyAr
K2l0KQotICAgICAgICBoZWFkZXJzLT5hZGRJdGVtKGNyZWF0ZVByb2ZpbGVIZWFkZXIoKml0LT5z
ZWNvbmQpKTsKKyAgICAgICAgaGVhZGVycy0+YWRkSXRlbShjcmVhdGVQcm9maWxlSGVhZGVyKCpp
dC0+dmFsdWUpKTsKICAgICBIZWFwU25hcHNob3RzTWFwOjppdGVyYXRvciBzbmFwc2hvdHNFbmQg
PSBtX3NuYXBzaG90cy5lbmQoKTsKICAgICBmb3IgKEhlYXBTbmFwc2hvdHNNYXA6Oml0ZXJhdG9y
IGl0ID0gbV9zbmFwc2hvdHMuYmVnaW4oKTsgaXQgIT0gc25hcHNob3RzRW5kOyArK2l0KQotICAg
ICAgICBoZWFkZXJzLT5hZGRJdGVtKGNyZWF0ZVNuYXBzaG90SGVhZGVyKCppdC0+c2Vjb25kKSk7
CisgICAgICAgIGhlYWRlcnMtPmFkZEl0ZW0oY3JlYXRlU25hcHNob3RIZWFkZXIoKml0LT52YWx1
ZSkpOwogfQogCiBuYW1lc3BhY2UgewpAQCAtMjc3LDE2ICsyNzcsMTYgQEAgdm9pZCBJbnNwZWN0
b3JQcm9maWxlckFnZW50OjpnZXRQcm9maWxlKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29u
c3QgU3RyaW5nJgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIHByb2Zp
bGVPYmplY3QgPSBUeXBlQnVpbGRlcjo6UHJvZmlsZXI6OlByb2ZpbGU6OmNyZWF0ZSgpOwotICAg
ICAgICBwcm9maWxlT2JqZWN0LT5zZXRIZWFkKGl0LT5zZWNvbmQtPmJ1aWxkSW5zcGVjdG9yT2Jq
ZWN0Rm9ySGVhZCgpKTsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQtPmJvdHRvbVVwSGVhZCgpKQot
ICAgICAgICAgICAgcHJvZmlsZU9iamVjdC0+c2V0Qm90dG9tVXBIZWFkKGl0LT5zZWNvbmQtPmJ1
aWxkSW5zcGVjdG9yT2JqZWN0Rm9yQm90dG9tVXBIZWFkKCkpOworICAgICAgICBwcm9maWxlT2Jq
ZWN0LT5zZXRIZWFkKGl0LT52YWx1ZS0+YnVpbGRJbnNwZWN0b3JPYmplY3RGb3JIZWFkKCkpOwor
ICAgICAgICBpZiAoaXQtPnZhbHVlLT5ib3R0b21VcEhlYWQoKSkKKyAgICAgICAgICAgIHByb2Zp
bGVPYmplY3QtPnNldEJvdHRvbVVwSGVhZChpdC0+dmFsdWUtPmJ1aWxkSW5zcGVjdG9yT2JqZWN0
Rm9yQm90dG9tVXBIZWFkKCkpOwogICAgIH0gZWxzZSBpZiAodHlwZSA9PSBIZWFwUHJvZmlsZVR5
cGUpIHsKICAgICAgICAgSGVhcFNuYXBzaG90c01hcDo6aXRlcmF0b3IgaXQgPSBtX3NuYXBzaG90
cy5maW5kKHVpZCk7CiAgICAgICAgIGlmIChpdCA9PSBtX3NuYXBzaG90cy5lbmQoKSkgewogICAg
ICAgICAgICAgKmVycm9yU3RyaW5nID0gIlByb2ZpbGUgd2Fzbid0IGZvdW5kIjsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBSZWZQdHI8U2NyaXB0SGVhcFNuYXBzaG90
PiBzbmFwc2hvdCA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFJlZlB0cjxTY3JpcHRIZWFwU25hcHNo
b3Q+IHNuYXBzaG90ID0gaXQtPnZhbHVlOwogICAgICAgICBwcm9maWxlT2JqZWN0ID0gVHlwZUJ1
aWxkZXI6OlByb2ZpbGVyOjpQcm9maWxlOjpjcmVhdGUoKTsKICAgICAgICAgaWYgKG1fZnJvbnRl
bmQpIHsKICAgICAgICAgICAgIE91dHB1dFN0cmVhbSBzdHJlYW0obV9mcm9udGVuZCwgdWlkKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFn
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50
LmNwcAppbmRleCA4Nzc2YmI4Li5kNDRlNTRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuY3BwCkBAIC0xMDEsNyArMTAxLDcgQEAg
c3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZvckhlYWRlcnMo
Y29uc3QgSFRUUEhlYWRlck1hcCYgaGUKICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBoZWFk
ZXJzT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBIVFRQSGVhZGVyTWFw
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBoZWFkZXJzLmVuZCgpOwogICAgIGZvciAoSFRUUEhlYWRl
ck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBoZWFkZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkKLSAgICAgICAgaGVhZGVyc09iamVjdC0+c2V0U3RyaW5nKGl0LT5maXJzdC5zdHJpbmcoKSwg
aXQtPnNlY29uZCk7CisgICAgICAgIGhlYWRlcnNPYmplY3QtPnNldFN0cmluZyhpdC0+a2V5LnN0
cmluZygpLCBpdC0+dmFsdWUpOwogICAgIHJldHVybiBoZWFkZXJzT2JqZWN0OwogfQogCkBAIC0y
MTIsOCArMjEyLDggQEAgdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50Ojp3aWxsU2VuZFJlcXVl
c3QodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBEb2N1bWVudEwKICAgICAgICAgSW5zcGVjdG9y
T2JqZWN0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBoZWFkZXJzLT5lbmQoKTsKICAgICAgICAgZm9y
IChJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaGVhZGVycy0+YmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBTdHJpbmcgdmFsdWU7Ci0gICAgICAgICAg
ICBpZiAoaXQtPnNlY29uZC0+YXNTdHJpbmcoJnZhbHVlKSkKLSAgICAgICAgICAgICAgICByZXF1
ZXN0LnNldEhUVFBIZWFkZXJGaWVsZChpdC0+Zmlyc3QsIHZhbHVlKTsKKyAgICAgICAgICAgIGlm
IChpdC0+dmFsdWUtPmFzU3RyaW5nKCZ2YWx1ZSkpCisgICAgICAgICAgICAgICAgcmVxdWVzdC5z
ZXRIVFRQSGVhZGVyRmllbGQoaXQtPmtleSwgdmFsdWUpOwogICAgICAgICB9CiAgICAgfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUuY3BwIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmNwcAppbmRleCA3MGEyNDM5
Li5iYWYxMGM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
U3RhdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5j
cHAKQEAgLTgwLDcgKzgwLDcgQEAgYm9vbCBJbnNwZWN0b3JTdGF0ZTo6Z2V0Qm9vbGVhbihjb25z
dCBTdHJpbmcmIHByb3BlcnR5TmFtZSkKICAgICBJbnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9yIGl0
ID0gbV9wcm9wZXJ0aWVzLT5maW5kKHByb3BlcnR5TmFtZSk7CiAgICAgYm9vbCB2YWx1ZSA9IGZh
bHNlOwogICAgIGlmIChpdCAhPSBtX3Byb3BlcnRpZXMtPmVuZCgpKQotICAgICAgICBpdC0+c2Vj
b25kLT5hc0Jvb2xlYW4oJnZhbHVlKTsKKyAgICAgICAgaXQtPnZhbHVlLT5hc0Jvb2xlYW4oJnZh
bHVlKTsKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKQEAgLTg5LDcgKzg5LDcgQEAgU3RyaW5nIElu
c3BlY3RvclN0YXRlOjpnZXRTdHJpbmcoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCiAgICAg
SW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciBpdCA9IG1fcHJvcGVydGllcy0+ZmluZChwcm9wZXJ0
eU5hbWUpOwogICAgIFN0cmluZyB2YWx1ZTsKICAgICBpZiAoaXQgIT0gbV9wcm9wZXJ0aWVzLT5l
bmQoKSkKLSAgICAgICAgaXQtPnNlY29uZC0+YXNTdHJpbmcoJnZhbHVlKTsKKyAgICAgICAgaXQt
PnZhbHVlLT5hc1N0cmluZygmdmFsdWUpOwogICAgIHJldHVybiB2YWx1ZTsKIH0KIApAQCAtOTgs
NyArOTgsNyBAQCBsb25nIEluc3BlY3RvclN0YXRlOjpnZXRMb25nKGNvbnN0IFN0cmluZyYgcHJv
cGVydHlOYW1lKQogICAgIEluc3BlY3Rvck9iamVjdDo6aXRlcmF0b3IgaXQgPSBtX3Byb3BlcnRp
ZXMtPmZpbmQocHJvcGVydHlOYW1lKTsKICAgICBsb25nIHZhbHVlID0gMDsKICAgICBpZiAoaXQg
IT0gbV9wcm9wZXJ0aWVzLT5lbmQoKSkKLSAgICAgICAgaXQtPnNlY29uZC0+YXNOdW1iZXIoJnZh
bHVlKTsKKyAgICAgICAgaXQtPnZhbHVlLT5hc051bWJlcigmdmFsdWUpOwogICAgIHJldHVybiB2
YWx1ZTsKIH0KIApAQCAtMTA3LDcgKzEwNyw3IEBAIGRvdWJsZSBJbnNwZWN0b3JTdGF0ZTo6Z2V0
RG91YmxlKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKQogICAgIEluc3BlY3Rvck9iamVjdDo6
aXRlcmF0b3IgaXQgPSBtX3Byb3BlcnRpZXMtPmZpbmQocHJvcGVydHlOYW1lKTsKICAgICBkb3Vi
bGUgdmFsdWUgPSAwOwogICAgIGlmIChpdCAhPSBtX3Byb3BlcnRpZXMtPmVuZCgpKQotICAgICAg
ICBpdC0+c2Vjb25kLT5hc051bWJlcigmdmFsdWUpOworICAgICAgICBpdC0+dmFsdWUtPmFzTnVt
YmVyKCZ2YWx1ZSk7CiAgICAgcmV0dXJuIHZhbHVlOwogfQogCkBAIC0xMTgsNyArMTE4LDcgQEAg
UGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvclN0YXRlOjpnZXRPYmplY3QoY29u
c3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUKICAgICAgICAgbV9wcm9wZXJ0aWVzLT5zZXRPYmplY3Qo
cHJvcGVydHlOYW1lLCBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKICAgICAgICAgaXQgPSBt
X3Byb3BlcnRpZXMtPmZpbmQocHJvcGVydHlOYW1lKTsKICAgICB9Ci0gICAgcmV0dXJuIGl0LT5z
ZWNvbmQtPmFzT2JqZWN0KCk7CisgICAgcmV0dXJuIGl0LT52YWx1ZS0+YXNPYmplY3QoKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCmluZGV4IDZhM2RlMDkuLmNiZWU2OGEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKQEAgLTUz
NSw3ICs1MzUsNyBAQCBQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNTU1N0eWxlPiBJbnNw
ZWN0b3JTdHlsZTo6c3R5bGVXaXRoUHJvcGVydGllcygpIGNvbgogICAgICAgICAgICAgICAgICAg
ICAgICAgc2hvdWxkSW5hY3RpdmF0ZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGVsc2Ug
ewogICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmV2aW91c1BhcnNlZE9rOwotICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gYWN0aXZlSXQtPnNlY29uZC0+Z2V0Qm9v
bGVhbihUeXBlQnVpbGRlcjo6Q1NTOjpDU1NQcm9wZXJ0eTo6UGFyc2VkT2ssICZwcmV2aW91c1Bh
cnNlZE9rKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc3VjY2VzcyA9IGFjdGl2ZUl0
LT52YWx1ZS0+Z2V0Qm9vbGVhbihUeXBlQnVpbGRlcjo6Q1NTOjpDU1NQcm9wZXJ0eTo6UGFyc2Vk
T2ssICZwcmV2aW91c1BhcnNlZE9rKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWNj
ZXNzICYmICFwcmV2aW91c1BhcnNlZE9rKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNo
b3VsZEluYWN0aXZhdGUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC01NDMsNyAr
NTQzLDcgQEAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9y
U3R5bGU6OnN0eWxlV2l0aFByb3BlcnRpZXMoKSBjb24KICAgICAgICAgICAgICAgICAgICAgcHJv
cGVydHlOYW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5LnNldChjYW5vbmljYWxQcm9wZXJ0eU5h
bWUsIHByb3BlcnR5KTsKIAogICAgICAgICAgICAgICAgIGlmIChzaG91bGRJbmFjdGl2YXRlKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGFjdGl2ZUl0LT5zZWNvbmQtPnNldFN0YXR1cyhUeXBlQnVp
bGRlcjo6Q1NTOjpDU1NQcm9wZXJ0eTo6U3RhdHVzOjpJbmFjdGl2ZSk7CisgICAgICAgICAgICAg
ICAgICAgIGFjdGl2ZUl0LT52YWx1ZS0+c2V0U3RhdHVzKFR5cGVCdWlsZGVyOjpDU1M6OkNTU1By
b3BlcnR5OjpTdGF0dXM6OkluYWN0aXZlKTsKICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlO
YW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5LnNldChjYW5vbmljYWxQcm9wZXJ0eU5hbWUsIHBy
b3BlcnR5KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtMTAz
NSw3ICsxMDM1LDcgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3JTdHlsZT4gSW5zcGVjdG9yU3R5bGVT
aGVldDo6aW5zcGVjdG9yU3R5bGVGb3JJZChjb25zdCBJbnNwZWMKICAgICAgICAgUmVmUHRyPElu
c3BlY3RvclN0eWxlPiBpbnNwZWN0b3JTdHlsZSA9IEluc3BlY3RvclN0eWxlOjpjcmVhdGUoaWQs
IHN0eWxlLCB0aGlzKTsKICAgICAgICAgcmV0dXJuIGluc3BlY3RvclN0eWxlLnJlbGVhc2UoKTsK
ICAgICB9Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgcmV0dXJuIGl0LT52YWx1ZTsKIH0K
IAogdm9pZCBJbnNwZWN0b3JTdHlsZVNoZWV0OjpyZW1lbWJlckluc3BlY3RvclN0eWxlKFJlZlB0
cjxJbnNwZWN0b3JTdHlsZT4gaW5zcGVjdG9yU3R5bGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwCmluZGV4IGI2YzcxNGIuLjkzYzZkMzkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwCkBAIC03MTcsNyArNzE3
LDcgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gSW5zcGVjdG9yT2JqZWN0QmFzZTo6Z2V0
KGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKICAgICBEaWN0aW9uYXJ5Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fZGF0YS5maW5kKG5hbWUpOwogICAgIGlmIChpdCA9PSBtX2RhdGEuZW5kKCkpCiAg
ICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgIHJldHVybiBpdC0+
dmFsdWU7CiB9CiAKIHZvaWQgSW5zcGVjdG9yT2JqZWN0QmFzZTo6cmVtb3ZlKGNvbnN0IFN0cmlu
ZyYgbmFtZSkKQEAgLTczOSw5ICs3MzksOSBAQCB2b2lkIEluc3BlY3Rvck9iamVjdEJhc2U6Ondy
aXRlSlNPTihTdHJpbmdCdWlsZGVyKiBvdXRwdXQpIGNvbnN0CiAgICAgICAgIEFTU0VSVChpdCAh
PSBtX2RhdGEuZW5kKCkpOwogICAgICAgICBpZiAoaSkKICAgICAgICAgICAgIG91dHB1dC0+YXBw
ZW5kKCcsJyk7Ci0gICAgICAgIGRvdWJsZVF1b3RlU3RyaW5nKGl0LT5maXJzdCwgb3V0cHV0KTsK
KyAgICAgICAgZG91YmxlUXVvdGVTdHJpbmcoaXQtPmtleSwgb3V0cHV0KTsKICAgICAgICAgb3V0
cHV0LT5hcHBlbmQoJzonKTsKLSAgICAgICAgaXQtPnNlY29uZC0+d3JpdGVKU09OKG91dHB1dCk7
CisgICAgICAgIGl0LT52YWx1ZS0+d3JpdGVKU09OKG91dHB1dCk7CiAgICAgfQogICAgIG91dHB1
dC0+YXBwZW5kKCd9Jyk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yV29ya2VyQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvcldvcmtlckFnZW50LmNwcAppbmRleCAxYjM4NTk1Li4wNjFmNDc0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yV29ya2VyQWdlbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JXb3JrZXJBZ2VudC5jcHAKQEAgLTE5OSw5
ICsxOTksOSBAQCB2b2lkIEluc3BlY3RvcldvcmtlckFnZW50Ojp3b3JrZXJDb250ZXh0VGVybWlu
YXRlZChXb3JrZXJDb250ZXh0UHJveHkqIHByb3h5KQogewogICAgIG1fZGVkaWNhdGVkV29ya2Vy
cy5yZW1vdmUocHJveHkpOwogICAgIGZvciAoV29ya2VyQ2hhbm5lbHM6Oml0ZXJhdG9yIGl0ID0g
bV9pZFRvQ2hhbm5lbC5iZWdpbigpOyBpdCAhPSBtX2lkVG9DaGFubmVsLmVuZCgpOyArK2l0KSB7
Ci0gICAgICAgIGlmIChwcm94eSA9PSBpdC0+c2Vjb25kLT5wcm94eSgpKSB7Ci0gICAgICAgICAg
ICBtX2luc3BlY3RvckZyb250ZW5kLT53b3JrZXIoKS0+d29ya2VyVGVybWluYXRlZChpdC0+Zmly
c3QpOwotICAgICAgICAgICAgZGVsZXRlIGl0LT5zZWNvbmQ7CisgICAgICAgIGlmIChwcm94eSA9
PSBpdC0+dmFsdWUtPnByb3h5KCkpIHsKKyAgICAgICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmQt
PndvcmtlcigpLT53b3JrZXJUZXJtaW5hdGVkKGl0LT5rZXkpOworICAgICAgICAgICAgZGVsZXRl
IGl0LT52YWx1ZTsKICAgICAgICAgICAgIG1faWRUb0NoYW5uZWwucmVtb3ZlKGl0KTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMjExLDE0ICsyMTEsMTQgQEAgdm9pZCBJbnNw
ZWN0b3JXb3JrZXJBZ2VudDo6d29ya2VyQ29udGV4dFRlcm1pbmF0ZWQoV29ya2VyQ29udGV4dFBy
b3h5KiBwcm94eSkKIHZvaWQgSW5zcGVjdG9yV29ya2VyQWdlbnQ6OmNyZWF0ZVdvcmtlckZyb250
ZW5kQ2hhbm5lbHNGb3JFeGlzdGluZ1dvcmtlcnMoKQogewogICAgIGZvciAoRGVkaWNhdGVkV29y
a2Vyczo6aXRlcmF0b3IgaXQgPSBtX2RlZGljYXRlZFdvcmtlcnMuYmVnaW4oKTsgaXQgIT0gbV9k
ZWRpY2F0ZWRXb3JrZXJzLmVuZCgpOyArK2l0KQotICAgICAgICBjcmVhdGVXb3JrZXJGcm9udGVu
ZENoYW5uZWwoaXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsKKyAgICAgICAgY3JlYXRlV29ya2VyRnJv
bnRlbmRDaGFubmVsKGl0LT5rZXksIGl0LT52YWx1ZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yV29y
a2VyQWdlbnQ6OmRlc3Ryb3lXb3JrZXJGcm9udGVuZENoYW5uZWxzKCkKIHsKICAgICBmb3IgKFdv
cmtlckNoYW5uZWxzOjppdGVyYXRvciBpdCA9IG1faWRUb0NoYW5uZWwuYmVnaW4oKTsgaXQgIT0g
bV9pZFRvQ2hhbm5lbC5lbmQoKTsgKytpdCkgewotICAgICAgICBpdC0+c2Vjb25kLT5kaXNjb25u
ZWN0RnJvbVdvcmtlckNvbnRleHQoKTsKLSAgICAgICAgZGVsZXRlIGl0LT5zZWNvbmQ7CisgICAg
ICAgIGl0LT52YWx1ZS0+ZGlzY29ubmVjdEZyb21Xb3JrZXJDb250ZXh0KCk7CisgICAgICAgIGRl
bGV0ZSBpdC0+dmFsdWU7CiAgICAgfQogICAgIG1faWRUb0NoYW5uZWwuY2xlYXIoKTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0YS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvTmV0d29ya1Jlc291cmNlc0RhdGEuY3BwCmlu
ZGV4IDYxOWExOWEuLmI0MWExYzkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvTmV0d29ya1Jlc291cmNlc0RhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9OZXR3b3JrUmVzb3VyY2VzRGF0YS5jcHAKQEAgLTI1NSw5ICsyNTUsOSBAQCB2b2lkIE5ldHdv
cmtSZXNvdXJjZXNEYXRhOjpjbGVhcihjb25zdCBTdHJpbmcmIHByZXNlcnZlZExvYWRlcklkKQog
ICAgIFJlc291cmNlRGF0YU1hcDo6aXRlcmF0b3IgaXQ7CiAgICAgUmVzb3VyY2VEYXRhTWFwOjpp
dGVyYXRvciBlbmQgPSBtX3JlcXVlc3RJZFRvUmVzb3VyY2VEYXRhTWFwLmVuZCgpOwogICAgIGZv
ciAoaXQgPSBtX3JlcXVlc3RJZFRvUmVzb3VyY2VEYXRhTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgewotICAgICAgICBSZXNvdXJjZURhdGEqIHJlc291cmNlRGF0YSA9IGl0LT5zZWNvbmQ7
CisgICAgICAgIFJlc291cmNlRGF0YSogcmVzb3VyY2VEYXRhID0gaXQtPnZhbHVlOwogICAgICAg
ICBpZiAoIXByZXNlcnZlZExvYWRlcklkLmlzTnVsbCgpICYmIHJlc291cmNlRGF0YS0+bG9hZGVy
SWQoKSA9PSBwcmVzZXJ2ZWRMb2FkZXJJZCkKLSAgICAgICAgICAgIHByZXNlcnZlZE1hcC5zZXQo
aXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsKKyAgICAgICAgICAgIHByZXNlcnZlZE1hcC5zZXQoaXQt
PmtleSwgaXQtPnZhbHVlKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgZGVsZXRlIHJlc291
cmNlRGF0YTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NP
cmlnaW5BY2Nlc3NDb250cm9sLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdp
bkFjY2Vzc0NvbnRyb2wuY3BwCmluZGV4IGFiYTJiYTAuLjliMjZmYzggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuY3BwCkBAIC02OCw3
ICs2OCw3IEBAIGJvb2wgaXNTaW1wbGVDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3QoY29uc3QgU3Ry
aW5nJiBtZXRob2QsIGNvbnN0IEhUVFBIZWFkZXJNYXAmCiAKICAgICBIVFRQSGVhZGVyTWFwOjpj
b25zdF9pdGVyYXRvciBlbmQgPSBoZWFkZXJNYXAuZW5kKCk7CiAgICAgZm9yIChIVFRQSGVhZGVy
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGhlYWRlck1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKLSAgICAgICAgaWYgKCFpc09uQWNjZXNzQ29udHJvbFNpbXBsZVJlcXVlc3RIZWFkZXJX
aGl0ZWxpc3QoaXQtPmZpcnN0LCBpdC0+c2Vjb25kKSkKKyAgICAgICAgaWYgKCFpc09uQWNjZXNz
Q29udHJvbFNpbXBsZVJlcXVlc3RIZWFkZXJXaGl0ZWxpc3QoaXQtPmtleSwgaXQtPnZhbHVlKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTExNiwxNCArMTE2LDE0IEBA
IFJlc291cmNlUmVxdWVzdCBjcmVhdGVBY2Nlc3NDb250cm9sUHJlZmxpZ2h0UmVxdWVzdChjb25z
dCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlCiAgICAgaWYgKHJlcXVlc3RIZWFkZXJGaWVsZHMuc2l6
ZSgpID4gMCkgewogICAgICAgICBTdHJpbmdCdWlsZGVyIGhlYWRlckJ1ZmZlcjsKICAgICAgICAg
SFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSByZXF1ZXN0SGVhZGVyRmllbGRzLmJl
Z2luKCk7Ci0gICAgICAgIGhlYWRlckJ1ZmZlci5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAg
aGVhZGVyQnVmZmVyLmFwcGVuZChpdC0+a2V5KTsKICAgICAgICAgKytpdDsKIAogICAgICAgICBI
VFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSByZXF1ZXN0SGVhZGVyRmllbGRzLmVu
ZCgpOwogICAgICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBoZWFk
ZXJCdWZmZXIuYXBwZW5kKCcsJyk7CiAgICAgICAgICAgICBoZWFkZXJCdWZmZXIuYXBwZW5kKCcg
Jyk7Ci0gICAgICAgICAgICBoZWFkZXJCdWZmZXIuYXBwZW5kKGl0LT5maXJzdCk7CisgICAgICAg
ICAgICBoZWFkZXJCdWZmZXIuYXBwZW5kKGl0LT5rZXkpOwogICAgICAgICB9CiAKICAgICAgICAg
cHJlZmxpZ2h0UmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoIkFjY2Vzcy1Db250cm9sLVJlcXVl
c3QtSGVhZGVycyIsIGhlYWRlckJ1ZmZlci50b1N0cmluZygpLmxvd2VyKCkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2Fj
aGUuY3BwCmluZGV4IDA0ZDU4ODEuLjlkNTFjODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9Dcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5jcHAKQEAgLTEy
NSw4ICsxMjUsOCBAQCBib29sIENyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGVJdGVtOjph
bGxvd3NDcm9zc09yaWdpbkhlYWRlcnMoY29uc3QgSFRUUEhlYQogewogICAgIEhUVFBIZWFkZXJN
YXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHJlcXVlc3RIZWFkZXJzLmVuZCgpOwogICAgIGZvciAo
SFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSByZXF1ZXN0SGVhZGVycy5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKCFtX2hlYWRlcnMuY29udGFpbnMoaXQt
PmZpcnN0KSAmJiAhaXNPbkFjY2Vzc0NvbnRyb2xTaW1wbGVSZXF1ZXN0SGVhZGVyV2hpdGVsaXN0
KGl0LT5maXJzdCwgaXQtPnNlY29uZCkpIHsKLSAgICAgICAgICAgIGVycm9yRGVzY3JpcHRpb24g
PSAiUmVxdWVzdCBoZWFkZXIgZmllbGQgIiArIGl0LT5maXJzdC5zdHJpbmcoKSArICIgaXMgbm90
IGFsbG93ZWQgYnkgQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVycy4iOworICAgICAgICBpZiAo
IW1faGVhZGVycy5jb250YWlucyhpdC0+a2V5KSAmJiAhaXNPbkFjY2Vzc0NvbnRyb2xTaW1wbGVS
ZXF1ZXN0SGVhZGVyV2hpdGVsaXN0KGl0LT5rZXksIGl0LT52YWx1ZSkpIHsKKyAgICAgICAgICAg
IGVycm9yRGVzY3JpcHRpb24gPSAiUmVxdWVzdCBoZWFkZXIgZmllbGQgIiArIGl0LT5rZXkuc3Ry
aW5nKCkgKyAiIGlzIG5vdCBhbGxvd2VkIGJ5IEFjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnMu
IjsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KQEAgLTE2Nyw3
ICsxNjcsNyBAQCBib29sIENyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGU6OmNhblNraXBQ
cmVmbGlnaHQoY29uc3QgU3RyaW5nJiBvcmlnaW4sIGNvbgogICAgIGlmIChjYWNoZUl0ID09IG1f
cHJlZmxpZ2h0SGFzaE1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYg
KGNhY2hlSXQtPnNlY29uZC0+YWxsb3dzUmVxdWVzdChpbmNsdWRlQ3JlZGVudGlhbHMsIG1ldGhv
ZCwgcmVxdWVzdEhlYWRlcnMpKQorICAgIGlmIChjYWNoZUl0LT52YWx1ZS0+YWxsb3dzUmVxdWVz
dChpbmNsdWRlQ3JlZGVudGlhbHMsIG1ldGhvZCwgcmVxdWVzdEhlYWRlcnMpKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAogICAgIG1fcHJlZmxpZ2h0SGFzaE1hcC5yZW1vdmUoY2FjaGVJdCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAppbmRleCAzZjQ5M2MxLi4zMDBm
YTMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAKQEAgLTYxMCw3
ICs2MTAsNyBAQCB2b2lkIERvY3VtZW50TG9hZGVyOjpnZXRTdWJyZXNvdXJjZXMoVmVjdG9yPFBh
c3NSZWZQdHI8QXJjaGl2ZVJlc291cmNlPiA+JiBzdWJyZQogICAgIGNvbnN0IENhY2hlZFJlc291
cmNlTG9hZGVyOjpEb2N1bWVudFJlc291cmNlTWFwJiBhbGxSZXNvdXJjZXMgPSBkb2N1bWVudC0+
Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS0+YWxsQ2FjaGVkUmVzb3VyY2VzKCk7CiAgICAgQ2FjaGVk
UmVzb3VyY2VMb2FkZXI6OkRvY3VtZW50UmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IGFsbFJlc291cmNlcy5lbmQoKTsKICAgICBmb3IgKENhY2hlZFJlc291cmNlTG9hZGVyOjpEb2N1
bWVudFJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGFsbFJlc291cmNlcy5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgUmVmUHRyPEFyY2hpdmVSZXNvdXJjZT4gc3Vi
cmVzb3VyY2UgPSB0aGlzLT5zdWJyZXNvdXJjZShLVVJMKFBhcnNlZFVSTFN0cmluZywgaXQtPnNl
Y29uZC0+dXJsKCkpKTsKKyAgICAgICAgUmVmUHRyPEFyY2hpdmVSZXNvdXJjZT4gc3VicmVzb3Vy
Y2UgPSB0aGlzLT5zdWJyZXNvdXJjZShLVVJMKFBhcnNlZFVSTFN0cmluZywgaXQtPnZhbHVlLT51
cmwoKSkpOwogICAgICAgICBpZiAoc3VicmVzb3VyY2UpCiAgICAgICAgICAgICBzdWJyZXNvdXJj
ZXMuYXBwZW5kKHN1YnJlc291cmNlLnJlbGVhc2UoKSk7CiAgICAgfQpAQCAtNjQyLDggKzY0Miw4
IEBAIHZvaWQgRG9jdW1lbnRMb2FkZXI6OnN1YnN0aXR1dGVSZXNvdXJjZURlbGl2ZXJ5VGltZXJG
aXJlZChUaW1lcjxEb2N1bWVudExvYWRlcj4qCiAKICAgICBTdWJzdGl0dXRlUmVzb3VyY2VNYXA6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGNvcHkuZW5kKCk7CiAgICAgZm9yIChTdWJzdGl0dXRlUmVz
b3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY29weS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKLSAgICAgICAgUmVmUHRyPFJlc291cmNlTG9hZGVyPiBsb2FkZXIgPSBpdC0+Zmlyc3Q7
Ci0gICAgICAgIFN1YnN0aXR1dGVSZXNvdXJjZSogcmVzb3VyY2UgPSBpdC0+c2Vjb25kLmdldCgp
OworICAgICAgICBSZWZQdHI8UmVzb3VyY2VMb2FkZXI+IGxvYWRlciA9IGl0LT5rZXk7CisgICAg
ICAgIFN1YnN0aXR1dGVSZXNvdXJjZSogcmVzb3VyY2UgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAg
ICAgIAogICAgICAgICBpZiAocmVzb3VyY2UpIHsKICAgICAgICAgICAgIFNoYXJlZEJ1ZmZlciog
ZGF0YSA9IHJlc291cmNlLT5kYXRhKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvTWFpblJlc291cmNlTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9NYWluUmVz
b3VyY2VMb2FkZXIuY3BwCmluZGV4IGZlN2QxZjkuLjljYTQ4MjkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9NYWluUmVzb3VyY2VMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9NYWluUmVzb3VyY2VMb2FkZXIuY3BwCkBAIC0zNjMsNyArMzYzLDcgQEAgdm9p
ZCBNYWluUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJl
c3BvbnNlJiByKQogCiAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSByLmh0
dHBIZWFkZXJGaWVsZHMoKS5maW5kKEF0b21pY1N0cmluZygieC1mcmFtZS1vcHRpb25zIikpOwog
ICAgIGlmIChpdCAhPSByLmh0dHBIZWFkZXJGaWVsZHMoKS5lbmQoKSkgewotICAgICAgICBTdHJp
bmcgY29udGVudCA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFN0cmluZyBjb250ZW50ID0gaXQtPnZh
bHVlOwogICAgICAgICBpZiAobV9mcmFtZS0+bG9hZGVyKCktPnNob3VsZEludGVycnVwdExvYWRG
b3JYRnJhbWVPcHRpb25zKGNvbnRlbnQsIHIudXJsKCkpKSB7CiAgICAgICAgICAgICBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OmNvbnRpbnVlQWZ0ZXJYRnJhbWVPcHRpb25zRGVuaWVkKG1fZnJh
bWUuZ2V0KCksIGRvY3VtZW50TG9hZGVyKCksIGlkZW50aWZpZXIoKSwgcik7CiAgICAgICAgICAg
ICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgY29uc29sZU1lc3NhZ2UsICgiUmVmdXNlZCB0
byBkaXNwbGF5IGRvY3VtZW50IGJlY2F1c2UgZGlzcGxheSBmb3JiaWRkZW4gYnkgWC1GcmFtZS1P
cHRpb25zLlxuIikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNl
TG9hZFNjaGVkdWxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU2No
ZWR1bGVyLmNwcAppbmRleCA4MDA0ZDhmLi44ZWI0NGQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcApAQCAtMTc0LDcgKzE3NCw3IEBAIHZv
aWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhSZXNvdXJjZUxv
YWRQcmlvcml0eSBtaW5pbXVtUHJpCiAgICAgbV9ob3N0cy5jaGVja0NvbnNpc3RlbmN5KCk7CiAg
ICAgSG9zdE1hcDo6aXRlcmF0b3IgZW5kID0gbV9ob3N0cy5lbmQoKTsKICAgICBmb3IgKEhvc3RN
YXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2hvc3RzLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIp
Ci0gICAgICAgIGhvc3RzVG9TZXJ2ZS5hcHBlbmQoaXRlci0+c2Vjb25kKTsKKyAgICAgICAgaG9z
dHNUb1NlcnZlLmFwcGVuZChpdGVyLT52YWx1ZSk7CiAKICAgICBpbnQgc2l6ZSA9IGhvc3RzVG9T
ZXJ2ZS5zaXplKCk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlLmNwcApp
bmRleCA2M2NkN2JiLi5iN2VhNjUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
YXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVy
L2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGUuY3BwCkBAIC0xMDAsMTEgKzEwMCwxMSBAQCB1bnNp
Z25lZCBBcHBsaWNhdGlvbkNhY2hlOjpyZW1vdmVSZXNvdXJjZShjb25zdCBTdHJpbmcmIHVybCkK
ICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAvLyBUaGUgcmVzb3VyY2UgZXhpc3RzLCBnZXQgaXRz
IHR5cGUgc28gd2UgY2FuIHJldHVybiBpdC4KLSAgICB1bnNpZ25lZCB0eXBlID0gaXQtPnNlY29u
ZC0+dHlwZSgpOworICAgIHVuc2lnbmVkIHR5cGUgPSBpdC0+dmFsdWUtPnR5cGUoKTsKIAogICAg
IG1fcmVzb3VyY2VzLnJlbW92ZShpdCk7CiAKLSAgICBtX2VzdGltYXRlZFNpemVJblN0b3JhZ2Ug
LT0gaXQtPnNlY29uZC0+ZXN0aW1hdGVkU2l6ZUluU3RvcmFnZSgpOworICAgIG1fZXN0aW1hdGVk
U2l6ZUluU3RvcmFnZSAtPSBpdC0+dmFsdWUtPmVzdGltYXRlZFNpemVJblN0b3JhZ2UoKTsKIAog
ICAgIHJldHVybiB0eXBlOwogfSAgICAKQEAgLTE4MCw3ICsxODAsNyBAQCB2b2lkIEFwcGxpY2F0
aW9uQ2FjaGU6OmNsZWFyU3RvcmFnZUlEKCkKICAgICAKICAgICBSZXNvdXJjZU1hcDo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gbV9yZXNvdXJjZXMuZW5kKCk7CiAgICAgZm9yIChSZXNvdXJjZU1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
Ci0gICAgICAgIGl0LT5zZWNvbmQtPmNsZWFyU3RvcmFnZUlEKCk7CisgICAgICAgIGl0LT52YWx1
ZS0+Y2xlYXJTdG9yYWdlSUQoKTsKIH0KICAgICAKIHZvaWQgQXBwbGljYXRpb25DYWNoZTo6ZGVs
ZXRlQ2FjaGVGb3JPcmlnaW4oU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKQEAgLTIxOCw4ICsyMTgs
OCBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGU6OmR1bXAoKQogICAgIEhhc2hNYXA8U3RyaW5nLCBS
ZWZQdHI8QXBwbGljYXRpb25DYWNoZVJlc291cmNlPiA+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBt
X3Jlc291cmNlcy5lbmQoKTsKICAgICAKICAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8
QXBwbGljYXRpb25DYWNoZVJlc291cmNlPiA+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcmVzb3Vy
Y2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBwcmludGYoIiVzICIsIGl0
LT5maXJzdC5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJj
ZTo6ZHVtcFR5cGUoaXQtPnNlY29uZC0+dHlwZSgpKTsKKyAgICAgICAgcHJpbnRmKCIlcyAiLCBp
dC0+a2V5LmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgQXBwbGljYXRpb25DYWNoZVJlc291cmNl
OjpkdW1wVHlwZShpdC0+dmFsdWUtPnR5cGUoKSk7CiAgICAgfQogfQogI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3Vw
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3Jv
dXAuY3BwCmluZGV4IDRlNDI5MzguLmQ2NDUwMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuY3BwCkBAIC03NzUs
OSArNzc1LDkgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmRpZEZpbmlzaExvYWRpbmdN
YW5pZmVzdCgpCiAgICAgaWYgKGlzVXBncmFkZUF0dGVtcHQpIHsKICAgICAgICAgQXBwbGljYXRp
b25DYWNoZTo6UmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fbmV3ZXN0Q2FjaGUt
PmVuZCgpOwogICAgICAgICBmb3IgKEFwcGxpY2F0aW9uQ2FjaGU6OlJlc291cmNlTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IG1fbmV3ZXN0Q2FjaGUtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewotICAgICAgICAgICAgdW5zaWduZWQgdHlwZSA9IGl0LT5zZWNvbmQtPnR5cGUoKTsKKyAgICAg
ICAgICAgIHVuc2lnbmVkIHR5cGUgPSBpdC0+dmFsdWUtPnR5cGUoKTsKICAgICAgICAgICAgIGlm
ICh0eXBlICYgQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpNYXN0ZXIpCi0gICAgICAgICAgICAg
ICAgYWRkRW50cnkoaXQtPmZpcnN0LCB0eXBlKTsKKyAgICAgICAgICAgICAgICBhZGRFbnRyeShp
dC0+a2V5LCB0eXBlKTsKICAgICAgICAgfQogICAgIH0KICAgICAKQEAgLTEwMTYsNyArMTAxNiw3
IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpzdGFydExvYWRpbmdFbnRyeSgpCiAKICAg
ICBBU1NFUlQoIW1fY3VycmVudEhhbmRsZSk7CiAgICAgCi0gICAgbV9jdXJyZW50SGFuZGxlID0g
Y3JlYXRlUmVzb3VyY2VIYW5kbGUoS1VSTChQYXJzZWRVUkxTdHJpbmcsIGl0LT5maXJzdCksIG1f
bmV3ZXN0Q2FjaGUgPyBtX25ld2VzdENhY2hlLT5yZXNvdXJjZUZvclVSTChpdC0+Zmlyc3QpIDog
MCk7CisgICAgbV9jdXJyZW50SGFuZGxlID0gY3JlYXRlUmVzb3VyY2VIYW5kbGUoS1VSTChQYXJz
ZWRVUkxTdHJpbmcsIGl0LT5rZXkpLCBtX25ld2VzdENhY2hlID8gbV9uZXdlc3RDYWNoZS0+cmVz
b3VyY2VGb3JVUkwoaXQtPmtleSkgOiAwKTsKIH0KIAogdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3Jv
dXA6OmRlbGl2ZXJEZWxheWVkTWFpblJlc291cmNlcygpCkBAIC0xMDY1LDcgKzEwNjUsNyBAQCB2
b2lkIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6YWRkRW50cnkoY29uc3QgU3RyaW5nJiB1cmwsIHVu
c2lnbmVkIHR5cGUpCiAgICAgRW50cnlNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX3BlbmRpbmdF
bnRyaWVzLmFkZCh1cmwsIHR5cGUpOwogICAgIAogICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkp
Ci0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kIHw9IHR5cGU7CisgICAgICAgIHJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUgfD0gdHlwZTsKIH0KIAogdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3Jv
dXA6OmFzc29jaWF0ZURvY3VtZW50TG9hZGVyV2l0aENhY2hlKERvY3VtZW50TG9hZGVyKiBsb2Fk
ZXIsIEFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
bG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlSG9zdC5jcHAKaW5kZXggODAxYzFiMy4u
ZmU5ZjAxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxp
Y2F0aW9uQ2FjaGVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUv
QXBwbGljYXRpb25DYWNoZUhvc3QuY3BwCkBAIC0yODIsNyArMjgyLDcgQEAgdm9pZCBBcHBsaWNh
dGlvbkNhY2hlSG9zdDo6ZmlsbFJlc291cmNlTGlzdChSZXNvdXJjZUluZm9MaXN0KiByZXNvdXJj
ZXMpCiAgICAgIAogICAgIEFwcGxpY2F0aW9uQ2FjaGU6OlJlc291cmNlTWFwOjpjb25zdF9pdGVy
YXRvciBlbmQgPSBjYWNoZS0+ZW5kKCk7CiAgICAgZm9yIChBcHBsaWNhdGlvbkNhY2hlOjpSZXNv
dXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjYWNoZS0+YmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7Ci0gICAgICAgIFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+IHJlc291cmNl
ID0gaXQtPnNlY29uZDsKKyAgICAgICAgUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4g
cmVzb3VyY2UgPSBpdC0+dmFsdWU7CiAgICAgICAgIHVuc2lnbmVkIHR5cGUgPSByZXNvdXJjZS0+
dHlwZSgpOwogICAgICAgICBib29sIGlzTWFzdGVyICAgPSB0eXBlICYgQXBwbGljYXRpb25DYWNo
ZVJlc291cmNlOjpNYXN0ZXI7CiAgICAgICAgIGJvb2wgaXNNYW5pZmVzdCA9IHR5cGUgJiBBcHBs
aWNhdGlvbkNhY2hlUmVzb3VyY2U6Ok1hbmlmZXN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVJlc291cmNlLmNwcAppbmRl
eCBkODMxNzg0Li45OTc2NmUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBw
Y2FjaGUvQXBwbGljYXRpb25DYWNoZVJlc291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVJlc291cmNlLmNwcApAQCAtNTQsNyArNTQs
NyBAQCBpbnQ2NF90IEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6ZXN0aW1hdGVkU2l6ZUluU3Rv
cmFnZSgpCiAKICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSByZXNwb25z
ZSgpLmh0dHBIZWFkZXJGaWVsZHMoKS5lbmQoKTsKICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gcmVzcG9uc2UoKS5odHRwSGVhZGVyRmllbGRzKCkuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KQotICAgICAgICBtX2VzdGltYXRlZFNpemVJblN0b3JhZ2UgKz0gKGl0
LT5maXJzdC5sZW5ndGgoKSArIGl0LT5zZWNvbmQubGVuZ3RoKCkgKyAyKSAqIHNpemVvZihVQ2hh
cik7CisgICAgICAgIG1fZXN0aW1hdGVkU2l6ZUluU3RvcmFnZSArPSAoaXQtPmtleS5sZW5ndGgo
KSArIGl0LT52YWx1ZS5sZW5ndGgoKSArIDIpICogc2l6ZW9mKFVDaGFyKTsKIAogICAgIG1fZXN0
aW1hdGVkU2l6ZUluU3RvcmFnZSArPSB1cmwoKS5zdHJpbmcoKS5sZW5ndGgoKSAqIHNpemVvZihV
Q2hhcik7CiAgICAgbV9lc3RpbWF0ZWRTaXplSW5TdG9yYWdlICs9IHNpemVvZihpbnQpOyAvLyBy
ZXNwb25zZSgpLm1faHR0cFN0YXR1c0NvZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwCmluZGV4IDVkMTAz
YjIuLjVhOTA4MWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9B
cHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2Fw
cGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcApAQCAtMTM3LDggKzEzNyw4IEBAIEFw
cGxpY2F0aW9uQ2FjaGVHcm91cCogQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmZpbmRPckNyZWF0
ZUNhY2hlR3JvdXAoY29uc3QgS1VSCiAgICAgQ2FjaGVHcm91cE1hcDo6QWRkUmVzdWx0IHJlc3Vs
dCA9IG1fY2FjaGVzSW5NZW1vcnkuYWRkKG1hbmlmZXN0VVJMLCAwKTsKICAgICAKICAgICBpZiAo
IXJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIEFTU0VSVChyZXN1bHQuaXRlcmF0b3ItPnNl
Y29uZCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAg
QVNTRVJUKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOworICAgICAgICByZXR1cm4gcmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZTsKICAgICB9CiAKICAgICAvLyBMb29rIHVwIHRoZSBncm91cCBpbiB0aGUg
ZGF0YWJhc2UKQEAgLTE1MCw3ICsxNTAsNyBAQCBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIEFwcGxp
Y2F0aW9uQ2FjaGVTdG9yYWdlOjpmaW5kT3JDcmVhdGVDYWNoZUdyb3VwKGNvbnN0IEtVUgogICAg
ICAgICBtX2NhY2hlSG9zdFNldC5hZGQodXJsSG9zdEhhc2gobWFuaWZlc3RVUkwpKTsKICAgICB9
CiAgICAgCi0gICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBncm91cDsKKyAgICByZXN1bHQu
aXRlcmF0b3ItPnZhbHVlID0gZ3JvdXA7CiAgICAgCiAgICAgcmV0dXJuIGdyb3VwOwogfQpAQCAt
MTk3LDcgKzE5Nyw3IEBAIEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogQXBwbGljYXRpb25DYWNoZVN0
b3JhZ2U6OmNhY2hlR3JvdXBGb3JVUkwoY29uc3QgS1VSTCYgdXJsCiAgICAgLy8gQ2hlY2sgaWYg
YSBjYWNoZSBhbHJlYWR5IGV4aXN0cyBpbiBtZW1vcnkuCiAgICAgQ2FjaGVHcm91cE1hcDo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gbV9jYWNoZXNJbk1lbW9yeS5lbmQoKTsKICAgICBmb3IgKENhY2hl
R3JvdXBNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9jYWNoZXNJbk1lbW9yeS5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgQXBwbGljYXRpb25DYWNoZUdyb3VwKiBncm91cCA9
IGl0LT5zZWNvbmQ7CisgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogZ3JvdXAgPSBpdC0+
dmFsdWU7CiAKICAgICAgICAgQVNTRVJUKCFncm91cC0+aXNPYnNvbGV0ZSgpKTsKIApAQCAtMjY4
LDcgKzI2OCw3IEBAIEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogQXBwbGljYXRpb25DYWNoZVN0b3Jh
Z2U6OmZhbGxiYWNrQ2FjaGVHcm91cEZvclVSTChjb25zdCBLCiAgICAgLy8gQ2hlY2sgaWYgYW4g
YXBwcm9wcmlhdGUgY2FjaGUgYWxyZWFkeSBleGlzdHMgaW4gbWVtb3J5LgogICAgIENhY2hlR3Jv
dXBNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fY2FjaGVzSW5NZW1vcnkuZW5kKCk7CiAgICAg
Zm9yIChDYWNoZUdyb3VwTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fY2FjaGVzSW5NZW1vcnku
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVHcm91
cCogZ3JvdXAgPSBpdC0+c2Vjb25kOworICAgICAgICBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIGdy
b3VwID0gaXQtPnZhbHVlOwogICAgICAgICAKICAgICAgICAgQVNTRVJUKCFncm91cC0+aXNPYnNv
bGV0ZSgpKTsKIApAQCAtNzEzLDEzICs3MTMsMTMgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3Rv
cmFnZTo6c3RvcmUoQXBwbGljYXRpb25DYWNoZSogY2FjaGUsIFJlc291cmNlU3RvcmFnZUlESm8K
ICAgICB7CiAgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGU6OlJlc291cmNlTWFwOjpjb25zdF9pdGVy
YXRvciBlbmQgPSBjYWNoZS0+ZW5kKCk7CiAgICAgICAgIGZvciAoQXBwbGljYXRpb25DYWNoZTo6
UmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY2FjaGUtPmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewotICAgICAgICAgICAgdW5zaWduZWQgb2xkU3RvcmFnZUlEID0gaXQtPnNlY29u
ZC0+c3RvcmFnZUlEKCk7Ci0gICAgICAgICAgICBpZiAoIXN0b3JlKGl0LT5zZWNvbmQuZ2V0KCks
IGNhY2hlU3RvcmFnZUlEKSkKKyAgICAgICAgICAgIHVuc2lnbmVkIG9sZFN0b3JhZ2VJRCA9IGl0
LT52YWx1ZS0+c3RvcmFnZUlEKCk7CisgICAgICAgICAgICBpZiAoIXN0b3JlKGl0LT52YWx1ZS5n
ZXQoKSwgY2FjaGVTdG9yYWdlSUQpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgICAgICAgICAgLy8gU3RvcmluZyB0aGUgcmVzb3VyY2Ugc3VjY2VlZGVkLiBMb2cgaXRzIG9s
ZCBzdG9yYWdlSUQgaW4gY2FzZQogICAgICAgICAgICAgLy8gaXQgbmVlZHMgdG8gYmUgcmVzdG9y
ZWQgbGF0ZXIuCi0gICAgICAgICAgICBzdG9yYWdlSURKb3VybmFsLT5hZGQoaXQtPnNlY29uZC5n
ZXQoKSwgb2xkU3RvcmFnZUlEKTsKKyAgICAgICAgICAgIHN0b3JhZ2VJREpvdXJuYWwtPmFkZChp
dC0+dmFsdWUuZ2V0KCksIG9sZFN0b3JhZ2VJRCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBA
IC04MzksOSArODM5LDkgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmUoQXBw
bGljYXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJjZSwgdW5zaWduZWQKICAgICAKICAgICBIVFRQ
SGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSByZXNvdXJjZS0+cmVzcG9uc2UoKS5odHRw
SGVhZGVyRmllbGRzKCkuZW5kKCk7CiAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IHJlc291cmNlLT5yZXNwb25zZSgpLmh0dHBIZWFkZXJGaWVsZHMoKS5iZWdpbigp
OyBpdCE9IGVuZDsgKytpdCkgewotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+Zmly
c3QpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+a2V5KTsKICAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQoKFVDaGFyKSc6Jyk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKGl0LT5zZWNvbmQpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+dmFsdWUp
OwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgoVUNoYXIpJ1xuJyk7CiAgICAgfQogICAg
IApAQCAtMTI0MSw3ICsxMjQxLDcgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZW1w
dHkoKQogICAgIC8vIHVudGlsIGEgY2FjaGUgdXBkYXRlIHByb2Nlc3MgaGFzIGJlZW4gaW5pdGlh
dGVkLgogICAgIENhY2hlR3JvdXBNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fY2FjaGVzSW5N
ZW1vcnkuZW5kKCk7CiAgICAgZm9yIChDYWNoZUdyb3VwTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9
IG1fY2FjaGVzSW5NZW1vcnkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+
c2Vjb25kLT5jbGVhclN0b3JhZ2VJRCgpOworICAgICAgICBpdC0+dmFsdWUtPmNsZWFyU3RvcmFn
ZUlEKCk7CiAgICAgCiAgICAgY2hlY2tGb3JEZWxldGVkUmVzb3VyY2VzKCk7CiB9CkBAIC0xMzAz
LDcgKzEzMDMsNyBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZUNvcHlPZkNh
Y2hlKGNvbnN0IFN0cmluZyYgY2FjaGVEaXJlY3RvcnksIEFwcAogICAgIC8vIFRyYXZlcnNlIHRo
ZSBjYWNoZSBhbmQgYWRkIGNvcGllcyBvZiBhbGwgcmVzb3VyY2VzLgogICAgIEFwcGxpY2F0aW9u
Q2FjaGU6OlJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBjYWNoZS0+ZW5kKCk7CiAg
ICAgZm9yIChBcHBsaWNhdGlvbkNhY2hlOjpSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBjYWNoZS0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIEFwcGxpY2F0aW9u
Q2FjaGVSZXNvdXJjZSogcmVzb3VyY2UgPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICBBcHBs
aWNhdGlvbkNhY2hlUmVzb3VyY2UqIHJlc291cmNlID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAg
ICAKICAgICAgICAgUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4gcmVzb3VyY2VDb3B5
ID0gQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpjcmVhdGUocmVzb3VyY2UtPnVybCgpLCByZXNv
dXJjZS0+cmVzcG9uc2UoKSwgcmVzb3VyY2UtPnR5cGUoKSwgcmVzb3VyY2UtPmRhdGEoKSwgcmVz
b3VyY2UtPnBhdGgoKSk7CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2FyY2hpdmUvQXJjaGl2ZUZhY3RvcnkuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2Fy
Y2hpdmUvQXJjaGl2ZUZhY3RvcnkuY3BwCmluZGV4IGY2OTcwYWEuLmNkMzg3NmEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL0FyY2hpdmVGYWN0b3J5LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9BcmNoaXZlRmFjdG9yeS5jcHAKQEAgLTk1
LDcgKzk1LDcgQEAgdm9pZCBBcmNoaXZlRmFjdG9yeTo6cmVnaXN0ZXJLbm93bkFyY2hpdmVNSU1F
VHlwZXMoKQogICAgIEFyY2hpdmVNSU1FVHlwZXNNYXA6Oml0ZXJhdG9yIGVuZCA9IGFyY2hpdmVN
SU1FVHlwZXMoKS5lbmQoKTsKIAogICAgIGZvciAoOyBpICE9IGVuZDsgKytpKQotICAgICAgICBt
aW1lVHlwZXMuYWRkKGktPmZpcnN0KTsKKyAgICAgICAgbWltZVR5cGVzLmFkZChpLT5rZXkpOwog
fQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmF3
UmVzb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291
cmNlLmNwcAppbmRleCBiMGE3MDMzLi4xZDQ5Y2QwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5jcHAKQEAgLTE1Miw4ICsxNTIsOCBAQCBi
b29sIENhY2hlZFJhd1Jlc291cmNlOjpjYW5SZXVzZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIG5l
d1JlcXVlc3QpIGNvbnN0CiAKICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQg
PSBuZXdIZWFkZXJzLmVuZCgpOwogICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0
b3IgaSA9IG5ld0hlYWRlcnMuYmVnaW4oKTsgaSAhPSBlbmQ7ICsraSkgewotICAgICAgICBBdG9t
aWNTdHJpbmcgaGVhZGVyTmFtZSA9IGktPmZpcnN0OwotICAgICAgICBpZiAoaS0+c2Vjb25kICE9
IG9sZEhlYWRlcnMuZ2V0KGhlYWRlck5hbWUpKQorICAgICAgICBBdG9taWNTdHJpbmcgaGVhZGVy
TmFtZSA9IGktPmtleTsKKyAgICAgICAgaWYgKGktPnZhbHVlICE9IG9sZEhlYWRlcnMuZ2V0KGhl
YWRlck5hbWUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICByZXR1cm4g
dHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNv
dXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3Bw
CmluZGV4IDc0ZmE0OTQuLmYxN2E0ZDYgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2Nh
Y2hlL0NhY2hlZFJlc291cmNlLmNwcApAQCAtNjA3LDggKzYwNyw4IEBAIHZvaWQgQ2FjaGVkUmVz
b3VyY2U6OnN3aXRjaENsaWVudHNUb1JldmFsaWRhdGVkUmVzb3VyY2UoKQogICAgIFZlY3RvcjxD
YWNoZWRSZXNvdXJjZUNsaWVudCo+IGNsaWVudHNUb01vdmU7CiAgICAgSGFzaENvdW50ZWRTZXQ8
Q2FjaGVkUmVzb3VyY2VDbGllbnQqPjo6aXRlcmF0b3IgZW5kMiA9IG1fY2xpZW50cy5lbmQoKTsK
ICAgICBmb3IgKEhhc2hDb3VudGVkU2V0PENhY2hlZFJlc291cmNlQ2xpZW50Kj46Oml0ZXJhdG9y
IGl0ID0gbV9jbGllbnRzLmJlZ2luKCk7IGl0ICE9IGVuZDI7ICsraXQpIHsKLSAgICAgICAgQ2Fj
aGVkUmVzb3VyY2VDbGllbnQqIGNsaWVudCA9IGl0LT5maXJzdDsKLSAgICAgICAgdW5zaWduZWQg
Y291bnQgPSBpdC0+c2Vjb25kOworICAgICAgICBDYWNoZWRSZXNvdXJjZUNsaWVudCogY2xpZW50
ID0gaXQtPmtleTsKKyAgICAgICAgdW5zaWduZWQgY291bnQgPSBpdC0+dmFsdWU7CiAgICAgICAg
IHdoaWxlIChjb3VudCkgewogICAgICAgICAgICAgY2xpZW50c1RvTW92ZS5hcHBlbmQoY2xpZW50
KTsKICAgICAgICAgICAgIC0tY291bnQ7CkBAIC02NDIsOSArNjQyLDkgQEAgdm9pZCBDYWNoZWRS
ZXNvdXJjZTo6dXBkYXRlUmVzcG9uc2VBZnRlclJldmFsaWRhdGlvbihjb25zdCBSZXNvdXJjZVJl
c3BvbnNlJiB2YWwKICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBuZXdI
ZWFkZXJzLmVuZCgpOwogICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBuZXdIZWFkZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAvLyBEb24n
dCBhbGxvdyAzMDQgcmVzcG9uc2UgdG8gdXBkYXRlIGNvbnRlbnQgaGVhZGVycywgdGhlc2UgY2Fu
J3QgY2hhbmdlIGJ1dCBzb21lIHNlcnZlcnMgc2VuZCB3cm9uZyB2YWx1ZXMuCi0gICAgICAgIGlm
IChpdC0+Zmlyc3Quc3RhcnRzV2l0aChjb250ZW50SGVhZGVyUHJlZml4LCBmYWxzZSkpCisgICAg
ICAgIGlmIChpdC0+a2V5LnN0YXJ0c1dpdGgoY29udGVudEhlYWRlclByZWZpeCwgZmFsc2UpKQog
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIG1fcmVzcG9uc2Uuc2V0SFRUUEhlYWRlckZp
ZWxkKGl0LT5maXJzdCwgaXQtPnNlY29uZCk7CisgICAgICAgIG1fcmVzcG9uc2Uuc2V0SFRUUEhl
YWRlckZpZWxkKGl0LT5rZXksIGl0LT52YWx1ZSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlci5o
CmluZGV4IDhiMzc4MGIuLjc5MzNiMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9jYWNoZS9DYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlci5oCkBAIC00Miw3ICs0Miw3
IEBAIHB1YmxpYzoKICAgICAgICAgSXRlcmF0b3IgZW5kID0gc2V0LmVuZCgpOwogICAgICAgICBz
aXplX3QgY2xpZW50SW5kZXggPSAwOwogICAgICAgICBmb3IgKEl0ZXJhdG9yIGN1cnJlbnQgPSBz
ZXQuYmVnaW4oKTsgY3VycmVudCAhPSBlbmQ7ICsrY3VycmVudCkKLSAgICAgICAgICAgIG1fY2xp
ZW50VmVjdG9yW2NsaWVudEluZGV4KytdID0gY3VycmVudC0+Zmlyc3Q7CisgICAgICAgICAgICBt
X2NsaWVudFZlY3RvcltjbGllbnRJbmRleCsrXSA9IGN1cnJlbnQtPmtleTsKICAgICB9CiAKICAg
ICBUKiBuZXh0KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZWRSZXNvdXJjZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVk
UmVzb3VyY2VMb2FkZXIuY3BwCmluZGV4IGUxOTg3YzMuLmRkMjdiYzcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcApAQCAt
MTI2LDcgKzEyNiw3IEBAIENhY2hlZFJlc291cmNlTG9hZGVyOjp+Q2FjaGVkUmVzb3VyY2VMb2Fk
ZXIoKQogICAgIGNsZWFyUHJlbG9hZHMoKTsKICAgICBEb2N1bWVudFJlc291cmNlTWFwOjppdGVy
YXRvciBlbmQgPSBtX2RvY3VtZW50UmVzb3VyY2VzLmVuZCgpOwogICAgIGZvciAoRG9jdW1lbnRS
ZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX2RvY3VtZW50UmVzb3VyY2VzLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+c2V0T3duaW5nQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXIoMCk7CisgICAgICAgIGl0LT52YWx1ZS0+c2V0T3duaW5nQ2FjaGVkUmVzb3VyY2VM
b2FkZXIoMCk7CiAKICAgICAvLyBNYWtlIHN1cmUgbm8gcmVxdWVzdHMgc3RpbGwgcG9pbnQgdG8g
dGhpcyBDYWNoZWRSZXNvdXJjZUxvYWRlcgogICAgIEFTU0VSVChtX3JlcXVlc3RDb3VudCA9PSAw
KTsKQEAgLTQxOSw3ICs0MTksNyBAQCBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSZXNvdXJj
ZT4gQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RSZXNvdXJjZShDYWNoZQogICAgIGlmICht
ZW1vcnlDYWNoZSgpLT5kaXNhYmxlZCgpKSB7CiAgICAgICAgIERvY3VtZW50UmVzb3VyY2VNYXA6
Oml0ZXJhdG9yIGl0ID0gbV9kb2N1bWVudFJlc291cmNlcy5maW5kKHVybC5zdHJpbmcoKSk7CiAg
ICAgICAgIGlmIChpdCAhPSBtX2RvY3VtZW50UmVzb3VyY2VzLmVuZCgpKSB7Ci0gICAgICAgICAg
ICBpdC0+c2Vjb25kLT5zZXRPd25pbmdDYWNoZWRSZXNvdXJjZUxvYWRlcigwKTsKKyAgICAgICAg
ICAgIGl0LT52YWx1ZS0+c2V0T3duaW5nQ2FjaGVkUmVzb3VyY2VMb2FkZXIoMCk7CiAgICAgICAg
ICAgICBtX2RvY3VtZW50UmVzb3VyY2VzLnJlbW92ZShpdCk7CiAgICAgICAgIH0KICAgICB9CkBA
IC02MzEsNyArNjMxLDcgQEAgdm9pZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6c2V0QXV0b0xvYWRJ
bWFnZXMoYm9vbCBlbmFibGUpCiAKICAgICBEb2N1bWVudFJlc291cmNlTWFwOjppdGVyYXRvciBl
bmQgPSBtX2RvY3VtZW50UmVzb3VyY2VzLmVuZCgpOwogICAgIGZvciAoRG9jdW1lbnRSZXNvdXJj
ZU1hcDo6aXRlcmF0b3IgaXQgPSBtX2RvY3VtZW50UmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewotICAgICAgICBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UgPSBpdC0+c2Vjb25k
LmdldCgpOworICAgICAgICBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UgPSBpdC0+dmFsdWUuZ2V0
KCk7CiAgICAgICAgIGlmIChyZXNvdXJjZS0+dHlwZSgpID09IENhY2hlZFJlc291cmNlOjpJbWFn
ZVJlc291cmNlKSB7CiAgICAgICAgICAgICBDYWNoZWRJbWFnZSogaW1hZ2UgPSBjb25zdF9jYXN0
PENhY2hlZEltYWdlKj4oc3RhdGljX2Nhc3Q8Y29uc3QgQ2FjaGVkSW1hZ2UqPihyZXNvdXJjZSkp
OwogCkBAIC02NTEsNyArNjUxLDcgQEAgdm9pZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVtb3Zl
Q2FjaGVkUmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlKSBjb25zdAogI2lmbmRlZiBO
REVCVUcKICAgICBEb2N1bWVudFJlc291cmNlTWFwOjppdGVyYXRvciBpdCA9IG1fZG9jdW1lbnRS
ZXNvdXJjZXMuZmluZChyZXNvdXJjZS0+dXJsKCkpOwogICAgIGlmIChpdCAhPSBtX2RvY3VtZW50
UmVzb3VyY2VzLmVuZCgpKQotICAgICAgICBBU1NFUlQoaXQtPnNlY29uZC5nZXQoKSA9PSByZXNv
dXJjZSk7CisgICAgICAgIEFTU0VSVChpdC0+dmFsdWUuZ2V0KCkgPT0gcmVzb3VyY2UpOwogI2Vu
ZGlmCiAgICAgbV9kb2N1bWVudFJlc291cmNlcy5yZW1vdmUocmVzb3VyY2UtPnVybCgpKTsKIH0K
QEAgLTY4MSw5ICs2ODEsOSBAQCB2b2lkIENhY2hlZFJlc291cmNlTG9hZGVyOjpnYXJiYWdlQ29s
bGVjdERvY3VtZW50UmVzb3VyY2VzVGltZXJGaXJlZChUaW1lcjxDYWNoZQogICAgIFN0cmluZ1Zl
Y3RvciByZXNvdXJjZXNUb0RlbGV0ZTsKIAogICAgIGZvciAoRG9jdW1lbnRSZXNvdXJjZU1hcDo6
aXRlcmF0b3IgaXQgPSBtX2RvY3VtZW50UmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IG1fZG9jdW1l
bnRSZXNvdXJjZXMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQtPmhhc09u
ZUhhbmRsZSgpKSB7Ci0gICAgICAgICAgICByZXNvdXJjZXNUb0RlbGV0ZS5hcHBlbmQoaXQtPmZp
cnN0KTsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNldE93bmluZ0NhY2hlZFJlc291cmNlTG9h
ZGVyKDApOworICAgICAgICBpZiAoaXQtPnZhbHVlLT5oYXNPbmVIYW5kbGUoKSkgeworICAgICAg
ICAgICAgcmVzb3VyY2VzVG9EZWxldGUuYXBwZW5kKGl0LT5rZXkpOworICAgICAgICAgICAgaXQt
PnZhbHVlLT5zZXRPd25pbmdDYWNoZWRSZXNvdXJjZUxvYWRlcigwKTsKICAgICAgICAgfQogICAg
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5jcHAKaW5kZXgg
Mjk5ZDEwYS4uZmVjYWIzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hl
L01lbW9yeUNhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5
Q2FjaGUuY3BwCkBAIC01NDAsNyArNTQwLDcgQEAgdm9pZCBNZW1vcnlDYWNoZTo6cmVtb3ZlUmVz
b3VyY2VzV2l0aE9yaWdpbihTZWN1cml0eU9yaWdpbiogb3JpZ2luKQogCiAgICAgQ2FjaGVkUmVz
b3VyY2VNYXA6Oml0ZXJhdG9yIGUgPSBtX3Jlc291cmNlcy5lbmQoKTsKICAgICBmb3IgKENhY2hl
ZFJlc291cmNlTWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGU7
ICsraXQpIHsKLSAgICAgICAgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlID0gaXQtPnNlY29uZDsK
KyAgICAgICAgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlID0gaXQtPnZhbHVlOwogICAgICAgICBS
ZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHJlc291cmNlT3JpZ2luID0gU2VjdXJpdHlPcmlnaW46OmNy
ZWF0ZUZyb21TdHJpbmcocmVzb3VyY2UtPnVybCgpKTsKICAgICAgICAgaWYgKCFyZXNvdXJjZU9y
aWdpbikKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtNTU2LDcgKzU1Niw3IEBAIHZvaWQgTWVt
b3J5Q2FjaGU6OmdldE9yaWdpbnNXaXRoQ2FjaGUoU2VjdXJpdHlPcmlnaW5TZXQmIG9yaWdpbnMp
CiB7CiAgICAgQ2FjaGVkUmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGUgPSBtX3Jlc291cmNlcy5lbmQo
KTsKICAgICBmb3IgKENhY2hlZFJlc291cmNlTWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2Vz
LmJlZ2luKCk7IGl0ICE9IGU7ICsraXQpCi0gICAgICAgIG9yaWdpbnMuYWRkKFNlY3VyaXR5T3Jp
Z2luOjpjcmVhdGVGcm9tU3RyaW5nKGl0LT5zZWNvbmQtPnVybCgpKSk7CisgICAgICAgIG9yaWdp
bnMuYWRkKFNlY3VyaXR5T3JpZ2luOjpjcmVhdGVGcm9tU3RyaW5nKGl0LT52YWx1ZS0+dXJsKCkp
KTsKIH0KIAogdm9pZCBNZW1vcnlDYWNoZTo6cmVtb3ZlRnJvbUxpdmVEZWNvZGVkUmVzb3VyY2Vz
TGlzdChDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UpCkBAIC02ODksNyArNjg5LDcgQEAgTWVtb3J5
Q2FjaGU6OlN0YXRpc3RpY3MgTWVtb3J5Q2FjaGU6OmdldFN0YXRpc3RpY3MoKQogICAgIFN0YXRp
c3RpY3Mgc3RhdHM7CiAgICAgQ2FjaGVkUmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGUgPSBtX3Jlc291
cmNlcy5lbmQoKTsKICAgICBmb3IgKENhY2hlZFJlc291cmNlTWFwOjppdGVyYXRvciBpID0gbV9y
ZXNvdXJjZXMuYmVnaW4oKTsgaSAhPSBlOyArK2kpIHsKLSAgICAgICAgQ2FjaGVkUmVzb3VyY2Uq
IHJlc291cmNlID0gaS0+c2Vjb25kOworICAgICAgICBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2Ug
PSBpLT52YWx1ZTsKICAgICAgICAgc3dpdGNoIChyZXNvdXJjZS0+dHlwZSgpKSB7CiAgICAgICAg
IGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3VyY2U6CiAgICAgICAgICAgICBzdGF0cy5p
bWFnZXMuYWRkUmVzb3VyY2UocmVzb3VyY2UpOwpAQCAtNzI1LDcgKzcyNSw3IEBAIHZvaWQgTWVt
b3J5Q2FjaGU6OnNldERpc2FibGVkKGJvb2wgZGlzYWJsZWQpCiAgICAgICAgIENhY2hlZFJlc291
cmNlTWFwOjppdGVyYXRvciBpID0gbV9yZXNvdXJjZXMuYmVnaW4oKTsKICAgICAgICAgaWYgKGkg
PT0gbV9yZXNvdXJjZXMuZW5kKCkpCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgZXZpY3Qo
aS0+c2Vjb25kKTsKKyAgICAgICAgZXZpY3QoaS0+dmFsdWUpOwogICAgIH0KIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFzZS5jcHAKaW5kZXggN2MxMzU4Ni4uZTBk
NzhlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuY3BwCkBA
IC0xODYsNyArMTg2LDcgQEAgdm9pZCBJY29uRGF0YWJhc2U6OnJlbW92ZUFsbEljb25zKCkKICAg
ICAgICAgSGFzaE1hcDxTdHJpbmcsIFBhZ2VVUkxSZWNvcmQqPjo6aXRlcmF0b3IgaXRlciA9IG1f
cGFnZVVSTFRvUmVjb3JkTWFwLmJlZ2luKCk7CiAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBQYWdl
VVJMUmVjb3JkKj46Oml0ZXJhdG9yIGVuZCA9IG1fcGFnZVVSTFRvUmVjb3JkTWFwLmVuZCgpOwog
ICAgICAgICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlcikKLSAgICAgICAgICAgICgqaXRlciku
c2Vjb25kLT5zZXRJY29uUmVjb3JkKDApOworICAgICAgICAgICAgKCppdGVyKS52YWx1ZS0+c2V0
SWNvblJlY29yZCgwKTsKICAgICAgICAgICAgIAogICAgICAgICAvLyBDbGVhciB0aGUgaWNvblVS
TCAtPiBJY29uUmVjb3JkIG1hcAogICAgICAgICBtX2ljb25VUkxUb1JlY29yZE1hcC5jbGVhcigp
OwpAQCAtNzc5LDcgKzc3OSw3IEBAIHNpemVfdCBJY29uRGF0YWJhc2U6Omljb25SZWNvcmRDb3Vu
dFdpdGhEYXRhKCkKICAgICBIYXNoTWFwPFN0cmluZywgSWNvblJlY29yZCo+OjppdGVyYXRvciBl
bmQgPSBtX2ljb25VUkxUb1JlY29yZE1hcC5lbmQoKTsKICAgICAKICAgICBmb3IgKDsgaSAhPSBl
bmQ7ICsraSkKLSAgICAgICAgcmVzdWx0ICs9ICgoKmkpLnNlY29uZC0+aW1hZ2VEYXRhU3RhdHVz
KCkgPT0gSW1hZ2VEYXRhU3RhdHVzUHJlc2VudCk7CisgICAgICAgIHJlc3VsdCArPSAoKCppKS52
YWx1ZS0+aW1hZ2VEYXRhU3RhdHVzKCkgPT0gSW1hZ2VEYXRhU3RhdHVzUHJlc2VudCk7CiAgICAg
ICAgICAgICAKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMTU0MCwxMyArMTU0MCwxMyBAQCB2
b2lkIEljb25EYXRhYmFzZTo6cGVyZm9ybVBlbmRpbmdSZXRhaW5BbmRSZWxlYXNlT3BlcmF0aW9u
cygpCiAgICAgfQogCiAgICAgZm9yIChIYXNoQ291bnRlZFNldDxTdHJpbmc+Ojpjb25zdF9pdGVy
YXRvciBpdCA9IHRvUmV0YWluLmJlZ2luKCksIGVuZCA9IHRvUmV0YWluLmVuZCgpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKLSAgICAgICAgQVNTRVJUKCFpdC0+Zmlyc3QuaW1wbCgpIHx8IGl0LT5maXJz
dC5pbXBsKCktPmhhc09uZVJlZigpKTsKLSAgICAgICAgcGVyZm9ybVJldGFpbkljb25Gb3JQYWdl
VVJMKGl0LT5maXJzdCwgaXQtPnNlY29uZCk7CisgICAgICAgIEFTU0VSVCghaXQtPmtleS5pbXBs
KCkgfHwgaXQtPmtleS5pbXBsKCktPmhhc09uZVJlZigpKTsKKyAgICAgICAgcGVyZm9ybVJldGFp
bkljb25Gb3JQYWdlVVJMKGl0LT5rZXksIGl0LT52YWx1ZSk7CiAgICAgfQogCiAgICAgZm9yIChI
YXNoQ291bnRlZFNldDxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHRvUmVsZWFzZS5iZWdp
bigpLCBlbmQgPSB0b1JlbGVhc2UuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBB
U1NFUlQoIWl0LT5maXJzdC5pbXBsKCkgfHwgaXQtPmZpcnN0LmltcGwoKS0+aGFzT25lUmVmKCkp
OwotICAgICAgICBwZXJmb3JtUmVsZWFzZUljb25Gb3JQYWdlVVJMKGl0LT5maXJzdCwgaXQtPnNl
Y29uZCk7CisgICAgICAgIEFTU0VSVCghaXQtPmtleS5pbXBsKCkgfHwgaXQtPmtleS5pbXBsKCkt
Pmhhc09uZVJlZigpKTsKKyAgICAgICAgcGVyZm9ybVJlbGVhc2VJY29uRm9yUGFnZVVSTChpdC0+
a2V5LCBpdC0+dmFsdWUpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9ET01XaW5kb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCmlu
ZGV4IDJlMTk4MzcuLmFmMTkyODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9N
V2luZG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKQEAgLTI0
Nyw3ICsyNDcsNyBAQCBib29sIERPTVdpbmRvdzo6ZGlzcGF0Y2hBbGxQZW5kaW5nQmVmb3JlVW5s
b2FkRXZlbnRzKCkKICAgICBWZWN0b3I8UmVmUHRyPERPTVdpbmRvdz4gPiB3aW5kb3dzOwogICAg
IERPTVdpbmRvd1NldDo6aXRlcmF0b3IgZW5kID0gc2V0LmVuZCgpOwogICAgIGZvciAoRE9NV2lu
ZG93U2V0OjppdGVyYXRvciBpdCA9IHNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAg
ICAgIHdpbmRvd3MuYXBwZW5kKGl0LT5maXJzdCk7CisgICAgICAgIHdpbmRvd3MuYXBwZW5kKGl0
LT5rZXkpOwogCiAgICAgc2l6ZV90IHNpemUgPSB3aW5kb3dzLnNpemUoKTsKICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewpAQCAtMjg5LDcgKzI4OSw3IEBAIHZvaWQgRE9N
V2luZG93OjpkaXNwYXRjaEFsbFBlbmRpbmdVbmxvYWRFdmVudHMoKQogICAgIFZlY3RvcjxSZWZQ
dHI8RE9NV2luZG93PiA+IHdpbmRvd3M7CiAgICAgRE9NV2luZG93U2V0OjppdGVyYXRvciBlbmQg
PSBzZXQuZW5kKCk7CiAgICAgZm9yIChET01XaW5kb3dTZXQ6Oml0ZXJhdG9yIGl0ID0gc2V0LmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgd2luZG93cy5hcHBlbmQoaXQtPmZpcnN0
KTsKKyAgICAgICAgd2luZG93cy5hcHBlbmQoaXQtPmtleSk7CiAKICAgICBzaXplX3Qgc2l6ZSA9
IHdpbmRvd3Muc2l6ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKaW5kZXggOGVlYTNmYS4uN2JhOGYzZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApAQCAtMzU4NSw3ICszNTg1LDcgQEAg
Ym9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZVRvdWNoRXZlbnQoY29uc3QgUGxhdGZvcm1Ub3VjaEV2
ZW50JiBldmVudCkKICAgICAgICAgLy8gcmVsZWFzZWQgb3IgY2FuY2VsbGVkIGl0IHdpbGwgb25s
eSBhcHBlYXIgaW4gdGhlIGNoYW5nZWRUb3VjaGVzIGxpc3QuCiAgICAgICAgIGlmIChwb2ludFN0
YXRlICE9IFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hSZWxlYXNlZCAmJiBwb2ludFN0YXRlICE9
IFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hDYW5jZWxsZWQpIHsKICAgICAgICAgICAgIHRvdWNo
ZXMtPmFwcGVuZCh0b3VjaCk7Ci0gICAgICAgICAgICB0YXJnZXRUb3VjaGVzSXRlcmF0b3ItPnNl
Y29uZC0+YXBwZW5kKHRvdWNoKTsKKyAgICAgICAgICAgIHRhcmdldFRvdWNoZXNJdGVyYXRvci0+
dmFsdWUtPmFwcGVuZCh0b3VjaCk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBOb3cgYnVpbGQg
dXAgdGhlIGNvcnJlY3QgbGlzdCBmb3IgY2hhbmdlZFRvdWNoZXMuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3Bw
CmluZGV4IDU2OTIwOGYuLjYwOWVhYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCkBAIC01NzcsNyAr
NTc3LDcgQEAgdm9pZCBGcmFtZTo6aW5qZWN0VXNlclNjcmlwdHMoVXNlclNjcmlwdEluamVjdGlv
blRpbWUgaW5qZWN0aW9uVGltZSkKICAgICAgICAgcmV0dXJuOwogICAgIFVzZXJTY3JpcHRNYXA6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHVzZXJTY3JpcHRzLT5lbmQoKTsKICAgICBmb3IgKFVzZXJT
Y3JpcHRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdXNlclNjcmlwdHMtPmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkKLSAgICAgICAgaW5qZWN0VXNlclNjcmlwdHNGb3JXb3JsZChpdC0+Zmlyc3Qu
Z2V0KCksICppdC0+c2Vjb25kLCBpbmplY3Rpb25UaW1lKTsKKyAgICAgICAgaW5qZWN0VXNlclNj
cmlwdHNGb3JXb3JsZChpdC0+a2V5LmdldCgpLCAqaXQtPnZhbHVlLCBpbmplY3Rpb25UaW1lKTsK
IH0KIAogdm9pZCBGcmFtZTo6aW5qZWN0VXNlclNjcmlwdHNGb3JXb3JsZChET01XcmFwcGVyV29y
bGQqIHdvcmxkLCBjb25zdCBVc2VyU2NyaXB0VmVjdG9yJiB1c2VyU2NyaXB0cywgVXNlclNjcmlw
dEluamVjdGlvblRpbWUgaW5qZWN0aW9uVGltZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvUGFnZUdyb3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmNwcApp
bmRleCA0NWQyNWY1Li4wMzI3YmIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Bh
Z2VHcm91cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlR3JvdXAuY3BwCkBAIC05
MywxMiArOTMsMTIgQEAgUGFnZUdyb3VwKiBQYWdlR3JvdXA6OnBhZ2VHcm91cChjb25zdCBTdHJp
bmcmIGdyb3VwTmFtZSkKICAgICBQYWdlR3JvdXBNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBwYWdl
R3JvdXBzLT5hZGQoZ3JvdXBOYW1lLCAwKTsKIAogICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkg
ewotICAgICAgICBBU1NFUlQoIXJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKLSAgICAgICAgcmVz
dWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBuZXcgUGFnZUdyb3VwKGdyb3VwTmFtZSk7CisgICAgICAg
IEFTU0VSVCghcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRv
ci0+dmFsdWUgPSBuZXcgUGFnZUdyb3VwKGdyb3VwTmFtZSk7CiAgICAgfQogCi0gICAgQVNTRVJU
KHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKLSAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT5z
ZWNvbmQ7CisgICAgQVNTRVJUKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOworICAgIHJldHVybiBy
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogfQogCiB2b2lkIFBhZ2VHcm91cDo6Y2xvc2VMb2NhbFN0
b3JhZ2UoKQpAQCAtMTA5LDggKzEwOSw4IEBAIHZvaWQgUGFnZUdyb3VwOjpjbG9zZUxvY2FsU3Rv
cmFnZSgpCiAgICAgUGFnZUdyb3VwTWFwOjppdGVyYXRvciBlbmQgPSBwYWdlR3JvdXBzLT5lbmQo
KTsKIAogICAgIGZvciAoUGFnZUdyb3VwTWFwOjppdGVyYXRvciBpdCA9IHBhZ2VHcm91cHMtPmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnNlY29uZC0+aGFzTG9j
YWxTdG9yYWdlKCkpCi0gICAgICAgICAgICBpdC0+c2Vjb25kLT5sb2NhbFN0b3JhZ2UoKS0+Y2xv
c2UoKTsKKyAgICAgICAgaWYgKGl0LT52YWx1ZS0+aGFzTG9jYWxTdG9yYWdlKCkpCisgICAgICAg
ICAgICBpdC0+dmFsdWUtPmxvY2FsU3RvcmFnZSgpLT5jbG9zZSgpOwogICAgIH0KIH0KIApAQCAt
MTIxLDggKzEyMSw4IEBAIHZvaWQgUGFnZUdyb3VwOjpjbGVhckxvY2FsU3RvcmFnZUZvckFsbE9y
aWdpbnMoKQogCiAgICAgUGFnZUdyb3VwTWFwOjppdGVyYXRvciBlbmQgPSBwYWdlR3JvdXBzLT5l
bmQoKTsKICAgICBmb3IgKFBhZ2VHcm91cE1hcDo6aXRlcmF0b3IgaXQgPSBwYWdlR3JvdXBzLT5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQtPmhhc0xv
Y2FsU3RvcmFnZSgpKQotICAgICAgICAgICAgaXQtPnNlY29uZC0+bG9jYWxTdG9yYWdlKCktPmNs
ZWFyQWxsT3JpZ2luc0ZvckRlbGV0aW9uKCk7CisgICAgICAgIGlmIChpdC0+dmFsdWUtPmhhc0xv
Y2FsU3RvcmFnZSgpKQorICAgICAgICAgICAgaXQtPnZhbHVlLT5sb2NhbFN0b3JhZ2UoKS0+Y2xl
YXJBbGxPcmlnaW5zRm9yRGVsZXRpb24oKTsKICAgICB9CiB9CiAKQEAgLTEzMyw4ICsxMzMsOCBA
QCB2b2lkIFBhZ2VHcm91cDo6Y2xlYXJMb2NhbFN0b3JhZ2VGb3JPcmlnaW4oU2VjdXJpdHlPcmln
aW4qIG9yaWdpbikKIAogICAgIFBhZ2VHcm91cE1hcDo6aXRlcmF0b3IgZW5kID0gcGFnZUdyb3Vw
cy0+ZW5kKCk7CiAgICAgZm9yIChQYWdlR3JvdXBNYXA6Oml0ZXJhdG9yIGl0ID0gcGFnZUdyb3Vw
cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kLT5o
YXNMb2NhbFN0b3JhZ2UoKSkKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPmxvY2FsU3RvcmFnZSgp
LT5jbGVhck9yaWdpbkZvckRlbGV0aW9uKG9yaWdpbik7CisgICAgICAgIGlmIChpdC0+dmFsdWUt
Pmhhc0xvY2FsU3RvcmFnZSgpKQorICAgICAgICAgICAgaXQtPnZhbHVlLT5sb2NhbFN0b3JhZ2Uo
KS0+Y2xlYXJPcmlnaW5Gb3JEZWxldGlvbihvcmlnaW4pOwogICAgIH0gICAgCiB9CiAgICAgCkBA
IC0xNDUsOCArMTQ1LDggQEAgdm9pZCBQYWdlR3JvdXA6OnN5bmNMb2NhbFN0b3JhZ2UoKQogCiAg
ICAgUGFnZUdyb3VwTWFwOjppdGVyYXRvciBlbmQgPSBwYWdlR3JvdXBzLT5lbmQoKTsKICAgICBm
b3IgKFBhZ2VHcm91cE1hcDo6aXRlcmF0b3IgaXQgPSBwYWdlR3JvdXBzLT5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQtPmhhc0xvY2FsU3RvcmFnZSgp
KQotICAgICAgICAgICAgaXQtPnNlY29uZC0+bG9jYWxTdG9yYWdlKCktPnN5bmMoKTsKKyAgICAg
ICAgaWYgKGl0LT52YWx1ZS0+aGFzTG9jYWxTdG9yYWdlKCkpCisgICAgICAgICAgICBpdC0+dmFs
dWUtPmxvY2FsU3RvcmFnZSgpLT5zeW5jKCk7CiAgICAgfQogfQogCkBAIC0yNjksNyArMjY5LDcg
QEAgdm9pZCBQYWdlR3JvdXA6OmFkZFVzZXJTY3JpcHRUb1dvcmxkKERPTVdyYXBwZXJXb3JsZCog
d29ybGQsIGNvbnN0IFN0cmluZyYgc291cmMKICAgICBPd25QdHI8VXNlclNjcmlwdD4gdXNlclNj
cmlwdCA9IGFkb3B0UHRyKG5ldyBVc2VyU2NyaXB0KHNvdXJjZSwgdXJsLCB3aGl0ZWxpc3QsIGJs
YWNrbGlzdCwgaW5qZWN0aW9uVGltZSwgaW5qZWN0ZWRGcmFtZXMpKTsKICAgICBpZiAoIW1fdXNl
clNjcmlwdHMpCiAgICAgICAgIG1fdXNlclNjcmlwdHMgPSBhZG9wdFB0cihuZXcgVXNlclNjcmlw
dE1hcCk7Ci0gICAgT3duUHRyPFVzZXJTY3JpcHRWZWN0b3I+JiBzY3JpcHRzSW5Xb3JsZCA9IG1f
dXNlclNjcmlwdHMtPmFkZCh3b3JsZCwgbnVsbHB0cikuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBP
d25QdHI8VXNlclNjcmlwdFZlY3Rvcj4mIHNjcmlwdHNJbldvcmxkID0gbV91c2VyU2NyaXB0cy0+
YWRkKHdvcmxkLCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCFzY3JpcHRzSW5X
b3JsZCkKICAgICAgICAgc2NyaXB0c0luV29ybGQgPSBhZG9wdFB0cihuZXcgVXNlclNjcmlwdFZl
Y3Rvcik7CiAgICAgc2NyaXB0c0luV29ybGQtPmFwcGVuZCh1c2VyU2NyaXB0LnJlbGVhc2UoKSk7
CkBAIC0yODYsNyArMjg2LDcgQEAgdm9pZCBQYWdlR3JvdXA6OmFkZFVzZXJTdHlsZVNoZWV0VG9X
b3JsZChET01XcmFwcGVyV29ybGQqIHdvcmxkLCBjb25zdCBTdHJpbmcmIHMKICAgICBPd25QdHI8
VXNlclN0eWxlU2hlZXQ+IHVzZXJTdHlsZVNoZWV0ID0gYWRvcHRQdHIobmV3IFVzZXJTdHlsZVNo
ZWV0KHNvdXJjZSwgdXJsLCB3aGl0ZWxpc3QsIGJsYWNrbGlzdCwgaW5qZWN0ZWRGcmFtZXMsIGxl
dmVsKSk7CiAgICAgaWYgKCFtX3VzZXJTdHlsZVNoZWV0cykKICAgICAgICAgbV91c2VyU3R5bGVT
aGVldHMgPSBhZG9wdFB0cihuZXcgVXNlclN0eWxlU2hlZXRNYXApOwotICAgIE93blB0cjxVc2Vy
U3R5bGVTaGVldFZlY3Rvcj4mIHN0eWxlU2hlZXRzSW5Xb3JsZCA9IG1fdXNlclN0eWxlU2hlZXRz
LT5hZGQod29ybGQsIG51bGxwdHIpLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgT3duUHRyPFVzZXJT
dHlsZVNoZWV0VmVjdG9yPiYgc3R5bGVTaGVldHNJbldvcmxkID0gbV91c2VyU3R5bGVTaGVldHMt
PmFkZCh3b3JsZCwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghc3R5bGVTaGVl
dHNJbldvcmxkKQogICAgICAgICBzdHlsZVNoZWV0c0luV29ybGQgPSBhZG9wdFB0cihuZXcgVXNl
clN0eWxlU2hlZXRWZWN0b3IpOwogICAgIHN0eWxlU2hlZXRzSW5Xb3JsZC0+YXBwZW5kKHVzZXJT
dHlsZVNoZWV0LnJlbGVhc2UoKSk7CkBAIC0zMDYsNyArMzA2LDcgQEAgdm9pZCBQYWdlR3JvdXA6
OnJlbW92ZVVzZXJTY3JpcHRGcm9tV29ybGQoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCwgY29uc3Qg
S1VSTCYgdXIKICAgICBpZiAoaXQgPT0gbV91c2VyU2NyaXB0cy0+ZW5kKCkpCiAgICAgICAgIHJl
dHVybjsKICAgICAKLSAgICBVc2VyU2NyaXB0VmVjdG9yKiBzY3JpcHRzID0gaXQtPnNlY29uZC5n
ZXQoKTsKKyAgICBVc2VyU2NyaXB0VmVjdG9yKiBzY3JpcHRzID0gaXQtPnZhbHVlLmdldCgpOwog
ICAgIGZvciAoaW50IGkgPSBzY3JpcHRzLT5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgewogICAg
ICAgICBpZiAoc2NyaXB0cy0+YXQoaSktPnVybCgpID09IHVybCkKICAgICAgICAgICAgIHNjcmlw
dHMtPnJlbW92ZShpKTsKQEAgLTMyOCw3ICszMjgsNyBAQCB2b2lkIFBhZ2VHcm91cDo6cmVtb3Zl
VXNlclN0eWxlU2hlZXRGcm9tV29ybGQoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCwgY29uc3QgS1VS
TAogICAgIGlmIChpdCA9PSBtX3VzZXJTdHlsZVNoZWV0cy0+ZW5kKCkpCiAgICAgICAgIHJldHVy
bjsKICAgICAKLSAgICBVc2VyU3R5bGVTaGVldFZlY3Rvciogc3R5bGVzaGVldHMgPSBpdC0+c2Vj
b25kLmdldCgpOworICAgIFVzZXJTdHlsZVNoZWV0VmVjdG9yKiBzdHlsZXNoZWV0cyA9IGl0LT52
YWx1ZS5nZXQoKTsKICAgICBmb3IgKGludCBpID0gc3R5bGVzaGVldHMtPnNpemUoKSAtIDE7IGkg
Pj0gMDsgLS1pKSB7CiAgICAgICAgIGlmIChzdHlsZXNoZWV0cy0+YXQoaSktPnVybCgpID09IHVy
bCkgewogICAgICAgICAgICAgc3R5bGVzaGVldHMtPnJlbW92ZShpKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9QYWdlU2VyaWFsaXplci5jcHAKaW5kZXggYzkxMWQ1NC4uYTE2MTQ5MiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAKQEAgLTMzOSw3ICszMzksNyBAQCBLVVJMIFBhZ2VT
ZXJpYWxpemVyOjp1cmxGb3JCbGFua0ZyYW1lKEZyYW1lKiBmcmFtZSkKIHsKICAgICBIYXNoTWFw
PEZyYW1lKiwgS1VSTD46Oml0ZXJhdG9yIGl0ZXIgPSBtX2JsYW5rRnJhbWVVUkxzLmZpbmQoZnJh
bWUpOwogICAgIGlmIChpdGVyICE9IG1fYmxhbmtGcmFtZVVSTHMuZW5kKCkpCi0gICAgICAgIHJl
dHVybiBpdGVyLT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBpdGVyLT52YWx1ZTsKICAgICBTdHJp
bmcgdXJsID0gInd5Y2l3eWc6Ly9mcmFtZS8iICsgU3RyaW5nOjpudW1iZXIobV9ibGFua0ZyYW1l
Q291bnRlcisrKTsKICAgICBLVVJMIGZha2VVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmwpOwogICAg
IG1fYmxhbmtGcmFtZVVSTHMuYWRkKGZyYW1lLCBmYWtlVVJMKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlQb2xpY3kuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9T
ZWN1cml0eVBvbGljeS5jcHAKaW5kZXggYzJhNWFiMS4uNWIzNmY0ZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eVBvbGljeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9TZWN1cml0eVBvbGljeS5jcHAKQEAgLTEzMyw5ICsxMzMsOSBAQCB2b2lkIFNlY3VyaXR5
UG9saWN5OjphZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShjb25zdCBTZWN1cml0eU9yaWdp
biYgc291cmNlTwogICAgIFN0cmluZyBzb3VyY2VTdHJpbmcgPSBzb3VyY2VPcmlnaW4udG9TdHJp
bmcoKTsKICAgICBPcmlnaW5BY2Nlc3NNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBvcmlnaW5BY2Nl
c3NNYXAoKS5hZGQoc291cmNlU3RyaW5nLCBudWxscHRyKTsKICAgICBpZiAocmVzdWx0LmlzTmV3
RW50cnkpCi0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gYWRvcHRQdHIobmV3IE9y
aWdpbkFjY2Vzc1doaXRlTGlzdCk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBh
ZG9wdFB0cihuZXcgT3JpZ2luQWNjZXNzV2hpdGVMaXN0KTsKIAotICAgIE9yaWdpbkFjY2Vzc1do
aXRlTGlzdCogbGlzdCA9IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLmdldCgpOworICAgIE9yaWdp
bkFjY2Vzc1doaXRlTGlzdCogbGlzdCA9IHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7CiAg
ICAgbGlzdC0+YXBwZW5kKE9yaWdpbkFjY2Vzc0VudHJ5KGRlc3RpbmF0aW9uUHJvdG9jb2wsIGRl
c3RpbmF0aW9uRG9tYWluLCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucyA/IE9yaWdpbkFjY2Vz
c0VudHJ5OjpBbGxvd1N1YmRvbWFpbnMgOiBPcmlnaW5BY2Nlc3NFbnRyeTo6RGlzYWxsb3dTdWJk
b21haW5zKSk7CiB9CiAKQEAgLTE1Miw3ICsxNTIsNyBAQCB2b2lkIFNlY3VyaXR5UG9saWN5Ojpy
ZW1vdmVPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShjb25zdCBTZWN1cml0eU9yaWdpbiYgc291
cgogICAgIGlmIChpdCA9PSBtYXAuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIE9yaWdp
bkFjY2Vzc1doaXRlTGlzdCogbGlzdCA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgT3JpZ2luQWNj
ZXNzV2hpdGVMaXN0KiBsaXN0ID0gaXQtPnZhbHVlLmdldCgpOwogICAgIHNpemVfdCBpbmRleCA9
IGxpc3QtPmZpbmQoT3JpZ2luQWNjZXNzRW50cnkoZGVzdGluYXRpb25Qcm90b2NvbCwgZGVzdGlu
YXRpb25Eb21haW4sIGFsbG93RGVzdGluYXRpb25TdWJkb21haW5zID8gT3JpZ2luQWNjZXNzRW50
cnk6OkFsbG93U3ViZG9tYWlucyA6IE9yaWdpbkFjY2Vzc0VudHJ5OjpEaXNhbGxvd1N1YmRvbWFp
bnMpKTsKICAgICBpZiAoaW5kZXggPT0gbm90Rm91bmQpCiAgICAgICAgIHJldHVybjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9TZXR0aW5ncy5jcHAKaW5kZXggZGQ1NTUwMS4uNmMxZGJhNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9T
ZXR0aW5ncy5jcHAKQEAgLTYwLDcgKzYwLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldEdlbmVy
aWNGb250RmFtaWx5TWFwKFNjcmlwdEZvbnRGYW1pbHlNYXAmIGZvbnRNYXAsIGNvbnN0IEEKICAg
ICAgICAgaWYgKGl0ID09IGZvbnRNYXAuZW5kKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIGZvbnRNYXAucmVtb3ZlKGl0KTsKLSAgICB9IGVsc2UgaWYgKGl0ICE9IGZvbnRNYXAuZW5k
KCkgJiYgaXQtPnNlY29uZCA9PSBmYW1pbHkpCisgICAgfSBlbHNlIGlmIChpdCAhPSBmb250TWFw
LmVuZCgpICYmIGl0LT52YWx1ZSA9PSBmYW1pbHkpCiAgICAgICAgIHJldHVybjsKICAgICBlbHNl
CiAgICAgICAgIGZvbnRNYXAuc2V0KHN0YXRpY19jYXN0PGludD4oc2NyaXB0KSwgZmFtaWx5KTsK
QEAgLTczLDcgKzczLDcgQEAgc3RhdGljIGlubGluZSBjb25zdCBBdG9taWNTdHJpbmcmIGdldEdl
bmVyaWNGb250RmFtaWx5Rm9yU2NyaXB0KGNvbnN0IFNjcmlwdEZvbnQKIHsKICAgICBTY3JpcHRG
b250RmFtaWx5TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGZvbnRNYXAuZmluZChzdGF0aWNfY2Fz
dDxpbnQ+KHNjcmlwdCkpOwogICAgIGlmIChpdCAhPSBmb250TWFwLmVuZCgpKQotICAgICAgICBy
ZXR1cm4gaXQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKICAgICBpZiAoc2Ny
aXB0ICE9IFVTQ1JJUFRfQ09NTU9OKQogICAgICAgICByZXR1cm4gZ2V0R2VuZXJpY0ZvbnRGYW1p
bHlGb3JTY3JpcHQoZm9udE1hcCwgVVNDUklQVF9DT01NT04pOwogICAgIHJldHVybiBlbXB0eUF0
b207CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NwZWVjaElucHV0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvU3BlZWNoSW5wdXQuY3BwCmluZGV4IDAxMjhlZjguLjgzMjhjNWQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU3BlZWNoSW5wdXQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvU3BlZWNoSW5wdXQuY3BwCkBAIC02Miw3ICs2Miw3IEBAIGludCBT
cGVlY2hJbnB1dDo6cmVnaXN0ZXJMaXN0ZW5lcihTcGVlY2hJbnB1dExpc3RlbmVyKiBsaXN0ZW5l
cikKICNpZiBkZWZpbmVkKERFQlVHKQogICAgIC8vIENoZWNrIGlmIGFscmVhZHkgcHJlc2VudC4K
ICAgICBmb3IgKEhhc2hNYXA8aW50LCBTcGVlY2hJbnB1dExpc3RlbmVyKj46Oml0ZXJhdG9yIGl0
ID0gbV9saXN0ZW5lcnMuYmVnaW4oKTsgaXQgIT0gbV9saXN0ZW5lcnMuZW5kKCk7ICsraXQpCi0g
ICAgICBBU1NFUlQoaXQtPnNlY29uZCAhPSBsaXN0ZW5lcik7CisgICAgICBBU1NFUlQoaXQtPnZh
bHVlICE9IGxpc3RlbmVyKTsKICNlbmRpZgogCiAgICAgbV9saXN0ZW5lcnMuYWRkKG1fbmV4dExp
c3RlbmVySWQsIGxpc3RlbmVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvV2lu
ZG93RmVhdHVyZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9XaW5kb3dGZWF0dXJlcy5jcHAK
aW5kZXggNzU2NDE1Mi4uMWI2YjFkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9X
aW5kb3dGZWF0dXJlcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9XaW5kb3dGZWF0dXJl
cy5jcHAKQEAgLTIxMiw3ICsyMTIsNyBAQCBib29sIFdpbmRvd0ZlYXR1cmVzOjpib29sRmVhdHVy
ZShjb25zdCBEaWFsb2dGZWF0dXJlc01hcCYgZmVhdHVyZXMsIGNvbnN0IGNoYXIqCiAgICAgRGlh
bG9nRmVhdHVyZXNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZmVhdHVyZXMuZmluZChrZXkpOwog
ICAgIGlmIChpdCA9PSBmZWF0dXJlcy5lbmQoKSkKICAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1
ZTsKLSAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0gaXQtPnNlY29uZDsKKyAgICBjb25zdCBTdHJp
bmcmIHZhbHVlID0gaXQtPnZhbHVlOwogICAgIHJldHVybiB2YWx1ZS5pc051bGwoKSB8fCB2YWx1
ZSA9PSAiMSIgfHwgdmFsdWUgPT0gInllcyIgfHwgdmFsdWUgPT0gIm9uIjsKIH0KIApAQCAtMjI0
LDcgKzIyNCw3IEBAIGZsb2F0IFdpbmRvd0ZlYXR1cmVzOjpmbG9hdEZlYXR1cmUoY29uc3QgRGlh
bG9nRmVhdHVyZXNNYXAmIGZlYXR1cmVzLCBjb25zdCBjaGFyCiAgICAgLy8gRklYTUU6IFRoZSB0
b0RvdWJsZSBmdW5jdGlvbiBkb2VzIG5vdCBvZmZlciBhIHdheSB0byB0ZWxsICIwcSIgZnJvbSBz
dHJpbmcgd2l0aCBubyBkaWdpdHMgaW4gaXQ6IEJvdGgKICAgICAvLyByZXR1cm4gdGhlIG51bWJl
ciAwIGFuZCBmYWxzZSBmb3Igb2suIEJ1dCAiMHEiIHNob3VsZCB5aWVsZCB0aGUgbWluaW11bSBy
YXRoZXIgdGhhbiB0aGUgZGVmYXVsdC4KICAgICBib29sIG9rOwotICAgIGRvdWJsZSBwYXJzZWRO
dW1iZXIgPSBpdC0+c2Vjb25kLnRvRG91YmxlKCZvayk7CisgICAgZG91YmxlIHBhcnNlZE51bWJl
ciA9IGl0LT52YWx1ZS50b0RvdWJsZSgmb2spOwogICAgIGlmICgocGFyc2VkTnVtYmVyID09IDAg
JiYgIW9rKSB8fCBpc25hbihwYXJzZWROdW1iZXIpKQogICAgICAgICByZXR1cm4gZGVmYXVsdFZh
bHVlOwogICAgIGlmIChwYXJzZWROdW1iZXIgPCBtaW4gfHwgbWF4IDw9IG1pbikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5jcHAK
aW5kZXggYzQ5MTE5ZS4uNWUwNzE3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9h
bmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKQEAgLTkzLDE0ICs5MywxNCBAQCBk
b3VibGUgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnVwZGF0ZUFuaW1hdGlvbnMoU2V0Q2hh
bmdlZCBjYWxsU2V0Q2hhbmdlZC8qCiAKICAgICBSZW5kZXJPYmplY3RBbmltYXRpb25NYXA6OmNv
bnN0X2l0ZXJhdG9yIGFuaW1hdGlvbnNFbmQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuZW5kKCk7
CiAgICAgZm9yIChSZW5kZXJPYmplY3RBbmltYXRpb25NYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bV9jb21wb3NpdGVBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGFuaW1hdGlvbnNFbmQ7ICsraXQp
IHsKLSAgICAgICAgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wQW5pbSA9IGl0LT5zZWNvbmQuZ2V0
KCk7CisgICAgICAgIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcEFuaW0gPSBpdC0+dmFsdWUuZ2V0
KCk7CiAgICAgICAgIGlmICghY29tcEFuaW0tPnN1c3BlbmRlZCgpICYmIGNvbXBBbmltLT5oYXNB
bmltYXRpb25zKCkpIHsKICAgICAgICAgICAgIGRvdWJsZSB0ID0gY29tcEFuaW0tPnRpbWVUb05l
eHRTZXJ2aWNlKCk7CiAgICAgICAgICAgICBpZiAodCAhPSAtMSAmJiAodCA8IHRpbWVUb05leHRT
ZXJ2aWNlIHx8IHRpbWVUb05leHRTZXJ2aWNlID09IC0xKSkKICAgICAgICAgICAgICAgICB0aW1l
VG9OZXh0U2VydmljZSA9IHQ7CiAgICAgICAgICAgICBpZiAoIXRpbWVUb05leHRTZXJ2aWNlKSB7
CiAgICAgICAgICAgICAgICAgaWYgKGNhbGxTZXRDaGFuZ2VkID09IENhbGxTZXRDaGFuZ2VkKSB7
Ci0gICAgICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBpdC0+Zmlyc3QtPm5vZGUoKTsKKyAg
ICAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGl0LT5rZXktPm5vZGUoKTsKICAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKCFub2RlIHx8IChub2RlLT5kb2N1bWVudCgpICYmICFub2RlLT5k
b2N1bWVudCgpLT5pblBhZ2VDYWNoZSgpKSk7CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNl
dE5lZWRzU3R5bGVSZWNhbGMoU3ludGhldGljU3R5bGVDaGFuZ2UpOwogICAgICAgICAgICAgICAg
ICAgICBjYWxsZWRTZXRDaGFuZ2VkID0gdHJ1ZTsKQEAgLTI5Miw5ICsyOTIsOSBAQCB2b2lkIEFu
aW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpzdXNwZW5kQW5pbWF0aW9uc0ZvckRvY3VtZW50KERv
Y3VtZW50KiBkb2N1bWVudAogICAgIAogICAgIFJlbmRlck9iamVjdEFuaW1hdGlvbk1hcDo6Y29u
c3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5lbmQoKTsK
ICAgICBmb3IgKFJlbmRlck9iamVjdEFuaW1hdGlvbk1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
X2NvbXBvc2l0ZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gYW5pbWF0aW9uc0VuZDsgKytpdCkg
ewotICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gaXQtPmZpcnN0OworICAgICAgICBS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gaXQtPmtleTsKICAgICAgICAgaWYgKHJlbmRlcmVyLT5k
b2N1bWVudCgpID09IGRvY3VtZW50KSB7Ci0gICAgICAgICAgICBDb21wb3NpdGVBbmltYXRpb24q
IGNvbXBBbmltID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgIENvbXBvc2l0ZUFuaW1h
dGlvbiogY29tcEFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBjb21wQW5pbS0+
c3VzcGVuZEFuaW1hdGlvbnMoKTsKICAgICAgICAgfQogICAgIH0KQEAgLTMwOCw5ICszMDgsOSBA
QCB2b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpyZXN1bWVBbmltYXRpb25zRm9yRG9j
dW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50KQogICAgIAogICAgIFJlbmRlck9iamVjdEFuaW1hdGlv
bk1hcDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fY29tcG9zaXRlQW5pbWF0aW9u
cy5lbmQoKTsKICAgICBmb3IgKFJlbmRlck9iamVjdEFuaW1hdGlvbk1hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gYW5pbWF0aW9uc0Vu
ZDsgKytpdCkgewotICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gaXQtPmZpcnN0Owor
ICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gaXQtPmtleTsKICAgICAgICAgaWYgKHJl
bmRlcmVyLT5kb2N1bWVudCgpID09IGRvY3VtZW50KSB7Ci0gICAgICAgICAgICBDb21wb3NpdGVB
bmltYXRpb24qIGNvbXBBbmltID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgIENvbXBv
c2l0ZUFuaW1hdGlvbiogY29tcEFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBj
b21wQW5pbS0+cmVzdW1lQW5pbWF0aW9ucygpOwogICAgICAgICB9CiAgICAgfQpAQCAtMzk2LDgg
KzM5Niw4IEBAIHVuc2lnbmVkIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpudW1iZXJPZkFj
dGl2ZUFuaW1hdGlvbnMoRG9jdW1lbnQqIGRvY3VtZW50CiAgICAgCiAgICAgUmVuZGVyT2JqZWN0
QW5pbWF0aW9uTWFwOjpjb25zdF9pdGVyYXRvciBhbmltYXRpb25zRW5kID0gbV9jb21wb3NpdGVB
bmltYXRpb25zLmVuZCgpOwogICAgIGZvciAoUmVuZGVyT2JqZWN0QW5pbWF0aW9uTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBhbmlt
YXRpb25zRW5kOyArK2l0KSB7Ci0gICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBpdC0+
Zmlyc3Q7Ci0gICAgICAgIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcEFuaW0gPSBpdC0+c2Vjb25k
LmdldCgpOworICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gaXQtPmtleTsKKyAgICAg
ICAgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wQW5pbSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAg
ICAgaWYgKHJlbmRlcmVyLT5kb2N1bWVudCgpID09IGRvY3VtZW50KQogICAgICAgICAgICAgY291
bnQgKz0gY29tcEFuaW0tPm51bWJlck9mQWN0aXZlQW5pbWF0aW9ucygpOwogICAgIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uY3Bw
CmluZGV4IGYzNTc3ODEuLjBiMGYzNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
YW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmNwcApAQCAtNTgsNyArNTgsNyBAQCB2b2lk
IENvbXBvc2l0ZUFuaW1hdGlvbjo6Y2xlYXJSZW5kZXJlcigpCiAgICAgICAgIC8vIGFuIGFuaW1h
dGlvbiBjYWxsYmFjayAoc2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMjA1MikKICAgICAgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0
b3IgdHJhbnNpdGlvbnNFbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOwogICAgICAgICBmb3IgKENT
U1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9u
cy5iZWdpbigpOyBpdCAhPSB0cmFuc2l0aW9uc0VuZDsgKytpdCkgewotICAgICAgICAgICAgSW1w
bGljaXRBbmltYXRpb24qIHRyYW5zaXRpb24gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAg
ICAgSW1wbGljaXRBbmltYXRpb24qIHRyYW5zaXRpb24gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAg
ICAgICAgICBhbmltYXRpb25Db250cm9sbGVyKCktPmFuaW1hdGlvbldpbGxCZVJlbW92ZWQodHJh
bnNpdGlvbik7CiAgICAgICAgICAgICB0cmFuc2l0aW9uLT5jbGVhcigpOwogICAgICAgICB9CkBA
IC02Nyw3ICs2Nyw3IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpjbGVhclJlbmRlcmVyKCkK
ICAgICAgICAgbV9rZXlmcmFtZUFuaW1hdGlvbnMuY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgICAg
ICBBbmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBhbmltYXRpb25zRW5kID0gbV9rZXlm
cmFtZUFuaW1hdGlvbnMuZW5kKCk7CiAgICAgICAgIGZvciAoQW5pbWF0aW9uTmFtZU1hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBhbmlt
YXRpb25zRW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBLZXlmcmFtZUFuaW1hdGlvbiogYW5pbSA9
IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBLZXlmcmFtZUFuaW1hdGlvbiogYW5pbSA9
IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+YW5p
bWF0aW9uV2lsbEJlUmVtb3ZlZChhbmltKTsKICAgICAgICAgICAgIGFuaW0tPmNsZWFyKCk7CiAg
ICAgICAgIH0KQEAgLTg0LDcgKzg0LDcgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnVwZGF0
ZVRyYW5zaXRpb25zKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIFJlbmRlclN0eWxlKgogICAgIC8v
IGluIHRoZSBuZXh0IGxvb3AgYW5kIHRoZW4gdG9zcyB0aGUgb25lcyB0aGF0IGRpZG4ndCBnZXQg
bWFya2VkLgogICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IG1fdHJhbnNpdGlvbnMuZW5kKCk7CiAgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25z
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5zZXRBY3RpdmUoZmFsc2UpOworICAgICAgICBp
dC0+dmFsdWUtPnNldEFjdGl2ZShmYWxzZSk7CiAgICAgICAgIAogICAgIFJlZlB0cjxSZW5kZXJT
dHlsZT4gbW9kaWZpZWRDdXJyZW50U3R5bGU7CiAgICAgCkBAIC0xODEsNyArMTgxLDcgQEAgdm9p
ZCBDb21wb3NpdGVBbmltYXRpb246OnVwZGF0ZVRyYW5zaXRpb25zKFJlbmRlck9iamVjdCogcmVu
ZGVyZXIsIFJlbmRlclN0eWxlKgogICAgIFZlY3RvcjxpbnQ+IHRvQmVSZW1vdmVkOwogICAgIGVu
ZCA9IG1fdHJhbnNpdGlvbnMuZW5kKCk7CiAgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25z
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7Ci0gICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZC5n
ZXQoKTsKKyAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7
CiAgICAgICAgIGlmICghYW5pbS0+YWN0aXZlKCkpIHsKICAgICAgICAgICAgIGFuaW1hdGlvbkNv
bnRyb2xsZXIoKS0+YW5pbWF0aW9uV2lsbEJlUmVtb3ZlZChhbmltKTsKICAgICAgICAgICAgIHRv
QmVSZW1vdmVkLmFwcGVuZChhbmltLT5hbmltYXRpbmdQcm9wZXJ0eSgpKTsKQEAgLTIwNywxMyAr
MjA3LDEzIEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVLZXlmcmFtZUFuaW1hdGlv
bnMoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgUmVuZGVyCiAgICAgICAgIC8vIFRoZSBjdXJyZW50
IGFuZCB0YXJnZXQgYW5pbWF0aW9ucyBhcmUgdGhlIHNhbWUgc28gd2UganVzdCBuZWVkIHRvIHRv
c3MgYW55IAogICAgICAgICAvLyBhbmltYXRpb24gd2hpY2ggaXMgZmluaXNoZWQgKHBvc3RBY3Rp
dmUpLgogICAgICAgICBmb3IgKEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0ga2ZlbmQ7ICsraXQpIHsKLSAgICAg
ICAgICAgIGlmIChpdC0+c2Vjb25kLT5wb3N0QWN0aXZlKCkpCi0gICAgICAgICAgICAgICAgaXQt
PnNlY29uZC0+c2V0SW5kZXgoLTEpOworICAgICAgICAgICAgaWYgKGl0LT52YWx1ZS0+cG9zdEFj
dGl2ZSgpKQorICAgICAgICAgICAgICAgIGl0LT52YWx1ZS0+c2V0SW5kZXgoLTEpOwogICAgICAg
ICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gTWFyayBhbGwgZXhpc3RpbmcgYW5pbWF0aW9u
cyBhcyBubyBsb25nZXIgYWN0aXZlLgogICAgICAgICBmb3IgKEFuaW1hdGlvbk5hbWVNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0ga2Zl
bmQ7ICsraXQpCi0gICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRJbmRleCgtMSk7CisgICAgICAg
ICAgICBpdC0+dmFsdWUtPnNldEluZGV4KC0xKTsKICAgICAgICAgICAgIAogICAgICAgICAvLyBU
b3NzIHRoZSBhbmltYXRpb24gb3JkZXIgbWFwLgogICAgICAgICBtX2tleWZyYW1lQW5pbWF0aW9u
T3JkZXJNYXAuY2xlYXIoKTsKQEAgLTI2Miw3ICsyNjIsNyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1h
dGlvbjo6dXBkYXRlS2V5ZnJhbWVBbmltYXRpb25zKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIFJl
bmRlcgogICAgIFZlY3RvcjxBdG9taWNTdHJpbmdJbXBsKj4gYW5pbXNUb0JlUmVtb3ZlZDsKICAg
ICBrZmVuZCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmVuZCgpOwogICAgIGZvciAoQW5pbWF0aW9u
TmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5iZWdpbigp
OyBpdCAhPSBrZmVuZDsgKytpdCkgewotICAgICAgICBLZXlmcmFtZUFuaW1hdGlvbioga2V5ZnJh
bWVBbmltID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24qIGtl
eWZyYW1lQW5pbSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgaWYgKGtleWZyYW1lQW5pbS0+
aW5kZXgoKSA8IDApIHsKICAgICAgICAgICAgIGFuaW1zVG9CZVJlbW92ZWQuYXBwZW5kKGtleWZy
YW1lQW5pbS0+bmFtZSgpLmltcGwoKSk7CiAgICAgICAgICAgICBhbmltYXRpb25Db250cm9sbGVy
KCktPmFuaW1hdGlvbldpbGxCZVJlbW92ZWQoa2V5ZnJhbWVBbmltKTsKQEAgLTI5MCw3ICsyOTAs
NyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBDb21wb3NpdGVBbmltYXRpb246OmFuaW1hdGUo
UmVuZGVyT2JqZWN0KiByZW5kZXJlciwgUmVuZAogICAgICAgICBpZiAoIW1fdHJhbnNpdGlvbnMu
aXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25z
dF9pdGVyYXRvciBlbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOwogICAgICAgICAgICAgZm9yIChD
U1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlv
bnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKEltcGxp
Y2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZC5nZXQoKSkKKyAgICAgICAgICAgICAgICBp
ZiAoSW1wbGljaXRBbmltYXRpb24qIGFuaW0gPSBpdC0+dmFsdWUuZ2V0KCkpCiAgICAgICAgICAg
ICAgICAgICAgIGFuaW0tPmFuaW1hdGUodGhpcywgcmVuZGVyZXIsIGN1cnJlbnRTdHlsZSwgdGFy
Z2V0U3R5bGUsIHJlc3VsdFN0eWxlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMzEy
LDcgKzMxMiw3IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IENvbXBvc2l0ZUFuaW1hdGlvbjo6
Z2V0QW5pbWF0ZWRTdHlsZSgpIGNvbnN0CiAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiByZXN1bHRT
dHlsZTsKICAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBlbmQg
PSBtX3RyYW5zaXRpb25zLmVuZCgpOwogICAgIGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgewotICAgICAgICBpZiAoSW1wbGljaXRBbmltYXRpb24qIGltcGxpY2l0QW5pbWF0aW9u
ID0gaXQtPnNlY29uZC5nZXQoKSkKKyAgICAgICAgaWYgKEltcGxpY2l0QW5pbWF0aW9uKiBpbXBs
aWNpdEFuaW1hdGlvbiA9IGl0LT52YWx1ZS5nZXQoKSkKICAgICAgICAgICAgIGltcGxpY2l0QW5p
bWF0aW9uLT5nZXRBbmltYXRlZFN0eWxlKHJlc3VsdFN0eWxlKTsKICAgICB9CiAKQEAgLTMzMyw3
ICszMzMsNyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6c2V0QW5pbWF0aW5nKGJvb2wgYW5p
bWF0aW5nKQogICAgIGlmICghbV90cmFuc2l0aW9ucy5pc0VtcHR5KCkpIHsKICAgICAgICAgQ1NT
UHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgdHJhbnNpdGlvbnNFbmQgPSBt
X3RyYW5zaXRpb25zLmVuZCgpOwogICAgICAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSB0cmFu
c2l0aW9uc0VuZDsgKytpdCkgewotICAgICAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIHRyYW5z
aXRpb24gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgSW1wbGljaXRBbmltYXRpb24q
IHRyYW5zaXRpb24gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICB0cmFuc2l0aW9uLT5z
ZXRBbmltYXRpbmcoYW5pbWF0aW5nKTsKICAgICAgICAgfQogICAgIH0KQEAgLTM0MSw3ICszNDEs
NyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6c2V0QW5pbWF0aW5nKGJvb2wgYW5pbWF0aW5n
KQogICAgICAgICBtX2tleWZyYW1lQW5pbWF0aW9ucy5jaGVja0NvbnNpc3RlbmN5KCk7CiAgICAg
ICAgIEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGFuaW1hdGlvbnNFbmQgPSBtX2tl
eWZyYW1lQW5pbWF0aW9ucy5lbmQoKTsKICAgICAgICAgZm9yIChBbmltYXRpb25OYW1lTWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGFu
aW1hdGlvbnNFbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIEtleWZyYW1lQW5pbWF0aW9uKiBhbmlt
ID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgIEtleWZyYW1lQW5pbWF0aW9uKiBhbmlt
ID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAgICAgYW5pbS0+c2V0QW5pbWF0aW5nKGFuaW1h
dGluZyk7CiAgICAgICAgIH0KICAgICB9CkBAIC0zNTYsNyArMzU2LDcgQEAgZG91YmxlIENvbXBv
c2l0ZUFuaW1hdGlvbjo6dGltZVRvTmV4dFNlcnZpY2UoKSBjb25zdAogICAgIGlmICghbV90cmFu
c2l0aW9ucy5pc0VtcHR5KCkpIHsKICAgICAgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6
Y29uc3RfaXRlcmF0b3IgdHJhbnNpdGlvbnNFbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOwogICAg
ICAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSB0cmFuc2l0aW9uc0VuZDsgKytpdCkgewotICAg
ICAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIHRyYW5zaXRpb24gPSBpdC0+c2Vjb25kLmdldCgp
OworICAgICAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIHRyYW5zaXRpb24gPSBpdC0+dmFsdWUu
Z2V0KCk7CiAgICAgICAgICAgICBkb3VibGUgdCA9IHRyYW5zaXRpb24gPyB0cmFuc2l0aW9uLT50
aW1lVG9OZXh0U2VydmljZSgpIDogLTE7CiAgICAgICAgICAgICBpZiAodCA8IG1pblQgfHwgbWlu
VCA9PSAtMSkKICAgICAgICAgICAgICAgICBtaW5UID0gdDsKQEAgLTM2OCw3ICszNjgsNyBAQCBk
b3VibGUgQ29tcG9zaXRlQW5pbWF0aW9uOjp0aW1lVG9OZXh0U2VydmljZSgpIGNvbnN0CiAgICAg
ICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsKICAgICAgICAgQW5p
bWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fa2V5ZnJhbWVB
bmltYXRpb25zLmVuZCgpOwogICAgICAgICBmb3IgKEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gYW5pbWF0aW9u
c0VuZDsgKytpdCkgewotICAgICAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24qIGFuaW1hdGlvbiA9
IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBLZXlmcmFtZUFuaW1hdGlvbiogYW5pbWF0
aW9uID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAgICAgZG91YmxlIHQgPSBhbmltYXRpb24g
PyBhbmltYXRpb24tPnRpbWVUb05leHRTZXJ2aWNlKCkgOiAtMTsKICAgICAgICAgICAgIGlmICh0
IDwgbWluVCB8fCBtaW5UID09IC0xKQogICAgICAgICAgICAgICAgIG1pblQgPSB0OwpAQCAtMzkw
LDcgKzM5MCw3IEBAIFBhc3NSZWZQdHI8S2V5ZnJhbWVBbmltYXRpb24+IENvbXBvc2l0ZUFuaW1h
dGlvbjo6Z2V0QW5pbWF0aW9uRm9yUHJvcGVydHkoQ1NTUHJvCiAgICAgICAgIG1fa2V5ZnJhbWVB
bmltYXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsKICAgICAgICAgQW5pbWF0aW9uTmFtZU1hcDo6
Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmVuZCgp
OwogICAgICAgICBmb3IgKEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9r
ZXlmcmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gYW5pbWF0aW9uc0VuZDsgKytpdCkgewot
ICAgICAgICAgICAgUmVmUHRyPEtleWZyYW1lQW5pbWF0aW9uPiBhbmltID0gaXQtPnNlY29uZDsK
KyAgICAgICAgICAgIFJlZlB0cjxLZXlmcmFtZUFuaW1hdGlvbj4gYW5pbSA9IGl0LT52YWx1ZTsK
ICAgICAgICAgICAgIGlmIChhbmltLT5oYXNBbmltYXRpb25Gb3JQcm9wZXJ0eShwcm9wZXJ0eSkp
CiAgICAgICAgICAgICAgICAgcmV0dmFsID0gYW5pbTsKICAgICAgICAgfQpAQCAtNDEwLDE0ICs0
MTAsMTQgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnN1c3BlbmRBbmltYXRpb25zKCkKICAg
ICAgICAgbV9rZXlmcmFtZUFuaW1hdGlvbnMuY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgICAgICBB
bmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBhbmltYXRpb25zRW5kID0gbV9rZXlmcmFt
ZUFuaW1hdGlvbnMuZW5kKCk7CiAgICAgICAgIGZvciAoQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBhbmltYXRp
b25zRW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAoS2V5ZnJhbWVBbmltYXRpb24qIGFuaW0g
PSBpdC0+c2Vjb25kLmdldCgpKQorICAgICAgICAgICAgaWYgKEtleWZyYW1lQW5pbWF0aW9uKiBh
bmltID0gaXQtPnZhbHVlLmdldCgpKQogICAgICAgICAgICAgICAgIGFuaW0tPnVwZGF0ZVBsYXlT
dGF0ZShBbmltUGxheVN0YXRlUGF1c2VkKTsKICAgICAgICAgfQogICAgIH0KICAgICBpZiAoIW1f
dHJhbnNpdGlvbnMuaXNFbXB0eSgpKSB7CiAgICAgICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNN
YXA6OmNvbnN0X2l0ZXJhdG9yIHRyYW5zaXRpb25zRW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsK
ICAgICAgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gdHJhbnNpdGlvbnNFbmQ7ICsraXQpIHsK
LSAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZC5nZXQoKTsK
KyAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnZhbHVlLmdldCgpOwog
ICAgICAgICAgICAgaWYgKGFuaW0gJiYgYW5pbS0+aGFzU3R5bGUoKSkKICAgICAgICAgICAgICAg
ICBhbmltLT51cGRhdGVQbGF5U3RhdGUoQW5pbVBsYXlTdGF0ZVBhdXNlZCk7CiAgICAgICAgIH0K
QEAgLTQzNSw3ICs0MzUsNyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6cmVzdW1lQW5pbWF0
aW9ucygpCiAgICAgICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsK
ICAgICAgICAgQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9
IG1fa2V5ZnJhbWVBbmltYXRpb25zLmVuZCgpOwogICAgICAgICBmb3IgKEFuaW1hdGlvbk5hbWVN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQg
IT0gYW5pbWF0aW9uc0VuZDsgKytpdCkgewotICAgICAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24q
IGFuaW0gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24q
IGFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoYW5pbSAmJiBhbmltLT5w
bGF5U3RhdGVQbGF5aW5nKCkpCiAgICAgICAgICAgICAgICAgYW5pbS0+dXBkYXRlUGxheVN0YXRl
KEFuaW1QbGF5U3RhdGVQbGF5aW5nKTsKICAgICAgICAgfQpAQCAtNDQ0LDcgKzQ0NCw3IEBAIHZv
aWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpyZXN1bWVBbmltYXRpb25zKCkKICAgICBpZiAoIW1fdHJh
bnNpdGlvbnMuaXNFbXB0eSgpKSB7CiAgICAgICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6
OmNvbnN0X2l0ZXJhdG9yIHRyYW5zaXRpb25zRW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKICAg
ICAgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9
IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gdHJhbnNpdGlvbnNFbmQ7ICsraXQpIHsKLSAg
ICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZC5nZXQoKTsKKyAg
ICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnZhbHVlLmdldCgpOwogICAg
ICAgICAgICAgaWYgKGFuaW0gJiYgYW5pbS0+aGFzU3R5bGUoKSkKICAgICAgICAgICAgICAgICBh
bmltLT51cGRhdGVQbGF5U3RhdGUoQW5pbVBsYXlTdGF0ZVBsYXlpbmcpOwogICAgICAgICB9CkBA
IC00NTYsNyArNDU2LDcgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246Om92ZXJyaWRlSW1wbGlj
aXRBbmltYXRpb25zKENTU1Byb3BlcnR5SUQgcHJvcGVydHkpCiAgICAgQ1NTUHJvcGVydHlUcmFu
c2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKICAg
ICBpZiAoIW1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSB7CiAgICAgICAgIGZvciAoQ1NTUHJvcGVy
dHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGFu
aW0gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGFu
aW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoYW5pbSAmJiBhbmltLT5hbmlt
YXRpbmdQcm9wZXJ0eSgpID09IHByb3BlcnR5KQogICAgICAgICAgICAgICAgIGFuaW0tPnNldE92
ZXJyaWRkZW4odHJ1ZSk7CiAgICAgICAgIH0KQEAgLTQ2OCw3ICs0NjgsNyBAQCB2b2lkIENvbXBv
c2l0ZUFuaW1hdGlvbjo6cmVzdW1lT3ZlcnJpZGRlbkltcGxpY2l0QW5pbWF0aW9ucyhDU1NQcm9w
ZXJ0eUlEIHByb3BlcgogICAgIGlmICghbV90cmFuc2l0aW9ucy5pc0VtcHR5KCkpIHsKICAgICAg
ICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV90cmFu
c2l0aW9ucy5lbmQoKTsKICAgICAgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7Ci0gICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT5zZWNvbmQuZ2V0
KCk7CisgICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT52YWx1ZS5nZXQo
KTsKICAgICAgICAgICAgIGlmIChhbmltICYmIGFuaW0tPmFuaW1hdGluZ1Byb3BlcnR5KCkgPT0g
cHJvcGVydHkpCiAgICAgICAgICAgICAgICAgYW5pbS0+c2V0T3ZlcnJpZGRlbihmYWxzZSk7CiAg
ICAgICAgIH0KQEAgLTQ4MSw3ICs0ODEsNyBAQCBib29sIENvbXBvc2l0ZUFuaW1hdGlvbjo6aXNB
bmltYXRpbmdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBib29sIGFjY2VsZQogICAg
ICAgICBtX2tleWZyYW1lQW5pbWF0aW9ucy5jaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgICAgIEFu
aW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGFuaW1hdGlvbnNFbmQgPSBtX2tleWZyYW1l
QW5pbWF0aW9ucy5lbmQoKTsKICAgICAgICAgZm9yIChBbmltYXRpb25OYW1lTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGFuaW1hdGlv
bnNFbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIEtleWZyYW1lQW5pbWF0aW9uKiBhbmltID0gaXQt
PnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgIEtleWZyYW1lQW5pbWF0aW9uKiBhbmltID0gaXQt
PnZhbHVlLmdldCgpOwogICAgICAgICAgICAgaWYgKGFuaW0gJiYgYW5pbS0+aXNBbmltYXRpbmdQ
cm9wZXJ0eShwcm9wZXJ0eSwgYWNjZWxlcmF0ZWRPbmx5LCBpc1J1bm5pbmdOb3cpKQogICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC00OTAsNyArNDkwLDcgQEAgYm9v
bCBDb21wb3NpdGVBbmltYXRpb246OmlzQW5pbWF0aW5nUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBw
cm9wZXJ0eSwgYm9vbCBhY2NlbGUKICAgICBpZiAoIW1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSB7
CiAgICAgICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIHRyYW5z
aXRpb25zRW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKICAgICAgICAgZm9yIChDU1NQcm9wZXJ0
eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4o
KTsgaXQgIT0gdHJhbnNpdGlvbnNFbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIEltcGxpY2l0QW5p
bWF0aW9uKiBhbmltID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgIEltcGxpY2l0QW5p
bWF0aW9uKiBhbmltID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAgICAgaWYgKGFuaW0gJiYg
YW5pbS0+aXNBbmltYXRpbmdQcm9wZXJ0eShwcm9wZXJ0eSwgYWNjZWxlcmF0ZWRPbmx5LCBpc1J1
bm5pbmdOb3cpKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC01
NTYsNyArNTU2LDcgQEAgdW5zaWduZWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpudW1iZXJPZkFjdGl2
ZUFuaW1hdGlvbnMoKSBjb25zdAogICAgICAgICBtX2tleWZyYW1lQW5pbWF0aW9ucy5jaGVja0Nv
bnNpc3RlbmN5KCk7CiAgICAgICAgIEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGFu
aW1hdGlvbnNFbmQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5lbmQoKTsKICAgICAgICAgZm9yIChB
bmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVBbmltYXRpb25z
LmJlZ2luKCk7IGl0ICE9IGFuaW1hdGlvbnNFbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIEtleWZy
YW1lQW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgIEtleWZy
YW1lQW5pbWF0aW9uKiBhbmltID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAgICAgaWYgKGFu
aW0tPnJ1bm5pbmcoKSkKICAgICAgICAgICAgICAgICArK2NvdW50OwogICAgICAgICB9CkBAIC01
NjUsNyArNTY1LDcgQEAgdW5zaWduZWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpudW1iZXJPZkFjdGl2
ZUFuaW1hdGlvbnMoKSBjb25zdAogICAgIGlmICghbV90cmFuc2l0aW9ucy5pc0VtcHR5KCkpIHsK
ICAgICAgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgdHJhbnNp
dGlvbnNFbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOwogICAgICAgICBmb3IgKENTU1Byb3BlcnR5
VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigp
OyBpdCAhPSB0cmFuc2l0aW9uc0VuZDsgKytpdCkgewotICAgICAgICAgICAgSW1wbGljaXRBbmlt
YXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgSW1wbGljaXRBbmlt
YXRpb24qIGFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoYW5pbS0+cnVu
bmluZygpKQogICAgICAgICAgICAgICAgICsrY291bnQ7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xhbmd1YWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0xhbmd1YWdlLmNwcAppbmRleCA0N2YwOWY2Li5iM2Y5N2JlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MYW5ndWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vTGFuZ3VhZ2UuY3BwCkBAIC01Myw3ICs1Myw3IEBAIHZvaWQgbGFuZ3VhZ2VEaWRD
aGFuZ2UoKQogewogICAgIE9ic2VydmVyTWFwOjppdGVyYXRvciBlbmQgPSBvYnNlcnZlck1hcCgp
LmVuZCgpOwogICAgIGZvciAoT2JzZXJ2ZXJNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBvYnNlcnZlck1h
cCgpLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCi0gICAgICAgIGl0ZXItPnNlY29uZChp
dGVyLT5maXJzdCk7CisgICAgICAgIGl0ZXItPnZhbHVlKGl0ZXItPmtleSk7CiB9CiAKIFN0cmlu
ZyBkZWZhdWx0TGFuZ3VhZ2UoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
TUlNRVR5cGVSZWdpc3RyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NSU1FVHlwZVJl
Z2lzdHJ5LmNwcAppbmRleCAyODljNjY5Li44ZjUyMTAzIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmNwcApAQCAtNjkyLDcgKzY5Miw3IEBAIFN0cmluZyBN
SU1FVHlwZVJlZ2lzdHJ5OjpnZXROb3JtYWxpemVkTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSkKICAgICBNSU1FVHlwZUFzc29jaWF0aW9uTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1p
bWVUeXBlQXNzb2NpYXRpb25NYXAoKS5maW5kKG1pbWVUeXBlKTsKIAogICAgIGlmIChpdCAhPSBt
aW1lVHlwZUFzc29jaWF0aW9uTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdC0+c2Vjb25k
OworICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwogI2VuZGlmCiAgICAgcmV0dXJuIG1pbWVUeXBl
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vSFJURkVsZXZh
dGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9IUlRGRWxldmF0aW9uLmNw
cAppbmRleCAwODBiMzkxLi5iMDM2YTI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9IUlRGRWxldmF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9IUlRGRWxldmF0aW9uLmNwcApAQCAtNzksNyArNzksNyBAQCBzdGF0aWMgQXVkaW9C
dXMqIGdldENvbmNhdGVuYXRlZEltcHVsc2VSZXNwb25zZXNGb3JTdWJqZWN0KGNvbnN0IFN0cmlu
ZyYgc3ViamVjdAogICAgICAgICBidXMgPSBjb25jYXRlbmF0ZWRJbXB1bHNlUmVzcG9uc2VzLmxl
YWtQdHIoKTsKICAgICAgICAgYXVkaW9CdXNNYXAuc2V0KHN1YmplY3ROYW1lLCBidXMpOwogICAg
IH0gZWxzZQotICAgICAgICBidXMgPSBpdGVyYXRvci0+c2Vjb25kOworICAgICAgICBidXMgPSBp
dGVyYXRvci0+dmFsdWU7CiAKICAgICBzaXplX3QgcmVzcG9uc2VMZW5ndGggPSBidXMtPmxlbmd0
aCgpOwogICAgIHNpemVfdCBleHBlY3RlZExlbmd0aCA9IHN0YXRpY19jYXN0PHNpemVfdD4oVG90
YWxOdW1iZXJPZlJlc3BvbnNlcyAqIFJlc3BvbnNlRnJhbWVTaXplKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL0JpbmFyeVByb3BlcnR5TGlzdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9jZi9CaW5hcnlQcm9wZXJ0eUxpc3QuY3BwCmluZGV4IDliYTk2MTcu
LmRhMjQ0ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL0JpbmFyeVBy
b3BlcnR5TGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2YvQmluYXJ5UHJv
cGVydHlMaXN0LmNwcApAQCAtMjI5LDcgKzIyOSw3IEBAIHZvaWQgQmluYXJ5UHJvcGVydHlMaXN0
UGxhbjo6d3JpdGVJbnRlZ2VyQXJyYXkoY29uc3QgaW50KiBpbnRlZ2Vycywgc2l6ZV90IHNpemUp
CiAgICAgICAgIHJldHVybjsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkK
ICAgICAgICAgd3JpdGVJbnRlZ2VyKGludGVnZXJzW2ldKTsKLSAgICBhZGRSZXN1bHQuaXRlcmF0
b3ItPnNlY29uZCA9IG1fY3VycmVudE9iamVjdFJlZmVyZW5jZSsrOworICAgIGFkZFJlc3VsdC5p
dGVyYXRvci0+dmFsdWUgPSBtX2N1cnJlbnRPYmplY3RSZWZlcmVuY2UrKzsKICAgICB3cml0ZUFy
cmF5T2JqZWN0KHNpemUpOwogICAgIG1fY3VycmVudEFnZ3JlZ2F0ZVNpemUgPSBzYXZlZEFnZ3Jl
Z2F0ZVNpemU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9zdXBwb3J0L1dlYkhUVFBMb2FkSW5mby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
aHJvbWl1bS9zdXBwb3J0L1dlYkhUVFBMb2FkSW5mby5jcHAKaW5kZXggNzc2MmZkOC4uNjYzNzFi
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9X
ZWJIVFRQTG9hZEluZm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVt
L3N1cHBvcnQvV2ViSFRUUExvYWRJbmZvLmNwcApAQCAtMTA2LDcgKzEwNiw3IEBAIHN0YXRpYyB2
b2lkIGFkZEhlYWRlcihIVFRQSGVhZGVyTWFwKiBtYXAsIGNvbnN0IFdlYlN0cmluZyYgbmFtZSwg
Y29uc3QgV2ViU3RyaW5nCiAgICAgSFRUUEhlYWRlck1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1h
cC0+YWRkKG5hbWUsIHZhbHVlKTsKICAgICAvLyBJdCBpcyBpbXBvcnRhbnQgdGhhdCB2YWx1ZXMg
YXJlIHNlcGFyYXRlZCBieSAnXG4nLCBub3QgY29tbWEsIG90aGVyd2lzZSBTZXQtQ29va2llIGhl
YWRlciBpcyBub3QgcGFyc2VhYmxlLgogICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0gICAg
ICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kICs9ICJcbiIgKyBTdHJpbmcodmFsdWUpOworICAg
ICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlICs9ICJcbiIgKyBTdHJpbmcodmFsdWUpOwogfQog
CiB2b2lkIFdlYkhUVFBMb2FkSW5mbzo6YWRkUmVxdWVzdEhlYWRlcihjb25zdCBXZWJTdHJpbmcm
IG5hbWUsIGNvbnN0IFdlYlN0cmluZyYgdmFsdWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlVSTFJlcXVlc3QuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJVUkxSZXF1ZXN0LmNwcAppbmRleCBm
NDM3YjUxLi5lMzg1MTAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9zdXBwb3J0L1dlYlVSTFJlcXVlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVVJMUmVxdWVzdC5jcHAKQEAgLTE5NSw3ICsxOTUsNyBA
QCB2b2lkIFdlYlVSTFJlcXVlc3Q6OnZpc2l0SFRUUEhlYWRlckZpZWxkcyhXZWJIVFRQSGVhZGVy
VmlzaXRvciogdmlzaXRvcikgY29uc3QKIHsKICAgICBjb25zdCBIVFRQSGVhZGVyTWFwJiBtYXAg
PSBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXF1ZXN0LT5odHRwSGVhZGVyRmllbGRzKCk7CiAgICAg
Zm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC5iZWdpbigpOyBpdCAh
PSBtYXAuZW5kKCk7ICsraXQpCi0gICAgICAgIHZpc2l0b3ItPnZpc2l0SGVhZGVyKGl0LT5maXJz
dCwgaXQtPnNlY29uZCk7CisgICAgICAgIHZpc2l0b3ItPnZpc2l0SGVhZGVyKGl0LT5rZXksIGl0
LT52YWx1ZSk7CiB9CiAKIFdlYkhUVFBCb2R5IFdlYlVSTFJlcXVlc3Q6Omh0dHBCb2R5KCkgY29u
c3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQv
V2ViVVJMUmVzcG9uc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3Vw
cG9ydC9XZWJVUkxSZXNwb25zZS5jcHAKaW5kZXggMWY5Yjk2OC4uODA1NjY2NCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJVUkxSZXNwb25z
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJV
UkxSZXNwb25zZS5jcHAKQEAgLTI2MSw3ICsyNjEsNyBAQCB2b2lkIFdlYlVSTFJlc3BvbnNlOjph
ZGRIVFRQSGVhZGVyRmllbGQoY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBjb25zdCBXZWJTdHJpbmcm
CiAgICAgSFRUUEhlYWRlck1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9CiAgICAgICAgIGNvbnN0X2Nh
c3Q8SFRUUEhlYWRlck1hcCo+KCZtYXApLT5hZGQobmFtZSwgdmFsdWVTdHIpOwogICAgIGlmICgh
cmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kICs9ICIs
ICIgKyB2YWx1ZVN0cjsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSArPSAiLCAiICsg
dmFsdWVTdHI7CiB9CiAKIHZvaWQgV2ViVVJMUmVzcG9uc2U6OmNsZWFySFRUUEhlYWRlckZpZWxk
KGNvbnN0IFdlYlN0cmluZyYgbmFtZSkKQEAgLTI3NSw3ICsyNzUsNyBAQCB2b2lkIFdlYlVSTFJl
c3BvbnNlOjp2aXNpdEhUVFBIZWFkZXJGaWVsZHMoV2ViSFRUUEhlYWRlclZpc2l0b3IqIHZpc2l0
b3IpIGNvbnN0CiB7CiAgICAgY29uc3QgSFRUUEhlYWRlck1hcCYgbWFwID0gbV9wcml2YXRlLT5t
X3Jlc291cmNlUmVzcG9uc2UtPmh0dHBIZWFkZXJGaWVsZHMoKTsKICAgICBmb3IgKEhUVFBIZWFk
ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLmJlZ2luKCk7IGl0ICE9IG1hcC5lbmQoKTsg
KytpdCkKLSAgICAgICAgdmlzaXRvci0+dmlzaXRIZWFkZXIoaXQtPmZpcnN0LCBpdC0+c2Vjb25k
KTsKKyAgICAgICAgdmlzaXRvci0+dmlzaXRIZWFkZXIoaXQtPmtleSwgaXQtPnZhbHVlKTsKIH0K
IAogZG91YmxlIFdlYlVSTFJlc3BvbnNlOjpsYXN0TW9kaWZpZWREYXRlKCkgY29uc3QKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9u
aXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5UmVmcmVz
aE1vbml0b3IuY3BwCmluZGV4IDMwZDhkM2QuLmY4OTEwM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9yLmNw
cApAQCAtMTM3LDcgKzEzNyw3IEBAIERpc3BsYXlSZWZyZXNoTW9uaXRvciogRGlzcGxheVJlZnJl
c2hNb25pdG9yTWFuYWdlcjo6ZW5zdXJlTW9uaXRvckZvckNsaWVudChEaXNwCiAgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgcmV0dXJuIGl0LT5zZWNvbmQuZ2V0KCk7CisgICAg
cmV0dXJuIGl0LT52YWx1ZS5nZXQoKTsKIH0KIAogdm9pZCBEaXNwbGF5UmVmcmVzaE1vbml0b3JN
YW5hZ2VyOjpyZWdpc3RlckNsaWVudChEaXNwbGF5UmVmcmVzaE1vbml0b3JDbGllbnQqIGNsaWVu
dCkKQEAgLTE1Nyw3ICsxNTcsNyBAQCB2b2lkIERpc3BsYXlSZWZyZXNoTW9uaXRvck1hbmFnZXI6
OnVucmVnaXN0ZXJDbGllbnQoRGlzcGxheVJlZnJlc2hNb25pdG9yQ2xpZW50KgogICAgIGlmIChp
dCA9PSBtX21vbml0b3JzLmVuZCgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgRGlzcGxh
eVJlZnJlc2hNb25pdG9yKiBtb25pdG9yID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICBEaXNwbGF5
UmVmcmVzaE1vbml0b3IqIG1vbml0b3IgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgaWYgKG1vbml0
b3ItPnJlbW92ZUNsaWVudChjbGllbnQpKSB7CiAgICAgICAgIGlmICghbW9uaXRvci0+aGFzQ2xp
ZW50cygpKQogICAgICAgICAgICAgbV9tb25pdG9ycy5yZW1vdmUoaXQpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAKaW5kZXggNDdmMjUxYy4uN2E0
ZTljNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
Y2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUu
Y3BwCkBAIC0xOTksNyArMTk5LDcgQEAgRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpnZXRD
YWNoZWRGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm8KICAgICAgICAg
Z0ZvbnRQbGF0Zm9ybURhdGFDYWNoZS0+c2V0KGtleSwgcmVzdWx0KTsKICAgICAgICAgZm91bmRS
ZXN1bHQgPSByZXN1bHQ7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgcmVzdWx0ID0gaXQtPnNlY29u
ZDsKKyAgICAgICAgcmVzdWx0ID0gaXQtPnZhbHVlOwogICAgICAgICBmb3VuZFJlc3VsdCA9IHRy
dWU7CiAgICAgfQogCkBAIC0yOTQsMjAgKzI5NCwyMCBAQCBTaW1wbGVGb250RGF0YSogRm9udENh
Y2hlOjpnZXRDYWNoZWRGb250RGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhKiBwbGF0Zm9ybURh
dAogICAgICAgICByZXR1cm4gbmV3VmFsdWUuZmlyc3Q7CiAgICAgfQogCi0gICAgaWYgKCFyZXN1
bHQuZ2V0KCktPnNlY29uZC5zZWNvbmQpIHsKLSAgICAgICAgQVNTRVJUKGdJbmFjdGl2ZUZvbnRE
YXRhLT5jb250YWlucyhyZXN1bHQuZ2V0KCktPnNlY29uZC5maXJzdCkpOwotICAgICAgICBnSW5h
Y3RpdmVGb250RGF0YS0+cmVtb3ZlKHJlc3VsdC5nZXQoKS0+c2Vjb25kLmZpcnN0KTsKKyAgICBp
ZiAoIXJlc3VsdC5nZXQoKS0+dmFsdWUuc2Vjb25kKSB7CisgICAgICAgIEFTU0VSVChnSW5hY3Rp
dmVGb250RGF0YS0+Y29udGFpbnMocmVzdWx0LmdldCgpLT52YWx1ZS5maXJzdCkpOworICAgICAg
ICBnSW5hY3RpdmVGb250RGF0YS0+cmVtb3ZlKHJlc3VsdC5nZXQoKS0+dmFsdWUuZmlyc3QpOwog
ICAgIH0KIAogICAgIGlmIChzaG91bGRSZXRhaW4gPT0gUmV0YWluKQotICAgICAgICByZXN1bHQu
Z2V0KCktPnNlY29uZC5zZWNvbmQrKzsKLSAgICBlbHNlIGlmICghcmVzdWx0LmdldCgpLT5zZWNv
bmQuc2Vjb25kKSB7CisgICAgICAgIHJlc3VsdC5nZXQoKS0+dmFsdWUuc2Vjb25kKys7CisgICAg
ZWxzZSBpZiAoIXJlc3VsdC5nZXQoKS0+dmFsdWUuc2Vjb25kKSB7CiAgICAgICAgIC8vIElmIHNo
b3VsZFJldGFpbiBpcyBEb05vdFJldGFpbiBhbmQgY291bnQgaXMgMCwgd2Ugd2FudCB0byByZW1v
dmUgdGhlIGZvbnREYXRhIGZyb20gCiAgICAgICAgIC8vIGdJbmFjdGl2ZUZvbnREYXRhIChhYm92
ZSkgYW5kIHJlLWFkZCBoZXJlIHRvIHVwZGF0ZSBMUlUgcG9zaXRpb24uCi0gICAgICAgIGdJbmFj
dGl2ZUZvbnREYXRhLT5hZGQocmVzdWx0LmdldCgpLT5zZWNvbmQuZmlyc3QpOworICAgICAgICBn
SW5hY3RpdmVGb250RGF0YS0+YWRkKHJlc3VsdC5nZXQoKS0+dmFsdWUuZmlyc3QpOwogICAgIH0K
IAotICAgIHJldHVybiByZXN1bHQuZ2V0KCktPnNlY29uZC5maXJzdDsKKyAgICByZXR1cm4gcmVz
dWx0LmdldCgpLT52YWx1ZS5maXJzdDsKIH0KIAogU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6
Z2V0Tm9uUmV0YWluZWRMYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlv
biYgZm9udERlc2NyaXB0aW9uKQpAQCAtMzIzLDggKzMyMyw4IEBAIHZvaWQgRm9udENhY2hlOjpy
ZWxlYXNlRm9udERhdGEoY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKQogICAgIEZvbnRE
YXRhQ2FjaGU6Oml0ZXJhdG9yIGl0ID0gZ0ZvbnREYXRhQ2FjaGUtPmZpbmQoZm9udERhdGEtPnBs
YXRmb3JtRGF0YSgpKTsKICAgICBBU1NFUlQoaXQgIT0gZ0ZvbnREYXRhQ2FjaGUtPmVuZCgpKTsK
IAotICAgIEFTU0VSVChpdC0+c2Vjb25kLnNlY29uZCk7Ci0gICAgaWYgKCEtLWl0LT5zZWNvbmQu
c2Vjb25kKQorICAgIEFTU0VSVChpdC0+dmFsdWUuc2Vjb25kKTsKKyAgICBpZiAoIS0taXQtPnZh
bHVlLnNlY29uZCkKICAgICAgICAgZ0luYWN0aXZlRm9udERhdGEtPmFkZChmb250RGF0YSk7CiB9
CiAKQEAgLTM3Miw4ICszNzIsOCBAQCB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnRE
YXRhKGludCBjb3VudCkKICAgICAgICAga2V5c1RvUmVtb3ZlLnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkoZ0ZvbnRQbGF0Zm9ybURhdGFDYWNoZS0+c2l6ZSgpKTsKICAgICAgICAgRm9udFBsYXRmb3Jt
RGF0YUNhY2hlOjppdGVyYXRvciBwbGF0Zm9ybURhdGFFbmQgPSBnRm9udFBsYXRmb3JtRGF0YUNh
Y2hlLT5lbmQoKTsKICAgICAgICAgZm9yIChGb250UGxhdGZvcm1EYXRhQ2FjaGU6Oml0ZXJhdG9y
IHBsYXRmb3JtRGF0YSA9IGdGb250UGxhdGZvcm1EYXRhQ2FjaGUtPmJlZ2luKCk7IHBsYXRmb3Jt
RGF0YSAhPSBwbGF0Zm9ybURhdGFFbmQ7ICsrcGxhdGZvcm1EYXRhKSB7Ci0gICAgICAgICAgICBp
ZiAocGxhdGZvcm1EYXRhLT5zZWNvbmQgJiYgIWdGb250RGF0YUNhY2hlLT5jb250YWlucygqcGxh
dGZvcm1EYXRhLT5zZWNvbmQpKQotICAgICAgICAgICAgICAgIGtleXNUb1JlbW92ZS5hcHBlbmQo
cGxhdGZvcm1EYXRhLT5maXJzdCk7CisgICAgICAgICAgICBpZiAocGxhdGZvcm1EYXRhLT52YWx1
ZSAmJiAhZ0ZvbnREYXRhQ2FjaGUtPmNvbnRhaW5zKCpwbGF0Zm9ybURhdGEtPnZhbHVlKSkKKyAg
ICAgICAgICAgICAgICBrZXlzVG9SZW1vdmUuYXBwZW5kKHBsYXRmb3JtRGF0YS0+a2V5KTsKICAg
ICAgICAgfQogICAgICAgICAKICAgICAgICAgc2l6ZV90IGtleXNUb1JlbW92ZUNvdW50ID0ga2V5
c1RvUmVtb3ZlLnNpemUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dseXBoUGFnZVRyZWVOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dseXBoUGFnZVRyZWVOb2RlLmNwcAppbmRleCA4N2U5M2ZkLi42MzVlYzdiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2VUcmVlTm9k
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlVHJl
ZU5vZGUuY3BwCkBAIC03NCw3ICs3NCw3IEBAIHNpemVfdCBHbHlwaFBhZ2VUcmVlTm9kZTo6dHJl
ZUdseXBoUGFnZUNvdW50KCkKICAgICBpZiAocm9vdHMpIHsKICAgICAgICAgSGFzaE1hcDxpbnQs
IEdseXBoUGFnZVRyZWVOb2RlKj46Oml0ZXJhdG9yIGVuZCA9IHJvb3RzLT5lbmQoKTsKICAgICAg
ICAgZm9yIChIYXNoTWFwPGludCwgR2x5cGhQYWdlVHJlZU5vZGUqPjo6aXRlcmF0b3IgaXQgPSBy
b290cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgY291bnQgKz0gaXQt
PnNlY29uZC0+cGFnZUNvdW50KCk7CisgICAgICAgICAgICBjb3VudCArPSBpdC0+dmFsdWUtPnBh
Z2VDb3VudCgpOwogICAgIH0KICAgICAKICAgICBpZiAocGFnZVplcm9Sb290KQpAQCAtODgsNyAr
ODgsNyBAQCBzaXplX3QgR2x5cGhQYWdlVHJlZU5vZGU6OnBhZ2VDb3VudCgpIGNvbnN0CiAgICAg
c2l6ZV90IGNvdW50ID0gbV9wYWdlICYmIG1fcGFnZS0+b3duZXIoKSA9PSB0aGlzID8gMSA6IDA7
CiAgICAgSGFzaE1hcDxjb25zdCBGb250RGF0YSosIEdseXBoUGFnZVRyZWVOb2RlKj46OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IG1fY2hpbGRyZW4uZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPGNvbnN0
IEZvbnREYXRhKiwgR2x5cGhQYWdlVHJlZU5vZGUqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2No
aWxkcmVuLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgY291bnQgKz0gaXQtPnNl
Y29uZC0+cGFnZUNvdW50KCk7CisgICAgICAgIGNvdW50ICs9IGl0LT52YWx1ZS0+cGFnZUNvdW50
KCk7CiAKICAgICByZXR1cm4gY291bnQ7CiB9CkBAIC05OSw3ICs5OSw3IEBAIHZvaWQgR2x5cGhQ
YWdlVHJlZU5vZGU6OnBydW5lVHJlZUN1c3RvbUZvbnREYXRhKGNvbnN0IEZvbnREYXRhKiBmb250
RGF0YSkKICAgICBpZiAocm9vdHMpIHsKICAgICAgICAgSGFzaE1hcDxpbnQsIEdseXBoUGFnZVRy
ZWVOb2RlKj46Oml0ZXJhdG9yIGVuZCA9IHJvb3RzLT5lbmQoKTsKICAgICAgICAgZm9yIChIYXNo
TWFwPGludCwgR2x5cGhQYWdlVHJlZU5vZGUqPjo6aXRlcmF0b3IgaXQgPSByb290cy0+YmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgaXQtPnNlY29uZC0+cHJ1bmVDdXN0b21G
b250RGF0YShmb250RGF0YSk7CisgICAgICAgICAgICBpdC0+dmFsdWUtPnBydW5lQ3VzdG9tRm9u
dERhdGEoZm9udERhdGEpOwogICAgIH0KICAgICAKICAgICBpZiAocGFnZVplcm9Sb290KQpAQCAt
MTExLDcgKzExMSw3IEBAIHZvaWQgR2x5cGhQYWdlVHJlZU5vZGU6OnBydW5lVHJlZUZvbnREYXRh
KGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSkKICAgICBpZiAocm9vdHMpIHsKICAgICAg
ICAgSGFzaE1hcDxpbnQsIEdseXBoUGFnZVRyZWVOb2RlKj46Oml0ZXJhdG9yIGVuZCA9IHJvb3Rz
LT5lbmQoKTsKICAgICAgICAgZm9yIChIYXNoTWFwPGludCwgR2x5cGhQYWdlVHJlZU5vZGUqPjo6
aXRlcmF0b3IgaXQgPSByb290cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAg
ICAgaXQtPnNlY29uZC0+cHJ1bmVGb250RGF0YShmb250RGF0YSk7CisgICAgICAgICAgICBpdC0+
dmFsdWUtPnBydW5lRm9udERhdGEoZm9udERhdGEpOwogICAgIH0KICAgICAKICAgICBpZiAocGFn
ZVplcm9Sb290KQpAQCAtMzYyLDcgKzM2Miw3IEBAIHZvaWQgR2x5cGhQYWdlVHJlZU5vZGU6OnBy
dW5lQ3VzdG9tRm9udERhdGEoY29uc3QgRm9udERhdGEqIGZvbnREYXRhKQogICAgICAgICByZXR1
cm47CiAgICAgSGFzaE1hcDxjb25zdCBGb250RGF0YSosIEdseXBoUGFnZVRyZWVOb2RlKj46Oml0
ZXJhdG9yIGVuZCA9IG1fY2hpbGRyZW4uZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPGNvbnN0IEZv
bnREYXRhKiwgR2x5cGhQYWdlVHJlZU5vZGUqPjo6aXRlcmF0b3IgaXQgPSBtX2NoaWxkcmVuLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+cHJ1bmVDdXN0b21G
b250RGF0YShmb250RGF0YSk7CisgICAgICAgIGl0LT52YWx1ZS0+cHJ1bmVDdXN0b21Gb250RGF0
YShmb250RGF0YSk7CiB9CiAKIHZvaWQgR2x5cGhQYWdlVHJlZU5vZGU6OnBydW5lRm9udERhdGEo
Y29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhLCB1bnNpZ25lZCBsZXZlbCkKQEAgLTM3OCw3
ICszNzgsNyBAQCB2b2lkIEdseXBoUGFnZVRyZWVOb2RlOjpwcnVuZUZvbnREYXRhKGNvbnN0IFNp
bXBsZUZvbnREYXRhKiBmb250RGF0YSwgdW5zaWduZWQgbAogICAgIC8vIFBydW5lIGFueSBicmFu
Y2ggdGhhdCBjb250YWlucyB0aGlzIEZvbnREYXRhLgogICAgIEhhc2hNYXA8Y29uc3QgRm9udERh
dGEqLCBHbHlwaFBhZ2VUcmVlTm9kZSo+OjppdGVyYXRvciBjaGlsZCA9IG1fY2hpbGRyZW4uZmlu
ZChmb250RGF0YSk7CiAgICAgaWYgKGNoaWxkICE9IG1fY2hpbGRyZW4uZW5kKCkpIHsKLSAgICAg
ICAgR2x5cGhQYWdlVHJlZU5vZGUqIG5vZGUgPSBjaGlsZC0+c2Vjb25kOworICAgICAgICBHbHlw
aFBhZ2VUcmVlTm9kZSogbm9kZSA9IGNoaWxkLT52YWx1ZTsKICAgICAgICAgbV9jaGlsZHJlbi5y
ZW1vdmUoZm9udERhdGEpOwogICAgICAgICB1bnNpZ25lZCBjdXN0b21Gb250Q291bnQgPSBub2Rl
LT5tX2N1c3RvbUZvbnRDb3VudDsKICAgICAgICAgZGVsZXRlIG5vZGU7CkBAIC0zOTQsNyArMzk0
LDcgQEAgdm9pZCBHbHlwaFBhZ2VUcmVlTm9kZTo6cHJ1bmVGb250RGF0YShjb25zdCBTaW1wbGVG
b250RGF0YSogZm9udERhdGEsIHVuc2lnbmVkIGwKIAogICAgIEhhc2hNYXA8Y29uc3QgRm9udERh
dGEqLCBHbHlwaFBhZ2VUcmVlTm9kZSo+OjppdGVyYXRvciBlbmQgPSBtX2NoaWxkcmVuLmVuZCgp
OwogICAgIGZvciAoSGFzaE1hcDxjb25zdCBGb250RGF0YSosIEdseXBoUGFnZVRyZWVOb2RlKj46
Oml0ZXJhdG9yIGl0ID0gbV9jaGlsZHJlbi5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAg
ICAgIGl0LT5zZWNvbmQtPnBydW5lRm9udERhdGEoZm9udERhdGEsIGxldmVsKTsKKyAgICAgICAg
aXQtPnZhbHVlLT5wcnVuZUZvbnREYXRhKGZvbnREYXRhLCBsZXZlbCk7CiB9CiAKICNpZm5kZWYg
TkRFQlVHCkBAIC00MDYsOCArNDA2LDggQEAgdm9pZCBHbHlwaFBhZ2VUcmVlTm9kZTo6cHJ1bmVG
b250RGF0YShjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEsIHVuc2lnbmVkIGwKIAogICAg
ICAgICBIYXNoTWFwPGNvbnN0IEZvbnREYXRhKiwgR2x5cGhQYWdlVHJlZU5vZGUqPjo6aXRlcmF0
b3IgZW5kID0gbV9jaGlsZHJlbi5lbmQoKTsKICAgICAgICAgZm9yIChIYXNoTWFwPGNvbnN0IEZv
bnREYXRhKiwgR2x5cGhQYWdlVHJlZU5vZGUqPjo6aXRlcmF0b3IgaXQgPSBtX2NoaWxkcmVuLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgcHJpbnRmKCIlc1x0JXAgJXNc
biIsIGluZGVudC5kYXRhKCksIGl0LT5maXJzdCwgaXQtPmZpcnN0LT5kZXNjcmlwdGlvbigpLnV0
ZjgoKS5kYXRhKCkpOwotICAgICAgICAgICAgaXQtPnNlY29uZC0+c2hvd1N1YnRyZWUoKTsKKyAg
ICAgICAgICAgIHByaW50ZigiJXNcdCVwICVzXG4iLCBpbmRlbnQuZGF0YSgpLCBpdC0+a2V5LCBp
dC0+a2V5LT5kZXNjcmlwdGlvbigpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgaXQtPnZh
bHVlLT5zaG93U3VidHJlZSgpOwogICAgICAgICB9CiAgICAgICAgIGlmIChtX3N5c3RlbUZhbGxi
YWNrQ2hpbGQpIHsKICAgICAgICAgICAgIHByaW50ZigiJXNcdCogZmFsbGJhY2tcbiIsIGluZGVu
dC5kYXRhKCkpOwpAQCAtNDI1LDggKzQyNSw4IEBAIHZvaWQgc2hvd0dseXBoUGFnZVRyZWVzKCkK
ICAgICBzaG93R2x5cGhQYWdlVHJlZSgwKTsKICAgICBIYXNoTWFwPGludCwgV2ViQ29yZTo6R2x5
cGhQYWdlVHJlZU5vZGUqPjo6aXRlcmF0b3IgZW5kID0gV2ViQ29yZTo6R2x5cGhQYWdlVHJlZU5v
ZGU6OnJvb3RzLT5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8aW50LCBXZWJDb3JlOjpHbHlwaFBh
Z2VUcmVlTm9kZSo+OjppdGVyYXRvciBpdCA9IFdlYkNvcmU6OkdseXBoUGFnZVRyZWVOb2RlOjpy
b290cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIHByaW50ZigiXG5QYWdl
ICVkOlxuIiwgaXQtPmZpcnN0KTsKLSAgICAgICAgc2hvd0dseXBoUGFnZVRyZWUoaXQtPmZpcnN0
KTsKKyAgICAgICAgcHJpbnRmKCJcblBhZ2UgJWQ6XG4iLCBpdC0+a2V5KTsKKyAgICAgICAgc2hv
d0dseXBoUGFnZVRyZWUoaXQtPmtleSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyQW5pbWF0aW9uLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJBbmltYXRpb24uY3Bw
CmluZGV4IGZjNzRkNDUuLjc3NTUyMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJBbmltYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJBbmltYXRpb24uY3BwCkBAIC0xOTIs
NyArMTkyLDcgQEAgYm9vbCBHcmFwaGljc0xheWVyQW5pbWF0aW9uczo6aGFzQWN0aXZlQW5pbWF0
aW9uc09mVHlwZShBbmltYXRlZFByb3BlcnR5SUQgdHlwZSkKIHsKICAgICBIYXNoTWFwPFN0cmlu
ZywgVmVjdG9yPEdyYXBoaWNzTGF5ZXJBbmltYXRpb24+ID46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IG1fYW5pbWF0aW9ucy5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8R3Jh
cGhpY3NMYXllckFuaW1hdGlvbj4gPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2FuaW1hdGlvbnMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IFZlY3RvcjxHcmFwaGlj
c0xheWVyQW5pbWF0aW9uPiYgYW5pbWF0aW9ucyA9IGl0LT5zZWNvbmQ7CisgICAgICAgIGNvbnN0
IFZlY3RvcjxHcmFwaGljc0xheWVyQW5pbWF0aW9uPiYgYW5pbWF0aW9ucyA9IGl0LT52YWx1ZTsK
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhbmltYXRpb25zLnNpemUoKTsgKytpKSB7
CiAgICAgICAgICAgICBpZiAoYW5pbWF0aW9uc1tpXS5pc0FjdGl2ZSgpICYmIGFuaW1hdGlvbnNb
aV0ucHJvcGVydHkoKSA9PSB0eXBlKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAt
MjA1LDcgKzIwNSw3IEBAIGJvb2wgR3JhcGhpY3NMYXllckFuaW1hdGlvbnM6Omhhc1J1bm5pbmdB
bmltYXRpb25zKCkgY29uc3QKIHsKICAgICBIYXNoTWFwPFN0cmluZywgVmVjdG9yPEdyYXBoaWNz
TGF5ZXJBbmltYXRpb24+ID46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fYW5pbWF0aW9ucy5lbmQo
KTsKICAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8R3JhcGhpY3NMYXllckFuaW1hdGlv
bj4gPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2FuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IFZlY3RvcjxHcmFwaGljc0xheWVyQW5pbWF0aW9uPiYg
YW5pbWF0aW9ucyA9IGl0LT5zZWNvbmQ7CisgICAgICAgIGNvbnN0IFZlY3RvcjxHcmFwaGljc0xh
eWVyQW5pbWF0aW9uPiYgYW5pbWF0aW9ucyA9IGl0LT52YWx1ZTsKICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBhbmltYXRpb25zLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBpZiAo
YW5pbWF0aW9uc1tpXS5zdGF0ZSgpID09IEdyYXBoaWNzTGF5ZXJBbmltYXRpb246OlBsYXlpbmdT
dGF0ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI2OCw3ICsyNjgsNyBAQCB2
b2lkIEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zOjphZGQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBHcmFwaGljc0xheWVyQW5pbWF0aQogewogICAgIEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8R3Jh
cGhpY3NMYXllckFuaW1hdGlvbj4gPjo6aXRlcmF0b3IgaXQgPSBtX2FuaW1hdGlvbnMuZmluZChu
YW1lKTsKICAgICBpZiAoaXQgIT0gbV9hbmltYXRpb25zLmVuZCgpKSB7Ci0gICAgICAgIGl0LT5z
ZWNvbmQuYXBwZW5kKGFuaW1hdGlvbik7CisgICAgICAgIGl0LT52YWx1ZS5hcHBlbmQoYW5pbWF0
aW9uKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMjgzLDE2ICsyODMsMTYgQEAgdm9p
ZCBHcmFwaGljc0xheWVyQW5pbWF0aW9uczo6cGF1c2UoY29uc3QgU3RyaW5nJiBuYW1lLCBkb3Vi
bGUgb2Zmc2V0KQogICAgIGlmIChpdCA9PSBtX2FuaW1hdGlvbnMuZW5kKCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaXQtPnNlY29uZC5zaXplKCk7IGkr
KykgCi0gICAgICAgIGl0LT5zZWNvbmRbaV0ucGF1c2Uob2Zmc2V0KTsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGl0LT52YWx1ZS5zaXplKCk7IGkrKykgCisgICAgICAgIGl0LT52YWx1ZVtp
XS5wYXVzZShvZmZzZXQpOwogfQogCiB2b2lkIEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zOjphcHBs
eShHcmFwaGljc0xheWVyQW5pbWF0aW9uOjpDbGllbnQqIGNsaWVudCkKIHsKICAgICBIYXNoTWFw
PFN0cmluZywgVmVjdG9yPEdyYXBoaWNzTGF5ZXJBbmltYXRpb24+ID46Oml0ZXJhdG9yIGVuZCA9
IG1fYW5pbWF0aW9ucy5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8R3Jh
cGhpY3NMYXllckFuaW1hdGlvbj4gPjo6aXRlcmF0b3IgaXQgPSBtX2FuaW1hdGlvbnMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaXQt
PnNlY29uZC5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIGl0LT5zZWNvbmRbaV0uYXBwbHkoY2xp
ZW50KTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpdC0+dmFsdWUuc2l6ZSgpOyAr
K2kpCisgICAgICAgICAgICBpdC0+dmFsdWVbaV0uYXBwbHkoY2xpZW50KTsKICAgICB9CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2lu
Z1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2lu
Z1N0b3JlLmNwcAppbmRleCBiNDg1ZGNmLi5kZjdmYTdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmUuY3BwCkBAIC0xMTYs
OSArMTE2LDkgQEAgdm9pZCBUaWxlZEJhY2tpbmdTdG9yZTo6dXBkYXRlVGlsZUJ1ZmZlcnMoKQog
ICAgIFZlY3RvcjxSZWZQdHI8VGlsZT4gPiBkaXJ0eVRpbGVzOwogICAgIFRpbGVNYXA6Oml0ZXJh
dG9yIGVuZCA9IG1fdGlsZXMuZW5kKCk7CiAgICAgZm9yIChUaWxlTWFwOjppdGVyYXRvciBpdCA9
IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmICghaXQtPnNl
Y29uZC0+aXNEaXJ0eSgpKQorICAgICAgICBpZiAoIWl0LT52YWx1ZS0+aXNEaXJ0eSgpKQogICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGRpcnR5VGlsZXMuYXBwZW5kKGl0LT5zZWNvbmQp
OworICAgICAgICBkaXJ0eVRpbGVzLmFwcGVuZChpdC0+dmFsdWUpOwogICAgIH0KIAogICAgIGlm
IChkaXJ0eVRpbGVzLmlzRW1wdHkoKSkgewpAQCAtNDAxLDEzICs0MDEsMTMgQEAgYm9vbCBUaWxl
ZEJhY2tpbmdTdG9yZTo6cmVzaXplRWRnZVRpbGVzKCkKICAgICBWZWN0b3I8VGlsZTo6Q29vcmRp
bmF0ZT4gdGlsZXNUb1JlbW92ZTsKICAgICBUaWxlTWFwOjppdGVyYXRvciBlbmQgPSBtX3RpbGVz
LmVuZCgpOwogICAgIGZvciAoVGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBUaWxlOjpDb29yZGluYXRlIHRpbGVDb29yZGlu
YXRlID0gaXQtPnNlY29uZC0+Y29vcmRpbmF0ZSgpOwotICAgICAgICBJbnRSZWN0IHRpbGVSZWN0
ID0gaXQtPnNlY29uZC0+cmVjdCgpOworICAgICAgICBUaWxlOjpDb29yZGluYXRlIHRpbGVDb29y
ZGluYXRlID0gaXQtPnZhbHVlLT5jb29yZGluYXRlKCk7CisgICAgICAgIEludFJlY3QgdGlsZVJl
Y3QgPSBpdC0+dmFsdWUtPnJlY3QoKTsKICAgICAgICAgSW50UmVjdCBleHBlY3RlZFRpbGVSZWN0
ID0gdGlsZVJlY3RGb3JDb29yZGluYXRlKHRpbGVDb29yZGluYXRlKTsKICAgICAgICAgaWYgKGV4
cGVjdGVkVGlsZVJlY3QuaXNFbXB0eSgpKQogICAgICAgICAgICAgdGlsZXNUb1JlbW92ZS5hcHBl
bmQodGlsZUNvb3JkaW5hdGUpOwogICAgICAgICBlbHNlIGlmIChleHBlY3RlZFRpbGVSZWN0ICE9
IHRpbGVSZWN0KSB7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLT5yZXNpemUoZXhwZWN0ZWRUaWxl
UmVjdC5zaXplKCkpOworICAgICAgICAgICAgaXQtPnZhbHVlLT5yZXNpemUoZXhwZWN0ZWRUaWxl
UmVjdC5zaXplKCkpOwogICAgICAgICAgICAgd2FzUmVzaXplZCA9IHRydWU7CiAgICAgICAgIH0K
ICAgICB9CkBAIC00MjYsOCArNDI2LDggQEAgdm9pZCBUaWxlZEJhY2tpbmdTdG9yZTo6c2V0S2Vl
cFJlY3QoY29uc3QgSW50UmVjdCYga2VlcFJlY3QpCiAgICAgVmVjdG9yPFRpbGU6OkNvb3JkaW5h
dGU+IHRvUmVtb3ZlOwogICAgIFRpbGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fdGlsZXMuZW5kKCk7
CiAgICAgZm9yIChUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7Ci0gICAgICAgIFRpbGU6OkNvb3JkaW5hdGUgY29vcmRpbmF0ZSA9IGl0LT5z
ZWNvbmQtPmNvb3JkaW5hdGUoKTsKLSAgICAgICAgRmxvYXRSZWN0IHRpbGVSZWN0ID0gaXQtPnNl
Y29uZC0+cmVjdCgpOworICAgICAgICBUaWxlOjpDb29yZGluYXRlIGNvb3JkaW5hdGUgPSBpdC0+
dmFsdWUtPmNvb3JkaW5hdGUoKTsKKyAgICAgICAgRmxvYXRSZWN0IHRpbGVSZWN0ID0gaXQtPnZh
bHVlLT5yZWN0KCk7CiAgICAgICAgIGlmICghdGlsZVJlY3QuaW50ZXJzZWN0cyhrZWVwUmVjdEYp
KQogICAgICAgICAgICAgdG9SZW1vdmUuYXBwZW5kKGNvb3JkaW5hdGUpOwogICAgIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJD
QS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVy
Q0EuY3BwCmluZGV4IGUzYTU2NWQuLmM0NWEyZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcApAQCAtNDc3LDcg
KzQ3Nyw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjptb3ZlT3JDb3B5QW5pbWF0aW9ucyhNb3Zl
T3JDb3B5IG9wZXJhdGlvbiwgUGxhdGZvcm1DQUxheWVyCiAgICAgLy8gTG9vayBmb3IgcnVubmlu
ZyBhbmltYXRpb25zIGFmZmVjdGluZyB0aGlzIHByb3BlcnR5LgogICAgIEFuaW1hdGlvbnNNYXA6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcnVubmluZ0FuaW1hdGlvbnMuZW5kKCk7CiAgICAgZm9y
IChBbmltYXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fcnVubmluZ0FuaW1hdGlvbnMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IFZlY3RvcjxMYXllclBy
b3BlcnR5QW5pbWF0aW9uPiYgcHJvcGVydHlBbmltYXRpb25zID0gaXQtPnNlY29uZDsKKyAgICAg
ICAgY29uc3QgVmVjdG9yPExheWVyUHJvcGVydHlBbmltYXRpb24+JiBwcm9wZXJ0eUFuaW1hdGlv
bnMgPSBpdC0+dmFsdWU7CiAgICAgICAgIHNpemVfdCBudW1BbmltYXRpb25zID0gcHJvcGVydHlB
bmltYXRpb25zLnNpemUoKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1Bbmlt
YXRpb25zOyArK2kpIHsKICAgICAgICAgICAgIGNvbnN0IExheWVyUHJvcGVydHlBbmltYXRpb24m
IGN1cnJBbmltYXRpb24gPSBwcm9wZXJ0eUFuaW1hdGlvbnNbaV07CkBAIC03MTksNyArNzE5LDcg
QEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnBhdXNlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5p
bWF0aW9uTmFtZSwgZG91YmxlIHRpbWVPZmYKIAogICAgIEFuaW1hdGlvbnNUb1Byb2Nlc3NNYXA6
Oml0ZXJhdG9yIGl0ID0gbV9hbmltYXRpb25zVG9Qcm9jZXNzLmZpbmQoYW5pbWF0aW9uTmFtZSk7
CiAgICAgaWYgKGl0ICE9IG1fYW5pbWF0aW9uc1RvUHJvY2Vzcy5lbmQoKSkgewotICAgICAgICBB
bmltYXRpb25Qcm9jZXNzaW5nQWN0aW9uJiBwcm9jZXNzaW5nSW5mbyA9IGl0LT5zZWNvbmQ7Cisg
ICAgICAgIEFuaW1hdGlvblByb2Nlc3NpbmdBY3Rpb24mIHByb2Nlc3NpbmdJbmZvID0gaXQtPnZh
bHVlOwogICAgICAgICAvLyBJZiBhbiBhbmltYXRpb24gaXMgc2NoZWR1bGVkIHRvIGJlIHJlbW92
ZWQsIGRvbid0IGNoYW5nZSB0aGUgcmVtb3ZlIHRvIGEgcGF1c2UuCiAgICAgICAgIGlmIChwcm9j
ZXNzaW5nSW5mby5hY3Rpb24gIT0gUmVtb3ZlKQogICAgICAgICAgICAgcHJvY2Vzc2luZ0luZm8u
YWN0aW9uID0gUGF1c2U7CkBAIC04NTQsNyArODU0LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6
OmxheWVyRGlkRGlzcGxheShQbGF0Zm9ybUxheWVyKiBsYXllcikKICAgICBpZiAobGF5ZXJDbG9u
ZU1hcCkgewogICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9u
ZU1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBQ
bGF0Zm9ybUNBTGF5ZXIqIGN1cnJDbG9uZSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAg
ICBQbGF0Zm9ybUNBTGF5ZXIqIGN1cnJDbG9uZSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAg
ICAgIGlmICghY3VyckNsb25lKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCkBAIC0xMTk2
LDEwICsxMTk2LDEwIEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVHZW9tZXRyeShmbG9h
dCBwYWdlU2NhbGVGYWN0b3IsIGNvbnN0IEZsb2F0UG9pbnQmIHBvCiAgICAgICAgIGlmIChMYXll
ck1hcCogbGF5ZXJDbG9uZU1hcCA9IG1fc3RydWN0dXJhbExheWVyQ2xvbmVzLmdldCgpKSB7CiAg
ICAgICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+
ZW5kKCk7CiAgICAgICAgICAgICBmb3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGxh
eWVyQ2xvbmVNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgICAg
IFBsYXRmb3JtQ0FMYXllciogY2xvbmUgPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAg
ICAgIFBsYXRmb3JtQ0FMYXllciogY2xvbmUgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAg
ICAgICAgRmxvYXRQb2ludCBjbG9uZVBvc2l0aW9uID0gbGF5ZXJQb3NpdGlvbjsKIAotICAgICAg
ICAgICAgICAgIGlmIChtX3JlcGxpY2FMYXllciAmJiBpc1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQt
PmZpcnN0KSkgeworICAgICAgICAgICAgICAgIGlmIChtX3JlcGxpY2FMYXllciAmJiBpc1JlcGxp
Y2F0ZWRSb290Q2xvbmUoaXQtPmtleSkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gTWFpbnRh
aW4gdGhlIHNwZWNpYWwtY2FzZSBwb3NpdGlvbiBmb3IgdGhlIHJvb3Qgb2YgYSBjbG9uZSBzdWJ0
cmVlLAogICAgICAgICAgICAgICAgICAgICAvLyB3aGljaCB3ZSBzZXQgdXAgaW4gcmVwbGljYXRl
ZExheWVyUm9vdCgpLgogICAgICAgICAgICAgICAgICAgICBjbG9uZVBvc2l0aW9uID0gcG9zaXRp
b25Gb3JDbG9uZVJvb3RMYXllcigpOwpAQCAtMTIyMywxMCArMTIyMywxMCBAQCB2b2lkIEdyYXBo
aWNzTGF5ZXJDQTo6dXBkYXRlR2VvbWV0cnkoZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBjb25zdCBG
bG9hdFBvaW50JiBwbwogICAgIGlmIChMYXllck1hcCogbGF5ZXJDbG9uZU1hcCA9IG1fbGF5ZXJD
bG9uZXMuZ2V0KCkpIHsKICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxh
eWVyQ2xvbmVNYXAtPmVuZCgpOwogICAgICAgICBmb3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IGxheWVyQ2xvbmVNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAg
ICAgICAgUGxhdGZvcm1DQUxheWVyKiBjbG9uZSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAg
ICAgICBQbGF0Zm9ybUNBTGF5ZXIqIGNsb25lID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAg
ICAgRmxvYXRQb2ludCBjbG9uZVBvc2l0aW9uID0gYWRqdXN0ZWRQb3NpdGlvbjsKIAotICAgICAg
ICAgICAgaWYgKCFtX3N0cnVjdHVyYWxMYXllciAmJiBtX3JlcGxpY2FMYXllciAmJiBpc1JlcGxp
Y2F0ZWRSb290Q2xvbmUoaXQtPmZpcnN0KSkgeworICAgICAgICAgICAgaWYgKCFtX3N0cnVjdHVy
YWxMYXllciAmJiBtX3JlcGxpY2FMYXllciAmJiBpc1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQtPmtl
eSkpIHsKICAgICAgICAgICAgICAgICAvLyBNYWludGFpbiB0aGUgc3BlY2lhbC1jYXNlIHBvc2l0
aW9uIGZvciB0aGUgcm9vdCBvZiBhIGNsb25lIHN1YnRyZWUsCiAgICAgICAgICAgICAgICAgLy8g
d2hpY2ggd2Ugc2V0IHVwIGluIHJlcGxpY2F0ZWRMYXllclJvb3QoKS4KICAgICAgICAgICAgICAg
ICBjbG9uZVBvc2l0aW9uID0gcG9zaXRpb25Gb3JDbG9uZVJvb3RMYXllcigpOwpAQCAtMTI0Niw4
ICsxMjQ2LDggQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZVRyYW5zZm9ybSgpCiAgICAg
aWYgKExheWVyTWFwKiBsYXllckNsb25lTWFwID0gcHJpbWFyeUxheWVyQ2xvbmVzKCkpIHsKICAg
ICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxheWVyQ2xvbmVNYXAtPmVuZCgp
OwogICAgICAgICBmb3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGxheWVyQ2xvbmVN
YXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgUGxhdGZvcm1DQUxh
eWVyKiBjdXJyTGF5ZXIgPSBpdC0+c2Vjb25kLmdldCgpOwotICAgICAgICAgICAgaWYgKG1fcmVw
bGljYUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9uZShpdC0+Zmlyc3QpKSB7CisgICAgICAg
ICAgICBQbGF0Zm9ybUNBTGF5ZXIqIGN1cnJMYXllciA9IGl0LT52YWx1ZS5nZXQoKTsKKyAgICAg
ICAgICAgIGlmIChtX3JlcGxpY2FMYXllciAmJiBpc1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQtPmtl
eSkpIHsKICAgICAgICAgICAgICAgICAvLyBNYWludGFpbiB0aGUgc3BlY2lhbC1jYXNlIHRyYW5z
Zm9ybSBmb3IgdGhlIHJvb3Qgb2YgYSBjbG9uZSBzdWJ0cmVlLAogICAgICAgICAgICAgICAgIC8v
IHdoaWNoIHdlIHNldCB1cCBpbiByZXBsaWNhdGVkTGF5ZXJSb290KCkuCiAgICAgICAgICAgICAg
ICAgY3VyckxheWVyLT5zZXRUcmFuc2Zvcm0oVHJhbnNmb3JtYXRpb25NYXRyaXgoKSk7CkBAIC0x
MjY0LDcgKzEyNjQsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlQ2hpbGRyZW5UcmFu
c2Zvcm0oKQogICAgIGlmIChMYXllck1hcCogbGF5ZXJDbG9uZU1hcCA9IHByaW1hcnlMYXllckNs
b25lcygpKSB7CiAgICAgICAgIExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBsYXllckNs
b25lTWFwLT5lbmQoKTsKICAgICAgICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBsYXllckNsb25lTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBp
dC0+c2Vjb25kLT5zZXRTdWJsYXllclRyYW5zZm9ybShtX2NoaWxkcmVuVHJhbnNmb3JtKTsKKyAg
ICAgICAgICAgIGl0LT52YWx1ZS0+c2V0U3VibGF5ZXJUcmFuc2Zvcm0obV9jaGlsZHJlblRyYW5z
Zm9ybSk7CiAgICAgfQogfQogCkBAIC0xMjc1LDcgKzEyNzUsNyBAQCB2b2lkIEdyYXBoaWNzTGF5
ZXJDQTo6dXBkYXRlTWFza3NUb0JvdW5kcygpCiAgICAgaWYgKExheWVyTWFwKiBsYXllckNsb25l
TWFwID0gbV9sYXllckNsb25lcy5nZXQoKSkgewogICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KQotICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0TWFza3NUb0JvdW5kcyhtX21hc2tzVG9C
b3VuZHMpOworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRNYXNrc1RvQm91bmRzKG1fbWFza3NU
b0JvdW5kcyk7CiAgICAgfQogCiAgICAgdXBkYXRlRGVidWdJbmRpY2F0b3JzKCk7CkBAIC0xMjkz
LDcgKzEyOTMsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlQ29udGVudHNWaXNpYmls
aXR5KCkKICAgICAgICAgaWYgKExheWVyTWFwKiBsYXllckNsb25lTWFwID0gbV9sYXllckNsb25l
cy5nZXQoKSkgewogICAgICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxh
eWVyQ2xvbmVNYXAtPmVuZCgpOwogICAgICAgICAgICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBsYXllckNsb25lTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAg
ICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0Q29udGVudHMoMCk7CisgICAgICAgICAgICAgICAg
aXQtPnZhbHVlLT5zZXRDb250ZW50cygwKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTEzMDUs
NyArMTMwNSw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVDb250ZW50c09wYXF1ZSgp
CiAgICAgaWYgKExheWVyTWFwKiBsYXllckNsb25lTWFwID0gbV9sYXllckNsb25lcy5nZXQoKSkg
ewogICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+
ZW5kKCk7CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJD
bG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgaXQtPnNlY29u
ZC0+c2V0T3BhcXVlKG1fY29udGVudHNPcGFxdWUpOworICAgICAgICAgICAgaXQtPnZhbHVlLT5z
ZXRPcGFxdWUobV9jb250ZW50c09wYXF1ZSk7CiAgICAgfQogfQogCkBAIC0xMzE3LDcgKzEzMTcs
NyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlQmFja2ZhY2VWaXNpYmlsaXR5KCkKICAg
ICAgICAgaWYgKExheWVyTWFwKiBsYXllckNsb25lTWFwID0gbV9zdHJ1Y3R1cmFsTGF5ZXJDbG9u
ZXMuZ2V0KCkpIHsKICAgICAgICAgICAgIExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBs
YXllckNsb25lTWFwLT5lbmQoKTsKICAgICAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAg
ICAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNldERvdWJsZVNpZGVkKG1fYmFja2ZhY2VWaXNpYmls
aXR5KTsKKyAgICAgICAgICAgICAgICBpdC0+dmFsdWUtPnNldERvdWJsZVNpZGVkKG1fYmFja2Zh
Y2VWaXNpYmlsaXR5KTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTMyNiw3ICsxMzI2LDcgQEAg
dm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUJhY2tmYWNlVmlzaWJpbGl0eSgpCiAgICAgaWYg
KExheWVyTWFwKiBsYXllckNsb25lTWFwID0gbV9sYXllckNsb25lcy5nZXQoKSkgewogICAgICAg
ICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAg
ICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0RG91
YmxlU2lkZWQobV9iYWNrZmFjZVZpc2liaWxpdHkpOworICAgICAgICAgICAgaXQtPnZhbHVlLT5z
ZXREb3VibGVTaWRlZChtX2JhY2tmYWNlVmlzaWJpbGl0eSk7CiAgICAgfQogfQogCkBAIC0xMzM4
LDEwICsxMzM4LDEwIEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVGaWx0ZXJzKCkKICAg
ICBpZiAoTGF5ZXJNYXAqIGxheWVyQ2xvbmVNYXAgPSBwcmltYXJ5TGF5ZXJDbG9uZXMoKSkgewog
ICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5k
KCk7CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9u
ZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAobV9yZXBs
aWNhTGF5ZXIgJiYgaXNSZXBsaWNhdGVkUm9vdENsb25lKGl0LT5maXJzdCkpCisgICAgICAgICAg
ICBpZiAobV9yZXBsaWNhTGF5ZXIgJiYgaXNSZXBsaWNhdGVkUm9vdENsb25lKGl0LT5rZXkpKQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRG
aWx0ZXJzKG1fZmlsdGVycyk7CisgICAgICAgICAgICBpdC0+dmFsdWUtPnNldEZpbHRlcnMobV9m
aWx0ZXJzKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTE0MzAsNyArMTQzMCw3IEBAIHZvaWQg
R3JhcGhpY3NMYXllckNBOjplbnN1cmVTdHJ1Y3R1cmFsTGF5ZXIoU3RydWN0dXJhbExheWVyUHVy
cG9zZSBwdXJwb3NlLCBmbG9hCiAgICAgaWYgKG1fbGF5ZXJDbG9uZXMpIHsKICAgICAgICAgTGF5
ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fbGF5ZXJDbG9uZXMtPmVuZCgpOwogICAgICAg
ICBmb3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fbGF5ZXJDbG9uZXMtPmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgUGxhdGZvcm1DQUxheWVyKiBjdXJy
TGF5ZXIgPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgUGxhdGZvcm1DQUxheWVyKiBj
dXJyTGF5ZXIgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBjdXJyTGF5ZXItPnNldFBv
c2l0aW9uKHBvaW50KTsKICAgICAgICAgICAgIGN1cnJMYXllci0+c2V0QW5jaG9yUG9pbnQoYW5j
aG9yUG9pbnQpOwogICAgICAgICAgICAgY3VyckxheWVyLT5zZXRUcmFuc2Zvcm0oVHJhbnNmb3Jt
YXRpb25NYXRyaXgoKSk7CkBAIC0xNDc1LDcgKzE0NzUsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJD
QTo6dXBkYXRlTGF5ZXJEcmF3c0NvbnRlbnQoZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBjb25zdCBG
bG9hdAogICAgICAgICBpZiAobV9sYXllckNsb25lcykgewogICAgICAgICAgICAgTGF5ZXJNYXA6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fbGF5ZXJDbG9uZXMtPmVuZCgpOwogICAgICAgICAgICAg
Zm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2xheWVyQ2xvbmVzLT5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0Q29udGVu
dHMoMCk7CisgICAgICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRDb250ZW50cygwKTsKICAgICAg
ICAgfQogICAgIH0KICAgICB1cGRhdGVEZWJ1Z0luZGljYXRvcnMoKTsKQEAgLTE1MjYsNyArMTUy
Niw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVDb250ZW50c0ltYWdlKCkKICAgICAg
ICAgaWYgKG1fY29udGVudHNMYXllckNsb25lcykgewogICAgICAgICAgICAgTGF5ZXJNYXA6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IG1fY29udGVudHNMYXllckNsb25lcy0+ZW5kKCk7CiAgICAgICAg
ICAgICBmb3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fY29udGVudHNMYXllckNs
b25lcy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgICAgIGl0LT5zZWNv
bmQtPnNldENvbnRlbnRzKG1fY29udGVudHNMYXllci0+Y29udGVudHMoKSk7CisgICAgICAgICAg
ICAgICAgaXQtPnZhbHVlLT5zZXRDb250ZW50cyhtX2NvbnRlbnRzTGF5ZXItPmNvbnRlbnRzKCkp
OwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICB1cGRhdGVDb250ZW50c1JlY3QoKTsKQEAg
LTE1NzAsOCArMTU3MCw4IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVDb250ZW50c1Jl
Y3QoKQogICAgIGlmIChtX2NvbnRlbnRzTGF5ZXJDbG9uZXMpIHsKICAgICAgICAgTGF5ZXJNYXA6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fY29udGVudHNMYXllckNsb25lcy0+ZW5kKCk7CiAgICAg
ICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9jb250ZW50c0xheWVyQ2xv
bmVzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQt
PnNldFBvc2l0aW9uKHBvaW50KTsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNldEJvdW5kcyhy
ZWN0KTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+c2V0UG9zaXRpb24ocG9pbnQpOworICAgICAg
ICAgICAgaXQtPnZhbHVlLT5zZXRCb3VuZHMocmVjdCk7CiAgICAgICAgIH0KICAgICB9CiB9CkBA
IC0xNTg2LDggKzE1ODYsOCBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlTWFza0xheWVy
KCkKICAgICBpZiAoTGF5ZXJNYXAqIGxheWVyQ2xvbmVNYXAgPSBtX2xheWVyQ2xvbmVzLmdldCgp
KSB7CiAgICAgICAgIExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBsYXllckNsb25lTWFw
LT5lbmQoKTsKICAgICAgICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXll
ckNsb25lTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsgICAgICAgICAgICAKLSAgICAg
ICAgICAgIFBsYXRmb3JtQ0FMYXllciogbWFza0Nsb25lID0gbWFza0xheWVyQ2xvbmVNYXAgPyBt
YXNrTGF5ZXJDbG9uZU1hcC0+Z2V0KGl0LT5maXJzdCkuZ2V0KCkgOiAwOwotICAgICAgICAgICAg
aXQtPnNlY29uZC0+c2V0TWFzayhtYXNrQ2xvbmUpOworICAgICAgICAgICAgUGxhdGZvcm1DQUxh
eWVyKiBtYXNrQ2xvbmUgPSBtYXNrTGF5ZXJDbG9uZU1hcCA/IG1hc2tMYXllckNsb25lTWFwLT5n
ZXQoaXQtPmtleSkuZ2V0KCkgOiAwOworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRNYXNrKG1h
c2tDbG9uZSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0xNjUxLDEzICsxNjUxLDEzIEBAIHZv
aWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVMYXllckFuaW1hdGlvbnMoKQogICAgIGlmIChtX2Fu
aW1hdGlvbnNUb1Byb2Nlc3Muc2l6ZSgpKSB7CiAgICAgICAgIEFuaW1hdGlvbnNUb1Byb2Nlc3NN
YXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fYW5pbWF0aW9uc1RvUHJvY2Vzcy5lbmQoKTsKICAg
ICAgICAgZm9yIChBbmltYXRpb25zVG9Qcm9jZXNzTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1f
YW5pbWF0aW9uc1RvUHJvY2Vzcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAg
ICAgIGNvbnN0IFN0cmluZyYgY3VyckFuaW1hdGlvbk5hbWUgPSBpdC0+Zmlyc3Q7CisgICAgICAg
ICAgICBjb25zdCBTdHJpbmcmIGN1cnJBbmltYXRpb25OYW1lID0gaXQtPmtleTsKICAgICAgICAg
ICAgIEFuaW1hdGlvbnNNYXA6Oml0ZXJhdG9yIGFuaW1hdGlvbkl0ID0gbV9ydW5uaW5nQW5pbWF0
aW9ucy5maW5kKGN1cnJBbmltYXRpb25OYW1lKTsKICAgICAgICAgICAgIGlmIChhbmltYXRpb25J
dCA9PSBtX3J1bm5pbmdBbmltYXRpb25zLmVuZCgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogCi0gICAgICAgICAgICBjb25zdCBBbmltYXRpb25Qcm9jZXNzaW5nQWN0aW9uJiBwcm9jZXNz
aW5nSW5mbyA9IGl0LT5zZWNvbmQ7Ci0gICAgICAgICAgICBjb25zdCBWZWN0b3I8TGF5ZXJQcm9w
ZXJ0eUFuaW1hdGlvbj4mIGFuaW1hdGlvbnMgPSBhbmltYXRpb25JdC0+c2Vjb25kOworICAgICAg
ICAgICAgY29uc3QgQW5pbWF0aW9uUHJvY2Vzc2luZ0FjdGlvbiYgcHJvY2Vzc2luZ0luZm8gPSBp
dC0+dmFsdWU7CisgICAgICAgICAgICBjb25zdCBWZWN0b3I8TGF5ZXJQcm9wZXJ0eUFuaW1hdGlv
bj4mIGFuaW1hdGlvbnMgPSBhbmltYXRpb25JdC0+dmFsdWU7CiAgICAgICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgICAg
ICBjb25zdCBMYXllclByb3BlcnR5QW5pbWF0aW9uJiBjdXJyQW5pbWF0aW9uID0gYW5pbWF0aW9u
c1tpXTsKICAgICAgICAgICAgICAgICBzd2l0Y2ggKHByb2Nlc3NpbmdJbmZvLmFjdGlvbikgewpA
QCAtMTY4OSw3ICsxNjg5LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUxheWVyQW5p
bWF0aW9ucygpCiAgICAgICAgICAgICAgICAgYW5pbWF0aW9ucy5hcHBlbmQocGVuZGluZ0FuaW1h
dGlvbik7CiAgICAgICAgICAgICAgICAgbV9ydW5uaW5nQW5pbWF0aW9ucy5hZGQocGVuZGluZ0Fu
aW1hdGlvbi5tX25hbWUsIGFuaW1hdGlvbnMpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICBWZWN0b3I8TGF5ZXJQcm9wZXJ0eUFuaW1hdGlvbj4mIGFuaW1hdGlvbnMgPSBp
dC0+c2Vjb25kOworICAgICAgICAgICAgICAgIFZlY3RvcjxMYXllclByb3BlcnR5QW5pbWF0aW9u
PiYgYW5pbWF0aW9ucyA9IGl0LT52YWx1ZTsKICAgICAgICAgICAgICAgICBhbmltYXRpb25zLmFw
cGVuZChwZW5kaW5nQW5pbWF0aW9uKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTcx
NCwxMSArMTcxNCwxMSBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c2V0QW5pbWF0aW9uT25MYXll
cihQbGF0Zm9ybUNBQW5pbWF0aW9uKiBjYUFuaW0sIEFuaW1hdGVkUAogICAgICAgICBMYXllck1h
cDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAgICAgIGZv
ciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICAvLyBTa2lwIGltbWVkaWF0ZSByZXBsaWNh
cywgc2luY2UgdGhleSBtb3ZlIHdpdGggdGhlIG9yaWdpbmFsLgotICAgICAgICAgICAgaWYgKG1f
cmVwbGljYUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9uZShpdC0+Zmlyc3QpKQorICAgICAg
ICAgICAgaWYgKG1fcmVwbGljYUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9uZShpdC0+a2V5
KSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgaXQtPnNlY29uZC0+
cmVtb3ZlQW5pbWF0aW9uRm9yS2V5KGFuaW1hdGlvbklEKTsKLSAgICAgICAgICAgIGl0LT5zZWNv
bmQtPmFkZEFuaW1hdGlvbkZvcktleShhbmltYXRpb25JRCwgY2FBbmltKTsKKyAgICAgICAgICAg
IGl0LT52YWx1ZS0+cmVtb3ZlQW5pbWF0aW9uRm9yS2V5KGFuaW1hdGlvbklEKTsKKyAgICAgICAg
ICAgIGl0LT52YWx1ZS0+YWRkQW5pbWF0aW9uRm9yS2V5KGFuaW1hdGlvbklELCBjYUFuaW0pOwog
ICAgICAgICB9CiAgICAgfQogfQpAQCAtMTc1MywxMCArMTc1MywxMCBAQCBib29sIEdyYXBoaWNz
TGF5ZXJDQTo6cmVtb3ZlQ0FBbmltYXRpb25Gcm9tTGF5ZXIoQW5pbWF0ZWRQcm9wZXJ0eUlEIHBy
b3BlcnR5LCBjbwogICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJD
bG9uZU1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAg
ICAvLyBTa2lwIGltbWVkaWF0ZSByZXBsaWNhcywgc2luY2UgdGhleSBtb3ZlIHdpdGggdGhlIG9y
aWdpbmFsLgotICAgICAgICAgICAgaWYgKG1fcmVwbGljYUxheWVyICYmIGlzUmVwbGljYXRlZFJv
b3RDbG9uZShpdC0+Zmlyc3QpKQorICAgICAgICAgICAgaWYgKG1fcmVwbGljYUxheWVyICYmIGlz
UmVwbGljYXRlZFJvb3RDbG9uZShpdC0+a2V5KSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
IAotICAgICAgICAgICAgaXQtPnNlY29uZCAtPnJlbW92ZUFuaW1hdGlvbkZvcktleShhbmltYXRp
b25JRCk7CisgICAgICAgICAgICBpdC0+dmFsdWUtPnJlbW92ZUFuaW1hdGlvbkZvcktleShhbmlt
YXRpb25JRCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIHRydWU7CkBAIC0xNzg1LDkg
KzE3ODUsOSBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6cGF1c2VDQUFuaW1hdGlvbk9uTGF5ZXIo
QW5pbWF0ZWRQcm9wZXJ0eUlEIHByb3BlcnR5LCBjb25zdAogICAgICAgICBMYXllck1hcDo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAoTGF5
ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7CiAgICAgICAgICAgICAvLyBTa2lwIGltbWVkaWF0ZSByZXBsaWNhcywgc2lu
Y2UgdGhleSBtb3ZlIHdpdGggdGhlIG9yaWdpbmFsLgotICAgICAgICAgICAgaWYgKG1fcmVwbGlj
YUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9uZShpdC0+Zmlyc3QpKQorICAgICAgICAgICAg
aWYgKG1fcmVwbGljYUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9uZShpdC0+a2V5KSkKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPmFkZEFuaW1h
dGlvbkZvcktleShhbmltYXRpb25JRCwgbmV3QW5pbS5nZXQoKSk7CisgICAgICAgICAgICBpdC0+
dmFsdWUtPmFkZEFuaW1hdGlvbkZvcktleShhbmltYXRpb25JRCwgbmV3QW5pbS5nZXQoKSk7CiAg
ICAgICAgIH0KICAgICB9CiB9CkBAIC0yMzA3LDggKzIzMDcsOCBAQCB2b2lkIEdyYXBoaWNzTGF5
ZXJDQTo6c3VzcGVuZEFuaW1hdGlvbnMoZG91YmxlIHRpbWUpCiAgICAgaWYgKExheWVyTWFwKiBs
YXllckNsb25lTWFwID0gcHJpbWFyeUxheWVyQ2xvbmVzKCkpIHsKICAgICAgICAgTGF5ZXJNYXA6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxheWVyQ2xvbmVNYXAtPmVuZCgpOwogICAgICAgICBmb3Ig
KExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGxheWVyQ2xvbmVNYXAtPmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0U3BlZWQoMCk7Ci0g
ICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRUaW1lT2Zmc2V0KHQpOworICAgICAgICAgICAgaXQt
PnZhbHVlLT5zZXRTcGVlZCgwKTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+c2V0VGltZU9mZnNl
dCh0KTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTIzMjIsOCArMjMyMiw4IEBAIHZvaWQgR3Jh
cGhpY3NMYXllckNBOjpyZXN1bWVBbmltYXRpb25zKCkKICAgICBpZiAoTGF5ZXJNYXAqIGxheWVy
Q2xvbmVNYXAgPSBwcmltYXJ5TGF5ZXJDbG9uZXMoKSkgewogICAgICAgICBMYXllck1hcDo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAoTGF5
ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRTcGVlZCgxKTsKLSAgICAg
ICAgICAgIGl0LT5zZWNvbmQtPnNldFRpbWVPZmZzZXQoMCk7CisgICAgICAgICAgICBpdC0+dmFs
dWUtPnNldFNwZWVkKDEpOworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRUaW1lT2Zmc2V0KDAp
OwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMjUzMywxMyArMjUzMywxMyBAQCBQYXNzUmVmUHRy
PFBsYXRmb3JtQ0FMYXllcj4gR3JhcGhpY3NMYXllckNBOjpmaW5kT3JNYWtlQ2xvbmUoQ2xvbmVJ
RCBjbG9uZUlELCBQbAogICAgIExheWVyTWFwOjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gY2xvbmVz
LT5hZGQoY2xvbmVJRCwgZHVtbXkpOwogICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsK
ICAgICAgICAgLy8gVmFsdWUgd2FzIG5vdCBhZGRlZCwgc28gaXQgZXhpc3RzIGFscmVhZHkuCi0g
ICAgICAgIHJlc3VsdExheWVyID0gYWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQuZ2V0KCk7Cisg
ICAgICAgIHJlc3VsdExheWVyID0gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKICAg
ICB9IGVsc2UgewogICAgICAgICByZXN1bHRMYXllciA9IGNsb25lTGF5ZXIoc291cmNlTGF5ZXIs
IGNsb25lTGV2ZWwpOwogI2lmbmRlZiBOREVCVUcKICAgICAgICAgcmVzdWx0TGF5ZXItPnNldE5h
bWUoU3RyaW5nOjpmb3JtYXQoIkNsb25lICVkIG9mIGxheWVyICVwIiwgY2xvbmVJRFswVV0sIHNv
dXJjZUxheWVyLT5wbGF0Zm9ybUxheWVyKCkpKTsKICNlbmRpZgotICAgICAgICBhZGRSZXN1bHQu
aXRlcmF0b3ItPnNlY29uZCA9IHJlc3VsdExheWVyOworICAgICAgICBhZGRSZXN1bHQuaXRlcmF0
b3ItPnZhbHVlID0gcmVzdWx0TGF5ZXI7CiAgICAgfQogCiAgICAgcmV0dXJuIHJlc3VsdExheWVy
OwpAQCAtMjczMSw5ICsyNzMxLDkgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnNldE9wYWNpdHlJ
bnRlcm5hbChmbG9hdCBhY2N1bXVsYXRlZE9wYWNpdHkpCiAgICAgaWYgKGxheWVyQ2xvbmVNYXAp
IHsKICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxheWVyQ2xvbmVNYXAt
PmVuZCgpOwogICAgICAgICBmb3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGxheWVy
Q2xvbmVNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgaWYgKG1f
cmVwbGljYUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9uZShpdC0+Zmlyc3QpKQorICAgICAg
ICAgICAgaWYgKG1fcmVwbGljYUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9uZShpdC0+a2V5
KSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNl
dE9wYWNpdHkobV9vcGFjaXR5KTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+c2V0T3BhY2l0eSht
X29wYWNpdHkpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMjc0NSwxMCArMjc0NSwxMCBAQCB2
b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlT3BhY2l0eU9uTGF5ZXIoKQogICAgIGlmIChMYXll
ck1hcCogbGF5ZXJDbG9uZU1hcCA9IHByaW1hcnlMYXllckNsb25lcygpKSB7CiAgICAgICAgIExh
eWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBsYXllckNsb25lTWFwLT5lbmQoKTsKICAgICAg
ICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXllckNsb25lTWFwLT5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGlmIChtX3JlcGxpY2FMYXllciAm
JiBpc1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQtPmZpcnN0KSkKKyAgICAgICAgICAgIGlmIChtX3Jl
cGxpY2FMYXllciAmJiBpc1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQtPmtleSkpCiAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNldE9wYWNpdHkobV9v
cGFjaXR5KTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+c2V0T3BhY2l0eShtX29wYWNpdHkpOwog
ICAgICAgICB9CiAgICAgICAgIAogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL21hYy9UaWxlQ2FjaGUubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYS9tYWMvVGlsZUNhY2hlLm1tCmluZGV4IGY3OWM2M2IuLmY5N2VkMWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9UaWxl
Q2FjaGUubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1Rp
bGVDYWNoZS5tbQpAQCAtOTAsNyArOTAsNyBAQCB2b2lkIFRpbGVDYWNoZTo6dGlsZUNhY2hlTGF5
ZXJCb3VuZHNDaGFuZ2VkKCkKIHZvaWQgVGlsZUNhY2hlOjpzZXROZWVkc0Rpc3BsYXkoKQogewog
ICAgIGZvciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCksIGVu
ZCA9IG1fdGlsZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgW2l0LT5zZWNvbmQu
Z2V0KCkgc2V0TmVlZHNEaXNwbGF5XTsKKyAgICAgICAgW2l0LT52YWx1ZS5nZXQoKSBzZXROZWVk
c0Rpc3BsYXldOwogfQogCiB2b2lkIFRpbGVDYWNoZTo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNv
bnN0IEludFJlY3QmIHJlY3QpCkBAIC0xNjcsOSArMTY3LDkgQEAgdm9pZCBUaWxlQ2FjaGU6OnNl
dFNjYWxlKENHRmxvYXQgc2NhbGUpCiAgICAgcmV2YWxpZGF0ZVRpbGVzKCk7CiAKICAgICBmb3Ig
KFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpLCBlbmQgPSBtX3Rp
bGVzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgW2l0LT5zZWNvbmQuZ2V0KCkg
c2V0Q29udGVudHNTY2FsZTpkZXZpY2VTY2FsZUZhY3Rvcl07CisgICAgICAgIFtpdC0+dmFsdWUu
Z2V0KCkgc2V0Q29udGVudHNTY2FsZTpkZXZpY2VTY2FsZUZhY3Rvcl07CiAKLSAgICAgICAgSW50
UmVjdCB0aWxlUmVjdCA9IHJlY3RGb3JUaWxlSW5kZXgoaXQtPmZpcnN0KTsKKyAgICAgICAgSW50
UmVjdCB0aWxlUmVjdCA9IHJlY3RGb3JUaWxlSW5kZXgoaXQtPmtleSk7CiAgICAgICAgIEZsb2F0
UmVjdCBzY2FsZWRUaWxlUmVjdCA9IHRpbGVSZWN0OwogCiAgICAgICAgIHNjYWxlZFRpbGVSZWN0
LnNjYWxlKDEgLyBtX3NjYWxlKTsKQEAgLTE4OSw3ICsxODksNyBAQCB2b2lkIFRpbGVDYWNoZTo6
c2V0QWNjZWxlcmF0ZXNEcmF3aW5nKGJvb2wgYWNjZWxlcmF0ZXNEcmF3aW5nKQogICAgIG1fYWNj
ZWxlcmF0ZXNEcmF3aW5nID0gYWNjZWxlcmF0ZXNEcmF3aW5nOwogCiAgICAgZm9yIChUaWxlTWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKSwgZW5kID0gbV90aWxlcy5lbmQo
KTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBbaXQtPnNlY29uZC5nZXQoKSBzZXRBY2NlbGVy
YXRlc0RyYXdpbmc6bV9hY2NlbGVyYXRlc0RyYXdpbmddOworICAgICAgICBbaXQtPnZhbHVlLmdl
dCgpIHNldEFjY2VsZXJhdGVzRHJhd2luZzptX2FjY2VsZXJhdGVzRHJhd2luZ107CiAjZWxzZQog
ICAgIFVOVVNFRF9QQVJBTShhY2NlbGVyYXRlc0RyYXdpbmcpOwogI2VuZGlmCkBAIC0yMzQsNyAr
MjM0LDcgQEAgdm9pZCBUaWxlQ2FjaGU6OnNldFRpbGVEZWJ1Z0JvcmRlcldpZHRoKGZsb2F0IGJv
cmRlcldpZHRoKQogCiAgICAgbV90aWxlRGVidWdCb3JkZXJXaWR0aCA9IGJvcmRlcldpZHRoOwog
ICAgIGZvciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCksIGVu
ZCA9IG1fdGlsZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgW2l0LT5zZWNvbmQu
Z2V0KCkgc2V0Qm9yZGVyV2lkdGg6bV90aWxlRGVidWdCb3JkZXJXaWR0aF07CisgICAgICAgIFtp
dC0+dmFsdWUuZ2V0KCkgc2V0Qm9yZGVyV2lkdGg6bV90aWxlRGVidWdCb3JkZXJXaWR0aF07CiB9
CiAKIHZvaWQgVGlsZUNhY2hlOjpzZXRUaWxlRGVidWdCb3JkZXJDb2xvcihDR0NvbG9yUmVmIGJv
cmRlckNvbG9yKQpAQCAtMjQ0LDcgKzI0NCw3IEBAIHZvaWQgVGlsZUNhY2hlOjpzZXRUaWxlRGVi
dWdCb3JkZXJDb2xvcihDR0NvbG9yUmVmIGJvcmRlckNvbG9yKQogCiAgICAgbV90aWxlRGVidWdC
b3JkZXJDb2xvciA9IGJvcmRlckNvbG9yOwogICAgIGZvciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCksIGVuZCA9IG1fdGlsZXMuZW5kKCk7IGl0ICE9IGVuZDsg
KytpdCkKLSAgICAgICAgW2l0LT5zZWNvbmQuZ2V0KCkgc2V0Qm9yZGVyQ29sb3I6bV90aWxlRGVi
dWdCb3JkZXJDb2xvci5nZXQoKV07CisgICAgICAgIFtpdC0+dmFsdWUuZ2V0KCkgc2V0Qm9yZGVy
Q29sb3I6bV90aWxlRGVidWdCb3JkZXJDb2xvci5nZXQoKV07CiB9CiAKIEludFJlY3QgVGlsZUNh
Y2hlOjpib3VuZHMoKSBjb25zdApAQCAtMzIyLDkgKzMyMiw5IEBAIHZvaWQgVGlsZUNhY2hlOjpy
ZXZhbGlkYXRlVGlsZXMoKQogICAgIFZlY3RvcjxUaWxlSW5kZXg+IHRpbGVzVG9SZW1vdmU7CiAK
ICAgICBmb3IgKFRpbGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpLCBlbmQgPSBt
X3RpbGVzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgY29uc3QgVGlsZUluZGV4
JiB0aWxlSW5kZXggPSBpdC0+Zmlyc3Q7CisgICAgICAgIGNvbnN0IFRpbGVJbmRleCYgdGlsZUlu
ZGV4ID0gaXQtPmtleTsKIAotICAgICAgICBXZWJUaWxlTGF5ZXIqIHRpbGVMYXllciA9IGl0LT5z
ZWNvbmQuZ2V0KCk7CisgICAgICAgIFdlYlRpbGVMYXllciogdGlsZUxheWVyID0gaXQtPnZhbHVl
LmdldCgpOwogCiAgICAgICAgIGlmICghcmVjdEZvclRpbGVJbmRleCh0aWxlSW5kZXgpLmludGVy
c2VjdHModGlsZUNvdmVyYWdlUmVjdCkpIHsKICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGlzIGxh
eWVyLgpAQCAtMzUyLDcgKzM1Miw3IEBAIHZvaWQgVGlsZUNhY2hlOjpyZXZhbGlkYXRlVGlsZXMo
KQogICAgICAgICAgICAgVGlsZUluZGV4IHRpbGVJbmRleCh4LCB5KTsKIAogICAgICAgICAgICAg
SW50UmVjdCB0aWxlUmVjdCA9IHJlY3RGb3JUaWxlSW5kZXgodGlsZUluZGV4KTsKLSAgICAgICAg
ICAgIFJldGFpblB0cjxXZWJUaWxlTGF5ZXI+JiB0aWxlTGF5ZXIgPSBtX3RpbGVzLmFkZCh0aWxl
SW5kZXgsIDApLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgICAgICBSZXRhaW5QdHI8V2ViVGls
ZUxheWVyPiYgdGlsZUxheWVyID0gbV90aWxlcy5hZGQodGlsZUluZGV4LCAwKS5pdGVyYXRvci0+
dmFsdWU7CiAgICAgICAgICAgICBpZiAoIXRpbGVMYXllcikgewogICAgICAgICAgICAgICAgIHRp
bGVMYXllciA9IGNyZWF0ZVRpbGVMYXllcih0aWxlUmVjdCk7CiAgICAgICAgICAgICAgICAgW21f
dGlsZUNvbnRhaW5lckxheWVyLmdldCgpIGFkZFN1YmxheWVyOnRpbGVMYXllci5nZXQoKV07CkBA
IC0zNzIsNyArMzcyLDcgQEAgdm9pZCBUaWxlQ2FjaGU6OnJldmFsaWRhdGVUaWxlcygpCiAKICAg
ICBtX3RpbGVDb3ZlcmFnZVJlY3QgPSBJbnRSZWN0KCk7CiAgICAgZm9yIChUaWxlTWFwOjppdGVy
YXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKSwgZW5kID0gbV90aWxlcy5lbmQoKTsgaXQgIT0gZW5k
OyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IFRpbGVJbmRleCYgdGlsZUluZGV4ID0gaXQtPmZpcnN0
OworICAgICAgICBjb25zdCBUaWxlSW5kZXgmIHRpbGVJbmRleCA9IGl0LT5rZXk7CiAKICAgICAg
ICAgbV90aWxlQ292ZXJhZ2VSZWN0LnVuaXRlKHJlY3RGb3JUaWxlSW5kZXgodGlsZUluZGV4KSk7
CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggMWViMjM3
Yy4uZGQ0Y2E3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCkBAIC04
NzcsNyArODc3LDcgQEAgaW50IEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6bWFwQW5pbWF0aW9uTmFt
ZVRvSWQoY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lKQogICAgIGlmICghbV9hbmltYXRpb25J
ZE1hcC5jb250YWlucyhhbmltYXRpb25OYW1lKSkKICAgICAgICAgbV9hbmltYXRpb25JZE1hcC5h
ZGQoYW5pbWF0aW9uTmFtZSwgQW5pbWF0aW9uSWRWZW5kb3I6OmdldE5leHRBbmltYXRpb25JZCgp
KTsKIAotICAgIHJldHVybiBtX2FuaW1hdGlvbklkTWFwLmZpbmQoYW5pbWF0aW9uTmFtZSktPnNl
Y29uZDsKKyAgICByZXR1cm4gbV9hbmltYXRpb25JZE1hcC5maW5kKGFuaW1hdGlvbk5hbWUpLT52
YWx1ZTsKIH0KIAogdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06Om5vdGlmeUFuaW1hdGlvblN0
YXJ0ZWQoZG91YmxlIHN0YXJ0VGltZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
Y3BwCmluZGV4IGM0ZjEzOGEuLmI1MWI0NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNo
cm9taXVtLmNwcApAQCAtMzM0LDE1ICszMzQsMTUgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OmRlY2lkZVJlbmRlclBhc3NBbGxvY2F0aW9uc0ZvckZyYW1lKGNvbnN0IENDUmVuZGVyUGEK
ICAgICBWZWN0b3I8aW50PiBwYXNzZXNUb0RlbGV0ZTsKICAgICBIYXNoTWFwPGludCwgT3duUHRy
PENhY2hlZFRleHR1cmU+ID46OmNvbnN0X2l0ZXJhdG9yIHBhc3NJdGVyYXRvcjsKICAgICBmb3Ig
KHBhc3NJdGVyYXRvciA9IG1fcmVuZGVyUGFzc1RleHR1cmVzLmJlZ2luKCk7IHBhc3NJdGVyYXRv
ciAhPSBtX3JlbmRlclBhc3NUZXh0dXJlcy5lbmQoKTsgKytwYXNzSXRlcmF0b3IpIHsKLSAgICAg
ICAgY29uc3QgQ0NSZW5kZXJQYXNzKiByZW5kZXJQYXNzSW5GcmFtZSA9IHJlbmRlclBhc3Nlc0lu
RnJhbWUuZ2V0KHBhc3NJdGVyYXRvci0+Zmlyc3QpOworICAgICAgICBjb25zdCBDQ1JlbmRlclBh
c3MqIHJlbmRlclBhc3NJbkZyYW1lID0gcmVuZGVyUGFzc2VzSW5GcmFtZS5nZXQocGFzc0l0ZXJh
dG9yLT5rZXkpOwogICAgICAgICBpZiAoIXJlbmRlclBhc3NJbkZyYW1lKSB7Ci0gICAgICAgICAg
ICBwYXNzZXNUb0RlbGV0ZS5hcHBlbmQocGFzc0l0ZXJhdG9yLT5maXJzdCk7CisgICAgICAgICAg
ICBwYXNzZXNUb0RlbGV0ZS5hcHBlbmQocGFzc0l0ZXJhdG9yLT5rZXkpOwogICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgIH0KIAogICAgICAgICBjb25zdCBJbnRTaXplJiByZXF1aXJlZFNp
emUgPSByZW5kZXJQYXNzVGV4dHVyZVNpemUocmVuZGVyUGFzc0luRnJhbWUpOwogICAgICAgICBH
QzNEZW51bSByZXF1aXJlZEZvcm1hdCA9IHJlbmRlclBhc3NUZXh0dXJlRm9ybWF0KHJlbmRlclBh
c3NJbkZyYW1lKTsKLSAgICAgICAgQ2FjaGVkVGV4dHVyZSogdGV4dHVyZSA9IHBhc3NJdGVyYXRv
ci0+c2Vjb25kLmdldCgpOworICAgICAgICBDYWNoZWRUZXh0dXJlKiB0ZXh0dXJlID0gcGFzc0l0
ZXJhdG9yLT52YWx1ZS5nZXQoKTsKICAgICAgICAgQVNTRVJUKHRleHR1cmUpOwogCiAgICAgICAg
IGlmICh0ZXh0dXJlLT5pZCgpICYmICh0ZXh0dXJlLT5zaXplKCkgIT0gcmVxdWlyZWRTaXplIHx8
IHRleHR1cmUtPmZvcm1hdCgpICE9IHJlcXVpcmVkRm9ybWF0KSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVy
Q2hyb21pdW0uY3BwCmluZGV4IDY4NzQwZWYuLjMwZWRkYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXll
ckNocm9taXVtLmNwcApAQCAtMjEyLDkgKzIxMiw5IEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVt
OjpwdXNoUHJvcGVydGllc1RvKENDTGF5ZXJJbXBsKiBsYXllcikKICAgICBWZWN0b3I8VXBkYXRh
YmxlVGlsZSo+IGludmFsaWRUaWxlczsKIAogICAgIGZvciAoQ0NMYXllclRpbGluZ0RhdGE6OlRp
bGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX3RpbGVyLT50aWxlcygpLmJlZ2luKCk7IGl0
ZXIgIT0gbV90aWxlci0+dGlsZXMoKS5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIGludCBpID0g
aXRlci0+Zmlyc3QuZmlyc3Q7Ci0gICAgICAgIGludCBqID0gaXRlci0+Zmlyc3Quc2Vjb25kOwot
ICAgICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gc3RhdGljX2Nhc3Q8VXBkYXRhYmxlVGlsZSo+
KGl0ZXItPnNlY29uZC5nZXQoKSk7CisgICAgICAgIGludCBpID0gaXRlci0+a2V5LmZpcnN0Owor
ICAgICAgICBpbnQgaiA9IGl0ZXItPmtleS5zZWNvbmQ7CisgICAgICAgIFVwZGF0YWJsZVRpbGUq
IHRpbGUgPSBzdGF0aWNfY2FzdDxVcGRhdGFibGVUaWxlKj4oaXRlci0+dmFsdWUuZ2V0KCkpOwog
ICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgbm90IGV2ZXIgYmUgbnVsbC4KICAgICAgICAg
aWYgKCF0aWxlKQogICAgICAgICAgICAgY29udGludWU7CkBAIC0yNDQsNyArMjQ0LDcgQEAgdm9p
ZCBUaWxlZExheWVyQ2hyb21pdW06OnNldExheWVyVHJlZUhvc3QoQ0NMYXllclRyZWVIb3N0KiBo
b3N0KQogewogICAgIGlmIChob3N0ICYmIGhvc3QgIT0gbGF5ZXJUcmVlSG9zdCgpKSB7CiAgICAg
ICAgIGZvciAoQ0NMYXllclRpbGluZ0RhdGE6OlRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIg
PSBtX3RpbGVyLT50aWxlcygpLmJlZ2luKCk7IGl0ZXIgIT0gbV90aWxlci0+dGlsZXMoKS5lbmQo
KTsgKytpdGVyKSB7Ci0gICAgICAgICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gc3RhdGljX2Nh
c3Q8VXBkYXRhYmxlVGlsZSo+KGl0ZXItPnNlY29uZC5nZXQoKSk7CisgICAgICAgICAgICBVcGRh
dGFibGVUaWxlKiB0aWxlID0gc3RhdGljX2Nhc3Q8VXBkYXRhYmxlVGlsZSo+KGl0ZXItPnZhbHVl
LmdldCgpKTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBub3QgZXZlciBiZSBu
dWxsLgogICAgICAgICAgICAgaWYgKCF0aWxlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpA
QCAtMzEyLDcgKzMxMiw3IEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjppbnZhbGlkYXRlQ29u
dGVudFJlY3QoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGZvciAoQ0NMYXllclRpbGluZ0RhdGE6OlRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIg
PSBtX3RpbGVyLT50aWxlcygpLmJlZ2luKCk7IGl0ZXIgIT0gbV90aWxlci0+dGlsZXMoKS5lbmQo
KTsgKytpdGVyKSB7Ci0gICAgICAgIFVwZGF0YWJsZVRpbGUqIHRpbGUgPSBzdGF0aWNfY2FzdDxV
cGRhdGFibGVUaWxlKj4oaXRlci0+c2Vjb25kLmdldCgpKTsKKyAgICAgICAgVXBkYXRhYmxlVGls
ZSogdGlsZSA9IHN0YXRpY19jYXN0PFVwZGF0YWJsZVRpbGUqPihpdGVyLT52YWx1ZS5nZXQoKSk7
CiAgICAgICAgIEFTU0VSVCh0aWxlKTsKICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIG5v
dCBldmVyIGJlIG51bGwuCiAgICAgICAgIGlmICghdGlsZSkKQEAgLTU3NCw3ICs1NzQsNyBAQCB2
b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6c2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3QoY29uc3Qg
Q0NQcmlvcml0eUNhbGN1bGF0b3ImCiAKICAgICAvLyBOb3cgc2V0IHByaW9yaXRpZXMgb24gYWxs
IHRpbGVzLgogICAgIGZvciAoQ0NMYXllclRpbGluZ0RhdGE6OlRpbGVNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ZXIgPSBtX3RpbGVyLT50aWxlcygpLmJlZ2luKCk7IGl0ZXIgIT0gbV90aWxlci0+dGls
ZXMoKS5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIFVwZGF0YWJsZVRpbGUqIHRpbGUgPSBzdGF0
aWNfY2FzdDxVcGRhdGFibGVUaWxlKj4oaXRlci0+c2Vjb25kLmdldCgpKTsKKyAgICAgICAgVXBk
YXRhYmxlVGlsZSogdGlsZSA9IHN0YXRpY19jYXN0PFVwZGF0YWJsZVRpbGUqPihpdGVyLT52YWx1
ZS5nZXQoKSk7CiAgICAgICAgIEludFJlY3QgdGlsZVJlY3QgPSBtX3RpbGVyLT50aWxlUmVjdCh0
aWxlKTsKICAgICAgICAgLy8gRklYTUU6IFRoaXMgaW5kaWNhdGVzIHRoZSAic21hbGwgYW5pbWF0
ZWQgbGF5ZXIiIGNhc2UuIFRoaXMgc3BlY2lhbCBjYXNlCiAgICAgICAgIC8vIGNhbiBiZSByZW1v
dmVkIHNvb24gd2l0aCBiZXR0ZXIgcHJpb3JpdGllcywgYnV0IGZvciBub3cgcGFpbnQgdGhlc2Ug
bGF5ZXJzIGFmdGVyCkBAIC02MDAsNyArNjAwLDcgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06
OnJlc2V0VXBkYXRlU3RhdGUoKQogewogICAgIENDTGF5ZXJUaWxpbmdEYXRhOjpUaWxlTWFwOjpj
b25zdF9pdGVyYXRvciBlbmQgPSBtX3RpbGVyLT50aWxlcygpLmVuZCgpOwogICAgIGZvciAoQ0NM
YXllclRpbGluZ0RhdGE6OlRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX3RpbGVyLT50
aWxlcygpLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKLSAgICAgICAgVXBkYXRhYmxl
VGlsZSogdGlsZSA9IHN0YXRpY19jYXN0PFVwZGF0YWJsZVRpbGUqPihpdGVyLT5zZWNvbmQuZ2V0
KCkpOworICAgICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gc3RhdGljX2Nhc3Q8VXBkYXRhYmxl
VGlsZSo+KGl0ZXItPnZhbHVlLmdldCgpKTsKICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxk
IG5vdCBldmVyIGJlIG51bGwuCiAgICAgICAgIGlmICghdGlsZSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NEYW1hZ2VUcmFja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDRGFtYWdlVHJhY2tlci5jcHAKaW5kZXggNWQ1ODU1Yy4uMjM3NjA1
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NEYW1hZ2VUcmFja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0RhbWFnZVRyYWNrZXIuY3BwCkBAIC0yMzMsNyArMjMzLDcgQEAg
RmxvYXRSZWN0IENDRGFtYWdlVHJhY2tlcjo6dHJhY2tEYW1hZ2VGcm9tTGVmdG92ZXJSZWN0cygp
CiAgICAgRmxvYXRSZWN0IGRhbWFnZVJlY3QgPSBGbG9hdFJlY3QoKTsKIAogICAgIGZvciAoUmVj
dE1hcDo6aXRlcmF0b3IgaXQgPSBtX2N1cnJlbnRSZWN0SGlzdG9yeS0+YmVnaW4oKTsgaXQgIT0g
bV9jdXJyZW50UmVjdEhpc3RvcnktPmVuZCgpOyArK2l0KQotICAgICAgICBkYW1hZ2VSZWN0LnVu
aXRlKGl0LT5zZWNvbmQpOworICAgICAgICBkYW1hZ2VSZWN0LnVuaXRlKGl0LT52YWx1ZSk7CiAK
ICAgICBtX2N1cnJlbnRSZWN0SGlzdG9yeS0+Y2xlYXIoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRpbGluZ0RhdGEu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRpbGluZ0RhdGEuY3BwCmluZGV4IDQ5ZDIzMzYuLjBjZGFmMTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUaWxpbmdEYXRh
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVGlsaW5nRGF0YS5jcHAKQEAgLTE0NCw4ICsxNDQsOCBAQCB2b2lkIENDTGF5ZXJUaWxp
bmdEYXRhOjpzZXRCb3VuZHMoY29uc3QgSW50U2l6ZSYgc2l6ZSkKICAgICBjb250ZW50UmVjdFRv
VGlsZUluZGljZXMoSW50UmVjdChJbnRQb2ludCgpLCBzaXplKSwgbGVmdCwgdG9wLCByaWdodCwg
Ym90dG9tKTsKICAgICBWZWN0b3I8VGlsZU1hcEtleT4gaW52YWxpZFRpbGVLZXlzOwogICAgIGZv
ciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IG1f
dGlsZXMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5maXJzdC5maXJzdCA+IHJpZ2h0
IHx8IGl0LT5maXJzdC5zZWNvbmQgPiBib3R0b20pCi0gICAgICAgICAgICBpbnZhbGlkVGlsZUtl
eXMuYXBwZW5kKGl0LT5maXJzdCk7CisgICAgICAgIGlmIChpdC0+a2V5LmZpcnN0ID4gcmlnaHQg
fHwgaXQtPmtleS5zZWNvbmQgPiBib3R0b20pCisgICAgICAgICAgICBpbnZhbGlkVGlsZUtleXMu
YXBwZW5kKGl0LT5rZXkpOwogICAgIH0KICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGludmFs
aWRUaWxlS2V5cy5zaXplKCk7ICsraSkKICAgICAgICAgbV90aWxlcy5yZW1vdmUoaW52YWxpZFRp
bGVLZXlzW2ldKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCmluZGV4IGZmOTdjZjMu
LmFmMWJkYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcApAQCAtMTIwLDcgKzEy
MCw3IEBAIENDTGF5ZXJUcmVlSG9zdDo6fkNDTGF5ZXJUcmVlSG9zdCgpCiAgICAgbnVtTGF5ZXJU
cmVlSW5zdGFuY2VzLS07CiAgICAgUmF0ZUxpbWl0ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yYXRl
TGltaXRlcnMuYmVnaW4oKTsKICAgICBpZiAoaXQgIT0gbV9yYXRlTGltaXRlcnMuZW5kKCkpCi0g
ICAgICAgIGl0LT5zZWNvbmQtPnN0b3AoKTsKKyAgICAgICAgaXQtPnZhbHVlLT5zdG9wKCk7CiB9
CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpzZXRTdXJmYWNlUmVhZHkoKQpAQCAtNjU2LDcgKzY1
Niw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpzdGFydFJhdGVMaW1pdGVyKFdlYktpdDo6V2Vi
R3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCiAgICAgQVNTRVJUKGNvbnRleHQpOwogICAgIFJh
dGVMaW1pdGVyTWFwOjppdGVyYXRvciBpdCA9IG1fcmF0ZUxpbWl0ZXJzLmZpbmQoY29udGV4dCk7
CiAgICAgaWYgKGl0ICE9IG1fcmF0ZUxpbWl0ZXJzLmVuZCgpKQotICAgICAgICBpdC0+c2Vjb25k
LT5zdGFydCgpOworICAgICAgICBpdC0+dmFsdWUtPnN0YXJ0KCk7CiAgICAgZWxzZSB7CiAgICAg
ICAgIFJlZlB0cjxSYXRlTGltaXRlcj4gcmF0ZUxpbWl0ZXIgPSBSYXRlTGltaXRlcjo6Y3JlYXRl
KGNvbnRleHQsIHRoaXMpOwogICAgICAgICBtX3JhdGVMaW1pdGVycy5zZXQoY29udGV4dCwgcmF0
ZUxpbWl0ZXIpOwpAQCAtNjY4LDcgKzY2OCw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpzdG9w
UmF0ZUxpbWl0ZXIoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKIHsKICAg
ICBSYXRlTGltaXRlck1hcDo6aXRlcmF0b3IgaXQgPSBtX3JhdGVMaW1pdGVycy5maW5kKGNvbnRl
eHQpOwogICAgIGlmIChpdCAhPSBtX3JhdGVMaW1pdGVycy5lbmQoKSkgewotICAgICAgICBpdC0+
c2Vjb25kLT5zdG9wKCk7CisgICAgICAgIGl0LT52YWx1ZS0+c3RvcCgpOwogICAgICAgICBtX3Jh
dGVMaW1pdGVycy5yZW1vdmUoaXQpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0SW1wbC5jcHAKaW5kZXggNDkzZjM1YS4uMTA2NTZhYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1w
bC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0SW1wbC5jcHAKQEAgLTQwMyw3ICs0MDMsNyBAQCBzdGF0aWMgaW5saW5l
IENDUmVuZGVyUGFzcyogZmluZFJlbmRlclBhc3NCeUlkKGludCByZW5kZXJQYXNzSWQsIGNvbnN0
IENDTGF5ZXJUcgogewogICAgIENDUmVuZGVyUGFzc0lkSGFzaE1hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBmcmFtZS5yZW5kZXJQYXNzZXNCeUlkLmZpbmQocmVuZGVyUGFzc0lkKTsKICAgICBBU1NF
UlQoaXQgIT0gZnJhbWUucmVuZGVyUGFzc2VzQnlJZC5lbmQoKSk7Ci0gICAgcmV0dXJuIGl0LT5z
ZWNvbmQuZ2V0KCk7CisgICAgcmV0dXJuIGl0LT52YWx1ZS5nZXQoKTsKIH0KIAogc3RhdGljIHZv
aWQgcmVtb3ZlUmVuZGVyUGFzc2VzUmVjdXJzaXZlKGludCByZW1vdmVSZW5kZXJQYXNzSWQsIEND
TGF5ZXJUcmVlSG9zdEltcGw6OkZyYW1lRGF0YSYgZnJhbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Jlc291cmNlUHJvdmlkZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZXNv
dXJjZVByb3ZpZGVyLmNwcAppbmRleCA0OWMzYjI0Li5iOTRjNjZhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Jlc291cmNlUHJvdmlk
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUmVzb3VyY2VQcm92aWRlci5jcHAKQEAgLTgzLDcgKzgzLDcgQEAgYm9vbCBDQ1Jlc291cmNl
UHJvdmlkZXI6OmluVXNlQnlDb25zdW1lcihSZXNvdXJjZUlkIGlkKQogICAgIEFTU0VSVChDQ1By
b3h5Ojppc0ltcGxUaHJlYWQoKSk7CiAgICAgUmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9y
ZXNvdXJjZXMuZmluZChpZCk7CiAgICAgQVNTRVJUKGl0ICE9IG1fcmVzb3VyY2VzLmVuZCgpKTsK
LSAgICByZXR1cm4gISFpdC0+c2Vjb25kLmxvY2tGb3JSZWFkQ291bnQ7CisgICAgcmV0dXJuICEh
aXQtPnZhbHVlLmxvY2tGb3JSZWFkQ291bnQ7CiB9CiAKIENDUmVzb3VyY2VQcm92aWRlcjo6UmVz
b3VyY2VJZCBDQ1Jlc291cmNlUHJvdmlkZXI6OmNyZWF0ZVJlc291cmNlKGludCBwb29sLCBjb25z
dCBJbnRTaXplJiBzaXplLCBHQzNEZW51bSBmb3JtYXQsIFRleHR1cmVVc2FnZUhpbnQgaGludCkK
QEAgLTEzMyw5ICsxMzMsOSBAQCB2b2lkIENDUmVzb3VyY2VQcm92aWRlcjo6ZGVsZXRlUmVzb3Vy
Y2UoUmVzb3VyY2VJZCBpZCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBSZXNvdXJjZU1h
cDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5maW5kKGlkKTsKLSAgICBBU1NFUlQoaXQgIT0g
bV9yZXNvdXJjZXMuZW5kKCkgJiYgIWl0LT5zZWNvbmQubG9ja2VkRm9yV3JpdGUgJiYgIWl0LT5z
ZWNvbmQubG9ja0ZvclJlYWRDb3VudCk7Ci0gICAgaWYgKCFpdC0+c2Vjb25kLmV4dGVybmFsKQot
ICAgICAgICBHTEMoY29udGV4dDNkLCBjb250ZXh0M2QtPmRlbGV0ZVRleHR1cmUoaXQtPnNlY29u
ZC5nbElkKSk7CisgICAgQVNTRVJUKGl0ICE9IG1fcmVzb3VyY2VzLmVuZCgpICYmICFpdC0+dmFs
dWUubG9ja2VkRm9yV3JpdGUgJiYgIWl0LT52YWx1ZS5sb2NrRm9yUmVhZENvdW50KTsKKyAgICBp
ZiAoIWl0LT52YWx1ZS5leHRlcm5hbCkKKyAgICAgICAgR0xDKGNvbnRleHQzZCwgY29udGV4dDNk
LT5kZWxldGVUZXh0dXJlKGl0LT52YWx1ZS5nbElkKSk7CiAgICAgbV9yZXNvdXJjZXMucmVtb3Zl
KGl0KTsKIH0KIApAQCAtMTQ0LDggKzE0NCw4IEBAIHZvaWQgQ0NSZXNvdXJjZVByb3ZpZGVyOjpk
ZWxldGVPd25lZFJlc291cmNlcyhpbnQgcG9vbCkKICAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBs
VGhyZWFkKCkpOwogICAgIFZlY3RvcjxSZXNvdXJjZUlkPiB0b0RlbGV0ZTsKICAgICBmb3IgKFJl
c291cmNlTWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IG1fcmVz
b3VyY2VzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kLnBvb2wgPT0gcG9v
bCAmJiAhaXQtPnNlY29uZC5leHRlcm5hbCkKLSAgICAgICAgICAgIHRvRGVsZXRlLmFwcGVuZChp
dC0+Zmlyc3QpOworICAgICAgICBpZiAoaXQtPnZhbHVlLnBvb2wgPT0gcG9vbCAmJiAhaXQtPnZh
bHVlLmV4dGVybmFsKQorICAgICAgICAgICAgdG9EZWxldGUuYXBwZW5kKGl0LT5rZXkpOwogICAg
IH0KICAgICBmb3IgKFZlY3RvcjxSZXNvdXJjZUlkPjo6aXRlcmF0b3IgaXQgPSB0b0RlbGV0ZS5i
ZWdpbigpOyBpdCAhPSB0b0RlbGV0ZS5lbmQoKTsgKytpdCkKICAgICAgICAgZGVsZXRlUmVzb3Vy
Y2UoKml0KTsKQEAgLTE2MSwyNyArMTYxLDI3IEBAIHZvaWQgQ0NSZXNvdXJjZVByb3ZpZGVyOjp1
cGxvYWQoUmVzb3VyY2VJZCBpZCwgY29uc3QgdWludDhfdCogaW1hZ2UsIGNvbnN0IEludFJlCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgUmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9y
ZXNvdXJjZXMuZmluZChpZCk7Ci0gICAgQVNTRVJUKGl0ICE9IG1fcmVzb3VyY2VzLmVuZCgpICYm
ICFpdC0+c2Vjb25kLmxvY2tlZEZvcldyaXRlICYmICFpdC0+c2Vjb25kLmxvY2tGb3JSZWFkQ291
bnQgJiYgIWl0LT5zZWNvbmQuZXh0ZXJuYWwpOworICAgIEFTU0VSVChpdCAhPSBtX3Jlc291cmNl
cy5lbmQoKSAmJiAhaXQtPnZhbHVlLmxvY2tlZEZvcldyaXRlICYmICFpdC0+dmFsdWUubG9ja0Zv
clJlYWRDb3VudCAmJiAhaXQtPnZhbHVlLmV4dGVybmFsKTsKIAotICAgIGNvbnRleHQzZC0+Ymlu
ZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGl0LT5zZWNvbmQuZ2xJZCk7
Ci0gICAgbV90ZXhTdWJJbWFnZS0+dXBsb2FkKGltYWdlLCBpbWFnZVJlY3QsIHNvdXJjZVJlY3Qs
IGRlc3RSZWN0LCBpdC0+c2Vjb25kLmZvcm1hdCwgY29udGV4dDNkKTsKKyAgICBjb250ZXh0M2Qt
PmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBpdC0+dmFsdWUuZ2xJ
ZCk7CisgICAgbV90ZXhTdWJJbWFnZS0+dXBsb2FkKGltYWdlLCBpbWFnZVJlY3QsIHNvdXJjZVJl
Y3QsIGRlc3RSZWN0LCBpdC0+dmFsdWUuZm9ybWF0LCBjb250ZXh0M2QpOwogfQogCiB1bnNpZ25l
ZCBDQ1Jlc291cmNlUHJvdmlkZXI6OmxvY2tGb3JXcml0ZShSZXNvdXJjZUlkIGlkKQogewogICAg
IEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CiAgICAgUmVzb3VyY2VNYXA6Oml0ZXJh
dG9yIGl0ID0gbV9yZXNvdXJjZXMuZmluZChpZCk7Ci0gICAgQVNTRVJUKGl0ICE9IG1fcmVzb3Vy
Y2VzLmVuZCgpICYmICFpdC0+c2Vjb25kLmxvY2tlZEZvcldyaXRlICYmICFpdC0+c2Vjb25kLmxv
Y2tGb3JSZWFkQ291bnQgJiYgIWl0LT5zZWNvbmQuZXh0ZXJuYWwpOwotICAgIGl0LT5zZWNvbmQu
bG9ja2VkRm9yV3JpdGUgPSB0cnVlOwotICAgIHJldHVybiBpdC0+c2Vjb25kLmdsSWQ7CisgICAg
QVNTRVJUKGl0ICE9IG1fcmVzb3VyY2VzLmVuZCgpICYmICFpdC0+dmFsdWUubG9ja2VkRm9yV3Jp
dGUgJiYgIWl0LT52YWx1ZS5sb2NrRm9yUmVhZENvdW50ICYmICFpdC0+dmFsdWUuZXh0ZXJuYWwp
OworICAgIGl0LT52YWx1ZS5sb2NrZWRGb3JXcml0ZSA9IHRydWU7CisgICAgcmV0dXJuIGl0LT52
YWx1ZS5nbElkOwogfQogCiB2b2lkIENDUmVzb3VyY2VQcm92aWRlcjo6dW5sb2NrRm9yV3JpdGUo
UmVzb3VyY2VJZCBpZCkKIHsKICAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwog
ICAgIFJlc291cmNlTWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmZpbmQoaWQpOwotICAg
IEFTU0VSVChpdCAhPSBtX3Jlc291cmNlcy5lbmQoKSAmJiBpdC0+c2Vjb25kLmxvY2tlZEZvcldy
aXRlICYmICFpdC0+c2Vjb25kLmV4dGVybmFsKTsKLSAgICBpdC0+c2Vjb25kLmxvY2tlZEZvcldy
aXRlID0gZmFsc2U7CisgICAgQVNTRVJUKGl0ICE9IG1fcmVzb3VyY2VzLmVuZCgpICYmIGl0LT52
YWx1ZS5sb2NrZWRGb3JXcml0ZSAmJiAhaXQtPnZhbHVlLmV4dGVybmFsKTsKKyAgICBpdC0+dmFs
dWUubG9ja2VkRm9yV3JpdGUgPSBmYWxzZTsKIH0KIAogdm9pZCBDQ1Jlc291cmNlUHJvdmlkZXI6
OmZsdXNoKCkKQEAgLTIxMywxNyArMjEzLDE3IEBAIHVuc2lnbmVkIENDUmVzb3VyY2VQcm92aWRl
cjo6bG9ja0ZvclJlYWQoUmVzb3VyY2VJZCBpZCkKIHsKICAgICBBU1NFUlQoQ0NQcm94eTo6aXNJ
bXBsVGhyZWFkKCkpOwogICAgIFJlc291cmNlTWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2Vz
LmZpbmQoaWQpOwotICAgIEFTU0VSVChpdCAhPSBtX3Jlc291cmNlcy5lbmQoKSAmJiAhaXQtPnNl
Y29uZC5sb2NrZWRGb3JXcml0ZSk7Ci0gICAgKysoaXQtPnNlY29uZC5sb2NrRm9yUmVhZENvdW50
KTsKLSAgICByZXR1cm4gaXQtPnNlY29uZC5nbElkOworICAgIEFTU0VSVChpdCAhPSBtX3Jlc291
cmNlcy5lbmQoKSAmJiAhaXQtPnZhbHVlLmxvY2tlZEZvcldyaXRlKTsKKyAgICArKyhpdC0+dmFs
dWUubG9ja0ZvclJlYWRDb3VudCk7CisgICAgcmV0dXJuIGl0LT52YWx1ZS5nbElkOwogfQogCiB2
b2lkIENDUmVzb3VyY2VQcm92aWRlcjo6dW5sb2NrRm9yUmVhZChSZXNvdXJjZUlkIGlkKQogewog
ICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CiAgICAgUmVzb3VyY2VNYXA6Oml0
ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMuZmluZChpZCk7Ci0gICAgQVNTRVJUKGl0ICE9IG1fcmVz
b3VyY2VzLmVuZCgpICYmIGl0LT5zZWNvbmQubG9ja0ZvclJlYWRDb3VudCA+IDApOwotICAgIC0t
KGl0LT5zZWNvbmQubG9ja0ZvclJlYWRDb3VudCk7CisgICAgQVNTRVJUKGl0ICE9IG1fcmVzb3Vy
Y2VzLmVuZCgpICYmIGl0LT52YWx1ZS5sb2NrRm9yUmVhZENvdW50ID4gMCk7CisgICAgLS0oaXQt
PnZhbHVlLmxvY2tGb3JSZWFkQ291bnQpOwogfQogCiBDQ1Jlc291cmNlUHJvdmlkZXI6OkNDUmVz
b3VyY2VQcm92aWRlcihDQ0dyYXBoaWNzQ29udGV4dCogY29udGV4dCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyUHJvZ3Jh
bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZp
bHRlclByb2dyYW0uY3BwCmluZGV4IDYwY2ZmMjIuLjJiZTU1N2YgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyUHJvZ3JhbS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21G
aWx0ZXJQcm9ncmFtLmNwcApAQCAtNzcsNyArNzcsNyBAQCB2b2lkIEN1c3RvbUZpbHRlclByb2dy
YW06OnJlbW92ZUNsaWVudChDdXN0b21GaWx0ZXJQcm9ncmFtQ2xpZW50KiBjbGllbnQpCiB2b2lk
IEN1c3RvbUZpbHRlclByb2dyYW06Om5vdGlmeUNsaWVudHMoKQogewogICAgIGZvciAoQ3VzdG9t
RmlsdGVyUHJvZ3JhbUNsaWVudExpc3Q6Oml0ZXJhdG9yIGl0ZXIgPSBtX2NsaWVudHMuYmVnaW4o
KSwgZW5kID0gbV9jbGllbnRzLmVuZCgpOyBpdGVyICE9IGVuZDsgKytpdGVyKQotICAgICAgICBp
dGVyLT5maXJzdC0+bm90aWZ5Q3VzdG9tRmlsdGVyUHJvZ3JhbUxvYWRlZCh0aGlzKTsKKyAgICAg
ICAgaXRlci0+a2V5LT5ub3RpZnlDdXN0b21GaWx0ZXJQcm9ncmFtTG9hZGVkKHRoaXMpOwogfQog
CiAjaWYgVVNFKDNEX0dSQVBISUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTa2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2tpYS5jcHAKaW5kZXggZjY4ZWE2MS4u
MWU4ODY3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFy
ZmJ1enovSGFyZkJ1enpTa2lhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYXJmYnV6ei9IYXJmQnV6elNraWEuY3BwCkBAIC0yNDQsMTggKzI0NCwxOCBAQCBzdGF0
aWMgSEJfRmFjZVJlY18qIGdldENhY2hlZEhhcmZidXp6RmFjZShGb250UGxhdGZvcm1EYXRhKiBw
bGF0Zm9ybURhdGEpCiAgICAgICAgIGdIYXJmYnV6ekZhY2VDYWNoZS0+c2V0KHVuaXF1ZUlELCBl
bnRyeSk7CiAgICAgICAgIHJldHVybiBlbnRyeS5maXJzdDsKICAgICB9Ci0gICAgKysocmVzdWx0
LmdldCgpLT5zZWNvbmQuc2Vjb25kKTsKLSAgICByZXR1cm4gcmVzdWx0LmdldCgpLT5zZWNvbmQu
Zmlyc3Q7CisgICAgKysocmVzdWx0LmdldCgpLT52YWx1ZS5zZWNvbmQpOworICAgIHJldHVybiBy
ZXN1bHQuZ2V0KCktPnZhbHVlLmZpcnN0OwogfQogCiBzdGF0aWMgdm9pZCByZWxlYXNlQ2FjaGVk
SGFyZmJ1enpGYWNlKFNrRm9udElEIHVuaXF1ZUlEKQogewogICAgIEhhcmZidXp6RmFjZUNhY2hl
OjppdGVyYXRvciByZXN1bHQgPSBnSGFyZmJ1enpGYWNlQ2FjaGUtPmZpbmQodW5pcXVlSUQpOwog
ICAgIEFTU0VSVChyZXN1bHQgIT0gZ0hhcmZidXp6RmFjZUNhY2hlLT5lbmQoKSk7Ci0gICAgQVNT
RVJUKHJlc3VsdC5nZXQoKS0+c2Vjb25kLnNlY29uZCA+IDApOwotICAgIC0tKHJlc3VsdC5nZXQo
KS0+c2Vjb25kLnNlY29uZCk7Ci0gICAgaWYgKCEocmVzdWx0LmdldCgpLT5zZWNvbmQuc2Vjb25k
KSkgewotICAgICAgICBIQl9GcmVlRmFjZShyZXN1bHQuZ2V0KCktPnNlY29uZC5maXJzdCk7Cisg
ICAgQVNTRVJUKHJlc3VsdC5nZXQoKS0+dmFsdWUuc2Vjb25kID4gMCk7CisgICAgLS0ocmVzdWx0
LmdldCgpLT52YWx1ZS5zZWNvbmQpOworICAgIGlmICghKHJlc3VsdC5nZXQoKS0+dmFsdWUuc2Vj
b25kKSkgeworICAgICAgICBIQl9GcmVlRmFjZShyZXN1bHQuZ2V0KCktPnZhbHVlLmZpcnN0KTsK
ICAgICAgICAgZ0hhcmZidXp6RmFjZUNhY2hlLT5yZW1vdmUodW5pcXVlSUQpOwogICAgIH0KIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25n
L0hhcmZCdXp6TkdGYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hh
cmZidXp6L25nL0hhcmZCdXp6TkdGYWNlLmNwcAppbmRleCA3ZGQwNDhiLi42MDQ3NTliIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJm
QnV6ek5HRmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFy
ZmJ1enovbmcvSGFyZkJ1enpOR0ZhY2UuY3BwCkBAIC02MCw4ICs2MCw4IEBAIEhhcmZCdXp6TkdG
YWNlOjpIYXJmQnV6ek5HRmFjZShGb250UGxhdGZvcm1EYXRhKiBwbGF0Zm9ybURhdGEsIHVpbnQ2
NF90IHVuaXF1ZUlECiAgICAgICAgIEFTU0VSVChtX2ZhY2UpOwogICAgICAgICBoYXJmYnV6ekZh
Y2VDYWNoZSgpLT5zZXQobV91bmlxdWVJRCwgRmFjZUNhY2hlRW50cnkobV9mYWNlLCAxKSk7CiAg
ICAgfSBlbHNlIHsKLSAgICAgICAgKysocmVzdWx0LmdldCgpLT5zZWNvbmQuc2Vjb25kKTsKLSAg
ICAgICAgbV9mYWNlID0gcmVzdWx0LmdldCgpLT5zZWNvbmQuZmlyc3Q7CisgICAgICAgICsrKHJl
c3VsdC5nZXQoKS0+dmFsdWUuc2Vjb25kKTsKKyAgICAgICAgbV9mYWNlID0gcmVzdWx0LmdldCgp
LT52YWx1ZS5maXJzdDsKICAgICB9CiB9CiAKQEAgLTY5LDEwICs2OSwxMCBAQCBIYXJmQnV6ek5H
RmFjZTo6fkhhcmZCdXp6TkdGYWNlKCkKIHsKICAgICBIYXJmQnV6ek5HRmFjZUNhY2hlOjppdGVy
YXRvciByZXN1bHQgPSBoYXJmYnV6ekZhY2VDYWNoZSgpLT5maW5kKG1fdW5pcXVlSUQpOwogICAg
IEFTU0VSVChyZXN1bHQgIT0gaGFyZmJ1enpGYWNlQ2FjaGUoKS0+ZW5kKCkpOwotICAgIEFTU0VS
VChyZXN1bHQuZ2V0KCktPnNlY29uZC5zZWNvbmQgPiAwKTsKLSAgICAtLShyZXN1bHQuZ2V0KCkt
PnNlY29uZC5zZWNvbmQpOwotICAgIGlmICghKHJlc3VsdC5nZXQoKS0+c2Vjb25kLnNlY29uZCkp
IHsKLSAgICAgICAgaGJfZmFjZV9kZXN0cm95KHJlc3VsdC5nZXQoKS0+c2Vjb25kLmZpcnN0KTsK
KyAgICBBU1NFUlQocmVzdWx0LmdldCgpLT52YWx1ZS5zZWNvbmQgPiAwKTsKKyAgICAtLShyZXN1
bHQuZ2V0KCktPnZhbHVlLnNlY29uZCk7CisgICAgaWYgKCEocmVzdWx0LmdldCgpLT52YWx1ZS5z
ZWNvbmQpKSB7CisgICAgICAgIGhiX2ZhY2VfZGVzdHJveShyZXN1bHQuZ2V0KCktPnZhbHVlLmZp
cnN0KTsKICAgICAgICAgaGFyZmJ1enpGYWNlQ2FjaGUoKS0+cmVtb3ZlKG1fdW5pcXVlSUQpOwog
ICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9TaW1wbGVGb250RGF0YUNvcmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL21hYy9TaW1wbGVGb250RGF0YUNvcmVUZXh0LmNwcAppbmRleCAwNTE5Mzc0Li4wYjcx
MzM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2lt
cGxlRm9udERhdGFDb3JlVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhQ29yZVRleHQuY3BwCkBAIC00Myw3ICs0Myw3IEBAIENG
RGljdGlvbmFyeVJlZiBTaW1wbGVGb250RGF0YTo6Z2V0Q0ZTdHJpbmdBdHRyaWJ1dGVzKFR5cGVz
ZXR0aW5nRmVhdHVyZXMgdHlwZXNlCiB7CiAgICAgdW5zaWduZWQga2V5ID0gdHlwZXNldHRpbmdG
ZWF0dXJlcyArIDE7CiAgICAgSGFzaE1hcDx1bnNpZ25lZCwgUmV0YWluUHRyPENGRGljdGlvbmFy
eVJlZj4gPjo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IG1fQ0ZTdHJpbmdBdHRyaWJ1dGVzLmFkZChr
ZXksIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+KCkpOwotICAgIFJldGFpblB0cjxDRkRpY3Rp
b25hcnlSZWY+JiBhdHRyaWJ1dGVzRGljdGlvbmFyeSA9IGFkZFJlc3VsdC5pdGVyYXRvci0+c2Vj
b25kOworICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+JiBhdHRyaWJ1dGVzRGljdGlvbmFy
eSA9IGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdF
bnRyeSkKICAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZXNEaWN0aW9uYXJ5LmdldCgpOwogICAgIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZv
bnREYXRhTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBs
ZUZvbnREYXRhTWFjLm1tCmluZGV4IDU4N2I5ZGQuLmMwODQ5YzAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YU1hYy5tbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFNYWMu
bW0KQEAgLTQ2MSw3ICs0NjEsNyBAQCBib29sIFNpbXBsZUZvbnREYXRhOjpjYW5SZW5kZXJDb21i
aW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjb25zdCBVQ2hhciogY2hhcmFjdGVycwogCiAgICAgV1RG
OjpIYXNoTWFwPFN0cmluZywgYm9vbD46OkFkZFJlc3VsdCBhZGRSZXN1bHQgPSBtX2NvbWJpbmlu
Z0NoYXJhY3RlclNlcXVlbmNlU3VwcG9ydC0+YWRkKFN0cmluZyhjaGFyYWN0ZXJzLCBsZW5ndGgp
LCBmYWxzZSk7CiAgICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgcmV0dXJu
IGFkZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICByZXR1cm4gYWRkUmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZTsKIAogICAgIFJldGFpblB0cjxDR0ZvbnRSZWY+IGNnRm9udChBZG9wdENG
LCBDVEZvbnRDb3B5R3JhcGhpY3NGb250KHBsYXRmb3JtRGF0YSgpLmN0Rm9udCgpLCAwKSk7CiAK
QEAgLTQ4MSw3ICs0ODEsNyBAQCBib29sIFNpbXBsZUZvbnREYXRhOjpjYW5SZW5kZXJDb21iaW5p
bmdDaGFyYWN0ZXJTZXF1ZW5jZShjb25zdCBVQ2hhciogY2hhcmFjdGVycwogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0g
dHJ1ZTsKKyAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gdHJ1ZTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcAppbmRleCA1
YTYyODgxLi43ZTE2NGY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNw
cApAQCAtMTE3LDcgKzExNyw3IEBAIFN0cmluZyBFeHRlbnNpb25zM0RPcGVuR0xDb21tb246Omdl
dFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRShQbGF0Zm9ybTNET2JqZWN0CiAgICAgaWYgKHJl
c3VsdCA9PSBtX2NvbnRleHQtPm1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQogICAgICAgICByZXR1
cm4gIiI7CiAKLSAgICBHcmFwaGljc0NvbnRleHQzRDo6U2hhZGVyU291cmNlRW50cnkmIGVudHJ5
ID0gcmVzdWx0LT5zZWNvbmQ7CisgICAgR3JhcGhpY3NDb250ZXh0M0Q6OlNoYWRlclNvdXJjZUVu
dHJ5JiBlbnRyeSA9IHJlc3VsdC0+dmFsdWU7CiAKICAgICBTdHJpbmcgdHJhbnNsYXRlZFNoYWRl
clNvdXJjZTsKICAgICBTdHJpbmcgc2hhZGVySW5mb0xvZzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENv
bW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhp
Y3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCmluZGV4IDIyNTYyODIuLmZkZTIyMGIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0Nv
bnRleHQzRE9wZW5HTENvbW1vbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcApAQCAtNDgwLDcg
KzQ4MCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvbXBpbGVTaGFkZXIoUGxhdGZvcm0z
RE9iamVjdCBzaGFkZXIpCiAKICAgICBpZiAobGVuZ3RoKSB7CiAgICAgICAgIEhhc2hNYXA8UGxh
dGZvcm0zRE9iamVjdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlNoYWRlclNvdXJjZUVudHJ5Pjo6aXRl
cmF0b3IgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOwotICAgICAgICBH
cmFwaGljc0NvbnRleHQzRDo6U2hhZGVyU291cmNlRW50cnkmIGVudHJ5ID0gcmVzdWx0LT5zZWNv
bmQ7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEOjpTaGFkZXJTb3VyY2VFbnRyeSYgZW50cnkg
PSByZXN1bHQtPnZhbHVlOwogCiAgICAgICAgIEdMc2l6ZWkgc2l6ZSA9IDA7CiAgICAgICAgIE93
bkFycmF5UHRyPEdMY2hhcj4gaW5mbyA9IGFkb3B0QXJyYXlQdHIobmV3IEdMY2hhcltsZW5ndGhd
KTsKQEAgLTExNTIsNyArMTE1Miw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRl
cml2KFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyLCBHQzNEZW51bSBwbmFtZSwgR0MzCiAgICAgICAg
ICAgICAqdmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ+KGZhbHNlKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQotICAgICAgICAqdmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ+KHJlc3VsdC0+
c2Vjb25kLmlzVmFsaWQpOworICAgICAgICAqdmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ+KHJlc3Vs
dC0+dmFsdWUuaXNWYWxpZCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSU5GT19MT0dfTEVO
R1RIOgogICAgICAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKSB7CkBA
IC0xMTc5LDcgKzExNzksNyBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlcklu
Zm9Mb2coUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCiAgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRl
clNvdXJjZU1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOyAKIAotICAgIFNoYWRl
clNvdXJjZUVudHJ5IGVudHJ5ID0gcmVzdWx0LT5zZWNvbmQ7CisgICAgU2hhZGVyU291cmNlRW50
cnkgZW50cnkgPSByZXN1bHQtPnZhbHVlOwogICAgIGlmICghZW50cnkuaXNWYWxpZCkKICAgICAg
ICAgcmV0dXJuIGVudHJ5LmxvZzsKIApAQCAtMTIwNSw3ICsxMjA1LDcgQEAgU3RyaW5nIEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCiAg
ICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJu
IFN0cmluZygpOyAKIAotICAgIHJldHVybiByZXN1bHQtPnNlY29uZC5zb3VyY2U7CisgICAgcmV0
dXJuIHJlc3VsdC0+dmFsdWUuc291cmNlOwogfQogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKaW5k
ZXggODY3MDRiYy4uMzZmMDJmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKQEAgLTExNyw3ICsx
MTcsNyBAQCBzdHJ1Y3QgVGV4dHVyZU1hcHBlckdMRGF0YSB7CiAgICAgICAgICAgICBHTENvbnRl
eHQgY3VycmVudEdMQ29uZXh0ID0gZ2V0Q3VycmVudEdMQ29udGV4dCgpOwogICAgICAgICAgICAg
R0xDb250ZXh0RGF0YU1hcDo6aXRlcmF0b3IgaXQgPSBnbENvbnRleHREYXRhTWFwKCkuZmluZChj
dXJyZW50R0xDb25leHQpOwogICAgICAgICAgICAgaWYgKGl0ICE9IGdsQ29udGV4dERhdGFNYXAo
KS5lbmQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gaXQtPnZhbHVlOwogCiAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFNoYXJlZEdMRGF0YShnZXRDdXJyZW50R0xDb250ZXh0KCkpKTsKICAgICAgICAgfQpAQCAtMTM2
LDcgKzEzNiw3IEBAIHN0cnVjdCBUZXh0dXJlTWFwcGVyR0xEYXRhIHsKICAgICAgICAgICAgIEdM
Q29udGV4dERhdGFNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGdsQ29udGV4dERhdGFNYXAoKS5l
bmQoKTsKICAgICAgICAgICAgIEdMQ29udGV4dERhdGFNYXA6Oml0ZXJhdG9yIGl0OwogICAgICAg
ICAgICAgZm9yIChpdCA9IGdsQ29udGV4dERhdGFNYXAoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKLSAgICAgICAgICAgICAgICBpZiAoaXQtPnNlY29uZCA9PSB0aGlzKQorICAgICAgICAg
ICAgICAgIGlmIChpdC0+dmFsdWUgPT0gdGhpcykKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIu
Y3BwCmluZGV4IDBmYmRiZTkuLjQ2NDlmNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJT
aGFkZXJNYW5hZ2VyLmNwcApAQCAtMjA4LDcgKzIwOCw3IEBAIFBhc3NSZWZQdHI8VGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW0+IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpnZXRTaGFkZXJQ
cm9nCiAKICAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU1hcDo6aXRlcmF0b3IgaXQgPSBt
X3RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtTWFwLmZpbmQoc2hhZGVyVHlwZSk7CiAgICAgaWYg
KGl0ICE9IG1fdGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1NYXAuZW5kKCkpCi0gICAgICAgIHJl
dHVybiBpdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwogCiAgICAgc3dpdGNo
IChzaGFkZXJUeXBlKSB7CiAgICAgY2FzZSBTaW1wbGU6CkBAIC03NjUsNyArNzY1LDcgQEAgUGFz
c1JlZlB0cjxTdGFuZGFyZEZpbHRlclByb2dyYW0+IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2Vy
OjpnZXRTaGFkZXJGb3JGaWx0ZXIKIAogICAgICAgICBtX2ZpbHRlck1hcC5hZGQoa2V5LCBwcm9n
cmFtKTsKICAgICB9IGVsc2UKLSAgICAgICAgcHJvZ3JhbSA9IGl0ZXJhdG9yLT5zZWNvbmQ7Cisg
ICAgICAgIHByb2dyYW0gPSBpdGVyYXRvci0+dmFsdWU7CiAKICAgICByZXR1cm4gcHJvZ3JhbTsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0Zv
bnRQbGF0Zm9ybURhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
Y2UvRm9udFBsYXRmb3JtRGF0YS5jcHAKaW5kZXggMTk3OTBhZC4uMTlmNTI0NSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udFBsYXRmb3JtRGF0
YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udFBs
YXRmb3JtRGF0YS5jcHAKQEAgLTI4Nyw5ICsyODcsOSBAQCBzdGF0aWMgUGFzc1JlZlB0cjxGaXhl
ZFNpemVGb250RGF0YT4gY3JlYXRlRml4ZWRTaXplRm9udERhdGEoY29uc3QgQXRvbWljU3RyaW5n
JgogICAgIEZpeGVkU2l6ZUZvbnREYXRhS2V5IGtleShmYW1pbHksIHdlaWdodCwgaXRhbGljKTsK
ICAgICBGaXhlZFNpemVGb250Q2FjaGU6OkFkZFJlc3VsdCByZXN1bHQgPSBnX2ZpeGVkU2l6ZUZv
bnRDYWNoZS5hZGQoa2V5LCBSZWZQdHI8Rml4ZWRTaXplRm9udERhdGE+KCkpOwogICAgIGlmIChy
ZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBGaXhl
ZFNpemVGb250RGF0YTo6Y3JlYXRlKGZhbWlseSwgd2VpZ2h0LCBpdGFsaWMpOworICAgICAgICBy
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gRml4ZWRTaXplRm9udERhdGE6OmNyZWF0ZShmYW1pbHks
IHdlaWdodCwgaXRhbGljKTsKIAotICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsK
KyAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIAogc3RhdGljIExPTkcgdG9H
RElGb250V2VpZ2h0KEZvbnRXZWlnaHQgZm9udFdlaWdodCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmNwcAppbmRleCAxYTg0ZjhiLi5hZGZjNjZlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRGF0YU9iamVjdEd0ay5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RhdGFPYmplY3RHdGsuY3BwCkBAIC0xNzEs
NyArMTcxLDcgQEAgRGF0YU9iamVjdEd0ayogRGF0YU9iamVjdEd0azo6Zm9yQ2xpcGJvYXJkKEd0
a0NsaXBib2FyZCogY2xpcGJvYXJkKQogICAgIH0KIAogICAgIEhhc2hNYXA8R3RrQ2xpcGJvYXJk
KiwgUmVmUHRyPERhdGFPYmplY3RHdGs+ID46Oml0ZXJhdG9yIGl0ID0gb2JqZWN0TWFwLmZpbmQo
Y2xpcGJvYXJkKTsKLSAgICByZXR1cm4gaXQtPnNlY29uZC5nZXQoKTsKKyAgICByZXR1cm4gaXQt
PnZhbHVlLmdldCgpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvR3RrRHJhZ0FuZERyb3BIZWxwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL0d0a0RyYWdBbmREcm9wSGVscGVyLmNwcAppbmRleCA3NjNkMTIwLi5mYzJmNTZlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrRHJhZ0FuZERyb3BIZWxwZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtEcmFnQW5kRHJvcEhlbHBl
ci5jcHAKQEAgLTcwLDcgKzcwLDcgQEAgdm9pZCBHdGtEcmFnQW5kRHJvcEhlbHBlcjo6aGFuZGxl
R2V0RHJhZ0RhdGEoR2RrRHJhZ0NvbnRleHQqIGNvbnRleHQsIEd0a1NlbGVjdGkKICAgICBEcmFn
Z2luZ0RhdGFPYmplY3RzTWFwOjppdGVyYXRvciBpdGVyYXRvciA9IG1fZHJhZ2dpbmdEYXRhT2Jq
ZWN0cy5maW5kKGNvbnRleHQpOwogICAgIGlmIChpdGVyYXRvciA9PSBtX2RyYWdnaW5nRGF0YU9i
amVjdHMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZh
dWx0UGFzdGVib2FyZEhlbHBlcigpLT5maWxsU2VsZWN0aW9uRGF0YShzZWxlY3Rpb25EYXRhLCBp
bmZvLCBpdGVyYXRvci0+c2Vjb25kLmdldCgpKTsKKyAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZh
dWx0UGFzdGVib2FyZEhlbHBlcigpLT5maWxsU2VsZWN0aW9uRGF0YShzZWxlY3Rpb25EYXRhLCBp
bmZvLCBpdGVyYXRvci0+dmFsdWUuZ2V0KCkpOwogfQogCiBzdHJ1Y3QgSGFuZGxlRHJhZ0xhdGVy
RGF0YSB7CkBAIC0xMTYsNyArMTE2LDcgQEAgdm9pZCBHdGtEcmFnQW5kRHJvcEhlbHBlcjo6aGFu
ZGxlRHJhZ0xlYXZlKEdka0RyYWdDb250ZXh0KiBnZGtDb250ZXh0LCBEcmFnRXhpdGUKICAgICAv
LyB0aGUgZHJhZy1kcm9wIHNpZ25hbC4gV2Ugd2FudCB0aGUgYWN0aW9ucyBmb3IgZHJhZy1sZWF2
ZSB0byBoYXBwZW4gYWZ0ZXIKICAgICAvLyB0aG9zZSBmb3IgZHJhZy1kcm9wLCBzbyBzY2hlZHVs
ZSB0aGVtIHRvIGhhcHBlbiBhc3luY2hyb25vdXNseSBoZXJlLgogICAgIEhhbmRsZURyYWdMYXRl
ckRhdGEqIGRhdGEgPSBuZXcgSGFuZGxlRHJhZ0xhdGVyRGF0YTsKLSAgICBkYXRhLT5jb250ZXh0
ID0gaXRlcmF0b3ItPnNlY29uZDsKKyAgICBkYXRhLT5jb250ZXh0ID0gaXRlcmF0b3ItPnZhbHVl
OwogICAgIGRhdGEtPmNvbnRleHQtPmV4aXRlZENhbGxiYWNrID0gZXhpdGVkQ2FsbGJhY2s7CiAg
ICAgZGF0YS0+Z2x1ZSA9IHRoaXM7CiAgICAgZ190aW1lb3V0X2FkZCgwLCByZWludGVycHJldF9j
YXN0PEdTb3VyY2VGdW5jPihoYW5kbGVEcmFnTGVhdmVMYXRlckNhbGxiYWNrKSwgZGF0YSk7CkBA
IC0xNDAsNyArMTQwLDcgQEAgUGFzc093blB0cjxEcmFnRGF0YT4gR3RrRHJhZ0FuZERyb3BIZWxw
ZXI6OmhhbmRsZURyYWdNb3Rpb24oR2RrRHJhZ0NvbnRleHQqIGNvbnQKICAgICAgICAgbV9kcm9w
cGluZ0NvbnRleHRzLnNldChjb250ZXh0LCBkcm9wcGluZ0NvbnRleHQpOwogICAgICAgICBxdWVy
eU5ld0Ryb3BDb250ZXh0RGF0YShkcm9wcGluZ0NvbnRleHQsIG1fd2lkZ2V0LCB0aW1lKTsKICAg
ICB9IGVsc2UgewotICAgICAgICBkcm9wcGluZ0NvbnRleHQgPSBpdGVyYXRvci0+c2Vjb25kOwor
ICAgICAgICBkcm9wcGluZ0NvbnRleHQgPSBpdGVyYXRvci0+dmFsdWU7CiAgICAgICAgIGRyb3Bw
aW5nQ29udGV4dC0+bGFzdE1vdGlvblBvc2l0aW9uID0gcG9zaXRpb247CiAgICAgfQogCkBAIC0x
NjIsNyArMTYyLDcgQEAgUGFzc093blB0cjxEcmFnRGF0YT4gR3RrRHJhZ0FuZERyb3BIZWxwZXI6
OmhhbmRsZURyYWdEYXRhUmVjZWl2ZWQoR2RrRHJhZ0NvbnRleHQKICAgICBpZiAoaXRlcmF0b3Ig
PT0gbV9kcm9wcGluZ0NvbnRleHRzLmVuZCgpKQogICAgICAgICByZXR1cm4gYWRvcHRQdHIoc3Rh
dGljX2Nhc3Q8RHJhZ0RhdGEqPigwKSk7CiAKLSAgICBEcm9wcGluZ0NvbnRleHQqIGRyb3BwaW5n
Q29udGV4dCA9IGl0ZXJhdG9yLT5zZWNvbmQ7CisgICAgRHJvcHBpbmdDb250ZXh0KiBkcm9wcGlu
Z0NvbnRleHQgPSBpdGVyYXRvci0+dmFsdWU7CiAgICAgZHJvcHBpbmdDb250ZXh0LT5wZW5kaW5n
RGF0YVJlcXVlc3RzLS07CiAgICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRI
ZWxwZXIoKS0+ZmlsbERhdGFPYmplY3RGcm9tRHJvcERhdGEoc2VsZWN0aW9uRGF0YSwgaW5mbywg
ZHJvcHBpbmdDb250ZXh0LT5kYXRhT2JqZWN0LmdldCgpKTsKIApAQCAtMTg1LDcgKzE4NSw3IEBA
IFBhc3NPd25QdHI8RHJhZ0RhdGE+IEd0a0RyYWdBbmREcm9wSGVscGVyOjpoYW5kbGVEcmFnRHJv
cChHZGtEcmFnQ29udGV4dCogY29udGV4CiAgICAgaWYgKGl0ZXJhdG9yID09IG1fZHJvcHBpbmdD
b250ZXh0cy5lbmQoKSkKICAgICAgICAgcmV0dXJuIGFkb3B0UHRyKHN0YXRpY19jYXN0PERyYWdE
YXRhKj4oMCkpOwogCi0gICAgRHJvcHBpbmdDb250ZXh0KiBkcm9wcGluZ0NvbnRleHQgPSBpdGVy
YXRvci0+c2Vjb25kOworICAgIERyb3BwaW5nQ29udGV4dCogZHJvcHBpbmdDb250ZXh0ID0gaXRl
cmF0b3ItPnZhbHVlOwogICAgIGRyb3BwaW5nQ29udGV4dC0+ZHJvcEhhcHBlbmVkID0gdHJ1ZTsK
IAogICAgIHJldHVybiBhZG9wdFB0cihuZXcgRHJhZ0RhdGEoZHJvcHBpbmdDb250ZXh0LT5kYXRh
T2JqZWN0LmdldCgpLCBwb3NpdGlvbiwgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGszLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9SZW5kZXJUaGVtZUd0azMuY3BwCmluZGV4IDc3NDkzOTEuLjBhODM4MjcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0azMuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0azMuY3BwCkBAIC01Niw3ICs1
Niw3IEBAIHN0YXRpYyB2b2lkIGd0a1N0eWxlQ2hhbmdlZENhbGxiYWNrKEdPYmplY3QqLCBHUGFy
YW1TcGVjKikKIHsKICAgICBTdHlsZUNvbnRleHRNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHN0
eWxlQ29udGV4dE1hcCgpLmVuZCgpOwogICAgIGZvciAoU3R5bGVDb250ZXh0TWFwOjpjb25zdF9p
dGVyYXRvciBpdGVyID0gc3R5bGVDb250ZXh0TWFwKCkuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsr
aXRlcikKLSAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfaW52YWxpZGF0ZShpdGVyLT5zZWNvbmQu
Z2V0KCkpOworICAgICAgICBndGtfc3R5bGVfY29udGV4dF9pbnZhbGlkYXRlKGl0ZXItPnZhbHVl
LmdldCgpKTsKIAogICAgIFBhZ2U6OnNjaGVkdWxlRm9yY2VkU3R5bGVSZWNhbGNGb3JBbGxQYWdl
cygpOwogfQpAQCAtNzksNyArNzksNyBAQCBzdGF0aWMgR3RrU3R5bGVDb250ZXh0KiBnZXRTdHls
ZUNvbnRleHQoR1R5cGUgd2lkZ2V0VHlwZSkKIHsKICAgICBTdHlsZUNvbnRleHRNYXA6OkFkZFJl
c3VsdCByZXN1bHQgPSBzdHlsZUNvbnRleHRNYXAoKS5hZGQod2lkZ2V0VHlwZSwgMCk7CiAgICAg
aWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+
c2Vjb25kLmdldCgpOworICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQo
KTsKIAogICAgIEd0a1dpZGdldFBhdGgqIHBhdGggPSBndGtfd2lkZ2V0X3BhdGhfbmV3KCk7CiAg
ICAgZ3RrX3dpZGdldF9wYXRoX2FwcGVuZF90eXBlKHBhdGgsIHdpZGdldFR5cGUpOwpAQCAtMTEx
LDcgKzExMSw3IEBAIHN0YXRpYyBHdGtTdHlsZUNvbnRleHQqIGdldFN0eWxlQ29udGV4dChHVHlw
ZSB3aWRnZXRUeXBlKQogICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9wYXRoKGNvbnRleHQuZ2V0
KCksIHBhdGgpOwogICAgIGd0a193aWRnZXRfcGF0aF9mcmVlKHBhdGgpOwogCi0gICAgcmVzdWx0
Lml0ZXJhdG9yLT5zZWNvbmQgPSBjb250ZXh0OworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUg
PSBjb250ZXh0OwogICAgIHJldHVybiBjb250ZXh0LmdldCgpOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMubW0gYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMubW0KaW5kZXggMzIzNzE5Yi4u
MzcxYmRkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbGJh
clRoZW1lTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxiYXJU
aGVtZU1hYy5tbQpAQCAtODYsOCArODYsOCBAQCBzdGF0aWMgU2Nyb2xsYmFyUGFpbnRlck1hcCog
c2Nyb2xsYmFyTWFwKCkKICAgICAgICAgcmV0dXJuOwogICAgIFNjcm9sbGJhclBhaW50ZXJNYXA6
Oml0ZXJhdG9yIGVuZCA9IHNjcm9sbGJhck1hcCgpLT5lbmQoKTsKICAgICBmb3IgKFNjcm9sbGJh
clBhaW50ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gc2Nyb2xsYmFyTWFwKCktPmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgewotICAgICAgICBpdC0+Zmlyc3QtPnN0eWxlQ2hhbmdlZCgpOwotICAgICAg
ICBpdC0+Zmlyc3QtPmludmFsaWRhdGUoKTsKKyAgICAgICAgaXQtPmtleS0+c3R5bGVDaGFuZ2Vk
KCk7CisgICAgICAgIGl0LT5rZXktPmludmFsaWRhdGUoKTsKICAgICB9CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbFN0b3JhZ2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFsU3RvcmFnZS5jcHAK
aW5kZXggZjYyNGQ0Zi4uOGI1YWM0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9DcmVkZW50aWFsU3RvcmFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9DcmVkZW50aWFsU3RvcmFnZS5jcHAKQEAgLTE0Nyw3ICsxNDcsNyBAQCBi
b29sIENyZWRlbnRpYWxTdG9yYWdlOjpzZXQoY29uc3QgQ3JlZGVudGlhbCYgY3JlZGVudGlhbCwg
Y29uc3QgS1VSTCYgdXJsKQogICAgIGlmIChpdGVyID09IHBhdGhUb0RlZmF1bHRQcm90ZWN0aW9u
U3BhY2VNYXAoKS5lbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEFTU0VSVChvcmln
aW5zV2l0aENyZWRlbnRpYWxzKCkuY29udGFpbnMob3JpZ2luU3RyaW5nRnJvbVVSTCh1cmwpKSk7
Ci0gICAgcHJvdGVjdGlvblNwYWNlVG9DcmVkZW50aWFsTWFwKCkuc2V0KGl0ZXItPnNlY29uZCwg
Y3JlZGVudGlhbCk7CisgICAgcHJvdGVjdGlvblNwYWNlVG9DcmVkZW50aWFsTWFwKCkuc2V0KGl0
ZXItPnZhbHVlLCBjcmVkZW50aWFsKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTU2LDcg
KzE1Niw3IEBAIENyZWRlbnRpYWwgQ3JlZGVudGlhbFN0b3JhZ2U6OmdldChjb25zdCBLVVJMJiB1
cmwpCiAgICAgUGF0aFRvRGVmYXVsdFByb3RlY3Rpb25TcGFjZU1hcDo6aXRlcmF0b3IgaXRlciA9
IGZpbmREZWZhdWx0UHJvdGVjdGlvblNwYWNlRm9yVVJMKHVybCk7CiAgICAgaWYgKGl0ZXIgPT0g
cGF0aFRvRGVmYXVsdFByb3RlY3Rpb25TcGFjZU1hcCgpLmVuZCgpKQogICAgICAgICByZXR1cm4g
Q3JlZGVudGlhbCgpOwotICAgIHJldHVybiBwcm90ZWN0aW9uU3BhY2VUb0NyZWRlbnRpYWxNYXAo
KS5nZXQoaXRlci0+c2Vjb25kKTsKKyAgICByZXR1cm4gcHJvdGVjdGlvblNwYWNlVG9DcmVkZW50
aWFsTWFwKCkuZ2V0KGl0ZXItPnZhbHVlKTsKIH0KIAogdm9pZCBDcmVkZW50aWFsU3RvcmFnZTo6
c2V0UHJpdmF0ZU1vZGUoYm9vbCBtb2RlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9IVFRQSGVhZGVyTWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvSFRUUEhlYWRlck1hcC5jcHAKaW5kZXggNTAwOTFlMS4uZGVmZTFhZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQSGVhZGVyTWFwLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBIZWFkZXJNYXAuY3BwCkBA
IC01Miw3ICs1Miw3IEBAIFBhc3NPd25QdHI8Q3Jvc3NUaHJlYWRIVFRQSGVhZGVyTWFwRGF0YT4g
SFRUUEhlYWRlck1hcDo6Y29weURhdGEoKSBjb25zdAogCiAgICAgSFRUUEhlYWRlck1hcDo6Y29u
c3RfaXRlcmF0b3IgZW5kX2l0ID0gZW5kKCk7CiAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IGJlZ2luKCk7IGl0ICE9IGVuZF9pdDsgKytpdCkgewotICAgICAgICBk
YXRhLT5hcHBlbmQobWFrZV9wYWlyKGl0LT5maXJzdC5zdHJpbmcoKS5pc29sYXRlZENvcHkoKSwg
aXQtPnNlY29uZC5pc29sYXRlZENvcHkoKSkpOworICAgICAgICBkYXRhLT5hcHBlbmQobWFrZV9w
YWlyKGl0LT5rZXkuc3RyaW5nKCkuaXNvbGF0ZWRDb3B5KCksIGl0LT52YWx1ZS5pc29sYXRlZENv
cHkoKSkpOwogICAgIH0KICAgICByZXR1cm4gZGF0YS5yZWxlYXNlKCk7CiB9CkBAIC0xMDAsNyAr
MTAwLDcgQEAgU3RyaW5nIEhUVFBIZWFkZXJNYXA6OmdldChjb25zdCBjaGFyKiBuYW1lKSBjb25z
dAogICAgIGNvbnN0X2l0ZXJhdG9yIGkgPSBmaW5kPGNvbnN0IGNoYXIqLCBDYXNlRm9sZGluZ0NT
dHJpbmdUcmFuc2xhdG9yPihuYW1lKTsKICAgICBpZiAoaSA9PSBlbmQoKSkKICAgICAgICAgcmV0
dXJuIFN0cmluZygpOwotICAgIHJldHVybiBpLT5zZWNvbmQ7CisgICAgcmV0dXJuIGktPnZhbHVl
OwogfQogICAgIAogYm9vbCBIVFRQSGVhZGVyTWFwOjpjb250YWlucyhjb25zdCBjaGFyKiBuYW1l
KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9NSU1F
SGVhZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvTUlNRUhlYWRlci5j
cHAKaW5kZXggNWQ2Yjg1OC4uZjRlM2ViZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9NSU1FSGVhZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL01JTUVIZWFkZXIuY3BwCkBAIC04Niw3ICs4Niw3IEBAIFBhc3NSZWZQdHI8TUlN
RUhlYWRlcj4gTUlNRUhlYWRlcjo6cGFyc2VIZWFkZXIoU2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXIq
IGJ1ZmZlcikKICAgICBLZXlWYWx1ZU1hcDo6aXRlcmF0b3IgbWltZVBhcmFtZXRlcnNJdGVyYXRv
ciA9IGtleVZhbHVlUGFpcnMuZmluZCgiY29udGVudC10eXBlIik7CiAgICAgaWYgKG1pbWVQYXJh
bWV0ZXJzSXRlcmF0b3IgIT0ga2V5VmFsdWVQYWlycy5lbmQoKSkgewogICAgICAgICAvLyBGSVhN
RTogbWFrZSBDb250ZW50VHlwZVBhcnNlciBtb3JlIGZsZXhpYmxlIHNvIHdlIGRvbid0IGhhdmUg
dG8gc3ludGhlc2l6ZSB0aGUgIkNvbnRlbnQtVHlwZToiLgotICAgICAgICBDb250ZW50VHlwZVBh
cnNlciBjb250ZW50VHlwZVBhcnNlcihtYWtlU3RyaW5nKCJDb250ZW50LVR5cGU6IiwgbWltZVBh
cmFtZXRlcnNJdGVyYXRvci0+c2Vjb25kKSk7CisgICAgICAgIENvbnRlbnRUeXBlUGFyc2VyIGNv
bnRlbnRUeXBlUGFyc2VyKG1ha2VTdHJpbmcoIkNvbnRlbnQtVHlwZToiLCBtaW1lUGFyYW1ldGVy
c0l0ZXJhdG9yLT52YWx1ZSkpOwogICAgICAgICBtaW1lSGVhZGVyLT5tX2NvbnRlbnRUeXBlID0g
Y29udGVudFR5cGVQYXJzZXIubWltZVR5cGUoKTsKICAgICAgICAgaWYgKCFtaW1lSGVhZGVyLT5p
c011bHRpcGFydCgpKQogICAgICAgICAgICAgbWltZUhlYWRlci0+bV9jaGFyc2V0ID0gY29udGVu
dFR5cGVQYXJzZXIuY2hhcnNldCgpLnN0cmlwV2hpdGVTcGFjZSgpOwpAQCAtMTA1LDExICsxMDUs
MTEgQEAgUGFzc1JlZlB0cjxNSU1FSGVhZGVyPiBNSU1FSGVhZGVyOjpwYXJzZUhlYWRlcihTaGFy
ZWRCdWZmZXJDaHVua1JlYWRlciogYnVmZmVyKQogCiAgICAgbWltZVBhcmFtZXRlcnNJdGVyYXRv
ciA9IGtleVZhbHVlUGFpcnMuZmluZCgiY29udGVudC10cmFuc2Zlci1lbmNvZGluZyIpOwogICAg
IGlmIChtaW1lUGFyYW1ldGVyc0l0ZXJhdG9yICE9IGtleVZhbHVlUGFpcnMuZW5kKCkpCi0gICAg
ICAgIG1pbWVIZWFkZXItPm1fY29udGVudFRyYW5zZmVyRW5jb2RpbmcgPSBwYXJzZUNvbnRlbnRU
cmFuc2ZlckVuY29kaW5nKG1pbWVQYXJhbWV0ZXJzSXRlcmF0b3ItPnNlY29uZCk7CisgICAgICAg
IG1pbWVIZWFkZXItPm1fY29udGVudFRyYW5zZmVyRW5jb2RpbmcgPSBwYXJzZUNvbnRlbnRUcmFu
c2ZlckVuY29kaW5nKG1pbWVQYXJhbWV0ZXJzSXRlcmF0b3ItPnZhbHVlKTsKIAogICAgIG1pbWVQ
YXJhbWV0ZXJzSXRlcmF0b3IgPSBrZXlWYWx1ZVBhaXJzLmZpbmQoImNvbnRlbnQtbG9jYXRpb24i
KTsKICAgICBpZiAobWltZVBhcmFtZXRlcnNJdGVyYXRvciAhPSBrZXlWYWx1ZVBhaXJzLmVuZCgp
KQotICAgICAgICBtaW1lSGVhZGVyLT5tX2NvbnRlbnRMb2NhdGlvbiA9IG1pbWVQYXJhbWV0ZXJz
SXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgbWltZUhlYWRlci0+bV9jb250ZW50TG9jYXRpb24g
PSBtaW1lUGFyYW1ldGVyc0l0ZXJhdG9yLT52YWx1ZTsKIAogICAgIHJldHVybiBtaW1lSGVhZGVy
LnJlbGVhc2UoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvUmVzb3VyY2VIYW5kbGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9S
ZXNvdXJjZUhhbmRsZS5jcHAKaW5kZXggN2RkYzQ3ZS4uNmQxMmY5ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAKQEAgLTcxLDcg
KzcxLDcgQEAgUGFzc1JlZlB0cjxSZXNvdXJjZUhhbmRsZT4gUmVzb3VyY2VIYW5kbGU6OmNyZWF0
ZShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY28KICAgICBCdWlsdGluUmVzb3VyY2VIYW5k
bGVDb25zdHJ1Y3Rvck1hcDo6aXRlcmF0b3IgcHJvdG9jb2xNYXBJdGVtID0gYnVpbHRpblJlc291
cmNlSGFuZGxlQ29uc3RydWN0b3JNYXAoKS5maW5kKHJlcXVlc3QudXJsKCkucHJvdG9jb2woKSk7
CiAKICAgICBpZiAocHJvdG9jb2xNYXBJdGVtICE9IGJ1aWx0aW5SZXNvdXJjZUhhbmRsZUNvbnN0
cnVjdG9yTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiBwcm90b2NvbE1hcEl0ZW0tPnNlY29u
ZChyZXF1ZXN0LCBjbGllbnQpOworICAgICAgICByZXR1cm4gcHJvdG9jb2xNYXBJdGVtLT52YWx1
ZShyZXF1ZXN0LCBjbGllbnQpOwogCiAgICAgUmVmUHRyPFJlc291cmNlSGFuZGxlPiBuZXdIYW5k
bGUoYWRvcHRSZWYobmV3IFJlc291cmNlSGFuZGxlKHJlcXVlc3QsIGNsaWVudCwgZGVmZXJzTG9h
ZGluZywgc2hvdWxkQ29udGVudFNuaWZmKSkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcAppbmRleCAzNTA5Nzky
Li41MzE1YzFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jl
c291cmNlUmVxdWVzdEJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHAKQEAgLTM3Myw3ICszNzMsNyBAQCB2b2lkIFJlc291
cmNlUmVxdWVzdEJhc2U6OmFkZEhUVFBIZWFkZXJGaWVsZChjb25zdCBBdG9taWNTdHJpbmcmIG5h
bWUsIGNvbnN0IFN0cgogICAgIHVwZGF0ZVJlc291cmNlUmVxdWVzdCgpOwogICAgIEhUVFBIZWFk
ZXJNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX2h0dHBIZWFkZXJGaWVsZHMuYWRkKG5hbWUsIHZh
bHVlKTsKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXN1bHQuaXRlcmF0
b3ItPnNlY29uZCArPSAiLCIgKyB2YWx1ZTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZSArPSAiLCIgKyB2YWx1ZTsKIAogICAgIGlmICh1cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5
KCkpCiAgICAgICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZhbHNlOwpAQCAtMzgzLDcg
KzM4Myw3IEBAIHZvaWQgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6YWRkSFRUUEhlYWRlckZpZWxkcyhj
b25zdCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJGaWVsZHMpCiB7CiAgICAgSFRUUEhlYWRlck1hcDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gaGVhZGVyRmllbGRzLmVuZCgpOwogICAgIGZvciAoSFRUUEhl
YWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBoZWFkZXJGaWVsZHMuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KQotICAgICAgICBhZGRIVFRQSGVhZGVyRmllbGQoaXQtPmZpcnN0LCBpdC0+c2Vj
b25kKTsKKyAgICAgICAgYWRkSFRUUEhlYWRlckZpZWxkKGl0LT5rZXksIGl0LT52YWx1ZSk7CiB9
CiAKIGJvb2wgZXF1YWxJZ25vcmluZ0hlYWRlckZpZWxkcyhjb25zdCBSZXNvdXJjZVJlcXVlc3RC
YXNlJiBhLCBjb25zdCBSZXNvdXJjZVJlcXVlc3RCYXNlJiBiKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRk5ldC5jcHAK
aW5kZXggZjZkMWYzOC4uMDFlOGI4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZOZXQuY3BwCkBAIC00MjgsNyAr
NDI4LDcgQEAgc3RhdGljIENGVVJMUmVxdWVzdFJlZiBtYWtlRmluYWxSZXF1ZXN0KGNvbnN0IFJl
c291cmNlUmVxdWVzdCYgcmVxdWVzdCwgYm9vbCBzaG8KICAgICAgICAgaWYgKCFzc2xQcm9wcykK
ICAgICAgICAgICAgIHNzbFByb3BzLmFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlTXV0YWJsZShr
Q0ZBbGxvY2F0b3JEZWZhdWx0LCAwLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZr
Q0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CiAjaWYgUExBVEZPUk0oV0lOKQotICAg
ICAgICB3a1NldENsaWVudENlcnRpZmljYXRlSW5TU0xQcm9wZXJ0aWVzKHNzbFByb3BzLmdldCgp
LCAoY2xpZW50Q2VydC0+c2Vjb25kKS5nZXQoKSk7CisgICAgICAgIHdrU2V0Q2xpZW50Q2VydGlm
aWNhdGVJblNTTFByb3BlcnRpZXMoc3NsUHJvcHMuZ2V0KCksIChjbGllbnRDZXJ0LT52YWx1ZSku
Z2V0KCkpOwogI2VuZGlmCiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlUmVxdWVzdENGTmV0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0Q0ZOZXQuY3BwCmluZGV4IDUyMGQ2
ODUuLmQ2ZGY2MWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y2YvUmVzb3VyY2VSZXF1ZXN0Q0ZOZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0Q0ZOZXQuY3BwCkBAIC0xMjAsOCArMTIwLDggQEAg
c3RhdGljIGlubGluZSB2b2lkIHNldEhlYWRlckZpZWxkcyhDRk11dGFibGVVUkxSZXF1ZXN0UmVm
IHJlcXVlc3QsIGNvbnN0IEhUVFBIZWEKIAogICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IHJlcXVlc3RIZWFkZXJzLmVuZCgpOwogICAgIGZvciAoSFRUUEhlYWRlck1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSByZXF1ZXN0SGVhZGVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKLSAgICAgICAgQ0ZTdHJpbmdSZWYga2V5ID0gaXQtPmZpcnN0LmNyZWF0ZUNGU3RyaW5n
KCk7Ci0gICAgICAgIENGU3RyaW5nUmVmIHZhbHVlID0gaXQtPnNlY29uZC5jcmVhdGVDRlN0cmlu
ZygpOworICAgICAgICBDRlN0cmluZ1JlZiBrZXkgPSBpdC0+a2V5LmNyZWF0ZUNGU3RyaW5nKCk7
CisgICAgICAgIENGU3RyaW5nUmVmIHZhbHVlID0gaXQtPnZhbHVlLmNyZWF0ZUNGU3RyaW5nKCk7
CiAgICAgICAgIENGVVJMUmVxdWVzdFNldEhUVFBIZWFkZXJGaWVsZFZhbHVlKHJlcXVlc3QsIGtl
eSwgdmFsdWUpOwogICAgICAgICBDRlJlbGVhc2Uoa2V5KTsKICAgICAgICAgQ0ZSZWxlYXNlKHZh
bHVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9S
ZXNvdXJjZUhhbmRsZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHAKaW5kZXggYWYwNzVlZi4uNjViY2MxMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNl
SGFuZGxlTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
dXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHAKQEAgLTcwMyw4ICs3MDMsOCBAQCB2b2lkIFJl
c291cmNlSGFuZGxlTWFuYWdlcjo6aW5pdGlhbGl6ZUhhbmRsZShSZXNvdXJjZUhhbmRsZSogam9i
KQogICAgICAgICBIVFRQSGVhZGVyTWFwIGN1c3RvbUhlYWRlcnMgPSBqb2ItPmZpcnN0UmVxdWVz
dCgpLmh0dHBIZWFkZXJGaWVsZHMoKTsKICAgICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gY3VzdG9tSGVhZGVycy5lbmQoKTsKICAgICAgICAgZm9yIChIVFRQSGVhZGVy
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGN1c3RvbUhlYWRlcnMuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7Ci0gICAgICAgICAgICBTdHJpbmcga2V5ID0gaXQtPmZpcnN0OwotICAgICAgICAg
ICAgU3RyaW5nIHZhbHVlID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIFN0cmluZyBrZXkgPSBp
dC0+a2V5OworICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0gaXQtPnZhbHVlOwogICAgICAgICAg
ICAgU3RyaW5nIGhlYWRlclN0cmluZyhrZXkpOwogICAgICAgICAgICAgaGVhZGVyU3RyaW5nLmFw
cGVuZCgiOiAiKTsKICAgICAgICAgICAgIGhlYWRlclN0cmluZy5hcHBlbmQodmFsdWUpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VSZXF1
ZXN0TWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VS
ZXF1ZXN0TWFjLm1tCmluZGV4IDk2YzQ5N2QuLjkzMjE2Y2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlUmVxdWVzdE1hYy5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZVJlcXVlc3RNYWMubW0K
QEAgLTE1NSw3ICsxNTUsNyBAQCB2b2lkIFJlc291cmNlUmVxdWVzdDo6ZG9VcGRhdGVQbGF0Zm9y
bVJlcXVlc3QoKQogICAgICAgICBbbnNSZXF1ZXN0IHNldFZhbHVlOm5pbCBmb3JIVFRQSGVhZGVy
RmllbGQ6W29sZEhlYWRlckZpZWxkTmFtZXMgb2JqZWN0QXRJbmRleDppIC0gMV1dOwogICAgIEhU
VFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGh0dHBIZWFkZXJGaWVsZHMoKS5lbmQo
KTsKICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaHR0cEhlYWRl
ckZpZWxkcygpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgW25zUmVxdWVzdCBz
ZXRWYWx1ZTppdC0+c2Vjb25kIGZvckhUVFBIZWFkZXJGaWVsZDppdC0+Zmlyc3RdOworICAgICAg
ICBbbnNSZXF1ZXN0IHNldFZhbHVlOml0LT52YWx1ZSBmb3JIVFRQSGVhZGVyRmllbGQ6aXQtPmtl
eV07CiAKICAgICAvLyBUaGUgYmVsb3cgY2hlY2sgY2FuIGJlIHJlbW92ZWQgb25jZSB3ZSByZXF1
aXJlIGEgdmVyc2lvbiBvZiBGb3VuZGF0aW9uIHdpdGggLVtOU011dGFibGVVUkxSZXF1ZXN0IHNl
dENvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheTpdIG1ldGhvZC4KICAgICBz
dGF0aWMgYm9vbCBzdXBwb3J0c0NvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJh
eSA9IFtOU011dGFibGVVUkxSZXF1ZXN0IGluc3RhbmNlc1Jlc3BvbmRUb1NlbGVjdG9yOkBzZWxl
Y3RvcihzZXRDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXk6KV07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3F0L1Jlc291cmNlUmVxdWVz
dFF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvcXQvUmVzb3VyY2VSZXF1
ZXN0UXQuY3BwCmluZGV4IGRiYjdiNzQuLmU4NGU2NzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvcXQvUmVzb3VyY2VSZXF1ZXN0UXQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvcXQvUmVzb3VyY2VSZXF1ZXN0UXQuY3BwCkBAIC00
OSw4ICs0OSw4IEBAIFFOZXR3b3JrUmVxdWVzdCBSZXNvdXJjZVJlcXVlc3Q6OnRvTmV0d29ya1Jl
cXVlc3QoTmV0d29ya2luZ0NvbnRleHQgKmNvbnRleHQpIGNvCiAgICAgY29uc3QgSFRUUEhlYWRl
ck1hcCAmaGVhZGVycyA9IGh0dHBIZWFkZXJGaWVsZHMoKTsKICAgICBmb3IgKEhUVFBIZWFkZXJN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaGVhZGVycy5iZWdpbigpLCBlbmQgPSBoZWFkZXJzLmVu
ZCgpOwogICAgICAgICAgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFFCeXRlQXJyYXkgbmFt
ZSA9IFFTdHJpbmcoaXQtPmZpcnN0KS50b0xhdGluMSgpOwotICAgICAgICBRQnl0ZUFycmF5IHZh
bHVlID0gUVN0cmluZyhpdC0+c2Vjb25kKS50b0xhdGluMSgpOworICAgICAgICBRQnl0ZUFycmF5
IG5hbWUgPSBRU3RyaW5nKGl0LT5rZXkpLnRvTGF0aW4xKCk7CisgICAgICAgIFFCeXRlQXJyYXkg
dmFsdWUgPSBRU3RyaW5nKGl0LT52YWx1ZSkudG9MYXRpbjEoKTsKICAgICAgICAgLy8gUU5ldHdv
cmtSZXF1ZXN0OjpzZXRSYXdIZWFkZXIoKSB3b3VsZCByZW1vdmUgdGhlIGhlYWRlciBpZiB0aGUg
dmFsdWUgaXMgbnVsbAogICAgICAgICAvLyBNYWtlIHN1cmUgdG8gc2V0IGFuIGVtcHR5IGhlYWRl
ciBpbnN0ZWFkIG9mIG51bGwgaGVhZGVyLgogICAgICAgICBpZiAoIXZhbHVlLmlzTnVsbCgpKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNl
UmVxdWVzdFNvdXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jl
c291cmNlUmVxdWVzdFNvdXAuY3BwCmluZGV4IGQ3MTI3YjQuLjU3YWI0ZDYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3RTb3Vw
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VS
ZXF1ZXN0U291cC5jcHAKQEAgLTQzLDcgKzQzLDcgQEAgdm9pZCBSZXNvdXJjZVJlcXVlc3Q6OnVw
ZGF0ZVNvdXBNZXNzYWdlKFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSkgY29uc3QKICAgICBpZiAo
IWhlYWRlcnMuaXNFbXB0eSgpKSB7CiAgICAgICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IGhlYWRlcnMuZW5kKCk7CiAgICAgICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBoZWFkZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAg
ICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChzb3VwSGVhZGVycywgaXQtPmZpcnN0
LnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGl0LT5zZWNvbmQudXRmOCgpLmRhdGEoKSk7CisgICAg
ICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQoc291cEhlYWRlcnMsIGl0LT5rZXku
c3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgaXQtPnZhbHVlLnV0ZjgoKS5kYXRhKCkpOwogICAgIH0K
IAogICAgIFN0cmluZyBmaXJzdFBhcnR5U3RyaW5nID0gZmlyc3RQYXJ0eUZvckNvb2tpZXMoKS5z
dHJpbmcoKTsKQEAgLTY2LDcgKzY2LDcgQEAgU291cE1lc3NhZ2UqIFJlc291cmNlUmVxdWVzdDo6
dG9Tb3VwTWVzc2FnZSgpIGNvbnN0CiAgICAgaWYgKCFoZWFkZXJzLmlzRW1wdHkoKSkgewogICAg
ICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBoZWFkZXJzLmVuZCgpOwog
ICAgICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaGVhZGVycy5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVy
c19hcHBlbmQoc291cEhlYWRlcnMsIGl0LT5maXJzdC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBp
dC0+c2Vjb25kLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgc291cF9tZXNzYWdlX2hlYWRl
cnNfYXBwZW5kKHNvdXBIZWFkZXJzLCBpdC0+a2V5LnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGl0
LT52YWx1ZS51dGY4KCkuZGF0YSgpKTsKICAgICB9CiAKICAgICBTdHJpbmcgZmlyc3RQYXJ0eVN0
cmluZyA9IGZpcnN0UGFydHlGb3JDb29raWVzKCkuc3RyaW5nKCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXNwb25zZVNvdXAuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVzcG9uc2VT
b3VwLmNwcAppbmRleCBkZGFhODkzLi43MzlkNDRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXNwb25zZVNvdXAuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlc3BvbnNlU291cC5j
cHAKQEAgLTQ2LDcgKzQ2LDcgQEAgU291cE1lc3NhZ2UqIFJlc291cmNlUmVzcG9uc2U6OnRvU291
cE1lc3NhZ2UoKSBjb25zdAogICAgIGlmICghaGVhZGVycy5pc0VtcHR5KCkpIHsKICAgICAgICAg
SFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaGVhZGVycy5lbmQoKTsKICAgICAg
ICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGhlYWRlcnMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBw
ZW5kKHNvdXBIZWFkZXJzLCBpdC0+Zmlyc3Quc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgaXQtPnNl
Y29uZC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2Fw
cGVuZChzb3VwSGVhZGVycywgaXQtPmtleS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBpdC0+dmFs
dWUudXRmOCgpLmRhdGEoKSk7CiAgICAgfQogCiAgICAgc291cF9tZXNzYWdlX3NldF9mbGFncyhz
b3VwTWVzc2FnZSwgbV9zb3VwRmxhZ3MpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay93aW4vUmVzb3VyY2VIYW5kbGVXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay93aW4vUmVzb3VyY2VIYW5kbGVXaW4uY3BwCmluZGV4IDAyMTJkMGMu
LjU1MTQyOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvd2lu
L1Jlc291cmNlSGFuZGxlV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL3dpbi9SZXNvdXJjZUhhbmRsZVdpbi5jcHAKQEAgLTMyOSw5ICszMjksOSBAQCBib29sIFJl
c291cmNlSGFuZGxlOjpzdGFydChOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCkKICAgICAgICAg
aWYgKCFodHRwSGVhZGVycy5pc0VtcHR5KCkpCiAgICAgICAgICAgICBodHRwSGVhZGVycy5hcHBl
bmQoJ1xuJyk7CiAKLSAgICAgICAgaHR0cEhlYWRlcnMuYXBwZW5kKGl0LT5maXJzdC5jaGFyYWN0
ZXJzKCksIGl0LT5maXJzdC5sZW5ndGgoKSk7CisgICAgICAgIGh0dHBIZWFkZXJzLmFwcGVuZChp
dC0+a2V5LmNoYXJhY3RlcnMoKSwgaXQtPmtleS5sZW5ndGgoKSk7CiAgICAgICAgIGh0dHBIZWFk
ZXJzLmFwcGVuZCgnOicpOwotICAgICAgICBodHRwSGVhZGVycy5hcHBlbmQoaXQtPnNlY29uZC5j
aGFyYWN0ZXJzKCksIGl0LT5zZWNvbmQubGVuZ3RoKCkpOworICAgICAgICBodHRwSGVhZGVycy5h
cHBlbmQoaXQtPnZhbHVlLmNoYXJhY3RlcnMoKSwgaXQtPnZhbHVlLmxlbmd0aCgpKTsKICAgICB9
CiAKICAgICBJTlRFUk5FVF9CVUZGRVJTVyBpbnRlcm5ldEJ1ZmZlcnM7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SdW5Mb29wUXQuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vcXQvUnVuTG9vcFF0LmNwcAppbmRleCAyYTg3ZTJmLi41MDFiZDVjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SdW5Mb29wUXQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1J1bkxvb3BRdC5jcHAKQEAgLTEwOSw3ICsxMDksNyBAQCB2
b2lkIFJ1bkxvb3A6OlRpbWVyQmFzZTo6dGltZXJGaXJlZChSdW5Mb29wKiBydW5Mb29wLCBpbnQg
SUQpCiB7CiAgICAgVGltZXJNYXA6Oml0ZXJhdG9yIGl0ID0gcnVuTG9vcC0+bV9hY3RpdmVUaW1l
cnMuZmluZChJRCk7CiAgICAgQVNTRVJUKGl0ICE9IHJ1bkxvb3AtPm1fYWN0aXZlVGltZXJzLmVu
ZCgpKTsKLSAgICBUaW1lckJhc2UqIHRpbWVyID0gaXQtPnNlY29uZDsKKyAgICBUaW1lckJhc2Uq
IHRpbWVyID0gaXQtPnZhbHVlOwogCiAgICAgaWYgKCF0aW1lci0+bV9pc1JlcGVhdGluZykgewog
ICAgICAgICAvLyBTdG9wIHRoZSB0aW1lciAoY2FsbGluZyBzdG9wIHdvdWxkIG5lZWQgYW5vdGhl
ciBoYXNoIHRhYmxlIGxvb2t1cCkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L0xvY2FsZVRvU2NyaXB0TWFwcGluZ0RlZmF1bHQuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vdGV4dC9Mb2NhbGVUb1NjcmlwdE1hcHBpbmdEZWZhdWx0LmNwcAppbmRleCA5MDk0
NzM4Li41ODI2NDkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0xv
Y2FsZVRvU2NyaXB0TWFwcGluZ0RlZmF1bHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvTG9jYWxlVG9TY3JpcHRNYXBwaW5nRGVmYXVsdC5jcHAKQEAgLTE2Niw3ICsxNjYs
NyBAQCBVU2NyaXB0Q29kZSBzY3JpcHROYW1lVG9Db2RlKGNvbnN0IFN0cmluZyYgc2NyaXB0TmFt
ZSkKIAogICAgIEhhc2hNYXA8U3RyaW5nLCBVU2NyaXB0Q29kZT46Oml0ZXJhdG9yIGl0ID0gc2Ny
aXB0TmFtZUNvZGVNYXAuZmluZChzY3JpcHROYW1lLmxvd2VyKCkpOwogICAgIGlmIChpdCAhPSBz
Y3JpcHROYW1lQ29kZU1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAg
ICAgIHJldHVybiBpdC0+dmFsdWU7CiAgICAgcmV0dXJuIFVTQ1JJUFRfSU5WQUxJRF9DT0RFOwog
fQogCkBAIC0zODksNyArMzg5LDcgQEAgVVNjcmlwdENvZGUgbG9jYWxlVG9TY3JpcHRDb2RlRm9y
Rm9udFNlbGVjdGlvbihjb25zdCBTdHJpbmcmIGxvY2FsZSkKICAgICB3aGlsZSAoIWNhbm9uaWNh
bExvY2FsZS5pc0VtcHR5KCkpIHsKICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFVTY3JpcHRDb2Rl
Pjo6aXRlcmF0b3IgaXQgPSBsb2NhbGVTY3JpcHRNYXAuZmluZChjYW5vbmljYWxMb2NhbGUpOwog
ICAgICAgICBpZiAoaXQgIT0gbG9jYWxlU2NyaXB0TWFwLmVuZCgpKQotICAgICAgICAgICAgcmV0
dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwogICAgICAgICBz
aXplX3QgcG9zID0gY2Fub25pY2FsTG9jYWxlLnJldmVyc2VGaW5kKCdfJyk7CiAgICAgICAgIGlm
IChwb3MgPT0gbm90Rm91bmQpCiAgICAgICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnkuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAKaW5kZXggNDc2
M2JmOC4uZDIyOTJlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9U
ZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAKQEAgLTE5Niw4ICsxOTYsOCBAQCBzdGF0aWMgdm9p
ZCBwcnVuZUJsYWNrbGlzdGVkQ29kZWNzKCkKICAgICAgICAgVGV4dEVuY29kaW5nTmFtZU1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSB0ZXh0RW5jb2RpbmdOYW1lTWFwLT5iZWdpbigpOwogICAgICAg
ICBUZXh0RW5jb2RpbmdOYW1lTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSB0ZXh0RW5jb2RpbmdO
YW1lTWFwLT5lbmQoKTsKICAgICAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAg
ICAgICAgaWYgKGl0LT5zZWNvbmQgPT0gYXRvbWljTmFtZSkKLSAgICAgICAgICAgICAgICBuYW1l
cy5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgICAgIGlmIChpdC0+dmFsdWUgPT0gYXRvbWlj
TmFtZSkKKyAgICAgICAgICAgICAgICBuYW1lcy5hcHBlbmQoaXQtPmtleSk7CiAgICAgICAgIH0K
IAogICAgICAgICBzaXplX3QgbGVuZ3RoID0gbmFtZXMuc2l6ZSgpOwpAQCAtMzc5LDcgKzM3OSw3
IEBAIHZvaWQgZHVtcFRleHRFbmNvZGluZ05hbWVNYXAoKQogICAgIFRleHRFbmNvZGluZ05hbWVN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdGV4dEVuY29kaW5nTmFtZU1hcC0+YmVnaW4oKTsKICAg
ICBUZXh0RW5jb2RpbmdOYW1lTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSB0ZXh0RW5jb2RpbmdO
YW1lTWFwLT5lbmQoKTsKICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIiclcycgPT4gJyVzJ1xuIiwgaXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsKKyAg
ICAgICAgZnByaW50ZihzdGRlcnIsICInJXMnID0+ICclcydcbiIsIGl0LT5rZXksIGl0LT52YWx1
ZSk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC90cmFuc2NvZGVyL0ZvbnRUcmFuc2NvZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvdHJhbnNjb2Rlci9Gb250VHJhbnNjb2Rlci5jcHAKaW5kZXggNGUwN2Y1MC4uNDg0MjI4
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC90cmFuc2NvZGVyL0Zv
bnRUcmFuc2NvZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3RyYW5z
Y29kZXIvRm9udFRyYW5zY29kZXIuY3BwCkBAIC02Niw3ICs2Niw3IEBAIEZvbnRUcmFuc2NvZGVy
OjpDb252ZXJ0ZXJUeXBlIEZvbnRUcmFuc2NvZGVyOjpjb252ZXJ0ZXJUeXBlKGNvbnN0IEZvbnRE
ZXNjcmlwdGlvCiAgICAgaWYgKCFmb250RmFtaWx5LmlzTnVsbCgpKSB7CiAgICAgICAgIEhhc2hN
YXA8QXRvbWljU3RyaW5nLCBDb252ZXJ0ZXJUeXBlPjo6Y29uc3RfaXRlcmF0b3IgZm91bmQgPSBt
X2NvbnZlcnRlclR5cGVzLmZpbmQoZm9udEZhbWlseSk7CiAgICAgICAgIGlmIChmb3VuZCAhPSBt
X2NvbnZlcnRlclR5cGVzLmVuZCgpKQotICAgICAgICAgICAgcmV0dXJuIGZvdW5kLT5zZWNvbmQ7
CisgICAgICAgICAgICByZXR1cm4gZm91bmQtPnZhbHVlOwogICAgIH0KIAogICAgIC8vIElFJ3Mg
ZGVmYXVsdCBmb250cyBmb3IgSmFwYW5lc2UgZW5jb2RpbmdzIGNoYW5nZSBiYWNrc2xhc2hlcyBp
bnRvIHllbiBzaWducy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQv
d2luL1RleHRDb2RlY1dpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3dpbi9U
ZXh0Q29kZWNXaW4uY3BwCmluZGV4IGUxOTIzN2QuLjg3OWFmNzYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvd2luL1RleHRDb2RlY1dpbi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC93aW4vVGV4dENvZGVjV2luLmNwcApAQCAtMTA1LDE3ICsx
MDUsMTcgQEAgTGFuZ3VhZ2VNYW5hZ2VyOjpMYW5ndWFnZU1hbmFnZXIoKQogICAgICAgICAgICAg
aSA9IGNvZGVQYWdlQ2hhcnNldHMoKS5zZXQoY3BJbmZvLnVpQ29kZVBhZ2UsIG5hbWUpLml0ZXJh
dG9yOwogICAgICAgICB9CiAgICAgICAgIGlmIChpICE9IGNvZGVQYWdlQ2hhcnNldHMoKS5lbmQo
KSkgewotICAgICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIENoYXJzZXRJbmZvPjo6aXRlcmF0b3Ig
aiA9IGtub3duQ2hhcnNldHMoKS5maW5kKFN0cmluZyhpLT5zZWNvbmQuZGF0YSgpLCBpLT5zZWNv
bmQubGVuZ3RoKCkpKTsKKyAgICAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBDaGFyc2V0SW5mbz46
Oml0ZXJhdG9yIGogPSBrbm93bkNoYXJzZXRzKCkuZmluZChTdHJpbmcoaS0+dmFsdWUuZGF0YSgp
LCBpLT52YWx1ZS5sZW5ndGgoKSkpOwogICAgICAgICAgICAgQVNTRVJUKGogIT0ga25vd25DaGFy
c2V0cygpLmVuZCgpKTsKLSAgICAgICAgICAgIENoYXJzZXRJbmZvJiBpbmZvID0gai0+c2Vjb25k
OwotICAgICAgICAgICAgaW5mby5tX25hbWUgPSBpLT5zZWNvbmQuZGF0YSgpOworICAgICAgICAg
ICAgQ2hhcnNldEluZm8mIGluZm8gPSBqLT52YWx1ZTsKKyAgICAgICAgICAgIGluZm8ubV9uYW1l
ID0gaS0+dmFsdWUuZGF0YSgpOwogICAgICAgICAgICAgaW5mby5tX2ZyaWVuZGx5TmFtZSA9IGNw
SW5mby53c3pEZXNjcmlwdGlvbjsKICAgICAgICAgICAgIGluZm8ubV9hbGlhc2VzLmFwcGVuZChu
YW1lKTsKICAgICAgICAgICAgIGluZm8ubV9hbGlhc2VzLmFwcGVuZChTdHJpbmcoY3BJbmZvLndz
ekhlYWRlckNoYXJzZXQpLmxhdGluMSgpKTsKICAgICAgICAgICAgIGluZm8ubV9hbGlhc2VzLmFw
cGVuZChTdHJpbmcoY3BJbmZvLndzekJvZHlDaGFyc2V0KS5sYXRpbjEoKSk7CiAgICAgICAgICAg
ICBTdHJpbmcgY3BOYW1lID0gImNwIiArIFN0cmluZzo6bnVtYmVyKGNwSW5mby51aUNvZGVQYWdl
KTsKICAgICAgICAgICAgIGluZm8ubV9hbGlhc2VzLmFwcGVuZChjcE5hbWUubGF0aW4xKCkpOwot
ICAgICAgICAgICAgc3VwcG9ydGVkQ2hhcnNldHMoKS5hZGQoaS0+c2Vjb25kLmRhdGEoKSk7Cisg
ICAgICAgICAgICBzdXBwb3J0ZWRDaGFyc2V0cygpLmFkZChpLT52YWx1ZS5kYXRhKCkpOwogICAg
ICAgICB9CiAgICAgfQogfQpAQCAtMTI2LDcgKzEyNiw3IEBAIHN0YXRpYyBVSU5UIGdldENvZGVQ
YWdlKGNvbnN0IGNoYXIqIG5hbWUpCiAgICAgLy8gc2F5aW5nICI9PSIgaXMgbm90IGZvdW5kIGZv
ciBjb25zdF9pdGVyYXRvciBhbmQgaXRlcmF0b3IKICAgICBjb25zdCBIYXNoTWFwPFN0cmluZywg
Q2hhcnNldEluZm8+JiBjaGFyc2V0cyA9IGtub3duQ2hhcnNldHMoKTsKICAgICBIYXNoTWFwPFN0
cmluZywgQ2hhcnNldEluZm8+Ojpjb25zdF9pdGVyYXRvciBpID0gY2hhcnNldHMuZmluZChuYW1l
KTsKLSAgICByZXR1cm4gaSA9PSBjaGFyc2V0cy5lbmQoKSA/IENQX0FDUCA6IGktPnNlY29uZC5t
X2NvZGVQYWdlOworICAgIHJldHVybiBpID09IGNoYXJzZXRzLmVuZCgpID8gQ1BfQUNQIDogaS0+
dmFsdWUubV9jb2RlUGFnZTsKIH0KIAogc3RhdGljIFBhc3NPd25QdHI8VGV4dENvZGVjPiBuZXdU
ZXh0Q29kZWNXaW4oY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZywgY29uc3Qgdm9pZCopCkBA
IC0xNDksOSArMTQ5LDkgQEAgdm9pZCBUZXh0Q29kZWNXaW46OnJlZ2lzdGVyRXh0ZW5kZWRFbmNv
ZGluZ05hbWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJhciByZWdpc3RyYXIKICAgICBmb3IgKENoYXJz
ZXRTZXQ6Oml0ZXJhdG9yIGkgPSBzdXBwb3J0ZWRDaGFyc2V0cygpLmJlZ2luKCk7IGkgIT0gc3Vw
cG9ydGVkQ2hhcnNldHMoKS5lbmQoKTsgKytpKSB7CiAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBD
aGFyc2V0SW5mbz46Oml0ZXJhdG9yIGogPSBrbm93bkNoYXJzZXRzKCkuZmluZCgqaSk7CiAgICAg
ICAgIGlmIChqICE9IGtub3duQ2hhcnNldHMoKS5lbmQoKSkgewotICAgICAgICAgICAgcmVnaXN0
cmFyKGotPnNlY29uZC5tX25hbWUuZGF0YSgpLCBqLT5zZWNvbmQubV9uYW1lLmRhdGEoKSk7Ci0g
ICAgICAgICAgICBmb3IgKFZlY3RvcjxDU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgYWxpYXMgPSBq
LT5zZWNvbmQubV9hbGlhc2VzLmJlZ2luKCk7IGFsaWFzICE9IGotPnNlY29uZC5tX2FsaWFzZXMu
ZW5kKCk7ICsrYWxpYXMpCi0gICAgICAgICAgICAgICAgcmVnaXN0cmFyKGFsaWFzLT5kYXRhKCks
IGotPnNlY29uZC5tX25hbWUuZGF0YSgpKTsKKyAgICAgICAgICAgIHJlZ2lzdHJhcihqLT52YWx1
ZS5tX25hbWUuZGF0YSgpLCBqLT52YWx1ZS5tX25hbWUuZGF0YSgpKTsKKyAgICAgICAgICAgIGZv
ciAoVmVjdG9yPENTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBhbGlhcyA9IGotPnZhbHVlLm1fYWxp
YXNlcy5iZWdpbigpOyBhbGlhcyAhPSBqLT52YWx1ZS5tX2FsaWFzZXMuZW5kKCk7ICsrYWxpYXMp
CisgICAgICAgICAgICAgICAgcmVnaXN0cmFyKGFsaWFzLT5kYXRhKCksIGotPnZhbHVlLm1fbmFt
ZS5kYXRhKCkpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMTYyLDcgKzE2Miw3IEBAIHZvaWQg
VGV4dENvZGVjV2luOjpyZWdpc3RlckV4dGVuZGVkQ29kZWNzKFRleHRDb2RlY1JlZ2lzdHJhciBy
ZWdpc3RyYXIpCiAgICAgZm9yIChDaGFyc2V0U2V0OjppdGVyYXRvciBpID0gc3VwcG9ydGVkQ2hh
cnNldHMoKS5iZWdpbigpOyBpICE9IHN1cHBvcnRlZENoYXJzZXRzKCkuZW5kKCk7ICsraSkgewog
ICAgICAgICBIYXNoTWFwPFN0cmluZywgQ2hhcnNldEluZm8+OjppdGVyYXRvciBqID0ga25vd25D
aGFyc2V0cygpLmZpbmQoKmkpOwogICAgICAgICBpZiAoaiAhPSBrbm93bkNoYXJzZXRzKCkuZW5k
KCkpCi0gICAgICAgICAgICByZWdpc3RyYXIoai0+c2Vjb25kLm1fbmFtZS5kYXRhKCksIG5ld1Rl
eHRDb2RlY1dpbiwgMCk7CisgICAgICAgICAgICByZWdpc3RyYXIoai0+dmFsdWUubV9uYW1lLmRh
dGEoKSwgbmV3VGV4dENvZGVjV2luLCAwKTsKICAgICB9CiB9CiAKQEAgLTMwMSw3ICszMDEsNyBA
QCB2b2lkIFRleHRDb2RlY1dpbjo6ZW51bWVyYXRlU3VwcG9ydGVkRW5jb2RpbmdzKEVuY29kaW5n
UmVjZWl2ZXImIHJlY2VpdmVyKQogICAgIGxhbmd1YWdlTWFuYWdlcigpOwogICAgIGZvciAoQ2hh
cnNldFNldDo6aXRlcmF0b3IgaSA9IHN1cHBvcnRlZENoYXJzZXRzKCkuYmVnaW4oKTsgaSAhPSBz
dXBwb3J0ZWRDaGFyc2V0cygpLmVuZCgpOyArK2kpIHsKICAgICAgICAgSGFzaE1hcDxTdHJpbmcs
IENoYXJzZXRJbmZvPjo6aXRlcmF0b3IgaiA9IGtub3duQ2hhcnNldHMoKS5maW5kKCppKTsKLSAg
ICAgICAgaWYgKGogIT0ga25vd25DaGFyc2V0cygpLmVuZCgpICYmICFyZWNlaXZlci5yZWNlaXZl
KGotPnNlY29uZC5tX25hbWUuZGF0YSgpLCBqLT5zZWNvbmQubV9mcmllbmRseU5hbWUuY2hhcmFj
dGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgai0+c2Vjb25kLm1fY29kZVBhZ2UpKQorICAgICAg
ICBpZiAoaiAhPSBrbm93bkNoYXJzZXRzKCkuZW5kKCkgJiYgIXJlY2VpdmVyLnJlY2VpdmUoai0+
dmFsdWUubV9uYW1lLmRhdGEoKSwgai0+dmFsdWUubV9mcmllbmRseU5hbWUuY2hhcmFjdGVyc1dp
dGhOdWxsVGVybWluYXRpb24oKSwgai0+dmFsdWUubV9jb2RlUGFnZSkpCiAgICAgICAgICAgICBi
cmVhazsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4v
Q2xpcGJvYXJkVXRpbGl0aWVzV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9D
bGlwYm9hcmRVdGlsaXRpZXNXaW4uY3BwCmluZGV4IDYxZTM2MjEuLjc1ZmY5ZGUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRVdGlsaXRpZXNXaW4uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRVdGlsaXRpZXNXaW4u
Y3BwCkBAIC03Niw3ICs3Niw3IEBAIHN0YXRpYyBib29sIGdldERhdGFNYXBJdGVtKGNvbnN0IERy
YWdEYXRhTWFwKiBkYXRhT2JqZWN0LCBGT1JNQVRFVEMqIGZvcm1hdCwgU3RyCiAgICAgRHJhZ0Rh
dGFNYXA6OmNvbnN0X2l0ZXJhdG9yIGZvdW5kID0gZGF0YU9iamVjdC0+ZmluZChmb3JtYXQtPmNm
Rm9ybWF0KTsKICAgICBpZiAoZm91bmQgPT0gZGF0YU9iamVjdC0+ZW5kKCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBpdGVtID0gZm91bmQtPnNlY29uZFswXTsKKyAgICBpdGVtID0gZm91
bmQtPnZhbHVlWzBdOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC04MjYsNyArODI2LDcgQEAg
dm9pZCBnZXRDbGlwYm9hcmREYXRhKElEYXRhT2JqZWN0KiBkYXRhT2JqZWN0LCBGT1JNQVRFVEMq
IGZvcm1hdCwgVmVjdG9yPFN0cmluZz4KICAgICBDbGlwYm9hcmRGb3JtYXRNYXA6OmNvbnN0X2l0
ZXJhdG9yIGZvdW5kID0gZm9ybWF0TWFwLmZpbmQoZm9ybWF0LT5jZkZvcm1hdCk7CiAgICAgaWYg
KGZvdW5kID09IGZvcm1hdE1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGZvdW5kLT5z
ZWNvbmQtPmdldFN0cmluZyhkYXRhT2JqZWN0LCBmb3VuZC0+c2Vjb25kLT5mb3JtYXQsIGRhdGFT
dHJpbmdzKTsKKyAgICBmb3VuZC0+dmFsdWUtPmdldFN0cmluZyhkYXRhT2JqZWN0LCBmb3VuZC0+
dmFsdWUtPmZvcm1hdCwgZGF0YVN0cmluZ3MpOwogfQogCiB2b2lkIHNldENsaXBib2FyZERhdGEo
SURhdGFPYmplY3QqIGRhdGFPYmplY3QsIFVJTlQgZm9ybWF0LCBjb25zdCBWZWN0b3I8U3RyaW5n
PiYgZGF0YVN0cmluZ3MpCkBAIC04MzUsNyArODM1LDcgQEAgdm9pZCBzZXRDbGlwYm9hcmREYXRh
KElEYXRhT2JqZWN0KiBkYXRhT2JqZWN0LCBVSU5UIGZvcm1hdCwgY29uc3QgVmVjdG9yPFN0cmlu
Zz4KICAgICBDbGlwYm9hcmRGb3JtYXRNYXA6OmNvbnN0X2l0ZXJhdG9yIGZvdW5kID0gZm9ybWF0
TWFwLmZpbmQoZm9ybWF0KTsKICAgICBpZiAoZm91bmQgPT0gZm9ybWF0TWFwLmVuZCgpKQogICAg
ICAgICByZXR1cm47Ci0gICAgZm91bmQtPnNlY29uZC0+c2V0U3RyaW5nKGRhdGFPYmplY3QsIGZv
dW5kLT5zZWNvbmQtPmZvcm1hdCwgZGF0YVN0cmluZ3MpOworICAgIGZvdW5kLT52YWx1ZS0+c2V0
U3RyaW5nKGRhdGFPYmplY3QsIGZvdW5kLT52YWx1ZS0+Zm9ybWF0LCBkYXRhU3RyaW5ncyk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3dpbi9GaWxlU3lzdGVtV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dp
bi9GaWxlU3lzdGVtV2luLmNwcAppbmRleCBlZTAyNTVlLi4wNzlmOGQ2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vd2luL0ZpbGVTeXN0ZW1XaW4uY3BwCkBAIC0yMzgsNyArMjM4LDcg
QEAgc3RhdGljIFN0cmluZyBjYWNoZWRTdG9yYWdlRGlyZWN0b3J5KERXT1JEIHBhdGhJZGVudGlm
aWVyKQogCiAgICAgSGFzaE1hcDxEV09SRCwgU3RyaW5nPjo6aXRlcmF0b3IgaXQgPSBkaXJlY3Rv
cmllcy5maW5kKHBhdGhJZGVudGlmaWVyKTsKICAgICBpZiAoaXQgIT0gZGlyZWN0b3JpZXMuZW5k
KCkpCi0gICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gaXQtPnZhbHVl
OwogCiAgICAgU3RyaW5nIGRpcmVjdG9yeSA9IHN0b3JhZ2VEaXJlY3RvcnkocGF0aElkZW50aWZp
ZXIpOwogICAgIGRpcmVjdG9yaWVzLmFkZChwYXRoSWRlbnRpZmllciwgZGlyZWN0b3J5KTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9SdW5Mb29wV2luLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9SdW5Mb29wV2luLmNwcAppbmRleCAxNjYzYjY2Li4x
N2Q2ODQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUnVuTG9vcFdp
bi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1J1bkxvb3BXaW4uY3BwCkBA
IC0xMjYsNyArMTI2LDcgQEAgdm9pZCBSdW5Mb29wOjpUaW1lckJhc2U6OnRpbWVyRmlyZWQoUnVu
TG9vcCogcnVuTG9vcCwgdWludDY0X3QgSUQpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBUaW1lckJhc2UqIHRpbWVyID0gaXQtPnNlY29uZDsKKyAgICBUaW1lckJhc2UqIHRpbWVyID0g
aXQtPnZhbHVlOwogCiAgICAgaWYgKCF0aW1lci0+bV9pc1JlcGVhdGluZykgewogICAgICAgICBy
dW5Mb29wLT5tX2FjdGl2ZVRpbWVycy5yZW1vdmUoaXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vd2luL1dDRGF0YU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93aW4vV0NEYXRhT2JqZWN0LmNwcAppbmRleCAwYzAzY2UwLi5kZmJkMDA1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vV0NEYXRhT2JqZWN0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vV0NEYXRhT2JqZWN0LmNwcApAQCAtMTY5LDcgKzE2
OSw3IEBAIEhSRVNVTFQgV0NEYXRhT2JqZWN0OjpjcmVhdGVJbnN0YW5jZShXQ0RhdGFPYmplY3Qq
KiByZXN1bHQsIGNvbnN0IERyYWdEYXRhTWFwJiBkCiAgICAgKnJlc3VsdCA9IG5ldyBXQ0RhdGFP
YmplY3Q7CiAKICAgICBmb3IgKERyYWdEYXRhTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGRhdGFN
YXAuYmVnaW4oKTsgaXQgIT0gZGF0YU1hcC5lbmQoKTsgKytpdCkKLSAgICAgICAgc2V0Q2xpcGJv
YXJkRGF0YSgqcmVzdWx0LCBpdC0+Zmlyc3QsIGl0LT5zZWNvbmQpOworICAgICAgICBzZXRDbGlw
Ym9hcmREYXRhKCpyZXN1bHQsIGl0LT5rZXksIGl0LT52YWx1ZSk7CiAgICAgcmV0dXJuIFNfT0s7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbmNlL01JTUVUeXBl
UmVnaXN0cnlXaW5DRS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW5jZS9NSU1FVHlw
ZVJlZ2lzdHJ5V2luQ0UuY3BwCmluZGV4IDhhMGQzZDIuLjg4ODg0NzEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbmNlL01JTUVUeXBlUmVnaXN0cnlXaW5DRS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luY2UvTUlNRVR5cGVSZWdpc3RyeVdpbkNFLmNw
cApAQCAtMTAxLDcgKzEwMSw3IEBAIFN0cmluZyBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRQcmVmZXJy
ZWRFeHRlbnNpb25Gb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIHR5cGUpCiAgICAgaW5pdE1JTUVU
eXBlRW50ZW5zaW9uTWFwKCk7CiAKICAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpp
dGVyYXRvciBpID0gbWltZXR5cGVNYXAuYmVnaW4oKTsgaSAhPSBtaW1ldHlwZU1hcC5lbmQoKTsg
KytpKSB7Ci0gICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShpLT5zZWNvbmQsIHR5cGUpKQor
ICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoaS0+dmFsdWUsIHR5cGUpKQogICAgICAgICAg
ICAgcmV0dXJuIGktPmZpcnN0OwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vd3gvQ29udGV4dE1lbnVXeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93
eC9Db250ZXh0TWVudVd4LmNwcAppbmRleCA0MTg5YWE5Li5kZjJlZTUyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC9Db250ZXh0TWVudVd4LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS93eC9Db250ZXh0TWVudVd4LmNwcApAQCAtNjcsOCArNjcsOCBAQCB2
b2lkIENvbnRleHRNZW51OjphcHBlbmRJdGVtKENvbnRleHRNZW51SXRlbSYgaXRlbSkKIAogICAg
IEl0ZW1BY3Rpb25NYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHNfaXRlbUFjdGlvbnMuZW5kKCk7
CiAgICAgZm9yIChJdGVtQWN0aW9uTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHNfaXRlbUFjdGlv
bnMuYmVnaW4oKTsgIGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnNlY29uZCA9
PSBpdGVtRGVzY3JpcHRpb24uYWN0aW9uKQotICAgICAgICAgICAgaWRXeCA9IGl0LT5maXJzdDsK
KyAgICAgICAgaWYgKGl0LT52YWx1ZSA9PSBpdGVtRGVzY3JpcHRpb24uYWN0aW9uKQorICAgICAg
ICAgICAgaWRXeCA9IGl0LT5rZXk7CiAgICAgfQogCiAgICAgaWYgKGl0ZW1EZXNjcmlwdGlvbi5z
dWJNZW51KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFi
YXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3BwCmluZGV4
IDk1MDhjNWIuLmZjY2IwMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1
Z2luRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJh
c2UuY3BwCkBAIC0xNjIsNyArMTYyLDcgQEAgYm9vbCBQbHVnaW5EYXRhYmFzZTo6cmVmcmVzaCgp
CiAgICAgICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWFwX2l0ID0g
KCppdCktPm1pbWVUb0Rlc2NyaXB0aW9ucygpLmJlZ2luKCk7CiAgICAgICAgIE1JTUVUb0Rlc2Ny
aXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWFwX2VuZCA9ICgqaXQpLT5taW1lVG9EZXNjcmlw
dGlvbnMoKS5lbmQoKTsKICAgICAgICAgZm9yICg7IG1hcF9pdCAhPSBtYXBfZW5kOyArK21hcF9p
dCkKLSAgICAgICAgICAgIG1fcmVnaXN0ZXJlZE1JTUVUeXBlcy5hZGQobWFwX2l0LT5maXJzdCk7
CisgICAgICAgICAgICBtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuYWRkKG1hcF9pdC0+a2V5KTsKICAg
ICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI0Myw5ICsyNDMsOSBAQCBTdHJpbmcgUGx1Z2lu
RGF0YWJhc2U6Ok1JTUVUeXBlRm9yRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uKSBj
b25zdAogICAgICAgICBNSU1FVG9FeHRlbnNpb25zTWFwOjpjb25zdF9pdGVyYXRvciBtaW1lX2Vu
ZCA9ICgqaXQpLT5taW1lVG9FeHRlbnNpb25zKCkuZW5kKCk7CiAKICAgICAgICAgZm9yIChNSU1F
VG9FeHRlbnNpb25zTWFwOjpjb25zdF9pdGVyYXRvciBtaW1lX2l0ID0gKCppdCktPm1pbWVUb0V4
dGVuc2lvbnMoKS5iZWdpbigpOyBtaW1lX2l0ICE9IG1pbWVfZW5kOyArK21pbWVfaXQpIHsKLSAg
ICAgICAgICAgIG1pbWVUeXBlID0gbWltZV9pdC0+Zmlyc3Q7CisgICAgICAgICAgICBtaW1lVHlw
ZSA9IG1pbWVfaXQtPmtleTsKICAgICAgICAgICAgIFBsdWdpblBhY2thZ2UqIHByZWZlcnJlZFBs
dWdpbiA9IG1fcHJlZmVycmVkUGx1Z2lucy5nZXQobWltZVR5cGUpLmdldCgpOwotICAgICAgICAg
ICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGV4dGVuc2lvbnMgPSBtaW1lX2l0LT5zZWNvbmQ7Cisg
ICAgICAgICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZXh0ZW5zaW9ucyA9IG1pbWVfaXQtPnZh
bHVlOwogICAgICAgICAgICAgYm9vbCBmb3VuZE1hcHBpbmcgPSBmYWxzZTsKICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleHRlbnNpb25zLnNpemUoKTsgaSsrKSB7CiAgICAg
ICAgICAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGV4dGVuc2lvbnNbaV0sIGV4dGVuc2lv
bikpIHsKQEAgLTMzNSw4ICszMzUsOCBAQCB2b2lkIFBsdWdpbkRhdGFiYXNlOjpyZW1vdmUoUGx1
Z2luUGFja2FnZSogcGFja2FnZSkKICAgICBNSU1FVG9FeHRlbnNpb25zTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IHBhY2thZ2UtPm1pbWVUb0V4dGVuc2lvbnMoKS5iZWdpbigpOwogICAgIE1JTUVU
b0V4dGVuc2lvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHBhY2thZ2UtPm1pbWVUb0V4dGVu
c2lvbnMoKS5lbmQoKTsKICAgICBmb3IgKCA7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBQ
bHVnaW5QYWNrYWdlQnlOYW1lTWFwOjppdGVyYXRvciBwYWNrYWdlSW5NYXAgPSBtX3ByZWZlcnJl
ZFBsdWdpbnMuZmluZChpdC0+Zmlyc3QpOwotICAgICAgICBpZiAocGFja2FnZUluTWFwICE9IG1f
cHJlZmVycmVkUGx1Z2lucy5lbmQoKSAmJiBwYWNrYWdlSW5NYXAtPnNlY29uZCA9PSBwYWNrYWdl
KQorICAgICAgICBQbHVnaW5QYWNrYWdlQnlOYW1lTWFwOjppdGVyYXRvciBwYWNrYWdlSW5NYXAg
PSBtX3ByZWZlcnJlZFBsdWdpbnMuZmluZChpdC0+a2V5KTsKKyAgICAgICAgaWYgKHBhY2thZ2VJ
bk1hcCAhPSBtX3ByZWZlcnJlZFBsdWdpbnMuZW5kKCkgJiYgcGFja2FnZUluTWFwLT52YWx1ZSA9
PSBwYWNrYWdlKQogICAgICAgICAgICAgbV9wcmVmZXJyZWRQbHVnaW5zLnJlbW92ZShwYWNrYWdl
SW5NYXApOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVn
aW5NYWluVGhyZWFkU2NoZWR1bGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2lu
TWFpblRocmVhZFNjaGVkdWxlci5jcHAKaW5kZXggNzUyODY3Ni4uMzlhZTc5NCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXIuY3Bw
CkBAIC00OSw3ICs0OSw3IEBAIHZvaWQgUGx1Z2luTWFpblRocmVhZFNjaGVkdWxlcjo6c2NoZWR1
bGVDYWxsKE5QUCBucHAsIE1haW5UaHJlYWRGdW5jdGlvbiBmdW5jdGlvCiAgICAgaWYgKGl0ID09
IG1fY2FsbFF1ZXVlTWFwLmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpdC0+c2Vjb25k
LmFwcGVuZChDYWxsKGZ1bmN0aW9uLCB1c2VyRGF0YSkpOworICAgIGl0LT52YWx1ZS5hcHBlbmQo
Q2FsbChmdW5jdGlvbiwgdXNlckRhdGEpKTsKIAogICAgIGlmICghbV9jYWxsUGVuZGluZykgewog
ICAgICAgICBjYWxsT25NYWluVGhyZWFkKG1haW5UaHJlYWRDYWxsYmFjaywgdGhpcyk7CkBAIC05
Nyw3ICs5Nyw3IEBAIHZvaWQgUGx1Z2luTWFpblRocmVhZFNjaGVkdWxlcjo6ZGlzcGF0Y2hDYWxs
cygpCiAgICAgICAgIC8vIEVtcHR5IGFsbCB0aGUgcXVldWVzIGluIHRoZSBvcmlnaW5hbCBtYXAK
ICAgICAgICAgQ2FsbFF1ZXVlTWFwOjppdGVyYXRvciBlbmQgPSBtX2NhbGxRdWV1ZU1hcC5lbmQo
KTsKICAgICAgICAgZm9yIChDYWxsUXVldWVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9jYWxsUXVldWVN
YXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgaXQtPnNlY29uZC5jbGVh
cigpOworICAgICAgICAgICAgaXQtPnZhbHVlLmNsZWFyKCk7CiAgICAgfQogCiAgICAgbV9jYWxs
UGVuZGluZyA9IGZhbHNlOwpAQCAtMTA1LDcgKzEwNSw3IEBAIHZvaWQgUGx1Z2luTWFpblRocmVh
ZFNjaGVkdWxlcjo6ZGlzcGF0Y2hDYWxscygpCiAKICAgICBDYWxsUXVldWVNYXA6Oml0ZXJhdG9y
IGVuZCA9IGNvcHkuZW5kKCk7CiAgICAgZm9yIChDYWxsUXVldWVNYXA6Oml0ZXJhdG9yIGl0ID0g
Y29weS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGRpc3BhdGNoQ2FsbHNGb3JQ
bHVnaW4oaXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsKKyAgICAgICAgZGlzcGF0Y2hDYWxsc0ZvclBs
dWdpbihpdC0+a2V5LCBpdC0+dmFsdWUpOwogfQogCiB2b2lkIFBsdWdpbk1haW5UaHJlYWRTY2hl
ZHVsZXI6Om1haW5UaHJlYWRDYWxsYmFjayh2b2lkKiBjb250ZXh0KQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5TdHJlYW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGx1
Z2lucy9QbHVnaW5TdHJlYW0uY3BwCmluZGV4IDAwMjM4MGYuLmZkYjc4NjAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luU3RyZWFtLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbHVnaW5zL1BsdWdpblN0cmVhbS5jcHAKQEAgLTE0Nyw5ICsxNDcsOSBAQCB2b2lkIFBs
dWdpblN0cmVhbTo6c3RhcnRTdHJlYW0oKQogCiAgICAgICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IG1fcmVzb3VyY2VSZXNwb25zZS5odHRwSGVhZGVyRmllbGRzKCkuZW5k
KCk7CiAgICAgICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Jl
c291cmNlUmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkcygpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgewotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAg
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5rZXkpOwogICAgICAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQoc2VwYXJhdG9yKTsKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKGl0LT5zZWNvbmQpOworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPnZh
bHVlKTsKICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwogICAgICAgICB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvYmxhY2tiZXJyeS9QbHVnaW5E
YXRhQmxhY2tCZXJyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2JsYWNrYmVycnkvUGx1
Z2luRGF0YUJsYWNrQmVycnkuY3BwCmluZGV4IGQ5MjBkMWYuLjQ3NDY2MTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvYmxhY2tiZXJyeS9QbHVnaW5EYXRhQmxhY2tCZXJyeS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ibGFja2JlcnJ5L1BsdWdpbkRhdGFCbGFj
a0JlcnJ5LmNwcApAQCAtNDEsOCArNDEsOCBAQCB2b2lkIFBsdWdpbkRhdGE6OmluaXRQbHVnaW5z
KGNvbnN0IFBhZ2UqKQogICAgICAgICBNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5lbmQoKTsKICAgICAgICAgZm9yIChNSU1FVG9E
ZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWltZVRvRGVzY3JpcHRpb25zLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgTWltZUNsYXNzSW5mbyBtaW1l
OwotICAgICAgICAgICAgbWltZS50eXBlID0gaXQtPmZpcnN0OwotICAgICAgICAgICAgbWltZS5k
ZXNjID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIG1pbWUudHlwZSA9IGl0LT5rZXk7CisgICAg
ICAgICAgICBtaW1lLmRlc2MgPSBpdC0+dmFsdWU7CiAgICAgICAgICAgICBtaW1lLmV4dGVuc2lv
bnMgPSBwYWNrYWdlLT5taW1lVG9FeHRlbnNpb25zKCkuZ2V0KG1pbWUudHlwZSk7CiAgICAgICAg
ICAgICBpbmZvLm1pbWVzLmFwcGVuZChtaW1lKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGx1Z2lucy93eC9QbHVnaW5EYXRhV3guY3BwIGIvU291cmNlL1dlYkNvcmUv
cGx1Z2lucy93eC9QbHVnaW5EYXRhV3guY3BwCmluZGV4IDBlYjg5MGYuLjI3OTUyYzQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd3gvUGx1Z2luRGF0YVd4LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbHVnaW5zL3d4L1BsdWdpbkRhdGFXeC5jcHAKQEAgLTUxLDggKzUxLDgg
QEAgdm9pZCBQbHVnaW5EYXRhOjppbml0UGx1Z2lucyhjb25zdCBQYWdlKikKICAgICAgICAgZm9y
IChNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWltZVRvRGVzY3Jp
cHRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgTWltZUNsYXNz
SW5mbyBtaW1lOwogCi0gICAgICAgICAgICBtaW1lLnR5cGUgPSBpdC0+Zmlyc3Q7Ci0gICAgICAg
ICAgICBtaW1lLmRlc2MgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgbWltZS50eXBlID0gaXQt
PmtleTsKKyAgICAgICAgICAgIG1pbWUuZGVzYyA9IGl0LT52YWx1ZTsKICAgICAgICAgICAgIG1p
bWUuZXh0ZW5zaW9ucyA9IHBhY2thZ2UtPm1pbWVUb0V4dGVuc2lvbnMoKS5nZXQobWltZS50eXBl
KTsKIAogICAgICAgICAgICAgaW5mby5taW1lcy5hcHBlbmQobWltZSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmxvd1RocmVhZENvbnRyb2xsZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0Zsb3dUaHJlYWRDb250cm9sbGVyLmNwcAppbmRleCBkYzk0MzJj
Li40ODcxYWY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmxvd1RocmVh
ZENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GbG93VGhyZWFk
Q29udHJvbGxlci5jcHAKQEAgLTEyMyw5ICsxMjMsOSBAQCB2b2lkIEZsb3dUaHJlYWRDb250cm9s
bGVyOjp1bnJlZ2lzdGVyTmFtZWRGbG93Q29udGVudE5vZGUoTm9kZSogY29udGVudE5vZGUpCiAg
ICAgQVNTRVJUKGNvbnRlbnROb2RlICYmIGNvbnRlbnROb2RlLT5pc0VsZW1lbnROb2RlKCkpOwog
ICAgIEhhc2hNYXA8Tm9kZSosIFJlbmRlck5hbWVkRmxvd1RocmVhZCo+OjppdGVyYXRvciBpdCA9
IG1fbWFwTmFtZWRGbG93Q29udGVudE5vZGVzLmZpbmQoY29udGVudE5vZGUpOwogICAgIEFTU0VS
VChpdCAhPSBtX21hcE5hbWVkRmxvd0NvbnRlbnROb2Rlcy5lbmQoKSk7Ci0gICAgQVNTRVJUKGl0
LT5zZWNvbmQpOwotICAgIEFTU0VSVChpdC0+c2Vjb25kLT5oYXNDb250ZW50Tm9kZShjb250ZW50
Tm9kZSkpOwotICAgIGl0LT5zZWNvbmQtPnVucmVnaXN0ZXJOYW1lZEZsb3dDb250ZW50Tm9kZShj
b250ZW50Tm9kZSk7CisgICAgQVNTRVJUKGl0LT52YWx1ZSk7CisgICAgQVNTRVJUKGl0LT52YWx1
ZS0+aGFzQ29udGVudE5vZGUoY29udGVudE5vZGUpKTsKKyAgICBpdC0+dmFsdWUtPnVucmVnaXN0
ZXJOYW1lZEZsb3dDb250ZW50Tm9kZShjb250ZW50Tm9kZSk7CiAgICAgbV9tYXBOYW1lZEZsb3dD
b250ZW50Tm9kZXMucmVtb3ZlKGNvbnRlbnROb2RlKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCmluZGV4IGE5NmY2MTIuLjMzNjdkMWQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAKQEAgLTQ1OCw3ICs0NTgsNyBA
QCBib29sIElubGluZUZsb3dCb3g6OnJlcXVpcmVzSWRlb2dyYXBoaWNCYXNlbGluZShjb25zdCBH
bHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGbwogICAgICAgICAgICAgY29uc3QgVmVjdG9yPGNvbnN0
IFNpbXBsZUZvbnREYXRhKj4qIHVzZWRGb250cyA9IDA7CiAgICAgICAgICAgICBpZiAoY3Vyci0+
aXNJbmxpbmVUZXh0Qm94KCkpIHsKICAgICAgICAgICAgICAgICBHbHlwaE92ZXJmbG93QW5kRmFs
bGJhY2tGb250c01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSB0ZXh0Qm94RGF0YU1hcC5maW5kKHRv
SW5saW5lVGV4dEJveChjdXJyKSk7Ci0gICAgICAgICAgICAgICAgdXNlZEZvbnRzID0gaXQgPT0g
dGV4dEJveERhdGFNYXAuZW5kKCkgPyAwIDogJml0LT5zZWNvbmQuZmlyc3Q7CisgICAgICAgICAg
ICAgICAgdXNlZEZvbnRzID0gaXQgPT0gdGV4dEJveERhdGFNYXAuZW5kKCkgPyAwIDogJml0LT52
YWx1ZS5maXJzdDsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKHVzZWRGb250cykg
ewpAQCAtODIyLDcgKzgyMiw3IEBAIGlubGluZSB2b2lkIElubGluZUZsb3dCb3g6OmFkZFRleHRC
b3hWaXN1YWxPdmVyZmxvdyhJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94LCBHbHlwCiAgICAgUmVuZGVy
U3R5bGUqIHN0eWxlID0gdGV4dEJveC0+cmVuZGVyZXIoKS0+c3R5bGUoaXNGaXJzdExpbmVTdHls
ZSgpKTsKICAgICAKICAgICBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcDo6aXRlcmF0
b3IgaXQgPSB0ZXh0Qm94RGF0YU1hcC5maW5kKHRleHRCb3gpOwotICAgIEdseXBoT3ZlcmZsb3cq
IGdseXBoT3ZlcmZsb3cgPSBpdCA9PSB0ZXh0Qm94RGF0YU1hcC5lbmQoKSA/IDAgOiAmaXQtPnNl
Y29uZC5zZWNvbmQ7CisgICAgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdyA9IGl0ID09IHRl
eHRCb3hEYXRhTWFwLmVuZCgpID8gMCA6ICZpdC0+dmFsdWUuc2Vjb25kOwogICAgIGJvb2wgaXNG
bGlwcGVkTGluZSA9IHN0eWxlLT5pc0ZsaXBwZWRMaW5lc1dyaXRpbmdNb2RlKCk7CiAKICAgICBp
bnQgdG9wR2x5cGhFZGdlID0gZ2x5cGhPdmVyZmxvdyA/IChpc0ZsaXBwZWRMaW5lID8gZ2x5cGhP
dmVyZmxvdy0+Ym90dG9tIDogZ2x5cGhPdmVyZmxvdy0+dG9wKSA6IDA7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAppbmRleCAwZTRhNzdhLi40MjM2NzRiIDEwMDc1NQot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKQEAgLTQzNjksNyArNDM2OSw3IEBA
IHZvaWQgUmVuZGVyQmxvY2s6OmNsZWFyRmxvYXRzKCkKIAogICAgICAgICBSZW5kZXJlclRvRmxv
YXRJbmZvTWFwOjppdGVyYXRvciBlbmQgPSBmbG9hdE1hcC5lbmQoKTsKICAgICAgICAgZm9yIChS
ZW5kZXJlclRvRmxvYXRJbmZvTWFwOjppdGVyYXRvciBpdCA9IGZsb2F0TWFwLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2Jq
ZWN0ID0gKCppdCkuc2Vjb25kOworICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5n
T2JqZWN0ID0gKCppdCkudmFsdWU7CiAgICAgICAgICAgICBpZiAoIWZsb2F0aW5nT2JqZWN0LT5p
c0Rlc2NlbmRhbnQoKSkgewogICAgICAgICAgICAgICAgIGNoYW5nZUxvZ2ljYWxUb3AgPSAwOwog
ICAgICAgICAgICAgICAgIGNoYW5nZUxvZ2ljYWxCb3R0b20gPSBtYXgoY2hhbmdlTG9naWNhbEJv
dHRvbSwgbG9naWNhbEJvdHRvbUZvckZsb2F0KGZsb2F0aW5nT2JqZWN0KSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCmluZGV4IDA4
OGMxNGMuLjJjZmYwY2MgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9ja0xpbmVMYXlvdXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9ja0xpbmVMYXlvdXQuY3BwCkBAIC02NzcsMTQgKzY3NywxNCBAQCBzdGF0aWMgaW5saW5l
IHZvaWQgc2V0TG9naWNhbFdpZHRoRm9yVGV4dFJ1bihSb290SW5saW5lQm94KiBsaW5lQm94LCBC
aWRpUnVuKiBydQogICAgIGlmICghZmFsbGJhY2tGb250cy5pc0VtcHR5KCkpIHsKICAgICAgICAg
QVNTRVJUKHJ1bi0+bV9ib3gtPmlzVGV4dCgpKTsKICAgICAgICAgR2x5cGhPdmVyZmxvd0FuZEZh
bGxiYWNrRm9udHNNYXA6Oml0ZXJhdG9yIGl0ID0gdGV4dEJveERhdGFNYXAuYWRkKHRvSW5saW5l
VGV4dEJveChydW4tPm1fYm94KSwgbWFrZV9wYWlyKFZlY3Rvcjxjb25zdCBTaW1wbGVGb250RGF0
YSo+KCksIEdseXBoT3ZlcmZsb3coKSkpLml0ZXJhdG9yOwotICAgICAgICBBU1NFUlQoaXQtPnNl
Y29uZC5maXJzdC5pc0VtcHR5KCkpOwotICAgICAgICBjb3B5VG9WZWN0b3IoZmFsbGJhY2tGb250
cywgaXQtPnNlY29uZC5maXJzdCk7CisgICAgICAgIEFTU0VSVChpdC0+dmFsdWUuZmlyc3QuaXNF
bXB0eSgpKTsKKyAgICAgICAgY29weVRvVmVjdG9yKGZhbGxiYWNrRm9udHMsIGl0LT52YWx1ZS5m
aXJzdCk7CiAgICAgICAgIHJ1bi0+bV9ib3gtPnBhcmVudCgpLT5jbGVhckRlc2NlbmRhbnRzSGF2
ZVNhbWVMaW5lSGVpZ2h0QW5kQmFzZWxpbmUoKTsKICAgICB9CiAgICAgaWYgKChnbHlwaE92ZXJm
bG93LnRvcCB8fCBnbHlwaE92ZXJmbG93LmJvdHRvbSB8fCBnbHlwaE92ZXJmbG93LmxlZnQgfHwg
Z2x5cGhPdmVyZmxvdy5yaWdodCkpIHsKICAgICAgICAgQVNTRVJUKHJ1bi0+bV9ib3gtPmlzVGV4
dCgpKTsKICAgICAgICAgR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXA6Oml0ZXJhdG9y
IGl0ID0gdGV4dEJveERhdGFNYXAuYWRkKHRvSW5saW5lVGV4dEJveChydW4tPm1fYm94KSwgbWFr
ZV9wYWlyKFZlY3Rvcjxjb25zdCBTaW1wbGVGb250RGF0YSo+KCksIEdseXBoT3ZlcmZsb3coKSkp
Lml0ZXJhdG9yOwotICAgICAgICBpdC0+c2Vjb25kLnNlY29uZCA9IGdseXBoT3ZlcmZsb3c7Cisg
ICAgICAgIGl0LT52YWx1ZS5zZWNvbmQgPSBnbHlwaE92ZXJmbG93OwogICAgICAgICBydW4tPm1f
Ym94LT5jbGVhcktub3duVG9IYXZlTm9PdmVyZmxvdygpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCmluZGV4IDVlZWYz
Y2MuLjJmNWI1NTA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94TW9kZWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3hNb2RlbE9iamVjdC5jcHAKQEAgLTEzNyw3ICsxMzcsNyBAQCB2b2lkIEltYWdlUXVhbGl0eUNv
bnRyb2xsZXI6OmhpZ2hRdWFsaXR5UmVwYWludFRpbWVyRmlyZWQoVGltZXI8SW1hZ2VRdWFsaXR5
Q29udAogICAgIGlmIChtX2FuaW1hdGVkUmVzaXplSXNBY3RpdmUpIHsKICAgICAgICAgbV9hbmlt
YXRlZFJlc2l6ZUlzQWN0aXZlID0gZmFsc2U7CiAgICAgICAgIGZvciAoT2JqZWN0TGF5ZXJTaXpl
TWFwOjppdGVyYXRvciBpdCA9IG1fb2JqZWN0TGF5ZXJTaXplTWFwLmJlZ2luKCk7IGl0ICE9IG1f
b2JqZWN0TGF5ZXJTaXplTWFwLmVuZCgpOyArK2l0KQotICAgICAgICAgICAgaXQtPmZpcnN0LT5y
ZXBhaW50KCk7CisgICAgICAgICAgICBpdC0+a2V5LT5yZXBhaW50KCk7CiAgICAgfQogfQogCkBA
IC0xNjIsMTQgKzE2MiwxNCBAQCBib29sIEltYWdlUXVhbGl0eUNvbnRyb2xsZXI6OnNob3VsZFBh
aW50QXRMb3dRdWFsaXR5KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgUgogCiAgICAgLy8gTG9v
ayBvdXJzZWx2ZXMgdXAgaW4gdGhlIGhhc2h0YWJsZXMuCiAgICAgT2JqZWN0TGF5ZXJTaXplTWFw
OjppdGVyYXRvciBpID0gbV9vYmplY3RMYXllclNpemVNYXAuZmluZChvYmplY3QpOwotICAgIExh
eWVyU2l6ZU1hcCogaW5uZXJNYXAgPSBpICE9IG1fb2JqZWN0TGF5ZXJTaXplTWFwLmVuZCgpID8g
JmktPnNlY29uZCA6IDA7CisgICAgTGF5ZXJTaXplTWFwKiBpbm5lck1hcCA9IGkgIT0gbV9vYmpl
Y3RMYXllclNpemVNYXAuZW5kKCkgPyAmaS0+dmFsdWUgOiAwOwogICAgIExheW91dFNpemUgb2xk
U2l6ZTsKICAgICBib29sIGlzRmlyc3RSZXNpemUgPSB0cnVlOwogICAgIGlmIChpbm5lck1hcCkg
ewogICAgICAgICBMYXllclNpemVNYXA6Oml0ZXJhdG9yIGogPSBpbm5lck1hcC0+ZmluZChsYXll
cik7CiAgICAgICAgIGlmIChqICE9IGlubmVyTWFwLT5lbmQoKSkgewogICAgICAgICAgICAgaXNG
aXJzdFJlc2l6ZSA9IGZhbHNlOwotICAgICAgICAgICAgb2xkU2l6ZSA9IGotPnNlY29uZDsKKyAg
ICAgICAgICAgIG9sZFNpemUgPSBqLT52YWx1ZTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwCmluZGV4IGRlNDVkODkuLjU0NTdh
M2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb3VudGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ291bnRlci5jcHAKQEAgLTU3
MSwxMSArNTcxLDExIEBAIHZvaWQgUmVuZGVyQ291bnRlcjo6ZGVzdHJveUNvdW50ZXJOb2RlcyhS
ZW5kZXJPYmplY3QqIG93bmVyKQogICAgIENvdW50ZXJNYXBzOjppdGVyYXRvciBtYXBzSXRlcmF0
b3IgPSBtYXBzLmZpbmQob3duZXIpOwogICAgIGlmIChtYXBzSXRlcmF0b3IgPT0gbWFwcy5lbmQo
KSkKICAgICAgICAgcmV0dXJuOwotICAgIENvdW50ZXJNYXAqIG1hcCA9IG1hcHNJdGVyYXRvci0+
c2Vjb25kLmdldCgpOworICAgIENvdW50ZXJNYXAqIG1hcCA9IG1hcHNJdGVyYXRvci0+dmFsdWUu
Z2V0KCk7CiAgICAgQ291bnRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsK
ICAgICBmb3IgKENvdW50ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgQXRvbWljU3RyaW5nIGlkZW50aWZpZXIoaXQtPmZp
cnN0LmdldCgpKTsKLSAgICAgICAgZGVzdHJveUNvdW50ZXJOb2RlV2l0aG91dE1hcFJlbW92YWwo
aWRlbnRpZmllciwgaXQtPnNlY29uZC5nZXQoKSk7CisgICAgICAgIEF0b21pY1N0cmluZyBpZGVu
dGlmaWVyKGl0LT5rZXkuZ2V0KCkpOworICAgICAgICBkZXN0cm95Q291bnRlck5vZGVXaXRob3V0
TWFwUmVtb3ZhbChpZGVudGlmaWVyLCBpdC0+dmFsdWUuZ2V0KCkpOwogICAgIH0KICAgICBtYXBz
LnJlbW92ZShtYXBzSXRlcmF0b3IpOwogICAgIG93bmVyLT5zZXRIYXNDb3VudGVyTm9kZU1hcChm
YWxzZSk7CkBAIC01ODksNyArNTg5LDcgQEAgdm9pZCBSZW5kZXJDb3VudGVyOjpkZXN0cm95Q291
bnRlck5vZGUoUmVuZGVyT2JqZWN0KiBvd25lciwgY29uc3QgQXRvbWljU3RyaW5nJgogICAgIENv
dW50ZXJNYXA6Oml0ZXJhdG9yIG1hcEl0ZXJhdG9yID0gbWFwLT5maW5kKGlkZW50aWZpZXIuaW1w
bCgpKTsKICAgICBpZiAobWFwSXRlcmF0b3IgPT0gbWFwLT5lbmQoKSkKICAgICAgICAgcmV0dXJu
OwotICAgIGRlc3Ryb3lDb3VudGVyTm9kZVdpdGhvdXRNYXBSZW1vdmFsKGlkZW50aWZpZXIsIG1h
cEl0ZXJhdG9yLT5zZWNvbmQuZ2V0KCkpOworICAgIGRlc3Ryb3lDb3VudGVyTm9kZVdpdGhvdXRN
YXBSZW1vdmFsKGlkZW50aWZpZXIsIG1hcEl0ZXJhdG9yLT52YWx1ZS5nZXQoKSk7CiAgICAgbWFw
LT5yZW1vdmUobWFwSXRlcmF0b3IpOwogICAgIC8vIFdlIGRvIG5vdCBkZWxldGUgIm1hcCIgaGVy
ZSBldmVuIGlmIGVtcHR5IGJlY2F1c2Ugd2UgZXhwZWN0IHRvIHJldXNlCiAgICAgLy8gaXQgc29v
bi4gSW4gb3JkZXIgZm9yIGEgcmVuZGVyZXIgdG8gbG9zZSBhbGwgaXRzIGNvdW50ZXJzIHBlcm1h
bmVudGx5LApAQCAtNjI5LDIyICs2MjksMjIgQEAgc3RhdGljIHZvaWQgdXBkYXRlQ291bnRlcnMo
UmVuZGVyT2JqZWN0KiByZW5kZXJlcikKICAgICBDb3VudGVyRGlyZWN0aXZlTWFwOjpjb25zdF9p
dGVyYXRvciBlbmQgPSBkaXJlY3RpdmVNYXAtPmVuZCgpOwogICAgIGlmICghcmVuZGVyZXItPmhh
c0NvdW50ZXJOb2RlTWFwKCkpIHsKICAgICAgICAgZm9yIChDb3VudGVyRGlyZWN0aXZlTWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IGRpcmVjdGl2ZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KQotICAgICAgICAgICAgbWFrZUNvdW50ZXJOb2RlKHJlbmRlcmVyLCBBdG9taWNTdHJpbmcoaXQt
PmZpcnN0LmdldCgpKSwgZmFsc2UpOworICAgICAgICAgICAgbWFrZUNvdW50ZXJOb2RlKHJlbmRl
cmVyLCBBdG9taWNTdHJpbmcoaXQtPmtleS5nZXQoKSksIGZhbHNlKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICBDb3VudGVyTWFwKiBjb3VudGVyTWFwID0gY291bnRlck1hcHMoKS5nZXQo
cmVuZGVyZXIpOwogICAgIEFTU0VSVChjb3VudGVyTWFwKTsKICAgICBmb3IgKENvdW50ZXJEaXJl
Y3RpdmVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZGlyZWN0aXZlTWFwLT5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKLSAgICAgICAgUmVmUHRyPENvdW50ZXJOb2RlPiBub2RlID0gY291bnRl
ck1hcC0+Z2V0KGl0LT5maXJzdC5nZXQoKSk7CisgICAgICAgIFJlZlB0cjxDb3VudGVyTm9kZT4g
bm9kZSA9IGNvdW50ZXJNYXAtPmdldChpdC0+a2V5LmdldCgpKTsKICAgICAgICAgaWYgKCFub2Rl
KSB7Ci0gICAgICAgICAgICBtYWtlQ291bnRlck5vZGUocmVuZGVyZXIsIEF0b21pY1N0cmluZyhp
dC0+Zmlyc3QuZ2V0KCkpLCBmYWxzZSk7CisgICAgICAgICAgICBtYWtlQ291bnRlck5vZGUocmVu
ZGVyZXIsIEF0b21pY1N0cmluZyhpdC0+a2V5LmdldCgpKSwgZmFsc2UpOwogICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgUmVmUHRyPENvdW50ZXJOb2RlPiBuZXdQYXJl
bnQgPSAwOwogICAgICAgICBSZWZQdHI8Q291bnRlck5vZGU+IG5ld1ByZXZpb3VzU2libGluZyA9
IDA7CiAgICAgICAgIAotICAgICAgICBmaW5kUGxhY2VGb3JDb3VudGVyKHJlbmRlcmVyLCBBdG9t
aWNTdHJpbmcoaXQtPmZpcnN0LmdldCgpKSwgbm9kZS0+aGFzUmVzZXRUeXBlKCksIG5ld1BhcmVu
dCwgbmV3UHJldmlvdXNTaWJsaW5nKTsKLSAgICAgICAgaWYgKG5vZGUgIT0gY291bnRlck1hcC0+
Z2V0KGl0LT5maXJzdC5nZXQoKSkpCisgICAgICAgIGZpbmRQbGFjZUZvckNvdW50ZXIocmVuZGVy
ZXIsIEF0b21pY1N0cmluZyhpdC0+a2V5LmdldCgpKSwgbm9kZS0+aGFzUmVzZXRUeXBlKCksIG5l
d1BhcmVudCwgbmV3UHJldmlvdXNTaWJsaW5nKTsKKyAgICAgICAgaWYgKG5vZGUgIT0gY291bnRl
ck1hcC0+Z2V0KGl0LT5rZXkuZ2V0KCkpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IENvdW50ZXJOb2RlKiBwYXJlbnQgPSBub2RlLT5wYXJlbnQoKTsKICAgICAgICAgaWYgKG5ld1Bh
cmVudCA9PSBwYXJlbnQgJiYgbmV3UHJldmlvdXNTaWJsaW5nID09IG5vZGUtPnByZXZpb3VzU2li
bGluZygpKQpAQCAtNjUyLDcgKzY1Miw3IEBAIHN0YXRpYyB2b2lkIHVwZGF0ZUNvdW50ZXJzKFJl
bmRlck9iamVjdCogcmVuZGVyZXIpCiAgICAgICAgIGlmIChwYXJlbnQpCiAgICAgICAgICAgICBw
YXJlbnQtPnJlbW92ZUNoaWxkKG5vZGUuZ2V0KCkpOwogICAgICAgICBpZiAobmV3UGFyZW50KQot
ICAgICAgICAgICAgbmV3UGFyZW50LT5pbnNlcnRBZnRlcihub2RlLmdldCgpLCBuZXdQcmV2aW91
c1NpYmxpbmcuZ2V0KCksIGl0LT5maXJzdC5nZXQoKSk7CisgICAgICAgICAgICBuZXdQYXJlbnQt
Pmluc2VydEFmdGVyKG5vZGUuZ2V0KCksIG5ld1ByZXZpb3VzU2libGluZy5nZXQoKSwgaXQtPmtl
eS5nZXQoKSk7CiAgICAgfQogfQogCkBAIC02ODQsMjEgKzY4NCwyMSBAQCB2b2lkIFJlbmRlckNv
dW50ZXI6OnJlbmRlcmVyU3R5bGVDaGFuZ2VkKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0
IFJlbmRlclN0eQogICAgICAgICAgICAgQ291bnRlckRpcmVjdGl2ZU1hcDo6Y29uc3RfaXRlcmF0
b3IgbmV3TWFwRW5kID0gbmV3Q291bnRlckRpcmVjdGl2ZXMtPmVuZCgpOwogICAgICAgICAgICAg
Q291bnRlckRpcmVjdGl2ZU1hcDo6Y29uc3RfaXRlcmF0b3Igb2xkTWFwRW5kID0gb2xkQ291bnRl
ckRpcmVjdGl2ZXMtPmVuZCgpOwogICAgICAgICAgICAgZm9yIChDb3VudGVyRGlyZWN0aXZlTWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG5ld0NvdW50ZXJEaXJlY3RpdmVzLT5iZWdpbigpOyBpdCAh
PSBuZXdNYXBFbmQ7ICsraXQpIHsKLSAgICAgICAgICAgICAgICBDb3VudGVyRGlyZWN0aXZlTWFw
Ojpjb25zdF9pdGVyYXRvciBvbGRNYXBJdCA9IG9sZENvdW50ZXJEaXJlY3RpdmVzLT5maW5kKGl0
LT5maXJzdCk7CisgICAgICAgICAgICAgICAgQ291bnRlckRpcmVjdGl2ZU1hcDo6Y29uc3RfaXRl
cmF0b3Igb2xkTWFwSXQgPSBvbGRDb3VudGVyRGlyZWN0aXZlcy0+ZmluZChpdC0+a2V5KTsKICAg
ICAgICAgICAgICAgICBpZiAob2xkTWFwSXQgIT0gb2xkTWFwRW5kKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChvbGRNYXBJdC0+c2Vjb25kID09IGl0LT5zZWNvbmQpCisgICAgICAgICAgICAg
ICAgICAgIGlmIChvbGRNYXBJdC0+dmFsdWUgPT0gaXQtPnZhbHVlKQogICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIFJlbmRlckNvdW50ZXI6OmRl
c3Ryb3lDb3VudGVyTm9kZShyZW5kZXJlciwgaXQtPmZpcnN0LmdldCgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgUmVuZGVyQ291bnRlcjo6ZGVzdHJveUNvdW50ZXJOb2RlKHJlbmRlcmVyLCBpdC0+
a2V5LmdldCgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgLy8gV2UgbXVz
dCBjcmVhdGUgdGhpcyBub2RlIGhlcmUsIGJlY2F1c2UgdGhlIGNoYW5nZWQgbm9kZSBtYXkgYmUg
YSBub2RlIHdpdGggbm8gZGlzcGxheSBzdWNoIGFzCiAgICAgICAgICAgICAgICAgLy8gYXMgdGhv
c2UgY3JlYXRlZCBieSB0aGUgaW5jcmVtZW50IG9yIHJlc2V0IGRpcmVjdGl2ZXMgYW5kIHRoZSBy
ZS1sYXlvdXQgdGhhdCB3aWxsIGhhcHBlbiB3aWxsCiAgICAgICAgICAgICAgICAgLy8gbm90IGNh
dGNoIHRoZSBjaGFuZ2UgaWYgdGhlIG5vZGUgaGFkIG5vIGNoaWxkcmVuLgotICAgICAgICAgICAg
ICAgIG1ha2VDb3VudGVyTm9kZShyZW5kZXJlciwgaXQtPmZpcnN0LmdldCgpLCBmYWxzZSk7Cisg
ICAgICAgICAgICAgICAgbWFrZUNvdW50ZXJOb2RlKHJlbmRlcmVyLCBpdC0+a2V5LmdldCgpLCBm
YWxzZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyBEZXN0cm95aW5nIG9sZCBjb3Vu
dGVycyB0aGF0IGRvIG5vdCBleGlzdCBpbiB0aGUgbmV3IGNvdW50ZXJEaXJlY3RpdmUgbWFwLgog
ICAgICAgICAgICAgZm9yIChDb3VudGVyRGlyZWN0aXZlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9
IG9sZENvdW50ZXJEaXJlY3RpdmVzLT5iZWdpbigpOyBpdCAhPW9sZE1hcEVuZDsgKytpdCkgewot
ICAgICAgICAgICAgICAgIGlmICghbmV3Q291bnRlckRpcmVjdGl2ZXMtPmNvbnRhaW5zKGl0LT5m
aXJzdCkpCi0gICAgICAgICAgICAgICAgICAgIFJlbmRlckNvdW50ZXI6OmRlc3Ryb3lDb3VudGVy
Tm9kZShyZW5kZXJlciwgaXQtPmZpcnN0LmdldCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoIW5l
d0NvdW50ZXJEaXJlY3RpdmVzLT5jb250YWlucyhpdC0+a2V5KSkKKyAgICAgICAgICAgICAgICAg
ICAgUmVuZGVyQ291bnRlcjo6ZGVzdHJveUNvdW50ZXJOb2RlKHJlbmRlcmVyLCBpdC0+a2V5Lmdl
dCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChy
ZW5kZXJlci0+aGFzQ291bnRlck5vZGVNYXAoKSkKQEAgLTcxMCw3ICs3MTAsNyBAQCB2b2lkIFJl
bmRlckNvdW50ZXI6OnJlbmRlcmVyU3R5bGVDaGFuZ2VkKFJlbmRlck9iamVjdCogcmVuZGVyZXIs
IGNvbnN0IFJlbmRlclN0eQogICAgICAgICAgICAgLy8gV2UgbXVzdCBjcmVhdGUgdGhpcyBub2Rl
IGhlcmUsIGJlY2F1c2UgdGhlIGFkZGVkIG5vZGUgbWF5IGJlIGEgbm9kZSB3aXRoIG5vIGRpc3Bs
YXkgc3VjaCBhcwogICAgICAgICAgICAgLy8gYXMgdGhvc2UgY3JlYXRlZCBieSB0aGUgaW5jcmVt
ZW50IG9yIHJlc2V0IGRpcmVjdGl2ZXMgYW5kIHRoZSByZS1sYXlvdXQgdGhhdCB3aWxsIGhhcHBl
biB3aWxsCiAgICAgICAgICAgICAvLyBub3QgY2F0Y2ggdGhlIGNoYW5nZSBpZiB0aGUgbm9kZSBo
YWQgbm8gY2hpbGRyZW4uCi0gICAgICAgICAgICBtYWtlQ291bnRlck5vZGUocmVuZGVyZXIsIGl0
LT5maXJzdC5nZXQoKSwgZmFsc2UpOworICAgICAgICAgICAgbWFrZUNvdW50ZXJOb2RlKHJlbmRl
cmVyLCBpdC0+a2V5LmdldCgpLCBmYWxzZSk7CiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAKaW5kZXggMWIwOWNiYi4u
MzUzYzEyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dU
aHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFk
LmNwcApAQCAtNjQyLDcgKzY0Miw3IEBAIHZvaWQgUmVuZGVyRmxvd1RocmVhZDo6c2V0UmVnaW9u
UmFuZ2VGb3JCb3goY29uc3QgUmVuZGVyQm94KiBib3gsIExheW91dFVuaXQgb2ZmCiAgICAgfQog
CiAgICAgLy8gSWYgbm90aGluZyBjaGFuZ2VkLCBqdXN0IGJhaWwuCi0gICAgUmVuZGVyUmVnaW9u
UmFuZ2UmIHJhbmdlID0gaXQtPnNlY29uZDsKKyAgICBSZW5kZXJSZWdpb25SYW5nZSYgcmFuZ2Ug
PSBpdC0+dmFsdWU7CiAgICAgaWYgKHJhbmdlLnN0YXJ0UmVnaW9uKCkgPT0gc3RhcnRSZWdpb24g
JiYgcmFuZ2UuZW5kUmVnaW9uKCkgPT0gZW5kUmVnaW9uKQogICAgICAgICByZXR1cm47CiAKQEAg
LTY3Miw3ICs2NzIsNyBAQCB2b2lkIFJlbmRlckZsb3dUaHJlYWQ6OmdldFJlZ2lvblJhbmdlRm9y
Qm94KGNvbnN0IFJlbmRlckJveCogYm94LCBSZW5kZXJSZWdpb24qJgogICAgIGlmIChpdCA9PSBt
X3JlZ2lvblJhbmdlTWFwLmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBjb25zdCBSZW5k
ZXJSZWdpb25SYW5nZSYgcmFuZ2UgPSBpdC0+c2Vjb25kOworICAgIGNvbnN0IFJlbmRlclJlZ2lv
blJhbmdlJiByYW5nZSA9IGl0LT52YWx1ZTsKICAgICBzdGFydFJlZ2lvbiA9IHJhbmdlLnN0YXJ0
UmVnaW9uKCk7CiAgICAgZW5kUmVnaW9uID0gcmFuZ2UuZW5kUmVnaW9uKCk7CiAgICAgQVNTRVJU
KG1fcmVnaW9uTGlzdC5jb250YWlucyhzdGFydFJlZ2lvbikgJiYgbV9yZWdpb25MaXN0LmNvbnRh
aW5zKGVuZFJlZ2lvbikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAK
aW5kZXggNzRiMGY1YS4uNjhjZWJiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXIuY3BwCkBAIC0yODM2LDcgKzI4MzYsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludChH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QsCiAg
ICAgcGFpbnRMYXllcih0aGlzLCBjb250ZXh0LCBkYW1hZ2VSZWN0LCBwYWludEJlaGF2aW9yLCBw
YWludGluZ1Jvb3QsIHJlZ2lvbiwgJm92ZXJsYXBUZXN0UmVxdWVzdHMsIHBhaW50RmxhZ3MpOwog
ICAgIE92ZXJsYXBUZXN0UmVxdWVzdE1hcDo6aXRlcmF0b3IgZW5kID0gb3ZlcmxhcFRlc3RSZXF1
ZXN0cy5lbmQoKTsKICAgICBmb3IgKE92ZXJsYXBUZXN0UmVxdWVzdE1hcDo6aXRlcmF0b3IgaXQg
PSBvdmVybGFwVGVzdFJlcXVlc3RzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAg
aXQtPmZpcnN0LT5zZXRPdmVybGFwVGVzdFJlc3VsdChmYWxzZSk7CisgICAgICAgIGl0LT5rZXkt
PnNldE92ZXJsYXBUZXN0UmVzdWx0KGZhbHNlKTsKIH0KIAogdm9pZCBSZW5kZXJMYXllcjo6cGFp
bnRPdmVybGF5U2Nyb2xsYmFycyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IExheW91
dFJlY3QmIGRhbWFnZVJlY3QsIFBhaW50QmVoYXZpb3IgcGFpbnRCZWhhdmlvciwgUmVuZGVyT2Jq
ZWN0KiBwYWludGluZ1Jvb3QpCkBAIC0yOTA1LDExICsyOTA1LDExIEBAIHN0YXRpYyB2b2lkIHBl
cmZvcm1PdmVybGFwVGVzdHMoT3ZlcmxhcFRlc3RSZXF1ZXN0TWFwJiBvdmVybGFwVGVzdFJlcXVl
c3RzLCBjb25zCiAgICAgT3ZlcmxhcFRlc3RSZXF1ZXN0TWFwOjppdGVyYXRvciBlbmQgPSBvdmVy
bGFwVGVzdFJlcXVlc3RzLmVuZCgpOwogICAgIExheW91dFJlY3QgYm91bmRpbmdCb3ggPSBsYXll
ci0+Ym91bmRpbmdCb3gocm9vdExheWVyKTsKICAgICBmb3IgKE92ZXJsYXBUZXN0UmVxdWVzdE1h
cDo6aXRlcmF0b3IgaXQgPSBvdmVybGFwVGVzdFJlcXVlc3RzLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgewotICAgICAgICBpZiAoIWJvdW5kaW5nQm94LmludGVyc2VjdHMoaXQtPnNlY29uZCkp
CisgICAgICAgIGlmICghYm91bmRpbmdCb3guaW50ZXJzZWN0cyhpdC0+dmFsdWUpKQogICAgICAg
ICAgICAgY29udGludWU7CiAKLSAgICAgICAgaXQtPmZpcnN0LT5zZXRPdmVybGFwVGVzdFJlc3Vs
dCh0cnVlKTsKLSAgICAgICAgb3ZlcmxhcHBlZFJlcXVlc3RDbGllbnRzLmFwcGVuZChpdC0+Zmly
c3QpOworICAgICAgICBpdC0+a2V5LT5zZXRPdmVybGFwVGVzdFJlc3VsdCh0cnVlKTsKKyAgICAg
ICAgb3ZlcmxhcHBlZFJlcXVlc3RDbGllbnRzLmFwcGVuZChpdC0+a2V5KTsKICAgICB9CiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBvdmVybGFwcGVkUmVxdWVzdENsaWVudHMuc2l6ZSgpOyAr
K2kpCiAgICAgICAgIG92ZXJsYXBUZXN0UmVxdWVzdHMucmVtb3ZlKG92ZXJsYXBwZWRSZXF1ZXN0
Q2xpZW50c1tpXSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJGaWx0ZXJJbmZvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ckZpbHRlckluZm8uY3BwCmluZGV4IGFjYmYwN2QuLmNiNGM1ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlckluZm8uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlckluZm8uY3BwCkBAIC01Niw3ICs1
Niw3IEBAIFJlbmRlckxheWVyRmlsdGVySW5mbyogUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvOjpmaWx0
ZXJJbmZvRm9yUmVuZGVyTGF5ZXIoY29uc3QgUmVuCiAgICAgaWYgKCFzX2ZpbHRlck1hcCkKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvTWFwOjppdGVyYXRvciBp
dGVyID0gc19maWx0ZXJNYXAtPmZpbmQobGF5ZXIpOwotICAgIHJldHVybiAoaXRlciAhPSBzX2Zp
bHRlck1hcC0+ZW5kKCkpID8gaXRlci0+c2Vjb25kIDogMDsKKyAgICByZXR1cm4gKGl0ZXIgIT0g
c19maWx0ZXJNYXAtPmVuZCgpKSA/IGl0ZXItPnZhbHVlIDogMDsKIH0KIAogUmVuZGVyTGF5ZXJG
aWx0ZXJJbmZvKiBSZW5kZXJMYXllckZpbHRlckluZm86OmNyZWF0ZUZpbHRlckluZm9Gb3JSZW5k
ZXJMYXllcklmTmVlZGVkKFJlbmRlckxheWVyKiBsYXllcikKQEAgLTY3LDcgKzY3LDcgQEAgUmVu
ZGVyTGF5ZXJGaWx0ZXJJbmZvKiBSZW5kZXJMYXllckZpbHRlckluZm86OmNyZWF0ZUZpbHRlcklu
Zm9Gb3JSZW5kZXJMYXllcklmTmUKICAgICBSZW5kZXJMYXllckZpbHRlckluZm9NYXA6Oml0ZXJh
dG9yIGl0ZXIgPSBzX2ZpbHRlck1hcC0+ZmluZChsYXllcik7CiAgICAgaWYgKGl0ZXIgIT0gc19m
aWx0ZXJNYXAtPmVuZCgpKSB7CiAgICAgICAgIEFTU0VSVChsYXllci0+aGFzRmlsdGVySW5mbygp
KTsKLSAgICAgICAgcmV0dXJuIGl0ZXItPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGl0ZXItPnZh
bHVlOwogICAgIH0KICAgICAKICAgICBSZW5kZXJMYXllckZpbHRlckluZm8qIGZpbHRlciA9IG5l
dyBSZW5kZXJMYXllckZpbHRlckluZm8obGF5ZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd1RocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93VGhyZWFkLmNwcAppbmRleCAyMjdhZjdkLi43ZmIyNjIz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93VGhy
ZWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93VGhy
ZWFkLmNwcApAQCAtMTE2LDcgKzExNiw3IEBAIGJvb2wgUmVuZGVyTmFtZWRGbG93VGhyZWFkOjpk
ZXBlbmRzT24oUmVuZGVyTmFtZWRGbG93VGhyZWFkKiBvdGhlclJlbmRlckZsb3dUaHJlCiAgICAg
UmVuZGVyTmFtZWRGbG93VGhyZWFkQ291bnRlZFNldDo6Y29uc3RfaXRlcmF0b3IgaXRlcmF0b3Ig
PSBtX2xheW91dEJlZm9yZVRocmVhZHNTZXQuYmVnaW4oKTsKICAgICBSZW5kZXJOYW1lZEZsb3dU
aHJlYWRDb3VudGVkU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2xheW91dEJlZm9yZVRocmVh
ZHNTZXQuZW5kKCk7CiAgICAgZm9yICg7IGl0ZXJhdG9yICE9IGVuZDsgKytpdGVyYXRvcikgewot
ICAgICAgICBjb25zdCBSZW5kZXJOYW1lZEZsb3dUaHJlYWQqIGJlZm9yZUZsb3dUaHJlYWQgPSAo
Kml0ZXJhdG9yKS5maXJzdDsKKyAgICAgICAgY29uc3QgUmVuZGVyTmFtZWRGbG93VGhyZWFkKiBi
ZWZvcmVGbG93VGhyZWFkID0gKCppdGVyYXRvcikua2V5OwogICAgICAgICBpZiAoYmVmb3JlRmxv
d1RocmVhZC0+ZGVwZW5kc09uKG90aGVyUmVuZGVyRmxvd1RocmVhZCkpCiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0yNDYsNyArMjQ2LDcgQEAgdm9pZCBSZW5kZXJOYW1lZEZs
b3dUaHJlYWQ6OnJlbW92ZURlcGVuZGVuY3lPbkZsb3dUaHJlYWQoUmVuZGVyTmFtZWRGbG93VGhy
ZWFkKgogdm9pZCBSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OnB1c2hEZXBlbmRlbmNpZXMoUmVuZGVy
TmFtZWRGbG93VGhyZWFkTGlzdCYgbGlzdCkKIHsKICAgICBmb3IgKFJlbmRlck5hbWVkRmxvd1Ro
cmVhZENvdW50ZWRTZXQ6Oml0ZXJhdG9yIGl0ZXIgPSBtX2xheW91dEJlZm9yZVRocmVhZHNTZXQu
YmVnaW4oKTsgaXRlciAhPSBtX2xheW91dEJlZm9yZVRocmVhZHNTZXQuZW5kKCk7ICsraXRlcikg
ewotICAgICAgICBSZW5kZXJOYW1lZEZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSAoKml0ZXIpLmZp
cnN0OworICAgICAgICBSZW5kZXJOYW1lZEZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSAoKml0ZXIp
LmtleTsKICAgICAgICAgaWYgKGxpc3QuY29udGFpbnMoZmxvd1RocmVhZCkpCiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgZmxvd1RocmVhZC0+cHVzaERlcGVuZGVuY2llcyhsaXN0KTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZWdpb24uY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5jcHAKaW5kZXggNTM2MjgzNi4u
YmVjODgzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lv
bi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5jcHAKQEAg
LTIzMSw3ICsyMzEsNyBAQCBSZW5kZXJCb3hSZWdpb25JbmZvKiBSZW5kZXJSZWdpb246OnNldFJl
bmRlckJveFJlZ2lvbkluZm8oY29uc3QgUmVuZGVyQm94KiBib3gsCiAgICAgaWYgKCFtX2lzVmFs
aWQgfHwgIW1fZmxvd1RocmVhZCkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBPd25QdHI8UmVu
ZGVyQm94UmVnaW9uSW5mbz4mIGJveEluZm8gPSBtX3JlbmRlckJveFJlZ2lvbkluZm8uYWRkKGJv
eCwgbnVsbHB0cikuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBPd25QdHI8UmVuZGVyQm94UmVnaW9u
SW5mbz4mIGJveEluZm8gPSBtX3JlbmRlckJveFJlZ2lvbkluZm8uYWRkKGJveCwgbnVsbHB0ciku
aXRlcmF0b3ItPnZhbHVlOwogICAgIGlmIChib3hJbmZvKQogICAgICAgICAqYm94SW5mbyA9IFJl
bmRlckJveFJlZ2lvbkluZm8obG9naWNhbExlZnRJbnNldCwgbG9naWNhbFJpZ2h0SW5zZXQsIGNv
bnRhaW5pbmdCbG9ja0NoYWluSXNJbnNldCk7CiAgICAgZWxzZQpAQCAtMjkxLDggKzI5MSw4IEBA
IHZvaWQgUmVuZGVyUmVnaW9uOjpzZXRSZWdpb25PYmplY3RzUmVnaW9uU3R5bGUoKQogICAgICAg
ICBSZWZQdHI8UmVuZGVyU3R5bGU+IG9iamVjdFN0eWxlSW5SZWdpb247CiAgICAgICAgIGJvb2wg
b2JqZWN0UmVnaW9uU3R5bGVDYWNoZWQgPSBmYWxzZTsKICAgICAgICAgaWYgKGl0ICE9IG1fcmVu
ZGVyT2JqZWN0UmVnaW9uU3R5bGUuZW5kKCkpIHsKLSAgICAgICAgICAgIG9iamVjdFN0eWxlSW5S
ZWdpb24gPSBpdC0+c2Vjb25kLnN0eWxlOwotICAgICAgICAgICAgQVNTRVJUKGl0LT5zZWNvbmQu
Y2FjaGVkKTsKKyAgICAgICAgICAgIG9iamVjdFN0eWxlSW5SZWdpb24gPSBpdC0+dmFsdWUuc3R5
bGU7CisgICAgICAgICAgICBBU1NFUlQoaXQtPnZhbHVlLmNhY2hlZCk7CiAgICAgICAgICAgICBv
YmplY3RSZWdpb25TdHlsZUNhY2hlZCA9IHRydWU7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAg
ICAgb2JqZWN0U3R5bGVJblJlZ2lvbiA9IGNvbXB1dGVTdHlsZUluUmVnaW9uKG9iamVjdCk7CkBA
IC0zMTAsMTIgKzMxMCwxMiBAQCB2b2lkIFJlbmRlclJlZ2lvbjo6cmVzdG9yZVJlZ2lvbk9iamVj
dHNPcmlnaW5hbFN0eWxlKCkKIAogICAgIFJlbmRlck9iamVjdFJlZ2lvblN0eWxlTWFwIHRlbXA7
CiAgICAgZm9yIChSZW5kZXJPYmplY3RSZWdpb25TdHlsZU1hcDo6aXRlcmF0b3IgaXRlciA9IG1f
cmVuZGVyT2JqZWN0UmVnaW9uU3R5bGUuYmVnaW4oKSwgZW5kID0gbV9yZW5kZXJPYmplY3RSZWdp
b25TdHlsZS5lbmQoKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewotICAgICAgICBSZW5kZXJPYmpl
Y3QqIG9iamVjdCA9IGNvbnN0X2Nhc3Q8UmVuZGVyT2JqZWN0Kj4oaXRlci0+Zmlyc3QpOworICAg
ICAgICBSZW5kZXJPYmplY3QqIG9iamVjdCA9IGNvbnN0X2Nhc3Q8UmVuZGVyT2JqZWN0Kj4oaXRl
ci0+a2V5KTsKICAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBvYmplY3RSZWdpb25TdHlsZSA9
IG9iamVjdC0+c3R5bGUoKTsKLSAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBvYmplY3RPcmln
aW5hbFN0eWxlID0gaXRlci0+c2Vjb25kLnN0eWxlOworICAgICAgICBSZWZQdHI8UmVuZGVyU3R5
bGU+IG9iamVjdE9yaWdpbmFsU3R5bGUgPSBpdGVyLT52YWx1ZS5zdHlsZTsKICAgICAgICAgb2Jq
ZWN0LT5zZXRTdHlsZUludGVybmFsKG9iamVjdE9yaWdpbmFsU3R5bGUpOwogCi0gICAgICAgIGJv
b2wgc2hvdWxkQ2FjaGVSZWdpb25TdHlsZSA9IGl0ZXItPnNlY29uZC5jYWNoZWQ7CisgICAgICAg
IGJvb2wgc2hvdWxkQ2FjaGVSZWdpb25TdHlsZSA9IGl0ZXItPnZhbHVlLmNhY2hlZDsKICAgICAg
ICAgaWYgKCFzaG91bGRDYWNoZVJlZ2lvblN0eWxlKSB7CiAgICAgICAgICAgICAvLyBDaGVjayB3
aGV0aGVyIHdlIHNob3VsZCBjYWNoZSB0aGUgY29tcHV0ZWQgc3R5bGUgaW4gcmVnaW9uLgogICAg
ICAgICAgICAgdW5zaWduZWQgY2hhbmdlZENvbnRleHRTZW5zaXRpdmVQcm9wZXJ0aWVzID0gQ29u
dGV4dFNlbnNpdGl2ZVByb3BlcnR5Tm9uZTsKQEAgLTM1Nyw3ICszNTcsNyBAQCB2b2lkIFJlbmRl
clJlZ2lvbjo6Y29tcHV0ZUNoaWxkcmVuU3R5bGVJblJlZ2lvbihjb25zdCBSZW5kZXJPYmplY3Qq
IG9iamVjdCkKICAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBjaGlsZFN0eWxlSW5SZWdpb247
CiAgICAgICAgIGJvb2wgb2JqZWN0UmVnaW9uU3R5bGVDYWNoZWQgPSBmYWxzZTsKICAgICAgICAg
aWYgKGl0ICE9IG1fcmVuZGVyT2JqZWN0UmVnaW9uU3R5bGUuZW5kKCkpIHsKLSAgICAgICAgICAg
IGNoaWxkU3R5bGVJblJlZ2lvbiA9IGl0LT5zZWNvbmQuc3R5bGU7CisgICAgICAgICAgICBjaGls
ZFN0eWxlSW5SZWdpb24gPSBpdC0+dmFsdWUuc3R5bGU7CiAgICAgICAgICAgICBvYmplY3RSZWdp
b25TdHlsZUNhY2hlZCA9IHRydWU7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAo
Y2hpbGQtPmlzQW5vbnltb3VzKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUYWJsZVNlY3Rpb24uY3BwCmluZGV4IDFmMTM3OWUuLjRmY2NjYWYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCkBAIC0xNDU2LDcgKzE0
NTYsNyBAQCBDb2xsYXBzZWRCb3JkZXJWYWx1ZSYgUmVuZGVyVGFibGVTZWN0aW9uOjpjYWNoZWRD
b2xsYXBzZWRCb3JkZXIoY29uc3QgUmVuZGVyVGFibAogICAgIEFTU0VSVCh0YWJsZSgpLT5jb2xs
YXBzZUJvcmRlcnMoKSk7CiAgICAgSGFzaE1hcDxwYWlyPGNvbnN0IFJlbmRlclRhYmxlQ2VsbCos
IGludD4sIENvbGxhcHNlZEJvcmRlclZhbHVlPjo6aXRlcmF0b3IgaXQgPSBtX2NlbGxzQ29sbGFw
c2VkQm9yZGVycy5maW5kKG1ha2VfcGFpcihjZWxsLCBzaWRlKSk7CiAgICAgQVNTRVJUKGl0ICE9
IG1fY2VsbHNDb2xsYXBzZWRCb3JkZXJzLmVuZCgpKTsKLSAgICByZXR1cm4gaXQtPnNlY29uZDsK
KyAgICByZXR1cm4gaXQtPnZhbHVlOwogfQogCiBSZW5kZXJUYWJsZVNlY3Rpb24qIFJlbmRlclRh
YmxlU2VjdGlvbjo6Y3JlYXRlQW5vbnltb3VzV2l0aFBhcmVudFJlbmRlcmVyKGNvbnN0IFJlbmRl
ck9iamVjdCogcGFyZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFj
Lm1tCmluZGV4IDFiOTIwMDYuLjQxYmFmMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWVNYWMubW0KQEAgLTM4MCw3ICszODAsNyBAQCBDb2xvciBSZW5kZXJUaGVtZU1h
Yzo6c3lzdGVtQ29sb3IoaW50IGNzc1ZhbHVlSWQpIGNvbnN0CiAgICAgewogICAgICAgICBIYXNo
TWFwPGludCwgUkdCQTMyPjo6aXRlcmF0b3IgaXQgPSBtX3N5c3RlbUNvbG9yQ2FjaGUuZmluZChj
c3NWYWx1ZUlkKTsKICAgICAgICAgaWYgKGl0ICE9IG1fc3lzdGVtQ29sb3JDYWNoZS5lbmQoKSkK
LSAgICAgICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgICAgICAgICAgcmV0dXJuIGl0LT52
YWx1ZTsKICAgICB9CiAKICAgICBDb2xvciBjb2xvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJWaWV3LmNwcAppbmRleCA4YmQ0OWNjLi5kMzI2NjgzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclZpZXcuY3BwCkBAIC00NDcsNyArNDQ3LDcgQEAgSW50UmVjdCBSZW5kZXJW
aWV3OjpzZWxlY3Rpb25Cb3VuZHMoYm9vbCBjbGlwVG9WaXNpYmxlQ29udGVudCkgY29uc3QKICAg
ICAgICAgICAgIHNlbGVjdGVkT2JqZWN0cy5zZXQob3MsIGFkb3B0UHRyKG5ldyBSZW5kZXJTZWxl
Y3Rpb25JbmZvKG9zLCBjbGlwVG9WaXNpYmxlQ29udGVudCkpKTsKICAgICAgICAgICAgIFJlbmRl
ckJsb2NrKiBjYiA9IG9zLT5jb250YWluaW5nQmxvY2soKTsKICAgICAgICAgICAgIHdoaWxlIChj
YiAmJiAhY2ItPmlzUmVuZGVyVmlldygpKSB7Ci0gICAgICAgICAgICAgICAgT3duUHRyPFJlbmRl
clNlbGVjdGlvbkluZm8+JiBibG9ja0luZm8gPSBzZWxlY3RlZE9iamVjdHMuYWRkKGNiLCBudWxs
cHRyKS5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICAgICAgICAgIE93blB0cjxSZW5kZXJTZWxl
Y3Rpb25JbmZvPiYgYmxvY2tJbmZvID0gc2VsZWN0ZWRPYmplY3RzLmFkZChjYiwgbnVsbHB0ciku
aXRlcmF0b3ItPnZhbHVlOwogICAgICAgICAgICAgICAgIGlmIChibG9ja0luZm8pCiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGJsb2NrSW5mbyA9IGFkb3B0UHRy
KG5ldyBSZW5kZXJTZWxlY3Rpb25JbmZvKGNiLCBjbGlwVG9WaXNpYmxlQ29udGVudCkpOwpAQCAt
NDYyLDcgKzQ2Miw3IEBAIEludFJlY3QgUmVuZGVyVmlldzo6c2VsZWN0aW9uQm91bmRzKGJvb2wg
Y2xpcFRvVmlzaWJsZUNvbnRlbnQpIGNvbnN0CiAgICAgTGF5b3V0UmVjdCBzZWxSZWN0OwogICAg
IFNlbGVjdGlvbk1hcDo6aXRlcmF0b3IgZW5kID0gc2VsZWN0ZWRPYmplY3RzLmVuZCgpOwogICAg
IGZvciAoU2VsZWN0aW9uTWFwOjppdGVyYXRvciBpID0gc2VsZWN0ZWRPYmplY3RzLmJlZ2luKCk7
IGkgIT0gZW5kOyArK2kpIHsKLSAgICAgICAgUmVuZGVyU2VsZWN0aW9uSW5mbyogaW5mbyA9IGkt
PnNlY29uZC5nZXQoKTsKKyAgICAgICAgUmVuZGVyU2VsZWN0aW9uSW5mbyogaW5mbyA9IGktPnZh
bHVlLmdldCgpOwogICAgICAgICAvLyBSZW5kZXJTZWxlY3Rpb25JbmZvOjpyZWN0KCkgaXMgaW4g
dGhlIGNvb3JkaW5hdGVzIG9mIHRoZSByZXBhaW50Q29udGFpbmVyLCBzbyBtYXAgdG8gcGFnZSBj
b29yZGluYXRlcy4KICAgICAgICAgTGF5b3V0UmVjdCBjdXJyUmVjdCA9IGluZm8tPnJlY3QoKTsK
ICAgICAgICAgaWYgKFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyID0gaW5m
by0+cmVwYWludENvbnRhaW5lcigpKSB7CkBAIC01MjcsNyArNTI3LDcgQEAgdm9pZCBSZW5kZXJW
aWV3OjpzZXRTZWxlY3Rpb24oUmVuZGVyT2JqZWN0KiBzdGFydCwgaW50IHN0YXJ0UG9zLCBSZW5k
ZXJPYmplY3QqIGUKICAgICAgICAgICAgIGlmIChibG9ja1JlcGFpbnRNb2RlID09IFJlcGFpbnRO
ZXdYT1JPbGQpIHsKICAgICAgICAgICAgICAgICBSZW5kZXJCbG9jayogY2IgPSBvcy0+Y29udGFp
bmluZ0Jsb2NrKCk7CiAgICAgICAgICAgICAgICAgd2hpbGUgKGNiICYmICFjYi0+aXNSZW5kZXJW
aWV3KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgT3duUHRyPFJlbmRlckJsb2NrU2VsZWN0aW9u
SW5mbz4mIGJsb2NrSW5mbyA9IG9sZFNlbGVjdGVkQmxvY2tzLmFkZChjYiwgbnVsbHB0cikuaXRl
cmF0b3ItPnNlY29uZDsKKyAgICAgICAgICAgICAgICAgICAgT3duUHRyPFJlbmRlckJsb2NrU2Vs
ZWN0aW9uSW5mbz4mIGJsb2NrSW5mbyA9IG9sZFNlbGVjdGVkQmxvY2tzLmFkZChjYiwgbnVsbHB0
cikuaXRlcmF0b3ItPnZhbHVlOwogICAgICAgICAgICAgICAgICAgICBpZiAoYmxvY2tJbmZvKQog
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGJsb2Nr
SW5mbyA9IGFkb3B0UHRyKG5ldyBSZW5kZXJCbG9ja1NlbGVjdGlvbkluZm8oY2IpKTsKQEAgLTU0
Miw3ICs1NDIsNyBAQCB2b2lkIFJlbmRlclZpZXc6OnNldFNlbGVjdGlvbihSZW5kZXJPYmplY3Qq
IHN0YXJ0LCBpbnQgc3RhcnRQb3MsIFJlbmRlck9iamVjdCogZQogICAgIC8vIE5vdyBjbGVhciB0
aGUgc2VsZWN0aW9uLgogICAgIFNlbGVjdGVkT2JqZWN0TWFwOjppdGVyYXRvciBvbGRPYmplY3Rz
RW5kID0gb2xkU2VsZWN0ZWRPYmplY3RzLmVuZCgpOwogICAgIGZvciAoU2VsZWN0ZWRPYmplY3RN
YXA6Oml0ZXJhdG9yIGkgPSBvbGRTZWxlY3RlZE9iamVjdHMuYmVnaW4oKTsgaSAhPSBvbGRPYmpl
Y3RzRW5kOyArK2kpCi0gICAgICAgIGktPmZpcnN0LT5zZXRTZWxlY3Rpb25TdGF0ZUlmTmVlZGVk
KFNlbGVjdGlvbk5vbmUpOworICAgICAgICBpLT5rZXktPnNldFNlbGVjdGlvblN0YXRlSWZOZWVk
ZWQoU2VsZWN0aW9uTm9uZSk7CiAKICAgICAvLyBzZXQgc2VsZWN0aW9uIHN0YXJ0IGFuZCBlbmQK
ICAgICBtX3NlbGVjdGlvblN0YXJ0ID0gc3RhcnQ7CkBAIC01ODAsNyArNTgwLDcgQEAgdm9pZCBS
ZW5kZXJWaWV3OjpzZXRTZWxlY3Rpb24oUmVuZGVyT2JqZWN0KiBzdGFydCwgaW50IHN0YXJ0UG9z
LCBSZW5kZXJPYmplY3QqIGUKICAgICAgICAgICAgIG5ld1NlbGVjdGVkT2JqZWN0cy5zZXQobywg
YWRvcHRQdHIobmV3IFJlbmRlclNlbGVjdGlvbkluZm8obywgdHJ1ZSkpKTsKICAgICAgICAgICAg
IFJlbmRlckJsb2NrKiBjYiA9IG8tPmNvbnRhaW5pbmdCbG9jaygpOwogICAgICAgICAgICAgd2hp
bGUgKGNiICYmICFjYi0+aXNSZW5kZXJWaWV3KCkpIHsKLSAgICAgICAgICAgICAgICBPd25QdHI8
UmVuZGVyQmxvY2tTZWxlY3Rpb25JbmZvPiYgYmxvY2tJbmZvID0gbmV3U2VsZWN0ZWRCbG9ja3Mu
YWRkKGNiLCBudWxscHRyKS5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICAgICAgICAgIE93blB0
cjxSZW5kZXJCbG9ja1NlbGVjdGlvbkluZm8+JiBibG9ja0luZm8gPSBuZXdTZWxlY3RlZEJsb2Nr
cy5hZGQoY2IsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgICAgICAgICBpZiAo
YmxvY2tJbmZvKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBi
bG9ja0luZm8gPSBhZG9wdFB0cihuZXcgUmVuZGVyQmxvY2tTZWxlY3Rpb25JbmZvKGNiKSk7CkBA
IC01OTgsOSArNTk4LDkgQEAgdm9pZCBSZW5kZXJWaWV3OjpzZXRTZWxlY3Rpb24oUmVuZGVyT2Jq
ZWN0KiBzdGFydCwgaW50IHN0YXJ0UG9zLCBSZW5kZXJPYmplY3QqIGUKIAogICAgIC8vIEhhdmUg
YW55IG9mIHRoZSBvbGQgc2VsZWN0ZWQgb2JqZWN0cyBjaGFuZ2VkIGNvbXBhcmVkIHRvIHRoZSBu
ZXcgc2VsZWN0aW9uPwogICAgIGZvciAoU2VsZWN0ZWRPYmplY3RNYXA6Oml0ZXJhdG9yIGkgPSBv
bGRTZWxlY3RlZE9iamVjdHMuYmVnaW4oKTsgaSAhPSBvbGRPYmplY3RzRW5kOyArK2kpIHsKLSAg
ICAgICAgUmVuZGVyT2JqZWN0KiBvYmogPSBpLT5maXJzdDsKKyAgICAgICAgUmVuZGVyT2JqZWN0
KiBvYmogPSBpLT5rZXk7CiAgICAgICAgIFJlbmRlclNlbGVjdGlvbkluZm8qIG5ld0luZm8gPSBu
ZXdTZWxlY3RlZE9iamVjdHMuZ2V0KG9iaik7Ci0gICAgICAgIFJlbmRlclNlbGVjdGlvbkluZm8q
IG9sZEluZm8gPSBpLT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIFJlbmRlclNlbGVjdGlvbkluZm8q
IG9sZEluZm8gPSBpLT52YWx1ZS5nZXQoKTsKICAgICAgICAgaWYgKCFuZXdJbmZvIHx8IG9sZElu
Zm8tPnJlY3QoKSAhPSBuZXdJbmZvLT5yZWN0KCkgfHwgb2xkSW5mby0+c3RhdGUoKSAhPSBuZXdJ
bmZvLT5zdGF0ZSgpIHx8CiAgICAgICAgICAgICAobV9zZWxlY3Rpb25TdGFydCA9PSBvYmogJiYg
b2xkU3RhcnRQb3MgIT0gbV9zZWxlY3Rpb25TdGFydFBvcykgfHwKICAgICAgICAgICAgIChtX3Nl
bGVjdGlvbkVuZCA9PSBvYmogJiYgb2xkRW5kUG9zICE9IG1fc2VsZWN0aW9uRW5kUG9zKSkgewpA
QCAtNjE1LDE0ICs2MTUsMTQgQEAgdm9pZCBSZW5kZXJWaWV3OjpzZXRTZWxlY3Rpb24oUmVuZGVy
T2JqZWN0KiBzdGFydCwgaW50IHN0YXJ0UG9zLCBSZW5kZXJPYmplY3QqIGUKICAgICAvLyBBbnkg
bmV3IG9iamVjdHMgdGhhdCByZW1haW4gd2VyZSBub3QgZm91bmQgaW4gdGhlIG9sZCBvYmplY3Rz
IGRpY3QsIGFuZCBzbyB0aGV5IG5lZWQgdG8gYmUgdXBkYXRlZC4KICAgICBTZWxlY3RlZE9iamVj
dE1hcDo6aXRlcmF0b3IgbmV3T2JqZWN0c0VuZCA9IG5ld1NlbGVjdGVkT2JqZWN0cy5lbmQoKTsK
ICAgICBmb3IgKFNlbGVjdGVkT2JqZWN0TWFwOjppdGVyYXRvciBpID0gbmV3U2VsZWN0ZWRPYmpl
Y3RzLmJlZ2luKCk7IGkgIT0gbmV3T2JqZWN0c0VuZDsgKytpKQotICAgICAgICBpLT5zZWNvbmQt
PnJlcGFpbnQoKTsKKyAgICAgICAgaS0+dmFsdWUtPnJlcGFpbnQoKTsKIAogICAgIC8vIEhhdmUg
YW55IG9mIHRoZSBvbGQgYmxvY2tzIGNoYW5nZWQ/CiAgICAgU2VsZWN0ZWRCbG9ja01hcDo6aXRl
cmF0b3Igb2xkQmxvY2tzRW5kID0gb2xkU2VsZWN0ZWRCbG9ja3MuZW5kKCk7CiAgICAgZm9yIChT
ZWxlY3RlZEJsb2NrTWFwOjppdGVyYXRvciBpID0gb2xkU2VsZWN0ZWRCbG9ja3MuYmVnaW4oKTsg
aSAhPSBvbGRCbG9ja3NFbmQ7ICsraSkgewotICAgICAgICBSZW5kZXJCbG9jayogYmxvY2sgPSBp
LT5maXJzdDsKKyAgICAgICAgUmVuZGVyQmxvY2sqIGJsb2NrID0gaS0+a2V5OwogICAgICAgICBS
ZW5kZXJCbG9ja1NlbGVjdGlvbkluZm8qIG5ld0luZm8gPSBuZXdTZWxlY3RlZEJsb2Nrcy5nZXQo
YmxvY2spOwotICAgICAgICBSZW5kZXJCbG9ja1NlbGVjdGlvbkluZm8qIG9sZEluZm8gPSBpLT5z
ZWNvbmQuZ2V0KCk7CisgICAgICAgIFJlbmRlckJsb2NrU2VsZWN0aW9uSW5mbyogb2xkSW5mbyA9
IGktPnZhbHVlLmdldCgpOwogICAgICAgICBpZiAoIW5ld0luZm8gfHwgb2xkSW5mby0+cmVjdHMo
KSAhPSBuZXdJbmZvLT5yZWN0cygpIHx8IG9sZEluZm8tPnN0YXRlKCkgIT0gbmV3SW5mby0+c3Rh
dGUoKSkgewogICAgICAgICAgICAgb2xkSW5mby0+cmVwYWludCgpOwogICAgICAgICAgICAgaWYg
KG5ld0luZm8pIHsKQEAgLTYzNSw3ICs2MzUsNyBAQCB2b2lkIFJlbmRlclZpZXc6OnNldFNlbGVj
dGlvbihSZW5kZXJPYmplY3QqIHN0YXJ0LCBpbnQgc3RhcnRQb3MsIFJlbmRlck9iamVjdCogZQog
ICAgIC8vIEFueSBuZXcgYmxvY2tzIHRoYXQgcmVtYWluIHdlcmUgbm90IGZvdW5kIGluIHRoZSBv
bGQgYmxvY2tzIGRpY3QsIGFuZCBzbyB0aGV5IG5lZWQgdG8gYmUgdXBkYXRlZC4KICAgICBTZWxl
Y3RlZEJsb2NrTWFwOjppdGVyYXRvciBuZXdCbG9ja3NFbmQgPSBuZXdTZWxlY3RlZEJsb2Nrcy5l
bmQoKTsKICAgICBmb3IgKFNlbGVjdGVkQmxvY2tNYXA6Oml0ZXJhdG9yIGkgPSBuZXdTZWxlY3Rl
ZEJsb2Nrcy5iZWdpbigpOyBpICE9IG5ld0Jsb2Nrc0VuZDsgKytpKQotICAgICAgICBpLT5zZWNv
bmQtPnJlcGFpbnQoKTsKKyAgICAgICAgaS0+dmFsdWUtPnJlcGFpbnQoKTsKIAogICAgIG1fZnJh
bWVWaWV3LT5lbmREZWZlcnJlZFJlcGFpbnRzKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJXaWRnZXQuY3BwCmluZGV4IDNhMzAyNjAuLjJiOTVlOTMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCkBAIC03MCw5ICs3MCw5IEBAIHZvaWQgUmVu
ZGVyV2lkZ2V0OjpyZXN1bWVXaWRnZXRIaWVyYXJjaHlVcGRhdGVzKCkKICAgICAgICAgd2lkZ2V0
TmV3UGFyZW50TWFwKCkuY2xlYXIoKTsKICAgICAgICAgV2lkZ2V0VG9QYXJlbnRNYXA6Oml0ZXJh
dG9yIGVuZCA9IG1hcC5lbmQoKTsKICAgICAgICAgZm9yIChXaWRnZXRUb1BhcmVudE1hcDo6aXRl
cmF0b3IgaXQgPSBtYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBX
aWRnZXQqIGNoaWxkID0gaXQtPmZpcnN0LmdldCgpOworICAgICAgICAgICAgV2lkZ2V0KiBjaGls
ZCA9IGl0LT5rZXkuZ2V0KCk7CiAgICAgICAgICAgICBTY3JvbGxWaWV3KiBjdXJyZW50UGFyZW50
ID0gY2hpbGQtPnBhcmVudCgpOwotICAgICAgICAgICAgRnJhbWVWaWV3KiBuZXdQYXJlbnQgPSBp
dC0+c2Vjb25kOworICAgICAgICAgICAgRnJhbWVWaWV3KiBuZXdQYXJlbnQgPSBpdC0+dmFsdWU7
CiAgICAgICAgICAgICBpZiAobmV3UGFyZW50ICE9IGN1cnJlbnRQYXJlbnQpIHsKICAgICAgICAg
ICAgICAgICBpZiAoY3VycmVudFBhcmVudCkKICAgICAgICAgICAgICAgICAgICAgY3VycmVudFBh
cmVudC0+cmVtb3ZlQ2hpbGQoY2hpbGQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJ
bmxpbmVCb3guY3BwCmluZGV4IDQzMTNmYTcuLjJjMTgyZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAKQEAgLTc1NSw4ICs3NTUsOCBAQCB2b2lkIFJvb3RJ
bmxpbmVCb3g6OmFzY2VudEFuZERlc2NlbnRGb3JCb3goSW5saW5lQm94KiBib3gsIEdseXBoT3Zl
cmZsb3dBbmRGYWxsYgogICAgIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cgPSAwOwogICAg
IGlmIChib3gtPmlzVGV4dCgpKSB7CiAgICAgICAgIEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0Zv
bnRzTWFwOjppdGVyYXRvciBpdCA9IHRleHRCb3hEYXRhTWFwLmZpbmQodG9JbmxpbmVUZXh0Qm94
KGJveCkpOwotICAgICAgICB1c2VkRm9udHMgPSBpdCA9PSB0ZXh0Qm94RGF0YU1hcC5lbmQoKSA/
IDAgOiAmaXQtPnNlY29uZC5maXJzdDsKLSAgICAgICAgZ2x5cGhPdmVyZmxvdyA9IGl0ID09IHRl
eHRCb3hEYXRhTWFwLmVuZCgpID8gMCA6ICZpdC0+c2Vjb25kLnNlY29uZDsKKyAgICAgICAgdXNl
ZEZvbnRzID0gaXQgPT0gdGV4dEJveERhdGFNYXAuZW5kKCkgPyAwIDogJml0LT52YWx1ZS5maXJz
dDsKKyAgICAgICAgZ2x5cGhPdmVyZmxvdyA9IGl0ID09IHRleHRCb3hEYXRhTWFwLmVuZCgpID8g
MCA6ICZpdC0+dmFsdWUuc2Vjb25kOwogICAgIH0KICAgICAgICAgCiAgICAgYm9vbCBpbmNsdWRl
TGVhZGluZyA9IGluY2x1ZGVMZWFkaW5nRm9yQm94KGJveCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvVmVydGljYWxQb3NpdGlvbkNhY2hlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvVmVydGljYWxQb3NpdGlvbkNhY2hlLmgKaW5kZXggYmIzOTg3Ny4uYjdjZDdl
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1ZlcnRpY2FsUG9zaXRpb25D
YWNoZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9WZXJ0aWNhbFBvc2l0aW9uQ2Fj
aGUuaApAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNvbnN0IEhhc2hNYXA8UmVu
ZGVyT2JqZWN0KiwgaW50Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXBUb0NoZWNrLmZpbmQocmVu
ZGVyZXIpOwogICAgICAgICBpZiAoaXQgPT0gbWFwVG9DaGVjay5lbmQoKSkKICAgICAgICAgICAg
IHJldHVybiBQb3NpdGlvblVuZGVmaW5lZDsKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7Cisg
ICAgICAgIHJldHVybiBpdC0+dmFsdWU7CiAgICAgfQogICAgIAogICAgIHZvaWQgc2V0KFJlbmRl
ck9iamVjdCogcmVuZGVyZXIsIEZvbnRCYXNlbGluZSBiYXNlbGluZVR5cGUsIGludCBwb3NpdGlv
bikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5s
aW5lVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGlu
ZVRleHQuY3BwCmluZGV4IDQ1NGY3YWE2Li4yMzcxZDFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAKQEAgLTE1OCw3ICsx
NTgsNyBAQCBib29sIFJlbmRlclNWR0lubGluZVRleHQ6OmNoYXJhY3RlclN0YXJ0c05ld1RleHRD
aHVuayhpbnQgcG9zaXRpb24pIGNvbnN0CiAgICAgaWYgKGl0ID09IG1fbGF5b3V0QXR0cmlidXRl
cy5jaGFyYWN0ZXJEYXRhTWFwKCkuZW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IHJldHVybiBpdC0+c2Vjb25kLnggIT0gU1ZHVGV4dExheW91dEF0dHJpYnV0ZXM6OmVtcHR5VmFs
dWUoKSB8fCBpdC0+c2Vjb25kLnkgIT0gU1ZHVGV4dExheW91dEF0dHJpYnV0ZXM6OmVtcHR5VmFs
dWUoKTsKKyAgICByZXR1cm4gaXQtPnZhbHVlLnggIT0gU1ZHVGV4dExheW91dEF0dHJpYnV0ZXM6
OmVtcHR5VmFsdWUoKSB8fCBpdC0+dmFsdWUueSAhPSBTVkdUZXh0TGF5b3V0QXR0cmlidXRlczo6
ZW1wdHlWYWx1ZSgpOwogfQogCiBWaXNpYmxlUG9zaXRpb24gUmVuZGVyU1ZHSW5saW5lVGV4dDo6
cG9zaXRpb25Gb3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3Bw
CmluZGV4IDBmOTE2MTAuLjlmZjk0NjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCkBAIC0zNDAsNyArMzQw
LDcgQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cHJpbWl0aXZlQXR0cmlidXRlQ2hh
bmdlZChSZW5kZXJPYmplY3QqIG9iamVjdCwgY28KICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFu
ZGFyZEF0dHJpYnV0ZXMqIHByaW1pdHZlID0gc3RhdGljX2Nhc3Q8U1ZHRmlsdGVyUHJpbWl0aXZl
U3RhbmRhcmRBdHRyaWJ1dGVzKj4ob2JqZWN0LT5ub2RlKCkpOwogCiAgICAgZm9yICg7IGl0ICE9
IGVuZDsgKytpdCkgewotICAgICAgICBGaWx0ZXJEYXRhKiBmaWx0ZXJEYXRhID0gaXQtPnNlY29u
ZDsKKyAgICAgICAgRmlsdGVyRGF0YSogZmlsdGVyRGF0YSA9IGl0LT52YWx1ZTsKICAgICAgICAg
aWYgKCFmaWx0ZXJEYXRhLT5idWlsZGVkKQogICAgICAgICAgICAgY29udGludWU7CiAKQEAgLTM1
NSw3ICszNTUsNyBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwcmltaXRpdmVBdHRy
aWJ1dGVDaGFuZ2VkKFJlbmRlck9iamVjdCogb2JqZWN0LCBjbwogICAgICAgICBidWlsZGVyLT5j
bGVhclJlc3VsdHNSZWN1cnNpdmUoZWZmZWN0KTsKIAogICAgICAgICAvLyBSZXBhaW50IHRoZSBp
bWFnZSBvbiB0aGUgc2NyZWVuLgotICAgICAgICBtYXJrQ2xpZW50Rm9ySW52YWxpZGF0aW9uKGl0
LT5maXJzdCwgUmVwYWludEludmFsaWRhdGlvbik7CisgICAgICAgIG1hcmtDbGllbnRGb3JJbnZh
bGlkYXRpb24oaXQtPmtleSwgUmVwYWludEludmFsaWRhdGlvbik7CiAgICAgfQogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3Jh
ZGllbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZUdyYWRpZW50LmNwcAppbmRleCA1OGUwMDc5Li4zMGNlMWI4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5j
cHAKQEAgLTE0MCw3ICsxNDAsNyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQ6OmFw
cGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiBvYmplY3QsIFJlbmRlclN0eWxlKgogICAgIGlmIChn
cmFkaWVudFVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5E
SU5HQk9YICYmIG9iamVjdEJvdW5kaW5nQm94LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgT3duUHRyPEdyYWRpZW50RGF0YT4mIGdyYWRpZW50RGF0YSA9IG1fZ3JhZGll
bnRNYXAuYWRkKG9iamVjdCwgbnVsbHB0cikuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBPd25QdHI8
R3JhZGllbnREYXRhPiYgZ3JhZGllbnREYXRhID0gbV9ncmFkaWVudE1hcC5hZGQob2JqZWN0LCBu
dWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCFncmFkaWVudERhdGEpCiAgICAgICAg
IGdyYWRpZW50RGF0YSA9IGFkb3B0UHRyKG5ldyBHcmFkaWVudERhdGEpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVy
bi5jcHAKaW5kZXggYjRhZjk5OS4uM2ExODgyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcApAQCAtODQs
NyArODQsNyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlUGF0dGVybjo6YXBwbHlSZXNvdXJjZShS
ZW5kZXJPYmplY3QqIG9iamVjdCwgUmVuZGVyU3R5bGUqCiAgICAgaWYgKG1fYXR0cmlidXRlcy5w
YXR0ZXJuVW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJ
TkdCT1ggJiYgb2JqZWN0Qm91bmRpbmdCb3guaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBPd25QdHI8UGF0dGVybkRhdGE+JiBwYXR0ZXJuRGF0YSA9IG1fcGF0dGVybk1h
cC5hZGQob2JqZWN0LCBudWxscHRyKS5pdGVyYXRvci0+c2Vjb25kOworICAgIE93blB0cjxQYXR0
ZXJuRGF0YT4mIHBhdHRlcm5EYXRhID0gbV9wYXR0ZXJuTWFwLmFkZChvYmplY3QsIG51bGxwdHIp
Lml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoIXBhdHRlcm5EYXRhKQogICAgICAgICBwYXR0ZXJu
RGF0YSA9IGFkb3B0UHRyKG5ldyBQYXR0ZXJuRGF0YSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzQ2FjaGUuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXNDYWNoZS5jcHAKaW5kZXggMjk3YzA3Yi4uOGI0
OGNmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJj
ZXNDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJj
ZXNDYWNoZS5jcHAKQEAgLTE5OCwxMSArMTk4LDExIEBAIHZvaWQgU1ZHUmVzb3VyY2VzQ2FjaGU6
OnJlc291cmNlRGVzdHJveWVkKFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKiByZXNvdXJjZSkK
IAogICAgIEhhc2hNYXA8Y29uc3QgUmVuZGVyT2JqZWN0KiwgU1ZHUmVzb3VyY2VzKj46Oml0ZXJh
dG9yIGVuZCA9IGNhY2hlLT5tX2NhY2hlLmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDxjb25zdCBS
ZW5kZXJPYmplY3QqLCBTVkdSZXNvdXJjZXMqPjo6aXRlcmF0b3IgaXQgPSBjYWNoZS0+bV9jYWNo
ZS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaXQtPnNlY29uZC0+cmVzb3Vy
Y2VEZXN0cm95ZWQocmVzb3VyY2UpOworICAgICAgICBpdC0+dmFsdWUtPnJlc291cmNlRGVzdHJv
eWVkKHJlc291cmNlKTsKIAogICAgICAgICAvLyBNYXJrIHVzZXJzIG9mIGRlc3Ryb3llZCByZXNv
dXJjZXMgYXMgcGVuZGluZyByZXNvbHV0aW9uIGJhc2VkIG9uIHRoZSBpZCBvZiB0aGUgb2xkIHJl
c291cmNlLgogICAgICAgICBFbGVtZW50KiByZXNvdXJjZUVsZW1lbnQgPSB0b0VsZW1lbnQocmVz
b3VyY2UtPm5vZGUoKSk7Ci0gICAgICAgIFNWR1N0eWxlZEVsZW1lbnQqIGNsaWVudEVsZW1lbnQg
PSB0b1NWR1N0eWxlZEVsZW1lbnQoaXQtPmZpcnN0LT5ub2RlKCkpOworICAgICAgICBTVkdTdHls
ZWRFbGVtZW50KiBjbGllbnRFbGVtZW50ID0gdG9TVkdTdHlsZWRFbGVtZW50KGl0LT5rZXktPm5v
ZGUoKSk7CiAgICAgICAgIFNWR0RvY3VtZW50RXh0ZW5zaW9ucyogZXh0ZW5zaW9ucyA9IGNsaWVu
dEVsZW1lbnQtPmRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKTsKIAogICAgICAgICBl
eHRlbnNpb25zLT5hZGRQZW5kaW5nUmVzb3VyY2UocmVzb3VyY2VFbGVtZW50LT5mYXN0R2V0QXR0
cmlidXRlKEhUTUxOYW1lczo6aWRBdHRyKSwgY2xpZW50RWxlbWVudCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jvb3RJbmxpbmVCb3guY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSb290SW5saW5lQm94LmNwcAppbmRleCAzNGU5M2Ew
Li41NDZmZWMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jv
b3RJbmxpbmVCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUm9v
dElubGluZUJveC5jcHAKQEAgLTIyNiwxNyArMjI2LDE3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBz
d2FwSXRlbXNJbkxheW91dEF0dHJpYnV0ZXMoU1ZHVGV4dExheW91dEF0dHJpYnV0ZXMqIGZpcnN0
QXR0CiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChmaXJzdFByZXNlbnQgJiYgbGFzdFByZXNl
bnQpIHsKLSAgICAgICAgc3RkOjpzd2FwKGl0Rmlyc3QtPnNlY29uZCwgaXRMYXN0LT5zZWNvbmQp
OworICAgICAgICBzdGQ6OnN3YXAoaXRGaXJzdC0+dmFsdWUsIGl0TGFzdC0+dmFsdWUpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKGZpcnN0UHJlc2VudCAmJiAhbGFzdFByZXNl
bnQpIHsKLSAgICAgICAgbGFzdEF0dHJpYnV0ZXMtPmNoYXJhY3RlckRhdGFNYXAoKS5zZXQobGFz
dFBvc2l0aW9uICsgMSwgaXRGaXJzdC0+c2Vjb25kKTsKKyAgICAgICAgbGFzdEF0dHJpYnV0ZXMt
PmNoYXJhY3RlckRhdGFNYXAoKS5zZXQobGFzdFBvc2l0aW9uICsgMSwgaXRGaXJzdC0+dmFsdWUp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgLy8gIWZpcnN0UHJlc2VudCAmJiBsYXN0
UHJlc2VudAotICAgIGZpcnN0QXR0cmlidXRlcy0+Y2hhcmFjdGVyRGF0YU1hcCgpLnNldChmaXJz
dFBvc2l0aW9uICsgMSwgaXRMYXN0LT5zZWNvbmQpOworICAgIGZpcnN0QXR0cmlidXRlcy0+Y2hh
cmFjdGVyRGF0YU1hcCgpLnNldChmaXJzdFBvc2l0aW9uICsgMSwgaXRMYXN0LT52YWx1ZSk7CiB9
CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBmaW5kRmlyc3RBbmRMYXN0QXR0cmlidXRlc0luVmVjdG9y
KFZlY3RvcjxTVkdUZXh0TGF5b3V0QXR0cmlidXRlcyo+JiBhdHRyaWJ1dGVzLCBSZW5kZXJTVkdJ
bmxpbmVUZXh0KiBmaXJzdENvbnRleHQsIFJlbmRlclNWR0lubGluZVRleHQqIGxhc3RDb250ZXh0
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0
QXR0cmlidXRlcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlv
dXRBdHRyaWJ1dGVzLmNwcAppbmRleCBhOTI1OTZjLi42N2ZhMGZhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1dGVzLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1dGVzLmNw
cApAQCAtNjIsOCArNjIsOCBAQCB2b2lkIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzOjpkdW1wKCkg
Y29uc3QKICAgICBmcHJpbnRmKHN0ZGVyciwgImNvbnRleHQ6ICVwXG4iLCBtX2NvbnRleHQpOwog
ICAgIGNvbnN0IFNWR0NoYXJhY3RlckRhdGFNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fY2hh
cmFjdGVyRGF0YU1hcC5lbmQoKTsKICAgICBmb3IgKFNWR0NoYXJhY3RlckRhdGFNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbV9jaGFyYWN0ZXJEYXRhTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgewotICAgICAgICBjb25zdCBTVkdDaGFyYWN0ZXJEYXRhJiBkYXRhID0gaXQtPnNlY29uZDsK
LSAgICAgICAgZnByaW50ZihzdGRlcnIsICIgLS0tPiBwb3M9JWksIGRhdGE9eyIsIGl0LT5maXJz
dCk7CisgICAgICAgIGNvbnN0IFNWR0NoYXJhY3RlckRhdGEmIGRhdGEgPSBpdC0+dmFsdWU7Cisg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiIC0tLT4gcG9zPSVpLCBkYXRhPXsiLCBpdC0+a2V5KTsK
ICAgICAgICAgZHVtcFNWR0NoYXJhY3RlckRhdGFNYXBWYWx1ZSgieCIsIGRhdGEueCk7CiAgICAg
ICAgIGR1bXBTVkdDaGFyYWN0ZXJEYXRhTWFwVmFsdWUoInkiLCBkYXRhLnkpOwogICAgICAgICBk
dW1wU1ZHQ2hhcmFjdGVyRGF0YU1hcFZhbHVlKCJkeCIsIGRhdGEuZHgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxk
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmli
dXRlc0J1aWxkZXIuY3BwCmluZGV4IGJlMmExMmYuLmI5NjlhNTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1
dGVzQnVpbGRlci5jcHAKQEAgLTE0OSw3ICsxNDksNyBAQCB2b2lkIFNWR1RleHRMYXlvdXRBdHRy
aWJ1dGVzQnVpbGRlcjo6YnVpbGRDaGFyYWN0ZXJEYXRhTWFwKFJlbmRlclNWR1RleHQqIHRleHRS
bwogICAgICAgICBkYXRhLnkgPSAwOwogICAgICAgICBtX2NoYXJhY3RlckRhdGFNYXAuc2V0KDEs
IGRhdGEpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIFNWR0NoYXJhY3RlckRhdGEmIGRhdGEgPSBp
dC0+c2Vjb25kOworICAgICAgICBTVkdDaGFyYWN0ZXJEYXRhJiBkYXRhID0gaXQtPnZhbHVlOwog
ICAgICAgICBpZiAoZGF0YS54ID09IFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzOjplbXB0eVZhbHVl
KCkpCiAgICAgICAgICAgICBkYXRhLnggPSAwOwogICAgICAgICBpZiAoZGF0YS55ID09IFNWR1Rl
eHRMYXlvdXRBdHRyaWJ1dGVzOjplbXB0eVZhbHVlKCkpCkBAIC0yMTMsNyArMjEzLDcgQEAgdm9p
ZCBTVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXI6OmZpbGxDaGFyYWN0ZXJEYXRhTWFwKGNv
bnN0IFRleHRQb3NpdGlvbiYgcG8KICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAK
LSAgICAgICAgdXBkYXRlQ2hhcmFjdGVyRGF0YShpLCBsYXN0Um90YXRpb24sIGl0LT5zZWNvbmQs
IGxlbmd0aENvbnRleHQsIHhMaXN0UHRyLCB5TGlzdFB0ciwgZHhMaXN0UHRyLCBkeUxpc3RQdHIs
IHJvdGF0ZUxpc3RQdHIpOworICAgICAgICB1cGRhdGVDaGFyYWN0ZXJEYXRhKGksIGxhc3RSb3Rh
dGlvbiwgaXQtPnZhbHVlLCBsZW5ndGhDb250ZXh0LCB4TGlzdFB0ciwgeUxpc3RQdHIsIGR4TGlz
dFB0ciwgZHlMaXN0UHRyLCByb3RhdGVMaXN0UHRyKTsKICAgICB9CiAKICAgICAvLyBUaGUgbGFz
dCByb3RhdGlvbiB2YWx1ZSBhbHdheXMgc3BhbnMgdGhlIHdob2xlIHNjb3BlLgpAQCAtMjI5LDcg
KzIyOSw3IEBAIHZvaWQgU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyOjpmaWxsQ2hhcmFj
dGVyRGF0YU1hcChjb25zdCBUZXh0UG9zaXRpb24mIHBvCiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgfQogCi0gICAgICAgIGl0LT5zZWNvbmQucm90YXRlID0gbGFzdFJvdGF0aW9uOwor
ICAgICAgICBpdC0+dmFsdWUucm90YXRlID0gbGFzdFJvdGF0aW9uOwogICAgIH0KIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5l
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZS5j
cHAKaW5kZXggNWM1NDliMi4uYmEyYjc2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmUuY3BwCkBAIC00NzUsNyArNDc1LDcgQEAg
dm9pZCBTVkdUZXh0TGF5b3V0RW5naW5lOjpsYXlvdXRUZXh0T25MaW5lT3JQYXRoKFNWR0lubGlu
ZVRleHRCb3gqIHRleHRCb3gsIFJlbmQKICAgICAgICAgU1ZHQ2hhcmFjdGVyRGF0YSBkYXRhOwog
ICAgICAgICBTVkdDaGFyYWN0ZXJEYXRhTWFwOjppdGVyYXRvciBpdCA9IGNoYXJhY3RlckRhdGFN
YXAuZmluZChtX2xvZ2ljYWxDaGFyYWN0ZXJPZmZzZXQgKyAxKTsKICAgICAgICAgaWYgKGl0ICE9
IGNoYXJhY3RlckRhdGFNYXAuZW5kKCkpCi0gICAgICAgICAgICBkYXRhID0gaXQtPnNlY29uZDsK
KyAgICAgICAgICAgIGRhdGEgPSBpdC0+dmFsdWU7CiAKICAgICAgICAgZmxvYXQgeCA9IGRhdGEu
eDsKICAgICAgICAgZmxvYXQgeSA9IGRhdGEueTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3NCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3NCdWlsZGVyLmNwcAppbmRleCA2ODVlNTE1Li4w
YTJkZjViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRN
ZXRyaWNzQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdU
ZXh0TWV0cmljc0J1aWxkZXIuY3BwCkBAIC0xNzEsNyArMTcxLDcgQEAgdm9pZCBTVkdUZXh0TWV0
cmljc0J1aWxkZXI6Om1lYXN1cmVUZXh0UmVuZGVyZXIoUmVuZGVyU1ZHSW5saW5lVGV4dCogdGV4
dCwgTWVhc3UKICAgICAgICAgICAgIGlmIChkYXRhLT5hbGxDaGFyYWN0ZXJzTWFwKSB7CiAgICAg
ICAgICAgICAgICAgY29uc3QgU1ZHQ2hhcmFjdGVyRGF0YU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBkYXRhLT5hbGxDaGFyYWN0ZXJzTWFwLT5maW5kKGRhdGEtPnZhbHVlTGlzdFBvc2l0aW9uICsg
bV90ZXh0UG9zaXRpb24gLSBkYXRhLT5za2lwcGVkQ2hhcmFjdGVycyAtIHN1cnJvZ2F0ZVBhaXJD
aGFyYWN0ZXJzICsgMSk7CiAgICAgICAgICAgICAgICAgaWYgKGl0ICE9IGRhdGEtPmFsbENoYXJh
Y3RlcnNNYXAtPmVuZCgpKQotICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLT5jaGFyYWN0
ZXJEYXRhTWFwKCkuc2V0KG1fdGV4dFBvc2l0aW9uICsgMSwgaXQtPnNlY29uZCk7CisgICAgICAg
ICAgICAgICAgICAgIGF0dHJpYnV0ZXMtPmNoYXJhY3RlckRhdGFNYXAoKS5zZXQobV90ZXh0UG9z
aXRpb24gKyAxLCBpdC0+dmFsdWUpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgdGV4dE1l
dHJpY3NWYWx1ZXMtPmFwcGVuZChtX2N1cnJlbnRNZXRyaWNzKTsKICAgICAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwIGIvU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCmluZGV4IDQ0MjA5YzYuLmZjYjEy
NmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5jcHAKQEAgLTE4
OCw3ICsxODgsNyBAQCB2b2lkIFN0b3JhZ2VBcmVhU3luYzo6c3luY1RpbWVyRmlyZWQoVGltZXI8
U3RvcmFnZUFyZWFTeW5jPiopCiAgICAgICAgICAgICAgICAgcGFydGlhbFN5bmMgPSB0cnVlOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9pdGVt
c1BlbmRpbmdTeW5jLnNldChjaGFuZ2VkX2l0LT5maXJzdC5pc29sYXRlZENvcHkoKSwgY2hhbmdl
ZF9pdC0+c2Vjb25kLmlzb2xhdGVkQ29weSgpKTsKKyAgICAgICAgICAgIG1faXRlbXNQZW5kaW5n
U3luYy5zZXQoY2hhbmdlZF9pdC0+a2V5Lmlzb2xhdGVkQ29weSgpLCBjaGFuZ2VkX2l0LT52YWx1
ZS5pc29sYXRlZENvcHkoKSk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAocGFydGlhbFN5bmMp
IHsKQEAgLTE5OCw3ICsxOTgsNyBAQCB2b2lkIFN0b3JhZ2VBcmVhU3luYzo6c3luY1RpbWVyRmly
ZWQoVGltZXI8U3RvcmFnZUFyZWFTeW5jPiopCiAgICAgICAgICAgICBIYXNoTWFwPFN0cmluZywg
U3RyaW5nPjo6aXRlcmF0b3IgcGVuZGluZ19pdCA9IG1faXRlbXNQZW5kaW5nU3luYy5iZWdpbigp
OwogICAgICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46Oml0ZXJhdG9yIHBlbmRpbmdf
ZW5kID0gbV9pdGVtc1BlbmRpbmdTeW5jLmVuZCgpOwogICAgICAgICAgICAgZm9yICg7IHBlbmRp
bmdfaXQgIT0gcGVuZGluZ19lbmQ7ICsrcGVuZGluZ19pdCkKLSAgICAgICAgICAgICAgICBtX2No
YW5nZWRJdGVtcy5yZW1vdmUocGVuZGluZ19pdC0+Zmlyc3QpOworICAgICAgICAgICAgICAgIG1f
Y2hhbmdlZEl0ZW1zLnJlbW92ZShwZW5kaW5nX2l0LT5rZXkpOwogICAgICAgICB9CiAKICAgICAg
ICAgaWYgKCFtX3N5bmNTY2hlZHVsZWQpIHsKQEAgLTM0NSw3ICszNDUsNyBAQCB2b2lkIFN0b3Jh
Z2VBcmVhU3luYzo6cGVyZm9ybUltcG9ydCgpCiAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46
Oml0ZXJhdG9yIGVuZCA9IGl0ZW1NYXAuZW5kKCk7CiAKICAgICBmb3IgKDsgaXQgIT0gZW5kOyAr
K2l0KQotICAgICAgICBtX3N0b3JhZ2VBcmVhLT5pbXBvcnRJdGVtKGl0LT5maXJzdCwgaXQtPnNl
Y29uZCk7CisgICAgICAgIG1fc3RvcmFnZUFyZWEtPmltcG9ydEl0ZW0oaXQtPmtleSwgaXQtPnZh
bHVlKTsKIAogICAgIG1hcmtJbXBvcnRlZCgpOwogfQpAQCAtNDM5LDEzICs0MzksMTMgQEAgdm9p
ZCBTdG9yYWdlQXJlYVN5bmM6OnN5bmMoYm9vbCBjbGVhckl0ZW1zLCBjb25zdCBIYXNoTWFwPFN0
cmluZywgU3RyaW5nPiYgaXRlbXMKICAgICB0cmFuc2FjdGlvbi5iZWdpbigpOwogICAgIGZvciAo
SGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaXRlbXMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIC8vIEJhc2VkIG9uIHRoZSBudWxsLW5lc3Mg
b2YgdGhlIHNlY29uZCBhcmd1bWVudCwgZGVjaWRlIHdoZXRoZXIgdGhpcyBpcyBhbiBpbnNlcnQg
b3IgYSBkZWxldGUuCi0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCYgcXVlcnkgPSBpdC0+c2Vjb25k
LmlzTnVsbCgpID8gcmVtb3ZlIDogaW5zZXJ0OworICAgICAgICBTUUxpdGVTdGF0ZW1lbnQmIHF1
ZXJ5ID0gaXQtPnZhbHVlLmlzTnVsbCgpID8gcmVtb3ZlIDogaW5zZXJ0OwogCi0gICAgICAgIHF1
ZXJ5LmJpbmRUZXh0KDEsIGl0LT5maXJzdCk7CisgICAgICAgIHF1ZXJ5LmJpbmRUZXh0KDEsIGl0
LT5rZXkpOwogCiAgICAgICAgIC8vIElmIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgbm9uLW51bGws
IHdlJ3JlIGRvaW5nIGFuIGluc2VydCwgc28gYmluZCBpdCBhcyB0aGUgdmFsdWUuCi0gICAgICAg
IGlmICghaXQtPnNlY29uZC5pc051bGwoKSkKLSAgICAgICAgICAgIHF1ZXJ5LmJpbmRCbG9iKDIs
IGl0LT5zZWNvbmQpOworICAgICAgICBpZiAoIWl0LT52YWx1ZS5pc051bGwoKSkKKyAgICAgICAg
ICAgIHF1ZXJ5LmJpbmRCbG9iKDIsIGl0LT52YWx1ZSk7CiAKICAgICAgICAgaW50IHJlc3VsdCA9
IHF1ZXJ5LnN0ZXAoKTsKICAgICAgICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHREb25lKSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VNYXAuY3BwIGIvU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTWFwLmNwcAppbmRleCA4ZTQyZDJmLi40MGUxYTM4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VNYXAuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU1hcC5jcHAKQEAgLTg5LDcgKzg5LDcgQEAgU3Ry
aW5nIFN0b3JhZ2VNYXA6OmtleSh1bnNpZ25lZCBpbmRleCkKICAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOwogCiAgICAgc2V0SXRlcmF0b3JUb0luZGV4KGluZGV4KTsKLSAgICByZXR1cm4gbV9pdGVy
YXRvci0+Zmlyc3Q7CisgICAgcmV0dXJuIG1faXRlcmF0b3ItPmtleTsKIH0KIAogU3RyaW5nIFN0
b3JhZ2VNYXA6OmdldEl0ZW0oY29uc3QgU3RyaW5nJiBrZXkpIGNvbnN0CkBAIC0xMzMsNyArMTMz
LDcgQEAgUGFzc1JlZlB0cjxTdG9yYWdlTWFwPiBTdG9yYWdlTWFwOjpzZXRJdGVtKGNvbnN0IFN0
cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHUKIAogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJp
bmc+OjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gbV9tYXAuYWRkKGtleSwgdmFsdWUpOwogICAgIGlm
ICghYWRkUmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+c2Vj
b25kID0gdmFsdWU7CisgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSB2YWx1ZTsK
IAogICAgIGludmFsaWRhdGVJdGVyYXRvcigpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwCmluZGV4IDlkMWFjNTEuLjQ1MDFiMTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwCkBAIC01
NSw3ICs1NSw3IEBAIFBhc3NSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gU3RvcmFnZU5hbWVzcGFj
ZUltcGw6OmxvY2FsU3RvcmFnZU5hbWVzcGFjZShjb25zdCBTCiAgICAgICAgIHJldHVybiBzdG9y
YWdlTmFtZXNwYWNlLnJlbGVhc2UoKTsKICAgICB9CiAKLSAgICByZXR1cm4gaXQtPnNlY29uZDsK
KyAgICByZXR1cm4gaXQtPnZhbHVlOwogfQogCiBQYXNzUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+
IFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpzZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSh1bnNpZ25lZCBx
dW90YSkKQEAgLTk3LDcgKzk3LDcgQEAgUGFzc1JlZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiBTdG9y
YWdlTmFtZXNwYWNlSW1wbDo6Y29weSgpCiAKICAgICBTdG9yYWdlQXJlYU1hcDo6aXRlcmF0b3Ig
ZW5kID0gbV9zdG9yYWdlQXJlYU1hcC5lbmQoKTsKICAgICBmb3IgKFN0b3JhZ2VBcmVhTWFwOjpp
dGVyYXRvciBpID0gbV9zdG9yYWdlQXJlYU1hcC5iZWdpbigpOyBpICE9IGVuZDsgKytpKQotICAg
ICAgICBuZXdOYW1lc3BhY2UtPm1fc3RvcmFnZUFyZWFNYXAuc2V0KGktPmZpcnN0LCBpLT5zZWNv
bmQtPmNvcHkoKSk7CisgICAgICAgIG5ld05hbWVzcGFjZS0+bV9zdG9yYWdlQXJlYU1hcC5zZXQo
aS0+a2V5LCBpLT52YWx1ZS0+Y29weSgpKTsKICAgICByZXR1cm4gbmV3TmFtZXNwYWNlLnJlbGVh
c2UoKTsKIH0KIApAQCAtMTMxLDcgKzEzMSw3IEBAIHZvaWQgU3RvcmFnZU5hbWVzcGFjZUltcGw6
OmNsb3NlKCkKIAogICAgIFN0b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBlbmQgPSBtX3N0b3JhZ2VB
cmVhTWFwLmVuZCgpOwogICAgIGZvciAoU3RvcmFnZUFyZWFNYXA6Oml0ZXJhdG9yIGl0ID0gbV9z
dG9yYWdlQXJlYU1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNv
bmQtPmNsb3NlKCk7CisgICAgICAgIGl0LT52YWx1ZS0+Y2xvc2UoKTsKIAogICAgIGlmIChtX3N5
bmNNYW5hZ2VyKQogICAgICAgICBtX3N5bmNNYW5hZ2VyLT5jbG9zZSgpOwpAQCAtMTU0LDcgKzE1
NCw3IEBAIHZvaWQgU3RvcmFnZU5hbWVzcGFjZUltcGw6OmNsZWFyQWxsT3JpZ2luc0ZvckRlbGV0
aW9uKCkKIAogICAgIFN0b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBlbmQgPSBtX3N0b3JhZ2VBcmVh
TWFwLmVuZCgpOwogICAgIGZvciAoU3RvcmFnZUFyZWFNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zdG9y
YWdlQXJlYU1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQt
PmNsZWFyRm9yT3JpZ2luRGVsZXRpb24oKTsKKyAgICAgICAgaXQtPnZhbHVlLT5jbGVhckZvck9y
aWdpbkRlbGV0aW9uKCk7CiB9CiAgICAgCiB2b2lkIFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpzeW5j
KCkKQEAgLTE2Miw3ICsxNjIsNyBAQCB2b2lkIFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpzeW5jKCkK
ICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIFN0b3JhZ2VBcmVhTWFwOjppdGVyYXRv
ciBlbmQgPSBtX3N0b3JhZ2VBcmVhTWFwLmVuZCgpOwogICAgIGZvciAoU3RvcmFnZUFyZWFNYXA6
Oml0ZXJhdG9yIGl0ID0gbV9zdG9yYWdlQXJlYU1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
Ci0gICAgICAgIGl0LT5zZWNvbmQtPnN5bmMoKTsKKyAgICAgICAgaXQtPnZhbHVlLT5zeW5jKCk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Rv
Y3VtZW50RXh0ZW5zaW9ucy5jcHAKaW5kZXggMTUyY2U4Yi4uNDgzNTI0OSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5jcHAKQEAgLTE1Niw3ICsxNTYsNyBA
QCB2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlQW5pbWF0aW9uRWxlbWVudEZyb21U
YXJnZXQoU1ZHU01JTEVsZW1lbnQqIGFuaQogICAgIEhhc2hNYXA8U1ZHRWxlbWVudCosIEhhc2hT
ZXQ8U1ZHU01JTEVsZW1lbnQqPiogPjo6aXRlcmF0b3IgaXQgPSBtX2FuaW1hdGVkRWxlbWVudHMu
ZmluZCh0YXJnZXRFbGVtZW50KTsKICAgICBBU1NFUlQoaXQgIT0gbV9hbmltYXRlZEVsZW1lbnRz
LmVuZCgpKTsKICAgICAKLSAgICBIYXNoU2V0PFNWR1NNSUxFbGVtZW50Kj4qIGFuaW1hdGlvbkVs
ZW1lbnRzRm9yVGFyZ2V0ID0gaXQtPnNlY29uZDsKKyAgICBIYXNoU2V0PFNWR1NNSUxFbGVtZW50
Kj4qIGFuaW1hdGlvbkVsZW1lbnRzRm9yVGFyZ2V0ID0gaXQtPnZhbHVlOwogICAgIEFTU0VSVCgh
YW5pbWF0aW9uRWxlbWVudHNGb3JUYXJnZXQtPmlzRW1wdHkoKSk7CiAKICAgICBhbmltYXRpb25F
bGVtZW50c0ZvclRhcmdldC0+cmVtb3ZlKGFuaW1hdGlvbkVsZW1lbnQpOwpAQCAtMTczLDcgKzE3
Myw3IEBAIHZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZW1vdmVBbGxBbmltYXRpb25FbGVt
ZW50c0Zyb21UYXJnZXQoU1ZHRWxlbWVudCogdGFyCiAgICAgaWYgKGl0ID09IG1fYW5pbWF0ZWRF
bGVtZW50cy5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSGFzaFNldDxTVkdTTUlMRWxl
bWVudCo+KiBhbmltYXRpb25FbGVtZW50c0ZvclRhcmdldCA9IGl0LT5zZWNvbmQ7CisgICAgSGFz
aFNldDxTVkdTTUlMRWxlbWVudCo+KiBhbmltYXRpb25FbGVtZW50c0ZvclRhcmdldCA9IGl0LT52
YWx1ZTsKICAgICBWZWN0b3I8U1ZHU01JTEVsZW1lbnQqPiB0b0JlUmVzZXQ7CiAKICAgICBIYXNo
U2V0PFNWR1NNSUxFbGVtZW50Kj46Oml0ZXJhdG9yIGVuZCA9IGFuaW1hdGlvbkVsZW1lbnRzRm9y
VGFyZ2V0LT5lbmQoKTsKQEAgLTIxOSw5ICsyMTksOSBAQCB2b2lkIFNWR0RvY3VtZW50RXh0ZW5z
aW9uczo6YWRkUGVuZGluZ1Jlc291cmNlKGNvbnN0IEF0b21pY1N0cmluZyYgaWQsIFNWR1N0eWxl
ZAogCiAgICAgLy8gVGhlIEhhc2hNYXAgYWRkIGZ1bmN0aW9uIGxlYXZlcyB0aGUgbWFwIGFsb25l
IGFuZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgZWxlbWVudCBpbiB0aGUKICAgICAvLyBtYXAg
aWYgdGhlIGVsZW1lbnQgYWxyZWFkeSBleGlzdHMuIFNvIHdlIGFkZCB3aXRoIGEgdmFsdWUgb2Yg
MCwgYW5kIGl0IGVpdGhlciBmaW5kcyB0aGUKLSAgICAvLyBleGlzdGluZyBlbGVtZW50IG9yIGFk
ZHMgYSBuZXcgb25lIGluIGEgc2luZ2xlIG9wZXJhdGlvbi4gVGhlICIuaXRlcmF0b3ItPnNlY29u
ZCIgaWRpb20gZ2V0cworICAgIC8vIGV4aXN0aW5nIGVsZW1lbnQgb3IgYWRkcyBhIG5ldyBvbmUg
aW4gYSBzaW5nbGUgb3BlcmF0aW9uLiBUaGUgIi5pdGVyYXRvci0+dmFsdWUiIGlkaW9tIGdldHMK
ICAgICAvLyB1cyB0byB0aGUgaXRlcmF0b3IgZnJvbSBhZGQncyByZXN1bHQsIGFuZCB0aGVuIHRv
IHRoZSB2YWx1ZSBpbnNpZGUgdGhlIGhhc2ggdGFibGUuCi0gICAgU1ZHUGVuZGluZ0VsZW1lbnRz
KiYgc2V0ID0gbV9wZW5kaW5nUmVzb3VyY2VzLmFkZChpZCwgMCkuaXRlcmF0b3ItPnNlY29uZDsK
KyAgICBTVkdQZW5kaW5nRWxlbWVudHMqJiBzZXQgPSBtX3BlbmRpbmdSZXNvdXJjZXMuYWRkKGlk
LCAwKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCFzZXQpCiAgICAgICAgIHNldCA9IG5ldyBT
VkdQZW5kaW5nRWxlbWVudHM7CiAgICAgc2V0LT5hZGQoZWxlbWVudCk7CkBAIC0yNDYsNyArMjQ2
LDcgQEAgYm9vbCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OmlzRWxlbWVudFBlbmRpbmdSZXNvdXJj
ZXMoU1ZHU3R5bGVkRWxlbWVudCogZWxlbWVudCkKIAogICAgIEhhc2hNYXA8QXRvbWljU3RyaW5n
LCBTVkdQZW5kaW5nRWxlbWVudHMqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wZW5kaW5nUmVz
b3VyY2VzLmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDxBdG9taWNTdHJpbmcsIFNWR1BlbmRpbmdF
bGVtZW50cyo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGVuZGluZ1Jlc291cmNlcy5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgU1ZHUGVuZGluZ0VsZW1lbnRzKiBlbGVtZW50
cyA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFNWR1BlbmRpbmdFbGVtZW50cyogZWxlbWVudHMgPSBp
dC0+dmFsdWU7CiAgICAgICAgIEFTU0VSVChlbGVtZW50cyk7CiAKICAgICAgICAgaWYgKGVsZW1l
bnRzLT5jb250YWlucyhlbGVtZW50KSkKQEAgLTI3NCwxMyArMjc0LDEzIEBAIHZvaWQgU1ZHRG9j
dW1lbnRFeHRlbnNpb25zOjpyZW1vdmVFbGVtZW50RnJvbVBlbmRpbmdSZXNvdXJjZXMoU1ZHU3R5
bGVkRWxlbWVudCoKICAgICAgICAgVmVjdG9yPEF0b21pY1N0cmluZz4gdG9CZVJlbW92ZWQ7CiAg
ICAgICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBTVkdQZW5kaW5nRWxlbWVudHMqPjo6aXRlcmF0
b3IgZW5kID0gbV9wZW5kaW5nUmVzb3VyY2VzLmVuZCgpOwogICAgICAgICBmb3IgKEhhc2hNYXA8
QXRvbWljU3RyaW5nLCBTVkdQZW5kaW5nRWxlbWVudHMqPjo6aXRlcmF0b3IgaXQgPSBtX3BlbmRp
bmdSZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBTVkdQ
ZW5kaW5nRWxlbWVudHMqIGVsZW1lbnRzID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIFNWR1Bl
bmRpbmdFbGVtZW50cyogZWxlbWVudHMgPSBpdC0+dmFsdWU7CiAgICAgICAgICAgICBBU1NFUlQo
ZWxlbWVudHMpOwogICAgICAgICAgICAgQVNTRVJUKCFlbGVtZW50cy0+aXNFbXB0eSgpKTsKIAog
ICAgICAgICAgICAgZWxlbWVudHMtPnJlbW92ZShlbGVtZW50KTsKICAgICAgICAgICAgIGlmIChl
bGVtZW50cy0+aXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHRvQmVSZW1vdmVkLmFwcGVuZChp
dC0+Zmlyc3QpOworICAgICAgICAgICAgICAgIHRvQmVSZW1vdmVkLmFwcGVuZChpdC0+a2V5KTsK
ICAgICAgICAgfQogCiAgICAgICAgIGVsZW1lbnQtPmNsZWFySGFzUGVuZGluZ1Jlc291cmNlc0lm
UG9zc2libGUoKTsKQEAgLTI5NiwxMyArMjk2LDEzIEBAIHZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNp
b25zOjpyZW1vdmVFbGVtZW50RnJvbVBlbmRpbmdSZXNvdXJjZXMoU1ZHU3R5bGVkRWxlbWVudCoK
ICAgICAgICAgVmVjdG9yPEF0b21pY1N0cmluZz4gdG9CZVJlbW92ZWQ7CiAgICAgICAgIEhhc2hN
YXA8QXRvbWljU3RyaW5nLCBTVkdQZW5kaW5nRWxlbWVudHMqPjo6aXRlcmF0b3IgZW5kID0gbV9w
ZW5kaW5nUmVzb3VyY2VzRm9yUmVtb3ZhbC5lbmQoKTsKICAgICAgICAgZm9yIChIYXNoTWFwPEF0
b21pY1N0cmluZywgU1ZHUGVuZGluZ0VsZW1lbnRzKj46Oml0ZXJhdG9yIGl0ID0gbV9wZW5kaW5n
UmVzb3VyY2VzRm9yUmVtb3ZhbC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAg
ICAgIFNWR1BlbmRpbmdFbGVtZW50cyogZWxlbWVudHMgPSBpdC0+c2Vjb25kOworICAgICAgICAg
ICAgU1ZHUGVuZGluZ0VsZW1lbnRzKiBlbGVtZW50cyA9IGl0LT52YWx1ZTsKICAgICAgICAgICAg
IEFTU0VSVChlbGVtZW50cyk7CiAgICAgICAgICAgICBBU1NFUlQoIWVsZW1lbnRzLT5pc0VtcHR5
KCkpOwogCiAgICAgICAgICAgICBlbGVtZW50cy0+cmVtb3ZlKGVsZW1lbnQpOwogICAgICAgICAg
ICAgaWYgKGVsZW1lbnRzLT5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgdG9CZVJlbW92ZWQu
YXBwZW5kKGl0LT5maXJzdCk7CisgICAgICAgICAgICAgICAgdG9CZVJlbW92ZWQuYXBwZW5kKGl0
LT5rZXkpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gV2UgdXNlIHRoZSByZW1vdmVQZW5kaW5n
UmVzb3VyY2VGb3JSZW1vdmFsIGZ1bmN0aW9uIGhlcmUgYmVjYXVzZSBpdCBkZWFscyB3aXRoIHNl
dCBsaWZldGltZSBjb3JyZWN0bHkuCkBAIC0zNjIsNyArMzYyLDcgQEAgSGFzaFNldDxTVkdFbGVt
ZW50Kj4qIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6c2V0T2ZFbGVtZW50c1JlZmVyZW5jaW5nVGFy
Z2V0KFNWR0UKICAgICBjb25zdCBIYXNoTWFwPFNWR0VsZW1lbnQqLCBPd25QdHI8SGFzaFNldDxT
VkdFbGVtZW50Kj4gPiA+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fZWxlbWVudERlcGVuZGVuY2ll
cy5maW5kKHJlZmVyZW5jZWRFbGVtZW50KTsKICAgICBpZiAoaXQgPT0gbV9lbGVtZW50RGVwZW5k
ZW5jaWVzLmVuZCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gaXQtPnNlY29uZC5n
ZXQoKTsKKyAgICByZXR1cm4gaXQtPnZhbHVlLmdldCgpOwogfQogCiB2b2lkIFNWR0RvY3VtZW50
RXh0ZW5zaW9uczo6YWRkRWxlbWVudFJlZmVyZW5jaW5nVGFyZ2V0KFNWR0VsZW1lbnQqIHJlZmVy
ZW5jaW5nRWxlbWVudCwgU1ZHRWxlbWVudCogcmVmZXJlbmNlZEVsZW1lbnQpCkBAIC0zODYsOCAr
Mzg2LDggQEAgdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlbW92ZUFsbFRhcmdldFJlZmVy
ZW5jZXNGb3JFbGVtZW50KFNWR0VsZW1lbnQqIHJlZmUKIAogICAgIEhhc2hNYXA8U1ZHRWxlbWVu
dCosIE93blB0cjxIYXNoU2V0PFNWR0VsZW1lbnQqPiA+ID46Oml0ZXJhdG9yIGVuZCA9IG1fZWxl
bWVudERlcGVuZGVuY2llcy5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8U1ZHRWxlbWVudCosIE93
blB0cjxIYXNoU2V0PFNWR0VsZW1lbnQqPiA+ID46Oml0ZXJhdG9yIGl0ID0gbV9lbGVtZW50RGVw
ZW5kZW5jaWVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBTVkdFbGVtZW50
KiByZWZlcmVuY2VkRWxlbWVudCA9IGl0LT5maXJzdDsKLSAgICAgICAgSGFzaFNldDxTVkdFbGVt
ZW50Kj4qIHJlZmVyZW5jaW5nRWxlbWVudHMgPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICBT
VkdFbGVtZW50KiByZWZlcmVuY2VkRWxlbWVudCA9IGl0LT5rZXk7CisgICAgICAgIEhhc2hTZXQ8
U1ZHRWxlbWVudCo+KiByZWZlcmVuY2luZ0VsZW1lbnRzID0gaXQtPnZhbHVlLmdldCgpOwogICAg
ICAgICBIYXNoU2V0PFNWR0VsZW1lbnQqPjo6aXRlcmF0b3Igc2V0SXQgPSByZWZlcmVuY2luZ0Vs
ZW1lbnRzLT5maW5kKHJlZmVyZW5jaW5nRWxlbWVudCk7CiAgICAgICAgIGlmIChzZXRJdCA9PSBy
ZWZlcmVuY2luZ0VsZW1lbnRzLT5lbmQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtNDA4
LDEwICs0MDgsMTAgQEAgdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlbW92ZUFsbEVsZW1l
bnRSZWZlcmVuY2VzRm9yVGFyZ2V0KFNWR0VsZW1lbnQqIHJlZmUKICAgICBIYXNoTWFwPFNWR0Vs
ZW1lbnQqLCBPd25QdHI8SGFzaFNldDxTVkdFbGVtZW50Kj4gPiA+OjppdGVyYXRvciBpdCA9IG1f
ZWxlbWVudERlcGVuZGVuY2llcy5maW5kKHJlZmVyZW5jZWRFbGVtZW50KTsKICAgICBpZiAoaXQg
PT0gbV9lbGVtZW50RGVwZW5kZW5jaWVzLmVuZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgQVNT
RVJUKGl0LT5maXJzdCA9PSByZWZlcmVuY2VkRWxlbWVudCk7CisgICAgQVNTRVJUKGl0LT5rZXkg
PT0gcmVmZXJlbmNlZEVsZW1lbnQpOwogICAgIFZlY3RvcjxTVkdFbGVtZW50Kj4gdG9CZU5vdGlm
aWVkOwogCi0gICAgSGFzaFNldDxTVkdFbGVtZW50Kj4qIHJlZmVyZW5jaW5nRWxlbWVudHMgPSBp
dC0+c2Vjb25kLmdldCgpOworICAgIEhhc2hTZXQ8U1ZHRWxlbWVudCo+KiByZWZlcmVuY2luZ0Vs
ZW1lbnRzID0gaXQtPnZhbHVlLmdldCgpOwogICAgIEhhc2hTZXQ8U1ZHRWxlbWVudCo+OjppdGVy
YXRvciBzZXRFbmQgPSByZWZlcmVuY2luZ0VsZW1lbnRzLT5lbmQoKTsKICAgICBmb3IgKEhhc2hT
ZXQ8U1ZHRWxlbWVudCo+OjppdGVyYXRvciBzZXRJdCA9IHJlZmVyZW5jaW5nRWxlbWVudHMtPmJl
Z2luKCk7IHNldEl0ICE9IHNldEVuZDsgKytzZXRJdCkKICAgICAgICAgdG9CZU5vdGlmaWVkLmFw
cGVuZCgqc2V0SXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCmluZGV4IGM4MGIyNTcuLmFm
OGQ4ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAKQEAgLTY4LDcgKzY4LDcgQEAgU1ZH
RWxlbWVudDo6flNWR0VsZW1lbnQoKQogICAgICAgICBTVkdFbGVtZW50UmFyZURhdGE6OlNWR0Vs
ZW1lbnRSYXJlRGF0YU1hcDo6aXRlcmF0b3IgaXQgPSByYXJlRGF0YU1hcC5maW5kKHRoaXMpOwog
ICAgICAgICBBU1NFUlQoaXQgIT0gcmFyZURhdGFNYXAuZW5kKCkpOwogCi0gICAgICAgIFNWR0Vs
ZW1lbnRSYXJlRGF0YSogcmFyZURhdGEgPSBpdC0+c2Vjb25kOworICAgICAgICBTVkdFbGVtZW50
UmFyZURhdGEqIHJhcmVEYXRhID0gaXQtPnZhbHVlOwogICAgICAgICByYXJlRGF0YS0+ZGVzdHJv
eUFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygpOwogICAgICAgICBpZiAoU1ZHQ3Vyc29yRWxl
bWVudCogY3Vyc29yRWxlbWVudCA9IHJhcmVEYXRhLT5jdXJzb3JFbGVtZW50KCkpCiAgICAgICAg
ICAgICBjdXJzb3JFbGVtZW50LT5yZW1vdmVDbGllbnQodGhpcyk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuY3BwCmluZGV4IGIwMzJmMzEu
LjBlZmE2YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRp
bWVDb250YWluZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRp
bWVDb250YWluZXIuY3BwCkBAIC0yNzIsNyArMjcyLDcgQEAgdm9pZCBTTUlMVGltZUNvbnRhaW5l
cjo6dXBkYXRlQW5pbWF0aW9ucyhTTUlMVGltZSBlbGFwc2VkLCBib29sIHNlZWtUb1RpbWUpCiAg
ICAgVmVjdG9yPFNWR1NNSUxFbGVtZW50Kj4gYW5pbWF0aW9uc1RvQXBwbHk7CiAgICAgUmVzdWx0
RWxlbWVudE1hcDo6aXRlcmF0b3IgZW5kID0gcmVzdWx0c0VsZW1lbnRzLmVuZCgpOwogICAgIGZv
ciAoUmVzdWx0RWxlbWVudE1hcDo6aXRlcmF0b3IgaXQgPSByZXN1bHRzRWxlbWVudHMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFNWR1NNSUxFbGVtZW50KiBhbmltYXRpb24g
PSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICBTVkdTTUlMRWxlbWVudCogYW5pbWF0aW9uID0g
aXQtPnZhbHVlLmdldCgpOwogICAgICAgICBpZiAoY29udHJpYnV0aW5nRWxlbWVudHMuY29udGFp
bnMoYW5pbWF0aW9uKSkKICAgICAgICAgICAgIGFuaW1hdGlvbnNUb0FwcGx5LmFwcGVuZChhbmlt
YXRpb24pOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9T
VkdJbWFnZUNhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZUNh
Y2hlLmNwcAppbmRleCA2OTNlZTJhLi4yNWZjYzc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3Zn
L2dyYXBoaWNzL1NWR0ltYWdlQ2FjaGUuY3BwCkBAIC00Nyw4ICs0Nyw4IEBAIFNWR0ltYWdlQ2Fj
aGU6On5TVkdJbWFnZUNhY2hlKCkKICAgICAgICAgLy8gQ2hlY2tzIGlmIHRoZSBjbGllbnQgKGl0
LT5maXJzdCkgaXMgc3RpbGwgdmFsaWQuIFRoZSBjbGllbnQgc2hvdWxkIHJlbW92ZSBpdHNlbGYg
ZnJvbSB0aGlzCiAgICAgICAgIC8vIGNhY2hlIGJlZm9yZSBpdHMgZW5kIG9mIGxpZmUsIG90aGVy
d2lzZSB0aGUgZm9sbG93aW5nIEFTU0VSVCB3aWxsIGNyYXNoIG9uIHB1cmUgdmlydHVhbAogICAg
ICAgICAvLyBmdW5jdGlvbiBjYWxsIG9yIGEgZ2VuZXJhbCBjcmFzaC4KLSAgICAgICAgQVNTRVJU
KGl0LT5maXJzdC0+cmVzb3VyY2VDbGllbnRUeXBlKCkgPT0gQ2FjaGVkSW1hZ2VDbGllbnQ6OmV4
cGVjdGVkVHlwZSgpKTsKLSAgICAgICAgZGVsZXRlIGl0LT5zZWNvbmQuYnVmZmVyOworICAgICAg
ICBBU1NFUlQoaXQtPmtleS0+cmVzb3VyY2VDbGllbnRUeXBlKCkgPT0gQ2FjaGVkSW1hZ2VDbGll
bnQ6OmV4cGVjdGVkVHlwZSgpKTsKKyAgICAgICAgZGVsZXRlIGl0LT52YWx1ZS5idWZmZXI7CiAg
ICAgfQogCiAgICAgbV9pbWFnZURhdGFNYXAuY2xlYXIoKTsKQEAgLTYzLDcgKzYzLDcgQEAgdm9p
ZCBTVkdJbWFnZUNhY2hlOjpyZW1vdmVDbGllbnRGcm9tQ2FjaGUoY29uc3QgQ2FjaGVkSW1hZ2VD
bGllbnQqIGNsaWVudCkKICAgICBpZiAoaXQgPT0gbV9pbWFnZURhdGFNYXAuZW5kKCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGRlbGV0ZSBpdC0+c2Vjb25kLmJ1ZmZlcjsKKyAgICBkZWxldGUg
aXQtPnZhbHVlLmJ1ZmZlcjsKICAgICBtX2ltYWdlRGF0YU1hcC5yZW1vdmUoaXQpOwogfQogCkBA
IC04MCwxNCArODAsMTQgQEAgU1ZHSW1hZ2VDYWNoZTo6U2l6ZUFuZFNjYWxlcyBTVkdJbWFnZUNh
Y2hlOjpyZXF1ZXN0ZWRTaXplQW5kU2NhbGVzKGNvbnN0IENhY2hlZEkKICAgICBTaXplQW5kU2Nh
bGVzTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fc2l6ZUFuZFNjYWxlc01hcC5maW5kKGNsaWVu
dCk7CiAgICAgaWYgKGl0ID09IG1fc2l6ZUFuZFNjYWxlc01hcC5lbmQoKSkKICAgICAgICAgcmV0
dXJuIFNpemVBbmRTY2FsZXMoKTsKLSAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICByZXR1cm4g
aXQtPnZhbHVlOwogfQogCiB2b2lkIFNWR0ltYWdlQ2FjaGU6OmltYWdlQ29udGVudENoYW5nZWQo
KQogewogICAgIEltYWdlRGF0YU1hcDo6aXRlcmF0b3IgZW5kID0gbV9pbWFnZURhdGFNYXAuZW5k
KCk7CiAgICAgZm9yIChJbWFnZURhdGFNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pbWFnZURhdGFNYXAu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLmltYWdlTmVlZHNV
cGRhdGUgPSB0cnVlOworICAgICAgICBpdC0+dmFsdWUuaW1hZ2VOZWVkc1VwZGF0ZSA9IHRydWU7
CiAKICAgICAvLyBJZiB3ZSdyZSBpbiB0aGUgbWlkZGxlIG9mIGxheW91dCwgc3RhcnQgcmVkcmF3
aW5nIGRpcnR5CiAgICAgLy8gaW1hZ2VzIG9uIGEgdGltZXI7IG90aGVyd2lzZSBpdCdzIHNhZmUg
dG8gZHJhdyBpbW1lZGlhdGVseS4KQEAgLTEwMyw3ICsxMDMsNyBAQCB2b2lkIFNWR0ltYWdlQ2Fj
aGU6OnJlZHJhdygpCiB7CiAgICAgSW1hZ2VEYXRhTWFwOjppdGVyYXRvciBlbmQgPSBtX2ltYWdl
RGF0YU1hcC5lbmQoKTsKICAgICBmb3IgKEltYWdlRGF0YU1hcDo6aXRlcmF0b3IgaXQgPSBtX2lt
YWdlRGF0YU1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgSW1hZ2VEYXRh
JiBkYXRhID0gaXQtPnNlY29uZDsKKyAgICAgICAgSW1hZ2VEYXRhJiBkYXRhID0gaXQtPnZhbHVl
OwogICAgICAgICBpZiAoIWRhdGEuaW1hZ2VOZWVkc1VwZGF0ZSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAvLyBJZiB0aGUgY29udGVudCBjaGFuZ2VkIHdlIHJlZHJhdyB1c2luZyBv
dXIgZXhpc3RpbmcgSW1hZ2VCdWZmZXIuCkBAIC0xMzksOSArMTM5LDkgQEAgSW1hZ2UqIFNWR0lt
YWdlQ2FjaGU6Omxvb2t1cE9yQ3JlYXRlQml0bWFwSW1hZ2VGb3JSZW5kZXJlcihjb25zdCBSZW5k
ZXJPYmplY3QqIHIKICAgICBpZiAoc2l6ZUl0ID09IG1fc2l6ZUFuZFNjYWxlc01hcC5lbmQoKSkK
ICAgICAgICAgcmV0dXJuIEltYWdlOjpudWxsSW1hZ2UoKTsKIAotICAgIEludFNpemUgc2l6ZSA9
IHNpemVJdC0+c2Vjb25kLnNpemU7Ci0gICAgZmxvYXQgem9vbSA9IHNpemVJdC0+c2Vjb25kLnpv
b207Ci0gICAgZmxvYXQgc2NhbGUgPSBzaXplSXQtPnNlY29uZC5zY2FsZTsKKyAgICBJbnRTaXpl
IHNpemUgPSBzaXplSXQtPnZhbHVlLnNpemU7CisgICAgZmxvYXQgem9vbSA9IHNpemVJdC0+dmFs
dWUuem9vbTsKKyAgICBmbG9hdCBzY2FsZSA9IHNpemVJdC0+dmFsdWUuc2NhbGU7CiAKICAgICAv
LyBGSVhNRSAoODUzMzUpOiBUaGlzIG5lZWRzIHRvIHRha2UgQ1NTIHRyYW5zZm9ybSBzY2FsZSBp
bnRvIGFjY291bnQgYXMgd2VsbC4KICAgICBQYWdlKiBwYWdlID0gcmVuZGVyZXItPmRvY3VtZW50
KCktPnBhZ2UoKTsKQEAgLTE1Myw3ICsxNTMsNyBAQCBJbWFnZSogU1ZHSW1hZ2VDYWNoZTo6bG9v
a3VwT3JDcmVhdGVCaXRtYXBJbWFnZUZvclJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCogcgog
ICAgIC8vIExvb2t1cCBpbWFnZSBmb3IgY2xpZW50IGluIGNhY2hlIGFuZCBldmVudHVhbGx5IHVw
ZGF0ZSBpdC4KICAgICBJbWFnZURhdGFNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pbWFnZURhdGFNYXAu
ZmluZChjbGllbnQpOwogICAgIGlmIChpdCAhPSBtX2ltYWdlRGF0YU1hcC5lbmQoKSkgewotICAg
ICAgICBJbWFnZURhdGEmIGRhdGEgPSBpdC0+c2Vjb25kOworICAgICAgICBJbWFnZURhdGEmIGRh
dGEgPSBpdC0+dmFsdWU7CiAKICAgICAgICAgLy8gQ29tbW9uIGNhc2U6IGltYWdlIHNpemUgJiB6
b29tIHJlbWFpbmVkIHRoZSBzYW1lLgogICAgICAgICBpZiAoZGF0YS5zaXplQW5kU2NhbGVzLnNp
emUgPT0gc2l6ZSAmJiBkYXRhLnNpemVBbmRTY2FsZXMuem9vbSA9PSB6b29tICYmIGRhdGEuc2l6
ZUFuZFNjYWxlcy5zY2FsZSA9PSBzY2FsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaAppbmRleCA0NGQzMjI3Li4xOTE1
ODBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdG
aWx0ZXJCdWlsZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRmlsdGVyQnVpbGRlci5oCkBAIC01MCw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAg
ICAgIC8vIE9ubHkgYWxsb3dlZCBmb3IgZWZmZWN0cyBiZWxvbmdzIHRvIHRoaXMgYnVpbGRlci4K
ICAgICAgICAgQVNTRVJUKG1fZWZmZWN0UmVmZXJlbmNlcy5jb250YWlucyhlZmZlY3QpKTsKLSAg
ICAgICAgcmV0dXJuIG1fZWZmZWN0UmVmZXJlbmNlcy5maW5kKGVmZmVjdCktPnNlY29uZDsKKyAg
ICAgICAgcmV0dXJuIG1fZWZmZWN0UmVmZXJlbmNlcy5maW5kKGVmZmVjdCktPnZhbHVlOwogICAg
IH0KIAogICAgIC8vIFJlcXVpcmVkIHRvIGNoYW5nZSB0aGUgYXR0cmlidXRlcyBvZiBhIGZpbHRl
ciBkdXJpbmcgYW4gc3ZnQXR0cmlidXRlQ2hhbmdlZC4KQEAgLTY2LDcgKzY2LDcgQEAgcHJpdmF0
ZToKICAgICB7CiAgICAgICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBSZWZQdHI8RmlsdGVyRWZm
ZWN0PiA+OjppdGVyYXRvciBlbmQgPSBtX2J1aWx0aW5FZmZlY3RzLmVuZCgpOwogICAgICAgICBm
b3IgKEhhc2hNYXA8QXRvbWljU3RyaW5nLCBSZWZQdHI8RmlsdGVyRWZmZWN0PiA+OjppdGVyYXRv
ciBpdGVyYXRvciA9IG1fYnVpbHRpbkVmZmVjdHMuYmVnaW4oKTsgaXRlcmF0b3IgIT0gZW5kOyAr
K2l0ZXJhdG9yKQotICAgICAgICAgICAgIG1fZWZmZWN0UmVmZXJlbmNlcy5hZGQoaXRlcmF0b3It
PnNlY29uZCwgRmlsdGVyRWZmZWN0U2V0KCkpOworICAgICAgICAgICAgIG1fZWZmZWN0UmVmZXJl
bmNlcy5hZGQoaXRlcmF0b3ItPnZhbHVlLCBGaWx0ZXJFZmZlY3RTZXQoKSk7CiAgICAgfQogCiAg
ICAgSGFzaE1hcDxBdG9taWNTdHJpbmcsIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+ID4gbV9idWlsdGlu
RWZmZWN0czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0Fu
aW1hdGVkUHJvcGVydHkuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1h
dGVkUHJvcGVydHkuaAppbmRleCA2ZGZkYWM2Li42YTFmMDA5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eS5oCkBAIC01OCw4ICs1
OCw4IEBAIHB1YmxpYzoKICAgICAgICAgQ2FjaGUqIGNhY2hlID0gYW5pbWF0ZWRQcm9wZXJ0eUNh
Y2hlKCk7CiAgICAgICAgIGNvbnN0IENhY2hlOjpjb25zdF9pdGVyYXRvciBlbmQgPSBjYWNoZS0+
ZW5kKCk7CiAgICAgICAgIGZvciAoQ2FjaGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY2FjaGUtPmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgaWYgKGl0LT5zZWNvbmQgPT0g
dGhpcykgewotICAgICAgICAgICAgICAgIGNhY2hlLT5yZW1vdmUoaXQtPmZpcnN0KTsKKyAgICAg
ICAgICAgIGlmIChpdC0+dmFsdWUgPT0gdGhpcykgeworICAgICAgICAgICAgICAgIGNhY2hlLT5y
ZW1vdmUoaXQtPmtleSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0F0
dHJpYnV0ZVRvUHJvcGVydHlNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMv
U1ZHQXR0cmlidXRlVG9Qcm9wZXJ0eU1hcC5jcHAKaW5kZXggYmUzMWNjMy4uY2M0NmNjZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQXR0cmlidXRlVG9Qcm9w
ZXJ0eU1hcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQXR0cmli
dXRlVG9Qcm9wZXJ0eU1hcC5jcHAKQEAgLTMxLDcgKzMxLDcgQEAgdm9pZCBTVkdBdHRyaWJ1dGVU
b1Byb3BlcnR5TWFwOjphZGRQcm9wZXJ0aWVzKFNWR0F0dHJpYnV0ZVRvUHJvcGVydHlNYXAmIG1h
cCkKIHsKICAgICBBdHRyaWJ1dGVUb1Byb3BlcnRpZXNNYXA6Oml0ZXJhdG9yIGVuZCA9IG1hcC5t
X21hcC5lbmQoKTsKICAgICBmb3IgKEF0dHJpYnV0ZVRvUHJvcGVydGllc01hcDo6aXRlcmF0b3Ig
aXQgPSBtYXAubV9tYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFByb3Bl
cnRpZXNWZWN0b3IqIHZlY3RvciA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFByb3BlcnRpZXNWZWN0
b3IqIHZlY3RvciA9IGl0LT52YWx1ZTsKICAgICAgICAgQVNTRVJUKHZlY3Rvcik7CiAKICAgICAg
ICAgUHJvcGVydGllc1ZlY3Rvcjo6aXRlcmF0b3IgdmVjdG9yRW5kID0gdmVjdG9yLT5lbmQoKTsK
QEAgLTgxLDEyICs4MSwxMiBAQCB2b2lkIFNWR0F0dHJpYnV0ZVRvUHJvcGVydHlNYXA6OnN5bmNo
cm9uaXplUHJvcGVydGllcyhTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudAogICAgIEFTU0VSVChj
b250ZXh0RWxlbWVudCk7CiAgICAgQXR0cmlidXRlVG9Qcm9wZXJ0aWVzTWFwOjppdGVyYXRvciBl
bmQgPSBtX21hcC5lbmQoKTsKICAgICBmb3IgKEF0dHJpYnV0ZVRvUHJvcGVydGllc01hcDo6aXRl
cmF0b3IgaXQgPSBtX21hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgUHJv
cGVydGllc1ZlY3RvciogdmVjdG9yID0gaXQtPnNlY29uZDsKKyAgICAgICAgUHJvcGVydGllc1Zl
Y3RvciogdmVjdG9yID0gaXQtPnZhbHVlOwogICAgICAgICBBU1NFUlQodmVjdG9yKTsKIAogICAg
ICAgICBQcm9wZXJ0aWVzVmVjdG9yOjppdGVyYXRvciB2ZWN0b3JFbmQgPSB2ZWN0b3ItPmVuZCgp
OwogICAgICAgICBmb3IgKFByb3BlcnRpZXNWZWN0b3I6Oml0ZXJhdG9yIHZlY3Rvckl0ID0gdmVj
dG9yLT5iZWdpbigpOyB2ZWN0b3JJdCAhPSB2ZWN0b3JFbmQ7ICsrdmVjdG9ySXQpCi0gICAgICAg
ICAgICBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnRleHRFbGVtZW50LCBpdC0+Zmlyc3QsICp2ZWN0
b3JJdCk7CisgICAgICAgICAgICBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnRleHRFbGVtZW50LCBp
dC0+a2V5LCAqdmVjdG9ySXQpOwogICAgIH0gCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dv
cmtlckNvbnRleHQuY3BwCmluZGV4IDQ1ZTVlYmUuLmIyNjIwYWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
d29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcApAQCAtMTc5LDcgKzE3OSw3IEBAIGJvb2wgV29ya2Vy
Q29udGV4dDo6aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QKICAgICBBY3RpdmVET01PYmplY3Rz
TWFwJiBhY3RpdmVPYmplY3RzID0gYWN0aXZlRE9NT2JqZWN0cygpOwogICAgIEFjdGl2ZURPTU9i
amVjdHNNYXA6OmNvbnN0X2l0ZXJhdG9yIGFjdGl2ZU9iamVjdHNFbmQgPSBhY3RpdmVPYmplY3Rz
LmVuZCgpOwogICAgIGZvciAoQWN0aXZlRE9NT2JqZWN0c01hcDo6Y29uc3RfaXRlcmF0b3IgaXRl
ciA9IGFjdGl2ZU9iamVjdHMuYmVnaW4oKTsgaXRlciAhPSBhY3RpdmVPYmplY3RzRW5kOyArK2l0
ZXIpIHsKLSAgICAgICAgaWYgKGl0ZXItPmZpcnN0LT5oYXNQZW5kaW5nQWN0aXZpdHkoKSkKKyAg
ICAgICAgaWYgKGl0ZXItPmtleS0+aGFzUGVuZGluZ0FjdGl2aXR5KCkpCiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
V29ya2VyRXZlbnRRdWV1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckV2ZW50
UXVldWUuY3BwCmluZGV4IDU5YTkzMDcuLjIzNTUyOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3dvcmtlcnMvV29ya2VyRXZlbnRRdWV1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd29y
a2Vycy9Xb3JrZXJFdmVudFF1ZXVlLmNwcApAQCAtMTI3LDcgKzEyNyw3IEBAIHZvaWQgV29ya2Vy
RXZlbnRRdWV1ZTo6Y2xvc2UoKQogewogICAgIG1faXNDbG9zZWQgPSB0cnVlOwogICAgIGZvciAo
RXZlbnRUYXNrTWFwOjppdGVyYXRvciBpdCA9IG1fZXZlbnRUYXNrTWFwLmJlZ2luKCk7IGl0ICE9
IG1fZXZlbnRUYXNrTWFwLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIEV2ZW50RGlzcGF0Y2hlclRh
c2sqIHRhc2sgPSBpdC0+c2Vjb25kOworICAgICAgICBFdmVudERpc3BhdGNoZXJUYXNrKiB0YXNr
ID0gaXQtPnZhbHVlOwogICAgICAgICB0YXNrLT5jYW5jZWwoKTsKICAgICB9CiAgICAgbV9ldmVu
dFRhc2tNYXAuY2xlYXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRw
UmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCmluZGV4
IDc2OGEwMTkuLjI1ZWRjNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRw
UmVxdWVzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcApA
QCAtOTIwLDcgKzkyMCw3IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OnNldFJlcXVlc3RIZWFkZXJJ
bnRlcm5hbChjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IFN0CiB7CiAgICAgSFRUUEhl
YWRlck1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fcmVxdWVzdEhlYWRlcnMuYWRkKG5hbWUsIHZh
bHVlKTsKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXN1bHQuaXRlcmF0
b3ItPnNlY29uZCArPSAiLCAiICsgdmFsdWU7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFs
dWUgKz0gIiwgIiArIHZhbHVlOwogfQogCiBTdHJpbmcgWE1MSHR0cFJlcXVlc3Q6OmdldFJlcXVl
c3RIZWFkZXIoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKSBjb25zdApAQCAtOTQ3LDE2ICs5NDcs
MTYgQEAgU3RyaW5nIFhNTEh0dHBSZXF1ZXN0OjpnZXRBbGxSZXNwb25zZUhlYWRlcnMoRXhjZXB0
aW9uQ29kZSYgZWMpIGNvbnN0CiAgICAgICAgIC8vICAgICAyKSBUaGVyZSdzIG5vIGtub3duIGhh
cm0gaW4gaGlkaW5nIFNldC1Db29raWUgaGVhZGVyIGZpZWxkcyBlbnRpcmVseTsgd2UgZG9uJ3QK
ICAgICAgICAgLy8gICAgICAgIGtub3cgYW55IHdpZGVseSB1c2VkIHRlY2huaXF1ZSB0aGF0IHJl
cXVpcmVzIGFjY2VzcyB0byB0aGVtLgogICAgICAgICAvLyAgICAgMykgRmlyZWZveCBoYXMgaW1w
bGVtZW50ZWQgdGhpcyBwb2xpY3kuCi0gICAgICAgIGlmIChpc1NldENvb2tpZUhlYWRlcihpdC0+
Zmlyc3QpICYmICFzZWN1cml0eU9yaWdpbigpLT5jYW5Mb2FkTG9jYWxSZXNvdXJjZXMoKSkKKyAg
ICAgICAgaWYgKGlzU2V0Q29va2llSGVhZGVyKGl0LT5rZXkpICYmICFzZWN1cml0eU9yaWdpbigp
LT5jYW5Mb2FkTG9jYWxSZXNvdXJjZXMoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAg
ICAgIGlmICghbV9zYW1lT3JpZ2luUmVxdWVzdCAmJiAhaXNPbkFjY2Vzc0NvbnRyb2xSZXNwb25z
ZUhlYWRlcldoaXRlbGlzdChpdC0+Zmlyc3QpICYmICFhY2Nlc3NDb250cm9sRXhwb3NlSGVhZGVy
U2V0LmNvbnRhaW5zKGl0LT5maXJzdCkpCisgICAgICAgIGlmICghbV9zYW1lT3JpZ2luUmVxdWVz
dCAmJiAhaXNPbkFjY2Vzc0NvbnRyb2xSZXNwb25zZUhlYWRlcldoaXRlbGlzdChpdC0+a2V5KSAm
JiAhYWNjZXNzQ29udHJvbEV4cG9zZUhlYWRlclNldC5jb250YWlucyhpdC0+a2V5KSkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5maXJz
dCk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5rZXkpOwogICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZCgnOicpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnICcp
OwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+c2Vjb25kKTsKKyAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQoaXQtPnZhbHVlKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQoJ1xyJyk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwogICAgIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aEZ1bmN0aW9ucy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS94bWwvWFBhdGhGdW5jdGlvbnMuY3BwCmluZGV4IDNjOTBlM2IuLjAwMTliYzQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aEZ1bmN0aW9ucy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUveG1sL1hQYXRoRnVuY3Rpb25zLmNwcApAQCAtNzIzLDcgKzcyMyw3IEBAIEZ1
bmN0aW9uKiBjcmVhdGVGdW5jdGlvbihjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFZlY3RvcjxF
eHByZXNzaW9uKj4mIGFyZ3MpCiAgICAgSGFzaE1hcDxTdHJpbmcsIEZ1bmN0aW9uUmVjPjo6aXRl
cmF0b3IgZnVuY3Rpb25NYXBJdGVyID0gZnVuY3Rpb25NYXAtPmZpbmQobmFtZSk7CiAgICAgRnVu
Y3Rpb25SZWMqIGZ1bmN0aW9uUmVjID0gMDsKIAotICAgIGlmIChmdW5jdGlvbk1hcEl0ZXIgPT0g
ZnVuY3Rpb25NYXAtPmVuZCgpIHx8ICEoZnVuY3Rpb25SZWMgPSAmZnVuY3Rpb25NYXBJdGVyLT5z
ZWNvbmQpLT5hcmdzLmNvbnRhaW5zKGFyZ3Muc2l6ZSgpKSkKKyAgICBpZiAoZnVuY3Rpb25NYXBJ
dGVyID09IGZ1bmN0aW9uTWFwLT5lbmQoKSB8fCAhKGZ1bmN0aW9uUmVjID0gJmZ1bmN0aW9uTWFw
SXRlci0+dmFsdWUpLT5hcmdzLmNvbnRhaW5zKGFyZ3Muc2l6ZSgpKSkKICAgICAgICAgcmV0dXJu
IDA7CiAKICAgICBGdW5jdGlvbiogZnVuY3Rpb24gPSBmdW5jdGlvblJlYy0+ZmFjdG9yeUZuKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhQYXJzZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUveG1sL1hQYXRoUGFyc2VyLmNwcAppbmRleCA2MmQ4ZWUzLi4xMDk4ZTU0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3htbC9YUGF0aFBhcnNlci5jcHAKQEAgLTEwNiw3ICsxMDYsNyBAQCBzdGF0aWMgYm9v
bCBpc0F4aXNOYW1lKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RlcDo6QXhpcyYgdHlwZSkKICAgICBB
eGlzTmFtZXNNYXA6Oml0ZXJhdG9yIGl0ID0gYXhpc05hbWVzLmZpbmQobmFtZSk7CiAgICAgaWYg
KGl0ID09IGF4aXNOYW1lcy5lbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHR5cGUg
PSBpdC0+c2Vjb25kOworICAgIHR5cGUgPSBpdC0+dmFsdWU7CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yTGlieHNsdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwCmluZGV4IDA3
NmE4NTIuLjllYTJhYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vz
c29yTGlieHNsdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JMaWJ4
c2x0LmNwcApAQCAtMjI1LDggKzIyNSw4IEBAIHN0YXRpYyBjb25zdCBjaGFyKiogeHNsdFBhcmFt
QXJyYXlGcm9tUGFyYW1ldGVyTWFwKFhTTFRQcm9jZXNzb3I6OlBhcmFtZXRlck1hcCYKICAgICBY
U0xUUHJvY2Vzc29yOjpQYXJhbWV0ZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IHBhcmFtZXRlcnMuZW5k
KCk7CiAgICAgdW5zaWduZWQgaW5kZXggPSAwOwogICAgIGZvciAoWFNMVFByb2Nlc3Nvcjo6UGFy
YW1ldGVyTWFwOjppdGVyYXRvciBpdCA9IHBhcmFtZXRlcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7Ci0gICAgICAgIHBhcmFtZXRlckFycmF5W2luZGV4KytdID0gZmFzdFN0ckR1cChpdC0+
Zmlyc3QudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIHBhcmFtZXRlckFycmF5W2luZGV4KytdID0g
ZmFzdFN0ckR1cChpdC0+c2Vjb25kLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBwYXJhbWV0ZXJB
cnJheVtpbmRleCsrXSA9IGZhc3RTdHJEdXAoaXQtPmtleS51dGY4KCkuZGF0YSgpKTsKKyAgICAg
ICAgcGFyYW1ldGVyQXJyYXlbaW5kZXgrK10gPSBmYXN0U3RyRHVwKGl0LT52YWx1ZS51dGY4KCku
ZGF0YSgpKTsKICAgICB9CiAgICAgcGFyYW1ldGVyQXJyYXlbaW5kZXhdID0gMDsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JRdC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS94bWwvWFNMVFByb2Nlc3NvclF0LmNwcAppbmRleCBjMGFiNGQ2Li5hNGM5ZDc0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvclF0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvclF0LmNwcApAQCAtMTQzLDcgKzE0Myw3IEBAIGJv
b2wgWFNMVFByb2Nlc3Nvcjo6dHJhbnNmb3JtVG9TdHJpbmcoTm9kZSogc291cmNlTm9kZSwgU3Ry
aW5nJiwgU3RyaW5nJiByZXN1bHRTCiAKICAgICBYU0xUUHJvY2Vzc29yOjpQYXJhbWV0ZXJNYXA6
Oml0ZXJhdG9yIGVuZCA9IG1fcGFyYW1ldGVycy5lbmQoKTsKICAgICBmb3IgKFhTTFRQcm9jZXNz
b3I6OlBhcmFtZXRlck1hcDo6aXRlcmF0b3IgaXQgPSBtX3BhcmFtZXRlcnMuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KQotICAgICAgICBxdWVyeS5iaW5kVmFyaWFibGUoUVN0cmluZyhpdC0+Zmly
c3QpLCBRWG1sSXRlbShRVmFyaWFudChRU3RyaW5nKGl0LT5zZWNvbmQpKSkpOworICAgICAgICBx
dWVyeS5iaW5kVmFyaWFibGUoUVN0cmluZyhpdC0+a2V5KSwgUVhtbEl0ZW0oUVZhcmlhbnQoUVN0
cmluZyhpdC0+dmFsdWUpKSkpOwogCiAgICAgUVN0cmluZyBzb3VyY2U7CiAgICAgaWYgKHNvdXJj
ZUlzRG9jdW1lbnQgJiYgb3duZXJEb2N1bWVudC0+dHJhbnNmb3JtU291cmNlKCkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL0JhY2tpbmdTdG9yZS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL0JhY2tpbmdTdG9yZS5jcHAKaW5kZXggYTBmYTI5NS4u
MzBmZDJkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9CYWNraW5n
U3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvQmFja2luZ1N0b3Jl
LmNwcApAQCAtNzkxLDggKzc5MSw4IEBAIHZvaWQgQmFja2luZ1N0b3JlUHJpdmF0ZTo6c2V0QmFj
a2luZ1N0b3JlUmVjdChjb25zdCBQbGF0Zm9ybTo6SW50UmVjdCYgYmFja2luZ1N0CiAgICAgLy8g
b3VyIG5ldyBiYWNraW5nIHN0b3JlIHJlY3QuCiAgICAgVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3Ig
dGlsZU1hcEVuZCA9IGN1cnJlbnRNYXAuZW5kKCk7CiAgICAgZm9yIChUaWxlTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IGN1cnJlbnRNYXAuYmVnaW4oKTsgaXQgIT0gdGlsZU1hcEVuZDsgKytpdCkg
ewotICAgICAgICBUaWxlSW5kZXggb2xkSW5kZXggPSBpdC0+Zmlyc3Q7Ci0gICAgICAgIEJhY2tp
bmdTdG9yZVRpbGUqIHRpbGUgPSBpdC0+c2Vjb25kOworICAgICAgICBUaWxlSW5kZXggb2xkSW5k
ZXggPSBpdC0+a2V5OworICAgICAgICBCYWNraW5nU3RvcmVUaWxlKiB0aWxlID0gaXQtPnZhbHVl
OwogCiAgICAgICAgIC8vIFJlc2V0IHRoZSBvbGQgaW5kZXguCiAgICAgICAgIHJlc2V0VGlsZShv
bGRJbmRleCwgdGlsZSwgZmFsc2UgLypyZXNldEJhY2tncm91bmQqLyk7CkBAIC04NDgsOCArODQ4
LDggQEAgdm9pZCBCYWNraW5nU3RvcmVQcml2YXRlOjpzZXRCYWNraW5nU3RvcmVSZWN0KGNvbnN0
IFBsYXRmb3JtOjpJbnRSZWN0JiBiYWNraW5nU3QKICAgICBzaXplX3QgaSA9IDA7CiAgICAgVGls
ZU1hcDo6Y29uc3RfaXRlcmF0b3IgbGVmdE92ZXJFbmQgPSBsZWZ0T3ZlclRpbGVzLmVuZCgpOwog
ICAgIGZvciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsZWZ0T3ZlclRpbGVzLmJlZ2lu
KCk7IGl0ICE9IGxlZnRPdmVyRW5kOyArK2l0KSB7Ci0gICAgICAgIFRpbGVJbmRleCBvbGRJbmRl
eCA9IGl0LT5maXJzdDsKLSAgICAgICAgQmFja2luZ1N0b3JlVGlsZSogdGlsZSA9IGl0LT5zZWNv
bmQ7CisgICAgICAgIFRpbGVJbmRleCBvbGRJbmRleCA9IGl0LT5rZXk7CisgICAgICAgIEJhY2tp
bmdTdG9yZVRpbGUqIHRpbGUgPSBpdC0+dmFsdWU7CiAgICAgICAgIGlmIChpID49IGluZGV4ZXNU
b0ZpbGwuc2l6ZSgpKSB7CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtMTg0OSw3ICsxODQ5LDcgQEAgUGxhdGZvcm06OkludFJlY3QgQmFj
a2luZ1N0b3JlUHJpdmF0ZTo6dmlzaWJsZVRpbGVzUmVjdCgpIGNvbnN0CiAgICAgVGlsZU1hcDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gY3VycmVudE1hcC5lbmQoKTsKICAgICBmb3IgKFRpbGVNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY3VycmVudE1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKICAgICAgICAgVGlsZVJlY3QgdGlsZVJlY3Q7Ci0gICAgICAgIHRpbGVSZWN0LmZpcnN0ID0g
aXQtPmZpcnN0OworICAgICAgICB0aWxlUmVjdC5maXJzdCA9IGl0LT5rZXk7CiAgICAgICAgIHRp
bGVSZWN0LnNlY29uZCA9IHRoaXMtPnRpbGVSZWN0KCk7CiAgICAgICAgIFBsYXRmb3JtOjpJbnRS
ZWN0IHRpbGUgPSBtYXBGcm9tVGlsZXNUb1RyYW5zZm9ybWVkQ29udGVudHModGlsZVJlY3QpOwog
ICAgICAgICBpZiAodGlsZS5pbnRlcnNlY3RzKHZpc2libGVDb250ZW50c1JlY3QoKSkpCkBAIC0x
OTEwLDcgKzE5MTAsNyBAQCB2b2lkIEJhY2tpbmdTdG9yZVByaXZhdGU6OnJlc2V0VGlsZXMoYm9v
bCByZXNldEJhY2tncm91bmQpCiAKICAgICBUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBj
dXJyZW50TWFwLmVuZCgpOwogICAgIGZvciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBj
dXJyZW50TWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgcmVzZXRUaWxlKGl0
LT5maXJzdCwgaXQtPnNlY29uZCwgcmVzZXRCYWNrZ3JvdW5kKTsKKyAgICAgICAgcmVzZXRUaWxl
KGl0LT5rZXksIGl0LT52YWx1ZSwgcmVzZXRCYWNrZ3JvdW5kKTsKIH0KIAogdm9pZCBCYWNraW5n
U3RvcmVQcml2YXRlOjp1cGRhdGVUaWxlcyhib29sIHVwZGF0ZVZpc2libGUsIGJvb2wgaW1tZWRp
YXRlKQpAQCAtMTkyMywxMCArMTkyMywxMCBAQCB2b2lkIEJhY2tpbmdTdG9yZVByaXZhdGU6OnVw
ZGF0ZVRpbGVzKGJvb2wgdXBkYXRlVmlzaWJsZSwgYm9vbCBpbW1lZGlhdGUpCiAKICAgICBUaWxl
TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBjdXJyZW50TWFwLmVuZCgpOwogICAgIGZvciAoVGls
ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjdXJyZW50TWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgewotICAgICAgICBib29sIGlzVmlzaWJsZSA9IGlzVGlsZVZpc2libGUoaXQtPmZpcnN0
KTsKKyAgICAgICAgYm9vbCBpc1Zpc2libGUgPSBpc1RpbGVWaXNpYmxlKGl0LT5rZXkpOwogICAg
ICAgICBpZiAoIXVwZGF0ZVZpc2libGUgJiYgaXNWaXNpYmxlKQogICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIHVwZGF0ZVRpbGUoaXQtPmZpcnN0LCBpbW1lZGlhdGUpOworICAgICAgICB1
cGRhdGVUaWxlKGl0LT5rZXksIGltbWVkaWF0ZSk7CiAgICAgfQogfQogCkBAIC0xOTQ3LDggKzE5
NDcsOCBAQCB2b2lkIEJhY2tpbmdTdG9yZVByaXZhdGU6OnVwZGF0ZVRpbGVzRm9yU2Nyb2xsT3JO
b3RSZW5kZXJlZFJlZ2lvbihib29sIGNoZWNrTG9hZAogCiAgICAgVGlsZU1hcDo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gY3VycmVudE1hcC5lbmQoKTsKICAgICBmb3IgKFRpbGVNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gY3VycmVudE1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgVGlsZUluZGV4IGluZGV4ID0gaXQtPmZpcnN0OwotICAgICAgICBCYWNraW5nU3RvcmVUaWxl
KiB0aWxlID0gaXQtPnNlY29uZDsKKyAgICAgICAgVGlsZUluZGV4IGluZGV4ID0gaXQtPmtleTsK
KyAgICAgICAgQmFja2luZ1N0b3JlVGlsZSogdGlsZSA9IGl0LT52YWx1ZTsKICAgICAgICAgYm9v
bCBpc1Zpc2libGUgPSBpc1RpbGVWaXNpYmxlKGluZGV4KTsKICAgICAgICAgLy8gVGhlIHJlY3Qg
aW4gdHJhbnNmb3JtZWQgY29udGVudHMgY29vcmRpbmF0ZXMuCiAgICAgICAgIFBsYXRmb3JtOjpJ
bnRSZWN0IHJlY3Qob3JpZ2luT2ZUaWxlKGluZGV4KSwgdGlsZVNpemUoKSk7CkBAIC0yMDkxLDgg
KzIwOTEsOCBAQCBCYWNraW5nU3RvcmVQcml2YXRlOjpUaWxlUmVjdExpc3QgQmFja2luZ1N0b3Jl
UHJpdmF0ZTo6bWFwRnJvbVRyYW5zZm9ybWVkQ29udGVudAogICAgIFRpbGVSZWN0TGlzdCB0aWxl
UmVjdExpc3Q7CiAgICAgVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gdGlsZU1hcC5lbmQo
KTsKICAgICBmb3IgKFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdGlsZU1hcC5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgVGlsZUluZGV4IGluZGV4ID0gaXQtPmZpcnN0
OwotICAgICAgICBCYWNraW5nU3RvcmVUaWxlKiB0aWxlID0gaXQtPnNlY29uZDsKKyAgICAgICAg
VGlsZUluZGV4IGluZGV4ID0gaXQtPmtleTsKKyAgICAgICAgQmFja2luZ1N0b3JlVGlsZSogdGls
ZSA9IGl0LT52YWx1ZTsKIAogICAgICAgICAvLyBOZWVkIHRvIG1hcCB0aGUgcmVjdCB0byB0aWxl
IGNvb3JkaW5hdGVzLgogICAgICAgICBQbGF0Zm9ybTo6SW50UmVjdCByID0gcmVjdDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRp
b25QcmVzZW50ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3Vw
cG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmNwcAppbmRleCA2YjI5MjEwLi4yY2Q3YzE3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvTm90
aWZpY2F0aW9uUHJlc2VudGVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5
L1dlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlckltcGwuY3BwCkBAIC04MSw3ICs4
MSw3IEBAIHZvaWQgTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6Y2FuY2VsKE5vdGlmaWNhdGlv
biogbm90aWZpY2F0aW9uKQogICAgIGlmIChpdCA9PSBtX25vdGlmaWNhdGlvbnMuZW5kKCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIG1fcGxhdGZvcm1QcmVzZW50ZXItPmNhbmNlbChzdGQ6OnN0
cmluZyhpdC0+c2Vjb25kLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICBtX3BsYXRmb3JtUHJlc2VudGVy
LT5jYW5jZWwoc3RkOjpzdHJpbmcoaXQtPnZhbHVlLnV0ZjgoKS5kYXRhKCkpKTsKICAgICBtX25v
dGlmaWNhdGlvbnMucmVtb3ZlKGl0KTsKIH0KIApAQCAtMTA4LDEyICsxMDgsMTIgQEAgdm9pZCBO
b3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpvblBlcm1pc3Npb24oY29uc3Qgc3RkOjpzdHJpbmcm
IGRvbWFpbiwgYm9vbCBpc0EKICAgICBTdHJpbmcgZG9tYWluU3RyaW5nID0gU3RyaW5nOjpmcm9t
VVRGOChkb21haW4uY19zdHIoKSk7CiAgICAgUGVybWlzc2lvblJlcXVlc3RNYXA6Oml0ZXJhdG9y
IGl0ID0gbV9wZXJtaXNzaW9uUmVxdWVzdHMuYmVnaW4oKTsKICAgICBmb3IgKDsgaXQgIT0gbV9w
ZXJtaXNzaW9uUmVxdWVzdHMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5maXJzdC0+
dXJsKCkuaG9zdCgpICE9IGRvbWFpblN0cmluZykKKyAgICAgICAgaWYgKGl0LT5rZXktPnVybCgp
Lmhvc3QoKSAhPSBkb21haW5TdHJpbmcpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAg
ICBpZiAoaXNBbGxvd2VkKSB7CiAgICAgICAgICAgICBtX2FsbG93ZWREb21haW5zLmFkZChkb21h
aW5TdHJpbmcpOwotICAgICAgICAgICAgaXQtPnNlY29uZC0+aGFuZGxlRXZlbnQoKTsKKyAgICAg
ICAgICAgIGl0LT52YWx1ZS0+aGFuZGxlRXZlbnQoKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAg
ICAgICBtX2FsbG93ZWREb21haW5zLnJlbW92ZShkb21haW5TdHJpbmcpOwogCkBAIC0xNDQsOSAr
MTQ0LDkgQEAgdm9pZCBOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpub3RpZmljYXRpb25DbGlj
a2VkKGNvbnN0IHN0ZDo6c3RyaW5nJiBpZCkKICAgICBTdHJpbmcgaWRTdHJpbmcgPSBTdHJpbmc6
OmZyb21VVEY4KGlkLmNfc3RyKCkpOwogICAgIE5vdGlmaWNhdGlvbk1hcDo6aXRlcmF0b3IgaXQg
PSBtX25vdGlmaWNhdGlvbnMuYmVnaW4oKTsKICAgICBmb3IgKDsgaXQgIT0gbV9ub3RpZmljYXRp
b25zLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kID09IGlkU3RyaW5nICYm
IGl0LT5maXJzdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSB7Ci0gICAgICAgICAgICBSZWZQ
dHI8Tm90aWZpY2F0aW9uPiBub3RpZmljYXRpb24gPSBpdC0+Zmlyc3Q7Ci0gICAgICAgICAgICBp
dC0+Zmlyc3QtPmRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuY2xpY2tF
dmVudCwgZmFsc2UsIHRydWUpKTsKKyAgICAgICAgaWYgKGl0LT52YWx1ZSA9PSBpZFN0cmluZyAm
JiBpdC0+Zmlyc3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkgeworICAgICAgICAgICAgUmVm
UHRyPE5vdGlmaWNhdGlvbj4gbm90aWZpY2F0aW9uID0gaXQtPmtleTsKKyAgICAgICAgICAgIGl0
LT5rZXktPmRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuY2xpY2tFdmVu
dCwgZmFsc2UsIHRydWUpKTsKICAgICAgICAgICAgIG1fbm90aWZpY2F0aW9ucy5yZW1vdmUobm90
aWZpY2F0aW9uKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvQWJvdXREYXRhLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0Fib3V0RGF0YS5jcHAKaW5kZXgg
NWY1NjVjOS4uMTM0ODA4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dl
YktpdFN1cHBvcnQvQWJvdXREYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkv
V2ViS2l0U3VwcG9ydC9BYm91dERhdGEuY3BwCkBAIC0yMDUsNyArMjA1LDcgQEAgc3RhdGljIHZv
aWQgZHVtcEpTQ1R5cGVDb3VudFNldFRvVGFibGVIVE1MKFN0cmluZyYgdGFibGVIVE1MLCBKU0M6
OlR5cGVDb3VudFNldCoKICAgICAgICAgcmV0dXJuOwogCiAgICAgZm9yIChKU0M6OlR5cGVDb3Vu
dFNldDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHR5cGVDb3VudFNldC0+YmVnaW4oKTsgaXRlciAh
PSB0eXBlQ291bnRTZXQtPmVuZCgpOyArK2l0ZXIpCi0gICAgICAgIHRhYmxlSFRNTCArPSBudW1i
ZXJUb0hUTUxUcihpdGVyLT5maXJzdCwgaXRlci0+c2Vjb25kKTsKKyAgICAgICAgdGFibGVIVE1M
ICs9IG51bWJlclRvSFRNTFRyKGl0ZXItPmtleSwgaXRlci0+dmFsdWUpOwogfQogCiBzdGF0aWMg
U3RyaW5nIG1lbW9yeVBhZ2UoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5
L1dlYktpdFN1cHBvcnQvRnJhbWVMYXllcnMuY3BwIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5
L1dlYktpdFN1cHBvcnQvRnJhbWVMYXllcnMuY3BwCmluZGV4IGI4NzU2NDYuLmViNzIzYWUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0ZyYW1lTGF5
ZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9GcmFt
ZUxheWVycy5jcHAKQEAgLTkxLDcgKzkxLDcgQEAgdm9pZCBGcmFtZUxheWVyczo6cmVtb3ZlTGF5
ZXJCeUZyYW1lKEZyYW1lKiBmcmFtZSkKICAgICBBU1NFUlQoZnJhbWUpOwogICAgIEZyYW1lTGF5
ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9mcmFtZUxheWVycy5maW5kKGZyYW1lKTsKICAgICBpZiAo
aXQgIT0gbV9mcmFtZUxheWVycy5lbmQoKSkgewotICAgICAgICBMYXllcldlYktpdFRocmVhZCog
bGF5ZXIgPSBpdC0+c2Vjb25kOworICAgICAgICBMYXllcldlYktpdFRocmVhZCogbGF5ZXIgPSBp
dC0+dmFsdWU7CiAgICAgICAgIGlmIChsYXllci0+c3VwZXJsYXllcigpKQogICAgICAgICAgICAg
bGF5ZXItPnJlbW92ZUZyb21TdXBlcmxheWVyKCk7CiAgICAgICAgIG1fZnJhbWVMYXllcnMucmVt
b3ZlKGl0KTsKQEAgLTEwNCw3ICsxMDQsNyBAQCB2b2lkIEZyYW1lTGF5ZXJzOjpjb21taXRPbldl
YktpdFRocmVhZChkb3VibGUgc2NhbGUpCiAgICAgQVNTRVJUKG1fcm9vdExheWVyKTsKICAgICBp
ZiAoIWlzUm9vdExheWVyTWFpbkZyYW1lTGF5ZXIoKSkgewogICAgICAgICBmb3IgKEZyYW1lTGF5
ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9mcmFtZUxheWVycy5iZWdpbigpOyBpdCAhPSBtX2ZyYW1l
TGF5ZXJzLmVuZCgpOyArK2l0KQotICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0QWJzb2x1dGVP
ZmZzZXQoZnJhbWVMYXllckFic29sdXRlT2Zmc2V0KGl0LT5maXJzdCkpOworICAgICAgICAgICAg
aXQtPnZhbHVlLT5zZXRBYnNvbHV0ZU9mZnNldChmcmFtZUxheWVyQWJzb2x1dGVPZmZzZXQoaXQt
PmtleSkpOwogICAgIH0KICAgICBtX3Jvb3RMYXllci0+Y29tbWl0T25XZWJLaXRUaHJlYWQoc2Nh
bGUpOwogfQpAQCAtMTEyLDcgKzExMiw3IEBAIHZvaWQgRnJhbWVMYXllcnM6OmNvbW1pdE9uV2Vi
S2l0VGhyZWFkKGRvdWJsZSBzY2FsZSkKIHZvaWQgRnJhbWVMYXllcnM6OmNhbGN1bGF0ZVJvb3RM
YXllcigpCiB7CiAgICAgaWYgKG1fZnJhbWVMYXllcnMuc2l6ZSgpID09IDEgJiYgbV9mcmFtZUxh
eWVycy5iZWdpbigpLT5maXJzdCA9PSBtX3BhZ2VQcml2YXRlLT5tX21haW5GcmFtZSkKLSAgICAg
ICAgbV9yb290TGF5ZXIgPSBtX2ZyYW1lTGF5ZXJzLmJlZ2luKCktPnNlY29uZDsKKyAgICAgICAg
bV9yb290TGF5ZXIgPSBtX2ZyYW1lTGF5ZXJzLmJlZ2luKCktPnZhbHVlOwogICAgIGVsc2UgaWYg
KG1fcm9vdEdyYXBoaWNzTGF5ZXIpCiAgICAgICAgIG1fcm9vdExheWVyID0gbV9yb290R3JhcGhp
Y3NMYXllci0+cGxhdGZvcm1MYXllcigpOwogICAgIGVsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2Vy
LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdlb2xvY2F0aW9uUGVybWlzc2lv
blJlcXVlc3RNYW5hZ2VyLmNwcAppbmRleCA0YzBlZDljLi4xZWVhYzY2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0
TWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViR2VvbG9jYXRp
b25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuY3BwCkBAIC02NCw3ICs2NCw3IEBAIGJvb2wgV2Vi
R2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXI6OnJlbW92ZShjb25zdCBXZWJLaXQ6
OldlYkdlb2xvY2F0aW9uCiAgICAgR2VvbG9jYXRpb25JZE1hcDo6aXRlcmF0b3IgaXQgPSBtX3By
aXZhdGUtPm1fZ2VvbG9jYXRpb25JZE1hcC5maW5kKGdlb2xvY2F0aW9uKTsKICAgICBpZiAoaXQg
PT0gbV9wcml2YXRlLT5tX2dlb2xvY2F0aW9uSWRNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBpZCA9IGl0LT5zZWNvbmQ7CisgICAgaWQgPSBpdC0+dmFsdWU7CiAgICAgbV9w
cml2YXRlLT5tX2dlb2xvY2F0aW9uSWRNYXAucmVtb3ZlKGl0KTsKICAgICBtX3ByaXZhdGUtPm1f
aWRHZW9sb2NhdGlvbk1hcC5yZW1vdmUoaWQpOwogICAgIHJldHVybiB0cnVlOwpAQCAtNzUsNyAr
NzUsNyBAQCBib29sIFdlYkdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyOjpyZW1v
dmUoaW50IGlkLCBXZWJLaXQ6OldlYkdlb2xvY2F0aQogICAgIElkR2VvbG9jYXRpb25NYXA6Oml0
ZXJhdG9yIGl0ID0gbV9wcml2YXRlLT5tX2lkR2VvbG9jYXRpb25NYXAuZmluZChpZCk7CiAgICAg
aWYgKGl0ID09IG1fcHJpdmF0ZS0+bV9pZEdlb2xvY2F0aW9uTWFwLmVuZCgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgR2VvbG9jYXRpb24qIGdlb2xvY2F0aW9uID0gaXQtPnNlY29uZDsK
KyAgICBHZW9sb2NhdGlvbiogZ2VvbG9jYXRpb24gPSBpdC0+dmFsdWU7CiAgICAgcGVybWlzc2lv
blJlcXVlc3QgPSBXZWJHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0KGdlb2xvY2F0aW9uKTsK
ICAgICBtX3ByaXZhdGUtPm1faWRHZW9sb2NhdGlvbk1hcC5yZW1vdmUoaXQpOwogICAgIG1fcHJp
dmF0ZS0+bV9nZW9sb2NhdGlvbklkTWFwLnJlbW92ZShnZW9sb2NhdGlvbik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJNZXRhZGF0YS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJNZXRhZGF0YS5jcHAKaW5kZXggMDFkODc4YS4uZjJm
YzI4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCTWV0YWRh
dGEuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQk1ldGFkYXRhLmNw
cApAQCAtNDYsNyArNDYsNyBAQCBXZWJJREJNZXRhZGF0YTo6V2ViSURCTWV0YWRhdGEoY29uc3Qg
V2ViQ29yZTo6SURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEpCiAKICAgICBzaXplX3QgaSA9
IDA7CiAgICAgZm9yIChJREJEYXRhYmFzZU1ldGFkYXRhOjpPYmplY3RTdG9yZU1hcDo6Y29uc3Rf
aXRlcmF0b3Igc3RvcmVJdGVyYXRvciA9IG1ldGFkYXRhLm9iamVjdFN0b3Jlcy5iZWdpbigpOyBz
dG9yZUl0ZXJhdG9yICE9IG1ldGFkYXRhLm9iamVjdFN0b3Jlcy5lbmQoKTsgKytzdG9yZUl0ZXJh
dG9yKSB7Ci0gICAgICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3Jl
ID0gc3RvcmVJdGVyYXRvci0+c2Vjb25kOworICAgICAgICBjb25zdCBJREJPYmplY3RTdG9yZU1l
dGFkYXRhJiBvYmplY3RTdG9yZSA9IHN0b3JlSXRlcmF0b3ItPnZhbHVlOwogICAgICAgICBPYmpl
Y3RTdG9yZSB3ZWJPYmplY3RTdG9yZTsKICAgICAgICAgd2ViT2JqZWN0U3RvcmUubmFtZSA9IG9i
amVjdFN0b3JlLm5hbWU7CiAgICAgICAgIHdlYk9iamVjdFN0b3JlLmtleVBhdGggPSBvYmplY3RT
dG9yZS5rZXlQYXRoOwpAQCAtNTUsNyArNTUsNyBAQCBXZWJJREJNZXRhZGF0YTo6V2ViSURCTWV0
YWRhdGEoY29uc3QgV2ViQ29yZTo6SURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEpCiAKICAg
ICAgICAgc2l6ZV90IGogPSAwOwogICAgICAgICBmb3IgKElEQk9iamVjdFN0b3JlTWV0YWRhdGE6
OkluZGV4TWFwOjpjb25zdF9pdGVyYXRvciBpbmRleEl0ZXJhdG9yID0gb2JqZWN0U3RvcmUuaW5k
ZXhlcy5iZWdpbigpOyBpbmRleEl0ZXJhdG9yICE9IG9iamVjdFN0b3JlLmluZGV4ZXMuZW5kKCk7
ICsraW5kZXhJdGVyYXRvcikgewotICAgICAgICAgICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYg
aW5kZXggPSBpbmRleEl0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgICAgICBjb25zdCBJREJJbmRl
eE1ldGFkYXRhJiBpbmRleCA9IGluZGV4SXRlcmF0b3ItPnZhbHVlOwogICAgICAgICAgICAgSW5k
ZXggd2ViSW5kZXg7CiAgICAgICAgICAgICB3ZWJJbmRleC5uYW1lID0gaW5kZXgubmFtZTsKICAg
ICAgICAgICAgIHdlYkluZGV4LmtleVBhdGggPSBpbmRleC5rZXlQYXRoOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW50ZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkludGVudC5jcHAKaW5kZXggNTU3NzVlYy4uMDQxYzdmMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW50ZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJbnRlbnQuY3BwCkBAIC0xODgsNyArMTg4LDcgQEAg
V2ViU3RyaW5nIFdlYkludGVudDo6ZXh0cmFzVmFsdWUoY29uc3QgV2ViU3RyaW5nJiBuYW1lKSBj
b25zdAogICAgIFdURjo6SGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIHZh
bCA9IG1fcHJpdmF0ZS0+ZXh0cmFzKCkuZmluZChuYW1lKTsKICAgICBpZiAodmFsID09IG1fcHJp
dmF0ZS0+ZXh0cmFzKCkuZW5kKCkpCiAgICAgICAgIHJldHVybiBXZWJTdHJpbmcoKTsKLSAgICBy
ZXR1cm4gdmFsLT5zZWNvbmQ7CisgICAgcmV0dXJuIHZhbC0+dmFsdWU7CiAjZWxzZQogICAgIHJl
dHVybiBXZWJTdHJpbmcoKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9XZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyVGVzdC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXJUZXN0LmNw
cAppbmRleCAzNTg5ODNiLi4yNDUxNGNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL1dlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXJUZXN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXJUZXN0
LmNwcApAQCAtMTAzLDEwICsxMDMsMTAgQEAgVEVTVF9GKFdlYlNvY2tldEV4dGVuc2lvbkRpc3Bh
dGNoZXJUZXN0LCBUZXN0UGFyYW1ldGVycykKICAgICBFWFBFQ1RfRVEoMiwgbV9wYXJzZWRQYXJh
bWV0ZXJzWzBdLnNpemUoKSk7CiAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46Oml0ZXJhdG9y
IHBhcmFtZXRlciA9IG1fcGFyc2VkUGFyYW1ldGVyc1swXS5maW5kKCJtYXgtY2hhbm5lbHMiKTsK
ICAgICBFWFBFQ1RfVFJVRShwYXJhbWV0ZXIgIT0gbV9wYXJzZWRQYXJhbWV0ZXJzWzBdLmVuZCgp
KTsKLSAgICBFWFBFQ1RfRVEoIjQiLCBwYXJhbWV0ZXItPnNlY29uZCk7CisgICAgRVhQRUNUX0VR
KCI0IiwgcGFyYW1ldGVyLT52YWx1ZSk7CiAgICAgcGFyYW1ldGVyID0gbV9wYXJzZWRQYXJhbWV0
ZXJzWzBdLmZpbmQoImZsb3ctY29udHJvbCIpOwogICAgIEVYUEVDVF9UUlVFKHBhcmFtZXRlciAh
PSBtX3BhcnNlZFBhcmFtZXRlcnNbMF0uZW5kKCkpOwotICAgIEVYUEVDVF9UUlVFKHBhcmFtZXRl
ci0+c2Vjb25kLmlzTnVsbCgpKTsKKyAgICBFWFBFQ1RfVFJVRShwYXJhbWV0ZXItPnZhbHVlLmlz
TnVsbCgpKTsKIH0KIAogVEVTVF9GKFdlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXJUZXN0LCBU
ZXN0TXVsdGlwbGUpCkBAIC0xMzEsMTIgKzEzMSwxMiBAQCBURVNUX0YoV2ViU29ja2V0RXh0ZW5z
aW9uRGlzcGF0Y2hlclRlc3QsIFRlc3RNdWx0aXBsZSkKICAgICAgICAgY29uc3QgSGFzaE1hcDxT
dHJpbmcsIFN0cmluZz4mIHBhcnNlZFBhcmFtZXRlcnMgPSBtX3BhcnNlZFBhcmFtZXRlcnNbaV07
CiAgICAgICAgIEVYUEVDVF9FUShleHBlY3RlZFtpXS5wYXJhbWV0ZXJzLnNpemUoKSwgbV9wYXJz
ZWRQYXJhbWV0ZXJzW2ldLnNpemUoKSk7CiAgICAgICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIFN0
cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ZXJhdG9yID0gZXhwZWN0ZWRQYXJhbWV0ZXJzLmJlZ2lu
KCk7IGl0ZXJhdG9yICE9IGV4cGVjdGVkUGFyYW1ldGVycy5lbmQoKTsgKytpdGVyYXRvcikgewot
ICAgICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIHBhcnNl
ZCA9IHBhcnNlZFBhcmFtZXRlcnMuZmluZChpdGVyYXRvci0+Zmlyc3QpOworICAgICAgICAgICAg
SGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIHBhcnNlZCA9IHBhcnNlZFBh
cmFtZXRlcnMuZmluZChpdGVyYXRvci0+a2V5KTsKICAgICAgICAgICAgIEVYUEVDVF9UUlVFKHBh
cnNlZCAhPSBwYXJzZWRQYXJhbWV0ZXJzLmVuZCgpKTsKLSAgICAgICAgICAgIGlmIChpdGVyYXRv
ci0+c2Vjb25kLmlzTnVsbCgpKQotICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVFKHBhcnNlZC0+
c2Vjb25kLmlzTnVsbCgpKTsKKyAgICAgICAgICAgIGlmIChpdGVyYXRvci0+dmFsdWUuaXNOdWxs
KCkpCisgICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUocGFyc2VkLT52YWx1ZS5pc051bGwoKSk7
CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgRVhQRUNUX0VRKGl0ZXJhdG9yLT5z
ZWNvbmQsIHBhcnNlZC0+c2Vjb25kKTsKKyAgICAgICAgICAgICAgICBFWFBFQ1RfRVEoaXRlcmF0
b3ItPnZhbHVlLCBwYXJzZWQtPnZhbHVlKTsKICAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9y
dEVmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJl
ZVN1cHBvcnRFZmwuY3BwCmluZGV4IDRiODA0ZGQuLjc2ZmI2ODQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbC5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBw
b3J0RWZsLmNwcApAQCAtNTQ4LDcgKzU0OCw3IEBAIHZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0
RWZsOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZChjb25zdCBFdmFzX09iamVjdCoKICAg
ICBlbHNlIHsKICAgICAgICAgV1RGOjpIYXNoTWFwPGludCwgUmVmUHRyPFdlYkNvcmU6OkRPTVdy
YXBwZXJXb3JsZCA+ID46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gd29ybGRNYXAuZmluZCh3b3JsZElE
KTsKICAgICAgICAgaWYgKGl0ICE9IHdvcmxkTWFwLmVuZCgpKQotICAgICAgICAgICAgc2NyaXB0
V29ybGQgPSAoKml0KS5zZWNvbmQ7CisgICAgICAgICAgICBzY3JpcHRXb3JsZCA9ICgqaXQpLnZh
bHVlOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIHNjcmlwdFdvcmxkID0gV2ViQ29yZTo6
U2NyaXB0Q29udHJvbGxlcjo6Y3JlYXRlV29ybGQoKTsKICAgICAgICAgICAgIHdvcmxkTWFwLnNl
dCh3b3JsZElELCBzY3JpcHRXb3JsZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9X
ZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNFZmwuY3BwIGIvU291cmNlL1dlYktpdC9l
ZmwvV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzRWZsLmNwcAppbmRleCA1YjQwMzA4
Li4wOThkMzAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9Q
bGF0Zm9ybVN0cmF0ZWdpZXNFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVT
dXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc0VmbC5jcHAKQEAgLTk5LDggKzk5LDggQEAgdm9pZCBQ
bGF0Zm9ybVN0cmF0ZWdpZXNFZmw6OmdldFBsdWdpbkluZm8oY29uc3QgUGFnZSogcGFnZSwgVmVj
dG9yPFBsdWdpbkluZm8+JgogICAgICAgICBmb3IgKE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7CiAgICAgICAgICAgICBNaW1lQ2xhc3NJbmZvIG1pbWU7CiAKLSAgICAgICAgICAgIG1p
bWUudHlwZSA9IGl0LT5maXJzdDsKLSAgICAgICAgICAgIG1pbWUuZGVzYyA9IGl0LT5zZWNvbmQ7
CisgICAgICAgICAgICBtaW1lLnR5cGUgPSBpdC0+a2V5OworICAgICAgICAgICAgbWltZS5kZXNj
ID0gaXQtPnZhbHVlOwogICAgICAgICAgICAgbWltZS5leHRlbnNpb25zID0gcGFja2FnZS0+bWlt
ZVRvRXh0ZW5zaW9ucygpLmdldChtaW1lLnR5cGUpOwogICAgICAgICAgICAgcGx1Z2luSW5mby5t
aW1lcy5hcHBlbmQobWltZSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
ZWZsL2V3ay9ld2tfaW50ZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfaW50ZW50
LmNwcAppbmRleCA3NmMyZDY4Li44M2JjZTg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Vm
bC9ld2svZXdrX2ludGVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19pbnRl
bnQuY3BwCkBAIC0xMjAsNyArMTIwLDcgQEAgY29uc3QgY2hhciogZXdrX2ludGVudF9leHRyYV9n
ZXQoY29uc3QgRXdrX0ludGVudCogaW50ZW50LCBjb25zdCBjaGFyKiBrZXkpCiAgICAgV1RGOjpI
YXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgdmFsID0gY29yZS0+ZXh0cmFz
KCkuZmluZChTdHJpbmc6OmZyb21VVEY4KGtleSkpOwogICAgIGlmICh2YWwgPT0gY29yZS0+ZXh0
cmFzKCkuZW5kKCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBlaW5hX3N0cmluZ3No
YXJlX2FkZCh2YWwtPnNlY29uZC51dGY4KCkuZGF0YSgpKTsKKyAgICByZXR1cm4gZWluYV9zdHJp
bmdzaGFyZV9hZGQodmFsLT52YWx1ZS51dGY4KCkuZGF0YSgpKTsKICNlbHNlCiAgICAgcmV0dXJu
IDA7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0
L1BsYXRmb3JtU3RyYXRlZ2llc0d0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3Vw
cG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNHdGsuY3BwCmluZGV4IDI5MjE3M2EuLjkxMDNjODQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRl
Z2llc0d0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvUGxhdGZv
cm1TdHJhdGVnaWVzR3RrLmNwcApAQCAtODgsOCArODgsOCBAQCB2b2lkIFBsYXRmb3JtU3RyYXRl
Z2llc0d0azo6Z2V0UGx1Z2luSW5mbyhjb25zdCBQYWdlKiBwYWdlLCBWZWN0b3I8UGx1Z2luSW5m
bz4mCiAgICAgICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
bWltZVRvRGVzY3JpcHRpb25zLmVuZCgpOwogICAgICAgICBmb3IgKE1JTUVUb0Rlc2NyaXB0aW9u
c01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBNaW1lQ2xhc3NJbmZvIG1pbWU7Ci0gICAgICAg
ICAgICBtaW1lLnR5cGUgPSBpdC0+Zmlyc3Q7Ci0gICAgICAgICAgICBtaW1lLmRlc2MgPSBpdC0+
c2Vjb25kOworICAgICAgICAgICAgbWltZS50eXBlID0gaXQtPmtleTsKKyAgICAgICAgICAgIG1p
bWUuZGVzYyA9IGl0LT52YWx1ZTsKICAgICAgICAgICAgIG1pbWUuZXh0ZW5zaW9ucyA9IHBhY2th
Z2UtPm1pbWVUb0V4dGVuc2lvbnMoKS5nZXQobWltZS50eXBlKTsKICAgICAgICAgICAgIHBsdWdp
bkluZm8ubWltZXMuYXBwZW5kKG1pbWUpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZmF2aWNvbmRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXRmYXZpY29uZGF0YWJhc2UuY3BwCmluZGV4IDZiYWJmZTQuLmIz
YTFkNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRmYXZpY29u
ZGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRmYXZpY29u
ZGF0YWJhc2UuY3BwCkBAIC02MTQsMTggKzYxNCwxOCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRGYXZp
Y29uRGF0YWJhc2VJbXBvcnRGaW5pc2hlZChXZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRhdGFiYXNl
KQogICAgIFZlY3RvcjxTdHJpbmc+IHRvRGVsZXRlVVJMczsKICAgICBQZW5kaW5nSWNvblJlcXVl
c3RNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGRhdGFiYXNlLT5wcml2LT5wZW5kaW5nSWNvblJl
cXVlc3RzLmVuZCgpOwogICAgIGZvciAoUGVuZGluZ0ljb25SZXF1ZXN0TWFwOjpjb25zdF9pdGVy
YXRvciBpdGVyID0gZGF0YWJhc2UtPnByaXYtPnBlbmRpbmdJY29uUmVxdWVzdHMuYmVnaW4oKTsg
aXRlciAhPSBlbmQ7ICsraXRlcikgewotICAgICAgICBTdHJpbmcgaWNvblVSTCA9IGljb25EYXRh
YmFzZSgpLnN5bmNocm9ub3VzSWNvblVSTEZvclBhZ2VVUkwoaXRlci0+Zmlyc3QpOworICAgICAg
ICBTdHJpbmcgaWNvblVSTCA9IGljb25EYXRhYmFzZSgpLnN5bmNocm9ub3VzSWNvblVSTEZvclBh
Z2VVUkwoaXRlci0+a2V5KTsKICAgICAgICAgaWYgKCFpY29uVVJMLmlzRW1wdHkoKSkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIFBlbmRpbmdJY29uUmVxdWVzdFZlY3RvciogaWNv
bnMgPSBpdGVyLT5zZWNvbmQ7CisgICAgICAgIFBlbmRpbmdJY29uUmVxdWVzdFZlY3RvciogaWNv
bnMgPSBpdGVyLT52YWx1ZTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpY29ucy0+
c2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIFBlbmRpbmdJY29uUmVxdWVzdCogcmVxdWVzdCA9
IGljb25zLT5hdChpKS5nZXQoKTsKICAgICAgICAgICAgIGlmIChyZXF1ZXN0LT5hc3luY1Jlc3Vs
dCgpKQogICAgICAgICAgICAgICAgIHJlcXVlc3QtPmFzeW5jUmVzdWx0Q29tcGxldGUoMCk7CiAg
ICAgICAgIH0KIAotICAgICAgICB0b0RlbGV0ZVVSTHMuYXBwZW5kKGl0ZXItPmZpcnN0KTsKKyAg
ICAgICAgdG9EZWxldGVVUkxzLmFwcGVuZChpdGVyLT5rZXkpOwogICAgIH0KIAogICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgdG9EZWxldGVVUkxzLnNpemUoKTsgKytpKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnBsdWdpbi5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0d2VicGx1Z2luLmNwcAppbmRleCBlMDNiMWVhLi4wMWQwYmI1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2VicGx1Z2luLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2VicGx1Z2luLmNwcApAQCAt
MjM3LDEwICsyMzcsMTAgQEAgR1NMaXN0KiB3ZWJraXRfd2ViX3BsdWdpbl9nZXRfbWltZXR5cGVz
KFdlYktpdFdlYlBsdWdpbiogcGx1Z2luKQogCiAgICAgZm9yIChNSU1FVG9EZXNjcmlwdGlvbnNN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWltZVRvRGVzY3JpcHRpb25zLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgewogICAgICAgICBXZWJLaXRXZWJQbHVnaW5NSU1FVHlwZSogbWltZVR5cGUg
PSBnX3NsaWNlX25ldzAoV2ViS2l0V2ViUGx1Z2luTUlNRVR5cGUpOwotICAgICAgICBtaW1lVHlw
ZS0+bmFtZSA9IGdfc3RyZHVwKGl0LT5maXJzdC51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgbWlt
ZVR5cGUtPmRlc2NyaXB0aW9uID0gZ19zdHJkdXAoaXQtPnNlY29uZC51dGY4KCkuZGF0YSgpKTsK
KyAgICAgICAgbWltZVR5cGUtPm5hbWUgPSBnX3N0cmR1cChpdC0+a2V5LnV0ZjgoKS5kYXRhKCkp
OworICAgICAgICBtaW1lVHlwZS0+ZGVzY3JpcHRpb24gPSBnX3N0cmR1cChpdC0+dmFsdWUudXRm
OCgpLmRhdGEoKSk7CiAKLSAgICAgICAgVmVjdG9yPFN0cmluZz4gZXh0ZW5zaW9ucyA9IHByaXYt
PmNvcmVQbHVnaW4tPm1pbWVUb0V4dGVuc2lvbnMoKS5nZXQoaXQtPmZpcnN0KTsKKyAgICAgICAg
VmVjdG9yPFN0cmluZz4gZXh0ZW5zaW9ucyA9IHByaXYtPmNvcmVQbHVnaW4tPm1pbWVUb0V4dGVu
c2lvbnMoKS5nZXQoaXQtPmtleSk7CiAgICAgICAgIG1pbWVUeXBlLT5leHRlbnNpb25zID0gc3Rh
dGljX2Nhc3Q8Z2NoYXIqKj4oZ19tYWxsb2MwKHNpemVvZihjaGFyKikgKiAoZXh0ZW5zaW9ucy5z
aXplKCkgKyAxKSkpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXh0ZW5zaW9u
cy5zaXplKCk7IGkrKykKICAgICAgICAgICAgIG1pbWVUeXBlLT5leHRlbnNpb25zW2ldID0gZ19z
dHJkdXAoZXh0ZW5zaW9uc1tpXS51dGY4KCkuZGF0YSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvbWFjL0hpc3RvcnkvV2ViSGlzdG9yeS5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL0hpc3Rv
cnkvV2ViSGlzdG9yeS5tbQppbmRleCA2OTY0ZmM5Li5lNzgxZDMyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L21hYy9IaXN0b3J5L1dlYkhpc3RvcnkubW0KKysrIGIvU291cmNlL1dlYktpdC9t
YWMvSGlzdG9yeS9XZWJIaXN0b3J5Lm1tCkBAIC0yMzgsNyArMjM4LDcgQEAgc3RhdGljIGlubGlu
ZSBXZWJIaXN0b3J5RGF0ZUtleSBkYXRlS2V5KE5TVGltZUludGVydmFsIGRhdGUpCiAgICAgICAg
IHJldHVybiBOTzsKIAogICAgIERhdGVUb0VudHJpZXNNYXA6Oml0ZXJhdG9yIGl0ID0gX2VudHJp
ZXNCeURhdGUtPmZpbmQoZGF0ZUtleSk7Ci0gICAgTlNNdXRhYmxlQXJyYXkgKmVudHJpZXNGb3JE
YXRlID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICBOU011dGFibGVBcnJheSAqZW50cmllc0ZvckRh
dGUgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgW2VudHJpZXNGb3JEYXRlIHJlbW92ZU9iamVjdElk
ZW50aWNhbFRvOmVudHJ5XTsKICAgICAKICAgICAvLyByZW1vdmUgdGhpcyBkYXRlIGVudGlyZWx5
IGlmIHRoZXJlIGFyZSBubyBvdGhlciBlbnRyaWVzIG9uIGl0CkBAIC00NDAsNyArNDQwLDcgQEAg
c3RhdGljIGlubGluZSBXZWJIaXN0b3J5RGF0ZUtleSBkYXRlS2V5KE5TVGltZUludGVydmFsIGRh
dGUpCiAgICAgICAgIGRheXNBc1RpbWVJbnRlcnZhbHMucmVzZXJ2ZUNhcGFjaXR5KF9lbnRyaWVz
QnlEYXRlLT5zaXplKCkpOwogICAgICAgICBEYXRlVG9FbnRyaWVzTWFwOjpjb25zdF9pdGVyYXRv
ciBlbmQgPSBfZW50cmllc0J5RGF0ZS0+ZW5kKCk7CiAgICAgICAgIGZvciAoRGF0ZVRvRW50cmll
c01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBfZW50cmllc0J5RGF0ZS0+YmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KQotICAgICAgICAgICAgZGF5c0FzVGltZUludGVydmFscy5hcHBlbmQoaXQtPmZp
cnN0KTsKKyAgICAgICAgICAgIGRheXNBc1RpbWVJbnRlcnZhbHMuYXBwZW5kKGl0LT5rZXkpOwog
CiAgICAgICAgIHNvcnQoZGF5c0FzVGltZUludGVydmFscy5iZWdpbigpLCBkYXlzQXNUaW1lSW50
ZXJ2YWxzLmVuZCgpKTsKICAgICAgICAgc2l6ZV90IGNvdW50ID0gZGF5c0FzVGltZUludGVydmFs
cy5zaXplKCk7CkBAIC04OTcsNyArODk3LDcgQEAgV2ViSGlzdG9yeVdyaXRlcjo6V2ViSGlzdG9y
eVdyaXRlcihEYXRlVG9FbnRyaWVzTWFwKiBlbnRyaWVzQnlEYXRlKQogICAgIG1fZGF0ZUtleXMu
cmVzZXJ2ZUNhcGFjaXR5KG1fZW50cmllc0J5RGF0ZS0+c2l6ZSgpKTsKICAgICBEYXRlVG9FbnRy
aWVzTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2VudHJpZXNCeURhdGUtPmVuZCgpOwogICAg
IGZvciAoRGF0ZVRvRW50cmllc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2VudHJpZXNCeURh
dGUtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgbV9kYXRlS2V5cy5hcHBlbmQo
aXQtPmZpcnN0KTsKKyAgICAgICAgbV9kYXRlS2V5cy5hcHBlbmQoaXQtPmtleSk7CiAgICAgc29y
dChtX2RhdGVLZXlzLmJlZ2luKCksIG1fZGF0ZUtleXMuZW5kKCkpOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tIGIvU291cmNlL1dl
YktpdC9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbQppbmRleCAyOTZkZDZiLi44ZGU2MzEz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1t
CisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW0KQEAgLTg5
LDggKzg5LDggQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAgICAgT3duUHRyPFR5cGVDb3Vu
dFNldD4gY291bnRzKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5wcm90
ZWN0ZWRPYmplY3RUeXBlQ291bnRzKCkpOwogICAgIEhhc2hDb3VudGVkU2V0PGNvbnN0IGNoYXIq
Pjo6aXRlcmF0b3IgZW5kID0gY291bnRzLT5lbmQoKTsKICAgICBmb3IgKEhhc2hDb3VudGVkU2V0
PGNvbnN0IGNoYXIqPjo6aXRlcmF0b3IgaXQgPSBjb3VudHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0LT5zZWNvbmQ7ICsraSkK
LSAgICAgICAgICAgIFtyZXN1bHQgYWRkT2JqZWN0OltOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0
cmluZzppdC0+Zmlyc3RdXTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0LT52
YWx1ZTsgKytpKQorICAgICAgICAgICAgW3Jlc3VsdCBhZGRPYmplY3Q6W05TU3RyaW5nIHN0cmlu
Z1dpdGhVVEY4U3RyaW5nOml0LT5rZXldXTsKICAgICAKICAgICByZXR1cm4gcmVzdWx0OwogfQpA
QCAtMTA0LDggKzEwNCw4IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogICAgIE93blB0cjxU
eXBlQ291bnRTZXQ+IGNvdW50cyhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhl
YXAub2JqZWN0VHlwZUNvdW50cygpKTsKICAgICBIYXNoQ291bnRlZFNldDxjb25zdCBjaGFyKj46
Oml0ZXJhdG9yIGVuZCA9IGNvdW50cy0+ZW5kKCk7CiAgICAgZm9yIChIYXNoQ291bnRlZFNldDxj
b25zdCBjaGFyKj46Oml0ZXJhdG9yIGl0ID0gY291bnRzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdC0+c2Vjb25kOyArK2kpCi0g
ICAgICAgICAgICBbcmVzdWx0IGFkZE9iamVjdDpbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJp
bmc6aXQtPmZpcnN0XV07CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdC0+dmFs
dWU7ICsraSkKKyAgICAgICAgICAgIFtyZXN1bHQgYWRkT2JqZWN0OltOU1N0cmluZyBzdHJpbmdX
aXRoVVRGOFN0cmluZzppdC0+a2V5XV07CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2lu
SG9zdE1hbmFnZXIubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2Fw
ZVBsdWdpbkhvc3RNYW5hZ2VyLm1tCmluZGV4IGU0OWQ1MGYuLjNjZTA4OWIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdE1hbmFn
ZXIubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVn
aW5Ib3N0TWFuYWdlci5tbQpAQCAtNzMsNyArNzMsNyBAQCBOZXRzY2FwZVBsdWdpbkhvc3RQcm94
eSogTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlcjo6aG9zdEZvclBsdWdpbihjb25zdCBXVEY6OlN0
cgogICAgIAogICAgIC8vIFRoZSBwYWNrYWdlIHdhcyBhbHJlYWR5IGluIHRoZSBtYXAsIGp1c3Qg
cmV0dXJuIGl0LgogICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJldHVybiBy
ZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+
dmFsdWU7CiAgICAgICAgIAogICAgIG1hY2hfcG9ydF90IGNsaWVudFBvcnQ7CiAgICAgaWYgKG1h
Y2hfcG9ydF9hbGxvY2F0ZShtYWNoX3Rhc2tfc2VsZigpLCBNQUNIX1BPUlRfUklHSFRfUkVDRUlW
RSwgJmNsaWVudFBvcnQpICE9IEtFUk5fU1VDQ0VTUykgewpAQCAtOTUsNyArOTUsNyBAQCBOZXRz
Y2FwZVBsdWdpbkhvc3RQcm94eSogTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlcjo6aG9zdEZvclBs
dWdpbihjb25zdCBXVEY6OlN0cgogICAgIAogICAgIE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5KiBo
b3N0UHJveHkgPSBuZXcgTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkoY2xpZW50UG9ydCwgcGx1Z2lu
SG9zdFBvcnQsIHBsdWdpbkhvc3RQU04sIHNob3VsZENhY2hlTWlzc2luZ1Byb3BlcnRpZXNBbmRN
ZXRob2RzKTsKICAgICAKLSAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IGhvc3RQcm94eTsK
KyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gaG9zdFByb3h5OwogICAgIAogICAgIHJldHVy
biBob3N0UHJveHk7CiB9CkBAIC0yMDQsNyArMjA0LDcgQEAgdm9pZCBOZXRzY2FwZVBsdWdpbkhv
c3RNYW5hZ2VyOjpwbHVnaW5Ib3N0RGllZChOZXRzY2FwZVBsdWdpbkhvc3RQcm94eSogcGx1Z2lu
SG8KIAogICAgIC8vIFRoaXMgaGFzIE8obikgY29tcGxleGl0eSBidXQgdGhlIG51bWJlciBvZiBh
Y3RpdmUgcGx1Zy1pbiBob3N0cyBpcyB2ZXJ5IHNtYWxsIHNvIGl0IHNob3VsZG4ndCBtYXR0ZXIu
CiAgICAgZm9yIChQbHVnaW5Ib3N0TWFwOjppdGVyYXRvciBpdCA9IG1fcGx1Z2luSG9zdHMuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kID09IHBsdWdp
bkhvc3QpIHsKKyAgICAgICAgaWYgKGl0LT52YWx1ZSA9PSBwbHVnaW5Ib3N0KSB7CiAgICAgICAg
ICAgICBtX3BsdWdpbkhvc3RzLnJlbW92ZShpdCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KQEAgLTI4Niw3ICsyODYsNyBAQCB2b2lkIE5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXI6
OmRpZENyZWF0ZVdpbmRvdygpCiAgICAgLy8gU2VlIGlmIGFueSBvZiBvdXIgaG9zdHMgYXJlIGlu
IGZ1bGwtc2NyZWVuIG1vZGUuCiAgICAgUGx1Z2luSG9zdE1hcDo6aXRlcmF0b3IgZW5kID0gbV9w
bHVnaW5Ib3N0cy5lbmQoKTsKICAgICBmb3IgKFBsdWdpbkhvc3RNYXA6Oml0ZXJhdG9yIGl0ID0g
bV9wbHVnaW5Ib3N0cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgTmV0c2Nh
cGVQbHVnaW5Ib3N0UHJveHkqIGhvc3RQcm94eSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIE5ldHNj
YXBlUGx1Z2luSG9zdFByb3h5KiBob3N0UHJveHkgPSBpdC0+dmFsdWU7CiAgICAgICAgIAogICAg
ICAgICBpZiAoIWhvc3RQcm94eS0+aXNNZW51QmFyVmlzaWJsZSgpKSB7CiAgICAgICAgICAgICAv
LyBNYWtlIG91cnNlbHZlcyB0aGUgZnJvbnQgcHJvY2Vzcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdFByb3h5Lm1tIGIvU291
cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkubW0K
aW5kZXggYWY2ZjJiZS4uMGZiMjZkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvUGx1
Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkubW0KKysrIGIvU291cmNlL1dlYktp
dC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkubW0KQEAgLTE0NCw3
ICsxNDQsNyBAQCB2b2lkIE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5OjpwbHVnaW5Ib3N0RGllZCgp
CiAgIAogICAgIFBsdWdpbkluc3RhbmNlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBpbnN0YW5j
ZXMuZW5kKCk7CiAgICAgZm9yIChQbHVnaW5JbnN0YW5jZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBpbnN0YW5jZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25k
LT5wbHVnaW5Ib3N0RGllZCgpOworICAgICAgICBpdC0+dmFsdWUtPnBsdWdpbkhvc3REaWVkKCk7
CiAgICAgCiAgICAgTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlcjo6c2hhcmVkKCkucGx1Z2luSG9z
dERpZWQodGhpcyk7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5z
L0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW0gYi9Tb3VyY2UvV2ViS2l0L21h
Yy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW0KaW5kZXggNGE3
ZDNkMi4uYWVhNTdmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0
ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFj
L1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5tbQpAQCAtMTQ1LDcg
KzE0NSw3IEBAIHVpbnQzMl90IE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6TG9jYWxPYmpl
Y3RNYXA6OmlkRm9yT2JqZWN0KEpTR2xvYmFsRGF0YSYKICAgICAKICAgICBIYXNoTWFwPEpTQzo6
SlNPYmplY3QqLCBwYWlyPHVpbnQzMl90LCB1aW50MzJfdD4gPjo6aXRlcmF0b3IgaXRlciA9IG1f
anNPYmplY3RUb0lETWFwLmZpbmQob2JqZWN0KTsKICAgICBpZiAoaXRlciAhPSBtX2pzT2JqZWN0
VG9JRE1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0ZXItPnNlY29uZC5maXJzdDsKKyAgICAg
ICAgcmV0dXJuIGl0ZXItPnZhbHVlLmZpcnN0OwogICAgIAogICAgIGRvIHsKICAgICAgICAgb2Jq
ZWN0SUQgPSArK21fb2JqZWN0SURDb3VudGVyOwpAQCAtMTYyLDcgKzE2Miw3IEBAIHZvaWQgTmV0
c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpMb2NhbE9iamVjdE1hcDo6cmV0YWluKEpTQzo6SlNP
YmplY3QqIG9iamVjdCkKICAgICBIYXNoTWFwPEpTQzo6SlNPYmplY3QqLCBwYWlyPHVpbnQzMl90
LCB1aW50MzJfdD4gPjo6aXRlcmF0b3IgaXRlciA9IG1fanNPYmplY3RUb0lETWFwLmZpbmQob2Jq
ZWN0KTsKICAgICBBU1NFUlQoaXRlciAhPSBtX2pzT2JqZWN0VG9JRE1hcC5lbmQoKSk7CiAKLSAg
ICBpdGVyLT5zZWNvbmQuc2Vjb25kID0gaXRlci0+c2Vjb25kLnNlY29uZCArIDE7CisgICAgaXRl
ci0+dmFsdWUuc2Vjb25kID0gaXRlci0+dmFsdWUuc2Vjb25kICsgMTsKIH0KIAogdm9pZCBOZXRz
Y2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OkxvY2FsT2JqZWN0TWFwOjpyZWxlYXNlKEpTQzo6SlNP
YmplY3QqIG9iamVjdCkKQEAgLTE3MCwxMCArMTcwLDEwIEBAIHZvaWQgTmV0c2NhcGVQbHVnaW5J
bnN0YW5jZVByb3h5OjpMb2NhbE9iamVjdE1hcDo6cmVsZWFzZShKU0M6OkpTT2JqZWN0KiBvYmpl
Y3QpCiAgICAgSGFzaE1hcDxKU0M6OkpTT2JqZWN0KiwgcGFpcjx1aW50MzJfdCwgdWludDMyX3Q+
ID46Oml0ZXJhdG9yIGl0ZXIgPSBtX2pzT2JqZWN0VG9JRE1hcC5maW5kKG9iamVjdCk7CiAgICAg
QVNTRVJUKGl0ZXIgIT0gbV9qc09iamVjdFRvSURNYXAuZW5kKCkpOwogCi0gICAgQVNTRVJUKGl0
ZXItPnNlY29uZC5zZWNvbmQgPiAwKTsKLSAgICBpdGVyLT5zZWNvbmQuc2Vjb25kID0gaXRlci0+
c2Vjb25kLnNlY29uZCAtIDE7Ci0gICAgaWYgKCFpdGVyLT5zZWNvbmQuc2Vjb25kKSB7Ci0gICAg
ICAgIG1faWRUb0pTT2JqZWN0TWFwLnJlbW92ZShpdGVyLT5zZWNvbmQuZmlyc3QpOworICAgIEFT
U0VSVChpdGVyLT52YWx1ZS5zZWNvbmQgPiAwKTsKKyAgICBpdGVyLT52YWx1ZS5zZWNvbmQgPSBp
dGVyLT52YWx1ZS5zZWNvbmQgLSAxOworICAgIGlmICghaXRlci0+dmFsdWUuc2Vjb25kKSB7Cisg
ICAgICAgIG1faWRUb0pTT2JqZWN0TWFwLnJlbW92ZShpdGVyLT52YWx1ZS5maXJzdCk7CiAgICAg
ICAgIG1fanNPYmplY3RUb0lETWFwLnJlbW92ZShpdGVyKTsKICAgICB9CiB9CkBAIC0xOTcsMTAg
KzE5NywxMCBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6TG9jYWxPYmplY3RN
YXA6OmZvcmdldCh1aW50MzJfdCBvYmplY3RJRCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogCi0gICAgSGFzaE1hcDxKU0M6OkpTT2JqZWN0KiwgcGFpcjx1aW50MzJfdCwgdWludDMyX3Q+
ID46Oml0ZXJhdG9yIHJJdGVyID0gbV9qc09iamVjdFRvSURNYXAuZmluZChpdGVyLT5zZWNvbmQu
Z2V0KCkpOworICAgIEhhc2hNYXA8SlNDOjpKU09iamVjdCosIHBhaXI8dWludDMyX3QsIHVpbnQz
Ml90PiA+OjppdGVyYXRvciBySXRlciA9IG1fanNPYmplY3RUb0lETWFwLmZpbmQoaXRlci0+dmFs
dWUuZ2V0KCkpOwogCiAgICAgLy8gSWYgdGhlIG9iamVjdCBpcyBiZWluZyBzZW50IHRvIHBsdWct
aW4gcmlnaHQgbm93LCB0aGVuIGl0J3Mgbm90IHRoZSB0aW1lIHRvIGZvcmdldC4KLSAgICBpZiAo
ckl0ZXItPnNlY29uZC5zZWNvbmQgIT0gMSkKKyAgICBpZiAockl0ZXItPnZhbHVlLnNlY29uZCAh
PSAxKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBtX2pzT2JqZWN0VG9JRE1hcC5yZW1v
dmUockl0ZXIpOwpAQCAtMzMwLDcgKzMzMCw3IEBAIHZvaWQgTmV0c2NhcGVQbHVnaW5JbnN0YW5j
ZVByb3h5OjpkZXN0cm95KCkKICAgICAKICAgICBGcmFtZUxvYWRNYXA6Oml0ZXJhdG9yIGVuZCA9
IG1fcGVuZGluZ0ZyYW1lTG9hZHMuZW5kKCk7CiAgICAgZm9yIChGcmFtZUxvYWRNYXA6Oml0ZXJh
dG9yIGl0ID0gbV9wZW5kaW5nRnJhbWVMb2Fkcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0g
ICAgICAgIFsoaXQtPmZpcnN0KSBfc2V0SW50ZXJuYWxMb2FkRGVsZWdhdGU6bmlsXTsKKyAgICAg
ICAgWyhpdC0+a2V5KSBfc2V0SW50ZXJuYWxMb2FkRGVsZWdhdGU6bmlsXTsKIAogICAgIF9XS1BI
RGVzdHJveVBsdWdpbkluc3RhbmNlKG1fcGx1Z2luSG9zdFByb3h5LT5wb3J0KCksIG1fcGx1Z2lu
SUQsIHJlcXVlc3RJRCk7CiAgCkBAIC02NzgsNyArNjc4LDcgQEAgdm9pZCBOZXRzY2FwZVBsdWdp
bkluc3RhbmNlUHJveHk6OndlYkZyYW1lRGlkRmluaXNoTG9hZFdpdGhSZWFzb24oV2ViRnJhbWUq
IHdlYkYKICAgICBGcmFtZUxvYWRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wZW5kaW5nRnJhbWVMb2Fk
cy5maW5kKHdlYkZyYW1lKTsKICAgICBBU1NFUlQoaXQgIT0gbV9wZW5kaW5nRnJhbWVMb2Fkcy5l
bmQoKSk7CiAgICAgICAgIAotICAgIFBsdWdpblJlcXVlc3QqIHBsdWdpblJlcXVlc3QgPSBpdC0+
c2Vjb25kLmdldCgpOworICAgIFBsdWdpblJlcXVlc3QqIHBsdWdpblJlcXVlc3QgPSBpdC0+dmFs
dWUuZ2V0KCk7CiAgICAgX1dLUEhMb2FkVVJMTm90aWZ5KG1fcGx1Z2luSG9zdFByb3h5LT5wb3J0
KCksIG1fcGx1Z2luSUQsIHBsdWdpblJlcXVlc3QtPnJlcXVlc3RJRCgpLCByZWFzb24pOwogIAog
ICAgIG1fcGVuZGluZ0ZyYW1lTG9hZHMucmVtb3ZlKGl0KTsKQEAgLTE2MjgsNyArMTYyOCw3IEBA
IHZvaWQgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpjYW5jZWxDaGVja0lmQWxsb3dlZFRv
TG9hZFVSTCh1aW50MzJfdCBjaGVja0lECiAgICAgaWYgKGl0ID09IG1fdXJsQ2hlY2tzLmVuZCgp
KQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgV2ViUGx1Z2luQ29udGFpbmVyQ2hlY2sgKmNo
ZWNrID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICBXZWJQbHVnaW5Db250YWluZXJDaGVjayAqY2hl
Y2sgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgW2NoZWNrIGNhbmNlbF07CiAgICAgbV91cmxDaGVj
a3MucmVtb3ZlKGl0KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMv
SG9zdGVkL1Byb3h5SW5zdGFuY2UubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3Rl
ZC9Qcm94eUluc3RhbmNlLm1tCmluZGV4IDg5OGM1ZTIuLjU5OGVlOGYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL1Byb3h5SW5zdGFuY2UubW0KKysrIGIvU291
cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvUHJveHlJbnN0YW5jZS5tbQpAQCAtMzU5LDgg
KzM1OSw4IEBAIE1ldGhvZExpc3QgUHJveHlJbnN0YW5jZTo6bWV0aG9kc05hbWVkKFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUpCiAgICAgTWV0aG9kTWFwOjppdGVyYXRvciBleGlzdGluZ01hcEVu
dHJ5ID0gbV9tZXRob2RzLmZpbmQobmFtZS5pbXBsKCkpOwogICAgIGlmIChleGlzdGluZ01hcEVu
dHJ5ICE9IG1fbWV0aG9kcy5lbmQoKSkgewogICAgICAgICBNZXRob2RMaXN0IG1ldGhvZExpc3Q7
Ci0gICAgICAgIGlmIChleGlzdGluZ01hcEVudHJ5LT5zZWNvbmQpCi0gICAgICAgICAgICBtZXRo
b2RMaXN0LmFwcGVuZChleGlzdGluZ01hcEVudHJ5LT5zZWNvbmQpOworICAgICAgICBpZiAoZXhp
c3RpbmdNYXBFbnRyeS0+dmFsdWUpCisgICAgICAgICAgICBtZXRob2RMaXN0LmFwcGVuZChleGlz
dGluZ01hcEVudHJ5LT52YWx1ZSk7CiAgICAgICAgIHJldHVybiBtZXRob2RMaXN0OwogICAgIH0K
ICAgICAKQEAgLTM4MiwxMSArMzgyLDExIEBAIE1ldGhvZExpc3QgUHJveHlJbnN0YW5jZTo6bWV0
aG9kc05hbWVkKFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiAgICAgLy8gQWRkIGEgbmV3IGVu
dHJ5IHRvIHRoZSBtYXAgdW5sZXNzIGFuIGVudHJ5IHdhcyBhZGRlZCB3aGlsZSB3ZSB3ZXJlIGlu
IHdhaXRGb3JSZXBseS4KICAgICBNZXRob2RNYXA6OkFkZFJlc3VsdCBtYXBBZGRSZXN1bHQgPSBt
X21ldGhvZHMuYWRkKG5hbWUuaW1wbCgpLCAwKTsKICAgICBpZiAobWFwQWRkUmVzdWx0LmlzTmV3
RW50cnkgJiYgcmVwbHktPm1fcmVzdWx0KQotICAgICAgICBtYXBBZGRSZXN1bHQuaXRlcmF0b3It
PnNlY29uZCA9IG5ldyBQcm94eU1ldGhvZChtZXRob2ROYW1lKTsKKyAgICAgICAgbWFwQWRkUmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZSA9IG5ldyBQcm94eU1ldGhvZChtZXRob2ROYW1lKTsKIAogICAg
IE1ldGhvZExpc3QgbWV0aG9kTGlzdDsKLSAgICBpZiAobWFwQWRkUmVzdWx0Lml0ZXJhdG9yLT5z
ZWNvbmQpCi0gICAgICAgIG1ldGhvZExpc3QuYXBwZW5kKG1hcEFkZFJlc3VsdC5pdGVyYXRvci0+
c2Vjb25kKTsKKyAgICBpZiAobWFwQWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSkKKyAgICAgICAg
bWV0aG9kTGlzdC5hcHBlbmQobWFwQWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CiAgICAgcmV0
dXJuIG1ldGhvZExpc3Q7CiB9CiAKQEAgLTQwMiw3ICs0MDIsNyBAQCBGaWVsZCogUHJveHlJbnN0
YW5jZTo6ZmllbGROYW1lZChQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogICAgIC8vIElmIHdl
IGFscmVhZHkgaGF2ZSBhbiBlbnRyeSBpbiB0aGUgbWFwLCB1c2UgaXQuCiAgICAgRmllbGRNYXA6
Oml0ZXJhdG9yIGV4aXN0aW5nTWFwRW50cnkgPSBtX2ZpZWxkcy5maW5kKG5hbWUuaW1wbCgpKTsK
ICAgICBpZiAoZXhpc3RpbmdNYXBFbnRyeSAhPSBtX2ZpZWxkcy5lbmQoKSkKLSAgICAgICAgcmV0
dXJuIGV4aXN0aW5nTWFwRW50cnktPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGV4aXN0aW5nTWFw
RW50cnktPnZhbHVlOwogICAgIAogICAgIHVpbnQ2NF90IGlkZW50aWZpZXIgPSByZWludGVycHJl
dF9jYXN0PHVpbnQ2NF90PihfTlBOX0dldFN0cmluZ0lkZW50aWZpZXIobmFtZS5hc2NpaSgpLmRh
dGEoKSkpOwogICAgIHVpbnQzMl90IHJlcXVlc3RJRCA9IG1faW5zdGFuY2VQcm94eS0+bmV4dFJl
cXVlc3RJRCgpOwpAQCAtNDIyLDggKzQyMiw4IEBAIEZpZWxkKiBQcm94eUluc3RhbmNlOjpmaWVs
ZE5hbWVkKFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiAgICAgLy8gQWRkIGEgbmV3IGVudHJ5
IHRvIHRoZSBtYXAgdW5sZXNzIGFuIGVudHJ5IHdhcyBhZGRlZCB3aGlsZSB3ZSB3ZXJlIGluIHdh
aXRGb3JSZXBseS4KICAgICBGaWVsZE1hcDo6QWRkUmVzdWx0IG1hcEFkZFJlc3VsdCA9IG1fZmll
bGRzLmFkZChuYW1lLmltcGwoKSwgMCk7CiAgICAgaWYgKG1hcEFkZFJlc3VsdC5pc05ld0VudHJ5
ICYmIHJlcGx5LT5tX3Jlc3VsdCkKLSAgICAgICAgbWFwQWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNv
bmQgPSBuZXcgUHJveHlGaWVsZChpZGVudGlmaWVyKTsKLSAgICByZXR1cm4gbWFwQWRkUmVzdWx0
Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgIG1hcEFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUg
PSBuZXcgUHJveHlGaWVsZChpZGVudGlmaWVyKTsKKyAgICByZXR1cm4gbWFwQWRkUmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZTsKIH0KIAogSlNDOjpKU1ZhbHVlIFByb3h5SW5zdGFuY2U6OmZpZWxkVmFs
dWUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBGaWVsZCogZmllbGQpIGNvbnN0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5tbSBiL1Nv
dXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5WaWV3Lm1tCmluZGV4IDRl
MWFhZDQuLjZhMWViNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2Vi
TmV0c2NhcGVQbHVnaW5WaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2Vi
TmV0c2NhcGVQbHVnaW5WaWV3Lm1tCkBAIC03MTAsNyArNzEwLDcgQEAgc3RhdGljIGlubGluZSB2
b2lkIGdldE5QUmVjdChjb25zdCBOU1JlY3QmIG5yLCBOUFJlY3QmIG5wcikKIAogICAgIEhhc2hN
YXA8dWludDMyX3QsIFBsdWdpblRpbWVyKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHRpbWVycy0+
ZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPHVpbnQzMl90LCBQbHVnaW5UaW1lcio+Ojpjb25zdF9p
dGVyYXRvciBpdCA9IHRpbWVycy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAg
IFBsdWdpblRpbWVyKiB0aW1lciA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFBsdWdpblRpbWVyKiB0
aW1lciA9IGl0LT52YWx1ZTsKICAgICAgICAgdGltZXItPnN0b3AoKTsKICAgICB9ICAgIAogfQpA
QCAtNzI4LDcgKzcyOCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBnZXROUFJlY3QoY29uc3QgTlNS
ZWN0JiBuciwgTlBSZWN0JiBucHIpCiAgICAgCiAgICAgSGFzaE1hcDx1aW50MzJfdCwgUGx1Z2lu
VGltZXIqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gdGltZXJzLT5lbmQoKTsKICAgICBmb3IgKEhh
c2hNYXA8dWludDMyX3QsIFBsdWdpblRpbWVyKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdGltZXJz
LT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgUGx1Z2luVGltZXIqIHRpbWVy
ID0gaXQtPnNlY29uZDsKKyAgICAgICAgUGx1Z2luVGltZXIqIHRpbWVyID0gaXQtPnZhbHVlOwog
ICAgICAgICBBU1NFUlQoIXRpbWVyLT5pc0FjdGl2ZSgpKTsKICAgICAgICAgdGltZXItPnN0YXJ0
KF9pc0NvbXBsZXRlbHlPYnNjdXJlZCk7CiAgICAgfSAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYk5vdGlmaWNhdGlvbkNsaWVudC5tbSBiL1NvdXJj
ZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYk5vdGlmaWNhdGlvbkNsaWVudC5tbQppbmRl
eCBlMmEwNWM2Li5mMGM0OWE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3Jl
U3VwcG9ydC9XZWJOb3RpZmljYXRpb25DbGllbnQubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMv
V2ViQ29yZVN1cHBvcnQvV2ViTm90aWZpY2F0aW9uQ2xpZW50Lm1tCkBAIC05MCw3ICs5MCw3IEBA
IGJvb2wgV2ViTm90aWZpY2F0aW9uQ2xpZW50OjpzaG93KE5vdGlmaWNhdGlvbiogbm90aWZpY2F0
aW9uKQogICAgIG1fbm90aWZpY2F0aW9uTWFwLnNldChub3RpZmljYXRpb24sIHdlYk5vdGlmaWNh
dGlvbik7CiAKICAgICBOb3RpZmljYXRpb25Db250ZXh0TWFwOjppdGVyYXRvciBpdCA9IG1fbm90
aWZpY2F0aW9uQ29udGV4dE1hcC5hZGQobm90aWZpY2F0aW9uLT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCksIFZlY3RvcjxSZXRhaW5QdHI8V2ViTm90aWZpY2F0aW9uPiA+KCkpLml0ZXJhdG9yOwot
ICAgIGl0LT5zZWNvbmQuYXBwZW5kKHdlYk5vdGlmaWNhdGlvbik7CisgICAgaXQtPnZhbHVlLmFw
cGVuZCh3ZWJOb3RpZmljYXRpb24pOwogCiAgICAgW1ttX3dlYlZpZXcgX25vdGlmaWNhdGlvblBy
b3ZpZGVyXSBzaG93Tm90aWZpY2F0aW9uOndlYk5vdGlmaWNhdGlvbi5nZXQoKSBmcm9tV2ViVmll
dzptX3dlYlZpZXddOwogICAgIHJldHVybiB0cnVlOwpAQCAtMTIwLDcgKzEyMCw3IEBAIHZvaWQg
V2ViTm90aWZpY2F0aW9uQ2xpZW50OjpjbGVhck5vdGlmaWNhdGlvbnMoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCkKICAgICBpZiAoaXQgPT0gbV9ub3RpZmljYXRpb25Db250ZXh0TWFw
LmVuZCgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgVmVjdG9yPFJldGFpblB0cjxXZWJO
b3RpZmljYXRpb24+ID4mIHdlYk5vdGlmaWNhdGlvbnMgPSBpdC0+c2Vjb25kOworICAgIFZlY3Rv
cjxSZXRhaW5QdHI8V2ViTm90aWZpY2F0aW9uPiA+JiB3ZWJOb3RpZmljYXRpb25zID0gaXQtPnZh
bHVlOwogICAgIE5TTXV0YWJsZUFycmF5ICpuc0lEcyA9IFtOU011dGFibGVBcnJheSBhcnJheV07
CiAgICAgc2l6ZV90IGNvdW50ID0gd2ViTm90aWZpY2F0aW9ucy5zaXplKCk7CiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CkBAIC0xNDYsMTAgKzE0NiwxMCBAQCB2b2lk
IFdlYk5vdGlmaWNhdGlvbkNsaWVudDo6bm90aWZpY2F0aW9uT2JqZWN0RGVzdHJveWVkKE5vdGlm
aWNhdGlvbiogbm90aWZpY2F0aQogCiAgICAgTm90aWZpY2F0aW9uQ29udGV4dE1hcDo6aXRlcmF0
b3IgaXQgPSBtX25vdGlmaWNhdGlvbkNvbnRleHRNYXAuZmluZChub3RpZmljYXRpb24tPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSk7CiAgICAgQVNTRVJUKGl0ICE9IG1fbm90aWZpY2F0aW9uQ29u
dGV4dE1hcC5lbmQoKSk7Ci0gICAgc2l6ZV90IGluZGV4ID0gaXQtPnNlY29uZC5maW5kKHdlYk5v
dGlmaWNhdGlvbik7CisgICAgc2l6ZV90IGluZGV4ID0gaXQtPnZhbHVlLmZpbmQod2ViTm90aWZp
Y2F0aW9uKTsKICAgICBBU1NFUlQoaW5kZXggIT0gbm90Rm91bmQpOwotICAgIGl0LT5zZWNvbmQu
cmVtb3ZlKGluZGV4KTsKLSAgICBpZiAoaXQtPnNlY29uZC5pc0VtcHR5KCkpCisgICAgaXQtPnZh
bHVlLnJlbW92ZShpbmRleCk7CisgICAgaWYgKGl0LT52YWx1ZS5pc0VtcHR5KCkpCiAgICAgICAg
IG1fbm90aWZpY2F0aW9uQ29udGV4dE1hcC5yZW1vdmUoaXQpOwogCiAgICAgW1ttX3dlYlZpZXcg
X25vdGlmaWNhdGlvblByb3ZpZGVyXSBub3RpZmljYXRpb25EZXN0cm95ZWQ6d2ViTm90aWZpY2F0
aW9uLmdldCgpXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRN
TFZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCmluZGV4
IDUwNWRiNTMuLmI5YTAwMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcv
V2ViSFRNTFZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmll
dy5tbQpAQCAtMjM3Niw3ICsyMzc2LDcgQEAgc3RhdGljIFN0cmluZyBjb21tYW5kTmFtZUZvclNl
bGVjdG9yKFNFTCBzZWxlY3RvcikKICAgICBzdGF0aWMgY29uc3QgU2VsZWN0b3JOYW1lTWFwKiBl
eGNlcHRpb25NYXAgPSBjcmVhdGVTZWxlY3RvckV4Y2VwdGlvbk1hcCgpOwogICAgIFNlbGVjdG9y
TmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBleGNlcHRpb25NYXAtPmZpbmQoc2VsZWN0b3Ip
OwogICAgIGlmIChpdCAhPSBleGNlcHRpb25NYXAtPmVuZCgpKQotICAgICAgICByZXR1cm4gaXQt
PnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKIAogICAgIC8vIFJlbW92ZSB0aGUg
dHJhaWxpbmcgY29sb24uCiAgICAgLy8gTm8gbmVlZCB0byBjYXBpdGFsaXplIHRoZSBjb21tYW5k
IG5hbWUgc2luY2UgRWRpdG9yIGNvbW1hbmQgbmFtZXMgYXJlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGFn
ZS5jcHAKaW5kZXggOGU5NjMzZC4uOTA5Mzk4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9x
dC9BcGkvcXdlYnBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNw
cApAQCAtMjI1OSw3ICsyMjU5LDcgQEAgc3RhdGljIHZvaWQgZXh0cmFjdENvbnRlbnRUeXBlRnJv
bVBsdWdpblZlY3Rvcihjb25zdCBWZWN0b3I8UGx1Z2luUGFja2FnZSo+JiBwbHUKICAgICAgICAg
TUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBtYXBfaXQgPSBwbHVnaW5zW2ld
LT5taW1lVG9EZXNjcmlwdGlvbnMoKS5iZWdpbigpOwogICAgICAgICBNSU1FVG9EZXNjcmlwdGlv
bnNNYXA6OmNvbnN0X2l0ZXJhdG9yIG1hcF9lbmQgPSBwbHVnaW5zW2ldLT5taW1lVG9EZXNjcmlw
dGlvbnMoKS5lbmQoKTsKICAgICAgICAgZm9yICg7IG1hcF9pdCAhPSBtYXBfZW5kOyArK21hcF9p
dCkKLSAgICAgICAgICAgICpsaXN0IDw8IG1hcF9pdC0+Zmlyc3Q7CisgICAgICAgICAgICAqbGlz
dCA8PCBtYXBfaXQtPmtleTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
cXQvQXBpL3F3ZWJwbHVnaW5kYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Vi
cGx1Z2luZGF0YWJhc2UuY3BwCmluZGV4IGE3YTNiNWYuLmM1MzI4YzggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwbHVnaW5kYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9xdC9BcGkvcXdlYnBsdWdpbmRhdGFiYXNlLmNwcApAQCAtMTIyLDggKzEyMiw4IEBAIFFM
aXN0PFFXZWJQbHVnaW5JbmZvOjpNaW1lVHlwZT4gUVdlYlBsdWdpbkluZm86Om1pbWVUeXBlcygp
IGNvbnN0CiAKICAgICAgICAgZm9yIChNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbWltZVRvRGVzY3JpcHRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewog
ICAgICAgICAgICAgTWltZVR5cGUgbWltZVR5cGU7Ci0gICAgICAgICAgICBtaW1lVHlwZS5uYW1l
ID0gaXQtPmZpcnN0OwotICAgICAgICAgICAgbWltZVR5cGUuZGVzY3JpcHRpb24gPSBpdC0+c2Vj
b25kOworICAgICAgICAgICAgbWltZVR5cGUubmFtZSA9IGl0LT5rZXk7CisgICAgICAgICAgICBt
aW1lVHlwZS5kZXNjcmlwdGlvbiA9IGl0LT52YWx1ZTsKIAogICAgICAgICAgICAgUVN0cmluZ0xp
c3QgZmlsZUV4dGVuc2lvbnM7CiAgICAgICAgICAgICBWZWN0b3I8U3RyaW5nPiBleHRlbnNpb25z
ID0gbV9wYWNrYWdlLT5taW1lVG9FeHRlbnNpb25zKCkuZ2V0KG1pbWVUeXBlLm5hbWUpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdp
ZXNRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRl
Z2llc1F0LmNwcAppbmRleCBjZDRhYjBkLi43ZDRiMGI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1F0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1F0LmNwcApAQCAt
MTMzLDggKzEzMyw4IEBAIHZvaWQgUGxhdGZvcm1TdHJhdGVnaWVzUXQ6OmdldFBsdWdpbkluZm8o
Y29uc3QgV2ViQ29yZTo6UGFnZSogcGFnZSwgVmVjdG9yPFdlYkNvCiAgICAgICAgIGZvciAoTUlN
RVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1pbWVUb0Rlc2NyaXB0aW9u
cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIE1pbWVDbGFzc0luZm8g
bWltZTsKIAotICAgICAgICAgICAgbWltZS50eXBlID0gaXQtPmZpcnN0OwotICAgICAgICAgICAg
bWltZS5kZXNjID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIG1pbWUudHlwZSA9IGl0LT5rZXk7
CisgICAgICAgICAgICBtaW1lLmRlc2MgPSBpdC0+dmFsdWU7CiAgICAgICAgICAgICBtaW1lLmV4
dGVuc2lvbnMgPSBwYWNrYWdlLT5taW1lVG9FeHRlbnNpb25zKCkuZ2V0KG1pbWUudHlwZSk7CiAK
ICAgICAgICAgICAgIGluZm8ubWltZXMuYXBwZW5kKG1pbWUpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC93aW4vQ09NUHJvcGVydHlCYWcuaCBiL1NvdXJjZS9XZWJLaXQvd2luL0NPTVByb3Bl
cnR5QmFnLmgKaW5kZXggYzc2ODYzZi4uOGU4NGU0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC93aW4vQ09NUHJvcGVydHlCYWcuaAorKysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9DT01Qcm9wZXJ0
eUJhZy5oCkBAIC0xNDcsOSArMTQ3LDkgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBDT01Q
cm9wZXJ0eUJhZzxWYWx1ZVR5cGUsIEtleVR5cGUsIEhhc2hUeXBlPjo6UmVhZChMUEMKIAogICAg
IFZBUlRZUEUgcmVxdWVzdGVkVHlwZSA9IFZfVlQocFZhcik7CiAgICAgVl9WVChwVmFyKSA9IFZU
X0VNUFRZOwotICAgIENPTVZhcmlhbnRTZXR0ZXI8VmFsdWVUeXBlPjo6c2V0VmFyaWFudChwVmFy
LCBpdC0+c2Vjb25kKTsKKyAgICBDT01WYXJpYW50U2V0dGVyPFZhbHVlVHlwZT46OnNldFZhcmlh
bnQocFZhciwgaXQtPnZhbHVlKTsKIAotICAgIGlmIChyZXF1ZXN0ZWRUeXBlICE9IENPTVZhcmlh
bnRTZXR0ZXI8VmFsdWVUeXBlPjo6dmFyaWFudFR5cGUoaXQtPnNlY29uZCkgJiYgcmVxdWVzdGVk
VHlwZSAhPSBWVF9FTVBUWSkKKyAgICBpZiAocmVxdWVzdGVkVHlwZSAhPSBDT01WYXJpYW50U2V0
dGVyPFZhbHVlVHlwZT46OnZhcmlhbnRUeXBlKGl0LT52YWx1ZSkgJiYgcmVxdWVzdGVkVHlwZSAh
PSBWVF9FTVBUWSkKICAgICAgICAgcmV0dXJuIDo6VmFyaWFudENoYW5nZVR5cGUocFZhciwgcFZh
ciwgVkFSSUFOVF9OT1VTRVJPVkVSUklERSB8IFZBUklBTlRfQUxQSEFCT09MLCByZXF1ZXN0ZWRU
eXBlKTsKIAogICAgIHJldHVybiBTX09LOwpAQCAtMjE3LDEyICsyMTcsMTIgQEAgSFJFU1VMVCBT
VERNRVRIT0RDQUxMVFlQRSBDT01Qcm9wZXJ0eUJhZzxWYWx1ZVR5cGUsIEtleVR5cGUsIEhhc2hU
eXBlPjo6R2V0UHJvcGUKICAgICAgICAgLy9wUHJvcEJhZ1tqXS5jbHNpZDsgICAgLy8gKENMU0lE
KSBDTFNJRCBvZiB0aGUgb2JqZWN0LiBUaGlzIG1lbWJlciBpcyB2YWxpZCBvbmx5IGlmIGR3VHlw
ZSBpcyBQUk9QQkFHMl9UWVBFX09CSkVDVC4KIAogICAgICAgICBwUHJvcEJhZ1tqXS5kd1R5cGUg
PSBQUk9QQkFHMl9UWVBFX0RBVEE7Ci0gICAgICAgIHBQcm9wQmFnW2pdLnZ0ID0gQ09NVmFyaWFu
dFNldHRlcjxWYWx1ZVR5cGU+Ojp2YXJpYW50VHlwZShjdXJyZW50LT5zZWNvbmQpOworICAgICAg
ICBwUHJvcEJhZ1tqXS52dCA9IENPTVZhcmlhbnRTZXR0ZXI8VmFsdWVUeXBlPjo6dmFyaWFudFR5
cGUoY3VycmVudC0+dmFsdWUpOwogICAgICAgICBwUHJvcEJhZ1tqXS5kd0hpbnQgPSBpUHJvcGVy
dHkgKyBqOwotICAgICAgICBwUHJvcEJhZ1tqXS5wc3RyTmFtZSA9IChMUE9MRVNUUilDb1Rhc2tN
ZW1BbGxvYyhzaXplb2Yod2NoYXJfdCkqKGN1cnJlbnQtPmZpcnN0Lmxlbmd0aCgpKzEpKTsKKyAg
ICAgICAgcFByb3BCYWdbal0ucHN0ck5hbWUgPSAoTFBPTEVTVFIpQ29UYXNrTWVtQWxsb2Moc2l6
ZW9mKHdjaGFyX3QpKihjdXJyZW50LT5rZXkubGVuZ3RoKCkrMSkpOwogICAgICAgICBpZiAoIXBQ
cm9wQmFnW2pdLnBzdHJOYW1lKQogICAgICAgICAgICAgcmV0dXJuIEVfT1VUT0ZNRU1PUlk7Ci0g
ICAgICAgIHdjc2NweV9zKHBQcm9wQmFnW2pdLnBzdHJOYW1lLCBjdXJyZW50LT5maXJzdC5sZW5n
dGgoKSsxLCBzdGF0aWNfY2FzdDxTdHJpbmc+KGN1cnJlbnQtPmZpcnN0KS5jaGFyYWN0ZXJzV2l0
aE51bGxUZXJtaW5hdGlvbigpKTsKKyAgICAgICAgd2NzY3B5X3MocFByb3BCYWdbal0ucHN0ck5h
bWUsIGN1cnJlbnQtPmtleS5sZW5ndGgoKSsxLCBzdGF0aWNfY2FzdDxTdHJpbmc+KGN1cnJlbnQt
PmtleSkuY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSk7CiAgICAgICAgICsrKnBjUHJv
cGVydGllczsKICAgICB9CiAgICAgcmV0dXJuIFNfT0s7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L3dpbi9XZWJDb3JlU3RhdGlzdGljcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3Jl
U3RhdGlzdGljcy5jcHAKaW5kZXggYzFjYTlmMi4uMmYyMmIwMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC93aW4vV2ViQ29yZVN0YXRpc3RpY3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvd2lu
L1dlYkNvcmVTdGF0aXN0aWNzLmNwcApAQCAtMTQ1LDcgKzE0NSw3IEBAIEhSRVNVTFQgU1RETUVU
SE9EQ0FMTFRZUEUgV2ViQ29yZVN0YXRpc3RpY3M6OmphdmFTY3JpcHRQcm90ZWN0ZWRPYmplY3RU
eXBlQ291bnRzCiAgICAgSXRlcmF0b3IgZW5kID0ganNPYmplY3RUeXBlTmFtZXMtPmVuZCgpOwog
ICAgIEhhc2hNYXA8U3RyaW5nLCBpbnQ+IHR5cGVDb3VudE1hcDsKICAgICBmb3IgKEl0ZXJhdG9y
IGN1cnJlbnQgPSBqc09iamVjdFR5cGVOYW1lcy0+YmVnaW4oKTsgY3VycmVudCAhPSBlbmQ7ICsr
Y3VycmVudCkKLSAgICAgICAgdHlwZUNvdW50TWFwLnNldChjdXJyZW50LT5maXJzdCwgY3VycmVu
dC0+c2Vjb25kKTsKKyAgICAgICAgdHlwZUNvdW50TWFwLnNldChjdXJyZW50LT5rZXksIGN1cnJl
bnQtPnZhbHVlKTsKIAogICAgIENPTVB0cjxJUHJvcGVydHlCYWcyPiByZXN1bHRzKEFkb3B0Q09N
LCBDT01Qcm9wZXJ0eUJhZzxpbnQ+OjpjcmVhdGVJbnN0YW5jZSh0eXBlQ291bnRNYXApKTsKICAg
ICByZXN1bHRzLmNvcHlSZWZUbyh0eXBlTmFtZXNBbmRDb3VudHMpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcCBi
L1NvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5j
cHAKaW5kZXggMjMwZjMzMi4uZjEzMGY3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4v
V2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCkBAIC05Myw4
ICs5Myw4IEBAIHZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpnZXRQbHVnaW5JbmZvKGNvbnN0
IFdlYkNvcmU6OlBhZ2UqLCBWZWN0b3I8V2ViQ29yZTo6CiAgICAgICAgIGZvciAoTUlNRVRvRGVz
Y3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIE1pbWVDbGFzc0luZm8gbWltZTsK
IAotICAgICAgICAgICAgbWltZS50eXBlID0gaXQtPmZpcnN0OwotICAgICAgICAgICAgbWltZS5k
ZXNjID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIG1pbWUudHlwZSA9IGl0LT5rZXk7CisgICAg
ICAgICAgICBtaW1lLmRlc2MgPSBpdC0+dmFsdWU7CiAgICAgICAgICAgICBtaW1lLmV4dGVuc2lv
bnMgPSBwYWNrYWdlLT5taW1lVG9FeHRlbnNpb25zKCkuZ2V0KG1pbWUudHlwZSk7CiAKICAgICAg
ICAgICAgIGluZm8ubWltZXMuYXBwZW5kKG1pbWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC93aW4vV2ViSGlzdG9yeS5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJIaXN0b3J5LmNwcApp
bmRleCBlODQyYzE0Li44MjMzNWE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJI
aXN0b3J5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJIaXN0b3J5LmNwcApAQCAtODM0
LDcgKzgzNCw3IEBAIEhSRVNVTFQgV2ViSGlzdG9yeTo6cmVtb3ZlSXRlbUZyb21EYXRlQ2FjaGVz
KElXZWJIaXN0b3J5SXRlbSogZW50cnkpCiAKICAgICBEYXRlVG9FbnRyaWVzTWFwOjppdGVyYXRv
ciBmb3VuZCA9IG1fZW50cmllc0J5RGF0ZS5maW5kKGRhdGVLZXkpOwogICAgIEFTU0VSVChmb3Vu
ZCAhPSBtX2VudHJpZXNCeURhdGUuZW5kKCkpOwotICAgIENGTXV0YWJsZUFycmF5UmVmIGVudHJp
ZXNGb3JEYXRlID0gZm91bmQtPnNlY29uZC5nZXQoKTsKKyAgICBDRk11dGFibGVBcnJheVJlZiBl
bnRyaWVzRm9yRGF0ZSA9IGZvdW5kLT52YWx1ZS5nZXQoKTsKIAogICAgIENGSW5kZXggY291bnQg
PSBDRkFycmF5R2V0Q291bnQoZW50cmllc0ZvckRhdGUpOwogICAgIGZvciAoaW50IGkgPSBjb3Vu
dCAtIDE7IGkgPj0gMDsgLS1pKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJL
aXRDT01BUEkuY3BwIGIvU291cmNlL1dlYktpdC93aW4vV2ViS2l0Q09NQVBJLmNwcAppbmRleCA5
YzljYzAyLi40ZDhmZjA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJLaXRDT01B
UEkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL1dlYktpdENPTUFQSS5jcHAKQEAgLTUyLDcg
KzUyLDcgQEAgc3RhdGljIENPTVB0cjxJQ2xhc3NGYWN0b3J5PiBjbGFzc0ZhY3RvcnkoY29uc3Qg
Q0xTSUQmIGNsc2lkKQogICAgIHN0YXRpYyBGYWN0b3J5TWFwJiBmYWN0b3JpZXMgPSAqbmV3IEZh
Y3RvcnlNYXA7CiAKICAgICBGYWN0b3J5TWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gZmFjdG9yaWVz
LmFkZChjbHNpZCwgMCk7Ci0gICAgQ09NUHRyPElDbGFzc0ZhY3Rvcnk+JiBmYWN0b3J5ID0gcmVz
dWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgQ09NUHRyPElDbGFzc0ZhY3Rvcnk+JiBmYWN0b3J5
ID0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkgJiYg
RkFJTEVEKERsbEdldENsYXNzT2JqZWN0KGNsc2lkLCBfX3V1aWRvZihmYWN0b3J5KSwgcmVpbnRl
cnByZXRfY2FzdDx2b2lkKio+KCZmYWN0b3J5KSkpKQogICAgICAgICBmYWN0b3J5ID0gMDsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vV2ViS2l0U3RhdGlzdGljcy5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L3dpbi9XZWJLaXRTdGF0aXN0aWNzLmNwcAppbmRleCA5Y2Q5NWM3Li5jN2I4ZWQx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJLaXRTdGF0aXN0aWNzLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJLaXRTdGF0aXN0aWNzLmNwcApAQCAtMTQ0LDkgKzE0NCw5
IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViS2l0U3RhdGlzdGljczo6Y29tQ2xhc3NO
YW1lQ291bnRzKAogICAgIEl0ZXJhdG9yIGVuZCA9IGdDbGFzc05hbWVDb3VudC5lbmQoKTsKICAg
ICBWZWN0b3I8VUNoYXI+IHZlY3RvcjsKICAgICBmb3IgKEl0ZXJhdG9yIGN1cnJlbnQgPSBnQ2xh
c3NOYW1lQ291bnQuYmVnaW4oKTsgY3VycmVudCAhPSBlbmQ7ICsrY3VycmVudCkgewotICAgICAg
ICBhcHBlbmQodmVjdG9yLCBTdHJpbmc6OmZvcm1hdCgiJTR1IiwgY3VycmVudC0+c2Vjb25kKSk7
CisgICAgICAgIGFwcGVuZCh2ZWN0b3IsIFN0cmluZzo6Zm9ybWF0KCIlNHUiLCBjdXJyZW50LT52
YWx1ZSkpOwogICAgICAgICB2ZWN0b3IuYXBwZW5kKCdcdCcpOwotICAgICAgICBhcHBlbmQodmVj
dG9yLCBzdGF0aWNfY2FzdDxTdHJpbmc+KGN1cnJlbnQtPmZpcnN0KSk7CisgICAgICAgIGFwcGVu
ZCh2ZWN0b3IsIHN0YXRpY19jYXN0PFN0cmluZz4oY3VycmVudC0+a2V5KSk7CiAgICAgICAgIHZl
Y3Rvci5hcHBlbmQoJ1xuJyk7CiAgICAgfQogICAgICpvdXRwdXQgPSBCU3RyaW5nKFN0cmluZzo6
YWRvcHQodmVjdG9yKSkucmVsZWFzZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4v
V2ViTm90aWZpY2F0aW9uQ2VudGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvd2luL1dlYk5vdGlmaWNh
dGlvbkNlbnRlci5jcHAKaW5kZXggYzcxOTJkOC4uMzFjODExOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC93aW4vV2ViTm90aWZpY2F0aW9uQ2VudGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L3dpbi9XZWJOb3RpZmljYXRpb25DZW50ZXIuY3BwCkBAIC0xMjAsNyArMTIwLDcgQEAgdm9pZCBX
ZWJOb3RpZmljYXRpb25DZW50ZXI6OnBvc3ROb3RpZmljYXRpb25JbnRlcm5hbChJV2ViTm90aWZp
Y2F0aW9uKiBub3RpZmljYXQKIAogICAgIC8vIEludGVudGlvbmFsbHkgbWFrZSBhIGNvcHkgb2Yg
dGhlIGxpc3QgdG8gYXZvaWQgdGhlIHBvc3NpYmlsaXR5IG9mIGVycm9ycwogICAgIC8vIGZyb20g
YSBtdXRhdGlvbiBvZiB0aGUgbGlzdCBpbiB0aGUgb25Ob3RpZnkgY2FsbGJhY2suCi0gICAgT2Jq
ZWN0T2JzZXJ2ZXJMaXN0IGxpc3QgPSBpdC0+c2Vjb25kOworICAgIE9iamVjdE9ic2VydmVyTGlz
dCBsaXN0ID0gaXQtPnZhbHVlOwogCiAgICAgT2JzZXJ2ZXJMaXN0SXRlcmF0b3IgZW5kID0gbGlz
dC5lbmQoKTsKICAgICBmb3IgKE9ic2VydmVyTGlzdEl0ZXJhdG9yIGl0MiA9IGxpc3QuYmVnaW4o
KTsgaXQyICE9IGVuZDsgKytpdDIpIHsKQEAgLTE0OSw3ICsxNDksNyBAQCBIUkVTVUxUIFNURE1F
VEhPRENBTExUWVBFIFdlYk5vdGlmaWNhdGlvbkNlbnRlcjo6YWRkT2JzZXJ2ZXIoCiAgICAgU3Ry
aW5nIG5hbWUobm90aWZpY2F0aW9uTmFtZSwgU3lzU3RyaW5nTGVuKG5vdGlmaWNhdGlvbk5hbWUp
KTsKICAgICBNYXBwZWRPYnNlcnZlcnM6Oml0ZXJhdG9yIGl0ID0gZC0+bV9tYXBwZWRPYnNlcnZl
cnMuZmluZChuYW1lKTsKICAgICBpZiAoaXQgIT0gZC0+bV9tYXBwZWRPYnNlcnZlcnMuZW5kKCkp
Ci0gICAgICAgIGl0LT5zZWNvbmQuYXBwZW5kKE9iamVjdE9ic2VydmVyUGFpcihhbk9iamVjdCwg
b2JzZXJ2ZXIpKTsKKyAgICAgICAgaXQtPnZhbHVlLmFwcGVuZChPYmplY3RPYnNlcnZlclBhaXIo
YW5PYmplY3QsIG9ic2VydmVyKSk7CiAgICAgZWxzZSB7CiAgICAgICAgIE9iamVjdE9ic2VydmVy
TGlzdCBsaXN0OwogICAgICAgICBsaXN0LmFwcGVuZChPYmplY3RPYnNlcnZlclBhaXIoYW5PYmpl
Y3QsIG9ic2VydmVyKSk7CkBAIC0xOTgsNyArMTk4LDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxM
VFlQRSBXZWJOb3RpZmljYXRpb25DZW50ZXI6OnJlbW92ZU9ic2VydmVyKAogICAgIGlmIChpdCA9
PSBkLT5tX21hcHBlZE9ic2VydmVycy5lbmQoKSkKICAgICAgICAgcmV0dXJuIEVfRkFJTDsKIAot
ICAgIE9iamVjdE9ic2VydmVyTGlzdCYgb2JzZXJ2ZXJMaXN0ID0gaXQtPnNlY29uZDsKKyAgICBP
YmplY3RPYnNlcnZlckxpc3QmIG9ic2VydmVyTGlzdCA9IGl0LT52YWx1ZTsKICAgICBPYnNlcnZl
ckxpc3RJdGVyYXRvciBlbmQgPSBvYnNlcnZlckxpc3QuZW5kKCk7CiAKICAgICBpbnQgaSA9IDA7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L1BsYXRmb3Jt
U3RyYXRlZ2llc1dpbkNFLmNwcCBiL1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQv
UGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuY3BwCmluZGV4IDNmOGM5MDcuLmQ1NTc5NzIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVn
aWVzV2luQ0UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQvUGxh
dGZvcm1TdHJhdGVnaWVzV2luQ0UuY3BwCkBAIC05NCw4ICs5NCw4IEBAIHZvaWQgUGxhdGZvcm1T
dHJhdGVnaWVzV2luQ0U6OmdldFBsdWdpbkluZm8oY29uc3QgUGFnZSosIFZlY3RvcjxQbHVnaW5J
bmZvPiYgb3V0CiAgICAgICAgIGZvciAoTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
ICAgICAgICAgICAgIE1pbWVDbGFzc0luZm8gbWltZTsKIAotICAgICAgICAgICAgbWltZS50eXBl
ID0gaXQtPmZpcnN0OwotICAgICAgICAgICAgbWltZS5kZXNjID0gaXQtPnNlY29uZDsKKyAgICAg
ICAgICAgIG1pbWUudHlwZSA9IGl0LT5rZXk7CisgICAgICAgICAgICBtaW1lLmRlc2MgPSBpdC0+
dmFsdWU7CiAgICAgICAgICAgICBtaW1lLmV4dGVuc2lvbnMgPSBwYWNrYWdlLT5taW1lVG9FeHRl
bnNpb25zKCkuZ2V0KG1pbWUudHlwZSk7CiAKICAgICAgICAgICAgIGluZm8ubWltZXMuYXBwZW5k
KG1pbWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Bcmd1
bWVudENvZGVycy5oIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVudENv
ZGVycy5oCmluZGV4IGRkNTRkZmUuLmFmMTYzYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtL0NvcmVJUEMvQXJndW1lbnRDb2RlcnMuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50Q29kZXJzLmgKQEAgLTc1LDggKzc1LDggQEAgdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gc3RydWN0IEFyZ3VtZW50Q29kZXI8c3RkOjpwYWly
PFQsIFU+ID4gewogdGVtcGxhdGU8dHlwZW5hbWUgS2V5VHlwZSwgdHlwZW5hbWUgVmFsdWVUeXBl
PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXVEY6OktleVZhbHVlUGFpcjxLZXlUeXBlLCBWYWx1ZVR5
cGU+ID4gewogICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIs
IGNvbnN0IFdURjo6S2V5VmFsdWVQYWlyPEtleVR5cGUsIFZhbHVlVHlwZT4mIHBhaXIpCiAgICAg
ewotICAgICAgICBlbmNvZGVyLT5lbmNvZGUocGFpci5maXJzdCk7Ci0gICAgICAgIGVuY29kZXIt
PmVuY29kZShwYWlyLnNlY29uZCk7CisgICAgICAgIGVuY29kZXItPmVuY29kZShwYWlyLmtleSk7
CisgICAgICAgIGVuY29kZXItPmVuY29kZShwYWlyLnZhbHVlKTsKICAgICB9CiAKICAgICBzdGF0
aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBXVEY6OktleVZhbHVlUGFp
cjxLZXlUeXBlLCBWYWx1ZVR5cGU+JiBwYWlyKQpAQCAtODksOCArODksOCBAQCB0ZW1wbGF0ZTx0
eXBlbmFtZSBLZXlUeXBlLCB0eXBlbmFtZSBWYWx1ZVR5cGU+IHN0cnVjdCBBcmd1bWVudENvZGVy
PFdURjo6S2V5VmFsdQogICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZSh2YWx1ZSkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgcGFpci5maXJzdCA9IGtleTsKLSAgICAg
ICAgcGFpci5zZWNvbmQgPSB2YWx1ZTsKKyAgICAgICAgcGFpci5rZXkgPSBrZXk7CisgICAgICAg
IHBhaXIudmFsdWUgPSB2YWx1ZTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uY3BwCmluZGV4IGQy
MmI4YjQuLjM0NDllMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJ
UEMvQ29ubmVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9D
b25uZWN0aW9uLmNwcApAQCAtMTAyLDEyICsxMDIsMTIgQEAgUGFzc1JlZlB0cjxDb25uZWN0aW9u
OjpTeW5jTWVzc2FnZVN0YXRlPiBDb25uZWN0aW9uOjpTeW5jTWVzc2FnZVN0YXRlOjpnZXRPckNy
ZWEKICAgICBTeW5jTWVzc2FnZVN0YXRlTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gc3luY01lc3Nh
Z2VTdGF0ZU1hcCgpLmFkZChydW5Mb29wLCAwKTsKIAogICAgIGlmICghcmVzdWx0LmlzTmV3RW50
cnkpIHsKLSAgICAgICAgQVNTRVJUKHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKLSAgICAgICAg
cmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICBBU1NFUlQocmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZSk7CisgICAgICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwog
ICAgIH0KIAogICAgIFJlZlB0cjxTeW5jTWVzc2FnZVN0YXRlPiBzeW5jTWVzc2FnZVN0YXRlID0g
YWRvcHRSZWYobmV3IFN5bmNNZXNzYWdlU3RhdGUocnVuTG9vcCkpOwotICAgIHJlc3VsdC5pdGVy
YXRvci0+c2Vjb25kID0gc3luY01lc3NhZ2VTdGF0ZS5nZXQoKTsKKyAgICByZXN1bHQuaXRlcmF0
b3ItPnZhbHVlID0gc3luY01lc3NhZ2VTdGF0ZS5nZXQoKTsKIAogICAgIHJldHVybiBzeW5jTWVz
c2FnZVN0YXRlLnJlbGVhc2UoKTsKIH0KQEAgLTM2MiwxMCArMzYyLDEwIEBAIFBhc3NPd25QdHI8
QXJndW1lbnREZWNvZGVyPiBDb25uZWN0aW9uOjp3YWl0Rm9yTWVzc2FnZShNZXNzYWdlSUQgbWVz
c2FnZUlELCB1aW50CiAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3dhaXRGb3JNZXNzYWdl
TXV0ZXgpOwogCiAgICAgICAgIEhhc2hNYXA8c3RkOjpwYWlyPHVuc2lnbmVkLCB1aW50NjRfdD4s
IEFyZ3VtZW50RGVjb2Rlcio+OjppdGVyYXRvciBpdCA9IG1fd2FpdEZvck1lc3NhZ2VNYXAuZmlu
ZChtZXNzYWdlQW5kRGVzdGluYXRpb24pOwotICAgICAgICBpZiAoaXQtPnNlY29uZCkgeworICAg
ICAgICBpZiAoaXQtPnZhbHVlKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogbV93YWl0Rm9yTWVz
c2FnZU1hcCBzaG91bGQgcmVhbGx5IGhvbGQgT3duUHRycyB0bwogICAgICAgICAgICAgLy8gQXJn
dW1lbnREZWNvZGVycywgYnV0IEhhc2hNYXAgZG9lc24ndCBjdXJyZW50bHkgc3VwcG9ydCBPd25Q
dHJzLgotICAgICAgICAgICAgT3duUHRyPEFyZ3VtZW50RGVjb2Rlcj4gYXJndW1lbnRzID0gYWRv
cHRQdHIoaXQtPnNlY29uZCk7CisgICAgICAgICAgICBPd25QdHI8QXJndW1lbnREZWNvZGVyPiBh
cmd1bWVudHMgPSBhZG9wdFB0cihpdC0+dmFsdWUpOwogICAgICAgICAgICAgbV93YWl0Rm9yTWVz
c2FnZU1hcC5yZW1vdmUoaXQpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICByZXR1cm4gYXJn
dW1lbnRzLnJlbGVhc2UoKTsKQEAgLTUzOSw4ICs1MzksOCBAQCB2b2lkIENvbm5lY3Rpb246OnBy
b2Nlc3NJbmNvbWluZ01lc3NhZ2UoTWVzc2FnZUlEIG1lc3NhZ2VJRCwgUGFzc093blB0cjxBcmd1
bWVudAogICAgICAgICAKICAgICAgICAgSGFzaE1hcDxzdGQ6OnBhaXI8dW5zaWduZWQsIHVpbnQ2
NF90PiwgQXJndW1lbnREZWNvZGVyKj46Oml0ZXJhdG9yIGl0ID0gbV93YWl0Rm9yTWVzc2FnZU1h
cC5maW5kKHN0ZDo6bWFrZV9wYWlyKG1lc3NhZ2VJRC50b0ludCgpLCBpbmNvbWluZ01lc3NhZ2Uu
ZGVzdGluYXRpb25JRCgpKSk7CiAgICAgICAgIGlmIChpdCAhPSBtX3dhaXRGb3JNZXNzYWdlTWFw
LmVuZCgpKSB7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kID0gaW5jb21pbmdNZXNzYWdlLnJlbGVh
c2VBcmd1bWVudHMoKS5sZWFrUHRyKCk7Ci0gICAgICAgICAgICBBU1NFUlQoaXQtPnNlY29uZCk7
CisgICAgICAgICAgICBpdC0+dmFsdWUgPSBpbmNvbWluZ01lc3NhZ2UucmVsZWFzZUFyZ3VtZW50
cygpLmxlYWtQdHIoKTsKKyAgICAgICAgICAgIEFTU0VSVChpdC0+dmFsdWUpOwogICAgICAgICAK
ICAgICAgICAgICAgIG1fd2FpdEZvck1lc3NhZ2VDb25kaXRpb24uc2lnbmFsKCk7CiAgICAgICAg
ICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9ndGsvV29y
a1F1ZXVlR3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2d0ay9Xb3JrUXVldWVHdGsu
Y3BwCmluZGV4IDFkZmFiODMuLjY4ODVkNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1Bs
YXRmb3JtL2d0ay9Xb3JrUXVldWVHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3Jt
L2d0ay9Xb3JrUXVldWVHdGsuY3BwCkBAIC0xNjYsNyArMTY2LDcgQEAgdm9pZCBXb3JrUXVldWU6
OnJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKGludCBmaWxlRGVzY3JpcHRvciwgaW50IGNvbmRp
dGlvbiwgY28KICAgICAgICAgVmVjdG9yPEV2ZW50U291cmNlKj4gc291cmNlczsKICAgICAgICAg
RXZlbnRTb3VyY2VJdGVyYXRvciBpdCA9IG1fZXZlbnRTb3VyY2VzLmZpbmQoZmlsZURlc2NyaXB0
b3IpOwogICAgICAgICBpZiAoaXQgIT0gbV9ldmVudFNvdXJjZXMuZW5kKCkpIAotICAgICAgICAg
ICAgc291cmNlcyA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICBzb3VyY2VzID0gaXQtPnZhbHVl
OwogCiAgICAgICAgIHNvdXJjZXMuYXBwZW5kKGV2ZW50U291cmNlKTsKICAgICAgICAgbV9ldmVu
dFNvdXJjZXMuc2V0KGZpbGVEZXNjcmlwdG9yLCBzb3VyY2VzKTsKQEAgLTE4Niw3ICsxODYsNyBA
QCB2b2lkIFdvcmtRdWV1ZTo6dW5yZWdpc3RlckV2ZW50U291cmNlSGFuZGxlcihpbnQgZmlsZURl
c2NyaXB0b3IpCiAgICAgQVNTRVJUKG1fZXZlbnRTb3VyY2VzLmNvbnRhaW5zKGZpbGVEZXNjcmlw
dG9yKSk7CiAKICAgICBpZiAoaXQgIT0gbV9ldmVudFNvdXJjZXMuZW5kKCkpIHsKLSAgICAgICAg
VmVjdG9yPEV2ZW50U291cmNlKj4gc291cmNlcyA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFZlY3Rv
cjxFdmVudFNvdXJjZSo+IHNvdXJjZXMgPSBpdC0+dmFsdWU7CiAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBzb3VyY2VzLnNpemUoKTsgaSsrKQogICAgICAgICAgICAgc291cmNlc1tp
XS0+Y2FuY2VsKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL21hYy9X
b3JrUXVldWVNYWMuY3BwIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vbWFjL1dvcmtRdWV1ZU1h
Yy5jcHAKaW5kZXggYWU0NzNlZS4uNmU1NGNlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
UGxhdGZvcm0vbWFjL1dvcmtRdWV1ZU1hYy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZv
cm0vbWFjL1dvcmtRdWV1ZU1hYy5jcHAKQEAgLTE1Myw3ICsxNTMsNyBAQCB2b2lkIFdvcmtRdWV1
ZTo6dW5yZWdpc3Rlck1hY2hQb3J0RXZlbnRIYW5kbGVyKG1hY2hfcG9ydF90IG1hY2hQb3J0KQog
ICAgIAogICAgIEFTU0VSVChtX2V2ZW50U291cmNlcy5jb250YWlucyhtYWNoUG9ydCkpOwogCi0g
ICAgRXZlbnRTb3VyY2UqIGV2ZW50U291cmNlID0gaXQtPnNlY29uZDsKKyAgICBFdmVudFNvdXJj
ZSogZXZlbnRTb3VyY2UgPSBpdC0+dmFsdWU7CiAgICAgLy8gQ2FuY2VsIGFuZCByZWxlYXNlIHRo
ZSBzb3VyY2UuIEl0IHdpbGwgYmUgZGVsZXRlZCBpbiBpdHMgZmluYWxpemUgaGFuZGxlci4KICAg
ICBkaXNwYXRjaF9zb3VyY2VfY2FuY2VsKGV2ZW50U291cmNlLT5kaXNwYXRjaFNvdXJjZSgpKTsK
ICAgICBkaXNwYXRjaF9yZWxlYXNlKGV2ZW50U291cmNlLT5kaXNwYXRjaFNvdXJjZSgpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9QbHVnaW5zL05QUmVtb3RlT2JqZWN0TWFw
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9QbHVnaW5zL05QUmVtb3RlT2JqZWN0TWFwLmNw
cAppbmRleCA3NjQxYWY1Li5iNWVjMmQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvUGx1Z2lucy9OUFJlbW90ZU9iamVjdE1hcC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hh
cmVkL1BsdWdpbnMvTlBSZW1vdGVPYmplY3RNYXAuY3BwCkBAIC0yMDAsNyArMjAwLDcgQEAgdm9p
ZCBOUFJlbW90ZU9iamVjdE1hcDo6cGx1Z2luRGVzdHJveWVkKFBsdWdpbiogcGx1Z2luKQogCiAg
ICAgLy8gR2F0aGVyIHRoZSByZWNlaXZlcnMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcGx1Zy1pbi4K
ICAgICBmb3IgKEhhc2hNYXA8dWludDY0X3QsIE5QT2JqZWN0TWVzc2FnZVJlY2VpdmVyKj46OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbV9yZWdpc3RlcmVkTlBPYmplY3RzLmJlZ2luKCksIGVuZCA9IG1f
cmVnaXN0ZXJlZE5QT2JqZWN0cy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIE5Q
T2JqZWN0TWVzc2FnZVJlY2VpdmVyKiBucE9iamVjdE1lc3NhZ2VSZWNlaXZlciA9IGl0LT5zZWNv
bmQ7CisgICAgICAgIE5QT2JqZWN0TWVzc2FnZVJlY2VpdmVyKiBucE9iamVjdE1lc3NhZ2VSZWNl
aXZlciA9IGl0LT52YWx1ZTsKICAgICAgICAgaWYgKG5wT2JqZWN0TWVzc2FnZVJlY2VpdmVyLT5w
bHVnaW4oKSA9PSBwbHVnaW4pCiAgICAgICAgICAgICBtZXNzYWdlUmVjZWl2ZXJzLmFwcGVuZChu
cE9iamVjdE1lc3NhZ2VSZWNlaXZlcik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvU2hhcmVkL1VzZXJNZXNzYWdlQ29kZXJzLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvVXNl
ck1lc3NhZ2VDb2RlcnMuaAppbmRleCA4NWVkNTdiLi4yOWU3ZDYwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvVXNlck1lc3NhZ2VDb2RlcnMuaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvVXNlck1lc3NhZ2VDb2RlcnMuaApAQCAtOTMsOCArOTMsOCBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICBJbW11dGFibGVEaWN0aW9uYXJ5OjpNYXBUeXBlOjpjb25zdF9pdGVyYXRvciBp
dCA9IG1hcC5iZWdpbigpOwogICAgICAgICAgICAgSW1tdXRhYmxlRGljdGlvbmFyeTo6TWFwVHlw
ZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLmVuZCgpOwogICAgICAgICAgICAgZm9yICg7IGl0
ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgICAgIGVuY29kZXItPmVuY29kZShpdC0+Zmly
c3QpOwotICAgICAgICAgICAgICAgIGVuY29kZXItPmVuY29kZShPd25lcihpdC0+c2Vjb25kLmdl
dCgpKSk7CisgICAgICAgICAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKGl0LT5rZXkpOworICAgICAg
ICAgICAgICAgIGVuY29kZXItPmVuY29kZShPd25lcihpdC0+dmFsdWUuZ2V0KCkpKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViSW50ZW50RGF0YS5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvV2ViSW50ZW50RGF0YS5jcHAKaW5kZXggOTYxMjhkYi4uNDAyZjE1MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkludGVudERhdGEuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9XZWJJbnRlbnREYXRhLmNwcApAQCAtNjUsNyArNjUsNyBAQCBQYXNz
UmVmUHRyPEltbXV0YWJsZURpY3Rpb25hcnk+IFdlYkludGVudERhdGE6OmV4dHJhcygpIGNvbnN0
CiAgICAgSW1tdXRhYmxlRGljdGlvbmFyeTo6TWFwVHlwZSB3a0V4dHJhczsKICAgICBIYXNoTWFw
PFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9zdG9yZS5leHRyYXMuZW5k
KCk7CiAgICAgZm9yIChIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtX3N0b3JlLmV4dHJhcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHdrRXh0
cmFzLnNldChpdC0+Zmlyc3QsIFdlYlN0cmluZzo6Y3JlYXRlKGl0LT5zZWNvbmQpKTsKKyAgICAg
ICAgd2tFeHRyYXMuc2V0KGl0LT5rZXksIFdlYlN0cmluZzo6Y3JlYXRlKGl0LT52YWx1ZSkpOwog
ICAgIHJldHVybiBJbW11dGFibGVEaWN0aW9uYXJ5OjphZG9wdCh3a0V4dHJhcyk7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcmVmZXJlbmNlc1N0b3JlLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcmVmZXJlbmNlc1N0b3JlLmNwcAppbmRleCA4NjY4
YmVjLi45Nzg0ZTVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJlZmVy
ZW5jZXNTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByZWZlcmVuY2Vz
U3RvcmUuY3BwCkBAIC0xNTEsNyArMTUxLDcgQEAgc3RhdGljIHR5cGVuYW1lIE1hcFR5cGU6Ok1h
cHBlZFR5cGUgdmFsdWVGb3JLZXkoY29uc3QgTWFwVHlwZSYgbWFwLCBjb25zdCB0eXBlbmEKIHsK
ICAgICB0eXBlbmFtZSBNYXBUeXBlOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC5maW5kKGtleSk7
CiAgICAgaWYgKGl0ICE9IG1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7Cisg
ICAgICAgIHJldHVybiBpdC0+dmFsdWU7CiAKICAgICByZXR1cm4gZGVmYXVsdFZhbHVlRm9yS2V5
PHR5cGVuYW1lIE1hcFR5cGU6Ok1hcHBlZFR5cGU+KGtleSk7CiB9CkBAIC0xODcsNyArMTg3LDcg
QEAgYm9vbCBXZWJQcmVmZXJlbmNlc1N0b3JlOjpnZXRCb29sVmFsdWVGb3JLZXkoY29uc3QgU3Ry
aW5nJiBrZXkpIGNvbnN0CiAgICAgLy8gRklYTUU6IEV4dGVuZCBvdmVycmlkaW5nIHRvIG90aGVy
IGtleSB0eXBlcyB1c2VkIGZyb20gTGF5b3V0VGVzdENvbnRyb2xsZXIuCiAgICAgQm9vbE92ZXJy
aWRlc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBib29sVGVzdFJ1bm5lck92ZXJyaWRlc01hcCgp
LmZpbmQoa2V5KTsKICAgICBpZiAoaXQgIT0gYm9vbFRlc3RSdW5uZXJPdmVycmlkZXNNYXAoKS5l
bmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBpdC0+dmFs
dWU7CiAgICAgcmV0dXJuIHZhbHVlRm9yS2V5KG1fYm9vbFZhbHVlcywga2V5KTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9XZWJDb3JlQXJndW1lbnRDb2RlcnNN
YWMubW0gYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1dlYkNvcmVBcmd1bWVudENvZGVyc01h
Yy5tbQppbmRleCAxOTZhYjExLi4wZjlkM2Q4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvbWFjL1dlYkNvcmVBcmd1bWVudENvZGVyc01hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvbWFjL1dlYkNvcmVBcmd1bWVudENvZGVyc01hYy5tbQpAQCAtMTgzLDcgKzE4Myw3
IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxSZXNvdXJjZUVycm9yPjo6ZGVjb2RlKEFyZ3VtZW50RGVj
b2RlciogZGVjb2RlciwgUmVzb3VyY2VFcnJvCiAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gc3RyaW5nVXNlckluZm9NYXAuYmVnaW4oKTsKICAgICBIYXNo
TWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gc3RyaW5nVXNlckluZm9N
YXAuZW5kKCk7CiAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgW3VzZXJJbmZv
IHNldE9iamVjdDpuc1N0cmluZyhpdC0+c2Vjb25kKSBmb3JLZXk6bnNTdHJpbmcoaXQtPmZpcnN0
KV07CisgICAgICAgIFt1c2VySW5mbyBzZXRPYmplY3Q6bnNTdHJpbmcoaXQtPnZhbHVlKSBmb3JL
ZXk6bnNTdHJpbmcoaXQtPmtleSldOwogCiAgICAgaWYgKGNlcnRpZmljYXRlLmNlcnRpZmljYXRl
Q2hhaW4oKSkKICAgICAgICAgW3VzZXJJbmZvIHNldE9iamVjdDooTlNBcnJheSAqKWNlcnRpZmlj
YXRlLmNlcnRpZmljYXRlQ2hhaW4oKSBmb3JLZXk6QCJOU0Vycm9yUGVlckNlcnRpZmljYXRlQ2hh
aW5LZXkiXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9Bcmd1bWVudENv
ZGVyc1F0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9Bcmd1bWVudENvZGVyc1F0LmNw
cAppbmRleCBjODliZjQ0Li5hNDM5Y2FmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvcXQvQXJndW1lbnRDb2RlcnNRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL3F0
L0FyZ3VtZW50Q29kZXJzUXQuY3BwCkBAIC04Niw4ICs4Niw4IEBAIGJvb2wgQXJndW1lbnRDb2Rl
cjxXZWJDb3JlOjpEcmFnRGF0YT46OmRlY29kZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIERy
YWdEYXRhCiAgICAgICAgIE1JTUVEYXRhSGFzaE1hcDo6aXRlcmF0b3IgaXQgPSBtYXAuYmVnaW4o
KTsKICAgICAgICAgTUlNRURhdGFIYXNoTWFwOjppdGVyYXRvciBlbmQgPSBtYXAuZW5kKCk7CiAg
ICAgICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIFFCeXRlQXJyYXkg
Ynl0ZXMoKGNoYXIqKWl0LT5zZWNvbmQuZGF0YSgpLCBpdC0+c2Vjb25kLnNpemUoKSk7Ci0gICAg
ICAgICAgICBtaW1lRGF0YS0+c2V0RGF0YShpdC0+Zmlyc3QsIGJ5dGVzKTsKKyAgICAgICAgICAg
IFFCeXRlQXJyYXkgYnl0ZXMoKGNoYXIqKWl0LT52YWx1ZS5kYXRhKCksIGl0LT52YWx1ZS5zaXpl
KCkpOworICAgICAgICAgICAgbWltZURhdGEtPnNldERhdGEoaXQtPmtleSwgYnl0ZXMpOwogICAg
ICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvc291cC9X
ZWJDb3JlQXJndW1lbnRDb2RlcnNTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9zb3Vw
L1dlYkNvcmVBcmd1bWVudENvZGVyc1NvdXAuY3BwCmluZGV4IGRiZTJjNTEuLjMzZDliZDMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9zb3VwL1dlYkNvcmVBcmd1bWVudENvZGVy
c1NvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9zb3VwL1dlYkNvcmVBcmd1bWVu
dENvZGVyc1NvdXAuY3BwCkBAIC0xNDQsNyArMTQ0LDcgQEAgYm9vbCBBcmd1bWVudENvZGVyPFJl
c291cmNlUmVzcG9uc2U+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBSZXNvdXJj
ZVIKICAgICBpZiAoIWRlY29kZXItPmRlY29kZShoZWFkZXJzKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBoZWFkZXJz
LmJlZ2luKCksIGVuZCA9IGhlYWRlcnMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAg
cmVzcG9uc2Uuc2V0SFRUUEhlYWRlckZpZWxkKGl0LT5maXJzdCwgaXQtPnNlY29uZCk7CisgICAg
ICAgIHJlc3BvbnNlLnNldEhUVFBIZWFkZXJGaWVsZChpdC0+a2V5LCBpdC0+dmFsdWUpOwogCiAg
ICAgdWludDMyX3Qgc291cE1lc3NhZ2VGbGFnczsKICAgICBpZiAoIWRlY29kZXItPmRlY29kZShz
b3VwTWVzc2FnZUZsYWdzKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL2V3a19jb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a19jb250ZXh0LmNwcAppbmRleCBmMmVkNDE3Li43NWNmYzM5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCkBAIC05Nyw3ICs5Nyw3
IEBAIHN0cnVjdCBfRXdrX0NvbnRleHQgewogICAgICAgICBIYXNoTWFwPHVpbnQ2NF90LCBFd2tf
RG93bmxvYWRfSm9iKj46Oml0ZXJhdG9yIGl0ID0gZG93bmxvYWRKb2JzLmJlZ2luKCk7CiAgICAg
ICAgIEhhc2hNYXA8dWludDY0X3QsIEV3a19Eb3dubG9hZF9Kb2IqPjo6aXRlcmF0b3IgZW5kID0g
ZG93bmxvYWRKb2JzLmVuZCgpOwogICAgICAgICBmb3IgKCA7IGl0ICE9IGVuZDsgKytpdCkKLSAg
ICAgICAgICAgIGV3a19kb3dubG9hZF9qb2JfdW5yZWYoaXQtPnNlY29uZCk7CisgICAgICAgICAg
ICBld2tfZG93bmxvYWRfam9iX3VucmVmKGl0LT52YWx1ZSk7CiAgICAgfQogfTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwCmluZGV4IGIxYjFiY2Mu
LjFlYmJmZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3
a192aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmll
dy5jcHAKQEAgLTMzNSw3ICszMzUsNyBAQCBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfcHJpdl9sb2Fk
aW5nX3Jlc291cmNlc19jbGVhcihMb2FkaW5nUmVzb3VyY2VzTWFwJiBsb2FkaW5nUgogICAgIExv
YWRpbmdSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbG9hZGluZ1Jlc291cmNlc01hcC5iZWdp
bigpOwogICAgIExvYWRpbmdSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGVuZCA9IGxvYWRpbmdSZXNv
dXJjZXNNYXAuZW5kKCk7CiAgICAgZm9yICggOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGV3
a193ZWJfcmVzb3VyY2VfdW5yZWYoaXQtPnNlY29uZCk7CisgICAgICAgIGV3a193ZWJfcmVzb3Vy
Y2VfdW5yZWYoaXQtPnZhbHVlKTsKIAogICAgIGxvYWRpbmdSZXNvdXJjZXNNYXAuY2xlYXIoKTsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdl
YlZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmll
dy5jcHAKaW5kZXggOGJmNGQ4Zi4uYjY0YmVmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKQEAgLTIyNzYsNyArMjI3Niw3IEBA
IEdMaXN0KiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3N1YnJlc291cmNlcyhXZWJLaXRXZWJWaWV3KiB3
ZWJWaWV3KQogICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiBwcml2ID0gd2ViVmlldy0+cHJpdjsK
ICAgICBSZXNvdXJjZXNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHByaXYtPnN1YnJlc291cmNl
c01hcC5lbmQoKTsKICAgICBmb3IgKFJlc291cmNlc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBw
cml2LT5zdWJyZXNvdXJjZXNNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBz
dWJyZXNvdXJjZXMgPSBnX2xpc3RfcHJlcGVuZChzdWJyZXNvdXJjZXMsIGl0LT5zZWNvbmQuZ2V0
KCkpOworICAgICAgICBzdWJyZXNvdXJjZXMgPSBnX2xpc3RfcHJlcGVuZChzdWJyZXNvdXJjZXMs
IGl0LT52YWx1ZS5nZXQoKSk7CiAKICAgICByZXR1cm4gZ19saXN0X3JldmVyc2Uoc3VicmVzb3Vy
Y2VzKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFdlYlZpZXdCYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFdlYlZpZXdCYXNlLmNwcAppbmRleCBmNjVmYTk3Li5lNzcwNmU2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3Bw
CkBAIC0yMjgsNyArMjI4LDcgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VDb250YWlu
ZXJGb3JhbGwoR3RrQ29udGFpbmVyKiBjb250YWluZXIsIGdib29sZWFuIGkKICAgICBXZWJLaXRX
ZWJWaWV3Q2hpbGRyZW5NYXAgY2hpbGRyZW4gPSBwcml2LT5jaGlsZHJlbjsKICAgICBXZWJLaXRX
ZWJWaWV3Q2hpbGRyZW5NYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGNoaWxkcmVuLmVuZCgpOwog
ICAgIGZvciAoV2ViS2l0V2ViVmlld0NoaWxkcmVuTWFwOjpjb25zdF9pdGVyYXRvciBjdXJyZW50
ID0gY2hpbGRyZW4uYmVnaW4oKTsgY3VycmVudCAhPSBlbmQ7ICsrY3VycmVudCkKLSAgICAgICAg
KCpjYWxsYmFjaykoY3VycmVudC0+Zmlyc3QsIGNhbGxiYWNrRGF0YSk7CisgICAgICAgICgqY2Fs
bGJhY2spKGN1cnJlbnQtPmtleSwgY2FsbGJhY2tEYXRhKTsKIAogICAgIGlmIChpbmNsdWRlSW50
ZXJuYWxzICYmIHByaXYtPmluc3BlY3RvclZpZXcpCiAgICAgICAgICgqY2FsbGJhY2spKHByaXYt
Pmluc3BlY3RvclZpZXcsIGNhbGxiYWNrRGF0YSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ByaW50aW5nVmlldy5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvbWFjL1dLUHJpbnRpbmdWaWV3Lm1tCmluZGV4IDYzYzU4ODkuLmNhMWNhZDUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLUHJpbnRpbmdW
aWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLUHJpbnRpbmdW
aWV3Lm1tCkBAIC0xOTQsOCArMTk0LDggQEAgc3RhdGljIEJPT0wgaXNGb3JjaW5nUHJldmlld1Vw
ZGF0ZTsKIC0gKHVpbnQ2NF90KV9leHBlY3RlZFByZXZpZXdDYWxsYmFja0ZvclJlY3Q6KGNvbnN0
IEludFJlY3QmKXJlY3QKIHsKICAgICBmb3IgKEhhc2hNYXA8dWludDY0X3QsIFdlYkNvcmU6Oklu
dFJlY3Q+OjppdGVyYXRvciBpdGVyID0gX2V4cGVjdGVkUHJldmlld0NhbGxiYWNrcy5iZWdpbigp
OyBpdGVyICE9IF9leHBlY3RlZFByZXZpZXdDYWxsYmFja3MuZW5kKCk7ICsraXRlcikgewotICAg
ICAgICBpZiAoaXRlci0+c2Vjb25kICA9PSByZWN0KQotICAgICAgICAgICAgcmV0dXJuIGl0ZXIt
PmZpcnN0OworICAgICAgICBpZiAoaXRlci0+dmFsdWUgID09IHJlY3QpCisgICAgICAgICAgICBy
ZXR1cm4gaXRlci0+a2V5OwogICAgIH0KICAgICByZXR1cm4gMDsKIH0KQEAgLTIyOSw4ICsyMjks
OCBAQCBzdGF0aWMgdm9pZCBwYWdlRGlkRHJhd1RvUERGKFdLRGF0YVJlZiBkYXRhUmVmLCBXS0Vy
cm9yUmVmLCB2b2lkKiB1bnR5cGVkQ29udGV4dAogICAgICAgICAgICAgQVNTRVJUKFt2aWV3IF9p
c1ByaW50aW5nUHJldmlld10pOwogCiAgICAgICAgICAgICBpZiAoZGF0YSkgewotICAgICAgICAg
ICAgICAgIEhhc2hNYXA8V2ViQ29yZTo6SW50UmVjdCwgVmVjdG9yPHVpbnQ4X3Q+ID46OkFkZFJl
c3VsdCBlbnRyeSA9IHZpZXctPl9wYWdlUHJldmlld3MuYWRkKGl0ZXItPnNlY29uZCwgVmVjdG9y
PHVpbnQ4X3Q+KCkpOwotICAgICAgICAgICAgICAgIGVudHJ5Lml0ZXJhdG9yLT5zZWNvbmQuYXBw
ZW5kKGRhdGEtPmJ5dGVzKCksIGRhdGEtPnNpemUoKSk7CisgICAgICAgICAgICAgICAgSGFzaE1h
cDxXZWJDb3JlOjpJbnRSZWN0LCBWZWN0b3I8dWludDhfdD4gPjo6QWRkUmVzdWx0IGVudHJ5ID0g
dmlldy0+X3BhZ2VQcmV2aWV3cy5hZGQoaXRlci0+dmFsdWUsIFZlY3Rvcjx1aW50OF90PigpKTsK
KyAgICAgICAgICAgICAgICBlbnRyeS5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKGRhdGEtPmJ5dGVz
KCksIGRhdGEtPnNpemUoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB2aWV3LT5fZXhw
ZWN0ZWRQcmV2aWV3Q2FsbGJhY2tzLnJlbW92ZShjb250ZXh0LT5jYWxsYmFja0lEKTsKICAgICAg
ICAgICAgIGJvb2wgcmVjZWl2ZWRSZXNwb25zZVRvTGF0ZXN0UmVxdWVzdCA9IHZpZXctPl9sYXRl
c3RFeHBlY3RlZFByZXZpZXdDYWxsYmFjayA9PSBjb250ZXh0LT5jYWxsYmFja0lEOwpAQCAtNDk0
LDcgKzQ5NCw3IEBAIHN0YXRpYyB2b2lkIHByZXBhcmVEYXRhRm9yUHJpbnRpbmdPblNlY29uZGFy
eVRocmVhZCh2b2lkKiB1bnR5cGVkQ29udGV4dCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgcGRmRGF0YUJ5dGVzID0gcGFnZVByZXZpZXdJdGVy
YXRvci0+c2Vjb25kOworICAgIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgcGRmRGF0YUJ5dGVzID0g
cGFnZVByZXZpZXdJdGVyYXRvci0+dmFsdWU7CiAgICAgUmV0YWluUHRyPE5TRGF0YT4gcGRmRGF0
YShBZG9wdE5TLCBbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczpwZGZEYXRhQnl0ZXMuZGF0
YSgpIGxlbmd0aDpwZGZEYXRhQnl0ZXMuc2l6ZSgpXSk7CiAgICAgUmV0YWluUHRyPFBERkRvY3Vt
ZW50PiBwZGZEb2N1bWVudChBZG9wdE5TLCBbW3BkZkRvY3VtZW50Q2xhc3MoKSBhbGxvY10gaW5p
dFdpdGhEYXRhOnBkZkRhdGEuZ2V0KCldKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9tYWMvV0tWaWV3Lm1tCmluZGV4IGExMWVmNjUuLjI5NzE3NGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0KQEAgLTQyMyw3ICs0MjMsNyBAQCBzdGF0aWMg
U3RyaW5nIGNvbW1hbmROYW1lRm9yU2VsZWN0b3IoU0VMIHNlbGVjdG9yKQogICAgIHN0YXRpYyBj
b25zdCBTZWxlY3Rvck5hbWVNYXAqIGV4Y2VwdGlvbk1hcCA9IGNyZWF0ZVNlbGVjdG9yRXhjZXB0
aW9uTWFwKCk7CiAgICAgU2VsZWN0b3JOYW1lTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGV4Y2Vw
dGlvbk1hcC0+ZmluZChzZWxlY3Rvcik7CiAgICAgaWYgKGl0ICE9IGV4Y2VwdGlvbk1hcC0+ZW5k
KCkpCi0gICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gaXQtPnZhbHVl
OwogICAgIAogICAgIC8vIFJlbW92ZSB0aGUgdHJhaWxpbmcgY29sb24uCiAgICAgLy8gTm8gbmVl
ZCB0byBjYXBpdGFsaXplIHRoZSBjb21tYW5kIG5hbWUgc2luY2UgRWRpdG9yIGNvbW1hbmQgbmFt
ZXMgYXJlCkBAIC03MzcsNyArNzM3LDcgQEAgc3RhdGljIHZvaWQgdmFsaWRhdGVDb21tYW5kQ2Fs
bGJhY2soV0tTdHJpbmdSZWYgY29tbWFuZE5hbWUsIGJvb2wgaXNFbmFibGVkLCBpbnQKIAogICAg
IC8vIEFkZCB0aGlzIGl0ZW0gdG8gdGhlIHZlY3RvciBvZiBpdGVtcyBmb3IgYSBnaXZlbiBjb21t
YW5kIHRoYXQgYXJlIGF3YWl0aW5nIHZhbGlkYXRpb24uCiAgICAgVmFsaWRhdGlvbk1hcDo6QWRk
UmVzdWx0IGFkZFJlc3VsdCA9IF9kYXRhLT5fdmFsaWRhdGlvbk1hcC5hZGQoY29tbWFuZE5hbWUs
IFZhbGlkYXRpb25WZWN0b3IoKSk7Ci0gICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQuYXBw
ZW5kKGl0ZW0pOworICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKGl0ZW0pOwog
ICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkgewogICAgICAgICAvLyBJZiB3ZSBhcmUgbm90
IGFscmVhZHkgYXdhaXRpbmcgdmFsaWRhdGlvbiBmb3IgdGhpcyBjb21tYW5kLCBzdGFydCB0aGUg
YXN5bmNocm9ub3VzIHZhbGlkYXRpb24gcHJvY2Vzcy4KICAgICAgICAgLy8gRklYTUU6IFRoZW9y
ZXRpY2FsbHksIHRoZXJlIGlzIGEgcmFjZSBoZXJlOyB3aGVuIHdlIGdldCB0aGUgYW5zd2VyIGl0
IG1pZ2h0IGJlIG9sZCwgZnJvbSBhIHByZXZpb3VzIHRpbWUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9HZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9HZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1
ZXN0TWFuYWdlclByb3h5LmNwcAppbmRleCA3MWJlYWY1Li4wZDQxNjM1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFn
ZXJQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0dlb2xvY2F0aW9uUGVy
bWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuY3BwCkBAIC00Miw3ICs0Miw3IEBAIHZvaWQgR2Vv
bG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eTo6aW52YWxpZGF0ZVJlcXVlc3Rz
KCkKICAgICBQZW5kaW5nUmVxdWVzdE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BlbmRpbmdS
ZXF1ZXN0cy5iZWdpbigpOwogICAgIFBlbmRpbmdSZXF1ZXN0TWFwOjpjb25zdF9pdGVyYXRvciBl
bmQgPSBtX3BlbmRpbmdSZXF1ZXN0cy5lbmQoKTsKICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0
KQotICAgICAgICBpdC0+c2Vjb25kLT5pbnZhbGlkYXRlKCk7CisgICAgICAgIGl0LT52YWx1ZS0+
aW52YWxpZGF0ZSgpOwogCiAgICAgbV9wZW5kaW5nUmVxdWVzdHMuY2xlYXIoKTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvV2ViSW5zcGVj
dG9yU2VydmVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIv
V2ViSW5zcGVjdG9yU2VydmVyLmNwcAppbmRleCBlY2IxNzFiLi4zYTllMjNlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL1dlYkluc3BlY3RvclNl
cnZlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9X
ZWJJbnNwZWN0b3JTZXJ2ZXIuY3BwCkBAIC02Nyw3ICs2Nyw3IEBAIFdlYkluc3BlY3RvclNlcnZl
cjo6fldlYkluc3BlY3RvclNlcnZlcigpCiAgICAgLy8gQ2xvc2UgYW55IHJlbWFpbmluZyBvcGVu
IGNvbm5lY3Rpb25zLgogICAgIEhhc2hNYXA8dW5zaWduZWQsIFdlYlNvY2tldFNlcnZlckNvbm5l
Y3Rpb24qPjo6aXRlcmF0b3IgZW5kID0gbV9jb25uZWN0aW9uTWFwLmVuZCgpOwogICAgIGZvciAo
SGFzaE1hcDx1bnNpZ25lZCwgV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbio+OjppdGVyYXRvciBp
dCA9IG1fY29ubmVjdGlvbk1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAg
V2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbiogY29ubmVjdGlvbiA9IGl0LT5zZWNvbmQ7CisgICAg
ICAgIFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24qIGNvbm5lY3Rpb24gPSBpdC0+dmFsdWU7CiAg
ICAgICAgIFdlYkluc3BlY3RvclByb3h5KiBjbGllbnQgPSBtX2NsaWVudE1hcC5nZXQoY29ubmVj
dGlvbi0+aWRlbnRpZmllcigpKTsKICAgICAgICAgY2xvc2VDb25uZWN0aW9uKGNsaWVudCwgY29u
bmVjdGlvbik7CiAgICAgfQpAQCAtNzgsNyArNzgsNyBAQCBpbnQgV2ViSW5zcGVjdG9yU2VydmVy
OjpyZWdpc3RlclBhZ2UoV2ViSW5zcGVjdG9yUHJveHkqIGNsaWVudCkKICNpZm5kZWYgQVNTRVJU
X0RJU0FCTEVECiAgICAgQ2xpZW50TWFwOjppdGVyYXRvciBlbmQgPSBtX2NsaWVudE1hcC5lbmQo
KTsKICAgICBmb3IgKENsaWVudE1hcDo6aXRlcmF0b3IgaXQgPSBtX2NsaWVudE1hcC5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIEFTU0VSVChpdC0+c2Vjb25kICE9IGNsaWVudCk7
CisgICAgICAgIEFTU0VSVChpdC0+dmFsdWUgIT0gY2xpZW50KTsKICNlbmRpZgogCiAgICAgaW50
IHBhZ2VJZCA9IG1fbmV4dEF2YWlsYWJsZVBhZ2VJZCsrOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9XZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9u
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvV2ViU29ja2V0
U2VydmVyQ29ubmVjdGlvbi5jcHAKaW5kZXggNTcyMDZlYi4uYmVkYTUzZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9XZWJTb2NrZXRTZXJ2ZXJD
b25uZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvSW5zcGVjdG9yU2Vy
dmVyL1dlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24uY3BwCkBAIC0xMDYsOSArMTA2LDkgQEAgdm9p
ZCBXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uOjpzZW5kSFRUUFJlc3BvbnNlSGVhZGVyKGludCBz
dGF0dXNDb2RlLCBjb25zdCBTdHIKICAgICBidWlsZGVyLmFwcGVuZCgiXHJcbiIpOwogICAgIEhU
VFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGhlYWRlckZpZWxkcy5lbmQoKTsKICAg
ICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaGVhZGVyRmllbGRzLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBidWlsZGVyLmFwcGVuZChpdC0+Zmly
c3QpOworICAgICAgICBidWlsZGVyLmFwcGVuZChpdC0+a2V5KTsKICAgICAgICAgYnVpbGRlci5h
cHBlbmQoIjogIik7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKGl0LT5zZWNvbmQgKyAiXHJcbiIp
OworICAgICAgICBidWlsZGVyLmFwcGVuZChpdC0+dmFsdWUgKyAiXHJcbiIpOwogICAgIH0KICAg
ICBidWlsZGVyLmFwcGVuZCgiXHJcbiIpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL3F0L1dlYkluc3BlY3RvclNlcnZlclF0LmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvcXQvV2ViSW5zcGVjdG9yU2Vy
dmVyUXQuY3BwCmluZGV4IDhkZTBmOTMuLmE5M2VhOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvcXQvV2ViSW5zcGVjdG9yU2VydmVyUXQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvcXQvV2ViSW5z
cGVjdG9yU2VydmVyUXQuY3BwCkBAIC04MywxNiArODMsMTYgQEAgdm9pZCBXZWJJbnNwZWN0b3JT
ZXJ2ZXI6OmJ1aWxkUGFnZUxpc3QoVmVjdG9yPGNoYXI+JiBkYXRhLCBTdHJpbmcmIGNvbnRlbnRU
eXBlKQogICAgIGJ1aWxkZXIuYXBwZW5kKCJbICIpOwogICAgIENsaWVudE1hcDo6aXRlcmF0b3Ig
ZW5kID0gbV9jbGllbnRNYXAuZW5kKCk7CiAgICAgZm9yIChDbGllbnRNYXA6Oml0ZXJhdG9yIGl0
ID0gbV9jbGllbnRNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFdlYlBh
Z2VQcm94eSogd2ViUGFnZSA9IGl0LT5zZWNvbmQtPnBhZ2UoKTsKKyAgICAgICAgV2ViUGFnZVBy
b3h5KiB3ZWJQYWdlID0gaXQtPnZhbHVlLT5wYWdlKCk7CiAgICAgICAgIGlmIChpdCAhPSBtX2Ns
aWVudE1hcC5iZWdpbigpKQogICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoIiwgIik7Ci0gICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKCJ7IFwiaWRcIjogIiArIFN0cmluZzo6bnVtYmVyKGl0LT5maXJz
dCkpOworICAgICAgICBidWlsZGVyLmFwcGVuZCgieyBcImlkXCI6ICIgKyBTdHJpbmc6Om51bWJl
cihpdC0+a2V5KSk7CiAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIsIFwidGl0bGVcIjogXCIiKTsK
ICAgICAgICAgYnVpbGRlci5hcHBlbmQod2ViUGFnZS0+cGFnZVRpdGxlKCkpOwogICAgICAgICBi
dWlsZGVyLmFwcGVuZCgiXCIsIFwidXJsXCI6IFwiIik7CiAgICAgICAgIGJ1aWxkZXIuYXBwZW5k
KHdlYlBhZ2UtPmFjdGl2ZVVSTCgpKTsKICAgICAgICAgYnVpbGRlci5hcHBlbmQoIlwiLCBcImlu
c3BlY3RvclVybFwiOiBcIiIpOwotICAgICAgICBidWlsZGVyLmFwcGVuZChyZW1vdGVJbnNwZWN0
b3JQYWdlUGF0aCgpICsgU3RyaW5nOjpudW1iZXIoaXQtPmZpcnN0KSk7CisgICAgICAgIGJ1aWxk
ZXIuYXBwZW5kKHJlbW90ZUluc3BlY3RvclBhZ2VQYXRoKCkgKyBTdHJpbmc6Om51bWJlcihpdC0+
a2V5KSk7CiAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCJcIiB9Iik7CiAgICAgfQogICAgIGJ1aWxk
ZXIuYXBwZW5kKCIgXSIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xh
eWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xh
eWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwCmluZGV4IGFlZTMyNDAuLmQ3YjI5NGYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQ
cm94eS5jcHAKQEAgLTczLDcgKzczLDcgQEAgdm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5
Ojp1cGRhdGVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGludCB0aWxlSUQsIGNvbnMKICAgICAg
ICAgICAgIHN1cmZhY2UgPSBTaGFyZWFibGVTdXJmYWNlOjpjcmVhdGUodXBkYXRlSW5mby5zdXJm
YWNlSGFuZGxlKTsKICAgICAgICAgICAgIG1fc3VyZmFjZXMuYWRkKHRva2VuLCBzdXJmYWNlKTsK
ICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBzdXJmYWNlID0gaXQtPnNlY29uZDsKKyAgICAg
ICAgICAgIHN1cmZhY2UgPSBpdC0+dmFsdWU7CiAgICAgfSBlbHNlCiAgICAgICAgIHN1cmZhY2Ug
PSBTaGFyZWFibGVTdXJmYWNlOjpjcmVhdGUodXBkYXRlSW5mby5zdXJmYWNlSGFuZGxlKTsKICNl
bHNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTm90aWZpY2F0aW9ucy9O
b3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvTm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVz
dE1hbmFnZXJQcm94eS5jcHAKaW5kZXggMDc5MjI5OC4uNGEwYzQ3NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL05vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uUGVybWlzc2lv
blJlcXVlc3RNYW5hZ2VyUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9O
b3RpZmljYXRpb25zL05vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmNw
cApAQCAtNDMsNyArNDMsNyBAQCB2b2lkIE5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFu
YWdlclByb3h5OjppbnZhbGlkYXRlUmVxdWVzdHMoKQogICAgIFBlbmRpbmdSZXF1ZXN0TWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IG1fcGVuZGluZ1JlcXVlc3RzLmJlZ2luKCk7CiAgICAgUGVuZGlu
Z1JlcXVlc3RNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGVuZGluZ1JlcXVlc3RzLmVuZCgp
OwogICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPmludmFs
aWRhdGUoKTsKKyAgICAgICAgaXQtPnZhbHVlLT5pbnZhbGlkYXRlKCk7CiAgICAgCiAgICAgbV9w
ZW5kaW5nUmVxdWVzdHMuY2xlYXIoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzUHJveHkuY3BwCmluZGV4IDQzZmEyZjQuLjM2
OWFkZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL1BsdWdp
blByb2Nlc3NQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMv
UGx1Z2luUHJvY2Vzc1Byb3h5LmNwcApAQCAtMTQ2LDEwICsxNDYsMTAgQEAgdm9pZCBQbHVnaW5Q
cm9jZXNzUHJveHk6OnBsdWdpblByb2Nlc3NDcmFzaGVkT3JGYWlsZWRUb0xhdW5jaCgpCiAgICAg
fQogCiAgICAgd2hpbGUgKCFtX3BlbmRpbmdHZXRTaXRlc1JlcGxpZXMuaXNFbXB0eSgpKQotICAg
ICAgICBkaWRHZXRTaXRlc1dpdGhEYXRhKFZlY3RvcjxTdHJpbmc+KCksIG1fcGVuZGluZ0dldFNp
dGVzUmVwbGllcy5iZWdpbigpLT5maXJzdCk7CisgICAgICAgIGRpZEdldFNpdGVzV2l0aERhdGEo
VmVjdG9yPFN0cmluZz4oKSwgbV9wZW5kaW5nR2V0U2l0ZXNSZXBsaWVzLmJlZ2luKCktPmtleSk7
CiAKICAgICB3aGlsZSAoIW1fcGVuZGluZ0NsZWFyU2l0ZURhdGFSZXBsaWVzLmlzRW1wdHkoKSkK
LSAgICAgICAgZGlkQ2xlYXJTaXRlRGF0YShtX3BlbmRpbmdDbGVhclNpdGVEYXRhUmVwbGllcy5i
ZWdpbigpLT5maXJzdCk7CisgICAgICAgIGRpZENsZWFyU2l0ZURhdGEobV9wZW5kaW5nQ2xlYXJT
aXRlRGF0YVJlcGxpZXMuYmVnaW4oKS0+a2V5KTsKIAogICAgIC8vIFRlbGwgdGhlIHBsdWctaW4g
cHJvY2VzcyBtYW5hZ2VyIHRvIGZvcmdldCBhYm91dCB0aGlzIHBsdWctaW4gcHJvY2VzcyBwcm94
eS4gVGhpcyBtYXkgY2F1c2UgdXMgdG8gYmUgZGVsZXRlZC4KICAgICBtX3BsdWdpblByb2Nlc3NN
YW5hZ2VyLT5yZW1vdmVQbHVnaW5Qcm9jZXNzUHJveHkodGhpcyk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViQ29udGV4dC5jcHAKaW5kZXggMjJlNGUyMC4uYWE0Y2Y2NWEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5jcHAKQEAgLTEwMTgsNyArMTAxOCw3IEBAIHN0YXRp
YyBQYXNzUmVmUHRyPE11dGFibGVEaWN0aW9uYXJ5PiBjcmVhdGVEaWN0aW9uYXJ5RnJvbUhhc2hN
YXAoY29uc3QgSGFzaE1hcDxTCiAgICAgUmVmUHRyPE11dGFibGVEaWN0aW9uYXJ5PiByZXN1bHQg
PSBNdXRhYmxlRGljdGlvbmFyeTo6Y3JlYXRlKCk7CiAgICAgSGFzaE1hcDxTdHJpbmcsIHVpbnQ2
NF90Pjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDxT
dHJpbmcsIHVpbnQ2NF90Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KQotICAgICAgICByZXN1bHQtPnNldChpdC0+Zmlyc3QsIFJlZlB0cjxXZWJVSW50
NjQ+KFdlYlVJbnQ2NDo6Y3JlYXRlKGl0LT5zZWNvbmQpKS5nZXQoKSk7CisgICAgICAgIHJlc3Vs
dC0+c2V0KGl0LT5rZXksIFJlZlB0cjxXZWJVSW50NjQ+KFdlYlVJbnQ2NDo6Y3JlYXRlKGl0LT52
YWx1ZSkpLmdldCgpKTsKICAgICAKICAgICByZXR1cm4gcmVzdWx0OwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkljb25EYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViSWNvbkRhdGFiYXNlLmNwcAppbmRleCBjMGM3MDYxLi5kMmExMDZm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViSWNvbkRhdGFiYXNlLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViSWNvbkRhdGFiYXNlLmNwcApAQCAt
MjYzLDE0ICsyNjMsMTQgQEAgdm9pZCBXZWJJY29uRGF0YWJhc2U6OmRpZEZpbmlzaFVSTEltcG9y
dCgpCiAgICAgSGFzaE1hcDx1aW50NjRfdCwgU3RyaW5nPjo6aXRlcmF0b3IgZW5kID0gbV9wZW5k
aW5nTG9hZERlY2lzaW9uVVJMTWFwLmVuZCgpOwogICAgIAogICAgIGZvciAoOyBpICE9IGVuZDsg
KytpKSB7Ci0gICAgICAgIExPRyhJY29uRGF0YWJhc2UsICJXSzIgVUlQcm9jZXNzIHBlcmZvcm1p
bmcgZGVsYXllZCBjYWxsYmFjayBvbiBjYWxsYmFjayBJRCAlaSBmb3IgcGFnZSB1cmwgJXMiLCAo
aW50KWktPmZpcnN0LCBpLT5zZWNvbmQuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICBJY29uTG9h
ZERlY2lzaW9uIGRlY2lzaW9uID0gbV9pY29uRGF0YWJhc2VJbXBsLT5zeW5jaHJvbm91c0xvYWRE
ZWNpc2lvbkZvckljb25VUkwoaS0+c2Vjb25kLCAwKTsKKyAgICAgICAgTE9HKEljb25EYXRhYmFz
ZSwgIldLMiBVSVByb2Nlc3MgcGVyZm9ybWluZyBkZWxheWVkIGNhbGxiYWNrIG9uIGNhbGxiYWNr
IElEICVpIGZvciBwYWdlIHVybCAlcyIsIChpbnQpaS0+a2V5LCBpLT52YWx1ZS5hc2NpaSgpLmRh
dGEoKSk7CisgICAgICAgIEljb25Mb2FkRGVjaXNpb24gZGVjaXNpb24gPSBtX2ljb25EYXRhYmFz
ZUltcGwtPnN5bmNocm9ub3VzTG9hZERlY2lzaW9uRm9ySWNvblVSTChpLT52YWx1ZSwgMCk7CiAK
ICAgICAgICAgLy8gRGVjaXNpb25zIHNob3VsZCBuZXZlciBiZSB1bmtub3duIGFmdGVyIHRoZSBp
bml0YWwgaW1wb3J0IGlzIGNvbXBsZXRlCiAgICAgICAgIEFTU0VSVChkZWNpc2lvbiAhPSBJY29u
TG9hZFVua25vd24pOwogCiAgICAgICAgIC8vIEZJWE1FIChNdWx0aS1XZWJQcm9jZXNzKTogV2Ug
bmVlZCB0byBrbm93IHdoaWNoIGNvbm5lY3Rpb24gdG8gc2VuZCB0aGlzIG1lc3NhZ2UgdG8uCi0g
ICAgICAgIG1fd2ViQ29udGV4dC0+c2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJJY29u
RGF0YWJhc2VQcm94eTo6UmVjZWl2ZWRJY29uTG9hZERlY2lzaW9uKHN0YXRpY19jYXN0PGludD4o
ZGVjaXNpb24pLCBpLT5maXJzdCkpOworICAgICAgICBtX3dlYkNvbnRleHQtPnNlbmRUb0FsbFBy
b2Nlc3NlcyhNZXNzYWdlczo6V2ViSWNvbkRhdGFiYXNlUHJveHk6OlJlY2VpdmVkSWNvbkxvYWRE
ZWNpc2lvbihzdGF0aWNfY2FzdDxpbnQ+KGRlY2lzaW9uKSwgaS0+a2V5KSk7CiAgICAgfQogICAg
IAogICAgIG1fcGVuZGluZ0xvYWREZWNpc2lvblVSTE1hcC5jbGVhcigpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVyLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJlci5jcHAKaW5kZXggZmJkOWI1
YS4uMWU1MzU3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkxheWVy
VHJlZVJlbmRlcmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViTGF5ZXJU
cmVlUmVuZGVyZXIuY3BwCkBAIC0xODMsNyArMTgzLDcgQEAgdm9pZCBXZWJMYXllclRyZWVSZW5k
ZXJlcjo6YWRqdXN0UG9zaXRpb25Gb3JGaXhlZExheWVycygpCiAKICAgICBMYXllck1hcDo6aXRl
cmF0b3IgZW5kID0gbV9maXhlZExheWVycy5lbmQoKTsKICAgICBmb3IgKExheWVyTWFwOjppdGVy
YXRvciBpdCA9IG1fZml4ZWRMYXllcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAg
ICB0b1RleHR1cmVNYXBwZXJMYXllcihpdC0+c2Vjb25kKS0+c2V0U2Nyb2xsUG9zaXRpb25EZWx0
YUlmTmVlZGVkKGRlbHRhKTsKKyAgICAgICAgdG9UZXh0dXJlTWFwcGVyTGF5ZXIoaXQtPnZhbHVl
KS0+c2V0U2Nyb2xsUG9zaXRpb25EZWx0YUlmTmVlZGVkKGRlbHRhKTsKIH0KIAogdm9pZCBXZWJM
YXllclRyZWVSZW5kZXJlcjo6ZGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24oY29uc3QgSW50UG9pbnQm
IHBvc2l0aW9uKQpAQCAtMjA2LDcgKzIwNiw3IEBAIHZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6
OnN5bmNDYW52YXMoV2ViTGF5ZXJJRCBpZCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgY2FuCiAg
ICAgICAgIGNhbnZhc0JhY2tpbmdTdG9yZSA9IFRleHR1cmVNYXBwZXJTdXJmYWNlQmFja2luZ1N0
b3JlOjpjcmVhdGUoKTsKICAgICAgICAgbV9zdXJmYWNlQmFja2luZ1N0b3Jlcy5zZXQoaWQsIGNh
bnZhc0JhY2tpbmdTdG9yZSk7CiAgICAgfSBlbHNlCi0gICAgICAgIGNhbnZhc0JhY2tpbmdTdG9y
ZSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIGNhbnZhc0JhY2tpbmdTdG9yZSA9IGl0LT52YWx1ZTsK
IAogICAgIGNhbnZhc0JhY2tpbmdTdG9yZS0+c2V0R3JhcGhpY3NTdXJmYWNlKGdyYXBoaWNzU3Vy
ZmFjZVRva2VuLCBjYW52YXNTaXplKTsKICAgICBsYXllci0+c2V0Q29udGVudHNUb01lZGlhKGNh
bnZhc0JhY2tpbmdTdG9yZS5nZXQoKSk7CkBAIC0yMTcsNyArMjE3LDcgQEAgdm9pZCBXZWJMYXll
clRyZWVSZW5kZXJlcjo6c2V0TGF5ZXJDaGlsZHJlbihXZWJMYXllcklEIGlkLCBjb25zdCBWZWN0
b3I8V2ViTGF5ZXIKIHsKICAgICBlbnN1cmVMYXllcihpZCk7CiAgICAgTGF5ZXJNYXA6Oml0ZXJh
dG9yIGl0ID0gbV9sYXllcnMuZmluZChpZCk7Ci0gICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBp
dC0+c2Vjb25kOworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gaXQtPnZhbHVlOwogICAgIFZl
Y3RvcjxHcmFwaGljc0xheWVyKj4gY2hpbGRyZW47CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGNoaWxkSURzLnNpemUoKTsgKytpKSB7CkBAIC0yMzksNyArMjM5LDcgQEAgdm9pZCBXZWJM
YXllclRyZWVSZW5kZXJlcjo6c2V0TGF5ZXJGaWx0ZXJzKFdlYkxheWVySUQgaWQsIGNvbnN0IEZp
bHRlck9wZXJhdGlvbnMKICAgICBMYXllck1hcDo6aXRlcmF0b3IgaXQgPSBtX2xheWVycy5maW5k
KGlkKTsKICAgICBBU1NFUlQoaXQgIT0gbV9sYXllcnMuZW5kKCkpOwogCi0gICAgR3JhcGhpY3NM
YXllciogbGF5ZXIgPSBpdC0+c2Vjb25kOworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gaXQt
PnZhbHVlOwogICAgIGxheWVyLT5zZXRGaWx0ZXJzKGZpbHRlcnMpOwogfQogI2VuZGlmCkBAIC0y
NTAsNyArMjUwLDcgQEAgdm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6c2V0TGF5ZXJTdGF0ZShX
ZWJMYXllcklEIGlkLCBjb25zdCBXZWJMYXllckluZm8mIGxheWUKICAgICBMYXllck1hcDo6aXRl
cmF0b3IgaXQgPSBtX2xheWVycy5maW5kKGlkKTsKICAgICBBU1NFUlQoaXQgIT0gbV9sYXllcnMu
ZW5kKCkpOwogCi0gICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBpdC0+c2Vjb25kOworICAgIEdy
YXBoaWNzTGF5ZXIqIGxheWVyID0gaXQtPnZhbHVlOwogCiAgICAgbGF5ZXItPnNldFJlcGxpY2F0
ZWRCeUxheWVyKGxheWVyQnlJRChsYXllckluZm8ucmVwbGljYSkpOwogICAgIGxheWVyLT5zZXRN
YXNrTGF5ZXIobGF5ZXJCeUlEKGxheWVySW5mby5tYXNrKSk7CkBAIC0zNzYsNyArMzc2LDcgQEAg
dm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6YXNzaWduSW1hZ2VUb0xheWVyKEdyYXBoaWNzTGF5
ZXIqIGxheWVyLCBpbnQ2NF90IGltYWcKIAogICAgIEhhc2hNYXA8aW50NjRfdCwgUmVmUHRyPFRl
eHR1cmVNYXBwZXJCYWNraW5nU3RvcmU+ID46Oml0ZXJhdG9yIGl0ID0gbV9kaXJlY3RseUNvbXBv
c2l0ZWRJbWFnZXMuZmluZChpbWFnZUlEKTsKICAgICBBU1NFUlQoaXQgIT0gbV9kaXJlY3RseUNv
bXBvc2l0ZWRJbWFnZXMuZW5kKCkpOwotICAgIGxheWVyLT5zZXRDb250ZW50c1RvTWVkaWEoaXQt
PnNlY29uZC5nZXQoKSk7CisgICAgbGF5ZXItPnNldENvbnRlbnRzVG9NZWRpYShpdC0+dmFsdWUu
Z2V0KCkpOwogfQogCiB2b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpjb21taXRUaWxlT3BlcmF0
aW9ucygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1By
b3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCmlu
ZGV4IGUzY2RjODguLjI4YTJiZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJQcm9jZXNzUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQ
cm9jZXNzUHJveHkuY3BwCkBAIC0yNTMsOSArMjUzLDkgQEAgYm9vbCBXZWJQcm9jZXNzUHJveHk6
OmNoZWNrVVJMUmVjZWl2ZWRGcm9tV2ViUHJvY2Vzcyhjb25zdCBLVVJMJiB1cmwpCiAgICAgLy8g
SXRlbXMgaW4gYmFjay9mb3J3YXJkIGxpc3QgaGF2ZSBiZWVuIGFscmVhZHkgY2hlY2tlZC4KICAg
ICAvLyBPbmUgY2FzZSB3aGVyZSB3ZSBkb24ndCBoYXZlIHNhbmRib3ggZXh0ZW5zaW9ucyBmb3Ig
ZmlsZSBVUkxzIGluIGIvZiBsaXN0IGlzIGlmIHRoZSBsaXN0IGhhcyBiZWVuIHJlaW5zdGF0ZWQg
YWZ0ZXIgYSBjcmFzaCBvciBhIGJyb3dzZXIgcmVzdGFydC4KICAgICBmb3IgKFdlYkJhY2tGb3J3
YXJkTGlzdEl0ZW1NYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2JhY2tGb3J3YXJkTGlzdEl0ZW1NYXAu
YmVnaW4oKSwgZW5kID0gbV9iYWNrRm9yd2FyZExpc3RJdGVtTWFwLmVuZCgpOyBpdGVyICE9IGVu
ZDsgKytpdGVyKSB7Ci0gICAgICAgIGlmIChLVVJMKEtVUkwoKSwgaXRlci0+c2Vjb25kLT51cmwo
KSkuZmlsZVN5c3RlbVBhdGgoKSA9PSBwYXRoKQorICAgICAgICBpZiAoS1VSTChLVVJMKCksIGl0
ZXItPnZhbHVlLT51cmwoKSkuZmlsZVN5c3RlbVBhdGgoKSA9PSBwYXRoKQogICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIGlmIChLVVJMKEtVUkwoKSwgaXRlci0+c2Vjb25kLT5vcmln
aW5hbFVSTCgpKS5maWxlU3lzdGVtUGF0aCgpID09IHBhdGgpCisgICAgICAgIGlmIChLVVJMKEtV
UkwoKSwgaXRlci0+dmFsdWUtPm9yaWdpbmFsVVJMKCkpLmZpbGVTeXN0ZW1QYXRoKCkgPT0gcGF0
aCkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMjc4LDE1ICsyNzgsMTUg
QEAgdm9pZCBXZWJQcm9jZXNzUHJveHk6OmFkZEJhY2tGb3J3YXJkSXRlbSh1aW50NjRfdCBpdGVt
SUQsIGNvbnN0IFN0cmluZyYgb3JpZ2luYWwKIAogICAgIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW1N
YXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX2JhY2tGb3J3YXJkTGlzdEl0ZW1NYXAuYWRkKGl0ZW1J
RCwgMCk7CiAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIHJlc3VsdC5pdGVy
YXRvci0+c2Vjb25kID0gV2ViQmFja0ZvcndhcmRMaXN0SXRlbTo6Y3JlYXRlKG9yaWdpbmFsVVJM
LCB1cmwsIHRpdGxlLCBiYWNrRm9yd2FyZERhdGEuZGF0YSgpLCBiYWNrRm9yd2FyZERhdGEuc2l6
ZSgpLCBpdGVtSUQpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gV2ViQmFja0Zv
cndhcmRMaXN0SXRlbTo6Y3JlYXRlKG9yaWdpbmFsVVJMLCB1cmwsIHRpdGxlLCBiYWNrRm9yd2Fy
ZERhdGEuZGF0YSgpLCBiYWNrRm9yd2FyZERhdGEuc2l6ZSgpLCBpdGVtSUQpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCiAgICAgLy8gVXBkYXRlIGV4aXN0aW5nIGl0ZW0uCi0gICAgcmVzdWx0
Lml0ZXJhdG9yLT5zZWNvbmQtPnNldE9yaWdpbmFsVVJMKG9yaWdpbmFsVVJMKTsKLSAgICByZXN1
bHQuaXRlcmF0b3ItPnNlY29uZC0+c2V0VVJMKHVybCk7Ci0gICAgcmVzdWx0Lml0ZXJhdG9yLT5z
ZWNvbmQtPnNldFRpdGxlKHRpdGxlKTsKLSAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZC0+c2V0
QmFja0ZvcndhcmREYXRhKGJhY2tGb3J3YXJkRGF0YS5kYXRhKCksIGJhY2tGb3J3YXJkRGF0YS5z
aXplKCkpOworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPnNldE9yaWdpbmFsVVJMKG9yaWdp
bmFsVVJMKTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5zZXRVUkwodXJsKTsKKyAgICBy
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5zZXRUaXRsZSh0aXRsZSk7CisgICAgcmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZS0+c2V0QmFja0ZvcndhcmREYXRhKGJhY2tGb3J3YXJkRGF0YS5kYXRhKCksIGJh
Y2tGb3J3YXJkRGF0YS5zaXplKCkpOwogfQogCiAjaWYgRU5BQkxFKFBMVUdJTl9QUk9DRVNTKQpA
QCAtNTAwLDcgKzUwMCw3IEBAIHNpemVfdCBXZWJQcm9jZXNzUHJveHk6OmZyYW1lQ291bnRJblBh
Z2UoV2ViUGFnZVByb3h5KiBwYWdlKSBjb25zdAogewogICAgIHNpemVfdCByZXN1bHQgPSAwOwog
ICAgIGZvciAoSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPFdlYkZyYW1lUHJveHk+ID46OmNvbnN0
X2l0ZXJhdG9yIGl0ZXIgPSBtX2ZyYW1lTWFwLmJlZ2luKCk7IGl0ZXIgIT0gbV9mcmFtZU1hcC5l
bmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIGlmIChpdGVyLT5zZWNvbmQtPnBhZ2UoKSA9PSBwYWdl
KQorICAgICAgICBpZiAoaXRlci0+dmFsdWUtPnBhZ2UoKSA9PSBwYWdlKQogICAgICAgICAgICAg
KytyZXN1bHQ7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvdGV4bWFwL0xheWVyQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy90ZXhtYXAvTGF5ZXJCYWNraW5nU3RvcmUuY3BwCmluZGV4IDQzZGJl
MGMuLmU4YmZmODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy90ZXhtYXAv
TGF5ZXJCYWNraW5nU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy90ZXht
YXAvTGF5ZXJCYWNraW5nU3RvcmUuY3BwCkBAIC04MCwxNSArODAsMTUgQEAgdm9pZCBMYXllckJh
Y2tpbmdTdG9yZTo6dXBkYXRlVGlsZShpbnQgaWQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3Qs
IGNvbnN0IEludFIKIHsKICAgICBIYXNoTWFwPGludCwgTGF5ZXJCYWNraW5nU3RvcmVUaWxlPjo6
aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmZpbmQoaWQpOwogICAgIEFTU0VSVChpdCAhPSBtX3RpbGVz
LmVuZCgpKTsKLSAgICBpdC0+c2Vjb25kLmluY3JlbWVudFJlcGFpbnRDb3VudCgpOwotICAgIGl0
LT5zZWNvbmQuc2V0QmFja0J1ZmZlcih0YXJnZXRSZWN0LCBzb3VyY2VSZWN0LCBiYWNrQnVmZmVy
LCBvZmZzZXQpOworICAgIGl0LT52YWx1ZS5pbmNyZW1lbnRSZXBhaW50Q291bnQoKTsKKyAgICBp
dC0+dmFsdWUuc2V0QmFja0J1ZmZlcih0YXJnZXRSZWN0LCBzb3VyY2VSZWN0LCBiYWNrQnVmZmVy
LCBvZmZzZXQpOwogfQogCiBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IExheWVyQmFja2luZ1N0
b3JlOjp0ZXh0dXJlKCkgY29uc3QKIHsKICAgICBIYXNoTWFwPGludCwgTGF5ZXJCYWNraW5nU3Rv
cmVUaWxlPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV90aWxlcy5lbmQoKTsKICAgICBmb3IgKEhh
c2hNYXA8aW50LCBMYXllckJhY2tpbmdTdG9yZVRpbGU+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1f
dGlsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFJlZlB0cjxCaXRtYXBU
ZXh0dXJlPiB0ZXh0dXJlID0gaXQtPnNlY29uZC50ZXh0dXJlKCk7CisgICAgICAgIFJlZlB0cjxC
aXRtYXBUZXh0dXJlPiB0ZXh0dXJlID0gaXQtPnZhbHVlLnRleHR1cmUoKTsKICAgICAgICAgaWYg
KHRleHR1cmUpCiAgICAgICAgICAgICByZXR1cm4gdGV4dHVyZTsKICAgICB9CkBAIC0xMTIsNyAr
MTEyLDcgQEAgdm9pZCBMYXllckJhY2tpbmdTdG9yZTo6cGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4
dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwgY29uc3QKICAgICBIYXNoTWFwPGludCwgTGF5ZXJC
YWNraW5nU3RvcmVUaWxlPjo6aXRlcmF0b3IgZW5kID0gbV90aWxlcy5lbmQoKTsKICAgICBGbG9h
dFJlY3QgY292ZXJlZFJlY3Q7CiAgICAgZm9yIChIYXNoTWFwPGludCwgTGF5ZXJCYWNraW5nU3Rv
cmVUaWxlPjo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewotICAgICAgICBMYXllckJhY2tpbmdTdG9yZVRpbGUmIHRpbGUgPSBpdC0+c2Vjb25kOworICAg
ICAgICBMYXllckJhY2tpbmdTdG9yZVRpbGUmIHRpbGUgPSBpdC0+dmFsdWU7CiAgICAgICAgIGlm
ICghdGlsZS50ZXh0dXJlKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIApAQCAtMTU2LDcgKzE1
Niw3IEBAIHZvaWQgTGF5ZXJCYWNraW5nU3RvcmU6OmNvbW1pdFRpbGVPcGVyYXRpb25zKFRleHR1
cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIpCiAKICAgICBIYXNoTWFwPGludCwgTGF5ZXJCYWNraW5n
U3RvcmVUaWxlPjo6aXRlcmF0b3IgdGlsZXNFbmQgPSBtX3RpbGVzLmVuZCgpOwogICAgIGZvciAo
SGFzaE1hcDxpbnQsIExheWVyQmFja2luZ1N0b3JlVGlsZT46Oml0ZXJhdG9yIGl0ID0gbV90aWxl
cy5iZWdpbigpOyBpdCAhPSB0aWxlc0VuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC5zd2Fw
QnVmZmVycyh0ZXh0dXJlTWFwcGVyKTsKKyAgICAgICAgaXQtPnZhbHVlLnN3YXBCdWZmZXJzKHRl
eHR1cmVNYXBwZXIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvR2VvbG9jYXRpb24vR2VvbG9jYXRpb25QZXJtaXNzaW9u
UmVxdWVzdE1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9HZW9sb2NhdGlv
bi9HZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5jcHAKaW5kZXggZDZiZGI4ZS4u
ZmNhNzFhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9HZW9sb2NhdGlv
bi9HZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9HZW9sb2NhdGlvbi9HZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0
TWFuYWdlci5jcHAKQEAgLTc0LDcgKzc0LDcgQEAgdm9pZCBHZW9sb2NhdGlvblBlcm1pc3Npb25S
ZXF1ZXN0TWFuYWdlcjo6Y2FuY2VsUmVxdWVzdEZvckdlb2xvY2F0aW9uKEdlb2xvY2F0aW8KICAg
ICAgICAgcmV0dXJuOwogCiAgICAgbV9nZW9sb2NhdGlvblRvSURNYXAucmVtb3ZlKGl0KTsKLSAg
ICBtX2lkVG9HZW9sb2NhdGlvbk1hcC5yZW1vdmUoaXQtPnNlY29uZCk7CisgICAgbV9pZFRvR2Vv
bG9jYXRpb25NYXAucmVtb3ZlKGl0LT52YWx1ZSk7CiB9CiAKIHZvaWQgR2VvbG9jYXRpb25QZXJt
aXNzaW9uUmVxdWVzdE1hbmFnZXI6OmRpZFJlY2VpdmVHZW9sb2NhdGlvblBlcm1pc3Npb25EZWNp
c2lvbih1aW50NjRfdCBnZW9sb2NhdGlvbklELCBib29sIGFsbG93ZWQpCkBAIC04Myw3ICs4Myw3
IEBAIHZvaWQgR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXI6OmRpZFJlY2VpdmVH
ZW9sb2NhdGlvblBlcm1pc3Npb25EZWNpc2lvCiAgICAgaWYgKGl0ID09IG1faWRUb0dlb2xvY2F0
aW9uTWFwLmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBHZW9sb2NhdGlvbiogZ2VvbG9j
YXRpb24gPSBpdC0+c2Vjb25kOworICAgIEdlb2xvY2F0aW9uKiBnZW9sb2NhdGlvbiA9IGl0LT52
YWx1ZTsKICAgICBnZW9sb2NhdGlvbi0+c2V0SXNBbGxvd2VkKGFsbG93ZWQpOwogCiAgICAgbV9p
ZFRvR2VvbG9jYXRpb25NYXAucmVtb3ZlKGl0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxlTm9kZUhhbmRsZS5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3Rl
ZEJ1bmRsZU5vZGVIYW5kbGUuY3BwCmluZGV4IDBjNDI5NWUuLjc3ZTAzMDkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVu
ZGxlTm9kZUhhbmRsZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlLmNwcApAQCAtNjksMTAgKzY5LDEw
IEBAIFBhc3NSZWZQdHI8SW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlPiBJbmplY3RlZEJ1bmRsZU5v
ZGVIYW5kbGU6OmdldE9yQ3JlYXRlKE5vZGUqCiAKICAgICBET01IYW5kbGVDYWNoZTo6QWRkUmVz
dWx0IHJlc3VsdCA9IGRvbUhhbmRsZUNhY2hlKCkuYWRkKG5vZGUsIDApOwogICAgIGlmICghcmVz
dWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJldHVybiBQYXNzUmVmUHRyPEluamVjdGVkQnVuZGxl
Tm9kZUhhbmRsZT4ocmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOworICAgICAgICByZXR1cm4gUGFz
c1JlZlB0cjxJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU+KHJlc3VsdC5pdGVyYXRvci0+dmFsdWUp
OwogCiAgICAgUmVmUHRyPEluamVjdGVkQnVuZGxlTm9kZUhhbmRsZT4gbm9kZUhhbmRsZSA9IElu
amVjdGVkQnVuZGxlTm9kZUhhbmRsZTo6Y3JlYXRlKG5vZGUpOwotICAgIHJlc3VsdC5pdGVyYXRv
ci0+c2Vjb25kID0gbm9kZUhhbmRsZS5nZXQoKTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVl
ID0gbm9kZUhhbmRsZS5nZXQoKTsKICAgICByZXR1cm4gbm9kZUhhbmRsZS5yZWxlYXNlKCk7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
RE9NL0luamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGUuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5jcHAKaW5k
ZXggMWI3NGYwMS4uZDYwMDBhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5k
bGVSYW5nZUhhbmRsZS5jcHAKQEAgLTQ4LDEwICs0OCwxMCBAQCBQYXNzUmVmUHRyPEluamVjdGVk
QnVuZGxlUmFuZ2VIYW5kbGU+IEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OmdldE9yQ3JlYXRl
KFJhbgogCiAgICAgRE9NSGFuZGxlQ2FjaGU6OkFkZFJlc3VsdCByZXN1bHQgPSBkb21IYW5kbGVD
YWNoZSgpLmFkZChyYW5nZSwgMCk7CiAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAg
ICAgcmV0dXJuIFBhc3NSZWZQdHI8SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZT4ocmVzdWx0Lml0
ZXJhdG9yLT5zZWNvbmQpOworICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxJbmplY3RlZEJ1bmRs
ZVJhbmdlSGFuZGxlPihyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKIAogICAgIFJlZlB0cjxJbmpl
Y3RlZEJ1bmRsZVJhbmdlSGFuZGxlPiByYW5nZUhhbmRsZSA9IEluamVjdGVkQnVuZGxlUmFuZ2VI
YW5kbGU6OmNyZWF0ZShyYW5nZSk7Ci0gICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSByYW5n
ZUhhbmRsZS5nZXQoKTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gcmFuZ2VIYW5kbGUu
Z2V0KCk7CiAgICAgcmV0dXJuIHJhbmdlSGFuZGxlLnJlbGVhc2UoKTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Ob3RpZmljYXRpb25zL1dlYk5vdGlmaWNhdGlv
bk1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Ob3RpZmljYXRpb25zL1dl
Yk5vdGlmaWNhdGlvbk1hbmFnZXIuY3BwCmluZGV4IDJkNjY3ZWYuLjI1MWM0MTIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTm90aWZpY2F0aW9ucy9XZWJOb3RpZmljYXRp
b25NYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05vdGlmaWNhdGlv
bnMvV2ViTm90aWZpY2F0aW9uTWFuYWdlci5jcHAKQEAgLTk5LDcgKzk5LDcgQEAgTm90aWZpY2F0
aW9uQ2xpZW50OjpQZXJtaXNzaW9uIFdlYk5vdGlmaWNhdGlvbk1hbmFnZXI6OnBvbGljeUZvck9y
aWdpbihXZWJDb3JlOjoKICAgICBBU1NFUlQoIW9yaWdpbi0+aXNVbmlxdWUoKSk7CiAgICAgSGFz
aE1hcDxTdHJpbmcsIGJvb2w+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGVybWlzc2lvbnNNYXAu
ZmluZChvcmlnaW4tPnRvUmF3U3RyaW5nKCkpOwogICAgIGlmIChpdCAhPSBtX3Blcm1pc3Npb25z
TWFwLmVuZCgpKQotICAgICAgICByZXR1cm4gaXQtPnNlY29uZCA/IE5vdGlmaWNhdGlvbkNsaWVu
dDo6UGVybWlzc2lvbkFsbG93ZWQgOiBOb3RpZmljYXRpb25DbGllbnQ6OlBlcm1pc3Npb25EZW5p
ZWQ7CisgICAgICAgIHJldHVybiBpdC0+dmFsdWUgPyBOb3RpZmljYXRpb25DbGllbnQ6OlBlcm1p
c3Npb25BbGxvd2VkIDogTm90aWZpY2F0aW9uQ2xpZW50OjpQZXJtaXNzaW9uRGVuaWVkOwogI2Vu
ZGlmCiAgICAgCiAgICAgcmV0dXJuIE5vdGlmaWNhdGlvbkNsaWVudDo6UGVybWlzc2lvbk5vdEFs
bG93ZWQ7CkBAIC0xMTYsNyArMTE2LDcgQEAgYm9vbCBXZWJOb3RpZmljYXRpb25NYW5hZ2VyOjpz
aG93KE5vdGlmaWNhdGlvbiogbm90aWZpY2F0aW9uLCBXZWJQYWdlKiBwYWdlKQogICAgIG1fbm90
aWZpY2F0aW9uSURNYXAuc2V0KG5vdGlmaWNhdGlvbklELCBub3RpZmljYXRpb24pOwogICAgIAog
ICAgIE5vdGlmaWNhdGlvbkNvbnRleHRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9ub3RpZmljYXRpb25D
b250ZXh0TWFwLmFkZChub3RpZmljYXRpb24tPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgVmVj
dG9yPHVpbnQ2NF90PigpKS5pdGVyYXRvcjsKLSAgICBpdC0+c2Vjb25kLmFwcGVuZChub3RpZmlj
YXRpb25JRCk7CisgICAgaXQtPnZhbHVlLmFwcGVuZChub3RpZmljYXRpb25JRCk7CiAKICNpZiBF
TkFCTEUoTk9USUZJQ0FUSU9OUykKICAgICBtX3Byb2Nlc3MtPmNvbm5lY3Rpb24oKS0+c2VuZChN
ZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTaG93Tm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbi0+dGl0
bGUoKSwgbm90aWZpY2F0aW9uLT5ib2R5KCksIG5vdGlmaWNhdGlvbi0+aWNvblVSTCgpLnN0cmlu
ZygpLCBub3RpZmljYXRpb24tPnRhZygpLCBub3RpZmljYXRpb24tPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKSwgbm90aWZpY2F0aW9uSUQpLCBw
YWdlLT5wYWdlSUQoKSk7CkBAIC0xNTAsNyArMTUwLDcgQEAgdm9pZCBXZWJOb3RpZmljYXRpb25N
YW5hZ2VyOjpjbGVhck5vdGlmaWNhdGlvbnMoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4
dCoKICAgICBpZiAoaXQgPT0gbV9ub3RpZmljYXRpb25Db250ZXh0TWFwLmVuZCgpKQogICAgICAg
ICByZXR1cm47CiAgICAgCi0gICAgVmVjdG9yPHVpbnQ2NF90PiYgbm90aWZpY2F0aW9uSURzID0g
aXQtPnNlY29uZDsKKyAgICBWZWN0b3I8dWludDY0X3Q+JiBub3RpZmljYXRpb25JRHMgPSBpdC0+
dmFsdWU7CiAgICAgbV9wcm9jZXNzLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYk5v
dGlmaWNhdGlvbk1hbmFnZXJQcm94eTo6Q2xlYXJOb3RpZmljYXRpb25zKG5vdGlmaWNhdGlvbklE
cyksIHBhZ2UtPnBhZ2VJRCgpKTsKICAgICBzaXplX3QgY291bnQgPSBub3RpZmljYXRpb25JRHMu
c2l6ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewpAQCAtMjMz
LDEwICsyMzMsMTAgQEAgdm9pZCBXZWJOb3RpZmljYXRpb25NYW5hZ2VyOjpyZW1vdmVOb3RpZmlj
YXRpb25Gcm9tQ29udGV4dE1hcCh1aW50NjRfdCBub3RpZmljYXQKICAgICAvLyBUaGlzIGlzIGEg
aGVscGVyIGZ1bmN0aW9uIGZvciBtYW5hZ2luZyB0aGUgaGFzaCBtYXBzLgogICAgIE5vdGlmaWNh
dGlvbkNvbnRleHRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9ub3RpZmljYXRpb25Db250ZXh0TWFwLmZp
bmQobm90aWZpY2F0aW9uLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwogICAgIEFTU0VSVChp
dCAhPSBtX25vdGlmaWNhdGlvbkNvbnRleHRNYXAuZW5kKCkpOwotICAgIHNpemVfdCBpbmRleCA9
IGl0LT5zZWNvbmQuZmluZChub3RpZmljYXRpb25JRCk7CisgICAgc2l6ZV90IGluZGV4ID0gaXQt
PnZhbHVlLmZpbmQobm90aWZpY2F0aW9uSUQpOwogICAgIEFTU0VSVChpbmRleCAhPSBub3RGb3Vu
ZCk7Ci0gICAgaXQtPnNlY29uZC5yZW1vdmUoaW5kZXgpOwotICAgIGlmIChpdC0+c2Vjb25kLmlz
RW1wdHkoKSkKKyAgICBpdC0+dmFsdWUucmVtb3ZlKGluZGV4KTsKKyAgICBpZiAoaXQtPnZhbHVl
LmlzRW1wdHkoKSkKICAgICAgICAgbV9ub3RpZmljYXRpb25Db250ZXh0TWFwLnJlbW92ZShpdCk7
CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lu
cy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QUnVudGltZU9iamVjdE1hcC5jcHAKaW5kZXggMmIxMTVm
MS4uNzE5NTcwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5z
L05ldHNjYXBlL05QUnVudGltZU9iamVjdE1hcC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QUnVudGltZU9iamVjdE1hcC5jcHAKQEAgLTIxMiw3
ICsyMTIsNyBAQCB2b2lkIE5QUnVudGltZU9iamVjdE1hcDo6aW52YWxpZGF0ZSgpCiAgICAgVmVj
dG9yPE5QT2JqZWN0Kj4gb2JqZWN0czsKIAogICAgIGZvciAoSGFzaE1hcDxOUE9iamVjdCosIEpT
Qzo6V2VhazxKU05QT2JqZWN0PiA+OjppdGVyYXRvciBwdHIgPSBtX2pzTlBPYmplY3RzLmJlZ2lu
KCksIGVuZCA9IG1fanNOUE9iamVjdHMuZW5kKCk7IHB0ciAhPSBlbmQ7ICsrcHRyKSB7Ci0gICAg
ICAgIEpTTlBPYmplY3QqIGpzTlBPYmplY3QgPSBwdHItPnNlY29uZC5nZXQoKTsKKyAgICAgICAg
SlNOUE9iamVjdCoganNOUE9iamVjdCA9IHB0ci0+dmFsdWUuZ2V0KCk7CiAgICAgICAgIGlmICgh
anNOUE9iamVjdCkgLy8gU2tpcCB6b21iaWVzLgogICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIG9iamVjdHMuYXBwZW5kKGpzTlBPYmplY3QtPmxlYWtOUE9iamVjdCgpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBs
dWdpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0
c2NhcGVQbHVnaW4uY3BwCmluZGV4IDRkODJjZmYwLi45ZmQ4MzZmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW4uY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2Fw
ZVBsdWdpbi5jcHAKQEAgLTE5OSw4ICsxOTksOCBAQCBOUEVycm9yIE5ldHNjYXBlUGx1Z2luOjpk
ZXN0cm95U3RyZWFtKE5QU3RyZWFtKiBzdHJlYW0sIE5QUmVhc29uIHJlYXNvbikKICAgICBOZXRz
Y2FwZVBsdWdpblN0cmVhbSogcGx1Z2luU3RyZWFtID0gMDsKIAogICAgIGZvciAoU3RyZWFtc01h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3N0cmVhbXMuYmVnaW4oKSwgZW5kID0gbV9zdHJlYW1z
LmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQtPm5wU3Ry
ZWFtKCkgPT0gc3RyZWFtKSB7Ci0gICAgICAgICAgICBwbHVnaW5TdHJlYW0gPSBpdC0+c2Vjb25k
LmdldCgpOworICAgICAgICBpZiAoaXQtPnZhbHVlLT5ucFN0cmVhbSgpID09IHN0cmVhbSkgewor
ICAgICAgICAgICAgcGx1Z2luU3RyZWFtID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICB9CkBAIC0zODcsNyArMzg3LDcgQEAgdm9pZCBOZXRzY2Fw
ZVBsdWdpbjo6dW5zY2hlZHVsZVRpbWVyKHVuc2lnbmVkIHRpbWVySUQpCiAgICAgaWYgKGl0ID09
IG1fdGltZXJzLmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBPd25QdHI8VGltZXI+IHRp
bWVyID0gYWRvcHRQdHIoaXQtPnNlY29uZCk7CisgICAgT3duUHRyPFRpbWVyPiB0aW1lciA9IGFk
b3B0UHRyKGl0LT52YWx1ZSk7CiAgICAgbV90aW1lcnMucmVtb3ZlKGl0KTsKIAogICAgIHRpbWVy
LT5zdG9wKCk7CkBAIC03MzAsOCArNzMwLDggQEAgdm9pZCBOZXRzY2FwZVBsdWdpbjo6ZnJhbWVE
aWRGaW5pc2hMb2FkaW5nKHVpbnQ2NF90IHJlcXVlc3RJRCkKICAgICBpZiAoaXQgPT0gbV9wZW5k
aW5nVVJMTm90aWZpY2F0aW9ucy5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU3RyaW5n
IHVybCA9IGl0LT5zZWNvbmQuZmlyc3Q7Ci0gICAgdm9pZCogbm90aWZpY2F0aW9uRGF0YSA9IGl0
LT5zZWNvbmQuc2Vjb25kOworICAgIFN0cmluZyB1cmwgPSBpdC0+dmFsdWUuZmlyc3Q7CisgICAg
dm9pZCogbm90aWZpY2F0aW9uRGF0YSA9IGl0LT52YWx1ZS5zZWNvbmQ7CiAKICAgICBtX3BlbmRp
bmdVUkxOb3RpZmljYXRpb25zLnJlbW92ZShpdCk7CiAgICAgCkBAIC03NDYsOCArNzQ2LDggQEAg
dm9pZCBOZXRzY2FwZVBsdWdpbjo6ZnJhbWVEaWRGYWlsKHVpbnQ2NF90IHJlcXVlc3RJRCwgYm9v
bCB3YXNDYW5jZWxsZWQpCiAgICAgaWYgKGl0ID09IG1fcGVuZGluZ1VSTE5vdGlmaWNhdGlvbnMu
ZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFN0cmluZyB1cmwgPSBpdC0+c2Vjb25kLmZp
cnN0OwotICAgIHZvaWQqIG5vdGlmaWNhdGlvbkRhdGEgPSBpdC0+c2Vjb25kLnNlY29uZDsKKyAg
ICBTdHJpbmcgdXJsID0gaXQtPnZhbHVlLmZpcnN0OworICAgIHZvaWQqIG5vdGlmaWNhdGlvbkRh
dGEgPSBpdC0+dmFsdWUuc2Vjb25kOwogCiAgICAgbV9wZW5kaW5nVVJMTm90aWZpY2F0aW9ucy5y
ZW1vdmUoaXQpOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Q
bHVnaW5zL1BsdWdpblZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5z
L1BsdWdpblZpZXcuY3BwCmluZGV4IDA3MmE2OWMuLmExMDZlNDYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKQEAgLTE3MCw5ICsxNzAs
OSBAQCBzdGF0aWMgU3RyaW5nIGJ1aWxkSFRUUEhlYWRlcnMoY29uc3QgUmVzb3VyY2VSZXNwb25z
ZSYgcmVzcG9uc2UsIGxvbmcgbG9uZyYgZXhwZQogICAgIAogICAgIEhUVFBIZWFkZXJNYXA6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMoKS5lbmQoKTsKICAg
ICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcmVzcG9uc2UuaHR0cEhl
YWRlckZpZWxkcygpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZChpdC0+Zmlyc3QuY2hhcmFjdGVycygpLCBpdC0+Zmlyc3QubGVuZ3RoKCkp
OworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+a2V5LmNoYXJhY3RlcnMoKSwgaXQt
PmtleS5sZW5ndGgoKSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHNlcGFyYXRvci5j
aGFyYWN0ZXJzKCksIHNlcGFyYXRvci5sZW5ndGgoKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKGl0LT5zZWNvbmQuY2hhcmFjdGVycygpLCBpdC0+c2Vjb25kLmxlbmd0aCgpKTsKKyAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPnZhbHVlLmNoYXJhY3RlcnMoKSwgaXQtPnZh
bHVlLmxlbmd0aCgpKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7CiAgICAg
fQogICAgIApAQCAtMjgzLDcgKzI4Myw3IEBAIFBsdWdpblZpZXc6On5QbHVnaW5WaWV3KCkKIAog
ICAgIC8vIENhbmNlbCBhbGwgcGVuZGluZyBmcmFtZSBsb2Fkcy4KICAgICBmb3IgKEZyYW1lTG9h
ZE1hcDo6aXRlcmF0b3IgaXQgPSBtX3BlbmRpbmdGcmFtZUxvYWRzLmJlZ2luKCksIGVuZCA9IG1f
cGVuZGluZ0ZyYW1lTG9hZHMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPmZp
cnN0LT5zZXRMb2FkTGlzdGVuZXIoMCk7CisgICAgICAgIGl0LT5rZXktPnNldExvYWRMaXN0ZW5l
cigwKTsKIAogICAgIGlmIChtX3BsdWdpbiAmJiBtX2lzSW5pdGlhbGl6ZWQpIHsKICAgICAgICAg
bV9pc0JlaW5nRGVzdHJveWVkID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVDb29yZGluYXRvci9MYXllclRyZWVDb29yZGluYXRv
ci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRp
bmF0b3IvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3BwCmluZGV4IGFlMzk5NDQuLjY3YzE0ZmUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVDb29y
ZGluYXRvci9MYXllclRyZWVDb29yZGluYXRvci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUNvb3JkaW5hdG9yL0xheWVyVHJlZUNvb3JkaW5hdG9y
LmNwcApAQCAtNDI0LDcgKzQyNCw3IEBAIGludDY0X3QgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmFk
b3B0SW1hZ2VCYWNraW5nU3RvcmUoSW1hZ2UqIGltYWdlKQogICAgIEhhc2hNYXA8aW50NjRfdCwg
aW50Pjo6aXRlcmF0b3IgaXQgPSBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLmZp
bmQoa2V5KTsKIAogICAgIGlmIChpdCAhPSBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291
bnRzLmVuZCgpKSB7Ci0gICAgICAgICsrKGl0LT5zZWNvbmQpOworICAgICAgICArKyhpdC0+dmFs
dWUpOwogICAgICAgICByZXR1cm4ga2V5OwogICAgIH0KIApAQCAtNDQ5LDkgKzQ0OSw5IEBAIHZv
aWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnJlbGVhc2VJbWFnZUJhY2tpbmdTdG9yZShpbnQ2NF90
IGtleSkKICAgICBpZiAoaXQgPT0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5l
bmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaXQtPnNlY29uZC0tOworICAgIGl0LT52YWx1
ZS0tOwogCi0gICAgaWYgKGl0LT5zZWNvbmQpCisgICAgaWYgKGl0LT52YWx1ZSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5yZW1vdmUo
aXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVy
VHJlZUNvb3JkaW5hdG9yL1dlYkdyYXBoaWNzTGF5ZXIuY3BwIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUNvb3JkaW5hdG9yL1dlYkdyYXBoaWNzTGF5ZXIuY3Bw
CmluZGV4IDE5Y2U0ZDAuLmE2ZDVmNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9MYXllclRyZWVDb29yZGluYXRvci9XZWJHcmFwaGljc0xheWVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0
b3IvV2ViR3JhcGhpY3NMYXllci5jcHAKQEAgLTUzLDcgKzUzLDcgQEAgV2ViR3JhcGhpY3NMYXll
ciogV2ViR3JhcGhpY3NMYXllcjo6bGF5ZXJCeUlEKFdlYktpdDo6V2ViTGF5ZXJJRCBpZCkKICAg
ICBIYXNoTWFwPFdlYkxheWVySUQsIFdlYkdyYXBoaWNzTGF5ZXIqPjo6aXRlcmF0b3IgaXQgPSB0
YWJsZS5maW5kKGlkKTsKICAgICBpZiAoaXQgPT0gdGFibGUuZW5kKCkpCiAgICAgICAgIHJldHVy
biAwOwotICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgIHJldHVybiBpdC0+dmFsdWU7CiB9CiAK
IHN0YXRpYyBXZWJMYXllcklEIHRvV2ViTGF5ZXJJRChHcmFwaGljc0xheWVyKiBsYXllcikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9yd2Fy
ZExpc3RQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFj
a0ZvcndhcmRMaXN0UHJveHkuY3BwCmluZGV4IDRjYTRlNWYuLmJlODJhMTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9yd2FyZExpc3RQcm94
eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3
YXJkTGlzdFByb3h5LmNwcApAQCAtMTMwLDkgKzEzMCw5IEBAIHZvaWQgV2ViQmFja0ZvcndhcmRM
aXN0UHJveHk6OnJlbW92ZUl0ZW0odWludDY0X3QgaXRlbUlEKQogICAgIGlmIChpdCA9PSBpZFRv
SGlzdG9yeUl0ZW1NYXAoKS5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICBX
ZWJDb3JlOjpwYWdlQ2FjaGUoKS0+cmVtb3ZlKGl0LT5zZWNvbmQuZ2V0KCkpOworICAgIFdlYkNv
cmU6OnBhZ2VDYWNoZSgpLT5yZW1vdmUoaXQtPnZhbHVlLmdldCgpKTsKIAotICAgIGhpc3RvcnlJ
dGVtVG9JRE1hcCgpLnJlbW92ZShpdC0+c2Vjb25kKTsKKyAgICBoaXN0b3J5SXRlbVRvSURNYXAo
KS5yZW1vdmUoaXQtPnZhbHVlKTsKICAgICBpZFRvSGlzdG9yeUl0ZW1NYXAoKS5yZW1vdmUoaXQp
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFj
L1dlYlBhZ2VNYWMubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dl
YlBhZ2VNYWMubW0KaW5kZXggNDNkMzgxZS4uNjEwOTYyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQpAQCAtMTIwLDcgKzEy
MCw3IEBAIHN0YXRpYyBTdHJpbmcgY29tbWFuZE5hbWVGb3JTZWxlY3Rvck5hbWUoY29uc3QgU3Ry
aW5nJiBzZWxlY3Rvck5hbWUpCiAgICAgc3RhdGljIGNvbnN0IFNlbGVjdG9yTmFtZU1hcCogZXhj
ZXB0aW9uTWFwID0gY3JlYXRlU2VsZWN0b3JFeGNlcHRpb25NYXAoKTsKICAgICBTZWxlY3Rvck5h
bWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZXhjZXB0aW9uTWFwLT5maW5kKHNlbGVjdG9yTmFt
ZSk7CiAgICAgaWYgKGl0ICE9IGV4Y2VwdGlvbk1hcC0+ZW5kKCkpCi0gICAgICAgIHJldHVybiBp
dC0+c2Vjb25kOworICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwogCiAgICAgLy8gUmVtb3ZlIHRo
ZSB0cmFpbGluZyBjb2xvbi4KICAgICAvLyBObyBuZWVkIHRvIGNhcGl0YWxpemUgdGhlIGNvbW1h
bmQgbmFtZSBzaW5jZSBFZGl0b3IgY29tbWFuZCBuYW1lcyBhcmUgbm90IGNhc2Ugc2Vuc2l0aXZl
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKaW5kZXggNmViOGFiN2Uu
LmI0MGE4ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vz
cy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcApAQCAt
MzM0LDcgKzMzNCw3IEBAIHZvaWQgV2ViUHJvY2Vzczo6dmlzaXRlZExpbmtTdGF0ZUNoYW5nZWQo
Y29uc3QgVmVjdG9yPFdlYkNvcmU6OkxpbmtIYXNoPiYgbGlua0hhCiAgICAgICAgIEhhc2hNYXA8
dWludDY0X3QsIFJlZlB0cjxXZWJQYWdlR3JvdXBQcm94eT4gPjo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtX3BhZ2VHcm91cE1hcC5iZWdpbigpOwogICAgICAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQ
dHI8V2ViUGFnZUdyb3VwUHJveHk+ID46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGFnZUdyb3Vw
TWFwLmVuZCgpOwogICAgICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAg
UGFnZTo6dmlzaXRlZFN0YXRlQ2hhbmdlZChQYWdlR3JvdXA6OnBhZ2VHcm91cChpdC0+c2Vjb25k
LT5pZGVudGlmaWVyKCkpLCBsaW5rSGFzaGVzW2ldKTsKKyAgICAgICAgICAgIFBhZ2U6OnZpc2l0
ZWRTdGF0ZUNoYW5nZWQoUGFnZUdyb3VwOjpwYWdlR3JvdXAoaXQtPnZhbHVlLT5pZGVudGlmaWVy
KCkpLCBsaW5rSGFzaGVzW2ldKTsKICAgICB9CiAKICAgICBwYWdlQ2FjaGUoKS0+bWFya1BhZ2Vz
Rm9yVmlzdGVkTGlua1N0eWxlUmVjYWxjKCk7CkBAIC0zNDYsNyArMzQ2LDcgQEAgdm9pZCBXZWJQ
cm9jZXNzOjphbGxWaXNpdGVkTGlua1N0YXRlQ2hhbmdlZCgpCiAgICAgSGFzaE1hcDx1aW50NjRf
dCwgUmVmUHRyPFdlYlBhZ2VHcm91cFByb3h5PiA+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGFn
ZUdyb3VwTWFwLmJlZ2luKCk7CiAgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPFdlYlBhZ2VH
cm91cFByb3h5PiA+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BhZ2VHcm91cE1hcC5lbmQoKTsK
ICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBQYWdlOjphbGxWaXNpdGVkU3Rh
dGVDaGFuZ2VkKFBhZ2VHcm91cDo6cGFnZUdyb3VwKGl0LT5zZWNvbmQtPmlkZW50aWZpZXIoKSkp
OworICAgICAgICBQYWdlOjphbGxWaXNpdGVkU3RhdGVDaGFuZ2VkKFBhZ2VHcm91cDo6cGFnZUdy
b3VwKGl0LT52YWx1ZS0+aWRlbnRpZmllcigpKSk7CiAKICAgICBwYWdlQ2FjaGUoKS0+bWFya1Bh
Z2VzRm9yVmlzdGVkTGlua1N0eWxlUmVjYWxjKCk7CiB9CkBAIC01MjIsNyArNTIyLDcgQEAgV2Vi
UGFnZSogV2ViUHJvY2Vzczo6Zm9jdXNlZFdlYlBhZ2UoKSBjb25zdAogeyAgICAKICAgICBIYXNo
TWFwPHVpbnQ2NF90LCBSZWZQdHI8V2ViUGFnZT4gPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9w
YWdlTWFwLmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPFdlYlBhZ2U+
ID46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wYWdlTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgewotICAgICAgICBXZWJQYWdlKiBwYWdlID0gKCppdCkuc2Vjb25kLmdldCgpOworICAgICAg
ICBXZWJQYWdlKiBwYWdlID0gKCppdCkudmFsdWUuZ2V0KCk7CiAgICAgICAgIGlmIChwYWdlLT53
aW5kb3dBbmRXZWJQYWdlQXJlRm9jdXNlZCgpKQogICAgICAgICAgICAgcmV0dXJuIHBhZ2U7CiAg
ICAgfQpAQCAtNTQwLDE0ICs1NDAsMTQgQEAgdm9pZCBXZWJQcm9jZXNzOjpjcmVhdGVXZWJQYWdl
KHVpbnQ2NF90IHBhZ2VJRCwgY29uc3QgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycyYKICAgICAv
LyBsaW5rKSB0aGUgV2ViUGFnZSBnZXRzIGNyZWF0ZWQgYm90aCBpbiB0aGUgc3luY2hyb25vdXMg
aGFuZGxlciBhbmQgdGhyb3VnaCB0aGUgbm9ybWFsIHdheS4gCiAgICAgSGFzaE1hcDx1aW50NjRf
dCwgUmVmUHRyPFdlYlBhZ2U+ID46OkFkZFJlc3VsdCByZXN1bHQgPSBtX3BhZ2VNYXAuYWRkKHBh
Z2VJRCwgMCk7CiAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIEFTU0VSVCgh
cmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOwotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29u
ZCA9IFdlYlBhZ2U6OmNyZWF0ZShwYWdlSUQsIHBhcmFtZXRlcnMpOworICAgICAgICBBU1NFUlQo
IXJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVl
ID0gV2ViUGFnZTo6Y3JlYXRlKHBhZ2VJRCwgcGFyYW1ldGVycyk7CiAKICAgICAgICAgLy8gQmFs
YW5jZWQgYnkgYW4gZW5hYmxlVGVybWluYXRpb24gaW4gcmVtb3ZlV2ViUGFnZS4KICAgICAgICAg
ZGlzYWJsZVRlcm1pbmF0aW9uKCk7CiAgICAgfQogCi0gICAgQVNTRVJUKHJlc3VsdC5pdGVyYXRv
ci0+c2Vjb25kKTsKKyAgICBBU1NFUlQocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CiB9CiAKIHZv
aWQgV2ViUHJvY2Vzczo6cmVtb3ZlV2ViUGFnZSh1aW50NjRfdCBwYWdlSUQpCkBAIC03ODQsMTEg
Kzc4NCwxMSBAQCBXZWJQYWdlR3JvdXBQcm94eSogV2ViUHJvY2Vzczo6d2ViUGFnZUdyb3VwKGNv
bnN0IFdlYlBhZ2VHcm91cERhdGEmIHBhZ2VHcm91cERhdAogewogICAgIEhhc2hNYXA8dWludDY0
X3QsIFJlZlB0cjxXZWJQYWdlR3JvdXBQcm94eT4gPjo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fcGFn
ZUdyb3VwTWFwLmFkZChwYWdlR3JvdXBEYXRhLnBhZ2VHcm91cElELCAwKTsKICAgICBpZiAocmVz
dWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgQVNTRVJUKCFyZXN1bHQuaXRlcmF0b3ItPnNlY29u
ZCk7Ci0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gV2ViUGFnZUdyb3VwUHJveHk6
OmNyZWF0ZShwYWdlR3JvdXBEYXRhKTsKKyAgICAgICAgQVNTRVJUKCFyZXN1bHQuaXRlcmF0b3It
PnZhbHVlKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IFdlYlBhZ2VHcm91cFBy
b3h5OjpjcmVhdGUocGFnZUdyb3VwRGF0YSk7CiAgICAgfQogCi0gICAgcmV0dXJuIHJlc3VsdC5p
dGVyYXRvci0+c2Vjb25kLmdldCgpOworICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVl
LmdldCgpOwogfQogCiBzdGF0aWMgYm9vbCBjYW5QbHVnaW5IYW5kbGVSZXNwb25zZShjb25zdCBS
ZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKQEAgLTg4Nyw3ICs4ODcsNyBAQCBzdGF0aWMgdm9p
ZCBmcm9tQ291bnRlZFNldFRvSGFzaE1hcChUeXBlQ291bnRTZXQqIGNvdW50ZWRTZXQsIEhhc2hN
YXA8U3RyaW5nLCB1aQogewogICAgIFR5cGVDb3VudFNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
Y291bnRlZFNldC0+ZW5kKCk7CiAgICAgZm9yIChUeXBlQ291bnRTZXQ6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gY291bnRlZFNldC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBtYXAu
c2V0KGl0LT5maXJzdCwgaXQtPnNlY29uZCk7CisgICAgICAgIG1hcC5zZXQoaXQtPmtleSwgaXQt
PnZhbHVlKTsKIH0KIAogc3RhdGljIHZvaWQgZ2V0V2ViQ29yZU1lbW9yeUNhY2hlU3RhdGlzdGlj
cyhWZWN0b3I8SGFzaE1hcDxTdHJpbmcsIHVpbnQ2NF90PiA+JiByZXN1bHQpCkBAIC0xMDYyLDcg
KzEwNjIsNyBAQCB2b2lkIFdlYlByb2Nlc3M6OnNldFRleHRDaGVja2VyU3RhdGUoY29uc3QgVGV4
dENoZWNrZXJTdGF0ZSYgdGV4dENoZWNrZXJTdGF0ZSkKIAogICAgIEhhc2hNYXA8dWludDY0X3Qs
IFJlZlB0cjxXZWJQYWdlPiA+OjppdGVyYXRvciBlbmQgPSBtX3BhZ2VNYXAuZW5kKCk7CiAgICAg
Zm9yIChIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8V2ViUGFnZT4gPjo6aXRlcmF0b3IgaXQgPSBt
X3BhZ2VNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFdlYlBhZ2UqIHBh
Z2UgPSAoKml0KS5zZWNvbmQuZ2V0KCk7CisgICAgICAgIFdlYlBhZ2UqIHBhZ2UgPSAoKml0KS52
YWx1ZS5nZXQoKTsKICAgICAgICAgaWYgKGNvbnRpbnVvdXNTcGVsbENoZWNraW5nVHVybmVkT2Zm
KQogICAgICAgICAgICAgcGFnZS0+dW5tYXJrQWxsTWlzc3BlbGxpbmdzKCk7CiAgICAgICAgIGlm
IChncmFtbWFyQ2hlY2tpbmdUdXJuZWRPZmYpCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9Nb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyLmNwcCBiL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL01vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIuY3BwCmlu
ZGV4IDcxNjIyMmYuLjEzYzhmZjEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL01vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL2Nocm9taXVtL01vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIuY3BwCkBAIC01
Miw3ICs1Miw3IEBAIHZvaWQgTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcjo6YWRkTW9ja1Jl
Y29nbml0aW9uUmVzdWx0KGNvbnN0IFdlYlN0cmluZyYgcmVzCiAgICAgICAgIFN0cmluZyBsYW5n
U3RyaW5nID0gU3RyaW5nOjpmcm9tVVRGOChsYW5ndWFnZS51dGY4KCkuZGF0YSgpKTsKICAgICAg
ICAgaWYgKCFtX3JlY29nbml0aW9uUmVzdWx0cy5jb250YWlucyhsYW5nU3RyaW5nKSkKICAgICAg
ICAgICAgIG1fcmVjb2duaXRpb25SZXN1bHRzLnNldChsYW5nU3RyaW5nLCBWZWN0b3I8V2ViU3Bl
ZWNoSW5wdXRSZXN1bHQ+KCkpOwotICAgICAgICBtX3JlY29nbml0aW9uUmVzdWx0cy5maW5kKGxh
bmdTdHJpbmcpLT5zZWNvbmQuYXBwZW5kKHJlcyk7CisgICAgICAgIG1fcmVjb2duaXRpb25SZXN1
bHRzLmZpbmQobGFuZ1N0cmluZyktPnZhbHVlLmFwcGVuZChyZXMpOwogICAgIH0KIH0KIApkaWZm
IC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTm90aWZpY2F0aW9uUHJlc2Vu
dGVyLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL05vdGlmaWNhdGlvblByZXNl
bnRlci5jcHAKaW5kZXggMGM1NDAwZi4uYTIxNTg4ZiAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vTm90aWZpY2F0aW9uUHJlc2VudGVyLmNwcAorKysgYi9Ub29scy9E
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9Ob3RpZmljYXRpb25QcmVzZW50ZXIuY3BwCkBAIC03NSw3
ICs3NSw3IEBAIGJvb2wgTm90aWZpY2F0aW9uUHJlc2VudGVyOjpzaW11bGF0ZUNsaWNrKGNvbnN0
IFdlYlN0cmluZyYgdGl0bGUpCiAgICAgaWYgKG1fYWN0aXZlTm90aWZpY2F0aW9ucy5maW5kKGlk
KSA9PSBtX2FjdGl2ZU5vdGlmaWNhdGlvbnMuZW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAKLSAgICBjb25zdCBXZWJOb3RpZmljYXRpb24mIG5vdGlmaWNhdGlvbiA9IG1fYWN0aXZl
Tm90aWZpY2F0aW9ucy5maW5kKGlkKS0+c2Vjb25kOworICAgIGNvbnN0IFdlYk5vdGlmaWNhdGlv
biYgbm90aWZpY2F0aW9uID0gbV9hY3RpdmVOb3RpZmljYXRpb25zLmZpbmQoaWQpLT52YWx1ZTsK
ICAgICBXZWJOb3RpZmljYXRpb24gZXZlbnRUYXJnZXQobm90aWZpY2F0aW9uKTsKICAgICBldmVu
dFRhcmdldC5kaXNwYXRjaENsaWNrRXZlbnQoKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTg5LDcg
Kzg5LDcgQEAgYm9vbCBOb3RpZmljYXRpb25QcmVzZW50ZXI6OnNob3coY29uc3QgV2ViTm90aWZp
Y2F0aW9uJiBub3RpZmljYXRpb24pCiAgICAgICAgIFdURjo6U3RyaW5nIHJlcGxhY2VJZChub3Rp
ZmljYXRpb24ucmVwbGFjZUlkKCkuZGF0YSgpLCBub3RpZmljYXRpb24ucmVwbGFjZUlkKCkubGVu
Z3RoKCkpOwogICAgICAgICBpZiAobV9yZXBsYWNlbWVudHMuZmluZChyZXBsYWNlSWQpICE9IG1f
cmVwbGFjZW1lbnRzLmVuZCgpKQogICAgICAgICAgICAgcHJpbnRmKCJSRVBMQUNJTkcgTk9USUZJ
Q0FUSU9OICVzXG4iLAotICAgICAgICAgICAgICAgICAgIG1fcmVwbGFjZW1lbnRzLmZpbmQocmVw
bGFjZUlkKS0+c2Vjb25kLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgICAgICAgIG1fcmVw
bGFjZW1lbnRzLmZpbmQocmVwbGFjZUlkKS0+dmFsdWUudXRmOCgpLmRhdGEoKSk7CiAKICAgICAg
ICAgbV9yZXBsYWNlbWVudHMuc2V0KHJlcGxhY2VJZCwgV1RGOjpTdHJpbmcoaWRlbnRpZmllci5k
YXRhKCksIGlkZW50aWZpZXIubGVuZ3RoKCkpKTsKICAgICB9CmRpZmYgLS1naXQgYS9Ub29scy9E
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL0NwcEJvdW5kQ2xhc3MuY3BwIGIvVG9v
bHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9DcHBCb3VuZENsYXNzLmNwcApp
bmRleCA5YjRhM2I2Li4xYjI5ZDJiIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9UZXN0UnVubmVyL0NwcEJvdW5kQ2xhc3MuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvQ3BwQm91bmRDbGFzcy5jcHAKQEAgLTIwMywxMCAr
MjAzLDEwIEBAIGJvb2wgQ3BwTlBPYmplY3Q6OnNldFByb3BlcnR5KE5QT2JqZWN0KiBucE9iaiwg
TlBJZGVudGlmaWVyIGlkZW50LCBjb25zdCBOUFZhcmlhCiBDcHBCb3VuZENsYXNzOjp+Q3BwQm91
bmRDbGFzcygpCiB7CiAgICAgZm9yIChNZXRob2RMaXN0OjppdGVyYXRvciBpID0gbV9tZXRob2Rz
LmJlZ2luKCk7IGkgIT0gbV9tZXRob2RzLmVuZCgpOyArK2kpCi0gICAgICAgIGRlbGV0ZSBpLT5z
ZWNvbmQ7CisgICAgICAgIGRlbGV0ZSBpLT52YWx1ZTsKIAogICAgIGZvciAoUHJvcGVydHlMaXN0
OjppdGVyYXRvciBpID0gbV9wcm9wZXJ0aWVzLmJlZ2luKCk7IGkgIT0gbV9wcm9wZXJ0aWVzLmVu
ZCgpOyArK2kpCi0gICAgICAgIGRlbGV0ZSBpLT5zZWNvbmQ7CisgICAgICAgIGRlbGV0ZSBpLT52
YWx1ZTsKIAogICAgIC8vIFVucmVnaXN0ZXIgb3Vyc2VsdmVzIGlmIHdlIHdlcmUgYm91bmQgdG8g
YSBmcmFtZS4KICAgICBpZiAobV9ib3VuZFRvRnJhbWUpCkBAIC0yMzcsNyArMjM3LDcgQEAgYm9v
bCBDcHBCb3VuZENsYXNzOjppbnZva2UoTlBJZGVudGlmaWVyIGlkZW50LAogICAgICAgICB9CiAg
ICAgICAgIGNhbGxiYWNrID0gbV9mYWxsYmFja0NhbGxiYWNrLmdldCgpOwogICAgIH0gZWxzZQot
ICAgICAgICBjYWxsYmFjayA9ICgqbWV0aG9kKS5zZWNvbmQ7CisgICAgICAgIGNhbGxiYWNrID0g
KCptZXRob2QpLnZhbHVlOwogCiAgICAgLy8gQnVpbGQgYSBDcHBBcmd1bWVudExpc3QgYXJndW1l
bnQgdmVjdG9yIGZyb20gdGhlIE5QVmFyaWFudHMgY29taW5nIGluLgogICAgIENwcEFyZ3VtZW50
TGlzdCBjcHBBcmd1bWVudHMoYXJndW1lbnRDb3VudCk7CkBAIC0yNjAsNyArMjYwLDcgQEAgYm9v
bCBDcHBCb3VuZENsYXNzOjpnZXRQcm9wZXJ0eShOUElkZW50aWZpZXIgaWRlbnQsIE5QVmFyaWFu
dCogcmVzdWx0KSBjb25zdAogICAgIH0KIAogICAgIENwcFZhcmlhbnQgY3BwVmFsdWU7Ci0gICAg
aWYgKCFjYWxsYmFjay0+c2Vjb25kLT5nZXRWYWx1ZSgmY3BwVmFsdWUpKQorICAgIGlmICghY2Fs
bGJhY2stPnZhbHVlLT5nZXRWYWx1ZSgmY3BwVmFsdWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgY3BwVmFsdWUuY29weVRvTlBWYXJpYW50KHJlc3VsdCk7CiAgICAgcmV0dXJuIHRydWU7
CkBAIC0yNzQsNyArMjc0LDcgQEAgYm9vbCBDcHBCb3VuZENsYXNzOjpzZXRQcm9wZXJ0eShOUElk
ZW50aWZpZXIgaWRlbnQsIGNvbnN0IE5QVmFyaWFudCogdmFsdWUpCiAKICAgICBDcHBWYXJpYW50
IGNwcFZhbHVlOwogICAgIGNwcFZhbHVlLnNldCgqdmFsdWUpOwotICAgIHJldHVybiAoKmNhbGxi
YWNrKS5zZWNvbmQtPnNldFZhbHVlKGNwcFZhbHVlKTsKKyAgICByZXR1cm4gKCpjYWxsYmFjayku
dmFsdWUtPnNldFZhbHVlKGNwcFZhbHVlKTsKIH0KIAogdm9pZCBDcHBCb3VuZENsYXNzOjpiaW5k
Q2FsbGJhY2soY29uc3Qgc3RyaW5nJiBuYW1lLCBDYWxsYmFjayogY2FsbGJhY2spCkBAIC0yODIs
NyArMjgyLDcgQEAgdm9pZCBDcHBCb3VuZENsYXNzOjpiaW5kQ2FsbGJhY2soY29uc3Qgc3RyaW5n
JiBuYW1lLCBDYWxsYmFjayogY2FsbGJhY2spCiAgICAgTlBJZGVudGlmaWVyIGlkZW50ID0gV2Vi
QmluZGluZ3M6OmdldFN0cmluZ0lkZW50aWZpZXIobmFtZS5jX3N0cigpKTsKICAgICBNZXRob2RM
aXN0OjppdGVyYXRvciBvbGRDYWxsYmFjayA9IG1fbWV0aG9kcy5maW5kKGlkZW50KTsKICAgICBp
ZiAob2xkQ2FsbGJhY2sgIT0gbV9tZXRob2RzLmVuZCgpKSB7Ci0gICAgICAgIGRlbGV0ZSBvbGRD
YWxsYmFjay0+c2Vjb25kOworICAgICAgICBkZWxldGUgb2xkQ2FsbGJhY2stPnZhbHVlOwogICAg
ICAgICBpZiAoIWNhbGxiYWNrKSB7CiAgICAgICAgICAgICBtX21ldGhvZHMucmVtb3ZlKG9sZENh
bGxiYWNrKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTMwOSw3ICszMDksNyBAQCB2b2lkIENw
cEJvdW5kQ2xhc3M6OmJpbmRQcm9wZXJ0eShjb25zdCBzdHJpbmcmIG5hbWUsIFByb3BlcnR5Q2Fs
bGJhY2sqIGNhbGxiYWNrKQogICAgIE5QSWRlbnRpZmllciBpZGVudCA9IFdlYkJpbmRpbmdzOjpn
ZXRTdHJpbmdJZGVudGlmaWVyKG5hbWUuY19zdHIoKSk7CiAgICAgUHJvcGVydHlMaXN0OjppdGVy
YXRvciBvbGRDYWxsYmFjayA9IG1fcHJvcGVydGllcy5maW5kKGlkZW50KTsKICAgICBpZiAob2xk
Q2FsbGJhY2sgIT0gbV9wcm9wZXJ0aWVzLmVuZCgpKSB7Ci0gICAgICAgIGRlbGV0ZSBvbGRDYWxs
YmFjay0+c2Vjb25kOworICAgICAgICBkZWxldGUgb2xkQ2FsbGJhY2stPnZhbHVlOwogICAgICAg
ICBpZiAoIWNhbGxiYWNrKSB7CiAgICAgICAgICAgICBtX3Byb3BlcnRpZXMucmVtb3ZlKG9sZENh
bGxiYWNrKTsKICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL1dlYlByZWZlcmVuY2VzLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1dlYlByZWZlcmVuY2VzLmNwcAppbmRleCBjNGRlMGFiLi42ZWMwZTQzIDEwMDY0
NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5jcHAK
KysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViUHJlZmVyZW5jZXMuY3BwCkBA
IC0xNTYsOSArMTU2LDkgQEAgdHlwZWRlZiB2b2lkICgqU2V0Rm9udEZhbWlseVdyYXBwZXIpKFdl
YlNldHRpbmdzKiwgY29uc3QgV2ViU3RyaW5nJiwgVVNjcmlwdENvZGUKIHN0YXRpYyB2b2lkIGFw
cGx5Rm9udE1hcChXZWJTZXR0aW5ncyogc2V0dGluZ3MsIGNvbnN0IFdlYlByZWZlcmVuY2VzOjpT
Y3JpcHRGb250RmFtaWx5TWFwJiBtYXAsIFNldEZvbnRGYW1pbHlXcmFwcGVyIHNldHRlcikKIHsK
ICAgICBmb3IgKFdlYlByZWZlcmVuY2VzOjpTY3JpcHRGb250RmFtaWx5TWFwOjpjb25zdF9pdGVy
YXRvciBpdGVyID0gbWFwLmJlZ2luKCk7IGl0ZXIgIT0gbWFwLmVuZCgpOyArK2l0ZXIpIHsKLSAg
ICAgICAgY29uc3QgV2ViU3RyaW5nJiBmb250ID0gaXRlci0+c2Vjb25kOworICAgICAgICBjb25z
dCBXZWJTdHJpbmcmIGZvbnQgPSBpdGVyLT52YWx1ZTsKICAgICAgICAgaWYgKCFmb250LmlzTnVs
bCgpICYmICFmb250LmlzRW1wdHkoKSkKLSAgICAgICAgICAgICgqc2V0dGVyKShzZXR0aW5ncywg
Zm9udCwgc3RhdGljX2Nhc3Q8VVNjcmlwdENvZGU+KGl0ZXItPmZpcnN0KSk7CisgICAgICAgICAg
ICAoKnNldHRlcikoc2V0dGluZ3MsIGZvbnQsIHN0YXRpY19jYXN0PFVTY3JpcHRDb2RlPihpdGVy
LT5rZXkpKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL1dlYlZpZXdIb3N0LmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dl
YlZpZXdIb3N0LmNwcAppbmRleCBiYTVlY2YwLi5iMzJlMTQ1IDEwMDY0NAotLS0gYS9Ub29scy9E
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5jcHAKKysrIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuY3BwCkBAIC0xNzU0LDcgKzE3NTQsNyBAQCB2
b2lkIFdlYlZpZXdIb3N0OjpwcmludEZyYW1lVXNlckdlc3R1cmVTdGF0dXMoV2ViRnJhbWUqIHdl
YmZyYW1lLCBjb25zdCBjaGFyKiBtcwogdm9pZCBXZWJWaWV3SG9zdDo6cHJpbnRSZXNvdXJjZURl
c2NyaXB0aW9uKHVuc2lnbmVkIGlkZW50aWZpZXIpCiB7CiAgICAgUmVzb3VyY2VNYXA6Oml0ZXJh
dG9yIGl0ID0gbV9yZXNvdXJjZUlkZW50aWZpZXJNYXAuZmluZChpZGVudGlmaWVyKTsKLSAgICBw
cmludGYoIiVzIiwgaXQgIT0gbV9yZXNvdXJjZUlkZW50aWZpZXJNYXAuZW5kKCkgPyBpdC0+c2Vj
b25kLmNfc3RyKCkgOiAiPHVua25vd24+Iik7CisgICAgcHJpbnRmKCIlcyIsIGl0ICE9IG1fcmVz
b3VyY2VJZGVudGlmaWVyTWFwLmVuZCgpID8gaXQtPnZhbHVlLmNfc3RyKCkgOiAiPHVua25vd24+
Iik7CiB9CiAKIHZvaWQgV2ViVmlld0hvc3Q6OnNldFBlbmRpbmdFeHRyYURhdGEoUGFzc093blB0
cjxUZXN0U2hlbGxFeHRyYURhdGE+IGV4dHJhRGF0YSkKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL21hYy9MYXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbSBiL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL21hYy9MYXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbQppbmRleCBhMzIyODcxLi4xNWZh
ZTM0IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvTGF5b3V0VGVzdENvbnRy
b2xsZXJNYWMubW0KKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0xheW91dFRlc3RDb250
cm9sbGVyTWFjLm1tCkBAIC05MDksOCArOTA5LDggQEAgdW5zaWduZWQgd29ybGRJREZvcldvcmxk
KFdlYlNjcmlwdFdvcmxkICp3b3JsZCkKIHsKICAgICBXb3JsZE1hcDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gd29ybGRNYXAoKS5lbmQoKTsKICAgICBmb3IgKFdvcmxkTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IHdvcmxkTWFwKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlm
IChpdC0+c2Vjb25kID09IHdvcmxkKQotICAgICAgICAgICAgcmV0dXJuIGl0LT5maXJzdDsKKyAg
ICAgICAgaWYgKGl0LT52YWx1ZSA9PSB3b3JsZCkKKyAgICAgICAgICAgIHJldHVybiBpdC0+a2V5
OwogICAgIH0KIAogICAgIHJldHVybiAwOwpAQCAtOTMyLDcgKzkzMiw3IEBAIHZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKHVuc2lnbmVkIHdv
cmxkSUQsIEpTT2JqCiAgICAgaWYgKCF3b3JsZElEKQogICAgICAgICB3b3JsZCA9IFtXZWJTY3Jp
cHRXb3JsZCB3b3JsZF07CiAgICAgZWxzZSB7Ci0gICAgICAgIFJldGFpblB0cjxXZWJTY3JpcHRX
b3JsZD4mIHdvcmxkU2xvdCA9IHdvcmxkTWFwKCkuYWRkKHdvcmxkSUQsIDApLml0ZXJhdG9yLT5z
ZWNvbmQ7CisgICAgICAgIFJldGFpblB0cjxXZWJTY3JpcHRXb3JsZD4mIHdvcmxkU2xvdCA9IHdv
cmxkTWFwKCkuYWRkKHdvcmxkSUQsIDApLml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgaWYgKCF3
b3JsZFNsb3QpCiAgICAgICAgICAgICB3b3JsZFNsb3QuYWRvcHROUyhbW1dlYlNjcmlwdFdvcmxk
IGFsbG9jXSBpbml0XSk7CiAgICAgICAgIHdvcmxkID0gd29ybGRTbG90LmdldCgpOwpkaWZmIC0t
Z2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyV2lu
LmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlcldp
bi5jcHAKaW5kZXggN2Y5YWE2Yy4uNGY1NmVmZCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvd2luL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyV2luLmNwcAorKysgYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS93aW4vQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJXaW4uY3BwCkBAIC01OCw3ICs1
OCw3IEBAIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjp+QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIo
KQogICAgICAgICBVbmhvb2tXaW5FdmVudChtX25vdGlmaWNhdGlvbnNFdmVudEhvb2spOwogCiAg
ICAgZm9yIChIYXNoTWFwPFBsYXRmb3JtVUlFbGVtZW50LCBKU09iamVjdFJlZj46Oml0ZXJhdG9y
IGl0ID0gbV9ub3RpZmljYXRpb25MaXN0ZW5lcnMuYmVnaW4oKTsgaXQgIT0gbV9ub3RpZmljYXRp
b25MaXN0ZW5lcnMuZW5kKCk7ICsraXQpCi0gICAgICAgIEpTVmFsdWVVbnByb3RlY3QoZnJhbWUt
Pmdsb2JhbENvbnRleHQoKSwgaXQtPnNlY29uZCk7CisgICAgICAgIEpTVmFsdWVVbnByb3RlY3Qo
ZnJhbWUtPmdsb2JhbENvbnRleHQoKSwgaXQtPnZhbHVlKTsKIH0KIAogQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6ZWxlbWVudEF0UG9pbnQoaW50IHgsIGlu
dCB5KQpAQCAtMjkzLDcgKzI5Myw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnJl
bW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKCkKIHZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6
Ondpbk5vdGlmaWNhdGlvblJlY2VpdmVkKFBsYXRmb3JtVUlFbGVtZW50IGVsZW1lbnQsIGNvbnN0
IHN0cmluZyYgZXZlbnROYW1lKQogewogICAgIGZvciAoSGFzaE1hcDxQbGF0Zm9ybVVJRWxlbWVu
dCwgSlNPYmplY3RSZWY+OjppdGVyYXRvciBpdCA9IG1fbm90aWZpY2F0aW9uTGlzdGVuZXJzLmJl
Z2luKCk7IGl0ICE9IG1fbm90aWZpY2F0aW9uTGlzdGVuZXJzLmVuZCgpOyArK2l0KSB7Ci0gICAg
ICAgIENPTVB0cjxJU2VydmljZVByb3ZpZGVyPiB0aGlzU2VydmljZVByb3ZpZGVyKFF1ZXJ5LCBp
dC0+Zmlyc3QpOworICAgICAgICBDT01QdHI8SVNlcnZpY2VQcm92aWRlcj4gdGhpc1NlcnZpY2VQ
cm92aWRlcihRdWVyeSwgaXQtPmtleSk7CiAgICAgICAgIGlmICghdGhpc1NlcnZpY2VQcm92aWRl
cikKICAgICAgICAgICAgIGNvbnRpbnVlOwogCkBAIC0zMTYsNyArMzE2LDcgQEAgdm9pZCBBY2Nl
c3NpYmlsaXR5Q29udHJvbGxlcjo6d2luTm90aWZpY2F0aW9uUmVjZWl2ZWQoUGxhdGZvcm1VSUVs
ZW1lbnQgZWxlbWVudCwKIAogICAgICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4ganNOb3Rp
ZmljYXRpb24oQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGV2ZW50TmFtZS5j
X3N0cigpKSk7CiAgICAgICAgIEpTVmFsdWVSZWYgYXJndW1lbnQgPSBKU1ZhbHVlTWFrZVN0cmlu
ZyhmcmFtZS0+Z2xvYmFsQ29udGV4dCgpLCBqc05vdGlmaWNhdGlvbi5nZXQoKSk7Ci0gICAgICAg
IEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24oZnJhbWUtPmdsb2JhbENvbnRleHQoKSwgaXQtPnNlY29u
ZCwgTlVMTCwgMSwgJmFyZ3VtZW50LCBOVUxMKTsKKyAgICAgICAgSlNPYmplY3RDYWxsQXNGdW5j
dGlvbihmcmFtZS0+Z2xvYmFsQ29udGV4dCgpLCBpdC0+dmFsdWUsIE5VTEwsIDEsICZhcmd1bWVu
dCwgTlVMTCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS93
aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJXaW4uY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2lu
L0xheW91dFRlc3RDb250cm9sbGVyV2luLmNwcAppbmRleCBmZmMzZDI2Li4wNDMwODA0IDEwMDY0
NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJXaW4u
Y3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9MYXlvdXRUZXN0Q29udHJvbGxlcldp
bi5jcHAKQEAgLTEyNDYsOCArMTI0Niw4IEBAIHVuc2lnbmVkIHdvcmxkSURGb3JXb3JsZChJV2Vi
U2NyaXB0V29ybGQqIHdvcmxkKQogewogICAgIFdvcmxkTWFwOjpjb25zdF9pdGVyYXRvciBlbmQg
PSB3b3JsZE1hcCgpLmVuZCgpOwogICAgIGZvciAoV29ybGRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gd29ybGRNYXAoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0
LT5zZWNvbmQgPT0gd29ybGQpCi0gICAgICAgICAgICByZXR1cm4gaXQtPmZpcnN0OworICAgICAg
ICBpZiAoaXQtPnZhbHVlID09IHdvcmxkKQorICAgICAgICAgICAgcmV0dXJuIGl0LT5rZXk7CiAg
ICAgfQogCiAgICAgcmV0dXJuIDA7CkBAIC0xMjcxLDcgKzEyNzEsNyBAQCB2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCh1bnNpZ25lZCB3b3Js
ZElELCBKU09iagogICAgICAgICBpZiAoRkFJTEVEKFdlYktpdENyZWF0ZUluc3RhbmNlKF9fdXVp
ZG9mKFdlYlNjcmlwdFdvcmxkKSwgMCwgX191dWlkb2Yod29ybGQpLCByZWludGVycHJldF9jYXN0
PHZvaWQqKj4oJndvcmxkKSkpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0gZWxzZSB7Ci0g
ICAgICAgIENPTVB0cjxJV2ViU2NyaXB0V29ybGQ+JiB3b3JsZFNsb3QgPSB3b3JsZE1hcCgpLmFk
ZCh3b3JsZElELCAwKS5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICBDT01QdHI8SVdlYlNjcmlw
dFdvcmxkPiYgd29ybGRTbG90ID0gd29ybGRNYXAoKS5hZGQod29ybGRJRCwgMCkuaXRlcmF0b3It
PnZhbHVlOwogICAgICAgICBpZiAoIXdvcmxkU2xvdCAmJiBGQUlMRUQoV2ViS2l0Q3JlYXRlSW5z
dGFuY2UoX191dWlkb2YoV2ViU2NyaXB0V29ybGQpLCAwLCBfX3V1aWRvZih3b3JsZFNsb3QpLCBy
ZWludGVycHJldF9jYXN0PHZvaWQqKj4oJndvcmxkU2xvdCkpKSkKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgd29ybGQgPSB3b3JsZFNsb3Q7CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS93aW4vUmVzb3VyY2VMb2FkRGVsZWdhdGUuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvd2luL1Jlc291cmNlTG9hZERlbGVnYXRlLmNwcAppbmRleCAyNmI3MjJhLi5hOGNkM2JkIDEw
MDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vUmVzb3VyY2VMb2FkRGVsZWdhdGUu
Y3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9SZXNvdXJjZUxvYWREZWxlZ2F0ZS5j
cHAKQEAgLTY2LDcgKzY2LDcgQEAgd3N0cmluZyBSZXNvdXJjZUxvYWREZWxlZ2F0ZTo6ZGVzY3Jp
cHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQodW5zaWduZWQgbG9uZyBpZGUKICAgICBpZiAoaXQg
PT0gbV91cmxNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybiBMIjx1bmtub3duPiI7CiAKLSAgICBy
ZXR1cm4gdXJsU3VpdGFibGVGb3JUZXN0UmVzdWx0KGl0LT5zZWNvbmQpOworICAgIHJldHVybiB1
cmxTdWl0YWJsZUZvclRlc3RSZXN1bHQoaXQtPnZhbHVlKTsKIH0KIAogd3N0cmluZyBSZXNvdXJj
ZUxvYWREZWxlZ2F0ZTo6ZGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQoSVdlYlVSTFJl
cXVlc3QqIHJlcXVlc3QpCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdDIvRE9NV2luZG93RXh0ZW5zaW9uQmFzaWNfQnVuZGxlLmNwcCBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Mi9ET01XaW5kb3dFeHRlbnNpb25CYXNpY19CdW5kbGUuY3BwCmlu
ZGV4IDk4YmZhYjMuLjViMTI5NmYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Mi9ET01XaW5kb3dFeHRlbnNpb25CYXNpY19CdW5kbGUuY3BwCisrKyBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9ET01XaW5kb3dFeHRlbnNpb25CYXNpY19CdW5k
bGUuY3BwCkBAIC0xNzEsOCArMTcxLDggQEAgdm9pZCBET01XaW5kb3dFeHRlbnNpb25CYXNpYzo6
d2lsbERlc3Ryb3lQYWdlKFdLQnVuZGxlUmVmLCBXS0J1bmRsZVBhZ2VSZWYpCiAgICAgSGFzaE1h
cDxXS0J1bmRsZURPTVdpbmRvd0V4dGVuc2lvblJlZiwgaW50Pjo6aXRlcmF0b3IgaXQgPSBtX2V4
dGVuc2lvblRvUmVjb3JkTWFwLmJlZ2luKCk7CiAgICAgSGFzaE1hcDxXS0J1bmRsZURPTVdpbmRv
d0V4dGVuc2lvblJlZiwgaW50Pjo6aXRlcmF0b3IgZW5kID0gbV9leHRlbnNpb25Ub1JlY29yZE1h
cC5lbmQoKTsKICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIHVwZGF0ZUV4
dGVuc2lvblN0YXRlUmVjb3JkKGl0LT5maXJzdCwgUmVtb3ZlZCk7Ci0gICAgICAgIFdLUmVsZWFz
ZShpdC0+Zmlyc3QpOworICAgICAgICB1cGRhdGVFeHRlbnNpb25TdGF0ZVJlY29yZChpdC0+a2V5
LCBSZW1vdmVkKTsKKyAgICAgICAgV0tSZWxlYXNlKGl0LT5rZXkpOwogICAgIH0KIAogICAgIG1f
ZXh0ZW5zaW9uVG9SZWNvcmRNYXAuY2xlYXIoKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Mi9ET01XaW5kb3dFeHRlbnNpb25Ob0NhY2hlX0J1bmRsZS5jcHAg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvRE9NV2luZG93RXh0ZW5zaW9uTm9D
YWNoZV9CdW5kbGUuY3BwCmluZGV4IDhmNmNkN2IuLjQxMWUxMTUgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9ET01XaW5kb3dFeHRlbnNpb25Ob0NhY2hlX0J1
bmRsZS5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL0RPTVdpbmRv
d0V4dGVuc2lvbk5vQ2FjaGVfQnVuZGxlLmNwcApAQCAtMTc4LDggKzE3OCw4IEBAIHZvaWQgRE9N
V2luZG93RXh0ZW5zaW9uTm9DYWNoZTo6d2lsbERlc3Ryb3lQYWdlKFdLQnVuZGxlUmVmLCBXS0J1
bmRsZVBhZ2VSZWYpCiAgICAgSGFzaE1hcDxXS0J1bmRsZURPTVdpbmRvd0V4dGVuc2lvblJlZiwg
aW50Pjo6aXRlcmF0b3IgaXQgPSBtX2V4dGVuc2lvblRvUmVjb3JkTWFwLmJlZ2luKCk7CiAgICAg
SGFzaE1hcDxXS0J1bmRsZURPTVdpbmRvd0V4dGVuc2lvblJlZiwgaW50Pjo6aXRlcmF0b3IgZW5k
ID0gbV9leHRlbnNpb25Ub1JlY29yZE1hcC5lbmQoKTsKICAgICBmb3IgKDsgaXQgIT0gZW5kOyAr
K2l0KSB7Ci0gICAgICAgIHVwZGF0ZUV4dGVuc2lvblN0YXRlUmVjb3JkKGl0LT5maXJzdCwgUmVt
b3ZlZCk7Ci0gICAgICAgIFdLUmVsZWFzZShpdC0+Zmlyc3QpOworICAgICAgICB1cGRhdGVFeHRl
bnNpb25TdGF0ZVJlY29yZChpdC0+a2V5LCBSZW1vdmVkKTsKKyAgICAgICAgV0tSZWxlYXNlKGl0
LT5rZXkpOwogICAgIH0KIAogICAgIG1fZXh0ZW5zaW9uVG9SZWNvcmRNYXAuY2xlYXIoKTsKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvTGF5b3V0VGVz
dENvbnRyb2xsZXIuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9M
YXlvdXRUZXN0Q29udHJvbGxlci5jcHAKaW5kZXggNDk4MWIzYy4uOTc2YTE1MSAxMDA2NDQKLS0t
IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9MYXlvdXRUZXN0Q29udHJv
bGxlci5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9MYXlv
dXRUZXN0Q29udHJvbGxlci5jcHAKQEAgLTQ1Miw4ICs0NTIsOCBAQCB1bnNpZ25lZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6d29ybGRJREZvcldvcmxkKFdLQnVuZGxlU2NyaXB0V29ybGRSZWYgd29y
bGQpCiB7CiAgICAgV29ybGRNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHdvcmxkTWFwKCkuZW5k
KCk7CiAgICAgZm9yIChXb3JsZE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSB3b3JsZE1hcCgpLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnNlY29uZCA9PSB3b3Js
ZCkKLSAgICAgICAgICAgIHJldHVybiBpdC0+Zmlyc3Q7CisgICAgICAgIGlmIChpdC0+dmFsdWUg
PT0gd29ybGQpCisgICAgICAgICAgICByZXR1cm4gaXQtPmtleTsKICAgICB9CiAKICAgICByZXR1
cm4gMDsKQEAgLTQ2Nyw3ICs0NjcsNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpldmFs
dWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZChKU0NvbnRleHRSZWYgY29udGV4dCwgdQogICAgIGlm
ICghd29ybGRJRCkKICAgICAgICAgd29ybGQuYWRvcHQoV0tCdW5kbGVTY3JpcHRXb3JsZENyZWF0
ZVdvcmxkKCkpOwogICAgIGVsc2UgewotICAgICAgICBXS1JldGFpblB0cjxXS0J1bmRsZVNjcmlw
dFdvcmxkUmVmPiYgd29ybGRTbG90ID0gd29ybGRNYXAoKS5hZGQod29ybGRJRCwgMCkuaXRlcmF0
b3ItPnNlY29uZDsKKyAgICAgICAgV0tSZXRhaW5QdHI8V0tCdW5kbGVTY3JpcHRXb3JsZFJlZj4m
IHdvcmxkU2xvdCA9IHdvcmxkTWFwKCkuYWRkKHdvcmxkSUQsIDApLml0ZXJhdG9yLT52YWx1ZTsK
ICAgICAgICAgaWYgKCF3b3JsZFNsb3QpCiAgICAgICAgICAgICB3b3JsZFNsb3QuYWRvcHQoV0tC
dW5kbGVTY3JpcHRXb3JsZENyZWF0ZVdvcmxkKCkpOwogICAgICAgICB3b3JsZCA9IHdvcmxkU2xv
dDsKLS0gCjEuNy4xMS4zCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155317</attachid>
            <date>2012-07-30 10:42:40 -0700</date>
            <delta_ts>2012-08-27 08:57:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-82784-20120730144223.patch</filename>
            <type>text/plain</type>
            <size>684248</size>
            <attacher name="Caio Marcelo de Oliveira Filho">cmarcelo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0MDQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBk
YzAwMmQ0MWM0MjJjNjE4OTU0ZjBlN2NkMDc5Y2E4NWU3YzY2YmFjLi4xYzQ2MzE5YmVhMTI5NDU5
YWQ1NTBjMzk5NWU5YmJhMTc3NjdmYmNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMTQgQEAKKzIwMTItMDctMzAgIENhaW8gTWFyY2VsbyBkZSBPbGl2ZWlyYSBGaWxobyAg
PGNhaW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KKworICAgICAgICBSZW5hbWUgZmlyc3Qvc2Vj
b25kIHRvIGtleS92YWx1ZSBpbiBIYXNoTWFwIGl0ZXJhdG9ycworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI3ODQKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0Lmg6Cisg
ICAgICAgIChKU0M6OkpTQ2FsbGJhY2tPYmplY3REYXRhOjpKU1ByaXZhdGVQcm9wZXJ0eU1hcDo6
Z2V0UHJpdmF0ZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNDYWxsYmFja09iamVjdERhdGE6
OkpTUHJpdmF0ZVByb3BlcnR5TWFwOjpzZXRQcml2YXRlUHJvcGVydHkpOgorICAgICAgICAoSlND
OjpKU0NhbGxiYWNrT2JqZWN0RGF0YTo6SlNQcml2YXRlUHJvcGVydHlNYXA6OnZpc2l0Q2hpbGRy
ZW4pOgorICAgICAgICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmg6CisgICAgICAg
IChKU0M6Ojo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgICogQVBJL0pTQ2xhc3NSZWYu
Y3BwOgorICAgICAgICAoT3BhcXVlSlNDbGFzczo6fk9wYXF1ZUpTQ2xhc3MpOgorICAgICAgICAo
T3BhcXVlSlNDbGFzc0NvbnRleHREYXRhOjpPcGFxdWVKU0NsYXNzQ29udGV4dERhdGEpOgorICAg
ICAgICAoT3BhcXVlSlNDbGFzczo6Y29udGV4dERhdGEpOgorICAgICAgICAqIGJ5dGVjb2RlL0Nv
ZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcCk6CisgICAgICAgIChK
U0M6OkV2YWxDb2RlQ2FjaGU6OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpuYW1lRm9yUmVnaXN0ZXIpOgorICAgICAgICAqIGJ5dGVjb2RlL0p1bXBUYWJsZS5oOgor
ICAgICAgICAoSlNDOjpTdHJpbmdKdW1wVGFibGU6Om9mZnNldEZvclZhbHVlKToKKyAgICAgICAg
KEpTQzo6U3RyaW5nSnVtcFRhYmxlOjpjdGlGb3JWYWx1ZSk6CisgICAgICAgICogYnl0ZWNvZGUv
TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3BwOgorICAgICAgICAoSlNDOjpMYXp5T3BlcmFuZFZh
bHVlUHJvZmlsZVBhcnNlcjo6Z2V0SWZQcmVzZW50KToKKyAgICAgICAgKiBieXRlY29kZS9TYW1w
bGluZ1Rvb2wuY3BwOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1Rvb2w6OmR1bXApOgorICAgICAg
ICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5
dGVjb2RlR2VuZXJhdG9yOjphZGRWYXIpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRv
cjo6YWRkR2xvYmFsVmFyKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmFkZENv
bnN0YW50KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmFkZENvbnN0YW50VmFs
dWUpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdExvYWQpOgorICAgICAg
ICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6YWRkU3RyaW5nQ29uc3RhbnQpOgorICAgICAgICAo
SlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdExhenlOZXdGdW5jdGlvbik6CisgICAgICAgICog
Ynl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHA6CisgICAgICAgIChKU0M6OlByb3BlcnR5TGlz
dE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgICogZGVidWdnZXIvRGVidWdnZXIuY3BwOgor
ICAgICAgICAqIGRmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlOjpydW4pOgorICAgICAg
ICAoSlNDOjpERkc6OkFyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2U6Om9ic2VydmVCYWRBcmd1
bWVudHNVc2UpOgorICAgICAgICAoSlNDOjpERkc6OkFyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhh
c2U6Om9ic2VydmVQcm9wZXJBcmd1bWVudHNVc2UpOgorICAgICAgICAoSlNDOjpERkc6OkFyZ3Vt
ZW50c1NpbXBsaWZpY2F0aW9uUGhhc2U6OmlzT0tUb09wdGltaXplKToKKyAgICAgICAgKEpTQzo6
REZHOjpBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlOjpyZW1vdmVBcmd1bWVudHNSZWZlcmVu
Y2luZ1BoYW50b21DaGlsZCk6CisgICAgICAgICogZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6QXNzZW1ibHlIZWxwZXJzOjpkZWNvZGVkQ29kZU1hcEZvcik6
CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlQ2FjaGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZUNhY2hlOjp+Qnl0ZUNvZGVDYWNoZSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVDYWNoZTo6Z2V0KToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpjZWxsQ29uc3RhbnQpOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmVTdGFja0Vu
dHJ5KToKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFwOjptYXJr
UHJvdGVjdGVkT2JqZWN0cyk6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAgICAgIChKU0M6
OkhlYXA6OmZvckVhY2hQcm90ZWN0ZWRDZWxsKToKKyAgICAgICAgKiBoZWFwL0pJVFN0dWJSb3V0
aW5lU2V0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUU3R1YlJvdXRpbmVTZXQ6Om1hcmtTbG93KToK
KyAgICAgICAgKEpTQzo6SklUU3R1YlJvdXRpbmVTZXQ6OmRlbGV0ZVVubWFya2VkSmV0dGlzb25l
ZFN0dWJSb3V0aW5lcyk6CisgICAgICAgICogaGVhcC9NYXJrU3RhY2suY3BwOgorICAgICAgICAo
SlNDOjpNYXJrU3RhY2s6OmludGVybmFsQXBwZW5kKToKKyAgICAgICAgKiBoZWFwL1dlYWsuaDoK
KyAgICAgICAgKEpTQzo6d2Vha1JlbW92ZSk6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAg
ICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGUpOgorICAgICAgICAqIGppdC9KSVRTdHVicy5j
cHA6CisgICAgICAgIChKU0M6OkpJVFRodW5rczo6Y3RpU3R1Yik6CisgICAgICAgICogcGFyc2Vy
L1BhcnNlci5jcHA6CisgICAgICAgIChKU0M6Ojo6cGFyc2VTdHJpY3RPYmplY3RMaXRlcmFsKToK
KyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlLmNwcDoKKyAgICAgICAgKEpTQzo6ZnVuY3Rpb25O
YW1lQ291bnRQYWlyQ29tcGFyYXRvcik6CisgICAgICAgIChKU0M6OlByb2ZpbGU6OmRlYnVnUHJp
bnREYXRhU2FtcGxlU3R5bGUpOgorICAgICAgICAqIHJ1bnRpbWUvSWRlbnRpZmllci5jcHA6Cisg
ICAgICAgIChKU0M6OklkZW50aWZpZXI6OmFkZCk6CisgICAgICAgICogcnVudGltZS9KU0FjdGl2
YXRpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0FjdGl2YXRpb246OmdldE93blByb3BlcnR5TmFt
ZXMpOgorICAgICAgICAoSlNDOjpKU0FjdGl2YXRpb246OnN5bWJvbFRhYmxlUHV0V2l0aEF0dHJp
YnV0ZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5jcHA6CisgICAgICAgIChKU0M6OlNw
YXJzZUFycmF5VmFsdWVNYXA6OnB1dCk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVN
YXA6OnB1dERpcmVjdCk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OnZpc2l0
Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU0FycmF5OjplbnRlckRpY3Rpb25hcnlNb2RlKToK
KyAgICAgICAgKEpTQzo6SlNBcnJheTo6ZGVmaW5lT3duTnVtZXJpY1Byb3BlcnR5KToKKyAgICAg
ICAgKEpTQzo6SlNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk6CisgICAgICAgIChK
U0M6OkpTQXJyYXk6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6OkpT
QXJyYXk6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU0Fy
cmF5OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkpT
QXJyYXk6OmRlbGV0ZVByb3BlcnR5QnlJbmRleCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6Omdl
dE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpzZXRMZW5ndGgpOgor
ICAgICAgICAoSlNDOjpKU0FycmF5Ojpzb3J0KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6Y29t
cGFjdEZvclNvcnRpbmcpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpjaGVja0NvbnNpc3RlbmN5
KToKKyAgICAgICAgKiBydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3BwOgorICAgICAgICAo
SlNDOjpKU1N5bWJvbFRhYmxlT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAg
KiBydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6c3ltYm9sVGFi
bGVHZXQpOgorICAgICAgICAoSlNDOjpzeW1ib2xUYWJsZVB1dCk6CisgICAgICAgIChKU0M6OnN5
bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwQ2Fj
aGUuY3BwOgorICAgICAgICAoSlNDOjpSZWdFeHBDYWNoZTo6aW52YWxpZGF0ZUNvZGUpOgorICAg
ICAgICAqIHJ1bnRpbWUvV2Vha0dDTWFwLmg6CisgICAgICAgIChKU0M6OldlYWtHQ01hcDo6Y2xl
YXIpOgorICAgICAgICAoSlNDOjpXZWFrR0NNYXA6OnNldCk6CisgICAgICAgICogdG9vbHMvUHJv
ZmlsZVRyZWVOb2RlLmg6CisgICAgICAgIChKU0M6OlByb2ZpbGVUcmVlTm9kZTo6c2FtcGxlQ2hp
bGQpOgorICAgICAgICAoSlNDOjpQcm9maWxlVHJlZU5vZGU6OmNoaWxkQ291bnQpOgorICAgICAg
ICAoSlNDOjpQcm9maWxlVHJlZU5vZGU6OmR1bXBJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OlBy
b2ZpbGVUcmVlTm9kZTo6Y29tcGFyZUVudHJpZXMpOgorCiAyMDEyLTA3LTI5ICBGaWxpcCBQaXps
byAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgUHJvcGVydHlOYW1lQXJyYXk6Om1fc2hv
dWxkQ2FjaGUgaXMgb25seSBhc3NpZ25lZCBhbmQgbmV2ZXIgdXNlZApkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCAxNzljNjYwMjA4
NDJiODYxMzEyMTNmNjM3OGJjM2E3MzAwYTZkZjZkLi5jZWJmZGNlYWFlNjIzMzllMDk4ZjRjMjVi
NjY5ZjU0NDliODRmMDYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBACisyMDEyLTA3LTMwICBDYWlvIE1h
cmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gIDxjYWlvLm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+CisK
KyAgICAgICAgUmVuYW1lIGZpcnN0L3NlY29uZCB0byBrZXkvdmFsdWUgaW4gSGFzaE1hcCBpdGVy
YXRvcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgy
Nzg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3
dGYvSGFzaENvdW50ZWRTZXQuaDoKKyAgICAgICAgKFdURjo6OjphZGQpOgorICAgICAgICAoV1RG
Ojo6OnJlbW92ZSk6CisgICAgICAgIChXVEY6OmNvcHlUb1ZlY3Rvcik6CisgICAgICAgICogd3Rm
L0hhc2hJdGVyYXRvcnMuaDoKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlQ29uc3RLZXlzSXRlcmF0
b3I6OmdldCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZUNvbnN0VmFsdWVzSXRlcmF0b3I6Omdl
dCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZVZhbHVlc0l0ZXJhdG9yOjpnZXQpOgorICAgICAg
ICAqIHd0Zi9IYXNoTWFwLmg6CisgICAgICAgIChXVEY6OktleVZhbHVlUGFpcktleUV4dHJhY3Rv
cjo6ZXh0cmFjdCk6CisgICAgICAgIChXVEY6Okhhc2hNYXBWYWx1ZVRyYWl0czo6aXNFbXB0eVZh
bHVlKToKKyAgICAgICAgKFdURjo6SGFzaE1hcFRyYW5zbGF0b3I6OnRyYW5zbGF0ZSk6CisgICAg
ICAgIChXVEY6Okhhc2hNYXBUcmFuc2xhdG9yQWRhcHRlcjo6dHJhbnNsYXRlKToKKyAgICAgICAg
KFdURjo6OjpzZXQpOgorICAgICAgICAoV1RGOjo6OmdldCk6CisgICAgICAgIChXVEY6Ojo6dGFr
ZSk6CisgICAgICAgIChXVEY6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV1RGOjpkZWxldGVBbGxW
YWx1ZXMpOgorICAgICAgICAoV1RGOjpkZWxldGVBbGxLZXlzKToKKyAgICAgICAgUmVtb3ZlIGRl
bGV0ZUFsbFBhaXJGaXJzdHMvU2Vjb25kcy4KKworICAgICAgICAqIHd0Zi9IYXNoVGFibGUuaDoK
KyAgICAgICAgKFdURjo6aGFzaFRhYmxlU3dhcCk6CisgICAgICAgIChXVEY6Ojo6Y2hlY2tUYWJs
ZUNvbnNpc3RlbmN5RXhjZXB0U2l6ZSk6CisgICAgICAgICogd3RmL0hhc2hUcmFpdHMuaDoKKyAg
ICAgICAgKFdURjo6S2V5VmFsdWVQYWlyOjpLZXlWYWx1ZVBhaXIpOgorICAgICAgICAoS2V5VmFs
dWVQYWlyKToKKyAgICAgICAgKFdURjo6S2V5VmFsdWVQYWlySGFzaFRyYWl0czo6Y29uc3RydWN0
RGVsZXRlZFZhbHVlKToKKyAgICAgICAgKFdURjo6S2V5VmFsdWVQYWlySGFzaFRyYWl0czo6aXNE
ZWxldGVkVmFsdWUpOgorICAgICAgICAqIHd0Zi9NZXRhQWxsb2NhdG9yLmNwcDoKKyAgICAgICAg
KFdURjo6TWV0YUFsbG9jYXRvcjo6YWRkRnJlZVNwYWNlKToKKyAgICAgICAgKFdURjo6TWV0YUFs
bG9jYXRvcjo6aW5jcmVtZW50UGFnZU9jY3VwYW5jeSk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxv
Y2F0b3I6OmRlY3JlbWVudFBhZ2VPY2N1cGFuY3kpOgorICAgICAgICAqIHd0Zi9SZWZDb3VudGVk
TGVha0NvdW50ZXIuY3BwOgorICAgICAgICAoV1RGOjpSZWZDb3VudGVkTGVha0NvdW50ZXI6On5S
ZWZDb3VudGVkTGVha0NvdW50ZXIpOgorICAgICAgICAqIHd0Zi9SZWZQdHJIYXNoTWFwLmg6Cisg
ICAgICAgIChXVEY6Ojo6c2V0KToKKyAgICAgICAgKFdURjo6OjpnZXQpOgorICAgICAgICAoV1RG
Ojo6OmlubGluZUdldCk6CisgICAgICAgIChXVEY6Ojo6dGFrZSk6CisgICAgICAgICogd3RmL1Nw
ZWN0cnVtLmg6CisgICAgICAgIChXVEY6OlNwZWN0cnVtOjphZGQpOgorICAgICAgICAoV1RGOjpT
cGVjdHJ1bTo6Z2V0KToKKyAgICAgICAgKFdURjo6U3BlY3RydW06OmJ1aWxkTGlzdCk6CisgICAg
ICAgICogd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcDoKKyAgICAgICAgKFdURjo6aWRlbnRpZmll
ckJ5UHRocmVhZEhhbmRsZSk6CisKIDIwMTItMDctMzAgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFy
b2dhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVwbGFjZSBVbmljb2RlV2luQ0Ugd2l0aCBVbmlj
b2RlV2NoYXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwppbmRleCAyYmJhYzAxZTY5NDA0ZTYxZGQ3YWEzYzgzNTM5MTZiMzM1
NWIxNjVmLi42MWNlYTgxMGExY2RmNzVjMTA1MGQ5ODAwMTk4OTI3OGMwNDJiMzQ0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsODQ3IEBACisyMDEyLTA3LTMwICBDYWlvIE1hcmNlbG8gZGUgT2xpdmVp
cmEgRmlsaG8gIDxjYWlvLm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+CisKKyAgICAgICAgUmVuYW1l
IGZpcnN0L3NlY29uZCB0byBrZXkvdmFsdWUgaW4gSGFzaE1hcCBpdGVyYXRvcnMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyNzg0CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBNb2R1bGVzL2dlb2xvY2F0
aW9uL0dlb2xvY2F0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uOjpXYXRj
aGVyczo6ZmluZCk6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvbjo6V2F0Y2hlcnM6OnJl
bW92ZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6Om9iamVjdFN0b3JlTmFtZXMpOgorICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6bWV0YWRhdGEpOgorICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJREJGYWN0b3J5QmFja2VuZEltcGw6OmRlbGV0ZURhdGFiYXNlKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQkZhY3RvcnlCYWNrZW5kSW1wbDo6b3BlbkJhY2tpbmdTdG9yZSk6CisgICAgICAg
IChXZWJDb3JlOjpJREJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW4pOgorICAgICAgICAqIE1vZHVs
ZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9i
amVjdFN0b3JlOjppbmRleE5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3Jl
OjpwdXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmluZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpkZWxldGVJbmRleCk6CisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjptZXRhZGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbCk6CisgICAgICAg
IChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJbnRlcm5hbCk6Cisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SURCVHJhbnNhY3Rpb246Om9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlRyYW5zYWN0aW9uOjpvYmplY3RTdG9yZURlbGV0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6
SURCVHJhbnNhY3Rpb246Om9uQWJvcnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rp
b246OmRpc3BhdGNoRXZlbnQpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvQWJzdHJh
Y3REYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpwZXJm
b3JtT3BlbkFuZFZlcmlmeSk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFz
ZVRyYWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjppbnRlcnJ1
cHRBbGxEYXRhYmFzZXNGb3JDb250ZXh0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNl
L09yaWdpblVzYWdlUmVjb3JkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok9yaWdpblVzYWdlUmVj
b3JkOjpkaXNrVXNhZ2UpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNh
Y3Rpb25Db29yZGluYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbkNv
b3JkaW5hdG9yOjphY3F1aXJlTG9jayk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlv
bkNvb3JkaW5hdG9yOjpyZWxlYXNlTG9jayk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2Fj
dGlvbkNvb3JkaW5hdG9yOjpzaHV0ZG93bik6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFz
ZS9jaHJvbWl1bS9EYXRhYmFzZVRyYWNrZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpEYXRhYmFzZVRyYWNrZXI6OmludGVycnVwdEFsbERhdGFiYXNlc0ZvckNvbnRleHQpOgorICAg
ICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvY2hyb21pdW0vUXVvdGFUcmFja2VyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlF1b3RhVHJhY2tlcjo6Z2V0RGF0YWJhc2VTaXplQW5kU3BhY2VBdmFp
bGFibGVUb09yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpRdW90YVRyYWNrZXI6OnVwZGF0ZURh
dGFiYXNlU2l6ZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldERlZmxh
dGVGcmFtZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0RXh0ZW5zaW9uRGVmbGF0
ZUZyYW1lOjpwcm9jZXNzUmVzcG9uc2UpOgorICAgICAgICAqIE1vZHVsZXMvd2Vic29ja2V0cy9X
ZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYlNv
Y2tldEV4dGVuc2lvbkRpc3BhdGNoZXI6OmFwcGVuZEFjY2VwdGVkRXh0ZW5zaW9uKToKKyAgICAg
ICAgKiBhY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
QVhPYmplY3RDYWNoZTo6fkFYT2JqZWN0Q2FjaGUpOgorICAgICAgICAqIGJpbmRpbmdzL2dvYmpl
Y3QvRE9NT2JqZWN0Q2FjaGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpET01PYmplY3RDYWNoZTo6
Y2xlYXJCeUZyYW1lKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9ET01PYmplY3RIYXNoVGFibGVN
YXAuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTU9iamVjdEhhc2hUYWJsZU1hcDo6fkRPTU9iamVj
dEhhc2hUYWJsZU1hcCk6CisgICAgICAgIChXZWJDb3JlOjpET01PYmplY3RIYXNoVGFibGVNYXA6
OmdldCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmNhY2hlRE9NU3RydWN0dXJlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RP
TUdsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTUdsb2JhbE9iamVjdDo6
dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3Qu
aDoKKyAgICAgICAgKFdlYkNvcmU6OmdldERPTUNvbnN0cnVjdG9yKToKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFn
ZVNjcmlwdERlYnVnU2VydmVyOjphZGRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpQYWdl
U2NyaXB0RGVidWdTZXJ2ZXI6OnJlbW92ZUxpc3RlbmVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9TY3JpcHRDYWNoZWRGcmFtZURhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2Fj
aGVkRnJhbWVEYXRhOjpTY3JpcHRDYWNoZWRGcmFtZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
U2NyaXB0Q2FjaGVkRnJhbWVEYXRhOjpyZXN0b3JlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9T
Y3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6
On5TY3JpcHRDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6
OmNsZWFyV2luZG93U2hlbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6
YXR0YWNoRGVidWdnZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6dXBk
YXRlRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6Y3JlYXRl
Um9vdE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpjb2xsZWN0
SXNvbGF0ZWRDb250ZXh0cyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpj
bGVhbnVwU2NyaXB0T2JqZWN0c0ZvclBsdWdpbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRD
b250cm9sbGVyOjpjbGVhclNjcmlwdE9iamVjdHMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1Nj
cmlwdENvbnRyb2xsZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6Ondp
bmRvd1NoZWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmV4aXN0aW5n
V2luZG93U2hlbGwpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpzZXRCcmVha3BvaW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpyZW1vdmVCcmVha3BvaW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpoYXNCcmVha3BvaW50KToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q2xvbmVTZXJpYWxpemVyOjpjaGVja0ZvckR1cGxpY2F0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDbG9uZVNlcmlhbGl6ZXI6OmR1bXBJZlRlcm1pbmFsKToKKyAgICAgICAgKFdlYkNv
cmU6OkNsb25lU2VyaWFsaXplcjo6d3JpdGUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
Q29kZUdlbmVyYXRvclY4LnBtOgorICAgICAgICAoR2VuZXJhdGVJbXBsZW1lbnRhdGlvbik6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4RmxvYXQ2NEFycmF5LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlY4RmxvYXQ2NEFycmF5OjpHZXRSYXdUZW1wbGF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpWOEZsb2F0NjRBcnJheTo6R2V0VGVtcGxhdGUpOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RBY3RpdmVET01PYmplY3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6VjhUZXN0QWN0aXZlRE9NT2JqZWN0OjpHZXRSYXdUZW1wbGF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpWOFRlc3RBY3RpdmVET01PYmplY3Q6OkdldFRlbXBsYXRlKToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6VjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI6OkdldFJhd1RlbXBsYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdEN1c3RvbU5hbWVkR2V0dGVyOjpHZXRUZW1wbGF0
ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50Q29uc3Ry
dWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6R2V0
UmF3VGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6
R2V0VGVtcGxhdGUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RF
dmVudFRhcmdldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RFdmVudFRhcmdldDo6R2V0
UmF3VGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0RXZlbnRUYXJnZXQ6OkdldFRl
bXBsYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXhjZXB0
aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdEV4Y2VwdGlvbjo6R2V0UmF3VGVtcGxh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0RXhjZXB0aW9uOjpHZXRUZW1wbGF0ZSk6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEludGVyZmFjZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpWOFRlc3RJbnRlcmZhY2U6OkdldFJhd1RlbXBsYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlY4VGVzdEludGVyZmFjZTo6R2V0VGVtcGxhdGUpOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI6OkdldFJhd1Rl
bXBsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI6
OkdldFRlbXBsYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0
TmFtZWRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3ROYW1lZENvbnN0
cnVjdG9yOjpHZXRSYXdUZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3ROYW1lZENv
bnN0cnVjdG9yOjpHZXRUZW1wbGF0ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Y4L1Y4VGVzdE5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0Tm9kZTo6R2V0UmF3
VGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0Tm9kZTo6R2V0VGVtcGxhdGUpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6VjhUZXN0T2JqOjpHZXRSYXdUZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpWOFRlc3RPYmo6OkdldFRlbXBsYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVjgvVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlY4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6R2V0UmF3VGVt
cGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlOjpHZXRUZW1wbGF0ZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvTlBWOE9iamVjdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpmcmVlVjhOUE9iamVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpucENyZWF0ZVY4U2NyaXB0T2JqZWN0KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRD
b250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmNsZWFy
U2NyaXB0T2JqZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpjbGVh
bnVwU2NyaXB0T2JqZWN0c0ZvclBsdWdpbik6CisgICAgICAgICogYmluZGluZ3MvdjgvU2VyaWFs
aXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOEJpbmRpbmdQZXJD
b250ZXh0RGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOEJpbmRpbmdQZXJDb250ZXh0RGF0
YTo6ZGlzcG9zZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhET01NYXAuaDoKKyAgICAgICAg
KFdlYkNvcmU6OldlYWtSZWZlcmVuY2VNYXA6OnJlbW92ZUlmUHJlc2VudCk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWFrUmVmZXJlbmNlTWFwOjp2aXNpdCk6CisgICAgICAgICogYmluZGluZ3Mvdjgv
VjhHQ0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZW51bWVyYXRlR2xvYmFsSGFu
ZGxlcyk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhQcm94eS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpWOFByb3h5OjpldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCk6CisgICAgICAgIChXZWJDb3Jl
OjpWOFByb3h5OjpzZXRJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4pOgorICAgICAgICAoV2Vi
Q29yZTo6VjhQcm94eTo6cmVzZXRJc29sYXRlZFdvcmxkcyk6CisgICAgICAgIChXZWJDb3JlOjpW
OFByb3h5Ojppc29sYXRlZFdvcmxkQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpWOFByb3h5
Ojpjb2xsZWN0SXNvbGF0ZWRDb250ZXh0cyk6CisgICAgICAgICogYmluZGluZ3MvdjgvbnBydW50
aW1lLmNwcDoKKyAgICAgICAgKiBicmlkZ2UvSWRlbnRpZmllclJlcC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJZGVudGlmaWVyUmVwOjpnZXQpOgorICAgICAgICAqIGJyaWRnZS9OUF9qc29iamVj
dC5jcHA6CisgICAgICAgIChPYmplY3RNYXA6OmFkZCk6CisgICAgICAgIChPYmplY3RNYXA6OnJl
bW92ZSk6CisgICAgICAgICogYnJpZGdlL2puaS9qc2MvSmF2YUNsYXNzSlNDLmNwcDoKKyAgICAg
ICAgKEphdmFDbGFzczo6fkphdmFDbGFzcyk6CisgICAgICAgICogYnJpZGdlL3J1bnRpbWVfcm9v
dC5jcHA6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpSb290T2JqZWN0OjppbnZhbGlkYXRlKToK
KyAgICAgICAgKiBjc3MvQ1NTQ2FudmFzVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
Q2FudmFzVmFsdWU6OmNhbnZhc0NoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FudmFz
VmFsdWU6OmNhbnZhc1Jlc2l6ZWQpOgorICAgICAgICAqIGNzcy9DU1NDb21wdXRlZFN0eWxlRGVj
bGFyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y291bnRlclRvQ1NTVmFsdWUpOgorICAg
ICAgICAqIGNzcy9DU1NDcm9zc2ZhZGVWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1ND
cm9zc2ZhZGVWYWx1ZTo6Y3Jvc3NmYWRlQ2hhbmdlZCk6CisgICAgICAgICogY3NzL0NTU0ZvbnRG
YWNlU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlU291cmNlOjpnZXRG
b250RGF0YSk6CisgICAgICAgICogY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NGb250U2VsZWN0b3I6OmFkZEZvbnRGYWNlUnVsZSk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NGb250U2VsZWN0b3I6OmdldEZvbnREYXRhKToKKyAgICAgICAgKiBjc3MvQ1NTSW1h
Z2VHZW5lcmF0b3JWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NJbWFnZUdlbmVyYXRv
clZhbHVlOjphZGRDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTSW1hZ2VHZW5lcmF0b3JW
YWx1ZTo6cmVtb3ZlQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ltYWdlR2VuZXJhdG9y
VmFsdWU6OmdldEltYWdlKToKKyAgICAgICAgKiBjc3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTU2VnbWVudGVkRm9udEZhY2U6OmdldEZvbnREYXRhKToK
KyAgICAgICAgKiBjc3MvQ1NTU2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU2Vs
ZWN0b3I6OnBhcnNlUHNldWRvVHlwZSk6CisgICAgICAgICogY3NzL0NTU1ZhbHVlUG9vbC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDU1NWYWx1ZVBvb2w6OmNyZWF0ZUNvbG9yVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTVmFsdWVQb29sOjpjcmVhdGVGb250RmFtaWx5VmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTVmFsdWVQb29sOjpjcmVhdGVGb250RmFjZVZhbHVlKToKKyAgICAg
ICAgKiBjc3MvUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6Y2xvbmVBbmRDYWNoZUZvckNT
U09NKToKKyAgICAgICAgKiBjc3MvU3R5bGVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGx5UHJvcGVydHlDb3VudGVyOjphcHBseUluaGVyaXRWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBseVByb3BlcnR5Q291bnRlcjo6YXBwbHlWYWx1ZSk6CisgICAgICAgICogY3NzL1N0
eWxlUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y29sbGVj
dEZlYXR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnJ1bGVTZXRGb3JT
Y29wZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBlbmRBdXRob3JTdHls
ZXNoZWV0cyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzd2VlcE1hdGNoZWRQ
cm9wZXJ0aWVzQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y29sbGVj
dE1hdGNoaW5nUnVsZXNGb3JMaXN0KToKKyAgICAgICAgKiBjc3MvU3R5bGVTaGVldENvbnRlbnRz
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRDb250ZW50czo6ZGV0ZXJtaW5lTmFt
ZXNwYWNlKToKKyAgICAgICAgKiBkb20vQ2hlY2tlZFJhZGlvQnV0dG9ucy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDaGVja2VkUmFkaW9CdXR0b25zOjphZGRCdXR0b24pOgorICAgICAgICAoV2Vi
Q29yZTo6Q2hlY2tlZFJhZGlvQnV0dG9uczo6cmVtb3ZlQnV0dG9uKToKKyAgICAgICAgKiBkb20v
Q2hpbGRMaXN0TXV0YXRpb25TY29wZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RN
dXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlcjo6Y2hpbGRBZGRlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxh
dGlvblJvdXRlcjo6d2lsbFJlbW92ZUNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlz
dE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVyOjppbmNyZW1lbnRTY29w
aW5nTGV2ZWwpOgorICAgICAgICAoV2ViQ29yZTo6Q2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0
YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXI6OmRlY3JlbWVudFNjb3BpbmdMZXZlbCk6CisgICAgICAg
ICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpwYWdlR3Jv
dXBVc2VyU2hlZXRzKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp3aW5kb3dOYW1lZEl0
ZW1zKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpkb2N1bWVudE5hbWVkSXRlbXMpOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmdldENTU0NhbnZhc0VsZW1lbnQpOgorICAgICAg
ICAqIGRvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjptYXJrZXJDb250YWluaW5nUG9pbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW5kZXJlZFJlY3RzRm9yTWFy
a2Vycyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbW92
ZU1hcmtlcnMpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpy
ZXBhaW50TWFya2Vycyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXI6OmludmFsaWRhdGVSZW5kZXJlZFJlY3RzRm9yTWFya2Vyc0luUmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnNob3dNYXJrZXJzKToKKyAgICAgICAg
KiBkb20vRG9jdW1lbnRPcmRlcmVkTWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50
T3JkZXJlZE1hcDo6cmVtb3ZlKToKKyAgICAgICAgKiBkb20vRWxlbWVudEF0dHJpYnV0ZURhdGEu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6ZW5zdXJlQXR0ckxpc3RGb3JFbGVtZW50KToKKyAgICAg
ICAgKiBkb20vRXZlbnREaXNwYXRjaGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50UmVs
YXRlZFRhcmdldEFkanVzdGVyOjpmaW5kUmVsYXRlZFRhcmdldCk6CisgICAgICAgICogZG9tL0V2
ZW50TGlzdGVuZXJNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRMaXN0ZW5lck1hcDo6
ZXZlbnRUeXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudExpc3RlbmVyTWFwOjphZGQpOgor
ICAgICAgICAoV2ViQ29yZTo6RXZlbnRMaXN0ZW5lck1hcDo6cmVtb3ZlKToKKyAgICAgICAgKFdl
YkNvcmU6OkV2ZW50TGlzdGVuZXJNYXA6OmZpbmQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRM
aXN0ZW5lck1hcDo6cmVtb3ZlRmlyc3RFdmVudExpc3RlbmVyQ3JlYXRlZEZyb21NYXJrdXApOgor
ICAgICAgICAoV2ViQ29yZTo6RXZlbnRMaXN0ZW5lck1hcDo6Y29weUV2ZW50TGlzdGVuZXJzTm90
Q3JlYXRlZEZyb21NYXJrdXBUb1RhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudExpc3Rl
bmVySXRlcmF0b3I6Om5leHRMaXN0ZW5lcik6CisgICAgICAgICogZG9tL0lkVGFyZ2V0T2JzZXJ2
ZXJSZWdpc3RyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJZFRhcmdldE9ic2VydmVyUmVnaXN0
cnk6OmFkZE9ic2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklkVGFyZ2V0T2JzZXJ2ZXJSZWdp
c3RyeTo6cmVtb3ZlT2JzZXJ2ZXIpOgorICAgICAgICAqIGRvbS9NdXRhdGlvbk9ic2VydmVySW50
ZXJlc3RHcm91cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNdXRhdGlvbk9ic2VydmVySW50ZXJl
c3RHcm91cDo6aXNPbGRWYWx1ZVJlcXVlc3RlZCk6CisgICAgICAgIChXZWJDb3JlOjpNdXRhdGlv
bk9ic2VydmVySW50ZXJlc3RHcm91cDo6ZW5xdWV1ZU11dGF0aW9uUmVjb3JkKToKKyAgICAgICAg
KiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpkdW1wU3RhdGlzdGljcyk6
CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpjbGVhclJhcmVEYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6Ok5vZGVMaXN0c05vZGVEYXRhOjppbnZhbGlkYXRlQ2FjaGVzKToKKyAgICAgICAgKFdlYkNv
cmU6Ok5vZGU6OmNvbGxlY3RNYXRjaGluZ09ic2VydmVyc0Zvck11dGF0aW9uKToKKyAgICAgICAg
KiBkb20vTm9kZVJhcmVEYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpOb2RlTGlzdHNOb2RlRGF0
YTo6YWRkQ2FjaGVXaXRoQXRvbWljTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlTGlzdHNO
b2RlRGF0YTo6YWRkQ2FjaGVXaXRoTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlTGlzdHNO
b2RlRGF0YTo6YWRkQ2FjaGVXaXRoUXVhbGlmaWVkTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpO
b2RlTGlzdHNOb2RlRGF0YTo6YWRvcHRUcmVlU2NvcGUpOgorICAgICAgICAqIGRvbS9Qcm9jZXNz
aW5nSW5zdHJ1Y3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UHJvY2Vzc2luZ0luc3RydWN0
aW9uOjpjaGVja1N0eWxlU2hlZXQpOgorICAgICAgICAqIGRvbS9TY3JpcHRFeGVjdXRpb25Db250
ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OmNhblN1
c3BlbmRBY3RpdmVET01PYmplY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQ6OnN1c3BlbmRBY3RpdmVET01PYmplY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnJlc3VtZUFjdGl2ZURPTU9iamVjdHMpOgorICAgICAgICAo
V2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6c3RvcEFjdGl2ZURPTU9iamVjdHMpOgor
ICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6YWRqdXN0TWluaW11bVRp
bWVySW50ZXJ2YWwpOgorICAgICAgICAqIGRvbS9TZWxlY3RvclF1ZXJ5LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNlbGVjdG9yUXVlcnlDYWNoZTo6YWRkKToKKyAgICAgICAgKiBkb20vU3BhY2VT
cGxpdFN0cmluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTcGFjZVNwbGl0U3RyaW5nRGF0YTo6
Y3JlYXRlKToKKyAgICAgICAgKiBkb20vU3R5bGVkRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZWRFbGVtZW50Ojp1cGRhdGVBdHRyaWJ1dGVTdHlsZSk6CisgICAgICAgICogZWRp
dGluZy9tYWMvQWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyLm1tOgorICAgICAgICAoV2ViQ29y
ZTo6QWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyOjpBbGVybmF0aXZlVGV4dENvbnRleHRDb250
cm9sbGVyOjphbHRlcm5hdGl2ZXNGb3JDb250ZXh0KToKKyAgICAgICAgKiBodG1sL0Zvcm1Db250
cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNhdmVkRm9ybVN0YXRlOjpzZXJpYWxpemVU
byk6CisgICAgICAgIChXZWJDb3JlOjpTYXZlZEZvcm1TdGF0ZTo6YXBwZW5kQ29udHJvbFN0YXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNhdmVkRm9ybVN0YXRlOjp0YWtlQ29udHJvbFN0YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkZvcm1LZXlHZW5lcmF0b3I6OmZvcm1LZXkpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9ybUNvbnRyb2xsZXI6OmNyZWF0ZVNhdmVkRm9ybVN0YXRlTWFwKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZvcm1Db250cm9sbGVyOjpmb3JtRWxlbWVudHNTdGF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpGb3JtQ29udHJvbGxlcjo6dGFrZVN0YXRlRm9yRm9ybUVsZW1lbnQpOgorICAg
ICAgICAqIGh0bWwvSFRNTENvbGxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENv
bGxlY3Rpb25DYWNoZUJhc2U6OmFwcGVuZCk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xG
cmFtZWJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTEZyYW1lYnVmZmVyOjpnZXRB
dHRhY2htZW50KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRnJhbWVidWZmZXI6OnJlbW92ZUF0
dGFjaG1lbnRGcm9tQm91bmRGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTEZy
YW1lYnVmZmVyOjpjaGVja1N0YXR1cyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTEZyYW1lYnVm
ZmVyOjpkZWxldGVPYmplY3RJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRnJhbWVidWZm
ZXI6OmluaXRpYWxpemVBdHRhY2htZW50cyk6CisgICAgICAgICogaW5zcGVjdG9yL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3IucHk6CisgICAgICAgICogaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpET01QYXRjaFN1cHBvcnQ6OmRpZmYpOgorICAgICAgICAo
V2ViQ29yZTo6RE9NUGF0Y2hTdXBwb3J0Ojppbm5lclBhdGNoQ2hpbGRyZW4pOgorICAgICAgICAo
V2ViQ29yZTo6RE9NUGF0Y2hTdXBwb3J0OjpyZW1vdmVDaGlsZEFuZE1vdmVUb05ldyk6CisgICAg
ICAgICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0TWFuYWdlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbmplY3RlZFNjcmlwdE1hbmFnZXI6OmluamVjdGVkU2NyaXB0Rm9ySWQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjppbmplY3RlZFNjcmlwdElkRm9yKToK
KyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0TWFuYWdlcjo6ZGlzY2FyZEluamVjdGVk
U2NyaXB0c0Zvcik6CisgICAgICAgIChXZWJDb3JlOjpJbmplY3RlZFNjcmlwdE1hbmFnZXI6OnJl
bGVhc2VPYmplY3RHcm91cCk6CisgICAgICAgIChXZWJDb3JlOjpJbmplY3RlZFNjcmlwdE1hbmFn
ZXI6OmluamVjdGVkU2NyaXB0Rm9yKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ1NT
QWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JQcm9maWxlOjpjb21taXRTZWxl
Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvclByb2ZpbGU6OmNvbW1pdFNlbGVjdG9y
VGltZSk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvclByb2ZpbGU6OnRvSW5zcGVjdG9yT2Jq
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50Ojpmb3JjZVBzZXVkb1N0
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpyZWNhbGNTdHlsZUZv
clBzZXVkb1N0YXRlSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdl
bnQ6OmFzSW5zcGVjdG9yU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JD
U1NBZ2VudDo6YXNzZXJ0U3R5bGVTaGVldEZvcklkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckNTU0FnZW50OjpkaWRSZW1vdmVET01Ob2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckNTU0FnZW50OjpkaWRNb2RpZnlET01BdHRyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckNTU0FnZW50OjpyZXNldFBzZXVkb1N0YXRlcyk6CisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnNvbGVBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb25z
b2xlQWdlbnQ6OnN0b3BUaW1pbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29uc29s
ZUFnZW50Ojpjb3VudCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50Ojpub2RlRm9ySWQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OnBlcmZvcm1TZWFyY2gpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmdldFNlYXJjaFJlc3VsdHMpOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OndpbGxTZW5kWE1MSHR0cFJlcXVlc3Qp
OgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpjbGVhckZyb250ZW5kKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6ZW5hYmxlKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6c3RvcmFnZUlkKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6Z2V0RE9NU3RvcmFnZVJl
c291cmNlRm9ySWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50
OjpkaWRVc2VET01TdG9yYWdlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJh
c2VBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEYXRhYmFzZUFnZW50Ojpl
bmFibGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6ZGF0YWJh
c2VJZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjpmaW5kQnlG
aWxlTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjpkYXRh
YmFzZUZvcklkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRCcmVha3Bv
aW50QnlVcmwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6cmVt
b3ZlQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpyZXNvbHZlQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50OjpzZWFyY2hJbkNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVi
dWdnZXJBZ2VudDo6Z2V0U2NyaXB0U291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQ6OmRpZFBhcnNlU291cmNlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3Rvck1lbW9yeUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Y2FjaGVkUmVzb3VyY2VzRm9yRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yUGFnZUFnZW50OjpkaWRDbGVhcldpbmRvd09iamVjdEluV29ybGQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpmcmFtZURldGFjaGVkKToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JQcm9maWxlckFnZW50OjpnZXRQcm9maWxlSGVhZGVycyk6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmdldFByb2ZpbGUp
OgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmJ1aWxkT2JqZWN0Rm9ySGVhZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JSZXNvdXJjZUFnZW50Ojp3aWxsU2VuZFJlcXVlc3QpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9JbnNwZWN0b3JTdGF0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdGF0
ZTo6Z2V0Qm9vbGVhbik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdGF0ZTo6Z2V0U3Ry
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0YXRlOjpnZXRMb25nKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvclN0YXRlOjpnZXREb3VibGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yU3RhdGU6OmdldE9iamVjdCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3Bl
Y3RvclN0eWxlU2hlZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGU6OnN0
eWxlV2l0aFByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVl
dDo6aW5zcGVjdG9yU3R5bGVGb3JJZCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclZh
bHVlcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPYmplY3RCYXNlOjpnZXQpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT2JqZWN0QmFzZTo6d3JpdGVKU09OKToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yV29ya2VyQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yV29ya2VyQWdlbnQ6OndvcmtlckNvbnRleHRUZXJtaW5hdGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvcldvcmtlckFnZW50OjpjcmVhdGVXb3JrZXJGcm9udGVuZENo
YW5uZWxzRm9yRXhpc3RpbmdXb3JrZXJzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvcldv
cmtlckFnZW50OjpkZXN0cm95V29ya2VyRnJvbnRlbmRDaGFubmVscyk6CisgICAgICAgICogaW5z
cGVjdG9yL05ldHdvcmtSZXNvdXJjZXNEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdv
cmtSZXNvdXJjZXNEYXRhOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrUmVzb3Vy
Y2VzRGF0YTo6cmVtb3ZlQ2FjaGVkUmVzb3VyY2UpOgorICAgICAgICAqIGxvYWRlci9Dcm9zc09y
aWdpbkFjY2Vzc0NvbnRyb2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNTaW1wbGVDcm9zc09y
aWdpbkFjY2Vzc1JlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQWNjZXNzQ29udHJv
bFByZWZsaWdodFJlcXVlc3QpOgorICAgICAgICAqIGxvYWRlci9Dcm9zc09yaWdpblByZWZsaWdo
dFJlc3VsdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyb3NzT3JpZ2luUHJlZmxpZ2h0
UmVzdWx0Q2FjaGVJdGVtOjphbGxvd3NDcm9zc09yaWdpbkhlYWRlcnMpOgorICAgICAgICAoV2Vi
Q29yZTo6Q3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZTo6Y2FuU2tpcFByZWZsaWdodCk6
CisgICAgICAgICogbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50TG9hZGVyOjpnZXRTdWJyZXNvdXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnRMb2FkZXI6OnN1YnN0aXR1dGVSZXNvdXJjZURlbGl2ZXJ5VGltZXJGaXJlZCk6CisgICAg
ICAgICogbG9hZGVyL01haW5SZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpN
YWluUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgICogbG9hZGVy
L1Jlc291cmNlTG9hZFNjaGVkdWxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxv
YWRTY2hlZHVsZXI6OnNlcnZlUGVuZGluZ1JlcXVlc3RzKToKKyAgICAgICAgKiBsb2FkZXIvYXBw
Y2FjaGUvQXBwbGljYXRpb25DYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlv
bkNhY2hlOjpyZW1vdmVSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNh
Y2hlOjpjbGVhclN0b3JhZ2VJRCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hl
OjpkdW1wKToKKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3Vw
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6ZGlkRmluaXNo
TG9hZGluZ01hbmlmZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVHcm91
cDo6c3RhcnRMb2FkaW5nRW50cnkpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNo
ZUdyb3VwOjphZGRFbnRyeSk6CisgICAgICAgICogbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9u
Q2FjaGVIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVIb3N0Ojpm
aWxsUmVzb3VyY2VMaXN0KToKKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25D
YWNoZVJlc291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVSZXNv
dXJjZTo6ZXN0aW1hdGVkU2l6ZUluU3RvcmFnZSk6CisgICAgICAgICogbG9hZGVyL2FwcGNhY2hl
L0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0
aW9uQ2FjaGVTdG9yYWdlOjpmaW5kT3JDcmVhdGVDYWNoZUdyb3VwKToKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjYWNoZUdyb3VwRm9yVVJMKToKKyAgICAgICAg
KFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpmYWxsYmFja0NhY2hlR3JvdXBGb3JV
UkwpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjplbXB0eSk6CisgICAg
ICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmVDb3B5T2ZDYWNoZSk6
CisgICAgICAgICogbG9hZGVyL2FyY2hpdmUvQXJjaGl2ZUZhY3RvcnkuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6QXJjaGl2ZUZhY3Rvcnk6OnJlZ2lzdGVyS25vd25BcmNoaXZlTUlNRVR5cGVzKToK
KyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2UuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q2FjaGVkUmF3UmVzb3VyY2U6OmNhblJldXNlKToKKyAgICAgICAgKiBsb2FkZXIv
Y2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3Vy
Y2U6OnN3aXRjaENsaWVudHNUb1JldmFsaWRhdGVkUmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2FjaGVkUmVzb3VyY2U6OnVwZGF0ZVJlc3BvbnNlQWZ0ZXJSZXZhbGlkYXRpb24pOgorICAg
ICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlci5oOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXI6OkNhY2hlZFJlc291cmNlQ2xp
ZW50V2Fsa2VyKToKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6On5DYWNoZWRSZXNv
dXJjZUxvYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVx
dWVzdFJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlTG9hZGVyOjpz
ZXRBdXRvTG9hZEltYWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZUxvYWRl
cjo6cmVtb3ZlQ2FjaGVkUmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3Vy
Y2VMb2FkZXI6OmdhcmJhZ2VDb2xsZWN0RG9jdW1lbnRSZXNvdXJjZXMpOgorICAgICAgICAqIGxv
YWRlci9jYWNoZS9NZW1vcnlDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlDYWNo
ZTo6cmVtb3ZlUmVzb3VyY2VzV2l0aE9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlD
YWNoZTo6Z2V0T3JpZ2luc1dpdGhDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlDYWNo
ZTo6Z2V0U3RhdGlzdGljcyk6CisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlDYWNoZTo6c2V0RGlz
YWJsZWQpOgorICAgICAgICAqIGxvYWRlci9pY29uL0ljb25EYXRhYmFzZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJY29uRGF0YWJhc2U6OnJlbW92ZUFsbEljb25zKToKKyAgICAgICAgKFdlYkNv
cmU6Okljb25EYXRhYmFzZTo6aWNvblJlY29yZENvdW50V2l0aERhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6SWNvbkRhdGFiYXNlOjpwZXJmb3JtUGVuZGluZ1JldGFpbkFuZFJlbGVhc2VPcGVyYXRp
b25zKToKKyAgICAgICAgKiBwYWdlL0RPTVdpbmRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpE
T01XaW5kb3c6OmRpc3BhdGNoQWxsUGVuZGluZ0JlZm9yZVVubG9hZEV2ZW50cyk6CisgICAgICAg
IChXZWJDb3JlOjpET01XaW5kb3c6OmRpc3BhdGNoQWxsUGVuZGluZ1VubG9hZEV2ZW50cyk6Cisg
ICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRI
YW5kbGVyOjpoYW5kbGVUb3VjaEV2ZW50KToKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lOjppbmplY3RVc2VyU2NyaXB0cyk6CisgICAgICAgICogcGFn
ZS9QYWdlR3JvdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUdyb3VwOjpwYWdlR3JvdXAp
OgorICAgICAgICAoV2ViQ29yZTo6UGFnZUdyb3VwOjpjbG9zZUxvY2FsU3RvcmFnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQYWdlR3JvdXA6OmNsZWFyTG9jYWxTdG9yYWdlRm9yQWxsT3JpZ2lucyk6
CisgICAgICAgIChXZWJDb3JlOjpQYWdlR3JvdXA6OmNsZWFyTG9jYWxTdG9yYWdlRm9yT3JpZ2lu
KToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VHcm91cDo6c3luY0xvY2FsU3RvcmFnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQYWdlR3JvdXA6OmFkZFVzZXJTY3JpcHRUb1dvcmxkKToKKyAgICAgICAg
KFdlYkNvcmU6OlBhZ2VHcm91cDo6YWRkVXNlclN0eWxlU2hlZXRUb1dvcmxkKToKKyAgICAgICAg
KFdlYkNvcmU6OlBhZ2VHcm91cDo6cmVtb3ZlVXNlclNjcmlwdEZyb21Xb3JsZCk6CisgICAgICAg
IChXZWJDb3JlOjpQYWdlR3JvdXA6OnJlbW92ZVVzZXJTdHlsZVNoZWV0RnJvbVdvcmxkKToKKyAg
ICAgICAgKiBwYWdlL1BhZ2VTZXJpYWxpemVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VT
ZXJpYWxpemVyOjp1cmxGb3JCbGFua0ZyYW1lKToKKyAgICAgICAgKiBwYWdlL1NlY3VyaXR5UG9s
aWN5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlY3VyaXR5UG9saWN5OjphZGRPcmlnaW5BY2Nl
c3NXaGl0ZWxpc3RFbnRyeSk6CisgICAgICAgIChXZWJDb3JlOjpTZWN1cml0eVBvbGljeTo6cmVt
b3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkpOgorICAgICAgICAqIHBhZ2UvU2V0dGluZ3Mu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6c2V0R2VuZXJpY0ZvbnRGYW1pbHlNYXApOgorICAgICAg
ICAoV2ViQ29yZTo6Z2V0R2VuZXJpY0ZvbnRGYW1pbHlGb3JTY3JpcHQpOgorICAgICAgICAqIHBh
Z2UvU3BlZWNoSW5wdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3BlZWNoSW5wdXQ6OnJlZ2lz
dGVyTGlzdGVuZXIpOgorICAgICAgICAqIHBhZ2UvV2luZG93RmVhdHVyZXMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6V2luZG93RmVhdHVyZXM6OmJvb2xGZWF0dXJlKToKKyAgICAgICAgKFdlYkNv
cmU6OldpbmRvd0ZlYXR1cmVzOjpmbG9hdEZlYXR1cmUpOgorICAgICAgICAqIHBhZ2UvYW5pbWF0
aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9u
Q29udHJvbGxlclByaXZhdGU6OnVwZGF0ZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6
QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnN1c3BlbmRBbmltYXRpb25zRm9yRG9jdW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnJlc3VtZUFu
aW1hdGlvbnNGb3JEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25Db250cm9s
bGVyUHJpdmF0ZTo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKToKKyAgICAgICAgKiBwYWdlL2Fu
aW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9z
aXRlQW5pbWF0aW9uOjpjbGVhclJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0
ZUFuaW1hdGlvbjo6dXBkYXRlVHJhbnNpdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9z
aXRlQW5pbWF0aW9uOjp1cGRhdGVLZXlmcmFtZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjphbmltYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBv
c2l0ZUFuaW1hdGlvbjo6Z2V0QW5pbWF0ZWRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21w
b3NpdGVBbmltYXRpb246OnNldEFuaW1hdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3Np
dGVBbmltYXRpb246OnRpbWVUb05leHRTZXJ2aWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBv
c2l0ZUFuaW1hdGlvbjo6Z2V0QW5pbWF0aW9uRm9yUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjpzdXNwZW5kQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJD
b3JlOjpDb21wb3NpdGVBbmltYXRpb246OnJlc3VtZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjpvdmVycmlkZUltcGxpY2l0QW5pbWF0aW9ucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb246OnJlc3VtZU92ZXJyaWRkZW5JbXBs
aWNpdEFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjpp
c0FuaW1hdGluZ1Byb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlv
bjo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKToKKyAgICAgICAgKiBwbGF0Zm9ybS9MYW5ndWFn
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpsYW5ndWFnZURpZENoYW5nZSk6CisgICAgICAgICog
cGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNSU1FVHlw
ZVJlZ2lzdHJ5OjpnZXROb3JtYWxpemVkTUlNRVR5cGUpOgorICAgICAgICAqIHBsYXRmb3JtL2F1
ZGlvL0hSVEZFbGV2YXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0Q29uY2F0ZW5hdGVk
SW1wdWxzZVJlc3BvbnNlc0ZvclN1YmplY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2JsYWNrYmVy
cnkvQ29va2llTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVNYW5hZ2VyOjpn
ZW5lcmF0ZUh0bWxGcmFnbWVudEZvckNvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2ll
TWFuYWdlcjo6cmVtb3ZlQWxsQ29va2llcyk6CisgICAgICAgICogcGxhdGZvcm0vYmxhY2tiZXJy
eS9Db29raWVNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llTWFwOjpyZW1vdmVPbGRl
c3RDb29raWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llTWFwOjpnZXRBbGxDaGlsZENvb2tp
ZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2NmL0JpbmFyeVByb3BlcnR5TGlzdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpCaW5hcnlQcm9wZXJ0eUxpc3RQbGFuOjp3cml0ZUludGVnZXJBcnJheSk6
CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJIVFRQTG9hZEluZm8uY3Bw
OgorICAgICAgICAoV2ViS2l0OjphZGRIZWFkZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9t
aXVtL3N1cHBvcnQvV2ViVVJMUmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFJl
cXVlc3Q6OnZpc2l0SFRUUEhlYWRlckZpZWxkcyk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21p
dW0vc3VwcG9ydC9XZWJVUkxSZXNwb25zZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFJl
c3BvbnNlOjphZGRIVFRQSGVhZGVyRmllbGQpOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxSZXNw
b25zZTo6dmlzaXRIVFRQSGVhZGVyRmllbGRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9EaXNwbGF5UmVmcmVzaE1vbml0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheVJl
ZnJlc2hNb25pdG9yTWFuYWdlcjo6ZW5zdXJlTW9uaXRvckZvckNsaWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5UmVmcmVzaE1vbml0b3JNYW5hZ2VyOjp1bnJlZ2lzdGVyQ2xpZW50KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udENhY2hlOjpnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OkZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
Rm9udENhY2hlOjpyZWxlYXNlRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hl
OjpwdXJnZUluYWN0aXZlRm9udERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ds
eXBoUGFnZVRyZWVOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoUGFnZVRyZWVOb2Rl
Ojp0cmVlR2x5cGhQYWdlQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6R2x5cGhQYWdlVHJlZU5v
ZGU6OnBhZ2VDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaFBhZ2VUcmVlTm9kZTo6cHJ1
bmVUcmVlQ3VzdG9tRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R2x5cGhQYWdlVHJlZU5v
ZGU6OnBydW5lVHJlZUZvbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoUGFnZVRyZWVO
b2RlOjpwcnVuZUN1c3RvbUZvbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoUGFnZVRy
ZWVOb2RlOjpwcnVuZUZvbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoUGFnZVRyZWVO
b2RlOjpzaG93U3VidHJlZSk6CisgICAgICAgIChzaG93R2x5cGhQYWdlVHJlZXMpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJBbmltYXRpb24uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckFuaW1hdGlvbnM6Omhhc0FjdGl2ZUFuaW1hdGlvbnNP
ZlR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckFuaW1hdGlvbnM6Omhhc1J1
bm5pbmdBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRp
b25zOjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckFuaW1hdGlvbnM6OnBh
dXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRpb25zOjphcHBseSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VGlsZWRCYWNraW5nU3RvcmU6OnVwZGF0ZVRpbGVCdWZmZXJzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRpbGVkQmFja2luZ1N0b3JlOjpyZXNpemVFZGdlVGlsZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6VGlsZWRCYWNraW5nU3RvcmU6OnNldEtlZXBSZWN0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vY2YvTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uQ0YuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QVZGV3JhcHBlcjo6YXZmV3JhcHBl
ckZvckNhbGxiYWNrQ29udGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2ti
ZXJyeS9MYXllclRpbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXI6OmxheWVy
VmlzaWJpbGl0eUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlcjo6dXBsb2Fk
VGV4dHVyZXNJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyOjphZGRUaWxl
Sm9iKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXI6OmRlbGV0ZVRleHR1cmVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXI6OnBydW5lVGV4dHVyZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJUaWxlcjo6YmluZENvbnRlbnRzVGV4dHVyZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9UZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZDo6dGV4dHVy
ZUZvclRpbGVkQ29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZUNhY2hlQ29tcG9z
aXRpbmdUaHJlYWQ6OnRleHR1cmVGb3JDb2xvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXJDQTo6bW92ZU9yQ29weUFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NM
YXllckNBOjpwYXVzZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVy
Q0E6OmxheWVyRGlkRGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6
OnVwZGF0ZUdlb21ldHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6dXBk
YXRlVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRl
Q2hpbGRyZW5UcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjp1
cGRhdGVNYXNrc1RvQm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6
dXBkYXRlQ29udGVudHNWaXNpYmlsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXJDQTo6dXBkYXRlQ29udGVudHNPcGFxdWUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NM
YXllckNBOjp1cGRhdGVCYWNrZmFjZVZpc2liaWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllckNBOjp1cGRhdGVGaWx0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXJDQTo6ZW5zdXJlU3RydWN0dXJhbExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXJDQTo6dXBkYXRlTGF5ZXJEcmF3c0NvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NMYXllckNBOjp1cGRhdGVDb250ZW50c0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlQ29udGVudHNSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlTWFza0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXJDQTo6dXBkYXRlTGF5ZXJBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJDQTo6c2V0QW5pbWF0aW9uT25MYXllcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0xheWVyQ0E6OnJlbW92ZUNBQW5pbWF0aW9uRnJvbUxheWVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6cGF1c2VDQUFuaW1hdGlvbk9uTGF5ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjpzdXNwZW5kQW5pbWF0aW9ucyk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnJlc3VtZUFuaW1hdGlvbnMpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjpmaW5kT3JNYWtlQ2xvbmUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjpzZXRPcGFjaXR5SW50ZXJuYWwpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjp1cGRhdGVPcGFjaXR5T25MYXllcik6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1RpbGVDYWNoZS5tbToKKyAgICAgICAgKFdlYkNv
cmU6OlRpbGVDYWNoZTo6c2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVD
YWNoZTo6c2V0U2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZUNhY2hlOjpzZXRBY2NlbGVy
YXRlc0RyYXdpbmcpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZUNhY2hlOjpzZXRUaWxlRGVidWdC
b3JkZXJXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlQ2FjaGU6OnNldFRpbGVEZWJ1Z0Jv
cmRlckNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVDYWNoZTo6cmV2YWxpZGF0ZVRpbGVz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2lu
LmNwcDoKKyAgICAgICAgKFBsYXRmb3JtQ0FMYXllcjo6YW5pbWF0aW9uU3RhcnRlZCk6CisgICAg
ICAgIChyZXN1Ym1pdEFsbEFuaW1hdGlvbnMpOgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyOjph
bmltYXRpb25Gb3JLZXkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Zv
bnRDYWNoZUNocm9taXVtV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okxvb2t1cEFsdE5hbWUp
OgorICAgICAgICAoV2ViQ29yZTo6Zm9udENvbnRhaW5zQ2hhcmFjdGVyKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250VXRpbHNDaHJvbWl1bVdpbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpnZXREZXJpdmVkRm9udERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06Om1hcEFuaW1hdGlvbk5hbWVUb0lkKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkZWNpZGVSZW5kZXJQ
YXNzQWxsb2NhdGlvbnNGb3JGcmFtZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5
ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExh
eWVyQ2hyb21pdW06OnNldExheWVyVHJlZUhvc3QpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRM
YXllckNocm9taXVtOjppbnZhbGlkYXRlQ29udGVudFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
VGlsZWRMYXllckNocm9taXVtOjpzZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnJlc2V0VXBkYXRlU3RhdGUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGFtYWdlVHJhY2tlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0RhbWFnZVRyYWNrZXI6OnRyYWNrRGFtYWdlRnJvbUxlZnRvdmVy
UmVjdHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
aWxpbmdEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUaWxpbmdEYXRhOjpzZXRC
b3VuZHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6On5DQ0xheWVy
VHJlZUhvc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpzdGFydFJhdGVM
aW1pdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6c3RvcFJhdGVMaW1p
dGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRSZW5kZXJQYXNzQnlJZCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZXNvdXJjZVByb3ZpZGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVzb3VyY2VQcm92aWRlcjo6aW5Vc2VCeUNvbnN1
bWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVzb3VyY2VQcm92aWRlcjo6ZGVsZXRlUmVzb3Vy
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZXNvdXJjZVByb3ZpZGVyOjpkZWxldGVPd25lZFJl
c291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Jlc291cmNlUHJvdmlkZXI6OnVwbG9hZCk6
CisgICAgICAgIChXZWJDb3JlOjpDQ1Jlc291cmNlUHJvdmlkZXI6OmxvY2tGb3JXcml0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ1Jlc291cmNlUHJvdmlkZXI6OnVubG9ja0ZvcldyaXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDUmVzb3VyY2VQcm92aWRlcjo6bG9ja0ZvclJlYWQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NSZXNvdXJjZVByb3ZpZGVyOjp1bmxvY2tGb3JSZWFkKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclByb2dyYW0uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q3VzdG9tRmlsdGVyUHJvZ3JhbTo6bm90aWZ5Q2xpZW50cyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTa2lhLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmdldENhY2hlZEhhcmZidXp6RmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpy
ZWxlYXNlQ2FjaGVkSGFyZmJ1enpGYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9o
YXJmYnV6ei9uZy9IYXJmQnV6ek5HRmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6
ek5HRmFjZTo6SGFyZkJ1enpOR0ZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpOR0Zh
Y2U6On5IYXJmQnV6ek5HRmFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1Np
bXBsZUZvbnREYXRhQ29yZVRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERh
dGE6OmdldENGU3RyaW5nQXR0cmlidXRlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL1NpbXBsZUZvbnREYXRhTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERh
dGE6OmNhblJlbmRlckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbjo6Z2V0VHJhbnNsYXRlZFNoYWRl
clNvdXJjZUFOR0xFKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhp
Y3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmNvbXBpbGVTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OmdldFNoYWRlcml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpnZXRTaGFkZXJJbmZvTG9nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpnZXRTaGFkZXJTb3VyY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW52Zy9F
R0xEaXNwbGF5T3BlblZHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVHTERpc3BsYXlPcGVuVkc6
On5FR0xEaXNwbGF5T3BlblZHKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTERpc3BsYXlPcGVuVkc6
OmRlc3Ryb3lTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTERpc3BsYXlPcGVuVkc6OmNv
bnRleHRGb3JTdXJmYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlckdMLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTERhdGE6
OlNoYXJlZEdMRGF0YTo6Y3VycmVudFNoYXJlZEdMRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFyZWRHTERhdGE6On5TaGFyZWRHTERhdGEpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6Z2V0U2hh
ZGVyUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
cjo6Z2V0U2hhZGVyRm9yRmlsdGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW5j
ZS9Gb250UGxhdGZvcm1EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpeGVkU2l6ZUZvbnRE
YXRhOjpjcmVhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGFPYmplY3RHdGs6OmZvckNsaXBib2FyZCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3RrL0d0a0RyYWdBbmREcm9wSGVscGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Okd0a0RyYWdBbmREcm9wSGVscGVyOjpoYW5kbGVHZXREcmFnRGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpHdGtEcmFnQW5kRHJvcEhlbHBlcjo6aGFuZGxlRHJhZ0xlYXZlKToKKyAgICAgICAg
KFdlYkNvcmU6Okd0a0RyYWdBbmREcm9wSGVscGVyOjpoYW5kbGVEcmFnTW90aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6Okd0a0RyYWdBbmREcm9wSGVscGVyOjpoYW5kbGVEcmFnRGF0YVJlY2VpdmVk
KToKKyAgICAgICAgKFdlYkNvcmU6Okd0a0RyYWdBbmREcm9wSGVscGVyOjpoYW5kbGVEcmFnRHJv
cCk6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrMy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpndGtTdHlsZUNoYW5nZWRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpn
ZXRTdHlsZUNvbnRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9TY3JvbGxiYXJUaGVtZU1h
Yy5tbToKKyAgICAgICAgKCtbV2ViU2Nyb2xsYmFyUHJlZnNPYnNlcnZlciBhcHBlYXJhbmNlUHJl
ZnNDaGFuZ2VkOl0pOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbFN0b3Jh
Z2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3JlZGVudGlhbFN0b3JhZ2U6OnNldCk6CisgICAg
ICAgIChXZWJDb3JlOjpDcmVkZW50aWFsU3RvcmFnZTo6Z2V0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9uZXR3b3JrL0hUVFBIZWFkZXJNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRUUEhlYWRl
ck1hcDo6Y29weURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SFRUUEhlYWRlck1hcDo6Z2V0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL01JTUVIZWFkZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6TUlNRUhlYWRlcjo6cGFyc2VIZWFkZXIpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdv
cmsvUmVzb3VyY2VIYW5kbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6
OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OmFkZEhUVFBIZWFk
ZXJGaWVsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjphZGRIVFRQ
SGVhZGVyRmllbGRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvUmVz
b3VyY2VSZXF1ZXN0QmxhY2tCZXJyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3Q6OnRhcmdldFR5cGVGcm9tTWltZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0Ojppbml0aWFsaXplUGxhdGZvcm1SZXF1ZXN0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9uZXR3b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZOZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
bWFrZUZpbmFsUmVxdWVzdCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJj
ZVJlcXVlc3RDRk5ldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRIZWFkZXJGaWVsZHMpOgor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1hbmFnZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjppbml0aWFsaXplSGFu
ZGxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZVJlcXVlc3RNYWMu
bW06CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q6OmRvVXBkYXRlUGxhdGZvcm1S
ZXF1ZXN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3F0L1Jlc291cmNlUmVxdWVzdFF0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdDo6dG9OZXR3b3JrUmVxdWVz
dCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVzdFNvdXAu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Ojp1cGRhdGVTb3VwTWVzc2Fn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q6OnRvU291cE1lc3NhZ2UpOgor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlc3BvbnNlU291cC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlOjp0b1NvdXBNZXNzYWdlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3dpbi9SZXNvdXJjZUhhbmRsZVdpbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6c3RhcnQpOgorICAgICAgICAqIHBsYXRmb3Jt
L3F0L1J1bkxvb3BRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSdW5Mb29wOjpUaW1lckJhc2U6
OnRpbWVyRmlyZWQpOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvTG9jYWxlVG9TY3JpcHRNYXBw
aW5nRGVmYXVsdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzY3JpcHROYW1lVG9Db2RlKToKKyAg
ICAgICAgKFdlYkNvcmU6OmxvY2FsZVRvU2NyaXB0Q29kZUZvckZvbnRTZWxlY3Rpb24pOgorICAg
ICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnkuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6cHJ1bmVCbGFja2xpc3RlZENvZGVjcyk6CisgICAgICAgIChXZWJDb3JlOjpkdW1w
VGV4dEVuY29kaW5nTmFtZU1hcCk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC90cmFuc2NvZGVy
L0ZvbnRUcmFuc2NvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRUcmFuc2NvZGVyOjpj
b252ZXJ0ZXJUeXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L3dpbi9UZXh0Q29kZWNXaW4u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TGFuZ3VhZ2VNYW5hZ2VyOjpMYW5ndWFnZU1hbmFnZXIp
OgorICAgICAgICAoV2ViQ29yZTo6Z2V0Q29kZVBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dENvZGVjV2luOjpyZWdpc3RlckV4dGVuZGVkRW5jb2RpbmdOYW1lcyk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0Q29kZWNXaW46OnJlZ2lzdGVyRXh0ZW5kZWRDb2RlY3MpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dENvZGVjV2luOjplbnVtZXJhdGVTdXBwb3J0ZWRFbmNvZGluZ3MpOgorICAgICAg
ICAqIHBsYXRmb3JtL3dpbi9DbGlwYm9hcmRVdGlsaXRpZXNXaW4uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Z2V0RGF0YU1hcEl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6Z2V0Q2xpcGJvYXJkRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRDbGlwYm9hcmREYXRhKToKKyAgICAgICAgKiBwbGF0
Zm9ybS93aW4vQ2xpcGJvYXJkV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZFdp
bjo6dHlwZXMpOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9GaWxlU3lzdGVtV2luLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmNhY2hlZFN0b3JhZ2VEaXJlY3RvcnkpOgorICAgICAgICAqIHBsYXRm
b3JtL3dpbi9SdW5Mb29wV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJ1bkxvb3A6OlRpbWVy
QmFzZTo6dGltZXJGaXJlZCk6CisgICAgICAgICogcGxhdGZvcm0vd2luL1dDRGF0YU9iamVjdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpXQ0RhdGFPYmplY3Q6OmNyZWF0ZUluc3RhbmNlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS93aW5jZS9NSU1FVHlwZVJlZ2lzdHJ5V2luQ0UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6TUlNRVR5cGVSZWdpc3RyeTo6Z2V0UHJlZmVycmVkRXh0ZW5zaW9uRm9yTUlN
RVR5cGUpOgorICAgICAgICAqIHBsYXRmb3JtL3d4L0NvbnRleHRNZW51V3guY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q29udGV4dE1lbnU6OmFwcGVuZEl0ZW0pOgorICAgICAgICAqIHBsdWdpbnMv
UGx1Z2luRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6OnJl
ZnJlc2gpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6Ok1JTUVUeXBlRm9yRXh0
ZW5zaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNlOjpyZW1vdmUpOgorICAg
ICAgICAqIHBsdWdpbnMvUGx1Z2luTWFpblRocmVhZFNjaGVkdWxlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyOjpzY2hlZHVsZUNhbGwpOgorICAgICAg
ICAoV2ViQ29yZTo6UGx1Z2luTWFpblRocmVhZFNjaGVkdWxlcjo6ZGlzcGF0Y2hDYWxscyk6Cisg
ICAgICAgICogcGx1Z2lucy9QbHVnaW5TdHJlYW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luU3RyZWFtOjpzdGFydFN0cmVhbSk6CisgICAgICAgICogcGx1Z2lucy9ibGFja2JlcnJ5L1Bs
dWdpbkRhdGFCbGFja0JlcnJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGE6Omlu
aXRQbHVnaW5zKToKKyAgICAgICAgKiBwbHVnaW5zL3d4L1BsdWdpbkRhdGFXeC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhOjppbml0UGx1Z2lucyk6CisgICAgICAgICogcmVuZGVy
aW5nL0Zsb3dUaHJlYWRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZsb3dUaHJl
YWRDb250cm9sbGVyOjp1bnJlZ2lzdGVyTmFtZWRGbG93Q29udGVudE5vZGUpOgorICAgICAgICAq
IHJlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUZs
b3dCb3g6OnJlcXVpcmVzSWRlb2dyYXBoaWNCYXNlbGluZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bmxpbmVGbG93Qm94OjphZGRUZXh0Qm94VmlzdWFsT3ZlcmZsb3cpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJCbG9jay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Y2xl
YXJGbG9hdHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6c2V0TG9naWNhbFdpZHRoRm9yVGV4dFJ1bik6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlUXVhbGl0eUNvbnRyb2xsZXI6OmhpZ2hRdWFsaXR5UmVwYWludFRpbWVyRmlyZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VRdWFsaXR5Q29udHJvbGxlcjo6c2hvdWxkUGFpbnRBdExv
d1F1YWxpdHkpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJDb3VudGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckNvdW50ZXI6OmRlc3Ryb3lDb3VudGVyTm9kZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQ291bnRlcjo6ZGVzdHJveUNvdW50ZXJOb2RlKToKKyAgICAgICAg
KFdlYkNvcmU6OnVwZGF0ZUNvdW50ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckNvdW50
ZXI6OnJlbmRlcmVyU3R5bGVDaGFuZ2VkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmxv
d1RocmVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpzZXRSZWdp
b25SYW5nZUZvckJveCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpnZXRS
ZWdpb25SYW5nZUZvckJveCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwYWludCk6CisgICAgICAgIChXZWJDb3Jl
OjpwZXJmb3JtT3ZlcmxhcFRlc3RzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJG
aWx0ZXJJbmZvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyRmlsdGVySW5mbzo6
ZmlsdGVySW5mb0ZvclJlbmRlckxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
RmlsdGVySW5mbzo6Y3JlYXRlRmlsdGVySW5mb0ZvclJlbmRlckxheWVySWZOZWVkZWQpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTmFtZWRGbG93VGhyZWFkOjpkZXBlbmRzT24pOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTmFtZWRGbG93VGhyZWFkOjpwdXNoRGVwZW5kZW5jaWVzKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJlZ2lv
bjo6c2V0UmVuZGVyQm94UmVnaW9uSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZWdp
b246OnNldFJlZ2lvbk9iamVjdHNSZWdpb25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJSZWdpb246OnJlc3RvcmVSZWdpb25PYmplY3RzT3JpZ2luYWxTdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJSZWdpb246OmNvbXB1dGVDaGlsZHJlblN0eWxlSW5SZWdpb24pOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpjYWNoZWRDb2xsYXBzZWRCb3JkZXIpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lTWFjOjpzeXN0ZW1Db2xvcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclZpZXcuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6c2VsZWN0aW9uQm91bmRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OnNldFNlbGVjdGlvbik6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlcldpZGdldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJXaWRnZXQ6OnJl
c3VtZVdpZGdldEhpZXJhcmNoeVVwZGF0ZXMpOgorICAgICAgICAqIHJlbmRlcmluZy9Sb290SW5s
aW5lQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJvb3RJbmxpbmVCb3g6OmFzY2VudEFuZERl
c2NlbnRGb3JCb3gpOgorICAgICAgICAqIHJlbmRlcmluZy9WZXJ0aWNhbFBvc2l0aW9uQ2FjaGUu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlZlcnRpY2FsUG9zaXRpb25DYWNoZTo6Z2V0KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHSW5saW5lVGV4dDo6Y2hhcmFjdGVyU3RhcnRzTmV3VGV4dENodW5rKToK
KyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwcmltaXRpdmVBdHRyaWJ1
dGVDaGFuZ2VkKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3Jh
ZGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudDo6
YXBwbHlSZXNvdXJjZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZVBhdHRlcm4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJu
OjphcHBseVJlc291cmNlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlc0Nh
Y2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Jlc291cmNlc0NhY2hlOjpyZXNvdXJjZURl
c3Ryb3llZCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSb290SW5saW5lQm94LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OnN3YXBJdGVtc0luTGF5b3V0QXR0cmlidXRlcyk6CisgICAgICAg
ICogcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRlcy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdUZXh0TGF5b3V0QXR0cmlidXRlczo6ZHVtcCk6CisgICAgICAgICogcmVuZGVy
aW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyOjpidWlsZENoYXJhY3RlckRhdGFN
YXApOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyOjpm
aWxsQ2hhcmFjdGVyRGF0YU1hcCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5
b3V0RW5naW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRMYXlvdXRFbmdpbmU6Omxh
eW91dFRleHRPbkxpbmVPclBhdGgpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHVGV4dE1l
dHJpY3NCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRNZXRyaWNzQnVpbGRl
cjo6bWVhc3VyZVRleHRSZW5kZXJlcik6CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlQXJlYVN5
bmMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFTeW5jOjpzeW5jVGltZXJGaXJl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYVN5bmM6OnBlcmZvcm1JbXBvcnQpOgor
ICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFTeW5jOjpzeW5jKToKKyAgICAgICAgKiBzdG9y
YWdlL1N0b3JhZ2VNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU1hcDo6a2V5KToK
KyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VNYXA6OnNldEl0ZW0pOgorICAgICAgICAqIHN0b3Jh
Z2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU5h
bWVzcGFjZUltcGw6OmxvY2FsU3RvcmFnZU5hbWVzcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dG9yYWdlTmFtZXNwYWNlSW1wbDo6Y29weSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlTmFt
ZXNwYWNlSW1wbDo6Y2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU5hbWVzcGFjZUlt
cGw6OmNsZWFyQWxsT3JpZ2luc0ZvckRlbGV0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3Jh
Z2VOYW1lc3BhY2VJbXBsOjpzeW5jKToKKyAgICAgICAgKiBzdmcvU1ZHRG9jdW1lbnRFeHRlbnNp
b25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3Zl
QW5pbWF0aW9uRWxlbWVudEZyb21UYXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRG9jdW1l
bnRFeHRlbnNpb25zOjpyZW1vdmVBbGxBbmltYXRpb25FbGVtZW50c0Zyb21UYXJnZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRG9jdW1lbnRFeHRlbnNpb25zOjphZGRQZW5kaW5nUmVzb3VyY2Up
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRG9jdW1lbnRFeHRlbnNpb25zOjppc0VsZW1lbnRQZW5k
aW5nUmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0RvY3VtZW50RXh0ZW5zaW9uczo6
cmVtb3ZlRWxlbWVudEZyb21QZW5kaW5nUmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0RvY3VtZW50RXh0ZW5zaW9uczo6c2V0T2ZFbGVtZW50c1JlZmVyZW5jaW5nVGFyZ2V0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlQWxsVGFyZ2V0UmVm
ZXJlbmNlc0ZvckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRG9jdW1lbnRFeHRlbnNp
b25zOjpyZW1vdmVBbGxFbGVtZW50UmVmZXJlbmNlc0ZvclRhcmdldCk6CisgICAgICAgICogc3Zn
L1NWR0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudDo6flNWR0VsZW1l
bnQpOgorICAgICAgICAqIHN2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U01JTFRpbWVDb250YWluZXI6OnVwZGF0ZUFuaW1hdGlvbnMpOgorICAg
ICAgICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZUNhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0ltYWdlQ2FjaGU6On5TVkdJbWFnZUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lt
YWdlQ2FjaGU6OnJlbW92ZUNsaWVudEZyb21DYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdJ
bWFnZUNhY2hlOjpyZXF1ZXN0ZWRTaXplQW5kU2NhbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ltYWdlQ2FjaGU6OmltYWdlQ29udGVudENoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
SW1hZ2VDYWNoZTo6cmVkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlQ2FjaGU6Omxv
b2t1cE9yQ3JlYXRlQml0bWFwSW1hZ2VGb3JSZW5kZXJlcik6CisgICAgICAgICogc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmls
dGVyQnVpbGRlcjo6ZWZmZWN0UmVmZXJlbmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0
ZXJCdWlsZGVyOjphZGRCdWlsdGluRWZmZWN0cyk6CisgICAgICAgICogc3ZnL3Byb3BlcnRpZXMv
U1ZHQW5pbWF0ZWRQcm9wZXJ0eS5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRQcm9w
ZXJ0eTo6flNWR0FuaW1hdGVkUHJvcGVydHkpOgorICAgICAgICAqIHN2Zy9wcm9wZXJ0aWVzL1NW
R0F0dHJpYnV0ZVRvUHJvcGVydHlNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQXR0cmli
dXRlVG9Qcm9wZXJ0eU1hcDo6YWRkUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdB
dHRyaWJ1dGVUb1Byb3BlcnR5TWFwOjpzeW5jaHJvbml6ZVByb3BlcnRpZXMpOgorICAgICAgICAq
IHdvcmtlcnMvV29ya2VyQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250
ZXh0OjpoYXNQZW5kaW5nQWN0aXZpdHkpOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyRXZlbnRR
dWV1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJFdmVudFF1ZXVlOjpjbG9zZSk6Cisg
ICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0
dHBSZXF1ZXN0OjpzZXRSZXF1ZXN0SGVhZGVySW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6
WE1MSHR0cFJlcXVlc3Q6OmdldEFsbFJlc3BvbnNlSGVhZGVycyk6CisgICAgICAgICogeG1sL1hQ
YXRoRnVuY3Rpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpjcmVhdGVGdW5jdGlv
bik6CisgICAgICAgICogeG1sL1hQYXRoUGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhQ
YXRoOjppc0F4aXNOYW1lKToKKyAgICAgICAgKiB4bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6eHNsdFBhcmFtQXJyYXlGcm9tUGFyYW1ldGVyTWFwKToKKyAg
ICAgICAgKiB4bWwvWFNMVFByb2Nlc3NvclF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhTTFRQ
cm9jZXNzb3I6OnRyYW5zZm9ybVRvU3RyaW5nKToKKwogMjAxMi0wNy0zMCAgU2hlcmlmZiBCb3Qg
IDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9s
bGluZyBvdXQgcjEyMzk2NiBhbmQgcjEyMzk2Ny4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
YmxhY2tiZXJyeS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQ2hhbmdlTG9n
CmluZGV4IGU0ZDFjZjZmOTkwNTlmZGI2MzdkZTNjZjQxOTFlYWEzYWVmNzI2MGYuLmVlMDM4ZTVk
ZjM3ZjViMGI4YTQxYWRlYzQwY2YxNGI2MjhlNmQ3M2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvYmxhY2tiZXJyeS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0No
YW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDEyLTA3LTMwICBDYWlvIE1hcmNlbG8gZGUgT2xp
dmVpcmEgRmlsaG8gIDxjYWlvLm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+CisKKyAgICAgICAgUmVu
YW1lIGZpcnN0L3NlY29uZCB0byBrZXkvdmFsdWUgaW4gSGFzaE1hcCBpdGVyYXRvcnMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyNzg0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBBcGkvQmFja2luZ1N0
b3JlLmNwcDoKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6QmFja2luZ1N0b3JlUHJpdmF0
ZTo6c2V0QmFja2luZ1N0b3JlUmVjdCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkJh
Y2tpbmdTdG9yZVByaXZhdGU6OnZpc2libGVUaWxlc1JlY3QpOgorICAgICAgICAoQmxhY2tCZXJy
eTo6V2ViS2l0OjpCYWNraW5nU3RvcmVQcml2YXRlOjpyZXNldFRpbGVzKToKKyAgICAgICAgKEJs
YWNrQmVycnk6OldlYktpdDo6QmFja2luZ1N0b3JlUHJpdmF0ZTo6dXBkYXRlVGlsZXMpOgorICAg
ICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpCYWNraW5nU3RvcmVQcml2YXRlOjp1cGRhdGVUaWxl
c0ZvclNjcm9sbE9yTm90UmVuZGVyZWRSZWdpb24pOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2Vi
S2l0OjpCYWNraW5nU3RvcmVQcml2YXRlOjptYXBGcm9tVHJhbnNmb3JtZWRDb250ZW50c1RvVGls
ZXMpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlckltcGwu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6Y2FuY2Vs
KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6Om9uUGVybWlz
c2lvbik6CisgICAgICAgIChXZWJDb3JlOjpOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpub3Rp
ZmljYXRpb25DbGlja2VkKToKKyAgICAgICAgKiBXZWJLaXRTdXBwb3J0L0Fib3V0RGF0YS5jcHA6
CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OmR1bXBKU0NUeXBlQ291bnRTZXRUb1RhYmxl
SFRNTCk6CisgICAgICAgICogV2ViS2l0U3VwcG9ydC9GcmFtZUxheWVycy5jcHA6CisgICAgICAg
IChCbGFja0JlcnJ5OjpXZWJLaXQ6OkZyYW1lTGF5ZXJzOjpyZW1vdmVMYXllckJ5RnJhbWUpOgor
ICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpGcmFtZUxheWVyczo6Y29tbWl0T25XZWJLaXRU
aHJlYWQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpGcmFtZUxheWVyczo6Y2FsY3Vs
YXRlUm9vdExheWVyKToKKwogMjAxMi0wNy0zMCAgUm9iaW4gQ2FvICA8cm9iaW4uY2FvQHRvcmNo
bW9iaWxlLmNvbS5jbj4KIAogICAgICAgICBbQmxhY2tCZXJyeV0gQWRhcHQgdG8gY2hhbmdlcyBp
biB0aGUgU2hhcmVkQXJyYXkgcGxhdGZvcm0gQVBJCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmlu
ZGV4IDczYmYyYmQwMzc2OTA5M2NiNDczZjBhYzRhMDNiNWYxZWE0ZmE5MjcuLmJiMTg2OTkwNzQ3
ZjIyM2UyMDVhMjJmYmQ4NjE5MjZhYTE4MGQ2NzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTkgQEAKKzIwMTItMDctMzAgIENhaW8gTWFyY2VsbyBkZSBPbGl2ZWlyYSBG
aWxobyAgPGNhaW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KKworICAgICAgICBSZW5hbWUgZmly
c3Qvc2Vjb25kIHRvIGtleS92YWx1ZSBpbiBIYXNoTWFwIGl0ZXJhdG9ycworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI3ODQKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHNyYy9XZWJHZW9sb2NhdGlvblBl
cm1pc3Npb25SZXF1ZXN0TWFuYWdlci5jcHA6CisgICAgICAgIChXZWJHZW9sb2NhdGlvblBlcm1p
c3Npb25SZXF1ZXN0TWFuYWdlcjo6cmVtb3ZlKToKKyAgICAgICAgKiBzcmMvV2ViSURCTWV0YWRh
dGEuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJNZXRhZGF0YTo6V2ViSURCTWV0YWRhdGEp
OgorICAgICAgICAqIHNyYy9XZWJJbnRlbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnRl
bnQ6OmV4dHJhc1ZhbHVlKToKKyAgICAgICAgKiB0ZXN0cy9XZWJTb2NrZXRFeHRlbnNpb25EaXNw
YXRjaGVyVGVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpURVNUX0YpOgorCiAyMDEyLTA3LTMw
ICBLZWlzaGkgSGF0dG9yaSAgPGtlaXNoaUB3ZWJraXQub3JnPgogCiAgICAgICAgIEltcGxlbWVu
dCBkYXRhbGlzdCBVSSBmb3IgaW5wdXQgdHlwZSBjb2xvciBmb3IgQ2hyb21pdW0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5n
ZUxvZwppbmRleCA4ZTdmMGUyZTI1NDBiMjkyZmY1YWFlMDViZDJkOGE4MjZkOTJkZjE3Li5hYWY5
OGE0ZWUwOGU1ZjA3NDljZjBhYTNkZTAxY2U1ZjAwNGNmMjFkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2VmbC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTcgQEAKKzIwMTItMDctMzAgIENhaW8gTWFyY2VsbyBkZSBPbGl2ZWlyYSBGaWxo
byAgPGNhaW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KKworICAgICAgICBSZW5hbWUgZmlyc3Qv
c2Vjb25kIHRvIGtleS92YWx1ZSBpbiBIYXNoTWFwIGl0ZXJhdG9ycworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI3ODQKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0R1bXBSZW5k
ZXJUcmVlU3VwcG9ydEVmbC5jcHA6CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6
OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9QbGF0Zm9ybVN0cmF0ZWdpZXNFZmwuY3BwOgorICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVz
RWZsOjpnZXRQbHVnaW5JbmZvKToKKyAgICAgICAgKiBld2svZXdrX2ludGVudC5jcHA6CisgICAg
ICAgIChld2tfaW50ZW50X2V4dHJhX2dldCk6CisKIDIwMTItMDctMjkgIFlvdW5nVGFlY2sgU29u
ZyAgPHlvdW5ndGFlY2suc29uZ0BzYW1zdW5nLmNvbT4KIAogICAgICAgICBbV0syXVtFRkxdIFRJ
TEVEX0JBQ0tJTkdfU1RPUkUgc3VwcG9ydCBvbiBFZmwgV2ViS2l0MgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCmlu
ZGV4IDRjYmU0OTljMGIzOWQxYWI0ZTllYmE5ZDA0M2M5NTYzMDdhOWE3ZmMuLjk1ODI2YmYwZWJk
ZDhmMzA3OWJkMmI4NzRhMGQ4MThkNTNmNGJjZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Z3RrL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxNyBAQAorMjAxMi0wNy0zMCAgQ2FpbyBNYXJjZWxvIGRlIE9saXZlaXJhIEZpbGhvICA8Y2Fp
by5vbGl2ZWlyYUBvcGVuYm9zc2Eub3JnPgorCisgICAgICAgIFJlbmFtZSBmaXJzdC9zZWNvbmQg
dG8ga2V5L3ZhbHVlIGluIEhhc2hNYXAgaXRlcmF0b3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Mjc4NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVn
aWVzR3RrLmNwcDoKKyAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc0d0azo6Z2V0UGx1Z2luSW5m
byk6CisgICAgICAgICogd2Via2l0L3dlYmtpdGZhdmljb25kYXRhYmFzZS5jcHA6CisgICAgICAg
ICh3ZWJraXRGYXZpY29uRGF0YWJhc2VJbXBvcnRGaW5pc2hlZCk6CisgICAgICAgICogd2Via2l0
L3dlYmtpdHdlYnBsdWdpbi5jcHA6CisgICAgICAgICh3ZWJraXRfd2ViX3BsdWdpbl9nZXRfbWlt
ZXR5cGVzKToKKwogMjAxMi0wNy0zMCAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBn
bWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEyMzk2NiBhbmQg
cjEyMzk2Ny4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwppbmRleCAwNWRmMGFlZDVlOWIxN2NkMWJjYTVmZmU3NzZm
NDE2OGRjZWNhZDE0Li4yYzhkODFmMTZkZGFmMDIxNGNhMWIxZjBhNTZlMjgyZGE0NjZiNmM2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktp
dC9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDQgQEAKKzIwMTItMDctMzAgIENhaW8gTWFyY2Vs
byBkZSBPbGl2ZWlyYSBGaWxobyAgPGNhaW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KKworICAg
ICAgICBSZW5hbWUgZmlyc3Qvc2Vjb25kIHRvIGtleS92YWx1ZSBpbiBIYXNoTWFwIGl0ZXJhdG9y
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI3ODQK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEhpc3Rv
cnkvV2ViSGlzdG9yeS5tbToKKyAgICAgICAgKC1bV2ViSGlzdG9yeVByaXZhdGUgcmVtb3ZlSXRl
bUZyb21EYXRlQ2FjaGVzOl0pOgorICAgICAgICAoLVtXZWJIaXN0b3J5UHJpdmF0ZSBvcmRlcmVk
TGFzdFZpc2l0ZWREYXlzXSk6CisgICAgICAgIChXZWJIaXN0b3J5V3JpdGVyOjpXZWJIaXN0b3J5
V3JpdGVyKToKKyAgICAgICAgKiBNaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tOgorICAgICAgICAo
K1tXZWJDb3JlU3RhdGlzdGljcyBqYXZhU2NyaXB0UHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50c10p
OgorICAgICAgICAoK1tXZWJDb3JlU3RhdGlzdGljcyBqYXZhU2NyaXB0T2JqZWN0VHlwZUNvdW50
c10pOgorICAgICAgICAqIFBsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXIu
bW06CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXI6Omhvc3RGb3JQ
bHVnaW4pOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyOjpwbHVn
aW5Ib3N0RGllZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXI6
OmRpZENyZWF0ZVdpbmRvdyk6CisgICAgICAgICogUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVn
aW5Ib3N0UHJveHkubW06CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSG9zdFByb3h5
OjpwbHVnaW5Ib3N0RGllZCk6CisgICAgICAgICogUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVn
aW5JbnN0YW5jZVByb3h5Lm1tOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3Rh
bmNlUHJveHk6OkxvY2FsT2JqZWN0TWFwOjppZEZvck9iamVjdCk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6TG9jYWxPYmplY3RNYXA6OnJldGFpbik6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6TG9jYWxPYmplY3RN
YXA6OnJlbGVhc2UpOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJv
eHk6OkxvY2FsT2JqZWN0TWFwOjpmb3JnZXQpOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBs
dWdpbkluc3RhbmNlUHJveHk6OmRlc3Ryb3kpOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBs
dWdpbkluc3RhbmNlUHJveHk6OndlYkZyYW1lRGlkRmluaXNoTG9hZFdpdGhSZWFzb24pOgorICAg
ICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmNhbmNlbENoZWNrSWZB
bGxvd2VkVG9Mb2FkVVJMKToKKyAgICAgICAgKiBQbHVnaW5zL0hvc3RlZC9Qcm94eUluc3RhbmNl
Lm1tOgorICAgICAgICAoV2ViS2l0OjpQcm94eUluc3RhbmNlOjptZXRob2RzTmFtZWQpOgorICAg
ICAgICAoV2ViS2l0OjpQcm94eUluc3RhbmNlOjpmaWVsZE5hbWVkKToKKyAgICAgICAgKiBQbHVn
aW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5tbToKKyAgICAgICAgKC1bV2ViTmV0c2NhcGVQbHVn
aW5WaWV3IHN0b3BUaW1lcnNdKToKKyAgICAgICAgKC1bV2ViTmV0c2NhcGVQbHVnaW5WaWV3IHN0
YXJ0VGltZXJzXSk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViTm90aWZpY2F0aW9uQ2xp
ZW50Lm1tOgorICAgICAgICAoV2ViTm90aWZpY2F0aW9uQ2xpZW50OjpzaG93KToKKyAgICAgICAg
KFdlYk5vdGlmaWNhdGlvbkNsaWVudDo6Y2xlYXJOb3RpZmljYXRpb25zKToKKyAgICAgICAgKFdl
Yk5vdGlmaWNhdGlvbkNsaWVudDo6bm90aWZpY2F0aW9uT2JqZWN0RGVzdHJveWVkKToKKyAgICAg
ICAgKiBXZWJWaWV3L1dlYkhUTUxWaWV3Lm1tOgorICAgICAgICAoY29tbWFuZE5hbWVGb3JTZWxl
Y3Rvcik6CisKIDIwMTItMDctMjkgIFJpayBDYWJhbmllciAgPGNhYmFuaWVyQGFkb2JlLmNvbT4K
IAogICAgICAgICBBZGQgRU5BQkxFX0NTU19DT01QT1NJVElORyBmbGFnCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCmlu
ZGV4IDMyNjJmNzVhMWVhMGZhYWRmM2FmYTkwYzRhMTJmMzE3NDkzM2I1MzguLjZjZGEyZTY4NmE0
ZDQ4MGY4MWY0OTcyMmViODlhMzJiMTI4MzM3YzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
cXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTcgQEAKKzIwMTItMDctMzAgIENhaW8gTWFyY2VsbyBkZSBPbGl2ZWlyYSBGaWxobyAgPGNhaW8u
b2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KKworICAgICAgICBSZW5hbWUgZmlyc3Qvc2Vjb25kIHRv
IGtleS92YWx1ZSBpbiBIYXNoTWFwIGl0ZXJhdG9ycworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI3ODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIEFwaS9xd2VicGFnZS5jcHA6CisgICAgICAgIChleHRy
YWN0Q29udGVudFR5cGVGcm9tUGx1Z2luVmVjdG9yKToKKyAgICAgICAgKiBBcGkvcXdlYnBsdWdp
bmRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFFXZWJQbHVnaW5JbmZvOjptaW1lVHlwZXMpOgorICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1F0LmNwcDoKKyAgICAgICAg
KFBsYXRmb3JtU3RyYXRlZ2llc1F0OjpnZXRQbHVnaW5JbmZvKToKKwogMjAxMi0wNy0yNyAgQ3Nh
YmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3JnPgogCiAgICAgICAgIFtRdF1bV0syXSBS
RUdSRVNTSU9OKHIxMTkxMjcpOiByZXNldHRpbmcgd2luZG93LmludGVybmFscyBzZXR0aW5ncyBi
ZXR3ZWVuIHRlc3RzIGRvZXNuJ3Qgd29yayBwcm9wZXJseQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC93aW4vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCmluZGV4IDg2
OTQyY2E2YWQ0YjUxYjZkOGJhYmNkYzY5ZDAyNWYxNmFkMjM2NTUuLjMxMmRlMGUxNWZkNzcwNjIw
MmI2ODUyOTEyZmEyMDRkMWQ1NTdlZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOCBA
QAorMjAxMi0wNy0zMCAgQ2FpbyBNYXJjZWxvIGRlIE9saXZlaXJhIEZpbGhvICA8Y2Fpby5vbGl2
ZWlyYUBvcGVuYm9zc2Eub3JnPgorCisgICAgICAgIFJlbmFtZSBmaXJzdC9zZWNvbmQgdG8ga2V5
L3ZhbHVlIGluIEhhc2hNYXAgaXRlcmF0b3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD04Mjc4NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogQ09NUHJvcGVydHlCYWcuaDoKKyAgICAgICAgKDo6UmVhZCk6
CisgICAgICAgICg6OkdldFByb3BlcnR5SW5mbyk6CisgICAgICAgICogV2ViQ29yZVN0YXRpc3Rp
Y3MuY3BwOgorICAgICAgICAoV2ViQ29yZVN0YXRpc3RpY3M6OmphdmFTY3JpcHRQcm90ZWN0ZWRP
YmplY3RUeXBlQ291bnRzKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0
cmF0ZWdpZXMuY3BwOgorICAgICAgICAoV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpnZXRQbHVnaW5J
bmZvKToKKyAgICAgICAgKiBXZWJIaXN0b3J5LmNwcDoKKyAgICAgICAgKFdlYkhpc3Rvcnk6OnJl
bW92ZUl0ZW1Gcm9tRGF0ZUNhY2hlcyk6CisgICAgICAgICogV2ViS2l0Q09NQVBJLmNwcDoKKyAg
ICAgICAgKGNsYXNzRmFjdG9yeSk6CisgICAgICAgICogV2ViS2l0U3RhdGlzdGljcy5jcHA6Cisg
ICAgICAgIChXZWJLaXRTdGF0aXN0aWNzOjpjb21DbGFzc05hbWVDb3VudHMpOgorICAgICAgICAq
IFdlYk5vdGlmaWNhdGlvbkNlbnRlci5jcHA6CisgICAgICAgIChXZWJOb3RpZmljYXRpb25DZW50
ZXI6OnBvc3ROb3RpZmljYXRpb25JbnRlcm5hbCk6CisgICAgICAgIChXZWJOb3RpZmljYXRpb25D
ZW50ZXI6OmFkZE9ic2VydmVyKToKKyAgICAgICAgKFdlYk5vdGlmaWNhdGlvbkNlbnRlcjo6cmVt
b3ZlT2JzZXJ2ZXIpOgorCiAyMDEyLTA3LTI2ICBHeXV5b3VuZyBLaW0gIDxneXV5b3VuZy5raW1A
c2Ftc3VuZy5jb20+CiAKICAgICAgICAgW01hY10gRml4IGJ1aWxkIGJyZWFrIG9uIEFwcGxlIHdp
biBib3QgYWZ0ZXIgcjEyMzcxMQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW5jZS9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViS2l0L3dpbmNlL0NoYW5nZUxvZwppbmRleCAxYjgxYjg1NDkwYzdi
NzQ0NjI2ZGYyNDY4ZDUyMTA4YmU1NDg2N2U4Li4yZWFmOTNhYzg0NWZjMDkxODcwZjMyNjdlMzMw
M2IxNTQ5OWRlYmE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbmNlL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0L3dpbmNlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDEy
LTA3LTMwICBDYWlvIE1hcmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gIDxjYWlvLm9saXZlaXJhQG9w
ZW5ib3NzYS5vcmc+CisKKyAgICAgICAgUmVuYW1lIGZpcnN0L3NlY29uZCB0byBrZXkvdmFsdWUg
aW4gSGFzaE1hcCBpdGVyYXRvcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTgyNzg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5jcHA6
CisgICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6Z2V0UGx1Z2luSW5mbyk6CisKIDIw
MTItMDctMjMgIFBpZXJyZSBSb3NzaSAgPHBpZXJyZS5yb3NzaUBnbWFpbC5jb20+CiAKICAgICAg
ICAgVW5pZnkgbnVtVG91Y2hFdmVudEhhbmRsZXJzQ2hhbmdlZCBhbmQgbmVlZFRvdWNoRXZlbnRz
IGluIHRoZSBjaHJvbWUgY2xpZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMGZlN2Y3ZmQ2MjdhN2I4MDViNDI5
OWQ0NDUwY2ZlYTY1NGMwMzFiZS4uZTcyMWFiNTE1Yjk0ZWRkNDliZmE0YWQ2NTY0ZjVkYTZjMjUz
ZTljZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyNSBAQAorMjAxMi0wNy0zMCAgQ2FpbyBNYXJj
ZWxvIGRlIE9saXZlaXJhIEZpbGhvICA8Y2Fpby5vbGl2ZWlyYUBvcGVuYm9zc2Eub3JnPgorCisg
ICAgICAgIFJlbmFtZSBmaXJzdC9zZWNvbmQgdG8ga2V5L3ZhbHVlIGluIEhhc2hNYXAgaXRlcmF0
b3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Mjc4
NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogUGxh
dGZvcm0vQ29yZUlQQy9Bcmd1bWVudENvZGVycy5oOgorICAgICAgICAqIFBsYXRmb3JtL0NvcmVJ
UEMvQ29ubmVjdGlvbi5jcHA6CisgICAgICAgIChDb3JlSVBDOjpDb25uZWN0aW9uOjpTeW5jTWVz
c2FnZVN0YXRlOjpnZXRPckNyZWF0ZSk6CisgICAgICAgIChDb3JlSVBDOjpDb25uZWN0aW9uOjp3
YWl0Rm9yTWVzc2FnZSk6CisgICAgICAgIChDb3JlSVBDOjpDb25uZWN0aW9uOjpwcm9jZXNzSW5j
b21pbmdNZXNzYWdlKToKKyAgICAgICAgKiBQbGF0Zm9ybS9ndGsvV29ya1F1ZXVlR3RrLmNwcDoK
KyAgICAgICAgKFdvcmtRdWV1ZTo6cmVnaXN0ZXJFdmVudFNvdXJjZUhhbmRsZXIpOgorICAgICAg
ICAoV29ya1F1ZXVlOjp1bnJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKToKKyAgICAgICAgKiBQ
bGF0Zm9ybS9tYWMvV29ya1F1ZXVlTWFjLmNwcDoKKyAgICAgICAgKFdvcmtRdWV1ZTo6dW5yZWdp
c3Rlck1hY2hQb3J0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKiBTaGFyZWQvUGx1Z2lucy9OUFJl
bW90ZU9iamVjdE1hcC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5QUmVtb3RlT2JqZWN0TWFwOjpw
bHVnaW5EZXN0cm95ZWQpOgorICAgICAgICAqIFNoYXJlZC9Vc2VyTWVzc2FnZUNvZGVycy5oOgor
ICAgICAgICAoV2ViS2l0OjpVc2VyTWVzc2FnZUVuY29kZXI6OmJhc2VFbmNvZGUpOgorICAgICAg
ICAqIFNoYXJlZC9XZWJJbnRlbnREYXRhLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViSW50ZW50
RGF0YTo6ZXh0cmFzKToKKyAgICAgICAgKiBTaGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5jcHA6
CisgICAgICAgIChXZWJLaXQ6OnZhbHVlRm9yS2V5KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJl
ZmVyZW5jZXNTdG9yZTo6Z2V0Qm9vbFZhbHVlRm9yS2V5KToKKyAgICAgICAgKiBTaGFyZWQvbWFj
L1dlYkNvcmVBcmd1bWVudENvZGVyc01hYy5tbToKKyAgICAgICAgKENvcmVJUEM6Ojo6ZGVjb2Rl
KToKKyAgICAgICAgKiBTaGFyZWQvcXQvQXJndW1lbnRDb2RlcnNRdC5jcHA6CisgICAgICAgIChD
b3JlSVBDOjo6OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL3NvdXAvV2ViQ29yZUFyZ3VtZW50
Q29kZXJzU291cC5jcHA6CisgICAgICAgIChDb3JlSVBDOjo6OmRlY29kZSk6CisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwOgorICAgICAgICAoX0V3a19Db250ZXh0
Ojp+X0V3a19Db250ZXh0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5j
cHA6CisgICAgICAgIChfZXdrX3ZpZXdfcHJpdl9sb2FkaW5nX3Jlc291cmNlc19jbGVhcik6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHA6CisgICAgICAgICh3
ZWJraXRfd2ViX3ZpZXdfZ2V0X3N1YnJlc291cmNlcyk6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwOgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VD
b250YWluZXJGb3JhbGwpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dLUHJpbnRpbmdW
aWV3Lm1tOgorICAgICAgICAoLVtXS1ByaW50aW5nVmlldyBfZXhwZWN0ZWRQcmV2aWV3Q2FsbGJh
Y2tGb3JSZWN0Ol0pOgorICAgICAgICAocGFnZURpZERyYXdUb1BERik6CisgICAgICAgICgtW1dL
UHJpbnRpbmdWaWV3IF9kcmF3UHJldmlldzpdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21h
Yy9XS1ZpZXcubW06CisgICAgICAgIChjb21tYW5kTmFtZUZvclNlbGVjdG9yKToKKyAgICAgICAg
KC1bV0tWaWV3IHZhbGlkYXRlVXNlckludGVyZmFjZUl0ZW06XSk6CisgICAgICAgICogVUlQcm9j
ZXNzL0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5OjppbnZh
bGlkYXRlUmVxdWVzdHMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvV2Vi
SW5zcGVjdG9yU2VydmVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yU2VydmVy
Ojp+V2ViSW5zcGVjdG9yU2VydmVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yU2Vy
dmVyOjpyZWdpc3RlclBhZ2UpOgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIv
V2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbi5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlNvY2tl
dFNlcnZlckNvbm5lY3Rpb246OnNlbmRIVFRQUmVzcG9uc2VIZWFkZXIpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvcXQvV2ViSW5zcGVjdG9yU2VydmVyUXQuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JTZXJ2ZXI6OmJ1aWxkUGFnZUxpc3QpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5LmNwcDoKKyAgICAgICAgKFdl
YktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6dXBkYXRlVGlsZUZvckxheWVyKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvTm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb25QZXJtaXNzaW9uUmVx
dWVzdE1hbmFnZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5vdGlmaWNhdGlvblBlcm1p
c3Npb25SZXF1ZXN0TWFuYWdlclByb3h5OjppbnZhbGlkYXRlUmVxdWVzdHMpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NQcm94eS5jcHA6CisgICAgICAgIChXZWJL
aXQ6OlBsdWdpblByb2Nlc3NQcm94eTo6cGx1Z2luUHJvY2Vzc0NyYXNoZWRPckZhaWxlZFRvTGF1
bmNoKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJL
aXQ6OmNyZWF0ZURpY3Rpb25hcnlGcm9tSGFzaE1hcCk6CisgICAgICAgICogVUlQcm9jZXNzL1dl
Ykljb25EYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkljb25EYXRhYmFzZTo6ZGlk
RmluaXNoVVJMSW1wb3J0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVy
ZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVSZW5kZXJlcjo6YWRqdXN0UG9z
aXRpb25Gb3JGaXhlZExheWVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVJlbmRl
cmVyOjpzeW5jQ2FudmFzKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXI6
OnNldExheWVyQ2hpbGRyZW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVSZW5kZXJl
cjo6c2V0TGF5ZXJGaWx0ZXJzKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlUmVuZGVy
ZXI6OnNldExheWVyU3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVSZW5kZXJl
cjo6YXNzaWduSW1hZ2VUb0xheWVyKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1By
b3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpjaGVja1VSTFJlY2Vp
dmVkRnJvbVdlYlByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OmFk
ZEJhY2tGb3J3YXJkSXRlbSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6ZnJh
bWVDb3VudEluUGFnZSk6CisgICAgICAgICogVUlQcm9jZXNzL3RleG1hcC9MYXllckJhY2tpbmdT
dG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkxheWVyQmFja2luZ1N0b3JlOjp1cGRhdGVUaWxl
KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJCYWNraW5nU3RvcmU6OnRleHR1cmUpOgorICAgICAg
ICAoV2ViS2l0OjpMYXllckJhY2tpbmdTdG9yZTo6cGFpbnRUb1RleHR1cmVNYXBwZXIpOgorICAg
ICAgICAoV2ViS2l0OjpMYXllckJhY2tpbmdTdG9yZTo6Y29tbWl0VGlsZU9wZXJhdGlvbnMpOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvR2VvbG9jYXRpb24vR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVx
dWVzdE1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpHZW9sb2NhdGlvblBlcm1pc3Npb25S
ZXF1ZXN0TWFuYWdlcjo6Y2FuY2VsUmVxdWVzdEZvckdlb2xvY2F0aW9uKToKKyAgICAgICAgKFdl
YktpdDo6R2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXI6OmRpZFJlY2VpdmVHZW9s
b2NhdGlvblBlcm1pc3Npb25EZWNpc2lvbik6CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6SW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlOjpnZXRPckNyZWF0ZSk6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5jcHA6
CisgICAgICAgIChXZWJLaXQ6OkluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OmdldE9yQ3JlYXRl
KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL05vdGlmaWNhdGlvbnMvV2ViTm90aWZpY2F0aW9uTWFu
YWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYk5vdGlmaWNhdGlvbk1hbmFnZXI6OnBvbGlj
eUZvck9yaWdpbik6CisgICAgICAgIChXZWJLaXQ6OldlYk5vdGlmaWNhdGlvbk1hbmFnZXI6OnNo
b3cpOgorICAgICAgICAoV2ViS2l0OjpXZWJOb3RpZmljYXRpb25NYW5hZ2VyOjpjbGVhck5vdGlm
aWNhdGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJOb3RpZmljYXRpb25NYW5hZ2VyOjpyZW1v
dmVOb3RpZmljYXRpb25Gcm9tQ29udGV4dE1hcCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVn
aW5zL05ldHNjYXBlL05QUnVudGltZU9iamVjdE1hcC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5Q
UnVudGltZU9iamVjdE1hcDo6aW52YWxpZGF0ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVn
aW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0c2Nh
cGVQbHVnaW46OmRlc3Ryb3lTdHJlYW0pOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdp
bjo6dW5zY2hlZHVsZVRpbWVyKToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW46OmZy
YW1lRGlkRmluaXNoTG9hZGluZyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luOjpm
cmFtZURpZEZhaWwpOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6YnVpbGRIVFRQSGVhZGVycyk6CisgICAgICAgIChXZWJLaXQ6
OlBsdWdpblZpZXc6On5QbHVnaW5WaWV3KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
TGF5ZXJUcmVlQ29vcmRpbmF0b3IvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3BwOgorICAgICAgICAo
V2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6YWRvcHRJbWFnZUJhY2tpbmdTdG9yZSk6Cisg
ICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpyZWxlYXNlSW1hZ2VCYWNraW5n
U3RvcmUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVDb29yZGluYXRv
ci9XZWJHcmFwaGljc0xheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5
ZXI6OmxheWVyQnlJRCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3
YXJkTGlzdFByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQmFja0ZvcndhcmRMaXN0UHJv
eHk6OnJlbW92ZUl0ZW0pOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFn
ZU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6Y29tbWFuZE5hbWVGb3JTZWxlY3Rvck5hbWUpOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YlByb2Nlc3M6OnZpc2l0ZWRMaW5rU3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzczo6YWxsVmlzaXRlZExpbmtTdGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzOjpmb2N1c2VkV2ViUGFnZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6
OmNyZWF0ZVdlYlBhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjp3ZWJQYWdlR3Jv
dXApOgorICAgICAgICAoV2ViS2l0Ojpmcm9tQ291bnRlZFNldFRvSGFzaE1hcCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlByb2Nlc3M6OnNldFRleHRDaGVja2VyU3RhdGUpOgorCiAyMDEyLTA3LTMw
ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBV
bnJldmlld2VkLCByb2xsaW5nIG91dCByMTIzOTY2IGFuZCByMTIzOTY3LgpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAppbmRleCAyYzNlMGU4NTlmMTZlODk1
ODFhMmZhMzU2Yjg0OTJmMjAzNzkyMDdkLi44ODg2ZjExMTUwNGVkZGYyNzJjYzg4NzZmMDRmYzA1
YTRjODI4MGM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJh
Y2tPYmplY3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmpl
Y3QuaApAQCAtODMsMTMgKzgzLDEzIEBAIHN0cnVjdCBKU0NhbGxiYWNrT2JqZWN0RGF0YSA6IFdl
YWtIYW5kbGVPd25lciB7CiAgICAgICAgICAgICBQcml2YXRlUHJvcGVydHlNYXA6OmNvbnN0X2l0
ZXJhdG9yIGxvY2F0aW9uID0gbV9wcm9wZXJ0eU1hcC5maW5kKHByb3BlcnR5TmFtZS5pbXBsKCkp
OwogICAgICAgICAgICAgaWYgKGxvY2F0aW9uID09IG1fcHJvcGVydHlNYXAuZW5kKCkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKLSAgICAgICAgICAgIHJldHVybiBsb2NhdGlv
bi0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgcmV0dXJuIGxvY2F0aW9uLT52YWx1ZS5nZXQo
KTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgdm9pZCBzZXRQcml2YXRlUHJvcGVydHko
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0NlbGwqIG93bmVyLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIFdy
aXRlQmFycmllcjxVbmtub3duPiBlbXB0eTsKLSAgICAgICAgICAgIG1fcHJvcGVydHlNYXAuYWRk
KHByb3BlcnR5TmFtZS5pbXBsKCksIGVtcHR5KS5pdGVyYXRvci0+c2Vjb25kLnNldChnbG9iYWxE
YXRhLCBvd25lciwgdmFsdWUpOworICAgICAgICAgICAgbV9wcm9wZXJ0eU1hcC5hZGQocHJvcGVy
dHlOYW1lLmltcGwoKSwgZW1wdHkpLml0ZXJhdG9yLT52YWx1ZS5zZXQoZ2xvYmFsRGF0YSwgb3du
ZXIsIHZhbHVlKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgdm9pZCBkZWxldGVQcml2
YXRlUHJvcGVydHkoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQpAQCAtMTAwLDggKzEw
MCw4IEBAIHN0cnVjdCBKU0NhbGxiYWNrT2JqZWN0RGF0YSA6IFdlYWtIYW5kbGVPd25lciB7CiAg
ICAgICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICAgICAg
ewogICAgICAgICAgICAgZm9yIChQcml2YXRlUHJvcGVydHlNYXA6Oml0ZXJhdG9yIHB0ciA9IG1f
cHJvcGVydHlNYXAuYmVnaW4oKTsgcHRyICE9IG1fcHJvcGVydHlNYXAuZW5kKCk7ICsrcHRyKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKHB0ci0+c2Vjb25kKQotICAgICAgICAgICAgICAgICAgICB2
aXNpdG9yLmFwcGVuZCgmcHRyLT5zZWNvbmQpOworICAgICAgICAgICAgICAgIGlmIChwdHItPnZh
bHVlKQorICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgmcHRyLT52YWx1ZSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAppbmRleCAxNjBmNDg4ODdiODcyYzI5
YmMzZTJhZGJlZGM5MWVmYWZjZDRkOTM5Li4yY2FlMjFjNTJhODhhOGIyMmY1YzNmMzYwMzQ1YmRm
MDJlYjc5NWYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJh
Y2tPYmplY3RGdW5jdGlvbnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2Fs
bGJhY2tPYmplY3RGdW5jdGlvbnMuaApAQCAtNDY1LDggKzQ2NSw4IEBAIHZvaWQgSlNDYWxsYmFj
a09iamVjdDxQYXJlbnQ+OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4
ZWNTdGF0ZSoKICAgICAgICAgICAgIHR5cGVkZWYgT3BhcXVlSlNDbGFzc1N0YXRpY1ZhbHVlc1Rh
YmxlOjpjb25zdF9pdGVyYXRvciBpdGVyYXRvcjsKICAgICAgICAgICAgIGl0ZXJhdG9yIGVuZCA9
IHN0YXRpY1ZhbHVlcy0+ZW5kKCk7CiAgICAgICAgICAgICBmb3IgKGl0ZXJhdG9yIGl0ID0gc3Rh
dGljVmFsdWVzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgICAgICBT
dHJpbmdJbXBsKiBuYW1lID0gaXQtPmZpcnN0LmdldCgpOwotICAgICAgICAgICAgICAgIFN0YXRp
Y1ZhbHVlRW50cnkqIGVudHJ5ID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgICAgICBT
dHJpbmdJbXBsKiBuYW1lID0gaXQtPmtleS5nZXQoKTsKKyAgICAgICAgICAgICAgICBTdGF0aWNW
YWx1ZUVudHJ5KiBlbnRyeSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgICAgICBpZiAo
ZW50cnktPmdldFByb3BlcnR5ICYmICghKGVudHJ5LT5hdHRyaWJ1dGVzICYga0pTUHJvcGVydHlB
dHRyaWJ1dGVEb250RW51bSkgfHwgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykp
KQogICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyKGV4ZWMs
IG5hbWUpKTsKICAgICAgICAgICAgIH0KQEAgLTQ3Niw4ICs0NzYsOCBAQCB2b2lkIEpTQ2FsbGJh
Y2tPYmplY3Q8UGFyZW50Pjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBF
eGVjU3RhdGUqCiAgICAgICAgICAgICB0eXBlZGVmIE9wYXF1ZUpTQ2xhc3NTdGF0aWNGdW5jdGlv
bnNUYWJsZTo6Y29uc3RfaXRlcmF0b3IgaXRlcmF0b3I7CiAgICAgICAgICAgICBpdGVyYXRvciBl
bmQgPSBzdGF0aWNGdW5jdGlvbnMtPmVuZCgpOwogICAgICAgICAgICAgZm9yIChpdGVyYXRvciBp
dCA9IHN0YXRpY0Z1bmN0aW9ucy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAg
ICAgICAgICAgU3RyaW5nSW1wbCogbmFtZSA9IGl0LT5maXJzdC5nZXQoKTsKLSAgICAgICAgICAg
ICAgICBTdGF0aWNGdW5jdGlvbkVudHJ5KiBlbnRyeSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAg
ICAgICAgICAgICAgU3RyaW5nSW1wbCogbmFtZSA9IGl0LT5rZXkuZ2V0KCk7CisgICAgICAgICAg
ICAgICAgU3RhdGljRnVuY3Rpb25FbnRyeSogZW50cnkgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAg
ICAgICAgICAgICAgaWYgKCEoZW50cnktPmF0dHJpYnV0ZXMgJiBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZURvbnRFbnVtKSB8fCAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKSkKICAgICAg
ICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihleGVjLCBuYW1lKSk7
CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
Q2xhc3NSZWYuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NsYXNzUmVmLmNwcApp
bmRleCAxMzQ0MzE2NTQ3ODkxNWY4YTEzYTRkYmQzODA0NDFlZDI0YmM0ZDJkLi45NjVlZWRkNGYx
Yjg2ZGFkYjM0ZTY0YmViMDM4N2FkYzMwMTIwYzZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTQ2xhc3NSZWYuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNDbGFzc1JlZi5jcHAKQEAgLTEwNywxMyArMTA3LDEzIEBAIE9wYXF1ZUpTQ2xhc3M6On5P
cGFxdWVKU0NsYXNzKCkKICAgICBpZiAobV9zdGF0aWNWYWx1ZXMpIHsKICAgICAgICAgT3BhcXVl
SlNDbGFzc1N0YXRpY1ZhbHVlc1RhYmxlOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3N0YXRpY1Zh
bHVlcy0+ZW5kKCk7CiAgICAgICAgIGZvciAoT3BhcXVlSlNDbGFzc1N0YXRpY1ZhbHVlc1RhYmxl
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fc3RhdGljVmFsdWVzLT5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpCi0gICAgICAgICAgICBBU1NFUlQoIWl0LT5maXJzdC0+aXNJZGVudGlmaWVyKCkpOwor
ICAgICAgICAgICAgQVNTRVJUKCFpdC0+a2V5LT5pc0lkZW50aWZpZXIoKSk7CiAgICAgfQogCiAg
ICAgaWYgKG1fc3RhdGljRnVuY3Rpb25zKSB7CiAgICAgICAgIE9wYXF1ZUpTQ2xhc3NTdGF0aWNG
dW5jdGlvbnNUYWJsZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9zdGF0aWNGdW5jdGlvbnMtPmVu
ZCgpOwogICAgICAgICBmb3IgKE9wYXF1ZUpTQ2xhc3NTdGF0aWNGdW5jdGlvbnNUYWJsZTo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtX3N0YXRpY0Z1bmN0aW9ucy0+YmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KQotICAgICAgICAgICAgQVNTRVJUKCFpdC0+Zmlyc3QtPmlzSWRlbnRpZmllcigpKTsKKyAg
ICAgICAgICAgIEFTU0VSVCghaXQtPmtleS0+aXNJZGVudGlmaWVyKCkpOwogICAgIH0KICNlbmRp
ZgogICAgIApAQCAtMTQ3LDggKzE0Nyw4IEBAIE9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YTo6T3Bh
cXVlSlNDbGFzc0NvbnRleHREYXRhKEpTQzo6SlNHbG9iYWxEYXRhJiwgT3BhcXVlSlNDCiAgICAg
ICAgIHN0YXRpY1ZhbHVlcyA9IGFkb3B0UHRyKG5ldyBPcGFxdWVKU0NsYXNzU3RhdGljVmFsdWVz
VGFibGUpOwogICAgICAgICBPcGFxdWVKU0NsYXNzU3RhdGljVmFsdWVzVGFibGU6OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IGpzQ2xhc3MtPm1fc3RhdGljVmFsdWVzLT5lbmQoKTsKICAgICAgICAgZm9y
IChPcGFxdWVKU0NsYXNzU3RhdGljVmFsdWVzVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0ganND
bGFzcy0+bV9zdGF0aWNWYWx1ZXMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAg
ICAgICAgQVNTRVJUKCFpdC0+Zmlyc3QtPmlzSWRlbnRpZmllcigpKTsKLSAgICAgICAgICAgIHN0
YXRpY1ZhbHVlcy0+YWRkKFN0cmluZ0ltcGw6OmNyZWF0ZShpdC0+Zmlyc3QtPmNoYXJhY3RlcnMo
KSwgaXQtPmZpcnN0LT5sZW5ndGgoKSksIGFkb3B0UHRyKG5ldyBTdGF0aWNWYWx1ZUVudHJ5KGl0
LT5zZWNvbmQtPmdldFByb3BlcnR5LCBpdC0+c2Vjb25kLT5zZXRQcm9wZXJ0eSwgaXQtPnNlY29u
ZC0+YXR0cmlidXRlcykpKTsKKyAgICAgICAgICAgIEFTU0VSVCghaXQtPmtleS0+aXNJZGVudGlm
aWVyKCkpOworICAgICAgICAgICAgc3RhdGljVmFsdWVzLT5hZGQoU3RyaW5nSW1wbDo6Y3JlYXRl
KGl0LT5rZXktPmNoYXJhY3RlcnMoKSwgaXQtPmtleS0+bGVuZ3RoKCkpLCBhZG9wdFB0cihuZXcg
U3RhdGljVmFsdWVFbnRyeShpdC0+dmFsdWUtPmdldFByb3BlcnR5LCBpdC0+dmFsdWUtPnNldFBy
b3BlcnR5LCBpdC0+dmFsdWUtPmF0dHJpYnV0ZXMpKSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAg
LTE1NiwxNSArMTU2LDE1IEBAIE9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YTo6T3BhcXVlSlNDbGFz
c0NvbnRleHREYXRhKEpTQzo6SlNHbG9iYWxEYXRhJiwgT3BhcXVlSlNDCiAgICAgICAgIHN0YXRp
Y0Z1bmN0aW9ucyA9IGFkb3B0UHRyKG5ldyBPcGFxdWVKU0NsYXNzU3RhdGljRnVuY3Rpb25zVGFi
bGUpOwogICAgICAgICBPcGFxdWVKU0NsYXNzU3RhdGljRnVuY3Rpb25zVGFibGU6OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IGpzQ2xhc3MtPm1fc3RhdGljRnVuY3Rpb25zLT5lbmQoKTsKICAgICAgICAg
Zm9yIChPcGFxdWVKU0NsYXNzU3RhdGljRnVuY3Rpb25zVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0ganNDbGFzcy0+bV9zdGF0aWNGdW5jdGlvbnMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewotICAgICAgICAgICAgQVNTRVJUKCFpdC0+Zmlyc3QtPmlzSWRlbnRpZmllcigpKTsKLSAgICAg
ICAgICAgIHN0YXRpY0Z1bmN0aW9ucy0+YWRkKFN0cmluZ0ltcGw6OmNyZWF0ZShpdC0+Zmlyc3Qt
PmNoYXJhY3RlcnMoKSwgaXQtPmZpcnN0LT5sZW5ndGgoKSksIGFkb3B0UHRyKG5ldyBTdGF0aWNG
dW5jdGlvbkVudHJ5KGl0LT5zZWNvbmQtPmNhbGxBc0Z1bmN0aW9uLCBpdC0+c2Vjb25kLT5hdHRy
aWJ1dGVzKSkpOworICAgICAgICAgICAgQVNTRVJUKCFpdC0+a2V5LT5pc0lkZW50aWZpZXIoKSk7
CisgICAgICAgICAgICBzdGF0aWNGdW5jdGlvbnMtPmFkZChTdHJpbmdJbXBsOjpjcmVhdGUoaXQt
PmtleS0+Y2hhcmFjdGVycygpLCBpdC0+a2V5LT5sZW5ndGgoKSksIGFkb3B0UHRyKG5ldyBTdGF0
aWNGdW5jdGlvbkVudHJ5KGl0LT52YWx1ZS0+Y2FsbEFzRnVuY3Rpb24sIGl0LT52YWx1ZS0+YXR0
cmlidXRlcykpKTsKICAgICAgICAgfQogICAgIH0KIH0KIAogT3BhcXVlSlNDbGFzc0NvbnRleHRE
YXRhJiBPcGFxdWVKU0NsYXNzOjpjb250ZXh0RGF0YShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAg
T3duUHRyPE9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YT4mIGNvbnRleHREYXRhID0gZXhlYy0+Z2xv
YmFsRGF0YSgpLm9wYXF1ZUpTQ2xhc3NEYXRhLmFkZCh0aGlzLCBudWxscHRyKS5pdGVyYXRvci0+
c2Vjb25kOworICAgIE93blB0cjxPcGFxdWVKU0NsYXNzQ29udGV4dERhdGE+JiBjb250ZXh0RGF0
YSA9IGV4ZWMtPmdsb2JhbERhdGEoKS5vcGFxdWVKU0NsYXNzRGF0YS5hZGQodGhpcywgbnVsbHB0
cikuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghY29udGV4dERhdGEpCiAgICAgICAgIGNvbnRl
eHREYXRhID0gYWRvcHRQdHIobmV3IE9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YShleGVjLT5nbG9i
YWxEYXRhKCksIHRoaXMpKTsKICAgICByZXR1cm4gKmNvbnRleHREYXRhOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAppbmRleCA1Mzc0YTUzN2FiMzliZDkx
NjgyNmUxOTRkYzgzMzY1OGIyZWRkNjQwLi4yNjM5ZDcyZTc0ZTg2N2EwYTQyOTBiNzY3MjFmOGI5
ZjFiNTNjODAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcApAQCAtNjU2LDcgKzY1Niw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wKEV4ZWNTdGF0ZSog
ZXhlYykKICAgICAgICAgICAgIGRhdGFMb2coIiAgJTFkID0ge1xuIiwgaSk7CiAgICAgICAgICAg
ICBTdHJpbmdKdW1wVGFibGU6OlN0cmluZ09mZnNldFRhYmxlOjpjb25zdF9pdGVyYXRvciBlbmQg
PSBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbaV0ub2Zmc2V0VGFibGUuZW5k
KCk7CiAgICAgICAgICAgICBmb3IgKFN0cmluZ0p1bXBUYWJsZTo6U3RyaW5nT2Zmc2V0VGFibGU6
OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJs
ZXNbaV0ub2Zmc2V0VGFibGUuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikKLSAgICAgICAg
ICAgICAgICBkYXRhTG9nKCJcdFx0XCIlc1wiID0+ICUwNGRcbiIsIFVTdHJpbmcoaXRlci0+Zmly
c3QpLnV0ZjgoKS5kYXRhKCksIGl0ZXItPnNlY29uZC5icmFuY2hPZmZzZXQpOworICAgICAgICAg
ICAgICAgIGRhdGFMb2coIlx0XHRcIiVzXCIgPT4gJTA0ZFxuIiwgVVN0cmluZyhpdGVyLT5rZXkp
LnV0ZjgoKS5kYXRhKCksIGl0ZXItPnZhbHVlLmJyYW5jaE9mZnNldCk7CiAgICAgICAgICAgICBk
YXRhTG9nKCIgICAgICB9XG4iKTsKICAgICAgICAgICAgICsraTsKICAgICAgICAgfSB3aGlsZSAo
aSA8IG1fcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5zaXplKCkpOwpAQCAtMTg4
OSw3ICsxODg5LDcgQEAgdm9pZCBFdmFsQ29kZUNhY2hlOjp2aXNpdEFnZ3JlZ2F0ZShTbG90Vmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBFdmFsQ2FjaGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fY2Fj
aGVNYXAuZW5kKCk7CiAgICAgZm9yIChFdmFsQ2FjaGVNYXA6Oml0ZXJhdG9yIHB0ciA9IG1fY2Fj
aGVNYXAuYmVnaW4oKTsgcHRyICE9IGVuZDsgKytwdHIpCi0gICAgICAgIHZpc2l0b3IuYXBwZW5k
KCZwdHItPnNlY29uZCk7CisgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZwdHItPnZhbHVlKTsKIH0K
IAogdm9pZCBDb2RlQmxvY2s6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpA
QCAtMjk0Niw4ICsyOTQ2LDggQEAgVVN0cmluZyBDb2RlQmxvY2s6Om5hbWVGb3JSZWdpc3Rlcihp
bnQgcmVnaXN0ZXJOdW1iZXIpCiB7CiAgICAgU3ltYm9sVGFibGU6Oml0ZXJhdG9yIGVuZCA9IG1f
c3ltYm9sVGFibGUtPmVuZCgpOwogICAgIGZvciAoU3ltYm9sVGFibGU6Oml0ZXJhdG9yIHB0ciA9
IG1fc3ltYm9sVGFibGUtPmJlZ2luKCk7IHB0ciAhPSBlbmQ7ICsrcHRyKSB7Ci0gICAgICAgIGlm
IChwdHItPnNlY29uZC5nZXRJbmRleCgpID09IHJlZ2lzdGVyTnVtYmVyKQotICAgICAgICAgICAg
cmV0dXJuIFVTdHJpbmcocHRyLT5maXJzdCk7CisgICAgICAgIGlmIChwdHItPnZhbHVlLmdldElu
ZGV4KCkgPT0gcmVnaXN0ZXJOdW1iZXIpCisgICAgICAgICAgICByZXR1cm4gVVN0cmluZyhwdHIt
PmtleSk7CiAgICAgfQogICAgIGlmIChuZWVkc0FjdGl2YXRpb24oKSAmJiByZWdpc3Rlck51bWJl
ciA9PSBhY3RpdmF0aW9uUmVnaXN0ZXIoKSkKICAgICAgICAgcmV0dXJuICJhY3RpdmF0aW9uIjsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9KdW1wVGFibGUuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9KdW1wVGFibGUuaAppbmRleCA1YmJlMDQ3
MTA3ZjViMDFjMDI4OWJlYTMzMTg2ZTFmODRhM2FhZmM3Li42MDM2Y2RhNTFkNWJjZjU2NWVhZTk3
ZThkYjI2NTUxYzkwMjU1YzczIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvSnVtcFRhYmxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0p1
bXBUYWJsZS5oCkBAIC01Nyw3ICs1Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAg
U3RyaW5nT2Zmc2V0VGFibGU6OmNvbnN0X2l0ZXJhdG9yIGxvYyA9IG9mZnNldFRhYmxlLmZpbmQo
dmFsdWUpOwogICAgICAgICAgICAgaWYgKGxvYyA9PSBlbmQpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIGRlZmF1bHRPZmZzZXQ7Ci0gICAgICAgICAgICByZXR1cm4gbG9jLT5zZWNvbmQuYnJhbmNo
T2Zmc2V0OworICAgICAgICAgICAgcmV0dXJuIGxvYy0+dmFsdWUuYnJhbmNoT2Zmc2V0OwogICAg
ICAgICB9CiAKICNpZiBFTkFCTEUoSklUKQpAQCAtNjcsNyArNjcsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgICAgIFN0cmluZ09mZnNldFRhYmxlOjpjb25zdF9pdGVyYXRvciBsb2MgPSBv
ZmZzZXRUYWJsZS5maW5kKHZhbHVlKTsKICAgICAgICAgICAgIGlmIChsb2MgPT0gZW5kKQogICAg
ICAgICAgICAgICAgIHJldHVybiBjdGlEZWZhdWx0OwotICAgICAgICAgICAgcmV0dXJuIGxvYy0+
c2Vjb25kLmN0aU9mZnNldDsKKyAgICAgICAgICAgIHJldHVybiBsb2MtPnZhbHVlLmN0aU9mZnNl
dDsKICAgICAgICAgfQogI2VuZGlmCiAgICAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3BwCmluZGV4IDU5
ZjBkMDIzNDM0MTdhNzQxYmM4MjU3MzdkMjYxMTNjZGM3YTMyOTUuLmY5MjNlNGEyOGJiY2IwMDM5
YTUzNzNlOTZmODQ1MjNlNzljZWUwODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0xhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcApAQCAtODEsNyAr
ODEsNyBAQCBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZSogTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVQ
YXJzZXI6OmdldElmUHJlc2VudCgKICAgICBpZiAoaXRlciA9PSBtX21hcC5lbmQoKSkKICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgCi0gICAgcmV0dXJuIGl0ZXItPnNlY29uZDsKKyAgICByZXR1cm4g
aXRlci0+dmFsdWU7CiB9CiAKIFNwZWN1bGF0ZWRUeXBlIExhenlPcGVyYW5kVmFsdWVQcm9maWxl
UGFyc2VyOjpwcmVkaWN0aW9uKApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1NhbXBsaW5nVG9vbC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
U2FtcGxpbmdUb29sLmNwcAppbmRleCBmMDdkYzc5ZmI3ODI1OGQ4NjFkNGY0ODUxN2YxYjU1YjI5
NjM5NTNkLi5mOWI4MjQ1ZTU0NzdhOGYzMGVkNTIxYzMxMjZiZjAxOWQ1Y2IyZTY3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2FtcGxpbmdUb29sLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2FtcGxpbmdUb29sLmNwcApAQCAtNDEw
LDcgKzQxMCw3IEBAIHZvaWQgU2FtcGxpbmdUb29sOjpkdW1wKEV4ZWNTdGF0ZSogZXhlYykKICAg
ICBWZWN0b3I8U2NyaXB0U2FtcGxlUmVjb3JkKj4gY29kZUJsb2NrU2FtcGxlcyhzY29wZUNvdW50
KTsKICAgICBTY3JpcHRTYW1wbGVSZWNvcmRNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3Njb3BlU2Ft
cGxlTWFwLT5iZWdpbigpOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2NvcGVDb3VudDsgKytp
LCArK2l0ZXIpCi0gICAgICAgIGNvZGVCbG9ja1NhbXBsZXNbaV0gPSBpdGVyLT5zZWNvbmQuZ2V0
KCk7CisgICAgICAgIGNvZGVCbG9ja1NhbXBsZXNbaV0gPSBpdGVyLT52YWx1ZS5nZXQoKTsKIAog
ICAgIHFzb3J0KGNvZGVCbG9ja1NhbXBsZXMuYmVnaW4oKSwgc2NvcGVDb3VudCwgc2l6ZW9mKFNj
cmlwdFNhbXBsZVJlY29yZCopLCBjb21wYXJlU2NyaXB0U2FtcGxlUmVjb3Jkcyk7CiAKQEAgLTQ0
Niw4ICs0NDYsOCBAQCB2b2lkIFNhbXBsaW5nVG9vbDo6ZHVtcChFeGVjU3RhdGUqIGV4ZWMpCiAg
ICAgICAgICAgICAgICAgVmVjdG9yPExpbmVDb3VudEluZm8+IGxpbmVDb3VudEluZm8obGluZXND
b3VudCk7CiAgICAgICAgICAgICAgICAgaW50IGxpbmVubyA9IDA7CiAgICAgICAgICAgICAgICAg
Zm9yIChIYXNoTWFwPHVuc2lnbmVkLHVuc2lnbmVkPjo6aXRlcmF0b3IgaXRlciA9IGxpbmVDb3Vu
dHMuYmVnaW4oKTsgaXRlciAhPSBsaW5lQ291bnRzLmVuZCgpOyArK2l0ZXIsICsrbGluZW5vKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGxpbmVDb3VudEluZm9bbGluZW5vXS5saW5lID0gaXRlci0+
Zmlyc3Q7Ci0gICAgICAgICAgICAgICAgICAgIGxpbmVDb3VudEluZm9bbGluZW5vXS5jb3VudCA9
IGl0ZXItPnNlY29uZDsKKyAgICAgICAgICAgICAgICAgICAgbGluZUNvdW50SW5mb1tsaW5lbm9d
LmxpbmUgPSBpdGVyLT5rZXk7CisgICAgICAgICAgICAgICAgICAgIGxpbmVDb3VudEluZm9bbGlu
ZW5vXS5jb3VudCA9IGl0ZXItPnZhbHVlOwogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAg
ICAgICAgIHFzb3J0KGxpbmVDb3VudEluZm8uYmVnaW4oKSwgbGluZXNDb3VudCwgc2l6ZW9mKExp
bmVDb3VudEluZm8pLCBjb21wYXJlTGluZUNvdW50SW5mb1NhbXBsaW5nKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5j
cHAKaW5kZXggMzNmMjgyYzY2NDY1NjA5NDMzOWE0ZjY2NjM1NGExMWQ4YjYyMjc3Ni4uZWVjOWQ2
NTgzZWY2MzFjZDQ2NjI0ZmYwOTU2YzM0Y2Q2NGIyZDlkNiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKQEAg
LTIxMiw3ICsyMTIsNyBAQCBib29sIEJ5dGVjb2RlR2VuZXJhdG9yOjphZGRWYXIoY29uc3QgSWRl
bnRpZmllciYgaWRlbnQsIGJvb2wgaXNDb25zdGFudCwgUmVnaXN0ZQogICAgIFN5bWJvbFRhYmxl
OjpBZGRSZXN1bHQgcmVzdWx0ID0gc3ltYm9sVGFibGUoKS5hZGQoaWRlbnQuaW1wbCgpLCBuZXdF
bnRyeSk7CiAKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIHIwID0gJnJl
Z2lzdGVyRm9yKHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLmdldEluZGV4KCkpOworICAgICAgICBy
MCA9ICZyZWdpc3RlckZvcihyZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldEluZGV4KCkpOwogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0yMzAsOCArMjMwLDggQEAgaW50IEJ5dGVj
b2RlR2VuZXJhdG9yOjphZGRHbG9iYWxWYXIoCiAgICAgICAgIG5ld0VudHJ5LmF0dGVtcHRUb1dh
dGNoKCk7CiAgICAgU3ltYm9sVGFibGU6OkFkZFJlc3VsdCByZXN1bHQgPSBzeW1ib2xUYWJsZSgp
LmFkZChpZGVudC5pbXBsKCksIG5ld0VudHJ5KTsKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5
KSB7Ci0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLm5vdGlmeVdyaXRlKCk7Ci0gICAg
ICAgIGluZGV4ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQuZ2V0SW5kZXgoKTsKKyAgICAgICAg
cmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5ub3RpZnlXcml0ZSgpOworICAgICAgICBpbmRleCA9IHJl
c3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0SW5kZXgoKTsKICAgICB9CiAgICAgcmV0dXJuIGluZGV4
OwogfQpAQCAtMTAzNiw3ICsxMDM2LDcgQEAgdW5zaWduZWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmFk
ZENvbnN0YW50KGNvbnN0IElkZW50aWZpZXImIGlkZW50KQogICAgIGlmIChyZXN1bHQuaXNOZXdF
bnRyeSkKICAgICAgICAgbV9jb2RlQmxvY2stPmFkZElkZW50aWZpZXIoSWRlbnRpZmllcihtX2ds
b2JhbERhdGEsIHJlcCkpOwogCi0gICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOwor
ICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogfQogCiBSZWdpc3RlcklEKiBCeXRl
Y29kZUdlbmVyYXRvcjo6YWRkQ29uc3RhbnRWYWx1ZShKU1ZhbHVlIHYpCkBAIC0xMDQ5LDcgKzEw
NDksNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6YWRkQ29uc3RhbnRWYWx1ZShK
U1ZhbHVlIHYpCiAgICAgICAgICsrbV9uZXh0Q29uc3RhbnRPZmZzZXQ7CiAgICAgICAgIG1fY29k
ZUJsb2NrLT5hZGRDb25zdGFudChKU1ZhbHVlKHYpKTsKICAgICB9IGVsc2UKLSAgICAgICAgaW5k
ZXggPSByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgaW5kZXggPSByZXN1bHQuaXRl
cmF0b3ItPnZhbHVlOwogCiAgICAgcmV0dXJuICZtX2NvbnN0YW50UG9vbFJlZ2lzdGVyc1tpbmRl
eF07CiB9CkBAIC0xMTk2LDcgKzExOTYsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdExvYWQoUmVnaXN0ZXJJRCogZHN0LCBkb3VibGUgbnVtYmVyKQogICAgIC8vIHdvcmsg
Y29ycmVjdGx5IHdpdGggTmFOIGFzIGEga2V5LgogICAgIGlmIChpc25hbihudW1iZXIpIHx8IG51
bWJlciA9PSBIYXNoVHJhaXRzPGRvdWJsZT46OmVtcHR5VmFsdWUoKSB8fCBIYXNoVHJhaXRzPGRv
dWJsZT46OmlzRGVsZXRlZFZhbHVlKG51bWJlcikpCiAgICAgICAgIHJldHVybiBlbWl0TG9hZChk
c3QsIGpzTnVtYmVyKG51bWJlcikpOwotICAgIEpTVmFsdWUmIHZhbHVlSW5NYXAgPSBtX251bWJl
ck1hcC5hZGQobnVtYmVyLCBKU1ZhbHVlKCkpLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgSlNWYWx1
ZSYgdmFsdWVJbk1hcCA9IG1fbnVtYmVyTWFwLmFkZChudW1iZXIsIEpTVmFsdWUoKSkuaXRlcmF0
b3ItPnZhbHVlOwogICAgIGlmICghdmFsdWVJbk1hcCkKICAgICAgICAgdmFsdWVJbk1hcCA9IGpz
TnVtYmVyKG51bWJlcik7CiAgICAgcmV0dXJuIGVtaXRMb2FkKGRzdCwgdmFsdWVJbk1hcCk7CkBA
IC0xMjA0LDcgKzEyMDQsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdExv
YWQoUmVnaXN0ZXJJRCogZHN0LCBkb3VibGUgbnVtYmVyKQogCiBSZWdpc3RlcklEKiBCeXRlY29k
ZUdlbmVyYXRvcjo6ZW1pdExvYWQoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBJZGVudGlmaWVyJiBp
ZGVudGlmaWVyKQogewotICAgIEpTU3RyaW5nKiYgc3RyaW5nSW5NYXAgPSBtX3N0cmluZ01hcC5h
ZGQoaWRlbnRpZmllci5pbXBsKCksIDApLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgSlNTdHJpbmcq
JiBzdHJpbmdJbk1hcCA9IG1fc3RyaW5nTWFwLmFkZChpZGVudGlmaWVyLmltcGwoKSwgMCkuaXRl
cmF0b3ItPnZhbHVlOwogICAgIGlmICghc3RyaW5nSW5NYXApCiAgICAgICAgIHN0cmluZ0luTWFw
ID0ganNPd25lZFN0cmluZyhnbG9iYWxEYXRhKCksIGlkZW50aWZpZXIudXN0cmluZygpKTsKICAg
ICByZXR1cm4gZW1pdExvYWQoZHN0LCBKU1ZhbHVlKHN0cmluZ0luTWFwKSk7CkBAIC0xNzQyLDcg
KzE3NDIsNyBAQCB1bnNpZ25lZCBCeXRlY29kZUdlbmVyYXRvcjo6YWRkQ29uc3RhbnRCdWZmZXIo
dW5zaWduZWQgbGVuZ3RoKQogCiBKU1N0cmluZyogQnl0ZWNvZGVHZW5lcmF0b3I6OmFkZFN0cmlu
Z0NvbnN0YW50KGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIpCiB7Ci0gICAgSlNTdHJpbmcq
JiBzdHJpbmdJbk1hcCA9IG1fc3RyaW5nTWFwLmFkZChpZGVudGlmaWVyLmltcGwoKSwgMCkuaXRl
cmF0b3ItPnNlY29uZDsKKyAgICBKU1N0cmluZyomIHN0cmluZ0luTWFwID0gbV9zdHJpbmdNYXAu
YWRkKGlkZW50aWZpZXIuaW1wbCgpLCAwKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCFzdHJp
bmdJbk1hcCkgewogICAgICAgICBzdHJpbmdJbk1hcCA9IGpzU3RyaW5nKGdsb2JhbERhdGEoKSwg
aWRlbnRpZmllci51c3RyaW5nKCkpOwogICAgICAgICBhZGRDb25zdGFudFZhbHVlKHN0cmluZ0lu
TWFwKTsKQEAgLTE4MTQsOCArMTgxNCw4IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0TGF6eU5ld0Z1bmN0aW9uKFJlZ2lzdGVySUQqIGRzdCwgRnVuY3Rpb25Cb2R5CiB7CiAg
ICAgRnVuY3Rpb25PZmZzZXRNYXA6OkFkZFJlc3VsdCBwdHIgPSBtX2Z1bmN0aW9uT2Zmc2V0cy5h
ZGQoZnVuY3Rpb24sIDApOwogICAgIGlmIChwdHIuaXNOZXdFbnRyeSkKLSAgICAgICAgcHRyLml0
ZXJhdG9yLT5zZWNvbmQgPSBtX2NvZGVCbG9jay0+YWRkRnVuY3Rpb25EZWNsKG1ha2VGdW5jdGlv
bihtX2dsb2JhbERhdGEsIGZ1bmN0aW9uKSk7Ci0gICAgcmV0dXJuIGVtaXROZXdGdW5jdGlvbklu
dGVybmFsKGRzdCwgcHRyLml0ZXJhdG9yLT5zZWNvbmQsIHRydWUpOworICAgICAgICBwdHIuaXRl
cmF0b3ItPnZhbHVlID0gbV9jb2RlQmxvY2stPmFkZEZ1bmN0aW9uRGVjbChtYWtlRnVuY3Rpb24o
bV9nbG9iYWxEYXRhLCBmdW5jdGlvbikpOworICAgIHJldHVybiBlbWl0TmV3RnVuY3Rpb25JbnRl
cm5hbChkc3QsIHB0ci5pdGVyYXRvci0+dmFsdWUsIHRydWUpOwogfQogCiBSZWdpc3RlcklEKiBC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5ld0Z1bmN0aW9uSW50ZXJuYWwoUmVnaXN0ZXJJRCogZHN0
LCB1bnNpZ25lZCBpbmRleCwgYm9vbCBkb051bGxDaGVjaykKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAppbmRleCBkMjQzZThjZTAw
ODQ5YjU1MmQ5OGRiMDUwMWMzNjlhNDE1ZDJlZDBhLi4wYmY2NmE0Y2NjY2M4YTViMDY4ZmI5NmQ0
YzhlMzZjYWE5ZTIxNTU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCkBAIC0yNTgsNyArMjU4LDcgQEAgUmVnaXN0ZXJJRCog
UHJvcGVydHlMaXN0Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0
b3IsIFJlZ2lzdGUKICAgICAgICAgICAgIEdldHRlclNldHRlclBhaXIgcGFpcihub2RlLCBzdGF0
aWNfY2FzdDxQcm9wZXJ0eU5vZGUqPigwKSk7CiAgICAgICAgICAgICBHZXR0ZXJTZXR0ZXJNYXA6
OkFkZFJlc3VsdCByZXN1bHQgPSBtYXAuYWRkKG5vZGUtPm5hbWUoKS5pbXBsKCksIHBhaXIpOwog
ICAgICAgICAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgICAgICByZXN1
bHQuaXRlcmF0b3ItPnNlY29uZC5zZWNvbmQgPSBub2RlOworICAgICAgICAgICAgICAgIHJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUuc2Vjb25kID0gbm9kZTsKICAgICAgICAgfQogCiAgICAgICAgIC8v
IEl0ZXJhdGUgb3ZlciB0aGUgcmVtYWluaW5nIHByb3BlcnRpZXMgaW4gdGhlIGxpc3QuCkBAIC0y
NzYsNyArMjc2LDcgQEAgUmVnaXN0ZXJJRCogUHJvcGVydHlMaXN0Tm9kZTo6ZW1pdEJ5dGVjb2Rl
KEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGUKICAgICAgICAgICAgIEFTU0VS
VChub2RlLT5tX3R5cGUgPT0gUHJvcGVydHlOb2RlOjpHZXR0ZXIgfHwgbm9kZS0+bV90eXBlID09
IFByb3BlcnR5Tm9kZTo6U2V0dGVyKTsKICAgICAgICAgICAgIEdldHRlclNldHRlck1hcDo6aXRl
cmF0b3IgaXQgPSBtYXAuZmluZChub2RlLT5uYW1lKCkuaW1wbCgpKTsKICAgICAgICAgICAgIEFT
U0VSVChpdCAhPSBtYXAuZW5kKCkpOwotICAgICAgICAgICAgR2V0dGVyU2V0dGVyUGFpciYgcGFp
ciA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICBHZXR0ZXJTZXR0ZXJQYWlyJiBwYWlyID0gaXQt
PnZhbHVlOwogCiAgICAgICAgICAgICAvLyBXYXMgdGhpcyBhbHJlYWR5IGdlbmVyYXRlZCBhcyBh
IHBhcnQgb2YgaXRzIHBhcnRuZXI/CiAgICAgICAgICAgICBpZiAocGFpci5zZWNvbmQgPT0gbm9k
ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3BwCmluZGV4IDBh
NjZkNmYzNGU2ZjRiYzljYzZkMDQ3YmY5ODZkZmI0MWI3MGViZDAuLjU0ODNkMmUwZTc0YTc0NmJm
NmJkZDVmMjYzMTkxYjE5YzAzYWY5YTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVn
Z2VyL0RlYnVnZ2VyLmNwcApAQCAtNTksNyArNTksNyBAQCBpbmxpbmUgUmVjb21waWxlcjo6flJl
Y29tcGlsZXIoKQogICAgIC8vIEphdmFTY3JpcHQgaW4gdGhlIGluc3BlY3Rvci4KICAgICBTb3Vy
Y2VQcm92aWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9zb3VyY2VQcm92aWRlcnMuZW5k
KCk7CiAgICAgZm9yIChTb3VyY2VQcm92aWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1f
c291cmNlUHJvdmlkZXJzLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCi0gICAgICAgIG1f
ZGVidWdnZXItPnNvdXJjZVBhcnNlZChpdGVyLT5zZWNvbmQsIGl0ZXItPmZpcnN0LCAtMSwgVVN0
cmluZygpKTsKKyAgICAgICAgbV9kZWJ1Z2dlci0+c291cmNlUGFyc2VkKGl0ZXItPnZhbHVlLCBp
dGVyLT5rZXksIC0xLCBVU3RyaW5nKCkpOwogfQogCiBpbmxpbmUgdm9pZCBSZWNvbXBpbGVyOjpv
cGVyYXRvcigpKEpTQ2VsbCogY2VsbCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCmluZGV4IDky
MDhjZGUxYmVhMzkxNzJhZDBjYmM4ZjE3YTliNjI2NWRjNDk2NWUuLjJlMTBlMTc5ZGJhZjcwZTcy
MDcxNjE3NmNkYmZhODU3YjQyNDI2OWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcApAQCAt
MjE0LDcgKzIxNCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1ha2Ug
c3VyZSB0aGF0IGlmIGl0J3MgYSB2YXJpYWJsZSB0aGF0IHdlIHRoaW5rIGlzIGFsaWFzZWQgdG8K
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBhcmd1bWVudHMsIHRoYXQgd2Uga25vdyB0
aGF0IGl0IG1pZ2h0IGFjdHVhbGx5IG5vdCBiZS4KICAgICAgICAgICAgICAgICAgICAgICAgIEFy
Z3VtZW50c0FsaWFzaW5nRGF0YSYgZGF0YSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV9hcmd1bWVudHNBbGlhc2luZy5maW5kKHZhcmlhYmxlQWNjZXNzRGF0YSktPnNlY29uZDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFi
bGVBY2Nlc3NEYXRhKS0+dmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLm1lcmdl
Tm9uQXJndW1lbnRzQXNzaWdubWVudCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5t
ZXJnZUNhbGxDb250ZXh0KG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yMzIsNyArMjMyLDcgQEAgcHVibGljOgogICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgQXJndW1lbnRzQWxpYXNpbmdEYXRhJiBkYXRhID0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIG1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEp
LT5zZWNvbmQ7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2FyZ3VtZW50c0FsaWFzaW5nLmZp
bmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+dmFsdWU7CiAgICAgICAgICAgICAgICAgICAgIGRhdGEu
bWVyZ2VBcmd1bWVudHNBc3NpZ25tZW50KCk7CiAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMg
ZW5zdXJlcyB0aGF0IHRoZSB2YXJpYWJsZSdzIHVzZXMgYXJlIGluIHRoZSBzYW1lIGNvbnRleHQg
YXMKICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGFyZ3VtZW50cyBpdCBpcyBhbGlhc2luZy4K
QEAgLTI0Nyw3ICsyNDcsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJp
YWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgICAgICBBcmd1bWVudHNBbGlhc2luZ0RhdGEmIGRhdGEgPQot
ICAgICAgICAgICAgICAgICAgICAgICAgbV9hcmd1bWVudHNBbGlhc2luZy5maW5kKHZhcmlhYmxl
QWNjZXNzRGF0YSktPnNlY29uZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fYXJndW1lbnRz
QWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT52YWx1ZTsKICAgICAgICAgICAgICAg
ICAgICAgZGF0YS5tZXJnZUNhbGxDb250ZXh0KG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJh
bWUpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CkBAIC0y
NTcsNyArMjU3LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGVB
Y2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICAgICAgQXJndW1lbnRzQWxpYXNpbmdEYXRhJiBkYXRhID0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIG1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vz
c0RhdGEpLT5zZWNvbmQ7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2FyZ3VtZW50c0FsaWFz
aW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+dmFsdWU7CiAgICAgICAgICAgICAgICAgICAg
IGRhdGEubWVyZ2VDYWxsQ29udGV4dChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsK
ICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIC8vIElmIGEgdmFyaWFi
bGUgaXMgdXNlZCBpbiBhIGZsdXNoIHRoZW4gYnkgZGVmaW5pdGlvbiBpdCBlc2NhcGVzLgpAQCAt
MjcwLDcgKzI3MCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxl
QWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgICAgIEFyZ3VtZW50c0FsaWFzaW5nRGF0YSYgZGF0YSA9Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nl
c3NEYXRhKS0+c2Vjb25kOworICAgICAgICAgICAgICAgICAgICAgICAgbV9hcmd1bWVudHNBbGlh
c2luZy5maW5kKHZhcmlhYmxlQWNjZXNzRGF0YSktPnZhbHVlOwogICAgICAgICAgICAgICAgICAg
ICBkYXRhLm1lcmdlTm9uQXJndW1lbnRzQXNzaWdubWVudCgpOwogICAgICAgICAgICAgICAgICAg
ICBkYXRhLm1lcmdlQ2FsbENvbnRleHQobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7
CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzUxLDcgKzM1MSw3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgQXJn
dW1lbnRzQWxpYXNpbmdEYXRhJiBkYXRhID0KLSAgICAgICAgICAgICAgICAgICAgbV9hcmd1bWVu
dHNBbGlhc2luZy5maW5kKHZhcmlhYmxlQWNjZXNzRGF0YSktPnNlY29uZDsKKyAgICAgICAgICAg
ICAgICAgICAgbV9hcmd1bWVudHNBbGlhc2luZy5maW5kKHZhcmlhYmxlQWNjZXNzRGF0YSktPnZh
bHVlOwogICAgICAgICAgICAgICAgIGlmIChkYXRhLmlzVmFsaWQoKSkKICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgCkBAIC0zNzAsNyArMzcwLDcgQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgIGRhdGFMb2coIkNhcHR1cmVkIik7CiAgICAgICAgICAgICBl
bHNlIHsKICAgICAgICAgICAgICAgICBBcmd1bWVudHNBbGlhc2luZ0RhdGEmIGRhdGEgPQotICAg
ICAgICAgICAgICAgICAgICBtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NE
YXRhKS0+c2Vjb25kOworICAgICAgICAgICAgICAgICAgICBtX2FyZ3VtZW50c0FsaWFzaW5nLmZp
bmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+dmFsdWU7CiAgICAgICAgICAgICAgICAgYm9vbCBmaXJz
dCA9IHRydWU7CiAgICAgICAgICAgICAgICAgaWYgKGRhdGEuY2FsbENvbnRleHRJc1ZhbGlkKCkp
IHsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFmaXJzdCkKQEAgLTQ1MSw3ICs0NTEsNyBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIC8vIHRoaW5ncy4gTm90ZSBhbHNvIHRoYXQgdGhl
IFNldExvY2FsIHNob3VsZCBiZWNvbWUgZGVhZCBhcyBzb29uIGFzCiAgICAgICAgICAgICAgICAg
ICAgIC8vIHdlIHJlcGxhY2UgYWxsIHVzZXMgb2YgdGhpcyB2YXJpYWJsZSB3aXRoIEdldE15QXJn
dW1lbnRzTGVuZ3RoIGFuZAogICAgICAgICAgICAgICAgICAgICAvLyBHZXRNeUFyZ3VtZW50QnlW
YWwuCi0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQo
dmFyaWFibGVBY2Nlc3NEYXRhKS0+c2Vjb25kLmlzVmFsaWQoKSk7CisgICAgICAgICAgICAgICAg
ICAgIEFTU0VSVChtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+
dmFsdWUuaXNWYWxpZCgpKTsKICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSB2YXJpYWJs
ZUFjY2Vzc0RhdGEtPm1lcmdlSXNBcmd1bWVudHNBbGlhcyh0cnVlKTsKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQpAQCAtNzAzLDcgKzcwMyw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkpCiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIEFyZ3VtZW50
c0FsaWFzaW5nRGF0YSYgZGF0YSA9IG1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFj
Y2Vzc0RhdGEpLT5zZWNvbmQ7CisgICAgICAgICAgICBBcmd1bWVudHNBbGlhc2luZ0RhdGEmIGRh
dGEgPSBtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+dmFsdWU7
CiAgICAgICAgICAgICBkYXRhLmVzY2FwZXMgPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KQEAgLTc1MCw3ICs3NTAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBBcmd1bWVudHNBbGlhc2luZ0RhdGEmIGRh
dGEgPSBtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+c2Vjb25k
OworICAgICAgICBBcmd1bWVudHNBbGlhc2luZ0RhdGEmIGRhdGEgPSBtX2FyZ3VtZW50c0FsaWFz
aW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+dmFsdWU7CiAgICAgICAgIGRhdGEubWVyZ2VD
YWxsQ29udGV4dChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICB9CiAgICAg
CkBAIC03NzMsNyArNzczLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIEFyZ3VtZW50c0FsaWFzaW5nRGF0YSYgZGF0YSA9Ci0g
ICAgICAgICAgICAgICAgbV9hcmd1bWVudHNBbGlhc2luZy5maW5kKHZhcmlhYmxlQWNjZXNzRGF0
YSktPnNlY29uZDsKKyAgICAgICAgICAgICAgICBtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFy
aWFibGVBY2Nlc3NEYXRhKS0+dmFsdWU7CiAgICAgICAgICAgICBpZiAoIWRhdGEuaXNWYWxpZCgp
KQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIApA
QCAtODA5LDcgKzgwOSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgJiYgIW1fY3JlYXRl
c0FyZ3VtZW50cy5jb250YWlucyhjaGlsZC5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CiAg
ICAgICAgICAgICBib29sIGlzQWxpYXNlZEFyZ3VtZW50c1JlZ2lzdGVyID0KICAgICAgICAgICAg
ICAgICAhdmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkKLSAgICAgICAgICAgICAgICAm
JiBtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+c2Vjb25kLmlz
VmFsaWQoKQorICAgICAgICAgICAgICAgICYmIG1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJp
YWJsZUFjY2Vzc0RhdGEpLT52YWx1ZS5pc1ZhbGlkKCkKICAgICAgICAgICAgICAgICAmJiAhbV9j
cmVhdGVzQXJndW1lbnRzLmNvbnRhaW5zKGNoaWxkLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1l
KTsKICAgICAgICAgICAgIGlmICghaXNEZWFkQXJndW1lbnRzUmVnaXN0ZXIgJiYgIWlzQWxpYXNl
ZEFyZ3VtZW50c1JlZ2lzdGVyKQogICAgICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBc3NlbWJseUhlbHBlcnMuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBc3NlbWJseUhlbHBlcnMuY3BwCmluZGV4IDc3OTllZTUw
NTkzNWFkNGUxM2JjM2NlMThkMGI3MzJhM2FhNDI5NmUuLmI1YjY2ODQxOGE2M2E3Yzk0NGRmNWRj
NDdhNjA0YjFlNTM1NzQxZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQXNzZW1ibHlIZWxwZXJzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fzc2VtYmx5SGVscGVycy5jcHAKQEAgLTQ5LDkgKzQ5LDkgQEAgVmVjdG9yPEJ5dGVjb2RlQW5k
TWFjaGluZU9mZnNldD4mIEFzc2VtYmx5SGVscGVyczo6ZGVjb2RlZENvZGVNYXBGb3IoQ29kZUJs
b2NrKgogICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9m
ZnNldD4gPjo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fZGVjb2RlZENvZGVNYXBzLmFkZChjb2RlQmxv
Y2ssIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+KCkpOwogICAgIAogICAgIGlmIChy
ZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgY29kZUJsb2NrLT5qaXRDb2RlTWFwKCktPmRlY29k
ZShyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7CisgICAgICAgIGNvZGVCbG9jay0+aml0Q29kZU1h
cCgpLT5kZWNvZGUocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CiAgICAgCi0gICAgcmV0dXJuIHJl
c3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVl
OwogfQogCiAjaWYgRU5BQkxFKFNBTVBMSU5HX0ZMQUdTKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZUNhY2hlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0J5dGVDb2RlQ2FjaGUuaAppbmRleCBmNmE3NDVjNjY1ODcxMzNiMTJjYmQ0NGZm
M2E5MjlhOTNjMWJhMTA3Li44ZWQxNTc4ZjI2ZDNhNGU3NWUyM2E5ZDhlZWZmMDlhYjRhYjYwMDlj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlQ2FjaGUu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlQ2FjaGUuaApAQCAt
MTMyLDEwICsxMzIsMTAgQEAgcHVibGljOgogICAgICAgICBNYXA6Oml0ZXJhdG9yIGJlZ2luID0g
bV9tYXAuYmVnaW4oKTsKICAgICAgICAgTWFwOjppdGVyYXRvciBlbmQgPSBtX21hcC5lbmQoKTsK
ICAgICAgICAgZm9yIChNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBiZWdpbjsgaXRlciAhPSBlbmQ7ICsr
aXRlcikgewotICAgICAgICAgICAgaWYgKCFpdGVyLT5zZWNvbmQuY29kZUJsb2NrKQorICAgICAg
ICAgICAgaWYgKCFpdGVyLT52YWx1ZS5jb2RlQmxvY2spCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICBpZiAoaXRlci0+c2Vjb25kLm93bmVkKSB7Ci0gICAgICAgICAgICAg
ICAgZGVsZXRlIGl0ZXItPnNlY29uZC5jb2RlQmxvY2s7CisgICAgICAgICAgICBpZiAoaXRlci0+
dmFsdWUub3duZWQpIHsKKyAgICAgICAgICAgICAgICBkZWxldGUgaXRlci0+dmFsdWUuY29kZUJs
b2NrOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9
CkBAIC0xNDUsNyArMTQ1LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgTWFwOjppdGVyYXRv
ciBpdGVyID0gbV9tYXAuZmluZChrZXkpOwogICAgICAgICBpZiAoaXRlciAhPSBtX21hcC5lbmQo
KSkKLSAgICAgICAgICAgIHJldHVybiBpdGVyLT5zZWNvbmQuY29kZUJsb2NrOworICAgICAgICAg
ICAgcmV0dXJuIGl0ZXItPnZhbHVlLmNvZGVCbG9jazsKICAgICAgICAgCiAgICAgICAgIEJ5dGVD
b2RlQ2FjaGVWYWx1ZSB2YWx1ZTsKICAgICAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCmluZGV4IGU0ZTk0ZTkwYmZlMTJjYzNmNTQ4Yjc1
NGNhZjc0MDNkZDJlMmJjZDguLmM5ZmM0MWRkOGEwOWE3NWZhZjFjNzRlMzBkNjIxNDViM2Q2ZjE4
MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwCkBAIC02NTMsOSArNjUzLDkgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIEhhc2hNYXA8
SlNDZWxsKiwgTm9kZUluZGV4Pjo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fY2VsbENvbnN0YW50Tm9k
ZXMuYWRkKGNlbGwsIE5vTm9kZSk7CiAgICAgICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKLSAg
ICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gYWRkVG9HcmFwaChXZWFrSlNDb25z
dGFudCwgT3BJbmZvKGNlbGwpKTsKKyAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUg
PSBhZGRUb0dyYXBoKFdlYWtKU0NvbnN0YW50LCBPcEluZm8oY2VsbCkpOwogICAgICAgICAKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAgICB9CiAgICAgCiAgICAgQ29kZU9yaWdpbiBjdXJyZW50
Q29kZU9yaWdpbigpCkBAIC0zMTYxLDcgKzMxNjEsNyBAQCBCeXRlQ29kZVBhcnNlcjo6SW5saW5l
U3RhY2tFbnRyeTo6SW5saW5lU3RhY2tFbnRyeSgKICAgICAgICAgICAgIElkZW50aWZpZXJNYXA6
OkFkZFJlc3VsdCByZXN1bHQgPSBieXRlQ29kZVBhcnNlci0+bV9pZGVudGlmaWVyTWFwLmFkZChy
ZXAsIGJ5dGVDb2RlUGFyc2VyLT5tX2NvZGVCbG9jay0+bnVtYmVyT2ZJZGVudGlmaWVycygpKTsK
ICAgICAgICAgICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKICAgICAgICAgICAgICAgICBieXRl
Q29kZVBhcnNlci0+bV9jb2RlQmxvY2stPmFkZElkZW50aWZpZXIoSWRlbnRpZmllcihieXRlQ29k
ZVBhcnNlci0+bV9nbG9iYWxEYXRhLCByZXApKTsKLSAgICAgICAgICAgIG1faWRlbnRpZmllclJl
bWFwW2ldID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgICAgICBtX2lkZW50aWZp
ZXJSZW1hcFtpXSA9IHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgIH0KICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb2RlQmxvY2stPm51bWJlck9mQ29uc3RhbnRSZWdpc3Rl
cnMoKTsgKytpKSB7CiAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gY29kZUJsb2NrLT5nZXRD
b25zdGFudChpICsgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOwpAQCAtMzE3OSw3ICszMTc5
LDcgQEAgQnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZVN0YWNrRW50cnko
CiAgICAgICAgICAgICAgICAgYnl0ZUNvZGVQYXJzZXItPm1fY29kZUJsb2NrLT5hZGRDb25zdGFu
dCh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgYnl0ZUNvZGVQYXJzZXItPm1fY29uc3RhbnRzLmFw
cGVuZChDb25zdGFudFJlY29yZCgpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fY29u
c3RhbnRSZW1hcFtpXSA9IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICAgICAgbV9j
b25zdGFudFJlbWFwW2ldID0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgfQogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY29kZUJsb2NrLT5udW1iZXJPZkdsb2JhbFJl
c29sdmVJbmZvcygpOyArK2kpCiAgICAgICAgICAgICBieXRlQ29kZVBhcnNlci0+bV9jb2RlQmxv
Y2stPmFkZEdsb2JhbFJlc29sdmVJbmZvKHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+Ojpt
YXgoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCmluZGV4IDM3NzEzMjc2NWY0N2My
Y2U0OTI4NDU2ZDYzYmJmN2UwMTQxN2YwMzEuLmEzMzliNmM5MDZlMmQ4NDEwNmExZTgyMjYyYjM0
ZmE3N2M0M2JlNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCkBAIC0zNDUsNyAr
MzQ1LDcgQEAgdm9pZCBIZWFwOjptYXJrUHJvdGVjdGVkT2JqZWN0cyhIZWFwUm9vdFZpc2l0b3Im
IGhlYXBSb290VmlzaXRvcikKIHsKICAgICBQcm90ZWN0Q291bnRTZXQ6Oml0ZXJhdG9yIGVuZCA9
IG1fcHJvdGVjdGVkVmFsdWVzLmVuZCgpOwogICAgIGZvciAoUHJvdGVjdENvdW50U2V0OjppdGVy
YXRvciBpdCA9IG1fcHJvdGVjdGVkVmFsdWVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAg
ICAgICAgaGVhcFJvb3RWaXNpdG9yLnZpc2l0KCZpdC0+Zmlyc3QpOworICAgICAgICBoZWFwUm9v
dFZpc2l0b3IudmlzaXQoJml0LT5rZXkpOwogfQogCiB2b2lkIEhlYXA6OnB1c2hUZW1wU29ydFZl
Y3RvcihWZWN0b3I8VmFsdWVTdHJpbmdQYWlyPiogdGVtcFZlY3RvcikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuaAppbmRleCA1OTVlOTM3Y2U5ZjhhNTIzOTM0NzhlM2Q5NDA4MThlZTI1YmE5NGRi
Li42NTRlNmIyNzc3MWRkZjZkM2I1NWI5ODllYTI0Zjk3NmE4ZjY4OTFjIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5oCkBAIC0zNDUsNyArMzQ1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ewogICAgICAgICBQcm90ZWN0Q291bnRTZXQ6Oml0ZXJhdG9yIGVuZCA9IG1fcHJvdGVjdGVkVmFs
dWVzLmVuZCgpOwogICAgICAgICBmb3IgKFByb3RlY3RDb3VudFNldDo6aXRlcmF0b3IgaXQgPSBt
X3Byb3RlY3RlZFZhbHVlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBm
dW5jdG9yKGl0LT5maXJzdCk7CisgICAgICAgICAgICBmdW5jdG9yKGl0LT5rZXkpOwogICAgICAg
ICBtX2hhbmRsZVNldC5mb3JFYWNoU3Ryb25nSGFuZGxlKGZ1bmN0b3IsIG1fcHJvdGVjdGVkVmFs
dWVzKTsKIAogICAgICAgICByZXR1cm4gZnVuY3Rvci5yZXR1cm5WYWx1ZSgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSklUU3R1YlJvdXRpbmVTZXQuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSklUU3R1YlJvdXRpbmVTZXQuY3BwCmluZGV4IDA1NGJm
MDZkZGNmYWE0N2VmN2Y2MmE5MTUwMzM5MzRiMzE4YTFmNDYuLjhlMjc5MWZjNzE5MDNhYmQyNjY4
YzQ4MjZmYjJlYzRmMTc0MDI1MGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9KSVRTdHViUm91dGluZVNldC5jcHAKQEAgLTgyLDcgKzgyLDcgQEAgdm9pZCBKSVRTdHViUm91
dGluZVNldDo6bWFya1Nsb3codWludHB0cl90IGFkZHJlc3MpCiAgICAgaWYgKGl0ZXIgPT0gbV9h
ZGRyZXNzVG9Sb3V0aW5lTWFwLmVuZCgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgaXRl
ci0+c2Vjb25kLT5tX21heUJlRXhlY3V0aW5nID0gdHJ1ZTsKKyAgICBpdGVyLT52YWx1ZS0+bV9t
YXlCZUV4ZWN1dGluZyA9IHRydWU7CiB9CiAKIHZvaWQgSklUU3R1YlJvdXRpbmVTZXQ6OmRlbGV0
ZVVubWFya2VkSmV0dGlzb25lZFN0dWJSb3V0aW5lcygpCkBAIC05Nyw3ICs5Nyw3IEBAIHZvaWQg
SklUU3R1YlJvdXRpbmVTZXQ6OmRlbGV0ZVVubWFya2VkSmV0dGlzb25lZFN0dWJSb3V0aW5lcygp
CiAgICAgICAgIHVpbnRwdHJfdCBzdGVwID0gSklUU3R1YlJvdXRpbmU6OmFkZHJlc3NTdGVwKCk7
CiAgICAgICAgIGZvciAodWludHB0cl90IGl0ZXIgPSBzdGFydDsgaXRlciA8IGVuZDsgaXRlciAr
PSBzdGVwKSB7CiAgICAgICAgICAgICBBU1NFUlQobV9hZGRyZXNzVG9Sb3V0aW5lTWFwLmZpbmQo
aXRlcikgIT0gbV9hZGRyZXNzVG9Sb3V0aW5lTWFwLmVuZCgpKTsKLSAgICAgICAgICAgIEFTU0VS
VChtX2FkZHJlc3NUb1JvdXRpbmVNYXAuZmluZChpdGVyKS0+c2Vjb25kID09IHJvdXRpbmUpOwor
ICAgICAgICAgICAgQVNTRVJUKG1fYWRkcmVzc1RvUm91dGluZU1hcC5maW5kKGl0ZXIpLT52YWx1
ZSA9PSByb3V0aW5lKTsKICAgICAgICAgICAgIG1fYWRkcmVzc1RvUm91dGluZU1hcC5yZW1vdmUo
aXRlcik7CiAgICAgICAgIH0KICAgICAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrU3RhY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a1N0YWNrLmNwcAppbmRleCAwMmExMzA3N2Q3ZGY1ZDdiM2NkZTFhMTM0MDk4NzVkZGM4ZDk5YWYw
Li5mNDc1YWUzYTUwYjBhOTA2MTI4ZTcyMzhhMjkzNzI2MmYxMjM3OTEwIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5jcHAKQEAgLTU5Nyw3ICs1OTcsNyBAQCBBTFdBWVNf
SU5MSU5FIHZvaWQgTWFya1N0YWNrOjppbnRlcm5hbEFwcGVuZChKU1ZhbHVlKiBzbG90KQogICAg
ICAgICAgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQogICAgICAgICAgICAgICAgIHN0cmlu
Zy0+c2V0SGFzaENvbnN0U2luZ2xldG9uKCk7CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBKU1ZhbHVlIGV4aXN0aW5nSlNWYWx1ZSA9IGFkZFJlc3VsdC5pdGVyYXRvci0+c2Vj
b25kOworICAgICAgICAgICAgICAgIEpTVmFsdWUgZXhpc3RpbmdKU1ZhbHVlID0gYWRkUmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgICAgICAgICBpZiAodmFsdWUgIT0gZXhpc3RpbmdK
U1ZhbHVlKQogICAgICAgICAgICAgICAgICAgICBqc0Nhc3Q8SlNTdHJpbmcqPihleGlzdGluZ0pT
VmFsdWUuYXNDZWxsKCkpLT5jbGVhckhhc2hDb25zdFNpbmdsZXRvbigpOwogICAgICAgICAgICAg
ICAgICpzbG90ID0gZXhpc3RpbmdKU1ZhbHVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvV2Vhay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vhay5oCmlu
ZGV4IDA3Njk4ZmQwNmIwNmM3NTAxNGJiNjViZjI1ZmMzMWMyOGE5YTA2ODQuLjNjM2QxZDBjZWZl
MTgxMjY1OWM1ZmE3M2M3NGQxOTk0OGMxOGZmZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1dlYWsuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFr
LmgKQEAgLTE2NCw4ICsxNjQsOCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXAsIHR5cGVuYW1lIEtl
eSwgdHlwZW5hbWUgVmFsdWU+IGlubGluZSB2b2lkIHdlYWtSZW1vdmUoTWFwJgogICAgIHR5cGVu
YW1lIE1hcDo6aXRlcmF0b3IgaXQgPSBtYXAuZmluZChrZXkpOwogICAgIEFTU0VSVF9VTlVTRUQo
dmFsdWUsIHZhbHVlKTsKICAgICBBU1NFUlQoaXQgIT0gbWFwLmVuZCgpKTsKLSAgICBBU1NFUlQo
aXQtPnNlY29uZC53YXModmFsdWUpKTsKLSAgICBBU1NFUlQoIWl0LT5zZWNvbmQpOworICAgIEFT
U0VSVChpdC0+dmFsdWUud2FzKHZhbHVlKSk7CisgICAgQVNTRVJUKCFpdC0+dmFsdWUpOwogICAg
IG1hcC5yZW1vdmUoaXQpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKaW5kZXggNTJh
NzE1OGU2NjA2YWZkZjc0YWUzMjZkZTgwOTkwMmE0MTkzMzQ0Ni4uODM3YjhkMjFlM2I1MTJmZGZj
MzUyZGZhN2VhMTMzMmI1MWRkNmRlNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcApAQCAt
NzExLDggKzcxMSw4IEBAIEpJVENvZGUgSklUOjpwcml2YXRlQ29tcGlsZShDb2RlUHRyKiBmdW5j
dGlvbkVudHJ5QXJpdHlDaGVjaywgSklUQ29tcGlsYXRpb25FZmZvCiAKICAgICAgICAgICAgIFN0
cmluZ0p1bXBUYWJsZTo6U3RyaW5nT2Zmc2V0VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHJlY29yZC5q
dW1wVGFibGUuc3RyaW5nSnVtcFRhYmxlLT5vZmZzZXRUYWJsZS5lbmQoKTsgICAgICAgICAgICAK
ICAgICAgICAgICAgIGZvciAoU3RyaW5nSnVtcFRhYmxlOjpTdHJpbmdPZmZzZXRUYWJsZTo6aXRl
cmF0b3IgaXQgPSByZWNvcmQuanVtcFRhYmxlLnN0cmluZ0p1bXBUYWJsZS0+b2Zmc2V0VGFibGUu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgb2Zm
c2V0ID0gaXQtPnNlY29uZC5icmFuY2hPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgaXQtPnNlY29u
ZC5jdGlPZmZzZXQgPSBvZmZzZXQgPyBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKG1fbGFiZWxzW2J5
dGVjb2RlT2Zmc2V0ICsgb2Zmc2V0XSkgOiByZWNvcmQuanVtcFRhYmxlLnN0cmluZ0p1bXBUYWJs
ZS0+Y3RpRGVmYXVsdDsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBpdC0+dmFs
dWUuYnJhbmNoT2Zmc2V0OworICAgICAgICAgICAgICAgIGl0LT52YWx1ZS5jdGlPZmZzZXQgPSBv
ZmZzZXQgPyBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0ICsg
b2Zmc2V0XSkgOiByZWNvcmQuanVtcFRhYmxlLnN0cmluZ0p1bXBUYWJsZS0+Y3RpRGVmYXVsdDsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRTdHVicy5jcHAKaW5kZXggMGYwM2EwYTRhOTQ2Y2M4MGM0MTQzYzRmYjI5YTQ2MjBhZTFhNzE0
MC4uYmU2YTg1YTI4ZTI4ZGEyYzZiNzAzYzZjNjg2MDk5MzM4Yzk4ZDM2YyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKQEAgLTM0MjgsOCArMzQyOCw4IEBAIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBKSVRUaHVua3M6OmN0aVN0dWIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
LCBUaHVua0dlbmVyYXRvCiB7CiAgICAgQ1RJU3R1Yk1hcDo6QWRkUmVzdWx0IGVudHJ5ID0gbV9j
dGlTdHViTWFwLmFkZChnZW5lcmF0b3IsIE1hY3JvQXNzZW1ibGVyQ29kZVJlZigpKTsKICAgICBp
ZiAoZW50cnkuaXNOZXdFbnRyeSkKLSAgICAgICAgZW50cnkuaXRlcmF0b3ItPnNlY29uZCA9IGdl
bmVyYXRvcihnbG9iYWxEYXRhKTsKLSAgICByZXR1cm4gZW50cnkuaXRlcmF0b3ItPnNlY29uZDsK
KyAgICAgICAgZW50cnkuaXRlcmF0b3ItPnZhbHVlID0gZ2VuZXJhdG9yKGdsb2JhbERhdGEpOwor
ICAgIHJldHVybiBlbnRyeS5pdGVyYXRvci0+dmFsdWU7CiB9CiAKIE5hdGl2ZUV4ZWN1dGFibGUq
IEpJVFRodW5rczo6aG9zdEZ1bmN0aW9uU3R1YihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIE5h
dGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBOYXRpdmVGdW5jdGlvbiBjb25zdHJ1Y3RvcikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAppbmRleCA1NThmNTBlNWZiMzA1MzRjNjYy
NGU3NzQ5Y2IwNGU2OTUyYmM5MjYzLi41OTBkZjc2MGJhZmZjNmRkOTIzZmM2ZjE5YTgxZjQ3MWMz
MWZkYTdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCkBAIC0xMzI1
LDEwICsxMzI1LDEwIEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3Np
b24gUGFyc2VyPExleGVyVHlwZT46OnBhcnNlU3RyaWN0T2JqZWN0CiAgICAgICAgIGlmICghbV9z
eW50YXhBbHJlYWR5VmFsaWRhdGVkKSB7CiAgICAgICAgICAgICBPYmplY3RWYWxpZGF0aW9uTWFw
OjpBZGRSZXN1bHQgcHJvcGVydHlFbnRyeSA9IG9iamVjdFZhbGlkYXRvci5hZGQoY29udGV4dC5n
ZXROYW1lKHByb3BlcnR5KS5pbXBsKCksIGNvbnRleHQuZ2V0VHlwZShwcm9wZXJ0eSkpOwogICAg
ICAgICAgICAgaWYgKCFwcm9wZXJ0eUVudHJ5LmlzTmV3RW50cnkpIHsKLSAgICAgICAgICAgICAg
ICBmYWlsSWZUcnVlKHByb3BlcnR5RW50cnkuaXRlcmF0b3ItPnNlY29uZCA9PSBQcm9wZXJ0eU5v
ZGU6OkNvbnN0YW50KTsKKyAgICAgICAgICAgICAgICBmYWlsSWZUcnVlKHByb3BlcnR5RW50cnku
aXRlcmF0b3ItPnZhbHVlID09IFByb3BlcnR5Tm9kZTo6Q29uc3RhbnQpOwogICAgICAgICAgICAg
ICAgIGZhaWxJZlRydWUoY29udGV4dC5nZXRUeXBlKHByb3BlcnR5KSA9PSBQcm9wZXJ0eU5vZGU6
OkNvbnN0YW50KTsKLSAgICAgICAgICAgICAgICBmYWlsSWZUcnVlKGNvbnRleHQuZ2V0VHlwZShw
cm9wZXJ0eSkgJiBwcm9wZXJ0eUVudHJ5Lml0ZXJhdG9yLT5zZWNvbmQpOwotICAgICAgICAgICAg
ICAgIHByb3BlcnR5RW50cnkuaXRlcmF0b3ItPnNlY29uZCB8PSBjb250ZXh0LmdldFR5cGUocHJv
cGVydHkpOworICAgICAgICAgICAgICAgIGZhaWxJZlRydWUoY29udGV4dC5nZXRUeXBlKHByb3Bl
cnR5KSAmIHByb3BlcnR5RW50cnkuaXRlcmF0b3ItPnZhbHVlKTsKKyAgICAgICAgICAgICAgICBw
cm9wZXJ0eUVudHJ5Lml0ZXJhdG9yLT52YWx1ZSB8PSBjb250ZXh0LmdldFR5cGUocHJvcGVydHkp
OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHRhaWwgPSBjb250ZXh0LmNyZWF0
ZVByb3BlcnR5TGlzdChtX2xleGVyLT5sYXN0TGluZU51bWJlcigpLCBwcm9wZXJ0eSwgdGFpbCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZS5jcHAKaW5kZXggOTJlMzJj
NGJhNjY0YTQxZjQxYTg4ZTkyOWNhM2YwY2U4YmY3MDc2Zi4uNDRkZDUyZDI0MjM4OGYyZjM2NzBi
OGRhZTZmNWY2MzM1MjI0OGIyNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3By
b2ZpbGVyL1Byb2ZpbGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Q
cm9maWxlLmNwcApAQCAtMTExLDcgKzExMSw3IEBAIHR5cGVkZWYgV1RGOjpLZXlWYWx1ZVBhaXI8
RnVuY3Rpb25DYWxsSGFzaENvdW50OjpWYWx1ZVR5cGUsIHVuc2lnbmVkPiBOYW1lQ291bnRQCiAK
IHN0YXRpYyBpbmxpbmUgYm9vbCBmdW5jdGlvbk5hbWVDb3VudFBhaXJDb21wYXJhdG9yKGNvbnN0
IE5hbWVDb3VudFBhaXImIGEsIGNvbnN0IE5hbWVDb3VudFBhaXImIGIpCiB7Ci0gICAgcmV0dXJu
IGEuc2Vjb25kID4gYi5zZWNvbmQ7CisgICAgcmV0dXJuIGEudmFsdWUgPiBiLnZhbHVlOwogfQog
CiB2b2lkIFByb2ZpbGU6OmRlYnVnUHJpbnREYXRhU2FtcGxlU3R5bGUoKSBjb25zdApAQCAtMTI4
LDcgKzEyOCw3IEBAIHZvaWQgUHJvZmlsZTo6ZGVidWdQcmludERhdGFTYW1wbGVTdHlsZSgpIGNv
bnN0CiAKICAgICBzdGQ6OnNvcnQoc29ydGVkRnVuY3Rpb25zLmJlZ2luKCksIHNvcnRlZEZ1bmN0
aW9ucy5lbmQoKSwgZnVuY3Rpb25OYW1lQ291bnRQYWlyQ29tcGFyYXRvcik7CiAgICAgZm9yIChO
YW1lQ291bnRQYWlyVmVjdG9yOjppdGVyYXRvciBpdCA9IHNvcnRlZEZ1bmN0aW9ucy5iZWdpbigp
OyBpdCAhPSBzb3J0ZWRGdW5jdGlvbnMuZW5kKCk7ICsraXQpCi0gICAgICAgIGRhdGFMb2coIiAg
ICAgICAgJS0xMmQlc1xuIiwgKCppdCkuc2Vjb25kLCBVU3RyaW5nKCgqaXQpLmZpcnN0KS51dGY4
KCkuZGF0YSgpKTsKKyAgICAgICAgZGF0YUxvZygiICAgICAgICAlLTEyZCVzXG4iLCAoKml0KS52
YWx1ZSwgVVN0cmluZygoKml0KS5rZXkpLnV0ZjgoKS5kYXRhKCkpOwogCiAgICAgZGF0YUxvZygi
XG5Tb3J0IGJ5IHRvcCBvZiBzdGFjaywgc2FtZSBjb2xsYXBzZWQgKHdoZW4gPj0gNSk6XG4iKTsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5jcHAKaW5kZXgg
MjA3NzA5MjhjZTY2ODU0YTk5YTNlMzE4YTljNzQ1OTNmNzE0ZjdhOS4uOTAzZTg0OTcyOTZiMWRj
ZmY3NTJjM2JiMjY0MjQzMzJlOTcwZWQwZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSWRlbnRpZmllci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSWRlbnRpZmllci5jcHAKQEAgLTEwOCw3ICsxMDgsNyBAQCBQYXNzUmVmUHRyPFN0cmlu
Z0ltcGw+IElkZW50aWZpZXI6OmFkZChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IGNo
YXIqIGMpCiAKICAgICBjb25zdCBMaXRlcmFsSWRlbnRpZmllclRhYmxlOjppdGVyYXRvciYgaXRl
ciA9IGxpdGVyYWxJZGVudGlmaWVyVGFibGUuZmluZChjKTsKICAgICBpZiAoaXRlciAhPSBsaXRl
cmFsSWRlbnRpZmllclRhYmxlLmVuZCgpKQotICAgICAgICByZXR1cm4gaXRlci0+c2Vjb25kOwor
ICAgICAgICByZXR1cm4gaXRlci0+dmFsdWU7CiAKICAgICBIYXNoU2V0PFN0cmluZ0ltcGwqPjo6
QWRkUmVzdWx0IGFkZFJlc3VsdCA9IGlkZW50aWZpZXJUYWJsZS5hZGQ8Y29uc3QgTENoYXIqLCBJ
ZGVudGlmaWVyQ1N0cmluZ1RyYW5zbGF0b3I+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIq
PihjKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0
aXZhdGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24u
Y3BwCmluZGV4IDU0MTdiMDAyMzU1YzlmNzg1Zjk4MjU5MGE3ZDMzY2IyYzViYTE5ZjAuLmM3M2Qz
NGY5N2FiOGMyMzk2N2YxN2UwYzE3MmE3YTk4M2JiNDFmNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmNwcApAQCAtMTI3LDExICsxMjcsMTEgQEAg
dm9pZCBKU0FjdGl2YXRpb246OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwg
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXIKICAgICBKU0FjdGl2YXRpb24qIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNBY3RpdmF0aW9uKj4ob2JqZWN0KTsKICAgICBTeW1ib2xUYWJsZTo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS5lbmQoKTsKICAgICBmb3IgKFN5
bWJvbFRhYmxlOjpjb25zdF9pdGVyYXRvciBpdCA9IHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCku
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kLmdldEF0
dHJpYnV0ZXMoKSAmIERvbnRFbnVtICYmIG1vZGUgIT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGll
cykKKyAgICAgICAgaWYgKGl0LT52YWx1ZS5nZXRBdHRyaWJ1dGVzKCkgJiBEb250RW51bSAmJiBt
b2RlICE9IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpCiAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgaWYgKGl0LT5zZWNvbmQuZ2V0SW5kZXgoKSA+PSB0aGlzT2JqZWN0LT5tX251bUNh
cHR1cmVkVmFycykKKyAgICAgICAgaWYgKGl0LT52YWx1ZS5nZXRJbmRleCgpID49IHRoaXNPYmpl
Y3QtPm1fbnVtQ2FwdHVyZWRWYXJzKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHBy
b3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXIoZXhlYywgaXQtPmZpcnN0LmdldCgpKSk7CisgICAg
ICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXIoZXhlYywgaXQtPmtleS5nZXQoKSkpOwog
ICAgIH0KICAgICAvLyBTa2lwIHRoZSBKU1ZhcmlhYmxlT2JqZWN0IGltcGxlbWVudGF0aW9uIG9m
IGdldE93blByb3BlcnR5TmFtZXMKICAgICBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyh0
aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKQEAgLTE0NCw3ICsxNDQsNyBA
QCBpbmxpbmUgYm9vbCBKU0FjdGl2YXRpb246OnN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLAogICAgIFN5bWJvbFRhYmxlOjppdGVyYXRvciBpdGVy
ID0gc3ltYm9sVGFibGUoKS5maW5kKHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCkpOwogICAgIGlm
IChpdGVyID09IHN5bWJvbFRhYmxlKCkuZW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBTeW1ib2xUYWJsZUVudHJ5JiBlbnRyeSA9IGl0ZXItPnNlY29uZDsKKyAgICBTeW1ib2xUYWJs
ZUVudHJ5JiBlbnRyeSA9IGl0ZXItPnZhbHVlOwogICAgIEFTU0VSVCghZW50cnkuaXNOdWxsKCkp
OwogICAgIGlmIChlbnRyeS5nZXRJbmRleCgpID49IG1fbnVtQ2FwdHVyZWRWYXJzKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3Bw
CmluZGV4IDcyMTg2MDRkMTEyYzc4YjU3MTJiNDU0NDM4ZjI5YjEwYjUyMDg0MzguLmY1ODQ4ZDky
ZjhmMTE2MGY1ODhlOWRlZjYwY2Q5NGQyNzEzMWNjMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXkuY3BwCkBAIC0yMDQsNyArMjA0LDcgQEAgaW5saW5lIFNwYXJzZUFy
cmF5VmFsdWVNYXA6OkFkZFJlc3VsdCBTcGFyc2VBcnJheVZhbHVlTWFwOjphZGQoSlNBcnJheSog
YXJyYXksIHUKIGlubGluZSB2b2lkIFNwYXJzZUFycmF5VmFsdWVNYXA6OnB1dChFeGVjU3RhdGUq
IGV4ZWMsIEpTQXJyYXkqIGFycmF5LCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNo
b3VsZFRocm93KQogewogICAgIEFkZFJlc3VsdCByZXN1bHQgPSBhZGQoYXJyYXksIGkpOwotICAg
IFNwYXJzZUFycmF5RW50cnkmIGVudHJ5ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAg
U3BhcnNlQXJyYXlFbnRyeSYgZW50cnkgPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogCiAgICAg
Ly8gVG8gc2F2ZSBhIHNlcGFyYXRlIGZpbmQgJiBhZGQsIHdlIGZpcnN0IGFsd2F5cyBhZGQgdG8g
dGhlIHNwYXJzZSBtYXAuCiAgICAgLy8gSW4gdGhlIHVuY29tbW9uIGNhc2UgdGhhdCB0aGlzIGlz
IGEgbmV3IHByb3BlcnR5LCBhbmQgdGhlIGFycmF5IGlzIG5vdApAQCAtMjQ3LDcgKzI0Nyw3IEBA
IGlubGluZSB2b2lkIFNwYXJzZUFycmF5VmFsdWVNYXA6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIEpT
QXJyYXkqIGFycmF5LCB1bnNpZ25lZCBpCiBpbmxpbmUgYm9vbCBTcGFyc2VBcnJheVZhbHVlTWFw
OjpwdXREaXJlY3QoRXhlY1N0YXRlKiBleGVjLCBKU0FycmF5KiBhcnJheSwgdW5zaWduZWQgaSwg
SlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKIHsKICAgICBBZGRSZXN1bHQgcmVzdWx0
ID0gYWRkKGFycmF5LCBpKTsKLSAgICBTcGFyc2VBcnJheUVudHJ5JiBlbnRyeSA9IHJlc3VsdC5p
dGVyYXRvci0+c2Vjb25kOworICAgIFNwYXJzZUFycmF5RW50cnkmIGVudHJ5ID0gcmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZTsKIAogICAgIC8vIFRvIHNhdmUgYSBzZXBhcmF0ZSBmaW5kICYgYWRkLCB3
ZSBmaXJzdCBhbHdheXMgYWRkIHRvIHRoZSBzcGFyc2UgbWFwLgogICAgIC8vIEluIHRoZSB1bmNv
bW1vbiBjYXNlIHRoYXQgdGhpcyBpcyBhIG5ldyBwcm9wZXJ0eSwgYW5kIHRoZSBhcnJheSBpcyBu
b3QKQEAgLTMxMyw3ICszMTMsNyBAQCBpbmxpbmUgdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjp2
aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGl0ZXJhdG9yIGVuZCA9
IG1fbWFwLmVuZCgpOwogICAgIGZvciAoaXRlcmF0b3IgaXQgPSBtX21hcC5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kKCZpdC0+c2Vjb25kKTsKKyAgICAg
ICAgdmlzaXRvci5hcHBlbmQoJml0LT52YWx1ZSk7CiB9CiAKIHZvaWQgSlNBcnJheTo6YWxsb2Nh
dGVTcGFyc2VNYXAoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQpAQCAtMzQ5LDcgKzM0OSw3IEBA
IHZvaWQgSlNBcnJheTo6ZW50ZXJEaWN0aW9uYXJ5TW9kZShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEpCiAgICAgICAgIC8vIFRoaXMgd2lsbCBhbHdheXMgYmUgYSBuZXcgZW50cnkgaW4gdGhlIG1h
cCwgc28gbm8gbmVlZCB0byBjaGVjayB3ZSBjYW4gd3JpdGUsCiAgICAgICAgIC8vIGFuZCBhdHRy
aWJ1dGVzIGFyZSBkZWZhdWx0IHNvIG5vIG5lZWQgdG8gc2V0IHRoZW0uCiAgICAgICAgIGlmICh2
YWx1ZSkKLSAgICAgICAgICAgIG1hcC0+YWRkKHRoaXMsIGkpLml0ZXJhdG9yLT5zZWNvbmQuc2V0
KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgIG1hcC0+YWRkKHRoaXMsIGkp
Lml0ZXJhdG9yLT52YWx1ZS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOwogICAgIH0KIAog
ICAgIHZvaWQqIG5ld1Jhd1N0b3JhZ2UgPSAwOwpAQCAtNDI1LDcgKzQyNSw3IEBAIGJvb2wgSlNB
cnJheTo6ZGVmaW5lT3duTnVtZXJpY1Byb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQg
aW5kZXgsIFByb3BlcnR5CiAKICAgICAvLyAxLiBMZXQgY3VycmVudCBiZSB0aGUgcmVzdWx0IG9m
IGNhbGxpbmcgdGhlIFtbR2V0T3duUHJvcGVydHldXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRo
IHByb3BlcnR5IG5hbWUgUC4KICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpBZGRSZXN1bHQgcmVz
dWx0ID0gbWFwLT5hZGQodGhpcywgaW5kZXgpOwotICAgIFNwYXJzZUFycmF5RW50cnkqIGVudHJ5
SW5NYXAgPSAmcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgU3BhcnNlQXJyYXlFbnRyeSog
ZW50cnlJbk1hcCA9ICZyZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogCiAgICAgLy8gMi4gTGV0IGV4
dGVuc2libGUgYmUgdGhlIHZhbHVlIG9mIHRoZSBbW0V4dGVuc2libGVdXSBpbnRlcm5hbCBwcm9w
ZXJ0eSBvZiBPLgogICAgIC8vIDMuIElmIGN1cnJlbnQgaXMgdW5kZWZpbmVkIGFuZCBleHRlbnNp
YmxlIGlzIGZhbHNlLCB0aGVuIFJlamVjdC4KQEAgLTY1Niw3ICs2NTYsNyBAQCBib29sIEpTQXJy
YXk6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4
ZWMsIHVuc2lnbmVkCiAgICAgfSBlbHNlIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSB0
aGlzT2JqZWN0LT5tX3NwYXJzZVZhbHVlTWFwKSB7CiAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVN
YXA6Oml0ZXJhdG9yIGl0ID0gbWFwLT5maW5kKGkpOwogICAgICAgICBpZiAoaXQgIT0gbWFwLT5u
b3RGb3VuZCgpKSB7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLmdldChzbG90KTsKKyAgICAgICAg
ICAgIGl0LT52YWx1ZS5nZXQoc2xvdCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgfQogICAgIH0KQEAgLTcwMiw3ICs3MDIsNyBAQCBib29sIEpTQXJyYXk6OmdldE93blByb3Bl
cnR5RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3Blcgog
ICAgICAgICB9IGVsc2UgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHRoaXNPYmplY3Qt
Pm1fc3BhcnNlVmFsdWVNYXApIHsKICAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6Oml0
ZXJhdG9yIGl0ID0gbWFwLT5maW5kKGkpOwogICAgICAgICAgICAgaWYgKGl0ICE9IG1hcC0+bm90
Rm91bmQoKSkgewotICAgICAgICAgICAgICAgIGl0LT5zZWNvbmQuZ2V0KGRlc2NyaXB0b3IpOwor
ICAgICAgICAgICAgICAgIGl0LT52YWx1ZS5nZXQoZGVzY3JpcHRvcik7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTgzNCw3ICs4MzQs
NyBAQCB2b2lkIEpTQXJyYXk6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRl
KiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlCiAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiB2
ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsKICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25z
dF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwogICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAg
ICAgICAgdmVjdG9yW2l0LT5maXJzdF0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIGl0LT5zZWNvbmQu
Z2V0Tm9uU3BhcnNlTW9kZSgpKTsKKyAgICAgICAgdmVjdG9yW2l0LT5rZXldLnNldChnbG9iYWxE
YXRhLCB0aGlzLCBpdC0+dmFsdWUuZ2V0Tm9uU3BhcnNlTW9kZSgpKTsKICAgICBkZWFsbG9jYXRl
U3BhcnNlTWFwKCk7CiAKICAgICAvLyBTdG9yZSB0aGUgbmV3IHByb3BlcnR5IGludG8gdGhlIHZl
Y3Rvci4KQEAgLTkwNCw3ICs5MDQsNyBAQCBib29sIEpTQXJyYXk6OnB1dERpcmVjdEluZGV4QmV5
b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYQogICAgIFdy
aXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7CiAgICAgU3Bh
cnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKICAgICBm
b3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHZlY3RvcltpdC0+Zmlyc3RdLnNldChnbG9iYWxE
YXRhLCB0aGlzLCBpdC0+c2Vjb25kLmdldE5vblNwYXJzZU1vZGUoKSk7CisgICAgICAgIHZlY3Rv
cltpdC0+a2V5XS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgaXQtPnZhbHVlLmdldE5vblNwYXJzZU1v
ZGUoKSk7CiAgICAgZGVhbGxvY2F0ZVNwYXJzZU1hcCgpOwogCiAgICAgLy8gU3RvcmUgdGhlIG5l
dyBwcm9wZXJ0eSBpbnRvIHRoZSB2ZWN0b3IuCkBAIC05NDcsNyArOTQ3LDcgQEAgYm9vbCBKU0Fy
cmF5OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMs
IHVuc2lnbmVkIGkpCiAgICAgfSBlbHNlIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSB0
aGlzT2JqZWN0LT5tX3NwYXJzZVZhbHVlTWFwKSB7CiAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVN
YXA6Oml0ZXJhdG9yIGl0ID0gbWFwLT5maW5kKGkpOwogICAgICAgICBpZiAoaXQgIT0gbWFwLT5u
b3RGb3VuZCgpKSB7Ci0gICAgICAgICAgICBpZiAoaXQtPnNlY29uZC5hdHRyaWJ1dGVzICYgRG9u
dERlbGV0ZSkKKyAgICAgICAgICAgIGlmIChpdC0+dmFsdWUuYXR0cmlidXRlcyAmIERvbnREZWxl
dGUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgbWFwLT5yZW1v
dmUoaXQpOwogICAgICAgICB9CkBAIC05ODUsOCArOTg1LDggQEAgdm9pZCBKU0FycmF5OjpnZXRP
d25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVy
dHlOYW0KICAgICAgICAgCiAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IG1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAg
ICAgICAgICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcyB8fCAhKGl0LT5z
ZWNvbmQuYXR0cmlidXRlcyAmIERvbnRFbnVtKSkKLSAgICAgICAgICAgICAgICBrZXlzLmFwcGVu
ZChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaXQtPmZpcnN0KSk7CisgICAgICAgICAgICBpZiAobW9k
ZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzIHx8ICEoaXQtPnZhbHVlLmF0dHJpYnV0ZXMg
JiBEb250RW51bSkpCisgICAgICAgICAgICAgICAga2V5cy5hcHBlbmQoc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGl0LT5rZXkpKTsKICAgICAgICAgfQogCiAgICAgICAgIHFzb3J0KGtleXMuYmVnaW4o
KSwga2V5cy5zaXplKCksIHNpemVvZih1bnNpZ25lZCksIGNvbXBhcmVLZXlzRm9yUVNvcnQpOwpA
QCAtMTE3OSw3ICsxMTc5LDcgQEAgYm9vbCBKU0FycmF5OjpzZXRMZW5ndGgoRXhlY1N0YXRlKiBl
eGVjLCB1bnNpZ25lZCBuZXdMZW5ndGgsIGJvb2wgdGhyb3dFeGNlcHRpb24KICAgICAgICAgICAg
IGtleXMucmVzZXJ2ZUNhcGFjaXR5KG1pbihtYXAtPnNpemUoKSwgc3RhdGljX2Nhc3Q8c2l6ZV90
PihsZW5ndGggLSBuZXdMZW5ndGgpKSk7CiAgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFw
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwogICAgICAgICAgICAgZm9yIChTcGFy
c2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oaXQtPmZpcnN0KTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihpdC0+a2V5KTsKICAgICAgICAgICAgICAgICBpZiAoaW5k
ZXggPCBsZW5ndGggJiYgaW5kZXggPj0gbmV3TGVuZ3RoKQogICAgICAgICAgICAgICAgICAgICBr
ZXlzLmFwcGVuZChpbmRleCk7CiAgICAgICAgICAgICB9CkBAIC0xMTk0LDcgKzExOTQsNyBAQCBi
b29sIEpTQXJyYXk6OnNldExlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIG5ld0xlbmd0
aCwgYm9vbCB0aHJvd0V4Y2VwdGlvbgogICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRl
eCA9IGtleXNbLS1pXTsKICAgICAgICAgICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6
aXRlcmF0b3IgaXQgPSBtYXAtPmZpbmQoaW5kZXgpOwogICAgICAgICAgICAgICAgICAgICBBU1NF
UlQoaXQgIT0gbWFwLT5ub3RGb3VuZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGl0LT5z
ZWNvbmQuYXR0cmlidXRlcyAmIERvbnREZWxldGUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGl0LT52YWx1ZS5hdHRyaWJ1dGVzICYgRG9udERlbGV0ZSkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgc3RvcmFnZS0+bV9sZW5ndGggPSBpbmRleCArIDE7CiAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiVW5hYmxlIHRvIGRlbGV0
ZSBwcm9wZXJ0eS4iKTsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTY2OSw3ICsxNjY5LDcg
QEAgdm9pZCBKU0FycmF5Ojpzb3J0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBjb21wYXJlRnVu
Y3Rpb24sIENhbGxUeXBlIGNhbGxUeXBlLAogCiAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAoU3BhcnNlQXJy
YXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgewotICAgICAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1tudW1EZWZpbmVk
XS52YWx1ZSA9IGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpOworICAgICAgICAgICAgdHJl
ZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1tudW1EZWZpbmVkXS52YWx1ZSA9IGl0LT52YWx1ZS5nZXRO
b25TcGFyc2VNb2RlKCk7CiAgICAgICAgICAgICB0cmVlLmluc2VydChudW1EZWZpbmVkKTsKICAg
ICAgICAgICAgICsrbnVtRGVmaW5lZDsKICAgICAgICAgfQpAQCAtMTc4NCw3ICsxNzg0LDcgQEAg
dW5zaWduZWQgSlNBcnJheTo6Y29tcGFjdEZvclNvcnRpbmcoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhKQogCiAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IG1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIHN0
b3JhZ2UtPm1fdmVjdG9yW251bURlZmluZWQrK10uc2V0V2l0aG91dFdyaXRlQmFycmllcihpdC0+
c2Vjb25kLmdldE5vblNwYXJzZU1vZGUoKSk7CisgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3Rv
cltudW1EZWZpbmVkKytdLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoaXQtPnZhbHVlLmdldE5vblNw
YXJzZU1vZGUoKSk7CiAKICAgICAgICAgZGVhbGxvY2F0ZVNwYXJzZU1hcCgpOwogICAgIH0KQEAg
LTE4MzEsMTMgKzE4MzEsMTMgQEAgdm9pZCBKU0FycmF5OjpjaGVja0NvbnNpc3RlbmN5KENvbnNp
c3RlbmN5Q2hlY2tUeXBlIHR5cGUpCiAgICAgaWYgKG1fc3BhcnNlVmFsdWVNYXApIHsKICAgICAg
ICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9zcGFyc2VWYWx1
ZU1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX3NwYXJzZVZhbHVlTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
LSAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gaXQtPmZpcnN0OworICAgICAgICAgICAgdW5z
aWduZWQgaW5kZXggPSBpdC0+a2V5OwogICAgICAgICAgICAgQVNTRVJUKGluZGV4IDwgc3RvcmFn
ZS0+bV9sZW5ndGgpOwogICAgICAgICAgICAgQVNTRVJUKGluZGV4ID49IG1fdmVjdG9yTGVuZ3Ro
KTsKICAgICAgICAgICAgIEFTU0VSVChpbmRleCA8PSBNQVhfQVJSQVlfSU5ERVgpOwotICAgICAg
ICAgICAgQVNTRVJUKGl0LT5zZWNvbmQpOworICAgICAgICAgICAgQVNTRVJUKGl0LT52YWx1ZSk7
CiAgICAgICAgICAgICBpZiAodHlwZSAhPSBEZXN0cnVjdG9yQ29uc2lzdGVuY3lDaGVjaykKLSAg
ICAgICAgICAgICAgICBpdC0+c2Vjb25kLmdldE5vblNwYXJzZU1vZGUoKS5pc1VuZGVmaW5lZCgp
OyAvLyBMaWtlbHkgdG8gY3Jhc2ggaWYgdGhlIG9iamVjdCB3YXMgZGVhbGxvY2F0ZWQuCisgICAg
ICAgICAgICAgICAgaXQtPnZhbHVlLmdldE5vblNwYXJzZU1vZGUoKS5pc1VuZGVmaW5lZCgpOyAv
LyBMaWtlbHkgdG8gY3Jhc2ggaWYgdGhlIG9iamVjdCB3YXMgZGVhbGxvY2F0ZWQuCiAgICAgICAg
IH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1N5bWJvbFRhYmxlT2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U3ltYm9sVGFibGVPYmplY3QuY3BwCmluZGV4IDkyN2FkMjVjZmU5NzQ1NTYwNWZjODNlMjJhZmNj
OTI3MzkyNGE2MjcuLmNmMWE0NGM2ODFhOWMxMTEzM2VhNWQ2MDg3OTkxOWY1NjdiNzA0OWMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmpl
Y3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVP
YmplY3QuY3BwCkBAIC01NSw4ICs1NSw4IEBAIHZvaWQgSlNTeW1ib2xUYWJsZU9iamVjdDo6Z2V0
T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsCiAgICAg
SlNTeW1ib2xUYWJsZU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1N5bWJvbFRhYmxlT2Jq
ZWN0Kj4ob2JqZWN0KTsKICAgICBTeW1ib2xUYWJsZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gdGhp
c09iamVjdC0+c3ltYm9sVGFibGUoKS5lbmQoKTsKICAgICBmb3IgKFN5bWJvbFRhYmxlOjpjb25z
dF9pdGVyYXRvciBpdCA9IHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCkuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmICghKGl0LT5zZWNvbmQuZ2V0QXR0cmlidXRlcygpICYg
RG9udEVudW0pIHx8IChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpKQotICAgICAg
ICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihleGVjLCBpdC0+Zmlyc3QuZ2V0KCkp
KTsKKyAgICAgICAgaWYgKCEoaXQtPnZhbHVlLmdldEF0dHJpYnV0ZXMoKSAmIERvbnRFbnVtKSB8
fCAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKSkKKyAgICAgICAgICAgIHByb3Bl
cnR5TmFtZXMuYWRkKElkZW50aWZpZXIoZXhlYywgaXQtPmtleS5nZXQoKSkpOwogICAgIH0KICAg
ICAKICAgICBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBw
cm9wZXJ0eU5hbWVzLCBtb2RlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAppbmRleCAyYmJlMjFkMDY1N2NmNjEwMzY0NmNmZTU4
MWNlYjA0MGUwNjU1NjYxLi5kZjE1MjQ4NTNkNTM4ODUwNTM5YmY4Yzc0OGY5NzYxMDM3ZmRlZDE4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxl
T2JqZWN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJs
ZU9iamVjdC5oCkBAIC03Niw3ICs3Niw3IEBAIGlubGluZSBib29sIHN5bWJvbFRhYmxlR2V0KAog
ICAgIFN5bWJvbFRhYmxlOjppdGVyYXRvciBpdGVyID0gc3ltYm9sVGFibGUuZmluZChwcm9wZXJ0
eU5hbWUucHVibGljTmFtZSgpKTsKICAgICBpZiAoaXRlciA9PSBzeW1ib2xUYWJsZS5lbmQoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFN5bWJvbFRhYmxlRW50cnk6OkZhc3QgZW50cnkg
PSBpdGVyLT5zZWNvbmQ7CisgICAgU3ltYm9sVGFibGVFbnRyeTo6RmFzdCBlbnRyeSA9IGl0ZXIt
PnZhbHVlOwogICAgIEFTU0VSVCghZW50cnkuaXNOdWxsKCkpOwogICAgIHNsb3Quc2V0VmFsdWUo
b2JqZWN0LT5yZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpLmdldCgpKTsKICAgICByZXR1cm4g
dHJ1ZTsKQEAgLTkwLDcgKzkwLDcgQEAgaW5saW5lIGJvb2wgc3ltYm9sVGFibGVHZXQoCiAgICAg
U3ltYm9sVGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSBzeW1ib2xUYWJsZS5maW5kKHByb3BlcnR5TmFt
ZS5wdWJsaWNOYW1lKCkpOwogICAgIGlmIChpdGVyID09IHN5bWJvbFRhYmxlLmVuZCgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgU3ltYm9sVGFibGVFbnRyeTo6RmFzdCBlbnRyeSA9IGl0
ZXItPnNlY29uZDsKKyAgICBTeW1ib2xUYWJsZUVudHJ5OjpGYXN0IGVudHJ5ID0gaXRlci0+dmFs
dWU7CiAgICAgQVNTRVJUKCFlbnRyeS5pc051bGwoKSk7CiAgICAgZGVzY3JpcHRvci5zZXREZXNj
cmlwdG9yKAogICAgICAgICBvYmplY3QtPnJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuZ2V0
KCksIGVudHJ5LmdldEF0dHJpYnV0ZXMoKSB8IERvbnREZWxldGUpOwpAQCAtMTA2LDcgKzEwNiw3
IEBAIGlubGluZSBib29sIHN5bWJvbFRhYmxlR2V0KAogICAgIFN5bWJvbFRhYmxlOjppdGVyYXRv
ciBpdGVyID0gc3ltYm9sVGFibGUuZmluZChwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpKTsKICAg
ICBpZiAoaXRlciA9PSBzeW1ib2xUYWJsZS5lbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIFN5bWJvbFRhYmxlRW50cnk6OkZhc3QgZW50cnkgPSBpdGVyLT5zZWNvbmQ7CisgICAgU3lt
Ym9sVGFibGVFbnRyeTo6RmFzdCBlbnRyeSA9IGl0ZXItPnZhbHVlOwogICAgIEFTU0VSVCghZW50
cnkuaXNOdWxsKCkpOwogICAgIHNsb3Quc2V0VmFsdWUob2JqZWN0LT5yZWdpc3RlckF0KGVudHJ5
LmdldEluZGV4KCkpLmdldCgpKTsKICAgICBzbG90SXNXcml0ZWFibGUgPSAhZW50cnkuaXNSZWFk
T25seSgpOwpAQCAtMTI2LDcgKzEyNiw3IEBAIGlubGluZSBib29sIHN5bWJvbFRhYmxlUHV0KAog
ICAgIGlmIChpdGVyID09IHN5bWJvbFRhYmxlLmVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgYm9vbCB3YXNGYXQ7Ci0gICAgU3ltYm9sVGFibGVFbnRyeTo6RmFzdCBmYXN0RW50cnkg
PSBpdGVyLT5zZWNvbmQuZ2V0RmFzdCh3YXNGYXQpOworICAgIFN5bWJvbFRhYmxlRW50cnk6OkZh
c3QgZmFzdEVudHJ5ID0gaXRlci0+dmFsdWUuZ2V0RmFzdCh3YXNGYXQpOwogICAgIEFTU0VSVCgh
ZmFzdEVudHJ5LmlzTnVsbCgpKTsKICAgICBpZiAoZmFzdEVudHJ5LmlzUmVhZE9ubHkoKSkgewog
ICAgICAgICBpZiAoc2hvdWxkVGhyb3cpCkBAIC0xMzQsNyArMTM0LDcgQEAgaW5saW5lIGJvb2wg
c3ltYm9sVGFibGVQdXQoCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBpZiAoVU5M
SUtFTFkod2FzRmF0KSkKLSAgICAgICAgaXRlci0+c2Vjb25kLm5vdGlmeVdyaXRlKCk7CisgICAg
ICAgIGl0ZXItPnZhbHVlLm5vdGlmeVdyaXRlKCk7CiAgICAgb2JqZWN0LT5yZWdpc3RlckF0KGZh
c3RFbnRyeS5nZXRJbmRleCgpKS5zZXQoZ2xvYmFsRGF0YSwgb2JqZWN0LCB2YWx1ZSk7CiAgICAg
cmV0dXJuIHRydWU7CiB9CkBAIC0xNDksNyArMTQ5LDcgQEAgaW5saW5lIGJvb2wgc3ltYm9sVGFi
bGVQdXRXaXRoQXR0cmlidXRlcygKICAgICBTeW1ib2xUYWJsZTo6aXRlcmF0b3IgaXRlciA9IG9i
amVjdC0+c3ltYm9sVGFibGUoKS5maW5kKHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCkpOwogICAg
IGlmIChpdGVyID09IG9iamVjdC0+c3ltYm9sVGFibGUoKS5lbmQoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIFN5bWJvbFRhYmxlRW50cnkmIGVudHJ5ID0gaXRlci0+c2Vjb25kOworICAg
IFN5bWJvbFRhYmxlRW50cnkmIGVudHJ5ID0gaXRlci0+dmFsdWU7CiAgICAgQVNTRVJUKCFlbnRy
eS5pc051bGwoKSk7CiAgICAgZW50cnkubm90aWZ5V3JpdGUoKTsKICAgICBlbnRyeS5zZXRBdHRy
aWJ1dGVzKGF0dHJpYnV0ZXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUmVnRXhwQ2FjaGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVn
RXhwQ2FjaGUuY3BwCmluZGV4IDUzYTEzYTRiNTliNzdlNzZhNGI4ODBjZmU3NWIzNjA2Yzg3ZTFm
YWQuLmFiNGY5ODc4YTk5OThkNDk4NDAyZTZiNGRjZTcwOWJkMjhlMmNlZTggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZS5jcHAKQEAgLTgwLDcgKzgwLDcg
QEAgdm9pZCBSZWdFeHBDYWNoZTo6aW52YWxpZGF0ZUNvZGUoKQogCiAgICAgUmVnRXhwQ2FjaGVN
YXA6Oml0ZXJhdG9yIGVuZCA9IG1fd2Vha0NhY2hlLmVuZCgpOwogICAgIGZvciAoUmVnRXhwQ2Fj
aGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV93ZWFrQ2FjaGUuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7Ci0gICAgICAgIFJlZ0V4cCogcmVnRXhwID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAg
UmVnRXhwKiByZWdFeHAgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgIGlmICghcmVnRXhwKSAv
LyBTa2lwIHpvbWJpZXMuCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgcmVnRXhwLT5p
bnZhbGlkYXRlQ29kZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvV2Vha0dDTWFwLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrR0NNYXAu
aAppbmRleCA2OTI2MTY1YTc4NWE3NjdkYTM3N2FjZWIyNTM5NzBjZWMzYjlhOTQ4Li41MmU1ZTI5
NDZmZDEwM2I3ZmVhZjYyMWY2ZmQyYTUwZDA1MzQ5ZDAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9XZWFrR0NNYXAuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9XZWFrR0NNYXAuaApAQCAtNjMsNyArNjMsNyBAQCBwdWJsaWM6CiAgICAgewog
ICAgICAgICB0eXBlbmFtZSBNYXBUeXBlOjppdGVyYXRvciBlbmQgPSBtX21hcC5lbmQoKTsKICAg
ICAgICAgZm9yICh0eXBlbmFtZSBNYXBUeXBlOjppdGVyYXRvciBwdHIgPSBtX21hcC5iZWdpbigp
OyBwdHIgIT0gZW5kOyArK3B0cikKLSAgICAgICAgICAgIFdlYWtTZXQ6OmRlYWxsb2NhdGUocHRy
LT5zZWNvbmQpOworICAgICAgICAgICAgV2Vha1NldDo6ZGVhbGxvY2F0ZShwdHItPnZhbHVlKTsK
ICAgICAgICAgbV9tYXAuY2xlYXIoKTsKICAgICB9CiAKQEAgLTgwLDggKzgwLDggQEAgcHVibGlj
OgogICAgICAgICBBU1NFUlRfVU5VU0VEKGdsb2JhbERhdGEsIGdsb2JhbERhdGEuYXBpTG9jaygp
LmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpOwogICAgICAgICB0eXBlbmFtZSBNYXBUeXBl
OjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9tYXAuYWRkKGtleSwgMCk7CiAgICAgICAgIGlmICghcmVz
dWx0LmlzTmV3RW50cnkpCi0gICAgICAgICAgICBXZWFrU2V0OjpkZWFsbG9jYXRlKHJlc3VsdC5p
dGVyYXRvci0+c2Vjb25kKTsKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBXZWFr
U2V0OjphbGxvY2F0ZSh2YWx1ZSwgdGhpcywgRmluYWxpemVyQ2FsbGJhY2s6OmZpbmFsaXplckNv
bnRleHRGb3Ioa2V5KSk7CisgICAgICAgICAgICBXZWFrU2V0OjpkZWFsbG9jYXRlKHJlc3VsdC5p
dGVyYXRvci0+dmFsdWUpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gV2Vha1Nl
dDo6YWxsb2NhdGUodmFsdWUsIHRoaXMsIEZpbmFsaXplckNhbGxiYWNrOjpmaW5hbGl6ZXJDb250
ZXh0Rm9yKGtleSkpOwogICAgIH0KIAogICAgIHZvaWQgcmVtb3ZlKGNvbnN0IEtleVR5cGUmIGtl
eSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Qcm9maWxlVHJlZU5v
ZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Qcm9maWxlVHJlZU5vZGUuaAppbmRl
eCA3YjUxZWZiODVkYjM0NDFhMjIyNjNiNDI0OTdhMzE3NTJiNWI1MmZkLi43YjVhOTVlYzQwNDRi
NjNmMjExMTM2MTIyZDkyM2NhODg5NDYwYTM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvdG9vbHMvUHJvZmlsZVRyZWVOb2RlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rvb2xzL1Byb2ZpbGVUcmVlTm9kZS5oCkBAIC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICAK
ICAgICAgICAgUHJvZmlsZVRyZWVOb2RlIG5ld0VudHJ5OwogICAgICAgICBNYXA6OkFkZFJlc3Vs
dCByZXN1bHQgPSBtX2NoaWxkcmVuLT5hZGQoU3RyaW5nKG5hbWUpLCBuZXdFbnRyeSk7Ci0gICAg
ICAgIFByb2ZpbGVUcmVlTm9kZSogY2hpbGRJbk1hcCA9ICZyZXN1bHQuaXRlcmF0b3ItPnNlY29u
ZDsKKyAgICAgICAgUHJvZmlsZVRyZWVOb2RlKiBjaGlsZEluTWFwID0gJnJlc3VsdC5pdGVyYXRv
ci0+dmFsdWU7CiAgICAgICAgICsrY2hpbGRJbk1hcC0+bV9jb3VudDsKICAgICAgICAgcmV0dXJu
IGNoaWxkSW5NYXA7CiAgICAgfQpAQCAtNzIsNyArNzIsNyBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICByZXR1cm4gMDsKICAgICAgICAgdWludDY0X3QgY2hpbGRDb3VudCA9IDA7CiAgICAgICAgIGZv
ciAoTWFwOjppdGVyYXRvciBpdCA9IG1fY2hpbGRyZW4tPmJlZ2luKCk7IGl0ICE9IG1fY2hpbGRy
ZW4tPmVuZCgpOyArK2l0KQotICAgICAgICAgICAgY2hpbGRDb3VudCArPSBpdC0+c2Vjb25kLmNv
dW50KCk7CisgICAgICAgICAgICBjaGlsZENvdW50ICs9IGl0LT52YWx1ZS5jb3VudCgpOwogICAg
ICAgICByZXR1cm4gY2hpbGRDb3VudDsKICAgICB9CiAgICAgCkBAIC05NywxOSArOTcsMTkgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbmRlbnQ7ICsr
aSkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgIik7CiAgICAgICAgICAgICBkYXRhTG9n
KCIlIDhsbGQ6ICVzICglbGxkIHN0YWNrIHRvcClcbiIsCi0gICAgICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8bG9uZyBsb25nPihlbnRyeS0+c2Vjb25kLmNvdW50KCkpLAotICAgICAgICAgICAgICAg
IGVudHJ5LT5maXJzdC51dGY4KCkuZGF0YSgpLAotICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0
PGxvbmcgbG9uZz4oZW50cnktPnNlY29uZC5jb3VudCgpIC0gZW50cnktPnNlY29uZC5jaGlsZENv
dW50KCkpKTsKKyAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KGVudHJ5LT52
YWx1ZS5jb3VudCgpKSwKKyAgICAgICAgICAgICAgICBlbnRyeS0+a2V5LnV0ZjgoKS5kYXRhKCks
CisgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihlbnRyeS0+dmFsdWUuY291
bnQoKSAtIGVudHJ5LT52YWx1ZS5jaGlsZENvdW50KCkpKTsKIAogICAgICAgICAgICAgLy8gUmVj
dXJzaXZlbHkgZHVtcCB0aGUgY2hpbGQgbm9kZXMuCi0gICAgICAgICAgICBlbnRyeS0+c2Vjb25k
LmR1bXBJbnRlcm5hbChpbmRlbnQgKyAxKTsKKyAgICAgICAgICAgIGVudHJ5LT52YWx1ZS5kdW1w
SW50ZXJuYWwoaW5kZW50ICsgMSk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBzdGF0aWMgaW50
IGNvbXBhcmVFbnRyaWVzKGNvbnN0IHZvaWQqIGEsIGNvbnN0IHZvaWQqIGIpCiAgICAgewotICAg
ICAgICB1aW50NjRfdCBkYSA9ICgqc3RhdGljX2Nhc3Q8TWFwRW50cnkqIGNvbnN0ICo+KGEpKS0+
c2Vjb25kLmNvdW50KCk7Ci0gICAgICAgIHVpbnQ2NF90IGRiID0gKCpzdGF0aWNfY2FzdDxNYXBF
bnRyeSogY29uc3QgKj4oYikpLT5zZWNvbmQuY291bnQoKTsKKyAgICAgICAgdWludDY0X3QgZGEg
PSAoKnN0YXRpY19jYXN0PE1hcEVudHJ5KiBjb25zdCAqPihhKSktPnZhbHVlLmNvdW50KCk7Cisg
ICAgICAgIHVpbnQ2NF90IGRiID0gKCpzdGF0aWNfY2FzdDxNYXBFbnRyeSogY29uc3QgKj4oYikp
LT52YWx1ZS5jb3VudCgpOwogICAgICAgICByZXR1cm4gKGRhIDwgZGIpIC0gKGRhID4gZGIpOwog
ICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvSGFzaENvdW50ZWRTZXQuaCBiL1Nv
dXJjZS9XVEYvd3RmL0hhc2hDb3VudGVkU2V0LmgKaW5kZXggZWY4OWJkYmM3NTI2MTg1ZGUwMTc1
M2UwM2U5ZjZiMGI3N2UzZTAxZC4uZWZmNGEyOTNlOWM3MzliMTJjNDNiNjg5MTI2ZDBjODQ1MGJj
ZDAwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvSGFzaENvdW50ZWRTZXQuaAorKysgYi9T
b3VyY2UvV1RGL3d0Zi9IYXNoQ291bnRlZFNldC5oCkBAIC0xNTQsNyArMTU0LDcgQEAgbmFtZXNw
YWNlIFdURiB7CiAgICAgaW5saW5lIHR5cGVuYW1lIEhhc2hDb3VudGVkU2V0PFZhbHVlLCBIYXNo
RnVuY3Rpb25zLCBUcmFpdHM+OjpBZGRSZXN1bHQgSGFzaENvdW50ZWRTZXQ8VmFsdWUsIEhhc2hG
dW5jdGlvbnMsIFRyYWl0cz46OmFkZChjb25zdCBWYWx1ZVR5cGUgJnZhbHVlKQogICAgIHsKICAg
ICAgICAgQWRkUmVzdWx0IHJlc3VsdCA9IG1faW1wbC5hZGQodmFsdWUsIDApOwotICAgICAgICAr
K3Jlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICArK3Jlc3VsdC5pdGVyYXRvci0+dmFs
dWU7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIApAQCAtMTcwLDExICsxNzAs
MTEgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIGlmIChpdCA9PSBlbmQoKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICB1bnNpZ25lZCBvbGRWYWwgPSBpdC0+c2Vjb25k
OworICAgICAgICB1bnNpZ25lZCBvbGRWYWwgPSBpdC0+dmFsdWU7CiAgICAgICAgIEFTU0VSVChv
bGRWYWwpOwogICAgICAgICB1bnNpZ25lZCBuZXdWYWwgPSBvbGRWYWwgLSAxOwogICAgICAgICBp
ZiAobmV3VmFsKSB7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kID0gbmV3VmFsOworICAgICAgICAg
ICAgaXQtPnZhbHVlID0gbmV3VmFsOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICB9CiAKQEAgLTIyNiw3ICsyMjYsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgaXRlcmF0
b3IgaXQgPSBjb2xsZWN0aW9uLmJlZ2luKCk7CiAgICAgICAgIGl0ZXJhdG9yIGVuZCA9IGNvbGxl
Y3Rpb24uZW5kKCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGl0ICE9IGVuZDsgKytp
dCwgKytpKQotICAgICAgICAgICAgdmVjdG9yW2ldID0gKCppdCkuZmlyc3Q7CisgICAgICAgICAg
ICB2ZWN0b3JbaV0gPSAoKml0KS5rZXk7CiAgICAgfQogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL0hhc2hJdGVyYXRvcnMuaCBiL1NvdXJjZS9XVEYvd3RmL0hhc2hJdGVyYXRvcnMuaApp
bmRleCA2MzlmZjcyNTBhMWVmMGZiM2Y4MjRkYzkxNjg4NDk2Yjg5YjY1ZTE3Li4zYTg0MThhYWRl
Zjc4M2I5YWJjMDM0YTllZTBhNGFlN2FiOGIxNmExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi9IYXNoSXRlcmF0b3JzLmgKKysrIGIvU291cmNlL1dURi93dGYvSGFzaEl0ZXJhdG9ycy5oCkBA
IC05MSw3ICs5MSw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgIHB1YmxpYzoKICAgICAgICAgSGFz
aFRhYmxlQ29uc3RLZXlzSXRlcmF0b3IoY29uc3QgQ29uc3RJdGVyYXRvciYgaW1wbCkgOiBtX2lt
cGwoaW1wbCkge30KICAgICAgICAgCi0gICAgICAgIGNvbnN0IEtleVR5cGUqIGdldCgpIGNvbnN0
IHsgcmV0dXJuICYobV9pbXBsLmdldCgpLT5maXJzdCk7IH0KKyAgICAgICAgY29uc3QgS2V5VHlw
ZSogZ2V0KCkgY29uc3QgeyByZXR1cm4gJihtX2ltcGwuZ2V0KCktPmtleSk7IH0KICAgICAgICAg
Y29uc3QgS2V5VHlwZSYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKmdldCgpOyB9CiAgICAg
ICAgIGNvbnN0IEtleVR5cGUqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBnZXQoKTsgfQog
CkBAIC0xMDgsNyArMTA4LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgcHVibGljOgogICAgICAg
ICBIYXNoVGFibGVDb25zdFZhbHVlc0l0ZXJhdG9yKGNvbnN0IENvbnN0SXRlcmF0b3ImIGltcGwp
IDogbV9pbXBsKGltcGwpIHt9CiAgICAgICAgIAotICAgICAgICBjb25zdCBNYXBwZWRUeXBlKiBn
ZXQoKSBjb25zdCB7IHJldHVybiAmKG1faW1wbC5nZXQoKS0+c2Vjb25kKTsgfQorICAgICAgICBj
b25zdCBNYXBwZWRUeXBlKiBnZXQoKSBjb25zdCB7IHJldHVybiAmKG1faW1wbC5nZXQoKS0+dmFs
dWUpOyB9CiAgICAgICAgIGNvbnN0IE1hcHBlZFR5cGUmIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0
dXJuICpnZXQoKTsgfQogICAgICAgICBjb25zdCBNYXBwZWRUeXBlKiBvcGVyYXRvci0+KCkgY29u
c3QgeyByZXR1cm4gZ2V0KCk7IH0KIApAQCAtMTQ5LDcgKzE0OSw3IEBAIG5hbWVzcGFjZSBXVEYg
ewogICAgIHB1YmxpYzoKICAgICAgICAgSGFzaFRhYmxlVmFsdWVzSXRlcmF0b3IoY29uc3QgSXRl
cmF0b3ImIGltcGwpIDogbV9pbXBsKGltcGwpIHt9CiAgICAgICAgIAotICAgICAgICBNYXBwZWRU
eXBlKiBnZXQoKSBjb25zdCB7IHJldHVybiAmKG1faW1wbC5nZXQoKS0+c2Vjb25kKTsgfQorICAg
ICAgICBNYXBwZWRUeXBlKiBnZXQoKSBjb25zdCB7IHJldHVybiAmKG1faW1wbC5nZXQoKS0+dmFs
dWUpOyB9CiAgICAgICAgIE1hcHBlZFR5cGUmIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICpn
ZXQoKTsgfQogICAgICAgICBNYXBwZWRUeXBlKiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4g
Z2V0KCk7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvSGFzaE1hcC5oIGIvU291cmNl
L1dURi93dGYvSGFzaE1hcC5oCmluZGV4IDkwMTA0NzRjODI1NTYzZWY4NDFiOTY4N2ZlZmY0OTRh
YTY1NWI0ZTguLjEwZWU0MjVkYTk1OTZiYWFkZjM0ZTU3OGVmNWFiZTU3MGY5YWUwZDYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0hhc2hNYXAuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9IYXNo
TWFwLmgKQEAgLTM1LDcgKzM1LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgfTsKIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBLZXlWYWx1ZVBhaXJLZXlFeHRyYWN0b3IgewotICAg
ICAgICBzdGF0aWMgY29uc3QgdHlwZW5hbWUgVDo6S2V5VHlwZSYgZXh0cmFjdChjb25zdCBUJiBw
KSB7IHJldHVybiBwLmZpcnN0OyB9CisgICAgICAgIHN0YXRpYyBjb25zdCB0eXBlbmFtZSBUOjpL
ZXlUeXBlJiBleHRyYWN0KGNvbnN0IFQmIHApIHsgcmV0dXJuIHAua2V5OyB9CiAgICAgfTsKIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFt
ZSBIYXNoQXJnID0gdHlwZW5hbWUgRGVmYXVsdEhhc2g8S2V5QXJnPjo6SGFzaCwKQEAgLTIxMSw3
ICsyMTEsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz
SXNFbXB0eVZhbHVlRnVuY3Rpb24gPSB0cnVlOwogICAgICAgICBzdGF0aWMgYm9vbCBpc0VtcHR5
VmFsdWUoY29uc3QgdHlwZW5hbWUgS2V5VmFsdWVQYWlySGFzaFRyYWl0czxLZXlUcmFpdHMsIE1h
cHBlZFRyYWl0cz46OlRyYWl0VHlwZSYgdmFsdWUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBpc0hhc2hUcmFpdHNFbXB0eVZhbHVlPEtleVRyYWl0cz4odmFsdWUuZmlyc3QpOworICAg
ICAgICAgICAgcmV0dXJuIGlzSGFzaFRyYWl0c0VtcHR5VmFsdWU8S2V5VHJhaXRzPih2YWx1ZS5r
ZXkpOwogICAgICAgICB9CiAgICAgfTsKIApAQCAtMjIxLDggKzIyMSw4IEBAIG5hbWVzcGFjZSBX
VEYgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBzdGF0aWMgYm9v
bCBlcXVhbChjb25zdCBUJiBhLCBjb25zdCBVJiBiKSB7IHJldHVybiBIYXNoRnVuY3Rpb25zOjpl
cXVhbChhLCBiKTsgfQogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0
eXBlbmFtZSBWPiBzdGF0aWMgdm9pZCB0cmFuc2xhdGUoVCYgbG9jYXRpb24sIGNvbnN0IFUmIGtl
eSwgY29uc3QgViYgbWFwcGVkKQogICAgICAgICB7Ci0gICAgICAgICAgICBsb2NhdGlvbi5maXJz
dCA9IGtleTsKLSAgICAgICAgICAgIFZhbHVlVHJhaXRzOjpWYWx1ZVRyYWl0czo6c3RvcmUobWFw
cGVkLCBsb2NhdGlvbi5zZWNvbmQpOworICAgICAgICAgICAgbG9jYXRpb24ua2V5ID0ga2V5Owor
ICAgICAgICAgICAgVmFsdWVUcmFpdHM6OlZhbHVlVHJhaXRzOjpzdG9yZShtYXBwZWQsIGxvY2F0
aW9uLnZhbHVlKTsKICAgICAgICAgfQogICAgIH07CiAKQEAgLTIzMiw4ICsyMzIsOCBAQCBuYW1l
c3BhY2UgV1RGIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gc3Rh
dGljIGJvb2wgZXF1YWwoY29uc3QgVCYgYSwgY29uc3QgVSYgYikgeyByZXR1cm4gVHJhbnNsYXRv
cjo6ZXF1YWwoYSwgYik7IH0KICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgVj4gc3RhdGljIHZvaWQgdHJhbnNsYXRlKFQmIGxvY2F0aW9uLCBjb25zdCBV
JiBrZXksIGNvbnN0IFYmIG1hcHBlZCwgdW5zaWduZWQgaGFzaENvZGUpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIFRyYW5zbGF0b3I6OnRyYW5zbGF0ZShsb2NhdGlvbi5maXJzdCwga2V5LCBoYXNo
Q29kZSk7Ci0gICAgICAgICAgICBWYWx1ZVRyYWl0czo6VmFsdWVUcmFpdHM6OnN0b3JlKG1hcHBl
ZCwgbG9jYXRpb24uc2Vjb25kKTsKKyAgICAgICAgICAgIFRyYW5zbGF0b3I6OnRyYW5zbGF0ZShs
b2NhdGlvbi5rZXksIGtleSwgaGFzaENvZGUpOworICAgICAgICAgICAgVmFsdWVUcmFpdHM6OlZh
bHVlVHJhaXRzOjpzdG9yZShtYXBwZWQsIGxvY2F0aW9uLnZhbHVlKTsKICAgICAgICAgfQogICAg
IH07CiAKQEAgLTM0MSw3ICszNDEsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgQWRkUmVz
dWx0IHJlc3VsdCA9IGlubGluZUFkZChrZXksIG1hcHBlZCk7CiAgICAgICAgIGlmICghcmVzdWx0
LmlzTmV3RW50cnkpIHsKICAgICAgICAgICAgIC8vIFRoZSBpbmxpbmVBZGQgY2FsbCBhYm92ZSBm
b3VuZCBhbiBleGlzdGluZyBoYXNoIHRhYmxlIGVudHJ5OyB3ZSBuZWVkIHRvIHNldCB0aGUgbWFw
cGVkIHZhbHVlLgotICAgICAgICAgICAgTWFwcGVkVHJhaXRzOjpzdG9yZShtYXBwZWQsIHJlc3Vs
dC5pdGVyYXRvci0+c2Vjb25kKTsKKyAgICAgICAgICAgIE1hcHBlZFRyYWl0czo6c3RvcmUobWFw
cGVkLCByZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgIH0KQEAgLTM2OCw3ICszNjgsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAg
ICAgVmFsdWVUeXBlKiBlbnRyeSA9IGNvbnN0X2Nhc3Q8SGFzaFRhYmxlVHlwZSY+KG1faW1wbCku
bG9va3VwKGtleSk7CiAgICAgICAgIGlmICghZW50cnkpCiAgICAgICAgICAgICByZXR1cm4gTWFw
cGVkVHJhaXRzOjpwZWVrKE1hcHBlZFRyYWl0czo6ZW1wdHlWYWx1ZSgpKTsKLSAgICAgICAgcmV0
dXJuIE1hcHBlZFRyYWl0czo6cGVlayhlbnRyeS0+c2Vjb25kKTsKKyAgICAgICAgcmV0dXJuIE1h
cHBlZFRyYWl0czo6cGVlayhlbnRyeS0+dmFsdWUpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+
CkBAIC0zOTksNyArMzk5LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIGl0ZXJhdG9yIGl0
ID0gZmluZChrZXkpOwogICAgICAgICBpZiAoaXQgPT0gZW5kKCkpCiAgICAgICAgICAgICByZXR1
cm4gTWFwcGVkVHJhaXRzOjpwYXNzT3V0KE1hcHBlZFRyYWl0czo6ZW1wdHlWYWx1ZSgpKTsKLSAg
ICAgICAgTWFwcGVkUGFzc091dFR5cGUgcmVzdWx0ID0gTWFwcGVkVHJhaXRzOjpwYXNzT3V0KGl0
LT5zZWNvbmQpOworICAgICAgICBNYXBwZWRQYXNzT3V0VHlwZSByZXN1bHQgPSBNYXBwZWRUcmFp
dHM6OnBhc3NPdXQoaXQtPnZhbHVlKTsKICAgICAgICAgcmVtb3ZlKGl0KTsKICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICB9CkBAIC00MjEsOCArNDIxLDggQEAgbmFtZXNwYWNlIFdURiB7CiAg
ICAgICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCA9IGEuZW5kKCk7CiAgICAgICAgIGNvbnN0X2l0ZXJh
dG9yIG5vdEZvdW5kID0gYi5lbmQoKTsKICAgICAgICAgZm9yIChjb25zdF9pdGVyYXRvciBpdCA9
IGEuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBjb25zdF9pdGVyYXRv
ciBiUG9zID0gYi5maW5kKGl0LT5maXJzdCk7Ci0gICAgICAgICAgICBpZiAoYlBvcyA9PSBub3RG
b3VuZCB8fCBpdC0+c2Vjb25kICE9IGJQb3MtPnNlY29uZCkKKyAgICAgICAgICAgIGNvbnN0X2l0
ZXJhdG9yIGJQb3MgPSBiLmZpbmQoaXQtPmtleSk7CisgICAgICAgICAgICBpZiAoYlBvcyA9PSBu
b3RGb3VuZCB8fCBpdC0+dmFsdWUgIT0gYlBvcy0+dmFsdWUpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICB9CiAKQEAgLTQzNSwzNCArNDM1LDIyIEBAIG5hbWVzcGFjZSBX
VEYgewogICAgICAgICByZXR1cm4gIShhID09IGIpOwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEhhc2hUYWJsZVR5cGU+Ci0gICAgdm9pZCBkZWxldGVBbGxQYWlyU2Vjb25kcyhIYXNo
VGFibGVUeXBlJiBjb2xsZWN0aW9uKQotICAgIHsKLSAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBI
YXNoVGFibGVUeXBlOjpjb25zdF9pdGVyYXRvciBpdGVyYXRvcjsKLSAgICAgICAgaXRlcmF0b3Ig
ZW5kID0gY29sbGVjdGlvbi5lbmQoKTsKLSAgICAgICAgZm9yIChpdGVyYXRvciBpdCA9IGNvbGxl
Y3Rpb24uYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgZGVsZXRlIGl0LT5z
ZWNvbmQ7Ci0gICAgfQotCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlw
ZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KICAgICBpbmxpbmUgdm9pZCBkZWxldGVB
bGxWYWx1ZXMoY29uc3QgSGFzaE1hcDxULCBVLCBWLCBXLCBYPiYgY29sbGVjdGlvbikKICAgICB7
Ci0gICAgICAgIGRlbGV0ZUFsbFBhaXJTZWNvbmRzKGNvbGxlY3Rpb24pOwotICAgIH0KLQotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZVR5cGU+Ci0gICAgdm9pZCBkZWxldGVBbGxQYWly
Rmlyc3RzKEhhc2hUYWJsZVR5cGUmIGNvbGxlY3Rpb24pCi0gICAgewotICAgICAgICB0eXBlZGVm
IHR5cGVuYW1lIEhhc2hUYWJsZVR5cGU6OmNvbnN0X2l0ZXJhdG9yIGl0ZXJhdG9yOworICAgICAg
ICB0eXBlZGVmIHR5cGVuYW1lIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmNvbnN0X2l0ZXJhdG9y
IGl0ZXJhdG9yOwogICAgICAgICBpdGVyYXRvciBlbmQgPSBjb2xsZWN0aW9uLmVuZCgpOwogICAg
ICAgICBmb3IgKGl0ZXJhdG9yIGl0ID0gY29sbGVjdGlvbi5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpCi0gICAgICAgICAgICBkZWxldGUgaXQtPmZpcnN0OworICAgICAgICAgICAgZGVsZXRlIGl0
LT52YWx1ZTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0
eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgogICAgIGlubGluZSB2b2lkIGRlbGV0
ZUFsbEtleXMoY29uc3QgSGFzaE1hcDxULCBVLCBWLCBXLCBYPiYgY29sbGVjdGlvbikKICAgICB7
Ci0gICAgICAgIGRlbGV0ZUFsbFBhaXJGaXJzdHMoY29sbGVjdGlvbik7CisgICAgICAgIHR5cGVk
ZWYgdHlwZW5hbWUgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6Y29uc3RfaXRlcmF0b3IgaXRlcmF0
b3I7CisgICAgICAgIGl0ZXJhdG9yIGVuZCA9IGNvbGxlY3Rpb24uZW5kKCk7CisgICAgICAgIGZv
ciAoaXRlcmF0b3IgaXQgPSBjb2xsZWN0aW9uLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAg
ICAgICAgICAgIGRlbGV0ZSBpdC0+a2V5OwogICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0
eXBlbmFtZSBZPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmggYi9Tb3Vy
Y2UvV1RGL3d0Zi9IYXNoVGFibGUuaAppbmRleCAxY2UzYzVjZjY4OGVmMGE4MWUxMDYxYmM2Y2Uy
NjIwYmUzZDk4MDBlLi4xNmZkZDllODFkMjgzYjY5ZTYxZDQ2YmE2Zjk1ZmQxMmUyNDY5YzY2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi9IYXNoVGFibGUuaApAQCAtMjg2LDggKzI4Niw4IEBAIG5hbWVzcGFjZSBXVEYgewogCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIHZvaWQgaGFzaFRhYmxlU3dh
cChLZXlWYWx1ZVBhaXI8VCwgVT4mIGEsIEtleVZhbHVlUGFpcjxULCBVPiYgYikKICAgICB7Ci0g
ICAgICAgIHN3YXAoYS5maXJzdCwgYi5maXJzdCk7Ci0gICAgICAgIHN3YXAoYS5zZWNvbmQsIGIu
c2Vjb25kKTsKKyAgICAgICAgc3dhcChhLmtleSwgYi5rZXkpOworICAgICAgICBzd2FwKGEudmFs
dWUsIGIudmFsdWUpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIGJvb2wgdXNl
U3dhcD4gc3RydWN0IE1vdmVyOwpAQCAtMTI0Niw3ICsxMjQ2LDcgQEAgbmFtZXNwYWNlIFdURiB7
CiAgICAgICAgICAgICBBU1NFUlQoZW50cnkgPT0gaXQubV9wb3NpdGlvbik7CiAgICAgICAgICAg
ICArK2NvdW50OwogCi0gICAgICAgICAgICBWYWx1ZUNoZWNrPEtleT46OmNoZWNrQ29uc2lzdGVu
Y3koaXQtPmZpcnN0KTsKKyAgICAgICAgICAgIFZhbHVlQ2hlY2s8S2V5Pjo6Y2hlY2tDb25zaXN0
ZW5jeShpdC0+a2V5KTsKICAgICAgICAgfQogCiAgICAgICAgIEFTU0VSVChjb3VudCA9PSBtX2tl
eUNvdW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0hhc2hUcmFpdHMuaCBiL1NvdXJj
ZS9XVEYvd3RmL0hhc2hUcmFpdHMuaAppbmRleCBlYmU3OTVlYjFhODk5ZTJjNjFlZTVkYzM2NDcz
N2IyOWI4NTcwYTA5Li43M2JmMmJlYWEyZTVlZjRlZmVkOWRiMGMyZGVhZjNmMTEyZWI0YWFkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoVHJhaXRzLmgKKysrIGIvU291cmNlL1dURi93
dGYvSGFzaFRyYWl0cy5oCkBAIC0xOTMsMjEgKzE5MywyMCBAQCBuYW1lc3BhY2UgV1RGIHsKICAg
ICAgICAgfQogCiAgICAgICAgIEtleVZhbHVlUGFpcihjb25zdCBLZXlUeXBlQXJnJiBrZXksIGNv
bnN0IFZhbHVlVHlwZUFyZyYgdmFsdWUpCi0gICAgICAgICAgICA6IGZpcnN0KGtleSkKLSAgICAg
ICAgICAgICwgc2Vjb25kKHZhbHVlKQorICAgICAgICAgICAgOiBrZXkoa2V5KQorICAgICAgICAg
ICAgLCB2YWx1ZSh2YWx1ZSkKICAgICAgICAgewogICAgICAgICB9CiAKICAgICAgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIE90aGVyS2V5VHlwZSwgdHlwZW5hbWUgT3RoZXJWYWx1ZVR5cGU+CiAgICAg
ICAgIEtleVZhbHVlUGFpcihjb25zdCBLZXlWYWx1ZVBhaXI8T3RoZXJLZXlUeXBlLCBPdGhlclZh
bHVlVHlwZT4mIG90aGVyKQotICAgICAgICAgICAgOiBmaXJzdChvdGhlci5maXJzdCkKLSAgICAg
ICAgICAgICwgc2Vjb25kKG90aGVyLnNlY29uZCkKKyAgICAgICAgICAgIDoga2V5KG90aGVyLmtl
eSkKKyAgICAgICAgICAgICwgdmFsdWUob3RoZXIudmFsdWUpCiAgICAgICAgIHsKICAgICAgICAg
fQogCi0gICAgICAgIC8vIFRPRE86IFJlbmFtZSB0aGVzZSB0byBrZXkgYW5kIHZhbHVlLiBTZWUg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyNzg0LgotICAgICAgICBL
ZXlUeXBlQXJnIGZpcnN0OwotICAgICAgICBWYWx1ZVR5cGVBcmcgc2Vjb25kOworICAgICAgICBL
ZXlUeXBlQXJnIGtleTsKKyAgICAgICAgVmFsdWVUeXBlQXJnIHZhbHVlOwogICAgIH07CiAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIFZhbHVlVHJhaXRzQXJn
PgpAQCAtMjI0LDggKzIyMyw4IEBAIG5hbWVzcGFjZSBXVEYgewogCiAgICAgICAgIHN0YXRpYyBj
b25zdCBpbnQgbWluaW11bVRhYmxlU2l6ZSA9IEtleVRyYWl0czo6bWluaW11bVRhYmxlU2l6ZTsK
IAotICAgICAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoVHJhaXRUeXBlJiBz
bG90KSB7IEtleVRyYWl0czo6Y29uc3RydWN0RGVsZXRlZFZhbHVlKHNsb3QuZmlyc3QpOyB9Ci0g
ICAgICAgIHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0IFRyYWl0VHlwZSYgdmFsdWUp
IHsgcmV0dXJuIEtleVRyYWl0czo6aXNEZWxldGVkVmFsdWUodmFsdWUuZmlyc3QpOyB9CisgICAg
ICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShUcmFpdFR5cGUmIHNsb3QpIHsg
S2V5VHJhaXRzOjpjb25zdHJ1Y3REZWxldGVkVmFsdWUoc2xvdC5rZXkpOyB9CisgICAgICAgIHN0
YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0IFRyYWl0VHlwZSYgdmFsdWUpIHsgcmV0dXJu
IEtleVRyYWl0czo6aXNEZWxldGVkVmFsdWUodmFsdWUua2V5KTsgfQogICAgIH07CiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlPgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvTWV0YUFsbG9jYXRvci5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9y
LmNwcAppbmRleCAwYTdhMzFlMTdmMDY3YWM1ZTU5MGJhZjliMzA3ZjEyMTk5NDFlY2Y3Li4zNmRl
OWRkMmUyYzYzOGYxYjNhMTYyM2FkYThlOTY1NjgzOTQxMWVjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi9NZXRhQWxsb2NhdG9yLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2Nh
dG9yLmNwcApAQCAtMzA5LDkgKzMwOSw5IEBAIHZvaWQgTWV0YUFsbG9jYXRvcjo6YWRkRnJlZVNw
YWNlKHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMpCiAgICAgICAgIC8vIFdlIGhhdmUg
c29tZXRoaW5nIHdlIGNhbiBjb2FsZXNjZSB3aXRoIG9uIHRoZSBsZWZ0LiBSZW1vdmUgaXQgZnJv
bSB0aGUgdHJlZSwgYW5kCiAgICAgICAgIC8vIHJlbW92ZSBpdHMgZW5kIGZyb20gdGhlIGVuZCBh
ZGRyZXNzIG1hcC4KICAgICAgICAgCi0gICAgICAgIEFTU0VSVChyZWludGVycHJldF9jYXN0PHZv
aWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obGVmdE5laWdoYm9yLT5zZWNvbmQtPm1f
c3RhcnQpICsgbGVmdE5laWdoYm9yLT5zZWNvbmQtPm1fc2l6ZUluQnl0ZXMpID09IGxlZnROZWln
aGJvci0+Zmlyc3QpOworICAgICAgICBBU1NFUlQocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVp
bnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGxlZnROZWlnaGJvci0+dmFsdWUtPm1fc3RhcnQpICsg
bGVmdE5laWdoYm9yLT52YWx1ZS0+bV9zaXplSW5CeXRlcykgPT0gbGVmdE5laWdoYm9yLT5rZXkp
OwogICAgICAgICAKLSAgICAgICAgRnJlZVNwYWNlTm9kZSogbGVmdE5vZGUgPSBsZWZ0TmVpZ2hi
b3ItPnNlY29uZDsKKyAgICAgICAgRnJlZVNwYWNlTm9kZSogbGVmdE5vZGUgPSBsZWZ0TmVpZ2hi
b3ItPnZhbHVlOwogICAgICAgICAKICAgICAgICAgdm9pZCogbGVmdFN0YXJ0ID0gbGVmdE5vZGUt
Pm1fc3RhcnQ7CiAgICAgICAgIHNpemVfdCBsZWZ0U2l6ZSA9IGxlZnROb2RlLT5tX3NpemVJbkJ5
dGVzOwpAQCAtMzI3LDEwICszMjcsMTAgQEAgdm9pZCBNZXRhQWxsb2NhdG9yOjphZGRGcmVlU3Bh
Y2Uodm9pZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRlcykKICAgICAgICAgICAgIC8vIEZyZWVp
bmcgc29tZXRoaW5nIGluIHRoZSBtaWRkbGUgb2YgZnJlZSBibG9ja3MuIENvYWxlc2NlIGJvdGgg
bGVmdCBhbmQKICAgICAgICAgICAgIC8vIHJpZ2h0LCB3aGlsc3QgcmVtb3ZpbmcgdGhlIHJpZ2h0
IG5laWdoYm9yIGZyb20gdGhlIG1hcHMuCiAgICAgICAgICAgICAKLSAgICAgICAgICAgIEFTU0VS
VChyaWdodE5laWdoYm9yLT5zZWNvbmQtPm1fc3RhcnQgPT0gcmlnaHROZWlnaGJvci0+Zmlyc3Qp
OworICAgICAgICAgICAgQVNTRVJUKHJpZ2h0TmVpZ2hib3ItPnZhbHVlLT5tX3N0YXJ0ID09IHJp
Z2h0TmVpZ2hib3ItPmtleSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIEZyZWVTcGFjZU5v
ZGUqIHJpZ2h0Tm9kZSA9IHJpZ2h0TmVpZ2hib3ItPnNlY29uZDsKLSAgICAgICAgICAgIHZvaWQq
IHJpZ2h0U3RhcnQgPSByaWdodE5laWdoYm9yLT5maXJzdDsKKyAgICAgICAgICAgIEZyZWVTcGFj
ZU5vZGUqIHJpZ2h0Tm9kZSA9IHJpZ2h0TmVpZ2hib3ItPnZhbHVlOworICAgICAgICAgICAgdm9p
ZCogcmlnaHRTdGFydCA9IHJpZ2h0TmVpZ2hib3ItPmtleTsKICAgICAgICAgICAgIHNpemVfdCBy
aWdodFNpemUgPSByaWdodE5vZGUtPm1fc2l6ZUluQnl0ZXM7CiAgICAgICAgICAgICB2b2lkKiBy
aWdodEVuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0
cl90PihyaWdodFN0YXJ0KSArIHJpZ2h0U2l6ZSk7CiAgICAgICAgICAgICAKQEAgLTM1Nyw4ICsz
NTcsOCBAQCB2b2lkIE1ldGFBbGxvY2F0b3I6OmFkZEZyZWVTcGFjZSh2b2lkKiBzdGFydCwgc2l6
ZV90IHNpemVJbkJ5dGVzKQogICAgICAgICAvLyBDYW5ub3QgY29hbGVzY2Ugd2l0aCBsZWZ0OyB0
cnkgdG8gc2VlIGlmIHdlIGNhbiBjb2FsZXNjZSB3aXRoIHJpZ2h0LgogICAgICAgICAKICAgICAg
ICAgaWYgKHJpZ2h0TmVpZ2hib3IgIT0gbV9mcmVlU3BhY2VTdGFydEFkZHJlc3NNYXAuZW5kKCkp
IHsKLSAgICAgICAgICAgIEZyZWVTcGFjZU5vZGUqIHJpZ2h0Tm9kZSA9IHJpZ2h0TmVpZ2hib3It
PnNlY29uZDsKLSAgICAgICAgICAgIHZvaWQqIHJpZ2h0U3RhcnQgPSByaWdodE5laWdoYm9yLT5m
aXJzdDsKKyAgICAgICAgICAgIEZyZWVTcGFjZU5vZGUqIHJpZ2h0Tm9kZSA9IHJpZ2h0TmVpZ2hi
b3ItPnZhbHVlOworICAgICAgICAgICAgdm9pZCogcmlnaHRTdGFydCA9IHJpZ2h0TmVpZ2hib3It
PmtleTsKICAgICAgICAgICAgIHNpemVfdCByaWdodFNpemUgPSByaWdodE5vZGUtPm1fc2l6ZUlu
Qnl0ZXM7CiAgICAgICAgICAgICB2b2lkKiByaWdodEVuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihyaWdodFN0YXJ0KSArIHJpZ2h0U2l6ZSk7
CiAgICAgICAgICAgICAKQEAgLTQwNCw3ICs0MDQsNyBAQCB2b2lkIE1ldGFBbGxvY2F0b3I6Omlu
Y3JlbWVudFBhZ2VPY2N1cGFuY3kodm9pZCogYWRkcmVzcywgc2l6ZV90IHNpemVJbkJ5dGVzKQog
ICAgICAgICAgICAgbV9ieXRlc0NvbW1pdHRlZCArPSBtX3BhZ2VTaXplOwogICAgICAgICAgICAg
bm90aWZ5TmVlZFBhZ2UocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocGFnZSA8PCBtX2xvZ1BhZ2VT
aXplKSk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgaXRlci0+c2Vjb25kKys7CisgICAg
ICAgICAgICBpdGVyLT52YWx1ZSsrOwogICAgIH0KIH0KIApAQCAtNDE2LDcgKzQxNiw3IEBAIHZv
aWQgTWV0YUFsbG9jYXRvcjo6ZGVjcmVtZW50UGFnZU9jY3VwYW5jeSh2b2lkKiBhZGRyZXNzLCBz
aXplX3Qgc2l6ZUluQnl0ZXMpCiAgICAgZm9yICh1aW50cHRyX3QgcGFnZSA9IGZpcnN0UGFnZTsg
cGFnZSA8PSBsYXN0UGFnZTsgKytwYWdlKSB7CiAgICAgICAgIEhhc2hNYXA8dWludHB0cl90LCBz
aXplX3Q+OjppdGVyYXRvciBpdGVyID0gbV9wYWdlT2NjdXBhbmN5TWFwLmZpbmQocGFnZSk7CiAg
ICAgICAgIEFTU0VSVChpdGVyICE9IG1fcGFnZU9jY3VwYW5jeU1hcC5lbmQoKSk7Ci0gICAgICAg
IGlmICghLS0oaXRlci0+c2Vjb25kKSkgeworICAgICAgICBpZiAoIS0tKGl0ZXItPnZhbHVlKSkg
ewogICAgICAgICAgICAgbV9wYWdlT2NjdXBhbmN5TWFwLnJlbW92ZShpdGVyKTsKICAgICAgICAg
ICAgIG1fYnl0ZXNDb21taXR0ZWQgLT0gbV9wYWdlU2l6ZTsKICAgICAgICAgICAgIG5vdGlmeVBh
Z2VJc0ZyZWUocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocGFnZSA8PCBtX2xvZ1BhZ2VTaXplKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9SZWZDb3VudGVkTGVha0NvdW50ZXIuY3BwIGIv
U291cmNlL1dURi93dGYvUmVmQ291bnRlZExlYWtDb3VudGVyLmNwcAppbmRleCA2NzBmMmEwY2Vj
NTk5YzZkNGYzMTY0NGViZWI1ODc0MTVlZjQzMjFhLi40YTA0NTI4MjQ4OWZlOTVhMTdlMjM5MTk3
NzNkMzdjYjI0NDEwYmU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9SZWZDb3VudGVkTGVh
a0NvdW50ZXIuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL1JlZkNvdW50ZWRMZWFrQ291bnRlci5j
cHAKQEAgLTcxLDcgKzcxLDcgQEAgUmVmQ291bnRlZExlYWtDb3VudGVyOjp+UmVmQ291bnRlZExl
YWtDb3VudGVyKCkKICAgICAgICAgICAgIExPRyhSZWZDb3VudGVkTGVha3MsICJMRUFLOiAldSAl
cyIsIG1fY291bnQsIG1fZGVzY3JpcHRpb24pOwogICAgICAgICBlbHNlIGlmICghbG9nZ2VkU3Vw
cHJlc3Npb25SZWFzb24pIHsKICAgICAgICAgICAgIC8vIFRoaXMgbG9ncyBvbmx5IG9uZSByZWFz
b24uIExhdGVyIHdlIGNvdWxkIGNoYW5nZSBpdCBzbyB3ZSBsb2cgYWxsIHRoZSByZWFzb25zLgot
ICAgICAgICAgICAgTE9HKFJlZkNvdW50ZWRMZWFrcywgIk5vIGxlYWsgY2hlY2tpbmcgZG9uZTog
JXMiLCBsZWFrTWVzc2FnZVN1cHByZXNzaW9uUmVhc29ucy0+YmVnaW4oKS0+Zmlyc3QpOworICAg
ICAgICAgICAgTE9HKFJlZkNvdW50ZWRMZWFrcywgIk5vIGxlYWsgY2hlY2tpbmcgZG9uZTogJXMi
LCBsZWFrTWVzc2FnZVN1cHByZXNzaW9uUmVhc29ucy0+YmVnaW4oKS0+a2V5KTsKICAgICAgICAg
ICAgIGxvZ2dlZFN1cHByZXNzaW9uUmVhc29uID0gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1JlZlB0ckhhc2hNYXAuaCBiL1NvdXJjZS9XVEYvd3Rm
L1JlZlB0ckhhc2hNYXAuaAppbmRleCA1ZmFlOTBlOGNkNDcxMTI5ZTg5ZGNjOGU3YWU2NjM4YWRh
MTU0ZDMxLi45NTQxODM3ZTJhNmYyOWI5ZjA2YzNjOTU2MmExMzM0NmIwMWQ0Y2UxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL3d0Zi9SZWZQdHJIYXNoTWFwLmgKKysrIGIvU291cmNlL1dURi93dGYv
UmVmUHRySGFzaE1hcC5oCkBAIC0yMTYsNyArMjE2LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAg
ICAgIEFkZFJlc3VsdCByZXN1bHQgPSBpbmxpbmVBZGQoa2V5LCBtYXBwZWQpOwogICAgICAgICBp
ZiAoIXJlc3VsdC5pc05ld0VudHJ5KSB7CiAgICAgICAgICAgICAvLyBUaGUgaW5saW5lQWRkIGNh
bGwgYWJvdmUgZm91bmQgYW4gZXhpc3RpbmcgaGFzaCB0YWJsZSBlbnRyeTsgd2UgbmVlZCB0byBz
ZXQgdGhlIG1hcHBlZCB2YWx1ZS4KLSAgICAgICAgICAgIE1hcHBlZFRyYWl0czo6c3RvcmUobWFw
cGVkLCByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7CisgICAgICAgICAgICBNYXBwZWRUcmFpdHM6
OnN0b3JlKG1hcHBlZCwgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CiAgICAgICAgIH0KICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CkBAIC0yMjgsNyArMjI4LDcgQEAgbmFtZXNwYWNlIFdU
RiB7CiAgICAgICAgIEFkZFJlc3VsdCByZXN1bHQgPSBpbmxpbmVBZGQoa2V5LCBtYXBwZWQpOwog
ICAgICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KSB7CiAgICAgICAgICAgICAvLyBUaGUgaW5s
aW5lQWRkIGNhbGwgYWJvdmUgZm91bmQgYW4gZXhpc3RpbmcgaGFzaCB0YWJsZSBlbnRyeTsgd2Ug
bmVlZCB0byBzZXQgdGhlIG1hcHBlZCB2YWx1ZS4KLSAgICAgICAgICAgIE1hcHBlZFRyYWl0czo6
c3RvcmUobWFwcGVkLCByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7CisgICAgICAgICAgICBNYXBw
ZWRUcmFpdHM6OnN0b3JlKG1hcHBlZCwgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CiAgICAgICAg
IH0KICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CkBAIC0yNTQsNyArMjU0LDcgQEAgbmFt
ZXNwYWNlIFdURiB7CiAgICAgICAgIFZhbHVlVHlwZSogZW50cnkgPSBjb25zdF9jYXN0PEhhc2hU
YWJsZVR5cGUmPihtX2ltcGwpLmxvb2t1cChrZXkpOwogICAgICAgICBpZiAoIWVudHJ5KQogICAg
ICAgICAgICAgcmV0dXJuIE1hcHBlZFRyYWl0czo6cGVlayhNYXBwZWRUcmFpdHM6OmVtcHR5VmFs
dWUoKSk7Ci0gICAgICAgIHJldHVybiBNYXBwZWRUcmFpdHM6OnBlZWsoZW50cnktPnNlY29uZCk7
CisgICAgICAgIHJldHVybiBNYXBwZWRUcmFpdHM6OnBlZWsoZW50cnktPnZhbHVlKTsKICAgICB9
CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBl
bmFtZSBXLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHM+CkBAIC0yNjQsNyArMjY0LDcgQEAgbmFtZXNw
YWNlIFdURiB7CiAgICAgICAgIFZhbHVlVHlwZSogZW50cnkgPSBjb25zdF9jYXN0PEhhc2hUYWJs
ZVR5cGUmPihtX2ltcGwpLnRlbXBsYXRlIGxvb2t1cDxUcmFuc2xhdG9yPihrZXkpOwogICAgICAg
ICBpZiAoIWVudHJ5KQogICAgICAgICAgICAgcmV0dXJuIE1hcHBlZFRyYWl0czo6cGVlayhNYXBw
ZWRUcmFpdHM6OmVtcHR5VmFsdWUoKSk7Ci0gICAgICAgIHJldHVybiBNYXBwZWRUcmFpdHM6OnBl
ZWsoZW50cnktPnNlY29uZCk7CisgICAgICAgIHJldHVybiBNYXBwZWRUcmFpdHM6OnBlZWsoZW50
cnktPnZhbHVlKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
LCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHM+CkBAIC0zMDgs
NyArMzA4LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIGl0ZXJhdG9yIGl0ID0gZmluZChr
ZXkpOwogICAgICAgICBpZiAoaXQgPT0gZW5kKCkpCiAgICAgICAgICAgICByZXR1cm4gTWFwcGVk
VHJhaXRzOjpwYXNzT3V0KE1hcHBlZFRyYWl0czo6ZW1wdHlWYWx1ZSgpKTsKLSAgICAgICAgTWFw
cGVkUGFzc091dFR5cGUgcmVzdWx0ID0gTWFwcGVkVHJhaXRzOjpwYXNzT3V0KGl0LT5zZWNvbmQp
OworICAgICAgICBNYXBwZWRQYXNzT3V0VHlwZSByZXN1bHQgPSBNYXBwZWRUcmFpdHM6OnBhc3NP
dXQoaXQtPnZhbHVlKTsKICAgICAgICAgcmVtb3ZlKGl0KTsKICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICB9CkBAIC0zMjAsNyArMzIwLDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIGl0
ZXJhdG9yIGl0ID0gZmluZChrZXkpOwogICAgICAgICBpZiAoaXQgPT0gZW5kKCkpCiAgICAgICAg
ICAgICByZXR1cm4gTWFwcGVkVHJhaXRzOjpwYXNzT3V0KE1hcHBlZFRyYWl0czo6ZW1wdHlWYWx1
ZSgpKTsKLSAgICAgICAgTWFwcGVkUGFzc091dFR5cGUgcmVzdWx0ID0gTWFwcGVkVHJhaXRzOjpw
YXNzT3V0KGl0LT5zZWNvbmQpOworICAgICAgICBNYXBwZWRQYXNzT3V0VHlwZSByZXN1bHQgPSBN
YXBwZWRUcmFpdHM6OnBhc3NPdXQoaXQtPnZhbHVlKTsKICAgICAgICAgcmVtb3ZlKGl0KTsKICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9T
cGVjdHJ1bS5oIGIvU291cmNlL1dURi93dGYvU3BlY3RydW0uaAppbmRleCA1ZTdhNDg0Y2Q4NzY2
YmNhZjIyY2E0YzkzZGRjZTk3MGRkMmJhMjEzLi4zZTZmYTRhNjMzZmFkNDJkZWI0ZGM0ODMzMjU5
MjM0MWU4NGIzYTAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9TcGVjdHJ1bS5oCisrKyBi
L1NvdXJjZS9XVEYvd3RmL1NwZWN0cnVtLmgKQEAgLTQ0LDcgKzQ0LDcgQEAgcHVibGljOgogICAg
IHsKICAgICAgICAgdHlwZW5hbWUgSGFzaE1hcDxULCB1bnNpZ25lZCBsb25nPjo6QWRkUmVzdWx0
IHJlc3VsdCA9IG1fbWFwLmFkZChrZXksIGNvdW50KTsKICAgICAgICAgaWYgKCFyZXN1bHQuaXNO
ZXdFbnRyeSkKLSAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kICs9IGNvdW50Owor
ICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSArPSBjb3VudDsKICAgICB9CiAgICAg
CiAgICAgdW5zaWduZWQgbG9uZyBnZXQoY29uc3QgVCYga2V5KSBjb25zdApAQCAtNTIsNyArNTIs
NyBAQCBwdWJsaWM6CiAgICAgICAgIGNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX21hcC5maW5kKGtl
eSk7CiAgICAgICAgIGlmIChpdGVyID09IG1fbWFwLmVuZCgpKQogICAgICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgICAgIHJldHVybiBpdGVyLT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBpdGVyLT52
YWx1ZTsKICAgICB9CiAgICAgCiAgICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBtX21hcC5i
ZWdpbigpOyB9CkBAIC04OCw3ICs4OCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIFZlY3Rv
cjxLZXlBbmRDb3VudD4gbGlzdDsKICAgICAgICAgZm9yIChjb25zdF9pdGVyYXRvciBpdGVyID0g
YmVnaW4oKTsgaXRlciAhPSBlbmQoKTsgKytpdGVyKQotICAgICAgICAgICAgbGlzdC5hcHBlbmQo
S2V5QW5kQ291bnQoaXRlci0+Zmlyc3QsIGl0ZXItPnNlY29uZCkpOworICAgICAgICAgICAgbGlz
dC5hcHBlbmQoS2V5QW5kQ291bnQoaXRlci0+a2V5LCBpdGVyLT52YWx1ZSkpOwogICAgICAgICAK
ICAgICAgICAgc3RkOjpzb3J0KGxpc3QuYmVnaW4oKSwgbGlzdC5lbmQoKSk7CiAgICAgICAgIHJl
dHVybiBsaXN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nUHRocmVhZHMu
Y3BwIGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwCmluZGV4IDkyMWRkM2Jl
N2NlNGQwZTgwMDg0YzBlNjdlMGMwYmU4ZjhhYzdhNzguLmZlNjczMzY2NGFjNzgzN2RlYWViOTM2
YTc0NTU2MzMxOGM2OTllOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1B0
aHJlYWRzLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHAKQEAg
LTExNCw4ICsxMTQsOCBAQCBzdGF0aWMgVGhyZWFkSWRlbnRpZmllciBpZGVudGlmaWVyQnlQdGhy
ZWFkSGFuZGxlKGNvbnN0IHB0aHJlYWRfdCYgcHRocmVhZEhhbmRsZQogCiAgICAgVGhyZWFkTWFw
OjppdGVyYXRvciBpID0gdGhyZWFkTWFwKCkuYmVnaW4oKTsKICAgICBmb3IgKDsgaSAhPSB0aHJl
YWRNYXAoKS5lbmQoKTsgKytpKSB7Ci0gICAgICAgIGlmIChwdGhyZWFkX2VxdWFsKGktPnNlY29u
ZCwgcHRocmVhZEhhbmRsZSkpCi0gICAgICAgICAgICByZXR1cm4gaS0+Zmlyc3Q7CisgICAgICAg
IGlmIChwdGhyZWFkX2VxdWFsKGktPnZhbHVlLCBwdGhyZWFkSGFuZGxlKSkKKyAgICAgICAgICAg
IHJldHVybiBpLT5rZXk7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vR2VvbG9jYXRpb24uY3BwCmluZGV4IDU3Y2FmMzE1
MmFjYzg5ZDY5N2FhOGY2NDVjYzhmMDEzNTliY2IxNTIuLmEzZWY0MDI2ZGQwOTlhYWM3MTA2NDY0
OTRiZGNkNWI5Njg1NWRhM2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2Vv
bG9jYXRpb24vR2VvbG9jYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2Vv
bG9jYXRpb24vR2VvbG9jYXRpb24uY3BwCkBAIC0xOTIsNyArMTkyLDcgQEAgR2VvbG9jYXRpb246
Okdlb05vdGlmaWVyKiBHZW9sb2NhdGlvbjo6V2F0Y2hlcnM6OmZpbmQoaW50IGlkKQogICAgIElk
VG9Ob3RpZmllck1hcDo6aXRlcmF0b3IgaXRlciA9IG1faWRUb05vdGlmaWVyTWFwLmZpbmQoaWQp
OwogICAgIGlmIChpdGVyID09IG1faWRUb05vdGlmaWVyTWFwLmVuZCgpKQogICAgICAgICByZXR1
cm4gMDsKLSAgICByZXR1cm4gaXRlci0+c2Vjb25kLmdldCgpOworICAgIHJldHVybiBpdGVyLT52
YWx1ZS5nZXQoKTsKIH0KIAogdm9pZCBHZW9sb2NhdGlvbjo6V2F0Y2hlcnM6OnJlbW92ZShpbnQg
aWQpCkBAIC0yMDEsNyArMjAxLDcgQEAgdm9pZCBHZW9sb2NhdGlvbjo6V2F0Y2hlcnM6OnJlbW92
ZShpbnQgaWQpCiAgICAgSWRUb05vdGlmaWVyTWFwOjppdGVyYXRvciBpdGVyID0gbV9pZFRvTm90
aWZpZXJNYXAuZmluZChpZCk7CiAgICAgaWYgKGl0ZXIgPT0gbV9pZFRvTm90aWZpZXJNYXAuZW5k
KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBtX25vdGlmaWVyVG9JZE1hcC5yZW1vdmUoaXRlci0+
c2Vjb25kKTsKKyAgICBtX25vdGlmaWVyVG9JZE1hcC5yZW1vdmUoaXRlci0+dmFsdWUpOwogICAg
IG1faWRUb05vdGlmaWVyTWFwLnJlbW92ZShpdGVyKTsKIH0KIApAQCAtMjEwLDcgKzIxMCw3IEBA
IHZvaWQgR2VvbG9jYXRpb246OldhdGNoZXJzOjpyZW1vdmUoR2VvTm90aWZpZXIqIG5vdGlmaWVy
KQogICAgIE5vdGlmaWVyVG9JZE1hcDo6aXRlcmF0b3IgaXRlciA9IG1fbm90aWZpZXJUb0lkTWFw
LmZpbmQobm90aWZpZXIpOwogICAgIGlmIChpdGVyID09IG1fbm90aWZpZXJUb0lkTWFwLmVuZCgp
KQogICAgICAgICByZXR1cm47Ci0gICAgbV9pZFRvTm90aWZpZXJNYXAucmVtb3ZlKGl0ZXItPnNl
Y29uZCk7CisgICAgbV9pZFRvTm90aWZpZXJNYXAucmVtb3ZlKGl0ZXItPnZhbHVlKTsKICAgICBt
X25vdGlmaWVyVG9JZE1hcC5yZW1vdmUoaXRlcik7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcAppbmRleCA1YzNkZmNiNmI1NDJjMWJl
MDZiMjQxYjQ3Y2U5YmFjYjliNjYyOWI0Li40NzRjOTc5OTkwNmNiNTZkY2ZlNGE2NDBkOWZmODM4
ZjEwY2FiYmE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJEYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
RGF0YWJhc2UuY3BwCkBAIC0xMDYsNyArMTA2LDcgQEAgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0
PiBJREJEYXRhYmFzZTo6b2JqZWN0U3RvcmVOYW1lcygpIGNvbnN0CiB7CiAgICAgUmVmUHRyPERP
TVN0cmluZ0xpc3Q+IG9iamVjdFN0b3JlTmFtZXMgPSBET01TdHJpbmdMaXN0OjpjcmVhdGUoKTsK
ICAgICBmb3IgKElEQkRhdGFiYXNlTWV0YWRhdGE6Ok9iamVjdFN0b3JlTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmJlZ2luKCk7IGl0ICE9IG1fbWV0YWRh
dGEub2JqZWN0U3RvcmVzLmVuZCgpOyArK2l0KQotICAgICAgICBvYmplY3RTdG9yZU5hbWVzLT5h
cHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgb2JqZWN0U3RvcmVOYW1lcy0+YXBwZW5kKGl0LT5r
ZXkpOwogICAgIG9iamVjdFN0b3JlTmFtZXMtPnNvcnQoKTsKICAgICByZXR1cm4gb2JqZWN0U3Rv
cmVOYW1lcy5yZWxlYXNlKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCmluZGV4IGU0NTE0N2Q1
YzBiMGI2MmIzM2QzZjNjY2Q2M2E2MTdmYjViOGI5OGUuLmE5YmMzZDM2YTVkMWU1ZTViZTViNTVh
ODMyOWMyNGU1NjIzOTlkMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCkBAIC0xMzgsNyArMTM4
LDcgQEAgSURCRGF0YWJhc2VNZXRhZGF0YSBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjptZXRhZGF0
YSgpIGNvbnN0CiB7CiAgICAgSURCRGF0YWJhc2VNZXRhZGF0YSBtZXRhZGF0YShtX25hbWUsIG1f
dmVyc2lvbiwgSURCRGF0YWJhc2VNZXRhZGF0YTo6Tm9JbnRWZXJzaW9uKTsKICAgICBmb3IgKE9i
amVjdFN0b3JlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fb2JqZWN0U3RvcmVzLmJlZ2luKCk7
IGl0ICE9IG1fb2JqZWN0U3RvcmVzLmVuZCgpOyArK2l0KQotICAgICAgICBtZXRhZGF0YS5vYmpl
Y3RTdG9yZXMuc2V0KGl0LT5maXJzdCwgaXQtPnNlY29uZC0+bWV0YWRhdGEoKSk7CisgICAgICAg
IG1ldGFkYXRhLm9iamVjdFN0b3Jlcy5zZXQoaXQtPmtleSwgaXQtPnZhbHVlLT5tZXRhZGF0YSgp
KTsKICAgICByZXR1cm4gbWV0YWRhdGE7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwCmluZGV4IGRm
YjE0NTdhMzA2ZGFhN2E1NjhjMjFhZjZlZmEzNDU0NmNlM2ZmNDYuLmE5MzY3ZDFlODE1YzBkZGNk
MDg2MDZmMWY3YjU5MDA2NDA5YjE3ZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcApAQCAtMTA2LDcg
KzEwNiw3IEBAIHZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpkZWxldGVEYXRhYmFzZShjb25z
dCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsCiAgICAgaWYgKGl0ICE9IG1fZGF0YWJh
c2VCYWNrZW5kTWFwLmVuZCgpKSB7CiAgICAgICAgIC8vIElmIHRoZXJlIGFyZSBhbnkgY29ubmVj
dGlvbnMgdG8gdGhlIGRhdGFiYXNlLCBkaXJlY3RseSBkZWxldGUgdGhlCiAgICAgICAgIC8vIGRh
dGFiYXNlLgotICAgICAgICBpdC0+c2Vjb25kLT5kZWxldGVEYXRhYmFzZShjYWxsYmFja3MpOwor
ICAgICAgICBpdC0+dmFsdWUtPmRlbGV0ZURhdGFiYXNlKGNhbGxiYWNrcyk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKQEAgLTEzMyw3ICsxMzMsNyBAQCBQYXNzUmVmUHRyPElEQkJhY2tpbmdT
dG9yZT4gSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuQmFja2luZ1N0b3JlKFBhc3NSZWZQdHI8
UwogICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZTsKICAgICBJREJCYWNr
aW5nU3RvcmVNYXA6Oml0ZXJhdG9yIGl0MiA9IG1fYmFja2luZ1N0b3JlTWFwLmZpbmQoZmlsZUlk
ZW50aWZpZXIpOwogICAgIGlmIChpdDIgIT0gbV9iYWNraW5nU3RvcmVNYXAuZW5kKCkpCi0gICAg
ICAgIGJhY2tpbmdTdG9yZSA9IGl0Mi0+c2Vjb25kOworICAgICAgICBiYWNraW5nU3RvcmUgPSBp
dDItPnZhbHVlOwogICAgIGVsc2UgewogI2lmIFVTRShMRVZFTERCKQogICAgICAgICBiYWNraW5n
U3RvcmUgPSBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuKHNlY3VyaXR5T3JpZ2luLmdldCgp
LCBkYXRhRGlyZWN0b3J5LCBmaWxlSWRlbnRpZmllciwgdGhpcyk7CkBAIC0xNTgsNyArMTU4LDcg
QEAgdm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2EKICAgICBpZiAoaXQgIT0gbV9kYXRhYmFzZUJhY2tl
bmRNYXAuZW5kKCkpIHsKICAgICAgICAgLy8gSWYgaXQncyBhbHJlYWR5IGJlZW4gb3BlbmVkLCB3
ZSBoYXZlIHRvIHdhaXQgZm9yIGFueSBwZW5kaW5nCiAgICAgICAgIC8vIHNldFZlcnNpb24gY2Fs
bHMgdG8gY29tcGxldGUuCi0gICAgICAgIGl0LT5zZWNvbmQtPm9wZW5Db25uZWN0aW9uKGNhbGxi
YWNrcyk7CisgICAgICAgIGl0LT52YWx1ZS0+b3BlbkNvbm5lY3Rpb24oY2FsbGJhY2tzKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCmluZGV4IDdmN2NkNzRiYjBlZGNiNjNmODQ1NDBi
ZWIwYzk1OWRlY2U2MjZmMTkuLjZlNTVjNGU0NTNhNGYwOTEyNjQ4Yjc3NzlkNDdjZjM1NjU0Yjk3
NWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVj
dFN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmpl
Y3RTdG9yZS5jcHAKQEAgLTY0LDcgKzY0LDcgQEAgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBJ
REJPYmplY3RTdG9yZTo6aW5kZXhOYW1lcygpIGNvbnN0CiAgICAgSURCX1RSQUNFKCJJREJPYmpl
Y3RTdG9yZTo6aW5kZXhOYW1lcyIpOwogICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiBpbmRleE5h
bWVzID0gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7CiAgICAgZm9yIChJREJPYmplY3RTdG9yZU1l
dGFkYXRhOjpJbmRleE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX21ldGFkYXRhLmluZGV4ZXMu
YmVnaW4oKTsgaXQgIT0gbV9tZXRhZGF0YS5pbmRleGVzLmVuZCgpOyArK2l0KQotICAgICAgICBp
bmRleE5hbWVzLT5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgaW5kZXhOYW1lcy0+YXBwZW5k
KGl0LT5rZXkpOwogICAgIGluZGV4TmFtZXMtPnNvcnQoKTsKICAgICByZXR1cm4gaW5kZXhOYW1l
cy5yZWxlYXNlKCk7CiB9CkBAIC0yMDQsOCArMjA0LDggQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0
PiBJREJPYmplY3RTdG9yZTo6cHV0KElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6UHV0
TW8KICAgICBWZWN0b3I8SW5kZXhLZXlzPiBpbmRleEtleXM7CiAgICAgZm9yIChJREJPYmplY3RT
dG9yZU1ldGFkYXRhOjpJbmRleE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX21ldGFkYXRhLmlu
ZGV4ZXMuYmVnaW4oKTsgaXQgIT0gbV9tZXRhZGF0YS5pbmRleGVzLmVuZCgpOyArK2l0KSB7CiAg
ICAgICAgIEluZGV4S2V5cyBrZXlzOwotICAgICAgICBnZW5lcmF0ZUluZGV4S2V5c0ZvclZhbHVl
KGl0LT5zZWNvbmQsIHZhbHVlLCAma2V5cyk7Ci0gICAgICAgIGluZGV4TmFtZXMuYXBwZW5kKGl0
LT5maXJzdCk7CisgICAgICAgIGdlbmVyYXRlSW5kZXhLZXlzRm9yVmFsdWUoaXQtPnZhbHVlLCB2
YWx1ZSwgJmtleXMpOworICAgICAgICBpbmRleE5hbWVzLmFwcGVuZChpdC0+a2V5KTsKICAgICAg
ICAgaW5kZXhLZXlzLmFwcGVuZChrZXlzKTsKICAgICB9CiAgICAgQVNTRVJUKGluZGV4S2V5cy5z
aXplKCkgPT0gaW5kZXhOYW1lcy5zaXplKCkpOwpAQCAtMzU1LDcgKzM1NSw3IEBAIFBhc3NSZWZQ
dHI8SURCSW5kZXg+IElEQk9iamVjdFN0b3JlOjppbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIEV4
Y2VwdGlvbkNvZGUmIGVjCiAKICAgICBJREJJbmRleE1hcDo6aXRlcmF0b3IgaXQgPSBtX2luZGV4
TWFwLmZpbmQobmFtZSk7CiAgICAgaWYgKGl0ICE9IG1faW5kZXhNYXAuZW5kKCkpCi0gICAgICAg
IHJldHVybiBpdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwogCiAgICAgUmVm
UHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gaW5kZXhCYWNrZW5kID0gbV9iYWNrZW5kLT5p
bmRleChuYW1lLCBlYyk7CiAgICAgQVNTRVJUKCFpbmRleEJhY2tlbmQgIT0gIWVjKTsgLy8gSWYg
d2UgZGlkbid0IGdldCBhbiBpbmRleCwgd2Ugc2hvdWxkIGhhdmUgZ290dGVuIGFuIGV4Y2VwdGlv
biBjb2RlLiBBbmQgdmljZSB2ZXJzYS4KQEAgLTM2NSw3ICszNjUsNyBAQCBQYXNzUmVmUHRyPElE
QkluZGV4PiBJREJPYmplY3RTdG9yZTo6aW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRp
b25Db2RlJiBlYwogICAgIElEQk9iamVjdFN0b3JlTWV0YWRhdGE6OkluZGV4TWFwOjpjb25zdF9p
dGVyYXRvciBtZGl0ID0gbV9tZXRhZGF0YS5pbmRleGVzLmZpbmQobmFtZSk7CiAgICAgQVNTRVJU
KG1kaXQgIT0gbV9tZXRhZGF0YS5pbmRleGVzLmVuZCgpKTsKIAotICAgIFJlZlB0cjxJREJJbmRl
eD4gaW5kZXggPSBJREJJbmRleDo6Y3JlYXRlKG1kaXQtPnNlY29uZCwgaW5kZXhCYWNrZW5kLnJl
bGVhc2UoKSwgdGhpcywgbV90cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgUmVmUHRyPElEQkluZGV4
PiBpbmRleCA9IElEQkluZGV4OjpjcmVhdGUobWRpdC0+dmFsdWUsIGluZGV4QmFja2VuZC5yZWxl
YXNlKCksIHRoaXMsIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwogICAgIG1faW5kZXhNYXAuc2V0KG5h
bWUsIGluZGV4KTsKICAgICByZXR1cm4gaW5kZXgucmVsZWFzZSgpOwogfQpAQCAtMzg5LDcgKzM4
OSw3IEBAIHZvaWQgSURCT2JqZWN0U3RvcmU6OmRlbGV0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFt
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgaWYgKCFlYykgewogICAgICAgICBJREJJbmRleE1h
cDo6aXRlcmF0b3IgaXQgPSBtX2luZGV4TWFwLmZpbmQobmFtZSk7CiAgICAgICAgIGlmIChpdCAh
PSBtX2luZGV4TWFwLmVuZCgpKSB7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLT5tYXJrRGVsZXRl
ZCgpOworICAgICAgICAgICAgaXQtPnZhbHVlLT5tYXJrRGVsZXRlZCgpOwogICAgICAgICAgICAg
bV9pbmRleE1hcC5yZW1vdmUobmFtZSk7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsLmNwcAppbmRleCA3NDY5MzNlZjA0ZGU2NjQwMDQyM2JhZWM5OGNkODU1NmNkZmJhODgwLi4z
ZDRhOGNmZDExOTNiOGZjYTY1MDdhZDY0MTZiZGYzZmE1MzBkZWZjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsLmNwcApAQCAtNzQsNyArNzQsNyBAQCBJREJPYmplY3RTdG9yZU1ldGFkYXRhIElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6Om1ldGFkYXRhKCkgY29uc3QKIHsKICAgICBJREJPYmpl
Y3RTdG9yZU1ldGFkYXRhIG1ldGFkYXRhKG1fbmFtZSwgbV9rZXlQYXRoLCBtX2F1dG9JbmNyZW1l
bnQpOwogICAgIGZvciAoSW5kZXhNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9pbmRleGVzLmJl
Z2luKCk7IGl0ICE9IG1faW5kZXhlcy5lbmQoKTsgKytpdCkKLSAgICAgICAgbWV0YWRhdGEuaW5k
ZXhlcy5zZXQoaXQtPmZpcnN0LCBpdC0+c2Vjb25kLT5tZXRhZGF0YSgpKTsKKyAgICAgICAgbWV0
YWRhdGEuaW5kZXhlcy5zZXQoaXQtPmtleSwgaXQtPnZhbHVlLT5tZXRhZGF0YSgpKTsKICAgICBy
ZXR1cm4gbWV0YWRhdGE7CiB9CiAKQEAgLTI5MiwxMiArMjkyLDEyIEBAIHZvaWQgSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBh
c3NSZWZQdHI8CiAKICAgICBmb3IgKEluZGV4TWFwOjppdGVyYXRvciBpdCA9IG9iamVjdFN0b3Jl
LT5tX2luZGV4ZXMuYmVnaW4oKTsgaXQgIT0gb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5lbmQoKTsg
KytpdCkgewogCi0gICAgICAgIGNvbnN0IFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiYgaW5k
ZXggPSBpdC0+c2Vjb25kOworICAgICAgICBjb25zdCBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1w
bD4mIGluZGV4ID0gaXQtPnZhbHVlOwogICAgICAgICBpZiAoIWluZGV4LT5oYXNWYWxpZElkKCkp
CiAgICAgICAgICAgICBjb250aW51ZTsgLy8gVGhlIGluZGV4IG9iamVjdCBoYXMgYmVlbiBjcmVh
dGVkLCBidXQgZG9lcyBub3QgZXhpc3QgaW4gdGhlIGRhdGFiYXNlIHlldC4KIAogICAgICAgICBP
d25QdHI8SW5kZXhXcml0ZXI+IGluZGV4V3JpdGVyOwotICAgICAgICBpbmRleFdyaXRlciA9IGFk
b3B0UHRyKG5ldyBJbmRleFdyaXRlcihpbmRleC0+bWV0YWRhdGEoKSwgaW5kZXhLZXlNYXAuZ2V0
KGl0LT5maXJzdCkpKTsKKyAgICAgICAgaW5kZXhXcml0ZXIgPSBhZG9wdFB0cihuZXcgSW5kZXhX
cml0ZXIoaW5kZXgtPm1ldGFkYXRhKCksIGluZGV4S2V5TWFwLmdldChpdC0+a2V5KSkpOwogCiAg
ICAgICAgIFN0cmluZyBlcnJvck1lc3NhZ2U7CiAgICAgICAgIGlmICghaW5kZXhXcml0ZXItPnZl
cmlmeUluZGV4S2V5cygqb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLApAQCAtMzY2LDEwICsz
NjYsMTAgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJbnRlcm5hbChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlAKICAgICAgICAgICAgIHJlY29yZElkZW50
aWZpZXIgPSBiYWNraW5nU3RvcmVDdXJzb3ItPm9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcigp
OwogCiAgICAgICAgICAgICBmb3IgKEluZGV4TWFwOjppdGVyYXRvciBpdCA9IG9iamVjdFN0b3Jl
LT5tX2luZGV4ZXMuYmVnaW4oKTsgaXQgIT0gb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5lbmQoKTsg
KytpdCkgewotICAgICAgICAgICAgICAgIGlmICghaXQtPnNlY29uZC0+aGFzVmFsaWRJZCgpKQor
ICAgICAgICAgICAgICAgIGlmICghaXQtPnZhbHVlLT5oYXNWYWxpZElkKCkpCiAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOyAvLyBUaGUgaW5kZXggb2JqZWN0IGhhcyBiZWVuIGNyZWF0ZWQs
IGJ1dCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgZGF0YWJhc2UgeWV0LgogCi0gICAgICAgICAgICAg
ICAgYm9vbCBzdWNjZXNzID0gb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5kZWxldGVJbmRl
eERhdGFGb3JSZWNvcmQob2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgb2JqZWN0U3RvcmUtPmlk
KCksIGl0LT5zZWNvbmQtPmlkKCksIHJlY29yZElkZW50aWZpZXIuZ2V0KCkpOworICAgICAgICAg
ICAgICAgIGJvb2wgc3VjY2VzcyA9IG9iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+ZGVsZXRl
SW5kZXhEYXRhRm9yUmVjb3JkKG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0b3Jl
LT5pZCgpLCBpdC0+dmFsdWUtPmlkKCksIHJlY29yZElkZW50aWZpZXIuZ2V0KCkpOwogICAgICAg
ICAgICAgICAgIEFTU0VSVF9VTlVTRUQoc3VjY2Vzcywgc3VjY2Vzcyk7CiAgICAgICAgICAgICB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5z
YWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0
aW9uLmNwcAppbmRleCA3NjEyMzQ3MDE0MTgzYzlkYTYxZThkYmFmZTY1ZmEzODU5OTkzNDdlLi5i
M2JlOTA5ZTA3NGM5MWJhZGQ2MDQ3MDM4YmVlMDYyYzk3YjU2NDdmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwCkBAIC0xNDIs
NyArMTQyLDcgQEAgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gSURCVHJhbnNhY3Rpb246Om9i
amVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXAKIAogICAgIElEQk9iamVjdFN0b3Jl
TWFwOjppdGVyYXRvciBpdCA9IG1fb2JqZWN0U3RvcmVNYXAuZmluZChuYW1lKTsKICAgICBpZiAo
aXQgIT0gbV9vYmplY3RTdG9yZU1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7
CisgICAgICAgIHJldHVybiBpdC0+dmFsdWU7CiAKICAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW50ZXJmYWNlPiBvYmplY3RTdG9yZUJhY2tlbmQgPSBtX2JhY2tlbmQtPm9iamVjdFN0
b3JlKG5hbWUsIGVjKTsKICAgICBBU1NFUlQoIW9iamVjdFN0b3JlQmFja2VuZCAhPSAhZWMpOyAv
LyBJZiB3ZSBkaWRuJ3QgZ2V0IGEgc3RvcmUsIHdlIHNob3VsZCBoYXZlIGdvdHRlbiBhbiBleGNl
cHRpb24gY29kZS4gQW5kIHZpY2UgdmVyc2EuCkBAIC0xNTMsNyArMTUzLDcgQEAgUGFzc1JlZlB0
cjxJREJPYmplY3RTdG9yZT4gSURCVHJhbnNhY3Rpb246Om9iamVjdFN0b3JlKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgRXhjZXAKICAgICBJREJEYXRhYmFzZU1ldGFkYXRhOjpPYmplY3RTdG9yZU1hcDo6
Y29uc3RfaXRlcmF0b3IgbWRpdCA9IG1ldGFkYXRhLm9iamVjdFN0b3Jlcy5maW5kKG5hbWUpOwog
ICAgIEFTU0VSVChtZGl0ICE9IG1ldGFkYXRhLm9iamVjdFN0b3Jlcy5lbmQoKSk7CiAKLSAgICBS
ZWZQdHI8SURCT2JqZWN0U3RvcmU+IG9iamVjdFN0b3JlID0gSURCT2JqZWN0U3RvcmU6OmNyZWF0
ZShtZGl0LT5zZWNvbmQsIG9iamVjdFN0b3JlQmFja2VuZCwgdGhpcyk7CisgICAgUmVmUHRyPElE
Qk9iamVjdFN0b3JlPiBvYmplY3RTdG9yZSA9IElEQk9iamVjdFN0b3JlOjpjcmVhdGUobWRpdC0+
dmFsdWUsIG9iamVjdFN0b3JlQmFja2VuZCwgdGhpcyk7CiAgICAgb2JqZWN0U3RvcmVDcmVhdGVk
KG5hbWUsIG9iamVjdFN0b3JlKTsKICAgICByZXR1cm4gb2JqZWN0U3RvcmUucmVsZWFzZSgpOwog
fQpAQCAtMTczLDcgKzE3Myw3IEBAIHZvaWQgSURCVHJhbnNhY3Rpb246Om9iamVjdFN0b3JlRGVs
ZXRlZChjb25zdCBTdHJpbmcmIG5hbWUpCiAgICAgQVNTRVJUKGlzVmVyc2lvbkNoYW5nZSgpKTsK
ICAgICBJREJPYmplY3RTdG9yZU1hcDo6aXRlcmF0b3IgaXQgPSBtX29iamVjdFN0b3JlTWFwLmZp
bmQobmFtZSk7CiAgICAgaWYgKGl0ICE9IG1fb2JqZWN0U3RvcmVNYXAuZW5kKCkpIHsKLSAgICAg
ICAgUmVmUHRyPElEQk9iamVjdFN0b3JlPiBvYmplY3RTdG9yZSA9IGl0LT5zZWNvbmQ7CisgICAg
ICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZT4gb2JqZWN0U3RvcmUgPSBpdC0+dmFsdWU7CiAgICAg
ICAgIG1fb2JqZWN0U3RvcmVNYXAucmVtb3ZlKG5hbWUpOwogICAgICAgICBvYmplY3RTdG9yZS0+
bWFya0RlbGV0ZWQoKTsKICAgICAgICAgbV9vYmplY3RTdG9yZUNsZWFudXBNYXAuc2V0KG9iamVj
dFN0b3JlLCBvYmplY3RTdG9yZS0+bWV0YWRhdGEoKSk7CkBAIC0yODAsNyArMjgwLDcgQEAgdm9p
ZCBJREJUcmFuc2FjdGlvbjo6b25BYm9ydCgpCiAKICAgICBpZiAoaXNWZXJzaW9uQ2hhbmdlKCkp
IHsKICAgICAgICAgZm9yIChJREJPYmplY3RTdG9yZU1ldGFkYXRhTWFwOjppdGVyYXRvciBpdCA9
IG1fb2JqZWN0U3RvcmVDbGVhbnVwTWFwLmJlZ2luKCk7IGl0ICE9IG1fb2JqZWN0U3RvcmVDbGVh
bnVwTWFwLmVuZCgpOyArK2l0KQotICAgICAgICAgICAgaXQtPmZpcnN0LT5zZXRNZXRhZGF0YShp
dC0+c2Vjb25kKTsKKyAgICAgICAgICAgIGl0LT5rZXktPnNldE1ldGFkYXRhKGl0LT52YWx1ZSk7
CiAgICAgfQogICAgIG1fb2JqZWN0U3RvcmVDbGVhbnVwTWFwLmNsZWFyKCk7CiAgICAgY2xvc2VP
cGVuQ3Vyc29ycygpOwpAQCAtMzY2LDcgKzM2Niw3IEBAIGJvb2wgSURCVHJhbnNhY3Rpb246OmRp
c3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCiAKICAgICAvLyBCcmVhayByZWZl
cmVuY2UgY3ljbGVzLgogICAgIGZvciAoSURCT2JqZWN0U3RvcmVNYXA6Oml0ZXJhdG9yIGl0ID0g
bV9vYmplY3RTdG9yZU1hcC5iZWdpbigpOyBpdCAhPSBtX29iamVjdFN0b3JlTWFwLmVuZCgpOyAr
K2l0KQotICAgICAgICBpdC0+c2Vjb25kLT50cmFuc2FjdGlvbkZpbmlzaGVkKCk7CisgICAgICAg
IGl0LT52YWx1ZS0+dHJhbnNhY3Rpb25GaW5pc2hlZCgpOwogICAgIG1fb2JqZWN0U3RvcmVNYXAu
Y2xlYXIoKTsKIAogICAgIFZlY3RvcjxSZWZQdHI8RXZlbnRUYXJnZXQ+ID4gdGFyZ2V0czsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvQWJzdHJhY3REYXRh
YmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Fic3RyYWN0RGF0
YWJhc2UuY3BwCmluZGV4IGM3NTM5YzZlMTEyYjllMWU2YmYxZTJjZDNmMDJhZTBjYmEyYmVhMjYu
LjYyOTA3ZTNlMWNlNmIwOTE1YzJiMDM0NzYwOWU1MDdlOGMwMWNlYjYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvQWJzdHJhY3REYXRhYmFzZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9BYnN0cmFjdERhdGFiYXNlLmNw
cApAQCAtMjgyLDcgKzI4Miw3IEBAIGJvb2wgQWJzdHJhY3REYXRhYmFzZTo6cGVyZm9ybU9wZW5B
bmRWZXJpZnkoYm9vbCBzaG91bGRTZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwKICAgICAgICAgR3Vp
ZFZlcnNpb25NYXA6Oml0ZXJhdG9yIGVudHJ5ID0gZ3VpZFRvVmVyc2lvbk1hcCgpLmZpbmQobV9n
dWlkKTsKICAgICAgICAgaWYgKGVudHJ5ICE9IGd1aWRUb1ZlcnNpb25NYXAoKS5lbmQoKSkgewog
ICAgICAgICAgICAgLy8gTWFwIG51bGwgc3RyaW5nIHRvIGVtcHR5IHN0cmluZyAoc2VlIHVwZGF0
ZUd1aWRWZXJzaW9uTWFwKCkpLgotICAgICAgICAgICAgY3VycmVudFZlcnNpb24gPSBlbnRyeS0+
c2Vjb25kLmlzTnVsbCgpID8gZW1wdHlTdHJpbmcoKSA6IGVudHJ5LT5zZWNvbmQuaXNvbGF0ZWRD
b3B5KCk7CisgICAgICAgICAgICBjdXJyZW50VmVyc2lvbiA9IGVudHJ5LT52YWx1ZS5pc051bGwo
KSA/IGVtcHR5U3RyaW5nKCkgOiBlbnRyeS0+dmFsdWUuaXNvbGF0ZWRDb3B5KCk7CiAgICAgICAg
ICAgICBMT0coU3RvcmFnZUFQSSwgIkN1cnJlbnQgY2FjaGVkIHZlcnNpb24gZm9yIGd1aWQgJWkg
aXMgJXMiLCBtX2d1aWQsIGN1cnJlbnRWZXJzaW9uLmFzY2lpKCkuZGF0YSgpKTsKIAogI2lmIFBM
QVRGT1JNKENIUk9NSVVNKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3BwCmluZGV4IDBlNTc5M2NmZjFlNjM1MjQwMzYyOWUy
ZDA5YzYzNjQ2MzAzMzI1MGUuLmE3ZTgyMTcwZGNhNmU3OWViZjJkYmIwMGExY2Y0M2Q1ZjI0Y2Q4
NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJh
c2VUcmFja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Rh
dGFiYXNlVHJhY2tlci5jcHAKQEAgLTI1Miw3ICsyNTIsNyBAQCB2b2lkIERhdGFiYXNlVHJhY2tl
cjo6aW50ZXJydXB0QWxsRGF0YWJhc2VzRm9yQ29udGV4dChjb25zdCBTY3JpcHRFeGVjdXRpb25D
b250ZQogCiAgICAgICAgIERhdGFiYXNlTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgZGJOYW1lTWFw
RW5kSXQgPSBuYW1lTWFwLT5lbmQoKTsKICAgICAgICAgZm9yIChEYXRhYmFzZU5hbWVNYXA6OmNv
bnN0X2l0ZXJhdG9yIGRiTmFtZU1hcEl0ID0gbmFtZU1hcC0+YmVnaW4oKTsgZGJOYW1lTWFwSXQg
IT0gZGJOYW1lTWFwRW5kSXQ7ICsrZGJOYW1lTWFwSXQpIHsKLSAgICAgICAgICAgIERhdGFiYXNl
U2V0KiBkYXRhYmFzZVNldCA9IGRiTmFtZU1hcEl0LT5zZWNvbmQ7CisgICAgICAgICAgICBEYXRh
YmFzZVNldCogZGF0YWJhc2VTZXQgPSBkYk5hbWVNYXBJdC0+dmFsdWU7CiAgICAgICAgICAgICBE
YXRhYmFzZVNldDo6Y29uc3RfaXRlcmF0b3IgZGJTZXRFbmRJdCA9IGRhdGFiYXNlU2V0LT5lbmQo
KTsKICAgICAgICAgICAgIGZvciAoRGF0YWJhc2VTZXQ6OmNvbnN0X2l0ZXJhdG9yIGRiU2V0SXQg
PSBkYXRhYmFzZVNldC0+YmVnaW4oKTsgZGJTZXRJdCAhPSBkYlNldEVuZEl0OyArK2RiU2V0SXQp
IHsKICAgICAgICAgICAgICAgICBpZiAoKCpkYlNldEl0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpID09IGNvbnRleHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRh
dGFiYXNlL09yaWdpblVzYWdlUmVjb3JkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvT3JpZ2luVXNhZ2VSZWNvcmQuY3BwCmluZGV4IDQ0MzU1MGE1NzMwOWYzMzYzZjBm
Y2E5OGY1MDhjMDI3NmQwZDk5ZGIuLjJiZjhhZjRhZTAwOTkyODBhY2ExNzU3NzQ4YmEyMWNmOTBi
NzAyZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvT3Jp
Z2luVXNhZ2VSZWNvcmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvT3JpZ2luVXNhZ2VSZWNvcmQuY3BwCkBAIC05Myw3ICs5Myw3IEBAIHVuc2lnbmVkIGxvbmcg
bG9uZyBPcmlnaW5Vc2FnZVJlY29yZDo6ZGlza1VzYWdlKCkKICAgICBIYXNoTWFwPFN0cmluZywg
RGF0YWJhc2VFbnRyeT46Oml0ZXJhdG9yIGlEYXRhYmFzZSA9IG1fZGF0YWJhc2VNYXAuYmVnaW4o
KTsKICAgICBIYXNoTWFwPFN0cmluZywgRGF0YWJhc2VFbnRyeT46Oml0ZXJhdG9yIGVuZERhdGFi
YXNlID0gbV9kYXRhYmFzZU1hcC5lbmQoKTsKICAgICBmb3IgKDsgaURhdGFiYXNlICE9IGVuZERh
dGFiYXNlOyArK2lEYXRhYmFzZSkKLSAgICAgICAgbV9jYWNoZWREaXNrVXNhZ2UgKz0gaURhdGFi
YXNlLT5zZWNvbmQuc2l6ZTsKKyAgICAgICAgbV9jYWNoZWREaXNrVXNhZ2UgKz0gaURhdGFiYXNl
LT52YWx1ZS5zaXplOwogCiAgICAgbV9jYWNoZWREaXNrVXNhZ2VJc1ZhbGlkID0gdHJ1ZTsKICAg
ICByZXR1cm4gbV9jYWNoZWREaXNrVXNhZ2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNw
cAppbmRleCA4MzdiOGZiZDIyMDVhZGM5NzQ4NmRkM2YwZThmMDIwNzM4MGY4ZDliLi5kYTNhN2Vl
NzViOGMwMTI1OTQ2NmVjNGE3ZWFkYTk3YmQxYzIzYmY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25Db29y
ZGluYXRvci5jcHAKQEAgLTc4LDcgKzc4LDcgQEAgdm9pZCBTUUxUcmFuc2FjdGlvbkNvb3JkaW5h
dG9yOjphY3F1aXJlTG9jayhTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCiAgICAgICAgIGNv
b3JkaW5hdGlvbkluZm9JdGVyYXRvciA9IG1fY29vcmRpbmF0aW9uSW5mb01hcC5hZGQoZGJJZGVu
dGlmaWVyLCBDb29yZGluYXRpb25JbmZvKCkpLml0ZXJhdG9yOwogICAgIH0KIAotICAgIENvb3Jk
aW5hdGlvbkluZm8mIGluZm8gPSBjb29yZGluYXRpb25JbmZvSXRlcmF0b3ItPnNlY29uZDsKKyAg
ICBDb29yZGluYXRpb25JbmZvJiBpbmZvID0gY29vcmRpbmF0aW9uSW5mb0l0ZXJhdG9yLT52YWx1
ZTsKICAgICBpbmZvLnBlbmRpbmdUcmFuc2FjdGlvbnMuYXBwZW5kKHRyYW5zYWN0aW9uKTsKICAg
ICBwcm9jZXNzUGVuZGluZ1RyYW5zYWN0aW9ucyhpbmZvKTsKIH0KQEAgLTkyLDcgKzkyLDcgQEAg
dm9pZCBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpyZWxlYXNlTG9jayhTUUxUcmFuc2FjdGlv
biogdHJhbnNhY3Rpb24pCiAKICAgICBDb29yZGluYXRpb25JbmZvTWFwOjppdGVyYXRvciBjb29y
ZGluYXRpb25JbmZvSXRlcmF0b3IgPSBtX2Nvb3JkaW5hdGlvbkluZm9NYXAuZmluZChkYklkZW50
aWZpZXIpOwogICAgIEFTU0VSVChjb29yZGluYXRpb25JbmZvSXRlcmF0b3IgIT0gbV9jb29yZGlu
YXRpb25JbmZvTWFwLmVuZCgpKTsKLSAgICBDb29yZGluYXRpb25JbmZvJiBpbmZvID0gY29vcmRp
bmF0aW9uSW5mb0l0ZXJhdG9yLT5zZWNvbmQ7CisgICAgQ29vcmRpbmF0aW9uSW5mbyYgaW5mbyA9
IGNvb3JkaW5hdGlvbkluZm9JdGVyYXRvci0+dmFsdWU7CiAKICAgICBpZiAodHJhbnNhY3Rpb24t
PmlzUmVhZE9ubHkoKSkgewogICAgICAgICBBU1NFUlQoaW5mby5hY3RpdmVSZWFkVHJhbnNhY3Rp
b25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uKSk7CkBAIC0xMTAsNyArMTEwLDcgQEAgdm9pZCBTUUxU
cmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpzaHV0ZG93bigpCiAgICAgLy8gTm90aWZ5IGFsbCB0cmFu
c2FjdGlvbnMgaW4gcHJvZ3Jlc3MgdGhhdCB0aGUgZGF0YWJhc2UgdGhyZWFkIGlzIHNodXR0aW5n
IGRvd24KICAgICBmb3IgKENvb3JkaW5hdGlvbkluZm9NYXA6Oml0ZXJhdG9yIGNvb3JkaW5hdGlv
bkluZm9JdGVyYXRvciA9IG1fY29vcmRpbmF0aW9uSW5mb01hcC5iZWdpbigpOwogICAgICAgICAg
Y29vcmRpbmF0aW9uSW5mb0l0ZXJhdG9yICE9IG1fY29vcmRpbmF0aW9uSW5mb01hcC5lbmQoKTsg
Kytjb29yZGluYXRpb25JbmZvSXRlcmF0b3IpIHsKLSAgICAgICAgQ29vcmRpbmF0aW9uSW5mbyYg
aW5mbyA9IGNvb3JkaW5hdGlvbkluZm9JdGVyYXRvci0+c2Vjb25kOworICAgICAgICBDb29yZGlu
YXRpb25JbmZvJiBpbmZvID0gY29vcmRpbmF0aW9uSW5mb0l0ZXJhdG9yLT52YWx1ZTsKICAgICAg
ICAgaWYgKGluZm8uYWN0aXZlV3JpdGVUcmFuc2FjdGlvbikKICAgICAgICAgICAgIGluZm8uYWN0
aXZlV3JpdGVUcmFuc2FjdGlvbi0+bm90aWZ5RGF0YWJhc2VUaHJlYWRJc1NodXR0aW5nRG93bigp
OwogICAgICAgICBmb3IgKEhhc2hTZXQ8UmVmUHRyPFNRTFRyYW5zYWN0aW9uPiA+OjppdGVyYXRv
ciBhY3RpdmVSZWFkVHJhbnNhY3Rpb25zSXRlcmF0b3IgPQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9jaHJvbWl1bS9EYXRhYmFzZVRyYWNrZXJDaHJvbWl1
bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL0RhdGFi
YXNlVHJhY2tlckNocm9taXVtLmNwcAppbmRleCAxMTdmZGJlZWQzMWQ2M2I2NGI5NDE4MDNiOGVh
ZGNkOTk4NWNlZWZjLi42MGE3NmNhNWM5NTk4MmJlYTk0Y2UwN2JhZjY2ZWRhNWQ4MjdjNWFiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL0Rh
dGFiYXNlVHJhY2tlckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmRhdGFiYXNlL2Nocm9taXVtL0RhdGFiYXNlVHJhY2tlckNocm9taXVtLmNwcApAQCAtMTgwLDcg
KzE4MCw3IEBAIHZvaWQgRGF0YWJhc2VUcmFja2VyOjppbnRlcnJ1cHRBbGxEYXRhYmFzZXNGb3JD
b250ZXh0KGNvbnN0IFNjcmlwdEV4ZWN1dGlvbkNvbnRlCiAKICAgICBEYXRhYmFzZU5hbWVNYXA6
OmNvbnN0X2l0ZXJhdG9yIGRiTmFtZU1hcEVuZEl0ID0gbmFtZU1hcC0+ZW5kKCk7CiAgICAgZm9y
IChEYXRhYmFzZU5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGRiTmFtZU1hcEl0ID0gbmFtZU1hcC0+
YmVnaW4oKTsgZGJOYW1lTWFwSXQgIT0gZGJOYW1lTWFwRW5kSXQ7ICsrZGJOYW1lTWFwSXQpIHsK
LSAgICAgICAgRGF0YWJhc2VTZXQqIGRhdGFiYXNlU2V0ID0gZGJOYW1lTWFwSXQtPnNlY29uZDsK
KyAgICAgICAgRGF0YWJhc2VTZXQqIGRhdGFiYXNlU2V0ID0gZGJOYW1lTWFwSXQtPnZhbHVlOwog
ICAgICAgICBEYXRhYmFzZVNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gZGF0YWJhc2VTZXQtPmVu
ZCgpOwogICAgICAgICBmb3IgKERhdGFiYXNlU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IGRhdGFi
YXNlU2V0LT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIGlmICgoKml0
KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpID09IGNvbnRleHQpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL1F1b3RhVHJhY2tlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL1F1b3RhVHJhY2tl
ci5jcHAKaW5kZXggMDM0NGNhOGY2NTZhNjVkMzdiMzA0YmI3ZTM5ODg5ZmNlMzZmOGY1ZC4uMzgy
YTNmYjhiNTc4NjI1NWNlYmEwZTdmODU5YjE0MmFlYzFkOTUxOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9jaHJvbWl1bS9RdW90YVRyYWNrZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvY2hyb21pdW0vUXVvdGFUcmFj
a2VyLmNwcApAQCAtNTMsOCArNTMsOCBAQCB2b2lkIFF1b3RhVHJhY2tlcjo6Z2V0RGF0YWJhc2VT
aXplQW5kU3BhY2VBdmFpbGFibGVUb09yaWdpbigKICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja0Rh
dGEobV9kYXRhR3VhcmQpOwogICAgICAgICBBU1NFUlQobV9kYXRhYmFzZVNpemVzLmNvbnRhaW5z
KG9yaWdpbklkZW50aWZpZXIpKTsKICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFNpemVNYXA+Ojpj
b25zdF9pdGVyYXRvciBpdCA9IG1fZGF0YWJhc2VTaXplcy5maW5kKG9yaWdpbklkZW50aWZpZXIp
OwotICAgICAgICBBU1NFUlQoaXQtPnNlY29uZC5jb250YWlucyhkYXRhYmFzZU5hbWUpKTsKLSAg
ICAgICAgKmRhdGFiYXNlU2l6ZSA9IGl0LT5zZWNvbmQuZ2V0KGRhdGFiYXNlTmFtZSk7CisgICAg
ICAgIEFTU0VSVChpdC0+dmFsdWUuY29udGFpbnMoZGF0YWJhc2VOYW1lKSk7CisgICAgICAgICpk
YXRhYmFzZVNpemUgPSBpdC0+dmFsdWUuZ2V0KGRhdGFiYXNlTmFtZSk7CiAKICAgICAgICAgaWYg
KG1fc3BhY2VBdmFpbGFibGVUb09yaWdpbnMuY29udGFpbnMob3JpZ2luSWRlbnRpZmllcikpIHsK
ICAgICAgICAgICAgICpzcGFjZUF2YWlsYWJsZSA9IG1fc3BhY2VBdmFpbGFibGVUb09yaWdpbnMu
Z2V0KG9yaWdpbklkZW50aWZpZXIpOwpAQCAtNzIsNyArNzIsNyBAQCB2b2lkIFF1b3RhVHJhY2tl
cjo6dXBkYXRlRGF0YWJhc2VTaXplKAogewogICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhKG1fZGF0
YUd1YXJkKTsKICAgICBIYXNoTWFwPFN0cmluZywgU2l6ZU1hcD46Oml0ZXJhdG9yIGl0ID0gbV9k
YXRhYmFzZVNpemVzLmFkZChvcmlnaW5JZGVudGlmaWVyLCBTaXplTWFwKCkpLml0ZXJhdG9yOwot
ICAgIGl0LT5zZWNvbmQuc2V0KGRhdGFiYXNlTmFtZSwgZGF0YWJhc2VTaXplKTsKKyAgICBpdC0+
dmFsdWUuc2V0KGRhdGFiYXNlTmFtZSwgZGF0YWJhc2VTaXplKTsKIH0KIAogdm9pZCBRdW90YVRy
YWNrZXI6OnVwZGF0ZVNwYWNlQXZhaWxhYmxlVG9PcmlnaW4oY29uc3QgU3RyaW5nJiBvcmlnaW5J
ZGVudGlmaWVyLCB1bnNpZ25lZCBsb25nIGxvbmcgc3BhY2VBdmFpbGFibGUpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0RGVmbGF0ZUZyYW1l
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0RGVmbGF0
ZUZyYW1lci5jcHAKaW5kZXggNzZjMDQwZDFjOTM3MmFiNzBlMjI2NDYwYTg3ZDJhNTVmMmM4OGZm
MC4uNjdiYjNkYWExMjk5ODg0NTExMTA2OTBlMTkyZWEwZGEwMDc2NmNkOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldERlZmxhdGVGcmFtZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXREZWZs
YXRlRnJhbWVyLmNwcApAQCAtODcsNyArODcsNyBAQCBib29sIFdlYlNvY2tldEV4dGVuc2lvbkRl
ZmxhdGVGcmFtZTo6cHJvY2Vzc1Jlc3BvbnNlKGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbgog
ICAgIGludCB3aW5kb3dCaXRzID0gMTU7CiAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNv
bnN0X2l0ZXJhdG9yIHBhcmFtZXRlciA9IHNlcnZlclBhcmFtZXRlcnMuZmluZCgibWF4X3dpbmRv
d19iaXRzIik7CiAgICAgaWYgKHBhcmFtZXRlciAhPSBzZXJ2ZXJQYXJhbWV0ZXJzLmVuZCgpKSB7
Ci0gICAgICAgIHdpbmRvd0JpdHMgPSBwYXJhbWV0ZXItPnNlY29uZC50b0ludCgpOworICAgICAg
ICB3aW5kb3dCaXRzID0gcGFyYW1ldGVyLT52YWx1ZS50b0ludCgpOwogICAgICAgICBpZiAod2lu
ZG93Qml0cyA8IDggfHwgd2luZG93Qml0cyA+IDE1KSB7CiAgICAgICAgICAgICBtX2ZhaWx1cmVS
ZWFzb24gPSAiUmVjZWl2ZWQgaW52YWxpZCBtYXhfd2luZG93X2JpdHMgcGFyYW1ldGVyIjsKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTk4LDcgKzk4LDcgQEAgYm9vbCBXZWJTb2NrZXRF
eHRlbnNpb25EZWZsYXRlRnJhbWU6OnByb2Nlc3NSZXNwb25zZShjb25zdCBIYXNoTWFwPFN0cmlu
ZywgU3RyaW4KICAgICBXZWJTb2NrZXREZWZsYXRlcjo6Q29udGV4dFRha2VPdmVyTW9kZSBtb2Rl
ID0gV2ViU29ja2V0RGVmbGF0ZXI6OlRha2VPdmVyQ29udGV4dDsKICAgICBwYXJhbWV0ZXIgPSBz
ZXJ2ZXJQYXJhbWV0ZXJzLmZpbmQoIm5vX2NvbnRleHRfdGFrZW92ZXIiKTsKICAgICBpZiAocGFy
YW1ldGVyICE9IHNlcnZlclBhcmFtZXRlcnMuZW5kKCkpIHsKLSAgICAgICAgaWYgKCFwYXJhbWV0
ZXItPnNlY29uZC5pc051bGwoKSkgeworICAgICAgICBpZiAoIXBhcmFtZXRlci0+dmFsdWUuaXNO
dWxsKCkpIHsKICAgICAgICAgICAgIG1fZmFpbHVyZVJlYXNvbiA9ICJSZWNlaXZlZCBpbnZhbGlk
IG5vX2NvbnRleHRfdGFrZW92ZXIgcGFyYW1ldGVyIjsKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2Nr
ZXRzL1dlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXIuY3BwCmluZGV4IDdj
NTkyYWQxYmYyODA2OGM4MzAzMzY5YjYwNjU2NzNiNmJhN2U5NzQuLjU2MDlmNjU4MWFhYjk3NDJi
MGZkODVmZjE1ZDE1ZmE1MGVkMjlmNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0RXh0ZW5zaW9uRGlzcGF0Y2hl
ci5jcHAKQEAgLTE4MSwxMCArMTgxLDEwIEBAIHZvaWQgV2ViU29ja2V0RXh0ZW5zaW9uRGlzcGF0
Y2hlcjo6YXBwZW5kQWNjZXB0ZWRFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBleHRlbnNpCiAgICAg
Ly8gRklYTUU6IFNob3VsZCB1c2UgTGlzdEhhc2hTZXQgdG8ga2VlcCB0aGUgb3JkZXIgb2YgdGhl
IHBhcmFtZXRlcnMuCiAgICAgZm9yIChIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRl
cmF0b3IgaXRlcmF0b3IgPSBleHRlbnNpb25QYXJhbWV0ZXJzLmJlZ2luKCk7IGl0ZXJhdG9yICE9
IGV4dGVuc2lvblBhcmFtZXRlcnMuZW5kKCk7ICsraXRlcmF0b3IpIHsKICAgICAgICAgbV9hY2Nl
cHRlZEV4dGVuc2lvbnNCdWlsZGVyLmFwcGVuZCgiOyAiKTsKLSAgICAgICAgbV9hY2NlcHRlZEV4
dGVuc2lvbnNCdWlsZGVyLmFwcGVuZChpdGVyYXRvci0+Zmlyc3QpOwotICAgICAgICBpZiAoIWl0
ZXJhdG9yLT5zZWNvbmQuaXNOdWxsKCkpIHsKKyAgICAgICAgbV9hY2NlcHRlZEV4dGVuc2lvbnNC
dWlsZGVyLmFwcGVuZChpdGVyYXRvci0+a2V5KTsKKyAgICAgICAgaWYgKCFpdGVyYXRvci0+dmFs
dWUuaXNOdWxsKCkpIHsKICAgICAgICAgICAgIG1fYWNjZXB0ZWRFeHRlbnNpb25zQnVpbGRlci5h
cHBlbmQoIj0iKTsKLSAgICAgICAgICAgIG1fYWNjZXB0ZWRFeHRlbnNpb25zQnVpbGRlci5hcHBl
bmQoaXRlcmF0b3ItPnNlY29uZCk7CisgICAgICAgICAgICBtX2FjY2VwdGVkRXh0ZW5zaW9uc0J1
aWxkZXIuYXBwZW5kKGl0ZXJhdG9yLT52YWx1ZSk7CiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwIGIv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAppbmRleCBkYWQ0
Yzg0MGZhNDZhNjliZmYxZTAwMjIyYmFkZDQwMTk3ZWUyNWYwLi42YjNhMzdhOGI5Yzg2M2Q0ZTBh
MjAyNWFlMTJjMmIzNTY3MmVjYzU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQVhPYmplY3RDYWNoZS5jcHAKQEAgLTk0LDcgKzk0LDcgQEAgQVhPYmplY3RDYWNoZTo6fkFY
T2JqZWN0Q2FjaGUoKQogewogICAgIEhhc2hNYXA8QVhJRCwgUmVmUHRyPEFjY2Vzc2liaWxpdHlP
YmplY3Q+ID46Oml0ZXJhdG9yIGVuZCA9IG1fb2JqZWN0cy5lbmQoKTsKICAgICBmb3IgKEhhc2hN
YXA8QVhJRCwgUmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+ID46Oml0ZXJhdG9yIGl0ID0gbV9v
YmplY3RzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBvYmogPSAoKml0KS5zZWNvbmQuZ2V0KCk7CisgICAgICAgIEFjY2Vzc2liaWxpdHlP
YmplY3QqIG9iaiA9ICgqaXQpLnZhbHVlLmdldCgpOwogICAgICAgICBkZXRhY2hXcmFwcGVyKG9i
aik7CiAgICAgICAgIG9iai0+ZGV0YWNoKCk7CiAgICAgICAgIHJlbW92ZUFYSUQob2JqKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvRE9NT2JqZWN0Q2FjaGUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9ET01PYmplY3RDYWNoZS5jcHAK
aW5kZXggMmU3ZjEwNmU3OWUzMWM3MzE1NGFiOWNmYWExOWE1ODllOWRlN2RkNS4uZGQ3ZDA0OTcx
OGM4MTIyZjI0YjM4ZGI4ODNlNWI2YjY0ZTJlYzA2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvZ29iamVjdC9ET01PYmplY3RDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvZ29iamVjdC9ET01PYmplY3RDYWNoZS5jcHAKQEAgLTc0LDcgKzc0LDcgQEAg
dm9pZCBET01PYmplY3RDYWNoZTo6Y2xlYXJCeUZyYW1lKFdlYkNvcmU6OkZyYW1lKiBmcmFtZSkK
ICAgICAvLyBpdGVyYXRpbmcgdGhlIGNhY2hlIGl0c2VsZi4KICAgICBET01PYmplY3RNYXA6Oml0
ZXJhdG9yIGVuZCA9IGRvbU9iamVjdHMoKS5lbmQoKTsKICAgICBmb3IgKERPTU9iamVjdE1hcDo6
aXRlcmF0b3IgaXRlciA9IGRvbU9iamVjdHMoKS5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVy
KSB7Ci0gICAgICAgIERPTU9iamVjdENhY2hlRGF0YSogZGF0YSA9IGl0ZXItPnNlY29uZDsKKyAg
ICAgICAgRE9NT2JqZWN0Q2FjaGVEYXRhKiBkYXRhID0gaXRlci0+dmFsdWU7CiAgICAgICAgIEFT
U0VSVChkYXRhKTsKICAgICAgICAgaWYgKCghZnJhbWUgfHwgZGF0YS0+ZnJhbWUgPT0gZnJhbWUp
ICYmIGRhdGEtPnRpbWVzUmV0dXJuZWQpCiAgICAgICAgICAgICB0b1VucmVmLmFwcGVuZChkYXRh
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTU9iamVjdEhhc2hU
YWJsZU1hcC5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NT2JqZWN0SGFzaFRhYmxl
TWFwLmgKaW5kZXggNjQ4MjhkNjk4OGY3ZTQzYjNlOWE0NjM2OTA4Y2QyMTI1NDdhMmZmYy4uNzUz
YzA0ZDJmYzU3NzJlMDk1OWRjZWY1YWM2MWJhMzBjOTZlMTc4ZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvRE9NT2JqZWN0SGFzaFRhYmxlTWFwLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvRE9NT2JqZWN0SGFzaFRhYmxlTWFwLmgKQEAgLTM5LDE1ICsz
OSwxNSBAQCBwdWJsaWM6CiAgICAgfkRPTU9iamVjdEhhc2hUYWJsZU1hcCgpCiAgICAgewogICAg
ICAgICBmb3IgKEhhc2hNYXA8Y29uc3QgSlNDOjpIYXNoVGFibGUqLCBKU0M6Okhhc2hUYWJsZT46
Oml0ZXJhdG9yIGl0ZXIgPSBtX21hcC5iZWdpbigpOyBpdGVyICE9IG1fbWFwLmVuZCgpOyArK2l0
ZXIpCi0gICAgICAgICAgICBpdGVyLT5zZWNvbmQuZGVsZXRlVGFibGUoKTsKKyAgICAgICAgICAg
IGl0ZXItPnZhbHVlLmRlbGV0ZVRhYmxlKCk7CiAgICAgfQogCiAgICAgY29uc3QgSlNDOjpIYXNo
VGFibGUqIGdldChjb25zdCBKU0M6Okhhc2hUYWJsZSogc3RhdGljVGFibGUpCiAgICAgewogICAg
ICAgICBIYXNoTWFwPGNvbnN0IEpTQzo6SGFzaFRhYmxlKiwgSlNDOjpIYXNoVGFibGU+OjppdGVy
YXRvciBpdGVyID0gbV9tYXAuZmluZChzdGF0aWNUYWJsZSk7CiAgICAgICAgIGlmIChpdGVyICE9
IG1fbWFwLmVuZCgpKQotICAgICAgICAgICAgcmV0dXJuICZpdGVyLT5zZWNvbmQ7Ci0gICAgICAg
IHJldHVybiAmbV9tYXAuc2V0KHN0YXRpY1RhYmxlLCBzdGF0aWNUYWJsZS0+Y29weSgpKS5pdGVy
YXRvci0+c2Vjb25kOworICAgICAgICAgICAgcmV0dXJuICZpdGVyLT52YWx1ZTsKKyAgICAgICAg
cmV0dXJuICZtX21hcC5zZXQoc3RhdGljVGFibGUsIHN0YXRpY1RhYmxlLT5jb3B5KCkpLml0ZXJh
dG9yLT52YWx1ZTsKICAgICB9CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01CaW5kaW5nLmNwcAppbmRleCAzMWYyNWRhZjBhYjI2M2IyMTZkYjQ5OGQxOTk0OTQ1
YmVhM2Q5NjEyLi5hMTk5OGY3ZjRiOTEyODBkZGY4MGQyMTcwYzk2ZWE4MzU3NmM2YmNmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAKQEAgLTI3NCw3ICsy
NzQsNyBAQCBTdHJ1Y3R1cmUqIGNhY2hlRE9NU3RydWN0dXJlKEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dQogewogICAgIEpTRE9NU3RydWN0dXJlTWFw
JiBzdHJ1Y3R1cmVzID0gZ2xvYmFsT2JqZWN0LT5zdHJ1Y3R1cmVzKCk7CiAgICAgQVNTRVJUKCFz
dHJ1Y3R1cmVzLmNvbnRhaW5zKGNsYXNzSW5mbykpOwotICAgIHJldHVybiBzdHJ1Y3R1cmVzLnNl
dChjbGFzc0luZm8sIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KGdsb2JhbE9iamVjdC0+Z2xvYmFs
RGF0YSgpLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkpLml0ZXJhdG9yLT5zZWNvbmQuZ2V0KCk7
CisgICAgcmV0dXJuIHN0cnVjdHVyZXMuc2V0KGNsYXNzSW5mbywgV3JpdGVCYXJyaWVyPFN0cnVj
dHVyZT4oZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdCwgc3RydWN0dXJl
KSkuaXRlcmF0b3ItPnZhbHVlLmdldCgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAKaW5k
ZXggMzYxMDQ4MDhiYjYwOWU1N2IwNDgxMTg1MmU4OTVkYWQ3MTMwYTRhZS4uZDNjNDI5YTUwOGQ5
MTBkZTdiZDJlZWJlZDY3ZDc3NWMyNWVjN2IxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcApAQCAtODgsMTEgKzg4LDExIEBAIHZvaWQg
SlNET01HbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikKIAogICAgIEpTRE9NU3RydWN0dXJlTWFwOjppdGVyYXRvciBlbmQgPSB0aGlz
T2JqZWN0LT5zdHJ1Y3R1cmVzKCkuZW5kKCk7CiAgICAgZm9yIChKU0RPTVN0cnVjdHVyZU1hcDo6
aXRlcmF0b3IgaXQgPSB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmVzKCkuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KQotICAgICAgICB2aXNpdG9yLmFwcGVuZCgmaXQtPnNlY29uZCk7CisgICAgICAgIHZp
c2l0b3IuYXBwZW5kKCZpdC0+dmFsdWUpOwogCiAgICAgSlNET01Db25zdHJ1Y3Rvck1hcDo6aXRl
cmF0b3IgZW5kMiA9IHRoaXNPYmplY3QtPmNvbnN0cnVjdG9ycygpLmVuZCgpOwogICAgIGZvciAo
SlNET01Db25zdHJ1Y3Rvck1hcDo6aXRlcmF0b3IgaXQyID0gdGhpc09iamVjdC0+Y29uc3RydWN0
b3JzKCkuYmVnaW4oKTsgaXQyICE9IGVuZDI7ICsraXQyKQotICAgICAgICB2aXNpdG9yLmFwcGVu
ZCgmaXQyLT5zZWNvbmQpOworICAgICAgICB2aXNpdG9yLmFwcGVuZCgmaXQyLT52YWx1ZSk7CiB9
CiAKIHZvaWQgSlNET01HbG9iYWxPYmplY3Q6OnNldEN1cnJlbnRFdmVudChFdmVudCogY3VycmVu
dEV2ZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9i
YWxPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0
LmgKaW5kZXggYmRhYjU2OGYwMjQ1M2IxNDRmMjNkNDdjYTQ3ZTlkNDY5M2Y1NWM2My4uOWNjMTcx
YmMyODg3NGE4MzllZjgzM2QyMTRmNmY4ZjUxODlmNDc2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oCkBAIC05Myw3ICs5Myw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgSlNDOjpKU09iamVjdCogY29uc3RydWN0b3IgPSBDb25z
dHJ1Y3RvckNsYXNzOjpjcmVhdGUoZXhlYywgQ29uc3RydWN0b3JDbGFzczo6Y3JlYXRlU3RydWN0
dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgY29uc3RfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGds
b2JhbE9iamVjdCksIGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCkpLCBjb25zdF9jYXN0
PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7CiAgICAgICAgIEFTU0VSVCghY29u
c3RfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCktPmNvbnN0cnVjdG9ycygp
LmNvbnRhaW5zKCZDb25zdHJ1Y3RvckNsYXNzOjpzX2luZm8pKTsKICAgICAgICAgSlNDOjpXcml0
ZUJhcnJpZXI8SlNDOjpKU09iamVjdD4gdGVtcDsKLSAgICAgICAgY29uc3RfY2FzdDxKU0RPTUds
b2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCktPmNvbnN0cnVjdG9ycygpLmFkZCgmQ29uc3RydWN0
b3JDbGFzczo6c19pbmZvLCB0ZW1wKS5pdGVyYXRvci0+c2Vjb25kLnNldChleGVjLT5nbG9iYWxE
YXRhKCksIGdsb2JhbE9iamVjdCwgY29uc3RydWN0b3IpOworICAgICAgICBjb25zdF9jYXN0PEpT
RE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KS0+Y29uc3RydWN0b3JzKCkuYWRkKCZDb25z
dHJ1Y3RvckNsYXNzOjpzX2luZm8sIHRlbXApLml0ZXJhdG9yLT52YWx1ZS5zZXQoZXhlYy0+Z2xv
YmFsRGF0YSgpLCBnbG9iYWxPYmplY3QsIGNvbnN0cnVjdG9yKTsKICAgICAgICAgcmV0dXJuIGNv
bnN0cnVjdG9yOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvUGFnZVNjcmlwdERlYnVnU2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHAKaW5kZXggZmYwYWVlZmI1MGE2MDhjOTIxMDMzZDk4
NzkzM2NkYzY1ZmNmZDJjOS4uZWQ3NDNjYzllOWVjNTFjMGQ1MzE2MTA5NGYzM2Q5YzkyYWRiMTBk
NiAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUGFnZVNjcmlwdERlYnVn
U2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9QYWdlU2NyaXB0RGVi
dWdTZXJ2ZXIuY3BwCkBAIC04Miw3ICs4Miw3IEBAIHZvaWQgUGFnZVNjcmlwdERlYnVnU2VydmVy
OjphZGRMaXN0ZW5lcihTY3JpcHREZWJ1Z0xpc3RlbmVyKiBsaXN0ZW5lciwgUGFnZSogcGFnCiAg
ICAgQVNTRVJUX0FSRyhsaXN0ZW5lciwgbGlzdGVuZXIpOwogICAgIEFTU0VSVF9BUkcocGFnZSwg
cGFnZSk7CiAKLSAgICBPd25QdHI8TGlzdGVuZXJTZXQ+JiBsaXN0ZW5lcnMgPSBtX3BhZ2VMaXN0
ZW5lcnNNYXAuYWRkKHBhZ2UsIG51bGxwdHIpLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgT3duUHRy
PExpc3RlbmVyU2V0PiYgbGlzdGVuZXJzID0gbV9wYWdlTGlzdGVuZXJzTWFwLmFkZChwYWdlLCBu
dWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCFsaXN0ZW5lcnMpCiAgICAgICAgIGxp
c3RlbmVycyA9IGFkb3B0UHRyKG5ldyBMaXN0ZW5lclNldCk7CiAgICAgbGlzdGVuZXJzLT5hZGQo
bGlzdGVuZXIpOwpAQCAtMTAwLDcgKzEwMCw3IEBAIHZvaWQgUGFnZVNjcmlwdERlYnVnU2VydmVy
OjpyZW1vdmVMaXN0ZW5lcihTY3JpcHREZWJ1Z0xpc3RlbmVyKiBsaXN0ZW5lciwgUGFnZSoKICAg
ICBpZiAoaXQgPT0gbV9wYWdlTGlzdGVuZXJzTWFwLmVuZCgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBMaXN0ZW5lclNldCogbGlzdGVuZXJzID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICBMaXN0
ZW5lclNldCogbGlzdGVuZXJzID0gaXQtPnZhbHVlLmdldCgpOwogICAgIGxpc3RlbmVycy0+cmVt
b3ZlKGxpc3RlbmVyKTsKICAgICBpZiAobGlzdGVuZXJzLT5pc0VtcHR5KCkpIHsKICAgICAgICAg
bV9wYWdlTGlzdGVuZXJzTWFwLnJlbW92ZShpdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TY3JpcHRDYWNoZWRGcmFtZURhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmNwcAppbmRleCA5Y2Y0ZTk5Y2VhM2Fl
M2E3OTU0MmJkYjM2MDUyZGIxNDczNDFkZDMzLi5iOTlhM2QzN2NkNjBjMDVmYjJiZTRmZDlmMTZj
Nzk4OTgyZTkxZWYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3Jp
cHRDYWNoZWRGcmFtZURhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nj
cmlwdENhY2hlZEZyYW1lRGF0YS5jcHAKQEAgLTUzLDggKzUzLDggQEAgU2NyaXB0Q2FjaGVkRnJh
bWVEYXRhOjpTY3JpcHRDYWNoZWRGcmFtZURhdGEoRnJhbWUqIGZyYW1lKQogCiAgICAgU2NyaXB0
Q29udHJvbGxlcjo6U2hlbGxNYXA6Oml0ZXJhdG9yIHdpbmRvd1NoZWxsc0VuZCA9IHdpbmRvd1No
ZWxscy5lbmQoKTsKICAgICBmb3IgKFNjcmlwdENvbnRyb2xsZXI6OlNoZWxsTWFwOjppdGVyYXRv
ciBpdGVyID0gd2luZG93U2hlbGxzLmJlZ2luKCk7IGl0ZXIgIT0gd2luZG93U2hlbGxzRW5kOyAr
K2l0ZXIpIHsKLSAgICAgICAgSlNET01XaW5kb3cqIHdpbmRvdyA9IGl0ZXItPnNlY29uZC0+d2lu
ZG93KCk7Ci0gICAgICAgIG1fd2luZG93cy5hZGQoaXRlci0+Zmlyc3QuZ2V0KCksIFN0cm9uZzxK
U0RPTVdpbmRvdz4od2luZG93LT5nbG9iYWxEYXRhKCksIHdpbmRvdykpOworICAgICAgICBKU0RP
TVdpbmRvdyogd2luZG93ID0gaXRlci0+dmFsdWUtPndpbmRvdygpOworICAgICAgICBtX3dpbmRv
d3MuYWRkKGl0ZXItPmtleS5nZXQoKSwgU3Ryb25nPEpTRE9NV2luZG93Pih3aW5kb3ctPmdsb2Jh
bERhdGEoKSwgd2luZG93KSk7CiAgICAgfQogCiAgICAgc2NyaXB0Q29udHJvbGxlci0+YXR0YWNo
RGVidWdnZXIoMCk7CkBAIC03NCw4ICs3NCw4IEBAIHZvaWQgU2NyaXB0Q2FjaGVkRnJhbWVEYXRh
OjpyZXN0b3JlKEZyYW1lKiBmcmFtZSkKIAogICAgIFNjcmlwdENvbnRyb2xsZXI6OlNoZWxsTWFw
OjppdGVyYXRvciB3aW5kb3dTaGVsbHNFbmQgPSB3aW5kb3dTaGVsbHMuZW5kKCk7CiAgICAgZm9y
IChTY3JpcHRDb250cm9sbGVyOjpTaGVsbE1hcDo6aXRlcmF0b3IgaXRlciA9IHdpbmRvd1NoZWxs
cy5iZWdpbigpOyBpdGVyICE9IHdpbmRvd1NoZWxsc0VuZDsgKytpdGVyKSB7Ci0gICAgICAgIERP
TVdyYXBwZXJXb3JsZCogd29ybGQgPSBpdGVyLT5maXJzdC5nZXQoKTsKLSAgICAgICAgSlNET01X
aW5kb3dTaGVsbCogd2luZG93U2hlbGwgPSBpdGVyLT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIERP
TVdyYXBwZXJXb3JsZCogd29ybGQgPSBpdGVyLT5rZXkuZ2V0KCk7CisgICAgICAgIEpTRE9NV2lu
ZG93U2hlbGwqIHdpbmRvd1NoZWxsID0gaXRlci0+dmFsdWUuZ2V0KCk7CiAKICAgICAgICAgaWYg
KEpTRE9NV2luZG93KiB3aW5kb3cgPSBtX3dpbmRvd3MuZ2V0KHdvcmxkKS5nZXQoKSkKICAgICAg
ICAgICAgIHdpbmRvd1NoZWxsLT5zZXRXaW5kb3cod2luZG93LT5nbG9iYWxEYXRhKCksIHdpbmRv
dyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9s
bGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3Bw
CmluZGV4IDA2Yzc5OTY0MGE4ZmNhZGZmZWVlYThkN2U1NTIzZmNhYmQ1OGM1ZDguLjUzYjQ1YWZk
MmI2YWE4OTRhZGI5OGY3NjdjY2FjMjZiMmY1NWM0YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCkBAIC05Myw3ICs5Myw3IEBAIFNjcmlw
dENvbnRyb2xsZXI6On5TY3JpcHRDb250cm9sbGVyKCkKICAgICAvLyBJdCdzIGxpa2VseSB0aGF0
IGRlc3Ryb3lpbmcgbV93aW5kb3dTaGVsbHMgd2lsbCBjcmVhdGUgYSBsb3Qgb2YgZ2FyYmFnZS4K
ICAgICBpZiAoIW1fd2luZG93U2hlbGxzLmlzRW1wdHkoKSkgewogICAgICAgICB3aGlsZSAoIW1f
d2luZG93U2hlbGxzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGRlc3Ryb3lXaW5kb3dTaGVsbCht
X3dpbmRvd1NoZWxscy5iZWdpbigpLT5maXJzdC5nZXQoKSk7CisgICAgICAgICAgICBkZXN0cm95
V2luZG93U2hlbGwobV93aW5kb3dTaGVsbHMuYmVnaW4oKS0+a2V5LmdldCgpKTsKICAgICAgICAg
Z2NDb250cm9sbGVyKCkuZ2FyYmFnZUNvbGxlY3RTb29uKCk7CiAgICAgfQogfQpAQCAtMTgwLDcg
KzE4MCw3IEBAIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6Y2xlYXJXaW5kb3dTaGVsbChib29sIGdv
aW5nSW50b1BhZ2VDYWNoZSkKICAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvd0Jhc2U6
OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKIAogICAgIGZvciAoU2hlbGxNYXA6Oml0ZXJhdG9yIGl0
ZXIgPSBtX3dpbmRvd1NoZWxscy5iZWdpbigpOyBpdGVyICE9IG1fd2luZG93U2hlbGxzLmVuZCgp
OyArK2l0ZXIpIHsKLSAgICAgICAgSlNET01XaW5kb3dTaGVsbCogd2luZG93U2hlbGwgPSBpdGVy
LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIEpTRE9NV2luZG93U2hlbGwqIHdpbmRvd1NoZWxsID0g
aXRlci0+dmFsdWUuZ2V0KCk7CiAKICAgICAgICAgLy8gQ2xlYXIgdGhlIGRlYnVnZ2VyIGZyb20g
dGhlIGN1cnJlbnQgd2luZG93IGJlZm9yZSBzZXR0aW5nIHRoZSBuZXcgd2luZG93LgogICAgICAg
ICBhdHRhY2hEZWJ1Z2dlcih3aW5kb3dTaGVsbCwgMCk7CkBAIC0yNjQsNyArMjY0LDcgQEAgYm9v
bCBTY3JpcHRDb250cm9sbGVyOjpjYW5BY2Nlc3NGcm9tQ3VycmVudE9yaWdpbihGcmFtZSAqZnJh
bWUpCiB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmF0dGFjaERlYnVnZ2VyKEpTQzo6RGVidWdnZXIq
IGRlYnVnZ2VyKQogewogICAgIGZvciAoU2hlbGxNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3dpbmRv
d1NoZWxscy5iZWdpbigpOyBpdGVyICE9IG1fd2luZG93U2hlbGxzLmVuZCgpOyArK2l0ZXIpCi0g
ICAgICAgIGF0dGFjaERlYnVnZ2VyKGl0ZXItPnNlY29uZC5nZXQoKSwgZGVidWdnZXIpOworICAg
ICAgICBhdHRhY2hEZWJ1Z2dlcihpdGVyLT52YWx1ZS5nZXQoKSwgZGVidWdnZXIpOwogfQogCiB2
b2lkIFNjcmlwdENvbnRyb2xsZXI6OmF0dGFjaERlYnVnZ2VyKEpTRE9NV2luZG93U2hlbGwqIHNo
ZWxsLCBKU0M6OkRlYnVnZ2VyKiBkZWJ1Z2dlcikKQEAgLTI4NSw4ICsyODUsOCBAQCB2b2lkIFNj
cmlwdENvbnRyb2xsZXI6OnVwZGF0ZURvY3VtZW50KCkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
Zm9yIChTaGVsbE1hcDo6aXRlcmF0b3IgaXRlciA9IG1fd2luZG93U2hlbGxzLmJlZ2luKCk7IGl0
ZXIgIT0gbV93aW5kb3dTaGVsbHMuZW5kKCk7ICsraXRlcikgewotICAgICAgICBKU0xvY2tIb2xk
ZXIgbG9jayhpdGVyLT5maXJzdC0+Z2xvYmFsRGF0YSgpKTsKLSAgICAgICAgaXRlci0+c2Vjb25k
LT53aW5kb3coKS0+dXBkYXRlRG9jdW1lbnQoKTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2so
aXRlci0+a2V5LT5nbG9iYWxEYXRhKCkpOworICAgICAgICBpdGVyLT52YWx1ZS0+d2luZG93KCkt
PnVwZGF0ZURvY3VtZW50KCk7CiAgICAgfQogfQogCkBAIC0zMjMsNyArMzIzLDcgQEAgUGFzc1Jl
ZlB0cjxCaW5kaW5nczo6Um9vdE9iamVjdD4gU2NyaXB0Q29udHJvbGxlcjo6Y3JlYXRlUm9vdE9i
amVjdCh2b2lkKiBuYXRpdmUKIHsKICAgICBSb290T2JqZWN0TWFwOjppdGVyYXRvciBpdCA9IG1f
cm9vdE9iamVjdHMuZmluZChuYXRpdmVIYW5kbGUpOwogICAgIGlmIChpdCAhPSBtX3Jvb3RPYmpl
Y3RzLmVuZCgpKQotICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGl0
LT52YWx1ZTsKIAogICAgIFJlZlB0cjxCaW5kaW5nczo6Um9vdE9iamVjdD4gcm9vdE9iamVjdCA9
IEJpbmRpbmdzOjpSb290T2JqZWN0OjpjcmVhdGUobmF0aXZlSGFuZGxlLCBnbG9iYWxPYmplY3Qo
cGx1Z2luV29ybGQoKSkpOwogCkBAIC0zMzksOCArMzM5LDggQEAgdm9pZCBTY3JpcHRDb250cm9s
bGVyOjpzZXRDYXB0dXJlQ2FsbFN0YWNrRm9yVW5jYXVnaHRFeGNlcHRpb25zKGJvb2wpCiB2b2lk
IFNjcmlwdENvbnRyb2xsZXI6OmNvbGxlY3RJc29sYXRlZENvbnRleHRzKFZlY3RvcjxzdGQ6OnBh
aXI8SlNDOjpFeGVjU3RhdGUqLCBTZWN1cml0eU9yaWdpbio+ID4mIHJlc3VsdCkKIHsKICAgICBm
b3IgKFNoZWxsTWFwOjppdGVyYXRvciBpdGVyID0gbV93aW5kb3dTaGVsbHMuYmVnaW4oKTsgaXRl
ciAhPSBtX3dpbmRvd1NoZWxscy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIEpTQzo6RXhlY1N0
YXRlKiBleGVjID0gaXRlci0+c2Vjb25kLT53aW5kb3coKS0+Z2xvYmFsRXhlYygpOwotICAgICAg
ICBTZWN1cml0eU9yaWdpbiogb3JpZ2luID0gaXRlci0+c2Vjb25kLT53aW5kb3coKS0+aW1wbCgp
LT5zZWN1cml0eU9yaWdpbigpOworICAgICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IGl0ZXIt
PnZhbHVlLT53aW5kb3coKS0+Z2xvYmFsRXhlYygpOworICAgICAgICBTZWN1cml0eU9yaWdpbiog
b3JpZ2luID0gaXRlci0+dmFsdWUtPndpbmRvdygpLT5pbXBsKCktPnNlY3VyaXR5T3JpZ2luKCk7
CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoc3RkOjpwYWlyPFNjcmlwdFN0YXRlKiwgU2VjdXJpdHlP
cmlnaW4qPihleGVjLCBvcmlnaW4pKTsKICAgICB9CiB9CkBAIC00MTgsNyArNDE4LDcgQEAgdm9p
ZCBTY3JpcHRDb250cm9sbGVyOjpjbGVhbnVwU2NyaXB0T2JqZWN0c0ZvclBsdWdpbih2b2lkKiBu
YXRpdmVIYW5kbGUpCiAgICAgaWYgKGl0ID09IG1fcm9vdE9iamVjdHMuZW5kKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGl0LT5zZWNvbmQtPmludmFsaWRhdGUoKTsKKyAgICBpdC0+dmFsdWUt
PmludmFsaWRhdGUoKTsKICAgICBtX3Jvb3RPYmplY3RzLnJlbW92ZShpdCk7CiB9CiAKQEAgLTQy
OCw3ICs0MjgsNyBAQCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmNsZWFyU2NyaXB0T2JqZWN0cygp
CiAKICAgICBSb290T2JqZWN0TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3Jvb3RPYmplY3Rz
LmVuZCgpOwogICAgIGZvciAoUm9vdE9iamVjdE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Jv
b3RPYmplY3RzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+
aW52YWxpZGF0ZSgpOworICAgICAgICBpdC0+dmFsdWUtPmludmFsaWRhdGUoKTsKIAogICAgIG1f
cm9vdE9iamVjdHMuY2xlYXIoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvU2NyaXB0Q29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2Ny
aXB0Q29udHJvbGxlci5oCmluZGV4IDBlZDk4Njk2OTE0ODczYjFkYTNhODRhZTJhMDgzMWU4ZmQ4
MTliYmUuLmQ2YTdmN2U0NjA1YWQ0ODYzNGFlMWY1NmJmZjRiMmRhZjczNTgxNWMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmgKQEAgLTc0LDEyICs3
NCwxMiBAQCBwdWJsaWM6CiAgICAgSlNET01XaW5kb3dTaGVsbCogd2luZG93U2hlbGwoRE9NV3Jh
cHBlcldvcmxkKiB3b3JsZCkKICAgICB7CiAgICAgICAgIFNoZWxsTWFwOjppdGVyYXRvciBpdGVy
ID0gbV93aW5kb3dTaGVsbHMuZmluZCh3b3JsZCk7Ci0gICAgICAgIHJldHVybiAoaXRlciAhPSBt
X3dpbmRvd1NoZWxscy5lbmQoKSkgPyBpdGVyLT5zZWNvbmQuZ2V0KCkgOiBpbml0U2NyaXB0KHdv
cmxkKTsKKyAgICAgICAgcmV0dXJuIChpdGVyICE9IG1fd2luZG93U2hlbGxzLmVuZCgpKSA/IGl0
ZXItPnZhbHVlLmdldCgpIDogaW5pdFNjcmlwdCh3b3JsZCk7CiAgICAgfQogICAgIEpTRE9NV2lu
ZG93U2hlbGwqIGV4aXN0aW5nV2luZG93U2hlbGwoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCkgY29u
c3QKICAgICB7CiAgICAgICAgIFNoZWxsTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbV93aW5k
b3dTaGVsbHMuZmluZCh3b3JsZCk7Ci0gICAgICAgIHJldHVybiAoaXRlciAhPSBtX3dpbmRvd1No
ZWxscy5lbmQoKSkgPyBpdGVyLT5zZWNvbmQuZ2V0KCkgOiAwOworICAgICAgICByZXR1cm4gKGl0
ZXIgIT0gbV93aW5kb3dTaGVsbHMuZW5kKCkpID8gaXRlci0+dmFsdWUuZ2V0KCkgOiAwOwogICAg
IH0KICAgICBKU0RPTVdpbmRvdyogZ2xvYmFsT2JqZWN0KERPTVdyYXBwZXJXb3JsZCogd29ybGQp
CiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVi
dWdTZXJ2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2
ZXIuY3BwCmluZGV4IDlhY2U4MmQ5MzdhOTE3Mzk5MzRiYTczYzM3ZWRjZDkwNGNiM2Y3ODguLmU1
ODQ3NDMxZTQwYmQ5ZWM1NTBjM2I5YTEyOWJmMzE3YzNlYmQ4Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHAKQEAgLTc1LDkgKzc1LDkg
QEAgU3RyaW5nIFNjcmlwdERlYnVnU2VydmVyOjpzZXRCcmVha3BvaW50KGNvbnN0IFN0cmluZyYg
c291cmNlSUQsIGNvbnN0IFNjcmlwdEJyZWEKICAgICBTb3VyY2VJZFRvQnJlYWtwb2ludHNNYXA6
Oml0ZXJhdG9yIGl0ID0gbV9zb3VyY2VJZFRvQnJlYWtwb2ludHMuZmluZChzb3VyY2VJRFZhbHVl
KTsKICAgICBpZiAoaXQgPT0gbV9zb3VyY2VJZFRvQnJlYWtwb2ludHMuZW5kKCkpCiAgICAgICAg
IGl0ID0gbV9zb3VyY2VJZFRvQnJlYWtwb2ludHMuc2V0KHNvdXJjZUlEVmFsdWUsIExpbmVUb0Jy
ZWFrcG9pbnRNYXAoKSkuaXRlcmF0b3I7Ci0gICAgaWYgKGl0LT5zZWNvbmQuY29udGFpbnMoc2Ny
aXB0QnJlYWtwb2ludC5saW5lTnVtYmVyICsgMSkpCisgICAgaWYgKGl0LT52YWx1ZS5jb250YWlu
cyhzY3JpcHRCcmVha3BvaW50LmxpbmVOdW1iZXIgKyAxKSkKICAgICAgICAgcmV0dXJuICIiOwot
ICAgIGl0LT5zZWNvbmQuc2V0KHNjcmlwdEJyZWFrcG9pbnQubGluZU51bWJlciArIDEsIHNjcmlw
dEJyZWFrcG9pbnQpOworICAgIGl0LT52YWx1ZS5zZXQoc2NyaXB0QnJlYWtwb2ludC5saW5lTnVt
YmVyICsgMSwgc2NyaXB0QnJlYWtwb2ludCk7CiAgICAgKmFjdHVhbExpbmVOdW1iZXIgPSBzY3Jp
cHRCcmVha3BvaW50LmxpbmVOdW1iZXI7CiAgICAgLy8gRklYTUUoV0s1MzAwMyk6IGltcGxlbWVu
dCBzZXR0aW5nIGJyZWFrcG9pbnRzIGJ5IGxpbmU6Y29sdW1uLgogICAgICphY3R1YWxDb2x1bW5O
dW1iZXIgPSAwOwpAQCAtOTksNyArOTksNyBAQCB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpyZW1v
dmVCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgYnJlYWtwb2ludElkKQogICAgICAgICByZXR1cm47
CiAgICAgU291cmNlSWRUb0JyZWFrcG9pbnRzTWFwOjppdGVyYXRvciBpdCA9IG1fc291cmNlSWRU
b0JyZWFrcG9pbnRzLmZpbmQoc291cmNlSURWYWx1ZSk7CiAgICAgaWYgKGl0ICE9IG1fc291cmNl
SWRUb0JyZWFrcG9pbnRzLmVuZCgpKQotICAgICAgICBpdC0+c2Vjb25kLnJlbW92ZShsaW5lTnVt
YmVyICsgMSk7CisgICAgICAgIGl0LT52YWx1ZS5yZW1vdmUobGluZU51bWJlciArIDEpOwogfQog
CiBib29sIFNjcmlwdERlYnVnU2VydmVyOjpoYXNCcmVha3BvaW50KGludHB0cl90IHNvdXJjZUlE
LCBjb25zdCBUZXh0UG9zaXRpb24mIHBvc2l0aW9uKSBjb25zdApAQCAtMTEzLDE2ICsxMTMsMTYg
QEAgYm9vbCBTY3JpcHREZWJ1Z1NlcnZlcjo6aGFzQnJlYWtwb2ludChpbnRwdHJfdCBzb3VyY2VJ
RCwgY29uc3QgVGV4dFBvc2l0aW9uJiBwb3MKICAgICBpbnQgbGluZU51bWJlciA9IHBvc2l0aW9u
Lm1fbGluZS5vbmVCYXNlZEludCgpOwogICAgIGlmIChsaW5lTnVtYmVyIDw9IDApCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBMaW5lVG9CcmVha3BvaW50TWFwOjpjb25zdF9pdGVyYXRvciBi
cmVha0l0ID0gaXQtPnNlY29uZC5maW5kKGxpbmVOdW1iZXIpOwotICAgIGlmIChicmVha0l0ID09
IGl0LT5zZWNvbmQuZW5kKCkpCisgICAgTGluZVRvQnJlYWtwb2ludE1hcDo6Y29uc3RfaXRlcmF0
b3IgYnJlYWtJdCA9IGl0LT52YWx1ZS5maW5kKGxpbmVOdW1iZXIpOworICAgIGlmIChicmVha0l0
ID09IGl0LT52YWx1ZS5lbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gQW4g
ZW1wdHkgY29uZGl0aW9uIGNvdW50cyBhcyBubyBjb25kaXRpb24gd2hpY2ggaXMgZXF1aXZhbGVu
dCB0byAidHJ1ZSIuCi0gICAgaWYgKGJyZWFrSXQtPnNlY29uZC5jb25kaXRpb24uaXNFbXB0eSgp
KQorICAgIGlmIChicmVha0l0LT52YWx1ZS5jb25kaXRpb24uaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAogICAgIEpTVmFsdWUgZXhjZXB0aW9uOwotICAgIEpTVmFsdWUgcmVzdWx0
ID0gbV9jdXJyZW50Q2FsbEZyYW1lLT5ldmFsdWF0ZShzdHJpbmdUb1VTdHJpbmcoYnJlYWtJdC0+
c2Vjb25kLmNvbmRpdGlvbiksIGV4Y2VwdGlvbik7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBtX2N1
cnJlbnRDYWxsRnJhbWUtPmV2YWx1YXRlKHN0cmluZ1RvVVN0cmluZyhicmVha0l0LT52YWx1ZS5j
b25kaXRpb24pLCBleGNlcHRpb24pOwogICAgIGlmIChleGNlcHRpb24pIHsKICAgICAgICAgLy8g
QW4gZXJyb25lb3VzIGNvbmRpdGlvbiBjb3VudHMgYXMgImZhbHNlIi4KICAgICAgICAgcmV0dXJu
IGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZS5jcHAKaW5kZXggMmI0N2Q0YjYyYjRlODgzY2EyOTljMDljNGVkMTMyNmFjNDU5
ODY2My4uZjc5NzBmZjRkMDA5ZTQzMzc1NDM4OGU0NWFjZGIwZDhhNGE2M2RjMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3Bw
CkBAIC00MDksOCArNDA5LDggQEAgcHJpdmF0ZToKICAgICAgICAgLy8gSGFuZGxlIGR1cGxpY2F0
ZSByZWZlcmVuY2VzCiAgICAgICAgIGlmIChmb3VuZCAhPSBtX29iamVjdFBvb2wuZW5kKCkpIHsK
ICAgICAgICAgICAgIHdyaXRlKE9iamVjdFJlZmVyZW5jZVRhZyk7Ci0gICAgICAgICAgICBBU1NF
UlQoc3RhdGljX2Nhc3Q8aW50MzJfdD4oZm91bmQtPnNlY29uZCkgPCBtX29iamVjdFBvb2wuc2l6
ZSgpKTsKLSAgICAgICAgICAgIHdyaXRlT2JqZWN0SW5kZXgoZm91bmQtPnNlY29uZCk7CisgICAg
ICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50MzJfdD4oZm91bmQtPnZhbHVlKSA8IG1fb2Jq
ZWN0UG9vbC5zaXplKCkpOworICAgICAgICAgICAgd3JpdGVPYmplY3RJbmRleChmb3VuZC0+dmFs
dWUpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KIApAQCAtNjQzLDcgKzY0
Myw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgT2JqZWN0UG9vbDo6aXRlcmF0b3IgaW5k
ZXggPSBtX3RyYW5zZmVycmVkTWVzc2FnZVBvcnRzLmZpbmQob2JqKTsKICAgICAgICAgICAgICAg
ICBpZiAoaW5kZXggIT0gbV90cmFuc2ZlcnJlZE1lc3NhZ2VQb3J0cy5lbmQoKSkgewogICAgICAg
ICAgICAgICAgICAgICB3cml0ZShNZXNzYWdlUG9ydFJlZmVyZW5jZVRhZyk7Ci0gICAgICAgICAg
ICAgICAgICAgIHdyaXRlKGluZGV4LT5zZWNvbmQpOworICAgICAgICAgICAgICAgICAgICB3cml0
ZShpbmRleC0+dmFsdWUpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgLy8gTWVzc2FnZVBvcnQgb2JqZWN0IGNvdWxk
IG5vdCBiZSBmb3VuZCBpbiB0cmFuc2ZlcnJlZCBtZXNzYWdlIHBvcnRzCkBAIC02NTksNyArNjU5
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBPYmplY3RQb29sOjppdGVyYXRvciBpbmRl
eCA9IG1fdHJhbnNmZXJyZWRBcnJheUJ1ZmZlcnMuZmluZChvYmopOwogICAgICAgICAgICAgICAg
IGlmIChpbmRleCAhPSBtX3RyYW5zZmVycmVkQXJyYXlCdWZmZXJzLmVuZCgpKSB7CiAgICAgICAg
ICAgICAgICAgICAgIHdyaXRlKEFycmF5QnVmZmVyVHJhbnNmZXJUYWcpOwotICAgICAgICAgICAg
ICAgICAgICB3cml0ZShpbmRleC0+c2Vjb25kKTsKKyAgICAgICAgICAgICAgICAgICAgd3JpdGUo
aW5kZXgtPnZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmICghc3RhcnRPYmplY3RJbnRlcm5hbChvYmop
KSAvLyBoYW5kbGUgZHVwbGljYXRlcwpAQCAtNzU4LDcgKzc1OCw3IEBAIHByaXZhdGU6CiAgICAg
ICAgIFN0cmluZ0NvbnN0YW50UG9vbDo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IG1fY29uc3RhbnRQ
b29sLmFkZChzdHIuaW1wbCgpLCBtX2NvbnN0YW50UG9vbC5zaXplKCkpOwogICAgICAgICBpZiAo
IWFkZFJlc3VsdC5pc05ld0VudHJ5KSB7CiAgICAgICAgICAgICB3cml0ZShTdHJpbmdQb29sVGFn
KTsKLSAgICAgICAgICAgIHdyaXRlU3RyaW5nSW5kZXgoYWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNv
bmQpOworICAgICAgICAgICAgd3JpdGVTdHJpbmdJbmRleChhZGRSZXN1bHQuaXRlcmF0b3ItPnZh
bHVlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbSBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCmluZGV4IGE0MTkyYmZh
MzJkNWE1M2M0MWJjZjg0MjNlMmQyZjYwNzIyOTE3ZTUuLmVkMWY2YzI1ZDk3ODI4MTMyYjk2MGVl
MDdmNTk5NmI4ZDIyZDljYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCkBAIC0yOTI3LDcgKzI5MjcsNyBAQCB2ODo6UGVyc2lz
dGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gJHtjbGFzc05hbWV9OjpHZXRSYXdUZW1wbGF0ZSgp
CiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOEJpbmRpbmdQZXJJc29sYXRl
RGF0YTo6Y3VycmVudCgpOwogICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1h
cDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsK
ICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAg
IHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAK
ICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6
OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0gY3JlYXRlUmF3VGVtcGxhdGUoKTsKQEAgLTI5NDAs
NyArMjk0MCw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiAke2NsYXNz
TmFtZX06OkdldFRlbXBsYXRlKCkKICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YSogZGF0YSA9
IFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhCaW5kaW5nUGVySXNv
bGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT50ZW1wbGF0ZU1h
cCgpLmZpbmQoJmluZm8pOwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+dGVtcGxhdGVNYXAoKS5l
bmQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVz
dWx0LT52YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6
UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4RmxvYXQ2NEFycmF5LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOEZsb2F0NjRBcnJheS5j
cHAKaW5kZXggZDUxYzlmYWE2OGE2MGI3N2IwODc1N2ViZTU4ZDg1MmVjOTkyZjkwZi4uMTQyYTYw
ZTJjYTBlNDc2YjAxMzA0NTE0NjU0YjMxZDYzZDJhYjljZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4RmxvYXQ2NEFycmF5LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhGbG9hdDY0QXJyYXkuY3Bw
CkBAIC05Myw3ICs5Myw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBW
OEZsb2F0NjRBcnJheTo6R2V0UmF3VGVtcGxhdGUoKQogICAgIFY4QmluZGluZ1Blcklzb2xhdGVE
YXRhKiBkYXRhID0gVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOEJp
bmRpbmdQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEt
PnJhd1RlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT5y
YXdUZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7Cisg
ICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRs
ZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9
IGNyZWF0ZVJhd1RlbXBsYXRlKCk7CkBAIC0xMDYsNyArMTA2LDcgQEAgdjg6OlBlcnNpc3RlbnQ8
djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4RmxvYXQ2NEFycmF5OjpHZXRUZW1wbGF0ZSgpCiAgICAg
VjhCaW5kaW5nUGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6
Y3VycmVudCgpOwogICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRl
cmF0b3IgcmVzdWx0ID0gZGF0YS0+dGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAo
cmVzdWx0ICE9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1
bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFu
ZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVt
cGxhdGU+IHRlbXBsID0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9WOC9WOFRlc3RBY3RpdmVET01PYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEFjdGl2ZURPTU9iamVjdC5jcHAKaW5kZXggMGE5
Yjg4YWRhN2U3MzU0ODBmNmNiYTEzZDBmNDEwMWI5MTMxNWU4Ni4uMmZiYzMxMjM0NDlmMWFmMGZk
YTkzYzlkZDBhOTQzYWIyOTEwMTI1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEFjdGl2ZURPTU9iamVjdC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEFjdGl2ZURPTU9iamVjdC5j
cHAKQEAgLTEzMSw3ICsxMzEsNyBAQCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0
ZT4gVjhUZXN0QWN0aXZlRE9NT2JqZWN0OjpHZXRSYXdUZW1wbGF0ZSgpCiAgICAgVjhCaW5kaW5n
UGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgp
OwogICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVz
dWx0ID0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0
ICE9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQt
PnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxl
U2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxh
dGU+IHRlbXBsID0gY3JlYXRlUmF3VGVtcGxhdGUoKTsKQEAgLTE0NCw3ICsxNDQsNyBAQCB2ODo6
UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0QWN0aXZlRE9NT2JqZWN0OjpH
ZXRUZW1wbGF0ZSgpCiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOEJpbmRp
bmdQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRh
OjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+dGVtcGxhdGVNYXAoKS5maW5k
KCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZW5kKCkpCi0g
ICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFs
dWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3Rl
bnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RDdXN0b21OYW1lZEdldHRlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Q3VzdG9tTmFt
ZWRHZXR0ZXIuY3BwCmluZGV4IDE4MGQ2ZmQ4YzcwMjEzOTMzNzg2OWUyMmIwYzMxOTAyODUxODRk
MmEuLjgzMmI0ZTkyNWZhZTc3NzRkNjViOTU5Y2QyZDdhYzg4YzE4ODAyMzMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RDdXN0b21OYW1l
ZEdldHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4
L1Y4VGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcApAQCAtODMsNyArODMsNyBAQCB2ODo6UGVyc2lz
dGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI6OkdldFJh
d1RlbXBsYXRlKCkKICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4QmluZGlu
Z1Blcklzb2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6
OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmZp
bmQoJmluZm8pOwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5lbmQo
KSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0
LT52YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVy
c2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPSBjcmVhdGVSYXdUZW1wbGF0ZSgp
OwpAQCAtOTYsNyArOTYsNyBAQCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4g
VjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI6OkdldFRlbXBsYXRlKCkKICAgICBWOEJpbmRpbmdQZXJJ
c29sYXRlRGF0YSogZGF0YSA9IFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpjdXJyZW50KCk7CiAg
ICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQg
PSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwogICAgIGlmIChyZXN1bHQgIT0gZGF0
YS0+dGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOwor
ICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5k
bGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwg
PQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4
VGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCmluZGV4IDhkZGE5MjUyZWM2ZWEy
Y2Q1OTc3NDlmOTE3NDNkOGFjY2RlYmYxMTAuLjAwNjk1NjM1NGI1OThlNjk5MGQ5YTQ2OGY5OWVk
MWI4YTYyYmRiOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOFRlc3RFdmVudENvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAKQEAgLTEx
OSw3ICsxMTksNyBAQCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0
RXZlbnRDb25zdHJ1Y3Rvcjo6R2V0UmF3VGVtcGxhdGUoKQogICAgIFY4QmluZGluZ1Blcklzb2xh
dGVEYXRhKiBkYXRhID0gVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBW
OEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRh
dGEtPnJhd1RlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRh
LT5yYXdUZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7
CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhh
bmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1w
bCA9IGNyZWF0ZVJhd1RlbXBsYXRlKCk7CkBAIC0xMzIsNyArMTMyLDcgQEAgdjg6OlBlcnNpc3Rl
bnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdEV2ZW50Q29uc3RydWN0b3I6OkdldFRlbXBs
YXRlKCkKICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4QmluZGluZ1Blcklz
b2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OlRlbXBs
YXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8p
OwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+dGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAg
cmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAog
ICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6
RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50VGFyZ2V0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudFRhcmdldC5jcHAKaW5kZXgg
YzViZGJlYjRlMjNjZTlkNTAxOTdhZWViYTQzNDZkNjhmNGU1YTUxZi4uMGI1MjU3MzMzZjdhNjk0
ODcyZjcyN2E4MjlmYzQ1YjMxNWM2ZmJkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50VGFyZ2V0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRUYXJnZXQuY3BwCkBA
IC0xNDQsNyArMTQ0LDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4
VGVzdEV2ZW50VGFyZ2V0OjpHZXRSYXdUZW1wbGF0ZSgpCiAgICAgVjhCaW5kaW5nUGVySXNvbGF0
ZURhdGEqIGRhdGEgPSBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4
QmluZGluZ1Blcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0
YS0+cmF3VGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEt
PnJhd1RlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFu
ZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBs
ID0gY3JlYXRlUmF3VGVtcGxhdGUoKTsKQEAgLTE1Nyw3ICsxNTcsNyBAQCB2ODo6UGVyc2lzdGVu
dDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0RXZlbnRUYXJnZXQ6OkdldFRlbXBsYXRlKCkK
ICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4QmluZGluZ1Blcklzb2xhdGVE
YXRhOjpjdXJyZW50KCk7CiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFw
OjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwogICAg
IGlmIChyZXN1bHQgIT0gZGF0YS0+dGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJu
IHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAogICAgIHY4
OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rp
b25UZW1wbGF0ZT4gdGVtcGwgPQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV4Y2VwdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXhjZXB0aW9uLmNwcAppbmRleCBlMmM4ZTk2ZWM4
YjdjYmFjNzU3MjllODg1OTk3M2FkZGExNjgxMjE2Li40MTJkMDliN2MwNGFmMTAzYTg0OThiYTI3
MjJiN2Y3Y2MxODgxMjI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVjgvVjhUZXN0RXhjZXB0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXhjZXB0aW9uLmNwcApAQCAtNzMsNyArNzMsNyBA
QCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0RXhjZXB0aW9uOjpH
ZXRSYXdUZW1wbGF0ZSgpCiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOEJp
bmRpbmdQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4QmluZGluZ1Blcklzb2xhdGVE
YXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+cmF3VGVtcGxhdGVNYXAo
KS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCku
ZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6
OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0gY3JlYXRlUmF3VGVtcGxh
dGUoKTsKQEAgLTg2LDcgKzg2LDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxh
dGU+IFY4VGVzdEV4Y2VwdGlvbjo6R2V0VGVtcGxhdGUoKQogICAgIFY4QmluZGluZ1Blcklzb2xh
dGVEYXRhKiBkYXRhID0gVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBW
OEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRh
dGEtPnRlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT50
ZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAg
ICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNj
b3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0
SW50ZXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9W
OFRlc3RJbnRlcmZhY2UuY3BwCmluZGV4IDFkN2RjYjUzNDZiZTVlNzg1MjNkOTAzN2Q4YmJhZDc3
OGI3YTFmOWQuLjE4NDZkOWNiMTRjMzJhODc5ODIwODIwMDY2ZjBhNzhjOGFjY2Y4NGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RJbnRl
cmZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9W
OFRlc3RJbnRlcmZhY2UuY3BwCkBAIC0zMTMsNyArMzEzLDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6
OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdEludGVyZmFjZTo6R2V0UmF3VGVtcGxhdGUoKQogICAg
IFY4QmluZGluZ1Blcklzb2xhdGVEYXRhKiBkYXRhID0gVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6
OmN1cnJlbnQoKTsKICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0
ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAg
aWYgKHJlc3VsdCAhPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1
cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAg
djg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5j
dGlvblRlbXBsYXRlPiB0ZW1wbCA9IGNyZWF0ZVJhd1RlbXBsYXRlKCk7CkBAIC0zMjYsNyArMzI2
LDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdEludGVyZmFj
ZTo6R2V0VGVtcGxhdGUoKQogICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhKiBkYXRhID0gVjhC
aW5kaW5nUGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOEJpbmRpbmdQZXJJc29sYXRl
RGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnRlbXBsYXRlTWFwKCku
ZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmVuZCgp
KQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQt
PnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJz
aXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0
ZW5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0
TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAKaW5kZXggOWMwYzBkODE0MDY4YTdiZDBlZDFlZGNh
NjhlNDhiYzA2ZTYzMmY0ZS4uNTc4MTAyZTdlNzU4MzAwZWY4YmIzODc5MDNjZGIwZGEwOGNlNWNi
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4
VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcApAQCAt
ODMsNyArODMsNyBAQCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0
TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6R2V0UmF3VGVtcGxhdAogICAgIFY4QmluZGluZ1Blcklz
b2xhdGVEYXRhKiBkYXRhID0gVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAg
ICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9
IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBk
YXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNv
bmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3Bl
IGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0
ZW1wbCA9IGNyZWF0ZVJhd1RlbXBsYXRlKCk7CkBAIC05Niw3ICs5Niw3IEBAIHY4OjpQZXJzaXN0
ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjpH
ZXRUZW1wbGF0ZSgpCiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOEJpbmRp
bmdQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRh
OjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+dGVtcGxhdGVNYXAoKS5maW5k
KCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZW5kKCkpCi0g
ICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFs
dWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3Rl
bnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROYW1lZENvbnN0cnVjdG9yLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROYW1lZENvbnN0
cnVjdG9yLmNwcAppbmRleCBhZDg1Y2NlMjIyZThhNWIzNmQzM2JjY2JjZmYxOTQ3M2JlMTRiN2Vm
Li40M2MwYmZiMWQ2OTU2MTU1YzlhYmE2ODRkNzcxMDNlMDVlZTQzOGU4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TmFtZWRDb25zdHJ1
Y3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4
VGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwCkBAIC0xMjMsNyArMTIzLDcgQEAgdjg6OlBlcnNpc3Rl
bnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdE5hbWVkQ29uc3RydWN0b3I6OkdldFJhd1Rl
bXBsYXRlKCkKICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4QmluZGluZ1Bl
cklzb2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OlRl
bXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmZpbmQo
JmluZm8pOwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5lbmQoKSkK
LSAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52
YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lz
dGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPSBjcmVhdGVSYXdUZW1wbGF0ZSgpOwpA
QCAtMTM2LDcgKzEzNiw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBW
OFRlc3ROYW1lZENvbnN0cnVjdG9yOjpHZXRUZW1wbGF0ZSgpCiAgICAgVjhCaW5kaW5nUGVySXNv
bGF0ZURhdGEqIGRhdGEgPSBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAg
IFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0g
ZGF0YS0+dGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEt
PnRlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxl
U2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3ROb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3ROb2RlLmNwcAppbmRleCBjZTM3ZTAwMmYyNWJlNTk3NWYxMTZkOTk1N2JkZTE4MTU1MTBkZWQ3
Li5mOWQ1OTEyOGNiZDE2Nzc1ZTA3MDcxYWRmMDhlY2IzMDhjMzJhMDZmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Tm9kZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5vZGUuY3Bw
CkBAIC04MSw3ICs4MSw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBW
OFRlc3ROb2RlOjpHZXRSYXdUZW1wbGF0ZSgpCiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGEq
IGRhdGEgPSBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4QmluZGlu
Z1Blcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+cmF3
VGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnJhd1Rl
bXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2Nv
cGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0gY3Jl
YXRlUmF3VGVtcGxhdGUoKTsKQEAgLTk0LDcgKzk0LDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1
bmN0aW9uVGVtcGxhdGU+IFY4VGVzdE5vZGU6OkdldFRlbXBsYXRlKCkKICAgICBWOEJpbmRpbmdQ
ZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpjdXJyZW50KCk7
CiAgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1
bHQgPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwogICAgIGlmIChyZXN1bHQgIT0g
ZGF0YS0+dGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25k
OworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBo
YW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVt
cGwgPQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4
L1Y4VGVzdE9iai5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgv
VjhUZXN0T2JqLmNwcAppbmRleCAyZGJiOTdiMzA2MzdmNzUwNTdkNzVlYzVmNmI0YzhjODVjYzAx
MDNiLi41NDg3NjYyZTUwODM0YzUxNWNlNmE3NjZiZjcxZjQzZmM4ZTkwMGFiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNw
cApAQCAtMjI2Miw3ICsyMjYyLDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxh
dGU+IFY4VGVzdE9iajo6R2V0UmF3VGVtcGxhdGUoKQogICAgIFY4QmluZGluZ1Blcklzb2xhdGVE
YXRhKiBkYXRhID0gVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOEJp
bmRpbmdQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEt
PnJhd1RlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT5y
YXdUZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7Cisg
ICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRs
ZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9
IGNyZWF0ZVJhd1RlbXBsYXRlKCk7CkBAIC0yMjc1LDcgKzIyNzUsNyBAQCB2ODo6UGVyc2lzdGVu
dDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0T2JqOjpHZXRUZW1wbGF0ZSgpCiAgICAgVjhC
aW5kaW5nUGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6Y3Vy
cmVudCgpOwogICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0
b3IgcmVzdWx0ID0gZGF0YS0+dGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVz
dWx0ICE9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQt
PnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxl
U2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxh
dGU+IHRlbXBsID0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZS5jcHAKaW5kZXggM2IwZjJmNjdkNjEwMDJmODc4OWZhNDYxNmMwZmU3Yzk2
NjdlNTUxMS4uYzUxNjZhNjEzYjE1M2JmZTg4NmJlMWJiMmMyZTYxZTNmYzZlMTA2MCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5j
cHAKQEAgLTI2Niw3ICsyNjYsNyBAQCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0
ZT4gVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpHZXRSYQogICAgIFY4Qmlu
ZGluZ1Blcklzb2xhdGVEYXRhKiBkYXRhID0gVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OmN1cnJl
bnQoKTsKICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9y
IHJlc3VsdCA9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJl
c3VsdCAhPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVz
dWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6Okhh
bmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRl
bXBsYXRlPiB0ZW1wbCA9IGNyZWF0ZVJhd1RlbXBsYXRlKCk7CkBAIC0yNzksNyArMjc5LDcgQEAg
djg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZTo6R2V0VGUKICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YSogZGF0
YSA9IFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhCaW5kaW5nUGVy
SXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT50ZW1wbGF0
ZU1hcCgpLmZpbmQoJmluZm8pOwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+dGVtcGxhdGVNYXAo
KS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4g
cmVzdWx0LT52YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2
ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvTlBWOE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9OUFY4T2JqZWN0LmNwcAppbmRleCBhMzc5MGRhMDAxMTMyMWUyNDc1YjQ5
OGY1ZTMzNjYyYzI5MmJhNTFjLi5mZmM5ODA5NGUxZTdmNDMzMmJkYzdkNzM2ZmMyN2Q3NjQwOGJj
N2M5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9OUFY4T2JqZWN0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9OUFY4T2JqZWN0LmNwcApAQCAtNzks
NyArNzksNyBAQCBzdGF0aWMgdm9pZCBmcmVlVjhOUE9iamVjdChOUE9iamVjdCogbnBPYmplY3Qp
CiAgICAgaWYgKGludCB2OE9iamVjdEhhc2ggPSB2OE5wT2JqZWN0LT52OE9iamVjdC0+R2V0SWRl
bnRpdHlIYXNoKCkpIHsKICAgICAgICAgVjhOUE9iamVjdE1hcDo6aXRlcmF0b3IgaXRlciA9IHN0
YXRpY1Y4TlBPYmplY3RNYXAoKS0+ZmluZCh2OE9iamVjdEhhc2gpOwogICAgICAgICBpZiAoaXRl
ciAhPSBzdGF0aWNWOE5QT2JqZWN0TWFwKCktPmVuZCgpKSB7Ci0gICAgICAgICAgICBWOE5QT2Jq
ZWN0VmVjdG9yJiBvYmplY3RzID0gaXRlci0+c2Vjb25kOworICAgICAgICAgICAgVjhOUE9iamVj
dFZlY3RvciYgb2JqZWN0cyA9IGl0ZXItPnZhbHVlOwogICAgICAgICAgICAgZm9yIChzaXplX3Qg
aW5kZXggPSAwOyBpbmRleCA8IG9iamVjdHMuc2l6ZSgpOyArK2luZGV4KSB7CiAgICAgICAgICAg
ICAgICAgaWYgKG9iamVjdHMuYXQoaW5kZXgpID09IHY4TnBPYmplY3QpIHsKICAgICAgICAgICAg
ICAgICAgICAgb2JqZWN0cy5yZW1vdmUoaW5kZXgpOwpAQCAtMTU0LDcgKzE1NCw3IEBAIE5QT2Jq
ZWN0KiBucENyZWF0ZVY4U2NyaXB0T2JqZWN0KE5QUCBucHAsIHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4gb2JqZWN0LCBET01XaW5kCiAgICAgQVNTRVJUKHY4T2JqZWN0SGFzaCk7CiAgICAgVjhOUE9i
amVjdE1hcDo6aXRlcmF0b3IgaXRlciA9IHN0YXRpY1Y4TlBPYmplY3RNYXAoKS0+ZmluZCh2OE9i
amVjdEhhc2gpOwogICAgIGlmIChpdGVyICE9IHN0YXRpY1Y4TlBPYmplY3RNYXAoKS0+ZW5kKCkp
IHsKLSAgICAgICAgVjhOUE9iamVjdFZlY3RvciYgb2JqZWN0cyA9IGl0ZXItPnNlY29uZDsKKyAg
ICAgICAgVjhOUE9iamVjdFZlY3RvciYgb2JqZWN0cyA9IGl0ZXItPnZhbHVlOwogICAgICAgICBm
b3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgb2JqZWN0cy5zaXplKCk7ICsraW5kZXgpIHsK
ICAgICAgICAgICAgIFY4TlBPYmplY3QqIHY4bnBPYmplY3QgPSBvYmplY3RzLmF0KGluZGV4KTsK
ICAgICAgICAgICAgIGlmICh2OG5wT2JqZWN0LT5yb290T2JqZWN0ID09IHJvb3QpIHsKQEAgLTE3
NCw3ICsxNzQsNyBAQCBOUE9iamVjdCogbnBDcmVhdGVWOFNjcmlwdE9iamVjdChOUFAgbnBwLCB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCwgRE9NV2luZAogI2VuZGlmCiAgICAgdjhucE9i
amVjdC0+cm9vdE9iamVjdCA9IHJvb3Q7CiAKLSAgICBpdGVyLT5zZWNvbmQuYXBwZW5kKHY4bnBP
YmplY3QpOworICAgIGl0ZXItPnZhbHVlLmFwcGVuZCh2OG5wT2JqZWN0KTsKIAogICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PE5QT2JqZWN0Kj4odjhucE9iamVjdCk7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwCmluZGV4IDE0YzA1MGE3
NjdmZmNkODQ0MDFhOTljYzQyMWQwZjBiMDQyMTliNTguLjBiZjNkOWFlYWM5NzcxZDBlMjA3YWU3
YzEwODI0MWI2ZTVmNzVmNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1NjcmlwdENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Nj
cmlwdENvbnRyb2xsZXIuY3BwCkBAIC0xMTksOCArMTE5LDggQEAgdm9pZCBTY3JpcHRDb250cm9s
bGVyOjpjbGVhclNjcmlwdE9iamVjdHMoKQogewogICAgIFBsdWdpbk9iamVjdE1hcDo6aXRlcmF0
b3IgaXQgPSBtX3BsdWdpbk9iamVjdHMuYmVnaW4oKTsKICAgICBmb3IgKDsgaXQgIT0gbV9wbHVn
aW5PYmplY3RzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIF9OUE5fVW5yZWdpc3Rlck9iamVjdChp
dC0+c2Vjb25kKTsKLSAgICAgICAgX05QTl9SZWxlYXNlT2JqZWN0KGl0LT5zZWNvbmQpOworICAg
ICAgICBfTlBOX1VucmVnaXN0ZXJPYmplY3QoaXQtPnZhbHVlKTsKKyAgICAgICAgX05QTl9SZWxl
YXNlT2JqZWN0KGl0LT52YWx1ZSk7CiAgICAgfQogICAgIG1fcGx1Z2luT2JqZWN0cy5jbGVhcigp
OwogCkBAIC0zNDYsOCArMzQ2LDggQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpjbGVhbnVwU2Ny
aXB0T2JqZWN0c0ZvclBsdWdpbihXaWRnZXQqIG5hdGl2ZUhhbmRsZSkKICAgICBQbHVnaW5PYmpl
Y3RNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wbHVnaW5PYmplY3RzLmZpbmQobmF0aXZlSGFuZGxlKTsK
ICAgICBpZiAoaXQgPT0gbV9wbHVnaW5PYmplY3RzLmVuZCgpKQogICAgICAgICByZXR1cm47Ci0g
ICAgX05QTl9VbnJlZ2lzdGVyT2JqZWN0KGl0LT5zZWNvbmQpOwotICAgIF9OUE5fUmVsZWFzZU9i
amVjdChpdC0+c2Vjb25kKTsKKyAgICBfTlBOX1VucmVnaXN0ZXJPYmplY3QoaXQtPnZhbHVlKTsK
KyAgICBfTlBOX1JlbGVhc2VPYmplY3QoaXQtPnZhbHVlKTsKICAgICBtX3BsdWdpbk9iamVjdHMu
cmVtb3ZlKGl0KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
U2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Nl
cmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKaW5kZXggOWYxZTMyOThmMGQxMjU3MWYzNzNmNzI5N2M0
MmRlMjVkMmRjMTViYy4uY2ZhODJhMzNiNmZjMjFhNGJjNWNkMGUwZjY5M2Q0ODJhMzA0MjdkOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZh
bHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0
VmFsdWUuY3BwCkBAIC0xMDksNyArMTA5LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgdHlw
ZW5hbWUgSGFuZGxlVG9UOjppdGVyYXRvciByZXN1bHQgPSBtX21hcC5maW5kKCpoYW5kbGUpOwog
ICAgICAgICBpZiAocmVzdWx0ICE9IG1fbWFwLmVuZCgpKSB7Ci0gICAgICAgICAgICAqdmFsdWVP
dXQgPSByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgICAgICp2YWx1ZU91dCA9IHJlc3VsdC0+dmFs
dWU7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4g
ZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmdQ
ZXJDb250ZXh0RGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmdQ
ZXJDb250ZXh0RGF0YS5jcHAKaW5kZXggZmZjYWY0Y2FjMjIzOGVhODJjNTA0YTExNjg5MDI4MzIz
YmZkNzdmYi4uMzVlMjc4OTc1Y2IxNjEwNTRiMTk1ZjE3M2FjZjRhZTEwOTI0MTUyYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nUGVyQ29udGV4dERhdGEu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZ1BlckNvbnRleHRE
YXRhLmNwcApAQCAtNDAsNyArNDAsNyBAQCB2b2lkIFY4QmluZGluZ1BlckNvbnRleHREYXRhOjpk
aXNwb3NlKCkKICAgICB7CiAgICAgICAgIFdyYXBwZXJCb2lsZXJwbGF0ZU1hcDo6aXRlcmF0b3Ig
aXQgPSBtX3dyYXBwZXJCb2lsZXJwbGF0ZXMuYmVnaW4oKTsKICAgICAgICAgZm9yICg7IGl0ICE9
IG1fd3JhcHBlckJvaWxlcnBsYXRlcy5lbmQoKTsgKytpdCkgewotICAgICAgICAgICAgdjg6OlBl
cnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlciA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICB2
ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyID0gaXQtPnZhbHVlOwogICAgICAgICAg
ICAgd3JhcHBlci5EaXNwb3NlKCk7CiAgICAgICAgIH0KICAgICAgICAgbV93cmFwcGVyQm9pbGVy
cGxhdGVzLmNsZWFyKCk7CkBAIC00OSw3ICs0OSw3IEBAIHZvaWQgVjhCaW5kaW5nUGVyQ29udGV4
dERhdGE6OmRpc3Bvc2UoKQogICAgIHsKICAgICAgICAgQ29uc3RydWN0b3JNYXA6Oml0ZXJhdG9y
IGl0ID0gbV9jb25zdHJ1Y3Rvck1hcC5iZWdpbigpOwogICAgICAgICBmb3IgKDsgaXQgIT0gbV9j
b25zdHJ1Y3Rvck1hcC5lbmQoKTsgKytpdCkgewotICAgICAgICAgICAgdjg6OlBlcnNpc3RlbnQ8
djg6OkZ1bmN0aW9uPiB3cmFwcGVyID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIHY4OjpQZXJz
aXN0ZW50PHY4OjpGdW5jdGlvbj4gd3JhcHBlciA9IGl0LT52YWx1ZTsKICAgICAgICAgICAgIHdy
YXBwZXIuRGlzcG9zZSgpOwogICAgICAgICB9CiAgICAgICAgIG1fY29uc3RydWN0b3JNYXAuY2xl
YXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NTWFwLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTU1hcC5oCmluZGV4IDRkZTM1NTg1ZGQw
Y2JkNzVlZWUxMjMxMzBhZTFhZmExMGNlZWE5NTUuLmQ3ODQ4MjYzNjk3M2FlMjk1ZGY3MmNjY2Q2
OGIzNjE1ZWIwNTA1N2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
RE9NTWFwLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01NYXAuaApAQCAt
MTEwLDcgKzExMCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCByZW1vdmVJ
ZlByZXNlbnQoS2V5VHlwZSoga2V5LCB2ODo6UGVyc2lzdGVudDxWYWx1ZVR5cGU+IHZhbHVlKQog
ICAgICAgICB7CiAgICAgICAgICAgICB0eXBlbmFtZSBIYXNoTWFwPEtleVR5cGUqLCBWYWx1ZVR5
cGUqPjo6aXRlcmF0b3IgaXQgPSBtX21hcC5maW5kKGtleSk7Ci0gICAgICAgICAgICBpZiAoaXQg
PT0gbV9tYXAuZW5kKCkgfHwgaXQtPnNlY29uZCAhPSAqdmFsdWUpCisgICAgICAgICAgICBpZiAo
aXQgPT0gbV9tYXAuZW5kKCkgfHwgaXQtPnZhbHVlICE9ICp2YWx1ZSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgIG1fbWFwLnJlbW92ZShpdCk7CkBAIC0xMzAs
NyArMTMwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgdmlzaXRvci0+c3Rh
cnRNYXAoKTsKICAgICAgICAgICAgIHR5cGVuYW1lIEhhc2hNYXA8S2V5VHlwZSosIFZhbHVlVHlw
ZSo+OjppdGVyYXRvciBpdCA9IG1fbWFwLmJlZ2luKCk7CiAgICAgICAgICAgICBmb3IgKDsgaXQg
IT0gbV9tYXAuZW5kKCk7ICsraXQpCi0gICAgICAgICAgICAgICAgdmlzaXRvci0+dmlzaXRET01X
cmFwcGVyKHN0b3JlLCBpdC0+Zmlyc3QsIHY4OjpQZXJzaXN0ZW50PFZhbHVlVHlwZT4oaXQtPnNl
Y29uZCkpOworICAgICAgICAgICAgICAgIHZpc2l0b3ItPnZpc2l0RE9NV3JhcHBlcihzdG9yZSwg
aXQtPmtleSwgdjg6OlBlcnNpc3RlbnQ8VmFsdWVUeXBlPihpdC0+dmFsdWUpKTsKICAgICAgICAg
ICAgIHZpc2l0b3ItPmVuZE1hcCgpOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVyLmNwcAppbmRleCA2NTE4MmE3ZWNiNzg4MDFiY2NjOWI1
YzRiNTYxYTBhMDFkY2U0OTBhLi41NTg4MWEwMzNhNTA0YzBiZjA3Yzk1NGE1MjI3NmE1ZjdiOTBj
OWNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEdDQ29udHJvbGxl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xsZXIuY3Bw
CkBAIC05OCw5ICs5OCw5IEBAIHN0YXRpYyB2b2lkIGVudW1lcmF0ZUdsb2JhbEhhbmRsZXMoKQog
ewogICAgIEdsb2JhbEhhbmRsZU1hcCYgZ2xvYmFsSGFuZGxlTWFwID0gY3VycmVudEdsb2JhbEhh
bmRsZU1hcCgpOwogICAgIGZvciAoR2xvYmFsSGFuZGxlTWFwOjppdGVyYXRvciBpdCA9IGdsb2Jh
bEhhbmRsZU1hcC5iZWdpbigpLCBlbmQgPSBnbG9iYWxIYW5kbGVNYXAuZW5kKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewotICAgICAgICBHbG9iYWxIYW5kbGVJbmZvKiBpbmZvID0gaXQtPnNlY29uZDsK
KyAgICAgICAgR2xvYmFsSGFuZGxlSW5mbyogaW5mbyA9IGl0LT52YWx1ZTsKICAgICAgICAgVU5V
U0VEX1BBUkFNKGluZm8pOwotICAgICAgICB2ODo6VmFsdWUqIGhhbmRsZSA9IGl0LT5maXJzdDsK
KyAgICAgICAgdjg6OlZhbHVlKiBoYW5kbGUgPSBpdC0+a2V5OwogICAgICAgICBVTlVTRURfUEFS
QU0oaGFuZGxlKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9WOFByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuY3Bw
CmluZGV4IDA4MWY3NWY4MTMyNTMwNDg2Nzc3ZjgwMWQyNmViYzIzNTRlOTVmNjIuLjY0OTMzZjBi
ZDY3ZjJhYjFlMjg3OWM3MjJjODU0ZDM4OGEyMTMwZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4UHJveHkuY3BwCkBAIC0yMzAsNyArMjMwLDcgQEAgdjg6OkxvY2FsPHY4OjpBcnJheT4g
VjhQcm94eTo6ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQoaW50IHdvcmxkSUQsIGNvbnN0IFZlY3Rv
cjwKICAgICBpZiAod29ybGRJRCA+IDApIHsKICAgICAgICAgSXNvbGF0ZWRXb3JsZE1hcDo6aXRl
cmF0b3IgaXRlciA9IG1faXNvbGF0ZWRXb3JsZHMuZmluZCh3b3JsZElEKTsKICAgICAgICAgaWYg
KGl0ZXIgIT0gbV9pc29sYXRlZFdvcmxkcy5lbmQoKSkgewotICAgICAgICAgICAgaXNvbGF0ZWRD
b250ZXh0ID0gaXRlci0+c2Vjb25kOworICAgICAgICAgICAgaXNvbGF0ZWRDb250ZXh0ID0gaXRl
ci0+dmFsdWU7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpc29sYXRlZENvbnRleHQg
PSBuZXcgVjhJc29sYXRlZENvbnRleHQodGhpcywgZXh0ZW5zaW9uR3JvdXAsIHdvcmxkSUQpOwog
ICAgICAgICAgICAgaWYgKGlzb2xhdGVkQ29udGV4dC0+Y29udGV4dCgpLklzRW1wdHkoKSkgewpA
QCAtMjQ0LDcgKzI0NCw3IEBAIHY4OjpMb2NhbDx2ODo6QXJyYXk+IFY4UHJveHk6OmV2YWx1YXRl
SW5Jc29sYXRlZFdvcmxkKGludCB3b3JsZElELCBjb25zdCBWZWN0b3I8CiAKICAgICAgICAgSXNv
bGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2luTWFwOjppdGVyYXRvciBzZWN1cml0eU9yaWdpbkl0ZXIg
PSBtX2lzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbnMuZmluZCh3b3JsZElEKTsKICAgICAgICAg
aWYgKHNlY3VyaXR5T3JpZ2luSXRlciAhPSBtX2lzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbnMu
ZW5kKCkpCi0gICAgICAgICAgICBpc29sYXRlZENvbnRleHQtPnNldFNlY3VyaXR5T3JpZ2luKHNl
Y3VyaXR5T3JpZ2luSXRlci0+c2Vjb25kKTsKKyAgICAgICAgICAgIGlzb2xhdGVkQ29udGV4dC0+
c2V0U2VjdXJpdHlPcmlnaW4oc2VjdXJpdHlPcmlnaW5JdGVyLT52YWx1ZSk7CiAgICAgfSBlbHNl
IHsKICAgICAgICAgaXNvbGF0ZWRDb250ZXh0ID0gbmV3IFY4SXNvbGF0ZWRDb250ZXh0KHRoaXMs
IGV4dGVuc2lvbkdyb3VwLCB3b3JsZElEKTsKICAgICAgICAgaWYgKGlzb2xhdGVkQ29udGV4dC0+
Y29udGV4dCgpLklzRW1wdHkoKSkgewpAQCAtMjc3LDcgKzI3Nyw3IEBAIHZvaWQgVjhQcm94eTo6
c2V0SXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2luKGludCB3b3JsZElELCBQYXNzUmVmUHRyPFNl
Y3VyaXR5T3JpCiAgICAgbV9pc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW5zLnNldCh3b3JsZElE
LCBzZWN1cml0eU9yaWdpbik7CiAgICAgSXNvbGF0ZWRXb3JsZE1hcDo6aXRlcmF0b3IgaXRlciA9
IG1faXNvbGF0ZWRXb3JsZHMuZmluZCh3b3JsZElEKTsKICAgICBpZiAoaXRlciAhPSBtX2lzb2xh
dGVkV29ybGRzLmVuZCgpKQotICAgICAgICBpdGVyLT5zZWNvbmQtPnNldFNlY3VyaXR5T3JpZ2lu
KHNlY3VyaXR5T3JpZ2luKTsKKyAgICAgICAgaXRlci0+dmFsdWUtPnNldFNlY3VyaXR5T3JpZ2lu
KHNlY3VyaXR5T3JpZ2luKTsKIH0KIAogUGFzc093blB0cjx2ODo6U2NyaXB0RGF0YT4gVjhQcm94
eTo6cHJlY29tcGlsZVNjcmlwdCh2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IGNvZGUsIENhY2hlZFNj
cmlwdCogY2FjaGVkU2NyaXB0KQpAQCAtNTUzLDcgKzU1Myw3IEBAIHZvaWQgVjhQcm94eTo6cmVz
ZXRJc29sYXRlZFdvcmxkcygpCiB7CiAgICAgZm9yIChJc29sYXRlZFdvcmxkTWFwOjppdGVyYXRv
ciBpdGVyID0gbV9pc29sYXRlZFdvcmxkcy5iZWdpbigpOwogICAgICAgICAgaXRlciAhPSBtX2lz
b2xhdGVkV29ybGRzLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgaXRlci0+c2Vjb25kLT5kZXN0
cm95KCk7CisgICAgICAgIGl0ZXItPnZhbHVlLT5kZXN0cm95KCk7CiAgICAgfQogICAgIG1faXNv
bGF0ZWRXb3JsZHMuY2xlYXIoKTsKICAgICBtX2lzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbnMu
Y2xlYXIoKTsKQEAgLTY5Niw3ICs2OTYsNyBAQCB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IFY4UHJv
eHk6Omlzb2xhdGVkV29ybGRDb250ZXh0KGludCB3b3JsZElkKQogICAgIElzb2xhdGVkV29ybGRN
YXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2lzb2xhdGVkV29ybGRzLmZpbmQod29ybGRJZCk7CiAgICAg
aWYgKGl0ZXIgPT0gbV9pc29sYXRlZFdvcmxkcy5lbmQoKSkKICAgICAgICAgcmV0dXJuIHY4OjpM
b2NhbDx2ODo6Q29udGV4dD4oKTsKLSAgICByZXR1cm4gdjg6OkxvY2FsPHY4OjpDb250ZXh0Pjo6
TmV3KGl0ZXItPnNlY29uZC0+Y29udGV4dCgpKTsKKyAgICByZXR1cm4gdjg6OkxvY2FsPHY4OjpD
b250ZXh0Pjo6TmV3KGl0ZXItPnZhbHVlLT5jb250ZXh0KCkpOwogfQogCiBib29sIFY4UHJveHk6
Om1hdGNoZXNDdXJyZW50Q29udGV4dCgpCkBAIC03OTksNyArNzk5LDcgQEAgdm9pZCBWOFByb3h5
Ojpjb2xsZWN0SXNvbGF0ZWRDb250ZXh0cyhWZWN0b3I8c3RkOjpwYWlyPFNjcmlwdFN0YXRlKiwg
U2VjdXJpdHlPcmkKIHsKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgZm9y
IChJc29sYXRlZFdvcmxkTWFwOjppdGVyYXRvciBpdCA9IG1faXNvbGF0ZWRXb3JsZHMuYmVnaW4o
KTsgaXQgIT0gbV9pc29sYXRlZFdvcmxkcy5lbmQoKTsgKytpdCkgewotICAgICAgICBWOElzb2xh
dGVkQ29udGV4dCogaXNvbGF0ZWRDb250ZXh0ID0gaXQtPnNlY29uZDsKKyAgICAgICAgVjhJc29s
YXRlZENvbnRleHQqIGlzb2xhdGVkQ29udGV4dCA9IGl0LT52YWx1ZTsKICAgICAgICAgaWYgKCFp
c29sYXRlZENvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCkpCiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gdjhDb250ZXh0ID0gaXNvbGF0ZWRDb250
ZXh0LT5jb250ZXh0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9u
cHJ1bnRpbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvbnBydW50aW1lLmNwcApp
bmRleCA4ZDgwY2Y5MzMxODZlODU0N2MxODUxODNkN2U3NDg0YmNlMWU4NGEzLi4yYjAzNjdjZDE1
ZjJhNGZiMTEzZDRjYzBiZjc2N2VjOGNmMWIwYTVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9ucHJ1bnRpbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L25wcnVudGltZS5jcHAKQEAgLTE2NCw3ICsxNjQsNyBAQCBOUElkZW50aWZpZXIgX05QTl9H
ZXRTdHJpbmdJZGVudGlmaWVyKGNvbnN0IE5QVVRGOCogbmFtZSkKICAgICAgICAgU3RyaW5nSWRl
bnRpZmllck1hcCogaWRlbnRNYXAgPSBnZXRTdHJpbmdJZGVudGlmaWVyTWFwKCk7CiAgICAgICAg
IFN0cmluZ0lkZW50aWZpZXJNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBpZGVudE1hcC0+ZmluZChrZXkp
OwogICAgICAgICBpZiAoaXRlciAhPSBpZGVudE1hcC0+ZW5kKCkpCi0gICAgICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8TlBJZGVudGlmaWVyPihpdGVyLT5zZWNvbmQpOworICAgICAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PE5QSWRlbnRpZmllcj4oaXRlci0+dmFsdWUpOwogCiAgICAgICAg
IHNpemVfdCBuYW1lTGVuID0ga2V5Lm1fbGVuZ3RoOwogCkBAIC0yMTEsNyArMjExLDcgQEAgTlBJ
ZGVudGlmaWVyIF9OUE5fR2V0SW50SWRlbnRpZmllcihpbnQzMl90IGludElkKQogICAgIEludElk
ZW50aWZpZXJNYXAqIGlkZW50TWFwID0gZ2V0SW50SWRlbnRpZmllck1hcCgpOwogICAgIEludElk
ZW50aWZpZXJNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBpZGVudE1hcC0+ZmluZChpbnRJZCk7CiAgICAg
aWYgKGl0ZXIgIT0gaWRlbnRNYXAtPmVuZCgpKQotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
TlBJZGVudGlmaWVyPihpdGVyLT5zZWNvbmQpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
TlBJZGVudGlmaWVyPihpdGVyLT52YWx1ZSk7CiAKICAgICAvLyBXZSBuZXZlciByZWxlYXNlIGlk
ZW50aWZpZXJzLCBzbyB0aGlzIGRpY3Rpb25hcnkgd2lsbCBncm93LgogICAgIFByaXZhdGVJZGVu
dGlmaWVyKiBpZGVudGlmaWVyID0gcmVpbnRlcnByZXRfY2FzdDxQcml2YXRlSWRlbnRpZmllcio+
KG1hbGxvYyhzaXplb2YoUHJpdmF0ZUlkZW50aWZpZXIpKSk7CkBAIC0zODgsNyArMzg4LDcgQEAg
dm9pZCBfTlBOX1JlZ2lzdGVyT2JqZWN0KE5QT2JqZWN0KiBucE9iamVjdCwgTlBPYmplY3QqIG93
bmVyKQogICAgICAgICBOUE9iamVjdE1hcDo6aXRlcmF0b3Igb3duZXJFbnRyeSA9IGxpdmVPYmpl
Y3RNYXAoKS5maW5kKG93bmVyKTsKICAgICAgICAgTlBPYmplY3QqIHBhcmVudCA9IDA7CiAgICAg
ICAgIGlmIChsaXZlT2JqZWN0TWFwKCkuZW5kKCkgIT0gb3duZXJFbnRyeSkKLSAgICAgICAgICAg
IHBhcmVudCA9IG93bmVyRW50cnktPnNlY29uZDsKKyAgICAgICAgICAgIHBhcmVudCA9IG93bmVy
RW50cnktPnZhbHVlOwogCiAgICAgICAgIGlmIChwYXJlbnQpCiAgICAgICAgICAgICBvd25lciA9
IHBhcmVudDsKQEAgLTQwOCw3ICs0MDgsNyBAQCB2b2lkIF9OUE5fVW5yZWdpc3Rlck9iamVjdChO
UE9iamVjdCogbnBPYmplY3QpCiAKICAgICBOUE9iamVjdCogb3duZXIgPSAwOwogICAgIGlmIChs
aXZlT2JqZWN0TWFwKCkuZmluZChucE9iamVjdCkgIT0gbGl2ZU9iamVjdE1hcCgpLmVuZCgpKQot
ICAgICAgICBvd25lciA9IGxpdmVPYmplY3RNYXAoKS5maW5kKG5wT2JqZWN0KS0+c2Vjb25kOwor
ICAgICAgICBvd25lciA9IGxpdmVPYmplY3RNYXAoKS5maW5kKG5wT2JqZWN0KS0+dmFsdWU7CiAK
ICAgICBpZiAoIW93bmVyKSB7CiAgICAgICAgIC8vIFVucmVnaXN0ZXJpbmcgYSBvd25lciBvYmpl
Y3Q7IGFsc28gdW5yZWdpc3RlciBpdCdzIGRlc2NlbmRhbnRzLgpAQCAtNDQzLDcgKzQ0Myw3IEBA
IHZvaWQgX05QTl9VbnJlZ2lzdGVyT2JqZWN0KE5QT2JqZWN0KiBucE9iamVjdCkKICAgICB9IGVs
c2UgewogICAgICAgICBOUFJvb3RPYmplY3RNYXA6Oml0ZXJhdG9yIG93bmVyRW50cnkgPSByb290
T2JqZWN0TWFwKCkuZmluZChvd25lcik7CiAgICAgICAgIGlmIChvd25lckVudHJ5ICE9IHJvb3RP
YmplY3RNYXAoKS5lbmQoKSkgewotICAgICAgICAgICAgTlBPYmplY3RTZXQqIGxpc3QgPSBvd25l
ckVudHJ5LT5zZWNvbmQ7CisgICAgICAgICAgICBOUE9iamVjdFNldCogbGlzdCA9IG93bmVyRW50
cnktPnZhbHVlOwogICAgICAgICAgICAgQVNTRVJUKGxpc3QtPmZpbmQobnBPYmplY3QpICE9IGxp
c3QtPmVuZCgpKTsKICAgICAgICAgICAgIGxpc3QtPnJlbW92ZShucE9iamVjdCk7CiAgICAgICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9JZGVudGlmaWVyUmVwLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9JZGVudGlmaWVyUmVwLmNwcAppbmRleCAyYWNmMTQxNTNk
MWRiOWUxMmI3MjU1OGE1Mzg4ZDk4NmZmOGE1ZTg1Li4xZGY1OGE5ZTQxNTgxYzNiZWMzMTUxZmYy
MWJjZWFhMjQ3MmRjMWY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvSWRlbnRp
ZmllclJlcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL0lkZW50aWZpZXJSZXAuY3Bw
CkBAIC02OSwxMyArNjksMTMgQEAgSWRlbnRpZmllclJlcCogSWRlbnRpZmllclJlcDo6Z2V0KGlu
dCBpbnRJRCkKICAgICAKICAgICBJbnRJZGVudGlmaWVyTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0g
aW50SWRlbnRpZmllck1hcCgpLmFkZChpbnRJRCwgMCk7CiAgICAgaWYgKHJlc3VsdC5pc05ld0Vu
dHJ5KSB7Ci0gICAgICAgIEFTU0VSVCghcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOwotICAgICAg
ICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IG5ldyBJZGVudGlmaWVyUmVwKGludElEKTsKKyAg
ICAgICAgQVNTRVJUKCFyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKKyAgICAgICAgcmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZSA9IG5ldyBJZGVudGlmaWVyUmVwKGludElEKTsKICAgICAgICAgCi0gICAg
ICAgIGlkZW50aWZpZXJTZXQoKS5hZGQocmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOworICAgICAg
ICBpZGVudGlmaWVyU2V0KCkuYWRkKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwogICAgIH0KICAg
ICAKLSAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgcmV0dXJuIHJlc3Vs
dC5pdGVyYXRvci0+dmFsdWU7CiB9CiAKIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8U3RyaW5nSW1w
bD4sIElkZW50aWZpZXJSZXAqPiBTdHJpbmdJZGVudGlmaWVyTWFwOwpAQCAtOTUsMTMgKzk1LDEz
IEBAIElkZW50aWZpZXJSZXAqIElkZW50aWZpZXJSZXA6OmdldChjb25zdCBjaGFyKiBuYW1lKQog
ICAgIFVTdHJpbmcgc3RyaW5nID0gc3RyaW5nVG9VU3RyaW5nKFN0cmluZzo6ZnJvbVVURjhXaXRo
TGF0aW4xRmFsbGJhY2sobmFtZSwgc3RybGVuKG5hbWUpKSk7CiAgICAgU3RyaW5nSWRlbnRpZmll
ck1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IHN0cmluZ0lkZW50aWZpZXJNYXAoKS5hZGQoc3RyaW5n
LmltcGwoKSwgMCk7CiAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIEFTU0VS
VCghcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOwotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNl
Y29uZCA9IG5ldyBJZGVudGlmaWVyUmVwKG5hbWUpOworICAgICAgICBBU1NFUlQoIXJlc3VsdC5p
dGVyYXRvci0+dmFsdWUpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gbmV3IElk
ZW50aWZpZXJSZXAobmFtZSk7CiAgICAgICAgIAotICAgICAgICBpZGVudGlmaWVyU2V0KCkuYWRk
KHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKKyAgICAgICAgaWRlbnRpZmllclNldCgpLmFkZChy
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKICAgICB9CiAgICAgCi0gICAgcmV0dXJuIHJlc3VsdC5p
dGVyYXRvci0+c2Vjb25kOworICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogfQog
CiBib29sIElkZW50aWZpZXJSZXA6OmlzVmFsaWQoSWRlbnRpZmllclJlcCogaWRlbnRpZmllcikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9OUF9qc29iamVjdC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9icmlkZ2UvTlBfanNvYmplY3QuY3BwCmluZGV4IDYxZTM2Nzk1NjFhNjNlNGUz
Y2Y1YmU0ZDA4OTY3MjMxMzdmNjMyYzcuLjYyZWJkMjM3NmVjOTFlY2RlNjUzOTU4NjI2YTA5YWVm
ZDM5NzNiZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9OUF9qc29iamVjdC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL05QX2pzb2JqZWN0LmNwcApAQCAtNjUsOCAr
NjUsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBpdGVyID0gbV9tYXAuYWRkKHJvb3RPYmplY3Qs
IEpTVG9OUE9iamVjdE1hcCgpKS5pdGVyYXRvcjsKICAgICAgICAgfQogCi0gICAgICAgIEFTU0VS
VChpdGVyLT5zZWNvbmQuZmluZChqc09iamVjdCkgPT0gaXRlci0+c2Vjb25kLmVuZCgpKTsKLSAg
ICAgICAgaXRlci0+c2Vjb25kLmFkZChqc09iamVjdCwgbnBPYmplY3QpOworICAgICAgICBBU1NF
UlQoaXRlci0+dmFsdWUuZmluZChqc09iamVjdCkgPT0gaXRlci0+dmFsdWUuZW5kKCkpOworICAg
ICAgICBpdGVyLT52YWx1ZS5hZGQoanNPYmplY3QsIG5wT2JqZWN0KTsKICAgICB9CiAKICAgICB2
b2lkIHJlbW92ZShSb290T2JqZWN0KiByb290T2JqZWN0KQpAQCAtODAsOSArODAsOSBAQCBwdWJs
aWM6CiAgICAgewogICAgICAgICBIYXNoTWFwPFJvb3RPYmplY3QqLCBKU1RvTlBPYmplY3RNYXA+
OjppdGVyYXRvciBpdGVyID0gbV9tYXAuZmluZChyb290T2JqZWN0KTsKICAgICAgICAgQVNTRVJU
KGl0ZXIgIT0gbV9tYXAuZW5kKCkpOwotICAgICAgICBBU1NFUlQoaXRlci0+c2Vjb25kLmZpbmQo
anNPYmplY3QpICE9IGl0ZXItPnNlY29uZC5lbmQoKSk7CisgICAgICAgIEFTU0VSVChpdGVyLT52
YWx1ZS5maW5kKGpzT2JqZWN0KSAhPSBpdGVyLT52YWx1ZS5lbmQoKSk7CiAKLSAgICAgICAgaXRl
ci0+c2Vjb25kLnJlbW92ZShqc09iamVjdCk7CisgICAgICAgIGl0ZXItPnZhbHVlLnJlbW92ZShq
c09iamVjdCk7CiAgICAgfQogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YnJpZGdlL2puaS9qc2MvSmF2YUNsYXNzSlNDLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9q
bmkvanNjL0phdmFDbGFzc0pTQy5jcHAKaW5kZXggYWViNDAyMGJkODRhMjM3YjllYzFjMGFiNzZh
OWY2ZmZiNmU4Yjk3NS4uYTYwODAxZTU2Mjk0YzcyZjhlMmY3NDY2ZTQ0MmI2MWNkZDg0ZWVmZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YUNsYXNzSlNDLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhQ2xhc3NKU0MuY3BwCkBA
IC0xMDcsNyArMTA3LDcgQEAgSmF2YUNsYXNzOjp+SmF2YUNsYXNzKCkKIAogICAgIE1ldGhvZExp
c3RNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fbWV0aG9kcy5lbmQoKTsKICAgICBmb3IgKE1l
dGhvZExpc3RNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9tZXRob2RzLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgewotICAgICAgICBjb25zdCBNZXRob2RMaXN0KiBtZXRob2RMaXN0ID0gaXQt
PnNlY29uZDsKKyAgICAgICAgY29uc3QgTWV0aG9kTGlzdCogbWV0aG9kTGlzdCA9IGl0LT52YWx1
ZTsKICAgICAgICAgZGVsZXRlQWxsVmFsdWVzKCptZXRob2RMaXN0KTsKICAgICAgICAgZGVsZXRl
IG1ldGhvZExpc3Q7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1
bnRpbWVfcm9vdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9yb290LmNwcApp
bmRleCA5YjYyMjRhOGI1NjBmYzVlNjBlMTU4OWU1NzlkMTQyNTQ5NzI5MTM0Li43NGQ4MzE5MjFm
MjE5YjhiNzMzMzY3NTkxNWU0MWJkYzE3ZGRmZGNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9icmlkZ2UvcnVudGltZV9yb290LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVu
dGltZV9yb290LmNwcApAQCAtMTA1LDcgKzEwNSw3IEBAIHZvaWQgUm9vdE9iamVjdDo6aW52YWxp
ZGF0ZSgpCiAgICAgewogICAgICAgICBIYXNoTWFwPFJ1bnRpbWVPYmplY3QqLCBKU0M6OldlYWs8
UnVudGltZU9iamVjdD4gPjo6aXRlcmF0b3IgZW5kID0gbV9ydW50aW1lT2JqZWN0cy5lbmQoKTsK
ICAgICAgICAgZm9yIChIYXNoTWFwPFJ1bnRpbWVPYmplY3QqLCBKU0M6OldlYWs8UnVudGltZU9i
amVjdD4gPjo6aXRlcmF0b3IgaXQgPSBtX3J1bnRpbWVPYmplY3RzLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewotICAgICAgICAgICAgUnVudGltZU9iamVjdCogcnVudGltZU9iamVjdCA9IGl0
LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBSdW50aW1lT2JqZWN0KiBydW50aW1lT2JqZWN0
ID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAgICAgaWYgKCFydW50aW1lT2JqZWN0KSAvLyBT
a2lwIHpvbWJpZXMuCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBydW50
aW1lT2JqZWN0LT5pbnZhbGlkYXRlKCk7CkBAIC0xMjksNyArMTI5LDcgQEAgdm9pZCBSb290T2Jq
ZWN0OjppbnZhbGlkYXRlKCkKIAogICAgIFByb3RlY3RDb3VudFNldDo6aXRlcmF0b3IgZW5kID0g
bV9wcm90ZWN0Q291bnRTZXQuZW5kKCk7CiAgICAgZm9yIChQcm90ZWN0Q291bnRTZXQ6Oml0ZXJh
dG9yIGl0ID0gbV9wcm90ZWN0Q291bnRTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAg
ICAgICBKU0M6OmdjVW5wcm90ZWN0KGl0LT5maXJzdCk7CisgICAgICAgIEpTQzo6Z2NVbnByb3Rl
Y3QoaXQtPmtleSk7CiAgICAgbV9wcm90ZWN0Q291bnRTZXQuY2xlYXIoKTsKIAogICAgIHJvb3RP
YmplY3RTZXQoKS0+cmVtb3ZlKHRoaXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0NhbnZhc1ZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYW52YXNWYWx1ZS5j
cHAKaW5kZXggNzgzY2VlZjgyYjUwZjg4NWUzNzA1OWU3NWRlMTU2ZGVkZjI3ZDE2MS4uOWE5NTU0
MGQ5NmVjY2MxOTcwNzI4NGI1N2I2YjJkMWM2OTBiMTY0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3NzL0NTU0NhbnZhc1ZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
Q2FudmFzVmFsdWUuY3BwCkBAIC00OSwxNCArNDksMTQgQEAgdm9pZCBDU1NDYW52YXNWYWx1ZTo6
Y2FudmFzQ2hhbmdlZChIVE1MQ2FudmFzRWxlbWVudCosIGNvbnN0IEZsb2F0UmVjdCYgY2hhbmdl
ZFIKICAgICBJbnRSZWN0IGltYWdlQ2hhbmdlUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoY2hhbmdl
ZFJlY3QpOwogICAgIFJlbmRlck9iamVjdFNpemVDb3VudE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gY2xpZW50cygpLmVuZCgpOwogICAgIGZvciAoUmVuZGVyT2JqZWN0U2l6ZUNvdW50TWFwOjpj
b25zdF9pdGVyYXRvciBjdXJyID0gY2xpZW50cygpLmJlZ2luKCk7IGN1cnIgIT0gZW5kOyArK2N1
cnIpCi0gICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyT2JqZWN0Kj4oY3Vyci0+Zmlyc3QpLT5pbWFn
ZUNoYW5nZWQoc3RhdGljX2Nhc3Q8V3JhcHBlZEltYWdlUHRyPih0aGlzKSwgJmltYWdlQ2hhbmdl
UmVjdCk7CisgICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyT2JqZWN0Kj4oY3Vyci0+a2V5KS0+aW1h
Z2VDaGFuZ2VkKHN0YXRpY19jYXN0PFdyYXBwZWRJbWFnZVB0cj4odGhpcyksICZpbWFnZUNoYW5n
ZVJlY3QpOwogfQogCiB2b2lkIENTU0NhbnZhc1ZhbHVlOjpjYW52YXNSZXNpemVkKEhUTUxDYW52
YXNFbGVtZW50KikKIHsKICAgICBSZW5kZXJPYmplY3RTaXplQ291bnRNYXA6OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IGNsaWVudHMoKS5lbmQoKTsKICAgICBmb3IgKFJlbmRlck9iamVjdFNpemVDb3Vu
dE1hcDo6Y29uc3RfaXRlcmF0b3IgY3VyciA9IGNsaWVudHMoKS5iZWdpbigpOyBjdXJyICE9IGVu
ZDsgKytjdXJyKQotICAgICAgICBjb25zdF9jYXN0PFJlbmRlck9iamVjdCo+KGN1cnItPmZpcnN0
KS0+aW1hZ2VDaGFuZ2VkKHN0YXRpY19jYXN0PFdyYXBwZWRJbWFnZVB0cj4odGhpcykpOworICAg
ICAgICBjb25zdF9jYXN0PFJlbmRlck9iamVjdCo+KGN1cnItPmtleSktPmltYWdlQ2hhbmdlZChz
dGF0aWNfY2FzdDxXcmFwcGVkSW1hZ2VQdHI+KHRoaXMpKTsKIH0KIAogdm9pZCBDU1NDYW52YXNW
YWx1ZTo6Y2FudmFzRGVzdHJveWVkKEhUTUxDYW52YXNFbGVtZW50KiBlbGVtZW50KQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAppbmRl
eCBhZTI0OGVkMDk3ZjYxZDYwNTM0NmM3MDVkNjU2NGUwYjNkMjg3YjU4Li5lNDllYjU5N2RiOWU3
NGY3NTBlMWVmZjVhMTRmNjM3NTQ0NDJiNGYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcApAQCAtMTI1Myw4ICsxMjUzLDggQEAg
c3RhdGljIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGNvdW50ZXJUb0NTU1ZhbHVlKGNvbnN0IFJlbmRl
clN0eWxlKiBzdHlsZSwgQ1NTUHJvcGUKIAogICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGxpc3Qg
PSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7CiAgICAgZm9yIChDb3VudGVy
RGlyZWN0aXZlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gbWFw
LT5lbmQoKTsgKytpdCkgewotICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3Jl
YXRlVmFsdWUoaXQtPmZpcnN0LmdldCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORykp
OwotICAgICAgICBzaG9ydCBudW1iZXIgPSBwcm9wZXJ0eUlEID09IENTU1Byb3BlcnR5Q291bnRl
ckluY3JlbWVudCA/IGl0LT5zZWNvbmQubV9pbmNyZW1lbnRWYWx1ZSA6IGl0LT5zZWNvbmQubV9y
ZXNldFZhbHVlOworICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFs
dWUoaXQtPmtleS5nZXQoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpKTsKKyAgICAg
ICAgc2hvcnQgbnVtYmVyID0gcHJvcGVydHlJRCA9PSBDU1NQcm9wZXJ0eUNvdW50ZXJJbmNyZW1l
bnQgPyBpdC0+dmFsdWUubV9pbmNyZW1lbnRWYWx1ZSA6IGl0LT52YWx1ZS5tX3Jlc2V0VmFsdWU7
CiAgICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZSgoZG91Ymxl
KW51bWJlciwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKICAgICB9CiAgICAgcmV0
dXJuIGxpc3QucmVsZWFzZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Ny
b3NzZmFkZVZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDcm9zc2ZhZGVWYWx1ZS5j
cHAKaW5kZXggNGZmMDhhZmNhNWZkNGExMDU1ZjVlZDE1ZmQxZThmYTkyNDA0YTZlMi4uZGM0OTQz
MDk1MDJmZmNkOGVhMDk4ZjM0NWY2NGNkZWNhODZlM2U3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3NzL0NTU0Nyb3NzZmFkZVZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTQ3Jvc3NmYWRlVmFsdWUuY3BwCkBAIC0xNjEsNyArMTYxLDcgQEAgdm9pZCBDU1NDcm9zc2Zh
ZGVWYWx1ZTo6Y3Jvc3NmYWRlQ2hhbmdlZChjb25zdCBJbnRSZWN0JikKIHsKICAgICBSZW5kZXJP
YmplY3RTaXplQ291bnRNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGNsaWVudHMoKS5lbmQoKTsK
ICAgICBmb3IgKFJlbmRlck9iamVjdFNpemVDb3VudE1hcDo6Y29uc3RfaXRlcmF0b3IgY3VyciA9
IGNsaWVudHMoKS5iZWdpbigpOyBjdXJyICE9IGVuZDsgKytjdXJyKSB7Ci0gICAgICAgIFJlbmRl
ck9iamVjdCogY2xpZW50ID0gY29uc3RfY2FzdDxSZW5kZXJPYmplY3QqPihjdXJyLT5maXJzdCk7
CisgICAgICAgIFJlbmRlck9iamVjdCogY2xpZW50ID0gY29uc3RfY2FzdDxSZW5kZXJPYmplY3Qq
PihjdXJyLT5rZXkpOwogICAgICAgICBjbGllbnQtPmltYWdlQ2hhbmdlZChzdGF0aWNfY2FzdDxX
cmFwcGVkSW1hZ2VQdHI+KHRoaXMpKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Zv
bnRGYWNlU291cmNlLmNwcAppbmRleCBkZDkwNGQzN2ZiOTU0ZTQ0ZGJhNjUzODc2NzM1ODMxMTk4
ZmFkM2Q3Li5jZTQ1MzY3YWMzMzIzNzJhMGZiOWVjOGM1YTUyZmI5ZjA4ODllZGY2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5jcHAKQEAgLTExNCw3ICsxMTQsNyBAQCBT
aW1wbGVGb250RGF0YSogQ1NTRm9udEZhY2VTb3VyY2U6OmdldEZvbnREYXRhKGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYgZm9udERlc2NyaQogICAgIHVuc2lnbmVkIGhhc2hLZXkgPSAoZm9udERlc2Ny
aXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCkgKyAxKSA8PCA2IHwgZm9udERlc2NyaXB0aW9uLndp
ZHRoVmFyaWFudCgpIDw8IDQKICAgICAgICAgICAgICAgICAgICAgICAgfCAoZm9udERlc2NyaXB0
aW9uLnRleHRPcmllbnRhdGlvbigpID09IFRleHRPcmllbnRhdGlvblVwcmlnaHQgPyA4IDogMCkg
fCAoZm9udERlc2NyaXB0aW9uLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwgPyA0IDogMCkgfCAo
c3ludGhldGljQm9sZCA/IDIgOiAwKSB8IChzeW50aGV0aWNJdGFsaWMgPyAxIDogMCk7CiAKLSAg
ICBTaW1wbGVGb250RGF0YSomIGNhY2hlZERhdGEgPSBtX2ZvbnREYXRhVGFibGUuYWRkKGhhc2hL
ZXksIDApLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgU2ltcGxlRm9udERhdGEqJiBjYWNoZWREYXRh
ID0gbV9mb250RGF0YVRhYmxlLmFkZChoYXNoS2V5LCAwKS5pdGVyYXRvci0+dmFsdWU7CiAgICAg
aWYgKGNhY2hlZERhdGEpCiAgICAgICAgIHJldHVybiBjYWNoZWREYXRhOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NGb250U2VsZWN0b3IuY3BwCmluZGV4IDBhOWEzYTA3OGU0NGUzZThlZDM1MDFjMGM4
MTNhZTA3YzA1MzZhNTYuLmYzODNmYjliYjQ3OWFkZDcxNmFiNjc4YjkwYTRhZjY4ZDY4ZTc5YTAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3BwCkBAIC0yODUsNyArMjg1LDcg
QEAgdm9pZCBDU1NGb250U2VsZWN0b3I6OmFkZEZvbnRGYWNlUnVsZShjb25zdCBTdHlsZVJ1bGVG
b250RmFjZSogZm9udEZhY2VSdWxlKQogICAgICAgICBpZiAoZmFtaWx5TmFtZS5pc0VtcHR5KCkp
CiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBPd25QdHI8VmVjdG9yPFJlZlB0cjxD
U1NGb250RmFjZT4gPiA+JiBmYW1pbHlGb250RmFjZXMgPSBtX2ZvbnRGYWNlcy5hZGQoZmFtaWx5
TmFtZSwgbnVsbHB0cikuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgT3duUHRyPFZlY3RvcjxS
ZWZQdHI8Q1NTRm9udEZhY2U+ID4gPiYgZmFtaWx5Rm9udEZhY2VzID0gbV9mb250RmFjZXMuYWRk
KGZhbWlseU5hbWUsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgaWYgKCFmYW1p
bHlGb250RmFjZXMpIHsKICAgICAgICAgICAgIGZhbWlseUZvbnRGYWNlcyA9IGFkb3B0UHRyKG5l
dyBWZWN0b3I8UmVmUHRyPENTU0ZvbnRGYWNlPiA+KTsKIApAQCAtNDg3LDEzICs0ODcsMTMgQEAg
Rm9udERhdGEqIENTU0ZvbnRTZWxlY3Rvcjo6Z2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0
aW9uJiBmb250RGVzY3JpcHRpb24sIGMKICAgICAgICAgcmV0dXJuIGZvbnREYXRhRm9yR2VuZXJp
Y0ZhbWlseShtX2RvY3VtZW50LCBmb250RGVzY3JpcHRpb24sIGZhbWlseU5hbWUpOwogICAgIH0K
IAotICAgIE93blB0cjxIYXNoTWFwPHVuc2lnbmVkLCBSZWZQdHI8Q1NTU2VnbWVudGVkRm9udEZh
Y2U+ID4gPiYgc2VnbWVudGVkRm9udEZhY2VDYWNoZSA9IG1fZm9udHMuYWRkKGZhbWlseSwgbnVs
bHB0cikuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBPd25QdHI8SGFzaE1hcDx1bnNpZ25lZCwgUmVm
UHRyPENTU1NlZ21lbnRlZEZvbnRGYWNlPiA+ID4mIHNlZ21lbnRlZEZvbnRGYWNlQ2FjaGUgPSBt
X2ZvbnRzLmFkZChmYW1pbHksIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoIXNl
Z21lbnRlZEZvbnRGYWNlQ2FjaGUpCiAgICAgICAgIHNlZ21lbnRlZEZvbnRGYWNlQ2FjaGUgPSBh
ZG9wdFB0cihuZXcgSGFzaE1hcDx1bnNpZ25lZCwgUmVmUHRyPENTU1NlZ21lbnRlZEZvbnRGYWNl
PiA+KTsKIAogICAgIEZvbnRUcmFpdHNNYXNrIHRyYWl0c01hc2sgPSBmb250RGVzY3JpcHRpb24u
dHJhaXRzTWFzaygpOwogCi0gICAgUmVmUHRyPENTU1NlZ21lbnRlZEZvbnRGYWNlPiYgZmFjZSA9
IHNlZ21lbnRlZEZvbnRGYWNlQ2FjaGUtPmFkZCh0cmFpdHNNYXNrLCAwKS5pdGVyYXRvci0+c2Vj
b25kOworICAgIFJlZlB0cjxDU1NTZWdtZW50ZWRGb250RmFjZT4mIGZhY2UgPSBzZWdtZW50ZWRG
b250RmFjZUNhY2hlLT5hZGQodHJhaXRzTWFzaywgMCkuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlm
ICghZmFjZSkgewogICAgICAgICBmYWNlID0gQ1NTU2VnbWVudGVkRm9udEZhY2U6OmNyZWF0ZSh0
aGlzKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlR2VuZXJhdG9y
VmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUuY3Bw
CmluZGV4IDliZTQ0NmJkMGZiODViMDY0ZDY5ZjE4NjMyNjk5YTAzOWEwYWMxZDYuLmEzNDFlMmZj
YWU1NzliZDcyOTIxZDZiZjM4MjdkOTJmMmYwYTlhNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NJbWFnZUdlbmVyYXRvclZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5jcHAKQEAgLTU2LDcgKzU2LDcgQEAgdm9pZCBDU1NJ
bWFnZUdlbmVyYXRvclZhbHVlOjphZGRDbGllbnQoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29u
c3QgSW50U2l6ZSYgc2kKICAgICBpZiAoaXQgPT0gbV9jbGllbnRzLmVuZCgpKQogICAgICAgICBt
X2NsaWVudHMuYWRkKHJlbmRlcmVyLCBTaXplQW5kQ291bnQoc2l6ZSwgMSkpOwogICAgIGVsc2Ug
ewotICAgICAgICBTaXplQW5kQ291bnQmIHNpemVDb3VudCA9IGl0LT5zZWNvbmQ7CisgICAgICAg
IFNpemVBbmRDb3VudCYgc2l6ZUNvdW50ID0gaXQtPnZhbHVlOwogICAgICAgICArK3NpemVDb3Vu
dC5jb3VudDsKICAgICB9CiB9CkBAIC02OCw3ICs2OCw3IEBAIHZvaWQgQ1NTSW1hZ2VHZW5lcmF0
b3JWYWx1ZTo6cmVtb3ZlQ2xpZW50KFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiAgICAgQVNTRVJU
KGl0ICE9IG1fY2xpZW50cy5lbmQoKSk7CiAKICAgICBJbnRTaXplIHJlbW92ZWRJbWFnZVNpemU7
Ci0gICAgU2l6ZUFuZENvdW50JiBzaXplQ291bnQgPSBpdC0+c2Vjb25kOworICAgIFNpemVBbmRD
b3VudCYgc2l6ZUNvdW50ID0gaXQtPnZhbHVlOwogICAgIEludFNpemUgc2l6ZSA9IHNpemVDb3Vu
dC5zaXplOwogICAgIGlmICghc2l6ZS5pc0VtcHR5KCkpIHsKICAgICAgICAgbV9zaXplcy5yZW1v
dmUoc2l6ZSk7CkBAIC04Niw3ICs4Niw3IEBAIEltYWdlKiBDU1NJbWFnZUdlbmVyYXRvclZhbHVl
OjpnZXRJbWFnZShSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBJbnRTaXplJiBzCiB7CiAg
ICAgUmVuZGVyT2JqZWN0U2l6ZUNvdW50TWFwOjppdGVyYXRvciBpdCA9IG1fY2xpZW50cy5maW5k
KHJlbmRlcmVyKTsKICAgICBpZiAoaXQgIT0gbV9jbGllbnRzLmVuZCgpKSB7Ci0gICAgICAgIFNp
emVBbmRDb3VudCYgc2l6ZUNvdW50ID0gaXQtPnNlY29uZDsKKyAgICAgICAgU2l6ZUFuZENvdW50
JiBzaXplQ291bnQgPSBpdC0+dmFsdWU7CiAgICAgICAgIEludFNpemUgb2xkU2l6ZSA9IHNpemVD
b3VudC5zaXplOwogICAgICAgICBpZiAob2xkU2l6ZSAhPSBzaXplKSB7CiAgICAgICAgICAgICBS
ZWZQdHI8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4gcHJvdGVjdCh0aGlzKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuY3BwCmluZGV4IDk4MzQyNTQ2OTI0Zjg2NDJi
ZWY3MDIwYmIwZWJjODY0NDE3MjVjYmIuLjFiNzUzNGMxM2Y5YmMzOWNkMGIxMTI0YjBjNjc2ZmY4
MzRlZTViYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWdtZW50ZWRGb250
RmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmNw
cApAQCAtMTA2LDcgKzEwNiw3IEBAIEZvbnREYXRhKiBDU1NTZWdtZW50ZWRGb250RmFjZTo6Z2V0
Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpCiAgICAgRm9udFRy
YWl0c01hc2sgZGVzaXJlZFRyYWl0c01hc2sgPSBmb250RGVzY3JpcHRpb24udHJhaXRzTWFzaygp
OwogICAgIHVuc2lnbmVkIGhhc2hLZXkgPSAoKGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVs
U2l6ZSgpICsgMSkgPDwgKEZvbnRUcmFpdHNNYXNrV2lkdGggKyAxKSkgfCAoKGZvbnREZXNjcmlw
dGlvbi5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsID8gMSA6IDApIDw8IEZvbnRUcmFpdHNNYXNr
V2lkdGgpIHwgZGVzaXJlZFRyYWl0c01hc2s7CiAKLSAgICBTZWdtZW50ZWRGb250RGF0YSomIGZv
bnREYXRhID0gbV9mb250RGF0YVRhYmxlLmFkZChoYXNoS2V5LCAwKS5pdGVyYXRvci0+c2Vjb25k
OworICAgIFNlZ21lbnRlZEZvbnREYXRhKiYgZm9udERhdGEgPSBtX2ZvbnREYXRhVGFibGUuYWRk
KGhhc2hLZXksIDApLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoZm9udERhdGEpCiAgICAgICAg
IHJldHVybiBmb250RGF0YTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Nl
bGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvci5jcHAKaW5kZXggMTM0
NzliNjQwYWI5NjI3YmMxNWJhY2M5ZWEyZDc3NDM2MDZkOWNjZS4uM2I0OGNmYTczNWVkOTVhZDY1
MmM0NDYwOWExNDJlZmRiMmQxZWE4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1NlbGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VsZWN0b3IuY3BwCkBA
IC0zNzYsNyArMzc2LDcgQEAgQ1NTU2VsZWN0b3I6OlBzZXVkb1R5cGUgQ1NTU2VsZWN0b3I6OnBh
cnNlUHNldWRvVHlwZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpCiAgICAgICAgIHJldHVybiBQ
c2V1ZG9Vbmtub3duOwogICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCosIENTU1NlbGVjdG9y
OjpQc2V1ZG9UeXBlPiogbmFtZVRvUHNldWRvVHlwZSA9IG5hbWVUb1BzZXVkb1R5cGVNYXAoKTsK
ICAgICBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBDU1NTZWxlY3Rvcjo6UHNldWRvVHlwZT46
Oml0ZXJhdG9yIHNsb3QgPSBuYW1lVG9Qc2V1ZG9UeXBlLT5maW5kKG5hbWUuaW1wbCgpKTsKLSAg
ICByZXR1cm4gc2xvdCA9PSBuYW1lVG9Qc2V1ZG9UeXBlLT5lbmQoKSA/IFBzZXVkb1Vua25vd24g
OiBzbG90LT5zZWNvbmQ7CisgICAgcmV0dXJuIHNsb3QgPT0gbmFtZVRvUHNldWRvVHlwZS0+ZW5k
KCkgPyBQc2V1ZG9Vbmtub3duIDogc2xvdC0+dmFsdWU7CiB9CiAKIGJvb2wgQ1NTU2VsZWN0b3I6
OmlzVW5rbm93blBzZXVkb1R5cGUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlUG9vbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTVmFsdWVQb29sLmNwcAppbmRleCBjZTc1N2I5MzNiM2Y0YTMwMmU4NzE2NTY4ZDAzZTAz
ZGJmMWIwNzZjLi5jMTY4OTkxOWQxNmVlMTZmMGVlMDczMTkxOTk2ZTk3YzVjOGZjOTBjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVQb29sLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTVmFsdWVQb29sLmNwcApAQCAtNzgsOCArNzgsOCBAQCBQYXNzUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NWYWx1ZVBvb2w6OmNyZWF0ZUNvbG9yVmFsdWUodW5zaWdu
ZWQgcmdiVmFsdWUpCiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBkdW1teVZhbHVlOwog
ICAgIENvbG9yVmFsdWVDYWNoZTo6QWRkUmVzdWx0IGVudHJ5ID0gbV9jb2xvclZhbHVlQ2FjaGUu
YWRkKHJnYlZhbHVlLCBkdW1teVZhbHVlKTsKICAgICBpZiAoZW50cnkuaXNOZXdFbnRyeSkKLSAg
ICAgICAgZW50cnkuaXRlcmF0b3ItPnNlY29uZCA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVD
b2xvcihyZ2JWYWx1ZSk7Ci0gICAgcmV0dXJuIGVudHJ5Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAg
ICAgIGVudHJ5Lml0ZXJhdG9yLT52YWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVDb2xv
cihyZ2JWYWx1ZSk7CisgICAgcmV0dXJuIGVudHJ5Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIAogUGFz
c1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NTVmFsdWVQb29sOjpjcmVhdGVWYWx1ZShkb3Vi
bGUgdmFsdWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMgdHlwZSkKQEAgLTExMyw3ICsx
MTMsNyBAQCBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NWYWx1ZVBvb2w6OmNyZWF0
ZVZhbHVlKGRvdWJsZSB2YWx1ZSwgQ1NTUHJpbWl0aQogCiBQYXNzUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBDU1NWYWx1ZVBvb2w6OmNyZWF0ZUZvbnRGYW1pbHlWYWx1ZShjb25zdCBTdHJpbmcm
IGZhbWlseU5hbWUpCiB7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYgdmFsdWUgPSBt
X2ZvbnRGYW1pbHlWYWx1ZUNhY2hlLmFkZChmYW1pbHlOYW1lLCAwKS5pdGVyYXRvci0+c2Vjb25k
OworICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mIHZhbHVlID0gbV9mb250RmFtaWx5VmFs
dWVDYWNoZS5hZGQoZmFtaWx5TmFtZSwgMCkuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghdmFs
dWUpCiAgICAgICAgIHZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShmYW1pbHlOYW1l
LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORyk7CiAgICAgcmV0dXJuIHZhbHVlOwpAQCAt
MTI2LDcgKzEyNiw3IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWVMaXN0PiBDU1NWYWx1ZVBvb2w6OmNy
ZWF0ZUZvbnRGYWNlVmFsdWUoY29uc3QgQXRvbWljU3RyaW5nJiBzCiAgICAgaWYgKG1fZm9udEZh
Y2VWYWx1ZUNhY2hlLnNpemUoKSA+IG1heGltdW1Gb250RmFjZUNhY2hlU2l6ZSkKICAgICAgICAg
bV9mb250RmFjZVZhbHVlQ2FjaGUuY2xlYXIoKTsKIAotICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+
JiB2YWx1ZSA9IG1fZm9udEZhY2VWYWx1ZUNhY2hlLmFkZChzdHJpbmcsIDApLml0ZXJhdG9yLT5z
ZWNvbmQ7CisgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4mIHZhbHVlID0gbV9mb250RmFjZVZhbHVl
Q2FjaGUuYWRkKHN0cmluZywgMCkuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghdmFsdWUpCiAg
ICAgICAgIHZhbHVlID0gQ1NTUGFyc2VyOjpwYXJzZUZvbnRGYWNlVmFsdWUoc3RyaW5nKTsKICAg
ICByZXR1cm4gdmFsdWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvUHJvcGVydHlT
ZXRDU1NTdHlsZURlY2xhcmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Qcm9wZXJ0eVNl
dENTU1N0eWxlRGVjbGFyYXRpb24uY3BwCmluZGV4IDhhMGFmZDZlODY1Yzg3ZGJlMmRiMGQzOTg3
OWNlYmY0YmMwYjUxYTMuLjgwZjIwNTY2NGFhOWNmZmViMDc1YzVjMmRlYzhhMDc4ODQ5OTU2MGIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Qcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFy
YXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Qcm9wZXJ0eVNldENTU1N0eWxlRGVj
bGFyYXRpb24uY3BwCkBAIC0yOTksNyArMjk5LDcgQEAgQ1NTVmFsdWUqIFByb3BlcnR5U2V0Q1NT
U3R5bGVEZWNsYXJhdGlvbjo6Y2xvbmVBbmRDYWNoZUZvckNTU09NKENTU1ZhbHVlKiBpbnRlcm4K
ICAgICBpZiAoIW1fY3Nzb21DU1NWYWx1ZUNsb25lcykKICAgICAgICAgbV9jc3NvbUNTU1ZhbHVl
Q2xvbmVzID0gYWRvcHRQdHIobmV3IEhhc2hNYXA8Q1NTVmFsdWUqLCBSZWZQdHI8Q1NTVmFsdWU+
ID4pOwogICAgIAotICAgIFJlZlB0cjxDU1NWYWx1ZT4mIGNsb25lZFZhbHVlID0gbV9jc3NvbUNT
U1ZhbHVlQ2xvbmVzLT5hZGQoaW50ZXJuYWxWYWx1ZSwgUmVmUHRyPENTU1ZhbHVlPigpKS5pdGVy
YXRvci0+c2Vjb25kOworICAgIFJlZlB0cjxDU1NWYWx1ZT4mIGNsb25lZFZhbHVlID0gbV9jc3Nv
bUNTU1ZhbHVlQ2xvbmVzLT5hZGQoaW50ZXJuYWxWYWx1ZSwgUmVmUHRyPENTU1ZhbHVlPigpKS5p
dGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCFjbG9uZWRWYWx1ZSkKICAgICAgICAgY2xvbmVkVmFs
dWUgPSBpbnRlcm5hbFZhbHVlLT5jbG9uZUZvckNTU09NKCk7CiAgICAgcmV0dXJuIGNsb25lZFZh
bHVlLmdldCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyLmNwcAppbmRleCBiNmJmMzMyYTU3
NWFiMmU3ZmI0ZjE1ZjA1YTc0ZDA3NmQ3MTU4ZTk0Li5jN2RkYjBiNGY0NzAzODM5NGE4ODBjNWQz
ODg0MjVmODRlYTNkY2ZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWls
ZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyLmNwcApAQCAtMTAx
NSwyMSArMTAxNSwyMSBAQCBwdWJsaWM6CiAgICAgICAgIHR5cGVkZWYgQ291bnRlckRpcmVjdGl2
ZU1hcDo6aXRlcmF0b3IgSXRlcmF0b3I7CiAgICAgICAgIEl0ZXJhdG9yIGVuZCA9IHBhcmVudE1h
cC5lbmQoKTsKICAgICAgICAgZm9yIChJdGVyYXRvciBpdCA9IHBhcmVudE1hcC5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIENvdW50ZXJEaXJlY3RpdmVzJiBkaXJlY3Rp
dmVzID0gbWFwLmFkZChpdC0+Zmlyc3QsIENvdW50ZXJEaXJlY3RpdmVzKCkpLml0ZXJhdG9yLT5z
ZWNvbmQ7CisgICAgICAgICAgICBDb3VudGVyRGlyZWN0aXZlcyYgZGlyZWN0aXZlcyA9IG1hcC5h
ZGQoaXQtPmtleSwgQ291bnRlckRpcmVjdGl2ZXMoKSkuaXRlcmF0b3ItPnZhbHVlOwogICAgICAg
ICAgICAgaWYgKGNvdW50ZXJCZWhhdmlvciA9PSBSZXNldCkgewotICAgICAgICAgICAgICAgIGRp
cmVjdGl2ZXMubV9yZXNldCA9IGl0LT5zZWNvbmQubV9yZXNldDsKLSAgICAgICAgICAgICAgICBk
aXJlY3RpdmVzLm1fcmVzZXRWYWx1ZSA9IGl0LT5zZWNvbmQubV9yZXNldFZhbHVlOworICAgICAg
ICAgICAgICAgIGRpcmVjdGl2ZXMubV9yZXNldCA9IGl0LT52YWx1ZS5tX3Jlc2V0OworICAgICAg
ICAgICAgICAgIGRpcmVjdGl2ZXMubV9yZXNldFZhbHVlID0gaXQtPnZhbHVlLm1fcmVzZXRWYWx1
ZTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gSW5oZXJpdGluZyBh
IGNvdW50ZXItaW5jcmVtZW50IG1lYW5zIHRha2luZyB0aGUgcGFyZW50J3MgY3VycmVudCB2YWx1
ZSBmb3IgdGhlIGNvdW50ZXIKICAgICAgICAgICAgICAgICAvLyBhbmQgYWRkaW5nIGl0IHRvIGl0
c2VsZi4KLSAgICAgICAgICAgICAgICBkaXJlY3RpdmVzLm1faW5jcmVtZW50ID0gaXQtPnNlY29u
ZC5tX2luY3JlbWVudDsKKyAgICAgICAgICAgICAgICBkaXJlY3RpdmVzLm1faW5jcmVtZW50ID0g
aXQtPnZhbHVlLm1faW5jcmVtZW50OwogICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXMubV9pbmNy
ZW1lbnRWYWx1ZSA9IDA7CiAgICAgICAgICAgICAgICAgaWYgKGRpcmVjdGl2ZXMubV9pbmNyZW1l
bnQpIHsKICAgICAgICAgICAgICAgICAgICAgZmxvYXQgaW5jcmVtZW50VmFsdWUgPSBkaXJlY3Rp
dmVzLm1faW5jcmVtZW50VmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXMubV9p
bmNyZW1lbnRWYWx1ZSA9IGNsYW1wVG9JbnRlZ2VyKGluY3JlbWVudFZhbHVlICsgaXQtPnNlY29u
ZC5tX2luY3JlbWVudFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlcy5tX2lu
Y3JlbWVudFZhbHVlID0gY2xhbXBUb0ludGVnZXIoaW5jcmVtZW50VmFsdWUgKyBpdC0+dmFsdWUu
bV9pbmNyZW1lbnRWYWx1ZSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
ICAgICAgICAgZGlyZWN0aXZlcy5tX2luY3JlbWVudCA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
ICAgIGRpcmVjdGl2ZXMubV9pbmNyZW1lbnRWYWx1ZSA9IGl0LT5zZWNvbmQubV9pbmNyZW1lbnRW
YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlcy5tX2luY3JlbWVudFZhbHVlID0g
aXQtPnZhbHVlLm1faW5jcmVtZW50VmFsdWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQogICAgICAgICB9CkBAIC0xMDQ3LDkgKzEwNDcsOSBAQCBwdWJsaWM6CiAgICAgICAgIEl0
ZXJhdG9yIGVuZCA9IG1hcC5lbmQoKTsKICAgICAgICAgZm9yIChJdGVyYXRvciBpdCA9IG1hcC5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCiAgICAgICAgICAgICBpZiAoY291bnRlckJlaGF2aW9y
ID09IFJlc2V0KQotICAgICAgICAgICAgICAgIGl0LT5zZWNvbmQubV9yZXNldCA9IGZhbHNlOwor
ICAgICAgICAgICAgICAgIGl0LT52YWx1ZS5tX3Jlc2V0ID0gZmFsc2U7CiAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgaXQtPnNlY29uZC5tX2luY3JlbWVudCA9IGZhbHNlOworICAg
ICAgICAgICAgICAgIGl0LT52YWx1ZS5tX2luY3JlbWVudCA9IGZhbHNlOwogCiAgICAgICAgIGlu
dCBsZW5ndGggPSBsaXN0ID8gbGlzdC0+bGVuZ3RoKCkgOiAwOwogICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CkBAIC0xMDYzLDcgKzEwNjMsNyBAQCBwdWJsaWM6CiAK
ICAgICAgICAgICAgIEF0b21pY1N0cmluZyBpZGVudGlmaWVyID0gc3RhdGljX2Nhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWUqPihwYWlyLT5maXJzdCgpKS0+Z2V0U3RyaW5nVmFsdWUoKTsKICAgICAgICAg
ICAgIGludCB2YWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4ocGFpci0+c2Vj
b25kKCkpLT5nZXRJbnRWYWx1ZSgpOwotICAgICAgICAgICAgQ291bnRlckRpcmVjdGl2ZXMmIGRp
cmVjdGl2ZXMgPSBtYXAuYWRkKGlkZW50aWZpZXIuaW1wbCgpLCBDb3VudGVyRGlyZWN0aXZlcygp
KS5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICAgICAgQ291bnRlckRpcmVjdGl2ZXMmIGRpcmVj
dGl2ZXMgPSBtYXAuYWRkKGlkZW50aWZpZXIuaW1wbCgpLCBDb3VudGVyRGlyZWN0aXZlcygpKS5p
dGVyYXRvci0+dmFsdWU7CiAgICAgICAgICAgICBpZiAoY291bnRlckJlaGF2aW9yID09IFJlc2V0
KSB7CiAgICAgICAgICAgICAgICAgZGlyZWN0aXZlcy5tX3Jlc2V0ID0gdHJ1ZTsKICAgICAgICAg
ICAgICAgICBkaXJlY3RpdmVzLm1fcmVzZXRWYWx1ZSA9IHZhbHVlOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0
eWxlUmVzb2x2ZXIuY3BwCmluZGV4IDkyYjkyNWNhMmExZDExNTI4NGZlZTQ1MDljY2U4ZjkyZTk0
OGQyMjEuLjVjMWRlNmVlNmI5MmYyYWNjZmZjNjEzYzk1ZjZjZjhhYWY5ZTU2ODkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKQEAgLTQ5NSw3ICs0OTUsNyBAQCB2b2lkIFN0eWxl
UmVzb2x2ZXI6OmNvbGxlY3RGZWF0dXJlcygpCiAgICAgbV9mZWF0dXJlcy5hZGQobV9hdXRob3JT
dHlsZS0+ZmVhdHVyZXMoKSk7CiAjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKICAgICBmb3IgKFNj
b3BlZFJ1bGVTZXRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zY29wZWRBdXRob3JTdHlsZXMuYmVnaW4o
KTsgaXQgIT0gbV9zY29wZWRBdXRob3JTdHlsZXMuZW5kKCk7ICsraXQpCi0gICAgICAgIG1fZmVh
dHVyZXMuYWRkKGl0LT5zZWNvbmQtPmZlYXR1cmVzKCkpOworICAgICAgICBtX2ZlYXR1cmVzLmFk
ZChpdC0+dmFsdWUtPmZlYXR1cmVzKCkpOwogI2VuZGlmCiAgICAgaWYgKG1fdXNlclN0eWxlKQog
ICAgICAgICBtX2ZlYXR1cmVzLmFkZChtX3VzZXJTdHlsZS0+ZmVhdHVyZXMoKSk7CkBAIC01MzIs
NyArNTMyLDcgQEAgaW5saW5lIFJ1bGVTZXQqIFN0eWxlUmVzb2x2ZXI6OnJ1bGVTZXRGb3JTY29w
ZShjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSkgY29uc3QKICAgICBpZiAoIXNjb3BlLT5oYXNT
Y29wZWRIVE1MU3R5bGVDaGlsZCgpKQogICAgICAgICByZXR1cm4gMDsKICAgICBTY29wZWRSdWxl
U2V0TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fc2NvcGVkQXV0aG9yU3R5bGVzLmZpbmQoc2Nv
cGUpOwotICAgIHJldHVybiBpdCAhPSBtX3Njb3BlZEF1dGhvclN0eWxlcy5lbmQoKSA/IGl0LT5z
ZWNvbmQuZ2V0KCkgOiAwOyAKKyAgICByZXR1cm4gaXQgIT0gbV9zY29wZWRBdXRob3JTdHlsZXMu
ZW5kKCkgPyBpdC0+dmFsdWUuZ2V0KCkgOiAwOyAKIH0KICNlbmRpZgogCkBAIC01NTUsOCArNTU1
LDggQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBlbmRBdXRob3JTdHlsZXNoZWV0cyh1bnNpZ25l
ZCBmaXJzdE5ldywgY29uc3QgVmVjdG9yPFJlZlAKICAgICAgICAgaWYgKHNjb3BlKSB7CiAgICAg
ICAgICAgICBTY29wZWRSdWxlU2V0TWFwOjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gbV9zY29wZWRB
dXRob3JTdHlsZXMuYWRkKHNjb3BlLCBudWxscHRyKTsKICAgICAgICAgICAgIGlmIChhZGRSZXN1
bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29u
ZCA9IFJ1bGVTZXQ6OmNyZWF0ZSgpOwotICAgICAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT5z
ZWNvbmQtPmFkZFJ1bGVzRnJvbVNoZWV0KHNoZWV0LCAqbV9tZWRpdW0sIHRoaXMsIHNjb3BlKTsK
KyAgICAgICAgICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gUnVsZVNldDo6Y3Jl
YXRlKCk7CisgICAgICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5hZGRSdWxlc0Zy
b21TaGVldChzaGVldCwgKm1fbWVkaXVtLCB0aGlzLCBzY29wZSk7CiAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgfQogI2VuZGlmCkBAIC02ODYsMTAgKzY4NiwxMCBAQCB2b2lkIFN0eWxl
UmVzb2x2ZXI6OnN3ZWVwTWF0Y2hlZFByb3BlcnRpZXNDYWNoZSgpCiAgICAgTWF0Y2hlZFByb3Bl
cnRpZXNDYWNoZTo6aXRlcmF0b3IgaXQgPSBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUuYmVnaW4o
KTsKICAgICBNYXRjaGVkUHJvcGVydGllc0NhY2hlOjppdGVyYXRvciBlbmQgPSBtX21hdGNoZWRQ
cm9wZXJ0aWVzQ2FjaGUuZW5kKCk7CiAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgewotICAg
ICAgICBWZWN0b3I8TWF0Y2hlZFByb3BlcnRpZXM+JiBtYXRjaGVkUHJvcGVydGllcyA9IGl0LT5z
ZWNvbmQubWF0Y2hlZFByb3BlcnRpZXM7CisgICAgICAgIFZlY3RvcjxNYXRjaGVkUHJvcGVydGll
cz4mIG1hdGNoZWRQcm9wZXJ0aWVzID0gaXQtPnZhbHVlLm1hdGNoZWRQcm9wZXJ0aWVzOwogICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKTsgKytp
KSB7CiAgICAgICAgICAgICBpZiAobWF0Y2hlZFByb3BlcnRpZXNbaV0ucHJvcGVydGllcy0+aGFz
T25lUmVmKCkpIHsKLSAgICAgICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQoaXQtPmZpcnN0KTsK
KyAgICAgICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQoaXQtPmtleSk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE4NDcsNyArMTg0Nyw3IEBA
IHZvaWQgU3R5bGVSZXNvbHZlcjo6a2V5ZnJhbWVTdHlsZXNGb3JBbmltYXRpb24oRWxlbWVudCog
ZSwgY29uc3QgUmVuZGVyU3R5bGUqIGVsCiAgICAgaWYgKGl0ID09IG1fa2V5ZnJhbWVzUnVsZU1h
cC5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY29uc3QgU3R5bGVSdWxlS2V5ZnJhbWVz
KiBrZXlmcmFtZXNSdWxlID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICBjb25zdCBTdHlsZVJ1bGVL
ZXlmcmFtZXMqIGtleWZyYW1lc1J1bGUgPSBpdC0+dmFsdWUuZ2V0KCk7CiAKICAgICAvLyBDb25z
dHJ1Y3QgYW5kIHBvcHVsYXRlIHRoZSBzdHlsZSBmb3IgZWFjaCBrZXlmcmFtZQogICAgIGNvbnN0
IFZlY3RvcjxSZWZQdHI8U3R5bGVLZXlmcmFtZT4gPiYga2V5ZnJhbWVzID0ga2V5ZnJhbWVzUnVs
ZS0+a2V5ZnJhbWVzKCk7CkBAIC0yNTE1LDcgKzI1MTUsNyBAQCBzdGF0aWMgdm9pZCByZXBvcnRB
dG9tUnVsZU1hcChNZW1vcnlDbGFzc0luZm88UnVsZVNldD4qIGluZm8sIGNvbnN0IFJ1bGVTZXQ6
OkF0bwogewogICAgIGluZm8tPmFkZEhhc2hNYXAoYXRvbWljUnVsZU1hcCk7CiAgICAgZm9yIChS
dWxlU2V0OjpBdG9tUnVsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBhdG9taWNSdWxlTWFwLmJl
Z2luKCk7IGl0ICE9IGF0b21pY1J1bGVNYXAuZW5kKCk7ICsraXQpCi0gICAgICAgIGluZm8tPmFk
ZEluc3RydW1lbnRlZFZlY3RvcigqaXQtPnNlY29uZCk7CisgICAgICAgIGluZm8tPmFkZEluc3Ry
dW1lbnRlZFZlY3RvcigqaXQtPnZhbHVlKTsKIH0KIAogdm9pZCBSdWxlU2V0OjpyZXBvcnRNZW1v
cnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdApAQCAtMjU4
Niw3ICsyNTg2LDcgQEAgdm9pZCBSdWxlU2V0OjphZGRUb1J1bGVTZXQoQXRvbWljU3RyaW5nSW1w
bCoga2V5LCBBdG9tUnVsZU1hcCYgbWFwLCBjb25zdCBSdWxlRGEKIHsKICAgICBpZiAoIWtleSkK
ICAgICAgICAgcmV0dXJuOwotICAgIE93blB0cjxWZWN0b3I8UnVsZURhdGE+ID4mIHJ1bGVzID0g
bWFwLmFkZChrZXksIG51bGxwdHIpLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgT3duUHRyPFZlY3Rv
cjxSdWxlRGF0YT4gPiYgcnVsZXMgPSBtYXAuYWRkKGtleSwgbnVsbHB0cikuaXRlcmF0b3ItPnZh
bHVlOwogICAgIGlmICghcnVsZXMpCiAgICAgICAgIHJ1bGVzID0gYWRvcHRQdHIobmV3IFZlY3Rv
cjxSdWxlRGF0YT4pOwogICAgIHJ1bGVzLT5hcHBlbmQocnVsZURhdGEpOwpAQCAtMjc0NSw3ICsy
NzQ1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNocmlua01hcFZlY3RvcnNUb0ZpdChSdWxlU2V0
OjpBdG9tUnVsZU1hcCYgbWFwKQogewogICAgIFJ1bGVTZXQ6OkF0b21SdWxlTWFwOjppdGVyYXRv
ciBlbmQgPSBtYXAuZW5kKCk7CiAgICAgZm9yIChSdWxlU2V0OjpBdG9tUnVsZU1hcDo6aXRlcmF0
b3IgaXQgPSBtYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25k
LT5zaHJpbmtUb0ZpdCgpOworICAgICAgICBpdC0+dmFsdWUtPnNocmlua1RvRml0KCk7CiB9CiAK
IHZvaWQgUnVsZVNldDo6c2hyaW5rVG9GaXQoKQpAQCAtMjg5MSw3ICsyODkxLDcgQEAgY29uc3Qg
U3R5bGVSZXNvbHZlcjo6TWF0Y2hlZFByb3BlcnRpZXNDYWNoZUl0ZW0qIFN0eWxlUmVzb2x2ZXI6
OmZpbmRGcm9tTWF0Y2hlZFAKICAgICBNYXRjaGVkUHJvcGVydGllc0NhY2hlOjppdGVyYXRvciBp
dCA9IG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZS5maW5kKGhhc2gpOwogICAgIGlmIChpdCA9PSBt
X21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUuZW5kKCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIE1h
dGNoZWRQcm9wZXJ0aWVzQ2FjaGVJdGVtJiBjYWNoZUl0ZW0gPSBpdC0+c2Vjb25kOworICAgIE1h
dGNoZWRQcm9wZXJ0aWVzQ2FjaGVJdGVtJiBjYWNoZUl0ZW0gPSBpdC0+dmFsdWU7CiAKICAgICBz
aXplX3Qgc2l6ZSA9IG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKTsKICAgICBp
ZiAoc2l6ZSAhPSBjYWNoZUl0ZW0ubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU3R5bGVTaGVldENvbnRlbnRzLmNwcAppbmRleCA5NzBjODI4Y2ExNDAxZGNiMTYz
ODQ0OWU5NjAyNDM4MjdlZWMxNzkzLi42MzAzZDBlNTg4YTAxMGM2MmQ2N2FlNjc4Zjk2ODhjZDQ0
ZGMwOGI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldENvbnRlbnRz
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldENvbnRlbnRzLmNwcApAQCAt
MjYxLDcgKzI2MSw3IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgU3R5bGVTaGVldENvbnRlbnRzOjpk
ZXRlcm1pbmVOYW1lc3BhY2UoY29uc3QgQXRvbWljU3RyaW5nJiBwCiAgICAgUHJlZml4TmFtZXNw
YWNlVVJJTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fbmFtZXNwYWNlcy5maW5kKHByZWZpeCk7
CiAgICAgaWYgKGl0ID09IG1fbmFtZXNwYWNlcy5lbmQoKSkKICAgICAgICAgcmV0dXJuIG51bGxB
dG9tOwotICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgIHJldHVybiBpdC0+dmFsdWU7CiB9CiAK
IHZvaWQgU3R5bGVTaGVldENvbnRlbnRzOjpwYXJzZUF1dGhvclN0eWxlU2hlZXQoY29uc3QgQ2Fj
aGVkQ1NTU3R5bGVTaGVldCogY2FjaGVkU3R5bGVTaGVldCwgY29uc3QgU2VjdXJpdHlPcmlnaW4q
IHNlY3VyaXR5T3JpZ2luKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0NoZWNrZWRS
YWRpb0J1dHRvbnMuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0NoZWNrZWRSYWRpb0J1dHRvbnMu
Y3BwCmluZGV4IGU2NzIzMjlhZjhkZTM3OGJlZmRmYzE0ZjhhY2JkMGYyZWMwYzc0MDUuLjlmYTUw
OWJiOTUxZDM4MDkxNDAwMDAxMWVlNWNlNjUxNGE5OGQ0NmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9DaGVja2VkUmFkaW9CdXR0b25zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vQ2hlY2tlZFJhZGlvQnV0dG9ucy5jcHAKQEAgLTE4NSw3ICsxODUsNyBAQCB2b2lkIENoZWNr
ZWRSYWRpb0J1dHRvbnM6OmFkZEJ1dHRvbihIVE1MSW5wdXRFbGVtZW50KiBlbGVtZW50KQogICAg
IGlmICghbV9uYW1lVG9Hcm91cE1hcCkKICAgICAgICAgbV9uYW1lVG9Hcm91cE1hcCA9IGFkb3B0
UHRyKG5ldyBOYW1lVG9Hcm91cE1hcCk7CiAKLSAgICBPd25QdHI8UmFkaW9CdXR0b25Hcm91cD4m
IGdyb3VwID0gbV9uYW1lVG9Hcm91cE1hcC0+YWRkKGVsZW1lbnQtPm5hbWUoKS5pbXBsKCksIFBh
c3NPd25QdHI8UmFkaW9CdXR0b25Hcm91cD4oKSkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBPd25Q
dHI8UmFkaW9CdXR0b25Hcm91cD4mIGdyb3VwID0gbV9uYW1lVG9Hcm91cE1hcC0+YWRkKGVsZW1l
bnQtPm5hbWUoKS5pbXBsKCksIFBhc3NPd25QdHI8UmFkaW9CdXR0b25Hcm91cD4oKSkuaXRlcmF0
b3ItPnZhbHVlOwogICAgIGlmICghZ3JvdXApCiAgICAgICAgIGdyb3VwID0gUmFkaW9CdXR0b25H
cm91cDo6Y3JlYXRlKCk7CiAgICAgZ3JvdXAtPmFkZChlbGVtZW50KTsKQEAgLTI0Niw4ICsyNDYs
OCBAQCB2b2lkIENoZWNrZWRSYWRpb0J1dHRvbnM6OnJlbW92ZUJ1dHRvbihIVE1MSW5wdXRFbGVt
ZW50KiBlbGVtZW50KQogICAgIE5hbWVUb0dyb3VwTWFwOjppdGVyYXRvciBpdCA9IG1fbmFtZVRv
R3JvdXBNYXAtPmZpbmQoZWxlbWVudC0+bmFtZSgpLmltcGwoKSk7CiAgICAgaWYgKGl0ID09IG1f
bmFtZVRvR3JvdXBNYXAtPmVuZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgaXQtPnNlY29uZC0+
cmVtb3ZlKGVsZW1lbnQpOwotICAgIGlmIChpdC0+c2Vjb25kLT5pc0VtcHR5KCkpIHsKKyAgICBp
dC0+dmFsdWUtPnJlbW92ZShlbGVtZW50KTsKKyAgICBpZiAoaXQtPnZhbHVlLT5pc0VtcHR5KCkp
IHsKICAgICAgICAgLy8gRklYTUU6IFdlIG1heSBza2lwIGRlYWxsb2NhdGluZyB0aGUgZW1wdHkg
UmFkaW9CdXR0b25Hcm91cCBmb3IKICAgICAgICAgLy8gcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQu
IElmIHdlIGRvIHNvLCB3ZSBuZWVkIHRvIGNoYW5nZSB0aGUga2V5IHR5cGUKICAgICAgICAgLy8g
b2YgbV9uYW1lVG9Hcm91cE1hcCBmcm9tIEF0b21pY1N0cmluZ0ltcGwqIHRvIFJlZlB0cjxBdG9t
aWNTdHJpbmdJbXBsPi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZExpc3RN
dXRhdGlvblNjb3BlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZExpc3RNdXRhdGlvblNj
b3BlLmNwcAppbmRleCBmNGEyZGEwNGFiNjE1ODEzZjg2NGFlMTM1NmY0ZWFhNGRiMGJmZTQ5Li5h
ZmQ4ZGQ5ZjFiMDA5ODVjN2EyN2JiYmJkYTNlYmY4MDc3NmQ0YzdjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL0NoaWxkTGlzdE11dGF0aW9uU2NvcGUuY3BwCkBAIC0xOTIsMjcgKzE5MiwyNyBA
QCB2b2lkIENoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVy
OjpjaGlsZEFkZGVkKE5vZGUqIHRhcmdldAogewogICAgIEhhc2hNYXA8Tm9kZSosIE93blB0cjxD
aGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdG9yPiA+OjppdGVyYXRvciBp
dGVyID0gbV9hY2N1bXVsYXRpb25zLmZpbmQodGFyZ2V0KTsKICAgICBBU1NFUlQoaXRlciAhPSBt
X2FjY3VtdWxhdGlvbnMuZW5kKCkpOwotICAgIGlmIChpdGVyID09IG1fYWNjdW11bGF0aW9ucy5l
bmQoKSB8fCAhaXRlci0+c2Vjb25kKQorICAgIGlmIChpdGVyID09IG1fYWNjdW11bGF0aW9ucy5l
bmQoKSB8fCAhaXRlci0+dmFsdWUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGl0ZXItPnNlY29u
ZC0+Y2hpbGRBZGRlZChjaGlsZCk7CisgICAgaXRlci0+dmFsdWUtPmNoaWxkQWRkZWQoY2hpbGQp
OwogfQogCiB2b2lkIENoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0aW9u
Um91dGVyOjp3aWxsUmVtb3ZlQ2hpbGQoTm9kZSogdGFyZ2V0LCBOb2RlKiBjaGlsZCkKIHsKICAg
ICBIYXNoTWFwPE5vZGUqLCBPd25QdHI8Q2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25B
Y2N1bXVsYXRvcj4gPjo6aXRlcmF0b3IgaXRlciA9IG1fYWNjdW11bGF0aW9ucy5maW5kKHRhcmdl
dCk7CiAgICAgQVNTRVJUKGl0ZXIgIT0gbV9hY2N1bXVsYXRpb25zLmVuZCgpKTsKLSAgICBpZiAo
aXRlciA9PSBtX2FjY3VtdWxhdGlvbnMuZW5kKCkgfHwgIWl0ZXItPnNlY29uZCkKKyAgICBpZiAo
aXRlciA9PSBtX2FjY3VtdWxhdGlvbnMuZW5kKCkgfHwgIWl0ZXItPnZhbHVlKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBpdGVyLT5zZWNvbmQtPndpbGxSZW1vdmVDaGlsZChjaGlsZCk7CisgICAg
aXRlci0+dmFsdWUtPndpbGxSZW1vdmVDaGlsZChjaGlsZCk7CiB9CiAKIHZvaWQgQ2hpbGRMaXN0
TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXI6OmluY3JlbWVudFNjb3Bp
bmdMZXZlbChOb2RlKiB0YXJnZXQpCiB7CiAgICAgU2NvcGluZ0xldmVsTWFwOjpBZGRSZXN1bHQg
cmVzdWx0ID0gbV9zY29waW5nTGV2ZWxzLmFkZCh0YXJnZXQsIDEpOwogICAgIGlmICghcmVzdWx0
LmlzTmV3RW50cnkpIHsKLSAgICAgICAgKysocmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOworICAg
ICAgICArKyhyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IApAQCAtMjI5LDggKzIyOSw4IEBAIHZvaWQgQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRp
b25BY2N1bXVsYXRpb25Sb3V0ZXI6OmRlY3JlbWVudFNjb3BpbmdMZXZlbChOCiAgICAgU2NvcGlu
Z0xldmVsTWFwOjppdGVyYXRvciBpdGVyID0gbV9zY29waW5nTGV2ZWxzLmZpbmQodGFyZ2V0KTsK
ICAgICBBU1NFUlQoaXRlciAhPSBtX3Njb3BpbmdMZXZlbHMuZW5kKCkpOwogCi0gICAgLS0oaXRl
ci0+c2Vjb25kKTsKLSAgICBpZiAoaXRlci0+c2Vjb25kID4gMCkKKyAgICAtLShpdGVyLT52YWx1
ZSk7CisgICAgaWYgKGl0ZXItPnZhbHVlID4gMCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9z
Y29waW5nTGV2ZWxzLnJlbW92ZShpdGVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IDE2
OWQ4YTVhMDJhYTcyYjk4OWI1MTMxY2JmMzIxOWVmZGYwYmFmNDYuLmQ5NGJhNTA4ZTkxMDEwZmQ4
MWQ5NDFmZTAxZGFjNmM3OWI2YWM1ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtMjkz
Niw3ICsyOTM2LDcgQEAgY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0PiA+KiBEb2N1
bWVudDo6cGFnZUdyb3VwVXNlclNoZWV0cygpIGNvbnN0CiAKICAgICBVc2VyU3R5bGVTaGVldE1h
cDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gc2hlZXRzTWFwLT5lbmQoKTsKICAgICBmb3IgKFVzZXJT
dHlsZVNoZWV0TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHNoZWV0c01hcC0+YmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IFVzZXJTdHlsZVNoZWV0VmVjdG9yKiBzaGVl
dHMgPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICBjb25zdCBVc2VyU3R5bGVTaGVldFZlY3Rv
ciogc2hlZXRzID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgc2hlZXRzLT5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgY29uc3QgVXNlclN0eWxl
U2hlZXQqIHNoZWV0ID0gc2hlZXRzLT5hdChpKS5nZXQoKTsKICAgICAgICAgICAgIGlmIChzaGVl
dC0+aW5qZWN0ZWRGcmFtZXMoKSA9PSBJbmplY3RJblRvcEZyYW1lT25seSAmJiBvd25lckVsZW1l
bnQoKSkKQEAgLTQ4MTEsMTAgKzQ4MTEsMTAgQEAgUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4g
RG9jdW1lbnQ6OndpbmRvd05hbWVkSXRlbXMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKQogewog
ICAgIE5hbWVkQ29sbGVjdGlvbk1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fd2luZG93TmFtZWRJ
dGVtQ29sbGVjdGlvbnMuYWRkKG5hbWUsIDApOwogICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkp
Ci0gICAgICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAKICAgICBSZWZQdHI8SFRNTE5hbWVDb2xsZWN0aW9u
PiBjb2xsZWN0aW9uID0gSFRNTE5hbWVDb2xsZWN0aW9uOjpjcmVhdGUodGhpcywgV2luZG93TmFt
ZWRJdGVtcywgbmFtZSk7Ci0gICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBjb2xsZWN0aW9u
LmdldCgpOworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBjb2xsZWN0aW9uLmdldCgpOwog
ICAgIHJldHVybiBjb2xsZWN0aW9uLnJlbGVhc2UoKTsKIH0KIApAQCAtNDgyMiwxMCArNDgyMiwx
MCBAQCBQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBEb2N1bWVudDo6ZG9jdW1lbnROYW1lZEl0
ZW1zKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZQogewogICAgIE5hbWVkQ29sbGVjdGlvbk1hcDo6
QWRkUmVzdWx0IHJlc3VsdCA9IG1fZG9jdW1lbnROYW1lZEl0ZW1Db2xsZWN0aW9ucy5hZGQobmFt
ZSwgMCk7CiAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dC5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZTsKIAogICAgIFJlZlB0cjxIVE1MTmFtZUNvbGxlY3Rpb24+IGNvbGxlY3Rpb24gPSBIVE1MTmFt
ZUNvbGxlY3Rpb246OmNyZWF0ZSh0aGlzLCBEb2N1bWVudE5hbWVkSXRlbXMsIG5hbWUpOwotICAg
IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gY29sbGVjdGlvbi5nZXQoKTsKKyAgICByZXN1bHQu
aXRlcmF0b3ItPnZhbHVlID0gY29sbGVjdGlvbi5nZXQoKTsKICAgICByZXR1cm4gY29sbGVjdGlv
bi5yZWxlYXNlKCk7CiB9CiAKQEAgLTUxNjAsNyArNTE2MCw3IEBAIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQqIERvY3VtZW50OjpnZXRDU1NDYW52YXNDb250ZXh0KGNvbnN0IFN0cmluZyYgdHlwZSwg
Y29uc3QKIAogSFRNTENhbnZhc0VsZW1lbnQqIERvY3VtZW50OjpnZXRDU1NDYW52YXNFbGVtZW50
KGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKLSAgICBSZWZQdHI8SFRNTENhbnZhc0VsZW1lbnQ+JiBl
bGVtZW50ID0gbV9jc3NDYW52YXNFbGVtZW50cy5hZGQobmFtZSwgMCkuaXRlcmF0b3ItPnNlY29u
ZDsKKyAgICBSZWZQdHI8SFRNTENhbnZhc0VsZW1lbnQ+JiBlbGVtZW50ID0gbV9jc3NDYW52YXNF
bGVtZW50cy5hZGQobmFtZSwgMCkuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghZWxlbWVudCkK
ICAgICAgICAgZWxlbWVudCA9IEhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGUodGhpcyk7CiAgICAg
cmV0dXJuIGVsZW1lbnQuZ2V0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1h
cmtlckNvbnRyb2xsZXIuY3BwCmluZGV4IGEzZWJjOTM2OTMyNWE0N2IyZTYyOTI4Njk2MGI0ZDZm
ZWJjMmYwYWUuLmIyZjAwODk1NGZlN2VhMGU2NzBkYjcxNWI2MzUzZDI1M2JhMjk1YTMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwCkBAIC0z
MTEsNyArMzExLDcgQEAgRG9jdW1lbnRNYXJrZXIqIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6
bWFya2VyQ29udGFpbmluZ1BvaW50KGNvbnN0IExheW91dFBvaW4KICAgICBNYXJrZXJNYXA6Oml0
ZXJhdG9yIGVuZCA9IG1fbWFya2Vycy5lbmQoKTsKICAgICBmb3IgKE1hcmtlck1hcDo6aXRlcmF0
b3Igbm9kZUl0ZXJhdG9yID0gbV9tYXJrZXJzLmJlZ2luKCk7IG5vZGVJdGVyYXRvciAhPSBlbmQ7
ICsrbm9kZUl0ZXJhdG9yKSB7CiAgICAgICAgIC8vIGlubmVyIGxvb3A7IHByb2Nlc3MgZWFjaCBt
YXJrZXIgaW4gdGhpcyBub2RlCi0gICAgICAgIE1hcmtlckxpc3QqIGxpc3QgPSBub2RlSXRlcmF0
b3ItPnNlY29uZDsKKyAgICAgICAgTWFya2VyTGlzdCogbGlzdCA9IG5vZGVJdGVyYXRvci0+dmFs
dWU7CiAgICAgICAgIHVuc2lnbmVkIG1hcmtlckNvdW50ID0gbGlzdC0+c2l6ZSgpOwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIG1hcmtlckluZGV4ID0gMDsgbWFya2VySW5kZXggPCBtYXJrZXJDb3Vu
dDsgKyttYXJrZXJJbmRleCkgewogICAgICAgICAgICAgUmVuZGVyZWREb2N1bWVudE1hcmtlciYg
bWFya2VyID0gbGlzdC0+YXQobWFya2VySW5kZXgpOwpAQCAtMzk5LDcgKzM5OSw3IEBAIFZlY3Rv
cjxJbnRSZWN0PiBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbmRlcmVkUmVjdHNGb3JNYXJr
ZXJzKERvY3VtZW50TWFya2VyCiAgICAgTWFya2VyTWFwOjppdGVyYXRvciBlbmQgPSBtX21hcmtl
cnMuZW5kKCk7CiAgICAgZm9yIChNYXJrZXJNYXA6Oml0ZXJhdG9yIG5vZGVJdGVyYXRvciA9IG1f
bWFya2Vycy5iZWdpbigpOyBub2RlSXRlcmF0b3IgIT0gZW5kOyArK25vZGVJdGVyYXRvcikgewog
ICAgICAgICAvLyBpbm5lciBsb29wOyBwcm9jZXNzIGVhY2ggbWFya2VyIGluIHRoaXMgbm9kZQot
ICAgICAgICBNYXJrZXJMaXN0KiBsaXN0ID0gbm9kZUl0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAg
IE1hcmtlckxpc3QqIGxpc3QgPSBub2RlSXRlcmF0b3ItPnZhbHVlOwogICAgICAgICB1bnNpZ25l
ZCBtYXJrZXJDb3VudCA9IGxpc3QtPnNpemUoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBtYXJr
ZXJJbmRleCA9IDA7IG1hcmtlckluZGV4IDwgbWFya2VyQ291bnQ7ICsrbWFya2VySW5kZXgpIHsK
ICAgICAgICAgICAgIGNvbnN0IFJlbmRlcmVkRG9jdW1lbnRNYXJrZXImIG1hcmtlciA9IGxpc3Qt
PmF0KG1hcmtlckluZGV4KTsKQEAgLTQyNiw3ICs0MjYsNyBAQCB2b2lkIERvY3VtZW50TWFya2Vy
Q29udHJvbGxlcjo6cmVtb3ZlTWFya2VycyhOb2RlKiBub2RlLCBEb2N1bWVudE1hcmtlcjo6TWFy
a2VyVAogICAgIAogICAgIE1hcmtlck1hcDo6aXRlcmF0b3IgaXRlcmF0b3IgPSBtX21hcmtlcnMu
ZmluZChub2RlKTsKICAgICBpZiAoaXRlcmF0b3IgIT0gbV9tYXJrZXJzLmVuZCgpKQotICAgICAg
ICByZW1vdmVNYXJrZXJzRnJvbUxpc3Qobm9kZSwgaXRlcmF0b3ItPnNlY29uZCwgbWFya2VyVHlw
ZXMpOworICAgICAgICByZW1vdmVNYXJrZXJzRnJvbUxpc3Qobm9kZSwgaXRlcmF0b3ItPnZhbHVl
LCBtYXJrZXJUeXBlcyk7CiB9CiAKIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW1v
dmVNYXJrZXJzKERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlcyBtYXJrZXJUeXBlcykKQEAgLTQz
OSw3ICs0MzksNyBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVtb3ZlTWFya2Vy
cyhEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZXMgbWFya2VyVAogICAgIE1hcmtlck1hcCBtYXJr
ZXJNYXBDb3B5ID0gbV9tYXJrZXJzOwogICAgIE1hcmtlck1hcDo6aXRlcmF0b3IgZW5kID0gbWFy
a2VyTWFwQ29weS5lbmQoKTsKICAgICBmb3IgKE1hcmtlck1hcDo6aXRlcmF0b3IgaSA9IG1hcmtl
ck1hcENvcHkuYmVnaW4oKTsgaSAhPSBlbmQ7ICsraSkKLSAgICAgICAgcmVtb3ZlTWFya2Vyc0Zy
b21MaXN0KGktPmZpcnN0LmdldCgpLCBpLT5zZWNvbmQsIG1hcmtlclR5cGVzKTsKKyAgICAgICAg
cmVtb3ZlTWFya2Vyc0Zyb21MaXN0KGktPmtleS5nZXQoKSwgaS0+dmFsdWUsIG1hcmtlclR5cGVz
KTsKICAgICBtX3Bvc3NpYmx5RXhpc3RpbmdNYXJrZXJUeXBlcy5yZW1vdmUobWFya2VyVHlwZXMp
OwogfQogCkBAIC00OTUsMTAgKzQ5NSwxMCBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxl
cjo6cmVwYWludE1hcmtlcnMoRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGVzIG1hcmtlcgogICAg
IC8vIG91dGVyIGxvb3A6IHByb2Nlc3MgZWFjaCBtYXJrZXJlZCBub2RlIGluIHRoZSBkb2N1bWVu
dAogICAgIE1hcmtlck1hcDo6aXRlcmF0b3IgZW5kID0gbV9tYXJrZXJzLmVuZCgpOwogICAgIGZv
ciAoTWFya2VyTWFwOjppdGVyYXRvciBpID0gbV9tYXJrZXJzLmJlZ2luKCk7IGkgIT0gZW5kOyAr
K2kpIHsKLSAgICAgICAgTm9kZSogbm9kZSA9IGktPmZpcnN0LmdldCgpOworICAgICAgICBOb2Rl
KiBub2RlID0gaS0+a2V5LmdldCgpOwogCiAgICAgICAgIC8vIGlubmVyIGxvb3A6IHByb2Nlc3Mg
ZWFjaCBtYXJrZXIgaW4gdGhlIGN1cnJlbnQgbm9kZQotICAgICAgICBNYXJrZXJMaXN0KiBsaXN0
ID0gaS0+c2Vjb25kOworICAgICAgICBNYXJrZXJMaXN0KiBsaXN0ID0gaS0+dmFsdWU7CiAgICAg
ICAgIGJvb2wgbm9kZU5lZWRzUmVwYWludCA9IGZhbHNlOwogICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSAhPSBsaXN0LT5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgRG9jdW1lbnRNYXJr
ZXIgbWFya2VyID0gbGlzdC0+YXQoaSk7CkBAIC01MjYsNyArNTI2LDcgQEAgdm9pZCBEb2N1bWVu
dE1hcmtlckNvbnRyb2xsZXI6OmludmFsaWRhdGVSZW5kZXJlZFJlY3RzRm9yTWFya2Vyc0luUmVj
dChjb25zdCBMYXkKICAgICBmb3IgKE1hcmtlck1hcDo6aXRlcmF0b3IgaSA9IG1fbWFya2Vycy5i
ZWdpbigpOyBpICE9IGVuZDsgKytpKSB7CiAKICAgICAgICAgLy8gaW5uZXIgbG9vcDogcHJvY2Vz
cyBlYWNoIHJlY3QgaW4gdGhlIGN1cnJlbnQgbm9kZQotICAgICAgICBNYXJrZXJMaXN0KiBsaXN0
ID0gaS0+c2Vjb25kOworICAgICAgICBNYXJrZXJMaXN0KiBsaXN0ID0gaS0+dmFsdWU7CiAgICAg
ICAgIGZvciAoc2l6ZV90IGxpc3RJbmRleCA9IDA7IGxpc3RJbmRleCA8IGxpc3QtPnNpemUoKTsg
KytsaXN0SW5kZXgpCiAgICAgICAgICAgICBsaXN0LT5hdChsaXN0SW5kZXgpLmludmFsaWRhdGUo
cik7CiAgICAgfQpAQCAtNjc1LDkgKzY3NSw5IEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyOjpzaG93TWFya2VycygpIGNvbnN0CiAgICAgZnByaW50ZihzdGRlcnIsICIlZCBub2RlcyBo
YXZlIG1hcmtlcnM6XG4iLCBtX21hcmtlcnMuc2l6ZSgpKTsKICAgICBNYXJrZXJNYXA6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IG1fbWFya2Vycy5lbmQoKTsKICAgICBmb3IgKE1hcmtlck1hcDo6Y29u
c3RfaXRlcmF0b3Igbm9kZUl0ZXJhdG9yID0gbV9tYXJrZXJzLmJlZ2luKCk7IG5vZGVJdGVyYXRv
ciAhPSBlbmQ7ICsrbm9kZUl0ZXJhdG9yKSB7Ci0gICAgICAgIE5vZGUqIG5vZGUgPSBub2RlSXRl
cmF0b3ItPmZpcnN0LmdldCgpOworICAgICAgICBOb2RlKiBub2RlID0gbm9kZUl0ZXJhdG9yLT5r
ZXkuZ2V0KCk7CiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXAiLCBub2RlKTsKLSAgICAgICAg
TWFya2VyTGlzdCogbGlzdCA9IG5vZGVJdGVyYXRvci0+c2Vjb25kOworICAgICAgICBNYXJrZXJM
aXN0KiBsaXN0ID0gbm9kZUl0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBt
YXJrZXJJbmRleCA9IDA7IG1hcmtlckluZGV4IDwgbGlzdC0+c2l6ZSgpOyArK21hcmtlckluZGV4
KSB7CiAgICAgICAgICAgICBjb25zdCBEb2N1bWVudE1hcmtlciYgbWFya2VyID0gbGlzdC0+YXQo
bWFya2VySW5kZXgpOwogICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgJWQ6WyVkOiVkXSgl
ZCkiLCBtYXJrZXIudHlwZSgpLCBtYXJrZXIuc3RhcnRPZmZzZXQoKSwgbWFya2VyLmVuZE9mZnNl
dCgpLCBtYXJrZXIuYWN0aXZlTWF0Y2goKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnRPcmRlcmVkTWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE9y
ZGVyZWRNYXAuY3BwCmluZGV4IDA4MmFhMDc0MGE3MWNjZGY1MGUxZDQyZDIzZDMxN2U2M2FmMmY0
ZGEuLjEyOTdlNTEwMmZiNGU3OWNlM2RiMTEyMzU3MDIxZTNkZDA1NTRhNTEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE9yZGVyZWRNYXAuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudE9yZGVyZWRNYXAuY3BwCkBAIC05OCw3ICs5OCw3IEBAIHZvaWQg
RG9jdW1lbnRPcmRlcmVkTWFwOjpyZW1vdmUoQXRvbWljU3RyaW5nSW1wbCoga2V5LCBFbGVtZW50
KiBlbGVtZW50KQogCiAgICAgbV9tYXAuY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgIE1hcDo6aXRl
cmF0b3IgY2FjaGVkSXRlbSA9IG1fbWFwLmZpbmQoa2V5KTsKLSAgICBpZiAoY2FjaGVkSXRlbSAh
PSBtX21hcC5lbmQoKSAmJiBjYWNoZWRJdGVtLT5zZWNvbmQgPT0gZWxlbWVudCkKKyAgICBpZiAo
Y2FjaGVkSXRlbSAhPSBtX21hcC5lbmQoKSAmJiBjYWNoZWRJdGVtLT52YWx1ZSA9PSBlbGVtZW50
KQogICAgICAgICBtX21hcC5yZW1vdmUoY2FjaGVkSXRlbSk7CiAgICAgZWxzZQogICAgICAgICBt
X2R1cGxpY2F0ZUNvdW50cy5yZW1vdmUoa2V5KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FbGVtZW50QXR0cmlidXRlRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVu
dEF0dHJpYnV0ZURhdGEuY3BwCmluZGV4IDZmYjUzZDVkMzBiMjM5OTRmNjg5YjNkOWJjMTBiMmZl
NzA5Yzc1M2MuLmRlZjQxZGE5OTg1MmMwNWM1ODg5YzU1NzdhMTM5YWZmYzA2MTg1ZjMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50QXR0cmlidXRlRGF0YS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmNwcApAQCAtMTExLDcgKzEx
MSw3IEBAIHN0YXRpYyBBdHRyTGlzdCogZW5zdXJlQXR0ckxpc3RGb3JFbGVtZW50KEVsZW1lbnQq
IGVsZW1lbnQpCiAgICAgQVNTRVJUKCFhdHRyTGlzdE1hcCgpLmNvbnRhaW5zKGVsZW1lbnQpKTsK
ICAgICBlbGVtZW50LT5zZXRIYXNBdHRyTGlzdCgpOwogICAgIEF0dHJMaXN0TWFwOjpBZGRSZXN1
bHQgcmVzdWx0ID0gYXR0ckxpc3RNYXAoKS5hZGQoZWxlbWVudCwgYWRvcHRQdHIobmV3IEF0dHJM
aXN0KSk7Ci0gICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLmdldCgpOworICAgIHJl
dHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpOwogfQogCiBzdGF0aWMgdm9pZCByZW1v
dmVBdHRyTGlzdEZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2
ZW50RGlzcGF0Y2hlci5jcHAKaW5kZXggMzkyNTlhMDdiMWY2OTNkNTZmNTVmMzgwZjkwMmQ4NGIw
YjE2OWFlMy4uOTEzNzUxZDA5OGQ4YTU4NTUzMTQwNWNhNzJjOGRlZWM0ODIyYzhkNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAKQEAgLTExMCw3ICsxMTAsNyBAQCBFdmVu
dFRhcmdldCogRXZlbnRSZWxhdGVkVGFyZ2V0QWRqdXN0ZXI6OmZpbmRSZWxhdGVkVGFyZ2V0KFRy
ZWVTY29wZSogc2NvcGUpCiAgICAgICAgIHBhcmVudFRyZWVTY29wZXMuYXBwZW5kKHNjb3BlKTsK
ICAgICAgICAgUmVsYXRlZFRhcmdldE1hcDo6Y29uc3RfaXRlcmF0b3IgZm91bmQgPSBtX3JlbGF0
ZWRUYXJnZXRNYXAuZmluZChzY29wZSk7CiAgICAgICAgIGlmIChmb3VuZCAhPSBtX3JlbGF0ZWRU
YXJnZXRNYXAuZW5kKCkpIHsKLSAgICAgICAgICAgIHJlbGF0ZWRUYXJnZXQgPSBmb3VuZC0+c2Vj
b25kOworICAgICAgICAgICAgcmVsYXRlZFRhcmdldCA9IGZvdW5kLT52YWx1ZTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIHNjb3BlID0gc2NvcGUtPnBhcmVudFRyZWVT
Y29wZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TGlzdGVuZXJNYXAu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TGlzdGVuZXJNYXAuY3BwCmluZGV4IGMxZmQ0
ZDdjOTU3YTY0YmZmNzg4ZjkwMWU2MWRlMDFjYTA5MjI3N2UuLmFmOGM0OGFlZGU1NTEzNmY3NGZl
MTg0NzgxZDA1MjhiNDFkN2NjYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVu
dExpc3RlbmVyTWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRMaXN0ZW5lck1h
cC5jcHAKQEAgLTEwMiw3ICsxMDIsNyBAQCBWZWN0b3I8QXRvbWljU3RyaW5nPiBFdmVudExpc3Rl
bmVyTWFwOjpldmVudFR5cGVzKCkgY29uc3QKICAgICAgICAgRXZlbnRMaXN0ZW5lckhhc2hNYXA6
Oml0ZXJhdG9yIGl0ID0gbV9oYXNoTWFwLT5iZWdpbigpOwogICAgICAgICBFdmVudExpc3RlbmVy
SGFzaE1hcDo6aXRlcmF0b3IgZW5kID0gbV9oYXNoTWFwLT5lbmQoKTsKICAgICAgICAgZm9yICg7
IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIHR5cGVzLmFwcGVuZChpdC0+Zmlyc3QpOwor
ICAgICAgICAgICAgdHlwZXMuYXBwZW5kKGl0LT5rZXkpOwogICAgIH0gZWxzZSBpZiAobV9zaW5n
bGVFdmVudExpc3RlbmVyVmVjdG9yKQogICAgICAgICB0eXBlcy5hcHBlbmQobV9zaW5nbGVFdmVu
dExpc3RlbmVyVHlwZSk7CiAKQEAgLTEzNiw5ICsxMzYsOSBAQCBib29sIEV2ZW50TGlzdGVuZXJN
YXA6OmFkZChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVudExp
c3RlbgogICAgIGlmIChtX2hhc2hNYXApIHsKICAgICAgICAgRXZlbnRMaXN0ZW5lckhhc2hNYXA6
OkFkZFJlc3VsdCByZXN1bHQgPSBtX2hhc2hNYXAtPmFkZChldmVudFR5cGUsIG51bGxwdHIpOwog
ICAgICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgICAgICByZXN1bHQuaXRlcmF0
b3ItPnNlY29uZCA9IGFkb3B0UHRyKG5ldyBFdmVudExpc3RlbmVyVmVjdG9yKTsKKyAgICAgICAg
ICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBhZG9wdFB0cihuZXcgRXZlbnRMaXN0ZW5lclZl
Y3Rvcik7CiAKLSAgICAgICAgcmV0dXJuIGFkZExpc3RlbmVyVG9WZWN0b3IocmVzdWx0Lml0ZXJh
dG9yLT5zZWNvbmQuZ2V0KCksIGxpc3RlbmVyLCB1c2VDYXB0dXJlKTsKKyAgICAgICAgcmV0dXJu
IGFkZExpc3RlbmVyVG9WZWN0b3IocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKSwgbGlzdGVu
ZXIsIHVzZUNhcHR1cmUpOwogICAgIH0KIAogICAgIGlmICghbV9zaW5nbGVFdmVudExpc3RlbmVy
VmVjdG9yKSB7CkBAIC0xNzksOCArMTc5LDggQEAgYm9vbCBFdmVudExpc3RlbmVyTWFwOjpyZW1v
dmUoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIqIGxpc3QKICAg
ICBpZiAoaXQgPT0gbV9oYXNoTWFwLT5lbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgYm9vbCB3YXNSZW1vdmVkID0gcmVtb3ZlTGlzdGVuZXJGcm9tVmVjdG9yKGl0LT5zZWNvbmQu
Z2V0KCksIGxpc3RlbmVyLCB1c2VDYXB0dXJlLCBpbmRleE9mUmVtb3ZlZExpc3RlbmVyKTsKLSAg
ICBpZiAoaXQtPnNlY29uZC0+aXNFbXB0eSgpKQorICAgIGJvb2wgd2FzUmVtb3ZlZCA9IHJlbW92
ZUxpc3RlbmVyRnJvbVZlY3RvcihpdC0+dmFsdWUuZ2V0KCksIGxpc3RlbmVyLCB1c2VDYXB0dXJl
LCBpbmRleE9mUmVtb3ZlZExpc3RlbmVyKTsKKyAgICBpZiAoaXQtPnZhbHVlLT5pc0VtcHR5KCkp
CiAgICAgICAgIG1faGFzaE1hcC0+cmVtb3ZlKGl0KTsKICAgICByZXR1cm4gd2FzUmVtb3ZlZDsK
IH0KQEAgLTE5Myw3ICsxOTMsNyBAQCBFdmVudExpc3RlbmVyVmVjdG9yKiBFdmVudExpc3RlbmVy
TWFwOjpmaW5kKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKQogICAgICAgICBFdmVudExp
c3RlbmVySGFzaE1hcDo6aXRlcmF0b3IgaXQgPSBtX2hhc2hNYXAtPmZpbmQoZXZlbnRUeXBlKTsK
ICAgICAgICAgaWYgKGl0ID09IG1faGFzaE1hcC0+ZW5kKCkpCiAgICAgICAgICAgICByZXR1cm4g
MDsKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIHJldHVybiBpdC0+
dmFsdWUuZ2V0KCk7CiAgICAgfQogCiAgICAgaWYgKG1fc2luZ2xlRXZlbnRMaXN0ZW5lclR5cGUg
PT0gZXZlbnRUeXBlKQpAQCAtMjI3LDcgKzIyNyw3IEBAIHZvaWQgRXZlbnRMaXN0ZW5lck1hcDo6
cmVtb3ZlRmlyc3RFdmVudExpc3RlbmVyQ3JlYXRlZEZyb21NYXJrdXAoY29uc3QgQXRvbWljU3Ry
CiAgICAgICAgIEV2ZW50TGlzdGVuZXJIYXNoTWFwOjppdGVyYXRvciByZXN1bHQgPSBtX2hhc2hN
YXAtPmZpbmQoZXZlbnRUeXBlKTsKICAgICAgICAgQVNTRVJUKHJlc3VsdCAhPSBtX2hhc2hNYXAt
PmVuZCgpKTsKIAotICAgICAgICBFdmVudExpc3RlbmVyVmVjdG9yKiBsaXN0ZW5lclZlY3RvciA9
IHJlc3VsdC0+c2Vjb25kLmdldCgpOworICAgICAgICBFdmVudExpc3RlbmVyVmVjdG9yKiBsaXN0
ZW5lclZlY3RvciA9IHJlc3VsdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgIEFTU0VSVChsaXN0ZW5l
clZlY3Rvcik7CiAKICAgICAgICAgcmVtb3ZlRmlyc3RMaXN0ZW5lckNyZWF0ZWRGcm9tTWFya3Vw
KGxpc3RlbmVyVmVjdG9yKTsKQEAgLTI2NSw3ICsyNjUsNyBAQCB2b2lkIEV2ZW50TGlzdGVuZXJN
YXA6OmNvcHlFdmVudExpc3RlbmVyc05vdENyZWF0ZWRGcm9tTWFya3VwVG9UYXJnZXQoRXZlbnRU
YXJnZQogICAgIGlmIChtX2hhc2hNYXApIHsKICAgICAgICAgRXZlbnRMaXN0ZW5lckhhc2hNYXA6
Oml0ZXJhdG9yIGVuZCA9IG1faGFzaE1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAoRXZlbnRMaXN0
ZW5lckhhc2hNYXA6Oml0ZXJhdG9yIGl0ID0gbV9oYXNoTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpCi0gICAgICAgICAgICBjb3B5TGlzdGVuZXJzTm90Q3JlYXRlZEZyb21NYXJrdXBUb1Rh
cmdldChpdC0+Zmlyc3QsIGl0LT5zZWNvbmQuZ2V0KCksIHRhcmdldCk7CisgICAgICAgICAgICBj
b3B5TGlzdGVuZXJzTm90Q3JlYXRlZEZyb21NYXJrdXBUb1RhcmdldChpdC0+a2V5LCBpdC0+dmFs
dWUuZ2V0KCksIHRhcmdldCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTMyNSw3ICsz
MjUsNyBAQCBFdmVudExpc3RlbmVyKiBFdmVudExpc3RlbmVySXRlcmF0b3I6Om5leHRMaXN0ZW5l
cigpCiAKICAgICBpZiAobV9tYXAtPm1faGFzaE1hcCkgewogICAgICAgICBmb3IgKDsgbV9tYXBJ
dGVyYXRvciAhPSBtX21hcEVuZDsgKyttX21hcEl0ZXJhdG9yKSB7Ci0gICAgICAgICAgICBFdmVu
dExpc3RlbmVyVmVjdG9yJiBsaXN0ZW5lcnMgPSAqbV9tYXBJdGVyYXRvci0+c2Vjb25kOworICAg
ICAgICAgICAgRXZlbnRMaXN0ZW5lclZlY3RvciYgbGlzdGVuZXJzID0gKm1fbWFwSXRlcmF0b3It
PnZhbHVlOwogICAgICAgICAgICAgaWYgKG1faW5kZXggPCBsaXN0ZW5lcnMuc2l6ZSgpKQogICAg
ICAgICAgICAgICAgIHJldHVybiBsaXN0ZW5lcnNbbV9pbmRleCsrXS5saXN0ZW5lci5nZXQoKTsK
ICAgICAgICAgICAgIG1faW5kZXggPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L0lkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vSWRUYXJn
ZXRPYnNlcnZlclJlZ2lzdHJ5LmNwcAppbmRleCA1ZmMyNmFjZmVlMzMyZWI3ZDJkNjE5YmE1OTIw
YzczM2Y1YmIwZjcwLi5hYWZhOGEyZDFiNTMwYjdkMGYzZTM2NzA1NThlOGM5NmI5NDhhZmI4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vSWRUYXJnZXRPYnNlcnZlclJlZ2lzdHJ5LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vSWRUYXJnZXRPYnNlcnZlclJlZ2lzdHJ5LmNwcApA
QCAtNDIsOSArNDIsOSBAQCB2b2lkIElkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeTo6YWRkT2JzZXJ2
ZXIoY29uc3QgQXRvbWljU3RyaW5nJiBpZCwgSWRUYXJnZXRPYnNlcgogICAgIAogICAgIElkVG9P
YnNlcnZlclNldE1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fcmVnaXN0cnkuYWRkKGlkLmltcGwo
KSwgbnVsbHB0cik7CiAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXN1bHQu
aXRlcmF0b3ItPnNlY29uZCA9IGFkb3B0UHRyKG5ldyBPYnNlcnZlclNldCgpKTsKKyAgICAgICAg
cmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGFkb3B0UHRyKG5ldyBPYnNlcnZlclNldCgpKTsKIAot
ICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLT5hZGQob2JzZXJ2ZXIpOworICAgIHJlc3VsdC5p
dGVyYXRvci0+dmFsdWUtPmFkZChvYnNlcnZlcik7CiB9CiAKIHZvaWQgSWRUYXJnZXRPYnNlcnZl
clJlZ2lzdHJ5OjpyZW1vdmVPYnNlcnZlcihjb25zdCBBdG9taWNTdHJpbmcmIGlkLCBJZFRhcmdl
dE9ic2VydmVyKiBvYnNlcnZlcikKQEAgLTU0LDcgKzU0LDcgQEAgdm9pZCBJZFRhcmdldE9ic2Vy
dmVyUmVnaXN0cnk6OnJlbW92ZU9ic2VydmVyKGNvbnN0IEF0b21pY1N0cmluZyYgaWQsIElkVGFy
Z2V0T2IKIAogICAgIElkVG9PYnNlcnZlclNldE1hcDo6aXRlcmF0b3IgaXRlciA9IG1fcmVnaXN0
cnkuZmluZChpZC5pbXBsKCkpOwogCi0gICAgT2JzZXJ2ZXJTZXQqIHNldCA9IGl0ZXItPnNlY29u
ZC5nZXQoKTsKKyAgICBPYnNlcnZlclNldCogc2V0ID0gaXRlci0+dmFsdWUuZ2V0KCk7CiAgICAg
c2V0LT5yZW1vdmUob2JzZXJ2ZXIpOwogICAgIGlmIChzZXQtPmlzRW1wdHkoKSAmJiBzZXQgIT0g
bV9ub3RpZnlpbmdPYnNlcnZlcnNJblNldCkKICAgICAgICAgbV9yZWdpc3RyeS5yZW1vdmUoaXRl
cik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25PYnNlcnZlckludGVy
ZXN0R3JvdXAuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uT2JzZXJ2ZXJJbnRlcmVz
dEdyb3VwLmNwcAppbmRleCAyNGMwY2I1ODY1MTdlMDhiYzdhOGI0MDkzZjIxZDMxZTBkYjJkNjRl
Li40ZmFkMjIwODE4NTNjZDgxNTM0ZDMwMGQxNjFkODhiMWFhNWU5NGM4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25PYnNlcnZlckludGVyZXN0R3JvdXAuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cC5jcHAKQEAg
LTYyLDcgKzYyLDcgQEAgTXV0YXRpb25PYnNlcnZlckludGVyZXN0R3JvdXA6Ok11dGF0aW9uT2Jz
ZXJ2ZXJJbnRlcmVzdEdyb3VwKEhhc2hNYXA8TXV0YXRpb25PYnMKIGJvb2wgTXV0YXRpb25PYnNl
cnZlckludGVyZXN0R3JvdXA6OmlzT2xkVmFsdWVSZXF1ZXN0ZWQoKQogewogICAgIGZvciAoSGFz
aE1hcDxNdXRhdGlvbk9ic2VydmVyKiwgTXV0YXRpb25SZWNvcmREZWxpdmVyeU9wdGlvbnM+Ojpp
dGVyYXRvciBpdGVyID0gbV9vYnNlcnZlcnMuYmVnaW4oKTsgaXRlciAhPSBtX29ic2VydmVycy5l
bmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIGlmIChoYXNPbGRWYWx1ZShpdGVyLT5zZWNvbmQpKQor
ICAgICAgICBpZiAoaGFzT2xkVmFsdWUoaXRlci0+dmFsdWUpKQogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKQEAgLTczLDggKzczLDggQEAgdm9pZCBN
dXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cDo6ZW5xdWV1ZU11dGF0aW9uUmVjb3JkKFBhc3NS
ZWZQdHI8TXV0YXRpb25SZWMKICAgICBSZWZQdHI8TXV0YXRpb25SZWNvcmQ+IG11dGF0aW9uID0g
cHJwTXV0YXRpb247CiAgICAgUmVmUHRyPE11dGF0aW9uUmVjb3JkPiBtdXRhdGlvbldpdGhOdWxs
T2xkVmFsdWU7CiAgICAgZm9yIChIYXNoTWFwPE11dGF0aW9uT2JzZXJ2ZXIqLCBNdXRhdGlvblJl
Y29yZERlbGl2ZXJ5T3B0aW9ucz46Oml0ZXJhdG9yIGl0ZXIgPSBtX29ic2VydmVycy5iZWdpbigp
OyBpdGVyICE9IG1fb2JzZXJ2ZXJzLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgTXV0YXRpb25P
YnNlcnZlciogb2JzZXJ2ZXIgPSBpdGVyLT5maXJzdDsKLSAgICAgICAgaWYgKGhhc09sZFZhbHVl
KGl0ZXItPnNlY29uZCkpIHsKKyAgICAgICAgTXV0YXRpb25PYnNlcnZlciogb2JzZXJ2ZXIgPSBp
dGVyLT5rZXk7CisgICAgICAgIGlmIChoYXNPbGRWYWx1ZShpdGVyLT52YWx1ZSkpIHsKICAgICAg
ICAgICAgIG9ic2VydmVyLT5lbnF1ZXVlTXV0YXRpb25SZWNvcmQobXV0YXRpb24pOwogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAppbmRleCBjZjZkYzkzYmNk
YjM2Yzg1YzJiMjk0YTkyZWJlNDZmZTlhOTc1ODQwLi5iNzI3ZDAyOWM3Y2VmN2ZjMWJkNGUyNWQ1
OWE5NTE5ZDA0NjZhZGY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCkBAIC0xODUsNyArMTg1LDcgQEAgdm9p
ZCBOb2RlOjpkdW1wU3RhdGlzdGljcygpCiAgICAgICAgICAgICAgICAgRWxlbWVudCogZWxlbWVu
dCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKTsKICAgICAgICAgICAgICAgICBIYXNoTWFw
PFN0cmluZywgc2l6ZV90Pjo6QWRkUmVzdWx0IHJlc3VsdCA9IHBlclRhZ0NvdW50LmFkZChlbGVt
ZW50LT50YWdOYW1lKCksIDEpOwogICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmlzTmV3RW50
cnkpCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKys7CisgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUrKzsKIAogICAgICAgICAgICAg
ICAgIGlmIChFbGVtZW50QXR0cmlidXRlRGF0YSogYXR0cmlidXRlRGF0YSA9IGVsZW1lbnQtPmF0
dHJpYnV0ZURhdGEoKSkgewogICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzICs9IGF0dHJp
YnV0ZURhdGEtPmxlbmd0aCgpOwpAQCAtMjczLDcgKzI3Myw3IEBAIHZvaWQgTm9kZTo6ZHVtcFN0
YXRpc3RpY3MoKQogCiAgICAgcHJpbnRmKCJFbGVtZW50IHRhZyBuYW1lIGRpc3RpYnV0aW9uOlxu
Iik7CiAgICAgZm9yIChIYXNoTWFwPFN0cmluZywgc2l6ZV90Pjo6aXRlcmF0b3IgaXQgPSBwZXJU
YWdDb3VudC5iZWdpbigpOyBpdCAhPSBwZXJUYWdDb3VudC5lbmQoKTsgKytpdCkKLSAgICAgICAg
cHJpbnRmKCIgIE51bWJlciBvZiA8JXM+IHRhZ3M6ICV6dVxuIiwgaXQtPmZpcnN0LnV0ZjgoKS5k
YXRhKCksIGl0LT5zZWNvbmQpOworICAgICAgICBwcmludGYoIiAgTnVtYmVyIG9mIDwlcz4gdGFn
czogJXp1XG4iLCBpdC0+a2V5LnV0ZjgoKS5kYXRhKCksIGl0LT52YWx1ZSk7CiAKICAgICBwcmlu
dGYoIkF0dHJpYnV0ZXM6XG4iKTsKICAgICBwcmludGYoIiAgTnVtYmVyIG9mIEF0dHJpYnV0ZXMg
KG5vbi1Ob2RlIGFuZCBOb2RlKTogJXp1IFslenVdXG4iLCBhdHRyaWJ1dGVzLCBzaXplb2YoQXR0
cmlidXRlKSk7CkBAIC01MDYsNyArNTA2LDcgQEAgdm9pZCBOb2RlOjpjbGVhclJhcmVEYXRhKCkK
ICAgICAgICAgTm9kZVJhcmVEYXRhOjpOb2RlUmFyZURhdGFNYXAmIGRhdGFNYXAgPSBOb2RlUmFy
ZURhdGE6OnJhcmVEYXRhTWFwKCk7CiAgICAgICAgIE5vZGVSYXJlRGF0YTo6Tm9kZVJhcmVEYXRh
TWFwOjppdGVyYXRvciBpdCA9IGRhdGFNYXAuZmluZCh0aGlzKTsKICAgICAgICAgQVNTRVJUKGl0
ICE9IGRhdGFNYXAuZW5kKCkpOwotICAgICAgICBkZWxldGUgaXQtPnNlY29uZDsKKyAgICAgICAg
ZGVsZXRlIGl0LT52YWx1ZTsKICAgICAgICAgZGF0YU1hcC5yZW1vdmUoaXQpOwogICAgIH0KICAg
ICBjbGVhckZsYWcoSGFzUmFyZURhdGFGbGFnKTsKQEAgLTIyNTYsMTggKzIyNTYsMTggQEAgdm9p
ZCBOb2RlTGlzdHNOb2RlRGF0YTo6aW52YWxpZGF0ZUNhY2hlcyhjb25zdCBRdWFsaWZpZWROYW1l
KiBhdHRyTmFtZSkKIHsKICAgICBOb2RlTGlzdEF0b21pY05hbWVDYWNoZU1hcDo6Y29uc3RfaXRl
cmF0b3IgYXRvbWljTmFtZUNhY2hlRW5kID0gbV9hdG9taWNOYW1lQ2FjaGVzLmVuZCgpOwogICAg
IGZvciAoTm9kZUxpc3RBdG9taWNOYW1lQ2FjaGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9h
dG9taWNOYW1lQ2FjaGVzLmJlZ2luKCk7IGl0ICE9IGF0b21pY05hbWVDYWNoZUVuZDsgKytpdCkK
LSAgICAgICAgaXQtPnNlY29uZC0+aW52YWxpZGF0ZUNhY2hlKGF0dHJOYW1lKTsKKyAgICAgICAg
aXQtPnZhbHVlLT5pbnZhbGlkYXRlQ2FjaGUoYXR0ck5hbWUpOwogCiAgICAgTm9kZUxpc3ROYW1l
Q2FjaGVNYXA6OmNvbnN0X2l0ZXJhdG9yIG5hbWVDYWNoZUVuZCA9IG1fbmFtZUNhY2hlcy5lbmQo
KTsKICAgICBmb3IgKE5vZGVMaXN0TmFtZUNhY2hlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1f
bmFtZUNhY2hlcy5iZWdpbigpOyBpdCAhPSBuYW1lQ2FjaGVFbmQ7ICsraXQpCi0gICAgICAgIGl0
LT5zZWNvbmQtPmludmFsaWRhdGVDYWNoZShhdHRyTmFtZSk7CisgICAgICAgIGl0LT52YWx1ZS0+
aW52YWxpZGF0ZUNhY2hlKGF0dHJOYW1lKTsKIAogICAgIGlmICghYXR0ck5hbWUpCiAgICAgICAg
IHJldHVybjsKIAogICAgIFRhZ05vZGVMaXN0Q2FjaGVOUzo6aXRlcmF0b3IgdGFnQ2FjaGVFbmQg
PSBtX3RhZ05vZGVMaXN0Q2FjaGVOUy5lbmQoKTsKICAgICBmb3IgKFRhZ05vZGVMaXN0Q2FjaGVO
Uzo6aXRlcmF0b3IgaXQgPSBtX3RhZ05vZGVMaXN0Q2FjaGVOUy5iZWdpbigpOyBpdCAhPSB0YWdD
YWNoZUVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+aW52YWxpZGF0ZUNhY2hlKCk7Cisg
ICAgICAgIGl0LT52YWx1ZS0+aW52YWxpZGF0ZUNhY2hlKCk7CiB9CiAKIHZvaWQgTm9kZTo6Z2V0
U3VicmVzb3VyY2VVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiB1cmxzKSBjb25zdApAQCAtMjQyNCw3
ICsyNDI0LDcgQEAgdm9pZCBOb2RlOjpjb2xsZWN0TWF0Y2hpbmdPYnNlcnZlcnNGb3JNdXRhdGlv
bihIYXNoTWFwPE11dGF0aW9uT2JzZXJ2ZXIqLCBNdXRhdGkKICAgICAgICAgICAgICAgICBNdXRh
dGlvblJlY29yZERlbGl2ZXJ5T3B0aW9ucyBkZWxpdmVyeU9wdGlvbnMgPSByZWdpc3RyYXRpb24t
PmRlbGl2ZXJ5T3B0aW9ucygpOwogICAgICAgICAgICAgICAgIEhhc2hNYXA8TXV0YXRpb25PYnNl
cnZlciosIE11dGF0aW9uUmVjb3JkRGVsaXZlcnlPcHRpb25zPjo6QWRkUmVzdWx0IHJlc3VsdCA9
IG9ic2VydmVycy5hZGQocmVnaXN0cmF0aW9uLT5vYnNlcnZlcigpLCBkZWxpdmVyeU9wdGlvbnMp
OwogICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgICAgICAg
ICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kIHw9IGRlbGl2ZXJ5T3B0aW9uczsKKyAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSB8PSBkZWxpdmVyeU9wdGlvbnM7
CiAKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjQzNyw3ICsyNDM3LDcgQEAgdm9pZCBO
b2RlOjpjb2xsZWN0TWF0Y2hpbmdPYnNlcnZlcnNGb3JNdXRhdGlvbihIYXNoTWFwPE11dGF0aW9u
T2JzZXJ2ZXIqLCBNdXRhdGkKICAgICAgICAgICAgICAgICBNdXRhdGlvblJlY29yZERlbGl2ZXJ5
T3B0aW9ucyBkZWxpdmVyeU9wdGlvbnMgPSByZWdpc3RyYXRpb24tPmRlbGl2ZXJ5T3B0aW9ucygp
OwogICAgICAgICAgICAgICAgIEhhc2hNYXA8TXV0YXRpb25PYnNlcnZlciosIE11dGF0aW9uUmVj
b3JkRGVsaXZlcnlPcHRpb25zPjo6QWRkUmVzdWx0IHJlc3VsdCA9IG9ic2VydmVycy5hZGQocmVn
aXN0cmF0aW9uLT5vYnNlcnZlcigpLCBkZWxpdmVyeU9wdGlvbnMpOwogICAgICAgICAgICAgICAg
IGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5pdGVy
YXRvci0+c2Vjb25kIHw9IGRlbGl2ZXJ5T3B0aW9uczsKKyAgICAgICAgICAgICAgICAgICAgcmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZSB8PSBkZWxpdmVyeU9wdGlvbnM7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVE
YXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRhLmgKaW5kZXggMGJkYzNlOGFj
MjA1N2UxYzE4NGY4ZGNhNTkxOTg1ZWU1ZTlmYjA3NS4uM2E2OWI5YmU2NDRlMzNkNTNlNWY3MTg2
MGQ5ZWJmYTQ5YWU0ZDYyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGVSYXJl
RGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaApAQCAtNjgsMTAg
KzY4LDEwIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIE5vZGVMaXN0QXRvbWljTmFtZUNhY2hl
TWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9hdG9taWNOYW1lQ2FjaGVzLmFkZChuYW1lZE5vZGVM
aXN0S2V5KGxpc3RUeXBlLCBuYW1lKSwgMCk7CiAgICAgICAgIGlmICghcmVzdWx0LmlzTmV3RW50
cnkpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VCo+KHJlc3VsdC5pdGVyYXRvci0+
c2Vjb25kKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUKj4ocmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZSk7CiAKICAgICAgICAgUmVmUHRyPFQ+IGxpc3QgPSBUOjpjcmVhdGUobm9kZSwg
bmFtZSk7Ci0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gbGlzdC5nZXQoKTsKKyAg
ICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGxpc3QuZ2V0KCk7CiAgICAgICAgIHJldHVy
biBsaXN0LnJlbGVhc2UoKTsKICAgICB9CiAKQEAgLTgwLDEwICs4MCwxMCBAQCBwdWJsaWM6CiAg
ICAgewogICAgICAgICBOb2RlTGlzdE5hbWVDYWNoZU1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1f
bmFtZUNhY2hlcy5hZGQobmFtZWROb2RlTGlzdEtleShsaXN0VHlwZSwgbmFtZSksIDApOwogICAg
ICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PFQqPihyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7CisgICAgICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8VCo+KHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwogCiAgICAgICAgIFJlZlB0cjxU
PiBsaXN0ID0gVDo6Y3JlYXRlKG5vZGUsIG5hbWUpOwotICAgICAgICByZXN1bHQuaXRlcmF0b3It
PnNlY29uZCA9IGxpc3QuZ2V0KCk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBs
aXN0LmdldCgpOwogICAgICAgICByZXR1cm4gbGlzdC5yZWxlYXNlKCk7CiAgICAgfQogCkBAIC05
MiwxMCArOTIsMTAgQEAgcHVibGljOgogICAgICAgICBRdWFsaWZpZWROYW1lIG5hbWUobnVsbEF0
b20sIGxvY2FsTmFtZSwgbmFtZXNwYWNlVVJJKTsKICAgICAgICAgVGFnTm9kZUxpc3RDYWNoZU5T
OjpBZGRSZXN1bHQgcmVzdWx0ID0gbV90YWdOb2RlTGlzdENhY2hlTlMuYWRkKG5hbWUsIDApOwog
ICAgICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dC5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+
dmFsdWU7CiAKICAgICAgICAgUmVmUHRyPFRhZ05vZGVMaXN0PiBsaXN0ID0gVGFnTm9kZUxpc3Q6
OmNyZWF0ZShub2RlLCBuYW1lc3BhY2VVUkksIGxvY2FsTmFtZSk7Ci0gICAgICAgIHJlc3VsdC5p
dGVyYXRvci0+c2Vjb25kID0gbGlzdC5nZXQoKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZSA9IGxpc3QuZ2V0KCk7CiAgICAgICAgIHJldHVybiBsaXN0LnJlbGVhc2UoKTsKICAgICB9
CiAKQEAgLTEzNiw3ICsxMzYsNyBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChvbGREb2N1bWVudCAh
PSBuZXdEb2N1bWVudCkgewogICAgICAgICAgICAgTm9kZUxpc3RBdG9taWNOYW1lQ2FjaGVNYXA6
OmNvbnN0X2l0ZXJhdG9yIGF0b21pY05hbWVDYWNoZUVuZCA9IG1fYXRvbWljTmFtZUNhY2hlcy5l
bmQoKTsKICAgICAgICAgICAgIGZvciAoTm9kZUxpc3RBdG9taWNOYW1lQ2FjaGVNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbV9hdG9taWNOYW1lQ2FjaGVzLmJlZ2luKCk7IGl0ICE9IGF0b21pY05h
bWVDYWNoZUVuZDsgKytpdCkgewotICAgICAgICAgICAgICAgIER5bmFtaWNTdWJ0cmVlTm9kZUxp
c3QqIGxpc3QgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgICAgIER5bmFtaWNTdWJ0cmVlTm9k
ZUxpc3QqIGxpc3QgPSBpdC0+dmFsdWU7CiAgICAgICAgICAgICAgICAgaWYgKGxpc3QtPmlzUm9v
dGVkQXREb2N1bWVudCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIG9sZERvY3VtZW50LT51bnJl
Z2lzdGVyTm9kZUxpc3RDYWNoZShsaXN0KTsKICAgICAgICAgICAgICAgICAgICAgbmV3RG9jdW1l
bnQtPnJlZ2lzdGVyTm9kZUxpc3RDYWNoZShsaXN0KTsKQEAgLTE0NSw3ICsxNDUsNyBAQCBwdWJs
aWM6CiAKICAgICAgICAgICAgIE5vZGVMaXN0TmFtZUNhY2hlTWFwOjpjb25zdF9pdGVyYXRvciBu
YW1lQ2FjaGVFbmQgPSBtX25hbWVDYWNoZXMuZW5kKCk7CiAgICAgICAgICAgICBmb3IgKE5vZGVM
aXN0TmFtZUNhY2hlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fbmFtZUNhY2hlcy5iZWdpbigp
OyBpdCAhPSBuYW1lQ2FjaGVFbmQ7ICsraXQpIHsKLSAgICAgICAgICAgICAgICBEeW5hbWljU3Vi
dHJlZU5vZGVMaXN0KiBsaXN0ID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgICAgICBEeW5hbWlj
U3VidHJlZU5vZGVMaXN0KiBsaXN0ID0gaXQtPnZhbHVlOwogICAgICAgICAgICAgICAgIGlmIChs
aXN0LT5pc1Jvb3RlZEF0RG9jdW1lbnQoKSkgewogICAgICAgICAgICAgICAgICAgICBvbGREb2N1
bWVudC0+dW5yZWdpc3Rlck5vZGVMaXN0Q2FjaGUobGlzdCk7CiAgICAgICAgICAgICAgICAgICAg
IG5ld0RvY3VtZW50LT5yZWdpc3Rlck5vZGVMaXN0Q2FjaGUobGlzdCk7CkBAIC0xNTQsNyArMTU0
LDcgQEAgcHVibGljOgogCiAgICAgICAgICAgICBUYWdOb2RlTGlzdENhY2hlTlM6OmNvbnN0X2l0
ZXJhdG9yIHRhZ0VuZCA9IG1fdGFnTm9kZUxpc3RDYWNoZU5TLmVuZCgpOwogICAgICAgICAgICAg
Zm9yIChUYWdOb2RlTGlzdENhY2hlTlM6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90YWdOb2RlTGlz
dENhY2hlTlMuYmVnaW4oKTsgaXQgIT0gdGFnRW5kOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAg
RHluYW1pY1N1YnRyZWVOb2RlTGlzdCogbGlzdCA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICAg
ICAgRHluYW1pY1N1YnRyZWVOb2RlTGlzdCogbGlzdCA9IGl0LT52YWx1ZTsKICAgICAgICAgICAg
ICAgICBBU1NFUlQoIWxpc3QtPmlzUm9vdGVkQXREb2N1bWVudCgpKTsKICAgICAgICAgICAgICAg
ICBvbGREb2N1bWVudC0+dW5yZWdpc3Rlck5vZGVMaXN0Q2FjaGUobGlzdCk7CiAgICAgICAgICAg
ICAgICAgbmV3RG9jdW1lbnQtPnJlZ2lzdGVyTm9kZUxpc3RDYWNoZShsaXN0KTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwIGIvU291cmNl
L1dlYkNvcmUvZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHAKaW5kZXggNmJiYTU2YzBiNTJl
NjNmZGZjM2UzNWNjMGUxYzViOWQzMDRhYzAxNS4uN2Y4OWViZmVkM2JlZDlkZDJmMWJhYWYzYjhk
MWE3NjMwNDY5NWM3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1Byb2Nlc3NpbmdJ
bnN0cnVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1Byb2Nlc3NpbmdJbnN0cnVj
dGlvbi5jcHAKQEAgLTExNyw3ICsxMTcsNyBAQCB2b2lkIFByb2Nlc3NpbmdJbnN0cnVjdGlvbjo6
Y2hlY2tTdHlsZVNoZWV0KCkKICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0
X2l0ZXJhdG9yIGkgPSBhdHRycy5maW5kKCJ0eXBlIik7CiAgICAgICAgIFN0cmluZyB0eXBlOwog
ICAgICAgICBpZiAoaSAhPSBhdHRycy5lbmQoKSkKLSAgICAgICAgICAgIHR5cGUgPSBpLT5zZWNv
bmQ7CisgICAgICAgICAgICB0eXBlID0gaS0+dmFsdWU7CiAKICAgICAgICAgbV9pc0NTUyA9IHR5
cGUuaXNFbXB0eSgpIHx8IHR5cGUgPT0gInRleHQvY3NzIjsKICNpZiBFTkFCTEUoWFNMVCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcAppbmRleCA5MjQ0
NWNhODBkYWY2MzMyMzlkMmY3OWNlZTk4ZGQ5ZGQ0NDFiMzIzLi41MzViNTcwYjVkN2RlOWY0YWY5
MzU4M2U3YzcxZDEyYjJkNzUzNWE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQuY3BwCkBAIC0xNzMsOSArMTczLDkgQEAgYm9vbCBTY3JpcHRFeGVjdXRp
b25Db250ZXh0OjpjYW5TdXNwZW5kQWN0aXZlRE9NT2JqZWN0cygpCiAgICAgbV9pdGVyYXRpbmdB
Y3RpdmVET01PYmplY3RzID0gdHJ1ZTsKICAgICBIYXNoTWFwPEFjdGl2ZURPTU9iamVjdCosIHZv
aWQqPjo6aXRlcmF0b3IgYWN0aXZlT2JqZWN0c0VuZCA9IG1fYWN0aXZlRE9NT2JqZWN0cy5lbmQo
KTsKICAgICBmb3IgKEhhc2hNYXA8QWN0aXZlRE9NT2JqZWN0Kiwgdm9pZCo+OjppdGVyYXRvciBp
dGVyID0gbV9hY3RpdmVET01PYmplY3RzLmJlZ2luKCk7IGl0ZXIgIT0gYWN0aXZlT2JqZWN0c0Vu
ZDsgKytpdGVyKSB7Ci0gICAgICAgIEFTU0VSVChpdGVyLT5maXJzdC0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpID09IHRoaXMpOwotICAgICAgICBBU1NFUlQoaXRlci0+Zmlyc3QtPnN1c3BlbmRJ
Zk5lZWRlZENhbGxlZCgpKTsKLSAgICAgICAgaWYgKCFpdGVyLT5maXJzdC0+Y2FuU3VzcGVuZCgp
KSB7CisgICAgICAgIEFTU0VSVChpdGVyLT5rZXktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSA9
PSB0aGlzKTsKKyAgICAgICAgQVNTRVJUKGl0ZXItPmtleS0+c3VzcGVuZElmTmVlZGVkQ2FsbGVk
KCkpOworICAgICAgICBpZiAoIWl0ZXItPmtleS0+Y2FuU3VzcGVuZCgpKSB7CiAgICAgICAgICAg
ICBtX2l0ZXJhdGluZ0FjdGl2ZURPTU9iamVjdHMgPSBmYWxzZTsKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgfQpAQCAtMTkwLDkgKzE5MCw5IEBAIHZvaWQgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dDo6c3VzcGVuZEFjdGl2ZURPTU9iamVjdHMoQWN0aXZlRE9NT2JqZWN0OjpSZWFz
b25Gb3JTCiAgICAgbV9pdGVyYXRpbmdBY3RpdmVET01PYmplY3RzID0gdHJ1ZTsKICAgICBIYXNo
TWFwPEFjdGl2ZURPTU9iamVjdCosIHZvaWQqPjo6aXRlcmF0b3IgYWN0aXZlT2JqZWN0c0VuZCA9
IG1fYWN0aXZlRE9NT2JqZWN0cy5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8QWN0aXZlRE9NT2Jq
ZWN0Kiwgdm9pZCo+OjppdGVyYXRvciBpdGVyID0gbV9hY3RpdmVET01PYmplY3RzLmJlZ2luKCk7
IGl0ZXIgIT0gYWN0aXZlT2JqZWN0c0VuZDsgKytpdGVyKSB7Ci0gICAgICAgIEFTU0VSVChpdGVy
LT5maXJzdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpID09IHRoaXMpOwotICAgICAgICBBU1NF
UlQoaXRlci0+Zmlyc3QtPnN1c3BlbmRJZk5lZWRlZENhbGxlZCgpKTsKLSAgICAgICAgaXRlci0+
Zmlyc3QtPnN1c3BlbmQod2h5KTsKKyAgICAgICAgQVNTRVJUKGl0ZXItPmtleS0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpID09IHRoaXMpOworICAgICAgICBBU1NFUlQoaXRlci0+a2V5LT5zdXNw
ZW5kSWZOZWVkZWRDYWxsZWQoKSk7CisgICAgICAgIGl0ZXItPmtleS0+c3VzcGVuZCh3aHkpOwog
ICAgIH0KICAgICBtX2l0ZXJhdGluZ0FjdGl2ZURPTU9iamVjdHMgPSBmYWxzZTsKICAgICBtX2Fj
dGl2ZURPTU9iamVjdHNBcmVTdXNwZW5kZWQgPSB0cnVlOwpAQCAtMjA2LDkgKzIwNiw5IEBAIHZv
aWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6cmVzdW1lQWN0aXZlRE9NT2JqZWN0cygpCiAgICAg
bV9pdGVyYXRpbmdBY3RpdmVET01PYmplY3RzID0gdHJ1ZTsKICAgICBIYXNoTWFwPEFjdGl2ZURP
TU9iamVjdCosIHZvaWQqPjo6aXRlcmF0b3IgYWN0aXZlT2JqZWN0c0VuZCA9IG1fYWN0aXZlRE9N
T2JqZWN0cy5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8QWN0aXZlRE9NT2JqZWN0Kiwgdm9pZCo+
OjppdGVyYXRvciBpdGVyID0gbV9hY3RpdmVET01PYmplY3RzLmJlZ2luKCk7IGl0ZXIgIT0gYWN0
aXZlT2JqZWN0c0VuZDsgKytpdGVyKSB7Ci0gICAgICAgIEFTU0VSVChpdGVyLT5maXJzdC0+c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpID09IHRoaXMpOwotICAgICAgICBBU1NFUlQoaXRlci0+Zmly
c3QtPnN1c3BlbmRJZk5lZWRlZENhbGxlZCgpKTsKLSAgICAgICAgaXRlci0+Zmlyc3QtPnJlc3Vt
ZSgpOworICAgICAgICBBU1NFUlQoaXRlci0+a2V5LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkg
PT0gdGhpcyk7CisgICAgICAgIEFTU0VSVChpdGVyLT5rZXktPnN1c3BlbmRJZk5lZWRlZENhbGxl
ZCgpKTsKKyAgICAgICAgaXRlci0+a2V5LT5yZXN1bWUoKTsKICAgICB9CiAgICAgbV9pdGVyYXRp
bmdBY3RpdmVET01PYmplY3RzID0gZmFsc2U7CiB9CkBAIC0yMjAsOSArMjIwLDkgQEAgdm9pZCBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0OjpzdG9wQWN0aXZlRE9NT2JqZWN0cygpCiAgICAgbV9pdGVy
YXRpbmdBY3RpdmVET01PYmplY3RzID0gdHJ1ZTsKICAgICBIYXNoTWFwPEFjdGl2ZURPTU9iamVj
dCosIHZvaWQqPjo6aXRlcmF0b3IgYWN0aXZlT2JqZWN0c0VuZCA9IG1fYWN0aXZlRE9NT2JqZWN0
cy5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8QWN0aXZlRE9NT2JqZWN0Kiwgdm9pZCo+OjppdGVy
YXRvciBpdGVyID0gbV9hY3RpdmVET01PYmplY3RzLmJlZ2luKCk7IGl0ZXIgIT0gYWN0aXZlT2Jq
ZWN0c0VuZDsgKytpdGVyKSB7Ci0gICAgICAgIEFTU0VSVChpdGVyLT5maXJzdC0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpID09IHRoaXMpOwotICAgICAgICBBU1NFUlQoaXRlci0+Zmlyc3QtPnN1
c3BlbmRJZk5lZWRlZENhbGxlZCgpKTsKLSAgICAgICAgaXRlci0+Zmlyc3QtPnN0b3AoKTsKKyAg
ICAgICAgQVNTRVJUKGl0ZXItPmtleS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpID09IHRoaXMp
OworICAgICAgICBBU1NFUlQoaXRlci0+a2V5LT5zdXNwZW5kSWZOZWVkZWRDYWxsZWQoKSk7Cisg
ICAgICAgIGl0ZXItPmtleS0+c3RvcCgpOwogICAgIH0KICAgICBtX2l0ZXJhdGluZ0FjdGl2ZURP
TU9iamVjdHMgPSBmYWxzZTsKIApAQCAtMzgwLDcgKzM4MCw3IEBAIHZvaWQgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dDo6YWRqdXN0TWluaW11bVRpbWVySW50ZXJ2YWwoZG91YmxlIG9sZE1pbmltdW1U
aW1lckluCiB7CiAgICAgaWYgKG1pbmltdW1UaW1lckludGVydmFsKCkgIT0gb2xkTWluaW11bVRp
bWVySW50ZXJ2YWwpIHsKICAgICAgICAgZm9yIChUaW1lb3V0TWFwOjppdGVyYXRvciBpdGVyID0g
bV90aW1lb3V0cy5iZWdpbigpOyBpdGVyICE9IG1fdGltZW91dHMuZW5kKCk7ICsraXRlcikgewot
ICAgICAgICAgICAgRE9NVGltZXIqIHRpbWVyID0gaXRlci0+c2Vjb25kOworICAgICAgICAgICAg
RE9NVGltZXIqIHRpbWVyID0gaXRlci0+dmFsdWU7CiAgICAgICAgICAgICB0aW1lci0+YWRqdXN0
TWluaW11bVRpbWVySW50ZXJ2YWwob2xkTWluaW11bVRpbWVySW50ZXJ2YWwpOwogICAgICAgICB9
CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NlbGVjdG9yUXVlcnkuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZG9tL1NlbGVjdG9yUXVlcnkuY3BwCmluZGV4IDc4NjJhZWZjYzNh
YmE4ZTRiOTJjODQzMzJiNzRhOTYwM2NhZTcyMjUuLmVjYjVhMTYwZmIyNmZhYzRhN2QyNzE4MWEw
YzI0NGViZDA0Y2U0NTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TZWxlY3RvclF1
ZXJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2VsZWN0b3JRdWVyeS5jcHAKQEAgLTE2
OSw3ICsxNjksNyBAQCBTZWxlY3RvclF1ZXJ5KiBTZWxlY3RvclF1ZXJ5Q2FjaGU6OmFkZChjb25z
dCBBdG9taWNTdHJpbmcmIHNlbGVjdG9ycywgRG9jdW1lbnQqCiB7CiAgICAgSGFzaE1hcDxBdG9t
aWNTdHJpbmcsIE93blB0cjxTZWxlY3RvclF1ZXJ5PiA+OjppdGVyYXRvciBpdCA9IG1fZW50cmll
cy5maW5kKHNlbGVjdG9ycyk7CiAgICAgaWYgKGl0ICE9IG1fZW50cmllcy5lbmQoKSkKLSAgICAg
ICAgcmV0dXJuIGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIHJldHVybiBpdC0+dmFsdWUuZ2V0
KCk7CiAKICAgICBDU1NQYXJzZXIgcGFyc2VyKGRvY3VtZW50KTsKICAgICBDU1NTZWxlY3Rvckxp
c3Qgc2VsZWN0b3JMaXN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NwYWNlU3Bs
aXRTdHJpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1NwYWNlU3BsaXRTdHJpbmcuY3BwCmlu
ZGV4IDljY2U3ZDk1YjVlMTA0NDNjMDNlZGE1YjcyZjExMmM1NzA1MmU1MTIuLjFkYzFmYjBkZGUx
ZjAyM2YzZjhhNjUzYjIzYWMzZDg3MzhlOGMzNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9TcGFjZVNwbGl0U3RyaW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU3BhY2VT
cGxpdFN0cmluZy5jcHAKQEAgLTE1MCw3ICsxNTAsNyBAQCBTcGFjZVNwbGl0U3RyaW5nRGF0YTo6
flNwYWNlU3BsaXRTdHJpbmdEYXRhKCkKIAogUGFzc1JlZlB0cjxTcGFjZVNwbGl0U3RyaW5nRGF0
YT4gU3BhY2VTcGxpdFN0cmluZ0RhdGE6OmNyZWF0ZShjb25zdCBBdG9taWNTdHJpbmcmIHN0cmlu
ZykKIHsKLSAgICBTcGFjZVNwbGl0U3RyaW5nRGF0YSomIGRhdGEgPSBzaGFyZWREYXRhTWFwKCku
YWRkKHN0cmluZywgMCkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBTcGFjZVNwbGl0U3RyaW5nRGF0
YSomIGRhdGEgPSBzaGFyZWREYXRhTWFwKCkuYWRkKHN0cmluZywgMCkuaXRlcmF0b3ItPnZhbHVl
OwogICAgIGlmICghZGF0YSkgewogICAgICAgICBkYXRhID0gbmV3IFNwYWNlU3BsaXRTdHJpbmdE
YXRhKHN0cmluZyk7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihkYXRhKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9TdHlsZWRFbGVtZW50LmNwcAppbmRleCA5YWU2NzJmYTNkOWQzMjE4N2M2OWIzOWU0NjA2N2Rh
YzZjYTM4YjQ0Li4wMjJmZGE5MDcxNzA2YzI4OTRkNWM5MjFjNGNkMjM4NmYxOGU3OGMzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwCkBAIC0yOTksMTQgKzI5OSwxNCBAQCB2b2lk
IFN0eWxlZEVsZW1lbnQ6OnVwZGF0ZUF0dHJpYnV0ZVN0eWxlKCkKICAgICBQcmVzZW50YXRpb25B
dHRyaWJ1dGVDYWNoZTo6aXRlcmF0b3IgY2FjaGVJdGVyYXRvcjsKICAgICBpZiAoY2FjaGVIYXNo
KSB7CiAgICAgICAgIGNhY2hlSXRlcmF0b3IgPSBwcmVzZW50YXRpb25BdHRyaWJ1dGVDYWNoZSgp
LmFkZChjYWNoZUhhc2gsIG51bGxwdHIpLml0ZXJhdG9yOwotICAgICAgICBpZiAoY2FjaGVJdGVy
YXRvci0+c2Vjb25kICYmIGNhY2hlSXRlcmF0b3ItPnNlY29uZC0+a2V5ICE9IGNhY2hlS2V5KQor
ICAgICAgICBpZiAoY2FjaGVJdGVyYXRvci0+dmFsdWUgJiYgY2FjaGVJdGVyYXRvci0+dmFsdWUt
PmtleSAhPSBjYWNoZUtleSkKICAgICAgICAgICAgIGNhY2hlSGFzaCA9IDA7CiAgICAgfSBlbHNl
CiAgICAgICAgIGNhY2hlSXRlcmF0b3IgPSBwcmVzZW50YXRpb25BdHRyaWJ1dGVDYWNoZSgpLmVu
ZCgpOwogCiAgICAgUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IHN0eWxlOwotICAgIGlmIChjYWNo
ZUhhc2ggJiYgY2FjaGVJdGVyYXRvci0+c2Vjb25kKSB7Ci0gICAgICAgIHN0eWxlID0gY2FjaGVJ
dGVyYXRvci0+c2Vjb25kLT52YWx1ZTsKKyAgICBpZiAoY2FjaGVIYXNoICYmIGNhY2hlSXRlcmF0
b3ItPnZhbHVlKSB7CisgICAgICAgIHN0eWxlID0gY2FjaGVJdGVyYXRvci0+dmFsdWUtPnZhbHVl
OwogICAgICAgICBwcmVzZW50YXRpb25BdHRyaWJ1dGVDYWNoZUNsZWFuZXIoKS5kaWRIaXRQcmVz
ZW50YXRpb25BdHRyaWJ1dGVDYWNoZSgpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHN0eWxlID0g
U3R5bGVQcm9wZXJ0eVNldDo6Y3JlYXRlKGlzU1ZHRWxlbWVudCgpID8gU1ZHQXR0cmlidXRlTW9k
ZSA6IENTU1F1aXJrc01vZGUpOwpAQCAtMzIwLDcgKzMyMCw3IEBAIHZvaWQgU3R5bGVkRWxlbWVu
dDo6dXBkYXRlQXR0cmlidXRlU3R5bGUoKQogCiAgICAgYXR0cmlidXRlRGF0YSgpLT5zZXRBdHRy
aWJ1dGVTdHlsZShzdHlsZS0+aXNFbXB0eSgpID8gMCA6IHN0eWxlKTsKIAotICAgIGlmICghY2Fj
aGVIYXNoIHx8IGNhY2hlSXRlcmF0b3ItPnNlY29uZCkKKyAgICBpZiAoIWNhY2hlSGFzaCB8fCBj
YWNoZUl0ZXJhdG9yLT52YWx1ZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgT3duUHRyPFByZXNl
bnRhdGlvbkF0dHJpYnV0ZUNhY2hlRW50cnk+IG5ld0VudHJ5ID0gYWRvcHRQdHIobmV3IFByZXNl
bnRhdGlvbkF0dHJpYnV0ZUNhY2hlRW50cnkpOwpAQCAtMzMzLDcgKzMzMyw3IEBAIHZvaWQgU3R5
bGVkRWxlbWVudDo6dXBkYXRlQXR0cmlidXRlU3R5bGUoKQogICAgICAgICBwcmVzZW50YXRpb25B
dHRyaWJ1dGVDYWNoZSgpLmNsZWFyKCk7CiAgICAgICAgIHByZXNlbnRhdGlvbkF0dHJpYnV0ZUNh
Y2hlKCkuc2V0KGNhY2hlSGFzaCwgbmV3RW50cnkucmVsZWFzZSgpKTsKICAgICB9IGVsc2UKLSAg
ICAgICAgY2FjaGVJdGVyYXRvci0+c2Vjb25kID0gbmV3RW50cnkucmVsZWFzZSgpOworICAgICAg
ICBjYWNoZUl0ZXJhdG9yLT52YWx1ZSA9IG5ld0VudHJ5LnJlbGVhc2UoKTsKIH0KIAogdm9pZCBT
dHlsZWRFbGVtZW50OjphZGRQcm9wZXJ0eVRvQXR0cmlidXRlU3R5bGUoU3R5bGVQcm9wZXJ0eVNl
dCogc3R5bGUsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgaW50IGlkZW50aWZpZXIpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9BbHRlcm5hdGl2ZVRleHRVSUNvbnRy
b2xsZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9BbHRlcm5hdGl2ZVRleHRVSUNv
bnRyb2xsZXIubW0KaW5kZXggOTk5MTZjMWUwMGY0NDkyMmFhN2ViYzZjZmIwMGZjNDk3NjhkNDQz
Yi4uNmNhNWQ1ZjAyOWM5OTE2OTMzYjgyODlkMTQ1ZjBkMTIxYzZkNTY0NiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvQWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0FsdGVybmF0aXZlVGV4dFVJQ29udHJv
bGxlci5tbQpAQCAtNTAsNyArNTAsNyBAQCBOU1RleHRBbHRlcm5hdGl2ZXMqIEFsdGVybmF0aXZl
VGV4dFVJQ29udHJvbGxlcjo6QWxlcm5hdGl2ZVRleHRDb250ZXh0Q29udHJvbGxlcgogICAgIEhh
c2hNYXBUeXBlOjpjb25zdF9pdGVyYXRvciBpdHIgPSBtX2FsdGVybmF0aXZlc09iamVjdE1hcC5m
aW5kKGNvbnRleHQpOwogICAgIGlmIChpdHIgPT0gbV9hbHRlcm5hdGl2ZXNPYmplY3RNYXAuZW5k
KCkpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIHJldHVybiBpdHItPnNlY29uZC5nZXQoKTsK
KyAgICByZXR1cm4gaXRyLT52YWx1ZS5nZXQoKTsKIH0KIAogdm9pZCBBbHRlcm5hdGl2ZVRleHRV
SUNvbnRyb2xsZXI6OkFsZXJuYXRpdmVUZXh0Q29udGV4dENvbnRyb2xsZXI6OnJlbW92ZUFsdGVy
bmF0aXZlc0ZvckNvbnRleHQodWludDY0X3QgY29udGV4dCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvRm9ybUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9Gb3Jt
Q29udHJvbGxlci5jcHAKaW5kZXggNWUzOWZlMjI5MzliNzQ5NDBlYzU0NDk0MTY4ZWQ5YzUyODli
Yzk3ZC4uOTZlNmE5YzJhOGFmYzkxMGFiODA1Y2ZhOTk0OGY3MTBhZjE2ZGFlYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9Gb3JtQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9Gb3JtQ29udHJvbGxlci5jcHAKQEAgLTIyNCw4ICsyMjQsOCBAQCB2b2lkIFNh
dmVkRm9ybVN0YXRlOjpzZXJpYWxpemVUbyhWZWN0b3I8U3RyaW5nPiYgc3RhdGVWZWN0b3IpIGNv
bnN0CiB7CiAgICAgc3RhdGVWZWN0b3IuYXBwZW5kKFN0cmluZzo6bnVtYmVyKG1fY29udHJvbFN0
YXRlQ291bnQpKTsKICAgICBmb3IgKEZvcm1FbGVtZW50U3RhdGVNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbV9zdGF0ZUZvck5ld0Zvcm1FbGVtZW50cy5iZWdpbigpOyBpdCAhPSBtX3N0YXRlRm9y
TmV3Rm9ybUVsZW1lbnRzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IEZvcm1FbGVtZW50
S2V5JiBrZXkgPSBpdC0+Zmlyc3Q7Ci0gICAgICAgIGNvbnN0IERlcXVlPEZvcm1Db250cm9sU3Rh
dGU+JiBxdWV1ZSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIGNvbnN0IEZvcm1FbGVtZW50S2V5JiBr
ZXkgPSBpdC0+a2V5OworICAgICAgICBjb25zdCBEZXF1ZTxGb3JtQ29udHJvbFN0YXRlPiYgcXVl
dWUgPSBpdC0+dmFsdWU7CiAgICAgICAgIGZvciAoRGVxdWU8Rm9ybUNvbnRyb2xTdGF0ZT46OmNv
bnN0X2l0ZXJhdG9yIHF1ZUl0ZXJhdG9yID0gcXVldWUuYmVnaW4oKTsgcXVlSXRlcmF0b3IgIT0g
cXVldWUuZW5kKCk7ICsrcXVlSXRlcmF0b3IpIHsKICAgICAgICAgICAgIHN0YXRlVmVjdG9yLmFw
cGVuZChrZXkubmFtZSgpKTsKICAgICAgICAgICAgIHN0YXRlVmVjdG9yLmFwcGVuZChrZXkudHlw
ZSgpKTsKQEAgLTIzOSw3ICsyMzksNyBAQCB2b2lkIFNhdmVkRm9ybVN0YXRlOjphcHBlbmRDb250
cm9sU3RhdGUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBjb25zdCBBdG9taWNTdAogICAgIEZv
cm1FbGVtZW50S2V5IGtleShuYW1lLmltcGwoKSwgdHlwZS5pbXBsKCkpOwogICAgIEZvcm1FbGVt
ZW50U3RhdGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zdGF0ZUZvck5ld0Zvcm1FbGVtZW50cy5maW5k
KGtleSk7CiAgICAgaWYgKGl0ICE9IG1fc3RhdGVGb3JOZXdGb3JtRWxlbWVudHMuZW5kKCkpCi0g
ICAgICAgIGl0LT5zZWNvbmQuYXBwZW5kKHN0YXRlKTsKKyAgICAgICAgaXQtPnZhbHVlLmFwcGVu
ZChzdGF0ZSk7CiAgICAgZWxzZSB7CiAgICAgICAgIERlcXVlPEZvcm1Db250cm9sU3RhdGU+IHN0
YXRlTGlzdDsKICAgICAgICAgc3RhdGVMaXN0LmFwcGVuZChzdGF0ZSk7CkBAIC0yNTUsMTAgKzI1
NSwxMCBAQCBGb3JtQ29udHJvbFN0YXRlIFNhdmVkRm9ybVN0YXRlOjp0YWtlQ29udHJvbFN0YXRl
KGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgY29ucwogICAgIEZvcm1FbGVtZW50U3RhdGVNYXA6
Oml0ZXJhdG9yIGl0ID0gbV9zdGF0ZUZvck5ld0Zvcm1FbGVtZW50cy5maW5kKEZvcm1FbGVtZW50
S2V5KG5hbWUuaW1wbCgpLCB0eXBlLmltcGwoKSkpOwogICAgIGlmIChpdCA9PSBtX3N0YXRlRm9y
TmV3Rm9ybUVsZW1lbnRzLmVuZCgpKQogICAgICAgICByZXR1cm4gRm9ybUNvbnRyb2xTdGF0ZSgp
OwotICAgIEFTU0VSVChpdC0+c2Vjb25kLnNpemUoKSk7Ci0gICAgRm9ybUNvbnRyb2xTdGF0ZSBz
dGF0ZSA9IGl0LT5zZWNvbmQudGFrZUZpcnN0KCk7CisgICAgQVNTRVJUKGl0LT52YWx1ZS5zaXpl
KCkpOworICAgIEZvcm1Db250cm9sU3RhdGUgc3RhdGUgPSBpdC0+dmFsdWUudGFrZUZpcnN0KCk7
CiAgICAgbV9jb250cm9sU3RhdGVDb3VudC0tOwotICAgIGlmICghaXQtPnNlY29uZC5zaXplKCkp
CisgICAgaWYgKCFpdC0+dmFsdWUuc2l6ZSgpKQogICAgICAgICBtX3N0YXRlRm9yTmV3Rm9ybUVs
ZW1lbnRzLnJlbW92ZShpdCk7CiAgICAgcmV0dXJuIHN0YXRlOwogfQpAQCAtMzI4LDEyICszMjgs
MTIgQEAgQXRvbWljU3RyaW5nIEZvcm1LZXlHZW5lcmF0b3I6OmZvcm1LZXkoY29uc3QgSFRNTEZv
cm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZSYgY28KICAgICB9CiAgICAgRm9ybVRvS2V5TWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IG1fZm9ybVRvS2V5TWFwLmZpbmQoZm9ybSk7CiAgICAgaWYgKGl0
ICE9IG1fZm9ybVRvS2V5TWFwLmVuZCgpKQotICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAg
ICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKIAogICAgIFN0cmluZyBzaWduYXR1cmUgPSBmb3JtU2ln
bmF0dXJlKCpmb3JtKTsKICAgICBBU1NFUlQoIXNpZ25hdHVyZS5pc051bGwoKSk7CiAgICAgRm9y
bVNpZ25hdHVyZVRvTmV4dEluZGV4TWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9mb3JtU2lnbmF0
dXJlVG9OZXh0SW5kZXhNYXAuYWRkKHNpZ25hdHVyZSwgMCk7Ci0gICAgdW5zaWduZWQgbmV4dElu
ZGV4ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQrKzsKKyAgICB1bnNpZ25lZCBuZXh0SW5kZXgg
PSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlKys7CiAKICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7
CiAgICAgYnVpbGRlci5hcHBlbmQoc2lnbmF0dXJlKTsKQEAgLTM4NCw4ICszODQsOCBAQCBQYXNz
T3duUHRyPEZvcm1Db250cm9sbGVyOjpTYXZlZEZvcm1TdGF0ZU1hcD4gRm9ybUNvbnRyb2xsZXI6
OmNyZWF0ZVNhdmVkRm9ybVN0YQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIFNhdmVk
Rm9ybVN0YXRlTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gc3RhdGVNYXAtPmFkZChrZXlHZW5lcmF0
b3ItPmZvcm1LZXkoKmNvbnRyb2wpLmltcGwoKSwgbnVsbHB0cik7CiAgICAgICAgIGlmIChyZXN1
bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gU2F2
ZWRGb3JtU3RhdGU6OmNyZWF0ZSgpOwotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZC0+
YXBwZW5kQ29udHJvbFN0YXRlKGNvbnRyb2wtPm5hbWUoKSwgY29udHJvbC0+dHlwZSgpLCBjb250
cm9sLT5zYXZlRm9ybUNvbnRyb2xTdGF0ZSgpKTsKKyAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRv
ci0+dmFsdWUgPSBTYXZlZEZvcm1TdGF0ZTo6Y3JlYXRlKCk7CisgICAgICAgIHJlc3VsdC5pdGVy
YXRvci0+dmFsdWUtPmFwcGVuZENvbnRyb2xTdGF0ZShjb250cm9sLT5uYW1lKCksIGNvbnRyb2wt
PnR5cGUoKSwgY29udHJvbC0+c2F2ZUZvcm1Db250cm9sU3RhdGUoKSk7CiAgICAgfQogICAgIHJl
dHVybiBzdGF0ZU1hcC5yZWxlYXNlKCk7CiB9CkBAIC0zOTcsOCArMzk3LDggQEAgVmVjdG9yPFN0
cmluZz4gRm9ybUNvbnRyb2xsZXI6OmZvcm1FbGVtZW50c1N0YXRlKCkgY29uc3QKICAgICBzdGF0
ZVZlY3Rvci5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fZm9ybUVsZW1lbnRzV2l0aFN0YXRlLnNp
emUoKSAqIDQpOwogICAgIHN0YXRlVmVjdG9yLmFwcGVuZChmb3JtU3RhdGVTaWduYXR1cmUoKSk7
CiAgICAgZm9yIChTYXZlZEZvcm1TdGF0ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBzdGF0ZU1h
cC0+YmVnaW4oKTsgaXQgIT0gc3RhdGVNYXAtPmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIHN0YXRl
VmVjdG9yLmFwcGVuZChpdC0+Zmlyc3QuZ2V0KCkpOwotICAgICAgICBpdC0+c2Vjb25kLT5zZXJp
YWxpemVUbyhzdGF0ZVZlY3Rvcik7CisgICAgICAgIHN0YXRlVmVjdG9yLmFwcGVuZChpdC0+a2V5
LmdldCgpKTsKKyAgICAgICAgaXQtPnZhbHVlLT5zZXJpYWxpemVUbyhzdGF0ZVZlY3Rvcik7CiAg
ICAgfQogICAgIGJvb2wgaGFzT25seVNpZ25hdHVyZSA9IHN0YXRlVmVjdG9yLnNpemUoKSA9PSAx
OwogICAgIGlmIChoYXNPbmx5U2lnbmF0dXJlKQpAQCAtNDM2LDggKzQzNiw4IEBAIEZvcm1Db250
cm9sU3RhdGUgRm9ybUNvbnRyb2xsZXI6OnRha2VTdGF0ZUZvckZvcm1FbGVtZW50KGNvbnN0IEhU
TUxGb3JtQ29udHJvbEVsCiAgICAgU2F2ZWRGb3JtU3RhdGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9z
YXZlZEZvcm1TdGF0ZU1hcC5maW5kKG1fZm9ybUtleUdlbmVyYXRvci0+Zm9ybUtleShjb250cm9s
KS5pbXBsKCkpOwogICAgIGlmIChpdCA9PSBtX3NhdmVkRm9ybVN0YXRlTWFwLmVuZCgpKQogICAg
ICAgICByZXR1cm4gRm9ybUNvbnRyb2xTdGF0ZSgpOwotICAgIEZvcm1Db250cm9sU3RhdGUgc3Rh
dGUgPSBpdC0+c2Vjb25kLT50YWtlQ29udHJvbFN0YXRlKGNvbnRyb2wubmFtZSgpLCBjb250cm9s
LnR5cGUoKSk7Ci0gICAgaWYgKGl0LT5zZWNvbmQtPmlzRW1wdHkoKSkKKyAgICBGb3JtQ29udHJv
bFN0YXRlIHN0YXRlID0gaXQtPnZhbHVlLT50YWtlQ29udHJvbFN0YXRlKGNvbnRyb2wubmFtZSgp
LCBjb250cm9sLnR5cGUoKSk7CisgICAgaWYgKGl0LT52YWx1ZS0+aXNFbXB0eSgpKQogICAgICAg
ICBtX3NhdmVkRm9ybVN0YXRlTWFwLnJlbW92ZShpdCk7CiAgICAgcmV0dXJuIHN0YXRlOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmNwcAppbmRleCA5MWUxOGEzZmJkZjJkODdh
NmUwNzk0ZTdjYjJiNzFiNjRmOGFiOWM1Li4xZWNiNjQ0Y2ExYjYzMDgwN2FkNjZhOTc0NGUzZGYz
MzE0ZmVhZjQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9u
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmNwcApAQCAtNTU5
LDcgKzU1OSw3IEBAIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IEhUTUxDb2xsZWN0aW9uOjp0YWdzKGNv
bnN0IFN0cmluZyYgbmFtZSkKIAogdm9pZCBIVE1MQ29sbGVjdGlvbkNhY2hlQmFzZTo6YXBwZW5k
KE5vZGVDYWNoZU1hcCYgbWFwLCBjb25zdCBBdG9taWNTdHJpbmcmIGtleSwgRWxlbWVudCogZWxl
bWVudCkKIHsKLSAgICBPd25QdHI8VmVjdG9yPEVsZW1lbnQqPiA+JiB2ZWN0b3IgPSBtYXAuYWRk
KGtleS5pbXBsKCksIG51bGxwdHIpLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgT3duUHRyPFZlY3Rv
cjxFbGVtZW50Kj4gPiYgdmVjdG9yID0gbWFwLmFkZChrZXkuaW1wbCgpLCBudWxscHRyKS5pdGVy
YXRvci0+dmFsdWU7CiAgICAgaWYgKCF2ZWN0b3IpCiAgICAgICAgIHZlY3RvciA9IGFkb3B0UHRy
KG5ldyBWZWN0b3I8RWxlbWVudCo+KTsKICAgICB2ZWN0b3ItPmFwcGVuZChlbGVtZW50KTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHAKaW5kZXgg
YjkxYWU1MDZlY2Y3OWUzZDYyZmUxN2U0Mzc3OTkzZmQzYzE0NmMxZC4uZDA4MWUyNDkwNWEwYWQ1
OWU3NGU1ZGMwNWM3NDUxMDg2YTY4NGY0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHAKQEAgLTMyNyw3ICszMjcsNyBAQCBXZWJHTFNoYXJl
ZE9iamVjdCogV2ViR0xGcmFtZWJ1ZmZlcjo6Z2V0QXR0YWNobWVudE9iamVjdChHQzNEZW51bSBh
dHRhY2htZW50KSBjbwogV2ViR0xGcmFtZWJ1ZmZlcjo6V2ViR0xBdHRhY2htZW50KiBXZWJHTEZy
YW1lYnVmZmVyOjpnZXRBdHRhY2htZW50KEdDM0RlbnVtIGF0dGFjaG1lbnQpIGNvbnN0CiB7CiAg
ICAgY29uc3QgQXR0YWNobWVudE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2F0dGFjaG1lbnRz
LmZpbmQoYXR0YWNobWVudCk7Ci0gICAgcmV0dXJuIChpdCAhPSBtX2F0dGFjaG1lbnRzLmVuZCgp
KSA/IGl0LT5zZWNvbmQuZ2V0KCkgOiAwOworICAgIHJldHVybiAoaXQgIT0gbV9hdHRhY2htZW50
cy5lbmQoKSkgPyBpdC0+dmFsdWUuZ2V0KCkgOiAwOwogfQogCiB2b2lkIFdlYkdMRnJhbWVidWZm
ZXI6OnJlbW92ZUF0dGFjaG1lbnRGcm9tQm91bmRGcmFtZWJ1ZmZlcihHQzNEZW51bSBhdHRhY2ht
ZW50KQpAQCAtMzY3LDkgKzM2Nyw5IEBAIHZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6cmVtb3ZlQXR0
YWNobWVudEZyb21Cb3VuZEZyYW1lYnVmZmVyKFdlYkdMU2hhcmVkT2JqZWN0KiBhCiAgICAgd2hp
bGUgKGNoZWNrTW9yZSkgewogICAgICAgICBjaGVja01vcmUgPSBmYWxzZTsKICAgICAgICAgZm9y
IChBdHRhY2htZW50TWFwOjppdGVyYXRvciBpdCA9IG1fYXR0YWNobWVudHMuYmVnaW4oKTsgaXQg
IT0gbV9hdHRhY2htZW50cy5lbmQoKTsgKytpdCkgewotICAgICAgICAgICAgV2ViR0xBdHRhY2ht
ZW50KiBhdHRhY2htZW50T2JqZWN0ID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgIFdl
YkdMQXR0YWNobWVudCogYXR0YWNobWVudE9iamVjdCA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAg
ICAgICAgIGlmIChhdHRhY2htZW50T2JqZWN0LT5pc1NoYXJlZE9iamVjdChhdHRhY2htZW50KSkg
ewotICAgICAgICAgICAgICAgIEdDM0RlbnVtIGF0dGFjaG1lbnRUeXBlID0gaXQtPmZpcnN0Owor
ICAgICAgICAgICAgICAgIEdDM0RlbnVtIGF0dGFjaG1lbnRUeXBlID0gaXQtPmtleTsKICAgICAg
ICAgICAgICAgICBhdHRhY2htZW50T2JqZWN0LT51bmF0dGFjaChjb250ZXh0KCktPmdyYXBoaWNz
Q29udGV4dDNEKCksIGF0dGFjaG1lbnRUeXBlKTsKICAgICAgICAgICAgICAgICByZW1vdmVBdHRh
Y2htZW50RnJvbUJvdW5kRnJhbWVidWZmZXIoYXR0YWNobWVudFR5cGUpOwogICAgICAgICAgICAg
ICAgIGNoZWNrTW9yZSA9IHRydWU7CkBAIC00MTksOCArNDE5LDggQEAgR0MzRGVudW0gV2ViR0xG
cmFtZWJ1ZmZlcjo6Y2hlY2tTdGF0dXMoY29uc3QgY2hhcioqIHJlYXNvbikgY29uc3QKICAgICBi
b29sIGhhdmVTdGVuY2lsID0gZmFsc2U7CiAgICAgYm9vbCBoYXZlRGVwdGhTdGVuY2lsID0gZmFs
c2U7CiAgICAgZm9yIChBdHRhY2htZW50TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fYXR0YWNo
bWVudHMuYmVnaW4oKTsgaXQgIT0gbV9hdHRhY2htZW50cy5lbmQoKTsgKytpdCkgewotICAgICAg
ICBXZWJHTEF0dGFjaG1lbnQqIGF0dGFjaG1lbnQgPSBpdC0+c2Vjb25kLmdldCgpOwotICAgICAg
ICBpZiAoIWlzQXR0YWNobWVudENvbXBsZXRlKGF0dGFjaG1lbnQsIGl0LT5maXJzdCwgcmVhc29u
KSkKKyAgICAgICAgV2ViR0xBdHRhY2htZW50KiBhdHRhY2htZW50ID0gaXQtPnZhbHVlLmdldCgp
OworICAgICAgICBpZiAoIWlzQXR0YWNobWVudENvbXBsZXRlKGF0dGFjaG1lbnQsIGl0LT5rZXks
IHJlYXNvbikpCiAgICAgICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVG
RkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKICAgICAgICAgaWYgKCFhdHRhY2htZW50LT5pc1Zh
bGlkKCkpIHsKICAgICAgICAgICAgICpyZWFzb24gPSAiYXR0YWNobWVudCBpcyBub3QgdmFsaWQi
OwpAQCAtNDMwLDcgKzQzMCw3IEBAIEdDM0RlbnVtIFdlYkdMRnJhbWVidWZmZXI6OmNoZWNrU3Rh
dHVzKGNvbnN0IGNoYXIqKiByZWFzb24pIGNvbnN0CiAgICAgICAgICAgICAqcmVhc29uID0gImF0
dGFjaG1lbnQgaXMgYW4gdW5zdXBwb3J0ZWQgZm9ybWF0IjsKICAgICAgICAgICAgIHJldHVybiBH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOwogICAg
ICAgICB9Ci0gICAgICAgIHN3aXRjaCAoaXQtPmZpcnN0KSB7CisgICAgICAgIHN3aXRjaCAoaXQt
PmtleSkgewogICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5U
OgogICAgICAgICAgICAgaGF2ZURlcHRoID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAt
NDg4LDcgKzQ4OCw3IEBAIGJvb2wgV2ViR0xGcmFtZWJ1ZmZlcjo6aGFzU3RlbmNpbEJ1ZmZlcigp
IGNvbnN0CiB2b2lkIFdlYkdMRnJhbWVidWZmZXI6OmRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQzZCwgUGxhdGZvcm0zRE9iamVjdCBvYmplY3QpCiB7CiAgICAgZm9y
IChBdHRhY2htZW50TWFwOjppdGVyYXRvciBpdCA9IG1fYXR0YWNobWVudHMuYmVnaW4oKTsgaXQg
IT0gbV9hdHRhY2htZW50cy5lbmQoKTsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+b25EZXRh
Y2hlZChjb250ZXh0M2QpOworICAgICAgICBpdC0+dmFsdWUtPm9uRGV0YWNoZWQoY29udGV4dDNk
KTsKIAogICAgIGNvbnRleHQzZC0+ZGVsZXRlRnJhbWVidWZmZXIob2JqZWN0KTsKIH0KQEAgLTQ5
OSw4ICs0OTksOCBAQCBib29sIFdlYkdMRnJhbWVidWZmZXI6OmluaXRpYWxpemVBdHRhY2htZW50
cyhHcmFwaGljc0NvbnRleHQzRCogZzNkLCBjb25zdCBjaGFyKgogICAgIEdDM0RiaXRmaWVsZCBt
YXNrID0gMDsKIAogICAgIGZvciAoQXR0YWNobWVudE1hcDo6aXRlcmF0b3IgaXQgPSBtX2F0dGFj
aG1lbnRzLmJlZ2luKCk7IGl0ICE9IG1fYXR0YWNobWVudHMuZW5kKCk7ICsraXQpIHsKLSAgICAg
ICAgR0MzRGVudW0gYXR0YWNobWVudFR5cGUgPSBpdC0+Zmlyc3Q7Ci0gICAgICAgIFdlYkdMQXR0
YWNobWVudCogYXR0YWNobWVudCA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIEdDM0RlbnVt
IGF0dGFjaG1lbnRUeXBlID0gaXQtPmtleTsKKyAgICAgICAgV2ViR0xBdHRhY2htZW50KiBhdHRh
Y2htZW50ID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICBpZiAoIWF0dGFjaG1lbnQtPmlzSW5p
dGlhbGl6ZWQoKSkKICAgICAgICAgICAgbWFzayB8PSBHcmFwaGljc0NvbnRleHQzRDo6Z2V0Q2xl
YXJCaXRzQnlBdHRhY2htZW50VHlwZShhdHRhY2htZW50VHlwZSk7CiAgICAgfQpAQCAtNTcxLDgg
KzU3MSw4IEBAIGJvb2wgV2ViR0xGcmFtZWJ1ZmZlcjo6aW5pdGlhbGl6ZUF0dGFjaG1lbnRzKEdy
YXBoaWNzQ29udGV4dDNEKiBnM2QsIGNvbnN0IGNoYXIqCiAgICAgICAgIGczZC0+ZGlzYWJsZShH
cmFwaGljc0NvbnRleHQzRDo6RElUSEVSKTsKIAogICAgIGZvciAoQXR0YWNobWVudE1hcDo6aXRl
cmF0b3IgaXQgPSBtX2F0dGFjaG1lbnRzLmJlZ2luKCk7IGl0ICE9IG1fYXR0YWNobWVudHMuZW5k
KCk7ICsraXQpIHsKLSAgICAgICAgR0MzRGVudW0gYXR0YWNobWVudFR5cGUgPSBpdC0+Zmlyc3Q7
Ci0gICAgICAgIFdlYkdMQXR0YWNobWVudCogYXR0YWNobWVudCA9IGl0LT5zZWNvbmQuZ2V0KCk7
CisgICAgICAgIEdDM0RlbnVtIGF0dGFjaG1lbnRUeXBlID0gaXQtPmtleTsKKyAgICAgICAgV2Vi
R0xBdHRhY2htZW50KiBhdHRhY2htZW50ID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICBHQzNE
Yml0ZmllbGQgYml0cyA9IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRDbGVhckJpdHNCeUF0dGFjaG1l
bnRUeXBlKGF0dGFjaG1lbnRUeXBlKTsKICAgICAgICAgaWYgKGJpdHMgJiBtYXNrKQogICAgICAg
ICAgICAgYXR0YWNobWVudC0+c2V0SW5pdGlhbGl6ZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5IGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKaW5kZXggZWMzODEyYjE2ZmI3
MjhmZTE3ZjBlYTEyNjc2ZDgyZDhjYjE5YzllYi4uYTllZWJjZTczNGM5MjIyNzU5NDBjYTkyMTRl
ZjQ4YTQzOTIxYWRhYyAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVH
ZW5lcmF0b3JJbnNwZWN0b3IucHkKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVH
ZW5lcmF0b3JJbnNwZWN0b3IucHkKQEAgLTEzMzYsNyArMTMzNiw3IEBAIGNsYXNzIFR5cGVCaW5k
aW5nczoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jf
d3JpdGVyLm5ld2xpbmUoIiAgICAgICAgSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciAlcztcbiIg
JSBpdF9uYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlk
YXRvcl93cml0ZXIubmV3bGluZSgiICAgICAgICAlcyA9IG9iamVjdC0+ZmluZChcIiVzXCIpO1xu
IiAlIChpdF9uYW1lLCBwcm9wX2RhdGEucFsibmFtZSJdKSkKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgQVNT
RVJUKCVzICE9IG9iamVjdC0+ZW5kKCkpO1xuIiAlIGl0X25hbWUpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgICAg
ICVzKCVzLT5zZWNvbmQuZ2V0KCkpO1xuIiAlIChwcm9wX2RhdGEucGFyYW1fdHlwZV9iaW5kaW5n
LmdldF92YWxpZGF0b3JfY2FsbF90ZXh0KCksIGl0X25hbWUpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgICAgICAl
cyglcy0+dmFsdWUuZ2V0KCkpO1xuIiAlIChwcm9wX2RhdGEucGFyYW1fdHlwZV9iaW5kaW5nLmdl
dF92YWxpZGF0b3JfY2FsbF90ZXh0KCksIGl0X25hbWUpKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgIH1cbiIpCiAK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNsb3NlZF9maWVsZF9zZXQ6
CkBAIC0xMzQ4LDcgKzEzNDgsNyBAQCBjbGFzcyBUeXBlQmluZGluZ3M6CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAg
ICAgIEluc3BlY3Rvck9iamVjdDo6aXRlcmF0b3IgJXM7XG4iICUgaXRfbmFtZSkKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUo
IiAgICAgICAgJXMgPSBvYmplY3QtPmZpbmQoXCIlc1wiKTtcbiIgJSAoaXRfbmFtZSwgcHJvcF9k
YXRhLnBbIm5hbWUiXSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgICAgIGlmICglcyAhPSBvYmplY3QtPmVuZCgp
KSB7XG4iICUgaXRfbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgICAgICVzKCVzLT5zZWNvbmQuZ2V0
KCkpO1xuIiAlIChwcm9wX2RhdGEucGFyYW1fdHlwZV9iaW5kaW5nLmdldF92YWxpZGF0b3JfY2Fs
bF90ZXh0KCksIGl0X25hbWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgICAgICAgICAgJXMoJXMtPnZhbHVlLmdl
dCgpKTtcbiIgJSAocHJvcF9kYXRhLnBhcmFtX3R5cGVfYmluZGluZy5nZXRfdmFsaWRhdG9yX2Nh
bGxfdGV4dCgpLCBpdF9uYW1lKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiBjbG9zZWRfZmllbGRfc2V0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgICAgICsrZm91
bmRQcm9wZXJ0aWVzQ291bnQ7XG4iKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgICAgICB9XG4iKQpAQCAtMjAyMSw3
ICsyMDIxLDcgQEAgJG1lc3NhZ2VIYW5kbGVycwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgKCgqdGhpcykuKml0LT5zZWNvbmQpKGNhbGxJZCwgbWVzc2FnZU9iamVjdC5nZXQoKSk7Cisg
ICAgKCgqdGhpcykuKml0LT52YWx1ZSkoY2FsbElkLCBtZXNzYWdlT2JqZWN0LmdldCgpKTsKIH0K
IAogdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OnNlbmRSZXNwb25zZShsb25n
IGNhbGxJZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCwgY29uc3QgY2hhciog
Y29tbWFuZE5hbWUsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzLCBF
cnJvclN0cmluZyBpbnZvY2F0aW9uRXJyb3IpCkBAIC0yMTA1LDcgKzIxMDUsNyBAQCBSIEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6Z2V0UHJvcGVydHlWYWx1ZUltcGwoSW5zcGVjdG9y
T2JqZWN0KiBvYmplY3QsCiAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICB9CiAKLSAgICBpZiAo
IWFzX21ldGhvZCh2YWx1ZUl0ZXJhdG9yLT5zZWNvbmQuZ2V0KCksICZ2YWx1ZSkpCisgICAgaWYg
KCFhc19tZXRob2QodmFsdWVJdGVyYXRvci0+dmFsdWUuZ2V0KCksICZ2YWx1ZSkpCiAgICAgICAg
IHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJQYXJhbWV0ZXIgJyVz
JyBoYXMgd3JvbmcgdHlwZS4gSXQgbXVzdCBiZSAnJXMnLiIsIG5hbWUudXRmOCgpLmRhdGEoKSwg
dHlwZV9uYW1lKSk7CiAgICAgZWxzZQogICAgICAgICBpZiAodmFsdWVGb3VuZCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01QYXRjaFN1cHBvcnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5jcHAKaW5kZXggYzAzZGNlNDcxNGRm
MTJjYTU1ZDU4ZWJhYjJiODk5YTJkYzcxMWNlNS4uOGU2YzE4MDBkMzUyODI2NGU1MzEzNGVkOGRj
NjFiODNlZjg4Yjk1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBh
dGNoU3VwcG9ydC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3Vw
cG9ydC5jcHAKQEAgLTIzNywyNCArMjM3LDI0IEBAIERPTVBhdGNoU3VwcG9ydDo6ZGlmZihjb25z
dCBWZWN0b3I8T3duUHRyPERpZ2VzdD4gPiYgb2xkTGlzdCwgY29uc3QgVmVjdG9yPE93blB0CiAK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5ld0xpc3Quc2l6ZSgpOyArK2kpIHsKICAgICAg
ICAgRGlmZlRhYmxlOjppdGVyYXRvciBpdCA9IG5ld1RhYmxlLmFkZChuZXdMaXN0W2ldLT5tX3No
YTEsIFZlY3RvcjxzaXplX3Q+KCkpLml0ZXJhdG9yOwotICAgICAgICBpdC0+c2Vjb25kLmFwcGVu
ZChpKTsKKyAgICAgICAgaXQtPnZhbHVlLmFwcGVuZChpKTsKICAgICB9CiAKICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG9sZExpc3Quc2l6ZSgpOyArK2kpIHsKICAgICAgICAgRGlmZlRhYmxl
OjppdGVyYXRvciBpdCA9IG9sZFRhYmxlLmFkZChvbGRMaXN0W2ldLT5tX3NoYTEsIFZlY3Rvcjxz
aXplX3Q+KCkpLml0ZXJhdG9yOwotICAgICAgICBpdC0+c2Vjb25kLmFwcGVuZChpKTsKKyAgICAg
ICAgaXQtPnZhbHVlLmFwcGVuZChpKTsKICAgICB9CiAKICAgICBmb3IgKERpZmZUYWJsZTo6aXRl
cmF0b3IgbmV3SXQgPSBuZXdUYWJsZS5iZWdpbigpOyBuZXdJdCAhPSBuZXdUYWJsZS5lbmQoKTsg
KytuZXdJdCkgewotICAgICAgICBpZiAobmV3SXQtPnNlY29uZC5zaXplKCkgIT0gMSkKKyAgICAg
ICAgaWYgKG5ld0l0LT52YWx1ZS5zaXplKCkgIT0gMSkKICAgICAgICAgICAgIGNvbnRpbnVlOwog
Ci0gICAgICAgIERpZmZUYWJsZTo6aXRlcmF0b3Igb2xkSXQgPSBvbGRUYWJsZS5maW5kKG5ld0l0
LT5maXJzdCk7Ci0gICAgICAgIGlmIChvbGRJdCA9PSBvbGRUYWJsZS5lbmQoKSB8fCBvbGRJdC0+
c2Vjb25kLnNpemUoKSAhPSAxKQorICAgICAgICBEaWZmVGFibGU6Oml0ZXJhdG9yIG9sZEl0ID0g
b2xkVGFibGUuZmluZChuZXdJdC0+a2V5KTsKKyAgICAgICAgaWYgKG9sZEl0ID09IG9sZFRhYmxl
LmVuZCgpIHx8IG9sZEl0LT52YWx1ZS5zaXplKCkgIT0gMSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogCi0gICAgICAgIG5ld01hcFtuZXdJdC0+c2Vjb25kWzBdXSA9IG1ha2VfcGFpcihuZXdMaXN0
W25ld0l0LT5zZWNvbmRbMF1dLmdldCgpLCBvbGRJdC0+c2Vjb25kWzBdKTsKLSAgICAgICAgb2xk
TWFwW29sZEl0LT5zZWNvbmRbMF1dID0gbWFrZV9wYWlyKG9sZExpc3Rbb2xkSXQtPnNlY29uZFsw
XV0uZ2V0KCksIG5ld0l0LT5zZWNvbmRbMF0pOworICAgICAgICBuZXdNYXBbbmV3SXQtPnZhbHVl
WzBdXSA9IG1ha2VfcGFpcihuZXdMaXN0W25ld0l0LT52YWx1ZVswXV0uZ2V0KCksIG9sZEl0LT52
YWx1ZVswXSk7CisgICAgICAgIG9sZE1hcFtvbGRJdC0+dmFsdWVbMF1dID0gbWFrZV9wYWlyKG9s
ZExpc3Rbb2xkSXQtPnZhbHVlWzBdXS5nZXQoKSwgbmV3SXQtPnZhbHVlWzBdKTsKICAgICB9CiAK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgbmV3TGlzdC5zaXplKCkgPiAwICYmIGkgPCBuZXdMaXN0
LnNpemUoKSAtIDE7ICsraSkgewpAQCAtMzY0LDcgKzM2NCw3IEBAIGJvb2wgRE9NUGF0Y2hTdXBw
b3J0Ojppbm5lclBhdGNoQ2hpbGRyZW4oQ29udGFpbmVyTm9kZSogcGFyZW50Tm9kZSwgY29uc3Qg
VmVjdG9yCiAKICAgICAvLyAyLiBQYXRjaCBub2RlcyBtYXJrZWQgZm9yIG1lcmdlLgogICAgIGZv
ciAoSGFzaE1hcDxEaWdlc3QqLCBEaWdlc3QqPjo6aXRlcmF0b3IgaXQgPSBtZXJnZXMuYmVnaW4o
KTsgaXQgIT0gbWVyZ2VzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmICghaW5uZXJQYXRjaE5v
ZGUoaXQtPnNlY29uZCwgaXQtPmZpcnN0LCBlYykpCisgICAgICAgIGlmICghaW5uZXJQYXRjaE5v
ZGUoaXQtPnZhbHVlLCBpdC0+a2V5LCBlYykpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogCkBAIC00NjMsNyArNDYzLDcgQEAgYm9vbCBET01QYXRjaFN1cHBvcnQ6OnJlbW92ZUNo
aWxkQW5kTW92ZVRvTmV3KERpZ2VzdCogb2xkRGlnZXN0LCBFeGNlcHRpb25Db2RlJgogICAgIC8v
IGhpZ2ggdGhhdCBpdCB3aWxsIGdldCBtZXJnZWQgYmFjayBpbnRvIHRoZSBvcmlnaW5hbCBET00g
ZHVyaW5nIHRoZSBmdXJ0aGVyIHBhdGNoaW5nLgogICAgIFVudXNlZE5vZGVzTWFwOjppdGVyYXRv
ciBpdCA9IG1fdW51c2VkTm9kZXNNYXAuZmluZChvbGREaWdlc3QtPm1fc2hhMSk7CiAgICAgaWYg
KGl0ICE9IG1fdW51c2VkTm9kZXNNYXAuZW5kKCkpIHsKLSAgICAgICAgRGlnZXN0KiBuZXdEaWdl
c3QgPSBpdC0+c2Vjb25kOworICAgICAgICBEaWdlc3QqIG5ld0RpZ2VzdCA9IGl0LT52YWx1ZTsK
ICAgICAgICAgTm9kZSogbmV3Tm9kZSA9IG5ld0RpZ2VzdC0+bV9ub2RlOwogICAgICAgICBpZiAo
IW1fZG9tRWRpdG9yLT5yZXBsYWNlQ2hpbGQobmV3Tm9kZS0+cGFyZW50Tm9kZSgpLCBvbGROb2Rl
LCBuZXdOb2RlLCBlYykpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwCmluZGV4IDUyZWM3
NDkwYTA3N2I1Y2ZkNGYzYjA4NWQyODc3YmM4NzBjYzA3Y2YuLjFkNWUzMTc1N2NkODZiM2IyMmI4
ZmVkYjMxYWJjZDVlMDJlZmY0NzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwCkBAIC04MiwxMCArODIsMTAgQEAgSW5qZWN0ZWRT
Y3JpcHQgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjppbmplY3RlZFNjcmlwdEZvcklkKGludCBpZCkK
IHsKICAgICBJZFRvSW5qZWN0ZWRTY3JpcHRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pZFRvSW5qZWN0
ZWRTY3JpcHQuZmluZChpZCk7CiAgICAgaWYgKGl0ICE9IG1faWRUb0luamVjdGVkU2NyaXB0LmVu
ZCgpKQotICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGl0LT52YWx1
ZTsKICAgICBmb3IgKFNjcmlwdFN0YXRlVG9JZDo6aXRlcmF0b3IgaXQgPSBtX3NjcmlwdFN0YXRl
VG9JZC5iZWdpbigpOyBpdCAhPSBtX3NjcmlwdFN0YXRlVG9JZC5lbmQoKTsgKytpdCkgewotICAg
ICAgICBpZiAoaXQtPnNlY29uZCA9PSBpZCkKLSAgICAgICAgICAgIHJldHVybiBpbmplY3RlZFNj
cmlwdEZvcihpdC0+Zmlyc3QpOworICAgICAgICBpZiAoaXQtPnZhbHVlID09IGlkKQorICAgICAg
ICAgICAgcmV0dXJuIGluamVjdGVkU2NyaXB0Rm9yKGl0LT5rZXkpOwogICAgIH0KICAgICByZXR1
cm4gSW5qZWN0ZWRTY3JpcHQoKTsKIH0KQEAgLTk0LDcgKzk0LDcgQEAgaW50IEluamVjdGVkU2Ny
aXB0TWFuYWdlcjo6aW5qZWN0ZWRTY3JpcHRJZEZvcihTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUp
CiB7CiAgICAgU2NyaXB0U3RhdGVUb0lkOjppdGVyYXRvciBpdCA9IG1fc2NyaXB0U3RhdGVUb0lk
LmZpbmQoc2NyaXB0U3RhdGUpOwogICAgIGlmIChpdCAhPSBtX3NjcmlwdFN0YXRlVG9JZC5lbmQo
KSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBpdC0+dmFsdWU7
CiAgICAgaW50IGlkID0gbV9uZXh0SW5qZWN0ZWRTY3JpcHRJZCsrOwogICAgIG1fc2NyaXB0U3Rh
dGVUb0lkLnNldChzY3JpcHRTdGF0ZSwgaWQpOwogICAgIHJldHVybiBpZDsKQEAgLTEyNiwxMSAr
MTI2LDExIEBAIHZvaWQgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjpkaXNjYXJkSW5qZWN0ZWRTY3Jp
cHRzRm9yKERPTVdpbmRvdyogd2luZG93KQogICAgIFZlY3Rvcjxsb25nPiBpZHNUb1JlbW92ZTsK
ICAgICBJZFRvSW5qZWN0ZWRTY3JpcHRNYXA6Oml0ZXJhdG9yIGVuZCA9IG1faWRUb0luamVjdGVk
U2NyaXB0LmVuZCgpOwogICAgIGZvciAoSWRUb0luamVjdGVkU2NyaXB0TWFwOjppdGVyYXRvciBp
dCA9IG1faWRUb0luamVjdGVkU2NyaXB0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAg
ICAgICBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUgPSBpdC0+c2Vjb25kLnNjcmlwdFN0YXRlKCk7
CisgICAgICAgIFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSA9IGl0LT52YWx1ZS5zY3JpcHRTdGF0
ZSgpOwogICAgICAgICBpZiAod2luZG93ICE9IGRvbVdpbmRvd0Zyb21TY3JpcHRTdGF0ZShzY3Jp
cHRTdGF0ZSkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgbV9zY3JpcHRTdGF0ZVRv
SWQucmVtb3ZlKHNjcmlwdFN0YXRlKTsKLSAgICAgICAgaWRzVG9SZW1vdmUuYXBwZW5kKGl0LT5m
aXJzdCk7CisgICAgICAgIGlkc1RvUmVtb3ZlLmFwcGVuZChpdC0+a2V5KTsKICAgICB9CiAKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGlkc1RvUmVtb3ZlLnNpemUoKTsgaSsrKQpAQCAtMTM5
LDcgKzEzOSw3IEBAIHZvaWQgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjpkaXNjYXJkSW5qZWN0ZWRT
Y3JpcHRzRm9yKERPTVdpbmRvdyogd2luZG93KQogICAgIC8vIE5vdyByZW1vdmUgc2NyaXB0IHN0
YXRlcyB0aGF0IGhhdmUgaWQgYnV0IG5vIGluamVjdGVkIHNjcmlwdC4KICAgICBWZWN0b3I8U2Ny
aXB0U3RhdGUqPiBzY3JpcHRTdGF0ZXNUb1JlbW92ZTsKICAgICBmb3IgKFNjcmlwdFN0YXRlVG9J
ZDo6aXRlcmF0b3IgaXQgPSBtX3NjcmlwdFN0YXRlVG9JZC5iZWdpbigpOyBpdCAhPSBtX3Njcmlw
dFN0YXRlVG9JZC5lbmQoKTsgKytpdCkgewotICAgICAgICBTY3JpcHRTdGF0ZSogc2NyaXB0U3Rh
dGUgPSBpdC0+Zmlyc3Q7CisgICAgICAgIFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSA9IGl0LT5r
ZXk7CiAgICAgICAgIGlmICh3aW5kb3cgPT0gZG9tV2luZG93RnJvbVNjcmlwdFN0YXRlKHNjcmlw
dFN0YXRlKSkKICAgICAgICAgICAgIHNjcmlwdFN0YXRlc1RvUmVtb3ZlLmFwcGVuZChzY3JpcHRT
dGF0ZSk7CiAgICAgfQpAQCAtMTU1LDcgKzE1NSw3IEBAIGJvb2wgSW5qZWN0ZWRTY3JpcHRNYW5h
Z2VyOjpjYW5BY2Nlc3NJbnNwZWN0ZWRXb3JrZXJDb250ZXh0KFNjcmlwdFN0YXRlKikKIHZvaWQg
SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjpyZWxlYXNlT2JqZWN0R3JvdXAoY29uc3QgU3RyaW5nJiBv
YmplY3RHcm91cCkKIHsKICAgICBmb3IgKElkVG9JbmplY3RlZFNjcmlwdE1hcDo6aXRlcmF0b3Ig
aXQgPSBtX2lkVG9JbmplY3RlZFNjcmlwdC5iZWdpbigpOyBpdCAhPSBtX2lkVG9JbmplY3RlZFNj
cmlwdC5lbmQoKTsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC5yZWxlYXNlT2JqZWN0R3JvdXAo
b2JqZWN0R3JvdXApOworICAgICAgICBpdC0+dmFsdWUucmVsZWFzZU9iamVjdEdyb3VwKG9iamVj
dEdyb3VwKTsKIH0KIAogU3RyaW5nIEluamVjdGVkU2NyaXB0TWFuYWdlcjo6aW5qZWN0ZWRTY3Jp
cHRTb3VyY2UoKQpAQCAtMTczLDkgKzE3Myw5IEBAIEluamVjdGVkU2NyaXB0IEluamVjdGVkU2Ny
aXB0TWFuYWdlcjo6aW5qZWN0ZWRTY3JpcHRGb3IoU2NyaXB0U3RhdGUqIGluc3BlY3RlZFNjCiB7
CiAgICAgU2NyaXB0U3RhdGVUb0lkOjppdGVyYXRvciBpdCA9IG1fc2NyaXB0U3RhdGVUb0lkLmZp
bmQoaW5zcGVjdGVkU2NyaXB0U3RhdGUpOwogICAgIGlmIChpdCAhPSBtX3NjcmlwdFN0YXRlVG9J
ZC5lbmQoKSkgewotICAgICAgICBJZFRvSW5qZWN0ZWRTY3JpcHRNYXA6Oml0ZXJhdG9yIGl0MSA9
IG1faWRUb0luamVjdGVkU2NyaXB0LmZpbmQoaXQtPnNlY29uZCk7CisgICAgICAgIElkVG9Jbmpl
Y3RlZFNjcmlwdE1hcDo6aXRlcmF0b3IgaXQxID0gbV9pZFRvSW5qZWN0ZWRTY3JpcHQuZmluZChp
dC0+dmFsdWUpOwogICAgICAgICBpZiAoaXQxICE9IG1faWRUb0luamVjdGVkU2NyaXB0LmVuZCgp
KQotICAgICAgICAgICAgcmV0dXJuIGl0MS0+c2Vjb25kOworICAgICAgICAgICAgcmV0dXJuIGl0
MS0+dmFsdWU7CiAgICAgfQogCiAgICAgaWYgKCFtX2luc3BlY3RlZFN0YXRlQWNjZXNzQ2hlY2so
aW5zcGVjdGVkU2NyaXB0U3RhdGUpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNTU0FnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JDU1NBZ2VudC5jcHAKaW5kZXggNGRiMjdiNjQ2MzI5MzkwNTE4MzFiODVkZTAyZmQ2MTQw
Y2M3MGRkYi4uMDQ2MDBkZDU1YWI2Zjc1YmE3ZTI1MWM4MTJiMWRlZDg4ZmE4OTJhNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCkBAIC0xODYs
MTAgKzE4NiwxMCBAQCBpbmxpbmUgdm9pZCBTZWxlY3RvclByb2ZpbGU6OmNvbW1pdFNlbGVjdG9y
KGJvb2wgbWF0Y2hlZCkKIAogICAgIFJ1bGVNYXRjaGluZ1N0YXRzTWFwOjpBZGRSZXN1bHQgcmVz
dWx0ID0gbV9ydWxlTWF0Y2hpbmdTdGF0cy5hZGQobWFrZUtleSgpLCBSdWxlTWF0Y2hpbmdTdGF0
cyhtX2N1cnJlbnRNYXRjaERhdGEsIG1hdGNoVGltZU1zLCAxLCBtYXRjaGVkID8gMSA6IDApKTsK
ICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+
c2Vjb25kLnRvdGFsVGltZSArPSBtYXRjaFRpbWVNczsKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9y
LT5zZWNvbmQuaGl0cyArPSAxOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLnRvdGFs
VGltZSArPSBtYXRjaFRpbWVNczsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5oaXRz
ICs9IDE7CiAgICAgICAgIGlmIChtYXRjaGVkKQotICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9y
LT5zZWNvbmQubWF0Y2hlcyArPSAxOworICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZS5tYXRjaGVzICs9IDE7CiAgICAgfQogfQogCkBAIC0yMDIsNyArMjAyLDcgQEAgaW5saW5lIHZv
aWQgU2VsZWN0b3JQcm9maWxlOjpjb21taXRTZWxlY3RvclRpbWUoKQogICAgIGlmIChpdCA9PSBt
X3J1bGVNYXRjaGluZ1N0YXRzLmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpdC0+c2Vj
b25kLnRvdGFsVGltZSArPSBwcm9jZXNzaW5nVGltZU1zOworICAgIGl0LT52YWx1ZS50b3RhbFRp
bWUgKz0gcHJvY2Vzc2luZ1RpbWVNczsKIH0KIAogUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NT
OjpTZWxlY3RvclByb2ZpbGU+IFNlbGVjdG9yUHJvZmlsZTo6dG9JbnNwZWN0b3JPYmplY3QoKSBj
b25zdApAQCAtMjEwLDEyICsyMTAsMTIgQEAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpT
ZWxlY3RvclByb2ZpbGU+IFNlbGVjdG9yUHJvZmlsZTo6dG9JbnNwZWN0b3JPYmplY3QKICAgICBS
ZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpDU1M6OlNlbGVjdG9yUHJvZmls
ZUVudHJ5PiA+IHNlbGVjdG9yUHJvZmlsZURhdGEgPSBUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1
aWxkZXI6OkNTUzo6U2VsZWN0b3JQcm9maWxlRW50cnk+OjpjcmVhdGUoKTsKICAgICBmb3IgKFJ1
bGVNYXRjaGluZ1N0YXRzTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fcnVsZU1hdGNoaW5nU3Rh
dHMuYmVnaW4oKTsgaXQgIT0gbV9ydWxlTWF0Y2hpbmdTdGF0cy5lbmQoKTsgKytpdCkgewogICAg
ICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6U2VsZWN0b3JQcm9maWxlRW50cnk+IGVudHJ5
ID0gVHlwZUJ1aWxkZXI6OkNTUzo6U2VsZWN0b3JQcm9maWxlRW50cnk6OmNyZWF0ZSgpCi0gICAg
ICAgICAgICAuc2V0U2VsZWN0b3IoaXQtPnNlY29uZC5zZWxlY3RvcikKLSAgICAgICAgICAgIC5z
ZXRVcmwoaXQtPnNlY29uZC51cmwpCi0gICAgICAgICAgICAuc2V0TGluZU51bWJlcihpdC0+c2Vj
b25kLmxpbmVOdW1iZXIpCi0gICAgICAgICAgICAuc2V0VGltZShpdC0+c2Vjb25kLnRvdGFsVGlt
ZSkKLSAgICAgICAgICAgIC5zZXRIaXRDb3VudChpdC0+c2Vjb25kLmhpdHMpCi0gICAgICAgICAg
ICAuc2V0TWF0Y2hDb3VudChpdC0+c2Vjb25kLm1hdGNoZXMpOworICAgICAgICAgICAgLnNldFNl
bGVjdG9yKGl0LT52YWx1ZS5zZWxlY3RvcikKKyAgICAgICAgICAgIC5zZXRVcmwoaXQtPnZhbHVl
LnVybCkKKyAgICAgICAgICAgIC5zZXRMaW5lTnVtYmVyKGl0LT52YWx1ZS5saW5lTnVtYmVyKQor
ICAgICAgICAgICAgLnNldFRpbWUoaXQtPnZhbHVlLnRvdGFsVGltZSkKKyAgICAgICAgICAgIC5z
ZXRIaXRDb3VudChpdC0+dmFsdWUuaGl0cykKKyAgICAgICAgICAgIC5zZXRNYXRjaENvdW50KGl0
LT52YWx1ZS5tYXRjaGVzKTsKICAgICAgICAgc2VsZWN0b3JQcm9maWxlRGF0YS0+YWRkSXRlbShl
bnRyeS5yZWxlYXNlKCkpOwogICAgIH0KIApAQCAtNTQ4LDcgKzU0OCw3IEBAIGJvb2wgSW5zcGVj
dG9yQ1NTQWdlbnQ6OmZvcmNlUHNldWRvU3RhdGUoRWxlbWVudCogZWxlbWVudCwgQ1NTU2VsZWN0
b3I6OlBzZXVkb1R5CiAgICAgaWYgKGl0ID09IG1fbm9kZUlkVG9Gb3JjZWRQc2V1ZG9TdGF0ZS5l
bmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgdW5zaWduZWQgZm9yY2VkUHNldWRv
U3RhdGUgPSBpdC0+c2Vjb25kOworICAgIHVuc2lnbmVkIGZvcmNlZFBzZXVkb1N0YXRlID0gaXQt
PnZhbHVlOwogICAgIHN3aXRjaCAocHNldWRvVHlwZSkgewogICAgIGNhc2UgQ1NTU2VsZWN0b3I6
OlBzZXVkb0FjdGl2ZToKICAgICAgICAgcmV0dXJuIGZvcmNlZFBzZXVkb1N0YXRlICYgUHNldWRv
QWN0aXZlOwpAQCAtNTcxLDcgKzU3MSw3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnJlY2Fs
Y1N0eWxlRm9yUHNldWRvU3RhdGVJZk5lZWRlZChFbGVtZW50KiBlbGVtZW50LCBJbnNwCiAKICAg
ICB1bnNpZ25lZCBmb3JjZWRQc2V1ZG9TdGF0ZSA9IGNvbXB1dGVQc2V1ZG9DbGFzc01hc2soZm9y
Y2VkUHNldWRvQ2xhc3Nlcyk7CiAgICAgTm9kZUlkVG9Gb3JjZWRQc2V1ZG9TdGF0ZTo6aXRlcmF0
b3IgaXQgPSBtX25vZGVJZFRvRm9yY2VkUHNldWRvU3RhdGUuZmluZChub2RlSWQpOwotICAgIHVu
c2lnbmVkIGN1cnJlbnRGb3JjZWRQc2V1ZG9TdGF0ZSA9IGl0ID09IG1fbm9kZUlkVG9Gb3JjZWRQ
c2V1ZG9TdGF0ZS5lbmQoKSA/IDAgOiBpdC0+c2Vjb25kOworICAgIHVuc2lnbmVkIGN1cnJlbnRG
b3JjZWRQc2V1ZG9TdGF0ZSA9IGl0ID09IG1fbm9kZUlkVG9Gb3JjZWRQc2V1ZG9TdGF0ZS5lbmQo
KSA/IDAgOiBpdC0+dmFsdWU7CiAgICAgYm9vbCBuZWVkU3R5bGVSZWNhbGMgPSBmb3JjZWRQc2V1
ZG9TdGF0ZSAhPSBjdXJyZW50Rm9yY2VkUHNldWRvU3RhdGU7CiAgICAgaWYgKCFuZWVkU3R5bGVS
ZWNhbGMpCiAgICAgICAgIHJldHVybjsKQEAgLTkwMCw3ICs5MDAsNyBAQCBJbnNwZWN0b3JTdHls
ZVNoZWV0Rm9ySW5saW5lU3R5bGUqIEluc3BlY3RvckNTU0FnZW50Ojphc0luc3BlY3RvclN0eWxl
U2hlZXQoRWxlbQogICAgICAgICByZXR1cm4gaW5zcGVjdG9yU3R5bGVTaGVldC5nZXQoKTsKICAg
ICB9CiAKLSAgICByZXR1cm4gaXQtPnNlY29uZC5nZXQoKTsKKyAgICByZXR1cm4gaXQtPnZhbHVl
LmdldCgpOwogfQogCiBFbGVtZW50KiBJbnNwZWN0b3JDU1NBZ2VudDo6ZWxlbWVudEZvcklkKEVy
cm9yU3RyaW5nKiBlcnJvclN0cmluZywgaW50IG5vZGVJZCkKQEAgLTk5NCw3ICs5OTQsNyBAQCBJ
bnNwZWN0b3JTdHlsZVNoZWV0KiBJbnNwZWN0b3JDU1NBZ2VudDo6YXNzZXJ0U3R5bGVTaGVldEZv
cklkKEVycm9yU3RyaW5nKiBlcnJvcgogICAgICAgICAqZXJyb3JTdHJpbmcgPSAiTm8gc3R5bGUg
c2hlZXQgd2l0aCBnaXZlbiBpZCBmb3VuZCI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAg
ICByZXR1cm4gaXQtPnNlY29uZC5nZXQoKTsKKyAgICByZXR1cm4gaXQtPnZhbHVlLmdldCgpOwog
fQogCiBUeXBlQnVpbGRlcjo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpFbnVtIEluc3BlY3RvckNT
U0FnZW50OjpkZXRlY3RPcmlnaW4oQ1NTU3R5bGVTaGVldCogcGFnZVN0eWxlU2hlZXQsIERvY3Vt
ZW50KiBvd25lckRvY3VtZW50KQpAQCAtMTA3MCw3ICsxMDcwLDcgQEAgdm9pZCBJbnNwZWN0b3JD
U1NBZ2VudDo6ZGlkUmVtb3ZlRE9NTm9kZShOb2RlKiBub2RlKQogICAgIGlmIChpdCA9PSBtX25v
ZGVUb0luc3BlY3RvclN0eWxlU2hlZXQuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1f
aWRUb0luc3BlY3RvclN0eWxlU2hlZXQucmVtb3ZlKGl0LT5zZWNvbmQtPmlkKCkpOworICAgIG1f
aWRUb0luc3BlY3RvclN0eWxlU2hlZXQucmVtb3ZlKGl0LT52YWx1ZS0+aWQoKSk7CiAgICAgbV9u
b2RlVG9JbnNwZWN0b3JTdHlsZVNoZWV0LnJlbW92ZShub2RlKTsKIH0KIApAQCAtMTA4Myw3ICsx
MDgzLDcgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6ZGlkTW9kaWZ5RE9NQXR0cihFbGVtZW50
KiBlbGVtZW50KQogICAgIGlmIChpdCA9PSBtX25vZGVUb0luc3BlY3RvclN0eWxlU2hlZXQuZW5k
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGl0LT5zZWNvbmQtPmRpZE1vZGlmeUVsZW1lbnRB
dHRyaWJ1dGUoKTsKKyAgICBpdC0+dmFsdWUtPmRpZE1vZGlmeUVsZW1lbnRBdHRyaWJ1dGUoKTsK
IH0KIAogdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6c3R5bGVTaGVldENoYW5nZWQoSW5zcGVjdG9y
U3R5bGVTaGVldCogc3R5bGVTaGVldCkKQEAgLTEwOTYsNyArMTA5Niw3IEBAIHZvaWQgSW5zcGVj
dG9yQ1NTQWdlbnQ6OnJlc2V0UHNldWRvU3RhdGVzKCkKIHsKICAgICBIYXNoU2V0PERvY3VtZW50
Kj4gZG9jdW1lbnRzVG9DaGFuZ2U7CiAgICAgZm9yIChOb2RlSWRUb0ZvcmNlZFBzZXVkb1N0YXRl
OjppdGVyYXRvciBpdCA9IG1fbm9kZUlkVG9Gb3JjZWRQc2V1ZG9TdGF0ZS5iZWdpbigpLCBlbmQg
PSBtX25vZGVJZFRvRm9yY2VkUHNldWRvU3RhdGUuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewot
ICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gdG9FbGVtZW50KG1fZG9tQWdlbnQtPm5vZGVGb3JJ
ZChpdC0+Zmlyc3QpKTsKKyAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IHRvRWxlbWVudChtX2Rv
bUFnZW50LT5ub2RlRm9ySWQoaXQtPmtleSkpOwogICAgICAgICBpZiAoZWxlbWVudCAmJiBlbGVt
ZW50LT5vd25lckRvY3VtZW50KCkpCiAgICAgICAgICAgICBkb2N1bWVudHNUb0NoYW5nZS5hZGQo
ZWxlbWVudC0+b3duZXJEb2N1bWVudCgpKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDb25zb2xlQWdlbnQuY3BwCmluZGV4IDI3MGM0YWVhMDNiMWUx
OTdlZjMyNzk0MzczOWQwMmU4NjE0ZDc5YjguLjU1Mzk4ZjdkZWYzNDhmMjQyZDZlZDY3YzExYTM2
MTBmMWNhYjZiYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JDb25zb2xlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JDb25zb2xlQWdlbnQuY3BwCkBAIC0xNzcsNyArMTc3LDcgQEAgdm9pZCBJbnNwZWN0b3JDb25z
b2xlQWdlbnQ6OnN0b3BUaW1pbmcoY29uc3QgU3RyaW5nJiB0aXRsZSwgUGFzc1JlZlB0cjxTY3Jp
cHRDYWwKICAgICBpZiAoaXQgPT0gbV90aW1lcy5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgZG91YmxlIHN0YXJ0VGltZSA9IGl0LT5zZWNvbmQ7CisgICAgZG91YmxlIHN0YXJ0VGltZSA9
IGl0LT52YWx1ZTsKICAgICBtX3RpbWVzLnJlbW92ZShpdCk7CiAKICAgICBkb3VibGUgZWxhcHNl
ZCA9IGN1cnJlbnRUaW1lKCkgKiAxMDAwIC0gc3RhcnRUaW1lOwpAQCAtMjAwLDcgKzIwMCw3IEBA
IHZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50Ojpjb3VudChQYXNzUmVmUHRyPFNjcmlwdEFyZ3Vt
ZW50cz4gYXJndW1lbnRzLCBQYXNzUmVmCiAgICAgaWYgKGl0ID09IG1fY291bnRzLmVuZCgpKQog
ICAgICAgICBjb3VudCA9IDE7CiAgICAgZWxzZSB7Ci0gICAgICAgIGNvdW50ID0gaXQtPnNlY29u
ZCArIDE7CisgICAgICAgIGNvdW50ID0gaXQtPnZhbHVlICsgMTsKICAgICAgICAgbV9jb3VudHMu
cmVtb3ZlKGl0KTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JET01BZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRE9NQWdlbnQuY3BwCmluZGV4IDkxYTM4MzEwZjhhOGNmNzRlZGJkODAxNjQ4MzczZTEyYmVm
MDE2ODkuLjBlYmQzNDFiMjhkYjgxZDBjYjg2Nzk5M2MyMzBkZTJhYThlNjAxYjQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcApAQCAtNDc1LDcg
KzQ3NSw3IEBAIE5vZGUqIEluc3BlY3RvckRPTUFnZW50Ojpub2RlRm9ySWQoaW50IGlkKQogCiAg
ICAgSGFzaE1hcDxpbnQsIE5vZGUqPjo6aXRlcmF0b3IgaXQgPSBtX2lkVG9Ob2RlLmZpbmQoaWQp
OwogICAgIGlmIChpdCAhPSBtX2lkVG9Ob2RlLmVuZCgpKQotICAgICAgICByZXR1cm4gaXQtPnNl
Y29uZDsKKyAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAt
OTEwLDkgKzkxMCw5IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnBlcmZvcm1TZWFyY2goRXJy
b3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIHdoaXRlc3BhY2VUcmltCiAgICAgU2VhcmNoUmVzdWx0
czo6aXRlcmF0b3IgcmVzdWx0c0l0ID0gbV9zZWFyY2hSZXN1bHRzLmFkZCgqc2VhcmNoSWQsIFZl
Y3RvcjxSZWZQdHI8Tm9kZT4gPigpKS5pdGVyYXRvcjsKIAogICAgIGZvciAoTGlzdEhhc2hTZXQ8
Tm9kZSo+OjppdGVyYXRvciBpdCA9IHJlc3VsdENvbGxlY3Rvci5iZWdpbigpOyBpdCAhPSByZXN1
bHRDb2xsZWN0b3IuZW5kKCk7ICsraXQpCi0gICAgICAgIHJlc3VsdHNJdC0+c2Vjb25kLmFwcGVu
ZCgqaXQpOworICAgICAgICByZXN1bHRzSXQtPnZhbHVlLmFwcGVuZCgqaXQpOwogCi0gICAgKnJl
c3VsdENvdW50ID0gcmVzdWx0c0l0LT5zZWNvbmQuc2l6ZSgpOworICAgICpyZXN1bHRDb3VudCA9
IHJlc3VsdHNJdC0+dmFsdWUuc2l6ZSgpOwogfQogCiB2b2lkIEluc3BlY3RvckRPTUFnZW50Ojpn
ZXRTZWFyY2hSZXN1bHRzKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBz
ZWFyY2hJZCwgaW50IGZyb21JbmRleCwgaW50IHRvSW5kZXgsIFJlZlB0cjxUeXBlQnVpbGRlcjo6
QXJyYXk8aW50PiA+JiBub2RlSWRzKQpAQCAtOTIzLDcgKzkyMyw3IEBAIHZvaWQgSW5zcGVjdG9y
RE9NQWdlbnQ6OmdldFNlYXJjaFJlc3VsdHMoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25z
dCBTdHJpbmcmCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpbnQgc2l6ZSA9IGl0LT5z
ZWNvbmQuc2l6ZSgpOworICAgIGludCBzaXplID0gaXQtPnZhbHVlLnNpemUoKTsKICAgICBpZiAo
ZnJvbUluZGV4IDwgMCB8fCB0b0luZGV4ID4gc2l6ZSB8fCBmcm9tSW5kZXggPj0gdG9JbmRleCkg
ewogICAgICAgICAqZXJyb3JTdHJpbmcgPSAiSW52YWxpZCBzZWFyY2ggcmVzdWx0IHJhbmdlIjsK
ICAgICAgICAgcmV0dXJuOwpAQCAtOTMxLDcgKzkzMSw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdl
bnQ6OmdldFNlYXJjaFJlc3VsdHMoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBTdHJp
bmcmCiAKICAgICBub2RlSWRzID0gVHlwZUJ1aWxkZXI6OkFycmF5PGludD46OmNyZWF0ZSgpOwog
ICAgIGZvciAoaW50IGkgPSBmcm9tSW5kZXg7IGkgPCB0b0luZGV4OyArK2kpCi0gICAgICAgIG5v
ZGVJZHMtPmFkZEl0ZW0ocHVzaE5vZGVQYXRoVG9Gcm9udGVuZCgoaXQtPnNlY29uZClbaV0uZ2V0
KCkpKTsKKyAgICAgICAgbm9kZUlkcy0+YWRkSXRlbShwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKChp
dC0+dmFsdWUpW2ldLmdldCgpKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpc2Nh
cmRTZWFyY2hSZXN1bHRzKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBzZWFyY2hJZCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01EZWJ1Z2dlckFn
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01EZWJ1Z2dlckFn
ZW50LmNwcAppbmRleCA4MDMyMjk1ZDg5NWU5ZDIyYTJmODBjNTk4ZDllNDRkMjc0NzRhMDU2Li5j
NGZjYjgyYjdiNmZhMGUyYjlhNTNiZDRmYWFjNjIzNjI5ZDBiZTVlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQuY3BwCkBA
IC00MDIsOCArNDAyLDggQEAgdm9pZCBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50Ojp3aWxsU2Vu
ZFhNTEh0dHBSZXF1ZXN0KGNvbnN0IFN0cmluZyYgdXJsKQogICAgIGVsc2UgewogICAgICAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB4aHJCcmVha3BvaW50cyA9IG1fc3RhdGUtPmdldE9iamVj
dChET01EZWJ1Z2dlckFnZW50U3RhdGU6OnhockJyZWFrcG9pbnRzKTsKICAgICAgICAgZm9yIChJ
bnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9yIGl0ID0geGhyQnJlYWtwb2ludHMtPmJlZ2luKCk7IGl0
ICE9IHhockJyZWFrcG9pbnRzLT5lbmQoKTsgKytpdCkgewotICAgICAgICAgICAgaWYgKHVybC5j
b250YWlucyhpdC0+Zmlyc3QpKSB7Ci0gICAgICAgICAgICAgICAgYnJlYWtwb2ludFVSTCA9IGl0
LT5maXJzdDsKKyAgICAgICAgICAgIGlmICh1cmwuY29udGFpbnMoaXQtPmtleSkpIHsKKyAgICAg
ICAgICAgICAgICBicmVha3BvaW50VVJMID0gaXQtPmtleTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcAppbmRleCA3MjZlZjcyYmI0M2Ew
Mjc2NTA2ZGRlZjY0ZjUxZDdiMGJmZGNlNWQ3Li5kNWNkMzA1MGE4NmRmMTM3NmM5YmE5M2MxZjA5
YzNhYjkzNDRlMTljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRE9NU3RvcmFnZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcApAQCAtNzcsNyArNzcsNyBAQCB2b2lkIEluc3BlY3Rv
ckRPTVN0b3JhZ2VBZ2VudDo6Y2xlYXJGcm9udGVuZCgpCiB7CiAgICAgRE9NU3RvcmFnZVJlc291
cmNlc01hcDo6aXRlcmF0b3IgZG9tU3RvcmFnZUVuZCA9IG1fcmVzb3VyY2VzLmVuZCgpOwogICAg
IGZvciAoRE9NU3RvcmFnZVJlc291cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5i
ZWdpbigpOyBpdCAhPSBkb21TdG9yYWdlRW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT51
bmJpbmQoKTsKKyAgICAgICAgaXQtPnZhbHVlLT51bmJpbmQoKTsKICAgICBtX2Zyb250ZW5kID0g
MDsKICAgICBkaXNhYmxlKDApOwogfQpAQCAtOTYsNyArOTYsNyBAQCB2b2lkIEluc3BlY3RvckRP
TVN0b3JhZ2VBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nKikKIAogICAgIERPTVN0b3JhZ2VSZXNv
dXJjZXNNYXA6Oml0ZXJhdG9yIHJlc291cmNlc0VuZCA9IG1fcmVzb3VyY2VzLmVuZCgpOwogICAg
IGZvciAoRE9NU3RvcmFnZVJlc291cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5i
ZWdpbigpOyBpdCAhPSByZXNvdXJjZXNFbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPmJp
bmQobV9mcm9udGVuZCk7CisgICAgICAgIGl0LT52YWx1ZS0+YmluZChtX2Zyb250ZW5kKTsKIH0K
IAogdm9pZCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcqKQpA
QCAtMTU5LDggKzE1OSw4IEBAIFN0cmluZyBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OnN0b3Jh
Z2VJZChTdG9yYWdlKiBzdG9yYWdlKQogICAgIGJvb2wgaXNMb2NhbFN0b3JhZ2UgPSAoZnJhbWUt
PmRvbVdpbmRvdygpLT5sb2NhbFN0b3JhZ2UoZWMpID09IHN0b3JhZ2UgJiYgIWVjKTsKICAgICBE
T01TdG9yYWdlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBkb21TdG9yYWdlRW5kID0gbV9yZXNvdXJj
ZXMuZW5kKCk7CiAgICAgZm9yIChET01TdG9yYWdlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBpdCA9
IG1fcmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGRvbVN0b3JhZ2VFbmQ7ICsraXQpIHsKLSAgICAg
ICAgaWYgKGl0LT5zZWNvbmQtPmlzU2FtZUhvc3RBbmRUeXBlKGZyYW1lLT5kb2N1bWVudCgpLT5z
ZWN1cml0eU9yaWdpbigpLCBpc0xvY2FsU3RvcmFnZSkpCi0gICAgICAgICAgICByZXR1cm4gaXQt
PmZpcnN0OworICAgICAgICBpZiAoaXQtPnZhbHVlLT5pc1NhbWVIb3N0QW5kVHlwZShmcmFtZS0+
ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKSwgaXNMb2NhbFN0b3JhZ2UpKQorICAgICAgICAg
ICAgcmV0dXJuIGl0LT5rZXk7CiAgICAgfQogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KQEAgLTE3
MCw4ICsxNzAsOCBAQCBTdHJpbmcgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpzdG9yYWdlSWQo
U2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luLCBib29sCiAgICAgQVNTRVJUKHNlY3VyaXR5
T3JpZ2luKTsKICAgICBET01TdG9yYWdlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBkb21TdG9yYWdl
RW5kID0gbV9yZXNvdXJjZXMuZW5kKCk7CiAgICAgZm9yIChET01TdG9yYWdlUmVzb3VyY2VzTWFw
OjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGRvbVN0b3JhZ2VFbmQ7
ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQtPmlzU2FtZUhvc3RBbmRUeXBlKHNlY3Vy
aXR5T3JpZ2luLCBpc0xvY2FsU3RvcmFnZSkpCi0gICAgICAgICAgICByZXR1cm4gaXQtPmZpcnN0
OworICAgICAgICBpZiAoaXQtPnZhbHVlLT5pc1NhbWVIb3N0QW5kVHlwZShzZWN1cml0eU9yaWdp
biwgaXNMb2NhbFN0b3JhZ2UpKQorICAgICAgICAgICAgcmV0dXJuIGl0LT5rZXk7CiAgICAgfQog
ICAgIHJldHVybiBTdHJpbmcoKTsKIH0KQEAgLTE4MSwxNCArMTgxLDE0IEBAIEluc3BlY3RvckRP
TVN0b3JhZ2VSZXNvdXJjZSogSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpnZXRET01TdG9yYWdl
UmVzb3VyY2VGb3JJCiAgICAgRE9NU3RvcmFnZVJlc291cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBt
X3Jlc291cmNlcy5maW5kKHN0b3JhZ2VJZCk7CiAgICAgaWYgKGl0ID09IG1fcmVzb3VyY2VzLmVu
ZCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gaXQtPnNlY29uZC5nZXQoKTsKKyAg
ICByZXR1cm4gaXQtPnZhbHVlLmdldCgpOwogfQogCiB2b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VB
Z2VudDo6ZGlkVXNlRE9NU3RvcmFnZShTdG9yYWdlQXJlYSogc3RvcmFnZUFyZWEsIGJvb2wgaXNM
b2NhbFN0b3JhZ2UsIEZyYW1lKiBmcmFtZSkKIHsKICAgICBET01TdG9yYWdlUmVzb3VyY2VzTWFw
OjppdGVyYXRvciBkb21TdG9yYWdlRW5kID0gbV9yZXNvdXJjZXMuZW5kKCk7CiAgICAgZm9yIChE
T01TdG9yYWdlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7
IGl0ICE9IGRvbVN0b3JhZ2VFbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQtPmlz
U2FtZUhvc3RBbmRUeXBlKGZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLCBpc0xv
Y2FsU3RvcmFnZSkpCisgICAgICAgIGlmIChpdC0+dmFsdWUtPmlzU2FtZUhvc3RBbmRUeXBlKGZy
YW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLCBpc0xvY2FsU3RvcmFnZSkpCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5jcHAKaW5kZXggY2NiMDAzYzNmZjMwMmU1YWZhNDBk
ZjA2OGY4MTAzYjkzZjY5ZmQxMS4uNGVkNGFhMTg4ZDRhYzgyMDllYTIyMzc4NDFlMDcyNjUzZTk5
OWEyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFi
YXNlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRh
YmFzZUFnZW50LmNwcApAQCAtMjc1LDcgKzI3NSw3IEBAIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VB
Z2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nKikKIAogICAgIERhdGFiYXNlUmVzb3VyY2VzTWFwOjpp
dGVyYXRvciBkYXRhYmFzZXNFbmQgPSBtX3Jlc291cmNlcy5lbmQoKTsKICAgICBmb3IgKERhdGFi
YXNlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9
IGRhdGFiYXNlc0VuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+YmluZChtX2Zyb250ZW5k
UHJvdmlkZXItPmZyb250ZW5kKCkpOworICAgICAgICBpdC0+dmFsdWUtPmJpbmQobV9mcm9udGVu
ZFByb3ZpZGVyLT5mcm9udGVuZCgpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUFnZW50
OjpkaXNhYmxlKEVycm9yU3RyaW5nKikKQEAgLTMzMyw4ICszMzMsOCBAQCB2b2lkIEluc3BlY3Rv
ckRhdGFiYXNlQWdlbnQ6OmV4ZWN1dGVTUUwoRXJyb3JTdHJpbmcqIGVycm9yLCBjb25zdCBTdHJp
bmcmIGRhdGFiYQogU3RyaW5nIEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmRhdGFiYXNlSWQoRGF0
YWJhc2UqIGRhdGFiYXNlKQogewogICAgIGZvciAoRGF0YWJhc2VSZXNvdXJjZXNNYXA6Oml0ZXJh
dG9yIGl0ID0gbV9yZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gbV9yZXNvdXJjZXMuZW5kKCk7ICsr
aXQpIHsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQtPmRhdGFiYXNlKCkgPT0gZGF0YWJhc2UpCi0g
ICAgICAgICAgICByZXR1cm4gaXQtPmZpcnN0OworICAgICAgICBpZiAoaXQtPnZhbHVlLT5kYXRh
YmFzZSgpID09IGRhdGFiYXNlKQorICAgICAgICAgICAgcmV0dXJuIGl0LT5rZXk7CiAgICAgfQog
ICAgIHJldHVybiBTdHJpbmcoKTsKIH0KQEAgLTM0Miw4ICszNDIsOCBAQCBTdHJpbmcgSW5zcGVj
dG9yRGF0YWJhc2VBZ2VudDo6ZGF0YWJhc2VJZChEYXRhYmFzZSogZGF0YWJhc2UpCiBJbnNwZWN0
b3JEYXRhYmFzZVJlc291cmNlKiBJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjpmaW5kQnlGaWxlTmFt
ZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKQogewogICAgIGZvciAoRGF0YWJhc2VSZXNvdXJjZXNN
YXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gbV9yZXNvdXJjZXMu
ZW5kKCk7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQtPmRhdGFiYXNlKCktPmZpbGVO
YW1lKCkgPT0gZmlsZU5hbWUpCi0gICAgICAgICAgICByZXR1cm4gaXQtPnNlY29uZC5nZXQoKTsK
KyAgICAgICAgaWYgKGl0LT52YWx1ZS0+ZGF0YWJhc2UoKS0+ZmlsZU5hbWUoKSA9PSBmaWxlTmFt
ZSkKKyAgICAgICAgICAgIHJldHVybiBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgfQogICAgIHJldHVy
biAwOwogfQpAQCAtMzUzLDcgKzM1Myw3IEBAIERhdGFiYXNlKiBJbnNwZWN0b3JEYXRhYmFzZUFn
ZW50OjpkYXRhYmFzZUZvcklkKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VJZCkKICAgICBEYXRhYmFz
ZVJlc291cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5maW5kKGRhdGFiYXNlSWQp
OwogICAgIGlmIChpdCA9PSBtX3Jlc291cmNlcy5lbmQoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgcmV0dXJuIGl0LT5zZWNvbmQtPmRhdGFiYXNlKCk7CisgICAgcmV0dXJuIGl0LT52YWx1ZS0+
ZGF0YWJhc2UoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IGQ2ZTQ0
ZDkxYWQ1MGQ1NjlmYWE0NGQwNjc0YjBhYzdlODcwODFjZjMuLjEyZjgxNzgzMDA1YjI0YmNiY2E0
ODI4MDhhYmM4NjA1MGM2YzcwNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAKQEAgLTI0Miw5ICsyNDIsOSBAQCB2b2lkIElu
c3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnRCeVVybChFcnJvclN0cmluZyogZXJy
b3JTdHJpbmcsIGludCBsaQogCiAgICAgU2NyaXB0QnJlYWtwb2ludCBicmVha3BvaW50KGxpbmVO
dW1iZXIsIGNvbHVtbk51bWJlciwgY29uZGl0aW9uKTsKICAgICBmb3IgKFNjcmlwdHNNYXA6Oml0
ZXJhdG9yIGl0ID0gbV9zY3JpcHRzLmJlZ2luKCk7IGl0ICE9IG1fc2NyaXB0cy5lbmQoKTsgKytp
dCkgewotICAgICAgICBpZiAoIW1hdGNoZXMoaXQtPnNlY29uZC51cmwsIHVybCwgaXNSZWdleCkp
CisgICAgICAgIGlmICghbWF0Y2hlcyhpdC0+dmFsdWUudXJsLCB1cmwsIGlzUmVnZXgpKQogICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6RGVidWdnZXI6
OkxvY2F0aW9uPiBsb2NhdGlvbiA9IHJlc29sdmVCcmVha3BvaW50KGJyZWFrcG9pbnRJZCwgaXQt
PmZpcnN0LCBicmVha3BvaW50KTsKKyAgICAgICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpEZWJ1Z2dl
cjo6TG9jYXRpb24+IGxvY2F0aW9uID0gcmVzb2x2ZUJyZWFrcG9pbnQoYnJlYWtwb2ludElkLCBp
dC0+a2V5LCBicmVha3BvaW50KTsKICAgICAgICAgaWYgKGxvY2F0aW9uKQogICAgICAgICAgICAg
bG9jYXRpb25zLT5hZGRJdGVtKGxvY2F0aW9uKTsKICAgICB9CkBAIC0yOTYsOCArMjk2LDggQEAg
dm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZW1vdmVCcmVha3BvaW50KEVycm9yU3RyaW5n
KiwgY29uc3QgU3RyaW5nJiBicmVha3AKICAgICBCcmVha3BvaW50SWRUb0RlYnVnU2VydmVyQnJl
YWtwb2ludElkc01hcDo6aXRlcmF0b3IgZGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzSXRlcmF0b3Ig
PSBtX2JyZWFrcG9pbnRJZFRvRGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzLmZpbmQoYnJlYWtwb2lu
dElkKTsKICAgICBpZiAoZGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzSXRlcmF0b3IgPT0gbV9icmVh
a3BvaW50SWRUb0RlYnVnU2VydmVyQnJlYWtwb2ludElkcy5lbmQoKSkKICAgICAgICAgcmV0dXJu
OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzSXRl
cmF0b3ItPnNlY29uZC5zaXplKCk7ICsraSkKLSAgICAgICAgc2NyaXB0RGVidWdTZXJ2ZXIoKS5y
ZW1vdmVCcmVha3BvaW50KGRlYnVnU2VydmVyQnJlYWtwb2ludElkc0l0ZXJhdG9yLT5zZWNvbmRb
aV0pOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGVidWdTZXJ2ZXJCcmVha3BvaW50SWRz
SXRlcmF0b3ItPnZhbHVlLnNpemUoKTsgKytpKQorICAgICAgICBzY3JpcHREZWJ1Z1NlcnZlcigp
LnJlbW92ZUJyZWFrcG9pbnQoZGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzSXRlcmF0b3ItPnZhbHVl
W2ldKTsKICAgICBtX2JyZWFrcG9pbnRJZFRvRGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzLnJlbW92
ZShkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNJdGVyYXRvcik7CiB9CiAKQEAgLTMyNSw3ICszMjUs
NyBAQCBQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRpb24+IEluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQ6OnJlc29sdmVCcmVhawogICAgIFNjcmlwdHNNYXA6Oml0ZXJhdG9yIHNj
cmlwdEl0ZXJhdG9yID0gbV9zY3JpcHRzLmZpbmQoc2NyaXB0SWQpOwogICAgIGlmIChzY3JpcHRJ
dGVyYXRvciA9PSBtX3NjcmlwdHMuZW5kKCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIFNjcmlw
dCYgc2NyaXB0ID0gc2NyaXB0SXRlcmF0b3ItPnNlY29uZDsKKyAgICBTY3JpcHQmIHNjcmlwdCA9
IHNjcmlwdEl0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoYnJlYWtwb2ludC5saW5lTnVtYmVyIDwg
c2NyaXB0LnN0YXJ0TGluZSB8fCBzY3JpcHQuZW5kTGluZSA8IGJyZWFrcG9pbnQubGluZU51bWJl
cikKICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTMzOCw3ICszMzgsNyBAQCBQYXNzUmVmUHRyPFR5
cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRpb24+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnJl
c29sdmVCcmVhawogICAgIEJyZWFrcG9pbnRJZFRvRGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzTWFw
OjppdGVyYXRvciBkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNJdGVyYXRvciA9IG1fYnJlYWtwb2lu
dElkVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHMuZmluZChicmVha3BvaW50SWQpOwogICAgIGlm
IChkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNJdGVyYXRvciA9PSBtX2JyZWFrcG9pbnRJZFRvRGVi
dWdTZXJ2ZXJCcmVha3BvaW50SWRzLmVuZCgpKQogICAgICAgICBkZWJ1Z1NlcnZlckJyZWFrcG9p
bnRJZHNJdGVyYXRvciA9IG1fYnJlYWtwb2ludElkVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHMu
c2V0KGJyZWFrcG9pbnRJZCwgVmVjdG9yPFN0cmluZz4oKSkuaXRlcmF0b3I7Ci0gICAgZGVidWdT
ZXJ2ZXJCcmVha3BvaW50SWRzSXRlcmF0b3ItPnNlY29uZC5hcHBlbmQoZGVidWdTZXJ2ZXJCcmVh
a3BvaW50SWQpOworICAgIGRlYnVnU2VydmVyQnJlYWtwb2ludElkc0l0ZXJhdG9yLT52YWx1ZS5h
cHBlbmQoZGVidWdTZXJ2ZXJCcmVha3BvaW50SWQpOwogCiAgICAgUmVmUHRyPFR5cGVCdWlsZGVy
OjpEZWJ1Z2dlcjo6TG9jYXRpb24+IGxvY2F0aW9uID0gVHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpM
b2NhdGlvbjo6Y3JlYXRlKCkKICAgICAgICAgLnNldFNjcmlwdElkKHNjcmlwdElkKQpAQCAtMzY0
LDcgKzM2NCw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2VhcmNoSW5Db250ZW50
KEVycm9yU3RyaW5nKiBlcnJvciwgY29uc3QgU3RyaW5nJiBzCiAKICAgICBTY3JpcHRzTWFwOjpp
dGVyYXRvciBpdCA9IG1fc2NyaXB0cy5maW5kKHNjcmlwdElkKTsKICAgICBpZiAoaXQgIT0gbV9z
Y3JpcHRzLmVuZCgpKQotICAgICAgICByZXN1bHRzID0gQ29udGVudFNlYXJjaFV0aWxzOjpzZWFy
Y2hJblRleHRCeUxpbmVzKGl0LT5zZWNvbmQuc291cmNlLCBxdWVyeSwgY2FzZVNlbnNpdGl2ZSwg
aXNSZWdleCk7CisgICAgICAgIHJlc3VsdHMgPSBDb250ZW50U2VhcmNoVXRpbHM6OnNlYXJjaElu
VGV4dEJ5TGluZXMoaXQtPnZhbHVlLnNvdXJjZSwgcXVlcnksIGNhc2VTZW5zaXRpdmUsIGlzUmVn
ZXgpOwogICAgIGVsc2UKICAgICAgICAgKmVycm9yID0gIk5vIHNjcmlwdCBmb3IgaWQ6ICIgKyBz
Y3JpcHRJZDsKIH0KQEAgLTM5Nyw3ICszOTcsNyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ6OmdldFNjcmlwdFNvdXJjZShFcnJvclN0cmluZyogZXJyb3IsIGNvbnN0IFN0cmluZyYgcwog
ewogICAgIFNjcmlwdHNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zY3JpcHRzLmZpbmQoc2NyaXB0SWQp
OwogICAgIGlmIChpdCAhPSBtX3NjcmlwdHMuZW5kKCkpCi0gICAgICAgICpzY3JpcHRTb3VyY2Ug
PSBpdC0+c2Vjb25kLnNvdXJjZTsKKyAgICAgICAgKnNjcmlwdFNvdXJjZSA9IGl0LT52YWx1ZS5z
b3VyY2U7CiAgICAgZWxzZQogICAgICAgICAqZXJyb3IgPSAiTm8gc2NyaXB0IGZvciBpZDogIiAr
IHNjcmlwdElkOwogfQpAQCAtNjI0LDcgKzYyNCw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6ZGlkUGFyc2VTb3VyY2UoY29uc3QgU3RyaW5nJiBzY3JpcHRJZCwgY29uc3QgU2NyaXB0
CiAKICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBicmVha3BvaW50c0Nvb2tpZSA9IG1fc3Rh
dGUtPmdldE9iamVjdChEZWJ1Z2dlckFnZW50U3RhdGU6OmphdmFTY3JpcHRCcmVha3BvaW50cyk7
CiAgICAgZm9yIChJbnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9yIGl0ID0gYnJlYWtwb2ludHNDb29r
aWUtPmJlZ2luKCk7IGl0ICE9IGJyZWFrcG9pbnRzQ29va2llLT5lbmQoKTsgKytpdCkgewotICAg
ICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBicmVha3BvaW50T2JqZWN0ID0gaXQtPnNlY29u
ZC0+YXNPYmplY3QoKTsKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnJlYWtwb2lu
dE9iamVjdCA9IGl0LT52YWx1ZS0+YXNPYmplY3QoKTsKICAgICAgICAgYm9vbCBpc1JlZ2V4Owog
ICAgICAgICBicmVha3BvaW50T2JqZWN0LT5nZXRCb29sZWFuKCJpc1JlZ2V4IiwgJmlzUmVnZXgp
OwogICAgICAgICBTdHJpbmcgdXJsOwpAQCAtNjM1LDkgKzYzNSw5IEBAIHZvaWQgSW5zcGVjdG9y
RGVidWdnZXJBZ2VudDo6ZGlkUGFyc2VTb3VyY2UoY29uc3QgU3RyaW5nJiBzY3JpcHRJZCwgY29u
c3QgU2NyaXB0CiAgICAgICAgIGJyZWFrcG9pbnRPYmplY3QtPmdldE51bWJlcigibGluZU51bWJl
ciIsICZicmVha3BvaW50LmxpbmVOdW1iZXIpOwogICAgICAgICBicmVha3BvaW50T2JqZWN0LT5n
ZXROdW1iZXIoImNvbHVtbk51bWJlciIsICZicmVha3BvaW50LmNvbHVtbk51bWJlcik7CiAgICAg
ICAgIGJyZWFrcG9pbnRPYmplY3QtPmdldFN0cmluZygiY29uZGl0aW9uIiwgJmJyZWFrcG9pbnQu
Y29uZGl0aW9uKTsKLSAgICAgICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRp
b24+IGxvY2F0aW9uID0gcmVzb2x2ZUJyZWFrcG9pbnQoaXQtPmZpcnN0LCBzY3JpcHRJZCwgYnJl
YWtwb2ludCk7CisgICAgICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0aW9u
PiBsb2NhdGlvbiA9IHJlc29sdmVCcmVha3BvaW50KGl0LT5rZXksIHNjcmlwdElkLCBicmVha3Bv
aW50KTsKICAgICAgICAgaWYgKGxvY2F0aW9uKQotICAgICAgICAgICAgbV9mcm9udGVuZC0+YnJl
YWtwb2ludFJlc29sdmVkKGl0LT5maXJzdCwgbG9jYXRpb24pOworICAgICAgICAgICAgbV9mcm9u
dGVuZC0+YnJlYWtwb2ludFJlc29sdmVkKGl0LT5rZXksIGxvY2F0aW9uKTsKICAgICB9CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJB
Z2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdl
bnQuY3BwCmluZGV4IGM1ODRiMWU5ZmQzZWFmYTllZmVhYzYxZDQxNjVkZjM2YzQyZWQ4YTcuLmM1
ZGU4OWE0MGNiNmFhMDZhY2VjZWIyM2JhYzgzMDEyNTUyYTYyOWQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcApAQCAtMzE3
LDEyICszMTcsMTIgQEAgcHVibGljOgogICAgICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5
PFR5cGVCdWlsZGVyOjpJbmRleGVkREI6Ok9iamVjdFN0b3JlPiA+IG9iamVjdFN0b3JlcyA9IFR5
cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6SW5kZXhlZERCOjpPYmplY3RTdG9yZT46OmNy
ZWF0ZSgpOwogCiAgICAgICAgIGZvciAoSURCRGF0YWJhc2VNZXRhZGF0YTo6T2JqZWN0U3RvcmVN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZGF0YWJhc2VNZXRhZGF0YS5vYmplY3RTdG9yZXMuYmVn
aW4oKTsgaXQgIT0gZGF0YWJhc2VNZXRhZGF0YS5vYmplY3RTdG9yZXMuZW5kKCk7ICsraXQpIHsK
LSAgICAgICAgICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlTWV0
YWRhdGEgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRh
ZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSA9IGl0LT52YWx1ZTsKIAogICAgICAgICAgICAgUmVm
UHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6SW5kZXhlZERCOjpPYmplY3RTdG9y
ZUluZGV4PiA+IGluZGV4ZXMgPSBUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkluZGV4
ZWREQjo6T2JqZWN0U3RvcmVJbmRleD46OmNyZWF0ZSgpOwogCiAgICAgICAgICAgICBmb3IgKElE
Qk9iamVjdFN0b3JlTWV0YWRhdGE6OkluZGV4TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG9iamVj
dFN0b3JlTWV0YWRhdGEuaW5kZXhlcy5iZWdpbigpOyBpdCAhPSBvYmplY3RTdG9yZU1ldGFkYXRh
LmluZGV4ZXMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBJREJJbmRleE1l
dGFkYXRhJiBpbmRleE1ldGFkYXRhID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgICAgICBjb25z
dCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhID0gaXQtPnZhbHVlOwogCiAgICAgICAg
ICAgICAgICAgUmVmUHRyPE9iamVjdFN0b3JlSW5kZXg+IG9iamVjdFN0b3JlSW5kZXggPSBPYmpl
Y3RTdG9yZUluZGV4OjpjcmVhdGUoKQogICAgICAgICAgICAgICAgICAgICAuc2V0TmFtZShpbmRl
eE1ldGFkYXRhLm5hbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yTWVtb3J5QWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ck1lbW9yeUFnZW50LmNwcAppbmRleCAxM2MwODFlODZhMWY0MjYyOWE4OTMzODcyMGZjNDFiNTc0
MWIzZmMyLi5kYzc0Mzg4OGM2MzE2NmM2NTY4ZjdjNTU1NGQzZTBlZjNjNGIzZmE3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTWVtb3J5QWdlbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JNZW1vcnlBZ2VudC5jcHAKQEAg
LTE1Niw4ICsxNTYsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBSZWZQdHI8VHlwZUJ1aWxk
ZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpNZW1vcnk6Ok5vZGVDb3VudD4gPiBjaGlsZHJlblN0YXRz
ID0gVHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpNZW1vcnk6Ok5vZGVDb3VudD46OmNy
ZWF0ZSgpOwogICAgICAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBpbnQ+OjppdGVyYXRvciBpdCA9
IG1fbm9kZU5hbWVUb0NvdW50LmJlZ2luKCk7IGl0ICE9IG1fbm9kZU5hbWVUb0NvdW50LmVuZCgp
OyArK2l0KSB7Ci0gICAgICAgICAgICBSZWZQdHI8Tm9kZUNvdW50PiBub2RlQ291bnQgPSBOb2Rl
Q291bnQ6OmNyZWF0ZSgpLnNldE5vZGVOYW1lKGl0LT5maXJzdCkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0Q291bnQoaXQt
PnNlY29uZCk7CisgICAgICAgICAgICBSZWZQdHI8Tm9kZUNvdW50PiBub2RlQ291bnQgPSBOb2Rl
Q291bnQ6OmNyZWF0ZSgpLnNldE5vZGVOYW1lKGl0LT5rZXkpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldENvdW50KGl0LT52
YWx1ZSk7CiAgICAgICAgICAgICBjaGlsZHJlblN0YXRzLT5hZGRJdGVtKG5vZGVDb3VudCk7CiAg
ICAgICAgIH0KICAgICAgICAgcmV0dXJuIGNoaWxkcmVuU3RhdHMucmVsZWFzZSgpOwpAQCAtMTY3
LDggKzE2Nyw4IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6
QXJyYXk8VHlwZUJ1aWxkZXI6Ok1lbW9yeTo6TGlzdGVuZXJDb3VudD4gPiBsaXN0ZW5lclN0YXRz
ID0gVHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpNZW1vcnk6Okxpc3RlbmVyQ291bnQ+
OjpjcmVhdGUoKTsKICAgICAgICAgZm9yIChIYXNoTWFwPEF0b21pY1N0cmluZywgaW50Pjo6aXRl
cmF0b3IgaXQgPSBtX2V2ZW50VHlwZVRvQ291bnQuYmVnaW4oKTsgaXQgIT0gbV9ldmVudFR5cGVU
b0NvdW50LmVuZCgpOyArK2l0KSB7Ci0gICAgICAgICAgICBSZWZQdHI8TGlzdGVuZXJDb3VudD4g
bGlzdGVuZXJDb3VudCA9IExpc3RlbmVyQ291bnQ6OmNyZWF0ZSgpLnNldFR5cGUoaXQtPmZpcnN0
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC5zZXRDb3VudChpdC0+c2Vjb25kKTsKKyAgICAgICAgICAgIFJl
ZlB0cjxMaXN0ZW5lckNvdW50PiBsaXN0ZW5lckNvdW50ID0gTGlzdGVuZXJDb3VudDo6Y3JlYXRl
KCkuc2V0VHlwZShpdC0+a2V5KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRDb3VudChpdC0+dmFsdWUp
OwogICAgICAgICAgICAgbGlzdGVuZXJTdGF0cy0+YWRkSXRlbShsaXN0ZW5lckNvdW50KTsKICAg
ICAgICAgfQogICAgICAgICByZXR1cm4gbGlzdGVuZXJTdGF0cy5yZWxlYXNlKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCmluZGV4IDk5ZDAy
ZmUyN2IzYjNkYjhlNzM4ZWJhZjZjZGVhM2MyMmRlMmQxZmMuLjNiMzliOWZkMTJiYmVmZTVjYmE5
MjY1OTdmNTMwZDRhNTJjYjY3ZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JQYWdlQWdlbnQuY3BwCkBAIC00NTAsNyArNDUwLDcgQEAgc3RhdGljIFZlY3RvcjxD
YWNoZWRSZXNvdXJjZSo+IGNhY2hlZFJlc291cmNlc0ZvckZyYW1lKEZyYW1lKiBmcmFtZSkKICAg
ICBjb25zdCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6RG9jdW1lbnRSZXNvdXJjZU1hcCYgYWxsUmVz
b3VyY2VzID0gZnJhbWUtPmRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCktPmFsbENh
Y2hlZFJlc291cmNlcygpOwogICAgIENhY2hlZFJlc291cmNlTG9hZGVyOjpEb2N1bWVudFJlc291
cmNlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBhbGxSZXNvdXJjZXMuZW5kKCk7CiAgICAgZm9y
IChDYWNoZWRSZXNvdXJjZUxvYWRlcjo6RG9jdW1lbnRSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBhbGxSZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAg
IENhY2hlZFJlc291cmNlKiBjYWNoZWRSZXNvdXJjZSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAg
ICAgIENhY2hlZFJlc291cmNlKiBjYWNoZWRSZXNvdXJjZSA9IGl0LT52YWx1ZS5nZXQoKTsKIAog
ICAgICAgICBzd2l0Y2ggKGNhY2hlZFJlc291cmNlLT50eXBlKCkpIHsKICAgICAgICAgY2FzZSBD
YWNoZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJjZToKQEAgLTc1NCw3ICs3NTQsNyBAQCB2b2lkIElu
c3BlY3RvclBhZ2VBZ2VudDo6ZGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxkKEZyYW1lKiBmcmFt
ZSwgRE9NV3JhcHBlcldvcgogICAgICAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IHNjcmlwdHMtPmVuZCgpOwogICAgICAgICBmb3IgKEluc3BlY3Rvck9iamVjdDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBzY3JpcHRzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAg
ICAgICAgICAgIFN0cmluZyBzY3JpcHRUZXh0OwotICAgICAgICAgICAgaWYgKGl0LT5zZWNvbmQt
PmFzU3RyaW5nKCZzY3JpcHRUZXh0KSkKKyAgICAgICAgICAgIGlmIChpdC0+dmFsdWUtPmFzU3Ry
aW5nKCZzY3JpcHRUZXh0KSkKICAgICAgICAgICAgICAgICBtX2luamVjdGVkU2NyaXB0TWFuYWdl
ci0+aW5qZWN0U2NyaXB0KHNjcmlwdFRleHQsIG1haW5Xb3JsZFNjcmlwdFN0YXRlKGZyYW1lKSk7
CiAgICAgICAgIH0KICAgICB9CkBAIC03ODYsOCArNzg2LDggQEAgdm9pZCBJbnNwZWN0b3JQYWdl
QWdlbnQ6OmZyYW1lRGV0YWNoZWQoRnJhbWUqIGZyYW1lKQogewogICAgIEhhc2hNYXA8RnJhbWUq
LCBTdHJpbmc+OjppdGVyYXRvciBpdGVyYXRvciA9IG1fZnJhbWVUb0lkZW50aWZpZXIuZmluZChm
cmFtZSk7CiAgICAgaWYgKGl0ZXJhdG9yICE9IG1fZnJhbWVUb0lkZW50aWZpZXIuZW5kKCkpIHsK
LSAgICAgICAgbV9mcm9udGVuZC0+ZnJhbWVEZXRhY2hlZChpdGVyYXRvci0+c2Vjb25kKTsKLSAg
ICAgICAgbV9pZGVudGlmaWVyVG9GcmFtZS5yZW1vdmUoaXRlcmF0b3ItPnNlY29uZCk7CisgICAg
ICAgIG1fZnJvbnRlbmQtPmZyYW1lRGV0YWNoZWQoaXRlcmF0b3ItPnZhbHVlKTsKKyAgICAgICAg
bV9pZGVudGlmaWVyVG9GcmFtZS5yZW1vdmUoaXRlcmF0b3ItPnZhbHVlKTsKICAgICAgICAgbV9m
cmFtZVRvSWRlbnRpZmllci5yZW1vdmUoaXRlcmF0b3IpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcAppbmRleCAz
ODY4N2VjYmE5MmIyZmQ3MzljMzRkMzkwNTIyYzVmMDYxZmNmMGY1Li40NTNlYzk3OTQxNjFjY2Fh
ZmViNWE5MWQwZWNkYmFiZjE1ZDk1NzE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwCkBAIC0yNDYsMTAgKzI0NiwxMCBAQCB2
b2lkIEluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmdldFByb2ZpbGVIZWFkZXJzKEVycm9yU3RyaW5n
KiwgUmVmUHRyPFR5cGVCdWlsZGVyOgogCiAgICAgUHJvZmlsZXNNYXA6Oml0ZXJhdG9yIHByb2Zp
bGVzRW5kID0gbV9wcm9maWxlcy5lbmQoKTsKICAgICBmb3IgKFByb2ZpbGVzTWFwOjppdGVyYXRv
ciBpdCA9IG1fcHJvZmlsZXMuYmVnaW4oKTsgaXQgIT0gcHJvZmlsZXNFbmQ7ICsraXQpCi0gICAg
ICAgIGhlYWRlcnMtPmFkZEl0ZW0oY3JlYXRlUHJvZmlsZUhlYWRlcigqaXQtPnNlY29uZCkpOwor
ICAgICAgICBoZWFkZXJzLT5hZGRJdGVtKGNyZWF0ZVByb2ZpbGVIZWFkZXIoKml0LT52YWx1ZSkp
OwogICAgIEhlYXBTbmFwc2hvdHNNYXA6Oml0ZXJhdG9yIHNuYXBzaG90c0VuZCA9IG1fc25hcHNo
b3RzLmVuZCgpOwogICAgIGZvciAoSGVhcFNuYXBzaG90c01hcDo6aXRlcmF0b3IgaXQgPSBtX3Nu
YXBzaG90cy5iZWdpbigpOyBpdCAhPSBzbmFwc2hvdHNFbmQ7ICsraXQpCi0gICAgICAgIGhlYWRl
cnMtPmFkZEl0ZW0oY3JlYXRlU25hcHNob3RIZWFkZXIoKml0LT5zZWNvbmQpKTsKKyAgICAgICAg
aGVhZGVycy0+YWRkSXRlbShjcmVhdGVTbmFwc2hvdEhlYWRlcigqaXQtPnZhbHVlKSk7CiB9CiAK
IG5hbWVzcGFjZSB7CkBAIC0yNzcsMTYgKzI3NywxNiBAQCB2b2lkIEluc3BlY3RvclByb2ZpbGVy
QWdlbnQ6OmdldFByb2ZpbGUoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcm
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgcHJvZmlsZU9iamVjdCA9
IFR5cGVCdWlsZGVyOjpQcm9maWxlcjo6UHJvZmlsZTo6Y3JlYXRlKCk7Ci0gICAgICAgIHByb2Zp
bGVPYmplY3QtPnNldEhlYWQoaXQtPnNlY29uZC0+YnVpbGRJbnNwZWN0b3JPYmplY3RGb3JIZWFk
KCkpOwotICAgICAgICBpZiAoaXQtPnNlY29uZC0+Ym90dG9tVXBIZWFkKCkpCi0gICAgICAgICAg
ICBwcm9maWxlT2JqZWN0LT5zZXRCb3R0b21VcEhlYWQoaXQtPnNlY29uZC0+YnVpbGRJbnNwZWN0
b3JPYmplY3RGb3JCb3R0b21VcEhlYWQoKSk7CisgICAgICAgIHByb2ZpbGVPYmplY3QtPnNldEhl
YWQoaXQtPnZhbHVlLT5idWlsZEluc3BlY3Rvck9iamVjdEZvckhlYWQoKSk7CisgICAgICAgIGlm
IChpdC0+dmFsdWUtPmJvdHRvbVVwSGVhZCgpKQorICAgICAgICAgICAgcHJvZmlsZU9iamVjdC0+
c2V0Qm90dG9tVXBIZWFkKGl0LT52YWx1ZS0+YnVpbGRJbnNwZWN0b3JPYmplY3RGb3JCb3R0b21V
cEhlYWQoKSk7CiAgICAgfSBlbHNlIGlmICh0eXBlID09IEhlYXBQcm9maWxlVHlwZSkgewogICAg
ICAgICBIZWFwU25hcHNob3RzTWFwOjppdGVyYXRvciBpdCA9IG1fc25hcHNob3RzLmZpbmQodWlk
KTsKICAgICAgICAgaWYgKGl0ID09IG1fc25hcHNob3RzLmVuZCgpKSB7CiAgICAgICAgICAgICAq
ZXJyb3JTdHJpbmcgPSAiUHJvZmlsZSB3YXNuJ3QgZm91bmQiOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9Ci0gICAgICAgIFJlZlB0cjxTY3JpcHRIZWFwU25hcHNob3Q+IHNuYXBzaG90
ID0gaXQtPnNlY29uZDsKKyAgICAgICAgUmVmUHRyPFNjcmlwdEhlYXBTbmFwc2hvdD4gc25hcHNo
b3QgPSBpdC0+dmFsdWU7CiAgICAgICAgIHByb2ZpbGVPYmplY3QgPSBUeXBlQnVpbGRlcjo6UHJv
ZmlsZXI6OlByb2ZpbGU6OmNyZWF0ZSgpOwogICAgICAgICBpZiAobV9mcm9udGVuZCkgewogICAg
ICAgICAgICAgT3V0cHV0U3RyZWFtIHN0cmVhbShtX2Zyb250ZW5kLCB1aWQpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuY3BwCmluZGV4
IDY1MTQ4YjIyMWM1YTMxYzgwZDM5YWM0ZDc0NjQ2NGY1ZjA1NjM0MzYuLmE0MDY4NGQzZTlkZGIw
NmJkNTdjNjg0YmNkYzBiZDY2OWE0MmY5ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5jcHAKQEAgLTEwMSw3ICsxMDEsNyBAQCBz
dGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9ySGVhZGVycyhj
b25zdCBIVFRQSGVhZGVyTWFwJiBoZQogICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGhlYWRl
cnNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIEhUVFBIZWFkZXJNYXA6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGhlYWRlcnMuZW5kKCk7CiAgICAgZm9yIChIVFRQSGVhZGVy
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGhlYWRlcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KQotICAgICAgICBoZWFkZXJzT2JqZWN0LT5zZXRTdHJpbmcoaXQtPmZpcnN0LnN0cmluZygpLCBp
dC0+c2Vjb25kKTsKKyAgICAgICAgaGVhZGVyc09iamVjdC0+c2V0U3RyaW5nKGl0LT5rZXkuc3Ry
aW5nKCksIGl0LT52YWx1ZSk7CiAgICAgcmV0dXJuIGhlYWRlcnNPYmplY3Q7CiB9CiAKQEAgLTIx
Miw4ICsyMTIsOCBAQCB2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OndpbGxTZW5kUmVxdWVz
dCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIERvY3VtZW50TAogICAgICAgICBJbnNwZWN0b3JP
YmplY3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGhlYWRlcnMtPmVuZCgpOwogICAgICAgICBmb3Ig
KEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBoZWFkZXJzLT5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIFN0cmluZyB2YWx1ZTsKLSAgICAgICAgICAg
IGlmIChpdC0+c2Vjb25kLT5hc1N0cmluZygmdmFsdWUpKQotICAgICAgICAgICAgICAgIHJlcXVl
c3Quc2V0SFRUUEhlYWRlckZpZWxkKGl0LT5maXJzdCwgdmFsdWUpOworICAgICAgICAgICAgaWYg
KGl0LT52YWx1ZS0+YXNTdHJpbmcoJnZhbHVlKSkKKyAgICAgICAgICAgICAgICByZXF1ZXN0LnNl
dEhUVFBIZWFkZXJGaWVsZChpdC0+a2V5LCB2YWx1ZSk7CiAgICAgICAgIH0KICAgICB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUuY3BwCmluZGV4IDcwYTI0Mzk4
NDdjNDU3YzM4YTM5MGEzMzAwNGEzZDllMWIxZGI0MWQuLmJhZjEwYzk3MWUxMTk1MzI1NzZiZjQ5
NDU1MjJmMzdiMDgzMjVhZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JTdGF0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
clN0YXRlLmNwcApAQCAtODAsNyArODAsNyBAQCBib29sIEluc3BlY3RvclN0YXRlOjpnZXRCb29s
ZWFuKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKQogICAgIEluc3BlY3Rvck9iamVjdDo6aXRl
cmF0b3IgaXQgPSBtX3Byb3BlcnRpZXMtPmZpbmQocHJvcGVydHlOYW1lKTsKICAgICBib29sIHZh
bHVlID0gZmFsc2U7CiAgICAgaWYgKGl0ICE9IG1fcHJvcGVydGllcy0+ZW5kKCkpCi0gICAgICAg
IGl0LT5zZWNvbmQtPmFzQm9vbGVhbigmdmFsdWUpOworICAgICAgICBpdC0+dmFsdWUtPmFzQm9v
bGVhbigmdmFsdWUpOwogICAgIHJldHVybiB2YWx1ZTsKIH0KIApAQCAtODksNyArODksNyBAQCBT
dHJpbmcgSW5zcGVjdG9yU3RhdGU6OmdldFN0cmluZyhjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFt
ZSkKICAgICBJbnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9yIGl0ID0gbV9wcm9wZXJ0aWVzLT5maW5k
KHByb3BlcnR5TmFtZSk7CiAgICAgU3RyaW5nIHZhbHVlOwogICAgIGlmIChpdCAhPSBtX3Byb3Bl
cnRpZXMtPmVuZCgpKQotICAgICAgICBpdC0+c2Vjb25kLT5hc1N0cmluZygmdmFsdWUpOworICAg
ICAgICBpdC0+dmFsdWUtPmFzU3RyaW5nKCZ2YWx1ZSk7CiAgICAgcmV0dXJuIHZhbHVlOwogfQog
CkBAIC05OCw3ICs5OCw3IEBAIGxvbmcgSW5zcGVjdG9yU3RhdGU6OmdldExvbmcoY29uc3QgU3Ry
aW5nJiBwcm9wZXJ0eU5hbWUpCiAgICAgSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciBpdCA9IG1f
cHJvcGVydGllcy0+ZmluZChwcm9wZXJ0eU5hbWUpOwogICAgIGxvbmcgdmFsdWUgPSAwOwogICAg
IGlmIChpdCAhPSBtX3Byb3BlcnRpZXMtPmVuZCgpKQotICAgICAgICBpdC0+c2Vjb25kLT5hc051
bWJlcigmdmFsdWUpOworICAgICAgICBpdC0+dmFsdWUtPmFzTnVtYmVyKCZ2YWx1ZSk7CiAgICAg
cmV0dXJuIHZhbHVlOwogfQogCkBAIC0xMDcsNyArMTA3LDcgQEAgZG91YmxlIEluc3BlY3RvclN0
YXRlOjpnZXREb3VibGUoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCiAgICAgSW5zcGVjdG9y
T2JqZWN0OjppdGVyYXRvciBpdCA9IG1fcHJvcGVydGllcy0+ZmluZChwcm9wZXJ0eU5hbWUpOwog
ICAgIGRvdWJsZSB2YWx1ZSA9IDA7CiAgICAgaWYgKGl0ICE9IG1fcHJvcGVydGllcy0+ZW5kKCkp
Ci0gICAgICAgIGl0LT5zZWNvbmQtPmFzTnVtYmVyKCZ2YWx1ZSk7CisgICAgICAgIGl0LT52YWx1
ZS0+YXNOdW1iZXIoJnZhbHVlKTsKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKQEAgLTExOCw3ICsx
MTgsNyBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yU3RhdGU6OmdldE9i
amVjdChjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZQogICAgICAgICBtX3Byb3BlcnRpZXMtPnNl
dE9iamVjdChwcm9wZXJ0eU5hbWUsIEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOwogICAgICAg
ICBpdCA9IG1fcHJvcGVydGllcy0+ZmluZChwcm9wZXJ0eU5hbWUpOwogICAgIH0KLSAgICByZXR1
cm4gaXQtPnNlY29uZC0+YXNPYmplY3QoKTsKKyAgICByZXR1cm4gaXQtPnZhbHVlLT5hc09iamVj
dCgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKaW5kZXggNmEzZGUwOTZjMmQxM2U1YTQ2
YmUwMmQyNmQ0M2Q1ZDZhZWMxOTdkMC4uY2JlZTY4YTZlY2Y1MjJmNGVmOGVhMmFiNDkwNTNkYTIx
MWZiNjRmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0
eWxlU2hlZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHls
ZVNoZWV0LmNwcApAQCAtNTM1LDcgKzUzNSw3IEBAIFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNT
Uzo6Q1NTU3R5bGU+IEluc3BlY3RvclN0eWxlOjpzdHlsZVdpdGhQcm9wZXJ0aWVzKCkgY29uCiAg
ICAgICAgICAgICAgICAgICAgICAgICBzaG91bGRJbmFjdGl2YXRlID0gdHJ1ZTsKICAgICAgICAg
ICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHByZXZpb3Vz
UGFyc2VkT2s7Ci0gICAgICAgICAgICAgICAgICAgICAgICBib29sIHN1Y2Nlc3MgPSBhY3RpdmVJ
dC0+c2Vjb25kLT5nZXRCb29sZWFuKFR5cGVCdWlsZGVyOjpDU1M6OkNTU1Byb3BlcnR5OjpQYXJz
ZWRPaywgJnByZXZpb3VzUGFyc2VkT2spOworICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBz
dWNjZXNzID0gYWN0aXZlSXQtPnZhbHVlLT5nZXRCb29sZWFuKFR5cGVCdWlsZGVyOjpDU1M6OkNT
U1Byb3BlcnR5OjpQYXJzZWRPaywgJnByZXZpb3VzUGFyc2VkT2spOwogICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgIXByZXZpb3VzUGFyc2VkT2spCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2hvdWxkSW5hY3RpdmF0ZSA9IHRydWU7CiAgICAgICAgICAgICAgICAg
ICAgIH0KQEAgLTU0Myw3ICs1NDMsNyBAQCBQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNT
U1N0eWxlPiBJbnNwZWN0b3JTdHlsZTo6c3R5bGVXaXRoUHJvcGVydGllcygpIGNvbgogICAgICAg
ICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVUb1ByZXZpb3VzQWN0aXZlUHJvcGVydHkuc2V0KGNh
bm9uaWNhbFByb3BlcnR5TmFtZSwgcHJvcGVydHkpOwogCiAgICAgICAgICAgICAgICAgaWYgKHNo
b3VsZEluYWN0aXZhdGUpIHsKLSAgICAgICAgICAgICAgICAgICAgYWN0aXZlSXQtPnNlY29uZC0+
c2V0U3RhdHVzKFR5cGVCdWlsZGVyOjpDU1M6OkNTU1Byb3BlcnR5OjpTdGF0dXM6OkluYWN0aXZl
KTsKKyAgICAgICAgICAgICAgICAgICAgYWN0aXZlSXQtPnZhbHVlLT5zZXRTdGF0dXMoVHlwZUJ1
aWxkZXI6OkNTUzo6Q1NTUHJvcGVydHk6OlN0YXR1czo6SW5hY3RpdmUpOwogICAgICAgICAgICAg
ICAgICAgICBwcm9wZXJ0eU5hbWVUb1ByZXZpb3VzQWN0aXZlUHJvcGVydHkuc2V0KGNhbm9uaWNh
bFByb3BlcnR5TmFtZSwgcHJvcGVydHkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0gZWxzZSB7CkBAIC0xMDM1LDcgKzEwMzUsNyBAQCBQYXNzUmVmUHRyPEluc3BlY3RvclN0eWxl
PiBJbnNwZWN0b3JTdHlsZVNoZWV0OjppbnNwZWN0b3JTdHlsZUZvcklkKGNvbnN0IEluc3BlYwog
ICAgICAgICBSZWZQdHI8SW5zcGVjdG9yU3R5bGU+IGluc3BlY3RvclN0eWxlID0gSW5zcGVjdG9y
U3R5bGU6OmNyZWF0ZShpZCwgc3R5bGUsIHRoaXMpOwogICAgICAgICByZXR1cm4gaW5zcGVjdG9y
U3R5bGUucmVsZWFzZSgpOwogICAgIH0KLSAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICByZXR1
cm4gaXQtPnZhbHVlOwogfQogCiB2b2lkIEluc3BlY3RvclN0eWxlU2hlZXQ6OnJlbWVtYmVySW5z
cGVjdG9yU3R5bGUoUmVmUHRyPEluc3BlY3RvclN0eWxlPiBpbnNwZWN0b3JTdHlsZSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAKaW5kZXggYjZjNzE0YmRl
NGI3MTdlM2I0NzBkOTZiNDYxZDQ3Nzk3MDViYzVjYS4uOTNjNmQzOTE0ZjE3YjRiNzU4ZTc3ZDc4
ZDExOGQ0NzQwYjc3YWQwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclZhbHVlcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
clZhbHVlcy5jcHAKQEAgLTcxNyw3ICs3MTcsNyBAQCBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVl
PiBJbnNwZWN0b3JPYmplY3RCYXNlOjpnZXQoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAogICAg
IERpY3Rpb25hcnk6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9kYXRhLmZpbmQobmFtZSk7CiAgICAg
aWYgKGl0ID09IG1fZGF0YS5lbmQoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGl0
LT5zZWNvbmQ7CisgICAgcmV0dXJuIGl0LT52YWx1ZTsKIH0KIAogdm9pZCBJbnNwZWN0b3JPYmpl
Y3RCYXNlOjpyZW1vdmUoY29uc3QgU3RyaW5nJiBuYW1lKQpAQCAtNzM5LDkgKzczOSw5IEBAIHZv
aWQgSW5zcGVjdG9yT2JqZWN0QmFzZTo6d3JpdGVKU09OKFN0cmluZ0J1aWxkZXIqIG91dHB1dCkg
Y29uc3QKICAgICAgICAgQVNTRVJUKGl0ICE9IG1fZGF0YS5lbmQoKSk7CiAgICAgICAgIGlmIChp
KQogICAgICAgICAgICAgb3V0cHV0LT5hcHBlbmQoJywnKTsKLSAgICAgICAgZG91YmxlUXVvdGVT
dHJpbmcoaXQtPmZpcnN0LCBvdXRwdXQpOworICAgICAgICBkb3VibGVRdW90ZVN0cmluZyhpdC0+
a2V5LCBvdXRwdXQpOwogICAgICAgICBvdXRwdXQtPmFwcGVuZCgnOicpOwotICAgICAgICBpdC0+
c2Vjb25kLT53cml0ZUpTT04ob3V0cHV0KTsKKyAgICAgICAgaXQtPnZhbHVlLT53cml0ZUpTT04o
b3V0cHV0KTsKICAgICB9CiAgICAgb3V0cHV0LT5hcHBlbmQoJ30nKTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JXb3JrZXJBZ2VudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yV29ya2VyQWdlbnQuY3BwCmluZGV4IDFiMzg1
OTU3MWNhZmMyM2U0YzU0MWQzNDljMjYwZGExZmU0ZjNiOTYuLjA2MWY0NzRlZjEwNTAwNGNkODg2
OGJmNjVhN2FiYWRjNjVjZGNlYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JXb3JrZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvcldvcmtlckFnZW50LmNwcApAQCAtMTk5LDkgKzE5OSw5IEBAIHZvaWQgSW5zcGVj
dG9yV29ya2VyQWdlbnQ6OndvcmtlckNvbnRleHRUZXJtaW5hdGVkKFdvcmtlckNvbnRleHRQcm94
eSogcHJveHkpCiB7CiAgICAgbV9kZWRpY2F0ZWRXb3JrZXJzLnJlbW92ZShwcm94eSk7CiAgICAg
Zm9yIChXb3JrZXJDaGFubmVsczo6aXRlcmF0b3IgaXQgPSBtX2lkVG9DaGFubmVsLmJlZ2luKCk7
IGl0ICE9IG1faWRUb0NoYW5uZWwuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgaWYgKHByb3h5ID09
IGl0LT5zZWNvbmQtPnByb3h5KCkpIHsKLSAgICAgICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmQt
PndvcmtlcigpLT53b3JrZXJUZXJtaW5hdGVkKGl0LT5maXJzdCk7Ci0gICAgICAgICAgICBkZWxl
dGUgaXQtPnNlY29uZDsKKyAgICAgICAgaWYgKHByb3h5ID09IGl0LT52YWx1ZS0+cHJveHkoKSkg
eworICAgICAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZC0+d29ya2VyKCktPndvcmtlclRlcm1p
bmF0ZWQoaXQtPmtleSk7CisgICAgICAgICAgICBkZWxldGUgaXQtPnZhbHVlOwogICAgICAgICAg
ICAgbV9pZFRvQ2hhbm5lbC5yZW1vdmUoaXQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CkBAIC0yMTEsMTQgKzIxMSwxNCBAQCB2b2lkIEluc3BlY3RvcldvcmtlckFnZW50Ojp3b3Jr
ZXJDb250ZXh0VGVybWluYXRlZChXb3JrZXJDb250ZXh0UHJveHkqIHByb3h5KQogdm9pZCBJbnNw
ZWN0b3JXb3JrZXJBZ2VudDo6Y3JlYXRlV29ya2VyRnJvbnRlbmRDaGFubmVsc0ZvckV4aXN0aW5n
V29ya2VycygpCiB7CiAgICAgZm9yIChEZWRpY2F0ZWRXb3JrZXJzOjppdGVyYXRvciBpdCA9IG1f
ZGVkaWNhdGVkV29ya2Vycy5iZWdpbigpOyBpdCAhPSBtX2RlZGljYXRlZFdvcmtlcnMuZW5kKCk7
ICsraXQpCi0gICAgICAgIGNyZWF0ZVdvcmtlckZyb250ZW5kQ2hhbm5lbChpdC0+Zmlyc3QsIGl0
LT5zZWNvbmQpOworICAgICAgICBjcmVhdGVXb3JrZXJGcm9udGVuZENoYW5uZWwoaXQtPmtleSwg
aXQtPnZhbHVlKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JXb3JrZXJBZ2VudDo6ZGVzdHJveVdvcmtl
ckZyb250ZW5kQ2hhbm5lbHMoKQogewogICAgIGZvciAoV29ya2VyQ2hhbm5lbHM6Oml0ZXJhdG9y
IGl0ID0gbV9pZFRvQ2hhbm5lbC5iZWdpbigpOyBpdCAhPSBtX2lkVG9DaGFubmVsLmVuZCgpOyAr
K2l0KSB7Ci0gICAgICAgIGl0LT5zZWNvbmQtPmRpc2Nvbm5lY3RGcm9tV29ya2VyQ29udGV4dCgp
OwotICAgICAgICBkZWxldGUgaXQtPnNlY29uZDsKKyAgICAgICAgaXQtPnZhbHVlLT5kaXNjb25u
ZWN0RnJvbVdvcmtlckNvbnRleHQoKTsKKyAgICAgICAgZGVsZXRlIGl0LT52YWx1ZTsKICAgICB9
CiAgICAgbV9pZFRvQ2hhbm5lbC5jbGVhcigpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL05ldHdvcmtSZXNvdXJjZXNEYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0YS5jcHAKaW5kZXggNmNjMDFjNzZlMjY5OTQ5NGUz
MmQ4NGFjMTc3MDk3YTg4OWUxMGY0Ni4uYjk5MmE0ZGMyOTAzYWEzZGNmMmM4MzY5YTI3ODBkYTVm
M2U1MDVmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL05ldHdvcmtSZXNv
dXJjZXNEYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvTmV0d29ya1Jlc291
cmNlc0RhdGEuY3BwCkBAIC0yNTQsMTAgKzI1NCwxMCBAQCBWZWN0b3I8U3RyaW5nPiBOZXR3b3Jr
UmVzb3VyY2VzRGF0YTo6cmVtb3ZlQ2FjaGVkUmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2UqIGNhY2hl
ZAogICAgIFJlc291cmNlRGF0YU1hcDo6aXRlcmF0b3IgaXQ7CiAgICAgUmVzb3VyY2VEYXRhTWFw
OjppdGVyYXRvciBlbmQgPSBtX3JlcXVlc3RJZFRvUmVzb3VyY2VEYXRhTWFwLmVuZCgpOwogICAg
IGZvciAoaXQgPSBtX3JlcXVlc3RJZFRvUmVzb3VyY2VEYXRhTWFwLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewotICAgICAgICBSZXNvdXJjZURhdGEqIHJlc291cmNlRGF0YSA9IGl0LT5zZWNv
bmQ7CisgICAgICAgIFJlc291cmNlRGF0YSogcmVzb3VyY2VEYXRhID0gaXQtPnZhbHVlOwogICAg
ICAgICBpZiAocmVzb3VyY2VEYXRhLT5jYWNoZWRSZXNvdXJjZSgpID09IGNhY2hlZFJlc291cmNl
KSB7CiAgICAgICAgICAgICByZXNvdXJjZURhdGEtPnNldENhY2hlZFJlc291cmNlKDApOwotICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZChpdC0+Zmlyc3QpOworICAgICAgICAgICAgcmVzdWx0LmFw
cGVuZChpdC0+a2V5KTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjc0LDkgKzI3NCw5IEBAIHZv
aWQgTmV0d29ya1Jlc291cmNlc0RhdGE6OmNsZWFyKGNvbnN0IFN0cmluZyYgcHJlc2VydmVkTG9h
ZGVySWQpCiAgICAgUmVzb3VyY2VEYXRhTWFwOjppdGVyYXRvciBpdDsKICAgICBSZXNvdXJjZURh
dGFNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fcmVxdWVzdElkVG9SZXNvdXJjZURhdGFNYXAuZW5kKCk7
CiAgICAgZm9yIChpdCA9IG1fcmVxdWVzdElkVG9SZXNvdXJjZURhdGFNYXAuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFJlc291cmNlRGF0YSogcmVzb3VyY2VEYXRhID0gaXQt
PnNlY29uZDsKKyAgICAgICAgUmVzb3VyY2VEYXRhKiByZXNvdXJjZURhdGEgPSBpdC0+dmFsdWU7
CiAgICAgICAgIGlmICghcHJlc2VydmVkTG9hZGVySWQuaXNOdWxsKCkgJiYgcmVzb3VyY2VEYXRh
LT5sb2FkZXJJZCgpID09IHByZXNlcnZlZExvYWRlcklkKQotICAgICAgICAgICAgcHJlc2VydmVk
TWFwLnNldChpdC0+Zmlyc3QsIGl0LT5zZWNvbmQpOworICAgICAgICAgICAgcHJlc2VydmVkTWFw
LnNldChpdC0+a2V5LCBpdC0+dmFsdWUpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBkZWxl
dGUgcmVzb3VyY2VEYXRhOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9Dcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Ny
b3NzT3JpZ2luQWNjZXNzQ29udHJvbC5jcHAKaW5kZXggYWJhMmJhMDYzZTU5MzA4ZmFlYzQ0YmZj
NzhkZmFmOGQ5Yjg0NWEwYi4uOWIyNmZjODZjOTA0MzkzOTUxNWYxMGFlNjllYmI2NTUzMGMwYjQz
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luQWNjZXNzQ29u
dHJvbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luQWNjZXNzQ29u
dHJvbC5jcHAKQEAgLTY4LDcgKzY4LDcgQEAgYm9vbCBpc1NpbXBsZUNyb3NzT3JpZ2luQWNjZXNz
UmVxdWVzdChjb25zdCBTdHJpbmcmIG1ldGhvZCwgY29uc3QgSFRUUEhlYWRlck1hcCYKIAogICAg
IEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGhlYWRlck1hcC5lbmQoKTsKICAg
ICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaGVhZGVyTWFwLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoIWlzT25BY2Nlc3NDb250cm9sU2lt
cGxlUmVxdWVzdEhlYWRlcldoaXRlbGlzdChpdC0+Zmlyc3QsIGl0LT5zZWNvbmQpKQorICAgICAg
ICBpZiAoIWlzT25BY2Nlc3NDb250cm9sU2ltcGxlUmVxdWVzdEhlYWRlcldoaXRlbGlzdChpdC0+
a2V5LCBpdC0+dmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAt
MTE2LDE0ICsxMTYsMTQgQEAgUmVzb3VyY2VSZXF1ZXN0IGNyZWF0ZUFjY2Vzc0NvbnRyb2xQcmVm
bGlnaHRSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWUKICAgICBpZiAocmVxdWVz
dEhlYWRlckZpZWxkcy5zaXplKCkgPiAwKSB7CiAgICAgICAgIFN0cmluZ0J1aWxkZXIgaGVhZGVy
QnVmZmVyOwogICAgICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHJlcXVl
c3RIZWFkZXJGaWVsZHMuYmVnaW4oKTsKLSAgICAgICAgaGVhZGVyQnVmZmVyLmFwcGVuZChpdC0+
Zmlyc3QpOworICAgICAgICBoZWFkZXJCdWZmZXIuYXBwZW5kKGl0LT5rZXkpOwogICAgICAgICAr
K2l0OwogCiAgICAgICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHJlcXVl
c3RIZWFkZXJGaWVsZHMuZW5kKCk7CiAgICAgICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsK
ICAgICAgICAgICAgIGhlYWRlckJ1ZmZlci5hcHBlbmQoJywnKTsKICAgICAgICAgICAgIGhlYWRl
ckJ1ZmZlci5hcHBlbmQoJyAnKTsKLSAgICAgICAgICAgIGhlYWRlckJ1ZmZlci5hcHBlbmQoaXQt
PmZpcnN0KTsKKyAgICAgICAgICAgIGhlYWRlckJ1ZmZlci5hcHBlbmQoaXQtPmtleSk7CiAgICAg
ICAgIH0KIAogICAgICAgICBwcmVmbGlnaHRSZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZCgiQWNj
ZXNzLUNvbnRyb2wtUmVxdWVzdC1IZWFkZXJzIiwgaGVhZGVyQnVmZmVyLnRvU3RyaW5nKCkubG93
ZXIoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5QcmVm
bGlnaHRSZXN1bHRDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5Q
cmVmbGlnaHRSZXN1bHRDYWNoZS5jcHAKaW5kZXggMDRkNTg4MTU1Y2U1NTMzYmRkZDNmMDJiM2Jk
ODE1ZWQ5ZWUzOTllYi4uOWQ1MWM4N2ZlNmM0ZTdkNDM5MzNlNDVlZWY3ZDVjMTliZDVlMjA4NCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luUHJlZmxpZ2h0UmVz
dWx0Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpblByZWZs
aWdodFJlc3VsdENhY2hlLmNwcApAQCAtMTI1LDggKzEyNSw4IEBAIGJvb2wgQ3Jvc3NPcmlnaW5Q
cmVmbGlnaHRSZXN1bHRDYWNoZUl0ZW06OmFsbG93c0Nyb3NzT3JpZ2luSGVhZGVycyhjb25zdCBI
VFRQSGVhCiB7CiAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcmVxdWVz
dEhlYWRlcnMuZW5kKCk7CiAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IHJlcXVlc3RIZWFkZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBp
ZiAoIW1faGVhZGVycy5jb250YWlucyhpdC0+Zmlyc3QpICYmICFpc09uQWNjZXNzQ29udHJvbFNp
bXBsZVJlcXVlc3RIZWFkZXJXaGl0ZWxpc3QoaXQtPmZpcnN0LCBpdC0+c2Vjb25kKSkgewotICAg
ICAgICAgICAgZXJyb3JEZXNjcmlwdGlvbiA9ICJSZXF1ZXN0IGhlYWRlciBmaWVsZCAiICsgaXQt
PmZpcnN0LnN0cmluZygpICsgIiBpcyBub3QgYWxsb3dlZCBieSBBY2Nlc3MtQ29udHJvbC1BbGxv
dy1IZWFkZXJzLiI7CisgICAgICAgIGlmICghbV9oZWFkZXJzLmNvbnRhaW5zKGl0LT5rZXkpICYm
ICFpc09uQWNjZXNzQ29udHJvbFNpbXBsZVJlcXVlc3RIZWFkZXJXaGl0ZWxpc3QoaXQtPmtleSwg
aXQtPnZhbHVlKSkgeworICAgICAgICAgICAgZXJyb3JEZXNjcmlwdGlvbiA9ICJSZXF1ZXN0IGhl
YWRlciBmaWVsZCAiICsgaXQtPmtleS5zdHJpbmcoKSArICIgaXMgbm90IGFsbG93ZWQgYnkgQWNj
ZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVycy4iOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICB9CiAgICAgfQpAQCAtMTY3LDcgKzE2Nyw3IEBAIGJvb2wgQ3Jvc3NPcmlnaW5QcmVm
bGlnaHRSZXN1bHRDYWNoZTo6Y2FuU2tpcFByZWZsaWdodChjb25zdCBTdHJpbmcmIG9yaWdpbiwg
Y29uCiAgICAgaWYgKGNhY2hlSXQgPT0gbV9wcmVmbGlnaHRIYXNoTWFwLmVuZCgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoY2FjaGVJdC0+c2Vjb25kLT5hbGxvd3NSZXF1ZXN0
KGluY2x1ZGVDcmVkZW50aWFscywgbWV0aG9kLCByZXF1ZXN0SGVhZGVycykpCisgICAgaWYgKGNh
Y2hlSXQtPnZhbHVlLT5hbGxvd3NSZXF1ZXN0KGluY2x1ZGVDcmVkZW50aWFscywgbWV0aG9kLCBy
ZXF1ZXN0SGVhZGVycykpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgbV9wcmVmbGlnaHRI
YXNoTWFwLnJlbW92ZShjYWNoZUl0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9Eb2N1bWVudExvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2Fk
ZXIuY3BwCmluZGV4IDNmNDkzYzFlYzg4MjkxNjU5YTI4ZjRlNGE4M2YxYmJjMjAyZTIyNjEuLjMw
MGZhMzM4ZTRkYjllOWRhZjZhNGFhMDBlMDI3OTc5MzE0MjFhZjQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
bG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcApAQCAtNjEwLDcgKzYxMCw3IEBAIHZvaWQgRG9jdW1l
bnRMb2FkZXI6OmdldFN1YnJlc291cmNlcyhWZWN0b3I8UGFzc1JlZlB0cjxBcmNoaXZlUmVzb3Vy
Y2U+ID4mIHN1YnJlCiAgICAgY29uc3QgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OkRvY3VtZW50UmVz
b3VyY2VNYXAmIGFsbFJlc291cmNlcyA9IGRvY3VtZW50LT5jYWNoZWRSZXNvdXJjZUxvYWRlcigp
LT5hbGxDYWNoZWRSZXNvdXJjZXMoKTsKICAgICBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6RG9jdW1l
bnRSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gYWxsUmVzb3VyY2VzLmVuZCgpOwog
ICAgIGZvciAoQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OkRvY3VtZW50UmVzb3VyY2VNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gYWxsUmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewot
ICAgICAgICBSZWZQdHI8QXJjaGl2ZVJlc291cmNlPiBzdWJyZXNvdXJjZSA9IHRoaXMtPnN1YnJl
c291cmNlKEtVUkwoUGFyc2VkVVJMU3RyaW5nLCBpdC0+c2Vjb25kLT51cmwoKSkpOworICAgICAg
ICBSZWZQdHI8QXJjaGl2ZVJlc291cmNlPiBzdWJyZXNvdXJjZSA9IHRoaXMtPnN1YnJlc291cmNl
KEtVUkwoUGFyc2VkVVJMU3RyaW5nLCBpdC0+dmFsdWUtPnVybCgpKSk7CiAgICAgICAgIGlmIChz
dWJyZXNvdXJjZSkKICAgICAgICAgICAgIHN1YnJlc291cmNlcy5hcHBlbmQoc3VicmVzb3VyY2Uu
cmVsZWFzZSgpKTsKICAgICB9CkBAIC02NDIsOCArNjQyLDggQEAgdm9pZCBEb2N1bWVudExvYWRl
cjo6c3Vic3RpdHV0ZVJlc291cmNlRGVsaXZlcnlUaW1lckZpcmVkKFRpbWVyPERvY3VtZW50TG9h
ZGVyPioKIAogICAgIFN1YnN0aXR1dGVSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
Y29weS5lbmQoKTsKICAgICBmb3IgKFN1YnN0aXR1dGVSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBjb3B5LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBSZWZQdHI8
UmVzb3VyY2VMb2FkZXI+IGxvYWRlciA9IGl0LT5maXJzdDsKLSAgICAgICAgU3Vic3RpdHV0ZVJl
c291cmNlKiByZXNvdXJjZSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIFJlZlB0cjxSZXNv
dXJjZUxvYWRlcj4gbG9hZGVyID0gaXQtPmtleTsKKyAgICAgICAgU3Vic3RpdHV0ZVJlc291cmNl
KiByZXNvdXJjZSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgCiAgICAgICAgIGlmIChyZXNv
dXJjZSkgewogICAgICAgICAgICAgU2hhcmVkQnVmZmVyKiBkYXRhID0gcmVzb3VyY2UtPmRhdGEo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9NYWluUmVzb3VyY2VMb2FkZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL01haW5SZXNvdXJjZUxvYWRlci5jcHAKaW5kZXgg
ZmU3ZDFmOWYyM2ZhMmMxMmEwMWUzNWI2NmVjNTcxOGQ2MDQ2NzU0MS4uOWNhNDgyOTgwZjdhMWNk
ZTM4YjBjYTY5MGQ3MTUyNDA1MjZhZDhmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL01haW5SZXNvdXJjZUxvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL01h
aW5SZXNvdXJjZUxvYWRlci5jcHAKQEAgLTM2Myw3ICszNjMsNyBAQCB2b2lkIE1haW5SZXNvdXJj
ZUxvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHIpCiAK
ICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHIuaHR0cEhlYWRlckZpZWxk
cygpLmZpbmQoQXRvbWljU3RyaW5nKCJ4LWZyYW1lLW9wdGlvbnMiKSk7CiAgICAgaWYgKGl0ICE9
IHIuaHR0cEhlYWRlckZpZWxkcygpLmVuZCgpKSB7Ci0gICAgICAgIFN0cmluZyBjb250ZW50ID0g
aXQtPnNlY29uZDsKKyAgICAgICAgU3RyaW5nIGNvbnRlbnQgPSBpdC0+dmFsdWU7CiAgICAgICAg
IGlmIChtX2ZyYW1lLT5sb2FkZXIoKS0+c2hvdWxkSW50ZXJydXB0TG9hZEZvclhGcmFtZU9wdGlv
bnMoY29udGVudCwgci51cmwoKSkpIHsKICAgICAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6Y29udGludWVBZnRlclhGcmFtZU9wdGlvbnNEZW5pZWQobV9mcmFtZS5nZXQoKSwgZG9j
dW1lbnRMb2FkZXIoKSwgaWRlbnRpZmllcigpLCByKTsKICAgICAgICAgICAgIERFRklORV9TVEFU
SUNfTE9DQUwoU3RyaW5nLCBjb25zb2xlTWVzc2FnZSwgKCJSZWZ1c2VkIHRvIGRpc3BsYXkgZG9j
dW1lbnQgYmVjYXVzZSBkaXNwbGF5IGZvcmJpZGRlbiBieSBYLUZyYW1lLU9wdGlvbnMuXG4iKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCmlu
ZGV4IDgwMDRkOGYyZWIyZDhiYzM2MDZhMDY5ZmM3ZWVhMzUxYWZjZmNkYWEuLjhlYjQ0ZDQ5ZDI5
YTY4NDY2NGQ4MzI1Y2EyNjFmNTc1YzY0MTBiNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCkBAIC0xNzQsNyArMTc0LDcgQEAgdm9pZCBS
ZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNlcnZlUGVuZGluZ1JlcXVlc3RzKFJlc291cmNlTG9hZFBy
aW9yaXR5IG1pbmltdW1QcmkKICAgICBtX2hvc3RzLmNoZWNrQ29uc2lzdGVuY3koKTsKICAgICBI
b3N0TWFwOjppdGVyYXRvciBlbmQgPSBtX2hvc3RzLmVuZCgpOwogICAgIGZvciAoSG9zdE1hcDo6
aXRlcmF0b3IgaXRlciA9IG1faG9zdHMuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikKLSAg
ICAgICAgaG9zdHNUb1NlcnZlLmFwcGVuZChpdGVyLT5zZWNvbmQpOworICAgICAgICBob3N0c1Rv
U2VydmUuYXBwZW5kKGl0ZXItPnZhbHVlKTsKIAogICAgIGludCBzaXplID0gaG9zdHNUb1NlcnZl
LnNpemUoKTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkgewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGUuY3BwIGIv
U291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGUuY3BwCmluZGV4
IDYzY2Q3YmJiZmE4Nzg5ZjRhZGIzZGY1MmNiNGU5YzE3ZGQ3MTU5NDQuLmI3ZWE2NTI0YzQwMzk3
NWZmMGRmOTQ2YTJmMGQwMTFjYjE3MDBhNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZS5jcHAKQEAgLTEwMCwxMSArMTAwLDExIEBA
IHVuc2lnbmVkIEFwcGxpY2F0aW9uQ2FjaGU6OnJlbW92ZVJlc291cmNlKGNvbnN0IFN0cmluZyYg
dXJsKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIC8vIFRoZSByZXNvdXJjZSBleGlzdHMsIGdl
dCBpdHMgdHlwZSBzbyB3ZSBjYW4gcmV0dXJuIGl0LgotICAgIHVuc2lnbmVkIHR5cGUgPSBpdC0+
c2Vjb25kLT50eXBlKCk7CisgICAgdW5zaWduZWQgdHlwZSA9IGl0LT52YWx1ZS0+dHlwZSgpOwog
CiAgICAgbV9yZXNvdXJjZXMucmVtb3ZlKGl0KTsKIAotICAgIG1fZXN0aW1hdGVkU2l6ZUluU3Rv
cmFnZSAtPSBpdC0+c2Vjb25kLT5lc3RpbWF0ZWRTaXplSW5TdG9yYWdlKCk7CisgICAgbV9lc3Rp
bWF0ZWRTaXplSW5TdG9yYWdlIC09IGl0LT52YWx1ZS0+ZXN0aW1hdGVkU2l6ZUluU3RvcmFnZSgp
OwogCiAgICAgcmV0dXJuIHR5cGU7CiB9ICAgIApAQCAtMTgwLDcgKzE4MCw3IEBAIHZvaWQgQXBw
bGljYXRpb25DYWNoZTo6Y2xlYXJTdG9yYWdlSUQoKQogICAgIAogICAgIFJlc291cmNlTWFwOjpj
b25zdF9pdGVyYXRvciBlbmQgPSBtX3Jlc291cmNlcy5lbmQoKTsKICAgICBmb3IgKFJlc291cmNl
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+Y2xlYXJTdG9yYWdlSUQoKTsKKyAgICAgICAgaXQt
PnZhbHVlLT5jbGVhclN0b3JhZ2VJRCgpOwogfQogICAgIAogdm9pZCBBcHBsaWNhdGlvbkNhY2hl
OjpkZWxldGVDYWNoZUZvck9yaWdpbihTZWN1cml0eU9yaWdpbiogb3JpZ2luKQpAQCAtMjE4LDgg
KzIxOCw4IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZTo6ZHVtcCgpCiAgICAgSGFzaE1hcDxTdHJp
bmcsIFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+ID46OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IG1fcmVzb3VyY2VzLmVuZCgpOwogICAgIAogICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIFJl
ZlB0cjxBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+ID46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9y
ZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIHByaW50ZigiJXMg
IiwgaXQtPmZpcnN0LmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgQXBwbGljYXRpb25DYWNoZVJl
c291cmNlOjpkdW1wVHlwZShpdC0+c2Vjb25kLT50eXBlKCkpOworICAgICAgICBwcmludGYoIiVz
ICIsIGl0LT5rZXkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICBBcHBsaWNhdGlvbkNhY2hlUmVz
b3VyY2U6OmR1bXBUeXBlKGl0LT52YWx1ZS0+dHlwZSgpKTsKICAgICB9CiB9CiAjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hl
R3JvdXAuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2Fj
aGVHcm91cC5jcHAKaW5kZXggNGU0MjkzOGJiNWQ1N2Q2MTJiZGYzNTBjZjE5MzQwNDAyNDI3OWFm
OS4uZDY0NTAzMGVmMDBlN2QwMTc4NzkwZjc3OTQwYzdiMGRjOGUzYTMwMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVHcm91cC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVHcm91
cC5jcHAKQEAgLTc3NSw5ICs3NzUsOSBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6ZGlk
RmluaXNoTG9hZGluZ01hbmlmZXN0KCkKICAgICBpZiAoaXNVcGdyYWRlQXR0ZW1wdCkgewogICAg
ICAgICBBcHBsaWNhdGlvbkNhY2hlOjpSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
bV9uZXdlc3RDYWNoZS0+ZW5kKCk7CiAgICAgICAgIGZvciAoQXBwbGljYXRpb25DYWNoZTo6UmVz
b3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9uZXdlc3RDYWNoZS0+YmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCB0eXBlID0gaXQtPnNlY29uZC0+
dHlwZSgpOworICAgICAgICAgICAgdW5zaWduZWQgdHlwZSA9IGl0LT52YWx1ZS0+dHlwZSgpOwog
ICAgICAgICAgICAgaWYgKHR5cGUgJiBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6Ok1hc3RlcikK
LSAgICAgICAgICAgICAgICBhZGRFbnRyeShpdC0+Zmlyc3QsIHR5cGUpOworICAgICAgICAgICAg
ICAgIGFkZEVudHJ5KGl0LT5rZXksIHR5cGUpOwogICAgICAgICB9CiAgICAgfQogICAgIApAQCAt
MTAxNiw3ICsxMDE2LDcgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OnN0YXJ0TG9hZGlu
Z0VudHJ5KCkKIAogICAgIEFTU0VSVCghbV9jdXJyZW50SGFuZGxlKTsKICAgICAKLSAgICBtX2N1
cnJlbnRIYW5kbGUgPSBjcmVhdGVSZXNvdXJjZUhhbmRsZShLVVJMKFBhcnNlZFVSTFN0cmluZywg
aXQtPmZpcnN0KSwgbV9uZXdlc3RDYWNoZSA/IG1fbmV3ZXN0Q2FjaGUtPnJlc291cmNlRm9yVVJM
KGl0LT5maXJzdCkgOiAwKTsKKyAgICBtX2N1cnJlbnRIYW5kbGUgPSBjcmVhdGVSZXNvdXJjZUhh
bmRsZShLVVJMKFBhcnNlZFVSTFN0cmluZywgaXQtPmtleSksIG1fbmV3ZXN0Q2FjaGUgPyBtX25l
d2VzdENhY2hlLT5yZXNvdXJjZUZvclVSTChpdC0+a2V5KSA6IDApOwogfQogCiB2b2lkIEFwcGxp
Y2F0aW9uQ2FjaGVHcm91cDo6ZGVsaXZlckRlbGF5ZWRNYWluUmVzb3VyY2VzKCkKQEAgLTEwNjUs
NyArMTA2NSw3IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjphZGRFbnRyeShjb25zdCBT
dHJpbmcmIHVybCwgdW5zaWduZWQgdHlwZSkKICAgICBFbnRyeU1hcDo6QWRkUmVzdWx0IHJlc3Vs
dCA9IG1fcGVuZGluZ0VudHJpZXMuYWRkKHVybCwgdHlwZSk7CiAgICAgCiAgICAgaWYgKCFyZXN1
bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgfD0gdHlwZTsK
KyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSB8PSB0eXBlOwogfQogCiB2b2lkIEFwcGxp
Y2F0aW9uQ2FjaGVHcm91cDo6YXNzb2NpYXRlRG9jdW1lbnRMb2FkZXJXaXRoQ2FjaGUoRG9jdW1l
bnRMb2FkZXIqIGxvYWRlciwgQXBwbGljYXRpb25DYWNoZSogY2FjaGUpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUhvc3QuY3BwIGIv
U291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVIb3N0LmNwcApp
bmRleCA4MDFjMWIzNjcwMzFhMzM5ZGI0NDcwN2E5MmQxYmM4MGQ0MWQ4Yzc5Li5mZTlmMDEwYTBm
ZTY1MDNkMGJjNWU1YjkyNzcwYTNmN2I2NDM0NGZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlSG9zdC5jcHAKQEAgLTI4Miw3
ICsyODIsNyBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpmaWxsUmVzb3VyY2VMaXN0KFJl
c291cmNlSW5mb0xpc3QqIHJlc291cmNlcykKICAgICAgCiAgICAgQXBwbGljYXRpb25DYWNoZTo6
UmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGNhY2hlLT5lbmQoKTsKICAgICBmb3Ig
KEFwcGxpY2F0aW9uQ2FjaGU6OlJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGNhY2hl
LT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgUmVmUHRyPEFwcGxpY2F0aW9u
Q2FjaGVSZXNvdXJjZT4gcmVzb3VyY2UgPSBpdC0+c2Vjb25kOworICAgICAgICBSZWZQdHI8QXBw
bGljYXRpb25DYWNoZVJlc291cmNlPiByZXNvdXJjZSA9IGl0LT52YWx1ZTsKICAgICAgICAgdW5z
aWduZWQgdHlwZSA9IHJlc291cmNlLT50eXBlKCk7CiAgICAgICAgIGJvb2wgaXNNYXN0ZXIgICA9
IHR5cGUgJiBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6Ok1hc3RlcjsKICAgICAgICAgYm9vbCBp
c01hbmlmZXN0ID0gdHlwZSAmIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6TWFuaWZlc3Q7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNo
ZVJlc291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlv
bkNhY2hlUmVzb3VyY2UuY3BwCmluZGV4IGQ4MzE3ODRiNDE5NmFkZjM4MmNmMzU1ZTBlZWYwMmQ2
YTdhODA3OTAuLjk5NzY2ZTNhNjZiZDM2ZWI0MmZlZDJhOTI2OWQzNGIwNjYxOTRkN2YgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlUmVz
b3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlv
bkNhY2hlUmVzb3VyY2UuY3BwCkBAIC01NCw3ICs1NCw3IEBAIGludDY0X3QgQXBwbGljYXRpb25D
YWNoZVJlc291cmNlOjplc3RpbWF0ZWRTaXplSW5TdG9yYWdlKCkKIAogICAgIEhUVFBIZWFkZXJN
YXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHJlc3BvbnNlKCkuaHR0cEhlYWRlckZpZWxkcygpLmVu
ZCgpOwogICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSByZXNwb25z
ZSgpLmh0dHBIZWFkZXJGaWVsZHMoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAg
IG1fZXN0aW1hdGVkU2l6ZUluU3RvcmFnZSArPSAoaXQtPmZpcnN0Lmxlbmd0aCgpICsgaXQtPnNl
Y29uZC5sZW5ndGgoKSArIDIpICogc2l6ZW9mKFVDaGFyKTsKKyAgICAgICAgbV9lc3RpbWF0ZWRT
aXplSW5TdG9yYWdlICs9IChpdC0+a2V5Lmxlbmd0aCgpICsgaXQtPnZhbHVlLmxlbmd0aCgpICsg
MikgKiBzaXplb2YoVUNoYXIpOwogCiAgICAgbV9lc3RpbWF0ZWRTaXplSW5TdG9yYWdlICs9IHVy
bCgpLnN0cmluZygpLmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKTsKICAgICBtX2VzdGltYXRlZFNp
emVJblN0b3JhZ2UgKz0gc2l6ZW9mKGludCk7IC8vIHJlc3BvbnNlKCkubV9odHRwU3RhdHVzQ29k
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9u
Q2FjaGVTdG9yYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNh
dGlvbkNhY2hlU3RvcmFnZS5jcHAKaW5kZXggNWQxMDNiMmZmN2I0Y2JhNTRlMDM3YmE2Yzg3OTYy
MzA0ZDA1ZWU2MS4uNWE5MDgxZmYyZGVjOGZjZTYyMjMxNzhiMGUwOWM1OGY1YjI4OThmNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVT
dG9yYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRp
b25DYWNoZVN0b3JhZ2UuY3BwCkBAIC0xMzcsOCArMTM3LDggQEAgQXBwbGljYXRpb25DYWNoZUdy
b3VwKiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZmluZE9yQ3JlYXRlQ2FjaGVHcm91cChjb25z
dCBLVVIKICAgICBDYWNoZUdyb3VwTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9jYWNoZXNJbk1l
bW9yeS5hZGQobWFuaWZlc3RVUkwsIDApOwogICAgIAogICAgIGlmICghcmVzdWx0LmlzTmV3RW50
cnkpIHsKLSAgICAgICAgQVNTRVJUKHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKLSAgICAgICAg
cmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICBBU1NFUlQocmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZSk7CisgICAgICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwog
ICAgIH0KIAogICAgIC8vIExvb2sgdXAgdGhlIGdyb3VwIGluIHRoZSBkYXRhYmFzZQpAQCAtMTUw
LDcgKzE1MCw3IEBAIEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogQXBwbGljYXRpb25DYWNoZVN0b3Jh
Z2U6OmZpbmRPckNyZWF0ZUNhY2hlR3JvdXAoY29uc3QgS1VSCiAgICAgICAgIG1fY2FjaGVIb3N0
U2V0LmFkZCh1cmxIb3N0SGFzaChtYW5pZmVzdFVSTCkpOwogICAgIH0KICAgICAKLSAgICByZXN1
bHQuaXRlcmF0b3ItPnNlY29uZCA9IGdyb3VwOworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUg
PSBncm91cDsKICAgICAKICAgICByZXR1cm4gZ3JvdXA7CiB9CkBAIC0xOTcsNyArMTk3LDcgQEAg
QXBwbGljYXRpb25DYWNoZUdyb3VwKiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2FjaGVHcm91
cEZvclVSTChjb25zdCBLVVJMJiB1cmwKICAgICAvLyBDaGVjayBpZiBhIGNhY2hlIGFscmVhZHkg
ZXhpc3RzIGluIG1lbW9yeS4KICAgICBDYWNoZUdyb3VwTWFwOjpjb25zdF9pdGVyYXRvciBlbmQg
PSBtX2NhY2hlc0luTWVtb3J5LmVuZCgpOwogICAgIGZvciAoQ2FjaGVHcm91cE1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX2NhY2hlc0luTWVtb3J5LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewotICAgICAgICBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIGdyb3VwID0gaXQtPnNlY29uZDsKKyAg
ICAgICAgQXBwbGljYXRpb25DYWNoZUdyb3VwKiBncm91cCA9IGl0LT52YWx1ZTsKIAogICAgICAg
ICBBU1NFUlQoIWdyb3VwLT5pc09ic29sZXRlKCkpOwogCkBAIC0yNjgsNyArMjY4LDcgQEAgQXBw
bGljYXRpb25DYWNoZUdyb3VwKiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZmFsbGJhY2tDYWNo
ZUdyb3VwRm9yVVJMKGNvbnN0IEsKICAgICAvLyBDaGVjayBpZiBhbiBhcHByb3ByaWF0ZSBjYWNo
ZSBhbHJlYWR5IGV4aXN0cyBpbiBtZW1vcnkuCiAgICAgQ2FjaGVHcm91cE1hcDo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gbV9jYWNoZXNJbk1lbW9yeS5lbmQoKTsKICAgICBmb3IgKENhY2hlR3JvdXBN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9jYWNoZXNJbk1lbW9yeS5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKLSAgICAgICAgQXBwbGljYXRpb25DYWNoZUdyb3VwKiBncm91cCA9IGl0LT5z
ZWNvbmQ7CisgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogZ3JvdXAgPSBpdC0+dmFsdWU7
CiAgICAgICAgIAogICAgICAgICBBU1NFUlQoIWdyb3VwLT5pc09ic29sZXRlKCkpOwogCkBAIC03
MTMsMTMgKzcxMywxMyBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZShBcHBs
aWNhdGlvbkNhY2hlKiBjYWNoZSwgUmVzb3VyY2VTdG9yYWdlSURKbwogICAgIHsKICAgICAgICAg
QXBwbGljYXRpb25DYWNoZTo6UmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGNhY2hl
LT5lbmQoKTsKICAgICAgICAgZm9yIChBcHBsaWNhdGlvbkNhY2hlOjpSZXNvdXJjZU1hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBjYWNoZS0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAg
ICAgICAgICB1bnNpZ25lZCBvbGRTdG9yYWdlSUQgPSBpdC0+c2Vjb25kLT5zdG9yYWdlSUQoKTsK
LSAgICAgICAgICAgIGlmICghc3RvcmUoaXQtPnNlY29uZC5nZXQoKSwgY2FjaGVTdG9yYWdlSUQp
KQorICAgICAgICAgICAgdW5zaWduZWQgb2xkU3RvcmFnZUlEID0gaXQtPnZhbHVlLT5zdG9yYWdl
SUQoKTsKKyAgICAgICAgICAgIGlmICghc3RvcmUoaXQtPnZhbHVlLmdldCgpLCBjYWNoZVN0b3Jh
Z2VJRCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICAvLyBT
dG9yaW5nIHRoZSByZXNvdXJjZSBzdWNjZWVkZWQuIExvZyBpdHMgb2xkIHN0b3JhZ2VJRCBpbiBj
YXNlCiAgICAgICAgICAgICAvLyBpdCBuZWVkcyB0byBiZSByZXN0b3JlZCBsYXRlci4KLSAgICAg
ICAgICAgIHN0b3JhZ2VJREpvdXJuYWwtPmFkZChpdC0+c2Vjb25kLmdldCgpLCBvbGRTdG9yYWdl
SUQpOworICAgICAgICAgICAgc3RvcmFnZUlESm91cm5hbC0+YWRkKGl0LT52YWx1ZS5nZXQoKSwg
b2xkU3RvcmFnZUlEKTsKICAgICAgICAgfQogICAgIH0KICAgICAKQEAgLTgzOSw5ICs4MzksOSBA
QCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZShBcHBsaWNhdGlvbkNhY2hlUmVz
b3VyY2UqIHJlc291cmNlLCB1bnNpZ25lZAogICAgIAogICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IHJlc291cmNlLT5yZXNwb25zZSgpLmh0dHBIZWFkZXJGaWVsZHMoKS5l
bmQoKTsKICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcmVzb3Vy
Y2UtPnJlc3BvbnNlKCkuaHR0cEhlYWRlckZpZWxkcygpLmJlZ2luKCk7IGl0IT0gZW5kOyArK2l0
KSB7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5maXJzdCk7CisgICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5rZXkpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZCgoVUNoYXIpJzonKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPnNlY29uZCk7
CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT52YWx1ZSk7CiAgICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKChVQ2hhciknXG4nKTsKICAgICB9CiAgICAgCkBAIC0xMjQxLDcgKzEy
NDEsNyBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjplbXB0eSgpCiAgICAgLy8gdW50
aWwgYSBjYWNoZSB1cGRhdGUgcHJvY2VzcyBoYXMgYmVlbiBpbml0aWF0ZWQuCiAgICAgQ2FjaGVH
cm91cE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9jYWNoZXNJbk1lbW9yeS5lbmQoKTsKICAg
ICBmb3IgKENhY2hlR3JvdXBNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9jYWNoZXNJbk1lbW9y
eS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPmNsZWFyU3Rv
cmFnZUlEKCk7CisgICAgICAgIGl0LT52YWx1ZS0+Y2xlYXJTdG9yYWdlSUQoKTsKICAgICAKICAg
ICBjaGVja0ZvckRlbGV0ZWRSZXNvdXJjZXMoKTsKIH0KQEAgLTEzMDMsNyArMTMwMyw3IEBAIGJv
b2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlQ29weU9mQ2FjaGUoY29uc3QgU3RyaW5n
JiBjYWNoZURpcmVjdG9yeSwgQXBwCiAgICAgLy8gVHJhdmVyc2UgdGhlIGNhY2hlIGFuZCBhZGQg
Y29waWVzIG9mIGFsbCByZXNvdXJjZXMuCiAgICAgQXBwbGljYXRpb25DYWNoZTo6UmVzb3VyY2VN
YXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGNhY2hlLT5lbmQoKTsKICAgICBmb3IgKEFwcGxpY2F0
aW9uQ2FjaGU6OlJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGNhY2hlLT5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiBy
ZXNvdXJjZSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVSZXNv
dXJjZSogcmVzb3VyY2UgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgIAogICAgICAgICBSZWZQ
dHI8QXBwbGljYXRpb25DYWNoZVJlc291cmNlPiByZXNvdXJjZUNvcHkgPSBBcHBsaWNhdGlvbkNh
Y2hlUmVzb3VyY2U6OmNyZWF0ZShyZXNvdXJjZS0+dXJsKCksIHJlc291cmNlLT5yZXNwb25zZSgp
LCByZXNvdXJjZS0+dHlwZSgpLCByZXNvdXJjZS0+ZGF0YSgpLCByZXNvdXJjZS0+cGF0aCgpKTsK
ICAgICAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9BcmNo
aXZlRmFjdG9yeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9BcmNoaXZlRmFj
dG9yeS5jcHAKaW5kZXggZjY5NzBhYTUzMWI1ZTVhNjVjNWE2MDUyOWIxNWUwNTQzODZjNDY1Zi4u
Y2QzODc2YWFlZmFjOTA0Y2I0Y2Q0OTBjNzI4ODkxZTAzODc1NjRkYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvQXJjaGl2ZUZhY3RvcnkuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL0FyY2hpdmVGYWN0b3J5LmNwcApAQCAtOTUsNyArOTUs
NyBAQCB2b2lkIEFyY2hpdmVGYWN0b3J5OjpyZWdpc3Rlcktub3duQXJjaGl2ZU1JTUVUeXBlcygp
CiAgICAgQXJjaGl2ZU1JTUVUeXBlc01hcDo6aXRlcmF0b3IgZW5kID0gYXJjaGl2ZU1JTUVUeXBl
cygpLmVuZCgpOwogCiAgICAgZm9yICg7IGkgIT0gZW5kOyArK2kpCi0gICAgICAgIG1pbWVUeXBl
cy5hZGQoaS0+Zmlyc3QpOworICAgICAgICBtaW1lVHlwZXMuYWRkKGktPmtleSk7CiB9CiAKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJj
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2UuY3Bw
CmluZGV4IGIwYTcwMzMwNGI1OTM3YjY2YzAxNDQwMzJkMzNkY2IwMWU2NjAyM2YuLjFkNDljZDA1
ZTY0ZjM1YTdmN2M0YjRmZWU3ZTAyNDc5ZGU3YWEwMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNlLmNwcApAQCAtMTUyLDggKzE1Miw4IEBA
IGJvb2wgQ2FjaGVkUmF3UmVzb3VyY2U6OmNhblJldXNlKGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
bmV3UmVxdWVzdCkgY29uc3QKIAogICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IG5ld0hlYWRlcnMuZW5kKCk7CiAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVy
YXRvciBpID0gbmV3SGVhZGVycy5iZWdpbigpOyBpICE9IGVuZDsgKytpKSB7Ci0gICAgICAgIEF0
b21pY1N0cmluZyBoZWFkZXJOYW1lID0gaS0+Zmlyc3Q7Ci0gICAgICAgIGlmIChpLT5zZWNvbmQg
IT0gb2xkSGVhZGVycy5nZXQoaGVhZGVyTmFtZSkpCisgICAgICAgIEF0b21pY1N0cmluZyBoZWFk
ZXJOYW1lID0gaS0+a2V5OworICAgICAgICBpZiAoaS0+dmFsdWUgIT0gb2xkSGVhZGVycy5nZXQo
aGVhZGVyTmFtZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIHJldHVy
biB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJl
c291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5j
cHAKaW5kZXggNDFjZDYwMTg5NWFiZDIyMmQ4MDJlZjIxNjNlOTQ1ZGY1MjNiZmI5Zi4uN2Q2Y2Ri
ZDkxNDhmNDUyNDI4YTBiZWQwNTJmMDQzZjViNGQxNGViZSAxMDA3NTUKLS0tIGEvU291cmNlL1dl
YkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwCkBAIC02MTEsOCArNjExLDggQEAgdm9p
ZCBDYWNoZWRSZXNvdXJjZTo6c3dpdGNoQ2xpZW50c1RvUmV2YWxpZGF0ZWRSZXNvdXJjZSgpCiAg
ICAgVmVjdG9yPENhY2hlZFJlc291cmNlQ2xpZW50Kj4gY2xpZW50c1RvTW92ZTsKICAgICBIYXNo
Q291bnRlZFNldDxDYWNoZWRSZXNvdXJjZUNsaWVudCo+OjppdGVyYXRvciBlbmQyID0gbV9jbGll
bnRzLmVuZCgpOwogICAgIGZvciAoSGFzaENvdW50ZWRTZXQ8Q2FjaGVkUmVzb3VyY2VDbGllbnQq
Pjo6aXRlcmF0b3IgaXQgPSBtX2NsaWVudHMuYmVnaW4oKTsgaXQgIT0gZW5kMjsgKytpdCkgewot
ICAgICAgICBDYWNoZWRSZXNvdXJjZUNsaWVudCogY2xpZW50ID0gaXQtPmZpcnN0OwotICAgICAg
ICB1bnNpZ25lZCBjb3VudCA9IGl0LT5zZWNvbmQ7CisgICAgICAgIENhY2hlZFJlc291cmNlQ2xp
ZW50KiBjbGllbnQgPSBpdC0+a2V5OworICAgICAgICB1bnNpZ25lZCBjb3VudCA9IGl0LT52YWx1
ZTsKICAgICAgICAgd2hpbGUgKGNvdW50KSB7CiAgICAgICAgICAgICBjbGllbnRzVG9Nb3ZlLmFw
cGVuZChjbGllbnQpOwogICAgICAgICAgICAgLS1jb3VudDsKQEAgLTY0Niw5ICs2NDYsOSBAQCB2
b2lkIENhY2hlZFJlc291cmNlOjp1cGRhdGVSZXNwb25zZUFmdGVyUmV2YWxpZGF0aW9uKGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmIHZhbAogICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IG5ld0hlYWRlcnMuZW5kKCk7CiAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IG5ld0hlYWRlcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAg
ICAgIC8vIERvbid0IGFsbG93IDMwNCByZXNwb25zZSB0byB1cGRhdGUgY29udGVudCBoZWFkZXJz
LCB0aGVzZSBjYW4ndCBjaGFuZ2UgYnV0IHNvbWUgc2VydmVycyBzZW5kIHdyb25nIHZhbHVlcy4K
LSAgICAgICAgaWYgKGl0LT5maXJzdC5zdGFydHNXaXRoKGNvbnRlbnRIZWFkZXJQcmVmaXgsIGZh
bHNlKSkKKyAgICAgICAgaWYgKGl0LT5rZXkuc3RhcnRzV2l0aChjb250ZW50SGVhZGVyUHJlZml4
LCBmYWxzZSkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgbV9yZXNwb25zZS5zZXRI
VFRQSGVhZGVyRmllbGQoaXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsKKyAgICAgICAgbV9yZXNwb25z
ZS5zZXRIVFRQSGVhZGVyRmllbGQoaXQtPmtleSwgaXQtPnZhbHVlKTsKICAgICB9CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUNsaWVu
dFdhbGtlci5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlQ2xp
ZW50V2Fsa2VyLmgKaW5kZXggOGIzNzgwYjVlNjRiMjE0MzQ2Mjg5NmJkYTJhNmEyNjVhNWE4YTA3
NC4uNzkzM2IwYjgxNGM1MjEyNTZlMDc2MGY4NjFiNDMxMDk3Yjg5YjU5YyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlQ2xpZW50V2Fs
a2VyLmgKQEAgLTQyLDcgKzQyLDcgQEAgcHVibGljOgogICAgICAgICBJdGVyYXRvciBlbmQgPSBz
ZXQuZW5kKCk7CiAgICAgICAgIHNpemVfdCBjbGllbnRJbmRleCA9IDA7CiAgICAgICAgIGZvciAo
SXRlcmF0b3IgY3VycmVudCA9IHNldC5iZWdpbigpOyBjdXJyZW50ICE9IGVuZDsgKytjdXJyZW50
KQotICAgICAgICAgICAgbV9jbGllbnRWZWN0b3JbY2xpZW50SW5kZXgrK10gPSBjdXJyZW50LT5m
aXJzdDsKKyAgICAgICAgICAgIG1fY2xpZW50VmVjdG9yW2NsaWVudEluZGV4KytdID0gY3VycmVu
dC0+a2V5OwogICAgIH0KIAogICAgIFQqIG5leHQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAKaW5kZXggOWE4ODcyNGExNTBk
MWFlNmU0YTg1MGExMThhOWM0ZjM4ZWVlOWUxZi4uNGVkMTA3OGMzMzRkZGYzYmRiYjhiODhkYTA2
ZTYxMWZjYzZkYjJlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0Nh
Y2hlZFJlc291cmNlTG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUv
Q2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwCkBAIC0xMjYsNyArMTI2LDcgQEAgQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXI6On5DYWNoZWRSZXNvdXJjZUxvYWRlcigpCiAgICAgY2xlYXJQcmVsb2FkcygpOwog
ICAgIERvY3VtZW50UmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fZG9jdW1lbnRSZXNvdXJj
ZXMuZW5kKCk7CiAgICAgZm9yIChEb2N1bWVudFJlc291cmNlTWFwOjppdGVyYXRvciBpdCA9IG1f
ZG9jdW1lbnRSZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+
c2Vjb25kLT5zZXRPd25pbmdDYWNoZWRSZXNvdXJjZUxvYWRlcigwKTsKKyAgICAgICAgaXQtPnZh
bHVlLT5zZXRPd25pbmdDYWNoZWRSZXNvdXJjZUxvYWRlcigwKTsKIAogICAgIC8vIE1ha2Ugc3Vy
ZSBubyByZXF1ZXN0cyBzdGlsbCBwb2ludCB0byB0aGlzIENhY2hlZFJlc291cmNlTG9hZGVyCiAg
ICAgQVNTRVJUKG1fcmVxdWVzdENvdW50ID09IDApOwpAQCAtNDE5LDcgKzQxOSw3IEBAIENhY2hl
ZFJlc291cmNlSGFuZGxlPENhY2hlZFJlc291cmNlPiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVx
dWVzdFJlc291cmNlKENhY2hlCiAgICAgaWYgKG1lbW9yeUNhY2hlKCktPmRpc2FibGVkKCkpIHsK
ICAgICAgICAgRG9jdW1lbnRSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX2RvY3VtZW50UmVz
b3VyY2VzLmZpbmQodXJsLnN0cmluZygpKTsKICAgICAgICAgaWYgKGl0ICE9IG1fZG9jdW1lbnRS
ZXNvdXJjZXMuZW5kKCkpIHsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNldE93bmluZ0NhY2hl
ZFJlc291cmNlTG9hZGVyKDApOworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRPd25pbmdDYWNo
ZWRSZXNvdXJjZUxvYWRlcigwKTsKICAgICAgICAgICAgIG1fZG9jdW1lbnRSZXNvdXJjZXMucmVt
b3ZlKGl0KTsKICAgICAgICAgfQogICAgIH0KQEAgLTYzMSw3ICs2MzEsNyBAQCB2b2lkIENhY2hl
ZFJlc291cmNlTG9hZGVyOjpzZXRBdXRvTG9hZEltYWdlcyhib29sIGVuYWJsZSkKIAogICAgIERv
Y3VtZW50UmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fZG9jdW1lbnRSZXNvdXJjZXMuZW5k
KCk7CiAgICAgZm9yIChEb2N1bWVudFJlc291cmNlTWFwOjppdGVyYXRvciBpdCA9IG1fZG9jdW1l
bnRSZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIENhY2hlZFJl
c291cmNlKiByZXNvdXJjZSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIENhY2hlZFJlc291
cmNlKiByZXNvdXJjZSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgaWYgKHJlc291cmNlLT50
eXBlKCkgPT0gQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3VyY2UpIHsKICAgICAgICAgICAgIENh
Y2hlZEltYWdlKiBpbWFnZSA9IGNvbnN0X2Nhc3Q8Q2FjaGVkSW1hZ2UqPihzdGF0aWNfY2FzdDxj
b25zdCBDYWNoZWRJbWFnZSo+KHJlc291cmNlKSk7CiAKQEAgLTY1MSw3ICs2NTEsNyBAQCB2b2lk
IENhY2hlZFJlc291cmNlTG9hZGVyOjpyZW1vdmVDYWNoZWRSZXNvdXJjZShDYWNoZWRSZXNvdXJj
ZSogcmVzb3VyY2UpIGNvbnN0CiAjaWZuZGVmIE5ERUJVRwogICAgIERvY3VtZW50UmVzb3VyY2VN
YXA6Oml0ZXJhdG9yIGl0ID0gbV9kb2N1bWVudFJlc291cmNlcy5maW5kKHJlc291cmNlLT51cmwo
KSk7CiAgICAgaWYgKGl0ICE9IG1fZG9jdW1lbnRSZXNvdXJjZXMuZW5kKCkpCi0gICAgICAgIEFT
U0VSVChpdC0+c2Vjb25kLmdldCgpID09IHJlc291cmNlKTsKKyAgICAgICAgQVNTRVJUKGl0LT52
YWx1ZS5nZXQoKSA9PSByZXNvdXJjZSk7CiAjZW5kaWYKICAgICBtX2RvY3VtZW50UmVzb3VyY2Vz
LnJlbW92ZShyZXNvdXJjZS0+dXJsKCkpOwogfQpAQCAtNjg1LDkgKzY4NSw5IEBAIHZvaWQgQ2Fj
aGVkUmVzb3VyY2VMb2FkZXI6OmdhcmJhZ2VDb2xsZWN0RG9jdW1lbnRSZXNvdXJjZXMoKQogICAg
IFN0cmluZ1ZlY3RvciByZXNvdXJjZXNUb0RlbGV0ZTsKIAogICAgIGZvciAoRG9jdW1lbnRSZXNv
dXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX2RvY3VtZW50UmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9
IG1fZG9jdW1lbnRSZXNvdXJjZXMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5zZWNv
bmQtPmhhc09uZUhhbmRsZSgpKSB7Ci0gICAgICAgICAgICByZXNvdXJjZXNUb0RlbGV0ZS5hcHBl
bmQoaXQtPmZpcnN0KTsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNldE93bmluZ0NhY2hlZFJl
c291cmNlTG9hZGVyKDApOworICAgICAgICBpZiAoaXQtPnZhbHVlLT5oYXNPbmVIYW5kbGUoKSkg
eworICAgICAgICAgICAgcmVzb3VyY2VzVG9EZWxldGUuYXBwZW5kKGl0LT5rZXkpOworICAgICAg
ICAgICAgaXQtPnZhbHVlLT5zZXRPd25pbmdDYWNoZWRSZXNvdXJjZUxvYWRlcigwKTsKICAgICAg
ICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL01l
bW9yeUNhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5j
cHAKaW5kZXggNWRjMDQ3NDAyY2IzZDc0OGVkOTczNDc5ZTY0MjI4NzU5Mzc4ODkyZC4uMTkxMTM0
MDI3NjcwOGZlNTg0NDRmMDRkNjc4MmRjYTA3Y2E5MjYwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuY3BwCkBAIC01MzksNyArNTM5LDcgQEAgdm9pZCBNZW1v
cnlDYWNoZTo6cmVtb3ZlUmVzb3VyY2VzV2l0aE9yaWdpbihTZWN1cml0eU9yaWdpbiogb3JpZ2lu
KQogCiAgICAgQ2FjaGVkUmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGUgPSBtX3Jlc291cmNlcy5lbmQo
KTsKICAgICBmb3IgKENhY2hlZFJlc291cmNlTWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2Vz
LmJlZ2luKCk7IGl0ICE9IGU7ICsraXQpIHsKLSAgICAgICAgQ2FjaGVkUmVzb3VyY2UqIHJlc291
cmNlID0gaXQtPnNlY29uZDsKKyAgICAgICAgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlID0gaXQt
PnZhbHVlOwogICAgICAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHJlc291cmNlT3JpZ2luID0g
U2VjdXJpdHlPcmlnaW46OmNyZWF0ZUZyb21TdHJpbmcocmVzb3VyY2UtPnVybCgpKTsKICAgICAg
ICAgaWYgKCFyZXNvdXJjZU9yaWdpbikKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtNTU1LDcg
KzU1NSw3IEBAIHZvaWQgTWVtb3J5Q2FjaGU6OmdldE9yaWdpbnNXaXRoQ2FjaGUoU2VjdXJpdHlP
cmlnaW5TZXQmIG9yaWdpbnMpCiB7CiAgICAgQ2FjaGVkUmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGUg
PSBtX3Jlc291cmNlcy5lbmQoKTsKICAgICBmb3IgKENhY2hlZFJlc291cmNlTWFwOjppdGVyYXRv
ciBpdCA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGU7ICsraXQpCi0gICAgICAgIG9yaWdp
bnMuYWRkKFNlY3VyaXR5T3JpZ2luOjpjcmVhdGVGcm9tU3RyaW5nKGl0LT5zZWNvbmQtPnVybCgp
KSk7CisgICAgICAgIG9yaWdpbnMuYWRkKFNlY3VyaXR5T3JpZ2luOjpjcmVhdGVGcm9tU3RyaW5n
KGl0LT52YWx1ZS0+dXJsKCkpKTsKIH0KIAogdm9pZCBNZW1vcnlDYWNoZTo6cmVtb3ZlRnJvbUxp
dmVEZWNvZGVkUmVzb3VyY2VzTGlzdChDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UpCkBAIC02ODgs
NyArNjg4LDcgQEAgTWVtb3J5Q2FjaGU6OlN0YXRpc3RpY3MgTWVtb3J5Q2FjaGU6OmdldFN0YXRp
c3RpY3MoKQogICAgIFN0YXRpc3RpY3Mgc3RhdHM7CiAgICAgQ2FjaGVkUmVzb3VyY2VNYXA6Oml0
ZXJhdG9yIGUgPSBtX3Jlc291cmNlcy5lbmQoKTsKICAgICBmb3IgKENhY2hlZFJlc291cmNlTWFw
OjppdGVyYXRvciBpID0gbV9yZXNvdXJjZXMuYmVnaW4oKTsgaSAhPSBlOyArK2kpIHsKLSAgICAg
ICAgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlID0gaS0+c2Vjb25kOworICAgICAgICBDYWNoZWRS
ZXNvdXJjZSogcmVzb3VyY2UgPSBpLT52YWx1ZTsKICAgICAgICAgc3dpdGNoIChyZXNvdXJjZS0+
dHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3VyY2U6CiAg
ICAgICAgICAgICBzdGF0cy5pbWFnZXMuYWRkUmVzb3VyY2UocmVzb3VyY2UpOwpAQCAtNzI0LDcg
KzcyNCw3IEBAIHZvaWQgTWVtb3J5Q2FjaGU6OnNldERpc2FibGVkKGJvb2wgZGlzYWJsZWQpCiAg
ICAgICAgIENhY2hlZFJlc291cmNlTWFwOjppdGVyYXRvciBpID0gbV9yZXNvdXJjZXMuYmVnaW4o
KTsKICAgICAgICAgaWYgKGkgPT0gbV9yZXNvdXJjZXMuZW5kKCkpCiAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgZXZpY3QoaS0+c2Vjb25kKTsKKyAgICAgICAgZXZpY3QoaS0+dmFsdWUpOwog
ICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRh
dGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFzZS5jcHAK
aW5kZXggN2MxMzU4NmYyOTAwNDBiNDM1NmRhNGVhZjczZWJjMTUyNGM1NWUwYy4uZTBkNzhlOTNk
MzU2NWJjNjgyMjMxM2FlNWNjM2M4YmRmMDI3YzM5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvaWNvbi9JY29uRGF0YWJhc2UuY3BwCkBAIC0xODYsNyArMTg2LDcgQEAgdm9pZCBJY29uRGF0
YWJhc2U6OnJlbW92ZUFsbEljb25zKCkKICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFBhZ2VVUkxS
ZWNvcmQqPjo6aXRlcmF0b3IgaXRlciA9IG1fcGFnZVVSTFRvUmVjb3JkTWFwLmJlZ2luKCk7CiAg
ICAgICAgIEhhc2hNYXA8U3RyaW5nLCBQYWdlVVJMUmVjb3JkKj46Oml0ZXJhdG9yIGVuZCA9IG1f
cGFnZVVSTFRvUmVjb3JkTWFwLmVuZCgpOwogICAgICAgICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsr
aXRlcikKLSAgICAgICAgICAgICgqaXRlcikuc2Vjb25kLT5zZXRJY29uUmVjb3JkKDApOworICAg
ICAgICAgICAgKCppdGVyKS52YWx1ZS0+c2V0SWNvblJlY29yZCgwKTsKICAgICAgICAgICAgIAog
ICAgICAgICAvLyBDbGVhciB0aGUgaWNvblVSTCAtPiBJY29uUmVjb3JkIG1hcAogICAgICAgICBt
X2ljb25VUkxUb1JlY29yZE1hcC5jbGVhcigpOwpAQCAtNzc5LDcgKzc3OSw3IEBAIHNpemVfdCBJ
Y29uRGF0YWJhc2U6Omljb25SZWNvcmRDb3VudFdpdGhEYXRhKCkKICAgICBIYXNoTWFwPFN0cmlu
ZywgSWNvblJlY29yZCo+OjppdGVyYXRvciBlbmQgPSBtX2ljb25VUkxUb1JlY29yZE1hcC5lbmQo
KTsKICAgICAKICAgICBmb3IgKDsgaSAhPSBlbmQ7ICsraSkKLSAgICAgICAgcmVzdWx0ICs9ICgo
KmkpLnNlY29uZC0+aW1hZ2VEYXRhU3RhdHVzKCkgPT0gSW1hZ2VEYXRhU3RhdHVzUHJlc2VudCk7
CisgICAgICAgIHJlc3VsdCArPSAoKCppKS52YWx1ZS0+aW1hZ2VEYXRhU3RhdHVzKCkgPT0gSW1h
Z2VEYXRhU3RhdHVzUHJlc2VudCk7CiAgICAgICAgICAgICAKICAgICByZXR1cm4gcmVzdWx0Owog
fQpAQCAtMTU0MCwxMyArMTU0MCwxMyBAQCB2b2lkIEljb25EYXRhYmFzZTo6cGVyZm9ybVBlbmRp
bmdSZXRhaW5BbmRSZWxlYXNlT3BlcmF0aW9ucygpCiAgICAgfQogCiAgICAgZm9yIChIYXNoQ291
bnRlZFNldDxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHRvUmV0YWluLmJlZ2luKCksIGVu
ZCA9IHRvUmV0YWluLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgQVNTRVJUKCFp
dC0+Zmlyc3QuaW1wbCgpIHx8IGl0LT5maXJzdC5pbXBsKCktPmhhc09uZVJlZigpKTsKLSAgICAg
ICAgcGVyZm9ybVJldGFpbkljb25Gb3JQYWdlVVJMKGl0LT5maXJzdCwgaXQtPnNlY29uZCk7Cisg
ICAgICAgIEFTU0VSVCghaXQtPmtleS5pbXBsKCkgfHwgaXQtPmtleS5pbXBsKCktPmhhc09uZVJl
ZigpKTsKKyAgICAgICAgcGVyZm9ybVJldGFpbkljb25Gb3JQYWdlVVJMKGl0LT5rZXksIGl0LT52
YWx1ZSk7CiAgICAgfQogCiAgICAgZm9yIChIYXNoQ291bnRlZFNldDxTdHJpbmc+Ojpjb25zdF9p
dGVyYXRvciBpdCA9IHRvUmVsZWFzZS5iZWdpbigpLCBlbmQgPSB0b1JlbGVhc2UuZW5kKCk7IGl0
ICE9IGVuZDsgKytpdCkgewotICAgICAgICBBU1NFUlQoIWl0LT5maXJzdC5pbXBsKCkgfHwgaXQt
PmZpcnN0LmltcGwoKS0+aGFzT25lUmVmKCkpOwotICAgICAgICBwZXJmb3JtUmVsZWFzZUljb25G
b3JQYWdlVVJMKGl0LT5maXJzdCwgaXQtPnNlY29uZCk7CisgICAgICAgIEFTU0VSVCghaXQtPmtl
eS5pbXBsKCkgfHwgaXQtPmtleS5pbXBsKCktPmhhc09uZVJlZigpKTsKKyAgICAgICAgcGVyZm9y
bVJlbGVhc2VJY29uRm9yUGFnZVVSTChpdC0+a2V5LCBpdC0+dmFsdWUpOwogICAgIH0KIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCmluZGV4IDJlMTk4MzczZTFmOGY0OWU0MmVhYTU0NmQ2
MzU0Njk4NGM1MWJhMDUuLmFmMTkyODBmY2Q0MjBhZmY5MzU4ZDdmYzZjOWNjYThmMzU5NDc2ZGEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKQEAgLTI0Nyw3ICsyNDcsNyBAQCBib29sIERP
TVdpbmRvdzo6ZGlzcGF0Y2hBbGxQZW5kaW5nQmVmb3JlVW5sb2FkRXZlbnRzKCkKICAgICBWZWN0
b3I8UmVmUHRyPERPTVdpbmRvdz4gPiB3aW5kb3dzOwogICAgIERPTVdpbmRvd1NldDo6aXRlcmF0
b3IgZW5kID0gc2V0LmVuZCgpOwogICAgIGZvciAoRE9NV2luZG93U2V0OjppdGVyYXRvciBpdCA9
IHNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHdpbmRvd3MuYXBwZW5kKGl0
LT5maXJzdCk7CisgICAgICAgIHdpbmRvd3MuYXBwZW5kKGl0LT5rZXkpOwogCiAgICAgc2l6ZV90
IHNpemUgPSB3aW5kb3dzLnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7
ICsraSkgewpAQCAtMjg5LDcgKzI4OSw3IEBAIHZvaWQgRE9NV2luZG93OjpkaXNwYXRjaEFsbFBl
bmRpbmdVbmxvYWRFdmVudHMoKQogICAgIFZlY3RvcjxSZWZQdHI8RE9NV2luZG93PiA+IHdpbmRv
d3M7CiAgICAgRE9NV2luZG93U2V0OjppdGVyYXRvciBlbmQgPSBzZXQuZW5kKCk7CiAgICAgZm9y
IChET01XaW5kb3dTZXQ6Oml0ZXJhdG9yIGl0ID0gc2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkKLSAgICAgICAgd2luZG93cy5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgd2luZG93cy5h
cHBlbmQoaXQtPmtleSk7CiAKICAgICBzaXplX3Qgc2l6ZSA9IHdpbmRvd3Muc2l6ZSgpOwogICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50
SGFuZGxlci5jcHAKaW5kZXggOGVlYTNmYTY1OGI1OWZjYmNkY2NmOTIxM2JjNzhlMjhhYTY0Nzc3
Yi4uN2JhOGYzZGNjMzdkNjg0NGZiOTg2NzVhMDEyMDc5ZmQ3NjhkZDc4OCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApAQCAtMzU4NSw3ICszNTg1LDcgQEAgYm9vbCBFdmVudEhh
bmRsZXI6OmhhbmRsZVRvdWNoRXZlbnQoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50JiBldmVudCkK
ICAgICAgICAgLy8gcmVsZWFzZWQgb3IgY2FuY2VsbGVkIGl0IHdpbGwgb25seSBhcHBlYXIgaW4g
dGhlIGNoYW5nZWRUb3VjaGVzIGxpc3QuCiAgICAgICAgIGlmIChwb2ludFN0YXRlICE9IFBsYXRm
b3JtVG91Y2hQb2ludDo6VG91Y2hSZWxlYXNlZCAmJiBwb2ludFN0YXRlICE9IFBsYXRmb3JtVG91
Y2hQb2ludDo6VG91Y2hDYW5jZWxsZWQpIHsKICAgICAgICAgICAgIHRvdWNoZXMtPmFwcGVuZCh0
b3VjaCk7Ci0gICAgICAgICAgICB0YXJnZXRUb3VjaGVzSXRlcmF0b3ItPnNlY29uZC0+YXBwZW5k
KHRvdWNoKTsKKyAgICAgICAgICAgIHRhcmdldFRvdWNoZXNJdGVyYXRvci0+dmFsdWUtPmFwcGVu
ZCh0b3VjaCk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBOb3cgYnVpbGQgdXAgdGhlIGNvcnJl
Y3QgbGlzdCBmb3IgY2hhbmdlZFRvdWNoZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0ZyYW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCmluZGV4IDU2OTIw
OGZlYzM1NjBhM2JlZjBjM2EyNTc5YzA4NmNmOTA5NmRlMWQuLjYwOWVhYmVlODJmMGYzYWFlYTlh
YTEwYTRlOGNiNTY4NmE1ZmJkM2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJh
bWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCkBAIC01NzcsNyArNTc3
LDcgQEAgdm9pZCBGcmFtZTo6aW5qZWN0VXNlclNjcmlwdHMoVXNlclNjcmlwdEluamVjdGlvblRp
bWUgaW5qZWN0aW9uVGltZSkKICAgICAgICAgcmV0dXJuOwogICAgIFVzZXJTY3JpcHRNYXA6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IHVzZXJTY3JpcHRzLT5lbmQoKTsKICAgICBmb3IgKFVzZXJTY3Jp
cHRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdXNlclNjcmlwdHMtPmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkKLSAgICAgICAgaW5qZWN0VXNlclNjcmlwdHNGb3JXb3JsZChpdC0+Zmlyc3QuZ2V0
KCksICppdC0+c2Vjb25kLCBpbmplY3Rpb25UaW1lKTsKKyAgICAgICAgaW5qZWN0VXNlclNjcmlw
dHNGb3JXb3JsZChpdC0+a2V5LmdldCgpLCAqaXQtPnZhbHVlLCBpbmplY3Rpb25UaW1lKTsKIH0K
IAogdm9pZCBGcmFtZTo6aW5qZWN0VXNlclNjcmlwdHNGb3JXb3JsZChET01XcmFwcGVyV29ybGQq
IHdvcmxkLCBjb25zdCBVc2VyU2NyaXB0VmVjdG9yJiB1c2VyU2NyaXB0cywgVXNlclNjcmlwdElu
amVjdGlvblRpbWUgaW5qZWN0aW9uVGltZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvUGFnZUdyb3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmNwcAppbmRl
eCA0NWQyNWY1NTIxNGQ3NDQxOTRlOTM3ZmEzMWU2ZTY0NjBlYWNhZjkyLi4wMzI3YmIwYjZjN2Vl
YjgzYzJjM2U5ZDAyNjI3YjgwZGM3MTljMWYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1BhZ2VHcm91cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlR3JvdXAuY3Bw
CkBAIC05MywxMiArOTMsMTIgQEAgUGFnZUdyb3VwKiBQYWdlR3JvdXA6OnBhZ2VHcm91cChjb25z
dCBTdHJpbmcmIGdyb3VwTmFtZSkKICAgICBQYWdlR3JvdXBNYXA6OkFkZFJlc3VsdCByZXN1bHQg
PSBwYWdlR3JvdXBzLT5hZGQoZ3JvdXBOYW1lLCAwKTsKIAogICAgIGlmIChyZXN1bHQuaXNOZXdF
bnRyeSkgewotICAgICAgICBBU1NFUlQoIXJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKLSAgICAg
ICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBuZXcgUGFnZUdyb3VwKGdyb3VwTmFtZSk7Cisg
ICAgICAgIEFTU0VSVCghcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CisgICAgICAgIHJlc3VsdC5p
dGVyYXRvci0+dmFsdWUgPSBuZXcgUGFnZUdyb3VwKGdyb3VwTmFtZSk7CiAgICAgfQogCi0gICAg
QVNTRVJUKHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKLSAgICByZXR1cm4gcmVzdWx0Lml0ZXJh
dG9yLT5zZWNvbmQ7CisgICAgQVNTRVJUKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOworICAgIHJl
dHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogfQogCiB2b2lkIFBhZ2VHcm91cDo6Y2xvc2VM
b2NhbFN0b3JhZ2UoKQpAQCAtMTA5LDggKzEwOSw4IEBAIHZvaWQgUGFnZUdyb3VwOjpjbG9zZUxv
Y2FsU3RvcmFnZSgpCiAgICAgUGFnZUdyb3VwTWFwOjppdGVyYXRvciBlbmQgPSBwYWdlR3JvdXBz
LT5lbmQoKTsKIAogICAgIGZvciAoUGFnZUdyb3VwTWFwOjppdGVyYXRvciBpdCA9IHBhZ2VHcm91
cHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnNlY29uZC0+
aGFzTG9jYWxTdG9yYWdlKCkpCi0gICAgICAgICAgICBpdC0+c2Vjb25kLT5sb2NhbFN0b3JhZ2Uo
KS0+Y2xvc2UoKTsKKyAgICAgICAgaWYgKGl0LT52YWx1ZS0+aGFzTG9jYWxTdG9yYWdlKCkpCisg
ICAgICAgICAgICBpdC0+dmFsdWUtPmxvY2FsU3RvcmFnZSgpLT5jbG9zZSgpOwogICAgIH0KIH0K
IApAQCAtMTIxLDggKzEyMSw4IEBAIHZvaWQgUGFnZUdyb3VwOjpjbGVhckxvY2FsU3RvcmFnZUZv
ckFsbE9yaWdpbnMoKQogCiAgICAgUGFnZUdyb3VwTWFwOjppdGVyYXRvciBlbmQgPSBwYWdlR3Jv
dXBzLT5lbmQoKTsKICAgICBmb3IgKFBhZ2VHcm91cE1hcDo6aXRlcmF0b3IgaXQgPSBwYWdlR3Jv
dXBzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQt
Pmhhc0xvY2FsU3RvcmFnZSgpKQotICAgICAgICAgICAgaXQtPnNlY29uZC0+bG9jYWxTdG9yYWdl
KCktPmNsZWFyQWxsT3JpZ2luc0ZvckRlbGV0aW9uKCk7CisgICAgICAgIGlmIChpdC0+dmFsdWUt
Pmhhc0xvY2FsU3RvcmFnZSgpKQorICAgICAgICAgICAgaXQtPnZhbHVlLT5sb2NhbFN0b3JhZ2Uo
KS0+Y2xlYXJBbGxPcmlnaW5zRm9yRGVsZXRpb24oKTsKICAgICB9CiB9CiAKQEAgLTEzMyw4ICsx
MzMsOCBAQCB2b2lkIFBhZ2VHcm91cDo6Y2xlYXJMb2NhbFN0b3JhZ2VGb3JPcmlnaW4oU2VjdXJp
dHlPcmlnaW4qIG9yaWdpbikKIAogICAgIFBhZ2VHcm91cE1hcDo6aXRlcmF0b3IgZW5kID0gcGFn
ZUdyb3Vwcy0+ZW5kKCk7CiAgICAgZm9yIChQYWdlR3JvdXBNYXA6Oml0ZXJhdG9yIGl0ID0gcGFn
ZUdyb3Vwcy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vj
b25kLT5oYXNMb2NhbFN0b3JhZ2UoKSkKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPmxvY2FsU3Rv
cmFnZSgpLT5jbGVhck9yaWdpbkZvckRlbGV0aW9uKG9yaWdpbik7CisgICAgICAgIGlmIChpdC0+
dmFsdWUtPmhhc0xvY2FsU3RvcmFnZSgpKQorICAgICAgICAgICAgaXQtPnZhbHVlLT5sb2NhbFN0
b3JhZ2UoKS0+Y2xlYXJPcmlnaW5Gb3JEZWxldGlvbihvcmlnaW4pOwogICAgIH0gICAgCiB9CiAg
ICAgCkBAIC0xNDUsOCArMTQ1LDggQEAgdm9pZCBQYWdlR3JvdXA6OnN5bmNMb2NhbFN0b3JhZ2Uo
KQogCiAgICAgUGFnZUdyb3VwTWFwOjppdGVyYXRvciBlbmQgPSBwYWdlR3JvdXBzLT5lbmQoKTsK
ICAgICBmb3IgKFBhZ2VHcm91cE1hcDo6aXRlcmF0b3IgaXQgPSBwYWdlR3JvdXBzLT5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQtPmhhc0xvY2FsU3Rv
cmFnZSgpKQotICAgICAgICAgICAgaXQtPnNlY29uZC0+bG9jYWxTdG9yYWdlKCktPnN5bmMoKTsK
KyAgICAgICAgaWYgKGl0LT52YWx1ZS0+aGFzTG9jYWxTdG9yYWdlKCkpCisgICAgICAgICAgICBp
dC0+dmFsdWUtPmxvY2FsU3RvcmFnZSgpLT5zeW5jKCk7CiAgICAgfQogfQogCkBAIC0yNjksNyAr
MjY5LDcgQEAgdm9pZCBQYWdlR3JvdXA6OmFkZFVzZXJTY3JpcHRUb1dvcmxkKERPTVdyYXBwZXJX
b3JsZCogd29ybGQsIGNvbnN0IFN0cmluZyYgc291cmMKICAgICBPd25QdHI8VXNlclNjcmlwdD4g
dXNlclNjcmlwdCA9IGFkb3B0UHRyKG5ldyBVc2VyU2NyaXB0KHNvdXJjZSwgdXJsLCB3aGl0ZWxp
c3QsIGJsYWNrbGlzdCwgaW5qZWN0aW9uVGltZSwgaW5qZWN0ZWRGcmFtZXMpKTsKICAgICBpZiAo
IW1fdXNlclNjcmlwdHMpCiAgICAgICAgIG1fdXNlclNjcmlwdHMgPSBhZG9wdFB0cihuZXcgVXNl
clNjcmlwdE1hcCk7Ci0gICAgT3duUHRyPFVzZXJTY3JpcHRWZWN0b3I+JiBzY3JpcHRzSW5Xb3Js
ZCA9IG1fdXNlclNjcmlwdHMtPmFkZCh3b3JsZCwgbnVsbHB0cikuaXRlcmF0b3ItPnNlY29uZDsK
KyAgICBPd25QdHI8VXNlclNjcmlwdFZlY3Rvcj4mIHNjcmlwdHNJbldvcmxkID0gbV91c2VyU2Ny
aXB0cy0+YWRkKHdvcmxkLCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCFzY3Jp
cHRzSW5Xb3JsZCkKICAgICAgICAgc2NyaXB0c0luV29ybGQgPSBhZG9wdFB0cihuZXcgVXNlclNj
cmlwdFZlY3Rvcik7CiAgICAgc2NyaXB0c0luV29ybGQtPmFwcGVuZCh1c2VyU2NyaXB0LnJlbGVh
c2UoKSk7CkBAIC0yODYsNyArMjg2LDcgQEAgdm9pZCBQYWdlR3JvdXA6OmFkZFVzZXJTdHlsZVNo
ZWV0VG9Xb3JsZChET01XcmFwcGVyV29ybGQqIHdvcmxkLCBjb25zdCBTdHJpbmcmIHMKICAgICBP
d25QdHI8VXNlclN0eWxlU2hlZXQ+IHVzZXJTdHlsZVNoZWV0ID0gYWRvcHRQdHIobmV3IFVzZXJT
dHlsZVNoZWV0KHNvdXJjZSwgdXJsLCB3aGl0ZWxpc3QsIGJsYWNrbGlzdCwgaW5qZWN0ZWRGcmFt
ZXMsIGxldmVsKSk7CiAgICAgaWYgKCFtX3VzZXJTdHlsZVNoZWV0cykKICAgICAgICAgbV91c2Vy
U3R5bGVTaGVldHMgPSBhZG9wdFB0cihuZXcgVXNlclN0eWxlU2hlZXRNYXApOwotICAgIE93blB0
cjxVc2VyU3R5bGVTaGVldFZlY3Rvcj4mIHN0eWxlU2hlZXRzSW5Xb3JsZCA9IG1fdXNlclN0eWxl
U2hlZXRzLT5hZGQod29ybGQsIG51bGxwdHIpLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgT3duUHRy
PFVzZXJTdHlsZVNoZWV0VmVjdG9yPiYgc3R5bGVTaGVldHNJbldvcmxkID0gbV91c2VyU3R5bGVT
aGVldHMtPmFkZCh3b3JsZCwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghc3R5
bGVTaGVldHNJbldvcmxkKQogICAgICAgICBzdHlsZVNoZWV0c0luV29ybGQgPSBhZG9wdFB0cihu
ZXcgVXNlclN0eWxlU2hlZXRWZWN0b3IpOwogICAgIHN0eWxlU2hlZXRzSW5Xb3JsZC0+YXBwZW5k
KHVzZXJTdHlsZVNoZWV0LnJlbGVhc2UoKSk7CkBAIC0zMDYsNyArMzA2LDcgQEAgdm9pZCBQYWdl
R3JvdXA6OnJlbW92ZVVzZXJTY3JpcHRGcm9tV29ybGQoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCwg
Y29uc3QgS1VSTCYgdXIKICAgICBpZiAoaXQgPT0gbV91c2VyU2NyaXB0cy0+ZW5kKCkpCiAgICAg
ICAgIHJldHVybjsKICAgICAKLSAgICBVc2VyU2NyaXB0VmVjdG9yKiBzY3JpcHRzID0gaXQtPnNl
Y29uZC5nZXQoKTsKKyAgICBVc2VyU2NyaXB0VmVjdG9yKiBzY3JpcHRzID0gaXQtPnZhbHVlLmdl
dCgpOwogICAgIGZvciAoaW50IGkgPSBzY3JpcHRzLT5zaXplKCkgLSAxOyBpID49IDA7IC0taSkg
ewogICAgICAgICBpZiAoc2NyaXB0cy0+YXQoaSktPnVybCgpID09IHVybCkKICAgICAgICAgICAg
IHNjcmlwdHMtPnJlbW92ZShpKTsKQEAgLTMyOCw3ICszMjgsNyBAQCB2b2lkIFBhZ2VHcm91cDo6
cmVtb3ZlVXNlclN0eWxlU2hlZXRGcm9tV29ybGQoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCwgY29u
c3QgS1VSTAogICAgIGlmIChpdCA9PSBtX3VzZXJTdHlsZVNoZWV0cy0+ZW5kKCkpCiAgICAgICAg
IHJldHVybjsKICAgICAKLSAgICBVc2VyU3R5bGVTaGVldFZlY3Rvciogc3R5bGVzaGVldHMgPSBp
dC0+c2Vjb25kLmdldCgpOworICAgIFVzZXJTdHlsZVNoZWV0VmVjdG9yKiBzdHlsZXNoZWV0cyA9
IGl0LT52YWx1ZS5nZXQoKTsKICAgICBmb3IgKGludCBpID0gc3R5bGVzaGVldHMtPnNpemUoKSAt
IDE7IGkgPj0gMDsgLS1pKSB7CiAgICAgICAgIGlmIChzdHlsZXNoZWV0cy0+YXQoaSktPnVybCgp
ID09IHVybCkgewogICAgICAgICAgICAgc3R5bGVzaGVldHMtPnJlbW92ZShpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAKaW5kZXggYzkxMWQ1NGE5MjU0NmE3Y2UxNGYxODY2
ZWNiY2VkOGI1NmU1NjYzYi4uYTE2MTQ5MjU1YzdlM2U0MjYwMzljNGExMzJmYjE2MmJjN2ExN2Zl
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAKQEAgLTMzOSw3ICszMzks
NyBAQCBLVVJMIFBhZ2VTZXJpYWxpemVyOjp1cmxGb3JCbGFua0ZyYW1lKEZyYW1lKiBmcmFtZSkK
IHsKICAgICBIYXNoTWFwPEZyYW1lKiwgS1VSTD46Oml0ZXJhdG9yIGl0ZXIgPSBtX2JsYW5rRnJh
bWVVUkxzLmZpbmQoZnJhbWUpOwogICAgIGlmIChpdGVyICE9IG1fYmxhbmtGcmFtZVVSTHMuZW5k
KCkpCi0gICAgICAgIHJldHVybiBpdGVyLT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBpdGVyLT52
YWx1ZTsKICAgICBTdHJpbmcgdXJsID0gInd5Y2l3eWc6Ly9mcmFtZS8iICsgU3RyaW5nOjpudW1i
ZXIobV9ibGFua0ZyYW1lQ291bnRlcisrKTsKICAgICBLVVJMIGZha2VVUkwoUGFyc2VkVVJMU3Ry
aW5nLCB1cmwpOwogICAgIG1fYmxhbmtGcmFtZVVSTHMuYWRkKGZyYW1lLCBmYWtlVVJMKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlQb2xpY3kuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9TZWN1cml0eVBvbGljeS5jcHAKaW5kZXggYzJhNWFiMTE0MzVlZjZkYjA1
NzY4Yzc2Y2EwMzU3YjU2MjU4MzMxMi4uNWIzNmY0ZjcxNmM0NGJmYjA5ZjIwZTYzMmNjMGQwMzg2
ZjNjY2EzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eVBvbGljeS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eVBvbGljeS5jcHAKQEAgLTEzMyw5
ICsxMzMsOSBAQCB2b2lkIFNlY3VyaXR5UG9saWN5OjphZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RF
bnRyeShjb25zdCBTZWN1cml0eU9yaWdpbiYgc291cmNlTwogICAgIFN0cmluZyBzb3VyY2VTdHJp
bmcgPSBzb3VyY2VPcmlnaW4udG9TdHJpbmcoKTsKICAgICBPcmlnaW5BY2Nlc3NNYXA6OkFkZFJl
c3VsdCByZXN1bHQgPSBvcmlnaW5BY2Nlc3NNYXAoKS5hZGQoc291cmNlU3RyaW5nLCBudWxscHRy
KTsKICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+
c2Vjb25kID0gYWRvcHRQdHIobmV3IE9yaWdpbkFjY2Vzc1doaXRlTGlzdCk7CisgICAgICAgIHJl
c3VsdC5pdGVyYXRvci0+dmFsdWUgPSBhZG9wdFB0cihuZXcgT3JpZ2luQWNjZXNzV2hpdGVMaXN0
KTsKIAotICAgIE9yaWdpbkFjY2Vzc1doaXRlTGlzdCogbGlzdCA9IHJlc3VsdC5pdGVyYXRvci0+
c2Vjb25kLmdldCgpOworICAgIE9yaWdpbkFjY2Vzc1doaXRlTGlzdCogbGlzdCA9IHJlc3VsdC5p
dGVyYXRvci0+dmFsdWUuZ2V0KCk7CiAgICAgbGlzdC0+YXBwZW5kKE9yaWdpbkFjY2Vzc0VudHJ5
KGRlc3RpbmF0aW9uUHJvdG9jb2wsIGRlc3RpbmF0aW9uRG9tYWluLCBhbGxvd0Rlc3RpbmF0aW9u
U3ViZG9tYWlucyA/IE9yaWdpbkFjY2Vzc0VudHJ5OjpBbGxvd1N1YmRvbWFpbnMgOiBPcmlnaW5B
Y2Nlc3NFbnRyeTo6RGlzYWxsb3dTdWJkb21haW5zKSk7CiB9CiAKQEAgLTE1Miw3ICsxNTIsNyBA
QCB2b2lkIFNlY3VyaXR5UG9saWN5OjpyZW1vdmVPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShj
b25zdCBTZWN1cml0eU9yaWdpbiYgc291cgogICAgIGlmIChpdCA9PSBtYXAuZW5kKCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIE9yaWdpbkFjY2Vzc1doaXRlTGlzdCogbGlzdCA9IGl0LT5zZWNv
bmQuZ2V0KCk7CisgICAgT3JpZ2luQWNjZXNzV2hpdGVMaXN0KiBsaXN0ID0gaXQtPnZhbHVlLmdl
dCgpOwogICAgIHNpemVfdCBpbmRleCA9IGxpc3QtPmZpbmQoT3JpZ2luQWNjZXNzRW50cnkoZGVz
dGluYXRpb25Qcm90b2NvbCwgZGVzdGluYXRpb25Eb21haW4sIGFsbG93RGVzdGluYXRpb25TdWJk
b21haW5zID8gT3JpZ2luQWNjZXNzRW50cnk6OkFsbG93U3ViZG9tYWlucyA6IE9yaWdpbkFjY2Vz
c0VudHJ5OjpEaXNhbGxvd1N1YmRvbWFpbnMpKTsKICAgICBpZiAoaW5kZXggPT0gbm90Rm91bmQp
CiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGlu
Z3MuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAKaW5kZXggZGQ1NTUwMTM5
MDQzMWVlYzZmNjNiODkwYWM1YTg2MTA2OGMzYjdlYi4uNmMxZGJhNGQ2NGJhMDYxN2ExYjhlOTAw
NTFhOTgxZWE1MmJmYWE4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5n
cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAKQEAgLTYwLDcgKzYw
LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldEdlbmVyaWNGb250RmFtaWx5TWFwKFNjcmlwdEZv
bnRGYW1pbHlNYXAmIGZvbnRNYXAsIGNvbnN0IEEKICAgICAgICAgaWYgKGl0ID09IGZvbnRNYXAu
ZW5kKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGZvbnRNYXAucmVtb3ZlKGl0KTsK
LSAgICB9IGVsc2UgaWYgKGl0ICE9IGZvbnRNYXAuZW5kKCkgJiYgaXQtPnNlY29uZCA9PSBmYW1p
bHkpCisgICAgfSBlbHNlIGlmIChpdCAhPSBmb250TWFwLmVuZCgpICYmIGl0LT52YWx1ZSA9PSBm
YW1pbHkpCiAgICAgICAgIHJldHVybjsKICAgICBlbHNlCiAgICAgICAgIGZvbnRNYXAuc2V0KHN0
YXRpY19jYXN0PGludD4oc2NyaXB0KSwgZmFtaWx5KTsKQEAgLTczLDcgKzczLDcgQEAgc3RhdGlj
IGlubGluZSBjb25zdCBBdG9taWNTdHJpbmcmIGdldEdlbmVyaWNGb250RmFtaWx5Rm9yU2NyaXB0
KGNvbnN0IFNjcmlwdEZvbnQKIHsKICAgICBTY3JpcHRGb250RmFtaWx5TWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IGZvbnRNYXAuZmluZChzdGF0aWNfY2FzdDxpbnQ+KHNjcmlwdCkpOwogICAgIGlm
IChpdCAhPSBmb250TWFwLmVuZCgpKQotICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICAg
ICAgcmV0dXJuIGl0LT52YWx1ZTsKICAgICBpZiAoc2NyaXB0ICE9IFVTQ1JJUFRfQ09NTU9OKQog
ICAgICAgICByZXR1cm4gZ2V0R2VuZXJpY0ZvbnRGYW1pbHlGb3JTY3JpcHQoZm9udE1hcCwgVVND
UklQVF9DT01NT04pOwogICAgIHJldHVybiBlbXB0eUF0b207CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1NwZWVjaElucHV0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU3BlZWNo
SW5wdXQuY3BwCmluZGV4IDAxMjhlZjhhNDBhNDI0MzU0YWI1ZjhlNTBiYThlY2M2MjI1N2IzYzku
LjgzMjhjNWQ0ZGYzMjk5NDJiNTlmM2VjYzIyNTM1NjhjZTJhOGExMWQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvU3BlZWNoSW5wdXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvU3BlZWNoSW5wdXQuY3BwCkBAIC02Miw3ICs2Miw3IEBAIGludCBTcGVlY2hJbnB1dDo6cmVn
aXN0ZXJMaXN0ZW5lcihTcGVlY2hJbnB1dExpc3RlbmVyKiBsaXN0ZW5lcikKICNpZiBkZWZpbmVk
KERFQlVHKQogICAgIC8vIENoZWNrIGlmIGFscmVhZHkgcHJlc2VudC4KICAgICBmb3IgKEhhc2hN
YXA8aW50LCBTcGVlY2hJbnB1dExpc3RlbmVyKj46Oml0ZXJhdG9yIGl0ID0gbV9saXN0ZW5lcnMu
YmVnaW4oKTsgaXQgIT0gbV9saXN0ZW5lcnMuZW5kKCk7ICsraXQpCi0gICAgICBBU1NFUlQoaXQt
PnNlY29uZCAhPSBsaXN0ZW5lcik7CisgICAgICBBU1NFUlQoaXQtPnZhbHVlICE9IGxpc3RlbmVy
KTsKICNlbmRpZgogCiAgICAgbV9saXN0ZW5lcnMuYWRkKG1fbmV4dExpc3RlbmVySWQsIGxpc3Rl
bmVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvV2luZG93RmVhdHVyZXMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9XaW5kb3dGZWF0dXJlcy5jcHAKaW5kZXggNzU2NDE1Mjhk
ZmVjMmY0YmVjN2VlYTMzZDA3NDBhMGRjN2Q3YmFjNC4uMWI2YjFkMGIxNjMyZTgyYTk0ZWYwNDY3
OWQwYTdkNDdhZDMxY2I1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9XaW5kb3dG
ZWF0dXJlcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9XaW5kb3dGZWF0dXJlcy5jcHAK
QEAgLTIxMiw3ICsyMTIsNyBAQCBib29sIFdpbmRvd0ZlYXR1cmVzOjpib29sRmVhdHVyZShjb25z
dCBEaWFsb2dGZWF0dXJlc01hcCYgZmVhdHVyZXMsIGNvbnN0IGNoYXIqCiAgICAgRGlhbG9nRmVh
dHVyZXNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZmVhdHVyZXMuZmluZChrZXkpOwogICAgIGlm
IChpdCA9PSBmZWF0dXJlcy5lbmQoKSkKICAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTsKLSAg
ICBjb25zdCBTdHJpbmcmIHZhbHVlID0gaXQtPnNlY29uZDsKKyAgICBjb25zdCBTdHJpbmcmIHZh
bHVlID0gaXQtPnZhbHVlOwogICAgIHJldHVybiB2YWx1ZS5pc051bGwoKSB8fCB2YWx1ZSA9PSAi
MSIgfHwgdmFsdWUgPT0gInllcyIgfHwgdmFsdWUgPT0gIm9uIjsKIH0KIApAQCAtMjI0LDcgKzIy
NCw3IEBAIGZsb2F0IFdpbmRvd0ZlYXR1cmVzOjpmbG9hdEZlYXR1cmUoY29uc3QgRGlhbG9nRmVh
dHVyZXNNYXAmIGZlYXR1cmVzLCBjb25zdCBjaGFyCiAgICAgLy8gRklYTUU6IFRoZSB0b0RvdWJs
ZSBmdW5jdGlvbiBkb2VzIG5vdCBvZmZlciBhIHdheSB0byB0ZWxsICIwcSIgZnJvbSBzdHJpbmcg
d2l0aCBubyBkaWdpdHMgaW4gaXQ6IEJvdGgKICAgICAvLyByZXR1cm4gdGhlIG51bWJlciAwIGFu
ZCBmYWxzZSBmb3Igb2suIEJ1dCAiMHEiIHNob3VsZCB5aWVsZCB0aGUgbWluaW11bSByYXRoZXIg
dGhhbiB0aGUgZGVmYXVsdC4KICAgICBib29sIG9rOwotICAgIGRvdWJsZSBwYXJzZWROdW1iZXIg
PSBpdC0+c2Vjb25kLnRvRG91YmxlKCZvayk7CisgICAgZG91YmxlIHBhcnNlZE51bWJlciA9IGl0
LT52YWx1ZS50b0RvdWJsZSgmb2spOwogICAgIGlmICgocGFyc2VkTnVtYmVyID09IDAgJiYgIW9r
KSB8fCBpc25hbihwYXJzZWROdW1iZXIpKQogICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlOwog
ICAgIGlmIChwYXJzZWROdW1iZXIgPCBtaW4gfHwgbWF4IDw9IG1pbikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKaW5kZXgg
YzQ5MTE5ZTZhMTNjMDE0YzhmMjU4ZTI5NDYxMzgxMWNkZmEwZDUxYi4uNWUwNzE3ZTBhOWNmYmEz
Mjg5ODI5NTYyMTc3OTEyYzA2Zjc4YzhiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKQEAgLTkzLDE0ICs5MywxNCBA
QCBkb3VibGUgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnVwZGF0ZUFuaW1hdGlvbnMoU2V0
Q2hhbmdlZCBjYWxsU2V0Q2hhbmdlZC8qCiAKICAgICBSZW5kZXJPYmplY3RBbmltYXRpb25NYXA6
OmNvbnN0X2l0ZXJhdG9yIGFuaW1hdGlvbnNFbmQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuZW5k
KCk7CiAgICAgZm9yIChSZW5kZXJPYmplY3RBbmltYXRpb25NYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGFuaW1hdGlvbnNFbmQ7ICsr
aXQpIHsKLSAgICAgICAgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wQW5pbSA9IGl0LT5zZWNvbmQu
Z2V0KCk7CisgICAgICAgIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcEFuaW0gPSBpdC0+dmFsdWUu
Z2V0KCk7CiAgICAgICAgIGlmICghY29tcEFuaW0tPnN1c3BlbmRlZCgpICYmIGNvbXBBbmltLT5o
YXNBbmltYXRpb25zKCkpIHsKICAgICAgICAgICAgIGRvdWJsZSB0ID0gY29tcEFuaW0tPnRpbWVU
b05leHRTZXJ2aWNlKCk7CiAgICAgICAgICAgICBpZiAodCAhPSAtMSAmJiAodCA8IHRpbWVUb05l
eHRTZXJ2aWNlIHx8IHRpbWVUb05leHRTZXJ2aWNlID09IC0xKSkKICAgICAgICAgICAgICAgICB0
aW1lVG9OZXh0U2VydmljZSA9IHQ7CiAgICAgICAgICAgICBpZiAoIXRpbWVUb05leHRTZXJ2aWNl
KSB7CiAgICAgICAgICAgICAgICAgaWYgKGNhbGxTZXRDaGFuZ2VkID09IENhbGxTZXRDaGFuZ2Vk
KSB7Ci0gICAgICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBpdC0+Zmlyc3QtPm5vZGUoKTsK
KyAgICAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGl0LT5rZXktPm5vZGUoKTsKICAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKCFub2RlIHx8IChub2RlLT5kb2N1bWVudCgpICYmICFub2Rl
LT5kb2N1bWVudCgpLT5pblBhZ2VDYWNoZSgpKSk7CiAgICAgICAgICAgICAgICAgICAgIG5vZGUt
PnNldE5lZWRzU3R5bGVSZWNhbGMoU3ludGhldGljU3R5bGVDaGFuZ2UpOwogICAgICAgICAgICAg
ICAgICAgICBjYWxsZWRTZXRDaGFuZ2VkID0gdHJ1ZTsKQEAgLTI5Miw5ICsyOTIsOSBAQCB2b2lk
IEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpzdXNwZW5kQW5pbWF0aW9uc0ZvckRvY3VtZW50
KERvY3VtZW50KiBkb2N1bWVudAogICAgIAogICAgIFJlbmRlck9iamVjdEFuaW1hdGlvbk1hcDo6
Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5lbmQo
KTsKICAgICBmb3IgKFJlbmRlck9iamVjdEFuaW1hdGlvbk1hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gYW5pbWF0aW9uc0VuZDsgKytp
dCkgewotICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gaXQtPmZpcnN0OworICAgICAg
ICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gaXQtPmtleTsKICAgICAgICAgaWYgKHJlbmRlcmVy
LT5kb2N1bWVudCgpID09IGRvY3VtZW50KSB7Ci0gICAgICAgICAgICBDb21wb3NpdGVBbmltYXRp
b24qIGNvbXBBbmltID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgIENvbXBvc2l0ZUFu
aW1hdGlvbiogY29tcEFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBjb21wQW5p
bS0+c3VzcGVuZEFuaW1hdGlvbnMoKTsKICAgICAgICAgfQogICAgIH0KQEAgLTMwOCw5ICszMDgs
OSBAQCB2b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpyZXN1bWVBbmltYXRpb25zRm9y
RG9jdW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50KQogICAgIAogICAgIFJlbmRlck9iamVjdEFuaW1h
dGlvbk1hcDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fY29tcG9zaXRlQW5pbWF0
aW9ucy5lbmQoKTsKICAgICBmb3IgKFJlbmRlck9iamVjdEFuaW1hdGlvbk1hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gYW5pbWF0aW9u
c0VuZDsgKytpdCkgewotICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gaXQtPmZpcnN0
OworICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gaXQtPmtleTsKICAgICAgICAgaWYg
KHJlbmRlcmVyLT5kb2N1bWVudCgpID09IGRvY3VtZW50KSB7Ci0gICAgICAgICAgICBDb21wb3Np
dGVBbmltYXRpb24qIGNvbXBBbmltID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgIENv
bXBvc2l0ZUFuaW1hdGlvbiogY29tcEFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAg
ICBjb21wQW5pbS0+cmVzdW1lQW5pbWF0aW9ucygpOwogICAgICAgICB9CiAgICAgfQpAQCAtMzk2
LDggKzM5Niw4IEBAIHVuc2lnbmVkIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpudW1iZXJP
ZkFjdGl2ZUFuaW1hdGlvbnMoRG9jdW1lbnQqIGRvY3VtZW50CiAgICAgCiAgICAgUmVuZGVyT2Jq
ZWN0QW5pbWF0aW9uTWFwOjpjb25zdF9pdGVyYXRvciBhbmltYXRpb25zRW5kID0gbV9jb21wb3Np
dGVBbmltYXRpb25zLmVuZCgpOwogICAgIGZvciAoUmVuZGVyT2JqZWN0QW5pbWF0aW9uTWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBh
bmltYXRpb25zRW5kOyArK2l0KSB7Ci0gICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBp
dC0+Zmlyc3Q7Ci0gICAgICAgIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcEFuaW0gPSBpdC0+c2Vj
b25kLmdldCgpOworICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gaXQtPmtleTsKKyAg
ICAgICAgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wQW5pbSA9IGl0LT52YWx1ZS5nZXQoKTsKICAg
ICAgICAgaWYgKHJlbmRlcmVyLT5kb2N1bWVudCgpID09IGRvY3VtZW50KQogICAgICAgICAgICAg
Y291bnQgKz0gY29tcEFuaW0tPm51bWJlck9mQWN0aXZlQW5pbWF0aW9ucygpOwogICAgIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlv
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24u
Y3BwCmluZGV4IGYzNTc3ODE4OTc0MGVlMzZlOGEzM2E1MGFmNmNhZDU2OTI5MGY5NmIuLjBiMGYz
NzlkNTZhYmQ4NWM2M2JhZTE0Y2U1ZWEyYjQ5YWIxM2VlOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmNwcApAQCAtNTgsNyAr
NTgsNyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6Y2xlYXJSZW5kZXJlcigpCiAgICAgICAg
IC8vIGFuIGFuaW1hdGlvbiBjYWxsYmFjayAoc2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMjA1MikKICAgICAgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6
Y29uc3RfaXRlcmF0b3IgdHJhbnNpdGlvbnNFbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOwogICAg
ICAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSB0cmFuc2l0aW9uc0VuZDsgKytpdCkgewotICAg
ICAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIHRyYW5zaXRpb24gPSBpdC0+c2Vjb25kLmdldCgp
OworICAgICAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIHRyYW5zaXRpb24gPSBpdC0+dmFsdWUu
Z2V0KCk7CiAgICAgICAgICAgICBhbmltYXRpb25Db250cm9sbGVyKCktPmFuaW1hdGlvbldpbGxC
ZVJlbW92ZWQodHJhbnNpdGlvbik7CiAgICAgICAgICAgICB0cmFuc2l0aW9uLT5jbGVhcigpOwog
ICAgICAgICB9CkBAIC02Nyw3ICs2Nyw3IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpjbGVh
clJlbmRlcmVyKCkKICAgICAgICAgbV9rZXlmcmFtZUFuaW1hdGlvbnMuY2hlY2tDb25zaXN0ZW5j
eSgpOwogICAgICAgICBBbmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBhbmltYXRpb25z
RW5kID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuZW5kKCk7CiAgICAgICAgIGZvciAoQW5pbWF0aW9u
TmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5iZWdpbigp
OyBpdCAhPSBhbmltYXRpb25zRW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBLZXlmcmFtZUFuaW1h
dGlvbiogYW5pbSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBLZXlmcmFtZUFuaW1h
dGlvbiogYW5pbSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGFuaW1hdGlvbkNvbnRy
b2xsZXIoKS0+YW5pbWF0aW9uV2lsbEJlUmVtb3ZlZChhbmltKTsKICAgICAgICAgICAgIGFuaW0t
PmNsZWFyKCk7CiAgICAgICAgIH0KQEAgLTg0LDcgKzg0LDcgQEAgdm9pZCBDb21wb3NpdGVBbmlt
YXRpb246OnVwZGF0ZVRyYW5zaXRpb25zKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIFJlbmRlclN0
eWxlKgogICAgIC8vIGluIHRoZSBuZXh0IGxvb3AgYW5kIHRoZW4gdG9zcyB0aGUgb25lcyB0aGF0
IGRpZG4ndCBnZXQgbWFya2VkLgogICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IG1fdHJhbnNpdGlvbnMuZW5kKCk7CiAgICAgZm9yIChDU1NQcm9wZXJ0
eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5zZXRBY3RpdmUoZmFsc2Up
OworICAgICAgICBpdC0+dmFsdWUtPnNldEFjdGl2ZShmYWxzZSk7CiAgICAgICAgIAogICAgIFJl
ZlB0cjxSZW5kZXJTdHlsZT4gbW9kaWZpZWRDdXJyZW50U3R5bGU7CiAgICAgCkBAIC0xODEsNyAr
MTgxLDcgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnVwZGF0ZVRyYW5zaXRpb25zKFJlbmRl
ck9iamVjdCogcmVuZGVyZXIsIFJlbmRlclN0eWxlKgogICAgIFZlY3RvcjxpbnQ+IHRvQmVSZW1v
dmVkOwogICAgIGVuZCA9IG1fdHJhbnNpdGlvbnMuZW5kKCk7CiAgICAgZm9yIChDU1NQcm9wZXJ0
eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0g
aXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGFuaW0gPSBpdC0+
dmFsdWUuZ2V0KCk7CiAgICAgICAgIGlmICghYW5pbS0+YWN0aXZlKCkpIHsKICAgICAgICAgICAg
IGFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+YW5pbWF0aW9uV2lsbEJlUmVtb3ZlZChhbmltKTsKICAg
ICAgICAgICAgIHRvQmVSZW1vdmVkLmFwcGVuZChhbmltLT5hbmltYXRpbmdQcm9wZXJ0eSgpKTsK
QEAgLTIwNywxMyArMjA3LDEzIEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVLZXlm
cmFtZUFuaW1hdGlvbnMoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgUmVuZGVyCiAgICAgICAgIC8v
IFRoZSBjdXJyZW50IGFuZCB0YXJnZXQgYW5pbWF0aW9ucyBhcmUgdGhlIHNhbWUgc28gd2UganVz
dCBuZWVkIHRvIHRvc3MgYW55IAogICAgICAgICAvLyBhbmltYXRpb24gd2hpY2ggaXMgZmluaXNo
ZWQgKHBvc3RBY3RpdmUpLgogICAgICAgICBmb3IgKEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0ga2ZlbmQ7ICsr
aXQpIHsKLSAgICAgICAgICAgIGlmIChpdC0+c2Vjb25kLT5wb3N0QWN0aXZlKCkpCi0gICAgICAg
ICAgICAgICAgaXQtPnNlY29uZC0+c2V0SW5kZXgoLTEpOworICAgICAgICAgICAgaWYgKGl0LT52
YWx1ZS0+cG9zdEFjdGl2ZSgpKQorICAgICAgICAgICAgICAgIGl0LT52YWx1ZS0+c2V0SW5kZXgo
LTEpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gTWFyayBhbGwgZXhpc3Rp
bmcgYW5pbWF0aW9ucyBhcyBubyBsb25nZXIgYWN0aXZlLgogICAgICAgICBmb3IgKEFuaW1hdGlv
bk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVnaW4o
KTsgaXQgIT0ga2ZlbmQ7ICsraXQpCi0gICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRJbmRleCgt
MSk7CisgICAgICAgICAgICBpdC0+dmFsdWUtPnNldEluZGV4KC0xKTsKICAgICAgICAgICAgIAog
ICAgICAgICAvLyBUb3NzIHRoZSBhbmltYXRpb24gb3JkZXIgbWFwLgogICAgICAgICBtX2tleWZy
YW1lQW5pbWF0aW9uT3JkZXJNYXAuY2xlYXIoKTsKQEAgLTI2Miw3ICsyNjIsNyBAQCB2b2lkIENv
bXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlS2V5ZnJhbWVBbmltYXRpb25zKFJlbmRlck9iamVjdCog
cmVuZGVyZXIsIFJlbmRlcgogICAgIFZlY3RvcjxBdG9taWNTdHJpbmdJbXBsKj4gYW5pbXNUb0Jl
UmVtb3ZlZDsKICAgICBrZmVuZCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmVuZCgpOwogICAgIGZv
ciAoQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lQW5pbWF0
aW9ucy5iZWdpbigpOyBpdCAhPSBrZmVuZDsgKytpdCkgewotICAgICAgICBLZXlmcmFtZUFuaW1h
dGlvbioga2V5ZnJhbWVBbmltID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgS2V5ZnJhbWVB
bmltYXRpb24qIGtleWZyYW1lQW5pbSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgaWYgKGtl
eWZyYW1lQW5pbS0+aW5kZXgoKSA8IDApIHsKICAgICAgICAgICAgIGFuaW1zVG9CZVJlbW92ZWQu
YXBwZW5kKGtleWZyYW1lQW5pbS0+bmFtZSgpLmltcGwoKSk7CiAgICAgICAgICAgICBhbmltYXRp
b25Db250cm9sbGVyKCktPmFuaW1hdGlvbldpbGxCZVJlbW92ZWQoa2V5ZnJhbWVBbmltKTsKQEAg
LTI5MCw3ICsyOTAsNyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBDb21wb3NpdGVBbmltYXRp
b246OmFuaW1hdGUoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgUmVuZAogICAgICAgICBpZiAoIW1f
dHJhbnNpdGlvbnMuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBDU1NQcm9wZXJ0eVRyYW5zaXRp
b25zTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOwogICAgICAg
ICAgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9
IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZC5nZXQoKSkKKyAgICAg
ICAgICAgICAgICBpZiAoSW1wbGljaXRBbmltYXRpb24qIGFuaW0gPSBpdC0+dmFsdWUuZ2V0KCkp
CiAgICAgICAgICAgICAgICAgICAgIGFuaW0tPmFuaW1hdGUodGhpcywgcmVuZGVyZXIsIGN1cnJl
bnRTdHlsZSwgdGFyZ2V0U3R5bGUsIHJlc3VsdFN0eWxlKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQpAQCAtMzEyLDcgKzMxMiw3IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IENvbXBvc2l0
ZUFuaW1hdGlvbjo6Z2V0QW5pbWF0ZWRTdHlsZSgpIGNvbnN0CiAgICAgUmVmUHRyPFJlbmRlclN0
eWxlPiByZXN1bHRTdHlsZTsKICAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9p
dGVyYXRvciBlbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOwogICAgIGZvciAoQ1NTUHJvcGVydHlU
cmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoSW1wbGljaXRBbmltYXRpb24qIGltcGxp
Y2l0QW5pbWF0aW9uID0gaXQtPnNlY29uZC5nZXQoKSkKKyAgICAgICAgaWYgKEltcGxpY2l0QW5p
bWF0aW9uKiBpbXBsaWNpdEFuaW1hdGlvbiA9IGl0LT52YWx1ZS5nZXQoKSkKICAgICAgICAgICAg
IGltcGxpY2l0QW5pbWF0aW9uLT5nZXRBbmltYXRlZFN0eWxlKHJlc3VsdFN0eWxlKTsKICAgICB9
CiAKQEAgLTMzMyw3ICszMzMsNyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6c2V0QW5pbWF0
aW5nKGJvb2wgYW5pbWF0aW5nKQogICAgIGlmICghbV90cmFuc2l0aW9ucy5pc0VtcHR5KCkpIHsK
ICAgICAgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgdHJhbnNp
dGlvbnNFbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOwogICAgICAgICBmb3IgKENTU1Byb3BlcnR5
VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigp
OyBpdCAhPSB0cmFuc2l0aW9uc0VuZDsgKytpdCkgewotICAgICAgICAgICAgSW1wbGljaXRBbmlt
YXRpb24qIHRyYW5zaXRpb24gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgSW1wbGlj
aXRBbmltYXRpb24qIHRyYW5zaXRpb24gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICB0
cmFuc2l0aW9uLT5zZXRBbmltYXRpbmcoYW5pbWF0aW5nKTsKICAgICAgICAgfQogICAgIH0KQEAg
LTM0MSw3ICszNDEsNyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6c2V0QW5pbWF0aW5nKGJv
b2wgYW5pbWF0aW5nKQogICAgICAgICBtX2tleWZyYW1lQW5pbWF0aW9ucy5jaGVja0NvbnNpc3Rl
bmN5KCk7CiAgICAgICAgIEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGFuaW1hdGlv
bnNFbmQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5lbmQoKTsKICAgICAgICAgZm9yIChBbmltYXRp
b25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmJlZ2lu
KCk7IGl0ICE9IGFuaW1hdGlvbnNFbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIEtleWZyYW1lQW5p
bWF0aW9uKiBhbmltID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgIEtleWZyYW1lQW5p
bWF0aW9uKiBhbmltID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAgICAgYW5pbS0+c2V0QW5p
bWF0aW5nKGFuaW1hdGluZyk7CiAgICAgICAgIH0KICAgICB9CkBAIC0zNTYsNyArMzU2LDcgQEAg
ZG91YmxlIENvbXBvc2l0ZUFuaW1hdGlvbjo6dGltZVRvTmV4dFNlcnZpY2UoKSBjb25zdAogICAg
IGlmICghbV90cmFuc2l0aW9ucy5pc0VtcHR5KCkpIHsKICAgICAgICAgQ1NTUHJvcGVydHlUcmFu
c2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgdHJhbnNpdGlvbnNFbmQgPSBtX3RyYW5zaXRpb25z
LmVuZCgpOwogICAgICAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSB0cmFuc2l0aW9uc0VuZDsg
KytpdCkgewotICAgICAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIHRyYW5zaXRpb24gPSBpdC0+
c2Vjb25kLmdldCgpOworICAgICAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIHRyYW5zaXRpb24g
PSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBkb3VibGUgdCA9IHRyYW5zaXRpb24gPyB0
cmFuc2l0aW9uLT50aW1lVG9OZXh0U2VydmljZSgpIDogLTE7CiAgICAgICAgICAgICBpZiAodCA8
IG1pblQgfHwgbWluVCA9PSAtMSkKICAgICAgICAgICAgICAgICBtaW5UID0gdDsKQEAgLTM2OCw3
ICszNjgsNyBAQCBkb3VibGUgQ29tcG9zaXRlQW5pbWF0aW9uOjp0aW1lVG9OZXh0U2VydmljZSgp
IGNvbnN0CiAgICAgICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsK
ICAgICAgICAgQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9
IG1fa2V5ZnJhbWVBbmltYXRpb25zLmVuZCgpOwogICAgICAgICBmb3IgKEFuaW1hdGlvbk5hbWVN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQg
IT0gYW5pbWF0aW9uc0VuZDsgKytpdCkgewotICAgICAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24q
IGFuaW1hdGlvbiA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBLZXlmcmFtZUFuaW1h
dGlvbiogYW5pbWF0aW9uID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAgICAgZG91YmxlIHQg
PSBhbmltYXRpb24gPyBhbmltYXRpb24tPnRpbWVUb05leHRTZXJ2aWNlKCkgOiAtMTsKICAgICAg
ICAgICAgIGlmICh0IDwgbWluVCB8fCBtaW5UID09IC0xKQogICAgICAgICAgICAgICAgIG1pblQg
PSB0OwpAQCAtMzkwLDcgKzM5MCw3IEBAIFBhc3NSZWZQdHI8S2V5ZnJhbWVBbmltYXRpb24+IENv
bXBvc2l0ZUFuaW1hdGlvbjo6Z2V0QW5pbWF0aW9uRm9yUHJvcGVydHkoQ1NTUHJvCiAgICAgICAg
IG1fa2V5ZnJhbWVBbmltYXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsKICAgICAgICAgQW5pbWF0
aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fa2V5ZnJhbWVBbmlt
YXRpb25zLmVuZCgpOwogICAgICAgICBmb3IgKEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gYW5pbWF0aW9uc0Vu
ZDsgKytpdCkgewotICAgICAgICAgICAgUmVmUHRyPEtleWZyYW1lQW5pbWF0aW9uPiBhbmltID0g
aXQtPnNlY29uZDsKKyAgICAgICAgICAgIFJlZlB0cjxLZXlmcmFtZUFuaW1hdGlvbj4gYW5pbSA9
IGl0LT52YWx1ZTsKICAgICAgICAgICAgIGlmIChhbmltLT5oYXNBbmltYXRpb25Gb3JQcm9wZXJ0
eShwcm9wZXJ0eSkpCiAgICAgICAgICAgICAgICAgcmV0dmFsID0gYW5pbTsKICAgICAgICAgfQpA
QCAtNDEwLDE0ICs0MTAsMTQgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnN1c3BlbmRBbmlt
YXRpb25zKCkKICAgICAgICAgbV9rZXlmcmFtZUFuaW1hdGlvbnMuY2hlY2tDb25zaXN0ZW5jeSgp
OwogICAgICAgICBBbmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBhbmltYXRpb25zRW5k
ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuZW5kKCk7CiAgICAgICAgIGZvciAoQW5pbWF0aW9uTmFt
ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5iZWdpbigpOyBp
dCAhPSBhbmltYXRpb25zRW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAoS2V5ZnJhbWVBbmlt
YXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kLmdldCgpKQorICAgICAgICAgICAgaWYgKEtleWZyYW1l
QW5pbWF0aW9uKiBhbmltID0gaXQtPnZhbHVlLmdldCgpKQogICAgICAgICAgICAgICAgIGFuaW0t
PnVwZGF0ZVBsYXlTdGF0ZShBbmltUGxheVN0YXRlUGF1c2VkKTsKICAgICAgICAgfQogICAgIH0K
ICAgICBpZiAoIW1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSB7CiAgICAgICAgIENTU1Byb3BlcnR5
VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIHRyYW5zaXRpb25zRW5kID0gbV90cmFuc2l0
aW9ucy5lbmQoKTsKICAgICAgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gdHJhbnNpdGlvbnNF
bmQ7ICsraXQpIHsKLSAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnNl
Y29uZC5nZXQoKTsKKyAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnZh
bHVlLmdldCgpOwogICAgICAgICAgICAgaWYgKGFuaW0gJiYgYW5pbS0+aGFzU3R5bGUoKSkKICAg
ICAgICAgICAgICAgICBhbmltLT51cGRhdGVQbGF5U3RhdGUoQW5pbVBsYXlTdGF0ZVBhdXNlZCk7
CiAgICAgICAgIH0KQEAgLTQzNSw3ICs0MzUsNyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6
cmVzdW1lQW5pbWF0aW9ucygpCiAgICAgICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zLmNoZWNrQ29u
c2lzdGVuY3koKTsKICAgICAgICAgQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgYW5p
bWF0aW9uc0VuZCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmVuZCgpOwogICAgICAgICBmb3IgKEFu
aW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMu
YmVnaW4oKTsgaXQgIT0gYW5pbWF0aW9uc0VuZDsgKytpdCkgewotICAgICAgICAgICAgS2V5ZnJh
bWVBbmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgS2V5ZnJh
bWVBbmltYXRpb24qIGFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoYW5p
bSAmJiBhbmltLT5wbGF5U3RhdGVQbGF5aW5nKCkpCiAgICAgICAgICAgICAgICAgYW5pbS0+dXBk
YXRlUGxheVN0YXRlKEFuaW1QbGF5U3RhdGVQbGF5aW5nKTsKICAgICAgICAgfQpAQCAtNDQ0LDcg
KzQ0NCw3IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpyZXN1bWVBbmltYXRpb25zKCkKICAg
ICBpZiAoIW1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSB7CiAgICAgICAgIENTU1Byb3BlcnR5VHJh
bnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIHRyYW5zaXRpb25zRW5kID0gbV90cmFuc2l0aW9u
cy5lbmQoKTsKICAgICAgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gdHJhbnNpdGlvbnNFbmQ7
ICsraXQpIHsKLSAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29u
ZC5nZXQoKTsKKyAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnZhbHVl
LmdldCgpOwogICAgICAgICAgICAgaWYgKGFuaW0gJiYgYW5pbS0+aGFzU3R5bGUoKSkKICAgICAg
ICAgICAgICAgICBhbmltLT51cGRhdGVQbGF5U3RhdGUoQW5pbVBsYXlTdGF0ZVBsYXlpbmcpOwog
ICAgICAgICB9CkBAIC00NTYsNyArNDU2LDcgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246Om92
ZXJyaWRlSW1wbGljaXRBbmltYXRpb25zKENTU1Byb3BlcnR5SUQgcHJvcGVydHkpCiAgICAgQ1NT
UHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV90cmFuc2l0aW9u
cy5lbmQoKTsKICAgICBpZiAoIW1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSB7CiAgICAgICAgIGZv
ciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5z
aXRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgSW1wbGljaXRB
bmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgSW1wbGljaXRB
bmltYXRpb24qIGFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoYW5pbSAm
JiBhbmltLT5hbmltYXRpbmdQcm9wZXJ0eSgpID09IHByb3BlcnR5KQogICAgICAgICAgICAgICAg
IGFuaW0tPnNldE92ZXJyaWRkZW4odHJ1ZSk7CiAgICAgICAgIH0KQEAgLTQ2OCw3ICs0NjgsNyBA
QCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6cmVzdW1lT3ZlcnJpZGRlbkltcGxpY2l0QW5pbWF0
aW9ucyhDU1NQcm9wZXJ0eUlEIHByb3BlcgogICAgIGlmICghbV90cmFuc2l0aW9ucy5pc0VtcHR5
KCkpIHsKICAgICAgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKICAgICAgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5z
aXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0
LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0
LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGlmIChhbmltICYmIGFuaW0tPmFuaW1hdGluZ1By
b3BlcnR5KCkgPT0gcHJvcGVydHkpCiAgICAgICAgICAgICAgICAgYW5pbS0+c2V0T3ZlcnJpZGRl
bihmYWxzZSk7CiAgICAgICAgIH0KQEAgLTQ4MSw3ICs0ODEsNyBAQCBib29sIENvbXBvc2l0ZUFu
aW1hdGlvbjo6aXNBbmltYXRpbmdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBib29s
IGFjY2VsZQogICAgICAgICBtX2tleWZyYW1lQW5pbWF0aW9ucy5jaGVja0NvbnNpc3RlbmN5KCk7
CiAgICAgICAgIEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGFuaW1hdGlvbnNFbmQg
PSBtX2tleWZyYW1lQW5pbWF0aW9ucy5lbmQoKTsKICAgICAgICAgZm9yIChBbmltYXRpb25OYW1l
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmJlZ2luKCk7IGl0
ICE9IGFuaW1hdGlvbnNFbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIEtleWZyYW1lQW5pbWF0aW9u
KiBhbmltID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgIEtleWZyYW1lQW5pbWF0aW9u
KiBhbmltID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAgICAgaWYgKGFuaW0gJiYgYW5pbS0+
aXNBbmltYXRpbmdQcm9wZXJ0eShwcm9wZXJ0eSwgYWNjZWxlcmF0ZWRPbmx5LCBpc1J1bm5pbmdO
b3cpKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC00OTAsNyAr
NDkwLDcgQEAgYm9vbCBDb21wb3NpdGVBbmltYXRpb246OmlzQW5pbWF0aW5nUHJvcGVydHkoQ1NT
UHJvcGVydHlJRCBwcm9wZXJ0eSwgYm9vbCBhY2NlbGUKICAgICBpZiAoIW1fdHJhbnNpdGlvbnMu
aXNFbXB0eSgpKSB7CiAgICAgICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0
ZXJhdG9yIHRyYW5zaXRpb25zRW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKICAgICAgICAgZm9y
IChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNp
dGlvbnMuYmVnaW4oKTsgaXQgIT0gdHJhbnNpdGlvbnNFbmQ7ICsraXQpIHsKLSAgICAgICAgICAg
IEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAg
IEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAgICAg
aWYgKGFuaW0gJiYgYW5pbS0+aXNBbmltYXRpbmdQcm9wZXJ0eShwcm9wZXJ0eSwgYWNjZWxlcmF0
ZWRPbmx5LCBpc1J1bm5pbmdOb3cpKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICB9CkBAIC01NTYsNyArNTU2LDcgQEAgdW5zaWduZWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpu
dW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoKSBjb25zdAogICAgICAgICBtX2tleWZyYW1lQW5pbWF0
aW9ucy5jaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgICAgIEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0
X2l0ZXJhdG9yIGFuaW1hdGlvbnNFbmQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5lbmQoKTsKICAg
ICAgICAgZm9yIChBbmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJh
bWVBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGFuaW1hdGlvbnNFbmQ7ICsraXQpIHsKLSAgICAg
ICAgICAgIEtleWZyYW1lQW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAg
ICAgICAgIEtleWZyYW1lQW5pbWF0aW9uKiBhbmltID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAg
ICAgICAgaWYgKGFuaW0tPnJ1bm5pbmcoKSkKICAgICAgICAgICAgICAgICArK2NvdW50OwogICAg
ICAgICB9CkBAIC01NjUsNyArNTY1LDcgQEAgdW5zaWduZWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpu
dW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoKSBjb25zdAogICAgIGlmICghbV90cmFuc2l0aW9ucy5p
c0VtcHR5KCkpIHsKICAgICAgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRl
cmF0b3IgdHJhbnNpdGlvbnNFbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOwogICAgICAgICBmb3Ig
KENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0
aW9ucy5iZWdpbigpOyBpdCAhPSB0cmFuc2l0aW9uc0VuZDsgKytpdCkgewotICAgICAgICAgICAg
SW1wbGljaXRBbmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAg
SW1wbGljaXRBbmltYXRpb24qIGFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBp
ZiAoYW5pbS0+cnVubmluZygpKQogICAgICAgICAgICAgICAgICsrY291bnQ7CiAgICAgICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xhbmd1YWdlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0xhbmd1YWdlLmNwcAppbmRleCA0N2YwOWY2MDkyOTk3MWUzMTcz
NTZlNDlmYmNiNjNiNWRiNDE3ZjM3Li5iM2Y5N2JlYzk3MjE1YjgwOWIzNDFlYWMwMWE2MTdlODFh
YTdhMDZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MYW5ndWFnZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGFuZ3VhZ2UuY3BwCkBAIC01Myw3ICs1Myw3
IEBAIHZvaWQgbGFuZ3VhZ2VEaWRDaGFuZ2UoKQogewogICAgIE9ic2VydmVyTWFwOjppdGVyYXRv
ciBlbmQgPSBvYnNlcnZlck1hcCgpLmVuZCgpOwogICAgIGZvciAoT2JzZXJ2ZXJNYXA6Oml0ZXJh
dG9yIGl0ZXIgPSBvYnNlcnZlck1hcCgpLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCi0g
ICAgICAgIGl0ZXItPnNlY29uZChpdGVyLT5maXJzdCk7CisgICAgICAgIGl0ZXItPnZhbHVlKGl0
ZXItPmtleSk7CiB9CiAKIFN0cmluZyBkZWZhdWx0TGFuZ3VhZ2UoKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmNwcAppbmRleCAyODljNjY5OWIwNWY0OWZiNzE3
YzBjNDAzYzJiNTcxYmJjOWMyOGI4Li44ZjUyMTAzYzJlOWNhZTk3ZGE0NGQzNGMzYjIyODI5NWY5
NjhhZGNhIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NSU1FVHlwZVJlZ2lz
dHJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmNw
cApAQCAtNjkyLDcgKzY5Miw3IEBAIFN0cmluZyBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXROb3JtYWxp
emVkTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKICAgICBNSU1FVHlwZUFzc29jaWF0
aW9uTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1pbWVUeXBlQXNzb2NpYXRpb25NYXAoKS5maW5k
KG1pbWVUeXBlKTsKIAogICAgIGlmIChpdCAhPSBtaW1lVHlwZUFzc29jaWF0aW9uTWFwKCkuZW5k
KCkpCi0gICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gaXQtPnZhbHVl
OwogI2VuZGlmCiAgICAgcmV0dXJuIG1pbWVUeXBlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vYXVkaW8vSFJURkVsZXZhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9hdWRpby9IUlRGRWxldmF0aW9uLmNwcAppbmRleCAwODBiMzkxMWVhYzAyOWI0Njc3
NGMyZjYxNmU2YWUwZjM3ZDdiOGE0Li5iMDM2YTI1NmQ1YzU0MTdhNTkyY2Y2M2QwMTM5MGI0NzQw
M2M0NDMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9IUlRGRWxl
dmF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9IUlRGRWxldmF0
aW9uLmNwcApAQCAtNzksNyArNzksNyBAQCBzdGF0aWMgQXVkaW9CdXMqIGdldENvbmNhdGVuYXRl
ZEltcHVsc2VSZXNwb25zZXNGb3JTdWJqZWN0KGNvbnN0IFN0cmluZyYgc3ViamVjdAogICAgICAg
ICBidXMgPSBjb25jYXRlbmF0ZWRJbXB1bHNlUmVzcG9uc2VzLmxlYWtQdHIoKTsKICAgICAgICAg
YXVkaW9CdXNNYXAuc2V0KHN1YmplY3ROYW1lLCBidXMpOwogICAgIH0gZWxzZQotICAgICAgICBi
dXMgPSBpdGVyYXRvci0+c2Vjb25kOworICAgICAgICBidXMgPSBpdGVyYXRvci0+dmFsdWU7CiAK
ICAgICBzaXplX3QgcmVzcG9uc2VMZW5ndGggPSBidXMtPmxlbmd0aCgpOwogICAgIHNpemVfdCBl
eHBlY3RlZExlbmd0aCA9IHN0YXRpY19jYXN0PHNpemVfdD4oVG90YWxOdW1iZXJPZlJlc3BvbnNl
cyAqIFJlc3BvbnNlRnJhbWVTaXplKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2JsYWNrYmVycnkvQ29va2llTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ibGFja2JlcnJ5L0Nvb2tpZU1hbmFnZXIuY3BwCmluZGV4IDI4NjIyM2YzMjkzOTY1NzJjNTNk
NTA5NmY1MDA3NjYwMzk5Y2U4YTguLmZkYzliOTk5ODdiYjYxYzQzZTA4NTgyMmY5MjY1MzEyODMy
NzEyNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvQ29v
a2llTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9D
b29raWVNYW5hZ2VyLmNwcApAQCAtMTc0LDcgKzE3NCw3IEBAIFN0cmluZyBDb29raWVNYW5hZ2Vy
OjpnZW5lcmF0ZUh0bWxGcmFnbWVudEZvckNvb2tpZXMoKQogCiAgICAgVmVjdG9yPFBhcnNlZENv
b2tpZSo+IGNvb2tpZUNhbmRpZGF0ZXM7CiAgICAgZm9yIChIYXNoTWFwPFN0cmluZywgQ29va2ll
TWFwKj46Oml0ZXJhdG9yIGl0ID0gbV9tYW5hZ2VyTWFwLmJlZ2luKCk7IGl0ICE9IG1fbWFuYWdl
ck1hcC5lbmQoKTsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+Z2V0QWxsQ2hpbGRDb29raWVz
KCZjb29raWVDYW5kaWRhdGVzKTsKKyAgICAgICAgaXQtPnZhbHVlLT5nZXRBbGxDaGlsZENvb2tp
ZXMoJmNvb2tpZUNhbmRpZGF0ZXMpOwogCiAgICAgU3RyaW5nIHJlc3VsdDsKICAgICBQYXJzZWRD
b29raWUqIGNvb2tpZSA9IDA7CkBAIC0yOTMsNyArMjkzLDcgQEAgdm9pZCBDb29raWVNYW5hZ2Vy
OjpyZW1vdmVBbGxDb29raWVzKEJhY2tpbmdTdG9yZVJlbW92YWxQb2xpY3kgYmFja2luZ1N0b3Jl
UmVtb3YKICAgICBIYXNoTWFwPFN0cmluZywgQ29va2llTWFwKj46Oml0ZXJhdG9yIGZpcnN0ID0g
bV9tYW5hZ2VyTWFwLmJlZ2luKCk7CiAgICAgSGFzaE1hcDxTdHJpbmcsIENvb2tpZU1hcCo+Ojpp
dGVyYXRvciBlbmQgPSBtX21hbmFnZXJNYXAuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPFN0cmlu
ZywgQ29va2llTWFwKj46Oml0ZXJhdG9yIGl0ID0gZmlyc3Q7IGl0ICE9IGVuZDsgKytpdCkKLSAg
ICAgICAgaXQtPnNlY29uZC0+ZGVsZXRlQWxsQ29va2llc0FuZERvbWFpbnMoKTsKKyAgICAgICAg
aXQtPnZhbHVlLT5kZWxldGVBbGxDb29raWVzQW5kRG9tYWlucygpOwogCiAgICAgaWYgKGJhY2tp
bmdTdG9yZVJlbW92YWwgPT0gUmVtb3ZlRnJvbUJhY2tpbmdTdG9yZSkKICAgICAgICAgbV9jb29r
aWVCYWNraW5nU3RvcmUtPnJlbW92ZUFsbCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYmxhY2tiZXJyeS9Db29raWVNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYmxhY2tiZXJyeS9Db29raWVNYXAuY3BwCmluZGV4IGJiZTlhN2NlZGY3M2Y3MGQ1MGM0ZGQw
NzI0ZjRhNWQ2YTAxNWM3YTguLmFmNDg1YjU0YzIwZWNjZmNhMGFhNGQ5OTVmYjcyMGE0NTM0ZDc4
YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvQ29va2ll
TWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0Nvb2tpZU1h
cC5jcHAKQEAgLTE3Miw3ICsxNzIsNyBAQCBQYXJzZWRDb29raWUqIENvb2tpZU1hcDo6cmVtb3Zl
T2xkZXN0Q29va2llKCkKICAgICAgICAgQ29va2llTG9nKCJDb29raWVNYXAgLSBsb29raW5nIGlu
dG8gc3ViZG9tYWlucyIpOwogCiAgICAgICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIENvb2tpZU1h
cCo+OjppdGVyYXRvciBpdCA9IG1fc3ViZG9tYWlucy5iZWdpbigpOyBpdCAhPSBtX3N1YmRvbWFp
bnMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgICAgIG9sZGVzdENvb2tpZSA9IGl0LT5zZWNvbmQt
PnJlbW92ZU9sZGVzdENvb2tpZSgpOworICAgICAgICAgICAgb2xkZXN0Q29va2llID0gaXQtPnZh
bHVlLT5yZW1vdmVPbGRlc3RDb29raWUoKTsKICAgICAgICAgICAgIGlmIChvbGRlc3RDb29raWUp
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTIxNCw3ICsyMTQsNyBAQCB2
b2lkIENvb2tpZU1hcDo6Z2V0QWxsQ2hpbGRDb29raWVzKFZlY3RvcjxQYXJzZWRDb29raWUqPiog
c3RhY2tPZkNvb2tpZXMpCiAgICAgQ29va2llTG9nKCJDb29raWVNYXAgLSBnZXRBbGxDaGlsZENv
b2tpZXMgaW4gTWFwIC0gJXMiLCBnZXROYW1lKCkudXRmOCgpLmRhdGEoKSk7CiAgICAgZ2V0QWxs
Q29va2llcyhzdGFja09mQ29va2llcyk7CiAgICAgZm9yIChIYXNoTWFwPFN0cmluZywgQ29va2ll
TWFwKj46Oml0ZXJhdG9yIGl0ID0gbV9zdWJkb21haW5zLmJlZ2luKCk7IGl0ICE9IG1fc3ViZG9t
YWlucy5lbmQoKTsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+Z2V0QWxsQ2hpbGRDb29raWVz
KHN0YWNrT2ZDb29raWVzKTsKKyAgICAgICAgaXQtPnZhbHVlLT5nZXRBbGxDaGlsZENvb2tpZXMo
c3RhY2tPZkNvb2tpZXMpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9CaW5hcnlQcm9wZXJ0eUxpc3QuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2YvQmluYXJ5UHJvcGVydHlMaXN0LmNwcAppbmRleCA5YmE5
NjE3ZGQxODFlMzZjNjIwYzE0ODExODBlMDdmYmNjM2JiMWQyLi5kYTI0NGVlYTZmZTY1Y2M5Yzhm
MmY4ODUyOWMxN2E1YmIwOGZkNTJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jZi9CaW5hcnlQcm9wZXJ0eUxpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2NmL0JpbmFyeVByb3BlcnR5TGlzdC5jcHAKQEAgLTIyOSw3ICsyMjksNyBAQCB2b2lkIEJpbmFy
eVByb3BlcnR5TGlzdFBsYW46OndyaXRlSW50ZWdlckFycmF5KGNvbnN0IGludCogaW50ZWdlcnMs
IHNpemVfdCBzaXplKQogICAgICAgICByZXR1cm47CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzaXplOyArK2kpCiAgICAgICAgIHdyaXRlSW50ZWdlcihpbnRlZ2Vyc1tpXSk7Ci0gICAgYWRk
UmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBtX2N1cnJlbnRPYmplY3RSZWZlcmVuY2UrKzsKKyAg
ICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gbV9jdXJyZW50T2JqZWN0UmVmZXJlbmNlKys7
CiAgICAgd3JpdGVBcnJheU9iamVjdChzaXplKTsKICAgICBtX2N1cnJlbnRBZ2dyZWdhdGVTaXpl
ID0gc2F2ZWRBZ2dyZWdhdGVTaXplOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJIVFRQTG9hZEluZm8uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJIVFRQTG9hZEluZm8uY3BwCmluZGV4IDc3
NjJmZDhjNDlmZGEyNDJhMzcwMjZjNmRmZTY3N2YyMzA1MGUyOWQuLjY2MzcxYjRhYjFkMmRkMjU0
ZmJiZGQ3YTlkZTcyZWQ0MTE5ZDU2NjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViSFRUUExvYWRJbmZvLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYkhUVFBMb2FkSW5mby5jcHAKQEAgLTEw
Niw3ICsxMDYsNyBAQCBzdGF0aWMgdm9pZCBhZGRIZWFkZXIoSFRUUEhlYWRlck1hcCogbWFwLCBj
b25zdCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYlN0cmluZwogICAgIEhUVFBIZWFkZXJNYXA6
OkFkZFJlc3VsdCByZXN1bHQgPSBtYXAtPmFkZChuYW1lLCB2YWx1ZSk7CiAgICAgLy8gSXQgaXMg
aW1wb3J0YW50IHRoYXQgdmFsdWVzIGFyZSBzZXBhcmF0ZWQgYnkgJ1xuJywgbm90IGNvbW1hLCBv
dGhlcndpc2UgU2V0LUNvb2tpZSBoZWFkZXIgaXMgbm90IHBhcnNlYWJsZS4KICAgICBpZiAoIXJl
c3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCArPSAiXG4i
ICsgU3RyaW5nKHZhbHVlKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSArPSAiXG4i
ICsgU3RyaW5nKHZhbHVlKTsKIH0KIAogdm9pZCBXZWJIVFRQTG9hZEluZm86OmFkZFJlcXVlc3RI
ZWFkZXIoY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBjb25zdCBXZWJTdHJpbmcmIHZhbHVlKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJVUkxS
ZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2Vi
VVJMUmVxdWVzdC5jcHAKaW5kZXggZjQzN2I1MTY0M2IyMzRiNjA5Zjc3MjVmYjhkNzZkNzMxZjU2
MTdlYS4uZTM4NTEwMTRmY2RkNDViZmFjYjQ4Yjk3YmJhNzZlMzFkOGI0YTAxNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJVUkxSZXF1ZXN0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlVS
TFJlcXVlc3QuY3BwCkBAIC0xOTUsNyArMTk1LDcgQEAgdm9pZCBXZWJVUkxSZXF1ZXN0Ojp2aXNp
dEhUVFBIZWFkZXJGaWVsZHMoV2ViSFRUUEhlYWRlclZpc2l0b3IqIHZpc2l0b3IpIGNvbnN0CiB7
CiAgICAgY29uc3QgSFRUUEhlYWRlck1hcCYgbWFwID0gbV9wcml2YXRlLT5tX3Jlc291cmNlUmVx
dWVzdC0+aHR0cEhlYWRlckZpZWxkcygpOwogICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtYXAuYmVnaW4oKTsgaXQgIT0gbWFwLmVuZCgpOyArK2l0KQotICAgICAg
ICB2aXNpdG9yLT52aXNpdEhlYWRlcihpdC0+Zmlyc3QsIGl0LT5zZWNvbmQpOworICAgICAgICB2
aXNpdG9yLT52aXNpdEhlYWRlcihpdC0+a2V5LCBpdC0+dmFsdWUpOwogfQogCiBXZWJIVFRQQm9k
eSBXZWJVUkxSZXF1ZXN0OjpodHRwQm9keSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlVSTFJlc3BvbnNlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVVJMUmVzcG9uc2UuY3BwCmlu
ZGV4IDFmOWI5Njg2MGUwYmEyZTkzODViZTU1NTk1ZGE2ZTA5ZjUxNTEzZDQuLjgwNTY2NjQ5MWIz
NTQ4YzZiNDkxNDliMWZhNzUyNWFjYmQzMmQ4ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVVJMUmVzcG9uc2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVVJMUmVzcG9uc2UuY3BwCkBA
IC0yNjEsNyArMjYxLDcgQEAgdm9pZCBXZWJVUkxSZXNwb25zZTo6YWRkSFRUUEhlYWRlckZpZWxk
KGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgY29uc3QgV2ViU3RyaW5nJgogICAgIEhUVFBIZWFkZXJN
YXA6OkFkZFJlc3VsdCByZXN1bHQgPQogICAgICAgICBjb25zdF9jYXN0PEhUVFBIZWFkZXJNYXAq
PigmbWFwKS0+YWRkKG5hbWUsIHZhbHVlU3RyKTsKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5
KQotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCArPSAiLCAiICsgdmFsdWVTdHI7Cisg
ICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgKz0gIiwgIiArIHZhbHVlU3RyOwogfQogCiB2
b2lkIFdlYlVSTFJlc3BvbnNlOjpjbGVhckhUVFBIZWFkZXJGaWVsZChjb25zdCBXZWJTdHJpbmcm
IG5hbWUpCkBAIC0yNzUsNyArMjc1LDcgQEAgdm9pZCBXZWJVUkxSZXNwb25zZTo6dmlzaXRIVFRQ
SGVhZGVyRmllbGRzKFdlYkhUVFBIZWFkZXJWaXNpdG9yKiB2aXNpdG9yKSBjb25zdAogewogICAg
IGNvbnN0IEhUVFBIZWFkZXJNYXAmIG1hcCA9IG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlc3BvbnNl
LT5odHRwSGVhZGVyRmllbGRzKCk7CiAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IG1hcC5iZWdpbigpOyBpdCAhPSBtYXAuZW5kKCk7ICsraXQpCi0gICAgICAgIHZp
c2l0b3ItPnZpc2l0SGVhZGVyKGl0LT5maXJzdCwgaXQtPnNlY29uZCk7CisgICAgICAgIHZpc2l0
b3ItPnZpc2l0SGVhZGVyKGl0LT5rZXksIGl0LT52YWx1ZSk7CiB9CiAKIGRvdWJsZSBXZWJVUkxS
ZXNwb25zZTo6bGFzdE1vZGlmaWVkRGF0ZSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5UmVmcmVzaE1vbml0b3IuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9yLmNwcAppbmRl
eCAzMGQ4ZDNkNDFlMjJiZGRhMTA3NjRkOGY2YTFlZjQwMzNhNjI5ZGFhLi5mODkxMDNmOWJlMmI1
ZWVkZDA3ZmE3NDExZmUyNzkxYTYyMTgxZWUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5UmVmcmVzaE1vbml0b3IuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvci5jcHAKQEAgLTEz
Nyw3ICsxMzcsNyBAQCBEaXNwbGF5UmVmcmVzaE1vbml0b3IqIERpc3BsYXlSZWZyZXNoTW9uaXRv
ck1hbmFnZXI6OmVuc3VyZU1vbml0b3JGb3JDbGllbnQoRGlzcAogICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgIH0KIAotICAgIHJldHVybiBpdC0+c2Vjb25kLmdldCgpOworICAgIHJldHVybiBp
dC0+dmFsdWUuZ2V0KCk7CiB9CiAKIHZvaWQgRGlzcGxheVJlZnJlc2hNb25pdG9yTWFuYWdlcjo6
cmVnaXN0ZXJDbGllbnQoRGlzcGxheVJlZnJlc2hNb25pdG9yQ2xpZW50KiBjbGllbnQpCkBAIC0x
NTcsNyArMTU3LDcgQEAgdm9pZCBEaXNwbGF5UmVmcmVzaE1vbml0b3JNYW5hZ2VyOjp1bnJlZ2lz
dGVyQ2xpZW50KERpc3BsYXlSZWZyZXNoTW9uaXRvckNsaWVudCoKICAgICBpZiAoaXQgPT0gbV9t
b25pdG9ycy5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIERpc3BsYXlSZWZyZXNo
TW9uaXRvciogbW9uaXRvciA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgRGlzcGxheVJlZnJlc2hN
b25pdG9yKiBtb25pdG9yID0gaXQtPnZhbHVlLmdldCgpOwogICAgIGlmIChtb25pdG9yLT5yZW1v
dmVDbGllbnQoY2xpZW50KSkgewogICAgICAgICBpZiAoIW1vbml0b3ItPmhhc0NsaWVudHMoKSkK
ICAgICAgICAgICAgIG1fbW9uaXRvcnMucmVtb3ZlKGl0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCmluZGV4IDQ3ZjI1MWM4NDE0YTFlMmRiNTlm
MDA0YTkwNDRhYTBmOGMyZTlkNjUuLjdhNGU5YzdmZGIzNWZjYTc2OTQ1NjIxNzRiZDlhN2Y2YzBl
Nzk5ZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRD
YWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hl
LmNwcApAQCAtMTk5LDcgKzE5OSw3IEBAIEZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Z2V0
Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvCiAgICAgICAg
IGdGb250UGxhdGZvcm1EYXRhQ2FjaGUtPnNldChrZXksIHJlc3VsdCk7CiAgICAgICAgIGZvdW5k
UmVzdWx0ID0gcmVzdWx0OwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHJlc3VsdCA9IGl0LT5zZWNv
bmQ7CisgICAgICAgIHJlc3VsdCA9IGl0LT52YWx1ZTsKICAgICAgICAgZm91bmRSZXN1bHQgPSB0
cnVlOwogICAgIH0KIApAQCAtMjk0LDIwICsyOTQsMjAgQEAgU2ltcGxlRm9udERhdGEqIEZvbnRD
YWNoZTo6Z2V0Q2FjaGVkRm9udERhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSogcGxhdGZvcm1E
YXQKICAgICAgICAgcmV0dXJuIG5ld1ZhbHVlLmZpcnN0OwogICAgIH0KIAotICAgIGlmICghcmVz
dWx0LmdldCgpLT5zZWNvbmQuc2Vjb25kKSB7Ci0gICAgICAgIEFTU0VSVChnSW5hY3RpdmVGb250
RGF0YS0+Y29udGFpbnMocmVzdWx0LmdldCgpLT5zZWNvbmQuZmlyc3QpKTsKLSAgICAgICAgZ0lu
YWN0aXZlRm9udERhdGEtPnJlbW92ZShyZXN1bHQuZ2V0KCktPnNlY29uZC5maXJzdCk7CisgICAg
aWYgKCFyZXN1bHQuZ2V0KCktPnZhbHVlLnNlY29uZCkgeworICAgICAgICBBU1NFUlQoZ0luYWN0
aXZlRm9udERhdGEtPmNvbnRhaW5zKHJlc3VsdC5nZXQoKS0+dmFsdWUuZmlyc3QpKTsKKyAgICAg
ICAgZ0luYWN0aXZlRm9udERhdGEtPnJlbW92ZShyZXN1bHQuZ2V0KCktPnZhbHVlLmZpcnN0KTsK
ICAgICB9CiAKICAgICBpZiAoc2hvdWxkUmV0YWluID09IFJldGFpbikKLSAgICAgICAgcmVzdWx0
LmdldCgpLT5zZWNvbmQuc2Vjb25kKys7Ci0gICAgZWxzZSBpZiAoIXJlc3VsdC5nZXQoKS0+c2Vj
b25kLnNlY29uZCkgeworICAgICAgICByZXN1bHQuZ2V0KCktPnZhbHVlLnNlY29uZCsrOworICAg
IGVsc2UgaWYgKCFyZXN1bHQuZ2V0KCktPnZhbHVlLnNlY29uZCkgewogICAgICAgICAvLyBJZiBz
aG91bGRSZXRhaW4gaXMgRG9Ob3RSZXRhaW4gYW5kIGNvdW50IGlzIDAsIHdlIHdhbnQgdG8gcmVt
b3ZlIHRoZSBmb250RGF0YSBmcm9tIAogICAgICAgICAvLyBnSW5hY3RpdmVGb250RGF0YSAoYWJv
dmUpIGFuZCByZS1hZGQgaGVyZSB0byB1cGRhdGUgTFJVIHBvc2l0aW9uLgotICAgICAgICBnSW5h
Y3RpdmVGb250RGF0YS0+YWRkKHJlc3VsdC5nZXQoKS0+c2Vjb25kLmZpcnN0KTsKKyAgICAgICAg
Z0luYWN0aXZlRm9udERhdGEtPmFkZChyZXN1bHQuZ2V0KCktPnZhbHVlLmZpcnN0KTsKICAgICB9
CiAKLSAgICByZXR1cm4gcmVzdWx0LmdldCgpLT5zZWNvbmQuZmlyc3Q7CisgICAgcmV0dXJuIHJl
c3VsdC5nZXQoKS0+dmFsdWUuZmlyc3Q7CiB9CiAKIFNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6
OmdldE5vblJldGFpbmVkTGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRp
b24mIGZvbnREZXNjcmlwdGlvbikKQEAgLTMyMyw4ICszMjMsOCBAQCB2b2lkIEZvbnRDYWNoZTo6
cmVsZWFzZUZvbnREYXRhKGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSkKICAgICBGb250
RGF0YUNhY2hlOjppdGVyYXRvciBpdCA9IGdGb250RGF0YUNhY2hlLT5maW5kKGZvbnREYXRhLT5w
bGF0Zm9ybURhdGEoKSk7CiAgICAgQVNTRVJUKGl0ICE9IGdGb250RGF0YUNhY2hlLT5lbmQoKSk7
CiAKLSAgICBBU1NFUlQoaXQtPnNlY29uZC5zZWNvbmQpOwotICAgIGlmICghLS1pdC0+c2Vjb25k
LnNlY29uZCkKKyAgICBBU1NFUlQoaXQtPnZhbHVlLnNlY29uZCk7CisgICAgaWYgKCEtLWl0LT52
YWx1ZS5zZWNvbmQpCiAgICAgICAgIGdJbmFjdGl2ZUZvbnREYXRhLT5hZGQoZm9udERhdGEpOwog
fQogCkBAIC0zNzIsOCArMzcyLDggQEAgdm9pZCBGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250
RGF0YShpbnQgY291bnQpCiAgICAgICAgIGtleXNUb1JlbW92ZS5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KGdGb250UGxhdGZvcm1EYXRhQ2FjaGUtPnNpemUoKSk7CiAgICAgICAgIEZvbnRQbGF0Zm9y
bURhdGFDYWNoZTo6aXRlcmF0b3IgcGxhdGZvcm1EYXRhRW5kID0gZ0ZvbnRQbGF0Zm9ybURhdGFD
YWNoZS0+ZW5kKCk7CiAgICAgICAgIGZvciAoRm9udFBsYXRmb3JtRGF0YUNhY2hlOjppdGVyYXRv
ciBwbGF0Zm9ybURhdGEgPSBnRm9udFBsYXRmb3JtRGF0YUNhY2hlLT5iZWdpbigpOyBwbGF0Zm9y
bURhdGEgIT0gcGxhdGZvcm1EYXRhRW5kOyArK3BsYXRmb3JtRGF0YSkgewotICAgICAgICAgICAg
aWYgKHBsYXRmb3JtRGF0YS0+c2Vjb25kICYmICFnRm9udERhdGFDYWNoZS0+Y29udGFpbnMoKnBs
YXRmb3JtRGF0YS0+c2Vjb25kKSkKLSAgICAgICAgICAgICAgICBrZXlzVG9SZW1vdmUuYXBwZW5k
KHBsYXRmb3JtRGF0YS0+Zmlyc3QpOworICAgICAgICAgICAgaWYgKHBsYXRmb3JtRGF0YS0+dmFs
dWUgJiYgIWdGb250RGF0YUNhY2hlLT5jb250YWlucygqcGxhdGZvcm1EYXRhLT52YWx1ZSkpCisg
ICAgICAgICAgICAgICAga2V5c1RvUmVtb3ZlLmFwcGVuZChwbGF0Zm9ybURhdGEtPmtleSk7CiAg
ICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHNpemVfdCBrZXlzVG9SZW1vdmVDb3VudCA9IGtl
eXNUb1JlbW92ZS5zaXplKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HbHlwaFBhZ2VUcmVlTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HbHlwaFBhZ2VUcmVlTm9kZS5jcHAKaW5kZXggODdlOTNmZDk4ZmY4ZGVmMDk0ODE2
YTUyNDM0ZTkwMDVlODk5OTU5ZC4uNjM1ZWM3YjIyOWFiNGNhOTkxOGI1NWZlZGQ3ZmE5ODdiNDE5
MjY1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQ
YWdlVHJlZU5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ds
eXBoUGFnZVRyZWVOb2RlLmNwcApAQCAtNzQsNyArNzQsNyBAQCBzaXplX3QgR2x5cGhQYWdlVHJl
ZU5vZGU6OnRyZWVHbHlwaFBhZ2VDb3VudCgpCiAgICAgaWYgKHJvb3RzKSB7CiAgICAgICAgIEhh
c2hNYXA8aW50LCBHbHlwaFBhZ2VUcmVlTm9kZSo+OjppdGVyYXRvciBlbmQgPSByb290cy0+ZW5k
KCk7CiAgICAgICAgIGZvciAoSGFzaE1hcDxpbnQsIEdseXBoUGFnZVRyZWVOb2RlKj46Oml0ZXJh
dG9yIGl0ID0gcm9vdHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIGNv
dW50ICs9IGl0LT5zZWNvbmQtPnBhZ2VDb3VudCgpOworICAgICAgICAgICAgY291bnQgKz0gaXQt
PnZhbHVlLT5wYWdlQ291bnQoKTsKICAgICB9CiAgICAgCiAgICAgaWYgKHBhZ2VaZXJvUm9vdCkK
QEAgLTg4LDcgKzg4LDcgQEAgc2l6ZV90IEdseXBoUGFnZVRyZWVOb2RlOjpwYWdlQ291bnQoKSBj
b25zdAogICAgIHNpemVfdCBjb3VudCA9IG1fcGFnZSAmJiBtX3BhZ2UtPm93bmVyKCkgPT0gdGhp
cyA/IDEgOiAwOwogICAgIEhhc2hNYXA8Y29uc3QgRm9udERhdGEqLCBHbHlwaFBhZ2VUcmVlTm9k
ZSo+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2NoaWxkcmVuLmVuZCgpOwogICAgIGZvciAoSGFz
aE1hcDxjb25zdCBGb250RGF0YSosIEdseXBoUGFnZVRyZWVOb2RlKj46OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbV9jaGlsZHJlbi5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGNvdW50
ICs9IGl0LT5zZWNvbmQtPnBhZ2VDb3VudCgpOworICAgICAgICBjb3VudCArPSBpdC0+dmFsdWUt
PnBhZ2VDb3VudCgpOwogCiAgICAgcmV0dXJuIGNvdW50OwogfQpAQCAtOTksNyArOTksNyBAQCB2
b2lkIEdseXBoUGFnZVRyZWVOb2RlOjpwcnVuZVRyZWVDdXN0b21Gb250RGF0YShjb25zdCBGb250
RGF0YSogZm9udERhdGEpCiAgICAgaWYgKHJvb3RzKSB7CiAgICAgICAgIEhhc2hNYXA8aW50LCBH
bHlwaFBhZ2VUcmVlTm9kZSo+OjppdGVyYXRvciBlbmQgPSByb290cy0+ZW5kKCk7CiAgICAgICAg
IGZvciAoSGFzaE1hcDxpbnQsIEdseXBoUGFnZVRyZWVOb2RlKj46Oml0ZXJhdG9yIGl0ID0gcm9v
dHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPnBy
dW5lQ3VzdG9tRm9udERhdGEoZm9udERhdGEpOworICAgICAgICAgICAgaXQtPnZhbHVlLT5wcnVu
ZUN1c3RvbUZvbnREYXRhKGZvbnREYXRhKTsKICAgICB9CiAgICAgCiAgICAgaWYgKHBhZ2VaZXJv
Um9vdCkKQEAgLTExMSw3ICsxMTEsNyBAQCB2b2lkIEdseXBoUGFnZVRyZWVOb2RlOjpwcnVuZVRy
ZWVGb250RGF0YShjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEpCiAgICAgaWYgKHJvb3Rz
KSB7CiAgICAgICAgIEhhc2hNYXA8aW50LCBHbHlwaFBhZ2VUcmVlTm9kZSo+OjppdGVyYXRvciBl
bmQgPSByb290cy0+ZW5kKCk7CiAgICAgICAgIGZvciAoSGFzaE1hcDxpbnQsIEdseXBoUGFnZVRy
ZWVOb2RlKj46Oml0ZXJhdG9yIGl0ID0gcm9vdHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkK
LSAgICAgICAgICAgIGl0LT5zZWNvbmQtPnBydW5lRm9udERhdGEoZm9udERhdGEpOworICAgICAg
ICAgICAgaXQtPnZhbHVlLT5wcnVuZUZvbnREYXRhKGZvbnREYXRhKTsKICAgICB9CiAgICAgCiAg
ICAgaWYgKHBhZ2VaZXJvUm9vdCkKQEAgLTM2Miw3ICszNjIsNyBAQCB2b2lkIEdseXBoUGFnZVRy
ZWVOb2RlOjpwcnVuZUN1c3RvbUZvbnREYXRhKGNvbnN0IEZvbnREYXRhKiBmb250RGF0YSkKICAg
ICAgICAgcmV0dXJuOwogICAgIEhhc2hNYXA8Y29uc3QgRm9udERhdGEqLCBHbHlwaFBhZ2VUcmVl
Tm9kZSo+OjppdGVyYXRvciBlbmQgPSBtX2NoaWxkcmVuLmVuZCgpOwogICAgIGZvciAoSGFzaE1h
cDxjb25zdCBGb250RGF0YSosIEdseXBoUGFnZVRyZWVOb2RlKj46Oml0ZXJhdG9yIGl0ID0gbV9j
aGlsZHJlbi5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPnBy
dW5lQ3VzdG9tRm9udERhdGEoZm9udERhdGEpOworICAgICAgICBpdC0+dmFsdWUtPnBydW5lQ3Vz
dG9tRm9udERhdGEoZm9udERhdGEpOwogfQogCiB2b2lkIEdseXBoUGFnZVRyZWVOb2RlOjpwcnVu
ZUZvbnREYXRhKGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwgdW5zaWduZWQgbGV2ZWwp
CkBAIC0zNzgsNyArMzc4LDcgQEAgdm9pZCBHbHlwaFBhZ2VUcmVlTm9kZTo6cHJ1bmVGb250RGF0
YShjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEsIHVuc2lnbmVkIGwKICAgICAvLyBQcnVu
ZSBhbnkgYnJhbmNoIHRoYXQgY29udGFpbnMgdGhpcyBGb250RGF0YS4KICAgICBIYXNoTWFwPGNv
bnN0IEZvbnREYXRhKiwgR2x5cGhQYWdlVHJlZU5vZGUqPjo6aXRlcmF0b3IgY2hpbGQgPSBtX2No
aWxkcmVuLmZpbmQoZm9udERhdGEpOwogICAgIGlmIChjaGlsZCAhPSBtX2NoaWxkcmVuLmVuZCgp
KSB7Ci0gICAgICAgIEdseXBoUGFnZVRyZWVOb2RlKiBub2RlID0gY2hpbGQtPnNlY29uZDsKKyAg
ICAgICAgR2x5cGhQYWdlVHJlZU5vZGUqIG5vZGUgPSBjaGlsZC0+dmFsdWU7CiAgICAgICAgIG1f
Y2hpbGRyZW4ucmVtb3ZlKGZvbnREYXRhKTsKICAgICAgICAgdW5zaWduZWQgY3VzdG9tRm9udENv
dW50ID0gbm9kZS0+bV9jdXN0b21Gb250Q291bnQ7CiAgICAgICAgIGRlbGV0ZSBub2RlOwpAQCAt
Mzk0LDcgKzM5NCw3IEBAIHZvaWQgR2x5cGhQYWdlVHJlZU5vZGU6OnBydW5lRm9udERhdGEoY29u
c3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhLCB1bnNpZ25lZCBsCiAKICAgICBIYXNoTWFwPGNv
bnN0IEZvbnREYXRhKiwgR2x5cGhQYWdlVHJlZU5vZGUqPjo6aXRlcmF0b3IgZW5kID0gbV9jaGls
ZHJlbi5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8Y29uc3QgRm9udERhdGEqLCBHbHlwaFBhZ2VU
cmVlTm9kZSo+OjppdGVyYXRvciBpdCA9IG1fY2hpbGRyZW4uYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5wcnVuZUZvbnREYXRhKGZvbnREYXRhLCBsZXZlbCk7
CisgICAgICAgIGl0LT52YWx1ZS0+cHJ1bmVGb250RGF0YShmb250RGF0YSwgbGV2ZWwpOwogfQog
CiAjaWZuZGVmIE5ERUJVRwpAQCAtNDA2LDggKzQwNiw4IEBAIHZvaWQgR2x5cGhQYWdlVHJlZU5v
ZGU6OnBydW5lRm9udERhdGEoY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhLCB1bnNpZ25l
ZCBsCiAKICAgICAgICAgSGFzaE1hcDxjb25zdCBGb250RGF0YSosIEdseXBoUGFnZVRyZWVOb2Rl
Kj46Oml0ZXJhdG9yIGVuZCA9IG1fY2hpbGRyZW4uZW5kKCk7CiAgICAgICAgIGZvciAoSGFzaE1h
cDxjb25zdCBGb250RGF0YSosIEdseXBoUGFnZVRyZWVOb2RlKj46Oml0ZXJhdG9yIGl0ID0gbV9j
aGlsZHJlbi5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIHByaW50Zigi
JXNcdCVwICVzXG4iLCBpbmRlbnQuZGF0YSgpLCBpdC0+Zmlyc3QsIGl0LT5maXJzdC0+ZGVzY3Jp
cHRpb24oKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNob3dTdWJ0
cmVlKCk7CisgICAgICAgICAgICBwcmludGYoIiVzXHQlcCAlc1xuIiwgaW5kZW50LmRhdGEoKSwg
aXQtPmtleSwgaXQtPmtleS0+ZGVzY3JpcHRpb24oKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAg
ICAgIGl0LT52YWx1ZS0+c2hvd1N1YnRyZWUoKTsKICAgICAgICAgfQogICAgICAgICBpZiAobV9z
eXN0ZW1GYWxsYmFja0NoaWxkKSB7CiAgICAgICAgICAgICBwcmludGYoIiVzXHQqIGZhbGxiYWNr
XG4iLCBpbmRlbnQuZGF0YSgpKTsKQEAgLTQyNSw4ICs0MjUsOCBAQCB2b2lkIHNob3dHbHlwaFBh
Z2VUcmVlcygpCiAgICAgc2hvd0dseXBoUGFnZVRyZWUoMCk7CiAgICAgSGFzaE1hcDxpbnQsIFdl
YkNvcmU6OkdseXBoUGFnZVRyZWVOb2RlKj46Oml0ZXJhdG9yIGVuZCA9IFdlYkNvcmU6OkdseXBo
UGFnZVRyZWVOb2RlOjpyb290cy0+ZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPGludCwgV2ViQ29y
ZTo6R2x5cGhQYWdlVHJlZU5vZGUqPjo6aXRlcmF0b3IgaXQgPSBXZWJDb3JlOjpHbHlwaFBhZ2VU
cmVlTm9kZTo6cm9vdHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBwcmlu
dGYoIlxuUGFnZSAlZDpcbiIsIGl0LT5maXJzdCk7Ci0gICAgICAgIHNob3dHbHlwaFBhZ2VUcmVl
KGl0LT5maXJzdCk7CisgICAgICAgIHByaW50ZigiXG5QYWdlICVkOlxuIiwgaXQtPmtleSk7Cisg
ICAgICAgIHNob3dHbHlwaFBhZ2VUcmVlKGl0LT5rZXkpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckFuaW1hdGlv
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyQW5p
bWF0aW9uLmNwcAppbmRleCBmYzc0ZDQ1NTE4NjczNDE3MDdhYzI4ZjFhOGNjOTQ1YTAxZGQ5NzRj
Li43NzU1MjFlOTYxZjBhM2VmOTQ2YTBkOGM3MzMzODc4YmU3MTE4MDQzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyQW5pbWF0aW9uLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyQW5p
bWF0aW9uLmNwcApAQCAtMTkyLDcgKzE5Miw3IEBAIGJvb2wgR3JhcGhpY3NMYXllckFuaW1hdGlv
bnM6Omhhc0FjdGl2ZUFuaW1hdGlvbnNPZlR5cGUoQW5pbWF0ZWRQcm9wZXJ0eUlEIHR5cGUpCiB7
CiAgICAgSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxHcmFwaGljc0xheWVyQW5pbWF0aW9uPiA+Ojpj
b25zdF9pdGVyYXRvciBlbmQgPSBtX2FuaW1hdGlvbnMuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFw
PFN0cmluZywgVmVjdG9yPEdyYXBoaWNzTGF5ZXJBbmltYXRpb24+ID46OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbV9hbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBj
b25zdCBWZWN0b3I8R3JhcGhpY3NMYXllckFuaW1hdGlvbj4mIGFuaW1hdGlvbnMgPSBpdC0+c2Vj
b25kOworICAgICAgICBjb25zdCBWZWN0b3I8R3JhcGhpY3NMYXllckFuaW1hdGlvbj4mIGFuaW1h
dGlvbnMgPSBpdC0+dmFsdWU7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYW5pbWF0
aW9ucy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgaWYgKGFuaW1hdGlvbnNbaV0uaXNBY3Rp
dmUoKSAmJiBhbmltYXRpb25zW2ldLnByb3BlcnR5KCkgPT0gdHlwZSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKQEAgLTIwNSw3ICsyMDUsNyBAQCBib29sIEdyYXBoaWNzTGF5ZXJBbmlt
YXRpb25zOjpoYXNSdW5uaW5nQW5pbWF0aW9ucygpIGNvbnN0CiB7CiAgICAgSGFzaE1hcDxTdHJp
bmcsIFZlY3RvcjxHcmFwaGljc0xheWVyQW5pbWF0aW9uPiA+Ojpjb25zdF9pdGVyYXRvciBlbmQg
PSBtX2FuaW1hdGlvbnMuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPFN0cmluZywgVmVjdG9yPEdy
YXBoaWNzTGF5ZXJBbmltYXRpb24+ID46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9hbmltYXRpb25z
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBjb25zdCBWZWN0b3I8R3JhcGhp
Y3NMYXllckFuaW1hdGlvbj4mIGFuaW1hdGlvbnMgPSBpdC0+c2Vjb25kOworICAgICAgICBjb25z
dCBWZWN0b3I8R3JhcGhpY3NMYXllckFuaW1hdGlvbj4mIGFuaW1hdGlvbnMgPSBpdC0+dmFsdWU7
CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYW5pbWF0aW9ucy5zaXplKCk7ICsraSkg
ewogICAgICAgICAgICAgaWYgKGFuaW1hdGlvbnNbaV0uc3RhdGUoKSA9PSBHcmFwaGljc0xheWVy
QW5pbWF0aW9uOjpQbGF5aW5nU3RhdGUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBA
IC0yNjgsNyArMjY4LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQW5pbWF0aW9uczo6YWRkKGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgR3JhcGhpY3NMYXllckFuaW1hdGkKIHsKICAgICBIYXNoTWFw
PFN0cmluZywgVmVjdG9yPEdyYXBoaWNzTGF5ZXJBbmltYXRpb24+ID46Oml0ZXJhdG9yIGl0ID0g
bV9hbmltYXRpb25zLmZpbmQobmFtZSk7CiAgICAgaWYgKGl0ICE9IG1fYW5pbWF0aW9ucy5lbmQo
KSkgewotICAgICAgICBpdC0+c2Vjb25kLmFwcGVuZChhbmltYXRpb24pOworICAgICAgICBpdC0+
dmFsdWUuYXBwZW5kKGFuaW1hdGlvbik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTI4
MywxNiArMjgzLDE2IEBAIHZvaWQgR3JhcGhpY3NMYXllckFuaW1hdGlvbnM6OnBhdXNlKGNvbnN0
IFN0cmluZyYgbmFtZSwgZG91YmxlIG9mZnNldCkKICAgICBpZiAoaXQgPT0gbV9hbmltYXRpb25z
LmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGl0
LT5zZWNvbmQuc2l6ZSgpOyBpKyspIAotICAgICAgICBpdC0+c2Vjb25kW2ldLnBhdXNlKG9mZnNl
dCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpdC0+dmFsdWUuc2l6ZSgpOyBpKyspIAor
ICAgICAgICBpdC0+dmFsdWVbaV0ucGF1c2Uob2Zmc2V0KTsKIH0KIAogdm9pZCBHcmFwaGljc0xh
eWVyQW5pbWF0aW9uczo6YXBwbHkoR3JhcGhpY3NMYXllckFuaW1hdGlvbjo6Q2xpZW50KiBjbGll
bnQpCiB7CiAgICAgSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxHcmFwaGljc0xheWVyQW5pbWF0aW9u
PiA+OjppdGVyYXRvciBlbmQgPSBtX2FuaW1hdGlvbnMuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFw
PFN0cmluZywgVmVjdG9yPEdyYXBoaWNzTGF5ZXJBbmltYXRpb24+ID46Oml0ZXJhdG9yIGl0ID0g
bV9hbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGl0LT5zZWNvbmQuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBpdC0+
c2Vjb25kW2ldLmFwcGx5KGNsaWVudCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
aXQtPnZhbHVlLnNpemUoKTsgKytpKQorICAgICAgICAgICAgaXQtPnZhbHVlW2ldLmFwcGx5KGNs
aWVudCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZS5jcHAKaW5kZXggYjQ4NWRjZjE3ZjVlYmVmMjlhOTY2
ZWNjNjNkNmExOTA4MzJkNzMwNC4uZGY3ZmE3ZGNiM2I5OWFmYWYyYWJlNmRjZTFlMmZkMWE3ZTU3
OWRjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRC
YWNraW5nU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Rp
bGVkQmFja2luZ1N0b3JlLmNwcApAQCAtMTE2LDkgKzExNiw5IEBAIHZvaWQgVGlsZWRCYWNraW5n
U3RvcmU6OnVwZGF0ZVRpbGVCdWZmZXJzKCkKICAgICBWZWN0b3I8UmVmUHRyPFRpbGU+ID4gZGly
dHlUaWxlczsKICAgICBUaWxlTWFwOjppdGVyYXRvciBlbmQgPSBtX3RpbGVzLmVuZCgpOwogICAg
IGZvciAoVGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgewotICAgICAgICBpZiAoIWl0LT5zZWNvbmQtPmlzRGlydHkoKSkKKyAgICAgICAgaWYg
KCFpdC0+dmFsdWUtPmlzRGlydHkoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBk
aXJ0eVRpbGVzLmFwcGVuZChpdC0+c2Vjb25kKTsKKyAgICAgICAgZGlydHlUaWxlcy5hcHBlbmQo
aXQtPnZhbHVlKTsKICAgICB9CiAKICAgICBpZiAoZGlydHlUaWxlcy5pc0VtcHR5KCkpIHsKQEAg
LTQwMSwxMyArNDAxLDEzIEBAIGJvb2wgVGlsZWRCYWNraW5nU3RvcmU6OnJlc2l6ZUVkZ2VUaWxl
cygpCiAgICAgVmVjdG9yPFRpbGU6OkNvb3JkaW5hdGU+IHRpbGVzVG9SZW1vdmU7CiAgICAgVGls
ZU1hcDo6aXRlcmF0b3IgZW5kID0gbV90aWxlcy5lbmQoKTsKICAgICBmb3IgKFRpbGVNYXA6Oml0
ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAg
VGlsZTo6Q29vcmRpbmF0ZSB0aWxlQ29vcmRpbmF0ZSA9IGl0LT5zZWNvbmQtPmNvb3JkaW5hdGUo
KTsKLSAgICAgICAgSW50UmVjdCB0aWxlUmVjdCA9IGl0LT5zZWNvbmQtPnJlY3QoKTsKKyAgICAg
ICAgVGlsZTo6Q29vcmRpbmF0ZSB0aWxlQ29vcmRpbmF0ZSA9IGl0LT52YWx1ZS0+Y29vcmRpbmF0
ZSgpOworICAgICAgICBJbnRSZWN0IHRpbGVSZWN0ID0gaXQtPnZhbHVlLT5yZWN0KCk7CiAgICAg
ICAgIEludFJlY3QgZXhwZWN0ZWRUaWxlUmVjdCA9IHRpbGVSZWN0Rm9yQ29vcmRpbmF0ZSh0aWxl
Q29vcmRpbmF0ZSk7CiAgICAgICAgIGlmIChleHBlY3RlZFRpbGVSZWN0LmlzRW1wdHkoKSkKICAg
ICAgICAgICAgIHRpbGVzVG9SZW1vdmUuYXBwZW5kKHRpbGVDb29yZGluYXRlKTsKICAgICAgICAg
ZWxzZSBpZiAoZXhwZWN0ZWRUaWxlUmVjdCAhPSB0aWxlUmVjdCkgewotICAgICAgICAgICAgaXQt
PnNlY29uZC0+cmVzaXplKGV4cGVjdGVkVGlsZVJlY3Quc2l6ZSgpKTsKKyAgICAgICAgICAgIGl0
LT52YWx1ZS0+cmVzaXplKGV4cGVjdGVkVGlsZVJlY3Quc2l6ZSgpKTsKICAgICAgICAgICAgIHdh
c1Jlc2l6ZWQgPSB0cnVlOwogICAgICAgICB9CiAgICAgfQpAQCAtNDI2LDggKzQyNiw4IEBAIHZv
aWQgVGlsZWRCYWNraW5nU3RvcmU6OnNldEtlZXBSZWN0KGNvbnN0IEludFJlY3QmIGtlZXBSZWN0
KQogICAgIFZlY3RvcjxUaWxlOjpDb29yZGluYXRlPiB0b1JlbW92ZTsKICAgICBUaWxlTWFwOjpp
dGVyYXRvciBlbmQgPSBtX3RpbGVzLmVuZCgpOwogICAgIGZvciAoVGlsZU1hcDo6aXRlcmF0b3Ig
aXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBUaWxlOjpD
b29yZGluYXRlIGNvb3JkaW5hdGUgPSBpdC0+c2Vjb25kLT5jb29yZGluYXRlKCk7Ci0gICAgICAg
IEZsb2F0UmVjdCB0aWxlUmVjdCA9IGl0LT5zZWNvbmQtPnJlY3QoKTsKKyAgICAgICAgVGlsZTo6
Q29vcmRpbmF0ZSBjb29yZGluYXRlID0gaXQtPnZhbHVlLT5jb29yZGluYXRlKCk7CisgICAgICAg
IEZsb2F0UmVjdCB0aWxlUmVjdCA9IGl0LT52YWx1ZS0+cmVjdCgpOwogICAgICAgICBpZiAoIXRp
bGVSZWN0LmludGVyc2VjdHMoa2VlcFJlY3RGKSkKICAgICAgICAgICAgIHRvUmVtb3ZlLmFwcGVu
ZChjb29yZGluYXRlKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vY2YvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9u
Q0YuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL2Nm
L01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGLmNwcAppbmRleCA4MWQ4NjI5ODE1Mjlk
Y2I1ZTRhYjJkMGMwMDY2NzJkZTc2YTg4MmYxLi43OGNhYzY3MmU0MThjMTU5MDMzYzBhMWZmODhk
ZmYyZDZhMTE5NTc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vY2YvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0YuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9jZi9NZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25DRi5jcHAKQEAgLTkxNSw3ICs5MTUsNyBAQCBBVkZX
cmFwcGVyKiBBVkZXcmFwcGVyOjphdmZXcmFwcGVyRm9yQ2FsbGJhY2tDb250ZXh0KHZvaWQqIGNv
bnRleHQpCiAgICAgaWYgKGl0ID09IG1hcCgpLmVuZCgpKQogICAgICAgICByZXR1cm4gMDsKIAot
ICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgIHJldHVybiBpdC0+dmFsdWU7CiB9CiAKIHZvaWQg
QVZGV3JhcHBlcjo6c2NoZWR1bGVEaXNjb25uZWN0QW5kRGVsZXRlKCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJUaWxlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyVGlsZXIu
Y3BwCmluZGV4IGRiNmU3NWMyZmZhMzIzNDU5NWQxYjRmMzVkN2VlMzkyMGM5MjM0YzIuLjk2NzU5
OWEwOGMwNDgyMzRiZGFjMjYxMzJkZTM1ZTgyOTIxMGM3YTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJUaWxlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclRpbGVyLmNw
cApAQCAtMzcwLDggKzM3MCw4IEBAIHZvaWQgTGF5ZXJUaWxlcjo6bGF5ZXJWaXNpYmlsaXR5Q2hh
bmdlZChMYXllckNvbXBvc2l0aW5nVGhyZWFkKiwgYm9vbCB2aXNpYmxlKQogICAgIH0KIAogICAg
IGZvciAoVGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzQ29tcG9zaXRpbmdUaHJlYWQuYmVn
aW4oKTsgaXQgIT0gbV90aWxlc0NvbXBvc2l0aW5nVGhyZWFkLmVuZCgpOyArK2l0KSB7Ci0gICAg
ICAgIFRpbGVJbmRleCBpbmRleCA9ICgqaXQpLmZpcnN0OwotICAgICAgICBMYXllclRpbGUqIHRp
bGUgPSAoKml0KS5zZWNvbmQ7CisgICAgICAgIFRpbGVJbmRleCBpbmRleCA9ICgqaXQpLmtleTsK
KyAgICAgICAgTGF5ZXJUaWxlKiB0aWxlID0gKCppdCkudmFsdWU7CiAgICAgICAgIHRpbGUtPnNl
dFZpc2libGUoZmFsc2UpOwogICAgIH0KIH0KQEAgLTM4NSwyMSArMzg1LDIxIEBAIHZvaWQgTGF5
ZXJUaWxlcjo6dXBsb2FkVGV4dHVyZXNJZk5lZWRlZChMYXllckNvbXBvc2l0aW5nVGhyZWFkKikK
IAogICAgIFRpbGVKb2JzTWFwOjpjb25zdF9pdGVyYXRvciB0aWxlSm9ic0l0ZXJFbmQgPSB0aWxl
Sm9ic01hcC5lbmQoKTsKICAgICBmb3IgKFRpbGVKb2JzTWFwOjpjb25zdF9pdGVyYXRvciB0aWxl
Sm9ic0l0ZXIgPSB0aWxlSm9ic01hcC5iZWdpbigpOyB0aWxlSm9ic0l0ZXIgIT0gdGlsZUpvYnNJ
dGVyRW5kOyArK3RpbGVKb2JzSXRlcikgewotICAgICAgICBJbnRQb2ludCBvcmlnaW4gPSBvcmln
aW5PZlRpbGUodGlsZUpvYnNJdGVyLT5maXJzdCk7CisgICAgICAgIEludFBvaW50IG9yaWdpbiA9
IG9yaWdpbk9mVGlsZSh0aWxlSm9ic0l0ZXItPmtleSk7CiAKLSAgICAgICAgTGF5ZXJUaWxlKiB0
aWxlID0gbV90aWxlc0NvbXBvc2l0aW5nVGhyZWFkLmdldCh0aWxlSm9ic0l0ZXItPmZpcnN0KTsK
KyAgICAgICAgTGF5ZXJUaWxlKiB0aWxlID0gbV90aWxlc0NvbXBvc2l0aW5nVGhyZWFkLmdldCh0
aWxlSm9ic0l0ZXItPmtleSk7CiAgICAgICAgIGlmICghdGlsZSkgewogICAgICAgICAgICAgaWYg
KG9yaWdpbi54KCkgPj0gbV9yZXF1aXJlZFRleHR1cmVTaXplLndpZHRoKCkgfHwgb3JpZ2luLnko
KSA+PSBtX3JlcXVpcmVkVGV4dHVyZVNpemUuaGVpZ2h0KCkpCiAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICB0aWxlID0gbmV3IExheWVyVGlsZSgpOwotICAgICAgICAgICAg
bV90aWxlc0NvbXBvc2l0aW5nVGhyZWFkLmFkZCh0aWxlSm9ic0l0ZXItPmZpcnN0LCB0aWxlKTsK
KyAgICAgICAgICAgIG1fdGlsZXNDb21wb3NpdGluZ1RocmVhZC5hZGQodGlsZUpvYnNJdGVyLT5r
ZXksIHRpbGUpOwogICAgICAgICB9CiAKICAgICAgICAgSW50UmVjdCB0aWxlUmVjdChvcmlnaW4s
IHRpbGVTaXplKCkpOwogICAgICAgICB0aWxlUmVjdC5zZXRXaWR0aChtaW4obV9yZXF1aXJlZFRl
eHR1cmVTaXplLndpZHRoKCkgLSB0aWxlUmVjdC54KCksIHRpbGVSZWN0LndpZHRoKCkpKTsKICAg
ICAgICAgdGlsZVJlY3Quc2V0SGVpZ2h0KG1pbihtX3JlcXVpcmVkVGV4dHVyZVNpemUuaGVpZ2h0
KCkgLSB0aWxlUmVjdC55KCksIHRpbGVSZWN0LmhlaWdodCgpKSk7CiAKLSAgICAgICAgcGVyZm9y
bVRpbGVKb2IodGlsZSwgKnRpbGVKb2JzSXRlci0+c2Vjb25kLCB0aWxlUmVjdCk7CisgICAgICAg
IHBlcmZvcm1UaWxlSm9iKHRpbGUsICp0aWxlSm9ic0l0ZXItPnZhbHVlLCB0aWxlUmVjdCk7CiAg
ICAgfQogCiAgICAgbV90ZXh0dXJlSm9icy5jbGVhcigpOwpAQCAtNDQyLDExICs0NDIsMTEgQEAg
dm9pZCBMYXllclRpbGVyOjphZGRUaWxlSm9iKGNvbnN0IFRpbGVJbmRleCYgaW5kZXgsIGNvbnN0
IFRleHR1cmVKb2ImIGpvYiwgVGlsZUoKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gSW4gdGhp
cyBjYXNlIHdlIGxlYXZlIHRoZSBwcmV2aW91cyBqb2IuCi0gICAgaWYgKGpvYi5tX3R5cGUgPT0g
VGV4dHVyZUpvYjo6RGlydHlDb250ZW50cyAmJiByZXN1bHQuaXRlcmF0b3ItPnNlY29uZC0+bV90
eXBlID09IFRleHR1cmVKb2I6OkRpc2NhcmRDb250ZW50cykKKyAgICBpZiAoam9iLm1fdHlwZSA9
PSBUZXh0dXJlSm9iOjpEaXJ0eUNvbnRlbnRzICYmIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPm1f
dHlwZSA9PSBUZXh0dXJlSm9iOjpEaXNjYXJkQ29udGVudHMpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIC8vIE92ZXJyaWRlIHRoZSBwcmV2aW91cyBqb2IuCi0gICAgcmVzdWx0Lml0ZXJhdG9yLT5z
ZWNvbmQgPSAmam9iOworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSAmam9iOwogfQogCiB2
b2lkIExheWVyVGlsZXI6OnBlcmZvcm1UaWxlSm9iKExheWVyVGlsZSogdGlsZSwgY29uc3QgVGV4
dHVyZUpvYiYgam9iLCBjb25zdCBJbnRSZWN0JiB0aWxlUmVjdCkKQEAgLTYzMyw3ICs2MzMsNyBA
QCB2b2lkIExheWVyVGlsZXI6OmRlbGV0ZVRleHR1cmVzKExheWVyQ29tcG9zaXRpbmdUaHJlYWQq
KQogCiAgICAgaWYgKG1fdGlsZXNDb21wb3NpdGluZ1RocmVhZC5zaXplKCkpIHsKICAgICAgICAg
Zm9yIChUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZXNDb21wb3NpdGluZ1RocmVhZC5iZWdp
bigpOyBpdCAhPSBtX3RpbGVzQ29tcG9zaXRpbmdUaHJlYWQuZW5kKCk7ICsraXQpCi0gICAgICAg
ICAgICAoKml0KS5zZWNvbmQtPmRpc2NhcmRDb250ZW50cygpOworICAgICAgICAgICAgKCppdCku
dmFsdWUtPmRpc2NhcmRDb250ZW50cygpOwogICAgICAgICBtX3RpbGVzQ29tcG9zaXRpbmdUaHJl
YWQuY2xlYXIoKTsKIAogICAgICAgICBtX2NvbnRlbnRzRGlydHkgPSB0cnVlOwpAQCAtNjUwLDcg
KzY1MCw3IEBAIHZvaWQgTGF5ZXJUaWxlcjo6cHJ1bmVUZXh0dXJlcygpCiAgICAgLy8gUHJ1bmUg
dGlsZXMgdGhhdCBhcmUgbm8gbG9uZ2VyIG5lZWRlZC4KICAgICBWZWN0b3I8VGlsZUluZGV4PiB0
aWxlc1RvRGVsZXRlOwogICAgIGZvciAoVGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzQ29t
cG9zaXRpbmdUaHJlYWQuYmVnaW4oKTsgaXQgIT0gbV90aWxlc0NvbXBvc2l0aW5nVGhyZWFkLmVu
ZCgpOyArK2l0KSB7Ci0gICAgICAgIFRpbGVJbmRleCBpbmRleCA9ICgqaXQpLmZpcnN0OworICAg
ICAgICBUaWxlSW5kZXggaW5kZXggPSAoKml0KS5rZXk7CiAKICAgICAgICAgSW50UG9pbnQgb3Jp
Z2luID0gb3JpZ2luT2ZUaWxlKGluZGV4KTsKICAgICAgICAgaWYgKG9yaWdpbi54KCkgPj0gbV9y
ZXF1aXJlZFRleHR1cmVTaXplLndpZHRoKCkgfHwgb3JpZ2luLnkoKSA+PSBtX3JlcXVpcmVkVGV4
dHVyZVNpemUuaGVpZ2h0KCkpCkBAIC03NDIsNyArNzQyLDcgQEAgdm9pZCBMYXllclRpbGVyOjpi
aW5kQ29udGVudHNUZXh0dXJlKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqKQogICAgIGlmIChtX3Rp
bGVzQ29tcG9zaXRpbmdUaHJlYWQuc2l6ZSgpICE9IDEpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGNvbnN0IExheWVyVGlsZSogdGlsZSA9IG1fdGlsZXNDb21wb3NpdGluZ1RocmVhZC5iZWdpbigp
LT5zZWNvbmQ7CisgICAgY29uc3QgTGF5ZXJUaWxlKiB0aWxlID0gbV90aWxlc0NvbXBvc2l0aW5n
VGhyZWFkLmJlZ2luKCktPnZhbHVlOwogCiAgICAgQVNTRVJUKHRpbGUtPmhhc1RleHR1cmUoKSk7
CiAgICAgaWYgKCF0aWxlLT5oYXNUZXh0dXJlKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L1RleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhy
ZWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvVGV4
dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQuY3BwCmluZGV4IGY5ZjY1NDA4YTJjYmQ0MDQzYWJl
NzI3MTU5Mjc1ODMxMWE4ZmUwMjUuLmQ2NWM0ZGFkZGJiYjI1OThlYjBmYTI0MTcxYzRlNmFmMTRk
ZDc0YzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNr
YmVycnkvVGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvVGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdU
aHJlYWQuY3BwCkBAIC0yMDEsMTEgKzIwMSwxMSBAQCB2b2lkIFRleHR1cmVDYWNoZUNvbXBvc2l0
aW5nVGhyZWFkOjpzZXRNZW1vcnlVc2FnZShzaXplX3QgbWVtb3J5VXNhZ2UpCiAKIFBhc3NSZWZQ
dHI8VGV4dHVyZT4gVGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQ6OnRleHR1cmVGb3JUaWxl
ZENvbnRlbnRzKGNvbnN0IFNrQml0bWFwJiBjb250ZW50cywgY29uc3QgSW50UmVjdCYgdGlsZVJl
Y3QsIGNvbnN0IFRpbGVJbmRleCYgaW5kZXgsIGJvb2wgaXNPcGFxdWUpCiB7Ci0gICAgSGFzaE1h
cDxDb250ZW50c0tleSwgVGV4dHVyZU1hcD46Oml0ZXJhdG9yIGl0ID0gbV9jYWNoZS5hZGQoa2V5
KGNvbnRlbnRzKSwgVGV4dHVyZU1hcCgpKS5maXJzdDsKLSAgICBUZXh0dXJlTWFwJiBtYXAgPSAo
Kml0KS5zZWNvbmQ7CisgICAgSGFzaE1hcDxDb250ZW50c0tleSwgVGV4dHVyZU1hcD46Oml0ZXJh
dG9yIGl0ID0gbV9jYWNoZS5hZGQoa2V5KGNvbnRlbnRzKSwgVGV4dHVyZU1hcCgpKS5pdGVyYXRv
cjsKKyAgICBUZXh0dXJlTWFwJiBtYXAgPSAoKml0KS52YWx1ZTsKIAotICAgIFRleHR1cmVNYXA6
Oml0ZXJhdG9yIGp0ID0gbWFwLmFkZChpbmRleCwgUmVmUHRyPFRleHR1cmU+KCkpLmZpcnN0Owot
ICAgIFJlZlB0cjxUZXh0dXJlPiB0ZXh0dXJlID0gKCpqdCkuc2Vjb25kOworICAgIFRleHR1cmVN
YXA6Oml0ZXJhdG9yIGp0ID0gbWFwLmFkZChpbmRleCwgUmVmUHRyPFRleHR1cmU+KCkpLml0ZXJh
dG9yOworICAgIFJlZlB0cjxUZXh0dXJlPiB0ZXh0dXJlID0gKCpqdCkudmFsdWU7CiAgICAgaWYg
KCF0ZXh0dXJlKSB7CiAgICAgICAgIHRleHR1cmUgPSBjcmVhdGVUZXh0dXJlKCk7CiAjaWYgREVC
VUdfVEVYVFVSRV9NRU1PUllfVVNBR0UKQEAgLTI0NCw3ICsyNDQsNyBAQCBQYXNzUmVmUHRyPFRl
eHR1cmU+IFRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkOjp0ZXh0dXJlRm9yQ29sb3IoY29u
c3QgQ29sb3ImCiAjZW5kaWYKICAgICAgICAgbV9jb2xvcnMuc2V0KGNvbG9yLCB0ZXh0dXJlKTsK
ICAgICB9IGVsc2UKLSAgICAgICAgdGV4dHVyZSA9ICgqaXQpLnNlY29uZDsKKyAgICAgICAgdGV4
dHVyZSA9ICgqaXQpLnZhbHVlOwogCiAgICAgLy8gQ29sb3IgdGV4dHVyZXMgY2FuJ3QgYmUgZXZp
Y3RlZCwgc28gbm8gbmVlZCBmb3IgVGV4dHVyZVByb3RlY3Rvci4KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAKaW5k
ZXggZTNhNTY1ZDE4NjU0MjE3MWY0MGEyNjM1MmFhZTgwNjk4YjgwOTRhMC4uYzQ1YTJkZTNmYjEw
M2Y4NDZmNmUxMjUwMmI1MDkzZjhiZjJkMDkyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCkBAIC00NzcsNyAr
NDc3LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6Om1vdmVPckNvcHlBbmltYXRpb25zKE1vdmVP
ckNvcHkgb3BlcmF0aW9uLCBQbGF0Zm9ybUNBTGF5ZXIKICAgICAvLyBMb29rIGZvciBydW5uaW5n
IGFuaW1hdGlvbnMgYWZmZWN0aW5nIHRoaXMgcHJvcGVydHkuCiAgICAgQW5pbWF0aW9uc01hcDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9ydW5uaW5nQW5pbWF0aW9ucy5lbmQoKTsKICAgICBmb3Ig
KEFuaW1hdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9ydW5uaW5nQW5pbWF0aW9ucy5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgY29uc3QgVmVjdG9yPExheWVyUHJv
cGVydHlBbmltYXRpb24+JiBwcm9wZXJ0eUFuaW1hdGlvbnMgPSBpdC0+c2Vjb25kOworICAgICAg
ICBjb25zdCBWZWN0b3I8TGF5ZXJQcm9wZXJ0eUFuaW1hdGlvbj4mIHByb3BlcnR5QW5pbWF0aW9u
cyA9IGl0LT52YWx1ZTsKICAgICAgICAgc2l6ZV90IG51bUFuaW1hdGlvbnMgPSBwcm9wZXJ0eUFu
aW1hdGlvbnMuc2l6ZSgpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUFuaW1h
dGlvbnM7ICsraSkgewogICAgICAgICAgICAgY29uc3QgTGF5ZXJQcm9wZXJ0eUFuaW1hdGlvbiYg
Y3VyckFuaW1hdGlvbiA9IHByb3BlcnR5QW5pbWF0aW9uc1tpXTsKQEAgLTcxOSw3ICs3MTksNyBA
QCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6cGF1c2VBbmltYXRpb24oY29uc3QgU3RyaW5nJiBhbmlt
YXRpb25OYW1lLCBkb3VibGUgdGltZU9mZgogCiAgICAgQW5pbWF0aW9uc1RvUHJvY2Vzc01hcDo6
aXRlcmF0b3IgaXQgPSBtX2FuaW1hdGlvbnNUb1Byb2Nlc3MuZmluZChhbmltYXRpb25OYW1lKTsK
ICAgICBpZiAoaXQgIT0gbV9hbmltYXRpb25zVG9Qcm9jZXNzLmVuZCgpKSB7Ci0gICAgICAgIEFu
aW1hdGlvblByb2Nlc3NpbmdBY3Rpb24mIHByb2Nlc3NpbmdJbmZvID0gaXQtPnNlY29uZDsKKyAg
ICAgICAgQW5pbWF0aW9uUHJvY2Vzc2luZ0FjdGlvbiYgcHJvY2Vzc2luZ0luZm8gPSBpdC0+dmFs
dWU7CiAgICAgICAgIC8vIElmIGFuIGFuaW1hdGlvbiBpcyBzY2hlZHVsZWQgdG8gYmUgcmVtb3Zl
ZCwgZG9uJ3QgY2hhbmdlIHRoZSByZW1vdmUgdG8gYSBwYXVzZS4KICAgICAgICAgaWYgKHByb2Nl
c3NpbmdJbmZvLmFjdGlvbiAhPSBSZW1vdmUpCiAgICAgICAgICAgICBwcm9jZXNzaW5nSW5mby5h
Y3Rpb24gPSBQYXVzZTsKQEAgLTg1NCw3ICs4NTQsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6
bGF5ZXJEaWREaXNwbGF5KFBsYXRmb3JtTGF5ZXIqIGxheWVyKQogICAgIGlmIChsYXllckNsb25l
TWFwKSB7CiAgICAgICAgIExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBsYXllckNsb25l
TWFwLT5lbmQoKTsKICAgICAgICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBs
YXllckNsb25lTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIFBs
YXRmb3JtQ0FMYXllciogY3VyckNsb25lID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAg
IFBsYXRmb3JtQ0FMYXllciogY3VyckNsb25lID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAg
ICAgaWYgKCFjdXJyQ2xvbmUpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKQEAgLTExOTYs
MTAgKzExOTYsMTAgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUdlb21ldHJ5KGZsb2F0
IHBhZ2VTY2FsZUZhY3RvciwgY29uc3QgRmxvYXRQb2ludCYgcG8KICAgICAgICAgaWYgKExheWVy
TWFwKiBsYXllckNsb25lTWFwID0gbV9zdHJ1Y3R1cmFsTGF5ZXJDbG9uZXMuZ2V0KCkpIHsKICAg
ICAgICAgICAgIExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBsYXllckNsb25lTWFwLT5l
bmQoKTsKICAgICAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5
ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAg
UGxhdGZvcm1DQUxheWVyKiBjbG9uZSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICAg
ICAgUGxhdGZvcm1DQUxheWVyKiBjbG9uZSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAg
ICAgICBGbG9hdFBvaW50IGNsb25lUG9zaXRpb24gPSBsYXllclBvc2l0aW9uOwogCi0gICAgICAg
ICAgICAgICAgaWYgKG1fcmVwbGljYUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9uZShpdC0+
Zmlyc3QpKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fcmVwbGljYUxheWVyICYmIGlzUmVwbGlj
YXRlZFJvb3RDbG9uZShpdC0+a2V5KSkgewogICAgICAgICAgICAgICAgICAgICAvLyBNYWludGFp
biB0aGUgc3BlY2lhbC1jYXNlIHBvc2l0aW9uIGZvciB0aGUgcm9vdCBvZiBhIGNsb25lIHN1YnRy
ZWUsCiAgICAgICAgICAgICAgICAgICAgIC8vIHdoaWNoIHdlIHNldCB1cCBpbiByZXBsaWNhdGVk
TGF5ZXJSb290KCkuCiAgICAgICAgICAgICAgICAgICAgIGNsb25lUG9zaXRpb24gPSBwb3NpdGlv
bkZvckNsb25lUm9vdExheWVyKCk7CkBAIC0xMjIzLDEwICsxMjIzLDEwIEBAIHZvaWQgR3JhcGhp
Y3NMYXllckNBOjp1cGRhdGVHZW9tZXRyeShmbG9hdCBwYWdlU2NhbGVGYWN0b3IsIGNvbnN0IEZs
b2F0UG9pbnQmIHBvCiAgICAgaWYgKExheWVyTWFwKiBsYXllckNsb25lTWFwID0gbV9sYXllckNs
b25lcy5nZXQoKSkgewogICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5
ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAg
ICAgICBQbGF0Zm9ybUNBTGF5ZXIqIGNsb25lID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAg
ICAgIFBsYXRmb3JtQ0FMYXllciogY2xvbmUgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAg
ICBGbG9hdFBvaW50IGNsb25lUG9zaXRpb24gPSBhZGp1c3RlZFBvc2l0aW9uOwogCi0gICAgICAg
ICAgICBpZiAoIW1fc3RydWN0dXJhbExheWVyICYmIG1fcmVwbGljYUxheWVyICYmIGlzUmVwbGlj
YXRlZFJvb3RDbG9uZShpdC0+Zmlyc3QpKSB7CisgICAgICAgICAgICBpZiAoIW1fc3RydWN0dXJh
bExheWVyICYmIG1fcmVwbGljYUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9uZShpdC0+a2V5
KSkgewogICAgICAgICAgICAgICAgIC8vIE1haW50YWluIHRoZSBzcGVjaWFsLWNhc2UgcG9zaXRp
b24gZm9yIHRoZSByb290IG9mIGEgY2xvbmUgc3VidHJlZSwKICAgICAgICAgICAgICAgICAvLyB3
aGljaCB3ZSBzZXQgdXAgaW4gcmVwbGljYXRlZExheWVyUm9vdCgpLgogICAgICAgICAgICAgICAg
IGNsb25lUG9zaXRpb24gPSBwb3NpdGlvbkZvckNsb25lUm9vdExheWVyKCk7CkBAIC0xMjQ2LDgg
KzEyNDYsOCBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlVHJhbnNmb3JtKCkKICAgICBp
ZiAoTGF5ZXJNYXAqIGxheWVyQ2xvbmVNYXAgPSBwcmltYXJ5TGF5ZXJDbG9uZXMoKSkgewogICAg
ICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7
CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1h
cC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBQbGF0Zm9ybUNBTGF5
ZXIqIGN1cnJMYXllciA9IGl0LT5zZWNvbmQuZ2V0KCk7Ci0gICAgICAgICAgICBpZiAobV9yZXBs
aWNhTGF5ZXIgJiYgaXNSZXBsaWNhdGVkUm9vdENsb25lKGl0LT5maXJzdCkpIHsKKyAgICAgICAg
ICAgIFBsYXRmb3JtQ0FMYXllciogY3VyckxheWVyID0gaXQtPnZhbHVlLmdldCgpOworICAgICAg
ICAgICAgaWYgKG1fcmVwbGljYUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9uZShpdC0+a2V5
KSkgewogICAgICAgICAgICAgICAgIC8vIE1haW50YWluIHRoZSBzcGVjaWFsLWNhc2UgdHJhbnNm
b3JtIGZvciB0aGUgcm9vdCBvZiBhIGNsb25lIHN1YnRyZWUsCiAgICAgICAgICAgICAgICAgLy8g
d2hpY2ggd2Ugc2V0IHVwIGluIHJlcGxpY2F0ZWRMYXllclJvb3QoKS4KICAgICAgICAgICAgICAg
ICBjdXJyTGF5ZXItPnNldFRyYW5zZm9ybShUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpKTsKQEAgLTEy
NjQsNyArMTI2NCw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVDaGlsZHJlblRyYW5z
Zm9ybSgpCiAgICAgaWYgKExheWVyTWFwKiBsYXllckNsb25lTWFwID0gcHJpbWFyeUxheWVyQ2xv
bmVzKCkpIHsKICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxheWVyQ2xv
bmVNYXAtPmVuZCgpOwogICAgICAgICBmb3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9
IGxheWVyQ2xvbmVNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIGl0
LT5zZWNvbmQtPnNldFN1YmxheWVyVHJhbnNmb3JtKG1fY2hpbGRyZW5UcmFuc2Zvcm0pOworICAg
ICAgICAgICAgaXQtPnZhbHVlLT5zZXRTdWJsYXllclRyYW5zZm9ybShtX2NoaWxkcmVuVHJhbnNm
b3JtKTsKICAgICB9CiB9CiAKQEAgLTEyNzUsNyArMTI3NSw3IEBAIHZvaWQgR3JhcGhpY3NMYXll
ckNBOjp1cGRhdGVNYXNrc1RvQm91bmRzKCkKICAgICBpZiAoTGF5ZXJNYXAqIGxheWVyQ2xvbmVN
YXAgPSBtX2xheWVyQ2xvbmVzLmdldCgpKSB7CiAgICAgICAgIExheWVyTWFwOjpjb25zdF9pdGVy
YXRvciBlbmQgPSBsYXllckNsb25lTWFwLT5lbmQoKTsKICAgICAgICAgZm9yIChMYXllck1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXllckNsb25lTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpCi0gICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRNYXNrc1RvQm91bmRzKG1fbWFza3NUb0Jv
dW5kcyk7CisgICAgICAgICAgICBpdC0+dmFsdWUtPnNldE1hc2tzVG9Cb3VuZHMobV9tYXNrc1Rv
Qm91bmRzKTsKICAgICB9CiAKICAgICB1cGRhdGVEZWJ1Z0luZGljYXRvcnMoKTsKQEAgLTEyOTMs
NyArMTI5Myw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVDb250ZW50c1Zpc2liaWxp
dHkoKQogICAgICAgICBpZiAoTGF5ZXJNYXAqIGxheWVyQ2xvbmVNYXAgPSBtX2xheWVyQ2xvbmVz
LmdldCgpKSB7CiAgICAgICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5
ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAgICAgICAgICBmb3IgKExheWVyTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IGxheWVyQ2xvbmVNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAg
ICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRDb250ZW50cygwKTsKKyAgICAgICAgICAgICAgICBp
dC0+dmFsdWUtPnNldENvbnRlbnRzKDApOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMTMwNSw3
ICsxMzA1LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUNvbnRlbnRzT3BhcXVlKCkK
ICAgICBpZiAoTGF5ZXJNYXAqIGxheWVyQ2xvbmVNYXAgPSBtX2xheWVyQ2xvbmVzLmdldCgpKSB7
CiAgICAgICAgIExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBsYXllckNsb25lTWFwLT5l
bmQoKTsKICAgICAgICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXllckNs
b25lTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBpdC0+c2Vjb25k
LT5zZXRPcGFxdWUobV9jb250ZW50c09wYXF1ZSk7CisgICAgICAgICAgICBpdC0+dmFsdWUtPnNl
dE9wYXF1ZShtX2NvbnRlbnRzT3BhcXVlKTsKICAgICB9CiB9CiAKQEAgLTEzMTcsNyArMTMxNyw3
IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVCYWNrZmFjZVZpc2liaWxpdHkoKQogICAg
ICAgICBpZiAoTGF5ZXJNYXAqIGxheWVyQ2xvbmVNYXAgPSBtX3N0cnVjdHVyYWxMYXllckNsb25l
cy5nZXQoKSkgewogICAgICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxh
eWVyQ2xvbmVNYXAtPmVuZCgpOwogICAgICAgICAgICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBsYXllckNsb25lTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAg
ICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0RG91YmxlU2lkZWQobV9iYWNrZmFjZVZpc2liaWxp
dHkpOworICAgICAgICAgICAgICAgIGl0LT52YWx1ZS0+c2V0RG91YmxlU2lkZWQobV9iYWNrZmFj
ZVZpc2liaWxpdHkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xMzI2LDcgKzEzMjYsNyBAQCB2
b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlQmFja2ZhY2VWaXNpYmlsaXR5KCkKICAgICBpZiAo
TGF5ZXJNYXAqIGxheWVyQ2xvbmVNYXAgPSBtX2xheWVyQ2xvbmVzLmdldCgpKSB7CiAgICAgICAg
IExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBsYXllckNsb25lTWFwLT5lbmQoKTsKICAg
ICAgICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXllckNsb25lTWFwLT5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXREb3Vi
bGVTaWRlZChtX2JhY2tmYWNlVmlzaWJpbGl0eSk7CisgICAgICAgICAgICBpdC0+dmFsdWUtPnNl
dERvdWJsZVNpZGVkKG1fYmFja2ZhY2VWaXNpYmlsaXR5KTsKICAgICB9CiB9CiAKQEAgLTEzMzgs
MTAgKzEzMzgsMTAgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUZpbHRlcnMoKQogICAg
IGlmIChMYXllck1hcCogbGF5ZXJDbG9uZU1hcCA9IHByaW1hcnlMYXllckNsb25lcygpKSB7CiAg
ICAgICAgIExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBsYXllckNsb25lTWFwLT5lbmQo
KTsKICAgICAgICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXllckNsb25l
TWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGlmIChtX3JlcGxp
Y2FMYXllciAmJiBpc1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQtPmZpcnN0KSkKKyAgICAgICAgICAg
IGlmIChtX3JlcGxpY2FMYXllciAmJiBpc1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQtPmtleSkpCiAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNldEZp
bHRlcnMobV9maWx0ZXJzKTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+c2V0RmlsdGVycyhtX2Zp
bHRlcnMpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMTQzMCw3ICsxNDMwLDcgQEAgdm9pZCBH
cmFwaGljc0xheWVyQ0E6OmVuc3VyZVN0cnVjdHVyYWxMYXllcihTdHJ1Y3R1cmFsTGF5ZXJQdXJw
b3NlIHB1cnBvc2UsIGZsb2EKICAgICBpZiAobV9sYXllckNsb25lcykgewogICAgICAgICBMYXll
ck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9sYXllckNsb25lcy0+ZW5kKCk7CiAgICAgICAg
IGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9sYXllckNsb25lcy0+YmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBQbGF0Zm9ybUNBTGF5ZXIqIGN1cnJM
YXllciA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBQbGF0Zm9ybUNBTGF5ZXIqIGN1
cnJMYXllciA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGN1cnJMYXllci0+c2V0UG9z
aXRpb24ocG9pbnQpOwogICAgICAgICAgICAgY3VyckxheWVyLT5zZXRBbmNob3JQb2ludChhbmNo
b3JQb2ludCk7CiAgICAgICAgICAgICBjdXJyTGF5ZXItPnNldFRyYW5zZm9ybShUcmFuc2Zvcm1h
dGlvbk1hdHJpeCgpKTsKQEAgLTE0NzUsNyArMTQ3NSw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNB
Ojp1cGRhdGVMYXllckRyYXdzQ29udGVudChmbG9hdCBwYWdlU2NhbGVGYWN0b3IsIGNvbnN0IEZs
b2F0CiAgICAgICAgIGlmIChtX2xheWVyQ2xvbmVzKSB7CiAgICAgICAgICAgICBMYXllck1hcDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9sYXllckNsb25lcy0+ZW5kKCk7CiAgICAgICAgICAgICBm
b3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fbGF5ZXJDbG9uZXMtPmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRDb250ZW50
cygwKTsKKyAgICAgICAgICAgICAgICBpdC0+dmFsdWUtPnNldENvbnRlbnRzKDApOwogICAgICAg
ICB9CiAgICAgfQogICAgIHVwZGF0ZURlYnVnSW5kaWNhdG9ycygpOwpAQCAtMTUyNiw3ICsxNTI2
LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUNvbnRlbnRzSW1hZ2UoKQogICAgICAg
ICBpZiAobV9jb250ZW50c0xheWVyQ2xvbmVzKSB7CiAgICAgICAgICAgICBMYXllck1hcDo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gbV9jb250ZW50c0xheWVyQ2xvbmVzLT5lbmQoKTsKICAgICAgICAg
ICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9jb250ZW50c0xheWVyQ2xv
bmVzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICAgICAgaXQtPnNlY29u
ZC0+c2V0Q29udGVudHMobV9jb250ZW50c0xheWVyLT5jb250ZW50cygpKTsKKyAgICAgICAgICAg
ICAgICBpdC0+dmFsdWUtPnNldENvbnRlbnRzKG1fY29udGVudHNMYXllci0+Y29udGVudHMoKSk7
CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHVwZGF0ZUNvbnRlbnRzUmVjdCgpOwpAQCAt
MTU3MCw4ICsxNTcwLDggQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUNvbnRlbnRzUmVj
dCgpCiAgICAgaWYgKG1fY29udGVudHNMYXllckNsb25lcykgewogICAgICAgICBMYXllck1hcDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9jb250ZW50c0xheWVyQ2xvbmVzLT5lbmQoKTsKICAgICAg
ICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2NvbnRlbnRzTGF5ZXJDbG9u
ZXMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgaXQtPnNlY29uZC0+
c2V0UG9zaXRpb24ocG9pbnQpOwotICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0Qm91bmRzKHJl
Y3QpOworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRQb3NpdGlvbihwb2ludCk7CisgICAgICAg
ICAgICBpdC0+dmFsdWUtPnNldEJvdW5kcyhyZWN0KTsKICAgICAgICAgfQogICAgIH0KIH0KQEAg
LTE1ODYsOCArMTU4Niw4IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVNYXNrTGF5ZXIo
KQogICAgIGlmIChMYXllck1hcCogbGF5ZXJDbG9uZU1hcCA9IG1fbGF5ZXJDbG9uZXMuZ2V0KCkp
IHsKICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxheWVyQ2xvbmVNYXAt
PmVuZCgpOwogICAgICAgICBmb3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGxheWVy
Q2xvbmVNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeyAgICAgICAgICAgIAotICAgICAg
ICAgICAgUGxhdGZvcm1DQUxheWVyKiBtYXNrQ2xvbmUgPSBtYXNrTGF5ZXJDbG9uZU1hcCA/IG1h
c2tMYXllckNsb25lTWFwLT5nZXQoaXQtPmZpcnN0KS5nZXQoKSA6IDA7Ci0gICAgICAgICAgICBp
dC0+c2Vjb25kLT5zZXRNYXNrKG1hc2tDbG9uZSk7CisgICAgICAgICAgICBQbGF0Zm9ybUNBTGF5
ZXIqIG1hc2tDbG9uZSA9IG1hc2tMYXllckNsb25lTWFwID8gbWFza0xheWVyQ2xvbmVNYXAtPmdl
dChpdC0+a2V5KS5nZXQoKSA6IDA7CisgICAgICAgICAgICBpdC0+dmFsdWUtPnNldE1hc2sobWFz
a0Nsb25lKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTE2NTEsMTMgKzE2NTEsMTMgQEAgdm9p
ZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUxheWVyQW5pbWF0aW9ucygpCiAgICAgaWYgKG1fYW5p
bWF0aW9uc1RvUHJvY2Vzcy5zaXplKCkpIHsKICAgICAgICAgQW5pbWF0aW9uc1RvUHJvY2Vzc01h
cDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9hbmltYXRpb25zVG9Qcm9jZXNzLmVuZCgpOwogICAg
ICAgICBmb3IgKEFuaW1hdGlvbnNUb1Byb2Nlc3NNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9h
bmltYXRpb25zVG9Qcm9jZXNzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAg
ICAgY29uc3QgU3RyaW5nJiBjdXJyQW5pbWF0aW9uTmFtZSA9IGl0LT5maXJzdDsKKyAgICAgICAg
ICAgIGNvbnN0IFN0cmluZyYgY3VyckFuaW1hdGlvbk5hbWUgPSBpdC0+a2V5OwogICAgICAgICAg
ICAgQW5pbWF0aW9uc01hcDo6aXRlcmF0b3IgYW5pbWF0aW9uSXQgPSBtX3J1bm5pbmdBbmltYXRp
b25zLmZpbmQoY3VyckFuaW1hdGlvbk5hbWUpOwogICAgICAgICAgICAgaWYgKGFuaW1hdGlvbkl0
ID09IG1fcnVubmluZ0FuaW1hdGlvbnMuZW5kKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7
CiAKLSAgICAgICAgICAgIGNvbnN0IEFuaW1hdGlvblByb2Nlc3NpbmdBY3Rpb24mIHByb2Nlc3Np
bmdJbmZvID0gaXQtPnNlY29uZDsKLSAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxMYXllclByb3Bl
cnR5QW5pbWF0aW9uPiYgYW5pbWF0aW9ucyA9IGFuaW1hdGlvbkl0LT5zZWNvbmQ7CisgICAgICAg
ICAgICBjb25zdCBBbmltYXRpb25Qcm9jZXNzaW5nQWN0aW9uJiBwcm9jZXNzaW5nSW5mbyA9IGl0
LT52YWx1ZTsKKyAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxMYXllclByb3BlcnR5QW5pbWF0aW9u
PiYgYW5pbWF0aW9ucyA9IGFuaW1hdGlvbkl0LT52YWx1ZTsKICAgICAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgYW5pbWF0aW9ucy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgICAg
IGNvbnN0IExheWVyUHJvcGVydHlBbmltYXRpb24mIGN1cnJBbmltYXRpb24gPSBhbmltYXRpb25z
W2ldOwogICAgICAgICAgICAgICAgIHN3aXRjaCAocHJvY2Vzc2luZ0luZm8uYWN0aW9uKSB7CkBA
IC0xNjg5LDcgKzE2ODksNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlTGF5ZXJBbmlt
YXRpb25zKCkKICAgICAgICAgICAgICAgICBhbmltYXRpb25zLmFwcGVuZChwZW5kaW5nQW5pbWF0
aW9uKTsKICAgICAgICAgICAgICAgICBtX3J1bm5pbmdBbmltYXRpb25zLmFkZChwZW5kaW5nQW5p
bWF0aW9uLm1fbmFtZSwgYW5pbWF0aW9ucyk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgIFZlY3RvcjxMYXllclByb3BlcnR5QW5pbWF0aW9uPiYgYW5pbWF0aW9ucyA9IGl0
LT5zZWNvbmQ7CisgICAgICAgICAgICAgICAgVmVjdG9yPExheWVyUHJvcGVydHlBbmltYXRpb24+
JiBhbmltYXRpb25zID0gaXQtPnZhbHVlOwogICAgICAgICAgICAgICAgIGFuaW1hdGlvbnMuYXBw
ZW5kKHBlbmRpbmdBbmltYXRpb24pOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xNzE0
LDExICsxNzE0LDExIEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpzZXRBbmltYXRpb25PbkxheWVy
KFBsYXRmb3JtQ0FBbmltYXRpb24qIGNhQW5pbSwgQW5pbWF0ZWRQCiAgICAgICAgIExheWVyTWFw
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBsYXllckNsb25lTWFwLT5lbmQoKTsKICAgICAgICAgZm9y
IChMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXllckNsb25lTWFwLT5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIC8vIFNraXAgaW1tZWRpYXRlIHJlcGxpY2Fz
LCBzaW5jZSB0aGV5IG1vdmUgd2l0aCB0aGUgb3JpZ2luYWwuCi0gICAgICAgICAgICBpZiAobV9y
ZXBsaWNhTGF5ZXIgJiYgaXNSZXBsaWNhdGVkUm9vdENsb25lKGl0LT5maXJzdCkpCisgICAgICAg
ICAgICBpZiAobV9yZXBsaWNhTGF5ZXIgJiYgaXNSZXBsaWNhdGVkUm9vdENsb25lKGl0LT5rZXkp
KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBpdC0+c2Vjb25kLT5y
ZW1vdmVBbmltYXRpb25Gb3JLZXkoYW5pbWF0aW9uSUQpOwotICAgICAgICAgICAgaXQtPnNlY29u
ZC0+YWRkQW5pbWF0aW9uRm9yS2V5KGFuaW1hdGlvbklELCBjYUFuaW0pOworICAgICAgICAgICAg
aXQtPnZhbHVlLT5yZW1vdmVBbmltYXRpb25Gb3JLZXkoYW5pbWF0aW9uSUQpOworICAgICAgICAg
ICAgaXQtPnZhbHVlLT5hZGRBbmltYXRpb25Gb3JLZXkoYW5pbWF0aW9uSUQsIGNhQW5pbSk7CiAg
ICAgICAgIH0KICAgICB9CiB9CkBAIC0xNzUzLDEwICsxNzUzLDEwIEBAIGJvb2wgR3JhcGhpY3NM
YXllckNBOjpyZW1vdmVDQUFuaW1hdGlvbkZyb21MYXllcihBbmltYXRlZFByb3BlcnR5SUQgcHJv
cGVydHksIGNvCiAgICAgICAgIExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBsYXllckNs
b25lTWFwLT5lbmQoKTsKICAgICAgICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBsYXllckNsb25lTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAg
IC8vIFNraXAgaW1tZWRpYXRlIHJlcGxpY2FzLCBzaW5jZSB0aGV5IG1vdmUgd2l0aCB0aGUgb3Jp
Z2luYWwuCi0gICAgICAgICAgICBpZiAobV9yZXBsaWNhTGF5ZXIgJiYgaXNSZXBsaWNhdGVkUm9v
dENsb25lKGl0LT5maXJzdCkpCisgICAgICAgICAgICBpZiAobV9yZXBsaWNhTGF5ZXIgJiYgaXNS
ZXBsaWNhdGVkUm9vdENsb25lKGl0LT5rZXkpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
Ci0gICAgICAgICAgICBpdC0+c2Vjb25kIC0+cmVtb3ZlQW5pbWF0aW9uRm9yS2V5KGFuaW1hdGlv
bklEKTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+cmVtb3ZlQW5pbWF0aW9uRm9yS2V5KGFuaW1h
dGlvbklEKTsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKQEAgLTE3ODUsOSAr
MTc4NSw5IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpwYXVzZUNBQW5pbWF0aW9uT25MYXllcihB
bmltYXRlZFByb3BlcnR5SUQgcHJvcGVydHksIGNvbnN0CiAgICAgICAgIExheWVyTWFwOjpjb25z
dF9pdGVyYXRvciBlbmQgPSBsYXllckNsb25lTWFwLT5lbmQoKTsKICAgICAgICAgZm9yIChMYXll
ck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXllckNsb25lTWFwLT5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKICAgICAgICAgICAgIC8vIFNraXAgaW1tZWRpYXRlIHJlcGxpY2FzLCBzaW5j
ZSB0aGV5IG1vdmUgd2l0aCB0aGUgb3JpZ2luYWwuCi0gICAgICAgICAgICBpZiAobV9yZXBsaWNh
TGF5ZXIgJiYgaXNSZXBsaWNhdGVkUm9vdENsb25lKGl0LT5maXJzdCkpCisgICAgICAgICAgICBp
ZiAobV9yZXBsaWNhTGF5ZXIgJiYgaXNSZXBsaWNhdGVkUm9vdENsb25lKGl0LT5rZXkpKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaXQtPnNlY29uZC0+YWRkQW5pbWF0
aW9uRm9yS2V5KGFuaW1hdGlvbklELCBuZXdBbmltLmdldCgpKTsKKyAgICAgICAgICAgIGl0LT52
YWx1ZS0+YWRkQW5pbWF0aW9uRm9yS2V5KGFuaW1hdGlvbklELCBuZXdBbmltLmdldCgpKTsKICAg
ICAgICAgfQogICAgIH0KIH0KQEAgLTIzMDcsOCArMjMwNyw4IEBAIHZvaWQgR3JhcGhpY3NMYXll
ckNBOjpzdXNwZW5kQW5pbWF0aW9ucyhkb3VibGUgdGltZSkKICAgICBpZiAoTGF5ZXJNYXAqIGxh
eWVyQ2xvbmVNYXAgPSBwcmltYXJ5TGF5ZXJDbG9uZXMoKSkgewogICAgICAgICBMYXllck1hcDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAo
TGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRTcGVlZCgwKTsKLSAg
ICAgICAgICAgIGl0LT5zZWNvbmQtPnNldFRpbWVPZmZzZXQodCk7CisgICAgICAgICAgICBpdC0+
dmFsdWUtPnNldFNwZWVkKDApOworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRUaW1lT2Zmc2V0
KHQpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMjMyMiw4ICsyMzIyLDggQEAgdm9pZCBHcmFw
aGljc0xheWVyQ0E6OnJlc3VtZUFuaW1hdGlvbnMoKQogICAgIGlmIChMYXllck1hcCogbGF5ZXJD
bG9uZU1hcCA9IHByaW1hcnlMYXllckNsb25lcygpKSB7CiAgICAgICAgIExheWVyTWFwOjpjb25z
dF9pdGVyYXRvciBlbmQgPSBsYXllckNsb25lTWFwLT5lbmQoKTsKICAgICAgICAgZm9yIChMYXll
ck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXllckNsb25lTWFwLT5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNldFNwZWVkKDEpOwotICAgICAg
ICAgICAgaXQtPnNlY29uZC0+c2V0VGltZU9mZnNldCgwKTsKKyAgICAgICAgICAgIGl0LT52YWx1
ZS0+c2V0U3BlZWQoMSk7CisgICAgICAgICAgICBpdC0+dmFsdWUtPnNldFRpbWVPZmZzZXQoMCk7
CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0yNTMzLDEzICsyNTMzLDEzIEBAIFBhc3NSZWZQdHI8
UGxhdGZvcm1DQUxheWVyPiBHcmFwaGljc0xheWVyQ0E6OmZpbmRPck1ha2VDbG9uZShDbG9uZUlE
IGNsb25lSUQsIFBsCiAgICAgTGF5ZXJNYXA6OkFkZFJlc3VsdCBhZGRSZXN1bHQgPSBjbG9uZXMt
PmFkZChjbG9uZUlELCBkdW1teSk7CiAgICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSkgewog
ICAgICAgICAvLyBWYWx1ZSB3YXMgbm90IGFkZGVkLCBzbyBpdCBleGlzdHMgYWxyZWFkeS4KLSAg
ICAgICAgcmVzdWx0TGF5ZXIgPSBhZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZC5nZXQoKTsKKyAg
ICAgICAgcmVzdWx0TGF5ZXIgPSBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpOwogICAg
IH0gZWxzZSB7CiAgICAgICAgIHJlc3VsdExheWVyID0gY2xvbmVMYXllcihzb3VyY2VMYXllciwg
Y2xvbmVMZXZlbCk7CiAjaWZuZGVmIE5ERUJVRwogICAgICAgICByZXN1bHRMYXllci0+c2V0TmFt
ZShTdHJpbmc6OmZvcm1hdCgiQ2xvbmUgJWQgb2YgbGF5ZXIgJXAiLCBjbG9uZUlEWzBVXSwgc291
cmNlTGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSkpOwogI2VuZGlmCi0gICAgICAgIGFkZFJlc3VsdC5p
dGVyYXRvci0+c2Vjb25kID0gcmVzdWx0TGF5ZXI7CisgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRv
ci0+dmFsdWUgPSByZXN1bHRMYXllcjsKICAgICB9CiAKICAgICByZXR1cm4gcmVzdWx0TGF5ZXI7
CkBAIC0yNzMxLDkgKzI3MzEsOSBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c2V0T3BhY2l0eUlu
dGVybmFsKGZsb2F0IGFjY3VtdWxhdGVkT3BhY2l0eSkKICAgICBpZiAobGF5ZXJDbG9uZU1hcCkg
ewogICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+
ZW5kKCk7CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJD
bG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAobV9y
ZXBsaWNhTGF5ZXIgJiYgaXNSZXBsaWNhdGVkUm9vdENsb25lKGl0LT5maXJzdCkpCisgICAgICAg
ICAgICBpZiAobV9yZXBsaWNhTGF5ZXIgJiYgaXNSZXBsaWNhdGVkUm9vdENsb25lKGl0LT5rZXkp
KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0
T3BhY2l0eShtX29wYWNpdHkpOworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRPcGFjaXR5KG1f
b3BhY2l0eSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0yNzQ1LDEwICsyNzQ1LDEwIEBAIHZv
aWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVPcGFjaXR5T25MYXllcigpCiAgICAgaWYgKExheWVy
TWFwKiBsYXllckNsb25lTWFwID0gcHJpbWFyeUxheWVyQ2xvbmVzKCkpIHsKICAgICAgICAgTGF5
ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxheWVyQ2xvbmVNYXAtPmVuZCgpOwogICAgICAg
ICBmb3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGxheWVyQ2xvbmVNYXAtPmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgaWYgKG1fcmVwbGljYUxheWVyICYm
IGlzUmVwbGljYXRlZFJvb3RDbG9uZShpdC0+Zmlyc3QpKQorICAgICAgICAgICAgaWYgKG1fcmVw
bGljYUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9uZShpdC0+a2V5KSkKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0T3BhY2l0eShtX29w
YWNpdHkpOworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRPcGFjaXR5KG1fb3BhY2l0eSk7CiAg
ICAgICAgIH0KICAgICAgICAgCiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1RpbGVDYWNoZS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL21hYy9UaWxlQ2FjaGUubW0KaW5kZXggZjc5YzYzYjI5YTVlMjk3NDZj
YWZlYjBkMWM0ZjM2ZWFhNGFhOTdmNS4uZjk3ZWQxZmUyMmE2YWNkNzdmNWQ3YjRhODExMTkxMWVm
ODZlMjdkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
bWFjL1RpbGVDYWNoZS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YS9tYWMvVGlsZUNhY2hlLm1tCkBAIC05MCw3ICs5MCw3IEBAIHZvaWQgVGlsZUNhY2hlOjp0aWxl
Q2FjaGVMYXllckJvdW5kc0NoYW5nZWQoKQogdm9pZCBUaWxlQ2FjaGU6OnNldE5lZWRzRGlzcGxh
eSgpCiB7CiAgICAgZm9yIChUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVn
aW4oKSwgZW5kID0gbV90aWxlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBbaXQt
PnNlY29uZC5nZXQoKSBzZXROZWVkc0Rpc3BsYXldOworICAgICAgICBbaXQtPnZhbHVlLmdldCgp
IHNldE5lZWRzRGlzcGxheV07CiB9CiAKIHZvaWQgVGlsZUNhY2hlOjpzZXROZWVkc0Rpc3BsYXlJ
blJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKQEAgLTE2Nyw5ICsxNjcsOSBAQCB2b2lkIFRpbGVD
YWNoZTo6c2V0U2NhbGUoQ0dGbG9hdCBzY2FsZSkKICAgICByZXZhbGlkYXRlVGlsZXMoKTsKIAog
ICAgIGZvciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCksIGVu
ZCA9IG1fdGlsZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBbaXQtPnNlY29u
ZC5nZXQoKSBzZXRDb250ZW50c1NjYWxlOmRldmljZVNjYWxlRmFjdG9yXTsKKyAgICAgICAgW2l0
LT52YWx1ZS5nZXQoKSBzZXRDb250ZW50c1NjYWxlOmRldmljZVNjYWxlRmFjdG9yXTsKIAotICAg
ICAgICBJbnRSZWN0IHRpbGVSZWN0ID0gcmVjdEZvclRpbGVJbmRleChpdC0+Zmlyc3QpOworICAg
ICAgICBJbnRSZWN0IHRpbGVSZWN0ID0gcmVjdEZvclRpbGVJbmRleChpdC0+a2V5KTsKICAgICAg
ICAgRmxvYXRSZWN0IHNjYWxlZFRpbGVSZWN0ID0gdGlsZVJlY3Q7CiAKICAgICAgICAgc2NhbGVk
VGlsZVJlY3Quc2NhbGUoMSAvIG1fc2NhbGUpOwpAQCAtMTg5LDcgKzE4OSw3IEBAIHZvaWQgVGls
ZUNhY2hlOjpzZXRBY2NlbGVyYXRlc0RyYXdpbmcoYm9vbCBhY2NlbGVyYXRlc0RyYXdpbmcpCiAg
ICAgbV9hY2NlbGVyYXRlc0RyYXdpbmcgPSBhY2NlbGVyYXRlc0RyYXdpbmc7CiAKICAgICBmb3Ig
KFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpLCBlbmQgPSBtX3Rp
bGVzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIFtpdC0+c2Vjb25kLmdldCgpIHNl
dEFjY2VsZXJhdGVzRHJhd2luZzptX2FjY2VsZXJhdGVzRHJhd2luZ107CisgICAgICAgIFtpdC0+
dmFsdWUuZ2V0KCkgc2V0QWNjZWxlcmF0ZXNEcmF3aW5nOm1fYWNjZWxlcmF0ZXNEcmF3aW5nXTsK
ICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGFjY2VsZXJhdGVzRHJhd2luZyk7CiAjZW5kaWYKQEAg
LTIzNCw3ICsyMzQsNyBAQCB2b2lkIFRpbGVDYWNoZTo6c2V0VGlsZURlYnVnQm9yZGVyV2lkdGgo
ZmxvYXQgYm9yZGVyV2lkdGgpCiAKICAgICBtX3RpbGVEZWJ1Z0JvcmRlcldpZHRoID0gYm9yZGVy
V2lkdGg7CiAgICAgZm9yIChUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVn
aW4oKSwgZW5kID0gbV90aWxlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBbaXQt
PnNlY29uZC5nZXQoKSBzZXRCb3JkZXJXaWR0aDptX3RpbGVEZWJ1Z0JvcmRlcldpZHRoXTsKKyAg
ICAgICAgW2l0LT52YWx1ZS5nZXQoKSBzZXRCb3JkZXJXaWR0aDptX3RpbGVEZWJ1Z0JvcmRlcldp
ZHRoXTsKIH0KIAogdm9pZCBUaWxlQ2FjaGU6OnNldFRpbGVEZWJ1Z0JvcmRlckNvbG9yKENHQ29s
b3JSZWYgYm9yZGVyQ29sb3IpCkBAIC0yNDQsNyArMjQ0LDcgQEAgdm9pZCBUaWxlQ2FjaGU6OnNl
dFRpbGVEZWJ1Z0JvcmRlckNvbG9yKENHQ29sb3JSZWYgYm9yZGVyQ29sb3IpCiAKICAgICBtX3Rp
bGVEZWJ1Z0JvcmRlckNvbG9yID0gYm9yZGVyQ29sb3I7CiAgICAgZm9yIChUaWxlTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKSwgZW5kID0gbV90aWxlcy5lbmQoKTsgaXQg
IT0gZW5kOyArK2l0KQotICAgICAgICBbaXQtPnNlY29uZC5nZXQoKSBzZXRCb3JkZXJDb2xvcjpt
X3RpbGVEZWJ1Z0JvcmRlckNvbG9yLmdldCgpXTsKKyAgICAgICAgW2l0LT52YWx1ZS5nZXQoKSBz
ZXRCb3JkZXJDb2xvcjptX3RpbGVEZWJ1Z0JvcmRlckNvbG9yLmdldCgpXTsKIH0KIAogSW50UmVj
dCBUaWxlQ2FjaGU6OmJvdW5kcygpIGNvbnN0CkBAIC0zMjIsOSArMzIyLDkgQEAgdm9pZCBUaWxl
Q2FjaGU6OnJldmFsaWRhdGVUaWxlcygpCiAgICAgVmVjdG9yPFRpbGVJbmRleD4gdGlsZXNUb1Jl
bW92ZTsKIAogICAgIGZvciAoVGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCks
IGVuZCA9IG1fdGlsZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBjb25zdCBU
aWxlSW5kZXgmIHRpbGVJbmRleCA9IGl0LT5maXJzdDsKKyAgICAgICAgY29uc3QgVGlsZUluZGV4
JiB0aWxlSW5kZXggPSBpdC0+a2V5OwogCi0gICAgICAgIFdlYlRpbGVMYXllciogdGlsZUxheWVy
ID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgV2ViVGlsZUxheWVyKiB0aWxlTGF5ZXIgPSBp
dC0+dmFsdWUuZ2V0KCk7CiAKICAgICAgICAgaWYgKCFyZWN0Rm9yVGlsZUluZGV4KHRpbGVJbmRl
eCkuaW50ZXJzZWN0cyh0aWxlQ292ZXJhZ2VSZWN0KSkgewogICAgICAgICAgICAgLy8gUmVtb3Zl
IHRoaXMgbGF5ZXIuCkBAIC0zNTIsNyArMzUyLDcgQEAgdm9pZCBUaWxlQ2FjaGU6OnJldmFsaWRh
dGVUaWxlcygpCiAgICAgICAgICAgICBUaWxlSW5kZXggdGlsZUluZGV4KHgsIHkpOwogCiAgICAg
ICAgICAgICBJbnRSZWN0IHRpbGVSZWN0ID0gcmVjdEZvclRpbGVJbmRleCh0aWxlSW5kZXgpOwot
ICAgICAgICAgICAgUmV0YWluUHRyPFdlYlRpbGVMYXllcj4mIHRpbGVMYXllciA9IG1fdGlsZXMu
YWRkKHRpbGVJbmRleCwgMCkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgICAgIFJldGFpblB0
cjxXZWJUaWxlTGF5ZXI+JiB0aWxlTGF5ZXIgPSBtX3RpbGVzLmFkZCh0aWxlSW5kZXgsIDApLml0
ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgICAgIGlmICghdGlsZUxheWVyKSB7CiAgICAgICAgICAg
ICAgICAgdGlsZUxheWVyID0gY3JlYXRlVGlsZUxheWVyKHRpbGVSZWN0KTsKICAgICAgICAgICAg
ICAgICBbbV90aWxlQ29udGFpbmVyTGF5ZXIuZ2V0KCkgYWRkU3VibGF5ZXI6dGlsZUxheWVyLmdl
dCgpXTsKQEAgLTM3Miw3ICszNzIsNyBAQCB2b2lkIFRpbGVDYWNoZTo6cmV2YWxpZGF0ZVRpbGVz
KCkKIAogICAgIG1fdGlsZUNvdmVyYWdlUmVjdCA9IEludFJlY3QoKTsKICAgICBmb3IgKFRpbGVN
YXA6Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpLCBlbmQgPSBtX3RpbGVzLmVuZCgpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgY29uc3QgVGlsZUluZGV4JiB0aWxlSW5kZXggPSBp
dC0+Zmlyc3Q7CisgICAgICAgIGNvbnN0IFRpbGVJbmRleCYgdGlsZUluZGV4ID0gaXQtPmtleTsK
IAogICAgICAgICBtX3RpbGVDb3ZlcmFnZVJlY3QudW5pdGUocmVjdEZvclRpbGVJbmRleCh0aWxl
SW5kZXgpKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwCmluZGV4IDQ4YjIwZDBi
OGJkMjQyYWI1NDliOGZlNDQyZGY0NGFiMzY3MmViODUuLjcwMTY4YjIxMDRkYjM2OWRhMDc1N2Ex
MTQ0NjIyMTExYmMzMDYxZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwCkBAIC0xNjcs
NyArMTY3LDcgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OmFuaW1hdGlvblN0YXJ0ZWQoQ0ZUaW1l
SW50ZXJ2YWwgYmVnaW5UaW1lKQogCiAgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxQbGF0Zm9y
bUNBQW5pbWF0aW9uPiA+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2FuaW1hdGlvbnMuZW5kKCk7
CiAgICAgZm9yIChIYXNoTWFwPFN0cmluZywgUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+ID46
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9hbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkKLSAgICAgICAgaXQtPnNlY29uZC0+c2V0QWN0dWFsU3RhcnRUaW1lSWZOZWVkZWQoY2FjZkJl
Z2luVGltZSk7CisgICAgICAgIGl0LT52YWx1ZS0+c2V0QWN0dWFsU3RhcnRUaW1lSWZOZWVkZWQo
Y2FjZkJlZ2luVGltZSk7CiAKICAgICBpZiAobV9vd25lcikKICAgICAgICAgbV9vd25lci0+cGxh
dGZvcm1DQUxheWVyQW5pbWF0aW9uU3RhcnRlZChiZWdpblRpbWUpOwpAQCAtMTc3LDggKzE3Nyw4
IEBAIHN0YXRpYyB2b2lkIHJlc3VibWl0QWxsQW5pbWF0aW9ucyhQbGF0Zm9ybUNBTGF5ZXIqIGxh
eWVyKQogewogICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8UGxhdGZvcm1DQUFuaW1hdGlvbj4g
Pjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXItPmFuaW1hdGlvbnMoKS5lbmQoKTsKICAgICBm
b3IgKEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8UGxhdGZvcm1DQUFuaW1hdGlvbj4gPjo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBsYXllci0+YW5pbWF0aW9ucygpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgewotICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHMoQWRvcHRDRiwgaXQtPmZpcnN0
LmNyZWF0ZUNGU3RyaW5nKCkpOwotICAgICAgICBDQUNGTGF5ZXJBZGRBbmltYXRpb24obGF5ZXIt
PnBsYXRmb3JtTGF5ZXIoKSwgcy5nZXQoKSwgaXQtPnNlY29uZC0+cGxhdGZvcm1BbmltYXRpb24o
KSk7CisgICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gcyhBZG9wdENGLCBpdC0+a2V5LmNy
ZWF0ZUNGU3RyaW5nKCkpOworICAgICAgICBDQUNGTGF5ZXJBZGRBbmltYXRpb24obGF5ZXItPnBs
YXRmb3JtTGF5ZXIoKSwgcy5nZXQoKSwgaXQtPnZhbHVlLT5wbGF0Zm9ybUFuaW1hdGlvbigpKTsK
ICAgICB9CiB9CiAKQEAgLTMyOCw3ICszMjgsNyBAQCBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FBbmlt
YXRpb24+IFBsYXRmb3JtQ0FMYXllcjo6YW5pbWF0aW9uRm9yS2V5KGNvbnN0IFN0cmluZyYgawog
ICAgIGlmIChpdCA9PSBtX2FuaW1hdGlvbnMuZW5kKCkpCiAgICAgICAgIHJldHVybiAwOwogCi0g
ICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgcmV0dXJuIGl0LT52YWx1ZTsKIH0KIAogUGxhdGZv
cm1DQUxheWVyKiBQbGF0Zm9ybUNBTGF5ZXI6Om1hc2soKSBjb25zdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENhY2hlQ2hyb21pdW1X
aW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENh
Y2hlQ2hyb21pdW1XaW4uY3BwCmluZGV4IDE1NmRjZDNkMTY4OTQxOGJiMDBkNzU1ZTM3NmJhZDMw
MWQwYjlhOGIuLjIzMGI3NWQ3NDY0NDdkODdjMGNjZDkxOGI0NDVkNmU5ZGVjM2Y3NzIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNo
ZUNocm9taXVtV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9Gb250Q2FjaGVDaHJvbWl1bVdpbi5jcHAKQEAgLTIyMywxMCArMjIzLDEwIEBAIHN0
YXRpYyBib29sIExvb2t1cEFsdE5hbWUoY29uc3QgU3RyaW5nJiBuYW1lLCBTdHJpbmcmIGFsdE5h
bWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHN0YXRpYyBpbnQgc3lzdGVtQ3AgPSA6
OkdldEFDUCgpOwotICAgIGludCBmb250Q3AgPSBpdGVyLT5zZWNvbmQtPmNvZGVQYWdlOworICAg
IGludCBmb250Q3AgPSBpdGVyLT52YWx1ZS0+Y29kZVBhZ2U7CiAKICAgICBpZiAoKGlzQXNjaWkg
JiYgc3lzdGVtQ3AgPT0gZm9udENwKSB8fCAoIWlzQXNjaWkgJiYgc3lzdGVtQ3AgIT0gZm9udENw
KSkgewotICAgICAgICBhbHROYW1lID0gU3RyaW5nKGl0ZXItPnNlY29uZC0+bmFtZSk7CisgICAg
ICAgIGFsdE5hbWUgPSBTdHJpbmcoaXRlci0+dmFsdWUtPm5hbWUpOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAKQEAgLTI3Nyw3ICsyNzcsNyBAQCBzdGF0aWMgYm9vbCBmb250Q29udGFp
bnNDaGFyYWN0ZXIoY29uc3QgRm9udFBsYXRmb3JtRGF0YSogZm9udERhdGEsCiAKICAgICBIYXNo
TWFwPGNvbnN0IHdjaGFyX3QqLCBpY3U6OlVuaWNvZGVTZXQqPjo6aXRlcmF0b3IgaXQgPSBmb250
Q21hcENhY2hlLT5maW5kKGZhbWlseSk7CiAgICAgaWYgKGl0ICE9IGZvbnRDbWFwQ2FjaGUtPmVu
ZCgpKQotICAgICAgICByZXR1cm4gaXQtPnNlY29uZC0+Y29udGFpbnMoY2hhcmFjdGVyKTsKKyAg
ICAgICAgcmV0dXJuIGl0LT52YWx1ZS0+Y29udGFpbnMoY2hhcmFjdGVyKTsKIAogICAgIEhGT05U
IGhmb250ID0gZm9udERhdGEtPmhmb250KCk7CiAgICAgSFduZERDIGhkYygwKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRVdGlsc0No
cm9taXVtV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ZvbnRVdGlsc0Nocm9taXVtV2luLmNwcAppbmRleCBjYzUyYzUyZWI3MDU3ODJkZTFmOTY4ZGM4
MDNjNDVlNGYyYWUyMjkyLi4yZmZhYmJiNzY4MmRlYThhMGUxZmM5ZmRhZWU5YzcxODA1YTQyYTA4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9G
b250VXRpbHNDaHJvbWl1bVdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vRm9udFV0aWxzQ2hyb21pdW1XaW4uY3BwCkBAIC00MTUsNyArNDE1LDcg
QEAgYm9vbCBnZXREZXJpdmVkRm9udERhdGEoY29uc3QgVUNoYXIqIGZhbWlseSwKICAgICAgICAg
Ly8gY2hlY2sgaXQgYWdhaW5zdCB3aGF0IHdlIGFjdHVhbGx5IHdhbnQgKGFzIGlzIGRvbmUgaW4K
ICAgICAgICAgLy8gRm9udENhY2hlV2luLmNwcCkKICAgICAgICAgRm9udERhdGFDYWNoZTo6QWRk
UmVzdWx0IGVudHJ5ID0gZm9udERhdGFDYWNoZS5hZGQoZm9udEtleSwgRm9udERhdGEoKSk7Ci0g
ICAgICAgIGRlcml2ZWQgPSAmZW50cnkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgZGVyaXZl
ZCA9ICZlbnRyeS5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgIGRlcml2ZWQtPmhmb250ID0gQ3Jl
YXRlRm9udEluZGlyZWN0KGxvZ2ZvbnQpOwogICAgICAgICAvLyBHZXRBc2NlbnQgbWF5IHJldHVy
biBrVW5kZWZpbmVkQXNjZW50LCBidXQgd2Ugc3RpbGwgd2FudCB0bwogICAgICAgICAvLyBjYWNo
ZSBpdCBzbyB0aGF0IHdlIHdvbid0IGhhdmUgdG8gY2FsbCBDcmVhdGVGb250SW5kaXJlY3Qgb25j
ZQpAQCAtNDIzLDcgKzQyMyw3IEBAIGJvb2wgZ2V0RGVyaXZlZEZvbnREYXRhKGNvbnN0IFVDaGFy
KiBmYW1pbHksCiAgICAgICAgIGRlcml2ZWQtPmFzY2VudCA9IGdldEFzY2VudChkZXJpdmVkLT5o
Zm9udCk7CiAgICAgICAgIGRlcml2ZWQtPnNwYWNlR2x5cGggPSBnZXRTcGFjZUdseXBoKGRlcml2
ZWQtPmhmb250KTsKICAgICB9IGVsc2UgewotICAgICAgICBkZXJpdmVkID0gJml0ZXItPnNlY29u
ZDsKKyAgICAgICAgZGVyaXZlZCA9ICZpdGVyLT52YWx1ZTsKICAgICAgICAgLy8gTGFzdCB0aW1l
LCBHZXRBc2NlbnQgZmFpbGVkIHNvIHRoYXQgb25seSBIRk9OVCB3YXMKICAgICAgICAgLy8gY2Fj
aGVkLiBUcnkgb25jZSBtb3JlIGFzc3VtaW5nIHRoYXQgVHJ5UHJlbG9hZEZvbnQKICAgICAgICAg
Ly8gd2FzIGNhbGxlZCBieSBhIGNhbGxlciBiZXR3ZWVuIGNhbGxzLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9t
aXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBo
aWNzTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggMWViMjM3YzRjNTYwYTI2OWRmNTE5ZTg1MzRiZTdh
NjJkNGI2NDE2ZS4uZGQ0Y2E3ZTMyOGE3ZWEwNjIyMjE3MTczZmIyMDY4MDQwM2I1YTQwYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhp
Y3NMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCkBAIC04NzcsNyArODc3LDcgQEAg
aW50IEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6bWFwQW5pbWF0aW9uTmFtZVRvSWQoY29uc3QgU3Ry
aW5nJiBhbmltYXRpb25OYW1lKQogICAgIGlmICghbV9hbmltYXRpb25JZE1hcC5jb250YWlucyhh
bmltYXRpb25OYW1lKSkKICAgICAgICAgbV9hbmltYXRpb25JZE1hcC5hZGQoYW5pbWF0aW9uTmFt
ZSwgQW5pbWF0aW9uSWRWZW5kb3I6OmdldE5leHRBbmltYXRpb25JZCgpKTsKIAotICAgIHJldHVy
biBtX2FuaW1hdGlvbklkTWFwLmZpbmQoYW5pbWF0aW9uTmFtZSktPnNlY29uZDsKKyAgICByZXR1
cm4gbV9hbmltYXRpb25JZE1hcC5maW5kKGFuaW1hdGlvbk5hbWUpLT52YWx1ZTsKIH0KIAogdm9p
ZCBHcmFwaGljc0xheWVyQ2hyb21pdW06Om5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoZG91YmxlIHN0
YXJ0VGltZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4IGM0ZjEz
OGFiNzFjNmJiYTUwMGE1ZGIwNzQ4Y2FlMzQxYTMzMTk4YTQuLmI1MWI0NWQ2ZmM0YTgzYmYyY2Y3
N2M2MmZkOTc2ZmI2YzhjMGE4ZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVt
LmNwcApAQCAtMzM0LDE1ICszMzQsMTUgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRl
Y2lkZVJlbmRlclBhc3NBbGxvY2F0aW9uc0ZvckZyYW1lKGNvbnN0IENDUmVuZGVyUGEKICAgICBW
ZWN0b3I8aW50PiBwYXNzZXNUb0RlbGV0ZTsKICAgICBIYXNoTWFwPGludCwgT3duUHRyPENhY2hl
ZFRleHR1cmU+ID46OmNvbnN0X2l0ZXJhdG9yIHBhc3NJdGVyYXRvcjsKICAgICBmb3IgKHBhc3NJ
dGVyYXRvciA9IG1fcmVuZGVyUGFzc1RleHR1cmVzLmJlZ2luKCk7IHBhc3NJdGVyYXRvciAhPSBt
X3JlbmRlclBhc3NUZXh0dXJlcy5lbmQoKTsgKytwYXNzSXRlcmF0b3IpIHsKLSAgICAgICAgY29u
c3QgQ0NSZW5kZXJQYXNzKiByZW5kZXJQYXNzSW5GcmFtZSA9IHJlbmRlclBhc3Nlc0luRnJhbWUu
Z2V0KHBhc3NJdGVyYXRvci0+Zmlyc3QpOworICAgICAgICBjb25zdCBDQ1JlbmRlclBhc3MqIHJl
bmRlclBhc3NJbkZyYW1lID0gcmVuZGVyUGFzc2VzSW5GcmFtZS5nZXQocGFzc0l0ZXJhdG9yLT5r
ZXkpOwogICAgICAgICBpZiAoIXJlbmRlclBhc3NJbkZyYW1lKSB7Ci0gICAgICAgICAgICBwYXNz
ZXNUb0RlbGV0ZS5hcHBlbmQocGFzc0l0ZXJhdG9yLT5maXJzdCk7CisgICAgICAgICAgICBwYXNz
ZXNUb0RlbGV0ZS5hcHBlbmQocGFzc0l0ZXJhdG9yLT5rZXkpOwogICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgIH0KIAogICAgICAgICBjb25zdCBJbnRTaXplJiByZXF1aXJlZFNpemUgPSBy
ZW5kZXJQYXNzVGV4dHVyZVNpemUocmVuZGVyUGFzc0luRnJhbWUpOwogICAgICAgICBHQzNEZW51
bSByZXF1aXJlZEZvcm1hdCA9IHJlbmRlclBhc3NUZXh0dXJlRm9ybWF0KHJlbmRlclBhc3NJbkZy
YW1lKTsKLSAgICAgICAgQ2FjaGVkVGV4dHVyZSogdGV4dHVyZSA9IHBhc3NJdGVyYXRvci0+c2Vj
b25kLmdldCgpOworICAgICAgICBDYWNoZWRUZXh0dXJlKiB0ZXh0dXJlID0gcGFzc0l0ZXJhdG9y
LT52YWx1ZS5nZXQoKTsKICAgICAgICAgQVNTRVJUKHRleHR1cmUpOwogCiAgICAgICAgIGlmICh0
ZXh0dXJlLT5pZCgpICYmICh0ZXh0dXJlLT5zaXplKCkgIT0gcmVxdWlyZWRTaXplIHx8IHRleHR1
cmUtPmZvcm1hdCgpICE9IHJlcXVpcmVkRm9ybWF0KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21p
dW0uY3BwCmluZGV4IDY4NzQwZWY1MDczNzM2MWIwZDFjNjNhMjg1OGU2ZDc1ZjYyZWRjMzQuLjMw
ZWRkYzY2MzNiNmYzMTRhOWU1NDQ0ZDYxNTYzOTU4MzNhYWUwYWUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRM
YXllckNocm9taXVtLmNwcApAQCAtMjEyLDkgKzIxMiw5IEBAIHZvaWQgVGlsZWRMYXllckNocm9t
aXVtOjpwdXNoUHJvcGVydGllc1RvKENDTGF5ZXJJbXBsKiBsYXllcikKICAgICBWZWN0b3I8VXBk
YXRhYmxlVGlsZSo+IGludmFsaWRUaWxlczsKIAogICAgIGZvciAoQ0NMYXllclRpbGluZ0RhdGE6
OlRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX3RpbGVyLT50aWxlcygpLmJlZ2luKCk7
IGl0ZXIgIT0gbV90aWxlci0+dGlsZXMoKS5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIGludCBp
ID0gaXRlci0+Zmlyc3QuZmlyc3Q7Ci0gICAgICAgIGludCBqID0gaXRlci0+Zmlyc3Quc2Vjb25k
OwotICAgICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gc3RhdGljX2Nhc3Q8VXBkYXRhYmxlVGls
ZSo+KGl0ZXItPnNlY29uZC5nZXQoKSk7CisgICAgICAgIGludCBpID0gaXRlci0+a2V5LmZpcnN0
OworICAgICAgICBpbnQgaiA9IGl0ZXItPmtleS5zZWNvbmQ7CisgICAgICAgIFVwZGF0YWJsZVRp
bGUqIHRpbGUgPSBzdGF0aWNfY2FzdDxVcGRhdGFibGVUaWxlKj4oaXRlci0+dmFsdWUuZ2V0KCkp
OwogICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgbm90IGV2ZXIgYmUgbnVsbC4KICAgICAg
ICAgaWYgKCF0aWxlKQogICAgICAgICAgICAgY29udGludWU7CkBAIC0yNDQsNyArMjQ0LDcgQEAg
dm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnNldExheWVyVHJlZUhvc3QoQ0NMYXllclRyZWVIb3N0
KiBob3N0KQogewogICAgIGlmIChob3N0ICYmIGhvc3QgIT0gbGF5ZXJUcmVlSG9zdCgpKSB7CiAg
ICAgICAgIGZvciAoQ0NMYXllclRpbGluZ0RhdGE6OlRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ZXIgPSBtX3RpbGVyLT50aWxlcygpLmJlZ2luKCk7IGl0ZXIgIT0gbV90aWxlci0+dGlsZXMoKS5l
bmQoKTsgKytpdGVyKSB7Ci0gICAgICAgICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gc3RhdGlj
X2Nhc3Q8VXBkYXRhYmxlVGlsZSo+KGl0ZXItPnNlY29uZC5nZXQoKSk7CisgICAgICAgICAgICBV
cGRhdGFibGVUaWxlKiB0aWxlID0gc3RhdGljX2Nhc3Q8VXBkYXRhYmxlVGlsZSo+KGl0ZXItPnZh
bHVlLmdldCgpKTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBub3QgZXZlciBi
ZSBudWxsLgogICAgICAgICAgICAgaWYgKCF0aWxlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwpAQCAtMzEyLDcgKzMxMiw3IEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjppbnZhbGlkYXRl
Q29udGVudFJlY3QoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCiAgICAgICAgIHJldHVybjsK
IAogICAgIGZvciAoQ0NMYXllclRpbGluZ0RhdGE6OlRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ZXIgPSBtX3RpbGVyLT50aWxlcygpLmJlZ2luKCk7IGl0ZXIgIT0gbV90aWxlci0+dGlsZXMoKS5l
bmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIFVwZGF0YWJsZVRpbGUqIHRpbGUgPSBzdGF0aWNfY2Fz
dDxVcGRhdGFibGVUaWxlKj4oaXRlci0+c2Vjb25kLmdldCgpKTsKKyAgICAgICAgVXBkYXRhYmxl
VGlsZSogdGlsZSA9IHN0YXRpY19jYXN0PFVwZGF0YWJsZVRpbGUqPihpdGVyLT52YWx1ZS5nZXQo
KSk7CiAgICAgICAgIEFTU0VSVCh0aWxlKTsKICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxk
IG5vdCBldmVyIGJlIG51bGwuCiAgICAgICAgIGlmICghdGlsZSkKQEAgLTU3NCw3ICs1NzQsNyBA
QCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6c2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3QoY29u
c3QgQ0NQcmlvcml0eUNhbGN1bGF0b3ImCiAKICAgICAvLyBOb3cgc2V0IHByaW9yaXRpZXMgb24g
YWxsIHRpbGVzLgogICAgIGZvciAoQ0NMYXllclRpbGluZ0RhdGE6OlRpbGVNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ZXIgPSBtX3RpbGVyLT50aWxlcygpLmJlZ2luKCk7IGl0ZXIgIT0gbV90aWxlci0+
dGlsZXMoKS5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIFVwZGF0YWJsZVRpbGUqIHRpbGUgPSBz
dGF0aWNfY2FzdDxVcGRhdGFibGVUaWxlKj4oaXRlci0+c2Vjb25kLmdldCgpKTsKKyAgICAgICAg
VXBkYXRhYmxlVGlsZSogdGlsZSA9IHN0YXRpY19jYXN0PFVwZGF0YWJsZVRpbGUqPihpdGVyLT52
YWx1ZS5nZXQoKSk7CiAgICAgICAgIEludFJlY3QgdGlsZVJlY3QgPSBtX3RpbGVyLT50aWxlUmVj
dCh0aWxlKTsKICAgICAgICAgLy8gRklYTUU6IFRoaXMgaW5kaWNhdGVzIHRoZSAic21hbGwgYW5p
bWF0ZWQgbGF5ZXIiIGNhc2UuIFRoaXMgc3BlY2lhbCBjYXNlCiAgICAgICAgIC8vIGNhbiBiZSBy
ZW1vdmVkIHNvb24gd2l0aCBiZXR0ZXIgcHJpb3JpdGllcywgYnV0IGZvciBub3cgcGFpbnQgdGhl
c2UgbGF5ZXJzIGFmdGVyCkBAIC02MDAsNyArNjAwLDcgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21p
dW06OnJlc2V0VXBkYXRlU3RhdGUoKQogewogICAgIENDTGF5ZXJUaWxpbmdEYXRhOjpUaWxlTWFw
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3RpbGVyLT50aWxlcygpLmVuZCgpOwogICAgIGZvciAo
Q0NMYXllclRpbGluZ0RhdGE6OlRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX3RpbGVy
LT50aWxlcygpLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKLSAgICAgICAgVXBkYXRh
YmxlVGlsZSogdGlsZSA9IHN0YXRpY19jYXN0PFVwZGF0YWJsZVRpbGUqPihpdGVyLT5zZWNvbmQu
Z2V0KCkpOworICAgICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gc3RhdGljX2Nhc3Q8VXBkYXRh
YmxlVGlsZSo+KGl0ZXItPnZhbHVlLmdldCgpKTsKICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hv
dWxkIG5vdCBldmVyIGJlIG51bGwuCiAgICAgICAgIGlmICghdGlsZSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NEYW1hZ2VUcmFja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDRGFtYWdlVHJhY2tlci5jcHAKaW5kZXggNWQ1ODU1YzA3ZDk0
Njg3YjJhYjhiNTMzNmI1NmVhYzZmYmY3N2E0OC4uMjM3NjA1YmVjOWZmODhjMDBmMGJjZmM4Nzk4
YTQyM2M2YzAxYzlmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NEYW1hZ2VUcmFja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RhbWFnZVRyYWNrZXIuY3BwCkBAIC0yMzMs
NyArMjMzLDcgQEAgRmxvYXRSZWN0IENDRGFtYWdlVHJhY2tlcjo6dHJhY2tEYW1hZ2VGcm9tTGVm
dG92ZXJSZWN0cygpCiAgICAgRmxvYXRSZWN0IGRhbWFnZVJlY3QgPSBGbG9hdFJlY3QoKTsKIAog
ICAgIGZvciAoUmVjdE1hcDo6aXRlcmF0b3IgaXQgPSBtX2N1cnJlbnRSZWN0SGlzdG9yeS0+YmVn
aW4oKTsgaXQgIT0gbV9jdXJyZW50UmVjdEhpc3RvcnktPmVuZCgpOyArK2l0KQotICAgICAgICBk
YW1hZ2VSZWN0LnVuaXRlKGl0LT5zZWNvbmQpOworICAgICAgICBkYW1hZ2VSZWN0LnVuaXRlKGl0
LT52YWx1ZSk7CiAKICAgICBtX2N1cnJlbnRSZWN0SGlzdG9yeS0+Y2xlYXIoKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRpbGluZ0RhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRpbGluZ0RhdGEuY3BwCmluZGV4IDQ5ZDIzMzY2YzkyN2RkNzcxMTQyZjc4
MjM4MGRjMTVkYjhhOWIwNDIuLjBjZGFmMTc2YTRhODg4MTZlZGQyMTAzYzNlZWRmNGFkMWU4N2Y2
YjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUaWxpbmdEYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVGlsaW5nRGF0YS5jcHAKQEAgLTE0NCw4ICsxNDQs
OCBAQCB2b2lkIENDTGF5ZXJUaWxpbmdEYXRhOjpzZXRCb3VuZHMoY29uc3QgSW50U2l6ZSYgc2l6
ZSkKICAgICBjb250ZW50UmVjdFRvVGlsZUluZGljZXMoSW50UmVjdChJbnRQb2ludCgpLCBzaXpl
KSwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKICAgICBWZWN0b3I8VGlsZU1hcEtleT4gaW52
YWxpZFRpbGVLZXlzOwogICAgIGZvciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Rp
bGVzLmJlZ2luKCk7IGl0ICE9IG1fdGlsZXMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0
LT5maXJzdC5maXJzdCA+IHJpZ2h0IHx8IGl0LT5maXJzdC5zZWNvbmQgPiBib3R0b20pCi0gICAg
ICAgICAgICBpbnZhbGlkVGlsZUtleXMuYXBwZW5kKGl0LT5maXJzdCk7CisgICAgICAgIGlmIChp
dC0+a2V5LmZpcnN0ID4gcmlnaHQgfHwgaXQtPmtleS5zZWNvbmQgPiBib3R0b20pCisgICAgICAg
ICAgICBpbnZhbGlkVGlsZUtleXMuYXBwZW5kKGl0LT5rZXkpOwogICAgIH0KICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGludmFsaWRUaWxlS2V5cy5zaXplKCk7ICsraSkKICAgICAgICAgbV90
aWxlcy5yZW1vdmUoaW52YWxpZFRpbGVLZXlzW2ldKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3QuY3BwCmluZGV4IGZmOTdjZjNjNDZlMmJiYjFiOTIwMDQ0MzI2YzUwMjdmYzY4NzE2NTQuLmFm
MWJkYjQyY2EyMzJlZDE4ZjkzODNiZDEwOWFiNjc2ZWI2ODkzZWEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0LmNwcApAQCAtMTIwLDcgKzEyMCw3IEBAIENDTGF5ZXJUcmVlSG9zdDo6fkND
TGF5ZXJUcmVlSG9zdCgpCiAgICAgbnVtTGF5ZXJUcmVlSW5zdGFuY2VzLS07CiAgICAgUmF0ZUxp
bWl0ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yYXRlTGltaXRlcnMuYmVnaW4oKTsKICAgICBpZiAo
aXQgIT0gbV9yYXRlTGltaXRlcnMuZW5kKCkpCi0gICAgICAgIGl0LT5zZWNvbmQtPnN0b3AoKTsK
KyAgICAgICAgaXQtPnZhbHVlLT5zdG9wKCk7CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0Ojpz
ZXRTdXJmYWNlUmVhZHkoKQpAQCAtNjU2LDcgKzY1Niw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0
OjpzdGFydFJhdGVMaW1pdGVyKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQp
CiAgICAgQVNTRVJUKGNvbnRleHQpOwogICAgIFJhdGVMaW1pdGVyTWFwOjppdGVyYXRvciBpdCA9
IG1fcmF0ZUxpbWl0ZXJzLmZpbmQoY29udGV4dCk7CiAgICAgaWYgKGl0ICE9IG1fcmF0ZUxpbWl0
ZXJzLmVuZCgpKQotICAgICAgICBpdC0+c2Vjb25kLT5zdGFydCgpOworICAgICAgICBpdC0+dmFs
dWUtPnN0YXJ0KCk7CiAgICAgZWxzZSB7CiAgICAgICAgIFJlZlB0cjxSYXRlTGltaXRlcj4gcmF0
ZUxpbWl0ZXIgPSBSYXRlTGltaXRlcjo6Y3JlYXRlKGNvbnRleHQsIHRoaXMpOwogICAgICAgICBt
X3JhdGVMaW1pdGVycy5zZXQoY29udGV4dCwgcmF0ZUxpbWl0ZXIpOwpAQCAtNjY4LDcgKzY2OCw3
IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpzdG9wUmF0ZUxpbWl0ZXIoV2ViS2l0OjpXZWJHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dCkKIHsKICAgICBSYXRlTGltaXRlck1hcDo6aXRlcmF0b3Ig
aXQgPSBtX3JhdGVMaW1pdGVycy5maW5kKGNvbnRleHQpOwogICAgIGlmIChpdCAhPSBtX3JhdGVM
aW1pdGVycy5lbmQoKSkgewotICAgICAgICBpdC0+c2Vjb25kLT5zdG9wKCk7CisgICAgICAgIGl0
LT52YWx1ZS0+c3RvcCgpOwogICAgICAgICBtX3JhdGVMaW1pdGVycy5yZW1vdmUoaXQpOwogICAg
IH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKaW5kZXggNDkzZjM1
YTI3OTU1NDRkMDQzZDRkZDRmZTE5N2ZhOGIxMWU0ODBjYS4uMTA2NTZhYzEyZTk0ZmYxYWZkNTY0
Nzk4OTI0ZDA4YjQ1NDFlMmRlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1w
bC5jcHAKQEAgLTQwMyw3ICs0MDMsNyBAQCBzdGF0aWMgaW5saW5lIENDUmVuZGVyUGFzcyogZmlu
ZFJlbmRlclBhc3NCeUlkKGludCByZW5kZXJQYXNzSWQsIGNvbnN0IENDTGF5ZXJUcgogewogICAg
IENDUmVuZGVyUGFzc0lkSGFzaE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBmcmFtZS5yZW5kZXJQ
YXNzZXNCeUlkLmZpbmQocmVuZGVyUGFzc0lkKTsKICAgICBBU1NFUlQoaXQgIT0gZnJhbWUucmVu
ZGVyUGFzc2VzQnlJZC5lbmQoKSk7Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQuZ2V0KCk7CisgICAg
cmV0dXJuIGl0LT52YWx1ZS5nZXQoKTsKIH0KIAogc3RhdGljIHZvaWQgcmVtb3ZlUmVuZGVyUGFz
c2VzUmVjdXJzaXZlKGludCByZW1vdmVSZW5kZXJQYXNzSWQsIENDTGF5ZXJUcmVlSG9zdEltcGw6
OkZyYW1lRGF0YSYgZnJhbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Jlc291cmNlUHJvdmlkZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZXNvdXJjZVByb3ZpZGVyLmNwcApp
bmRleCA0OWMzYjI0M2Y1MTM0MDVjYzdmOGNkNDQ1OTFlMTBhYmFlZWU2MTY1Li5iOTRjNjZhZmZi
MmQzODU5YWM1NDVhMTk4NTExY2YxY2M5NjUwMTY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Jlc291cmNlUHJvdmlkZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVzb3Vy
Y2VQcm92aWRlci5jcHAKQEAgLTgzLDcgKzgzLDcgQEAgYm9vbCBDQ1Jlc291cmNlUHJvdmlkZXI6
OmluVXNlQnlDb25zdW1lcihSZXNvdXJjZUlkIGlkKQogICAgIEFTU0VSVChDQ1Byb3h5Ojppc0lt
cGxUaHJlYWQoKSk7CiAgICAgUmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMu
ZmluZChpZCk7CiAgICAgQVNTRVJUKGl0ICE9IG1fcmVzb3VyY2VzLmVuZCgpKTsKLSAgICByZXR1
cm4gISFpdC0+c2Vjb25kLmxvY2tGb3JSZWFkQ291bnQ7CisgICAgcmV0dXJuICEhaXQtPnZhbHVl
LmxvY2tGb3JSZWFkQ291bnQ7CiB9CiAKIENDUmVzb3VyY2VQcm92aWRlcjo6UmVzb3VyY2VJZCBD
Q1Jlc291cmNlUHJvdmlkZXI6OmNyZWF0ZVJlc291cmNlKGludCBwb29sLCBjb25zdCBJbnRTaXpl
JiBzaXplLCBHQzNEZW51bSBmb3JtYXQsIFRleHR1cmVVc2FnZUhpbnQgaGludCkKQEAgLTEzMyw5
ICsxMzMsOSBAQCB2b2lkIENDUmVzb3VyY2VQcm92aWRlcjo6ZGVsZXRlUmVzb3VyY2UoUmVzb3Vy
Y2VJZCBpZCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBSZXNvdXJjZU1hcDo6aXRlcmF0
b3IgaXQgPSBtX3Jlc291cmNlcy5maW5kKGlkKTsKLSAgICBBU1NFUlQoaXQgIT0gbV9yZXNvdXJj
ZXMuZW5kKCkgJiYgIWl0LT5zZWNvbmQubG9ja2VkRm9yV3JpdGUgJiYgIWl0LT5zZWNvbmQubG9j
a0ZvclJlYWRDb3VudCk7Ci0gICAgaWYgKCFpdC0+c2Vjb25kLmV4dGVybmFsKQotICAgICAgICBH
TEMoY29udGV4dDNkLCBjb250ZXh0M2QtPmRlbGV0ZVRleHR1cmUoaXQtPnNlY29uZC5nbElkKSk7
CisgICAgQVNTRVJUKGl0ICE9IG1fcmVzb3VyY2VzLmVuZCgpICYmICFpdC0+dmFsdWUubG9ja2Vk
Rm9yV3JpdGUgJiYgIWl0LT52YWx1ZS5sb2NrRm9yUmVhZENvdW50KTsKKyAgICBpZiAoIWl0LT52
YWx1ZS5leHRlcm5hbCkKKyAgICAgICAgR0xDKGNvbnRleHQzZCwgY29udGV4dDNkLT5kZWxldGVU
ZXh0dXJlKGl0LT52YWx1ZS5nbElkKSk7CiAgICAgbV9yZXNvdXJjZXMucmVtb3ZlKGl0KTsKIH0K
IApAQCAtMTQ0LDggKzE0NCw4IEBAIHZvaWQgQ0NSZXNvdXJjZVByb3ZpZGVyOjpkZWxldGVPd25l
ZFJlc291cmNlcyhpbnQgcG9vbCkKICAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkp
OwogICAgIFZlY3RvcjxSZXNvdXJjZUlkPiB0b0RlbGV0ZTsKICAgICBmb3IgKFJlc291cmNlTWFw
OjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IG1fcmVzb3VyY2VzLmVu
ZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kLnBvb2wgPT0gcG9vbCAmJiAhaXQt
PnNlY29uZC5leHRlcm5hbCkKLSAgICAgICAgICAgIHRvRGVsZXRlLmFwcGVuZChpdC0+Zmlyc3Qp
OworICAgICAgICBpZiAoaXQtPnZhbHVlLnBvb2wgPT0gcG9vbCAmJiAhaXQtPnZhbHVlLmV4dGVy
bmFsKQorICAgICAgICAgICAgdG9EZWxldGUuYXBwZW5kKGl0LT5rZXkpOwogICAgIH0KICAgICBm
b3IgKFZlY3RvcjxSZXNvdXJjZUlkPjo6aXRlcmF0b3IgaXQgPSB0b0RlbGV0ZS5iZWdpbigpOyBp
dCAhPSB0b0RlbGV0ZS5lbmQoKTsgKytpdCkKICAgICAgICAgZGVsZXRlUmVzb3VyY2UoKml0KTsK
QEAgLTE2MSwyNyArMTYxLDI3IEBAIHZvaWQgQ0NSZXNvdXJjZVByb3ZpZGVyOjp1cGxvYWQoUmVz
b3VyY2VJZCBpZCwgY29uc3QgdWludDhfdCogaW1hZ2UsIGNvbnN0IEludFJlCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgUmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMu
ZmluZChpZCk7Ci0gICAgQVNTRVJUKGl0ICE9IG1fcmVzb3VyY2VzLmVuZCgpICYmICFpdC0+c2Vj
b25kLmxvY2tlZEZvcldyaXRlICYmICFpdC0+c2Vjb25kLmxvY2tGb3JSZWFkQ291bnQgJiYgIWl0
LT5zZWNvbmQuZXh0ZXJuYWwpOworICAgIEFTU0VSVChpdCAhPSBtX3Jlc291cmNlcy5lbmQoKSAm
JiAhaXQtPnZhbHVlLmxvY2tlZEZvcldyaXRlICYmICFpdC0+dmFsdWUubG9ja0ZvclJlYWRDb3Vu
dCAmJiAhaXQtPnZhbHVlLmV4dGVybmFsKTsKIAotICAgIGNvbnRleHQzZC0+YmluZFRleHR1cmUo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGl0LT5zZWNvbmQuZ2xJZCk7Ci0gICAgbV90
ZXhTdWJJbWFnZS0+dXBsb2FkKGltYWdlLCBpbWFnZVJlY3QsIHNvdXJjZVJlY3QsIGRlc3RSZWN0
LCBpdC0+c2Vjb25kLmZvcm1hdCwgY29udGV4dDNkKTsKKyAgICBjb250ZXh0M2QtPmJpbmRUZXh0
dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBpdC0+dmFsdWUuZ2xJZCk7CisgICAg
bV90ZXhTdWJJbWFnZS0+dXBsb2FkKGltYWdlLCBpbWFnZVJlY3QsIHNvdXJjZVJlY3QsIGRlc3RS
ZWN0LCBpdC0+dmFsdWUuZm9ybWF0LCBjb250ZXh0M2QpOwogfQogCiB1bnNpZ25lZCBDQ1Jlc291
cmNlUHJvdmlkZXI6OmxvY2tGb3JXcml0ZShSZXNvdXJjZUlkIGlkKQogewogICAgIEFTU0VSVChD
Q1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CiAgICAgUmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGl0ID0g
bV9yZXNvdXJjZXMuZmluZChpZCk7Ci0gICAgQVNTRVJUKGl0ICE9IG1fcmVzb3VyY2VzLmVuZCgp
ICYmICFpdC0+c2Vjb25kLmxvY2tlZEZvcldyaXRlICYmICFpdC0+c2Vjb25kLmxvY2tGb3JSZWFk
Q291bnQgJiYgIWl0LT5zZWNvbmQuZXh0ZXJuYWwpOwotICAgIGl0LT5zZWNvbmQubG9ja2VkRm9y
V3JpdGUgPSB0cnVlOwotICAgIHJldHVybiBpdC0+c2Vjb25kLmdsSWQ7CisgICAgQVNTRVJUKGl0
ICE9IG1fcmVzb3VyY2VzLmVuZCgpICYmICFpdC0+dmFsdWUubG9ja2VkRm9yV3JpdGUgJiYgIWl0
LT52YWx1ZS5sb2NrRm9yUmVhZENvdW50ICYmICFpdC0+dmFsdWUuZXh0ZXJuYWwpOworICAgIGl0
LT52YWx1ZS5sb2NrZWRGb3JXcml0ZSA9IHRydWU7CisgICAgcmV0dXJuIGl0LT52YWx1ZS5nbElk
OwogfQogCiB2b2lkIENDUmVzb3VyY2VQcm92aWRlcjo6dW5sb2NrRm9yV3JpdGUoUmVzb3VyY2VJ
ZCBpZCkKIHsKICAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwogICAgIFJlc291
cmNlTWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmZpbmQoaWQpOwotICAgIEFTU0VSVChp
dCAhPSBtX3Jlc291cmNlcy5lbmQoKSAmJiBpdC0+c2Vjb25kLmxvY2tlZEZvcldyaXRlICYmICFp
dC0+c2Vjb25kLmV4dGVybmFsKTsKLSAgICBpdC0+c2Vjb25kLmxvY2tlZEZvcldyaXRlID0gZmFs
c2U7CisgICAgQVNTRVJUKGl0ICE9IG1fcmVzb3VyY2VzLmVuZCgpICYmIGl0LT52YWx1ZS5sb2Nr
ZWRGb3JXcml0ZSAmJiAhaXQtPnZhbHVlLmV4dGVybmFsKTsKKyAgICBpdC0+dmFsdWUubG9ja2Vk
Rm9yV3JpdGUgPSBmYWxzZTsKIH0KIAogdm9pZCBDQ1Jlc291cmNlUHJvdmlkZXI6OmZsdXNoKCkK
QEAgLTIxMywxNyArMjEzLDE3IEBAIHVuc2lnbmVkIENDUmVzb3VyY2VQcm92aWRlcjo6bG9ja0Zv
clJlYWQoUmVzb3VyY2VJZCBpZCkKIHsKICAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFk
KCkpOwogICAgIFJlc291cmNlTWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmZpbmQoaWQp
OwotICAgIEFTU0VSVChpdCAhPSBtX3Jlc291cmNlcy5lbmQoKSAmJiAhaXQtPnNlY29uZC5sb2Nr
ZWRGb3JXcml0ZSk7Ci0gICAgKysoaXQtPnNlY29uZC5sb2NrRm9yUmVhZENvdW50KTsKLSAgICBy
ZXR1cm4gaXQtPnNlY29uZC5nbElkOworICAgIEFTU0VSVChpdCAhPSBtX3Jlc291cmNlcy5lbmQo
KSAmJiAhaXQtPnZhbHVlLmxvY2tlZEZvcldyaXRlKTsKKyAgICArKyhpdC0+dmFsdWUubG9ja0Zv
clJlYWRDb3VudCk7CisgICAgcmV0dXJuIGl0LT52YWx1ZS5nbElkOwogfQogCiB2b2lkIENDUmVz
b3VyY2VQcm92aWRlcjo6dW5sb2NrRm9yUmVhZChSZXNvdXJjZUlkIGlkKQogewogICAgIEFTU0VS
VChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CiAgICAgUmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGl0
ID0gbV9yZXNvdXJjZXMuZmluZChpZCk7Ci0gICAgQVNTRVJUKGl0ICE9IG1fcmVzb3VyY2VzLmVu
ZCgpICYmIGl0LT5zZWNvbmQubG9ja0ZvclJlYWRDb3VudCA+IDApOwotICAgIC0tKGl0LT5zZWNv
bmQubG9ja0ZvclJlYWRDb3VudCk7CisgICAgQVNTRVJUKGl0ICE9IG1fcmVzb3VyY2VzLmVuZCgp
ICYmIGl0LT52YWx1ZS5sb2NrRm9yUmVhZENvdW50ID4gMCk7CisgICAgLS0oaXQtPnZhbHVlLmxv
Y2tGb3JSZWFkQ291bnQpOwogfQogCiBDQ1Jlc291cmNlUHJvdmlkZXI6OkNDUmVzb3VyY2VQcm92
aWRlcihDQ0dyYXBoaWNzQ29udGV4dCogY29udGV4dCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyUHJvZ3JhbS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclByb2dy
YW0uY3BwCmluZGV4IDYwY2ZmMjJlNzVhNGYyMzYxOTllNWQ0NzBiMDM5NDBiODE5ZjJiMzguLjJi
ZTU1N2Y4ZTcwODY4NmNjM2MxNmIzZWVmZTE3ODZmYTdjNGViMWEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyUHJvZ3JhbS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21G
aWx0ZXJQcm9ncmFtLmNwcApAQCAtNzcsNyArNzcsNyBAQCB2b2lkIEN1c3RvbUZpbHRlclByb2dy
YW06OnJlbW92ZUNsaWVudChDdXN0b21GaWx0ZXJQcm9ncmFtQ2xpZW50KiBjbGllbnQpCiB2b2lk
IEN1c3RvbUZpbHRlclByb2dyYW06Om5vdGlmeUNsaWVudHMoKQogewogICAgIGZvciAoQ3VzdG9t
RmlsdGVyUHJvZ3JhbUNsaWVudExpc3Q6Oml0ZXJhdG9yIGl0ZXIgPSBtX2NsaWVudHMuYmVnaW4o
KSwgZW5kID0gbV9jbGllbnRzLmVuZCgpOyBpdGVyICE9IGVuZDsgKytpdGVyKQotICAgICAgICBp
dGVyLT5maXJzdC0+bm90aWZ5Q3VzdG9tRmlsdGVyUHJvZ3JhbUxvYWRlZCh0aGlzKTsKKyAgICAg
ICAgaXRlci0+a2V5LT5ub3RpZnlDdXN0b21GaWx0ZXJQcm9ncmFtTG9hZGVkKHRoaXMpOwogfQog
CiAjaWYgVVNFKDNEX0dSQVBISUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTa2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2tpYS5jcHAKaW5kZXggZjY4ZWE2MTky
NDVmODY2ZTViZDBkNTc4ZDAxMDQ4NDQ1MjU4NGMyYi4uMWU4ODY3YmI3NTdmMjI0MmU4ZjQ5NjJm
ODc1YjFiZGY3YWU5OTEyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTa2lhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNraWEuY3BwCkBAIC0yNDQsMTggKzI0NCwx
OCBAQCBzdGF0aWMgSEJfRmFjZVJlY18qIGdldENhY2hlZEhhcmZidXp6RmFjZShGb250UGxhdGZv
cm1EYXRhKiBwbGF0Zm9ybURhdGEpCiAgICAgICAgIGdIYXJmYnV6ekZhY2VDYWNoZS0+c2V0KHVu
aXF1ZUlELCBlbnRyeSk7CiAgICAgICAgIHJldHVybiBlbnRyeS5maXJzdDsKICAgICB9Ci0gICAg
KysocmVzdWx0LmdldCgpLT5zZWNvbmQuc2Vjb25kKTsKLSAgICByZXR1cm4gcmVzdWx0LmdldCgp
LT5zZWNvbmQuZmlyc3Q7CisgICAgKysocmVzdWx0LmdldCgpLT52YWx1ZS5zZWNvbmQpOworICAg
IHJldHVybiByZXN1bHQuZ2V0KCktPnZhbHVlLmZpcnN0OwogfQogCiBzdGF0aWMgdm9pZCByZWxl
YXNlQ2FjaGVkSGFyZmJ1enpGYWNlKFNrRm9udElEIHVuaXF1ZUlEKQogewogICAgIEhhcmZidXp6
RmFjZUNhY2hlOjppdGVyYXRvciByZXN1bHQgPSBnSGFyZmJ1enpGYWNlQ2FjaGUtPmZpbmQodW5p
cXVlSUQpOwogICAgIEFTU0VSVChyZXN1bHQgIT0gZ0hhcmZidXp6RmFjZUNhY2hlLT5lbmQoKSk7
Ci0gICAgQVNTRVJUKHJlc3VsdC5nZXQoKS0+c2Vjb25kLnNlY29uZCA+IDApOwotICAgIC0tKHJl
c3VsdC5nZXQoKS0+c2Vjb25kLnNlY29uZCk7Ci0gICAgaWYgKCEocmVzdWx0LmdldCgpLT5zZWNv
bmQuc2Vjb25kKSkgewotICAgICAgICBIQl9GcmVlRmFjZShyZXN1bHQuZ2V0KCktPnNlY29uZC5m
aXJzdCk7CisgICAgQVNTRVJUKHJlc3VsdC5nZXQoKS0+dmFsdWUuc2Vjb25kID4gMCk7CisgICAg
LS0ocmVzdWx0LmdldCgpLT52YWx1ZS5zZWNvbmQpOworICAgIGlmICghKHJlc3VsdC5nZXQoKS0+
dmFsdWUuc2Vjb25kKSkgeworICAgICAgICBIQl9GcmVlRmFjZShyZXN1bHQuZ2V0KCktPnZhbHVl
LmZpcnN0KTsKICAgICAgICAgZ0hhcmZidXp6RmFjZUNhY2hlLT5yZW1vdmUodW5pcXVlSUQpOwog
ICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hh
cmZidXp6L25nL0hhcmZCdXp6TkdGYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6TkdGYWNlLmNwcAppbmRleCA3ZGQwNDhiM2I0M2Zm
NTkzODhlYWY0ZTcyMTBlZTJjY2JkNTU0MjIzLi42MDQ3NTliOGNiZGVkM2M4Yjg0MWRjNjY4Nzdl
M2RlYTM0NjFmNzY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9oYXJmYnV6ei9uZy9IYXJmQnV6ek5HRmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpOR0ZhY2UuY3BwCkBAIC02MCw4ICs2
MCw4IEBAIEhhcmZCdXp6TkdGYWNlOjpIYXJmQnV6ek5HRmFjZShGb250UGxhdGZvcm1EYXRhKiBw
bGF0Zm9ybURhdGEsIHVpbnQ2NF90IHVuaXF1ZUlECiAgICAgICAgIEFTU0VSVChtX2ZhY2UpOwog
ICAgICAgICBoYXJmYnV6ekZhY2VDYWNoZSgpLT5zZXQobV91bmlxdWVJRCwgRmFjZUNhY2hlRW50
cnkobV9mYWNlLCAxKSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgKysocmVzdWx0LmdldCgpLT5z
ZWNvbmQuc2Vjb25kKTsKLSAgICAgICAgbV9mYWNlID0gcmVzdWx0LmdldCgpLT5zZWNvbmQuZmly
c3Q7CisgICAgICAgICsrKHJlc3VsdC5nZXQoKS0+dmFsdWUuc2Vjb25kKTsKKyAgICAgICAgbV9m
YWNlID0gcmVzdWx0LmdldCgpLT52YWx1ZS5maXJzdDsKICAgICB9CiB9CiAKQEAgLTY5LDEwICs2
OSwxMCBAQCBIYXJmQnV6ek5HRmFjZTo6fkhhcmZCdXp6TkdGYWNlKCkKIHsKICAgICBIYXJmQnV6
ek5HRmFjZUNhY2hlOjppdGVyYXRvciByZXN1bHQgPSBoYXJmYnV6ekZhY2VDYWNoZSgpLT5maW5k
KG1fdW5pcXVlSUQpOwogICAgIEFTU0VSVChyZXN1bHQgIT0gaGFyZmJ1enpGYWNlQ2FjaGUoKS0+
ZW5kKCkpOwotICAgIEFTU0VSVChyZXN1bHQuZ2V0KCktPnNlY29uZC5zZWNvbmQgPiAwKTsKLSAg
ICAtLShyZXN1bHQuZ2V0KCktPnNlY29uZC5zZWNvbmQpOwotICAgIGlmICghKHJlc3VsdC5nZXQo
KS0+c2Vjb25kLnNlY29uZCkpIHsKLSAgICAgICAgaGJfZmFjZV9kZXN0cm95KHJlc3VsdC5nZXQo
KS0+c2Vjb25kLmZpcnN0KTsKKyAgICBBU1NFUlQocmVzdWx0LmdldCgpLT52YWx1ZS5zZWNvbmQg
PiAwKTsKKyAgICAtLShyZXN1bHQuZ2V0KCktPnZhbHVlLnNlY29uZCk7CisgICAgaWYgKCEocmVz
dWx0LmdldCgpLT52YWx1ZS5zZWNvbmQpKSB7CisgICAgICAgIGhiX2ZhY2VfZGVzdHJveShyZXN1
bHQuZ2V0KCktPnZhbHVlLmZpcnN0KTsKICAgICAgICAgaGFyZmJ1enpGYWNlQ2FjaGUoKS0+cmVt
b3ZlKG1fdW5pcXVlSUQpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YUNvcmVUZXh0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YUNvcmVUZXh0LmNwcApp
bmRleCAwNTE5Mzc0MmM1ODUyZGJlOWM5Y2VkNjRiOWEwN2FhZDJjMWVhNDc3Li4wYjcxMzM0N2Y2
MDQ2MzU1NDllNTBkNTYzNjUyMThiMjM0NDI2YWNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFDb3JlVGV4dC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhQ29yZVRl
eHQuY3BwCkBAIC00Myw3ICs0Myw3IEBAIENGRGljdGlvbmFyeVJlZiBTaW1wbGVGb250RGF0YTo6
Z2V0Q0ZTdHJpbmdBdHRyaWJ1dGVzKFR5cGVzZXR0aW5nRmVhdHVyZXMgdHlwZXNlCiB7CiAgICAg
dW5zaWduZWQga2V5ID0gdHlwZXNldHRpbmdGZWF0dXJlcyArIDE7CiAgICAgSGFzaE1hcDx1bnNp
Z25lZCwgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gPjo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9
IG1fQ0ZTdHJpbmdBdHRyaWJ1dGVzLmFkZChrZXksIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+
KCkpOwotICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+JiBhdHRyaWJ1dGVzRGljdGlvbmFy
eSA9IGFkZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgIFJldGFpblB0cjxDRkRpY3Rpb25h
cnlSZWY+JiBhdHRyaWJ1dGVzRGljdGlvbmFyeSA9IGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7
CiAgICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSkKICAgICAgICAgcmV0dXJuIGF0dHJpYnV0
ZXNEaWN0aW9uYXJ5LmdldCgpOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhTWFjLm1tIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhTWFjLm1tCmluZGV4IDU4N2I5ZGQ4
MTc5ZDBiMzU3NTYzODZhMDYxYTMzYjExMTJhMzhkZmIuLmMwODQ5YzBiMWY2YTc3NmEwNjY0MzBh
MDY5NjYyZjVlMjhhOGYzNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL21hYy9TaW1wbGVGb250RGF0YU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW0KQEAgLTQ2MSw3ICs0NjEsNyBA
QCBib29sIFNpbXBsZUZvbnREYXRhOjpjYW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5j
ZShjb25zdCBVQ2hhciogY2hhcmFjdGVycwogCiAgICAgV1RGOjpIYXNoTWFwPFN0cmluZywgYm9v
bD46OkFkZFJlc3VsdCBhZGRSZXN1bHQgPSBtX2NvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlU3Vw
cG9ydC0+YWRkKFN0cmluZyhjaGFyYWN0ZXJzLCBsZW5ndGgpLCBmYWxzZSk7CiAgICAgaWYgKCFh
ZGRSZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgcmV0dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+
c2Vjb25kOworICAgICAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIAogICAg
IFJldGFpblB0cjxDR0ZvbnRSZWY+IGNnRm9udChBZG9wdENGLCBDVEZvbnRDb3B5R3JhcGhpY3NG
b250KHBsYXRmb3JtRGF0YSgpLmN0Rm9udCgpLCAwKSk7CiAKQEAgLTQ4MSw3ICs0ODEsNyBAQCBi
b29sIFNpbXBsZUZvbnREYXRhOjpjYW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShj
b25zdCBVQ2hhciogY2hhcmFjdGVycwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
IAotICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gdHJ1ZTsKKyAgICBhZGRSZXN1bHQu
aXRlcmF0b3ItPnZhbHVlID0gdHJ1ZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9w
ZW5HTENvbW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
RXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcAppbmRleCA1YTYyODgxMGRmZDEyNzY3MDYwZWEw
ZjRlNjIxODAyYzY5YTNhOGViLi43ZTE2NGY4OGM2YTQ3ZjUzYjIwOWIyMTg2OTBmY2JlZDg3ZWNi
ZGM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
RXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcApAQCAtMTE3LDcg
KzExNyw3IEBAIFN0cmluZyBFeHRlbnNpb25zM0RPcGVuR0xDb21tb246OmdldFRyYW5zbGF0ZWRT
aGFkZXJTb3VyY2VBTkdMRShQbGF0Zm9ybTNET2JqZWN0CiAgICAgaWYgKHJlc3VsdCA9PSBtX2Nv
bnRleHQtPm1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQogICAgICAgICByZXR1cm4gIiI7CiAKLSAg
ICBHcmFwaGljc0NvbnRleHQzRDo6U2hhZGVyU291cmNlRW50cnkmIGVudHJ5ID0gcmVzdWx0LT5z
ZWNvbmQ7CisgICAgR3JhcGhpY3NDb250ZXh0M0Q6OlNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9
IHJlc3VsdC0+dmFsdWU7CiAKICAgICBTdHJpbmcgdHJhbnNsYXRlZFNoYWRlclNvdXJjZTsKICAg
ICBTdHJpbmcgc2hhZGVySW5mb0xvZzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RP
cGVuR0xDb21tb24uY3BwCmluZGV4IDIyNTYyODI0OGMyOTgzNjFkNmI3OWJlNWI0YWE0Yzc5YzE0
MTIxMmQuLmZkZTIyMGI1MGE2MTA3ZWM4NThkMDA3YjMxNGUwYTc2YmVlZTRmNTIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRl
eHQzRE9wZW5HTENvbW1vbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcApAQCAtNDgwLDcgKzQ4
MCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvbXBpbGVTaGFkZXIoUGxhdGZvcm0zRE9i
amVjdCBzaGFkZXIpCiAKICAgICBpZiAobGVuZ3RoKSB7CiAgICAgICAgIEhhc2hNYXA8UGxhdGZv
cm0zRE9iamVjdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlNoYWRlclNvdXJjZUVudHJ5Pjo6aXRlcmF0
b3IgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOwotICAgICAgICBHcmFw
aGljc0NvbnRleHQzRDo6U2hhZGVyU291cmNlRW50cnkmIGVudHJ5ID0gcmVzdWx0LT5zZWNvbmQ7
CisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEOjpTaGFkZXJTb3VyY2VFbnRyeSYgZW50cnkgPSBy
ZXN1bHQtPnZhbHVlOwogCiAgICAgICAgIEdMc2l6ZWkgc2l6ZSA9IDA7CiAgICAgICAgIE93bkFy
cmF5UHRyPEdMY2hhcj4gaW5mbyA9IGFkb3B0QXJyYXlQdHIobmV3IEdMY2hhcltsZW5ndGhdKTsK
QEAgLTExNTIsNyArMTE1Miw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlcml2
KFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyLCBHQzNEZW51bSBwbmFtZSwgR0MzCiAgICAgICAgICAg
ICAqdmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ+KGZhbHNlKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQotICAgICAgICAqdmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ+KHJlc3VsdC0+c2Vj
b25kLmlzVmFsaWQpOworICAgICAgICAqdmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ+KHJlc3VsdC0+
dmFsdWUuaXNWYWxpZCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSU5GT19MT0dfTEVOR1RI
OgogICAgICAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKSB7CkBAIC0x
MTc5LDcgKzExNzksNyBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlckluZm9M
b2coUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCiAgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNv
dXJjZU1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOyAKIAotICAgIFNoYWRlclNv
dXJjZUVudHJ5IGVudHJ5ID0gcmVzdWx0LT5zZWNvbmQ7CisgICAgU2hhZGVyU291cmNlRW50cnkg
ZW50cnkgPSByZXN1bHQtPnZhbHVlOwogICAgIGlmICghZW50cnkuaXNWYWxpZCkKICAgICAgICAg
cmV0dXJuIGVudHJ5LmxvZzsKIApAQCAtMTIwNSw3ICsxMjA1LDcgQEAgU3RyaW5nIEdyYXBoaWNz
Q29udGV4dDNEOjpnZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCiAgICAg
aWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuIFN0
cmluZygpOyAKIAotICAgIHJldHVybiByZXN1bHQtPnNlY29uZC5zb3VyY2U7CisgICAgcmV0dXJu
IHJlc3VsdC0+dmFsdWUuc291cmNlOwogfQogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW52Zy9FR0xEaXNwbGF5T3BlblZHLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW52Zy9FR0xEaXNwbGF5T3BlblZHLmNwcAppbmRl
eCBkNjgxZDc1ODFmYjNmYmYyOWQ4OGUxMjZlNTM4Mzg3ODIzMGI1MjIwLi4xYTY4YWVmZjhjYzhj
OWY1NDc2YjRmMDUzNTY2MjBmZTE5MTQxYzRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvRUdMRGlzcGxheU9wZW5WRy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL0VHTERpc3BsYXlPcGVuVkcuY3BwCkBA
IC0xMjEsNyArMTIxLDcgQEAgRUdMRGlzcGxheU9wZW5WRzo6fkVHTERpc3BsYXlPcGVuVkcoKQog
CiAgICAgSGFzaE1hcDxFR0xTdXJmYWNlLCBFR0xpbnQ+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBt
X3N1cmZhY2VDb25maWdJZHMuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPEVHTFN1cmZhY2UsIEVH
TGludD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zdXJmYWNlQ29uZmlnSWRzLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkKLSAgICAgICAgZGVzdHJveVN1cmZhY2UoKCppdCkuZmlyc3QpOworICAg
ICAgICBkZXN0cm95U3VyZmFjZSgoKml0KS5rZXkpOwogCiAgICAgZWdsVGVybWluYXRlKG1fZGlz
cGxheSk7CiAgICAgQVNTRVJUX0VHTF9OT19FUlJPUigpOwpAQCAtMzM4LDcgKzMzOCw3IEBAIHZv
aWQgRUdMRGlzcGxheU9wZW5WRzo6ZGVzdHJveVN1cmZhY2UoY29uc3QgRUdMU3VyZmFjZSYgc3Vy
ZmFjZSkKIAogICAgICAgICAvLyAuLi5idXQgb25seSBpZiB0aGVyZSdzIG5vIG90aGVyIHN1cmZh
Y2VzIGFzc29jaWF0ZWQgdG8gdGhhdCBjb250ZXh0LgogICAgICAgICBmb3IgKEhhc2hNYXA8RUdM
U3VyZmFjZSwgRUdMaW50Pjo6aXRlcmF0b3IgaXQgPSBtX3N1cmZhY2VDb25maWdJZHMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAoKCppdCkuc2Vjb25kID09IHN1
cmZhY2VDb25maWdJZCkgeworICAgICAgICAgICAgaWYgKCgqaXQpLnZhbHVlID09IHN1cmZhY2VD
b25maWdJZCkgewogICAgICAgICAgICAgICAgIGlzQ29udGV4dFJlZmVyZW5jZWQgPSB0cnVlOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtMzU0LDcgKzM1NCw3IEBA
IHZvaWQgRUdMRGlzcGxheU9wZW5WRzo6ZGVzdHJveVN1cmZhY2UoY29uc3QgRUdMU3VyZmFjZSYg
c3VyZmFjZSkKIAogICAgIEhhc2hNYXA8RUdMTmF0aXZlV2luZG93VHlwZSwgRUdMU3VyZmFjZT46
Oml0ZXJhdG9yIGVuZCA9IG1fd2luZG93U3VyZmFjZXMuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFw
PEVHTE5hdGl2ZVdpbmRvd1R5cGUsIEVHTFN1cmZhY2U+OjppdGVyYXRvciBpdCA9IG1fd2luZG93
U3VyZmFjZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmICgoKml0KS5z
ZWNvbmQgPT0gc3VyZmFjZSkgeworICAgICAgICBpZiAoKCppdCkudmFsdWUgPT0gc3VyZmFjZSkg
ewogICAgICAgICAgICAgbV93aW5kb3dTdXJmYWNlcy5yZW1vdmUoaXQpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KQEAgLTQwOSw3ICs0MDksNyBAQCBFR0xDb250ZXh0IEVHTERpc3Bs
YXlPcGVuVkc6OmNvbnRleHRGb3JTdXJmYWNlKGNvbnN0IEVHTFN1cmZhY2UmIHN1cmZhY2UpCiAg
ICAgSGFzaE1hcDxFR0xpbnQsIEVHTENvbnRleHQ+OjppdGVyYXRvciBlbmQgPSBtX2NvbnRleHRz
LmVuZCgpOwogCiAgICAgZm9yIChIYXNoTWFwPEVHTGludCwgRUdMQ29udGV4dD46Oml0ZXJhdG9y
IGl0ID0gbV9jb250ZXh0cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgZWds
TWFrZUN1cnJlbnQobV9kaXNwbGF5LCBzdXJmYWNlLCBzdXJmYWNlLCAoKml0KS5zZWNvbmQpOwor
ICAgICAgICBlZ2xNYWtlQ3VycmVudChtX2Rpc3BsYXksIHN1cmZhY2UsIHN1cmZhY2UsICgqaXQp
LnZhbHVlKTsKICAgICAgICAgaWYgKGVnbEdldEVycm9yKCkgPT0gRUdMX1NVQ0NFU1MpIHsKICAg
ICAgICAgICAgIC8vIFJlc3RvcmUgcHJldmlvdXMgc3VyZmFjZS9jb250ZXh0LgogICAgICAgICAg
ICAgaWYgKGN1cnJlbnRDb250ZXh0ICE9IEVHTF9OT19DT05URVhUKSB7CkBAIC00MTcsOCArNDE3
LDggQEAgRUdMQ29udGV4dCBFR0xEaXNwbGF5T3BlblZHOjpjb250ZXh0Rm9yU3VyZmFjZShjb25z
dCBFR0xTdXJmYWNlJiBzdXJmYWNlKQogICAgICAgICAgICAgICAgIEFTU0VSVF9FR0xfTk9fRVJS
T1IoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8vIENvb2wsIHN1cmZhY2UgaXMgY29t
cGF0aWJsZSB0byBvbmUgb2Ygb3VyIGV4aXN0aW5nIGNvbnRleHRzLgotICAgICAgICAgICAgbV9j
b21wYXRpYmxlQ29uZmlnSWRzLnNldChzdXJmYWNlQ29uZmlnSWQsICgqaXQpLmZpcnN0KTsKLSAg
ICAgICAgICAgIHJldHVybiAoKml0KS5zZWNvbmQ7CisgICAgICAgICAgICBtX2NvbXBhdGlibGVD
b25maWdJZHMuc2V0KHN1cmZhY2VDb25maWdJZCwgKCppdCkua2V5KTsKKyAgICAgICAgICAgIHJl
dHVybiAoKml0KS52YWx1ZTsKICAgICAgICAgfQogICAgIH0KICAgICAvLyBSZXN0b3JlIHByZXZp
b3VzIHN1cmZhY2UvY29udGV4dC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKaW5kZXggODY3MDRiYzE1
YzVhYzEzMjFlYTExNmI2Mjc5YWE3Y2MxYTcyMzdmMS4uMzZmMDJmNDI1NTI5MWQzYjIxZGVjYWRl
OWViNmIwMTMyZjViYWIxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKQEAgLTExNyw3ICsxMTcs
NyBAQCBzdHJ1Y3QgVGV4dHVyZU1hcHBlckdMRGF0YSB7CiAgICAgICAgICAgICBHTENvbnRleHQg
Y3VycmVudEdMQ29uZXh0ID0gZ2V0Q3VycmVudEdMQ29udGV4dCgpOwogICAgICAgICAgICAgR0xD
b250ZXh0RGF0YU1hcDo6aXRlcmF0b3IgaXQgPSBnbENvbnRleHREYXRhTWFwKCkuZmluZChjdXJy
ZW50R0xDb25leHQpOwogICAgICAgICAgICAgaWYgKGl0ICE9IGdsQ29udGV4dERhdGFNYXAoKS5l
bmQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gaXQtPnZhbHVlOwogCiAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNo
YXJlZEdMRGF0YShnZXRDdXJyZW50R0xDb250ZXh0KCkpKTsKICAgICAgICAgfQpAQCAtMTM2LDcg
KzEzNiw3IEBAIHN0cnVjdCBUZXh0dXJlTWFwcGVyR0xEYXRhIHsKICAgICAgICAgICAgIEdMQ29u
dGV4dERhdGFNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGdsQ29udGV4dERhdGFNYXAoKS5lbmQo
KTsKICAgICAgICAgICAgIEdMQ29udGV4dERhdGFNYXA6Oml0ZXJhdG9yIGl0OwogICAgICAgICAg
ICAgZm9yIChpdCA9IGdsQ29udGV4dERhdGFNYXAoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKLSAgICAgICAgICAgICAgICBpZiAoaXQtPnNlY29uZCA9PSB0aGlzKQorICAgICAgICAgICAg
ICAgIGlmIChpdC0+dmFsdWUgPT0gdGhpcykKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3Bw
CmluZGV4IDBmYmRiZTk1Y2FmMTY0NzBkZDA2MzJmMDRjMTQ0YjgyMGI2ZThiYjMuLjQ2NDlmNGI2
MmQ4ZTE5YWEzYzUzYmFhYzlmNzUyMmNmMTM5ZjMyMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJTaGFkZXJNYW5hZ2VyLmNwcApAQCAtMjA4LDcgKzIwOCw3IEBAIFBhc3NSZWZQdHI8VGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpnZXRT
aGFkZXJQcm9nCiAKICAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU1hcDo6aXRlcmF0b3Ig
aXQgPSBtX3RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtTWFwLmZpbmQoc2hhZGVyVHlwZSk7CiAg
ICAgaWYgKGl0ICE9IG1fdGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1NYXAuZW5kKCkpCi0gICAg
ICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwogCiAgICAg
c3dpdGNoIChzaGFkZXJUeXBlKSB7CiAgICAgY2FzZSBTaW1wbGU6CkBAIC03NjUsNyArNzY1LDcg
QEAgUGFzc1JlZlB0cjxTdGFuZGFyZEZpbHRlclByb2dyYW0+IFRleHR1cmVNYXBwZXJTaGFkZXJN
YW5hZ2VyOjpnZXRTaGFkZXJGb3JGaWx0ZXIKIAogICAgICAgICBtX2ZpbHRlck1hcC5hZGQoa2V5
LCBwcm9ncmFtKTsKICAgICB9IGVsc2UKLSAgICAgICAgcHJvZ3JhbSA9IGl0ZXJhdG9yLT5zZWNv
bmQ7CisgICAgICAgIHByb2dyYW0gPSBpdGVyYXRvci0+dmFsdWU7CiAKICAgICByZXR1cm4gcHJv
Z3JhbTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bmNlL0ZvbnRQbGF0Zm9ybURhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luY2UvRm9udFBsYXRmb3JtRGF0YS5jcHAKaW5kZXggMTk3OTBhZDQ5YjMzMDNkZDdiNjJj
N2U3YTBhODIzNjc3YjRjZmY1MS4uMTlmNTI0NTVkMTFiMzU0Y2M0ZDQzZTY4Mzk5Y2U3OWFjOTli
YzBiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2Uv
Rm9udFBsYXRmb3JtRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luY2UvRm9udFBsYXRmb3JtRGF0YS5jcHAKQEAgLTI4Nyw5ICsyODcsOSBAQCBzdGF0aWMg
UGFzc1JlZlB0cjxGaXhlZFNpemVGb250RGF0YT4gY3JlYXRlRml4ZWRTaXplRm9udERhdGEoY29u
c3QgQXRvbWljU3RyaW5nJgogICAgIEZpeGVkU2l6ZUZvbnREYXRhS2V5IGtleShmYW1pbHksIHdl
aWdodCwgaXRhbGljKTsKICAgICBGaXhlZFNpemVGb250Q2FjaGU6OkFkZFJlc3VsdCByZXN1bHQg
PSBnX2ZpeGVkU2l6ZUZvbnRDYWNoZS5hZGQoa2V5LCBSZWZQdHI8Rml4ZWRTaXplRm9udERhdGE+
KCkpOwogICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9y
LT5zZWNvbmQgPSBGaXhlZFNpemVGb250RGF0YTo6Y3JlYXRlKGZhbWlseSwgd2VpZ2h0LCBpdGFs
aWMpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gRml4ZWRTaXplRm9udERhdGE6
OmNyZWF0ZShmYW1pbHksIHdlaWdodCwgaXRhbGljKTsKIAotICAgIHJldHVybiByZXN1bHQuaXRl
cmF0b3ItPnNlY29uZDsKKyAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIAog
c3RhdGljIExPTkcgdG9HRElGb250V2VpZ2h0KEZvbnRXZWlnaHQgZm9udFdlaWdodCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmNwcAppbmRleCAxYTg0Zjhi
ZDMxOTUyYjI4ZTI2ODI3MWRkMmE1ZjU3ZjQ0ZDgyN2Q3Li5hZGZjNjZlMDE1ZTUwMjI2Nzg4YzIx
NDc2OGExNWIyOTEzNjg0M2I4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvRGF0YU9iamVjdEd0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0Rh
dGFPYmplY3RHdGsuY3BwCkBAIC0xNzEsNyArMTcxLDcgQEAgRGF0YU9iamVjdEd0ayogRGF0YU9i
amVjdEd0azo6Zm9yQ2xpcGJvYXJkKEd0a0NsaXBib2FyZCogY2xpcGJvYXJkKQogICAgIH0KIAog
ICAgIEhhc2hNYXA8R3RrQ2xpcGJvYXJkKiwgUmVmUHRyPERhdGFPYmplY3RHdGs+ID46Oml0ZXJh
dG9yIGl0ID0gb2JqZWN0TWFwLmZpbmQoY2xpcGJvYXJkKTsKLSAgICByZXR1cm4gaXQtPnNlY29u
ZC5nZXQoKTsKKyAgICByZXR1cm4gaXQtPnZhbHVlLmdldCgpOwogfQogCiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrRHJhZ0FuZERyb3BIZWxwZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0RyYWdBbmREcm9wSGVscGVyLmNwcAppbmRl
eCA3NjNkMTIwZDA5NDE2MjI3MjY2MGM2MDYzMmExOTI5ODZmNTQyZWE0Li5mYzJmNTZlNjE2NmVi
MWFhY2RiYWRhOGY1MmZlZjNjNmRkODg2NGNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvR3RrRHJhZ0FuZERyb3BIZWxwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9HdGtEcmFnQW5kRHJvcEhlbHBlci5jcHAKQEAgLTcwLDcgKzcwLDcgQEAg
dm9pZCBHdGtEcmFnQW5kRHJvcEhlbHBlcjo6aGFuZGxlR2V0RHJhZ0RhdGEoR2RrRHJhZ0NvbnRl
eHQqIGNvbnRleHQsIEd0a1NlbGVjdGkKICAgICBEcmFnZ2luZ0RhdGFPYmplY3RzTWFwOjppdGVy
YXRvciBpdGVyYXRvciA9IG1fZHJhZ2dpbmdEYXRhT2JqZWN0cy5maW5kKGNvbnRleHQpOwogICAg
IGlmIChpdGVyYXRvciA9PSBtX2RyYWdnaW5nRGF0YU9iamVjdHMuZW5kKCkpCiAgICAgICAgIHJl
dHVybjsKLSAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT5m
aWxsU2VsZWN0aW9uRGF0YShzZWxlY3Rpb25EYXRhLCBpbmZvLCBpdGVyYXRvci0+c2Vjb25kLmdl
dCgpKTsKKyAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT5m
aWxsU2VsZWN0aW9uRGF0YShzZWxlY3Rpb25EYXRhLCBpbmZvLCBpdGVyYXRvci0+dmFsdWUuZ2V0
KCkpOwogfQogCiBzdHJ1Y3QgSGFuZGxlRHJhZ0xhdGVyRGF0YSB7CkBAIC0xMTYsNyArMTE2LDcg
QEAgdm9pZCBHdGtEcmFnQW5kRHJvcEhlbHBlcjo6aGFuZGxlRHJhZ0xlYXZlKEdka0RyYWdDb250
ZXh0KiBnZGtDb250ZXh0LCBEcmFnRXhpdGUKICAgICAvLyB0aGUgZHJhZy1kcm9wIHNpZ25hbC4g
V2Ugd2FudCB0aGUgYWN0aW9ucyBmb3IgZHJhZy1sZWF2ZSB0byBoYXBwZW4gYWZ0ZXIKICAgICAv
LyB0aG9zZSBmb3IgZHJhZy1kcm9wLCBzbyBzY2hlZHVsZSB0aGVtIHRvIGhhcHBlbiBhc3luY2hy
b25vdXNseSBoZXJlLgogICAgIEhhbmRsZURyYWdMYXRlckRhdGEqIGRhdGEgPSBuZXcgSGFuZGxl
RHJhZ0xhdGVyRGF0YTsKLSAgICBkYXRhLT5jb250ZXh0ID0gaXRlcmF0b3ItPnNlY29uZDsKKyAg
ICBkYXRhLT5jb250ZXh0ID0gaXRlcmF0b3ItPnZhbHVlOwogICAgIGRhdGEtPmNvbnRleHQtPmV4
aXRlZENhbGxiYWNrID0gZXhpdGVkQ2FsbGJhY2s7CiAgICAgZGF0YS0+Z2x1ZSA9IHRoaXM7CiAg
ICAgZ190aW1lb3V0X2FkZCgwLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihoYW5kbGVE
cmFnTGVhdmVMYXRlckNhbGxiYWNrKSwgZGF0YSk7CkBAIC0xNDAsNyArMTQwLDcgQEAgUGFzc093
blB0cjxEcmFnRGF0YT4gR3RrRHJhZ0FuZERyb3BIZWxwZXI6OmhhbmRsZURyYWdNb3Rpb24oR2Rr
RHJhZ0NvbnRleHQqIGNvbnQKICAgICAgICAgbV9kcm9wcGluZ0NvbnRleHRzLnNldChjb250ZXh0
LCBkcm9wcGluZ0NvbnRleHQpOwogICAgICAgICBxdWVyeU5ld0Ryb3BDb250ZXh0RGF0YShkcm9w
cGluZ0NvbnRleHQsIG1fd2lkZ2V0LCB0aW1lKTsKICAgICB9IGVsc2UgewotICAgICAgICBkcm9w
cGluZ0NvbnRleHQgPSBpdGVyYXRvci0+c2Vjb25kOworICAgICAgICBkcm9wcGluZ0NvbnRleHQg
PSBpdGVyYXRvci0+dmFsdWU7CiAgICAgICAgIGRyb3BwaW5nQ29udGV4dC0+bGFzdE1vdGlvblBv
c2l0aW9uID0gcG9zaXRpb247CiAgICAgfQogCkBAIC0xNjIsNyArMTYyLDcgQEAgUGFzc093blB0
cjxEcmFnRGF0YT4gR3RrRHJhZ0FuZERyb3BIZWxwZXI6OmhhbmRsZURyYWdEYXRhUmVjZWl2ZWQo
R2RrRHJhZ0NvbnRleHQKICAgICBpZiAoaXRlcmF0b3IgPT0gbV9kcm9wcGluZ0NvbnRleHRzLmVu
ZCgpKQogICAgICAgICByZXR1cm4gYWRvcHRQdHIoc3RhdGljX2Nhc3Q8RHJhZ0RhdGEqPigwKSk7
CiAKLSAgICBEcm9wcGluZ0NvbnRleHQqIGRyb3BwaW5nQ29udGV4dCA9IGl0ZXJhdG9yLT5zZWNv
bmQ7CisgICAgRHJvcHBpbmdDb250ZXh0KiBkcm9wcGluZ0NvbnRleHQgPSBpdGVyYXRvci0+dmFs
dWU7CiAgICAgZHJvcHBpbmdDb250ZXh0LT5wZW5kaW5nRGF0YVJlcXVlc3RzLS07CiAgICAgUGFz
dGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+ZmlsbERhdGFPYmplY3RG
cm9tRHJvcERhdGEoc2VsZWN0aW9uRGF0YSwgaW5mbywgZHJvcHBpbmdDb250ZXh0LT5kYXRhT2Jq
ZWN0LmdldCgpKTsKIApAQCAtMTg1LDcgKzE4NSw3IEBAIFBhc3NPd25QdHI8RHJhZ0RhdGE+IEd0
a0RyYWdBbmREcm9wSGVscGVyOjpoYW5kbGVEcmFnRHJvcChHZGtEcmFnQ29udGV4dCogY29udGV4
CiAgICAgaWYgKGl0ZXJhdG9yID09IG1fZHJvcHBpbmdDb250ZXh0cy5lbmQoKSkKICAgICAgICAg
cmV0dXJuIGFkb3B0UHRyKHN0YXRpY19jYXN0PERyYWdEYXRhKj4oMCkpOwogCi0gICAgRHJvcHBp
bmdDb250ZXh0KiBkcm9wcGluZ0NvbnRleHQgPSBpdGVyYXRvci0+c2Vjb25kOworICAgIERyb3Bw
aW5nQ29udGV4dCogZHJvcHBpbmdDb250ZXh0ID0gaXRlcmF0b3ItPnZhbHVlOwogICAgIGRyb3Bw
aW5nQ29udGV4dC0+ZHJvcEhhcHBlbmVkID0gdHJ1ZTsKIAogICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgRHJhZ0RhdGEoZHJvcHBpbmdDb250ZXh0LT5kYXRhT2JqZWN0LmdldCgpLCBwb3NpdGlvbiwg
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsz
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0azMuY3BwCmlu
ZGV4IDc3NDkzOTE1MTcxM2RmMDExMzRkNmNlYTRlZDlkNzA0YjRkY2ZjMGIuLjBhODM4MjdjN2Zl
YmNiZTQwNTQ4ZmFkNTYyYjU0MTE3MWVjMTY5ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0azMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0azMuY3BwCkBAIC01Niw3ICs1Niw3IEBAIHN0YXRpYyB2
b2lkIGd0a1N0eWxlQ2hhbmdlZENhbGxiYWNrKEdPYmplY3QqLCBHUGFyYW1TcGVjKikKIHsKICAg
ICBTdHlsZUNvbnRleHRNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHN0eWxlQ29udGV4dE1hcCgp
LmVuZCgpOwogICAgIGZvciAoU3R5bGVDb250ZXh0TWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0g
c3R5bGVDb250ZXh0TWFwKCkuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikKLSAgICAgICAg
Z3RrX3N0eWxlX2NvbnRleHRfaW52YWxpZGF0ZShpdGVyLT5zZWNvbmQuZ2V0KCkpOworICAgICAg
ICBndGtfc3R5bGVfY29udGV4dF9pbnZhbGlkYXRlKGl0ZXItPnZhbHVlLmdldCgpKTsKIAogICAg
IFBhZ2U6OnNjaGVkdWxlRm9yY2VkU3R5bGVSZWNhbGNGb3JBbGxQYWdlcygpOwogfQpAQCAtNzks
NyArNzksNyBAQCBzdGF0aWMgR3RrU3R5bGVDb250ZXh0KiBnZXRTdHlsZUNvbnRleHQoR1R5cGUg
d2lkZ2V0VHlwZSkKIHsKICAgICBTdHlsZUNvbnRleHRNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBz
dHlsZUNvbnRleHRNYXAoKS5hZGQod2lkZ2V0VHlwZSwgMCk7CiAgICAgaWYgKCFyZXN1bHQuaXNO
ZXdFbnRyeSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLmdldCgpOwor
ICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKIAogICAgIEd0a1dp
ZGdldFBhdGgqIHBhdGggPSBndGtfd2lkZ2V0X3BhdGhfbmV3KCk7CiAgICAgZ3RrX3dpZGdldF9w
YXRoX2FwcGVuZF90eXBlKHBhdGgsIHdpZGdldFR5cGUpOwpAQCAtMTExLDcgKzExMSw3IEBAIHN0
YXRpYyBHdGtTdHlsZUNvbnRleHQqIGdldFN0eWxlQ29udGV4dChHVHlwZSB3aWRnZXRUeXBlKQog
ICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9wYXRoKGNvbnRleHQuZ2V0KCksIHBhdGgpOwogICAg
IGd0a193aWRnZXRfcGF0aF9mcmVlKHBhdGgpOwogCi0gICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNv
bmQgPSBjb250ZXh0OworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBjb250ZXh0OwogICAg
IHJldHVybiBjb250ZXh0LmdldCgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMubW0KaW5kZXggMzIzNzE5YmQ2YTE2MjlmNjUwYjI1ZTMy
MGI2MjVmYjYzZjk1ODYyNC4uMzcxYmRkOWNjNzVhN2Q5NDk3NmIyMjgzNzgwN2U5MTA5YWE5NDFm
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbGJhclRoZW1l
TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxiYXJUaGVtZU1h
Yy5tbQpAQCAtODYsOCArODYsOCBAQCBzdGF0aWMgU2Nyb2xsYmFyUGFpbnRlck1hcCogc2Nyb2xs
YmFyTWFwKCkKICAgICAgICAgcmV0dXJuOwogICAgIFNjcm9sbGJhclBhaW50ZXJNYXA6Oml0ZXJh
dG9yIGVuZCA9IHNjcm9sbGJhck1hcCgpLT5lbmQoKTsKICAgICBmb3IgKFNjcm9sbGJhclBhaW50
ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gc2Nyb2xsYmFyTWFwKCktPmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgewotICAgICAgICBpdC0+Zmlyc3QtPnN0eWxlQ2hhbmdlZCgpOwotICAgICAgICBpdC0+
Zmlyc3QtPmludmFsaWRhdGUoKTsKKyAgICAgICAgaXQtPmtleS0+c3R5bGVDaGFuZ2VkKCk7Cisg
ICAgICAgIGl0LT5rZXktPmludmFsaWRhdGUoKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbFN0b3JhZ2UuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFsU3RvcmFnZS5jcHAKaW5kZXgg
ZjYyNGQ0ZmNiMjkyY2M0MGM1YjY5ZWVkZjNlNWM4NzUxNTJmMDFmOS4uOGI1YWM0NzhiMjEzNTA2
Y2Q5Y2VhY2E5YmE1ODUxYmNkMjkzYTVjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9DcmVkZW50aWFsU3RvcmFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFsU3RvcmFnZS5jcHAKQEAgLTE0Nyw3ICsxNDcsNyBA
QCBib29sIENyZWRlbnRpYWxTdG9yYWdlOjpzZXQoY29uc3QgQ3JlZGVudGlhbCYgY3JlZGVudGlh
bCwgY29uc3QgS1VSTCYgdXJsKQogICAgIGlmIChpdGVyID09IHBhdGhUb0RlZmF1bHRQcm90ZWN0
aW9uU3BhY2VNYXAoKS5lbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEFTU0VSVChv
cmlnaW5zV2l0aENyZWRlbnRpYWxzKCkuY29udGFpbnMob3JpZ2luU3RyaW5nRnJvbVVSTCh1cmwp
KSk7Ci0gICAgcHJvdGVjdGlvblNwYWNlVG9DcmVkZW50aWFsTWFwKCkuc2V0KGl0ZXItPnNlY29u
ZCwgY3JlZGVudGlhbCk7CisgICAgcHJvdGVjdGlvblNwYWNlVG9DcmVkZW50aWFsTWFwKCkuc2V0
KGl0ZXItPnZhbHVlLCBjcmVkZW50aWFsKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTU2
LDcgKzE1Niw3IEBAIENyZWRlbnRpYWwgQ3JlZGVudGlhbFN0b3JhZ2U6OmdldChjb25zdCBLVVJM
JiB1cmwpCiAgICAgUGF0aFRvRGVmYXVsdFByb3RlY3Rpb25TcGFjZU1hcDo6aXRlcmF0b3IgaXRl
ciA9IGZpbmREZWZhdWx0UHJvdGVjdGlvblNwYWNlRm9yVVJMKHVybCk7CiAgICAgaWYgKGl0ZXIg
PT0gcGF0aFRvRGVmYXVsdFByb3RlY3Rpb25TcGFjZU1hcCgpLmVuZCgpKQogICAgICAgICByZXR1
cm4gQ3JlZGVudGlhbCgpOwotICAgIHJldHVybiBwcm90ZWN0aW9uU3BhY2VUb0NyZWRlbnRpYWxN
YXAoKS5nZXQoaXRlci0+c2Vjb25kKTsKKyAgICByZXR1cm4gcHJvdGVjdGlvblNwYWNlVG9DcmVk
ZW50aWFsTWFwKCkuZ2V0KGl0ZXItPnZhbHVlKTsKIH0KIAogdm9pZCBDcmVkZW50aWFsU3RvcmFn
ZTo6c2V0UHJpdmF0ZU1vZGUoYm9vbCBtb2RlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9IVFRQSGVhZGVyTWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvSFRUUEhlYWRlck1hcC5jcHAKaW5kZXggNTAwOTFlMTlkM2FmNTZmZjRhOGRm
MTc1YmY4OTc4NzAwNzYxNDI4MC4uZGVmZTFhZTg0YmYwYWRmMDc3OTQ5NTViMTFhNWRjNzNlYTAy
M2UyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQSGVh
ZGVyTWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBIZWFk
ZXJNYXAuY3BwCkBAIC01Miw3ICs1Miw3IEBAIFBhc3NPd25QdHI8Q3Jvc3NUaHJlYWRIVFRQSGVh
ZGVyTWFwRGF0YT4gSFRUUEhlYWRlck1hcDo6Y29weURhdGEoKSBjb25zdAogCiAgICAgSFRUUEhl
YWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kX2l0ID0gZW5kKCk7CiAgICAgZm9yIChIVFRQSGVh
ZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGJlZ2luKCk7IGl0ICE9IGVuZF9pdDsgKytpdCkg
ewotICAgICAgICBkYXRhLT5hcHBlbmQobWFrZV9wYWlyKGl0LT5maXJzdC5zdHJpbmcoKS5pc29s
YXRlZENvcHkoKSwgaXQtPnNlY29uZC5pc29sYXRlZENvcHkoKSkpOworICAgICAgICBkYXRhLT5h
cHBlbmQobWFrZV9wYWlyKGl0LT5rZXkuc3RyaW5nKCkuaXNvbGF0ZWRDb3B5KCksIGl0LT52YWx1
ZS5pc29sYXRlZENvcHkoKSkpOwogICAgIH0KICAgICByZXR1cm4gZGF0YS5yZWxlYXNlKCk7CiB9
CkBAIC0xMDAsNyArMTAwLDcgQEAgU3RyaW5nIEhUVFBIZWFkZXJNYXA6OmdldChjb25zdCBjaGFy
KiBuYW1lKSBjb25zdAogICAgIGNvbnN0X2l0ZXJhdG9yIGkgPSBmaW5kPGNvbnN0IGNoYXIqLCBD
YXNlRm9sZGluZ0NTdHJpbmdUcmFuc2xhdG9yPihuYW1lKTsKICAgICBpZiAoaSA9PSBlbmQoKSkK
ICAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIHJldHVybiBpLT5zZWNvbmQ7CisgICAgcmV0
dXJuIGktPnZhbHVlOwogfQogICAgIAogYm9vbCBIVFRQSGVhZGVyTWFwOjpjb250YWlucyhjb25z
dCBjaGFyKiBuYW1lKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9NSU1FSGVhZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
TUlNRUhlYWRlci5jcHAKaW5kZXggNWQ2Yjg1OGY0NmU0MzgzZmNiMmZlYTYyODU4YWY3NTMyZDQz
YTVhZi4uZjRlM2ViZjY3NGRlNmJkMWQyNGE5NTkwYTQ4MThiZWI2ZmQ4ZGU2MyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9NSU1FSGVhZGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL01JTUVIZWFkZXIuY3BwCkBAIC04Niw3ICs4
Niw3IEBAIFBhc3NSZWZQdHI8TUlNRUhlYWRlcj4gTUlNRUhlYWRlcjo6cGFyc2VIZWFkZXIoU2hh
cmVkQnVmZmVyQ2h1bmtSZWFkZXIqIGJ1ZmZlcikKICAgICBLZXlWYWx1ZU1hcDo6aXRlcmF0b3Ig
bWltZVBhcmFtZXRlcnNJdGVyYXRvciA9IGtleVZhbHVlUGFpcnMuZmluZCgiY29udGVudC10eXBl
Iik7CiAgICAgaWYgKG1pbWVQYXJhbWV0ZXJzSXRlcmF0b3IgIT0ga2V5VmFsdWVQYWlycy5lbmQo
KSkgewogICAgICAgICAvLyBGSVhNRTogbWFrZSBDb250ZW50VHlwZVBhcnNlciBtb3JlIGZsZXhp
YmxlIHNvIHdlIGRvbid0IGhhdmUgdG8gc3ludGhlc2l6ZSB0aGUgIkNvbnRlbnQtVHlwZToiLgot
ICAgICAgICBDb250ZW50VHlwZVBhcnNlciBjb250ZW50VHlwZVBhcnNlcihtYWtlU3RyaW5nKCJD
b250ZW50LVR5cGU6IiwgbWltZVBhcmFtZXRlcnNJdGVyYXRvci0+c2Vjb25kKSk7CisgICAgICAg
IENvbnRlbnRUeXBlUGFyc2VyIGNvbnRlbnRUeXBlUGFyc2VyKG1ha2VTdHJpbmcoIkNvbnRlbnQt
VHlwZToiLCBtaW1lUGFyYW1ldGVyc0l0ZXJhdG9yLT52YWx1ZSkpOwogICAgICAgICBtaW1lSGVh
ZGVyLT5tX2NvbnRlbnRUeXBlID0gY29udGVudFR5cGVQYXJzZXIubWltZVR5cGUoKTsKICAgICAg
ICAgaWYgKCFtaW1lSGVhZGVyLT5pc011bHRpcGFydCgpKQogICAgICAgICAgICAgbWltZUhlYWRl
ci0+bV9jaGFyc2V0ID0gY29udGVudFR5cGVQYXJzZXIuY2hhcnNldCgpLnN0cmlwV2hpdGVTcGFj
ZSgpOwpAQCAtMTA1LDExICsxMDUsMTEgQEAgUGFzc1JlZlB0cjxNSU1FSGVhZGVyPiBNSU1FSGVh
ZGVyOjpwYXJzZUhlYWRlcihTaGFyZWRCdWZmZXJDaHVua1JlYWRlciogYnVmZmVyKQogCiAgICAg
bWltZVBhcmFtZXRlcnNJdGVyYXRvciA9IGtleVZhbHVlUGFpcnMuZmluZCgiY29udGVudC10cmFu
c2Zlci1lbmNvZGluZyIpOwogICAgIGlmIChtaW1lUGFyYW1ldGVyc0l0ZXJhdG9yICE9IGtleVZh
bHVlUGFpcnMuZW5kKCkpCi0gICAgICAgIG1pbWVIZWFkZXItPm1fY29udGVudFRyYW5zZmVyRW5j
b2RpbmcgPSBwYXJzZUNvbnRlbnRUcmFuc2ZlckVuY29kaW5nKG1pbWVQYXJhbWV0ZXJzSXRlcmF0
b3ItPnNlY29uZCk7CisgICAgICAgIG1pbWVIZWFkZXItPm1fY29udGVudFRyYW5zZmVyRW5jb2Rp
bmcgPSBwYXJzZUNvbnRlbnRUcmFuc2ZlckVuY29kaW5nKG1pbWVQYXJhbWV0ZXJzSXRlcmF0b3It
PnZhbHVlKTsKIAogICAgIG1pbWVQYXJhbWV0ZXJzSXRlcmF0b3IgPSBrZXlWYWx1ZVBhaXJzLmZp
bmQoImNvbnRlbnQtbG9jYXRpb24iKTsKICAgICBpZiAobWltZVBhcmFtZXRlcnNJdGVyYXRvciAh
PSBrZXlWYWx1ZVBhaXJzLmVuZCgpKQotICAgICAgICBtaW1lSGVhZGVyLT5tX2NvbnRlbnRMb2Nh
dGlvbiA9IG1pbWVQYXJhbWV0ZXJzSXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgbWltZUhlYWRl
ci0+bV9jb250ZW50TG9jYXRpb24gPSBtaW1lUGFyYW1ldGVyc0l0ZXJhdG9yLT52YWx1ZTsKIAog
ICAgIHJldHVybiBtaW1lSGVhZGVyLnJlbGVhc2UoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAKaW5kZXggN2RkYzQ3ZTRlYTc5
OWE0NmRlZTZmMzJjZmQwNzhlZjc1MTU0ZjFlZS4uNmQxMmY5ZDg5YjAyNDc3NDZhNTdlMWJiY2Fm
YjJjMjE3ZDU5MTAzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9SZXNvdXJjZUhhbmRsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9SZXNvdXJjZUhhbmRsZS5jcHAKQEAgLTcxLDcgKzcxLDcgQEAgUGFzc1JlZlB0cjxSZXNvdXJj
ZUhhbmRsZT4gUmVzb3VyY2VIYW5kbGU6OmNyZWF0ZShOZXR3b3JraW5nQ29udGV4dCogY29udGV4
dCwgY28KICAgICBCdWlsdGluUmVzb3VyY2VIYW5kbGVDb25zdHJ1Y3Rvck1hcDo6aXRlcmF0b3Ig
cHJvdG9jb2xNYXBJdGVtID0gYnVpbHRpblJlc291cmNlSGFuZGxlQ29uc3RydWN0b3JNYXAoKS5m
aW5kKHJlcXVlc3QudXJsKCkucHJvdG9jb2woKSk7CiAKICAgICBpZiAocHJvdG9jb2xNYXBJdGVt
ICE9IGJ1aWx0aW5SZXNvdXJjZUhhbmRsZUNvbnN0cnVjdG9yTWFwKCkuZW5kKCkpCi0gICAgICAg
IHJldHVybiBwcm90b2NvbE1hcEl0ZW0tPnNlY29uZChyZXF1ZXN0LCBjbGllbnQpOworICAgICAg
ICByZXR1cm4gcHJvdG9jb2xNYXBJdGVtLT52YWx1ZShyZXF1ZXN0LCBjbGllbnQpOwogCiAgICAg
UmVmUHRyPFJlc291cmNlSGFuZGxlPiBuZXdIYW5kbGUoYWRvcHRSZWYobmV3IFJlc291cmNlSGFu
ZGxlKHJlcXVlc3QsIGNsaWVudCwgZGVmZXJzTG9hZGluZywgc2hvdWxkQ29udGVudFNuaWZmKSkp
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNl
UmVxdWVzdEJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJj
ZVJlcXVlc3RCYXNlLmNwcAppbmRleCAzNTA5NzkyOTI3OGM3NjA2NGM0YjBkZWI5YWZlMzlmZjE5
YmU0YzI0Li41MzE1YzFlMzc2YWYyNjg2NGYzODE2MjI1NTliMDliOTZiYTFlMjdkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0
QmFzZS5jcHAKQEAgLTM3Myw3ICszNzMsNyBAQCB2b2lkIFJlc291cmNlUmVxdWVzdEJhc2U6OmFk
ZEhUVFBIZWFkZXJGaWVsZChjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cgogICAg
IHVwZGF0ZVJlc291cmNlUmVxdWVzdCgpOwogICAgIEhUVFBIZWFkZXJNYXA6OkFkZFJlc3VsdCBy
ZXN1bHQgPSBtX2h0dHBIZWFkZXJGaWVsZHMuYWRkKG5hbWUsIHZhbHVlKTsKICAgICBpZiAoIXJl
c3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCArPSAiLCIg
KyB2YWx1ZTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSArPSAiLCIgKyB2YWx1ZTsK
IAogICAgIGlmICh1cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpCiAgICAgICAgIG1fcGxh
dGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZhbHNlOwpAQCAtMzgzLDcgKzM4Myw3IEBAIHZvaWQgUmVz
b3VyY2VSZXF1ZXN0QmFzZTo6YWRkSFRUUEhlYWRlckZpZWxkcyhjb25zdCBIVFRQSGVhZGVyTWFw
JiBoZWFkZXJGaWVsZHMpCiB7CiAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gaGVhZGVyRmllbGRzLmVuZCgpOwogICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBoZWFkZXJGaWVsZHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAg
ICBhZGRIVFRQSGVhZGVyRmllbGQoaXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsKKyAgICAgICAgYWRk
SFRUUEhlYWRlckZpZWxkKGl0LT5rZXksIGl0LT52YWx1ZSk7CiB9CiAKIGJvb2wgZXF1YWxJZ25v
cmluZ0hlYWRlckZpZWxkcyhjb25zdCBSZXNvdXJjZVJlcXVlc3RCYXNlJiBhLCBjb25zdCBSZXNv
dXJjZVJlcXVlc3RCYXNlJiBiKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlUmVxdWVzdEJsYWNrQmVycnkuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlUmVxdWVzdEJsYWNr
QmVycnkuY3BwCmluZGV4IDNkOGQ0YzY5MTA1ZDIxODViMmNmN2RiYjgzYzczNTMwODEwOTEyOTQu
LjQ4OWIyMWI3ZmZkMjI1ZDdmNjA1NTRlZDQzYmMxNzliYTYxNjc2Y2UgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJjZVJlcXVlc3RC
bGFja0JlcnJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNr
YmVycnkvUmVzb3VyY2VSZXF1ZXN0QmxhY2tCZXJyeS5jcHAKQEAgLTEzOSw3ICsxMzksNyBAQCBS
ZXNvdXJjZVJlcXVlc3Q6OlRhcmdldFR5cGUgUmVzb3VyY2VSZXF1ZXN0Ojp0YXJnZXRUeXBlRnJv
bU1pbWVUeXBlKGNvbnN0IFN0cmluZwogICAgIGlmIChpdGVyID09IG1hcC5lbmQoKSkKICAgICAg
ICAgcmV0dXJuIFJlc291cmNlUmVxdWVzdDo6VGFyZ2V0SXNVbnNwZWNpZmllZDsKIAotICAgIHJl
dHVybiBpdGVyLT5zZWNvbmQ7CisgICAgcmV0dXJuIGl0ZXItPnZhbHVlOwogfQogCiB2b2lkIFJl
c291cmNlUmVxdWVzdDo6aW5pdGlhbGl6ZVBsYXRmb3JtUmVxdWVzdChOZXR3b3JrUmVxdWVzdCYg
cGxhdGZvcm1SZXF1ZXN0LCBib29sIGNvb2tpZXNFbmFibGVkLCBib29sIGlzSW5pdGlhbCwgYm9v
bCBpc1JlZGlyZWN0KSBjb25zdApAQCAtMTk1LDggKzE5NSw4IEBAIHZvaWQgUmVzb3VyY2VSZXF1
ZXN0Ojppbml0aWFsaXplUGxhdGZvcm1SZXF1ZXN0KE5ldHdvcmtSZXF1ZXN0JiBwbGF0Zm9ybVJl
cXVlc3QsCiAgICAgICAgIGJvb2wgY29va2llSGVhZGVyTWF5QmVEaXJ0eSA9IGlzUmVkaXJlY3Qg
fHwgY2FjaGVQb2xpY3koKSA9PSBXZWJDb3JlOjpSZWxvYWRJZ25vcmluZ0NhY2hlRGF0YSB8fCBj
YWNoZVBvbGljeSgpID09IFdlYkNvcmU6OlJldHVybkNhY2hlRGF0YUVsc2VMb2FkOwogCiAgICAg
ICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBodHRwSGVhZGVyRmll
bGRzKCkuYmVnaW4oKTsgaXQgIT0gaHR0cEhlYWRlckZpZWxkcygpLmVuZCgpOyArK2l0KSB7Ci0g
ICAgICAgICAgICBTdHJpbmcga2V5ID0gaXQtPmZpcnN0OwotICAgICAgICAgICAgU3RyaW5nIHZh
bHVlID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIFN0cmluZyBrZXkgPSBpdC0+a2V5OworICAg
ICAgICAgICAgU3RyaW5nIHZhbHVlID0gaXQtPnZhbHVlOwogICAgICAgICAgICAgaWYgKCFrZXku
aXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBjaGVjayB0aGUgZW5j
b2RpbmcgYW5kIGVuY29kZSB0aGUgY29va2llJ3MgdmFsdWUgdXNpbmcgbGF0aW4xIG9yIHV0Zjgg
dG8gc3VwcG9ydCB1bmljb2RlIGNoYXJhY3RlcnMuCiAgICAgICAgICAgICAgICAgLy8gV2Ugd28n
dCB1c2UgdGhlIG9sZCBjb29raWVzIG9mIHJlc291cmNlUmVxdWVzdCBmb3IgbmV3IGxvY2F0aW9u
IGJlY2F1c2UgdGhlc2UgY29va2llcyBtYXkgYmUgY2hhbmdlZCBieSByZWRpcmVjdGlvbi4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5k
bGVDRk5ldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNl
SGFuZGxlQ0ZOZXQuY3BwCmluZGV4IGY2ZDFmMzgyMTI2MmYxOTUwNDE1NTlhMjU2YzAyYmQ2YmQ3
ODI5ZTUuLjAxZThiOGFlNWMwZDFjNmE2YThmMDMzMDg1ZTkwZjAxMGJjMWY3YzYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRk5l
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhh
bmRsZUNGTmV0LmNwcApAQCAtNDI4LDcgKzQyOCw3IEBAIHN0YXRpYyBDRlVSTFJlcXVlc3RSZWYg
bWFrZUZpbmFsUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGJvb2wgc2hv
CiAgICAgICAgIGlmICghc3NsUHJvcHMpCiAgICAgICAgICAgICBzc2xQcm9wcy5hZG9wdENGKENG
RGljdGlvbmFyeUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCwgJmtDRlR5cGVE
aWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykp
OwogI2lmIFBMQVRGT1JNKFdJTikKLSAgICAgICAgd2tTZXRDbGllbnRDZXJ0aWZpY2F0ZUluU1NM
UHJvcGVydGllcyhzc2xQcm9wcy5nZXQoKSwgKGNsaWVudENlcnQtPnNlY29uZCkuZ2V0KCkpOwor
ICAgICAgICB3a1NldENsaWVudENlcnRpZmljYXRlSW5TU0xQcm9wZXJ0aWVzKHNzbFByb3BzLmdl
dCgpLCAoY2xpZW50Q2VydC0+dmFsdWUpLmdldCgpKTsKICNlbmRpZgogICAgIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZVJlcXVlc3RD
Rk5ldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlUmVx
dWVzdENGTmV0LmNwcAppbmRleCA1MjBkNjg1Nzg4NGE1OTlmZGQwODNkMmVmZTRkZmI2OGM3ZTI2
ZDI4Li5kNmRmNjFlZTc4Y2M5MWUyZTE3MzE4ODFkMDk2MmMzMzUxNjA1MDNlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlUmVxdWVzdENGTmV0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlUmVx
dWVzdENGTmV0LmNwcApAQCAtMTIwLDggKzEyMCw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRI
ZWFkZXJGaWVsZHMoQ0ZNdXRhYmxlVVJMUmVxdWVzdFJlZiByZXF1ZXN0LCBjb25zdCBIVFRQSGVh
CiAKICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSByZXF1ZXN0SGVhZGVy
cy5lbmQoKTsKICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcmVx
dWVzdEhlYWRlcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIENGU3RyaW5n
UmVmIGtleSA9IGl0LT5maXJzdC5jcmVhdGVDRlN0cmluZygpOwotICAgICAgICBDRlN0cmluZ1Jl
ZiB2YWx1ZSA9IGl0LT5zZWNvbmQuY3JlYXRlQ0ZTdHJpbmcoKTsKKyAgICAgICAgQ0ZTdHJpbmdS
ZWYga2V5ID0gaXQtPmtleS5jcmVhdGVDRlN0cmluZygpOworICAgICAgICBDRlN0cmluZ1JlZiB2
YWx1ZSA9IGl0LT52YWx1ZS5jcmVhdGVDRlN0cmluZygpOwogICAgICAgICBDRlVSTFJlcXVlc3RT
ZXRIVFRQSGVhZGVyRmllbGRWYWx1ZShyZXF1ZXN0LCBrZXksIHZhbHVlKTsKICAgICAgICAgQ0ZS
ZWxlYXNlKGtleSk7CiAgICAgICAgIENGUmVsZWFzZSh2YWx1ZSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1h
bmFnZXIuY3BwCmluZGV4IGFmMDc1ZWY5ZTMyMTg4ZTc3MTQ5N2ViZjdjNzRkYzFhYTE1ZTIxN2Eu
LjY1YmNjMTBhZDNkMjAwNWQ2ODlkNzNlOGRkNjc5ODhiOWM1Y2I1ZDUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1hbmFnZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhh
bmRsZU1hbmFnZXIuY3BwCkBAIC03MDMsOCArNzAzLDggQEAgdm9pZCBSZXNvdXJjZUhhbmRsZU1h
bmFnZXI6OmluaXRpYWxpemVIYW5kbGUoUmVzb3VyY2VIYW5kbGUqIGpvYikKICAgICAgICAgSFRU
UEhlYWRlck1hcCBjdXN0b21IZWFkZXJzID0gam9iLT5maXJzdFJlcXVlc3QoKS5odHRwSGVhZGVy
RmllbGRzKCk7CiAgICAgICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGN1
c3RvbUhlYWRlcnMuZW5kKCk7CiAgICAgICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBjdXN0b21IZWFkZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAg
ICAgICAgICAgU3RyaW5nIGtleSA9IGl0LT5maXJzdDsKLSAgICAgICAgICAgIFN0cmluZyB2YWx1
ZSA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICBTdHJpbmcga2V5ID0gaXQtPmtleTsKKyAgICAg
ICAgICAgIFN0cmluZyB2YWx1ZSA9IGl0LT52YWx1ZTsKICAgICAgICAgICAgIFN0cmluZyBoZWFk
ZXJTdHJpbmcoa2V5KTsKICAgICAgICAgICAgIGhlYWRlclN0cmluZy5hcHBlbmQoIjogIik7CiAg
ICAgICAgICAgICBoZWFkZXJTdHJpbmcuYXBwZW5kKHZhbHVlKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlUmVxdWVzdE1hYy5tbSBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlUmVxdWVzdE1hYy5tbQpp
bmRleCA5NmM0OTdkNTAzYjU0N2UzYjAxYTlhMjUyYTU4ZmMyZWVmM2Y5NDQ0Li45MzIxNmNiNTVl
ODU3NzMxMzZmM2U4YzNhMDdjZTZmYjU1NmUwNmQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZVJlcXVlc3RNYWMubW0KKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VSZXF1ZXN0TWFjLm1tCkBAIC0x
NTUsNyArMTU1LDcgQEAgdm9pZCBSZXNvdXJjZVJlcXVlc3Q6OmRvVXBkYXRlUGxhdGZvcm1SZXF1
ZXN0KCkKICAgICAgICAgW25zUmVxdWVzdCBzZXRWYWx1ZTpuaWwgZm9ySFRUUEhlYWRlckZpZWxk
OltvbGRIZWFkZXJGaWVsZE5hbWVzIG9iamVjdEF0SW5kZXg6aSAtIDFdXTsKICAgICBIVFRQSGVh
ZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBodHRwSGVhZGVyRmllbGRzKCkuZW5kKCk7CiAg
ICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGh0dHBIZWFkZXJGaWVs
ZHMoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIFtuc1JlcXVlc3Qgc2V0VmFs
dWU6aXQtPnNlY29uZCBmb3JIVFRQSGVhZGVyRmllbGQ6aXQtPmZpcnN0XTsKKyAgICAgICAgW25z
UmVxdWVzdCBzZXRWYWx1ZTppdC0+dmFsdWUgZm9ySFRUUEhlYWRlckZpZWxkOml0LT5rZXldOwog
CiAgICAgLy8gVGhlIGJlbG93IGNoZWNrIGNhbiBiZSByZW1vdmVkIG9uY2Ugd2UgcmVxdWlyZSBh
IHZlcnNpb24gb2YgRm91bmRhdGlvbiB3aXRoIC1bTlNNdXRhYmxlVVJMUmVxdWVzdCBzZXRDb250
ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXk6XSBtZXRob2QuCiAgICAgc3RhdGlj
IGJvb2wgc3VwcG9ydHNDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXkgPSBb
TlNNdXRhYmxlVVJMUmVxdWVzdCBpbnN0YW5jZXNSZXNwb25kVG9TZWxlY3RvcjpAc2VsZWN0b3Io
c2V0Q29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5OildOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9xdC9SZXNvdXJjZVJlcXVlc3RRdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3F0L1Jlc291cmNlUmVxdWVzdFF0
LmNwcAppbmRleCBkYmI3Yjc0ZGQ1OWM0ZjRkMGYyZWNlY2ZkYmUwODEzZDI4Yjc0YTNlLi5lODRl
Njc3YTVmNzJjNzFlODljNjAwZmQ3NzcwMGJiNjgyMjE0YzJjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3F0L1Jlc291cmNlUmVxdWVzdFF0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3F0L1Jlc291cmNlUmVxdWVzdFF0LmNwcApA
QCAtNDksOCArNDksOCBAQCBRTmV0d29ya1JlcXVlc3QgUmVzb3VyY2VSZXF1ZXN0Ojp0b05ldHdv
cmtSZXF1ZXN0KE5ldHdvcmtpbmdDb250ZXh0ICpjb250ZXh0KSBjbwogICAgIGNvbnN0IEhUVFBI
ZWFkZXJNYXAgJmhlYWRlcnMgPSBodHRwSGVhZGVyRmllbGRzKCk7CiAgICAgZm9yIChIVFRQSGVh
ZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGhlYWRlcnMuYmVnaW4oKSwgZW5kID0gaGVhZGVy
cy5lbmQoKTsKICAgICAgICAgIGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBRQnl0ZUFycmF5
IG5hbWUgPSBRU3RyaW5nKGl0LT5maXJzdCkudG9MYXRpbjEoKTsKLSAgICAgICAgUUJ5dGVBcnJh
eSB2YWx1ZSA9IFFTdHJpbmcoaXQtPnNlY29uZCkudG9MYXRpbjEoKTsKKyAgICAgICAgUUJ5dGVB
cnJheSBuYW1lID0gUVN0cmluZyhpdC0+a2V5KS50b0xhdGluMSgpOworICAgICAgICBRQnl0ZUFy
cmF5IHZhbHVlID0gUVN0cmluZyhpdC0+dmFsdWUpLnRvTGF0aW4xKCk7CiAgICAgICAgIC8vIFFO
ZXR3b3JrUmVxdWVzdDo6c2V0UmF3SGVhZGVyKCkgd291bGQgcmVtb3ZlIHRoZSBoZWFkZXIgaWYg
dGhlIHZhbHVlIGlzIG51bGwKICAgICAgICAgLy8gTWFrZSBzdXJlIHRvIHNldCBhbiBlbXB0eSBo
ZWFkZXIgaW5zdGVhZCBvZiBudWxsIGhlYWRlci4KICAgICAgICAgaWYgKCF2YWx1ZS5pc051bGwo
KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNv
dXJjZVJlcXVlc3RTb3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291
cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNwcAppbmRleCBkNzEyN2I0YjViOGU0NTlhNGNhZWM1NWE1
NTI3YmJjZjNjODM3Nzg1Li41N2FiNGQ2NDdiM2JmZmMyNWJhOTIzNzc4YzcxZDRmNGJlZTE1Y2I5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3Vy
Y2VSZXF1ZXN0U291cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9z
b3VwL1Jlc291cmNlUmVxdWVzdFNvdXAuY3BwCkBAIC00Myw3ICs0Myw3IEBAIHZvaWQgUmVzb3Vy
Y2VSZXF1ZXN0Ojp1cGRhdGVTb3VwTWVzc2FnZShTb3VwTWVzc2FnZSogc291cE1lc3NhZ2UpIGNv
bnN0CiAgICAgaWYgKCFoZWFkZXJzLmlzRW1wdHkoKSkgewogICAgICAgICBIVFRQSGVhZGVyTWFw
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBoZWFkZXJzLmVuZCgpOwogICAgICAgICBmb3IgKEhUVFBI
ZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaGVhZGVycy5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpCi0gICAgICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQoc291cEhlYWRl
cnMsIGl0LT5maXJzdC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBpdC0+c2Vjb25kLnV0ZjgoKS5k
YXRhKCkpOworICAgICAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKHNvdXBIZWFk
ZXJzLCBpdC0+a2V5LnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGl0LT52YWx1ZS51dGY4KCkuZGF0
YSgpKTsKICAgICB9CiAKICAgICBTdHJpbmcgZmlyc3RQYXJ0eVN0cmluZyA9IGZpcnN0UGFydHlG
b3JDb29raWVzKCkuc3RyaW5nKCk7CkBAIC02Niw3ICs2Niw3IEBAIFNvdXBNZXNzYWdlKiBSZXNv
dXJjZVJlcXVlc3Q6OnRvU291cE1lc3NhZ2UoKSBjb25zdAogICAgIGlmICghaGVhZGVycy5pc0Vt
cHR5KCkpIHsKICAgICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaGVh
ZGVycy5lbmQoKTsKICAgICAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IGhlYWRlcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgc291cF9t
ZXNzYWdlX2hlYWRlcnNfYXBwZW5kKHNvdXBIZWFkZXJzLCBpdC0+Zmlyc3Quc3RyaW5nKCkudXRm
OCgpLmRhdGEoKSwgaXQtPnNlY29uZC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIHNvdXBf
bWVzc2FnZV9oZWFkZXJzX2FwcGVuZChzb3VwSGVhZGVycywgaXQtPmtleS5zdHJpbmcoKS51dGY4
KCkuZGF0YSgpLCBpdC0+dmFsdWUudXRmOCgpLmRhdGEoKSk7CiAgICAgfQogCiAgICAgU3RyaW5n
IGZpcnN0UGFydHlTdHJpbmcgPSBmaXJzdFBhcnR5Rm9yQ29va2llcygpLnN0cmluZygpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVz
cG9uc2VTb3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNv
dXJjZVJlc3BvbnNlU291cC5jcHAKaW5kZXggZGRhYTg5M2I2M2E5ZjNmMTAzNTNmMGRlZDVlZjYz
YmE0ZTBmYWNlYS4uNzM5ZDQ0YjI4NWQzZDlkMjkxZThkNWIyN2FhYmU3ZTY5ZGU2NWExZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVz
cG9uc2VTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
UmVzb3VyY2VSZXNwb25zZVNvdXAuY3BwCkBAIC00Niw3ICs0Niw3IEBAIFNvdXBNZXNzYWdlKiBS
ZXNvdXJjZVJlc3BvbnNlOjp0b1NvdXBNZXNzYWdlKCkgY29uc3QKICAgICBpZiAoIWhlYWRlcnMu
aXNFbXB0eSgpKSB7CiAgICAgICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IGhlYWRlcnMuZW5kKCk7CiAgICAgICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBoZWFkZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIHNv
dXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChzb3VwSGVhZGVycywgaXQtPmZpcnN0LnN0cmluZygp
LnV0ZjgoKS5kYXRhKCksIGl0LT5zZWNvbmQudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBz
b3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQoc291cEhlYWRlcnMsIGl0LT5rZXkuc3RyaW5nKCku
dXRmOCgpLmRhdGEoKSwgaXQtPnZhbHVlLnV0ZjgoKS5kYXRhKCkpOwogICAgIH0KIAogICAgIHNv
dXBfbWVzc2FnZV9zZXRfZmxhZ3Moc291cE1lc3NhZ2UsIG1fc291cEZsYWdzKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvd2luL1Jlc291cmNlSGFuZGxlV2lu
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvd2luL1Jlc291cmNlSGFuZGxl
V2luLmNwcAppbmRleCAwMjEyZDBjZGE5OGM5ZjEzNzkyOGU2MTJmZGY5NTAzNjVhMDFkMGQ2Li5m
MjUwNTI3NzViMGRlZGZlMjFjNzU1ZDNmODM5OTg1M2U3YTBmMzk3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3dpbi9SZXNvdXJjZUhhbmRsZVdpbi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay93aW4vUmVzb3VyY2VIYW5kbGVXaW4u
Y3BwCkBAIC0zMjMsMTUgKzMyMywxNSBAQCBib29sIFJlc291cmNlSGFuZGxlOjpzdGFydChOZXR3
b3JraW5nQ29udGV4dCogY29udGV4dCkKICAgICBjb25zdCBIVFRQSGVhZGVyTWFwJiBodHRwSGVh
ZGVyRmllbGRzID0gZmlyc3RSZXF1ZXN0KCkuaHR0cEhlYWRlckZpZWxkcygpOwogCiAgICAgZm9y
IChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGh0dHBIZWFkZXJGaWVsZHMuYmVn
aW4oKTsgaXQgIT0gaHR0cEhlYWRlckZpZWxkcy5lbmQoKTsgKytpdCkgewotICAgICAgICBpZiAo
ZXF1YWxJZ25vcmluZ0Nhc2UoaXQtPmZpcnN0LCAiQWNjZXB0IikgfHwgZXF1YWxJZ25vcmluZ0Nh
c2UoaXQtPmZpcnN0LCAiUmVmZXJlciIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKGl0LT5maXJzdCwg
IlVzZXItQWdlbnQiKSkKKyAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGl0LT5rZXksICJB
Y2NlcHQiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShpdC0+a2V5LCAiUmVmZXJlciIpIHx8IGVxdWFs
SWdub3JpbmdDYXNlKGl0LT5rZXksICJVc2VyLUFnZW50IikpCiAgICAgICAgICAgICBjb250aW51
ZTsKIAogICAgICAgICBpZiAoIWh0dHBIZWFkZXJzLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGh0
dHBIZWFkZXJzLmFwcGVuZCgnXG4nKTsKIAotICAgICAgICBodHRwSGVhZGVycy5hcHBlbmQoaXQt
PmZpcnN0LmNoYXJhY3RlcnMoKSwgaXQtPmZpcnN0Lmxlbmd0aCgpKTsKKyAgICAgICAgaHR0cEhl
YWRlcnMuYXBwZW5kKGl0LT5rZXkuY2hhcmFjdGVycygpLCBpdC0+a2V5Lmxlbmd0aCgpKTsKICAg
ICAgICAgaHR0cEhlYWRlcnMuYXBwZW5kKCc6Jyk7Ci0gICAgICAgIGh0dHBIZWFkZXJzLmFwcGVu
ZChpdC0+c2Vjb25kLmNoYXJhY3RlcnMoKSwgaXQtPnNlY29uZC5sZW5ndGgoKSk7CisgICAgICAg
IGh0dHBIZWFkZXJzLmFwcGVuZChpdC0+dmFsdWUuY2hhcmFjdGVycygpLCBpdC0+dmFsdWUubGVu
Z3RoKCkpOwogICAgIH0KIAogICAgIElOVEVSTkVUX0JVRkZFUlNXIGludGVybmV0QnVmZmVyczsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1J1bkxvb3BRdC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SdW5Mb29wUXQuY3BwCmluZGV4IDJhODdlMmZjOGY2
Njc3NzY5ZjczMTQzZTU3MWUwOWM1YTU0YzZlYmEuLjUwMWJkNWMxMjNiMGYwM2NlOWEwY2Y5MGUx
NzI2OTFmNTA2ZDlhMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1J1
bkxvb3BRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUnVuTG9vcFF0LmNw
cApAQCAtMTA5LDcgKzEwOSw3IEBAIHZvaWQgUnVuTG9vcDo6VGltZXJCYXNlOjp0aW1lckZpcmVk
KFJ1bkxvb3AqIHJ1bkxvb3AsIGludCBJRCkKIHsKICAgICBUaW1lck1hcDo6aXRlcmF0b3IgaXQg
PSBydW5Mb29wLT5tX2FjdGl2ZVRpbWVycy5maW5kKElEKTsKICAgICBBU1NFUlQoaXQgIT0gcnVu
TG9vcC0+bV9hY3RpdmVUaW1lcnMuZW5kKCkpOwotICAgIFRpbWVyQmFzZSogdGltZXIgPSBpdC0+
c2Vjb25kOworICAgIFRpbWVyQmFzZSogdGltZXIgPSBpdC0+dmFsdWU7CiAKICAgICBpZiAoIXRp
bWVyLT5tX2lzUmVwZWF0aW5nKSB7CiAgICAgICAgIC8vIFN0b3AgdGhlIHRpbWVyIChjYWxsaW5n
IHN0b3Agd291bGQgbmVlZCBhbm90aGVyIGhhc2ggdGFibGUgbG9va3VwKS4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9jYWxlVG9TY3JpcHRNYXBwaW5nRGVmYXVs
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0xvY2FsZVRvU2NyaXB0TWFwcGlu
Z0RlZmF1bHQuY3BwCmluZGV4IDkwOTQ3Mzg0OTY5NmI0YzI5MmQ2YjlhYzI4NWJjN2Q5ZjRhYzI4
NDEuLjU4MjY0OTA3ZDVlNDBhMDA5YjQwZmQ2OTkxODBmMzNlZjdkNTE3YzMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9jYWxlVG9TY3JpcHRNYXBwaW5nRGVmYXVs
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Mb2NhbGVUb1NjcmlwdE1h
cHBpbmdEZWZhdWx0LmNwcApAQCAtMTY2LDcgKzE2Niw3IEBAIFVTY3JpcHRDb2RlIHNjcmlwdE5h
bWVUb0NvZGUoY29uc3QgU3RyaW5nJiBzY3JpcHROYW1lKQogCiAgICAgSGFzaE1hcDxTdHJpbmcs
IFVTY3JpcHRDb2RlPjo6aXRlcmF0b3IgaXQgPSBzY3JpcHROYW1lQ29kZU1hcC5maW5kKHNjcmlw
dE5hbWUubG93ZXIoKSk7CiAgICAgaWYgKGl0ICE9IHNjcmlwdE5hbWVDb2RlTWFwLmVuZCgpKQot
ICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKICAg
ICByZXR1cm4gVVNDUklQVF9JTlZBTElEX0NPREU7CiB9CiAKQEAgLTM4OSw3ICszODksNyBAQCBV
U2NyaXB0Q29kZSBsb2NhbGVUb1NjcmlwdENvZGVGb3JGb250U2VsZWN0aW9uKGNvbnN0IFN0cmlu
ZyYgbG9jYWxlKQogICAgIHdoaWxlICghY2Fub25pY2FsTG9jYWxlLmlzRW1wdHkoKSkgewogICAg
ICAgICBIYXNoTWFwPFN0cmluZywgVVNjcmlwdENvZGU+OjppdGVyYXRvciBpdCA9IGxvY2FsZVNj
cmlwdE1hcC5maW5kKGNhbm9uaWNhbExvY2FsZSk7CiAgICAgICAgIGlmIChpdCAhPSBsb2NhbGVT
Y3JpcHRNYXAuZW5kKCkpCi0gICAgICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICAgICAg
ICAgIHJldHVybiBpdC0+dmFsdWU7CiAgICAgICAgIHNpemVfdCBwb3MgPSBjYW5vbmljYWxMb2Nh
bGUucmV2ZXJzZUZpbmQoJ18nKTsKICAgICAgICAgaWYgKHBvcyA9PSBub3RGb3VuZCkKICAgICAg
ICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9U
ZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1Rl
eHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcAppbmRleCA0NzYzYmY4MzRjMGUwMWU2MTg2NzdiOGExMTQx
NDgwMzYxNTI5YTRlLi5kMjI5MmU0ZWQ1ZjFmMDJkNDQ0MTNjNzlmODM1OWFhY2NjODA2NzM2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lz
dHJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1Jl
Z2lzdHJ5LmNwcApAQCAtMTk2LDggKzE5Niw4IEBAIHN0YXRpYyB2b2lkIHBydW5lQmxhY2tsaXN0
ZWRDb2RlY3MoKQogICAgICAgICBUZXh0RW5jb2RpbmdOYW1lTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IHRleHRFbmNvZGluZ05hbWVNYXAtPmJlZ2luKCk7CiAgICAgICAgIFRleHRFbmNvZGluZ05h
bWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHRleHRFbmNvZGluZ05hbWVNYXAtPmVuZCgpOwog
ICAgICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAoaXQtPnNl
Y29uZCA9PSBhdG9taWNOYW1lKQotICAgICAgICAgICAgICAgIG5hbWVzLmFwcGVuZChpdC0+Zmly
c3QpOworICAgICAgICAgICAgaWYgKGl0LT52YWx1ZSA9PSBhdG9taWNOYW1lKQorICAgICAgICAg
ICAgICAgIG5hbWVzLmFwcGVuZChpdC0+a2V5KTsKICAgICAgICAgfQogCiAgICAgICAgIHNpemVf
dCBsZW5ndGggPSBuYW1lcy5zaXplKCk7CkBAIC0zNzksNyArMzc5LDcgQEAgdm9pZCBkdW1wVGV4
dEVuY29kaW5nTmFtZU1hcCgpCiAgICAgVGV4dEVuY29kaW5nTmFtZU1hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSB0ZXh0RW5jb2RpbmdOYW1lTWFwLT5iZWdpbigpOwogICAgIFRleHRFbmNvZGluZ05h
bWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHRleHRFbmNvZGluZ05hbWVNYXAtPmVuZCgpOwog
ICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiJyVz
JyA9PiAnJXMnXG4iLCBpdC0+Zmlyc3QsIGl0LT5zZWNvbmQpOworICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIiclcycgPT4gJyVzJ1xuIiwgaXQtPmtleSwgaXQtPnZhbHVlKTsKIH0KICNlbmRpZgog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3RyYW5zY29kZXIvRm9u
dFRyYW5zY29kZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC90cmFuc2NvZGVy
L0ZvbnRUcmFuc2NvZGVyLmNwcAppbmRleCA0ZTA3ZjUwZmJkYjBjNTdjM2VlY2E2ZjhiZTcxZjc1
MDVkYjUzYmMwLi40ODQyMjhjYWE4ZTc2MDcxYjM3YTlkMjBhOTkyZDUwYTFkNDFmNDBjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3RyYW5zY29kZXIvRm9udFRyYW5z
Y29kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvdHJhbnNjb2Rlci9G
b250VHJhbnNjb2Rlci5jcHAKQEAgLTY2LDcgKzY2LDcgQEAgRm9udFRyYW5zY29kZXI6OkNvbnZl
cnRlclR5cGUgRm9udFRyYW5zY29kZXI6OmNvbnZlcnRlclR5cGUoY29uc3QgRm9udERlc2NyaXB0
aW8KICAgICBpZiAoIWZvbnRGYW1pbHkuaXNOdWxsKCkpIHsKICAgICAgICAgSGFzaE1hcDxBdG9t
aWNTdHJpbmcsIENvbnZlcnRlclR5cGU+Ojpjb25zdF9pdGVyYXRvciBmb3VuZCA9IG1fY29udmVy
dGVyVHlwZXMuZmluZChmb250RmFtaWx5KTsKICAgICAgICAgaWYgKGZvdW5kICE9IG1fY29udmVy
dGVyVHlwZXMuZW5kKCkpCi0gICAgICAgICAgICByZXR1cm4gZm91bmQtPnNlY29uZDsKKyAgICAg
ICAgICAgIHJldHVybiBmb3VuZC0+dmFsdWU7CiAgICAgfQogCiAgICAgLy8gSUUncyBkZWZhdWx0
IGZvbnRzIGZvciBKYXBhbmVzZSBlbmNvZGluZ3MgY2hhbmdlIGJhY2tzbGFzaGVzIGludG8geWVu
IHNpZ25zLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC93aW4vVGV4
dENvZGVjV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvd2luL1RleHRDb2Rl
Y1dpbi5jcHAKaW5kZXggZTE5MjM3ZDY4ZDkwZGYyZjUwM2FmNDIzOWFhMzY3YjZmMTRmMjRiNS4u
ODc5YWY3Njk3NzJmZjUxNWYzNTRhYThiMTk3MTY5OWI2MmFiYTY2MyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC93aW4vVGV4dENvZGVjV2luLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3dpbi9UZXh0Q29kZWNXaW4uY3BwCkBAIC0xMDUsMTcg
KzEwNSwxNyBAQCBMYW5ndWFnZU1hbmFnZXI6Okxhbmd1YWdlTWFuYWdlcigpCiAgICAgICAgICAg
ICBpID0gY29kZVBhZ2VDaGFyc2V0cygpLnNldChjcEluZm8udWlDb2RlUGFnZSwgbmFtZSkuaXRl
cmF0b3I7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGkgIT0gY29kZVBhZ2VDaGFyc2V0cygpLmVu
ZCgpKSB7Ci0gICAgICAgICAgICBIYXNoTWFwPFN0cmluZywgQ2hhcnNldEluZm8+OjppdGVyYXRv
ciBqID0ga25vd25DaGFyc2V0cygpLmZpbmQoU3RyaW5nKGktPnNlY29uZC5kYXRhKCksIGktPnNl
Y29uZC5sZW5ndGgoKSkpOworICAgICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIENoYXJzZXRJbmZv
Pjo6aXRlcmF0b3IgaiA9IGtub3duQ2hhcnNldHMoKS5maW5kKFN0cmluZyhpLT52YWx1ZS5kYXRh
KCksIGktPnZhbHVlLmxlbmd0aCgpKSk7CiAgICAgICAgICAgICBBU1NFUlQoaiAhPSBrbm93bkNo
YXJzZXRzKCkuZW5kKCkpOwotICAgICAgICAgICAgQ2hhcnNldEluZm8mIGluZm8gPSBqLT5zZWNv
bmQ7Ci0gICAgICAgICAgICBpbmZvLm1fbmFtZSA9IGktPnNlY29uZC5kYXRhKCk7CisgICAgICAg
ICAgICBDaGFyc2V0SW5mbyYgaW5mbyA9IGotPnZhbHVlOworICAgICAgICAgICAgaW5mby5tX25h
bWUgPSBpLT52YWx1ZS5kYXRhKCk7CiAgICAgICAgICAgICBpbmZvLm1fZnJpZW5kbHlOYW1lID0g
Y3BJbmZvLndzekRlc2NyaXB0aW9uOwogICAgICAgICAgICAgaW5mby5tX2FsaWFzZXMuYXBwZW5k
KG5hbWUpOwogICAgICAgICAgICAgaW5mby5tX2FsaWFzZXMuYXBwZW5kKFN0cmluZyhjcEluZm8u
d3N6SGVhZGVyQ2hhcnNldCkubGF0aW4xKCkpOwogICAgICAgICAgICAgaW5mby5tX2FsaWFzZXMu
YXBwZW5kKFN0cmluZyhjcEluZm8ud3N6Qm9keUNoYXJzZXQpLmxhdGluMSgpKTsKICAgICAgICAg
ICAgIFN0cmluZyBjcE5hbWUgPSAiY3AiICsgU3RyaW5nOjpudW1iZXIoY3BJbmZvLnVpQ29kZVBh
Z2UpOwogICAgICAgICAgICAgaW5mby5tX2FsaWFzZXMuYXBwZW5kKGNwTmFtZS5sYXRpbjEoKSk7
Ci0gICAgICAgICAgICBzdXBwb3J0ZWRDaGFyc2V0cygpLmFkZChpLT5zZWNvbmQuZGF0YSgpKTsK
KyAgICAgICAgICAgIHN1cHBvcnRlZENoYXJzZXRzKCkuYWRkKGktPnZhbHVlLmRhdGEoKSk7CiAg
ICAgICAgIH0KICAgICB9CiB9CkBAIC0xMjYsNyArMTI2LDcgQEAgc3RhdGljIFVJTlQgZ2V0Q29k
ZVBhZ2UoY29uc3QgY2hhciogbmFtZSkKICAgICAvLyBzYXlpbmcgIj09IiBpcyBub3QgZm91bmQg
Zm9yIGNvbnN0X2l0ZXJhdG9yIGFuZCBpdGVyYXRvcgogICAgIGNvbnN0IEhhc2hNYXA8U3RyaW5n
LCBDaGFyc2V0SW5mbz4mIGNoYXJzZXRzID0ga25vd25DaGFyc2V0cygpOwogICAgIEhhc2hNYXA8
U3RyaW5nLCBDaGFyc2V0SW5mbz46OmNvbnN0X2l0ZXJhdG9yIGkgPSBjaGFyc2V0cy5maW5kKG5h
bWUpOwotICAgIHJldHVybiBpID09IGNoYXJzZXRzLmVuZCgpID8gQ1BfQUNQIDogaS0+c2Vjb25k
Lm1fY29kZVBhZ2U7CisgICAgcmV0dXJuIGkgPT0gY2hhcnNldHMuZW5kKCkgPyBDUF9BQ1AgOiBp
LT52YWx1ZS5tX2NvZGVQYWdlOwogfQogCiBzdGF0aWMgUGFzc093blB0cjxUZXh0Q29kZWM+IG5l
d1RleHRDb2RlY1dpbihjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nLCBjb25zdCB2b2lkKikK
QEAgLTE0OSw5ICsxNDksOSBAQCB2b2lkIFRleHRDb2RlY1dpbjo6cmVnaXN0ZXJFeHRlbmRlZEVu
Y29kaW5nTmFtZXMoRW5jb2RpbmdOYW1lUmVnaXN0cmFyIHJlZ2lzdHJhcgogICAgIGZvciAoQ2hh
cnNldFNldDo6aXRlcmF0b3IgaSA9IHN1cHBvcnRlZENoYXJzZXRzKCkuYmVnaW4oKTsgaSAhPSBz
dXBwb3J0ZWRDaGFyc2V0cygpLmVuZCgpOyArK2kpIHsKICAgICAgICAgSGFzaE1hcDxTdHJpbmcs
IENoYXJzZXRJbmZvPjo6aXRlcmF0b3IgaiA9IGtub3duQ2hhcnNldHMoKS5maW5kKCppKTsKICAg
ICAgICAgaWYgKGogIT0ga25vd25DaGFyc2V0cygpLmVuZCgpKSB7Ci0gICAgICAgICAgICByZWdp
c3RyYXIoai0+c2Vjb25kLm1fbmFtZS5kYXRhKCksIGotPnNlY29uZC5tX25hbWUuZGF0YSgpKTsK
LSAgICAgICAgICAgIGZvciAoVmVjdG9yPENTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBhbGlhcyA9
IGotPnNlY29uZC5tX2FsaWFzZXMuYmVnaW4oKTsgYWxpYXMgIT0gai0+c2Vjb25kLm1fYWxpYXNl
cy5lbmQoKTsgKythbGlhcykKLSAgICAgICAgICAgICAgICByZWdpc3RyYXIoYWxpYXMtPmRhdGEo
KSwgai0+c2Vjb25kLm1fbmFtZS5kYXRhKCkpOworICAgICAgICAgICAgcmVnaXN0cmFyKGotPnZh
bHVlLm1fbmFtZS5kYXRhKCksIGotPnZhbHVlLm1fbmFtZS5kYXRhKCkpOworICAgICAgICAgICAg
Zm9yIChWZWN0b3I8Q1N0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGFsaWFzID0gai0+dmFsdWUubV9h
bGlhc2VzLmJlZ2luKCk7IGFsaWFzICE9IGotPnZhbHVlLm1fYWxpYXNlcy5lbmQoKTsgKythbGlh
cykKKyAgICAgICAgICAgICAgICByZWdpc3RyYXIoYWxpYXMtPmRhdGEoKSwgai0+dmFsdWUubV9u
YW1lLmRhdGEoKSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0xNjIsNyArMTYyLDcgQEAgdm9p
ZCBUZXh0Q29kZWNXaW46OnJlZ2lzdGVyRXh0ZW5kZWRDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFy
IHJlZ2lzdHJhcikKICAgICBmb3IgKENoYXJzZXRTZXQ6Oml0ZXJhdG9yIGkgPSBzdXBwb3J0ZWRD
aGFyc2V0cygpLmJlZ2luKCk7IGkgIT0gc3VwcG9ydGVkQ2hhcnNldHMoKS5lbmQoKTsgKytpKSB7
CiAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBDaGFyc2V0SW5mbz46Oml0ZXJhdG9yIGogPSBrbm93
bkNoYXJzZXRzKCkuZmluZCgqaSk7CiAgICAgICAgIGlmIChqICE9IGtub3duQ2hhcnNldHMoKS5l
bmQoKSkKLSAgICAgICAgICAgIHJlZ2lzdHJhcihqLT5zZWNvbmQubV9uYW1lLmRhdGEoKSwgbmV3
VGV4dENvZGVjV2luLCAwKTsKKyAgICAgICAgICAgIHJlZ2lzdHJhcihqLT52YWx1ZS5tX25hbWUu
ZGF0YSgpLCBuZXdUZXh0Q29kZWNXaW4sIDApOwogICAgIH0KIH0KIApAQCAtMzAxLDcgKzMwMSw3
IEBAIHZvaWQgVGV4dENvZGVjV2luOjplbnVtZXJhdGVTdXBwb3J0ZWRFbmNvZGluZ3MoRW5jb2Rp
bmdSZWNlaXZlciYgcmVjZWl2ZXIpCiAgICAgbGFuZ3VhZ2VNYW5hZ2VyKCk7CiAgICAgZm9yIChD
aGFyc2V0U2V0OjppdGVyYXRvciBpID0gc3VwcG9ydGVkQ2hhcnNldHMoKS5iZWdpbigpOyBpICE9
IHN1cHBvcnRlZENoYXJzZXRzKCkuZW5kKCk7ICsraSkgewogICAgICAgICBIYXNoTWFwPFN0cmlu
ZywgQ2hhcnNldEluZm8+OjppdGVyYXRvciBqID0ga25vd25DaGFyc2V0cygpLmZpbmQoKmkpOwot
ICAgICAgICBpZiAoaiAhPSBrbm93bkNoYXJzZXRzKCkuZW5kKCkgJiYgIXJlY2VpdmVyLnJlY2Vp
dmUoai0+c2Vjb25kLm1fbmFtZS5kYXRhKCksIGotPnNlY29uZC5tX2ZyaWVuZGx5TmFtZS5jaGFy
YWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLCBqLT5zZWNvbmQubV9jb2RlUGFnZSkpCisgICAg
ICAgIGlmIChqICE9IGtub3duQ2hhcnNldHMoKS5lbmQoKSAmJiAhcmVjZWl2ZXIucmVjZWl2ZShq
LT52YWx1ZS5tX25hbWUuZGF0YSgpLCBqLT52YWx1ZS5tX2ZyaWVuZGx5TmFtZS5jaGFyYWN0ZXJz
V2l0aE51bGxUZXJtaW5hdGlvbigpLCBqLT52YWx1ZS5tX2NvZGVQYWdlKSkKICAgICAgICAgICAg
IGJyZWFrOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dp
bi9DbGlwYm9hcmRVdGlsaXRpZXNXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2lu
L0NsaXBib2FyZFV0aWxpdGllc1dpbi5jcHAKaW5kZXggNjFlMzYyMWI1M2RjNDk1ODY1MTNhYjc0
MTQ0ZGY1ZTYyYmExYzE2MC4uNzVmZjlkZTdiZTEwMjNmN2UxMmZiOTlkZDE2Y2U3NDZmYjhlZGYy
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFV0aWxp
dGllc1dpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFV0
aWxpdGllc1dpbi5jcHAKQEAgLTc2LDcgKzc2LDcgQEAgc3RhdGljIGJvb2wgZ2V0RGF0YU1hcEl0
ZW0oY29uc3QgRHJhZ0RhdGFNYXAqIGRhdGFPYmplY3QsIEZPUk1BVEVUQyogZm9ybWF0LCBTdHIK
ICAgICBEcmFnRGF0YU1hcDo6Y29uc3RfaXRlcmF0b3IgZm91bmQgPSBkYXRhT2JqZWN0LT5maW5k
KGZvcm1hdC0+Y2ZGb3JtYXQpOwogICAgIGlmIChmb3VuZCA9PSBkYXRhT2JqZWN0LT5lbmQoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGl0ZW0gPSBmb3VuZC0+c2Vjb25kWzBdOworICAg
IGl0ZW0gPSBmb3VuZC0+dmFsdWVbMF07CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTgyNiw3
ICs4MjYsNyBAQCB2b2lkIGdldENsaXBib2FyZERhdGEoSURhdGFPYmplY3QqIGRhdGFPYmplY3Qs
IEZPUk1BVEVUQyogZm9ybWF0LCBWZWN0b3I8U3RyaW5nPgogICAgIENsaXBib2FyZEZvcm1hdE1h
cDo6Y29uc3RfaXRlcmF0b3IgZm91bmQgPSBmb3JtYXRNYXAuZmluZChmb3JtYXQtPmNmRm9ybWF0
KTsKICAgICBpZiAoZm91bmQgPT0gZm9ybWF0TWFwLmVuZCgpKQogICAgICAgICByZXR1cm47Ci0g
ICAgZm91bmQtPnNlY29uZC0+Z2V0U3RyaW5nKGRhdGFPYmplY3QsIGZvdW5kLT5zZWNvbmQtPmZv
cm1hdCwgZGF0YVN0cmluZ3MpOworICAgIGZvdW5kLT52YWx1ZS0+Z2V0U3RyaW5nKGRhdGFPYmpl
Y3QsIGZvdW5kLT52YWx1ZS0+Zm9ybWF0LCBkYXRhU3RyaW5ncyk7CiB9CiAKIHZvaWQgc2V0Q2xp
cGJvYXJkRGF0YShJRGF0YU9iamVjdCogZGF0YU9iamVjdCwgVUlOVCBmb3JtYXQsIGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBkYXRhU3RyaW5ncykKQEAgLTgzNSw3ICs4MzUsNyBAQCB2b2lkIHNldENs
aXBib2FyZERhdGEoSURhdGFPYmplY3QqIGRhdGFPYmplY3QsIFVJTlQgZm9ybWF0LCBjb25zdCBW
ZWN0b3I8U3RyaW5nPgogICAgIENsaXBib2FyZEZvcm1hdE1hcDo6Y29uc3RfaXRlcmF0b3IgZm91
bmQgPSBmb3JtYXRNYXAuZmluZChmb3JtYXQpOwogICAgIGlmIChmb3VuZCA9PSBmb3JtYXRNYXAu
ZW5kKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBmb3VuZC0+c2Vjb25kLT5zZXRTdHJpbmcoZGF0
YU9iamVjdCwgZm91bmQtPnNlY29uZC0+Zm9ybWF0LCBkYXRhU3RyaW5ncyk7CisgICAgZm91bmQt
PnZhbHVlLT5zZXRTdHJpbmcoZGF0YU9iamVjdCwgZm91bmQtPnZhbHVlLT5mb3JtYXQsIGRhdGFT
dHJpbmdzKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS93aW4vQ2xpcGJvYXJkV2luLmNwcAppbmRleCBkMWMxMzg2YTE0NTIwNGMzOGUxODFi
ZDc1YTI4YjI4YzkwNTM3NWQwLi5mOTUwYjA4Y2VmYmY2ZDBiZTAxYjVlNDBhY2QwZGI2ODNhNDJh
M2MzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xpcGJvYXJkV2lu
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xpcGJvYXJkV2luLmNwcApA
QCAtNTI1LDcgKzUyNSw3IEBAIEhhc2hTZXQ8U3RyaW5nPiBDbGlwYm9hcmRXaW46OnR5cGVzKCkg
Y29uc3QKICAgICB9IGVsc2UgewogICAgICAgICBmb3IgKERyYWdEYXRhTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IG1fZHJhZ0RhdGFNYXAuYmVnaW4oKTsgaXQgIT0gbV9kcmFnRGF0YU1hcC5lbmQo
KTsgKytpdCkgewogICAgICAgICAgICAgRk9STUFURVRDIGRhdGE7Ci0gICAgICAgICAgICBkYXRh
LmNmRm9ybWF0ID0gKCppdCkuZmlyc3Q7CisgICAgICAgICAgICBkYXRhLmNmRm9ybWF0ID0gKCpp
dCkua2V5OwogICAgICAgICAgICAgYWRkTWltZVR5cGVzRm9yRm9ybWF0KHJlc3VsdHMsIGRhdGEp
OwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
d2luL0ZpbGVTeXN0ZW1XaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0ZpbGVT
eXN0ZW1XaW4uY3BwCmluZGV4IGVlMDI1NWUxMjg1OGVhMzliMWJjOTQ2NjUxMjkwNzNjNGRjYTE5
NGQuLjA3OWY4ZDZlOGQ2NDViMDBmYTI5YTFiNGI1ZTE2MmJlZmY2MDVlOTQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9GaWxlU3lzdGVtV2luLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5jcHAKQEAgLTIzOCw3ICsyMzgs
NyBAQCBzdGF0aWMgU3RyaW5nIGNhY2hlZFN0b3JhZ2VEaXJlY3RvcnkoRFdPUkQgcGF0aElkZW50
aWZpZXIpCiAKICAgICBIYXNoTWFwPERXT1JELCBTdHJpbmc+OjppdGVyYXRvciBpdCA9IGRpcmVj
dG9yaWVzLmZpbmQocGF0aElkZW50aWZpZXIpOwogICAgIGlmIChpdCAhPSBkaXJlY3Rvcmllcy5l
bmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBpdC0+dmFs
dWU7CiAKICAgICBTdHJpbmcgZGlyZWN0b3J5ID0gc3RvcmFnZURpcmVjdG9yeShwYXRoSWRlbnRp
Zmllcik7CiAgICAgZGlyZWN0b3JpZXMuYWRkKHBhdGhJZGVudGlmaWVyLCBkaXJlY3RvcnkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1J1bkxvb3BXaW4uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1J1bkxvb3BXaW4uY3BwCmluZGV4IDE2NjNiNjYx
MzNhYmMyY2IzZmQwMDU3ZDE5NjcxMjM3ZDBlNzk5ZGEuLjE3ZDY4NDVlOWZmZGMzOTI4YzA2N2M3
YzE1ODgzYWFiOTBkMjlhNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dp
bi9SdW5Mb29wV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUnVuTG9v
cFdpbi5jcHAKQEAgLTEyNiw3ICsxMjYsNyBAQCB2b2lkIFJ1bkxvb3A6OlRpbWVyQmFzZTo6dGlt
ZXJGaXJlZChSdW5Mb29wKiBydW5Mb29wLCB1aW50NjRfdCBJRCkKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIFRpbWVyQmFzZSogdGltZXIgPSBpdC0+c2Vjb25kOworICAgIFRpbWVyQmFz
ZSogdGltZXIgPSBpdC0+dmFsdWU7CiAKICAgICBpZiAoIXRpbWVyLT5tX2lzUmVwZWF0aW5nKSB7
CiAgICAgICAgIHJ1bkxvb3AtPm1fYWN0aXZlVGltZXJzLnJlbW92ZShpdCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vV0NEYXRhT2JqZWN0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3dpbi9XQ0RhdGFPYmplY3QuY3BwCmluZGV4IDBjMDNjZTAwZjIyMWFl
MGFjODFiOGVlNzJjZmUwZDA1NGEwNTY2NTQuLmRmYmQwMDVmYzQzNmY4ZDcyMTZhMjE3NDY2OTli
N2RmODFiNTgwNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9XQ0Rh
dGFPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9XQ0RhdGFPYmpl
Y3QuY3BwCkBAIC0xNjksNyArMTY5LDcgQEAgSFJFU1VMVCBXQ0RhdGFPYmplY3Q6OmNyZWF0ZUlu
c3RhbmNlKFdDRGF0YU9iamVjdCoqIHJlc3VsdCwgY29uc3QgRHJhZ0RhdGFNYXAmIGQKICAgICAq
cmVzdWx0ID0gbmV3IFdDRGF0YU9iamVjdDsKIAogICAgIGZvciAoRHJhZ0RhdGFNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gZGF0YU1hcC5iZWdpbigpOyBpdCAhPSBkYXRhTWFwLmVuZCgpOyArK2l0
KQotICAgICAgICBzZXRDbGlwYm9hcmREYXRhKCpyZXN1bHQsIGl0LT5maXJzdCwgaXQtPnNlY29u
ZCk7CisgICAgICAgIHNldENsaXBib2FyZERhdGEoKnJlc3VsdCwgaXQtPmtleSwgaXQtPnZhbHVl
KTsKICAgICByZXR1cm4gU19PSzsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vd2luY2UvTUlNRVR5cGVSZWdpc3RyeVdpbkNFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3dpbmNlL01JTUVUeXBlUmVnaXN0cnlXaW5DRS5jcHAKaW5kZXggOGEwZDNkMmI2MTYy
YjQ2ZGJiN2Q2MmYyMmNhMDMyNmRjN2ZjZWRjNS4uODg4ODQ3MWE5NDFiNjcyN2Q2NTdmNDY0Mjk3
ZWRjOGE2NTQyMmVkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luY2Uv
TUlNRVR5cGVSZWdpc3RyeVdpbkNFLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93
aW5jZS9NSU1FVHlwZVJlZ2lzdHJ5V2luQ0UuY3BwCkBAIC0xMDEsNyArMTAxLDcgQEAgU3RyaW5n
IE1JTUVUeXBlUmVnaXN0cnk6OmdldFByZWZlcnJlZEV4dGVuc2lvbkZvck1JTUVUeXBlKGNvbnN0
IFN0cmluZyYgdHlwZSkKICAgICBpbml0TUlNRVR5cGVFbnRlbnNpb25NYXAoKTsKIAogICAgIGZv
ciAoSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46Oml0ZXJhdG9yIGkgPSBtaW1ldHlwZU1hcC5iZWdp
bigpOyBpICE9IG1pbWV0eXBlTWFwLmVuZCgpOyArK2kpIHsKLSAgICAgICAgaWYgKGVxdWFsSWdu
b3JpbmdDYXNlKGktPnNlY29uZCwgdHlwZSkpCisgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2Fz
ZShpLT52YWx1ZSwgdHlwZSkpCiAgICAgICAgICAgICByZXR1cm4gaS0+Zmlyc3Q7CiAgICAgfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC9Db250ZXh0TWVudVd4LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L0NvbnRleHRNZW51V3guY3BwCmluZGV4IDQx
ODlhYTk1MmZmZWI0YmNhMjNkYjcwYTk4MDYxZWVkZmY0ZjFkZjQuLmRmMmVlNTI3ZDk0OGUxNjJh
YmI4OTQyMzhiYjJiMzg0ZDg2OWY2MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3d4L0NvbnRleHRNZW51V3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4
L0NvbnRleHRNZW51V3guY3BwCkBAIC02Nyw4ICs2Nyw4IEBAIHZvaWQgQ29udGV4dE1lbnU6OmFw
cGVuZEl0ZW0oQ29udGV4dE1lbnVJdGVtJiBpdGVtKQogCiAgICAgSXRlbUFjdGlvbk1hcDo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gc19pdGVtQWN0aW9ucy5lbmQoKTsKICAgICBmb3IgKEl0ZW1BY3Rp
b25NYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gc19pdGVtQWN0aW9ucy5iZWdpbigpOyAgaXQgIT0g
ZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kID09IGl0ZW1EZXNjcmlwdGlvbi5h
Y3Rpb24pCi0gICAgICAgICAgICBpZFd4ID0gaXQtPmZpcnN0OworICAgICAgICBpZiAoaXQtPnZh
bHVlID09IGl0ZW1EZXNjcmlwdGlvbi5hY3Rpb24pCisgICAgICAgICAgICBpZFd4ID0gaXQtPmtl
eTsKICAgICB9CiAKICAgICBpZiAoaXRlbURlc2NyaXB0aW9uLnN1Yk1lbnUpIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAKaW5kZXggOTUwOGM1YjhjOTVmZTg0MWMx
YTA4ZjIzMWQwYjBlMmIwYzM3MTFiMC4uZmNjYjAwYTVmNWJmMmZlM2JjN2FkYmQ2NzlhOGJmNTc5
NmVkYzVlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFz
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAKQEAg
LTE2Miw3ICsxNjIsNyBAQCBib29sIFBsdWdpbkRhdGFiYXNlOjpyZWZyZXNoKCkKICAgICAgICAg
TUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBtYXBfaXQgPSAoKml0KS0+bWlt
ZVRvRGVzY3JpcHRpb25zKCkuYmVnaW4oKTsKICAgICAgICAgTUlNRVRvRGVzY3JpcHRpb25zTWFw
Ojpjb25zdF9pdGVyYXRvciBtYXBfZW5kID0gKCppdCktPm1pbWVUb0Rlc2NyaXB0aW9ucygpLmVu
ZCgpOwogICAgICAgICBmb3IgKDsgbWFwX2l0ICE9IG1hcF9lbmQ7ICsrbWFwX2l0KQotICAgICAg
ICAgICAgbV9yZWdpc3RlcmVkTUlNRVR5cGVzLmFkZChtYXBfaXQtPmZpcnN0KTsKKyAgICAgICAg
ICAgIG1fcmVnaXN0ZXJlZE1JTUVUeXBlcy5hZGQobWFwX2l0LT5rZXkpOwogICAgIH0KIAogICAg
IHJldHVybiB0cnVlOwpAQCAtMjQzLDkgKzI0Myw5IEBAIFN0cmluZyBQbHVnaW5EYXRhYmFzZTo6
TUlNRVR5cGVGb3JFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBleHRlbnNpb24pIGNvbnN0CiAgICAg
ICAgIE1JTUVUb0V4dGVuc2lvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIG1pbWVfZW5kID0gKCppdCkt
Pm1pbWVUb0V4dGVuc2lvbnMoKS5lbmQoKTsKIAogICAgICAgICBmb3IgKE1JTUVUb0V4dGVuc2lv
bnNNYXA6OmNvbnN0X2l0ZXJhdG9yIG1pbWVfaXQgPSAoKml0KS0+bWltZVRvRXh0ZW5zaW9ucygp
LmJlZ2luKCk7IG1pbWVfaXQgIT0gbWltZV9lbmQ7ICsrbWltZV9pdCkgewotICAgICAgICAgICAg
bWltZVR5cGUgPSBtaW1lX2l0LT5maXJzdDsKKyAgICAgICAgICAgIG1pbWVUeXBlID0gbWltZV9p
dC0+a2V5OwogICAgICAgICAgICAgUGx1Z2luUGFja2FnZSogcHJlZmVycmVkUGx1Z2luID0gbV9w
cmVmZXJyZWRQbHVnaW5zLmdldChtaW1lVHlwZSkuZ2V0KCk7Ci0gICAgICAgICAgICBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgZXh0ZW5zaW9ucyA9IG1pbWVfaXQtPnNlY29uZDsKKyAgICAgICAgICAg
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBleHRlbnNpb25zID0gbWltZV9pdC0+dmFsdWU7CiAgICAg
ICAgICAgICBib29sIGZvdW5kTWFwcGluZyA9IGZhbHNlOwogICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGV4dGVuc2lvbnMuc2l6ZSgpOyBpKyspIHsKICAgICAgICAgICAgICAg
ICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZXh0ZW5zaW9uc1tpXSwgZXh0ZW5zaW9uKSkgewpAQCAt
MzM1LDggKzMzNSw4IEBAIHZvaWQgUGx1Z2luRGF0YWJhc2U6OnJlbW92ZShQbHVnaW5QYWNrYWdl
KiBwYWNrYWdlKQogICAgIE1JTUVUb0V4dGVuc2lvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
cGFja2FnZS0+bWltZVRvRXh0ZW5zaW9ucygpLmJlZ2luKCk7CiAgICAgTUlNRVRvRXh0ZW5zaW9u
c01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcGFja2FnZS0+bWltZVRvRXh0ZW5zaW9ucygpLmVu
ZCgpOwogICAgIGZvciAoIDsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFBsdWdpblBhY2th
Z2VCeU5hbWVNYXA6Oml0ZXJhdG9yIHBhY2thZ2VJbk1hcCA9IG1fcHJlZmVycmVkUGx1Z2lucy5m
aW5kKGl0LT5maXJzdCk7Ci0gICAgICAgIGlmIChwYWNrYWdlSW5NYXAgIT0gbV9wcmVmZXJyZWRQ
bHVnaW5zLmVuZCgpICYmIHBhY2thZ2VJbk1hcC0+c2Vjb25kID09IHBhY2thZ2UpCisgICAgICAg
IFBsdWdpblBhY2thZ2VCeU5hbWVNYXA6Oml0ZXJhdG9yIHBhY2thZ2VJbk1hcCA9IG1fcHJlZmVy
cmVkUGx1Z2lucy5maW5kKGl0LT5rZXkpOworICAgICAgICBpZiAocGFja2FnZUluTWFwICE9IG1f
cHJlZmVycmVkUGx1Z2lucy5lbmQoKSAmJiBwYWNrYWdlSW5NYXAtPnZhbHVlID09IHBhY2thZ2Up
CiAgICAgICAgICAgICBtX3ByZWZlcnJlZFBsdWdpbnMucmVtb3ZlKHBhY2thZ2VJbk1hcCk7CiAg
ICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbk1haW5UaHJl
YWRTY2hlZHVsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5NYWluVGhyZWFk
U2NoZWR1bGVyLmNwcAppbmRleCA3NTI4Njc2YjEyYWE4YmRhOGYzM2IzMmVmNDBjYzg3NjU3NjZk
MzFhLi4zOWFlNzk0ZTJmYjA5NzIxOWE1MjIzZWJmYmVlZGY2OWI2ZTI4NjJjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luTWFpblRocmVhZFNjaGVkdWxlci5jcHAK
QEAgLTQ5LDcgKzQ5LDcgQEAgdm9pZCBQbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyOjpzY2hlZHVs
ZUNhbGwoTlBQIG5wcCwgTWFpblRocmVhZEZ1bmN0aW9uIGZ1bmN0aW8KICAgICBpZiAoaXQgPT0g
bV9jYWxsUXVldWVNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGl0LT5zZWNvbmQu
YXBwZW5kKENhbGwoZnVuY3Rpb24sIHVzZXJEYXRhKSk7CisgICAgaXQtPnZhbHVlLmFwcGVuZChD
YWxsKGZ1bmN0aW9uLCB1c2VyRGF0YSkpOwogCiAgICAgaWYgKCFtX2NhbGxQZW5kaW5nKSB7CiAg
ICAgICAgIGNhbGxPbk1haW5UaHJlYWQobWFpblRocmVhZENhbGxiYWNrLCB0aGlzKTsKQEAgLTk3
LDcgKzk3LDcgQEAgdm9pZCBQbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyOjpkaXNwYXRjaENhbGxz
KCkKICAgICAgICAgLy8gRW1wdHkgYWxsIHRoZSBxdWV1ZXMgaW4gdGhlIG9yaWdpbmFsIG1hcAog
ICAgICAgICBDYWxsUXVldWVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fY2FsbFF1ZXVlTWFwLmVuZCgp
OwogICAgICAgICBmb3IgKENhbGxRdWV1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtX2NhbGxRdWV1ZU1h
cC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBpdC0+c2Vjb25kLmNsZWFy
KCk7CisgICAgICAgICAgICBpdC0+dmFsdWUuY2xlYXIoKTsKICAgICB9CiAKICAgICBtX2NhbGxQ
ZW5kaW5nID0gZmFsc2U7CkBAIC0xMDUsNyArMTA1LDcgQEAgdm9pZCBQbHVnaW5NYWluVGhyZWFk
U2NoZWR1bGVyOjpkaXNwYXRjaENhbGxzKCkKIAogICAgIENhbGxRdWV1ZU1hcDo6aXRlcmF0b3Ig
ZW5kID0gY29weS5lbmQoKTsKICAgICBmb3IgKENhbGxRdWV1ZU1hcDo6aXRlcmF0b3IgaXQgPSBj
b3B5LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgZGlzcGF0Y2hDYWxsc0ZvclBs
dWdpbihpdC0+Zmlyc3QsIGl0LT5zZWNvbmQpOworICAgICAgICBkaXNwYXRjaENhbGxzRm9yUGx1
Z2luKGl0LT5rZXksIGl0LT52YWx1ZSk7CiB9CiAKIHZvaWQgUGx1Z2luTWFpblRocmVhZFNjaGVk
dWxlcjo6bWFpblRocmVhZENhbGxiYWNrKHZvaWQqIGNvbnRleHQpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblN0cmVhbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbHVn
aW5zL1BsdWdpblN0cmVhbS5jcHAKaW5kZXggMDAyMzgwZjVmOTUzZjliZWUyYzU2NWU5Y2E1YzEz
MmFkNGMwYWY0YS4uZmRiNzg2MDM1YjBkMTY1NDgyMWZjYjQ2MGFkNGUyZDNhNzFhNWEzNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5TdHJlYW0uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luU3RyZWFtLmNwcApAQCAtMTQ3LDkgKzE0Nyw5IEBA
IHZvaWQgUGx1Z2luU3RyZWFtOjpzdGFydFN0cmVhbSgpCiAKICAgICAgICAgSFRUUEhlYWRlck1h
cDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9yZXNvdXJjZVJlc3BvbnNlLmh0dHBIZWFkZXJGaWVs
ZHMoKS5lbmQoKTsKICAgICAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IG1fcmVzb3VyY2VSZXNwb25zZS5odHRwSGVhZGVyRmllbGRzKCkuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+Zmlyc3Qp
OworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPmtleSk7CiAgICAgICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZChzZXBhcmF0b3IpOwotICAgICAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQoaXQtPnNlY29uZCk7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZChpdC0+dmFsdWUpOwogICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7CiAg
ICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ibGFja2JlcnJ5
L1BsdWdpbkRhdGFCbGFja0JlcnJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvYmxhY2ti
ZXJyeS9QbHVnaW5EYXRhQmxhY2tCZXJyeS5jcHAKaW5kZXggZDkyMGQxZmJkNWExMTI0NjAzYThj
ZDk4ZmExMzQzNTZlNzMwNmI1OS4uNDc0NjYxNmRlMzM1ZmE4M2NlYzk2ZDkzMGUyMGQ4YzI4ZTk0
YzNiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ibGFja2JlcnJ5L1BsdWdp
bkRhdGFCbGFja0JlcnJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2JsYWNrYmVy
cnkvUGx1Z2luRGF0YUJsYWNrQmVycnkuY3BwCkBAIC00MSw4ICs0MSw4IEBAIHZvaWQgUGx1Z2lu
RGF0YTo6aW5pdFBsdWdpbnMoY29uc3QgUGFnZSopCiAgICAgICAgIE1JTUVUb0Rlc2NyaXB0aW9u
c01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWltZVRvRGVzY3JpcHRpb25zLmVuZCgpOwogICAg
ICAgICBmb3IgKE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtaW1l
VG9EZXNjcmlwdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBN
aW1lQ2xhc3NJbmZvIG1pbWU7Ci0gICAgICAgICAgICBtaW1lLnR5cGUgPSBpdC0+Zmlyc3Q7Ci0g
ICAgICAgICAgICBtaW1lLmRlc2MgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgbWltZS50eXBl
ID0gaXQtPmtleTsKKyAgICAgICAgICAgIG1pbWUuZGVzYyA9IGl0LT52YWx1ZTsKICAgICAgICAg
ICAgIG1pbWUuZXh0ZW5zaW9ucyA9IHBhY2thZ2UtPm1pbWVUb0V4dGVuc2lvbnMoKS5nZXQobWlt
ZS50eXBlKTsKICAgICAgICAgICAgIGluZm8ubWltZXMuYXBwZW5kKG1pbWUpOwogICAgICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3d4L1BsdWdpbkRhdGFXeC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3d4L1BsdWdpbkRhdGFXeC5jcHAKaW5kZXggMGViODkw
ZmVmMDVhMTE1ZWFjZTQyNjM3NjgwYTNkNmExMmY1NzcyOS4uMjc5NTJjNGFlOGJmYTQ5ZTk4YjEx
YWU5OTU5ZmM3NTRlNGRiMjNiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy93
eC9QbHVnaW5EYXRhV3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd3gvUGx1Z2lu
RGF0YVd4LmNwcApAQCAtNTEsOCArNTEsOCBAQCB2b2lkIFBsdWdpbkRhdGE6OmluaXRQbHVnaW5z
KGNvbnN0IFBhZ2UqKQogICAgICAgICBmb3IgKE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7CiAgICAgICAgICAgICBNaW1lQ2xhc3NJbmZvIG1pbWU7CiAKLSAgICAgICAgICAgIG1pbWUu
dHlwZSA9IGl0LT5maXJzdDsKLSAgICAgICAgICAgIG1pbWUuZGVzYyA9IGl0LT5zZWNvbmQ7Cisg
ICAgICAgICAgICBtaW1lLnR5cGUgPSBpdC0+a2V5OworICAgICAgICAgICAgbWltZS5kZXNjID0g
aXQtPnZhbHVlOwogICAgICAgICAgICAgbWltZS5leHRlbnNpb25zID0gcGFja2FnZS0+bWltZVRv
RXh0ZW5zaW9ucygpLmdldChtaW1lLnR5cGUpOwogCiAgICAgICAgICAgICBpbmZvLm1pbWVzLmFw
cGVuZChtaW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GbG93VGhy
ZWFkQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmxvd1RocmVhZENv
bnRyb2xsZXIuY3BwCmluZGV4IGRjOTQzMmM3NjUwNmNhMGY0NTgxYWJkNzFhMDFjZDg4ZDY0NjA3
NmEuLjQ4NzFhZjY3MDQ3OTIzM2Y5ZmRhNDg4YmI5YmNjZDA3MmIyNDcwZjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GbG93VGhyZWFkQ29udHJvbGxlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0Zsb3dUaHJlYWRDb250cm9sbGVyLmNwcApAQCAtMTIz
LDkgKzEyMyw5IEBAIHZvaWQgRmxvd1RocmVhZENvbnRyb2xsZXI6OnVucmVnaXN0ZXJOYW1lZEZs
b3dDb250ZW50Tm9kZShOb2RlKiBjb250ZW50Tm9kZSkKICAgICBBU1NFUlQoY29udGVudE5vZGUg
JiYgY29udGVudE5vZGUtPmlzRWxlbWVudE5vZGUoKSk7CiAgICAgSGFzaE1hcDxOb2RlKiwgUmVu
ZGVyTmFtZWRGbG93VGhyZWFkKj46Oml0ZXJhdG9yIGl0ID0gbV9tYXBOYW1lZEZsb3dDb250ZW50
Tm9kZXMuZmluZChjb250ZW50Tm9kZSk7CiAgICAgQVNTRVJUKGl0ICE9IG1fbWFwTmFtZWRGbG93
Q29udGVudE5vZGVzLmVuZCgpKTsKLSAgICBBU1NFUlQoaXQtPnNlY29uZCk7Ci0gICAgQVNTRVJU
KGl0LT5zZWNvbmQtPmhhc0NvbnRlbnROb2RlKGNvbnRlbnROb2RlKSk7Ci0gICAgaXQtPnNlY29u
ZC0+dW5yZWdpc3Rlck5hbWVkRmxvd0NvbnRlbnROb2RlKGNvbnRlbnROb2RlKTsKKyAgICBBU1NF
UlQoaXQtPnZhbHVlKTsKKyAgICBBU1NFUlQoaXQtPnZhbHVlLT5oYXNDb250ZW50Tm9kZShjb250
ZW50Tm9kZSkpOworICAgIGl0LT52YWx1ZS0+dW5yZWdpc3Rlck5hbWVkRmxvd0NvbnRlbnROb2Rl
KGNvbnRlbnROb2RlKTsKICAgICBtX21hcE5hbWVkRmxvd0NvbnRlbnROb2Rlcy5yZW1vdmUoY29u
dGVudE5vZGUpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5s
aW5lRmxvd0JveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5j
cHAKaW5kZXggYTk2ZjYxMjI1ODQzYTk3MGYyZmY2YmI3OTQ0YmQ5Y2VmOTE2YTliNi4uMzM2N2Qx
ZDc1MzQ2YzkzNjhmZmI5NTU1N2I2OTJjMjU1ZDk5YjlhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcApAQCAtNDU4LDcgKzQ1OCw3IEBAIGJvb2wgSW5saW5l
Rmxvd0JveDo6cmVxdWlyZXNJZGVvZ3JhcGhpY0Jhc2VsaW5lKGNvbnN0IEdseXBoT3ZlcmZsb3dB
bmRGYWxsYmFja0ZvCiAgICAgICAgICAgICBjb25zdCBWZWN0b3I8Y29uc3QgU2ltcGxlRm9udERh
dGEqPiogdXNlZEZvbnRzID0gMDsKICAgICAgICAgICAgIGlmIChjdXJyLT5pc0lubGluZVRleHRC
b3goKSkgewogICAgICAgICAgICAgICAgIEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IHRleHRCb3hEYXRhTWFwLmZpbmQodG9JbmxpbmVUZXh0Qm94
KGN1cnIpKTsKLSAgICAgICAgICAgICAgICB1c2VkRm9udHMgPSBpdCA9PSB0ZXh0Qm94RGF0YU1h
cC5lbmQoKSA/IDAgOiAmaXQtPnNlY29uZC5maXJzdDsKKyAgICAgICAgICAgICAgICB1c2VkRm9u
dHMgPSBpdCA9PSB0ZXh0Qm94RGF0YU1hcC5lbmQoKSA/IDAgOiAmaXQtPnZhbHVlLmZpcnN0Owog
ICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAodXNlZEZvbnRzKSB7CkBAIC04MjIsNyAr
ODIyLDcgQEAgaW5saW5lIHZvaWQgSW5saW5lRmxvd0JveDo6YWRkVGV4dEJveFZpc3VhbE92ZXJm
bG93KElubGluZVRleHRCb3gqIHRleHRCb3gsIEdseXAKICAgICBSZW5kZXJTdHlsZSogc3R5bGUg
PSB0ZXh0Qm94LT5yZW5kZXJlcigpLT5zdHlsZShpc0ZpcnN0TGluZVN0eWxlKCkpOwogICAgIAog
ICAgIEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFwOjppdGVyYXRvciBpdCA9IHRleHRC
b3hEYXRhTWFwLmZpbmQodGV4dEJveCk7Ci0gICAgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxv
dyA9IGl0ID09IHRleHRCb3hEYXRhTWFwLmVuZCgpID8gMCA6ICZpdC0+c2Vjb25kLnNlY29uZDsK
KyAgICBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93ID0gaXQgPT0gdGV4dEJveERhdGFNYXAu
ZW5kKCkgPyAwIDogJml0LT52YWx1ZS5zZWNvbmQ7CiAgICAgYm9vbCBpc0ZsaXBwZWRMaW5lID0g
c3R5bGUtPmlzRmxpcHBlZExpbmVzV3JpdGluZ01vZGUoKTsKIAogICAgIGludCB0b3BHbHlwaEVk
Z2UgPSBnbHlwaE92ZXJmbG93ID8gKGlzRmxpcHBlZExpbmUgPyBnbHlwaE92ZXJmbG93LT5ib3R0
b20gOiBnbHlwaE92ZXJmbG93LT50b3ApIDogMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2suY3BwCmluZGV4IDBlNGE3N2E3OGNjZmRiMTEyNjFiNzU5ZDNlMTllYTBhNGQ4YjY1
MTEuLjQyMzY3NGIxMjdhODI4MzNiMDNhODI0N2Y0MmMxMjRlZWQ5YTBjYzEgMTAwNzU1Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcApAQCAtNDM2OSw3ICs0MzY5LDcgQEAgdm9p
ZCBSZW5kZXJCbG9jazo6Y2xlYXJGbG9hdHMoKQogCiAgICAgICAgIFJlbmRlcmVyVG9GbG9hdElu
Zm9NYXA6Oml0ZXJhdG9yIGVuZCA9IGZsb2F0TWFwLmVuZCgpOwogICAgICAgICBmb3IgKFJlbmRl
cmVyVG9GbG9hdEluZm9NYXA6Oml0ZXJhdG9yIGl0ID0gZmxvYXRNYXAuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3Qg
PSAoKml0KS5zZWNvbmQ7CisgICAgICAgICAgICBGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmpl
Y3QgPSAoKml0KS52YWx1ZTsKICAgICAgICAgICAgIGlmICghZmxvYXRpbmdPYmplY3QtPmlzRGVz
Y2VuZGFudCgpKSB7CiAgICAgICAgICAgICAgICAgY2hhbmdlTG9naWNhbFRvcCA9IDA7CiAgICAg
ICAgICAgICAgICAgY2hhbmdlTG9naWNhbEJvdHRvbSA9IG1heChjaGFuZ2VMb2dpY2FsQm90dG9t
LCBsb2dpY2FsQm90dG9tRm9yRmxvYXQoZmxvYXRpbmdPYmplY3QpKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAKaW5kZXggMDg4YzE0
Y2JiYTMxYTFhZWQzMWZjOTM0N2I0ZTgyYTNmNjhjZGIxZC4uMmNmZjBjYzc2NTBlN2IzN2FjMjU1
ZDZjMzA4MWRiYmE3NTczOWE0YSAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAKQEAgLTY3NywxNCArNjc3LDE0IEBAIHN0YXRpYyBp
bmxpbmUgdm9pZCBzZXRMb2dpY2FsV2lkdGhGb3JUZXh0UnVuKFJvb3RJbmxpbmVCb3gqIGxpbmVC
b3gsIEJpZGlSdW4qIHJ1CiAgICAgaWYgKCFmYWxsYmFja0ZvbnRzLmlzRW1wdHkoKSkgewogICAg
ICAgICBBU1NFUlQocnVuLT5tX2JveC0+aXNUZXh0KCkpOwogICAgICAgICBHbHlwaE92ZXJmbG93
QW5kRmFsbGJhY2tGb250c01hcDo6aXRlcmF0b3IgaXQgPSB0ZXh0Qm94RGF0YU1hcC5hZGQodG9J
bmxpbmVUZXh0Qm94KHJ1bi0+bV9ib3gpLCBtYWtlX3BhaXIoVmVjdG9yPGNvbnN0IFNpbXBsZUZv
bnREYXRhKj4oKSwgR2x5cGhPdmVyZmxvdygpKSkuaXRlcmF0b3I7Ci0gICAgICAgIEFTU0VSVChp
dC0+c2Vjb25kLmZpcnN0LmlzRW1wdHkoKSk7Ci0gICAgICAgIGNvcHlUb1ZlY3RvcihmYWxsYmFj
a0ZvbnRzLCBpdC0+c2Vjb25kLmZpcnN0KTsKKyAgICAgICAgQVNTRVJUKGl0LT52YWx1ZS5maXJz
dC5pc0VtcHR5KCkpOworICAgICAgICBjb3B5VG9WZWN0b3IoZmFsbGJhY2tGb250cywgaXQtPnZh
bHVlLmZpcnN0KTsKICAgICAgICAgcnVuLT5tX2JveC0+cGFyZW50KCktPmNsZWFyRGVzY2VuZGFu
dHNIYXZlU2FtZUxpbmVIZWlnaHRBbmRCYXNlbGluZSgpOwogICAgIH0KICAgICBpZiAoKGdseXBo
T3ZlcmZsb3cudG9wIHx8IGdseXBoT3ZlcmZsb3cuYm90dG9tIHx8IGdseXBoT3ZlcmZsb3cubGVm
dCB8fCBnbHlwaE92ZXJmbG93LnJpZ2h0KSkgewogICAgICAgICBBU1NFUlQocnVuLT5tX2JveC0+
aXNUZXh0KCkpOwogICAgICAgICBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcDo6aXRl
cmF0b3IgaXQgPSB0ZXh0Qm94RGF0YU1hcC5hZGQodG9JbmxpbmVUZXh0Qm94KHJ1bi0+bV9ib3gp
LCBtYWtlX3BhaXIoVmVjdG9yPGNvbnN0IFNpbXBsZUZvbnREYXRhKj4oKSwgR2x5cGhPdmVyZmxv
dygpKSkuaXRlcmF0b3I7Ci0gICAgICAgIGl0LT5zZWNvbmQuc2Vjb25kID0gZ2x5cGhPdmVyZmxv
dzsKKyAgICAgICAgaXQtPnZhbHVlLnNlY29uZCA9IGdseXBoT3ZlcmZsb3c7CiAgICAgICAgIHJ1
bi0+bV9ib3gtPmNsZWFyS25vd25Ub0hhdmVOb092ZXJmbG93KCk7CiAgICAgfQogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKaW5kZXgg
NWVlZjNjY2FjY2QyM2JkZDM5MTYwODUwMTgzYWZmZjU4NTU0NjM4YS4uMmY1YjU1MDY0OTgwMTg5
MmRhOGQzYzBmZmViZDJjY2Q2YWI1NjAyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCkBAIC0xMzcsNyArMTM3LDcgQEAgdm9pZCBJ
bWFnZVF1YWxpdHlDb250cm9sbGVyOjpoaWdoUXVhbGl0eVJlcGFpbnRUaW1lckZpcmVkKFRpbWVy
PEltYWdlUXVhbGl0eUNvbnQKICAgICBpZiAobV9hbmltYXRlZFJlc2l6ZUlzQWN0aXZlKSB7CiAg
ICAgICAgIG1fYW5pbWF0ZWRSZXNpemVJc0FjdGl2ZSA9IGZhbHNlOwogICAgICAgICBmb3IgKE9i
amVjdExheWVyU2l6ZU1hcDo6aXRlcmF0b3IgaXQgPSBtX29iamVjdExheWVyU2l6ZU1hcC5iZWdp
bigpOyBpdCAhPSBtX29iamVjdExheWVyU2l6ZU1hcC5lbmQoKTsgKytpdCkKLSAgICAgICAgICAg
IGl0LT5maXJzdC0+cmVwYWludCgpOworICAgICAgICAgICAgaXQtPmtleS0+cmVwYWludCgpOwog
ICAgIH0KIH0KIApAQCAtMTYyLDE0ICsxNjIsMTQgQEAgYm9vbCBJbWFnZVF1YWxpdHlDb250cm9s
bGVyOjpzaG91bGRQYWludEF0TG93UXVhbGl0eShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFIK
IAogICAgIC8vIExvb2sgb3Vyc2VsdmVzIHVwIGluIHRoZSBoYXNodGFibGVzLgogICAgIE9iamVj
dExheWVyU2l6ZU1hcDo6aXRlcmF0b3IgaSA9IG1fb2JqZWN0TGF5ZXJTaXplTWFwLmZpbmQob2Jq
ZWN0KTsKLSAgICBMYXllclNpemVNYXAqIGlubmVyTWFwID0gaSAhPSBtX29iamVjdExheWVyU2l6
ZU1hcC5lbmQoKSA/ICZpLT5zZWNvbmQgOiAwOworICAgIExheWVyU2l6ZU1hcCogaW5uZXJNYXAg
PSBpICE9IG1fb2JqZWN0TGF5ZXJTaXplTWFwLmVuZCgpID8gJmktPnZhbHVlIDogMDsKICAgICBM
YXlvdXRTaXplIG9sZFNpemU7CiAgICAgYm9vbCBpc0ZpcnN0UmVzaXplID0gdHJ1ZTsKICAgICBp
ZiAoaW5uZXJNYXApIHsKICAgICAgICAgTGF5ZXJTaXplTWFwOjppdGVyYXRvciBqID0gaW5uZXJN
YXAtPmZpbmQobGF5ZXIpOwogICAgICAgICBpZiAoaiAhPSBpbm5lck1hcC0+ZW5kKCkpIHsKICAg
ICAgICAgICAgIGlzRmlyc3RSZXNpemUgPSBmYWxzZTsKLSAgICAgICAgICAgIG9sZFNpemUgPSBq
LT5zZWNvbmQ7CisgICAgICAgICAgICBvbGRTaXplID0gai0+dmFsdWU7CiAgICAgICAgIH0KICAg
ICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb3VudGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb3VudGVyLmNwcAppbmRleCBk
ZTQ1ZDg5NWUxN2UwOWE3MWI2MzkxZGQ5OGU4MjMwNzdiMjFkMTA3Li41NDU3YTNhMWRkMTY4Yjg2
ZWQzYmFkYTcwNzBiYTQ2MzQ0YjM4MDI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQ291bnRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckNvdW50ZXIuY3BwCkBAIC01NzEsMTEgKzU3MSwxMSBAQCB2b2lkIFJlbmRlckNvdW50ZXI6
OmRlc3Ryb3lDb3VudGVyTm9kZXMoUmVuZGVyT2JqZWN0KiBvd25lcikKICAgICBDb3VudGVyTWFw
czo6aXRlcmF0b3IgbWFwc0l0ZXJhdG9yID0gbWFwcy5maW5kKG93bmVyKTsKICAgICBpZiAobWFw
c0l0ZXJhdG9yID09IG1hcHMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBDb3VudGVyTWFw
KiBtYXAgPSBtYXBzSXRlcmF0b3ItPnNlY29uZC5nZXQoKTsKKyAgICBDb3VudGVyTWFwKiBtYXAg
PSBtYXBzSXRlcmF0b3ItPnZhbHVlLmdldCgpOwogICAgIENvdW50ZXJNYXA6OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IG1hcC0+ZW5kKCk7CiAgICAgZm9yIChDb3VudGVyTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIEF0b21pY1N0
cmluZyBpZGVudGlmaWVyKGl0LT5maXJzdC5nZXQoKSk7Ci0gICAgICAgIGRlc3Ryb3lDb3VudGVy
Tm9kZVdpdGhvdXRNYXBSZW1vdmFsKGlkZW50aWZpZXIsIGl0LT5zZWNvbmQuZ2V0KCkpOworICAg
ICAgICBBdG9taWNTdHJpbmcgaWRlbnRpZmllcihpdC0+a2V5LmdldCgpKTsKKyAgICAgICAgZGVz
dHJveUNvdW50ZXJOb2RlV2l0aG91dE1hcFJlbW92YWwoaWRlbnRpZmllciwgaXQtPnZhbHVlLmdl
dCgpKTsKICAgICB9CiAgICAgbWFwcy5yZW1vdmUobWFwc0l0ZXJhdG9yKTsKICAgICBvd25lci0+
c2V0SGFzQ291bnRlck5vZGVNYXAoZmFsc2UpOwpAQCAtNTg5LDcgKzU4OSw3IEBAIHZvaWQgUmVu
ZGVyQ291bnRlcjo6ZGVzdHJveUNvdW50ZXJOb2RlKFJlbmRlck9iamVjdCogb3duZXIsIGNvbnN0
IEF0b21pY1N0cmluZyYKICAgICBDb3VudGVyTWFwOjppdGVyYXRvciBtYXBJdGVyYXRvciA9IG1h
cC0+ZmluZChpZGVudGlmaWVyLmltcGwoKSk7CiAgICAgaWYgKG1hcEl0ZXJhdG9yID09IG1hcC0+
ZW5kKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBkZXN0cm95Q291bnRlck5vZGVXaXRob3V0TWFw
UmVtb3ZhbChpZGVudGlmaWVyLCBtYXBJdGVyYXRvci0+c2Vjb25kLmdldCgpKTsKKyAgICBkZXN0
cm95Q291bnRlck5vZGVXaXRob3V0TWFwUmVtb3ZhbChpZGVudGlmaWVyLCBtYXBJdGVyYXRvci0+
dmFsdWUuZ2V0KCkpOwogICAgIG1hcC0+cmVtb3ZlKG1hcEl0ZXJhdG9yKTsKICAgICAvLyBXZSBk
byBub3QgZGVsZXRlICJtYXAiIGhlcmUgZXZlbiBpZiBlbXB0eSBiZWNhdXNlIHdlIGV4cGVjdCB0
byByZXVzZQogICAgIC8vIGl0IHNvb24uIEluIG9yZGVyIGZvciBhIHJlbmRlcmVyIHRvIGxvc2Ug
YWxsIGl0cyBjb3VudGVycyBwZXJtYW5lbnRseSwKQEAgLTYyOSwyMiArNjI5LDIyIEBAIHN0YXRp
YyB2b2lkIHVwZGF0ZUNvdW50ZXJzKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiAgICAgQ291bnRl
ckRpcmVjdGl2ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gZGlyZWN0aXZlTWFwLT5lbmQoKTsK
ICAgICBpZiAoIXJlbmRlcmVyLT5oYXNDb3VudGVyTm9kZU1hcCgpKSB7CiAgICAgICAgIGZvciAo
Q291bnRlckRpcmVjdGl2ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBkaXJlY3RpdmVNYXAtPmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIG1ha2VDb3VudGVyTm9kZShyZW5k
ZXJlciwgQXRvbWljU3RyaW5nKGl0LT5maXJzdC5nZXQoKSksIGZhbHNlKTsKKyAgICAgICAgICAg
IG1ha2VDb3VudGVyTm9kZShyZW5kZXJlciwgQXRvbWljU3RyaW5nKGl0LT5rZXkuZ2V0KCkpLCBm
YWxzZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgQ291bnRlck1hcCogY291bnRlck1h
cCA9IGNvdW50ZXJNYXBzKCkuZ2V0KHJlbmRlcmVyKTsKICAgICBBU1NFUlQoY291bnRlck1hcCk7
CiAgICAgZm9yIChDb3VudGVyRGlyZWN0aXZlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGRpcmVj
dGl2ZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFJlZlB0cjxDb3Vu
dGVyTm9kZT4gbm9kZSA9IGNvdW50ZXJNYXAtPmdldChpdC0+Zmlyc3QuZ2V0KCkpOworICAgICAg
ICBSZWZQdHI8Q291bnRlck5vZGU+IG5vZGUgPSBjb3VudGVyTWFwLT5nZXQoaXQtPmtleS5nZXQo
KSk7CiAgICAgICAgIGlmICghbm9kZSkgewotICAgICAgICAgICAgbWFrZUNvdW50ZXJOb2RlKHJl
bmRlcmVyLCBBdG9taWNTdHJpbmcoaXQtPmZpcnN0LmdldCgpKSwgZmFsc2UpOworICAgICAgICAg
ICAgbWFrZUNvdW50ZXJOb2RlKHJlbmRlcmVyLCBBdG9taWNTdHJpbmcoaXQtPmtleS5nZXQoKSks
IGZhbHNlKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIFJlZlB0
cjxDb3VudGVyTm9kZT4gbmV3UGFyZW50ID0gMDsKICAgICAgICAgUmVmUHRyPENvdW50ZXJOb2Rl
PiBuZXdQcmV2aW91c1NpYmxpbmcgPSAwOwogICAgICAgICAKLSAgICAgICAgZmluZFBsYWNlRm9y
Q291bnRlcihyZW5kZXJlciwgQXRvbWljU3RyaW5nKGl0LT5maXJzdC5nZXQoKSksIG5vZGUtPmhh
c1Jlc2V0VHlwZSgpLCBuZXdQYXJlbnQsIG5ld1ByZXZpb3VzU2libGluZyk7Ci0gICAgICAgIGlm
IChub2RlICE9IGNvdW50ZXJNYXAtPmdldChpdC0+Zmlyc3QuZ2V0KCkpKQorICAgICAgICBmaW5k
UGxhY2VGb3JDb3VudGVyKHJlbmRlcmVyLCBBdG9taWNTdHJpbmcoaXQtPmtleS5nZXQoKSksIG5v
ZGUtPmhhc1Jlc2V0VHlwZSgpLCBuZXdQYXJlbnQsIG5ld1ByZXZpb3VzU2libGluZyk7CisgICAg
ICAgIGlmIChub2RlICE9IGNvdW50ZXJNYXAtPmdldChpdC0+a2V5LmdldCgpKSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICBDb3VudGVyTm9kZSogcGFyZW50ID0gbm9kZS0+cGFyZW50
KCk7CiAgICAgICAgIGlmIChuZXdQYXJlbnQgPT0gcGFyZW50ICYmIG5ld1ByZXZpb3VzU2libGlu
ZyA9PSBub2RlLT5wcmV2aW91c1NpYmxpbmcoKSkKQEAgLTY1Miw3ICs2NTIsNyBAQCBzdGF0aWMg
dm9pZCB1cGRhdGVDb3VudGVycyhSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogICAgICAgICBpZiAo
cGFyZW50KQogICAgICAgICAgICAgcGFyZW50LT5yZW1vdmVDaGlsZChub2RlLmdldCgpKTsKICAg
ICAgICAgaWYgKG5ld1BhcmVudCkKLSAgICAgICAgICAgIG5ld1BhcmVudC0+aW5zZXJ0QWZ0ZXIo
bm9kZS5nZXQoKSwgbmV3UHJldmlvdXNTaWJsaW5nLmdldCgpLCBpdC0+Zmlyc3QuZ2V0KCkpOwor
ICAgICAgICAgICAgbmV3UGFyZW50LT5pbnNlcnRBZnRlcihub2RlLmdldCgpLCBuZXdQcmV2aW91
c1NpYmxpbmcuZ2V0KCksIGl0LT5rZXkuZ2V0KCkpOwogICAgIH0KIH0KIApAQCAtNjg0LDIxICs2
ODQsMjEgQEAgdm9pZCBSZW5kZXJDb3VudGVyOjpyZW5kZXJlclN0eWxlQ2hhbmdlZChSZW5kZXJP
YmplY3QqIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHkKICAgICAgICAgICAgIENvdW50ZXJEaXJl
Y3RpdmVNYXA6OmNvbnN0X2l0ZXJhdG9yIG5ld01hcEVuZCA9IG5ld0NvdW50ZXJEaXJlY3RpdmVz
LT5lbmQoKTsKICAgICAgICAgICAgIENvdW50ZXJEaXJlY3RpdmVNYXA6OmNvbnN0X2l0ZXJhdG9y
IG9sZE1hcEVuZCA9IG9sZENvdW50ZXJEaXJlY3RpdmVzLT5lbmQoKTsKICAgICAgICAgICAgIGZv
ciAoQ291bnRlckRpcmVjdGl2ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBuZXdDb3VudGVyRGly
ZWN0aXZlcy0+YmVnaW4oKTsgaXQgIT0gbmV3TWFwRW5kOyArK2l0KSB7Ci0gICAgICAgICAgICAg
ICAgQ291bnRlckRpcmVjdGl2ZU1hcDo6Y29uc3RfaXRlcmF0b3Igb2xkTWFwSXQgPSBvbGRDb3Vu
dGVyRGlyZWN0aXZlcy0+ZmluZChpdC0+Zmlyc3QpOworICAgICAgICAgICAgICAgIENvdW50ZXJE
aXJlY3RpdmVNYXA6OmNvbnN0X2l0ZXJhdG9yIG9sZE1hcEl0ID0gb2xkQ291bnRlckRpcmVjdGl2
ZXMtPmZpbmQoaXQtPmtleSk7CiAgICAgICAgICAgICAgICAgaWYgKG9sZE1hcEl0ICE9IG9sZE1h
cEVuZCkgewotICAgICAgICAgICAgICAgICAgICBpZiAob2xkTWFwSXQtPnNlY29uZCA9PSBpdC0+
c2Vjb25kKQorICAgICAgICAgICAgICAgICAgICBpZiAob2xkTWFwSXQtPnZhbHVlID09IGl0LT52
YWx1ZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAg
ICAgICBSZW5kZXJDb3VudGVyOjpkZXN0cm95Q291bnRlck5vZGUocmVuZGVyZXIsIGl0LT5maXJz
dC5nZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIFJlbmRlckNvdW50ZXI6OmRlc3Ryb3lDb3Vu
dGVyTm9kZShyZW5kZXJlciwgaXQtPmtleS5nZXQoKSk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIC8vIFdlIG11c3QgY3JlYXRlIHRoaXMgbm9kZSBoZXJlLCBiZWNhdXNlIHRo
ZSBjaGFuZ2VkIG5vZGUgbWF5IGJlIGEgbm9kZSB3aXRoIG5vIGRpc3BsYXkgc3VjaCBhcwogICAg
ICAgICAgICAgICAgIC8vIGFzIHRob3NlIGNyZWF0ZWQgYnkgdGhlIGluY3JlbWVudCBvciByZXNl
dCBkaXJlY3RpdmVzIGFuZCB0aGUgcmUtbGF5b3V0IHRoYXQgd2lsbCBoYXBwZW4gd2lsbAogICAg
ICAgICAgICAgICAgIC8vIG5vdCBjYXRjaCB0aGUgY2hhbmdlIGlmIHRoZSBub2RlIGhhZCBubyBj
aGlsZHJlbi4KLSAgICAgICAgICAgICAgICBtYWtlQ291bnRlck5vZGUocmVuZGVyZXIsIGl0LT5m
aXJzdC5nZXQoKSwgZmFsc2UpOworICAgICAgICAgICAgICAgIG1ha2VDb3VudGVyTm9kZShyZW5k
ZXJlciwgaXQtPmtleS5nZXQoKSwgZmFsc2UpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
Ly8gRGVzdHJveWluZyBvbGQgY291bnRlcnMgdGhhdCBkbyBub3QgZXhpc3QgaW4gdGhlIG5ldyBj
b3VudGVyRGlyZWN0aXZlIG1hcC4KICAgICAgICAgICAgIGZvciAoQ291bnRlckRpcmVjdGl2ZU1h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBvbGRDb3VudGVyRGlyZWN0aXZlcy0+YmVnaW4oKTsgaXQg
IT1vbGRNYXBFbmQ7ICsraXQpIHsKLSAgICAgICAgICAgICAgICBpZiAoIW5ld0NvdW50ZXJEaXJl
Y3RpdmVzLT5jb250YWlucyhpdC0+Zmlyc3QpKQotICAgICAgICAgICAgICAgICAgICBSZW5kZXJD
b3VudGVyOjpkZXN0cm95Q291bnRlck5vZGUocmVuZGVyZXIsIGl0LT5maXJzdC5nZXQoKSk7Cisg
ICAgICAgICAgICAgICAgaWYgKCFuZXdDb3VudGVyRGlyZWN0aXZlcy0+Y29udGFpbnMoaXQtPmtl
eSkpCisgICAgICAgICAgICAgICAgICAgIFJlbmRlckNvdW50ZXI6OmRlc3Ryb3lDb3VudGVyTm9k
ZShyZW5kZXJlciwgaXQtPmtleS5nZXQoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICBpZiAocmVuZGVyZXItPmhhc0NvdW50ZXJOb2RlTWFwKCkpCkBAIC03
MTAsNyArNzEwLDcgQEAgdm9pZCBSZW5kZXJDb3VudGVyOjpyZW5kZXJlclN0eWxlQ2hhbmdlZChS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHkKICAgICAgICAgICAgIC8vIFdl
IG11c3QgY3JlYXRlIHRoaXMgbm9kZSBoZXJlLCBiZWNhdXNlIHRoZSBhZGRlZCBub2RlIG1heSBi
ZSBhIG5vZGUgd2l0aCBubyBkaXNwbGF5IHN1Y2ggYXMKICAgICAgICAgICAgIC8vIGFzIHRob3Nl
IGNyZWF0ZWQgYnkgdGhlIGluY3JlbWVudCBvciByZXNldCBkaXJlY3RpdmVzIGFuZCB0aGUgcmUt
bGF5b3V0IHRoYXQgd2lsbCBoYXBwZW4gd2lsbAogICAgICAgICAgICAgLy8gbm90IGNhdGNoIHRo
ZSBjaGFuZ2UgaWYgdGhlIG5vZGUgaGFkIG5vIGNoaWxkcmVuLgotICAgICAgICAgICAgbWFrZUNv
dW50ZXJOb2RlKHJlbmRlcmVyLCBpdC0+Zmlyc3QuZ2V0KCksIGZhbHNlKTsKKyAgICAgICAgICAg
IG1ha2VDb3VudGVyTm9kZShyZW5kZXJlciwgaXQtPmtleS5nZXQoKSwgZmFsc2UpOwogICAgICAg
ICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckZsb3dUaHJlYWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJl
YWQuY3BwCmluZGV4IDFiMDljYmI4ZDBmMWUxMTAyMWY0NTRhZGE5MmE3ZjJjNmZmMDM3OTEuLjM1
M2MxMmJlOTczYjkyZDA4YmQzYTg3ZDZkMDBhMTc5NWYxNGU3NjEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAKQEAgLTY0Miw3ICs2NDIsNyBAQCB2
b2lkIFJlbmRlckZsb3dUaHJlYWQ6OnNldFJlZ2lvblJhbmdlRm9yQm94KGNvbnN0IFJlbmRlckJv
eCogYm94LCBMYXlvdXRVbml0IG9mZgogICAgIH0KIAogICAgIC8vIElmIG5vdGhpbmcgY2hhbmdl
ZCwganVzdCBiYWlsLgotICAgIFJlbmRlclJlZ2lvblJhbmdlJiByYW5nZSA9IGl0LT5zZWNvbmQ7
CisgICAgUmVuZGVyUmVnaW9uUmFuZ2UmIHJhbmdlID0gaXQtPnZhbHVlOwogICAgIGlmIChyYW5n
ZS5zdGFydFJlZ2lvbigpID09IHN0YXJ0UmVnaW9uICYmIHJhbmdlLmVuZFJlZ2lvbigpID09IGVu
ZFJlZ2lvbikKICAgICAgICAgcmV0dXJuOwogCkBAIC02NzIsNyArNjcyLDcgQEAgdm9pZCBSZW5k
ZXJGbG93VGhyZWFkOjpnZXRSZWdpb25SYW5nZUZvckJveChjb25zdCBSZW5kZXJCb3gqIGJveCwg
UmVuZGVyUmVnaW9uKiYKICAgICBpZiAoaXQgPT0gbV9yZWdpb25SYW5nZU1hcC5lbmQoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgY29uc3QgUmVuZGVyUmVnaW9uUmFuZ2UmIHJhbmdlID0gaXQt
PnNlY29uZDsKKyAgICBjb25zdCBSZW5kZXJSZWdpb25SYW5nZSYgcmFuZ2UgPSBpdC0+dmFsdWU7
CiAgICAgc3RhcnRSZWdpb24gPSByYW5nZS5zdGFydFJlZ2lvbigpOwogICAgIGVuZFJlZ2lvbiA9
IHJhbmdlLmVuZFJlZ2lvbigpOwogICAgIEFTU0VSVChtX3JlZ2lvbkxpc3QuY29udGFpbnMoc3Rh
cnRSZWdpb24pICYmIG1fcmVnaW9uTGlzdC5jb250YWlucyhlbmRSZWdpb24pKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCmluZGV4IDc0YjBmNWE2NzAxNmVmYWVmMDk1
MGQzM2IzOWZjM2IxNTM4ZmEzODkuLjY4Y2ViYmQzZDYyNWViZDdhYTcxOTJiNjdhOTc4MTIyOTE2
NWIyYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcApAQCAtMjgz
Niw3ICsyODM2LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LAogICAgIHBhaW50TGF5ZXIodGhp
cywgY29udGV4dCwgZGFtYWdlUmVjdCwgcGFpbnRCZWhhdmlvciwgcGFpbnRpbmdSb290LCByZWdp
b24sICZvdmVybGFwVGVzdFJlcXVlc3RzLCBwYWludEZsYWdzKTsKICAgICBPdmVybGFwVGVzdFJl
cXVlc3RNYXA6Oml0ZXJhdG9yIGVuZCA9IG92ZXJsYXBUZXN0UmVxdWVzdHMuZW5kKCk7CiAgICAg
Zm9yIChPdmVybGFwVGVzdFJlcXVlc3RNYXA6Oml0ZXJhdG9yIGl0ID0gb3ZlcmxhcFRlc3RSZXF1
ZXN0cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5maXJzdC0+c2V0T3Zl
cmxhcFRlc3RSZXN1bHQoZmFsc2UpOworICAgICAgICBpdC0+a2V5LT5zZXRPdmVybGFwVGVzdFJl
c3VsdChmYWxzZSk7CiB9CiAKIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50T3ZlcmxheVNjcm9sbGJh
cnMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0
LCBQYWludEJlaGF2aW9yIHBhaW50QmVoYXZpb3IsIFJlbmRlck9iamVjdCogcGFpbnRpbmdSb290
KQpAQCAtMjkwNSwxMSArMjkwNSwxMSBAQCBzdGF0aWMgdm9pZCBwZXJmb3JtT3ZlcmxhcFRlc3Rz
KE92ZXJsYXBUZXN0UmVxdWVzdE1hcCYgb3ZlcmxhcFRlc3RSZXF1ZXN0cywgY29ucwogICAgIE92
ZXJsYXBUZXN0UmVxdWVzdE1hcDo6aXRlcmF0b3IgZW5kID0gb3ZlcmxhcFRlc3RSZXF1ZXN0cy5l
bmQoKTsKICAgICBMYXlvdXRSZWN0IGJvdW5kaW5nQm94ID0gbGF5ZXItPmJvdW5kaW5nQm94KHJv
b3RMYXllcik7CiAgICAgZm9yIChPdmVybGFwVGVzdFJlcXVlc3RNYXA6Oml0ZXJhdG9yIGl0ID0g
b3ZlcmxhcFRlc3RSZXF1ZXN0cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAg
aWYgKCFib3VuZGluZ0JveC5pbnRlcnNlY3RzKGl0LT5zZWNvbmQpKQorICAgICAgICBpZiAoIWJv
dW5kaW5nQm94LmludGVyc2VjdHMoaXQtPnZhbHVlKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwog
Ci0gICAgICAgIGl0LT5maXJzdC0+c2V0T3ZlcmxhcFRlc3RSZXN1bHQodHJ1ZSk7Ci0gICAgICAg
IG92ZXJsYXBwZWRSZXF1ZXN0Q2xpZW50cy5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgaXQt
PmtleS0+c2V0T3ZlcmxhcFRlc3RSZXN1bHQodHJ1ZSk7CisgICAgICAgIG92ZXJsYXBwZWRSZXF1
ZXN0Q2xpZW50cy5hcHBlbmQoaXQtPmtleSk7CiAgICAgfQogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgb3ZlcmxhcHBlZFJlcXVlc3RDbGllbnRzLnNpemUoKTsgKytpKQogICAgICAgICBvdmVy
bGFwVGVzdFJlcXVlc3RzLnJlbW92ZShvdmVybGFwcGVkUmVxdWVzdENsaWVudHNbaV0pOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVySW5mby5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvLmNwcApp
bmRleCBhY2JmMDdkOWQxYmZkMjAyMWM1NTQxNTI2NmRkNDQzMDUwNTU1YTdkLi5jYjRjNWQ2NjEx
MGM5MjQxMmYzNTBlYTg5OTMyNzJjZTYyY2Q3ZTA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvLmNwcApAQCAtNTYsNyArNTYsNyBAQCBS
ZW5kZXJMYXllckZpbHRlckluZm8qIFJlbmRlckxheWVyRmlsdGVySW5mbzo6ZmlsdGVySW5mb0Zv
clJlbmRlckxheWVyKGNvbnN0IFJlbgogICAgIGlmICghc19maWx0ZXJNYXApCiAgICAgICAgIHJl
dHVybiAwOwogICAgIFJlbmRlckxheWVyRmlsdGVySW5mb01hcDo6aXRlcmF0b3IgaXRlciA9IHNf
ZmlsdGVyTWFwLT5maW5kKGxheWVyKTsKLSAgICByZXR1cm4gKGl0ZXIgIT0gc19maWx0ZXJNYXAt
PmVuZCgpKSA/IGl0ZXItPnNlY29uZCA6IDA7CisgICAgcmV0dXJuIChpdGVyICE9IHNfZmlsdGVy
TWFwLT5lbmQoKSkgPyBpdGVyLT52YWx1ZSA6IDA7CiB9CiAKIFJlbmRlckxheWVyRmlsdGVySW5m
byogUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvOjpjcmVhdGVGaWx0ZXJJbmZvRm9yUmVuZGVyTGF5ZXJJ
Zk5lZWRlZChSZW5kZXJMYXllciogbGF5ZXIpCkBAIC02Nyw3ICs2Nyw3IEBAIFJlbmRlckxheWVy
RmlsdGVySW5mbyogUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvOjpjcmVhdGVGaWx0ZXJJbmZvRm9yUmVu
ZGVyTGF5ZXJJZk5lCiAgICAgUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvTWFwOjppdGVyYXRvciBpdGVy
ID0gc19maWx0ZXJNYXAtPmZpbmQobGF5ZXIpOwogICAgIGlmIChpdGVyICE9IHNfZmlsdGVyTWFw
LT5lbmQoKSkgewogICAgICAgICBBU1NFUlQobGF5ZXItPmhhc0ZpbHRlckluZm8oKSk7Ci0gICAg
ICAgIHJldHVybiBpdGVyLT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBpdGVyLT52YWx1ZTsKICAg
ICB9CiAgICAgCiAgICAgUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvKiBmaWx0ZXIgPSBuZXcgUmVuZGVy
TGF5ZXJGaWx0ZXJJbmZvKGxheWVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck5hbWVkRmxvd1RocmVhZC5jcHAKaW5kZXggMjI3YWY3ZGY1MWRhMDRlYzM5OWNlY2Jk
OWM2MjY4YzgxMDI3NGJlMC4uN2ZiMjYyMzdjNGU2M2IxYTI0MDg2YmE2NTAxZDhkZjMyZDMxNzZm
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd1Ro
cmVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd1Ro
cmVhZC5jcHAKQEAgLTExNiw3ICsxMTYsNyBAQCBib29sIFJlbmRlck5hbWVkRmxvd1RocmVhZDo6
ZGVwZW5kc09uKFJlbmRlck5hbWVkRmxvd1RocmVhZCogb3RoZXJSZW5kZXJGbG93VGhyZQogICAg
IFJlbmRlck5hbWVkRmxvd1RocmVhZENvdW50ZWRTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXJhdG9y
ID0gbV9sYXlvdXRCZWZvcmVUaHJlYWRzU2V0LmJlZ2luKCk7CiAgICAgUmVuZGVyTmFtZWRGbG93
VGhyZWFkQ291bnRlZFNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9sYXlvdXRCZWZvcmVUaHJl
YWRzU2V0LmVuZCgpOwogICAgIGZvciAoOyBpdGVyYXRvciAhPSBlbmQ7ICsraXRlcmF0b3IpIHsK
LSAgICAgICAgY29uc3QgUmVuZGVyTmFtZWRGbG93VGhyZWFkKiBiZWZvcmVGbG93VGhyZWFkID0g
KCppdGVyYXRvcikuZmlyc3Q7CisgICAgICAgIGNvbnN0IFJlbmRlck5hbWVkRmxvd1RocmVhZCog
YmVmb3JlRmxvd1RocmVhZCA9ICgqaXRlcmF0b3IpLmtleTsKICAgICAgICAgaWYgKGJlZm9yZUZs
b3dUaHJlYWQtPmRlcGVuZHNPbihvdGhlclJlbmRlckZsb3dUaHJlYWQpKQogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMjQ2LDcgKzI0Niw3IEBAIHZvaWQgUmVuZGVyTmFtZWRG
bG93VGhyZWFkOjpyZW1vdmVEZXBlbmRlbmN5T25GbG93VGhyZWFkKFJlbmRlck5hbWVkRmxvd1Ro
cmVhZCoKIHZvaWQgUmVuZGVyTmFtZWRGbG93VGhyZWFkOjpwdXNoRGVwZW5kZW5jaWVzKFJlbmRl
ck5hbWVkRmxvd1RocmVhZExpc3QmIGxpc3QpCiB7CiAgICAgZm9yIChSZW5kZXJOYW1lZEZsb3dU
aHJlYWRDb3VudGVkU2V0OjppdGVyYXRvciBpdGVyID0gbV9sYXlvdXRCZWZvcmVUaHJlYWRzU2V0
LmJlZ2luKCk7IGl0ZXIgIT0gbV9sYXlvdXRCZWZvcmVUaHJlYWRzU2V0LmVuZCgpOyArK2l0ZXIp
IHsKLSAgICAgICAgUmVuZGVyTmFtZWRGbG93VGhyZWFkKiBmbG93VGhyZWFkID0gKCppdGVyKS5m
aXJzdDsKKyAgICAgICAgUmVuZGVyTmFtZWRGbG93VGhyZWFkKiBmbG93VGhyZWFkID0gKCppdGVy
KS5rZXk7CiAgICAgICAgIGlmIChsaXN0LmNvbnRhaW5zKGZsb3dUaHJlYWQpKQogICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgIGZsb3dUaHJlYWQtPnB1c2hEZXBlbmRlbmNpZXMobGlzdCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZWdpb24uY3BwCmluZGV4IDUzNjI4MzZh
NDRmOTI4MzFjYzA0NmE3MTg1MjkzNTg1MDMwYWY1MDYuLmJlYzg4Mzk5YjYzMWI2MTM5NzI0ZWEw
NzdmNDYzZTY3OTZhNzU2ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJSZWdpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZWdp
b24uY3BwCkBAIC0yMzEsNyArMjMxLDcgQEAgUmVuZGVyQm94UmVnaW9uSW5mbyogUmVuZGVyUmVn
aW9uOjpzZXRSZW5kZXJCb3hSZWdpb25JbmZvKGNvbnN0IFJlbmRlckJveCogYm94LAogICAgIGlm
ICghbV9pc1ZhbGlkIHx8ICFtX2Zsb3dUaHJlYWQpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAg
T3duUHRyPFJlbmRlckJveFJlZ2lvbkluZm8+JiBib3hJbmZvID0gbV9yZW5kZXJCb3hSZWdpb25J
bmZvLmFkZChib3gsIG51bGxwdHIpLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgT3duUHRyPFJlbmRl
ckJveFJlZ2lvbkluZm8+JiBib3hJbmZvID0gbV9yZW5kZXJCb3hSZWdpb25JbmZvLmFkZChib3gs
IG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoYm94SW5mbykKICAgICAgICAgKmJv
eEluZm8gPSBSZW5kZXJCb3hSZWdpb25JbmZvKGxvZ2ljYWxMZWZ0SW5zZXQsIGxvZ2ljYWxSaWdo
dEluc2V0LCBjb250YWluaW5nQmxvY2tDaGFpbklzSW5zZXQpOwogICAgIGVsc2UKQEAgLTI5MSw4
ICsyOTEsOCBAQCB2b2lkIFJlbmRlclJlZ2lvbjo6c2V0UmVnaW9uT2JqZWN0c1JlZ2lvblN0eWxl
KCkKICAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBvYmplY3RTdHlsZUluUmVnaW9uOwogICAg
ICAgICBib29sIG9iamVjdFJlZ2lvblN0eWxlQ2FjaGVkID0gZmFsc2U7CiAgICAgICAgIGlmIChp
dCAhPSBtX3JlbmRlck9iamVjdFJlZ2lvblN0eWxlLmVuZCgpKSB7Ci0gICAgICAgICAgICBvYmpl
Y3RTdHlsZUluUmVnaW9uID0gaXQtPnNlY29uZC5zdHlsZTsKLSAgICAgICAgICAgIEFTU0VSVChp
dC0+c2Vjb25kLmNhY2hlZCk7CisgICAgICAgICAgICBvYmplY3RTdHlsZUluUmVnaW9uID0gaXQt
PnZhbHVlLnN0eWxlOworICAgICAgICAgICAgQVNTRVJUKGl0LT52YWx1ZS5jYWNoZWQpOwogICAg
ICAgICAgICAgb2JqZWN0UmVnaW9uU3R5bGVDYWNoZWQgPSB0cnVlOwogICAgICAgICB9IGVsc2UK
ICAgICAgICAgICAgIG9iamVjdFN0eWxlSW5SZWdpb24gPSBjb21wdXRlU3R5bGVJblJlZ2lvbihv
YmplY3QpOwpAQCAtMzEwLDEyICszMTAsMTIgQEAgdm9pZCBSZW5kZXJSZWdpb246OnJlc3RvcmVS
ZWdpb25PYmplY3RzT3JpZ2luYWxTdHlsZSgpCiAKICAgICBSZW5kZXJPYmplY3RSZWdpb25TdHls
ZU1hcCB0ZW1wOwogICAgIGZvciAoUmVuZGVyT2JqZWN0UmVnaW9uU3R5bGVNYXA6Oml0ZXJhdG9y
IGl0ZXIgPSBtX3JlbmRlck9iamVjdFJlZ2lvblN0eWxlLmJlZ2luKCksIGVuZCA9IG1fcmVuZGVy
T2JqZWN0UmVnaW9uU3R5bGUuZW5kKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKLSAgICAgICAg
UmVuZGVyT2JqZWN0KiBvYmplY3QgPSBjb25zdF9jYXN0PFJlbmRlck9iamVjdCo+KGl0ZXItPmZp
cnN0KTsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBvYmplY3QgPSBjb25zdF9jYXN0PFJlbmRlck9i
amVjdCo+KGl0ZXItPmtleSk7CiAgICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gb2JqZWN0UmVn
aW9uU3R5bGUgPSBvYmplY3QtPnN0eWxlKCk7Ci0gICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4g
b2JqZWN0T3JpZ2luYWxTdHlsZSA9IGl0ZXItPnNlY29uZC5zdHlsZTsKKyAgICAgICAgUmVmUHRy
PFJlbmRlclN0eWxlPiBvYmplY3RPcmlnaW5hbFN0eWxlID0gaXRlci0+dmFsdWUuc3R5bGU7CiAg
ICAgICAgIG9iamVjdC0+c2V0U3R5bGVJbnRlcm5hbChvYmplY3RPcmlnaW5hbFN0eWxlKTsKIAot
ICAgICAgICBib29sIHNob3VsZENhY2hlUmVnaW9uU3R5bGUgPSBpdGVyLT5zZWNvbmQuY2FjaGVk
OworICAgICAgICBib29sIHNob3VsZENhY2hlUmVnaW9uU3R5bGUgPSBpdGVyLT52YWx1ZS5jYWNo
ZWQ7CiAgICAgICAgIGlmICghc2hvdWxkQ2FjaGVSZWdpb25TdHlsZSkgewogICAgICAgICAgICAg
Ly8gQ2hlY2sgd2hldGhlciB3ZSBzaG91bGQgY2FjaGUgdGhlIGNvbXB1dGVkIHN0eWxlIGluIHJl
Z2lvbi4KICAgICAgICAgICAgIHVuc2lnbmVkIGNoYW5nZWRDb250ZXh0U2Vuc2l0aXZlUHJvcGVy
dGllcyA9IENvbnRleHRTZW5zaXRpdmVQcm9wZXJ0eU5vbmU7CkBAIC0zNTcsNyArMzU3LDcgQEAg
dm9pZCBSZW5kZXJSZWdpb246OmNvbXB1dGVDaGlsZHJlblN0eWxlSW5SZWdpb24oY29uc3QgUmVu
ZGVyT2JqZWN0KiBvYmplY3QpCiAgICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gY2hpbGRTdHls
ZUluUmVnaW9uOwogICAgICAgICBib29sIG9iamVjdFJlZ2lvblN0eWxlQ2FjaGVkID0gZmFsc2U7
CiAgICAgICAgIGlmIChpdCAhPSBtX3JlbmRlck9iamVjdFJlZ2lvblN0eWxlLmVuZCgpKSB7Ci0g
ICAgICAgICAgICBjaGlsZFN0eWxlSW5SZWdpb24gPSBpdC0+c2Vjb25kLnN0eWxlOworICAgICAg
ICAgICAgY2hpbGRTdHlsZUluUmVnaW9uID0gaXQtPnZhbHVlLnN0eWxlOwogICAgICAgICAgICAg
b2JqZWN0UmVnaW9uU3R5bGVDYWNoZWQgPSB0cnVlOwogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgaWYgKGNoaWxkLT5pc0Fub255bW91cygpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAppbmRleCAxZjEzNzllNDhkNjU1MzJjNDRmZjYy
NGQyNjlkMTQyMmM0OWEzYmQ3Li40ZmNjY2FmMGVhOWViMWYzMDMxNzliMWMxOGExYjMxODllZDlm
NDQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0
aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9u
LmNwcApAQCAtMTQ1Niw3ICsxNDU2LDcgQEAgQ29sbGFwc2VkQm9yZGVyVmFsdWUmIFJlbmRlclRh
YmxlU2VjdGlvbjo6Y2FjaGVkQ29sbGFwc2VkQm9yZGVyKGNvbnN0IFJlbmRlclRhYmwKICAgICBB
U1NFUlQodGFibGUoKS0+Y29sbGFwc2VCb3JkZXJzKCkpOwogICAgIEhhc2hNYXA8cGFpcjxjb25z
dCBSZW5kZXJUYWJsZUNlbGwqLCBpbnQ+LCBDb2xsYXBzZWRCb3JkZXJWYWx1ZT46Oml0ZXJhdG9y
IGl0ID0gbV9jZWxsc0NvbGxhcHNlZEJvcmRlcnMuZmluZChtYWtlX3BhaXIoY2VsbCwgc2lkZSkp
OwogICAgIEFTU0VSVChpdCAhPSBtX2NlbGxzQ29sbGFwc2VkQm9yZGVycy5lbmQoKSk7Ci0gICAg
cmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgcmV0dXJuIGl0LT52YWx1ZTsKIH0KIAogUmVuZGVyVGFi
bGVTZWN0aW9uKiBSZW5kZXJUYWJsZVNlY3Rpb246OmNyZWF0ZUFub255bW91c1dpdGhQYXJlbnRS
ZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QqIHBhcmVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZU1hYy5tbQppbmRleCAxYjkyMDA2ZjE1Y2ViNDhlNzI0ODZiMmI2ZDEw
YTJmOTVkOTBlMjk1Li40MWJhZjA1ZTJjZWY0YjMyYmEyNDkzYzZmZDZlMzMzMWQwMjYyNGM5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCkBAIC0zODAsNyAr
MzgwLDcgQEAgQ29sb3IgUmVuZGVyVGhlbWVNYWM6OnN5c3RlbUNvbG9yKGludCBjc3NWYWx1ZUlk
KSBjb25zdAogICAgIHsKICAgICAgICAgSGFzaE1hcDxpbnQsIFJHQkEzMj46Oml0ZXJhdG9yIGl0
ID0gbV9zeXN0ZW1Db2xvckNhY2hlLmZpbmQoY3NzVmFsdWVJZCk7CiAgICAgICAgIGlmIChpdCAh
PSBtX3N5c3RlbUNvbG9yQ2FjaGUuZW5kKCkpCi0gICAgICAgICAgICByZXR1cm4gaXQtPnNlY29u
ZDsKKyAgICAgICAgICAgIHJldHVybiBpdC0+dmFsdWU7CiAgICAgfQogCiAgICAgQ29sb3IgY29s
b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKaW5kZXggOGJkNDljY2Zh
ZTFhZGRjOWY2Y2U2NWEyYzliZmQ5Mjk1NzM3NTE5Zi4uZDMyNjY4Mzk4NTU3YTM3Mjg1ZThlMzE4
ZDVkMjE5ZTQxY2MyMDRkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNw
cApAQCAtNDQ3LDcgKzQ0Nyw3IEBAIEludFJlY3QgUmVuZGVyVmlldzo6c2VsZWN0aW9uQm91bmRz
KGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRlbnQpIGNvbnN0CiAgICAgICAgICAgICBzZWxlY3RlZE9i
amVjdHMuc2V0KG9zLCBhZG9wdFB0cihuZXcgUmVuZGVyU2VsZWN0aW9uSW5mbyhvcywgY2xpcFRv
VmlzaWJsZUNvbnRlbnQpKSk7CiAgICAgICAgICAgICBSZW5kZXJCbG9jayogY2IgPSBvcy0+Y29u
dGFpbmluZ0Jsb2NrKCk7CiAgICAgICAgICAgICB3aGlsZSAoY2IgJiYgIWNiLT5pc1JlbmRlclZp
ZXcoKSkgewotICAgICAgICAgICAgICAgIE93blB0cjxSZW5kZXJTZWxlY3Rpb25JbmZvPiYgYmxv
Y2tJbmZvID0gc2VsZWN0ZWRPYmplY3RzLmFkZChjYiwgbnVsbHB0cikuaXRlcmF0b3ItPnNlY29u
ZDsKKyAgICAgICAgICAgICAgICBPd25QdHI8UmVuZGVyU2VsZWN0aW9uSW5mbz4mIGJsb2NrSW5m
byA9IHNlbGVjdGVkT2JqZWN0cy5hZGQoY2IsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKICAg
ICAgICAgICAgICAgICBpZiAoYmxvY2tJbmZvKQogICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICBibG9ja0luZm8gPSBhZG9wdFB0cihuZXcgUmVuZGVyU2VsZWN0aW9u
SW5mbyhjYiwgY2xpcFRvVmlzaWJsZUNvbnRlbnQpKTsKQEAgLTQ2Miw3ICs0NjIsNyBAQCBJbnRS
ZWN0IFJlbmRlclZpZXc6OnNlbGVjdGlvbkJvdW5kcyhib29sIGNsaXBUb1Zpc2libGVDb250ZW50
KSBjb25zdAogICAgIExheW91dFJlY3Qgc2VsUmVjdDsKICAgICBTZWxlY3Rpb25NYXA6Oml0ZXJh
dG9yIGVuZCA9IHNlbGVjdGVkT2JqZWN0cy5lbmQoKTsKICAgICBmb3IgKFNlbGVjdGlvbk1hcDo6
aXRlcmF0b3IgaSA9IHNlbGVjdGVkT2JqZWN0cy5iZWdpbigpOyBpICE9IGVuZDsgKytpKSB7Ci0g
ICAgICAgIFJlbmRlclNlbGVjdGlvbkluZm8qIGluZm8gPSBpLT5zZWNvbmQuZ2V0KCk7CisgICAg
ICAgIFJlbmRlclNlbGVjdGlvbkluZm8qIGluZm8gPSBpLT52YWx1ZS5nZXQoKTsKICAgICAgICAg
Ly8gUmVuZGVyU2VsZWN0aW9uSW5mbzo6cmVjdCgpIGlzIGluIHRoZSBjb29yZGluYXRlcyBvZiB0
aGUgcmVwYWludENvbnRhaW5lciwgc28gbWFwIHRvIHBhZ2UgY29vcmRpbmF0ZXMuCiAgICAgICAg
IExheW91dFJlY3QgY3VyclJlY3QgPSBpbmZvLT5yZWN0KCk7CiAgICAgICAgIGlmIChSZW5kZXJC
b3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciA9IGluZm8tPnJlcGFpbnRDb250YWluZXIo
KSkgewpAQCAtNTI3LDcgKzUyNyw3IEBAIHZvaWQgUmVuZGVyVmlldzo6c2V0U2VsZWN0aW9uKFJl
bmRlck9iamVjdCogc3RhcnQsIGludCBzdGFydFBvcywgUmVuZGVyT2JqZWN0KiBlCiAgICAgICAg
ICAgICBpZiAoYmxvY2tSZXBhaW50TW9kZSA9PSBSZXBhaW50TmV3WE9ST2xkKSB7CiAgICAgICAg
ICAgICAgICAgUmVuZGVyQmxvY2sqIGNiID0gb3MtPmNvbnRhaW5pbmdCbG9jaygpOwogICAgICAg
ICAgICAgICAgIHdoaWxlIChjYiAmJiAhY2ItPmlzUmVuZGVyVmlldygpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIE93blB0cjxSZW5kZXJCbG9ja1NlbGVjdGlvbkluZm8+JiBibG9ja0luZm8gPSBv
bGRTZWxlY3RlZEJsb2Nrcy5hZGQoY2IsIG51bGxwdHIpLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAg
ICAgICAgICAgICAgICAgIE93blB0cjxSZW5kZXJCbG9ja1NlbGVjdGlvbkluZm8+JiBibG9ja0lu
Zm8gPSBvbGRTZWxlY3RlZEJsb2Nrcy5hZGQoY2IsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKGJsb2NrSW5mbykKICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBibG9ja0luZm8gPSBhZG9wdFB0cihuZXcg
UmVuZGVyQmxvY2tTZWxlY3Rpb25JbmZvKGNiKSk7CkBAIC01NDIsNyArNTQyLDcgQEAgdm9pZCBS
ZW5kZXJWaWV3OjpzZXRTZWxlY3Rpb24oUmVuZGVyT2JqZWN0KiBzdGFydCwgaW50IHN0YXJ0UG9z
LCBSZW5kZXJPYmplY3QqIGUKICAgICAvLyBOb3cgY2xlYXIgdGhlIHNlbGVjdGlvbi4KICAgICBT
ZWxlY3RlZE9iamVjdE1hcDo6aXRlcmF0b3Igb2xkT2JqZWN0c0VuZCA9IG9sZFNlbGVjdGVkT2Jq
ZWN0cy5lbmQoKTsKICAgICBmb3IgKFNlbGVjdGVkT2JqZWN0TWFwOjppdGVyYXRvciBpID0gb2xk
U2VsZWN0ZWRPYmplY3RzLmJlZ2luKCk7IGkgIT0gb2xkT2JqZWN0c0VuZDsgKytpKQotICAgICAg
ICBpLT5maXJzdC0+c2V0U2VsZWN0aW9uU3RhdGVJZk5lZWRlZChTZWxlY3Rpb25Ob25lKTsKKyAg
ICAgICAgaS0+a2V5LT5zZXRTZWxlY3Rpb25TdGF0ZUlmTmVlZGVkKFNlbGVjdGlvbk5vbmUpOwog
CiAgICAgLy8gc2V0IHNlbGVjdGlvbiBzdGFydCBhbmQgZW5kCiAgICAgbV9zZWxlY3Rpb25TdGFy
dCA9IHN0YXJ0OwpAQCAtNTgwLDcgKzU4MCw3IEBAIHZvaWQgUmVuZGVyVmlldzo6c2V0U2VsZWN0
aW9uKFJlbmRlck9iamVjdCogc3RhcnQsIGludCBzdGFydFBvcywgUmVuZGVyT2JqZWN0KiBlCiAg
ICAgICAgICAgICBuZXdTZWxlY3RlZE9iamVjdHMuc2V0KG8sIGFkb3B0UHRyKG5ldyBSZW5kZXJT
ZWxlY3Rpb25JbmZvKG8sIHRydWUpKSk7CiAgICAgICAgICAgICBSZW5kZXJCbG9jayogY2IgPSBv
LT5jb250YWluaW5nQmxvY2soKTsKICAgICAgICAgICAgIHdoaWxlIChjYiAmJiAhY2ItPmlzUmVu
ZGVyVmlldygpKSB7Ci0gICAgICAgICAgICAgICAgT3duUHRyPFJlbmRlckJsb2NrU2VsZWN0aW9u
SW5mbz4mIGJsb2NrSW5mbyA9IG5ld1NlbGVjdGVkQmxvY2tzLmFkZChjYiwgbnVsbHB0cikuaXRl
cmF0b3ItPnNlY29uZDsKKyAgICAgICAgICAgICAgICBPd25QdHI8UmVuZGVyQmxvY2tTZWxlY3Rp
b25JbmZvPiYgYmxvY2tJbmZvID0gbmV3U2VsZWN0ZWRCbG9ja3MuYWRkKGNiLCBudWxscHRyKS5p
dGVyYXRvci0+dmFsdWU7CiAgICAgICAgICAgICAgICAgaWYgKGJsb2NrSW5mbykKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgYmxvY2tJbmZvID0gYWRvcHRQdHIo
bmV3IFJlbmRlckJsb2NrU2VsZWN0aW9uSW5mbyhjYikpOwpAQCAtNTk4LDkgKzU5OCw5IEBAIHZv
aWQgUmVuZGVyVmlldzo6c2V0U2VsZWN0aW9uKFJlbmRlck9iamVjdCogc3RhcnQsIGludCBzdGFy
dFBvcywgUmVuZGVyT2JqZWN0KiBlCiAKICAgICAvLyBIYXZlIGFueSBvZiB0aGUgb2xkIHNlbGVj
dGVkIG9iamVjdHMgY2hhbmdlZCBjb21wYXJlZCB0byB0aGUgbmV3IHNlbGVjdGlvbj8KICAgICBm
b3IgKFNlbGVjdGVkT2JqZWN0TWFwOjppdGVyYXRvciBpID0gb2xkU2VsZWN0ZWRPYmplY3RzLmJl
Z2luKCk7IGkgIT0gb2xkT2JqZWN0c0VuZDsgKytpKSB7Ci0gICAgICAgIFJlbmRlck9iamVjdCog
b2JqID0gaS0+Zmlyc3Q7CisgICAgICAgIFJlbmRlck9iamVjdCogb2JqID0gaS0+a2V5OwogICAg
ICAgICBSZW5kZXJTZWxlY3Rpb25JbmZvKiBuZXdJbmZvID0gbmV3U2VsZWN0ZWRPYmplY3RzLmdl
dChvYmopOwotICAgICAgICBSZW5kZXJTZWxlY3Rpb25JbmZvKiBvbGRJbmZvID0gaS0+c2Vjb25k
LmdldCgpOworICAgICAgICBSZW5kZXJTZWxlY3Rpb25JbmZvKiBvbGRJbmZvID0gaS0+dmFsdWUu
Z2V0KCk7CiAgICAgICAgIGlmICghbmV3SW5mbyB8fCBvbGRJbmZvLT5yZWN0KCkgIT0gbmV3SW5m
by0+cmVjdCgpIHx8IG9sZEluZm8tPnN0YXRlKCkgIT0gbmV3SW5mby0+c3RhdGUoKSB8fAogICAg
ICAgICAgICAgKG1fc2VsZWN0aW9uU3RhcnQgPT0gb2JqICYmIG9sZFN0YXJ0UG9zICE9IG1fc2Vs
ZWN0aW9uU3RhcnRQb3MpIHx8CiAgICAgICAgICAgICAobV9zZWxlY3Rpb25FbmQgPT0gb2JqICYm
IG9sZEVuZFBvcyAhPSBtX3NlbGVjdGlvbkVuZFBvcykpIHsKQEAgLTYxNSwxNCArNjE1LDE0IEBA
IHZvaWQgUmVuZGVyVmlldzo6c2V0U2VsZWN0aW9uKFJlbmRlck9iamVjdCogc3RhcnQsIGludCBz
dGFydFBvcywgUmVuZGVyT2JqZWN0KiBlCiAgICAgLy8gQW55IG5ldyBvYmplY3RzIHRoYXQgcmVt
YWluIHdlcmUgbm90IGZvdW5kIGluIHRoZSBvbGQgb2JqZWN0cyBkaWN0LCBhbmQgc28gdGhleSBu
ZWVkIHRvIGJlIHVwZGF0ZWQuCiAgICAgU2VsZWN0ZWRPYmplY3RNYXA6Oml0ZXJhdG9yIG5ld09i
amVjdHNFbmQgPSBuZXdTZWxlY3RlZE9iamVjdHMuZW5kKCk7CiAgICAgZm9yIChTZWxlY3RlZE9i
amVjdE1hcDo6aXRlcmF0b3IgaSA9IG5ld1NlbGVjdGVkT2JqZWN0cy5iZWdpbigpOyBpICE9IG5l
d09iamVjdHNFbmQ7ICsraSkKLSAgICAgICAgaS0+c2Vjb25kLT5yZXBhaW50KCk7CisgICAgICAg
IGktPnZhbHVlLT5yZXBhaW50KCk7CiAKICAgICAvLyBIYXZlIGFueSBvZiB0aGUgb2xkIGJsb2Nr
cyBjaGFuZ2VkPwogICAgIFNlbGVjdGVkQmxvY2tNYXA6Oml0ZXJhdG9yIG9sZEJsb2Nrc0VuZCA9
IG9sZFNlbGVjdGVkQmxvY2tzLmVuZCgpOwogICAgIGZvciAoU2VsZWN0ZWRCbG9ja01hcDo6aXRl
cmF0b3IgaSA9IG9sZFNlbGVjdGVkQmxvY2tzLmJlZ2luKCk7IGkgIT0gb2xkQmxvY2tzRW5kOyAr
K2kpIHsKLSAgICAgICAgUmVuZGVyQmxvY2sqIGJsb2NrID0gaS0+Zmlyc3Q7CisgICAgICAgIFJl
bmRlckJsb2NrKiBibG9jayA9IGktPmtleTsKICAgICAgICAgUmVuZGVyQmxvY2tTZWxlY3Rpb25J
bmZvKiBuZXdJbmZvID0gbmV3U2VsZWN0ZWRCbG9ja3MuZ2V0KGJsb2NrKTsKLSAgICAgICAgUmVu
ZGVyQmxvY2tTZWxlY3Rpb25JbmZvKiBvbGRJbmZvID0gaS0+c2Vjb25kLmdldCgpOworICAgICAg
ICBSZW5kZXJCbG9ja1NlbGVjdGlvbkluZm8qIG9sZEluZm8gPSBpLT52YWx1ZS5nZXQoKTsKICAg
ICAgICAgaWYgKCFuZXdJbmZvIHx8IG9sZEluZm8tPnJlY3RzKCkgIT0gbmV3SW5mby0+cmVjdHMo
KSB8fCBvbGRJbmZvLT5zdGF0ZSgpICE9IG5ld0luZm8tPnN0YXRlKCkpIHsKICAgICAgICAgICAg
IG9sZEluZm8tPnJlcGFpbnQoKTsKICAgICAgICAgICAgIGlmIChuZXdJbmZvKSB7CkBAIC02MzUs
NyArNjM1LDcgQEAgdm9pZCBSZW5kZXJWaWV3OjpzZXRTZWxlY3Rpb24oUmVuZGVyT2JqZWN0KiBz
dGFydCwgaW50IHN0YXJ0UG9zLCBSZW5kZXJPYmplY3QqIGUKICAgICAvLyBBbnkgbmV3IGJsb2Nr
cyB0aGF0IHJlbWFpbiB3ZXJlIG5vdCBmb3VuZCBpbiB0aGUgb2xkIGJsb2NrcyBkaWN0LCBhbmQg
c28gdGhleSBuZWVkIHRvIGJlIHVwZGF0ZWQuCiAgICAgU2VsZWN0ZWRCbG9ja01hcDo6aXRlcmF0
b3IgbmV3QmxvY2tzRW5kID0gbmV3U2VsZWN0ZWRCbG9ja3MuZW5kKCk7CiAgICAgZm9yIChTZWxl
Y3RlZEJsb2NrTWFwOjppdGVyYXRvciBpID0gbmV3U2VsZWN0ZWRCbG9ja3MuYmVnaW4oKTsgaSAh
PSBuZXdCbG9ja3NFbmQ7ICsraSkKLSAgICAgICAgaS0+c2Vjb25kLT5yZXBhaW50KCk7CisgICAg
ICAgIGktPnZhbHVlLT5yZXBhaW50KCk7CiAKICAgICBtX2ZyYW1lVmlldy0+ZW5kRGVmZXJyZWRS
ZXBhaW50cygpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
cldpZGdldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcApp
bmRleCAzYTMwMjYwZjg5ZGNjOGVkYmVlZDZmOTZkOGVjMGMzYzQyNjUxOTQ3Li4yYjk1ZTkzNjY4
NDYyY2M2Njc3YzNhNDVkYmIwMGVjOGYwOWI2YjY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyV2lkZ2V0LmNwcApAQCAtNzAsOSArNzAsOSBAQCB2b2lkIFJlbmRlcldpZGdldDo6
cmVzdW1lV2lkZ2V0SGllcmFyY2h5VXBkYXRlcygpCiAgICAgICAgIHdpZGdldE5ld1BhcmVudE1h
cCgpLmNsZWFyKCk7CiAgICAgICAgIFdpZGdldFRvUGFyZW50TWFwOjppdGVyYXRvciBlbmQgPSBt
YXAuZW5kKCk7CiAgICAgICAgIGZvciAoV2lkZ2V0VG9QYXJlbnRNYXA6Oml0ZXJhdG9yIGl0ID0g
bWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgV2lkZ2V0KiBjaGls
ZCA9IGl0LT5maXJzdC5nZXQoKTsKKyAgICAgICAgICAgIFdpZGdldCogY2hpbGQgPSBpdC0+a2V5
LmdldCgpOwogICAgICAgICAgICAgU2Nyb2xsVmlldyogY3VycmVudFBhcmVudCA9IGNoaWxkLT5w
YXJlbnQoKTsKLSAgICAgICAgICAgIEZyYW1lVmlldyogbmV3UGFyZW50ID0gaXQtPnNlY29uZDsK
KyAgICAgICAgICAgIEZyYW1lVmlldyogbmV3UGFyZW50ID0gaXQtPnZhbHVlOwogICAgICAgICAg
ICAgaWYgKG5ld1BhcmVudCAhPSBjdXJyZW50UGFyZW50KSB7CiAgICAgICAgICAgICAgICAgaWYg
KGN1cnJlbnRQYXJlbnQpCiAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYXJlbnQtPnJlbW92
ZUNoaWxkKGNoaWxkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290
SW5saW5lQm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNw
cAppbmRleCA0MzEzZmE3MzVhMTZhYzY5YjkxNWMxMmUwYTMzZTJlYTU5YTY0NDJkLi4yYzE4MmUx
ZDdmYThlZWEzNjc2YmViYmQ4MWJlMTFiNWMzNGIzNmFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCkBAIC03NTUsOCArNzU1LDggQEAgdm9pZCBSb290SW5s
aW5lQm94Ojphc2NlbnRBbmREZXNjZW50Rm9yQm94KElubGluZUJveCogYm94LCBHbHlwaE92ZXJm
bG93QW5kRmFsbGIKICAgICBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93ID0gMDsKICAgICBp
ZiAoYm94LT5pc1RleHQoKSkgewogICAgICAgICBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250
c01hcDo6aXRlcmF0b3IgaXQgPSB0ZXh0Qm94RGF0YU1hcC5maW5kKHRvSW5saW5lVGV4dEJveChi
b3gpKTsKLSAgICAgICAgdXNlZEZvbnRzID0gaXQgPT0gdGV4dEJveERhdGFNYXAuZW5kKCkgPyAw
IDogJml0LT5zZWNvbmQuZmlyc3Q7Ci0gICAgICAgIGdseXBoT3ZlcmZsb3cgPSBpdCA9PSB0ZXh0
Qm94RGF0YU1hcC5lbmQoKSA/IDAgOiAmaXQtPnNlY29uZC5zZWNvbmQ7CisgICAgICAgIHVzZWRG
b250cyA9IGl0ID09IHRleHRCb3hEYXRhTWFwLmVuZCgpID8gMCA6ICZpdC0+dmFsdWUuZmlyc3Q7
CisgICAgICAgIGdseXBoT3ZlcmZsb3cgPSBpdCA9PSB0ZXh0Qm94RGF0YU1hcC5lbmQoKSA/IDAg
OiAmaXQtPnZhbHVlLnNlY29uZDsKICAgICB9CiAgICAgICAgIAogICAgIGJvb2wgaW5jbHVkZUxl
YWRpbmcgPSBpbmNsdWRlTGVhZGluZ0ZvckJveChib3gpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1ZlcnRpY2FsUG9zaXRpb25DYWNoZS5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1ZlcnRpY2FsUG9zaXRpb25DYWNoZS5oCmluZGV4IGJiMzk4Nzc3MjFkYTcwNWMz
N2JkM2I4ODE5MDI0Y2QyN2UzNmU1Y2UuLmI3Y2Q3ZTA4NWU3ZjliZWRiNTI4ZjYyZGVlZjU3YTdi
YjhhYTViZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9WZXJ0aWNhbFBv
c2l0aW9uQ2FjaGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVmVydGljYWxQb3Np
dGlvbkNhY2hlLmgKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgogICAgICAgICBjb25zdCBIYXNo
TWFwPFJlbmRlck9iamVjdCosIGludD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwVG9DaGVjay5m
aW5kKHJlbmRlcmVyKTsKICAgICAgICAgaWYgKGl0ID09IG1hcFRvQ2hlY2suZW5kKCkpCiAgICAg
ICAgICAgICByZXR1cm4gUG9zaXRpb25VbmRlZmluZWQ7Ci0gICAgICAgIHJldHVybiBpdC0+c2Vj
b25kOworICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwogICAgIH0KICAgICAKICAgICB2b2lkIHNl
dChSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBGb250QmFzZWxpbmUgYmFzZWxpbmVUeXBlLCBpbnQg
cG9zaXRpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR0lubGluZVRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdJbmxpbmVUZXh0LmNwcAppbmRleCA0NTRmN2FhNmQwN2I2YmQzMTIzMjM2YmVmY2E0OTllY2Zl
NWEwN2EwLi4yMzcxZDFhYmY5Yzk2YmE0YTQ2MjhiOTNjYTQ5NDJhZjdhMDdiOTVmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5j
cHAKQEAgLTE1OCw3ICsxNTgsNyBAQCBib29sIFJlbmRlclNWR0lubGluZVRleHQ6OmNoYXJhY3Rl
clN0YXJ0c05ld1RleHRDaHVuayhpbnQgcG9zaXRpb24pIGNvbnN0CiAgICAgaWYgKGl0ID09IG1f
bGF5b3V0QXR0cmlidXRlcy5jaGFyYWN0ZXJEYXRhTWFwKCkuZW5kKCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIHJldHVybiBpdC0+c2Vjb25kLnggIT0gU1ZHVGV4dExheW91dEF0dHJp
YnV0ZXM6OmVtcHR5VmFsdWUoKSB8fCBpdC0+c2Vjb25kLnkgIT0gU1ZHVGV4dExheW91dEF0dHJp
YnV0ZXM6OmVtcHR5VmFsdWUoKTsKKyAgICByZXR1cm4gaXQtPnZhbHVlLnggIT0gU1ZHVGV4dExh
eW91dEF0dHJpYnV0ZXM6OmVtcHR5VmFsdWUoKSB8fCBpdC0+dmFsdWUueSAhPSBTVkdUZXh0TGF5
b3V0QXR0cmlidXRlczo6ZW1wdHlWYWx1ZSgpOwogfQogCiBWaXNpYmxlUG9zaXRpb24gUmVuZGVy
U1ZHSW5saW5lVGV4dDo6cG9zaXRpb25Gb3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXIuY3BwCmluZGV4IDBmOTE2MTBlNjJlNGY5MWQzOGQ0MmJiMzIwYzhkMDY3MDRk
NzdhZTYuLjlmZjk0NjE3ZmY2MjU3ZTA2YjFkYzYwZWZjYzVjNzYzNGM3YzZlNjIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VG
aWx0ZXIuY3BwCkBAIC0zNDAsNyArMzQwLDcgQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRl
cjo6cHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZChSZW5kZXJPYmplY3QqIG9iamVjdCwgY28KICAg
ICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMqIHByaW1pdHZlID0gc3RhdGlj
X2Nhc3Q8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKj4ob2JqZWN0LT5ub2Rl
KCkpOwogCiAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBGaWx0ZXJEYXRh
KiBmaWx0ZXJEYXRhID0gaXQtPnNlY29uZDsKKyAgICAgICAgRmlsdGVyRGF0YSogZmlsdGVyRGF0
YSA9IGl0LT52YWx1ZTsKICAgICAgICAgaWYgKCFmaWx0ZXJEYXRhLT5idWlsZGVkKQogICAgICAg
ICAgICAgY29udGludWU7CiAKQEAgLTM1NSw3ICszNTUsNyBAQCB2b2lkIFJlbmRlclNWR1Jlc291
cmNlRmlsdGVyOjpwcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKFJlbmRlck9iamVjdCogb2JqZWN0
LCBjbwogICAgICAgICBidWlsZGVyLT5jbGVhclJlc3VsdHNSZWN1cnNpdmUoZWZmZWN0KTsKIAog
ICAgICAgICAvLyBSZXBhaW50IHRoZSBpbWFnZSBvbiB0aGUgc2NyZWVuLgotICAgICAgICBtYXJr
Q2xpZW50Rm9ySW52YWxpZGF0aW9uKGl0LT5maXJzdCwgUmVwYWludEludmFsaWRhdGlvbik7Cisg
ICAgICAgIG1hcmtDbGllbnRGb3JJbnZhbGlkYXRpb24oaXQtPmtleSwgUmVwYWludEludmFsaWRh
dGlvbik7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcAppbmRleCA1OGUwMDc5YjIyY2Iy
YzVjMTdkOGYyZDRkNzNjYmJhMjEwYWE5YTVlLi4zMGNlMWI4Y2I0Zjk3OGMwMGRjYmRhMTdkZmI1
NTcyM2NmYzU4MDgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAKQEAgLTE0MCw3ICsxNDAsNyBAQCBi
b29sIFJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQ6OmFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0
KiBvYmplY3QsIFJlbmRlclN0eWxlKgogICAgIGlmIChncmFkaWVudFVuaXRzKCkgPT0gU1ZHVW5p
dFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YICYmIG9iamVjdEJvdW5kaW5n
Qm94LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgT3duUHRyPEdyYWRp
ZW50RGF0YT4mIGdyYWRpZW50RGF0YSA9IG1fZ3JhZGllbnRNYXAuYWRkKG9iamVjdCwgbnVsbHB0
cikuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBPd25QdHI8R3JhZGllbnREYXRhPiYgZ3JhZGllbnRE
YXRhID0gbV9ncmFkaWVudE1hcC5hZGQob2JqZWN0LCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7
CiAgICAgaWYgKCFncmFkaWVudERhdGEpCiAgICAgICAgIGdyYWRpZW50RGF0YSA9IGFkb3B0UHRy
KG5ldyBHcmFkaWVudERhdGEpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAKaW5kZXggYjRhZjk5OTE4NTUy
YTE1NDg1MmJiMmE0YjQ3YjAzMGVkYTZhNTMxNi4uM2ExODgyYWNmODIxNzIyODZiMjNiYjU0MmJl
NDA2NmEzYmFjY2NjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcApAQCAtODQsNyArODQsNyBAQCBib29s
IFJlbmRlclNWR1Jlc291cmNlUGF0dGVybjo6YXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqIG9i
amVjdCwgUmVuZGVyU3R5bGUqCiAgICAgaWYgKG1fYXR0cmlidXRlcy5wYXR0ZXJuVW5pdHMoKSA9
PSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1ggJiYgb2JqZWN0
Qm91bmRpbmdCb3guaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBPd25Q
dHI8UGF0dGVybkRhdGE+JiBwYXR0ZXJuRGF0YSA9IG1fcGF0dGVybk1hcC5hZGQob2JqZWN0LCBu
dWxscHRyKS5pdGVyYXRvci0+c2Vjb25kOworICAgIE93blB0cjxQYXR0ZXJuRGF0YT4mIHBhdHRl
cm5EYXRhID0gbV9wYXR0ZXJuTWFwLmFkZChvYmplY3QsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1
ZTsKICAgICBpZiAoIXBhdHRlcm5EYXRhKQogICAgICAgICBwYXR0ZXJuRGF0YSA9IGFkb3B0UHRy
KG5ldyBQYXR0ZXJuRGF0YSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHUmVzb3VyY2VzQ2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdSZXNvdXJjZXNDYWNoZS5jcHAKaW5kZXggMjk3YzA3YjZhZDQwOWEyN2U2MzU4NTYwMDBj
OWFkNGI5MDViNDM1NC4uOGI0OGNmNTNlNzk5YTBiN2RlMmI1NGE0YzcxNTJlMDkyNzUzOWMwMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXNDYWNo
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXNDYWNo
ZS5jcHAKQEAgLTE5OCwxMSArMTk4LDExIEBAIHZvaWQgU1ZHUmVzb3VyY2VzQ2FjaGU6OnJlc291
cmNlRGVzdHJveWVkKFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKiByZXNvdXJjZSkKIAogICAg
IEhhc2hNYXA8Y29uc3QgUmVuZGVyT2JqZWN0KiwgU1ZHUmVzb3VyY2VzKj46Oml0ZXJhdG9yIGVu
ZCA9IGNhY2hlLT5tX2NhY2hlLmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDxjb25zdCBSZW5kZXJP
YmplY3QqLCBTVkdSZXNvdXJjZXMqPjo6aXRlcmF0b3IgaXQgPSBjYWNoZS0+bV9jYWNoZS5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaXQtPnNlY29uZC0+cmVzb3VyY2VEZXN0
cm95ZWQocmVzb3VyY2UpOworICAgICAgICBpdC0+dmFsdWUtPnJlc291cmNlRGVzdHJveWVkKHJl
c291cmNlKTsKIAogICAgICAgICAvLyBNYXJrIHVzZXJzIG9mIGRlc3Ryb3llZCByZXNvdXJjZXMg
YXMgcGVuZGluZyByZXNvbHV0aW9uIGJhc2VkIG9uIHRoZSBpZCBvZiB0aGUgb2xkIHJlc291cmNl
LgogICAgICAgICBFbGVtZW50KiByZXNvdXJjZUVsZW1lbnQgPSB0b0VsZW1lbnQocmVzb3VyY2Ut
Pm5vZGUoKSk7Ci0gICAgICAgIFNWR1N0eWxlZEVsZW1lbnQqIGNsaWVudEVsZW1lbnQgPSB0b1NW
R1N0eWxlZEVsZW1lbnQoaXQtPmZpcnN0LT5ub2RlKCkpOworICAgICAgICBTVkdTdHlsZWRFbGVt
ZW50KiBjbGllbnRFbGVtZW50ID0gdG9TVkdTdHlsZWRFbGVtZW50KGl0LT5rZXktPm5vZGUoKSk7
CiAgICAgICAgIFNWR0RvY3VtZW50RXh0ZW5zaW9ucyogZXh0ZW5zaW9ucyA9IGNsaWVudEVsZW1l
bnQtPmRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKTsKIAogICAgICAgICBleHRlbnNp
b25zLT5hZGRQZW5kaW5nUmVzb3VyY2UocmVzb3VyY2VFbGVtZW50LT5mYXN0R2V0QXR0cmlidXRl
KEhUTUxOYW1lczo6aWRBdHRyKSwgY2xpZW50RWxlbWVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jvb3RJbmxpbmVCb3guY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdSb290SW5saW5lQm94LmNwcAppbmRleCAzNGU5M2EwMmVmNzQz
MmUzYzI2ZWYyMzYwZDFjZjNmZDQzN2U0MTZlLi41NDZmZWMyNmNlNjk4MWFjZDFmY2Q3YWJlMGEw
YTk4MzhjNzBiNDNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1Jvb3RJbmxpbmVCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
Um9vdElubGluZUJveC5jcHAKQEAgLTIyNiwxNyArMjI2LDE3IEBAIHN0YXRpYyBpbmxpbmUgdm9p
ZCBzd2FwSXRlbXNJbkxheW91dEF0dHJpYnV0ZXMoU1ZHVGV4dExheW91dEF0dHJpYnV0ZXMqIGZp
cnN0QXR0CiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChmaXJzdFByZXNlbnQgJiYgbGFzdFBy
ZXNlbnQpIHsKLSAgICAgICAgc3RkOjpzd2FwKGl0Rmlyc3QtPnNlY29uZCwgaXRMYXN0LT5zZWNv
bmQpOworICAgICAgICBzdGQ6OnN3YXAoaXRGaXJzdC0+dmFsdWUsIGl0TGFzdC0+dmFsdWUpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKGZpcnN0UHJlc2VudCAmJiAhbGFzdFBy
ZXNlbnQpIHsKLSAgICAgICAgbGFzdEF0dHJpYnV0ZXMtPmNoYXJhY3RlckRhdGFNYXAoKS5zZXQo
bGFzdFBvc2l0aW9uICsgMSwgaXRGaXJzdC0+c2Vjb25kKTsKKyAgICAgICAgbGFzdEF0dHJpYnV0
ZXMtPmNoYXJhY3RlckRhdGFNYXAoKS5zZXQobGFzdFBvc2l0aW9uICsgMSwgaXRGaXJzdC0+dmFs
dWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgLy8gIWZpcnN0UHJlc2VudCAmJiBs
YXN0UHJlc2VudAotICAgIGZpcnN0QXR0cmlidXRlcy0+Y2hhcmFjdGVyRGF0YU1hcCgpLnNldChm
aXJzdFBvc2l0aW9uICsgMSwgaXRMYXN0LT5zZWNvbmQpOworICAgIGZpcnN0QXR0cmlidXRlcy0+
Y2hhcmFjdGVyRGF0YU1hcCgpLnNldChmaXJzdFBvc2l0aW9uICsgMSwgaXRMYXN0LT52YWx1ZSk7
CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBmaW5kRmlyc3RBbmRMYXN0QXR0cmlidXRlc0luVmVj
dG9yKFZlY3RvcjxTVkdUZXh0TGF5b3V0QXR0cmlidXRlcyo+JiBhdHRyaWJ1dGVzLCBSZW5kZXJT
VkdJbmxpbmVUZXh0KiBmaXJzdENvbnRleHQsIFJlbmRlclNWR0lubGluZVRleHQqIGxhc3RDb250
ZXh0LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5
b3V0QXR0cmlidXRlcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRM
YXlvdXRBdHRyaWJ1dGVzLmNwcAppbmRleCBhOTI1OTZjZWVlZGJlMjVhZjc3N2RmNGE0YzgzY2Qz
ZWY5N2I5Y2U4Li42N2ZhMGZhOTgyYWQ2MGJhNzI2NTFhODQ1NDk1ODFmN2ViNTBjZDBhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1
dGVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRB
dHRyaWJ1dGVzLmNwcApAQCAtNjIsOCArNjIsOCBAQCB2b2lkIFNWR1RleHRMYXlvdXRBdHRyaWJ1
dGVzOjpkdW1wKCkgY29uc3QKICAgICBmcHJpbnRmKHN0ZGVyciwgImNvbnRleHQ6ICVwXG4iLCBt
X2NvbnRleHQpOwogICAgIGNvbnN0IFNWR0NoYXJhY3RlckRhdGFNYXA6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IG1fY2hhcmFjdGVyRGF0YU1hcC5lbmQoKTsKICAgICBmb3IgKFNWR0NoYXJhY3RlckRh
dGFNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9jaGFyYWN0ZXJEYXRhTWFwLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgewotICAgICAgICBjb25zdCBTVkdDaGFyYWN0ZXJEYXRhJiBkYXRhID0g
aXQtPnNlY29uZDsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICIgLS0tPiBwb3M9JWksIGRhdGE9
eyIsIGl0LT5maXJzdCk7CisgICAgICAgIGNvbnN0IFNWR0NoYXJhY3RlckRhdGEmIGRhdGEgPSBp
dC0+dmFsdWU7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiIC0tLT4gcG9zPSVpLCBkYXRhPXsi
LCBpdC0+a2V5KTsKICAgICAgICAgZHVtcFNWR0NoYXJhY3RlckRhdGFNYXBWYWx1ZSgieCIsIGRh
dGEueCk7CiAgICAgICAgIGR1bXBTVkdDaGFyYWN0ZXJEYXRhTWFwVmFsdWUoInkiLCBkYXRhLnkp
OwogICAgICAgICBkdW1wU1ZHQ2hhcmFjdGVyRGF0YU1hcFZhbHVlKCJkeCIsIGRhdGEuZHgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0
cmlidXRlc0J1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0
TGF5b3V0QXR0cmlidXRlc0J1aWxkZXIuY3BwCmluZGV4IGJlMmExMmZlOTYwYjc5MjQ4MzEzZGYz
Njk5MTQ1MDNmZWU5YTI5MWIuLmI5NjlhNTMxOWU4MGFjNzg3MmE1ZTQxZDhkZTc3NDMwNDhiZGM0
M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91
dEF0dHJpYnV0ZXNCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1NWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlci5jcHAKQEAgLTE0OSw3ICsxNDksNyBAQCB2
b2lkIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlcjo6YnVpbGRDaGFyYWN0ZXJEYXRhTWFw
KFJlbmRlclNWR1RleHQqIHRleHRSbwogICAgICAgICBkYXRhLnkgPSAwOwogICAgICAgICBtX2No
YXJhY3RlckRhdGFNYXAuc2V0KDEsIGRhdGEpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIFNWR0No
YXJhY3RlckRhdGEmIGRhdGEgPSBpdC0+c2Vjb25kOworICAgICAgICBTVkdDaGFyYWN0ZXJEYXRh
JiBkYXRhID0gaXQtPnZhbHVlOwogICAgICAgICBpZiAoZGF0YS54ID09IFNWR1RleHRMYXlvdXRB
dHRyaWJ1dGVzOjplbXB0eVZhbHVlKCkpCiAgICAgICAgICAgICBkYXRhLnggPSAwOwogICAgICAg
ICBpZiAoZGF0YS55ID09IFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzOjplbXB0eVZhbHVlKCkpCkBA
IC0yMTMsNyArMjEzLDcgQEAgdm9pZCBTVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXI6OmZp
bGxDaGFyYWN0ZXJEYXRhTWFwKGNvbnN0IFRleHRQb3NpdGlvbiYgcG8KICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgdXBkYXRlQ2hhcmFjdGVyRGF0YShpLCBsYXN0
Um90YXRpb24sIGl0LT5zZWNvbmQsIGxlbmd0aENvbnRleHQsIHhMaXN0UHRyLCB5TGlzdFB0ciwg
ZHhMaXN0UHRyLCBkeUxpc3RQdHIsIHJvdGF0ZUxpc3RQdHIpOworICAgICAgICB1cGRhdGVDaGFy
YWN0ZXJEYXRhKGksIGxhc3RSb3RhdGlvbiwgaXQtPnZhbHVlLCBsZW5ndGhDb250ZXh0LCB4TGlz
dFB0ciwgeUxpc3RQdHIsIGR4TGlzdFB0ciwgZHlMaXN0UHRyLCByb3RhdGVMaXN0UHRyKTsKICAg
ICB9CiAKICAgICAvLyBUaGUgbGFzdCByb3RhdGlvbiB2YWx1ZSBhbHdheXMgc3BhbnMgdGhlIHdo
b2xlIHNjb3BlLgpAQCAtMjI5LDcgKzIyOSw3IEBAIHZvaWQgU1ZHVGV4dExheW91dEF0dHJpYnV0
ZXNCdWlsZGVyOjpmaWxsQ2hhcmFjdGVyRGF0YU1hcChjb25zdCBUZXh0UG9zaXRpb24mIHBvCiAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIGl0LT5zZWNvbmQucm90
YXRlID0gbGFzdFJvdGF0aW9uOworICAgICAgICBpdC0+dmFsdWUucm90YXRlID0gbGFzdFJvdGF0
aW9uOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdUZXh0TGF5b3V0RW5naW5lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHVGV4dExheW91dEVuZ2luZS5jcHAKaW5kZXggNWM1NDliMjFjODc1MjA4NDcyNDZhZjI1NGZk
MDU5ZjJlM2I5YjVlOC4uYmEyYjc2MzlkM2Y5NWI3Mzg5NDc1ZmEyZGMwMGM5YTZhYTg1YjMxNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5n
aW5lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRF
bmdpbmUuY3BwCkBAIC00NzUsNyArNDc1LDcgQEAgdm9pZCBTVkdUZXh0TGF5b3V0RW5naW5lOjps
YXlvdXRUZXh0T25MaW5lT3JQYXRoKFNWR0lubGluZVRleHRCb3gqIHRleHRCb3gsIFJlbmQKICAg
ICAgICAgU1ZHQ2hhcmFjdGVyRGF0YSBkYXRhOwogICAgICAgICBTVkdDaGFyYWN0ZXJEYXRhTWFw
OjppdGVyYXRvciBpdCA9IGNoYXJhY3RlckRhdGFNYXAuZmluZChtX2xvZ2ljYWxDaGFyYWN0ZXJP
ZmZzZXQgKyAxKTsKICAgICAgICAgaWYgKGl0ICE9IGNoYXJhY3RlckRhdGFNYXAuZW5kKCkpCi0g
ICAgICAgICAgICBkYXRhID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIGRhdGEgPSBpdC0+dmFs
dWU7CiAKICAgICAgICAgZmxvYXQgeCA9IGRhdGEueDsKICAgICAgICAgZmxvYXQgeSA9IGRhdGEu
eTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJp
Y3NCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJp
Y3NCdWlsZGVyLmNwcAppbmRleCA2ODVlNTE1NDVkZmUxYzA5NGM1NzVjZTNmM2Y2Mjc1ZmJjYTRk
ODA1Li4wYTJkZjViMWY5YmMyMjQ0NDRkOTllNDVkMmZiYjQzNWIzZmQ2YjFlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNzQnVpbGRlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljc0J1aWxkZXIu
Y3BwCkBAIC0xNzEsNyArMTcxLDcgQEAgdm9pZCBTVkdUZXh0TWV0cmljc0J1aWxkZXI6Om1lYXN1
cmVUZXh0UmVuZGVyZXIoUmVuZGVyU1ZHSW5saW5lVGV4dCogdGV4dCwgTWVhc3UKICAgICAgICAg
ICAgIGlmIChkYXRhLT5hbGxDaGFyYWN0ZXJzTWFwKSB7CiAgICAgICAgICAgICAgICAgY29uc3Qg
U1ZHQ2hhcmFjdGVyRGF0YU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBkYXRhLT5hbGxDaGFyYWN0
ZXJzTWFwLT5maW5kKGRhdGEtPnZhbHVlTGlzdFBvc2l0aW9uICsgbV90ZXh0UG9zaXRpb24gLSBk
YXRhLT5za2lwcGVkQ2hhcmFjdGVycyAtIHN1cnJvZ2F0ZVBhaXJDaGFyYWN0ZXJzICsgMSk7CiAg
ICAgICAgICAgICAgICAgaWYgKGl0ICE9IGRhdGEtPmFsbENoYXJhY3RlcnNNYXAtPmVuZCgpKQot
ICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLT5jaGFyYWN0ZXJEYXRhTWFwKCkuc2V0KG1f
dGV4dFBvc2l0aW9uICsgMSwgaXQtPnNlY29uZCk7CisgICAgICAgICAgICAgICAgICAgIGF0dHJp
YnV0ZXMtPmNoYXJhY3RlckRhdGFNYXAoKS5zZXQobV90ZXh0UG9zaXRpb24gKyAxLCBpdC0+dmFs
dWUpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgdGV4dE1ldHJpY3NWYWx1ZXMtPmFwcGVu
ZChtX2N1cnJlbnRNZXRyaWNzKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9T
dG9yYWdlQXJlYVN5bmMuY3BwCmluZGV4IDQ0MjA5YzZmNTlkMGQyYTFkN2YzM2IyZjExMjlhODdl
OTA0NWU3Y2QuLmZjYjEyNmExZDU2ZDVhZmNjOWFiZWJhNjIxZmIwNzc4ZTMyYjdmZTIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5jcHAKQEAgLTE4OCw3ICsxODgs
NyBAQCB2b2lkIFN0b3JhZ2VBcmVhU3luYzo6c3luY1RpbWVyRmlyZWQoVGltZXI8U3RvcmFnZUFy
ZWFTeW5jPiopCiAgICAgICAgICAgICAgICAgcGFydGlhbFN5bmMgPSB0cnVlOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9pdGVtc1BlbmRpbmdT
eW5jLnNldChjaGFuZ2VkX2l0LT5maXJzdC5pc29sYXRlZENvcHkoKSwgY2hhbmdlZF9pdC0+c2Vj
b25kLmlzb2xhdGVkQ29weSgpKTsKKyAgICAgICAgICAgIG1faXRlbXNQZW5kaW5nU3luYy5zZXQo
Y2hhbmdlZF9pdC0+a2V5Lmlzb2xhdGVkQ29weSgpLCBjaGFuZ2VkX2l0LT52YWx1ZS5pc29sYXRl
ZENvcHkoKSk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAocGFydGlhbFN5bmMpIHsKQEAgLTE5
OCw3ICsxOTgsNyBAQCB2b2lkIFN0b3JhZ2VBcmVhU3luYzo6c3luY1RpbWVyRmlyZWQoVGltZXI8
U3RvcmFnZUFyZWFTeW5jPiopCiAgICAgICAgICAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6
aXRlcmF0b3IgcGVuZGluZ19pdCA9IG1faXRlbXNQZW5kaW5nU3luYy5iZWdpbigpOwogICAgICAg
ICAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46Oml0ZXJhdG9yIHBlbmRpbmdfZW5kID0gbV9p
dGVtc1BlbmRpbmdTeW5jLmVuZCgpOwogICAgICAgICAgICAgZm9yICg7IHBlbmRpbmdfaXQgIT0g
cGVuZGluZ19lbmQ7ICsrcGVuZGluZ19pdCkKLSAgICAgICAgICAgICAgICBtX2NoYW5nZWRJdGVt
cy5yZW1vdmUocGVuZGluZ19pdC0+Zmlyc3QpOworICAgICAgICAgICAgICAgIG1fY2hhbmdlZEl0
ZW1zLnJlbW92ZShwZW5kaW5nX2l0LT5rZXkpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFt
X3N5bmNTY2hlZHVsZWQpIHsKQEAgLTM0NSw3ICszNDUsNyBAQCB2b2lkIFN0b3JhZ2VBcmVhU3lu
Yzo6cGVyZm9ybUltcG9ydCgpCiAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46Oml0ZXJhdG9y
IGVuZCA9IGl0ZW1NYXAuZW5kKCk7CiAKICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KQotICAg
ICAgICBtX3N0b3JhZ2VBcmVhLT5pbXBvcnRJdGVtKGl0LT5maXJzdCwgaXQtPnNlY29uZCk7Cisg
ICAgICAgIG1fc3RvcmFnZUFyZWEtPmltcG9ydEl0ZW0oaXQtPmtleSwgaXQtPnZhbHVlKTsKIAog
ICAgIG1hcmtJbXBvcnRlZCgpOwogfQpAQCAtNDM5LDEzICs0MzksMTMgQEAgdm9pZCBTdG9yYWdl
QXJlYVN5bmM6OnN5bmMoYm9vbCBjbGVhckl0ZW1zLCBjb25zdCBIYXNoTWFwPFN0cmluZywgU3Ry
aW5nPiYgaXRlbXMKICAgICB0cmFuc2FjdGlvbi5iZWdpbigpOwogICAgIGZvciAoSGFzaE1hcDxT
dHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaXRlbXMuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7CiAgICAgICAgIC8vIEJhc2VkIG9uIHRoZSBudWxsLW5lc3Mgb2YgdGhlIHNl
Y29uZCBhcmd1bWVudCwgZGVjaWRlIHdoZXRoZXIgdGhpcyBpcyBhbiBpbnNlcnQgb3IgYSBkZWxl
dGUuCi0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCYgcXVlcnkgPSBpdC0+c2Vjb25kLmlzTnVsbCgp
ID8gcmVtb3ZlIDogaW5zZXJ0OworICAgICAgICBTUUxpdGVTdGF0ZW1lbnQmIHF1ZXJ5ID0gaXQt
PnZhbHVlLmlzTnVsbCgpID8gcmVtb3ZlIDogaW5zZXJ0OwogCi0gICAgICAgIHF1ZXJ5LmJpbmRU
ZXh0KDEsIGl0LT5maXJzdCk7CisgICAgICAgIHF1ZXJ5LmJpbmRUZXh0KDEsIGl0LT5rZXkpOwog
CiAgICAgICAgIC8vIElmIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgbm9uLW51bGwsIHdlJ3JlIGRv
aW5nIGFuIGluc2VydCwgc28gYmluZCBpdCBhcyB0aGUgdmFsdWUuCi0gICAgICAgIGlmICghaXQt
PnNlY29uZC5pc051bGwoKSkKLSAgICAgICAgICAgIHF1ZXJ5LmJpbmRCbG9iKDIsIGl0LT5zZWNv
bmQpOworICAgICAgICBpZiAoIWl0LT52YWx1ZS5pc051bGwoKSkKKyAgICAgICAgICAgIHF1ZXJ5
LmJpbmRCbG9iKDIsIGl0LT52YWx1ZSk7CiAKICAgICAgICAgaW50IHJlc3VsdCA9IHF1ZXJ5LnN0
ZXAoKTsKICAgICAgICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHREb25lKSB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9TdG9yYWdlTWFwLmNwcAppbmRleCA4ZTQyZDJmMTc2ZGQzYjExMTJhMDFhNTFkOGRi
NjJmNGIzOGJiYTM1Li40MGUxYTM4ZjFjYTRhNzlmMGNlMjQ3MDExNTM0N2FkYjkyOWY0OTgzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VNYXAuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU1hcC5jcHAKQEAgLTg5LDcgKzg5LDcgQEAgU3Ry
aW5nIFN0b3JhZ2VNYXA6OmtleSh1bnNpZ25lZCBpbmRleCkKICAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOwogCiAgICAgc2V0SXRlcmF0b3JUb0luZGV4KGluZGV4KTsKLSAgICByZXR1cm4gbV9pdGVy
YXRvci0+Zmlyc3Q7CisgICAgcmV0dXJuIG1faXRlcmF0b3ItPmtleTsKIH0KIAogU3RyaW5nIFN0
b3JhZ2VNYXA6OmdldEl0ZW0oY29uc3QgU3RyaW5nJiBrZXkpIGNvbnN0CkBAIC0xMzMsNyArMTMz
LDcgQEAgUGFzc1JlZlB0cjxTdG9yYWdlTWFwPiBTdG9yYWdlTWFwOjpzZXRJdGVtKGNvbnN0IFN0
cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHUKIAogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJp
bmc+OjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gbV9tYXAuYWRkKGtleSwgdmFsdWUpOwogICAgIGlm
ICghYWRkUmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+c2Vj
b25kID0gdmFsdWU7CisgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSB2YWx1ZTsK
IAogICAgIGludmFsaWRhdGVJdGVyYXRvcigpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwCmluZGV4IDlkMWFjNTE3YTBlMmU3YjNmMjZiODIz
YjI4OWE1OTM5NThiZGM4YTAuLjQ1MDFiMTFmYmMxNWNmNDIzOWQwN2ZjMzc0NzY0MTZkYmI3NWVm
Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUlt
cGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwu
Y3BwCkBAIC01NSw3ICs1NSw3IEBAIFBhc3NSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gU3RvcmFn
ZU5hbWVzcGFjZUltcGw6OmxvY2FsU3RvcmFnZU5hbWVzcGFjZShjb25zdCBTCiAgICAgICAgIHJl
dHVybiBzdG9yYWdlTmFtZXNwYWNlLnJlbGVhc2UoKTsKICAgICB9CiAKLSAgICByZXR1cm4gaXQt
PnNlY29uZDsKKyAgICByZXR1cm4gaXQtPnZhbHVlOwogfQogCiBQYXNzUmVmUHRyPFN0b3JhZ2VO
YW1lc3BhY2U+IFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpzZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSh1
bnNpZ25lZCBxdW90YSkKQEAgLTk3LDcgKzk3LDcgQEAgUGFzc1JlZlB0cjxTdG9yYWdlTmFtZXNw
YWNlPiBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6Y29weSgpCiAKICAgICBTdG9yYWdlQXJlYU1hcDo6
aXRlcmF0b3IgZW5kID0gbV9zdG9yYWdlQXJlYU1hcC5lbmQoKTsKICAgICBmb3IgKFN0b3JhZ2VB
cmVhTWFwOjppdGVyYXRvciBpID0gbV9zdG9yYWdlQXJlYU1hcC5iZWdpbigpOyBpICE9IGVuZDsg
KytpKQotICAgICAgICBuZXdOYW1lc3BhY2UtPm1fc3RvcmFnZUFyZWFNYXAuc2V0KGktPmZpcnN0
LCBpLT5zZWNvbmQtPmNvcHkoKSk7CisgICAgICAgIG5ld05hbWVzcGFjZS0+bV9zdG9yYWdlQXJl
YU1hcC5zZXQoaS0+a2V5LCBpLT52YWx1ZS0+Y29weSgpKTsKICAgICByZXR1cm4gbmV3TmFtZXNw
YWNlLnJlbGVhc2UoKTsKIH0KIApAQCAtMTMxLDcgKzEzMSw3IEBAIHZvaWQgU3RvcmFnZU5hbWVz
cGFjZUltcGw6OmNsb3NlKCkKIAogICAgIFN0b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBlbmQgPSBt
X3N0b3JhZ2VBcmVhTWFwLmVuZCgpOwogICAgIGZvciAoU3RvcmFnZUFyZWFNYXA6Oml0ZXJhdG9y
IGl0ID0gbV9zdG9yYWdlQXJlYU1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAg
IGl0LT5zZWNvbmQtPmNsb3NlKCk7CisgICAgICAgIGl0LT52YWx1ZS0+Y2xvc2UoKTsKIAogICAg
IGlmIChtX3N5bmNNYW5hZ2VyKQogICAgICAgICBtX3N5bmNNYW5hZ2VyLT5jbG9zZSgpOwpAQCAt
MTU0LDcgKzE1NCw3IEBAIHZvaWQgU3RvcmFnZU5hbWVzcGFjZUltcGw6OmNsZWFyQWxsT3JpZ2lu
c0ZvckRlbGV0aW9uKCkKIAogICAgIFN0b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBlbmQgPSBtX3N0
b3JhZ2VBcmVhTWFwLmVuZCgpOwogICAgIGZvciAoU3RvcmFnZUFyZWFNYXA6Oml0ZXJhdG9yIGl0
ID0gbV9zdG9yYWdlQXJlYU1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0
LT5zZWNvbmQtPmNsZWFyRm9yT3JpZ2luRGVsZXRpb24oKTsKKyAgICAgICAgaXQtPnZhbHVlLT5j
bGVhckZvck9yaWdpbkRlbGV0aW9uKCk7CiB9CiAgICAgCiB2b2lkIFN0b3JhZ2VOYW1lc3BhY2VJ
bXBsOjpzeW5jKCkKQEAgLTE2Miw3ICsxNjIsNyBAQCB2b2lkIFN0b3JhZ2VOYW1lc3BhY2VJbXBs
OjpzeW5jKCkKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIFN0b3JhZ2VBcmVhTWFw
OjppdGVyYXRvciBlbmQgPSBtX3N0b3JhZ2VBcmVhTWFwLmVuZCgpOwogICAgIGZvciAoU3RvcmFn
ZUFyZWFNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zdG9yYWdlQXJlYU1hcC5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPnN5bmMoKTsKKyAgICAgICAgaXQtPnZhbHVl
LT5zeW5jKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5jcHAKaW5kZXggMTUyY2U4YmI3NTljMWVjNjQzM2Zk
YThkNTc4NzY2MTg1MDNmYzI2Ny4uNDgzNTI0OTkxNzc2OTk1ZmVlYTYzZDRhY2Y4M2Q0ZjhiMTE5
ZmM5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9u
cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5jcHAK
QEAgLTE1Niw3ICsxNTYsNyBAQCB2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlQW5p
bWF0aW9uRWxlbWVudEZyb21UYXJnZXQoU1ZHU01JTEVsZW1lbnQqIGFuaQogICAgIEhhc2hNYXA8
U1ZHRWxlbWVudCosIEhhc2hTZXQ8U1ZHU01JTEVsZW1lbnQqPiogPjo6aXRlcmF0b3IgaXQgPSBt
X2FuaW1hdGVkRWxlbWVudHMuZmluZCh0YXJnZXRFbGVtZW50KTsKICAgICBBU1NFUlQoaXQgIT0g
bV9hbmltYXRlZEVsZW1lbnRzLmVuZCgpKTsKICAgICAKLSAgICBIYXNoU2V0PFNWR1NNSUxFbGVt
ZW50Kj4qIGFuaW1hdGlvbkVsZW1lbnRzRm9yVGFyZ2V0ID0gaXQtPnNlY29uZDsKKyAgICBIYXNo
U2V0PFNWR1NNSUxFbGVtZW50Kj4qIGFuaW1hdGlvbkVsZW1lbnRzRm9yVGFyZ2V0ID0gaXQtPnZh
bHVlOwogICAgIEFTU0VSVCghYW5pbWF0aW9uRWxlbWVudHNGb3JUYXJnZXQtPmlzRW1wdHkoKSk7
CiAKICAgICBhbmltYXRpb25FbGVtZW50c0ZvclRhcmdldC0+cmVtb3ZlKGFuaW1hdGlvbkVsZW1l
bnQpOwpAQCAtMTczLDcgKzE3Myw3IEBAIHZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZW1v
dmVBbGxBbmltYXRpb25FbGVtZW50c0Zyb21UYXJnZXQoU1ZHRWxlbWVudCogdGFyCiAgICAgaWYg
KGl0ID09IG1fYW5pbWF0ZWRFbGVtZW50cy5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
SGFzaFNldDxTVkdTTUlMRWxlbWVudCo+KiBhbmltYXRpb25FbGVtZW50c0ZvclRhcmdldCA9IGl0
LT5zZWNvbmQ7CisgICAgSGFzaFNldDxTVkdTTUlMRWxlbWVudCo+KiBhbmltYXRpb25FbGVtZW50
c0ZvclRhcmdldCA9IGl0LT52YWx1ZTsKICAgICBWZWN0b3I8U1ZHU01JTEVsZW1lbnQqPiB0b0Jl
UmVzZXQ7CiAKICAgICBIYXNoU2V0PFNWR1NNSUxFbGVtZW50Kj46Oml0ZXJhdG9yIGVuZCA9IGFu
aW1hdGlvbkVsZW1lbnRzRm9yVGFyZ2V0LT5lbmQoKTsKQEAgLTIxOSw5ICsyMTksOSBAQCB2b2lk
IFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6YWRkUGVuZGluZ1Jlc291cmNlKGNvbnN0IEF0b21pY1N0
cmluZyYgaWQsIFNWR1N0eWxlZAogCiAgICAgLy8gVGhlIEhhc2hNYXAgYWRkIGZ1bmN0aW9uIGxl
YXZlcyB0aGUgbWFwIGFsb25lIGFuZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgZWxlbWVudCBp
biB0aGUKICAgICAvLyBtYXAgaWYgdGhlIGVsZW1lbnQgYWxyZWFkeSBleGlzdHMuIFNvIHdlIGFk
ZCB3aXRoIGEgdmFsdWUgb2YgMCwgYW5kIGl0IGVpdGhlciBmaW5kcyB0aGUKLSAgICAvLyBleGlz
dGluZyBlbGVtZW50IG9yIGFkZHMgYSBuZXcgb25lIGluIGEgc2luZ2xlIG9wZXJhdGlvbi4gVGhl
ICIuaXRlcmF0b3ItPnNlY29uZCIgaWRpb20gZ2V0cworICAgIC8vIGV4aXN0aW5nIGVsZW1lbnQg
b3IgYWRkcyBhIG5ldyBvbmUgaW4gYSBzaW5nbGUgb3BlcmF0aW9uLiBUaGUgIi5pdGVyYXRvci0+
dmFsdWUiIGlkaW9tIGdldHMKICAgICAvLyB1cyB0byB0aGUgaXRlcmF0b3IgZnJvbSBhZGQncyBy
ZXN1bHQsIGFuZCB0aGVuIHRvIHRoZSB2YWx1ZSBpbnNpZGUgdGhlIGhhc2ggdGFibGUuCi0gICAg
U1ZHUGVuZGluZ0VsZW1lbnRzKiYgc2V0ID0gbV9wZW5kaW5nUmVzb3VyY2VzLmFkZChpZCwgMCku
aXRlcmF0b3ItPnNlY29uZDsKKyAgICBTVkdQZW5kaW5nRWxlbWVudHMqJiBzZXQgPSBtX3BlbmRp
bmdSZXNvdXJjZXMuYWRkKGlkLCAwKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCFzZXQpCiAg
ICAgICAgIHNldCA9IG5ldyBTVkdQZW5kaW5nRWxlbWVudHM7CiAgICAgc2V0LT5hZGQoZWxlbWVu
dCk7CkBAIC0yNDYsNyArMjQ2LDcgQEAgYm9vbCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OmlzRWxl
bWVudFBlbmRpbmdSZXNvdXJjZXMoU1ZHU3R5bGVkRWxlbWVudCogZWxlbWVudCkKIAogICAgIEhh
c2hNYXA8QXRvbWljU3RyaW5nLCBTVkdQZW5kaW5nRWxlbWVudHMqPjo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gbV9wZW5kaW5nUmVzb3VyY2VzLmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDxBdG9taWNT
dHJpbmcsIFNWR1BlbmRpbmdFbGVtZW50cyo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGVuZGlu
Z1Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgU1ZHUGVuZGlu
Z0VsZW1lbnRzKiBlbGVtZW50cyA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFNWR1BlbmRpbmdFbGVt
ZW50cyogZWxlbWVudHMgPSBpdC0+dmFsdWU7CiAgICAgICAgIEFTU0VSVChlbGVtZW50cyk7CiAK
ICAgICAgICAgaWYgKGVsZW1lbnRzLT5jb250YWlucyhlbGVtZW50KSkKQEAgLTI3NCwxMyArMjc0
LDEzIEBAIHZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZW1vdmVFbGVtZW50RnJvbVBlbmRp
bmdSZXNvdXJjZXMoU1ZHU3R5bGVkRWxlbWVudCoKICAgICAgICAgVmVjdG9yPEF0b21pY1N0cmlu
Zz4gdG9CZVJlbW92ZWQ7CiAgICAgICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBTVkdQZW5kaW5n
RWxlbWVudHMqPjo6aXRlcmF0b3IgZW5kID0gbV9wZW5kaW5nUmVzb3VyY2VzLmVuZCgpOwogICAg
ICAgICBmb3IgKEhhc2hNYXA8QXRvbWljU3RyaW5nLCBTVkdQZW5kaW5nRWxlbWVudHMqPjo6aXRl
cmF0b3IgaXQgPSBtX3BlbmRpbmdSZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7
Ci0gICAgICAgICAgICBTVkdQZW5kaW5nRWxlbWVudHMqIGVsZW1lbnRzID0gaXQtPnNlY29uZDsK
KyAgICAgICAgICAgIFNWR1BlbmRpbmdFbGVtZW50cyogZWxlbWVudHMgPSBpdC0+dmFsdWU7CiAg
ICAgICAgICAgICBBU1NFUlQoZWxlbWVudHMpOwogICAgICAgICAgICAgQVNTRVJUKCFlbGVtZW50
cy0+aXNFbXB0eSgpKTsKIAogICAgICAgICAgICAgZWxlbWVudHMtPnJlbW92ZShlbGVtZW50KTsK
ICAgICAgICAgICAgIGlmIChlbGVtZW50cy0+aXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHRv
QmVSZW1vdmVkLmFwcGVuZChpdC0+Zmlyc3QpOworICAgICAgICAgICAgICAgIHRvQmVSZW1vdmVk
LmFwcGVuZChpdC0+a2V5KTsKICAgICAgICAgfQogCiAgICAgICAgIGVsZW1lbnQtPmNsZWFySGFz
UGVuZGluZ1Jlc291cmNlc0lmUG9zc2libGUoKTsKQEAgLTI5NiwxMyArMjk2LDEzIEBAIHZvaWQg
U1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZW1vdmVFbGVtZW50RnJvbVBlbmRpbmdSZXNvdXJjZXMo
U1ZHU3R5bGVkRWxlbWVudCoKICAgICAgICAgVmVjdG9yPEF0b21pY1N0cmluZz4gdG9CZVJlbW92
ZWQ7CiAgICAgICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBTVkdQZW5kaW5nRWxlbWVudHMqPjo6
aXRlcmF0b3IgZW5kID0gbV9wZW5kaW5nUmVzb3VyY2VzRm9yUmVtb3ZhbC5lbmQoKTsKICAgICAg
ICAgZm9yIChIYXNoTWFwPEF0b21pY1N0cmluZywgU1ZHUGVuZGluZ0VsZW1lbnRzKj46Oml0ZXJh
dG9yIGl0ID0gbV9wZW5kaW5nUmVzb3VyY2VzRm9yUmVtb3ZhbC5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKLSAgICAgICAgICAgIFNWR1BlbmRpbmdFbGVtZW50cyogZWxlbWVudHMgPSBpdC0+
c2Vjb25kOworICAgICAgICAgICAgU1ZHUGVuZGluZ0VsZW1lbnRzKiBlbGVtZW50cyA9IGl0LT52
YWx1ZTsKICAgICAgICAgICAgIEFTU0VSVChlbGVtZW50cyk7CiAgICAgICAgICAgICBBU1NFUlQo
IWVsZW1lbnRzLT5pc0VtcHR5KCkpOwogCiAgICAgICAgICAgICBlbGVtZW50cy0+cmVtb3ZlKGVs
ZW1lbnQpOwogICAgICAgICAgICAgaWYgKGVsZW1lbnRzLT5pc0VtcHR5KCkpCi0gICAgICAgICAg
ICAgICAgdG9CZVJlbW92ZWQuYXBwZW5kKGl0LT5maXJzdCk7CisgICAgICAgICAgICAgICAgdG9C
ZVJlbW92ZWQuYXBwZW5kKGl0LT5rZXkpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gV2UgdXNl
IHRoZSByZW1vdmVQZW5kaW5nUmVzb3VyY2VGb3JSZW1vdmFsIGZ1bmN0aW9uIGhlcmUgYmVjYXVz
ZSBpdCBkZWFscyB3aXRoIHNldCBsaWZldGltZSBjb3JyZWN0bHkuCkBAIC0zNjIsNyArMzYyLDcg
QEAgSGFzaFNldDxTVkdFbGVtZW50Kj4qIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6c2V0T2ZFbGVt
ZW50c1JlZmVyZW5jaW5nVGFyZ2V0KFNWR0UKICAgICBjb25zdCBIYXNoTWFwPFNWR0VsZW1lbnQq
LCBPd25QdHI8SGFzaFNldDxTVkdFbGVtZW50Kj4gPiA+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1f
ZWxlbWVudERlcGVuZGVuY2llcy5maW5kKHJlZmVyZW5jZWRFbGVtZW50KTsKICAgICBpZiAoaXQg
PT0gbV9lbGVtZW50RGVwZW5kZW5jaWVzLmVuZCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBy
ZXR1cm4gaXQtPnNlY29uZC5nZXQoKTsKKyAgICByZXR1cm4gaXQtPnZhbHVlLmdldCgpOwogfQog
CiB2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6YWRkRWxlbWVudFJlZmVyZW5jaW5nVGFyZ2V0
KFNWR0VsZW1lbnQqIHJlZmVyZW5jaW5nRWxlbWVudCwgU1ZHRWxlbWVudCogcmVmZXJlbmNlZEVs
ZW1lbnQpCkBAIC0zODYsOCArMzg2LDggQEAgdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJl
bW92ZUFsbFRhcmdldFJlZmVyZW5jZXNGb3JFbGVtZW50KFNWR0VsZW1lbnQqIHJlZmUKIAogICAg
IEhhc2hNYXA8U1ZHRWxlbWVudCosIE93blB0cjxIYXNoU2V0PFNWR0VsZW1lbnQqPiA+ID46Oml0
ZXJhdG9yIGVuZCA9IG1fZWxlbWVudERlcGVuZGVuY2llcy5lbmQoKTsKICAgICBmb3IgKEhhc2hN
YXA8U1ZHRWxlbWVudCosIE93blB0cjxIYXNoU2V0PFNWR0VsZW1lbnQqPiA+ID46Oml0ZXJhdG9y
IGl0ID0gbV9lbGVtZW50RGVwZW5kZW5jaWVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewot
ICAgICAgICBTVkdFbGVtZW50KiByZWZlcmVuY2VkRWxlbWVudCA9IGl0LT5maXJzdDsKLSAgICAg
ICAgSGFzaFNldDxTVkdFbGVtZW50Kj4qIHJlZmVyZW5jaW5nRWxlbWVudHMgPSBpdC0+c2Vjb25k
LmdldCgpOworICAgICAgICBTVkdFbGVtZW50KiByZWZlcmVuY2VkRWxlbWVudCA9IGl0LT5rZXk7
CisgICAgICAgIEhhc2hTZXQ8U1ZHRWxlbWVudCo+KiByZWZlcmVuY2luZ0VsZW1lbnRzID0gaXQt
PnZhbHVlLmdldCgpOwogICAgICAgICBIYXNoU2V0PFNWR0VsZW1lbnQqPjo6aXRlcmF0b3Igc2V0
SXQgPSByZWZlcmVuY2luZ0VsZW1lbnRzLT5maW5kKHJlZmVyZW5jaW5nRWxlbWVudCk7CiAgICAg
ICAgIGlmIChzZXRJdCA9PSByZWZlcmVuY2luZ0VsZW1lbnRzLT5lbmQoKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwpAQCAtNDA4LDEwICs0MDgsMTAgQEAgdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lv
bnM6OnJlbW92ZUFsbEVsZW1lbnRSZWZlcmVuY2VzRm9yVGFyZ2V0KFNWR0VsZW1lbnQqIHJlZmUK
ICAgICBIYXNoTWFwPFNWR0VsZW1lbnQqLCBPd25QdHI8SGFzaFNldDxTVkdFbGVtZW50Kj4gPiA+
OjppdGVyYXRvciBpdCA9IG1fZWxlbWVudERlcGVuZGVuY2llcy5maW5kKHJlZmVyZW5jZWRFbGVt
ZW50KTsKICAgICBpZiAoaXQgPT0gbV9lbGVtZW50RGVwZW5kZW5jaWVzLmVuZCgpKQogICAgICAg
ICByZXR1cm47Ci0gICAgQVNTRVJUKGl0LT5maXJzdCA9PSByZWZlcmVuY2VkRWxlbWVudCk7Cisg
ICAgQVNTRVJUKGl0LT5rZXkgPT0gcmVmZXJlbmNlZEVsZW1lbnQpOwogICAgIFZlY3RvcjxTVkdF
bGVtZW50Kj4gdG9CZU5vdGlmaWVkOwogCi0gICAgSGFzaFNldDxTVkdFbGVtZW50Kj4qIHJlZmVy
ZW5jaW5nRWxlbWVudHMgPSBpdC0+c2Vjb25kLmdldCgpOworICAgIEhhc2hTZXQ8U1ZHRWxlbWVu
dCo+KiByZWZlcmVuY2luZ0VsZW1lbnRzID0gaXQtPnZhbHVlLmdldCgpOwogICAgIEhhc2hTZXQ8
U1ZHRWxlbWVudCo+OjppdGVyYXRvciBzZXRFbmQgPSByZWZlcmVuY2luZ0VsZW1lbnRzLT5lbmQo
KTsKICAgICBmb3IgKEhhc2hTZXQ8U1ZHRWxlbWVudCo+OjppdGVyYXRvciBzZXRJdCA9IHJlZmVy
ZW5jaW5nRWxlbWVudHMtPmJlZ2luKCk7IHNldEl0ICE9IHNldEVuZDsgKytzZXRJdCkKICAgICAg
ICAgdG9CZU5vdGlmaWVkLmFwcGVuZCgqc2V0SXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3Bw
CmluZGV4IGM4MGIyNTdkYTQxMzk4MGI0YzI3OTI0YmZiZTU0YjQyNWUwMzgwZWYuLmFmOGQ4ZmUz
ZTdiMWFkYmI5Y2M0MWUyYzRiMDU3MDlkYmJmZTk4MWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVu
dC5jcHAKQEAgLTY4LDcgKzY4LDcgQEAgU1ZHRWxlbWVudDo6flNWR0VsZW1lbnQoKQogICAgICAg
ICBTVkdFbGVtZW50UmFyZURhdGE6OlNWR0VsZW1lbnRSYXJlRGF0YU1hcDo6aXRlcmF0b3IgaXQg
PSByYXJlRGF0YU1hcC5maW5kKHRoaXMpOwogICAgICAgICBBU1NFUlQoaXQgIT0gcmFyZURhdGFN
YXAuZW5kKCkpOwogCi0gICAgICAgIFNWR0VsZW1lbnRSYXJlRGF0YSogcmFyZURhdGEgPSBpdC0+
c2Vjb25kOworICAgICAgICBTVkdFbGVtZW50UmFyZURhdGEqIHJhcmVEYXRhID0gaXQtPnZhbHVl
OwogICAgICAgICByYXJlRGF0YS0+ZGVzdHJveUFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygp
OwogICAgICAgICBpZiAoU1ZHQ3Vyc29yRWxlbWVudCogY3Vyc29yRWxlbWVudCA9IHJhcmVEYXRh
LT5jdXJzb3JFbGVtZW50KCkpCiAgICAgICAgICAgICBjdXJzb3JFbGVtZW50LT5yZW1vdmVDbGll
bnQodGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxU
aW1lQ29udGFpbmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWVD
b250YWluZXIuY3BwCmluZGV4IGIwMzJmMzE1ODI1NmU1ZTNjYzg5MDQ1MGNiYTg2ODBiMDdlNGZm
OWMuLjBlZmE2YTQyYmIwOTM1Y2JlOTQyNTJlNjExOTgzOWRjZGFmMmNmZDAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuY3BwCkBAIC0y
NzIsNyArMjcyLDcgQEAgdm9pZCBTTUlMVGltZUNvbnRhaW5lcjo6dXBkYXRlQW5pbWF0aW9ucyhT
TUlMVGltZSBlbGFwc2VkLCBib29sIHNlZWtUb1RpbWUpCiAgICAgVmVjdG9yPFNWR1NNSUxFbGVt
ZW50Kj4gYW5pbWF0aW9uc1RvQXBwbHk7CiAgICAgUmVzdWx0RWxlbWVudE1hcDo6aXRlcmF0b3Ig
ZW5kID0gcmVzdWx0c0VsZW1lbnRzLmVuZCgpOwogICAgIGZvciAoUmVzdWx0RWxlbWVudE1hcDo6
aXRlcmF0b3IgaXQgPSByZXN1bHRzRWxlbWVudHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7
Ci0gICAgICAgIFNWR1NNSUxFbGVtZW50KiBhbmltYXRpb24gPSBpdC0+c2Vjb25kLmdldCgpOwor
ICAgICAgICBTVkdTTUlMRWxlbWVudCogYW5pbWF0aW9uID0gaXQtPnZhbHVlLmdldCgpOwogICAg
ICAgICBpZiAoY29udHJpYnV0aW5nRWxlbWVudHMuY29udGFpbnMoYW5pbWF0aW9uKSkKICAgICAg
ICAgICAgIGFuaW1hdGlvbnNUb0FwcGx5LmFwcGVuZChhbmltYXRpb24pOwogICAgIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZUNhY2hlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZUNhY2hlLmNwcAppbmRleCA2OTNlZTJh
OGZmZjVjN2YzNzIyZmI0NmM5ZmQwYjU1YjVjZDNhZTFjLi4yNWZjYzc3OTdmMDRjMWZlODU5MmI2
MDQxMzhhODZkMjhkZDQzZTY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvU1ZHSW1hZ2VDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NW
R0ltYWdlQ2FjaGUuY3BwCkBAIC00Nyw4ICs0Nyw4IEBAIFNWR0ltYWdlQ2FjaGU6On5TVkdJbWFn
ZUNhY2hlKCkKICAgICAgICAgLy8gQ2hlY2tzIGlmIHRoZSBjbGllbnQgKGl0LT5maXJzdCkgaXMg
c3RpbGwgdmFsaWQuIFRoZSBjbGllbnQgc2hvdWxkIHJlbW92ZSBpdHNlbGYgZnJvbSB0aGlzCiAg
ICAgICAgIC8vIGNhY2hlIGJlZm9yZSBpdHMgZW5kIG9mIGxpZmUsIG90aGVyd2lzZSB0aGUgZm9s
bG93aW5nIEFTU0VSVCB3aWxsIGNyYXNoIG9uIHB1cmUgdmlydHVhbAogICAgICAgICAvLyBmdW5j
dGlvbiBjYWxsIG9yIGEgZ2VuZXJhbCBjcmFzaC4KLSAgICAgICAgQVNTRVJUKGl0LT5maXJzdC0+
cmVzb3VyY2VDbGllbnRUeXBlKCkgPT0gQ2FjaGVkSW1hZ2VDbGllbnQ6OmV4cGVjdGVkVHlwZSgp
KTsKLSAgICAgICAgZGVsZXRlIGl0LT5zZWNvbmQuYnVmZmVyOworICAgICAgICBBU1NFUlQoaXQt
PmtleS0+cmVzb3VyY2VDbGllbnRUeXBlKCkgPT0gQ2FjaGVkSW1hZ2VDbGllbnQ6OmV4cGVjdGVk
VHlwZSgpKTsKKyAgICAgICAgZGVsZXRlIGl0LT52YWx1ZS5idWZmZXI7CiAgICAgfQogCiAgICAg
bV9pbWFnZURhdGFNYXAuY2xlYXIoKTsKQEAgLTYzLDcgKzYzLDcgQEAgdm9pZCBTVkdJbWFnZUNh
Y2hlOjpyZW1vdmVDbGllbnRGcm9tQ2FjaGUoY29uc3QgQ2FjaGVkSW1hZ2VDbGllbnQqIGNsaWVu
dCkKICAgICBpZiAoaXQgPT0gbV9pbWFnZURhdGFNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGRlbGV0ZSBpdC0+c2Vjb25kLmJ1ZmZlcjsKKyAgICBkZWxldGUgaXQtPnZhbHVlLmJ1
ZmZlcjsKICAgICBtX2ltYWdlRGF0YU1hcC5yZW1vdmUoaXQpOwogfQogCkBAIC04MCwxNCArODAs
MTQgQEAgU1ZHSW1hZ2VDYWNoZTo6U2l6ZUFuZFNjYWxlcyBTVkdJbWFnZUNhY2hlOjpyZXF1ZXN0
ZWRTaXplQW5kU2NhbGVzKGNvbnN0IENhY2hlZEkKICAgICBTaXplQW5kU2NhbGVzTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IG1fc2l6ZUFuZFNjYWxlc01hcC5maW5kKGNsaWVudCk7CiAgICAgaWYg
KGl0ID09IG1fc2l6ZUFuZFNjYWxlc01hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuIFNpemVBbmRT
Y2FsZXMoKTsKLSAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICByZXR1cm4gaXQtPnZhbHVlOwog
fQogCiB2b2lkIFNWR0ltYWdlQ2FjaGU6OmltYWdlQ29udGVudENoYW5nZWQoKQogewogICAgIElt
YWdlRGF0YU1hcDo6aXRlcmF0b3IgZW5kID0gbV9pbWFnZURhdGFNYXAuZW5kKCk7CiAgICAgZm9y
IChJbWFnZURhdGFNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pbWFnZURhdGFNYXAuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLmltYWdlTmVlZHNVcGRhdGUgPSB0cnVl
OworICAgICAgICBpdC0+dmFsdWUuaW1hZ2VOZWVkc1VwZGF0ZSA9IHRydWU7CiAKICAgICAvLyBJ
ZiB3ZSdyZSBpbiB0aGUgbWlkZGxlIG9mIGxheW91dCwgc3RhcnQgcmVkcmF3aW5nIGRpcnR5CiAg
ICAgLy8gaW1hZ2VzIG9uIGEgdGltZXI7IG90aGVyd2lzZSBpdCdzIHNhZmUgdG8gZHJhdyBpbW1l
ZGlhdGVseS4KQEAgLTEwMyw3ICsxMDMsNyBAQCB2b2lkIFNWR0ltYWdlQ2FjaGU6OnJlZHJhdygp
CiB7CiAgICAgSW1hZ2VEYXRhTWFwOjppdGVyYXRvciBlbmQgPSBtX2ltYWdlRGF0YU1hcC5lbmQo
KTsKICAgICBmb3IgKEltYWdlRGF0YU1hcDo6aXRlcmF0b3IgaXQgPSBtX2ltYWdlRGF0YU1hcC5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgSW1hZ2VEYXRhJiBkYXRhID0gaXQt
PnNlY29uZDsKKyAgICAgICAgSW1hZ2VEYXRhJiBkYXRhID0gaXQtPnZhbHVlOwogICAgICAgICBp
ZiAoIWRhdGEuaW1hZ2VOZWVkc1VwZGF0ZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAvLyBJZiB0aGUgY29udGVudCBjaGFuZ2VkIHdlIHJlZHJhdyB1c2luZyBvdXIgZXhpc3Rpbmcg
SW1hZ2VCdWZmZXIuCkBAIC0xMzksOSArMTM5LDkgQEAgSW1hZ2UqIFNWR0ltYWdlQ2FjaGU6Omxv
b2t1cE9yQ3JlYXRlQml0bWFwSW1hZ2VGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QqIHIK
ICAgICBpZiAoc2l6ZUl0ID09IG1fc2l6ZUFuZFNjYWxlc01hcC5lbmQoKSkKICAgICAgICAgcmV0
dXJuIEltYWdlOjpudWxsSW1hZ2UoKTsKIAotICAgIEludFNpemUgc2l6ZSA9IHNpemVJdC0+c2Vj
b25kLnNpemU7Ci0gICAgZmxvYXQgem9vbSA9IHNpemVJdC0+c2Vjb25kLnpvb207Ci0gICAgZmxv
YXQgc2NhbGUgPSBzaXplSXQtPnNlY29uZC5zY2FsZTsKKyAgICBJbnRTaXplIHNpemUgPSBzaXpl
SXQtPnZhbHVlLnNpemU7CisgICAgZmxvYXQgem9vbSA9IHNpemVJdC0+dmFsdWUuem9vbTsKKyAg
ICBmbG9hdCBzY2FsZSA9IHNpemVJdC0+dmFsdWUuc2NhbGU7CiAKICAgICAvLyBGSVhNRSAoODUz
MzUpOiBUaGlzIG5lZWRzIHRvIHRha2UgQ1NTIHRyYW5zZm9ybSBzY2FsZSBpbnRvIGFjY291bnQg
YXMgd2VsbC4KICAgICBQYWdlKiBwYWdlID0gcmVuZGVyZXItPmRvY3VtZW50KCktPnBhZ2UoKTsK
QEAgLTE1Myw3ICsxNTMsNyBAQCBJbWFnZSogU1ZHSW1hZ2VDYWNoZTo6bG9va3VwT3JDcmVhdGVC
aXRtYXBJbWFnZUZvclJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCogcgogICAgIC8vIExvb2t1
cCBpbWFnZSBmb3IgY2xpZW50IGluIGNhY2hlIGFuZCBldmVudHVhbGx5IHVwZGF0ZSBpdC4KICAg
ICBJbWFnZURhdGFNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pbWFnZURhdGFNYXAuZmluZChjbGllbnQp
OwogICAgIGlmIChpdCAhPSBtX2ltYWdlRGF0YU1hcC5lbmQoKSkgewotICAgICAgICBJbWFnZURh
dGEmIGRhdGEgPSBpdC0+c2Vjb25kOworICAgICAgICBJbWFnZURhdGEmIGRhdGEgPSBpdC0+dmFs
dWU7CiAKICAgICAgICAgLy8gQ29tbW9uIGNhc2U6IGltYWdlIHNpemUgJiB6b29tIHJlbWFpbmVk
IHRoZSBzYW1lLgogICAgICAgICBpZiAoZGF0YS5zaXplQW5kU2NhbGVzLnNpemUgPT0gc2l6ZSAm
JiBkYXRhLnNpemVBbmRTY2FsZXMuem9vbSA9PSB6b29tICYmIGRhdGEuc2l6ZUFuZFNjYWxlcy5z
Y2FsZSA9PSBzY2FsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaAppbmRleCA0NGQzMjI3YjgzZTliODcxOGU3OWQ4YzE0
YzllM2JlM2E2YWY2Mzg1Li4xOTE1ODBkZDhhYmU1OWY1MTc5ODQ3ODlmZWYzZGY5ZDFhYmM2YzIx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0
ZXJCdWlsZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZH
RmlsdGVyQnVpbGRlci5oCkBAIC01MCw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAg
IC8vIE9ubHkgYWxsb3dlZCBmb3IgZWZmZWN0cyBiZWxvbmdzIHRvIHRoaXMgYnVpbGRlci4KICAg
ICAgICAgQVNTRVJUKG1fZWZmZWN0UmVmZXJlbmNlcy5jb250YWlucyhlZmZlY3QpKTsKLSAgICAg
ICAgcmV0dXJuIG1fZWZmZWN0UmVmZXJlbmNlcy5maW5kKGVmZmVjdCktPnNlY29uZDsKKyAgICAg
ICAgcmV0dXJuIG1fZWZmZWN0UmVmZXJlbmNlcy5maW5kKGVmZmVjdCktPnZhbHVlOwogICAgIH0K
IAogICAgIC8vIFJlcXVpcmVkIHRvIGNoYW5nZSB0aGUgYXR0cmlidXRlcyBvZiBhIGZpbHRlciBk
dXJpbmcgYW4gc3ZnQXR0cmlidXRlQ2hhbmdlZC4KQEAgLTY2LDcgKzY2LDcgQEAgcHJpdmF0ZToK
ICAgICB7CiAgICAgICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBSZWZQdHI8RmlsdGVyRWZmZWN0
PiA+OjppdGVyYXRvciBlbmQgPSBtX2J1aWx0aW5FZmZlY3RzLmVuZCgpOwogICAgICAgICBmb3Ig
KEhhc2hNYXA8QXRvbWljU3RyaW5nLCBSZWZQdHI8RmlsdGVyRWZmZWN0PiA+OjppdGVyYXRvciBp
dGVyYXRvciA9IG1fYnVpbHRpbkVmZmVjdHMuYmVnaW4oKTsgaXRlcmF0b3IgIT0gZW5kOyArK2l0
ZXJhdG9yKQotICAgICAgICAgICAgIG1fZWZmZWN0UmVmZXJlbmNlcy5hZGQoaXRlcmF0b3ItPnNl
Y29uZCwgRmlsdGVyRWZmZWN0U2V0KCkpOworICAgICAgICAgICAgIG1fZWZmZWN0UmVmZXJlbmNl
cy5hZGQoaXRlcmF0b3ItPnZhbHVlLCBGaWx0ZXJFZmZlY3RTZXQoKSk7CiAgICAgfQogCiAgICAg
SGFzaE1hcDxBdG9taWNTdHJpbmcsIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+ID4gbV9idWlsdGluRWZm
ZWN0czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1h
dGVkUHJvcGVydHkuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVk
UHJvcGVydHkuaAppbmRleCA2ZGZkYWM2ZGQ1NzhhZjMwZjZkZWFiN2NkMjY1ODM2MDQ0MmYzYWRm
Li42YTFmMDA5N2I2MWJjMGI1ZGIwOTgwMTU1MDkwM2MxOTA0NDk2N2JhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eS5oCkBAIC01
OCw4ICs1OCw4IEBAIHB1YmxpYzoKICAgICAgICAgQ2FjaGUqIGNhY2hlID0gYW5pbWF0ZWRQcm9w
ZXJ0eUNhY2hlKCk7CiAgICAgICAgIGNvbnN0IENhY2hlOjpjb25zdF9pdGVyYXRvciBlbmQgPSBj
YWNoZS0+ZW5kKCk7CiAgICAgICAgIGZvciAoQ2FjaGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY2Fj
aGUtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgaWYgKGl0LT5zZWNv
bmQgPT0gdGhpcykgewotICAgICAgICAgICAgICAgIGNhY2hlLT5yZW1vdmUoaXQtPmZpcnN0KTsK
KyAgICAgICAgICAgIGlmIChpdC0+dmFsdWUgPT0gdGhpcykgeworICAgICAgICAgICAgICAgIGNh
Y2hlLT5yZW1vdmUoaXQtPmtleSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVz
L1NWR0F0dHJpYnV0ZVRvUHJvcGVydHlNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3Bl
cnRpZXMvU1ZHQXR0cmlidXRlVG9Qcm9wZXJ0eU1hcC5jcHAKaW5kZXggYmUzMWNjM2M3ZGEyZjUw
ZjUxZjY5YjU1NDQwMjY1ZGIxMzViNTI4Yy4uY2M0NmNjZmEwODFmZmM4ODMwOWI3ZWYyMmQ2M2Yw
ZjM0ZWZkODE3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZH
QXR0cmlidXRlVG9Qcm9wZXJ0eU1hcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3Bl
cnRpZXMvU1ZHQXR0cmlidXRlVG9Qcm9wZXJ0eU1hcC5jcHAKQEAgLTMxLDcgKzMxLDcgQEAgdm9p
ZCBTVkdBdHRyaWJ1dGVUb1Byb3BlcnR5TWFwOjphZGRQcm9wZXJ0aWVzKFNWR0F0dHJpYnV0ZVRv
UHJvcGVydHlNYXAmIG1hcCkKIHsKICAgICBBdHRyaWJ1dGVUb1Byb3BlcnRpZXNNYXA6Oml0ZXJh
dG9yIGVuZCA9IG1hcC5tX21hcC5lbmQoKTsKICAgICBmb3IgKEF0dHJpYnV0ZVRvUHJvcGVydGll
c01hcDo6aXRlcmF0b3IgaXQgPSBtYXAubV9tYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7
Ci0gICAgICAgIFByb3BlcnRpZXNWZWN0b3IqIHZlY3RvciA9IGl0LT5zZWNvbmQ7CisgICAgICAg
IFByb3BlcnRpZXNWZWN0b3IqIHZlY3RvciA9IGl0LT52YWx1ZTsKICAgICAgICAgQVNTRVJUKHZl
Y3Rvcik7CiAKICAgICAgICAgUHJvcGVydGllc1ZlY3Rvcjo6aXRlcmF0b3IgdmVjdG9yRW5kID0g
dmVjdG9yLT5lbmQoKTsKQEAgLTgxLDEyICs4MSwxMiBAQCB2b2lkIFNWR0F0dHJpYnV0ZVRvUHJv
cGVydHlNYXA6OnN5bmNocm9uaXplUHJvcGVydGllcyhTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVu
dAogICAgIEFTU0VSVChjb250ZXh0RWxlbWVudCk7CiAgICAgQXR0cmlidXRlVG9Qcm9wZXJ0aWVz
TWFwOjppdGVyYXRvciBlbmQgPSBtX21hcC5lbmQoKTsKICAgICBmb3IgKEF0dHJpYnV0ZVRvUHJv
cGVydGllc01hcDo6aXRlcmF0b3IgaXQgPSBtX21hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKLSAgICAgICAgUHJvcGVydGllc1ZlY3RvciogdmVjdG9yID0gaXQtPnNlY29uZDsKKyAgICAg
ICAgUHJvcGVydGllc1ZlY3RvciogdmVjdG9yID0gaXQtPnZhbHVlOwogICAgICAgICBBU1NFUlQo
dmVjdG9yKTsKIAogICAgICAgICBQcm9wZXJ0aWVzVmVjdG9yOjppdGVyYXRvciB2ZWN0b3JFbmQg
PSB2ZWN0b3ItPmVuZCgpOwogICAgICAgICBmb3IgKFByb3BlcnRpZXNWZWN0b3I6Oml0ZXJhdG9y
IHZlY3Rvckl0ID0gdmVjdG9yLT5iZWdpbigpOyB2ZWN0b3JJdCAhPSB2ZWN0b3JFbmQ7ICsrdmVj
dG9ySXQpCi0gICAgICAgICAgICBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnRleHRFbGVtZW50LCBp
dC0+Zmlyc3QsICp2ZWN0b3JJdCk7CisgICAgICAgICAgICBzeW5jaHJvbml6ZVByb3BlcnR5KGNv
bnRleHRFbGVtZW50LCBpdC0+a2V5LCAqdmVjdG9ySXQpOwogICAgIH0gCiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuY3BwCmluZGV4IDQ1ZTVlYmVkZDMyMjcyNzA1ZWRi
YTA0YWRkMTU2MWJkMzU1MmY1YjEuLmIyNjIwYWI4MDllM2ZlNjRkMjc1Y2U2YTQ2NTM4MjI4OGEw
OTIxYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcApAQCAtMTc5
LDcgKzE3OSw3IEBAIGJvb2wgV29ya2VyQ29udGV4dDo6aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29u
c3QKICAgICBBY3RpdmVET01PYmplY3RzTWFwJiBhY3RpdmVPYmplY3RzID0gYWN0aXZlRE9NT2Jq
ZWN0cygpOwogICAgIEFjdGl2ZURPTU9iamVjdHNNYXA6OmNvbnN0X2l0ZXJhdG9yIGFjdGl2ZU9i
amVjdHNFbmQgPSBhY3RpdmVPYmplY3RzLmVuZCgpOwogICAgIGZvciAoQWN0aXZlRE9NT2JqZWN0
c01hcDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGFjdGl2ZU9iamVjdHMuYmVnaW4oKTsgaXRlciAh
PSBhY3RpdmVPYmplY3RzRW5kOyArK2l0ZXIpIHsKLSAgICAgICAgaWYgKGl0ZXItPmZpcnN0LT5o
YXNQZW5kaW5nQWN0aXZpdHkoKSkKKyAgICAgICAgaWYgKGl0ZXItPmtleS0+aGFzUGVuZGluZ0Fj
dGl2aXR5KCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyRXZlbnRRdWV1ZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS93b3JrZXJzL1dvcmtlckV2ZW50UXVldWUuY3BwCmluZGV4IDU5YTkzMDdlYWMxNzg0YjY5
OWMzZmVkMjBhNDU1YTc5ZjA4OTEwN2UuLjIzNTUyOWYxZmViOTcxMjhjMzFkOTZhMzBkYTBjZGZm
YmJlOWQwZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyRXZlbnRR
dWV1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJFdmVudFF1ZXVlLmNw
cApAQCAtMTI3LDcgKzEyNyw3IEBAIHZvaWQgV29ya2VyRXZlbnRRdWV1ZTo6Y2xvc2UoKQogewog
ICAgIG1faXNDbG9zZWQgPSB0cnVlOwogICAgIGZvciAoRXZlbnRUYXNrTWFwOjppdGVyYXRvciBp
dCA9IG1fZXZlbnRUYXNrTWFwLmJlZ2luKCk7IGl0ICE9IG1fZXZlbnRUYXNrTWFwLmVuZCgpOyAr
K2l0KSB7Ci0gICAgICAgIEV2ZW50RGlzcGF0Y2hlclRhc2sqIHRhc2sgPSBpdC0+c2Vjb25kOwor
ICAgICAgICBFdmVudERpc3BhdGNoZXJUYXNrKiB0YXNrID0gaXQtPnZhbHVlOwogICAgICAgICB0
YXNrLT5jYW5jZWwoKTsKICAgICB9CiAgICAgbV9ldmVudFRhc2tNYXAuY2xlYXIoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCmluZGV4IDc2OGEwMTljZDI1MTc5NzFkOTRjNDEy
NWUzNWEwYmNlZDYwZmZiNDIuLjI1ZWRjNjA3NDE2YzljNmUzMzFiZTQ1M2Y4YjRlNzJjOWQ1YmZm
ZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcApAQCAtOTIwLDcgKzkyMCw3
IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OnNldFJlcXVlc3RIZWFkZXJJbnRlcm5hbChjb25zdCBB
dG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IFN0CiB7CiAgICAgSFRUUEhlYWRlck1hcDo6QWRkUmVz
dWx0IHJlc3VsdCA9IG1fcmVxdWVzdEhlYWRlcnMuYWRkKG5hbWUsIHZhbHVlKTsKICAgICBpZiAo
IXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCArPSAi
LCAiICsgdmFsdWU7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgKz0gIiwgIiArIHZh
bHVlOwogfQogCiBTdHJpbmcgWE1MSHR0cFJlcXVlc3Q6OmdldFJlcXVlc3RIZWFkZXIoY29uc3Qg
QXRvbWljU3RyaW5nJiBuYW1lKSBjb25zdApAQCAtOTQ3LDE2ICs5NDcsMTYgQEAgU3RyaW5nIFhN
TEh0dHBSZXF1ZXN0OjpnZXRBbGxSZXNwb25zZUhlYWRlcnMoRXhjZXB0aW9uQ29kZSYgZWMpIGNv
bnN0CiAgICAgICAgIC8vICAgICAyKSBUaGVyZSdzIG5vIGtub3duIGhhcm0gaW4gaGlkaW5nIFNl
dC1Db29raWUgaGVhZGVyIGZpZWxkcyBlbnRpcmVseTsgd2UgZG9uJ3QKICAgICAgICAgLy8gICAg
ICAgIGtub3cgYW55IHdpZGVseSB1c2VkIHRlY2huaXF1ZSB0aGF0IHJlcXVpcmVzIGFjY2VzcyB0
byB0aGVtLgogICAgICAgICAvLyAgICAgMykgRmlyZWZveCBoYXMgaW1wbGVtZW50ZWQgdGhpcyBw
b2xpY3kuCi0gICAgICAgIGlmIChpc1NldENvb2tpZUhlYWRlcihpdC0+Zmlyc3QpICYmICFzZWN1
cml0eU9yaWdpbigpLT5jYW5Mb2FkTG9jYWxSZXNvdXJjZXMoKSkKKyAgICAgICAgaWYgKGlzU2V0
Q29va2llSGVhZGVyKGl0LT5rZXkpICYmICFzZWN1cml0eU9yaWdpbigpLT5jYW5Mb2FkTG9jYWxS
ZXNvdXJjZXMoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGlmICghbV9zYW1l
T3JpZ2luUmVxdWVzdCAmJiAhaXNPbkFjY2Vzc0NvbnRyb2xSZXNwb25zZUhlYWRlcldoaXRlbGlz
dChpdC0+Zmlyc3QpICYmICFhY2Nlc3NDb250cm9sRXhwb3NlSGVhZGVyU2V0LmNvbnRhaW5zKGl0
LT5maXJzdCkpCisgICAgICAgIGlmICghbV9zYW1lT3JpZ2luUmVxdWVzdCAmJiAhaXNPbkFjY2Vz
c0NvbnRyb2xSZXNwb25zZUhlYWRlcldoaXRlbGlzdChpdC0+a2V5KSAmJiAhYWNjZXNzQ29udHJv
bEV4cG9zZUhlYWRlclNldC5jb250YWlucyhpdC0+a2V5KSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogCi0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5maXJzdCk7CisgICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5rZXkpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZCgnOicpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnICcpOwotICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZChpdC0+c2Vjb25kKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQoaXQtPnZhbHVlKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xyJyk7CiAgICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3htbC9YUGF0aEZ1bmN0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBh
dGhGdW5jdGlvbnMuY3BwCmluZGV4IDNjOTBlM2I1MTcxODU5YTU2ZTg3MmJiNzY1MmY1OTU5OGE2
MzdkMmEuLjAwMTliYzQzNjUwNGJhMmIyMWRlZmVmZjMwZjY0ODBjMWVmOTgxZTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aEZ1bmN0aW9ucy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUveG1sL1hQYXRoRnVuY3Rpb25zLmNwcApAQCAtNzIzLDcgKzcyMyw3IEBAIEZ1bmN0aW9u
KiBjcmVhdGVGdW5jdGlvbihjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFZlY3RvcjxFeHByZXNz
aW9uKj4mIGFyZ3MpCiAgICAgSGFzaE1hcDxTdHJpbmcsIEZ1bmN0aW9uUmVjPjo6aXRlcmF0b3Ig
ZnVuY3Rpb25NYXBJdGVyID0gZnVuY3Rpb25NYXAtPmZpbmQobmFtZSk7CiAgICAgRnVuY3Rpb25S
ZWMqIGZ1bmN0aW9uUmVjID0gMDsKIAotICAgIGlmIChmdW5jdGlvbk1hcEl0ZXIgPT0gZnVuY3Rp
b25NYXAtPmVuZCgpIHx8ICEoZnVuY3Rpb25SZWMgPSAmZnVuY3Rpb25NYXBJdGVyLT5zZWNvbmQp
LT5hcmdzLmNvbnRhaW5zKGFyZ3Muc2l6ZSgpKSkKKyAgICBpZiAoZnVuY3Rpb25NYXBJdGVyID09
IGZ1bmN0aW9uTWFwLT5lbmQoKSB8fCAhKGZ1bmN0aW9uUmVjID0gJmZ1bmN0aW9uTWFwSXRlci0+
dmFsdWUpLT5hcmdzLmNvbnRhaW5zKGFyZ3Muc2l6ZSgpKSkKICAgICAgICAgcmV0dXJuIDA7CiAK
ICAgICBGdW5jdGlvbiogZnVuY3Rpb24gPSBmdW5jdGlvblJlYy0+ZmFjdG9yeUZuKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUveG1sL1hQYXRoUGFyc2VyLmNwcAppbmRleCA2MmQ4ZWUzN2ZkNmViYjc0YTU4MGEwMGM1OWJl
YjZjZDQwYzVhOGI3Li4xMDk4ZTU0YTIyOTA3NzlmMWUwOGU5ODAyMTAxMzAzN2U2NmRhODlmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhQYXJzZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3htbC9YUGF0aFBhcnNlci5jcHAKQEAgLTEwNiw3ICsxMDYsNyBAQCBzdGF0aWMg
Ym9vbCBpc0F4aXNOYW1lKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RlcDo6QXhpcyYgdHlwZSkKICAg
ICBBeGlzTmFtZXNNYXA6Oml0ZXJhdG9yIGl0ID0gYXhpc05hbWVzLmZpbmQobmFtZSk7CiAgICAg
aWYgKGl0ID09IGF4aXNOYW1lcy5lbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHR5
cGUgPSBpdC0+c2Vjb25kOworICAgIHR5cGUgPSBpdC0+dmFsdWU7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yTGlieHNs
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwCmluZGV4
IDA3NmE4NTJkMDZkODM3MTAzNzYyMjY0NWIwMTE5NDUyZWNiZTI0ZDQuLjllYTJhYTcyMTA1Y2Y3
YTgwNDkzNmQzMDcxMjQ5ODhmNGM0MjFlNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3ht
bC9YU0xUUHJvY2Vzc29yTGlieHNsdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hTTFRQ
cm9jZXNzb3JMaWJ4c2x0LmNwcApAQCAtMjI1LDggKzIyNSw4IEBAIHN0YXRpYyBjb25zdCBjaGFy
KiogeHNsdFBhcmFtQXJyYXlGcm9tUGFyYW1ldGVyTWFwKFhTTFRQcm9jZXNzb3I6OlBhcmFtZXRl
ck1hcCYKICAgICBYU0xUUHJvY2Vzc29yOjpQYXJhbWV0ZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IHBh
cmFtZXRlcnMuZW5kKCk7CiAgICAgdW5zaWduZWQgaW5kZXggPSAwOwogICAgIGZvciAoWFNMVFBy
b2Nlc3Nvcjo6UGFyYW1ldGVyTWFwOjppdGVyYXRvciBpdCA9IHBhcmFtZXRlcnMuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIHBhcmFtZXRlckFycmF5W2luZGV4KytdID0gZmFz
dFN0ckR1cChpdC0+Zmlyc3QudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIHBhcmFtZXRlckFycmF5
W2luZGV4KytdID0gZmFzdFN0ckR1cChpdC0+c2Vjb25kLnV0ZjgoKS5kYXRhKCkpOworICAgICAg
ICBwYXJhbWV0ZXJBcnJheVtpbmRleCsrXSA9IGZhc3RTdHJEdXAoaXQtPmtleS51dGY4KCkuZGF0
YSgpKTsKKyAgICAgICAgcGFyYW1ldGVyQXJyYXlbaW5kZXgrK10gPSBmYXN0U3RyRHVwKGl0LT52
YWx1ZS51dGY4KCkuZGF0YSgpKTsKICAgICB9CiAgICAgcGFyYW1ldGVyQXJyYXlbaW5kZXhdID0g
MDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JRdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvclF0LmNwcAppbmRleCBjMGFiNGQ2OTMx
N2Q1YzMxYzM2Y2I0YWEwM2RiZTcwNmMxNTNhOTk4Li5hNGM5ZDc0Y2QyYWE1YWU1YjdkM2M3OWZm
MTU4MGQxNjNmNTcwOGY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFNMVFByb2Nl
c3NvclF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvclF0LmNwcApA
QCAtMTQzLDcgKzE0Myw3IEBAIGJvb2wgWFNMVFByb2Nlc3Nvcjo6dHJhbnNmb3JtVG9TdHJpbmco
Tm9kZSogc291cmNlTm9kZSwgU3RyaW5nJiwgU3RyaW5nJiByZXN1bHRTCiAKICAgICBYU0xUUHJv
Y2Vzc29yOjpQYXJhbWV0ZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fcGFyYW1ldGVycy5lbmQoKTsK
ICAgICBmb3IgKFhTTFRQcm9jZXNzb3I6OlBhcmFtZXRlck1hcDo6aXRlcmF0b3IgaXQgPSBtX3Bh
cmFtZXRlcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBxdWVyeS5iaW5kVmFy
aWFibGUoUVN0cmluZyhpdC0+Zmlyc3QpLCBRWG1sSXRlbShRVmFyaWFudChRU3RyaW5nKGl0LT5z
ZWNvbmQpKSkpOworICAgICAgICBxdWVyeS5iaW5kVmFyaWFibGUoUVN0cmluZyhpdC0+a2V5KSwg
UVhtbEl0ZW0oUVZhcmlhbnQoUVN0cmluZyhpdC0+dmFsdWUpKSkpOwogCiAgICAgUVN0cmluZyBz
b3VyY2U7CiAgICAgaWYgKHNvdXJjZUlzRG9jdW1lbnQgJiYgb3duZXJEb2N1bWVudC0+dHJhbnNm
b3JtU291cmNlKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL0Jh
Y2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL0JhY2tpbmdTdG9y
ZS5jcHAKaW5kZXggYTBmYTI5NWUzMTQwNjljYjVmZTNlOGE0OTM4YjIyZjc3OWFjMDIxZS4uMzBm
ZDJkNzI3MjhmZTdkMzQwZDM0OTZiMWFjMGRhZjEwMmMzOTY0YSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9ibGFja2JlcnJ5L0FwaS9CYWNraW5nU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvYmxhY2tiZXJyeS9BcGkvQmFja2luZ1N0b3JlLmNwcApAQCAtNzkxLDggKzc5MSw4IEBAIHZv
aWQgQmFja2luZ1N0b3JlUHJpdmF0ZTo6c2V0QmFja2luZ1N0b3JlUmVjdChjb25zdCBQbGF0Zm9y
bTo6SW50UmVjdCYgYmFja2luZ1N0CiAgICAgLy8gb3VyIG5ldyBiYWNraW5nIHN0b3JlIHJlY3Qu
CiAgICAgVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgdGlsZU1hcEVuZCA9IGN1cnJlbnRNYXAuZW5k
KCk7CiAgICAgZm9yIChUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGN1cnJlbnRNYXAuYmVn
aW4oKTsgaXQgIT0gdGlsZU1hcEVuZDsgKytpdCkgewotICAgICAgICBUaWxlSW5kZXggb2xkSW5k
ZXggPSBpdC0+Zmlyc3Q7Ci0gICAgICAgIEJhY2tpbmdTdG9yZVRpbGUqIHRpbGUgPSBpdC0+c2Vj
b25kOworICAgICAgICBUaWxlSW5kZXggb2xkSW5kZXggPSBpdC0+a2V5OworICAgICAgICBCYWNr
aW5nU3RvcmVUaWxlKiB0aWxlID0gaXQtPnZhbHVlOwogCiAgICAgICAgIC8vIFJlc2V0IHRoZSBv
bGQgaW5kZXguCiAgICAgICAgIHJlc2V0VGlsZShvbGRJbmRleCwgdGlsZSwgZmFsc2UgLypyZXNl
dEJhY2tncm91bmQqLyk7CkBAIC04NDgsOCArODQ4LDggQEAgdm9pZCBCYWNraW5nU3RvcmVQcml2
YXRlOjpzZXRCYWNraW5nU3RvcmVSZWN0KGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0JiBiYWNraW5n
U3QKICAgICBzaXplX3QgaSA9IDA7CiAgICAgVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgbGVmdE92
ZXJFbmQgPSBsZWZ0T3ZlclRpbGVzLmVuZCgpOwogICAgIGZvciAoVGlsZU1hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBsZWZ0T3ZlclRpbGVzLmJlZ2luKCk7IGl0ICE9IGxlZnRPdmVyRW5kOyArK2l0
KSB7Ci0gICAgICAgIFRpbGVJbmRleCBvbGRJbmRleCA9IGl0LT5maXJzdDsKLSAgICAgICAgQmFj
a2luZ1N0b3JlVGlsZSogdGlsZSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFRpbGVJbmRleCBvbGRJ
bmRleCA9IGl0LT5rZXk7CisgICAgICAgIEJhY2tpbmdTdG9yZVRpbGUqIHRpbGUgPSBpdC0+dmFs
dWU7CiAgICAgICAgIGlmIChpID49IGluZGV4ZXNUb0ZpbGwuc2l6ZSgpKSB7CiAgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTg0OSw3ICsx
ODQ5LDcgQEAgUGxhdGZvcm06OkludFJlY3QgQmFja2luZ1N0b3JlUHJpdmF0ZTo6dmlzaWJsZVRp
bGVzUmVjdCgpIGNvbnN0CiAgICAgVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY3VycmVu
dE1hcC5lbmQoKTsKICAgICBmb3IgKFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY3VycmVu
dE1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgVGlsZVJlY3QgdGlsZVJl
Y3Q7Ci0gICAgICAgIHRpbGVSZWN0LmZpcnN0ID0gaXQtPmZpcnN0OworICAgICAgICB0aWxlUmVj
dC5maXJzdCA9IGl0LT5rZXk7CiAgICAgICAgIHRpbGVSZWN0LnNlY29uZCA9IHRoaXMtPnRpbGVS
ZWN0KCk7CiAgICAgICAgIFBsYXRmb3JtOjpJbnRSZWN0IHRpbGUgPSBtYXBGcm9tVGlsZXNUb1Ry
YW5zZm9ybWVkQ29udGVudHModGlsZVJlY3QpOwogICAgICAgICBpZiAodGlsZS5pbnRlcnNlY3Rz
KHZpc2libGVDb250ZW50c1JlY3QoKSkpCkBAIC0xOTEwLDcgKzE5MTAsNyBAQCB2b2lkIEJhY2tp
bmdTdG9yZVByaXZhdGU6OnJlc2V0VGlsZXMoYm9vbCByZXNldEJhY2tncm91bmQpCiAKICAgICBU
aWxlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBjdXJyZW50TWFwLmVuZCgpOwogICAgIGZvciAo
VGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjdXJyZW50TWFwLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkKLSAgICAgICAgcmVzZXRUaWxlKGl0LT5maXJzdCwgaXQtPnNlY29uZCwgcmVzZXRC
YWNrZ3JvdW5kKTsKKyAgICAgICAgcmVzZXRUaWxlKGl0LT5rZXksIGl0LT52YWx1ZSwgcmVzZXRC
YWNrZ3JvdW5kKTsKIH0KIAogdm9pZCBCYWNraW5nU3RvcmVQcml2YXRlOjp1cGRhdGVUaWxlcyhi
b29sIHVwZGF0ZVZpc2libGUsIGJvb2wgaW1tZWRpYXRlKQpAQCAtMTkyMywxMCArMTkyMywxMCBA
QCB2b2lkIEJhY2tpbmdTdG9yZVByaXZhdGU6OnVwZGF0ZVRpbGVzKGJvb2wgdXBkYXRlVmlzaWJs
ZSwgYm9vbCBpbW1lZGlhdGUpCiAKICAgICBUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBj
dXJyZW50TWFwLmVuZCgpOwogICAgIGZvciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBj
dXJyZW50TWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBib29sIGlzVmlz
aWJsZSA9IGlzVGlsZVZpc2libGUoaXQtPmZpcnN0KTsKKyAgICAgICAgYm9vbCBpc1Zpc2libGUg
PSBpc1RpbGVWaXNpYmxlKGl0LT5rZXkpOwogICAgICAgICBpZiAoIXVwZGF0ZVZpc2libGUgJiYg
aXNWaXNpYmxlKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHVwZGF0ZVRpbGUoaXQt
PmZpcnN0LCBpbW1lZGlhdGUpOworICAgICAgICB1cGRhdGVUaWxlKGl0LT5rZXksIGltbWVkaWF0
ZSk7CiAgICAgfQogfQogCkBAIC0xOTQ3LDggKzE5NDcsOCBAQCB2b2lkIEJhY2tpbmdTdG9yZVBy
aXZhdGU6OnVwZGF0ZVRpbGVzRm9yU2Nyb2xsT3JOb3RSZW5kZXJlZFJlZ2lvbihib29sIGNoZWNr
TG9hZAogCiAgICAgVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY3VycmVudE1hcC5lbmQo
KTsKICAgICBmb3IgKFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY3VycmVudE1hcC5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgVGlsZUluZGV4IGluZGV4ID0gaXQtPmZp
cnN0OwotICAgICAgICBCYWNraW5nU3RvcmVUaWxlKiB0aWxlID0gaXQtPnNlY29uZDsKKyAgICAg
ICAgVGlsZUluZGV4IGluZGV4ID0gaXQtPmtleTsKKyAgICAgICAgQmFja2luZ1N0b3JlVGlsZSog
dGlsZSA9IGl0LT52YWx1ZTsKICAgICAgICAgYm9vbCBpc1Zpc2libGUgPSBpc1RpbGVWaXNpYmxl
KGluZGV4KTsKICAgICAgICAgLy8gVGhlIHJlY3QgaW4gdHJhbnNmb3JtZWQgY29udGVudHMgY29v
cmRpbmF0ZXMuCiAgICAgICAgIFBsYXRmb3JtOjpJbnRSZWN0IHJlY3Qob3JpZ2luT2ZUaWxlKGlu
ZGV4KSwgdGlsZVNpemUoKSk7CkBAIC0yMDkxLDggKzIwOTEsOCBAQCBCYWNraW5nU3RvcmVQcml2
YXRlOjpUaWxlUmVjdExpc3QgQmFja2luZ1N0b3JlUHJpdmF0ZTo6bWFwRnJvbVRyYW5zZm9ybWVk
Q29udGVudAogICAgIFRpbGVSZWN0TGlzdCB0aWxlUmVjdExpc3Q7CiAgICAgVGlsZU1hcDo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gdGlsZU1hcC5lbmQoKTsKICAgICBmb3IgKFRpbGVNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gdGlsZU1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgVGlsZUluZGV4IGluZGV4ID0gaXQtPmZpcnN0OwotICAgICAgICBCYWNraW5nU3RvcmVUaWxl
KiB0aWxlID0gaXQtPnNlY29uZDsKKyAgICAgICAgVGlsZUluZGV4IGluZGV4ID0gaXQtPmtleTsK
KyAgICAgICAgQmFja2luZ1N0b3JlVGlsZSogdGlsZSA9IGl0LT52YWx1ZTsKIAogICAgICAgICAv
LyBOZWVkIHRvIG1hcCB0aGUgcmVjdCB0byB0aWxlIGNvb3JkaW5hdGVzLgogICAgICAgICBQbGF0
Zm9ybTo6SW50UmVjdCByID0gcmVjdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2ti
ZXJyeS9XZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJJ
bXBsLmNwcAppbmRleCA2YjI5MjEwMjk0NjI3N2RhMjhlNzk4ZDdlZWRmOGI5MzljNTMxOWM3Li4y
Y2Q3YzE3NDUyN2RmMTBmMzkwYTE2NWJhYTdiZDk2ZjRmNTNmZDhmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uUHJlc2VudGVy
SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L05v
dGlmaWNhdGlvblByZXNlbnRlckltcGwuY3BwCkBAIC04MSw3ICs4MSw3IEBAIHZvaWQgTm90aWZp
Y2F0aW9uUHJlc2VudGVySW1wbDo6Y2FuY2VsKE5vdGlmaWNhdGlvbiogbm90aWZpY2F0aW9uKQog
ICAgIGlmIChpdCA9PSBtX25vdGlmaWNhdGlvbnMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIG1fcGxhdGZvcm1QcmVzZW50ZXItPmNhbmNlbChzdGQ6OnN0cmluZyhpdC0+c2Vjb25kLnV0
ZjgoKS5kYXRhKCkpKTsKKyAgICBtX3BsYXRmb3JtUHJlc2VudGVyLT5jYW5jZWwoc3RkOjpzdHJp
bmcoaXQtPnZhbHVlLnV0ZjgoKS5kYXRhKCkpKTsKICAgICBtX25vdGlmaWNhdGlvbnMucmVtb3Zl
KGl0KTsKIH0KIApAQCAtMTA4LDEyICsxMDgsMTIgQEAgdm9pZCBOb3RpZmljYXRpb25QcmVzZW50
ZXJJbXBsOjpvblBlcm1pc3Npb24oY29uc3Qgc3RkOjpzdHJpbmcmIGRvbWFpbiwgYm9vbCBpc0EK
ICAgICBTdHJpbmcgZG9tYWluU3RyaW5nID0gU3RyaW5nOjpmcm9tVVRGOChkb21haW4uY19zdHIo
KSk7CiAgICAgUGVybWlzc2lvblJlcXVlc3RNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wZXJtaXNzaW9u
UmVxdWVzdHMuYmVnaW4oKTsKICAgICBmb3IgKDsgaXQgIT0gbV9wZXJtaXNzaW9uUmVxdWVzdHMu
ZW5kKCk7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5maXJzdC0+dXJsKCkuaG9zdCgpICE9IGRv
bWFpblN0cmluZykKKyAgICAgICAgaWYgKGl0LT5rZXktPnVybCgpLmhvc3QoKSAhPSBkb21haW5T
dHJpbmcpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBpZiAoaXNBbGxvd2VkKSB7
CiAgICAgICAgICAgICBtX2FsbG93ZWREb21haW5zLmFkZChkb21haW5TdHJpbmcpOwotICAgICAg
ICAgICAgaXQtPnNlY29uZC0+aGFuZGxlRXZlbnQoKTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+
aGFuZGxlRXZlbnQoKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBtX2FsbG93ZWREb21h
aW5zLnJlbW92ZShkb21haW5TdHJpbmcpOwogCkBAIC0xNDQsOSArMTQ0LDkgQEAgdm9pZCBOb3Rp
ZmljYXRpb25QcmVzZW50ZXJJbXBsOjpub3RpZmljYXRpb25DbGlja2VkKGNvbnN0IHN0ZDo6c3Ry
aW5nJiBpZCkKICAgICBTdHJpbmcgaWRTdHJpbmcgPSBTdHJpbmc6OmZyb21VVEY4KGlkLmNfc3Ry
KCkpOwogICAgIE5vdGlmaWNhdGlvbk1hcDo6aXRlcmF0b3IgaXQgPSBtX25vdGlmaWNhdGlvbnMu
YmVnaW4oKTsKICAgICBmb3IgKDsgaXQgIT0gbV9ub3RpZmljYXRpb25zLmVuZCgpOyArK2l0KSB7
Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kID09IGlkU3RyaW5nICYmIGl0LT5maXJzdC0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpKSB7Ci0gICAgICAgICAgICBSZWZQdHI8Tm90aWZpY2F0aW9uPiBu
b3RpZmljYXRpb24gPSBpdC0+Zmlyc3Q7Ci0gICAgICAgICAgICBpdC0+Zmlyc3QtPmRpc3BhdGNo
RXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuY2xpY2tFdmVudCwgZmFsc2UsIHRydWUp
KTsKKyAgICAgICAgaWYgKGl0LT52YWx1ZSA9PSBpZFN0cmluZyAmJiBpdC0+Zmlyc3QtPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSkgeworICAgICAgICAgICAgUmVmUHRyPE5vdGlmaWNhdGlvbj4g
bm90aWZpY2F0aW9uID0gaXQtPmtleTsKKyAgICAgICAgICAgIGl0LT5rZXktPmRpc3BhdGNoRXZl
bnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuY2xpY2tFdmVudCwgZmFsc2UsIHRydWUpKTsK
ICAgICAgICAgICAgIG1fbm90aWZpY2F0aW9ucy5yZW1vdmUobm90aWZpY2F0aW9uKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFj
a2JlcnJ5L1dlYktpdFN1cHBvcnQvQWJvdXREYXRhLmNwcCBiL1NvdXJjZS9XZWJLaXQvYmxhY2ti
ZXJyeS9XZWJLaXRTdXBwb3J0L0Fib3V0RGF0YS5jcHAKaW5kZXggNWY1NjVjOTRiMTZjZmM1YTU0
MzgyN2JmMmY5NWVlM2QxOTdjNTk2Mi4uMTM0ODA4MTlkYmRjYjQzYmVlYThkZTFhMTAwNDM1ZWY3
YTQ2ZTZhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBv
cnQvQWJvdXREYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3Vw
cG9ydC9BYm91dERhdGEuY3BwCkBAIC0yMDUsNyArMjA1LDcgQEAgc3RhdGljIHZvaWQgZHVtcEpT
Q1R5cGVDb3VudFNldFRvVGFibGVIVE1MKFN0cmluZyYgdGFibGVIVE1MLCBKU0M6OlR5cGVDb3Vu
dFNldCoKICAgICAgICAgcmV0dXJuOwogCiAgICAgZm9yIChKU0M6OlR5cGVDb3VudFNldDo6Y29u
c3RfaXRlcmF0b3IgaXRlciA9IHR5cGVDb3VudFNldC0+YmVnaW4oKTsgaXRlciAhPSB0eXBlQ291
bnRTZXQtPmVuZCgpOyArK2l0ZXIpCi0gICAgICAgIHRhYmxlSFRNTCArPSBudW1iZXJUb0hUTUxU
cihpdGVyLT5maXJzdCwgaXRlci0+c2Vjb25kKTsKKyAgICAgICAgdGFibGVIVE1MICs9IG51bWJl
clRvSFRNTFRyKGl0ZXItPmtleSwgaXRlci0+dmFsdWUpOwogfQogCiBzdGF0aWMgU3RyaW5nIG1l
bW9yeVBhZ2UoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1
cHBvcnQvRnJhbWVMYXllcnMuY3BwIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1
cHBvcnQvRnJhbWVMYXllcnMuY3BwCmluZGV4IGI4NzU2NDZkYTRmOWFjOTYyZGMzMjkwYTQ2Mjk3
MWUyNmJjZDQ0OTEuLmViNzIzYWU4Y2RlMDY5ZGY3NTVlZDQ4Y2QyZGNiMGFkZjVmMGE0ZDIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0ZyYW1lTGF5
ZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9GcmFt
ZUxheWVycy5jcHAKQEAgLTkxLDcgKzkxLDcgQEAgdm9pZCBGcmFtZUxheWVyczo6cmVtb3ZlTGF5
ZXJCeUZyYW1lKEZyYW1lKiBmcmFtZSkKICAgICBBU1NFUlQoZnJhbWUpOwogICAgIEZyYW1lTGF5
ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9mcmFtZUxheWVycy5maW5kKGZyYW1lKTsKICAgICBpZiAo
aXQgIT0gbV9mcmFtZUxheWVycy5lbmQoKSkgewotICAgICAgICBMYXllcldlYktpdFRocmVhZCog
bGF5ZXIgPSBpdC0+c2Vjb25kOworICAgICAgICBMYXllcldlYktpdFRocmVhZCogbGF5ZXIgPSBp
dC0+dmFsdWU7CiAgICAgICAgIGlmIChsYXllci0+c3VwZXJsYXllcigpKQogICAgICAgICAgICAg
bGF5ZXItPnJlbW92ZUZyb21TdXBlcmxheWVyKCk7CiAgICAgICAgIG1fZnJhbWVMYXllcnMucmVt
b3ZlKGl0KTsKQEAgLTEwNCw3ICsxMDQsNyBAQCB2b2lkIEZyYW1lTGF5ZXJzOjpjb21taXRPbldl
YktpdFRocmVhZChkb3VibGUgc2NhbGUpCiAgICAgQVNTRVJUKG1fcm9vdExheWVyKTsKICAgICBp
ZiAoIWlzUm9vdExheWVyTWFpbkZyYW1lTGF5ZXIoKSkgewogICAgICAgICBmb3IgKEZyYW1lTGF5
ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9mcmFtZUxheWVycy5iZWdpbigpOyBpdCAhPSBtX2ZyYW1l
TGF5ZXJzLmVuZCgpOyArK2l0KQotICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0QWJzb2x1dGVP
ZmZzZXQoZnJhbWVMYXllckFic29sdXRlT2Zmc2V0KGl0LT5maXJzdCkpOworICAgICAgICAgICAg
aXQtPnZhbHVlLT5zZXRBYnNvbHV0ZU9mZnNldChmcmFtZUxheWVyQWJzb2x1dGVPZmZzZXQoaXQt
PmtleSkpOwogICAgIH0KICAgICBtX3Jvb3RMYXllci0+Y29tbWl0T25XZWJLaXRUaHJlYWQoc2Nh
bGUpOwogfQpAQCAtMTEyLDcgKzExMiw3IEBAIHZvaWQgRnJhbWVMYXllcnM6OmNvbW1pdE9uV2Vi
S2l0VGhyZWFkKGRvdWJsZSBzY2FsZSkKIHZvaWQgRnJhbWVMYXllcnM6OmNhbGN1bGF0ZVJvb3RM
YXllcigpCiB7CiAgICAgaWYgKG1fZnJhbWVMYXllcnMuc2l6ZSgpID09IDEgJiYgbV9mcmFtZUxh
eWVycy5iZWdpbigpLT5maXJzdCA9PSBtX3BhZ2VQcml2YXRlLT5tX21haW5GcmFtZSkKLSAgICAg
ICAgbV9yb290TGF5ZXIgPSBtX2ZyYW1lTGF5ZXJzLmJlZ2luKCktPnNlY29uZDsKKyAgICAgICAg
bV9yb290TGF5ZXIgPSBtX2ZyYW1lTGF5ZXJzLmJlZ2luKCktPnZhbHVlOwogICAgIGVsc2UgaWYg
KG1fcm9vdEdyYXBoaWNzTGF5ZXIpCiAgICAgICAgIG1fcm9vdExheWVyID0gbV9yb290R3JhcGhp
Y3NMYXllci0+cGxhdGZvcm1MYXllcigpOwogICAgIGVsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2Vy
LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdlb2xvY2F0aW9uUGVybWlzc2lv
blJlcXVlc3RNYW5hZ2VyLmNwcAppbmRleCA0YzBlZDljZDcxN2I2ZjRkNWFhNmFmYWY5NzBiZWI2
OTY3OTY4OWQzLi4xZWVhYzY2N2JkZjY2YjNmMTkzZmIzMzVhMzg3MTI4ZmJjOTEyNjc0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHZW9sb2NhdGlvblBlcm1pc3Np
b25SZXF1ZXN0TWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
R2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuY3BwCkBAIC02NCw3ICs2NCw3IEBA
IGJvb2wgV2ViR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXI6OnJlbW92ZShjb25z
dCBXZWJLaXQ6OldlYkdlb2xvY2F0aW9uCiAgICAgR2VvbG9jYXRpb25JZE1hcDo6aXRlcmF0b3Ig
aXQgPSBtX3ByaXZhdGUtPm1fZ2VvbG9jYXRpb25JZE1hcC5maW5kKGdlb2xvY2F0aW9uKTsKICAg
ICBpZiAoaXQgPT0gbV9wcml2YXRlLT5tX2dlb2xvY2F0aW9uSWRNYXAuZW5kKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBpZCA9IGl0LT5zZWNvbmQ7CisgICAgaWQgPSBpdC0+dmFsdWU7
CiAgICAgbV9wcml2YXRlLT5tX2dlb2xvY2F0aW9uSWRNYXAucmVtb3ZlKGl0KTsKICAgICBtX3By
aXZhdGUtPm1faWRHZW9sb2NhdGlvbk1hcC5yZW1vdmUoaWQpOwogICAgIHJldHVybiB0cnVlOwpA
QCAtNzUsNyArNzUsNyBAQCBib29sIFdlYkdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5h
Z2VyOjpyZW1vdmUoaW50IGlkLCBXZWJLaXQ6OldlYkdlb2xvY2F0aQogICAgIElkR2VvbG9jYXRp
b25NYXA6Oml0ZXJhdG9yIGl0ID0gbV9wcml2YXRlLT5tX2lkR2VvbG9jYXRpb25NYXAuZmluZChp
ZCk7CiAgICAgaWYgKGl0ID09IG1fcHJpdmF0ZS0+bV9pZEdlb2xvY2F0aW9uTWFwLmVuZCgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgR2VvbG9jYXRpb24qIGdlb2xvY2F0aW9uID0gaXQt
PnNlY29uZDsKKyAgICBHZW9sb2NhdGlvbiogZ2VvbG9jYXRpb24gPSBpdC0+dmFsdWU7CiAgICAg
cGVybWlzc2lvblJlcXVlc3QgPSBXZWJHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0KGdlb2xv
Y2F0aW9uKTsKICAgICBtX3ByaXZhdGUtPm1faWRHZW9sb2NhdGlvbk1hcC5yZW1vdmUoaXQpOwog
ICAgIG1fcHJpdmF0ZS0+bV9nZW9sb2NhdGlvbklkTWFwLnJlbW92ZShnZW9sb2NhdGlvbik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJNZXRhZGF0YS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJNZXRhZGF0YS5jcHAKaW5kZXggMDFk
ODc4YTBhOWYyYzFjODkxNDkxOTFiYzhjODcxZDhjZGNmNjUzNy4uZjJmYzI4NTk0NDRjNDhhNzJk
ZDk0YWRjMTFkMTg4MTdmNWViNDVkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViSURCTWV0YWRhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYklEQk1ldGFkYXRhLmNwcApAQCAtNDYsNyArNDYsNyBAQCBXZWJJREJNZXRhZGF0YTo6V2Vi
SURCTWV0YWRhdGEoY29uc3QgV2ViQ29yZTo6SURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEp
CiAKICAgICBzaXplX3QgaSA9IDA7CiAgICAgZm9yIChJREJEYXRhYmFzZU1ldGFkYXRhOjpPYmpl
Y3RTdG9yZU1hcDo6Y29uc3RfaXRlcmF0b3Igc3RvcmVJdGVyYXRvciA9IG1ldGFkYXRhLm9iamVj
dFN0b3Jlcy5iZWdpbigpOyBzdG9yZUl0ZXJhdG9yICE9IG1ldGFkYXRhLm9iamVjdFN0b3Jlcy5l
bmQoKTsgKytzdG9yZUl0ZXJhdG9yKSB7Ci0gICAgICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0
YWRhdGEmIG9iamVjdFN0b3JlID0gc3RvcmVJdGVyYXRvci0+c2Vjb25kOworICAgICAgICBjb25z
dCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZSA9IHN0b3JlSXRlcmF0b3ItPnZh
bHVlOwogICAgICAgICBPYmplY3RTdG9yZSB3ZWJPYmplY3RTdG9yZTsKICAgICAgICAgd2ViT2Jq
ZWN0U3RvcmUubmFtZSA9IG9iamVjdFN0b3JlLm5hbWU7CiAgICAgICAgIHdlYk9iamVjdFN0b3Jl
LmtleVBhdGggPSBvYmplY3RTdG9yZS5rZXlQYXRoOwpAQCAtNTUsNyArNTUsNyBAQCBXZWJJREJN
ZXRhZGF0YTo6V2ViSURCTWV0YWRhdGEoY29uc3QgV2ViQ29yZTo6SURCRGF0YWJhc2VNZXRhZGF0
YSYgbWV0YWRhdGEpCiAKICAgICAgICAgc2l6ZV90IGogPSAwOwogICAgICAgICBmb3IgKElEQk9i
amVjdFN0b3JlTWV0YWRhdGE6OkluZGV4TWFwOjpjb25zdF9pdGVyYXRvciBpbmRleEl0ZXJhdG9y
ID0gb2JqZWN0U3RvcmUuaW5kZXhlcy5iZWdpbigpOyBpbmRleEl0ZXJhdG9yICE9IG9iamVjdFN0
b3JlLmluZGV4ZXMuZW5kKCk7ICsraW5kZXhJdGVyYXRvcikgewotICAgICAgICAgICAgY29uc3Qg
SURCSW5kZXhNZXRhZGF0YSYgaW5kZXggPSBpbmRleEl0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAg
ICAgICBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleCA9IGluZGV4SXRlcmF0b3ItPnZhbHVl
OwogICAgICAgICAgICAgSW5kZXggd2ViSW5kZXg7CiAgICAgICAgICAgICB3ZWJJbmRleC5uYW1l
ID0gaW5kZXgubmFtZTsKICAgICAgICAgICAgIHdlYkluZGV4LmtleVBhdGggPSBpbmRleC5rZXlQ
YXRoOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW50ZW50LmNw
cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkludGVudC5jcHAKaW5kZXggNTU3NzVl
Y2ZjZGMxNjIwNGU1ODQwNmExNTc4YWU4ZWI2Njg3ZWQ4Yy4uMDQxYzdmMmU5YzUwMzU3NTliZDhl
M2ViYjM0M2ZjNGNmZmRiN2QwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViSW50ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJbnRl
bnQuY3BwCkBAIC0xODgsNyArMTg4LDcgQEAgV2ViU3RyaW5nIFdlYkludGVudDo6ZXh0cmFzVmFs
dWUoY29uc3QgV2ViU3RyaW5nJiBuYW1lKSBjb25zdAogICAgIFdURjo6SGFzaE1hcDxTdHJpbmcs
IFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIHZhbCA9IG1fcHJpdmF0ZS0+ZXh0cmFzKCkuZmluZChu
YW1lKTsKICAgICBpZiAodmFsID09IG1fcHJpdmF0ZS0+ZXh0cmFzKCkuZW5kKCkpCiAgICAgICAg
IHJldHVybiBXZWJTdHJpbmcoKTsKLSAgICByZXR1cm4gdmFsLT5zZWNvbmQ7CisgICAgcmV0dXJu
IHZhbC0+dmFsdWU7CiAjZWxzZQogICAgIHJldHVybiBXZWJTdHJpbmcoKTsKICNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJTb2NrZXRFeHRlbnNpb25E
aXNwYXRjaGVyVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYlNvY2tl
dEV4dGVuc2lvbkRpc3BhdGNoZXJUZXN0LmNwcAppbmRleCAzNTg5ODNiODM5OTMxNGNkYTAzN2M4
YzAzMjQ5ZWU5YjY3MmU5NjdiLi4yNDUxNGNkNThmYmZkMDBhYWE4ODcyNDJhMWFjMzYzMzFjYWVi
NzgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYlNvY2tldEV4
dGVuc2lvbkRpc3BhdGNoZXJUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL1dlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXJUZXN0LmNwcApAQCAtMTAzLDEwICsxMDMs
MTAgQEAgVEVTVF9GKFdlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXJUZXN0LCBUZXN0UGFyYW1l
dGVycykKICAgICBFWFBFQ1RfRVEoMiwgbV9wYXJzZWRQYXJhbWV0ZXJzWzBdLnNpemUoKSk7CiAg
ICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46Oml0ZXJhdG9yIHBhcmFtZXRlciA9IG1fcGFyc2Vk
UGFyYW1ldGVyc1swXS5maW5kKCJtYXgtY2hhbm5lbHMiKTsKICAgICBFWFBFQ1RfVFJVRShwYXJh
bWV0ZXIgIT0gbV9wYXJzZWRQYXJhbWV0ZXJzWzBdLmVuZCgpKTsKLSAgICBFWFBFQ1RfRVEoIjQi
LCBwYXJhbWV0ZXItPnNlY29uZCk7CisgICAgRVhQRUNUX0VRKCI0IiwgcGFyYW1ldGVyLT52YWx1
ZSk7CiAgICAgcGFyYW1ldGVyID0gbV9wYXJzZWRQYXJhbWV0ZXJzWzBdLmZpbmQoImZsb3ctY29u
dHJvbCIpOwogICAgIEVYUEVDVF9UUlVFKHBhcmFtZXRlciAhPSBtX3BhcnNlZFBhcmFtZXRlcnNb
MF0uZW5kKCkpOwotICAgIEVYUEVDVF9UUlVFKHBhcmFtZXRlci0+c2Vjb25kLmlzTnVsbCgpKTsK
KyAgICBFWFBFQ1RfVFJVRShwYXJhbWV0ZXItPnZhbHVlLmlzTnVsbCgpKTsKIH0KIAogVEVTVF9G
KFdlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXJUZXN0LCBUZXN0TXVsdGlwbGUpCkBAIC0xMzEs
MTIgKzEzMSwxMiBAQCBURVNUX0YoV2ViU29ja2V0RXh0ZW5zaW9uRGlzcGF0Y2hlclRlc3QsIFRl
c3RNdWx0aXBsZSkKICAgICAgICAgY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIHBhcnNl
ZFBhcmFtZXRlcnMgPSBtX3BhcnNlZFBhcmFtZXRlcnNbaV07CiAgICAgICAgIEVYUEVDVF9FUShl
eHBlY3RlZFtpXS5wYXJhbWV0ZXJzLnNpemUoKSwgbV9wYXJzZWRQYXJhbWV0ZXJzW2ldLnNpemUo
KSk7CiAgICAgICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9y
IGl0ZXJhdG9yID0gZXhwZWN0ZWRQYXJhbWV0ZXJzLmJlZ2luKCk7IGl0ZXJhdG9yICE9IGV4cGVj
dGVkUGFyYW1ldGVycy5lbmQoKTsgKytpdGVyYXRvcikgewotICAgICAgICAgICAgSGFzaE1hcDxT
dHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIHBhcnNlZCA9IHBhcnNlZFBhcmFtZXRlcnMu
ZmluZChpdGVyYXRvci0+Zmlyc3QpOworICAgICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmlu
Zz46OmNvbnN0X2l0ZXJhdG9yIHBhcnNlZCA9IHBhcnNlZFBhcmFtZXRlcnMuZmluZChpdGVyYXRv
ci0+a2V5KTsKICAgICAgICAgICAgIEVYUEVDVF9UUlVFKHBhcnNlZCAhPSBwYXJzZWRQYXJhbWV0
ZXJzLmVuZCgpKTsKLSAgICAgICAgICAgIGlmIChpdGVyYXRvci0+c2Vjb25kLmlzTnVsbCgpKQot
ICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVFKHBhcnNlZC0+c2Vjb25kLmlzTnVsbCgpKTsKKyAg
ICAgICAgICAgIGlmIChpdGVyYXRvci0+dmFsdWUuaXNOdWxsKCkpCisgICAgICAgICAgICAgICAg
RVhQRUNUX1RSVUUocGFyc2VkLT52YWx1ZS5pc051bGwoKSk7CiAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgRVhQRUNUX0VRKGl0ZXJhdG9yLT5zZWNvbmQsIHBhcnNlZC0+c2Vjb25k
KTsKKyAgICAgICAgICAgICAgICBFWFBFQ1RfRVEoaXRlcmF0b3ItPnZhbHVlLCBwYXJzZWQtPnZh
bHVlKTsKICAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZs
L1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmwuY3BwCmluZGV4
IDRiODA0ZGQ2Mjc1MjJlZmEyYjM0ZTg2MTA5NjcwZjU1MGE2ODNkOGIuLjc2ZmI2ODQyZWQ2MzM4
MzVhNzQyNTZjZWI0MDlhOGI1NjkwZjFhMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZs
L1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbC5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsLmNwcApA
QCAtNTQ4LDcgKzU0OCw3IEBAIHZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpldmFsdWF0
ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZChjb25zdCBFdmFzX09iamVjdCoKICAgICBlbHNlIHsKICAg
ICAgICAgV1RGOjpIYXNoTWFwPGludCwgUmVmUHRyPFdlYkNvcmU6OkRPTVdyYXBwZXJXb3JsZCA+
ID46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gd29ybGRNYXAuZmluZCh3b3JsZElEKTsKICAgICAgICAg
aWYgKGl0ICE9IHdvcmxkTWFwLmVuZCgpKQotICAgICAgICAgICAgc2NyaXB0V29ybGQgPSAoKml0
KS5zZWNvbmQ7CisgICAgICAgICAgICBzY3JpcHRXb3JsZCA9ICgqaXQpLnZhbHVlOwogICAgICAg
ICBlbHNlIHsKICAgICAgICAgICAgIHNjcmlwdFdvcmxkID0gV2ViQ29yZTo6U2NyaXB0Q29udHJv
bGxlcjo6Y3JlYXRlV29ybGQoKTsKICAgICAgICAgICAgIHdvcmxkTWFwLnNldCh3b3JsZElELCBz
Y3JpcHRXb3JsZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9y
dC9QbGF0Zm9ybVN0cmF0ZWdpZXNFZmwuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1
cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzRWZsLmNwcAppbmRleCA1YjQwMzA4YTIxOTA3NWMwNGZl
MTZmMDUzYWE5YzI3ZDMzYWQ0ZDZmLi4wOThkMzAzYTRhYzU5NWM0Njc2Yjk1NThmMjQyNTYyOTVj
NWE3ZTg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9QbGF0
Zm9ybVN0cmF0ZWdpZXNFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBw
b3J0L1BsYXRmb3JtU3RyYXRlZ2llc0VmbC5jcHAKQEAgLTk5LDggKzk5LDggQEAgdm9pZCBQbGF0
Zm9ybVN0cmF0ZWdpZXNFZmw6OmdldFBsdWdpbkluZm8oY29uc3QgUGFnZSogcGFnZSwgVmVjdG9y
PFBsdWdpbkluZm8+JgogICAgICAgICBmb3IgKE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7CiAgICAgICAgICAgICBNaW1lQ2xhc3NJbmZvIG1pbWU7CiAKLSAgICAgICAgICAgIG1pbWUu
dHlwZSA9IGl0LT5maXJzdDsKLSAgICAgICAgICAgIG1pbWUuZGVzYyA9IGl0LT5zZWNvbmQ7Cisg
ICAgICAgICAgICBtaW1lLnR5cGUgPSBpdC0+a2V5OworICAgICAgICAgICAgbWltZS5kZXNjID0g
aXQtPnZhbHVlOwogICAgICAgICAgICAgbWltZS5leHRlbnNpb25zID0gcGFja2FnZS0+bWltZVRv
RXh0ZW5zaW9ucygpLmdldChtaW1lLnR5cGUpOwogICAgICAgICAgICAgcGx1Z2luSW5mby5taW1l
cy5hcHBlbmQobWltZSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZs
L2V3ay9ld2tfaW50ZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfaW50ZW50LmNw
cAppbmRleCA3NmMyZDY4ZGFhNzIxMjRlYTViNjFiN2UyNGYwMzRjMmMwY2RiODFlLi44M2JjZTg3
NjRhZjZhZDc5NzQ0MzY5MmY1Mzk2ZTNiYWFiMzU1ODhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2VmbC9ld2svZXdrX2ludGVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3
a19pbnRlbnQuY3BwCkBAIC0xMjAsNyArMTIwLDcgQEAgY29uc3QgY2hhciogZXdrX2ludGVudF9l
eHRyYV9nZXQoY29uc3QgRXdrX0ludGVudCogaW50ZW50LCBjb25zdCBjaGFyKiBrZXkpCiAgICAg
V1RGOjpIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgdmFsID0gY29yZS0+
ZXh0cmFzKCkuZmluZChTdHJpbmc6OmZyb21VVEY4KGtleSkpOwogICAgIGlmICh2YWwgPT0gY29y
ZS0+ZXh0cmFzKCkuZW5kKCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBlaW5hX3N0
cmluZ3NoYXJlX2FkZCh2YWwtPnNlY29uZC51dGY4KCkuZGF0YSgpKTsKKyAgICByZXR1cm4gZWlu
YV9zdHJpbmdzaGFyZV9hZGQodmFsLT52YWx1ZS51dGY4KCkuZGF0YSgpKTsKICNlbHNlCiAgICAg
cmV0dXJuIDA7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVT
dXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc0d0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJD
b3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNHdGsuY3BwCmluZGV4IDI5MjE3M2FlMjkyZjUx
MjExODdlOGJlNTA1MDM5M2Q3YzMzODRjNWEuLjkxMDNjODQ2MDk0ZDUxZjhmNWI5NDg3NGNkNjdh
ZjA0Nzk5MDlhZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0
L1BsYXRmb3JtU3RyYXRlZ2llc0d0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29y
ZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzR3RrLmNwcApAQCAtODgsOCArODgsOCBAQCB2b2lk
IFBsYXRmb3JtU3RyYXRlZ2llc0d0azo6Z2V0UGx1Z2luSW5mbyhjb25zdCBQYWdlKiBwYWdlLCBW
ZWN0b3I8UGx1Z2luSW5mbz4mCiAgICAgICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gbWltZVRvRGVzY3JpcHRpb25zLmVuZCgpOwogICAgICAgICBmb3IgKE1J
TUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtaW1lVG9EZXNjcmlwdGlv
bnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBNaW1lQ2xhc3NJbmZv
IG1pbWU7Ci0gICAgICAgICAgICBtaW1lLnR5cGUgPSBpdC0+Zmlyc3Q7Ci0gICAgICAgICAgICBt
aW1lLmRlc2MgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgbWltZS50eXBlID0gaXQtPmtleTsK
KyAgICAgICAgICAgIG1pbWUuZGVzYyA9IGl0LT52YWx1ZTsKICAgICAgICAgICAgIG1pbWUuZXh0
ZW5zaW9ucyA9IHBhY2thZ2UtPm1pbWVUb0V4dGVuc2lvbnMoKS5nZXQobWltZS50eXBlKTsKICAg
ICAgICAgICAgIHBsdWdpbkluZm8ubWltZXMuYXBwZW5kKG1pbWUpOwogICAgICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZmF2aWNvbmRhdGFiYXNlLmNw
cCBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRmYXZpY29uZGF0YWJhc2UuY3BwCmlu
ZGV4IDZiYWJmZTRkZDkyZTUxNDJjZTBjNGY3MmMzOWE2Y2I2YzNkZGUxZmYuLmIzYTFkNzVjYTEy
YjZhZTBmNjQ1YmY5MmIxMjhhNTgwMGEyMGVjY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXRmYXZpY29uZGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXRmYXZpY29uZGF0YWJhc2UuY3BwCkBAIC02MTQsMTggKzYxNCwxOCBA
QCBzdGF0aWMgdm9pZCB3ZWJraXRGYXZpY29uRGF0YWJhc2VJbXBvcnRGaW5pc2hlZChXZWJLaXRG
YXZpY29uRGF0YWJhc2UqIGRhdGFiYXNlKQogICAgIFZlY3RvcjxTdHJpbmc+IHRvRGVsZXRlVVJM
czsKICAgICBQZW5kaW5nSWNvblJlcXVlc3RNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGRhdGFi
YXNlLT5wcml2LT5wZW5kaW5nSWNvblJlcXVlc3RzLmVuZCgpOwogICAgIGZvciAoUGVuZGluZ0lj
b25SZXF1ZXN0TWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gZGF0YWJhc2UtPnByaXYtPnBlbmRp
bmdJY29uUmVxdWVzdHMuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewotICAgICAgICBT
dHJpbmcgaWNvblVSTCA9IGljb25EYXRhYmFzZSgpLnN5bmNocm9ub3VzSWNvblVSTEZvclBhZ2VV
UkwoaXRlci0+Zmlyc3QpOworICAgICAgICBTdHJpbmcgaWNvblVSTCA9IGljb25EYXRhYmFzZSgp
LnN5bmNocm9ub3VzSWNvblVSTEZvclBhZ2VVUkwoaXRlci0+a2V5KTsKICAgICAgICAgaWYgKCFp
Y29uVVJMLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIFBlbmRp
bmdJY29uUmVxdWVzdFZlY3RvciogaWNvbnMgPSBpdGVyLT5zZWNvbmQ7CisgICAgICAgIFBlbmRp
bmdJY29uUmVxdWVzdFZlY3RvciogaWNvbnMgPSBpdGVyLT52YWx1ZTsKICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBpY29ucy0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIFBlbmRp
bmdJY29uUmVxdWVzdCogcmVxdWVzdCA9IGljb25zLT5hdChpKS5nZXQoKTsKICAgICAgICAgICAg
IGlmIChyZXF1ZXN0LT5hc3luY1Jlc3VsdCgpKQogICAgICAgICAgICAgICAgIHJlcXVlc3QtPmFz
eW5jUmVzdWx0Q29tcGxldGUoMCk7CiAgICAgICAgIH0KIAotICAgICAgICB0b0RlbGV0ZVVSTHMu
YXBwZW5kKGl0ZXItPmZpcnN0KTsKKyAgICAgICAgdG9EZWxldGVVUkxzLmFwcGVuZChpdGVyLT5r
ZXkpOwogICAgIH0KIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdG9EZWxldGVVUkxzLnNp
emUoKTsgKytpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdl
YnBsdWdpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2VicGx1Z2luLmNw
cAppbmRleCBlMDNiMWVhNmRhMzNiN2UyZjAwMjI1NWNlODc3Nzg2MjRjZGE3MDhjLi4wMWQwYmI1
ZjJiZmQ3MDBmNmIzYzlmYzRmOGU0MjBjNTcyNDg2ZWMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0d2VicGx1Z2luLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0d2VicGx1Z2luLmNwcApAQCAtMjM3LDEwICsyMzcsMTAgQEAgR1NMaXN0
KiB3ZWJraXRfd2ViX3BsdWdpbl9nZXRfbWltZXR5cGVzKFdlYktpdFdlYlBsdWdpbiogcGx1Z2lu
KQogCiAgICAgZm9yIChNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bWltZVRvRGVzY3JpcHRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBX
ZWJLaXRXZWJQbHVnaW5NSU1FVHlwZSogbWltZVR5cGUgPSBnX3NsaWNlX25ldzAoV2ViS2l0V2Vi
UGx1Z2luTUlNRVR5cGUpOwotICAgICAgICBtaW1lVHlwZS0+bmFtZSA9IGdfc3RyZHVwKGl0LT5m
aXJzdC51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgbWltZVR5cGUtPmRlc2NyaXB0aW9uID0gZ19z
dHJkdXAoaXQtPnNlY29uZC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgbWltZVR5cGUtPm5hbWUg
PSBnX3N0cmR1cChpdC0+a2V5LnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBtaW1lVHlwZS0+ZGVz
Y3JpcHRpb24gPSBnX3N0cmR1cChpdC0+dmFsdWUudXRmOCgpLmRhdGEoKSk7CiAKLSAgICAgICAg
VmVjdG9yPFN0cmluZz4gZXh0ZW5zaW9ucyA9IHByaXYtPmNvcmVQbHVnaW4tPm1pbWVUb0V4dGVu
c2lvbnMoKS5nZXQoaXQtPmZpcnN0KTsKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gZXh0ZW5zaW9u
cyA9IHByaXYtPmNvcmVQbHVnaW4tPm1pbWVUb0V4dGVuc2lvbnMoKS5nZXQoaXQtPmtleSk7CiAg
ICAgICAgIG1pbWVUeXBlLT5leHRlbnNpb25zID0gc3RhdGljX2Nhc3Q8Z2NoYXIqKj4oZ19tYWxs
b2MwKHNpemVvZihjaGFyKikgKiAoZXh0ZW5zaW9ucy5zaXplKCkgKyAxKSkpOwogICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXh0ZW5zaW9ucy5zaXplKCk7IGkrKykKICAgICAgICAg
ICAgIG1pbWVUeXBlLT5leHRlbnNpb25zW2ldID0gZ19zdHJkdXAoZXh0ZW5zaW9uc1tpXS51dGY4
KCkuZGF0YSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL0hpc3RvcnkvV2ViSGlz
dG9yeS5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL0hpc3RvcnkvV2ViSGlzdG9yeS5tbQppbmRleCA2
OTY0ZmM5NDliNTEyMTczYTZiZGM1ZTcwYjU2MThkMzFjYjY3N2EzLi5lNzgxZDMyZmQxZGU5NTBk
OTE0YWY0ODM0OTc2NDIwZGY1ODdkYWY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9I
aXN0b3J5L1dlYkhpc3RvcnkubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvSGlzdG9yeS9XZWJI
aXN0b3J5Lm1tCkBAIC0yMzgsNyArMjM4LDcgQEAgc3RhdGljIGlubGluZSBXZWJIaXN0b3J5RGF0
ZUtleSBkYXRlS2V5KE5TVGltZUludGVydmFsIGRhdGUpCiAgICAgICAgIHJldHVybiBOTzsKIAog
ICAgIERhdGVUb0VudHJpZXNNYXA6Oml0ZXJhdG9yIGl0ID0gX2VudHJpZXNCeURhdGUtPmZpbmQo
ZGF0ZUtleSk7Ci0gICAgTlNNdXRhYmxlQXJyYXkgKmVudHJpZXNGb3JEYXRlID0gaXQtPnNlY29u
ZC5nZXQoKTsKKyAgICBOU011dGFibGVBcnJheSAqZW50cmllc0ZvckRhdGUgPSBpdC0+dmFsdWUu
Z2V0KCk7CiAgICAgW2VudHJpZXNGb3JEYXRlIHJlbW92ZU9iamVjdElkZW50aWNhbFRvOmVudHJ5
XTsKICAgICAKICAgICAvLyByZW1vdmUgdGhpcyBkYXRlIGVudGlyZWx5IGlmIHRoZXJlIGFyZSBu
byBvdGhlciBlbnRyaWVzIG9uIGl0CkBAIC00NDAsNyArNDQwLDcgQEAgc3RhdGljIGlubGluZSBX
ZWJIaXN0b3J5RGF0ZUtleSBkYXRlS2V5KE5TVGltZUludGVydmFsIGRhdGUpCiAgICAgICAgIGRh
eXNBc1RpbWVJbnRlcnZhbHMucmVzZXJ2ZUNhcGFjaXR5KF9lbnRyaWVzQnlEYXRlLT5zaXplKCkp
OwogICAgICAgICBEYXRlVG9FbnRyaWVzTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBfZW50cmll
c0J5RGF0ZS0+ZW5kKCk7CiAgICAgICAgIGZvciAoRGF0ZVRvRW50cmllc01hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBfZW50cmllc0J5RGF0ZS0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAg
ICAgICAgICAgZGF5c0FzVGltZUludGVydmFscy5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAg
ICAgIGRheXNBc1RpbWVJbnRlcnZhbHMuYXBwZW5kKGl0LT5rZXkpOwogCiAgICAgICAgIHNvcnQo
ZGF5c0FzVGltZUludGVydmFscy5iZWdpbigpLCBkYXlzQXNUaW1lSW50ZXJ2YWxzLmVuZCgpKTsK
ICAgICAgICAgc2l6ZV90IGNvdW50ID0gZGF5c0FzVGltZUludGVydmFscy5zaXplKCk7CkBAIC04
OTcsNyArODk3LDcgQEAgV2ViSGlzdG9yeVdyaXRlcjo6V2ViSGlzdG9yeVdyaXRlcihEYXRlVG9F
bnRyaWVzTWFwKiBlbnRyaWVzQnlEYXRlKQogICAgIG1fZGF0ZUtleXMucmVzZXJ2ZUNhcGFjaXR5
KG1fZW50cmllc0J5RGF0ZS0+c2l6ZSgpKTsKICAgICBEYXRlVG9FbnRyaWVzTWFwOjpjb25zdF9p
dGVyYXRvciBlbmQgPSBtX2VudHJpZXNCeURhdGUtPmVuZCgpOwogICAgIGZvciAoRGF0ZVRvRW50
cmllc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2VudHJpZXNCeURhdGUtPmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkKLSAgICAgICAgbV9kYXRlS2V5cy5hcHBlbmQoaXQtPmZpcnN0KTsKKyAg
ICAgICAgbV9kYXRlS2V5cy5hcHBlbmQoaXQtPmtleSk7CiAgICAgc29ydChtX2RhdGVLZXlzLmJl
Z2luKCksIG1fZGF0ZUtleXMuZW5kKCkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tIGIvU291cmNlL1dlYktpdC9tYWMvTWlzYy9X
ZWJDb3JlU3RhdGlzdGljcy5tbQppbmRleCAyOTZkZDZiMjViZDhiZGI3N2EzYzY4MGUxMzI0ZTVi
Mzk3ZDI2NmMzLi44ZGU2MzEzOWI3NzQzNzZiYmQxZjdjMTEwNmY2ZWVkYmRkM2U1YjI3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tCisrKyBi
L1NvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW0KQEAgLTg5LDggKzg5
LDggQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAgICAgT3duUHRyPFR5cGVDb3VudFNldD4g
Y291bnRzKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5wcm90ZWN0ZWRP
YmplY3RUeXBlQ291bnRzKCkpOwogICAgIEhhc2hDb3VudGVkU2V0PGNvbnN0IGNoYXIqPjo6aXRl
cmF0b3IgZW5kID0gY291bnRzLT5lbmQoKTsKICAgICBmb3IgKEhhc2hDb3VudGVkU2V0PGNvbnN0
IGNoYXIqPjo6aXRlcmF0b3IgaXQgPSBjb3VudHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0LT5zZWNvbmQ7ICsraSkKLSAgICAg
ICAgICAgIFtyZXN1bHQgYWRkT2JqZWN0OltOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzpp
dC0+Zmlyc3RdXTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0LT52YWx1ZTsg
KytpKQorICAgICAgICAgICAgW3Jlc3VsdCBhZGRPYmplY3Q6W05TU3RyaW5nIHN0cmluZ1dpdGhV
VEY4U3RyaW5nOml0LT5rZXldXTsKICAgICAKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMTA0
LDggKzEwNCw4IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogICAgIE93blB0cjxUeXBlQ291
bnRTZXQ+IGNvdW50cyhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAub2Jq
ZWN0VHlwZUNvdW50cygpKTsKICAgICBIYXNoQ291bnRlZFNldDxjb25zdCBjaGFyKj46Oml0ZXJh
dG9yIGVuZCA9IGNvdW50cy0+ZW5kKCk7CiAgICAgZm9yIChIYXNoQ291bnRlZFNldDxjb25zdCBj
aGFyKj46Oml0ZXJhdG9yIGl0ID0gY291bnRzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdC0+c2Vjb25kOyArK2kpCi0gICAgICAg
ICAgICBbcmVzdWx0IGFkZE9iamVjdDpbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6aXQt
PmZpcnN0XV07CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdC0+dmFsdWU7ICsr
aSkKKyAgICAgICAgICAgIFtyZXN1bHQgYWRkT2JqZWN0OltOU1N0cmluZyBzdHJpbmdXaXRoVVRG
OFN0cmluZzppdC0+a2V5XV07CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdE1h
bmFnZXIubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdp
bkhvc3RNYW5hZ2VyLm1tCmluZGV4IGU0OWQ1MGY0YmNiZDVjMWNiY2I4MzdjOGYyOTQ2M2Q0ZGMy
ZjQ5ZjYuLjNjZTA4OWJlZDI3YTRjMjNhZjIzYzc1MDkyNGE5ZDg5YWMwYzcxMWMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdE1h
bmFnZXIubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQ
bHVnaW5Ib3N0TWFuYWdlci5tbQpAQCAtNzMsNyArNzMsNyBAQCBOZXRzY2FwZVBsdWdpbkhvc3RQ
cm94eSogTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlcjo6aG9zdEZvclBsdWdpbihjb25zdCBXVEY6
OlN0cgogICAgIAogICAgIC8vIFRoZSBwYWNrYWdlIHdhcyBhbHJlYWR5IGluIHRoZSBtYXAsIGp1
c3QgcmV0dXJuIGl0LgogICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJldHVy
biByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRv
ci0+dmFsdWU7CiAgICAgICAgIAogICAgIG1hY2hfcG9ydF90IGNsaWVudFBvcnQ7CiAgICAgaWYg
KG1hY2hfcG9ydF9hbGxvY2F0ZShtYWNoX3Rhc2tfc2VsZigpLCBNQUNIX1BPUlRfUklHSFRfUkVD
RUlWRSwgJmNsaWVudFBvcnQpICE9IEtFUk5fU1VDQ0VTUykgewpAQCAtOTUsNyArOTUsNyBAQCBO
ZXRzY2FwZVBsdWdpbkhvc3RQcm94eSogTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlcjo6aG9zdEZv
clBsdWdpbihjb25zdCBXVEY6OlN0cgogICAgIAogICAgIE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5
KiBob3N0UHJveHkgPSBuZXcgTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkoY2xpZW50UG9ydCwgcGx1
Z2luSG9zdFBvcnQsIHBsdWdpbkhvc3RQU04sIHNob3VsZENhY2hlTWlzc2luZ1Byb3BlcnRpZXNB
bmRNZXRob2RzKTsKICAgICAKLSAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IGhvc3RQcm94
eTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gaG9zdFByb3h5OwogICAgIAogICAgIHJl
dHVybiBob3N0UHJveHk7CiB9CkBAIC0yMDQsNyArMjA0LDcgQEAgdm9pZCBOZXRzY2FwZVBsdWdp
bkhvc3RNYW5hZ2VyOjpwbHVnaW5Ib3N0RGllZChOZXRzY2FwZVBsdWdpbkhvc3RQcm94eSogcGx1
Z2luSG8KIAogICAgIC8vIFRoaXMgaGFzIE8obikgY29tcGxleGl0eSBidXQgdGhlIG51bWJlciBv
ZiBhY3RpdmUgcGx1Zy1pbiBob3N0cyBpcyB2ZXJ5IHNtYWxsIHNvIGl0IHNob3VsZG4ndCBtYXR0
ZXIuCiAgICAgZm9yIChQbHVnaW5Ib3N0TWFwOjppdGVyYXRvciBpdCA9IG1fcGx1Z2luSG9zdHMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kID09IHBs
dWdpbkhvc3QpIHsKKyAgICAgICAgaWYgKGl0LT52YWx1ZSA9PSBwbHVnaW5Ib3N0KSB7CiAgICAg
ICAgICAgICBtX3BsdWdpbkhvc3RzLnJlbW92ZShpdCk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KQEAgLTI4Niw3ICsyODYsNyBAQCB2b2lkIE5ldHNjYXBlUGx1Z2luSG9zdE1hbmFn
ZXI6OmRpZENyZWF0ZVdpbmRvdygpCiAgICAgLy8gU2VlIGlmIGFueSBvZiBvdXIgaG9zdHMgYXJl
IGluIGZ1bGwtc2NyZWVuIG1vZGUuCiAgICAgUGx1Z2luSG9zdE1hcDo6aXRlcmF0b3IgZW5kID0g
bV9wbHVnaW5Ib3N0cy5lbmQoKTsKICAgICBmb3IgKFBsdWdpbkhvc3RNYXA6Oml0ZXJhdG9yIGl0
ID0gbV9wbHVnaW5Ib3N0cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgTmV0
c2NhcGVQbHVnaW5Ib3N0UHJveHkqIGhvc3RQcm94eSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIE5l
dHNjYXBlUGx1Z2luSG9zdFByb3h5KiBob3N0UHJveHkgPSBpdC0+dmFsdWU7CiAgICAgICAgIAog
ICAgICAgICBpZiAoIWhvc3RQcm94eS0+aXNNZW51QmFyVmlzaWJsZSgpKSB7CiAgICAgICAgICAg
ICAvLyBNYWtlIG91cnNlbHZlcyB0aGUgZnJvbnQgcHJvY2Vzcy4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdFByb3h5Lm1tIGIv
U291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHku
bW0KaW5kZXggYWY2ZjJiZTk5NjljYjExY2IzM2E1NjMxN2ZkZGE4YzJjZjYxY2Y1ZS4uMGZiMjZk
MGE5Yjg0NzUyMjZiZWZjYzM0OTY4YjlmNTA2ZWI5MTViYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkubW0KKysrIGIv
U291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHku
bW0KQEAgLTE0NCw3ICsxNDQsNyBAQCB2b2lkIE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5OjpwbHVn
aW5Ib3N0RGllZCgpCiAgIAogICAgIFBsdWdpbkluc3RhbmNlTWFwOjpjb25zdF9pdGVyYXRvciBl
bmQgPSBpbnN0YW5jZXMuZW5kKCk7CiAgICAgZm9yIChQbHVnaW5JbnN0YW5jZU1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBpbnN0YW5jZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAg
ICBpdC0+c2Vjb25kLT5wbHVnaW5Ib3N0RGllZCgpOworICAgICAgICBpdC0+dmFsdWUtPnBsdWdp
bkhvc3REaWVkKCk7CiAgICAgCiAgICAgTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlcjo6c2hhcmVk
KCkucGx1Z2luSG9zdERpZWQodGhpcyk7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW0gYi9Tb3Vy
Y2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHku
bW0KaW5kZXggNGE3ZDNkMjY2MjEwYzJkY2NkZjYxMTdiNzRmYzJiMjlkZWE2YWE3OC4uYWVhNTdm
ZTJlZmVlZWFlNGIxZTM2ZjgzYWE2Y2FjODZjOWZlOTBkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFu
Y2VQcm94eS5tbQpAQCAtMTQ1LDcgKzE0NSw3IEBAIHVpbnQzMl90IE5ldHNjYXBlUGx1Z2luSW5z
dGFuY2VQcm94eTo6TG9jYWxPYmplY3RNYXA6OmlkRm9yT2JqZWN0KEpTR2xvYmFsRGF0YSYKICAg
ICAKICAgICBIYXNoTWFwPEpTQzo6SlNPYmplY3QqLCBwYWlyPHVpbnQzMl90LCB1aW50MzJfdD4g
Pjo6aXRlcmF0b3IgaXRlciA9IG1fanNPYmplY3RUb0lETWFwLmZpbmQob2JqZWN0KTsKICAgICBp
ZiAoaXRlciAhPSBtX2pzT2JqZWN0VG9JRE1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0ZXIt
PnNlY29uZC5maXJzdDsKKyAgICAgICAgcmV0dXJuIGl0ZXItPnZhbHVlLmZpcnN0OwogICAgIAog
ICAgIGRvIHsKICAgICAgICAgb2JqZWN0SUQgPSArK21fb2JqZWN0SURDb3VudGVyOwpAQCAtMTYy
LDcgKzE2Miw3IEBAIHZvaWQgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpMb2NhbE9iamVj
dE1hcDo6cmV0YWluKEpTQzo6SlNPYmplY3QqIG9iamVjdCkKICAgICBIYXNoTWFwPEpTQzo6SlNP
YmplY3QqLCBwYWlyPHVpbnQzMl90LCB1aW50MzJfdD4gPjo6aXRlcmF0b3IgaXRlciA9IG1fanNP
YmplY3RUb0lETWFwLmZpbmQob2JqZWN0KTsKICAgICBBU1NFUlQoaXRlciAhPSBtX2pzT2JqZWN0
VG9JRE1hcC5lbmQoKSk7CiAKLSAgICBpdGVyLT5zZWNvbmQuc2Vjb25kID0gaXRlci0+c2Vjb25k
LnNlY29uZCArIDE7CisgICAgaXRlci0+dmFsdWUuc2Vjb25kID0gaXRlci0+dmFsdWUuc2Vjb25k
ICsgMTsKIH0KIAogdm9pZCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OkxvY2FsT2JqZWN0
TWFwOjpyZWxlYXNlKEpTQzo6SlNPYmplY3QqIG9iamVjdCkKQEAgLTE3MCwxMCArMTcwLDEwIEBA
IHZvaWQgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpMb2NhbE9iamVjdE1hcDo6cmVsZWFz
ZShKU0M6OkpTT2JqZWN0KiBvYmplY3QpCiAgICAgSGFzaE1hcDxKU0M6OkpTT2JqZWN0KiwgcGFp
cjx1aW50MzJfdCwgdWludDMyX3Q+ID46Oml0ZXJhdG9yIGl0ZXIgPSBtX2pzT2JqZWN0VG9JRE1h
cC5maW5kKG9iamVjdCk7CiAgICAgQVNTRVJUKGl0ZXIgIT0gbV9qc09iamVjdFRvSURNYXAuZW5k
KCkpOwogCi0gICAgQVNTRVJUKGl0ZXItPnNlY29uZC5zZWNvbmQgPiAwKTsKLSAgICBpdGVyLT5z
ZWNvbmQuc2Vjb25kID0gaXRlci0+c2Vjb25kLnNlY29uZCAtIDE7Ci0gICAgaWYgKCFpdGVyLT5z
ZWNvbmQuc2Vjb25kKSB7Ci0gICAgICAgIG1faWRUb0pTT2JqZWN0TWFwLnJlbW92ZShpdGVyLT5z
ZWNvbmQuZmlyc3QpOworICAgIEFTU0VSVChpdGVyLT52YWx1ZS5zZWNvbmQgPiAwKTsKKyAgICBp
dGVyLT52YWx1ZS5zZWNvbmQgPSBpdGVyLT52YWx1ZS5zZWNvbmQgLSAxOworICAgIGlmICghaXRl
ci0+dmFsdWUuc2Vjb25kKSB7CisgICAgICAgIG1faWRUb0pTT2JqZWN0TWFwLnJlbW92ZShpdGVy
LT52YWx1ZS5maXJzdCk7CiAgICAgICAgIG1fanNPYmplY3RUb0lETWFwLnJlbW92ZShpdGVyKTsK
ICAgICB9CiB9CkBAIC0xOTcsMTAgKzE5NywxMCBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFu
Y2VQcm94eTo6TG9jYWxPYmplY3RNYXA6OmZvcmdldCh1aW50MzJfdCBvYmplY3RJRCkKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgSGFzaE1hcDxKU0M6OkpTT2JqZWN0KiwgcGFp
cjx1aW50MzJfdCwgdWludDMyX3Q+ID46Oml0ZXJhdG9yIHJJdGVyID0gbV9qc09iamVjdFRvSURN
YXAuZmluZChpdGVyLT5zZWNvbmQuZ2V0KCkpOworICAgIEhhc2hNYXA8SlNDOjpKU09iamVjdCos
IHBhaXI8dWludDMyX3QsIHVpbnQzMl90PiA+OjppdGVyYXRvciBySXRlciA9IG1fanNPYmplY3RU
b0lETWFwLmZpbmQoaXRlci0+dmFsdWUuZ2V0KCkpOwogCiAgICAgLy8gSWYgdGhlIG9iamVjdCBp
cyBiZWluZyBzZW50IHRvIHBsdWctaW4gcmlnaHQgbm93LCB0aGVuIGl0J3Mgbm90IHRoZSB0aW1l
IHRvIGZvcmdldC4KLSAgICBpZiAockl0ZXItPnNlY29uZC5zZWNvbmQgIT0gMSkKKyAgICBpZiAo
ckl0ZXItPnZhbHVlLnNlY29uZCAhPSAxKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBt
X2pzT2JqZWN0VG9JRE1hcC5yZW1vdmUockl0ZXIpOwpAQCAtMzMwLDcgKzMzMCw3IEBAIHZvaWQg
TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpkZXN0cm95KCkKICAgICAKICAgICBGcmFtZUxv
YWRNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fcGVuZGluZ0ZyYW1lTG9hZHMuZW5kKCk7CiAgICAgZm9y
IChGcmFtZUxvYWRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wZW5kaW5nRnJhbWVMb2Fkcy5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIFsoaXQtPmZpcnN0KSBfc2V0SW50ZXJuYWxMb2Fk
RGVsZWdhdGU6bmlsXTsKKyAgICAgICAgWyhpdC0+a2V5KSBfc2V0SW50ZXJuYWxMb2FkRGVsZWdh
dGU6bmlsXTsKIAogICAgIF9XS1BIRGVzdHJveVBsdWdpbkluc3RhbmNlKG1fcGx1Z2luSG9zdFBy
b3h5LT5wb3J0KCksIG1fcGx1Z2luSUQsIHJlcXVlc3RJRCk7CiAgCkBAIC02NzgsNyArNjc4LDcg
QEAgdm9pZCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OndlYkZyYW1lRGlkRmluaXNoTG9h
ZFdpdGhSZWFzb24oV2ViRnJhbWUqIHdlYkYKICAgICBGcmFtZUxvYWRNYXA6Oml0ZXJhdG9yIGl0
ID0gbV9wZW5kaW5nRnJhbWVMb2Fkcy5maW5kKHdlYkZyYW1lKTsKICAgICBBU1NFUlQoaXQgIT0g
bV9wZW5kaW5nRnJhbWVMb2Fkcy5lbmQoKSk7CiAgICAgICAgIAotICAgIFBsdWdpblJlcXVlc3Qq
IHBsdWdpblJlcXVlc3QgPSBpdC0+c2Vjb25kLmdldCgpOworICAgIFBsdWdpblJlcXVlc3QqIHBs
dWdpblJlcXVlc3QgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgX1dLUEhMb2FkVVJMTm90aWZ5KG1f
cGx1Z2luSG9zdFByb3h5LT5wb3J0KCksIG1fcGx1Z2luSUQsIHBsdWdpblJlcXVlc3QtPnJlcXVl
c3RJRCgpLCByZWFzb24pOwogIAogICAgIG1fcGVuZGluZ0ZyYW1lTG9hZHMucmVtb3ZlKGl0KTsK
QEAgLTE2MjgsNyArMTYyOCw3IEBAIHZvaWQgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Ojpj
YW5jZWxDaGVja0lmQWxsb3dlZFRvTG9hZFVSTCh1aW50MzJfdCBjaGVja0lECiAgICAgaWYgKGl0
ID09IG1fdXJsQ2hlY2tzLmVuZCgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgV2ViUGx1
Z2luQ29udGFpbmVyQ2hlY2sgKmNoZWNrID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICBXZWJQbHVn
aW5Db250YWluZXJDaGVjayAqY2hlY2sgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgW2NoZWNrIGNh
bmNlbF07CiAgICAgbV91cmxDaGVja3MucmVtb3ZlKGl0KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL1Byb3h5SW5zdGFuY2UubW0gYi9Tb3VyY2UvV2Vi
S2l0L21hYy9QbHVnaW5zL0hvc3RlZC9Qcm94eUluc3RhbmNlLm1tCmluZGV4IDg5OGM1ZTIxNDA2
OWZjOWJiZmQzNDljNWI0YzZiYThmNzM1NWUyNzAuLjU5OGVlOGYzN2IwMTAxYTU2M2RhOWM0NmQ1
YmQ1YTQ1ZDU1Yjc3MWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9z
dGVkL1Byb3h5SW5zdGFuY2UubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0
ZWQvUHJveHlJbnN0YW5jZS5tbQpAQCAtMzU5LDggKzM1OSw4IEBAIE1ldGhvZExpc3QgUHJveHlJ
bnN0YW5jZTo6bWV0aG9kc05hbWVkKFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiAgICAgTWV0
aG9kTWFwOjppdGVyYXRvciBleGlzdGluZ01hcEVudHJ5ID0gbV9tZXRob2RzLmZpbmQobmFtZS5p
bXBsKCkpOwogICAgIGlmIChleGlzdGluZ01hcEVudHJ5ICE9IG1fbWV0aG9kcy5lbmQoKSkgewog
ICAgICAgICBNZXRob2RMaXN0IG1ldGhvZExpc3Q7Ci0gICAgICAgIGlmIChleGlzdGluZ01hcEVu
dHJ5LT5zZWNvbmQpCi0gICAgICAgICAgICBtZXRob2RMaXN0LmFwcGVuZChleGlzdGluZ01hcEVu
dHJ5LT5zZWNvbmQpOworICAgICAgICBpZiAoZXhpc3RpbmdNYXBFbnRyeS0+dmFsdWUpCisgICAg
ICAgICAgICBtZXRob2RMaXN0LmFwcGVuZChleGlzdGluZ01hcEVudHJ5LT52YWx1ZSk7CiAgICAg
ICAgIHJldHVybiBtZXRob2RMaXN0OwogICAgIH0KICAgICAKQEAgLTM4MiwxMSArMzgyLDExIEBA
IE1ldGhvZExpc3QgUHJveHlJbnN0YW5jZTo6bWV0aG9kc05hbWVkKFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUpCiAgICAgLy8gQWRkIGEgbmV3IGVudHJ5IHRvIHRoZSBtYXAgdW5sZXNzIGFuIGVu
dHJ5IHdhcyBhZGRlZCB3aGlsZSB3ZSB3ZXJlIGluIHdhaXRGb3JSZXBseS4KICAgICBNZXRob2RN
YXA6OkFkZFJlc3VsdCBtYXBBZGRSZXN1bHQgPSBtX21ldGhvZHMuYWRkKG5hbWUuaW1wbCgpLCAw
KTsKICAgICBpZiAobWFwQWRkUmVzdWx0LmlzTmV3RW50cnkgJiYgcmVwbHktPm1fcmVzdWx0KQot
ICAgICAgICBtYXBBZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IG5ldyBQcm94eU1ldGhvZCht
ZXRob2ROYW1lKTsKKyAgICAgICAgbWFwQWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IG5ldyBQ
cm94eU1ldGhvZChtZXRob2ROYW1lKTsKIAogICAgIE1ldGhvZExpc3QgbWV0aG9kTGlzdDsKLSAg
ICBpZiAobWFwQWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpCi0gICAgICAgIG1ldGhvZExpc3Qu
YXBwZW5kKG1hcEFkZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKKyAgICBpZiAobWFwQWRkUmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZSkKKyAgICAgICAgbWV0aG9kTGlzdC5hcHBlbmQobWFwQWRkUmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZSk7CiAgICAgcmV0dXJuIG1ldGhvZExpc3Q7CiB9CiAKQEAgLTQw
Miw3ICs0MDIsNyBAQCBGaWVsZCogUHJveHlJbnN0YW5jZTo6ZmllbGROYW1lZChQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lKQogICAgIC8vIElmIHdlIGFscmVhZHkgaGF2ZSBhbiBlbnRyeSBpbiB0
aGUgbWFwLCB1c2UgaXQuCiAgICAgRmllbGRNYXA6Oml0ZXJhdG9yIGV4aXN0aW5nTWFwRW50cnkg
PSBtX2ZpZWxkcy5maW5kKG5hbWUuaW1wbCgpKTsKICAgICBpZiAoZXhpc3RpbmdNYXBFbnRyeSAh
PSBtX2ZpZWxkcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGV4aXN0aW5nTWFwRW50cnktPnNlY29u
ZDsKKyAgICAgICAgcmV0dXJuIGV4aXN0aW5nTWFwRW50cnktPnZhbHVlOwogICAgIAogICAgIHVp
bnQ2NF90IGlkZW50aWZpZXIgPSByZWludGVycHJldF9jYXN0PHVpbnQ2NF90PihfTlBOX0dldFN0
cmluZ0lkZW50aWZpZXIobmFtZS5hc2NpaSgpLmRhdGEoKSkpOwogICAgIHVpbnQzMl90IHJlcXVl
c3RJRCA9IG1faW5zdGFuY2VQcm94eS0+bmV4dFJlcXVlc3RJRCgpOwpAQCAtNDIyLDggKzQyMiw4
IEBAIEZpZWxkKiBQcm94eUluc3RhbmNlOjpmaWVsZE5hbWVkKFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUpCiAgICAgLy8gQWRkIGEgbmV3IGVudHJ5IHRvIHRoZSBtYXAgdW5sZXNzIGFuIGVudHJ5
IHdhcyBhZGRlZCB3aGlsZSB3ZSB3ZXJlIGluIHdhaXRGb3JSZXBseS4KICAgICBGaWVsZE1hcDo6
QWRkUmVzdWx0IG1hcEFkZFJlc3VsdCA9IG1fZmllbGRzLmFkZChuYW1lLmltcGwoKSwgMCk7CiAg
ICAgaWYgKG1hcEFkZFJlc3VsdC5pc05ld0VudHJ5ICYmIHJlcGx5LT5tX3Jlc3VsdCkKLSAgICAg
ICAgbWFwQWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBuZXcgUHJveHlGaWVsZChpZGVudGlm
aWVyKTsKLSAgICByZXR1cm4gbWFwQWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAg
IG1hcEFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBuZXcgUHJveHlGaWVsZChpZGVudGlmaWVy
KTsKKyAgICByZXR1cm4gbWFwQWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIAogSlNDOjpK
U1ZhbHVlIFByb3h5SW5zdGFuY2U6OmZpZWxkVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBG
aWVsZCogZmllbGQpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5z
L1dlYk5ldHNjYXBlUGx1Z2luVmlldy5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2Vi
TmV0c2NhcGVQbHVnaW5WaWV3Lm1tCmluZGV4IDRlMWFhZDQ5NTI4Y2Q3ZDA4MWQ0MTM1MjQ1NGI5
Yzg1N2ZiYzI1YjcuLjZhMWViNjQwYTBkYWNmMGNjZTAxZWVkMzgxOTIzNTBiNWRjODUyZjMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5WaWV3
Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5WaWV3
Lm1tCkBAIC03MTAsNyArNzEwLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGdldE5QUmVjdChjb25z
dCBOU1JlY3QmIG5yLCBOUFJlY3QmIG5wcikKIAogICAgIEhhc2hNYXA8dWludDMyX3QsIFBsdWdp
blRpbWVyKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHRpbWVycy0+ZW5kKCk7CiAgICAgZm9yIChI
YXNoTWFwPHVpbnQzMl90LCBQbHVnaW5UaW1lcio+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHRpbWVy
cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFBsdWdpblRpbWVyKiB0aW1l
ciA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFBsdWdpblRpbWVyKiB0aW1lciA9IGl0LT52YWx1ZTsK
ICAgICAgICAgdGltZXItPnN0b3AoKTsKICAgICB9ICAgIAogfQpAQCAtNzI4LDcgKzcyOCw3IEBA
IHN0YXRpYyBpbmxpbmUgdm9pZCBnZXROUFJlY3QoY29uc3QgTlNSZWN0JiBuciwgTlBSZWN0JiBu
cHIpCiAgICAgCiAgICAgSGFzaE1hcDx1aW50MzJfdCwgUGx1Z2luVGltZXIqPjo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gdGltZXJzLT5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8dWludDMyX3QsIFBs
dWdpblRpbWVyKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdGltZXJzLT5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKLSAgICAgICAgUGx1Z2luVGltZXIqIHRpbWVyID0gaXQtPnNlY29uZDsKKyAg
ICAgICAgUGx1Z2luVGltZXIqIHRpbWVyID0gaXQtPnZhbHVlOwogICAgICAgICBBU1NFUlQoIXRp
bWVyLT5pc0FjdGl2ZSgpKTsKICAgICAgICAgdGltZXItPnN0YXJ0KF9pc0NvbXBsZXRlbHlPYnNj
dXJlZCk7CiAgICAgfSAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVT
dXBwb3J0L1dlYk5vdGlmaWNhdGlvbkNsaWVudC5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNv
cmVTdXBwb3J0L1dlYk5vdGlmaWNhdGlvbkNsaWVudC5tbQppbmRleCBlMmEwNWM2YThiYWMyNjFk
ZTVmZjVhZDAwM2NjOGZjMWFhZWY4MmNmLi5mMGM0OWE2Y2NjNDUwZTY0MWVjMTI2NTI3NDNiYzZj
OTA4ZmJkMjZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9X
ZWJOb3RpZmljYXRpb25DbGllbnQubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1
cHBvcnQvV2ViTm90aWZpY2F0aW9uQ2xpZW50Lm1tCkBAIC05MCw3ICs5MCw3IEBAIGJvb2wgV2Vi
Tm90aWZpY2F0aW9uQ2xpZW50OjpzaG93KE5vdGlmaWNhdGlvbiogbm90aWZpY2F0aW9uKQogICAg
IG1fbm90aWZpY2F0aW9uTWFwLnNldChub3RpZmljYXRpb24sIHdlYk5vdGlmaWNhdGlvbik7CiAK
ICAgICBOb3RpZmljYXRpb25Db250ZXh0TWFwOjppdGVyYXRvciBpdCA9IG1fbm90aWZpY2F0aW9u
Q29udGV4dE1hcC5hZGQobm90aWZpY2F0aW9uLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIFZl
Y3RvcjxSZXRhaW5QdHI8V2ViTm90aWZpY2F0aW9uPiA+KCkpLml0ZXJhdG9yOwotICAgIGl0LT5z
ZWNvbmQuYXBwZW5kKHdlYk5vdGlmaWNhdGlvbik7CisgICAgaXQtPnZhbHVlLmFwcGVuZCh3ZWJO
b3RpZmljYXRpb24pOwogCiAgICAgW1ttX3dlYlZpZXcgX25vdGlmaWNhdGlvblByb3ZpZGVyXSBz
aG93Tm90aWZpY2F0aW9uOndlYk5vdGlmaWNhdGlvbi5nZXQoKSBmcm9tV2ViVmlldzptX3dlYlZp
ZXddOwogICAgIHJldHVybiB0cnVlOwpAQCAtMTIwLDcgKzEyMCw3IEBAIHZvaWQgV2ViTm90aWZp
Y2F0aW9uQ2xpZW50OjpjbGVhck5vdGlmaWNhdGlvbnMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCkKICAgICBpZiAoaXQgPT0gbV9ub3RpZmljYXRpb25Db250ZXh0TWFwLmVuZCgpKQog
ICAgICAgICByZXR1cm47CiAgICAgCi0gICAgVmVjdG9yPFJldGFpblB0cjxXZWJOb3RpZmljYXRp
b24+ID4mIHdlYk5vdGlmaWNhdGlvbnMgPSBpdC0+c2Vjb25kOworICAgIFZlY3RvcjxSZXRhaW5Q
dHI8V2ViTm90aWZpY2F0aW9uPiA+JiB3ZWJOb3RpZmljYXRpb25zID0gaXQtPnZhbHVlOwogICAg
IE5TTXV0YWJsZUFycmF5ICpuc0lEcyA9IFtOU011dGFibGVBcnJheSBhcnJheV07CiAgICAgc2l6
ZV90IGNvdW50ID0gd2ViTm90aWZpY2F0aW9ucy5zaXplKCk7CiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBjb3VudDsgKytpKSB7CkBAIC0xNDYsMTAgKzE0NiwxMCBAQCB2b2lkIFdlYk5vdGlm
aWNhdGlvbkNsaWVudDo6bm90aWZpY2F0aW9uT2JqZWN0RGVzdHJveWVkKE5vdGlmaWNhdGlvbiog
bm90aWZpY2F0aQogCiAgICAgTm90aWZpY2F0aW9uQ29udGV4dE1hcDo6aXRlcmF0b3IgaXQgPSBt
X25vdGlmaWNhdGlvbkNvbnRleHRNYXAuZmluZChub3RpZmljYXRpb24tPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKSk7CiAgICAgQVNTRVJUKGl0ICE9IG1fbm90aWZpY2F0aW9uQ29udGV4dE1hcC5l
bmQoKSk7Ci0gICAgc2l6ZV90IGluZGV4ID0gaXQtPnNlY29uZC5maW5kKHdlYk5vdGlmaWNhdGlv
bik7CisgICAgc2l6ZV90IGluZGV4ID0gaXQtPnZhbHVlLmZpbmQod2ViTm90aWZpY2F0aW9uKTsK
ICAgICBBU1NFUlQoaW5kZXggIT0gbm90Rm91bmQpOwotICAgIGl0LT5zZWNvbmQucmVtb3ZlKGlu
ZGV4KTsKLSAgICBpZiAoaXQtPnNlY29uZC5pc0VtcHR5KCkpCisgICAgaXQtPnZhbHVlLnJlbW92
ZShpbmRleCk7CisgICAgaWYgKGl0LT52YWx1ZS5pc0VtcHR5KCkpCiAgICAgICAgIG1fbm90aWZp
Y2F0aW9uQ29udGV4dE1hcC5yZW1vdmUoaXQpOwogCiAgICAgW1ttX3dlYlZpZXcgX25vdGlmaWNh
dGlvblByb3ZpZGVyXSBub3RpZmljYXRpb25EZXN0cm95ZWQ6d2ViTm90aWZpY2F0aW9uLmdldCgp
XTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0g
Yi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCmluZGV4IDUwNWRiNTMw
MjEwNGVhODQ4ZmI4MjAxMjdmYTI5NGIzMTZiZTA5MjEuLmI5YTAwMDZkNzlhMzQzNjBmMjk5YzNj
ODQxYmI3OTYyZjM3MmQ1OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcv
V2ViSFRNTFZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmll
dy5tbQpAQCAtMjM3Niw3ICsyMzc2LDcgQEAgc3RhdGljIFN0cmluZyBjb21tYW5kTmFtZUZvclNl
bGVjdG9yKFNFTCBzZWxlY3RvcikKICAgICBzdGF0aWMgY29uc3QgU2VsZWN0b3JOYW1lTWFwKiBl
eGNlcHRpb25NYXAgPSBjcmVhdGVTZWxlY3RvckV4Y2VwdGlvbk1hcCgpOwogICAgIFNlbGVjdG9y
TmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBleGNlcHRpb25NYXAtPmZpbmQoc2VsZWN0b3Ip
OwogICAgIGlmIChpdCAhPSBleGNlcHRpb25NYXAtPmVuZCgpKQotICAgICAgICByZXR1cm4gaXQt
PnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKIAogICAgIC8vIFJlbW92ZSB0aGUg
dHJhaWxpbmcgY29sb24uCiAgICAgLy8gTm8gbmVlZCB0byBjYXBpdGFsaXplIHRoZSBjb21tYW5k
IG5hbWUgc2luY2UgRWRpdG9yIGNvbW1hbmQgbmFtZXMgYXJlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGFn
ZS5jcHAKaW5kZXggOGU5NjMzZDE4OTdmOGIyMzFhZDMzMDI5YzFjMjRmZTExMWMxZjY2OC4uOTA5
Mzk4Nzk4MDRiMzg4OGI2NjQ5MmZlNzQ5MzU2YzIyNjcyNWEzYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3
ZWJwYWdlLmNwcApAQCAtMjI1OSw3ICsyMjU5LDcgQEAgc3RhdGljIHZvaWQgZXh0cmFjdENvbnRl
bnRUeXBlRnJvbVBsdWdpblZlY3Rvcihjb25zdCBWZWN0b3I8UGx1Z2luUGFja2FnZSo+JiBwbHUK
ICAgICAgICAgTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBtYXBfaXQgPSBw
bHVnaW5zW2ldLT5taW1lVG9EZXNjcmlwdGlvbnMoKS5iZWdpbigpOwogICAgICAgICBNSU1FVG9E
ZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIG1hcF9lbmQgPSBwbHVnaW5zW2ldLT5taW1l
VG9EZXNjcmlwdGlvbnMoKS5lbmQoKTsKICAgICAgICAgZm9yICg7IG1hcF9pdCAhPSBtYXBfZW5k
OyArK21hcF9pdCkKLSAgICAgICAgICAgICpsaXN0IDw8IG1hcF9pdC0+Zmlyc3Q7CisgICAgICAg
ICAgICAqbGlzdCA8PCBtYXBfaXQtPmtleTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvcXQvQXBpL3F3ZWJwbHVnaW5kYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0
L0FwaS9xd2VicGx1Z2luZGF0YWJhc2UuY3BwCmluZGV4IGE3YTNiNWYyYzFlODlmNDc0MzdjMDhh
OTdmY2IyOTY3ODZiZjhlNTguLmM1MzI4YzhmNjc1ZjJjNjZmN2I5YjQyMGQ2NTEzN2ZkOWY4NmI4
OTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwbHVnaW5kYXRhYmFzZS5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBsdWdpbmRhdGFiYXNlLmNwcApAQCAt
MTIyLDggKzEyMiw4IEBAIFFMaXN0PFFXZWJQbHVnaW5JbmZvOjpNaW1lVHlwZT4gUVdlYlBsdWdp
bkluZm86Om1pbWVUeXBlcygpIGNvbnN0CiAKICAgICAgICAgZm9yIChNSU1FVG9EZXNjcmlwdGlv
bnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWltZVRvRGVzY3JpcHRpb25zLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgTWltZVR5cGUgbWltZVR5cGU7Ci0gICAgICAg
ICAgICBtaW1lVHlwZS5uYW1lID0gaXQtPmZpcnN0OwotICAgICAgICAgICAgbWltZVR5cGUuZGVz
Y3JpcHRpb24gPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgbWltZVR5cGUubmFtZSA9IGl0LT5r
ZXk7CisgICAgICAgICAgICBtaW1lVHlwZS5kZXNjcmlwdGlvbiA9IGl0LT52YWx1ZTsKIAogICAg
ICAgICAgICAgUVN0cmluZ0xpc3QgZmlsZUV4dGVuc2lvbnM7CiAgICAgICAgICAgICBWZWN0b3I8
U3RyaW5nPiBleHRlbnNpb25zID0gbV9wYWNrYWdlLT5taW1lVG9FeHRlbnNpb25zKCkuZ2V0KG1p
bWVUeXBlLm5hbWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9QbGF0Zm9ybVN0cmF0ZWdpZXNRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L1BsYXRmb3JtU3RyYXRlZ2llc1F0LmNwcAppbmRleCBjZDRhYjBkNzJkODY4MTI1ZGM4NmVl
OTg3YmNjZTZlZjNhYjFhZDg5Li43ZDRiMGI3NWY5ZDJjNGU3Njc5ZGIzZDA3YjU2MTdhNDIxNDA0
YzU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BsYXRmb3Jt
U3RyYXRlZ2llc1F0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1Bs
YXRmb3JtU3RyYXRlZ2llc1F0LmNwcApAQCAtMTMzLDggKzEzMyw4IEBAIHZvaWQgUGxhdGZvcm1T
dHJhdGVnaWVzUXQ6OmdldFBsdWdpbkluZm8oY29uc3QgV2ViQ29yZTo6UGFnZSogcGFnZSwgVmVj
dG9yPFdlYkNvCiAgICAgICAgIGZvciAoTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
ICAgICAgICAgICAgIE1pbWVDbGFzc0luZm8gbWltZTsKIAotICAgICAgICAgICAgbWltZS50eXBl
ID0gaXQtPmZpcnN0OwotICAgICAgICAgICAgbWltZS5kZXNjID0gaXQtPnNlY29uZDsKKyAgICAg
ICAgICAgIG1pbWUudHlwZSA9IGl0LT5rZXk7CisgICAgICAgICAgICBtaW1lLmRlc2MgPSBpdC0+
dmFsdWU7CiAgICAgICAgICAgICBtaW1lLmV4dGVuc2lvbnMgPSBwYWNrYWdlLT5taW1lVG9FeHRl
bnNpb25zKCkuZ2V0KG1pbWUudHlwZSk7CiAKICAgICAgICAgICAgIGluZm8ubWltZXMuYXBwZW5k
KG1pbWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vQ09NUHJvcGVydHlCYWcuaCBi
L1NvdXJjZS9XZWJLaXQvd2luL0NPTVByb3BlcnR5QmFnLmgKaW5kZXggYzc2ODYzZjE1MDEyZjJl
YWRlMGRjZTE1ZmRkYjczOWJmYmMyNzljMy4uOGU4NGU0NzQwYWEzYTk4NjM1OTRiZWRjZWNlOGUz
NzEyYWQ0YTJmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vQ09NUHJvcGVydHlCYWcu
aAorKysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9DT01Qcm9wZXJ0eUJhZy5oCkBAIC0xNDcsOSArMTQ3
LDkgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBDT01Qcm9wZXJ0eUJhZzxWYWx1ZVR5cGUs
IEtleVR5cGUsIEhhc2hUeXBlPjo6UmVhZChMUEMKIAogICAgIFZBUlRZUEUgcmVxdWVzdGVkVHlw
ZSA9IFZfVlQocFZhcik7CiAgICAgVl9WVChwVmFyKSA9IFZUX0VNUFRZOwotICAgIENPTVZhcmlh
bnRTZXR0ZXI8VmFsdWVUeXBlPjo6c2V0VmFyaWFudChwVmFyLCBpdC0+c2Vjb25kKTsKKyAgICBD
T01WYXJpYW50U2V0dGVyPFZhbHVlVHlwZT46OnNldFZhcmlhbnQocFZhciwgaXQtPnZhbHVlKTsK
IAotICAgIGlmIChyZXF1ZXN0ZWRUeXBlICE9IENPTVZhcmlhbnRTZXR0ZXI8VmFsdWVUeXBlPjo6
dmFyaWFudFR5cGUoaXQtPnNlY29uZCkgJiYgcmVxdWVzdGVkVHlwZSAhPSBWVF9FTVBUWSkKKyAg
ICBpZiAocmVxdWVzdGVkVHlwZSAhPSBDT01WYXJpYW50U2V0dGVyPFZhbHVlVHlwZT46OnZhcmlh
bnRUeXBlKGl0LT52YWx1ZSkgJiYgcmVxdWVzdGVkVHlwZSAhPSBWVF9FTVBUWSkKICAgICAgICAg
cmV0dXJuIDo6VmFyaWFudENoYW5nZVR5cGUocFZhciwgcFZhciwgVkFSSUFOVF9OT1VTRVJPVkVS
UklERSB8IFZBUklBTlRfQUxQSEFCT09MLCByZXF1ZXN0ZWRUeXBlKTsKIAogICAgIHJldHVybiBT
X09LOwpAQCAtMjE3LDEyICsyMTcsMTIgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBDT01Q
cm9wZXJ0eUJhZzxWYWx1ZVR5cGUsIEtleVR5cGUsIEhhc2hUeXBlPjo6R2V0UHJvcGUKICAgICAg
ICAgLy9wUHJvcEJhZ1tqXS5jbHNpZDsgICAgLy8gKENMU0lEKSBDTFNJRCBvZiB0aGUgb2JqZWN0
LiBUaGlzIG1lbWJlciBpcyB2YWxpZCBvbmx5IGlmIGR3VHlwZSBpcyBQUk9QQkFHMl9UWVBFX09C
SkVDVC4KIAogICAgICAgICBwUHJvcEJhZ1tqXS5kd1R5cGUgPSBQUk9QQkFHMl9UWVBFX0RBVEE7
Ci0gICAgICAgIHBQcm9wQmFnW2pdLnZ0ID0gQ09NVmFyaWFudFNldHRlcjxWYWx1ZVR5cGU+Ojp2
YXJpYW50VHlwZShjdXJyZW50LT5zZWNvbmQpOworICAgICAgICBwUHJvcEJhZ1tqXS52dCA9IENP
TVZhcmlhbnRTZXR0ZXI8VmFsdWVUeXBlPjo6dmFyaWFudFR5cGUoY3VycmVudC0+dmFsdWUpOwog
ICAgICAgICBwUHJvcEJhZ1tqXS5kd0hpbnQgPSBpUHJvcGVydHkgKyBqOwotICAgICAgICBwUHJv
cEJhZ1tqXS5wc3RyTmFtZSA9IChMUE9MRVNUUilDb1Rhc2tNZW1BbGxvYyhzaXplb2Yod2NoYXJf
dCkqKGN1cnJlbnQtPmZpcnN0Lmxlbmd0aCgpKzEpKTsKKyAgICAgICAgcFByb3BCYWdbal0ucHN0
ck5hbWUgPSAoTFBPTEVTVFIpQ29UYXNrTWVtQWxsb2Moc2l6ZW9mKHdjaGFyX3QpKihjdXJyZW50
LT5rZXkubGVuZ3RoKCkrMSkpOwogICAgICAgICBpZiAoIXBQcm9wQmFnW2pdLnBzdHJOYW1lKQog
ICAgICAgICAgICAgcmV0dXJuIEVfT1VUT0ZNRU1PUlk7Ci0gICAgICAgIHdjc2NweV9zKHBQcm9w
QmFnW2pdLnBzdHJOYW1lLCBjdXJyZW50LT5maXJzdC5sZW5ndGgoKSsxLCBzdGF0aWNfY2FzdDxT
dHJpbmc+KGN1cnJlbnQtPmZpcnN0KS5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpKTsK
KyAgICAgICAgd2NzY3B5X3MocFByb3BCYWdbal0ucHN0ck5hbWUsIGN1cnJlbnQtPmtleS5sZW5n
dGgoKSsxLCBzdGF0aWNfY2FzdDxTdHJpbmc+KGN1cnJlbnQtPmtleSkuY2hhcmFjdGVyc1dpdGhO
dWxsVGVybWluYXRpb24oKSk7CiAgICAgICAgICsrKnBjUHJvcGVydGllczsKICAgICB9CiAgICAg
cmV0dXJuIFNfT0s7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3RhdGlz
dGljcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3RhdGlzdGljcy5jcHAKaW5kZXgg
YzFjYTlmMjE0ZjI0OWMwYTQ5ZjFmY2IxMjJmMDZhZDM0OTNiNGIxOS4uMmYyMmIwM2M2MjI1MDAy
YWUyMTljYTBmNDViYTQ3ZDI5ODBjMzdhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4v
V2ViQ29yZVN0YXRpc3RpY3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdGF0
aXN0aWNzLmNwcApAQCAtMTQ1LDcgKzE0NSw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUg
V2ViQ29yZVN0YXRpc3RpY3M6OmphdmFTY3JpcHRQcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzCiAg
ICAgSXRlcmF0b3IgZW5kID0ganNPYmplY3RUeXBlTmFtZXMtPmVuZCgpOwogICAgIEhhc2hNYXA8
U3RyaW5nLCBpbnQ+IHR5cGVDb3VudE1hcDsKICAgICBmb3IgKEl0ZXJhdG9yIGN1cnJlbnQgPSBq
c09iamVjdFR5cGVOYW1lcy0+YmVnaW4oKTsgY3VycmVudCAhPSBlbmQ7ICsrY3VycmVudCkKLSAg
ICAgICAgdHlwZUNvdW50TWFwLnNldChjdXJyZW50LT5maXJzdCwgY3VycmVudC0+c2Vjb25kKTsK
KyAgICAgICAgdHlwZUNvdW50TWFwLnNldChjdXJyZW50LT5rZXksIGN1cnJlbnQtPnZhbHVlKTsK
IAogICAgIENPTVB0cjxJUHJvcGVydHlCYWcyPiByZXN1bHRzKEFkb3B0Q09NLCBDT01Qcm9wZXJ0
eUJhZzxpbnQ+OjpjcmVhdGVJbnN0YW5jZSh0eXBlQ291bnRNYXApKTsKICAgICByZXN1bHRzLmNv
cHlSZWZUbyh0eXBlTmFtZXNBbmRDb3VudHMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93
aW4vV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcCBiL1NvdXJjZS9XZWJL
aXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAKaW5kZXggMjMw
ZjMzMjNmNTQyOTFkMDFlMTQxOTgxNzhmYTIxNmE0OGMwY2Y1Yi4uZjEzMGY3NmJkMmE2NzY5N2Fk
ZTdhMzY3ODg0NTI0M2E5ZjZhNzFhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vV2Vi
Q29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCkBAIC05Myw4ICs5
Myw4IEBAIHZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpnZXRQbHVnaW5JbmZvKGNvbnN0IFdl
YkNvcmU6OlBhZ2UqLCBWZWN0b3I8V2ViQ29yZTo6CiAgICAgICAgIGZvciAoTUlNRVRvRGVzY3Jp
cHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIE1pbWVDbGFzc0luZm8gbWltZTsKIAot
ICAgICAgICAgICAgbWltZS50eXBlID0gaXQtPmZpcnN0OwotICAgICAgICAgICAgbWltZS5kZXNj
ID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIG1pbWUudHlwZSA9IGl0LT5rZXk7CisgICAgICAg
ICAgICBtaW1lLmRlc2MgPSBpdC0+dmFsdWU7CiAgICAgICAgICAgICBtaW1lLmV4dGVuc2lvbnMg
PSBwYWNrYWdlLT5taW1lVG9FeHRlbnNpb25zKCkuZ2V0KG1pbWUudHlwZSk7CiAKICAgICAgICAg
ICAgIGluZm8ubWltZXMuYXBwZW5kKG1pbWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93
aW4vV2ViSGlzdG9yeS5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJIaXN0b3J5LmNwcAppbmRl
eCBlODQyYzE0MDczNWM3MTk5MWE1ZDExZThiOWQzYjU3ZjdkNWNkMjdiLi44MjMzNWE3OGE3NWY4
YzgyMmRkOTk2ZTVkNjg5OGMzOWMwNGUzYjMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dp
bi9XZWJIaXN0b3J5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJIaXN0b3J5LmNwcApA
QCAtODM0LDcgKzgzNCw3IEBAIEhSRVNVTFQgV2ViSGlzdG9yeTo6cmVtb3ZlSXRlbUZyb21EYXRl
Q2FjaGVzKElXZWJIaXN0b3J5SXRlbSogZW50cnkpCiAKICAgICBEYXRlVG9FbnRyaWVzTWFwOjpp
dGVyYXRvciBmb3VuZCA9IG1fZW50cmllc0J5RGF0ZS5maW5kKGRhdGVLZXkpOwogICAgIEFTU0VS
VChmb3VuZCAhPSBtX2VudHJpZXNCeURhdGUuZW5kKCkpOwotICAgIENGTXV0YWJsZUFycmF5UmVm
IGVudHJpZXNGb3JEYXRlID0gZm91bmQtPnNlY29uZC5nZXQoKTsKKyAgICBDRk11dGFibGVBcnJh
eVJlZiBlbnRyaWVzRm9yRGF0ZSA9IGZvdW5kLT52YWx1ZS5nZXQoKTsKIAogICAgIENGSW5kZXgg
Y291bnQgPSBDRkFycmF5R2V0Q291bnQoZW50cmllc0ZvckRhdGUpOwogICAgIGZvciAoaW50IGkg
PSBjb3VudCAtIDE7IGkgPj0gMDsgLS1pKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dp
bi9XZWJLaXRDT01BUEkuY3BwIGIvU291cmNlL1dlYktpdC93aW4vV2ViS2l0Q09NQVBJLmNwcApp
bmRleCA5YzljYzAyNmI0N2I0ZmVhOTYwYzYzOTg0NmUwZWJhNTFjNDY1M2MyLi40ZDhmZjA5NWJk
YTk2MDdkMjlhMTQ1Yjg1N2M3OGRkZmY4ZTM1ZTdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L3dpbi9XZWJLaXRDT01BUEkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL1dlYktpdENPTUFQ
SS5jcHAKQEAgLTUyLDcgKzUyLDcgQEAgc3RhdGljIENPTVB0cjxJQ2xhc3NGYWN0b3J5PiBjbGFz
c0ZhY3RvcnkoY29uc3QgQ0xTSUQmIGNsc2lkKQogICAgIHN0YXRpYyBGYWN0b3J5TWFwJiBmYWN0
b3JpZXMgPSAqbmV3IEZhY3RvcnlNYXA7CiAKICAgICBGYWN0b3J5TWFwOjpBZGRSZXN1bHQgcmVz
dWx0ID0gZmFjdG9yaWVzLmFkZChjbHNpZCwgMCk7Ci0gICAgQ09NUHRyPElDbGFzc0ZhY3Rvcnk+
JiBmYWN0b3J5ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgQ09NUHRyPElDbGFzc0Zh
Y3Rvcnk+JiBmYWN0b3J5ID0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAocmVzdWx0
LmlzTmV3RW50cnkgJiYgRkFJTEVEKERsbEdldENsYXNzT2JqZWN0KGNsc2lkLCBfX3V1aWRvZihm
YWN0b3J5KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZmYWN0b3J5KSkpKQogICAgICAgICBm
YWN0b3J5ID0gMDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vV2ViS2l0U3RhdGlz
dGljcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJLaXRTdGF0aXN0aWNzLmNwcAppbmRleCA5
Y2Q5NWM3YWM5MzU5NTMwMDdlMTU3ZGNhNzRlODA3YzQ1YWVlMDZlLi5jN2I4ZWQxYWM3N2NlNmUx
OTI2YWE1ZGIyMjQyNGYyZWVlMWEzNTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9X
ZWJLaXRTdGF0aXN0aWNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJLaXRTdGF0aXN0
aWNzLmNwcApAQCAtMTQ0LDkgKzE0NCw5IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2Vi
S2l0U3RhdGlzdGljczo6Y29tQ2xhc3NOYW1lQ291bnRzKAogICAgIEl0ZXJhdG9yIGVuZCA9IGdD
bGFzc05hbWVDb3VudC5lbmQoKTsKICAgICBWZWN0b3I8VUNoYXI+IHZlY3RvcjsKICAgICBmb3Ig
KEl0ZXJhdG9yIGN1cnJlbnQgPSBnQ2xhc3NOYW1lQ291bnQuYmVnaW4oKTsgY3VycmVudCAhPSBl
bmQ7ICsrY3VycmVudCkgewotICAgICAgICBhcHBlbmQodmVjdG9yLCBTdHJpbmc6OmZvcm1hdCgi
JTR1IiwgY3VycmVudC0+c2Vjb25kKSk7CisgICAgICAgIGFwcGVuZCh2ZWN0b3IsIFN0cmluZzo6
Zm9ybWF0KCIlNHUiLCBjdXJyZW50LT52YWx1ZSkpOwogICAgICAgICB2ZWN0b3IuYXBwZW5kKCdc
dCcpOwotICAgICAgICBhcHBlbmQodmVjdG9yLCBzdGF0aWNfY2FzdDxTdHJpbmc+KGN1cnJlbnQt
PmZpcnN0KSk7CisgICAgICAgIGFwcGVuZCh2ZWN0b3IsIHN0YXRpY19jYXN0PFN0cmluZz4oY3Vy
cmVudC0+a2V5KSk7CiAgICAgICAgIHZlY3Rvci5hcHBlbmQoJ1xuJyk7CiAgICAgfQogICAgICpv
dXRwdXQgPSBCU3RyaW5nKFN0cmluZzo6YWRvcHQodmVjdG9yKSkucmVsZWFzZSgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC93aW4vV2ViTm90aWZpY2F0aW9uQ2VudGVyLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvd2luL1dlYk5vdGlmaWNhdGlvbkNlbnRlci5jcHAKaW5kZXggYzcxOTJkOGQzY2Ri
MmNkYWUyYmFhNzFhZTYwZjdiYTlkODFlZDdlYS4uMzFjODExOWE1MDJiOWNlZTY1ZTQyMGJmNTE3
ZWU3OWFhMTI4NDFiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vV2ViTm90aWZpY2F0
aW9uQ2VudGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJOb3RpZmljYXRpb25DZW50
ZXIuY3BwCkBAIC0xMjAsNyArMTIwLDcgQEAgdm9pZCBXZWJOb3RpZmljYXRpb25DZW50ZXI6OnBv
c3ROb3RpZmljYXRpb25JbnRlcm5hbChJV2ViTm90aWZpY2F0aW9uKiBub3RpZmljYXQKIAogICAg
IC8vIEludGVudGlvbmFsbHkgbWFrZSBhIGNvcHkgb2YgdGhlIGxpc3QgdG8gYXZvaWQgdGhlIHBv
c3NpYmlsaXR5IG9mIGVycm9ycwogICAgIC8vIGZyb20gYSBtdXRhdGlvbiBvZiB0aGUgbGlzdCBp
biB0aGUgb25Ob3RpZnkgY2FsbGJhY2suCi0gICAgT2JqZWN0T2JzZXJ2ZXJMaXN0IGxpc3QgPSBp
dC0+c2Vjb25kOworICAgIE9iamVjdE9ic2VydmVyTGlzdCBsaXN0ID0gaXQtPnZhbHVlOwogCiAg
ICAgT2JzZXJ2ZXJMaXN0SXRlcmF0b3IgZW5kID0gbGlzdC5lbmQoKTsKICAgICBmb3IgKE9ic2Vy
dmVyTGlzdEl0ZXJhdG9yIGl0MiA9IGxpc3QuYmVnaW4oKTsgaXQyICE9IGVuZDsgKytpdDIpIHsK
QEAgLTE0OSw3ICsxNDksNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYk5vdGlmaWNh
dGlvbkNlbnRlcjo6YWRkT2JzZXJ2ZXIoCiAgICAgU3RyaW5nIG5hbWUobm90aWZpY2F0aW9uTmFt
ZSwgU3lzU3RyaW5nTGVuKG5vdGlmaWNhdGlvbk5hbWUpKTsKICAgICBNYXBwZWRPYnNlcnZlcnM6
Oml0ZXJhdG9yIGl0ID0gZC0+bV9tYXBwZWRPYnNlcnZlcnMuZmluZChuYW1lKTsKICAgICBpZiAo
aXQgIT0gZC0+bV9tYXBwZWRPYnNlcnZlcnMuZW5kKCkpCi0gICAgICAgIGl0LT5zZWNvbmQuYXBw
ZW5kKE9iamVjdE9ic2VydmVyUGFpcihhbk9iamVjdCwgb2JzZXJ2ZXIpKTsKKyAgICAgICAgaXQt
PnZhbHVlLmFwcGVuZChPYmplY3RPYnNlcnZlclBhaXIoYW5PYmplY3QsIG9ic2VydmVyKSk7CiAg
ICAgZWxzZSB7CiAgICAgICAgIE9iamVjdE9ic2VydmVyTGlzdCBsaXN0OwogICAgICAgICBsaXN0
LmFwcGVuZChPYmplY3RPYnNlcnZlclBhaXIoYW5PYmplY3QsIG9ic2VydmVyKSk7CkBAIC0xOTgs
NyArMTk4LDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJOb3RpZmljYXRpb25DZW50
ZXI6OnJlbW92ZU9ic2VydmVyKAogICAgIGlmIChpdCA9PSBkLT5tX21hcHBlZE9ic2VydmVycy5l
bmQoKSkKICAgICAgICAgcmV0dXJuIEVfRkFJTDsKIAotICAgIE9iamVjdE9ic2VydmVyTGlzdCYg
b2JzZXJ2ZXJMaXN0ID0gaXQtPnNlY29uZDsKKyAgICBPYmplY3RPYnNlcnZlckxpc3QmIG9ic2Vy
dmVyTGlzdCA9IGl0LT52YWx1ZTsKICAgICBPYnNlcnZlckxpc3RJdGVyYXRvciBlbmQgPSBvYnNl
cnZlckxpc3QuZW5kKCk7CiAKICAgICBpbnQgaSA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0Uu
Y3BwCmluZGV4IDNmOGM5MDdjNzM5ZjA4Y2RiOTkxNmU4MzZmOWIwOGRlNjc4NDUxY2YuLmQ1NTc5
NzIzMTE2MTU5MWQ1ZmRiMTcxNTgwNDQ1OGRiNzgyYzkxZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVz
V2luQ0UuY3BwCkBAIC05NCw4ICs5NCw4IEBAIHZvaWQgUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6
OmdldFBsdWdpbkluZm8oY29uc3QgUGFnZSosIFZlY3RvcjxQbHVnaW5JbmZvPiYgb3V0CiAgICAg
ICAgIGZvciAoTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1pbWVU
b0Rlc2NyaXB0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIE1p
bWVDbGFzc0luZm8gbWltZTsKIAotICAgICAgICAgICAgbWltZS50eXBlID0gaXQtPmZpcnN0Owot
ICAgICAgICAgICAgbWltZS5kZXNjID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIG1pbWUudHlw
ZSA9IGl0LT5rZXk7CisgICAgICAgICAgICBtaW1lLmRlc2MgPSBpdC0+dmFsdWU7CiAgICAgICAg
ICAgICBtaW1lLmV4dGVuc2lvbnMgPSBwYWNrYWdlLT5taW1lVG9FeHRlbnNpb25zKCkuZ2V0KG1p
bWUudHlwZSk7CiAKICAgICAgICAgICAgIGluZm8ubWltZXMuYXBwZW5kKG1pbWUpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVudENvZGVycy5oIGIv
U291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVudENvZGVycy5oCmluZGV4IGRk
NTRkZmVlZjkxYTdkZTMxMTkxNWU5M2Q5YWZiZWIxM2ExY2JlNzcuLmFmMTYzYmU2ZDliNjRjMzA5
ZDkxOWFkMWI3MzY1ODhlYjI2MzFjYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRm
b3JtL0NvcmVJUEMvQXJndW1lbnRDb2RlcnMuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9y
bS9Db3JlSVBDL0FyZ3VtZW50Q29kZXJzLmgKQEAgLTc1LDggKzc1LDggQEAgdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVT4gc3RydWN0IEFyZ3VtZW50Q29kZXI8c3RkOjpwYWlyPFQsIFU+
ID4gewogdGVtcGxhdGU8dHlwZW5hbWUgS2V5VHlwZSwgdHlwZW5hbWUgVmFsdWVUeXBlPiBzdHJ1
Y3QgQXJndW1lbnRDb2RlcjxXVEY6OktleVZhbHVlUGFpcjxLZXlUeXBlLCBWYWx1ZVR5cGU+ID4g
ewogICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0
IFdURjo6S2V5VmFsdWVQYWlyPEtleVR5cGUsIFZhbHVlVHlwZT4mIHBhaXIpCiAgICAgewotICAg
ICAgICBlbmNvZGVyLT5lbmNvZGUocGFpci5maXJzdCk7Ci0gICAgICAgIGVuY29kZXItPmVuY29k
ZShwYWlyLnNlY29uZCk7CisgICAgICAgIGVuY29kZXItPmVuY29kZShwYWlyLmtleSk7CisgICAg
ICAgIGVuY29kZXItPmVuY29kZShwYWlyLnZhbHVlKTsKICAgICB9CiAKICAgICBzdGF0aWMgYm9v
bCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBXVEY6OktleVZhbHVlUGFpcjxLZXlU
eXBlLCBWYWx1ZVR5cGU+JiBwYWlyKQpAQCAtODksOCArODksOCBAQCB0ZW1wbGF0ZTx0eXBlbmFt
ZSBLZXlUeXBlLCB0eXBlbmFtZSBWYWx1ZVR5cGU+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdURjo6
S2V5VmFsdQogICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZSh2YWx1ZSkpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgcGFpci5maXJzdCA9IGtleTsKLSAgICAgICAgcGFp
ci5zZWNvbmQgPSB2YWx1ZTsKKyAgICAgICAgcGFpci5rZXkgPSBrZXk7CisgICAgICAgIHBhaXIu
dmFsdWUgPSB2YWx1ZTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uY3BwCmluZGV4IGQyMmI4YjRj
MWI4YzUyOGNlY2I4YjIxYzcwNTQwZjMwNmNiM2VlMzQuLjM0NDllMzUyZTEwY2VjYjA0N2JlMDlm
YWI4OGUwYWY5MDY5MzJhZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0Nv
cmVJUEMvQ29ubmVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQ
Qy9Db25uZWN0aW9uLmNwcApAQCAtMTAyLDEyICsxMDIsMTIgQEAgUGFzc1JlZlB0cjxDb25uZWN0
aW9uOjpTeW5jTWVzc2FnZVN0YXRlPiBDb25uZWN0aW9uOjpTeW5jTWVzc2FnZVN0YXRlOjpnZXRP
ckNyZWEKICAgICBTeW5jTWVzc2FnZVN0YXRlTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gc3luY01l
c3NhZ2VTdGF0ZU1hcCgpLmFkZChydW5Mb29wLCAwKTsKIAogICAgIGlmICghcmVzdWx0LmlzTmV3
RW50cnkpIHsKLSAgICAgICAgQVNTRVJUKHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKLSAgICAg
ICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICBBU1NFUlQocmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZSk7CisgICAgICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVl
OwogICAgIH0KIAogICAgIFJlZlB0cjxTeW5jTWVzc2FnZVN0YXRlPiBzeW5jTWVzc2FnZVN0YXRl
ID0gYWRvcHRSZWYobmV3IFN5bmNNZXNzYWdlU3RhdGUocnVuTG9vcCkpOwotICAgIHJlc3VsdC5p
dGVyYXRvci0+c2Vjb25kID0gc3luY01lc3NhZ2VTdGF0ZS5nZXQoKTsKKyAgICByZXN1bHQuaXRl
cmF0b3ItPnZhbHVlID0gc3luY01lc3NhZ2VTdGF0ZS5nZXQoKTsKIAogICAgIHJldHVybiBzeW5j
TWVzc2FnZVN0YXRlLnJlbGVhc2UoKTsKIH0KQEAgLTM2MiwxMCArMzYyLDEwIEBAIFBhc3NPd25Q
dHI8QXJndW1lbnREZWNvZGVyPiBDb25uZWN0aW9uOjp3YWl0Rm9yTWVzc2FnZShNZXNzYWdlSUQg
bWVzc2FnZUlELCB1aW50CiAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3dhaXRGb3JNZXNz
YWdlTXV0ZXgpOwogCiAgICAgICAgIEhhc2hNYXA8c3RkOjpwYWlyPHVuc2lnbmVkLCB1aW50NjRf
dD4sIEFyZ3VtZW50RGVjb2Rlcio+OjppdGVyYXRvciBpdCA9IG1fd2FpdEZvck1lc3NhZ2VNYXAu
ZmluZChtZXNzYWdlQW5kRGVzdGluYXRpb24pOwotICAgICAgICBpZiAoaXQtPnNlY29uZCkgewor
ICAgICAgICBpZiAoaXQtPnZhbHVlKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogbV93YWl0Rm9y
TWVzc2FnZU1hcCBzaG91bGQgcmVhbGx5IGhvbGQgT3duUHRycyB0bwogICAgICAgICAgICAgLy8g
QXJndW1lbnREZWNvZGVycywgYnV0IEhhc2hNYXAgZG9lc24ndCBjdXJyZW50bHkgc3VwcG9ydCBP
d25QdHJzLgotICAgICAgICAgICAgT3duUHRyPEFyZ3VtZW50RGVjb2Rlcj4gYXJndW1lbnRzID0g
YWRvcHRQdHIoaXQtPnNlY29uZCk7CisgICAgICAgICAgICBPd25QdHI8QXJndW1lbnREZWNvZGVy
PiBhcmd1bWVudHMgPSBhZG9wdFB0cihpdC0+dmFsdWUpOwogICAgICAgICAgICAgbV93YWl0Rm9y
TWVzc2FnZU1hcC5yZW1vdmUoaXQpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICByZXR1cm4g
YXJndW1lbnRzLnJlbGVhc2UoKTsKQEAgLTUzOSw4ICs1MzksOCBAQCB2b2lkIENvbm5lY3Rpb246
OnByb2Nlc3NJbmNvbWluZ01lc3NhZ2UoTWVzc2FnZUlEIG1lc3NhZ2VJRCwgUGFzc093blB0cjxB
cmd1bWVudAogICAgICAgICAKICAgICAgICAgSGFzaE1hcDxzdGQ6OnBhaXI8dW5zaWduZWQsIHVp
bnQ2NF90PiwgQXJndW1lbnREZWNvZGVyKj46Oml0ZXJhdG9yIGl0ID0gbV93YWl0Rm9yTWVzc2Fn
ZU1hcC5maW5kKHN0ZDo6bWFrZV9wYWlyKG1lc3NhZ2VJRC50b0ludCgpLCBpbmNvbWluZ01lc3Nh
Z2UuZGVzdGluYXRpb25JRCgpKSk7CiAgICAgICAgIGlmIChpdCAhPSBtX3dhaXRGb3JNZXNzYWdl
TWFwLmVuZCgpKSB7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kID0gaW5jb21pbmdNZXNzYWdlLnJl
bGVhc2VBcmd1bWVudHMoKS5sZWFrUHRyKCk7Ci0gICAgICAgICAgICBBU1NFUlQoaXQtPnNlY29u
ZCk7CisgICAgICAgICAgICBpdC0+dmFsdWUgPSBpbmNvbWluZ01lc3NhZ2UucmVsZWFzZUFyZ3Vt
ZW50cygpLmxlYWtQdHIoKTsKKyAgICAgICAgICAgIEFTU0VSVChpdC0+dmFsdWUpOwogICAgICAg
ICAKICAgICAgICAgICAgIG1fd2FpdEZvck1lc3NhZ2VDb25kaXRpb24uc2lnbmFsKCk7CiAgICAg
ICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9ndGsv
V29ya1F1ZXVlR3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2d0ay9Xb3JrUXVldWVH
dGsuY3BwCmluZGV4IDFkZmFiODNjY2ZiMjRjOWYwMGVlNDBkMmRhYTFjOTViMTYzODJhNDMuLjY4
ODVkNDg1YmQxMTZkMzI4ZGVjZDAyYWFmNTRjOTE4NzgyYjJmMTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1BsYXRmb3JtL2d0ay9Xb3JrUXVldWVHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1BsYXRmb3JtL2d0ay9Xb3JrUXVldWVHdGsuY3BwCkBAIC0xNjYsNyArMTY2LDcgQEAgdm9p
ZCBXb3JrUXVldWU6OnJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKGludCBmaWxlRGVzY3JpcHRv
ciwgaW50IGNvbmRpdGlvbiwgY28KICAgICAgICAgVmVjdG9yPEV2ZW50U291cmNlKj4gc291cmNl
czsKICAgICAgICAgRXZlbnRTb3VyY2VJdGVyYXRvciBpdCA9IG1fZXZlbnRTb3VyY2VzLmZpbmQo
ZmlsZURlc2NyaXB0b3IpOwogICAgICAgICBpZiAoaXQgIT0gbV9ldmVudFNvdXJjZXMuZW5kKCkp
IAotICAgICAgICAgICAgc291cmNlcyA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICBzb3VyY2Vz
ID0gaXQtPnZhbHVlOwogCiAgICAgICAgIHNvdXJjZXMuYXBwZW5kKGV2ZW50U291cmNlKTsKICAg
ICAgICAgbV9ldmVudFNvdXJjZXMuc2V0KGZpbGVEZXNjcmlwdG9yLCBzb3VyY2VzKTsKQEAgLTE4
Niw3ICsxODYsNyBAQCB2b2lkIFdvcmtRdWV1ZTo6dW5yZWdpc3RlckV2ZW50U291cmNlSGFuZGxl
cihpbnQgZmlsZURlc2NyaXB0b3IpCiAgICAgQVNTRVJUKG1fZXZlbnRTb3VyY2VzLmNvbnRhaW5z
KGZpbGVEZXNjcmlwdG9yKSk7CiAKICAgICBpZiAoaXQgIT0gbV9ldmVudFNvdXJjZXMuZW5kKCkp
IHsKLSAgICAgICAgVmVjdG9yPEV2ZW50U291cmNlKj4gc291cmNlcyA9IGl0LT5zZWNvbmQ7Cisg
ICAgICAgIFZlY3RvcjxFdmVudFNvdXJjZSo+IHNvdXJjZXMgPSBpdC0+dmFsdWU7CiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzb3VyY2VzLnNpemUoKTsgaSsrKQogICAgICAgICAg
ICAgc291cmNlc1tpXS0+Y2FuY2VsKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1Bs
YXRmb3JtL21hYy9Xb3JrUXVldWVNYWMuY3BwIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vbWFj
L1dvcmtRdWV1ZU1hYy5jcHAKaW5kZXggYWU0NzNlZTVjYzg0ZTU4NDI5YjA0MzljY2Q5MjFhYzJj
NDkyZmZhYS4uNmU1NGNlZTBiNzA5ODQwYTU0Zjc2Y2RhYTQyNGZlZWI0NjI5MDliMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vbWFjL1dvcmtRdWV1ZU1hYy5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvUGxhdGZvcm0vbWFjL1dvcmtRdWV1ZU1hYy5jcHAKQEAgLTE1Myw3ICsx
NTMsNyBAQCB2b2lkIFdvcmtRdWV1ZTo6dW5yZWdpc3Rlck1hY2hQb3J0RXZlbnRIYW5kbGVyKG1h
Y2hfcG9ydF90IG1hY2hQb3J0KQogICAgIAogICAgIEFTU0VSVChtX2V2ZW50U291cmNlcy5jb250
YWlucyhtYWNoUG9ydCkpOwogCi0gICAgRXZlbnRTb3VyY2UqIGV2ZW50U291cmNlID0gaXQtPnNl
Y29uZDsKKyAgICBFdmVudFNvdXJjZSogZXZlbnRTb3VyY2UgPSBpdC0+dmFsdWU7CiAgICAgLy8g
Q2FuY2VsIGFuZCByZWxlYXNlIHRoZSBzb3VyY2UuIEl0IHdpbGwgYmUgZGVsZXRlZCBpbiBpdHMg
ZmluYWxpemUgaGFuZGxlci4KICAgICBkaXNwYXRjaF9zb3VyY2VfY2FuY2VsKGV2ZW50U291cmNl
LT5kaXNwYXRjaFNvdXJjZSgpKTsKICAgICBkaXNwYXRjaF9yZWxlYXNlKGV2ZW50U291cmNlLT5k
aXNwYXRjaFNvdXJjZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9QbHVn
aW5zL05QUmVtb3RlT2JqZWN0TWFwLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9QbHVnaW5z
L05QUmVtb3RlT2JqZWN0TWFwLmNwcAppbmRleCA3NjQxYWY1ZThjODkyZDFkMzdlZTk2ZGE5Yjdl
NjA1ODk5NzNlODhhLi5iNWVjMmQ5ZGEzOWYyNmRjYjQzMjBkOTVlMDNmMmZjYWU0ZTdkN2RmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvUGx1Z2lucy9OUFJlbW90ZU9iamVjdE1h
cC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1BsdWdpbnMvTlBSZW1vdGVPYmplY3RN
YXAuY3BwCkBAIC0yMDAsNyArMjAwLDcgQEAgdm9pZCBOUFJlbW90ZU9iamVjdE1hcDo6cGx1Z2lu
RGVzdHJveWVkKFBsdWdpbiogcGx1Z2luKQogCiAgICAgLy8gR2F0aGVyIHRoZSByZWNlaXZlcnMg
YXNzb2NpYXRlZCB3aXRoIHRoaXMgcGx1Zy1pbi4KICAgICBmb3IgKEhhc2hNYXA8dWludDY0X3Qs
IE5QT2JqZWN0TWVzc2FnZVJlY2VpdmVyKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9yZWdpc3Rl
cmVkTlBPYmplY3RzLmJlZ2luKCksIGVuZCA9IG1fcmVnaXN0ZXJlZE5QT2JqZWN0cy5lbmQoKTsg
aXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIE5QT2JqZWN0TWVzc2FnZVJlY2VpdmVyKiBucE9i
amVjdE1lc3NhZ2VSZWNlaXZlciA9IGl0LT5zZWNvbmQ7CisgICAgICAgIE5QT2JqZWN0TWVzc2Fn
ZVJlY2VpdmVyKiBucE9iamVjdE1lc3NhZ2VSZWNlaXZlciA9IGl0LT52YWx1ZTsKICAgICAgICAg
aWYgKG5wT2JqZWN0TWVzc2FnZVJlY2VpdmVyLT5wbHVnaW4oKSA9PSBwbHVnaW4pCiAgICAgICAg
ICAgICBtZXNzYWdlUmVjZWl2ZXJzLmFwcGVuZChucE9iamVjdE1lc3NhZ2VSZWNlaXZlcik7CiAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1VzZXJNZXNzYWdlQ29kZXJz
LmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvVXNlck1lc3NhZ2VDb2RlcnMuaAppbmRleCA4NWVk
NTdiNTc0OGJiYzE3ZDMzYjRiNDRkMDhiNTY1MWYyYjQ1M2JlLi4yOWU3ZDYwOGJkMWQwYzBhM2Ni
MjhkZjJlZjA3ZjU5MDEyNjRiMTExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
VXNlck1lc3NhZ2VDb2RlcnMuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvVXNlck1lc3Nh
Z2VDb2RlcnMuaApAQCAtOTMsOCArOTMsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBJbW11dGFi
bGVEaWN0aW9uYXJ5OjpNYXBUeXBlOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC5iZWdpbigpOwog
ICAgICAgICAgICAgSW1tdXRhYmxlRGljdGlvbmFyeTo6TWFwVHlwZTo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gbWFwLmVuZCgpOwogICAgICAgICAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgewot
ICAgICAgICAgICAgICAgIGVuY29kZXItPmVuY29kZShpdC0+Zmlyc3QpOwotICAgICAgICAgICAg
ICAgIGVuY29kZXItPmVuY29kZShPd25lcihpdC0+c2Vjb25kLmdldCgpKSk7CisgICAgICAgICAg
ICAgICAgZW5jb2Rlci0+ZW5jb2RlKGl0LT5rZXkpOworICAgICAgICAgICAgICAgIGVuY29kZXIt
PmVuY29kZShPd25lcihpdC0+dmFsdWUuZ2V0KCkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvV2ViSW50ZW50RGF0YS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViSW50ZW50
RGF0YS5jcHAKaW5kZXggOTYxMjhkYmUyYjIzMGRhMDU4MTA5MGQwNGM3Yzk2ZGI1YjZkZmI2ZS4u
NDAyZjE1MzIyZjkxOTAxNjM1MDQwZWUzNjRmNDA0ZjM2NmRjNWY0YyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvU2hhcmVkL1dlYkludGVudERhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9XZWJJbnRlbnREYXRhLmNwcApAQCAtNjUsNyArNjUsNyBAQCBQYXNzUmVmUHRyPElt
bXV0YWJsZURpY3Rpb25hcnk+IFdlYkludGVudERhdGE6OmV4dHJhcygpIGNvbnN0CiAgICAgSW1t
dXRhYmxlRGljdGlvbmFyeTo6TWFwVHlwZSB3a0V4dHJhczsKICAgICBIYXNoTWFwPFN0cmluZywg
U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9zdG9yZS5leHRyYXMuZW5kKCk7CiAgICAg
Zm9yIChIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3N0b3Jl
LmV4dHJhcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHdrRXh0cmFzLnNldChp
dC0+Zmlyc3QsIFdlYlN0cmluZzo6Y3JlYXRlKGl0LT5zZWNvbmQpKTsKKyAgICAgICAgd2tFeHRy
YXMuc2V0KGl0LT5rZXksIFdlYlN0cmluZzo6Y3JlYXRlKGl0LT52YWx1ZSkpOwogICAgIHJldHVy
biBJbW11dGFibGVEaWN0aW9uYXJ5OjphZG9wdCh3a0V4dHJhcyk7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcmVmZXJlbmNlc1N0b3JlLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9XZWJQcmVmZXJlbmNlc1N0b3JlLmNwcAppbmRleCA4NjY4YmVjMGMwYTRm
YzgxMDE5ZTc3NzBkMDYwZDMyNWFjYmEzNWJhLi45Nzg0ZTVmZDgxMGM1ODQ2ZTIyODYwOTg0YjQz
N2UxNTQ5OGU5YmMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJlZmVy
ZW5jZXNTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByZWZlcmVuY2Vz
U3RvcmUuY3BwCkBAIC0xNTEsNyArMTUxLDcgQEAgc3RhdGljIHR5cGVuYW1lIE1hcFR5cGU6Ok1h
cHBlZFR5cGUgdmFsdWVGb3JLZXkoY29uc3QgTWFwVHlwZSYgbWFwLCBjb25zdCB0eXBlbmEKIHsK
ICAgICB0eXBlbmFtZSBNYXBUeXBlOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC5maW5kKGtleSk7
CiAgICAgaWYgKGl0ICE9IG1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7Cisg
ICAgICAgIHJldHVybiBpdC0+dmFsdWU7CiAKICAgICByZXR1cm4gZGVmYXVsdFZhbHVlRm9yS2V5
PHR5cGVuYW1lIE1hcFR5cGU6Ok1hcHBlZFR5cGU+KGtleSk7CiB9CkBAIC0xODcsNyArMTg3LDcg
QEAgYm9vbCBXZWJQcmVmZXJlbmNlc1N0b3JlOjpnZXRCb29sVmFsdWVGb3JLZXkoY29uc3QgU3Ry
aW5nJiBrZXkpIGNvbnN0CiAgICAgLy8gRklYTUU6IEV4dGVuZCBvdmVycmlkaW5nIHRvIG90aGVy
IGtleSB0eXBlcyB1c2VkIGZyb20gTGF5b3V0VGVzdENvbnRyb2xsZXIuCiAgICAgQm9vbE92ZXJy
aWRlc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBib29sVGVzdFJ1bm5lck92ZXJyaWRlc01hcCgp
LmZpbmQoa2V5KTsKICAgICBpZiAoaXQgIT0gYm9vbFRlc3RSdW5uZXJPdmVycmlkZXNNYXAoKS5l
bmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBpdC0+dmFs
dWU7CiAgICAgcmV0dXJuIHZhbHVlRm9yS2V5KG1fYm9vbFZhbHVlcywga2V5KTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9XZWJDb3JlQXJndW1lbnRDb2RlcnNN
YWMubW0gYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1dlYkNvcmVBcmd1bWVudENvZGVyc01h
Yy5tbQppbmRleCAxOTZhYjExYzdhNzQzMTA3ZDM4MDBlMWZmOGZhNWJlMWYyYjNiODE4Li4wZjlk
M2Q4YTNiZmI3Mzc0M2IzOTMzNTMzNWRjNWY1OGMxZDE0NzgwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvbWFjL1dlYkNvcmVBcmd1bWVudENvZGVyc01hYy5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1dlYkNvcmVBcmd1bWVudENvZGVyc01hYy5tbQpAQCAtMTgz
LDcgKzE4Myw3IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxSZXNvdXJjZUVycm9yPjo6ZGVjb2RlKEFy
Z3VtZW50RGVjb2RlciogZGVjb2RlciwgUmVzb3VyY2VFcnJvCiAgICAgSGFzaE1hcDxTdHJpbmcs
IFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gc3RyaW5nVXNlckluZm9NYXAuYmVnaW4oKTsK
ICAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gc3RyaW5n
VXNlckluZm9NYXAuZW5kKCk7CiAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAg
W3VzZXJJbmZvIHNldE9iamVjdDpuc1N0cmluZyhpdC0+c2Vjb25kKSBmb3JLZXk6bnNTdHJpbmco
aXQtPmZpcnN0KV07CisgICAgICAgIFt1c2VySW5mbyBzZXRPYmplY3Q6bnNTdHJpbmcoaXQtPnZh
bHVlKSBmb3JLZXk6bnNTdHJpbmcoaXQtPmtleSldOwogCiAgICAgaWYgKGNlcnRpZmljYXRlLmNl
cnRpZmljYXRlQ2hhaW4oKSkKICAgICAgICAgW3VzZXJJbmZvIHNldE9iamVjdDooTlNBcnJheSAq
KWNlcnRpZmljYXRlLmNlcnRpZmljYXRlQ2hhaW4oKSBmb3JLZXk6QCJOU0Vycm9yUGVlckNlcnRp
ZmljYXRlQ2hhaW5LZXkiXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9B
cmd1bWVudENvZGVyc1F0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9Bcmd1bWVudENv
ZGVyc1F0LmNwcAppbmRleCBjODliZjQ0ZjE3MTkwYjAyYzQxMTJiY2JlZDZlMGM0MWZhM2M2NzVm
Li5hNDM5Y2FmZjFlNDg4ZTEwMmM1NTBhZDA0ZjM0NmQ1OTk2ZGQxODkyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvQXJndW1lbnRDb2RlcnNRdC5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL3F0L0FyZ3VtZW50Q29kZXJzUXQuY3BwCkBAIC04Niw4ICs4Niw4IEBA
IGJvb2wgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpEcmFnRGF0YT46OmRlY29kZShBcmd1bWVudERl
Y29kZXIqIGRlY29kZXIsIERyYWdEYXRhCiAgICAgICAgIE1JTUVEYXRhSGFzaE1hcDo6aXRlcmF0
b3IgaXQgPSBtYXAuYmVnaW4oKTsKICAgICAgICAgTUlNRURhdGFIYXNoTWFwOjppdGVyYXRvciBl
bmQgPSBtYXAuZW5kKCk7CiAgICAgICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgICAgIFFCeXRlQXJyYXkgYnl0ZXMoKGNoYXIqKWl0LT5zZWNvbmQuZGF0YSgpLCBpdC0+c2Vj
b25kLnNpemUoKSk7Ci0gICAgICAgICAgICBtaW1lRGF0YS0+c2V0RGF0YShpdC0+Zmlyc3QsIGJ5
dGVzKTsKKyAgICAgICAgICAgIFFCeXRlQXJyYXkgYnl0ZXMoKGNoYXIqKWl0LT52YWx1ZS5kYXRh
KCksIGl0LT52YWx1ZS5zaXplKCkpOworICAgICAgICAgICAgbWltZURhdGEtPnNldERhdGEoaXQt
PmtleSwgYnl0ZXMpOwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvc291cC9XZWJDb3JlQXJndW1lbnRDb2RlcnNTb3VwLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9zb3VwL1dlYkNvcmVBcmd1bWVudENvZGVyc1NvdXAuY3BwCmluZGV4IGRi
ZTJjNTFjZGNmYjc5OGFmYWNkMmZkMWRiZmE0OTJiMWExZWZiMWIuLjMzZDliZDNmZjIwZTYxOTBj
YzNjZTRmZjg1OTkzOGIwMzk0ZWQ2YzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9zb3VwL1dlYkNvcmVBcmd1bWVudENvZGVyc1NvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9zb3VwL1dlYkNvcmVBcmd1bWVudENvZGVyc1NvdXAuY3BwCkBAIC0xNDQsNyArMTQ0
LDcgQEAgYm9vbCBBcmd1bWVudENvZGVyPFJlc291cmNlUmVzcG9uc2U+OjpkZWNvZGUoQXJndW1l
bnREZWNvZGVyKiBkZWNvZGVyLCBSZXNvdXJjZVIKICAgICBpZiAoIWRlY29kZXItPmRlY29kZSho
ZWFkZXJzKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGZvciAoSFRUUEhlYWRlck1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBoZWFkZXJzLmJlZ2luKCksIGVuZCA9IGhlYWRlcnMuZW5kKCk7
IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgcmVzcG9uc2Uuc2V0SFRUUEhlYWRlckZpZWxkKGl0
LT5maXJzdCwgaXQtPnNlY29uZCk7CisgICAgICAgIHJlc3BvbnNlLnNldEhUVFBIZWFkZXJGaWVs
ZChpdC0+a2V5LCBpdC0+dmFsdWUpOwogCiAgICAgdWludDMyX3Qgc291cE1lc3NhZ2VGbGFnczsK
ICAgICBpZiAoIWRlY29kZXItPmRlY29kZShzb3VwTWVzc2FnZUZsYWdzKSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcAppbmRleCBmMmVkNDE3
ZmMzYmY1YzhhZWVhZGExZmU2Y2IyNTFiMzM2OWYyZDY3Li43NWNmYzM5YTE5MmQ0ZGQzZmI1YWQz
ZmVhMDFmZGE2YzA3ZWE5NzQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfY29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX2NvbnRleHQuY3BwCkBAIC05Nyw3ICs5Nyw3IEBAIHN0cnVjdCBfRXdrX0NvbnRl
eHQgewogICAgICAgICBIYXNoTWFwPHVpbnQ2NF90LCBFd2tfRG93bmxvYWRfSm9iKj46Oml0ZXJh
dG9yIGl0ID0gZG93bmxvYWRKb2JzLmJlZ2luKCk7CiAgICAgICAgIEhhc2hNYXA8dWludDY0X3Qs
IEV3a19Eb3dubG9hZF9Kb2IqPjo6aXRlcmF0b3IgZW5kID0gZG93bmxvYWRKb2JzLmVuZCgpOwog
ICAgICAgICBmb3IgKCA7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIGV3a19kb3dubG9h
ZF9qb2JfdW5yZWYoaXQtPnNlY29uZCk7CisgICAgICAgICAgICBld2tfZG93bmxvYWRfam9iX3Vu
cmVmKGl0LT52YWx1ZSk7CiAgICAgfQogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX3ZpZXcuY3BwCmluZGV4IGIxYjFiY2MwODllMjIxOTUwNWUxODdlMWU4YTVj
MzBjMDQ1ZDExMzUuLjFlYmJmZjIxMWUyOGI5YmFmOGVhNmUyYjJhMWZjN2ZkZTg5ODJjZmMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAKQEAgLTMz
NSw3ICszMzUsNyBAQCBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfcHJpdl9sb2FkaW5nX3Jlc291cmNl
c19jbGVhcihMb2FkaW5nUmVzb3VyY2VzTWFwJiBsb2FkaW5nUgogICAgIExvYWRpbmdSZXNvdXJj
ZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbG9hZGluZ1Jlc291cmNlc01hcC5iZWdpbigpOwogICAgIExv
YWRpbmdSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGVuZCA9IGxvYWRpbmdSZXNvdXJjZXNNYXAuZW5k
KCk7CiAgICAgZm9yICggOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGV3a193ZWJfcmVzb3Vy
Y2VfdW5yZWYoaXQtPnNlY29uZCk7CisgICAgICAgIGV3a193ZWJfcmVzb3VyY2VfdW5yZWYoaXQt
PnZhbHVlKTsKIAogICAgIGxvYWRpbmdSZXNvdXJjZXNNYXAuY2xlYXIoKTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKaW5kZXgg
OGJmNGQ4ZmUwMzcxYThjZTgwNTQxNjY5NzZkOTk1M2I0MTZlMjQ3NC4uYjY0YmVmNjc0OTM0M2My
NjllZTk2MDNjOTc5ZjU3MjQ5MzRhOTNiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKQEAgLTIyNzYsNyArMjI3Niw3IEBAIEdM
aXN0KiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3N1YnJlc291cmNlcyhXZWJLaXRXZWJWaWV3KiB3ZWJW
aWV3KQogICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiBwcml2ID0gd2ViVmlldy0+cHJpdjsKICAg
ICBSZXNvdXJjZXNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHByaXYtPnN1YnJlc291cmNlc01h
cC5lbmQoKTsKICAgICBmb3IgKFJlc291cmNlc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBwcml2
LT5zdWJyZXNvdXJjZXNNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBzdWJy
ZXNvdXJjZXMgPSBnX2xpc3RfcHJlcGVuZChzdWJyZXNvdXJjZXMsIGl0LT5zZWNvbmQuZ2V0KCkp
OworICAgICAgICBzdWJyZXNvdXJjZXMgPSBnX2xpc3RfcHJlcGVuZChzdWJyZXNvdXJjZXMsIGl0
LT52YWx1ZS5nZXQoKSk7CiAKICAgICByZXR1cm4gZ19saXN0X3JldmVyc2Uoc3VicmVzb3VyY2Vz
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFdlYlZpZXdCYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFdlYlZpZXdCYXNlLmNwcAppbmRleCBmNjVmYTk3ZWRjN2ZmMmZjZDJjY2YxZGZlYTE0YTlhODJh
OWY3NjdjLi5lNzcwNmU2ZjJiMDk4MTdiYzBhOTFmNjc1OGI5N2Y2YWMwYTcyOWYwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jh
c2UuY3BwCkBAIC0yMjgsNyArMjI4LDcgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VD
b250YWluZXJGb3JhbGwoR3RrQ29udGFpbmVyKiBjb250YWluZXIsIGdib29sZWFuIGkKICAgICBX
ZWJLaXRXZWJWaWV3Q2hpbGRyZW5NYXAgY2hpbGRyZW4gPSBwcml2LT5jaGlsZHJlbjsKICAgICBX
ZWJLaXRXZWJWaWV3Q2hpbGRyZW5NYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGNoaWxkcmVuLmVu
ZCgpOwogICAgIGZvciAoV2ViS2l0V2ViVmlld0NoaWxkcmVuTWFwOjpjb25zdF9pdGVyYXRvciBj
dXJyZW50ID0gY2hpbGRyZW4uYmVnaW4oKTsgY3VycmVudCAhPSBlbmQ7ICsrY3VycmVudCkKLSAg
ICAgICAgKCpjYWxsYmFjaykoY3VycmVudC0+Zmlyc3QsIGNhbGxiYWNrRGF0YSk7CisgICAgICAg
ICgqY2FsbGJhY2spKGN1cnJlbnQtPmtleSwgY2FsbGJhY2tEYXRhKTsKIAogICAgIGlmIChpbmNs
dWRlSW50ZXJuYWxzICYmIHByaXYtPmluc3BlY3RvclZpZXcpCiAgICAgICAgICgqY2FsbGJhY2sp
KHByaXYtPmluc3BlY3RvclZpZXcsIGNhbGxiYWNrRGF0YSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ByaW50aW5nVmlldy5tbSBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLUHJpbnRpbmdWaWV3Lm1tCmluZGV4IDYzYzU4ODk1Zjcx
MjkzYjFiNTQ1OGQ5ZWI2ODQxZDBhMDY0ODE0OWQuLmNhMWNhZDU4MjU5OWZkMGM2MGIyNTI0YzZi
Yzc3Mjc2OWQyZmQzOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
bWFjL1dLUHJpbnRpbmdWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
bWFjL1dLUHJpbnRpbmdWaWV3Lm1tCkBAIC0xOTQsOCArMTk0LDggQEAgc3RhdGljIEJPT0wgaXNG
b3JjaW5nUHJldmlld1VwZGF0ZTsKIC0gKHVpbnQ2NF90KV9leHBlY3RlZFByZXZpZXdDYWxsYmFj
a0ZvclJlY3Q6KGNvbnN0IEludFJlY3QmKXJlY3QKIHsKICAgICBmb3IgKEhhc2hNYXA8dWludDY0
X3QsIFdlYkNvcmU6OkludFJlY3Q+OjppdGVyYXRvciBpdGVyID0gX2V4cGVjdGVkUHJldmlld0Nh
bGxiYWNrcy5iZWdpbigpOyBpdGVyICE9IF9leHBlY3RlZFByZXZpZXdDYWxsYmFja3MuZW5kKCk7
ICsraXRlcikgewotICAgICAgICBpZiAoaXRlci0+c2Vjb25kICA9PSByZWN0KQotICAgICAgICAg
ICAgcmV0dXJuIGl0ZXItPmZpcnN0OworICAgICAgICBpZiAoaXRlci0+dmFsdWUgID09IHJlY3Qp
CisgICAgICAgICAgICByZXR1cm4gaXRlci0+a2V5OwogICAgIH0KICAgICByZXR1cm4gMDsKIH0K
QEAgLTIyOSw4ICsyMjksOCBAQCBzdGF0aWMgdm9pZCBwYWdlRGlkRHJhd1RvUERGKFdLRGF0YVJl
ZiBkYXRhUmVmLCBXS0Vycm9yUmVmLCB2b2lkKiB1bnR5cGVkQ29udGV4dAogICAgICAgICAgICAg
QVNTRVJUKFt2aWV3IF9pc1ByaW50aW5nUHJldmlld10pOwogCiAgICAgICAgICAgICBpZiAoZGF0
YSkgewotICAgICAgICAgICAgICAgIEhhc2hNYXA8V2ViQ29yZTo6SW50UmVjdCwgVmVjdG9yPHVp
bnQ4X3Q+ID46OkFkZFJlc3VsdCBlbnRyeSA9IHZpZXctPl9wYWdlUHJldmlld3MuYWRkKGl0ZXIt
PnNlY29uZCwgVmVjdG9yPHVpbnQ4X3Q+KCkpOwotICAgICAgICAgICAgICAgIGVudHJ5Lml0ZXJh
dG9yLT5zZWNvbmQuYXBwZW5kKGRhdGEtPmJ5dGVzKCksIGRhdGEtPnNpemUoKSk7CisgICAgICAg
ICAgICAgICAgSGFzaE1hcDxXZWJDb3JlOjpJbnRSZWN0LCBWZWN0b3I8dWludDhfdD4gPjo6QWRk
UmVzdWx0IGVudHJ5ID0gdmlldy0+X3BhZ2VQcmV2aWV3cy5hZGQoaXRlci0+dmFsdWUsIFZlY3Rv
cjx1aW50OF90PigpKTsKKyAgICAgICAgICAgICAgICBlbnRyeS5pdGVyYXRvci0+dmFsdWUuYXBw
ZW5kKGRhdGEtPmJ5dGVzKCksIGRhdGEtPnNpemUoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB2aWV3LT5fZXhwZWN0ZWRQcmV2aWV3Q2FsbGJhY2tzLnJlbW92ZShjb250ZXh0LT5jYWxs
YmFja0lEKTsKICAgICAgICAgICAgIGJvb2wgcmVjZWl2ZWRSZXNwb25zZVRvTGF0ZXN0UmVxdWVz
dCA9IHZpZXctPl9sYXRlc3RFeHBlY3RlZFByZXZpZXdDYWxsYmFjayA9PSBjb250ZXh0LT5jYWxs
YmFja0lEOwpAQCAtNDk0LDcgKzQ5NCw3IEBAIHN0YXRpYyB2b2lkIHByZXBhcmVEYXRhRm9yUHJp
bnRpbmdPblNlY29uZGFyeVRocmVhZCh2b2lkKiB1bnR5cGVkQ29udGV4dCkKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgcGRmRGF0YUJ5dGVzID0g
cGFnZVByZXZpZXdJdGVyYXRvci0+c2Vjb25kOworICAgIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYg
cGRmRGF0YUJ5dGVzID0gcGFnZVByZXZpZXdJdGVyYXRvci0+dmFsdWU7CiAgICAgUmV0YWluUHRy
PE5TRGF0YT4gcGRmRGF0YShBZG9wdE5TLCBbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczpw
ZGZEYXRhQnl0ZXMuZGF0YSgpIGxlbmd0aDpwZGZEYXRhQnl0ZXMuc2l6ZSgpXSk7CiAgICAgUmV0
YWluUHRyPFBERkRvY3VtZW50PiBwZGZEb2N1bWVudChBZG9wdE5TLCBbW3BkZkRvY3VtZW50Q2xh
c3MoKSBhbGxvY10gaW5pdFdpdGhEYXRhOnBkZkRhdGEuZ2V0KCldKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCmluZGV4IGExMWVmNjVkMDdjZmU0ZjRlYzBh
NzEzMTMwOTNiYzUxNjIxMWI4ZTAuLjI5NzE3NGQzODhhMWMzZjZhNzZlY2FmN2M3ZGUzN2RiOGYw
YmI5MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmll
dy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0KQEAg
LTQyMyw3ICs0MjMsNyBAQCBzdGF0aWMgU3RyaW5nIGNvbW1hbmROYW1lRm9yU2VsZWN0b3IoU0VM
IHNlbGVjdG9yKQogICAgIHN0YXRpYyBjb25zdCBTZWxlY3Rvck5hbWVNYXAqIGV4Y2VwdGlvbk1h
cCA9IGNyZWF0ZVNlbGVjdG9yRXhjZXB0aW9uTWFwKCk7CiAgICAgU2VsZWN0b3JOYW1lTWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IGV4Y2VwdGlvbk1hcC0+ZmluZChzZWxlY3Rvcik7CiAgICAgaWYg
KGl0ICE9IGV4Y2VwdGlvbk1hcC0+ZW5kKCkpCi0gICAgICAgIHJldHVybiBpdC0+c2Vjb25kOwor
ICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwogICAgIAogICAgIC8vIFJlbW92ZSB0aGUgdHJhaWxp
bmcgY29sb24uCiAgICAgLy8gTm8gbmVlZCB0byBjYXBpdGFsaXplIHRoZSBjb21tYW5kIG5hbWUg
c2luY2UgRWRpdG9yIGNvbW1hbmQgbmFtZXMgYXJlCkBAIC03MzcsNyArNzM3LDcgQEAgc3RhdGlj
IHZvaWQgdmFsaWRhdGVDb21tYW5kQ2FsbGJhY2soV0tTdHJpbmdSZWYgY29tbWFuZE5hbWUsIGJv
b2wgaXNFbmFibGVkLCBpbnQKIAogICAgIC8vIEFkZCB0aGlzIGl0ZW0gdG8gdGhlIHZlY3RvciBv
ZiBpdGVtcyBmb3IgYSBnaXZlbiBjb21tYW5kIHRoYXQgYXJlIGF3YWl0aW5nIHZhbGlkYXRpb24u
CiAgICAgVmFsaWRhdGlvbk1hcDo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IF9kYXRhLT5fdmFsaWRh
dGlvbk1hcC5hZGQoY29tbWFuZE5hbWUsIFZhbGlkYXRpb25WZWN0b3IoKSk7Ci0gICAgYWRkUmVz
dWx0Lml0ZXJhdG9yLT5zZWNvbmQuYXBwZW5kKGl0ZW0pOworICAgIGFkZFJlc3VsdC5pdGVyYXRv
ci0+dmFsdWUuYXBwZW5kKGl0ZW0pOwogICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkgewog
ICAgICAgICAvLyBJZiB3ZSBhcmUgbm90IGFscmVhZHkgYXdhaXRpbmcgdmFsaWRhdGlvbiBmb3Ig
dGhpcyBjb21tYW5kLCBzdGFydCB0aGUgYXN5bmNocm9ub3VzIHZhbGlkYXRpb24gcHJvY2Vzcy4K
ICAgICAgICAgLy8gRklYTUU6IFRoZW9yZXRpY2FsbHksIHRoZXJlIGlzIGEgcmFjZSBoZXJlOyB3
aGVuIHdlIGdldCB0aGUgYW5zd2VyIGl0IG1pZ2h0IGJlIG9sZCwgZnJvbSBhIHByZXZpb3VzIHRp
bWUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9HZW9sb2NhdGlvblBlcm1p
c3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9H
ZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcAppbmRleCA3MWJlYWY1
YTVjMzFkNDU1Y2E4ZDJiMWEyODgxY2EyYTcyNzE0N2IyLi4wZDQxNjM1NTQ2NWZmOTBkYTZiY2Yw
OGVjMzViODRjMTcxYTUzOTk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
R2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJv
eHkuY3BwCkBAIC00Miw3ICs0Miw3IEBAIHZvaWQgR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVz
dE1hbmFnZXJQcm94eTo6aW52YWxpZGF0ZVJlcXVlc3RzKCkKICAgICBQZW5kaW5nUmVxdWVzdE1h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BlbmRpbmdSZXF1ZXN0cy5iZWdpbigpOwogICAgIFBl
bmRpbmdSZXF1ZXN0TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BlbmRpbmdSZXF1ZXN0cy5l
bmQoKTsKICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5p
bnZhbGlkYXRlKCk7CisgICAgICAgIGl0LT52YWx1ZS0+aW52YWxpZGF0ZSgpOwogCiAgICAgbV9w
ZW5kaW5nUmVxdWVzdHMuY2xlYXIoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvV2ViSW5zcGVjdG9yU2VydmVyLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvV2ViSW5zcGVjdG9yU2VydmVyLmNwcApp
bmRleCBlY2IxNzFiYjQ3MmI2YmFlZjNlZmMyOTI3ZjcxOGE2MWFmNDRjZTBjLi4zYTllMjNlZWRm
OTdiNjRkYjgxNmUzYWJiZGJjMjlkNmJiODdmMmI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL1dlYkluc3BlY3RvclNlcnZlci5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9XZWJJbnNwZWN0b3JTZXJ2
ZXIuY3BwCkBAIC02Nyw3ICs2Nyw3IEBAIFdlYkluc3BlY3RvclNlcnZlcjo6fldlYkluc3BlY3Rv
clNlcnZlcigpCiAgICAgLy8gQ2xvc2UgYW55IHJlbWFpbmluZyBvcGVuIGNvbm5lY3Rpb25zLgog
ICAgIEhhc2hNYXA8dW5zaWduZWQsIFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24qPjo6aXRlcmF0
b3IgZW5kID0gbV9jb25uZWN0aW9uTWFwLmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDx1bnNpZ25l
ZCwgV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbio+OjppdGVyYXRvciBpdCA9IG1fY29ubmVjdGlv
bk1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgV2ViU29ja2V0U2VydmVy
Q29ubmVjdGlvbiogY29ubmVjdGlvbiA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFdlYlNvY2tldFNl
cnZlckNvbm5lY3Rpb24qIGNvbm5lY3Rpb24gPSBpdC0+dmFsdWU7CiAgICAgICAgIFdlYkluc3Bl
Y3RvclByb3h5KiBjbGllbnQgPSBtX2NsaWVudE1hcC5nZXQoY29ubmVjdGlvbi0+aWRlbnRpZmll
cigpKTsKICAgICAgICAgY2xvc2VDb25uZWN0aW9uKGNsaWVudCwgY29ubmVjdGlvbik7CiAgICAg
fQpAQCAtNzgsNyArNzgsNyBAQCBpbnQgV2ViSW5zcGVjdG9yU2VydmVyOjpyZWdpc3RlclBhZ2Uo
V2ViSW5zcGVjdG9yUHJveHkqIGNsaWVudCkKICNpZm5kZWYgQVNTRVJUX0RJU0FCTEVECiAgICAg
Q2xpZW50TWFwOjppdGVyYXRvciBlbmQgPSBtX2NsaWVudE1hcC5lbmQoKTsKICAgICBmb3IgKENs
aWVudE1hcDo6aXRlcmF0b3IgaXQgPSBtX2NsaWVudE1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpCi0gICAgICAgIEFTU0VSVChpdC0+c2Vjb25kICE9IGNsaWVudCk7CisgICAgICAgIEFTU0VS
VChpdC0+dmFsdWUgIT0gY2xpZW50KTsKICNlbmRpZgogCiAgICAgaW50IHBhZ2VJZCA9IG1fbmV4
dEF2YWlsYWJsZVBhZ2VJZCsrOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0luc3BlY3RvclNlcnZlci9XZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvV2ViU29ja2V0U2VydmVyQ29ubmVjdGlv
bi5jcHAKaW5kZXggNTcyMDZlYjdiYjUyYThkOGE4NDhkZjU5NjdhMTBjNGI3MGUwNzdhNS4uYmVk
YTUzZGI3YzRhNjUzNjY1OGZiZGJlODlhZTA4YmNlY2U1MDBmNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9XZWJTb2NrZXRTZXJ2ZXJDb25uZWN0
aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL1dl
YlNvY2tldFNlcnZlckNvbm5lY3Rpb24uY3BwCkBAIC0xMDYsOSArMTA2LDkgQEAgdm9pZCBXZWJT
b2NrZXRTZXJ2ZXJDb25uZWN0aW9uOjpzZW5kSFRUUFJlc3BvbnNlSGVhZGVyKGludCBzdGF0dXND
b2RlLCBjb25zdCBTdHIKICAgICBidWlsZGVyLmFwcGVuZCgiXHJcbiIpOwogICAgIEhUVFBIZWFk
ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGhlYWRlckZpZWxkcy5lbmQoKTsKICAgICBmb3Ig
KEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaGVhZGVyRmllbGRzLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBidWlsZGVyLmFwcGVuZChpdC0+Zmlyc3QpOwor
ICAgICAgICBidWlsZGVyLmFwcGVuZChpdC0+a2V5KTsKICAgICAgICAgYnVpbGRlci5hcHBlbmQo
IjogIik7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKGl0LT5zZWNvbmQgKyAiXHJcbiIpOworICAg
ICAgICBidWlsZGVyLmFwcGVuZChpdC0+dmFsdWUgKyAiXHJcbiIpOwogICAgIH0KICAgICBidWls
ZGVyLmFwcGVuZCgiXHJcbiIpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvSW5zcGVjdG9yU2VydmVyL3F0L1dlYkluc3BlY3RvclNlcnZlclF0LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvcXQvV2ViSW5zcGVjdG9yU2VydmVyUXQu
Y3BwCmluZGV4IDhkZTBmOTMyZGIyNjAzYWU4OTg4ZGViYjMwMjcxMjYwYzBjNmFjNTYuLmE5M2Vh
OTE2MmJjOWNhZjQxMDFmZTMzZDExZTYxMGIwYzJkNWVmODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvcXQvV2ViSW5zcGVjdG9yU2VydmVyUXQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvcXQvV2Vi
SW5zcGVjdG9yU2VydmVyUXQuY3BwCkBAIC04MywxNiArODMsMTYgQEAgdm9pZCBXZWJJbnNwZWN0
b3JTZXJ2ZXI6OmJ1aWxkUGFnZUxpc3QoVmVjdG9yPGNoYXI+JiBkYXRhLCBTdHJpbmcmIGNvbnRl
bnRUeXBlKQogICAgIGJ1aWxkZXIuYXBwZW5kKCJbICIpOwogICAgIENsaWVudE1hcDo6aXRlcmF0
b3IgZW5kID0gbV9jbGllbnRNYXAuZW5kKCk7CiAgICAgZm9yIChDbGllbnRNYXA6Oml0ZXJhdG9y
IGl0ID0gbV9jbGllbnRNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFdl
YlBhZ2VQcm94eSogd2ViUGFnZSA9IGl0LT5zZWNvbmQtPnBhZ2UoKTsKKyAgICAgICAgV2ViUGFn
ZVByb3h5KiB3ZWJQYWdlID0gaXQtPnZhbHVlLT5wYWdlKCk7CiAgICAgICAgIGlmIChpdCAhPSBt
X2NsaWVudE1hcC5iZWdpbigpKQogICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoIiwgIik7Ci0g
ICAgICAgIGJ1aWxkZXIuYXBwZW5kKCJ7IFwiaWRcIjogIiArIFN0cmluZzo6bnVtYmVyKGl0LT5m
aXJzdCkpOworICAgICAgICBidWlsZGVyLmFwcGVuZCgieyBcImlkXCI6ICIgKyBTdHJpbmc6Om51
bWJlcihpdC0+a2V5KSk7CiAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIsIFwidGl0bGVcIjogXCIi
KTsKICAgICAgICAgYnVpbGRlci5hcHBlbmQod2ViUGFnZS0+cGFnZVRpdGxlKCkpOwogICAgICAg
ICBidWlsZGVyLmFwcGVuZCgiXCIsIFwidXJsXCI6IFwiIik7CiAgICAgICAgIGJ1aWxkZXIuYXBw
ZW5kKHdlYlBhZ2UtPmFjdGl2ZVVSTCgpKTsKICAgICAgICAgYnVpbGRlci5hcHBlbmQoIlwiLCBc
Imluc3BlY3RvclVybFwiOiBcIiIpOwotICAgICAgICBidWlsZGVyLmFwcGVuZChyZW1vdGVJbnNw
ZWN0b3JQYWdlUGF0aCgpICsgU3RyaW5nOjpudW1iZXIoaXQtPmZpcnN0KSk7CisgICAgICAgIGJ1
aWxkZXIuYXBwZW5kKHJlbW90ZUluc3BlY3RvclBhZ2VQYXRoKCkgKyBTdHJpbmc6Om51bWJlcihp
dC0+a2V5KSk7CiAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCJcIiB9Iik7CiAgICAgfQogICAgIGJ1
aWxkZXIuYXBwZW5kKCIgXSIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwCmluZGV4IGFlZTMyNDA0MjQxYjQwMWVlZDll
NWZlMjU1OTk4Mzc2Yzk1MmMzZjguLmQ3YjI5NGZlMDcwZDk5ZTU4NTY2YzRmYzQyZmMyYzk3NjFk
YTMyMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVDb29y
ZGluYXRvclByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVl
Q29vcmRpbmF0b3JQcm94eS5jcHAKQEAgLTczLDcgKzczLDcgQEAgdm9pZCBMYXllclRyZWVDb29y
ZGluYXRvclByb3h5Ojp1cGRhdGVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGludCB0aWxlSUQs
IGNvbnMKICAgICAgICAgICAgIHN1cmZhY2UgPSBTaGFyZWFibGVTdXJmYWNlOjpjcmVhdGUodXBk
YXRlSW5mby5zdXJmYWNlSGFuZGxlKTsKICAgICAgICAgICAgIG1fc3VyZmFjZXMuYWRkKHRva2Vu
LCBzdXJmYWNlKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBzdXJmYWNlID0gaXQtPnNl
Y29uZDsKKyAgICAgICAgICAgIHN1cmZhY2UgPSBpdC0+dmFsdWU7CiAgICAgfSBlbHNlCiAgICAg
ICAgIHN1cmZhY2UgPSBTaGFyZWFibGVTdXJmYWNlOjpjcmVhdGUodXBkYXRlSW5mby5zdXJmYWNl
SGFuZGxlKTsKICNlbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTm90
aWZpY2F0aW9ucy9Ob3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb25QZXJt
aXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5jcHAKaW5kZXggMDc5MjI5ODVlNDU2NWYzYzczY2Fk
YzNhMGNmNDU1MjE3YzYxOTk2OS4uNGEwYzQ3NTI5MzdiODcyZDVkZTI2OWM5MTY5NGUyMjE4ZDMy
MGUxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL05vdGlmaWNhdGlvbnMv
Tm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9Ob3RpZmljYXRpb25zL05vdGlmaWNhdGlvblBlcm1pc3Npb25S
ZXF1ZXN0TWFuYWdlclByb3h5LmNwcApAQCAtNDMsNyArNDMsNyBAQCB2b2lkIE5vdGlmaWNhdGlv
blBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5OjppbnZhbGlkYXRlUmVxdWVzdHMoKQogICAg
IFBlbmRpbmdSZXF1ZXN0TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGVuZGluZ1JlcXVlc3Rz
LmJlZ2luKCk7CiAgICAgUGVuZGluZ1JlcXVlc3RNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1f
cGVuZGluZ1JlcXVlc3RzLmVuZCgpOwogICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAg
ICAgIGl0LT5zZWNvbmQtPmludmFsaWRhdGUoKTsKKyAgICAgICAgaXQtPnZhbHVlLT5pbnZhbGlk
YXRlKCk7CiAgICAgCiAgICAgbV9wZW5kaW5nUmVxdWVzdHMuY2xlYXIoKTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NQcm94eS5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzUHJveHku
Y3BwCmluZGV4IDQzZmEyZjRjYmIwNDA5MmIyYzE5MDJiZTkwY2E5MWU4ZDQ0NjA4NzUuLjM2OWFk
ZTJkZGMyNjUzMDNkODA0MmQ1ZTMzMmYwMmNhNDAyNDdkY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NQcm94eS5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc1Byb3h5LmNwcApAQCAt
MTQ2LDEwICsxNDYsMTAgQEAgdm9pZCBQbHVnaW5Qcm9jZXNzUHJveHk6OnBsdWdpblByb2Nlc3ND
cmFzaGVkT3JGYWlsZWRUb0xhdW5jaCgpCiAgICAgfQogCiAgICAgd2hpbGUgKCFtX3BlbmRpbmdH
ZXRTaXRlc1JlcGxpZXMuaXNFbXB0eSgpKQotICAgICAgICBkaWRHZXRTaXRlc1dpdGhEYXRhKFZl
Y3RvcjxTdHJpbmc+KCksIG1fcGVuZGluZ0dldFNpdGVzUmVwbGllcy5iZWdpbigpLT5maXJzdCk7
CisgICAgICAgIGRpZEdldFNpdGVzV2l0aERhdGEoVmVjdG9yPFN0cmluZz4oKSwgbV9wZW5kaW5n
R2V0U2l0ZXNSZXBsaWVzLmJlZ2luKCktPmtleSk7CiAKICAgICB3aGlsZSAoIW1fcGVuZGluZ0Ns
ZWFyU2l0ZURhdGFSZXBsaWVzLmlzRW1wdHkoKSkKLSAgICAgICAgZGlkQ2xlYXJTaXRlRGF0YSht
X3BlbmRpbmdDbGVhclNpdGVEYXRhUmVwbGllcy5iZWdpbigpLT5maXJzdCk7CisgICAgICAgIGRp
ZENsZWFyU2l0ZURhdGEobV9wZW5kaW5nQ2xlYXJTaXRlRGF0YVJlcGxpZXMuYmVnaW4oKS0+a2V5
KTsKIAogICAgIC8vIFRlbGwgdGhlIHBsdWctaW4gcHJvY2VzcyBtYW5hZ2VyIHRvIGZvcmdldCBh
Ym91dCB0aGlzIHBsdWctaW4gcHJvY2VzcyBwcm94eS4gVGhpcyBtYXkgY2F1c2UgdXMgdG8gYmUg
ZGVsZXRlZC4KICAgICBtX3BsdWdpblByb2Nlc3NNYW5hZ2VyLT5yZW1vdmVQbHVnaW5Qcm9jZXNz
UHJveHkodGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29u
dGV4dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5jcHAKaW5kZXgg
MjJlNGUyMDA2OTkwYmE0ZGE5YjY1MzE0ODAyNTVmZWY2MTIxNWJiOC4uYWE0Y2Y2NWE2MTdhMjAx
Y2Q1Mzg5MTJkNTY5YWY1M2Y3YzZjYWI1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYkNvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJD
b250ZXh0LmNwcApAQCAtMTAxOCw3ICsxMDE4LDcgQEAgc3RhdGljIFBhc3NSZWZQdHI8TXV0YWJs
ZURpY3Rpb25hcnk+IGNyZWF0ZURpY3Rpb25hcnlGcm9tSGFzaE1hcChjb25zdCBIYXNoTWFwPFMK
ICAgICBSZWZQdHI8TXV0YWJsZURpY3Rpb25hcnk+IHJlc3VsdCA9IE11dGFibGVEaWN0aW9uYXJ5
OjpjcmVhdGUoKTsKICAgICBIYXNoTWFwPFN0cmluZywgdWludDY0X3Q+Ojpjb25zdF9pdGVyYXRv
ciBlbmQgPSBtYXAuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPFN0cmluZywgdWludDY0X3Q+Ojpj
b25zdF9pdGVyYXRvciBpdCA9IG1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAg
IHJlc3VsdC0+c2V0KGl0LT5maXJzdCwgUmVmUHRyPFdlYlVJbnQ2ND4oV2ViVUludDY0OjpjcmVh
dGUoaXQtPnNlY29uZCkpLmdldCgpKTsKKyAgICAgICAgcmVzdWx0LT5zZXQoaXQtPmtleSwgUmVm
UHRyPFdlYlVJbnQ2ND4oV2ViVUludDY0OjpjcmVhdGUoaXQtPnZhbHVlKSkuZ2V0KCkpOwogICAg
IAogICAgIHJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViSWNvbkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJ
Y29uRGF0YWJhc2UuY3BwCmluZGV4IGMwYzcwNjE3YmUyN2FkNGQyMGM0MjBmMWRlNDM2OTE4M2Q1
MjkzMjMuLmQyYTEwNmZlMDZlY2MyOTFlNGZkODVlNWU5YzEwZDMyYmU5MjAzMDUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJY29uRGF0YWJhc2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJY29uRGF0YWJhc2UuY3BwCkBAIC0yNjMsMTQgKzI2
MywxNCBAQCB2b2lkIFdlYkljb25EYXRhYmFzZTo6ZGlkRmluaXNoVVJMSW1wb3J0KCkKICAgICBI
YXNoTWFwPHVpbnQ2NF90LCBTdHJpbmc+OjppdGVyYXRvciBlbmQgPSBtX3BlbmRpbmdMb2FkRGVj
aXNpb25VUkxNYXAuZW5kKCk7CiAgICAgCiAgICAgZm9yICg7IGkgIT0gZW5kOyArK2kpIHsKLSAg
ICAgICAgTE9HKEljb25EYXRhYmFzZSwgIldLMiBVSVByb2Nlc3MgcGVyZm9ybWluZyBkZWxheWVk
IGNhbGxiYWNrIG9uIGNhbGxiYWNrIElEICVpIGZvciBwYWdlIHVybCAlcyIsIChpbnQpaS0+Zmly
c3QsIGktPnNlY29uZC5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIEljb25Mb2FkRGVjaXNpb24g
ZGVjaXNpb24gPSBtX2ljb25EYXRhYmFzZUltcGwtPnN5bmNocm9ub3VzTG9hZERlY2lzaW9uRm9y
SWNvblVSTChpLT5zZWNvbmQsIDApOworICAgICAgICBMT0coSWNvbkRhdGFiYXNlLCAiV0syIFVJ
UHJvY2VzcyBwZXJmb3JtaW5nIGRlbGF5ZWQgY2FsbGJhY2sgb24gY2FsbGJhY2sgSUQgJWkgZm9y
IHBhZ2UgdXJsICVzIiwgKGludClpLT5rZXksIGktPnZhbHVlLmFzY2lpKCkuZGF0YSgpKTsKKyAg
ICAgICAgSWNvbkxvYWREZWNpc2lvbiBkZWNpc2lvbiA9IG1faWNvbkRhdGFiYXNlSW1wbC0+c3lu
Y2hyb25vdXNMb2FkRGVjaXNpb25Gb3JJY29uVVJMKGktPnZhbHVlLCAwKTsKIAogICAgICAgICAv
LyBEZWNpc2lvbnMgc2hvdWxkIG5ldmVyIGJlIHVua25vd24gYWZ0ZXIgdGhlIGluaXRhbCBpbXBv
cnQgaXMgY29tcGxldGUKICAgICAgICAgQVNTRVJUKGRlY2lzaW9uICE9IEljb25Mb2FkVW5rbm93
bik7CiAKICAgICAgICAgLy8gRklYTUUgKE11bHRpLVdlYlByb2Nlc3MpOiBXZSBuZWVkIHRvIGtu
b3cgd2hpY2ggY29ubmVjdGlvbiB0byBzZW5kIHRoaXMgbWVzc2FnZSB0by4KLSAgICAgICAgbV93
ZWJDb250ZXh0LT5zZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYkljb25EYXRhYmFzZVBy
b3h5OjpSZWNlaXZlZEljb25Mb2FkRGVjaXNpb24oc3RhdGljX2Nhc3Q8aW50PihkZWNpc2lvbiks
IGktPmZpcnN0KSk7CisgICAgICAgIG1fd2ViQ29udGV4dC0+c2VuZFRvQWxsUHJvY2Vzc2VzKE1l
c3NhZ2VzOjpXZWJJY29uRGF0YWJhc2VQcm94eTo6UmVjZWl2ZWRJY29uTG9hZERlY2lzaW9uKHN0
YXRpY19jYXN0PGludD4oZGVjaXNpb24pLCBpLT5rZXkpKTsKICAgICB9CiAgICAgCiAgICAgbV9w
ZW5kaW5nTG9hZERlY2lzaW9uVVJMTWFwLmNsZWFyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIuY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVyLmNwcAppbmRleCBmYmQ5YjVhZTQ2ZTQ0YWRk
MzlhYjE5YmVlZmVjMWM1NzE1NTFmMmY0Li4xZTUzNTc3OWFmZGMxNDZhNWVkNWFmZWUwOWQxYzMy
NmJmYTkxNzFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViTGF5ZXJU
cmVlUmVuZGVyZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJMYXllclRy
ZWVSZW5kZXJlci5jcHAKQEAgLTE4Myw3ICsxODMsNyBAQCB2b2lkIFdlYkxheWVyVHJlZVJlbmRl
cmVyOjphZGp1c3RQb3NpdGlvbkZvckZpeGVkTGF5ZXJzKCkKIAogICAgIExheWVyTWFwOjppdGVy
YXRvciBlbmQgPSBtX2ZpeGVkTGF5ZXJzLmVuZCgpOwogICAgIGZvciAoTGF5ZXJNYXA6Oml0ZXJh
dG9yIGl0ID0gbV9maXhlZExheWVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAg
IHRvVGV4dHVyZU1hcHBlckxheWVyKGl0LT5zZWNvbmQpLT5zZXRTY3JvbGxQb3NpdGlvbkRlbHRh
SWZOZWVkZWQoZGVsdGEpOworICAgICAgICB0b1RleHR1cmVNYXBwZXJMYXllcihpdC0+dmFsdWUp
LT5zZXRTY3JvbGxQb3NpdGlvbkRlbHRhSWZOZWVkZWQoZGVsdGEpOwogfQogCiB2b2lkIFdlYkxh
eWVyVHJlZVJlbmRlcmVyOjpkaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbihjb25zdCBJbnRQb2ludCYg
cG9zaXRpb24pCkBAIC0yMDYsNyArMjA2LDcgQEAgdm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6
c3luY0NhbnZhcyhXZWJMYXllcklEIGlkLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBjYW4KICAg
ICAgICAgY2FudmFzQmFja2luZ1N0b3JlID0gVGV4dHVyZU1hcHBlclN1cmZhY2VCYWNraW5nU3Rv
cmU6OmNyZWF0ZSgpOwogICAgICAgICBtX3N1cmZhY2VCYWNraW5nU3RvcmVzLnNldChpZCwgY2Fu
dmFzQmFja2luZ1N0b3JlKTsKICAgICB9IGVsc2UKLSAgICAgICAgY2FudmFzQmFja2luZ1N0b3Jl
ID0gaXQtPnNlY29uZDsKKyAgICAgICAgY2FudmFzQmFja2luZ1N0b3JlID0gaXQtPnZhbHVlOwog
CiAgICAgY2FudmFzQmFja2luZ1N0b3JlLT5zZXRHcmFwaGljc1N1cmZhY2UoZ3JhcGhpY3NTdXJm
YWNlVG9rZW4sIGNhbnZhc1NpemUpOwogICAgIGxheWVyLT5zZXRDb250ZW50c1RvTWVkaWEoY2Fu
dmFzQmFja2luZ1N0b3JlLmdldCgpKTsKQEAgLTIxNyw3ICsyMTcsNyBAQCB2b2lkIFdlYkxheWVy
VHJlZVJlbmRlcmVyOjpzZXRMYXllckNoaWxkcmVuKFdlYkxheWVySUQgaWQsIGNvbnN0IFZlY3Rv
cjxXZWJMYXllcgogewogICAgIGVuc3VyZUxheWVyKGlkKTsKICAgICBMYXllck1hcDo6aXRlcmF0
b3IgaXQgPSBtX2xheWVycy5maW5kKGlkKTsKLSAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IGl0
LT5zZWNvbmQ7CisgICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBpdC0+dmFsdWU7CiAgICAgVmVj
dG9yPEdyYXBoaWNzTGF5ZXIqPiBjaGlsZHJlbjsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgY2hpbGRJRHMuc2l6ZSgpOyArK2kpIHsKQEAgLTIzOSw3ICsyMzksNyBAQCB2b2lkIFdlYkxh
eWVyVHJlZVJlbmRlcmVyOjpzZXRMYXllckZpbHRlcnMoV2ViTGF5ZXJJRCBpZCwgY29uc3QgRmls
dGVyT3BlcmF0aW9ucwogICAgIExheWVyTWFwOjppdGVyYXRvciBpdCA9IG1fbGF5ZXJzLmZpbmQo
aWQpOwogICAgIEFTU0VSVChpdCAhPSBtX2xheWVycy5lbmQoKSk7CiAKLSAgICBHcmFwaGljc0xh
eWVyKiBsYXllciA9IGl0LT5zZWNvbmQ7CisgICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBpdC0+
dmFsdWU7CiAgICAgbGF5ZXItPnNldEZpbHRlcnMoZmlsdGVycyk7CiB9CiAjZW5kaWYKQEAgLTI1
MCw3ICsyNTAsNyBAQCB2b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpzZXRMYXllclN0YXRlKFdl
YkxheWVySUQgaWQsIGNvbnN0IFdlYkxheWVySW5mbyYgbGF5ZQogICAgIExheWVyTWFwOjppdGVy
YXRvciBpdCA9IG1fbGF5ZXJzLmZpbmQoaWQpOwogICAgIEFTU0VSVChpdCAhPSBtX2xheWVycy5l
bmQoKSk7CiAKLSAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IGl0LT5zZWNvbmQ7CisgICAgR3Jh
cGhpY3NMYXllciogbGF5ZXIgPSBpdC0+dmFsdWU7CiAKICAgICBsYXllci0+c2V0UmVwbGljYXRl
ZEJ5TGF5ZXIobGF5ZXJCeUlEKGxheWVySW5mby5yZXBsaWNhKSk7CiAgICAgbGF5ZXItPnNldE1h
c2tMYXllcihsYXllckJ5SUQobGF5ZXJJbmZvLm1hc2spKTsKQEAgLTM3Niw3ICszNzYsNyBAQCB2
b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjphc3NpZ25JbWFnZVRvTGF5ZXIoR3JhcGhpY3NMYXll
ciogbGF5ZXIsIGludDY0X3QgaW1hZwogCiAgICAgSGFzaE1hcDxpbnQ2NF90LCBSZWZQdHI8VGV4
dHVyZU1hcHBlckJhY2tpbmdTdG9yZT4gPjo6aXRlcmF0b3IgaXQgPSBtX2RpcmVjdGx5Q29tcG9z
aXRlZEltYWdlcy5maW5kKGltYWdlSUQpOwogICAgIEFTU0VSVChpdCAhPSBtX2RpcmVjdGx5Q29t
cG9zaXRlZEltYWdlcy5lbmQoKSk7Ci0gICAgbGF5ZXItPnNldENvbnRlbnRzVG9NZWRpYShpdC0+
c2Vjb25kLmdldCgpKTsKKyAgICBsYXllci0+c2V0Q29udGVudHNUb01lZGlhKGl0LT52YWx1ZS5n
ZXQoKSk7CiB9CiAKIHZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmNvbW1pdFRpbGVPcGVyYXRp
b25zKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJv
eHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAKaW5k
ZXggZTNjZGM4ODA5NjllMTU4Nzc0ODQ5ZTBiZjJmM2E2ZDUzMmFlM2M0YS4uMjhhMmJkMDJhYjA1
YTZjN2IxYTRiMjQwYzVmYWQzNTE3NWYzNjA0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAKQEAgLTI1Myw5ICsyNTMsOSBAQCBib29sIFdlYlByb2Nl
c3NQcm94eTo6Y2hlY2tVUkxSZWNlaXZlZEZyb21XZWJQcm9jZXNzKGNvbnN0IEtVUkwmIHVybCkK
ICAgICAvLyBJdGVtcyBpbiBiYWNrL2ZvcndhcmQgbGlzdCBoYXZlIGJlZW4gYWxyZWFkeSBjaGVj
a2VkLgogICAgIC8vIE9uZSBjYXNlIHdoZXJlIHdlIGRvbid0IGhhdmUgc2FuZGJveCBleHRlbnNp
b25zIGZvciBmaWxlIFVSTHMgaW4gYi9mIGxpc3QgaXMgaWYgdGhlIGxpc3QgaGFzIGJlZW4gcmVp
bnN0YXRlZCBhZnRlciBhIGNyYXNoIG9yIGEgYnJvd3NlciByZXN0YXJ0LgogICAgIGZvciAoV2Vi
QmFja0ZvcndhcmRMaXN0SXRlbU1hcDo6aXRlcmF0b3IgaXRlciA9IG1fYmFja0ZvcndhcmRMaXN0
SXRlbU1hcC5iZWdpbigpLCBlbmQgPSBtX2JhY2tGb3J3YXJkTGlzdEl0ZW1NYXAuZW5kKCk7IGl0
ZXIgIT0gZW5kOyArK2l0ZXIpIHsKLSAgICAgICAgaWYgKEtVUkwoS1VSTCgpLCBpdGVyLT5zZWNv
bmQtPnVybCgpKS5maWxlU3lzdGVtUGF0aCgpID09IHBhdGgpCisgICAgICAgIGlmIChLVVJMKEtV
UkwoKSwgaXRlci0+dmFsdWUtPnVybCgpKS5maWxlU3lzdGVtUGF0aCgpID09IHBhdGgpCiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKEtVUkwoS1VSTCgpLCBpdGVyLT5zZWNv
bmQtPm9yaWdpbmFsVVJMKCkpLmZpbGVTeXN0ZW1QYXRoKCkgPT0gcGF0aCkKKyAgICAgICAgaWYg
KEtVUkwoS1VSTCgpLCBpdGVyLT52YWx1ZS0+b3JpZ2luYWxVUkwoKSkuZmlsZVN5c3RlbVBhdGgo
KSA9PSBwYXRoKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0yNzgsMTUg
KzI3OCwxNSBAQCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6YWRkQmFja0ZvcndhcmRJdGVtKHVpbnQ2
NF90IGl0ZW1JRCwgY29uc3QgU3RyaW5nJiBvcmlnaW5hbAogCiAgICAgV2ViQmFja0ZvcndhcmRM
aXN0SXRlbU1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fYmFja0ZvcndhcmRMaXN0SXRlbU1hcC5h
ZGQoaXRlbUlELCAwKTsKICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgcmVz
dWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBXZWJCYWNrRm9yd2FyZExpc3RJdGVtOjpjcmVhdGUob3Jp
Z2luYWxVUkwsIHVybCwgdGl0bGUsIGJhY2tGb3J3YXJkRGF0YS5kYXRhKCksIGJhY2tGb3J3YXJk
RGF0YS5zaXplKCksIGl0ZW1JRCk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBX
ZWJCYWNrRm9yd2FyZExpc3RJdGVtOjpjcmVhdGUob3JpZ2luYWxVUkwsIHVybCwgdGl0bGUsIGJh
Y2tGb3J3YXJkRGF0YS5kYXRhKCksIGJhY2tGb3J3YXJkRGF0YS5zaXplKCksIGl0ZW1JRCk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICAvLyBVcGRhdGUgZXhpc3RpbmcgaXRlbS4KLSAg
ICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZC0+c2V0T3JpZ2luYWxVUkwob3JpZ2luYWxVUkwpOwot
ICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLT5zZXRVUkwodXJsKTsKLSAgICByZXN1bHQuaXRl
cmF0b3ItPnNlY29uZC0+c2V0VGl0bGUodGl0bGUpOwotICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vj
b25kLT5zZXRCYWNrRm9yd2FyZERhdGEoYmFja0ZvcndhcmREYXRhLmRhdGEoKSwgYmFja0Zvcndh
cmREYXRhLnNpemUoKSk7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+c2V0T3JpZ2luYWxV
Ukwob3JpZ2luYWxVUkwpOworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPnNldFVSTCh1cmwp
OworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPnNldFRpdGxlKHRpdGxlKTsKKyAgICByZXN1
bHQuaXRlcmF0b3ItPnZhbHVlLT5zZXRCYWNrRm9yd2FyZERhdGEoYmFja0ZvcndhcmREYXRhLmRh
dGEoKSwgYmFja0ZvcndhcmREYXRhLnNpemUoKSk7CiB9CiAKICNpZiBFTkFCTEUoUExVR0lOX1BS
T0NFU1MpCkBAIC01MDAsNyArNTAwLDcgQEAgc2l6ZV90IFdlYlByb2Nlc3NQcm94eTo6ZnJhbWVD
b3VudEluUGFnZShXZWJQYWdlUHJveHkqIHBhZ2UpIGNvbnN0CiB7CiAgICAgc2l6ZV90IHJlc3Vs
dCA9IDA7CiAgICAgZm9yIChIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8V2ViRnJhbWVQcm94eT4g
Pjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1fZnJhbWVNYXAuYmVnaW4oKTsgaXRlciAhPSBtX2Zy
YW1lTWFwLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgaWYgKGl0ZXItPnNlY29uZC0+cGFnZSgp
ID09IHBhZ2UpCisgICAgICAgIGlmIChpdGVyLT52YWx1ZS0+cGFnZSgpID09IHBhZ2UpCiAgICAg
ICAgICAgICArK3Jlc3VsdDsKICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy90ZXhtYXAvTGF5ZXJCYWNraW5nU3RvcmUuY3BwIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3RleG1hcC9MYXllckJhY2tpbmdTdG9yZS5jcHAKaW5k
ZXggNDNkYmUwY2JhNTFjYjc0NDJjZGJjNDc4YWJlYjFlYWY3NGUwOTVjZS4uZThiZmY4NjBlYzk4
OGE0MDFmMjUyYzliMzIwNmM5ZWVjYWMwNzcyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL3RleG1hcC9MYXllckJhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL3RleG1hcC9MYXllckJhY2tpbmdTdG9yZS5jcHAKQEAgLTgwLDE1ICs4MCwx
NSBAQCB2b2lkIExheWVyQmFja2luZ1N0b3JlOjp1cGRhdGVUaWxlKGludCBpZCwgY29uc3QgSW50
UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UgogewogICAgIEhhc2hNYXA8aW50LCBMYXllckJh
Y2tpbmdTdG9yZVRpbGU+OjppdGVyYXRvciBpdCA9IG1fdGlsZXMuZmluZChpZCk7CiAgICAgQVNT
RVJUKGl0ICE9IG1fdGlsZXMuZW5kKCkpOwotICAgIGl0LT5zZWNvbmQuaW5jcmVtZW50UmVwYWlu
dENvdW50KCk7Ci0gICAgaXQtPnNlY29uZC5zZXRCYWNrQnVmZmVyKHRhcmdldFJlY3QsIHNvdXJj
ZVJlY3QsIGJhY2tCdWZmZXIsIG9mZnNldCk7CisgICAgaXQtPnZhbHVlLmluY3JlbWVudFJlcGFp
bnRDb3VudCgpOworICAgIGl0LT52YWx1ZS5zZXRCYWNrQnVmZmVyKHRhcmdldFJlY3QsIHNvdXJj
ZVJlY3QsIGJhY2tCdWZmZXIsIG9mZnNldCk7CiB9CiAKIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVy
ZT4gTGF5ZXJCYWNraW5nU3RvcmU6OnRleHR1cmUoKSBjb25zdAogewogICAgIEhhc2hNYXA8aW50
LCBMYXllckJhY2tpbmdTdG9yZVRpbGU+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3RpbGVzLmVu
ZCgpOwogICAgIGZvciAoSGFzaE1hcDxpbnQsIExheWVyQmFja2luZ1N0b3JlVGlsZT46OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IHRleHR1cmUgPSBpdC0+c2Vjb25kLnRleHR1cmUoKTsK
KyAgICAgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IHRleHR1cmUgPSBpdC0+dmFsdWUudGV4dHVy
ZSgpOwogICAgICAgICBpZiAodGV4dHVyZSkKICAgICAgICAgICAgIHJldHVybiB0ZXh0dXJlOwog
ICAgIH0KQEAgLTExMiw3ICsxMTIsNyBAQCB2b2lkIExheWVyQmFja2luZ1N0b3JlOjpwYWludFRv
VGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBjb25zdAogICAgIEhh
c2hNYXA8aW50LCBMYXllckJhY2tpbmdTdG9yZVRpbGU+OjppdGVyYXRvciBlbmQgPSBtX3RpbGVz
LmVuZCgpOwogICAgIEZsb2F0UmVjdCBjb3ZlcmVkUmVjdDsKICAgICBmb3IgKEhhc2hNYXA8aW50
LCBMYXllckJhY2tpbmdTdG9yZVRpbGU+OjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIExheWVyQmFja2luZ1N0b3JlVGlsZSYgdGlsZSA9
IGl0LT5zZWNvbmQ7CisgICAgICAgIExheWVyQmFja2luZ1N0b3JlVGlsZSYgdGlsZSA9IGl0LT52
YWx1ZTsKICAgICAgICAgaWYgKCF0aWxlLnRleHR1cmUoKSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogCkBAIC0xNTYsNyArMTU2LDcgQEAgdm9pZCBMYXllckJhY2tpbmdTdG9yZTo6Y29tbWl0VGls
ZU9wZXJhdGlvbnMoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlcikKIAogICAgIEhhc2hNYXA8
aW50LCBMYXllckJhY2tpbmdTdG9yZVRpbGU+OjppdGVyYXRvciB0aWxlc0VuZCA9IG1fdGlsZXMu
ZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPGludCwgTGF5ZXJCYWNraW5nU3RvcmVUaWxlPjo6aXRl
cmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IHRpbGVzRW5kOyArK2l0KQotICAgICAg
ICBpdC0+c2Vjb25kLnN3YXBCdWZmZXJzKHRleHR1cmVNYXBwZXIpOworICAgICAgICBpdC0+dmFs
dWUuc3dhcEJ1ZmZlcnModGV4dHVyZU1hcHBlcik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9HZW9sb2NhdGlvbi9HZW9s
b2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyLmNw
cAppbmRleCBkNmJkYjhlMTUzMTQ1MGIxMmFiYzgyZDg2YjJmYzAxM2YxMzU0M2I3Li5mY2E3MWEx
ZDA5NWZlZWZhYmEwNWE2YTcyNWZkYjQzNjM1ODE0YjY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RN
YW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0dlb2xvY2F0aW9uL0dl
b2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyLmNwcApAQCAtNzQsNyArNzQsNyBAQCB2
b2lkIEdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyOjpjYW5jZWxSZXF1ZXN0Rm9y
R2VvbG9jYXRpb24oR2VvbG9jYXRpbwogICAgICAgICByZXR1cm47CiAKICAgICBtX2dlb2xvY2F0
aW9uVG9JRE1hcC5yZW1vdmUoaXQpOwotICAgIG1faWRUb0dlb2xvY2F0aW9uTWFwLnJlbW92ZShp
dC0+c2Vjb25kKTsKKyAgICBtX2lkVG9HZW9sb2NhdGlvbk1hcC5yZW1vdmUoaXQtPnZhbHVlKTsK
IH0KIAogdm9pZCBHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlcjo6ZGlkUmVjZWl2
ZUdlb2xvY2F0aW9uUGVybWlzc2lvbkRlY2lzaW9uKHVpbnQ2NF90IGdlb2xvY2F0aW9uSUQsIGJv
b2wgYWxsb3dlZCkKQEAgLTgzLDcgKzgzLDcgQEAgdm9pZCBHZW9sb2NhdGlvblBlcm1pc3Npb25S
ZXF1ZXN0TWFuYWdlcjo6ZGlkUmVjZWl2ZUdlb2xvY2F0aW9uUGVybWlzc2lvbkRlY2lzaW8KICAg
ICBpZiAoaXQgPT0gbV9pZFRvR2VvbG9jYXRpb25NYXAuZW5kKCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIEdlb2xvY2F0aW9uKiBnZW9sb2NhdGlvbiA9IGl0LT5zZWNvbmQ7CisgICAgR2VvbG9j
YXRpb24qIGdlb2xvY2F0aW9uID0gaXQtPnZhbHVlOwogICAgIGdlb2xvY2F0aW9uLT5zZXRJc0Fs
bG93ZWQoYWxsb3dlZCk7CiAKICAgICBtX2lkVG9HZW9sb2NhdGlvbk1hcC5yZW1vdmUoaXQpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00v
SW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxlTm9kZUhhbmRsZS5jcHAKaW5kZXggMGM0
Mjk1ZTYxMmNkZDc2ZjAzYTUzMTNkNDVlNmNlYzFmYjFlODU5Ni4uNzdlMDMwOTNkNWZkMGQ5NjQy
NGQzMTU0Zjc3Yzk0ZDQxOTRiMTZlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1
bmRsZU5vZGVIYW5kbGUuY3BwCkBAIC02OSwxMCArNjksMTAgQEAgUGFzc1JlZlB0cjxJbmplY3Rl
ZEJ1bmRsZU5vZGVIYW5kbGU+IEluamVjdGVkQnVuZGxlTm9kZUhhbmRsZTo6Z2V0T3JDcmVhdGUo
Tm9kZSoKIAogICAgIERPTUhhbmRsZUNhY2hlOjpBZGRSZXN1bHQgcmVzdWx0ID0gZG9tSGFuZGxl
Q2FjaGUoKS5hZGQobm9kZSwgMCk7CiAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAg
ICAgcmV0dXJuIFBhc3NSZWZQdHI8SW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlPihyZXN1bHQuaXRl
cmF0b3ItPnNlY29uZCk7CisgICAgICAgIHJldHVybiBQYXNzUmVmUHRyPEluamVjdGVkQnVuZGxl
Tm9kZUhhbmRsZT4ocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CiAKICAgICBSZWZQdHI8SW5qZWN0
ZWRCdW5kbGVOb2RlSGFuZGxlPiBub2RlSGFuZGxlID0gSW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxl
OjpjcmVhdGUobm9kZSk7Ci0gICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBub2RlSGFuZGxl
LmdldCgpOworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBub2RlSGFuZGxlLmdldCgpOwog
ICAgIHJldHVybiBub2RlSGFuZGxlLnJlbGVhc2UoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVSYW5n
ZUhhbmRsZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RP
TS9JbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlLmNwcAppbmRleCAxYjc0ZjAxMjQwMDhkYjNjMDc4
MjhlYTZmNmQyYzA1YWMwNTljMzA2Li5kNjAwMGFiOTEzMzI5Y2Q1N2RhYjNlM2ZkNjQwMTRjNzZl
OTUyZGMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0RPTS9JbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxl
LmNwcApAQCAtNDgsMTAgKzQ4LDEwIEBAIFBhc3NSZWZQdHI8SW5qZWN0ZWRCdW5kbGVSYW5nZUhh
bmRsZT4gSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6Z2V0T3JDcmVhdGUoUmFuCiAKICAgICBE
T01IYW5kbGVDYWNoZTo6QWRkUmVzdWx0IHJlc3VsdCA9IGRvbUhhbmRsZUNhY2hlKCkuYWRkKHJh
bmdlLCAwKTsKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXR1cm4gUGFz
c1JlZlB0cjxJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlPihyZXN1bHQuaXRlcmF0b3ItPnNlY29u
ZCk7CisgICAgICAgIHJldHVybiBQYXNzUmVmUHRyPEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU+
KHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwogCiAgICAgUmVmUHRyPEluamVjdGVkQnVuZGxlUmFu
Z2VIYW5kbGU+IHJhbmdlSGFuZGxlID0gSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6Y3JlYXRl
KHJhbmdlKTsKLSAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IHJhbmdlSGFuZGxlLmdldCgp
OworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSByYW5nZUhhbmRsZS5nZXQoKTsKICAgICBy
ZXR1cm4gcmFuZ2VIYW5kbGUucmVsZWFzZSgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL05vdGlmaWNhdGlvbnMvV2ViTm90aWZpY2F0aW9uTWFuYWdlci5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05vdGlmaWNhdGlvbnMvV2ViTm90aWZpY2F0aW9u
TWFuYWdlci5jcHAKaW5kZXggMmQ2NjdlZjVlMTcyYjFkOGNjZDg2M2U0MTcxYzZmNGI0MzRkMTg5
Ny4uMjUxYzQxMjQ1NGM1NTM3ZWFkMmViNDg1NWUzNmMxZTM4N2JhNGMxNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Ob3RpZmljYXRpb25zL1dlYk5vdGlmaWNhdGlvbk1h
bmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTm90aWZpY2F0aW9ucy9X
ZWJOb3RpZmljYXRpb25NYW5hZ2VyLmNwcApAQCAtOTksNyArOTksNyBAQCBOb3RpZmljYXRpb25D
bGllbnQ6OlBlcm1pc3Npb24gV2ViTm90aWZpY2F0aW9uTWFuYWdlcjo6cG9saWN5Rm9yT3JpZ2lu
KFdlYkNvcmU6OgogICAgIEFTU0VSVCghb3JpZ2luLT5pc1VuaXF1ZSgpKTsKICAgICBIYXNoTWFw
PFN0cmluZywgYm9vbD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wZXJtaXNzaW9uc01hcC5maW5k
KG9yaWdpbi0+dG9SYXdTdHJpbmcoKSk7CiAgICAgaWYgKGl0ICE9IG1fcGVybWlzc2lvbnNNYXAu
ZW5kKCkpCi0gICAgICAgIHJldHVybiBpdC0+c2Vjb25kID8gTm90aWZpY2F0aW9uQ2xpZW50OjpQ
ZXJtaXNzaW9uQWxsb3dlZCA6IE5vdGlmaWNhdGlvbkNsaWVudDo6UGVybWlzc2lvbkRlbmllZDsK
KyAgICAgICAgcmV0dXJuIGl0LT52YWx1ZSA/IE5vdGlmaWNhdGlvbkNsaWVudDo6UGVybWlzc2lv
bkFsbG93ZWQgOiBOb3RpZmljYXRpb25DbGllbnQ6OlBlcm1pc3Npb25EZW5pZWQ7CiAjZW5kaWYK
ICAgICAKICAgICByZXR1cm4gTm90aWZpY2F0aW9uQ2xpZW50OjpQZXJtaXNzaW9uTm90QWxsb3dl
ZDsKQEAgLTExNiw3ICsxMTYsNyBAQCBib29sIFdlYk5vdGlmaWNhdGlvbk1hbmFnZXI6OnNob3co
Tm90aWZpY2F0aW9uKiBub3RpZmljYXRpb24sIFdlYlBhZ2UqIHBhZ2UpCiAgICAgbV9ub3RpZmlj
YXRpb25JRE1hcC5zZXQobm90aWZpY2F0aW9uSUQsIG5vdGlmaWNhdGlvbik7CiAgICAgCiAgICAg
Tm90aWZpY2F0aW9uQ29udGV4dE1hcDo6aXRlcmF0b3IgaXQgPSBtX25vdGlmaWNhdGlvbkNvbnRl
eHRNYXAuYWRkKG5vdGlmaWNhdGlvbi0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBWZWN0b3I8
dWludDY0X3Q+KCkpLml0ZXJhdG9yOwotICAgIGl0LT5zZWNvbmQuYXBwZW5kKG5vdGlmaWNhdGlv
bklEKTsKKyAgICBpdC0+dmFsdWUuYXBwZW5kKG5vdGlmaWNhdGlvbklEKTsKIAogI2lmIEVOQUJM
RShOT1RJRklDQVRJT05TKQogICAgIG1fcHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlUHJveHk6OlNob3dOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLT50aXRsZSgp
LCBub3RpZmljYXRpb24tPmJvZHkoKSwgbm90aWZpY2F0aW9uLT5pY29uVVJMKCkuc3RyaW5nKCks
IG5vdGlmaWNhdGlvbi0+dGFnKCksIG5vdGlmaWNhdGlvbi0+c2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpLT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpLCBub3RpZmljYXRpb25JRCksIHBhZ2Ut
PnBhZ2VJRCgpKTsKQEAgLTE1MCw3ICsxNTAsNyBAQCB2b2lkIFdlYk5vdGlmaWNhdGlvbk1hbmFn
ZXI6OmNsZWFyTm90aWZpY2F0aW9ucyhXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0Kgog
ICAgIGlmIChpdCA9PSBtX25vdGlmaWNhdGlvbkNvbnRleHRNYXAuZW5kKCkpCiAgICAgICAgIHJl
dHVybjsKICAgICAKLSAgICBWZWN0b3I8dWludDY0X3Q+JiBub3RpZmljYXRpb25JRHMgPSBpdC0+
c2Vjb25kOworICAgIFZlY3Rvcjx1aW50NjRfdD4mIG5vdGlmaWNhdGlvbklEcyA9IGl0LT52YWx1
ZTsKICAgICBtX3Byb2Nlc3MtPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViTm90aWZp
Y2F0aW9uTWFuYWdlclByb3h5OjpDbGVhck5vdGlmaWNhdGlvbnMobm90aWZpY2F0aW9uSURzKSwg
cGFnZS0+cGFnZUlEKCkpOwogICAgIHNpemVfdCBjb3VudCA9IG5vdGlmaWNhdGlvbklEcy5zaXpl
KCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CkBAIC0yMzMsMTAg
KzIzMywxMCBAQCB2b2lkIFdlYk5vdGlmaWNhdGlvbk1hbmFnZXI6OnJlbW92ZU5vdGlmaWNhdGlv
bkZyb21Db250ZXh0TWFwKHVpbnQ2NF90IG5vdGlmaWNhdAogICAgIC8vIFRoaXMgaXMgYSBoZWxw
ZXIgZnVuY3Rpb24gZm9yIG1hbmFnaW5nIHRoZSBoYXNoIG1hcHMuCiAgICAgTm90aWZpY2F0aW9u
Q29udGV4dE1hcDo6aXRlcmF0b3IgaXQgPSBtX25vdGlmaWNhdGlvbkNvbnRleHRNYXAuZmluZChu
b3RpZmljYXRpb24tPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CiAgICAgQVNTRVJUKGl0ICE9
IG1fbm90aWZpY2F0aW9uQ29udGV4dE1hcC5lbmQoKSk7Ci0gICAgc2l6ZV90IGluZGV4ID0gaXQt
PnNlY29uZC5maW5kKG5vdGlmaWNhdGlvbklEKTsKKyAgICBzaXplX3QgaW5kZXggPSBpdC0+dmFs
dWUuZmluZChub3RpZmljYXRpb25JRCk7CiAgICAgQVNTRVJUKGluZGV4ICE9IG5vdEZvdW5kKTsK
LSAgICBpdC0+c2Vjb25kLnJlbW92ZShpbmRleCk7Ci0gICAgaWYgKGl0LT5zZWNvbmQuaXNFbXB0
eSgpKQorICAgIGl0LT52YWx1ZS5yZW1vdmUoaW5kZXgpOworICAgIGlmIChpdC0+dmFsdWUuaXNF
bXB0eSgpKQogICAgICAgICBtX25vdGlmaWNhdGlvbkNvbnRleHRNYXAucmVtb3ZlKGl0KTsKIH0K
ICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05l
dHNjYXBlL05QUnVudGltZU9iamVjdE1hcC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0TWFwLmNwcAppbmRleCAyYjExNWYxZTRl
ZDUwYWEzMTdkMDc4ODNjYzZmMjFmNTczZDRjYTdiLi43MTk1NzAxNjgzODQ2Njg2ZDYzODMzNmI1
MTY0MmQ1OTBhMDlhNWE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1Bs
dWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0TWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0TWFwLmNwcApAQCAt
MjEyLDcgKzIxMiw3IEBAIHZvaWQgTlBSdW50aW1lT2JqZWN0TWFwOjppbnZhbGlkYXRlKCkKICAg
ICBWZWN0b3I8TlBPYmplY3QqPiBvYmplY3RzOwogCiAgICAgZm9yIChIYXNoTWFwPE5QT2JqZWN0
KiwgSlNDOjpXZWFrPEpTTlBPYmplY3Q+ID46Oml0ZXJhdG9yIHB0ciA9IG1fanNOUE9iamVjdHMu
YmVnaW4oKSwgZW5kID0gbV9qc05QT2JqZWN0cy5lbmQoKTsgcHRyICE9IGVuZDsgKytwdHIpIHsK
LSAgICAgICAgSlNOUE9iamVjdCoganNOUE9iamVjdCA9IHB0ci0+c2Vjb25kLmdldCgpOworICAg
ICAgICBKU05QT2JqZWN0KiBqc05QT2JqZWN0ID0gcHRyLT52YWx1ZS5nZXQoKTsKICAgICAgICAg
aWYgKCFqc05QT2JqZWN0KSAvLyBTa2lwIHpvbWJpZXMuCiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgb2JqZWN0cy5hcHBlbmQoanNOUE9iamVjdC0+bGVha05QT2JqZWN0KCkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNj
YXBlUGx1Z2luLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2Fw
ZS9OZXRzY2FwZVBsdWdpbi5jcHAKaW5kZXggNGQ4MmNmZjAxNWRkNjIxZjNkYTNlMjQ2ZTdlODc1
MTdlNjQ1Yzc2NS4uOWZkODM2ZjJjYmFhZjcyODViMGZlZjhhOTdhOTI1NGJkNWY3NWMzMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNj
YXBlUGx1Z2luLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0
c2NhcGUvTmV0c2NhcGVQbHVnaW4uY3BwCkBAIC0xOTksOCArMTk5LDggQEAgTlBFcnJvciBOZXRz
Y2FwZVBsdWdpbjo6ZGVzdHJveVN0cmVhbShOUFN0cmVhbSogc3RyZWFtLCBOUFJlYXNvbiByZWFz
b24pCiAgICAgTmV0c2NhcGVQbHVnaW5TdHJlYW0qIHBsdWdpblN0cmVhbSA9IDA7CiAKICAgICBm
b3IgKFN0cmVhbXNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zdHJlYW1zLmJlZ2luKCksIGVu
ZCA9IG1fc3RyZWFtcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+
c2Vjb25kLT5ucFN0cmVhbSgpID09IHN0cmVhbSkgewotICAgICAgICAgICAgcGx1Z2luU3RyZWFt
ID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgaWYgKGl0LT52YWx1ZS0+bnBTdHJlYW0oKSA9
PSBzdHJlYW0pIHsKKyAgICAgICAgICAgIHBsdWdpblN0cmVhbSA9IGl0LT52YWx1ZS5nZXQoKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQpAQCAtMzg3LDcgKzM4Nyw3IEBA
IHZvaWQgTmV0c2NhcGVQbHVnaW46OnVuc2NoZWR1bGVUaW1lcih1bnNpZ25lZCB0aW1lcklEKQog
ICAgIGlmIChpdCA9PSBtX3RpbWVycy5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgT3du
UHRyPFRpbWVyPiB0aW1lciA9IGFkb3B0UHRyKGl0LT5zZWNvbmQpOworICAgIE93blB0cjxUaW1l
cj4gdGltZXIgPSBhZG9wdFB0cihpdC0+dmFsdWUpOwogICAgIG1fdGltZXJzLnJlbW92ZShpdCk7
CiAKICAgICB0aW1lci0+c3RvcCgpOwpAQCAtNzMwLDggKzczMCw4IEBAIHZvaWQgTmV0c2NhcGVQ
bHVnaW46OmZyYW1lRGlkRmluaXNoTG9hZGluZyh1aW50NjRfdCByZXF1ZXN0SUQpCiAgICAgaWYg
KGl0ID09IG1fcGVuZGluZ1VSTE5vdGlmaWNhdGlvbnMuZW5kKCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIFN0cmluZyB1cmwgPSBpdC0+c2Vjb25kLmZpcnN0OwotICAgIHZvaWQqIG5vdGlmaWNh
dGlvbkRhdGEgPSBpdC0+c2Vjb25kLnNlY29uZDsKKyAgICBTdHJpbmcgdXJsID0gaXQtPnZhbHVl
LmZpcnN0OworICAgIHZvaWQqIG5vdGlmaWNhdGlvbkRhdGEgPSBpdC0+dmFsdWUuc2Vjb25kOwog
CiAgICAgbV9wZW5kaW5nVVJMTm90aWZpY2F0aW9ucy5yZW1vdmUoaXQpOwogICAgIApAQCAtNzQ2
LDggKzc0Niw4IEBAIHZvaWQgTmV0c2NhcGVQbHVnaW46OmZyYW1lRGlkRmFpbCh1aW50NjRfdCBy
ZXF1ZXN0SUQsIGJvb2wgd2FzQ2FuY2VsbGVkKQogICAgIGlmIChpdCA9PSBtX3BlbmRpbmdVUkxO
b3RpZmljYXRpb25zLmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBTdHJpbmcgdXJsID0g
aXQtPnNlY29uZC5maXJzdDsKLSAgICB2b2lkKiBub3RpZmljYXRpb25EYXRhID0gaXQtPnNlY29u
ZC5zZWNvbmQ7CisgICAgU3RyaW5nIHVybCA9IGl0LT52YWx1ZS5maXJzdDsKKyAgICB2b2lkKiBu
b3RpZmljYXRpb25EYXRhID0gaXQtPnZhbHVlLnNlY29uZDsKIAogICAgIG1fcGVuZGluZ1VSTE5v
dGlmaWNhdGlvbnMucmVtb3ZlKGl0KTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAppbmRleCAwNzJhNjljOWNlYThkNjNlMzI0OGQ0
OTVkOTUzY2I0Njc4YmMyNzdiLi5hMTA2ZTQ2NzU5OTQ5MDEwYTM0MWM1MDUxODAyMWU3OGE1MTg4
MWU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2lu
Vmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZp
ZXcuY3BwCkBAIC0xNzAsOSArMTcwLDkgQEAgc3RhdGljIFN0cmluZyBidWlsZEhUVFBIZWFkZXJz
KGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBsb25nIGxvbmcmIGV4cGUKICAgICAK
ICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSByZXNwb25zZS5odHRwSGVh
ZGVyRmllbGRzKCkuZW5kKCk7CiAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPmZpcnN0LmNoYXJhY3RlcnMo
KSwgaXQtPmZpcnN0Lmxlbmd0aCgpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQt
PmtleS5jaGFyYWN0ZXJzKCksIGl0LT5rZXkubGVuZ3RoKCkpOwogICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZChzZXBhcmF0b3IuY2hhcmFjdGVycygpLCBzZXBhcmF0b3IubGVuZ3RoKCkpOwot
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+c2Vjb25kLmNoYXJhY3RlcnMoKSwgaXQt
PnNlY29uZC5sZW5ndGgoKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT52YWx1
ZS5jaGFyYWN0ZXJzKCksIGl0LT52YWx1ZS5sZW5ndGgoKSk7CiAgICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKCdcbicpOwogICAgIH0KICAgICAKQEAgLTI4Myw3ICsyODMsNyBAQCBQbHVnaW5W
aWV3Ojp+UGx1Z2luVmlldygpCiAKICAgICAvLyBDYW5jZWwgYWxsIHBlbmRpbmcgZnJhbWUgbG9h
ZHMuCiAgICAgZm9yIChGcmFtZUxvYWRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wZW5kaW5nRnJhbWVM
b2Fkcy5iZWdpbigpLCBlbmQgPSBtX3BlbmRpbmdGcmFtZUxvYWRzLmVuZCgpOyBpdCAhPSBlbmQ7
ICsraXQpCi0gICAgICAgIGl0LT5maXJzdC0+c2V0TG9hZExpc3RlbmVyKDApOworICAgICAgICBp
dC0+a2V5LT5zZXRMb2FkTGlzdGVuZXIoMCk7CiAKICAgICBpZiAobV9wbHVnaW4gJiYgbV9pc0lu
aXRpYWxpemVkKSB7CiAgICAgICAgIG1faXNCZWluZ0Rlc3Ryb3llZCA9IHRydWU7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0
b3IvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0xheWVyVHJlZUNvb3JkaW5hdG9yL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcAppbmRl
eCBhZTM5OTQ0MjI1ZDdmOWI5OWIyYmExYmY3YjAwOTc5NjFlYWFlYWRkLi42N2MxNGZlMmEwYTEy
YWI5MzA2ZjEwODg0MWQwM2FmYWU1MzdiODU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvTGF5ZXJUcmVlQ29vcmRpbmF0
b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVD
b29yZGluYXRvci9MYXllclRyZWVDb29yZGluYXRvci5jcHAKQEAgLTQyNCw3ICs0MjQsNyBAQCBp
bnQ2NF90IExheWVyVHJlZUNvb3JkaW5hdG9yOjphZG9wdEltYWdlQmFja2luZ1N0b3JlKEltYWdl
KiBpbWFnZSkKICAgICBIYXNoTWFwPGludDY0X3QsIGludD46Oml0ZXJhdG9yIGl0ID0gbV9kaXJl
Y3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5maW5kKGtleSk7CiAKICAgICBpZiAoaXQgIT0g
bV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5lbmQoKSkgewotICAgICAgICArKyhp
dC0+c2Vjb25kKTsKKyAgICAgICAgKysoaXQtPnZhbHVlKTsKICAgICAgICAgcmV0dXJuIGtleTsK
ICAgICB9CiAKQEAgLTQ0OSw5ICs0NDksOSBAQCB2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpy
ZWxlYXNlSW1hZ2VCYWNraW5nU3RvcmUoaW50NjRfdCBrZXkpCiAgICAgaWYgKGl0ID09IG1fZGly
ZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGl0LT5zZWNvbmQtLTsKKyAgICBpdC0+dmFsdWUtLTsKIAotICAgIGlmIChpdC0+c2Vjb25k
KQorICAgIGlmIChpdC0+dmFsdWUpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fZGlyZWN0bHlD
b21wb3NpdGVkSW1hZ2VSZWZDb3VudHMucmVtb3ZlKGl0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVDb29yZGluYXRvci9XZWJHcmFwaGlj
c0xheWVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVD
b29yZGluYXRvci9XZWJHcmFwaGljc0xheWVyLmNwcAppbmRleCAxOWNlNGQwMzE2Y2ZkMTk0ZDk3
NDJlMzFjZGQyMDBhMGY2ODRmMzAzLi5hNmQ1Zjc1MWI0ODliNWFhOWQ1N2Q0NTQ2Y2M2MDI4MmYw
NGVhMWZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5
ZXJUcmVlQ29vcmRpbmF0b3IvV2ViR3JhcGhpY3NMYXllci5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUNvb3JkaW5hdG9yL1dlYkdyYXBoaWNzTGF5
ZXIuY3BwCkBAIC01Myw3ICs1Myw3IEBAIFdlYkdyYXBoaWNzTGF5ZXIqIFdlYkdyYXBoaWNzTGF5
ZXI6OmxheWVyQnlJRChXZWJLaXQ6OldlYkxheWVySUQgaWQpCiAgICAgSGFzaE1hcDxXZWJMYXll
cklELCBXZWJHcmFwaGljc0xheWVyKj46Oml0ZXJhdG9yIGl0ID0gdGFibGUuZmluZChpZCk7CiAg
ICAgaWYgKGl0ID09IHRhYmxlLmVuZCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4g
aXQtPnNlY29uZDsKKyAgICByZXR1cm4gaXQtPnZhbHVlOwogfQogCiBzdGF0aWMgV2ViTGF5ZXJJ
RCB0b1dlYkxheWVySUQoR3JhcGhpY3NMYXllciogbGF5ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFja0ZvcndhcmRMaXN0UHJveHkuY3BwIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFByb3h5
LmNwcAppbmRleCA0Y2E0ZTVmZGI3MmNmY2VhYzY5NTQ1ZGQxN2Q5ZjdhMmNjODQ2ODM4Li5iZTgy
YTE5N2E3MzZkNjIzMmE1NDM3ZGE5YzI5MDJlYjA1Y2EzYTBiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFja0ZvcndhcmRMaXN0UHJveHkuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9yd2FyZExpc3RQ
cm94eS5jcHAKQEAgLTEzMCw5ICsxMzAsOSBAQCB2b2lkIFdlYkJhY2tGb3J3YXJkTGlzdFByb3h5
OjpyZW1vdmVJdGVtKHVpbnQ2NF90IGl0ZW1JRCkKICAgICBpZiAoaXQgPT0gaWRUb0hpc3RvcnlJ
dGVtTWFwKCkuZW5kKCkpCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgV2ViQ29yZTo6
cGFnZUNhY2hlKCktPnJlbW92ZShpdC0+c2Vjb25kLmdldCgpKTsKKyAgICBXZWJDb3JlOjpwYWdl
Q2FjaGUoKS0+cmVtb3ZlKGl0LT52YWx1ZS5nZXQoKSk7CiAKLSAgICBoaXN0b3J5SXRlbVRvSURN
YXAoKS5yZW1vdmUoaXQtPnNlY29uZCk7CisgICAgaGlzdG9yeUl0ZW1Ub0lETWFwKCkucmVtb3Zl
KGl0LT52YWx1ZSk7CiAgICAgaWRUb0hpc3RvcnlJdGVtTWFwKCkucmVtb3ZlKGl0KTsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdl
TWFjLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFj
Lm1tCmluZGV4IDQzZDM4MWVjZDM2ZDc2MTAxNzA4ZjY5YjcxYWZjOTE1ODMyMDZlZjIuLjYxMDk2
MmRkMjk5ZmU3YjRjODE2NjY2YzVlZjNiYTAyODExZWMyNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KQEAgLTEyMCw3ICsx
MjAsNyBAQCBzdGF0aWMgU3RyaW5nIGNvbW1hbmROYW1lRm9yU2VsZWN0b3JOYW1lKGNvbnN0IFN0
cmluZyYgc2VsZWN0b3JOYW1lKQogICAgIHN0YXRpYyBjb25zdCBTZWxlY3Rvck5hbWVNYXAqIGV4
Y2VwdGlvbk1hcCA9IGNyZWF0ZVNlbGVjdG9yRXhjZXB0aW9uTWFwKCk7CiAgICAgU2VsZWN0b3JO
YW1lTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGV4Y2VwdGlvbk1hcC0+ZmluZChzZWxlY3Rvck5h
bWUpOwogICAgIGlmIChpdCAhPSBleGNlcHRpb25NYXAtPmVuZCgpKQotICAgICAgICByZXR1cm4g
aXQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKIAogICAgIC8vIFJlbW92ZSB0
aGUgdHJhaWxpbmcgY29sb24uCiAgICAgLy8gTm8gbmVlZCB0byBjYXBpdGFsaXplIHRoZSBjb21t
YW5kIG5hbWUgc2luY2UgRWRpdG9yIGNvbW1hbmQgbmFtZXMgYXJlIG5vdCBjYXNlIHNlbnNpdGl2
ZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCmluZGV4IDZlYjhhYjdl
ZTcwN2I0NGJjOWY2MTQxYTFmMDJmYzJkN2I1MzJkNzkuLmI0MGE4ZWIzOWNiYTJmMzJjMzYxOWQw
NmMwYzRmNDY3MGE0NDJjY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNz
LmNwcApAQCAtMzM0LDcgKzMzNCw3IEBAIHZvaWQgV2ViUHJvY2Vzczo6dmlzaXRlZExpbmtTdGF0
ZUNoYW5nZWQoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkxpbmtIYXNoPiYgbGlua0hhCiAgICAgICAg
IEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxXZWJQYWdlR3JvdXBQcm94eT4gPjo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX3BhZ2VHcm91cE1hcC5iZWdpbigpOwogICAgICAgICBIYXNoTWFwPHVpbnQ2
NF90LCBSZWZQdHI8V2ViUGFnZUdyb3VwUHJveHk+ID46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1f
cGFnZUdyb3VwTWFwLmVuZCgpOwogICAgICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KQotICAg
ICAgICAgICAgUGFnZTo6dmlzaXRlZFN0YXRlQ2hhbmdlZChQYWdlR3JvdXA6OnBhZ2VHcm91cChp
dC0+c2Vjb25kLT5pZGVudGlmaWVyKCkpLCBsaW5rSGFzaGVzW2ldKTsKKyAgICAgICAgICAgIFBh
Z2U6OnZpc2l0ZWRTdGF0ZUNoYW5nZWQoUGFnZUdyb3VwOjpwYWdlR3JvdXAoaXQtPnZhbHVlLT5p
ZGVudGlmaWVyKCkpLCBsaW5rSGFzaGVzW2ldKTsKICAgICB9CiAKICAgICBwYWdlQ2FjaGUoKS0+
bWFya1BhZ2VzRm9yVmlzdGVkTGlua1N0eWxlUmVjYWxjKCk7CkBAIC0zNDYsNyArMzQ2LDcgQEAg
dm9pZCBXZWJQcm9jZXNzOjphbGxWaXNpdGVkTGlua1N0YXRlQ2hhbmdlZCgpCiAgICAgSGFzaE1h
cDx1aW50NjRfdCwgUmVmUHRyPFdlYlBhZ2VHcm91cFByb3h5PiA+Ojpjb25zdF9pdGVyYXRvciBp
dCA9IG1fcGFnZUdyb3VwTWFwLmJlZ2luKCk7CiAgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRy
PFdlYlBhZ2VHcm91cFByb3h5PiA+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BhZ2VHcm91cE1h
cC5lbmQoKTsKICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBQYWdlOjphbGxW
aXNpdGVkU3RhdGVDaGFuZ2VkKFBhZ2VHcm91cDo6cGFnZUdyb3VwKGl0LT5zZWNvbmQtPmlkZW50
aWZpZXIoKSkpOworICAgICAgICBQYWdlOjphbGxWaXNpdGVkU3RhdGVDaGFuZ2VkKFBhZ2VHcm91
cDo6cGFnZUdyb3VwKGl0LT52YWx1ZS0+aWRlbnRpZmllcigpKSk7CiAKICAgICBwYWdlQ2FjaGUo
KS0+bWFya1BhZ2VzRm9yVmlzdGVkTGlua1N0eWxlUmVjYWxjKCk7CiB9CkBAIC01MjIsNyArNTIy
LDcgQEAgV2ViUGFnZSogV2ViUHJvY2Vzczo6Zm9jdXNlZFdlYlBhZ2UoKSBjb25zdAogeyAgICAK
ICAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8V2ViUGFnZT4gPjo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gbV9wYWdlTWFwLmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRy
PFdlYlBhZ2U+ID46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wYWdlTWFwLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgewotICAgICAgICBXZWJQYWdlKiBwYWdlID0gKCppdCkuc2Vjb25kLmdldCgp
OworICAgICAgICBXZWJQYWdlKiBwYWdlID0gKCppdCkudmFsdWUuZ2V0KCk7CiAgICAgICAgIGlm
IChwYWdlLT53aW5kb3dBbmRXZWJQYWdlQXJlRm9jdXNlZCgpKQogICAgICAgICAgICAgcmV0dXJu
IHBhZ2U7CiAgICAgfQpAQCAtNTQwLDE0ICs1NDAsMTQgQEAgdm9pZCBXZWJQcm9jZXNzOjpjcmVh
dGVXZWJQYWdlKHVpbnQ2NF90IHBhZ2VJRCwgY29uc3QgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVy
cyYKICAgICAvLyBsaW5rKSB0aGUgV2ViUGFnZSBnZXRzIGNyZWF0ZWQgYm90aCBpbiB0aGUgc3lu
Y2hyb25vdXMgaGFuZGxlciBhbmQgdGhyb3VnaCB0aGUgbm9ybWFsIHdheS4gCiAgICAgSGFzaE1h
cDx1aW50NjRfdCwgUmVmUHRyPFdlYlBhZ2U+ID46OkFkZFJlc3VsdCByZXN1bHQgPSBtX3BhZ2VN
YXAuYWRkKHBhZ2VJRCwgMCk7CiAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAg
IEFTU0VSVCghcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOwotICAgICAgICByZXN1bHQuaXRlcmF0
b3ItPnNlY29uZCA9IFdlYlBhZ2U6OmNyZWF0ZShwYWdlSUQsIHBhcmFtZXRlcnMpOworICAgICAg
ICBBU1NFUlQoIXJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOworICAgICAgICByZXN1bHQuaXRlcmF0
b3ItPnZhbHVlID0gV2ViUGFnZTo6Y3JlYXRlKHBhZ2VJRCwgcGFyYW1ldGVycyk7CiAKICAgICAg
ICAgLy8gQmFsYW5jZWQgYnkgYW4gZW5hYmxlVGVybWluYXRpb24gaW4gcmVtb3ZlV2ViUGFnZS4K
ICAgICAgICAgZGlzYWJsZVRlcm1pbmF0aW9uKCk7CiAgICAgfQogCi0gICAgQVNTRVJUKHJlc3Vs
dC5pdGVyYXRvci0+c2Vjb25kKTsKKyAgICBBU1NFUlQocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7
CiB9CiAKIHZvaWQgV2ViUHJvY2Vzczo6cmVtb3ZlV2ViUGFnZSh1aW50NjRfdCBwYWdlSUQpCkBA
IC03ODQsMTEgKzc4NCwxMSBAQCBXZWJQYWdlR3JvdXBQcm94eSogV2ViUHJvY2Vzczo6d2ViUGFn
ZUdyb3VwKGNvbnN0IFdlYlBhZ2VHcm91cERhdGEmIHBhZ2VHcm91cERhdAogewogICAgIEhhc2hN
YXA8dWludDY0X3QsIFJlZlB0cjxXZWJQYWdlR3JvdXBQcm94eT4gPjo6QWRkUmVzdWx0IHJlc3Vs
dCA9IG1fcGFnZUdyb3VwTWFwLmFkZChwYWdlR3JvdXBEYXRhLnBhZ2VHcm91cElELCAwKTsKICAg
ICBpZiAocmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgQVNTRVJUKCFyZXN1bHQuaXRlcmF0
b3ItPnNlY29uZCk7Ci0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gV2ViUGFnZUdy
b3VwUHJveHk6OmNyZWF0ZShwYWdlR3JvdXBEYXRhKTsKKyAgICAgICAgQVNTRVJUKCFyZXN1bHQu
aXRlcmF0b3ItPnZhbHVlKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IFdlYlBh
Z2VHcm91cFByb3h5OjpjcmVhdGUocGFnZUdyb3VwRGF0YSk7CiAgICAgfQogCi0gICAgcmV0dXJu
IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLmdldCgpOworICAgIHJldHVybiByZXN1bHQuaXRlcmF0
b3ItPnZhbHVlLmdldCgpOwogfQogCiBzdGF0aWMgYm9vbCBjYW5QbHVnaW5IYW5kbGVSZXNwb25z
ZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKQEAgLTg4Nyw3ICs4ODcsNyBAQCBz
dGF0aWMgdm9pZCBmcm9tQ291bnRlZFNldFRvSGFzaE1hcChUeXBlQ291bnRTZXQqIGNvdW50ZWRT
ZXQsIEhhc2hNYXA8U3RyaW5nLCB1aQogewogICAgIFR5cGVDb3VudFNldDo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gY291bnRlZFNldC0+ZW5kKCk7CiAgICAgZm9yIChUeXBlQ291bnRTZXQ6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gY291bnRlZFNldC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAg
ICAgICBtYXAuc2V0KGl0LT5maXJzdCwgaXQtPnNlY29uZCk7CisgICAgICAgIG1hcC5zZXQoaXQt
PmtleSwgaXQtPnZhbHVlKTsKIH0KIAogc3RhdGljIHZvaWQgZ2V0V2ViQ29yZU1lbW9yeUNhY2hl
U3RhdGlzdGljcyhWZWN0b3I8SGFzaE1hcDxTdHJpbmcsIHVpbnQ2NF90PiA+JiByZXN1bHQpCkBA
IC0xMDYyLDcgKzEwNjIsNyBAQCB2b2lkIFdlYlByb2Nlc3M6OnNldFRleHRDaGVja2VyU3RhdGUo
Y29uc3QgVGV4dENoZWNrZXJTdGF0ZSYgdGV4dENoZWNrZXJTdGF0ZSkKIAogICAgIEhhc2hNYXA8
dWludDY0X3QsIFJlZlB0cjxXZWJQYWdlPiA+OjppdGVyYXRvciBlbmQgPSBtX3BhZ2VNYXAuZW5k
KCk7CiAgICAgZm9yIChIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8V2ViUGFnZT4gPjo6aXRlcmF0
b3IgaXQgPSBtX3BhZ2VNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFdl
YlBhZ2UqIHBhZ2UgPSAoKml0KS5zZWNvbmQuZ2V0KCk7CisgICAgICAgIFdlYlBhZ2UqIHBhZ2Ug
PSAoKml0KS52YWx1ZS5nZXQoKTsKICAgICAgICAgaWYgKGNvbnRpbnVvdXNTcGVsbENoZWNraW5n
VHVybmVkT2ZmKQogICAgICAgICAgICAgcGFnZS0+dW5tYXJrQWxsTWlzc3BlbGxpbmdzKCk7CiAg
ICAgICAgIGlmIChncmFtbWFyQ2hlY2tpbmdUdXJuZWRPZmYpCmRpZmYgLS1naXQgYS9Ub29scy9D
aGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZWNjZDYxNDU5YmM0YTMzM2E3ZTMxMTcy
ZGFhNDQ5YWRhMzI2NDRjMy4uMjdmYjdmNTZlZWUyODNlNWQ0NjlkMGJkMjhkN2YwZGEwYjU4NzUx
ZiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDQ1IEBACisyMDEyLTA3LTMwICBDYWlvIE1hcmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8g
IDxjYWlvLm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+CisKKyAgICAgICAgUmVuYW1lIGZpcnN0L3Nl
Y29uZCB0byBrZXkvdmFsdWUgaW4gSGFzaE1hcCBpdGVyYXRvcnMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyNzg0CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9N
b2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKE1vY2tXZWJTcGVlY2hJ
bnB1dENvbnRyb2xsZXI6OmFkZE1vY2tSZWNvZ25pdGlvblJlc3VsdCk6CisgICAgICAgICogRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vTm90aWZpY2F0aW9uUHJlc2VudGVyLmNwcDoKKyAgICAgICAg
KE5vdGlmaWNhdGlvblByZXNlbnRlcjo6c2ltdWxhdGVDbGljayk6CisgICAgICAgIChOb3RpZmlj
YXRpb25QcmVzZW50ZXI6OnNob3cpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L1Rlc3RSdW5uZXIvQ3BwQm91bmRDbGFzcy5jcHA6CisgICAgICAgIChDcHBCb3VuZENsYXNzOjp+
Q3BwQm91bmRDbGFzcyk6CisgICAgICAgIChDcHBCb3VuZENsYXNzOjppbnZva2UpOgorICAgICAg
ICAoQ3BwQm91bmRDbGFzczo6Z2V0UHJvcGVydHkpOgorICAgICAgICAoQ3BwQm91bmRDbGFzczo6
c2V0UHJvcGVydHkpOgorICAgICAgICAoQ3BwQm91bmRDbGFzczo6YmluZENhbGxiYWNrKToKKyAg
ICAgICAgKENwcEJvdW5kQ2xhc3M6OmJpbmRQcm9wZXJ0eSk6CisgICAgICAgICogRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vV2ViUHJlZmVyZW5jZXMuY3BwOgorICAgICAgICAoYXBwbHlGb250TWFw
KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5jcHA6Cisg
ICAgICAgIChXZWJWaWV3SG9zdDo6cHJpbnRSZXNvdXJjZURlc2NyaXB0aW9uKToKKyAgICAgICAg
KiBEdW1wUmVuZGVyVHJlZS9tYWMvTGF5b3V0VGVzdENvbnRyb2xsZXJNYWMubW06CisgICAgICAg
ICh3b3JsZElERm9yV29ybGQpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1
YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4v
QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJXaW4uY3BwOgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXI6On5BY2Nlc3NpYmlsaXR5Q29udHJvbGxlcik6CisgICAgICAgIChBY2Nlc3NpYmls
aXR5Q29udHJvbGxlcjo6d2luTm90aWZpY2F0aW9uUmVjZWl2ZWQpOgorICAgICAgICAqIER1bXBS
ZW5kZXJUcmVlL3dpbi9MYXlvdXRUZXN0Q29udHJvbGxlcldpbi5jcHA6CisgICAgICAgICh3b3Js
ZElERm9yV29ybGQpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2Ny
aXB0SW5Jc29sYXRlZFdvcmxkKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vUmVzb3Vy
Y2VMb2FkRGVsZWdhdGUuY3BwOgorICAgICAgICAoUmVzb3VyY2VMb2FkRGVsZWdhdGU6OmRlc2Ny
aXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdDIvRE9NV2luZG93RXh0ZW5zaW9uQmFzaWNfQnVuZGxlLmNwcDoKKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OkRPTVdpbmRvd0V4dGVuc2lvbkJhc2ljOjp3aWxsRGVzdHJveVBhZ2Up
OgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9ET01XaW5kb3dFeHRlbnNp
b25Ob0NhY2hlX0J1bmRsZS5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpET01XaW5kb3dF
eHRlbnNpb25Ob0NhY2hlOjp3aWxsRGVzdHJveVBhZ2UpOgorICAgICAgICAqIFdlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAo
V1RSOjpMYXlvdXRUZXN0Q29udHJvbGxlcjo6d29ybGRJREZvcldvcmxkKToKKyAgICAgICAgKFdU
Ujo6TGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKToK
KwogMjAxMi0wNy0zMCAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+
CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEyMzk2NiBhbmQgcjEyMzk2Ny4K
ZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL01vY2tXZWJTcGVlY2hJ
bnB1dENvbnRyb2xsZXIuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTW9ja1dl
YlNwZWVjaElucHV0Q29udHJvbGxlci5jcHAKaW5kZXggNzE2MjIyZjlhY2NmZThmZmJlMzU5OTc4
NTM4Mzc2NDcwNmM2NGUxZS4uMTNjOGZmMWVjNGMxY2RlNTUwNzY2OThkZmNmZTVlODcxMjZhODJl
YiAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTW9ja1dlYlNwZWVj
aElucHV0Q29udHJvbGxlci5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
TW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlci5jcHAKQEAgLTUyLDcgKzUyLDcgQEAgdm9pZCBN
b2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyOjphZGRNb2NrUmVjb2duaXRpb25SZXN1bHQoY29u
c3QgV2ViU3RyaW5nJiByZXMKICAgICAgICAgU3RyaW5nIGxhbmdTdHJpbmcgPSBTdHJpbmc6OmZy
b21VVEY4KGxhbmd1YWdlLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICBpZiAoIW1fcmVjb2duaXRp
b25SZXN1bHRzLmNvbnRhaW5zKGxhbmdTdHJpbmcpKQogICAgICAgICAgICAgbV9yZWNvZ25pdGlv
blJlc3VsdHMuc2V0KGxhbmdTdHJpbmcsIFZlY3RvcjxXZWJTcGVlY2hJbnB1dFJlc3VsdD4oKSk7
Ci0gICAgICAgIG1fcmVjb2duaXRpb25SZXN1bHRzLmZpbmQobGFuZ1N0cmluZyktPnNlY29uZC5h
cHBlbmQocmVzKTsKKyAgICAgICAgbV9yZWNvZ25pdGlvblJlc3VsdHMuZmluZChsYW5nU3RyaW5n
KS0+dmFsdWUuYXBwZW5kKHJlcyk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Ub29scy9EdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9Ob3RpZmljYXRpb25QcmVzZW50ZXIuY3BwIGIvVG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vTm90aWZpY2F0aW9uUHJlc2VudGVyLmNwcAppbmRleCAwYzU0
MDBmNWU5ZThmNzE3MGVjZjU5OWE4MWJkNDI2ZmJkNzcyOTFkLi5hMjE1ODhmNzQ0ZTVjM2Y1YWI3
MGRiZGIwM2MyNzVjNTA3MDhmMDNhIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9Ob3RpZmljYXRpb25QcmVzZW50ZXIuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL05vdGlmaWNhdGlvblByZXNlbnRlci5jcHAKQEAgLTc1LDcgKzc1LDcgQEAg
Ym9vbCBOb3RpZmljYXRpb25QcmVzZW50ZXI6OnNpbXVsYXRlQ2xpY2soY29uc3QgV2ViU3RyaW5n
JiB0aXRsZSkKICAgICBpZiAobV9hY3RpdmVOb3RpZmljYXRpb25zLmZpbmQoaWQpID09IG1fYWN0
aXZlTm90aWZpY2F0aW9ucy5lbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAg
IGNvbnN0IFdlYk5vdGlmaWNhdGlvbiYgbm90aWZpY2F0aW9uID0gbV9hY3RpdmVOb3RpZmljYXRp
b25zLmZpbmQoaWQpLT5zZWNvbmQ7CisgICAgY29uc3QgV2ViTm90aWZpY2F0aW9uJiBub3RpZmlj
YXRpb24gPSBtX2FjdGl2ZU5vdGlmaWNhdGlvbnMuZmluZChpZCktPnZhbHVlOwogICAgIFdlYk5v
dGlmaWNhdGlvbiBldmVudFRhcmdldChub3RpZmljYXRpb24pOwogICAgIGV2ZW50VGFyZ2V0LmRp
c3BhdGNoQ2xpY2tFdmVudCgpOwogICAgIHJldHVybiB0cnVlOwpAQCAtODksNyArODksNyBAQCBi
b29sIE5vdGlmaWNhdGlvblByZXNlbnRlcjo6c2hvdyhjb25zdCBXZWJOb3RpZmljYXRpb24mIG5v
dGlmaWNhdGlvbikKICAgICAgICAgV1RGOjpTdHJpbmcgcmVwbGFjZUlkKG5vdGlmaWNhdGlvbi5y
ZXBsYWNlSWQoKS5kYXRhKCksIG5vdGlmaWNhdGlvbi5yZXBsYWNlSWQoKS5sZW5ndGgoKSk7CiAg
ICAgICAgIGlmIChtX3JlcGxhY2VtZW50cy5maW5kKHJlcGxhY2VJZCkgIT0gbV9yZXBsYWNlbWVu
dHMuZW5kKCkpCiAgICAgICAgICAgICBwcmludGYoIlJFUExBQ0lORyBOT1RJRklDQVRJT04gJXNc
biIsCi0gICAgICAgICAgICAgICAgICAgbV9yZXBsYWNlbWVudHMuZmluZChyZXBsYWNlSWQpLT5z
ZWNvbmQudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgICAgbV9yZXBsYWNlbWVudHMu
ZmluZChyZXBsYWNlSWQpLT52YWx1ZS51dGY4KCkuZGF0YSgpKTsKIAogICAgICAgICBtX3JlcGxh
Y2VtZW50cy5zZXQocmVwbGFjZUlkLCBXVEY6OlN0cmluZyhpZGVudGlmaWVyLmRhdGEoKSwgaWRl
bnRpZmllci5sZW5ndGgoKSkpOwogICAgIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvQ3BwQm91bmRDbGFzcy5jcHAgYi9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL0NwcEJvdW5kQ2xhc3MuY3BwCmluZGV4IDliNGEz
YjY0NjQ1ZDA1N2I0MTcyZTFjN2RmYTA3YzdhNjJlNzdjZjguLjFiMjlkMmIwZjU1ZDAxZjczODcx
NDU3ODc3ZjlkYmRmMDZmMWI0OTEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL1Rlc3RSdW5uZXIvQ3BwQm91bmRDbGFzcy5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9DcHBCb3VuZENsYXNzLmNwcApAQCAtMjAzLDEwICsy
MDMsMTAgQEAgYm9vbCBDcHBOUE9iamVjdDo6c2V0UHJvcGVydHkoTlBPYmplY3QqIG5wT2JqLCBO
UElkZW50aWZpZXIgaWRlbnQsIGNvbnN0IE5QVmFyaWEKIENwcEJvdW5kQ2xhc3M6On5DcHBCb3Vu
ZENsYXNzKCkKIHsKICAgICBmb3IgKE1ldGhvZExpc3Q6Oml0ZXJhdG9yIGkgPSBtX21ldGhvZHMu
YmVnaW4oKTsgaSAhPSBtX21ldGhvZHMuZW5kKCk7ICsraSkKLSAgICAgICAgZGVsZXRlIGktPnNl
Y29uZDsKKyAgICAgICAgZGVsZXRlIGktPnZhbHVlOwogCiAgICAgZm9yIChQcm9wZXJ0eUxpc3Q6
Oml0ZXJhdG9yIGkgPSBtX3Byb3BlcnRpZXMuYmVnaW4oKTsgaSAhPSBtX3Byb3BlcnRpZXMuZW5k
KCk7ICsraSkKLSAgICAgICAgZGVsZXRlIGktPnNlY29uZDsKKyAgICAgICAgZGVsZXRlIGktPnZh
bHVlOwogCiAgICAgLy8gVW5yZWdpc3RlciBvdXJzZWx2ZXMgaWYgd2Ugd2VyZSBib3VuZCB0byBh
IGZyYW1lLgogICAgIGlmIChtX2JvdW5kVG9GcmFtZSkKQEAgLTIzNyw3ICsyMzcsNyBAQCBib29s
IENwcEJvdW5kQ2xhc3M6Omludm9rZShOUElkZW50aWZpZXIgaWRlbnQsCiAgICAgICAgIH0KICAg
ICAgICAgY2FsbGJhY2sgPSBtX2ZhbGxiYWNrQ2FsbGJhY2suZ2V0KCk7CiAgICAgfSBlbHNlCi0g
ICAgICAgIGNhbGxiYWNrID0gKCptZXRob2QpLnNlY29uZDsKKyAgICAgICAgY2FsbGJhY2sgPSAo
Km1ldGhvZCkudmFsdWU7CiAKICAgICAvLyBCdWlsZCBhIENwcEFyZ3VtZW50TGlzdCBhcmd1bWVu
dCB2ZWN0b3IgZnJvbSB0aGUgTlBWYXJpYW50cyBjb21pbmcgaW4uCiAgICAgQ3BwQXJndW1lbnRM
aXN0IGNwcEFyZ3VtZW50cyhhcmd1bWVudENvdW50KTsKQEAgLTI2MCw3ICsyNjAsNyBAQCBib29s
IENwcEJvdW5kQ2xhc3M6OmdldFByb3BlcnR5KE5QSWRlbnRpZmllciBpZGVudCwgTlBWYXJpYW50
KiByZXN1bHQpIGNvbnN0CiAgICAgfQogCiAgICAgQ3BwVmFyaWFudCBjcHBWYWx1ZTsKLSAgICBp
ZiAoIWNhbGxiYWNrLT5zZWNvbmQtPmdldFZhbHVlKCZjcHBWYWx1ZSkpCisgICAgaWYgKCFjYWxs
YmFjay0+dmFsdWUtPmdldFZhbHVlKCZjcHBWYWx1ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICBjcHBWYWx1ZS5jb3B5VG9OUFZhcmlhbnQocmVzdWx0KTsKICAgICByZXR1cm4gdHJ1ZTsK
QEAgLTI3NCw3ICsyNzQsNyBAQCBib29sIENwcEJvdW5kQ2xhc3M6OnNldFByb3BlcnR5KE5QSWRl
bnRpZmllciBpZGVudCwgY29uc3QgTlBWYXJpYW50KiB2YWx1ZSkKIAogICAgIENwcFZhcmlhbnQg
Y3BwVmFsdWU7CiAgICAgY3BwVmFsdWUuc2V0KCp2YWx1ZSk7Ci0gICAgcmV0dXJuICgqY2FsbGJh
Y2spLnNlY29uZC0+c2V0VmFsdWUoY3BwVmFsdWUpOworICAgIHJldHVybiAoKmNhbGxiYWNrKS52
YWx1ZS0+c2V0VmFsdWUoY3BwVmFsdWUpOwogfQogCiB2b2lkIENwcEJvdW5kQ2xhc3M6OmJpbmRD
YWxsYmFjayhjb25zdCBzdHJpbmcmIG5hbWUsIENhbGxiYWNrKiBjYWxsYmFjaykKQEAgLTI4Miw3
ICsyODIsNyBAQCB2b2lkIENwcEJvdW5kQ2xhc3M6OmJpbmRDYWxsYmFjayhjb25zdCBzdHJpbmcm
IG5hbWUsIENhbGxiYWNrKiBjYWxsYmFjaykKICAgICBOUElkZW50aWZpZXIgaWRlbnQgPSBXZWJC
aW5kaW5nczo6Z2V0U3RyaW5nSWRlbnRpZmllcihuYW1lLmNfc3RyKCkpOwogICAgIE1ldGhvZExp
c3Q6Oml0ZXJhdG9yIG9sZENhbGxiYWNrID0gbV9tZXRob2RzLmZpbmQoaWRlbnQpOwogICAgIGlm
IChvbGRDYWxsYmFjayAhPSBtX21ldGhvZHMuZW5kKCkpIHsKLSAgICAgICAgZGVsZXRlIG9sZENh
bGxiYWNrLT5zZWNvbmQ7CisgICAgICAgIGRlbGV0ZSBvbGRDYWxsYmFjay0+dmFsdWU7CiAgICAg
ICAgIGlmICghY2FsbGJhY2spIHsKICAgICAgICAgICAgIG1fbWV0aG9kcy5yZW1vdmUob2xkQ2Fs
bGJhY2spOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzA5LDcgKzMwOSw3IEBAIHZvaWQgQ3Bw
Qm91bmRDbGFzczo6YmluZFByb3BlcnR5KGNvbnN0IHN0cmluZyYgbmFtZSwgUHJvcGVydHlDYWxs
YmFjayogY2FsbGJhY2spCiAgICAgTlBJZGVudGlmaWVyIGlkZW50ID0gV2ViQmluZGluZ3M6Omdl
dFN0cmluZ0lkZW50aWZpZXIobmFtZS5jX3N0cigpKTsKICAgICBQcm9wZXJ0eUxpc3Q6Oml0ZXJh
dG9yIG9sZENhbGxiYWNrID0gbV9wcm9wZXJ0aWVzLmZpbmQoaWRlbnQpOwogICAgIGlmIChvbGRD
YWxsYmFjayAhPSBtX3Byb3BlcnRpZXMuZW5kKCkpIHsKLSAgICAgICAgZGVsZXRlIG9sZENhbGxi
YWNrLT5zZWNvbmQ7CisgICAgICAgIGRlbGV0ZSBvbGRDYWxsYmFjay0+dmFsdWU7CiAgICAgICAg
IGlmICghY2FsbGJhY2spIHsKICAgICAgICAgICAgIG1fcHJvcGVydGllcy5yZW1vdmUob2xkQ2Fs
bGJhY2spOwogICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vV2ViUHJlZmVyZW5jZXMuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vV2ViUHJlZmVyZW5jZXMuY3BwCmluZGV4IGM0ZGUwYWJjMTQ0NTBhMTA5YWFjYTdm
OTc3YTI5ZTg5MzliMjZjZTQuLjZlYzBlNDM0ZGRmNGUxZmY0YmM4M2Q3ZWU5NzYyMWYyZjg2MDQ1
MTggMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZlcmVu
Y2VzLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNl
cy5jcHAKQEAgLTE1Niw5ICsxNTYsOSBAQCB0eXBlZGVmIHZvaWQgKCpTZXRGb250RmFtaWx5V3Jh
cHBlcikoV2ViU2V0dGluZ3MqLCBjb25zdCBXZWJTdHJpbmcmLCBVU2NyaXB0Q29kZQogc3RhdGlj
IHZvaWQgYXBwbHlGb250TWFwKFdlYlNldHRpbmdzKiBzZXR0aW5ncywgY29uc3QgV2ViUHJlZmVy
ZW5jZXM6OlNjcmlwdEZvbnRGYW1pbHlNYXAmIG1hcCwgU2V0Rm9udEZhbWlseVdyYXBwZXIgc2V0
dGVyKQogewogICAgIGZvciAoV2ViUHJlZmVyZW5jZXM6OlNjcmlwdEZvbnRGYW1pbHlNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ZXIgPSBtYXAuYmVnaW4oKTsgaXRlciAhPSBtYXAuZW5kKCk7ICsraXRl
cikgewotICAgICAgICBjb25zdCBXZWJTdHJpbmcmIGZvbnQgPSBpdGVyLT5zZWNvbmQ7CisgICAg
ICAgIGNvbnN0IFdlYlN0cmluZyYgZm9udCA9IGl0ZXItPnZhbHVlOwogICAgICAgICBpZiAoIWZv
bnQuaXNOdWxsKCkgJiYgIWZvbnQuaXNFbXB0eSgpKQotICAgICAgICAgICAgKCpzZXR0ZXIpKHNl
dHRpbmdzLCBmb250LCBzdGF0aWNfY2FzdDxVU2NyaXB0Q29kZT4oaXRlci0+Zmlyc3QpKTsKKyAg
ICAgICAgICAgICgqc2V0dGVyKShzZXR0aW5ncywgZm9udCwgc3RhdGljX2Nhc3Q8VVNjcmlwdENv
ZGU+KGl0ZXItPmtleSkpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vV2ViVmlld0hvc3QuY3BwCmluZGV4IGJhNWVjZjBjODg3Yzc4NDViZTIxYTFmOGUwZGMy
NzMyODFiNDM0MDQuLmIzMmUxNDVlMDNlODJhNGZjMGRhM2E3MjY4MmZlNDhiZTgxMDM3Y2UgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcAor
KysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5jcHAKQEAgLTE3
NTQsNyArMTc1NCw3IEBAIHZvaWQgV2ViVmlld0hvc3Q6OnByaW50RnJhbWVVc2VyR2VzdHVyZVN0
YXR1cyhXZWJGcmFtZSogd2ViZnJhbWUsIGNvbnN0IGNoYXIqIG1zCiB2b2lkIFdlYlZpZXdIb3N0
OjpwcmludFJlc291cmNlRGVzY3JpcHRpb24odW5zaWduZWQgaWRlbnRpZmllcikKIHsKICAgICBS
ZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlSWRlbnRpZmllck1hcC5maW5kKGlk
ZW50aWZpZXIpOwotICAgIHByaW50ZigiJXMiLCBpdCAhPSBtX3Jlc291cmNlSWRlbnRpZmllck1h
cC5lbmQoKSA/IGl0LT5zZWNvbmQuY19zdHIoKSA6ICI8dW5rbm93bj4iKTsKKyAgICBwcmludGYo
IiVzIiwgaXQgIT0gbV9yZXNvdXJjZUlkZW50aWZpZXJNYXAuZW5kKCkgPyBpdC0+dmFsdWUuY19z
dHIoKSA6ICI8dW5rbm93bj4iKTsKIH0KIAogdm9pZCBXZWJWaWV3SG9zdDo6c2V0UGVuZGluZ0V4
dHJhRGF0YShQYXNzT3duUHRyPFRlc3RTaGVsbEV4dHJhRGF0YT4gZXh0cmFEYXRhKQpkaWZmIC0t
Z2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0xheW91dFRlc3RDb250cm9sbGVyTWFjLm1t
IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0xheW91dFRlc3RDb250cm9sbGVyTWFjLm1tCmlu
ZGV4IGEzMjI4NzE0MTNiOWQ1MjFmNTc0MGVhYTRiMjg5NTgxZWM4MDY1ODQuLjE1ZmFlMzQ2Y2Qy
MTYyMzUxZDRjNDQ4MDc2OTEwYjg4NDRlOTA3NmEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL21hYy9MYXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbQorKysgYi9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9tYWMvTGF5b3V0VGVzdENvbnRyb2xsZXJNYWMubW0KQEAgLTkwOSw4ICs5MDksOCBA
QCB1bnNpZ25lZCB3b3JsZElERm9yV29ybGQoV2ViU2NyaXB0V29ybGQgKndvcmxkKQogewogICAg
IFdvcmxkTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSB3b3JsZE1hcCgpLmVuZCgpOwogICAgIGZv
ciAoV29ybGRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gd29ybGRNYXAoKS5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQgPT0gd29ybGQpCi0gICAgICAg
ICAgICByZXR1cm4gaXQtPmZpcnN0OworICAgICAgICBpZiAoaXQtPnZhbHVlID09IHdvcmxkKQor
ICAgICAgICAgICAgcmV0dXJuIGl0LT5rZXk7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CkBAIC05
MzIsNyArOTMyLDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJ
bklzb2xhdGVkV29ybGQodW5zaWduZWQgd29ybGRJRCwgSlNPYmoKICAgICBpZiAoIXdvcmxkSUQp
CiAgICAgICAgIHdvcmxkID0gW1dlYlNjcmlwdFdvcmxkIHdvcmxkXTsKICAgICBlbHNlIHsKLSAg
ICAgICAgUmV0YWluUHRyPFdlYlNjcmlwdFdvcmxkPiYgd29ybGRTbG90ID0gd29ybGRNYXAoKS5h
ZGQod29ybGRJRCwgMCkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgUmV0YWluUHRyPFdlYlNj
cmlwdFdvcmxkPiYgd29ybGRTbG90ID0gd29ybGRNYXAoKS5hZGQod29ybGRJRCwgMCkuaXRlcmF0
b3ItPnZhbHVlOwogICAgICAgICBpZiAoIXdvcmxkU2xvdCkKICAgICAgICAgICAgIHdvcmxkU2xv
dC5hZG9wdE5TKFtbV2ViU2NyaXB0V29ybGQgYWxsb2NdIGluaXRdKTsKICAgICAgICAgd29ybGQg
PSB3b3JsZFNsb3QuZ2V0KCk7CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4v
QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJXaW4uY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2lu
L0FjY2Vzc2liaWxpdHlDb250cm9sbGVyV2luLmNwcAppbmRleCA3ZjlhYTZjYzJlZTkyOWIyYmY4
ZWE0MTZmNWQ2NWJiMDU2ZTNlYWQxLi5lYjM4YjU0MzVjMTY5ZDJiZGZiMDU2OGM2M2VhMjAzYjVj
NmZhM2RjIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXJXaW4uY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9BY2Nlc3Np
YmlsaXR5Q29udHJvbGxlcldpbi5jcHAKQEAgLTU4LDcgKzU4LDcgQEAgQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXI6On5BY2Nlc3NpYmlsaXR5Q29udHJvbGxlcigpCiAgICAgICAgIFVuaG9va1dpbkV2
ZW50KG1fbm90aWZpY2F0aW9uc0V2ZW50SG9vayk7CiAKICAgICBmb3IgKEhhc2hNYXA8UGxhdGZv
cm1VSUVsZW1lbnQsIEpTT2JqZWN0UmVmPjo6aXRlcmF0b3IgaXQgPSBtX25vdGlmaWNhdGlvbkxp
c3RlbmVycy5iZWdpbigpOyBpdCAhPSBtX25vdGlmaWNhdGlvbkxpc3RlbmVycy5lbmQoKTsgKytp
dCkKLSAgICAgICAgSlNWYWx1ZVVucHJvdGVjdChmcmFtZS0+Z2xvYmFsQ29udGV4dCgpLCBpdC0+
c2Vjb25kKTsKKyAgICAgICAgSlNWYWx1ZVVucHJvdGVjdChmcmFtZS0+Z2xvYmFsQ29udGV4dCgp
LCBpdC0+dmFsdWUpOwogfQogCiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlD
b250cm9sbGVyOjplbGVtZW50QXRQb2ludChpbnQgeCwgaW50IHkpCkBAIC0yOTMsNyArMjkzLDcg
QEAgdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVu
ZXIoKQogdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6d2luTm90aWZpY2F0aW9uUmVjZWl2
ZWQoUGxhdGZvcm1VSUVsZW1lbnQgZWxlbWVudCwgY29uc3Qgc3RyaW5nJiBldmVudE5hbWUpCiB7
CiAgICAgZm9yIChIYXNoTWFwPFBsYXRmb3JtVUlFbGVtZW50LCBKU09iamVjdFJlZj46Oml0ZXJh
dG9yIGl0ID0gbV9ub3RpZmljYXRpb25MaXN0ZW5lcnMuYmVnaW4oKTsgaXQgIT0gbV9ub3RpZmlj
YXRpb25MaXN0ZW5lcnMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgQ09NUHRyPElTZXJ2aWNlUHJv
dmlkZXI+IHRoaXNTZXJ2aWNlUHJvdmlkZXIoUXVlcnksIGl0LT5maXJzdCk7CisgICAgICAgIENP
TVB0cjxJU2VydmljZVByb3ZpZGVyPiB0aGlzU2VydmljZVByb3ZpZGVyKFF1ZXJ5LCBpdC0+a2V5
KTsKICAgICAgICAgaWYgKCF0aGlzU2VydmljZVByb3ZpZGVyKQogICAgICAgICAgICAgY29udGlu
dWU7CiAKQEAgLTMxNiw3ICszMTYsNyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjp3
aW5Ob3RpZmljYXRpb25SZWNlaXZlZChQbGF0Zm9ybVVJRWxlbWVudCBlbGVtZW50LAogCiAgICAg
ICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBqc05vdGlmaWNhdGlvbihBZG9wdCwgSlNTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoZXZlbnROYW1lLmNfc3RyKCkpKTsKICAgICAgICAgSlNW
YWx1ZVJlZiBhcmd1bWVudCA9IEpTVmFsdWVNYWtlU3RyaW5nKGZyYW1lLT5nbG9iYWxDb250ZXh0
KCksIGpzTm90aWZpY2F0aW9uLmdldCgpKTsKLSAgICAgICAgSlNPYmplY3RDYWxsQXNGdW5jdGlv
bihmcmFtZS0+Z2xvYmFsQ29udGV4dCgpLCBpdC0+c2Vjb25kLCBOVUxMLCAxLCAmYXJndW1lbnQs
IE5VTEwpOworICAgICAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9uKGZyYW1lLT5nbG9iYWxDb250
ZXh0KCksIGl0LT52YWx1ZSwgMCwgMSwgJmFyZ3VtZW50LCAwKTsKICAgICB9CiB9CiAKZGlmZiAt
LWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9MYXlvdXRUZXN0Q29udHJvbGxlcldpbi5j
cHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJXaW4uY3Bw
CmluZGV4IGZmYzNkMjZkY2RlMjkxZmM2YWU1Y2E4NWEyNTI0ZGM3ZmNkMGZmNDcuLjA0MzA4MDRj
NmEzNzY1MjJmN2JlN2I2ZDdhNjI0ZDRkMWE5MzIxZmQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL3dpbi9MYXlvdXRUZXN0Q29udHJvbGxlcldpbi5jcHAKKysrIGIvVG9vbHMvRHVt
cFJlbmRlclRyZWUvd2luL0xheW91dFRlc3RDb250cm9sbGVyV2luLmNwcApAQCAtMTI0Niw4ICsx
MjQ2LDggQEAgdW5zaWduZWQgd29ybGRJREZvcldvcmxkKElXZWJTY3JpcHRXb3JsZCogd29ybGQp
CiB7CiAgICAgV29ybGRNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHdvcmxkTWFwKCkuZW5kKCk7
CiAgICAgZm9yIChXb3JsZE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSB3b3JsZE1hcCgpLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnNlY29uZCA9PSB3b3JsZCkK
LSAgICAgICAgICAgIHJldHVybiBpdC0+Zmlyc3Q7CisgICAgICAgIGlmIChpdC0+dmFsdWUgPT0g
d29ybGQpCisgICAgICAgICAgICByZXR1cm4gaXQtPmtleTsKICAgICB9CiAKICAgICByZXR1cm4g
MDsKQEAgLTEyNzEsNyArMTI3MSw3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1
YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKHVuc2lnbmVkIHdvcmxkSUQsIEpTT2JqCiAgICAgICAg
IGlmIChGQUlMRUQoV2ViS2l0Q3JlYXRlSW5zdGFuY2UoX191dWlkb2YoV2ViU2NyaXB0V29ybGQp
LCAwLCBfX3V1aWRvZih3b3JsZCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmd29ybGQpKSkp
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgfSBlbHNlIHsKLSAgICAgICAgQ09NUHRyPElXZWJT
Y3JpcHRXb3JsZD4mIHdvcmxkU2xvdCA9IHdvcmxkTWFwKCkuYWRkKHdvcmxkSUQsIDApLml0ZXJh
dG9yLT5zZWNvbmQ7CisgICAgICAgIENPTVB0cjxJV2ViU2NyaXB0V29ybGQ+JiB3b3JsZFNsb3Qg
PSB3b3JsZE1hcCgpLmFkZCh3b3JsZElELCAwKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgIGlm
ICghd29ybGRTbG90ICYmIEZBSUxFRChXZWJLaXRDcmVhdGVJbnN0YW5jZShfX3V1aWRvZihXZWJT
Y3JpcHRXb3JsZCksIDAsIF9fdXVpZG9mKHdvcmxkU2xvdCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCoqPigmd29ybGRTbG90KSkpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB3b3JsZCA9
IHdvcmxkU2xvdDsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9SZXNvdXJj
ZUxvYWREZWxlZ2F0ZS5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vUmVzb3VyY2VMb2Fk
RGVsZWdhdGUuY3BwCmluZGV4IDI2YjcyMmE0ZWE1Y2RjNjRmMTM3Y2VmNzcyYzM0OGY2OTU0ODk3
NjQuLmE4Y2QzYmQwYzEwNmJmMjJiNDZkYWE5YzEzMmY2MzE4NjdiNWUxZjggMTAwNjQ0Ci0tLSBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9SZXNvdXJjZUxvYWREZWxlZ2F0ZS5jcHAKKysrIGIv
VG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1Jlc291cmNlTG9hZERlbGVnYXRlLmNwcApAQCAtNjYs
NyArNjYsNyBAQCB3c3RyaW5nIFJlc291cmNlTG9hZERlbGVnYXRlOjpkZXNjcmlwdGlvblN1aXRh
YmxlRm9yVGVzdFJlc3VsdCh1bnNpZ25lZCBsb25nIGlkZQogICAgIGlmIChpdCA9PSBtX3VybE1h
cC5lbmQoKSkKICAgICAgICAgcmV0dXJuIEwiPHVua25vd24+IjsKIAotICAgIHJldHVybiB1cmxT
dWl0YWJsZUZvclRlc3RSZXN1bHQoaXQtPnNlY29uZCk7CisgICAgcmV0dXJuIHVybFN1aXRhYmxl
Rm9yVGVzdFJlc3VsdChpdC0+dmFsdWUpOwogfQogCiB3c3RyaW5nIFJlc291cmNlTG9hZERlbGVn
YXRlOjpkZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChJV2ViVVJMUmVxdWVzdCogcmVx
dWVzdCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9ET01X
aW5kb3dFeHRlbnNpb25CYXNpY19CdW5kbGUuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXQyL0RPTVdpbmRvd0V4dGVuc2lvbkJhc2ljX0J1bmRsZS5jcHAKaW5kZXggOThiZmFi
MzVhZjQ2Y2Y0OWM2MmJjYzliMGE4NTk0NTdmNDhjYzFjMS4uNWIxMjk2ZjQ3ZDE5ZDI4YjlkZTdm
Y2U4ZDEzMWFhNDA1NDc2YmRkMSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXQyL0RPTVdpbmRvd0V4dGVuc2lvbkJhc2ljX0J1bmRsZS5jcHAKKysrIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL0RPTVdpbmRvd0V4dGVuc2lvbkJhc2ljX0J1bmRs
ZS5jcHAKQEAgLTE3MSw4ICsxNzEsOCBAQCB2b2lkIERPTVdpbmRvd0V4dGVuc2lvbkJhc2ljOjp3
aWxsRGVzdHJveVBhZ2UoV0tCdW5kbGVSZWYsIFdLQnVuZGxlUGFnZVJlZikKICAgICBIYXNoTWFw
PFdLQnVuZGxlRE9NV2luZG93RXh0ZW5zaW9uUmVmLCBpbnQ+OjppdGVyYXRvciBpdCA9IG1fZXh0
ZW5zaW9uVG9SZWNvcmRNYXAuYmVnaW4oKTsKICAgICBIYXNoTWFwPFdLQnVuZGxlRE9NV2luZG93
RXh0ZW5zaW9uUmVmLCBpbnQ+OjppdGVyYXRvciBlbmQgPSBtX2V4dGVuc2lvblRvUmVjb3JkTWFw
LmVuZCgpOwogICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgdXBkYXRlRXh0
ZW5zaW9uU3RhdGVSZWNvcmQoaXQtPmZpcnN0LCBSZW1vdmVkKTsKLSAgICAgICAgV0tSZWxlYXNl
KGl0LT5maXJzdCk7CisgICAgICAgIHVwZGF0ZUV4dGVuc2lvblN0YXRlUmVjb3JkKGl0LT5rZXks
IFJlbW92ZWQpOworICAgICAgICBXS1JlbGVhc2UoaXQtPmtleSk7CiAgICAgfQogCiAgICAgbV9l
eHRlbnNpb25Ub1JlY29yZE1hcC5jbGVhcigpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXQyL0RPTVdpbmRvd0V4dGVuc2lvbk5vQ2FjaGVfQnVuZGxlLmNwcCBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9ET01XaW5kb3dFeHRlbnNpb25Ob0Nh
Y2hlX0J1bmRsZS5jcHAKaW5kZXggOGY2Y2Q3YjM3MzViNWFlMjc5ZDBhZGI3NzE4NWM1ZDI4MDcx
MWNhZS4uNDExZTExNWVhNDRmYmU0ODcwZTdmMWYzMWQ5MDVlODU3N2YwN2UyMiAxMDA2NDQKLS0t
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL0RPTVdpbmRvd0V4dGVuc2lvbk5v
Q2FjaGVfQnVuZGxlLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIv
RE9NV2luZG93RXh0ZW5zaW9uTm9DYWNoZV9CdW5kbGUuY3BwCkBAIC0xNzgsOCArMTc4LDggQEAg
dm9pZCBET01XaW5kb3dFeHRlbnNpb25Ob0NhY2hlOjp3aWxsRGVzdHJveVBhZ2UoV0tCdW5kbGVS
ZWYsIFdLQnVuZGxlUGFnZVJlZikKICAgICBIYXNoTWFwPFdLQnVuZGxlRE9NV2luZG93RXh0ZW5z
aW9uUmVmLCBpbnQ+OjppdGVyYXRvciBpdCA9IG1fZXh0ZW5zaW9uVG9SZWNvcmRNYXAuYmVnaW4o
KTsKICAgICBIYXNoTWFwPFdLQnVuZGxlRE9NV2luZG93RXh0ZW5zaW9uUmVmLCBpbnQ+OjppdGVy
YXRvciBlbmQgPSBtX2V4dGVuc2lvblRvUmVjb3JkTWFwLmVuZCgpOwogICAgIGZvciAoOyBpdCAh
PSBlbmQ7ICsraXQpIHsKLSAgICAgICAgdXBkYXRlRXh0ZW5zaW9uU3RhdGVSZWNvcmQoaXQtPmZp
cnN0LCBSZW1vdmVkKTsKLSAgICAgICAgV0tSZWxlYXNlKGl0LT5maXJzdCk7CisgICAgICAgIHVw
ZGF0ZUV4dGVuc2lvblN0YXRlUmVjb3JkKGl0LT5rZXksIFJlbW92ZWQpOworICAgICAgICBXS1Jl
bGVhc2UoaXQtPmtleSk7CiAgICAgfQogCiAgICAgbV9leHRlbnNpb25Ub1JlY29yZE1hcC5jbGVh
cigpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9M
YXlvdXRUZXN0Q29udHJvbGxlci5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVk
QnVuZGxlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcAppbmRleCA0OTgxYjNjNThjNzYwODc5ZjQz
M2E4NGM2NzZmMTA5MzE5ZmJmN2EwLi45NzZhMTUxOGNhZWFhYzM1M2VjM2EyM2ZmNGQ4MDdkMjdh
ZGMzZDY5IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L0xheW91dFRlc3RDb250cm9sbGVyLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcApAQCAtNDUyLDggKzQ1Miw4IEBA
IHVuc2lnbmVkIExheW91dFRlc3RDb250cm9sbGVyOjp3b3JsZElERm9yV29ybGQoV0tCdW5kbGVT
Y3JpcHRXb3JsZFJlZiB3b3JsZCkKIHsKICAgICBXb3JsZE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gd29ybGRNYXAoKS5lbmQoKTsKICAgICBmb3IgKFdvcmxkTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IHdvcmxkTWFwKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChp
dC0+c2Vjb25kID09IHdvcmxkKQotICAgICAgICAgICAgcmV0dXJuIGl0LT5maXJzdDsKKyAgICAg
ICAgaWYgKGl0LT52YWx1ZSA9PSB3b3JsZCkKKyAgICAgICAgICAgIHJldHVybiBpdC0+a2V5Owog
ICAgIH0KIAogICAgIHJldHVybiAwOwpAQCAtNDY3LDcgKzQ2Nyw3IEBAIHZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKEpTQ29udGV4dFJlZiBj
b250ZXh0LCB1CiAgICAgaWYgKCF3b3JsZElEKQogICAgICAgICB3b3JsZC5hZG9wdChXS0J1bmRs
ZVNjcmlwdFdvcmxkQ3JlYXRlV29ybGQoKSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIFdLUmV0YWlu
UHRyPFdLQnVuZGxlU2NyaXB0V29ybGRSZWY+JiB3b3JsZFNsb3QgPSB3b3JsZE1hcCgpLmFkZCh3
b3JsZElELCAwKS5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICBXS1JldGFpblB0cjxXS0J1bmRs
ZVNjcmlwdFdvcmxkUmVmPiYgd29ybGRTbG90ID0gd29ybGRNYXAoKS5hZGQod29ybGRJRCwgMCku
aXRlcmF0b3ItPnZhbHVlOwogICAgICAgICBpZiAoIXdvcmxkU2xvdCkKICAgICAgICAgICAgIHdv
cmxkU2xvdC5hZG9wdChXS0J1bmRsZVNjcmlwdFdvcmxkQ3JlYXRlV29ybGQoKSk7CiAgICAgICAg
IHdvcmxkID0gd29ybGRTbG90Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160729</attachid>
            <date>2012-08-27 08:57:31 -0700</date>
            <delta_ts>2012-08-27 15:12:54 -0700</delta_ts>
            <desc>For EWS</desc>
            <filename>bug-82784-20120827125722.patch</filename>
            <type>text/plain</type>
            <size>698242</size>
            <attacher name="Caio Marcelo de Oliveira Filho">cmarcelo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI2NzYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBi
NDYwN2UxMzczOWEyODJlZjQyOGFlMjE3MzdlN2U5ZmVlZTczMTBkLi4xOThkNTAzZWJmMTIwMTgy
ZDg1Yjg4ODliNjE5ZGFmZWM0MzQ5MDhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMTggQEAKKzIwMTItMDgtMjcgIENhaW8gTWFyY2VsbyBkZSBPbGl2ZWlyYSBGaWxobyAg
PGNhaW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KKworICAgICAgICBSZW5hbWUgZmlyc3Qvc2Vj
b25kIHRvIGtleS92YWx1ZSBpbiBIYXNoTWFwIGl0ZXJhdG9ycworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI3ODQKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0Lmg6Cisg
ICAgICAgIChKU0M6OkpTQ2FsbGJhY2tPYmplY3REYXRhOjpKU1ByaXZhdGVQcm9wZXJ0eU1hcDo6
Z2V0UHJpdmF0ZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNDYWxsYmFja09iamVjdERhdGE6
OkpTUHJpdmF0ZVByb3BlcnR5TWFwOjpzZXRQcml2YXRlUHJvcGVydHkpOgorICAgICAgICAoSlND
OjpKU0NhbGxiYWNrT2JqZWN0RGF0YTo6SlNQcml2YXRlUHJvcGVydHlNYXA6OnZpc2l0Q2hpbGRy
ZW4pOgorICAgICAgICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmg6CisgICAgICAg
IChKU0M6Ojo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgICogQVBJL0pTQ2xhc3NSZWYu
Y3BwOgorICAgICAgICAoT3BhcXVlSlNDbGFzczo6fk9wYXF1ZUpTQ2xhc3MpOgorICAgICAgICAo
T3BhcXVlSlNDbGFzc0NvbnRleHREYXRhOjpPcGFxdWVKU0NsYXNzQ29udGV4dERhdGEpOgorICAg
ICAgICAoT3BhcXVlSlNDbGFzczo6Y29udGV4dERhdGEpOgorICAgICAgICAqIGJ5dGVjb2RlL0Nv
ZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcCk6CisgICAgICAgIChK
U0M6OkV2YWxDb2RlQ2FjaGU6OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpuYW1lRm9yUmVnaXN0ZXIpOgorICAgICAgICAqIGJ5dGVjb2RlL0p1bXBUYWJsZS5oOgor
ICAgICAgICAoSlNDOjpTdHJpbmdKdW1wVGFibGU6Om9mZnNldEZvclZhbHVlKToKKyAgICAgICAg
KEpTQzo6U3RyaW5nSnVtcFRhYmxlOjpjdGlGb3JWYWx1ZSk6CisgICAgICAgICogYnl0ZWNvZGUv
TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3BwOgorICAgICAgICAoSlNDOjpMYXp5T3BlcmFuZFZh
bHVlUHJvZmlsZVBhcnNlcjo6Z2V0SWZQcmVzZW50KToKKyAgICAgICAgKiBieXRlY29kZS9TYW1w
bGluZ1Rvb2wuY3BwOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1Rvb2w6OmR1bXApOgorICAgICAg
ICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5
dGVjb2RlR2VuZXJhdG9yOjphZGRWYXIpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRv
cjo6YWRkR2xvYmFsVmFyKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmFkZENv
bnN0YW50KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmFkZENvbnN0YW50VmFs
dWUpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdExvYWQpOgorICAgICAg
ICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6YWRkU3RyaW5nQ29uc3RhbnQpOgorICAgICAgICAo
SlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdExhenlOZXdGdW5jdGlvbik6CisgICAgICAgICog
Ynl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHA6CisgICAgICAgIChKU0M6OlByb3BlcnR5TGlz
dE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgICogZGVidWdnZXIvRGVidWdnZXIuY3BwOgor
ICAgICAgICAqIGRmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlOjpydW4pOgorICAgICAg
ICAoSlNDOjpERkc6OkFyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2U6Om9ic2VydmVCYWRBcmd1
bWVudHNVc2UpOgorICAgICAgICAoSlNDOjpERkc6OkFyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhh
c2U6Om9ic2VydmVQcm9wZXJBcmd1bWVudHNVc2UpOgorICAgICAgICAoSlNDOjpERkc6OkFyZ3Vt
ZW50c1NpbXBsaWZpY2F0aW9uUGhhc2U6OmlzT0tUb09wdGltaXplKToKKyAgICAgICAgKEpTQzo6
REZHOjpBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlOjpyZW1vdmVBcmd1bWVudHNSZWZlcmVu
Y2luZ1BoYW50b21DaGlsZCk6CisgICAgICAgICogZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6QXNzZW1ibHlIZWxwZXJzOjpkZWNvZGVkQ29kZU1hcEZvcik6
CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlQ2FjaGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZUNhY2hlOjp+Qnl0ZUNvZGVDYWNoZSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVDYWNoZTo6Z2V0KToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpjZWxsQ29uc3RhbnQpOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmVTdGFja0Vu
dHJ5KToKKyAgICAgICAgKiBkZmcvREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2U6OnJ1bik6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlOjpub3RpY2VTdHJ1
Y3R1cmVDaGVjayk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQ2hlY2tIb2lzdGluZ1Bo
YXNlOjpub3RpY2VDbG9iYmVyKToKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAo
SlNDOjpIZWFwOjptYXJrUHJvdGVjdGVkT2JqZWN0cyk6CisgICAgICAgICogaGVhcC9IZWFwLmg6
CisgICAgICAgIChKU0M6OkhlYXA6OmZvckVhY2hQcm90ZWN0ZWRDZWxsKToKKyAgICAgICAgKiBo
ZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUU3R1YlJvdXRpbmVT
ZXQ6Om1hcmtTbG93KToKKyAgICAgICAgKEpTQzo6SklUU3R1YlJvdXRpbmVTZXQ6OmRlbGV0ZVVu
bWFya2VkSmV0dGlzb25lZFN0dWJSb3V0aW5lcyk6CisgICAgICAgICogaGVhcC9NYXJrU3RhY2su
Y3BwOgorICAgICAgICAoSlNDOjpNYXJrU3RhY2s6OmludGVybmFsQXBwZW5kKToKKyAgICAgICAg
KiBoZWFwL1dlYWsuaDoKKyAgICAgICAgKEpTQzo6d2Vha1JlbW92ZSk6CisgICAgICAgICogaml0
L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGUpOgorICAgICAgICAq
IGppdC9KSVRTdHVicy5jcHA6CisgICAgICAgIChKU0M6OkpJVFRodW5rczo6Y3RpU3R1Yik6Cisg
ICAgICAgICogcGFyc2VyL1BhcnNlci5jcHA6CisgICAgICAgIChKU0M6Ojo6cGFyc2VTdHJpY3RP
YmplY3RMaXRlcmFsKToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlLmNwcDoKKyAgICAgICAg
KEpTQzo6ZnVuY3Rpb25OYW1lQ291bnRQYWlyQ29tcGFyYXRvcik6CisgICAgICAgIChKU0M6OlBy
b2ZpbGU6OmRlYnVnUHJpbnREYXRhU2FtcGxlU3R5bGUpOgorICAgICAgICAqIHJ1bnRpbWUvSWRl
bnRpZmllci5jcHA6CisgICAgICAgIChKU0M6OklkZW50aWZpZXI6OmFkZCk6CisgICAgICAgICog
cnVudGltZS9KU0FjdGl2YXRpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0FjdGl2YXRpb246Omdl
dE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpKU0FjdGl2YXRpb246OnN5bWJvbFRh
YmxlUHV0V2l0aEF0dHJpYnV0ZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5jcHA6Cisg
ICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OnB1dCk6CisgICAgICAgIChKU0M6OlNw
YXJzZUFycmF5VmFsdWVNYXA6OnB1dERpcmVjdCk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5
VmFsdWVNYXA6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU0FycmF5OjplbnRlckRp
Y3Rpb25hcnlNb2RlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6ZGVmaW5lT3duTnVtZXJpY1By
b3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRl
eCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcik6Cisg
ICAgICAgIChKU0M6OkpTQXJyYXk6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgpOgorICAg
ICAgICAoSlNDOjpKU0FycmF5OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aCk6Cisg
ICAgICAgIChKU0M6OkpTQXJyYXk6OmRlbGV0ZVByb3BlcnR5QnlJbmRleCk6CisgICAgICAgIChK
U0M6OkpTQXJyYXk6OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpKU0FycmF5
OjpzZXRMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpzb3J0KToKKyAgICAgICAgKEpT
Qzo6SlNBcnJheTo6Y29tcGFjdEZvclNvcnRpbmcpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpj
aGVja0NvbnNpc3RlbmN5KToKKyAgICAgICAgKiBydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3Qu
Y3BwOgorICAgICAgICAoSlNDOjpKU1N5bWJvbFRhYmxlT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5h
bWVzKToKKyAgICAgICAgKiBydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaDoKKyAgICAgICAg
KEpTQzo6c3ltYm9sVGFibGVHZXQpOgorICAgICAgICAoSlNDOjpzeW1ib2xUYWJsZVB1dCk6Cisg
ICAgICAgIChKU0M6OnN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMpOgorICAgICAgICAqIHJ1
bnRpbWUvUmVnRXhwQ2FjaGUuY3BwOgorICAgICAgICAoSlNDOjpSZWdFeHBDYWNoZTo6aW52YWxp
ZGF0ZUNvZGUpOgorICAgICAgICAqIHJ1bnRpbWUvV2Vha0dDTWFwLmg6CisgICAgICAgIChKU0M6
OldlYWtHQ01hcDo6Y2xlYXIpOgorICAgICAgICAoSlNDOjpXZWFrR0NNYXA6OnNldCk6CisgICAg
ICAgICogdG9vbHMvUHJvZmlsZVRyZWVOb2RlLmg6CisgICAgICAgIChKU0M6OlByb2ZpbGVUcmVl
Tm9kZTo6c2FtcGxlQ2hpbGQpOgorICAgICAgICAoSlNDOjpQcm9maWxlVHJlZU5vZGU6OmNoaWxk
Q291bnQpOgorICAgICAgICAoSlNDOjpQcm9maWxlVHJlZU5vZGU6OmR1bXBJbnRlcm5hbCk6Cisg
ICAgICAgIChKU0M6OlByb2ZpbGVUcmVlTm9kZTo6Y29tcGFyZUVudHJpZXMpOgorCiAyMDEyLTA4
LTI3ICBNaWtoYWlsIFBvemRueWFrb3YgIDxtaWtoYWlsLnBvemRueWFrb3ZAaW50ZWwuY29tPgog
CiAgICAgICAgIFJlbmFtZSBSZWdpc3RlclByb3RvY29sSGFuZGxlciBBUEkgdG8gTmF2aWdhdG9y
Q29udGVudFV0aWxzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9X
VEYvQ2hhbmdlTG9nCmluZGV4IDgwODVlZWZhZDM3ZTdhM2Q5MTQxMTAzNmQ2M2QzOWI3NDNhZTkx
NWYuLmExNjc0Zjk4MDdjMGFiZmYxYjc3NDY3NzcwOTA3Mzc5NmM5Nzk1NWYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsNTcgQEAKKzIwMTItMDgtMjcgIENhaW8gTWFyY2VsbyBkZSBPbGl2ZWlyYSBGaWxobyAgPGNh
aW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KKworICAgICAgICBSZW5hbWUgZmlyc3Qvc2Vjb25k
IHRvIGtleS92YWx1ZSBpbiBIYXNoTWFwIGl0ZXJhdG9ycworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI3ODQKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9IYXNoQ291bnRlZFNldC5oOgorICAgICAg
ICAoV1RGOjo6OmFkZCk6CisgICAgICAgIChXVEY6Ojo6cmVtb3ZlKToKKyAgICAgICAgKFdURjo6
Y29weVRvVmVjdG9yKToKKyAgICAgICAgKiB3dGYvSGFzaEl0ZXJhdG9ycy5oOgorICAgICAgICAo
V1RGOjpIYXNoVGFibGVDb25zdEtleXNJdGVyYXRvcjo6Z2V0KToKKyAgICAgICAgKFdURjo6SGFz
aFRhYmxlQ29uc3RWYWx1ZXNJdGVyYXRvcjo6Z2V0KToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxl
VmFsdWVzSXRlcmF0b3I6OmdldCk6CisgICAgICAgICogd3RmL0hhc2hNYXAuaDoKKyAgICAgICAg
KFdURjo6S2V5VmFsdWVQYWlyS2V5RXh0cmFjdG9yOjpleHRyYWN0KToKKyAgICAgICAgKFdURjo6
SGFzaE1hcFZhbHVlVHJhaXRzOjppc0VtcHR5VmFsdWUpOgorICAgICAgICAoV1RGOjpIYXNoTWFw
VHJhbnNsYXRvcjo6dHJhbnNsYXRlKToKKyAgICAgICAgKFdURjo6SGFzaE1hcFRyYW5zbGF0b3JB
ZGFwdGVyOjp0cmFuc2xhdGUpOgorICAgICAgICAoV1RGOjo6OnNldCk6CisgICAgICAgIChXVEY6
Ojo6Z2V0KToKKyAgICAgICAgKFdURjo6Ojp0YWtlKToKKyAgICAgICAgKFdURjo6b3BlcmF0b3I9
PSk6CisgICAgICAgIChXVEY6OmRlbGV0ZUFsbFZhbHVlcyk6CisgICAgICAgIChXVEY6OmRlbGV0
ZUFsbEtleXMpOgorICAgICAgICBSZW1vdmUgZGVsZXRlQWxsUGFpckZpcnN0cy9TZWNvbmRzLgor
CisgICAgICAgICogd3RmL0hhc2hUYWJsZS5oOgorICAgICAgICAoV1RGOjpoYXNoVGFibGVTd2Fw
KToKKyAgICAgICAgKFdURjo6OjpjaGVja1RhYmxlQ29uc2lzdGVuY3lFeGNlcHRTaXplKToKKyAg
ICAgICAgKiB3dGYvSGFzaFRyYWl0cy5oOgorICAgICAgICAoV1RGOjpLZXlWYWx1ZVBhaXI6Oktl
eVZhbHVlUGFpcik6CisgICAgICAgIChLZXlWYWx1ZVBhaXIpOgorICAgICAgICAoV1RGOjpLZXlW
YWx1ZVBhaXJIYXNoVHJhaXRzOjpjb25zdHJ1Y3REZWxldGVkVmFsdWUpOgorICAgICAgICAoV1RG
OjpLZXlWYWx1ZVBhaXJIYXNoVHJhaXRzOjppc0RlbGV0ZWRWYWx1ZSk6CisgICAgICAgICogd3Rm
L01ldGFBbGxvY2F0b3IuY3BwOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjphZGRGcmVl
U3BhY2UpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjppbmNyZW1lbnRQYWdlT2NjdXBh
bmN5KToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6ZGVjcmVtZW50UGFnZU9jY3VwYW5j
eSk6CisgICAgICAgICogd3RmL1JlZkNvdW50ZWRMZWFrQ291bnRlci5jcHA6CisgICAgICAgIChX
VEY6OlJlZkNvdW50ZWRMZWFrQ291bnRlcjo6flJlZkNvdW50ZWRMZWFrQ291bnRlcik6CisgICAg
ICAgICogd3RmL1JlZlB0ckhhc2hNYXAuaDoKKyAgICAgICAgKFdURjo6OjpzZXQpOgorICAgICAg
ICAoV1RGOjo6OmdldCk6CisgICAgICAgIChXVEY6Ojo6aW5saW5lR2V0KToKKyAgICAgICAgKFdU
Rjo6Ojp0YWtlKToKKyAgICAgICAgKiB3dGYvU3BlY3RydW0uaDoKKyAgICAgICAgKFdURjo6U3Bl
Y3RydW06OmFkZCk6CisgICAgICAgIChXVEY6OlNwZWN0cnVtOjpnZXQpOgorICAgICAgICAoV1RG
OjpTcGVjdHJ1bTo6YnVpbGRMaXN0KToKKyAgICAgICAgKiB3dGYvVGhyZWFkaW5nUHRocmVhZHMu
Y3BwOgorICAgICAgICAoV1RGOjppZGVudGlmaWVyQnlQdGhyZWFkSGFuZGxlKToKKwogMjAxMi0w
OC0yNCAgQmVuamFtaW4gUG91bGFpbiAgPGJlbmphbWluQHdlYmtpdC5vcmc+CiAKICAgICAgICAg
VG91Y2ggUGxhdGZvcm0uaCB0byBzb2x2ZSBhIGJ1aWxkIGRlcGVuZGVuY3kgaXNzdWUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZwppbmRleCA5YTVhMjBlNmQ0Y2JmMTAyNzVmZmMzMGVhNzA4YzY3NDk0ZjVmZTY4Li4zMGMzMjU1
NDg2YmM3N2JhYTQ1MzE5MWZkZTM4NTM1ZGE0MTU5NjQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
ODY3IEBACisyMDEyLTA4LTI3ICBDYWlvIE1hcmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gIDxjYWlv
Lm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+CisKKyAgICAgICAgUmVuYW1lIGZpcnN0L3NlY29uZCB0
byBrZXkvdmFsdWUgaW4gSGFzaE1hcCBpdGVyYXRvcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyNzg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBNb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9u
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uOjpXYXRjaGVyczo6ZmluZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvbjo6V2F0Y2hlcnM6OnJlbW92ZSk6CisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SURCRGF0YWJhc2U6Om9iamVjdFN0b3JlTmFtZXMpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0
YWJhc2VCYWNrZW5kSW1wbDo6bWV0YWRhdGEpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJGYWN0b3J5
QmFja2VuZEltcGw6OmRlbGV0ZURhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkZhY3Rv
cnlCYWNrZW5kSW1wbDo6b3BlbkJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJG
YWN0b3J5QmFja2VuZEltcGw6Om9wZW4pOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lE
Qk9iamVjdFN0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjppbmRl
eE5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpwdXQpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklE
Qk9iamVjdFN0b3JlOjpkZWxldGVJbmRleCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjptZXRhZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjptYWtlSW5k
ZXhXcml0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6
OmRlbGV0ZUludGVybmFsKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2Fj
dGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6b2JqZWN0U3RvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246Om9iamVjdFN0b3JlRGVsZXRlZCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6b25BYm9ydCk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6ZGlzcGF0Y2hFdmVudCk6CisgICAgICAgICogTW9kdWxl
cy93ZWJkYXRhYmFzZS9BYnN0cmFjdERhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFi
c3RyYWN0RGF0YWJhc2U6OnBlcmZvcm1PcGVuQW5kVmVyaWZ5KToKKyAgICAgICAgKiBNb2R1bGVz
L3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRh
YmFzZVRyYWNrZXI6OmludGVycnVwdEFsbERhdGFiYXNlc0ZvckNvbnRleHQpOgorICAgICAgICAq
IE1vZHVsZXMvd2ViZGF0YWJhc2UvT3JpZ2luVXNhZ2VSZWNvcmQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6T3JpZ2luVXNhZ2VSZWNvcmQ6OmRpc2tVc2FnZSk6CisgICAgICAgICogTW9kdWxlcy93
ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OmFjcXVpcmVMb2NrKToKKyAgICAgICAgKFdl
YkNvcmU6OlNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OnJlbGVhc2VMb2NrKToKKyAgICAgICAg
KFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OnNodXRkb3duKToKKyAgICAgICAg
KiBNb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL0RhdGFiYXNlVHJhY2tlckNocm9taXVtLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6aW50ZXJydXB0QWxsRGF0YWJh
c2VzRm9yQ29udGV4dCk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9jaHJvbWl1bS9R
dW90YVRyYWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UXVvdGFUcmFja2VyOjpnZXREYXRh
YmFzZVNpemVBbmRTcGFjZUF2YWlsYWJsZVRvT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OlF1
b3RhVHJhY2tlcjo6dXBkYXRlRGF0YWJhc2VTaXplKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYnNv
Y2tldHMvV2ViU29ja2V0RGVmbGF0ZUZyYW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJT
b2NrZXRFeHRlbnNpb25EZWZsYXRlRnJhbWU6OnByb2Nlc3NSZXNwb25zZSk6CisgICAgICAgICog
TW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViU29ja2V0RXh0ZW5zaW9uRGlzcGF0Y2hlcjo6YXBwZW5kQWNjZXB0
ZWRFeHRlbnNpb24pOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjp+QVhPYmplY3RDYWNoZSk6CisgICAg
ICAgICogYmluZGluZ3MvZ29iamVjdC9ET01PYmplY3RDYWNoZS5jcHA6CisgICAgICAgIChXZWJL
aXQ6OkRPTU9iamVjdENhY2hlOjpjbGVhckJ5RnJhbWUpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0RPTU9iamVjdEhhc2hUYWJsZU1hcC5oOgorICAgICAgICAoV2ViQ29yZTo6RE9NT2JqZWN0SGFz
aFRhYmxlTWFwOjp+RE9NT2JqZWN0SGFzaFRhYmxlTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkRP
TU9iamVjdEhhc2hUYWJsZU1hcDo6Z2V0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUJp
bmRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2FjaGVET01TdHJ1Y3R1cmUpOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkpTRE9NR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0RPTUdsb2JhbE9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6Z2V0RE9NQ29uc3RydWN0
b3IpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpQYWdlU2NyaXB0RGVidWdTZXJ2ZXI6OmFkZExpc3RlbmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBhZ2VTY3JpcHREZWJ1Z1NlcnZlcjo6cmVtb3ZlTGlzdGVuZXIpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdENhY2hlZEZyYW1lRGF0YS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTY3JpcHRDYWNoZWRGcmFtZURhdGE6OlNjcmlwdENhY2hlZEZyYW1lRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDYWNoZWRGcmFtZURhdGE6OnJlc3RvcmUpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U2NyaXB0Q29udHJvbGxlcjo6flNjcmlwdENvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6U2NyaXB0Q29udHJvbGxlcjo6Y2xlYXJXaW5kb3dTaGVsbCk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JpcHRDb250cm9sbGVyOjphdHRhY2hEZWJ1Z2dlcik6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JpcHRDb250cm9sbGVyOjp1cGRhdGVEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jp
cHRDb250cm9sbGVyOjpjcmVhdGVSb290T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlw
dENvbnRyb2xsZXI6OmNvbGxlY3RJc29sYXRlZENvbnRleHRzKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcmlwdENvbnRyb2xsZXI6OmNsZWFudXBTY3JpcHRPYmplY3RzRm9yUGx1Z2luKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmNsZWFyU2NyaXB0T2JqZWN0cyk6CisgICAg
ICAgICogYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5oOgorICAgICAgICAoV2ViQ29yZTo6
U2NyaXB0Q29udHJvbGxlcjo6d2luZG93U2hlbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0
Q29udHJvbGxlcjo6ZXhpc3RpbmdXaW5kb3dTaGVsbCk6CisgICAgICAgICogYmluZGluZ3MvanMv
U2NyaXB0RGVidWdTZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2
ZXI6OnNldEJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6
OnJlbW92ZUJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6
Omhhc0JyZWFrcG9pbnQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRW
YWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZVNlcmlhbGl6ZXI6OmNoZWNrRm9yRHVw
bGljYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lU2VyaWFsaXplcjo6ZHVtcElmVGVybWlu
YWwpOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVTZXJpYWxpemVyOjp3cml0ZSk6CisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06CisgICAgICAgIChHZW5lcmF0
ZUltcGxlbWVudGF0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhG
bG9hdDY0QXJyYXkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhGbG9hdDY0QXJyYXk6OkdldFJh
d1RlbXBsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RmxvYXQ2NEFycmF5OjpHZXRUZW1wbGF0
ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEFjdGl2ZURPTU9i
amVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RBY3RpdmVET01PYmplY3Q6OkdldFJh
d1RlbXBsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdEFjdGl2ZURPTU9iamVjdDo6R2V0
VGVtcGxhdGUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RDdXN0
b21OYW1lZEdldHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RDdXN0b21OYW1lZEdl
dHRlcjo6R2V0UmF3VGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0Q3VzdG9tTmFt
ZWRHZXR0ZXI6OkdldFRlbXBsYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VjgvVjhUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RF
dmVudENvbnN0cnVjdG9yOjpHZXRSYXdUZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOFRl
c3RFdmVudENvbnN0cnVjdG9yOjpHZXRUZW1wbGF0ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50VGFyZ2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4
VGVzdEV2ZW50VGFyZ2V0OjpHZXRSYXdUZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOFRl
c3RFdmVudFRhcmdldDo6R2V0VGVtcGxhdGUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOFRlc3RFeGNlcHRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0RXhj
ZXB0aW9uOjpHZXRSYXdUZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RFeGNlcHRp
b246OkdldFRlbXBsYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhU
ZXN0SW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdEludGVyZmFjZTo6R2V0
UmF3VGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0SW50ZXJmYWNlOjpHZXRUZW1w
bGF0ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE1lZGlhUXVl
cnlMaXN0TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lcjo6R2V0UmF3VGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0TWVk
aWFRdWVyeUxpc3RMaXN0ZW5lcjo6R2V0VGVtcGxhdGUpOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9WOC9WOFRlc3ROYW1lZENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlY4VGVzdE5hbWVkQ29uc3RydWN0b3I6OkdldFJhd1RlbXBsYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OlY4VGVzdE5hbWVkQ29uc3RydWN0b3I6OkdldFRlbXBsYXRlKToKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Tm9kZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpWOFRlc3ROb2RlOjpHZXRSYXdUZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RO
b2RlOjpHZXRUZW1wbGF0ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4
VGVzdE9iai5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RPYmo6OkdldFJhd1RlbXBsYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdE9iajo6R2V0VGVtcGxhdGUpOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlOjpHZXRSYXdUZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OkdldFRlbXBsYXRlKToKKyAgICAgICAgKiBiaW5k
aW5ncy92OC9ET01XcmFwcGVyV29ybGQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NV3JhcHBl
cldvcmxkOjpkZWFsbG9jYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVdyYXBwZXJXb3JsZDo6
Z2V0T3JDcmVhdGVJc29sYXRlZFdvcmxkKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9OUFY4T2Jq
ZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZyZWVWOE5QT2JqZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6Om5wQ3JlYXRlVjhTY3JpcHRPYmplY3QpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Nj
cmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6
Y2xlYXJTY3JpcHRPYmplY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6
OnJlc2V0SXNvbGF0ZWRXb3JsZHMpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxl
cjo6ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29u
dHJvbGxlcjo6c2V0SXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2luKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdENvbnRyb2xsZXI6OmNsZWFudXBTY3JpcHRPYmplY3RzRm9yUGx1Z2luKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmNvbGxlY3RJc29sYXRlZENvbnRleHRz
KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L1Y4RE9NTWFwLmg6CisgICAgICAgIChXZWJDb3JlOjpXZWFrUmVm
ZXJlbmNlTWFwOjpyZW1vdmVJZlByZXNlbnQpOgorICAgICAgICAoV2ViQ29yZTo6V2Vha1JlZmVy
ZW5jZU1hcDo6dmlzaXQpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmVudW1lcmF0ZUdsb2JhbEhhbmRsZXMpOgorICAgICAgICAq
IGJpbmRpbmdzL3Y4L1Y4UGVyQ29udGV4dERhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhQ
ZXJDb250ZXh0RGF0YTo6ZGlzcG9zZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvbnBydW50aW1l
LmNwcDoKKyAgICAgICAgKiBicmlkZ2UvSWRlbnRpZmllclJlcC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJZGVudGlmaWVyUmVwOjpnZXQpOgorICAgICAgICAqIGJyaWRnZS9OUF9qc29iamVjdC5j
cHA6CisgICAgICAgIChPYmplY3RNYXA6OmFkZCk6CisgICAgICAgIChPYmplY3RNYXA6OnJlbW92
ZSk6CisgICAgICAgICogYnJpZGdlL2puaS9qc2MvSmF2YUNsYXNzSlNDLmNwcDoKKyAgICAgICAg
KEphdmFDbGFzczo6fkphdmFDbGFzcyk6CisgICAgICAgICogYnJpZGdlL3F0L3F0X2luc3RhbmNl
LmNwcDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OldlYWtNYXA6OnNldCk6CisgICAgICAgICog
YnJpZGdlL3J1bnRpbWVfcm9vdC5jcHA6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpSb290T2Jq
ZWN0OjppbnZhbGlkYXRlKToKKyAgICAgICAgKiBjc3MvQ1NTQ2FudmFzVmFsdWUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTQ2FudmFzVmFsdWU6OmNhbnZhc0NoYW5nZWQpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTQ2FudmFzVmFsdWU6OmNhbnZhc1Jlc2l6ZWQpOgorICAgICAgICAqIGNzcy9D
U1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y291bnRl
clRvQ1NTVmFsdWUpOgorICAgICAgICAqIGNzcy9DU1NDcm9zc2ZhZGVWYWx1ZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NDcm9zc2ZhZGVWYWx1ZTo6Y3Jvc3NmYWRlQ2hhbmdlZCk6CisgICAg
ICAgICogY3NzL0NTU0ZvbnRGYWNlU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0Zv
bnRGYWNlU291cmNlOjpnZXRGb250RGF0YSk6CisgICAgICAgICogY3NzL0NTU0ZvbnRTZWxlY3Rv
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250U2VsZWN0b3I6OmFkZEZvbnRGYWNlUnVs
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250U2VsZWN0b3I6OmdldEZvbnREYXRhKToKKyAg
ICAgICAgKiBjc3MvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjphZGRDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6cmVtb3ZlQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU0ltYWdlR2VuZXJhdG9yVmFsdWU6OmdldEltYWdlKToKKyAgICAgICAgKiBjc3MvQ1NTU2Vn
bWVudGVkRm9udEZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU2VnbWVudGVkRm9udEZh
Y2U6OmdldEZvbnREYXRhKToKKyAgICAgICAgKiBjc3MvQ1NTU2VsZWN0b3IuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTU2VsZWN0b3I6OnBhcnNlUHNldWRvVHlwZSk6CisgICAgICAgICogY3Nz
L0NTU1ZhbHVlUG9vbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NWYWx1ZVBvb2w6OmNyZWF0
ZUNvbG9yVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVmFsdWVQb29sOjpjcmVhdGVGb250
RmFtaWx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVmFsdWVQb29sOjpjcmVhdGVGb250
RmFjZVZhbHVlKToKKyAgICAgICAgKiBjc3MvUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9u
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6
Y2xvbmVBbmRDYWNoZUZvckNTU09NKToKKyAgICAgICAgKiBjc3MvU3R5bGVCdWlsZGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlDb3VudGVyOjphcHBseUluaGVyaXRWYWx1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Q291bnRlcjo6YXBwbHlWYWx1ZSk6
CisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSZXNvbHZlcjo6Y29sbGVjdEZlYXR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVz
b2x2ZXI6OnJ1bGVTZXRGb3JTY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
OjphcHBlbmRBdXRob3JTdHlsZXNoZWV0cyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjpzd2VlcE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KToKKyAgICAgICAgKiBjc3Mv
U3R5bGVTaGVldENvbnRlbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRDb250
ZW50czo6cGFyc2VyQWRkTmFtZXNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRD
b250ZW50czo6ZGV0ZXJtaW5lTmFtZXNwYWNlKToKKyAgICAgICAgKiBkb20vQ2hlY2tlZFJhZGlv
QnV0dG9ucy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaGVja2VkUmFkaW9CdXR0b25zOjphZGRC
dXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6Q2hlY2tlZFJhZGlvQnV0dG9uczo6cmVtb3ZlQnV0
dG9uKToKKyAgICAgICAgKiBkb20vQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdGlvblJv
dXRlcjo6Y2hpbGRBZGRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RNdXRhdGlvblNj
b3BlOjpNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlcjo6d2lsbFJlbW92ZUNoaWxkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0aW9u
Um91dGVyOjppbmNyZW1lbnRTY29waW5nTGV2ZWwpOgorICAgICAgICAoV2ViQ29yZTo6Q2hpbGRM
aXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXI6OmRlY3JlbWVudFNj
b3BpbmdMZXZlbCk6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50OjpwYWdlR3JvdXBVc2VyU2hlZXRzKToKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50Ojp3aW5kb3dOYW1lZEl0ZW1zKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpk
b2N1bWVudE5hbWVkSXRlbXMpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmdldENTU0Nh
bnZhc0VsZW1lbnQpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjptYXJrZXJDb250
YWluaW5nUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
OjpyZW5kZXJlZFJlY3RzRm9yTWFya2Vycyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1h
cmtlckNvbnRyb2xsZXI6OnJlbW92ZU1hcmtlcnMpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyOjpyZXBhaW50TWFya2Vycyk6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmludmFsaWRhdGVSZW5kZXJlZFJlY3RzRm9yTWFya2Vy
c0luUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnNo
b3dNYXJrZXJzKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnRPcmRlcmVkTWFwLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRvY3VtZW50T3JkZXJlZE1hcDo6cmVtb3ZlKToKKyAgICAgICAgKiBkb20v
RWxlbWVudEF0dHJpYnV0ZURhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZW5zdXJlQXR0ckxp
c3RGb3JFbGVtZW50KToKKyAgICAgICAgKiBkb20vRXZlbnREaXNwYXRjaGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50UmVsYXRlZFRhcmdldEFkanVzdGVyOjpmaW5kUmVsYXRlZFRhcmdl
dCk6CisgICAgICAgICogZG9tL0V2ZW50TGlzdGVuZXJNYXAuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RXZlbnRMaXN0ZW5lck1hcDo6ZXZlbnRUeXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpFdmVu
dExpc3RlbmVyTWFwOjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRMaXN0ZW5lck1hcDo6
cmVtb3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50TGlzdGVuZXJNYXA6OmZpbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6RXZlbnRMaXN0ZW5lck1hcDo6cmVtb3ZlRmlyc3RFdmVudExpc3RlbmVy
Q3JlYXRlZEZyb21NYXJrdXApOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRMaXN0ZW5lck1hcDo6
Y29weUV2ZW50TGlzdGVuZXJzTm90Q3JlYXRlZEZyb21NYXJrdXBUb1RhcmdldCk6CisgICAgICAg
IChXZWJDb3JlOjpFdmVudExpc3RlbmVySXRlcmF0b3I6Om5leHRMaXN0ZW5lcik6CisgICAgICAg
ICogZG9tL0lkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
ZFRhcmdldE9ic2VydmVyUmVnaXN0cnk6OmFkZE9ic2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OklkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeTo6cmVtb3ZlT2JzZXJ2ZXIpOgorICAgICAgICAqIGRv
bS9NZW1vcnlJbnN0cnVtZW50YXRpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lbW9yeUluc3Ry
dW1lbnRhdGlvbjo6YWRkSW5zdHJ1bWVudGVkTWFwRW50cmllcyk6CisgICAgICAgIChXZWJDb3Jl
OjpNZW1vcnlJbnN0cnVtZW50YXRpb246OmFkZEluc3RydW1lbnRlZE1hcFZhbHVlcyk6CisgICAg
ICAgICogZG9tL011dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3VwLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Ok11dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3VwOjppc09sZFZhbHVlUmVxdWVzdGVk
KToKKyAgICAgICAgKFdlYkNvcmU6Ok11dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3VwOjplbnF1
ZXVlTXV0YXRpb25SZWNvcmQpOgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Ok5vZGU6OmR1bXBTdGF0aXN0aWNzKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmNs
ZWFyUmFyZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZUxpc3RzTm9kZURhdGE6OmludmFs
aWRhdGVDYWNoZXMpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Y29sbGVjdE1hdGNoaW5nT2Jz
ZXJ2ZXJzRm9yTXV0YXRpb24pOgorICAgICAgICAqIGRvbS9Ob2RlUmFyZURhdGEuaDoKKyAgICAg
ICAgKFdlYkNvcmU6Ok5vZGVMaXN0c05vZGVEYXRhOjphZGRDYWNoZVdpdGhBdG9taWNOYW1lKToK
KyAgICAgICAgKFdlYkNvcmU6Ok5vZGVMaXN0c05vZGVEYXRhOjphZGRDYWNoZVdpdGhOYW1lKToK
KyAgICAgICAgKFdlYkNvcmU6Ok5vZGVMaXN0c05vZGVEYXRhOjphZGRDYWNoZVdpdGhRdWFsaWZp
ZWROYW1lKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVMaXN0c05vZGVEYXRhOjphZG9wdFRyZWVT
Y29wZSk6CisgICAgICAgICogZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246OmNoZWNrU3R5bGVTaGVldCk6CisgICAg
ICAgICogZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6Y2FuU3VzcGVuZEFjdGl2ZURPTU9iamVjdHMpOgorICAg
ICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6c3VzcGVuZEFjdGl2ZURPTU9i
amVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6cmVzdW1l
QWN0aXZlRE9NT2JqZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250
ZXh0OjpzdG9wQWN0aXZlRE9NT2JqZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFeGVj
dXRpb25Db250ZXh0OjphZGp1c3RNaW5pbXVtVGltZXJJbnRlcnZhbCk6CisgICAgICAgICogZG9t
L1NlbGVjdG9yUXVlcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JRdWVyeUNhY2hl
OjphZGQpOgorICAgICAgICAqIGRvbS9TcGFjZVNwbGl0U3RyaW5nLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNwYWNlU3BsaXRTdHJpbmdEYXRhOjpjcmVhdGUpOgorICAgICAgICAqIGRvbS9TdHls
ZWRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlZEVsZW1lbnQ6OnVwZGF0ZUF0
dHJpYnV0ZVN0eWxlKToKKyAgICAgICAgKiBlZGl0aW5nL21hYy9BbHRlcm5hdGl2ZVRleHRVSUNv
bnRyb2xsZXIubW06CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xs
ZXI6OkFsZXJuYXRpdmVUZXh0Q29udGV4dENvbnRyb2xsZXI6OmFsdGVybmF0aXZlc0ZvckNvbnRl
eHQpOgorICAgICAgICAqIGh0bWwvRm9ybUNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U2F2ZWRGb3JtU3RhdGU6OnNlcmlhbGl6ZVRvKToKKyAgICAgICAgKFdlYkNvcmU6OlNhdmVk
Rm9ybVN0YXRlOjphcHBlbmRDb250cm9sU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2F2ZWRG
b3JtU3RhdGU6OnRha2VDb250cm9sU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2F2ZWRGb3Jt
U3RhdGU6OmdldFJlZmVyZW5jZWRGaWxlUGF0aHMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUtl
eUdlbmVyYXRvcjo6Zm9ybUtleSk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtQ29udHJvbGxlcjo6
Y3JlYXRlU2F2ZWRGb3JtU3RhdGVNYXApOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUNvbnRyb2xs
ZXI6OmZvcm1FbGVtZW50c1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1Db250cm9sbGVy
Ojp0YWtlU3RhdGVGb3JGb3JtRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtQ29udHJv
bGxlcjo6Z2V0UmVmZXJlbmNlZEZpbGVQYXRocyk6CisgICAgICAgICogaHRtbC9IVE1MQ29sbGVj
dGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbkNhY2hlQmFzZTo6YXBw
ZW5kKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMRnJhbWVidWZmZXI6OmdldEF0dGFjaG1lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6cmVtb3ZlQXR0YWNobWVudEZyb21Cb3VuZEZyYW1l
YnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRnJhbWVidWZmZXI6OmNoZWNrU3RhdHVz
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRnJhbWVidWZmZXI6OmRlbGV0ZU9iamVjdEltcGwp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6aW5pdGlhbGl6ZUF0dGFjaG1l
bnRzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkRPTVBhdGNoU3VwcG9ydDo6ZGlmZik6CisgICAgICAgIChXZWJDb3JlOjpET01QYXRjaFN1cHBv
cnQ6OmlubmVyUGF0Y2hDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpET01QYXRjaFN1cHBv
cnQ6OnJlbW92ZUNoaWxkQW5kTW92ZVRvTmV3KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5qZWN0
ZWRTY3JpcHRNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0TWFu
YWdlcjo6aW5qZWN0ZWRTY3JpcHRGb3JJZCk6CisgICAgICAgIChXZWJDb3JlOjpJbmplY3RlZFNj
cmlwdE1hbmFnZXI6OmluamVjdGVkU2NyaXB0SWRGb3IpOgorICAgICAgICAoV2ViQ29yZTo6SW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyOjpkaXNjYXJkSW5qZWN0ZWRTY3JpcHRzRm9yKToKKyAgICAgICAg
KFdlYkNvcmU6OkluamVjdGVkU2NyaXB0TWFuYWdlcjo6cmVsZWFzZU9iamVjdEdyb3VwKToKKyAg
ICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0TWFuYWdlcjo6aW5qZWN0ZWRTY3JpcHRGb3Ip
OgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTZWxlY3RvclByb2ZpbGU6OmNvbW1pdFNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OlNlbGVjdG9yUHJvZmlsZTo6Y29tbWl0U2VsZWN0b3JUaW1lKToKKyAgICAgICAgKFdlYkNv
cmU6OlNlbGVjdG9yUHJvZmlsZTo6dG9JbnNwZWN0b3JPYmplY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OmZvcmNlUHNldWRvU3RhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OmFzSW5zcGVjdG9yU3R5bGVTaGVldCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6YXNzZXJ0U3R5bGVTaGVldEZvcklkKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpkaWRSZW1vdmVET01Ob2RlKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpkaWRNb2RpZnlET01BdHRyKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpyZXNldFBzZXVkb1N0YXRlcyk6CisgICAg
ICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnNvbGVBZ2VudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OnN0b3BUaW1pbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yQ29uc29sZUFnZW50Ojpjb3VudCk6CisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3RvckRPTUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50
Ojpub2RlRm9ySWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OnBlcmZv
cm1TZWFyY2gpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmdldFNlYXJj
aFJlc3VsdHMpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OndpbGxT
ZW5kWE1MSHR0cFJlcXVlc3QpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01TdG9y
YWdlQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50
OjpjbGVhckZyb250ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTVN0b3JhZ2VB
Z2VudDo6ZW5hYmxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTVN0b3JhZ2VBZ2Vu
dDo6c3RvcmFnZUlkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTVN0b3JhZ2VBZ2Vu
dDo6Z2V0RE9NU3RvcmFnZVJlc291cmNlRm9ySWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yRE9NU3RvcmFnZUFnZW50OjpkaWRVc2VET01TdG9yYWdlKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6bWVtb3J5Qnl0ZXNVc2VkQnlTdG9yYWdlQ2FjaGUp
OgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmVuYWJsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjpkYXRhYmFzZUlkKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmZpbmRCeUZpbGVOYW1lKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmRhdGFiYXNlRm9ySWQpOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnRCeVVybCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZW1vdmVCcmVha3BvaW50KToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnJlc29sdmVCcmVha3BvaW50
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNlYXJjaEluQ29u
dGVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpnZXRTY3Jp
cHRTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlk
UGFyc2VTb3VyY2UpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2Vu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9y
TWVtb3J5QWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogaW5zcGVjdG9y
L0luc3BlY3RvclBhZ2VBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjYWNoZWRSZXNvdXJj
ZXNGb3JGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6OmRpZENs
ZWFyV2luZG93T2JqZWN0SW5Xb3JsZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdl
QWdlbnQ6OmZyYW1lRGV0YWNoZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JQcm9m
aWxlckFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclByb2ZpbGVyQWdlbnQ6
OmdldFByb2ZpbGVIZWFkZXJzKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6Z2V0UHJvZmlsZSk6CisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRP
YmplY3RGb3JIZWFkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlc291cmNlQWdl
bnQ6OndpbGxTZW5kUmVxdWVzdCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclN0YXRl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0YXRlOjpnZXRCb29sZWFuKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0YXRlOjpnZXRTdHJpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yU3RhdGU6OmdldExvbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yU3RhdGU6OmdldERvdWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdGF0ZTo6
Z2V0T2JqZWN0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZTo6c3R5bGVXaXRoUHJvcGVydGllcyk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjppbnNwZWN0b3JTdHlsZUZv
cklkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3Rvck9iamVjdEJhc2U6OmdldCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JPYmplY3RCYXNlOjp3cml0ZUpTT04pOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JXb3JrZXJBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JXb3JrZXJB
Z2VudDo6d29ya2VyQ29udGV4dFRlcm1pbmF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yV29ya2VyQWdlbnQ6OmNyZWF0ZVdvcmtlckZyb250ZW5kQ2hhbm5lbHNGb3JFeGlzdGluZ1dv
cmtlcnMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yV29ya2VyQWdlbnQ6OmRlc3Ryb3lX
b3JrZXJGcm9udGVuZENoYW5uZWxzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvTmV0d29ya1Jlc291
cmNlc0RhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1Jlc291cmNlc0RhdGE6OnJl
bW92ZUNhY2hlZFJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtSZXNvdXJjZXNE
YXRhOjpjbGVhcik6CisgICAgICAgICogbG9hZGVyL0Nyb3NzT3JpZ2luQWNjZXNzQ29udHJvbC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjppc1NpbXBsZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVzdCk6
CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVBY2Nlc3NDb250cm9sUHJlZmxpZ2h0UmVxdWVzdCk6
CisgICAgICAgICogbG9hZGVyL0Nyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZUl0ZW06OmFs
bG93c0Nyb3NzT3JpZ2luSGVhZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpDcm9zc09yaWdpblBy
ZWZsaWdodFJlc3VsdENhY2hlOjpjYW5Ta2lwUHJlZmxpZ2h0KToKKyAgICAgICAgKiBsb2FkZXIv
RG9jdW1lbnRMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI6Omdl
dFN1YnJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6c3Vic3Rp
dHV0ZVJlc291cmNlRGVsaXZlcnlUaW1lckZpcmVkKToKKyAgICAgICAgKiBsb2FkZXIvTWFpblJl
c291cmNlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1haW5SZXNvdXJjZUxvYWRlcjo6
ZGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1
bGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2VydmVQ
ZW5kaW5nUmVxdWVzdHMpOgorICAgICAgICAqIGxvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNh
Y2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGU6OnJlbW92ZVJlc291
cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGU6OmNsZWFyU3RvcmFnZUlE
KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGU6OmR1bXApOgorICAgICAgICAq
IGxvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwbGljYXRpb25DYWNoZUdyb3VwOjpkaWRGaW5pc2hMb2FkaW5nTWFuaWZlc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUdyb3VwOjpzdGFydExvYWRpbmdFbnRy
eSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmFkZEVudHJ5KToK
KyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUhvc3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUhvc3Q6OmZpbGxSZXNvdXJjZUxpc3QpOgor
ICAgICAgICAqIGxvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVJlc291cmNlOjplc3RpbWF0ZWRTaXpl
SW5TdG9yYWdlKToKKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0
b3JhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmZp
bmRPckNyZWF0ZUNhY2hlR3JvdXApOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNo
ZVN0b3JhZ2U6OmNhY2hlR3JvdXBGb3JVUkwpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRp
b25DYWNoZVN0b3JhZ2U6OmZhbGxiYWNrQ2FjaGVHcm91cEZvclVSTCk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmVtcHR5KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxp
Y2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZUNvcHlPZkNhY2hlKToKKyAgICAgICAgKiBsb2FkZXIv
YXJjaGl2ZS9BcmNoaXZlRmFjdG9yeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcmNoaXZlRmFj
dG9yeTo6cmVnaXN0ZXJLbm93bkFyY2hpdmVNSU1FVHlwZXMpOgorICAgICAgICAqIGxvYWRlci9j
YWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSYXdS
ZXNvdXJjZTo6Y2FuUmV1c2UpOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJj
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZTo6c3dpdGNoQ2xpZW50c1Rv
UmV2YWxpZGF0ZWRSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZTo6
dXBkYXRlUmVzcG9uc2VBZnRlclJldmFsaWRhdGlvbik6CisgICAgICAgICogbG9hZGVyL2NhY2hl
L0NhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRS
ZXNvdXJjZUNsaWVudFdhbGtlcjo6Q2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIpOgorICAgICAg
ICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDYWNoZWRSZXNvdXJjZUxvYWRlcjo6fkNhY2hlZFJlc291cmNlTG9hZGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0UmVzb3VyY2UpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OnNldEF1dG9Mb2FkSW1hZ2VzKToK
KyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlTG9hZGVyOjpyZW1vdmVDYWNoZWRSZXNv
dXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZUxvYWRlcjo6Z2FyYmFnZUNv
bGxlY3REb2N1bWVudFJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJj
ZUxvYWRlcjo6cmVwb3J0TWVtb3J5VXNhZ2UpOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9NZW1v
cnlDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlDYWNoZTo6cmVtb3ZlUmVzb3Vy
Y2VzV2l0aE9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlDYWNoZTo6Z2V0T3JpZ2lu
c1dpdGhDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlDYWNoZTo6Z2V0U3RhdGlzdGlj
cyk6CisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlDYWNoZTo6cmVwb3J0TWVtb3J5VXNhZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVtb3J5Q2FjaGU6OnNldERpc2FibGVkKToKKyAgICAgICAgKiBs
b2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SWNvbkRhdGFi
YXNlOjpyZW1vdmVBbGxJY29ucyk6CisgICAgICAgIChXZWJDb3JlOjpJY29uRGF0YWJhc2U6Omlj
b25SZWNvcmRDb3VudFdpdGhEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Okljb25EYXRhYmFzZTo6
cGVyZm9ybVBlbmRpbmdSZXRhaW5BbmRSZWxlYXNlT3BlcmF0aW9ucyk6CisgICAgICAgICogcGFn
ZS9ET01XaW5kb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93OjpkaXNwYXRjaEFs
bFBlbmRpbmdCZWZvcmVVbmxvYWRFdmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93
OjpkaXNwYXRjaEFsbFBlbmRpbmdVbmxvYWRFdmVudHMpOgorICAgICAgICAqIHBhZ2UvRXZlbnRI
YW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlVG91Y2hF
dmVudCk6CisgICAgICAgICogcGFnZS9GcmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZTo6aW5qZWN0VXNlclNjcmlwdHMpOgorICAgICAgICAqIHBhZ2UvUGFnZUdyb3VwLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlBhZ2VHcm91cDo6cGFnZUdyb3VwKToKKyAgICAgICAgKFdlYkNvcmU6
OlBhZ2VHcm91cDo6Y2xvc2VMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUdy
b3VwOjpjbGVhckxvY2FsU3RvcmFnZUZvckFsbE9yaWdpbnMpOgorICAgICAgICAoV2ViQ29yZTo6
UGFnZUdyb3VwOjpjbGVhckxvY2FsU3RvcmFnZUZvck9yaWdpbik6CisgICAgICAgIChXZWJDb3Jl
OjpQYWdlR3JvdXA6OnN5bmNMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUdy
b3VwOjphZGRVc2VyU2NyaXB0VG9Xb3JsZCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlR3JvdXA6
OmFkZFVzZXJTdHlsZVNoZWV0VG9Xb3JsZCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlR3JvdXA6
OnJlbW92ZVVzZXJTY3JpcHRGcm9tV29ybGQpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUdyb3Vw
OjpyZW1vdmVVc2VyU3R5bGVTaGVldEZyb21Xb3JsZCk6CisgICAgICAgICogcGFnZS9QYWdlU2Vy
aWFsaXplci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlU2VyaWFsaXplcjo6dXJsRm9yQmxh
bmtGcmFtZSk6CisgICAgICAgICogcGFnZS9TZWN1cml0eVBvbGljeS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTZWN1cml0eVBvbGljeTo6YWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkpOgor
ICAgICAgICAoV2ViQ29yZTo6U2VjdXJpdHlQb2xpY3k6OnJlbW92ZU9yaWdpbkFjY2Vzc1doaXRl
bGlzdEVudHJ5KToKKyAgICAgICAgKiBwYWdlL1NldHRpbmdzLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OnNldEdlbmVyaWNGb250RmFtaWx5TWFwKToKKyAgICAgICAgKFdlYkNvcmU6OmdldEdlbmVy
aWNGb250RmFtaWx5Rm9yU2NyaXB0KToKKyAgICAgICAgKiBwYWdlL1NwZWVjaElucHV0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNwZWVjaElucHV0OjpyZWdpc3Rlckxpc3RlbmVyKToKKyAgICAg
ICAgKiBwYWdlL1dpbmRvd0ZlYXR1cmVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldpbmRvd0Zl
YXR1cmVzOjpib29sRmVhdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpXaW5kb3dGZWF0dXJlczo6
ZmxvYXRGZWF0dXJlKToKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9s
bGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjp1
cGRhdGVBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkNvbnRyb2xsZXJQ
cml2YXRlOjpzdXNwZW5kQW5pbWF0aW9uc0ZvckRvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpyZXN1bWVBbmltYXRpb25zRm9yRG9jdW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6Om51bWJlck9m
QWN0aXZlQW5pbWF0aW9ucyk6CisgICAgICAgICogcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5p
bWF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlvbjo6Y2xlYXJS
ZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb246OnVwZGF0ZVRy
YW5zaXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRl
S2V5ZnJhbWVBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlv
bjo6YW5pbWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb246OmdldEFu
aW1hdGVkU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjpzZXRB
bmltYXRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjp0aW1lVG9O
ZXh0U2VydmljZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb246OmdldEFu
aW1hdGlvbkZvclByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlv
bjo6c3VzcGVuZEFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0
aW9uOjpyZXN1bWVBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1h
dGlvbjo6b3ZlcnJpZGVJbXBsaWNpdEFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29t
cG9zaXRlQW5pbWF0aW9uOjpyZXN1bWVPdmVycmlkZGVuSW1wbGljaXRBbmltYXRpb25zKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlvbjo6aXNBbmltYXRpbmdQcm9wZXJ0eSk6
CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb246Om51bWJlck9mQWN0aXZlQW5p
bWF0aW9ucyk6CisgICAgICAgICogcGxhdGZvcm0vTGFuZ3VhZ2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6bGFuZ3VhZ2VEaWRDaGFuZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL01JTUVUeXBlUmVn
aXN0cnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TUlNRVR5cGVSZWdpc3RyeTo6Z2V0Tm9ybWFs
aXplZE1JTUVUeXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9IUlRGRWxldmF0aW9uLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmdldENvbmNhdGVuYXRlZEltcHVsc2VSZXNwb25zZXNGb3JT
dWJqZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ibGFja2JlcnJ5L0Nvb2tpZU1hbmFnZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q29va2llTWFuYWdlcjo6Z2VuZXJhdGVIdG1sRnJhZ21lbnRG
b3JDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZU1hbmFnZXI6OnJlbW92ZUFsbENv
b2tpZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2JsYWNrYmVycnkvQ29va2llTWFwLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb2tpZU1hcDo6cmVtb3ZlT2xkZXN0Q29va2llKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb2tpZU1hcDo6Z2V0QWxsQ2hpbGRDb29raWVzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9jZi9CaW5hcnlQcm9wZXJ0eUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmluYXJ5
UHJvcGVydHlMaXN0UGxhbjo6d3JpdGVJbnRlZ2VyQXJyYXkpOgorICAgICAgICAqIHBsYXRmb3Jt
L2Nocm9taXVtL3N1cHBvcnQvV2ViSFRUUExvYWRJbmZvLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
YWRkSGVhZGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlVSTFJl
cXVlc3QuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxSZXF1ZXN0Ojp2aXNpdEhUVFBIZWFk
ZXJGaWVsZHMpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVVJMUmVz
cG9uc2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxSZXNwb25zZTo6YWRkSFRUUEhlYWRl
ckZpZWxkKToKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMUmVzcG9uc2U6OnZpc2l0SFRUUEhlYWRl
ckZpZWxkcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25p
dG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlSZWZyZXNoTW9uaXRvck1hbmFnZXI6
OmVuc3VyZU1vbml0b3JGb3JDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheVJlZnJl
c2hNb25pdG9yTWFuYWdlcjo6dW5yZWdpc3RlckNsaWVudCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0
Q2FjaGVkRm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6Omdl
dENhY2hlZEZvbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6cmVsZWFzZUZv
bnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnRE
YXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2VUcmVlTm9kZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpHbHlwaFBhZ2VUcmVlTm9kZTo6dHJlZUdseXBoUGFnZUNvdW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoUGFnZVRyZWVOb2RlOjpwYWdlQ291bnQpOgorICAg
ICAgICAoV2ViQ29yZTo6R2x5cGhQYWdlVHJlZU5vZGU6OnBydW5lVHJlZUN1c3RvbUZvbnREYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoUGFnZVRyZWVOb2RlOjpwcnVuZVRyZWVGb250RGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaFBhZ2VUcmVlTm9kZTo6cHJ1bmVDdXN0b21Gb250
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaFBhZ2VUcmVlTm9kZTo6cHJ1bmVGb250RGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaFBhZ2VUcmVlTm9kZTo6c2hvd1N1YnRyZWUpOgor
ICAgICAgICAoc2hvd0dseXBoUGFnZVRyZWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9UaWxlZEJhY2tpbmdTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZEJhY2tpbmdT
dG9yZTo6dXBkYXRlVGlsZUJ1ZmZlcnMpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRCYWNraW5n
U3RvcmU6OnJlc2l6ZUVkZ2VUaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZEJhY2tpbmdT
dG9yZTo6c2V0S2VlcFJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRh
dGlvbi9jZi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25DRi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpBVkZXcmFwcGVyOjphdmZXcmFwcGVyRm9yQ2FsbGJhY2tDb250ZXh0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyVGlsZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJUaWxlcjo6bGF5ZXJWaXNpYmlsaXR5Q2hhbmdlZCk6CisgICAgICAg
IChXZWJDb3JlOjpMYXllclRpbGVyOjp1cGxvYWRUZXh0dXJlc0lmTmVlZGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyVGlsZXI6OmFkZFRpbGVKb2IpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJUaWxlcjo6ZGVsZXRlVGV4dHVyZXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlcjo6
cHJ1bmVUZXh0dXJlcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyOjpiaW5kQ29udGVu
dHNUZXh0dXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L1RleHR1
cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVD
YWNoZUNvbXBvc2l0aW5nVGhyZWFkOjp0ZXh0dXJlRm9yVGlsZWRDb250ZW50cyk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZDo6dGV4dHVyZUZvckNvbG9y
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjptb3ZlT3JDb3B5QW5pbWF0aW9ucyk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnBhdXNlQW5pbWF0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6bGF5ZXJEaWREaXNwbGF5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlR2VvbWV0cnkpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjp1cGRhdGVUcmFuc2Zvcm0pOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NMYXllckNBOjp1cGRhdGVDaGlsZHJlblRyYW5zZm9ybSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZU1hc2tzVG9Cb3VuZHMpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjp1cGRhdGVDb250ZW50c1Zpc2liaWxpdHkpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjp1cGRhdGVDb250ZW50c09wYXF1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUJhY2tmYWNlVmlzaWJp
bGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUZpbHRlcnMp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjplbnN1cmVTdHJ1Y3R1cmFsTGF5
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjp1cGRhdGVMYXllckRyYXdz
Q29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUNvbnRl
bnRzSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjp1cGRhdGVDb250
ZW50c1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjp1cGRhdGVNYXNr
TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjp1cGRhdGVMYXllckFu
aW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjpzZXRBbmltYXRp
b25PbkxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6cmVtb3ZlQ0FB
bmltYXRpb25Gcm9tTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjpw
YXVzZUNBQW5pbWF0aW9uT25MYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVy
Q0E6OnN1c3BlbmRBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJD
QTo6cmVzdW1lQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6
OmZpbmRPck1ha2VDbG9uZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnNl
dE9wYWNpdHlJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnVw
ZGF0ZU9wYWNpdHlPbkxheWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMv
VGlsZUNhY2hlLm1tOgorICAgICAgICAoV2ViQ29yZTo6VGlsZUNhY2hlOjpzZXROZWVkc0Rpc3Bs
YXkpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZUNhY2hlOjpzZXRTY2FsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpUaWxlQ2FjaGU6OnNldEFjY2VsZXJhdGVzRHJhd2luZyk6CisgICAgICAgIChXZWJD
b3JlOjpUaWxlQ2FjaGU6OnNldFRpbGVEZWJ1Z0JvcmRlcldpZHRoKToKKyAgICAgICAgKFdlYkNv
cmU6OlRpbGVDYWNoZTo6c2V0VGlsZURlYnVnQm9yZGVyQ29sb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6VGlsZUNhY2hlOjpyZXZhbGlkYXRlVGlsZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwOgorICAgICAgICAoUGxhdGZvcm1DQUxh
eWVyOjphbmltYXRpb25TdGFydGVkKToKKyAgICAgICAgKHJlc3VibWl0QWxsQW5pbWF0aW9ucyk6
CisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXI6OmFuaW1hdGlvbkZvcktleSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENhY2hlQ2hyb21pdW1XaW4uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TG9va3VwQWx0TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpmb250Q29u
dGFpbnNDaGFyYWN0ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Zv
bnRVdGlsc0Nocm9taXVtV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldERlcml2ZWRGb250
RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNo
cm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6cHVzaFBy
b3BlcnRpZXNUbyk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnNldExh
eWVyVHJlZUhvc3QpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjppbnZh
bGlkYXRlQ29udGVudFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVt
OjpzZXRUZXh0dXJlUHJpb3JpdGllcyk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hy
b21pdW06OnJlc2V0VXBkYXRlU3RhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDRGFtYWdlVHJhY2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0RhbWFn
ZVRyYWNrZXI6OnRyYWNrRGFtYWdlRnJvbUxlZnRvdmVyUmVjdHMpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGlyZWN0UmVuZGVyZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q0NEaXJlY3RSZW5kZXJlcjo6ZGVjaWRlUmVuZGVyUGFzc0FsbG9jYXRpb25zRm9y
RnJhbWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
aWxpbmdEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUaWxpbmdEYXRhOjpzZXRC
b3VuZHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6On5DQ0xheWVy
VHJlZUhvc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpzdGFydFJhdGVM
aW1pdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6c3RvcFJhdGVMaW1p
dGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRSZW5kZXJQYXNzQnlJZCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZXNvdXJjZVByb3ZpZGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVzb3VyY2VQcm92aWRlcjo6aW5Vc2VCeUNvbnN1
bWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVzb3VyY2VQcm92aWRlcjo6ZGVsZXRlUmVzb3Vy
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZXNvdXJjZVByb3ZpZGVyOjpkZWxldGVPd25lZFJl
c291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Jlc291cmNlUHJvdmlkZXI6OnJlc291cmNl
VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Jlc291cmNlUHJvdmlkZXI6OnVwbG9hZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ1Jlc291cmNlUHJvdmlkZXI6OmxvY2tGb3JSZWFkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDUmVzb3VyY2VQcm92aWRlcjo6dW5sb2NrRm9yUmVhZCk6CisgICAgICAg
IChXZWJDb3JlOjpDQ1Jlc291cmNlUHJvdmlkZXI6OmxvY2tGb3JXcml0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1Jlc291cmNlUHJvdmlkZXI6OnVubG9ja0ZvcldyaXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDUmVzb3VyY2VQcm92aWRlcjo6ZGVzdHJveUNoaWxkKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDUmVzb3VyY2VQcm92aWRlcjo6Z2V0Q2hpbGRUb1BhcmVudE1hcCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1Jlc291cmNlUHJvdmlkZXI6OnByZXBhcmVTZW5kVG9QYXJlbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NSZXNvdXJjZVByb3ZpZGVyOjpwcmVwYXJlU2VuZFRvQ2hpbGQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NSZXNvdXJjZVByb3ZpZGVyOjpyZWNlaXZlRnJvbUNoaWxkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDUmVzb3VyY2VQcm92aWRlcjo6cmVjZWl2ZUZyb21QYXJlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NSZXNvdXJjZVByb3ZpZGVyOjp0cmFuc2ZlclJlc291cmNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDUmVzb3VyY2VQcm92aWRlcjo6dHJpbU1haWxib3hEZXF1ZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJHbG9iYWxD
b250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUZpbHRlckdsb2JhbENvbnRleHQ6
On5DdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUZp
bHRlckdsb2JhbENvbnRleHQ6OmdldENvbXBpbGVkUHJvZ3JhbSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJQcm9ncmFtLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkN1c3RvbUZpbHRlclByb2dyYW06Om5vdGlmeUNsaWVudHMpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2tpYS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpnZXRDYWNoZWRIYXJmYnV6ekZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6cmVsZWFzZUNh
Y2hlZEhhcmZidXp6RmFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enov
bmcvSGFyZkJ1enpOR0ZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpOR0ZhY2U6
OkhhcmZCdXp6TkdGYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6TkdGYWNlOjp+SGFy
ZkJ1enpOR0ZhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250
RGF0YUNvcmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpnZXRD
RlN0cmluZ0F0dHJpYnV0ZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1w
bGVGb250RGF0YU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpjYW5S
ZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpFeHRlbnNpb25zM0RPcGVuR0xDb21tb246OmdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VB
TkdMRSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4
dDNET3BlbkdMQ29tbW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
Ojpjb21waWxlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRTaGFkZXJpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hh
ZGVySW5mb0xvZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hh
ZGVyU291cmNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvRUdMRGlzcGxh
eU9wZW5WRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFR0xEaXNwbGF5T3BlblZHOjp+RUdMRGlz
cGxheU9wZW5WRyk6CisgICAgICAgIChXZWJDb3JlOjpFR0xEaXNwbGF5T3BlblZHOjpkZXN0cm95
U3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpFR0xEaXNwbGF5T3BlblZHOjpjb250ZXh0Rm9y
U3VyZmFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJHTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFyZWRH
TERhdGE6OmN1cnJlbnRTaGFyZWRHTERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlckdMRGF0YTo6U2hhcmVkR0xEYXRhOjp+U2hhcmVkR0xEYXRhKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OmdldFNoYWRlclByb2dy
YW0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OmdldFNo
YWRlckZvckZpbHRlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udFBs
YXRmb3JtRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaXhlZFNpemVGb250RGF0YTo6Y3Jl
YXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvRGF0YU9iamVjdEd0ay5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpEYXRhT2JqZWN0R3RrOjpmb3JDbGlwYm9hcmQpOgorICAgICAgICAqIHBsYXRm
b3JtL2d0ay9HdGtEcmFnQW5kRHJvcEhlbHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHdGtE
cmFnQW5kRHJvcEhlbHBlcjo6aGFuZGxlR2V0RHJhZ0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
R3RrRHJhZ0FuZERyb3BIZWxwZXI6OmhhbmRsZURyYWdMZWF2ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHdGtEcmFnQW5kRHJvcEhlbHBlcjo6aGFuZGxlRHJhZ01vdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpHdGtEcmFnQW5kRHJvcEhlbHBlcjo6aGFuZGxlRHJhZ0RhdGFSZWNlaXZlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpHdGtEcmFnQW5kRHJvcEhlbHBlcjo6aGFuZGxlRHJhZ0Ryb3ApOgorICAg
ICAgICAqIHBsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0azMuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Z3RrU3R5bGVDaGFuZ2VkQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6Z2V0U3R5bGVD
b250ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMubW06Cisg
ICAgICAgICgrW1dlYlNjcm9sbGJhclByZWZzT2JzZXJ2ZXIgYXBwZWFyYW5jZVByZWZzQ2hhbmdl
ZDpdKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWxTdG9yYWdlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNyZWRlbnRpYWxTdG9yYWdlOjpzZXQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q3JlZGVudGlhbFN0b3JhZ2U6OmdldCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29y
ay9IVFRQSGVhZGVyTWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUVFBIZWFkZXJNYXA6OmNv
cHlEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkhUVFBIZWFkZXJNYXA6OmdldCk6CisgICAgICAg
ICogcGxhdGZvcm0vbmV0d29yay9NSU1FSGVhZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1J
TUVIZWFkZXI6OnBhcnNlSGVhZGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291
cmNlSGFuZGxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpjcmVhdGUp
OgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjphZGRIVFRQSGVhZGVyRmllbGQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6YWRkSFRUUEhlYWRlckZp
ZWxkcyk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlUmVx
dWVzdEJsYWNrQmVycnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Ojp0
YXJnZXRUeXBlRnJvbU1pbWVUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dDo6aW5pdGlhbGl6ZVBsYXRmb3JtUmVxdWVzdCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29y
ay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VGaW5h
bFJlcXVlc3QpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0
Q0ZOZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2V0SGVhZGVyRmllbGRzKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlTWFuYWdlcjo6aW5pdGlhbGl6ZUhhbmRsZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VSZXF1ZXN0TWFjLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Ojpkb1VwZGF0ZVBsYXRmb3JtUmVxdWVzdCk6
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9xdC9SZXNvdXJjZVJlcXVlc3RRdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q6OnRvTmV0d29ya1JlcXVlc3QpOgorICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6c2VuZFJlcXVlc3RDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpS
ZXNvdXJjZUhhbmRsZTo6c2V0Q2xpZW50Q2VydGlmaWNhdGUpOgorICAgICAgICAqIHBsYXRmb3Jt
L25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdDo6dXBkYXRlU291cE1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0Ojp0b1NvdXBNZXNzYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3
b3JrL3NvdXAvUmVzb3VyY2VSZXNwb25zZVNvdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVz
b3VyY2VSZXNwb25zZTo6dG9Tb3VwTWVzc2FnZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29y
ay93aW4vUmVzb3VyY2VIYW5kbGVXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VI
YW5kbGU6OnN0YXJ0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9SdW5Mb29wUXQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UnVuTG9vcDo6VGltZXJCYXNlOjp0aW1lckZpcmVkKToKKyAgICAgICAg
KiBwbGF0Zm9ybS90ZXh0L0xvY2FsZVRvU2NyaXB0TWFwcGluZ0RlZmF1bHQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6c2NyaXB0TmFtZVRvQ29kZSk6CisgICAgICAgIChXZWJDb3JlOjpsb2NhbGVU
b1NjcmlwdENvZGVGb3JGb250U2VsZWN0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1Rl
eHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBydW5lQmxhY2tsaXN0
ZWRDb2RlY3MpOgorICAgICAgICAoV2ViQ29yZTo6ZHVtcFRleHRFbmNvZGluZ05hbWVNYXApOgor
ICAgICAgICAqIHBsYXRmb3JtL3RleHQvdHJhbnNjb2Rlci9Gb250VHJhbnNjb2Rlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGb250VHJhbnNjb2Rlcjo6Y29udmVydGVyVHlwZSk6CisgICAgICAg
ICogcGxhdGZvcm0vdGV4dC93aW4vVGV4dENvZGVjV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Okxhbmd1YWdlTWFuYWdlcjo6TGFuZ3VhZ2VNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6Omdl
dENvZGVQYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY1dpbjo6cmVnaXN0ZXJFeHRl
bmRlZEVuY29kaW5nTmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjV2luOjpyZWdp
c3RlckV4dGVuZGVkQ29kZWNzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY1dpbjo6ZW51
bWVyYXRlU3VwcG9ydGVkRW5jb2RpbmdzKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vQ2xpcGJv
YXJkVXRpbGl0aWVzV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldERhdGFNYXBJdGVtKToK
KyAgICAgICAgKFdlYkNvcmU6OmdldENsaXBib2FyZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
c2V0Q2xpcGJvYXJkRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vd2luL0NsaXBib2FyZFdpbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRXaW46OnR5cGVzKToKKyAgICAgICAgKiBw
bGF0Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjYWNoZWRT
dG9yYWdlRGlyZWN0b3J5KToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vUnVuTG9vcFdpbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSdW5Mb29wOjpUaW1lckJhc2U6OnRpbWVyRmlyZWQpOgorICAg
ICAgICAqIHBsYXRmb3JtL3dpbi9XQ0RhdGFPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
V0NEYXRhT2JqZWN0OjpjcmVhdGVJbnN0YW5jZSk6CisgICAgICAgICogcGxhdGZvcm0vd2luY2Uv
TUlNRVR5cGVSZWdpc3RyeVdpbkNFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1JTUVUeXBlUmVn
aXN0cnk6OmdldFByZWZlcnJlZEV4dGVuc2lvbkZvck1JTUVUeXBlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS93eC9Db250ZXh0TWVudVd4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51
OjphcHBlbmRJdGVtKToKKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNlOjpyZWZyZXNoKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpbkRhdGFiYXNlOjpNSU1FVHlwZUZvckV4dGVuc2lvbik6CisgICAgICAgIChXZWJD
b3JlOjpQbHVnaW5EYXRhYmFzZTo6cmVtb3ZlKToKKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpbk1h
aW5UaHJlYWRTY2hlZHVsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luTWFpblRocmVh
ZFNjaGVkdWxlcjo6c2NoZWR1bGVDYWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbk1haW5U
aHJlYWRTY2hlZHVsZXI6OmRpc3BhdGNoQ2FsbHMpOgorICAgICAgICAqIHBsdWdpbnMvUGx1Z2lu
U3RyZWFtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblN0cmVhbTo6c3RhcnRTdHJlYW0p
OgorICAgICAgICAqIHBsdWdpbnMvYmxhY2tiZXJyeS9QbHVnaW5EYXRhQmxhY2tCZXJyeS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhOjppbml0UGx1Z2lucyk6CisgICAgICAgICog
cGx1Z2lucy93eC9QbHVnaW5EYXRhV3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0
YTo6aW5pdFBsdWdpbnMpOgorICAgICAgICAqIHJlbmRlcmluZy9GbG93VGhyZWFkQ29udHJvbGxl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGbG93VGhyZWFkQ29udHJvbGxlcjo6dW5yZWdpc3Rl
ck5hbWVkRmxvd0NvbnRlbnROb2RlKToKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lRmxvd0Jv
eC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVGbG93Qm94OjpyZXF1aXJlc0lkZW9ncmFw
aGljQmFzZWxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6YWRkVGV4dEJv
eFZpc3VhbE92ZXJmbG93KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmNsZWFyRmxvYXRzKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNl
dExvZ2ljYWxXaWR0aEZvclRleHRSdW4pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3hN
b2RlbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVF1YWxpdHlDb250cm9sbGVy
OjpoaWdoUXVhbGl0eVJlcGFpbnRUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
UXVhbGl0eUNvbnRyb2xsZXI6OnNob3VsZFBhaW50QXRMb3dRdWFsaXR5KToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyQ291bnRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJDb3Vu
dGVyOjpkZXN0cm95Q291bnRlck5vZGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckNvdW50
ZXI6OmRlc3Ryb3lDb3VudGVyTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjp1cGRhdGVDb3VudGVy
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJDb3VudGVyOjpyZW5kZXJlclN0eWxlQ2hhbmdl
ZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6c2V0UmVnaW9uUmFuZ2VGb3JCb3gpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6Z2V0UmVnaW9uUmFuZ2VGb3JCb3gpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6cGVyZm9ybU92ZXJsYXBUZXN0cyk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVySW5mby5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlckluZm86OmZpbHRlckluZm9Gb3JSZW5kZXJMYXll
cik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlckluZm86OmNyZWF0ZUZpbHRl
ckluZm9Gb3JSZW5kZXJMYXllcklmTmVlZGVkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
TmFtZWRGbG93VGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck5hbWVkRmxvd1Ro
cmVhZDo6ZGVwZW5kc09uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck5hbWVkRmxvd1RocmVh
ZDo6cHVzaERlcGVuZGVuY2llcyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZWdpb246OnNldFJlbmRlckJveFJlZ2lvbklu
Zm8pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVnaW9uOjpzZXRSZWdpb25PYmplY3RzUmVn
aW9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVnaW9uOjpyZXN0b3JlUmVnaW9u
T2JqZWN0c09yaWdpbmFsU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVnaW9uOjpj
b21wdXRlQ2hpbGRyZW5TdHlsZUluUmVnaW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
VGFibGVTZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6
Y2FjaGVkQ29sbGFwc2VkQm9yZGVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVN
YWMubW06CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6c3lzdGVtQ29sb3IpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclZpZXc6OnNlbGVjdGlvbkJvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3
OjpzZXRTZWxlY3Rpb24pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyV2lkZ2V0OjpyZXN1bWVXaWRnZXRIaWVyYXJjaHlVcGRh
dGVzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSb290SW5saW5lQm94Ojphc2NlbnRBbmREZXNjZW50Rm9yQm94KToKKyAgICAgICAg
KiByZW5kZXJpbmcvVmVydGljYWxQb3NpdGlvbkNhY2hlLmg6CisgICAgICAgIChXZWJDb3JlOjpW
ZXJ0aWNhbFBvc2l0aW9uQ2FjaGU6OmdldCk6CisgICAgICAgICogcmVuZGVyaW5nL1dyYXBTaGFw
ZUluZm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6V3JhcFNoYXBlSW5mbzo6ZW5zdXJlV3JhcFNo
YXBlSW5mb0ZvclJlbmRlckJsb2NrKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R0lubGluZVRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHSW5saW5lVGV4dDo6
Y2hhcmFjdGVyU3RhcnRzTmV3VGV4dENodW5rKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jl
c291cmNlRmlsdGVyOjpwcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudDo6YXBwbHlSZXNvdXJjZSk6CisgICAgICAgICog
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuOjphcHBseVJlc291cmNlKToKKyAgICAgICAg
KiByZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlc0NhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1Jlc291cmNlc0NhY2hlOjpyZXNvdXJjZURlc3Ryb3llZCk6CisgICAgICAgICogcmVuZGVy
aW5nL3N2Zy9TVkdSb290SW5saW5lQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnN3YXBJdGVt
c0luTGF5b3V0QXR0cmlidXRlcyk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5
b3V0QXR0cmlidXRlcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0TGF5b3V0QXR0cmli
dXRlczo6ZHVtcCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmli
dXRlc0J1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dExheW91dEF0dHJpYnV0
ZXNCdWlsZGVyOjpidWlsZENoYXJhY3RlckRhdGFNYXApOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
VGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyOjpmaWxsQ2hhcmFjdGVyRGF0YU1hcCk6CisgICAg
ICAgICogcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1RleHRMYXlvdXRFbmdpbmU6OmxheW91dFRleHRPbkxpbmVPclBhdGgpOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3NCdWlsZGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1RleHRNZXRyaWNzQnVpbGRlcjo6bWVhc3VyZVRleHRSZW5kZXJlcik6Cisg
ICAgICAgICogc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U3RvcmFnZUFyZWFTeW5jOjpzeW5jVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpTdG9y
YWdlQXJlYVN5bmM6OnBlcmZvcm1JbXBvcnQpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFy
ZWFTeW5jOjpzeW5jKToKKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VNYXAuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U3RvcmFnZU1hcDo6a2V5KToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VN
YXA6OnNldEl0ZW0pOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU5hbWVzcGFjZUltcGw6OmxvY2FsU3RvcmFnZU5h
bWVzcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNlSW1wbDo6Y29weSk6
CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNlSW1wbDo6Y2xvc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6U3RvcmFnZU5hbWVzcGFjZUltcGw6OmNsZWFyQWxsT3JpZ2luc0ZvckRlbGV0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpzeW5jKToKKyAg
ICAgICAgKiBzdmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlQW5pbWF0aW9uRWxlbWVudEZyb21UYXJnZXQp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZW1vdmVBbGxBbmlt
YXRpb25FbGVtZW50c0Zyb21UYXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRG9jdW1lbnRF
eHRlbnNpb25zOjphZGRQZW5kaW5nUmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRG9j
dW1lbnRFeHRlbnNpb25zOjppc0VsZW1lbnRQZW5kaW5nUmVzb3VyY2VzKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlRWxlbWVudEZyb21QZW5kaW5nUmVz
b3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0RvY3VtZW50RXh0ZW5zaW9uczo6c2V0T2ZF
bGVtZW50c1JlZmVyZW5jaW5nVGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0RvY3VtZW50
RXh0ZW5zaW9uczo6cmVtb3ZlQWxsVGFyZ2V0UmVmZXJlbmNlc0ZvckVsZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZW1vdmVBbGxFbGVtZW50UmVmZXJl
bmNlc0ZvclRhcmdldCk6CisgICAgICAgICogc3ZnL1NWR0VsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRWxlbWVudDo6flNWR0VsZW1lbnQpOgorICAgICAgICAqIHN2Zy9hbmltYXRp
b24vU01JTFRpbWVDb250YWluZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWVDb250
YWluZXI6OnVwZGF0ZUFuaW1hdGlvbnMpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFn
ZUNhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlQ2FjaGU6On5TVkdJbWFnZUNh
Y2hlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlQ2FjaGU6OnJlbW92ZUNsaWVudEZyb21D
YWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZUNhY2hlOjpyZXF1ZXN0ZWRTaXplQW5k
U2NhbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlQ2FjaGU6OmltYWdlQ29udGVudENo
YW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2VDYWNoZTo6cmVkcmF3KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0ltYWdlQ2FjaGU6Omxvb2t1cE9yQ3JlYXRlQml0bWFwSW1hZ2VGb3JS
ZW5kZXJlcik6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRl
ci5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6ZWZmZWN0UmVmZXJlbmNl
cyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjphZGRCdWlsdGluRWZmZWN0
cyk6CisgICAgICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eS5oOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRQcm9wZXJ0eTo6flNWR0FuaW1hdGVkUHJvcGVydHkp
OgorICAgICAgICAqIHN2Zy9wcm9wZXJ0aWVzL1NWR0F0dHJpYnV0ZVRvUHJvcGVydHlNYXAuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHQXR0cmlidXRlVG9Qcm9wZXJ0eU1hcDo6YWRkUHJvcGVy
dGllcyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBdHRyaWJ1dGVUb1Byb3BlcnR5TWFwOjpzeW5j
aHJvbml6ZVByb3BlcnRpZXMpOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyQ29udGV4dC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0OjpoYXNQZW5kaW5nQWN0aXZpdHkpOgor
ICAgICAgICAqIHdvcmtlcnMvV29ya2VyRXZlbnRRdWV1ZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpXb3JrZXJFdmVudFF1ZXVlOjpjbG9zZSk6CisgICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpzZXRSZXF1ZXN0SGVhZGVy
SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OmdldEFsbFJlc3Bv
bnNlSGVhZGVycyk6CisgICAgICAgICogeG1sL1hQYXRoRnVuY3Rpb25zLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlhQYXRoOjpjcmVhdGVGdW5jdGlvbik6CisgICAgICAgICogeG1sL1hQYXRoUGFy
c2VyLmNwcDoKKyAgICAgICAgKGlzQXhpc05hbWUpOgorICAgICAgICAqIHhtbC9YU0xUUHJvY2Vz
c29yTGlieHNsdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp4c2x0UGFyYW1BcnJheUZyb21QYXJh
bWV0ZXJNYXApOgorICAgICAgICAqIHhtbC9YU0xUUHJvY2Vzc29yUXQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6WFNMVFByb2Nlc3Nvcjo6dHJhbnNmb3JtVG9TdHJpbmcpOgorCiAyMDEyLTA4LTI3
ICBOZWQgSG9sYnJvb2sgIDxuaG9sYnJvb2tAYXBwbGUuY29tPgogCiAgICAgICAgIEltcHJvdmUg
bGluZSBicmVha2luZyBwZXJmb3JtYW5jZSBmb3IgY29tcGxleCB0ZXh0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9ibGFja2Jl
cnJ5L0NoYW5nZUxvZwppbmRleCBmNjRjYTFlOGZjYWJjZjhhZjQzMmViNDY3MGMwMGY5NDYwODJh
NDA2Li45YzMzMzc2NjBkNDA1YmVlZDdlZTZlNjUxNTJhOGQwYTUxMjMxZjk2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQv
YmxhY2tiZXJyeS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOCBAQAorMjAxMi0wOC0yNyAgQ2FpbyBN
YXJjZWxvIGRlIE9saXZlaXJhIEZpbGhvICA8Y2Fpby5vbGl2ZWlyYUBvcGVuYm9zc2Eub3JnPgor
CisgICAgICAgIFJlbmFtZSBmaXJzdC9zZWNvbmQgdG8ga2V5L3ZhbHVlIGluIEhhc2hNYXAgaXRl
cmF0b3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04
Mjc4NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
QXBpL0JhY2tpbmdTdG9yZS5jcHA6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkJhY2tp
bmdTdG9yZVByaXZhdGU6OnNldEJhY2tpbmdTdG9yZVJlY3QpOgorICAgICAgICAoQmxhY2tCZXJy
eTo6V2ViS2l0OjpCYWNraW5nU3RvcmVQcml2YXRlOjp2aXNpYmxlVGlsZXNSZWN0KToKKyAgICAg
ICAgKEJsYWNrQmVycnk6OldlYktpdDo6QmFja2luZ1N0b3JlUHJpdmF0ZTo6cmVzZXRUaWxlcyk6
CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkJhY2tpbmdTdG9yZVByaXZhdGU6OnVwZGF0
ZVRpbGVzKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6QmFja2luZ1N0b3JlUHJpdmF0
ZTo6dXBkYXRlVGlsZXNGb3JTY3JvbGxPck5vdFJlbmRlcmVkUmVnaW9uKToKKyAgICAgICAgKEJs
YWNrQmVycnk6OldlYktpdDo6QmFja2luZ1N0b3JlUHJpdmF0ZTo6bWFwRnJvbVRyYW5zZm9ybWVk
Q29udGVudHNUb1RpbGVzKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25Q
cmVzZW50ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vdGlmaWNhdGlvblByZXNlbnRl
ckltcGw6OmNhbmNlbCk6CisgICAgICAgIChXZWJDb3JlOjpOb3RpZmljYXRpb25QcmVzZW50ZXJJ
bXBsOjpvblBlcm1pc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6Tm90aWZpY2F0aW9uUHJlc2Vu
dGVySW1wbDo6bm90aWZpY2F0aW9uQ2xpY2tlZCk6CisgICAgICAgICogV2ViS2l0U3VwcG9ydC9B
Ym91dERhdGEuY3BwOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpkdW1wSlNDVHlwZUNv
dW50U2V0VG9UYWJsZUhUTUwpOgorICAgICAgICAqIFdlYktpdFN1cHBvcnQvRnJhbWVMYXllcnMu
Y3BwOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpGcmFtZUxheWVyczo6cmVtb3ZlTGF5
ZXJCeUZyYW1lKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6RnJhbWVMYXllcnM6OmNv
bW1pdE9uV2ViS2l0VGhyZWFkKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6RnJhbWVM
YXllcnM6OmNhbGN1bGF0ZVJvb3RMYXllcik6CisKIDIwMTItMDgtMjcgIE1pa2hhaWwgUG96ZG55
YWtvdiAgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CiAKICAgICAgICAgUmVuYW1lIFJl
Z2lzdGVyUHJvdG9jb2xIYW5kbGVyIEFQSSB0byBOYXZpZ2F0b3JDb250ZW50VXRpbHMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggYjdlNGQ1MDNhMDQyYTc2MGJiMDgzOTMzZTYzYTA0MmVl
M2FiMzYxMi4uZjJiMjRmZGI5M2I0OWI4ODAyMGMxMzVjOWMxZWZkM2E1OTVlYjMzNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAxMi0wOC0yNyAgQ2FpbyBN
YXJjZWxvIGRlIE9saXZlaXJhIEZpbGhvICA8Y2Fpby5vbGl2ZWlyYUBvcGVuYm9zc2Eub3JnPgor
CisgICAgICAgIFJlbmFtZSBmaXJzdC9zZWNvbmQgdG8ga2V5L3ZhbHVlIGluIEhhc2hNYXAgaXRl
cmF0b3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04
Mjc4NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
c3JjL1dlYkdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyLmNwcDoKKyAgICAgICAg
KFdlYkdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyOjpyZW1vdmUpOgorICAgICAg
ICAqIHNyYy9XZWJJREJNZXRhZGF0YS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYklEQk1ldGFk
YXRhOjpXZWJJREJNZXRhZGF0YSk6CisgICAgICAgICogc3JjL1dlYkludGVudC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYkludGVudDo6ZXh0cmFzVmFsdWUpOgorICAgICAgICAqIHRlc3RzL1dl
YlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXJUZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRF
U1RfRik6CisKIDIwMTItMDgtMjcgIEp1c3RpbiBOb3Zvc2FkICA8anVub3ZAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFtDaHJvbWl1bV0gSW1wbGVtZW50aW5nIGEgZ2xvYmFsIGxpbWl0IG9uIG1l
bW9yeSBjb25zdW1lZCBieSBkZWZlcnJlZCAyRCBjYW52YXNlcwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9lZmwvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCmluZGV4
IDRhOGJiYjgwZDBiNjNlODEzMjgwZmY0MzkzNGQ1MzVjZjY1NTUxYzAuLmExMTY3ODM1ODhmYWYw
YjkxZTJmMzdkY2QxNjM2MmJlNTRlMjk0NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZs
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
NyBAQAorMjAxMi0wOC0yNyAgQ2FpbyBNYXJjZWxvIGRlIE9saXZlaXJhIEZpbGhvICA8Y2Fpby5v
bGl2ZWlyYUBvcGVuYm9zc2Eub3JnPgorCisgICAgICAgIFJlbmFtZSBmaXJzdC9zZWNvbmQgdG8g
a2V5L3ZhbHVlIGluIEhhc2hNYXAgaXRlcmF0b3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Mjc4NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBw
b3J0RWZsLmNwcDoKKyAgICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6ZXZhbHVhdGVT
Y3JpcHRJbklzb2xhdGVkV29ybGQpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRmb3Jt
U3RyYXRlZ2llc0VmbC5jcHA6CisgICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNFZmw6OmdldFBs
dWdpbkluZm8pOgorICAgICAgICAqIGV3ay9ld2tfaW50ZW50LmNwcDoKKyAgICAgICAgKGV3a19p
bnRlbnRfZXh0cmFfZ2V0KToKKwogMjAxMi0wOC0yNyAgTWlraGFpbCBQb3pkbnlha292ICA8bWlr
aGFpbC5wb3pkbnlha292QGludGVsLmNvbT4KIAogICAgICAgICBSZW5hbWUgUmVnaXN0ZXJQcm90
b2NvbEhhbmRsZXIgQVBJIHRvIE5hdmlnYXRvckNvbnRlbnRVdGlscwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCmlu
ZGV4IDA4MTMwYmNhN2M4YjI1YTgyYzU5NmIwYzMzZGU4NGQ1OTMxZWE1NDMuLjlkMzIwMWI4Mjgx
YmNmYmZkZDQ4NTc4YThlOWJmMDE2MTAxODk1NzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Z3RrL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxNyBAQAorMjAxMi0wOC0yNyAgQ2FpbyBNYXJjZWxvIGRlIE9saXZlaXJhIEZpbGhvICA8Y2Fp
by5vbGl2ZWlyYUBvcGVuYm9zc2Eub3JnPgorCisgICAgICAgIFJlbmFtZSBmaXJzdC9zZWNvbmQg
dG8ga2V5L3ZhbHVlIGluIEhhc2hNYXAgaXRlcmF0b3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Mjc4NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVn
aWVzR3RrLmNwcDoKKyAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc0d0azo6Z2V0UGx1Z2luSW5m
byk6CisgICAgICAgICogd2Via2l0L3dlYmtpdGZhdmljb25kYXRhYmFzZS5jcHA6CisgICAgICAg
ICh3ZWJraXRGYXZpY29uRGF0YWJhc2VJbXBvcnRGaW5pc2hlZCk6CisgICAgICAgICogd2Via2l0
L3dlYmtpdHdlYnBsdWdpbi5jcHA6CisgICAgICAgICh3ZWJraXRfd2ViX3BsdWdpbl9nZXRfbWlt
ZXR5cGVzKToKKwogMjAxMi0wOC0yNyAgTWlraGFpbCBQb3pkbnlha292ICA8bWlraGFpbC5wb3pk
bnlha292QGludGVsLmNvbT4KIAogICAgICAgICBSZW5hbWUgUmVnaXN0ZXJQcm90b2NvbEhhbmRs
ZXIgQVBJIHRvIE5hdmlnYXRvckNvbnRlbnRVdGlscwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCmluZGV4IGI0NjAx
ZDNkYzc2MDA4OTMzMGUzY2FiNjUyNTJlMGJlNTIxOGVkMzkuLjYyODZmNzcyYmVjOTA3ZWY3Njlk
MDI4MTE3NjhkMDU4MTEwZDFjM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NCBAQAor
MjAxMi0wOC0yNyAgQ2FpbyBNYXJjZWxvIGRlIE9saXZlaXJhIEZpbGhvICA8Y2Fpby5vbGl2ZWly
YUBvcGVuYm9zc2Eub3JnPgorCisgICAgICAgIFJlbmFtZSBmaXJzdC9zZWNvbmQgdG8ga2V5L3Zh
bHVlIGluIEhhc2hNYXAgaXRlcmF0b3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD04Mjc4NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogSGlzdG9yeS9XZWJIaXN0b3J5Lm1tOgorICAgICAgICAoLVtXZWJI
aXN0b3J5UHJpdmF0ZSByZW1vdmVJdGVtRnJvbURhdGVDYWNoZXM6XSk6CisgICAgICAgICgtW1dl
Ykhpc3RvcnlQcml2YXRlIG9yZGVyZWRMYXN0VmlzaXRlZERheXNdKToKKyAgICAgICAgKFdlYkhp
c3RvcnlXcml0ZXI6OldlYkhpc3RvcnlXcml0ZXIpOgorICAgICAgICAqIE1pc2MvV2ViQ29yZVN0
YXRpc3RpY3MubW06CisgICAgICAgICgrW1dlYkNvcmVTdGF0aXN0aWNzIGphdmFTY3JpcHRQcm90
ZWN0ZWRPYmplY3RUeXBlQ291bnRzXSk6CisgICAgICAgICgrW1dlYkNvcmVTdGF0aXN0aWNzIGph
dmFTY3JpcHRPYmplY3RUeXBlQ291bnRzXSk6CisgICAgICAgICogUGx1Z2lucy9Ib3N0ZWQvTmV0
c2NhcGVQbHVnaW5Ib3N0TWFuYWdlci5tbToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVn
aW5Ib3N0TWFuYWdlcjo6aG9zdEZvclBsdWdpbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBl
UGx1Z2luSG9zdE1hbmFnZXI6OnBsdWdpbkhvc3REaWVkKToKKyAgICAgICAgKFdlYktpdDo6TmV0
c2NhcGVQbHVnaW5Ib3N0TWFuYWdlcjo6ZGlkQ3JlYXRlV2luZG93KToKKyAgICAgICAgKiBQbHVn
aW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkhvc3RQcm94eS5tbToKKyAgICAgICAgKFdlYktpdDo6
TmV0c2NhcGVQbHVnaW5Ib3N0UHJveHk6OnBsdWdpbkhvc3REaWVkKToKKyAgICAgICAgKiBQbHVn
aW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW06CisgICAgICAgIChXZWJL
aXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6TG9jYWxPYmplY3RNYXA6OmlkRm9yT2Jq
ZWN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpMb2Nh
bE9iamVjdE1hcDo6cmV0YWluKToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5JbnN0
YW5jZVByb3h5OjpMb2NhbE9iamVjdE1hcDo6cmVsZWFzZSk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6TG9jYWxPYmplY3RNYXA6OmZvcmdldCk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6ZGVzdHJveSk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6d2ViRnJhbWVEaWRGaW5p
c2hMb2FkV2l0aFJlYXNvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFu
Y2VQcm94eTo6Y2FuY2VsQ2hlY2tJZkFsbG93ZWRUb0xvYWRVUkwpOgorICAgICAgICAqIFBsdWdp
bnMvSG9zdGVkL1Byb3h5SW5zdGFuY2UubW06CisgICAgICAgIChXZWJLaXQ6OlByb3h5SW5zdGFu
Y2U6Om1ldGhvZHNOYW1lZCk6CisgICAgICAgIChXZWJLaXQ6OlByb3h5SW5zdGFuY2U6OmZpZWxk
TmFtZWQpOgorICAgICAgICAqIFBsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5WaWV3Lm1tOgorICAg
ICAgICAoLVtXZWJOZXRzY2FwZVBsdWdpblZpZXcgc3RvcFRpbWVyc10pOgorICAgICAgICAoLVtX
ZWJOZXRzY2FwZVBsdWdpblZpZXcgc3RhcnRUaW1lcnNdKToKKyAgICAgICAgKiBXZWJDb3JlU3Vw
cG9ydC9XZWJOb3RpZmljYXRpb25DbGllbnQubW06CisgICAgICAgIChXZWJOb3RpZmljYXRpb25D
bGllbnQ6OnNob3cpOgorICAgICAgICAoV2ViTm90aWZpY2F0aW9uQ2xpZW50OjpjbGVhck5vdGlm
aWNhdGlvbnMpOgorICAgICAgICAoV2ViTm90aWZpY2F0aW9uQ2xpZW50Ojpub3RpZmljYXRpb25P
YmplY3REZXN0cm95ZWQpOgorICAgICAgICAqIFdlYlZpZXcvV2ViSFRNTFZpZXcubW06CisgICAg
ICAgIChjb21tYW5kTmFtZUZvclNlbGVjdG9yKToKKwogMjAxMi0wOC0yNyAgTWlraGFpbCBQb3pk
bnlha292ICA8bWlraGFpbC5wb3pkbnlha292QGludGVsLmNvbT4KIAogICAgICAgICBSZW5hbWUg
UmVnaXN0ZXJQcm90b2NvbEhhbmRsZXIgQVBJIHRvIE5hdmlnYXRvckNvbnRlbnRVdGlscwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L3F0L0No
YW5nZUxvZwppbmRleCA4YzEzMDY2YjEzNzA2YWZiYjgzMmEwMTEyYzI0NGY0MDExODFmYmM2Li44
ZWU4NGFhMjc3NmQ4NDg1NmZjMWI0NzE1ZjdlNDk3YWQyMjRhYzg1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L3F0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE3IEBACisyMDEyLTA4LTI3ICBDYWlvIE1hcmNlbG8gZGUgT2xpdmVpcmEgRmls
aG8gIDxjYWlvLm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+CisKKyAgICAgICAgUmVuYW1lIGZpcnN0
L3NlY29uZCB0byBrZXkvdmFsdWUgaW4gSGFzaE1hcCBpdGVyYXRvcnMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyNzg0CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBBcGkvcXdlYnBhZ2UuY3BwOgorICAg
ICAgICAoZXh0cmFjdENvbnRlbnRUeXBlRnJvbVBsdWdpblZlY3Rvcik6CisgICAgICAgICogQXBp
L3F3ZWJwbHVnaW5kYXRhYmFzZS5jcHA6CisgICAgICAgIChRV2ViUGx1Z2luSW5mbzo6bWltZVR5
cGVzKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNRdC5jcHA6
CisgICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNRdDo6Z2V0UGx1Z2luSW5mbyk6CisKIDIwMTIt
MDgtMjIgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAg
ICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMjYyODcuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L3dpbi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKaW5kZXgg
MzE5YTc1Y2ViYTM2Mzk4NGZlMTE0NDVkNzk0OTM4NjM0ZTM5MDE4NS4uNDBkNWUwNTczYzYyYzE0
MzE3NTc4MTFiOTk2MzYwYjk1OTEwMDZmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4v
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4
IEBACisyMDEyLTA4LTI3ICBDYWlvIE1hcmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gIDxjYWlvLm9s
aXZlaXJhQG9wZW5ib3NzYS5vcmc+CisKKyAgICAgICAgUmVuYW1lIGZpcnN0L3NlY29uZCB0byBr
ZXkvdmFsdWUgaW4gSGFzaE1hcCBpdGVyYXRvcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTgyNzg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBDT01Qcm9wZXJ0eUJhZy5oOgorICAgICAgICAoOjpSZWFk
KToKKyAgICAgICAgKDo6R2V0UHJvcGVydHlJbmZvKToKKyAgICAgICAgKiBXZWJDb3JlU3RhdGlz
dGljcy5jcHA6CisgICAgICAgIChXZWJDb3JlU3RhdGlzdGljczo6amF2YVNjcmlwdFByb3RlY3Rl
ZE9iamVjdFR5cGVDb3VudHMpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3Jt
U3RyYXRlZ2llcy5jcHA6CisgICAgICAgIChXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmdldFBsdWdp
bkluZm8pOgorICAgICAgICAqIFdlYkhpc3RvcnkuY3BwOgorICAgICAgICAoV2ViSGlzdG9yeTo6
cmVtb3ZlSXRlbUZyb21EYXRlQ2FjaGVzKToKKyAgICAgICAgKiBXZWJLaXRDT01BUEkuY3BwOgor
ICAgICAgICAoY2xhc3NGYWN0b3J5KToKKyAgICAgICAgKiBXZWJLaXRTdGF0aXN0aWNzLmNwcDoK
KyAgICAgICAgKFdlYktpdFN0YXRpc3RpY3M6OmNvbUNsYXNzTmFtZUNvdW50cyk6CisgICAgICAg
ICogV2ViTm90aWZpY2F0aW9uQ2VudGVyLmNwcDoKKyAgICAgICAgKFdlYk5vdGlmaWNhdGlvbkNl
bnRlcjo6cG9zdE5vdGlmaWNhdGlvbkludGVybmFsKToKKyAgICAgICAgKFdlYk5vdGlmaWNhdGlv
bkNlbnRlcjo6YWRkT2JzZXJ2ZXIpOgorICAgICAgICAoV2ViTm90aWZpY2F0aW9uQ2VudGVyOjpy
ZW1vdmVPYnNlcnZlcik6CisKIDIwMTItMDgtMjMgIEFkcmllbm5lIFdhbGtlciAgPGVubmVAZ29v
Z2xlLmNvbT4KIAogICAgICAgICBDb252ZXJ0IFNjcm9sbGFibGVBcmVhIEFTU0VSVF9OT1RfUkVB
Q0hFRCB2aXJ0dWFscwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW5jZS9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L3dpbmNlL0NoYW5nZUxvZwppbmRleCAzMWY1MjE3NDYwYzkxZDc4NjJh
ODg5ZTE0NTZlZGM4YWYxZmRhNjEwLi4zMTRjNDBkMTA1ZjhjOTczNDc3Mjc2NDZjMzUzY2UxNzZl
NTE0ZTQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbmNlL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0L3dpbmNlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDEyLTA4LTI3
ICBDYWlvIE1hcmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gIDxjYWlvLm9saXZlaXJhQG9wZW5ib3Nz
YS5vcmc+CisKKyAgICAgICAgUmVuYW1lIGZpcnN0L3NlY29uZCB0byBrZXkvdmFsdWUgaW4gSGFz
aE1hcCBpdGVyYXRvcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTgyNzg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5jcHA6CisgICAg
ICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6Z2V0UGx1Z2luSW5mbyk6CisKIDIwMTItMDgt
MTMgIFRvbSBTZXBleiAgPHRzZXBlekBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVt
XSByZWxlYXNlIEZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6bV9wbHVnaW5XaWRnZXQgcmVmcHRyIHVw
b24gUGx1Z2luIERvY3VtZW50IGRldGFjaC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA5NWZmYzQ3MWJmNDhkMTFh
NGNkOGNhYzdjOGIwMDYzODk0NzM5YTlhLi4wNjg1MWNlNjNjN2Y4NWZmNDk3YTMyNzMyNDNmM2Nk
NGY1NDIzMzkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIzIEBACisyMDEyLTA4LTI3ICBDYWlv
IE1hcmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gIDxjYWlvLm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+
CisKKyAgICAgICAgUmVuYW1lIGZpcnN0L3NlY29uZCB0byBrZXkvdmFsdWUgaW4gSGFzaE1hcCBp
dGVyYXRvcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTgyNzg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBQbGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50Q29kZXJzLmg6CisgICAgICAgICogUGxhdGZvcm0v
Q29yZUlQQy9Db25uZWN0aW9uLmNwcDoKKyAgICAgICAgKENvcmVJUEM6OkNvbm5lY3Rpb246OlN5
bmNNZXNzYWdlU3RhdGU6OmdldE9yQ3JlYXRlKToKKyAgICAgICAgKENvcmVJUEM6OkNvbm5lY3Rp
b246OndhaXRGb3JNZXNzYWdlKToKKyAgICAgICAgKENvcmVJUEM6OkNvbm5lY3Rpb246OnByb2Nl
c3NJbmNvbWluZ01lc3NhZ2UpOgorICAgICAgICAqIFBsYXRmb3JtL2d0ay9Xb3JrUXVldWVHdGsu
Y3BwOgorICAgICAgICAoV29ya1F1ZXVlOjpyZWdpc3RlckV2ZW50U291cmNlSGFuZGxlcik6Cisg
ICAgICAgIChXb3JrUXVldWU6OnVucmVnaXN0ZXJFdmVudFNvdXJjZUhhbmRsZXIpOgorICAgICAg
ICAqIFBsYXRmb3JtL21hYy9Xb3JrUXVldWVNYWMuY3BwOgorICAgICAgICAoV29ya1F1ZXVlOjp1
bnJlZ2lzdGVyTWFjaFBvcnRFdmVudEhhbmRsZXIpOgorICAgICAgICAqIFNoYXJlZC9QbHVnaW5z
L05QUmVtb3RlT2JqZWN0TWFwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TlBSZW1vdGVPYmplY3RN
YXA6OnBsdWdpbkRlc3Ryb3llZCk6CisgICAgICAgICogU2hhcmVkL1VzZXJNZXNzYWdlQ29kZXJz
Lmg6CisgICAgICAgIChXZWJLaXQ6OlVzZXJNZXNzYWdlRW5jb2Rlcjo6YmFzZUVuY29kZSk6Cisg
ICAgICAgICogU2hhcmVkL1dlYlByZWZlcmVuY2VzU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0
Ojp2YWx1ZUZvcktleSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByZWZlcmVuY2VzU3RvcmU6Omdl
dEJvb2xWYWx1ZUZvcktleSk6CisgICAgICAgICogU2hhcmVkL21hYy9XZWJDb3JlQXJndW1lbnRD
b2RlcnNNYWMubW06CisgICAgICAgIChDb3JlSVBDOjo6OmRlY29kZSk6CisgICAgICAgICogU2hh
cmVkL3F0L0FyZ3VtZW50Q29kZXJzUXQuY3BwOgorICAgICAgICAoQ29yZUlQQzo6OjpkZWNvZGUp
OgorICAgICAgICAqIFNoYXJlZC9zb3VwL1dlYkNvcmVBcmd1bWVudENvZGVyc1NvdXAuY3BwOgor
ICAgICAgICAoQ29yZUlQQzo6OjpkZWNvZGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZs
L2V3a19jb250ZXh0LmNwcDoKKyAgICAgICAgKF9Fd2tfQ29udGV4dDo6fl9Fd2tfQ29udGV4dCk6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwOgorICAgICAgICAoX2V3
a192aWV3X3ByaXZfbG9hZGluZ19yZXNvdXJjZXNfY2xlYXIpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2dl
dF9zdWJyZXNvdXJjZXMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZp
ZXdCYXNlLmNwcDoKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlQ29udGFpbmVyRm9yYWxsKToK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9XS1ByaW50aW5nVmlldy5tbToKKyAgICAgICAg
KC1bV0tQcmludGluZ1ZpZXcgX2V4cGVjdGVkUHJldmlld0NhbGxiYWNrRm9yUmVjdDpdKToKKyAg
ICAgICAgKHBhZ2VEaWREcmF3VG9QREYpOgorICAgICAgICAoLVtXS1ByaW50aW5nVmlldyBfZHJh
d1ByZXZpZXc6XSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tOgorICAg
ICAgICAoY29tbWFuZE5hbWVGb3JTZWxlY3Rvcik6CisgICAgICAgICgtW1dLVmlldyB2YWxpZGF0
ZVVzZXJJbnRlcmZhY2VJdGVtOl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdy
YXBoaWNzL0Nvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q29v
cmRpbmF0ZWRCYWNraW5nU3RvcmU6OnVwZGF0ZVRpbGUpOgorICAgICAgICAoV2ViS2l0OjpDb29y
ZGluYXRlZEJhY2tpbmdTdG9yZTo6dGV4dHVyZSk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5h
dGVkQmFja2luZ1N0b3JlOjpwYWludFRvVGV4dHVyZU1hcHBlcik6CisgICAgICAgIChXZWJLaXQ6
OkNvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjpjb21taXRUaWxlT3BlcmF0aW9ucyk6CisgICAgICAg
ICogVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94
eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnVwZGF0
ZVRpbGVGb3JMYXllcik6CisgICAgICAgICogVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
TGF5ZXJUcmVlUmVuZGVyZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVSZW5kZXJl
cjo6YWRqdXN0UG9zaXRpb25Gb3JGaXhlZExheWVycyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVy
VHJlZVJlbmRlcmVyOjpzeW5jQ2FudmFzKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlUmVu
ZGVyZXI6OnNldExheWVyQ2hpbGRyZW4pOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVSZW5k
ZXJlcjo6c2V0TGF5ZXJGaWx0ZXJzKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlUmVuZGVy
ZXI6OnNldExheWVyU3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVSZW5kZXJlcjo6
YXNzaWduSW1hZ2VUb0xheWVyKToKKyAgICAgICAgKiBVSVByb2Nlc3MvR2VvbG9jYXRpb25QZXJt
aXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Okdlb2xvY2F0
aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHk6OmludmFsaWRhdGVSZXF1ZXN0cyk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9XZWJJbnNwZWN0b3JTZXJ2ZXIuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JTZXJ2ZXI6On5XZWJJbnNwZWN0b3JTZXJ2
ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JTZXJ2ZXI6OnJlZ2lzdGVyUGFnZSk6
CisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9XZWJTb2NrZXRTZXJ2ZXJDb25u
ZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbjo6
c2VuZEhUVFBSZXNwb25zZUhlYWRlcik6CisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3RvclNl
cnZlci9xdC9XZWJJbnNwZWN0b3JTZXJ2ZXJRdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYklu
c3BlY3RvclNlcnZlcjo6YnVpbGRQYWdlTGlzdCk6CisgICAgICAgICogVUlQcm9jZXNzL05vdGlm
aWNhdGlvbnMvTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94
eTo6aW52YWxpZGF0ZVJlcXVlc3RzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvUGx1Z2lucy9QbHVn
aW5Qcm9jZXNzUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5Qcm9jZXNzUHJveHk6
OnBsdWdpblByb2Nlc3NDcmFzaGVkT3JGYWlsZWRUb0xhdW5jaCk6CisgICAgICAgICogVUlQcm9j
ZXNzL1dlYkNvbnRleHQuY3BwOgorICAgICAgICAoV2ViS2l0OjpjcmVhdGVEaWN0aW9uYXJ5RnJv
bUhhc2hNYXApOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJJY29uRGF0YWJhc2UuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJJY29uRGF0YWJhc2U6OmRpZEZpbmlzaFVSTEltcG9ydCk6CisgICAg
ICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YlByb2Nlc3NQcm94eTo6Y2hlY2tVUkxSZWNlaXZlZEZyb21XZWJQcm9jZXNzKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjphZGRCYWNrRm9yd2FyZEl0ZW0pOgorICAgICAgICAo
V2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OmZyYW1lQ291bnRJblBhZ2UpOgorICAgICAgICAqIFdl
YlByb2Nlc3MvR2VvbG9jYXRpb24vR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdl
cjo6Y2FuY2VsUmVxdWVzdEZvckdlb2xvY2F0aW9uKToKKyAgICAgICAgKFdlYktpdDo6R2VvbG9j
YXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXI6OmRpZFJlY2VpdmVHZW9sb2NhdGlvblBlcm1p
c3Npb25EZWNpc2lvbik6CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00v
SW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRC
dW5kbGVOb2RlSGFuZGxlOjpnZXRPckNyZWF0ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OkluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OmdldE9yQ3JlYXRlKToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL05vdGlmaWNhdGlvbnMvV2ViTm90aWZpY2F0aW9uTWFuYWdlci5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYk5vdGlmaWNhdGlvbk1hbmFnZXI6OnBvbGljeUZvck9yaWdpbik6
CisgICAgICAgIChXZWJLaXQ6OldlYk5vdGlmaWNhdGlvbk1hbmFnZXI6OnNob3cpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJOb3RpZmljYXRpb25NYW5hZ2VyOjpjbGVhck5vdGlmaWNhdGlvbnMpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJOb3RpZmljYXRpb25NYW5hZ2VyOjpyZW1vdmVOb3RpZmljYXRp
b25Gcm9tQ29udGV4dE1hcCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBl
L05QUnVudGltZU9iamVjdE1hcC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5QUnVudGltZU9iamVj
dE1hcDo6aW52YWxpZGF0ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBl
L05ldHNjYXBlUGx1Z2luLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW46OmRl
c3Ryb3lTdHJlYW0pOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbjo6dW5zY2hlZHVs
ZVRpbWVyKToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW46OmZyYW1lRGlkRmluaXNo
TG9hZGluZyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luOjpmcmFtZURpZEZhaWwp
OgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcDoKKyAgICAgICAg
KFdlYktpdDo6YnVpbGRIVFRQSGVhZGVycyk6CisgICAgICAgIChXZWJLaXQ6OlBsdWdpblZpZXc6
On5QbHVnaW5WaWV3KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpsYXllckJ5SUQpOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmFkb3B0SW1hZ2VCYWNraW5n
U3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6cmVsZWFzZUlt
YWdlQmFja2luZ1N0b3JlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFja0Zv
cndhcmRMaXN0UHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3RQ
cm94eTo6cmVtb3ZlSXRlbSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQ
YWdlTWFjLm1tOgorICAgICAgICAoV2ViS2l0Ojpjb21tYW5kTmFtZUZvclNlbGVjdG9yTmFtZSk6
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUHJvY2Vzczo6dmlzaXRlZExpbmtTdGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzOjphbGxWaXNpdGVkTGlua1N0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6
OldlYlByb2Nlc3M6OmZvY3VzZWRXZWJQYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
czo6Y3JlYXRlV2ViUGFnZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OndlYlBhZ2VH
cm91cCk6CisgICAgICAgIChXZWJLaXQ6OmZyb21Db3VudGVkU2V0VG9IYXNoTWFwKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6c2V0VGV4dENoZWNrZXJTdGF0ZSk6CisKIDIwMTItMDgt
MjcgIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtH
U3RyZWFtZXJdW1F0XSBXZWJBdWRpbyBzdXBwb3J0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNDYWxsYmFja09iamVjdC5oCmluZGV4IDJjM2UwZTg1OWYxNmU4OTU4MWEyZmEzNTZiODQ5
MmYyMDM3OTIwN2QuLjg4ODZmMTExNTA0ZWRkZjI3MmNjODg3NmYwNGZjMDVhNGM4MjgwYzYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCkBAIC04Mywx
MyArODMsMTMgQEAgc3RydWN0IEpTQ2FsbGJhY2tPYmplY3REYXRhIDogV2Vha0hhbmRsZU93bmVy
IHsKICAgICAgICAgICAgIFByaXZhdGVQcm9wZXJ0eU1hcDo6Y29uc3RfaXRlcmF0b3IgbG9jYXRp
b24gPSBtX3Byb3BlcnR5TWFwLmZpbmQocHJvcGVydHlOYW1lLmltcGwoKSk7CiAgICAgICAgICAg
ICBpZiAobG9jYXRpb24gPT0gbV9wcm9wZXJ0eU1hcC5lbmQoKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gSlNWYWx1ZSgpOwotICAgICAgICAgICAgcmV0dXJuIGxvY2F0aW9uLT5zZWNvbmQuZ2V0
KCk7CisgICAgICAgICAgICByZXR1cm4gbG9jYXRpb24tPnZhbHVlLmdldCgpOwogICAgICAgICB9
CiAgICAgICAgIAogICAgICAgICB2b2lkIHNldFByaXZhdGVQcm9wZXJ0eShKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSB2YWx1ZSkKICAgICAgICAgewogICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVu
a25vd24+IGVtcHR5OwotICAgICAgICAgICAgbV9wcm9wZXJ0eU1hcC5hZGQocHJvcGVydHlOYW1l
LmltcGwoKSwgZW1wdHkpLml0ZXJhdG9yLT5zZWNvbmQuc2V0KGdsb2JhbERhdGEsIG93bmVyLCB2
YWx1ZSk7CisgICAgICAgICAgICBtX3Byb3BlcnR5TWFwLmFkZChwcm9wZXJ0eU5hbWUuaW1wbCgp
LCBlbXB0eSkuaXRlcmF0b3ItPnZhbHVlLnNldChnbG9iYWxEYXRhLCBvd25lciwgdmFsdWUpOwog
ICAgICAgICB9CiAgICAgICAgIAogICAgICAgICB2b2lkIGRlbGV0ZVByaXZhdGVQcm9wZXJ0eShj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCkBAIC0xMDAsOCArMTAwLDggQEAgc3RydWN0
IEpTQ2FsbGJhY2tPYmplY3REYXRhIDogV2Vha0hhbmRsZU93bmVyIHsKICAgICAgICAgdm9pZCB2
aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgICAgICB7CiAgICAgICAgICAg
ICBmb3IgKFByaXZhdGVQcm9wZXJ0eU1hcDo6aXRlcmF0b3IgcHRyID0gbV9wcm9wZXJ0eU1hcC5i
ZWdpbigpOyBwdHIgIT0gbV9wcm9wZXJ0eU1hcC5lbmQoKTsgKytwdHIpIHsKLSAgICAgICAgICAg
ICAgICBpZiAocHRyLT5zZWNvbmQpCi0gICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5k
KCZwdHItPnNlY29uZCk7CisgICAgICAgICAgICAgICAgaWYgKHB0ci0+dmFsdWUpCisgICAgICAg
ICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZwdHItPnZhbHVlKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2Fs
bGJhY2tPYmplY3RGdW5jdGlvbnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxs
YmFja09iamVjdEZ1bmN0aW9ucy5oCmluZGV4IDE2MGY0ODg4N2I4NzJjMjliYzNlMmFkYmVkYzkx
ZWZhZmNkNGQ5MzkuLjJjYWUyMWM1MmE4OGE4YjIyZjVjM2YzNjAzNDViZGYwMmViNzk1ZjMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0
aW9ucy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1
bmN0aW9ucy5oCkBAIC00NjUsOCArNDY1LDggQEAgdm9pZCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVu
dD46OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKgogICAg
ICAgICAgICAgdHlwZWRlZiBPcGFxdWVKU0NsYXNzU3RhdGljVmFsdWVzVGFibGU6OmNvbnN0X2l0
ZXJhdG9yIGl0ZXJhdG9yOwogICAgICAgICAgICAgaXRlcmF0b3IgZW5kID0gc3RhdGljVmFsdWVz
LT5lbmQoKTsKICAgICAgICAgICAgIGZvciAoaXRlcmF0b3IgaXQgPSBzdGF0aWNWYWx1ZXMtPmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgICAgIFN0cmluZ0ltcGwqIG5h
bWUgPSBpdC0+Zmlyc3QuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgU3RhdGljVmFsdWVFbnRyeSog
ZW50cnkgPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgICAgIFN0cmluZ0ltcGwqIG5h
bWUgPSBpdC0+a2V5LmdldCgpOworICAgICAgICAgICAgICAgIFN0YXRpY1ZhbHVlRW50cnkqIGVu
dHJ5ID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAgICAgICAgIGlmIChlbnRyeS0+Z2V0UHJv
cGVydHkgJiYgKCEoZW50cnktPmF0dHJpYnV0ZXMgJiBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRF
bnVtKSB8fCAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKSkpCiAgICAgICAgICAg
ICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXIoZXhlYywgbmFtZSkpOwogICAg
ICAgICAgICAgfQpAQCAtNDc2LDggKzQ3Niw4IEBAIHZvaWQgSlNDYWxsYmFja09iamVjdDxQYXJl
bnQ+OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSoKICAg
ICAgICAgICAgIHR5cGVkZWYgT3BhcXVlSlNDbGFzc1N0YXRpY0Z1bmN0aW9uc1RhYmxlOjpjb25z
dF9pdGVyYXRvciBpdGVyYXRvcjsKICAgICAgICAgICAgIGl0ZXJhdG9yIGVuZCA9IHN0YXRpY0Z1
bmN0aW9ucy0+ZW5kKCk7CiAgICAgICAgICAgICBmb3IgKGl0ZXJhdG9yIGl0ID0gc3RhdGljRnVu
Y3Rpb25zLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgICAgICBTdHJp
bmdJbXBsKiBuYW1lID0gaXQtPmZpcnN0LmdldCgpOwotICAgICAgICAgICAgICAgIFN0YXRpY0Z1
bmN0aW9uRW50cnkqIGVudHJ5ID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgICAgICBT
dHJpbmdJbXBsKiBuYW1lID0gaXQtPmtleS5nZXQoKTsKKyAgICAgICAgICAgICAgICBTdGF0aWNG
dW5jdGlvbkVudHJ5KiBlbnRyeSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgICAgICBp
ZiAoIShlbnRyeS0+YXR0cmlidXRlcyAmIGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udEVudW0pIHx8
IChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpKQogICAgICAgICAgICAgICAgICAg
ICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyKGV4ZWMsIG5hbWUpKTsKICAgICAgICAgICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDbGFzc1JlZi5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2xhc3NSZWYuY3BwCmluZGV4IDEzNDQzMTY1
NDc4OTE1ZjhhMTNhNGRiZDM4MDQ0MWVkMjRiYzRkMmQuLjk2NWVlZGQ0ZjFiODZkYWRiMzRlNjRi
ZWIwMzg3YWRjMzAxMjBjNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNDbGFzc1JlZi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NsYXNzUmVm
LmNwcApAQCAtMTA3LDEzICsxMDcsMTMgQEAgT3BhcXVlSlNDbGFzczo6fk9wYXF1ZUpTQ2xhc3Mo
KQogICAgIGlmIChtX3N0YXRpY1ZhbHVlcykgewogICAgICAgICBPcGFxdWVKU0NsYXNzU3RhdGlj
VmFsdWVzVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fc3RhdGljVmFsdWVzLT5lbmQoKTsK
ICAgICAgICAgZm9yIChPcGFxdWVKU0NsYXNzU3RhdGljVmFsdWVzVGFibGU6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV9zdGF0aWNWYWx1ZXMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAg
ICAgICAgIEFTU0VSVCghaXQtPmZpcnN0LT5pc0lkZW50aWZpZXIoKSk7CisgICAgICAgICAgICBB
U1NFUlQoIWl0LT5rZXktPmlzSWRlbnRpZmllcigpKTsKICAgICB9CiAKICAgICBpZiAobV9zdGF0
aWNGdW5jdGlvbnMpIHsKICAgICAgICAgT3BhcXVlSlNDbGFzc1N0YXRpY0Z1bmN0aW9uc1RhYmxl
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3N0YXRpY0Z1bmN0aW9ucy0+ZW5kKCk7CiAgICAgICAg
IGZvciAoT3BhcXVlSlNDbGFzc1N0YXRpY0Z1bmN0aW9uc1RhYmxlOjpjb25zdF9pdGVyYXRvciBp
dCA9IG1fc3RhdGljRnVuY3Rpb25zLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAg
ICAgICBBU1NFUlQoIWl0LT5maXJzdC0+aXNJZGVudGlmaWVyKCkpOworICAgICAgICAgICAgQVNT
RVJUKCFpdC0+a2V5LT5pc0lkZW50aWZpZXIoKSk7CiAgICAgfQogI2VuZGlmCiAgICAgCkBAIC0x
NDcsOCArMTQ3LDggQEAgT3BhcXVlSlNDbGFzc0NvbnRleHREYXRhOjpPcGFxdWVKU0NsYXNzQ29u
dGV4dERhdGEoSlNDOjpKU0dsb2JhbERhdGEmLCBPcGFxdWVKU0MKICAgICAgICAgc3RhdGljVmFs
dWVzID0gYWRvcHRQdHIobmV3IE9wYXF1ZUpTQ2xhc3NTdGF0aWNWYWx1ZXNUYWJsZSk7CiAgICAg
ICAgIE9wYXF1ZUpTQ2xhc3NTdGF0aWNWYWx1ZXNUYWJsZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
anNDbGFzcy0+bV9zdGF0aWNWYWx1ZXMtPmVuZCgpOwogICAgICAgICBmb3IgKE9wYXF1ZUpTQ2xh
c3NTdGF0aWNWYWx1ZXNUYWJsZTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBqc0NsYXNzLT5tX3N0YXRp
Y1ZhbHVlcy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBBU1NFUlQo
IWl0LT5maXJzdC0+aXNJZGVudGlmaWVyKCkpOwotICAgICAgICAgICAgc3RhdGljVmFsdWVzLT5h
ZGQoU3RyaW5nSW1wbDo6Y3JlYXRlKGl0LT5maXJzdC0+Y2hhcmFjdGVycygpLCBpdC0+Zmlyc3Qt
Pmxlbmd0aCgpKSwgYWRvcHRQdHIobmV3IFN0YXRpY1ZhbHVlRW50cnkoaXQtPnNlY29uZC0+Z2V0
UHJvcGVydHksIGl0LT5zZWNvbmQtPnNldFByb3BlcnR5LCBpdC0+c2Vjb25kLT5hdHRyaWJ1dGVz
KSkpOworICAgICAgICAgICAgQVNTRVJUKCFpdC0+a2V5LT5pc0lkZW50aWZpZXIoKSk7CisgICAg
ICAgICAgICBzdGF0aWNWYWx1ZXMtPmFkZChTdHJpbmdJbXBsOjpjcmVhdGUoaXQtPmtleS0+Y2hh
cmFjdGVycygpLCBpdC0+a2V5LT5sZW5ndGgoKSksIGFkb3B0UHRyKG5ldyBTdGF0aWNWYWx1ZUVu
dHJ5KGl0LT52YWx1ZS0+Z2V0UHJvcGVydHksIGl0LT52YWx1ZS0+c2V0UHJvcGVydHksIGl0LT52
YWx1ZS0+YXR0cmlidXRlcykpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTU2LDE1ICsxNTYs
MTUgQEAgT3BhcXVlSlNDbGFzc0NvbnRleHREYXRhOjpPcGFxdWVKU0NsYXNzQ29udGV4dERhdGEo
SlNDOjpKU0dsb2JhbERhdGEmLCBPcGFxdWVKU0MKICAgICAgICAgc3RhdGljRnVuY3Rpb25zID0g
YWRvcHRQdHIobmV3IE9wYXF1ZUpTQ2xhc3NTdGF0aWNGdW5jdGlvbnNUYWJsZSk7CiAgICAgICAg
IE9wYXF1ZUpTQ2xhc3NTdGF0aWNGdW5jdGlvbnNUYWJsZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
anNDbGFzcy0+bV9zdGF0aWNGdW5jdGlvbnMtPmVuZCgpOwogICAgICAgICBmb3IgKE9wYXF1ZUpT
Q2xhc3NTdGF0aWNGdW5jdGlvbnNUYWJsZTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBqc0NsYXNzLT5t
X3N0YXRpY0Z1bmN0aW9ucy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAg
ICBBU1NFUlQoIWl0LT5maXJzdC0+aXNJZGVudGlmaWVyKCkpOwotICAgICAgICAgICAgc3RhdGlj
RnVuY3Rpb25zLT5hZGQoU3RyaW5nSW1wbDo6Y3JlYXRlKGl0LT5maXJzdC0+Y2hhcmFjdGVycygp
LCBpdC0+Zmlyc3QtPmxlbmd0aCgpKSwgYWRvcHRQdHIobmV3IFN0YXRpY0Z1bmN0aW9uRW50cnko
aXQtPnNlY29uZC0+Y2FsbEFzRnVuY3Rpb24sIGl0LT5zZWNvbmQtPmF0dHJpYnV0ZXMpKSk7Cisg
ICAgICAgICAgICBBU1NFUlQoIWl0LT5rZXktPmlzSWRlbnRpZmllcigpKTsKKyAgICAgICAgICAg
IHN0YXRpY0Z1bmN0aW9ucy0+YWRkKFN0cmluZ0ltcGw6OmNyZWF0ZShpdC0+a2V5LT5jaGFyYWN0
ZXJzKCksIGl0LT5rZXktPmxlbmd0aCgpKSwgYWRvcHRQdHIobmV3IFN0YXRpY0Z1bmN0aW9uRW50
cnkoaXQtPnZhbHVlLT5jYWxsQXNGdW5jdGlvbiwgaXQtPnZhbHVlLT5hdHRyaWJ1dGVzKSkpOwog
ICAgICAgICB9CiAgICAgfQogfQogCiBPcGFxdWVKU0NsYXNzQ29udGV4dERhdGEmIE9wYXF1ZUpT
Q2xhc3M6OmNvbnRleHREYXRhKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBPd25QdHI8T3BhcXVl
SlNDbGFzc0NvbnRleHREYXRhPiYgY29udGV4dERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCkub3Bh
cXVlSlNDbGFzc0RhdGEuYWRkKHRoaXMsIG51bGxwdHIpLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAg
T3duUHRyPE9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YT4mIGNvbnRleHREYXRhID0gZXhlYy0+Z2xv
YmFsRGF0YSgpLm9wYXF1ZUpTQ2xhc3NEYXRhLmFkZCh0aGlzLCBudWxscHRyKS5pdGVyYXRvci0+
dmFsdWU7CiAgICAgaWYgKCFjb250ZXh0RGF0YSkKICAgICAgICAgY29udGV4dERhdGEgPSBhZG9w
dFB0cihuZXcgT3BhcXVlSlNDbGFzc0NvbnRleHREYXRhKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhp
cykpOwogICAgIHJldHVybiAqY29udGV4dERhdGE7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCmluZGV4IGQ0NTJiZDQ0NjJhNmVhZGU2NGQ5NWU3Zjc1ZWM2
ODg0NjFiYmU2YWQuLjVmYWQ5ZTcyNWUzNzY5MzA3ZDc5OGFhODc2NmI4NmM3Yzk5MDk5ZWEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCkBAIC02NTYs
NyArNjU2LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXAoRXhlY1N0YXRlKiBleGVjKQogICAgICAg
ICAgICAgZGF0YUxvZygiICAlMWQgPSB7XG4iLCBpKTsKICAgICAgICAgICAgIFN0cmluZ0p1bXBU
YWJsZTo6U3RyaW5nT2Zmc2V0VGFibGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcmFyZURhdGEt
Pm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1tpXS5vZmZzZXRUYWJsZS5lbmQoKTsKICAgICAgICAg
ICAgIGZvciAoU3RyaW5nSnVtcFRhYmxlOjpTdHJpbmdPZmZzZXRUYWJsZTo6Y29uc3RfaXRlcmF0
b3IgaXRlciA9IG1fcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1tpXS5vZmZzZXRU
YWJsZS5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQotICAgICAgICAgICAgICAgIGRhdGFM
b2coIlx0XHRcIiVzXCIgPT4gJTA0ZFxuIiwgVVN0cmluZyhpdGVyLT5maXJzdCkudXRmOCgpLmRh
dGEoKSwgaXRlci0+c2Vjb25kLmJyYW5jaE9mZnNldCk7CisgICAgICAgICAgICAgICAgZGF0YUxv
ZygiXHRcdFwiJXNcIiA9PiAlMDRkXG4iLCBVU3RyaW5nKGl0ZXItPmtleSkudXRmOCgpLmRhdGEo
KSwgaXRlci0+dmFsdWUuYnJhbmNoT2Zmc2V0KTsKICAgICAgICAgICAgIGRhdGFMb2coIiAgICAg
IH1cbiIpOwogICAgICAgICAgICAgKytpOwogICAgICAgICB9IHdoaWxlIChpIDwgbV9yYXJlRGF0
YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLnNpemUoKSk7CkBAIC0xODkzLDcgKzE4OTMsNyBA
QCB2b2lkIEV2YWxDb2RlQ2FjaGU6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIEV2YWxDYWNoZU1hcDo6aXRlcmF0b3IgZW5kID0gbV9jYWNoZU1hcC5lbmQoKTsK
ICAgICBmb3IgKEV2YWxDYWNoZU1hcDo6aXRlcmF0b3IgcHRyID0gbV9jYWNoZU1hcC5iZWdpbigp
OyBwdHIgIT0gZW5kOyArK3B0cikKLSAgICAgICAgdmlzaXRvci5hcHBlbmQoJnB0ci0+c2Vjb25k
KTsKKyAgICAgICAgdmlzaXRvci5hcHBlbmQoJnB0ci0+dmFsdWUpOwogfQogCiB2b2lkIENvZGVC
bG9jazo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkBAIC0zMDA4LDggKzMw
MDgsOCBAQCBVU3RyaW5nIENvZGVCbG9jazo6bmFtZUZvclJlZ2lzdGVyKGludCByZWdpc3Rlck51
bWJlcikKIHsKICAgICBTeW1ib2xUYWJsZTo6aXRlcmF0b3IgZW5kID0gbV9zeW1ib2xUYWJsZS0+
ZW5kKCk7CiAgICAgZm9yIChTeW1ib2xUYWJsZTo6aXRlcmF0b3IgcHRyID0gbV9zeW1ib2xUYWJs
ZS0+YmVnaW4oKTsgcHRyICE9IGVuZDsgKytwdHIpIHsKLSAgICAgICAgaWYgKHB0ci0+c2Vjb25k
LmdldEluZGV4KCkgPT0gcmVnaXN0ZXJOdW1iZXIpCi0gICAgICAgICAgICByZXR1cm4gVVN0cmlu
ZyhwdHItPmZpcnN0KTsKKyAgICAgICAgaWYgKHB0ci0+dmFsdWUuZ2V0SW5kZXgoKSA9PSByZWdp
c3Rlck51bWJlcikKKyAgICAgICAgICAgIHJldHVybiBVU3RyaW5nKHB0ci0+a2V5KTsKICAgICB9
CiAgICAgaWYgKG5lZWRzQWN0aXZhdGlvbigpICYmIHJlZ2lzdGVyTnVtYmVyID09IGFjdGl2YXRp
b25SZWdpc3RlcigpKQogICAgICAgICByZXR1cm4gImFjdGl2YXRpb24iOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0p1bXBUYWJsZS5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0p1bXBUYWJsZS5oCmluZGV4IDViYmUwNDcxMDdmNWIwMWMwMjg5
YmVhMzMxODZlMWY4NGEzYWFmYzcuLjYwMzZjZGE1MWQ1YmNmNTY1ZWFlOTdlOGRiMjY1NTFjOTAy
NTVjNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9KdW1wVGFi
bGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSnVtcFRhYmxlLmgKQEAg
LTU3LDcgKzU3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBTdHJpbmdPZmZzZXRU
YWJsZTo6Y29uc3RfaXRlcmF0b3IgbG9jID0gb2Zmc2V0VGFibGUuZmluZCh2YWx1ZSk7CiAgICAg
ICAgICAgICBpZiAobG9jID09IGVuZCkKICAgICAgICAgICAgICAgICByZXR1cm4gZGVmYXVsdE9m
ZnNldDsKLSAgICAgICAgICAgIHJldHVybiBsb2MtPnNlY29uZC5icmFuY2hPZmZzZXQ7CisgICAg
ICAgICAgICByZXR1cm4gbG9jLT52YWx1ZS5icmFuY2hPZmZzZXQ7CiAgICAgICAgIH0KIAogI2lm
IEVOQUJMRShKSVQpCkBAIC02Nyw3ICs2Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAg
ICAgU3RyaW5nT2Zmc2V0VGFibGU6OmNvbnN0X2l0ZXJhdG9yIGxvYyA9IG9mZnNldFRhYmxlLmZp
bmQodmFsdWUpOwogICAgICAgICAgICAgaWYgKGxvYyA9PSBlbmQpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGN0aURlZmF1bHQ7Ci0gICAgICAgICAgICByZXR1cm4gbG9jLT5zZWNvbmQuY3RpT2Zm
c2V0OworICAgICAgICAgICAgcmV0dXJuIGxvYy0+dmFsdWUuY3RpT2Zmc2V0OwogICAgICAgICB9
CiAjZW5kaWYKICAgICB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0xhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5jcHAKaW5kZXggNTlmMGQwMjM0MzQxN2E3
NDFiYzgyNTczN2QyNjExM2NkYzdhMzI5NS4uZjkyM2U0YTI4YmJjYjAwMzlhNTM3M2U5NmY4NDUy
M2U3OWNlZTA4OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xh
enlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3BwCkBAIC04MSw3ICs4MSw3IEBAIExhenlP
cGVyYW5kVmFsdWVQcm9maWxlKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZVBhcnNlcjo6Z2V0SWZQ
cmVzZW50KAogICAgIGlmIChpdGVyID09IG1fbWFwLmVuZCgpKQogICAgICAgICByZXR1cm4gMDsK
ICAgICAKLSAgICByZXR1cm4gaXRlci0+c2Vjb25kOworICAgIHJldHVybiBpdGVyLT52YWx1ZTsK
IH0KIAogU3BlY3VsYXRlZFR5cGUgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVQYXJzZXI6OnByZWRp
Y3Rpb24oCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2FtcGxp
bmdUb29sLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TYW1wbGluZ1Rvb2wu
Y3BwCmluZGV4IGYwN2RjNzlmYjc4MjU4ZDg2MWQ0ZjQ4NTE3ZjFiNTViMjk2Mzk1M2QuLmY5Yjgy
NDVlNTQ3N2E4ZjMwZWQ1MjFjMzEyNmJmMDE5ZDVjYjJlNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TYW1wbGluZ1Rvb2wuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9TYW1wbGluZ1Rvb2wuY3BwCkBAIC00MTAsNyArNDEwLDcgQEAg
dm9pZCBTYW1wbGluZ1Rvb2w6OmR1bXAoRXhlY1N0YXRlKiBleGVjKQogICAgIFZlY3RvcjxTY3Jp
cHRTYW1wbGVSZWNvcmQqPiBjb2RlQmxvY2tTYW1wbGVzKHNjb3BlQ291bnQpOwogICAgIFNjcmlw
dFNhbXBsZVJlY29yZE1hcDo6aXRlcmF0b3IgaXRlciA9IG1fc2NvcGVTYW1wbGVNYXAtPmJlZ2lu
KCk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzY29wZUNvdW50OyArK2ksICsraXRlcikKLSAg
ICAgICAgY29kZUJsb2NrU2FtcGxlc1tpXSA9IGl0ZXItPnNlY29uZC5nZXQoKTsKKyAgICAgICAg
Y29kZUJsb2NrU2FtcGxlc1tpXSA9IGl0ZXItPnZhbHVlLmdldCgpOwogCiAgICAgcXNvcnQoY29k
ZUJsb2NrU2FtcGxlcy5iZWdpbigpLCBzY29wZUNvdW50LCBzaXplb2YoU2NyaXB0U2FtcGxlUmVj
b3JkKiksIGNvbXBhcmVTY3JpcHRTYW1wbGVSZWNvcmRzKTsKIApAQCAtNDQ2LDggKzQ0Niw4IEBA
IHZvaWQgU2FtcGxpbmdUb29sOjpkdW1wKEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgICAgICAg
ICBWZWN0b3I8TGluZUNvdW50SW5mbz4gbGluZUNvdW50SW5mbyhsaW5lc0NvdW50KTsKICAgICAg
ICAgICAgICAgICBpbnQgbGluZW5vID0gMDsKICAgICAgICAgICAgICAgICBmb3IgKEhhc2hNYXA8
dW5zaWduZWQsdW5zaWduZWQ+OjppdGVyYXRvciBpdGVyID0gbGluZUNvdW50cy5iZWdpbigpOyBp
dGVyICE9IGxpbmVDb3VudHMuZW5kKCk7ICsraXRlciwgKytsaW5lbm8pIHsKLSAgICAgICAgICAg
ICAgICAgICAgbGluZUNvdW50SW5mb1tsaW5lbm9dLmxpbmUgPSBpdGVyLT5maXJzdDsKLSAgICAg
ICAgICAgICAgICAgICAgbGluZUNvdW50SW5mb1tsaW5lbm9dLmNvdW50ID0gaXRlci0+c2Vjb25k
OworICAgICAgICAgICAgICAgICAgICBsaW5lQ291bnRJbmZvW2xpbmVub10ubGluZSA9IGl0ZXIt
PmtleTsKKyAgICAgICAgICAgICAgICAgICAgbGluZUNvdW50SW5mb1tsaW5lbm9dLmNvdW50ID0g
aXRlci0+dmFsdWU7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgcXNvcnQo
bGluZUNvdW50SW5mby5iZWdpbigpLCBsaW5lc0NvdW50LCBzaXplb2YoTGluZUNvdW50SW5mbyks
IGNvbXBhcmVMaW5lQ291bnRJbmZvU2FtcGxpbmcpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAppbmRleCAwNWRm
OWNhZmJjMzM0MTE3Y2MzMzdkYTI0ODcxZDhjZTNiYmRhZGM0Li42OGJmYzg0ZWYyMjljYzJhMWRl
ODU3ZjA2N2I5N2ExNmEzZTg1ZGIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcApAQCAtMjMwLDcgKzIzMCw3
IEBAIGJvb2wgQnl0ZWNvZGVHZW5lcmF0b3I6OmFkZFZhcihjb25zdCBJZGVudGlmaWVyJiBpZGVu
dCwgYm9vbCBpc0NvbnN0YW50LCBSZWdpc3RlCiAgICAgU3ltYm9sVGFibGU6OkFkZFJlc3VsdCBy
ZXN1bHQgPSBzeW1ib2xUYWJsZSgpLmFkZChpZGVudC5pbXBsKCksIG5ld0VudHJ5KTsKIAogICAg
IGlmICghcmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgcjAgPSAmcmVnaXN0ZXJGb3IocmVz
dWx0Lml0ZXJhdG9yLT5zZWNvbmQuZ2V0SW5kZXgoKSk7CisgICAgICAgIHIwID0gJnJlZ2lzdGVy
Rm9yKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0SW5kZXgoKSk7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAKQEAgLTI0OCw4ICsyNDgsOCBAQCBpbnQgQnl0ZWNvZGVHZW5lcmF0b3I6
OmFkZEdsb2JhbFZhcigKICAgICAgICAgbmV3RW50cnkuYXR0ZW1wdFRvV2F0Y2goKTsKICAgICBT
eW1ib2xUYWJsZTo6QWRkUmVzdWx0IHJlc3VsdCA9IHN5bWJvbFRhYmxlKCkuYWRkKGlkZW50Lmlt
cGwoKSwgbmV3RW50cnkpOwogICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAg
cmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQubm90aWZ5V3JpdGUoKTsKLSAgICAgICAgaW5kZXggPSBy
ZXN1bHQuaXRlcmF0b3ItPnNlY29uZC5nZXRJbmRleCgpOworICAgICAgICByZXN1bHQuaXRlcmF0
b3ItPnZhbHVlLm5vdGlmeVdyaXRlKCk7CisgICAgICAgIGluZGV4ID0gcmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZS5nZXRJbmRleCgpOwogICAgIH0KICAgICByZXR1cm4gaW5kZXg7CiB9CkBAIC0xMDYz
LDcgKzEwNjMsNyBAQCB1bnNpZ25lZCBCeXRlY29kZUdlbmVyYXRvcjo6YWRkQ29uc3RhbnQoY29u
c3QgSWRlbnRpZmllciYgaWRlbnQpCiAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQogICAgICAg
ICBtX2NvZGVCbG9jay0+YWRkSWRlbnRpZmllcihJZGVudGlmaWVyKG1fZ2xvYmFsRGF0YSwgcmVw
KSk7CiAKLSAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgcmV0dXJuIHJl
c3VsdC5pdGVyYXRvci0+dmFsdWU7CiB9CiAKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9y
OjphZGRDb25zdGFudFZhbHVlKEpTVmFsdWUgdikKQEAgLTEwNzYsNyArMTA3Niw3IEBAIFJlZ2lz
dGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjphZGRDb25zdGFudFZhbHVlKEpTVmFsdWUgdikKICAg
ICAgICAgKyttX25leHRDb25zdGFudE9mZnNldDsKICAgICAgICAgbV9jb2RlQmxvY2stPmFkZENv
bnN0YW50KEpTVmFsdWUodikpOwogICAgIH0gZWxzZQotICAgICAgICBpbmRleCA9IHJlc3VsdC5p
dGVyYXRvci0+c2Vjb25kOworICAgICAgICBpbmRleCA9IHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7
CiAKICAgICByZXR1cm4gJm1fY29uc3RhbnRQb29sUmVnaXN0ZXJzW2luZGV4XTsKIH0KQEAgLTEy
MjMsNyArMTIyMyw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TG9hZChS
ZWdpc3RlcklEKiBkc3QsIGRvdWJsZSBudW1iZXIpCiAgICAgLy8gd29yayBjb3JyZWN0bHkgd2l0
aCBOYU4gYXMgYSBrZXkuCiAgICAgaWYgKGlzbmFuKG51bWJlcikgfHwgbnVtYmVyID09IEhhc2hU
cmFpdHM8ZG91YmxlPjo6ZW1wdHlWYWx1ZSgpIHx8IEhhc2hUcmFpdHM8ZG91YmxlPjo6aXNEZWxl
dGVkVmFsdWUobnVtYmVyKSkKICAgICAgICAgcmV0dXJuIGVtaXRMb2FkKGRzdCwganNOdW1iZXIo
bnVtYmVyKSk7Ci0gICAgSlNWYWx1ZSYgdmFsdWVJbk1hcCA9IG1fbnVtYmVyTWFwLmFkZChudW1i
ZXIsIEpTVmFsdWUoKSkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBKU1ZhbHVlJiB2YWx1ZUluTWFw
ID0gbV9udW1iZXJNYXAuYWRkKG51bWJlciwgSlNWYWx1ZSgpKS5pdGVyYXRvci0+dmFsdWU7CiAg
ICAgaWYgKCF2YWx1ZUluTWFwKQogICAgICAgICB2YWx1ZUluTWFwID0ganNOdW1iZXIobnVtYmVy
KTsKICAgICByZXR1cm4gZW1pdExvYWQoZHN0LCB2YWx1ZUluTWFwKTsKQEAgLTEyMzEsNyArMTIz
MSw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TG9hZChSZWdpc3RlcklE
KiBkc3QsIGRvdWJsZSBudW1iZXIpCiAKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjpl
bWl0TG9hZChSZWdpc3RlcklEKiBkc3QsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIpCiB7
Ci0gICAgSlNTdHJpbmcqJiBzdHJpbmdJbk1hcCA9IG1fc3RyaW5nTWFwLmFkZChpZGVudGlmaWVy
LmltcGwoKSwgMCkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBKU1N0cmluZyomIHN0cmluZ0luTWFw
ID0gbV9zdHJpbmdNYXAuYWRkKGlkZW50aWZpZXIuaW1wbCgpLCAwKS5pdGVyYXRvci0+dmFsdWU7
CiAgICAgaWYgKCFzdHJpbmdJbk1hcCkKICAgICAgICAgc3RyaW5nSW5NYXAgPSBqc093bmVkU3Ry
aW5nKGdsb2JhbERhdGEoKSwgaWRlbnRpZmllci51c3RyaW5nKCkpOwogICAgIHJldHVybiBlbWl0
TG9hZChkc3QsIEpTVmFsdWUoc3RyaW5nSW5NYXApKTsKQEAgLTE3NzMsNyArMTc3Myw3IEBAIHVu
c2lnbmVkIEJ5dGVjb2RlR2VuZXJhdG9yOjphZGRDb25zdGFudEJ1ZmZlcih1bnNpZ25lZCBsZW5n
dGgpCiAKIEpTU3RyaW5nKiBCeXRlY29kZUdlbmVyYXRvcjo6YWRkU3RyaW5nQ29uc3RhbnQoY29u
c3QgSWRlbnRpZmllciYgaWRlbnRpZmllcikKIHsKLSAgICBKU1N0cmluZyomIHN0cmluZ0luTWFw
ID0gbV9zdHJpbmdNYXAuYWRkKGlkZW50aWZpZXIuaW1wbCgpLCAwKS5pdGVyYXRvci0+c2Vjb25k
OworICAgIEpTU3RyaW5nKiYgc3RyaW5nSW5NYXAgPSBtX3N0cmluZ01hcC5hZGQoaWRlbnRpZmll
ci5pbXBsKCksIDApLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoIXN0cmluZ0luTWFwKSB7CiAg
ICAgICAgIHN0cmluZ0luTWFwID0ganNTdHJpbmcoZ2xvYmFsRGF0YSgpLCBpZGVudGlmaWVyLnVz
dHJpbmcoKSk7CiAgICAgICAgIGFkZENvbnN0YW50VmFsdWUoc3RyaW5nSW5NYXApOwpAQCAtMTg0
NSw4ICsxODQ1LDggQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRMYXp5TmV3
RnVuY3Rpb24oUmVnaXN0ZXJJRCogZHN0LCBGdW5jdGlvbkJvZHkKIHsKICAgICBGdW5jdGlvbk9m
ZnNldE1hcDo6QWRkUmVzdWx0IHB0ciA9IG1fZnVuY3Rpb25PZmZzZXRzLmFkZChmdW5jdGlvbiwg
MCk7CiAgICAgaWYgKHB0ci5pc05ld0VudHJ5KQotICAgICAgICBwdHIuaXRlcmF0b3ItPnNlY29u
ZCA9IG1fY29kZUJsb2NrLT5hZGRGdW5jdGlvbkRlY2wobWFrZUZ1bmN0aW9uKG1fZ2xvYmFsRGF0
YSwgZnVuY3Rpb24pKTsKLSAgICByZXR1cm4gZW1pdE5ld0Z1bmN0aW9uSW50ZXJuYWwoZHN0LCBw
dHIuaXRlcmF0b3ItPnNlY29uZCwgdHJ1ZSk7CisgICAgICAgIHB0ci5pdGVyYXRvci0+dmFsdWUg
PSBtX2NvZGVCbG9jay0+YWRkRnVuY3Rpb25EZWNsKG1ha2VGdW5jdGlvbihtX2dsb2JhbERhdGEs
IGZ1bmN0aW9uKSk7CisgICAgcmV0dXJuIGVtaXROZXdGdW5jdGlvbkludGVybmFsKGRzdCwgcHRy
Lml0ZXJhdG9yLT52YWx1ZSwgdHJ1ZSk7CiB9CiAKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJh
dG9yOjplbWl0TmV3RnVuY3Rpb25JbnRlcm5hbChSZWdpc3RlcklEKiBkc3QsIHVuc2lnbmVkIGlu
ZGV4LCBib29sIGRvTnVsbENoZWNrKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCmluZGV4IDlkYTU5YTAwOWI4YmMyMThiMTQyYWU4
NGFjYjFlYTZmYmUwNTk0MjIuLjBjYWIzOTZhNGMwNmJiMzdkOTRhMTkzMDJlMjQ2MmZjYzlmYzUz
YWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXND
b2RlZ2VuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVz
Q29kZWdlbi5jcHAKQEAgLTI2MSw3ICsyNjEsNyBAQCBSZWdpc3RlcklEKiBQcm9wZXJ0eUxpc3RO
b2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZQog
ICAgICAgICAgICAgR2V0dGVyU2V0dGVyUGFpciBwYWlyKG5vZGUsIHN0YXRpY19jYXN0PFByb3Bl
cnR5Tm9kZSo+KDApKTsKICAgICAgICAgICAgIEdldHRlclNldHRlck1hcDo6QWRkUmVzdWx0IHJl
c3VsdCA9IG1hcC5hZGQobm9kZS0+bmFtZSgpLmltcGwoKSwgcGFpcik7CiAgICAgICAgICAgICBp
ZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+
c2Vjb25kLnNlY29uZCA9IG5vZGU7CisgICAgICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZS5zZWNvbmQgPSBub2RlOwogICAgICAgICB9CiAKICAgICAgICAgLy8gSXRlcmF0ZSBvdmVy
IHRoZSByZW1haW5pbmcgcHJvcGVydGllcyBpbiB0aGUgbGlzdC4KQEAgLTI3OSw3ICsyNzksNyBA
QCBSZWdpc3RlcklEKiBQcm9wZXJ0eUxpc3ROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5l
cmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZQogICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm1fdHlw
ZSA9PSBQcm9wZXJ0eU5vZGU6OkdldHRlciB8fCBub2RlLT5tX3R5cGUgPT0gUHJvcGVydHlOb2Rl
OjpTZXR0ZXIpOwogICAgICAgICAgICAgR2V0dGVyU2V0dGVyTWFwOjppdGVyYXRvciBpdCA9IG1h
cC5maW5kKG5vZGUtPm5hbWUoKS5pbXBsKCkpOwogICAgICAgICAgICAgQVNTRVJUKGl0ICE9IG1h
cC5lbmQoKSk7Ci0gICAgICAgICAgICBHZXR0ZXJTZXR0ZXJQYWlyJiBwYWlyID0gaXQtPnNlY29u
ZDsKKyAgICAgICAgICAgIEdldHRlclNldHRlclBhaXImIHBhaXIgPSBpdC0+dmFsdWU7CiAKICAg
ICAgICAgICAgIC8vIFdhcyB0aGlzIGFscmVhZHkgZ2VuZXJhdGVkIGFzIGEgcGFydCBvZiBpdHMg
cGFydG5lcj8KICAgICAgICAgICAgIGlmIChwYWlyLnNlY29uZCA9PSBub2RlKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAKaW5kZXggMGE2NmQ2ZjM0ZTZmNGJj
OWNjNmQwNDdiZjk4NmRmYjQxYjcwZWJkMC4uNTQ4M2QyZTBlNzRhNzQ2YmY2YmRkNWYyNjMxOTFi
MTljMDNhZjlhNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0Rl
YnVnZ2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIu
Y3BwCkBAIC01OSw3ICs1OSw3IEBAIGlubGluZSBSZWNvbXBpbGVyOjp+UmVjb21waWxlcigpCiAg
ICAgLy8gSmF2YVNjcmlwdCBpbiB0aGUgaW5zcGVjdG9yLgogICAgIFNvdXJjZVByb3ZpZGVyTWFw
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3NvdXJjZVByb3ZpZGVycy5lbmQoKTsKICAgICBmb3Ig
KFNvdXJjZVByb3ZpZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbV9zb3VyY2VQcm92aWRl
cnMuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikKLSAgICAgICAgbV9kZWJ1Z2dlci0+c291
cmNlUGFyc2VkKGl0ZXItPnNlY29uZCwgaXRlci0+Zmlyc3QsIC0xLCBVU3RyaW5nKCkpOworICAg
ICAgICBtX2RlYnVnZ2VyLT5zb3VyY2VQYXJzZWQoaXRlci0+dmFsdWUsIGl0ZXItPmtleSwgLTEs
IFVTdHJpbmcoKSk7CiB9CiAKIGlubGluZSB2b2lkIFJlY29tcGlsZXI6Om9wZXJhdG9yKCkoSlND
ZWxsKiBjZWxsKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1
bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKaW5kZXggNjQwYTBhOTY2NWIxNmVi
NTQ1ZGI1MzViMGE3ODRiY2VjMzkzOGUzMS4uYWVlMjUyNzAyMjc5ZmUxODZiZTYxNmMzYzM2MzFi
MjgwZDU1MDI1MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1
bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCkBAIC0yMTQsNyArMjE0LDcg
QEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgaWYg
aXQncyBhIHZhcmlhYmxlIHRoYXQgd2UgdGhpbmsgaXMgYWxpYXNlZCB0bwogICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gdGhlIGFyZ3VtZW50cywgdGhhdCB3ZSBrbm93IHRoYXQgaXQgbWlnaHQg
YWN0dWFsbHkgbm90IGJlLgogICAgICAgICAgICAgICAgICAgICAgICAgQXJndW1lbnRzQWxpYXNp
bmdEYXRhJiBkYXRhID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2FyZ3VtZW50c0Fs
aWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+c2Vjb25kOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEp
LT52YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEubWVyZ2VOb25Bcmd1bWVudHNB
c3NpZ25tZW50KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLm1lcmdlQ2FsbENvbnRl
eHQobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKQEAgLTIzMiw3ICsyMzIsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICBBcmd1bWVudHNBbGlhc2luZ0RhdGEmIGRhdGEgPQotICAgICAgICAgICAgICAgICAgICAgICAg
bV9hcmd1bWVudHNBbGlhc2luZy5maW5kKHZhcmlhYmxlQWNjZXNzRGF0YSktPnNlY29uZDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFj
Y2Vzc0RhdGEpLT52YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXJnZUFyZ3VtZW50
c0Fzc2lnbm1lbnQoKTsKICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBlbnN1cmVzIHRoYXQg
dGhlIHZhcmlhYmxlJ3MgdXNlcyBhcmUgaW4gdGhlIHNhbWUgY29udGV4dCBhcwogICAgICAgICAg
ICAgICAgICAgICAvLyB0aGUgYXJndW1lbnRzIGl0IGlzIGFsaWFzaW5nLgpAQCAtMjQ3LDcgKzI0
Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0
YS0+aXNDYXB0dXJlZCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgICAgIEFyZ3VtZW50c0FsaWFzaW5nRGF0YSYgZGF0YSA9Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+
c2Vjb25kOworICAgICAgICAgICAgICAgICAgICAgICAgbV9hcmd1bWVudHNBbGlhc2luZy5maW5k
KHZhcmlhYmxlQWNjZXNzRGF0YSktPnZhbHVlOwogICAgICAgICAgICAgICAgICAgICBkYXRhLm1l
cmdlQ2FsbENvbnRleHQobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KQEAgLTI1Nyw3ICsyNTcsNyBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmlz
Q2FwdHVyZWQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgICAgICBBcmd1bWVudHNBbGlhc2luZ0RhdGEmIGRhdGEgPQotICAgICAgICAgICAgICAgICAg
ICAgICAgbV9hcmd1bWVudHNBbGlhc2luZy5maW5kKHZhcmlhYmxlQWNjZXNzRGF0YSktPnNlY29u
ZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJp
YWJsZUFjY2Vzc0RhdGEpLT52YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXJnZUNh
bGxDb250ZXh0KG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgLy8gSWYgYSB2YXJpYWJsZSBpcyB1c2VkIGlu
IGEgZmx1c2ggdGhlbiBieSBkZWZpbml0aW9uIGl0IGVzY2FwZXMuCkBAIC0yNzAsNyArMjcwLDcg
QEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5p
c0NhcHR1cmVkKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAgICAgQXJndW1lbnRzQWxpYXNpbmdEYXRhJiBkYXRhID0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIG1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT5zZWNv
bmQ7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFy
aWFibGVBY2Nlc3NEYXRhKS0+dmFsdWU7CiAgICAgICAgICAgICAgICAgICAgIGRhdGEubWVyZ2VO
b25Bcmd1bWVudHNBc3NpZ25tZW50KCk7CiAgICAgICAgICAgICAgICAgICAgIGRhdGEubWVyZ2VD
YWxsQ29udGV4dChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CkBAIC0zNTQsNyArMzU0LDcgQEAgcHVibGljOgogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBBcmd1bWVudHNBbGlhc2lu
Z0RhdGEmIGRhdGEgPQotICAgICAgICAgICAgICAgICAgICBtX2FyZ3VtZW50c0FsaWFzaW5nLmZp
bmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+c2Vjb25kOworICAgICAgICAgICAgICAgICAgICBtX2Fy
Z3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+dmFsdWU7CiAgICAgICAg
ICAgICAgICAgaWYgKGRhdGEuaXNWYWxpZCgpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgICAgICAKQEAgLTM3Myw3ICszNzMsNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgZGF0YUxvZygiQ2FwdHVyZWQiKTsKICAgICAgICAgICAgIGVsc2UgewogICAgICAg
ICAgICAgICAgIEFyZ3VtZW50c0FsaWFzaW5nRGF0YSYgZGF0YSA9Ci0gICAgICAgICAgICAgICAg
ICAgIG1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT5zZWNvbmQ7
CisgICAgICAgICAgICAgICAgICAgIG1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFj
Y2Vzc0RhdGEpLT52YWx1ZTsKICAgICAgICAgICAgICAgICBib29sIGZpcnN0ID0gdHJ1ZTsKICAg
ICAgICAgICAgICAgICBpZiAoZGF0YS5jYWxsQ29udGV4dElzVmFsaWQoKSkgewogICAgICAgICAg
ICAgICAgICAgICBpZiAoIWZpcnN0KQpAQCAtNDU0LDcgKzQ1NCw3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICAgICAgLy8gdGhpbmdzLiBOb3RlIGFsc28gdGhhdCB0aGUgU2V0TG9jYWwgc2hv
dWxkIGJlY29tZSBkZWFkIGFzIHNvb24gYXMKICAgICAgICAgICAgICAgICAgICAgLy8gd2UgcmVw
bGFjZSBhbGwgdXNlcyBvZiB0aGlzIHZhcmlhYmxlIHdpdGggR2V0TXlBcmd1bWVudHNMZW5ndGgg
YW5kCiAgICAgICAgICAgICAgICAgICAgIC8vIEdldE15QXJndW1lbnRCeVZhbC4KLSAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKG1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vz
c0RhdGEpLT5zZWNvbmQuaXNWYWxpZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1f
YXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT52YWx1ZS5pc1ZhbGlk
KCkpOwogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IHZhcmlhYmxlQWNjZXNzRGF0YS0+
bWVyZ2VJc0FyZ3VtZW50c0FsaWFzKHRydWUpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICB9CkBAIC03MTQsNyArNzE0LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKSkKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIAotICAgICAgICAgICAgQXJndW1lbnRzQWxpYXNpbmdEYXRh
JiBkYXRhID0gbV9hcmd1bWVudHNBbGlhc2luZy5maW5kKHZhcmlhYmxlQWNjZXNzRGF0YSktPnNl
Y29uZDsKKyAgICAgICAgICAgIEFyZ3VtZW50c0FsaWFzaW5nRGF0YSYgZGF0YSA9IG1fYXJndW1l
bnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT52YWx1ZTsKICAgICAgICAgICAg
IGRhdGEuZXNjYXBlcyA9IHRydWU7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAt
NzYxLDcgKzc2MSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
ICAgICAgICAgCi0gICAgICAgIEFyZ3VtZW50c0FsaWFzaW5nRGF0YSYgZGF0YSA9IG1fYXJndW1l
bnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT5zZWNvbmQ7CisgICAgICAgIEFy
Z3VtZW50c0FsaWFzaW5nRGF0YSYgZGF0YSA9IG1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJp
YWJsZUFjY2Vzc0RhdGEpLT52YWx1ZTsKICAgICAgICAgZGF0YS5tZXJnZUNhbGxDb250ZXh0KG5v
ZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAgIH0KICAgICAKQEAgLTc4NCw3ICs3
ODQsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgQXJndW1lbnRzQWxpYXNpbmdEYXRhJiBkYXRhID0KLSAgICAgICAgICAgICAg
ICBtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+c2Vjb25kOwor
ICAgICAgICAgICAgICAgIG1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0Rh
dGEpLT52YWx1ZTsKICAgICAgICAgICAgIGlmICghZGF0YS5pc1ZhbGlkKCkpCiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCkBAIC04MjAsNyArODIw
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAmJiAhbV9jcmVhdGVzQXJndW1lbnRzLmNv
bnRhaW5zKGNoaWxkLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgIGJv
b2wgaXNBbGlhc2VkQXJndW1lbnRzUmVnaXN0ZXIgPQogICAgICAgICAgICAgICAgICF2YXJpYWJs
ZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKQotICAgICAgICAgICAgICAgICYmIG1fYXJndW1lbnRz
QWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT5zZWNvbmQuaXNWYWxpZCgpCisgICAg
ICAgICAgICAgICAgJiYgbV9hcmd1bWVudHNBbGlhc2luZy5maW5kKHZhcmlhYmxlQWNjZXNzRGF0
YSktPnZhbHVlLmlzVmFsaWQoKQogICAgICAgICAgICAgICAgICYmICFtX2NyZWF0ZXNBcmd1bWVu
dHMuY29udGFpbnMoY2hpbGQuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAg
ICAgaWYgKCFpc0RlYWRBcmd1bWVudHNSZWdpc3RlciAmJiAhaXNBbGlhc2VkQXJndW1lbnRzUmVn
aXN0ZXIpCiAgICAgICAgICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5jcHAKaW5kZXggNzc5OWVlNTA1OTM1YWQ0ZTEzYmMz
Y2UxOGQwYjczMmEzYWE0Mjk2ZS4uYjViNjY4NDE4YTYzYTdjOTQ0ZGY1ZGM0N2E2MDRiMWU1MzU3
NDFkNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBc3NlbWJseUhl
bHBlcnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXNzZW1ibHlIZWxw
ZXJzLmNwcApAQCAtNDksOSArNDksOSBAQCBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0
PiYgQXNzZW1ibHlIZWxwZXJzOjpkZWNvZGVkQ29kZU1hcEZvcihDb2RlQmxvY2sqCiAgICAgSGFz
aE1hcDxDb2RlQmxvY2sqLCBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiA+OjpBZGRS
ZXN1bHQgcmVzdWx0ID0gbV9kZWNvZGVkQ29kZU1hcHMuYWRkKGNvZGVCbG9jaywgVmVjdG9yPEJ5
dGVjb2RlQW5kTWFjaGluZU9mZnNldD4oKSk7CiAgICAgCiAgICAgaWYgKHJlc3VsdC5pc05ld0Vu
dHJ5KQotICAgICAgICBjb2RlQmxvY2stPmppdENvZGVNYXAoKS0+ZGVjb2RlKHJlc3VsdC5pdGVy
YXRvci0+c2Vjb25kKTsKKyAgICAgICAgY29kZUJsb2NrLT5qaXRDb2RlTWFwKCktPmRlY29kZShy
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKICAgICAKLSAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9y
LT5zZWNvbmQ7CisgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiB9CiAKICNpZiBF
TkFCTEUoU0FNUExJTkdfRkxBR1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0J5dGVDb2RlQ2FjaGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0
ZUNvZGVDYWNoZS5oCmluZGV4IGY2YTc0NWM2NjU4NzEzM2IxMmNiZDQ0ZmYzYTkyOWE5M2MxYmEx
MDcuLjhlZDE1NzhmMjZkM2E0ZTc1ZTIzYTlkOGVlZmYwOWFiNGFiNjAwOWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVDYWNoZS5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVDYWNoZS5oCkBAIC0xMzIsMTAgKzEzMiwx
MCBAQCBwdWJsaWM6CiAgICAgICAgIE1hcDo6aXRlcmF0b3IgYmVnaW4gPSBtX21hcC5iZWdpbigp
OwogICAgICAgICBNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fbWFwLmVuZCgpOwogICAgICAgICBmb3Ig
KE1hcDo6aXRlcmF0b3IgaXRlciA9IGJlZ2luOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0gICAg
ICAgICAgICBpZiAoIWl0ZXItPnNlY29uZC5jb2RlQmxvY2spCisgICAgICAgICAgICBpZiAoIWl0
ZXItPnZhbHVlLmNvZGVCbG9jaykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgIGlmIChpdGVyLT5zZWNvbmQub3duZWQpIHsKLSAgICAgICAgICAgICAgICBkZWxldGUgaXRl
ci0+c2Vjb25kLmNvZGVCbG9jazsKKyAgICAgICAgICAgIGlmIChpdGVyLT52YWx1ZS5vd25lZCkg
eworICAgICAgICAgICAgICAgIGRlbGV0ZSBpdGVyLT52YWx1ZS5jb2RlQmxvY2s7CiAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE0NSw3ICsx
NDUsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX21h
cC5maW5kKGtleSk7CiAgICAgICAgIGlmIChpdGVyICE9IG1fbWFwLmVuZCgpKQotICAgICAgICAg
ICAgcmV0dXJuIGl0ZXItPnNlY29uZC5jb2RlQmxvY2s7CisgICAgICAgICAgICByZXR1cm4gaXRl
ci0+dmFsdWUuY29kZUJsb2NrOwogICAgICAgICAKICAgICAgICAgQnl0ZUNvZGVDYWNoZVZhbHVl
IHZhbHVlOwogICAgICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRl
Q29kZVBhcnNlci5jcHAKaW5kZXggZGYxOWMzMDgyZDdjNWJhMmM2NThkNTkyMTI0MGVmMDZkYzM4
ODNhNS4uM2VlM2JkMmJlNGY5ZDE4N2Y5NzNhZTViZDkxNmViYzQ4OTZkOGY4MyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKQEAgLTY2MCw5
ICs2NjAsOSBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgSGFzaE1hcDxKU0NlbGwqLCBOb2Rl
SW5kZXg+OjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9jZWxsQ29uc3RhbnROb2Rlcy5hZGQoY2VsbCwg
Tm9Ob2RlKTsKICAgICAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICAgICAgcmVz
dWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBhZGRUb0dyYXBoKFdlYWtKU0NvbnN0YW50LCBPcEluZm8o
Y2VsbCkpOworICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGFkZFRvR3JhcGgo
V2Vha0pTQ29uc3RhbnQsIE9wSW5mbyhjZWxsKSk7CiAgICAgICAgIAotICAgICAgICByZXR1cm4g
cmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3It
PnZhbHVlOwogICAgIH0KICAgICAKICAgICBDb2RlT3JpZ2luIGN1cnJlbnRDb2RlT3JpZ2luKCkK
QEAgLTMyMDksNyArMzIwOSw3IEBAIEJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJ
bmxpbmVTdGFja0VudHJ5KAogICAgICAgICAgICAgSWRlbnRpZmllck1hcDo6QWRkUmVzdWx0IHJl
c3VsdCA9IGJ5dGVDb2RlUGFyc2VyLT5tX2lkZW50aWZpZXJNYXAuYWRkKHJlcCwgYnl0ZUNvZGVQ
YXJzZXItPm1fY29kZUJsb2NrLT5udW1iZXJPZklkZW50aWZpZXJzKCkpOwogICAgICAgICAgICAg
aWYgKHJlc3VsdC5pc05ld0VudHJ5KQogICAgICAgICAgICAgICAgIGJ5dGVDb2RlUGFyc2VyLT5t
X2NvZGVCbG9jay0+YWRkSWRlbnRpZmllcihJZGVudGlmaWVyKGJ5dGVDb2RlUGFyc2VyLT5tX2ds
b2JhbERhdGEsIHJlcCkpOwotICAgICAgICAgICAgbV9pZGVudGlmaWVyUmVtYXBbaV0gPSByZXN1
bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgICAgIG1faWRlbnRpZmllclJlbWFwW2ldID0g
cmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgfQogICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGNvZGVCbG9jay0+bnVtYmVyT2ZDb25zdGFudFJlZ2lzdGVycygpOyArK2kpIHsK
ICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBjb2RlQmxvY2stPmdldENvbnN0YW50KGkgKyBG
aXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7CkBAIC0zMjI3LDcgKzMyMjcsNyBAQCBCeXRlQ29k
ZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lU3RhY2tFbnRyeSgKICAgICAgICAgICAg
ICAgICBieXRlQ29kZVBhcnNlci0+bV9jb2RlQmxvY2stPmFkZENvbnN0YW50KHZhbHVlKTsKICAg
ICAgICAgICAgICAgICBieXRlQ29kZVBhcnNlci0+bV9jb25zdGFudHMuYXBwZW5kKENvbnN0YW50
UmVjb3JkKCkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9jb25zdGFudFJlbWFwW2ld
ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgICAgICBtX2NvbnN0YW50UmVtYXBb
aV0gPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogICAgICAgICB9CiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBjb2RlQmxvY2stPm51bWJlck9mR2xvYmFsUmVzb2x2ZUluZm9zKCk7
ICsraSkKICAgICAgICAgICAgIGJ5dGVDb2RlUGFyc2VyLT5tX2NvZGVCbG9jay0+YWRkR2xvYmFs
UmVzb2x2ZUluZm8oc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQ2hlY2tIb2lzdGlu
Z1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQ2hlY2tI
b2lzdGluZ1BoYXNlLmNwcAppbmRleCBlZTdkZDBhMzdhNDI2ZDRmOGQ5OTY4Y2Y4ZmZmOTllNDVm
MTk1OWNkLi44Y2E3NjRkZDE2ODc3N2M3NjY5NzhmZWE1NjE4YWQzY2RkOTMyODZhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQ
aGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVDaGVj
a0hvaXN0aW5nUGhhc2UuY3BwCkBAIC0xMjgsNyArMTI4LDcgQEAgcHVibGljOgogICAgICAgICAg
ICAgZGF0YUxvZygiWmVyb2luZyB0aGUgc3RydWN0dXJlIHRvIGhvaXN0IGZvciAlcyBiZWNhdXNl
IHRoZSByYXRpbyBpcyAlbGYuXG4iLAogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm5hbWVP
ZlZhcmlhYmxlQWNjZXNzRGF0YSh2YXJpYWJsZSksIHZhcmlhYmxlLT52b3RlUmF0aW8oKSk7CiAj
ZW5kaWYKLSAgICAgICAgICAgIGl0ZXItPnNlY29uZC5tX3N0cnVjdHVyZSA9IDA7CisgICAgICAg
ICAgICBpdGVyLT52YWx1ZS5tX3N0cnVjdHVyZSA9IDA7CiAgICAgICAgIH0KIAogICAgICAgICAv
LyBJZGVudGlmeSB0aGUgc2V0IG9mIHZhcmlhYmxlcyB0aGF0IGFyZSBsaXZlIGFjcm9zcyBhIHN0
cnVjdHVyZSBjbG9iYmVyLgpAQCAtMjk1LDkgKzI5NSw5IEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICAgICAgSGFzaE1hcDxWYXJpYWJsZUFjY2Vzc0RhdGEqLCBDaGVja0RhdGE+OjppdGVyYXRv
ciBpdGVyID0gbV9tYXAuZmluZCh2YXJpYWJsZSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChp
dGVyID09IG1fbWFwLmVuZCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmICghaXRlci0+c2Vjb25kLm1fc3RydWN0dXJlKQorICAgICAgICAg
ICAgICAgICAgICBpZiAoIWl0ZXItPnZhbHVlLm1fc3RydWN0dXJlKQogICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpdGVyLT5zZWNvbmQubV9p
c0Nsb2JiZXJlZCAmJiAhaXRlci0+c2Vjb25kLm1fc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hw
b2ludFNldElzU3RpbGxWYWxpZCgpKQorICAgICAgICAgICAgICAgICAgICBpZiAoaXRlci0+dmFs
dWUubV9pc0Nsb2JiZXJlZCAmJiAhaXRlci0+dmFsdWUubV9zdHJ1Y3R1cmUtPnRyYW5zaXRpb25X
YXRjaHBvaW50U2V0SXNTdGlsbFZhbGlkKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIG5vZGUucmVmKCk7
CkBAIC0zMTEsNyArMzExLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBtX2dyYXBo
LmFwcGVuZChnZXRMb2NhbCk7CiAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5hcHBl
bmQoaW5kZXhJbkJsb2NrICsgMSwgZ2V0TG9jYWxJbmRleCk7CiAgICAgICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgICAgICBOb2RlIGNoZWNrU3RydWN0dXJlKENoZWNrU3RydWN0dXJl
LCBjb2RlT3JpZ2luLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoaXRlci0+c2Vjb25k
Lm1fc3RydWN0dXJlKSksIGdldExvY2FsSW5kZXgpOworICAgICAgICAgICAgICAgICAgICBOb2Rl
IGNoZWNrU3RydWN0dXJlKENoZWNrU3RydWN0dXJlLCBjb2RlT3JpZ2luLCBPcEluZm8obV9ncmFw
aC5hZGRTdHJ1Y3R1cmVTZXQoaXRlci0+dmFsdWUubV9zdHJ1Y3R1cmUpKSwgZ2V0TG9jYWxJbmRl
eCk7CiAgICAgICAgICAgICAgICAgICAgIGNoZWNrU3RydWN0dXJlLnJlZigpOwogICAgICAgICAg
ICAgICAgICAgICBOb2RlSW5kZXggY2hlY2tTdHJ1Y3R1cmVJbmRleCA9IG1fZ3JhcGguc2l6ZSgp
OwogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmFwcGVuZChjaGVja1N0cnVjdHVyZSk7CkBA
IC0zMzEsOSArMzMxLDkgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBIYXNoTWFwPFZh
cmlhYmxlQWNjZXNzRGF0YSosIENoZWNrRGF0YT46Oml0ZXJhdG9yIGl0ZXIgPSBtX21hcC5maW5k
KHZhcmlhYmxlKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZXIgPT0gbV9tYXAuZW5kKCkp
CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KCFpdGVyLT5zZWNvbmQubV9zdHJ1Y3R1cmUpCisgICAgICAgICAgICAgICAgICAgIGlmICghaXRl
ci0+dmFsdWUubV9zdHJ1Y3R1cmUpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKGl0ZXItPnNlY29uZC5tX2lzQ2xvYmJlcmVkICYmICFpdGVy
LT5zZWNvbmQubV9zdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SXNTdGlsbFZhbGlk
KCkpCisgICAgICAgICAgICAgICAgICAgIGlmIChpdGVyLT52YWx1ZS5tX2lzQ2xvYmJlcmVkICYm
ICFpdGVyLT52YWx1ZS5tX3N0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRJc1N0aWxs
VmFsaWQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAg
ICAgICAgIC8vIEZpcnN0IGluc2VydCBhIGRlYWQgU2V0TG9jYWwgdG8gdGVsbCBPU1IgdGhhdCB0
aGUgY2hpbGQncyB2YWx1ZSBzaG91bGQKQEAgLTM1MCw3ICszNTAsNyBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgICAgIG1fZ3JhcGhbY2hpbGQxXS5yZWYoKTsKICAgICAgICAgICAgICAgICAg
ICAgLy8gVXNlIGEgRm9yd2FyZENoZWNrU3RydWN0dXJlIHRvIGluZGljYXRlIHRoYXQgd2Ugc2hv
dWxkIGV4aXQgdG8gdGhlCiAgICAgICAgICAgICAgICAgICAgIC8vIG5leHQgYnl0ZWNvZGUgaW5z
dHJ1Y3Rpb24gcmF0aGVyIHRoYW4gcmVleGVjdXRpbmcgdGhlIGN1cnJlbnQgb25lLgotICAgICAg
ICAgICAgICAgICAgICBOb2RlIGNoZWNrU3RydWN0dXJlKEZvcndhcmRDaGVja1N0cnVjdHVyZSwg
Y29kZU9yaWdpbiwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KGl0ZXItPnNlY29uZC5t
X3N0cnVjdHVyZSkpLCBjaGlsZDEpOworICAgICAgICAgICAgICAgICAgICBOb2RlIGNoZWNrU3Ry
dWN0dXJlKEZvcndhcmRDaGVja1N0cnVjdHVyZSwgY29kZU9yaWdpbiwgT3BJbmZvKG1fZ3JhcGgu
YWRkU3RydWN0dXJlU2V0KGl0ZXItPnZhbHVlLm1fc3RydWN0dXJlKSksIGNoaWxkMSk7CiAgICAg
ICAgICAgICAgICAgICAgIGNoZWNrU3RydWN0dXJlLnJlZigpOwogICAgICAgICAgICAgICAgICAg
ICBOb2RlSW5kZXggY2hlY2tTdHJ1Y3R1cmVJbmRleCA9IG1fZ3JhcGguc2l6ZSgpOwogICAgICAg
ICAgICAgICAgICAgICBtX2dyYXBoLmFwcGVuZChjaGVja1N0cnVjdHVyZSk7CkBAIC0zNjYsMTYg
KzM2NiwxNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIEhhc2hNYXA8VmFyaWFibGVB
Y2Nlc3NEYXRhKiwgQ2hlY2tEYXRhPjo6aXRlcmF0b3IgaXRlciA9IG1fbWFwLmZpbmQoY2hpbGQu
dmFyaWFibGVBY2Nlc3NEYXRhKCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoaXRlciA9PSBt
X21hcC5lbmQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICBpZiAoIWl0ZXItPnNlY29uZC5tX3N0cnVjdHVyZSkKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCFpdGVyLT52YWx1ZS5tX3N0cnVjdHVyZSkKICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWl0ZXItPnNlY29uZC5tX2lzQ2xvYmJl
cmVkKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghaXRlci0+dmFsdWUubV9pc0Nsb2JiZXJl
ZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRPcEFuZERlZmF1bHRGbGFncyhQ
aGFudG9tKTsKICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLnJlZkNvdW50KCkg
PT0gMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoIWl0ZXItPnNlY29uZC5tX3N0cnVjdHVyZS0+
dHJhbnNpdGlvbldhdGNocG9pbnRTZXRJc1N0aWxsVmFsaWQoKSkKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCFpdGVyLT52YWx1ZS5tX3N0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRJ
c1N0aWxsVmFsaWQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgICBBU1NFUlQoaXRlci0+c2Vjb25kLm1fc3RydWN0dXJlID09IG5vZGUuc3RydWN0
dXJlU2V0KCkuc2luZ2xldG9uU3RydWN0dXJlKCkpOworICAgICAgICAgICAgICAgICAgICBBU1NF
UlQoaXRlci0+dmFsdWUubV9zdHJ1Y3R1cmUgPT0gbm9kZS5zdHJ1Y3R1cmVTZXQoKS5zaW5nbGV0
b25TdHJ1Y3R1cmUoKSk7CiAgICAgICAgICAgICAgICAgICAgIG5vZGUuY29udmVydFRvU3RydWN0
dXJlVHJhbnNpdGlvbldhdGNocG9pbnQoKTsKICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9
IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzk4LDkgKzM5OCw5IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBtX21hcC5hZGQodmFyaWFibGUsIENoZWNrRGF0YShzdHJ1Y3R1
cmUsIGZhbHNlKSk7CiAgICAgICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgaWYgKHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLm1fc3RydWN0dXJl
ID09IHN0cnVjdHVyZSkKKyAgICAgICAgaWYgKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUubV9zdHJ1
Y3R1cmUgPT0gc3RydWN0dXJlKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICByZXN1bHQu
aXRlcmF0b3ItPnNlY29uZC5tX3N0cnVjdHVyZSA9IDA7CisgICAgICAgIHJlc3VsdC5pdGVyYXRv
ci0+dmFsdWUubV9zdHJ1Y3R1cmUgPSAwOwogICAgIH0KICAgICAKICAgICB2b2lkIG5vdGljZVN0
cnVjdHVyZUNoZWNrKFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUsIGNvbnN0IFN0cnVjdHVy
ZVNldCYgc2V0KQpAQCAtNDE4LDcgKzQxOCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX21h
cC5maW5kKHZhcmlhYmxlKTsKICAgICAgICAgaWYgKGl0ZXIgPT0gbV9tYXAuZW5kKCkpCiAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIGl0ZXItPnNlY29uZC5tX2lzQ2xvYmJlcmVkID0gdHJ1
ZTsKKyAgICAgICAgaXRlci0+dmFsdWUubV9pc0Nsb2JiZXJlZCA9IHRydWU7CiAgICAgfQogICAg
IAogICAgIHZvaWQgY2xvYmJlcihjb25zdCBPcGVyYW5kczxWYXJpYWJsZUFjY2Vzc0RhdGEqPiYg
bGl2ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKaW5kZXggNjY5MTc4ODA0ZTYzZjhl
NzVhNzM2ZWU0YWVhZTNiMmM4Y2QxNjk5Yi4uOWUxYzQ3Y2FiNmY5MmZkODE1ZGQ2ZGViZWY4ODU2
MzczMGFkY2ZkYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKQEAgLTM0NSw3ICsz
NDUsNyBAQCB2b2lkIEhlYXA6Om1hcmtQcm90ZWN0ZWRPYmplY3RzKEhlYXBSb290VmlzaXRvciYg
aGVhcFJvb3RWaXNpdG9yKQogewogICAgIFByb3RlY3RDb3VudFNldDo6aXRlcmF0b3IgZW5kID0g
bV9wcm90ZWN0ZWRWYWx1ZXMuZW5kKCk7CiAgICAgZm9yIChQcm90ZWN0Q291bnRTZXQ6Oml0ZXJh
dG9yIGl0ID0gbV9wcm90ZWN0ZWRWYWx1ZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAg
ICAgICBoZWFwUm9vdFZpc2l0b3IudmlzaXQoJml0LT5maXJzdCk7CisgICAgICAgIGhlYXBSb290
VmlzaXRvci52aXNpdCgmaXQtPmtleSk7CiB9CiAKIHZvaWQgSGVhcDo6cHVzaFRlbXBTb3J0VmVj
dG9yKFZlY3RvcjxWYWx1ZVN0cmluZ1BhaXI+KiB0ZW1wVmVjdG9yKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5oCmluZGV4IDZmMTNhZmI3MjVhOTk5OWU3M2VjZjAzODQ3NDM2ZTVjM2EzM2YyMTQu
LmQ3MTAxMGJmMjNkN2IwYjVlZmVmZGU4NWE0YTQ3MGU0YjJlY2M5NWIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmgKQEAgLTM0OCw3ICszNDgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB7
CiAgICAgICAgIFByb3RlY3RDb3VudFNldDo6aXRlcmF0b3IgZW5kID0gbV9wcm90ZWN0ZWRWYWx1
ZXMuZW5kKCk7CiAgICAgICAgIGZvciAoUHJvdGVjdENvdW50U2V0OjppdGVyYXRvciBpdCA9IG1f
cHJvdGVjdGVkVmFsdWVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIGZ1
bmN0b3IoaXQtPmZpcnN0KTsKKyAgICAgICAgICAgIGZ1bmN0b3IoaXQtPmtleSk7CiAgICAgICAg
IG1faGFuZGxlU2V0LmZvckVhY2hTdHJvbmdIYW5kbGUoZnVuY3RvciwgbV9wcm90ZWN0ZWRWYWx1
ZXMpOwogCiAgICAgICAgIHJldHVybiBmdW5jdG9yLnJldHVyblZhbHVlKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KSVRTdHViUm91dGluZVNldC5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KSVRTdHViUm91dGluZVNldC5jcHAKaW5kZXggMDU0YmYw
NmRkY2ZhYTQ3ZWY3ZjYyYTkxNTAzMzkzNGIzMThhMWY0Ni4uOGUyNzkxZmM3MTkwM2FiZDI2Njhj
NDgyNmZiMmVjNGYxNzQwMjUwYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSklUU3R1YlJvdXRpbmVTZXQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0pJVFN0dWJSb3V0aW5lU2V0LmNwcApAQCAtODIsNyArODIsNyBAQCB2b2lkIEpJVFN0dWJSb3V0
aW5lU2V0OjptYXJrU2xvdyh1aW50cHRyX3QgYWRkcmVzcykKICAgICBpZiAoaXRlciA9PSBtX2Fk
ZHJlc3NUb1JvdXRpbmVNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBpdGVy
LT5zZWNvbmQtPm1fbWF5QmVFeGVjdXRpbmcgPSB0cnVlOworICAgIGl0ZXItPnZhbHVlLT5tX21h
eUJlRXhlY3V0aW5nID0gdHJ1ZTsKIH0KIAogdm9pZCBKSVRTdHViUm91dGluZVNldDo6ZGVsZXRl
VW5tYXJrZWRKZXR0aXNvbmVkU3R1YlJvdXRpbmVzKCkKQEAgLTk3LDcgKzk3LDcgQEAgdm9pZCBK
SVRTdHViUm91dGluZVNldDo6ZGVsZXRlVW5tYXJrZWRKZXR0aXNvbmVkU3R1YlJvdXRpbmVzKCkK
ICAgICAgICAgdWludHB0cl90IHN0ZXAgPSBKSVRTdHViUm91dGluZTo6YWRkcmVzc1N0ZXAoKTsK
ICAgICAgICAgZm9yICh1aW50cHRyX3QgaXRlciA9IHN0YXJ0OyBpdGVyIDwgZW5kOyBpdGVyICs9
IHN0ZXApIHsKICAgICAgICAgICAgIEFTU0VSVChtX2FkZHJlc3NUb1JvdXRpbmVNYXAuZmluZChp
dGVyKSAhPSBtX2FkZHJlc3NUb1JvdXRpbmVNYXAuZW5kKCkpOwotICAgICAgICAgICAgQVNTRVJU
KG1fYWRkcmVzc1RvUm91dGluZU1hcC5maW5kKGl0ZXIpLT5zZWNvbmQgPT0gcm91dGluZSk7Cisg
ICAgICAgICAgICBBU1NFUlQobV9hZGRyZXNzVG9Sb3V0aW5lTWFwLmZpbmQoaXRlciktPnZhbHVl
ID09IHJvdXRpbmUpOwogICAgICAgICAgICAgbV9hZGRyZXNzVG9Sb3V0aW5lTWFwLnJlbW92ZShp
dGVyKTsKICAgICAgICAgfQogICAgICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtTdGFjay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
U3RhY2suY3BwCmluZGV4IGIzMTM2NjQzYjRlZGI3OGYxYWYxMTUzYzc5NWVjMjMxMDE0Yzk1OGUu
LmUzNThiYmYzN2Y0Y2VkMGRiMjE0ZDQzNWExMDliZTE1ZWM3NDQyYjUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmNwcApAQCAtNTMzLDcgKzUzMyw3IEBAIEFMV0FZU19J
TkxJTkUgdm9pZCBNYXJrU3RhY2s6OmludGVybmFsQXBwZW5kKEpTVmFsdWUqIHNsb3QpCiAgICAg
ICAgICAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpCiAgICAgICAgICAgICAgICAgc3RyaW5n
LT5zZXRIYXNoQ29uc3RTaW5nbGV0b24oKTsKICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgICAgIEpTVmFsdWUgZXhpc3RpbmdKU1ZhbHVlID0gYWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNv
bmQ7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSBleGlzdGluZ0pTVmFsdWUgPSBhZGRSZXN1bHQu
aXRlcmF0b3ItPnZhbHVlOwogICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAhPSBleGlzdGluZ0pT
VmFsdWUpCiAgICAgICAgICAgICAgICAgICAgIGpzQ2FzdDxKU1N0cmluZyo+KGV4aXN0aW5nSlNW
YWx1ZS5hc0NlbGwoKSktPmNsZWFySGFzaENvbnN0U2luZ2xldG9uKCk7CiAgICAgICAgICAgICAg
ICAgKnNsb3QgPSBleGlzdGluZ0pTVmFsdWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9XZWFrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrLmgKaW5k
ZXggMDc2OThmZDA2YjA2Yzc1MDE0YmI2NWJmMjVmYzMxYzI4YTlhMDY4NC4uM2MzZDFkMGNlZmUx
ODEyNjU5YzVmYTczYzc0ZDE5OTQ4YzE4ZmZlYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvV2Vhay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWsu
aApAQCAtMTY0LDggKzE2NCw4IEBAIHRlbXBsYXRlPHR5cGVuYW1lIE1hcCwgdHlwZW5hbWUgS2V5
LCB0eXBlbmFtZSBWYWx1ZT4gaW5saW5lIHZvaWQgd2Vha1JlbW92ZShNYXAmCiAgICAgdHlwZW5h
bWUgTWFwOjppdGVyYXRvciBpdCA9IG1hcC5maW5kKGtleSk7CiAgICAgQVNTRVJUX1VOVVNFRCh2
YWx1ZSwgdmFsdWUpOwogICAgIEFTU0VSVChpdCAhPSBtYXAuZW5kKCkpOwotICAgIEFTU0VSVChp
dC0+c2Vjb25kLndhcyh2YWx1ZSkpOwotICAgIEFTU0VSVCghaXQtPnNlY29uZCk7CisgICAgQVNT
RVJUKGl0LT52YWx1ZS53YXModmFsdWUpKTsKKyAgICBBU1NFUlQoIWl0LT52YWx1ZSk7CiAgICAg
bWFwLnJlbW92ZShpdCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAppbmRleCA1MmE3
MTU4ZTY2MDZhZmRmNzRhZTMyNmRlODA5OTAyYTQxOTMzNDQ2Li44MzdiOGQyMWUzYjUxMmZkZmMz
NTJkZmE3ZWExMzMyYjUxZGQ2ZGU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCkBAIC03
MTEsOCArNzExLDggQEAgSklUQ29kZSBKSVQ6OnByaXZhdGVDb21waWxlKENvZGVQdHIqIGZ1bmN0
aW9uRW50cnlBcml0eUNoZWNrLCBKSVRDb21waWxhdGlvbkVmZm8KIAogICAgICAgICAgICAgU3Ry
aW5nSnVtcFRhYmxlOjpTdHJpbmdPZmZzZXRUYWJsZTo6aXRlcmF0b3IgZW5kID0gcmVjb3JkLmp1
bXBUYWJsZS5zdHJpbmdKdW1wVGFibGUtPm9mZnNldFRhYmxlLmVuZCgpOyAgICAgICAgICAgIAog
ICAgICAgICAgICAgZm9yIChTdHJpbmdKdW1wVGFibGU6OlN0cmluZ09mZnNldFRhYmxlOjppdGVy
YXRvciBpdCA9IHJlY29yZC5qdW1wVGFibGUuc3RyaW5nSnVtcFRhYmxlLT5vZmZzZXRUYWJsZS5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZz
ZXQgPSBpdC0+c2Vjb25kLmJyYW5jaE9mZnNldDsKLSAgICAgICAgICAgICAgICBpdC0+c2Vjb25k
LmN0aU9mZnNldCA9IG9mZnNldCA/IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YobV9sYWJlbHNbYnl0
ZWNvZGVPZmZzZXQgKyBvZmZzZXRdKSA6IHJlY29yZC5qdW1wVGFibGUuc3RyaW5nSnVtcFRhYmxl
LT5jdGlEZWZhdWx0OworICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IGl0LT52YWx1
ZS5icmFuY2hPZmZzZXQ7CisgICAgICAgICAgICAgICAgaXQtPnZhbHVlLmN0aU9mZnNldCA9IG9m
ZnNldCA/IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YobV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyBv
ZmZzZXRdKSA6IHJlY29yZC5qdW1wVGFibGUuc3RyaW5nSnVtcFRhYmxlLT5jdGlEZWZhdWx0Owog
ICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFN0dWJzLmNwcAppbmRleCBjYzg5OTU4N2YwNjlmYjJmM2ZmZmIxMTg3MDI5ZGEwOTczZjY2YmE5
Li45NzU3OWZiNDJlYTVlMGY5MzNiZDgwNWI1NDY3NGE5ZGNhM2I5M2ViIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcApAQCAtMzQ1OSw4ICszNDU5LDggQEAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIEpJVFRodW5rczo6Y3RpU3R1YihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEs
IFRodW5rR2VuZXJhdG8KIHsKICAgICBDVElTdHViTWFwOjpBZGRSZXN1bHQgZW50cnkgPSBtX2N0
aVN0dWJNYXAuYWRkKGdlbmVyYXRvciwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCkpOwogICAgIGlm
IChlbnRyeS5pc05ld0VudHJ5KQotICAgICAgICBlbnRyeS5pdGVyYXRvci0+c2Vjb25kID0gZ2Vu
ZXJhdG9yKGdsb2JhbERhdGEpOwotICAgIHJldHVybiBlbnRyeS5pdGVyYXRvci0+c2Vjb25kOwor
ICAgICAgICBlbnRyeS5pdGVyYXRvci0+dmFsdWUgPSBnZW5lcmF0b3IoZ2xvYmFsRGF0YSk7Cisg
ICAgcmV0dXJuIGVudHJ5Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIAogTmF0aXZlRXhlY3V0YWJsZSog
SklUVGh1bmtzOjpob3N0RnVuY3Rpb25TdHViKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgTmF0
aXZlRnVuY3Rpb24gZnVuY3Rpb24sIE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCmluZGV4IDRmZDY3MWZiNzM1ZjFkZDIxNTEx
MTI5MzMwMzIxODRmMzhiYzc0MDUuLjI5MzY4MWZmNDk3OTUxZjAzNzZlN2IxNWU1ZjI2NWE2NzIw
YmM4YjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAKQEAgLTEzNjQs
MTAgKzEzNjQsMTAgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lv
biBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VTdHJpY3RPYmplY3QKICAgICAgICAgaWYgKCFtX3N5
bnRheEFscmVhZHlWYWxpZGF0ZWQpIHsKICAgICAgICAgICAgIE9iamVjdFZhbGlkYXRpb25NYXA6
OkFkZFJlc3VsdCBwcm9wZXJ0eUVudHJ5ID0gb2JqZWN0VmFsaWRhdG9yLmFkZChjb250ZXh0Lmdl
dE5hbWUocHJvcGVydHkpLmltcGwoKSwgY29udGV4dC5nZXRUeXBlKHByb3BlcnR5KSk7CiAgICAg
ICAgICAgICBpZiAoIXByb3BlcnR5RW50cnkuaXNOZXdFbnRyeSkgewotICAgICAgICAgICAgICAg
IGZhaWxJZlRydWUocHJvcGVydHlFbnRyeS5pdGVyYXRvci0+c2Vjb25kID09IFByb3BlcnR5Tm9k
ZTo6Q29uc3RhbnQpOworICAgICAgICAgICAgICAgIGZhaWxJZlRydWUocHJvcGVydHlFbnRyeS5p
dGVyYXRvci0+dmFsdWUgPT0gUHJvcGVydHlOb2RlOjpDb25zdGFudCk7CiAgICAgICAgICAgICAg
ICAgZmFpbElmVHJ1ZShjb250ZXh0LmdldFR5cGUocHJvcGVydHkpID09IFByb3BlcnR5Tm9kZTo6
Q29uc3RhbnQpOwotICAgICAgICAgICAgICAgIGZhaWxJZlRydWUoY29udGV4dC5nZXRUeXBlKHBy
b3BlcnR5KSAmIHByb3BlcnR5RW50cnkuaXRlcmF0b3ItPnNlY29uZCk7Ci0gICAgICAgICAgICAg
ICAgcHJvcGVydHlFbnRyeS5pdGVyYXRvci0+c2Vjb25kIHw9IGNvbnRleHQuZ2V0VHlwZShwcm9w
ZXJ0eSk7CisgICAgICAgICAgICAgICAgZmFpbElmVHJ1ZShjb250ZXh0LmdldFR5cGUocHJvcGVy
dHkpICYgcHJvcGVydHlFbnRyeS5pdGVyYXRvci0+dmFsdWUpOworICAgICAgICAgICAgICAgIHBy
b3BlcnR5RW50cnkuaXRlcmF0b3ItPnZhbHVlIHw9IGNvbnRleHQuZ2V0VHlwZShwcm9wZXJ0eSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgdGFpbCA9IGNvbnRleHQuY3JlYXRl
UHJvcGVydHlMaXN0KHByb3BlcnR5TG9jYXRpb24sIHByb3BlcnR5LCB0YWlsKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlLmNwcAppbmRleCA5MmUzMmM0YmE2NjRhNDFm
NDFhODhlOTI5Y2EzZjBjZThiZjcwNzZmLi40NGRkNTJkMjQyMzg4ZjJmMzY3MGI4ZGFlNmY1ZjYz
MzUyMjQ4YjI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJv
ZmlsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGUuY3Bw
CkBAIC0xMTEsNyArMTExLDcgQEAgdHlwZWRlZiBXVEY6OktleVZhbHVlUGFpcjxGdW5jdGlvbkNh
bGxIYXNoQ291bnQ6OlZhbHVlVHlwZSwgdW5zaWduZWQ+IE5hbWVDb3VudFAKIAogc3RhdGljIGlu
bGluZSBib29sIGZ1bmN0aW9uTmFtZUNvdW50UGFpckNvbXBhcmF0b3IoY29uc3QgTmFtZUNvdW50
UGFpciYgYSwgY29uc3QgTmFtZUNvdW50UGFpciYgYikKIHsKLSAgICByZXR1cm4gYS5zZWNvbmQg
PiBiLnNlY29uZDsKKyAgICByZXR1cm4gYS52YWx1ZSA+IGIudmFsdWU7CiB9CiAKIHZvaWQgUHJv
ZmlsZTo6ZGVidWdQcmludERhdGFTYW1wbGVTdHlsZSgpIGNvbnN0CkBAIC0xMjgsNyArMTI4LDcg
QEAgdm9pZCBQcm9maWxlOjpkZWJ1Z1ByaW50RGF0YVNhbXBsZVN0eWxlKCkgY29uc3QKIAogICAg
IHN0ZDo6c29ydChzb3J0ZWRGdW5jdGlvbnMuYmVnaW4oKSwgc29ydGVkRnVuY3Rpb25zLmVuZCgp
LCBmdW5jdGlvbk5hbWVDb3VudFBhaXJDb21wYXJhdG9yKTsKICAgICBmb3IgKE5hbWVDb3VudFBh
aXJWZWN0b3I6Oml0ZXJhdG9yIGl0ID0gc29ydGVkRnVuY3Rpb25zLmJlZ2luKCk7IGl0ICE9IHNv
cnRlZEZ1bmN0aW9ucy5lbmQoKTsgKytpdCkKLSAgICAgICAgZGF0YUxvZygiICAgICAgICAlLTEy
ZCVzXG4iLCAoKml0KS5zZWNvbmQsIFVTdHJpbmcoKCppdCkuZmlyc3QpLnV0ZjgoKS5kYXRhKCkp
OworICAgICAgICBkYXRhTG9nKCIgICAgICAgICUtMTJkJXNcbiIsICgqaXQpLnZhbHVlLCBVU3Ry
aW5nKCgqaXQpLmtleSkudXRmOCgpLmRhdGEoKSk7CiAKICAgICBkYXRhTG9nKCJcblNvcnQgYnkg
dG9wIG9mIHN0YWNrLCBzYW1lIGNvbGxhcHNlZCAod2hlbiA+PSA1KTpcbiIpOwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmNwcAppbmRleCAwZmM1NGYzYzZm
ZDg3NWIzOWIxYzVmMDUzNmYzZmViNjgzMTgyMjQxLi40OGE3YWRmMGNmMGM2OGNiN2RkNDE0MWNm
MmQ2ZTFmNmUwZTBjYjJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JZGVudGlmaWVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVu
dGlmaWVyLmNwcApAQCAtMTAyLDcgKzEwMiw3IEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gSWRl
bnRpZmllcjo6YWRkKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgY2hhciogYykKIAog
ICAgIGNvbnN0IExpdGVyYWxJZGVudGlmaWVyVGFibGU6Oml0ZXJhdG9yJiBpdGVyID0gbGl0ZXJh
bElkZW50aWZpZXJUYWJsZS5maW5kKGMpOwogICAgIGlmIChpdGVyICE9IGxpdGVyYWxJZGVudGlm
aWVyVGFibGUuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdGVyLT5zZWNvbmQ7CisgICAgICAgIHJl
dHVybiBpdGVyLT52YWx1ZTsKIAogICAgIEhhc2hTZXQ8U3RyaW5nSW1wbCo+OjpBZGRSZXN1bHQg
YWRkUmVzdWx0ID0gaWRlbnRpZmllclRhYmxlLmFkZDxjb25zdCBMQ2hhciosIElkZW50aWZpZXJB
U0NJSVN0cmluZ1RyYW5zbGF0b3I+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihjKSk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlv
bi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uY3BwCmlu
ZGV4IGEyMjZiNDE2ZjkwZmQ3YjgyZGI3MDcyNDY1OWJjOTI2YTE0NzJkZGIuLjE4YzMwNzkzOWMx
ZjgxYzVjNTNlMzU0YjJhN2E4ZjM0YTA4YzE2MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmNwcApAQCAtMTQwLDExICsxNDAsMTEgQEAgdm9pZCBK
U0FjdGl2YXRpb246OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0
YXRlKiBleGVjLCBQcm9wZXIKIAogICAgIFN5bWJvbFRhYmxlOjpjb25zdF9pdGVyYXRvciBlbmQg
PSB0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5lbmQoKTsKICAgICBmb3IgKFN5bWJvbFRhYmxl
Ojpjb25zdF9pdGVyYXRvciBpdCA9IHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCktPmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnNlY29uZC5nZXRBdHRyaWJ1dGVz
KCkgJiBEb250RW51bSAmJiBtb2RlICE9IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpCisgICAg
ICAgIGlmIChpdC0+dmFsdWUuZ2V0QXR0cmlidXRlcygpICYgRG9udEVudW0gJiYgbW9kZSAhPSBJ
bmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IGlmIChpdC0+c2Vjb25kLmdldEluZGV4KCkgPj0gdGhpc09iamVjdC0+bV9udW1DYXB0dXJlZFZh
cnMpCisgICAgICAgIGlmIChpdC0+dmFsdWUuZ2V0SW5kZXgoKSA+PSB0aGlzT2JqZWN0LT5tX251
bUNhcHR1cmVkVmFycykKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBwcm9wZXJ0eU5h
bWVzLmFkZChJZGVudGlmaWVyKGV4ZWMsIGl0LT5maXJzdC5nZXQoKSkpOworICAgICAgICBwcm9w
ZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyKGV4ZWMsIGl0LT5rZXkuZ2V0KCkpKTsKICAgICB9CiAg
ICAgLy8gU2tpcCB0aGUgSlNWYXJpYWJsZU9iamVjdCBpbXBsZW1lbnRhdGlvbiBvZiBnZXRPd25Q
cm9wZXJ0eU5hbWVzCiAgICAgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVj
dCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CkBAIC0xNTcsNyArMTU3LDcgQEAgaW5saW5l
IGJvb2wgSlNBY3RpdmF0aW9uOjpzeW1ib2xUYWJsZVB1dFdpdGhBdHRyaWJ1dGVzKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwKICAgICBTeW1ib2xUYWJsZTo6aXRlcmF0b3IgaXRlciA9IHN5bWJv
bFRhYmxlKCktPmZpbmQocHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSk7CiAgICAgaWYgKGl0ZXIg
PT0gc3ltYm9sVGFibGUoKS0+ZW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBTeW1i
b2xUYWJsZUVudHJ5JiBlbnRyeSA9IGl0ZXItPnNlY29uZDsKKyAgICBTeW1ib2xUYWJsZUVudHJ5
JiBlbnRyeSA9IGl0ZXItPnZhbHVlOwogICAgIEFTU0VSVCghZW50cnkuaXNOdWxsKCkpOwogICAg
IGlmIChlbnRyeS5nZXRJbmRleCgpID49IG1fbnVtQ2FwdHVyZWRWYXJzKQogICAgICAgICByZXR1
cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCmluZGV4
IDcyMTg2MDRkMTEyYzc4YjU3MTJiNDU0NDM4ZjI5YjEwYjUyMDg0MzguLmY1ODQ4ZDkyZjhmMTE2
MGY1ODhlOWRlZjYwY2Q5NGQyNzEzMWNjMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQXJyYXkuY3BwCkBAIC0yMDQsNyArMjA0LDcgQEAgaW5saW5lIFNwYXJzZUFycmF5VmFs
dWVNYXA6OkFkZFJlc3VsdCBTcGFyc2VBcnJheVZhbHVlTWFwOjphZGQoSlNBcnJheSogYXJyYXks
IHUKIGlubGluZSB2b2lkIFNwYXJzZUFycmF5VmFsdWVNYXA6OnB1dChFeGVjU3RhdGUqIGV4ZWMs
IEpTQXJyYXkqIGFycmF5LCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRo
cm93KQogewogICAgIEFkZFJlc3VsdCByZXN1bHQgPSBhZGQoYXJyYXksIGkpOwotICAgIFNwYXJz
ZUFycmF5RW50cnkmIGVudHJ5ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgU3BhcnNl
QXJyYXlFbnRyeSYgZW50cnkgPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogCiAgICAgLy8gVG8g
c2F2ZSBhIHNlcGFyYXRlIGZpbmQgJiBhZGQsIHdlIGZpcnN0IGFsd2F5cyBhZGQgdG8gdGhlIHNw
YXJzZSBtYXAuCiAgICAgLy8gSW4gdGhlIHVuY29tbW9uIGNhc2UgdGhhdCB0aGlzIGlzIGEgbmV3
IHByb3BlcnR5LCBhbmQgdGhlIGFycmF5IGlzIG5vdApAQCAtMjQ3LDcgKzI0Nyw3IEBAIGlubGlu
ZSB2b2lkIFNwYXJzZUFycmF5VmFsdWVNYXA6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIEpTQXJyYXkq
IGFycmF5LCB1bnNpZ25lZCBpCiBpbmxpbmUgYm9vbCBTcGFyc2VBcnJheVZhbHVlTWFwOjpwdXRE
aXJlY3QoRXhlY1N0YXRlKiBleGVjLCBKU0FycmF5KiBhcnJheSwgdW5zaWduZWQgaSwgSlNWYWx1
ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKIHsKICAgICBBZGRSZXN1bHQgcmVzdWx0ID0gYWRk
KGFycmF5LCBpKTsKLSAgICBTcGFyc2VBcnJheUVudHJ5JiBlbnRyeSA9IHJlc3VsdC5pdGVyYXRv
ci0+c2Vjb25kOworICAgIFNwYXJzZUFycmF5RW50cnkmIGVudHJ5ID0gcmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZTsKIAogICAgIC8vIFRvIHNhdmUgYSBzZXBhcmF0ZSBmaW5kICYgYWRkLCB3ZSBmaXJz
dCBhbHdheXMgYWRkIHRvIHRoZSBzcGFyc2UgbWFwLgogICAgIC8vIEluIHRoZSB1bmNvbW1vbiBj
YXNlIHRoYXQgdGhpcyBpcyBhIG5ldyBwcm9wZXJ0eSwgYW5kIHRoZSBhcnJheSBpcyBub3QKQEAg
LTMxMyw3ICszMTMsNyBAQCBpbmxpbmUgdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjp2aXNpdENo
aWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGl0ZXJhdG9yIGVuZCA9IG1fbWFw
LmVuZCgpOwogICAgIGZvciAoaXRlcmF0b3IgaXQgPSBtX21hcC5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kKCZpdC0+c2Vjb25kKTsKKyAgICAgICAgdmlz
aXRvci5hcHBlbmQoJml0LT52YWx1ZSk7CiB9CiAKIHZvaWQgSlNBcnJheTo6YWxsb2NhdGVTcGFy
c2VNYXAoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQpAQCAtMzQ5LDcgKzM0OSw3IEBAIHZvaWQg
SlNBcnJheTo6ZW50ZXJEaWN0aW9uYXJ5TW9kZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiAg
ICAgICAgIC8vIFRoaXMgd2lsbCBhbHdheXMgYmUgYSBuZXcgZW50cnkgaW4gdGhlIG1hcCwgc28g
bm8gbmVlZCB0byBjaGVjayB3ZSBjYW4gd3JpdGUsCiAgICAgICAgIC8vIGFuZCBhdHRyaWJ1dGVz
IGFyZSBkZWZhdWx0IHNvIG5vIG5lZWQgdG8gc2V0IHRoZW0uCiAgICAgICAgIGlmICh2YWx1ZSkK
LSAgICAgICAgICAgIG1hcC0+YWRkKHRoaXMsIGkpLml0ZXJhdG9yLT5zZWNvbmQuc2V0KGdsb2Jh
bERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgIG1hcC0+YWRkKHRoaXMsIGkpLml0ZXJh
dG9yLT52YWx1ZS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOwogICAgIH0KIAogICAgIHZv
aWQqIG5ld1Jhd1N0b3JhZ2UgPSAwOwpAQCAtNDI1LDcgKzQyNSw3IEBAIGJvb2wgSlNBcnJheTo6
ZGVmaW5lT3duTnVtZXJpY1Byb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5kZXgs
IFByb3BlcnR5CiAKICAgICAvLyAxLiBMZXQgY3VycmVudCBiZSB0aGUgcmVzdWx0IG9mIGNhbGxp
bmcgdGhlIFtbR2V0T3duUHJvcGVydHldXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIHByb3Bl
cnR5IG5hbWUgUC4KICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0g
bWFwLT5hZGQodGhpcywgaW5kZXgpOwotICAgIFNwYXJzZUFycmF5RW50cnkqIGVudHJ5SW5NYXAg
PSAmcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgU3BhcnNlQXJyYXlFbnRyeSogZW50cnlJ
bk1hcCA9ICZyZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogCiAgICAgLy8gMi4gTGV0IGV4dGVuc2li
bGUgYmUgdGhlIHZhbHVlIG9mIHRoZSBbW0V4dGVuc2libGVdXSBpbnRlcm5hbCBwcm9wZXJ0eSBv
ZiBPLgogICAgIC8vIDMuIElmIGN1cnJlbnQgaXMgdW5kZWZpbmVkIGFuZCBleHRlbnNpYmxlIGlz
IGZhbHNlLCB0aGVuIFJlamVjdC4KQEAgLTY1Niw3ICs2NTYsNyBAQCBib29sIEpTQXJyYXk6Omdl
dE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVu
c2lnbmVkCiAgICAgfSBlbHNlIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSB0aGlzT2Jq
ZWN0LT5tX3NwYXJzZVZhbHVlTWFwKSB7CiAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6Oml0
ZXJhdG9yIGl0ID0gbWFwLT5maW5kKGkpOwogICAgICAgICBpZiAoaXQgIT0gbWFwLT5ub3RGb3Vu
ZCgpKSB7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLmdldChzbG90KTsKKyAgICAgICAgICAgIGl0
LT52YWx1ZS5nZXQoc2xvdCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQog
ICAgIH0KQEAgLTcwMiw3ICs3MDIsNyBAQCBib29sIEpTQXJyYXk6OmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcgogICAgICAg
ICB9IGVsc2UgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHRoaXNPYmplY3QtPm1fc3Bh
cnNlVmFsdWVNYXApIHsKICAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6Oml0ZXJhdG9y
IGl0ID0gbWFwLT5maW5kKGkpOwogICAgICAgICAgICAgaWYgKGl0ICE9IG1hcC0+bm90Rm91bmQo
KSkgewotICAgICAgICAgICAgICAgIGl0LT5zZWNvbmQuZ2V0KGRlc2NyaXB0b3IpOworICAgICAg
ICAgICAgICAgIGl0LT52YWx1ZS5nZXQoZGVzY3JpcHRvcik7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTgzNCw3ICs4MzQsNyBAQCB2
b2lkIEpTQXJyYXk6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiBleGVj
LCB1bnNpZ25lZCBpLCBKU1ZhbHVlCiAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiB2ZWN0b3Ig
PSBzdG9yYWdlLT5tX3ZlY3RvcjsKICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVy
YXRvciBlbmQgPSBtYXAtPmVuZCgpOwogICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAg
dmVjdG9yW2l0LT5maXJzdF0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIGl0LT5zZWNvbmQuZ2V0Tm9u
U3BhcnNlTW9kZSgpKTsKKyAgICAgICAgdmVjdG9yW2l0LT5rZXldLnNldChnbG9iYWxEYXRhLCB0
aGlzLCBpdC0+dmFsdWUuZ2V0Tm9uU3BhcnNlTW9kZSgpKTsKICAgICBkZWFsbG9jYXRlU3BhcnNl
TWFwKCk7CiAKICAgICAvLyBTdG9yZSB0aGUgbmV3IHByb3BlcnR5IGludG8gdGhlIHZlY3Rvci4K
QEAgLTkwNCw3ICs5MDQsNyBAQCBib29sIEpTQXJyYXk6OnB1dERpcmVjdEluZGV4QmV5b25kVmVj
dG9yTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYQogICAgIFdyaXRlQmFy
cmllcjxVbmtub3duPiogdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7CiAgICAgU3BhcnNlQXJy
YXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKICAgICBmb3IgKFNw
YXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCi0gICAgICAgIHZlY3RvcltpdC0+Zmlyc3RdLnNldChnbG9iYWxEYXRhLCB0
aGlzLCBpdC0+c2Vjb25kLmdldE5vblNwYXJzZU1vZGUoKSk7CisgICAgICAgIHZlY3RvcltpdC0+
a2V5XS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgaXQtPnZhbHVlLmdldE5vblNwYXJzZU1vZGUoKSk7
CiAgICAgZGVhbGxvY2F0ZVNwYXJzZU1hcCgpOwogCiAgICAgLy8gU3RvcmUgdGhlIG5ldyBwcm9w
ZXJ0eSBpbnRvIHRoZSB2ZWN0b3IuCkBAIC05NDcsNyArOTQ3LDcgQEAgYm9vbCBKU0FycmF5Ojpk
ZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2ln
bmVkIGkpCiAgICAgfSBlbHNlIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSB0aGlzT2Jq
ZWN0LT5tX3NwYXJzZVZhbHVlTWFwKSB7CiAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6Oml0
ZXJhdG9yIGl0ID0gbWFwLT5maW5kKGkpOwogICAgICAgICBpZiAoaXQgIT0gbWFwLT5ub3RGb3Vu
ZCgpKSB7Ci0gICAgICAgICAgICBpZiAoaXQtPnNlY29uZC5hdHRyaWJ1dGVzICYgRG9udERlbGV0
ZSkKKyAgICAgICAgICAgIGlmIChpdC0+dmFsdWUuYXR0cmlidXRlcyAmIERvbnREZWxldGUpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgbWFwLT5yZW1vdmUoaXQp
OwogICAgICAgICB9CkBAIC05ODUsOCArOTg1LDggQEAgdm9pZCBKU0FycmF5OjpnZXRPd25Qcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW0K
ICAgICAgICAgCiAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IG1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAg
ICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcyB8fCAhKGl0LT5zZWNvbmQu
YXR0cmlidXRlcyAmIERvbnRFbnVtKSkKLSAgICAgICAgICAgICAgICBrZXlzLmFwcGVuZChzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oaXQtPmZpcnN0KSk7CisgICAgICAgICAgICBpZiAobW9kZSA9PSBJ
bmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzIHx8ICEoaXQtPnZhbHVlLmF0dHJpYnV0ZXMgJiBEb250
RW51bSkpCisgICAgICAgICAgICAgICAga2V5cy5hcHBlbmQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KGl0LT5rZXkpKTsKICAgICAgICAgfQogCiAgICAgICAgIHFzb3J0KGtleXMuYmVnaW4oKSwga2V5
cy5zaXplKCksIHNpemVvZih1bnNpZ25lZCksIGNvbXBhcmVLZXlzRm9yUVNvcnQpOwpAQCAtMTE3
OSw3ICsxMTc5LDcgQEAgYm9vbCBKU0FycmF5OjpzZXRMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCB1
bnNpZ25lZCBuZXdMZW5ndGgsIGJvb2wgdGhyb3dFeGNlcHRpb24KICAgICAgICAgICAgIGtleXMu
cmVzZXJ2ZUNhcGFjaXR5KG1pbihtYXAtPnNpemUoKSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihsZW5n
dGggLSBuZXdMZW5ndGgpKSk7CiAgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25z
dF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwogICAgICAgICAgICAgZm9yIChTcGFyc2VBcnJh
eVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oaXQtPmZpcnN0KTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihpdC0+a2V5KTsKICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCBs
ZW5ndGggJiYgaW5kZXggPj0gbmV3TGVuZ3RoKQogICAgICAgICAgICAgICAgICAgICBrZXlzLmFw
cGVuZChpbmRleCk7CiAgICAgICAgICAgICB9CkBAIC0xMTk0LDcgKzExOTQsNyBAQCBib29sIEpT
QXJyYXk6OnNldExlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIG5ld0xlbmd0aCwgYm9v
bCB0aHJvd0V4Y2VwdGlvbgogICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGtl
eXNbLS1pXTsKICAgICAgICAgICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRlcmF0
b3IgaXQgPSBtYXAtPmZpbmQoaW5kZXgpOwogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaXQg
IT0gbWFwLT5ub3RGb3VuZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGl0LT5zZWNvbmQu
YXR0cmlidXRlcyAmIERvbnREZWxldGUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGl0LT52
YWx1ZS5hdHRyaWJ1dGVzICYgRG9udERlbGV0ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAg
c3RvcmFnZS0+bV9sZW5ndGggPSBpbmRleCArIDE7CiAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiVW5hYmxlIHRvIGRlbGV0ZSBwcm9w
ZXJ0eS4iKTsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTY2OSw3ICsxNjY5LDcgQEAgdm9p
ZCBKU0FycmF5Ojpzb3J0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBjb21wYXJlRnVuY3Rpb24s
IENhbGxUeXBlIGNhbGxUeXBlLAogCiAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1
ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewotICAgICAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1tudW1EZWZpbmVkXS52YWx1
ZSA9IGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpOworICAgICAgICAgICAgdHJlZS5hYnN0
cmFjdG9yKCkubV9ub2Rlc1tudW1EZWZpbmVkXS52YWx1ZSA9IGl0LT52YWx1ZS5nZXROb25TcGFy
c2VNb2RlKCk7CiAgICAgICAgICAgICB0cmVlLmluc2VydChudW1EZWZpbmVkKTsKICAgICAgICAg
ICAgICsrbnVtRGVmaW5lZDsKICAgICAgICAgfQpAQCAtMTc4NCw3ICsxNzg0LDcgQEAgdW5zaWdu
ZWQgSlNBcnJheTo6Y29tcGFjdEZvclNvcnRpbmcoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQog
CiAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC0+
ZW5kKCk7CiAgICAgICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIHN0b3JhZ2Ut
Pm1fdmVjdG9yW251bURlZmluZWQrK10uc2V0V2l0aG91dFdyaXRlQmFycmllcihpdC0+c2Vjb25k
LmdldE5vblNwYXJzZU1vZGUoKSk7CisgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltudW1E
ZWZpbmVkKytdLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoaXQtPnZhbHVlLmdldE5vblNwYXJzZU1v
ZGUoKSk7CiAKICAgICAgICAgZGVhbGxvY2F0ZVNwYXJzZU1hcCgpOwogICAgIH0KQEAgLTE4MzEs
MTMgKzE4MzEsMTMgQEAgdm9pZCBKU0FycmF5OjpjaGVja0NvbnNpc3RlbmN5KENvbnNpc3RlbmN5
Q2hlY2tUeXBlIHR5cGUpCiAgICAgaWYgKG1fc3BhcnNlVmFsdWVNYXApIHsKICAgICAgICAgU3Bh
cnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9zcGFyc2VWYWx1ZU1hcC0+
ZW5kKCk7CiAgICAgICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtX3NwYXJzZVZhbHVlTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgICAgIHVuc2lnbmVkIGluZGV4ID0gaXQtPmZpcnN0OworICAgICAgICAgICAgdW5zaWduZWQg
aW5kZXggPSBpdC0+a2V5OwogICAgICAgICAgICAgQVNTRVJUKGluZGV4IDwgc3RvcmFnZS0+bV9s
ZW5ndGgpOwogICAgICAgICAgICAgQVNTRVJUKGluZGV4ID49IG1fdmVjdG9yTGVuZ3RoKTsKICAg
ICAgICAgICAgIEFTU0VSVChpbmRleCA8PSBNQVhfQVJSQVlfSU5ERVgpOwotICAgICAgICAgICAg
QVNTRVJUKGl0LT5zZWNvbmQpOworICAgICAgICAgICAgQVNTRVJUKGl0LT52YWx1ZSk7CiAgICAg
ICAgICAgICBpZiAodHlwZSAhPSBEZXN0cnVjdG9yQ29uc2lzdGVuY3lDaGVjaykKLSAgICAgICAg
ICAgICAgICBpdC0+c2Vjb25kLmdldE5vblNwYXJzZU1vZGUoKS5pc1VuZGVmaW5lZCgpOyAvLyBM
aWtlbHkgdG8gY3Jhc2ggaWYgdGhlIG9iamVjdCB3YXMgZGVhbGxvY2F0ZWQuCisgICAgICAgICAg
ICAgICAgaXQtPnZhbHVlLmdldE5vblNwYXJzZU1vZGUoKS5pc1VuZGVmaW5lZCgpOyAvLyBMaWtl
bHkgdG8gY3Jhc2ggaWYgdGhlIG9iamVjdCB3YXMgZGVhbGxvY2F0ZWQuCiAgICAgICAgIH0KICAg
ICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJv
bFRhYmxlT2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9s
VGFibGVPYmplY3QuY3BwCmluZGV4IDIzMzRhMDhjYWU4YWFjZWZmOGY2NTVkMTc5ZTFkNjljZjRj
MzU2MzguLjM3Y2MxYWUwNDE2YjVkYzg3NWU0ZGE0OTFmOTFjYjc1YjY5NjMwZTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3Qu
Y3BwCkBAIC02MSw4ICs2MSw4IEBAIHZvaWQgSlNTeW1ib2xUYWJsZU9iamVjdDo6Z2V0T3duUHJv
cGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsCiAgICAgSlNTeW1i
b2xUYWJsZU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1N5bWJvbFRhYmxlT2JqZWN0Kj4o
b2JqZWN0KTsKICAgICBTeW1ib2xUYWJsZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gdGhpc09iamVj
dC0+c3ltYm9sVGFibGUoKS0+ZW5kKCk7CiAgICAgZm9yIChTeW1ib2xUYWJsZTo6Y29uc3RfaXRl
cmF0b3IgaXQgPSB0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKLSAgICAgICAgaWYgKCEoaXQtPnNlY29uZC5nZXRBdHRyaWJ1dGVzKCkgJiBEb250
RW51bSkgfHwgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykpCi0gICAgICAgICAg
ICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyKGV4ZWMsIGl0LT5maXJzdC5nZXQoKSkpOwor
ICAgICAgICBpZiAoIShpdC0+dmFsdWUuZ2V0QXR0cmlidXRlcygpICYgRG9udEVudW0pIHx8ICht
b2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpKQorICAgICAgICAgICAgcHJvcGVydHlO
YW1lcy5hZGQoSWRlbnRpZmllcihleGVjLCBpdC0+a2V5LmdldCgpKSk7CiAgICAgfQogICAgIAog
ICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3Bl
cnR5TmFtZXMsIG1vZGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTeW1ib2xUYWJsZU9iamVjdC5oCmluZGV4IDFhOTliMTk5ZmZlMWI2N2E3Y2RiY2RmY2M5Njkz
ZjRmMWUxZDRkOTIuLjUwYTY0OTU3OTNhMWUwY2I5MmE1N2E2YmNmNjRmOTgwOTg1YjY2NTYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmpl
Y3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2Jq
ZWN0LmgKQEAgLTc3LDcgKzc3LDcgQEAgaW5saW5lIGJvb2wgc3ltYm9sVGFibGVHZXQoCiAgICAg
U3ltYm9sVGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSBzeW1ib2xUYWJsZS5maW5kKHByb3BlcnR5TmFt
ZS5wdWJsaWNOYW1lKCkpOwogICAgIGlmIChpdGVyID09IHN5bWJvbFRhYmxlLmVuZCgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgU3ltYm9sVGFibGVFbnRyeTo6RmFzdCBlbnRyeSA9IGl0
ZXItPnNlY29uZDsKKyAgICBTeW1ib2xUYWJsZUVudHJ5OjpGYXN0IGVudHJ5ID0gaXRlci0+dmFs
dWU7CiAgICAgQVNTRVJUKCFlbnRyeS5pc051bGwoKSk7CiAgICAgc2xvdC5zZXRWYWx1ZShvYmpl
Y3QtPnJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuZ2V0KCkpOwogICAgIHJldHVybiB0cnVl
OwpAQCAtOTEsNyArOTEsNyBAQCBpbmxpbmUgYm9vbCBzeW1ib2xUYWJsZUdldCgKICAgICBTeW1i
b2xUYWJsZTo6aXRlcmF0b3IgaXRlciA9IHN5bWJvbFRhYmxlLmZpbmQocHJvcGVydHlOYW1lLnB1
YmxpY05hbWUoKSk7CiAgICAgaWYgKGl0ZXIgPT0gc3ltYm9sVGFibGUuZW5kKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBTeW1ib2xUYWJsZUVudHJ5OjpGYXN0IGVudHJ5ID0gaXRlci0+
c2Vjb25kOworICAgIFN5bWJvbFRhYmxlRW50cnk6OkZhc3QgZW50cnkgPSBpdGVyLT52YWx1ZTsK
ICAgICBBU1NFUlQoIWVudHJ5LmlzTnVsbCgpKTsKICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0
b3IoCiAgICAgICAgIG9iamVjdC0+cmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKS5nZXQoKSwg
ZW50cnkuZ2V0QXR0cmlidXRlcygpIHwgRG9udERlbGV0ZSk7CkBAIC0xMDcsNyArMTA3LDcgQEAg
aW5saW5lIGJvb2wgc3ltYm9sVGFibGVHZXQoCiAgICAgU3ltYm9sVGFibGU6Oml0ZXJhdG9yIGl0
ZXIgPSBzeW1ib2xUYWJsZS5maW5kKHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCkpOwogICAgIGlm
IChpdGVyID09IHN5bWJvbFRhYmxlLmVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
U3ltYm9sVGFibGVFbnRyeTo6RmFzdCBlbnRyeSA9IGl0ZXItPnNlY29uZDsKKyAgICBTeW1ib2xU
YWJsZUVudHJ5OjpGYXN0IGVudHJ5ID0gaXRlci0+dmFsdWU7CiAgICAgQVNTRVJUKCFlbnRyeS5p
c051bGwoKSk7CiAgICAgc2xvdC5zZXRWYWx1ZShvYmplY3QtPnJlZ2lzdGVyQXQoZW50cnkuZ2V0
SW5kZXgoKSkuZ2V0KCkpOwogICAgIHNsb3RJc1dyaXRlYWJsZSA9ICFlbnRyeS5pc1JlYWRPbmx5
KCk7CkBAIC0xMjcsNyArMTI3LDcgQEAgaW5saW5lIGJvb2wgc3ltYm9sVGFibGVQdXQoCiAgICAg
aWYgKGl0ZXIgPT0gc3ltYm9sVGFibGUuZW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICBib29sIHdhc0ZhdDsKLSAgICBTeW1ib2xUYWJsZUVudHJ5OjpGYXN0IGZhc3RFbnRyeSA9IGl0
ZXItPnNlY29uZC5nZXRGYXN0KHdhc0ZhdCk7CisgICAgU3ltYm9sVGFibGVFbnRyeTo6RmFzdCBm
YXN0RW50cnkgPSBpdGVyLT52YWx1ZS5nZXRGYXN0KHdhc0ZhdCk7CiAgICAgQVNTRVJUKCFmYXN0
RW50cnkuaXNOdWxsKCkpOwogICAgIGlmIChmYXN0RW50cnkuaXNSZWFkT25seSgpKSB7CiAgICAg
ICAgIGlmIChzaG91bGRUaHJvdykKQEAgLTEzNSw3ICsxMzUsNyBAQCBpbmxpbmUgYm9vbCBzeW1i
b2xUYWJsZVB1dCgKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGlmIChVTkxJS0VM
WSh3YXNGYXQpKQotICAgICAgICBpdGVyLT5zZWNvbmQubm90aWZ5V3JpdGUoKTsKKyAgICAgICAg
aXRlci0+dmFsdWUubm90aWZ5V3JpdGUoKTsKICAgICBvYmplY3QtPnJlZ2lzdGVyQXQoZmFzdEVu
dHJ5LmdldEluZGV4KCkpLnNldChnbG9iYWxEYXRhLCBvYmplY3QsIHZhbHVlKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KQEAgLTE1MCw3ICsxNTAsNyBAQCBpbmxpbmUgYm9vbCBzeW1ib2xUYWJsZVB1
dFdpdGhBdHRyaWJ1dGVzKAogICAgIFN5bWJvbFRhYmxlOjppdGVyYXRvciBpdGVyID0gb2JqZWN0
LT5zeW1ib2xUYWJsZSgpLT5maW5kKHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCkpOwogICAgIGlm
IChpdGVyID09IG9iamVjdC0+c3ltYm9sVGFibGUoKS0+ZW5kKCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBTeW1ib2xUYWJsZUVudHJ5JiBlbnRyeSA9IGl0ZXItPnNlY29uZDsKKyAgICBT
eW1ib2xUYWJsZUVudHJ5JiBlbnRyeSA9IGl0ZXItPnZhbHVlOwogICAgIEFTU0VSVCghZW50cnku
aXNOdWxsKCkpOwogICAgIGVudHJ5Lm5vdGlmeVdyaXRlKCk7CiAgICAgZW50cnkuc2V0QXR0cmli
dXRlcyhhdHRyaWJ1dGVzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1JlZ0V4cENhY2hlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4
cENhY2hlLmNwcAppbmRleCA1M2ExM2E0YjU5Yjc3ZTc2YTRiODgwY2ZlNzViMzYwNmM4N2UxZmFk
Li5hYjRmOTg3OGE5OTk4ZDQ5ODQwMmU2YjRkY2U3MDliZDI4ZTJjZWU4IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGUuY3BwCkBAIC04MCw3ICs4MCw3IEBA
IHZvaWQgUmVnRXhwQ2FjaGU6OmludmFsaWRhdGVDb2RlKCkKIAogICAgIFJlZ0V4cENhY2hlTWFw
OjppdGVyYXRvciBlbmQgPSBtX3dlYWtDYWNoZS5lbmQoKTsKICAgICBmb3IgKFJlZ0V4cENhY2hl
TWFwOjppdGVyYXRvciBpdCA9IG1fd2Vha0NhY2hlLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewotICAgICAgICBSZWdFeHAqIHJlZ0V4cCA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIFJl
Z0V4cCogcmVnRXhwID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICBpZiAoIXJlZ0V4cCkgLy8g
U2tpcCB6b21iaWVzLgogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIHJlZ0V4cC0+aW52
YWxpZGF0ZUNvZGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1dlYWtHQ01hcC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha0dDTWFwLmgK
aW5kZXggNjkyNjE2NWE3ODVhNzY3ZGEzNzdhY2ViMjUzOTcwY2VjM2I5YTk0OC4uNTJlNWUyOTQ2
ZmQxMDNiN2ZlYWY2MjFmNmZkMmE1MGQwNTM0OWQwMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvV2Vha0dDTWFwLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvV2Vha0dDTWFwLmgKQEAgLTYzLDcgKzYzLDcgQEAgcHVibGljOgogICAgIHsKICAg
ICAgICAgdHlwZW5hbWUgTWFwVHlwZTo6aXRlcmF0b3IgZW5kID0gbV9tYXAuZW5kKCk7CiAgICAg
ICAgIGZvciAodHlwZW5hbWUgTWFwVHlwZTo6aXRlcmF0b3IgcHRyID0gbV9tYXAuYmVnaW4oKTsg
cHRyICE9IGVuZDsgKytwdHIpCi0gICAgICAgICAgICBXZWFrU2V0OjpkZWFsbG9jYXRlKHB0ci0+
c2Vjb25kKTsKKyAgICAgICAgICAgIFdlYWtTZXQ6OmRlYWxsb2NhdGUocHRyLT52YWx1ZSk7CiAg
ICAgICAgIG1fbWFwLmNsZWFyKCk7CiAgICAgfQogCkBAIC04MCw4ICs4MCw4IEBAIHB1YmxpYzoK
ICAgICAgICAgQVNTRVJUX1VOVVNFRChnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLmFwaUxvY2soKS5j
dXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpKTsKICAgICAgICAgdHlwZW5hbWUgTWFwVHlwZTo6
QWRkUmVzdWx0IHJlc3VsdCA9IG1fbWFwLmFkZChrZXksIDApOwogICAgICAgICBpZiAoIXJlc3Vs
dC5pc05ld0VudHJ5KQotICAgICAgICAgICAgV2Vha1NldDo6ZGVhbGxvY2F0ZShyZXN1bHQuaXRl
cmF0b3ItPnNlY29uZCk7Ci0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gV2Vha1Nl
dDo6YWxsb2NhdGUodmFsdWUsIHRoaXMsIEZpbmFsaXplckNhbGxiYWNrOjpmaW5hbGl6ZXJDb250
ZXh0Rm9yKGtleSkpOworICAgICAgICAgICAgV2Vha1NldDo6ZGVhbGxvY2F0ZShyZXN1bHQuaXRl
cmF0b3ItPnZhbHVlKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IFdlYWtTZXQ6
OmFsbG9jYXRlKHZhbHVlLCB0aGlzLCBGaW5hbGl6ZXJDYWxsYmFjazo6ZmluYWxpemVyQ29udGV4
dEZvcihrZXkpKTsKICAgICB9CiAKICAgICB2b2lkIHJlbW92ZShjb25zdCBLZXlUeXBlJiBrZXkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvUHJvZmlsZVRyZWVOb2Rl
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvUHJvZmlsZVRyZWVOb2RlLmgKaW5kZXgg
N2I1MWVmYjg1ZGIzNDQxYTIyMjYzYjQyNDk3YTMxNzUyYjViNTJmZC4uN2I1YTk1ZWM0MDQ0YjYz
ZjIxMTEzNjEyMmQ5MjNjYTg4OTQ2MGEzNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rvb2xzL1Byb2ZpbGVUcmVlTm9kZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90
b29scy9Qcm9maWxlVHJlZU5vZGUuaApAQCAtNTEsNyArNTEsNyBAQCBwdWJsaWM6CiAgICAgCiAg
ICAgICAgIFByb2ZpbGVUcmVlTm9kZSBuZXdFbnRyeTsKICAgICAgICAgTWFwOjpBZGRSZXN1bHQg
cmVzdWx0ID0gbV9jaGlsZHJlbi0+YWRkKFN0cmluZyhuYW1lKSwgbmV3RW50cnkpOwotICAgICAg
ICBQcm9maWxlVHJlZU5vZGUqIGNoaWxkSW5NYXAgPSAmcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7
CisgICAgICAgIFByb2ZpbGVUcmVlTm9kZSogY2hpbGRJbk1hcCA9ICZyZXN1bHQuaXRlcmF0b3It
PnZhbHVlOwogICAgICAgICArK2NoaWxkSW5NYXAtPm1fY291bnQ7CiAgICAgICAgIHJldHVybiBj
aGlsZEluTWFwOwogICAgIH0KQEAgLTcyLDcgKzcyLDcgQEAgcHVibGljOgogICAgICAgICAgICAg
cmV0dXJuIDA7CiAgICAgICAgIHVpbnQ2NF90IGNoaWxkQ291bnQgPSAwOwogICAgICAgICBmb3Ig
KE1hcDo6aXRlcmF0b3IgaXQgPSBtX2NoaWxkcmVuLT5iZWdpbigpOyBpdCAhPSBtX2NoaWxkcmVu
LT5lbmQoKTsgKytpdCkKLSAgICAgICAgICAgIGNoaWxkQ291bnQgKz0gaXQtPnNlY29uZC5jb3Vu
dCgpOworICAgICAgICAgICAgY2hpbGRDb3VudCArPSBpdC0+dmFsdWUuY291bnQoKTsKICAgICAg
ICAgcmV0dXJuIGNoaWxkQ291bnQ7CiAgICAgfQogICAgIApAQCAtOTcsMTkgKzk3LDE5IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5kZW50OyArK2kp
CiAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICIpOwogICAgICAgICAgICAgZGF0YUxvZygi
JSA4bGxkOiAlcyAoJWxsZCBzdGFjayB0b3ApXG4iLAotICAgICAgICAgICAgICAgIHN0YXRpY19j
YXN0PGxvbmcgbG9uZz4oZW50cnktPnNlY29uZC5jb3VudCgpKSwKLSAgICAgICAgICAgICAgICBl
bnRyeS0+Zmlyc3QudXRmOCgpLmRhdGEoKSwKLSAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxs
b25nIGxvbmc+KGVudHJ5LT5zZWNvbmQuY291bnQoKSAtIGVudHJ5LT5zZWNvbmQuY2hpbGRDb3Vu
dCgpKSk7CisgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihlbnRyeS0+dmFs
dWUuY291bnQoKSksCisgICAgICAgICAgICAgICAgZW50cnktPmtleS51dGY4KCkuZGF0YSgpLAor
ICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oZW50cnktPnZhbHVlLmNvdW50
KCkgLSBlbnRyeS0+dmFsdWUuY2hpbGRDb3VudCgpKSk7CiAKICAgICAgICAgICAgIC8vIFJlY3Vy
c2l2ZWx5IGR1bXAgdGhlIGNoaWxkIG5vZGVzLgotICAgICAgICAgICAgZW50cnktPnNlY29uZC5k
dW1wSW50ZXJuYWwoaW5kZW50ICsgMSk7CisgICAgICAgICAgICBlbnRyeS0+dmFsdWUuZHVtcElu
dGVybmFsKGluZGVudCArIDEpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgc3RhdGljIGludCBj
b21wYXJlRW50cmllcyhjb25zdCB2b2lkKiBhLCBjb25zdCB2b2lkKiBiKQogICAgIHsKLSAgICAg
ICAgdWludDY0X3QgZGEgPSAoKnN0YXRpY19jYXN0PE1hcEVudHJ5KiBjb25zdCAqPihhKSktPnNl
Y29uZC5jb3VudCgpOwotICAgICAgICB1aW50NjRfdCBkYiA9ICgqc3RhdGljX2Nhc3Q8TWFwRW50
cnkqIGNvbnN0ICo+KGIpKS0+c2Vjb25kLmNvdW50KCk7CisgICAgICAgIHVpbnQ2NF90IGRhID0g
KCpzdGF0aWNfY2FzdDxNYXBFbnRyeSogY29uc3QgKj4oYSkpLT52YWx1ZS5jb3VudCgpOworICAg
ICAgICB1aW50NjRfdCBkYiA9ICgqc3RhdGljX2Nhc3Q8TWFwRW50cnkqIGNvbnN0ICo+KGIpKS0+
dmFsdWUuY291bnQoKTsKICAgICAgICAgcmV0dXJuIChkYSA8IGRiKSAtIChkYSA+IGRiKTsKICAg
ICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0hhc2hDb3VudGVkU2V0LmggYi9Tb3Vy
Y2UvV1RGL3d0Zi9IYXNoQ291bnRlZFNldC5oCmluZGV4IGVmODliZGJjNzUyNjE4NWRlMDE3NTNl
MDNlOWY2YjBiNzdlM2UwMWQuLmVmZjRhMjkzZTljNzM5YjEyYzQzYjY4OTEyNmQwYzg0NTBiY2Qw
MGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0hhc2hDb3VudGVkU2V0LmgKKysrIGIvU291
cmNlL1dURi93dGYvSGFzaENvdW50ZWRTZXQuaApAQCAtMTU0LDcgKzE1NCw3IEBAIG5hbWVzcGFj
ZSBXVEYgewogICAgIGlubGluZSB0eXBlbmFtZSBIYXNoQ291bnRlZFNldDxWYWx1ZSwgSGFzaEZ1
bmN0aW9ucywgVHJhaXRzPjo6QWRkUmVzdWx0IEhhc2hDb3VudGVkU2V0PFZhbHVlLCBIYXNoRnVu
Y3Rpb25zLCBUcmFpdHM+OjphZGQoY29uc3QgVmFsdWVUeXBlICZ2YWx1ZSkKICAgICB7CiAgICAg
ICAgIEFkZFJlc3VsdCByZXN1bHQgPSBtX2ltcGwuYWRkKHZhbHVlLCAwKTsKLSAgICAgICAgKyty
ZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgKytyZXN1bHQuaXRlcmF0b3ItPnZhbHVl
OwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKQEAgLTE3MCwxMSArMTcwLDEx
IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBpZiAoaXQgPT0gZW5kKCkpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgdW5zaWduZWQgb2xkVmFsID0gaXQtPnNlY29uZDsK
KyAgICAgICAgdW5zaWduZWQgb2xkVmFsID0gaXQtPnZhbHVlOwogICAgICAgICBBU1NFUlQob2xk
VmFsKTsKICAgICAgICAgdW5zaWduZWQgbmV3VmFsID0gb2xkVmFsIC0gMTsKICAgICAgICAgaWYg
KG5ld1ZhbCkgewotICAgICAgICAgICAgaXQtPnNlY29uZCA9IG5ld1ZhbDsKKyAgICAgICAgICAg
IGl0LT52YWx1ZSA9IG5ld1ZhbDsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
fQogCkBAIC0yMjYsNyArMjI2LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIGl0ZXJhdG9y
IGl0ID0gY29sbGVjdGlvbi5iZWdpbigpOwogICAgICAgICBpdGVyYXRvciBlbmQgPSBjb2xsZWN0
aW9uLmVuZCgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpdCAhPSBlbmQ7ICsraXQs
ICsraSkKLSAgICAgICAgICAgIHZlY3RvcltpXSA9ICgqaXQpLmZpcnN0OworICAgICAgICAgICAg
dmVjdG9yW2ldID0gKCppdCkua2V5OwogICAgIH0KIAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi9IYXNoSXRlcmF0b3JzLmggYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoSXRlcmF0b3JzLmgKaW5k
ZXggNjM5ZmY3MjUwYTFlZjBmYjNmODI0ZGM5MTY4ODQ5NmI4OWI2NWUxNy4uM2E4NDE4YWFkZWY3
ODNiOWFiYzAzNGE5ZWUwYTRhZTdhYjhiMTZhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYv
SGFzaEl0ZXJhdG9ycy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0hhc2hJdGVyYXRvcnMuaApAQCAt
OTEsNyArOTEsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICBwdWJsaWM6CiAgICAgICAgIEhhc2hU
YWJsZUNvbnN0S2V5c0l0ZXJhdG9yKGNvbnN0IENvbnN0SXRlcmF0b3ImIGltcGwpIDogbV9pbXBs
KGltcGwpIHt9CiAgICAgICAgIAotICAgICAgICBjb25zdCBLZXlUeXBlKiBnZXQoKSBjb25zdCB7
IHJldHVybiAmKG1faW1wbC5nZXQoKS0+Zmlyc3QpOyB9CisgICAgICAgIGNvbnN0IEtleVR5cGUq
IGdldCgpIGNvbnN0IHsgcmV0dXJuICYobV9pbXBsLmdldCgpLT5rZXkpOyB9CiAgICAgICAgIGNv
bnN0IEtleVR5cGUmIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICpnZXQoKTsgfQogICAgICAg
ICBjb25zdCBLZXlUeXBlKiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gZ2V0KCk7IH0KIApA
QCAtMTA4LDcgKzEwOCw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgIHB1YmxpYzoKICAgICAgICAg
SGFzaFRhYmxlQ29uc3RWYWx1ZXNJdGVyYXRvcihjb25zdCBDb25zdEl0ZXJhdG9yJiBpbXBsKSA6
IG1faW1wbChpbXBsKSB7fQogICAgICAgICAKLSAgICAgICAgY29uc3QgTWFwcGVkVHlwZSogZ2V0
KCkgY29uc3QgeyByZXR1cm4gJihtX2ltcGwuZ2V0KCktPnNlY29uZCk7IH0KKyAgICAgICAgY29u
c3QgTWFwcGVkVHlwZSogZ2V0KCkgY29uc3QgeyByZXR1cm4gJihtX2ltcGwuZ2V0KCktPnZhbHVl
KTsgfQogICAgICAgICBjb25zdCBNYXBwZWRUeXBlJiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVy
biAqZ2V0KCk7IH0KICAgICAgICAgY29uc3QgTWFwcGVkVHlwZSogb3BlcmF0b3ItPigpIGNvbnN0
IHsgcmV0dXJuIGdldCgpOyB9CiAKQEAgLTE0OSw3ICsxNDksNyBAQCBuYW1lc3BhY2UgV1RGIHsK
ICAgICBwdWJsaWM6CiAgICAgICAgIEhhc2hUYWJsZVZhbHVlc0l0ZXJhdG9yKGNvbnN0IEl0ZXJh
dG9yJiBpbXBsKSA6IG1faW1wbChpbXBsKSB7fQogICAgICAgICAKLSAgICAgICAgTWFwcGVkVHlw
ZSogZ2V0KCkgY29uc3QgeyByZXR1cm4gJihtX2ltcGwuZ2V0KCktPnNlY29uZCk7IH0KKyAgICAg
ICAgTWFwcGVkVHlwZSogZ2V0KCkgY29uc3QgeyByZXR1cm4gJihtX2ltcGwuZ2V0KCktPnZhbHVl
KTsgfQogICAgICAgICBNYXBwZWRUeXBlJiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqZ2V0
KCk7IH0KICAgICAgICAgTWFwcGVkVHlwZSogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIGdl
dCgpOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0hhc2hNYXAuaCBiL1NvdXJjZS9X
VEYvd3RmL0hhc2hNYXAuaAppbmRleCA5MDEwNDc0YzgyNTU2M2VmODQxYjk2ODdmZWZmNDk0YWE2
NTViNGU4Li4xMGVlNDI1ZGE5NTk2YmFhZGYzNGU1NzhlZjVhYmU1NzBmOWFlMGQ2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoTWFwLmgKKysrIGIvU291cmNlL1dURi93dGYvSGFzaE1h
cC5oCkBAIC0zNSw3ICszNSw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgIH07CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgS2V5VmFsdWVQYWlyS2V5RXh0cmFjdG9yIHsKLSAgICAg
ICAgc3RhdGljIGNvbnN0IHR5cGVuYW1lIFQ6OktleVR5cGUmIGV4dHJhY3QoY29uc3QgVCYgcCkg
eyByZXR1cm4gcC5maXJzdDsgfQorICAgICAgICBzdGF0aWMgY29uc3QgdHlwZW5hbWUgVDo6S2V5
VHlwZSYgZXh0cmFjdChjb25zdCBUJiBwKSB7IHJldHVybiBwLmtleTsgfQogICAgIH07CiAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUg
SGFzaEFyZyA9IHR5cGVuYW1lIERlZmF1bHRIYXNoPEtleUFyZz46Okhhc2gsCkBAIC0yMTEsNyAr
MjExLDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc0lz
RW1wdHlWYWx1ZUZ1bmN0aW9uID0gdHJ1ZTsKICAgICAgICAgc3RhdGljIGJvb2wgaXNFbXB0eVZh
bHVlKGNvbnN0IHR5cGVuYW1lIEtleVZhbHVlUGFpckhhc2hUcmFpdHM8S2V5VHJhaXRzLCBNYXBw
ZWRUcmFpdHM+OjpUcmFpdFR5cGUmIHZhbHVlKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gaXNIYXNoVHJhaXRzRW1wdHlWYWx1ZTxLZXlUcmFpdHM+KHZhbHVlLmZpcnN0KTsKKyAgICAg
ICAgICAgIHJldHVybiBpc0hhc2hUcmFpdHNFbXB0eVZhbHVlPEtleVRyYWl0cz4odmFsdWUua2V5
KTsKICAgICAgICAgfQogICAgIH07CiAKQEAgLTIyMSw4ICsyMjEsOCBAQCBuYW1lc3BhY2UgV1RG
IHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gc3RhdGljIGJvb2wg
ZXF1YWwoY29uc3QgVCYgYSwgY29uc3QgVSYgYikgeyByZXR1cm4gSGFzaEZ1bmN0aW9uczo6ZXF1
YWwoYSwgYik7IH0KICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlw
ZW5hbWUgVj4gc3RhdGljIHZvaWQgdHJhbnNsYXRlKFQmIGxvY2F0aW9uLCBjb25zdCBVJiBrZXks
IGNvbnN0IFYmIG1hcHBlZCkKICAgICAgICAgewotICAgICAgICAgICAgbG9jYXRpb24uZmlyc3Qg
PSBrZXk7Ci0gICAgICAgICAgICBWYWx1ZVRyYWl0czo6VmFsdWVUcmFpdHM6OnN0b3JlKG1hcHBl
ZCwgbG9jYXRpb24uc2Vjb25kKTsKKyAgICAgICAgICAgIGxvY2F0aW9uLmtleSA9IGtleTsKKyAg
ICAgICAgICAgIFZhbHVlVHJhaXRzOjpWYWx1ZVRyYWl0czo6c3RvcmUobWFwcGVkLCBsb2NhdGlv
bi52YWx1ZSk7CiAgICAgICAgIH0KICAgICB9OwogCkBAIC0yMzIsOCArMjMyLDggQEAgbmFtZXNw
YWNlIFdURiB7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IHN0YXRp
YyBib29sIGVxdWFsKGNvbnN0IFQmIGEsIGNvbnN0IFUmIGIpIHsgcmV0dXJuIFRyYW5zbGF0b3I6
OmVxdWFsKGEsIGIpOyB9CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUs
IHR5cGVuYW1lIFY+IHN0YXRpYyB2b2lkIHRyYW5zbGF0ZShUJiBsb2NhdGlvbiwgY29uc3QgVSYg
a2V5LCBjb25zdCBWJiBtYXBwZWQsIHVuc2lnbmVkIGhhc2hDb2RlKQogICAgICAgICB7Ci0gICAg
ICAgICAgICBUcmFuc2xhdG9yOjp0cmFuc2xhdGUobG9jYXRpb24uZmlyc3QsIGtleSwgaGFzaENv
ZGUpOwotICAgICAgICAgICAgVmFsdWVUcmFpdHM6OlZhbHVlVHJhaXRzOjpzdG9yZShtYXBwZWQs
IGxvY2F0aW9uLnNlY29uZCk7CisgICAgICAgICAgICBUcmFuc2xhdG9yOjp0cmFuc2xhdGUobG9j
YXRpb24ua2V5LCBrZXksIGhhc2hDb2RlKTsKKyAgICAgICAgICAgIFZhbHVlVHJhaXRzOjpWYWx1
ZVRyYWl0czo6c3RvcmUobWFwcGVkLCBsb2NhdGlvbi52YWx1ZSk7CiAgICAgICAgIH0KICAgICB9
OwogCkBAIC0zNDEsNyArMzQxLDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIEFkZFJlc3Vs
dCByZXN1bHQgPSBpbmxpbmVBZGQoa2V5LCBtYXBwZWQpOwogICAgICAgICBpZiAoIXJlc3VsdC5p
c05ld0VudHJ5KSB7CiAgICAgICAgICAgICAvLyBUaGUgaW5saW5lQWRkIGNhbGwgYWJvdmUgZm91
bmQgYW4gZXhpc3RpbmcgaGFzaCB0YWJsZSBlbnRyeTsgd2UgbmVlZCB0byBzZXQgdGhlIG1hcHBl
ZCB2YWx1ZS4KLSAgICAgICAgICAgIE1hcHBlZFRyYWl0czo6c3RvcmUobWFwcGVkLCByZXN1bHQu
aXRlcmF0b3ItPnNlY29uZCk7CisgICAgICAgICAgICBNYXBwZWRUcmFpdHM6OnN0b3JlKG1hcHBl
ZCwgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICB9CkBAIC0zNjgsNyArMzY4LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAg
IFZhbHVlVHlwZSogZW50cnkgPSBjb25zdF9jYXN0PEhhc2hUYWJsZVR5cGUmPihtX2ltcGwpLmxv
b2t1cChrZXkpOwogICAgICAgICBpZiAoIWVudHJ5KQogICAgICAgICAgICAgcmV0dXJuIE1hcHBl
ZFRyYWl0czo6cGVlayhNYXBwZWRUcmFpdHM6OmVtcHR5VmFsdWUoKSk7Ci0gICAgICAgIHJldHVy
biBNYXBwZWRUcmFpdHM6OnBlZWsoZW50cnktPnNlY29uZCk7CisgICAgICAgIHJldHVybiBNYXBw
ZWRUcmFpdHM6OnBlZWsoZW50cnktPnZhbHVlKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgpA
QCAtMzk5LDcgKzM5OSw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBpdGVyYXRvciBpdCA9
IGZpbmQoa2V5KTsKICAgICAgICAgaWYgKGl0ID09IGVuZCgpKQogICAgICAgICAgICAgcmV0dXJu
IE1hcHBlZFRyYWl0czo6cGFzc091dChNYXBwZWRUcmFpdHM6OmVtcHR5VmFsdWUoKSk7Ci0gICAg
ICAgIE1hcHBlZFBhc3NPdXRUeXBlIHJlc3VsdCA9IE1hcHBlZFRyYWl0czo6cGFzc091dChpdC0+
c2Vjb25kKTsKKyAgICAgICAgTWFwcGVkUGFzc091dFR5cGUgcmVzdWx0ID0gTWFwcGVkVHJhaXRz
OjpwYXNzT3V0KGl0LT52YWx1ZSk7CiAgICAgICAgIHJlbW92ZShpdCk7CiAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgfQpAQCAtNDIxLDggKzQyMSw4IEBAIG5hbWVzcGFjZSBXVEYgewogICAg
ICAgICBjb25zdF9pdGVyYXRvciBlbmQgPSBhLmVuZCgpOwogICAgICAgICBjb25zdF9pdGVyYXRv
ciBub3RGb3VuZCA9IGIuZW5kKCk7CiAgICAgICAgIGZvciAoY29uc3RfaXRlcmF0b3IgaXQgPSBh
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgY29uc3RfaXRlcmF0b3Ig
YlBvcyA9IGIuZmluZChpdC0+Zmlyc3QpOwotICAgICAgICAgICAgaWYgKGJQb3MgPT0gbm90Rm91
bmQgfHwgaXQtPnNlY29uZCAhPSBiUG9zLT5zZWNvbmQpCisgICAgICAgICAgICBjb25zdF9pdGVy
YXRvciBiUG9zID0gYi5maW5kKGl0LT5rZXkpOworICAgICAgICAgICAgaWYgKGJQb3MgPT0gbm90
Rm91bmQgfHwgaXQtPnZhbHVlICE9IGJQb3MtPnZhbHVlKQogICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgfQogCkBAIC00MzUsMzQgKzQzNSwyMiBAQCBuYW1lc3BhY2UgV1RG
IHsKICAgICAgICAgcmV0dXJuICEoYSA9PSBiKTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBIYXNoVGFibGVUeXBlPgotICAgIHZvaWQgZGVsZXRlQWxsUGFpclNlY29uZHMoSGFzaFRh
YmxlVHlwZSYgY29sbGVjdGlvbikKLSAgICB7Ci0gICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgSGFz
aFRhYmxlVHlwZTo6Y29uc3RfaXRlcmF0b3IgaXRlcmF0b3I7Ci0gICAgICAgIGl0ZXJhdG9yIGVu
ZCA9IGNvbGxlY3Rpb24uZW5kKCk7Ci0gICAgICAgIGZvciAoaXRlcmF0b3IgaXQgPSBjb2xsZWN0
aW9uLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIGRlbGV0ZSBpdC0+c2Vj
b25kOwotICAgIH0KLQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVu
YW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+CiAgICAgaW5saW5lIHZvaWQgZGVsZXRlQWxs
VmFsdWVzKGNvbnN0IEhhc2hNYXA8VCwgVSwgViwgVywgWD4mIGNvbGxlY3Rpb24pCiAgICAgewot
ICAgICAgICBkZWxldGVBbGxQYWlyU2Vjb25kcyhjb2xsZWN0aW9uKTsKLSAgICB9Ci0KLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGVUeXBlPgotICAgIHZvaWQgZGVsZXRlQWxsUGFpckZp
cnN0cyhIYXNoVGFibGVUeXBlJiBjb2xsZWN0aW9uKQotICAgIHsKLSAgICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBIYXNoVGFibGVUeXBlOjpjb25zdF9pdGVyYXRvciBpdGVyYXRvcjsKKyAgICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojpjb25zdF9pdGVyYXRvciBp
dGVyYXRvcjsKICAgICAgICAgaXRlcmF0b3IgZW5kID0gY29sbGVjdGlvbi5lbmQoKTsKICAgICAg
ICAgZm9yIChpdGVyYXRvciBpdCA9IGNvbGxlY3Rpb24uYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KQotICAgICAgICAgICAgZGVsZXRlIGl0LT5maXJzdDsKKyAgICAgICAgICAgIGRlbGV0ZSBpdC0+
dmFsdWU7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlw
ZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KICAgICBpbmxpbmUgdm9pZCBkZWxldGVB
bGxLZXlzKGNvbnN0IEhhc2hNYXA8VCwgVSwgViwgVywgWD4mIGNvbGxlY3Rpb24pCiAgICAgewot
ICAgICAgICBkZWxldGVBbGxQYWlyRmlyc3RzKGNvbGxlY3Rpb24pOworICAgICAgICB0eXBlZGVm
IHR5cGVuYW1lIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmNvbnN0X2l0ZXJhdG9yIGl0ZXJhdG9y
OworICAgICAgICBpdGVyYXRvciBlbmQgPSBjb2xsZWN0aW9uLmVuZCgpOworICAgICAgICBmb3Ig
KGl0ZXJhdG9yIGl0ID0gY29sbGVjdGlvbi5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAg
ICAgICAgICBkZWxldGUgaXQtPmtleTsKICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlw
ZW5hbWUgWT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oIGIvU291cmNl
L1dURi93dGYvSGFzaFRhYmxlLmgKaW5kZXggMWNlM2M1Y2Y2ODhlZjBhODFlMTA2MWJjNmNlMjYy
MGJlM2Q5ODAwZS4uMTZmZGQ5ZTgxZDI4M2I2OWU2MWQ0NmJhNmY5NWZkMTJlMjQ2OWM2NiAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmgKKysrIGIvU291cmNlL1dURi93dGYv
SGFzaFRhYmxlLmgKQEAgLTI4Niw4ICsyODYsOCBAQCBuYW1lc3BhY2UgV1RGIHsKIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSB2b2lkIGhhc2hUYWJsZVN3YXAo
S2V5VmFsdWVQYWlyPFQsIFU+JiBhLCBLZXlWYWx1ZVBhaXI8VCwgVT4mIGIpCiAgICAgewotICAg
ICAgICBzd2FwKGEuZmlyc3QsIGIuZmlyc3QpOwotICAgICAgICBzd2FwKGEuc2Vjb25kLCBiLnNl
Y29uZCk7CisgICAgICAgIHN3YXAoYS5rZXksIGIua2V5KTsKKyAgICAgICAgc3dhcChhLnZhbHVl
LCBiLnZhbHVlKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29sIHVzZVN3
YXA+IHN0cnVjdCBNb3ZlcjsKQEAgLTEyNDYsNyArMTI0Niw3IEBAIG5hbWVzcGFjZSBXVEYgewog
ICAgICAgICAgICAgQVNTRVJUKGVudHJ5ID09IGl0Lm1fcG9zaXRpb24pOwogICAgICAgICAgICAg
Kytjb3VudDsKIAotICAgICAgICAgICAgVmFsdWVDaGVjazxLZXk+OjpjaGVja0NvbnNpc3RlbmN5
KGl0LT5maXJzdCk7CisgICAgICAgICAgICBWYWx1ZUNoZWNrPEtleT46OmNoZWNrQ29uc2lzdGVu
Y3koaXQtPmtleSk7CiAgICAgICAgIH0KIAogICAgICAgICBBU1NFUlQoY291bnQgPT0gbV9rZXlD
b3VudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoVHJhaXRzLmggYi9Tb3VyY2Uv
V1RGL3d0Zi9IYXNoVHJhaXRzLmgKaW5kZXggZWJlNzk1ZWIxYTg5OWUyYzYxZWU1ZGMzNjQ3Mzdi
MjliODU3MGEwOS4uNzNiZjJiZWFhMmU1ZWY0ZWZlZDlkYjBjMmRlYWYzZjExMmViNGFhZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvSGFzaFRyYWl0cy5oCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L0hhc2hUcmFpdHMuaApAQCAtMTkzLDIxICsxOTMsMjAgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAg
ICAgIH0KIAogICAgICAgICBLZXlWYWx1ZVBhaXIoY29uc3QgS2V5VHlwZUFyZyYga2V5LCBjb25z
dCBWYWx1ZVR5cGVBcmcmIHZhbHVlKQotICAgICAgICAgICAgOiBmaXJzdChrZXkpCi0gICAgICAg
ICAgICAsIHNlY29uZCh2YWx1ZSkKKyAgICAgICAgICAgIDoga2V5KGtleSkKKyAgICAgICAgICAg
ICwgdmFsdWUodmFsdWUpCiAgICAgICAgIHsKICAgICAgICAgfQogCiAgICAgICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBPdGhlcktleVR5cGUsIHR5cGVuYW1lIE90aGVyVmFsdWVUeXBlPgogICAgICAg
ICBLZXlWYWx1ZVBhaXIoY29uc3QgS2V5VmFsdWVQYWlyPE90aGVyS2V5VHlwZSwgT3RoZXJWYWx1
ZVR5cGU+JiBvdGhlcikKLSAgICAgICAgICAgIDogZmlyc3Qob3RoZXIuZmlyc3QpCi0gICAgICAg
ICAgICAsIHNlY29uZChvdGhlci5zZWNvbmQpCisgICAgICAgICAgICA6IGtleShvdGhlci5rZXkp
CisgICAgICAgICAgICAsIHZhbHVlKG90aGVyLnZhbHVlKQogICAgICAgICB7CiAgICAgICAgIH0K
IAotICAgICAgICAvLyBUT0RPOiBSZW5hbWUgdGhlc2UgdG8ga2V5IGFuZCB2YWx1ZS4gU2VlIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Mjc4NC4KLSAgICAgICAgS2V5
VHlwZUFyZyBmaXJzdDsKLSAgICAgICAgVmFsdWVUeXBlQXJnIHNlY29uZDsKKyAgICAgICAgS2V5
VHlwZUFyZyBrZXk7CisgICAgICAgIFZhbHVlVHlwZUFyZyB2YWx1ZTsKICAgICB9OwogCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBWYWx1ZVRyYWl0c0FyZz4K
QEAgLTIyNCw4ICsyMjMsOCBAQCBuYW1lc3BhY2UgV1RGIHsKIAogICAgICAgICBzdGF0aWMgY29u
c3QgaW50IG1pbmltdW1UYWJsZVNpemUgPSBLZXlUcmFpdHM6Om1pbmltdW1UYWJsZVNpemU7CiAK
LSAgICAgICAgc3RhdGljIHZvaWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKFRyYWl0VHlwZSYgc2xv
dCkgeyBLZXlUcmFpdHM6OmNvbnN0cnVjdERlbGV0ZWRWYWx1ZShzbG90LmZpcnN0KTsgfQotICAg
ICAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShjb25zdCBUcmFpdFR5cGUmIHZhbHVlKSB7
IHJldHVybiBLZXlUcmFpdHM6OmlzRGVsZXRlZFZhbHVlKHZhbHVlLmZpcnN0KTsgfQorICAgICAg
ICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoVHJhaXRUeXBlJiBzbG90KSB7IEtl
eVRyYWl0czo6Y29uc3RydWN0RGVsZXRlZFZhbHVlKHNsb3Qua2V5KTsgfQorICAgICAgICBzdGF0
aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShjb25zdCBUcmFpdFR5cGUmIHZhbHVlKSB7IHJldHVybiBL
ZXlUcmFpdHM6OmlzRGVsZXRlZFZhbHVlKHZhbHVlLmtleSk7IH0KICAgICB9OwogCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL01ldGFBbGxvY2F0b3IuY3BwIGIvU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvci5j
cHAKaW5kZXggOWVmY2ZmMmViMTNmNzJjY2I1OTc3NTFjODQzYmI0Mjk1MWZjNzRhMy4uNzNiMzZh
YTQyMWY4YTk1NTA3YWFkOTZhM2E0YmFmODJhZTExZDUzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvTWV0YUFsbG9jYXRvci5jcHAKKysrIGIvU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRv
ci5jcHAKQEAgLTMwOCw5ICszMDgsOSBAQCB2b2lkIE1ldGFBbGxvY2F0b3I6OmFkZEZyZWVTcGFj
ZSh2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVzKQogICAgICAgICAvLyBXZSBoYXZlIHNv
bWV0aGluZyB3ZSBjYW4gY29hbGVzY2Ugd2l0aCBvbiB0aGUgbGVmdC4gUmVtb3ZlIGl0IGZyb20g
dGhlIHRyZWUsIGFuZAogICAgICAgICAvLyByZW1vdmUgaXRzIGVuZCBmcm9tIHRoZSBlbmQgYWRk
cmVzcyBtYXAuCiAgICAgICAgIAotICAgICAgICBBU1NFUlQocmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGxlZnROZWlnaGJvci0+c2Vjb25kLT5tX3N0
YXJ0KSArIGxlZnROZWlnaGJvci0+c2Vjb25kLT5tX3NpemVJbkJ5dGVzKSA9PSBsZWZ0TmVpZ2hi
b3ItPmZpcnN0KTsKKyAgICAgICAgQVNTRVJUKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50
ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihsZWZ0TmVpZ2hib3ItPnZhbHVlLT5tX3N0YXJ0KSArIGxl
ZnROZWlnaGJvci0+dmFsdWUtPm1fc2l6ZUluQnl0ZXMpID09IGxlZnROZWlnaGJvci0+a2V5KTsK
ICAgICAgICAgCi0gICAgICAgIEZyZWVTcGFjZU5vZGUqIGxlZnROb2RlID0gbGVmdE5laWdoYm9y
LT5zZWNvbmQ7CisgICAgICAgIEZyZWVTcGFjZU5vZGUqIGxlZnROb2RlID0gbGVmdE5laWdoYm9y
LT52YWx1ZTsKICAgICAgICAgCiAgICAgICAgIHZvaWQqIGxlZnRTdGFydCA9IGxlZnROb2RlLT5t
X3N0YXJ0OwogICAgICAgICBzaXplX3QgbGVmdFNpemUgPSBsZWZ0Tm9kZS0+bV9zaXplSW5CeXRl
czsKQEAgLTMyNiwxMCArMzI2LDEwIEBAIHZvaWQgTWV0YUFsbG9jYXRvcjo6YWRkRnJlZVNwYWNl
KHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMpCiAgICAgICAgICAgICAvLyBGcmVlaW5n
IHNvbWV0aGluZyBpbiB0aGUgbWlkZGxlIG9mIGZyZWUgYmxvY2tzLiBDb2FsZXNjZSBib3RoIGxl
ZnQgYW5kCiAgICAgICAgICAgICAvLyByaWdodCwgd2hpbHN0IHJlbW92aW5nIHRoZSByaWdodCBu
ZWlnaGJvciBmcm9tIHRoZSBtYXBzLgogICAgICAgICAgICAgCi0gICAgICAgICAgICBBU1NFUlQo
cmlnaHROZWlnaGJvci0+c2Vjb25kLT5tX3N0YXJ0ID09IHJpZ2h0TmVpZ2hib3ItPmZpcnN0KTsK
KyAgICAgICAgICAgIEFTU0VSVChyaWdodE5laWdoYm9yLT52YWx1ZS0+bV9zdGFydCA9PSByaWdo
dE5laWdoYm9yLT5rZXkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBGcmVlU3BhY2VOb2Rl
KiByaWdodE5vZGUgPSByaWdodE5laWdoYm9yLT5zZWNvbmQ7Ci0gICAgICAgICAgICB2b2lkKiBy
aWdodFN0YXJ0ID0gcmlnaHROZWlnaGJvci0+Zmlyc3Q7CisgICAgICAgICAgICBGcmVlU3BhY2VO
b2RlKiByaWdodE5vZGUgPSByaWdodE5laWdoYm9yLT52YWx1ZTsKKyAgICAgICAgICAgIHZvaWQq
IHJpZ2h0U3RhcnQgPSByaWdodE5laWdoYm9yLT5rZXk7CiAgICAgICAgICAgICBzaXplX3Qgcmln
aHRTaXplID0gcmlnaHROb2RlLT5tX3NpemVJbkJ5dGVzOwogICAgICAgICAgICAgdm9pZCogcmln
aHRFbmQgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJf
dD4ocmlnaHRTdGFydCkgKyByaWdodFNpemUpOwogICAgICAgICAgICAgCkBAIC0zNTYsOCArMzU2
LDggQEAgdm9pZCBNZXRhQWxsb2NhdG9yOjphZGRGcmVlU3BhY2Uodm9pZCogc3RhcnQsIHNpemVf
dCBzaXplSW5CeXRlcykKICAgICAgICAgLy8gQ2Fubm90IGNvYWxlc2NlIHdpdGggbGVmdDsgdHJ5
IHRvIHNlZSBpZiB3ZSBjYW4gY29hbGVzY2Ugd2l0aCByaWdodC4KICAgICAgICAgCiAgICAgICAg
IGlmIChyaWdodE5laWdoYm9yICE9IG1fZnJlZVNwYWNlU3RhcnRBZGRyZXNzTWFwLmVuZCgpKSB7
Ci0gICAgICAgICAgICBGcmVlU3BhY2VOb2RlKiByaWdodE5vZGUgPSByaWdodE5laWdoYm9yLT5z
ZWNvbmQ7Ci0gICAgICAgICAgICB2b2lkKiByaWdodFN0YXJ0ID0gcmlnaHROZWlnaGJvci0+Zmly
c3Q7CisgICAgICAgICAgICBGcmVlU3BhY2VOb2RlKiByaWdodE5vZGUgPSByaWdodE5laWdoYm9y
LT52YWx1ZTsKKyAgICAgICAgICAgIHZvaWQqIHJpZ2h0U3RhcnQgPSByaWdodE5laWdoYm9yLT5r
ZXk7CiAgICAgICAgICAgICBzaXplX3QgcmlnaHRTaXplID0gcmlnaHROb2RlLT5tX3NpemVJbkJ5
dGVzOwogICAgICAgICAgICAgdm9pZCogcmlnaHRFbmQgPSByZWludGVycHJldF9jYXN0PHZvaWQq
PihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocmlnaHRTdGFydCkgKyByaWdodFNpemUpOwog
ICAgICAgICAgICAgCkBAIC00MDMsNyArNDAzLDcgQEAgdm9pZCBNZXRhQWxsb2NhdG9yOjppbmNy
ZW1lbnRQYWdlT2NjdXBhbmN5KHZvaWQqIGFkZHJlc3MsIHNpemVfdCBzaXplSW5CeXRlcykKICAg
ICAgICAgICAgIG1fYnl0ZXNDb21taXR0ZWQgKz0gbV9wYWdlU2l6ZTsKICAgICAgICAgICAgIG5v
dGlmeU5lZWRQYWdlKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHBhZ2UgPDwgbV9sb2dQYWdlU2l6
ZSkpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGl0ZXItPnNlY29uZCsrOworICAgICAg
ICAgICAgaXRlci0+dmFsdWUrKzsKICAgICB9CiB9CiAKQEAgLTQxNSw3ICs0MTUsNyBAQCB2b2lk
IE1ldGFBbGxvY2F0b3I6OmRlY3JlbWVudFBhZ2VPY2N1cGFuY3kodm9pZCogYWRkcmVzcywgc2l6
ZV90IHNpemVJbkJ5dGVzKQogICAgIGZvciAodWludHB0cl90IHBhZ2UgPSBmaXJzdFBhZ2U7IHBh
Z2UgPD0gbGFzdFBhZ2U7ICsrcGFnZSkgewogICAgICAgICBIYXNoTWFwPHVpbnRwdHJfdCwgc2l6
ZV90Pjo6aXRlcmF0b3IgaXRlciA9IG1fcGFnZU9jY3VwYW5jeU1hcC5maW5kKHBhZ2UpOwogICAg
ICAgICBBU1NFUlQoaXRlciAhPSBtX3BhZ2VPY2N1cGFuY3lNYXAuZW5kKCkpOwotICAgICAgICBp
ZiAoIS0tKGl0ZXItPnNlY29uZCkpIHsKKyAgICAgICAgaWYgKCEtLShpdGVyLT52YWx1ZSkpIHsK
ICAgICAgICAgICAgIG1fcGFnZU9jY3VwYW5jeU1hcC5yZW1vdmUoaXRlcik7CiAgICAgICAgICAg
ICBtX2J5dGVzQ29tbWl0dGVkIC09IG1fcGFnZVNpemU7CiAgICAgICAgICAgICBub3RpZnlQYWdl
SXNGcmVlKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHBhZ2UgPDwgbV9sb2dQYWdlU2l6ZSkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUmVmQ291bnRlZExlYWtDb3VudGVyLmNwcCBiL1Nv
dXJjZS9XVEYvd3RmL1JlZkNvdW50ZWRMZWFrQ291bnRlci5jcHAKaW5kZXggNjcwZjJhMGNlYzU5
OWM2ZDRmMzE2NDRlYmViNTg3NDE1ZWY0MzIxYS4uNGEwNDUyODI0ODlmZTk1YTE3ZTIzOTE5Nzcz
ZDM3Y2IyNDQxMGJlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUmVmQ291bnRlZExlYWtD
b3VudGVyLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9SZWZDb3VudGVkTGVha0NvdW50ZXIuY3Bw
CkBAIC03MSw3ICs3MSw3IEBAIFJlZkNvdW50ZWRMZWFrQ291bnRlcjo6flJlZkNvdW50ZWRMZWFr
Q291bnRlcigpCiAgICAgICAgICAgICBMT0coUmVmQ291bnRlZExlYWtzLCAiTEVBSzogJXUgJXMi
LCBtX2NvdW50LCBtX2Rlc2NyaXB0aW9uKTsKICAgICAgICAgZWxzZSBpZiAoIWxvZ2dlZFN1cHBy
ZXNzaW9uUmVhc29uKSB7CiAgICAgICAgICAgICAvLyBUaGlzIGxvZ3Mgb25seSBvbmUgcmVhc29u
LiBMYXRlciB3ZSBjb3VsZCBjaGFuZ2UgaXQgc28gd2UgbG9nIGFsbCB0aGUgcmVhc29ucy4KLSAg
ICAgICAgICAgIExPRyhSZWZDb3VudGVkTGVha3MsICJObyBsZWFrIGNoZWNraW5nIGRvbmU6ICVz
IiwgbGVha01lc3NhZ2VTdXBwcmVzc2lvblJlYXNvbnMtPmJlZ2luKCktPmZpcnN0KTsKKyAgICAg
ICAgICAgIExPRyhSZWZDb3VudGVkTGVha3MsICJObyBsZWFrIGNoZWNraW5nIGRvbmU6ICVzIiwg
bGVha01lc3NhZ2VTdXBwcmVzc2lvblJlYXNvbnMtPmJlZ2luKCktPmtleSk7CiAgICAgICAgICAg
ICBsb2dnZWRTdXBwcmVzc2lvblJlYXNvbiA9IHRydWU7CiAgICAgICAgIH0KICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9SZWZQdHJIYXNoTWFwLmggYi9Tb3VyY2UvV1RGL3d0Zi9S
ZWZQdHJIYXNoTWFwLmgKaW5kZXggNWZhZTkwZThjZDQ3MTEyOWU4OWRjYzhlN2FlNjYzOGFkYTE1
NGQzMS4uOTU0MTgzN2UyYTZmMjliOWYwNmMzYzk1NjJhMTMzNDZiMDFkNGNlMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi93dGYvUmVmUHRySGFzaE1hcC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1Jl
ZlB0ckhhc2hNYXAuaApAQCAtMjE2LDcgKzIxNiw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAg
ICBBZGRSZXN1bHQgcmVzdWx0ID0gaW5saW5lQWRkKGtleSwgbWFwcGVkKTsKICAgICAgICAgaWYg
KCFyZXN1bHQuaXNOZXdFbnRyeSkgewogICAgICAgICAgICAgLy8gVGhlIGlubGluZUFkZCBjYWxs
IGFib3ZlIGZvdW5kIGFuIGV4aXN0aW5nIGhhc2ggdGFibGUgZW50cnk7IHdlIG5lZWQgdG8gc2V0
IHRoZSBtYXBwZWQgdmFsdWUuCi0gICAgICAgICAgICBNYXBwZWRUcmFpdHM6OnN0b3JlKG1hcHBl
ZCwgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOworICAgICAgICAgICAgTWFwcGVkVHJhaXRzOjpz
dG9yZShtYXBwZWQsIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwogICAgICAgICB9CiAgICAgICAg
IHJldHVybiByZXN1bHQ7CiAgICAgfQpAQCAtMjI4LDcgKzIyOCw3IEBAIG5hbWVzcGFjZSBXVEYg
ewogICAgICAgICBBZGRSZXN1bHQgcmVzdWx0ID0gaW5saW5lQWRkKGtleSwgbWFwcGVkKTsKICAg
ICAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkgewogICAgICAgICAgICAgLy8gVGhlIGlubGlu
ZUFkZCBjYWxsIGFib3ZlIGZvdW5kIGFuIGV4aXN0aW5nIGhhc2ggdGFibGUgZW50cnk7IHdlIG5l
ZWQgdG8gc2V0IHRoZSBtYXBwZWQgdmFsdWUuCi0gICAgICAgICAgICBNYXBwZWRUcmFpdHM6OnN0
b3JlKG1hcHBlZCwgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOworICAgICAgICAgICAgTWFwcGVk
VHJhaXRzOjpzdG9yZShtYXBwZWQsIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwogICAgICAgICB9
CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpAQCAtMjU0LDcgKzI1NCw3IEBAIG5hbWVz
cGFjZSBXVEYgewogICAgICAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gY29uc3RfY2FzdDxIYXNoVGFi
bGVUeXBlJj4obV9pbXBsKS5sb29rdXAoa2V5KTsKICAgICAgICAgaWYgKCFlbnRyeSkKICAgICAg
ICAgICAgIHJldHVybiBNYXBwZWRUcmFpdHM6OnBlZWsoTWFwcGVkVHJhaXRzOjplbXB0eVZhbHVl
KCkpOwotICAgICAgICByZXR1cm4gTWFwcGVkVHJhaXRzOjpwZWVrKGVudHJ5LT5zZWNvbmQpOwor
ICAgICAgICByZXR1cm4gTWFwcGVkVHJhaXRzOjpwZWVrKGVudHJ5LT52YWx1ZSk7CiAgICAgfQog
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5h
bWUgVywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzPgpAQCAtMjY0LDcgKzI2NCw3IEBAIG5hbWVzcGFj
ZSBXVEYgewogICAgICAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gY29uc3RfY2FzdDxIYXNoVGFibGVU
eXBlJj4obV9pbXBsKS50ZW1wbGF0ZSBsb29rdXA8VHJhbnNsYXRvcj4oa2V5KTsKICAgICAgICAg
aWYgKCFlbnRyeSkKICAgICAgICAgICAgIHJldHVybiBNYXBwZWRUcmFpdHM6OnBlZWsoTWFwcGVk
VHJhaXRzOjplbXB0eVZhbHVlKCkpOwotICAgICAgICByZXR1cm4gTWFwcGVkVHJhaXRzOjpwZWVr
KGVudHJ5LT5zZWNvbmQpOworICAgICAgICByZXR1cm4gTWFwcGVkVHJhaXRzOjpwZWVrKGVudHJ5
LT52YWx1ZSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwg
dHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzPgpAQCAtMzA4LDcg
KzMwOCw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBpdGVyYXRvciBpdCA9IGZpbmQoa2V5
KTsKICAgICAgICAgaWYgKGl0ID09IGVuZCgpKQogICAgICAgICAgICAgcmV0dXJuIE1hcHBlZFRy
YWl0czo6cGFzc091dChNYXBwZWRUcmFpdHM6OmVtcHR5VmFsdWUoKSk7Ci0gICAgICAgIE1hcHBl
ZFBhc3NPdXRUeXBlIHJlc3VsdCA9IE1hcHBlZFRyYWl0czo6cGFzc091dChpdC0+c2Vjb25kKTsK
KyAgICAgICAgTWFwcGVkUGFzc091dFR5cGUgcmVzdWx0ID0gTWFwcGVkVHJhaXRzOjpwYXNzT3V0
KGl0LT52YWx1ZSk7CiAgICAgICAgIHJlbW92ZShpdCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgfQpAQCAtMzIwLDcgKzMyMCw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBpdGVy
YXRvciBpdCA9IGZpbmQoa2V5KTsKICAgICAgICAgaWYgKGl0ID09IGVuZCgpKQogICAgICAgICAg
ICAgcmV0dXJuIE1hcHBlZFRyYWl0czo6cGFzc091dChNYXBwZWRUcmFpdHM6OmVtcHR5VmFsdWUo
KSk7Ci0gICAgICAgIE1hcHBlZFBhc3NPdXRUeXBlIHJlc3VsdCA9IE1hcHBlZFRyYWl0czo6cGFz
c091dChpdC0+c2Vjb25kKTsKKyAgICAgICAgTWFwcGVkUGFzc091dFR5cGUgcmVzdWx0ID0gTWFw
cGVkVHJhaXRzOjpwYXNzT3V0KGl0LT52YWx1ZSk7CiAgICAgICAgIHJlbW92ZShpdCk7CiAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvU3Bl
Y3RydW0uaCBiL1NvdXJjZS9XVEYvd3RmL1NwZWN0cnVtLmgKaW5kZXggNWU3YTQ4NGNkODc2NmJj
YWYyMmNhNGM5M2RkY2U5NzBkZDJiYTIxMy4uM2U2ZmE0YTYzM2ZhZDQyZGViNGRjNDgzMzI1OTIz
NDFlODRiM2EwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvU3BlY3RydW0uaAorKysgYi9T
b3VyY2UvV1RGL3d0Zi9TcGVjdHJ1bS5oCkBAIC00NCw3ICs0NCw3IEBAIHB1YmxpYzoKICAgICB7
CiAgICAgICAgIHR5cGVuYW1lIEhhc2hNYXA8VCwgdW5zaWduZWQgbG9uZz46OkFkZFJlc3VsdCBy
ZXN1bHQgPSBtX21hcC5hZGQoa2V5LCBjb3VudCk7CiAgICAgICAgIGlmICghcmVzdWx0LmlzTmV3
RW50cnkpCi0gICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCArPSBjb3VudDsKKyAg
ICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgKz0gY291bnQ7CiAgICAgfQogICAgIAog
ICAgIHVuc2lnbmVkIGxvbmcgZ2V0KGNvbnN0IFQmIGtleSkgY29uc3QKQEAgLTUyLDcgKzUyLDcg
QEAgcHVibGljOgogICAgICAgICBjb25zdF9pdGVyYXRvciBpdGVyID0gbV9tYXAuZmluZChrZXkp
OwogICAgICAgICBpZiAoaXRlciA9PSBtX21hcC5lbmQoKSkKICAgICAgICAgICAgIHJldHVybiAw
OwotICAgICAgICByZXR1cm4gaXRlci0+c2Vjb25kOworICAgICAgICByZXR1cm4gaXRlci0+dmFs
dWU7CiAgICAgfQogICAgIAogICAgIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gbV9tYXAuYmVn
aW4oKTsgfQpAQCAtODgsNyArODgsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBWZWN0b3I8
S2V5QW5kQ291bnQ+IGxpc3Q7CiAgICAgICAgIGZvciAoY29uc3RfaXRlcmF0b3IgaXRlciA9IGJl
Z2luKCk7IGl0ZXIgIT0gZW5kKCk7ICsraXRlcikKLSAgICAgICAgICAgIGxpc3QuYXBwZW5kKEtl
eUFuZENvdW50KGl0ZXItPmZpcnN0LCBpdGVyLT5zZWNvbmQpKTsKKyAgICAgICAgICAgIGxpc3Qu
YXBwZW5kKEtleUFuZENvdW50KGl0ZXItPmtleSwgaXRlci0+dmFsdWUpKTsKICAgICAgICAgCiAg
ICAgICAgIHN0ZDo6c29ydChsaXN0LmJlZ2luKCksIGxpc3QuZW5kKCkpOwogICAgICAgICByZXR1
cm4gbGlzdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNw
cCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcAppbmRleCAyMjZlY2JkNDhj
MDI5ODc5ZDExYzk1MjNkNTA1MzQ0ZTU2ODBmODU5Li5kZGMzM2I0YWNmOTJhNWM2NDc3ZmIyMzM4
NjIyOGRjZWExNzA4MzJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdQdGhy
ZWFkcy5jcHAKKysrIGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwCkBAIC0x
NTAsOCArMTUwLDggQEAgc3RhdGljIFRocmVhZElkZW50aWZpZXIgaWRlbnRpZmllckJ5UHRocmVh
ZEhhbmRsZShjb25zdCBwdGhyZWFkX3QmIHB0aHJlYWRIYW5kbGUKIAogICAgIFRocmVhZE1hcDo6
aXRlcmF0b3IgaSA9IHRocmVhZE1hcCgpLmJlZ2luKCk7CiAgICAgZm9yICg7IGkgIT0gdGhyZWFk
TWFwKCkuZW5kKCk7ICsraSkgewotICAgICAgICBpZiAocHRocmVhZF9lcXVhbChpLT5zZWNvbmQt
PnB0aHJlYWRIYW5kbGUoKSwgcHRocmVhZEhhbmRsZSkgJiYgIWktPnNlY29uZC0+aGFzRXhpdGVk
KCkpCi0gICAgICAgICAgICByZXR1cm4gaS0+Zmlyc3Q7CisgICAgICAgIGlmIChwdGhyZWFkX2Vx
dWFsKGktPnZhbHVlLT5wdGhyZWFkSGFuZGxlKCksIHB0aHJlYWRIYW5kbGUpICYmICFpLT52YWx1
ZS0+aGFzRXhpdGVkKCkpCisgICAgICAgICAgICByZXR1cm4gaS0+a2V5OwogICAgIH0KIAogICAg
IHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlv
bi9HZW9sb2NhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL0dl
b2xvY2F0aW9uLmNwcAppbmRleCA1N2NhZjMxNTJhY2M4OWQ2OTdhYThmNjQ1Y2M4ZjAxMzU5YmNi
MTUyLi5hM2VmNDAyNmRkMDk5YWFjNzEwNjQ2NDk0YmRjZDViOTY4NTVkYTNkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uLmNwcApAQCAt
MTkyLDcgKzE5Miw3IEBAIEdlb2xvY2F0aW9uOjpHZW9Ob3RpZmllciogR2VvbG9jYXRpb246Oldh
dGNoZXJzOjpmaW5kKGludCBpZCkKICAgICBJZFRvTm90aWZpZXJNYXA6Oml0ZXJhdG9yIGl0ZXIg
PSBtX2lkVG9Ob3RpZmllck1hcC5maW5kKGlkKTsKICAgICBpZiAoaXRlciA9PSBtX2lkVG9Ob3Rp
Zmllck1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGl0ZXItPnNlY29u
ZC5nZXQoKTsKKyAgICByZXR1cm4gaXRlci0+dmFsdWUuZ2V0KCk7CiB9CiAKIHZvaWQgR2VvbG9j
YXRpb246OldhdGNoZXJzOjpyZW1vdmUoaW50IGlkKQpAQCAtMjAxLDcgKzIwMSw3IEBAIHZvaWQg
R2VvbG9jYXRpb246OldhdGNoZXJzOjpyZW1vdmUoaW50IGlkKQogICAgIElkVG9Ob3RpZmllck1h
cDo6aXRlcmF0b3IgaXRlciA9IG1faWRUb05vdGlmaWVyTWFwLmZpbmQoaWQpOwogICAgIGlmIChp
dGVyID09IG1faWRUb05vdGlmaWVyTWFwLmVuZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgbV9u
b3RpZmllclRvSWRNYXAucmVtb3ZlKGl0ZXItPnNlY29uZCk7CisgICAgbV9ub3RpZmllclRvSWRN
YXAucmVtb3ZlKGl0ZXItPnZhbHVlKTsKICAgICBtX2lkVG9Ob3RpZmllck1hcC5yZW1vdmUoaXRl
cik7CiB9CiAKQEAgLTIxMCw3ICsyMTAsNyBAQCB2b2lkIEdlb2xvY2F0aW9uOjpXYXRjaGVyczo6
cmVtb3ZlKEdlb05vdGlmaWVyKiBub3RpZmllcikKICAgICBOb3RpZmllclRvSWRNYXA6Oml0ZXJh
dG9yIGl0ZXIgPSBtX25vdGlmaWVyVG9JZE1hcC5maW5kKG5vdGlmaWVyKTsKICAgICBpZiAoaXRl
ciA9PSBtX25vdGlmaWVyVG9JZE1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIG1faWRU
b05vdGlmaWVyTWFwLnJlbW92ZShpdGVyLT5zZWNvbmQpOworICAgIG1faWRUb05vdGlmaWVyTWFw
LnJlbW92ZShpdGVyLT52YWx1ZSk7CiAgICAgbV9ub3RpZmllclRvSWRNYXAucmVtb3ZlKGl0ZXIp
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJE
YXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFz
ZS5jcHAKaW5kZXggYWE5M2U2YTgyYzc1NDhjOThiMTk5NDI1YWEwMGIyY2VjMzllODg5My4uODEx
Y2Y0YTJmNjk3N2Y4MzJhZjMxYThjMjA3MDI2OTE5NzA2YmIxMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcApAQCAtMTA4LDcgKzEwOCw3
IEBAIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gSURCRGF0YWJhc2U6Om9iamVjdFN0b3JlTmFt
ZXMoKSBjb25zdAogewogICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiBvYmplY3RTdG9yZU5hbWVz
ID0gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7CiAgICAgZm9yIChJREJEYXRhYmFzZU1ldGFkYXRh
OjpPYmplY3RTdG9yZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX21ldGFkYXRhLm9iamVjdFN0
b3Jlcy5iZWdpbigpOyBpdCAhPSBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5lbmQoKTsgKytpdCkK
LSAgICAgICAgb2JqZWN0U3RvcmVOYW1lcy0+YXBwZW5kKGl0LT5maXJzdCk7CisgICAgICAgIG9i
amVjdFN0b3JlTmFtZXMtPmFwcGVuZChpdC0+a2V5KTsKICAgICBvYmplY3RTdG9yZU5hbWVzLT5z
b3J0KCk7CiAgICAgcmV0dXJuIG9iamVjdFN0b3JlTmFtZXMucmVsZWFzZSgpOwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5k
SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJh
Y2tlbmRJbXBsLmNwcAppbmRleCA4MTEwYzI0YzEzYjNjNDYzZWUzN2IyMGQ0Y2ZmYTcxMjQyNDRi
NjM5Li43NTM4MDdmZDhlODdmZjY0NDVjNTYxNWJhNTg1MjUxZDFkOThkODRiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBs
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJh
Y2tlbmRJbXBsLmNwcApAQCAtMTU5LDcgKzE1OSw3IEBAIElEQkRhdGFiYXNlTWV0YWRhdGEgSURC
RGF0YWJhc2VCYWNrZW5kSW1wbDo6bWV0YWRhdGEoKSBjb25zdAogewogICAgIElEQkRhdGFiYXNl
TWV0YWRhdGEgbWV0YWRhdGEobV9uYW1lLCBtX3ZlcnNpb24sIG1faW50VmVyc2lvbik7CiAgICAg
Zm9yIChPYmplY3RTdG9yZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX29iamVjdFN0b3Jlcy5i
ZWdpbigpOyBpdCAhPSBtX29iamVjdFN0b3Jlcy5lbmQoKTsgKytpdCkKLSAgICAgICAgbWV0YWRh
dGEub2JqZWN0U3RvcmVzLnNldChpdC0+Zmlyc3QsIGl0LT5zZWNvbmQtPm1ldGFkYXRhKCkpOwor
ICAgICAgICBtZXRhZGF0YS5vYmplY3RTdG9yZXMuc2V0KGl0LT5rZXksIGl0LT52YWx1ZS0+bWV0
YWRhdGEoKSk7CiAgICAgcmV0dXJuIG1ldGFkYXRhOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcApp
bmRleCA4ZGE1YzAyZTQyM2Y2ZjY0ZTU3OTczMGRiNzNmYTI5ZWMyYmU0NjA2Li4xNjA2NjljZDI2
YTk4NTMwZGM0ODNjNzA5ODUxNGE0NmMzODdhMjUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKQEAg
LTEwNyw3ICsxMDcsNyBAQCB2b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6ZGVsZXRlRGF0YWJh
c2UoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbAogICAgIGlmIChpdCAhPSBt
X2RhdGFiYXNlQmFja2VuZE1hcC5lbmQoKSkgewogICAgICAgICAvLyBJZiB0aGVyZSBhcmUgYW55
IGNvbm5lY3Rpb25zIHRvIHRoZSBkYXRhYmFzZSwgZGlyZWN0bHkgZGVsZXRlIHRoZQogICAgICAg
ICAvLyBkYXRhYmFzZS4KLSAgICAgICAgaXQtPnNlY29uZC0+ZGVsZXRlRGF0YWJhc2UoY2FsbGJh
Y2tzKTsKKyAgICAgICAgaXQtPnZhbHVlLT5kZWxldGVEYXRhYmFzZShjYWxsYmFja3MpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xMzQsNyArMTM0LDcgQEAgUGFzc1JlZlB0cjxJREJC
YWNraW5nU3RvcmU+IElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6b3BlbkJhY2tpbmdTdG9yZShQYXNz
UmVmUHRyPFMKICAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmU7CiAgICAg
SURCQmFja2luZ1N0b3JlTWFwOjppdGVyYXRvciBpdDIgPSBtX2JhY2tpbmdTdG9yZU1hcC5maW5k
KGZpbGVJZGVudGlmaWVyKTsKICAgICBpZiAoaXQyICE9IG1fYmFja2luZ1N0b3JlTWFwLmVuZCgp
KQotICAgICAgICBiYWNraW5nU3RvcmUgPSBpdDItPnNlY29uZDsKKyAgICAgICAgYmFja2luZ1N0
b3JlID0gaXQyLT52YWx1ZTsKICAgICBlbHNlIHsKICNpZiBVU0UoTEVWRUxEQikKICAgICAgICAg
YmFja2luZ1N0b3JlID0gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbihzZWN1cml0eU9yaWdp
bi5nZXQoKSwgZGF0YURpcmVjdG9yeSwgZmlsZUlkZW50aWZpZXIsIHRoaXMpOwpAQCAtMTcyLDcg
KzE3Miw3IEBAIHZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuKGNvbnN0IFN0cmluZyYg
bmFtZSwgaW50NjRfdCB2ZXJzaW9uLCBQYXNzUmVmUHRyCiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KICAgICB9IGVsc2UKLSAgICAgICAgZGF0YWJhc2VCYWNrZW5kID0gaXQtPnNlY29u
ZDsKKyAgICAgICAgZGF0YWJhc2VCYWNrZW5kID0gaXQtPnZhbHVlOwogCiAgICAgaWYgKHZlcnNp
b24gPT0gSURCRGF0YWJhc2VNZXRhZGF0YTo6Tm9JbnRWZXJzaW9uKQogICAgICAgICBkYXRhYmFz
ZUJhY2tlbmQtPm9wZW5Db25uZWN0aW9uKGNhbGxiYWNrcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKaW5kZXggYzMwYTI1M2E0
MDY1M2U4OTZiMjRkM2Y3NThkN2NhNTg5MzYxMjg4Yy4uMGJmZGY5MWVmMDNkNTQ0NzY4NDIzNzUz
ZGFhYTMyYTVkMGRlODdiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcApAQCAtNjYsNyArNjYsNyBAQCBQYXNzUmVmUHRyPERP
TVN0cmluZ0xpc3Q+IElEQk9iamVjdFN0b3JlOjppbmRleE5hbWVzKCkgY29uc3QKICAgICBJREJf
VFJBQ0UoIklEQk9iamVjdFN0b3JlOjppbmRleE5hbWVzIik7CiAgICAgUmVmUHRyPERPTVN0cmlu
Z0xpc3Q+IGluZGV4TmFtZXMgPSBET01TdHJpbmdMaXN0OjpjcmVhdGUoKTsKICAgICBmb3IgKElE
Qk9iamVjdFN0b3JlTWV0YWRhdGE6OkluZGV4TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fbWV0
YWRhdGEuaW5kZXhlcy5iZWdpbigpOyBpdCAhPSBtX21ldGFkYXRhLmluZGV4ZXMuZW5kKCk7ICsr
aXQpCi0gICAgICAgIGluZGV4TmFtZXMtPmFwcGVuZChpdC0+Zmlyc3QpOworICAgICAgICBpbmRl
eE5hbWVzLT5hcHBlbmQoaXQtPmtleSk7CiAgICAgaW5kZXhOYW1lcy0+c29ydCgpOwogICAgIHJl
dHVybiBpbmRleE5hbWVzLnJlbGVhc2UoKTsKIH0KQEAgLTIwNiw4ICsyMDYsOCBAQCBQYXNzUmVm
UHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpwdXQoSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW50ZXJmYWNlOjpQdXRNbwogICAgIFZlY3RvcjxJbmRleEtleXM+IGluZGV4S2V5czsKICAgICBm
b3IgKElEQk9iamVjdFN0b3JlTWV0YWRhdGE6OkluZGV4TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9
IG1fbWV0YWRhdGEuaW5kZXhlcy5iZWdpbigpOyBpdCAhPSBtX21ldGFkYXRhLmluZGV4ZXMuZW5k
KCk7ICsraXQpIHsKICAgICAgICAgSW5kZXhLZXlzIGtleXM7Ci0gICAgICAgIGdlbmVyYXRlSW5k
ZXhLZXlzRm9yVmFsdWUoaXQtPnNlY29uZCwgdmFsdWUsICZrZXlzKTsKLSAgICAgICAgaW5kZXhO
YW1lcy5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgZ2VuZXJhdGVJbmRleEtleXNGb3JWYWx1
ZShpdC0+dmFsdWUsIHZhbHVlLCAma2V5cyk7CisgICAgICAgIGluZGV4TmFtZXMuYXBwZW5kKGl0
LT5rZXkpOwogICAgICAgICBpbmRleEtleXMuYXBwZW5kKGtleXMpOwogICAgIH0KICAgICBBU1NF
UlQoaW5kZXhLZXlzLnNpemUoKSA9PSBpbmRleE5hbWVzLnNpemUoKSk7CkBAIC00NDgsNyArNDQ4
LDcgQEAgUGFzc1JlZlB0cjxJREJJbmRleD4gSURCT2JqZWN0U3RvcmU6OmluZGV4KGNvbnN0IFN0
cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMKIAogICAgIElEQkluZGV4TWFwOjppdGVyYXRv
ciBpdCA9IG1faW5kZXhNYXAuZmluZChuYW1lKTsKICAgICBpZiAoaXQgIT0gbV9pbmRleE1hcC5l
bmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBpdC0+dmFs
dWU7CiAKICAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBpbmRleEJhY2tlbmQg
PSBtX2JhY2tlbmQtPmluZGV4KG5hbWUsIGVjKTsKICAgICBBU1NFUlQoIWluZGV4QmFja2VuZCAh
PSAhZWMpOyAvLyBJZiB3ZSBkaWRuJ3QgZ2V0IGFuIGluZGV4LCB3ZSBzaG91bGQgaGF2ZSBnb3R0
ZW4gYW4gZXhjZXB0aW9uIGNvZGUuIEFuZCB2aWNlIHZlcnNhLgpAQCAtNDU4LDcgKzQ1OCw3IEBA
IFBhc3NSZWZQdHI8SURCSW5kZXg+IElEQk9iamVjdFN0b3JlOjppbmRleChjb25zdCBTdHJpbmcm
IG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjCiAgICAgSURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6SW5k
ZXhNYXA6OmNvbnN0X2l0ZXJhdG9yIG1kaXQgPSBtX21ldGFkYXRhLmluZGV4ZXMuZmluZChuYW1l
KTsKICAgICBBU1NFUlQobWRpdCAhPSBtX21ldGFkYXRhLmluZGV4ZXMuZW5kKCkpOwogCi0gICAg
UmVmUHRyPElEQkluZGV4PiBpbmRleCA9IElEQkluZGV4OjpjcmVhdGUobWRpdC0+c2Vjb25kLCBp
bmRleEJhY2tlbmQucmVsZWFzZSgpLCB0aGlzLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKKyAgICBS
ZWZQdHI8SURCSW5kZXg+IGluZGV4ID0gSURCSW5kZXg6OmNyZWF0ZShtZGl0LT52YWx1ZSwgaW5k
ZXhCYWNrZW5kLnJlbGVhc2UoKSwgdGhpcywgbV90cmFuc2FjdGlvbi5nZXQoKSk7CiAgICAgbV9p
bmRleE1hcC5zZXQobmFtZSwgaW5kZXgpOwogICAgIHJldHVybiBpbmRleC5yZWxlYXNlKCk7CiB9
CkBAIC00ODIsNyArNDgyLDcgQEAgdm9pZCBJREJPYmplY3RTdG9yZTo6ZGVsZXRlSW5kZXgoY29u
c3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICBpZiAoIWVjKSB7CiAgICAg
ICAgIElEQkluZGV4TWFwOjppdGVyYXRvciBpdCA9IG1faW5kZXhNYXAuZmluZChuYW1lKTsKICAg
ICAgICAgaWYgKGl0ICE9IG1faW5kZXhNYXAuZW5kKCkpIHsKLSAgICAgICAgICAgIGl0LT5zZWNv
bmQtPm1hcmtEZWxldGVkKCk7CisgICAgICAgICAgICBpdC0+dmFsdWUtPm1hcmtEZWxldGVkKCk7
CiAgICAgICAgICAgICBtX2luZGV4TWFwLnJlbW92ZShuYW1lKTsKICAgICAgICAgfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVj
dFN0b3JlQmFja2VuZEltcGwuY3BwCmluZGV4IGI2ZDBlYTBhNTBkZTIwZGRlYWM1MTVmNjRmNmQ4
NTkzYTY3MjQzZmEuLjBlYjQ4MDQ4MzgxZmI3YzdhM2Q2ZWM3YWFkODFhMTk3MWJjNDkwYTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwCkBAIC03NCw3ICs3NCw3IEBAIElEQk9iamVjdFN0
b3JlTWV0YWRhdGEgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6bWV0YWRhdGEoKSBjb25zdAog
ewogICAgIElEQk9iamVjdFN0b3JlTWV0YWRhdGEgbWV0YWRhdGEobV9uYW1lLCBtX2tleVBhdGgs
IG1fYXV0b0luY3JlbWVudCk7CiAgICAgZm9yIChJbmRleE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtX2luZGV4ZXMuYmVnaW4oKTsgaXQgIT0gbV9pbmRleGVzLmVuZCgpOyArK2l0KQotICAgICAg
ICBtZXRhZGF0YS5pbmRleGVzLnNldChpdC0+Zmlyc3QsIGl0LT5zZWNvbmQtPm1ldGFkYXRhKCkp
OworICAgICAgICBtZXRhZGF0YS5pbmRleGVzLnNldChpdC0+a2V5LCBpdC0+dmFsdWUtPm1ldGFk
YXRhKCkpOwogICAgIHJldHVybiBtZXRhZGF0YTsKIH0KIApAQCAtMjMwLDExICsyMzAsMTEgQEAg
c3RhdGljIGJvb2wgbWFrZUluZGV4V3JpdGVycyhJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKiBv
YmplY3RTdG9yZSwgUGFzc1JlZlB0cjwKIAogICAgIGZvciAoSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6SW5kZXhNYXA6Oml0ZXJhdG9yIGl0ID0gb2JqZWN0U3RvcmUtPml0ZXJJbmRleGVzQmVn
aW4oKTsgaXQgIT0gb2JqZWN0U3RvcmUtPml0ZXJJbmRleGVzRW5kKCk7ICsraXQpIHsKIAotICAg
ICAgICBjb25zdCBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4mIGluZGV4ID0gaXQtPnNlY29u
ZDsKKyAgICAgICAgY29uc3QgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+JiBpbmRleCA9IGl0
LT52YWx1ZTsKICAgICAgICAgaWYgKCFpbmRleC0+aGFzVmFsaWRJZCgpKQogICAgICAgICAgICAg
Y29udGludWU7IC8vIFRoZSBpbmRleCBvYmplY3QgaGFzIGJlZW4gY3JlYXRlZCwgYnV0IGRvZXMg
bm90IGV4aXN0IGluIHRoZSBkYXRhYmFzZSB5ZXQuCiAKLSAgICAgICAgSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleXMga2V5cyA9IGluZGV4S2V5TWFwLmdldChpdC0+Zmly
c3QpOworICAgICAgICBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OkluZGV4S2V5cyBr
ZXlzID0gaW5kZXhLZXlNYXAuZ2V0KGl0LT5rZXkpOwogICAgICAgICAvLyBJZiB0aGUgb2JqZWN0
U3RvcmUgaXMgdXNpbmcgYXV0b0luY3JlbWVudCwgdGhlbiBhbnkgaW5kZXhlcyB3aXRoIGFuIGlk
ZW50aWNhbCBrZXlQYXRoIG5lZWQgdG8gYWxzbyB1c2UgdGhlIHByaW1hcnkgKGdlbmVyYXRlZCkg
a2V5IGFzIGEga2V5LgogICAgICAgICBpZiAoa2V5V2FzR2VuZXJhdGVkKSB7CiAgICAgICAgICAg
ICBjb25zdCBJREJLZXlQYXRoJiBpbmRleEtleVBhdGggPSBpbmRleC0+a2V5UGF0aCgpOwpAQCAt
NDA0LDEwICs0MDQsMTAgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJ
bnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlAKICAgICAgICAgICAgIHJl
Y29yZElkZW50aWZpZXIgPSBiYWNraW5nU3RvcmVDdXJzb3ItPm9iamVjdFN0b3JlUmVjb3JkSWRl
bnRpZmllcigpOwogCiAgICAgICAgICAgICBmb3IgKElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6
OkluZGV4TWFwOjppdGVyYXRvciBpdCA9IG9iamVjdFN0b3JlLT5tX2luZGV4ZXMuYmVnaW4oKTsg
aXQgIT0gb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5lbmQoKTsgKytpdCkgewotICAgICAgICAgICAg
ICAgIGlmICghaXQtPnNlY29uZC0+aGFzVmFsaWRJZCgpKQorICAgICAgICAgICAgICAgIGlmICgh
aXQtPnZhbHVlLT5oYXNWYWxpZElkKCkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAv
LyBUaGUgaW5kZXggb2JqZWN0IGhhcyBiZWVuIGNyZWF0ZWQsIGJ1dCBkb2VzIG5vdCBleGlzdCBp
biB0aGUgZGF0YWJhc2UgeWV0LgogCi0gICAgICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gb2Jq
ZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5kZWxldGVJbmRleERhdGFGb3JSZWNvcmQob2JqZWN0
U3RvcmUtPmRhdGFiYXNlSWQoKSwgb2JqZWN0U3RvcmUtPmlkKCksIGl0LT5zZWNvbmQtPmlkKCks
IHJlY29yZElkZW50aWZpZXIuZ2V0KCkpOworICAgICAgICAgICAgICAgIGJvb2wgc3VjY2VzcyA9
IG9iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+ZGVsZXRlSW5kZXhEYXRhRm9yUmVjb3JkKG9i
amVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0b3JlLT5pZCgpLCBpdC0+dmFsdWUtPmlk
KCksIHJlY29yZElkZW50aWZpZXIuZ2V0KCkpOwogICAgICAgICAgICAgICAgIEFTU0VSVF9VTlVT
RUQoc3VjY2Vzcywgc3VjY2Vzcyk7CiAgICAgICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcAppbmRleCAyMWU1ZjMy
OGUzNDU1Mzg5Y2UwODU2NjIwNzBlZWVhMTQ2NTVmNjI4Li5iNTM0Njc3NDFiNDQyN2YxZDZjZDA0
OWY5YTA0NjE5YTA1MzZiMWEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwCkBAIC0xNTEsNyArMTUxLDcgQEAgUGFzc1JlZlB0
cjxJREJPYmplY3RTdG9yZT4gSURCVHJhbnNhY3Rpb246Om9iamVjdFN0b3JlKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgRXhjZXAKIAogICAgIElEQk9iamVjdFN0b3JlTWFwOjppdGVyYXRvciBpdCA9IG1f
b2JqZWN0U3RvcmVNYXAuZmluZChuYW1lKTsKICAgICBpZiAoaXQgIT0gbV9vYmplY3RTdG9yZU1h
cC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBpdC0+
dmFsdWU7CiAKICAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBvYmpl
Y3RTdG9yZUJhY2tlbmQgPSBtX2JhY2tlbmQtPm9iamVjdFN0b3JlKG5hbWUsIGVjKTsKICAgICBB
U1NFUlQoIW9iamVjdFN0b3JlQmFja2VuZCAhPSAhZWMpOyAvLyBJZiB3ZSBkaWRuJ3QgZ2V0IGEg
c3RvcmUsIHdlIHNob3VsZCBoYXZlIGdvdHRlbiBhbiBleGNlcHRpb24gY29kZS4gQW5kIHZpY2Ug
dmVyc2EuCkBAIC0xNjIsNyArMTYyLDcgQEAgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gSURC
VHJhbnNhY3Rpb246Om9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXAKICAgICBJ
REJEYXRhYmFzZU1ldGFkYXRhOjpPYmplY3RTdG9yZU1hcDo6Y29uc3RfaXRlcmF0b3IgbWRpdCA9
IG1ldGFkYXRhLm9iamVjdFN0b3Jlcy5maW5kKG5hbWUpOwogICAgIEFTU0VSVChtZGl0ICE9IG1l
dGFkYXRhLm9iamVjdFN0b3Jlcy5lbmQoKSk7CiAKLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmU+
IG9iamVjdFN0b3JlID0gSURCT2JqZWN0U3RvcmU6OmNyZWF0ZShtZGl0LT5zZWNvbmQsIG9iamVj
dFN0b3JlQmFja2VuZCwgdGhpcyk7CisgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlPiBvYmplY3RT
dG9yZSA9IElEQk9iamVjdFN0b3JlOjpjcmVhdGUobWRpdC0+dmFsdWUsIG9iamVjdFN0b3JlQmFj
a2VuZCwgdGhpcyk7CiAgICAgb2JqZWN0U3RvcmVDcmVhdGVkKG5hbWUsIG9iamVjdFN0b3JlKTsK
ICAgICByZXR1cm4gb2JqZWN0U3RvcmUucmVsZWFzZSgpOwogfQpAQCAtMTgyLDcgKzE4Miw3IEBA
IHZvaWQgSURCVHJhbnNhY3Rpb246Om9iamVjdFN0b3JlRGVsZXRlZChjb25zdCBTdHJpbmcmIG5h
bWUpCiAgICAgQVNTRVJUKGlzVmVyc2lvbkNoYW5nZSgpKTsKICAgICBJREJPYmplY3RTdG9yZU1h
cDo6aXRlcmF0b3IgaXQgPSBtX29iamVjdFN0b3JlTWFwLmZpbmQobmFtZSk7CiAgICAgaWYgKGl0
ICE9IG1fb2JqZWN0U3RvcmVNYXAuZW5kKCkpIHsKLSAgICAgICAgUmVmUHRyPElEQk9iamVjdFN0
b3JlPiBvYmplY3RTdG9yZSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFJlZlB0cjxJREJPYmplY3RT
dG9yZT4gb2JqZWN0U3RvcmUgPSBpdC0+dmFsdWU7CiAgICAgICAgIG1fb2JqZWN0U3RvcmVNYXAu
cmVtb3ZlKG5hbWUpOwogICAgICAgICBvYmplY3RTdG9yZS0+bWFya0RlbGV0ZWQoKTsKICAgICAg
ICAgbV9vYmplY3RTdG9yZUNsZWFudXBNYXAuc2V0KG9iamVjdFN0b3JlLCBvYmplY3RTdG9yZS0+
bWV0YWRhdGEoKSk7CkBAIC0yOTAsNyArMjkwLDcgQEAgdm9pZCBJREJUcmFuc2FjdGlvbjo6b25B
Ym9ydCgpCiAKICAgICBpZiAoaXNWZXJzaW9uQ2hhbmdlKCkpIHsKICAgICAgICAgZm9yIChJREJP
YmplY3RTdG9yZU1ldGFkYXRhTWFwOjppdGVyYXRvciBpdCA9IG1fb2JqZWN0U3RvcmVDbGVhbnVw
TWFwLmJlZ2luKCk7IGl0ICE9IG1fb2JqZWN0U3RvcmVDbGVhbnVwTWFwLmVuZCgpOyArK2l0KQot
ICAgICAgICAgICAgaXQtPmZpcnN0LT5zZXRNZXRhZGF0YShpdC0+c2Vjb25kKTsKKyAgICAgICAg
ICAgIGl0LT5rZXktPnNldE1ldGFkYXRhKGl0LT52YWx1ZSk7CiAgICAgfQogICAgIG1fb2JqZWN0
U3RvcmVDbGVhbnVwTWFwLmNsZWFyKCk7CiAgICAgY2xvc2VPcGVuQ3Vyc29ycygpOwpAQCAtMzc4
LDcgKzM3OCw3IEBAIGJvb2wgSURCVHJhbnNhY3Rpb246OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0
cjxFdmVudD4gZXZlbnQpCiAKICAgICAvLyBCcmVhayByZWZlcmVuY2UgY3ljbGVzLgogICAgIGZv
ciAoSURCT2JqZWN0U3RvcmVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9vYmplY3RTdG9yZU1hcC5iZWdp
bigpOyBpdCAhPSBtX29iamVjdFN0b3JlTWFwLmVuZCgpOyArK2l0KQotICAgICAgICBpdC0+c2Vj
b25kLT50cmFuc2FjdGlvbkZpbmlzaGVkKCk7CisgICAgICAgIGl0LT52YWx1ZS0+dHJhbnNhY3Rp
b25GaW5pc2hlZCgpOwogICAgIG1fb2JqZWN0U3RvcmVNYXAuY2xlYXIoKTsKIAogICAgIFZlY3Rv
cjxSZWZQdHI8RXZlbnRUYXJnZXQ+ID4gdGFyZ2V0czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvQWJzdHJhY3REYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Fic3RyYWN0RGF0YWJhc2UuY3BwCmluZGV4IGM3NTM5
YzZlMTEyYjllMWU2YmYxZTJjZDNmMDJhZTBjYmEyYmVhMjYuLjYyOTA3ZTNlMWNlNmIwOTE1YzJi
MDM0NzYwOWU1MDdlOGMwMWNlYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZGF0YWJhc2UvQWJzdHJhY3REYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJkYXRhYmFzZS9BYnN0cmFjdERhdGFiYXNlLmNwcApAQCAtMjgyLDcgKzI4Miw3IEBA
IGJvb2wgQWJzdHJhY3REYXRhYmFzZTo6cGVyZm9ybU9wZW5BbmRWZXJpZnkoYm9vbCBzaG91bGRT
ZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwKICAgICAgICAgR3VpZFZlcnNpb25NYXA6Oml0ZXJhdG9y
IGVudHJ5ID0gZ3VpZFRvVmVyc2lvbk1hcCgpLmZpbmQobV9ndWlkKTsKICAgICAgICAgaWYgKGVu
dHJ5ICE9IGd1aWRUb1ZlcnNpb25NYXAoKS5lbmQoKSkgewogICAgICAgICAgICAgLy8gTWFwIG51
bGwgc3RyaW5nIHRvIGVtcHR5IHN0cmluZyAoc2VlIHVwZGF0ZUd1aWRWZXJzaW9uTWFwKCkpLgot
ICAgICAgICAgICAgY3VycmVudFZlcnNpb24gPSBlbnRyeS0+c2Vjb25kLmlzTnVsbCgpID8gZW1w
dHlTdHJpbmcoKSA6IGVudHJ5LT5zZWNvbmQuaXNvbGF0ZWRDb3B5KCk7CisgICAgICAgICAgICBj
dXJyZW50VmVyc2lvbiA9IGVudHJ5LT52YWx1ZS5pc051bGwoKSA/IGVtcHR5U3RyaW5nKCkgOiBl
bnRyeS0+dmFsdWUuaXNvbGF0ZWRDb3B5KCk7CiAgICAgICAgICAgICBMT0coU3RvcmFnZUFQSSwg
IkN1cnJlbnQgY2FjaGVkIHZlcnNpb24gZm9yIGd1aWQgJWkgaXMgJXMiLCBtX2d1aWQsIGN1cnJl
bnRWZXJzaW9uLmFzY2lpKCkuZGF0YSgpKTsKIAogI2lmIFBMQVRGT1JNKENIUk9NSVVNKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNr
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNr
ZXIuY3BwCmluZGV4IDQ2ZDI4MTI5MmQ5YjdlNDM3YjVkZTBmMzI1ZmFmMjQ1YzgxNjNhZDQuLjVi
ZDVlN2IzZDJlMWM0MDIxMWIwMWE2MWQwYmY3ODNjYjM1MjYyMjggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5jcHAKQEAg
LTI1MCw3ICsyNTAsNyBAQCB2b2lkIERhdGFiYXNlVHJhY2tlcjo6aW50ZXJydXB0QWxsRGF0YWJh
c2VzRm9yQ29udGV4dChjb25zdCBTY3JpcHRFeGVjdXRpb25Db250ZQogCiAgICAgICAgIERhdGFi
YXNlTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgZGJOYW1lTWFwRW5kSXQgPSBuYW1lTWFwLT5lbmQo
KTsKICAgICAgICAgZm9yIChEYXRhYmFzZU5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGRiTmFtZU1h
cEl0ID0gbmFtZU1hcC0+YmVnaW4oKTsgZGJOYW1lTWFwSXQgIT0gZGJOYW1lTWFwRW5kSXQ7ICsr
ZGJOYW1lTWFwSXQpIHsKLSAgICAgICAgICAgIERhdGFiYXNlU2V0KiBkYXRhYmFzZVNldCA9IGRi
TmFtZU1hcEl0LT5zZWNvbmQ7CisgICAgICAgICAgICBEYXRhYmFzZVNldCogZGF0YWJhc2VTZXQg
PSBkYk5hbWVNYXBJdC0+dmFsdWU7CiAgICAgICAgICAgICBEYXRhYmFzZVNldDo6Y29uc3RfaXRl
cmF0b3IgZGJTZXRFbmRJdCA9IGRhdGFiYXNlU2V0LT5lbmQoKTsKICAgICAgICAgICAgIGZvciAo
RGF0YWJhc2VTZXQ6OmNvbnN0X2l0ZXJhdG9yIGRiU2V0SXQgPSBkYXRhYmFzZVNldC0+YmVnaW4o
KTsgZGJTZXRJdCAhPSBkYlNldEVuZEl0OyArK2RiU2V0SXQpIHsKICAgICAgICAgICAgICAgICBp
ZiAoKCpkYlNldEl0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpID09IGNvbnRleHQpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL09yaWdpblVzYWdlUmVj
b3JkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvT3JpZ2luVXNhZ2VS
ZWNvcmQuY3BwCmluZGV4IDQ0MzU1MGE1NzMwOWYzMzYzZjBmY2E5OGY1MDhjMDI3NmQwZDk5ZGIu
LjJiZjhhZjRhZTAwOTkyODBhY2ExNzU3NzQ4YmEyMWNmOTBiNzAyZGIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvT3JpZ2luVXNhZ2VSZWNvcmQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvT3JpZ2luVXNhZ2VSZWNvcmQu
Y3BwCkBAIC05Myw3ICs5Myw3IEBAIHVuc2lnbmVkIGxvbmcgbG9uZyBPcmlnaW5Vc2FnZVJlY29y
ZDo6ZGlza1VzYWdlKCkKICAgICBIYXNoTWFwPFN0cmluZywgRGF0YWJhc2VFbnRyeT46Oml0ZXJh
dG9yIGlEYXRhYmFzZSA9IG1fZGF0YWJhc2VNYXAuYmVnaW4oKTsKICAgICBIYXNoTWFwPFN0cmlu
ZywgRGF0YWJhc2VFbnRyeT46Oml0ZXJhdG9yIGVuZERhdGFiYXNlID0gbV9kYXRhYmFzZU1hcC5l
bmQoKTsKICAgICBmb3IgKDsgaURhdGFiYXNlICE9IGVuZERhdGFiYXNlOyArK2lEYXRhYmFzZSkK
LSAgICAgICAgbV9jYWNoZWREaXNrVXNhZ2UgKz0gaURhdGFiYXNlLT5zZWNvbmQuc2l6ZTsKKyAg
ICAgICAgbV9jYWNoZWREaXNrVXNhZ2UgKz0gaURhdGFiYXNlLT52YWx1ZS5zaXplOwogCiAgICAg
bV9jYWNoZWREaXNrVXNhZ2VJc1ZhbGlkID0gdHJ1ZTsKICAgICByZXR1cm4gbV9jYWNoZWREaXNr
VXNhZ2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NR
TFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcAppbmRleCA4MzdiOGZiZDIyMDVh
ZGM5NzQ4NmRkM2YwZThmMDIwNzM4MGY4ZDliLi5kYTNhN2VlNzViOGMwMTI1OTQ2NmVjNGE3ZWFk
YTk3YmQxYzIzYmY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFi
YXNlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAKQEAgLTc4LDcg
Kzc4LDcgQEAgdm9pZCBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjphY3F1aXJlTG9jayhTUUxU
cmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCiAgICAgICAgIGNvb3JkaW5hdGlvbkluZm9JdGVyYXRv
ciA9IG1fY29vcmRpbmF0aW9uSW5mb01hcC5hZGQoZGJJZGVudGlmaWVyLCBDb29yZGluYXRpb25J
bmZvKCkpLml0ZXJhdG9yOwogICAgIH0KIAotICAgIENvb3JkaW5hdGlvbkluZm8mIGluZm8gPSBj
b29yZGluYXRpb25JbmZvSXRlcmF0b3ItPnNlY29uZDsKKyAgICBDb29yZGluYXRpb25JbmZvJiBp
bmZvID0gY29vcmRpbmF0aW9uSW5mb0l0ZXJhdG9yLT52YWx1ZTsKICAgICBpbmZvLnBlbmRpbmdU
cmFuc2FjdGlvbnMuYXBwZW5kKHRyYW5zYWN0aW9uKTsKICAgICBwcm9jZXNzUGVuZGluZ1RyYW5z
YWN0aW9ucyhpbmZvKTsKIH0KQEAgLTkyLDcgKzkyLDcgQEAgdm9pZCBTUUxUcmFuc2FjdGlvbkNv
b3JkaW5hdG9yOjpyZWxlYXNlTG9jayhTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCiAKICAg
ICBDb29yZGluYXRpb25JbmZvTWFwOjppdGVyYXRvciBjb29yZGluYXRpb25JbmZvSXRlcmF0b3Ig
PSBtX2Nvb3JkaW5hdGlvbkluZm9NYXAuZmluZChkYklkZW50aWZpZXIpOwogICAgIEFTU0VSVChj
b29yZGluYXRpb25JbmZvSXRlcmF0b3IgIT0gbV9jb29yZGluYXRpb25JbmZvTWFwLmVuZCgpKTsK
LSAgICBDb29yZGluYXRpb25JbmZvJiBpbmZvID0gY29vcmRpbmF0aW9uSW5mb0l0ZXJhdG9yLT5z
ZWNvbmQ7CisgICAgQ29vcmRpbmF0aW9uSW5mbyYgaW5mbyA9IGNvb3JkaW5hdGlvbkluZm9JdGVy
YXRvci0+dmFsdWU7CiAKICAgICBpZiAodHJhbnNhY3Rpb24tPmlzUmVhZE9ubHkoKSkgewogICAg
ICAgICBBU1NFUlQoaW5mby5hY3RpdmVSZWFkVHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0
aW9uKSk7CkBAIC0xMTAsNyArMTEwLDcgQEAgdm9pZCBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9y
OjpzaHV0ZG93bigpCiAgICAgLy8gTm90aWZ5IGFsbCB0cmFuc2FjdGlvbnMgaW4gcHJvZ3Jlc3Mg
dGhhdCB0aGUgZGF0YWJhc2UgdGhyZWFkIGlzIHNodXR0aW5nIGRvd24KICAgICBmb3IgKENvb3Jk
aW5hdGlvbkluZm9NYXA6Oml0ZXJhdG9yIGNvb3JkaW5hdGlvbkluZm9JdGVyYXRvciA9IG1fY29v
cmRpbmF0aW9uSW5mb01hcC5iZWdpbigpOwogICAgICAgICAgY29vcmRpbmF0aW9uSW5mb0l0ZXJh
dG9yICE9IG1fY29vcmRpbmF0aW9uSW5mb01hcC5lbmQoKTsgKytjb29yZGluYXRpb25JbmZvSXRl
cmF0b3IpIHsKLSAgICAgICAgQ29vcmRpbmF0aW9uSW5mbyYgaW5mbyA9IGNvb3JkaW5hdGlvbklu
Zm9JdGVyYXRvci0+c2Vjb25kOworICAgICAgICBDb29yZGluYXRpb25JbmZvJiBpbmZvID0gY29v
cmRpbmF0aW9uSW5mb0l0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgaWYgKGluZm8uYWN0aXZlV3Jp
dGVUcmFuc2FjdGlvbikKICAgICAgICAgICAgIGluZm8uYWN0aXZlV3JpdGVUcmFuc2FjdGlvbi0+
bm90aWZ5RGF0YWJhc2VUaHJlYWRJc1NodXR0aW5nRG93bigpOwogICAgICAgICBmb3IgKEhhc2hT
ZXQ8UmVmUHRyPFNRTFRyYW5zYWN0aW9uPiA+OjppdGVyYXRvciBhY3RpdmVSZWFkVHJhbnNhY3Rp
b25zSXRlcmF0b3IgPQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRh
YmFzZS9jaHJvbWl1bS9EYXRhYmFzZVRyYWNrZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL0RhdGFiYXNlVHJhY2tlckNocm9taXVtLmNw
cAppbmRleCAxMTdmZGJlZWQzMWQ2M2I2NGI5NDE4MDNiOGVhZGNkOTk4NWNlZWZjLi42MGE3NmNh
NWM5NTk4MmJlYTk0Y2UwN2JhZjY2ZWRhNWQ4MjdjNWFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL0RhdGFiYXNlVHJhY2tlckNocm9taXVt
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL0Rh
dGFiYXNlVHJhY2tlckNocm9taXVtLmNwcApAQCAtMTgwLDcgKzE4MCw3IEBAIHZvaWQgRGF0YWJh
c2VUcmFja2VyOjppbnRlcnJ1cHRBbGxEYXRhYmFzZXNGb3JDb250ZXh0KGNvbnN0IFNjcmlwdEV4
ZWN1dGlvbkNvbnRlCiAKICAgICBEYXRhYmFzZU5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGRiTmFt
ZU1hcEVuZEl0ID0gbmFtZU1hcC0+ZW5kKCk7CiAgICAgZm9yIChEYXRhYmFzZU5hbWVNYXA6OmNv
bnN0X2l0ZXJhdG9yIGRiTmFtZU1hcEl0ID0gbmFtZU1hcC0+YmVnaW4oKTsgZGJOYW1lTWFwSXQg
IT0gZGJOYW1lTWFwRW5kSXQ7ICsrZGJOYW1lTWFwSXQpIHsKLSAgICAgICAgRGF0YWJhc2VTZXQq
IGRhdGFiYXNlU2V0ID0gZGJOYW1lTWFwSXQtPnNlY29uZDsKKyAgICAgICAgRGF0YWJhc2VTZXQq
IGRhdGFiYXNlU2V0ID0gZGJOYW1lTWFwSXQtPnZhbHVlOwogICAgICAgICBEYXRhYmFzZVNldDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gZGF0YWJhc2VTZXQtPmVuZCgpOwogICAgICAgICBmb3IgKERh
dGFiYXNlU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IGRhdGFiYXNlU2V0LT5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIGlmICgoKml0KS0+c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpID09IGNvbnRleHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmRhdGFiYXNlL2Nocm9taXVtL1F1b3RhVHJhY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL1F1b3RhVHJhY2tlci5jcHAKaW5kZXggMDM0NGNhOGY2
NTZhNjVkMzdiMzA0YmI3ZTM5ODg5ZmNlMzZmOGY1ZC4uMzgyYTNmYjhiNTc4NjI1NWNlYmEwZTdm
ODU5YjE0MmFlYzFkOTUxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9jaHJvbWl1bS9RdW90YVRyYWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZGF0YWJhc2UvY2hyb21pdW0vUXVvdGFUcmFja2VyLmNwcApAQCAtNTMsOCArNTMs
OCBAQCB2b2lkIFF1b3RhVHJhY2tlcjo6Z2V0RGF0YWJhc2VTaXplQW5kU3BhY2VBdmFpbGFibGVU
b09yaWdpbigKICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGEobV9kYXRhR3VhcmQpOwogICAg
ICAgICBBU1NFUlQobV9kYXRhYmFzZVNpemVzLmNvbnRhaW5zKG9yaWdpbklkZW50aWZpZXIpKTsK
ICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFNpemVNYXA+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1f
ZGF0YWJhc2VTaXplcy5maW5kKG9yaWdpbklkZW50aWZpZXIpOwotICAgICAgICBBU1NFUlQoaXQt
PnNlY29uZC5jb250YWlucyhkYXRhYmFzZU5hbWUpKTsKLSAgICAgICAgKmRhdGFiYXNlU2l6ZSA9
IGl0LT5zZWNvbmQuZ2V0KGRhdGFiYXNlTmFtZSk7CisgICAgICAgIEFTU0VSVChpdC0+dmFsdWUu
Y29udGFpbnMoZGF0YWJhc2VOYW1lKSk7CisgICAgICAgICpkYXRhYmFzZVNpemUgPSBpdC0+dmFs
dWUuZ2V0KGRhdGFiYXNlTmFtZSk7CiAKICAgICAgICAgaWYgKG1fc3BhY2VBdmFpbGFibGVUb09y
aWdpbnMuY29udGFpbnMob3JpZ2luSWRlbnRpZmllcikpIHsKICAgICAgICAgICAgICpzcGFjZUF2
YWlsYWJsZSA9IG1fc3BhY2VBdmFpbGFibGVUb09yaWdpbnMuZ2V0KG9yaWdpbklkZW50aWZpZXIp
OwpAQCAtNzIsNyArNzIsNyBAQCB2b2lkIFF1b3RhVHJhY2tlcjo6dXBkYXRlRGF0YWJhc2VTaXpl
KAogewogICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhKG1fZGF0YUd1YXJkKTsKICAgICBIYXNoTWFw
PFN0cmluZywgU2l6ZU1hcD46Oml0ZXJhdG9yIGl0ID0gbV9kYXRhYmFzZVNpemVzLmFkZChvcmln
aW5JZGVudGlmaWVyLCBTaXplTWFwKCkpLml0ZXJhdG9yOwotICAgIGl0LT5zZWNvbmQuc2V0KGRh
dGFiYXNlTmFtZSwgZGF0YWJhc2VTaXplKTsKKyAgICBpdC0+dmFsdWUuc2V0KGRhdGFiYXNlTmFt
ZSwgZGF0YWJhc2VTaXplKTsKIH0KIAogdm9pZCBRdW90YVRyYWNrZXI6OnVwZGF0ZVNwYWNlQXZh
aWxhYmxlVG9PcmlnaW4oY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyLCB1bnNpZ25lZCBs
b25nIGxvbmcgc3BhY2VBdmFpbGFibGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0RGVmbGF0ZUZyYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0RGVmbGF0ZUZyYW1lci5jcHAKaW5kZXggNzZj
MDQwZDFjOTM3MmFiNzBlMjI2NDYwYTg3ZDJhNTVmMmM4OGZmMC4uNjdiYjNkYWExMjk5ODg0NTEx
MTA2OTBlMTkyZWEwZGEwMDc2NmNkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJzb2NrZXRzL1dlYlNvY2tldERlZmxhdGVGcmFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXREZWZsYXRlRnJhbWVyLmNwcApAQCAtODcs
NyArODcsNyBAQCBib29sIFdlYlNvY2tldEV4dGVuc2lvbkRlZmxhdGVGcmFtZTo6cHJvY2Vzc1Jl
c3BvbnNlKGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbgogICAgIGludCB3aW5kb3dCaXRzID0g
MTU7CiAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIHBhcmFtZXRl
ciA9IHNlcnZlclBhcmFtZXRlcnMuZmluZCgibWF4X3dpbmRvd19iaXRzIik7CiAgICAgaWYgKHBh
cmFtZXRlciAhPSBzZXJ2ZXJQYXJhbWV0ZXJzLmVuZCgpKSB7Ci0gICAgICAgIHdpbmRvd0JpdHMg
PSBwYXJhbWV0ZXItPnNlY29uZC50b0ludCgpOworICAgICAgICB3aW5kb3dCaXRzID0gcGFyYW1l
dGVyLT52YWx1ZS50b0ludCgpOwogICAgICAgICBpZiAod2luZG93Qml0cyA8IDggfHwgd2luZG93
Qml0cyA+IDE1KSB7CiAgICAgICAgICAgICBtX2ZhaWx1cmVSZWFzb24gPSAiUmVjZWl2ZWQgaW52
YWxpZCBtYXhfd2luZG93X2JpdHMgcGFyYW1ldGVyIjsKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKQEAgLTk4LDcgKzk4LDcgQEAgYm9vbCBXZWJTb2NrZXRFeHRlbnNpb25EZWZsYXRlRnJhbWU6
OnByb2Nlc3NSZXNwb25zZShjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW4KICAgICBXZWJTb2Nr
ZXREZWZsYXRlcjo6Q29udGV4dFRha2VPdmVyTW9kZSBtb2RlID0gV2ViU29ja2V0RGVmbGF0ZXI6
OlRha2VPdmVyQ29udGV4dDsKICAgICBwYXJhbWV0ZXIgPSBzZXJ2ZXJQYXJhbWV0ZXJzLmZpbmQo
Im5vX2NvbnRleHRfdGFrZW92ZXIiKTsKICAgICBpZiAocGFyYW1ldGVyICE9IHNlcnZlclBhcmFt
ZXRlcnMuZW5kKCkpIHsKLSAgICAgICAgaWYgKCFwYXJhbWV0ZXItPnNlY29uZC5pc051bGwoKSkg
eworICAgICAgICBpZiAoIXBhcmFtZXRlci0+dmFsdWUuaXNOdWxsKCkpIHsKICAgICAgICAgICAg
IG1fZmFpbHVyZVJlYXNvbiA9ICJSZWNlaXZlZCBpbnZhbGlkIG5vX2NvbnRleHRfdGFrZW92ZXIg
cGFyYW1ldGVyIjsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEV4dGVuc2lv
bkRpc3BhdGNoZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNv
Y2tldEV4dGVuc2lvbkRpc3BhdGNoZXIuY3BwCmluZGV4IDdjNTkyYWQxYmYyODA2OGM4MzAzMzY5
YjYwNjU2NzNiNmJhN2U5NzQuLjU2MDlmNjU4MWFhYjk3NDJiMGZkODVmZjE1ZDE1ZmE1MGVkMjlm
NWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2Nr
ZXRFeHRlbnNpb25EaXNwYXRjaGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YnNvY2tldHMvV2ViU29ja2V0RXh0ZW5zaW9uRGlzcGF0Y2hlci5jcHAKQEAgLTE4MSwxMCArMTgx
LDEwIEBAIHZvaWQgV2ViU29ja2V0RXh0ZW5zaW9uRGlzcGF0Y2hlcjo6YXBwZW5kQWNjZXB0ZWRF
eHRlbnNpb24oY29uc3QgU3RyaW5nJiBleHRlbnNpCiAgICAgLy8gRklYTUU6IFNob3VsZCB1c2Ug
TGlzdEhhc2hTZXQgdG8ga2VlcCB0aGUgb3JkZXIgb2YgdGhlIHBhcmFtZXRlcnMuCiAgICAgZm9y
IChIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXRlcmF0b3IgPSBleHRl
bnNpb25QYXJhbWV0ZXJzLmJlZ2luKCk7IGl0ZXJhdG9yICE9IGV4dGVuc2lvblBhcmFtZXRlcnMu
ZW5kKCk7ICsraXRlcmF0b3IpIHsKICAgICAgICAgbV9hY2NlcHRlZEV4dGVuc2lvbnNCdWlsZGVy
LmFwcGVuZCgiOyAiKTsKLSAgICAgICAgbV9hY2NlcHRlZEV4dGVuc2lvbnNCdWlsZGVyLmFwcGVu
ZChpdGVyYXRvci0+Zmlyc3QpOwotICAgICAgICBpZiAoIWl0ZXJhdG9yLT5zZWNvbmQuaXNOdWxs
KCkpIHsKKyAgICAgICAgbV9hY2NlcHRlZEV4dGVuc2lvbnNCdWlsZGVyLmFwcGVuZChpdGVyYXRv
ci0+a2V5KTsKKyAgICAgICAgaWYgKCFpdGVyYXRvci0+dmFsdWUuaXNOdWxsKCkpIHsKICAgICAg
ICAgICAgIG1fYWNjZXB0ZWRFeHRlbnNpb25zQnVpbGRlci5hcHBlbmQoIj0iKTsKLSAgICAgICAg
ICAgIG1fYWNjZXB0ZWRFeHRlbnNpb25zQnVpbGRlci5hcHBlbmQoaXRlcmF0b3ItPnNlY29uZCk7
CisgICAgICAgICAgICBtX2FjY2VwdGVkRXh0ZW5zaW9uc0J1aWxkZXIuYXBwZW5kKGl0ZXJhdG9y
LT52YWx1ZSk7CiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAppbmRleCA2YzA4YmUyMWYwZTMxNjcxMjdhYjNmMmI0
Yjk1N2Y5YjRlYmNmODIzLi44ZTMyZWI1MDEwMTMzZjllZTg3M2U3OTU4Y2U0YjNiNmM3YmVhMGVm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAK
QEAgLTk0LDcgKzk0LDcgQEAgQVhPYmplY3RDYWNoZTo6fkFYT2JqZWN0Q2FjaGUoKQogewogICAg
IEhhc2hNYXA8QVhJRCwgUmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+ID46Oml0ZXJhdG9yIGVu
ZCA9IG1fb2JqZWN0cy5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8QVhJRCwgUmVmUHRyPEFjY2Vz
c2liaWxpdHlPYmplY3Q+ID46Oml0ZXJhdG9yIGl0ID0gbV9vYmplY3RzLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgewotICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmogPSAoKml0KS5z
ZWNvbmQuZ2V0KCk7CisgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iaiA9ICgqaXQpLnZh
bHVlLmdldCgpOwogICAgICAgICBkZXRhY2hXcmFwcGVyKG9iaik7CiAgICAgICAgIG9iai0+ZGV0
YWNoKCk7CiAgICAgICAgIHJlbW92ZUFYSUQob2JqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2dvYmplY3QvRE9NT2JqZWN0Q2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvZ29iamVjdC9ET01PYmplY3RDYWNoZS5jcHAKaW5kZXggMmU3ZjEwNmU3OWUzMWM3
MzE1NGFiOWNmYWExOWE1ODllOWRlN2RkNS4uZGQ3ZDA0OTcxOGM4MTIyZjI0YjM4ZGI4ODNlNWI2
YjY0ZTJlYzA2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9E
T01PYmplY3RDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9E
T01PYmplY3RDYWNoZS5jcHAKQEAgLTc0LDcgKzc0LDcgQEAgdm9pZCBET01PYmplY3RDYWNoZTo6
Y2xlYXJCeUZyYW1lKFdlYkNvcmU6OkZyYW1lKiBmcmFtZSkKICAgICAvLyBpdGVyYXRpbmcgdGhl
IGNhY2hlIGl0c2VsZi4KICAgICBET01PYmplY3RNYXA6Oml0ZXJhdG9yIGVuZCA9IGRvbU9iamVj
dHMoKS5lbmQoKTsKICAgICBmb3IgKERPTU9iamVjdE1hcDo6aXRlcmF0b3IgaXRlciA9IGRvbU9i
amVjdHMoKS5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0gICAgICAgIERPTU9iamVj
dENhY2hlRGF0YSogZGF0YSA9IGl0ZXItPnNlY29uZDsKKyAgICAgICAgRE9NT2JqZWN0Q2FjaGVE
YXRhKiBkYXRhID0gaXRlci0+dmFsdWU7CiAgICAgICAgIEFTU0VSVChkYXRhKTsKICAgICAgICAg
aWYgKCghZnJhbWUgfHwgZGF0YS0+ZnJhbWUgPT0gZnJhbWUpICYmIGRhdGEtPnRpbWVzUmV0dXJu
ZWQpCiAgICAgICAgICAgICB0b1VucmVmLmFwcGVuZChkYXRhKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTU9iamVjdEhhc2hUYWJsZU1hcC5oIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvRE9NT2JqZWN0SGFzaFRhYmxlTWFwLmgKaW5kZXggNjQ4MjhkNjk4
OGY3ZTQzYjNlOWE0NjM2OTA4Y2QyMTI1NDdhMmZmYy4uNzUzYzA0ZDJmYzU3NzJlMDk1OWRjZWY1
YWM2MWJhMzBjOTZlMTc4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
RE9NT2JqZWN0SGFzaFRhYmxlTWFwLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
RE9NT2JqZWN0SGFzaFRhYmxlTWFwLmgKQEAgLTM5LDE1ICszOSwxNSBAQCBwdWJsaWM6CiAgICAg
fkRPTU9iamVjdEhhc2hUYWJsZU1hcCgpCiAgICAgewogICAgICAgICBmb3IgKEhhc2hNYXA8Y29u
c3QgSlNDOjpIYXNoVGFibGUqLCBKU0M6Okhhc2hUYWJsZT46Oml0ZXJhdG9yIGl0ZXIgPSBtX21h
cC5iZWdpbigpOyBpdGVyICE9IG1fbWFwLmVuZCgpOyArK2l0ZXIpCi0gICAgICAgICAgICBpdGVy
LT5zZWNvbmQuZGVsZXRlVGFibGUoKTsKKyAgICAgICAgICAgIGl0ZXItPnZhbHVlLmRlbGV0ZVRh
YmxlKCk7CiAgICAgfQogCiAgICAgY29uc3QgSlNDOjpIYXNoVGFibGUqIGdldChjb25zdCBKU0M6
Okhhc2hUYWJsZSogc3RhdGljVGFibGUpCiAgICAgewogICAgICAgICBIYXNoTWFwPGNvbnN0IEpT
Qzo6SGFzaFRhYmxlKiwgSlNDOjpIYXNoVGFibGU+OjppdGVyYXRvciBpdGVyID0gbV9tYXAuZmlu
ZChzdGF0aWNUYWJsZSk7CiAgICAgICAgIGlmIChpdGVyICE9IG1fbWFwLmVuZCgpKQotICAgICAg
ICAgICAgcmV0dXJuICZpdGVyLT5zZWNvbmQ7Ci0gICAgICAgIHJldHVybiAmbV9tYXAuc2V0KHN0
YXRpY1RhYmxlLCBzdGF0aWNUYWJsZS0+Y29weSgpKS5pdGVyYXRvci0+c2Vjb25kOworICAgICAg
ICAgICAgcmV0dXJuICZpdGVyLT52YWx1ZTsKKyAgICAgICAgcmV0dXJuICZtX21hcC5zZXQoc3Rh
dGljVGFibGUsIHN0YXRpY1RhYmxlLT5jb3B5KCkpLml0ZXJhdG9yLT52YWx1ZTsKICAgICB9CiAK
IHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJp
bmRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcApp
bmRleCA2NTUxZDY2ODdkZmY4MjhlOTU0YmMyY2YxZjRhYTZjOGZhMjQ2NTI1Li4xM2M5M2Y2YTli
ODRhOGFmNWQ2MTBkZDU0OTk0NjE4ZWY4NDU0ZjZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NQmluZGluZy5jcHAKQEAgLTI1OSw3ICsyNTksNyBAQCBTdHJ1Y3R1cmUqIGNh
Y2hlRE9NU3RydWN0dXJlKEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVy
ZSogc3RydWN0dQogewogICAgIEpTRE9NU3RydWN0dXJlTWFwJiBzdHJ1Y3R1cmVzID0gZ2xvYmFs
T2JqZWN0LT5zdHJ1Y3R1cmVzKCk7CiAgICAgQVNTRVJUKCFzdHJ1Y3R1cmVzLmNvbnRhaW5zKGNs
YXNzSW5mbykpOwotICAgIHJldHVybiBzdHJ1Y3R1cmVzLnNldChjbGFzc0luZm8sIFdyaXRlQmFy
cmllcjxTdHJ1Y3R1cmU+KGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3Qs
IHN0cnVjdHVyZSkpLml0ZXJhdG9yLT5zZWNvbmQuZ2V0KCk7CisgICAgcmV0dXJuIHN0cnVjdHVy
ZXMuc2V0KGNsYXNzSW5mbywgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4oZ2xvYmFsT2JqZWN0LT5n
bG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKSkuaXRlcmF0b3ItPnZhbHVlLmdl
dCgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAKaW5kZXggMzYxMDQ4MDhiYjYwOWU1N2Iw
NDgxMTg1MmU4OTVkYWQ3MTMwYTRhZS4uZDNjNDI5YTUwOGQ5MTBkZTdiZDJlZWJlZDY3ZDc3NWMy
NWVjN2IxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9i
YWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFs
T2JqZWN0LmNwcApAQCAtODgsMTEgKzg4LDExIEBAIHZvaWQgSlNET01HbG9iYWxPYmplY3Q6OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKIAogICAgIEpT
RE9NU3RydWN0dXJlTWFwOjppdGVyYXRvciBlbmQgPSB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmVzKCku
ZW5kKCk7CiAgICAgZm9yIChKU0RPTVN0cnVjdHVyZU1hcDo6aXRlcmF0b3IgaXQgPSB0aGlzT2Jq
ZWN0LT5zdHJ1Y3R1cmVzKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICB2aXNp
dG9yLmFwcGVuZCgmaXQtPnNlY29uZCk7CisgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZpdC0+dmFs
dWUpOwogCiAgICAgSlNET01Db25zdHJ1Y3Rvck1hcDo6aXRlcmF0b3IgZW5kMiA9IHRoaXNPYmpl
Y3QtPmNvbnN0cnVjdG9ycygpLmVuZCgpOwogICAgIGZvciAoSlNET01Db25zdHJ1Y3Rvck1hcDo6
aXRlcmF0b3IgaXQyID0gdGhpc09iamVjdC0+Y29uc3RydWN0b3JzKCkuYmVnaW4oKTsgaXQyICE9
IGVuZDI7ICsraXQyKQotICAgICAgICB2aXNpdG9yLmFwcGVuZCgmaXQyLT5zZWNvbmQpOworICAg
ICAgICB2aXNpdG9yLmFwcGVuZCgmaXQyLT52YWx1ZSk7CiB9CiAKIHZvaWQgSlNET01HbG9iYWxP
YmplY3Q6OnNldEN1cnJlbnRFdmVudChFdmVudCogY3VycmVudEV2ZW50KQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuaCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmgKaW5kZXggYmRhYjU2OGYwMjQ1
M2IxNDRmMjNkNDdjYTQ3ZTlkNDY5M2Y1NWM2My4uOWNjMTcxYmMyODg3NGE4MzllZjgzM2QyMTRm
NmY4ZjUxODlmNDc2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01HbG9iYWxPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUds
b2JhbE9iamVjdC5oCkBAIC05Myw3ICs5Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgSlNDOjpKU09iamVjdCogY29uc3RydWN0b3IgPSBDb25zdHJ1Y3RvckNsYXNzOjpjcmVhdGUo
ZXhlYywgQ29uc3RydWN0b3JDbGFzczo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEo
KSwgY29uc3RfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCksIGdsb2JhbE9i
amVjdC0+b2JqZWN0UHJvdG90eXBlKCkpLCBjb25zdF9jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4o
Z2xvYmFsT2JqZWN0KSk7CiAgICAgICAgIEFTU0VSVCghY29uc3RfY2FzdDxKU0RPTUdsb2JhbE9i
amVjdCo+KGdsb2JhbE9iamVjdCktPmNvbnN0cnVjdG9ycygpLmNvbnRhaW5zKCZDb25zdHJ1Y3Rv
ckNsYXNzOjpzX2luZm8pKTsKICAgICAgICAgSlNDOjpXcml0ZUJhcnJpZXI8SlNDOjpKU09iamVj
dD4gdGVtcDsKLSAgICAgICAgY29uc3RfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9i
amVjdCktPmNvbnN0cnVjdG9ycygpLmFkZCgmQ29uc3RydWN0b3JDbGFzczo6c19pbmZvLCB0ZW1w
KS5pdGVyYXRvci0+c2Vjb25kLnNldChleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdCwg
Y29uc3RydWN0b3IpOworICAgICAgICBjb25zdF9jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xv
YmFsT2JqZWN0KS0+Y29uc3RydWN0b3JzKCkuYWRkKCZDb25zdHJ1Y3RvckNsYXNzOjpzX2luZm8s
IHRlbXApLml0ZXJhdG9yLT52YWx1ZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmpl
Y3QsIGNvbnN0cnVjdG9yKTsKICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yOwogICAgIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUGFnZVNjcmlwdERlYnVnU2Vy
dmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1BhZ2VTY3JpcHREZWJ1Z1NlcnZl
ci5jcHAKaW5kZXggZmYwYWVlZmI1MGE2MDhjOTIxMDMzZDk4NzkzM2NkYzY1ZmNmZDJjOS4uZWQ3
NDNjYzllOWVjNTFjMGQ1MzE2MTA5NGYzM2Q5YzkyYWRiMTBkNiAxMDA3NTUKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvUGFnZVNjcmlwdERlYnVnU2VydmVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCkBAIC04Miw3
ICs4Miw3IEBAIHZvaWQgUGFnZVNjcmlwdERlYnVnU2VydmVyOjphZGRMaXN0ZW5lcihTY3JpcHRE
ZWJ1Z0xpc3RlbmVyKiBsaXN0ZW5lciwgUGFnZSogcGFnCiAgICAgQVNTRVJUX0FSRyhsaXN0ZW5l
ciwgbGlzdGVuZXIpOwogICAgIEFTU0VSVF9BUkcocGFnZSwgcGFnZSk7CiAKLSAgICBPd25QdHI8
TGlzdGVuZXJTZXQ+JiBsaXN0ZW5lcnMgPSBtX3BhZ2VMaXN0ZW5lcnNNYXAuYWRkKHBhZ2UsIG51
bGxwdHIpLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgT3duUHRyPExpc3RlbmVyU2V0PiYgbGlzdGVu
ZXJzID0gbV9wYWdlTGlzdGVuZXJzTWFwLmFkZChwYWdlLCBudWxscHRyKS5pdGVyYXRvci0+dmFs
dWU7CiAgICAgaWYgKCFsaXN0ZW5lcnMpCiAgICAgICAgIGxpc3RlbmVycyA9IGFkb3B0UHRyKG5l
dyBMaXN0ZW5lclNldCk7CiAgICAgbGlzdGVuZXJzLT5hZGQobGlzdGVuZXIpOwpAQCAtMTAwLDcg
KzEwMCw3IEBAIHZvaWQgUGFnZVNjcmlwdERlYnVnU2VydmVyOjpyZW1vdmVMaXN0ZW5lcihTY3Jp
cHREZWJ1Z0xpc3RlbmVyKiBsaXN0ZW5lciwgUGFnZSoKICAgICBpZiAoaXQgPT0gbV9wYWdlTGlz
dGVuZXJzTWFwLmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBMaXN0ZW5lclNldCogbGlz
dGVuZXJzID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICBMaXN0ZW5lclNldCogbGlzdGVuZXJzID0g
aXQtPnZhbHVlLmdldCgpOwogICAgIGxpc3RlbmVycy0+cmVtb3ZlKGxpc3RlbmVyKTsKICAgICBp
ZiAobGlzdGVuZXJzLT5pc0VtcHR5KCkpIHsKICAgICAgICAgbV9wYWdlTGlzdGVuZXJzTWFwLnJl
bW92ZShpdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRD
YWNoZWRGcmFtZURhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q2Fj
aGVkRnJhbWVEYXRhLmNwcAppbmRleCBkZWY3OWNmMmMxNmJhNzZlNTFiZDhmMDFmZjA3MDA5ZmVk
MjBjYzZlLi5jNjI0ODdlODA1ZmRjYzFiNzAxYzViYmY1ZDk2OTRjYmZiZDc0NGRjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDYWNoZWRGcmFtZURhdGEuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENhY2hlZEZyYW1lRGF0YS5j
cHAKQEAgLTUzLDggKzUzLDggQEAgU2NyaXB0Q2FjaGVkRnJhbWVEYXRhOjpTY3JpcHRDYWNoZWRG
cmFtZURhdGEoRnJhbWUqIGZyYW1lKQogCiAgICAgU2NyaXB0Q29udHJvbGxlcjo6U2hlbGxNYXA6
Oml0ZXJhdG9yIHdpbmRvd1NoZWxsc0VuZCA9IHdpbmRvd1NoZWxscy5lbmQoKTsKICAgICBmb3Ig
KFNjcmlwdENvbnRyb2xsZXI6OlNoZWxsTWFwOjppdGVyYXRvciBpdGVyID0gd2luZG93U2hlbGxz
LmJlZ2luKCk7IGl0ZXIgIT0gd2luZG93U2hlbGxzRW5kOyArK2l0ZXIpIHsKLSAgICAgICAgSlNE
T01XaW5kb3cqIHdpbmRvdyA9IGl0ZXItPnNlY29uZC0+d2luZG93KCk7Ci0gICAgICAgIG1fd2lu
ZG93cy5hZGQoaXRlci0+Zmlyc3QuZ2V0KCksIFN0cm9uZzxKU0RPTVdpbmRvdz4od2luZG93LT5n
bG9iYWxEYXRhKCksIHdpbmRvdykpOworICAgICAgICBKU0RPTVdpbmRvdyogd2luZG93ID0gaXRl
ci0+dmFsdWUtPndpbmRvdygpOworICAgICAgICBtX3dpbmRvd3MuYWRkKGl0ZXItPmtleS5nZXQo
KSwgU3Ryb25nPEpTRE9NV2luZG93Pih3aW5kb3ctPmdsb2JhbERhdGEoKSwgd2luZG93KSk7CiAg
ICAgfQogCiAgICAgc2NyaXB0Q29udHJvbGxlci0+YXR0YWNoRGVidWdnZXIoMCk7CkBAIC03NCw4
ICs3NCw4IEBAIHZvaWQgU2NyaXB0Q2FjaGVkRnJhbWVEYXRhOjpyZXN0b3JlKEZyYW1lKiBmcmFt
ZSkKIAogICAgIFNjcmlwdENvbnRyb2xsZXI6OlNoZWxsTWFwOjppdGVyYXRvciB3aW5kb3dTaGVs
bHNFbmQgPSB3aW5kb3dTaGVsbHMuZW5kKCk7CiAgICAgZm9yIChTY3JpcHRDb250cm9sbGVyOjpT
aGVsbE1hcDo6aXRlcmF0b3IgaXRlciA9IHdpbmRvd1NoZWxscy5iZWdpbigpOyBpdGVyICE9IHdp
bmRvd1NoZWxsc0VuZDsgKytpdGVyKSB7Ci0gICAgICAgIERPTVdyYXBwZXJXb3JsZCogd29ybGQg
PSBpdGVyLT5maXJzdC5nZXQoKTsKLSAgICAgICAgSlNET01XaW5kb3dTaGVsbCogd2luZG93U2hl
bGwgPSBpdGVyLT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIERPTVdyYXBwZXJXb3JsZCogd29ybGQg
PSBpdGVyLT5rZXkuZ2V0KCk7CisgICAgICAgIEpTRE9NV2luZG93U2hlbGwqIHdpbmRvd1NoZWxs
ID0gaXRlci0+dmFsdWUuZ2V0KCk7CiAKICAgICAgICAgaWYgKEpTRE9NV2luZG93KiB3aW5kb3cg
PSBtX3dpbmRvd3MuZ2V0KHdvcmxkKS5nZXQoKSkKICAgICAgICAgICAgIHdpbmRvd1NoZWxsLT5z
ZXRXaW5kb3cod2luZG93LT5nbG9iYWxEYXRhKCksIHdpbmRvdyk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCmluZGV4IGRhOTM5ODRlZDc2YzA0
ODIwMzVkNzQ5OGFlN2YwMjcxZjk2NzlmODMuLmI5ZWFmNDc3NjliZDYyN2I0ZWIxZjkzNjY2NmZk
OWI5YjMwZmNmNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Njcmlw
dENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENv
bnRyb2xsZXIuY3BwCkBAIC05Niw3ICs5Niw3IEBAIFNjcmlwdENvbnRyb2xsZXI6On5TY3JpcHRD
b250cm9sbGVyKCkKICAgICAvLyBJdCdzIGxpa2VseSB0aGF0IGRlc3Ryb3lpbmcgbV93aW5kb3dT
aGVsbHMgd2lsbCBjcmVhdGUgYSBsb3Qgb2YgZ2FyYmFnZS4KICAgICBpZiAoIW1fd2luZG93U2hl
bGxzLmlzRW1wdHkoKSkgewogICAgICAgICB3aGlsZSAoIW1fd2luZG93U2hlbGxzLmlzRW1wdHko
KSkKLSAgICAgICAgICAgIGRlc3Ryb3lXaW5kb3dTaGVsbChtX3dpbmRvd1NoZWxscy5iZWdpbigp
LT5maXJzdC5nZXQoKSk7CisgICAgICAgICAgICBkZXN0cm95V2luZG93U2hlbGwobV93aW5kb3dT
aGVsbHMuYmVnaW4oKS0+a2V5LmdldCgpKTsKICAgICAgICAgZ2NDb250cm9sbGVyKCkuZ2FyYmFn
ZUNvbGxlY3RTb29uKCk7CiAgICAgfQogfQpAQCAtMTgzLDcgKzE4Myw3IEBAIHZvaWQgU2NyaXB0
Q29udHJvbGxlcjo6Y2xlYXJXaW5kb3dTaGVsbChET01XaW5kb3cqIG5ld0RPTVdpbmRvdywgYm9v
bCBnb2luZ0ludG9QCiAgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3dCYXNlOjpjb21t
b25KU0dsb2JhbERhdGEoKSk7CiAKICAgICBmb3IgKFNoZWxsTWFwOjppdGVyYXRvciBpdGVyID0g
bV93aW5kb3dTaGVsbHMuYmVnaW4oKTsgaXRlciAhPSBtX3dpbmRvd1NoZWxscy5lbmQoKTsgKytp
dGVyKSB7Ci0gICAgICAgIEpTRE9NV2luZG93U2hlbGwqIHdpbmRvd1NoZWxsID0gaXRlci0+c2Vj
b25kLmdldCgpOworICAgICAgICBKU0RPTVdpbmRvd1NoZWxsKiB3aW5kb3dTaGVsbCA9IGl0ZXIt
PnZhbHVlLmdldCgpOwogCiAgICAgICAgIGlmICh3aW5kb3dTaGVsbC0+d2luZG93KCktPmltcGwo
KSA9PSBuZXdET01XaW5kb3cpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTI3Niw3ICsyNzYs
NyBAQCBib29sIFNjcmlwdENvbnRyb2xsZXI6OmNhbkFjY2Vzc0Zyb21DdXJyZW50T3JpZ2luKEZy
YW1lICpmcmFtZSkKIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6YXR0YWNoRGVidWdnZXIoSlNDOjpE
ZWJ1Z2dlciogZGVidWdnZXIpCiB7CiAgICAgZm9yIChTaGVsbE1hcDo6aXRlcmF0b3IgaXRlciA9
IG1fd2luZG93U2hlbGxzLmJlZ2luKCk7IGl0ZXIgIT0gbV93aW5kb3dTaGVsbHMuZW5kKCk7ICsr
aXRlcikKLSAgICAgICAgYXR0YWNoRGVidWdnZXIoaXRlci0+c2Vjb25kLmdldCgpLCBkZWJ1Z2dl
cik7CisgICAgICAgIGF0dGFjaERlYnVnZ2VyKGl0ZXItPnZhbHVlLmdldCgpLCBkZWJ1Z2dlcik7
CiB9CiAKIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6YXR0YWNoRGVidWdnZXIoSlNET01XaW5kb3dT
aGVsbCogc2hlbGwsIEpTQzo6RGVidWdnZXIqIGRlYnVnZ2VyKQpAQCAtMjk3LDggKzI5Nyw4IEBA
IHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6dXBkYXRlRG9jdW1lbnQoKQogICAgICAgICByZXR1cm47
CiAKICAgICBmb3IgKFNoZWxsTWFwOjppdGVyYXRvciBpdGVyID0gbV93aW5kb3dTaGVsbHMuYmVn
aW4oKTsgaXRlciAhPSBtX3dpbmRvd1NoZWxscy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIEpT
TG9ja0hvbGRlciBsb2NrKGl0ZXItPmZpcnN0LT5nbG9iYWxEYXRhKCkpOwotICAgICAgICBpdGVy
LT5zZWNvbmQtPndpbmRvdygpLT51cGRhdGVEb2N1bWVudCgpOworICAgICAgICBKU0xvY2tIb2xk
ZXIgbG9jayhpdGVyLT5rZXktPmdsb2JhbERhdGEoKSk7CisgICAgICAgIGl0ZXItPnZhbHVlLT53
aW5kb3coKS0+dXBkYXRlRG9jdW1lbnQoKTsKICAgICB9CiB9CiAKQEAgLTMzNSw3ICszMzUsNyBA
QCBQYXNzUmVmUHRyPEJpbmRpbmdzOjpSb290T2JqZWN0PiBTY3JpcHRDb250cm9sbGVyOjpjcmVh
dGVSb290T2JqZWN0KHZvaWQqIG5hdGl2ZQogewogICAgIFJvb3RPYmplY3RNYXA6Oml0ZXJhdG9y
IGl0ID0gbV9yb290T2JqZWN0cy5maW5kKG5hdGl2ZUhhbmRsZSk7CiAgICAgaWYgKGl0ICE9IG1f
cm9vdE9iamVjdHMuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgICAgICBy
ZXR1cm4gaXQtPnZhbHVlOwogCiAgICAgUmVmUHRyPEJpbmRpbmdzOjpSb290T2JqZWN0PiByb290
T2JqZWN0ID0gQmluZGluZ3M6OlJvb3RPYmplY3Q6OmNyZWF0ZShuYXRpdmVIYW5kbGUsIGdsb2Jh
bE9iamVjdChwbHVnaW5Xb3JsZCgpKSk7CiAKQEAgLTM1MSw4ICszNTEsOCBAQCB2b2lkIFNjcmlw
dENvbnRyb2xsZXI6OnNldENhcHR1cmVDYWxsU3RhY2tGb3JVbmNhdWdodEV4Y2VwdGlvbnMoYm9v
bCkKIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6Y29sbGVjdElzb2xhdGVkQ29udGV4dHMoVmVjdG9y
PHN0ZDo6cGFpcjxKU0M6OkV4ZWNTdGF0ZSosIFNlY3VyaXR5T3JpZ2luKj4gPiYgcmVzdWx0KQog
ewogICAgIGZvciAoU2hlbGxNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3dpbmRvd1NoZWxscy5iZWdp
bigpOyBpdGVyICE9IG1fd2luZG93U2hlbGxzLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgSlND
OjpFeGVjU3RhdGUqIGV4ZWMgPSBpdGVyLT5zZWNvbmQtPndpbmRvdygpLT5nbG9iYWxFeGVjKCk7
Ci0gICAgICAgIFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4gPSBpdGVyLT5zZWNvbmQtPndpbmRvdygp
LT5pbXBsKCktPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCk7CisgICAgICAgIEpTQzo6RXhl
Y1N0YXRlKiBleGVjID0gaXRlci0+dmFsdWUtPndpbmRvdygpLT5nbG9iYWxFeGVjKCk7CisgICAg
ICAgIFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4gPSBpdGVyLT52YWx1ZS0+d2luZG93KCktPmltcGwo
KS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKTsKICAgICAgICAgcmVzdWx0LmFwcGVuZChz
dGQ6OnBhaXI8U2NyaXB0U3RhdGUqLCBTZWN1cml0eU9yaWdpbio+KGV4ZWMsIG9yaWdpbikpOwog
ICAgIH0KIH0KQEAgLTQ0MCw3ICs0NDAsNyBAQCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmNsZWFu
dXBTY3JpcHRPYmplY3RzRm9yUGx1Z2luKHZvaWQqIG5hdGl2ZUhhbmRsZSkKICAgICBpZiAoaXQg
PT0gbV9yb290T2JqZWN0cy5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaXQtPnNlY29u
ZC0+aW52YWxpZGF0ZSgpOworICAgIGl0LT52YWx1ZS0+aW52YWxpZGF0ZSgpOwogICAgIG1fcm9v
dE9iamVjdHMucmVtb3ZlKGl0KTsKIH0KIApAQCAtNDUwLDcgKzQ1MCw3IEBAIHZvaWQgU2NyaXB0
Q29udHJvbGxlcjo6Y2xlYXJTY3JpcHRPYmplY3RzKCkKIAogICAgIFJvb3RPYmplY3RNYXA6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IG1fcm9vdE9iamVjdHMuZW5kKCk7CiAgICAgZm9yIChSb290T2Jq
ZWN0TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fcm9vdE9iamVjdHMuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5pbnZhbGlkYXRlKCk7CisgICAgICAgIGl0
LT52YWx1ZS0+aW52YWxpZGF0ZSgpOwogCiAgICAgbV9yb290T2JqZWN0cy5jbGVhcigpOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmgKaW5kZXggZjc2
ZmRlOGZjNzJmNjgwNWVmNDhjMDNhZmMxZDA2YTNhMTU0Y2E4Ny4uZjNkYTUzZTA1M2RmMGY2YWY5
NjcxNmZjMGMwMmIyYjk1Y2MzNTRmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvU2NyaXB0Q29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NjcmlwdENvbnRyb2xsZXIuaApAQCAtNzQsMTIgKzc0LDEyIEBAIHB1YmxpYzoKICAgICBKU0RP
TVdpbmRvd1NoZWxsKiB3aW5kb3dTaGVsbChET01XcmFwcGVyV29ybGQqIHdvcmxkKQogICAgIHsK
ICAgICAgICAgU2hlbGxNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3dpbmRvd1NoZWxscy5maW5kKHdv
cmxkKTsKLSAgICAgICAgcmV0dXJuIChpdGVyICE9IG1fd2luZG93U2hlbGxzLmVuZCgpKSA/IGl0
ZXItPnNlY29uZC5nZXQoKSA6IGluaXRTY3JpcHQod29ybGQpOworICAgICAgICByZXR1cm4gKGl0
ZXIgIT0gbV93aW5kb3dTaGVsbHMuZW5kKCkpID8gaXRlci0+dmFsdWUuZ2V0KCkgOiBpbml0U2Ny
aXB0KHdvcmxkKTsKICAgICB9CiAgICAgSlNET01XaW5kb3dTaGVsbCogZXhpc3RpbmdXaW5kb3dT
aGVsbChET01XcmFwcGVyV29ybGQqIHdvcmxkKSBjb25zdAogICAgIHsKICAgICAgICAgU2hlbGxN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX3dpbmRvd1NoZWxscy5maW5kKHdvcmxkKTsKLSAg
ICAgICAgcmV0dXJuIChpdGVyICE9IG1fd2luZG93U2hlbGxzLmVuZCgpKSA/IGl0ZXItPnNlY29u
ZC5nZXQoKSA6IDA7CisgICAgICAgIHJldHVybiAoaXRlciAhPSBtX3dpbmRvd1NoZWxscy5lbmQo
KSkgPyBpdGVyLT52YWx1ZS5nZXQoKSA6IDA7CiAgICAgfQogICAgIEpTRE9NV2luZG93KiBnbG9i
YWxPYmplY3QoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCkKICAgICB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHAKaW5kZXggYmJjZDU0Mjk5NjU3
MGZhMTM3OTlhNGU1YTgyOTUwMzBkZTUwYTBhMS4uYjQwMTM5MjRiZTgxNjcyY2NhMTRjN2Y4NWI4
MWJjZGIyNmE2MmM5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2Ny
aXB0RGVidWdTZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Njcmlw
dERlYnVnU2VydmVyLmNwcApAQCAtNzUsMTEgKzc1LDExIEBAIFN0cmluZyBTY3JpcHREZWJ1Z1Nl
cnZlcjo6c2V0QnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCBjb25zdCBTY3JpcHRC
cmVhCiAgICAgU291cmNlSWRUb0JyZWFrcG9pbnRzTWFwOjppdGVyYXRvciBpdCA9IG1fc291cmNl
SWRUb0JyZWFrcG9pbnRzLmZpbmQoc291cmNlSURWYWx1ZSk7CiAgICAgaWYgKGl0ID09IG1fc291
cmNlSWRUb0JyZWFrcG9pbnRzLmVuZCgpKQogICAgICAgICBpdCA9IG1fc291cmNlSWRUb0JyZWFr
cG9pbnRzLnNldChzb3VyY2VJRFZhbHVlLCBMaW5lVG9CcmVha3BvaW50TWFwKCkpLml0ZXJhdG9y
OwotICAgIExpbmVUb0JyZWFrcG9pbnRNYXA6Oml0ZXJhdG9yIGJyZWFrc0l0ID0gaXQtPnNlY29u
ZC5maW5kKHNjcmlwdEJyZWFrcG9pbnQubGluZU51bWJlciArIDEpOwotICAgIGlmIChicmVha3NJ
dCA9PSBpdC0+c2Vjb25kLmVuZCgpKQotICAgICAgICBicmVha3NJdCA9IGl0LT5zZWNvbmQuc2V0
KHNjcmlwdEJyZWFrcG9pbnQubGluZU51bWJlciArIDEsIEJyZWFrcG9pbnRzSW5MaW5lKCkpLml0
ZXJhdG9yOworICAgIExpbmVUb0JyZWFrcG9pbnRNYXA6Oml0ZXJhdG9yIGJyZWFrc0l0ID0gaXQt
PnZhbHVlLmZpbmQoc2NyaXB0QnJlYWtwb2ludC5saW5lTnVtYmVyICsgMSk7CisgICAgaWYgKGJy
ZWFrc0l0ID09IGl0LT52YWx1ZS5lbmQoKSkKKyAgICAgICAgYnJlYWtzSXQgPSBpdC0+dmFsdWUu
c2V0KHNjcmlwdEJyZWFrcG9pbnQubGluZU51bWJlciArIDEsIEJyZWFrcG9pbnRzSW5MaW5lKCkp
Lml0ZXJhdG9yOwogCi0gICAgQnJlYWtwb2ludHNJbkxpbmUmIGJyZWFrc1ZlY3RvciA9IGJyZWFr
c0l0LT5zZWNvbmQ7CisgICAgQnJlYWtwb2ludHNJbkxpbmUmIGJyZWFrc1ZlY3RvciA9IGJyZWFr
c0l0LT52YWx1ZTsKICAgICB1bnNpZ25lZCBicmVha3NDb3VudCA9IGJyZWFrc1ZlY3Rvci5zaXpl
KCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJyZWFrc0NvdW50OyBpKyspIHsKICAg
ICAgICAgaWYgKGJyZWFrc1ZlY3Rvci5hdChpKS5jb2x1bW5OdW1iZXIgPT0gc2NyaXB0QnJlYWtw
b2ludC5jb2x1bW5OdW1iZXIpCkBAIC0xMTIsMTEgKzExMiwxMSBAQCB2b2lkIFNjcmlwdERlYnVn
U2VydmVyOjpyZW1vdmVCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgYnJlYWtwb2ludElkKQogICAg
IFNvdXJjZUlkVG9CcmVha3BvaW50c01hcDo6aXRlcmF0b3IgaXQgPSBtX3NvdXJjZUlkVG9CcmVh
a3BvaW50cy5maW5kKHNvdXJjZUlEVmFsdWUpOwogICAgIGlmIChpdCA9PSBtX3NvdXJjZUlkVG9C
cmVha3BvaW50cy5lbmQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIExpbmVUb0JyZWFrcG9pbnRN
YXA6Oml0ZXJhdG9yIGJyZWFrc0l0ID0gaXQtPnNlY29uZC5maW5kKGxpbmVOdW1iZXIgKyAxKTsK
LSAgICBpZiAoYnJlYWtzSXQgPT0gaXQtPnNlY29uZC5lbmQoKSkKKyAgICBMaW5lVG9CcmVha3Bv
aW50TWFwOjppdGVyYXRvciBicmVha3NJdCA9IGl0LT52YWx1ZS5maW5kKGxpbmVOdW1iZXIgKyAx
KTsKKyAgICBpZiAoYnJlYWtzSXQgPT0gaXQtPnZhbHVlLmVuZCgpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBCcmVha3BvaW50c0luTGluZSYgYnJlYWtzVmVjdG9yID0gYnJlYWtzSXQtPnNlY29u
ZDsKKyAgICBCcmVha3BvaW50c0luTGluZSYgYnJlYWtzVmVjdG9yID0gYnJlYWtzSXQtPnZhbHVl
OwogICAgIHVuc2lnbmVkIGJyZWFrc0NvdW50ID0gYnJlYWtzVmVjdG9yLnNpemUoKTsKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnJlYWtzQ291bnQ7IGkrKykgewogICAgICAgICBpZiAo
YnJlYWtzVmVjdG9yLmF0KGkpLmNvbHVtbk51bWJlciA9PSBzdGF0aWNfY2FzdDxpbnQ+KGNvbHVt
bk51bWJlcikpIHsKQEAgLTE3OCwxMiArMTc4LDEyIEBAIGJvb2wgU2NyaXB0RGVidWdTZXJ2ZXI6
Omhhc0JyZWFrcG9pbnQoaW50cHRyX3Qgc291cmNlSUQsIGNvbnN0IFRleHRQb3NpdGlvbiYgcG9z
CiAgICAgaWYgKGxpbmVOdW1iZXIgPCAwIHx8IGNvbHVtbk51bWJlciA8IDApCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIExpbmVUb0JyZWFrcG9pbnRNYXA6OmNvbnN0X2l0ZXJhdG9yIGJy
ZWFrc0l0ID0gaXQtPnNlY29uZC5maW5kKGxpbmVOdW1iZXIgKyAxKTsKLSAgICBpZiAoYnJlYWtz
SXQgPT0gaXQtPnNlY29uZC5lbmQoKSkKKyAgICBMaW5lVG9CcmVha3BvaW50TWFwOjpjb25zdF9p
dGVyYXRvciBicmVha3NJdCA9IGl0LT52YWx1ZS5maW5kKGxpbmVOdW1iZXIgKyAxKTsKKyAgICBp
ZiAoYnJlYWtzSXQgPT0gaXQtPnZhbHVlLmVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICBib29sIGhpdCA9IGZhbHNlOwotICAgIGNvbnN0IEJyZWFrcG9pbnRzSW5MaW5lJiBicmVh
a3NWZWN0b3IgPSBicmVha3NJdC0+c2Vjb25kOworICAgIGNvbnN0IEJyZWFrcG9pbnRzSW5MaW5l
JiBicmVha3NWZWN0b3IgPSBicmVha3NJdC0+dmFsdWU7CiAgICAgdW5zaWduZWQgYnJlYWtzQ291
bnQgPSBicmVha3NWZWN0b3Iuc2l6ZSgpOwogICAgIHVuc2lnbmVkIGk7CiAgICAgZm9yIChpID0g
MDsgaSA8IGJyZWFrc0NvdW50OyBpKyspIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCmluZGV4IGVhNzAyMjk1YjdlNjUzNmVk
NDQ2MTk4MzMzZDA4NzJkZDEyNDA1M2MuLjU3MzQ5ZWY2NWJiOGY3MjY5N2FmZTQ1N2Q2YmU0Y2Q1
NDEyNmQzNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6
ZWRTY3JpcHRWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFs
aXplZFNjcmlwdFZhbHVlLmNwcApAQCAtNDI1LDggKzQyNSw4IEBAIHByaXZhdGU6CiAgICAgICAg
IC8vIEhhbmRsZSBkdXBsaWNhdGUgcmVmZXJlbmNlcwogICAgICAgICBpZiAoZm91bmQgIT0gbV9v
YmplY3RQb29sLmVuZCgpKSB7CiAgICAgICAgICAgICB3cml0ZShPYmplY3RSZWZlcmVuY2VUYWcp
OwotICAgICAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludDMyX3Q+KGZvdW5kLT5zZWNvbmQp
IDwgbV9vYmplY3RQb29sLnNpemUoKSk7Ci0gICAgICAgICAgICB3cml0ZU9iamVjdEluZGV4KGZv
dW5kLT5zZWNvbmQpOworICAgICAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludDMyX3Q+KGZv
dW5kLT52YWx1ZSkgPCBtX29iamVjdFBvb2wuc2l6ZSgpKTsKKyAgICAgICAgICAgIHdyaXRlT2Jq
ZWN0SW5kZXgoZm91bmQtPnZhbHVlKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICB9CiAKQEAgLTY4Myw3ICs2ODMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIE9iamVj
dFBvb2w6Oml0ZXJhdG9yIGluZGV4ID0gbV90cmFuc2ZlcnJlZE1lc3NhZ2VQb3J0cy5maW5kKG9i
aik7CiAgICAgICAgICAgICAgICAgaWYgKGluZGV4ICE9IG1fdHJhbnNmZXJyZWRNZXNzYWdlUG9y
dHMuZW5kKCkpIHsKICAgICAgICAgICAgICAgICAgICAgd3JpdGUoTWVzc2FnZVBvcnRSZWZlcmVu
Y2VUYWcpOwotICAgICAgICAgICAgICAgICAgICB3cml0ZShpbmRleC0+c2Vjb25kKTsKKyAgICAg
ICAgICAgICAgICAgICAgd3JpdGUoaW5kZXgtPnZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIC8vIE1lc3Nh
Z2VQb3J0IG9iamVjdCBjb3VsZCBub3QgYmUgZm91bmQgaW4gdHJhbnNmZXJyZWQgbWVzc2FnZSBw
b3J0cwpAQCAtNjk5LDcgKzY5OSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgT2JqZWN0
UG9vbDo6aXRlcmF0b3IgaW5kZXggPSBtX3RyYW5zZmVycmVkQXJyYXlCdWZmZXJzLmZpbmQob2Jq
KTsKICAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT0gbV90cmFuc2ZlcnJlZEFycmF5QnVmZmVy
cy5lbmQoKSkgewogICAgICAgICAgICAgICAgICAgICB3cml0ZShBcnJheUJ1ZmZlclRyYW5zZmVy
VGFnKTsKLSAgICAgICAgICAgICAgICAgICAgd3JpdGUoaW5kZXgtPnNlY29uZCk7CisgICAgICAg
ICAgICAgICAgICAgIHdyaXRlKGluZGV4LT52YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoIXN0YXJ0
T2JqZWN0SW50ZXJuYWwob2JqKSkgLy8gaGFuZGxlIGR1cGxpY2F0ZXMKQEAgLTc5Niw3ICs3OTYs
NyBAQCBwcml2YXRlOgogICAgICAgICBTdHJpbmdDb25zdGFudFBvb2w6OkFkZFJlc3VsdCBhZGRS
ZXN1bHQgPSBtX2NvbnN0YW50UG9vbC5hZGQoc3RyLmltcGwoKSwgbV9jb25zdGFudFBvb2wuc2l6
ZSgpKTsKICAgICAgICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSkgewogICAgICAgICAgICAg
d3JpdGUoU3RyaW5nUG9vbFRhZyk7Ci0gICAgICAgICAgICB3cml0ZVN0cmluZ0luZGV4KGFkZFJl
c3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKKyAgICAgICAgICAgIHdyaXRlU3RyaW5nSW5kZXgoYWRk
UmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9yVjgucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JW
OC5wbQppbmRleCAyMzc2MGIxZTBjNWQxODM1MGFlOTJmODRiODJiOWRjZWI4NjJjMTQ3Li5kNmM0
MGE1ZWI3ODMzNmQ3N2UzZjUzN2I4MDQ3MjI2YzU2ZWNkMjc5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQpAQCAtMjk3Nyw3ICsy
OTc3LDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+ICR7Y2xhc3NOYW1l
fTo6R2V0UmF3VGVtcGxhdGUoKQogICAgIFY4UGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOFBlcklz
b2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6
Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAg
ICAgaWYgKHJlc3VsdCAhPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICBy
ZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAg
ICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpG
dW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9IGNyZWF0ZVJhd1RlbXBsYXRlKCk7CkBAIC0yOTkwLDcg
KzI5OTAsNyBAQCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gJHtjbGFzc05h
bWV9OjpHZXRUZW1wbGF0ZSgpCiAgICAgVjhQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4UGVySXNv
bGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOFBlcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6
aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+dGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBp
ZiAocmVzdWx0ICE9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiBy
ZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6
SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9u
VGVtcGxhdGU+IHRlbXBsID0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9WOC9WOEZsb2F0NjRBcnJheS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVjgvVjhGbG9hdDY0QXJyYXkuY3BwCmluZGV4IGJkYTQ3YTVhY2RlYjll
YmY3YWVkYmQxZjNkMzNjZjlkMTU0ZjQ0MGQuLjFiZjY4MjQyYWE1NzE2NjAwMTZhOGZmYTllYWM4
YjExYmFkOTY2MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOEZsb2F0NjRBcnJheS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Y4L1Y4RmxvYXQ2NEFycmF5LmNwcApAQCAtMTE5LDcgKzExOSw3IEBAIHY4
OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOEZsb2F0NjRBcnJheTo6R2V0UmF3
VGVtcGxhdGUoKQogICAgIFY4UGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOFBlcklzb2xhdGVEYXRh
OjpjdXJyZW50KCk7CiAgICAgVjhQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9y
IHJlc3VsdCA9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJl
c3VsdCAhPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVz
dWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6Okhh
bmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRl
bXBsYXRlPiB0ZW1wbCA9IGNyZWF0ZVJhd1RlbXBsYXRlKCk7CkBAIC0xMzIsNyArMTMyLDcgQEAg
djg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4RmxvYXQ2NEFycmF5OjpHZXRU
ZW1wbGF0ZSgpCiAgICAgVjhQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4UGVySXNvbGF0ZURhdGE6
OmN1cnJlbnQoKTsKICAgICBWOFBlcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3Ig
cmVzdWx0ID0gZGF0YS0+dGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0
ICE9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNl
Y29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2Nv
cGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+
IHRlbXBsID0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9WOC9WOFRlc3RBY3RpdmVET01PYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEFjdGl2ZURPTU9iamVjdC5jcHAKaW5kZXggNmU0YmU3NTc5
NzZhZWYzMzNmOGE4ZDA5YmFjZTc0YzRlNWY3MTQwNi4uNTExMjU0ZWFkNTI4MjBmMzgwY2YwZTkw
OGU3ODgzOGNmZDQ4MTc4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Y4L1Y4VGVzdEFjdGl2ZURPTU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEFjdGl2ZURPTU9iamVjdC5jcHAKQEAg
LTE0OCw3ICsxNDgsNyBAQCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhU
ZXN0QWN0aXZlRE9NT2JqZWN0OjpHZXRSYXdUZW1wbGF0ZSgpCiAgICAgVjhQZXJJc29sYXRlRGF0
YSogZGF0YSA9IFY4UGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOFBlcklzb2xhdGVE
YXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+cmF3VGVtcGxhdGVNYXAo
KS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCku
ZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6
OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0gY3JlYXRlUmF3VGVtcGxh
dGUoKTsKQEAgLTE2MSw3ICsxNjEsNyBAQCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1w
bGF0ZT4gVjhUZXN0QWN0aXZlRE9NT2JqZWN0OjpHZXRUZW1wbGF0ZSgpCiAgICAgVjhQZXJJc29s
YXRlRGF0YSogZGF0YSA9IFY4UGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOFBlcklz
b2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+dGVtcGxhdGVN
YXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnRlbXBsYXRlTWFwKCku
ZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6
OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RDdXN0b21OYW1lZEdl
dHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0
Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwCmluZGV4IDg5NzVjZjYzMjVlMjA2ZTM3MDg2MjQzMzljOGUz
MmFkZjdmMTBkY2IuLmU0ZDJmN2Q0YzRhYzdmZDAwZGU3ZGRkM2ZiZjM2NDJmMGJjNjg5OWQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RD
dXN0b21OYW1lZEdldHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Y4L1Y4VGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcApAQCAtODIsNyArODIsNyBAQCB2
ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0Q3VzdG9tTmFtZWRHZXR0
ZXI6OkdldFJhd1RlbXBsYXRlKCkKICAgICBWOFBlcklzb2xhdGVEYXRhKiBkYXRhID0gVjhQZXJJ
c29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4UGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFw
OjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwog
ICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAg
cmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAog
ICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6
RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPSBjcmVhdGVSYXdUZW1wbGF0ZSgpOwpAQCAtOTUsNyAr
OTUsNyBAQCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0Q3VzdG9t
TmFtZWRHZXR0ZXI6OkdldFRlbXBsYXRlKCkKICAgICBWOFBlcklzb2xhdGVEYXRhKiBkYXRhID0g
VjhQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4UGVySXNvbGF0ZURhdGE6OlRlbXBs
YXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8p
OwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+dGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAg
cmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAog
ICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6
RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50Q29uc3RydWN0b3Iu
Y3BwCmluZGV4IGZlM2ViNGZmZjA1MDY4ZjQwZDJjNzViNTExMTExMjU2NDEwMTVlMTIuLjMyNjM4
M2MzOTkyM2E1NjY3ZDRjZWM5OWU1MGQ1ZDVmYmViZDA3NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudENvbnN0cnVjdG9yLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZl
bnRDb25zdHJ1Y3Rvci5jcHAKQEAgLTExOSw3ICsxMTksNyBAQCB2ODo6UGVyc2lzdGVudDx2ODo6
RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6R2V0UmF3VGVtcGxhdGUo
KQogICAgIFY4UGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOFBlcklzb2xhdGVEYXRhOjpjdXJyZW50
KCk7CiAgICAgVjhQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9
IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBk
YXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNv
bmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3Bl
IGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0
ZW1wbCA9IGNyZWF0ZVJhd1RlbXBsYXRlKCk7CkBAIC0xMzIsNyArMTMyLDcgQEAgdjg6OlBlcnNp
c3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdEV2ZW50Q29uc3RydWN0b3I6OkdldFRl
bXBsYXRlKCkKICAgICBWOFBlcklzb2xhdGVEYXRhKiBkYXRhID0gVjhQZXJJc29sYXRlRGF0YTo6
Y3VycmVudCgpOwogICAgIFY4UGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciBy
ZXN1bHQgPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwogICAgIGlmIChyZXN1bHQg
IT0gZGF0YS0+dGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vj
b25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVTY29w
ZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4g
dGVtcGwgPQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Y4L1Y4VGVzdEV2ZW50VGFyZ2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9WOC9WOFRlc3RFdmVudFRhcmdldC5jcHAKaW5kZXggMTk0MGQ3ZGJkYmVhODQyMmQ3
YzYzZTgxYzhhYTE0ZDM4ZTI4ZTQwYi4uZWRiZWYzYmJhNzQwYjlhMTY0MmZlM2ZlZDFiMzk1NWY3
NjU5NjlhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Y4L1Y4VGVzdEV2ZW50VGFyZ2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRUYXJnZXQuY3BwCkBAIC0xNDMsNyArMTQzLDcgQEAg
djg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdEV2ZW50VGFyZ2V0OjpH
ZXRSYXdUZW1wbGF0ZSgpCiAgICAgVjhQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4UGVySXNvbGF0
ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOFBlcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRl
cmF0b3IgcmVzdWx0ID0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBp
ZiAocmVzdWx0ICE9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVy
biByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2
ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0
aW9uVGVtcGxhdGU+IHRlbXBsID0gY3JlYXRlUmF3VGVtcGxhdGUoKTsKQEAgLTE1Niw3ICsxNTYs
NyBAQCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0RXZlbnRUYXJn
ZXQ6OkdldFRlbXBsYXRlKCkKICAgICBWOFBlcklzb2xhdGVEYXRhKiBkYXRhID0gVjhQZXJJc29s
YXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4UGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjpp
dGVyYXRvciByZXN1bHQgPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwogICAgIGlm
IChyZXN1bHQgIT0gZGF0YS0+dGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHJl
c3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAogICAgIHY4OjpI
YW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25U
ZW1wbGF0ZT4gdGVtcGwgPQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Y4L1Y4VGVzdEV4Y2VwdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXhjZXB0aW9uLmNwcAppbmRleCA5Mzc1Y2UzMTA2Mzk0
NDY0MGM1YjBmNmY3NzFiYTE4MDkzODY5MzA1Li41MGE4N2Q2NjRiMmI4ODM2YWZkN2Y1NTIyMGY4
M2QwNDM2ZDM3MWQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVjgvVjhUZXN0RXhjZXB0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXhjZXB0aW9uLmNwcApAQCAtNzMsNyArNzMsNyBAQCB2
ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0RXhjZXB0aW9uOjpHZXRS
YXdUZW1wbGF0ZSgpCiAgICAgVjhQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4UGVySXNvbGF0ZURh
dGE6OmN1cnJlbnQoKTsKICAgICBWOFBlcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0
b3IgcmVzdWx0ID0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAo
cmVzdWx0ICE9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiBy
ZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6
SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9u
VGVtcGxhdGU+IHRlbXBsID0gY3JlYXRlUmF3VGVtcGxhdGUoKTsKQEAgLTg2LDcgKzg2LDcgQEAg
djg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdEV4Y2VwdGlvbjo6R2V0
VGVtcGxhdGUoKQogICAgIFY4UGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOFBlcklzb2xhdGVEYXRh
OjpjdXJyZW50KCk7CiAgICAgVjhQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9y
IHJlc3VsdCA9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3Vs
dCAhPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5z
ZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNj
b3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRl
PiB0ZW1wbCA9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVjgvVjhUZXN0SW50ZXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9WOC9WOFRlc3RJbnRlcmZhY2UuY3BwCmluZGV4IDAwOThkNWViMGI4NDhkNjgxNjYx
YjAzNTlkOWE4YzMwMzU4Mjg3YTkuLmMwMmE4ODU2NTk4OWJhNTdiM2EyMTQzNGFlOWMyZWRlY2Vj
ZTg0OTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9W
OC9WOFRlc3RJbnRlcmZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9WOC9WOFRlc3RJbnRlcmZhY2UuY3BwCkBAIC0zMTIsNyArMzEyLDcgQEAgdjg6OlBl
cnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdEludGVyZmFjZTo6R2V0UmF3VGVt
cGxhdGUoKQogICAgIFY4UGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOFBlcklzb2xhdGVEYXRhOjpj
dXJyZW50KCk7CiAgICAgVjhQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJl
c3VsdCA9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3Vs
dCAhPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0
LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRs
ZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBs
YXRlPiB0ZW1wbCA9IGNyZWF0ZVJhd1RlbXBsYXRlKCk7CkBAIC0zMjUsNyArMzI1LDcgQEAgdjg6
OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdEludGVyZmFjZTo6R2V0VGVt
cGxhdGUoKQogICAgIFY4UGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOFBlcklzb2xhdGVEYXRhOjpj
dXJyZW50KCk7CiAgICAgVjhQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJl
c3VsdCA9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAh
PSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNv
bmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3Bl
IGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0
ZW1wbCA9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VjgvVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAKaW5k
ZXggYWMxMTY3OTk4ZDA4Yzc1ZDQ2Zjg3NjAxOWM3ODllNDdlMmNiN2EzZi4uZGQ4YzU5MmFhOTBk
NzY0ZTAxM2Q3ODk3NDFjYmFlNjFmOWJhZGYyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RNZWRp
YVF1ZXJ5TGlzdExpc3RlbmVyLmNwcApAQCAtODIsNyArODIsNyBAQCB2ODo6UGVyc2lzdGVudDx2
ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6R2V0UmF3
VGVtcGxhdAogICAgIFY4UGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOFBlcklzb2xhdGVEYXRhOjpj
dXJyZW50KCk7CiAgICAgVjhQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJl
c3VsdCA9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3Vs
dCAhPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0
LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRs
ZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBs
YXRlPiB0ZW1wbCA9IGNyZWF0ZVJhd1RlbXBsYXRlKCk7CkBAIC05NSw3ICs5NSw3IEBAIHY4OjpQ
ZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3Rl
bmVyOjpHZXRUZW1wbGF0ZSgpCiAgICAgVjhQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4UGVySXNv
bGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOFBlcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6
aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+dGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBp
ZiAocmVzdWx0ICE9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiBy
ZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6
SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9u
VGVtcGxhdGU+IHRlbXBsID0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9WOC9WOFRlc3ROYW1lZENvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROYW1lZENvbnN0cnVjdG9yLmNwcAppbmRl
eCA3YTc0ZjU4Mjc5MmE4MTY4MWU0MjJlY2RlYWQ0NWIxNjRmY2M4MTc5Li42NzYzNWNmZjNkY2Vj
YmIzYWY1OTI5ZGUzZjIwNzZhN2FkOGYxYzE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5hbWVkQ29uc3Ry
dWN0b3IuY3BwCkBAIC0xMjIsNyArMTIyLDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9u
VGVtcGxhdGU+IFY4VGVzdE5hbWVkQ29uc3RydWN0b3I6OkdldFJhd1RlbXBsYXRlKCkKICAgICBW
OFBlcklzb2xhdGVEYXRhKiBkYXRhID0gVjhQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAg
IFY4UGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT5y
YXdUZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+cmF3
VGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAg
ICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVT
Y29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPSBj
cmVhdGVSYXdUZW1wbGF0ZSgpOwpAQCAtMTM1LDcgKzEzNSw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4
OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3ROYW1lZENvbnN0cnVjdG9yOjpHZXRUZW1wbGF0ZSgp
CiAgICAgVjhQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4UGVySXNvbGF0ZURhdGE6OmN1cnJlbnQo
KTsKICAgICBWOFBlcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0g
ZGF0YS0+dGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEt
PnRlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxl
U2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3ROb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3ROb2RlLmNwcAppbmRleCBjZTQyZjkyZWQ5ZjY5ZjQ0OTBkNjBjNjcyMWRkYTY5MDlkMmFjMTMw
Li40OTBmOTExN2FkYmY2MTc2NmE5OWIzYjYwOWI1ZDBhZGJlM2E1ZGFmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Tm9kZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5vZGUuY3Bw
CkBAIC04MSw3ICs4MSw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBW
OFRlc3ROb2RlOjpHZXRSYXdUZW1wbGF0ZSgpCiAgICAgVjhQZXJJc29sYXRlRGF0YSogZGF0YSA9
IFY4UGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOFBlcklzb2xhdGVEYXRhOjpUZW1w
bGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5maW5kKCZp
bmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZW5kKCkpCi0g
ICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFs
dWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3Rl
bnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0gY3JlYXRlUmF3VGVtcGxhdGUoKTsKQEAg
LTk0LDcgKzk0LDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVz
dE5vZGU6OkdldFRlbXBsYXRlKCkKICAgICBWOFBlcklzb2xhdGVEYXRhKiBkYXRhID0gVjhQZXJJ
c29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4UGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFw
OjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwogICAg
IGlmIChyZXN1bHQgIT0gZGF0YS0+dGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJu
IHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAogICAgIHY4
OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rp
b25UZW1wbGF0ZT4gdGVtcGwgPQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcAppbmRleCAzN2Q3MzkzOTM0NGZjN2EwMDliNzE2
ZTcyM2MyNzNjMTc3ZjQyYWRjLi4yODUyYTFjNDlmMjIyZjZjMjkwNmY5Y2I0ODhhNGFiOGUwYmI4
NmE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgv
VjhUZXN0T2JqLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VjgvVjhUZXN0T2JqLmNwcApAQCAtMjI2Nyw3ICsyMjY3LDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6
OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdE9iajo6R2V0UmF3VGVtcGxhdGUoKQogICAgIFY4UGVy
SXNvbGF0ZURhdGEqIGRhdGEgPSBWOFBlcklzb2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhQ
ZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnJhd1Rl
bXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT5yYXdUZW1w
bGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAg
IHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3Bl
OwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9IGNyZWF0
ZVJhd1RlbXBsYXRlKCk7CkBAIC0yMjgwLDcgKzIyODAsNyBAQCB2ODo6UGVyc2lzdGVudDx2ODo6
RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0T2JqOjpHZXRUZW1wbGF0ZSgpCiAgICAgVjhQZXJJc29s
YXRlRGF0YSogZGF0YSA9IFY4UGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOFBlcklz
b2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+dGVtcGxhdGVN
YXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnRlbXBsYXRlTWFwKCku
ZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6
OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Y4L1Y4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKaW5kZXggYWU4
ZDE4ZDQ1Y2ZkYzVhYzQ5YTNhZGRiYzQxZjRjZjUyYjlhZGVhZS4uOTg2M2Q3NDFhZGU2ZjQzYWE1
ZWIwMTY1NzBiNDNkNmIyZjcwMTVkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKQEAgLTI2NSw3ICsyNjUsNyBAQCB2ODo6
UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlOjpHZXRSYQogICAgIFY4UGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOFBlcklz
b2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6
Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAg
ICAgaWYgKHJlc3VsdCAhPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICBy
ZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAg
ICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpG
dW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9IGNyZWF0ZVJhd1RlbXBsYXRlKCk7CkBAIC0yNzgsNyAr
Mjc4LDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6R2V0VGUKICAgICBWOFBlcklzb2xhdGVEYXRhKiBk
YXRhID0gVjhQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4UGVySXNvbGF0ZURhdGE6
OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmZpbmQo
JmluZm8pOwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+dGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1
ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVu
dDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvRE9NV3JhcHBlcldvcmxkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L0RPTVdyYXBwZXJXb3JsZC5jcHAKaW5kZXggMzFhMDI4NmM0NTFmNzY3ZGNkM2ViNDQx
YTdmZThjMTNmY2NjYjMxZi4uNTI3Mzc5NjM3NGU5ZTI4ZjA0NDg4MDQ2OWI3NzIyMDY5M2YyMThj
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NV3JhcHBlcldvcmxk
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01XcmFwcGVyV29ybGQuY3Bw
CkBAIC04Miw3ICs4Miw3IEBAIHZvaWQgRE9NV3JhcHBlcldvcmxkOjpkZWFsbG9jYXRlKERPTVdy
YXBwZXJXb3JsZCogd29ybGQpCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQotICAgIEFTU0VSVChpLT5zZWNvbmQgPT0gd29ybGQpOworICAgIEFT
U0VSVChpLT52YWx1ZSA9PSB3b3JsZCk7CiAKICAgICBtYXAucmVtb3ZlKGkpOwogICAgIGlzb2xh
dGVkV29ybGRDb3VudC0tOwpAQCAtMTAxLDkgKzEwMSw5IEBAIFBhc3NSZWZQdHI8RE9NV3JhcHBl
cldvcmxkPiBET01XcmFwcGVyV29ybGQ6OmdldE9yQ3JlYXRlSXNvbGF0ZWRXb3JsZChpbnQgd29y
bGRJCiAgICAgZWxzZSB7CiAgICAgICAgIFdvcmxkTWFwOjppdGVyYXRvciBpID0gbWFwLmZpbmQo
d29ybGRJZCk7CiAgICAgICAgIGlmIChpICE9IG1hcC5lbmQoKSkgewotICAgICAgICAgICAgQVNT
RVJUKGktPnNlY29uZC0+d29ybGRJZCgpID09IHdvcmxkSWQpOwotICAgICAgICAgICAgQVNTRVJU
KGktPnNlY29uZC0+ZXh0ZW5zaW9uR3JvdXAoKSA9PSBleHRlbnNpb25Hcm91cCk7Ci0gICAgICAg
ICAgICByZXR1cm4gaS0+c2Vjb25kOworICAgICAgICAgICAgQVNTRVJUKGktPnZhbHVlLT53b3Js
ZElkKCkgPT0gd29ybGRJZCk7CisgICAgICAgICAgICBBU1NFUlQoaS0+dmFsdWUtPmV4dGVuc2lv
bkdyb3VwKCkgPT0gZXh0ZW5zaW9uR3JvdXApOworICAgICAgICAgICAgcmV0dXJuIGktPnZhbHVl
OwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9OUFY4T2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L05QVjhPYmpl
Y3QuY3BwCmluZGV4IGEzMmI0NGVhNTk2OTA0MzZjOTQ1MTczNzM1ZDNlOTU5MDk0ZDYwY2QuLmI1
ZjNjNjZiMzNiN2M1ODIzZGYwNTRhZjU3ODJiNTA5OWUwN2Y2MDIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L05QVjhPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L05QVjhPYmplY3QuY3BwCkBAIC04Niw3ICs4Niw3IEBAIHN0YXRpYyB2b2lk
IGZyZWVWOE5QT2JqZWN0KE5QT2JqZWN0KiBucE9iamVjdCkKICAgICBpZiAoaW50IHY4T2JqZWN0
SGFzaCA9IHY4TnBPYmplY3QtPnY4T2JqZWN0LT5HZXRJZGVudGl0eUhhc2goKSkgewogICAgICAg
ICBWOE5QT2JqZWN0TWFwOjppdGVyYXRvciBpdGVyID0gc3RhdGljVjhOUE9iamVjdE1hcCgpLT5m
aW5kKHY4T2JqZWN0SGFzaCk7CiAgICAgICAgIGlmIChpdGVyICE9IHN0YXRpY1Y4TlBPYmplY3RN
YXAoKS0+ZW5kKCkpIHsKLSAgICAgICAgICAgIFY4TlBPYmplY3RWZWN0b3ImIG9iamVjdHMgPSBp
dGVyLT5zZWNvbmQ7CisgICAgICAgICAgICBWOE5QT2JqZWN0VmVjdG9yJiBvYmplY3RzID0gaXRl
ci0+dmFsdWU7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgb2Jq
ZWN0cy5zaXplKCk7ICsraW5kZXgpIHsKICAgICAgICAgICAgICAgICBpZiAob2JqZWN0cy5hdChp
bmRleCkgPT0gdjhOcE9iamVjdCkgewogICAgICAgICAgICAgICAgICAgICBvYmplY3RzLnJlbW92
ZShpbmRleCk7CkBAIC0xNjEsNyArMTYxLDcgQEAgTlBPYmplY3QqIG5wQ3JlYXRlVjhTY3JpcHRP
YmplY3QoTlBQIG5wcCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBvYmplY3QsIERPTVdpbmQKICAg
ICBBU1NFUlQodjhPYmplY3RIYXNoKTsKICAgICBWOE5QT2JqZWN0TWFwOjppdGVyYXRvciBpdGVy
ID0gc3RhdGljVjhOUE9iamVjdE1hcCgpLT5maW5kKHY4T2JqZWN0SGFzaCk7CiAgICAgaWYgKGl0
ZXIgIT0gc3RhdGljVjhOUE9iamVjdE1hcCgpLT5lbmQoKSkgewotICAgICAgICBWOE5QT2JqZWN0
VmVjdG9yJiBvYmplY3RzID0gaXRlci0+c2Vjb25kOworICAgICAgICBWOE5QT2JqZWN0VmVjdG9y
JiBvYmplY3RzID0gaXRlci0+dmFsdWU7CiAgICAgICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsg
aW5kZXggPCBvYmplY3RzLnNpemUoKTsgKytpbmRleCkgewogICAgICAgICAgICAgVjhOUE9iamVj
dCogdjhucE9iamVjdCA9IG9iamVjdHMuYXQoaW5kZXgpOwogICAgICAgICAgICAgaWYgKHY4bnBP
YmplY3QtPnJvb3RPYmplY3QgPT0gcm9vdCkgewpAQCAtMTgxLDcgKzE4MSw3IEBAIE5QT2JqZWN0
KiBucENyZWF0ZVY4U2NyaXB0T2JqZWN0KE5QUCBucHAsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
b2JqZWN0LCBET01XaW5kCiAjZW5kaWYKICAgICB2OG5wT2JqZWN0LT5yb290T2JqZWN0ID0gcm9v
dDsKIAotICAgIGl0ZXItPnNlY29uZC5hcHBlbmQodjhucE9iamVjdCk7CisgICAgaXRlci0+dmFs
dWUuYXBwZW5kKHY4bnBPYmplY3QpOwogCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8TlBP
YmplY3QqPih2OG5wT2JqZWN0KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
U2NyaXB0Q29udHJvbGxlci5jcHAKaW5kZXggNDdlMDFhMGUxYjA1MTcwMTgwN2QxOTY4YjIyNzI4
OGUwM2I2Y2VhNS4uYTQ5M2IzMzgyMDIwNmRjMTYxOTZhMWM1ZmMzMWFkZTM3OTc2NDg0YSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAKQEAg
LTEyOCw4ICsxMjgsOCBAQCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmNsZWFyU2NyaXB0T2JqZWN0
cygpCiB7CiAgICAgUGx1Z2luT2JqZWN0TWFwOjppdGVyYXRvciBpdCA9IG1fcGx1Z2luT2JqZWN0
cy5iZWdpbigpOwogICAgIGZvciAoOyBpdCAhPSBtX3BsdWdpbk9iamVjdHMuZW5kKCk7ICsraXQp
IHsKLSAgICAgICAgX05QTl9VbnJlZ2lzdGVyT2JqZWN0KGl0LT5zZWNvbmQpOwotICAgICAgICBf
TlBOX1JlbGVhc2VPYmplY3QoaXQtPnNlY29uZCk7CisgICAgICAgIF9OUE5fVW5yZWdpc3Rlck9i
amVjdChpdC0+dmFsdWUpOworICAgICAgICBfTlBOX1JlbGVhc2VPYmplY3QoaXQtPnZhbHVlKTsK
ICAgICB9CiAgICAgbV9wbHVnaW5PYmplY3RzLmNsZWFyKCk7CiAKQEAgLTE1Nyw3ICsxNTcsNyBA
QCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OnJlc2V0SXNvbGF0ZWRXb3JsZHMoKQogewogICAgIGZv
ciAoSXNvbGF0ZWRXb3JsZE1hcDo6aXRlcmF0b3IgaXRlciA9IG1faXNvbGF0ZWRXb3JsZHMuYmVn
aW4oKTsKICAgICAgICAgIGl0ZXIgIT0gbV9pc29sYXRlZFdvcmxkcy5lbmQoKTsgKytpdGVyKSB7
Ci0gICAgICAgIGl0ZXItPnNlY29uZC0+ZGVzdHJveSgpOworICAgICAgICBpdGVyLT52YWx1ZS0+
ZGVzdHJveSgpOwogICAgIH0KICAgICBtX2lzb2xhdGVkV29ybGRzLmNsZWFyKCk7CiAgICAgbV9p
c29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW5zLmNsZWFyKCk7CkBAIC0zNDQsNyArMzQ0LDcgQEAg
dm9pZCBTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCh1bnNpZ25lZCB3
b3JsZElELCBjb25zdCBWZWN0b3I8U2MKICAgICAgICAgaWYgKHdvcmxkSUQgPiAwKSB7CiAgICAg
ICAgICAgICBJc29sYXRlZFdvcmxkTWFwOjppdGVyYXRvciBpdGVyID0gbV9pc29sYXRlZFdvcmxk
cy5maW5kKHdvcmxkSUQpOwogICAgICAgICAgICAgaWYgKGl0ZXIgIT0gbV9pc29sYXRlZFdvcmxk
cy5lbmQoKSkKLSAgICAgICAgICAgICAgICBpc29sYXRlZENvbnRleHQgPSBpdGVyLT5zZWNvbmQ7
CisgICAgICAgICAgICAgICAgaXNvbGF0ZWRDb250ZXh0ID0gaXRlci0+dmFsdWU7CiAgICAgICAg
ICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBpc29sYXRlZENvbnRleHQgPSBuZXcgVjhJc29s
YXRlZENvbnRleHQobV9mcmFtZSwgRE9NV3JhcHBlcldvcmxkOjpnZXRPckNyZWF0ZUlzb2xhdGVk
V29ybGQod29ybGRJRCwgZXh0ZW5zaW9uR3JvdXApKTsKICAgICAgICAgICAgICAgICBpZiAoaXNv
bGF0ZWRDb250ZXh0LT5jb250ZXh0KCkuSXNFbXB0eSgpKSB7CkBAIC0zNTgsNyArMzU4LDcgQEAg
dm9pZCBTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCh1bnNpZ25lZCB3
b3JsZElELCBjb25zdCBWZWN0b3I8U2MKIAogICAgICAgICAgICAgSXNvbGF0ZWRXb3JsZFNlY3Vy
aXR5T3JpZ2luTWFwOjppdGVyYXRvciBzZWN1cml0eU9yaWdpbkl0ZXIgPSBtX2lzb2xhdGVkV29y
bGRTZWN1cml0eU9yaWdpbnMuZmluZCh3b3JsZElEKTsKICAgICAgICAgICAgIGlmIChzZWN1cml0
eU9yaWdpbkl0ZXIgIT0gbV9pc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW5zLmVuZCgpKQotICAg
ICAgICAgICAgICAgIGlzb2xhdGVkQ29udGV4dC0+c2V0U2VjdXJpdHlPcmlnaW4oc2VjdXJpdHlP
cmlnaW5JdGVyLT5zZWNvbmQpOworICAgICAgICAgICAgICAgIGlzb2xhdGVkQ29udGV4dC0+c2V0
U2VjdXJpdHlPcmlnaW4oc2VjdXJpdHlPcmlnaW5JdGVyLT52YWx1ZSk7CiAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICBpc29sYXRlZENvbnRleHQgPSBuZXcgVjhJc29sYXRlZENvbnRleHQo
bV9mcmFtZSwgRE9NV3JhcHBlcldvcmxkOjpnZXRPckNyZWF0ZUlzb2xhdGVkV29ybGQod29ybGRJ
RCwgZXh0ZW5zaW9uR3JvdXApKTsKICAgICAgICAgICAgIGlmIChpc29sYXRlZENvbnRleHQtPmNv
bnRleHQoKS5Jc0VtcHR5KCkpIHsKQEAgLTM5Niw3ICszOTYsNyBAQCB2b2lkIFNjcmlwdENvbnRy
b2xsZXI6OnNldElzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbihpbnQgd29ybGRJRCwgUGFzc1Jl
ZlB0cjxTZQogICAgIG1faXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2lucy5zZXQod29ybGRJRCwg
c2VjdXJpdHlPcmlnaW4pOwogICAgIElzb2xhdGVkV29ybGRNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBt
X2lzb2xhdGVkV29ybGRzLmZpbmQod29ybGRJRCk7CiAgICAgaWYgKGl0ZXIgIT0gbV9pc29sYXRl
ZFdvcmxkcy5lbmQoKSkKLSAgICAgICAgaXRlci0+c2Vjb25kLT5zZXRTZWN1cml0eU9yaWdpbihz
ZWN1cml0eU9yaWdpbik7CisgICAgICAgIGl0ZXItPnZhbHVlLT5zZXRTZWN1cml0eU9yaWdpbihz
ZWN1cml0eU9yaWdpbik7CiB9CiAKIFRleHRQb3NpdGlvbiBTY3JpcHRDb250cm9sbGVyOjpldmVu
dEhhbmRsZXJQb3NpdGlvbigpIGNvbnN0CkBAIC01NDYsOCArNTQ2LDggQEAgdm9pZCBTY3JpcHRD
b250cm9sbGVyOjpjbGVhbnVwU2NyaXB0T2JqZWN0c0ZvclBsdWdpbihXaWRnZXQqIG5hdGl2ZUhh
bmRsZSkKICAgICBQbHVnaW5PYmplY3RNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wbHVnaW5PYmplY3Rz
LmZpbmQobmF0aXZlSGFuZGxlKTsKICAgICBpZiAoaXQgPT0gbV9wbHVnaW5PYmplY3RzLmVuZCgp
KQogICAgICAgICByZXR1cm47Ci0gICAgX05QTl9VbnJlZ2lzdGVyT2JqZWN0KGl0LT5zZWNvbmQp
OwotICAgIF9OUE5fUmVsZWFzZU9iamVjdChpdC0+c2Vjb25kKTsKKyAgICBfTlBOX1VucmVnaXN0
ZXJPYmplY3QoaXQtPnZhbHVlKTsKKyAgICBfTlBOX1JlbGVhc2VPYmplY3QoaXQtPnZhbHVlKTsK
ICAgICBtX3BsdWdpbk9iamVjdHMucmVtb3ZlKGl0KTsKIH0KIApAQCAtNjYzLDcgKzY2Myw3IEBA
IHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6Y29sbGVjdElzb2xhdGVkQ29udGV4dHMoVmVjdG9yPHN0
ZDo6cGFpcjxTY3JpcHRTdGF0ZSosIFNlCiB7CiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNj
b3BlOwogICAgIGZvciAoSXNvbGF0ZWRXb3JsZE1hcDo6aXRlcmF0b3IgaXQgPSBtX2lzb2xhdGVk
V29ybGRzLmJlZ2luKCk7IGl0ICE9IG1faXNvbGF0ZWRXb3JsZHMuZW5kKCk7ICsraXQpIHsKLSAg
ICAgICAgVjhJc29sYXRlZENvbnRleHQqIGlzb2xhdGVkQ29udGV4dCA9IGl0LT5zZWNvbmQ7Cisg
ICAgICAgIFY4SXNvbGF0ZWRDb250ZXh0KiBpc29sYXRlZENvbnRleHQgPSBpdC0+dmFsdWU7CiAg
ICAgICAgIGlmICghaXNvbGF0ZWRDb250ZXh0LT5zZWN1cml0eU9yaWdpbigpKQogICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IHY4Q29udGV4dCA9
IGlzb2xhdGVkQ29udGV4dC0+Y29udGV4dCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKaW5kZXggYTliMzljZTExOTM2NTM1
MGNhYzhjNzYyZThiYWIwMDNmNTQzZjk0ZC4uNjc2ZWQ2ZDIwODc0ZjM3OWI1Y2VlZGZkNzI0Mjdh
YjliYjMxM2ZkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2VyaWFs
aXplZFNjcmlwdFZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TZXJp
YWxpemVkU2NyaXB0VmFsdWUuY3BwCkBAIC0xMDgsNyArMTA4LDcgQEAgcHVibGljOgogICAgIHsK
ICAgICAgICAgdHlwZW5hbWUgSGFuZGxlVG9UOjppdGVyYXRvciByZXN1bHQgPSBtX21hcC5maW5k
KCpoYW5kbGUpOwogICAgICAgICBpZiAocmVzdWx0ICE9IG1fbWFwLmVuZCgpKSB7Ci0gICAgICAg
ICAgICAqdmFsdWVPdXQgPSByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgICAgICp2YWx1ZU91dCA9
IHJlc3VsdC0+dmFsdWU7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAg
ICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9WOERPTU1hcC5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01NYXAuaAppbmRl
eCBjYzc2ZmZhNTMxZWEzYTIwNWIwZjExZDUxNTFiMjAxZTBlMjA3N2M0Li4zOGI1MTQyNzc3MzE4
YTRkNmZkNzA5NzNlZGUxOTBiYTM0NGI3OTJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9WOERPTU1hcC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
RE9NTWFwLmgKQEAgLTExMCw3ICsxMTAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IGJvb2wgcmVtb3ZlSWZQcmVzZW50KEtleVR5cGUqIGtleSwgdjg6OlBlcnNpc3RlbnQ8VmFsdWVU
eXBlPiB2YWx1ZSkKICAgICAgICAgewogICAgICAgICAgICAgdHlwZW5hbWUgSGFzaE1hcDxLZXlU
eXBlKiwgVmFsdWVUeXBlKj46Oml0ZXJhdG9yIGl0ID0gbV9tYXAuZmluZChrZXkpOwotICAgICAg
ICAgICAgaWYgKGl0ID09IG1fbWFwLmVuZCgpIHx8IGl0LT5zZWNvbmQgIT0gKnZhbHVlKQorICAg
ICAgICAgICAgaWYgKGl0ID09IG1fbWFwLmVuZCgpIHx8IGl0LT52YWx1ZSAhPSAqdmFsdWUpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICBtX21hcC5yZW1vdmUo
aXQpOwpAQCAtMTMwLDcgKzEzMCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAg
IHZpc2l0b3ItPnN0YXJ0TWFwKCk7CiAgICAgICAgICAgICB0eXBlbmFtZSBIYXNoTWFwPEtleVR5
cGUqLCBWYWx1ZVR5cGUqPjo6aXRlcmF0b3IgaXQgPSBtX21hcC5iZWdpbigpOwogICAgICAgICAg
ICAgZm9yICg7IGl0ICE9IG1fbWFwLmVuZCgpOyArK2l0KQotICAgICAgICAgICAgICAgIHZpc2l0
b3ItPnZpc2l0RE9NV3JhcHBlcihzdG9yZSwgaXQtPmZpcnN0LCB2ODo6UGVyc2lzdGVudDxWYWx1
ZVR5cGU+KGl0LT5zZWNvbmQpKTsKKyAgICAgICAgICAgICAgICB2aXNpdG9yLT52aXNpdERPTVdy
YXBwZXIoc3RvcmUsIGl0LT5rZXksIHY4OjpQZXJzaXN0ZW50PFZhbHVlVHlwZT4oaXQtPnZhbHVl
KSk7CiAgICAgICAgICAgICB2aXNpdG9yLT5lbmRNYXAoKTsKICAgICAgICAgfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEdDQ29udHJvbGxlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEdDQ29udHJvbGxlci5jcHAKaW5kZXggMmE4ODJkYzc2
ZTRlZGUzZjEzMjRjNDlmNDZmYmQ5MGRkMzdiN2E4OC4uYzJhYjc0ZDcxY2I4ZDZjZWI2MmU5NDY2
NzUzMjZmYzRhMzgyNzhiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
VjhHQ0NvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4R0ND
b250cm9sbGVyLmNwcApAQCAtMTAwLDkgKzEwMCw5IEBAIHN0YXRpYyB2b2lkIGVudW1lcmF0ZUds
b2JhbEhhbmRsZXMoKQogewogICAgIEdsb2JhbEhhbmRsZU1hcCYgZ2xvYmFsSGFuZGxlTWFwID0g
Y3VycmVudEdsb2JhbEhhbmRsZU1hcCgpOwogICAgIGZvciAoR2xvYmFsSGFuZGxlTWFwOjppdGVy
YXRvciBpdCA9IGdsb2JhbEhhbmRsZU1hcC5iZWdpbigpLCBlbmQgPSBnbG9iYWxIYW5kbGVNYXAu
ZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBHbG9iYWxIYW5kbGVJbmZvKiBpbmZv
ID0gaXQtPnNlY29uZDsKKyAgICAgICAgR2xvYmFsSGFuZGxlSW5mbyogaW5mbyA9IGl0LT52YWx1
ZTsKICAgICAgICAgVU5VU0VEX1BBUkFNKGluZm8pOwotICAgICAgICB2ODo6VmFsdWUqIGhhbmRs
ZSA9IGl0LT5maXJzdDsKKyAgICAgICAgdjg6OlZhbHVlKiBoYW5kbGUgPSBpdC0+a2V5OwogICAg
ICAgICBVTlVTRURfUEFSQU0oaGFuZGxlKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9WOFBlckNvbnRleHREYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1Y4UGVyQ29udGV4dERhdGEuY3BwCmluZGV4IGU1NzAyOWJmZDcyNGI4OTY1
NTY2NWVkMWI2NWRlMjE0NTQ2ODIwMTQuLjYzNWZmMjM3MWZjOTQxODlmMDM0ZTMzZWZlNzJlOTc2
ZjlmZDFhMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UGVyQ29u
dGV4dERhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UGVyQ29udGV4
dERhdGEuY3BwCkBAIC00MCw3ICs0MCw3IEBAIHZvaWQgVjhQZXJDb250ZXh0RGF0YTo6ZGlzcG9z
ZSgpCiAgICAgewogICAgICAgICBXcmFwcGVyQm9pbGVycGxhdGVNYXA6Oml0ZXJhdG9yIGl0ID0g
bV93cmFwcGVyQm9pbGVycGxhdGVzLmJlZ2luKCk7CiAgICAgICAgIGZvciAoOyBpdCAhPSBtX3dy
YXBwZXJCb2lsZXJwbGF0ZXMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgICAgIHY4OjpQZXJzaXN0
ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgdjg6OlBl
cnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlciA9IGl0LT52YWx1ZTsKICAgICAgICAgICAgIHdy
YXBwZXIuRGlzcG9zZSgpOwogICAgICAgICB9CiAgICAgICAgIG1fd3JhcHBlckJvaWxlcnBsYXRl
cy5jbGVhcigpOwpAQCAtNDksNyArNDksNyBAQCB2b2lkIFY4UGVyQ29udGV4dERhdGE6OmRpc3Bv
c2UoKQogICAgIHsKICAgICAgICAgQ29uc3RydWN0b3JNYXA6Oml0ZXJhdG9yIGl0ID0gbV9jb25z
dHJ1Y3Rvck1hcC5iZWdpbigpOwogICAgICAgICBmb3IgKDsgaXQgIT0gbV9jb25zdHJ1Y3Rvck1h
cC5lbmQoKTsgKytpdCkgewotICAgICAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9u
PiB3cmFwcGVyID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpG
dW5jdGlvbj4gd3JhcHBlciA9IGl0LT52YWx1ZTsKICAgICAgICAgICAgIHdyYXBwZXIuRGlzcG9z
ZSgpOwogICAgICAgICB9CiAgICAgICAgIG1fY29uc3RydWN0b3JNYXAuY2xlYXIoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L25wcnVudGltZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9ucHJ1bnRpbWUuY3BwCmluZGV4IDhkODBjZjkzMzE4NmU4NTQ3
YzE4NTE4M2Q3ZTc0ODRiY2UxZTg0YTMuLjJiMDM2N2NkMTVmMmE0ZmIxMTNkNGNjMGJmNzY3ZWM4
Y2YxYjBhNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L25wcnVudGlt
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvbnBydW50aW1lLmNwcApAQCAt
MTY0LDcgKzE2NCw3IEBAIE5QSWRlbnRpZmllciBfTlBOX0dldFN0cmluZ0lkZW50aWZpZXIoY29u
c3QgTlBVVEY4KiBuYW1lKQogICAgICAgICBTdHJpbmdJZGVudGlmaWVyTWFwKiBpZGVudE1hcCA9
IGdldFN0cmluZ0lkZW50aWZpZXJNYXAoKTsKICAgICAgICAgU3RyaW5nSWRlbnRpZmllck1hcDo6
aXRlcmF0b3IgaXRlciA9IGlkZW50TWFwLT5maW5kKGtleSk7CiAgICAgICAgIGlmIChpdGVyICE9
IGlkZW50TWFwLT5lbmQoKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxOUElkZW50
aWZpZXI+KGl0ZXItPnNlY29uZCk7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TlBJ
ZGVudGlmaWVyPihpdGVyLT52YWx1ZSk7CiAKICAgICAgICAgc2l6ZV90IG5hbWVMZW4gPSBrZXku
bV9sZW5ndGg7CiAKQEAgLTIxMSw3ICsyMTEsNyBAQCBOUElkZW50aWZpZXIgX05QTl9HZXRJbnRJ
ZGVudGlmaWVyKGludDMyX3QgaW50SWQpCiAgICAgSW50SWRlbnRpZmllck1hcCogaWRlbnRNYXAg
PSBnZXRJbnRJZGVudGlmaWVyTWFwKCk7CiAgICAgSW50SWRlbnRpZmllck1hcDo6aXRlcmF0b3Ig
aXRlciA9IGlkZW50TWFwLT5maW5kKGludElkKTsKICAgICBpZiAoaXRlciAhPSBpZGVudE1hcC0+
ZW5kKCkpCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxOUElkZW50aWZpZXI+KGl0ZXItPnNl
Y29uZCk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxOUElkZW50aWZpZXI+KGl0ZXItPnZh
bHVlKTsKIAogICAgIC8vIFdlIG5ldmVyIHJlbGVhc2UgaWRlbnRpZmllcnMsIHNvIHRoaXMgZGlj
dGlvbmFyeSB3aWxsIGdyb3cuCiAgICAgUHJpdmF0ZUlkZW50aWZpZXIqIGlkZW50aWZpZXIgPSBy
ZWludGVycHJldF9jYXN0PFByaXZhdGVJZGVudGlmaWVyKj4obWFsbG9jKHNpemVvZihQcml2YXRl
SWRlbnRpZmllcikpKTsKQEAgLTM4OCw3ICszODgsNyBAQCB2b2lkIF9OUE5fUmVnaXN0ZXJPYmpl
Y3QoTlBPYmplY3QqIG5wT2JqZWN0LCBOUE9iamVjdCogb3duZXIpCiAgICAgICAgIE5QT2JqZWN0
TWFwOjppdGVyYXRvciBvd25lckVudHJ5ID0gbGl2ZU9iamVjdE1hcCgpLmZpbmQob3duZXIpOwog
ICAgICAgICBOUE9iamVjdCogcGFyZW50ID0gMDsKICAgICAgICAgaWYgKGxpdmVPYmplY3RNYXAo
KS5lbmQoKSAhPSBvd25lckVudHJ5KQotICAgICAgICAgICAgcGFyZW50ID0gb3duZXJFbnRyeS0+
c2Vjb25kOworICAgICAgICAgICAgcGFyZW50ID0gb3duZXJFbnRyeS0+dmFsdWU7CiAKICAgICAg
ICAgaWYgKHBhcmVudCkKICAgICAgICAgICAgIG93bmVyID0gcGFyZW50OwpAQCAtNDA4LDcgKzQw
OCw3IEBAIHZvaWQgX05QTl9VbnJlZ2lzdGVyT2JqZWN0KE5QT2JqZWN0KiBucE9iamVjdCkKIAog
ICAgIE5QT2JqZWN0KiBvd25lciA9IDA7CiAgICAgaWYgKGxpdmVPYmplY3RNYXAoKS5maW5kKG5w
T2JqZWN0KSAhPSBsaXZlT2JqZWN0TWFwKCkuZW5kKCkpCi0gICAgICAgIG93bmVyID0gbGl2ZU9i
amVjdE1hcCgpLmZpbmQobnBPYmplY3QpLT5zZWNvbmQ7CisgICAgICAgIG93bmVyID0gbGl2ZU9i
amVjdE1hcCgpLmZpbmQobnBPYmplY3QpLT52YWx1ZTsKIAogICAgIGlmICghb3duZXIpIHsKICAg
ICAgICAgLy8gVW5yZWdpc3RlcmluZyBhIG93bmVyIG9iamVjdDsgYWxzbyB1bnJlZ2lzdGVyIGl0
J3MgZGVzY2VuZGFudHMuCkBAIC00NDMsNyArNDQzLDcgQEAgdm9pZCBfTlBOX1VucmVnaXN0ZXJP
YmplY3QoTlBPYmplY3QqIG5wT2JqZWN0KQogICAgIH0gZWxzZSB7CiAgICAgICAgIE5QUm9vdE9i
amVjdE1hcDo6aXRlcmF0b3Igb3duZXJFbnRyeSA9IHJvb3RPYmplY3RNYXAoKS5maW5kKG93bmVy
KTsKICAgICAgICAgaWYgKG93bmVyRW50cnkgIT0gcm9vdE9iamVjdE1hcCgpLmVuZCgpKSB7Ci0g
ICAgICAgICAgICBOUE9iamVjdFNldCogbGlzdCA9IG93bmVyRW50cnktPnNlY29uZDsKKyAgICAg
ICAgICAgIE5QT2JqZWN0U2V0KiBsaXN0ID0gb3duZXJFbnRyeS0+dmFsdWU7CiAgICAgICAgICAg
ICBBU1NFUlQobGlzdC0+ZmluZChucE9iamVjdCkgIT0gbGlzdC0+ZW5kKCkpOwogICAgICAgICAg
ICAgbGlzdC0+cmVtb3ZlKG5wT2JqZWN0KTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYnJpZGdlL0lkZW50aWZpZXJSZXAuY3BwIGIvU291cmNlL1dlYkNvcmUvYnJpZGdl
L0lkZW50aWZpZXJSZXAuY3BwCmluZGV4IDJhY2YxNDE1M2QxZGI5ZTEyYjcyNTU4YTUzODhkOTg2
ZmY4YTVlODUuLjFkZjU4YTllNDE1ODFjM2JlYzMxNTFmZjIxYmNlYWEyNDcyZGMxZjUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9JZGVudGlmaWVyUmVwLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9icmlkZ2UvSWRlbnRpZmllclJlcC5jcHAKQEAgLTY5LDEzICs2OSwxMyBAQCBJ
ZGVudGlmaWVyUmVwKiBJZGVudGlmaWVyUmVwOjpnZXQoaW50IGludElEKQogICAgIAogICAgIElu
dElkZW50aWZpZXJNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBpbnRJZGVudGlmaWVyTWFwKCkuYWRk
KGludElELCAwKTsKICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgQVNTRVJU
KCFyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7Ci0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vj
b25kID0gbmV3IElkZW50aWZpZXJSZXAoaW50SUQpOworICAgICAgICBBU1NFUlQoIXJlc3VsdC5p
dGVyYXRvci0+dmFsdWUpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gbmV3IElk
ZW50aWZpZXJSZXAoaW50SUQpOwogICAgICAgICAKLSAgICAgICAgaWRlbnRpZmllclNldCgpLmFk
ZChyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7CisgICAgICAgIGlkZW50aWZpZXJTZXQoKS5hZGQo
cmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CiAgICAgfQogICAgIAotICAgIHJldHVybiByZXN1bHQu
aXRlcmF0b3ItPnNlY29uZDsKKyAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIH0K
IAogdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxTdHJpbmdJbXBsPiwgSWRlbnRpZmllclJlcCo+IFN0
cmluZ0lkZW50aWZpZXJNYXA7CkBAIC05NSwxMyArOTUsMTMgQEAgSWRlbnRpZmllclJlcCogSWRl
bnRpZmllclJlcDo6Z2V0KGNvbnN0IGNoYXIqIG5hbWUpCiAgICAgVVN0cmluZyBzdHJpbmcgPSBz
dHJpbmdUb1VTdHJpbmcoU3RyaW5nOjpmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayhuYW1lLCBz
dHJsZW4obmFtZSkpKTsKICAgICBTdHJpbmdJZGVudGlmaWVyTWFwOjpBZGRSZXN1bHQgcmVzdWx0
ID0gc3RyaW5nSWRlbnRpZmllck1hcCgpLmFkZChzdHJpbmcuaW1wbCgpLCAwKTsKICAgICBpZiAo
cmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgQVNTRVJUKCFyZXN1bHQuaXRlcmF0b3ItPnNl
Y29uZCk7Ci0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gbmV3IElkZW50aWZpZXJS
ZXAobmFtZSk7CisgICAgICAgIEFTU0VSVCghcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CisgICAg
ICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBuZXcgSWRlbnRpZmllclJlcChuYW1lKTsKICAg
ICAgICAgCi0gICAgICAgIGlkZW50aWZpZXJTZXQoKS5hZGQocmVzdWx0Lml0ZXJhdG9yLT5zZWNv
bmQpOworICAgICAgICBpZGVudGlmaWVyU2V0KCkuYWRkKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUp
OwogICAgIH0KICAgICAKLSAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAg
cmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiB9CiAKIGJvb2wgSWRlbnRpZmllclJlcDo6
aXNWYWxpZChJZGVudGlmaWVyUmVwKiBpZGVudGlmaWVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYnJpZGdlL05QX2pzb2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9OUF9q
c29iamVjdC5jcHAKaW5kZXggNjFlMzY3OTU2MWE2M2U0ZTNjZjViZTRkMDg5NjcyMzEzN2Y2MzJj
Ny4uNjJlYmQyMzc2ZWM5MWVjZGU2NTM5NTg2MjZhMDlhZWZkMzk3M2JlOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYnJpZGdlL05QX2pzb2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9icmlkZ2UvTlBfanNvYmplY3QuY3BwCkBAIC02NSw4ICs2NSw4IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIGl0ZXIgPSBtX21hcC5hZGQocm9vdE9iamVjdCwgSlNUb05QT2JqZWN0TWFwKCkpLml0
ZXJhdG9yOwogICAgICAgICB9CiAKLSAgICAgICAgQVNTRVJUKGl0ZXItPnNlY29uZC5maW5kKGpz
T2JqZWN0KSA9PSBpdGVyLT5zZWNvbmQuZW5kKCkpOwotICAgICAgICBpdGVyLT5zZWNvbmQuYWRk
KGpzT2JqZWN0LCBucE9iamVjdCk7CisgICAgICAgIEFTU0VSVChpdGVyLT52YWx1ZS5maW5kKGpz
T2JqZWN0KSA9PSBpdGVyLT52YWx1ZS5lbmQoKSk7CisgICAgICAgIGl0ZXItPnZhbHVlLmFkZChq
c09iamVjdCwgbnBPYmplY3QpOwogICAgIH0KIAogICAgIHZvaWQgcmVtb3ZlKFJvb3RPYmplY3Qq
IHJvb3RPYmplY3QpCkBAIC04MCw5ICs4MCw5IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIEhh
c2hNYXA8Um9vdE9iamVjdCosIEpTVG9OUE9iamVjdE1hcD46Oml0ZXJhdG9yIGl0ZXIgPSBtX21h
cC5maW5kKHJvb3RPYmplY3QpOwogICAgICAgICBBU1NFUlQoaXRlciAhPSBtX21hcC5lbmQoKSk7
Ci0gICAgICAgIEFTU0VSVChpdGVyLT5zZWNvbmQuZmluZChqc09iamVjdCkgIT0gaXRlci0+c2Vj
b25kLmVuZCgpKTsKKyAgICAgICAgQVNTRVJUKGl0ZXItPnZhbHVlLmZpbmQoanNPYmplY3QpICE9
IGl0ZXItPnZhbHVlLmVuZCgpKTsKIAotICAgICAgICBpdGVyLT5zZWNvbmQucmVtb3ZlKGpzT2Jq
ZWN0KTsKKyAgICAgICAgaXRlci0+dmFsdWUucmVtb3ZlKGpzT2JqZWN0KTsKICAgICB9CiAKIHBy
aXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhQ2xh
c3NKU0MuY3BwIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YUNsYXNzSlNDLmNw
cAppbmRleCBhZWI0MDIwYmQ4NGEyMzdiOWVjMWMwYWI3NmE5ZjZmZmI2ZThiOTc1Li5hNjA4MDFl
NTYyOTRjNzJmOGUyZjc0NjZlNDQyYjYxY2RkODRlZWZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhQ2xhc3NKU0MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JyaWRnZS9qbmkvanNjL0phdmFDbGFzc0pTQy5jcHAKQEAgLTEwNyw3ICsxMDcsNyBAQCBKYXZh
Q2xhc3M6On5KYXZhQ2xhc3MoKQogCiAgICAgTWV0aG9kTGlzdE1hcDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gbV9tZXRob2RzLmVuZCgpOwogICAgIGZvciAoTWV0aG9kTGlzdE1hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX21ldGhvZHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAg
IGNvbnN0IE1ldGhvZExpc3QqIG1ldGhvZExpc3QgPSBpdC0+c2Vjb25kOworICAgICAgICBjb25z
dCBNZXRob2RMaXN0KiBtZXRob2RMaXN0ID0gaXQtPnZhbHVlOwogICAgICAgICBkZWxldGVBbGxW
YWx1ZXMoKm1ldGhvZExpc3QpOwogICAgICAgICBkZWxldGUgbWV0aG9kTGlzdDsKICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfaW5zdGFuY2UuY3BwIGIvU291
cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X2luc3RhbmNlLmNwcAppbmRleCBiOWEzNGFjMzBiN2Zj
M2Q3NTQzNmMxYjM4OTMyMTY0MDE4Mjc4ZWU2Li4yZWI0YTEwZjViZjZhMDcyOWE3MDFiMDU4Nzdl
ZTBmNGZhY2UyY2I2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfaW5z
dGFuY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9pbnN0YW5jZS5jcHAK
QEAgLTc4LDggKzc4LDggQEAgdm9pZCBXZWFrTWFwOjpzZXQoSlNDb250ZXh0UmVmIGNvbnRleHQs
IHZvaWQgKmtleSwgSlNPYmplY3RSZWYgb2JqZWN0KQogICAgICAgICBKU0NvbnRleHRHcm91cFJl
ZiBncm91cCA9IEpTQ29udGV4dEdldEdyb3VwKGNvbnRleHQpOwogICAgICAgICBXZWFrTWFwU2V0
OjpBZGRSZXN1bHQgZW50cnkgPSB3ZWFrTWFwcy5hZGQoZ3JvdXAsIDApOwogICAgICAgICBpZiAo
ZW50cnkuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgIGVudHJ5Lml0ZXJhdG9yLT5zZWNvbmQgPSBh
ZG9wdFJlZihuZXcgV2Vha01hcEltcGwoZ3JvdXApKTsKLSAgICAgICAgbV9pbXBsID0gZW50cnku
aXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgICAgIGVudHJ5Lml0ZXJhdG9yLT52YWx1ZSA9IGFk
b3B0UmVmKG5ldyBXZWFrTWFwSW1wbChncm91cCkpOworICAgICAgICBtX2ltcGwgPSBlbnRyeS5p
dGVyYXRvci0+dmFsdWU7CiAgICAgfQogICAgIEpTV2Vha09iamVjdE1hcFNldChtX2ltcGwtPm1f
Y29udGV4dCwgbV9pbXBsLT5tX21hcCwga2V5LCBvYmplY3QpOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfcm9vdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9icmlk
Z2UvcnVudGltZV9yb290LmNwcAppbmRleCA5YjYyMjRhOGI1NjBmYzVlNjBlMTU4OWU1NzlkMTQy
NTQ5NzI5MTM0Li43NGQ4MzE5MjFmMjE5YjhiNzMzMzY3NTkxNWU0MWJkYzE3ZGRmZGNkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9yb290LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9yb290LmNwcApAQCAtMTA1LDcgKzEwNSw3IEBAIHZv
aWQgUm9vdE9iamVjdDo6aW52YWxpZGF0ZSgpCiAgICAgewogICAgICAgICBIYXNoTWFwPFJ1bnRp
bWVPYmplY3QqLCBKU0M6OldlYWs8UnVudGltZU9iamVjdD4gPjo6aXRlcmF0b3IgZW5kID0gbV9y
dW50aW1lT2JqZWN0cy5lbmQoKTsKICAgICAgICAgZm9yIChIYXNoTWFwPFJ1bnRpbWVPYmplY3Qq
LCBKU0M6OldlYWs8UnVudGltZU9iamVjdD4gPjo6aXRlcmF0b3IgaXQgPSBtX3J1bnRpbWVPYmpl
Y3RzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgUnVudGltZU9iamVj
dCogcnVudGltZU9iamVjdCA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBSdW50aW1l
T2JqZWN0KiBydW50aW1lT2JqZWN0ID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAgICAgaWYg
KCFydW50aW1lT2JqZWN0KSAvLyBTa2lwIHpvbWJpZXMuCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICBydW50aW1lT2JqZWN0LT5pbnZhbGlkYXRlKCk7CkBAIC0xMjksNyAr
MTI5LDcgQEAgdm9pZCBSb290T2JqZWN0OjppbnZhbGlkYXRlKCkKIAogICAgIFByb3RlY3RDb3Vu
dFNldDo6aXRlcmF0b3IgZW5kID0gbV9wcm90ZWN0Q291bnRTZXQuZW5kKCk7CiAgICAgZm9yIChQ
cm90ZWN0Q291bnRTZXQ6Oml0ZXJhdG9yIGl0ID0gbV9wcm90ZWN0Q291bnRTZXQuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KQotICAgICAgICBKU0M6OmdjVW5wcm90ZWN0KGl0LT5maXJzdCk7Cisg
ICAgICAgIEpTQzo6Z2NVbnByb3RlY3QoaXQtPmtleSk7CiAgICAgbV9wcm90ZWN0Q291bnRTZXQu
Y2xlYXIoKTsKIAogICAgIHJvb3RPYmplY3RTZXQoKS0+cmVtb3ZlKHRoaXMpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbnZhc1ZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NDYW52YXNWYWx1ZS5jcHAKaW5kZXggNjM3NzdiYjRkZGRkYTA5NzYxNmY4ZmEwYWJj
MWJhNWM3N2ZiOTQ1NS4uYzkyZDEzMzZkODYwNjIwNWZjMDM3ZDBmYzU5ZmQzYTA3MzU0MjE1NSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbnZhc1ZhbHVlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FudmFzVmFsdWUuY3BwCkBAIC01MCwxNCArNTAsMTQgQEAg
dm9pZCBDU1NDYW52YXNWYWx1ZTo6Y2FudmFzQ2hhbmdlZChIVE1MQ2FudmFzRWxlbWVudCosIGNv
bnN0IEZsb2F0UmVjdCYgY2hhbmdlZFIKICAgICBJbnRSZWN0IGltYWdlQ2hhbmdlUmVjdCA9IGVu
Y2xvc2luZ0ludFJlY3QoY2hhbmdlZFJlY3QpOwogICAgIFJlbmRlck9iamVjdFNpemVDb3VudE1h
cDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY2xpZW50cygpLmVuZCgpOwogICAgIGZvciAoUmVuZGVy
T2JqZWN0U2l6ZUNvdW50TWFwOjpjb25zdF9pdGVyYXRvciBjdXJyID0gY2xpZW50cygpLmJlZ2lu
KCk7IGN1cnIgIT0gZW5kOyArK2N1cnIpCi0gICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyT2JqZWN0
Kj4oY3Vyci0+Zmlyc3QpLT5pbWFnZUNoYW5nZWQoc3RhdGljX2Nhc3Q8V3JhcHBlZEltYWdlUHRy
Pih0aGlzKSwgJmltYWdlQ2hhbmdlUmVjdCk7CisgICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyT2Jq
ZWN0Kj4oY3Vyci0+a2V5KS0+aW1hZ2VDaGFuZ2VkKHN0YXRpY19jYXN0PFdyYXBwZWRJbWFnZVB0
cj4odGhpcyksICZpbWFnZUNoYW5nZVJlY3QpOwogfQogCiB2b2lkIENTU0NhbnZhc1ZhbHVlOjpj
YW52YXNSZXNpemVkKEhUTUxDYW52YXNFbGVtZW50KikKIHsKICAgICBSZW5kZXJPYmplY3RTaXpl
Q291bnRNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGNsaWVudHMoKS5lbmQoKTsKICAgICBmb3Ig
KFJlbmRlck9iamVjdFNpemVDb3VudE1hcDo6Y29uc3RfaXRlcmF0b3IgY3VyciA9IGNsaWVudHMo
KS5iZWdpbigpOyBjdXJyICE9IGVuZDsgKytjdXJyKQotICAgICAgICBjb25zdF9jYXN0PFJlbmRl
ck9iamVjdCo+KGN1cnItPmZpcnN0KS0+aW1hZ2VDaGFuZ2VkKHN0YXRpY19jYXN0PFdyYXBwZWRJ
bWFnZVB0cj4odGhpcykpOworICAgICAgICBjb25zdF9jYXN0PFJlbmRlck9iamVjdCo+KGN1cnIt
PmtleSktPmltYWdlQ2hhbmdlZChzdGF0aWNfY2FzdDxXcmFwcGVkSW1hZ2VQdHI+KHRoaXMpKTsK
IH0KIAogdm9pZCBDU1NDYW52YXNWYWx1ZTo6Y2FudmFzRGVzdHJveWVkKEhUTUxDYW52YXNFbGVt
ZW50KiBlbGVtZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVk
U3R5bGVEZWNsYXJhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHls
ZURlY2xhcmF0aW9uLmNwcAppbmRleCAwNzA4YzIzYmFiOGQ1MGE4YmU5MWRhMTMzZDg0NzMzODhj
ODI3ZWI4Li4zZDNmY2U5ODk1MmM4NWJlZWJmNWY2NTQ5ZjBiZjgxMmUxMjdhOTc1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcApA
QCAtMTI3Myw4ICsxMjczLDggQEAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGNvdW50ZXJU
b0NTU1ZhbHVlKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgQ1NTUHJvcGUKIAogICAgIFJlZlB0
cjxDU1NWYWx1ZUxpc3Q+IGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVk
KCk7CiAgICAgZm9yIChDb3VudGVyRGlyZWN0aXZlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1h
cC0+YmVnaW4oKTsgaXQgIT0gbWFwLT5lbmQoKTsgKytpdCkgewotICAgICAgICBsaXN0LT5hcHBl
bmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoaXQtPmZpcnN0LmdldCgpLCBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX1NUUklORykpOwotICAgICAgICBzaG9ydCBudW1iZXIgPSBwcm9wZXJ0eUlE
ID09IENTU1Byb3BlcnR5Q291bnRlckluY3JlbWVudCA/IGl0LT5zZWNvbmQubV9pbmNyZW1lbnRW
YWx1ZSA6IGl0LT5zZWNvbmQubV9yZXNldFZhbHVlOworICAgICAgICBsaXN0LT5hcHBlbmQoY3Nz
VmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoaXQtPmtleS5nZXQoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19TVFJJTkcpKTsKKyAgICAgICAgc2hvcnQgbnVtYmVyID0gcHJvcGVydHlJRCA9PSBDU1NQ
cm9wZXJ0eUNvdW50ZXJJbmNyZW1lbnQgPyBpdC0+dmFsdWUubV9pbmNyZW1lbnRWYWx1ZSA6IGl0
LT52YWx1ZS5tX3Jlc2V0VmFsdWU7CiAgICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2wo
KS5jcmVhdGVWYWx1ZSgoZG91YmxlKW51bWJlciwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1C
RVIpKTsKICAgICB9CiAgICAgcmV0dXJuIGxpc3QucmVsZWFzZSgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0Nyb3NzZmFkZVZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NDcm9zc2ZhZGVWYWx1ZS5jcHAKaW5kZXggNWVkN2RhMThkM2NiOWU5YWQ4MGMyYmU3ODE4
MjYyZWMzODJiNGUyOS4uODI3ODgzYjEzNTlmOWM1ODQwNmViNGU4YWVkYWYyMzU1OTRmMjNhNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Nyb3NzZmFkZVZhbHVlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Jvc3NmYWRlVmFsdWUuY3BwCkBAIC0xNzUsNyArMTc1
LDcgQEAgdm9pZCBDU1NDcm9zc2ZhZGVWYWx1ZTo6Y3Jvc3NmYWRlQ2hhbmdlZChjb25zdCBJbnRS
ZWN0JikKIHsKICAgICBSZW5kZXJPYmplY3RTaXplQ291bnRNYXA6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IGNsaWVudHMoKS5lbmQoKTsKICAgICBmb3IgKFJlbmRlck9iamVjdFNpemVDb3VudE1hcDo6
Y29uc3RfaXRlcmF0b3IgY3VyciA9IGNsaWVudHMoKS5iZWdpbigpOyBjdXJyICE9IGVuZDsgKytj
dXJyKSB7Ci0gICAgICAgIFJlbmRlck9iamVjdCogY2xpZW50ID0gY29uc3RfY2FzdDxSZW5kZXJP
YmplY3QqPihjdXJyLT5maXJzdCk7CisgICAgICAgIFJlbmRlck9iamVjdCogY2xpZW50ID0gY29u
c3RfY2FzdDxSZW5kZXJPYmplY3QqPihjdXJyLT5rZXkpOwogICAgICAgICBjbGllbnQtPmltYWdl
Q2hhbmdlZChzdGF0aWNfY2FzdDxXcmFwcGVkSW1hZ2VQdHI+KHRoaXMpKTsKICAgICB9CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuY3BwIGIvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU291cmNlLmNwcAppbmRleCBkZDkwNGQzN2ZiOTU0
ZTQ0ZGJhNjUzODc2NzM1ODMxMTk4ZmFkM2Q3Li5jZTQ1MzY3YWMzMzIzNzJhMGZiOWVjOGM1YTUy
ZmI5ZjA4ODllZGY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VT
b3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5jcHAK
QEAgLTExNCw3ICsxMTQsNyBAQCBTaW1wbGVGb250RGF0YSogQ1NTRm9udEZhY2VTb3VyY2U6Omdl
dEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaQogICAgIHVuc2lnbmVk
IGhhc2hLZXkgPSAoZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCkgKyAxKSA8PCA2
IHwgZm9udERlc2NyaXB0aW9uLndpZHRoVmFyaWFudCgpIDw8IDQKICAgICAgICAgICAgICAgICAg
ICAgICAgfCAoZm9udERlc2NyaXB0aW9uLnRleHRPcmllbnRhdGlvbigpID09IFRleHRPcmllbnRh
dGlvblVwcmlnaHQgPyA4IDogMCkgfCAoZm9udERlc2NyaXB0aW9uLm9yaWVudGF0aW9uKCkgPT0g
VmVydGljYWwgPyA0IDogMCkgfCAoc3ludGhldGljQm9sZCA/IDIgOiAwKSB8IChzeW50aGV0aWNJ
dGFsaWMgPyAxIDogMCk7CiAKLSAgICBTaW1wbGVGb250RGF0YSomIGNhY2hlZERhdGEgPSBtX2Zv
bnREYXRhVGFibGUuYWRkKGhhc2hLZXksIDApLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgU2ltcGxl
Rm9udERhdGEqJiBjYWNoZWREYXRhID0gbV9mb250RGF0YVRhYmxlLmFkZChoYXNoS2V5LCAwKS5p
dGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKGNhY2hlZERhdGEpCiAgICAgICAgIHJldHVybiBjYWNo
ZWREYXRhOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9y
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3BwCmluZGV4IGNjNWZm
YTA2Y2QwZTUwMTQ2NGMwNzEwM2FiZmRkYTFhZjVhM2VhY2MuLjE1MTdiNzZjYWQ1ZWRjNWVmMGJm
YTQ1MTllOWRiOWYxZTUyY2MyZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NG
b250U2VsZWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3Iu
Y3BwCkBAIC0yODUsNyArMjg1LDcgQEAgdm9pZCBDU1NGb250U2VsZWN0b3I6OmFkZEZvbnRGYWNl
UnVsZShjb25zdCBTdHlsZVJ1bGVGb250RmFjZSogZm9udEZhY2VSdWxlKQogICAgICAgICBpZiAo
ZmFtaWx5TmFtZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBP
d25QdHI8VmVjdG9yPFJlZlB0cjxDU1NGb250RmFjZT4gPiA+JiBmYW1pbHlGb250RmFjZXMgPSBt
X2ZvbnRGYWNlcy5hZGQoZmFtaWx5TmFtZSwgbnVsbHB0cikuaXRlcmF0b3ItPnNlY29uZDsKKyAg
ICAgICAgT3duUHRyPFZlY3RvcjxSZWZQdHI8Q1NTRm9udEZhY2U+ID4gPiYgZmFtaWx5Rm9udEZh
Y2VzID0gbV9mb250RmFjZXMuYWRkKGZhbWlseU5hbWUsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1
ZTsKICAgICAgICAgaWYgKCFmYW1pbHlGb250RmFjZXMpIHsKICAgICAgICAgICAgIGZhbWlseUZv
bnRGYWNlcyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8UmVmUHRyPENTU0ZvbnRGYWNlPiA+KTsKIApA
QCAtNDg3LDEzICs0ODcsMTMgQEAgRm9udERhdGEqIENTU0ZvbnRTZWxlY3Rvcjo6Z2V0Rm9udERh
dGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGMKICAgICAgICAgcmV0
dXJuIGZvbnREYXRhRm9yR2VuZXJpY0ZhbWlseShtX2RvY3VtZW50LCBmb250RGVzY3JpcHRpb24s
IGZhbWlseU5hbWUpOwogICAgIH0KIAotICAgIE93blB0cjxIYXNoTWFwPHVuc2lnbmVkLCBSZWZQ
dHI8Q1NTU2VnbWVudGVkRm9udEZhY2U+ID4gPiYgc2VnbWVudGVkRm9udEZhY2VDYWNoZSA9IG1f
Zm9udHMuYWRkKGZhbWlseSwgbnVsbHB0cikuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBPd25QdHI8
SGFzaE1hcDx1bnNpZ25lZCwgUmVmUHRyPENTU1NlZ21lbnRlZEZvbnRGYWNlPiA+ID4mIHNlZ21l
bnRlZEZvbnRGYWNlQ2FjaGUgPSBtX2ZvbnRzLmFkZChmYW1pbHksIG51bGxwdHIpLml0ZXJhdG9y
LT52YWx1ZTsKICAgICBpZiAoIXNlZ21lbnRlZEZvbnRGYWNlQ2FjaGUpCiAgICAgICAgIHNlZ21l
bnRlZEZvbnRGYWNlQ2FjaGUgPSBhZG9wdFB0cihuZXcgSGFzaE1hcDx1bnNpZ25lZCwgUmVmUHRy
PENTU1NlZ21lbnRlZEZvbnRGYWNlPiA+KTsKIAogICAgIEZvbnRUcmFpdHNNYXNrIHRyYWl0c01h
c2sgPSBmb250RGVzY3JpcHRpb24udHJhaXRzTWFzaygpOwogCi0gICAgUmVmUHRyPENTU1NlZ21l
bnRlZEZvbnRGYWNlPiYgZmFjZSA9IHNlZ21lbnRlZEZvbnRGYWNlQ2FjaGUtPmFkZCh0cmFpdHNN
YXNrLCAwKS5pdGVyYXRvci0+c2Vjb25kOworICAgIFJlZlB0cjxDU1NTZWdtZW50ZWRGb250RmFj
ZT4mIGZhY2UgPSBzZWdtZW50ZWRGb250RmFjZUNhY2hlLT5hZGQodHJhaXRzTWFzaywgMCkuaXRl
cmF0b3ItPnZhbHVlOwogICAgIGlmICghZmFjZSkgewogICAgICAgICBmYWNlID0gQ1NTU2VnbWVu
dGVkRm9udEZhY2U6OmNyZWF0ZSh0aGlzKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0lt
YWdlR2VuZXJhdG9yVmFsdWUuY3BwCmluZGV4IDYzMDQwZjNiZTZlOThkZjJjOWQ5NTJjNWFkNDY0
MTU2MTk0NTQ0YjEuLmFkNmNiYTkyMmFjYWNiNGEyMWExMTc0ZDk1OGQ1NmVlMzQwYmZmZGMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZUdlbmVyYXRvclZhbHVlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5jcHAKQEAgLTU3
LDcgKzU3LDcgQEAgdm9pZCBDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjphZGRDbGllbnQoUmVuZGVy
T2JqZWN0KiByZW5kZXJlciwgY29uc3QgSW50U2l6ZSYgc2kKICAgICBpZiAoaXQgPT0gbV9jbGll
bnRzLmVuZCgpKQogICAgICAgICBtX2NsaWVudHMuYWRkKHJlbmRlcmVyLCBTaXplQW5kQ291bnQo
c2l6ZSwgMSkpOwogICAgIGVsc2UgewotICAgICAgICBTaXplQW5kQ291bnQmIHNpemVDb3VudCA9
IGl0LT5zZWNvbmQ7CisgICAgICAgIFNpemVBbmRDb3VudCYgc2l6ZUNvdW50ID0gaXQtPnZhbHVl
OwogICAgICAgICArK3NpemVDb3VudC5jb3VudDsKICAgICB9CiB9CkBAIC02OSw3ICs2OSw3IEBA
IHZvaWQgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6cmVtb3ZlQ2xpZW50KFJlbmRlck9iamVjdCog
cmVuZGVyZXIpCiAgICAgQVNTRVJUKGl0ICE9IG1fY2xpZW50cy5lbmQoKSk7CiAKICAgICBJbnRT
aXplIHJlbW92ZWRJbWFnZVNpemU7Ci0gICAgU2l6ZUFuZENvdW50JiBzaXplQ291bnQgPSBpdC0+
c2Vjb25kOworICAgIFNpemVBbmRDb3VudCYgc2l6ZUNvdW50ID0gaXQtPnZhbHVlOwogICAgIElu
dFNpemUgc2l6ZSA9IHNpemVDb3VudC5zaXplOwogICAgIGlmICghc2l6ZS5pc0VtcHR5KCkpIHsK
ICAgICAgICAgbV9zaXplcy5yZW1vdmUoc2l6ZSk7CkBAIC04Nyw3ICs4Nyw3IEBAIEltYWdlKiBD
U1NJbWFnZUdlbmVyYXRvclZhbHVlOjpnZXRJbWFnZShSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBj
b25zdCBJbnRTaXplJiBzCiB7CiAgICAgUmVuZGVyT2JqZWN0U2l6ZUNvdW50TWFwOjppdGVyYXRv
ciBpdCA9IG1fY2xpZW50cy5maW5kKHJlbmRlcmVyKTsKICAgICBpZiAoaXQgIT0gbV9jbGllbnRz
LmVuZCgpKSB7Ci0gICAgICAgIFNpemVBbmRDb3VudCYgc2l6ZUNvdW50ID0gaXQtPnNlY29uZDsK
KyAgICAgICAgU2l6ZUFuZENvdW50JiBzaXplQ291bnQgPSBpdC0+dmFsdWU7CiAgICAgICAgIElu
dFNpemUgb2xkU2l6ZSA9IHNpemVDb3VudC5zaXplOwogICAgICAgICBpZiAob2xkU2l6ZSAhPSBz
aXplKSB7CiAgICAgICAgICAgICBSZWZQdHI8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4gcHJvdGVj
dCh0aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWdtZW50ZWRGb250
RmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuY3BwCmlu
ZGV4IDk4MzQyNTQ2OTI0Zjg2NDJiZWY3MDIwYmIwZWJjODY0NDE3MjVjYmIuLjFiNzUzNGMxM2Y5
YmMzOWNkMGIxMTI0YjBjNjc2ZmY4MzRlZTViYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1NlZ21lbnRlZEZvbnRGYWNlLmNwcApAQCAtMTA2LDcgKzEwNiw3IEBAIEZvbnREYXRhKiBDU1NT
ZWdtZW50ZWRGb250RmFjZTo6Z2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250
RGVzY3JpcHRpCiAgICAgRm9udFRyYWl0c01hc2sgZGVzaXJlZFRyYWl0c01hc2sgPSBmb250RGVz
Y3JpcHRpb24udHJhaXRzTWFzaygpOwogICAgIHVuc2lnbmVkIGhhc2hLZXkgPSAoKGZvbnREZXNj
cmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpICsgMSkgPDwgKEZvbnRUcmFpdHNNYXNrV2lkdGgg
KyAxKSkgfCAoKGZvbnREZXNjcmlwdGlvbi5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsID8gMSA6
IDApIDw8IEZvbnRUcmFpdHNNYXNrV2lkdGgpIHwgZGVzaXJlZFRyYWl0c01hc2s7CiAKLSAgICBT
ZWdtZW50ZWRGb250RGF0YSomIGZvbnREYXRhID0gbV9mb250RGF0YVRhYmxlLmFkZChoYXNoS2V5
LCAwKS5pdGVyYXRvci0+c2Vjb25kOworICAgIFNlZ21lbnRlZEZvbnREYXRhKiYgZm9udERhdGEg
PSBtX2ZvbnREYXRhVGFibGUuYWRkKGhhc2hLZXksIDApLml0ZXJhdG9yLT52YWx1ZTsKICAgICBp
ZiAoZm9udERhdGEpCiAgICAgICAgIHJldHVybiBmb250RGF0YTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU1NlbGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NT
ZWxlY3Rvci5jcHAKaW5kZXggZWFiZWU0OTNhNDFhYjdlNDQyN2NmMjhmZDcwMzQ4MWIwYWQwODc5
YS4uOGRkYTU4ZDU3YWE3NTQ3YjIyNWYwNTUwYWRmNzAxMjg3ZTEyY2EwZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU1NlbGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTU2VsZWN0b3IuY3BwCkBAIC0zNzYsNyArMzc2LDcgQEAgQ1NTU2VsZWN0b3I6OlBzZXVk
b1R5cGUgQ1NTU2VsZWN0b3I6OnBhcnNlUHNldWRvVHlwZShjb25zdCBBdG9taWNTdHJpbmcmIG5h
bWUpCiAgICAgICAgIHJldHVybiBQc2V1ZG9Vbmtub3duOwogICAgIEhhc2hNYXA8QXRvbWljU3Ry
aW5nSW1wbCosIENTU1NlbGVjdG9yOjpQc2V1ZG9UeXBlPiogbmFtZVRvUHNldWRvVHlwZSA9IG5h
bWVUb1BzZXVkb1R5cGVNYXAoKTsKICAgICBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBDU1NT
ZWxlY3Rvcjo6UHNldWRvVHlwZT46Oml0ZXJhdG9yIHNsb3QgPSBuYW1lVG9Qc2V1ZG9UeXBlLT5m
aW5kKG5hbWUuaW1wbCgpKTsKLSAgICByZXR1cm4gc2xvdCA9PSBuYW1lVG9Qc2V1ZG9UeXBlLT5l
bmQoKSA/IFBzZXVkb1Vua25vd24gOiBzbG90LT5zZWNvbmQ7CisgICAgcmV0dXJuIHNsb3QgPT0g
bmFtZVRvUHNldWRvVHlwZS0+ZW5kKCkgPyBQc2V1ZG9Vbmtub3duIDogc2xvdC0+dmFsdWU7CiB9
CiAKIGJvb2wgQ1NTU2VsZWN0b3I6OmlzVW5rbm93blBzZXVkb1R5cGUoY29uc3QgQXRvbWljU3Ry
aW5nJiBuYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlUG9vbC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVQb29sLmNwcAppbmRleCBjZTc1N2I5MzNi
M2Y0YTMwMmU4NzE2NTY4ZDAzZTAzZGJmMWIwNzZjLi5jMTY4OTkxOWQxNmVlMTZmMGVlMDczMTkx
OTk2ZTk3YzVjOGZjOTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVQ
b29sLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVQb29sLmNwcApAQCAtNzgs
OCArNzgsOCBAQCBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NWYWx1ZVBvb2w6OmNy
ZWF0ZUNvbG9yVmFsdWUodW5zaWduZWQgcmdiVmFsdWUpCiAgICAgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBkdW1teVZhbHVlOwogICAgIENvbG9yVmFsdWVDYWNoZTo6QWRkUmVzdWx0IGVudHJ5
ID0gbV9jb2xvclZhbHVlQ2FjaGUuYWRkKHJnYlZhbHVlLCBkdW1teVZhbHVlKTsKICAgICBpZiAo
ZW50cnkuaXNOZXdFbnRyeSkKLSAgICAgICAgZW50cnkuaXRlcmF0b3ItPnNlY29uZCA9IENTU1By
aW1pdGl2ZVZhbHVlOjpjcmVhdGVDb2xvcihyZ2JWYWx1ZSk7Ci0gICAgcmV0dXJuIGVudHJ5Lml0
ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgIGVudHJ5Lml0ZXJhdG9yLT52YWx1ZSA9IENTU1ByaW1p
dGl2ZVZhbHVlOjpjcmVhdGVDb2xvcihyZ2JWYWx1ZSk7CisgICAgcmV0dXJuIGVudHJ5Lml0ZXJh
dG9yLT52YWx1ZTsKIH0KIAogUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NTVmFsdWVQ
b29sOjpjcmVhdGVWYWx1ZShkb3VibGUgdmFsdWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlw
ZXMgdHlwZSkKQEAgLTExMyw3ICsxMTMsNyBAQCBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiBDU1NWYWx1ZVBvb2w6OmNyZWF0ZVZhbHVlKGRvdWJsZSB2YWx1ZSwgQ1NTUHJpbWl0aQogCiBQ
YXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NWYWx1ZVBvb2w6OmNyZWF0ZUZvbnRGYW1p
bHlWYWx1ZShjb25zdCBTdHJpbmcmIGZhbWlseU5hbWUpCiB7Ci0gICAgUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiYgdmFsdWUgPSBtX2ZvbnRGYW1pbHlWYWx1ZUNhY2hlLmFkZChmYW1pbHlOYW1l
LCAwKS5pdGVyYXRvci0+c2Vjb25kOworICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mIHZh
bHVlID0gbV9mb250RmFtaWx5VmFsdWVDYWNoZS5hZGQoZmFtaWx5TmFtZSwgMCkuaXRlcmF0b3It
PnZhbHVlOwogICAgIGlmICghdmFsdWUpCiAgICAgICAgIHZhbHVlID0gQ1NTUHJpbWl0aXZlVmFs
dWU6OmNyZWF0ZShmYW1pbHlOYW1lLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORyk7CiAg
ICAgcmV0dXJuIHZhbHVlOwpAQCAtMTI2LDcgKzEyNiw3IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWVM
aXN0PiBDU1NWYWx1ZVBvb2w6OmNyZWF0ZUZvbnRGYWNlVmFsdWUoY29uc3QgQXRvbWljU3RyaW5n
JiBzCiAgICAgaWYgKG1fZm9udEZhY2VWYWx1ZUNhY2hlLnNpemUoKSA+IG1heGltdW1Gb250RmFj
ZUNhY2hlU2l6ZSkKICAgICAgICAgbV9mb250RmFjZVZhbHVlQ2FjaGUuY2xlYXIoKTsKIAotICAg
IFJlZlB0cjxDU1NWYWx1ZUxpc3Q+JiB2YWx1ZSA9IG1fZm9udEZhY2VWYWx1ZUNhY2hlLmFkZChz
dHJpbmcsIDApLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4mIHZh
bHVlID0gbV9mb250RmFjZVZhbHVlQ2FjaGUuYWRkKHN0cmluZywgMCkuaXRlcmF0b3ItPnZhbHVl
OwogICAgIGlmICghdmFsdWUpCiAgICAgICAgIHZhbHVlID0gQ1NTUGFyc2VyOjpwYXJzZUZvbnRG
YWNlVmFsdWUoc3RyaW5nKTsKICAgICByZXR1cm4gdmFsdWU7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9Qcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24uY3BwCmluZGV4IDVmYzJk
MzgwMzU1YTkzOGVhMGVlZDdkM2U0NDAxODZlNGI5MTdiNzguLjgxMDFmMjg5NzA3ZDg3YjQwNTFl
ODc1YzhiNDkzNGI4ZWU0MDVjNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Qcm9w
ZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Q
cm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24uY3BwCkBAIC0zNDYsNyArMzQ2LDcgQEAgQ1NT
VmFsdWUqIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6Y2xvbmVBbmRDYWNoZUZvckNT
U09NKENTU1ZhbHVlKiBpbnRlcm4KICAgICBpZiAoIW1fY3Nzb21DU1NWYWx1ZUNsb25lcykKICAg
ICAgICAgbV9jc3NvbUNTU1ZhbHVlQ2xvbmVzID0gYWRvcHRQdHIobmV3IEhhc2hNYXA8Q1NTVmFs
dWUqLCBSZWZQdHI8Q1NTVmFsdWU+ID4pOwogICAgIAotICAgIFJlZlB0cjxDU1NWYWx1ZT4mIGNs
b25lZFZhbHVlID0gbV9jc3NvbUNTU1ZhbHVlQ2xvbmVzLT5hZGQoaW50ZXJuYWxWYWx1ZSwgUmVm
UHRyPENTU1ZhbHVlPigpKS5pdGVyYXRvci0+c2Vjb25kOworICAgIFJlZlB0cjxDU1NWYWx1ZT4m
IGNsb25lZFZhbHVlID0gbV9jc3NvbUNTU1ZhbHVlQ2xvbmVzLT5hZGQoaW50ZXJuYWxWYWx1ZSwg
UmVmUHRyPENTU1ZhbHVlPigpKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCFjbG9uZWRWYWx1
ZSkKICAgICAgICAgY2xvbmVkVmFsdWUgPSBpbnRlcm5hbFZhbHVlLT5jbG9uZUZvckNTU09NKCk7
CiAgICAgcmV0dXJuIGNsb25lZFZhbHVlLmdldCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVy
LmNwcAppbmRleCA0ODZhNGRiYjgxYzFjNWRjZjk5YTNkYWIwZDY5MmM0MDg2MDFjY2MxLi5mZTFk
YmY0YmFmZDU1NjIwNTNkNGIzYTg4MzE5OGMxZDUyYTUxNzZjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVCdWlsZGVyLmNwcApAQCAtMTAxNCwyMSArMTAxNCwyMSBAQCBwdWJsaWM6CiAgICAgICAgIHR5
cGVkZWYgQ291bnRlckRpcmVjdGl2ZU1hcDo6aXRlcmF0b3IgSXRlcmF0b3I7CiAgICAgICAgIEl0
ZXJhdG9yIGVuZCA9IHBhcmVudE1hcC5lbmQoKTsKICAgICAgICAgZm9yIChJdGVyYXRvciBpdCA9
IHBhcmVudE1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIENvdW50
ZXJEaXJlY3RpdmVzJiBkaXJlY3RpdmVzID0gbWFwLmFkZChpdC0+Zmlyc3QsIENvdW50ZXJEaXJl
Y3RpdmVzKCkpLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgICAgICBDb3VudGVyRGlyZWN0aXZl
cyYgZGlyZWN0aXZlcyA9IG1hcC5hZGQoaXQtPmtleSwgQ291bnRlckRpcmVjdGl2ZXMoKSkuaXRl
cmF0b3ItPnZhbHVlOwogICAgICAgICAgICAgaWYgKGNvdW50ZXJCZWhhdmlvciA9PSBSZXNldCkg
ewotICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXMubV9yZXNldCA9IGl0LT5zZWNvbmQubV9yZXNl
dDsKLSAgICAgICAgICAgICAgICBkaXJlY3RpdmVzLm1fcmVzZXRWYWx1ZSA9IGl0LT5zZWNvbmQu
bV9yZXNldFZhbHVlOworICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXMubV9yZXNldCA9IGl0LT52
YWx1ZS5tX3Jlc2V0OworICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXMubV9yZXNldFZhbHVlID0g
aXQtPnZhbHVlLm1fcmVzZXRWYWx1ZTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAgICAgLy8gSW5oZXJpdGluZyBhIGNvdW50ZXItaW5jcmVtZW50IG1lYW5zIHRha2luZyB0aGUg
cGFyZW50J3MgY3VycmVudCB2YWx1ZSBmb3IgdGhlIGNvdW50ZXIKICAgICAgICAgICAgICAgICAv
LyBhbmQgYWRkaW5nIGl0IHRvIGl0c2VsZi4KLSAgICAgICAgICAgICAgICBkaXJlY3RpdmVzLm1f
aW5jcmVtZW50ID0gaXQtPnNlY29uZC5tX2luY3JlbWVudDsKKyAgICAgICAgICAgICAgICBkaXJl
Y3RpdmVzLm1faW5jcmVtZW50ID0gaXQtPnZhbHVlLm1faW5jcmVtZW50OwogICAgICAgICAgICAg
ICAgIGRpcmVjdGl2ZXMubV9pbmNyZW1lbnRWYWx1ZSA9IDA7CiAgICAgICAgICAgICAgICAgaWYg
KGRpcmVjdGl2ZXMubV9pbmNyZW1lbnQpIHsKICAgICAgICAgICAgICAgICAgICAgZmxvYXQgaW5j
cmVtZW50VmFsdWUgPSBkaXJlY3RpdmVzLm1faW5jcmVtZW50VmFsdWU7Ci0gICAgICAgICAgICAg
ICAgICAgIGRpcmVjdGl2ZXMubV9pbmNyZW1lbnRWYWx1ZSA9IGNsYW1wVG9JbnRlZ2VyKGluY3Jl
bWVudFZhbHVlICsgaXQtPnNlY29uZC5tX2luY3JlbWVudFZhbHVlKTsKKyAgICAgICAgICAgICAg
ICAgICAgZGlyZWN0aXZlcy5tX2luY3JlbWVudFZhbHVlID0gY2xhbXBUb0ludGVnZXIoaW5jcmVt
ZW50VmFsdWUgKyBpdC0+dmFsdWUubV9pbmNyZW1lbnRWYWx1ZSk7CiAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlcy5tX2luY3JlbWVudCA9IHRy
dWU7Ci0gICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXMubV9pbmNyZW1lbnRWYWx1ZSA9IGl0
LT5zZWNvbmQubV9pbmNyZW1lbnRWYWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZl
cy5tX2luY3JlbWVudFZhbHVlID0gaXQtPnZhbHVlLm1faW5jcmVtZW50VmFsdWU7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xMDQ2LDkgKzEwNDYsOSBA
QCBwdWJsaWM6CiAgICAgICAgIEl0ZXJhdG9yIGVuZCA9IG1hcC5lbmQoKTsKICAgICAgICAgZm9y
IChJdGVyYXRvciBpdCA9IG1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCiAgICAgICAgICAg
ICBpZiAoY291bnRlckJlaGF2aW9yID09IFJlc2V0KQotICAgICAgICAgICAgICAgIGl0LT5zZWNv
bmQubV9yZXNldCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGl0LT52YWx1ZS5tX3Jlc2V0ID0g
ZmFsc2U7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgaXQtPnNlY29uZC5tX2lu
Y3JlbWVudCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGl0LT52YWx1ZS5tX2luY3JlbWVudCA9
IGZhbHNlOwogCiAgICAgICAgIGludCBsZW5ndGggPSBsaXN0ID8gbGlzdC0+bGVuZ3RoKCkgOiAw
OwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CkBAIC0xMDYyLDcg
KzEwNjIsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgICAgIEF0b21pY1N0cmluZyBpZGVudGlmaWVy
ID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihwYWlyLT5maXJzdCgpKS0+Z2V0U3Ry
aW5nVmFsdWUoKTsKICAgICAgICAgICAgIGludCB2YWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlKj4ocGFpci0+c2Vjb25kKCkpLT5nZXRJbnRWYWx1ZSgpOwotICAgICAgICAgICAg
Q291bnRlckRpcmVjdGl2ZXMmIGRpcmVjdGl2ZXMgPSBtYXAuYWRkKGlkZW50aWZpZXIuaW1wbCgp
LCBDb3VudGVyRGlyZWN0aXZlcygpKS5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICAgICAgQ291
bnRlckRpcmVjdGl2ZXMmIGRpcmVjdGl2ZXMgPSBtYXAuYWRkKGlkZW50aWZpZXIuaW1wbCgpLCBD
b3VudGVyRGlyZWN0aXZlcygpKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgICAgICBpZiAoY291
bnRlckJlaGF2aW9yID09IFJlc2V0KSB7CiAgICAgICAgICAgICAgICAgZGlyZWN0aXZlcy5tX3Jl
c2V0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzLm1fcmVzZXRWYWx1ZSA9IHZh
bHVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCmluZGV4IDA4ZWUyOGNkYWJjNGY3
MjM3YTRjY2JlNDhjNDljOTkwZmQ0YzU5MGMuLjM1MTIxNmRjOTQzOTAwMjAzM2ExYzIyM2UyMmQ5
M2MzNzVhN2RlYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKQEAgLTQ5OCw3
ICs0OTgsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RGZWF0dXJlcygpCiAgICAgbV9m
ZWF0dXJlcy5hZGQobV9hdXRob3JTdHlsZS0+ZmVhdHVyZXMoKSk7CiAjaWYgRU5BQkxFKFNUWUxF
X1NDT1BFRCkKICAgICBmb3IgKFNjb3BlZFJ1bGVTZXRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zY29w
ZWRBdXRob3JTdHlsZXMuYmVnaW4oKTsgaXQgIT0gbV9zY29wZWRBdXRob3JTdHlsZXMuZW5kKCk7
ICsraXQpCi0gICAgICAgIG1fZmVhdHVyZXMuYWRkKGl0LT5zZWNvbmQtPmZlYXR1cmVzKCkpOwor
ICAgICAgICBtX2ZlYXR1cmVzLmFkZChpdC0+dmFsdWUtPmZlYXR1cmVzKCkpOwogI2VuZGlmCiAg
ICAgaWYgKG1fdXNlclN0eWxlKQogICAgICAgICBtX2ZlYXR1cmVzLmFkZChtX3VzZXJTdHlsZS0+
ZmVhdHVyZXMoKSk7CkBAIC01MzUsNyArNTM1LDcgQEAgaW5saW5lIFJ1bGVTZXQqIFN0eWxlUmVz
b2x2ZXI6OnJ1bGVTZXRGb3JTY29wZShjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSkgY29uc3QK
ICAgICBpZiAoIXNjb3BlLT5oYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpKQogICAgICAgICByZXR1
cm4gMDsKICAgICBTY29wZWRSdWxlU2V0TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fc2NvcGVk
QXV0aG9yU3R5bGVzLmZpbmQoc2NvcGUpOwotICAgIHJldHVybiBpdCAhPSBtX3Njb3BlZEF1dGhv
clN0eWxlcy5lbmQoKSA/IGl0LT5zZWNvbmQuZ2V0KCkgOiAwOyAKKyAgICByZXR1cm4gaXQgIT0g
bV9zY29wZWRBdXRob3JTdHlsZXMuZW5kKCkgPyBpdC0+dmFsdWUuZ2V0KCkgOiAwOyAKIH0KICNl
bmRpZgogCkBAIC01NTgsOCArNTU4LDggQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBlbmRBdXRo
b3JTdHlsZXNoZWV0cyh1bnNpZ25lZCBmaXJzdE5ldywgY29uc3QgVmVjdG9yPFJlZlAKICAgICAg
ICAgaWYgKHNjb3BlKSB7CiAgICAgICAgICAgICBTY29wZWRSdWxlU2V0TWFwOjpBZGRSZXN1bHQg
YWRkUmVzdWx0ID0gbV9zY29wZWRBdXRob3JTdHlsZXMuYWRkKHNjb3BlLCBudWxscHRyKTsKICAg
ICAgICAgICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgICAgICBhZGRS
ZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IFJ1bGVTZXQ6OmNyZWF0ZSgpOwotICAgICAgICAgICAg
YWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQtPmFkZFJ1bGVzRnJvbVNoZWV0KHNoZWV0LCAqbV9t
ZWRpdW0sIHRoaXMsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3It
PnZhbHVlID0gUnVsZVNldDo6Y3JlYXRlKCk7CisgICAgICAgICAgICBhZGRSZXN1bHQuaXRlcmF0
b3ItPnZhbHVlLT5hZGRSdWxlc0Zyb21TaGVldChzaGVldCwgKm1fbWVkaXVtLCB0aGlzLCBzY29w
ZSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogI2VuZGlmCkBAIC02ODksMTAg
KzY4OSwxMCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OnN3ZWVwTWF0Y2hlZFByb3BlcnRpZXNDYWNo
ZSgpCiAgICAgTWF0Y2hlZFByb3BlcnRpZXNDYWNoZTo6aXRlcmF0b3IgaXQgPSBtX21hdGNoZWRQ
cm9wZXJ0aWVzQ2FjaGUuYmVnaW4oKTsKICAgICBNYXRjaGVkUHJvcGVydGllc0NhY2hlOjppdGVy
YXRvciBlbmQgPSBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUuZW5kKCk7CiAgICAgZm9yICg7IGl0
ICE9IGVuZDsgKytpdCkgewotICAgICAgICBWZWN0b3I8TWF0Y2hlZFByb3BlcnRpZXM+JiBtYXRj
aGVkUHJvcGVydGllcyA9IGl0LT5zZWNvbmQubWF0Y2hlZFByb3BlcnRpZXM7CisgICAgICAgIFZl
Y3RvcjxNYXRjaGVkUHJvcGVydGllcz4mIG1hdGNoZWRQcm9wZXJ0aWVzID0gaXQtPnZhbHVlLm1h
dGNoZWRQcm9wZXJ0aWVzOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1hdGNoZWRQ
cm9wZXJ0aWVzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBpZiAobWF0Y2hlZFByb3BlcnRp
ZXNbaV0ucHJvcGVydGllcy0+aGFzT25lUmVmKCkpIHsKLSAgICAgICAgICAgICAgICB0b1JlbW92
ZS5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQoaXQt
PmtleSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
QEAgLTE4NzEsNyArMTg3MSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6a2V5ZnJhbWVTdHlsZXNG
b3JBbmltYXRpb24oRWxlbWVudCogZSwgY29uc3QgUmVuZGVyU3R5bGUqIGVsCiAgICAgaWYgKGl0
ID09IG1fa2V5ZnJhbWVzUnVsZU1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY29u
c3QgU3R5bGVSdWxlS2V5ZnJhbWVzKiBrZXlmcmFtZXNSdWxlID0gaXQtPnNlY29uZC5nZXQoKTsK
KyAgICBjb25zdCBTdHlsZVJ1bGVLZXlmcmFtZXMqIGtleWZyYW1lc1J1bGUgPSBpdC0+dmFsdWUu
Z2V0KCk7CiAKICAgICAvLyBDb25zdHJ1Y3QgYW5kIHBvcHVsYXRlIHRoZSBzdHlsZSBmb3IgZWFj
aCBrZXlmcmFtZQogICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVLZXlmcmFtZT4gPiYga2V5
ZnJhbWVzID0ga2V5ZnJhbWVzUnVsZS0+a2V5ZnJhbWVzKCk7CkBAIC0yNTY1LDcgKzI1NjUsNyBA
QCBzdGF0aWMgdm9pZCByZXBvcnRBdG9tUnVsZU1hcChNZW1vcnlDbGFzc0luZm8qIGluZm8sIGNv
bnN0IFJ1bGVTZXQ6OkF0b21SdWxlTWFwJgogewogICAgIGluZm8tPmFkZEhhc2hNYXAoYXRvbWlj
UnVsZU1hcCk7CiAgICAgZm9yIChSdWxlU2V0OjpBdG9tUnVsZU1hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBhdG9taWNSdWxlTWFwLmJlZ2luKCk7IGl0ICE9IGF0b21pY1J1bGVNYXAuZW5kKCk7ICsr
aXQpCi0gICAgICAgIGluZm8tPmFkZEluc3RydW1lbnRlZFZlY3RvcigqaXQtPnNlY29uZCk7Cisg
ICAgICAgIGluZm8tPmFkZEluc3RydW1lbnRlZFZlY3RvcigqaXQtPnZhbHVlKTsKIH0KIAogdm9p
ZCBSdWxlU2V0OjpyZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmpl
Y3RJbmZvKSBjb25zdApAQCAtMjYzNiw3ICsyNjM2LDcgQEAgdm9pZCBSdWxlU2V0OjphZGRUb1J1
bGVTZXQoQXRvbWljU3RyaW5nSW1wbCoga2V5LCBBdG9tUnVsZU1hcCYgbWFwLCBjb25zdCBSdWxl
RGEKIHsKICAgICBpZiAoIWtleSkKICAgICAgICAgcmV0dXJuOwotICAgIE93blB0cjxWZWN0b3I8
UnVsZURhdGE+ID4mIHJ1bGVzID0gbWFwLmFkZChrZXksIG51bGxwdHIpLml0ZXJhdG9yLT5zZWNv
bmQ7CisgICAgT3duUHRyPFZlY3RvcjxSdWxlRGF0YT4gPiYgcnVsZXMgPSBtYXAuYWRkKGtleSwg
bnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghcnVsZXMpCiAgICAgICAgIHJ1bGVz
ID0gYWRvcHRQdHIobmV3IFZlY3RvcjxSdWxlRGF0YT4pOwogICAgIHJ1bGVzLT5hcHBlbmQocnVs
ZURhdGEpOwpAQCAtMjc5Nyw3ICsyNzk3LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNocmlua01h
cFZlY3RvcnNUb0ZpdChSdWxlU2V0OjpBdG9tUnVsZU1hcCYgbWFwKQogewogICAgIFJ1bGVTZXQ6
OkF0b21SdWxlTWFwOjppdGVyYXRvciBlbmQgPSBtYXAuZW5kKCk7CiAgICAgZm9yIChSdWxlU2V0
OjpBdG9tUnVsZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KQotICAgICAgICBpdC0+c2Vjb25kLT5zaHJpbmtUb0ZpdCgpOworICAgICAgICBpdC0+dmFsdWUt
PnNocmlua1RvRml0KCk7CiB9CiAKIHZvaWQgUnVsZVNldDo6c2hyaW5rVG9GaXQoKQpAQCAtMjk0
Myw3ICsyOTQzLDcgQEAgY29uc3QgU3R5bGVSZXNvbHZlcjo6TWF0Y2hlZFByb3BlcnRpZXNDYWNo
ZUl0ZW0qIFN0eWxlUmVzb2x2ZXI6OmZpbmRGcm9tTWF0Y2hlZFAKICAgICBNYXRjaGVkUHJvcGVy
dGllc0NhY2hlOjppdGVyYXRvciBpdCA9IG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZS5maW5kKGhh
c2gpOwogICAgIGlmIChpdCA9PSBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUuZW5kKCkpCiAgICAg
ICAgIHJldHVybiAwOwotICAgIE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVJdGVtJiBjYWNoZUl0ZW0g
PSBpdC0+c2Vjb25kOworICAgIE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVJdGVtJiBjYWNoZUl0ZW0g
PSBpdC0+dmFsdWU7CiAKICAgICBzaXplX3Qgc2l6ZSA9IG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9w
ZXJ0aWVzLnNpemUoKTsKICAgICBpZiAoc2l6ZSAhPSBjYWNoZUl0ZW0ubWF0Y2hlZFByb3BlcnRp
ZXMuc2l6ZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRDb250
ZW50cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldENvbnRlbnRzLmNwcAppbmRl
eCAzZWFhMGRhMzY5MTIwY2ZmMTBiYjljYmNlNTNiNWE3NGNhZDJhZmFmLi44MjI4ODIzNDBhOTJl
NGQxODM4NzM2YTdmZGU2OTgxMTlhMDMxNjc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvU3R5bGVTaGVldENvbnRlbnRzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVT
aGVldENvbnRlbnRzLmNwcApAQCAtMjM1LDcgKzIzNSw3IEBAIHZvaWQgU3R5bGVTaGVldENvbnRl
bnRzOjpwYXJzZXJBZGROYW1lc3BhY2UoY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgsIGNvbnN0
IEF0CiAgICAgUHJlZml4TmFtZXNwYWNlVVJJTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9uYW1l
c3BhY2VzLmFkZChwcmVmaXgsIHVyaSk7CiAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQogICAg
ICAgICByZXR1cm47Ci0gICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSB1cmk7CisgICAgcmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZSA9IHVyaTsKIH0KIAogY29uc3QgQXRvbWljU3RyaW5nJiBTdHls
ZVNoZWV0Q29udGVudHM6OmRldGVybWluZU5hbWVzcGFjZShjb25zdCBBdG9taWNTdHJpbmcmIHBy
ZWZpeCkKQEAgLTI0Nyw3ICsyNDcsNyBAQCBjb25zdCBBdG9taWNTdHJpbmcmIFN0eWxlU2hlZXRD
b250ZW50czo6ZGV0ZXJtaW5lTmFtZXNwYWNlKGNvbnN0IEF0b21pY1N0cmluZyYgcAogICAgIFBy
ZWZpeE5hbWVzcGFjZVVSSU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX25hbWVzcGFjZXMuZmlu
ZChwcmVmaXgpOwogICAgIGlmIChpdCA9PSBtX25hbWVzcGFjZXMuZW5kKCkpCiAgICAgICAgIHJl
dHVybiBudWxsQXRvbTsKLSAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICByZXR1cm4gaXQtPnZh
bHVlOwogfQogCiB2b2lkIFN0eWxlU2hlZXRDb250ZW50czo6cmVxdWVzdEltcG9ydGVkU3R5bGVT
aGVldHMoQ1NTU3R5bGVTaGVldCogcm9vdFNoZWV0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL0NoZWNrZWRSYWRpb0J1dHRvbnMuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0NoZWNr
ZWRSYWRpb0J1dHRvbnMuY3BwCmluZGV4IGU2NzIzMjlhZjhkZTM3OGJlZmRmYzE0ZjhhY2JkMGYy
ZWMwYzc0MDUuLjlmYTUwOWJiOTUxZDM4MDkxNDAwMDAxMWVlNWNlNjUxNGE5OGQ0NmIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGVja2VkUmFkaW9CdXR0b25zLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vQ2hlY2tlZFJhZGlvQnV0dG9ucy5jcHAKQEAgLTE4NSw3ICsxODUs
NyBAQCB2b2lkIENoZWNrZWRSYWRpb0J1dHRvbnM6OmFkZEJ1dHRvbihIVE1MSW5wdXRFbGVtZW50
KiBlbGVtZW50KQogICAgIGlmICghbV9uYW1lVG9Hcm91cE1hcCkKICAgICAgICAgbV9uYW1lVG9H
cm91cE1hcCA9IGFkb3B0UHRyKG5ldyBOYW1lVG9Hcm91cE1hcCk7CiAKLSAgICBPd25QdHI8UmFk
aW9CdXR0b25Hcm91cD4mIGdyb3VwID0gbV9uYW1lVG9Hcm91cE1hcC0+YWRkKGVsZW1lbnQtPm5h
bWUoKS5pbXBsKCksIFBhc3NPd25QdHI8UmFkaW9CdXR0b25Hcm91cD4oKSkuaXRlcmF0b3ItPnNl
Y29uZDsKKyAgICBPd25QdHI8UmFkaW9CdXR0b25Hcm91cD4mIGdyb3VwID0gbV9uYW1lVG9Hcm91
cE1hcC0+YWRkKGVsZW1lbnQtPm5hbWUoKS5pbXBsKCksIFBhc3NPd25QdHI8UmFkaW9CdXR0b25H
cm91cD4oKSkuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghZ3JvdXApCiAgICAgICAgIGdyb3Vw
ID0gUmFkaW9CdXR0b25Hcm91cDo6Y3JlYXRlKCk7CiAgICAgZ3JvdXAtPmFkZChlbGVtZW50KTsK
QEAgLTI0Niw4ICsyNDYsOCBAQCB2b2lkIENoZWNrZWRSYWRpb0J1dHRvbnM6OnJlbW92ZUJ1dHRv
bihIVE1MSW5wdXRFbGVtZW50KiBlbGVtZW50KQogICAgIE5hbWVUb0dyb3VwTWFwOjppdGVyYXRv
ciBpdCA9IG1fbmFtZVRvR3JvdXBNYXAtPmZpbmQoZWxlbWVudC0+bmFtZSgpLmltcGwoKSk7CiAg
ICAgaWYgKGl0ID09IG1fbmFtZVRvR3JvdXBNYXAtPmVuZCgpKQogICAgICAgICByZXR1cm47Ci0g
ICAgaXQtPnNlY29uZC0+cmVtb3ZlKGVsZW1lbnQpOwotICAgIGlmIChpdC0+c2Vjb25kLT5pc0Vt
cHR5KCkpIHsKKyAgICBpdC0+dmFsdWUtPnJlbW92ZShlbGVtZW50KTsKKyAgICBpZiAoaXQtPnZh
bHVlLT5pc0VtcHR5KCkpIHsKICAgICAgICAgLy8gRklYTUU6IFdlIG1heSBza2lwIGRlYWxsb2Nh
dGluZyB0aGUgZW1wdHkgUmFkaW9CdXR0b25Hcm91cCBmb3IKICAgICAgICAgLy8gcGVyZm9ybWFu
Y2UgaW1wcm92ZW1lbnQuIElmIHdlIGRvIHNvLCB3ZSBuZWVkIHRvIGNoYW5nZSB0aGUga2V5IHR5
cGUKICAgICAgICAgLy8gb2YgbV9uYW1lVG9Hcm91cE1hcCBmcm9tIEF0b21pY1N0cmluZ0ltcGwq
IHRvIFJlZlB0cjxBdG9taWNTdHJpbmdJbXBsPi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9DaGlsZExpc3RNdXRhdGlvblNjb3BlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGls
ZExpc3RNdXRhdGlvblNjb3BlLmNwcAppbmRleCBmNGEyZGEwNGFiNjE1ODEzZjg2NGFlMTM1NmY0
ZWFhNGRiMGJmZTQ5Li5hZmQ4ZGQ5ZjFiMDA5ODVjN2EyN2JiYmJkYTNlYmY4MDc3NmQ0YzdjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0NoaWxkTGlzdE11dGF0aW9uU2NvcGUuY3BwCkBAIC0x
OTIsMjcgKzE5MiwyNyBAQCB2b2lkIENoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNj
dW11bGF0aW9uUm91dGVyOjpjaGlsZEFkZGVkKE5vZGUqIHRhcmdldAogewogICAgIEhhc2hNYXA8
Tm9kZSosIE93blB0cjxDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdG9y
PiA+OjppdGVyYXRvciBpdGVyID0gbV9hY2N1bXVsYXRpb25zLmZpbmQodGFyZ2V0KTsKICAgICBB
U1NFUlQoaXRlciAhPSBtX2FjY3VtdWxhdGlvbnMuZW5kKCkpOwotICAgIGlmIChpdGVyID09IG1f
YWNjdW11bGF0aW9ucy5lbmQoKSB8fCAhaXRlci0+c2Vjb25kKQorICAgIGlmIChpdGVyID09IG1f
YWNjdW11bGF0aW9ucy5lbmQoKSB8fCAhaXRlci0+dmFsdWUpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGl0ZXItPnNlY29uZC0+Y2hpbGRBZGRlZChjaGlsZCk7CisgICAgaXRlci0+dmFsdWUtPmNo
aWxkQWRkZWQoY2hpbGQpOwogfQogCiB2b2lkIENoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0
aW9uQWNjdW11bGF0aW9uUm91dGVyOjp3aWxsUmVtb3ZlQ2hpbGQoTm9kZSogdGFyZ2V0LCBOb2Rl
KiBjaGlsZCkKIHsKICAgICBIYXNoTWFwPE5vZGUqLCBPd25QdHI8Q2hpbGRMaXN0TXV0YXRpb25T
Y29wZTo6TXV0YXRpb25BY2N1bXVsYXRvcj4gPjo6aXRlcmF0b3IgaXRlciA9IG1fYWNjdW11bGF0
aW9ucy5maW5kKHRhcmdldCk7CiAgICAgQVNTRVJUKGl0ZXIgIT0gbV9hY2N1bXVsYXRpb25zLmVu
ZCgpKTsKLSAgICBpZiAoaXRlciA9PSBtX2FjY3VtdWxhdGlvbnMuZW5kKCkgfHwgIWl0ZXItPnNl
Y29uZCkKKyAgICBpZiAoaXRlciA9PSBtX2FjY3VtdWxhdGlvbnMuZW5kKCkgfHwgIWl0ZXItPnZh
bHVlKQogICAgICAgICByZXR1cm47CiAKLSAgICBpdGVyLT5zZWNvbmQtPndpbGxSZW1vdmVDaGls
ZChjaGlsZCk7CisgICAgaXRlci0+dmFsdWUtPndpbGxSZW1vdmVDaGlsZChjaGlsZCk7CiB9CiAK
IHZvaWQgQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXI6
OmluY3JlbWVudFNjb3BpbmdMZXZlbChOb2RlKiB0YXJnZXQpCiB7CiAgICAgU2NvcGluZ0xldmVs
TWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9zY29waW5nTGV2ZWxzLmFkZCh0YXJnZXQsIDEpOwog
ICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgKysocmVzdWx0Lml0ZXJhdG9y
LT5zZWNvbmQpOworICAgICAgICArKyhyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIApAQCAtMjI5LDggKzIyOSw4IEBAIHZvaWQgQ2hpbGRMaXN0TXV0YXRp
b25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXI6OmRlY3JlbWVudFNjb3BpbmdMZXZl
bChOCiAgICAgU2NvcGluZ0xldmVsTWFwOjppdGVyYXRvciBpdGVyID0gbV9zY29waW5nTGV2ZWxz
LmZpbmQodGFyZ2V0KTsKICAgICBBU1NFUlQoaXRlciAhPSBtX3Njb3BpbmdMZXZlbHMuZW5kKCkp
OwogCi0gICAgLS0oaXRlci0+c2Vjb25kKTsKLSAgICBpZiAoaXRlci0+c2Vjb25kID4gMCkKKyAg
ICAtLShpdGVyLT52YWx1ZSk7CisgICAgaWYgKGl0ZXItPnZhbHVlID4gMCkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgbV9zY29waW5nTGV2ZWxzLnJlbW92ZShpdGVyKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnQuY3BwCmluZGV4IDkxZmEyZTgzY2RjNDA1ZTlkZTRiOGI0ODFiMWI5NWRjNDIxOTY3MGYuLmZk
MjkxM2MzYTZiMTc1YzY2NTU3N2ZmOTVhNDVkZDUzNGU2NGJjMTUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50LmNwcApAQCAtMjk0Nyw3ICsyOTQ3LDcgQEAgY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHls
ZVNoZWV0PiA+KiBEb2N1bWVudDo6cGFnZUdyb3VwVXNlclNoZWV0cygpIGNvbnN0CiAKICAgICBV
c2VyU3R5bGVTaGVldE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gc2hlZXRzTWFwLT5lbmQoKTsK
ICAgICBmb3IgKFVzZXJTdHlsZVNoZWV0TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHNoZWV0c01h
cC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IFVzZXJTdHlsZVNo
ZWV0VmVjdG9yKiBzaGVldHMgPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICBjb25zdCBVc2Vy
U3R5bGVTaGVldFZlY3Rvciogc2hlZXRzID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgc2hlZXRzLT5zaXplKCk7ICsraSkgewogICAgICAgICAgICAg
Y29uc3QgVXNlclN0eWxlU2hlZXQqIHNoZWV0ID0gc2hlZXRzLT5hdChpKS5nZXQoKTsKICAgICAg
ICAgICAgIGlmIChzaGVldC0+aW5qZWN0ZWRGcmFtZXMoKSA9PSBJbmplY3RJblRvcEZyYW1lT25s
eSAmJiBvd25lckVsZW1lbnQoKSkKQEAgLTQ4MzAsMTAgKzQ4MzAsMTAgQEAgUGFzc1JlZlB0cjxI
VE1MQ29sbGVjdGlvbj4gRG9jdW1lbnQ6OndpbmRvd05hbWVkSXRlbXMoY29uc3QgQXRvbWljU3Ry
aW5nJiBuYW1lKQogewogICAgIE5hbWVkQ29sbGVjdGlvbk1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9
IG1fd2luZG93TmFtZWRJdGVtQ29sbGVjdGlvbnMuYWRkKG5hbWUsIDApOwogICAgIGlmICghcmVz
dWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAKICAgICBSZWZQdHI8SFRN
TE5hbWVDb2xsZWN0aW9uPiBjb2xsZWN0aW9uID0gSFRNTE5hbWVDb2xsZWN0aW9uOjpjcmVhdGUo
dGhpcywgV2luZG93TmFtZWRJdGVtcywgbmFtZSk7Ci0gICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNv
bmQgPSBjb2xsZWN0aW9uLmdldCgpOworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBjb2xs
ZWN0aW9uLmdldCgpOwogICAgIHJldHVybiBjb2xsZWN0aW9uLnJlbGVhc2UoKTsKIH0KIApAQCAt
NDg0MSwxMCArNDg0MSwxMCBAQCBQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBEb2N1bWVudDo6
ZG9jdW1lbnROYW1lZEl0ZW1zKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZQogewogICAgIE5hbWVk
Q29sbGVjdGlvbk1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fZG9jdW1lbnROYW1lZEl0ZW1Db2xs
ZWN0aW9ucy5hZGQobmFtZSwgMCk7CiAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAg
ICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZTsKIAogICAgIFJlZlB0cjxIVE1MTmFtZUNvbGxlY3Rpb24+IGNvbGxl
Y3Rpb24gPSBIVE1MTmFtZUNvbGxlY3Rpb246OmNyZWF0ZSh0aGlzLCBEb2N1bWVudE5hbWVkSXRl
bXMsIG5hbWUpOwotICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gY29sbGVjdGlvbi5nZXQo
KTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gY29sbGVjdGlvbi5nZXQoKTsKICAgICBy
ZXR1cm4gY29sbGVjdGlvbi5yZWxlYXNlKCk7CiB9CiAKQEAgLTUxNzksNyArNTE3OSw3IEBAIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQqIERvY3VtZW50OjpnZXRDU1NDYW52YXNDb250ZXh0KGNvbnN0
IFN0cmluZyYgdHlwZSwgY29uc3QKIAogSFRNTENhbnZhc0VsZW1lbnQqIERvY3VtZW50OjpnZXRD
U1NDYW52YXNFbGVtZW50KGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKLSAgICBSZWZQdHI8SFRNTENh
bnZhc0VsZW1lbnQ+JiBlbGVtZW50ID0gbV9jc3NDYW52YXNFbGVtZW50cy5hZGQobmFtZSwgMCku
aXRlcmF0b3ItPnNlY29uZDsKKyAgICBSZWZQdHI8SFRNTENhbnZhc0VsZW1lbnQ+JiBlbGVtZW50
ID0gbV9jc3NDYW52YXNFbGVtZW50cy5hZGQobmFtZSwgMCkuaXRlcmF0b3ItPnZhbHVlOwogICAg
IGlmICghZWxlbWVudCkKICAgICAgICAgZWxlbWVudCA9IEhUTUxDYW52YXNFbGVtZW50OjpjcmVh
dGUodGhpcyk7CiAgICAgcmV0dXJuIGVsZW1lbnQuZ2V0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwCmluZGV4IGEzZWJjOTM2OTMyNWE0N2Iy
ZTYyOTI4Njk2MGI0ZDZmZWJjMmYwYWUuLmIyZjAwODk1NGZlN2VhMGU2NzBkYjcxNWI2MzUzZDI1
M2JhMjk1YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNv
bnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRy
b2xsZXIuY3BwCkBAIC0zMTEsNyArMzExLDcgQEAgRG9jdW1lbnRNYXJrZXIqIERvY3VtZW50TWFy
a2VyQ29udHJvbGxlcjo6bWFya2VyQ29udGFpbmluZ1BvaW50KGNvbnN0IExheW91dFBvaW4KICAg
ICBNYXJrZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fbWFya2Vycy5lbmQoKTsKICAgICBmb3IgKE1h
cmtlck1hcDo6aXRlcmF0b3Igbm9kZUl0ZXJhdG9yID0gbV9tYXJrZXJzLmJlZ2luKCk7IG5vZGVJ
dGVyYXRvciAhPSBlbmQ7ICsrbm9kZUl0ZXJhdG9yKSB7CiAgICAgICAgIC8vIGlubmVyIGxvb3A7
IHByb2Nlc3MgZWFjaCBtYXJrZXIgaW4gdGhpcyBub2RlCi0gICAgICAgIE1hcmtlckxpc3QqIGxp
c3QgPSBub2RlSXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgTWFya2VyTGlzdCogbGlzdCA9IG5v
ZGVJdGVyYXRvci0+dmFsdWU7CiAgICAgICAgIHVuc2lnbmVkIG1hcmtlckNvdW50ID0gbGlzdC0+
c2l6ZSgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIG1hcmtlckluZGV4ID0gMDsgbWFya2VySW5k
ZXggPCBtYXJrZXJDb3VudDsgKyttYXJrZXJJbmRleCkgewogICAgICAgICAgICAgUmVuZGVyZWRE
b2N1bWVudE1hcmtlciYgbWFya2VyID0gbGlzdC0+YXQobWFya2VySW5kZXgpOwpAQCAtMzk5LDcg
KzM5OSw3IEBAIFZlY3RvcjxJbnRSZWN0PiBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbmRl
cmVkUmVjdHNGb3JNYXJrZXJzKERvY3VtZW50TWFya2VyCiAgICAgTWFya2VyTWFwOjppdGVyYXRv
ciBlbmQgPSBtX21hcmtlcnMuZW5kKCk7CiAgICAgZm9yIChNYXJrZXJNYXA6Oml0ZXJhdG9yIG5v
ZGVJdGVyYXRvciA9IG1fbWFya2Vycy5iZWdpbigpOyBub2RlSXRlcmF0b3IgIT0gZW5kOyArK25v
ZGVJdGVyYXRvcikgewogICAgICAgICAvLyBpbm5lciBsb29wOyBwcm9jZXNzIGVhY2ggbWFya2Vy
IGluIHRoaXMgbm9kZQotICAgICAgICBNYXJrZXJMaXN0KiBsaXN0ID0gbm9kZUl0ZXJhdG9yLT5z
ZWNvbmQ7CisgICAgICAgIE1hcmtlckxpc3QqIGxpc3QgPSBub2RlSXRlcmF0b3ItPnZhbHVlOwog
ICAgICAgICB1bnNpZ25lZCBtYXJrZXJDb3VudCA9IGxpc3QtPnNpemUoKTsKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBtYXJrZXJJbmRleCA9IDA7IG1hcmtlckluZGV4IDwgbWFya2VyQ291bnQ7ICsr
bWFya2VySW5kZXgpIHsKICAgICAgICAgICAgIGNvbnN0IFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIm
IG1hcmtlciA9IGxpc3QtPmF0KG1hcmtlckluZGV4KTsKQEAgLTQyNiw3ICs0MjYsNyBAQCB2b2lk
IERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVtb3ZlTWFya2VycyhOb2RlKiBub2RlLCBEb2N1
bWVudE1hcmtlcjo6TWFya2VyVAogICAgIAogICAgIE1hcmtlck1hcDo6aXRlcmF0b3IgaXRlcmF0
b3IgPSBtX21hcmtlcnMuZmluZChub2RlKTsKICAgICBpZiAoaXRlcmF0b3IgIT0gbV9tYXJrZXJz
LmVuZCgpKQotICAgICAgICByZW1vdmVNYXJrZXJzRnJvbUxpc3Qobm9kZSwgaXRlcmF0b3ItPnNl
Y29uZCwgbWFya2VyVHlwZXMpOworICAgICAgICByZW1vdmVNYXJrZXJzRnJvbUxpc3Qobm9kZSwg
aXRlcmF0b3ItPnZhbHVlLCBtYXJrZXJUeXBlcyk7CiB9CiAKIHZvaWQgRG9jdW1lbnRNYXJrZXJD
b250cm9sbGVyOjpyZW1vdmVNYXJrZXJzKERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlcyBtYXJr
ZXJUeXBlcykKQEAgLTQzOSw3ICs0MzksNyBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxl
cjo6cmVtb3ZlTWFya2VycyhEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZXMgbWFya2VyVAogICAg
IE1hcmtlck1hcCBtYXJrZXJNYXBDb3B5ID0gbV9tYXJrZXJzOwogICAgIE1hcmtlck1hcDo6aXRl
cmF0b3IgZW5kID0gbWFya2VyTWFwQ29weS5lbmQoKTsKICAgICBmb3IgKE1hcmtlck1hcDo6aXRl
cmF0b3IgaSA9IG1hcmtlck1hcENvcHkuYmVnaW4oKTsgaSAhPSBlbmQ7ICsraSkKLSAgICAgICAg
cmVtb3ZlTWFya2Vyc0Zyb21MaXN0KGktPmZpcnN0LmdldCgpLCBpLT5zZWNvbmQsIG1hcmtlclR5
cGVzKTsKKyAgICAgICAgcmVtb3ZlTWFya2Vyc0Zyb21MaXN0KGktPmtleS5nZXQoKSwgaS0+dmFs
dWUsIG1hcmtlclR5cGVzKTsKICAgICBtX3Bvc3NpYmx5RXhpc3RpbmdNYXJrZXJUeXBlcy5yZW1v
dmUobWFya2VyVHlwZXMpOwogfQogCkBAIC00OTUsMTAgKzQ5NSwxMCBAQCB2b2lkIERvY3VtZW50
TWFya2VyQ29udHJvbGxlcjo6cmVwYWludE1hcmtlcnMoRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5
cGVzIG1hcmtlcgogICAgIC8vIG91dGVyIGxvb3A6IHByb2Nlc3MgZWFjaCBtYXJrZXJlZCBub2Rl
IGluIHRoZSBkb2N1bWVudAogICAgIE1hcmtlck1hcDo6aXRlcmF0b3IgZW5kID0gbV9tYXJrZXJz
LmVuZCgpOwogICAgIGZvciAoTWFya2VyTWFwOjppdGVyYXRvciBpID0gbV9tYXJrZXJzLmJlZ2lu
KCk7IGkgIT0gZW5kOyArK2kpIHsKLSAgICAgICAgTm9kZSogbm9kZSA9IGktPmZpcnN0LmdldCgp
OworICAgICAgICBOb2RlKiBub2RlID0gaS0+a2V5LmdldCgpOwogCiAgICAgICAgIC8vIGlubmVy
IGxvb3A6IHByb2Nlc3MgZWFjaCBtYXJrZXIgaW4gdGhlIGN1cnJlbnQgbm9kZQotICAgICAgICBN
YXJrZXJMaXN0KiBsaXN0ID0gaS0+c2Vjb25kOworICAgICAgICBNYXJrZXJMaXN0KiBsaXN0ID0g
aS0+dmFsdWU7CiAgICAgICAgIGJvb2wgbm9kZU5lZWRzUmVwYWludCA9IGZhbHNlOwogICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSAhPSBsaXN0LT5zaXplKCk7ICsraSkgewogICAgICAgICAg
ICAgRG9jdW1lbnRNYXJrZXIgbWFya2VyID0gbGlzdC0+YXQoaSk7CkBAIC01MjYsNyArNTI2LDcg
QEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmludmFsaWRhdGVSZW5kZXJlZFJlY3Rz
Rm9yTWFya2Vyc0luUmVjdChjb25zdCBMYXkKICAgICBmb3IgKE1hcmtlck1hcDo6aXRlcmF0b3Ig
aSA9IG1fbWFya2Vycy5iZWdpbigpOyBpICE9IGVuZDsgKytpKSB7CiAKICAgICAgICAgLy8gaW5u
ZXIgbG9vcDogcHJvY2VzcyBlYWNoIHJlY3QgaW4gdGhlIGN1cnJlbnQgbm9kZQotICAgICAgICBN
YXJrZXJMaXN0KiBsaXN0ID0gaS0+c2Vjb25kOworICAgICAgICBNYXJrZXJMaXN0KiBsaXN0ID0g
aS0+dmFsdWU7CiAgICAgICAgIGZvciAoc2l6ZV90IGxpc3RJbmRleCA9IDA7IGxpc3RJbmRleCA8
IGxpc3QtPnNpemUoKTsgKytsaXN0SW5kZXgpCiAgICAgICAgICAgICBsaXN0LT5hdChsaXN0SW5k
ZXgpLmludmFsaWRhdGUocik7CiAgICAgfQpAQCAtNjc1LDkgKzY3NSw5IEBAIHZvaWQgRG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyOjpzaG93TWFya2VycygpIGNvbnN0CiAgICAgZnByaW50ZihzdGRl
cnIsICIlZCBub2RlcyBoYXZlIG1hcmtlcnM6XG4iLCBtX21hcmtlcnMuc2l6ZSgpKTsKICAgICBN
YXJrZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fbWFya2Vycy5lbmQoKTsKICAgICBmb3Ig
KE1hcmtlck1hcDo6Y29uc3RfaXRlcmF0b3Igbm9kZUl0ZXJhdG9yID0gbV9tYXJrZXJzLmJlZ2lu
KCk7IG5vZGVJdGVyYXRvciAhPSBlbmQ7ICsrbm9kZUl0ZXJhdG9yKSB7Ci0gICAgICAgIE5vZGUq
IG5vZGUgPSBub2RlSXRlcmF0b3ItPmZpcnN0LmdldCgpOworICAgICAgICBOb2RlKiBub2RlID0g
bm9kZUl0ZXJhdG9yLT5rZXkuZ2V0KCk7CiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXAiLCBu
b2RlKTsKLSAgICAgICAgTWFya2VyTGlzdCogbGlzdCA9IG5vZGVJdGVyYXRvci0+c2Vjb25kOwor
ICAgICAgICBNYXJrZXJMaXN0KiBsaXN0ID0gbm9kZUl0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBtYXJrZXJJbmRleCA9IDA7IG1hcmtlckluZGV4IDwgbGlzdC0+c2l6ZSgp
OyArK21hcmtlckluZGV4KSB7CiAgICAgICAgICAgICBjb25zdCBEb2N1bWVudE1hcmtlciYgbWFy
a2VyID0gbGlzdC0+YXQobWFya2VySW5kZXgpOwogICAgICAgICAgICAgZnByaW50ZihzdGRlcnIs
ICIgJWQ6WyVkOiVkXSglZCkiLCBtYXJrZXIudHlwZSgpLCBtYXJrZXIuc3RhcnRPZmZzZXQoKSwg
bWFya2VyLmVuZE9mZnNldCgpLCBtYXJrZXIuYWN0aXZlTWF0Y2goKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRPcmRlcmVkTWFwLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudE9yZGVyZWRNYXAuY3BwCmluZGV4IDA4MmFhMDc0MGE3MWNjZGY1MGUxZDQy
ZDIzZDMxN2U2M2FmMmY0ZGEuLjEyOTdlNTEwMmZiNGU3OWNlM2RiMTEyMzU3MDIxZTNkZDA1NTRh
NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE9yZGVyZWRNYXAuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE9yZGVyZWRNYXAuY3BwCkBAIC05OCw3
ICs5OCw3IEBAIHZvaWQgRG9jdW1lbnRPcmRlcmVkTWFwOjpyZW1vdmUoQXRvbWljU3RyaW5nSW1w
bCoga2V5LCBFbGVtZW50KiBlbGVtZW50KQogCiAgICAgbV9tYXAuY2hlY2tDb25zaXN0ZW5jeSgp
OwogICAgIE1hcDo6aXRlcmF0b3IgY2FjaGVkSXRlbSA9IG1fbWFwLmZpbmQoa2V5KTsKLSAgICBp
ZiAoY2FjaGVkSXRlbSAhPSBtX21hcC5lbmQoKSAmJiBjYWNoZWRJdGVtLT5zZWNvbmQgPT0gZWxl
bWVudCkKKyAgICBpZiAoY2FjaGVkSXRlbSAhPSBtX21hcC5lbmQoKSAmJiBjYWNoZWRJdGVtLT52
YWx1ZSA9PSBlbGVtZW50KQogICAgICAgICBtX21hcC5yZW1vdmUoY2FjaGVkSXRlbSk7CiAgICAg
ZWxzZQogICAgICAgICBtX2R1cGxpY2F0ZUNvdW50cy5yZW1vdmUoa2V5KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50QXR0cmlidXRlRGF0YS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vRWxlbWVudEF0dHJpYnV0ZURhdGEuY3BwCmluZGV4IDQ3MWU1MTllMGZiY2I4NmQ0
ZWQyNTg2ZWFjOWFmZjQ0MjVjNDU3MzEuLjBlYWZiYzRlNTM3NmNhOTcyMmMyZWVmOWMwNmEzNzY4
ODkzYTBhYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50QXR0cmlidXRl
RGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmNw
cApAQCAtMTE4LDcgKzExOCw3IEBAIHN0YXRpYyBBdHRyTGlzdCogZW5zdXJlQXR0ckxpc3RGb3JF
bGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgQVNTRVJUKCFhdHRyTGlzdE1hcCgpLmNvbnRh
aW5zKGVsZW1lbnQpKTsKICAgICBlbGVtZW50LT5zZXRIYXNBdHRyTGlzdCgpOwogICAgIEF0dHJM
aXN0TWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gYXR0ckxpc3RNYXAoKS5hZGQoZWxlbWVudCwgYWRv
cHRQdHIobmV3IEF0dHJMaXN0KSk7Ci0gICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25k
LmdldCgpOworICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpOwogfQogCiBz
dGF0aWMgdm9pZCByZW1vdmVBdHRyTGlzdEZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAKaW5kZXggZTU4MzkwYzVlNGFkOWQ4ODBl
Y2VmZGQ1MWQ4ZjBkZDgwODc2MTE5ZS4uODliOWNjNzBiNzgwYzhjODBiYjc0NGQxZDhjMWVmZjE3
NTgwYzUxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAKQEAgLTExMSw3
ICsxMTEsNyBAQCBFdmVudFRhcmdldCogRXZlbnRSZWxhdGVkVGFyZ2V0QWRqdXN0ZXI6OmZpbmRS
ZWxhdGVkVGFyZ2V0KFRyZWVTY29wZSogc2NvcGUpCiAgICAgICAgIHBhcmVudFRyZWVTY29wZXMu
YXBwZW5kKHNjb3BlKTsKICAgICAgICAgUmVsYXRlZFRhcmdldE1hcDo6Y29uc3RfaXRlcmF0b3Ig
Zm91bmQgPSBtX3JlbGF0ZWRUYXJnZXRNYXAuZmluZChzY29wZSk7CiAgICAgICAgIGlmIChmb3Vu
ZCAhPSBtX3JlbGF0ZWRUYXJnZXRNYXAuZW5kKCkpIHsKLSAgICAgICAgICAgIHJlbGF0ZWRUYXJn
ZXQgPSBmb3VuZC0+c2Vjb25kOworICAgICAgICAgICAgcmVsYXRlZFRhcmdldCA9IGZvdW5kLT52
YWx1ZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIHNjb3BlID0gc2Nv
cGUtPnBhcmVudFRyZWVTY29wZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2
ZW50TGlzdGVuZXJNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TGlzdGVuZXJNYXAu
Y3BwCmluZGV4IGMxZmQ0ZDdjOTU3YTY0YmZmNzg4ZjkwMWU2MWRlMDFjYTA5MjI3N2UuLmFmOGM0
OGFlZGU1NTEzNmY3NGZlMTg0NzgxZDA1MjhiNDFkN2NjYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9FdmVudExpc3RlbmVyTWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RXZlbnRMaXN0ZW5lck1hcC5jcHAKQEAgLTEwMiw3ICsxMDIsNyBAQCBWZWN0b3I8QXRvbWljU3Ry
aW5nPiBFdmVudExpc3RlbmVyTWFwOjpldmVudFR5cGVzKCkgY29uc3QKICAgICAgICAgRXZlbnRM
aXN0ZW5lckhhc2hNYXA6Oml0ZXJhdG9yIGl0ID0gbV9oYXNoTWFwLT5iZWdpbigpOwogICAgICAg
ICBFdmVudExpc3RlbmVySGFzaE1hcDo6aXRlcmF0b3IgZW5kID0gbV9oYXNoTWFwLT5lbmQoKTsK
ICAgICAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIHR5cGVzLmFwcGVu
ZChpdC0+Zmlyc3QpOworICAgICAgICAgICAgdHlwZXMuYXBwZW5kKGl0LT5rZXkpOwogICAgIH0g
ZWxzZSBpZiAobV9zaW5nbGVFdmVudExpc3RlbmVyVmVjdG9yKQogICAgICAgICB0eXBlcy5hcHBl
bmQobV9zaW5nbGVFdmVudExpc3RlbmVyVHlwZSk7CiAKQEAgLTEzNiw5ICsxMzYsOSBAQCBib29s
IEV2ZW50TGlzdGVuZXJNYXA6OmFkZChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFz
c1JlZlB0cjxFdmVudExpc3RlbgogICAgIGlmIChtX2hhc2hNYXApIHsKICAgICAgICAgRXZlbnRM
aXN0ZW5lckhhc2hNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX2hhc2hNYXAtPmFkZChldmVudFR5
cGUsIG51bGxwdHIpOwogICAgICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgICAg
ICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IGFkb3B0UHRyKG5ldyBFdmVudExpc3RlbmVyVmVj
dG9yKTsKKyAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBhZG9wdFB0cihuZXcg
RXZlbnRMaXN0ZW5lclZlY3Rvcik7CiAKLSAgICAgICAgcmV0dXJuIGFkZExpc3RlbmVyVG9WZWN0
b3IocmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQuZ2V0KCksIGxpc3RlbmVyLCB1c2VDYXB0dXJlKTsK
KyAgICAgICAgcmV0dXJuIGFkZExpc3RlbmVyVG9WZWN0b3IocmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZS5nZXQoKSwgbGlzdGVuZXIsIHVzZUNhcHR1cmUpOwogICAgIH0KIAogICAgIGlmICghbV9zaW5n
bGVFdmVudExpc3RlbmVyVmVjdG9yKSB7CkBAIC0xNzksOCArMTc5LDggQEAgYm9vbCBFdmVudExp
c3RlbmVyTWFwOjpyZW1vdmUoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlz
dGVuZXIqIGxpc3QKICAgICBpZiAoaXQgPT0gbV9oYXNoTWFwLT5lbmQoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgYm9vbCB3YXNSZW1vdmVkID0gcmVtb3ZlTGlzdGVuZXJGcm9tVmVj
dG9yKGl0LT5zZWNvbmQuZ2V0KCksIGxpc3RlbmVyLCB1c2VDYXB0dXJlLCBpbmRleE9mUmVtb3Zl
ZExpc3RlbmVyKTsKLSAgICBpZiAoaXQtPnNlY29uZC0+aXNFbXB0eSgpKQorICAgIGJvb2wgd2Fz
UmVtb3ZlZCA9IHJlbW92ZUxpc3RlbmVyRnJvbVZlY3RvcihpdC0+dmFsdWUuZ2V0KCksIGxpc3Rl
bmVyLCB1c2VDYXB0dXJlLCBpbmRleE9mUmVtb3ZlZExpc3RlbmVyKTsKKyAgICBpZiAoaXQtPnZh
bHVlLT5pc0VtcHR5KCkpCiAgICAgICAgIG1faGFzaE1hcC0+cmVtb3ZlKGl0KTsKICAgICByZXR1
cm4gd2FzUmVtb3ZlZDsKIH0KQEAgLTE5Myw3ICsxOTMsNyBAQCBFdmVudExpc3RlbmVyVmVjdG9y
KiBFdmVudExpc3RlbmVyTWFwOjpmaW5kKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKQog
ICAgICAgICBFdmVudExpc3RlbmVySGFzaE1hcDo6aXRlcmF0b3IgaXQgPSBtX2hhc2hNYXAtPmZp
bmQoZXZlbnRUeXBlKTsKICAgICAgICAgaWYgKGl0ID09IG1faGFzaE1hcC0+ZW5kKCkpCiAgICAg
ICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQuZ2V0KCk7CisgICAg
ICAgIHJldHVybiBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgfQogCiAgICAgaWYgKG1fc2luZ2xlRXZl
bnRMaXN0ZW5lclR5cGUgPT0gZXZlbnRUeXBlKQpAQCAtMjI3LDcgKzIyNyw3IEBAIHZvaWQgRXZl
bnRMaXN0ZW5lck1hcDo6cmVtb3ZlRmlyc3RFdmVudExpc3RlbmVyQ3JlYXRlZEZyb21NYXJrdXAo
Y29uc3QgQXRvbWljU3RyCiAgICAgICAgIEV2ZW50TGlzdGVuZXJIYXNoTWFwOjppdGVyYXRvciBy
ZXN1bHQgPSBtX2hhc2hNYXAtPmZpbmQoZXZlbnRUeXBlKTsKICAgICAgICAgQVNTRVJUKHJlc3Vs
dCAhPSBtX2hhc2hNYXAtPmVuZCgpKTsKIAotICAgICAgICBFdmVudExpc3RlbmVyVmVjdG9yKiBs
aXN0ZW5lclZlY3RvciA9IHJlc3VsdC0+c2Vjb25kLmdldCgpOworICAgICAgICBFdmVudExpc3Rl
bmVyVmVjdG9yKiBsaXN0ZW5lclZlY3RvciA9IHJlc3VsdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAg
IEFTU0VSVChsaXN0ZW5lclZlY3Rvcik7CiAKICAgICAgICAgcmVtb3ZlRmlyc3RMaXN0ZW5lckNy
ZWF0ZWRGcm9tTWFya3VwKGxpc3RlbmVyVmVjdG9yKTsKQEAgLTI2NSw3ICsyNjUsNyBAQCB2b2lk
IEV2ZW50TGlzdGVuZXJNYXA6OmNvcHlFdmVudExpc3RlbmVyc05vdENyZWF0ZWRGcm9tTWFya3Vw
VG9UYXJnZXQoRXZlbnRUYXJnZQogICAgIGlmIChtX2hhc2hNYXApIHsKICAgICAgICAgRXZlbnRM
aXN0ZW5lckhhc2hNYXA6Oml0ZXJhdG9yIGVuZCA9IG1faGFzaE1hcC0+ZW5kKCk7CiAgICAgICAg
IGZvciAoRXZlbnRMaXN0ZW5lckhhc2hNYXA6Oml0ZXJhdG9yIGl0ID0gbV9oYXNoTWFwLT5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBjb3B5TGlzdGVuZXJzTm90Q3JlYXRl
ZEZyb21NYXJrdXBUb1RhcmdldChpdC0+Zmlyc3QsIGl0LT5zZWNvbmQuZ2V0KCksIHRhcmdldCk7
CisgICAgICAgICAgICBjb3B5TGlzdGVuZXJzTm90Q3JlYXRlZEZyb21NYXJrdXBUb1RhcmdldChp
dC0+a2V5LCBpdC0+dmFsdWUuZ2V0KCksIHRhcmdldCk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKQEAgLTMyNSw3ICszMjUsNyBAQCBFdmVudExpc3RlbmVyKiBFdmVudExpc3RlbmVySXRlcmF0
b3I6Om5leHRMaXN0ZW5lcigpCiAKICAgICBpZiAobV9tYXAtPm1faGFzaE1hcCkgewogICAgICAg
ICBmb3IgKDsgbV9tYXBJdGVyYXRvciAhPSBtX21hcEVuZDsgKyttX21hcEl0ZXJhdG9yKSB7Ci0g
ICAgICAgICAgICBFdmVudExpc3RlbmVyVmVjdG9yJiBsaXN0ZW5lcnMgPSAqbV9tYXBJdGVyYXRv
ci0+c2Vjb25kOworICAgICAgICAgICAgRXZlbnRMaXN0ZW5lclZlY3RvciYgbGlzdGVuZXJzID0g
Km1fbWFwSXRlcmF0b3ItPnZhbHVlOwogICAgICAgICAgICAgaWYgKG1faW5kZXggPCBsaXN0ZW5l
cnMuc2l6ZSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBsaXN0ZW5lcnNbbV9pbmRleCsrXS5s
aXN0ZW5lci5nZXQoKTsKICAgICAgICAgICAgIG1faW5kZXggPSAwOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL0lkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vSWRUYXJnZXRPYnNlcnZlclJlZ2lzdHJ5LmNwcAppbmRleCA1ZmMyNmFjZmVlMzMy
ZWI3ZDJkNjE5YmE1OTIwYzczM2Y1YmIwZjcwLi5hYWZhOGEyZDFiNTMwYjdkMGYzZTM2NzA1NThl
OGM5NmI5NDhhZmI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vSWRUYXJnZXRPYnNl
cnZlclJlZ2lzdHJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vSWRUYXJnZXRPYnNlcnZl
clJlZ2lzdHJ5LmNwcApAQCAtNDIsOSArNDIsOSBAQCB2b2lkIElkVGFyZ2V0T2JzZXJ2ZXJSZWdp
c3RyeTo6YWRkT2JzZXJ2ZXIoY29uc3QgQXRvbWljU3RyaW5nJiBpZCwgSWRUYXJnZXRPYnNlcgog
ICAgIAogICAgIElkVG9PYnNlcnZlclNldE1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fcmVnaXN0
cnkuYWRkKGlkLmltcGwoKSwgbnVsbHB0cik7CiAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQot
ICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IGFkb3B0UHRyKG5ldyBPYnNlcnZlclNl
dCgpKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGFkb3B0UHRyKG5ldyBPYnNl
cnZlclNldCgpKTsKIAotICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLT5hZGQob2JzZXJ2ZXIp
OworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPmFkZChvYnNlcnZlcik7CiB9CiAKIHZvaWQg
SWRUYXJnZXRPYnNlcnZlclJlZ2lzdHJ5OjpyZW1vdmVPYnNlcnZlcihjb25zdCBBdG9taWNTdHJp
bmcmIGlkLCBJZFRhcmdldE9ic2VydmVyKiBvYnNlcnZlcikKQEAgLTU0LDcgKzU0LDcgQEAgdm9p
ZCBJZFRhcmdldE9ic2VydmVyUmVnaXN0cnk6OnJlbW92ZU9ic2VydmVyKGNvbnN0IEF0b21pY1N0
cmluZyYgaWQsIElkVGFyZ2V0T2IKIAogICAgIElkVG9PYnNlcnZlclNldE1hcDo6aXRlcmF0b3Ig
aXRlciA9IG1fcmVnaXN0cnkuZmluZChpZC5pbXBsKCkpOwogCi0gICAgT2JzZXJ2ZXJTZXQqIHNl
dCA9IGl0ZXItPnNlY29uZC5nZXQoKTsKKyAgICBPYnNlcnZlclNldCogc2V0ID0gaXRlci0+dmFs
dWUuZ2V0KCk7CiAgICAgc2V0LT5yZW1vdmUob2JzZXJ2ZXIpOwogICAgIGlmIChzZXQtPmlzRW1w
dHkoKSAmJiBzZXQgIT0gbV9ub3RpZnlpbmdPYnNlcnZlcnNJblNldCkKICAgICAgICAgbV9yZWdp
c3RyeS5yZW1vdmUoaXRlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTWVtb3J5
SW5zdHJ1bWVudGF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vTWVtb3J5SW5zdHJ1bWVudGF0
aW9uLmgKaW5kZXggMzVjYjZjYjdhZjA1YzNlMTgwYmVkNjkzN2VjMjAwOGYyZWQ3MTUzMy4uMmI5
NWY5NjU2ODZhMTY4NjkzNzZlYmY0NjgzZTJlZTdlZDI5ZWUzNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL01lbW9yeUluc3RydW1lbnRhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9NZW1vcnlJbnN0cnVtZW50YXRpb24uaApAQCAtMzIzLDggKzMyMyw4IEBAIHZvaWQgTWVt
b3J5SW5zdHJ1bWVudGF0aW9uOjphZGRJbnN0cnVtZW50ZWRNYXBFbnRyaWVzKGNvbnN0IE1hcFR5
cGUmIG1hcCwgT2JqZWN0CiB7CiAgICAgdHlwZW5hbWUgTWFwVHlwZTo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gbWFwLmVuZCgpOwogICAgIGZvciAodHlwZW5hbWUgTWFwVHlwZTo6Y29uc3RfaXRlcmF0
b3IgaSA9IG1hcC5iZWdpbigpOyBpICE9IGVuZDsgKytpKSB7Ci0gICAgICAgIGFkZEluc3RydW1l
bnRlZE9iamVjdChpLT5maXJzdCwgb3duZXJPYmplY3RUeXBlKTsKLSAgICAgICAgYWRkSW5zdHJ1
bWVudGVkT2JqZWN0KGktPnNlY29uZCwgb3duZXJPYmplY3RUeXBlKTsKKyAgICAgICAgYWRkSW5z
dHJ1bWVudGVkT2JqZWN0KGktPmtleSwgb3duZXJPYmplY3RUeXBlKTsKKyAgICAgICAgYWRkSW5z
dHJ1bWVudGVkT2JqZWN0KGktPnZhbHVlLCBvd25lck9iamVjdFR5cGUpOwogICAgIH0KIH0KIApA
QCAtMzMzLDcgKzMzMyw3IEBAIHZvaWQgTWVtb3J5SW5zdHJ1bWVudGF0aW9uOjphZGRJbnN0cnVt
ZW50ZWRNYXBWYWx1ZXMoY29uc3QgTWFwVHlwZSYgbWFwLCBPYmplY3RUCiB7CiAgICAgdHlwZW5h
bWUgTWFwVHlwZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLmVuZCgpOwogICAgIGZvciAodHlw
ZW5hbWUgTWFwVHlwZTo6Y29uc3RfaXRlcmF0b3IgaSA9IG1hcC5iZWdpbigpOyBpICE9IGVuZDsg
KytpKQotICAgICAgICBhZGRJbnN0cnVtZW50ZWRPYmplY3QoaS0+c2Vjb25kLCBvd25lck9iamVj
dFR5cGUpOworICAgICAgICBhZGRJbnN0cnVtZW50ZWRPYmplY3QoaS0+dmFsdWUsIG93bmVyT2Jq
ZWN0VHlwZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIExpc3RIYXNoU2V0VHlwZT4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25PYnNlcnZlckludGVyZXN0R3JvdXAuY3Bw
CmluZGV4IDI0YzBjYjU4NjUxN2UwOGJjN2E4YjQwOTNmMjFkMzFlMGRiMmQ2NGUuLjRmYWQyMjA4
MTg1M2NkODE1MzRkMzAwZDE2MWQ4OGIxYWE1ZTk0YzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9NdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL011dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3VwLmNwcApAQCAtNjIsNyArNjIs
NyBAQCBNdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cDo6TXV0YXRpb25PYnNlcnZlckludGVy
ZXN0R3JvdXAoSGFzaE1hcDxNdXRhdGlvbk9icwogYm9vbCBNdXRhdGlvbk9ic2VydmVySW50ZXJl
c3RHcm91cDo6aXNPbGRWYWx1ZVJlcXVlc3RlZCgpCiB7CiAgICAgZm9yIChIYXNoTWFwPE11dGF0
aW9uT2JzZXJ2ZXIqLCBNdXRhdGlvblJlY29yZERlbGl2ZXJ5T3B0aW9ucz46Oml0ZXJhdG9yIGl0
ZXIgPSBtX29ic2VydmVycy5iZWdpbigpOyBpdGVyICE9IG1fb2JzZXJ2ZXJzLmVuZCgpOyArK2l0
ZXIpIHsKLSAgICAgICAgaWYgKGhhc09sZFZhbHVlKGl0ZXItPnNlY29uZCkpCisgICAgICAgIGlm
IChoYXNPbGRWYWx1ZShpdGVyLT52YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNzMsOCArNzMsOCBAQCB2b2lkIE11dGF0aW9uT2Jz
ZXJ2ZXJJbnRlcmVzdEdyb3VwOjplbnF1ZXVlTXV0YXRpb25SZWNvcmQoUGFzc1JlZlB0cjxNdXRh
dGlvblJlYwogICAgIFJlZlB0cjxNdXRhdGlvblJlY29yZD4gbXV0YXRpb24gPSBwcnBNdXRhdGlv
bjsKICAgICBSZWZQdHI8TXV0YXRpb25SZWNvcmQ+IG11dGF0aW9uV2l0aE51bGxPbGRWYWx1ZTsK
ICAgICBmb3IgKEhhc2hNYXA8TXV0YXRpb25PYnNlcnZlciosIE11dGF0aW9uUmVjb3JkRGVsaXZl
cnlPcHRpb25zPjo6aXRlcmF0b3IgaXRlciA9IG1fb2JzZXJ2ZXJzLmJlZ2luKCk7IGl0ZXIgIT0g
bV9vYnNlcnZlcnMuZW5kKCk7ICsraXRlcikgewotICAgICAgICBNdXRhdGlvbk9ic2VydmVyKiBv
YnNlcnZlciA9IGl0ZXItPmZpcnN0OwotICAgICAgICBpZiAoaGFzT2xkVmFsdWUoaXRlci0+c2Vj
b25kKSkgeworICAgICAgICBNdXRhdGlvbk9ic2VydmVyKiBvYnNlcnZlciA9IGl0ZXItPmtleTsK
KyAgICAgICAgaWYgKGhhc09sZFZhbHVlKGl0ZXItPnZhbHVlKSkgewogICAgICAgICAgICAgb2Jz
ZXJ2ZXItPmVucXVldWVNdXRhdGlvblJlY29yZChtdXRhdGlvbik7CiAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCmluZGV4IGEzYTFjMjJmMjU1NDlmN2ZjYWJm
NDA3MDE2MWFiNjk4ZWQyMWM3OWIuLmRkNTE3YThkZDU2ZGU2YzI3NjBmMmUxYWVhZjA0YzUwZWUx
ZDgzYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKQEAgLTE5MCw3ICsxOTAsNyBAQCB2b2lkIE5vZGU6OmR1
bXBTdGF0aXN0aWNzKCkKICAgICAgICAgICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gc3RhdGlj
X2Nhc3Q8RWxlbWVudCo+KG5vZGUpOwogICAgICAgICAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBz
aXplX3Q+OjpBZGRSZXN1bHQgcmVzdWx0ID0gcGVyVGFnQ291bnQuYWRkKGVsZW1lbnQtPnRhZ05h
bWUoKSwgMSk7CiAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQrKzsKKyAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSsrOwogCiAgICAgICAgICAgICAgICAgaWYgKEVs
ZW1lbnRBdHRyaWJ1dGVEYXRhKiBhdHRyaWJ1dGVEYXRhID0gZWxlbWVudC0+YXR0cmlidXRlRGF0
YSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMgKz0gYXR0cmlidXRlRGF0YS0+
bGVuZ3RoKCk7CkBAIC0yNzgsNyArMjc4LDcgQEAgdm9pZCBOb2RlOjpkdW1wU3RhdGlzdGljcygp
CiAKICAgICBwcmludGYoIkVsZW1lbnQgdGFnIG5hbWUgZGlzdGlidXRpb246XG4iKTsKICAgICBm
b3IgKEhhc2hNYXA8U3RyaW5nLCBzaXplX3Q+OjppdGVyYXRvciBpdCA9IHBlclRhZ0NvdW50LmJl
Z2luKCk7IGl0ICE9IHBlclRhZ0NvdW50LmVuZCgpOyArK2l0KQotICAgICAgICBwcmludGYoIiAg
TnVtYmVyIG9mIDwlcz4gdGFnczogJXp1XG4iLCBpdC0+Zmlyc3QudXRmOCgpLmRhdGEoKSwgaXQt
PnNlY29uZCk7CisgICAgICAgIHByaW50ZigiICBOdW1iZXIgb2YgPCVzPiB0YWdzOiAlenVcbiIs
IGl0LT5rZXkudXRmOCgpLmRhdGEoKSwgaXQtPnZhbHVlKTsKIAogICAgIHByaW50ZigiQXR0cmli
dXRlczpcbiIpOwogICAgIHByaW50ZigiICBOdW1iZXIgb2YgQXR0cmlidXRlcyAobm9uLU5vZGUg
YW5kIE5vZGUpOiAlenUgWyV6dV1cbiIsIGF0dHJpYnV0ZXMsIHNpemVvZihBdHRyaWJ1dGUpKTsK
QEAgLTUxMSw3ICs1MTEsNyBAQCB2b2lkIE5vZGU6OmNsZWFyUmFyZURhdGEoKQogICAgICAgICBO
b2RlUmFyZURhdGE6Ok5vZGVSYXJlRGF0YU1hcCYgZGF0YU1hcCA9IE5vZGVSYXJlRGF0YTo6cmFy
ZURhdGFNYXAoKTsKICAgICAgICAgTm9kZVJhcmVEYXRhOjpOb2RlUmFyZURhdGFNYXA6Oml0ZXJh
dG9yIGl0ID0gZGF0YU1hcC5maW5kKHRoaXMpOwogICAgICAgICBBU1NFUlQoaXQgIT0gZGF0YU1h
cC5lbmQoKSk7Ci0gICAgICAgIGRlbGV0ZSBpdC0+c2Vjb25kOworICAgICAgICBkZWxldGUgaXQt
PnZhbHVlOwogICAgICAgICBkYXRhTWFwLnJlbW92ZShpdCk7CiAgICAgfQogICAgIGNsZWFyRmxh
ZyhIYXNSYXJlRGF0YUZsYWcpOwpAQCAtMjI2NSwxOCArMjI2NSwxOCBAQCB2b2lkIE5vZGVMaXN0
c05vZGVEYXRhOjppbnZhbGlkYXRlQ2FjaGVzKGNvbnN0IFF1YWxpZmllZE5hbWUqIGF0dHJOYW1l
KQogewogICAgIE5vZGVMaXN0QXRvbWljTmFtZUNhY2hlTWFwOjpjb25zdF9pdGVyYXRvciBhdG9t
aWNOYW1lQ2FjaGVFbmQgPSBtX2F0b21pY05hbWVDYWNoZXMuZW5kKCk7CiAgICAgZm9yIChOb2Rl
TGlzdEF0b21pY05hbWVDYWNoZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2F0b21pY05hbWVD
YWNoZXMuYmVnaW4oKTsgaXQgIT0gYXRvbWljTmFtZUNhY2hlRW5kOyArK2l0KQotICAgICAgICBp
dC0+c2Vjb25kLT5pbnZhbGlkYXRlQ2FjaGUoYXR0ck5hbWUpOworICAgICAgICBpdC0+dmFsdWUt
PmludmFsaWRhdGVDYWNoZShhdHRyTmFtZSk7CiAKICAgICBOb2RlTGlzdE5hbWVDYWNoZU1hcDo6
Y29uc3RfaXRlcmF0b3IgbmFtZUNhY2hlRW5kID0gbV9uYW1lQ2FjaGVzLmVuZCgpOwogICAgIGZv
ciAoTm9kZUxpc3ROYW1lQ2FjaGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9uYW1lQ2FjaGVz
LmJlZ2luKCk7IGl0ICE9IG5hbWVDYWNoZUVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+
aW52YWxpZGF0ZUNhY2hlKGF0dHJOYW1lKTsKKyAgICAgICAgaXQtPnZhbHVlLT5pbnZhbGlkYXRl
Q2FjaGUoYXR0ck5hbWUpOwogCiAgICAgaWYgKGF0dHJOYW1lKQogICAgICAgICByZXR1cm47CiAK
ICAgICBUYWdOb2RlTGlzdENhY2hlTlM6Oml0ZXJhdG9yIHRhZ0NhY2hlRW5kID0gbV90YWdOb2Rl
TGlzdENhY2hlTlMuZW5kKCk7CiAgICAgZm9yIChUYWdOb2RlTGlzdENhY2hlTlM6Oml0ZXJhdG9y
IGl0ID0gbV90YWdOb2RlTGlzdENhY2hlTlMuYmVnaW4oKTsgaXQgIT0gdGFnQ2FjaGVFbmQ7ICsr
aXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPmludmFsaWRhdGVDYWNoZSgpOworICAgICAgICBpdC0+
dmFsdWUtPmludmFsaWRhdGVDYWNoZSgpOwogfQogCiB2b2lkIE5vZGU6OmdldFN1YnJlc291cmNl
VVJMcyhMaXN0SGFzaFNldDxLVVJMPiYgdXJscykgY29uc3QKQEAgLTI0MzMsNyArMjQzMyw3IEBA
IHZvaWQgTm9kZTo6Y29sbGVjdE1hdGNoaW5nT2JzZXJ2ZXJzRm9yTXV0YXRpb24oSGFzaE1hcDxN
dXRhdGlvbk9ic2VydmVyKiwgTXV0YXRpCiAgICAgICAgICAgICAgICAgTXV0YXRpb25SZWNvcmRE
ZWxpdmVyeU9wdGlvbnMgZGVsaXZlcnlPcHRpb25zID0gcmVnaXN0cmF0aW9uLT5kZWxpdmVyeU9w
dGlvbnMoKTsKICAgICAgICAgICAgICAgICBIYXNoTWFwPE11dGF0aW9uT2JzZXJ2ZXIqLCBNdXRh
dGlvblJlY29yZERlbGl2ZXJ5T3B0aW9ucz46OkFkZFJlc3VsdCByZXN1bHQgPSBvYnNlcnZlcnMu
YWRkKHJlZ2lzdHJhdGlvbi0+b2JzZXJ2ZXIoKSwgZGVsaXZlcnlPcHRpb25zKTsKICAgICAgICAg
ICAgICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICAgICAgICAgICAgICByZXN1
bHQuaXRlcmF0b3ItPnNlY29uZCB8PSBkZWxpdmVyeU9wdGlvbnM7CisgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgfD0gZGVsaXZlcnlPcHRpb25zOwogCiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KQEAgLTI0NDYsNyArMjQ0Niw3IEBAIHZvaWQgTm9kZTo6Y29sbGVj
dE1hdGNoaW5nT2JzZXJ2ZXJzRm9yTXV0YXRpb24oSGFzaE1hcDxNdXRhdGlvbk9ic2VydmVyKiwg
TXV0YXRpCiAgICAgICAgICAgICAgICAgTXV0YXRpb25SZWNvcmREZWxpdmVyeU9wdGlvbnMgZGVs
aXZlcnlPcHRpb25zID0gcmVnaXN0cmF0aW9uLT5kZWxpdmVyeU9wdGlvbnMoKTsKICAgICAgICAg
ICAgICAgICBIYXNoTWFwPE11dGF0aW9uT2JzZXJ2ZXIqLCBNdXRhdGlvblJlY29yZERlbGl2ZXJ5
T3B0aW9ucz46OkFkZFJlc3VsdCByZXN1bHQgPSBvYnNlcnZlcnMuYWRkKHJlZ2lzdHJhdGlvbi0+
b2JzZXJ2ZXIoKSwgZGVsaXZlcnlPcHRpb25zKTsKICAgICAgICAgICAgICAgICBpZiAoIXJlc3Vs
dC5pc05ld0VudHJ5KQotICAgICAgICAgICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29u
ZCB8PSBkZWxpdmVyeU9wdGlvbnM7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRv
ci0+dmFsdWUgfD0gZGVsaXZlcnlPcHRpb25zOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGVSYXJlRGF0YS5oIGIvU291
cmNlL1dlYkNvcmUvZG9tL05vZGVSYXJlRGF0YS5oCmluZGV4IDFmZGViYjZkMjE4NzM0ODU0NGM4
MzIwZTJjNTVkNmJkODcwOTc3ZjQuLmY0MzE3YmRiYTViZWRkYWRmMjQxMmJlZjIzNGM1NjIwNjEz
NDUyODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRhLmgKQEAgLTY4LDEwICs2OCwxMCBAQCBw
dWJsaWM6CiAgICAgewogICAgICAgICBOb2RlTGlzdEF0b21pY05hbWVDYWNoZU1hcDo6QWRkUmVz
dWx0IHJlc3VsdCA9IG1fYXRvbWljTmFtZUNhY2hlcy5hZGQobmFtZWROb2RlTGlzdEtleShsaXN0
VHlwZSwgbmFtZSksIDApOwogICAgICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQqPihyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7Cisg
ICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VCo+KHJlc3VsdC5pdGVyYXRvci0+dmFsdWUp
OwogCiAgICAgICAgIFJlZlB0cjxUPiBsaXN0ID0gVDo6Y3JlYXRlKG5vZGUsIG5hbWUpOwotICAg
ICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IGxpc3QuZ2V0KCk7CisgICAgICAgIHJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUgPSBsaXN0LmdldCgpOwogICAgICAgICByZXR1cm4gbGlzdC5yZWxl
YXNlKCk7CiAgICAgfQogCkBAIC04MCwxMCArODAsMTAgQEAgcHVibGljOgogICAgIHsKICAgICAg
ICAgTm9kZUxpc3ROYW1lQ2FjaGVNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX25hbWVDYWNoZXMu
YWRkKG5hbWVkTm9kZUxpc3RLZXkobGlzdFR5cGUsIG5hbWUpLCAwKTsKICAgICAgICAgaWYgKCFy
ZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUKj4ocmVz
dWx0Lml0ZXJhdG9yLT5zZWNvbmQpOworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQq
PihyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKIAogICAgICAgICBSZWZQdHI8VD4gbGlzdCA9IFQ6
OmNyZWF0ZShub2RlLCBuYW1lKTsKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBs
aXN0LmdldCgpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gbGlzdC5nZXQoKTsK
ICAgICAgICAgcmV0dXJuIGxpc3QucmVsZWFzZSgpOwogICAgIH0KIApAQCAtOTIsMTAgKzkyLDEw
IEBAIHB1YmxpYzoKICAgICAgICAgUXVhbGlmaWVkTmFtZSBuYW1lKG51bGxBdG9tLCBsb2NhbE5h
bWUsIG5hbWVzcGFjZVVSSSk7CiAgICAgICAgIFRhZ05vZGVMaXN0Q2FjaGVOUzo6QWRkUmVzdWx0
IHJlc3VsdCA9IG1fdGFnTm9kZUxpc3RDYWNoZU5TLmFkZChuYW1lLCAwKTsKICAgICAgICAgaWYg
KCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3It
PnNlY29uZDsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogCiAg
ICAgICAgIFJlZlB0cjxUYWdOb2RlTGlzdD4gbGlzdCA9IFRhZ05vZGVMaXN0OjpjcmVhdGUobm9k
ZSwgbmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUpOwotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNl
Y29uZCA9IGxpc3QuZ2V0KCk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBsaXN0
LmdldCgpOwogICAgICAgICByZXR1cm4gbGlzdC5yZWxlYXNlKCk7CiAgICAgfQogCkBAIC0xMzYs
MjEgKzEzNiwyMSBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChvbGREb2N1bWVudCAhPSBuZXdEb2N1
bWVudCkgewogICAgICAgICAgICAgTm9kZUxpc3RBdG9taWNOYW1lQ2FjaGVNYXA6OmNvbnN0X2l0
ZXJhdG9yIGF0b21pY05hbWVDYWNoZUVuZCA9IG1fYXRvbWljTmFtZUNhY2hlcy5lbmQoKTsKICAg
ICAgICAgICAgIGZvciAoTm9kZUxpc3RBdG9taWNOYW1lQ2FjaGVNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbV9hdG9taWNOYW1lQ2FjaGVzLmJlZ2luKCk7IGl0ICE9IGF0b21pY05hbWVDYWNoZUVu
ZDsgKytpdCkgewotICAgICAgICAgICAgICAgIER5bmFtaWNTdWJ0cmVlTm9kZUxpc3QqIGxpc3Qg
PSBpdC0+c2Vjb25kOworICAgICAgICAgICAgICAgIER5bmFtaWNTdWJ0cmVlTm9kZUxpc3QqIGxp
c3QgPSBpdC0+dmFsdWU7CiAgICAgICAgICAgICAgICAgb2xkRG9jdW1lbnQtPnVucmVnaXN0ZXJO
b2RlTGlzdENhY2hlKGxpc3QpOwogICAgICAgICAgICAgICAgIG5ld0RvY3VtZW50LT5yZWdpc3Rl
ck5vZGVMaXN0Q2FjaGUobGlzdCk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIE5vZGVM
aXN0TmFtZUNhY2hlTWFwOjpjb25zdF9pdGVyYXRvciBuYW1lQ2FjaGVFbmQgPSBtX25hbWVDYWNo
ZXMuZW5kKCk7CiAgICAgICAgICAgICBmb3IgKE5vZGVMaXN0TmFtZUNhY2hlTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IG1fbmFtZUNhY2hlcy5iZWdpbigpOyBpdCAhPSBuYW1lQ2FjaGVFbmQ7ICsr
aXQpIHsKLSAgICAgICAgICAgICAgICBEeW5hbWljU3VidHJlZU5vZGVMaXN0KiBsaXN0ID0gaXQt
PnNlY29uZDsKKyAgICAgICAgICAgICAgICBEeW5hbWljU3VidHJlZU5vZGVMaXN0KiBsaXN0ID0g
aXQtPnZhbHVlOwogICAgICAgICAgICAgICAgIG9sZERvY3VtZW50LT51bnJlZ2lzdGVyTm9kZUxp
c3RDYWNoZShsaXN0KTsKICAgICAgICAgICAgICAgICBuZXdEb2N1bWVudC0+cmVnaXN0ZXJOb2Rl
TGlzdENhY2hlKGxpc3QpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBUYWdOb2RlTGlz
dENhY2hlTlM6OmNvbnN0X2l0ZXJhdG9yIHRhZ0VuZCA9IG1fdGFnTm9kZUxpc3RDYWNoZU5TLmVu
ZCgpOwogICAgICAgICAgICAgZm9yIChUYWdOb2RlTGlzdENhY2hlTlM6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbV90YWdOb2RlTGlzdENhY2hlTlMuYmVnaW4oKTsgaXQgIT0gdGFnRW5kOyArK2l0KSB7
Ci0gICAgICAgICAgICAgICAgRHluYW1pY1N1YnRyZWVOb2RlTGlzdCogbGlzdCA9IGl0LT5zZWNv
bmQ7CisgICAgICAgICAgICAgICAgRHluYW1pY1N1YnRyZWVOb2RlTGlzdCogbGlzdCA9IGl0LT52
YWx1ZTsKICAgICAgICAgICAgICAgICBBU1NFUlQoIWxpc3QtPmlzUm9vdGVkQXREb2N1bWVudCgp
KTsKICAgICAgICAgICAgICAgICBvbGREb2N1bWVudC0+dW5yZWdpc3Rlck5vZGVMaXN0Q2FjaGUo
bGlzdCk7CiAgICAgICAgICAgICAgICAgbmV3RG9jdW1lbnQtPnJlZ2lzdGVyTm9kZUxpc3RDYWNo
ZShsaXN0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Qcm9jZXNzaW5nSW5zdHJ1
Y3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHAK
aW5kZXggZTU5NDA5YmNmNDJjNWI4MGUyOTc2YmY3OGJkZTgxODUzOGNiNjc0ZS4uMmY0M2E1M2Zk
ZTZmNjI5OTA4NTRmZDBjNjQ3ZGZmMzBhZDdlOGIxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9t
L1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHAKQEAgLTExNyw3ICsxMTcsNyBAQCB2b2lkIFByb2Nl
c3NpbmdJbnN0cnVjdGlvbjo6Y2hlY2tTdHlsZVNoZWV0KCkKICAgICAgICAgSGFzaE1hcDxTdHJp
bmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGkgPSBhdHRycy5maW5kKCJ0eXBlIik7CiAgICAg
ICAgIFN0cmluZyB0eXBlOwogICAgICAgICBpZiAoaSAhPSBhdHRycy5lbmQoKSkKLSAgICAgICAg
ICAgIHR5cGUgPSBpLT5zZWNvbmQ7CisgICAgICAgICAgICB0eXBlID0gaS0+dmFsdWU7CiAKICAg
ICAgICAgbV9pc0NTUyA9IHR5cGUuaXNFbXB0eSgpIHx8IHR5cGUgPT0gInRleHQvY3NzIjsKICNp
ZiBFTkFCTEUoWFNMVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVj
dXRpb25Db250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250
ZXh0LmNwcAppbmRleCA5MjQ0NWNhODBkYWY2MzMyMzlkMmY3OWNlZTk4ZGQ5ZGQ0NDFiMzIzLi41
MzViNTcwYjVkN2RlOWY0YWY5MzU4M2U3YzcxZDEyYjJkNzUzNWE4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwCkBAIC0xNzMsOSArMTczLDkgQEAg
Ym9vbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpjYW5TdXNwZW5kQWN0aXZlRE9NT2JqZWN0cygp
CiAgICAgbV9pdGVyYXRpbmdBY3RpdmVET01PYmplY3RzID0gdHJ1ZTsKICAgICBIYXNoTWFwPEFj
dGl2ZURPTU9iamVjdCosIHZvaWQqPjo6aXRlcmF0b3IgYWN0aXZlT2JqZWN0c0VuZCA9IG1fYWN0
aXZlRE9NT2JqZWN0cy5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8QWN0aXZlRE9NT2JqZWN0Kiwg
dm9pZCo+OjppdGVyYXRvciBpdGVyID0gbV9hY3RpdmVET01PYmplY3RzLmJlZ2luKCk7IGl0ZXIg
IT0gYWN0aXZlT2JqZWN0c0VuZDsgKytpdGVyKSB7Ci0gICAgICAgIEFTU0VSVChpdGVyLT5maXJz
dC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpID09IHRoaXMpOwotICAgICAgICBBU1NFUlQoaXRl
ci0+Zmlyc3QtPnN1c3BlbmRJZk5lZWRlZENhbGxlZCgpKTsKLSAgICAgICAgaWYgKCFpdGVyLT5m
aXJzdC0+Y2FuU3VzcGVuZCgpKSB7CisgICAgICAgIEFTU0VSVChpdGVyLT5rZXktPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSA9PSB0aGlzKTsKKyAgICAgICAgQVNTRVJUKGl0ZXItPmtleS0+c3Vz
cGVuZElmTmVlZGVkQ2FsbGVkKCkpOworICAgICAgICBpZiAoIWl0ZXItPmtleS0+Y2FuU3VzcGVu
ZCgpKSB7CiAgICAgICAgICAgICBtX2l0ZXJhdGluZ0FjdGl2ZURPTU9iamVjdHMgPSBmYWxzZTsK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpAQCAtMTkwLDkgKzE5MCw5IEBA
IHZvaWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6c3VzcGVuZEFjdGl2ZURPTU9iamVjdHMoQWN0
aXZlRE9NT2JqZWN0OjpSZWFzb25Gb3JTCiAgICAgbV9pdGVyYXRpbmdBY3RpdmVET01PYmplY3Rz
ID0gdHJ1ZTsKICAgICBIYXNoTWFwPEFjdGl2ZURPTU9iamVjdCosIHZvaWQqPjo6aXRlcmF0b3Ig
YWN0aXZlT2JqZWN0c0VuZCA9IG1fYWN0aXZlRE9NT2JqZWN0cy5lbmQoKTsKICAgICBmb3IgKEhh
c2hNYXA8QWN0aXZlRE9NT2JqZWN0Kiwgdm9pZCo+OjppdGVyYXRvciBpdGVyID0gbV9hY3RpdmVE
T01PYmplY3RzLmJlZ2luKCk7IGl0ZXIgIT0gYWN0aXZlT2JqZWN0c0VuZDsgKytpdGVyKSB7Ci0g
ICAgICAgIEFTU0VSVChpdGVyLT5maXJzdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpID09IHRo
aXMpOwotICAgICAgICBBU1NFUlQoaXRlci0+Zmlyc3QtPnN1c3BlbmRJZk5lZWRlZENhbGxlZCgp
KTsKLSAgICAgICAgaXRlci0+Zmlyc3QtPnN1c3BlbmQod2h5KTsKKyAgICAgICAgQVNTRVJUKGl0
ZXItPmtleS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpID09IHRoaXMpOworICAgICAgICBBU1NF
UlQoaXRlci0+a2V5LT5zdXNwZW5kSWZOZWVkZWRDYWxsZWQoKSk7CisgICAgICAgIGl0ZXItPmtl
eS0+c3VzcGVuZCh3aHkpOwogICAgIH0KICAgICBtX2l0ZXJhdGluZ0FjdGl2ZURPTU9iamVjdHMg
PSBmYWxzZTsKICAgICBtX2FjdGl2ZURPTU9iamVjdHNBcmVTdXNwZW5kZWQgPSB0cnVlOwpAQCAt
MjA2LDkgKzIwNiw5IEBAIHZvaWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6cmVzdW1lQWN0aXZl
RE9NT2JqZWN0cygpCiAgICAgbV9pdGVyYXRpbmdBY3RpdmVET01PYmplY3RzID0gdHJ1ZTsKICAg
ICBIYXNoTWFwPEFjdGl2ZURPTU9iamVjdCosIHZvaWQqPjo6aXRlcmF0b3IgYWN0aXZlT2JqZWN0
c0VuZCA9IG1fYWN0aXZlRE9NT2JqZWN0cy5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8QWN0aXZl
RE9NT2JqZWN0Kiwgdm9pZCo+OjppdGVyYXRvciBpdGVyID0gbV9hY3RpdmVET01PYmplY3RzLmJl
Z2luKCk7IGl0ZXIgIT0gYWN0aXZlT2JqZWN0c0VuZDsgKytpdGVyKSB7Ci0gICAgICAgIEFTU0VS
VChpdGVyLT5maXJzdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpID09IHRoaXMpOwotICAgICAg
ICBBU1NFUlQoaXRlci0+Zmlyc3QtPnN1c3BlbmRJZk5lZWRlZENhbGxlZCgpKTsKLSAgICAgICAg
aXRlci0+Zmlyc3QtPnJlc3VtZSgpOworICAgICAgICBBU1NFUlQoaXRlci0+a2V5LT5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCkgPT0gdGhpcyk7CisgICAgICAgIEFTU0VSVChpdGVyLT5rZXktPnN1
c3BlbmRJZk5lZWRlZENhbGxlZCgpKTsKKyAgICAgICAgaXRlci0+a2V5LT5yZXN1bWUoKTsKICAg
ICB9CiAgICAgbV9pdGVyYXRpbmdBY3RpdmVET01PYmplY3RzID0gZmFsc2U7CiB9CkBAIC0yMjAs
OSArMjIwLDkgQEAgdm9pZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpzdG9wQWN0aXZlRE9NT2Jq
ZWN0cygpCiAgICAgbV9pdGVyYXRpbmdBY3RpdmVET01PYmplY3RzID0gdHJ1ZTsKICAgICBIYXNo
TWFwPEFjdGl2ZURPTU9iamVjdCosIHZvaWQqPjo6aXRlcmF0b3IgYWN0aXZlT2JqZWN0c0VuZCA9
IG1fYWN0aXZlRE9NT2JqZWN0cy5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8QWN0aXZlRE9NT2Jq
ZWN0Kiwgdm9pZCo+OjppdGVyYXRvciBpdGVyID0gbV9hY3RpdmVET01PYmplY3RzLmJlZ2luKCk7
IGl0ZXIgIT0gYWN0aXZlT2JqZWN0c0VuZDsgKytpdGVyKSB7Ci0gICAgICAgIEFTU0VSVChpdGVy
LT5maXJzdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpID09IHRoaXMpOwotICAgICAgICBBU1NF
UlQoaXRlci0+Zmlyc3QtPnN1c3BlbmRJZk5lZWRlZENhbGxlZCgpKTsKLSAgICAgICAgaXRlci0+
Zmlyc3QtPnN0b3AoKTsKKyAgICAgICAgQVNTRVJUKGl0ZXItPmtleS0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpID09IHRoaXMpOworICAgICAgICBBU1NFUlQoaXRlci0+a2V5LT5zdXNwZW5kSWZO
ZWVkZWRDYWxsZWQoKSk7CisgICAgICAgIGl0ZXItPmtleS0+c3RvcCgpOwogICAgIH0KICAgICBt
X2l0ZXJhdGluZ0FjdGl2ZURPTU9iamVjdHMgPSBmYWxzZTsKIApAQCAtMzgwLDcgKzM4MCw3IEBA
IHZvaWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6YWRqdXN0TWluaW11bVRpbWVySW50ZXJ2YWwo
ZG91YmxlIG9sZE1pbmltdW1UaW1lckluCiB7CiAgICAgaWYgKG1pbmltdW1UaW1lckludGVydmFs
KCkgIT0gb2xkTWluaW11bVRpbWVySW50ZXJ2YWwpIHsKICAgICAgICAgZm9yIChUaW1lb3V0TWFw
OjppdGVyYXRvciBpdGVyID0gbV90aW1lb3V0cy5iZWdpbigpOyBpdGVyICE9IG1fdGltZW91dHMu
ZW5kKCk7ICsraXRlcikgewotICAgICAgICAgICAgRE9NVGltZXIqIHRpbWVyID0gaXRlci0+c2Vj
b25kOworICAgICAgICAgICAgRE9NVGltZXIqIHRpbWVyID0gaXRlci0+dmFsdWU7CiAgICAgICAg
ICAgICB0aW1lci0+YWRqdXN0TWluaW11bVRpbWVySW50ZXJ2YWwob2xkTWluaW11bVRpbWVySW50
ZXJ2YWwpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L1NlbGVjdG9yUXVlcnkuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1NlbGVjdG9yUXVlcnkuY3Bw
CmluZGV4IDc4NjJhZWZjYzNhYmE4ZTRiOTJjODQzMzJiNzRhOTYwM2NhZTcyMjUuLmVjYjVhMTYw
ZmIyNmZhYzRhN2QyNzE4MWEwYzI0NGViZDA0Y2U0NTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9TZWxlY3RvclF1ZXJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2VsZWN0
b3JRdWVyeS5jcHAKQEAgLTE2OSw3ICsxNjksNyBAQCBTZWxlY3RvclF1ZXJ5KiBTZWxlY3RvclF1
ZXJ5Q2FjaGU6OmFkZChjb25zdCBBdG9taWNTdHJpbmcmIHNlbGVjdG9ycywgRG9jdW1lbnQqCiB7
CiAgICAgSGFzaE1hcDxBdG9taWNTdHJpbmcsIE93blB0cjxTZWxlY3RvclF1ZXJ5PiA+OjppdGVy
YXRvciBpdCA9IG1fZW50cmllcy5maW5kKHNlbGVjdG9ycyk7CiAgICAgaWYgKGl0ICE9IG1fZW50
cmllcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIHJl
dHVybiBpdC0+dmFsdWUuZ2V0KCk7CiAKICAgICBDU1NQYXJzZXIgcGFyc2VyKGRvY3VtZW50KTsK
ICAgICBDU1NTZWxlY3Rvckxpc3Qgc2VsZWN0b3JMaXN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL1NwYWNlU3BsaXRTdHJpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1NwYWNl
U3BsaXRTdHJpbmcuY3BwCmluZGV4IDljY2U3ZDk1YjVlMTA0NDNjMDNlZGE1YjcyZjExMmM1NzA1
MmU1MTIuLjFkYzFmYjBkZGUxZjAyM2YzZjhhNjUzYjIzYWMzZDg3MzhlOGMzNDkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TcGFjZVNwbGl0U3RyaW5nLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vU3BhY2VTcGxpdFN0cmluZy5jcHAKQEAgLTE1MCw3ICsxNTAsNyBAQCBTcGFj
ZVNwbGl0U3RyaW5nRGF0YTo6flNwYWNlU3BsaXRTdHJpbmdEYXRhKCkKIAogUGFzc1JlZlB0cjxT
cGFjZVNwbGl0U3RyaW5nRGF0YT4gU3BhY2VTcGxpdFN0cmluZ0RhdGE6OmNyZWF0ZShjb25zdCBB
dG9taWNTdHJpbmcmIHN0cmluZykKIHsKLSAgICBTcGFjZVNwbGl0U3RyaW5nRGF0YSomIGRhdGEg
PSBzaGFyZWREYXRhTWFwKCkuYWRkKHN0cmluZywgMCkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBT
cGFjZVNwbGl0U3RyaW5nRGF0YSomIGRhdGEgPSBzaGFyZWREYXRhTWFwKCkuYWRkKHN0cmluZywg
MCkuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghZGF0YSkgewogICAgICAgICBkYXRhID0gbmV3
IFNwYWNlU3BsaXRTdHJpbmdEYXRhKHN0cmluZyk7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihk
YXRhKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcAppbmRleCBlNzVjZDUzMWQxNmY4
ZDhlMjAyMzY5Mjc5NmYxZmU0OWFjOGY3NTIyLi4xNTUzZWI0YjYxNzFmYWQ0ZTliNmY0YjIyOGU0
YzUyZmI1MDFmMjg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwCkBAIC0yNzcs
MTQgKzI3NywxNCBAQCB2b2lkIFN0eWxlZEVsZW1lbnQ6OnVwZGF0ZUF0dHJpYnV0ZVN0eWxlKCkK
ICAgICBQcmVzZW50YXRpb25BdHRyaWJ1dGVDYWNoZTo6aXRlcmF0b3IgY2FjaGVJdGVyYXRvcjsK
ICAgICBpZiAoY2FjaGVIYXNoKSB7CiAgICAgICAgIGNhY2hlSXRlcmF0b3IgPSBwcmVzZW50YXRp
b25BdHRyaWJ1dGVDYWNoZSgpLmFkZChjYWNoZUhhc2gsIG51bGxwdHIpLml0ZXJhdG9yOwotICAg
ICAgICBpZiAoY2FjaGVJdGVyYXRvci0+c2Vjb25kICYmIGNhY2hlSXRlcmF0b3ItPnNlY29uZC0+
a2V5ICE9IGNhY2hlS2V5KQorICAgICAgICBpZiAoY2FjaGVJdGVyYXRvci0+dmFsdWUgJiYgY2Fj
aGVJdGVyYXRvci0+dmFsdWUtPmtleSAhPSBjYWNoZUtleSkKICAgICAgICAgICAgIGNhY2hlSGFz
aCA9IDA7CiAgICAgfSBlbHNlCiAgICAgICAgIGNhY2hlSXRlcmF0b3IgPSBwcmVzZW50YXRpb25B
dHRyaWJ1dGVDYWNoZSgpLmVuZCgpOwogCiAgICAgUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IHN0
eWxlOwotICAgIGlmIChjYWNoZUhhc2ggJiYgY2FjaGVJdGVyYXRvci0+c2Vjb25kKSB7Ci0gICAg
ICAgIHN0eWxlID0gY2FjaGVJdGVyYXRvci0+c2Vjb25kLT52YWx1ZTsKKyAgICBpZiAoY2FjaGVI
YXNoICYmIGNhY2hlSXRlcmF0b3ItPnZhbHVlKSB7CisgICAgICAgIHN0eWxlID0gY2FjaGVJdGVy
YXRvci0+dmFsdWUtPnZhbHVlOwogICAgICAgICBwcmVzZW50YXRpb25BdHRyaWJ1dGVDYWNoZUNs
ZWFuZXIoKS5kaWRIaXRQcmVzZW50YXRpb25BdHRyaWJ1dGVDYWNoZSgpOwogICAgIH0gZWxzZSB7
CiAgICAgICAgIHN0eWxlID0gU3R5bGVQcm9wZXJ0eVNldDo6Y3JlYXRlKGlzU1ZHRWxlbWVudCgp
ID8gU1ZHQXR0cmlidXRlTW9kZSA6IENTU1F1aXJrc01vZGUpOwpAQCAtMjk4LDcgKzI5OCw3IEBA
IHZvaWQgU3R5bGVkRWxlbWVudDo6dXBkYXRlQXR0cmlidXRlU3R5bGUoKQogCiAgICAgYXR0cmli
dXRlRGF0YSgpLT5zZXRBdHRyaWJ1dGVTdHlsZShzdHlsZS0+aXNFbXB0eSgpID8gMCA6IHN0eWxl
KTsKIAotICAgIGlmICghY2FjaGVIYXNoIHx8IGNhY2hlSXRlcmF0b3ItPnNlY29uZCkKKyAgICBp
ZiAoIWNhY2hlSGFzaCB8fCBjYWNoZUl0ZXJhdG9yLT52YWx1ZSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgT3duUHRyPFByZXNlbnRhdGlvbkF0dHJpYnV0ZUNhY2hlRW50cnk+IG5ld0VudHJ5ID0g
YWRvcHRQdHIobmV3IFByZXNlbnRhdGlvbkF0dHJpYnV0ZUNhY2hlRW50cnkpOwpAQCAtMzExLDcg
KzMxMSw3IEBAIHZvaWQgU3R5bGVkRWxlbWVudDo6dXBkYXRlQXR0cmlidXRlU3R5bGUoKQogICAg
ICAgICBwcmVzZW50YXRpb25BdHRyaWJ1dGVDYWNoZSgpLmNsZWFyKCk7CiAgICAgICAgIHByZXNl
bnRhdGlvbkF0dHJpYnV0ZUNhY2hlKCkuc2V0KGNhY2hlSGFzaCwgbmV3RW50cnkucmVsZWFzZSgp
KTsKICAgICB9IGVsc2UKLSAgICAgICAgY2FjaGVJdGVyYXRvci0+c2Vjb25kID0gbmV3RW50cnku
cmVsZWFzZSgpOworICAgICAgICBjYWNoZUl0ZXJhdG9yLT52YWx1ZSA9IG5ld0VudHJ5LnJlbGVh
c2UoKTsKIH0KIAogdm9pZCBTdHlsZWRFbGVtZW50OjphZGRQcm9wZXJ0eVRvQXR0cmlidXRlU3R5
bGUoU3R5bGVQcm9wZXJ0eVNldCogc3R5bGUsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgaW50
IGlkZW50aWZpZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9BbHRl
cm5hdGl2ZVRleHRVSUNvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9B
bHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xsZXIubW0KaW5kZXggOTk5MTZjMWUwMGY0NDkyMmFhN2Vi
YzZjZmIwMGZjNDk3NjhkNDQzYi4uNmNhNWQ1ZjAyOWM5OTE2OTMzYjgyODlkMTQ1ZjBkMTIxYzZk
NTY0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvQWx0ZXJuYXRpdmVU
ZXh0VUlDb250cm9sbGVyLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0FsdGVy
bmF0aXZlVGV4dFVJQ29udHJvbGxlci5tbQpAQCAtNTAsNyArNTAsNyBAQCBOU1RleHRBbHRlcm5h
dGl2ZXMqIEFsdGVybmF0aXZlVGV4dFVJQ29udHJvbGxlcjo6QWxlcm5hdGl2ZVRleHRDb250ZXh0
Q29udHJvbGxlcgogICAgIEhhc2hNYXBUeXBlOjpjb25zdF9pdGVyYXRvciBpdHIgPSBtX2FsdGVy
bmF0aXZlc09iamVjdE1hcC5maW5kKGNvbnRleHQpOwogICAgIGlmIChpdHIgPT0gbV9hbHRlcm5h
dGl2ZXNPYmplY3RNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIHJldHVybiBp
dHItPnNlY29uZC5nZXQoKTsKKyAgICByZXR1cm4gaXRyLT52YWx1ZS5nZXQoKTsKIH0KIAogdm9p
ZCBBbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xsZXI6OkFsZXJuYXRpdmVUZXh0Q29udGV4dENvbnRy
b2xsZXI6OnJlbW92ZUFsdGVybmF0aXZlc0ZvckNvbnRleHQodWludDY0X3QgY29udGV4dCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUNvbnRyb2xsZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9Gb3JtQ29udHJvbGxlci5jcHAKaW5kZXggZTM1ZWZmMTllMTliYTljNWU1
ZDE1YzgwMmI2YmI5ZmU0NTQxYTQ2YS4uMGEwOGMxZWNhN2M1Mjg3YzQ4NTdiYjc0NTRlNDMxNTBm
Y2MyYzA1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9Gb3JtQ29udHJvbGxlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9Gb3JtQ29udHJvbGxlci5jcHAKQEAgLTIyOCw4
ICsyMjgsOCBAQCB2b2lkIFNhdmVkRm9ybVN0YXRlOjpzZXJpYWxpemVUbyhWZWN0b3I8U3RyaW5n
PiYgc3RhdGVWZWN0b3IpIGNvbnN0CiB7CiAgICAgc3RhdGVWZWN0b3IuYXBwZW5kKFN0cmluZzo6
bnVtYmVyKG1fY29udHJvbFN0YXRlQ291bnQpKTsKICAgICBmb3IgKEZvcm1FbGVtZW50U3RhdGVN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zdGF0ZUZvck5ld0Zvcm1FbGVtZW50cy5iZWdpbigp
OyBpdCAhPSBtX3N0YXRlRm9yTmV3Rm9ybUVsZW1lbnRzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAg
IGNvbnN0IEZvcm1FbGVtZW50S2V5JiBrZXkgPSBpdC0+Zmlyc3Q7Ci0gICAgICAgIGNvbnN0IERl
cXVlPEZvcm1Db250cm9sU3RhdGU+JiBxdWV1ZSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIGNvbnN0
IEZvcm1FbGVtZW50S2V5JiBrZXkgPSBpdC0+a2V5OworICAgICAgICBjb25zdCBEZXF1ZTxGb3Jt
Q29udHJvbFN0YXRlPiYgcXVldWUgPSBpdC0+dmFsdWU7CiAgICAgICAgIGZvciAoRGVxdWU8Rm9y
bUNvbnRyb2xTdGF0ZT46OmNvbnN0X2l0ZXJhdG9yIHF1ZUl0ZXJhdG9yID0gcXVldWUuYmVnaW4o
KTsgcXVlSXRlcmF0b3IgIT0gcXVldWUuZW5kKCk7ICsrcXVlSXRlcmF0b3IpIHsKICAgICAgICAg
ICAgIHN0YXRlVmVjdG9yLmFwcGVuZChrZXkubmFtZSgpKTsKICAgICAgICAgICAgIHN0YXRlVmVj
dG9yLmFwcGVuZChrZXkudHlwZSgpKTsKQEAgLTI0Myw3ICsyNDMsNyBAQCB2b2lkIFNhdmVkRm9y
bVN0YXRlOjphcHBlbmRDb250cm9sU3RhdGUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBjb25z
dCBBdG9taWNTdAogICAgIEZvcm1FbGVtZW50S2V5IGtleShuYW1lLmltcGwoKSwgdHlwZS5pbXBs
KCkpOwogICAgIEZvcm1FbGVtZW50U3RhdGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zdGF0ZUZvck5l
d0Zvcm1FbGVtZW50cy5maW5kKGtleSk7CiAgICAgaWYgKGl0ICE9IG1fc3RhdGVGb3JOZXdGb3Jt
RWxlbWVudHMuZW5kKCkpCi0gICAgICAgIGl0LT5zZWNvbmQuYXBwZW5kKHN0YXRlKTsKKyAgICAg
ICAgaXQtPnZhbHVlLmFwcGVuZChzdGF0ZSk7CiAgICAgZWxzZSB7CiAgICAgICAgIERlcXVlPEZv
cm1Db250cm9sU3RhdGU+IHN0YXRlTGlzdDsKICAgICAgICAgc3RhdGVMaXN0LmFwcGVuZChzdGF0
ZSk7CkBAIC0yNTksMTAgKzI1OSwxMCBAQCBGb3JtQ29udHJvbFN0YXRlIFNhdmVkRm9ybVN0YXRl
Ojp0YWtlQ29udHJvbFN0YXRlKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgY29ucwogICAgIEZv
cm1FbGVtZW50U3RhdGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zdGF0ZUZvck5ld0Zvcm1FbGVtZW50
cy5maW5kKEZvcm1FbGVtZW50S2V5KG5hbWUuaW1wbCgpLCB0eXBlLmltcGwoKSkpOwogICAgIGlm
IChpdCA9PSBtX3N0YXRlRm9yTmV3Rm9ybUVsZW1lbnRzLmVuZCgpKQogICAgICAgICByZXR1cm4g
Rm9ybUNvbnRyb2xTdGF0ZSgpOwotICAgIEFTU0VSVChpdC0+c2Vjb25kLnNpemUoKSk7Ci0gICAg
Rm9ybUNvbnRyb2xTdGF0ZSBzdGF0ZSA9IGl0LT5zZWNvbmQudGFrZUZpcnN0KCk7CisgICAgQVNT
RVJUKGl0LT52YWx1ZS5zaXplKCkpOworICAgIEZvcm1Db250cm9sU3RhdGUgc3RhdGUgPSBpdC0+
dmFsdWUudGFrZUZpcnN0KCk7CiAgICAgbV9jb250cm9sU3RhdGVDb3VudC0tOwotICAgIGlmICgh
aXQtPnNlY29uZC5zaXplKCkpCisgICAgaWYgKCFpdC0+dmFsdWUuc2l6ZSgpKQogICAgICAgICBt
X3N0YXRlRm9yTmV3Rm9ybUVsZW1lbnRzLnJlbW92ZShpdCk7CiAgICAgcmV0dXJuIHN0YXRlOwog
fQpAQCAtMjcxLDEwICsyNzEsMTAgQEAgVmVjdG9yPFN0cmluZz4gU2F2ZWRGb3JtU3RhdGU6Omdl
dFJlZmVyZW5jZWRGaWxlUGF0aHMoKSBjb25zdAogewogICAgIFZlY3RvcjxTdHJpbmc+IHRvUmV0
dXJuOwogICAgIGZvciAoRm9ybUVsZW1lbnRTdGF0ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
X3N0YXRlRm9yTmV3Rm9ybUVsZW1lbnRzLmJlZ2luKCk7IGl0ICE9IG1fc3RhdGVGb3JOZXdGb3Jt
RWxlbWVudHMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgY29uc3QgRm9ybUVsZW1lbnRLZXkmIGtl
eSA9IGl0LT5maXJzdDsKKyAgICAgICAgY29uc3QgRm9ybUVsZW1lbnRLZXkmIGtleSA9IGl0LT5r
ZXk7CiAgICAgICAgIGlmIChBdG9taWNTdHJpbmcoa2V5LnR5cGUoKSkgIT0gQXRvbWljU3RyaW5n
KCJmaWxlIikpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgY29uc3QgRGVxdWU8Rm9y
bUNvbnRyb2xTdGF0ZT4mIHF1ZXVlID0gaXQtPnNlY29uZDsKKyAgICAgICAgY29uc3QgRGVxdWU8
Rm9ybUNvbnRyb2xTdGF0ZT4mIHF1ZXVlID0gaXQtPnZhbHVlOwogICAgICAgICBmb3IgKERlcXVl
PEZvcm1Db250cm9sU3RhdGU+Ojpjb25zdF9pdGVyYXRvciBxdWVJdGVyYXRvciA9IHF1ZXVlLmJl
Z2luKCk7IHF1ZUl0ZXJhdG9yICE9IHF1ZXVlLmVuZCgpOyArK3F1ZUl0ZXJhdG9yKSB7CiAgICAg
ICAgICAgICBjb25zdCBWZWN0b3I8RmlsZUNob29zZXJGaWxlSW5mbz4mIHNlbGVjdGVkRmlsZXMg
PSBIVE1MSW5wdXRFbGVtZW50OjpmaWxlc0Zyb21GaWxlSW5wdXRGb3JtQ29udHJvbFN0YXRlKCpx
dWVJdGVyYXRvcik7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNlbGVjdGVk
RmlsZXMuc2l6ZSgpOyArK2kpCkBAIC0zNDksMTIgKzM0OSwxMiBAQCBBdG9taWNTdHJpbmcgRm9y
bUtleUdlbmVyYXRvcjo6Zm9ybUtleShjb25zdCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0
YXRlJiBjbwogICAgIH0KICAgICBGb3JtVG9LZXlNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9m
b3JtVG9LZXlNYXAuZmluZChmb3JtKTsKICAgICBpZiAoaXQgIT0gbV9mb3JtVG9LZXlNYXAuZW5k
KCkpCi0gICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gaXQtPnZhbHVl
OwogCiAgICAgU3RyaW5nIHNpZ25hdHVyZSA9IGZvcm1TaWduYXR1cmUoKmZvcm0pOwogICAgIEFT
U0VSVCghc2lnbmF0dXJlLmlzTnVsbCgpKTsKICAgICBGb3JtU2lnbmF0dXJlVG9OZXh0SW5kZXhN
YXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX2Zvcm1TaWduYXR1cmVUb05leHRJbmRleE1hcC5hZGQo
c2lnbmF0dXJlLCAwKTsKLSAgICB1bnNpZ25lZCBuZXh0SW5kZXggPSByZXN1bHQuaXRlcmF0b3It
PnNlY29uZCsrOworICAgIHVuc2lnbmVkIG5leHRJbmRleCA9IHJlc3VsdC5pdGVyYXRvci0+dmFs
dWUrKzsKIAogICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKICAgICBidWlsZGVyLmFwcGVuZChz
aWduYXR1cmUpOwpAQCAtNDA1LDggKzQwNSw4IEBAIFBhc3NPd25QdHI8Rm9ybUNvbnRyb2xsZXI6
OlNhdmVkRm9ybVN0YXRlTWFwPiBGb3JtQ29udHJvbGxlcjo6Y3JlYXRlU2F2ZWRGb3JtU3RhCiAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgU2F2ZWRGb3JtU3RhdGVNYXA6OkFkZFJlc3Vs
dCByZXN1bHQgPSBzdGF0ZU1hcC0+YWRkKGtleUdlbmVyYXRvci0+Zm9ybUtleSgqY29udHJvbCku
aW1wbCgpLCBudWxscHRyKTsKICAgICAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQotICAgICAg
ICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBTYXZlZEZvcm1TdGF0ZTo6Y3JlYXRlKCk7
Ci0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLT5hcHBlbmRDb250cm9sU3RhdGUoY29u
dHJvbC0+bmFtZSgpLCBjb250cm9sLT50eXBlKCksIGNvbnRyb2wtPnNhdmVGb3JtQ29udHJvbFN0
YXRlKCkpOworICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IFNhdmVkRm9ybVN0
YXRlOjpjcmVhdGUoKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+YXBwZW5kQ29u
dHJvbFN0YXRlKGNvbnRyb2wtPm5hbWUoKSwgY29udHJvbC0+dHlwZSgpLCBjb250cm9sLT5zYXZl
Rm9ybUNvbnRyb2xTdGF0ZSgpKTsKICAgICB9CiAgICAgcmV0dXJuIHN0YXRlTWFwLnJlbGVhc2Uo
KTsKIH0KQEAgLTQxOCw4ICs0MTgsOCBAQCBWZWN0b3I8U3RyaW5nPiBGb3JtQ29udHJvbGxlcjo6
Zm9ybUVsZW1lbnRzU3RhdGUoKSBjb25zdAogICAgIHN0YXRlVmVjdG9yLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkobV9mb3JtRWxlbWVudHNXaXRoU3RhdGUuc2l6ZSgpICogNCk7CiAgICAgc3RhdGVW
ZWN0b3IuYXBwZW5kKGZvcm1TdGF0ZVNpZ25hdHVyZSgpKTsKICAgICBmb3IgKFNhdmVkRm9ybVN0
YXRlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHN0YXRlTWFwLT5iZWdpbigpOyBpdCAhPSBzdGF0
ZU1hcC0+ZW5kKCk7ICsraXQpIHsKLSAgICAgICAgc3RhdGVWZWN0b3IuYXBwZW5kKGl0LT5maXJz
dC5nZXQoKSk7Ci0gICAgICAgIGl0LT5zZWNvbmQtPnNlcmlhbGl6ZVRvKHN0YXRlVmVjdG9yKTsK
KyAgICAgICAgc3RhdGVWZWN0b3IuYXBwZW5kKGl0LT5rZXkuZ2V0KCkpOworICAgICAgICBpdC0+
dmFsdWUtPnNlcmlhbGl6ZVRvKHN0YXRlVmVjdG9yKTsKICAgICB9CiAgICAgYm9vbCBoYXNPbmx5
U2lnbmF0dXJlID0gc3RhdGVWZWN0b3Iuc2l6ZSgpID09IDE7CiAgICAgaWYgKGhhc09ubHlTaWdu
YXR1cmUpCkBAIC00NDEsOCArNDQxLDggQEAgRm9ybUNvbnRyb2xTdGF0ZSBGb3JtQ29udHJvbGxl
cjo6dGFrZVN0YXRlRm9yRm9ybUVsZW1lbnQoY29uc3QgSFRNTEZvcm1Db250cm9sRWwKICAgICBT
YXZlZEZvcm1TdGF0ZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3NhdmVkRm9ybVN0YXRlTWFwLmZpbmQo
bV9mb3JtS2V5R2VuZXJhdG9yLT5mb3JtS2V5KGNvbnRyb2wpLmltcGwoKSk7CiAgICAgaWYgKGl0
ID09IG1fc2F2ZWRGb3JtU3RhdGVNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybiBGb3JtQ29udHJv
bFN0YXRlKCk7Ci0gICAgRm9ybUNvbnRyb2xTdGF0ZSBzdGF0ZSA9IGl0LT5zZWNvbmQtPnRha2VD
b250cm9sU3RhdGUoY29udHJvbC5uYW1lKCksIGNvbnRyb2wudHlwZSgpKTsKLSAgICBpZiAoaXQt
PnNlY29uZC0+aXNFbXB0eSgpKQorICAgIEZvcm1Db250cm9sU3RhdGUgc3RhdGUgPSBpdC0+dmFs
dWUtPnRha2VDb250cm9sU3RhdGUoY29udHJvbC5uYW1lKCksIGNvbnRyb2wudHlwZSgpKTsKKyAg
ICBpZiAoaXQtPnZhbHVlLT5pc0VtcHR5KCkpCiAgICAgICAgIG1fc2F2ZWRGb3JtU3RhdGVNYXAu
cmVtb3ZlKGl0KTsKICAgICByZXR1cm4gc3RhdGU7CiB9CkBAIC01MTEsNyArNTExLDcgQEAgVmVj
dG9yPFN0cmluZz4gRm9ybUNvbnRyb2xsZXI6OmdldFJlZmVyZW5jZWRGaWxlUGF0aHMoY29uc3Qg
VmVjdG9yPFN0cmluZz4mIHN0YXQKICAgICBTYXZlZEZvcm1TdGF0ZU1hcCBtYXA7CiAgICAgZm9y
bVN0YXRlc0Zyb21TdGF0ZVZlY3RvcihzdGF0ZVZlY3RvciwgbWFwKTsKICAgICBmb3IgKFNhdmVk
Rm9ybVN0YXRlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC5iZWdpbigpOyBpdCAhPSBtYXAu
ZW5kKCk7ICsraXQpCi0gICAgICAgIHRvUmV0dXJuLmFwcGVuZChpdC0+c2Vjb25kLT5nZXRSZWZl
cmVuY2VkRmlsZVBhdGhzKCkpOworICAgICAgICB0b1JldHVybi5hcHBlbmQoaXQtPnZhbHVlLT5n
ZXRSZWZlcmVuY2VkRmlsZVBhdGhzKCkpOwogICAgIHJldHVybiB0b1JldHVybjsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmNwcAppbmRleCA5MWUxOGEzZmJkZjJkODdhNmUw
Nzk0ZTdjYjJiNzFiNjRmOGFiOWM1Li4xZWNiNjQ0Y2ExYjYzMDgwN2FkNjZhOTc0NGUzZGYzMzE0
ZmVhZjQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmNwcApAQCAtNTU5LDcg
KzU1OSw3IEBAIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IEhUTUxDb2xsZWN0aW9uOjp0YWdzKGNvbnN0
IFN0cmluZyYgbmFtZSkKIAogdm9pZCBIVE1MQ29sbGVjdGlvbkNhY2hlQmFzZTo6YXBwZW5kKE5v
ZGVDYWNoZU1hcCYgbWFwLCBjb25zdCBBdG9taWNTdHJpbmcmIGtleSwgRWxlbWVudCogZWxlbWVu
dCkKIHsKLSAgICBPd25QdHI8VmVjdG9yPEVsZW1lbnQqPiA+JiB2ZWN0b3IgPSBtYXAuYWRkKGtl
eS5pbXBsKCksIG51bGxwdHIpLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgT3duUHRyPFZlY3RvcjxF
bGVtZW50Kj4gPiYgdmVjdG9yID0gbWFwLmFkZChrZXkuaW1wbCgpLCBudWxscHRyKS5pdGVyYXRv
ci0+dmFsdWU7CiAgICAgaWYgKCF2ZWN0b3IpCiAgICAgICAgIHZlY3RvciA9IGFkb3B0UHRyKG5l
dyBWZWN0b3I8RWxlbWVudCo+KTsKICAgICB2ZWN0b3ItPmFwcGVuZChlbGVtZW50KTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHAKaW5kZXggYjkx
YWU1MDZlY2Y3OWUzZDYyZmUxN2U0Mzc3OTkzZmQzYzE0NmMxZC4uZDA4MWUyNDkwNWEwYWQ1OWU3
NGU1ZGMwNWM3NDUxMDg2YTY4NGY0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHAKQEAgLTMyNyw3ICszMjcsNyBAQCBXZWJHTFNoYXJlZE9i
amVjdCogV2ViR0xGcmFtZWJ1ZmZlcjo6Z2V0QXR0YWNobWVudE9iamVjdChHQzNEZW51bSBhdHRh
Y2htZW50KSBjbwogV2ViR0xGcmFtZWJ1ZmZlcjo6V2ViR0xBdHRhY2htZW50KiBXZWJHTEZyYW1l
YnVmZmVyOjpnZXRBdHRhY2htZW50KEdDM0RlbnVtIGF0dGFjaG1lbnQpIGNvbnN0CiB7CiAgICAg
Y29uc3QgQXR0YWNobWVudE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2F0dGFjaG1lbnRzLmZp
bmQoYXR0YWNobWVudCk7Ci0gICAgcmV0dXJuIChpdCAhPSBtX2F0dGFjaG1lbnRzLmVuZCgpKSA/
IGl0LT5zZWNvbmQuZ2V0KCkgOiAwOworICAgIHJldHVybiAoaXQgIT0gbV9hdHRhY2htZW50cy5l
bmQoKSkgPyBpdC0+dmFsdWUuZ2V0KCkgOiAwOwogfQogCiB2b2lkIFdlYkdMRnJhbWVidWZmZXI6
OnJlbW92ZUF0dGFjaG1lbnRGcm9tQm91bmRGcmFtZWJ1ZmZlcihHQzNEZW51bSBhdHRhY2htZW50
KQpAQCAtMzY3LDkgKzM2Nyw5IEBAIHZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6cmVtb3ZlQXR0YWNo
bWVudEZyb21Cb3VuZEZyYW1lYnVmZmVyKFdlYkdMU2hhcmVkT2JqZWN0KiBhCiAgICAgd2hpbGUg
KGNoZWNrTW9yZSkgewogICAgICAgICBjaGVja01vcmUgPSBmYWxzZTsKICAgICAgICAgZm9yIChB
dHRhY2htZW50TWFwOjppdGVyYXRvciBpdCA9IG1fYXR0YWNobWVudHMuYmVnaW4oKTsgaXQgIT0g
bV9hdHRhY2htZW50cy5lbmQoKTsgKytpdCkgewotICAgICAgICAgICAgV2ViR0xBdHRhY2htZW50
KiBhdHRhY2htZW50T2JqZWN0ID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgIFdlYkdM
QXR0YWNobWVudCogYXR0YWNobWVudE9iamVjdCA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAg
ICAgIGlmIChhdHRhY2htZW50T2JqZWN0LT5pc1NoYXJlZE9iamVjdChhdHRhY2htZW50KSkgewot
ICAgICAgICAgICAgICAgIEdDM0RlbnVtIGF0dGFjaG1lbnRUeXBlID0gaXQtPmZpcnN0OworICAg
ICAgICAgICAgICAgIEdDM0RlbnVtIGF0dGFjaG1lbnRUeXBlID0gaXQtPmtleTsKICAgICAgICAg
ICAgICAgICBhdHRhY2htZW50T2JqZWN0LT51bmF0dGFjaChjb250ZXh0KCktPmdyYXBoaWNzQ29u
dGV4dDNEKCksIGF0dGFjaG1lbnRUeXBlKTsKICAgICAgICAgICAgICAgICByZW1vdmVBdHRhY2ht
ZW50RnJvbUJvdW5kRnJhbWVidWZmZXIoYXR0YWNobWVudFR5cGUpOwogICAgICAgICAgICAgICAg
IGNoZWNrTW9yZSA9IHRydWU7CkBAIC00MTksOCArNDE5LDggQEAgR0MzRGVudW0gV2ViR0xGcmFt
ZWJ1ZmZlcjo6Y2hlY2tTdGF0dXMoY29uc3QgY2hhcioqIHJlYXNvbikgY29uc3QKICAgICBib29s
IGhhdmVTdGVuY2lsID0gZmFsc2U7CiAgICAgYm9vbCBoYXZlRGVwdGhTdGVuY2lsID0gZmFsc2U7
CiAgICAgZm9yIChBdHRhY2htZW50TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fYXR0YWNobWVu
dHMuYmVnaW4oKTsgaXQgIT0gbV9hdHRhY2htZW50cy5lbmQoKTsgKytpdCkgewotICAgICAgICBX
ZWJHTEF0dGFjaG1lbnQqIGF0dGFjaG1lbnQgPSBpdC0+c2Vjb25kLmdldCgpOwotICAgICAgICBp
ZiAoIWlzQXR0YWNobWVudENvbXBsZXRlKGF0dGFjaG1lbnQsIGl0LT5maXJzdCwgcmVhc29uKSkK
KyAgICAgICAgV2ViR0xBdHRhY2htZW50KiBhdHRhY2htZW50ID0gaXQtPnZhbHVlLmdldCgpOwor
ICAgICAgICBpZiAoIWlzQXR0YWNobWVudENvbXBsZXRlKGF0dGFjaG1lbnQsIGl0LT5rZXksIHJl
YXNvbikpCiAgICAgICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
X0lOQ09NUExFVEVfQVRUQUNITUVOVDsKICAgICAgICAgaWYgKCFhdHRhY2htZW50LT5pc1ZhbGlk
KCkpIHsKICAgICAgICAgICAgICpyZWFzb24gPSAiYXR0YWNobWVudCBpcyBub3QgdmFsaWQiOwpA
QCAtNDMwLDcgKzQzMCw3IEBAIEdDM0RlbnVtIFdlYkdMRnJhbWVidWZmZXI6OmNoZWNrU3RhdHVz
KGNvbnN0IGNoYXIqKiByZWFzb24pIGNvbnN0CiAgICAgICAgICAgICAqcmVhc29uID0gImF0dGFj
aG1lbnQgaXMgYW4gdW5zdXBwb3J0ZWQgZm9ybWF0IjsKICAgICAgICAgICAgIHJldHVybiBHcmFw
aGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOwogICAgICAg
ICB9Ci0gICAgICAgIHN3aXRjaCAoaXQtPmZpcnN0KSB7CisgICAgICAgIHN3aXRjaCAoaXQtPmtl
eSkgewogICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5UOgog
ICAgICAgICAgICAgaGF2ZURlcHRoID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNDg4
LDcgKzQ4OCw3IEBAIGJvb2wgV2ViR0xGcmFtZWJ1ZmZlcjo6aGFzU3RlbmNpbEJ1ZmZlcigpIGNv
bnN0CiB2b2lkIFdlYkdMRnJhbWVidWZmZXI6OmRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250
ZXh0M0QqIGNvbnRleHQzZCwgUGxhdGZvcm0zRE9iamVjdCBvYmplY3QpCiB7CiAgICAgZm9yIChB
dHRhY2htZW50TWFwOjppdGVyYXRvciBpdCA9IG1fYXR0YWNobWVudHMuYmVnaW4oKTsgaXQgIT0g
bV9hdHRhY2htZW50cy5lbmQoKTsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+b25EZXRhY2hl
ZChjb250ZXh0M2QpOworICAgICAgICBpdC0+dmFsdWUtPm9uRGV0YWNoZWQoY29udGV4dDNkKTsK
IAogICAgIGNvbnRleHQzZC0+ZGVsZXRlRnJhbWVidWZmZXIob2JqZWN0KTsKIH0KQEAgLTQ5OSw4
ICs0OTksOCBAQCBib29sIFdlYkdMRnJhbWVidWZmZXI6OmluaXRpYWxpemVBdHRhY2htZW50cyhH
cmFwaGljc0NvbnRleHQzRCogZzNkLCBjb25zdCBjaGFyKgogICAgIEdDM0RiaXRmaWVsZCBtYXNr
ID0gMDsKIAogICAgIGZvciAoQXR0YWNobWVudE1hcDo6aXRlcmF0b3IgaXQgPSBtX2F0dGFjaG1l
bnRzLmJlZ2luKCk7IGl0ICE9IG1fYXR0YWNobWVudHMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAg
R0MzRGVudW0gYXR0YWNobWVudFR5cGUgPSBpdC0+Zmlyc3Q7Ci0gICAgICAgIFdlYkdMQXR0YWNo
bWVudCogYXR0YWNobWVudCA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIEdDM0RlbnVtIGF0
dGFjaG1lbnRUeXBlID0gaXQtPmtleTsKKyAgICAgICAgV2ViR0xBdHRhY2htZW50KiBhdHRhY2ht
ZW50ID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICBpZiAoIWF0dGFjaG1lbnQtPmlzSW5pdGlh
bGl6ZWQoKSkKICAgICAgICAgICAgbWFzayB8PSBHcmFwaGljc0NvbnRleHQzRDo6Z2V0Q2xlYXJC
aXRzQnlBdHRhY2htZW50VHlwZShhdHRhY2htZW50VHlwZSk7CiAgICAgfQpAQCAtNTcxLDggKzU3
MSw4IEBAIGJvb2wgV2ViR0xGcmFtZWJ1ZmZlcjo6aW5pdGlhbGl6ZUF0dGFjaG1lbnRzKEdyYXBo
aWNzQ29udGV4dDNEKiBnM2QsIGNvbnN0IGNoYXIqCiAgICAgICAgIGczZC0+ZGlzYWJsZShHcmFw
aGljc0NvbnRleHQzRDo6RElUSEVSKTsKIAogICAgIGZvciAoQXR0YWNobWVudE1hcDo6aXRlcmF0
b3IgaXQgPSBtX2F0dGFjaG1lbnRzLmJlZ2luKCk7IGl0ICE9IG1fYXR0YWNobWVudHMuZW5kKCk7
ICsraXQpIHsKLSAgICAgICAgR0MzRGVudW0gYXR0YWNobWVudFR5cGUgPSBpdC0+Zmlyc3Q7Ci0g
ICAgICAgIFdlYkdMQXR0YWNobWVudCogYXR0YWNobWVudCA9IGl0LT5zZWNvbmQuZ2V0KCk7Cisg
ICAgICAgIEdDM0RlbnVtIGF0dGFjaG1lbnRUeXBlID0gaXQtPmtleTsKKyAgICAgICAgV2ViR0xB
dHRhY2htZW50KiBhdHRhY2htZW50ID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICBHQzNEYml0
ZmllbGQgYml0cyA9IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRDbGVhckJpdHNCeUF0dGFjaG1lbnRU
eXBlKGF0dGFjaG1lbnRUeXBlKTsKICAgICAgICAgaWYgKGJpdHMgJiBtYXNrKQogICAgICAgICAg
ICAgYXR0YWNobWVudC0+c2V0SW5pdGlhbGl6ZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5IGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKaW5kZXggODUyMjI1MzhiNGQzZDdl
OTZmZDNjZTllM2JkMGM5MWFmMzE5OGM3OC4uZjQ3MDhmYzM4N2RjZTRlZDI0NmY2ZWFhNDI4MGU5
YTg5ZTI2NWUxMSAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3IucHkKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3IucHkKQEAgLTEzMTcsNyArMTMxNyw3IEBAIGNsYXNzIFR5cGVCaW5kaW5n
czoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3Jp
dGVyLm5ld2xpbmUoIiAgICAgICAgSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciAlcztcbiIgJSBp
dF9uYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRv
cl93cml0ZXIubmV3bGluZSgiICAgICAgICAlcyA9IG9iamVjdC0+ZmluZChcIiVzXCIpO1xuIiAl
IChpdF9uYW1lLCBwcm9wX2RhdGEucFsibmFtZSJdKSkKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgQVNTRVJU
KCVzICE9IG9iamVjdC0+ZW5kKCkpO1xuIiAlIGl0X25hbWUpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgICAgICVz
KCVzLT5zZWNvbmQuZ2V0KCkpO1xuIiAlIChwcm9wX2RhdGEucGFyYW1fdHlwZV9iaW5kaW5nLmdl
dF92YWxpZGF0b3JfY2FsbF90ZXh0KCksIGl0X25hbWUpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgICAgICAlcygl
cy0+dmFsdWUuZ2V0KCkpO1xuIiAlIChwcm9wX2RhdGEucGFyYW1fdHlwZV9iaW5kaW5nLmdldF92
YWxpZGF0b3JfY2FsbF90ZXh0KCksIGl0X25hbWUpKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgIH1cbiIpCiAKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNsb3NlZF9maWVsZF9zZXQ6CkBA
IC0xMzI5LDcgKzEzMjksNyBAQCBjbGFzcyBUeXBlQmluZGluZ3M6CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgICAg
IEluc3BlY3Rvck9iamVjdDo6aXRlcmF0b3IgJXM7XG4iICUgaXRfbmFtZSkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAg
ICAgICAgJXMgPSBvYmplY3QtPmZpbmQoXCIlc1wiKTtcbiIgJSAoaXRfbmFtZSwgcHJvcF9kYXRh
LnBbIm5hbWUiXSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFs
aWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgICAgIGlmICglcyAhPSBvYmplY3QtPmVuZCgpKSB7
XG4iICUgaXRfbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgICAgICVzKCVzLT5zZWNvbmQuZ2V0KCkp
O1xuIiAlIChwcm9wX2RhdGEucGFyYW1fdHlwZV9iaW5kaW5nLmdldF92YWxpZGF0b3JfY2FsbF90
ZXh0KCksIGl0X25hbWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgICAgICAgICAgJXMoJXMtPnZhbHVlLmdldCgp
KTtcbiIgJSAocHJvcF9kYXRhLnBhcmFtX3R5cGVfYmluZGluZy5nZXRfdmFsaWRhdG9yX2NhbGxf
dGV4dCgpLCBpdF9uYW1lKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiBjbG9zZWRfZmllbGRfc2V0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgICAgICsrZm91bmRQ
cm9wZXJ0aWVzQ291bnQ7XG4iKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgICAgICB9XG4iKQpAQCAtMjAwNyw3ICsy
MDA3LDcgQEAgJG1lc3NhZ2VIYW5kbGVycwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
KCgqdGhpcykuKml0LT5zZWNvbmQpKGNhbGxJZCwgbWVzc2FnZU9iamVjdC5nZXQoKSk7CisgICAg
KCgqdGhpcykuKml0LT52YWx1ZSkoY2FsbElkLCBtZXNzYWdlT2JqZWN0LmdldCgpKTsKIH0KIAog
dm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OnNlbmRSZXNwb25zZShsb25nIGNh
bGxJZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCwgY29uc3QgY2hhciogY29t
bWFuZE5hbWUsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzLCBFcnJv
clN0cmluZyBpbnZvY2F0aW9uRXJyb3IpCkBAIC0yMDkxLDcgKzIwOTEsNyBAQCBSIEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVySW1wbDo6Z2V0UHJvcGVydHlWYWx1ZUltcGwoSW5zcGVjdG9yT2Jq
ZWN0KiBvYmplY3QsCiAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICB9CiAKLSAgICBpZiAoIWFz
X21ldGhvZCh2YWx1ZUl0ZXJhdG9yLT5zZWNvbmQuZ2V0KCksICZ2YWx1ZSkpCisgICAgaWYgKCFh
c19tZXRob2QodmFsdWVJdGVyYXRvci0+dmFsdWUuZ2V0KCksICZ2YWx1ZSkpCiAgICAgICAgIHBy
b3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJQYXJhbWV0ZXIgJyVzJyBo
YXMgd3JvbmcgdHlwZS4gSXQgbXVzdCBiZSAnJXMnLiIsIG5hbWUudXRmOCgpLmRhdGEoKSwgdHlw
ZV9uYW1lKSk7CiAgICAgZWxzZQogICAgICAgICBpZiAodmFsdWVGb3VuZCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01QYXRjaFN1cHBvcnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5jcHAKaW5kZXggYzAzZGNlNDcxNGRmMTJj
YTU1ZDU4ZWJhYjJiODk5YTJkYzcxMWNlNS4uOGU2YzE4MDBkMzUyODI2NGU1MzEzNGVkOGRjNjFi
ODNlZjg4Yjk1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNo
U3VwcG9ydC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9y
dC5jcHAKQEAgLTIzNywyNCArMjM3LDI0IEBAIERPTVBhdGNoU3VwcG9ydDo6ZGlmZihjb25zdCBW
ZWN0b3I8T3duUHRyPERpZ2VzdD4gPiYgb2xkTGlzdCwgY29uc3QgVmVjdG9yPE93blB0CiAKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5ld0xpc3Quc2l6ZSgpOyArK2kpIHsKICAgICAgICAg
RGlmZlRhYmxlOjppdGVyYXRvciBpdCA9IG5ld1RhYmxlLmFkZChuZXdMaXN0W2ldLT5tX3NoYTEs
IFZlY3RvcjxzaXplX3Q+KCkpLml0ZXJhdG9yOwotICAgICAgICBpdC0+c2Vjb25kLmFwcGVuZChp
KTsKKyAgICAgICAgaXQtPnZhbHVlLmFwcGVuZChpKTsKICAgICB9CiAKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG9sZExpc3Quc2l6ZSgpOyArK2kpIHsKICAgICAgICAgRGlmZlRhYmxlOjpp
dGVyYXRvciBpdCA9IG9sZFRhYmxlLmFkZChvbGRMaXN0W2ldLT5tX3NoYTEsIFZlY3RvcjxzaXpl
X3Q+KCkpLml0ZXJhdG9yOwotICAgICAgICBpdC0+c2Vjb25kLmFwcGVuZChpKTsKKyAgICAgICAg
aXQtPnZhbHVlLmFwcGVuZChpKTsKICAgICB9CiAKICAgICBmb3IgKERpZmZUYWJsZTo6aXRlcmF0
b3IgbmV3SXQgPSBuZXdUYWJsZS5iZWdpbigpOyBuZXdJdCAhPSBuZXdUYWJsZS5lbmQoKTsgKytu
ZXdJdCkgewotICAgICAgICBpZiAobmV3SXQtPnNlY29uZC5zaXplKCkgIT0gMSkKKyAgICAgICAg
aWYgKG5ld0l0LT52YWx1ZS5zaXplKCkgIT0gMSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0g
ICAgICAgIERpZmZUYWJsZTo6aXRlcmF0b3Igb2xkSXQgPSBvbGRUYWJsZS5maW5kKG5ld0l0LT5m
aXJzdCk7Ci0gICAgICAgIGlmIChvbGRJdCA9PSBvbGRUYWJsZS5lbmQoKSB8fCBvbGRJdC0+c2Vj
b25kLnNpemUoKSAhPSAxKQorICAgICAgICBEaWZmVGFibGU6Oml0ZXJhdG9yIG9sZEl0ID0gb2xk
VGFibGUuZmluZChuZXdJdC0+a2V5KTsKKyAgICAgICAgaWYgKG9sZEl0ID09IG9sZFRhYmxlLmVu
ZCgpIHx8IG9sZEl0LT52YWx1ZS5zaXplKCkgIT0gMSkKICAgICAgICAgICAgIGNvbnRpbnVlOwog
Ci0gICAgICAgIG5ld01hcFtuZXdJdC0+c2Vjb25kWzBdXSA9IG1ha2VfcGFpcihuZXdMaXN0W25l
d0l0LT5zZWNvbmRbMF1dLmdldCgpLCBvbGRJdC0+c2Vjb25kWzBdKTsKLSAgICAgICAgb2xkTWFw
W29sZEl0LT5zZWNvbmRbMF1dID0gbWFrZV9wYWlyKG9sZExpc3Rbb2xkSXQtPnNlY29uZFswXV0u
Z2V0KCksIG5ld0l0LT5zZWNvbmRbMF0pOworICAgICAgICBuZXdNYXBbbmV3SXQtPnZhbHVlWzBd
XSA9IG1ha2VfcGFpcihuZXdMaXN0W25ld0l0LT52YWx1ZVswXV0uZ2V0KCksIG9sZEl0LT52YWx1
ZVswXSk7CisgICAgICAgIG9sZE1hcFtvbGRJdC0+dmFsdWVbMF1dID0gbWFrZV9wYWlyKG9sZExp
c3Rbb2xkSXQtPnZhbHVlWzBdXS5nZXQoKSwgbmV3SXQtPnZhbHVlWzBdKTsKICAgICB9CiAKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgbmV3TGlzdC5zaXplKCkgPiAwICYmIGkgPCBuZXdMaXN0LnNp
emUoKSAtIDE7ICsraSkgewpAQCAtMzY0LDcgKzM2NCw3IEBAIGJvb2wgRE9NUGF0Y2hTdXBwb3J0
Ojppbm5lclBhdGNoQ2hpbGRyZW4oQ29udGFpbmVyTm9kZSogcGFyZW50Tm9kZSwgY29uc3QgVmVj
dG9yCiAKICAgICAvLyAyLiBQYXRjaCBub2RlcyBtYXJrZWQgZm9yIG1lcmdlLgogICAgIGZvciAo
SGFzaE1hcDxEaWdlc3QqLCBEaWdlc3QqPjo6aXRlcmF0b3IgaXQgPSBtZXJnZXMuYmVnaW4oKTsg
aXQgIT0gbWVyZ2VzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmICghaW5uZXJQYXRjaE5vZGUo
aXQtPnNlY29uZCwgaXQtPmZpcnN0LCBlYykpCisgICAgICAgIGlmICghaW5uZXJQYXRjaE5vZGUo
aXQtPnZhbHVlLCBpdC0+a2V5LCBlYykpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogCkBAIC00NjMsNyArNDYzLDcgQEAgYm9vbCBET01QYXRjaFN1cHBvcnQ6OnJlbW92ZUNoaWxk
QW5kTW92ZVRvTmV3KERpZ2VzdCogb2xkRGlnZXN0LCBFeGNlcHRpb25Db2RlJgogICAgIC8vIGhp
Z2ggdGhhdCBpdCB3aWxsIGdldCBtZXJnZWQgYmFjayBpbnRvIHRoZSBvcmlnaW5hbCBET00gZHVy
aW5nIHRoZSBmdXJ0aGVyIHBhdGNoaW5nLgogICAgIFVudXNlZE5vZGVzTWFwOjppdGVyYXRvciBp
dCA9IG1fdW51c2VkTm9kZXNNYXAuZmluZChvbGREaWdlc3QtPm1fc2hhMSk7CiAgICAgaWYgKGl0
ICE9IG1fdW51c2VkTm9kZXNNYXAuZW5kKCkpIHsKLSAgICAgICAgRGlnZXN0KiBuZXdEaWdlc3Qg
PSBpdC0+c2Vjb25kOworICAgICAgICBEaWdlc3QqIG5ld0RpZ2VzdCA9IGl0LT52YWx1ZTsKICAg
ICAgICAgTm9kZSogbmV3Tm9kZSA9IG5ld0RpZ2VzdC0+bV9ub2RlOwogICAgICAgICBpZiAoIW1f
ZG9tRWRpdG9yLT5yZXBsYWNlQ2hpbGQobmV3Tm9kZS0+cGFyZW50Tm9kZSgpLCBvbGROb2RlLCBu
ZXdOb2RlLCBlYykpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwCmluZGV4IDUyZWM3NDkw
YTA3N2I1Y2ZkNGYzYjA4NWQyODc3YmM4NzBjYzA3Y2YuLjFkNWUzMTc1N2NkODZiM2IyMmI4ZmVk
YjMxYWJjZDVlMDJlZmY0NzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwCkBAIC04MiwxMCArODIsMTAgQEAgSW5qZWN0ZWRTY3Jp
cHQgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjppbmplY3RlZFNjcmlwdEZvcklkKGludCBpZCkKIHsK
ICAgICBJZFRvSW5qZWN0ZWRTY3JpcHRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pZFRvSW5qZWN0ZWRT
Y3JpcHQuZmluZChpZCk7CiAgICAgaWYgKGl0ICE9IG1faWRUb0luamVjdGVkU2NyaXB0LmVuZCgp
KQotICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsK
ICAgICBmb3IgKFNjcmlwdFN0YXRlVG9JZDo6aXRlcmF0b3IgaXQgPSBtX3NjcmlwdFN0YXRlVG9J
ZC5iZWdpbigpOyBpdCAhPSBtX3NjcmlwdFN0YXRlVG9JZC5lbmQoKTsgKytpdCkgewotICAgICAg
ICBpZiAoaXQtPnNlY29uZCA9PSBpZCkKLSAgICAgICAgICAgIHJldHVybiBpbmplY3RlZFNjcmlw
dEZvcihpdC0+Zmlyc3QpOworICAgICAgICBpZiAoaXQtPnZhbHVlID09IGlkKQorICAgICAgICAg
ICAgcmV0dXJuIGluamVjdGVkU2NyaXB0Rm9yKGl0LT5rZXkpOwogICAgIH0KICAgICByZXR1cm4g
SW5qZWN0ZWRTY3JpcHQoKTsKIH0KQEAgLTk0LDcgKzk0LDcgQEAgaW50IEluamVjdGVkU2NyaXB0
TWFuYWdlcjo6aW5qZWN0ZWRTY3JpcHRJZEZvcihTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUpCiB7
CiAgICAgU2NyaXB0U3RhdGVUb0lkOjppdGVyYXRvciBpdCA9IG1fc2NyaXB0U3RhdGVUb0lkLmZp
bmQoc2NyaXB0U3RhdGUpOwogICAgIGlmIChpdCAhPSBtX3NjcmlwdFN0YXRlVG9JZC5lbmQoKSkK
LSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBpdC0+dmFsdWU7CiAg
ICAgaW50IGlkID0gbV9uZXh0SW5qZWN0ZWRTY3JpcHRJZCsrOwogICAgIG1fc2NyaXB0U3RhdGVU
b0lkLnNldChzY3JpcHRTdGF0ZSwgaWQpOwogICAgIHJldHVybiBpZDsKQEAgLTEyNiwxMSArMTI2
LDExIEBAIHZvaWQgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjpkaXNjYXJkSW5qZWN0ZWRTY3JpcHRz
Rm9yKERPTVdpbmRvdyogd2luZG93KQogICAgIFZlY3Rvcjxsb25nPiBpZHNUb1JlbW92ZTsKICAg
ICBJZFRvSW5qZWN0ZWRTY3JpcHRNYXA6Oml0ZXJhdG9yIGVuZCA9IG1faWRUb0luamVjdGVkU2Ny
aXB0LmVuZCgpOwogICAgIGZvciAoSWRUb0luamVjdGVkU2NyaXB0TWFwOjppdGVyYXRvciBpdCA9
IG1faWRUb0luamVjdGVkU2NyaXB0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAg
ICBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUgPSBpdC0+c2Vjb25kLnNjcmlwdFN0YXRlKCk7Cisg
ICAgICAgIFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSA9IGl0LT52YWx1ZS5zY3JpcHRTdGF0ZSgp
OwogICAgICAgICBpZiAod2luZG93ICE9IGRvbVdpbmRvd0Zyb21TY3JpcHRTdGF0ZShzY3JpcHRT
dGF0ZSkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgbV9zY3JpcHRTdGF0ZVRvSWQu
cmVtb3ZlKHNjcmlwdFN0YXRlKTsKLSAgICAgICAgaWRzVG9SZW1vdmUuYXBwZW5kKGl0LT5maXJz
dCk7CisgICAgICAgIGlkc1RvUmVtb3ZlLmFwcGVuZChpdC0+a2V5KTsKICAgICB9CiAKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGlkc1RvUmVtb3ZlLnNpemUoKTsgaSsrKQpAQCAtMTM5LDcg
KzEzOSw3IEBAIHZvaWQgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjpkaXNjYXJkSW5qZWN0ZWRTY3Jp
cHRzRm9yKERPTVdpbmRvdyogd2luZG93KQogICAgIC8vIE5vdyByZW1vdmUgc2NyaXB0IHN0YXRl
cyB0aGF0IGhhdmUgaWQgYnV0IG5vIGluamVjdGVkIHNjcmlwdC4KICAgICBWZWN0b3I8U2NyaXB0
U3RhdGUqPiBzY3JpcHRTdGF0ZXNUb1JlbW92ZTsKICAgICBmb3IgKFNjcmlwdFN0YXRlVG9JZDo6
aXRlcmF0b3IgaXQgPSBtX3NjcmlwdFN0YXRlVG9JZC5iZWdpbigpOyBpdCAhPSBtX3NjcmlwdFN0
YXRlVG9JZC5lbmQoKTsgKytpdCkgewotICAgICAgICBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUg
PSBpdC0+Zmlyc3Q7CisgICAgICAgIFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSA9IGl0LT5rZXk7
CiAgICAgICAgIGlmICh3aW5kb3cgPT0gZG9tV2luZG93RnJvbVNjcmlwdFN0YXRlKHNjcmlwdFN0
YXRlKSkKICAgICAgICAgICAgIHNjcmlwdFN0YXRlc1RvUmVtb3ZlLmFwcGVuZChzY3JpcHRTdGF0
ZSk7CiAgICAgfQpAQCAtMTU1LDcgKzE1NSw3IEBAIGJvb2wgSW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
OjpjYW5BY2Nlc3NJbnNwZWN0ZWRXb3JrZXJDb250ZXh0KFNjcmlwdFN0YXRlKikKIHZvaWQgSW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyOjpyZWxlYXNlT2JqZWN0R3JvdXAoY29uc3QgU3RyaW5nJiBvYmpl
Y3RHcm91cCkKIHsKICAgICBmb3IgKElkVG9JbmplY3RlZFNjcmlwdE1hcDo6aXRlcmF0b3IgaXQg
PSBtX2lkVG9JbmplY3RlZFNjcmlwdC5iZWdpbigpOyBpdCAhPSBtX2lkVG9JbmplY3RlZFNjcmlw
dC5lbmQoKTsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC5yZWxlYXNlT2JqZWN0R3JvdXAob2Jq
ZWN0R3JvdXApOworICAgICAgICBpdC0+dmFsdWUucmVsZWFzZU9iamVjdEdyb3VwKG9iamVjdEdy
b3VwKTsKIH0KIAogU3RyaW5nIEluamVjdGVkU2NyaXB0TWFuYWdlcjo6aW5qZWN0ZWRTY3JpcHRT
b3VyY2UoKQpAQCAtMTczLDkgKzE3Myw5IEBAIEluamVjdGVkU2NyaXB0IEluamVjdGVkU2NyaXB0
TWFuYWdlcjo6aW5qZWN0ZWRTY3JpcHRGb3IoU2NyaXB0U3RhdGUqIGluc3BlY3RlZFNjCiB7CiAg
ICAgU2NyaXB0U3RhdGVUb0lkOjppdGVyYXRvciBpdCA9IG1fc2NyaXB0U3RhdGVUb0lkLmZpbmQo
aW5zcGVjdGVkU2NyaXB0U3RhdGUpOwogICAgIGlmIChpdCAhPSBtX3NjcmlwdFN0YXRlVG9JZC5l
bmQoKSkgewotICAgICAgICBJZFRvSW5qZWN0ZWRTY3JpcHRNYXA6Oml0ZXJhdG9yIGl0MSA9IG1f
aWRUb0luamVjdGVkU2NyaXB0LmZpbmQoaXQtPnNlY29uZCk7CisgICAgICAgIElkVG9JbmplY3Rl
ZFNjcmlwdE1hcDo6aXRlcmF0b3IgaXQxID0gbV9pZFRvSW5qZWN0ZWRTY3JpcHQuZmluZChpdC0+
dmFsdWUpOwogICAgICAgICBpZiAoaXQxICE9IG1faWRUb0luamVjdGVkU2NyaXB0LmVuZCgpKQot
ICAgICAgICAgICAgcmV0dXJuIGl0MS0+c2Vjb25kOworICAgICAgICAgICAgcmV0dXJuIGl0MS0+
dmFsdWU7CiAgICAgfQogCiAgICAgaWYgKCFtX2luc3BlY3RlZFN0YXRlQWNjZXNzQ2hlY2soaW5z
cGVjdGVkU2NyaXB0U3RhdGUpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckNTU0FnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JDU1NBZ2VudC5jcHAKaW5kZXggNTNhMzUzZjkwZDgyZDFhNWY2NTcwMDE2MGU0MGJmNmM1YWVm
ZWRmMC4uZjg1YmM0YTQyNDk1MjM2MWI0MWE5ZjBmMGUxNDJlZmVhZWYwZDNlMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCkBAIC0xODcsMTAg
KzE4NywxMCBAQCBpbmxpbmUgdm9pZCBTZWxlY3RvclByb2ZpbGU6OmNvbW1pdFNlbGVjdG9yKGJv
b2wgbWF0Y2hlZCkKIAogICAgIFJ1bGVNYXRjaGluZ1N0YXRzTWFwOjpBZGRSZXN1bHQgcmVzdWx0
ID0gbV9ydWxlTWF0Y2hpbmdTdGF0cy5hZGQobWFrZUtleSgpLCBSdWxlTWF0Y2hpbmdTdGF0cyht
X2N1cnJlbnRNYXRjaERhdGEsIG1hdGNoVGltZU1zLCAxLCBtYXRjaGVkID8gMSA6IDApKTsKICAg
ICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vj
b25kLnRvdGFsVGltZSArPSBtYXRjaFRpbWVNczsKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5z
ZWNvbmQuaGl0cyArPSAxOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLnRvdGFsVGlt
ZSArPSBtYXRjaFRpbWVNczsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5oaXRzICs9
IDE7CiAgICAgICAgIGlmIChtYXRjaGVkKQotICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5z
ZWNvbmQubWF0Y2hlcyArPSAxOworICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5t
YXRjaGVzICs9IDE7CiAgICAgfQogfQogCkBAIC0yMDMsNyArMjAzLDcgQEAgaW5saW5lIHZvaWQg
U2VsZWN0b3JQcm9maWxlOjpjb21taXRTZWxlY3RvclRpbWUoKQogICAgIGlmIChpdCA9PSBtX3J1
bGVNYXRjaGluZ1N0YXRzLmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpdC0+c2Vjb25k
LnRvdGFsVGltZSArPSBwcm9jZXNzaW5nVGltZU1zOworICAgIGl0LT52YWx1ZS50b3RhbFRpbWUg
Kz0gcHJvY2Vzc2luZ1RpbWVNczsKIH0KIAogUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpT
ZWxlY3RvclByb2ZpbGU+IFNlbGVjdG9yUHJvZmlsZTo6dG9JbnNwZWN0b3JPYmplY3QoKSBjb25z
dApAQCAtMjExLDEyICsyMTEsMTIgQEAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpTZWxl
Y3RvclByb2ZpbGU+IFNlbGVjdG9yUHJvZmlsZTo6dG9JbnNwZWN0b3JPYmplY3QKICAgICBSZWZQ
dHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpDU1M6OlNlbGVjdG9yUHJvZmlsZUVu
dHJ5PiA+IHNlbGVjdG9yUHJvZmlsZURhdGEgPSBUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxk
ZXI6OkNTUzo6U2VsZWN0b3JQcm9maWxlRW50cnk+OjpjcmVhdGUoKTsKICAgICBmb3IgKFJ1bGVN
YXRjaGluZ1N0YXRzTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fcnVsZU1hdGNoaW5nU3RhdHMu
YmVnaW4oKTsgaXQgIT0gbV9ydWxlTWF0Y2hpbmdTdGF0cy5lbmQoKTsgKytpdCkgewogICAgICAg
ICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6U2VsZWN0b3JQcm9maWxlRW50cnk+IGVudHJ5ID0g
VHlwZUJ1aWxkZXI6OkNTUzo6U2VsZWN0b3JQcm9maWxlRW50cnk6OmNyZWF0ZSgpCi0gICAgICAg
ICAgICAuc2V0U2VsZWN0b3IoaXQtPnNlY29uZC5zZWxlY3RvcikKLSAgICAgICAgICAgIC5zZXRV
cmwoaXQtPnNlY29uZC51cmwpCi0gICAgICAgICAgICAuc2V0TGluZU51bWJlcihpdC0+c2Vjb25k
LmxpbmVOdW1iZXIpCi0gICAgICAgICAgICAuc2V0VGltZShpdC0+c2Vjb25kLnRvdGFsVGltZSkK
LSAgICAgICAgICAgIC5zZXRIaXRDb3VudChpdC0+c2Vjb25kLmhpdHMpCi0gICAgICAgICAgICAu
c2V0TWF0Y2hDb3VudChpdC0+c2Vjb25kLm1hdGNoZXMpOworICAgICAgICAgICAgLnNldFNlbGVj
dG9yKGl0LT52YWx1ZS5zZWxlY3RvcikKKyAgICAgICAgICAgIC5zZXRVcmwoaXQtPnZhbHVlLnVy
bCkKKyAgICAgICAgICAgIC5zZXRMaW5lTnVtYmVyKGl0LT52YWx1ZS5saW5lTnVtYmVyKQorICAg
ICAgICAgICAgLnNldFRpbWUoaXQtPnZhbHVlLnRvdGFsVGltZSkKKyAgICAgICAgICAgIC5zZXRI
aXRDb3VudChpdC0+dmFsdWUuaGl0cykKKyAgICAgICAgICAgIC5zZXRNYXRjaENvdW50KGl0LT52
YWx1ZS5tYXRjaGVzKTsKICAgICAgICAgc2VsZWN0b3JQcm9maWxlRGF0YS0+YWRkSXRlbShlbnRy
eS5yZWxlYXNlKCkpOwogICAgIH0KIApAQCAtNTY4LDcgKzU2OCw3IEBAIGJvb2wgSW5zcGVjdG9y
Q1NTQWdlbnQ6OmZvcmNlUHNldWRvU3RhdGUoRWxlbWVudCogZWxlbWVudCwgQ1NTU2VsZWN0b3I6
OlBzZXVkb1R5CiAgICAgaWYgKGl0ID09IG1fbm9kZUlkVG9Gb3JjZWRQc2V1ZG9TdGF0ZS5lbmQo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgdW5zaWduZWQgZm9yY2VkUHNldWRvU3Rh
dGUgPSBpdC0+c2Vjb25kOworICAgIHVuc2lnbmVkIGZvcmNlZFBzZXVkb1N0YXRlID0gaXQtPnZh
bHVlOwogICAgIHN3aXRjaCAocHNldWRvVHlwZSkgewogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBz
ZXVkb0FjdGl2ZToKICAgICAgICAgcmV0dXJuIGZvcmNlZFBzZXVkb1N0YXRlICYgUHNldWRvQWN0
aXZlOwpAQCAtODA5LDcgKzgwOSw3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmZvcmNlUHNl
dWRvU3RhdGUoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBjCiAKICAgICB1
bnNpZ25lZCBmb3JjZWRQc2V1ZG9TdGF0ZSA9IGNvbXB1dGVQc2V1ZG9DbGFzc01hc2soZm9yY2Vk
UHNldWRvQ2xhc3Nlcy5nZXQoKSk7CiAgICAgTm9kZUlkVG9Gb3JjZWRQc2V1ZG9TdGF0ZTo6aXRl
cmF0b3IgaXQgPSBtX25vZGVJZFRvRm9yY2VkUHNldWRvU3RhdGUuZmluZChub2RlSWQpOwotICAg
IHVuc2lnbmVkIGN1cnJlbnRGb3JjZWRQc2V1ZG9TdGF0ZSA9IGl0ID09IG1fbm9kZUlkVG9Gb3Jj
ZWRQc2V1ZG9TdGF0ZS5lbmQoKSA/IDAgOiBpdC0+c2Vjb25kOworICAgIHVuc2lnbmVkIGN1cnJl
bnRGb3JjZWRQc2V1ZG9TdGF0ZSA9IGl0ID09IG1fbm9kZUlkVG9Gb3JjZWRQc2V1ZG9TdGF0ZS5l
bmQoKSA/IDAgOiBpdC0+dmFsdWU7CiAgICAgYm9vbCBuZWVkU3R5bGVSZWNhbGMgPSBmb3JjZWRQ
c2V1ZG9TdGF0ZSAhPSBjdXJyZW50Rm9yY2VkUHNldWRvU3RhdGU7CiAgICAgaWYgKCFuZWVkU3R5
bGVSZWNhbGMpCiAgICAgICAgIHJldHVybjsKQEAgLTkxNiw3ICs5MTYsNyBAQCBJbnNwZWN0b3JT
dHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUqIEluc3BlY3RvckNTU0FnZW50Ojphc0luc3BlY3RvclN0
eWxlU2hlZXQoRWxlbQogICAgICAgICByZXR1cm4gaW5zcGVjdG9yU3R5bGVTaGVldC5nZXQoKTsK
ICAgICB9CiAKLSAgICByZXR1cm4gaXQtPnNlY29uZC5nZXQoKTsKKyAgICByZXR1cm4gaXQtPnZh
bHVlLmdldCgpOwogfQogCiBFbGVtZW50KiBJbnNwZWN0b3JDU1NBZ2VudDo6ZWxlbWVudEZvcklk
KEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgaW50IG5vZGVJZCkKQEAgLTEwMTAsNyArMTAxMCw3
IEBAIEluc3BlY3RvclN0eWxlU2hlZXQqIEluc3BlY3RvckNTU0FnZW50Ojphc3NlcnRTdHlsZVNo
ZWV0Rm9ySWQoRXJyb3JTdHJpbmcqIGVycm9yCiAgICAgICAgICplcnJvclN0cmluZyA9ICJObyBz
dHlsZSBzaGVldCB3aXRoIGdpdmVuIGlkIGZvdW5kIjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAg
fQotICAgIHJldHVybiBpdC0+c2Vjb25kLmdldCgpOworICAgIHJldHVybiBpdC0+dmFsdWUuZ2V0
KCk7CiB9CiAKIFR5cGVCdWlsZGVyOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46OkVudW0gSW5zcGVj
dG9yQ1NTQWdlbnQ6OmRldGVjdE9yaWdpbihDU1NTdHlsZVNoZWV0KiBwYWdlU3R5bGVTaGVldCwg
RG9jdW1lbnQqIG93bmVyRG9jdW1lbnQpCkBAIC0xMTQxLDcgKzExNDEsNyBAQCB2b2lkIEluc3Bl
Y3RvckNTU0FnZW50OjpkaWRSZW1vdmVET01Ob2RlKE5vZGUqIG5vZGUpCiAgICAgaWYgKGl0ID09
IG1fbm9kZVRvSW5zcGVjdG9yU3R5bGVTaGVldC5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgbV9pZFRvSW5zcGVjdG9yU3R5bGVTaGVldC5yZW1vdmUoaXQtPnNlY29uZC0+aWQoKSk7Cisg
ICAgbV9pZFRvSW5zcGVjdG9yU3R5bGVTaGVldC5yZW1vdmUoaXQtPnZhbHVlLT5pZCgpKTsKICAg
ICBtX25vZGVUb0luc3BlY3RvclN0eWxlU2hlZXQucmVtb3ZlKG5vZGUpOwogfQogCkBAIC0xMTU0
LDcgKzExNTQsNyBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpkaWRNb2RpZnlET01BdHRyKEVs
ZW1lbnQqIGVsZW1lbnQpCiAgICAgaWYgKGl0ID09IG1fbm9kZVRvSW5zcGVjdG9yU3R5bGVTaGVl
dC5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaXQtPnNlY29uZC0+ZGlkTW9kaWZ5RWxl
bWVudEF0dHJpYnV0ZSgpOworICAgIGl0LT52YWx1ZS0+ZGlkTW9kaWZ5RWxlbWVudEF0dHJpYnV0
ZSgpOwogfQogCiB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpzdHlsZVNoZWV0Q2hhbmdlZChJbnNw
ZWN0b3JTdHlsZVNoZWV0KiBzdHlsZVNoZWV0KQpAQCAtMTE2Nyw3ICsxMTY3LDcgQEAgdm9pZCBJ
bnNwZWN0b3JDU1NBZ2VudDo6cmVzZXRQc2V1ZG9TdGF0ZXMoKQogewogICAgIEhhc2hTZXQ8RG9j
dW1lbnQqPiBkb2N1bWVudHNUb0NoYW5nZTsKICAgICBmb3IgKE5vZGVJZFRvRm9yY2VkUHNldWRv
U3RhdGU6Oml0ZXJhdG9yIGl0ID0gbV9ub2RlSWRUb0ZvcmNlZFBzZXVkb1N0YXRlLmJlZ2luKCks
IGVuZCA9IG1fbm9kZUlkVG9Gb3JjZWRQc2V1ZG9TdGF0ZS5lbmQoKTsgaXQgIT0gZW5kOyArK2l0
KSB7Ci0gICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSB0b0VsZW1lbnQobV9kb21BZ2VudC0+bm9k
ZUZvcklkKGl0LT5maXJzdCkpOworICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gdG9FbGVtZW50
KG1fZG9tQWdlbnQtPm5vZGVGb3JJZChpdC0+a2V5KSk7CiAgICAgICAgIGlmIChlbGVtZW50ICYm
IGVsZW1lbnQtPm93bmVyRG9jdW1lbnQoKSkKICAgICAgICAgICAgIGRvY3VtZW50c1RvQ2hhbmdl
LmFkZChlbGVtZW50LT5vd25lckRvY3VtZW50KCkpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb25zb2xlQWdlbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnNvbGVBZ2VudC5jcHAKaW5kZXggYzEyYTU2YjBk
MGYyMWQwYzQ4YTc4YWVkNTgwZGQxZGJlOTdkYWYxNC4uYzY0ZDg3MWI0MjIyMzA0OTZhNDQ0OWU3
NzlkNWFkMDUyOTJkOTNlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnNvbGVBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnNvbGVBZ2VudC5jcHAKQEAgLTE3Nyw3ICsxNzcsNyBAQCB2b2lkIEluc3BlY3Rv
ckNvbnNvbGVBZ2VudDo6c3RvcFRpbWluZyhjb25zdCBTdHJpbmcmIHRpdGxlLCBQYXNzUmVmUHRy
PFNjcmlwdENhbAogICAgIGlmIChpdCA9PSBtX3RpbWVzLmVuZCgpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBkb3VibGUgc3RhcnRUaW1lID0gaXQtPnNlY29uZDsKKyAgICBkb3VibGUgc3RhcnRU
aW1lID0gaXQtPnZhbHVlOwogICAgIG1fdGltZXMucmVtb3ZlKGl0KTsKIAogICAgIGRvdWJsZSBl
bGFwc2VkID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkgLSBzdGFydFRpbWU7CkBAIC0y
MDAsNyArMjAwLDcgQEAgdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmNvdW50KFBhc3NSZWZQ
dHI8U2NyaXB0QXJndW1lbnRzPiBhcmd1bWVudHMsIFBhc3NSZWYKICAgICBpZiAoaXQgPT0gbV9j
b3VudHMuZW5kKCkpCiAgICAgICAgIGNvdW50ID0gMTsKICAgICBlbHNlIHsKLSAgICAgICAgY291
bnQgPSBpdC0+c2Vjb25kICsgMTsKKyAgICAgICAgY291bnQgPSBpdC0+dmFsdWUgKyAxOwogICAg
ICAgICBtX2NvdW50cy5yZW1vdmUoaXQpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKaW5kZXggZWQ0N2I1ZDBhMTczOTAyNTU5NjM0
M2EwMjczZGJkYTFmMGUyNDM2Ny4uMjIwODgzYWUxNmYzYjNjNzk1ODc1YWM2YzEyYTFiMmJlYzMz
MzgwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFn
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQu
Y3BwCkBAIC00NjksNyArNDY5LDcgQEAgTm9kZSogSW5zcGVjdG9yRE9NQWdlbnQ6Om5vZGVGb3JJ
ZChpbnQgaWQpCiAKICAgICBIYXNoTWFwPGludCwgTm9kZSo+OjppdGVyYXRvciBpdCA9IG1faWRU
b05vZGUuZmluZChpZCk7CiAgICAgaWYgKGl0ICE9IG1faWRUb05vZGUuZW5kKCkpCi0gICAgICAg
IHJldHVybiBpdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwogICAgIHJldHVy
biAwOwogfQogCkBAIC05MTUsOSArOTE1LDkgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cGVy
Zm9ybVNlYXJjaChFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgd2hpdGVzcGFjZVRyaW0KICAg
ICBTZWFyY2hSZXN1bHRzOjppdGVyYXRvciByZXN1bHRzSXQgPSBtX3NlYXJjaFJlc3VsdHMuYWRk
KCpzZWFyY2hJZCwgVmVjdG9yPFJlZlB0cjxOb2RlPiA+KCkpLml0ZXJhdG9yOwogCiAgICAgZm9y
IChMaXN0SGFzaFNldDxOb2RlKj46Oml0ZXJhdG9yIGl0ID0gcmVzdWx0Q29sbGVjdG9yLmJlZ2lu
KCk7IGl0ICE9IHJlc3VsdENvbGxlY3Rvci5lbmQoKTsgKytpdCkKLSAgICAgICAgcmVzdWx0c0l0
LT5zZWNvbmQuYXBwZW5kKCppdCk7CisgICAgICAgIHJlc3VsdHNJdC0+dmFsdWUuYXBwZW5kKCpp
dCk7CiAKLSAgICAqcmVzdWx0Q291bnQgPSByZXN1bHRzSXQtPnNlY29uZC5zaXplKCk7CisgICAg
KnJlc3VsdENvdW50ID0gcmVzdWx0c0l0LT52YWx1ZS5zaXplKCk7CiB9CiAKIHZvaWQgSW5zcGVj
dG9yRE9NQWdlbnQ6OmdldFNlYXJjaFJlc3VsdHMoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBj
b25zdCBTdHJpbmcmIHNlYXJjaElkLCBpbnQgZnJvbUluZGV4LCBpbnQgdG9JbmRleCwgUmVmUHRy
PFR5cGVCdWlsZGVyOjpBcnJheTxpbnQ+ID4mIG5vZGVJZHMpCkBAIC05MjgsNyArOTI4LDcgQEAg
dm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0U2VhcmNoUmVzdWx0cyhFcnJvclN0cmluZyogZXJy
b3JTdHJpbmcsIGNvbnN0IFN0cmluZyYKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlu
dCBzaXplID0gaXQtPnNlY29uZC5zaXplKCk7CisgICAgaW50IHNpemUgPSBpdC0+dmFsdWUuc2l6
ZSgpOwogICAgIGlmIChmcm9tSW5kZXggPCAwIHx8IHRvSW5kZXggPiBzaXplIHx8IGZyb21JbmRl
eCA+PSB0b0luZGV4KSB7CiAgICAgICAgICplcnJvclN0cmluZyA9ICJJbnZhbGlkIHNlYXJjaCBy
ZXN1bHQgcmFuZ2UiOwogICAgICAgICByZXR1cm47CkBAIC05MzYsNyArOTM2LDcgQEAgdm9pZCBJ
bnNwZWN0b3JET01BZ2VudDo6Z2V0U2VhcmNoUmVzdWx0cyhFcnJvclN0cmluZyogZXJyb3JTdHJp
bmcsIGNvbnN0IFN0cmluZyYKIAogICAgIG5vZGVJZHMgPSBUeXBlQnVpbGRlcjo6QXJyYXk8aW50
Pjo6Y3JlYXRlKCk7CiAgICAgZm9yIChpbnQgaSA9IGZyb21JbmRleDsgaSA8IHRvSW5kZXg7ICsr
aSkKLSAgICAgICAgbm9kZUlkcy0+YWRkSXRlbShwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKChpdC0+
c2Vjb25kKVtpXS5nZXQoKSkpOworICAgICAgICBub2RlSWRzLT5hZGRJdGVtKHB1c2hOb2RlUGF0
aFRvRnJvbnRlbmQoKGl0LT52YWx1ZSlbaV0uZ2V0KCkpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JE
T01BZ2VudDo6ZGlzY2FyZFNlYXJjaFJlc3VsdHMoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcm
IHNlYXJjaElkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckRPTURlYnVnZ2VyQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckRPTURlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IDgwMzIyOTVkODk1ZTlkMjJhMmY4MGM1OThkOWU0
NGQyNzQ3NGEwNTYuLmM0ZmNiODJiN2I2ZmEwZTJiOWE1M2JkNGZhYWM2MjM2MjlkMGJlNWUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01EZWJ1Z2dlckFn
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NRGVidWdn
ZXJBZ2VudC5jcHAKQEAgLTQwMiw4ICs0MDIsOCBAQCB2b2lkIEluc3BlY3RvckRPTURlYnVnZ2Vy
QWdlbnQ6OndpbGxTZW5kWE1MSHR0cFJlcXVlc3QoY29uc3QgU3RyaW5nJiB1cmwpCiAgICAgZWxz
ZSB7CiAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHhockJyZWFrcG9pbnRzID0gbV9z
dGF0ZS0+Z2V0T2JqZWN0KERPTURlYnVnZ2VyQWdlbnRTdGF0ZTo6eGhyQnJlYWtwb2ludHMpOwog
ICAgICAgICBmb3IgKEluc3BlY3Rvck9iamVjdDo6aXRlcmF0b3IgaXQgPSB4aHJCcmVha3BvaW50
cy0+YmVnaW4oKTsgaXQgIT0geGhyQnJlYWtwb2ludHMtPmVuZCgpOyArK2l0KSB7Ci0gICAgICAg
ICAgICBpZiAodXJsLmNvbnRhaW5zKGl0LT5maXJzdCkpIHsKLSAgICAgICAgICAgICAgICBicmVh
a3BvaW50VVJMID0gaXQtPmZpcnN0OworICAgICAgICAgICAgaWYgKHVybC5jb250YWlucyhpdC0+
a2V5KSkgeworICAgICAgICAgICAgICAgIGJyZWFrcG9pbnRVUkwgPSBpdC0+a2V5OwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuY3BwCmluZGV4
IDkwYTBhOWU2MDkwZTBjMmMzOWQ3ODY5ZjQwMmQ0MzJiM2EyYmY2ZjAuLmMzMmVhMjk4NzZkZDll
ZTE3YmMyZTYxZTBkN2U2ODcwNmExMjUzNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuY3BwCkBAIC03Nyw3ICs3Nyw3IEBA
IHZvaWQgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpjbGVhckZyb250ZW5kKCkKIHsKICAgICBE
T01TdG9yYWdlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBkb21TdG9yYWdlRW5kID0gbV9yZXNvdXJj
ZXMuZW5kKCk7CiAgICAgZm9yIChET01TdG9yYWdlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBpdCA9
IG1fcmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGRvbVN0b3JhZ2VFbmQ7ICsraXQpCi0gICAgICAg
IGl0LT5zZWNvbmQtPnVuYmluZCgpOworICAgICAgICBpdC0+dmFsdWUtPnVuYmluZCgpOwogICAg
IG1fZnJvbnRlbmQgPSAwOwogICAgIGRpc2FibGUoMCk7CiB9CkBAIC05Niw3ICs5Niw3IEBAIHZv
aWQgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcqKQogCiAgICAg
RE9NU3RvcmFnZVJlc291cmNlc01hcDo6aXRlcmF0b3IgcmVzb3VyY2VzRW5kID0gbV9yZXNvdXJj
ZXMuZW5kKCk7CiAgICAgZm9yIChET01TdG9yYWdlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBpdCA9
IG1fcmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IHJlc291cmNlc0VuZDsgKytpdCkKLSAgICAgICAg
aXQtPnNlY29uZC0+YmluZChtX2Zyb250ZW5kKTsKKyAgICAgICAgaXQtPnZhbHVlLT5iaW5kKG1f
ZnJvbnRlbmQpOwogfQogCiB2b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6ZGlzYWJsZShF
cnJvclN0cmluZyopCkBAIC0xNjUsOCArMTY1LDggQEAgU3RyaW5nIEluc3BlY3RvckRPTVN0b3Jh
Z2VBZ2VudDo6c3RvcmFnZUlkKFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbiwgYm9vbAog
ICAgIEFTU0VSVChzZWN1cml0eU9yaWdpbik7CiAgICAgRE9NU3RvcmFnZVJlc291cmNlc01hcDo6
aXRlcmF0b3IgZG9tU3RvcmFnZUVuZCA9IG1fcmVzb3VyY2VzLmVuZCgpOwogICAgIGZvciAoRE9N
U3RvcmFnZVJlc291cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5iZWdpbigpOyBp
dCAhPSBkb21TdG9yYWdlRW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kLT5pc1Nh
bWVPcmlnaW5BbmRUeXBlKHNlY3VyaXR5T3JpZ2luLCBpc0xvY2FsU3RvcmFnZSkpCi0gICAgICAg
ICAgICByZXR1cm4gaXQtPmZpcnN0OworICAgICAgICBpZiAoaXQtPnZhbHVlLT5pc1NhbWVPcmln
aW5BbmRUeXBlKHNlY3VyaXR5T3JpZ2luLCBpc0xvY2FsU3RvcmFnZSkpCisgICAgICAgICAgICBy
ZXR1cm4gaXQtPmtleTsKICAgICB9CiAgICAgcmV0dXJuIFN0cmluZygpOwogfQpAQCAtMTc2LDE0
ICsxNzYsMTQgQEAgSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlKiBJbnNwZWN0b3JET01TdG9y
YWdlQWdlbnQ6OmdldERPTVN0b3JhZ2VSZXNvdXJjZUZvckkKICAgICBET01TdG9yYWdlUmVzb3Vy
Y2VzTWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmZpbmQoc3RvcmFnZUlkKTsKICAgICBp
ZiAoaXQgPT0gbV9yZXNvdXJjZXMuZW5kKCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVy
biBpdC0+c2Vjb25kLmdldCgpOworICAgIHJldHVybiBpdC0+dmFsdWUuZ2V0KCk7CiB9CiAKIHZv
aWQgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpkaWRVc2VET01TdG9yYWdlKFN0b3JhZ2VBcmVh
KiBzdG9yYWdlQXJlYSwgYm9vbCBpc0xvY2FsU3RvcmFnZSwgRnJhbWUqIGZyYW1lKQogewogICAg
IERPTVN0b3JhZ2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGRvbVN0b3JhZ2VFbmQgPSBtX3Jlc291
cmNlcy5lbmQoKTsKICAgICBmb3IgKERPTVN0b3JhZ2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGl0
ID0gbV9yZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZG9tU3RvcmFnZUVuZDsgKytpdCkgewotICAg
ICAgICBpZiAoaXQtPnNlY29uZC0+aXNTYW1lT3JpZ2luQW5kVHlwZShmcmFtZS0+ZG9jdW1lbnQo
KS0+c2VjdXJpdHlPcmlnaW4oKSwgaXNMb2NhbFN0b3JhZ2UpKQorICAgICAgICBpZiAoaXQtPnZh
bHVlLT5pc1NhbWVPcmlnaW5BbmRUeXBlKGZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdp
bigpLCBpc0xvY2FsU3RvcmFnZSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0y
MTgsNyArMjE4LDcgQEAgc2l6ZV90IEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6bWVtb3J5Qnl0
ZXNVc2VkQnlTdG9yYWdlQ2FjaGUoKSBjb25zdAogewogICAgIHNpemVfdCBzaXplID0gMDsKICAg
ICBmb3IgKERPTVN0b3JhZ2VSZXNvdXJjZXNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9yZXNv
dXJjZXMuYmVnaW4oKTsgaXQgIT0gbV9yZXNvdXJjZXMuZW5kKCk7ICsraXQpCi0gICAgICAgIHNp
emUgKz0gaXQtPnNlY29uZC0+c3RvcmFnZUFyZWEoKS0+bWVtb3J5Qnl0ZXNVc2VkQnlDYWNoZSgp
OworICAgICAgICBzaXplICs9IGl0LT52YWx1ZS0+c3RvcmFnZUFyZWEoKS0+bWVtb3J5Qnl0ZXNV
c2VkQnlDYWNoZSgpOwogICAgIHJldHVybiBzaXplOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5jcHAKaW5kZXggOThjOTM2M2Fl
Njk3ZDQ2ODM0ZWMzYjYxZDQzYTNlZWQ0NDgwOWVhYy4uN2I4ZmNhNGQ0YWE2NTdiMjg5YzI1MDNk
ODJhYWI0YTljYTBhNjc1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckRhdGFiYXNlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JEYXRhYmFzZUFnZW50LmNwcApAQCAtMjc1LDcgKzI3NSw3IEBAIHZvaWQgSW5zcGVj
dG9yRGF0YWJhc2VBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nKikKIAogICAgIERhdGFiYXNlUmVz
b3VyY2VzTWFwOjppdGVyYXRvciBkYXRhYmFzZXNFbmQgPSBtX3Jlc291cmNlcy5lbmQoKTsKICAg
ICBmb3IgKERhdGFiYXNlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmJl
Z2luKCk7IGl0ICE9IGRhdGFiYXNlc0VuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+Ymlu
ZChtX2Zyb250ZW5kUHJvdmlkZXItPmZyb250ZW5kKCkpOworICAgICAgICBpdC0+dmFsdWUtPmJp
bmQobV9mcm9udGVuZFByb3ZpZGVyLT5mcm9udGVuZCgpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JE
YXRhYmFzZUFnZW50OjpkaXNhYmxlKEVycm9yU3RyaW5nKikKQEAgLTMzMyw4ICszMzMsOCBAQCB2
b2lkIEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmV4ZWN1dGVTUUwoRXJyb3JTdHJpbmcqIGVycm9y
LCBjb25zdCBTdHJpbmcmIGRhdGFiYQogU3RyaW5nIEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmRh
dGFiYXNlSWQoRGF0YWJhc2UqIGRhdGFiYXNlKQogewogICAgIGZvciAoRGF0YWJhc2VSZXNvdXJj
ZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gbV9yZXNvdXJj
ZXMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQtPmRhdGFiYXNlKCkgPT0g
ZGF0YWJhc2UpCi0gICAgICAgICAgICByZXR1cm4gaXQtPmZpcnN0OworICAgICAgICBpZiAoaXQt
PnZhbHVlLT5kYXRhYmFzZSgpID09IGRhdGFiYXNlKQorICAgICAgICAgICAgcmV0dXJuIGl0LT5r
ZXk7CiAgICAgfQogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KQEAgLTM0Miw4ICszNDIsOCBAQCBT
dHJpbmcgSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6ZGF0YWJhc2VJZChEYXRhYmFzZSogZGF0YWJh
c2UpCiBJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlKiBJbnNwZWN0b3JEYXRhYmFzZUFnZW50Ojpm
aW5kQnlGaWxlTmFtZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKQogewogICAgIGZvciAoRGF0YWJh
c2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0g
bV9yZXNvdXJjZXMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQtPmRhdGFi
YXNlKCktPmZpbGVOYW1lKCkgPT0gZmlsZU5hbWUpCi0gICAgICAgICAgICByZXR1cm4gaXQtPnNl
Y29uZC5nZXQoKTsKKyAgICAgICAgaWYgKGl0LT52YWx1ZS0+ZGF0YWJhc2UoKS0+ZmlsZU5hbWUo
KSA9PSBmaWxlTmFtZSkKKyAgICAgICAgICAgIHJldHVybiBpdC0+dmFsdWUuZ2V0KCk7CiAgICAg
fQogICAgIHJldHVybiAwOwogfQpAQCAtMzUzLDcgKzM1Myw3IEBAIERhdGFiYXNlKiBJbnNwZWN0
b3JEYXRhYmFzZUFnZW50OjpkYXRhYmFzZUZvcklkKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VJZCkK
ICAgICBEYXRhYmFzZVJlc291cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5maW5k
KGRhdGFiYXNlSWQpOwogICAgIGlmIChpdCA9PSBtX3Jlc291cmNlcy5lbmQoKSkKICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQtPmRhdGFiYXNlKCk7CisgICAgcmV0dXJu
IGl0LT52YWx1ZS0+ZGF0YWJhc2UoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3Bw
CmluZGV4IGQ2ZTQ0ZDkxYWQ1MGQ1NjlmYWE0NGQwNjc0YjBhYzdlODcwODFjZjMuLjEyZjgxNzgz
MDA1YjI0YmNiY2E0ODI4MDhhYmM4NjA1MGM2YzcwNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAKQEAgLTI0Miw5ICsyNDIs
OSBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnRCeVVybChFcnJv
clN0cmluZyogZXJyb3JTdHJpbmcsIGludCBsaQogCiAgICAgU2NyaXB0QnJlYWtwb2ludCBicmVh
a3BvaW50KGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwgY29uZGl0aW9uKTsKICAgICBmb3IgKFNj
cmlwdHNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zY3JpcHRzLmJlZ2luKCk7IGl0ICE9IG1fc2NyaXB0
cy5lbmQoKTsgKytpdCkgewotICAgICAgICBpZiAoIW1hdGNoZXMoaXQtPnNlY29uZC51cmwsIHVy
bCwgaXNSZWdleCkpCisgICAgICAgIGlmICghbWF0Y2hlcyhpdC0+dmFsdWUudXJsLCB1cmwsIGlz
UmVnZXgpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIFJlZlB0cjxUeXBlQnVpbGRl
cjo6RGVidWdnZXI6OkxvY2F0aW9uPiBsb2NhdGlvbiA9IHJlc29sdmVCcmVha3BvaW50KGJyZWFr
cG9pbnRJZCwgaXQtPmZpcnN0LCBicmVha3BvaW50KTsKKyAgICAgICAgUmVmUHRyPFR5cGVCdWls
ZGVyOjpEZWJ1Z2dlcjo6TG9jYXRpb24+IGxvY2F0aW9uID0gcmVzb2x2ZUJyZWFrcG9pbnQoYnJl
YWtwb2ludElkLCBpdC0+a2V5LCBicmVha3BvaW50KTsKICAgICAgICAgaWYgKGxvY2F0aW9uKQog
ICAgICAgICAgICAgbG9jYXRpb25zLT5hZGRJdGVtKGxvY2F0aW9uKTsKICAgICB9CkBAIC0yOTYs
OCArMjk2LDggQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZW1vdmVCcmVha3BvaW50
KEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBicmVha3AKICAgICBCcmVha3BvaW50SWRUb0Rl
YnVnU2VydmVyQnJlYWtwb2ludElkc01hcDo6aXRlcmF0b3IgZGVidWdTZXJ2ZXJCcmVha3BvaW50
SWRzSXRlcmF0b3IgPSBtX2JyZWFrcG9pbnRJZFRvRGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzLmZp
bmQoYnJlYWtwb2ludElkKTsKICAgICBpZiAoZGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzSXRlcmF0
b3IgPT0gbV9icmVha3BvaW50SWRUb0RlYnVnU2VydmVyQnJlYWtwb2ludElkcy5lbmQoKSkKICAg
ICAgICAgcmV0dXJuOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGVidWdTZXJ2ZXJCcmVh
a3BvaW50SWRzSXRlcmF0b3ItPnNlY29uZC5zaXplKCk7ICsraSkKLSAgICAgICAgc2NyaXB0RGVi
dWdTZXJ2ZXIoKS5yZW1vdmVCcmVha3BvaW50KGRlYnVnU2VydmVyQnJlYWtwb2ludElkc0l0ZXJh
dG9yLT5zZWNvbmRbaV0pOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGVidWdTZXJ2ZXJC
cmVha3BvaW50SWRzSXRlcmF0b3ItPnZhbHVlLnNpemUoKTsgKytpKQorICAgICAgICBzY3JpcHRE
ZWJ1Z1NlcnZlcigpLnJlbW92ZUJyZWFrcG9pbnQoZGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzSXRl
cmF0b3ItPnZhbHVlW2ldKTsKICAgICBtX2JyZWFrcG9pbnRJZFRvRGVidWdTZXJ2ZXJCcmVha3Bv
aW50SWRzLnJlbW92ZShkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNJdGVyYXRvcik7CiB9CiAKQEAg
LTMyNSw3ICszMjUsNyBAQCBQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRp
b24+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnJlc29sdmVCcmVhawogICAgIFNjcmlwdHNNYXA6
Oml0ZXJhdG9yIHNjcmlwdEl0ZXJhdG9yID0gbV9zY3JpcHRzLmZpbmQoc2NyaXB0SWQpOwogICAg
IGlmIChzY3JpcHRJdGVyYXRvciA9PSBtX3NjcmlwdHMuZW5kKCkpCiAgICAgICAgIHJldHVybiAw
OwotICAgIFNjcmlwdCYgc2NyaXB0ID0gc2NyaXB0SXRlcmF0b3ItPnNlY29uZDsKKyAgICBTY3Jp
cHQmIHNjcmlwdCA9IHNjcmlwdEl0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoYnJlYWtwb2ludC5s
aW5lTnVtYmVyIDwgc2NyaXB0LnN0YXJ0TGluZSB8fCBzY3JpcHQuZW5kTGluZSA8IGJyZWFrcG9p
bnQubGluZU51bWJlcikKICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTMzOCw3ICszMzgsNyBAQCBQ
YXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRpb24+IEluc3BlY3RvckRlYnVn
Z2VyQWdlbnQ6OnJlc29sdmVCcmVhawogICAgIEJyZWFrcG9pbnRJZFRvRGVidWdTZXJ2ZXJCcmVh
a3BvaW50SWRzTWFwOjppdGVyYXRvciBkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNJdGVyYXRvciA9
IG1fYnJlYWtwb2ludElkVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHMuZmluZChicmVha3BvaW50
SWQpOwogICAgIGlmIChkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNJdGVyYXRvciA9PSBtX2JyZWFr
cG9pbnRJZFRvRGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzLmVuZCgpKQogICAgICAgICBkZWJ1Z1Nl
cnZlckJyZWFrcG9pbnRJZHNJdGVyYXRvciA9IG1fYnJlYWtwb2ludElkVG9EZWJ1Z1NlcnZlckJy
ZWFrcG9pbnRJZHMuc2V0KGJyZWFrcG9pbnRJZCwgVmVjdG9yPFN0cmluZz4oKSkuaXRlcmF0b3I7
Ci0gICAgZGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzSXRlcmF0b3ItPnNlY29uZC5hcHBlbmQoZGVi
dWdTZXJ2ZXJCcmVha3BvaW50SWQpOworICAgIGRlYnVnU2VydmVyQnJlYWtwb2ludElkc0l0ZXJh
dG9yLT52YWx1ZS5hcHBlbmQoZGVidWdTZXJ2ZXJCcmVha3BvaW50SWQpOwogCiAgICAgUmVmUHRy
PFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRpb24+IGxvY2F0aW9uID0gVHlwZUJ1aWxkZXI6
OkRlYnVnZ2VyOjpMb2NhdGlvbjo6Y3JlYXRlKCkKICAgICAgICAgLnNldFNjcmlwdElkKHNjcmlw
dElkKQpAQCAtMzY0LDcgKzM2NCw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2Vh
cmNoSW5Db250ZW50KEVycm9yU3RyaW5nKiBlcnJvciwgY29uc3QgU3RyaW5nJiBzCiAKICAgICBT
Y3JpcHRzTWFwOjppdGVyYXRvciBpdCA9IG1fc2NyaXB0cy5maW5kKHNjcmlwdElkKTsKICAgICBp
ZiAoaXQgIT0gbV9zY3JpcHRzLmVuZCgpKQotICAgICAgICByZXN1bHRzID0gQ29udGVudFNlYXJj
aFV0aWxzOjpzZWFyY2hJblRleHRCeUxpbmVzKGl0LT5zZWNvbmQuc291cmNlLCBxdWVyeSwgY2Fz
ZVNlbnNpdGl2ZSwgaXNSZWdleCk7CisgICAgICAgIHJlc3VsdHMgPSBDb250ZW50U2VhcmNoVXRp
bHM6OnNlYXJjaEluVGV4dEJ5TGluZXMoaXQtPnZhbHVlLnNvdXJjZSwgcXVlcnksIGNhc2VTZW5z
aXRpdmUsIGlzUmVnZXgpOwogICAgIGVsc2UKICAgICAgICAgKmVycm9yID0gIk5vIHNjcmlwdCBm
b3IgaWQ6ICIgKyBzY3JpcHRJZDsKIH0KQEAgLTM5Nyw3ICszOTcsNyBAQCB2b2lkIEluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQ6OmdldFNjcmlwdFNvdXJjZShFcnJvclN0cmluZyogZXJyb3IsIGNvbnN0
IFN0cmluZyYgcwogewogICAgIFNjcmlwdHNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zY3JpcHRzLmZp
bmQoc2NyaXB0SWQpOwogICAgIGlmIChpdCAhPSBtX3NjcmlwdHMuZW5kKCkpCi0gICAgICAgICpz
Y3JpcHRTb3VyY2UgPSBpdC0+c2Vjb25kLnNvdXJjZTsKKyAgICAgICAgKnNjcmlwdFNvdXJjZSA9
IGl0LT52YWx1ZS5zb3VyY2U7CiAgICAgZWxzZQogICAgICAgICAqZXJyb3IgPSAiTm8gc2NyaXB0
IGZvciBpZDogIiArIHNjcmlwdElkOwogfQpAQCAtNjI0LDcgKzYyNCw3IEBAIHZvaWQgSW5zcGVj
dG9yRGVidWdnZXJBZ2VudDo6ZGlkUGFyc2VTb3VyY2UoY29uc3QgU3RyaW5nJiBzY3JpcHRJZCwg
Y29uc3QgU2NyaXB0CiAKICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBicmVha3BvaW50c0Nv
b2tpZSA9IG1fc3RhdGUtPmdldE9iamVjdChEZWJ1Z2dlckFnZW50U3RhdGU6OmphdmFTY3JpcHRC
cmVha3BvaW50cyk7CiAgICAgZm9yIChJbnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9yIGl0ID0gYnJl
YWtwb2ludHNDb29raWUtPmJlZ2luKCk7IGl0ICE9IGJyZWFrcG9pbnRzQ29va2llLT5lbmQoKTsg
KytpdCkgewotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBicmVha3BvaW50T2JqZWN0
ID0gaXQtPnNlY29uZC0+YXNPYmplY3QoKTsKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gYnJlYWtwb2ludE9iamVjdCA9IGl0LT52YWx1ZS0+YXNPYmplY3QoKTsKICAgICAgICAgYm9v
bCBpc1JlZ2V4OwogICAgICAgICBicmVha3BvaW50T2JqZWN0LT5nZXRCb29sZWFuKCJpc1JlZ2V4
IiwgJmlzUmVnZXgpOwogICAgICAgICBTdHJpbmcgdXJsOwpAQCAtNjM1LDkgKzYzNSw5IEBAIHZv
aWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkUGFyc2VTb3VyY2UoY29uc3QgU3RyaW5nJiBz
Y3JpcHRJZCwgY29uc3QgU2NyaXB0CiAgICAgICAgIGJyZWFrcG9pbnRPYmplY3QtPmdldE51bWJl
cigibGluZU51bWJlciIsICZicmVha3BvaW50LmxpbmVOdW1iZXIpOwogICAgICAgICBicmVha3Bv
aW50T2JqZWN0LT5nZXROdW1iZXIoImNvbHVtbk51bWJlciIsICZicmVha3BvaW50LmNvbHVtbk51
bWJlcik7CiAgICAgICAgIGJyZWFrcG9pbnRPYmplY3QtPmdldFN0cmluZygiY29uZGl0aW9uIiwg
JmJyZWFrcG9pbnQuY29uZGl0aW9uKTsKLSAgICAgICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpEZWJ1
Z2dlcjo6TG9jYXRpb24+IGxvY2F0aW9uID0gcmVzb2x2ZUJyZWFrcG9pbnQoaXQtPmZpcnN0LCBz
Y3JpcHRJZCwgYnJlYWtwb2ludCk7CisgICAgICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6RGVidWdn
ZXI6OkxvY2F0aW9uPiBsb2NhdGlvbiA9IHJlc29sdmVCcmVha3BvaW50KGl0LT5rZXksIHNjcmlw
dElkLCBicmVha3BvaW50KTsKICAgICAgICAgaWYgKGxvY2F0aW9uKQotICAgICAgICAgICAgbV9m
cm9udGVuZC0+YnJlYWtwb2ludFJlc29sdmVkKGl0LT5maXJzdCwgbG9jYXRpb24pOworICAgICAg
ICAgICAgbV9mcm9udGVuZC0+YnJlYWtwb2ludFJlc29sdmVkKGl0LT5rZXksIGxvY2F0aW9uKTsK
ICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JJbmRleGVkREJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
SW5kZXhlZERCQWdlbnQuY3BwCmluZGV4IDMzYjIxYjRmZGQxMmMxOTkyNWY0NWMzMzNhZWE3MDQ3
MzdlYzZmODEuLmVhMzM5OWVmNzMyZWExYmM0OTJiYTlkZWUwNDg5MTYzMmU1Mzk4MzUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50
LmNwcApAQCAtMzE5LDEyICszMTksMTIgQEAgcHVibGljOgogICAgICAgICBSZWZQdHI8VHlwZUJ1
aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpJbmRleGVkREI6Ok9iamVjdFN0b3JlPiA+IG9iamVj
dFN0b3JlcyA9IFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6SW5kZXhlZERCOjpPYmpl
Y3RTdG9yZT46OmNyZWF0ZSgpOwogCiAgICAgICAgIGZvciAoSURCRGF0YWJhc2VNZXRhZGF0YTo6
T2JqZWN0U3RvcmVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZGF0YWJhc2VNZXRhZGF0YS5vYmpl
Y3RTdG9yZXMuYmVnaW4oKTsgaXQgIT0gZGF0YWJhc2VNZXRhZGF0YS5vYmplY3RTdG9yZXMuZW5k
KCk7ICsraXQpIHsKLSAgICAgICAgICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9i
amVjdFN0b3JlTWV0YWRhdGEgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgY29uc3QgSURCT2Jq
ZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSA9IGl0LT52YWx1ZTsKIAogICAg
ICAgICAgICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6SW5kZXhlZERC
OjpPYmplY3RTdG9yZUluZGV4PiA+IGluZGV4ZXMgPSBUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1
aWxkZXI6OkluZGV4ZWREQjo6T2JqZWN0U3RvcmVJbmRleD46OmNyZWF0ZSgpOwogCiAgICAgICAg
ICAgICBmb3IgKElEQk9iamVjdFN0b3JlTWV0YWRhdGE6OkluZGV4TWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG9iamVjdFN0b3JlTWV0YWRhdGEuaW5kZXhlcy5iZWdpbigpOyBpdCAhPSBvYmplY3RT
dG9yZU1ldGFkYXRhLmluZGV4ZXMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgICAgICAgICBjb25z
dCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhID0gaXQtPnNlY29uZDsKKyAgICAgICAg
ICAgICAgICBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhID0gaXQtPnZhbHVl
OwogCiAgICAgICAgICAgICAgICAgUmVmUHRyPE9iamVjdFN0b3JlSW5kZXg+IG9iamVjdFN0b3Jl
SW5kZXggPSBPYmplY3RTdG9yZUluZGV4OjpjcmVhdGUoKQogICAgICAgICAgICAgICAgICAgICAu
c2V0TmFtZShpbmRleE1ldGFkYXRhLm5hbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yTWVtb3J5QWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3Rvck1lbW9yeUFnZW50LmNwcAppbmRleCBlYTUyNTRhYWI1OWUzMjRiYWNiYTk3
NzdiNjZkZjM4MGEyNWI0YzdhLi4wODQyNWNjODc0MjA1ODIxMDIwZGFhMDlmNmYyNzc1NzE0ZDRj
MmUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTWVtb3J5
QWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JNZW1vcnlB
Z2VudC5jcHAKQEAgLTE2Myw4ICsxNjMsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBSZWZQ
dHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpNZW1vcnk6Ok5vZGVDb3VudD4gPiBj
aGlsZHJlblN0YXRzID0gVHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpNZW1vcnk6Ok5v
ZGVDb3VudD46OmNyZWF0ZSgpOwogICAgICAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBpbnQ+Ojpp
dGVyYXRvciBpdCA9IG1fbm9kZU5hbWVUb0NvdW50LmJlZ2luKCk7IGl0ICE9IG1fbm9kZU5hbWVU
b0NvdW50LmVuZCgpOyArK2l0KSB7Ci0gICAgICAgICAgICBSZWZQdHI8Tm9kZUNvdW50PiBub2Rl
Q291bnQgPSBOb2RlQ291bnQ6OmNyZWF0ZSgpLnNldE5vZGVOYW1lKGl0LT5maXJzdCkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAu
c2V0Q291bnQoaXQtPnNlY29uZCk7CisgICAgICAgICAgICBSZWZQdHI8Tm9kZUNvdW50PiBub2Rl
Q291bnQgPSBOb2RlQ291bnQ6OmNyZWF0ZSgpLnNldE5vZGVOYW1lKGl0LT5rZXkpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNl
dENvdW50KGl0LT52YWx1ZSk7CiAgICAgICAgICAgICBjaGlsZHJlblN0YXRzLT5hZGRJdGVtKG5v
ZGVDb3VudCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGNoaWxkcmVuU3RhdHMucmVsZWFz
ZSgpOwpAQCAtMTc0LDggKzE3NCw4IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIFJlZlB0cjxU
eXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6Ok1lbW9yeTo6TGlzdGVuZXJDb3VudD4gPiBs
aXN0ZW5lclN0YXRzID0gVHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpNZW1vcnk6Okxp
c3RlbmVyQ291bnQ+OjpjcmVhdGUoKTsKICAgICAgICAgZm9yIChIYXNoTWFwPEF0b21pY1N0cmlu
ZywgaW50Pjo6aXRlcmF0b3IgaXQgPSBtX2V2ZW50VHlwZVRvQ291bnQuYmVnaW4oKTsgaXQgIT0g
bV9ldmVudFR5cGVUb0NvdW50LmVuZCgpOyArK2l0KSB7Ci0gICAgICAgICAgICBSZWZQdHI8TGlz
dGVuZXJDb3VudD4gbGlzdGVuZXJDb3VudCA9IExpc3RlbmVyQ291bnQ6OmNyZWF0ZSgpLnNldFR5
cGUoaXQtPmZpcnN0KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRDb3VudChpdC0+c2Vjb25kKTsKKyAg
ICAgICAgICAgIFJlZlB0cjxMaXN0ZW5lckNvdW50PiBsaXN0ZW5lckNvdW50ID0gTGlzdGVuZXJD
b3VudDo6Y3JlYXRlKCkuc2V0VHlwZShpdC0+a2V5KQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRDb3Vu
dChpdC0+dmFsdWUpOwogICAgICAgICAgICAgbGlzdGVuZXJTdGF0cy0+YWRkSXRlbShsaXN0ZW5l
ckNvdW50KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gbGlzdGVuZXJTdGF0cy5yZWxlYXNl
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFn
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3Bw
CmluZGV4IGM2YjA2YmZhNjRlMDhmNWU4MjMzY2ZlMGE5MDhkOTQzNDZlYzllYWMuLjEzYWM3ZTll
NDhmMmM0YzBkMDRmNjA3NGExZDE5ZGQ4ZDFkMzRiZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCkBAIC00NjAsNyArNDYwLDcgQEAgc3Rh
dGljIFZlY3RvcjxDYWNoZWRSZXNvdXJjZSo+IGNhY2hlZFJlc291cmNlc0ZvckZyYW1lKEZyYW1l
KiBmcmFtZSkKICAgICBjb25zdCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6RG9jdW1lbnRSZXNvdXJj
ZU1hcCYgYWxsUmVzb3VyY2VzID0gZnJhbWUtPmRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9h
ZGVyKCktPmFsbENhY2hlZFJlc291cmNlcygpOwogICAgIENhY2hlZFJlc291cmNlTG9hZGVyOjpE
b2N1bWVudFJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBhbGxSZXNvdXJjZXMuZW5k
KCk7CiAgICAgZm9yIChDYWNoZWRSZXNvdXJjZUxvYWRlcjo6RG9jdW1lbnRSZXNvdXJjZU1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBhbGxSZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7Ci0gICAgICAgIENhY2hlZFJlc291cmNlKiBjYWNoZWRSZXNvdXJjZSA9IGl0LT5zZWNvbmQu
Z2V0KCk7CisgICAgICAgIENhY2hlZFJlc291cmNlKiBjYWNoZWRSZXNvdXJjZSA9IGl0LT52YWx1
ZS5nZXQoKTsKIAogICAgICAgICBzd2l0Y2ggKGNhY2hlZFJlc291cmNlLT50eXBlKCkpIHsKICAg
ICAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJjZToKQEAgLTc2NCw3ICs3NjQs
NyBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxk
KEZyYW1lKiBmcmFtZSwgRE9NV3JhcHBlcldvcgogICAgICAgICBJbnNwZWN0b3JPYmplY3Q6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IHNjcmlwdHMtPmVuZCgpOwogICAgICAgICBmb3IgKEluc3BlY3Rv
ck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBzY3JpcHRzLT5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKICAgICAgICAgICAgIFN0cmluZyBzY3JpcHRUZXh0OwotICAgICAgICAgICAgaWYg
KGl0LT5zZWNvbmQtPmFzU3RyaW5nKCZzY3JpcHRUZXh0KSkKKyAgICAgICAgICAgIGlmIChpdC0+
dmFsdWUtPmFzU3RyaW5nKCZzY3JpcHRUZXh0KSkKICAgICAgICAgICAgICAgICBtX2luamVjdGVk
U2NyaXB0TWFuYWdlci0+aW5qZWN0U2NyaXB0KHNjcmlwdFRleHQsIG1haW5Xb3JsZFNjcmlwdFN0
YXRlKGZyYW1lKSk7CiAgICAgICAgIH0KICAgICB9CkBAIC03OTYsOCArNzk2LDggQEAgdm9pZCBJ
bnNwZWN0b3JQYWdlQWdlbnQ6OmZyYW1lRGV0YWNoZWQoRnJhbWUqIGZyYW1lKQogewogICAgIEhh
c2hNYXA8RnJhbWUqLCBTdHJpbmc+OjppdGVyYXRvciBpdGVyYXRvciA9IG1fZnJhbWVUb0lkZW50
aWZpZXIuZmluZChmcmFtZSk7CiAgICAgaWYgKGl0ZXJhdG9yICE9IG1fZnJhbWVUb0lkZW50aWZp
ZXIuZW5kKCkpIHsKLSAgICAgICAgbV9mcm9udGVuZC0+ZnJhbWVEZXRhY2hlZChpdGVyYXRvci0+
c2Vjb25kKTsKLSAgICAgICAgbV9pZGVudGlmaWVyVG9GcmFtZS5yZW1vdmUoaXRlcmF0b3ItPnNl
Y29uZCk7CisgICAgICAgIG1fZnJvbnRlbmQtPmZyYW1lRGV0YWNoZWQoaXRlcmF0b3ItPnZhbHVl
KTsKKyAgICAgICAgbV9pZGVudGlmaWVyVG9GcmFtZS5yZW1vdmUoaXRlcmF0b3ItPnZhbHVlKTsK
ICAgICAgICAgbV9mcmFtZVRvSWRlbnRpZmllci5yZW1vdmUoaXRlcmF0b3IpOwogICAgIH0KIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFn
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50
LmNwcAppbmRleCA0MmNkZTg1YmJhYzFhNmEyZDZkN2U5MGU4MTE3ZGIwZThiZTEyMmE1Li45OTdh
NThlOTkzZjIzMjI3MTU0NjEyMGQ3ZDQyMjk4NTE5ZGY0Y2JlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwCkBAIC0yNDksMTAg
KzI0OSwxMCBAQCB2b2lkIEluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmdldFByb2ZpbGVIZWFkZXJz
KEVycm9yU3RyaW5nKiwgUmVmUHRyPFR5cGVCdWlsZGVyOgogCiAgICAgUHJvZmlsZXNNYXA6Oml0
ZXJhdG9yIHByb2ZpbGVzRW5kID0gbV9wcm9maWxlcy5lbmQoKTsKICAgICBmb3IgKFByb2ZpbGVz
TWFwOjppdGVyYXRvciBpdCA9IG1fcHJvZmlsZXMuYmVnaW4oKTsgaXQgIT0gcHJvZmlsZXNFbmQ7
ICsraXQpCi0gICAgICAgIGhlYWRlcnMtPmFkZEl0ZW0oY3JlYXRlUHJvZmlsZUhlYWRlcigqaXQt
PnNlY29uZCkpOworICAgICAgICBoZWFkZXJzLT5hZGRJdGVtKGNyZWF0ZVByb2ZpbGVIZWFkZXIo
Kml0LT52YWx1ZSkpOwogICAgIEhlYXBTbmFwc2hvdHNNYXA6Oml0ZXJhdG9yIHNuYXBzaG90c0Vu
ZCA9IG1fc25hcHNob3RzLmVuZCgpOwogICAgIGZvciAoSGVhcFNuYXBzaG90c01hcDo6aXRlcmF0
b3IgaXQgPSBtX3NuYXBzaG90cy5iZWdpbigpOyBpdCAhPSBzbmFwc2hvdHNFbmQ7ICsraXQpCi0g
ICAgICAgIGhlYWRlcnMtPmFkZEl0ZW0oY3JlYXRlU25hcHNob3RIZWFkZXIoKml0LT5zZWNvbmQp
KTsKKyAgICAgICAgaGVhZGVycy0+YWRkSXRlbShjcmVhdGVTbmFwc2hvdEhlYWRlcigqaXQtPnZh
bHVlKSk7CiB9CiAKIG5hbWVzcGFjZSB7CkBAIC0yODAsMTYgKzI4MCwxNiBAQCB2b2lkIEluc3Bl
Y3RvclByb2ZpbGVyQWdlbnQ6OmdldFByb2ZpbGUoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBj
b25zdCBTdHJpbmcmCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgcHJv
ZmlsZU9iamVjdCA9IFR5cGVCdWlsZGVyOjpQcm9maWxlcjo6UHJvZmlsZTo6Y3JlYXRlKCk7Ci0g
ICAgICAgIHByb2ZpbGVPYmplY3QtPnNldEhlYWQoaXQtPnNlY29uZC0+YnVpbGRJbnNwZWN0b3JP
YmplY3RGb3JIZWFkKCkpOwotICAgICAgICBpZiAoaXQtPnNlY29uZC0+Ym90dG9tVXBIZWFkKCkp
Ci0gICAgICAgICAgICBwcm9maWxlT2JqZWN0LT5zZXRCb3R0b21VcEhlYWQoaXQtPnNlY29uZC0+
YnVpbGRJbnNwZWN0b3JPYmplY3RGb3JCb3R0b21VcEhlYWQoKSk7CisgICAgICAgIHByb2ZpbGVP
YmplY3QtPnNldEhlYWQoaXQtPnZhbHVlLT5idWlsZEluc3BlY3Rvck9iamVjdEZvckhlYWQoKSk7
CisgICAgICAgIGlmIChpdC0+dmFsdWUtPmJvdHRvbVVwSGVhZCgpKQorICAgICAgICAgICAgcHJv
ZmlsZU9iamVjdC0+c2V0Qm90dG9tVXBIZWFkKGl0LT52YWx1ZS0+YnVpbGRJbnNwZWN0b3JPYmpl
Y3RGb3JCb3R0b21VcEhlYWQoKSk7CiAgICAgfSBlbHNlIGlmICh0eXBlID09IEhlYXBQcm9maWxl
VHlwZSkgewogICAgICAgICBIZWFwU25hcHNob3RzTWFwOjppdGVyYXRvciBpdCA9IG1fc25hcHNo
b3RzLmZpbmQodWlkKTsKICAgICAgICAgaWYgKGl0ID09IG1fc25hcHNob3RzLmVuZCgpKSB7CiAg
ICAgICAgICAgICAqZXJyb3JTdHJpbmcgPSAiUHJvZmlsZSB3YXNuJ3QgZm91bmQiOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIFJlZlB0cjxTY3JpcHRIZWFwU25hcHNo
b3Q+IHNuYXBzaG90ID0gaXQtPnNlY29uZDsKKyAgICAgICAgUmVmUHRyPFNjcmlwdEhlYXBTbmFw
c2hvdD4gc25hcHNob3QgPSBpdC0+dmFsdWU7CiAgICAgICAgIHByb2ZpbGVPYmplY3QgPSBUeXBl
QnVpbGRlcjo6UHJvZmlsZXI6OlByb2ZpbGU6OmNyZWF0ZSgpOwogICAgICAgICBpZiAobV9mcm9u
dGVuZCkgewogICAgICAgICAgICAgT3V0cHV0U3RyZWFtIHN0cmVhbShtX2Zyb250ZW5kLCB1aWQp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNl
QWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdl
bnQuY3BwCmluZGV4IDlkOTI5YzlhMTBiZWQzNGMyOWMyODk0ODFhYjBhNGE1YTYyODY5MTQuLjk2
MDgxMTIxYjU0MDM2Mjk2MTZlN2I1ZDRkYjY1YjI1OWQ5NWI1MjAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5jcHAKQEAgLTEwMyw3
ICsxMDMsNyBAQCBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0
Rm9ySGVhZGVycyhjb25zdCBIVFRQSGVhZGVyTWFwJiBoZQogICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IGhlYWRlcnNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIEhU
VFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGhlYWRlcnMuZW5kKCk7CiAgICAgZm9y
IChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGhlYWRlcnMuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KQotICAgICAgICBoZWFkZXJzT2JqZWN0LT5zZXRTdHJpbmcoaXQtPmZpcnN0
LnN0cmluZygpLCBpdC0+c2Vjb25kKTsKKyAgICAgICAgaGVhZGVyc09iamVjdC0+c2V0U3RyaW5n
KGl0LT5rZXkuc3RyaW5nKCksIGl0LT52YWx1ZSk7CiAgICAgcmV0dXJuIGhlYWRlcnNPYmplY3Q7
CiB9CiAKQEAgLTIxNCw4ICsyMTQsOCBAQCB2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6Ondp
bGxTZW5kUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIERvY3VtZW50TAogICAgICAg
ICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGhlYWRlcnMtPmVuZCgpOwog
ICAgICAgICBmb3IgKEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBoZWFkZXJz
LT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIFN0cmluZyB2YWx1ZTsK
LSAgICAgICAgICAgIGlmIChpdC0+c2Vjb25kLT5hc1N0cmluZygmdmFsdWUpKQotICAgICAgICAg
ICAgICAgIHJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKGl0LT5maXJzdCwgdmFsdWUpOworICAg
ICAgICAgICAgaWYgKGl0LT52YWx1ZS0+YXNTdHJpbmcoJnZhbHVlKSkKKyAgICAgICAgICAgICAg
ICByZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZChpdC0+a2V5LCB2YWx1ZSk7CiAgICAgICAgIH0K
ICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JT
dGF0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUuY3BwCmlu
ZGV4IDcwYTI0Mzk4NDdjNDU3YzM4YTM5MGEzMzAwNGEzZDllMWIxZGI0MWQuLmJhZjEwYzk3MWUx
MTk1MzI1NzZiZjQ5NDU1MjJmMzdiMDgzMjVhZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvclN0YXRlLmNwcApAQCAtODAsNyArODAsNyBAQCBib29sIEluc3BlY3RvclN0
YXRlOjpnZXRCb29sZWFuKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKQogICAgIEluc3BlY3Rv
ck9iamVjdDo6aXRlcmF0b3IgaXQgPSBtX3Byb3BlcnRpZXMtPmZpbmQocHJvcGVydHlOYW1lKTsK
ICAgICBib29sIHZhbHVlID0gZmFsc2U7CiAgICAgaWYgKGl0ICE9IG1fcHJvcGVydGllcy0+ZW5k
KCkpCi0gICAgICAgIGl0LT5zZWNvbmQtPmFzQm9vbGVhbigmdmFsdWUpOworICAgICAgICBpdC0+
dmFsdWUtPmFzQm9vbGVhbigmdmFsdWUpOwogICAgIHJldHVybiB2YWx1ZTsKIH0KIApAQCAtODks
NyArODksNyBAQCBTdHJpbmcgSW5zcGVjdG9yU3RhdGU6OmdldFN0cmluZyhjb25zdCBTdHJpbmcm
IHByb3BlcnR5TmFtZSkKICAgICBJbnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9yIGl0ID0gbV9wcm9w
ZXJ0aWVzLT5maW5kKHByb3BlcnR5TmFtZSk7CiAgICAgU3RyaW5nIHZhbHVlOwogICAgIGlmIChp
dCAhPSBtX3Byb3BlcnRpZXMtPmVuZCgpKQotICAgICAgICBpdC0+c2Vjb25kLT5hc1N0cmluZygm
dmFsdWUpOworICAgICAgICBpdC0+dmFsdWUtPmFzU3RyaW5nKCZ2YWx1ZSk7CiAgICAgcmV0dXJu
IHZhbHVlOwogfQogCkBAIC05OCw3ICs5OCw3IEBAIGxvbmcgSW5zcGVjdG9yU3RhdGU6OmdldExv
bmcoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCiAgICAgSW5zcGVjdG9yT2JqZWN0OjppdGVy
YXRvciBpdCA9IG1fcHJvcGVydGllcy0+ZmluZChwcm9wZXJ0eU5hbWUpOwogICAgIGxvbmcgdmFs
dWUgPSAwOwogICAgIGlmIChpdCAhPSBtX3Byb3BlcnRpZXMtPmVuZCgpKQotICAgICAgICBpdC0+
c2Vjb25kLT5hc051bWJlcigmdmFsdWUpOworICAgICAgICBpdC0+dmFsdWUtPmFzTnVtYmVyKCZ2
YWx1ZSk7CiAgICAgcmV0dXJuIHZhbHVlOwogfQogCkBAIC0xMDcsNyArMTA3LDcgQEAgZG91Ymxl
IEluc3BlY3RvclN0YXRlOjpnZXREb3VibGUoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCiAg
ICAgSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciBpdCA9IG1fcHJvcGVydGllcy0+ZmluZChwcm9w
ZXJ0eU5hbWUpOwogICAgIGRvdWJsZSB2YWx1ZSA9IDA7CiAgICAgaWYgKGl0ICE9IG1fcHJvcGVy
dGllcy0+ZW5kKCkpCi0gICAgICAgIGl0LT5zZWNvbmQtPmFzTnVtYmVyKCZ2YWx1ZSk7CisgICAg
ICAgIGl0LT52YWx1ZS0+YXNOdW1iZXIoJnZhbHVlKTsKICAgICByZXR1cm4gdmFsdWU7CiB9CiAK
QEAgLTExOCw3ICsxMTgsNyBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9y
U3RhdGU6OmdldE9iamVjdChjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZQogICAgICAgICBtX3By
b3BlcnRpZXMtPnNldE9iamVjdChwcm9wZXJ0eU5hbWUsIEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCkpOwogICAgICAgICBpdCA9IG1fcHJvcGVydGllcy0+ZmluZChwcm9wZXJ0eU5hbWUpOwogICAg
IH0KLSAgICByZXR1cm4gaXQtPnNlY29uZC0+YXNPYmplY3QoKTsKKyAgICByZXR1cm4gaXQtPnZh
bHVlLT5hc09iamVjdCgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKaW5kZXggODNiNDAy
ZDZlYTkzOWY0ZjNlNWU3ZWI0OWQ4MGUzMGRhNzQ3MWZmNy4uMjM0MGMxZGI1MzU4ZDZhYTljMzEw
Y2U3ZjdmZDhiNjNhNDQ5MzgyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JTdHlsZVNoZWV0LmNwcApAQCAtNTM1LDcgKzUzNSw3IEBAIFBhc3NSZWZQdHI8VHlw
ZUJ1aWxkZXI6OkNTUzo6Q1NTU3R5bGU+IEluc3BlY3RvclN0eWxlOjpzdHlsZVdpdGhQcm9wZXJ0
aWVzKCkgY29uCiAgICAgICAgICAgICAgICAgICAgICAgICBzaG91bGRJbmFjdGl2YXRlID0gdHJ1
ZTsKICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIHByZXZpb3VzUGFyc2VkT2s7Ci0gICAgICAgICAgICAgICAgICAgICAgICBib29sIHN1Y2Nl
c3MgPSBhY3RpdmVJdC0+c2Vjb25kLT5nZXRCb29sZWFuKFR5cGVCdWlsZGVyOjpDU1M6OkNTU1By
b3BlcnR5OjpQYXJzZWRPaywgJnByZXZpb3VzUGFyc2VkT2spOworICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBzdWNjZXNzID0gYWN0aXZlSXQtPnZhbHVlLT5nZXRCb29sZWFuKFR5cGVCdWls
ZGVyOjpDU1M6OkNTU1Byb3BlcnR5OjpQYXJzZWRPaywgJnByZXZpb3VzUGFyc2VkT2spOwogICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgIXByZXZpb3VzUGFyc2VkT2spCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkSW5hY3RpdmF0ZSA9IHRydWU7CiAgICAg
ICAgICAgICAgICAgICAgIH0KQEAgLTU0Myw3ICs1NDMsNyBAQCBQYXNzUmVmUHRyPFR5cGVCdWls
ZGVyOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JTdHlsZTo6c3R5bGVXaXRoUHJvcGVydGllcygp
IGNvbgogICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVUb1ByZXZpb3VzQWN0aXZlUHJv
cGVydHkuc2V0KGNhbm9uaWNhbFByb3BlcnR5TmFtZSwgcHJvcGVydHkpOwogCiAgICAgICAgICAg
ICAgICAgaWYgKHNob3VsZEluYWN0aXZhdGUpIHsKLSAgICAgICAgICAgICAgICAgICAgYWN0aXZl
SXQtPnNlY29uZC0+c2V0U3RhdHVzKFR5cGVCdWlsZGVyOjpDU1M6OkNTU1Byb3BlcnR5OjpTdGF0
dXM6OkluYWN0aXZlKTsKKyAgICAgICAgICAgICAgICAgICAgYWN0aXZlSXQtPnZhbHVlLT5zZXRT
dGF0dXMoVHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUHJvcGVydHk6OlN0YXR1czo6SW5hY3RpdmUpOwog
ICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVUb1ByZXZpb3VzQWN0aXZlUHJvcGVydHku
c2V0KGNhbm9uaWNhbFByb3BlcnR5TmFtZSwgcHJvcGVydHkpOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0xMDM1LDcgKzEwMzUsNyBAQCBQYXNzUmVmUHRyPElu
c3BlY3RvclN0eWxlPiBJbnNwZWN0b3JTdHlsZVNoZWV0OjppbnNwZWN0b3JTdHlsZUZvcklkKGNv
bnN0IEluc3BlYwogICAgICAgICBSZWZQdHI8SW5zcGVjdG9yU3R5bGU+IGluc3BlY3RvclN0eWxl
ID0gSW5zcGVjdG9yU3R5bGU6OmNyZWF0ZShpZCwgc3R5bGUsIHRoaXMpOwogICAgICAgICByZXR1
cm4gaW5zcGVjdG9yU3R5bGUucmVsZWFzZSgpOwogICAgIH0KLSAgICByZXR1cm4gaXQtPnNlY29u
ZDsKKyAgICByZXR1cm4gaXQtPnZhbHVlOwogfQogCiB2b2lkIEluc3BlY3RvclN0eWxlU2hlZXQ6
OnJlbWVtYmVySW5zcGVjdG9yU3R5bGUoUmVmUHRyPEluc3BlY3RvclN0eWxlPiBpbnNwZWN0b3JT
dHlsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1
ZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAKaW5k
ZXggZTRlYWQxN2U1Mjg2NjhkOWU1MDViZmRjYjEwMzBlN2I1MGZiNzc3Ny4uYWRhMjYxN2NjMGM0
YmVhMGE5ZjE5OWYyNTk3NzE0ZDI2OTBiMDZlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvclZhbHVlcy5jcHAKQEAgLTcxNyw3ICs3MTcsNyBAQCBQYXNzUmVmUHRyPElu
c3BlY3RvclZhbHVlPiBJbnNwZWN0b3JPYmplY3RCYXNlOjpnZXQoY29uc3QgU3RyaW5nJiBuYW1l
KSBjb25zdAogICAgIERpY3Rpb25hcnk6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9kYXRhLmZpbmQo
bmFtZSk7CiAgICAgaWYgKGl0ID09IG1fZGF0YS5lbmQoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgcmV0dXJuIGl0LT52YWx1ZTsKIH0KIAogdm9pZCBJ
bnNwZWN0b3JPYmplY3RCYXNlOjpyZW1vdmUoY29uc3QgU3RyaW5nJiBuYW1lKQpAQCAtNzM5LDkg
KzczOSw5IEBAIHZvaWQgSW5zcGVjdG9yT2JqZWN0QmFzZTo6d3JpdGVKU09OKFN0cmluZ0J1aWxk
ZXIqIG91dHB1dCkgY29uc3QKICAgICAgICAgQVNTRVJUKGl0ICE9IG1fZGF0YS5lbmQoKSk7CiAg
ICAgICAgIGlmIChpKQogICAgICAgICAgICAgb3V0cHV0LT5hcHBlbmQoJywnKTsKLSAgICAgICAg
ZG91YmxlUXVvdGVTdHJpbmcoaXQtPmZpcnN0LCBvdXRwdXQpOworICAgICAgICBkb3VibGVRdW90
ZVN0cmluZyhpdC0+a2V5LCBvdXRwdXQpOwogICAgICAgICBvdXRwdXQtPmFwcGVuZCgnOicpOwot
ICAgICAgICBpdC0+c2Vjb25kLT53cml0ZUpTT04ob3V0cHV0KTsKKyAgICAgICAgaXQtPnZhbHVl
LT53cml0ZUpTT04ob3V0cHV0KTsKICAgICB9CiAgICAgb3V0cHV0LT5hcHBlbmQoJ30nKTsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JXb3JrZXJBZ2Vu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yV29ya2VyQWdlbnQuY3Bw
CmluZGV4IDI0YmVlYjU3ZDA3N2YzMjA5NzI2MDQ3ODMxNzgyNTQwYmJjMTMyNzAuLjlmYzYxZGI3
YTc5ZGJhMjQwZDY3M2YxODQ3OWFjNGQ2ZDQzNzYyZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JXb3JrZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvcldvcmtlckFnZW50LmNwcApAQCAtMjA0LDkgKzIwNCw5IEBA
IHZvaWQgSW5zcGVjdG9yV29ya2VyQWdlbnQ6OndvcmtlckNvbnRleHRUZXJtaW5hdGVkKFdvcmtl
ckNvbnRleHRQcm94eSogcHJveHkpCiB7CiAgICAgbV9kZWRpY2F0ZWRXb3JrZXJzLnJlbW92ZShw
cm94eSk7CiAgICAgZm9yIChXb3JrZXJDaGFubmVsczo6aXRlcmF0b3IgaXQgPSBtX2lkVG9DaGFu
bmVsLmJlZ2luKCk7IGl0ICE9IG1faWRUb0NoYW5uZWwuZW5kKCk7ICsraXQpIHsKLSAgICAgICAg
aWYgKHByb3h5ID09IGl0LT5zZWNvbmQtPnByb3h5KCkpIHsKLSAgICAgICAgICAgIG1faW5zcGVj
dG9yRnJvbnRlbmQtPndvcmtlcigpLT53b3JrZXJUZXJtaW5hdGVkKGl0LT5maXJzdCk7Ci0gICAg
ICAgICAgICBkZWxldGUgaXQtPnNlY29uZDsKKyAgICAgICAgaWYgKHByb3h5ID09IGl0LT52YWx1
ZS0+cHJveHkoKSkgeworICAgICAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZC0+d29ya2VyKCkt
PndvcmtlclRlcm1pbmF0ZWQoaXQtPmtleSk7CisgICAgICAgICAgICBkZWxldGUgaXQtPnZhbHVl
OwogICAgICAgICAgICAgbV9pZFRvQ2hhbm5lbC5yZW1vdmUoaXQpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CkBAIC0yMTYsMTQgKzIxNiwxNCBAQCB2b2lkIEluc3BlY3Rvcldvcmtl
ckFnZW50Ojp3b3JrZXJDb250ZXh0VGVybWluYXRlZChXb3JrZXJDb250ZXh0UHJveHkqIHByb3h5
KQogdm9pZCBJbnNwZWN0b3JXb3JrZXJBZ2VudDo6Y3JlYXRlV29ya2VyRnJvbnRlbmRDaGFubmVs
c0ZvckV4aXN0aW5nV29ya2VycygpCiB7CiAgICAgZm9yIChEZWRpY2F0ZWRXb3JrZXJzOjppdGVy
YXRvciBpdCA9IG1fZGVkaWNhdGVkV29ya2Vycy5iZWdpbigpOyBpdCAhPSBtX2RlZGljYXRlZFdv
cmtlcnMuZW5kKCk7ICsraXQpCi0gICAgICAgIGNyZWF0ZVdvcmtlckZyb250ZW5kQ2hhbm5lbChp
dC0+Zmlyc3QsIGl0LT5zZWNvbmQpOworICAgICAgICBjcmVhdGVXb3JrZXJGcm9udGVuZENoYW5u
ZWwoaXQtPmtleSwgaXQtPnZhbHVlKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JXb3JrZXJBZ2VudDo6
ZGVzdHJveVdvcmtlckZyb250ZW5kQ2hhbm5lbHMoKQogewogICAgIGZvciAoV29ya2VyQ2hhbm5l
bHM6Oml0ZXJhdG9yIGl0ID0gbV9pZFRvQ2hhbm5lbC5iZWdpbigpOyBpdCAhPSBtX2lkVG9DaGFu
bmVsLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGl0LT5zZWNvbmQtPmRpc2Nvbm5lY3RGcm9tV29y
a2VyQ29udGV4dCgpOwotICAgICAgICBkZWxldGUgaXQtPnNlY29uZDsKKyAgICAgICAgaXQtPnZh
bHVlLT5kaXNjb25uZWN0RnJvbVdvcmtlckNvbnRleHQoKTsKKyAgICAgICAgZGVsZXRlIGl0LT52
YWx1ZTsKICAgICB9CiAgICAgbV9pZFRvQ2hhbm5lbC5jbGVhcigpOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL05ldHdvcmtSZXNvdXJjZXNEYXRhLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0YS5jcHAKaW5kZXggZTA1ZDEz
ZGVjYjM4MThmY2YxYmI4MzMyODM1OWRlYWZiMjk1ZGZhYy4uNTkyMzMwMjMxNzE2NTY1M2Q5YzU5
OTY1OTNhMGM1YjFhZTE5NzNmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L05ldHdvcmtSZXNvdXJjZXNEYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
TmV0d29ya1Jlc291cmNlc0RhdGEuY3BwCkBAIC0yNTksMTAgKzI1OSwxMCBAQCBWZWN0b3I8U3Ry
aW5nPiBOZXR3b3JrUmVzb3VyY2VzRGF0YTo6cmVtb3ZlQ2FjaGVkUmVzb3VyY2UoQ2FjaGVkUmVz
b3VyY2UqIGNhY2hlZAogICAgIFJlc291cmNlRGF0YU1hcDo6aXRlcmF0b3IgaXQ7CiAgICAgUmVz
b3VyY2VEYXRhTWFwOjppdGVyYXRvciBlbmQgPSBtX3JlcXVlc3RJZFRvUmVzb3VyY2VEYXRhTWFw
LmVuZCgpOwogICAgIGZvciAoaXQgPSBtX3JlcXVlc3RJZFRvUmVzb3VyY2VEYXRhTWFwLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBSZXNvdXJjZURhdGEqIHJlc291cmNlRGF0
YSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFJlc291cmNlRGF0YSogcmVzb3VyY2VEYXRhID0gaXQt
PnZhbHVlOwogICAgICAgICBpZiAocmVzb3VyY2VEYXRhLT5jYWNoZWRSZXNvdXJjZSgpID09IGNh
Y2hlZFJlc291cmNlKSB7CiAgICAgICAgICAgICByZXNvdXJjZURhdGEtPnNldENhY2hlZFJlc291
cmNlKDApOwotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChpdC0+Zmlyc3QpOworICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZChpdC0+a2V5KTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjc5LDkg
KzI3OSw5IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlc0RhdGE6OmNsZWFyKGNvbnN0IFN0cmluZyYg
cHJlc2VydmVkTG9hZGVySWQpCiAgICAgUmVzb3VyY2VEYXRhTWFwOjppdGVyYXRvciBpdDsKICAg
ICBSZXNvdXJjZURhdGFNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fcmVxdWVzdElkVG9SZXNvdXJjZURh
dGFNYXAuZW5kKCk7CiAgICAgZm9yIChpdCA9IG1fcmVxdWVzdElkVG9SZXNvdXJjZURhdGFNYXAu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFJlc291cmNlRGF0YSogcmVzb3Vy
Y2VEYXRhID0gaXQtPnNlY29uZDsKKyAgICAgICAgUmVzb3VyY2VEYXRhKiByZXNvdXJjZURhdGEg
PSBpdC0+dmFsdWU7CiAgICAgICAgIGlmICghcHJlc2VydmVkTG9hZGVySWQuaXNOdWxsKCkgJiYg
cmVzb3VyY2VEYXRhLT5sb2FkZXJJZCgpID09IHByZXNlcnZlZExvYWRlcklkKQotICAgICAgICAg
ICAgcHJlc2VydmVkTWFwLnNldChpdC0+Zmlyc3QsIGl0LT5zZWNvbmQpOworICAgICAgICAgICAg
cHJlc2VydmVkTWFwLnNldChpdC0+a2V5LCBpdC0+dmFsdWUpOwogICAgICAgICBlbHNlCiAgICAg
ICAgICAgICBkZWxldGUgcmVzb3VyY2VEYXRhOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuY3BwIGIvU291cmNlL1dlYkNv
cmUvbG9hZGVyL0Nyb3NzT3JpZ2luQWNjZXNzQ29udHJvbC5jcHAKaW5kZXggYWJhMmJhMDYzZTU5
MzA4ZmFlYzQ0YmZjNzhkZmFmOGQ5Yjg0NWEwYi4uOWIyNmZjODZjOTA0MzkzOTUxNWYxMGFlNjll
YmI2NTUzMGMwYjQzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3Jp
Z2luQWNjZXNzQ29udHJvbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3Jp
Z2luQWNjZXNzQ29udHJvbC5jcHAKQEAgLTY4LDcgKzY4LDcgQEAgYm9vbCBpc1NpbXBsZUNyb3Nz
T3JpZ2luQWNjZXNzUmVxdWVzdChjb25zdCBTdHJpbmcmIG1ldGhvZCwgY29uc3QgSFRUUEhlYWRl
ck1hcCYKIAogICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGhlYWRlck1h
cC5lbmQoKTsKICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaGVh
ZGVyTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoIWlzT25BY2Nl
c3NDb250cm9sU2ltcGxlUmVxdWVzdEhlYWRlcldoaXRlbGlzdChpdC0+Zmlyc3QsIGl0LT5zZWNv
bmQpKQorICAgICAgICBpZiAoIWlzT25BY2Nlc3NDb250cm9sU2ltcGxlUmVxdWVzdEhlYWRlcldo
aXRlbGlzdChpdC0+a2V5LCBpdC0+dmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KIApAQCAtMTE2LDE0ICsxMTYsMTQgQEAgUmVzb3VyY2VSZXF1ZXN0IGNyZWF0ZUFjY2Vz
c0NvbnRyb2xQcmVmbGlnaHRSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWUKICAg
ICBpZiAocmVxdWVzdEhlYWRlckZpZWxkcy5zaXplKCkgPiAwKSB7CiAgICAgICAgIFN0cmluZ0J1
aWxkZXIgaGVhZGVyQnVmZmVyOwogICAgICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IHJlcXVlc3RIZWFkZXJGaWVsZHMuYmVnaW4oKTsKLSAgICAgICAgaGVhZGVyQnVmZmVy
LmFwcGVuZChpdC0+Zmlyc3QpOworICAgICAgICBoZWFkZXJCdWZmZXIuYXBwZW5kKGl0LT5rZXkp
OwogICAgICAgICArK2l0OwogCiAgICAgICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IHJlcXVlc3RIZWFkZXJGaWVsZHMuZW5kKCk7CiAgICAgICAgIGZvciAoOyBpdCAhPSBl
bmQ7ICsraXQpIHsKICAgICAgICAgICAgIGhlYWRlckJ1ZmZlci5hcHBlbmQoJywnKTsKICAgICAg
ICAgICAgIGhlYWRlckJ1ZmZlci5hcHBlbmQoJyAnKTsKLSAgICAgICAgICAgIGhlYWRlckJ1ZmZl
ci5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgICAgIGhlYWRlckJ1ZmZlci5hcHBlbmQoaXQt
PmtleSk7CiAgICAgICAgIH0KIAogICAgICAgICBwcmVmbGlnaHRSZXF1ZXN0LnNldEhUVFBIZWFk
ZXJGaWVsZCgiQWNjZXNzLUNvbnRyb2wtUmVxdWVzdC1IZWFkZXJzIiwgaGVhZGVyQnVmZmVyLnRv
U3RyaW5nKCkubG93ZXIoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jv
c3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
Q3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5jcHAKaW5kZXggMDRkNTg4MTU1Y2U1NTMz
YmRkZDNmMDJiM2JkODE1ZWQ5ZWUzOTllYi4uOWQ1MWM4N2ZlNmM0ZTdkNDM5MzNlNDVlZWY3ZDVj
MTliZDVlMjA4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2lu
UHJlZmxpZ2h0UmVzdWx0Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9z
c09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmNwcApAQCAtMTI1LDggKzEyNSw4IEBAIGJvb2wg
Q3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZUl0ZW06OmFsbG93c0Nyb3NzT3JpZ2luSGVh
ZGVycyhjb25zdCBIVFRQSGVhCiB7CiAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gcmVxdWVzdEhlYWRlcnMuZW5kKCk7CiAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IHJlcXVlc3RIZWFkZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewotICAgICAgICBpZiAoIW1faGVhZGVycy5jb250YWlucyhpdC0+Zmlyc3QpICYmICFpc09uQWNj
ZXNzQ29udHJvbFNpbXBsZVJlcXVlc3RIZWFkZXJXaGl0ZWxpc3QoaXQtPmZpcnN0LCBpdC0+c2Vj
b25kKSkgewotICAgICAgICAgICAgZXJyb3JEZXNjcmlwdGlvbiA9ICJSZXF1ZXN0IGhlYWRlciBm
aWVsZCAiICsgaXQtPmZpcnN0LnN0cmluZygpICsgIiBpcyBub3QgYWxsb3dlZCBieSBBY2Nlc3Mt
Q29udHJvbC1BbGxvdy1IZWFkZXJzLiI7CisgICAgICAgIGlmICghbV9oZWFkZXJzLmNvbnRhaW5z
KGl0LT5rZXkpICYmICFpc09uQWNjZXNzQ29udHJvbFNpbXBsZVJlcXVlc3RIZWFkZXJXaGl0ZWxp
c3QoaXQtPmtleSwgaXQtPnZhbHVlKSkgeworICAgICAgICAgICAgZXJyb3JEZXNjcmlwdGlvbiA9
ICJSZXF1ZXN0IGhlYWRlciBmaWVsZCAiICsgaXQtPmtleS5zdHJpbmcoKSArICIgaXMgbm90IGFs
bG93ZWQgYnkgQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVycy4iOwogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQpAQCAtMTY3LDcgKzE2Nyw3IEBAIGJvb2wgQ3Jv
c3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZTo6Y2FuU2tpcFByZWZsaWdodChjb25zdCBTdHJp
bmcmIG9yaWdpbiwgY29uCiAgICAgaWYgKGNhY2hlSXQgPT0gbV9wcmVmbGlnaHRIYXNoTWFwLmVu
ZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoY2FjaGVJdC0+c2Vjb25kLT5h
bGxvd3NSZXF1ZXN0KGluY2x1ZGVDcmVkZW50aWFscywgbWV0aG9kLCByZXF1ZXN0SGVhZGVycykp
CisgICAgaWYgKGNhY2hlSXQtPnZhbHVlLT5hbGxvd3NSZXF1ZXN0KGluY2x1ZGVDcmVkZW50aWFs
cywgbWV0aG9kLCByZXF1ZXN0SGVhZGVycykpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAg
bV9wcmVmbGlnaHRIYXNoTWFwLnJlbW92ZShjYWNoZUl0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
RG9jdW1lbnRMb2FkZXIuY3BwCmluZGV4IGVhNjliZjUyZjg4MzM3NTlmYjk4ODJjYzY3OGMyMDI5
NzRkOTkzNDguLjEzOTJhMjUwNjhhZWE0YjU0NWMzYjY5YzM4Y2E4YmM2NDIxNTNlODQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcApAQCAtNjE1LDcgKzYxNSw3IEBA
IHZvaWQgRG9jdW1lbnRMb2FkZXI6OmdldFN1YnJlc291cmNlcyhWZWN0b3I8UGFzc1JlZlB0cjxB
cmNoaXZlUmVzb3VyY2U+ID4mIHN1YnJlCiAgICAgY29uc3QgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6
OkRvY3VtZW50UmVzb3VyY2VNYXAmIGFsbFJlc291cmNlcyA9IGRvY3VtZW50LT5jYWNoZWRSZXNv
dXJjZUxvYWRlcigpLT5hbGxDYWNoZWRSZXNvdXJjZXMoKTsKICAgICBDYWNoZWRSZXNvdXJjZUxv
YWRlcjo6RG9jdW1lbnRSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gYWxsUmVzb3Vy
Y2VzLmVuZCgpOwogICAgIGZvciAoQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OkRvY3VtZW50UmVzb3Vy
Y2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYWxsUmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewotICAgICAgICBSZWZQdHI8QXJjaGl2ZVJlc291cmNlPiBzdWJyZXNvdXJjZSA9
IHRoaXMtPnN1YnJlc291cmNlKEtVUkwoUGFyc2VkVVJMU3RyaW5nLCBpdC0+c2Vjb25kLT51cmwo
KSkpOworICAgICAgICBSZWZQdHI8QXJjaGl2ZVJlc291cmNlPiBzdWJyZXNvdXJjZSA9IHRoaXMt
PnN1YnJlc291cmNlKEtVUkwoUGFyc2VkVVJMU3RyaW5nLCBpdC0+dmFsdWUtPnVybCgpKSk7CiAg
ICAgICAgIGlmIChzdWJyZXNvdXJjZSkKICAgICAgICAgICAgIHN1YnJlc291cmNlcy5hcHBlbmQo
c3VicmVzb3VyY2UucmVsZWFzZSgpKTsKICAgICB9CkBAIC02NDcsOCArNjQ3LDggQEAgdm9pZCBE
b2N1bWVudExvYWRlcjo6c3Vic3RpdHV0ZVJlc291cmNlRGVsaXZlcnlUaW1lckZpcmVkKFRpbWVy
PERvY3VtZW50TG9hZGVyPioKIAogICAgIFN1YnN0aXR1dGVSZXNvdXJjZU1hcDo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gY29weS5lbmQoKTsKICAgICBmb3IgKFN1YnN0aXR1dGVSZXNvdXJjZU1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBjb3B5LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAg
ICAgICBSZWZQdHI8UmVzb3VyY2VMb2FkZXI+IGxvYWRlciA9IGl0LT5maXJzdDsKLSAgICAgICAg
U3Vic3RpdHV0ZVJlc291cmNlKiByZXNvdXJjZSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAg
IFJlZlB0cjxSZXNvdXJjZUxvYWRlcj4gbG9hZGVyID0gaXQtPmtleTsKKyAgICAgICAgU3Vic3Rp
dHV0ZVJlc291cmNlKiByZXNvdXJjZSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgCiAgICAg
ICAgIGlmIChyZXNvdXJjZSkgewogICAgICAgICAgICAgU2hhcmVkQnVmZmVyKiBkYXRhID0gcmVz
b3VyY2UtPmRhdGEoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9NYWluUmVz
b3VyY2VMb2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL01haW5SZXNvdXJjZUxvYWRl
ci5jcHAKaW5kZXggMDgzNmQ4Y2MwMGU4OTA1OGU5ODMyM2JiNmQ2MDY0NTNmY2U5YzUzNy4uMzM1
MmU2NDM2YTZhNWY2MWM5NmE5ODIwZjE5MzcyNjZiZTE2MWQ2NSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvbG9hZGVyL01haW5SZXNvdXJjZUxvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvbG9hZGVyL01haW5SZXNvdXJjZUxvYWRlci5jcHAKQEAgLTM2OCw3ICszNjgsNyBAQCB2b2lk
IE1haW5SZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVz
cG9uc2UmIHIpCiAKICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHIuaHR0
cEhlYWRlckZpZWxkcygpLmZpbmQoQXRvbWljU3RyaW5nKCJ4LWZyYW1lLW9wdGlvbnMiKSk7CiAg
ICAgaWYgKGl0ICE9IHIuaHR0cEhlYWRlckZpZWxkcygpLmVuZCgpKSB7Ci0gICAgICAgIFN0cmlu
ZyBjb250ZW50ID0gaXQtPnNlY29uZDsKKyAgICAgICAgU3RyaW5nIGNvbnRlbnQgPSBpdC0+dmFs
dWU7CiAgICAgICAgIGlmIChtX2ZyYW1lLT5sb2FkZXIoKS0+c2hvdWxkSW50ZXJydXB0TG9hZEZv
clhGcmFtZU9wdGlvbnMoY29udGVudCwgci51cmwoKSkpIHsKICAgICAgICAgICAgIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6Y29udGludWVBZnRlclhGcmFtZU9wdGlvbnNEZW5pZWQobV9mcmFt
ZS5nZXQoKSwgZG9jdW1lbnRMb2FkZXIoKSwgaWRlbnRpZmllcigpLCByKTsKICAgICAgICAgICAg
IERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBjb25zb2xlTWVzc2FnZSwgKCJSZWZ1c2VkIHRv
IGRpc3BsYXkgZG9jdW1lbnQgYmVjYXVzZSBkaXNwbGF5IGZvcmJpZGRlbiBieSBYLUZyYW1lLU9w
dGlvbnMuXG4iKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VM
b2FkU2NoZWR1bGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTY2hl
ZHVsZXIuY3BwCmluZGV4IDgwMDRkOGYyZWIyZDhiYzM2MDZhMDY5ZmM3ZWVhMzUxYWZjZmNkYWEu
LjhlYjQ0ZDQ5ZDI5YTY4NDY2NGQ4MzI1Y2EyNjFmNTc1YzY0MTBiNjMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCkBAIC0xNzQsNyArMTc0
LDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNlcnZlUGVuZGluZ1JlcXVlc3RzKFJl
c291cmNlTG9hZFByaW9yaXR5IG1pbmltdW1QcmkKICAgICBtX2hvc3RzLmNoZWNrQ29uc2lzdGVu
Y3koKTsKICAgICBIb3N0TWFwOjppdGVyYXRvciBlbmQgPSBtX2hvc3RzLmVuZCgpOwogICAgIGZv
ciAoSG9zdE1hcDo6aXRlcmF0b3IgaXRlciA9IG1faG9zdHMuYmVnaW4oKTsgaXRlciAhPSBlbmQ7
ICsraXRlcikKLSAgICAgICAgaG9zdHNUb1NlcnZlLmFwcGVuZChpdGVyLT5zZWNvbmQpOworICAg
ICAgICBob3N0c1RvU2VydmUuYXBwZW5kKGl0ZXItPnZhbHVlKTsKIAogICAgIGludCBzaXplID0g
aG9zdHNUb1NlcnZlLnNpemUoKTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9u
Q2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2Fj
aGUuY3BwCmluZGV4IDYzY2Q3YmJiZmE4Nzg5ZjRhZGIzZGY1MmNiNGU5YzE3ZGQ3MTU5NDQuLmI3
ZWE2NTI0YzQwMzk3NWZmMGRmOTQ2YTJmMGQwMTFjYjE3MDBhNmEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZS5jcHAKQEAgLTEwMCwx
MSArMTAwLDExIEBAIHVuc2lnbmVkIEFwcGxpY2F0aW9uQ2FjaGU6OnJlbW92ZVJlc291cmNlKGNv
bnN0IFN0cmluZyYgdXJsKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIC8vIFRoZSByZXNvdXJj
ZSBleGlzdHMsIGdldCBpdHMgdHlwZSBzbyB3ZSBjYW4gcmV0dXJuIGl0LgotICAgIHVuc2lnbmVk
IHR5cGUgPSBpdC0+c2Vjb25kLT50eXBlKCk7CisgICAgdW5zaWduZWQgdHlwZSA9IGl0LT52YWx1
ZS0+dHlwZSgpOwogCiAgICAgbV9yZXNvdXJjZXMucmVtb3ZlKGl0KTsKIAotICAgIG1fZXN0aW1h
dGVkU2l6ZUluU3RvcmFnZSAtPSBpdC0+c2Vjb25kLT5lc3RpbWF0ZWRTaXplSW5TdG9yYWdlKCk7
CisgICAgbV9lc3RpbWF0ZWRTaXplSW5TdG9yYWdlIC09IGl0LT52YWx1ZS0+ZXN0aW1hdGVkU2l6
ZUluU3RvcmFnZSgpOwogCiAgICAgcmV0dXJuIHR5cGU7CiB9ICAgIApAQCAtMTgwLDcgKzE4MCw3
IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZTo6Y2xlYXJTdG9yYWdlSUQoKQogICAgIAogICAgIFJl
c291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3Jlc291cmNlcy5lbmQoKTsKICAgICBm
b3IgKFJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+Y2xlYXJTdG9yYWdlSUQoKTsK
KyAgICAgICAgaXQtPnZhbHVlLT5jbGVhclN0b3JhZ2VJRCgpOwogfQogICAgIAogdm9pZCBBcHBs
aWNhdGlvbkNhY2hlOjpkZWxldGVDYWNoZUZvck9yaWdpbihTZWN1cml0eU9yaWdpbiogb3JpZ2lu
KQpAQCAtMjE4LDggKzIxOCw4IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZTo6ZHVtcCgpCiAgICAg
SGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+ID46OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IG1fcmVzb3VyY2VzLmVuZCgpOwogICAgIAogICAgIGZvciAoSGFzaE1h
cDxTdHJpbmcsIFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+ID46OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV9yZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAg
IHByaW50ZigiJXMgIiwgaXQtPmZpcnN0LmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgQXBwbGlj
YXRpb25DYWNoZVJlc291cmNlOjpkdW1wVHlwZShpdC0+c2Vjb25kLT50eXBlKCkpOworICAgICAg
ICBwcmludGYoIiVzICIsIGl0LT5rZXkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICBBcHBsaWNh
dGlvbkNhY2hlUmVzb3VyY2U6OmR1bXBUeXBlKGl0LT52YWx1ZS0+dHlwZSgpKTsKICAgICB9CiB9
CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBs
aWNhdGlvbkNhY2hlR3JvdXAuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0Fw
cGxpY2F0aW9uQ2FjaGVHcm91cC5jcHAKaW5kZXggOTIwODJjNTZiZTExYzlkYzI1ODUwZjdhOTRi
YzI3OTNiNzdmNWY1Zi4uMjczYTYwMTBkODI1NWZiOTRhYTYwNTFiOTJmNjkyYjQ4ODM3Yzk5NiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2Fj
aGVHcm91cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0
aW9uQ2FjaGVHcm91cC5jcHAKQEAgLTc3Nyw5ICs3NzcsOSBAQCB2b2lkIEFwcGxpY2F0aW9uQ2Fj
aGVHcm91cDo6ZGlkRmluaXNoTG9hZGluZ01hbmlmZXN0KCkKICAgICBpZiAoaXNVcGdyYWRlQXR0
ZW1wdCkgewogICAgICAgICBBcHBsaWNhdGlvbkNhY2hlOjpSZXNvdXJjZU1hcDo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gbV9uZXdlc3RDYWNoZS0+ZW5kKCk7CiAgICAgICAgIGZvciAoQXBwbGljYXRp
b25DYWNoZTo6UmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9uZXdlc3RDYWNoZS0+
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCB0eXBlID0g
aXQtPnNlY29uZC0+dHlwZSgpOworICAgICAgICAgICAgdW5zaWduZWQgdHlwZSA9IGl0LT52YWx1
ZS0+dHlwZSgpOwogICAgICAgICAgICAgaWYgKHR5cGUgJiBBcHBsaWNhdGlvbkNhY2hlUmVzb3Vy
Y2U6Ok1hc3RlcikKLSAgICAgICAgICAgICAgICBhZGRFbnRyeShpdC0+Zmlyc3QsIHR5cGUpOwor
ICAgICAgICAgICAgICAgIGFkZEVudHJ5KGl0LT5rZXksIHR5cGUpOwogICAgICAgICB9CiAgICAg
fQogICAgIApAQCAtMTAxOCw3ICsxMDE4LDcgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6
OnN0YXJ0TG9hZGluZ0VudHJ5KCkKIAogICAgIEFTU0VSVCghbV9jdXJyZW50SGFuZGxlKTsKICAg
ICAKLSAgICBtX2N1cnJlbnRIYW5kbGUgPSBjcmVhdGVSZXNvdXJjZUhhbmRsZShLVVJMKFBhcnNl
ZFVSTFN0cmluZywgaXQtPmZpcnN0KSwgbV9uZXdlc3RDYWNoZSA/IG1fbmV3ZXN0Q2FjaGUtPnJl
c291cmNlRm9yVVJMKGl0LT5maXJzdCkgOiAwKTsKKyAgICBtX2N1cnJlbnRIYW5kbGUgPSBjcmVh
dGVSZXNvdXJjZUhhbmRsZShLVVJMKFBhcnNlZFVSTFN0cmluZywgaXQtPmtleSksIG1fbmV3ZXN0
Q2FjaGUgPyBtX25ld2VzdENhY2hlLT5yZXNvdXJjZUZvclVSTChpdC0+a2V5KSA6IDApOwogfQog
CiB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6ZGVsaXZlckRlbGF5ZWRNYWluUmVzb3VyY2Vz
KCkKQEAgLTEwNjcsNyArMTA2Nyw3IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjphZGRF
bnRyeShjb25zdCBTdHJpbmcmIHVybCwgdW5zaWduZWQgdHlwZSkKICAgICBFbnRyeU1hcDo6QWRk
UmVzdWx0IHJlc3VsdCA9IG1fcGVuZGluZ0VudHJpZXMuYWRkKHVybCwgdHlwZSk7CiAgICAgCiAg
ICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNv
bmQgfD0gdHlwZTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSB8PSB0eXBlOwogfQog
CiB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6YXNzb2NpYXRlRG9jdW1lbnRMb2FkZXJXaXRo
Q2FjaGUoRG9jdW1lbnRMb2FkZXIqIGxvYWRlciwgQXBwbGljYXRpb25DYWNoZSogY2FjaGUpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNo
ZUhvc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2Fj
aGVIb3N0LmNwcAppbmRleCA4MDFjMWIzNjcwMzFhMzM5ZGI0NDcwN2E5MmQxYmM4MGQ0MWQ4Yzc5
Li5mZTlmMDEwYTBmZTY1MDNkMGJjNWU1YjkyNzcwYTNmN2I2NDM0NGZkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUhvc3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlSG9zdC5j
cHAKQEAgLTI4Miw3ICsyODIsNyBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpmaWxsUmVz
b3VyY2VMaXN0KFJlc291cmNlSW5mb0xpc3QqIHJlc291cmNlcykKICAgICAgCiAgICAgQXBwbGlj
YXRpb25DYWNoZTo6UmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGNhY2hlLT5lbmQo
KTsKICAgICBmb3IgKEFwcGxpY2F0aW9uQ2FjaGU6OlJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IGNhY2hlLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgUmVmUHRy
PEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4gcmVzb3VyY2UgPSBpdC0+c2Vjb25kOworICAgICAg
ICBSZWZQdHI8QXBwbGljYXRpb25DYWNoZVJlc291cmNlPiByZXNvdXJjZSA9IGl0LT52YWx1ZTsK
ICAgICAgICAgdW5zaWduZWQgdHlwZSA9IHJlc291cmNlLT50eXBlKCk7CiAgICAgICAgIGJvb2wg
aXNNYXN0ZXIgICA9IHR5cGUgJiBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6Ok1hc3RlcjsKICAg
ICAgICAgYm9vbCBpc01hbmlmZXN0ID0gdHlwZSAmIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6
TWFuaWZlc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBw
bGljYXRpb25DYWNoZVJlc291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNo
ZS9BcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuY3BwCmluZGV4IGQ4MzE3ODRiNDE5NmFkZjM4MmNm
MzU1ZTBlZWYwMmQ2YTdhODA3OTAuLjk5NzY2ZTNhNjZiZDM2ZWI0MmZlZDJhOTI2OWQzNGIwNjYx
OTRkN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNh
dGlvbkNhY2hlUmVzb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNo
ZS9BcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuY3BwCkBAIC01NCw3ICs1NCw3IEBAIGludDY0X3Qg
QXBwbGljYXRpb25DYWNoZVJlc291cmNlOjplc3RpbWF0ZWRTaXplSW5TdG9yYWdlKCkKIAogICAg
IEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHJlc3BvbnNlKCkuaHR0cEhlYWRl
ckZpZWxkcygpLmVuZCgpOwogICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSByZXNwb25zZSgpLmh0dHBIZWFkZXJGaWVsZHMoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpCi0gICAgICAgIG1fZXN0aW1hdGVkU2l6ZUluU3RvcmFnZSArPSAoaXQtPmZpcnN0Lmxlbmd0
aCgpICsgaXQtPnNlY29uZC5sZW5ndGgoKSArIDIpICogc2l6ZW9mKFVDaGFyKTsKKyAgICAgICAg
bV9lc3RpbWF0ZWRTaXplSW5TdG9yYWdlICs9IChpdC0+a2V5Lmxlbmd0aCgpICsgaXQtPnZhbHVl
Lmxlbmd0aCgpICsgMikgKiBzaXplb2YoVUNoYXIpOwogCiAgICAgbV9lc3RpbWF0ZWRTaXplSW5T
dG9yYWdlICs9IHVybCgpLnN0cmluZygpLmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKTsKICAgICBt
X2VzdGltYXRlZFNpemVJblN0b3JhZ2UgKz0gc2l6ZW9mKGludCk7IC8vIHJlc3BvbnNlKCkubV9o
dHRwU3RhdHVzQ29kZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hl
L0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBj
YWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAKaW5kZXggNzc4ZTRlMzg4ODkxZDMzNDcy
MGNkMjE1MjU2ZDRkYWQzOWIyMmYxZC4uZDFjOTdlNGIyYWExNjA4ZmM5NDhlYTYzMmMyYmE2ZWQy
YTdlNTEzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxp
Y2F0aW9uQ2FjaGVTdG9yYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2Fj
aGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwCkBAIC0xMzcsOCArMTM3LDggQEAgQXBwbGlj
YXRpb25DYWNoZUdyb3VwKiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZmluZE9yQ3JlYXRlQ2Fj
aGVHcm91cChjb25zdCBLVVIKICAgICBDYWNoZUdyb3VwTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0g
bV9jYWNoZXNJbk1lbW9yeS5hZGQobWFuaWZlc3RVUkwsIDApOwogICAgIAogICAgIGlmICghcmVz
dWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgQVNTRVJUKHJlc3VsdC5pdGVyYXRvci0+c2Vjb25k
KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICBBU1NF
UlQocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CisgICAgICAgIHJldHVybiByZXN1bHQuaXRlcmF0
b3ItPnZhbHVlOwogICAgIH0KIAogICAgIC8vIExvb2sgdXAgdGhlIGdyb3VwIGluIHRoZSBkYXRh
YmFzZQpAQCAtMTUwLDcgKzE1MCw3IEBAIEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogQXBwbGljYXRp
b25DYWNoZVN0b3JhZ2U6OmZpbmRPckNyZWF0ZUNhY2hlR3JvdXAoY29uc3QgS1VSCiAgICAgICAg
IG1fY2FjaGVIb3N0U2V0LmFkZCh1cmxIb3N0SGFzaChtYW5pZmVzdFVSTCkpOwogICAgIH0KICAg
ICAKLSAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IGdyb3VwOworICAgIHJlc3VsdC5pdGVy
YXRvci0+dmFsdWUgPSBncm91cDsKICAgICAKICAgICByZXR1cm4gZ3JvdXA7CiB9CkBAIC0xOTcs
NyArMTk3LDcgQEAgQXBwbGljYXRpb25DYWNoZUdyb3VwKiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFn
ZTo6Y2FjaGVHcm91cEZvclVSTChjb25zdCBLVVJMJiB1cmwKICAgICAvLyBDaGVjayBpZiBhIGNh
Y2hlIGFscmVhZHkgZXhpc3RzIGluIG1lbW9yeS4KICAgICBDYWNoZUdyb3VwTWFwOjpjb25zdF9p
dGVyYXRvciBlbmQgPSBtX2NhY2hlc0luTWVtb3J5LmVuZCgpOwogICAgIGZvciAoQ2FjaGVHcm91
cE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2NhY2hlc0luTWVtb3J5LmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgewotICAgICAgICBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIGdyb3VwID0gaXQt
PnNlY29uZDsKKyAgICAgICAgQXBwbGljYXRpb25DYWNoZUdyb3VwKiBncm91cCA9IGl0LT52YWx1
ZTsKIAogICAgICAgICBBU1NFUlQoIWdyb3VwLT5pc09ic29sZXRlKCkpOwogCkBAIC0yNjgsNyAr
MjY4LDcgQEAgQXBwbGljYXRpb25DYWNoZUdyb3VwKiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6
ZmFsbGJhY2tDYWNoZUdyb3VwRm9yVVJMKGNvbnN0IEsKICAgICAvLyBDaGVjayBpZiBhbiBhcHBy
b3ByaWF0ZSBjYWNoZSBhbHJlYWR5IGV4aXN0cyBpbiBtZW1vcnkuCiAgICAgQ2FjaGVHcm91cE1h
cDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9jYWNoZXNJbk1lbW9yeS5lbmQoKTsKICAgICBmb3Ig
KENhY2hlR3JvdXBNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9jYWNoZXNJbk1lbW9yeS5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgQXBwbGljYXRpb25DYWNoZUdyb3VwKiBn
cm91cCA9IGl0LT5zZWNvbmQ7CisgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogZ3JvdXAg
PSBpdC0+dmFsdWU7CiAgICAgICAgIAogICAgICAgICBBU1NFUlQoIWdyb3VwLT5pc09ic29sZXRl
KCkpOwogCkBAIC03MTMsMTMgKzcxMywxMyBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdl
OjpzdG9yZShBcHBsaWNhdGlvbkNhY2hlKiBjYWNoZSwgUmVzb3VyY2VTdG9yYWdlSURKbwogICAg
IHsKICAgICAgICAgQXBwbGljYXRpb25DYWNoZTo6UmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IGNhY2hlLT5lbmQoKTsKICAgICAgICAgZm9yIChBcHBsaWNhdGlvbkNhY2hlOjpSZXNv
dXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjYWNoZS0+YmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBvbGRTdG9yYWdlSUQgPSBpdC0+c2Vjb25kLT5z
dG9yYWdlSUQoKTsKLSAgICAgICAgICAgIGlmICghc3RvcmUoaXQtPnNlY29uZC5nZXQoKSwgY2Fj
aGVTdG9yYWdlSUQpKQorICAgICAgICAgICAgdW5zaWduZWQgb2xkU3RvcmFnZUlEID0gaXQtPnZh
bHVlLT5zdG9yYWdlSUQoKTsKKyAgICAgICAgICAgIGlmICghc3RvcmUoaXQtPnZhbHVlLmdldCgp
LCBjYWNoZVN0b3JhZ2VJRCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
ICAgICAgICAvLyBTdG9yaW5nIHRoZSByZXNvdXJjZSBzdWNjZWVkZWQuIExvZyBpdHMgb2xkIHN0
b3JhZ2VJRCBpbiBjYXNlCiAgICAgICAgICAgICAvLyBpdCBuZWVkcyB0byBiZSByZXN0b3JlZCBs
YXRlci4KLSAgICAgICAgICAgIHN0b3JhZ2VJREpvdXJuYWwtPmFkZChpdC0+c2Vjb25kLmdldCgp
LCBvbGRTdG9yYWdlSUQpOworICAgICAgICAgICAgc3RvcmFnZUlESm91cm5hbC0+YWRkKGl0LT52
YWx1ZS5nZXQoKSwgb2xkU3RvcmFnZUlEKTsKICAgICAgICAgfQogICAgIH0KICAgICAKQEAgLTgz
OSw5ICs4MzksOSBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZShBcHBsaWNh
dGlvbkNhY2hlUmVzb3VyY2UqIHJlc291cmNlLCB1bnNpZ25lZAogICAgIAogICAgIEhUVFBIZWFk
ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHJlc291cmNlLT5yZXNwb25zZSgpLmh0dHBIZWFk
ZXJGaWVsZHMoKS5lbmQoKTsKICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gcmVzb3VyY2UtPnJlc3BvbnNlKCkuaHR0cEhlYWRlckZpZWxkcygpLmJlZ2luKCk7IGl0
IT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5maXJzdCk7
CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5rZXkpOwogICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZCgoVUNoYXIpJzonKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
aXQtPnNlY29uZCk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT52YWx1ZSk7CiAg
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKChVQ2hhciknXG4nKTsKICAgICB9CiAgICAgCkBA
IC0xMjQxLDcgKzEyNDEsNyBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjplbXB0eSgp
CiAgICAgLy8gdW50aWwgYSBjYWNoZSB1cGRhdGUgcHJvY2VzcyBoYXMgYmVlbiBpbml0aWF0ZWQu
CiAgICAgQ2FjaGVHcm91cE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9jYWNoZXNJbk1lbW9y
eS5lbmQoKTsKICAgICBmb3IgKENhY2hlR3JvdXBNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9j
YWNoZXNJbk1lbW9yeS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNv
bmQtPmNsZWFyU3RvcmFnZUlEKCk7CisgICAgICAgIGl0LT52YWx1ZS0+Y2xlYXJTdG9yYWdlSUQo
KTsKICAgICAKICAgICBjaGVja0ZvckRlbGV0ZWRSZXNvdXJjZXMoKTsKIH0KQEAgLTEzMDMsNyAr
MTMwMyw3IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlQ29weU9mQ2FjaGUo
Y29uc3QgU3RyaW5nJiBjYWNoZURpcmVjdG9yeSwgQXBwCiAgICAgLy8gVHJhdmVyc2UgdGhlIGNh
Y2hlIGFuZCBhZGQgY29waWVzIG9mIGFsbCByZXNvdXJjZXMuCiAgICAgQXBwbGljYXRpb25DYWNo
ZTo6UmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGNhY2hlLT5lbmQoKTsKICAgICBm
b3IgKEFwcGxpY2F0aW9uQ2FjaGU6OlJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGNh
Y2hlLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgQXBwbGljYXRpb25DYWNo
ZVJlc291cmNlKiByZXNvdXJjZSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIEFwcGxpY2F0
aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2UgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgIAog
ICAgICAgICBSZWZQdHI8QXBwbGljYXRpb25DYWNoZVJlc291cmNlPiByZXNvdXJjZUNvcHkgPSBB
cHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OmNyZWF0ZShyZXNvdXJjZS0+dXJsKCksIHJlc291cmNl
LT5yZXNwb25zZSgpLCByZXNvdXJjZS0+dHlwZSgpLCByZXNvdXJjZS0+ZGF0YSgpLCByZXNvdXJj
ZS0+cGF0aCgpKTsKICAgICAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
YXJjaGl2ZS9BcmNoaXZlRmFjdG9yeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2
ZS9BcmNoaXZlRmFjdG9yeS5jcHAKaW5kZXggZjY5NzBhYTUzMWI1ZTVhNjVjNWE2MDUyOWIxNWUw
NTQzODZjNDY1Zi4uY2QzODc2YWFlZmFjOTA0Y2I0Y2Q0OTBjNzI4ODkxZTAzODc1NjRkYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvQXJjaGl2ZUZhY3RvcnkuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL0FyY2hpdmVGYWN0b3J5LmNwcApA
QCAtOTUsNyArOTUsNyBAQCB2b2lkIEFyY2hpdmVGYWN0b3J5OjpyZWdpc3Rlcktub3duQXJjaGl2
ZU1JTUVUeXBlcygpCiAgICAgQXJjaGl2ZU1JTUVUeXBlc01hcDo6aXRlcmF0b3IgZW5kID0gYXJj
aGl2ZU1JTUVUeXBlcygpLmVuZCgpOwogCiAgICAgZm9yICg7IGkgIT0gZW5kOyArK2kpCi0gICAg
ICAgIG1pbWVUeXBlcy5hZGQoaS0+Zmlyc3QpOworICAgICAgICBtaW1lVHlwZXMuYWRkKGktPmtl
eSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZWRSYXdSZXNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmF3
UmVzb3VyY2UuY3BwCmluZGV4IDRlNDMxMzFiMWQyNTQ4MzcxZjcxNTc0ZjUxNTY1N2UzZDQyZDA4
NTQuLjEyODhmZTE3Y2YwOTNmYjQ0ZDFiYzQwYzY4Njk1MmEwMmE0ZjQwMjggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNlLmNwcApAQCAtMTUz
LDggKzE1Myw4IEBAIGJvb2wgQ2FjaGVkUmF3UmVzb3VyY2U6OmNhblJldXNlKGNvbnN0IFJlc291
cmNlUmVxdWVzdCYgbmV3UmVxdWVzdCkgY29uc3QKIAogICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IG5ld0hlYWRlcnMuZW5kKCk7CiAgICAgZm9yIChIVFRQSGVhZGVyTWFw
Ojpjb25zdF9pdGVyYXRvciBpID0gbmV3SGVhZGVycy5iZWdpbigpOyBpICE9IGVuZDsgKytpKSB7
Ci0gICAgICAgIEF0b21pY1N0cmluZyBoZWFkZXJOYW1lID0gaS0+Zmlyc3Q7Ci0gICAgICAgIGlm
IChpLT5zZWNvbmQgIT0gb2xkSGVhZGVycy5nZXQoaGVhZGVyTmFtZSkpCisgICAgICAgIEF0b21p
Y1N0cmluZyBoZWFkZXJOYW1lID0gaS0+a2V5OworICAgICAgICBpZiAoaS0+dmFsdWUgIT0gb2xk
SGVhZGVycy5nZXQoaGVhZGVyTmFtZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2Nh
Y2hlL0NhY2hlZFJlc291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZWRSZXNvdXJjZS5jcHAKaW5kZXggZDdhYmNhZTg0MGM3OTZkNjFhYjYzNjA0NWZkNWFmNWRkNzJj
NzkxNi4uYWRlOTgzZTg2NWU2NGI4N2NlMWMxMWM4MzVlZjQ3NWVkNmI3MTM3YiAxMDA3NTUKLS0t
IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwCkBAIC02MTIsOCAr
NjEyLDggQEAgdm9pZCBDYWNoZWRSZXNvdXJjZTo6c3dpdGNoQ2xpZW50c1RvUmV2YWxpZGF0ZWRS
ZXNvdXJjZSgpCiAgICAgVmVjdG9yPENhY2hlZFJlc291cmNlQ2xpZW50Kj4gY2xpZW50c1RvTW92
ZTsKICAgICBIYXNoQ291bnRlZFNldDxDYWNoZWRSZXNvdXJjZUNsaWVudCo+OjppdGVyYXRvciBl
bmQyID0gbV9jbGllbnRzLmVuZCgpOwogICAgIGZvciAoSGFzaENvdW50ZWRTZXQ8Q2FjaGVkUmVz
b3VyY2VDbGllbnQqPjo6aXRlcmF0b3IgaXQgPSBtX2NsaWVudHMuYmVnaW4oKTsgaXQgIT0gZW5k
MjsgKytpdCkgewotICAgICAgICBDYWNoZWRSZXNvdXJjZUNsaWVudCogY2xpZW50ID0gaXQtPmZp
cnN0OwotICAgICAgICB1bnNpZ25lZCBjb3VudCA9IGl0LT5zZWNvbmQ7CisgICAgICAgIENhY2hl
ZFJlc291cmNlQ2xpZW50KiBjbGllbnQgPSBpdC0+a2V5OworICAgICAgICB1bnNpZ25lZCBjb3Vu
dCA9IGl0LT52YWx1ZTsKICAgICAgICAgd2hpbGUgKGNvdW50KSB7CiAgICAgICAgICAgICBjbGll
bnRzVG9Nb3ZlLmFwcGVuZChjbGllbnQpOwogICAgICAgICAgICAgLS1jb3VudDsKQEAgLTY0Nyw5
ICs2NDcsOSBAQCB2b2lkIENhY2hlZFJlc291cmNlOjp1cGRhdGVSZXNwb25zZUFmdGVyUmV2YWxp
ZGF0aW9uKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHZhbAogICAgIEhUVFBIZWFkZXJNYXA6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IG5ld0hlYWRlcnMuZW5kKCk7CiAgICAgZm9yIChIVFRQSGVhZGVy
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG5ld0hlYWRlcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7CiAgICAgICAgIC8vIERvbid0IGFsbG93IDMwNCByZXNwb25zZSB0byB1cGRhdGUgY29u
dGVudCBoZWFkZXJzLCB0aGVzZSBjYW4ndCBjaGFuZ2UgYnV0IHNvbWUgc2VydmVycyBzZW5kIHdy
b25nIHZhbHVlcy4KLSAgICAgICAgaWYgKGl0LT5maXJzdC5zdGFydHNXaXRoKGNvbnRlbnRIZWFk
ZXJQcmVmaXgsIGZhbHNlKSkKKyAgICAgICAgaWYgKGl0LT5rZXkuc3RhcnRzV2l0aChjb250ZW50
SGVhZGVyUHJlZml4LCBmYWxzZSkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgbV9y
ZXNwb25zZS5zZXRIVFRQSGVhZGVyRmllbGQoaXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsKKyAgICAg
ICAgbV9yZXNwb25zZS5zZXRIVFRQSGVhZGVyRmllbGQoaXQtPmtleSwgaXQtPnZhbHVlKTsKICAg
ICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRS
ZXNvdXJjZUNsaWVudFdhbGtlci5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hl
ZFJlc291cmNlQ2xpZW50V2Fsa2VyLmgKaW5kZXggOGIzNzgwYjVlNjRiMjE0MzQ2Mjg5NmJkYTJh
NmEyNjVhNWE4YTA3NC4uNzkzM2IwYjgxNGM1MjEyNTZlMDc2MGY4NjFiNDMxMDk3Yjg5YjU5YyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlQ2xp
ZW50V2Fsa2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291
cmNlQ2xpZW50V2Fsa2VyLmgKQEAgLTQyLDcgKzQyLDcgQEAgcHVibGljOgogICAgICAgICBJdGVy
YXRvciBlbmQgPSBzZXQuZW5kKCk7CiAgICAgICAgIHNpemVfdCBjbGllbnRJbmRleCA9IDA7CiAg
ICAgICAgIGZvciAoSXRlcmF0b3IgY3VycmVudCA9IHNldC5iZWdpbigpOyBjdXJyZW50ICE9IGVu
ZDsgKytjdXJyZW50KQotICAgICAgICAgICAgbV9jbGllbnRWZWN0b3JbY2xpZW50SW5kZXgrK10g
PSBjdXJyZW50LT5maXJzdDsKKyAgICAgICAgICAgIG1fY2xpZW50VmVjdG9yW2NsaWVudEluZGV4
KytdID0gY3VycmVudC0+a2V5OwogICAgIH0KIAogICAgIFQqIG5leHQoKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAKaW5kZXgg
YjI1OGMwNTdmZjNhZjExMTk1ODBkZTFhZjYwODQwNTMyZjZhMGE3NS4uNTVjMjE0MmI5ZDEwZTA4
ZGU4ZWQwZWFlZjc1Nzk0NTFiYWRjNmU2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwCkBAIC0xMjYsNyArMTI2LDcgQEAg
Q2FjaGVkUmVzb3VyY2VMb2FkZXI6On5DYWNoZWRSZXNvdXJjZUxvYWRlcigpCiAgICAgY2xlYXJQ
cmVsb2FkcygpOwogICAgIERvY3VtZW50UmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fZG9j
dW1lbnRSZXNvdXJjZXMuZW5kKCk7CiAgICAgZm9yIChEb2N1bWVudFJlc291cmNlTWFwOjppdGVy
YXRvciBpdCA9IG1fZG9jdW1lbnRSZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQot
ICAgICAgICBpdC0+c2Vjb25kLT5zZXRPd25pbmdDYWNoZWRSZXNvdXJjZUxvYWRlcigwKTsKKyAg
ICAgICAgaXQtPnZhbHVlLT5zZXRPd25pbmdDYWNoZWRSZXNvdXJjZUxvYWRlcigwKTsKIAogICAg
IC8vIE1ha2Ugc3VyZSBubyByZXF1ZXN0cyBzdGlsbCBwb2ludCB0byB0aGlzIENhY2hlZFJlc291
cmNlTG9hZGVyCiAgICAgQVNTRVJUKG1fcmVxdWVzdENvdW50ID09IDApOwpAQCAtNDE5LDcgKzQx
OSw3IEBAIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJlc291cmNlPiBDYWNoZWRSZXNvdXJj
ZUxvYWRlcjo6cmVxdWVzdFJlc291cmNlKENhY2hlCiAgICAgaWYgKG1lbW9yeUNhY2hlKCktPmRp
c2FibGVkKCkpIHsKICAgICAgICAgRG9jdW1lbnRSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBt
X2RvY3VtZW50UmVzb3VyY2VzLmZpbmQodXJsLnN0cmluZygpKTsKICAgICAgICAgaWYgKGl0ICE9
IG1fZG9jdW1lbnRSZXNvdXJjZXMuZW5kKCkpIHsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNl
dE93bmluZ0NhY2hlZFJlc291cmNlTG9hZGVyKDApOworICAgICAgICAgICAgaXQtPnZhbHVlLT5z
ZXRPd25pbmdDYWNoZWRSZXNvdXJjZUxvYWRlcigwKTsKICAgICAgICAgICAgIG1fZG9jdW1lbnRS
ZXNvdXJjZXMucmVtb3ZlKGl0KTsKICAgICAgICAgfQogICAgIH0KQEAgLTYzMSw3ICs2MzEsNyBA
QCB2b2lkIENhY2hlZFJlc291cmNlTG9hZGVyOjpzZXRBdXRvTG9hZEltYWdlcyhib29sIGVuYWJs
ZSkKIAogICAgIERvY3VtZW50UmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fZG9jdW1lbnRS
ZXNvdXJjZXMuZW5kKCk7CiAgICAgZm9yIChEb2N1bWVudFJlc291cmNlTWFwOjppdGVyYXRvciBp
dCA9IG1fZG9jdW1lbnRSZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAg
ICAgIENhY2hlZFJlc291cmNlKiByZXNvdXJjZSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAg
IENhY2hlZFJlc291cmNlKiByZXNvdXJjZSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgaWYg
KHJlc291cmNlLT50eXBlKCkgPT0gQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3VyY2UpIHsKICAg
ICAgICAgICAgIENhY2hlZEltYWdlKiBpbWFnZSA9IGNvbnN0X2Nhc3Q8Q2FjaGVkSW1hZ2UqPihz
dGF0aWNfY2FzdDxjb25zdCBDYWNoZWRJbWFnZSo+KHJlc291cmNlKSk7CiAKQEAgLTY1MSw3ICs2
NTEsNyBAQCB2b2lkIENhY2hlZFJlc291cmNlTG9hZGVyOjpyZW1vdmVDYWNoZWRSZXNvdXJjZShD
YWNoZWRSZXNvdXJjZSogcmVzb3VyY2UpIGNvbnN0CiAjaWZuZGVmIE5ERUJVRwogICAgIERvY3Vt
ZW50UmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9kb2N1bWVudFJlc291cmNlcy5maW5kKHJl
c291cmNlLT51cmwoKSk7CiAgICAgaWYgKGl0ICE9IG1fZG9jdW1lbnRSZXNvdXJjZXMuZW5kKCkp
Ci0gICAgICAgIEFTU0VSVChpdC0+c2Vjb25kLmdldCgpID09IHJlc291cmNlKTsKKyAgICAgICAg
QVNTRVJUKGl0LT52YWx1ZS5nZXQoKSA9PSByZXNvdXJjZSk7CiAjZW5kaWYKICAgICBtX2RvY3Vt
ZW50UmVzb3VyY2VzLnJlbW92ZShyZXNvdXJjZS0+dXJsKCkpOwogfQpAQCAtNjg1LDkgKzY4NSw5
IEBAIHZvaWQgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmdhcmJhZ2VDb2xsZWN0RG9jdW1lbnRSZXNv
dXJjZXMoKQogICAgIFN0cmluZ1ZlY3RvciByZXNvdXJjZXNUb0RlbGV0ZTsKIAogICAgIGZvciAo
RG9jdW1lbnRSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX2RvY3VtZW50UmVzb3VyY2VzLmJl
Z2luKCk7IGl0ICE9IG1fZG9jdW1lbnRSZXNvdXJjZXMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAg
aWYgKGl0LT5zZWNvbmQtPmhhc09uZUhhbmRsZSgpKSB7Ci0gICAgICAgICAgICByZXNvdXJjZXNU
b0RlbGV0ZS5hcHBlbmQoaXQtPmZpcnN0KTsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNldE93
bmluZ0NhY2hlZFJlc291cmNlTG9hZGVyKDApOworICAgICAgICBpZiAoaXQtPnZhbHVlLT5oYXNP
bmVIYW5kbGUoKSkgeworICAgICAgICAgICAgcmVzb3VyY2VzVG9EZWxldGUuYXBwZW5kKGl0LT5r
ZXkpOworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRPd25pbmdDYWNoZWRSZXNvdXJjZUxvYWRl
cigwKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtODgzLDggKzg4Myw4IEBAIHZvaWQgQ2FjaGVk
UmVzb3VyY2VMb2FkZXI6OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9y
eU9iamVjdEluZm8pCiAgICAgTWVtb3J5Q2xhc3NJbmZvIGluZm8obWVtb3J5T2JqZWN0SW5mbywg
dGhpcywgTWVtb3J5SW5zdHJ1bWVudGF0aW9uOjpMb2FkZXIpOwogICAgIGluZm8uYWRkSGFzaE1h
cChtX2RvY3VtZW50UmVzb3VyY2VzKTsKICAgICBmb3IgKERvY3VtZW50UmVzb3VyY2VNYXA6OmNv
bnN0X2l0ZXJhdG9yIGkgPSBtX2RvY3VtZW50UmVzb3VyY2VzLmJlZ2luKCk7IGkgIT0gbV9kb2N1
bWVudFJlc291cmNlcy5lbmQoKTsgKytpKSB7Ci0gICAgICAgIGluZm8uYWRkSW5zdHJ1bWVudGVk
TWVtYmVyKGktPmZpcnN0KTsKLSAgICAgICAgaW5mby5hZGRJbnN0cnVtZW50ZWRNZW1iZXIoaS0+
c2Vjb25kKTsKKyAgICAgICAgaW5mby5hZGRJbnN0cnVtZW50ZWRNZW1iZXIoaS0+a2V5KTsKKyAg
ICAgICAgaW5mby5hZGRJbnN0cnVtZW50ZWRNZW1iZXIoaS0+dmFsdWUpOwogICAgIH0KICAgICBp
bmZvLmFkZEhhc2hTZXQobV92YWxpZGF0ZWRVUkxzKTsKICAgICBpZiAobV9wcmVsb2FkcykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuY3BwCmluZGV4IDY2MTExZDcz
ZjdkMWZiMDEyMTk1NmFlYWZkMTAzN2FkYmQyOGIwMTEuLmMzODg2YTQwZThhNmVlY2U5MTllZTU5
NTUyMjJkOWE0ODk2NWIyNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNo
ZS9NZW1vcnlDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL01lbW9y
eUNhY2hlLmNwcApAQCAtNTQwLDcgKzU0MCw3IEBAIHZvaWQgTWVtb3J5Q2FjaGU6OnJlbW92ZVJl
c291cmNlc1dpdGhPcmlnaW4oU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKIAogICAgIENhY2hlZFJl
c291cmNlTWFwOjppdGVyYXRvciBlID0gbV9yZXNvdXJjZXMuZW5kKCk7CiAgICAgZm9yIChDYWNo
ZWRSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSBl
OyArK2l0KSB7Ci0gICAgICAgIENhY2hlZFJlc291cmNlKiByZXNvdXJjZSA9IGl0LT5zZWNvbmQ7
CisgICAgICAgIENhY2hlZFJlc291cmNlKiByZXNvdXJjZSA9IGl0LT52YWx1ZTsKICAgICAgICAg
UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiByZXNvdXJjZU9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpj
cmVhdGVGcm9tU3RyaW5nKHJlc291cmNlLT51cmwoKSk7CiAgICAgICAgIGlmICghcmVzb3VyY2VP
cmlnaW4pCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTU1Niw3ICs1NTYsNyBAQCB2b2lkIE1l
bW9yeUNhY2hlOjpnZXRPcmlnaW5zV2l0aENhY2hlKFNlY3VyaXR5T3JpZ2luU2V0JiBvcmlnaW5z
KQogewogICAgIENhY2hlZFJlc291cmNlTWFwOjppdGVyYXRvciBlID0gbV9yZXNvdXJjZXMuZW5k
KCk7CiAgICAgZm9yIChDYWNoZWRSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNl
cy5iZWdpbigpOyBpdCAhPSBlOyArK2l0KQotICAgICAgICBvcmlnaW5zLmFkZChTZWN1cml0eU9y
aWdpbjo6Y3JlYXRlRnJvbVN0cmluZyhpdC0+c2Vjb25kLT51cmwoKSkpOworICAgICAgICBvcmln
aW5zLmFkZChTZWN1cml0eU9yaWdpbjo6Y3JlYXRlRnJvbVN0cmluZyhpdC0+dmFsdWUtPnVybCgp
KSk7CiB9CiAKIHZvaWQgTWVtb3J5Q2FjaGU6OnJlbW92ZUZyb21MaXZlRGVjb2RlZFJlc291cmNl
c0xpc3QoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlKQpAQCAtNjg5LDcgKzY4OSw3IEBAIE1lbW9y
eUNhY2hlOjpTdGF0aXN0aWNzIE1lbW9yeUNhY2hlOjpnZXRTdGF0aXN0aWNzKCkKICAgICBTdGF0
aXN0aWNzIHN0YXRzOwogICAgIENhY2hlZFJlc291cmNlTWFwOjppdGVyYXRvciBlID0gbV9yZXNv
dXJjZXMuZW5kKCk7CiAgICAgZm9yIChDYWNoZWRSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaSA9IG1f
cmVzb3VyY2VzLmJlZ2luKCk7IGkgIT0gZTsgKytpKSB7Ci0gICAgICAgIENhY2hlZFJlc291cmNl
KiByZXNvdXJjZSA9IGktPnNlY29uZDsKKyAgICAgICAgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNl
ID0gaS0+dmFsdWU7CiAgICAgICAgIHN3aXRjaCAocmVzb3VyY2UtPnR5cGUoKSkgewogICAgICAg
ICBjYXNlIENhY2hlZFJlc291cmNlOjpJbWFnZVJlc291cmNlOgogICAgICAgICAgICAgc3RhdHMu
aW1hZ2VzLmFkZFJlc291cmNlKHJlc291cmNlKTsKQEAgLTcyMSw4ICs3MjEsOCBAQCB2b2lkIE1l
bW9yeUNhY2hlOjpyZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmpl
Y3RJbmZvKSBjb25zdAogICAgIGluZm8uYWRkSGFzaE1hcChtX3Jlc291cmNlcyk7CiAgICAgQ2Fj
aGVkUmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGUgPSBtX3Jlc291cmNlcy5lbmQoKTsKICAg
ICBmb3IgKENhY2hlZFJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBpID0gbV9yZXNvdXJjZXMu
YmVnaW4oKTsgaSAhPSBlOyArK2kpIHsKLSAgICAgICAgaW5mby5hZGRJbnN0cnVtZW50ZWRNZW1i
ZXIoaS0+Zmlyc3QpOwotICAgICAgICBpbmZvLmFkZEluc3RydW1lbnRlZE1lbWJlcihpLT5zZWNv
bmQpOworICAgICAgICBpbmZvLmFkZEluc3RydW1lbnRlZE1lbWJlcihpLT5rZXkpOworICAgICAg
ICBpbmZvLmFkZEluc3RydW1lbnRlZE1lbWJlcihpLT52YWx1ZSk7CiAgICAgfQogICAgIGluZm8u
YWRkVmVjdG9yKG1fYWxsUmVzb3VyY2VzKTsKICAgICBpbmZvLmFkZE1lbWJlcihtX2xpdmVEZWNv
ZGVkUmVzb3VyY2VzKTsKQEAgLTczOCw3ICs3MzgsNyBAQCB2b2lkIE1lbW9yeUNhY2hlOjpzZXRE
aXNhYmxlZChib29sIGRpc2FibGVkKQogICAgICAgICBDYWNoZWRSZXNvdXJjZU1hcDo6aXRlcmF0
b3IgaSA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7CiAgICAgICAgIGlmIChpID09IG1fcmVzb3VyY2Vz
LmVuZCgpKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGV2aWN0KGktPnNlY29uZCk7Cisg
ICAgICAgIGV2aWN0KGktPnZhbHVlKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvaWNvbi9JY29uRGF0YWJhc2UuY3BwCmluZGV4IDcxMDY0OGY5NGFkZTFmZDYyMGRkZGVhZGI2
MDc2ZWJlNWU1MTBiMjIuLmRiMDgzM2UxZWM0NzgzZDYzOWY4YjU1NWUyOWQwNGNkOWVkZmVlNTkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFzZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmNwcApAQCAtMTky
LDcgKzE5Miw3IEBAIHZvaWQgSWNvbkRhdGFiYXNlOjpyZW1vdmVBbGxJY29ucygpCiAgICAgICAg
IEhhc2hNYXA8U3RyaW5nLCBQYWdlVVJMUmVjb3JkKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX3BhZ2VV
UkxUb1JlY29yZE1hcC5iZWdpbigpOwogICAgICAgICBIYXNoTWFwPFN0cmluZywgUGFnZVVSTFJl
Y29yZCo+OjppdGVyYXRvciBlbmQgPSBtX3BhZ2VVUkxUb1JlY29yZE1hcC5lbmQoKTsKICAgICAg
ICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCi0gICAgICAgICAgICAoKml0ZXIpLnNlY29u
ZC0+c2V0SWNvblJlY29yZCgwKTsKKyAgICAgICAgICAgICgqaXRlcikudmFsdWUtPnNldEljb25S
ZWNvcmQoMCk7CiAgICAgICAgICAgICAKICAgICAgICAgLy8gQ2xlYXIgdGhlIGljb25VUkwgLT4g
SWNvblJlY29yZCBtYXAKICAgICAgICAgbV9pY29uVVJMVG9SZWNvcmRNYXAuY2xlYXIoKTsKQEAg
LTc4NSw3ICs3ODUsNyBAQCBzaXplX3QgSWNvbkRhdGFiYXNlOjppY29uUmVjb3JkQ291bnRXaXRo
RGF0YSgpCiAgICAgSGFzaE1hcDxTdHJpbmcsIEljb25SZWNvcmQqPjo6aXRlcmF0b3IgZW5kID0g
bV9pY29uVVJMVG9SZWNvcmRNYXAuZW5kKCk7CiAgICAgCiAgICAgZm9yICg7IGkgIT0gZW5kOyAr
K2kpCi0gICAgICAgIHJlc3VsdCArPSAoKCppKS5zZWNvbmQtPmltYWdlRGF0YVN0YXR1cygpID09
IEltYWdlRGF0YVN0YXR1c1ByZXNlbnQpOworICAgICAgICByZXN1bHQgKz0gKCgqaSkudmFsdWUt
PmltYWdlRGF0YVN0YXR1cygpID09IEltYWdlRGF0YVN0YXR1c1ByZXNlbnQpOwogICAgICAgICAg
ICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTE1NTYsMTMgKzE1NTYsMTMgQEAgdm9pZCBJ
Y29uRGF0YWJhc2U6OnBlcmZvcm1QZW5kaW5nUmV0YWluQW5kUmVsZWFzZU9wZXJhdGlvbnMoKQog
ICAgIH0KIAogICAgIGZvciAoSGFzaENvdW50ZWRTZXQ8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSB0b1JldGFpbi5iZWdpbigpLCBlbmQgPSB0b1JldGFpbi5lbmQoKTsgaXQgIT0gZW5kOyAr
K2l0KSB7Ci0gICAgICAgIEFTU0VSVCghaXQtPmZpcnN0LmltcGwoKSB8fCBpdC0+Zmlyc3QuaW1w
bCgpLT5oYXNPbmVSZWYoKSk7Ci0gICAgICAgIHBlcmZvcm1SZXRhaW5JY29uRm9yUGFnZVVSTChp
dC0+Zmlyc3QsIGl0LT5zZWNvbmQpOworICAgICAgICBBU1NFUlQoIWl0LT5rZXkuaW1wbCgpIHx8
IGl0LT5rZXkuaW1wbCgpLT5oYXNPbmVSZWYoKSk7CisgICAgICAgIHBlcmZvcm1SZXRhaW5JY29u
Rm9yUGFnZVVSTChpdC0+a2V5LCBpdC0+dmFsdWUpOwogICAgIH0KIAogICAgIGZvciAoSGFzaENv
dW50ZWRTZXQ8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSB0b1JlbGVhc2UuYmVnaW4oKSwg
ZW5kID0gdG9SZWxlYXNlLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgQVNTRVJU
KCFpdC0+Zmlyc3QuaW1wbCgpIHx8IGl0LT5maXJzdC5pbXBsKCktPmhhc09uZVJlZigpKTsKLSAg
ICAgICAgcGVyZm9ybVJlbGVhc2VJY29uRm9yUGFnZVVSTChpdC0+Zmlyc3QsIGl0LT5zZWNvbmQp
OworICAgICAgICBBU1NFUlQoIWl0LT5rZXkuaW1wbCgpIHx8IGl0LT5rZXkuaW1wbCgpLT5oYXNP
bmVSZWYoKSk7CisgICAgICAgIHBlcmZvcm1SZWxlYXNlSWNvbkZvclBhZ2VVUkwoaXQtPmtleSwg
aXQtPnZhbHVlKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RE9NV2luZG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAppbmRleCBk
Nzg3YTY1YmQ2ZDgwYzU1MGY4ZDEyYTBkNGYxMzFmNzg2MWQxN2FkLi42Yzg4OWZhYTM4MzM3NmJl
NWRhNzI3NDMxZjc3YzQzMzUyMGJjOWI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0RPTVdpbmRvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCkBA
IC0yNDgsNyArMjQ4LDcgQEAgYm9vbCBET01XaW5kb3c6OmRpc3BhdGNoQWxsUGVuZGluZ0JlZm9y
ZVVubG9hZEV2ZW50cygpCiAgICAgVmVjdG9yPFJlZlB0cjxET01XaW5kb3c+ID4gd2luZG93czsK
ICAgICBET01XaW5kb3dTZXQ6Oml0ZXJhdG9yIGVuZCA9IHNldC5lbmQoKTsKICAgICBmb3IgKERP
TVdpbmRvd1NldDo6aXRlcmF0b3IgaXQgPSBzZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQot
ICAgICAgICB3aW5kb3dzLmFwcGVuZChpdC0+Zmlyc3QpOworICAgICAgICB3aW5kb3dzLmFwcGVu
ZChpdC0+a2V5KTsKIAogICAgIHNpemVfdCBzaXplID0gd2luZG93cy5zaXplKCk7CiAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKQEAgLTI5MCw3ICsyOTAsNyBAQCB2b2lk
IERPTVdpbmRvdzo6ZGlzcGF0Y2hBbGxQZW5kaW5nVW5sb2FkRXZlbnRzKCkKICAgICBWZWN0b3I8
UmVmUHRyPERPTVdpbmRvdz4gPiB3aW5kb3dzOwogICAgIERPTVdpbmRvd1NldDo6aXRlcmF0b3Ig
ZW5kID0gc2V0LmVuZCgpOwogICAgIGZvciAoRE9NV2luZG93U2V0OjppdGVyYXRvciBpdCA9IHNl
dC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHdpbmRvd3MuYXBwZW5kKGl0LT5m
aXJzdCk7CisgICAgICAgIHdpbmRvd3MuYXBwZW5kKGl0LT5rZXkpOwogCiAgICAgc2l6ZV90IHNp
emUgPSB3aW5kb3dzLnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsr
aSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4IDk1N2FkYTM0MDE0MDVl
MjYzMzBkZDQyZDViNDU3NWVmMjlkNjY1YWQuLjdlNWRlNTA3MTk0ZDRlYjJhNTkzNzM2ZGU5NmNm
OTU0NjczODFiZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKQEAgLTM2Mzcs
NyArMzYzNyw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBs
YXRmb3JtVG91Y2hFdmVudCYgZXZlbnQpCiAgICAgICAgIC8vIHJlbGVhc2VkIG9yIGNhbmNlbGxl
ZCBpdCB3aWxsIG9ubHkgYXBwZWFyIGluIHRoZSBjaGFuZ2VkVG91Y2hlcyBsaXN0LgogICAgICAg
ICBpZiAocG9pbnRTdGF0ZSAhPSBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoUmVsZWFzZWQgJiYg
cG9pbnRTdGF0ZSAhPSBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoQ2FuY2VsbGVkKSB7CiAgICAg
ICAgICAgICB0b3VjaGVzLT5hcHBlbmQodG91Y2gpOwotICAgICAgICAgICAgdGFyZ2V0VG91Y2hl
c0l0ZXJhdG9yLT5zZWNvbmQtPmFwcGVuZCh0b3VjaCk7CisgICAgICAgICAgICB0YXJnZXRUb3Vj
aGVzSXRlcmF0b3ItPnZhbHVlLT5hcHBlbmQodG91Y2gpOwogICAgICAgICB9CiAKICAgICAgICAg
Ly8gTm93IGJ1aWxkIHVwIHRoZSBjb3JyZWN0IGxpc3QgZm9yIGNoYW5nZWRUb3VjaGVzLgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0ZyYW1lLmNwcAppbmRleCAxODc0ZGRlZjJlMWQxNjQ0Njg1ZmEyMGYxOTkwNDE3NTQyZWYz
OTgyLi5lOGE4NTllODZkODI1NGE1MDViMDk2OWVlNDYzOGFkZDRjMTg4OTQ2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0ZyYW1lLmNwcApAQCAtNTgwLDcgKzU4MCw3IEBAIHZvaWQgRnJhbWU6OmluamVjdFVzZXJTY3Jp
cHRzKFVzZXJTY3JpcHRJbmplY3Rpb25UaW1lIGluamVjdGlvblRpbWUpCiAgICAgICAgIHJldHVy
bjsKICAgICBVc2VyU2NyaXB0TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSB1c2VyU2NyaXB0cy0+
ZW5kKCk7CiAgICAgZm9yIChVc2VyU2NyaXB0TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHVzZXJT
Y3JpcHRzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGluamVjdFVzZXJTY3Jp
cHRzRm9yV29ybGQoaXQtPmZpcnN0LmdldCgpLCAqaXQtPnNlY29uZCwgaW5qZWN0aW9uVGltZSk7
CisgICAgICAgIGluamVjdFVzZXJTY3JpcHRzRm9yV29ybGQoaXQtPmtleS5nZXQoKSwgKml0LT52
YWx1ZSwgaW5qZWN0aW9uVGltZSk7CiB9CiAKIHZvaWQgRnJhbWU6OmluamVjdFVzZXJTY3JpcHRz
Rm9yV29ybGQoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCwgY29uc3QgVXNlclNjcmlwdFZlY3RvciYg
dXNlclNjcmlwdHMsIFVzZXJTY3JpcHRJbmplY3Rpb25UaW1lIGluamVjdGlvblRpbWUpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1BhZ2VHcm91cC5jcHAKaW5kZXggNDVkMjVmNTUyMTRkNzQ0MTk0ZTkzN2ZhMzFlNmU2
NDYwZWFjYWY5Mi4uMDMyN2JiMGI2YzdlZWI4M2MyYzNlOWQwMjYyN2I4MGRjNzE5YzFmMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlR3JvdXAuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmNwcApAQCAtOTMsMTIgKzkzLDEyIEBAIFBhZ2VHcm91cCog
UGFnZUdyb3VwOjpwYWdlR3JvdXAoY29uc3QgU3RyaW5nJiBncm91cE5hbWUpCiAgICAgUGFnZUdy
b3VwTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gcGFnZUdyb3Vwcy0+YWRkKGdyb3VwTmFtZSwgMCk7
CiAKICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgQVNTRVJUKCFyZXN1bHQu
aXRlcmF0b3ItPnNlY29uZCk7Ci0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gbmV3
IFBhZ2VHcm91cChncm91cE5hbWUpOworICAgICAgICBBU1NFUlQoIXJlc3VsdC5pdGVyYXRvci0+
dmFsdWUpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gbmV3IFBhZ2VHcm91cChn
cm91cE5hbWUpOwogICAgIH0KIAotICAgIEFTU0VSVChyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7
Ci0gICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgIEFTU0VSVChyZXN1bHQu
aXRlcmF0b3ItPnZhbHVlKTsKKyAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIH0K
IAogdm9pZCBQYWdlR3JvdXA6OmNsb3NlTG9jYWxTdG9yYWdlKCkKQEAgLTEwOSw4ICsxMDksOCBA
QCB2b2lkIFBhZ2VHcm91cDo6Y2xvc2VMb2NhbFN0b3JhZ2UoKQogICAgIFBhZ2VHcm91cE1hcDo6
aXRlcmF0b3IgZW5kID0gcGFnZUdyb3Vwcy0+ZW5kKCk7CiAKICAgICBmb3IgKFBhZ2VHcm91cE1h
cDo6aXRlcmF0b3IgaXQgPSBwYWdlR3JvdXBzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
LSAgICAgICAgaWYgKGl0LT5zZWNvbmQtPmhhc0xvY2FsU3RvcmFnZSgpKQotICAgICAgICAgICAg
aXQtPnNlY29uZC0+bG9jYWxTdG9yYWdlKCktPmNsb3NlKCk7CisgICAgICAgIGlmIChpdC0+dmFs
dWUtPmhhc0xvY2FsU3RvcmFnZSgpKQorICAgICAgICAgICAgaXQtPnZhbHVlLT5sb2NhbFN0b3Jh
Z2UoKS0+Y2xvc2UoKTsKICAgICB9CiB9CiAKQEAgLTEyMSw4ICsxMjEsOCBAQCB2b2lkIFBhZ2VH
cm91cDo6Y2xlYXJMb2NhbFN0b3JhZ2VGb3JBbGxPcmlnaW5zKCkKIAogICAgIFBhZ2VHcm91cE1h
cDo6aXRlcmF0b3IgZW5kID0gcGFnZUdyb3Vwcy0+ZW5kKCk7CiAgICAgZm9yIChQYWdlR3JvdXBN
YXA6Oml0ZXJhdG9yIGl0ID0gcGFnZUdyb3Vwcy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7
Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kLT5oYXNMb2NhbFN0b3JhZ2UoKSkKLSAgICAgICAgICAg
IGl0LT5zZWNvbmQtPmxvY2FsU3RvcmFnZSgpLT5jbGVhckFsbE9yaWdpbnNGb3JEZWxldGlvbigp
OworICAgICAgICBpZiAoaXQtPnZhbHVlLT5oYXNMb2NhbFN0b3JhZ2UoKSkKKyAgICAgICAgICAg
IGl0LT52YWx1ZS0+bG9jYWxTdG9yYWdlKCktPmNsZWFyQWxsT3JpZ2luc0ZvckRlbGV0aW9uKCk7
CiAgICAgfQogfQogCkBAIC0xMzMsOCArMTMzLDggQEAgdm9pZCBQYWdlR3JvdXA6OmNsZWFyTG9j
YWxTdG9yYWdlRm9yT3JpZ2luKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCiAKICAgICBQYWdlR3Jv
dXBNYXA6Oml0ZXJhdG9yIGVuZCA9IHBhZ2VHcm91cHMtPmVuZCgpOwogICAgIGZvciAoUGFnZUdy
b3VwTWFwOjppdGVyYXRvciBpdCA9IHBhZ2VHcm91cHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgewotICAgICAgICBpZiAoaXQtPnNlY29uZC0+aGFzTG9jYWxTdG9yYWdlKCkpCi0gICAgICAg
ICAgICBpdC0+c2Vjb25kLT5sb2NhbFN0b3JhZ2UoKS0+Y2xlYXJPcmlnaW5Gb3JEZWxldGlvbihv
cmlnaW4pOworICAgICAgICBpZiAoaXQtPnZhbHVlLT5oYXNMb2NhbFN0b3JhZ2UoKSkKKyAgICAg
ICAgICAgIGl0LT52YWx1ZS0+bG9jYWxTdG9yYWdlKCktPmNsZWFyT3JpZ2luRm9yRGVsZXRpb24o
b3JpZ2luKTsKICAgICB9ICAgIAogfQogICAgIApAQCAtMTQ1LDggKzE0NSw4IEBAIHZvaWQgUGFn
ZUdyb3VwOjpzeW5jTG9jYWxTdG9yYWdlKCkKIAogICAgIFBhZ2VHcm91cE1hcDo6aXRlcmF0b3Ig
ZW5kID0gcGFnZUdyb3Vwcy0+ZW5kKCk7CiAgICAgZm9yIChQYWdlR3JvdXBNYXA6Oml0ZXJhdG9y
IGl0ID0gcGFnZUdyb3Vwcy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlm
IChpdC0+c2Vjb25kLT5oYXNMb2NhbFN0b3JhZ2UoKSkKLSAgICAgICAgICAgIGl0LT5zZWNvbmQt
PmxvY2FsU3RvcmFnZSgpLT5zeW5jKCk7CisgICAgICAgIGlmIChpdC0+dmFsdWUtPmhhc0xvY2Fs
U3RvcmFnZSgpKQorICAgICAgICAgICAgaXQtPnZhbHVlLT5sb2NhbFN0b3JhZ2UoKS0+c3luYygp
OwogICAgIH0KIH0KIApAQCAtMjY5LDcgKzI2OSw3IEBAIHZvaWQgUGFnZUdyb3VwOjphZGRVc2Vy
U2NyaXB0VG9Xb3JsZChET01XcmFwcGVyV29ybGQqIHdvcmxkLCBjb25zdCBTdHJpbmcmIHNvdXJj
CiAgICAgT3duUHRyPFVzZXJTY3JpcHQ+IHVzZXJTY3JpcHQgPSBhZG9wdFB0cihuZXcgVXNlclNj
cmlwdChzb3VyY2UsIHVybCwgd2hpdGVsaXN0LCBibGFja2xpc3QsIGluamVjdGlvblRpbWUsIGlu
amVjdGVkRnJhbWVzKSk7CiAgICAgaWYgKCFtX3VzZXJTY3JpcHRzKQogICAgICAgICBtX3VzZXJT
Y3JpcHRzID0gYWRvcHRQdHIobmV3IFVzZXJTY3JpcHRNYXApOwotICAgIE93blB0cjxVc2VyU2Ny
aXB0VmVjdG9yPiYgc2NyaXB0c0luV29ybGQgPSBtX3VzZXJTY3JpcHRzLT5hZGQod29ybGQsIG51
bGxwdHIpLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgT3duUHRyPFVzZXJTY3JpcHRWZWN0b3I+JiBz
Y3JpcHRzSW5Xb3JsZCA9IG1fdXNlclNjcmlwdHMtPmFkZCh3b3JsZCwgbnVsbHB0cikuaXRlcmF0
b3ItPnZhbHVlOwogICAgIGlmICghc2NyaXB0c0luV29ybGQpCiAgICAgICAgIHNjcmlwdHNJbldv
cmxkID0gYWRvcHRQdHIobmV3IFVzZXJTY3JpcHRWZWN0b3IpOwogICAgIHNjcmlwdHNJbldvcmxk
LT5hcHBlbmQodXNlclNjcmlwdC5yZWxlYXNlKCkpOwpAQCAtMjg2LDcgKzI4Niw3IEBAIHZvaWQg
UGFnZUdyb3VwOjphZGRVc2VyU3R5bGVTaGVldFRvV29ybGQoRE9NV3JhcHBlcldvcmxkKiB3b3Js
ZCwgY29uc3QgU3RyaW5nJiBzCiAgICAgT3duUHRyPFVzZXJTdHlsZVNoZWV0PiB1c2VyU3R5bGVT
aGVldCA9IGFkb3B0UHRyKG5ldyBVc2VyU3R5bGVTaGVldChzb3VyY2UsIHVybCwgd2hpdGVsaXN0
LCBibGFja2xpc3QsIGluamVjdGVkRnJhbWVzLCBsZXZlbCkpOwogICAgIGlmICghbV91c2VyU3R5
bGVTaGVldHMpCiAgICAgICAgIG1fdXNlclN0eWxlU2hlZXRzID0gYWRvcHRQdHIobmV3IFVzZXJT
dHlsZVNoZWV0TWFwKTsKLSAgICBPd25QdHI8VXNlclN0eWxlU2hlZXRWZWN0b3I+JiBzdHlsZVNo
ZWV0c0luV29ybGQgPSBtX3VzZXJTdHlsZVNoZWV0cy0+YWRkKHdvcmxkLCBudWxscHRyKS5pdGVy
YXRvci0+c2Vjb25kOworICAgIE93blB0cjxVc2VyU3R5bGVTaGVldFZlY3Rvcj4mIHN0eWxlU2hl
ZXRzSW5Xb3JsZCA9IG1fdXNlclN0eWxlU2hlZXRzLT5hZGQod29ybGQsIG51bGxwdHIpLml0ZXJh
dG9yLT52YWx1ZTsKICAgICBpZiAoIXN0eWxlU2hlZXRzSW5Xb3JsZCkKICAgICAgICAgc3R5bGVT
aGVldHNJbldvcmxkID0gYWRvcHRQdHIobmV3IFVzZXJTdHlsZVNoZWV0VmVjdG9yKTsKICAgICBz
dHlsZVNoZWV0c0luV29ybGQtPmFwcGVuZCh1c2VyU3R5bGVTaGVldC5yZWxlYXNlKCkpOwpAQCAt
MzA2LDcgKzMwNiw3IEBAIHZvaWQgUGFnZUdyb3VwOjpyZW1vdmVVc2VyU2NyaXB0RnJvbVdvcmxk
KERPTVdyYXBwZXJXb3JsZCogd29ybGQsIGNvbnN0IEtVUkwmIHVyCiAgICAgaWYgKGl0ID09IG1f
dXNlclNjcmlwdHMtPmVuZCgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgVXNlclNjcmlw
dFZlY3Rvciogc2NyaXB0cyA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgVXNlclNjcmlwdFZlY3Rv
ciogc2NyaXB0cyA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICBmb3IgKGludCBpID0gc2NyaXB0cy0+
c2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKICAgICAgICAgaWYgKHNjcmlwdHMtPmF0KGkpLT51
cmwoKSA9PSB1cmwpCiAgICAgICAgICAgICBzY3JpcHRzLT5yZW1vdmUoaSk7CkBAIC0zMjgsNyAr
MzI4LDcgQEAgdm9pZCBQYWdlR3JvdXA6OnJlbW92ZVVzZXJTdHlsZVNoZWV0RnJvbVdvcmxkKERP
TVdyYXBwZXJXb3JsZCogd29ybGQsIGNvbnN0IEtVUkwKICAgICBpZiAoaXQgPT0gbV91c2VyU3R5
bGVTaGVldHMtPmVuZCgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgVXNlclN0eWxlU2hl
ZXRWZWN0b3IqIHN0eWxlc2hlZXRzID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICBVc2VyU3R5bGVT
aGVldFZlY3Rvciogc3R5bGVzaGVldHMgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgZm9yIChpbnQg
aSA9IHN0eWxlc2hlZXRzLT5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgewogICAgICAgICBpZiAo
c3R5bGVzaGVldHMtPmF0KGkpLT51cmwoKSA9PSB1cmwpIHsKICAgICAgICAgICAgIHN0eWxlc2hl
ZXRzLT5yZW1vdmUoaSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJp
YWxpemVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCmluZGV4
IGM5MTFkNTRhOTI1NDZhN2NlMTRmMTg2NmVjYmNlZDhiNTZlNTY2M2IuLmExNjE0OTI1NWM3ZTNl
NDI2MDM5YzRhMTMyZmIxNjJiYzdhMTdmZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvUGFnZVNlcmlhbGl6ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlh
bGl6ZXIuY3BwCkBAIC0zMzksNyArMzM5LDcgQEAgS1VSTCBQYWdlU2VyaWFsaXplcjo6dXJsRm9y
QmxhbmtGcmFtZShGcmFtZSogZnJhbWUpCiB7CiAgICAgSGFzaE1hcDxGcmFtZSosIEtVUkw+Ojpp
dGVyYXRvciBpdGVyID0gbV9ibGFua0ZyYW1lVVJMcy5maW5kKGZyYW1lKTsKICAgICBpZiAoaXRl
ciAhPSBtX2JsYW5rRnJhbWVVUkxzLmVuZCgpKQotICAgICAgICByZXR1cm4gaXRlci0+c2Vjb25k
OworICAgICAgICByZXR1cm4gaXRlci0+dmFsdWU7CiAgICAgU3RyaW5nIHVybCA9ICJ3eWNpd3ln
Oi8vZnJhbWUvIiArIFN0cmluZzo6bnVtYmVyKG1fYmxhbmtGcmFtZUNvdW50ZXIrKyk7CiAgICAg
S1VSTCBmYWtlVVJMKFBhcnNlZFVSTFN0cmluZywgdXJsKTsKICAgICBtX2JsYW5rRnJhbWVVUkxz
LmFkZChmcmFtZSwgZmFrZVVSTCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Nl
Y3VyaXR5UG9saWN5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlQb2xpY3kuY3Bw
CmluZGV4IGMyYTVhYjExNDM1ZWY2ZGIwNTc2OGM3NmNhMDM1N2I1NjI1ODMzMTIuLjViMzZmNGY3
MTZjNDRiZmIwOWYyMGU2MzJjYzBkMDM4NmYzY2NhM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvU2VjdXJpdHlQb2xpY3kuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2Vj
dXJpdHlQb2xpY3kuY3BwCkBAIC0xMzMsOSArMTMzLDkgQEAgdm9pZCBTZWN1cml0eVBvbGljeTo6
YWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoY29uc3QgU2VjdXJpdHlPcmlnaW4mIHNvdXJj
ZU8KICAgICBTdHJpbmcgc291cmNlU3RyaW5nID0gc291cmNlT3JpZ2luLnRvU3RyaW5nKCk7CiAg
ICAgT3JpZ2luQWNjZXNzTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gb3JpZ2luQWNjZXNzTWFwKCku
YWRkKHNvdXJjZVN0cmluZywgbnVsbHB0cik7CiAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQot
ICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IGFkb3B0UHRyKG5ldyBPcmlnaW5BY2Nl
c3NXaGl0ZUxpc3QpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gYWRvcHRQdHIo
bmV3IE9yaWdpbkFjY2Vzc1doaXRlTGlzdCk7CiAKLSAgICBPcmlnaW5BY2Nlc3NXaGl0ZUxpc3Qq
IGxpc3QgPSByZXN1bHQuaXRlcmF0b3ItPnNlY29uZC5nZXQoKTsKKyAgICBPcmlnaW5BY2Nlc3NX
aGl0ZUxpc3QqIGxpc3QgPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpOwogICAgIGxpc3Qt
PmFwcGVuZChPcmlnaW5BY2Nlc3NFbnRyeShkZXN0aW5hdGlvblByb3RvY29sLCBkZXN0aW5hdGlv
bkRvbWFpbiwgYWxsb3dEZXN0aW5hdGlvblN1YmRvbWFpbnMgPyBPcmlnaW5BY2Nlc3NFbnRyeTo6
QWxsb3dTdWJkb21haW5zIDogT3JpZ2luQWNjZXNzRW50cnk6OkRpc2FsbG93U3ViZG9tYWlucykp
OwogfQogCkBAIC0xNTIsNyArMTUyLDcgQEAgdm9pZCBTZWN1cml0eVBvbGljeTo6cmVtb3ZlT3Jp
Z2luQWNjZXNzV2hpdGVsaXN0RW50cnkoY29uc3QgU2VjdXJpdHlPcmlnaW4mIHNvdXIKICAgICBp
ZiAoaXQgPT0gbWFwLmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBPcmlnaW5BY2Nlc3NX
aGl0ZUxpc3QqIGxpc3QgPSBpdC0+c2Vjb25kLmdldCgpOworICAgIE9yaWdpbkFjY2Vzc1doaXRl
TGlzdCogbGlzdCA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICBzaXplX3QgaW5kZXggPSBsaXN0LT5m
aW5kKE9yaWdpbkFjY2Vzc0VudHJ5KGRlc3RpbmF0aW9uUHJvdG9jb2wsIGRlc3RpbmF0aW9uRG9t
YWluLCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucyA/IE9yaWdpbkFjY2Vzc0VudHJ5OjpBbGxv
d1N1YmRvbWFpbnMgOiBPcmlnaW5BY2Nlc3NFbnRyeTo6RGlzYWxsb3dTdWJkb21haW5zKSk7CiAg
ICAgaWYgKGluZGV4ID09IG5vdEZvdW5kKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0
dGluZ3MuY3BwCmluZGV4IGU5N2M2NGY3M2RjYjBlMjdhZTQ5NjRkNDc1ZTYyYWI4MjliM2ZjNTQu
LmE1NGVkM2I1ZGYyZTQ4ZTg3ODk5NGZiNDUxZTAxMmU1NTZlOTIzMzEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
U2V0dGluZ3MuY3BwCkBAIC02MCw3ICs2MCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRHZW5l
cmljRm9udEZhbWlseU1hcChTY3JpcHRGb250RmFtaWx5TWFwJiBmb250TWFwLCBjb25zdCBBCiAg
ICAgICAgIGlmIChpdCA9PSBmb250TWFwLmVuZCgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICBmb250TWFwLnJlbW92ZShpdCk7Ci0gICAgfSBlbHNlIGlmIChpdCAhPSBmb250TWFwLmVu
ZCgpICYmIGl0LT5zZWNvbmQgPT0gZmFtaWx5KQorICAgIH0gZWxzZSBpZiAoaXQgIT0gZm9udE1h
cC5lbmQoKSAmJiBpdC0+dmFsdWUgPT0gZmFtaWx5KQogICAgICAgICByZXR1cm47CiAgICAgZWxz
ZQogICAgICAgICBmb250TWFwLnNldChzdGF0aWNfY2FzdDxpbnQ+KHNjcmlwdCksIGZhbWlseSk7
CkBAIC03Myw3ICs3Myw3IEBAIHN0YXRpYyBpbmxpbmUgY29uc3QgQXRvbWljU3RyaW5nJiBnZXRH
ZW5lcmljRm9udEZhbWlseUZvclNjcmlwdChjb25zdCBTY3JpcHRGb250CiB7CiAgICAgU2NyaXB0
Rm9udEZhbWlseU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBmb250TWFwLmZpbmQoc3RhdGljX2Nh
c3Q8aW50PihzY3JpcHQpKTsKICAgICBpZiAoaXQgIT0gZm9udE1hcC5lbmQoKSkKLSAgICAgICAg
cmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBpdC0+dmFsdWU7CiAgICAgaWYgKHNj
cmlwdCAhPSBVU0NSSVBUX0NPTU1PTikKICAgICAgICAgcmV0dXJuIGdldEdlbmVyaWNGb250RmFt
aWx5Rm9yU2NyaXB0KGZvbnRNYXAsIFVTQ1JJUFRfQ09NTU9OKTsKICAgICByZXR1cm4gZW1wdHlB
dG9tOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9TcGVlY2hJbnB1dC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL1NwZWVjaElucHV0LmNwcAppbmRleCAwMTI4ZWY4YTQwYTQyNDM1
NGFiNWY4ZTUwYmE4ZWNjNjIyNTdiM2M5Li44MzI4YzVkNGRmMzI5OTQyYjU5ZjNlY2MyMjUzNTY4
Y2UyYThhMTFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NwZWVjaElucHV0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NwZWVjaElucHV0LmNwcApAQCAtNjIsNyArNjIs
NyBAQCBpbnQgU3BlZWNoSW5wdXQ6OnJlZ2lzdGVyTGlzdGVuZXIoU3BlZWNoSW5wdXRMaXN0ZW5l
ciogbGlzdGVuZXIpCiAjaWYgZGVmaW5lZChERUJVRykKICAgICAvLyBDaGVjayBpZiBhbHJlYWR5
IHByZXNlbnQuCiAgICAgZm9yIChIYXNoTWFwPGludCwgU3BlZWNoSW5wdXRMaXN0ZW5lcio+Ojpp
dGVyYXRvciBpdCA9IG1fbGlzdGVuZXJzLmJlZ2luKCk7IGl0ICE9IG1fbGlzdGVuZXJzLmVuZCgp
OyArK2l0KQotICAgICAgQVNTRVJUKGl0LT5zZWNvbmQgIT0gbGlzdGVuZXIpOworICAgICAgQVNT
RVJUKGl0LT52YWx1ZSAhPSBsaXN0ZW5lcik7CiAjZW5kaWYKIAogICAgIG1fbGlzdGVuZXJzLmFk
ZChtX25leHRMaXN0ZW5lcklkLCBsaXN0ZW5lcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1dpbmRvd0ZlYXR1cmVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvV2luZG93RmVh
dHVyZXMuY3BwCmluZGV4IDc1NjQxNTI4ZGZlYzJmNGJlYzdlZWEzM2QwNzQwYTBkYzdkN2JhYzQu
LjFiNmIxZDBiMTYzMmU4MmE5NGVmMDQ2NzlkMGE3ZDQ3YWQzMWNiNTAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvV2luZG93RmVhdHVyZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvV2luZG93RmVhdHVyZXMuY3BwCkBAIC0yMTIsNyArMjEyLDcgQEAgYm9vbCBXaW5kb3dG
ZWF0dXJlczo6Ym9vbEZlYXR1cmUoY29uc3QgRGlhbG9nRmVhdHVyZXNNYXAmIGZlYXR1cmVzLCBj
b25zdCBjaGFyKgogICAgIERpYWxvZ0ZlYXR1cmVzTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGZl
YXR1cmVzLmZpbmQoa2V5KTsKICAgICBpZiAoaXQgPT0gZmVhdHVyZXMuZW5kKCkpCiAgICAgICAg
IHJldHVybiBkZWZhdWx0VmFsdWU7Ci0gICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGl0LT5zZWNv
bmQ7CisgICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGl0LT52YWx1ZTsKICAgICByZXR1cm4gdmFs
dWUuaXNOdWxsKCkgfHwgdmFsdWUgPT0gIjEiIHx8IHZhbHVlID09ICJ5ZXMiIHx8IHZhbHVlID09
ICJvbiI7CiB9CiAKQEAgLTIyNCw3ICsyMjQsNyBAQCBmbG9hdCBXaW5kb3dGZWF0dXJlczo6Zmxv
YXRGZWF0dXJlKGNvbnN0IERpYWxvZ0ZlYXR1cmVzTWFwJiBmZWF0dXJlcywgY29uc3QgY2hhcgog
ICAgIC8vIEZJWE1FOiBUaGUgdG9Eb3VibGUgZnVuY3Rpb24gZG9lcyBub3Qgb2ZmZXIgYSB3YXkg
dG8gdGVsbCAiMHEiIGZyb20gc3RyaW5nIHdpdGggbm8gZGlnaXRzIGluIGl0OiBCb3RoCiAgICAg
Ly8gcmV0dXJuIHRoZSBudW1iZXIgMCBhbmQgZmFsc2UgZm9yIG9rLiBCdXQgIjBxIiBzaG91bGQg
eWllbGQgdGhlIG1pbmltdW0gcmF0aGVyIHRoYW4gdGhlIGRlZmF1bHQuCiAgICAgYm9vbCBvazsK
LSAgICBkb3VibGUgcGFyc2VkTnVtYmVyID0gaXQtPnNlY29uZC50b0RvdWJsZSgmb2spOworICAg
IGRvdWJsZSBwYXJzZWROdW1iZXIgPSBpdC0+dmFsdWUudG9Eb3VibGUoJm9rKTsKICAgICBpZiAo
KHBhcnNlZE51bWJlciA9PSAwICYmICFvaykgfHwgaXNuYW4ocGFyc2VkTnVtYmVyKSkKICAgICAg
ICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTsKICAgICBpZiAocGFyc2VkTnVtYmVyIDwgbWluIHx8IG1h
eCA8PSBtaW4pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Bbmlt
YXRpb25Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1h
dGlvbkNvbnRyb2xsZXIuY3BwCmluZGV4IGM0OTExOWU2YTEzYzAxNGM4ZjI1OGUyOTQ2MTM4MTFj
ZGZhMGQ1MWIuLjVlMDcxN2UwYTljZmJhMzI4OTgyOTU2MjE3NzkxMmMwNmY3OGM4YmUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xs
ZXIuY3BwCkBAIC05MywxNCArOTMsMTQgQEAgZG91YmxlIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2
YXRlOjp1cGRhdGVBbmltYXRpb25zKFNldENoYW5nZWQgY2FsbFNldENoYW5nZWQvKgogCiAgICAg
UmVuZGVyT2JqZWN0QW5pbWF0aW9uTWFwOjpjb25zdF9pdGVyYXRvciBhbmltYXRpb25zRW5kID0g
bV9jb21wb3NpdGVBbmltYXRpb25zLmVuZCgpOwogICAgIGZvciAoUmVuZGVyT2JqZWN0QW5pbWF0
aW9uTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5iZWdpbigp
OyBpdCAhPSBhbmltYXRpb25zRW5kOyArK2l0KSB7Ci0gICAgICAgIENvbXBvc2l0ZUFuaW1hdGlv
biogY29tcEFuaW0gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICBDb21wb3NpdGVBbmltYXRp
b24qIGNvbXBBbmltID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICBpZiAoIWNvbXBBbmltLT5z
dXNwZW5kZWQoKSAmJiBjb21wQW5pbS0+aGFzQW5pbWF0aW9ucygpKSB7CiAgICAgICAgICAgICBk
b3VibGUgdCA9IGNvbXBBbmltLT50aW1lVG9OZXh0U2VydmljZSgpOwogICAgICAgICAgICAgaWYg
KHQgIT0gLTEgJiYgKHQgPCB0aW1lVG9OZXh0U2VydmljZSB8fCB0aW1lVG9OZXh0U2VydmljZSA9
PSAtMSkpCiAgICAgICAgICAgICAgICAgdGltZVRvTmV4dFNlcnZpY2UgPSB0OwogICAgICAgICAg
ICAgaWYgKCF0aW1lVG9OZXh0U2VydmljZSkgewogICAgICAgICAgICAgICAgIGlmIChjYWxsU2V0
Q2hhbmdlZCA9PSBDYWxsU2V0Q2hhbmdlZCkgewotICAgICAgICAgICAgICAgICAgICBOb2RlKiBu
b2RlID0gaXQtPmZpcnN0LT5ub2RlKCk7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUg
PSBpdC0+a2V5LT5ub2RlKCk7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghbm9kZSB8fCAo
bm9kZS0+ZG9jdW1lbnQoKSAmJiAhbm9kZS0+ZG9jdW1lbnQoKS0+aW5QYWdlQ2FjaGUoKSkpOwog
ICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXROZWVkc1N0eWxlUmVjYWxjKFN5bnRoZXRpY1N0
eWxlQ2hhbmdlKTsKICAgICAgICAgICAgICAgICAgICAgY2FsbGVkU2V0Q2hhbmdlZCA9IHRydWU7
CkBAIC0yOTIsOSArMjkyLDkgQEAgdm9pZCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6c3Vz
cGVuZEFuaW1hdGlvbnNGb3JEb2N1bWVudChEb2N1bWVudCogZG9jdW1lbnQKICAgICAKICAgICBS
ZW5kZXJPYmplY3RBbmltYXRpb25NYXA6OmNvbnN0X2l0ZXJhdG9yIGFuaW1hdGlvbnNFbmQgPSBt
X2NvbXBvc2l0ZUFuaW1hdGlvbnMuZW5kKCk7CiAgICAgZm9yIChSZW5kZXJPYmplY3RBbmltYXRp
b25NYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmJlZ2luKCk7
IGl0ICE9IGFuaW1hdGlvbnNFbmQ7ICsraXQpIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5k
ZXJlciA9IGl0LT5maXJzdDsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGl0LT5r
ZXk7CiAgICAgICAgIGlmIChyZW5kZXJlci0+ZG9jdW1lbnQoKSA9PSBkb2N1bWVudCkgewotICAg
ICAgICAgICAgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wQW5pbSA9IGl0LT5zZWNvbmQuZ2V0KCk7
CisgICAgICAgICAgICBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBBbmltID0gaXQtPnZhbHVlLmdl
dCgpOwogICAgICAgICAgICAgY29tcEFuaW0tPnN1c3BlbmRBbmltYXRpb25zKCk7CiAgICAgICAg
IH0KICAgICB9CkBAIC0zMDgsOSArMzA4LDkgQEAgdm9pZCBBbmltYXRpb25Db250cm9sbGVyUHJp
dmF0ZTo6cmVzdW1lQW5pbWF0aW9uc0ZvckRvY3VtZW50KERvY3VtZW50KiBkb2N1bWVudCkKICAg
ICAKICAgICBSZW5kZXJPYmplY3RBbmltYXRpb25NYXA6OmNvbnN0X2l0ZXJhdG9yIGFuaW1hdGlv
bnNFbmQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuZW5kKCk7CiAgICAgZm9yIChSZW5kZXJPYmpl
Y3RBbmltYXRpb25NYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9jb21wb3NpdGVBbmltYXRpb25z
LmJlZ2luKCk7IGl0ICE9IGFuaW1hdGlvbnNFbmQ7ICsraXQpIHsKLSAgICAgICAgUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlciA9IGl0LT5maXJzdDsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJl
ciA9IGl0LT5rZXk7CiAgICAgICAgIGlmIChyZW5kZXJlci0+ZG9jdW1lbnQoKSA9PSBkb2N1bWVu
dCkgewotICAgICAgICAgICAgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wQW5pbSA9IGl0LT5zZWNv
bmQuZ2V0KCk7CisgICAgICAgICAgICBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBBbmltID0gaXQt
PnZhbHVlLmdldCgpOwogICAgICAgICAgICAgY29tcEFuaW0tPnJlc3VtZUFuaW1hdGlvbnMoKTsK
ICAgICAgICAgfQogICAgIH0KQEAgLTM5Niw4ICszOTYsOCBAQCB1bnNpZ25lZCBBbmltYXRpb25D
b250cm9sbGVyUHJpdmF0ZTo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKERvY3VtZW50KiBkb2N1
bWVudAogICAgIAogICAgIFJlbmRlck9iamVjdEFuaW1hdGlvbk1hcDo6Y29uc3RfaXRlcmF0b3Ig
YW5pbWF0aW9uc0VuZCA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5lbmQoKTsKICAgICBmb3IgKFJl
bmRlck9iamVjdEFuaW1hdGlvbk1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2NvbXBvc2l0ZUFu
aW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gYW5pbWF0aW9uc0VuZDsgKytpdCkgewotICAgICAgICBS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gaXQtPmZpcnN0OwotICAgICAgICBDb21wb3NpdGVBbmlt
YXRpb24qIGNvbXBBbmltID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgUmVuZGVyT2JqZWN0
KiByZW5kZXJlciA9IGl0LT5rZXk7CisgICAgICAgIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcEFu
aW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgIGlmIChyZW5kZXJlci0+ZG9jdW1lbnQoKSA9
PSBkb2N1bWVudCkKICAgICAgICAgICAgIGNvdW50ICs9IGNvbXBBbmltLT5udW1iZXJPZkFjdGl2
ZUFuaW1hdGlvbnMoKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2Fu
aW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmlt
YXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmNwcAppbmRleCBmMzU3NzgxODk3NDBlZTM2ZThhMzNh
NTBhZjZjYWQ1NjkyOTBmOTZiLi4wYjBmMzc5ZDU2YWJkODVjNjNiYWUxNGNlNWVhMmI0OWFiMTNl
ZThlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVB
bmltYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0
ZUFuaW1hdGlvbi5jcHAKQEAgLTU4LDcgKzU4LDcgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246
OmNsZWFyUmVuZGVyZXIoKQogICAgICAgICAvLyBhbiBhbmltYXRpb24gY2FsbGJhY2sgKHNlZSBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIwNTIpCiAgICAgICAgIENT
U1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIHRyYW5zaXRpb25zRW5kID0g
bV90cmFuc2l0aW9ucy5lbmQoKTsKICAgICAgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25z
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gdHJh
bnNpdGlvbnNFbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiB0cmFu
c2l0aW9uID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9u
KiB0cmFuc2l0aW9uID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAgICAgYW5pbWF0aW9uQ29u
dHJvbGxlcigpLT5hbmltYXRpb25XaWxsQmVSZW1vdmVkKHRyYW5zaXRpb24pOwogICAgICAgICAg
ICAgdHJhbnNpdGlvbi0+Y2xlYXIoKTsKICAgICAgICAgfQpAQCAtNjcsNyArNjcsNyBAQCB2b2lk
IENvbXBvc2l0ZUFuaW1hdGlvbjo6Y2xlYXJSZW5kZXJlcigpCiAgICAgICAgIG1fa2V5ZnJhbWVB
bmltYXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsKICAgICAgICAgQW5pbWF0aW9uTmFtZU1hcDo6
Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmVuZCgp
OwogICAgICAgICBmb3IgKEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9r
ZXlmcmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gYW5pbWF0aW9uc0VuZDsgKytpdCkgewot
ICAgICAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kLmdldCgpOwor
ICAgICAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24qIGFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAg
ICAgICAgICAgICBhbmltYXRpb25Db250cm9sbGVyKCktPmFuaW1hdGlvbldpbGxCZVJlbW92ZWQo
YW5pbSk7CiAgICAgICAgICAgICBhbmltLT5jbGVhcigpOwogICAgICAgICB9CkBAIC04NCw3ICs4
NCw3IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVUcmFuc2l0aW9ucyhSZW5kZXJP
YmplY3QqIHJlbmRlcmVyLCBSZW5kZXJTdHlsZSoKICAgICAvLyBpbiB0aGUgbmV4dCBsb29wIGFu
ZCB0aGVuIHRvc3MgdGhlIG9uZXMgdGhhdCBkaWRuJ3QgZ2V0IG1hcmtlZC4KICAgICBDU1NQcm9w
ZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3RyYW5zaXRpb25zLmVu
ZCgpOwogICAgIGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQt
PnNlY29uZC0+c2V0QWN0aXZlKGZhbHNlKTsKKyAgICAgICAgaXQtPnZhbHVlLT5zZXRBY3RpdmUo
ZmFsc2UpOwogICAgICAgICAKICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG1vZGlmaWVkQ3VycmVu
dFN0eWxlOwogICAgIApAQCAtMTgxLDcgKzE4MSw3IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9u
Ojp1cGRhdGVUcmFuc2l0aW9ucyhSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBSZW5kZXJTdHlsZSoK
ICAgICBWZWN0b3I8aW50PiB0b0JlUmVtb3ZlZDsKICAgICBlbmQgPSBtX3RyYW5zaXRpb25zLmVu
ZCgpOwogICAgIGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBJ
bXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIEltcGxp
Y2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICBpZiAoIWFuaW0t
PmFjdGl2ZSgpKSB7CiAgICAgICAgICAgICBhbmltYXRpb25Db250cm9sbGVyKCktPmFuaW1hdGlv
bldpbGxCZVJlbW92ZWQoYW5pbSk7CiAgICAgICAgICAgICB0b0JlUmVtb3ZlZC5hcHBlbmQoYW5p
bS0+YW5pbWF0aW5nUHJvcGVydHkoKSk7CkBAIC0yMDcsMTMgKzIwNywxMyBAQCB2b2lkIENvbXBv
c2l0ZUFuaW1hdGlvbjo6dXBkYXRlS2V5ZnJhbWVBbmltYXRpb25zKFJlbmRlck9iamVjdCogcmVu
ZGVyZXIsIFJlbmRlcgogICAgICAgICAvLyBUaGUgY3VycmVudCBhbmQgdGFyZ2V0IGFuaW1hdGlv
bnMgYXJlIHRoZSBzYW1lIHNvIHdlIGp1c3QgbmVlZCB0byB0b3NzIGFueSAKICAgICAgICAgLy8g
YW5pbWF0aW9uIHdoaWNoIGlzIGZpbmlzaGVkIChwb3N0QWN0aXZlKS4KICAgICAgICAgZm9yIChB
bmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVBbmltYXRpb25z
LmJlZ2luKCk7IGl0ICE9IGtmZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAoaXQtPnNlY29u
ZC0+cG9zdEFjdGl2ZSgpKQotICAgICAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNldEluZGV4KC0x
KTsKKyAgICAgICAgICAgIGlmIChpdC0+dmFsdWUtPnBvc3RBY3RpdmUoKSkKKyAgICAgICAgICAg
ICAgICBpdC0+dmFsdWUtPnNldEluZGV4KC0xKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAg
ICAgICAgIC8vIE1hcmsgYWxsIGV4aXN0aW5nIGFuaW1hdGlvbnMgYXMgbm8gbG9uZ2VyIGFjdGl2
ZS4KICAgICAgICAgZm9yIChBbmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1f
a2V5ZnJhbWVBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGtmZW5kOyArK2l0KQotICAgICAgICAg
ICAgaXQtPnNlY29uZC0+c2V0SW5kZXgoLTEpOworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRJ
bmRleCgtMSk7CiAgICAgICAgICAgICAKICAgICAgICAgLy8gVG9zcyB0aGUgYW5pbWF0aW9uIG9y
ZGVyIG1hcC4KICAgICAgICAgbV9rZXlmcmFtZUFuaW1hdGlvbk9yZGVyTWFwLmNsZWFyKCk7CkBA
IC0yNjIsNyArMjYyLDcgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnVwZGF0ZUtleWZyYW1l
QW5pbWF0aW9ucyhSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBSZW5kZXIKICAgICBWZWN0b3I8QXRv
bWljU3RyaW5nSW1wbCo+IGFuaW1zVG9CZVJlbW92ZWQ7CiAgICAga2ZlbmQgPSBtX2tleWZyYW1l
QW5pbWF0aW9ucy5lbmQoKTsKICAgICBmb3IgKEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0ga2ZlbmQ7ICsraXQp
IHsKLSAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24qIGtleWZyYW1lQW5pbSA9IGl0LT5zZWNvbmQu
Z2V0KCk7CisgICAgICAgIEtleWZyYW1lQW5pbWF0aW9uKiBrZXlmcmFtZUFuaW0gPSBpdC0+dmFs
dWUuZ2V0KCk7CiAgICAgICAgIGlmIChrZXlmcmFtZUFuaW0tPmluZGV4KCkgPCAwKSB7CiAgICAg
ICAgICAgICBhbmltc1RvQmVSZW1vdmVkLmFwcGVuZChrZXlmcmFtZUFuaW0tPm5hbWUoKS5pbXBs
KCkpOwogICAgICAgICAgICAgYW5pbWF0aW9uQ29udHJvbGxlcigpLT5hbmltYXRpb25XaWxsQmVS
ZW1vdmVkKGtleWZyYW1lQW5pbSk7CkBAIC0yOTAsNyArMjkwLDcgQEAgUGFzc1JlZlB0cjxSZW5k
ZXJTdHlsZT4gQ29tcG9zaXRlQW5pbWF0aW9uOjphbmltYXRlKFJlbmRlck9iamVjdCogcmVuZGVy
ZXIsIFJlbmQKICAgICAgICAgaWYgKCFtX3RyYW5zaXRpb25zLmlzRW1wdHkoKSkgewogICAgICAg
ICAgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV90
cmFuc2l0aW9ucy5lbmQoKTsKICAgICAgICAgICAgIGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9u
c01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewotICAgICAgICAgICAgICAgIGlmIChJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9
IGl0LT5zZWNvbmQuZ2V0KCkpCisgICAgICAgICAgICAgICAgaWYgKEltcGxpY2l0QW5pbWF0aW9u
KiBhbmltID0gaXQtPnZhbHVlLmdldCgpKQogICAgICAgICAgICAgICAgICAgICBhbmltLT5hbmlt
YXRlKHRoaXMsIHJlbmRlcmVyLCBjdXJyZW50U3R5bGUsIHRhcmdldFN0eWxlLCByZXN1bHRTdHls
ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTMxMiw3ICszMTIsNyBAQCBQYXNzUmVm
UHRyPFJlbmRlclN0eWxlPiBDb21wb3NpdGVBbmltYXRpb246OmdldEFuaW1hdGVkU3R5bGUoKSBj
b25zdAogICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gcmVzdWx0U3R5bGU7CiAgICAgQ1NTUHJvcGVy
dHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV90cmFuc2l0aW9ucy5lbmQo
KTsKICAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYg
KEltcGxpY2l0QW5pbWF0aW9uKiBpbXBsaWNpdEFuaW1hdGlvbiA9IGl0LT5zZWNvbmQuZ2V0KCkp
CisgICAgICAgIGlmIChJbXBsaWNpdEFuaW1hdGlvbiogaW1wbGljaXRBbmltYXRpb24gPSBpdC0+
dmFsdWUuZ2V0KCkpCiAgICAgICAgICAgICBpbXBsaWNpdEFuaW1hdGlvbi0+Z2V0QW5pbWF0ZWRT
dHlsZShyZXN1bHRTdHlsZSk7CiAgICAgfQogCkBAIC0zMzMsNyArMzMzLDcgQEAgdm9pZCBDb21w
b3NpdGVBbmltYXRpb246OnNldEFuaW1hdGluZyhib29sIGFuaW1hdGluZykKICAgICBpZiAoIW1f
dHJhbnNpdGlvbnMuaXNFbXB0eSgpKSB7CiAgICAgICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNN
YXA6OmNvbnN0X2l0ZXJhdG9yIHRyYW5zaXRpb25zRW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsK
ICAgICAgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gdHJhbnNpdGlvbnNFbmQ7ICsraXQpIHsK
LSAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiB0cmFuc2l0aW9uID0gaXQtPnNlY29uZC5n
ZXQoKTsKKyAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiB0cmFuc2l0aW9uID0gaXQtPnZh
bHVlLmdldCgpOwogICAgICAgICAgICAgdHJhbnNpdGlvbi0+c2V0QW5pbWF0aW5nKGFuaW1hdGlu
Zyk7CiAgICAgICAgIH0KICAgICB9CkBAIC0zNDEsNyArMzQxLDcgQEAgdm9pZCBDb21wb3NpdGVB
bmltYXRpb246OnNldEFuaW1hdGluZyhib29sIGFuaW1hdGluZykKICAgICAgICAgbV9rZXlmcmFt
ZUFuaW1hdGlvbnMuY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgICAgICBBbmltYXRpb25OYW1lTWFw
Ojpjb25zdF9pdGVyYXRvciBhbmltYXRpb25zRW5kID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuZW5k
KCk7CiAgICAgICAgIGZvciAoQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
X2tleWZyYW1lQW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBhbmltYXRpb25zRW5kOyArK2l0KSB7
Ci0gICAgICAgICAgICBLZXlmcmFtZUFuaW1hdGlvbiogYW5pbSA9IGl0LT5zZWNvbmQuZ2V0KCk7
CisgICAgICAgICAgICBLZXlmcmFtZUFuaW1hdGlvbiogYW5pbSA9IGl0LT52YWx1ZS5nZXQoKTsK
ICAgICAgICAgICAgIGFuaW0tPnNldEFuaW1hdGluZyhhbmltYXRpbmcpOwogICAgICAgICB9CiAg
ICAgfQpAQCAtMzU2LDcgKzM1Niw3IEBAIGRvdWJsZSBDb21wb3NpdGVBbmltYXRpb246OnRpbWVU
b05leHRTZXJ2aWNlKCkgY29uc3QKICAgICBpZiAoIW1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSB7
CiAgICAgICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIHRyYW5z
aXRpb25zRW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKICAgICAgICAgZm9yIChDU1NQcm9wZXJ0
eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4o
KTsgaXQgIT0gdHJhbnNpdGlvbnNFbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIEltcGxpY2l0QW5p
bWF0aW9uKiB0cmFuc2l0aW9uID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgIEltcGxp
Y2l0QW5pbWF0aW9uKiB0cmFuc2l0aW9uID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAgICAg
ZG91YmxlIHQgPSB0cmFuc2l0aW9uID8gdHJhbnNpdGlvbi0+dGltZVRvTmV4dFNlcnZpY2UoKSA6
IC0xOwogICAgICAgICAgICAgaWYgKHQgPCBtaW5UIHx8IG1pblQgPT0gLTEpCiAgICAgICAgICAg
ICAgICAgbWluVCA9IHQ7CkBAIC0zNjgsNyArMzY4LDcgQEAgZG91YmxlIENvbXBvc2l0ZUFuaW1h
dGlvbjo6dGltZVRvTmV4dFNlcnZpY2UoKSBjb25zdAogICAgICAgICBtX2tleWZyYW1lQW5pbWF0
aW9ucy5jaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgICAgIEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0
X2l0ZXJhdG9yIGFuaW1hdGlvbnNFbmQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5lbmQoKTsKICAg
ICAgICAgZm9yIChBbmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJh
bWVBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGFuaW1hdGlvbnNFbmQ7ICsraXQpIHsKLSAgICAg
ICAgICAgIEtleWZyYW1lQW5pbWF0aW9uKiBhbmltYXRpb24gPSBpdC0+c2Vjb25kLmdldCgpOwor
ICAgICAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24qIGFuaW1hdGlvbiA9IGl0LT52YWx1ZS5nZXQo
KTsKICAgICAgICAgICAgIGRvdWJsZSB0ID0gYW5pbWF0aW9uID8gYW5pbWF0aW9uLT50aW1lVG9O
ZXh0U2VydmljZSgpIDogLTE7CiAgICAgICAgICAgICBpZiAodCA8IG1pblQgfHwgbWluVCA9PSAt
MSkKICAgICAgICAgICAgICAgICBtaW5UID0gdDsKQEAgLTM5MCw3ICszOTAsNyBAQCBQYXNzUmVm
UHRyPEtleWZyYW1lQW5pbWF0aW9uPiBDb21wb3NpdGVBbmltYXRpb246OmdldEFuaW1hdGlvbkZv
clByb3BlcnR5KENTU1BybwogICAgICAgICBtX2tleWZyYW1lQW5pbWF0aW9ucy5jaGVja0NvbnNp
c3RlbmN5KCk7CiAgICAgICAgIEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGFuaW1h
dGlvbnNFbmQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5lbmQoKTsKICAgICAgICAgZm9yIChBbmlt
YXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmJl
Z2luKCk7IGl0ICE9IGFuaW1hdGlvbnNFbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIFJlZlB0cjxL
ZXlmcmFtZUFuaW1hdGlvbj4gYW5pbSA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICBSZWZQdHI8
S2V5ZnJhbWVBbmltYXRpb24+IGFuaW0gPSBpdC0+dmFsdWU7CiAgICAgICAgICAgICBpZiAoYW5p
bS0+aGFzQW5pbWF0aW9uRm9yUHJvcGVydHkocHJvcGVydHkpKQogICAgICAgICAgICAgICAgIHJl
dHZhbCA9IGFuaW07CiAgICAgICAgIH0KQEAgLTQxMCwxNCArNDEwLDE0IEBAIHZvaWQgQ29tcG9z
aXRlQW5pbWF0aW9uOjpzdXNwZW5kQW5pbWF0aW9ucygpCiAgICAgICAgIG1fa2V5ZnJhbWVBbmlt
YXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsKICAgICAgICAgQW5pbWF0aW9uTmFtZU1hcDo6Y29u
c3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmVuZCgpOwog
ICAgICAgICBmb3IgKEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlm
cmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gYW5pbWF0aW9uc0VuZDsgKytpdCkgewotICAg
ICAgICAgICAgaWYgKEtleWZyYW1lQW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZC5nZXQoKSkK
KyAgICAgICAgICAgIGlmIChLZXlmcmFtZUFuaW1hdGlvbiogYW5pbSA9IGl0LT52YWx1ZS5nZXQo
KSkKICAgICAgICAgICAgICAgICBhbmltLT51cGRhdGVQbGF5U3RhdGUoQW5pbVBsYXlTdGF0ZVBh
dXNlZCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKCFtX3RyYW5zaXRpb25zLmlzRW1wdHko
KSkgewogICAgICAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciB0
cmFuc2l0aW9uc0VuZCA9IG1fdHJhbnNpdGlvbnMuZW5kKCk7CiAgICAgICAgIGZvciAoQ1NTUHJv
cGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJl
Z2luKCk7IGl0ICE9IHRyYW5zaXRpb25zRW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBJbXBsaWNp
dEFuaW1hdGlvbiogYW5pbSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBJbXBsaWNp
dEFuaW1hdGlvbiogYW5pbSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGlmIChhbmlt
ICYmIGFuaW0tPmhhc1N0eWxlKCkpCiAgICAgICAgICAgICAgICAgYW5pbS0+dXBkYXRlUGxheVN0
YXRlKEFuaW1QbGF5U3RhdGVQYXVzZWQpOwogICAgICAgICB9CkBAIC00MzUsNyArNDM1LDcgQEAg
dm9pZCBDb21wb3NpdGVBbmltYXRpb246OnJlc3VtZUFuaW1hdGlvbnMoKQogICAgICAgICBtX2tl
eWZyYW1lQW5pbWF0aW9ucy5jaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgICAgIEFuaW1hdGlvbk5h
bWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGFuaW1hdGlvbnNFbmQgPSBtX2tleWZyYW1lQW5pbWF0aW9u
cy5lbmQoKTsKICAgICAgICAgZm9yIChBbmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGFuaW1hdGlvbnNFbmQ7ICsr
aXQpIHsKLSAgICAgICAgICAgIEtleWZyYW1lQW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZC5n
ZXQoKTsKKyAgICAgICAgICAgIEtleWZyYW1lQW5pbWF0aW9uKiBhbmltID0gaXQtPnZhbHVlLmdl
dCgpOwogICAgICAgICAgICAgaWYgKGFuaW0gJiYgYW5pbS0+cGxheVN0YXRlUGxheWluZygpKQog
ICAgICAgICAgICAgICAgIGFuaW0tPnVwZGF0ZVBsYXlTdGF0ZShBbmltUGxheVN0YXRlUGxheWlu
Zyk7CiAgICAgICAgIH0KQEAgLTQ0NCw3ICs0NDQsNyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlv
bjo6cmVzdW1lQW5pbWF0aW9ucygpCiAgICAgaWYgKCFtX3RyYW5zaXRpb25zLmlzRW1wdHkoKSkg
ewogICAgICAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciB0cmFu
c2l0aW9uc0VuZCA9IG1fdHJhbnNpdGlvbnMuZW5kKCk7CiAgICAgICAgIGZvciAoQ1NTUHJvcGVy
dHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2lu
KCk7IGl0ICE9IHRyYW5zaXRpb25zRW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBJbXBsaWNpdEFu
aW1hdGlvbiogYW5pbSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBJbXBsaWNpdEFu
aW1hdGlvbiogYW5pbSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGlmIChhbmltICYm
IGFuaW0tPmhhc1N0eWxlKCkpCiAgICAgICAgICAgICAgICAgYW5pbS0+dXBkYXRlUGxheVN0YXRl
KEFuaW1QbGF5U3RhdGVQbGF5aW5nKTsKICAgICAgICAgfQpAQCAtNDU2LDcgKzQ1Niw3IEBAIHZv
aWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpvdmVycmlkZUltcGxpY2l0QW5pbWF0aW9ucyhDU1NQcm9w
ZXJ0eUlEIHByb3BlcnR5KQogICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IG1fdHJhbnNpdGlvbnMuZW5kKCk7CiAgICAgaWYgKCFtX3RyYW5zaXRpb25z
LmlzRW1wdHkoKSkgewogICAgICAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKLSAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZC5nZXQo
KTsKKyAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnZhbHVlLmdldCgp
OwogICAgICAgICAgICAgaWYgKGFuaW0gJiYgYW5pbS0+YW5pbWF0aW5nUHJvcGVydHkoKSA9PSBw
cm9wZXJ0eSkKICAgICAgICAgICAgICAgICBhbmltLT5zZXRPdmVycmlkZGVuKHRydWUpOwogICAg
ICAgICB9CkBAIC00NjgsNyArNDY4LDcgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnJlc3Vt
ZU92ZXJyaWRkZW5JbXBsaWNpdEFuaW1hdGlvbnMoQ1NTUHJvcGVydHlJRCBwcm9wZXIKICAgICBp
ZiAoIW1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSB7CiAgICAgICAgIENTU1Byb3BlcnR5VHJhbnNp
dGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fdHJhbnNpdGlvbnMuZW5kKCk7CiAgICAg
ICAgIGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
X3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgSW1w
bGljaXRBbmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgSW1w
bGljaXRBbmltYXRpb24qIGFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBpZiAo
YW5pbSAmJiBhbmltLT5hbmltYXRpbmdQcm9wZXJ0eSgpID09IHByb3BlcnR5KQogICAgICAgICAg
ICAgICAgIGFuaW0tPnNldE92ZXJyaWRkZW4oZmFsc2UpOwogICAgICAgICB9CkBAIC00ODEsNyAr
NDgxLDcgQEAgYm9vbCBDb21wb3NpdGVBbmltYXRpb246OmlzQW5pbWF0aW5nUHJvcGVydHkoQ1NT
UHJvcGVydHlJRCBwcm9wZXJ0eSwgYm9vbCBhY2NlbGUKICAgICAgICAgbV9rZXlmcmFtZUFuaW1h
dGlvbnMuY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgICAgICBBbmltYXRpb25OYW1lTWFwOjpjb25z
dF9pdGVyYXRvciBhbmltYXRpb25zRW5kID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuZW5kKCk7CiAg
ICAgICAgIGZvciAoQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2tleWZy
YW1lQW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBhbmltYXRpb25zRW5kOyArK2l0KSB7Ci0gICAg
ICAgICAgICBLZXlmcmFtZUFuaW1hdGlvbiogYW5pbSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAg
ICAgICAgICBLZXlmcmFtZUFuaW1hdGlvbiogYW5pbSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAg
ICAgICAgIGlmIChhbmltICYmIGFuaW0tPmlzQW5pbWF0aW5nUHJvcGVydHkocHJvcGVydHksIGFj
Y2VsZXJhdGVkT25seSwgaXNSdW5uaW5nTm93KSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgfQpAQCAtNDkwLDcgKzQ5MCw3IEBAIGJvb2wgQ29tcG9zaXRlQW5pbWF0aW9u
Ojppc0FuaW1hdGluZ1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHksIGJvb2wgYWNjZWxl
CiAgICAgaWYgKCFtX3RyYW5zaXRpb25zLmlzRW1wdHkoKSkgewogICAgICAgICBDU1NQcm9wZXJ0
eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciB0cmFuc2l0aW9uc0VuZCA9IG1fdHJhbnNp
dGlvbnMuZW5kKCk7CiAgICAgICAgIGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IHRyYW5zaXRpb25z
RW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT5z
ZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT52
YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGlmIChhbmltICYmIGFuaW0tPmlzQW5pbWF0aW5nUHJv
cGVydHkocHJvcGVydHksIGFjY2VsZXJhdGVkT25seSwgaXNSdW5uaW5nTm93KSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtNTU2LDcgKzU1Niw3IEBAIHVuc2ln
bmVkIENvbXBvc2l0ZUFuaW1hdGlvbjo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKCkgY29uc3QK
ICAgICAgICAgbV9rZXlmcmFtZUFuaW1hdGlvbnMuY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgICAg
ICBBbmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBhbmltYXRpb25zRW5kID0gbV9rZXlm
cmFtZUFuaW1hdGlvbnMuZW5kKCk7CiAgICAgICAgIGZvciAoQW5pbWF0aW9uTmFtZU1hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBhbmlt
YXRpb25zRW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBLZXlmcmFtZUFuaW1hdGlvbiogYW5pbSA9
IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBLZXlmcmFtZUFuaW1hdGlvbiogYW5pbSA9
IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGlmIChhbmltLT5ydW5uaW5nKCkpCiAgICAg
ICAgICAgICAgICAgKytjb3VudDsKICAgICAgICAgfQpAQCAtNTY1LDcgKzU2NSw3IEBAIHVuc2ln
bmVkIENvbXBvc2l0ZUFuaW1hdGlvbjo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKCkgY29uc3QK
ICAgICBpZiAoIW1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSB7CiAgICAgICAgIENTU1Byb3BlcnR5
VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIHRyYW5zaXRpb25zRW5kID0gbV90cmFuc2l0
aW9ucy5lbmQoKTsKICAgICAgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gdHJhbnNpdGlvbnNF
bmQ7ICsraXQpIHsKLSAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnNl
Y29uZC5nZXQoKTsKKyAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnZh
bHVlLmdldCgpOwogICAgICAgICAgICAgaWYgKGFuaW0tPnJ1bm5pbmcoKSkKICAgICAgICAgICAg
ICAgICArK2NvdW50OwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9MYW5ndWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MYW5ndWFnZS5jcHAK
aW5kZXggNDdmMDlmNjA5Mjk5NzFlMzE3MzU2ZTQ5ZmJjYjYzYjVkYjQxN2YzNy4uYjNmOTdiZWM5
NzIxNWI4MDliMzQxZWFjMDFhNjE3ZTgxYWE3YTA2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vTGFuZ3VhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xh
bmd1YWdlLmNwcApAQCAtNTMsNyArNTMsNyBAQCB2b2lkIGxhbmd1YWdlRGlkQ2hhbmdlKCkKIHsK
ICAgICBPYnNlcnZlck1hcDo6aXRlcmF0b3IgZW5kID0gb2JzZXJ2ZXJNYXAoKS5lbmQoKTsKICAg
ICBmb3IgKE9ic2VydmVyTWFwOjppdGVyYXRvciBpdGVyID0gb2JzZXJ2ZXJNYXAoKS5iZWdpbigp
OyBpdGVyICE9IGVuZDsgKytpdGVyKQotICAgICAgICBpdGVyLT5zZWNvbmQoaXRlci0+Zmlyc3Qp
OworICAgICAgICBpdGVyLT52YWx1ZShpdGVyLT5rZXkpOwogfQogCiBTdHJpbmcgZGVmYXVsdExh
bmd1YWdlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVn
aXN0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5jcHAK
aW5kZXggMjg5YzY2OTliMDVmNDlmYjcxN2MwYzQwM2MyYjU3MWJiYzljMjhiOC4uOGY1MjEwM2My
ZTljYWU5N2RhNDRkMzRjM2IyMjgyOTVmOTY4YWRjYSAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5jcHAKQEAgLTY5Miw3ICs2OTIsNyBAQCBTdHJpbmcgTUlN
RVR5cGVSZWdpc3RyeTo6Z2V0Tm9ybWFsaXplZE1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5
cGUpCiAgICAgTUlNRVR5cGVBc3NvY2lhdGlvbk1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtaW1l
VHlwZUFzc29jaWF0aW9uTWFwKCkuZmluZChtaW1lVHlwZSk7CiAKICAgICBpZiAoaXQgIT0gbWlt
ZVR5cGVBc3NvY2lhdGlvbk1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsK
KyAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKICNlbmRpZgogICAgIHJldHVybiBtaW1lVHlwZTsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0hSVEZFbGV2YXRp
b24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vSFJURkVsZXZhdGlvbi5jcHAK
aW5kZXggMjVlNDU4OTYyNWRjY2ZkN2Y0ZDNiNTRhZjc1MzJkOGU4M2YyNjI3OC4uY2ZlMTNlZDg1
MzA2YjUxNzEyYWEzMDc0YjljOGRjMzkyY2Q0NjUyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vSFJURkVsZXZhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYXVkaW8vSFJURkVsZXZhdGlvbi5jcHAKQEAgLTc5LDcgKzc5LDcgQEAgc3RhdGlj
IEF1ZGlvQnVzKiBnZXRDb25jYXRlbmF0ZWRJbXB1bHNlUmVzcG9uc2VzRm9yU3ViamVjdChjb25z
dCBTdHJpbmcmIHN1YmplY3QKICAgICAgICAgYnVzID0gY29uY2F0ZW5hdGVkSW1wdWxzZVJlc3Bv
bnNlcy5sZWFrUHRyKCk7CiAgICAgICAgIGF1ZGlvQnVzTWFwLnNldChzdWJqZWN0TmFtZSwgYnVz
KTsKICAgICB9IGVsc2UKLSAgICAgICAgYnVzID0gaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAg
YnVzID0gaXRlcmF0b3ItPnZhbHVlOwogCiAgICAgc2l6ZV90IHJlc3BvbnNlTGVuZ3RoID0gYnVz
LT5sZW5ndGgoKTsKICAgICBzaXplX3QgZXhwZWN0ZWRMZW5ndGggPSBzdGF0aWNfY2FzdDxzaXpl
X3Q+KFRvdGFsTnVtYmVyT2ZSZXNwb25zZXMgKiBSZXNwb25zZUZyYW1lU2l6ZSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0Nvb2tpZU1hbmFnZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9Db29raWVNYW5hZ2VyLmNwcApp
bmRleCBkZDkzNzAyMjMxNDM1MDA2NGEyYjE4YTllZTljNjVmMjg0OWUyYWI4Li42ZGJmOTE2MmJm
NjFhMTcxYjQ3OWE2MjFkZDQ3MDlhNmJiYWNhY2JmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0Nvb2tpZU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvQ29va2llTWFuYWdlci5jcHAKQEAgLTE2Nyw3ICsxNjcs
NyBAQCBTdHJpbmcgQ29va2llTWFuYWdlcjo6Z2VuZXJhdGVIdG1sRnJhZ21lbnRGb3JDb29raWVz
KCkKIAogICAgIFZlY3RvcjxQYXJzZWRDb29raWUqPiBjb29raWVDYW5kaWRhdGVzOwogICAgIGZv
ciAoSGFzaE1hcDxTdHJpbmcsIENvb2tpZU1hcCo+OjppdGVyYXRvciBpdCA9IG1fbWFuYWdlck1h
cC5iZWdpbigpOyBpdCAhPSBtX21hbmFnZXJNYXAuZW5kKCk7ICsraXQpCi0gICAgICAgIGl0LT5z
ZWNvbmQtPmdldEFsbENoaWxkQ29va2llcygmY29va2llQ2FuZGlkYXRlcyk7CisgICAgICAgIGl0
LT52YWx1ZS0+Z2V0QWxsQ2hpbGRDb29raWVzKCZjb29raWVDYW5kaWRhdGVzKTsKIAogICAgIFN0
cmluZyByZXN1bHQ7CiAgICAgUGFyc2VkQ29va2llKiBjb29raWUgPSAwOwpAQCAtMjg2LDcgKzI4
Niw3IEBAIHZvaWQgQ29va2llTWFuYWdlcjo6cmVtb3ZlQWxsQ29va2llcyhCYWNraW5nU3RvcmVS
ZW1vdmFsUG9saWN5IGJhY2tpbmdTdG9yZVJlbW92CiAgICAgSGFzaE1hcDxTdHJpbmcsIENvb2tp
ZU1hcCo+OjppdGVyYXRvciBmaXJzdCA9IG1fbWFuYWdlck1hcC5iZWdpbigpOwogICAgIEhhc2hN
YXA8U3RyaW5nLCBDb29raWVNYXAqPjo6aXRlcmF0b3IgZW5kID0gbV9tYW5hZ2VyTWFwLmVuZCgp
OwogICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIENvb2tpZU1hcCo+OjppdGVyYXRvciBpdCA9IGZp
cnN0OyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPmRlbGV0ZUFsbENvb2tp
ZXNBbmREb21haW5zKCk7CisgICAgICAgIGl0LT52YWx1ZS0+ZGVsZXRlQWxsQ29va2llc0FuZERv
bWFpbnMoKTsKIAogICAgIGlmIChiYWNraW5nU3RvcmVSZW1vdmFsID09IFJlbW92ZUZyb21CYWNr
aW5nU3RvcmUpCiAgICAgICAgIG1fY29va2llQmFja2luZ1N0b3JlLT5yZW1vdmVBbGwoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvQ29va2llTWFwLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvQ29va2llTWFwLmNwcAppbmRl
eCBiYmU5YTdjZWRmNzNmNzBkNTBjNGRkMDcyNGY0YTVkNmEwMTVjN2E4Li5hZjQ4NWI1NGMyMGVj
Y2ZjYTBhYTRkOTk1ZmI3MjBhNDUzNGQ3OGE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ibGFja2JlcnJ5L0Nvb2tpZU1hcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYmxhY2tiZXJyeS9Db29raWVNYXAuY3BwCkBAIC0xNzIsNyArMTcyLDcgQEAgUGFyc2Vk
Q29va2llKiBDb29raWVNYXA6OnJlbW92ZU9sZGVzdENvb2tpZSgpCiAgICAgICAgIENvb2tpZUxv
ZygiQ29va2llTWFwIC0gbG9va2luZyBpbnRvIHN1YmRvbWFpbnMiKTsKIAogICAgICAgICBmb3Ig
KEhhc2hNYXA8U3RyaW5nLCBDb29raWVNYXAqPjo6aXRlcmF0b3IgaXQgPSBtX3N1YmRvbWFpbnMu
YmVnaW4oKTsgaXQgIT0gbV9zdWJkb21haW5zLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgICAgICBv
bGRlc3RDb29raWUgPSBpdC0+c2Vjb25kLT5yZW1vdmVPbGRlc3RDb29raWUoKTsKKyAgICAgICAg
ICAgIG9sZGVzdENvb2tpZSA9IGl0LT52YWx1ZS0+cmVtb3ZlT2xkZXN0Q29va2llKCk7CiAgICAg
ICAgICAgICBpZiAob2xkZXN0Q29va2llKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CkBAIC0yMTQsNyArMjE0LDcgQEAgdm9pZCBDb29raWVNYXA6OmdldEFsbENoaWxkQ29va2ll
cyhWZWN0b3I8UGFyc2VkQ29va2llKj4qIHN0YWNrT2ZDb29raWVzKQogICAgIENvb2tpZUxvZygi
Q29va2llTWFwIC0gZ2V0QWxsQ2hpbGRDb29raWVzIGluIE1hcCAtICVzIiwgZ2V0TmFtZSgpLnV0
ZjgoKS5kYXRhKCkpOwogICAgIGdldEFsbENvb2tpZXMoc3RhY2tPZkNvb2tpZXMpOwogICAgIGZv
ciAoSGFzaE1hcDxTdHJpbmcsIENvb2tpZU1hcCo+OjppdGVyYXRvciBpdCA9IG1fc3ViZG9tYWlu
cy5iZWdpbigpOyBpdCAhPSBtX3N1YmRvbWFpbnMuZW5kKCk7ICsraXQpCi0gICAgICAgIGl0LT5z
ZWNvbmQtPmdldEFsbENoaWxkQ29va2llcyhzdGFja09mQ29va2llcyk7CisgICAgICAgIGl0LT52
YWx1ZS0+Z2V0QWxsQ2hpbGRDb29raWVzKHN0YWNrT2ZDb29raWVzKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2YvQmlu
YXJ5UHJvcGVydHlMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL0JpbmFyeVBy
b3BlcnR5TGlzdC5jcHAKaW5kZXggYmVjMmVjOTUwNjQ0Yzk5M2JlODlhYjM1ZTBiODY3YThiNjEy
NjA4OC4uYjI3ZDdkN2NkM2MxNDM4NjBlYzY1OGJlZWIyZDZlNzcyZTk0MmM1MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2YvQmluYXJ5UHJvcGVydHlMaXN0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9CaW5hcnlQcm9wZXJ0eUxpc3QuY3BwCkBAIC0y
MjksNyArMjI5LDcgQEAgdm9pZCBCaW5hcnlQcm9wZXJ0eUxpc3RQbGFuOjp3cml0ZUludGVnZXJB
cnJheShjb25zdCBpbnQqIGludGVnZXJzLCBzaXplX3Qgc2l6ZSkKICAgICAgICAgcmV0dXJuOwog
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQogICAgICAgICB3cml0ZUludGVn
ZXIoaW50ZWdlcnNbaV0pOwotICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gbV9jdXJy
ZW50T2JqZWN0UmVmZXJlbmNlKys7CisgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IG1f
Y3VycmVudE9iamVjdFJlZmVyZW5jZSsrOwogICAgIHdyaXRlQXJyYXlPYmplY3Qoc2l6ZSk7CiAg
ICAgbV9jdXJyZW50QWdncmVnYXRlU2l6ZSA9IHNhdmVkQWdncmVnYXRlU2l6ZTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViSFRUUExv
YWRJbmZvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2Vi
SFRUUExvYWRJbmZvLmNwcAppbmRleCA3NzYyZmQ4YzQ5ZmRhMjQyYTM3MDI2YzZkZmU2NzdmMjMw
NTBlMjlkLi42NjM3MWI0YWIxZDJkZDI1NGZiYmRkN2E5ZGU3MmVkNDExOWQ1NjYxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYkhUVFBMb2Fk
SW5mby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9X
ZWJIVFRQTG9hZEluZm8uY3BwCkBAIC0xMDYsNyArMTA2LDcgQEAgc3RhdGljIHZvaWQgYWRkSGVh
ZGVyKEhUVFBIZWFkZXJNYXAqIG1hcCwgY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBjb25zdCBXZWJT
dHJpbmcKICAgICBIVFRQSGVhZGVyTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbWFwLT5hZGQobmFt
ZSwgdmFsdWUpOwogICAgIC8vIEl0IGlzIGltcG9ydGFudCB0aGF0IHZhbHVlcyBhcmUgc2VwYXJh
dGVkIGJ5ICdcbicsIG5vdCBjb21tYSwgb3RoZXJ3aXNlIFNldC1Db29raWUgaGVhZGVyIGlzIG5v
dCBwYXJzZWFibGUuCiAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgcmVzdWx0
Lml0ZXJhdG9yLT5zZWNvbmQgKz0gIlxuIiArIFN0cmluZyh2YWx1ZSk7CisgICAgICAgIHJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUgKz0gIlxuIiArIFN0cmluZyh2YWx1ZSk7CiB9CiAKIHZvaWQgV2Vi
SFRUUExvYWRJbmZvOjphZGRSZXF1ZXN0SGVhZGVyKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgY29u
c3QgV2ViU3RyaW5nJiB2YWx1ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2Nocm9taXVtL3N1cHBvcnQvV2ViVVJMUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlVSTFJlcXVlc3QuY3BwCmluZGV4IGY0MzdiNTE2NDNi
MjM0YjYwOWY3NzI1ZmI4ZDc2ZDczMWY1NjE3ZWEuLmUzODUxMDE0ZmNkZDQ1YmZhY2I0OGI5N2Ji
YTc2ZTMxZDhiNGEwMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9t
aXVtL3N1cHBvcnQvV2ViVVJMUmVxdWVzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vc3VwcG9ydC9XZWJVUkxSZXF1ZXN0LmNwcApAQCAtMTk1LDcgKzE5NSw3IEBA
IHZvaWQgV2ViVVJMUmVxdWVzdDo6dmlzaXRIVFRQSGVhZGVyRmllbGRzKFdlYkhUVFBIZWFkZXJW
aXNpdG9yKiB2aXNpdG9yKSBjb25zdAogewogICAgIGNvbnN0IEhUVFBIZWFkZXJNYXAmIG1hcCA9
IG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlcXVlc3QtPmh0dHBIZWFkZXJGaWVsZHMoKTsKICAgICBm
b3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLmJlZ2luKCk7IGl0ICE9
IG1hcC5lbmQoKTsgKytpdCkKLSAgICAgICAgdmlzaXRvci0+dmlzaXRIZWFkZXIoaXQtPmZpcnN0
LCBpdC0+c2Vjb25kKTsKKyAgICAgICAgdmlzaXRvci0+dmlzaXRIZWFkZXIoaXQtPmtleSwgaXQt
PnZhbHVlKTsKIH0KIAogV2ViSFRUUEJvZHkgV2ViVVJMUmVxdWVzdDo6aHR0cEJvZHkoKSBjb25z
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9X
ZWJVUkxSZXNwb25zZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBw
b3J0L1dlYlVSTFJlc3BvbnNlLmNwcAppbmRleCAxZjliOTY4NjBlMGJhMmU5Mzg1YmU1NTU5NWRh
NmUwOWY1MTUxM2Q0Li44MDU2NjY0OTFiMzU0OGM2YjQ5MTQ5YjFmYTc1MjVhY2JkMzJkOGQ5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlVS
TFJlc3BvbnNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBw
b3J0L1dlYlVSTFJlc3BvbnNlLmNwcApAQCAtMjYxLDcgKzI2MSw3IEBAIHZvaWQgV2ViVVJMUmVz
cG9uc2U6OmFkZEhUVFBIZWFkZXJGaWVsZChjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdl
YlN0cmluZyYKICAgICBIVFRQSGVhZGVyTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0KICAgICAgICAg
Y29uc3RfY2FzdDxIVFRQSGVhZGVyTWFwKj4oJm1hcCktPmFkZChuYW1lLCB2YWx1ZVN0cik7CiAg
ICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNv
bmQgKz0gIiwgIiArIHZhbHVlU3RyOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlICs9
ICIsICIgKyB2YWx1ZVN0cjsKIH0KIAogdm9pZCBXZWJVUkxSZXNwb25zZTo6Y2xlYXJIVFRQSGVh
ZGVyRmllbGQoY29uc3QgV2ViU3RyaW5nJiBuYW1lKQpAQCAtMjc1LDcgKzI3NSw3IEBAIHZvaWQg
V2ViVVJMUmVzcG9uc2U6OnZpc2l0SFRUUEhlYWRlckZpZWxkcyhXZWJIVFRQSGVhZGVyVmlzaXRv
ciogdmlzaXRvcikgY29uc3QKIHsKICAgICBjb25zdCBIVFRQSGVhZGVyTWFwJiBtYXAgPSBtX3By
aXZhdGUtPm1fcmVzb3VyY2VSZXNwb25zZS0+aHR0cEhlYWRlckZpZWxkcygpOwogICAgIGZvciAo
SFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAuYmVnaW4oKTsgaXQgIT0gbWFw
LmVuZCgpOyArK2l0KQotICAgICAgICB2aXNpdG9yLT52aXNpdEhlYWRlcihpdC0+Zmlyc3QsIGl0
LT5zZWNvbmQpOworICAgICAgICB2aXNpdG9yLT52aXNpdEhlYWRlcihpdC0+a2V5LCBpdC0+dmFs
dWUpOwogfQogCiBkb3VibGUgV2ViVVJMUmVzcG9uc2U6Omxhc3RNb2RpZmllZERhdGUoKSBjb25z
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJl
ZnJlc2hNb25pdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3Bs
YXlSZWZyZXNoTW9uaXRvci5jcHAKaW5kZXggMzBkOGQzZDQxZTIyYmRkYTEwNzY0ZDhmNmExZWY0
MDMzYTYyOWRhYS4uZjg5MTAzZjliZTJiNWVlZGQwN2ZhNzQxMWZlMjc5MWE2MjE4MWVlMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hN
b25pdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5
UmVmcmVzaE1vbml0b3IuY3BwCkBAIC0xMzcsNyArMTM3LDcgQEAgRGlzcGxheVJlZnJlc2hNb25p
dG9yKiBEaXNwbGF5UmVmcmVzaE1vbml0b3JNYW5hZ2VyOjplbnN1cmVNb25pdG9yRm9yQ2xpZW50
KERpc3AKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICByZXR1cm4gaXQtPnNl
Y29uZC5nZXQoKTsKKyAgICByZXR1cm4gaXQtPnZhbHVlLmdldCgpOwogfQogCiB2b2lkIERpc3Bs
YXlSZWZyZXNoTW9uaXRvck1hbmFnZXI6OnJlZ2lzdGVyQ2xpZW50KERpc3BsYXlSZWZyZXNoTW9u
aXRvckNsaWVudCogY2xpZW50KQpAQCAtMTU3LDcgKzE1Nyw3IEBAIHZvaWQgRGlzcGxheVJlZnJl
c2hNb25pdG9yTWFuYWdlcjo6dW5yZWdpc3RlckNsaWVudChEaXNwbGF5UmVmcmVzaE1vbml0b3JD
bGllbnQqCiAgICAgaWYgKGl0ID09IG1fbW9uaXRvcnMuZW5kKCkpCiAgICAgICAgIHJldHVybjsK
ICAgICAKLSAgICBEaXNwbGF5UmVmcmVzaE1vbml0b3IqIG1vbml0b3IgPSBpdC0+c2Vjb25kLmdl
dCgpOworICAgIERpc3BsYXlSZWZyZXNoTW9uaXRvciogbW9uaXRvciA9IGl0LT52YWx1ZS5nZXQo
KTsKICAgICBpZiAobW9uaXRvci0+cmVtb3ZlQ2xpZW50KGNsaWVudCkpIHsKICAgICAgICAgaWYg
KCFtb25pdG9yLT5oYXNDbGllbnRzKCkpCiAgICAgICAgICAgICBtX21vbml0b3JzLnJlbW92ZShp
dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2Fj
aGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcApp
bmRleCBiNDYyNjNhOTY2MzIzOWQyZmNmYWQ4YmJiZjMyOWNkNTdkMjZiNGVkLi4wYmMxNjRlMzUx
ZDVmMTgxYTViZmI0NDkxZmYwYTVhYjAxYWJlYWFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAKQEAgLTIxMSw3ICsyMTEsNyBAQCBGb250UGxh
dGZvcm1EYXRhKiBGb250Q2FjaGU6OmdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiBmbwogICAgICAgICBnRm9udFBsYXRmb3JtRGF0YUNhY2hlLT5zZXQoa2V5
LCByZXN1bHQpOwogICAgICAgICBmb3VuZFJlc3VsdCA9IHJlc3VsdDsKICAgICB9IGVsc2Ugewot
ICAgICAgICByZXN1bHQgPSBpdC0+c2Vjb25kOworICAgICAgICByZXN1bHQgPSBpdC0+dmFsdWU7
CiAgICAgICAgIGZvdW5kUmVzdWx0ID0gdHJ1ZTsKICAgICB9CiAKQEAgLTMzMiwyMCArMzMyLDIw
IEBAIFNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldENhY2hlZEZvbnREYXRhKGNvbnN0IEZv
bnRQbGF0Zm9ybURhdGEqIHBsYXRmb3JtRGF0CiAgICAgICAgIHJldHVybiBuZXdWYWx1ZS5maXJz
dDsKICAgICB9CiAKLSAgICBpZiAoIXJlc3VsdC5nZXQoKS0+c2Vjb25kLnNlY29uZCkgewotICAg
ICAgICBBU1NFUlQoZ0luYWN0aXZlRm9udERhdGEtPmNvbnRhaW5zKHJlc3VsdC5nZXQoKS0+c2Vj
b25kLmZpcnN0KSk7Ci0gICAgICAgIGdJbmFjdGl2ZUZvbnREYXRhLT5yZW1vdmUocmVzdWx0Lmdl
dCgpLT5zZWNvbmQuZmlyc3QpOworICAgIGlmICghcmVzdWx0LmdldCgpLT52YWx1ZS5zZWNvbmQp
IHsKKyAgICAgICAgQVNTRVJUKGdJbmFjdGl2ZUZvbnREYXRhLT5jb250YWlucyhyZXN1bHQuZ2V0
KCktPnZhbHVlLmZpcnN0KSk7CisgICAgICAgIGdJbmFjdGl2ZUZvbnREYXRhLT5yZW1vdmUocmVz
dWx0LmdldCgpLT52YWx1ZS5maXJzdCk7CiAgICAgfQogCiAgICAgaWYgKHNob3VsZFJldGFpbiA9
PSBSZXRhaW4pCi0gICAgICAgIHJlc3VsdC5nZXQoKS0+c2Vjb25kLnNlY29uZCsrOwotICAgIGVs
c2UgaWYgKCFyZXN1bHQuZ2V0KCktPnNlY29uZC5zZWNvbmQpIHsKKyAgICAgICAgcmVzdWx0Lmdl
dCgpLT52YWx1ZS5zZWNvbmQrKzsKKyAgICBlbHNlIGlmICghcmVzdWx0LmdldCgpLT52YWx1ZS5z
ZWNvbmQpIHsKICAgICAgICAgLy8gSWYgc2hvdWxkUmV0YWluIGlzIERvTm90UmV0YWluIGFuZCBj
b3VudCBpcyAwLCB3ZSB3YW50IHRvIHJlbW92ZSB0aGUgZm9udERhdGEgZnJvbSAKICAgICAgICAg
Ly8gZ0luYWN0aXZlRm9udERhdGEgKGFib3ZlKSBhbmQgcmUtYWRkIGhlcmUgdG8gdXBkYXRlIExS
VSBwb3NpdGlvbi4KLSAgICAgICAgZ0luYWN0aXZlRm9udERhdGEtPmFkZChyZXN1bHQuZ2V0KCkt
PnNlY29uZC5maXJzdCk7CisgICAgICAgIGdJbmFjdGl2ZUZvbnREYXRhLT5hZGQocmVzdWx0Lmdl
dCgpLT52YWx1ZS5maXJzdCk7CiAgICAgfQogCi0gICAgcmV0dXJuIHJlc3VsdC5nZXQoKS0+c2Vj
b25kLmZpcnN0OworICAgIHJldHVybiByZXN1bHQuZ2V0KCktPnZhbHVlLmZpcnN0OwogfQogCiBT
aW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXROb25SZXRhaW5lZExhc3RSZXNvcnRGYWxsYmFj
a0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pCkBAIC0zNjEsOCAr
MzYxLDggQEAgdm9pZCBGb250Q2FjaGU6OnJlbGVhc2VGb250RGF0YShjb25zdCBTaW1wbGVGb250
RGF0YSogZm9udERhdGEpCiAgICAgRm9udERhdGFDYWNoZTo6aXRlcmF0b3IgaXQgPSBnRm9udERh
dGFDYWNoZS0+ZmluZChmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkpOwogICAgIEFTU0VSVChpdCAh
PSBnRm9udERhdGFDYWNoZS0+ZW5kKCkpOwogCi0gICAgQVNTRVJUKGl0LT5zZWNvbmQuc2Vjb25k
KTsKLSAgICBpZiAoIS0taXQtPnNlY29uZC5zZWNvbmQpCisgICAgQVNTRVJUKGl0LT52YWx1ZS5z
ZWNvbmQpOworICAgIGlmICghLS1pdC0+dmFsdWUuc2Vjb25kKQogICAgICAgICBnSW5hY3RpdmVG
b250RGF0YS0+YWRkKGZvbnREYXRhKTsKIH0KIApAQCAtNDEwLDggKzQxMCw4IEBAIHZvaWQgRm9u
dENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGEoaW50IGNvdW50KQogICAgICAgICBrZXlzVG9S
ZW1vdmUucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShnRm9udFBsYXRmb3JtRGF0YUNhY2hlLT5zaXpl
KCkpOwogICAgICAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGU6Oml0ZXJhdG9yIHBsYXRmb3JtRGF0
YUVuZCA9IGdGb250UGxhdGZvcm1EYXRhQ2FjaGUtPmVuZCgpOwogICAgICAgICBmb3IgKEZvbnRQ
bGF0Zm9ybURhdGFDYWNoZTo6aXRlcmF0b3IgcGxhdGZvcm1EYXRhID0gZ0ZvbnRQbGF0Zm9ybURh
dGFDYWNoZS0+YmVnaW4oKTsgcGxhdGZvcm1EYXRhICE9IHBsYXRmb3JtRGF0YUVuZDsgKytwbGF0
Zm9ybURhdGEpIHsKLSAgICAgICAgICAgIGlmIChwbGF0Zm9ybURhdGEtPnNlY29uZCAmJiAhZ0Zv
bnREYXRhQ2FjaGUtPmNvbnRhaW5zKCpwbGF0Zm9ybURhdGEtPnNlY29uZCkpCi0gICAgICAgICAg
ICAgICAga2V5c1RvUmVtb3ZlLmFwcGVuZChwbGF0Zm9ybURhdGEtPmZpcnN0KTsKKyAgICAgICAg
ICAgIGlmIChwbGF0Zm9ybURhdGEtPnZhbHVlICYmICFnRm9udERhdGFDYWNoZS0+Y29udGFpbnMo
KnBsYXRmb3JtRGF0YS0+dmFsdWUpKQorICAgICAgICAgICAgICAgIGtleXNUb1JlbW92ZS5hcHBl
bmQocGxhdGZvcm1EYXRhLT5rZXkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBzaXpl
X3Qga2V5c1RvUmVtb3ZlQ291bnQgPSBrZXlzVG9SZW1vdmUuc2l6ZSgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlVHJlZU5vZGUuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlVHJlZU5vZGUuY3BwCmlu
ZGV4IDg3ZTkzZmQ5OGZmOGRlZjA5NDgxNmE1MjQzNGU5MDA1ZTg5OTk1OWQuLjYzNWVjN2IyMjlh
YjRjYTk5MThiNTVmZWRkN2ZhOTg3YjQxOTI2NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZVRyZWVOb2RlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2VUcmVlTm9kZS5jcHAKQEAgLTc0LDcgKzc0
LDcgQEAgc2l6ZV90IEdseXBoUGFnZVRyZWVOb2RlOjp0cmVlR2x5cGhQYWdlQ291bnQoKQogICAg
IGlmIChyb290cykgewogICAgICAgICBIYXNoTWFwPGludCwgR2x5cGhQYWdlVHJlZU5vZGUqPjo6
aXRlcmF0b3IgZW5kID0gcm9vdHMtPmVuZCgpOwogICAgICAgICBmb3IgKEhhc2hNYXA8aW50LCBH
bHlwaFBhZ2VUcmVlTm9kZSo+OjppdGVyYXRvciBpdCA9IHJvb3RzLT5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpCi0gICAgICAgICAgICBjb3VudCArPSBpdC0+c2Vjb25kLT5wYWdlQ291bnQoKTsK
KyAgICAgICAgICAgIGNvdW50ICs9IGl0LT52YWx1ZS0+cGFnZUNvdW50KCk7CiAgICAgfQogICAg
IAogICAgIGlmIChwYWdlWmVyb1Jvb3QpCkBAIC04OCw3ICs4OCw3IEBAIHNpemVfdCBHbHlwaFBh
Z2VUcmVlTm9kZTo6cGFnZUNvdW50KCkgY29uc3QKICAgICBzaXplX3QgY291bnQgPSBtX3BhZ2Ug
JiYgbV9wYWdlLT5vd25lcigpID09IHRoaXMgPyAxIDogMDsKICAgICBIYXNoTWFwPGNvbnN0IEZv
bnREYXRhKiwgR2x5cGhQYWdlVHJlZU5vZGUqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9jaGls
ZHJlbi5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8Y29uc3QgRm9udERhdGEqLCBHbHlwaFBhZ2VU
cmVlTm9kZSo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fY2hpbGRyZW4uYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KQotICAgICAgICBjb3VudCArPSBpdC0+c2Vjb25kLT5wYWdlQ291bnQoKTsKKyAg
ICAgICAgY291bnQgKz0gaXQtPnZhbHVlLT5wYWdlQ291bnQoKTsKIAogICAgIHJldHVybiBjb3Vu
dDsKIH0KQEAgLTk5LDcgKzk5LDcgQEAgdm9pZCBHbHlwaFBhZ2VUcmVlTm9kZTo6cHJ1bmVUcmVl
Q3VzdG9tRm9udERhdGEoY29uc3QgRm9udERhdGEqIGZvbnREYXRhKQogICAgIGlmIChyb290cykg
ewogICAgICAgICBIYXNoTWFwPGludCwgR2x5cGhQYWdlVHJlZU5vZGUqPjo6aXRlcmF0b3IgZW5k
ID0gcm9vdHMtPmVuZCgpOwogICAgICAgICBmb3IgKEhhc2hNYXA8aW50LCBHbHlwaFBhZ2VUcmVl
Tm9kZSo+OjppdGVyYXRvciBpdCA9IHJvb3RzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0g
ICAgICAgICAgICBpdC0+c2Vjb25kLT5wcnVuZUN1c3RvbUZvbnREYXRhKGZvbnREYXRhKTsKKyAg
ICAgICAgICAgIGl0LT52YWx1ZS0+cHJ1bmVDdXN0b21Gb250RGF0YShmb250RGF0YSk7CiAgICAg
fQogICAgIAogICAgIGlmIChwYWdlWmVyb1Jvb3QpCkBAIC0xMTEsNyArMTExLDcgQEAgdm9pZCBH
bHlwaFBhZ2VUcmVlTm9kZTo6cHJ1bmVUcmVlRm9udERhdGEoY29uc3QgU2ltcGxlRm9udERhdGEq
IGZvbnREYXRhKQogICAgIGlmIChyb290cykgewogICAgICAgICBIYXNoTWFwPGludCwgR2x5cGhQ
YWdlVHJlZU5vZGUqPjo6aXRlcmF0b3IgZW5kID0gcm9vdHMtPmVuZCgpOwogICAgICAgICBmb3Ig
KEhhc2hNYXA8aW50LCBHbHlwaFBhZ2VUcmVlTm9kZSo+OjppdGVyYXRvciBpdCA9IHJvb3RzLT5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBpdC0+c2Vjb25kLT5wcnVuZUZv
bnREYXRhKGZvbnREYXRhKTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+cHJ1bmVGb250RGF0YShm
b250RGF0YSk7CiAgICAgfQogICAgIAogICAgIGlmIChwYWdlWmVyb1Jvb3QpCkBAIC0zNjIsNyAr
MzYyLDcgQEAgdm9pZCBHbHlwaFBhZ2VUcmVlTm9kZTo6cHJ1bmVDdXN0b21Gb250RGF0YShjb25z
dCBGb250RGF0YSogZm9udERhdGEpCiAgICAgICAgIHJldHVybjsKICAgICBIYXNoTWFwPGNvbnN0
IEZvbnREYXRhKiwgR2x5cGhQYWdlVHJlZU5vZGUqPjo6aXRlcmF0b3IgZW5kID0gbV9jaGlsZHJl
bi5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8Y29uc3QgRm9udERhdGEqLCBHbHlwaFBhZ2VUcmVl
Tm9kZSo+OjppdGVyYXRvciBpdCA9IG1fY2hpbGRyZW4uYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KQotICAgICAgICBpdC0+c2Vjb25kLT5wcnVuZUN1c3RvbUZvbnREYXRhKGZvbnREYXRhKTsKKyAg
ICAgICAgaXQtPnZhbHVlLT5wcnVuZUN1c3RvbUZvbnREYXRhKGZvbnREYXRhKTsKIH0KIAogdm9p
ZCBHbHlwaFBhZ2VUcmVlTm9kZTo6cHJ1bmVGb250RGF0YShjb25zdCBTaW1wbGVGb250RGF0YSog
Zm9udERhdGEsIHVuc2lnbmVkIGxldmVsKQpAQCAtMzc4LDcgKzM3OCw3IEBAIHZvaWQgR2x5cGhQ
YWdlVHJlZU5vZGU6OnBydW5lRm9udERhdGEoY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRh
LCB1bnNpZ25lZCBsCiAgICAgLy8gUHJ1bmUgYW55IGJyYW5jaCB0aGF0IGNvbnRhaW5zIHRoaXMg
Rm9udERhdGEuCiAgICAgSGFzaE1hcDxjb25zdCBGb250RGF0YSosIEdseXBoUGFnZVRyZWVOb2Rl
Kj46Oml0ZXJhdG9yIGNoaWxkID0gbV9jaGlsZHJlbi5maW5kKGZvbnREYXRhKTsKICAgICBpZiAo
Y2hpbGQgIT0gbV9jaGlsZHJlbi5lbmQoKSkgewotICAgICAgICBHbHlwaFBhZ2VUcmVlTm9kZSog
bm9kZSA9IGNoaWxkLT5zZWNvbmQ7CisgICAgICAgIEdseXBoUGFnZVRyZWVOb2RlKiBub2RlID0g
Y2hpbGQtPnZhbHVlOwogICAgICAgICBtX2NoaWxkcmVuLnJlbW92ZShmb250RGF0YSk7CiAgICAg
ICAgIHVuc2lnbmVkIGN1c3RvbUZvbnRDb3VudCA9IG5vZGUtPm1fY3VzdG9tRm9udENvdW50Owog
ICAgICAgICBkZWxldGUgbm9kZTsKQEAgLTM5NCw3ICszOTQsNyBAQCB2b2lkIEdseXBoUGFnZVRy
ZWVOb2RlOjpwcnVuZUZvbnREYXRhKGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwgdW5z
aWduZWQgbAogCiAgICAgSGFzaE1hcDxjb25zdCBGb250RGF0YSosIEdseXBoUGFnZVRyZWVOb2Rl
Kj46Oml0ZXJhdG9yIGVuZCA9IG1fY2hpbGRyZW4uZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPGNv
bnN0IEZvbnREYXRhKiwgR2x5cGhQYWdlVHJlZU5vZGUqPjo6aXRlcmF0b3IgaXQgPSBtX2NoaWxk
cmVuLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+cHJ1bmVG
b250RGF0YShmb250RGF0YSwgbGV2ZWwpOworICAgICAgICBpdC0+dmFsdWUtPnBydW5lRm9udERh
dGEoZm9udERhdGEsIGxldmVsKTsKIH0KIAogI2lmbmRlZiBOREVCVUcKQEAgLTQwNiw4ICs0MDYs
OCBAQCB2b2lkIEdseXBoUGFnZVRyZWVOb2RlOjpwcnVuZUZvbnREYXRhKGNvbnN0IFNpbXBsZUZv
bnREYXRhKiBmb250RGF0YSwgdW5zaWduZWQgbAogCiAgICAgICAgIEhhc2hNYXA8Y29uc3QgRm9u
dERhdGEqLCBHbHlwaFBhZ2VUcmVlTm9kZSo+OjppdGVyYXRvciBlbmQgPSBtX2NoaWxkcmVuLmVu
ZCgpOwogICAgICAgICBmb3IgKEhhc2hNYXA8Y29uc3QgRm9udERhdGEqLCBHbHlwaFBhZ2VUcmVl
Tm9kZSo+OjppdGVyYXRvciBpdCA9IG1fY2hpbGRyZW4uYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7Ci0gICAgICAgICAgICBwcmludGYoIiVzXHQlcCAlc1xuIiwgaW5kZW50LmRhdGEoKSwgaXQt
PmZpcnN0LCBpdC0+Zmlyc3QtPmRlc2NyaXB0aW9uKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAg
ICAgICBpdC0+c2Vjb25kLT5zaG93U3VidHJlZSgpOworICAgICAgICAgICAgcHJpbnRmKCIlc1x0
JXAgJXNcbiIsIGluZGVudC5kYXRhKCksIGl0LT5rZXksIGl0LT5rZXktPmRlc2NyaXB0aW9uKCku
dXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBpdC0+dmFsdWUtPnNob3dTdWJ0cmVlKCk7CiAg
ICAgICAgIH0KICAgICAgICAgaWYgKG1fc3lzdGVtRmFsbGJhY2tDaGlsZCkgewogICAgICAgICAg
ICAgcHJpbnRmKCIlc1x0KiBmYWxsYmFja1xuIiwgaW5kZW50LmRhdGEoKSk7CkBAIC00MjUsOCAr
NDI1LDggQEAgdm9pZCBzaG93R2x5cGhQYWdlVHJlZXMoKQogICAgIHNob3dHbHlwaFBhZ2VUcmVl
KDApOwogICAgIEhhc2hNYXA8aW50LCBXZWJDb3JlOjpHbHlwaFBhZ2VUcmVlTm9kZSo+OjppdGVy
YXRvciBlbmQgPSBXZWJDb3JlOjpHbHlwaFBhZ2VUcmVlTm9kZTo6cm9vdHMtPmVuZCgpOwogICAg
IGZvciAoSGFzaE1hcDxpbnQsIFdlYkNvcmU6OkdseXBoUGFnZVRyZWVOb2RlKj46Oml0ZXJhdG9y
IGl0ID0gV2ViQ29yZTo6R2x5cGhQYWdlVHJlZU5vZGU6OnJvb3RzLT5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKLSAgICAgICAgcHJpbnRmKCJcblBhZ2UgJWQ6XG4iLCBpdC0+Zmlyc3QpOwot
ICAgICAgICBzaG93R2x5cGhQYWdlVHJlZShpdC0+Zmlyc3QpOworICAgICAgICBwcmludGYoIlxu
UGFnZSAlZDpcbiIsIGl0LT5rZXkpOworICAgICAgICBzaG93R2x5cGhQYWdlVHJlZShpdC0+a2V5
KTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1RpbGVkQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1RpbGVkQmFja2luZ1N0b3JlLmNwcAppbmRleCBiNDg1ZGNmMTdmNWViZWYyOWE5NjZlY2M2
M2Q2YTE5MDgzMmQ3MzA0Li5kZjdmYTdkY2IzYjk5YWZhZjJhYmU2ZGNlMWUyZmQxYTdlNTc5ZGM1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tp
bmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRC
YWNraW5nU3RvcmUuY3BwCkBAIC0xMTYsOSArMTE2LDkgQEAgdm9pZCBUaWxlZEJhY2tpbmdTdG9y
ZTo6dXBkYXRlVGlsZUJ1ZmZlcnMoKQogICAgIFZlY3RvcjxSZWZQdHI8VGlsZT4gPiBkaXJ0eVRp
bGVzOwogICAgIFRpbGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fdGlsZXMuZW5kKCk7CiAgICAgZm9y
IChUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7Ci0gICAgICAgIGlmICghaXQtPnNlY29uZC0+aXNEaXJ0eSgpKQorICAgICAgICBpZiAoIWl0
LT52YWx1ZS0+aXNEaXJ0eSgpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGRpcnR5
VGlsZXMuYXBwZW5kKGl0LT5zZWNvbmQpOworICAgICAgICBkaXJ0eVRpbGVzLmFwcGVuZChpdC0+
dmFsdWUpOwogICAgIH0KIAogICAgIGlmIChkaXJ0eVRpbGVzLmlzRW1wdHkoKSkgewpAQCAtNDAx
LDEzICs0MDEsMTMgQEAgYm9vbCBUaWxlZEJhY2tpbmdTdG9yZTo6cmVzaXplRWRnZVRpbGVzKCkK
ICAgICBWZWN0b3I8VGlsZTo6Q29vcmRpbmF0ZT4gdGlsZXNUb1JlbW92ZTsKICAgICBUaWxlTWFw
OjppdGVyYXRvciBlbmQgPSBtX3RpbGVzLmVuZCgpOwogICAgIGZvciAoVGlsZU1hcDo6aXRlcmF0
b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBUaWxl
OjpDb29yZGluYXRlIHRpbGVDb29yZGluYXRlID0gaXQtPnNlY29uZC0+Y29vcmRpbmF0ZSgpOwot
ICAgICAgICBJbnRSZWN0IHRpbGVSZWN0ID0gaXQtPnNlY29uZC0+cmVjdCgpOworICAgICAgICBU
aWxlOjpDb29yZGluYXRlIHRpbGVDb29yZGluYXRlID0gaXQtPnZhbHVlLT5jb29yZGluYXRlKCk7
CisgICAgICAgIEludFJlY3QgdGlsZVJlY3QgPSBpdC0+dmFsdWUtPnJlY3QoKTsKICAgICAgICAg
SW50UmVjdCBleHBlY3RlZFRpbGVSZWN0ID0gdGlsZVJlY3RGb3JDb29yZGluYXRlKHRpbGVDb29y
ZGluYXRlKTsKICAgICAgICAgaWYgKGV4cGVjdGVkVGlsZVJlY3QuaXNFbXB0eSgpKQogICAgICAg
ICAgICAgdGlsZXNUb1JlbW92ZS5hcHBlbmQodGlsZUNvb3JkaW5hdGUpOwogICAgICAgICBlbHNl
IGlmIChleHBlY3RlZFRpbGVSZWN0ICE9IHRpbGVSZWN0KSB7Ci0gICAgICAgICAgICBpdC0+c2Vj
b25kLT5yZXNpemUoZXhwZWN0ZWRUaWxlUmVjdC5zaXplKCkpOworICAgICAgICAgICAgaXQtPnZh
bHVlLT5yZXNpemUoZXhwZWN0ZWRUaWxlUmVjdC5zaXplKCkpOwogICAgICAgICAgICAgd2FzUmVz
aXplZCA9IHRydWU7CiAgICAgICAgIH0KICAgICB9CkBAIC00MjYsOCArNDI2LDggQEAgdm9pZCBU
aWxlZEJhY2tpbmdTdG9yZTo6c2V0S2VlcFJlY3QoY29uc3QgSW50UmVjdCYga2VlcFJlY3QpCiAg
ICAgVmVjdG9yPFRpbGU6OkNvb3JkaW5hdGU+IHRvUmVtb3ZlOwogICAgIFRpbGVNYXA6Oml0ZXJh
dG9yIGVuZCA9IG1fdGlsZXMuZW5kKCk7CiAgICAgZm9yIChUaWxlTWFwOjppdGVyYXRvciBpdCA9
IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFRpbGU6OkNvb3Jk
aW5hdGUgY29vcmRpbmF0ZSA9IGl0LT5zZWNvbmQtPmNvb3JkaW5hdGUoKTsKLSAgICAgICAgRmxv
YXRSZWN0IHRpbGVSZWN0ID0gaXQtPnNlY29uZC0+cmVjdCgpOworICAgICAgICBUaWxlOjpDb29y
ZGluYXRlIGNvb3JkaW5hdGUgPSBpdC0+dmFsdWUtPmNvb3JkaW5hdGUoKTsKKyAgICAgICAgRmxv
YXRSZWN0IHRpbGVSZWN0ID0gaXQtPnZhbHVlLT5yZWN0KCk7CiAgICAgICAgIGlmICghdGlsZVJl
Y3QuaW50ZXJzZWN0cyhrZWVwUmVjdEYpKQogICAgICAgICAgICAgdG9SZW1vdmUuYXBwZW5kKGNv
b3JkaW5hdGUpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2F2Zm91bmRhdGlvbi9jZi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25DRi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vY2YvTWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0YuY3BwCmluZGV4IDgxZDg2Mjk4MTUyOWRjYjVl
NGFiMmQwYzAwNjY3MmRlNzZhODgyZjEuLjc4Y2FjNjcyZTQxOGMxNTkwMzNjMGExZmY4OGRmZjJk
NmExMTk1NzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9jZi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25DRi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL2NmL01lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGLmNwcApAQCAtOTE1LDcgKzkxNSw3IEBAIEFWRldyYXBw
ZXIqIEFWRldyYXBwZXI6OmF2ZldyYXBwZXJGb3JDYWxsYmFja0NvbnRleHQodm9pZCogY29udGV4
dCkKICAgICBpZiAoaXQgPT0gbWFwKCkuZW5kKCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAg
cmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgcmV0dXJuIGl0LT52YWx1ZTsKIH0KIAogdm9pZCBBVkZX
cmFwcGVyOjpzY2hlZHVsZURpc2Nvbm5lY3RBbmREZWxldGUoKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclRpbGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJUaWxlci5jcHAK
aW5kZXggOWY1YzZhZjNlODUwNjFhOTcyZDA0MzExYmU5MDMxNWU5NWI1ZTBkYS4uNmRmMWRhM2I3
YzgwMDRjYTIxODIxNWFiZDRmYmIyNzE5YzVlODYwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclRpbGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyVGlsZXIuY3BwCkBA
IC0zNjksOCArMzY5LDggQEAgdm9pZCBMYXllclRpbGVyOjpsYXllclZpc2liaWxpdHlDaGFuZ2Vk
KExheWVyQ29tcG9zaXRpbmdUaHJlYWQqLCBib29sIHZpc2libGUpCiAgICAgfQogCiAgICAgZm9y
IChUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0gbV90aWxlcy5l
bmQoKTsgKytpdCkgewotICAgICAgICBUaWxlSW5kZXggaW5kZXggPSAoKml0KS5maXJzdDsKLSAg
ICAgICAgTGF5ZXJUaWxlKiB0aWxlID0gKCppdCkuc2Vjb25kOworICAgICAgICBUaWxlSW5kZXgg
aW5kZXggPSAoKml0KS5rZXk7CisgICAgICAgIExheWVyVGlsZSogdGlsZSA9ICgqaXQpLnZhbHVl
OwogICAgICAgICB0aWxlLT5zZXRWaXNpYmxlKGZhbHNlKTsKICAgICB9CiB9CkBAIC0zODQsMjEg
KzM4NCwyMSBAQCB2b2lkIExheWVyVGlsZXI6OnVwbG9hZFRleHR1cmVzSWZOZWVkZWQoTGF5ZXJD
b21wb3NpdGluZ1RocmVhZCopCiAKICAgICBUaWxlSm9ic01hcDo6Y29uc3RfaXRlcmF0b3IgdGls
ZUpvYnNJdGVyRW5kID0gdGlsZUpvYnNNYXAuZW5kKCk7CiAgICAgZm9yIChUaWxlSm9ic01hcDo6
Y29uc3RfaXRlcmF0b3IgdGlsZUpvYnNJdGVyID0gdGlsZUpvYnNNYXAuYmVnaW4oKTsgdGlsZUpv
YnNJdGVyICE9IHRpbGVKb2JzSXRlckVuZDsgKyt0aWxlSm9ic0l0ZXIpIHsKLSAgICAgICAgSW50
UG9pbnQgb3JpZ2luID0gb3JpZ2luT2ZUaWxlKHRpbGVKb2JzSXRlci0+Zmlyc3QpOworICAgICAg
ICBJbnRQb2ludCBvcmlnaW4gPSBvcmlnaW5PZlRpbGUodGlsZUpvYnNJdGVyLT5rZXkpOwogCi0g
ICAgICAgIExheWVyVGlsZSogdGlsZSA9IG1fdGlsZXMuZ2V0KHRpbGVKb2JzSXRlci0+Zmlyc3Qp
OworICAgICAgICBMYXllclRpbGUqIHRpbGUgPSBtX3RpbGVzLmdldCh0aWxlSm9ic0l0ZXItPmtl
eSk7CiAgICAgICAgIGlmICghdGlsZSkgewogICAgICAgICAgICAgaWYgKG9yaWdpbi54KCkgPj0g
bV9yZXF1aXJlZFRleHR1cmVTaXplLndpZHRoKCkgfHwgb3JpZ2luLnkoKSA+PSBtX3JlcXVpcmVk
VGV4dHVyZVNpemUuaGVpZ2h0KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICB0aWxlID0gbmV3IExheWVyVGlsZSgpOwotICAgICAgICAgICAgbV90aWxlcy5hZGQodGls
ZUpvYnNJdGVyLT5maXJzdCwgdGlsZSk7CisgICAgICAgICAgICBtX3RpbGVzLmFkZCh0aWxlSm9i
c0l0ZXItPmtleSwgdGlsZSk7CiAgICAgICAgIH0KIAogICAgICAgICBJbnRSZWN0IHRpbGVSZWN0
KG9yaWdpbiwgdGlsZVNpemUoKSk7CiAgICAgICAgIHRpbGVSZWN0LnNldFdpZHRoKG1pbihtX3Jl
cXVpcmVkVGV4dHVyZVNpemUud2lkdGgoKSAtIHRpbGVSZWN0LngoKSwgdGlsZVJlY3Qud2lkdGgo
KSkpOwogICAgICAgICB0aWxlUmVjdC5zZXRIZWlnaHQobWluKG1fcmVxdWlyZWRUZXh0dXJlU2l6
ZS5oZWlnaHQoKSAtIHRpbGVSZWN0LnkoKSwgdGlsZVJlY3QuaGVpZ2h0KCkpKTsKIAotICAgICAg
ICBwZXJmb3JtVGlsZUpvYih0aWxlLCAqdGlsZUpvYnNJdGVyLT5zZWNvbmQsIHRpbGVSZWN0KTsK
KyAgICAgICAgcGVyZm9ybVRpbGVKb2IodGlsZSwgKnRpbGVKb2JzSXRlci0+dmFsdWUsIHRpbGVS
ZWN0KTsKICAgICB9CiAKICAgICBtX3RleHR1cmVKb2JzLmNsZWFyKCk7CkBAIC00NDEsMTEgKzQ0
MSwxMSBAQCB2b2lkIExheWVyVGlsZXI6OmFkZFRpbGVKb2IoY29uc3QgVGlsZUluZGV4JiBpbmRl
eCwgY29uc3QgVGV4dHVyZUpvYiYgam9iLCBUaWxlSgogICAgICAgICByZXR1cm47CiAKICAgICAv
LyBJbiB0aGlzIGNhc2Ugd2UgbGVhdmUgdGhlIHByZXZpb3VzIGpvYi4KLSAgICBpZiAoam9iLm1f
dHlwZSA9PSBUZXh0dXJlSm9iOjpEaXJ0eUNvbnRlbnRzICYmIHJlc3VsdC5pdGVyYXRvci0+c2Vj
b25kLT5tX3R5cGUgPT0gVGV4dHVyZUpvYjo6RGlzY2FyZENvbnRlbnRzKQorICAgIGlmIChqb2Iu
bV90eXBlID09IFRleHR1cmVKb2I6OkRpcnR5Q29udGVudHMgJiYgcmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZS0+bV90eXBlID09IFRleHR1cmVKb2I6OkRpc2NhcmRDb250ZW50cykKICAgICAgICAgcmV0
dXJuOwogCiAgICAgLy8gT3ZlcnJpZGUgdGhlIHByZXZpb3VzIGpvYi4KLSAgICByZXN1bHQuaXRl
cmF0b3ItPnNlY29uZCA9ICZqb2I7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9ICZqb2I7
CiB9CiAKIHZvaWQgTGF5ZXJUaWxlcjo6cGVyZm9ybVRpbGVKb2IoTGF5ZXJUaWxlKiB0aWxlLCBj
b25zdCBUZXh0dXJlSm9iJiBqb2IsIGNvbnN0IEludFJlY3QmIHRpbGVSZWN0KQpAQCAtNjMwLDcg
KzYzMCw3IEBAIHZvaWQgTGF5ZXJUaWxlcjo6ZGVsZXRlVGV4dHVyZXMoTGF5ZXJDb21wb3NpdGlu
Z1RocmVhZCopCiAgICAgLy8gdG91Y2hpbmcgc29tZSBXZWJLaXQgdGhyZWFkIHN0YXRlLgogICAg
IGlmIChtX3RpbGVzLnNpemUoKSkgewogICAgICAgICBmb3IgKFRpbGVNYXA6Oml0ZXJhdG9yIGl0
ID0gbV90aWxlcy5iZWdpbigpOyBpdCAhPSBtX3RpbGVzLmVuZCgpOyArK2l0KQotICAgICAgICAg
ICAgKCppdCkuc2Vjb25kLT5kaXNjYXJkQ29udGVudHMoKTsKKyAgICAgICAgICAgICgqaXQpLnZh
bHVlLT5kaXNjYXJkQ29udGVudHMoKTsKICAgICAgICAgbV90aWxlcy5jbGVhcigpOwogCiAgICAg
ICAgIG1fY29udGVudHNEaXJ0eSA9IHRydWU7CkBAIC02NDcsNyArNjQ3LDcgQEAgdm9pZCBMYXll
clRpbGVyOjpwcnVuZVRleHR1cmVzKCkKICAgICAvLyBQcnVuZSB0aWxlcyB0aGF0IGFyZSBubyBs
b25nZXIgbmVlZGVkLgogICAgIFZlY3RvcjxUaWxlSW5kZXg+IHRpbGVzVG9EZWxldGU7CiAgICAg
Zm9yIChUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0gbV90aWxl
cy5lbmQoKTsgKytpdCkgewotICAgICAgICBUaWxlSW5kZXggaW5kZXggPSAoKml0KS5maXJzdDsK
KyAgICAgICAgVGlsZUluZGV4IGluZGV4ID0gKCppdCkua2V5OwogCiAgICAgICAgIEludFBvaW50
IG9yaWdpbiA9IG9yaWdpbk9mVGlsZShpbmRleCk7CiAgICAgICAgIGlmIChvcmlnaW4ueCgpID49
IG1fcmVxdWlyZWRUZXh0dXJlU2l6ZS53aWR0aCgpIHx8IG9yaWdpbi55KCkgPj0gbV9yZXF1aXJl
ZFRleHR1cmVTaXplLmhlaWdodCgpKQpAQCAtNzM5LDcgKzczOSw3IEBAIHZvaWQgTGF5ZXJUaWxl
cjo6YmluZENvbnRlbnRzVGV4dHVyZShMYXllckNvbXBvc2l0aW5nVGhyZWFkKikKICAgICBpZiAo
bV90aWxlcy5zaXplKCkgIT0gMSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY29uc3QgTGF5ZXJU
aWxlKiB0aWxlID0gbV90aWxlcy5iZWdpbigpLT5zZWNvbmQ7CisgICAgY29uc3QgTGF5ZXJUaWxl
KiB0aWxlID0gbV90aWxlcy5iZWdpbigpLT52YWx1ZTsKIAogICAgIEFTU0VSVCh0aWxlLT5oYXNU
ZXh0dXJlKCkpOwogICAgIGlmICghdGlsZS0+aGFzVGV4dHVyZSgpKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9UZXh0dXJlQ2FjaGVDb21w
b3NpdGluZ1RocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFj
a2JlcnJ5L1RleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkLmNwcAppbmRleCA1YjZiYjg3MzY0
OWY5YTg4YmNiNzhlMjBiMTdhMThlYzM1NGNiNzUxLi5kNjVjNGRhZGRiYmIyNTk4ZWIwZmEyNDE3
MWM0ZTZhZjE0ZGQ3NGM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ibGFja2JlcnJ5L1RleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L1RleHR1cmVDYWNoZUNv
bXBvc2l0aW5nVGhyZWFkLmNwcApAQCAtMjAyLDEwICsyMDIsMTAgQEAgdm9pZCBUZXh0dXJlQ2Fj
aGVDb21wb3NpdGluZ1RocmVhZDo6c2V0TWVtb3J5VXNhZ2Uoc2l6ZV90IG1lbW9yeVVzYWdlKQog
UGFzc1JlZlB0cjxUZXh0dXJlPiBUZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZDo6dGV4dHVy
ZUZvclRpbGVkQ29udGVudHMoY29uc3QgU2tCaXRtYXAmIGNvbnRlbnRzLCBjb25zdCBJbnRSZWN0
JiB0aWxlUmVjdCwgY29uc3QgVGlsZUluZGV4JiBpbmRleCwgYm9vbCBpc09wYXF1ZSkKIHsKICAg
ICBIYXNoTWFwPENvbnRlbnRzS2V5LCBUZXh0dXJlTWFwPjo6aXRlcmF0b3IgaXQgPSBtX2NhY2hl
LmFkZChrZXkoY29udGVudHMpLCBUZXh0dXJlTWFwKCkpLml0ZXJhdG9yOwotICAgIFRleHR1cmVN
YXAmIG1hcCA9ICgqaXQpLnNlY29uZDsKKyAgICBUZXh0dXJlTWFwJiBtYXAgPSAoKml0KS52YWx1
ZTsKIAogICAgIFRleHR1cmVNYXA6Oml0ZXJhdG9yIGp0ID0gbWFwLmFkZChpbmRleCwgUmVmUHRy
PFRleHR1cmU+KCkpLml0ZXJhdG9yOwotICAgIFJlZlB0cjxUZXh0dXJlPiB0ZXh0dXJlID0gKCpq
dCkuc2Vjb25kOworICAgIFJlZlB0cjxUZXh0dXJlPiB0ZXh0dXJlID0gKCpqdCkudmFsdWU7CiAg
ICAgaWYgKCF0ZXh0dXJlKSB7CiAgICAgICAgIHRleHR1cmUgPSBjcmVhdGVUZXh0dXJlKCk7CiAj
aWYgREVCVUdfVEVYVFVSRV9NRU1PUllfVVNBR0UKQEAgLTI0NCw3ICsyNDQsNyBAQCBQYXNzUmVm
UHRyPFRleHR1cmU+IFRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkOjp0ZXh0dXJlRm9yQ29s
b3IoY29uc3QgQ29sb3ImCiAjZW5kaWYKICAgICAgICAgbV9jb2xvcnMuc2V0KGNvbG9yLCB0ZXh0
dXJlKTsKICAgICB9IGVsc2UKLSAgICAgICAgdGV4dHVyZSA9ICgqaXQpLnNlY29uZDsKKyAgICAg
ICAgdGV4dHVyZSA9ICgqaXQpLnZhbHVlOwogCiAgICAgLy8gQ29sb3IgdGV4dHVyZXMgY2FuJ3Qg
YmUgZXZpY3RlZCwgc28gbm8gbmVlZCBmb3IgVGV4dHVyZVByb3RlY3Rvci4KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5j
cHAKaW5kZXggZGNkYjU4NmQwY2JmYjMyOTM2MWQ2ZWRiNTlmY2NhYzBlYjMwYjIyNi4uNTBkMzNh
MDc5YTJiZmQ1ZGY5YjhkNmZiNjZiZDkxMWE3MGQyZmRkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCkBAIC00
NzcsNyArNDc3LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6Om1vdmVPckNvcHlBbmltYXRpb25z
KE1vdmVPckNvcHkgb3BlcmF0aW9uLCBQbGF0Zm9ybUNBTGF5ZXIKICAgICAvLyBMb29rIGZvciBy
dW5uaW5nIGFuaW1hdGlvbnMgYWZmZWN0aW5nIHRoaXMgcHJvcGVydHkuCiAgICAgQW5pbWF0aW9u
c01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9ydW5uaW5nQW5pbWF0aW9ucy5lbmQoKTsKICAg
ICBmb3IgKEFuaW1hdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9ydW5uaW5nQW5pbWF0
aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgY29uc3QgVmVjdG9yPExh
eWVyUHJvcGVydHlBbmltYXRpb24+JiBwcm9wZXJ0eUFuaW1hdGlvbnMgPSBpdC0+c2Vjb25kOwor
ICAgICAgICBjb25zdCBWZWN0b3I8TGF5ZXJQcm9wZXJ0eUFuaW1hdGlvbj4mIHByb3BlcnR5QW5p
bWF0aW9ucyA9IGl0LT52YWx1ZTsKICAgICAgICAgc2l6ZV90IG51bUFuaW1hdGlvbnMgPSBwcm9w
ZXJ0eUFuaW1hdGlvbnMuc2l6ZSgpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51
bUFuaW1hdGlvbnM7ICsraSkgewogICAgICAgICAgICAgY29uc3QgTGF5ZXJQcm9wZXJ0eUFuaW1h
dGlvbiYgY3VyckFuaW1hdGlvbiA9IHByb3BlcnR5QW5pbWF0aW9uc1tpXTsKQEAgLTcxOSw3ICs3
MTksNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6cGF1c2VBbmltYXRpb24oY29uc3QgU3RyaW5n
JiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZU9mZgogCiAgICAgQW5pbWF0aW9uc1RvUHJvY2Vz
c01hcDo6aXRlcmF0b3IgaXQgPSBtX2FuaW1hdGlvbnNUb1Byb2Nlc3MuZmluZChhbmltYXRpb25O
YW1lKTsKICAgICBpZiAoaXQgIT0gbV9hbmltYXRpb25zVG9Qcm9jZXNzLmVuZCgpKSB7Ci0gICAg
ICAgIEFuaW1hdGlvblByb2Nlc3NpbmdBY3Rpb24mIHByb2Nlc3NpbmdJbmZvID0gaXQtPnNlY29u
ZDsKKyAgICAgICAgQW5pbWF0aW9uUHJvY2Vzc2luZ0FjdGlvbiYgcHJvY2Vzc2luZ0luZm8gPSBp
dC0+dmFsdWU7CiAgICAgICAgIC8vIElmIGFuIGFuaW1hdGlvbiBpcyBzY2hlZHVsZWQgdG8gYmUg
cmVtb3ZlZCwgZG9uJ3QgY2hhbmdlIHRoZSByZW1vdmUgdG8gYSBwYXVzZS4KICAgICAgICAgaWYg
KHByb2Nlc3NpbmdJbmZvLmFjdGlvbiAhPSBSZW1vdmUpCiAgICAgICAgICAgICBwcm9jZXNzaW5n
SW5mby5hY3Rpb24gPSBQYXVzZTsKQEAgLTg1NCw3ICs4NTQsNyBAQCB2b2lkIEdyYXBoaWNzTGF5
ZXJDQTo6bGF5ZXJEaWREaXNwbGF5KFBsYXRmb3JtTGF5ZXIqIGxheWVyKQogICAgIGlmIChsYXll
ckNsb25lTWFwKSB7CiAgICAgICAgIExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBsYXll
ckNsb25lTWFwLT5lbmQoKTsKICAgICAgICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBsYXllckNsb25lTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAg
ICAgIFBsYXRmb3JtQ0FMYXllciogY3VyckNsb25lID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAg
ICAgICAgIFBsYXRmb3JtQ0FMYXllciogY3VyckNsb25lID0gaXQtPnZhbHVlLmdldCgpOwogICAg
ICAgICAgICAgaWYgKCFjdXJyQ2xvbmUpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKQEAg
LTExOTYsMTAgKzExOTYsMTAgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUdlb21ldHJ5
KGZsb2F0IHBhZ2VTY2FsZUZhY3RvciwgY29uc3QgRmxvYXRQb2ludCYgcG8KICAgICAgICAgaWYg
KExheWVyTWFwKiBsYXllckNsb25lTWFwID0gbV9zdHJ1Y3R1cmFsTGF5ZXJDbG9uZXMuZ2V0KCkp
IHsKICAgICAgICAgICAgIExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBsYXllckNsb25l
TWFwLT5lbmQoKTsKICAgICAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAg
ICAgICAgUGxhdGZvcm1DQUxheWVyKiBjbG9uZSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAg
ICAgICAgICAgUGxhdGZvcm1DQUxheWVyKiBjbG9uZSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAg
ICAgICAgICAgICBGbG9hdFBvaW50IGNsb25lUG9zaXRpb24gPSBsYXllclBvc2l0aW9uOwogCi0g
ICAgICAgICAgICAgICAgaWYgKG1fcmVwbGljYUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9u
ZShpdC0+Zmlyc3QpKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fcmVwbGljYUxheWVyICYmIGlz
UmVwbGljYXRlZFJvb3RDbG9uZShpdC0+a2V5KSkgewogICAgICAgICAgICAgICAgICAgICAvLyBN
YWludGFpbiB0aGUgc3BlY2lhbC1jYXNlIHBvc2l0aW9uIGZvciB0aGUgcm9vdCBvZiBhIGNsb25l
IHN1YnRyZWUsCiAgICAgICAgICAgICAgICAgICAgIC8vIHdoaWNoIHdlIHNldCB1cCBpbiByZXBs
aWNhdGVkTGF5ZXJSb290KCkuCiAgICAgICAgICAgICAgICAgICAgIGNsb25lUG9zaXRpb24gPSBw
b3NpdGlvbkZvckNsb25lUm9vdExheWVyKCk7CkBAIC0xMjIzLDEwICsxMjIzLDEwIEBAIHZvaWQg
R3JhcGhpY3NMYXllckNBOjp1cGRhdGVHZW9tZXRyeShmbG9hdCBwYWdlU2NhbGVGYWN0b3IsIGNv
bnN0IEZsb2F0UG9pbnQmIHBvCiAgICAgaWYgKExheWVyTWFwKiBsYXllckNsb25lTWFwID0gbV9s
YXllckNsb25lcy5nZXQoKSkgewogICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0g
ICAgICAgICAgICBQbGF0Zm9ybUNBTGF5ZXIqIGNsb25lID0gaXQtPnNlY29uZC5nZXQoKTsKKyAg
ICAgICAgICAgIFBsYXRmb3JtQ0FMYXllciogY2xvbmUgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAg
ICAgICAgICBGbG9hdFBvaW50IGNsb25lUG9zaXRpb24gPSBhZGp1c3RlZFBvc2l0aW9uOwogCi0g
ICAgICAgICAgICBpZiAoIW1fc3RydWN0dXJhbExheWVyICYmIG1fcmVwbGljYUxheWVyICYmIGlz
UmVwbGljYXRlZFJvb3RDbG9uZShpdC0+Zmlyc3QpKSB7CisgICAgICAgICAgICBpZiAoIW1fc3Ry
dWN0dXJhbExheWVyICYmIG1fcmVwbGljYUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9uZShp
dC0+a2V5KSkgewogICAgICAgICAgICAgICAgIC8vIE1haW50YWluIHRoZSBzcGVjaWFsLWNhc2Ug
cG9zaXRpb24gZm9yIHRoZSByb290IG9mIGEgY2xvbmUgc3VidHJlZSwKICAgICAgICAgICAgICAg
ICAvLyB3aGljaCB3ZSBzZXQgdXAgaW4gcmVwbGljYXRlZExheWVyUm9vdCgpLgogICAgICAgICAg
ICAgICAgIGNsb25lUG9zaXRpb24gPSBwb3NpdGlvbkZvckNsb25lUm9vdExheWVyKCk7CkBAIC0x
MjQ2LDggKzEyNDYsOCBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlVHJhbnNmb3JtKCkK
ICAgICBpZiAoTGF5ZXJNYXAqIGxheWVyQ2xvbmVNYXAgPSBwcmltYXJ5TGF5ZXJDbG9uZXMoKSkg
ewogICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+
ZW5kKCk7CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJD
bG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBQbGF0Zm9y
bUNBTGF5ZXIqIGN1cnJMYXllciA9IGl0LT5zZWNvbmQuZ2V0KCk7Ci0gICAgICAgICAgICBpZiAo
bV9yZXBsaWNhTGF5ZXIgJiYgaXNSZXBsaWNhdGVkUm9vdENsb25lKGl0LT5maXJzdCkpIHsKKyAg
ICAgICAgICAgIFBsYXRmb3JtQ0FMYXllciogY3VyckxheWVyID0gaXQtPnZhbHVlLmdldCgpOwor
ICAgICAgICAgICAgaWYgKG1fcmVwbGljYUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9uZShp
dC0+a2V5KSkgewogICAgICAgICAgICAgICAgIC8vIE1haW50YWluIHRoZSBzcGVjaWFsLWNhc2Ug
dHJhbnNmb3JtIGZvciB0aGUgcm9vdCBvZiBhIGNsb25lIHN1YnRyZWUsCiAgICAgICAgICAgICAg
ICAgLy8gd2hpY2ggd2Ugc2V0IHVwIGluIHJlcGxpY2F0ZWRMYXllclJvb3QoKS4KICAgICAgICAg
ICAgICAgICBjdXJyTGF5ZXItPnNldFRyYW5zZm9ybShUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpKTsK
QEAgLTEyNjQsNyArMTI2NCw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVDaGlsZHJl
blRyYW5zZm9ybSgpCiAgICAgaWYgKExheWVyTWFwKiBsYXllckNsb25lTWFwID0gcHJpbWFyeUxh
eWVyQ2xvbmVzKCkpIHsKICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxh
eWVyQ2xvbmVNYXAtPmVuZCgpOwogICAgICAgICBmb3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IGxheWVyQ2xvbmVNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAg
ICAgIGl0LT5zZWNvbmQtPnNldFN1YmxheWVyVHJhbnNmb3JtKG1fY2hpbGRyZW5UcmFuc2Zvcm0p
OworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRTdWJsYXllclRyYW5zZm9ybShtX2NoaWxkcmVu
VHJhbnNmb3JtKTsKICAgICB9CiB9CiAKQEAgLTEyNzUsNyArMTI3NSw3IEBAIHZvaWQgR3JhcGhp
Y3NMYXllckNBOjp1cGRhdGVNYXNrc1RvQm91bmRzKCkKICAgICBpZiAoTGF5ZXJNYXAqIGxheWVy
Q2xvbmVNYXAgPSBtX2xheWVyQ2xvbmVzLmdldCgpKSB7CiAgICAgICAgIExheWVyTWFwOjpjb25z
dF9pdGVyYXRvciBlbmQgPSBsYXllckNsb25lTWFwLT5lbmQoKTsKICAgICAgICAgZm9yIChMYXll
ck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXllckNsb25lTWFwLT5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpCi0gICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRNYXNrc1RvQm91bmRzKG1fbWFz
a3NUb0JvdW5kcyk7CisgICAgICAgICAgICBpdC0+dmFsdWUtPnNldE1hc2tzVG9Cb3VuZHMobV9t
YXNrc1RvQm91bmRzKTsKICAgICB9CiAKICAgICB1cGRhdGVEZWJ1Z0luZGljYXRvcnMoKTsKQEAg
LTEyOTMsNyArMTI5Myw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVDb250ZW50c1Zp
c2liaWxpdHkoKQogICAgICAgICBpZiAoTGF5ZXJNYXAqIGxheWVyQ2xvbmVNYXAgPSBtX2xheWVy
Q2xvbmVzLmdldCgpKSB7CiAgICAgICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAgICAgICAgICBmb3IgKExheWVyTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IGxheWVyQ2xvbmVNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkK
LSAgICAgICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRDb250ZW50cygwKTsKKyAgICAgICAgICAg
ICAgICBpdC0+dmFsdWUtPnNldENvbnRlbnRzKDApOwogICAgICAgICB9CiAgICAgfQogfQpAQCAt
MTMwNSw3ICsxMzA1LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUNvbnRlbnRzT3Bh
cXVlKCkKICAgICBpZiAoTGF5ZXJNYXAqIGxheWVyQ2xvbmVNYXAgPSBtX2xheWVyQ2xvbmVzLmdl
dCgpKSB7CiAgICAgICAgIExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBsYXllckNsb25l
TWFwLT5lbmQoKTsKICAgICAgICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBs
YXllckNsb25lTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBpdC0+
c2Vjb25kLT5zZXRPcGFxdWUobV9jb250ZW50c09wYXF1ZSk7CisgICAgICAgICAgICBpdC0+dmFs
dWUtPnNldE9wYXF1ZShtX2NvbnRlbnRzT3BhcXVlKTsKICAgICB9CiB9CiAKQEAgLTEzMTcsNyAr
MTMxNyw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVCYWNrZmFjZVZpc2liaWxpdHko
KQogICAgICAgICBpZiAoTGF5ZXJNYXAqIGxheWVyQ2xvbmVNYXAgPSBtX3N0cnVjdHVyYWxMYXll
ckNsb25lcy5nZXQoKSkgewogICAgICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IGxheWVyQ2xvbmVNYXAtPmVuZCgpOwogICAgICAgICAgICAgZm9yIChMYXllck1hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBsYXllckNsb25lTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
Ci0gICAgICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0RG91YmxlU2lkZWQobV9iYWNrZmFjZVZp
c2liaWxpdHkpOworICAgICAgICAgICAgICAgIGl0LT52YWx1ZS0+c2V0RG91YmxlU2lkZWQobV9i
YWNrZmFjZVZpc2liaWxpdHkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xMzI2LDcgKzEzMjYs
NyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlQmFja2ZhY2VWaXNpYmlsaXR5KCkKICAg
ICBpZiAoTGF5ZXJNYXAqIGxheWVyQ2xvbmVNYXAgPSBtX2xheWVyQ2xvbmVzLmdldCgpKSB7CiAg
ICAgICAgIExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBsYXllckNsb25lTWFwLT5lbmQo
KTsKICAgICAgICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXllckNsb25l
TWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBpdC0+c2Vjb25kLT5z
ZXREb3VibGVTaWRlZChtX2JhY2tmYWNlVmlzaWJpbGl0eSk7CisgICAgICAgICAgICBpdC0+dmFs
dWUtPnNldERvdWJsZVNpZGVkKG1fYmFja2ZhY2VWaXNpYmlsaXR5KTsKICAgICB9CiB9CiAKQEAg
LTEzMzgsMTAgKzEzMzgsMTAgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUZpbHRlcnMo
KQogICAgIGlmIChMYXllck1hcCogbGF5ZXJDbG9uZU1hcCA9IHByaW1hcnlMYXllckNsb25lcygp
KSB7CiAgICAgICAgIExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBsYXllckNsb25lTWFw
LT5lbmQoKTsKICAgICAgICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXll
ckNsb25lTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGlmICht
X3JlcGxpY2FMYXllciAmJiBpc1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQtPmZpcnN0KSkKKyAgICAg
ICAgICAgIGlmIChtX3JlcGxpY2FMYXllciAmJiBpc1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQtPmtl
eSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIGl0LT5zZWNvbmQt
PnNldEZpbHRlcnMobV9maWx0ZXJzKTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+c2V0RmlsdGVy
cyhtX2ZpbHRlcnMpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMTQzMCw3ICsxNDMwLDcgQEAg
dm9pZCBHcmFwaGljc0xheWVyQ0E6OmVuc3VyZVN0cnVjdHVyYWxMYXllcihTdHJ1Y3R1cmFsTGF5
ZXJQdXJwb3NlIHB1cnBvc2UsIGZsb2EKICAgICBpZiAobV9sYXllckNsb25lcykgewogICAgICAg
ICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9sYXllckNsb25lcy0+ZW5kKCk7CiAg
ICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9sYXllckNsb25lcy0+
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBQbGF0Zm9ybUNBTGF5ZXIq
IGN1cnJMYXllciA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBQbGF0Zm9ybUNBTGF5
ZXIqIGN1cnJMYXllciA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGN1cnJMYXllci0+
c2V0UG9zaXRpb24ocG9pbnQpOwogICAgICAgICAgICAgY3VyckxheWVyLT5zZXRBbmNob3JQb2lu
dChhbmNob3JQb2ludCk7CiAgICAgICAgICAgICBjdXJyTGF5ZXItPnNldFRyYW5zZm9ybShUcmFu
c2Zvcm1hdGlvbk1hdHJpeCgpKTsKQEAgLTE0NzUsNyArMTQ3NSw3IEBAIHZvaWQgR3JhcGhpY3NM
YXllckNBOjp1cGRhdGVMYXllckRyYXdzQ29udGVudChmbG9hdCBwYWdlU2NhbGVGYWN0b3IsIGNv
bnN0IEZsb2F0CiAgICAgICAgIGlmIChtX2xheWVyQ2xvbmVzKSB7CiAgICAgICAgICAgICBMYXll
ck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9sYXllckNsb25lcy0+ZW5kKCk7CiAgICAgICAg
ICAgICBmb3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fbGF5ZXJDbG9uZXMtPmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRD
b250ZW50cygwKTsKKyAgICAgICAgICAgICAgICBpdC0+dmFsdWUtPnNldENvbnRlbnRzKDApOwog
ICAgICAgICB9CiAgICAgfQogICAgIHVwZGF0ZURlYnVnSW5kaWNhdG9ycygpOwpAQCAtMTUyNiw3
ICsxNTI2LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUNvbnRlbnRzSW1hZ2UoKQog
ICAgICAgICBpZiAobV9jb250ZW50c0xheWVyQ2xvbmVzKSB7CiAgICAgICAgICAgICBMYXllck1h
cDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9jb250ZW50c0xheWVyQ2xvbmVzLT5lbmQoKTsKICAg
ICAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9jb250ZW50c0xh
eWVyQ2xvbmVzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICAgICAgaXQt
PnNlY29uZC0+c2V0Q29udGVudHMobV9jb250ZW50c0xheWVyLT5jb250ZW50cygpKTsKKyAgICAg
ICAgICAgICAgICBpdC0+dmFsdWUtPnNldENvbnRlbnRzKG1fY29udGVudHNMYXllci0+Y29udGVu
dHMoKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHVwZGF0ZUNvbnRlbnRzUmVjdCgp
OwpAQCAtMTU3MCw4ICsxNTcwLDggQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUNvbnRl
bnRzUmVjdCgpCiAgICAgaWYgKG1fY29udGVudHNMYXllckNsb25lcykgewogICAgICAgICBMYXll
ck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9jb250ZW50c0xheWVyQ2xvbmVzLT5lbmQoKTsK
ICAgICAgICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2NvbnRlbnRzTGF5
ZXJDbG9uZXMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgaXQtPnNl
Y29uZC0+c2V0UG9zaXRpb24ocG9pbnQpOwotICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0Qm91
bmRzKHJlY3QpOworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRQb3NpdGlvbihwb2ludCk7Cisg
ICAgICAgICAgICBpdC0+dmFsdWUtPnNldEJvdW5kcyhyZWN0KTsKICAgICAgICAgfQogICAgIH0K
IH0KQEAgLTE1ODYsOCArMTU4Niw4IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVNYXNr
TGF5ZXIoKQogICAgIGlmIChMYXllck1hcCogbGF5ZXJDbG9uZU1hcCA9IG1fbGF5ZXJDbG9uZXMu
Z2V0KCkpIHsKICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxheWVyQ2xv
bmVNYXAtPmVuZCgpOwogICAgICAgICBmb3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9
IGxheWVyQ2xvbmVNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeyAgICAgICAgICAgIAot
ICAgICAgICAgICAgUGxhdGZvcm1DQUxheWVyKiBtYXNrQ2xvbmUgPSBtYXNrTGF5ZXJDbG9uZU1h
cCA/IG1hc2tMYXllckNsb25lTWFwLT5nZXQoaXQtPmZpcnN0KS5nZXQoKSA6IDA7Ci0gICAgICAg
ICAgICBpdC0+c2Vjb25kLT5zZXRNYXNrKG1hc2tDbG9uZSk7CisgICAgICAgICAgICBQbGF0Zm9y
bUNBTGF5ZXIqIG1hc2tDbG9uZSA9IG1hc2tMYXllckNsb25lTWFwID8gbWFza0xheWVyQ2xvbmVN
YXAtPmdldChpdC0+a2V5KS5nZXQoKSA6IDA7CisgICAgICAgICAgICBpdC0+dmFsdWUtPnNldE1h
c2sobWFza0Nsb25lKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTE2NTEsMTMgKzE2NTEsMTMg
QEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUxheWVyQW5pbWF0aW9ucygpCiAgICAgaWYg
KG1fYW5pbWF0aW9uc1RvUHJvY2Vzcy5zaXplKCkpIHsKICAgICAgICAgQW5pbWF0aW9uc1RvUHJv
Y2Vzc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9hbmltYXRpb25zVG9Qcm9jZXNzLmVuZCgp
OwogICAgICAgICBmb3IgKEFuaW1hdGlvbnNUb1Byb2Nlc3NNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV9hbmltYXRpb25zVG9Qcm9jZXNzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAg
ICAgICAgICAgY29uc3QgU3RyaW5nJiBjdXJyQW5pbWF0aW9uTmFtZSA9IGl0LT5maXJzdDsKKyAg
ICAgICAgICAgIGNvbnN0IFN0cmluZyYgY3VyckFuaW1hdGlvbk5hbWUgPSBpdC0+a2V5OwogICAg
ICAgICAgICAgQW5pbWF0aW9uc01hcDo6aXRlcmF0b3IgYW5pbWF0aW9uSXQgPSBtX3J1bm5pbmdB
bmltYXRpb25zLmZpbmQoY3VyckFuaW1hdGlvbk5hbWUpOwogICAgICAgICAgICAgaWYgKGFuaW1h
dGlvbkl0ID09IG1fcnVubmluZ0FuaW1hdGlvbnMuZW5kKCkpCiAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAKLSAgICAgICAgICAgIGNvbnN0IEFuaW1hdGlvblByb2Nlc3NpbmdBY3Rpb24mIHBy
b2Nlc3NpbmdJbmZvID0gaXQtPnNlY29uZDsKLSAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxMYXll
clByb3BlcnR5QW5pbWF0aW9uPiYgYW5pbWF0aW9ucyA9IGFuaW1hdGlvbkl0LT5zZWNvbmQ7Cisg
ICAgICAgICAgICBjb25zdCBBbmltYXRpb25Qcm9jZXNzaW5nQWN0aW9uJiBwcm9jZXNzaW5nSW5m
byA9IGl0LT52YWx1ZTsKKyAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxMYXllclByb3BlcnR5QW5p
bWF0aW9uPiYgYW5pbWF0aW9ucyA9IGFuaW1hdGlvbkl0LT52YWx1ZTsKICAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgYW5pbWF0aW9ucy5zaXplKCk7ICsraSkgewogICAgICAgICAg
ICAgICAgIGNvbnN0IExheWVyUHJvcGVydHlBbmltYXRpb24mIGN1cnJBbmltYXRpb24gPSBhbmlt
YXRpb25zW2ldOwogICAgICAgICAgICAgICAgIHN3aXRjaCAocHJvY2Vzc2luZ0luZm8uYWN0aW9u
KSB7CkBAIC0xNjg5LDcgKzE2ODksNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlTGF5
ZXJBbmltYXRpb25zKCkKICAgICAgICAgICAgICAgICBhbmltYXRpb25zLmFwcGVuZChwZW5kaW5n
QW5pbWF0aW9uKTsKICAgICAgICAgICAgICAgICBtX3J1bm5pbmdBbmltYXRpb25zLmFkZChwZW5k
aW5nQW5pbWF0aW9uLm1fbmFtZSwgYW5pbWF0aW9ucyk7CiAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgIFZlY3RvcjxMYXllclByb3BlcnR5QW5pbWF0aW9uPiYgYW5pbWF0aW9u
cyA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICAgICAgVmVjdG9yPExheWVyUHJvcGVydHlBbmlt
YXRpb24+JiBhbmltYXRpb25zID0gaXQtPnZhbHVlOwogICAgICAgICAgICAgICAgIGFuaW1hdGlv
bnMuYXBwZW5kKHBlbmRpbmdBbmltYXRpb24pOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBA
IC0xNzE0LDExICsxNzE0LDExIEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpzZXRBbmltYXRpb25P
bkxheWVyKFBsYXRmb3JtQ0FBbmltYXRpb24qIGNhQW5pbSwgQW5pbWF0ZWRQCiAgICAgICAgIExh
eWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBsYXllckNsb25lTWFwLT5lbmQoKTsKICAgICAg
ICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXllckNsb25lTWFwLT5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIC8vIFNraXAgaW1tZWRpYXRlIHJl
cGxpY2FzLCBzaW5jZSB0aGV5IG1vdmUgd2l0aCB0aGUgb3JpZ2luYWwuCi0gICAgICAgICAgICBp
ZiAobV9yZXBsaWNhTGF5ZXIgJiYgaXNSZXBsaWNhdGVkUm9vdENsb25lKGl0LT5maXJzdCkpCisg
ICAgICAgICAgICBpZiAobV9yZXBsaWNhTGF5ZXIgJiYgaXNSZXBsaWNhdGVkUm9vdENsb25lKGl0
LT5rZXkpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBpdC0+c2Vj
b25kLT5yZW1vdmVBbmltYXRpb25Gb3JLZXkoYW5pbWF0aW9uSUQpOwotICAgICAgICAgICAgaXQt
PnNlY29uZC0+YWRkQW5pbWF0aW9uRm9yS2V5KGFuaW1hdGlvbklELCBjYUFuaW0pOworICAgICAg
ICAgICAgaXQtPnZhbHVlLT5yZW1vdmVBbmltYXRpb25Gb3JLZXkoYW5pbWF0aW9uSUQpOworICAg
ICAgICAgICAgaXQtPnZhbHVlLT5hZGRBbmltYXRpb25Gb3JLZXkoYW5pbWF0aW9uSUQsIGNhQW5p
bSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0xNzUzLDEwICsxNzUzLDEwIEBAIGJvb2wgR3Jh
cGhpY3NMYXllckNBOjpyZW1vdmVDQUFuaW1hdGlvbkZyb21MYXllcihBbmltYXRlZFByb3BlcnR5
SUQgcHJvcGVydHksIGNvCiAgICAgICAgIExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBs
YXllckNsb25lTWFwLT5lbmQoKTsKICAgICAgICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBsYXllckNsb25lTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAg
ICAgICAgIC8vIFNraXAgaW1tZWRpYXRlIHJlcGxpY2FzLCBzaW5jZSB0aGV5IG1vdmUgd2l0aCB0
aGUgb3JpZ2luYWwuCi0gICAgICAgICAgICBpZiAobV9yZXBsaWNhTGF5ZXIgJiYgaXNSZXBsaWNh
dGVkUm9vdENsb25lKGl0LT5maXJzdCkpCisgICAgICAgICAgICBpZiAobV9yZXBsaWNhTGF5ZXIg
JiYgaXNSZXBsaWNhdGVkUm9vdENsb25lKGl0LT5rZXkpKQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogCi0gICAgICAgICAgICBpdC0+c2Vjb25kIC0+cmVtb3ZlQW5pbWF0aW9uRm9yS2V5KGFu
aW1hdGlvbklEKTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+cmVtb3ZlQW5pbWF0aW9uRm9yS2V5
KGFuaW1hdGlvbklEKTsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKQEAgLTE3
ODUsOSArMTc4NSw5IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpwYXVzZUNBQW5pbWF0aW9uT25M
YXllcihBbmltYXRlZFByb3BlcnR5SUQgcHJvcGVydHksIGNvbnN0CiAgICAgICAgIExheWVyTWFw
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBsYXllckNsb25lTWFwLT5lbmQoKTsKICAgICAgICAgZm9y
IChMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXllckNsb25lTWFwLT5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIC8vIFNraXAgaW1tZWRpYXRlIHJlcGxpY2Fz
LCBzaW5jZSB0aGV5IG1vdmUgd2l0aCB0aGUgb3JpZ2luYWwuCi0gICAgICAgICAgICBpZiAobV9y
ZXBsaWNhTGF5ZXIgJiYgaXNSZXBsaWNhdGVkUm9vdENsb25lKGl0LT5maXJzdCkpCisgICAgICAg
ICAgICBpZiAobV9yZXBsaWNhTGF5ZXIgJiYgaXNSZXBsaWNhdGVkUm9vdENsb25lKGl0LT5rZXkp
KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaXQtPnNlY29uZC0+YWRk
QW5pbWF0aW9uRm9yS2V5KGFuaW1hdGlvbklELCBuZXdBbmltLmdldCgpKTsKKyAgICAgICAgICAg
IGl0LT52YWx1ZS0+YWRkQW5pbWF0aW9uRm9yS2V5KGFuaW1hdGlvbklELCBuZXdBbmltLmdldCgp
KTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTIzMTEsOCArMjMxMSw4IEBAIHZvaWQgR3JhcGhp
Y3NMYXllckNBOjpzdXNwZW5kQW5pbWF0aW9ucyhkb3VibGUgdGltZSkKICAgICBpZiAoTGF5ZXJN
YXAqIGxheWVyQ2xvbmVNYXAgPSBwcmltYXJ5TGF5ZXJDbG9uZXMoKSkgewogICAgICAgICBMYXll
ck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAgICAg
IGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRTcGVlZCgw
KTsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNldFRpbWVPZmZzZXQodCk7CisgICAgICAgICAg
ICBpdC0+dmFsdWUtPnNldFNwZWVkKDApOworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRUaW1l
T2Zmc2V0KHQpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMjMyNiw4ICsyMzI2LDggQEAgdm9p
ZCBHcmFwaGljc0xheWVyQ0E6OnJlc3VtZUFuaW1hdGlvbnMoKQogICAgIGlmIChMYXllck1hcCog
bGF5ZXJDbG9uZU1hcCA9IHByaW1hcnlMYXllckNsb25lcygpKSB7CiAgICAgICAgIExheWVyTWFw
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBsYXllckNsb25lTWFwLT5lbmQoKTsKICAgICAgICAgZm9y
IChMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXllckNsb25lTWFwLT5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNldFNwZWVkKDEpOwot
ICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0VGltZU9mZnNldCgwKTsKKyAgICAgICAgICAgIGl0
LT52YWx1ZS0+c2V0U3BlZWQoMSk7CisgICAgICAgICAgICBpdC0+dmFsdWUtPnNldFRpbWVPZmZz
ZXQoMCk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0yNTM3LDEzICsyNTM3LDEzIEBAIFBhc3NS
ZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBHcmFwaGljc0xheWVyQ0E6OmZpbmRPck1ha2VDbG9uZShD
bG9uZUlEIGNsb25lSUQsIFBsCiAgICAgTGF5ZXJNYXA6OkFkZFJlc3VsdCBhZGRSZXN1bHQgPSBj
bG9uZXMtPmFkZChjbG9uZUlELCBkdW1teSk7CiAgICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRy
eSkgewogICAgICAgICAvLyBWYWx1ZSB3YXMgbm90IGFkZGVkLCBzbyBpdCBleGlzdHMgYWxyZWFk
eS4KLSAgICAgICAgcmVzdWx0TGF5ZXIgPSBhZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZC5nZXQo
KTsKKyAgICAgICAgcmVzdWx0TGF5ZXIgPSBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgp
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIHJlc3VsdExheWVyID0gY2xvbmVMYXllcihzb3VyY2VM
YXllciwgY2xvbmVMZXZlbCk7CiAjaWZuZGVmIE5ERUJVRwogICAgICAgICByZXN1bHRMYXllci0+
c2V0TmFtZShTdHJpbmc6OmZvcm1hdCgiQ2xvbmUgJWQgb2YgbGF5ZXIgJXAiLCBjbG9uZUlEWzBV
XSwgc291cmNlTGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSkpOwogI2VuZGlmCi0gICAgICAgIGFkZFJl
c3VsdC5pdGVyYXRvci0+c2Vjb25kID0gcmVzdWx0TGF5ZXI7CisgICAgICAgIGFkZFJlc3VsdC5p
dGVyYXRvci0+dmFsdWUgPSByZXN1bHRMYXllcjsKICAgICB9CiAKICAgICByZXR1cm4gcmVzdWx0
TGF5ZXI7CkBAIC0yNzM1LDkgKzI3MzUsOSBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c2V0T3Bh
Y2l0eUludGVybmFsKGZsb2F0IGFjY3VtdWxhdGVkT3BhY2l0eSkKICAgICBpZiAobGF5ZXJDbG9u
ZU1hcCkgewogICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9u
ZU1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBp
ZiAobV9yZXBsaWNhTGF5ZXIgJiYgaXNSZXBsaWNhdGVkUm9vdENsb25lKGl0LT5maXJzdCkpCisg
ICAgICAgICAgICBpZiAobV9yZXBsaWNhTGF5ZXIgJiYgaXNSZXBsaWNhdGVkUm9vdENsb25lKGl0
LT5rZXkpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaXQtPnNlY29u
ZC0+c2V0T3BhY2l0eShtX29wYWNpdHkpOworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRPcGFj
aXR5KG1fb3BhY2l0eSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0yNzQ5LDEwICsyNzQ5LDEw
IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVPcGFjaXR5T25MYXllcigpCiAgICAgaWYg
KExheWVyTWFwKiBsYXllckNsb25lTWFwID0gcHJpbWFyeUxheWVyQ2xvbmVzKCkpIHsKICAgICAg
ICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxheWVyQ2xvbmVNYXAtPmVuZCgpOwog
ICAgICAgICBmb3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGxheWVyQ2xvbmVNYXAt
PmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgaWYgKG1fcmVwbGljYUxh
eWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9uZShpdC0+Zmlyc3QpKQorICAgICAgICAgICAgaWYg
KG1fcmVwbGljYUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9uZShpdC0+a2V5KSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0T3BhY2l0
eShtX29wYWNpdHkpOworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRPcGFjaXR5KG1fb3BhY2l0
eSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1RpbGVDYWNoZS5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9UaWxlQ2FjaGUubW0KaW5kZXggNjcwMjc5NzlkMmYy
ZDk5ZmFhODFiMDQwZTlhY2UxYjA2ZTZkMTNmOS4uMTlhNjY1ZTFhNTk4ZjQzNzc0NWEyZDMyZmE5
ZDE5NTUwOWJkMTRhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2EvbWFjL1RpbGVDYWNoZS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYS9tYWMvVGlsZUNhY2hlLm1tCkBAIC05Niw3ICs5Niw3IEBAIHZvaWQgVGlsZUNhY2hl
Ojp0aWxlQ2FjaGVMYXllckJvdW5kc0NoYW5nZWQoKQogdm9pZCBUaWxlQ2FjaGU6OnNldE5lZWRz
RGlzcGxheSgpCiB7CiAgICAgZm9yIChUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGls
ZXMuYmVnaW4oKSwgZW5kID0gbV90aWxlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAg
ICBbaXQtPnNlY29uZC5nZXQoKSBzZXROZWVkc0Rpc3BsYXldOworICAgICAgICBbaXQtPnZhbHVl
LmdldCgpIHNldE5lZWRzRGlzcGxheV07CiB9CiAKIHZvaWQgVGlsZUNhY2hlOjpzZXROZWVkc0Rp
c3BsYXlJblJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKQEAgLTE3Myw5ICsxNzMsOSBAQCB2b2lk
IFRpbGVDYWNoZTo6c2V0U2NhbGUoQ0dGbG9hdCBzY2FsZSkKICAgICByZXZhbGlkYXRlVGlsZXMo
KTsKIAogICAgIGZvciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2lu
KCksIGVuZCA9IG1fdGlsZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBbaXQt
PnNlY29uZC5nZXQoKSBzZXRDb250ZW50c1NjYWxlOmRldmljZVNjYWxlRmFjdG9yXTsKKyAgICAg
ICAgW2l0LT52YWx1ZS5nZXQoKSBzZXRDb250ZW50c1NjYWxlOmRldmljZVNjYWxlRmFjdG9yXTsK
IAotICAgICAgICBJbnRSZWN0IHRpbGVSZWN0ID0gcmVjdEZvclRpbGVJbmRleChpdC0+Zmlyc3Qp
OworICAgICAgICBJbnRSZWN0IHRpbGVSZWN0ID0gcmVjdEZvclRpbGVJbmRleChpdC0+a2V5KTsK
ICAgICAgICAgRmxvYXRSZWN0IHNjYWxlZFRpbGVSZWN0ID0gdGlsZVJlY3Q7CiAKICAgICAgICAg
c2NhbGVkVGlsZVJlY3Quc2NhbGUoMSAvIG1fc2NhbGUpOwpAQCAtMTk1LDcgKzE5NSw3IEBAIHZv
aWQgVGlsZUNhY2hlOjpzZXRBY2NlbGVyYXRlc0RyYXdpbmcoYm9vbCBhY2NlbGVyYXRlc0RyYXdp
bmcpCiAgICAgbV9hY2NlbGVyYXRlc0RyYXdpbmcgPSBhY2NlbGVyYXRlc0RyYXdpbmc7CiAKICAg
ICBmb3IgKFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpLCBlbmQg
PSBtX3RpbGVzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIFtpdC0+c2Vjb25kLmdl
dCgpIHNldEFjY2VsZXJhdGVzRHJhd2luZzptX2FjY2VsZXJhdGVzRHJhd2luZ107CisgICAgICAg
IFtpdC0+dmFsdWUuZ2V0KCkgc2V0QWNjZWxlcmF0ZXNEcmF3aW5nOm1fYWNjZWxlcmF0ZXNEcmF3
aW5nXTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGFjY2VsZXJhdGVzRHJhd2luZyk7CiAjZW5k
aWYKQEAgLTI0MCw3ICsyNDAsNyBAQCB2b2lkIFRpbGVDYWNoZTo6c2V0VGlsZURlYnVnQm9yZGVy
V2lkdGgoZmxvYXQgYm9yZGVyV2lkdGgpCiAKICAgICBtX3RpbGVEZWJ1Z0JvcmRlcldpZHRoID0g
Ym9yZGVyV2lkdGg7CiAgICAgZm9yIChUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGls
ZXMuYmVnaW4oKSwgZW5kID0gbV90aWxlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAg
ICBbaXQtPnNlY29uZC5nZXQoKSBzZXRCb3JkZXJXaWR0aDptX3RpbGVEZWJ1Z0JvcmRlcldpZHRo
XTsKKyAgICAgICAgW2l0LT52YWx1ZS5nZXQoKSBzZXRCb3JkZXJXaWR0aDptX3RpbGVEZWJ1Z0Jv
cmRlcldpZHRoXTsKIH0KIAogdm9pZCBUaWxlQ2FjaGU6OnNldFRpbGVEZWJ1Z0JvcmRlckNvbG9y
KENHQ29sb3JSZWYgYm9yZGVyQ29sb3IpCkBAIC0yNTAsNyArMjUwLDcgQEAgdm9pZCBUaWxlQ2Fj
aGU6OnNldFRpbGVEZWJ1Z0JvcmRlckNvbG9yKENHQ29sb3JSZWYgYm9yZGVyQ29sb3IpCiAKICAg
ICBtX3RpbGVEZWJ1Z0JvcmRlckNvbG9yID0gYm9yZGVyQ29sb3I7CiAgICAgZm9yIChUaWxlTWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKSwgZW5kID0gbV90aWxlcy5lbmQo
KTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBbaXQtPnNlY29uZC5nZXQoKSBzZXRCb3JkZXJD
b2xvcjptX3RpbGVEZWJ1Z0JvcmRlckNvbG9yLmdldCgpXTsKKyAgICAgICAgW2l0LT52YWx1ZS5n
ZXQoKSBzZXRCb3JkZXJDb2xvcjptX3RpbGVEZWJ1Z0JvcmRlckNvbG9yLmdldCgpXTsKIH0KIAog
SW50UmVjdCBUaWxlQ2FjaGU6OmJvdW5kcygpIGNvbnN0CkBAIC0zNTYsOSArMzU2LDkgQEAgdm9p
ZCBUaWxlQ2FjaGU6OnJldmFsaWRhdGVUaWxlcygpCiAgICAgVmVjdG9yPFRpbGVJbmRleD4gdGls
ZXNUb1JlbW92ZTsKIAogICAgIGZvciAoVGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJl
Z2luKCksIGVuZCA9IG1fdGlsZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBj
b25zdCBUaWxlSW5kZXgmIHRpbGVJbmRleCA9IGl0LT5maXJzdDsKKyAgICAgICAgY29uc3QgVGls
ZUluZGV4JiB0aWxlSW5kZXggPSBpdC0+a2V5OwogCi0gICAgICAgIFdlYlRpbGVMYXllciogdGls
ZUxheWVyID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgV2ViVGlsZUxheWVyKiB0aWxlTGF5
ZXIgPSBpdC0+dmFsdWUuZ2V0KCk7CiAKICAgICAgICAgaWYgKCFyZWN0Rm9yVGlsZUluZGV4KHRp
bGVJbmRleCkuaW50ZXJzZWN0cyh0aWxlQ292ZXJhZ2VSZWN0KSkgewogICAgICAgICAgICAgLy8g
UmVtb3ZlIHRoaXMgbGF5ZXIuCkBAIC0zODYsNyArMzg2LDcgQEAgdm9pZCBUaWxlQ2FjaGU6OnJl
dmFsaWRhdGVUaWxlcygpCiAgICAgICAgICAgICBUaWxlSW5kZXggdGlsZUluZGV4KHgsIHkpOwog
CiAgICAgICAgICAgICBJbnRSZWN0IHRpbGVSZWN0ID0gcmVjdEZvclRpbGVJbmRleCh0aWxlSW5k
ZXgpOwotICAgICAgICAgICAgUmV0YWluUHRyPFdlYlRpbGVMYXllcj4mIHRpbGVMYXllciA9IG1f
dGlsZXMuYWRkKHRpbGVJbmRleCwgMCkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgICAgIFJl
dGFpblB0cjxXZWJUaWxlTGF5ZXI+JiB0aWxlTGF5ZXIgPSBtX3RpbGVzLmFkZCh0aWxlSW5kZXgs
IDApLml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgICAgIGlmICghdGlsZUxheWVyKSB7CiAgICAg
ICAgICAgICAgICAgdGlsZUxheWVyID0gY3JlYXRlVGlsZUxheWVyKHRpbGVSZWN0KTsKICAgICAg
ICAgICAgICAgICBbbV90aWxlQ29udGFpbmVyTGF5ZXIuZ2V0KCkgYWRkU3VibGF5ZXI6dGlsZUxh
eWVyLmdldCgpXTsKQEAgLTQwNiw3ICs0MDYsNyBAQCB2b2lkIFRpbGVDYWNoZTo6cmV2YWxpZGF0
ZVRpbGVzKCkKIAogICAgIG1fdGlsZUNvdmVyYWdlUmVjdCA9IEludFJlY3QoKTsKICAgICBmb3Ig
KFRpbGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpLCBlbmQgPSBtX3RpbGVzLmVu
ZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgY29uc3QgVGlsZUluZGV4JiB0aWxlSW5k
ZXggPSBpdC0+Zmlyc3Q7CisgICAgICAgIGNvbnN0IFRpbGVJbmRleCYgdGlsZUluZGV4ID0gaXQt
PmtleTsKIAogICAgICAgICBtX3RpbGVDb3ZlcmFnZVJlY3QudW5pdGUocmVjdEZvclRpbGVJbmRl
eCh0aWxlSW5kZXgpKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwCmluZGV4IDQ4
YjIwZDBiOGJkMjQyYWI1NDliOGZlNDQyZGY0NGFiMzY3MmViODUuLjcwMTY4YjIxMDRkYjM2OWRh
MDc1N2ExMTQ0NjIyMTExYmMzMDYxZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwCkBA
IC0xNjcsNyArMTY3LDcgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OmFuaW1hdGlvblN0YXJ0ZWQo
Q0ZUaW1lSW50ZXJ2YWwgYmVnaW5UaW1lKQogCiAgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxQ
bGF0Zm9ybUNBQW5pbWF0aW9uPiA+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2FuaW1hdGlvbnMu
ZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPFN0cmluZywgUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRp
b24+ID46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9hbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+c2V0QWN0dWFsU3RhcnRUaW1lSWZOZWVkZWQo
Y2FjZkJlZ2luVGltZSk7CisgICAgICAgIGl0LT52YWx1ZS0+c2V0QWN0dWFsU3RhcnRUaW1lSWZO
ZWVkZWQoY2FjZkJlZ2luVGltZSk7CiAKICAgICBpZiAobV9vd25lcikKICAgICAgICAgbV9vd25l
ci0+cGxhdGZvcm1DQUxheWVyQW5pbWF0aW9uU3RhcnRlZChiZWdpblRpbWUpOwpAQCAtMTc3LDgg
KzE3Nyw4IEBAIHN0YXRpYyB2b2lkIHJlc3VibWl0QWxsQW5pbWF0aW9ucyhQbGF0Zm9ybUNBTGF5
ZXIqIGxheWVyKQogewogICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8UGxhdGZvcm1DQUFuaW1h
dGlvbj4gPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXItPmFuaW1hdGlvbnMoKS5lbmQoKTsK
ICAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8UGxhdGZvcm1DQUFuaW1hdGlvbj4gPjo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXllci0+YW5pbWF0aW9ucygpLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewotICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHMoQWRvcHRDRiwgaXQt
PmZpcnN0LmNyZWF0ZUNGU3RyaW5nKCkpOwotICAgICAgICBDQUNGTGF5ZXJBZGRBbmltYXRpb24o
bGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSwgcy5nZXQoKSwgaXQtPnNlY29uZC0+cGxhdGZvcm1Bbmlt
YXRpb24oKSk7CisgICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gcyhBZG9wdENGLCBpdC0+
a2V5LmNyZWF0ZUNGU3RyaW5nKCkpOworICAgICAgICBDQUNGTGF5ZXJBZGRBbmltYXRpb24obGF5
ZXItPnBsYXRmb3JtTGF5ZXIoKSwgcy5nZXQoKSwgaXQtPnZhbHVlLT5wbGF0Zm9ybUFuaW1hdGlv
bigpKTsKICAgICB9CiB9CiAKQEAgLTMyOCw3ICszMjgsNyBAQCBQYXNzUmVmUHRyPFBsYXRmb3Jt
Q0FBbmltYXRpb24+IFBsYXRmb3JtQ0FMYXllcjo6YW5pbWF0aW9uRm9yS2V5KGNvbnN0IFN0cmlu
ZyYgawogICAgIGlmIChpdCA9PSBtX2FuaW1hdGlvbnMuZW5kKCkpCiAgICAgICAgIHJldHVybiAw
OwogCi0gICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgcmV0dXJuIGl0LT52YWx1ZTsKIH0KIAog
UGxhdGZvcm1DQUxheWVyKiBQbGF0Zm9ybUNBTGF5ZXI6Om1hc2soKSBjb25zdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENhY2hlQ2hy
b21pdW1XaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Rm9udENhY2hlQ2hyb21pdW1XaW4uY3BwCmluZGV4IDlmODk5OGNkYWZkODEyZTE4OWU2NWEyODVm
YjZjNDc1MzBhNDZlMGMuLjBjODY1NTAwZGU4OGMzZDhkYzYxZmI1YzgzMWQ5ZWMzNGU0MTBmNzAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Zv
bnRDYWNoZUNocm9taXVtV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9Gb250Q2FjaGVDaHJvbWl1bVdpbi5jcHAKQEAgLTIyMywxMCArMjIzLDEw
IEBAIHN0YXRpYyBib29sIExvb2t1cEFsdE5hbWUoY29uc3QgU3RyaW5nJiBuYW1lLCBTdHJpbmcm
IGFsdE5hbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHN0YXRpYyBpbnQgc3lzdGVt
Q3AgPSA6OkdldEFDUCgpOwotICAgIGludCBmb250Q3AgPSBpdGVyLT5zZWNvbmQtPmNvZGVQYWdl
OworICAgIGludCBmb250Q3AgPSBpdGVyLT52YWx1ZS0+Y29kZVBhZ2U7CiAKICAgICBpZiAoKGlz
QXNjaWkgJiYgc3lzdGVtQ3AgPT0gZm9udENwKSB8fCAoIWlzQXNjaWkgJiYgc3lzdGVtQ3AgIT0g
Zm9udENwKSkgewotICAgICAgICBhbHROYW1lID0gU3RyaW5nKGl0ZXItPnNlY29uZC0+bmFtZSk7
CisgICAgICAgIGFsdE5hbWUgPSBTdHJpbmcoaXRlci0+dmFsdWUtPm5hbWUpOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTI3Nyw3ICsyNzcsNyBAQCBzdGF0aWMgYm9vbCBmb250
Q29udGFpbnNDaGFyYWN0ZXIoY29uc3QgRm9udFBsYXRmb3JtRGF0YSogZm9udERhdGEsCiAKICAg
ICBIYXNoTWFwPGNvbnN0IHdjaGFyX3QqLCBpY3U6OlVuaWNvZGVTZXQqPjo6aXRlcmF0b3IgaXQg
PSBmb250Q21hcENhY2hlLT5maW5kKGZhbWlseSk7CiAgICAgaWYgKGl0ICE9IGZvbnRDbWFwQ2Fj
aGUtPmVuZCgpKQotICAgICAgICByZXR1cm4gaXQtPnNlY29uZC0+Y29udGFpbnMoY2hhcmFjdGVy
KTsKKyAgICAgICAgcmV0dXJuIGl0LT52YWx1ZS0+Y29udGFpbnMoY2hhcmFjdGVyKTsKIAogICAg
IEhGT05UIGhmb250ID0gZm9udERhdGEtPmhmb250KCk7CiAgICAgSFduZERDIGhkYygwKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRV
dGlsc0Nocm9taXVtV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0ZvbnRVdGlsc0Nocm9taXVtV2luLmNwcAppbmRleCBjYzUyYzUyZWI3MDU3ODJkZTFm
OTY4ZGM4MDNjNDVlNGYyYWUyMjkyLi4yZmZhYmJiNzY4MmRlYThhMGUxZmM5ZmRhZWU5YzcxODA1
YTQyYTA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9Gb250VXRpbHNDaHJvbWl1bVdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFV0aWxzQ2hyb21pdW1XaW4uY3BwCkBAIC00MTUsNyAr
NDE1LDcgQEAgYm9vbCBnZXREZXJpdmVkRm9udERhdGEoY29uc3QgVUNoYXIqIGZhbWlseSwKICAg
ICAgICAgLy8gY2hlY2sgaXQgYWdhaW5zdCB3aGF0IHdlIGFjdHVhbGx5IHdhbnQgKGFzIGlzIGRv
bmUgaW4KICAgICAgICAgLy8gRm9udENhY2hlV2luLmNwcCkKICAgICAgICAgRm9udERhdGFDYWNo
ZTo6QWRkUmVzdWx0IGVudHJ5ID0gZm9udERhdGFDYWNoZS5hZGQoZm9udEtleSwgRm9udERhdGEo
KSk7Ci0gICAgICAgIGRlcml2ZWQgPSAmZW50cnkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAg
ZGVyaXZlZCA9ICZlbnRyeS5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgIGRlcml2ZWQtPmhmb250
ID0gQ3JlYXRlRm9udEluZGlyZWN0KGxvZ2ZvbnQpOwogICAgICAgICAvLyBHZXRBc2NlbnQgbWF5
IHJldHVybiBrVW5kZWZpbmVkQXNjZW50LCBidXQgd2Ugc3RpbGwgd2FudCB0bwogICAgICAgICAv
LyBjYWNoZSBpdCBzbyB0aGF0IHdlIHdvbid0IGhhdmUgdG8gY2FsbCBDcmVhdGVGb250SW5kaXJl
Y3Qgb25jZQpAQCAtNDIzLDcgKzQyMyw3IEBAIGJvb2wgZ2V0RGVyaXZlZEZvbnREYXRhKGNvbnN0
IFVDaGFyKiBmYW1pbHksCiAgICAgICAgIGRlcml2ZWQtPmFzY2VudCA9IGdldEFzY2VudChkZXJp
dmVkLT5oZm9udCk7CiAgICAgICAgIGRlcml2ZWQtPnNwYWNlR2x5cGggPSBnZXRTcGFjZUdseXBo
KGRlcml2ZWQtPmhmb250KTsKICAgICB9IGVsc2UgewotICAgICAgICBkZXJpdmVkID0gJml0ZXIt
PnNlY29uZDsKKyAgICAgICAgZGVyaXZlZCA9ICZpdGVyLT52YWx1ZTsKICAgICAgICAgLy8gTGFz
dCB0aW1lLCBHZXRBc2NlbnQgZmFpbGVkIHNvIHRoYXQgb25seSBIRk9OVCB3YXMKICAgICAgICAg
Ly8gY2FjaGVkLiBUcnkgb25jZSBtb3JlIGFzc3VtaW5nIHRoYXQgVHJ5UHJlbG9hZEZvbnQKICAg
ICAgICAgLy8gd2FzIGNhbGxlZCBieSBhIGNhbGxlciBiZXR3ZWVuIGNhbGxzLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNo
cm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Rp
bGVkTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggNWRjNjVlYzVhMjA4MWFhZDQ0NzdkMzI4MjkzOTRh
MzYyZDAzNzRlYi4uMmMzZDBjZDRlZGMyY2E4MTM4NzJiM2JiOTkyMzNhZjgxMzZhMDVhYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRM
YXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCkBAIC0yMjUsOSArMjI1LDkgQEAgdm9pZCBU
aWxlZExheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXllckltcGwqIGxheWVyKQog
ICAgIFZlY3RvcjxVcGRhdGFibGVUaWxlKj4gaW52YWxpZFRpbGVzOwogCiAgICAgZm9yIChDQ0xh
eWVyVGlsaW5nRGF0YTo6VGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1fdGlsZXItPnRp
bGVzKCkuYmVnaW4oKTsgaXRlciAhPSBtX3RpbGVyLT50aWxlcygpLmVuZCgpOyArK2l0ZXIpIHsK
LSAgICAgICAgaW50IGkgPSBpdGVyLT5maXJzdC5maXJzdDsKLSAgICAgICAgaW50IGogPSBpdGVy
LT5maXJzdC5zZWNvbmQ7Ci0gICAgICAgIFVwZGF0YWJsZVRpbGUqIHRpbGUgPSBzdGF0aWNfY2Fz
dDxVcGRhdGFibGVUaWxlKj4oaXRlci0+c2Vjb25kLmdldCgpKTsKKyAgICAgICAgaW50IGkgPSBp
dGVyLT5rZXkuZmlyc3Q7CisgICAgICAgIGludCBqID0gaXRlci0+a2V5LnNlY29uZDsKKyAgICAg
ICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHN0YXRpY19jYXN0PFVwZGF0YWJsZVRpbGUqPihpdGVy
LT52YWx1ZS5nZXQoKSk7CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBub3QgZXZlciBi
ZSBudWxsLgogICAgICAgICBpZiAoIXRpbGUpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTI1
Nyw3ICsyNTcsNyBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJUcmVlSG9zdChD
Q0xheWVyVHJlZUhvc3QqIGhvc3QpCiB7CiAgICAgaWYgKGhvc3QgJiYgaG9zdCAhPSBsYXllclRy
ZWVIb3N0KCkpIHsKICAgICAgICAgZm9yIChDQ0xheWVyVGlsaW5nRGF0YTo6VGlsZU1hcDo6Y29u
c3RfaXRlcmF0b3IgaXRlciA9IG1fdGlsZXItPnRpbGVzKCkuYmVnaW4oKTsgaXRlciAhPSBtX3Rp
bGVyLT50aWxlcygpLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgICAgIFVwZGF0YWJsZVRpbGUq
IHRpbGUgPSBzdGF0aWNfY2FzdDxVcGRhdGFibGVUaWxlKj4oaXRlci0+c2Vjb25kLmdldCgpKTsK
KyAgICAgICAgICAgIFVwZGF0YWJsZVRpbGUqIHRpbGUgPSBzdGF0aWNfY2FzdDxVcGRhdGFibGVU
aWxlKj4oaXRlci0+dmFsdWUuZ2V0KCkpOwogICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hv
dWxkIG5vdCBldmVyIGJlIG51bGwuCiAgICAgICAgICAgICBpZiAoIXRpbGUpCiAgICAgICAgICAg
ICAgICAgY29udGludWU7CkBAIC0zMjUsNyArMzI1LDcgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21p
dW06OmludmFsaWRhdGVDb250ZW50UmVjdChjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgZm9yIChDQ0xheWVyVGlsaW5nRGF0YTo6VGlsZU1hcDo6Y29u
c3RfaXRlcmF0b3IgaXRlciA9IG1fdGlsZXItPnRpbGVzKCkuYmVnaW4oKTsgaXRlciAhPSBtX3Rp
bGVyLT50aWxlcygpLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgVXBkYXRhYmxlVGlsZSogdGls
ZSA9IHN0YXRpY19jYXN0PFVwZGF0YWJsZVRpbGUqPihpdGVyLT5zZWNvbmQuZ2V0KCkpOworICAg
ICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gc3RhdGljX2Nhc3Q8VXBkYXRhYmxlVGlsZSo+KGl0
ZXItPnZhbHVlLmdldCgpKTsKICAgICAgICAgQVNTRVJUKHRpbGUpOwogICAgICAgICAvLyBGSVhN
RTogVGhpcyBzaG91bGQgbm90IGV2ZXIgYmUgbnVsbC4KICAgICAgICAgaWYgKCF0aWxlKQpAQCAt
NjU1LDcgKzY1NSw3IEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpzZXRUZXh0dXJlUHJpb3Jp
dGllcyhjb25zdCBDQ1ByaW9yaXR5Q2FsY3VsYXRvciYgcHJpb3JpCiAKICAgICAvLyBOb3cgdXBk
YXRlIHByaW9yaXRpZXMgb24gYWxsIHRpbGVzIHdlIGhhdmUgaW4gdGhlIGxheWVyLCBubyBtYXR0
ZXIgd2hlcmUgdGhleSBhcmUuCiAgICAgZm9yIChDQ0xheWVyVGlsaW5nRGF0YTo6VGlsZU1hcDo6
Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1fdGlsZXItPnRpbGVzKCkuYmVnaW4oKTsgaXRlciAhPSBt
X3RpbGVyLT50aWxlcygpLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgVXBkYXRhYmxlVGlsZSog
dGlsZSA9IHN0YXRpY19jYXN0PFVwZGF0YWJsZVRpbGUqPihpdGVyLT5zZWNvbmQuZ2V0KCkpOwor
ICAgICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gc3RhdGljX2Nhc3Q8VXBkYXRhYmxlVGlsZSo+
KGl0ZXItPnZhbHVlLmdldCgpKTsKICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIG5vdCBl
dmVyIGJlIG51bGwuCiAgICAgICAgIGlmICghdGlsZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwpA
QCAtNjgwLDcgKzY4MCw3IEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpyZXNldFVwZGF0ZVN0
YXRlKCkKIAogICAgIENDTGF5ZXJUaWxpbmdEYXRhOjpUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBl
bmQgPSBtX3RpbGVyLT50aWxlcygpLmVuZCgpOwogICAgIGZvciAoQ0NMYXllclRpbGluZ0RhdGE6
OlRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX3RpbGVyLT50aWxlcygpLmJlZ2luKCk7
IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKLSAgICAgICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHN0
YXRpY19jYXN0PFVwZGF0YWJsZVRpbGUqPihpdGVyLT5zZWNvbmQuZ2V0KCkpOworICAgICAgICBV
cGRhdGFibGVUaWxlKiB0aWxlID0gc3RhdGljX2Nhc3Q8VXBkYXRhYmxlVGlsZSo+KGl0ZXItPnZh
bHVlLmdldCgpKTsKICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIG5vdCBldmVyIGJlIG51
bGwuCiAgICAgICAgIGlmICghdGlsZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1hZ2VU
cmFja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDRGFtYWdlVHJhY2tlci5jcHAKaW5kZXggMTE0NDk5YmExN2VkNGZmMTVkZTA4ZTBjZDQwZmEz
MzY3MWE2MTQ4Ni4uNzVhMTU2NDgxZTNlMjE3NzlmZjk3ZTdmNjRlN2QwOTkyMjQ5ZDUzYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NE
YW1hZ2VUcmFja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0RhbWFnZVRyYWNrZXIuY3BwCkBAIC0yMzMsNyArMjMzLDcgQEAgRmxvYXRS
ZWN0IENDRGFtYWdlVHJhY2tlcjo6dHJhY2tEYW1hZ2VGcm9tTGVmdG92ZXJSZWN0cygpCiAgICAg
RmxvYXRSZWN0IGRhbWFnZVJlY3QgPSBGbG9hdFJlY3QoKTsKIAogICAgIGZvciAoUmVjdE1hcDo6
aXRlcmF0b3IgaXQgPSBtX2N1cnJlbnRSZWN0SGlzdG9yeS0+YmVnaW4oKTsgaXQgIT0gbV9jdXJy
ZW50UmVjdEhpc3RvcnktPmVuZCgpOyArK2l0KQotICAgICAgICBkYW1hZ2VSZWN0LnVuaXRlKGl0
LT5zZWNvbmQpOworICAgICAgICBkYW1hZ2VSZWN0LnVuaXRlKGl0LT52YWx1ZSk7CiAKICAgICBt
X2N1cnJlbnRSZWN0SGlzdG9yeS0+Y2xlYXIoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEaXJlY3RSZW5kZXJlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RpcmVjdFJlbmRl
cmVyLmNwcAppbmRleCA0Njg4YmVkMTliZmM0ZTgzNWJhZGYzNzkyNmQ5MDNkMjZhMGVkMzRmLi5m
YjhhYzFkMjEzNjI3M2EwYjY4ODYxODlkYjI2NmIwZmUyYTQ2MDZkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RpcmVjdFJlbmRlcmVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0RpcmVjdFJlbmRlcmVyLmNwcApAQCAtMTE5LDE1ICsxMTksMTUgQEAgdm9pZCBDQ0RpcmVjdFJl
bmRlcmVyOjpkZWNpZGVSZW5kZXJQYXNzQWxsb2NhdGlvbnNGb3JGcmFtZShjb25zdCBDQ1JlbmRl
clBhc3NMaXMKICAgICBWZWN0b3I8aW50PiBwYXNzZXNUb0RlbGV0ZTsKICAgICBIYXNoTWFwPGlu
dCwgT3duUHRyPENhY2hlZFRleHR1cmU+ID46OmNvbnN0X2l0ZXJhdG9yIHBhc3NJdGVyYXRvcjsK
ICAgICBmb3IgKHBhc3NJdGVyYXRvciA9IG1fcmVuZGVyUGFzc1RleHR1cmVzLmJlZ2luKCk7IHBh
c3NJdGVyYXRvciAhPSBtX3JlbmRlclBhc3NUZXh0dXJlcy5lbmQoKTsgKytwYXNzSXRlcmF0b3Ip
IHsKLSAgICAgICAgY29uc3QgQ0NSZW5kZXJQYXNzKiByZW5kZXJQYXNzSW5GcmFtZSA9IHJlbmRl
clBhc3Nlc0luRnJhbWUuZ2V0KHBhc3NJdGVyYXRvci0+Zmlyc3QpOworICAgICAgICBjb25zdCBD
Q1JlbmRlclBhc3MqIHJlbmRlclBhc3NJbkZyYW1lID0gcmVuZGVyUGFzc2VzSW5GcmFtZS5nZXQo
cGFzc0l0ZXJhdG9yLT5rZXkpOwogICAgICAgICBpZiAoIXJlbmRlclBhc3NJbkZyYW1lKSB7Ci0g
ICAgICAgICAgICBwYXNzZXNUb0RlbGV0ZS5hcHBlbmQocGFzc0l0ZXJhdG9yLT5maXJzdCk7Cisg
ICAgICAgICAgICBwYXNzZXNUb0RlbGV0ZS5hcHBlbmQocGFzc0l0ZXJhdG9yLT5rZXkpOwogICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAogICAgICAgICBjb25zdCBJbnRTaXplJiBy
ZXF1aXJlZFNpemUgPSByZW5kZXJQYXNzVGV4dHVyZVNpemUocmVuZGVyUGFzc0luRnJhbWUpOwog
ICAgICAgICBHQzNEZW51bSByZXF1aXJlZEZvcm1hdCA9IHJlbmRlclBhc3NUZXh0dXJlRm9ybWF0
KHJlbmRlclBhc3NJbkZyYW1lKTsKLSAgICAgICAgQ2FjaGVkVGV4dHVyZSogdGV4dHVyZSA9IHBh
c3NJdGVyYXRvci0+c2Vjb25kLmdldCgpOworICAgICAgICBDYWNoZWRUZXh0dXJlKiB0ZXh0dXJl
ID0gcGFzc0l0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKICAgICAgICAgQVNTRVJUKHRleHR1cmUpOwog
CiAgICAgICAgIGlmICh0ZXh0dXJlLT5pZCgpICYmICh0ZXh0dXJlLT5zaXplKCkgIT0gcmVxdWly
ZWRTaXplIHx8IHRleHR1cmUtPmZvcm1hdCgpICE9IHJlcXVpcmVkRm9ybWF0KSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
aWxpbmdEYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUaWxpbmdEYXRhLmNwcAppbmRleCA5YjU1MTU2ZDk1YmEzNDMzZmY2YzE2YzZl
YjU1MDlhYjcxMDI5ZDE5Li5hODFlMDZjMDUwOTJiMTNmOWE2YmYwMDQ2OTI1ZGYzZDU0YTI3ZjNm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVGlsaW5nRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRpbGluZ0RhdGEuY3BwCkBAIC0xNTMsOCArMTUzLDgg
QEAgdm9pZCBDQ0xheWVyVGlsaW5nRGF0YTo6c2V0Qm91bmRzKGNvbnN0IEludFNpemUmIHNpemUp
CiAgICAgY29udGVudFJlY3RUb1RpbGVJbmRpY2VzKEludFJlY3QoSW50UG9pbnQoKSwgc2l6ZSks
IGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CiAgICAgVmVjdG9yPFRpbGVNYXBLZXk+IGludmFs
aWRUaWxlS2V5czsKICAgICBmb3IgKFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90aWxl
cy5iZWdpbigpOyBpdCAhPSBtX3RpbGVzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+
Zmlyc3QuZmlyc3QgPiByaWdodCB8fCBpdC0+Zmlyc3Quc2Vjb25kID4gYm90dG9tKQotICAgICAg
ICAgICAgaW52YWxpZFRpbGVLZXlzLmFwcGVuZChpdC0+Zmlyc3QpOworICAgICAgICBpZiAoaXQt
PmtleS5maXJzdCA+IHJpZ2h0IHx8IGl0LT5rZXkuc2Vjb25kID4gYm90dG9tKQorICAgICAgICAg
ICAgaW52YWxpZFRpbGVLZXlzLmFwcGVuZChpdC0+a2V5KTsKICAgICB9CiAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBpbnZhbGlkVGlsZUtleXMuc2l6ZSgpOyArK2kpCiAgICAgICAgIG1fdGls
ZXMucmVtb3ZlKGludmFsaWRUaWxlS2V5c1tpXSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
LmNwcAppbmRleCAyNGEzMzRjM2ZjNzEyNDdhZjFjMjNiMzJjZmMyMmU5OGFmMjI3YjRjLi40OGRi
YjZjZTk0ZTAxNjMxOTFkY2YyMmRkYmYzY2Q2OWQ5ZWYzNWEyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdC5jcHAKQEAgLTEyMyw3ICsxMjMsNyBAQCBDQ0xheWVyVHJlZUhvc3Q6On5DQ0xh
eWVyVHJlZUhvc3QoKQogICAgIG51bUxheWVyVHJlZUluc3RhbmNlcy0tOwogICAgIFJhdGVMaW1p
dGVyTWFwOjppdGVyYXRvciBpdCA9IG1fcmF0ZUxpbWl0ZXJzLmJlZ2luKCk7CiAgICAgaWYgKGl0
ICE9IG1fcmF0ZUxpbWl0ZXJzLmVuZCgpKQotICAgICAgICBpdC0+c2Vjb25kLT5zdG9wKCk7Cisg
ICAgICAgIGl0LT52YWx1ZS0+c3RvcCgpOwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c2V0
U3VyZmFjZVJlYWR5KCkKQEAgLTY2OSw3ICs2NjksNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6
c3RhcnRSYXRlTGltaXRlcihXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQog
ICAgIEFTU0VSVChjb250ZXh0KTsKICAgICBSYXRlTGltaXRlck1hcDo6aXRlcmF0b3IgaXQgPSBt
X3JhdGVMaW1pdGVycy5maW5kKGNvbnRleHQpOwogICAgIGlmIChpdCAhPSBtX3JhdGVMaW1pdGVy
cy5lbmQoKSkKLSAgICAgICAgaXQtPnNlY29uZC0+c3RhcnQoKTsKKyAgICAgICAgaXQtPnZhbHVl
LT5zdGFydCgpOwogICAgIGVsc2UgewogICAgICAgICBSZWZQdHI8UmF0ZUxpbWl0ZXI+IHJhdGVM
aW1pdGVyID0gUmF0ZUxpbWl0ZXI6OmNyZWF0ZShjb250ZXh0LCB0aGlzKTsKICAgICAgICAgbV9y
YXRlTGltaXRlcnMuc2V0KGNvbnRleHQsIHJhdGVMaW1pdGVyKTsKQEAgLTY4MSw3ICs2ODEsNyBA
QCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c3RvcFJhdGVMaW1pdGVyKFdlYktpdDo6V2ViR3JhcGhp
Y3NDb250ZXh0M0QqIGNvbnRleHQpCiB7CiAgICAgUmF0ZUxpbWl0ZXJNYXA6Oml0ZXJhdG9yIGl0
ID0gbV9yYXRlTGltaXRlcnMuZmluZChjb250ZXh0KTsKICAgICBpZiAoaXQgIT0gbV9yYXRlTGlt
aXRlcnMuZW5kKCkpIHsKLSAgICAgICAgaXQtPnNlY29uZC0+c3RvcCgpOworICAgICAgICBpdC0+
dmFsdWUtPnN0b3AoKTsKICAgICAgICAgbV9yYXRlTGltaXRlcnMucmVtb3ZlKGl0KTsKICAgICB9
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCmluZGV4IDcwMTA1NTBi
MzJmOGVlODY3MjZkMDBjNGZhZTMwYjk4ZTNmMmQ3NzUuLjExYzA1MzI3ZDgyNjdlZDFiODY5YmUx
ODA5ZjBiODUxMjE2ZTIxNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwu
Y3BwCkBAIC00MTIsNyArNDEyLDcgQEAgc3RhdGljIGlubGluZSBDQ1JlbmRlclBhc3MqIGZpbmRS
ZW5kZXJQYXNzQnlJZChpbnQgcmVuZGVyUGFzc0lkLCBjb25zdCBDQ0xheWVyVHIKIHsKICAgICBD
Q1JlbmRlclBhc3NJZEhhc2hNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZnJhbWUucmVuZGVyUGFz
c2VzQnlJZC5maW5kKHJlbmRlclBhc3NJZCk7CiAgICAgQVNTRVJUKGl0ICE9IGZyYW1lLnJlbmRl
clBhc3Nlc0J5SWQuZW5kKCkpOwotICAgIHJldHVybiBpdC0+c2Vjb25kLmdldCgpOworICAgIHJl
dHVybiBpdC0+dmFsdWUuZ2V0KCk7CiB9CiAKIHN0YXRpYyB2b2lkIHJlbW92ZVJlbmRlclBhc3Nl
c1JlY3Vyc2l2ZShpbnQgcmVtb3ZlUmVuZGVyUGFzc0lkLCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpG
cmFtZURhdGEmIGZyYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NSZXNvdXJjZVByb3ZpZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVzb3VyY2VQcm92aWRlci5jcHAKaW5k
ZXggM2FhZDE0N2NhNjQ0NzM3ZDRlMmZjZmQ5M2FlYzc4MTJlMmUyMDFmOC4uNmFhMTgzMzFhYzU2
M2U3MmJiMWI3OTEwN2M5NjQ0N2VhN2E0M2JmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZXNvdXJjZVByb3ZpZGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Jlc291cmNl
UHJvdmlkZXIuY3BwCkBAIC04NCw3ICs4NCw3IEBAIGJvb2wgQ0NSZXNvdXJjZVByb3ZpZGVyOjpp
blVzZUJ5Q29uc3VtZXIoUmVzb3VyY2VJZCBpZCkKICAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBs
VGhyZWFkKCkpOwogICAgIFJlc291cmNlTWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmZp
bmQoaWQpOwogICAgIEFTU0VSVChpdCAhPSBtX3Jlc291cmNlcy5lbmQoKSk7Ci0gICAgcmV0dXJu
ICEhaXQtPnNlY29uZC5sb2NrRm9yUmVhZENvdW50IHx8IGl0LT5zZWNvbmQuZXhwb3J0ZWQ7Cisg
ICAgcmV0dXJuICEhaXQtPnZhbHVlLmxvY2tGb3JSZWFkQ291bnQgfHwgaXQtPnZhbHVlLmV4cG9y
dGVkOwogfQogCiBDQ1Jlc291cmNlUHJvdmlkZXI6OlJlc291cmNlSWQgQ0NSZXNvdXJjZVByb3Zp
ZGVyOjpjcmVhdGVSZXNvdXJjZShpbnQgcG9vbCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgR0MzRGVu
dW0gZm9ybWF0LCBUZXh0dXJlVXNhZ2VIaW50IGhpbnQpCkBAIC0xNTQsMTUgKzE1NCwxNSBAQCB2
b2lkIENDUmVzb3VyY2VQcm92aWRlcjo6ZGVsZXRlUmVzb3VyY2UoUmVzb3VyY2VJZCBpZCkKIHsK
ICAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwogICAgIFJlc291cmNlTWFwOjpp
dGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmZpbmQoaWQpOwotICAgIEFTU0VSVChpdCAhPSBtX3Jl
c291cmNlcy5lbmQoKSAmJiAhaXQtPnNlY29uZC5sb2NrZWRGb3JXcml0ZSAmJiAhaXQtPnNlY29u
ZC5sb2NrRm9yUmVhZENvdW50KTsKKyAgICBBU1NFUlQoaXQgIT0gbV9yZXNvdXJjZXMuZW5kKCkg
JiYgIWl0LT52YWx1ZS5sb2NrZWRGb3JXcml0ZSAmJiAhaXQtPnZhbHVlLmxvY2tGb3JSZWFkQ291
bnQpOwogCi0gICAgaWYgKGl0LT5zZWNvbmQuZ2xJZCAmJiAhaXQtPnNlY29uZC5leHRlcm5hbCkg
eworICAgIGlmIChpdC0+dmFsdWUuZ2xJZCAmJiAhaXQtPnZhbHVlLmV4dGVybmFsKSB7CiAgICAg
ICAgIFdlYkdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M2QgPSBtX2NvbnRleHQtPmNvbnRleHQz
RCgpOwogICAgICAgICBBU1NFUlQoY29udGV4dDNkKTsKLSAgICAgICAgR0xDKGNvbnRleHQzZCwg
Y29udGV4dDNkLT5kZWxldGVUZXh0dXJlKGl0LT5zZWNvbmQuZ2xJZCkpOworICAgICAgICBHTEMo
Y29udGV4dDNkLCBjb250ZXh0M2QtPmRlbGV0ZVRleHR1cmUoaXQtPnZhbHVlLmdsSWQpKTsKICAg
ICB9Ci0gICAgaWYgKGl0LT5zZWNvbmQucGl4ZWxzKQotICAgICAgICBkZWxldGUgaXQtPnNlY29u
ZC5waXhlbHM7CisgICAgaWYgKGl0LT52YWx1ZS5waXhlbHMpCisgICAgICAgIGRlbGV0ZSBpdC0+
dmFsdWUucGl4ZWxzOwogCiAgICAgbV9yZXNvdXJjZXMucmVtb3ZlKGl0KTsKIH0KQEAgLTE3Miw4
ICsxNzIsOCBAQCB2b2lkIENDUmVzb3VyY2VQcm92aWRlcjo6ZGVsZXRlT3duZWRSZXNvdXJjZXMo
aW50IHBvb2wpCiAgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKICAgICBSZXNv
dXJjZUlkQXJyYXkgdG9EZWxldGU7CiAgICAgZm9yIChSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQg
PSBtX3Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSBtX3Jlc291cmNlcy5lbmQoKTsgKytpdCkgewot
ICAgICAgICBpZiAoaXQtPnNlY29uZC5wb29sID09IHBvb2wgJiYgIWl0LT5zZWNvbmQuZXh0ZXJu
YWwpCi0gICAgICAgICAgICB0b0RlbGV0ZS5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgaWYg
KGl0LT52YWx1ZS5wb29sID09IHBvb2wgJiYgIWl0LT52YWx1ZS5leHRlcm5hbCkKKyAgICAgICAg
ICAgIHRvRGVsZXRlLmFwcGVuZChpdC0+a2V5KTsKICAgICB9CiAgICAgZm9yIChSZXNvdXJjZUlk
QXJyYXk6Oml0ZXJhdG9yIGl0ID0gdG9EZWxldGUuYmVnaW4oKTsgaXQgIT0gdG9EZWxldGUuZW5k
KCk7ICsraXQpCiAgICAgICAgIGRlbGV0ZVJlc291cmNlKCppdCk7CkBAIC0xODMsMjQgKzE4Mywy
NCBAQCBDQ1Jlc291cmNlUHJvdmlkZXI6OlJlc291cmNlVHlwZSBDQ1Jlc291cmNlUHJvdmlkZXI6
OnJlc291cmNlVHlwZShSZXNvdXJjZUlkIGlkKQogewogICAgIFJlc291cmNlTWFwOjppdGVyYXRv
ciBpdCA9IG1fcmVzb3VyY2VzLmZpbmQoaWQpOwogICAgIEFTU0VSVChpdCAhPSBtX3Jlc291cmNl
cy5lbmQoKSk7Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQudHlwZTsKKyAgICByZXR1cm4gaXQtPnZh
bHVlLnR5cGU7CiB9CiAKIHZvaWQgQ0NSZXNvdXJjZVByb3ZpZGVyOjp1cGxvYWQoUmVzb3VyY2VJ
ZCBpZCwgY29uc3QgdWludDhfdCogaW1hZ2UsIGNvbnN0IEludFJlY3QmIGltYWdlUmVjdCwgY29u
c3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50U2l6ZSYgZGVzdE9mZnNldCkKIHsKICAg
ICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwogICAgIFJlc291cmNlTWFwOjppdGVy
YXRvciBpdCA9IG1fcmVzb3VyY2VzLmZpbmQoaWQpOwotICAgIEFTU0VSVChpdCAhPSBtX3Jlc291
cmNlcy5lbmQoKSAmJiAhaXQtPnNlY29uZC5sb2NrZWRGb3JXcml0ZSAmJiAhaXQtPnNlY29uZC5s
b2NrRm9yUmVhZENvdW50ICYmICFpdC0+c2Vjb25kLmV4dGVybmFsKTsKKyAgICBBU1NFUlQoaXQg
IT0gbV9yZXNvdXJjZXMuZW5kKCkgJiYgIWl0LT52YWx1ZS5sb2NrZWRGb3JXcml0ZSAmJiAhaXQt
PnZhbHVlLmxvY2tGb3JSZWFkQ291bnQgJiYgIWl0LT52YWx1ZS5leHRlcm5hbCk7CiAKLSAgICBp
ZiAoaXQtPnNlY29uZC5nbElkKSB7CisgICAgaWYgKGl0LT52YWx1ZS5nbElkKSB7CiAgICAgICAg
IFdlYkdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M2QgPSBtX2NvbnRleHQtPmNvbnRleHQzRCgp
OwogICAgICAgICBBU1NFUlQoY29udGV4dDNkKTsKICAgICAgICAgQVNTRVJUKG1fdGV4U3ViSW1h
Z2UuZ2V0KCkpOwotICAgICAgICBjb250ZXh0M2QtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCBpdC0+c2Vjb25kLmdsSWQpOwotICAgICAgICBtX3RleFN1YkltYWdl
LT51cGxvYWQoaW1hZ2UsIGltYWdlUmVjdCwgc291cmNlUmVjdCwgZGVzdE9mZnNldCwgaXQtPnNl
Y29uZC5mb3JtYXQsIGNvbnRleHQzZCk7CisgICAgICAgIGNvbnRleHQzZC0+YmluZFRleHR1cmUo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGl0LT52YWx1ZS5nbElkKTsKKyAgICAgICAg
bV90ZXhTdWJJbWFnZS0+dXBsb2FkKGltYWdlLCBpbWFnZVJlY3QsIHNvdXJjZVJlY3QsIGRlc3RP
ZmZzZXQsIGl0LT52YWx1ZS5mb3JtYXQsIGNvbnRleHQzZCk7CiAgICAgfQogCi0gICAgaWYgKGl0
LT5zZWNvbmQucGl4ZWxzKSB7CisgICAgaWYgKGl0LT52YWx1ZS5waXhlbHMpIHsKICAgICAgICAg
U2tCaXRtYXAgc3JjRnVsbDsKICAgICAgICAgc3JjRnVsbC5zZXRDb25maWcoU2tCaXRtYXA6OmtB
UkdCXzg4ODhfQ29uZmlnLCBpbWFnZVJlY3Qud2lkdGgoKSwgaW1hZ2VSZWN0LmhlaWdodCgpKTsK
ICAgICAgICAgc3JjRnVsbC5zZXRQaXhlbHMoY29uc3RfY2FzdDx1aW50OF90Kj4oaW1hZ2UpKTsK
QEAgLTIzOCwxNyArMjM4LDE3IEBAIGNvbnN0IENDUmVzb3VyY2VQcm92aWRlcjo6UmVzb3VyY2Uq
IENDUmVzb3VyY2VQcm92aWRlcjo6bG9ja0ZvclJlYWQoUmVzb3VyY2VJZCBpCiB7CiAgICAgQVNT
RVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKICAgICBSZXNvdXJjZU1hcDo6aXRlcmF0b3Ig
aXQgPSBtX3Jlc291cmNlcy5maW5kKGlkKTsKLSAgICBBU1NFUlQoaXQgIT0gbV9yZXNvdXJjZXMu
ZW5kKCkgJiYgIWl0LT5zZWNvbmQubG9ja2VkRm9yV3JpdGUpOwotICAgIGl0LT5zZWNvbmQubG9j
a0ZvclJlYWRDb3VudCsrOwotICAgIHJldHVybiAmaXQtPnNlY29uZDsKKyAgICBBU1NFUlQoaXQg
IT0gbV9yZXNvdXJjZXMuZW5kKCkgJiYgIWl0LT52YWx1ZS5sb2NrZWRGb3JXcml0ZSk7CisgICAg
aXQtPnZhbHVlLmxvY2tGb3JSZWFkQ291bnQrKzsKKyAgICByZXR1cm4gJml0LT52YWx1ZTsKIH0K
IAogdm9pZCBDQ1Jlc291cmNlUHJvdmlkZXI6OnVubG9ja0ZvclJlYWQoUmVzb3VyY2VJZCBpZCkK
IHsKICAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwogICAgIFJlc291cmNlTWFw
OjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmZpbmQoaWQpOwotICAgIEFTU0VSVChpdCAhPSBt
X3Jlc291cmNlcy5lbmQoKSAmJiBpdC0+c2Vjb25kLmxvY2tGb3JSZWFkQ291bnQgPiAwKTsKLSAg
ICBpdC0+c2Vjb25kLmxvY2tGb3JSZWFkQ291bnQtLTsKKyAgICBBU1NFUlQoaXQgIT0gbV9yZXNv
dXJjZXMuZW5kKCkgJiYgaXQtPnZhbHVlLmxvY2tGb3JSZWFkQ291bnQgPiAwKTsKKyAgICBpdC0+
dmFsdWUubG9ja0ZvclJlYWRDb3VudC0tOwogfQogCiBjb25zdCBDQ1Jlc291cmNlUHJvdmlkZXI6
OlJlc291cmNlKiBDQ1Jlc291cmNlUHJvdmlkZXI6OmxvY2tGb3JXcml0ZShSZXNvdXJjZUlkIGlk
KQpAQCAtMjU2LDggKzI1Niw4IEBAIGNvbnN0IENDUmVzb3VyY2VQcm92aWRlcjo6UmVzb3VyY2Uq
IENDUmVzb3VyY2VQcm92aWRlcjo6bG9ja0ZvcldyaXRlKFJlc291cmNlSWQKICAgICBBU1NFUlQo
Q0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwogICAgIFJlc291cmNlTWFwOjppdGVyYXRvciBpdCA9
IG1fcmVzb3VyY2VzLmZpbmQoaWQpOwogICAgIEFTU0VSVChpdCAhPSBtX3Jlc291cmNlcy5lbmQo
KSAmJiAhaXQtPnNlY29uZC5sb2NrZWRGb3JXcml0ZSAmJiAhaXQtPnNlY29uZC5sb2NrRm9yUmVh
ZENvdW50ICYmICFpdC0+c2Vjb25kLmV4dGVybmFsKTsKLSAgICBpdC0+c2Vjb25kLmxvY2tlZEZv
cldyaXRlID0gdHJ1ZTsKLSAgICByZXR1cm4gJml0LT5zZWNvbmQ7CisgICAgaXQtPnZhbHVlLmxv
Y2tlZEZvcldyaXRlID0gdHJ1ZTsKKyAgICByZXR1cm4gJml0LT52YWx1ZTsKIH0KIAogdm9pZCBD
Q1Jlc291cmNlUHJvdmlkZXI6OnVubG9ja0ZvcldyaXRlKFJlc291cmNlSWQgaWQpCkBAIC0yNjUs
NyArMjY1LDcgQEAgdm9pZCBDQ1Jlc291cmNlUHJvdmlkZXI6OnVubG9ja0ZvcldyaXRlKFJlc291
cmNlSWQgaWQpCiAgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKICAgICBSZXNv
dXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5maW5kKGlkKTsKICAgICBBU1NFUlQo
aXQgIT0gbV9yZXNvdXJjZXMuZW5kKCkgJiYgaXQtPnNlY29uZC5sb2NrZWRGb3JXcml0ZSAmJiAh
aXQtPnNlY29uZC5leHRlcm5hbCk7Ci0gICAgaXQtPnNlY29uZC5sb2NrZWRGb3JXcml0ZSA9IGZh
bHNlOworICAgIGl0LT52YWx1ZS5sb2NrZWRGb3JXcml0ZSA9IGZhbHNlOwogfQogCiBDQ1Jlc291
cmNlUHJvdmlkZXI6OlNjb3BlZFJlYWRMb2NrR0w6OlNjb3BlZFJlYWRMb2NrR0woQ0NSZXNvdXJj
ZVByb3ZpZGVyKiByZXNvdXJjZVByb3ZpZGVyLCBDQ1Jlc291cmNlUHJvdmlkZXI6OlJlc291cmNl
SWQgcmVzb3VyY2VJZCkKQEAgLTM4OCw3ICszODgsNyBAQCB2b2lkIENDUmVzb3VyY2VQcm92aWRl
cjo6ZGVzdHJveUNoaWxkKGludCBjaGlsZCkKICAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhy
ZWFkKCkpOwogICAgIENoaWxkTWFwOjppdGVyYXRvciBpdCA9IG1fY2hpbGRyZW4uZmluZChjaGls
ZCk7CiAgICAgQVNTRVJUKGl0ICE9IG1fY2hpbGRyZW4uZW5kKCkpOwotICAgIGRlbGV0ZU93bmVk
UmVzb3VyY2VzKGl0LT5zZWNvbmQucG9vbCk7CisgICAgZGVsZXRlT3duZWRSZXNvdXJjZXMoaXQt
PnZhbHVlLnBvb2wpOwogICAgIG1fY2hpbGRyZW4ucmVtb3ZlKGl0KTsKICAgICB0cmltTWFpbGJv
eERlcXVlKCk7CiB9CkBAIC0zOTgsNyArMzk4LDcgQEAgY29uc3QgQ0NSZXNvdXJjZVByb3ZpZGVy
OjpSZXNvdXJjZUlkTWFwJiBDQ1Jlc291cmNlUHJvdmlkZXI6OmdldENoaWxkVG9QYXJlbnRNYXAK
ICAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwogICAgIENoaWxkTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IG1fY2hpbGRyZW4uZmluZChjaGlsZCk7CiAgICAgQVNTRVJUKGl0ICE9
IG1fY2hpbGRyZW4uZW5kKCkpOwotICAgIHJldHVybiBpdC0+c2Vjb25kLmNoaWxkVG9QYXJlbnRN
YXA7CisgICAgcmV0dXJuIGl0LT52YWx1ZS5jaGlsZFRvUGFyZW50TWFwOwogfQogCiBDQ1Jlc291
cmNlUHJvdmlkZXI6OlRyYW5zZmVyYWJsZVJlc291cmNlTGlzdCBDQ1Jlc291cmNlUHJvdmlkZXI6
OnByZXBhcmVTZW5kVG9QYXJlbnQoY29uc3QgUmVzb3VyY2VJZEFycmF5JiByZXNvdXJjZXMpCkBA
IC00MTQsNyArNDE0LDcgQEAgQ0NSZXNvdXJjZVByb3ZpZGVyOjpUcmFuc2ZlcmFibGVSZXNvdXJj
ZUxpc3QgQ0NSZXNvdXJjZVByb3ZpZGVyOjpwcmVwYXJlU2VuZFRvUGEKICAgICBmb3IgKFJlc291
cmNlSWRBcnJheTo6Y29uc3RfaXRlcmF0b3IgaXQgPSByZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0g
cmVzb3VyY2VzLmVuZCgpOyArK2l0KSB7CiAgICAgICAgIFRyYW5zZmVyYWJsZVJlc291cmNlIHJl
c291cmNlOwogICAgICAgICBpZiAodHJhbnNmZXJSZXNvdXJjZShjb250ZXh0M2QsICppdCwgJnJl
c291cmNlKSkgewotICAgICAgICAgICAgbV9yZXNvdXJjZXMuZmluZCgqaXQpLT5zZWNvbmQuZXhw
b3J0ZWQgPSB0cnVlOworICAgICAgICAgICAgbV9yZXNvdXJjZXMuZmluZCgqaXQpLT52YWx1ZS5l
eHBvcnRlZCA9IHRydWU7CiAgICAgICAgICAgICBsaXN0LnJlc291cmNlcy5hcHBlbmQocmVzb3Vy
Y2UpOwogICAgICAgICB9CiAgICAgfQpAQCAtNDMzLDcgKzQzMyw3IEBAIENDUmVzb3VyY2VQcm92
aWRlcjo6VHJhbnNmZXJhYmxlUmVzb3VyY2VMaXN0IENDUmVzb3VyY2VQcm92aWRlcjo6cHJlcGFy
ZVNlbmRUb0NoCiAgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBwYXRoIGZvciBzb2Z0
d2FyZSBjb21wb3NpdGluZy4KICAgICAgICAgcmV0dXJuIGxpc3Q7CiAgICAgfQotICAgIENoaWxk
JiBjaGlsZEluZm8gPSBtX2NoaWxkcmVuLmZpbmQoY2hpbGQpLT5zZWNvbmQ7CisgICAgQ2hpbGQm
IGNoaWxkSW5mbyA9IG1fY2hpbGRyZW4uZmluZChjaGlsZCktPnZhbHVlOwogICAgIGZvciAoUmVz
b3VyY2VJZEFycmF5Ojpjb25zdF9pdGVyYXRvciBpdCA9IHJlc291cmNlcy5iZWdpbigpOyBpdCAh
PSByZXNvdXJjZXMuZW5kKCk7ICsraXQpIHsKICAgICAgICAgVHJhbnNmZXJhYmxlUmVzb3VyY2Ug
cmVzb3VyY2U7CiAgICAgICAgIGlmICghdHJhbnNmZXJSZXNvdXJjZShjb250ZXh0M2QsICppdCwg
JnJlc291cmNlKSkKQEAgLTQ2Niw3ICs0NjYsNyBAQCB2b2lkIENDUmVzb3VyY2VQcm92aWRlcjo6
cmVjZWl2ZUZyb21DaGlsZChpbnQgY2hpbGQsIGNvbnN0IFRyYW5zZmVyYWJsZVJlc291cmNlTAog
ICAgICAgICAvLyAoYW5kIGlzIHNpbXBsZXIpIHRvIHdhaXQuCiAgICAgICAgIEdMQyhjb250ZXh0
M2QsIGNvbnRleHQzZC0+d2FpdFN5bmNQb2ludChyZXNvdXJjZXMuc3luY1BvaW50KSk7CiAgICAg
fQotICAgIENoaWxkJiBjaGlsZEluZm8gPSBtX2NoaWxkcmVuLmZpbmQoY2hpbGQpLT5zZWNvbmQ7
CisgICAgQ2hpbGQmIGNoaWxkSW5mbyA9IG1fY2hpbGRyZW4uZmluZChjaGlsZCktPnZhbHVlOwog
ICAgIGZvciAoVmVjdG9yPFRyYW5zZmVyYWJsZVJlc291cmNlPjo6Y29uc3RfaXRlcmF0b3IgaXQg
PSByZXNvdXJjZXMucmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IHJlc291cmNlcy5yZXNvdXJjZXMu
ZW5kKCk7ICsraXQpIHsKICAgICAgICAgdW5zaWduZWQgdGV4dHVyZUlkOwogICAgICAgICBHTEMo
Y29udGV4dDNkLCB0ZXh0dXJlSWQgPSBjb250ZXh0M2QtPmNyZWF0ZVRleHR1cmUoKSk7CkBAIC00
OTIsNyArNDkyLDcgQEAgdm9pZCBDQ1Jlc291cmNlUHJvdmlkZXI6OnJlY2VpdmVGcm9tUGFyZW50
KGNvbnN0IFRyYW5zZmVyYWJsZVJlc291cmNlTGlzdCYgcmVzb3UKICAgICBpZiAocmVzb3VyY2Vz
LnN5bmNQb2ludCkKICAgICAgICAgR0xDKGNvbnRleHQzZCwgY29udGV4dDNkLT53YWl0U3luY1Bv
aW50KHJlc291cmNlcy5zeW5jUG9pbnQpKTsKICAgICBmb3IgKFZlY3RvcjxUcmFuc2ZlcmFibGVS
ZXNvdXJjZT46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcmVzb3VyY2VzLnJlc291cmNlcy5iZWdpbigp
OyBpdCAhPSByZXNvdXJjZXMucmVzb3VyY2VzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIFJlc291
cmNlJiByZXNvdXJjZSA9IG1fcmVzb3VyY2VzLmZpbmQoaXQtPmlkKS0+c2Vjb25kOworICAgICAg
ICBSZXNvdXJjZSYgcmVzb3VyY2UgPSBtX3Jlc291cmNlcy5maW5kKGl0LT5pZCktPnZhbHVlOwog
ICAgICAgICBBU1NFUlQocmVzb3VyY2UuZXhwb3J0ZWQpOwogICAgICAgICByZXNvdXJjZS5leHBv
cnRlZCA9IGZhbHNlOwogICAgICAgICBHTEMoY29udGV4dDNkLCBjb250ZXh0M2QtPmJpbmRUZXh0
dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCByZXNvdXJjZS5nbElkKSk7CkBAIC01
MDYsMTYgKzUwNiwxNiBAQCBib29sIENDUmVzb3VyY2VQcm92aWRlcjo6dHJhbnNmZXJSZXNvdXJj
ZShXZWJHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgUmVzb3VyYwogICAgIEFTU0VSVChDQ1By
b3h5Ojppc0ltcGxUaHJlYWQoKSk7CiAgICAgUmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV9yZXNvdXJjZXMuZmluZChpZCk7CiAgICAgQVNTRVJUKGl0ICE9IG1fcmVzb3VyY2VzLmVu
ZCgpICYmICFpdC0+c2Vjb25kLmxvY2tlZEZvcldyaXRlICYmICFpdC0+c2Vjb25kLmxvY2tGb3JS
ZWFkQ291bnQgJiYgIWl0LT5zZWNvbmQuZXh0ZXJuYWwpOwotICAgIGlmIChpdC0+c2Vjb25kLmV4
cG9ydGVkKQorICAgIGlmIChpdC0+dmFsdWUuZXhwb3J0ZWQpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICByZXNvdXJjZS0+aWQgPSBpZDsKLSAgICByZXNvdXJjZS0+Zm9ybWF0ID0gaXQtPnNl
Y29uZC5mb3JtYXQ7Ci0gICAgcmVzb3VyY2UtPnNpemUgPSBpdC0+c2Vjb25kLnNpemU7CisgICAg
cmVzb3VyY2UtPmZvcm1hdCA9IGl0LT52YWx1ZS5mb3JtYXQ7CisgICAgcmVzb3VyY2UtPnNpemUg
PSBpdC0+dmFsdWUuc2l6ZTsKICAgICBpZiAoIW1fbWFpbGJveGVzLmlzRW1wdHkoKSkKICAgICAg
ICAgcmVzb3VyY2UtPm1haWxib3ggPSBtX21haWxib3hlcy50YWtlRmlyc3QoKTsKICAgICBlbHNl
CiAgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5nZW5NYWlsYm94Q0hST01JVU0ocmVzb3Vy
Y2UtPm1haWxib3gubmFtZSkpOwotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5iaW5kVGV4dHVy
ZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgaXQtPnNlY29uZC5nbElkKSk7CisgICAg
R0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJELCBpdC0+dmFsdWUuZ2xJZCkpOwogICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5wcm9k
dWNlVGV4dHVyZUNIUk9NSVVNKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCByZXNvdXJj
ZS0+bWFpbGJveC5uYW1lKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC01MzAsMTUgKzUzMCwx
NSBAQCB2b2lkIENDUmVzb3VyY2VQcm92aWRlcjo6dHJpbU1haWxib3hEZXF1ZSgpCiAgICAgc2l6
ZV90IG1heE1haWxib3hDb3VudCA9IDA7CiAgICAgaWYgKG1fY29udGV4dC0+Y2FwYWJpbGl0aWVz
KCkuaGFzUGFyZW50Q29tcG9zaXRvcikgewogICAgICAgICBmb3IgKFJlc291cmNlTWFwOjppdGVy
YXRvciBpdCA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IG1fcmVzb3VyY2VzLmVuZCgpOyAr
K2l0KSB7Ci0gICAgICAgICAgICBpZiAoIWl0LT5zZWNvbmQuZXhwb3J0ZWQgJiYgIWl0LT5zZWNv
bmQuZXh0ZXJuYWwpCisgICAgICAgICAgICBpZiAoIWl0LT52YWx1ZS5leHBvcnRlZCAmJiAhaXQt
PnZhbHVlLmV4dGVybmFsKQogICAgICAgICAgICAgICAgICsrbWF4TWFpbGJveENvdW50OwogICAg
ICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgSGFzaFNldDxpbnQ+IGNoaWxkUG9vbFNldDsK
ICAgICAgICAgZm9yIChDaGlsZE1hcDo6aXRlcmF0b3IgaXQgPSBtX2NoaWxkcmVuLmJlZ2luKCk7
IGl0ICE9IG1fY2hpbGRyZW4uZW5kKCk7ICsraXQpCi0gICAgICAgICAgICBjaGlsZFBvb2xTZXQu
YWRkKGl0LT5zZWNvbmQucG9vbCk7CisgICAgICAgICAgICBjaGlsZFBvb2xTZXQuYWRkKGl0LT52
YWx1ZS5wb29sKTsKICAgICAgICAgZm9yIChSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3Jl
c291cmNlcy5iZWdpbigpOyBpdCAhPSBtX3Jlc291cmNlcy5lbmQoKTsgKytpdCkgewotICAgICAg
ICAgICAgaWYgKGNoaWxkUG9vbFNldC5jb250YWlucyhpdC0+c2Vjb25kLnBvb2wpKQorICAgICAg
ICAgICAgaWYgKGNoaWxkUG9vbFNldC5jb250YWlucyhpdC0+dmFsdWUucG9vbCkpCiAgICAgICAg
ICAgICAgICAgKyttYXhNYWlsYm94Q291bnQ7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlckds
b2JhbENvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9DdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0LmNwcAppbmRleCAzODJjMjc4ZWEyMWQxMzVmMDlj
Nzc2YzgzZjA1MjE2YmE2ZThlZDczLi4wYWVmNmNkNDYwZDRlMzk4YTVhYTRkNTY4ZTg2NTJlNmYz
MjliNTA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0N1c3RvbUZpbHRlckdsb2JhbENvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dC5jcHAKQEAg
LTQ0LDcgKzQ0LDcgQEAgQ3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dDo6Q3VzdG9tRmlsdGVyR2xv
YmFsQ29udGV4dCgpCiBDdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0Ojp+Q3VzdG9tRmlsdGVyR2xv
YmFsQ29udGV4dCgpCiB7CiAgICAgZm9yIChDdXN0b21GaWx0ZXJDb21waWxlZFByb2dyYW1zTWFw
OjppdGVyYXRvciBpdGVyID0gbV9wcm9ncmFtcy5iZWdpbigpOyBpdGVyICE9IG1fcHJvZ3JhbXMu
ZW5kKCk7ICsraXRlcikKLSAgICAgICAgaXRlci0+c2Vjb25kLT5kZXRhY2hGcm9tR2xvYmFsQ29u
dGV4dCgpOworICAgICAgICBpdGVyLT52YWx1ZS0+ZGV0YWNoRnJvbUdsb2JhbENvbnRleHQoKTsK
IH0KIAogdm9pZCBDdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0OjpwcmVwYXJlQ29udGV4dElmTmVl
ZGVkKEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCkBAIC02OSw3ICs2OSw3IEBAIFBhc3NSZWZQdHI8
Q3VzdG9tRmlsdGVyQ29tcGlsZWRQcm9ncmFtPiBDdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0Ojpn
ZXRDb21waWxlZFByCiAKICAgICBDdXN0b21GaWx0ZXJDb21waWxlZFByb2dyYW1zTWFwOjppdGVy
YXRvciBpdGVyID0gbV9wcm9ncmFtcy5maW5kKHByb2dyYW1JbmZvKTsKICAgICBpZiAoaXRlciAh
PSBtX3Byb2dyYW1zLmVuZCgpKQotICAgICAgICByZXR1cm4gaXRlci0+c2Vjb25kOworICAgICAg
ICByZXR1cm4gaXRlci0+dmFsdWU7CiAKICAgICBSZWZQdHI8Q3VzdG9tRmlsdGVyQ29tcGlsZWRQ
cm9ncmFtPiBjb21waWxlZFByb2dyYW0gPSBDdXN0b21GaWx0ZXJDb21waWxlZFByb2dyYW06OmNy
ZWF0ZSh0aGlzLCBwcm9ncmFtSW5mbyk7CiAgICAgbV9wcm9ncmFtcy5zZXQocHJvZ3JhbUluZm8s
IGNvbXBpbGVkUHJvZ3JhbS5nZXQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclByb2dyYW0uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJQcm9ncmFtLmNwcApp
bmRleCBkMWNmNjEzNGY3MGFlOGFiZjUyZmM2MjNhN2Q2OTY1MzQ4NzlmNjEyLi45NGU4M2RmOWI4
M2IyYjViNTRmZTc0N2E3ZTJhZmNiNDIyNWU5Y2ZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclByb2dyYW0uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyUHJv
Z3JhbS5jcHAKQEAgLTc1LDcgKzc1LDcgQEAgdm9pZCBDdXN0b21GaWx0ZXJQcm9ncmFtOjpyZW1v
dmVDbGllbnQoQ3VzdG9tRmlsdGVyUHJvZ3JhbUNsaWVudCogY2xpZW50KQogdm9pZCBDdXN0b21G
aWx0ZXJQcm9ncmFtOjpub3RpZnlDbGllbnRzKCkKIHsKICAgICBmb3IgKEN1c3RvbUZpbHRlclBy
b2dyYW1DbGllbnRMaXN0OjppdGVyYXRvciBpdGVyID0gbV9jbGllbnRzLmJlZ2luKCksIGVuZCA9
IG1fY2xpZW50cy5lbmQoKTsgaXRlciAhPSBlbmQ7ICsraXRlcikKLSAgICAgICAgaXRlci0+Zmly
c3QtPm5vdGlmeUN1c3RvbUZpbHRlclByb2dyYW1Mb2FkZWQodGhpcyk7CisgICAgICAgIGl0ZXIt
PmtleS0+bm90aWZ5Q3VzdG9tRmlsdGVyUHJvZ3JhbUxvYWRlZCh0aGlzKTsKIH0KIAogQ3VzdG9t
RmlsdGVyUHJvZ3JhbUluZm8gQ3VzdG9tRmlsdGVyUHJvZ3JhbTo6cHJvZ3JhbUluZm8oKSBjb25z
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enov
SGFyZkJ1enpTa2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZi
dXp6L0hhcmZCdXp6U2tpYS5jcHAKaW5kZXggZjY4ZWE2MTkyNDVmODY2ZTViZDBkNTc4ZDAxMDQ4
NDQ1MjU4NGMyYi4uMWU4ODY3YmI3NTdmMjI0MmU4ZjQ5NjJmODc1YjFiZGY3YWU5OTEyZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1
enpTa2lhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6
ei9IYXJmQnV6elNraWEuY3BwCkBAIC0yNDQsMTggKzI0NCwxOCBAQCBzdGF0aWMgSEJfRmFjZVJl
Y18qIGdldENhY2hlZEhhcmZidXp6RmFjZShGb250UGxhdGZvcm1EYXRhKiBwbGF0Zm9ybURhdGEp
CiAgICAgICAgIGdIYXJmYnV6ekZhY2VDYWNoZS0+c2V0KHVuaXF1ZUlELCBlbnRyeSk7CiAgICAg
ICAgIHJldHVybiBlbnRyeS5maXJzdDsKICAgICB9Ci0gICAgKysocmVzdWx0LmdldCgpLT5zZWNv
bmQuc2Vjb25kKTsKLSAgICByZXR1cm4gcmVzdWx0LmdldCgpLT5zZWNvbmQuZmlyc3Q7CisgICAg
KysocmVzdWx0LmdldCgpLT52YWx1ZS5zZWNvbmQpOworICAgIHJldHVybiByZXN1bHQuZ2V0KCkt
PnZhbHVlLmZpcnN0OwogfQogCiBzdGF0aWMgdm9pZCByZWxlYXNlQ2FjaGVkSGFyZmJ1enpGYWNl
KFNrRm9udElEIHVuaXF1ZUlEKQogewogICAgIEhhcmZidXp6RmFjZUNhY2hlOjppdGVyYXRvciBy
ZXN1bHQgPSBnSGFyZmJ1enpGYWNlQ2FjaGUtPmZpbmQodW5pcXVlSUQpOwogICAgIEFTU0VSVChy
ZXN1bHQgIT0gZ0hhcmZidXp6RmFjZUNhY2hlLT5lbmQoKSk7Ci0gICAgQVNTRVJUKHJlc3VsdC5n
ZXQoKS0+c2Vjb25kLnNlY29uZCA+IDApOwotICAgIC0tKHJlc3VsdC5nZXQoKS0+c2Vjb25kLnNl
Y29uZCk7Ci0gICAgaWYgKCEocmVzdWx0LmdldCgpLT5zZWNvbmQuc2Vjb25kKSkgewotICAgICAg
ICBIQl9GcmVlRmFjZShyZXN1bHQuZ2V0KCktPnNlY29uZC5maXJzdCk7CisgICAgQVNTRVJUKHJl
c3VsdC5nZXQoKS0+dmFsdWUuc2Vjb25kID4gMCk7CisgICAgLS0ocmVzdWx0LmdldCgpLT52YWx1
ZS5zZWNvbmQpOworICAgIGlmICghKHJlc3VsdC5nZXQoKS0+dmFsdWUuc2Vjb25kKSkgeworICAg
ICAgICBIQl9GcmVlRmFjZShyZXN1bHQuZ2V0KCktPnZhbHVlLmZpcnN0KTsKICAgICAgICAgZ0hh
cmZidXp6RmFjZUNhY2hlLT5yZW1vdmUodW5pcXVlSUQpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6TkdG
YWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hh
cmZCdXp6TkdGYWNlLmNwcAppbmRleCA3ZGQwNDhiM2I0M2ZmNTkzODhlYWY0ZTcyMTBlZTJjY2Jk
NTU0MjIzLi42MDQ3NTliOGNiZGVkM2M4Yjg0MWRjNjY4NzdlM2RlYTM0NjFmNzY4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6
ek5HRmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1
enovbmcvSGFyZkJ1enpOR0ZhY2UuY3BwCkBAIC02MCw4ICs2MCw4IEBAIEhhcmZCdXp6TkdGYWNl
OjpIYXJmQnV6ek5HRmFjZShGb250UGxhdGZvcm1EYXRhKiBwbGF0Zm9ybURhdGEsIHVpbnQ2NF90
IHVuaXF1ZUlECiAgICAgICAgIEFTU0VSVChtX2ZhY2UpOwogICAgICAgICBoYXJmYnV6ekZhY2VD
YWNoZSgpLT5zZXQobV91bmlxdWVJRCwgRmFjZUNhY2hlRW50cnkobV9mYWNlLCAxKSk7CiAgICAg
fSBlbHNlIHsKLSAgICAgICAgKysocmVzdWx0LmdldCgpLT5zZWNvbmQuc2Vjb25kKTsKLSAgICAg
ICAgbV9mYWNlID0gcmVzdWx0LmdldCgpLT5zZWNvbmQuZmlyc3Q7CisgICAgICAgICsrKHJlc3Vs
dC5nZXQoKS0+dmFsdWUuc2Vjb25kKTsKKyAgICAgICAgbV9mYWNlID0gcmVzdWx0LmdldCgpLT52
YWx1ZS5maXJzdDsKICAgICB9CiB9CiAKQEAgLTY5LDEwICs2OSwxMCBAQCBIYXJmQnV6ek5HRmFj
ZTo6fkhhcmZCdXp6TkdGYWNlKCkKIHsKICAgICBIYXJmQnV6ek5HRmFjZUNhY2hlOjppdGVyYXRv
ciByZXN1bHQgPSBoYXJmYnV6ekZhY2VDYWNoZSgpLT5maW5kKG1fdW5pcXVlSUQpOwogICAgIEFT
U0VSVChyZXN1bHQgIT0gaGFyZmJ1enpGYWNlQ2FjaGUoKS0+ZW5kKCkpOwotICAgIEFTU0VSVChy
ZXN1bHQuZ2V0KCktPnNlY29uZC5zZWNvbmQgPiAwKTsKLSAgICAtLShyZXN1bHQuZ2V0KCktPnNl
Y29uZC5zZWNvbmQpOwotICAgIGlmICghKHJlc3VsdC5nZXQoKS0+c2Vjb25kLnNlY29uZCkpIHsK
LSAgICAgICAgaGJfZmFjZV9kZXN0cm95KHJlc3VsdC5nZXQoKS0+c2Vjb25kLmZpcnN0KTsKKyAg
ICBBU1NFUlQocmVzdWx0LmdldCgpLT52YWx1ZS5zZWNvbmQgPiAwKTsKKyAgICAtLShyZXN1bHQu
Z2V0KCktPnZhbHVlLnNlY29uZCk7CisgICAgaWYgKCEocmVzdWx0LmdldCgpLT52YWx1ZS5zZWNv
bmQpKSB7CisgICAgICAgIGhiX2ZhY2VfZGVzdHJveShyZXN1bHQuZ2V0KCktPnZhbHVlLmZpcnN0
KTsKICAgICAgICAgaGFyZmJ1enpGYWNlQ2FjaGUoKS0+cmVtb3ZlKG1fdW5pcXVlSUQpOwogICAg
IH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9T
aW1wbGVGb250RGF0YUNvcmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9TaW1wbGVGb250RGF0YUNvcmVUZXh0LmNwcAppbmRleCAwNTE5Mzc0MmM1ODUyZGJl
OWM5Y2VkNjRiOWEwN2FhZDJjMWVhNDc3Li4wYjcxMzM0N2Y2MDQ2MzU1NDllNTBkNTYzNjUyMThi
MjM0NDI2YWNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9t
YWMvU2ltcGxlRm9udERhdGFDb3JlVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhQ29yZVRleHQuY3BwCkBAIC00Myw3ICs0Myw3
IEBAIENGRGljdGlvbmFyeVJlZiBTaW1wbGVGb250RGF0YTo6Z2V0Q0ZTdHJpbmdBdHRyaWJ1dGVz
KFR5cGVzZXR0aW5nRmVhdHVyZXMgdHlwZXNlCiB7CiAgICAgdW5zaWduZWQga2V5ID0gdHlwZXNl
dHRpbmdGZWF0dXJlcyArIDE7CiAgICAgSGFzaE1hcDx1bnNpZ25lZCwgUmV0YWluUHRyPENGRGlj
dGlvbmFyeVJlZj4gPjo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IG1fQ0ZTdHJpbmdBdHRyaWJ1dGVz
LmFkZChrZXksIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+KCkpOwotICAgIFJldGFpblB0cjxD
RkRpY3Rpb25hcnlSZWY+JiBhdHRyaWJ1dGVzRGljdGlvbmFyeSA9IGFkZFJlc3VsdC5pdGVyYXRv
ci0+c2Vjb25kOworICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+JiBhdHRyaWJ1dGVzRGlj
dGlvbmFyeSA9IGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCFhZGRSZXN1bHQu
aXNOZXdFbnRyeSkKICAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZXNEaWN0aW9uYXJ5LmdldCgpOwog
ICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1Np
bXBsZUZvbnREYXRhTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L1NpbXBsZUZvbnREYXRhTWFjLm1tCmluZGV4IDY2ZmU5MGE1OTM5MGU0Y2QyMmY2MTgzOGY4YzZh
OWRiZmI1MmFjNmMuLjk3ZWJiZjk5YzNkMmU1ZTcxY2E2MGRhY2IzZGU4MjVhNDFiNjcxN2QgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250
RGF0YU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2lt
cGxlRm9udERhdGFNYWMubW0KQEAgLTQ2MSw3ICs0NjEsNyBAQCBib29sIFNpbXBsZUZvbnREYXRh
OjpjYW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjb25zdCBVQ2hhciogY2hhcmFj
dGVycwogCiAgICAgV1RGOjpIYXNoTWFwPFN0cmluZywgYm9vbD46OkFkZFJlc3VsdCBhZGRSZXN1
bHQgPSBtX2NvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlU3VwcG9ydC0+YWRkKFN0cmluZyhjaGFy
YWN0ZXJzLCBsZW5ndGgpLCBmYWxzZSk7CiAgICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSkK
LSAgICAgICAgcmV0dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICByZXR1
cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIAogICAgIFJldGFpblB0cjxDR0ZvbnRSZWY+
IGNnRm9udChBZG9wdENGLCBDVEZvbnRDb3B5R3JhcGhpY3NGb250KHBsYXRmb3JtRGF0YSgpLmN0
Rm9udCgpLCAwKSk7CiAKQEAgLTQ4MSw3ICs0ODEsNyBAQCBib29sIFNpbXBsZUZvbnREYXRhOjpj
YW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjb25zdCBVQ2hhciogY2hhcmFjdGVy
cwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGFkZFJlc3VsdC5pdGVy
YXRvci0+c2Vjb25kID0gdHJ1ZTsKKyAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gdHJ1
ZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29t
bW9uLmNwcAppbmRleCBhM2MwNTY1OTEyMGZhZDgyY2QxMmI0YTU1YThmNDc0YjIzYzJiZWM5Li44
YmU5Mzg2MjViNDBlNTNjZWQ2NmRiNTZmYTBmOTlhNGEwMDRlNmY5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29t
bW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0
ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcApAQCAtMTE3LDcgKzExNyw3IEBAIFN0cmluZyBFeHRl
bnNpb25zM0RPcGVuR0xDb21tb246OmdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRShQbGF0
Zm9ybTNET2JqZWN0CiAgICAgaWYgKHJlc3VsdCA9PSBtX2NvbnRleHQtPm1fc2hhZGVyU291cmNl
TWFwLmVuZCgpKQogICAgICAgICByZXR1cm4gIiI7CiAKLSAgICBHcmFwaGljc0NvbnRleHQzRDo6
U2hhZGVyU291cmNlRW50cnkmIGVudHJ5ID0gcmVzdWx0LT5zZWNvbmQ7CisgICAgR3JhcGhpY3ND
b250ZXh0M0Q6OlNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3VsdC0+dmFsdWU7CiAKICAg
ICBTdHJpbmcgdHJhbnNsYXRlZFNoYWRlclNvdXJjZTsKICAgICBTdHJpbmcgc2hhZGVySW5mb0xv
ZzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9H
cmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCmluZGV4
IDc3MmNhODFhMGExNTgzZjNhMjhkZDhkNjkxZWIwMzljYzBjNTE4NjIuLmRmOWNjYjU3NDMyMjYw
YmZhNWJiMzU3OTYyM2E4ZjIyYjIwYTBiZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29u
dGV4dDNET3BlbkdMQ29tbW9uLmNwcApAQCAtNDczLDcgKzQ3Myw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmNvbXBpbGVTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCiAKICAgICBp
ZiAobGVuZ3RoKSB7CiAgICAgICAgIEhhc2hNYXA8UGxhdGZvcm0zRE9iamVjdCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlNoYWRlclNvdXJjZUVudHJ5Pjo6aXRlcmF0b3IgcmVzdWx0ID0gbV9zaGFkZXJT
b3VyY2VNYXAuZmluZChzaGFkZXIpOwotICAgICAgICBHcmFwaGljc0NvbnRleHQzRDo6U2hhZGVy
U291cmNlRW50cnkmIGVudHJ5ID0gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIEdyYXBoaWNzQ29u
dGV4dDNEOjpTaGFkZXJTb3VyY2VFbnRyeSYgZW50cnkgPSByZXN1bHQtPnZhbHVlOwogCiAgICAg
ICAgIEdMc2l6ZWkgc2l6ZSA9IDA7CiAgICAgICAgIE93bkFycmF5UHRyPEdMY2hhcj4gaW5mbyA9
IGFkb3B0QXJyYXlQdHIobmV3IEdMY2hhcltsZW5ndGhdKTsKQEAgLTExNDUsNyArMTE0NSw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlcml2KFBsYXRmb3JtM0RPYmplY3Qgc2hh
ZGVyLCBHQzNEZW51bSBwbmFtZSwgR0MzCiAgICAgICAgICAgICAqdmFsdWUgPSBzdGF0aWNfY2Fz
dDxpbnQ+KGZhbHNlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICAq
dmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ+KHJlc3VsdC0+c2Vjb25kLmlzVmFsaWQpOworICAgICAg
ICAqdmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ+KHJlc3VsdC0+dmFsdWUuaXNWYWxpZCk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgSU5GT19MT0dfTEVOR1RIOgogICAgICAgICBpZiAocmVzdWx0
ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKSB7CkBAIC0xMTcyLDcgKzExNzIsNyBAQCBTdHJp
bmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlckluZm9Mb2coUGxhdGZvcm0zRE9iamVjdCBz
aGFkZXIpCiAgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKICAgICAg
ICAgcmV0dXJuIFN0cmluZygpOyAKIAotICAgIFNoYWRlclNvdXJjZUVudHJ5IGVudHJ5ID0gcmVz
dWx0LT5zZWNvbmQ7CisgICAgU2hhZGVyU291cmNlRW50cnkgZW50cnkgPSByZXN1bHQtPnZhbHVl
OwogICAgIGlmICghZW50cnkuaXNWYWxpZCkKICAgICAgICAgcmV0dXJuIGVudHJ5LmxvZzsKIApA
QCAtMTE5OCw3ICsxMTk4LDcgQEAgU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJT
b3VyY2UoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCiAgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRl
clNvdXJjZU1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOyAKIAotICAgIHJldHVy
biByZXN1bHQtPnNlY29uZC5zb3VyY2U7CisgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWUuc291cmNl
OwogfQogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW52Zy9FR0xEaXNwbGF5T3BlblZHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW52Zy9FR0xEaXNwbGF5T3BlblZHLmNwcAppbmRleCBkNjgxZDc1ODFmYjNmYmYyOWQ4
OGUxMjZlNTM4Mzg3ODIzMGI1MjIwLi4xYTY4YWVmZjhjYzhjOWY1NDc2YjRmMDUzNTY2MjBmZTE5
MTQxYzRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
dmcvRUdMRGlzcGxheU9wZW5WRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbnZnL0VHTERpc3BsYXlPcGVuVkcuY3BwCkBAIC0xMjEsNyArMTIxLDcgQEAgRUdM
RGlzcGxheU9wZW5WRzo6fkVHTERpc3BsYXlPcGVuVkcoKQogCiAgICAgSGFzaE1hcDxFR0xTdXJm
YWNlLCBFR0xpbnQ+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3N1cmZhY2VDb25maWdJZHMuZW5k
KCk7CiAgICAgZm9yIChIYXNoTWFwPEVHTFN1cmZhY2UsIEVHTGludD46OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbV9zdXJmYWNlQ29uZmlnSWRzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAg
ICAgZGVzdHJveVN1cmZhY2UoKCppdCkuZmlyc3QpOworICAgICAgICBkZXN0cm95U3VyZmFjZSgo
Kml0KS5rZXkpOwogCiAgICAgZWdsVGVybWluYXRlKG1fZGlzcGxheSk7CiAgICAgQVNTRVJUX0VH
TF9OT19FUlJPUigpOwpAQCAtMzM4LDcgKzMzOCw3IEBAIHZvaWQgRUdMRGlzcGxheU9wZW5WRzo6
ZGVzdHJveVN1cmZhY2UoY29uc3QgRUdMU3VyZmFjZSYgc3VyZmFjZSkKIAogICAgICAgICAvLyAu
Li5idXQgb25seSBpZiB0aGVyZSdzIG5vIG90aGVyIHN1cmZhY2VzIGFzc29jaWF0ZWQgdG8gdGhh
dCBjb250ZXh0LgogICAgICAgICBmb3IgKEhhc2hNYXA8RUdMU3VyZmFjZSwgRUdMaW50Pjo6aXRl
cmF0b3IgaXQgPSBtX3N1cmZhY2VDb25maWdJZHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7
Ci0gICAgICAgICAgICBpZiAoKCppdCkuc2Vjb25kID09IHN1cmZhY2VDb25maWdJZCkgeworICAg
ICAgICAgICAgaWYgKCgqaXQpLnZhbHVlID09IHN1cmZhY2VDb25maWdJZCkgewogICAgICAgICAg
ICAgICAgIGlzQ29udGV4dFJlZmVyZW5jZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgfQpAQCAtMzU0LDcgKzM1NCw3IEBAIHZvaWQgRUdMRGlzcGxheU9wZW5W
Rzo6ZGVzdHJveVN1cmZhY2UoY29uc3QgRUdMU3VyZmFjZSYgc3VyZmFjZSkKIAogICAgIEhhc2hN
YXA8RUdMTmF0aXZlV2luZG93VHlwZSwgRUdMU3VyZmFjZT46Oml0ZXJhdG9yIGVuZCA9IG1fd2lu
ZG93U3VyZmFjZXMuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPEVHTE5hdGl2ZVdpbmRvd1R5cGUs
IEVHTFN1cmZhY2U+OjppdGVyYXRvciBpdCA9IG1fd2luZG93U3VyZmFjZXMuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmICgoKml0KS5zZWNvbmQgPT0gc3VyZmFjZSkgewor
ICAgICAgICBpZiAoKCppdCkudmFsdWUgPT0gc3VyZmFjZSkgewogICAgICAgICAgICAgbV93aW5k
b3dTdXJmYWNlcy5yZW1vdmUoaXQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAg
LTQwOSw3ICs0MDksNyBAQCBFR0xDb250ZXh0IEVHTERpc3BsYXlPcGVuVkc6OmNvbnRleHRGb3JT
dXJmYWNlKGNvbnN0IEVHTFN1cmZhY2UmIHN1cmZhY2UpCiAgICAgSGFzaE1hcDxFR0xpbnQsIEVH
TENvbnRleHQ+OjppdGVyYXRvciBlbmQgPSBtX2NvbnRleHRzLmVuZCgpOwogCiAgICAgZm9yIChI
YXNoTWFwPEVHTGludCwgRUdMQ29udGV4dD46Oml0ZXJhdG9yIGl0ID0gbV9jb250ZXh0cy5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgZWdsTWFrZUN1cnJlbnQobV9kaXNwbGF5
LCBzdXJmYWNlLCBzdXJmYWNlLCAoKml0KS5zZWNvbmQpOworICAgICAgICBlZ2xNYWtlQ3VycmVu
dChtX2Rpc3BsYXksIHN1cmZhY2UsIHN1cmZhY2UsICgqaXQpLnZhbHVlKTsKICAgICAgICAgaWYg
KGVnbEdldEVycm9yKCkgPT0gRUdMX1NVQ0NFU1MpIHsKICAgICAgICAgICAgIC8vIFJlc3RvcmUg
cHJldmlvdXMgc3VyZmFjZS9jb250ZXh0LgogICAgICAgICAgICAgaWYgKGN1cnJlbnRDb250ZXh0
ICE9IEVHTF9OT19DT05URVhUKSB7CkBAIC00MTcsOCArNDE3LDggQEAgRUdMQ29udGV4dCBFR0xE
aXNwbGF5T3BlblZHOjpjb250ZXh0Rm9yU3VyZmFjZShjb25zdCBFR0xTdXJmYWNlJiBzdXJmYWNl
KQogICAgICAgICAgICAgICAgIEFTU0VSVF9FR0xfTk9fRVJST1IoKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIC8vIENvb2wsIHN1cmZhY2UgaXMgY29tcGF0aWJsZSB0byBvbmUgb2Ygb3Vy
IGV4aXN0aW5nIGNvbnRleHRzLgotICAgICAgICAgICAgbV9jb21wYXRpYmxlQ29uZmlnSWRzLnNl
dChzdXJmYWNlQ29uZmlnSWQsICgqaXQpLmZpcnN0KTsKLSAgICAgICAgICAgIHJldHVybiAoKml0
KS5zZWNvbmQ7CisgICAgICAgICAgICBtX2NvbXBhdGlibGVDb25maWdJZHMuc2V0KHN1cmZhY2VD
b25maWdJZCwgKCppdCkua2V5KTsKKyAgICAgICAgICAgIHJldHVybiAoKml0KS52YWx1ZTsKICAg
ICAgICAgfQogICAgIH0KICAgICAvLyBSZXN0b3JlIHByZXZpb3VzIHN1cmZhY2UvY29udGV4dC4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyR0wuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJHTC5jcHAKaW5kZXggYTIyZTcyMGUxNjUwYTBmM2JjZjgxZTRmM2NkZmY3
ODE3MGQ4YWFkMC4uMDE2MjE0YThhN2QxOTRlNDY3ZWMxODE4Y2NjMTI3ZDE2MjJlZTQ4NiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJHTC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJHTC5jcHAKQEAgLTEwNSw3ICsxMDUsNyBAQCBzdHJ1Y3QgVGV4dHVyZU1h
cHBlckdMRGF0YSB7CiAgICAgICAgICAgICBHTENvbnRleHQgY3VycmVudEdMQ29uZXh0ID0gZ2V0
Q3VycmVudEdMQ29udGV4dCgpOwogICAgICAgICAgICAgR0xDb250ZXh0RGF0YU1hcDo6aXRlcmF0
b3IgaXQgPSBnbENvbnRleHREYXRhTWFwKCkuZmluZChjdXJyZW50R0xDb25leHQpOwogICAgICAg
ICAgICAgaWYgKGl0ICE9IGdsQ29udGV4dERhdGFNYXAoKS5lbmQoKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICAgICAgICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwog
CiAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNoYXJlZEdMRGF0YShnZXRDdXJyZW50
R0xDb250ZXh0KCkpKTsKICAgICAgICAgfQpAQCAtMTI0LDcgKzEyNCw3IEBAIHN0cnVjdCBUZXh0
dXJlTWFwcGVyR0xEYXRhIHsKICAgICAgICAgICAgIEdMQ29udGV4dERhdGFNYXA6OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IGdsQ29udGV4dERhdGFNYXAoKS5lbmQoKTsKICAgICAgICAgICAgIEdMQ29u
dGV4dERhdGFNYXA6Oml0ZXJhdG9yIGl0OwogICAgICAgICAgICAgZm9yIChpdCA9IGdsQ29udGV4
dERhdGFNYXAoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgICAgICBp
ZiAoaXQtPnNlY29uZCA9PSB0aGlzKQorICAgICAgICAgICAgICAgIGlmIChpdC0+dmFsdWUgPT0g
dGhpcykKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyU2hhZGVyTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3BwCmluZGV4IDBmYmRiZTk1Y2FmMTY0
NzBkZDA2MzJmMDRjMTQ0YjgyMGI2ZThiYjMuLjQ2NDlmNGI2MmQ4ZTE5YWEzYzUzYmFhYzlmNzUy
MmNmMTM5ZjMyMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNw
cApAQCAtMjA4LDcgKzIwOCw3IEBAIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW0+IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpnZXRTaGFkZXJQcm9nCiAKICAgICBUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtTWFwLmZpbmQoc2hhZGVyVHlwZSk7CiAgICAgaWYgKGl0ICE9IG1fdGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW1NYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdC0+c2Vjb25k
OworICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwogCiAgICAgc3dpdGNoIChzaGFkZXJUeXBlKSB7
CiAgICAgY2FzZSBTaW1wbGU6CkBAIC03NjUsNyArNzY1LDcgQEAgUGFzc1JlZlB0cjxTdGFuZGFy
ZEZpbHRlclByb2dyYW0+IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpnZXRTaGFkZXJGb3JG
aWx0ZXIKIAogICAgICAgICBtX2ZpbHRlck1hcC5hZGQoa2V5LCBwcm9ncmFtKTsKICAgICB9IGVs
c2UKLSAgICAgICAgcHJvZ3JhbSA9IGl0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgIHByb2dyYW0g
PSBpdGVyYXRvci0+dmFsdWU7CiAKICAgICByZXR1cm4gcHJvZ3JhbTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRQbGF0Zm9ybURhdGEu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udFBsYXRmb3Jt
RGF0YS5jcHAKaW5kZXggMTk3OTBhZDQ5YjMzMDNkZDdiNjJjN2U3YTBhODIzNjc3YjRjZmY1MS4u
MTlmNTI0NTVkMTFiMzU0Y2M0ZDQzZTY4Mzk5Y2U3OWFjOTliYzBiMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udFBsYXRmb3JtRGF0YS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udFBsYXRmb3Jt
RGF0YS5jcHAKQEAgLTI4Nyw5ICsyODcsOSBAQCBzdGF0aWMgUGFzc1JlZlB0cjxGaXhlZFNpemVG
b250RGF0YT4gY3JlYXRlRml4ZWRTaXplRm9udERhdGEoY29uc3QgQXRvbWljU3RyaW5nJgogICAg
IEZpeGVkU2l6ZUZvbnREYXRhS2V5IGtleShmYW1pbHksIHdlaWdodCwgaXRhbGljKTsKICAgICBG
aXhlZFNpemVGb250Q2FjaGU6OkFkZFJlc3VsdCByZXN1bHQgPSBnX2ZpeGVkU2l6ZUZvbnRDYWNo
ZS5hZGQoa2V5LCBSZWZQdHI8Rml4ZWRTaXplRm9udERhdGE+KCkpOwogICAgIGlmIChyZXN1bHQu
aXNOZXdFbnRyeSkKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBGaXhlZFNpemVG
b250RGF0YTo6Y3JlYXRlKGZhbWlseSwgd2VpZ2h0LCBpdGFsaWMpOworICAgICAgICByZXN1bHQu
aXRlcmF0b3ItPnZhbHVlID0gRml4ZWRTaXplRm9udERhdGE6OmNyZWF0ZShmYW1pbHksIHdlaWdo
dCwgaXRhbGljKTsKIAotICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBy
ZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIAogc3RhdGljIExPTkcgdG9HRElGb250
V2VpZ2h0KEZvbnRXZWlnaHQgZm9udFdlaWdodCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9EYXRhT2JqZWN0R3RrLmNwcAppbmRleCAxYTg0ZjhiZDMxOTUyYjI4ZTI2ODI3MWRkMmE1
ZjU3ZjQ0ZDgyN2Q3Li5hZGZjNjZlMDE1ZTUwMjI2Nzg4YzIxNDc2OGExNWIyOTEzNjg0M2I4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRGF0YU9iamVjdEd0ay5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RhdGFPYmplY3RHdGsuY3BwCkBAIC0x
NzEsNyArMTcxLDcgQEAgRGF0YU9iamVjdEd0ayogRGF0YU9iamVjdEd0azo6Zm9yQ2xpcGJvYXJk
KEd0a0NsaXBib2FyZCogY2xpcGJvYXJkKQogICAgIH0KIAogICAgIEhhc2hNYXA8R3RrQ2xpcGJv
YXJkKiwgUmVmUHRyPERhdGFPYmplY3RHdGs+ID46Oml0ZXJhdG9yIGl0ID0gb2JqZWN0TWFwLmZp
bmQoY2xpcGJvYXJkKTsKLSAgICByZXR1cm4gaXQtPnNlY29uZC5nZXQoKTsKKyAgICByZXR1cm4g
aXQtPnZhbHVlLmdldCgpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvR3RrRHJhZ0FuZERyb3BIZWxwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL0d0a0RyYWdBbmREcm9wSGVscGVyLmNwcAppbmRleCA3NjNkMTIwZDA5NDE2MjI3MjY2
MGM2MDYzMmExOTI5ODZmNTQyZWE0Li5mYzJmNTZlNjE2NmViMWFhY2RiYWRhOGY1MmZlZjNjNmRk
ODg2NGNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrRHJhZ0Fu
ZERyb3BIZWxwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtEcmFn
QW5kRHJvcEhlbHBlci5jcHAKQEAgLTcwLDcgKzcwLDcgQEAgdm9pZCBHdGtEcmFnQW5kRHJvcEhl
bHBlcjo6aGFuZGxlR2V0RHJhZ0RhdGEoR2RrRHJhZ0NvbnRleHQqIGNvbnRleHQsIEd0a1NlbGVj
dGkKICAgICBEcmFnZ2luZ0RhdGFPYmplY3RzTWFwOjppdGVyYXRvciBpdGVyYXRvciA9IG1fZHJh
Z2dpbmdEYXRhT2JqZWN0cy5maW5kKGNvbnRleHQpOwogICAgIGlmIChpdGVyYXRvciA9PSBtX2Ry
YWdnaW5nRGF0YU9iamVjdHMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBQYXN0ZWJvYXJk
SGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT5maWxsU2VsZWN0aW9uRGF0YShzZWxl
Y3Rpb25EYXRhLCBpbmZvLCBpdGVyYXRvci0+c2Vjb25kLmdldCgpKTsKKyAgICBQYXN0ZWJvYXJk
SGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT5maWxsU2VsZWN0aW9uRGF0YShzZWxl
Y3Rpb25EYXRhLCBpbmZvLCBpdGVyYXRvci0+dmFsdWUuZ2V0KCkpOwogfQogCiBzdHJ1Y3QgSGFu
ZGxlRHJhZ0xhdGVyRGF0YSB7CkBAIC0xMTYsNyArMTE2LDcgQEAgdm9pZCBHdGtEcmFnQW5kRHJv
cEhlbHBlcjo6aGFuZGxlRHJhZ0xlYXZlKEdka0RyYWdDb250ZXh0KiBnZGtDb250ZXh0LCBEcmFn
RXhpdGUKICAgICAvLyB0aGUgZHJhZy1kcm9wIHNpZ25hbC4gV2Ugd2FudCB0aGUgYWN0aW9ucyBm
b3IgZHJhZy1sZWF2ZSB0byBoYXBwZW4gYWZ0ZXIKICAgICAvLyB0aG9zZSBmb3IgZHJhZy1kcm9w
LCBzbyBzY2hlZHVsZSB0aGVtIHRvIGhhcHBlbiBhc3luY2hyb25vdXNseSBoZXJlLgogICAgIEhh
bmRsZURyYWdMYXRlckRhdGEqIGRhdGEgPSBuZXcgSGFuZGxlRHJhZ0xhdGVyRGF0YTsKLSAgICBk
YXRhLT5jb250ZXh0ID0gaXRlcmF0b3ItPnNlY29uZDsKKyAgICBkYXRhLT5jb250ZXh0ID0gaXRl
cmF0b3ItPnZhbHVlOwogICAgIGRhdGEtPmNvbnRleHQtPmV4aXRlZENhbGxiYWNrID0gZXhpdGVk
Q2FsbGJhY2s7CiAgICAgZGF0YS0+Z2x1ZSA9IHRoaXM7CiAgICAgZ190aW1lb3V0X2FkZCgwLCBy
ZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihoYW5kbGVEcmFnTGVhdmVMYXRlckNhbGxiYWNr
KSwgZGF0YSk7CkBAIC0xNDAsNyArMTQwLDcgQEAgUGFzc093blB0cjxEcmFnRGF0YT4gR3RrRHJh
Z0FuZERyb3BIZWxwZXI6OmhhbmRsZURyYWdNb3Rpb24oR2RrRHJhZ0NvbnRleHQqIGNvbnQKICAg
ICAgICAgbV9kcm9wcGluZ0NvbnRleHRzLnNldChjb250ZXh0LCBkcm9wcGluZ0NvbnRleHQpOwog
ICAgICAgICBxdWVyeU5ld0Ryb3BDb250ZXh0RGF0YShkcm9wcGluZ0NvbnRleHQsIG1fd2lkZ2V0
LCB0aW1lKTsKICAgICB9IGVsc2UgewotICAgICAgICBkcm9wcGluZ0NvbnRleHQgPSBpdGVyYXRv
ci0+c2Vjb25kOworICAgICAgICBkcm9wcGluZ0NvbnRleHQgPSBpdGVyYXRvci0+dmFsdWU7CiAg
ICAgICAgIGRyb3BwaW5nQ29udGV4dC0+bGFzdE1vdGlvblBvc2l0aW9uID0gcG9zaXRpb247CiAg
ICAgfQogCkBAIC0xNjIsNyArMTYyLDcgQEAgUGFzc093blB0cjxEcmFnRGF0YT4gR3RrRHJhZ0Fu
ZERyb3BIZWxwZXI6OmhhbmRsZURyYWdEYXRhUmVjZWl2ZWQoR2RrRHJhZ0NvbnRleHQKICAgICBp
ZiAoaXRlcmF0b3IgPT0gbV9kcm9wcGluZ0NvbnRleHRzLmVuZCgpKQogICAgICAgICByZXR1cm4g
YWRvcHRQdHIoc3RhdGljX2Nhc3Q8RHJhZ0RhdGEqPigwKSk7CiAKLSAgICBEcm9wcGluZ0NvbnRl
eHQqIGRyb3BwaW5nQ29udGV4dCA9IGl0ZXJhdG9yLT5zZWNvbmQ7CisgICAgRHJvcHBpbmdDb250
ZXh0KiBkcm9wcGluZ0NvbnRleHQgPSBpdGVyYXRvci0+dmFsdWU7CiAgICAgZHJvcHBpbmdDb250
ZXh0LT5wZW5kaW5nRGF0YVJlcXVlc3RzLS07CiAgICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVs
dFBhc3RlYm9hcmRIZWxwZXIoKS0+ZmlsbERhdGFPYmplY3RGcm9tRHJvcERhdGEoc2VsZWN0aW9u
RGF0YSwgaW5mbywgZHJvcHBpbmdDb250ZXh0LT5kYXRhT2JqZWN0LmdldCgpKTsKIApAQCAtMTg1
LDcgKzE4NSw3IEBAIFBhc3NPd25QdHI8RHJhZ0RhdGE+IEd0a0RyYWdBbmREcm9wSGVscGVyOjpo
YW5kbGVEcmFnRHJvcChHZGtEcmFnQ29udGV4dCogY29udGV4CiAgICAgaWYgKGl0ZXJhdG9yID09
IG1fZHJvcHBpbmdDb250ZXh0cy5lbmQoKSkKICAgICAgICAgcmV0dXJuIGFkb3B0UHRyKHN0YXRp
Y19jYXN0PERyYWdEYXRhKj4oMCkpOwogCi0gICAgRHJvcHBpbmdDb250ZXh0KiBkcm9wcGluZ0Nv
bnRleHQgPSBpdGVyYXRvci0+c2Vjb25kOworICAgIERyb3BwaW5nQ29udGV4dCogZHJvcHBpbmdD
b250ZXh0ID0gaXRlcmF0b3ItPnZhbHVlOwogICAgIGRyb3BwaW5nQ29udGV4dC0+ZHJvcEhhcHBl
bmVkID0gdHJ1ZTsKIAogICAgIHJldHVybiBhZG9wdFB0cihuZXcgRHJhZ0RhdGEoZHJvcHBpbmdD
b250ZXh0LT5kYXRhT2JqZWN0LmdldCgpLCBwb3NpdGlvbiwgCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGszLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0azMuY3BwCmluZGV4IDc3NDkzOTE1MTcxM2RmMDEx
MzRkNmNlYTRlZDlkNzA0YjRkY2ZjMGIuLjBhODM4MjdjN2ZlYmNiZTQwNTQ4ZmFkNTYyYjU0MTE3
MWVjMTY5ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJU
aGVtZUd0azMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVt
ZUd0azMuY3BwCkBAIC01Niw3ICs1Niw3IEBAIHN0YXRpYyB2b2lkIGd0a1N0eWxlQ2hhbmdlZENh
bGxiYWNrKEdPYmplY3QqLCBHUGFyYW1TcGVjKikKIHsKICAgICBTdHlsZUNvbnRleHRNYXA6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IHN0eWxlQ29udGV4dE1hcCgpLmVuZCgpOwogICAgIGZvciAoU3R5
bGVDb250ZXh0TWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gc3R5bGVDb250ZXh0TWFwKCkuYmVn
aW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikKLSAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfaW52
YWxpZGF0ZShpdGVyLT5zZWNvbmQuZ2V0KCkpOworICAgICAgICBndGtfc3R5bGVfY29udGV4dF9p
bnZhbGlkYXRlKGl0ZXItPnZhbHVlLmdldCgpKTsKIAogICAgIFBhZ2U6OnNjaGVkdWxlRm9yY2Vk
U3R5bGVSZWNhbGNGb3JBbGxQYWdlcygpOwogfQpAQCAtNzksNyArNzksNyBAQCBzdGF0aWMgR3Rr
U3R5bGVDb250ZXh0KiBnZXRTdHlsZUNvbnRleHQoR1R5cGUgd2lkZ2V0VHlwZSkKIHsKICAgICBT
dHlsZUNvbnRleHRNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBzdHlsZUNvbnRleHRNYXAoKS5hZGQo
d2lkZ2V0VHlwZSwgMCk7CiAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgcmV0
dXJuIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLmdldCgpOworICAgICAgICByZXR1cm4gcmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKIAogICAgIEd0a1dpZGdldFBhdGgqIHBhdGggPSBndGtf
d2lkZ2V0X3BhdGhfbmV3KCk7CiAgICAgZ3RrX3dpZGdldF9wYXRoX2FwcGVuZF90eXBlKHBhdGgs
IHdpZGdldFR5cGUpOwpAQCAtMTExLDcgKzExMSw3IEBAIHN0YXRpYyBHdGtTdHlsZUNvbnRleHQq
IGdldFN0eWxlQ29udGV4dChHVHlwZSB3aWRnZXRUeXBlKQogICAgIGd0a19zdHlsZV9jb250ZXh0
X3NldF9wYXRoKGNvbnRleHQuZ2V0KCksIHBhdGgpOwogICAgIGd0a193aWRnZXRfcGF0aF9mcmVl
KHBhdGgpOwogCi0gICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBjb250ZXh0OworICAgIHJl
c3VsdC5pdGVyYXRvci0+dmFsdWUgPSBjb250ZXh0OwogICAgIHJldHVybiBjb250ZXh0LmdldCgp
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsYmFy
VGhlbWVNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVN
YWMubW0KaW5kZXggOTZhYTEyYTI2OTE0N2Y3NjhlZTNmNjQ1MWRmZWI1MjczZjk0ZWM0OS4uZmQ5
YjcyNGE0ZDljNGI0NzExNGVkZjdkYmJjODhmYzU4NTJmMTZkNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbGJhclRoZW1lTWFjLm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxiYXJUaGVtZU1hYy5tbQpAQCAtODYsOCArODYsOCBA
QCBzdGF0aWMgU2Nyb2xsYmFyUGFpbnRlck1hcCogc2Nyb2xsYmFyTWFwKCkKICAgICAgICAgcmV0
dXJuOwogICAgIFNjcm9sbGJhclBhaW50ZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IHNjcm9sbGJhck1h
cCgpLT5lbmQoKTsKICAgICBmb3IgKFNjcm9sbGJhclBhaW50ZXJNYXA6Oml0ZXJhdG9yIGl0ID0g
c2Nyb2xsYmFyTWFwKCktPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpdC0+
Zmlyc3QtPnN0eWxlQ2hhbmdlZCgpOwotICAgICAgICBpdC0+Zmlyc3QtPmludmFsaWRhdGUoKTsK
KyAgICAgICAgaXQtPmtleS0+c3R5bGVDaGFuZ2VkKCk7CisgICAgICAgIGl0LT5rZXktPmludmFs
aWRhdGUoKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvQ3JlZGVudGlhbFN0b3JhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9DcmVkZW50aWFsU3RvcmFnZS5jcHAKaW5kZXggZjYyNGQ0ZmNiMjkyY2M0MGM1YjY5
ZWVkZjNlNWM4NzUxNTJmMDFmOS4uOGI1YWM0NzhiMjEzNTA2Y2Q5Y2VhY2E5YmE1ODUxYmNkMjkz
YTVjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9DcmVkZW50
aWFsU3RvcmFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9DcmVk
ZW50aWFsU3RvcmFnZS5jcHAKQEAgLTE0Nyw3ICsxNDcsNyBAQCBib29sIENyZWRlbnRpYWxTdG9y
YWdlOjpzZXQoY29uc3QgQ3JlZGVudGlhbCYgY3JlZGVudGlhbCwgY29uc3QgS1VSTCYgdXJsKQog
ICAgIGlmIChpdGVyID09IHBhdGhUb0RlZmF1bHRQcm90ZWN0aW9uU3BhY2VNYXAoKS5lbmQoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEFTU0VSVChvcmlnaW5zV2l0aENyZWRlbnRpYWxz
KCkuY29udGFpbnMob3JpZ2luU3RyaW5nRnJvbVVSTCh1cmwpKSk7Ci0gICAgcHJvdGVjdGlvblNw
YWNlVG9DcmVkZW50aWFsTWFwKCkuc2V0KGl0ZXItPnNlY29uZCwgY3JlZGVudGlhbCk7CisgICAg
cHJvdGVjdGlvblNwYWNlVG9DcmVkZW50aWFsTWFwKCkuc2V0KGl0ZXItPnZhbHVlLCBjcmVkZW50
aWFsKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTU2LDcgKzE1Niw3IEBAIENyZWRlbnRp
YWwgQ3JlZGVudGlhbFN0b3JhZ2U6OmdldChjb25zdCBLVVJMJiB1cmwpCiAgICAgUGF0aFRvRGVm
YXVsdFByb3RlY3Rpb25TcGFjZU1hcDo6aXRlcmF0b3IgaXRlciA9IGZpbmREZWZhdWx0UHJvdGVj
dGlvblNwYWNlRm9yVVJMKHVybCk7CiAgICAgaWYgKGl0ZXIgPT0gcGF0aFRvRGVmYXVsdFByb3Rl
Y3Rpb25TcGFjZU1hcCgpLmVuZCgpKQogICAgICAgICByZXR1cm4gQ3JlZGVudGlhbCgpOwotICAg
IHJldHVybiBwcm90ZWN0aW9uU3BhY2VUb0NyZWRlbnRpYWxNYXAoKS5nZXQoaXRlci0+c2Vjb25k
KTsKKyAgICByZXR1cm4gcHJvdGVjdGlvblNwYWNlVG9DcmVkZW50aWFsTWFwKCkuZ2V0KGl0ZXIt
PnZhbHVlKTsKIH0KIAogdm9pZCBDcmVkZW50aWFsU3RvcmFnZTo6c2V0UHJpdmF0ZU1vZGUoYm9v
bCBtb2RlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQ
SGVhZGVyTWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUEhlYWRl
ck1hcC5jcHAKaW5kZXggNTAwOTFlMTlkM2FmNTZmZjRhOGRmMTc1YmY4OTc4NzAwNzYxNDI4MC4u
ZGVmZTFhZTg0YmYwYWRmMDc3OTQ5NTViMTFhNWRjNzNlYTAyM2UyNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQSGVhZGVyTWFwLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBIZWFkZXJNYXAuY3BwCkBAIC01Miw3ICs1
Miw3IEBAIFBhc3NPd25QdHI8Q3Jvc3NUaHJlYWRIVFRQSGVhZGVyTWFwRGF0YT4gSFRUUEhlYWRl
ck1hcDo6Y29weURhdGEoKSBjb25zdAogCiAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0
b3IgZW5kX2l0ID0gZW5kKCk7CiAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IGJlZ2luKCk7IGl0ICE9IGVuZF9pdDsgKytpdCkgewotICAgICAgICBkYXRhLT5hcHBl
bmQobWFrZV9wYWlyKGl0LT5maXJzdC5zdHJpbmcoKS5pc29sYXRlZENvcHkoKSwgaXQtPnNlY29u
ZC5pc29sYXRlZENvcHkoKSkpOworICAgICAgICBkYXRhLT5hcHBlbmQobWFrZV9wYWlyKGl0LT5r
ZXkuc3RyaW5nKCkuaXNvbGF0ZWRDb3B5KCksIGl0LT52YWx1ZS5pc29sYXRlZENvcHkoKSkpOwog
ICAgIH0KICAgICByZXR1cm4gZGF0YS5yZWxlYXNlKCk7CiB9CkBAIC0xMDAsNyArMTAwLDcgQEAg
U3RyaW5nIEhUVFBIZWFkZXJNYXA6OmdldChjb25zdCBjaGFyKiBuYW1lKSBjb25zdAogICAgIGNv
bnN0X2l0ZXJhdG9yIGkgPSBmaW5kPGNvbnN0IGNoYXIqLCBDYXNlRm9sZGluZ0NTdHJpbmdUcmFu
c2xhdG9yPihuYW1lKTsKICAgICBpZiAoaSA9PSBlbmQoKSkKICAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOwotICAgIHJldHVybiBpLT5zZWNvbmQ7CisgICAgcmV0dXJuIGktPnZhbHVlOwogfQogICAg
IAogYm9vbCBIVFRQSGVhZGVyTWFwOjpjb250YWlucyhjb25zdCBjaGFyKiBuYW1lKSBjb25zdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9NSU1FSGVhZGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvTUlNRUhlYWRlci5jcHAKaW5kZXgg
NWQ2Yjg1OGY0NmU0MzgzZmNiMmZlYTYyODU4YWY3NTMyZDQzYTVhZi4uZjRlM2ViZjY3NGRlNmJk
MWQyNGE5NTkwYTQ4MThiZWI2ZmQ4ZGU2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9NSU1FSGVhZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL01JTUVIZWFkZXIuY3BwCkBAIC04Niw3ICs4Niw3IEBAIFBhc3NSZWZQdHI8TUlN
RUhlYWRlcj4gTUlNRUhlYWRlcjo6cGFyc2VIZWFkZXIoU2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXIq
IGJ1ZmZlcikKICAgICBLZXlWYWx1ZU1hcDo6aXRlcmF0b3IgbWltZVBhcmFtZXRlcnNJdGVyYXRv
ciA9IGtleVZhbHVlUGFpcnMuZmluZCgiY29udGVudC10eXBlIik7CiAgICAgaWYgKG1pbWVQYXJh
bWV0ZXJzSXRlcmF0b3IgIT0ga2V5VmFsdWVQYWlycy5lbmQoKSkgewogICAgICAgICAvLyBGSVhN
RTogbWFrZSBDb250ZW50VHlwZVBhcnNlciBtb3JlIGZsZXhpYmxlIHNvIHdlIGRvbid0IGhhdmUg
dG8gc3ludGhlc2l6ZSB0aGUgIkNvbnRlbnQtVHlwZToiLgotICAgICAgICBDb250ZW50VHlwZVBh
cnNlciBjb250ZW50VHlwZVBhcnNlcihtYWtlU3RyaW5nKCJDb250ZW50LVR5cGU6IiwgbWltZVBh
cmFtZXRlcnNJdGVyYXRvci0+c2Vjb25kKSk7CisgICAgICAgIENvbnRlbnRUeXBlUGFyc2VyIGNv
bnRlbnRUeXBlUGFyc2VyKG1ha2VTdHJpbmcoIkNvbnRlbnQtVHlwZToiLCBtaW1lUGFyYW1ldGVy
c0l0ZXJhdG9yLT52YWx1ZSkpOwogICAgICAgICBtaW1lSGVhZGVyLT5tX2NvbnRlbnRUeXBlID0g
Y29udGVudFR5cGVQYXJzZXIubWltZVR5cGUoKTsKICAgICAgICAgaWYgKCFtaW1lSGVhZGVyLT5p
c011bHRpcGFydCgpKQogICAgICAgICAgICAgbWltZUhlYWRlci0+bV9jaGFyc2V0ID0gY29udGVu
dFR5cGVQYXJzZXIuY2hhcnNldCgpLnN0cmlwV2hpdGVTcGFjZSgpOwpAQCAtMTA1LDExICsxMDUs
MTEgQEAgUGFzc1JlZlB0cjxNSU1FSGVhZGVyPiBNSU1FSGVhZGVyOjpwYXJzZUhlYWRlcihTaGFy
ZWRCdWZmZXJDaHVua1JlYWRlciogYnVmZmVyKQogCiAgICAgbWltZVBhcmFtZXRlcnNJdGVyYXRv
ciA9IGtleVZhbHVlUGFpcnMuZmluZCgiY29udGVudC10cmFuc2Zlci1lbmNvZGluZyIpOwogICAg
IGlmIChtaW1lUGFyYW1ldGVyc0l0ZXJhdG9yICE9IGtleVZhbHVlUGFpcnMuZW5kKCkpCi0gICAg
ICAgIG1pbWVIZWFkZXItPm1fY29udGVudFRyYW5zZmVyRW5jb2RpbmcgPSBwYXJzZUNvbnRlbnRU
cmFuc2ZlckVuY29kaW5nKG1pbWVQYXJhbWV0ZXJzSXRlcmF0b3ItPnNlY29uZCk7CisgICAgICAg
IG1pbWVIZWFkZXItPm1fY29udGVudFRyYW5zZmVyRW5jb2RpbmcgPSBwYXJzZUNvbnRlbnRUcmFu
c2ZlckVuY29kaW5nKG1pbWVQYXJhbWV0ZXJzSXRlcmF0b3ItPnZhbHVlKTsKIAogICAgIG1pbWVQ
YXJhbWV0ZXJzSXRlcmF0b3IgPSBrZXlWYWx1ZVBhaXJzLmZpbmQoImNvbnRlbnQtbG9jYXRpb24i
KTsKICAgICBpZiAobWltZVBhcmFtZXRlcnNJdGVyYXRvciAhPSBrZXlWYWx1ZVBhaXJzLmVuZCgp
KQotICAgICAgICBtaW1lSGVhZGVyLT5tX2NvbnRlbnRMb2NhdGlvbiA9IG1pbWVQYXJhbWV0ZXJz
SXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgbWltZUhlYWRlci0+bV9jb250ZW50TG9jYXRpb24g
PSBtaW1lUGFyYW1ldGVyc0l0ZXJhdG9yLT52YWx1ZTsKIAogICAgIHJldHVybiBtaW1lSGVhZGVy
LnJlbGVhc2UoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvUmVzb3VyY2VIYW5kbGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9S
ZXNvdXJjZUhhbmRsZS5jcHAKaW5kZXggN2RkYzQ3ZTRlYTc5OWE0NmRlZTZmMzJjZmQwNzhlZjc1
MTU0ZjFlZS4uNmQxMmY5ZDg5YjAyNDc3NDZhNTdlMWJiY2FmYjJjMjE3ZDU5MTAzNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAK
QEAgLTcxLDcgKzcxLDcgQEAgUGFzc1JlZlB0cjxSZXNvdXJjZUhhbmRsZT4gUmVzb3VyY2VIYW5k
bGU6OmNyZWF0ZShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY28KICAgICBCdWlsdGluUmVz
b3VyY2VIYW5kbGVDb25zdHJ1Y3Rvck1hcDo6aXRlcmF0b3IgcHJvdG9jb2xNYXBJdGVtID0gYnVp
bHRpblJlc291cmNlSGFuZGxlQ29uc3RydWN0b3JNYXAoKS5maW5kKHJlcXVlc3QudXJsKCkucHJv
dG9jb2woKSk7CiAKICAgICBpZiAocHJvdG9jb2xNYXBJdGVtICE9IGJ1aWx0aW5SZXNvdXJjZUhh
bmRsZUNvbnN0cnVjdG9yTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiBwcm90b2NvbE1hcEl0
ZW0tPnNlY29uZChyZXF1ZXN0LCBjbGllbnQpOworICAgICAgICByZXR1cm4gcHJvdG9jb2xNYXBJ
dGVtLT52YWx1ZShyZXF1ZXN0LCBjbGllbnQpOwogCiAgICAgUmVmUHRyPFJlc291cmNlSGFuZGxl
PiBuZXdIYW5kbGUoYWRvcHRSZWYobmV3IFJlc291cmNlSGFuZGxlKHJlcXVlc3QsIGNsaWVudCwg
ZGVmZXJzTG9hZGluZywgc2hvdWxkQ29udGVudFNuaWZmKSkpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcAppbmRl
eCA2NGViYzE4YzhhNzQ1MGRmNjRhNjIwYTY2ZDNlMzY4MzE3ZTFjOTY5Li5mNmMwZTEzZTc5Y2Yx
NDc5ZjhmZWJhNjU3YzBhZmJkMjU2NjdkYmY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHAKQEAgLTM3NCw3ICsz
NzQsNyBAQCB2b2lkIFJlc291cmNlUmVxdWVzdEJhc2U6OmFkZEhUVFBIZWFkZXJGaWVsZChjb25z
dCBBdG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cgogICAgIHVwZGF0ZVJlc291cmNlUmVxdWVz
dCgpOwogICAgIEhUVFBIZWFkZXJNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX2h0dHBIZWFkZXJG
aWVsZHMuYWRkKG5hbWUsIHZhbHVlKTsKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAg
ICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCArPSAiLCIgKyB2YWx1ZTsKKyAgICAgICAgcmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZSArPSAiLCIgKyB2YWx1ZTsKIAogICAgIGlmICh1cmwoKS5wcm90
b2NvbElzSW5IVFRQRmFtaWx5KCkpCiAgICAgICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9
IGZhbHNlOwpAQCAtMzg0LDcgKzM4NCw3IEBAIHZvaWQgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6YWRk
SFRUUEhlYWRlckZpZWxkcyhjb25zdCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJGaWVsZHMpCiB7CiAg
ICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaGVhZGVyRmllbGRzLmVuZCgp
OwogICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBoZWFkZXJGaWVs
ZHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBhZGRIVFRQSGVhZGVyRmllbGQo
aXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsKKyAgICAgICAgYWRkSFRUUEhlYWRlckZpZWxkKGl0LT5r
ZXksIGl0LT52YWx1ZSk7CiB9CiAKIGJvb2wgZXF1YWxJZ25vcmluZ0hlYWRlckZpZWxkcyhjb25z
dCBSZXNvdXJjZVJlcXVlc3RCYXNlJiBhLCBjb25zdCBSZXNvdXJjZVJlcXVlc3RCYXNlJiBiKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jl
c291cmNlUmVxdWVzdEJsYWNrQmVycnkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9ibGFja2JlcnJ5L1Jlc291cmNlUmVxdWVzdEJsYWNrQmVycnkuY3BwCmluZGV4IDlmNmZm
YWJhNTU2ZDIzMDNmNmZhOWQxYWI5NGJjNmVhYzhkY2FhYzYuLjBjODEyNzM4ZDVjNTVkODdkMjU3
NWIzZjc4NmIwMDQ4NmI5MTg1MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJjZVJlcXVlc3RCbGFja0JlcnJ5LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvUmVzb3VyY2VSZXF1ZXN0
QmxhY2tCZXJyeS5jcHAKQEAgLTE0MCw3ICsxNDAsNyBAQCBSZXNvdXJjZVJlcXVlc3Q6OlRhcmdl
dFR5cGUgUmVzb3VyY2VSZXF1ZXN0Ojp0YXJnZXRUeXBlRnJvbU1pbWVUeXBlKGNvbnN0IFN0cmlu
ZwogICAgIGlmIChpdGVyID09IG1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuIFJlc291cmNlUmVx
dWVzdDo6VGFyZ2V0SXNVbnNwZWNpZmllZDsKIAotICAgIHJldHVybiBpdGVyLT5zZWNvbmQ7Cisg
ICAgcmV0dXJuIGl0ZXItPnZhbHVlOwogfQogCiB2b2lkIFJlc291cmNlUmVxdWVzdDo6aW5pdGlh
bGl6ZVBsYXRmb3JtUmVxdWVzdChOZXR3b3JrUmVxdWVzdCYgcGxhdGZvcm1SZXF1ZXN0LCBib29s
IGNvb2tpZXNFbmFibGVkLCBib29sIGlzSW5pdGlhbCwgYm9vbCBpc1JlZGlyZWN0KSBjb25zdApA
QCAtMTk4LDggKzE5OCw4IEBAIHZvaWQgUmVzb3VyY2VSZXF1ZXN0Ojppbml0aWFsaXplUGxhdGZv
cm1SZXF1ZXN0KE5ldHdvcmtSZXF1ZXN0JiBwbGF0Zm9ybVJlcXVlc3QsCiAgICAgICAgIGJvb2wg
Y29va2llSGVhZGVyTWF5QmVEaXJ0eSA9IGlzUmVkaXJlY3QgfHwgY2FjaGVQb2xpY3koKSA9PSBX
ZWJDb3JlOjpSZWxvYWRJZ25vcmluZ0NhY2hlRGF0YSB8fCBjYWNoZVBvbGljeSgpID09IFdlYkNv
cmU6OlJldHVybkNhY2hlRGF0YUVsc2VMb2FkOwogCiAgICAgICAgIGZvciAoSFRUUEhlYWRlck1h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBodHRwSGVhZGVyRmllbGRzKCkuYmVnaW4oKTsgaXQgIT0g
aHR0cEhlYWRlckZpZWxkcygpLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgICAgICBTdHJpbmcga2V5
ID0gaXQtPmZpcnN0OwotICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0gaXQtPnNlY29uZDsKKyAg
ICAgICAgICAgIFN0cmluZyBrZXkgPSBpdC0+a2V5OworICAgICAgICAgICAgU3RyaW5nIHZhbHVl
ID0gaXQtPnZhbHVlOwogICAgICAgICAgICAgaWYgKCFrZXkuaXNFbXB0eSgpKSB7CiAgICAgICAg
ICAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGtleSwgIkNvb2tpZSIpKSB7CiAgICAgICAg
ICAgICAgICAgICAgIC8vIFdlIHdvbid0IHVzZSB0aGUgb2xkIGNvb2tpZXMgb2YgcmVzb3VyY2VS
ZXF1ZXN0IGZvciBuZXcgbG9jYXRpb24gYmVjYXVzZSB0aGVzZSBjb29raWVzIG1heSBiZSBjaGFu
Z2VkIGJ5IHJlZGlyZWN0aW9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRk5ldC5jcHAKaW5kZXggZjZkMWYzODIxMjYy
ZjE5NTA0MTU1OWEyNTZjMDJiZDZiZDc4MjllNS4uMDFlOGI4YWU1YzBkMWM2YTZhOGYwMzMwODVl
OTBmMDEwYmMxZjdjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZOZXQuY3BwCkBAIC00MjgsNyArNDI4LDcgQEAg
c3RhdGljIENGVVJMUmVxdWVzdFJlZiBtYWtlRmluYWxSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVx
dWVzdCYgcmVxdWVzdCwgYm9vbCBzaG8KICAgICAgICAgaWYgKCFzc2xQcm9wcykKICAgICAgICAg
ICAgIHNzbFByb3BzLmFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0
b3JEZWZhdWx0LCAwLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGlj
dGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CiAjaWYgUExBVEZPUk0oV0lOKQotICAgICAgICB3a1Nl
dENsaWVudENlcnRpZmljYXRlSW5TU0xQcm9wZXJ0aWVzKHNzbFByb3BzLmdldCgpLCAoY2xpZW50
Q2VydC0+c2Vjb25kKS5nZXQoKSk7CisgICAgICAgIHdrU2V0Q2xpZW50Q2VydGlmaWNhdGVJblNT
TFByb3BlcnRpZXMoc3NsUHJvcHMuZ2V0KCksIChjbGllbnRDZXJ0LT52YWx1ZSkuZ2V0KCkpOwog
I2VuZGlmCiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2NmL1Jlc291cmNlUmVxdWVzdENGTmV0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0Q0ZOZXQuY3BwCmluZGV4IDU3YTZmYjJjOGE0YzA4
Zjc5ZmJkNGI5YmM1NWI4NWE5MzQyNjdhMzcuLjhjZmY4N2NhMGQ1OGVhMmU1MjNmMzczMGQ2YjRh
NzczMGIwNmJlNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y2YvUmVzb3VyY2VSZXF1ZXN0Q0ZOZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0Q0ZOZXQuY3BwCkBAIC0xMjAsOCArMTIwLDggQEAg
c3RhdGljIGlubGluZSB2b2lkIHNldEhlYWRlckZpZWxkcyhDRk11dGFibGVVUkxSZXF1ZXN0UmVm
IHJlcXVlc3QsIGNvbnN0IEhUVFBIZWEKIAogICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IHJlcXVlc3RIZWFkZXJzLmVuZCgpOwogICAgIGZvciAoSFRUUEhlYWRlck1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSByZXF1ZXN0SGVhZGVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKLSAgICAgICAgQ0ZTdHJpbmdSZWYga2V5ID0gaXQtPmZpcnN0LmNyZWF0ZUNGU3RyaW5n
KCk7Ci0gICAgICAgIENGU3RyaW5nUmVmIHZhbHVlID0gaXQtPnNlY29uZC5jcmVhdGVDRlN0cmlu
ZygpOworICAgICAgICBDRlN0cmluZ1JlZiBrZXkgPSBpdC0+a2V5LmNyZWF0ZUNGU3RyaW5nKCk7
CisgICAgICAgIENGU3RyaW5nUmVmIHZhbHVlID0gaXQtPnZhbHVlLmNyZWF0ZUNGU3RyaW5nKCk7
CiAgICAgICAgIENGVVJMUmVxdWVzdFNldEhUVFBIZWFkZXJGaWVsZFZhbHVlKHJlcXVlc3QsIGtl
eSwgdmFsdWUpOwogICAgICAgICBDRlJlbGVhc2Uoa2V5KTsKICAgICAgICAgQ0ZSZWxlYXNlKHZh
bHVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9S
ZXNvdXJjZUhhbmRsZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHAKaW5kZXggYWYwNzVlZjllMzIxODhlNzcx
NDk3ZWJmN2M3NGRjMWFhMTVlMjE3YS4uNjViY2MxMGFkM2QyMDA1ZDY4OWQ3M2U4ZGQ2Nzk4OGI5
YzVjYjVkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJs
L1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHAKQEAgLTcwMyw4ICs3MDMsOCBA
QCB2b2lkIFJlc291cmNlSGFuZGxlTWFuYWdlcjo6aW5pdGlhbGl6ZUhhbmRsZShSZXNvdXJjZUhh
bmRsZSogam9iKQogICAgICAgICBIVFRQSGVhZGVyTWFwIGN1c3RvbUhlYWRlcnMgPSBqb2ItPmZp
cnN0UmVxdWVzdCgpLmh0dHBIZWFkZXJGaWVsZHMoKTsKICAgICAgICAgSFRUUEhlYWRlck1hcDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gY3VzdG9tSGVhZGVycy5lbmQoKTsKICAgICAgICAgZm9yIChI
VFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGN1c3RvbUhlYWRlcnMuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBTdHJpbmcga2V5ID0gaXQtPmZpcnN0Owot
ICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIFN0cmlu
ZyBrZXkgPSBpdC0+a2V5OworICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0gaXQtPnZhbHVlOwog
ICAgICAgICAgICAgU3RyaW5nIGhlYWRlclN0cmluZyhrZXkpOwogICAgICAgICAgICAgaGVhZGVy
U3RyaW5nLmFwcGVuZCgiOiAiKTsKICAgICAgICAgICAgIGhlYWRlclN0cmluZy5hcHBlbmQodmFs
dWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvUmVz
b3VyY2VSZXF1ZXN0TWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMv
UmVzb3VyY2VSZXF1ZXN0TWFjLm1tCmluZGV4IDk2YzQ5N2Q1MDNiNTQ3ZTNiMDFhOWEyNTJhNThm
YzJlZWYzZjk0NDQuLjkzMjE2Y2I1NWU4NTc3MzEzNmYzZThjM2EwN2NlNmZiNTU2ZTA2ZDIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlUmVx
dWVzdE1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNv
dXJjZVJlcXVlc3RNYWMubW0KQEAgLTE1NSw3ICsxNTUsNyBAQCB2b2lkIFJlc291cmNlUmVxdWVz
dDo6ZG9VcGRhdGVQbGF0Zm9ybVJlcXVlc3QoKQogICAgICAgICBbbnNSZXF1ZXN0IHNldFZhbHVl
Om5pbCBmb3JIVFRQSGVhZGVyRmllbGQ6W29sZEhlYWRlckZpZWxkTmFtZXMgb2JqZWN0QXRJbmRl
eDppIC0gMV1dOwogICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGh0dHBI
ZWFkZXJGaWVsZHMoKS5lbmQoKTsKICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gaHR0cEhlYWRlckZpZWxkcygpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAg
ICAgICAgW25zUmVxdWVzdCBzZXRWYWx1ZTppdC0+c2Vjb25kIGZvckhUVFBIZWFkZXJGaWVsZDpp
dC0+Zmlyc3RdOworICAgICAgICBbbnNSZXF1ZXN0IHNldFZhbHVlOml0LT52YWx1ZSBmb3JIVFRQ
SGVhZGVyRmllbGQ6aXQtPmtleV07CiAKICAgICAvLyBUaGUgYmVsb3cgY2hlY2sgY2FuIGJlIHJl
bW92ZWQgb25jZSB3ZSByZXF1aXJlIGEgdmVyc2lvbiBvZiBGb3VuZGF0aW9uIHdpdGggLVtOU011
dGFibGVVUkxSZXF1ZXN0IHNldENvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJh
eTpdIG1ldGhvZC4KICAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0NvbnRlbnREaXNwb3NpdGlvbkVu
Y29kaW5nRmFsbGJhY2tBcnJheSA9IFtOU011dGFibGVVUkxSZXF1ZXN0IGluc3RhbmNlc1Jlc3Bv
bmRUb1NlbGVjdG9yOkBzZWxlY3RvcihzZXRDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxi
YWNrQXJyYXk6KV07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L3F0L1Jlc291cmNlUmVxdWVzdFF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvcXQvUmVzb3VyY2VSZXF1ZXN0UXQuY3BwCmluZGV4IGRiYjdiNzRkZDU5YzRmNGQwZjJlY2Vj
ZmRiZTA4MTNkMjhiNzRhM2UuLmU4NGU2NzdhNWY3MmM3MWU4OWM2MDBmZDc3NzAwYmI2ODIyMTRj
MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvcXQvUmVzb3Vy
Y2VSZXF1ZXN0UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvcXQv
UmVzb3VyY2VSZXF1ZXN0UXQuY3BwCkBAIC00OSw4ICs0OSw4IEBAIFFOZXR3b3JrUmVxdWVzdCBS
ZXNvdXJjZVJlcXVlc3Q6OnRvTmV0d29ya1JlcXVlc3QoTmV0d29ya2luZ0NvbnRleHQgKmNvbnRl
eHQpIGNvCiAgICAgY29uc3QgSFRUUEhlYWRlck1hcCAmaGVhZGVycyA9IGh0dHBIZWFkZXJGaWVs
ZHMoKTsKICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaGVhZGVy
cy5iZWdpbigpLCBlbmQgPSBoZWFkZXJzLmVuZCgpOwogICAgICAgICAgaXQgIT0gZW5kOyArK2l0
KSB7Ci0gICAgICAgIFFCeXRlQXJyYXkgbmFtZSA9IFFTdHJpbmcoaXQtPmZpcnN0KS50b0xhdGlu
MSgpOwotICAgICAgICBRQnl0ZUFycmF5IHZhbHVlID0gUVN0cmluZyhpdC0+c2Vjb25kKS50b0xh
dGluMSgpOworICAgICAgICBRQnl0ZUFycmF5IG5hbWUgPSBRU3RyaW5nKGl0LT5rZXkpLnRvTGF0
aW4xKCk7CisgICAgICAgIFFCeXRlQXJyYXkgdmFsdWUgPSBRU3RyaW5nKGl0LT52YWx1ZSkudG9M
YXRpbjEoKTsKICAgICAgICAgLy8gUU5ldHdvcmtSZXF1ZXN0OjpzZXRSYXdIZWFkZXIoKSB3b3Vs
ZCByZW1vdmUgdGhlIGhlYWRlciBpZiB0aGUgdmFsdWUgaXMgbnVsbAogICAgICAgICAvLyBNYWtl
IHN1cmUgdG8gc2V0IGFuIGVtcHR5IGhlYWRlciBpbnN0ZWFkIG9mIG51bGwgaGVhZGVyLgogICAg
ICAgICBpZiAoIXZhbHVlLmlzTnVsbCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcAppbmRleCAzMGEy
ZGU0NTVlNDJkYmMzYmFhZmFiMzQ5YTU0ZDA4YzViOWM5YzI1Li5kYzNiMmUyYzVmZWUwODQwNjU5
OGE0ZjlmOTFmYTc0NmVlNjg2MGY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcApAQCAtNDQ4LDcg
KzQ0OCw3IEBAIHN0YXRpYyB2b2lkIHNlbmRSZXF1ZXN0Q2FsbGJhY2soR09iamVjdCogc291cmNl
LCBHQXN5bmNSZXN1bHQqIHJlcywgZ3BvaW50ZXIgZGF0CiAKICAgICAgICAgaWYgKGhhc1VuaWdu
b3JlZFRMU0Vycm9ycyhoYW5kbGUuZ2V0KCkpKSB7CiAgICAgICAgICAgICBDZXJ0aWZpY2F0ZXNN
YXA6Oml0ZXJhdG9yIGl0ZXIgPSBjbGllbnRDZXJ0aWZpY2F0ZXMoKS5maW5kKGhhbmRsZS0+Zmly
c3RSZXF1ZXN0KCkudXJsKCkuaG9zdCgpLmxvd2VyKCkpOwotICAgICAgICAgICAgaWYgKGl0ZXIg
PT0gY2xpZW50Q2VydGlmaWNhdGVzKCkuZW5kKCkgfHwgIWl0ZXItPnNlY29uZC5jb250YWlucyhk
LT5tX3Jlc3BvbnNlLnNvdXBNZXNzYWdlQ2VydGlmaWNhdGUoKSkpIHsKKyAgICAgICAgICAgIGlm
IChpdGVyID09IGNsaWVudENlcnRpZmljYXRlcygpLmVuZCgpIHx8ICFpdGVyLT52YWx1ZS5jb250
YWlucyhkLT5tX3Jlc3BvbnNlLnNvdXBNZXNzYWdlQ2VydGlmaWNhdGUoKSkpIHsKICAgICAgICAg
ICAgICAgICBHT3duUHRyPGNoYXI+IHVyaShzb3VwX3VyaV90b19zdHJpbmcoc291cF9yZXF1ZXN0
X2dldF91cmkoZC0+bV9zb3VwUmVxdWVzdC5nZXQoKSksIEZBTFNFKSk7CiAgICAgICAgICAgICAg
ICAgY2xpZW50LT5kaWRGYWlsKGhhbmRsZS5nZXQoKSwgUmVzb3VyY2VFcnJvcihnX3F1YXJrX3Rv
X3N0cmluZyhTT1VQX0hUVFBfRVJST1IpLCBTT1VQX1NUQVRVU19TU0xfRkFJTEVELAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJp
LmdldCgpLCB1bmFjY2VwdGFibGVUTFNDZXJ0aWZpY2F0ZSgpLApAQCAtODE5LDcgKzgxOSw3IEBA
IHZvaWQgUmVzb3VyY2VIYW5kbGU6OnNldEhvc3RBbGxvd3NBbnlIVFRQU0NlcnRpZmljYXRlKGNv
bnN0IFN0cmluZyYgaG9zdCkKIAogdm9pZCBSZXNvdXJjZUhhbmRsZTo6c2V0Q2xpZW50Q2VydGlm
aWNhdGUoY29uc3QgU3RyaW5nJiBob3N0LCBHVGxzQ2VydGlmaWNhdGUqIGNlcnRpZmljYXRlKQog
ewotICAgIGNsaWVudENlcnRpZmljYXRlcygpLmFkZChob3N0Lmxvd2VyKCksIEhvc3RUTFNDZXJ0
aWZpY2F0ZVNldCgpKS5pdGVyYXRvci0+c2Vjb25kLmFkZChjZXJ0aWZpY2F0ZSk7CisgICAgY2xp
ZW50Q2VydGlmaWNhdGVzKCkuYWRkKGhvc3QubG93ZXIoKSwgSG9zdFRMU0NlcnRpZmljYXRlU2V0
KCkpLml0ZXJhdG9yLT52YWx1ZS5hZGQoY2VydGlmaWNhdGUpOwogfQogCiB2b2lkIFJlc291cmNl
SGFuZGxlOjpzZXRJZ25vcmVTU0xFcnJvcnMoYm9vbCBpZ25vcmVTU0xFcnJvcnMpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0
U291cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VS
ZXF1ZXN0U291cC5jcHAKaW5kZXggZDcxMjdiNGI1YjhlNDU5YTRjYWVjNTVhNTUyN2JiY2YzYzgz
Nzc4NS4uNTdhYjRkNjQ3YjNiZmZjMjViYTkyMzc3OGM3MWQ0ZjRiZWUxNWNiOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVzdFNv
dXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJj
ZVJlcXVlc3RTb3VwLmNwcApAQCAtNDMsNyArNDMsNyBAQCB2b2lkIFJlc291cmNlUmVxdWVzdDo6
dXBkYXRlU291cE1lc3NhZ2UoU291cE1lc3NhZ2UqIHNvdXBNZXNzYWdlKSBjb25zdAogICAgIGlm
ICghaGVhZGVycy5pc0VtcHR5KCkpIHsKICAgICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gaGVhZGVycy5lbmQoKTsKICAgICAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IGhlYWRlcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAg
ICAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKHNvdXBIZWFkZXJzLCBpdC0+Zmly
c3Quc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgaXQtPnNlY29uZC51dGY4KCkuZGF0YSgpKTsKKyAg
ICAgICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChzb3VwSGVhZGVycywgaXQtPmtl
eS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBpdC0+dmFsdWUudXRmOCgpLmRhdGEoKSk7CiAgICAg
fQogCiAgICAgU3RyaW5nIGZpcnN0UGFydHlTdHJpbmcgPSBmaXJzdFBhcnR5Rm9yQ29va2llcygp
LnN0cmluZygpOwpAQCAtNjYsNyArNjYsNyBAQCBTb3VwTWVzc2FnZSogUmVzb3VyY2VSZXF1ZXN0
Ojp0b1NvdXBNZXNzYWdlKCkgY29uc3QKICAgICBpZiAoIWhlYWRlcnMuaXNFbXB0eSgpKSB7CiAg
ICAgICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGhlYWRlcnMuZW5kKCk7
CiAgICAgICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBoZWFkZXJz
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9oZWFk
ZXJzX2FwcGVuZChzb3VwSGVhZGVycywgaXQtPmZpcnN0LnN0cmluZygpLnV0ZjgoKS5kYXRhKCks
IGl0LT5zZWNvbmQudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBzb3VwX21lc3NhZ2VfaGVh
ZGVyc19hcHBlbmQoc291cEhlYWRlcnMsIGl0LT5rZXkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwg
aXQtPnZhbHVlLnV0ZjgoKS5kYXRhKCkpOwogICAgIH0KIAogICAgIFN0cmluZyBmaXJzdFBhcnR5
U3RyaW5nID0gZmlyc3RQYXJ0eUZvckNvb2tpZXMoKS5zdHJpbmcoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlc3BvbnNlU291cC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXNwb25z
ZVNvdXAuY3BwCmluZGV4IGRkYWE4OTNiNjNhOWYzZjEwMzUzZjBkZWQ1ZWY2M2JhNGUwZmFjZWEu
LjczOWQ0NGIyODVkM2Q5ZDI5MWU4ZDViMjdhYWJlN2U2OWRlNjVhMWYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlc3BvbnNlU291cC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVz
cG9uc2VTb3VwLmNwcApAQCAtNDYsNyArNDYsNyBAQCBTb3VwTWVzc2FnZSogUmVzb3VyY2VSZXNw
b25zZTo6dG9Tb3VwTWVzc2FnZSgpIGNvbnN0CiAgICAgaWYgKCFoZWFkZXJzLmlzRW1wdHkoKSkg
ewogICAgICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBoZWFkZXJzLmVu
ZCgpOwogICAgICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaGVh
ZGVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBzb3VwX21lc3NhZ2Vf
aGVhZGVyc19hcHBlbmQoc291cEhlYWRlcnMsIGl0LT5maXJzdC5zdHJpbmcoKS51dGY4KCkuZGF0
YSgpLCBpdC0+c2Vjb25kLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgc291cF9tZXNzYWdl
X2hlYWRlcnNfYXBwZW5kKHNvdXBIZWFkZXJzLCBpdC0+a2V5LnN0cmluZygpLnV0ZjgoKS5kYXRh
KCksIGl0LT52YWx1ZS51dGY4KCkuZGF0YSgpKTsKICAgICB9CiAKICAgICBzb3VwX21lc3NhZ2Vf
c2V0X2ZsYWdzKHNvdXBNZXNzYWdlLCBtX3NvdXBGbGFncyk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3dpbi9SZXNvdXJjZUhhbmRsZVdpbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3dpbi9SZXNvdXJjZUhhbmRsZVdpbi5jcHAKaW5k
ZXggMDIxMmQwY2RhOThjOWYxMzc5MjhlNjEyZmRmOTUwMzY1YTAxZDBkNi4uZjI1MDUyNzc1YjBk
ZWRmZTIxYzc1NWQzZjgzOTk4NTNlN2EwZjM5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay93aW4vUmVzb3VyY2VIYW5kbGVXaW4uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvd2luL1Jlc291cmNlSGFuZGxlV2luLmNwcApAQCAtMzIz
LDE1ICszMjMsMTUgQEAgYm9vbCBSZXNvdXJjZUhhbmRsZTo6c3RhcnQoTmV0d29ya2luZ0NvbnRl
eHQqIGNvbnRleHQpCiAgICAgY29uc3QgSFRUUEhlYWRlck1hcCYgaHR0cEhlYWRlckZpZWxkcyA9
IGZpcnN0UmVxdWVzdCgpLmh0dHBIZWFkZXJGaWVsZHMoKTsKIAogICAgIGZvciAoSFRUUEhlYWRl
ck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBodHRwSGVhZGVyRmllbGRzLmJlZ2luKCk7IGl0ICE9
IGh0dHBIZWFkZXJGaWVsZHMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgaWYgKGVxdWFsSWdub3Jp
bmdDYXNlKGl0LT5maXJzdCwgIkFjY2VwdCIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKGl0LT5maXJz
dCwgIlJlZmVyZXIiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShpdC0+Zmlyc3QsICJVc2VyLUFnZW50
IikpCisgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShpdC0+a2V5LCAiQWNjZXB0IikgfHwg
ZXF1YWxJZ25vcmluZ0Nhc2UoaXQtPmtleSwgIlJlZmVyZXIiKSB8fCBlcXVhbElnbm9yaW5nQ2Fz
ZShpdC0+a2V5LCAiVXNlci1BZ2VudCIpKQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAg
ICAgaWYgKCFodHRwSGVhZGVycy5pc0VtcHR5KCkpCiAgICAgICAgICAgICBodHRwSGVhZGVycy5h
cHBlbmQoJ1xuJyk7CiAKLSAgICAgICAgaHR0cEhlYWRlcnMuYXBwZW5kKGl0LT5maXJzdC5jaGFy
YWN0ZXJzKCksIGl0LT5maXJzdC5sZW5ndGgoKSk7CisgICAgICAgIGh0dHBIZWFkZXJzLmFwcGVu
ZChpdC0+a2V5LmNoYXJhY3RlcnMoKSwgaXQtPmtleS5sZW5ndGgoKSk7CiAgICAgICAgIGh0dHBI
ZWFkZXJzLmFwcGVuZCgnOicpOwotICAgICAgICBodHRwSGVhZGVycy5hcHBlbmQoaXQtPnNlY29u
ZC5jaGFyYWN0ZXJzKCksIGl0LT5zZWNvbmQubGVuZ3RoKCkpOworICAgICAgICBodHRwSGVhZGVy
cy5hcHBlbmQoaXQtPnZhbHVlLmNoYXJhY3RlcnMoKSwgaXQtPnZhbHVlLmxlbmd0aCgpKTsKICAg
ICB9CiAKICAgICBJTlRFUk5FVF9CVUZGRVJTVyBpbnRlcm5ldEJ1ZmZlcnM7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SdW5Mb29wUXQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vcXQvUnVuTG9vcFF0LmNwcAppbmRleCAyYTg3ZTJmYzhmNjY3Nzc2OWY3MzE0
M2U1NzFlMDljNWE1NGM2ZWJhLi41MDFiZDVjMTIzYjBmMDNjZTlhMGNmOTBlMTcyNjkxZjUwNmQ5
YTFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SdW5Mb29wUXQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1J1bkxvb3BRdC5jcHAKQEAgLTEwOSw3
ICsxMDksNyBAQCB2b2lkIFJ1bkxvb3A6OlRpbWVyQmFzZTo6dGltZXJGaXJlZChSdW5Mb29wKiBy
dW5Mb29wLCBpbnQgSUQpCiB7CiAgICAgVGltZXJNYXA6Oml0ZXJhdG9yIGl0ID0gcnVuTG9vcC0+
bV9hY3RpdmVUaW1lcnMuZmluZChJRCk7CiAgICAgQVNTRVJUKGl0ICE9IHJ1bkxvb3AtPm1fYWN0
aXZlVGltZXJzLmVuZCgpKTsKLSAgICBUaW1lckJhc2UqIHRpbWVyID0gaXQtPnNlY29uZDsKKyAg
ICBUaW1lckJhc2UqIHRpbWVyID0gaXQtPnZhbHVlOwogCiAgICAgaWYgKCF0aW1lci0+bV9pc1Jl
cGVhdGluZykgewogICAgICAgICAvLyBTdG9wIHRoZSB0aW1lciAoY2FsbGluZyBzdG9wIHdvdWxk
IG5lZWQgYW5vdGhlciBoYXNoIHRhYmxlIGxvb2t1cCkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L0xvY2FsZVRvU2NyaXB0TWFwcGluZ0RlZmF1bHQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Mb2NhbGVUb1NjcmlwdE1hcHBpbmdEZWZhdWx0LmNw
cAppbmRleCA5MDk0NzM4NDk2OTZiNGMyOTJkNmI5YWMyODViYzdkOWY0YWMyODQxLi41ODI2NDkw
N2Q1ZTQwYTAwOWI0MGZkNjk5MTgwZjMzZWY3ZDUxN2MzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L0xvY2FsZVRvU2NyaXB0TWFwcGluZ0RlZmF1bHQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9jYWxlVG9TY3JpcHRNYXBwaW5nRGVmYXVs
dC5jcHAKQEAgLTE2Niw3ICsxNjYsNyBAQCBVU2NyaXB0Q29kZSBzY3JpcHROYW1lVG9Db2RlKGNv
bnN0IFN0cmluZyYgc2NyaXB0TmFtZSkKIAogICAgIEhhc2hNYXA8U3RyaW5nLCBVU2NyaXB0Q29k
ZT46Oml0ZXJhdG9yIGl0ID0gc2NyaXB0TmFtZUNvZGVNYXAuZmluZChzY3JpcHROYW1lLmxvd2Vy
KCkpOwogICAgIGlmIChpdCAhPSBzY3JpcHROYW1lQ29kZU1hcC5lbmQoKSkKLSAgICAgICAgcmV0
dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBpdC0+dmFsdWU7CiAgICAgcmV0dXJuIFVT
Q1JJUFRfSU5WQUxJRF9DT0RFOwogfQogCkBAIC0zODksNyArMzg5LDcgQEAgVVNjcmlwdENvZGUg
bG9jYWxlVG9TY3JpcHRDb2RlRm9yRm9udFNlbGVjdGlvbihjb25zdCBTdHJpbmcmIGxvY2FsZSkK
ICAgICB3aGlsZSAoIWNhbm9uaWNhbExvY2FsZS5pc0VtcHR5KCkpIHsKICAgICAgICAgSGFzaE1h
cDxTdHJpbmcsIFVTY3JpcHRDb2RlPjo6aXRlcmF0b3IgaXQgPSBsb2NhbGVTY3JpcHRNYXAuZmlu
ZChjYW5vbmljYWxMb2NhbGUpOwogICAgICAgICBpZiAoaXQgIT0gbG9jYWxlU2NyaXB0TWFwLmVu
ZCgpKQotICAgICAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgICAgICByZXR1cm4g
aXQtPnZhbHVlOwogICAgICAgICBzaXplX3QgcG9zID0gY2Fub25pY2FsTG9jYWxlLnJldmVyc2VG
aW5kKCdfJyk7CiAgICAgICAgIGlmIChwb3MgPT0gbm90Rm91bmQpCiAgICAgICAgICAgICBicmVh
azsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5n
UmVnaXN0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdS
ZWdpc3RyeS5jcHAKaW5kZXggNDc2M2JmODM0YzBlMDFlNjE4Njc3YjhhMTE0MTQ4MDM2MTUyOWE0
ZS4uZDIyOTJlNGVkNWYxZjAyZDQ0NDEzYzc5ZjgzNTlhYWNjYzgwNjczNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAK
QEAgLTE5Niw4ICsxOTYsOCBAQCBzdGF0aWMgdm9pZCBwcnVuZUJsYWNrbGlzdGVkQ29kZWNzKCkK
ICAgICAgICAgVGV4dEVuY29kaW5nTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSB0ZXh0RW5j
b2RpbmdOYW1lTWFwLT5iZWdpbigpOwogICAgICAgICBUZXh0RW5jb2RpbmdOYW1lTWFwOjpjb25z
dF9pdGVyYXRvciBlbmQgPSB0ZXh0RW5jb2RpbmdOYW1lTWFwLT5lbmQoKTsKICAgICAgICAgZm9y
ICg7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgaWYgKGl0LT5zZWNvbmQgPT0gYXRv
bWljTmFtZSkKLSAgICAgICAgICAgICAgICBuYW1lcy5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAg
ICAgICAgIGlmIChpdC0+dmFsdWUgPT0gYXRvbWljTmFtZSkKKyAgICAgICAgICAgICAgICBuYW1l
cy5hcHBlbmQoaXQtPmtleSk7CiAgICAgICAgIH0KIAogICAgICAgICBzaXplX3QgbGVuZ3RoID0g
bmFtZXMuc2l6ZSgpOwpAQCAtMzc5LDcgKzM3OSw3IEBAIHZvaWQgZHVtcFRleHRFbmNvZGluZ05h
bWVNYXAoKQogICAgIFRleHRFbmNvZGluZ05hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdGV4
dEVuY29kaW5nTmFtZU1hcC0+YmVnaW4oKTsKICAgICBUZXh0RW5jb2RpbmdOYW1lTWFwOjpjb25z
dF9pdGVyYXRvciBlbmQgPSB0ZXh0RW5jb2RpbmdOYW1lTWFwLT5lbmQoKTsKICAgICBmb3IgKDsg
aXQgIT0gZW5kOyArK2l0KQotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiclcycgPT4gJyVzJ1xu
IiwgaXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICInJXMn
ID0+ICclcydcbiIsIGl0LT5rZXksIGl0LT52YWx1ZSk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC90cmFuc2NvZGVyL0ZvbnRUcmFuc2NvZGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvdHJhbnNjb2Rlci9Gb250VHJhbnNj
b2Rlci5jcHAKaW5kZXggNGUwN2Y1MGZiZGIwYzU3YzNlZWNhNmY4YmU3MWY3NTA1ZGI1M2JjMC4u
NDg0MjI4Y2FhOGU3NjA3MWIzN2E5ZDIwYTk5MmQ1MGExZDQxZjQwYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC90cmFuc2NvZGVyL0ZvbnRUcmFuc2NvZGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3RyYW5zY29kZXIvRm9udFRyYW5zY29k
ZXIuY3BwCkBAIC02Niw3ICs2Niw3IEBAIEZvbnRUcmFuc2NvZGVyOjpDb252ZXJ0ZXJUeXBlIEZv
bnRUcmFuc2NvZGVyOjpjb252ZXJ0ZXJUeXBlKGNvbnN0IEZvbnREZXNjcmlwdGlvCiAgICAgaWYg
KCFmb250RmFtaWx5LmlzTnVsbCgpKSB7CiAgICAgICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBD
b252ZXJ0ZXJUeXBlPjo6Y29uc3RfaXRlcmF0b3IgZm91bmQgPSBtX2NvbnZlcnRlclR5cGVzLmZp
bmQoZm9udEZhbWlseSk7CiAgICAgICAgIGlmIChmb3VuZCAhPSBtX2NvbnZlcnRlclR5cGVzLmVu
ZCgpKQotICAgICAgICAgICAgcmV0dXJuIGZvdW5kLT5zZWNvbmQ7CisgICAgICAgICAgICByZXR1
cm4gZm91bmQtPnZhbHVlOwogICAgIH0KIAogICAgIC8vIElFJ3MgZGVmYXVsdCBmb250cyBmb3Ig
SmFwYW5lc2UgZW5jb2RpbmdzIGNoYW5nZSBiYWNrc2xhc2hlcyBpbnRvIHllbiBzaWducy4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvd2luL1RleHRDb2RlY1dpbi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3dpbi9UZXh0Q29kZWNXaW4uY3BwCmlu
ZGV4IGUxOTIzN2Q2OGQ5MGRmMmY1MDNhZjQyMzlhYTM2N2I2ZjE0ZjI0YjUuLjg3OWFmNzY5Nzcy
ZmY1MTVmMzU0YWE4YjE5NzE2OTliNjJhYmE2NjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvd2luL1RleHRDb2RlY1dpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vdGV4dC93aW4vVGV4dENvZGVjV2luLmNwcApAQCAtMTA1LDE3ICsxMDUsMTcgQEAg
TGFuZ3VhZ2VNYW5hZ2VyOjpMYW5ndWFnZU1hbmFnZXIoKQogICAgICAgICAgICAgaSA9IGNvZGVQ
YWdlQ2hhcnNldHMoKS5zZXQoY3BJbmZvLnVpQ29kZVBhZ2UsIG5hbWUpLml0ZXJhdG9yOwogICAg
ICAgICB9CiAgICAgICAgIGlmIChpICE9IGNvZGVQYWdlQ2hhcnNldHMoKS5lbmQoKSkgewotICAg
ICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIENoYXJzZXRJbmZvPjo6aXRlcmF0b3IgaiA9IGtub3du
Q2hhcnNldHMoKS5maW5kKFN0cmluZyhpLT5zZWNvbmQuZGF0YSgpLCBpLT5zZWNvbmQubGVuZ3Ro
KCkpKTsKKyAgICAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBDaGFyc2V0SW5mbz46Oml0ZXJhdG9y
IGogPSBrbm93bkNoYXJzZXRzKCkuZmluZChTdHJpbmcoaS0+dmFsdWUuZGF0YSgpLCBpLT52YWx1
ZS5sZW5ndGgoKSkpOwogICAgICAgICAgICAgQVNTRVJUKGogIT0ga25vd25DaGFyc2V0cygpLmVu
ZCgpKTsKLSAgICAgICAgICAgIENoYXJzZXRJbmZvJiBpbmZvID0gai0+c2Vjb25kOwotICAgICAg
ICAgICAgaW5mby5tX25hbWUgPSBpLT5zZWNvbmQuZGF0YSgpOworICAgICAgICAgICAgQ2hhcnNl
dEluZm8mIGluZm8gPSBqLT52YWx1ZTsKKyAgICAgICAgICAgIGluZm8ubV9uYW1lID0gaS0+dmFs
dWUuZGF0YSgpOwogICAgICAgICAgICAgaW5mby5tX2ZyaWVuZGx5TmFtZSA9IGNwSW5mby53c3pE
ZXNjcmlwdGlvbjsKICAgICAgICAgICAgIGluZm8ubV9hbGlhc2VzLmFwcGVuZChuYW1lKTsKICAg
ICAgICAgICAgIGluZm8ubV9hbGlhc2VzLmFwcGVuZChTdHJpbmcoY3BJbmZvLndzekhlYWRlckNo
YXJzZXQpLmxhdGluMSgpKTsKICAgICAgICAgICAgIGluZm8ubV9hbGlhc2VzLmFwcGVuZChTdHJp
bmcoY3BJbmZvLndzekJvZHlDaGFyc2V0KS5sYXRpbjEoKSk7CiAgICAgICAgICAgICBTdHJpbmcg
Y3BOYW1lID0gImNwIiArIFN0cmluZzo6bnVtYmVyKGNwSW5mby51aUNvZGVQYWdlKTsKICAgICAg
ICAgICAgIGluZm8ubV9hbGlhc2VzLmFwcGVuZChjcE5hbWUubGF0aW4xKCkpOwotICAgICAgICAg
ICAgc3VwcG9ydGVkQ2hhcnNldHMoKS5hZGQoaS0+c2Vjb25kLmRhdGEoKSk7CisgICAgICAgICAg
ICBzdXBwb3J0ZWRDaGFyc2V0cygpLmFkZChpLT52YWx1ZS5kYXRhKCkpOwogICAgICAgICB9CiAg
ICAgfQogfQpAQCAtMTI2LDcgKzEyNiw3IEBAIHN0YXRpYyBVSU5UIGdldENvZGVQYWdlKGNvbnN0
IGNoYXIqIG5hbWUpCiAgICAgLy8gc2F5aW5nICI9PSIgaXMgbm90IGZvdW5kIGZvciBjb25zdF9p
dGVyYXRvciBhbmQgaXRlcmF0b3IKICAgICBjb25zdCBIYXNoTWFwPFN0cmluZywgQ2hhcnNldElu
Zm8+JiBjaGFyc2V0cyA9IGtub3duQ2hhcnNldHMoKTsKICAgICBIYXNoTWFwPFN0cmluZywgQ2hh
cnNldEluZm8+Ojpjb25zdF9pdGVyYXRvciBpID0gY2hhcnNldHMuZmluZChuYW1lKTsKLSAgICBy
ZXR1cm4gaSA9PSBjaGFyc2V0cy5lbmQoKSA/IENQX0FDUCA6IGktPnNlY29uZC5tX2NvZGVQYWdl
OworICAgIHJldHVybiBpID09IGNoYXJzZXRzLmVuZCgpID8gQ1BfQUNQIDogaS0+dmFsdWUubV9j
b2RlUGFnZTsKIH0KIAogc3RhdGljIFBhc3NPd25QdHI8VGV4dENvZGVjPiBuZXdUZXh0Q29kZWNX
aW4oY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZywgY29uc3Qgdm9pZCopCkBAIC0xNDksOSAr
MTQ5LDkgQEAgdm9pZCBUZXh0Q29kZWNXaW46OnJlZ2lzdGVyRXh0ZW5kZWRFbmNvZGluZ05hbWVz
KEVuY29kaW5nTmFtZVJlZ2lzdHJhciByZWdpc3RyYXIKICAgICBmb3IgKENoYXJzZXRTZXQ6Oml0
ZXJhdG9yIGkgPSBzdXBwb3J0ZWRDaGFyc2V0cygpLmJlZ2luKCk7IGkgIT0gc3VwcG9ydGVkQ2hh
cnNldHMoKS5lbmQoKTsgKytpKSB7CiAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBDaGFyc2V0SW5m
bz46Oml0ZXJhdG9yIGogPSBrbm93bkNoYXJzZXRzKCkuZmluZCgqaSk7CiAgICAgICAgIGlmIChq
ICE9IGtub3duQ2hhcnNldHMoKS5lbmQoKSkgewotICAgICAgICAgICAgcmVnaXN0cmFyKGotPnNl
Y29uZC5tX25hbWUuZGF0YSgpLCBqLT5zZWNvbmQubV9uYW1lLmRhdGEoKSk7Ci0gICAgICAgICAg
ICBmb3IgKFZlY3RvcjxDU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgYWxpYXMgPSBqLT5zZWNvbmQu
bV9hbGlhc2VzLmJlZ2luKCk7IGFsaWFzICE9IGotPnNlY29uZC5tX2FsaWFzZXMuZW5kKCk7ICsr
YWxpYXMpCi0gICAgICAgICAgICAgICAgcmVnaXN0cmFyKGFsaWFzLT5kYXRhKCksIGotPnNlY29u
ZC5tX25hbWUuZGF0YSgpKTsKKyAgICAgICAgICAgIHJlZ2lzdHJhcihqLT52YWx1ZS5tX25hbWUu
ZGF0YSgpLCBqLT52YWx1ZS5tX25hbWUuZGF0YSgpKTsKKyAgICAgICAgICAgIGZvciAoVmVjdG9y
PENTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBhbGlhcyA9IGotPnZhbHVlLm1fYWxpYXNlcy5iZWdp
bigpOyBhbGlhcyAhPSBqLT52YWx1ZS5tX2FsaWFzZXMuZW5kKCk7ICsrYWxpYXMpCisgICAgICAg
ICAgICAgICAgcmVnaXN0cmFyKGFsaWFzLT5kYXRhKCksIGotPnZhbHVlLm1fbmFtZS5kYXRhKCkp
OwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMTYyLDcgKzE2Miw3IEBAIHZvaWQgVGV4dENvZGVj
V2luOjpyZWdpc3RlckV4dGVuZGVkQ29kZWNzKFRleHRDb2RlY1JlZ2lzdHJhciByZWdpc3RyYXIp
CiAgICAgZm9yIChDaGFyc2V0U2V0OjppdGVyYXRvciBpID0gc3VwcG9ydGVkQ2hhcnNldHMoKS5i
ZWdpbigpOyBpICE9IHN1cHBvcnRlZENoYXJzZXRzKCkuZW5kKCk7ICsraSkgewogICAgICAgICBI
YXNoTWFwPFN0cmluZywgQ2hhcnNldEluZm8+OjppdGVyYXRvciBqID0ga25vd25DaGFyc2V0cygp
LmZpbmQoKmkpOwogICAgICAgICBpZiAoaiAhPSBrbm93bkNoYXJzZXRzKCkuZW5kKCkpCi0gICAg
ICAgICAgICByZWdpc3RyYXIoai0+c2Vjb25kLm1fbmFtZS5kYXRhKCksIG5ld1RleHRDb2RlY1dp
biwgMCk7CisgICAgICAgICAgICByZWdpc3RyYXIoai0+dmFsdWUubV9uYW1lLmRhdGEoKSwgbmV3
VGV4dENvZGVjV2luLCAwKTsKICAgICB9CiB9CiAKQEAgLTMwMSw3ICszMDEsNyBAQCB2b2lkIFRl
eHRDb2RlY1dpbjo6ZW51bWVyYXRlU3VwcG9ydGVkRW5jb2RpbmdzKEVuY29kaW5nUmVjZWl2ZXIm
IHJlY2VpdmVyKQogICAgIGxhbmd1YWdlTWFuYWdlcigpOwogICAgIGZvciAoQ2hhcnNldFNldDo6
aXRlcmF0b3IgaSA9IHN1cHBvcnRlZENoYXJzZXRzKCkuYmVnaW4oKTsgaSAhPSBzdXBwb3J0ZWRD
aGFyc2V0cygpLmVuZCgpOyArK2kpIHsKICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIENoYXJzZXRJ
bmZvPjo6aXRlcmF0b3IgaiA9IGtub3duQ2hhcnNldHMoKS5maW5kKCppKTsKLSAgICAgICAgaWYg
KGogIT0ga25vd25DaGFyc2V0cygpLmVuZCgpICYmICFyZWNlaXZlci5yZWNlaXZlKGotPnNlY29u
ZC5tX25hbWUuZGF0YSgpLCBqLT5zZWNvbmQubV9mcmllbmRseU5hbWUuY2hhcmFjdGVyc1dpdGhO
dWxsVGVybWluYXRpb24oKSwgai0+c2Vjb25kLm1fY29kZVBhZ2UpKQorICAgICAgICBpZiAoaiAh
PSBrbm93bkNoYXJzZXRzKCkuZW5kKCkgJiYgIXJlY2VpdmVyLnJlY2VpdmUoai0+dmFsdWUubV9u
YW1lLmRhdGEoKSwgai0+dmFsdWUubV9mcmllbmRseU5hbWUuY2hhcmFjdGVyc1dpdGhOdWxsVGVy
bWluYXRpb24oKSwgai0+dmFsdWUubV9jb2RlUGFnZSkpCiAgICAgICAgICAgICBicmVhazsKICAg
ICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xpcGJvYXJk
VXRpbGl0aWVzV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRV
dGlsaXRpZXNXaW4uY3BwCmluZGV4IDYxZTM2MjFiNTNkYzQ5NTg2NTEzYWI3NDE0NGRmNWU2MmJh
MWMxNjAuLjc1ZmY5ZGU3YmUxMDIzZjdlMTJmYjk5ZGQxNmNlNzQ2ZmI4ZWRmMjQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRVdGlsaXRpZXNXaW4uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRVdGlsaXRpZXNXaW4u
Y3BwCkBAIC03Niw3ICs3Niw3IEBAIHN0YXRpYyBib29sIGdldERhdGFNYXBJdGVtKGNvbnN0IERy
YWdEYXRhTWFwKiBkYXRhT2JqZWN0LCBGT1JNQVRFVEMqIGZvcm1hdCwgU3RyCiAgICAgRHJhZ0Rh
dGFNYXA6OmNvbnN0X2l0ZXJhdG9yIGZvdW5kID0gZGF0YU9iamVjdC0+ZmluZChmb3JtYXQtPmNm
Rm9ybWF0KTsKICAgICBpZiAoZm91bmQgPT0gZGF0YU9iamVjdC0+ZW5kKCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBpdGVtID0gZm91bmQtPnNlY29uZFswXTsKKyAgICBpdGVtID0gZm91
bmQtPnZhbHVlWzBdOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC04MjYsNyArODI2LDcgQEAg
dm9pZCBnZXRDbGlwYm9hcmREYXRhKElEYXRhT2JqZWN0KiBkYXRhT2JqZWN0LCBGT1JNQVRFVEMq
IGZvcm1hdCwgVmVjdG9yPFN0cmluZz4KICAgICBDbGlwYm9hcmRGb3JtYXRNYXA6OmNvbnN0X2l0
ZXJhdG9yIGZvdW5kID0gZm9ybWF0TWFwLmZpbmQoZm9ybWF0LT5jZkZvcm1hdCk7CiAgICAgaWYg
KGZvdW5kID09IGZvcm1hdE1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGZvdW5kLT5z
ZWNvbmQtPmdldFN0cmluZyhkYXRhT2JqZWN0LCBmb3VuZC0+c2Vjb25kLT5mb3JtYXQsIGRhdGFT
dHJpbmdzKTsKKyAgICBmb3VuZC0+dmFsdWUtPmdldFN0cmluZyhkYXRhT2JqZWN0LCBmb3VuZC0+
dmFsdWUtPmZvcm1hdCwgZGF0YVN0cmluZ3MpOwogfQogCiB2b2lkIHNldENsaXBib2FyZERhdGEo
SURhdGFPYmplY3QqIGRhdGFPYmplY3QsIFVJTlQgZm9ybWF0LCBjb25zdCBWZWN0b3I8U3RyaW5n
PiYgZGF0YVN0cmluZ3MpCkBAIC04MzUsNyArODM1LDcgQEAgdm9pZCBzZXRDbGlwYm9hcmREYXRh
KElEYXRhT2JqZWN0KiBkYXRhT2JqZWN0LCBVSU5UIGZvcm1hdCwgY29uc3QgVmVjdG9yPFN0cmlu
Zz4KICAgICBDbGlwYm9hcmRGb3JtYXRNYXA6OmNvbnN0X2l0ZXJhdG9yIGZvdW5kID0gZm9ybWF0
TWFwLmZpbmQoZm9ybWF0KTsKICAgICBpZiAoZm91bmQgPT0gZm9ybWF0TWFwLmVuZCgpKQogICAg
ICAgICByZXR1cm47Ci0gICAgZm91bmQtPnNlY29uZC0+c2V0U3RyaW5nKGRhdGFPYmplY3QsIGZv
dW5kLT5zZWNvbmQtPmZvcm1hdCwgZGF0YVN0cmluZ3MpOworICAgIGZvdW5kLT52YWx1ZS0+c2V0
U3RyaW5nKGRhdGFPYmplY3QsIGZvdW5kLT52YWx1ZS0+Zm9ybWF0LCBkYXRhU3RyaW5ncyk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3dpbi9DbGlwYm9hcmRXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2lu
L0NsaXBib2FyZFdpbi5jcHAKaW5kZXggZDFjMTM4NmExNDUyMDRjMzhlMTgxYmQ3NWEyOGIyOGM5
MDUzNzVkMC4uZjk1MGIwOGNlZmJmNmQwYmUwMWI1ZTQwYWNkMGRiNjgzYTQyYTNjMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFdpbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFdpbi5jcHAKQEAgLTUyNSw3ICs1
MjUsNyBAQCBIYXNoU2V0PFN0cmluZz4gQ2xpcGJvYXJkV2luOjp0eXBlcygpIGNvbnN0CiAgICAg
fSBlbHNlIHsKICAgICAgICAgZm9yIChEcmFnRGF0YU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
X2RyYWdEYXRhTWFwLmJlZ2luKCk7IGl0ICE9IG1fZHJhZ0RhdGFNYXAuZW5kKCk7ICsraXQpIHsK
ICAgICAgICAgICAgIEZPUk1BVEVUQyBkYXRhOwotICAgICAgICAgICAgZGF0YS5jZkZvcm1hdCA9
ICgqaXQpLmZpcnN0OworICAgICAgICAgICAgZGF0YS5jZkZvcm1hdCA9ICgqaXQpLmtleTsKICAg
ICAgICAgICAgIGFkZE1pbWVUeXBlc0ZvckZvcm1hdChyZXN1bHRzLCBkYXRhKTsKICAgICAgICAg
fQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9GaWxlU3lz
dGVtV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9GaWxlU3lzdGVtV2luLmNw
cAppbmRleCBlZTAyNTVlMTI4NThlYTM5YjFiYzk0NjY1MTI5MDczYzRkY2ExOTRkLi4wNzlmOGQ2
ZThkNjQ1YjAwZmEyOWExYjRiNWUxNjJiZWZmNjA1ZTk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vd2luL0ZpbGVTeXN0ZW1XaW4uY3BwCkBAIC0yMzgsNyArMjM4LDcgQEAgc3RhdGlj
IFN0cmluZyBjYWNoZWRTdG9yYWdlRGlyZWN0b3J5KERXT1JEIHBhdGhJZGVudGlmaWVyKQogCiAg
ICAgSGFzaE1hcDxEV09SRCwgU3RyaW5nPjo6aXRlcmF0b3IgaXQgPSBkaXJlY3Rvcmllcy5maW5k
KHBhdGhJZGVudGlmaWVyKTsKICAgICBpZiAoaXQgIT0gZGlyZWN0b3JpZXMuZW5kKCkpCi0gICAg
ICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwogCiAgICAg
U3RyaW5nIGRpcmVjdG9yeSA9IHN0b3JhZ2VEaXJlY3RvcnkocGF0aElkZW50aWZpZXIpOwogICAg
IGRpcmVjdG9yaWVzLmFkZChwYXRoSWRlbnRpZmllciwgZGlyZWN0b3J5KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9SdW5Mb29wV2luLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3dpbi9SdW5Mb29wV2luLmNwcAppbmRleCAxNjYzYjY2MTMzYWJjMmNiM2Zk
MDA1N2QxOTY3MTIzN2QwZTc5OWRhLi4xN2Q2ODQ1ZTlmZmRjMzkyOGMwNjdjN2MxNTg4M2FhYjkw
ZDI5YTY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUnVuTG9vcFdp
bi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1J1bkxvb3BXaW4uY3BwCkBA
IC0xMjYsNyArMTI2LDcgQEAgdm9pZCBSdW5Mb29wOjpUaW1lckJhc2U6OnRpbWVyRmlyZWQoUnVu
TG9vcCogcnVuTG9vcCwgdWludDY0X3QgSUQpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBUaW1lckJhc2UqIHRpbWVyID0gaXQtPnNlY29uZDsKKyAgICBUaW1lckJhc2UqIHRpbWVyID0g
aXQtPnZhbHVlOwogCiAgICAgaWYgKCF0aW1lci0+bV9pc1JlcGVhdGluZykgewogICAgICAgICBy
dW5Mb29wLT5tX2FjdGl2ZVRpbWVycy5yZW1vdmUoaXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vd2luL1dDRGF0YU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93aW4vV0NEYXRhT2JqZWN0LmNwcAppbmRleCAwYzAzY2UwMGYyMjFhZTBhYzgxYjhlZTcy
Y2ZlMGQwNTRhMDU2NjU0Li5kZmJkMDA1ZmM0MzZmOGQ3MjE2YTIxNzQ2Njk5YjdkZjgxYjU4MDQ4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vV0NEYXRhT2JqZWN0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vV0NEYXRhT2JqZWN0LmNwcApAQCAt
MTY5LDcgKzE2OSw3IEBAIEhSRVNVTFQgV0NEYXRhT2JqZWN0OjpjcmVhdGVJbnN0YW5jZShXQ0Rh
dGFPYmplY3QqKiByZXN1bHQsIGNvbnN0IERyYWdEYXRhTWFwJiBkCiAgICAgKnJlc3VsdCA9IG5l
dyBXQ0RhdGFPYmplY3Q7CiAKICAgICBmb3IgKERyYWdEYXRhTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IGRhdGFNYXAuYmVnaW4oKTsgaXQgIT0gZGF0YU1hcC5lbmQoKTsgKytpdCkKLSAgICAgICAg
c2V0Q2xpcGJvYXJkRGF0YSgqcmVzdWx0LCBpdC0+Zmlyc3QsIGl0LT5zZWNvbmQpOworICAgICAg
ICBzZXRDbGlwYm9hcmREYXRhKCpyZXN1bHQsIGl0LT5rZXksIGl0LT52YWx1ZSk7CiAgICAgcmV0
dXJuIFNfT0s7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbmNl
L01JTUVUeXBlUmVnaXN0cnlXaW5DRS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW5j
ZS9NSU1FVHlwZVJlZ2lzdHJ5V2luQ0UuY3BwCmluZGV4IDhhMGQzZDJiNjE2MmI0NmRiYjdkNjJm
MjJjYTAzMjZkYzdmY2VkYzUuLjg4ODg0NzFhOTQxYjY3MjdkNjU3ZjQ2NDI5N2VkYzhhNjU0MjJl
ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbmNlL01JTUVUeXBlUmVn
aXN0cnlXaW5DRS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luY2UvTUlNRVR5
cGVSZWdpc3RyeVdpbkNFLmNwcApAQCAtMTAxLDcgKzEwMSw3IEBAIFN0cmluZyBNSU1FVHlwZVJl
Z2lzdHJ5OjpnZXRQcmVmZXJyZWRFeHRlbnNpb25Gb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIHR5
cGUpCiAgICAgaW5pdE1JTUVUeXBlRW50ZW5zaW9uTWFwKCk7CiAKICAgICBmb3IgKEhhc2hNYXA8
U3RyaW5nLCBTdHJpbmc+OjppdGVyYXRvciBpID0gbWltZXR5cGVNYXAuYmVnaW4oKTsgaSAhPSBt
aW1ldHlwZU1hcC5lbmQoKTsgKytpKSB7Ci0gICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShp
LT5zZWNvbmQsIHR5cGUpKQorICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoaS0+dmFsdWUs
IHR5cGUpKQogICAgICAgICAgICAgcmV0dXJuIGktPmZpcnN0OwogICAgIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvQ29udGV4dE1lbnVXeC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS93eC9Db250ZXh0TWVudVd4LmNwcAppbmRleCA0MTg5YWE5NTJmZmVi
NGJjYTIzZGI3MGE5ODA2MWVlZGZmNGYxZGY0Li5kZjJlZTUyN2Q5NDhlMTYyYWJiODk0MjM4YmIy
YjM4NGQ4NjlmNjI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC9Db250
ZXh0TWVudVd4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC9Db250ZXh0TWVu
dVd4LmNwcApAQCAtNjcsOCArNjcsOCBAQCB2b2lkIENvbnRleHRNZW51OjphcHBlbmRJdGVtKENv
bnRleHRNZW51SXRlbSYgaXRlbSkKIAogICAgIEl0ZW1BY3Rpb25NYXA6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IHNfaXRlbUFjdGlvbnMuZW5kKCk7CiAgICAgZm9yIChJdGVtQWN0aW9uTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IHNfaXRlbUFjdGlvbnMuYmVnaW4oKTsgIGl0ICE9IGVuZDsgKytpdCkg
ewotICAgICAgICBpZiAoaXQtPnNlY29uZCA9PSBpdGVtRGVzY3JpcHRpb24uYWN0aW9uKQotICAg
ICAgICAgICAgaWRXeCA9IGl0LT5maXJzdDsKKyAgICAgICAgaWYgKGl0LT52YWx1ZSA9PSBpdGVt
RGVzY3JpcHRpb24uYWN0aW9uKQorICAgICAgICAgICAgaWRXeCA9IGl0LT5rZXk7CiAgICAgfQog
CiAgICAgaWYgKGl0ZW1EZXNjcmlwdGlvbi5zdWJNZW51KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdp
bnMvUGx1Z2luRGF0YWJhc2UuY3BwCmluZGV4IDk2MWM0NTQ4NWJmMmQ4Nzc0YWEzMDBjNzg2NTBl
YWM5ZGFhMDVmYzguLjQ0NTJhZmUxZTRiNjM4YjVmN2RkYTBlYzdiMTc5ZDdhZTNkOWQ2ZTMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3BwCkBAIC0xNjYsNyArMTY2
LDcgQEAgYm9vbCBQbHVnaW5EYXRhYmFzZTo6cmVmcmVzaCgpCiAgICAgICAgIE1JTUVUb0Rlc2Ny
aXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWFwX2l0ID0gKCppdCktPm1pbWVUb0Rlc2NyaXB0
aW9ucygpLmJlZ2luKCk7CiAgICAgICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRl
cmF0b3IgbWFwX2VuZCA9ICgqaXQpLT5taW1lVG9EZXNjcmlwdGlvbnMoKS5lbmQoKTsKICAgICAg
ICAgZm9yICg7IG1hcF9pdCAhPSBtYXBfZW5kOyArK21hcF9pdCkKLSAgICAgICAgICAgIG1fcmVn
aXN0ZXJlZE1JTUVUeXBlcy5hZGQobWFwX2l0LT5maXJzdCk7CisgICAgICAgICAgICBtX3JlZ2lz
dGVyZWRNSU1FVHlwZXMuYWRkKG1hcF9pdC0+a2V5KTsKICAgICB9CiAKICAgICByZXR1cm4gdHJ1
ZTsKQEAgLTI0Nyw5ICsyNDcsOSBAQCBTdHJpbmcgUGx1Z2luRGF0YWJhc2U6Ok1JTUVUeXBlRm9y
RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uKSBjb25zdAogICAgICAgICBNSU1FVG9F
eHRlbnNpb25zTWFwOjpjb25zdF9pdGVyYXRvciBtaW1lX2VuZCA9ICgqaXQpLT5taW1lVG9FeHRl
bnNpb25zKCkuZW5kKCk7CiAKICAgICAgICAgZm9yIChNSU1FVG9FeHRlbnNpb25zTWFwOjpjb25z
dF9pdGVyYXRvciBtaW1lX2l0ID0gKCppdCktPm1pbWVUb0V4dGVuc2lvbnMoKS5iZWdpbigpOyBt
aW1lX2l0ICE9IG1pbWVfZW5kOyArK21pbWVfaXQpIHsKLSAgICAgICAgICAgIG1pbWVUeXBlID0g
bWltZV9pdC0+Zmlyc3Q7CisgICAgICAgICAgICBtaW1lVHlwZSA9IG1pbWVfaXQtPmtleTsKICAg
ICAgICAgICAgIFBsdWdpblBhY2thZ2UqIHByZWZlcnJlZFBsdWdpbiA9IG1fcHJlZmVycmVkUGx1
Z2lucy5nZXQobWltZVR5cGUpLmdldCgpOwotICAgICAgICAgICAgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIGV4dGVuc2lvbnMgPSBtaW1lX2l0LT5zZWNvbmQ7CisgICAgICAgICAgICBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgZXh0ZW5zaW9ucyA9IG1pbWVfaXQtPnZhbHVlOwogICAgICAgICAgICAgYm9v
bCBmb3VuZE1hcHBpbmcgPSBmYWxzZTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBleHRlbnNpb25zLnNpemUoKTsgaSsrKSB7CiAgICAgICAgICAgICAgICAgaWYgKGVxdWFs
SWdub3JpbmdDYXNlKGV4dGVuc2lvbnNbaV0sIGV4dGVuc2lvbikpIHsKQEAgLTMzOSw4ICszMzks
OCBAQCB2b2lkIFBsdWdpbkRhdGFiYXNlOjpyZW1vdmUoUGx1Z2luUGFja2FnZSogcGFja2FnZSkK
ICAgICBNSU1FVG9FeHRlbnNpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHBhY2thZ2UtPm1p
bWVUb0V4dGVuc2lvbnMoKS5iZWdpbigpOwogICAgIE1JTUVUb0V4dGVuc2lvbnNNYXA6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IHBhY2thZ2UtPm1pbWVUb0V4dGVuc2lvbnMoKS5lbmQoKTsKICAgICBm
b3IgKCA7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBQbHVnaW5QYWNrYWdlQnlOYW1lTWFw
OjppdGVyYXRvciBwYWNrYWdlSW5NYXAgPSBtX3ByZWZlcnJlZFBsdWdpbnMuZmluZChpdC0+Zmly
c3QpOwotICAgICAgICBpZiAocGFja2FnZUluTWFwICE9IG1fcHJlZmVycmVkUGx1Z2lucy5lbmQo
KSAmJiBwYWNrYWdlSW5NYXAtPnNlY29uZCA9PSBwYWNrYWdlKQorICAgICAgICBQbHVnaW5QYWNr
YWdlQnlOYW1lTWFwOjppdGVyYXRvciBwYWNrYWdlSW5NYXAgPSBtX3ByZWZlcnJlZFBsdWdpbnMu
ZmluZChpdC0+a2V5KTsKKyAgICAgICAgaWYgKHBhY2thZ2VJbk1hcCAhPSBtX3ByZWZlcnJlZFBs
dWdpbnMuZW5kKCkgJiYgcGFja2FnZUluTWFwLT52YWx1ZSA9PSBwYWNrYWdlKQogICAgICAgICAg
ICAgbV9wcmVmZXJyZWRQbHVnaW5zLnJlbW92ZShwYWNrYWdlSW5NYXApOwogICAgIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luTWFpblRocmVhZFNjaGVkdWxlci5j
cHAKaW5kZXggNzUyODY3NmIxMmFhOGJkYThmMzNiMzJlZjQwY2M4NzY1NzY2ZDMxYS4uMzlhZTc5
NGUyZmIwOTcyMTlhNTIyM2ViZmJlZWRmNjliNmUyODYyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGx1Z2lucy9QbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbHVnaW5zL1BsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXIuY3BwCkBAIC00OSw3ICs0
OSw3IEBAIHZvaWQgUGx1Z2luTWFpblRocmVhZFNjaGVkdWxlcjo6c2NoZWR1bGVDYWxsKE5QUCBu
cHAsIE1haW5UaHJlYWRGdW5jdGlvbiBmdW5jdGlvCiAgICAgaWYgKGl0ID09IG1fY2FsbFF1ZXVl
TWFwLmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpdC0+c2Vjb25kLmFwcGVuZChDYWxs
KGZ1bmN0aW9uLCB1c2VyRGF0YSkpOworICAgIGl0LT52YWx1ZS5hcHBlbmQoQ2FsbChmdW5jdGlv
biwgdXNlckRhdGEpKTsKIAogICAgIGlmICghbV9jYWxsUGVuZGluZykgewogICAgICAgICBjYWxs
T25NYWluVGhyZWFkKG1haW5UaHJlYWRDYWxsYmFjaywgdGhpcyk7CkBAIC05Nyw3ICs5Nyw3IEBA
IHZvaWQgUGx1Z2luTWFpblRocmVhZFNjaGVkdWxlcjo6ZGlzcGF0Y2hDYWxscygpCiAgICAgICAg
IC8vIEVtcHR5IGFsbCB0aGUgcXVldWVzIGluIHRoZSBvcmlnaW5hbCBtYXAKICAgICAgICAgQ2Fs
bFF1ZXVlTWFwOjppdGVyYXRvciBlbmQgPSBtX2NhbGxRdWV1ZU1hcC5lbmQoKTsKICAgICAgICAg
Zm9yIChDYWxsUXVldWVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9jYWxsUXVldWVNYXAuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgaXQtPnNlY29uZC5jbGVhcigpOworICAgICAg
ICAgICAgaXQtPnZhbHVlLmNsZWFyKCk7CiAgICAgfQogCiAgICAgbV9jYWxsUGVuZGluZyA9IGZh
bHNlOwpAQCAtMTA1LDcgKzEwNSw3IEBAIHZvaWQgUGx1Z2luTWFpblRocmVhZFNjaGVkdWxlcjo6
ZGlzcGF0Y2hDYWxscygpCiAKICAgICBDYWxsUXVldWVNYXA6Oml0ZXJhdG9yIGVuZCA9IGNvcHku
ZW5kKCk7CiAgICAgZm9yIChDYWxsUXVldWVNYXA6Oml0ZXJhdG9yIGl0ID0gY29weS5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGRpc3BhdGNoQ2FsbHNGb3JQbHVnaW4oaXQtPmZp
cnN0LCBpdC0+c2Vjb25kKTsKKyAgICAgICAgZGlzcGF0Y2hDYWxsc0ZvclBsdWdpbihpdC0+a2V5
LCBpdC0+dmFsdWUpOwogfQogCiB2b2lkIFBsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXI6Om1haW5U
aHJlYWRDYWxsYmFjayh2b2lkKiBjb250ZXh0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGx1Z2lucy9QbHVnaW5TdHJlYW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5T
dHJlYW0uY3BwCmluZGV4IDAwMjM4MGY1Zjk1M2Y5YmVlMmM1NjVlOWNhNWMxMzJhZDRjMGFmNGEu
LmZkYjc4NjAzNWIwZDE2NTQ4MjFmY2I0NjBhZDRlMmQzYTcxYTVhMzUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luU3RyZWFtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbHVnaW5zL1BsdWdpblN0cmVhbS5jcHAKQEAgLTE0Nyw5ICsxNDcsOSBAQCB2b2lkIFBsdWdp
blN0cmVhbTo6c3RhcnRTdHJlYW0oKQogCiAgICAgICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IG1fcmVzb3VyY2VSZXNwb25zZS5odHRwSGVhZGVyRmllbGRzKCkuZW5kKCk7
CiAgICAgICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Jlc291
cmNlUmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkcygpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5rZXkpOwogICAgICAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQoc2VwYXJhdG9yKTsKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KGl0LT5zZWNvbmQpOworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPnZhbHVl
KTsKICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwogICAgICAgICB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvYmxhY2tiZXJyeS9QbHVnaW5EYXRh
QmxhY2tCZXJyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2JsYWNrYmVycnkvUGx1Z2lu
RGF0YUJsYWNrQmVycnkuY3BwCmluZGV4IGQ5MjBkMWZiZDVhMTEyNDYwM2E4Y2Q5OGZhMTM0MzU2
ZTczMDZiNTkuLjQ3NDY2MTZkZTMzNWZhODNjZWM5NmQ5MzBlMjBkOGMyOGU5NGMzYjcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvYmxhY2tiZXJyeS9QbHVnaW5EYXRhQmxhY2tC
ZXJyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ibGFja2JlcnJ5L1BsdWdpbkRh
dGFCbGFja0JlcnJ5LmNwcApAQCAtNDEsOCArNDEsOCBAQCB2b2lkIFBsdWdpbkRhdGE6OmluaXRQ
bHVnaW5zKGNvbnN0IFBhZ2UqKQogICAgICAgICBNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5lbmQoKTsKICAgICAgICAgZm9yIChN
SU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWltZVRvRGVzY3JpcHRp
b25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgTWltZUNsYXNzSW5m
byBtaW1lOwotICAgICAgICAgICAgbWltZS50eXBlID0gaXQtPmZpcnN0OwotICAgICAgICAgICAg
bWltZS5kZXNjID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIG1pbWUudHlwZSA9IGl0LT5rZXk7
CisgICAgICAgICAgICBtaW1lLmRlc2MgPSBpdC0+dmFsdWU7CiAgICAgICAgICAgICBtaW1lLmV4
dGVuc2lvbnMgPSBwYWNrYWdlLT5taW1lVG9FeHRlbnNpb25zKCkuZ2V0KG1pbWUudHlwZSk7CiAg
ICAgICAgICAgICBpbmZvLm1pbWVzLmFwcGVuZChtaW1lKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy93eC9QbHVnaW5EYXRhV3guY3BwIGIvU291cmNlL1dl
YkNvcmUvcGx1Z2lucy93eC9QbHVnaW5EYXRhV3guY3BwCmluZGV4IDBlYjg5MGZlZjA1YTExNWVh
Y2U0MjYzNzY4MGEzZDZhMTJmNTc3MjkuLjI3OTUyYzRhZThiZmE0OWU5OGIxMWFlOTk1OWZjNzU0
ZTRkYjIzYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd3gvUGx1Z2luRGF0
YVd4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3d4L1BsdWdpbkRhdGFXeC5jcHAK
QEAgLTUxLDggKzUxLDggQEAgdm9pZCBQbHVnaW5EYXRhOjppbml0UGx1Z2lucyhjb25zdCBQYWdl
KikKICAgICAgICAgZm9yIChNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbWltZVRvRGVzY3JpcHRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAg
ICAgICAgTWltZUNsYXNzSW5mbyBtaW1lOwogCi0gICAgICAgICAgICBtaW1lLnR5cGUgPSBpdC0+
Zmlyc3Q7Ci0gICAgICAgICAgICBtaW1lLmRlc2MgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAg
bWltZS50eXBlID0gaXQtPmtleTsKKyAgICAgICAgICAgIG1pbWUuZGVzYyA9IGl0LT52YWx1ZTsK
ICAgICAgICAgICAgIG1pbWUuZXh0ZW5zaW9ucyA9IHBhY2thZ2UtPm1pbWVUb0V4dGVuc2lvbnMo
KS5nZXQobWltZS50eXBlKTsKIAogICAgICAgICAgICAgaW5mby5taW1lcy5hcHBlbmQobWltZSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmxvd1RocmVhZENvbnRyb2xs
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0Zsb3dUaHJlYWRDb250cm9sbGVyLmNw
cAppbmRleCAwMTNlNGEyMGY1ZjhmMTg1YTJlNDAwYWEwODlkMmY2MTY2MmY3MmJhLi5hYThjOGRk
MTVhMTVlZWZiNDIxMTNmZDEyNjFmOGYyNWVjMGU4MjU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvRmxvd1RocmVhZENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9GbG93VGhyZWFkQ29udHJvbGxlci5jcHAKQEAgLTE0MCw5ICsxNDAsOSBA
QCB2b2lkIEZsb3dUaHJlYWRDb250cm9sbGVyOjp1bnJlZ2lzdGVyTmFtZWRGbG93Q29udGVudE5v
ZGUoTm9kZSogY29udGVudE5vZGUpCiAgICAgQVNTRVJUKGNvbnRlbnROb2RlICYmIGNvbnRlbnRO
b2RlLT5pc0VsZW1lbnROb2RlKCkpOwogICAgIEhhc2hNYXA8Tm9kZSosIFJlbmRlck5hbWVkRmxv
d1RocmVhZCo+OjppdGVyYXRvciBpdCA9IG1fbWFwTmFtZWRGbG93Q29udGVudE5vZGVzLmZpbmQo
Y29udGVudE5vZGUpOwogICAgIEFTU0VSVChpdCAhPSBtX21hcE5hbWVkRmxvd0NvbnRlbnROb2Rl
cy5lbmQoKSk7Ci0gICAgQVNTRVJUKGl0LT5zZWNvbmQpOwotICAgIEFTU0VSVChpdC0+c2Vjb25k
LT5oYXNDb250ZW50Tm9kZShjb250ZW50Tm9kZSkpOwotICAgIGl0LT5zZWNvbmQtPnVucmVnaXN0
ZXJOYW1lZEZsb3dDb250ZW50Tm9kZShjb250ZW50Tm9kZSk7CisgICAgQVNTRVJUKGl0LT52YWx1
ZSk7CisgICAgQVNTRVJUKGl0LT52YWx1ZS0+aGFzQ29udGVudE5vZGUoY29udGVudE5vZGUpKTsK
KyAgICBpdC0+dmFsdWUtPnVucmVnaXN0ZXJOYW1lZEZsb3dDb250ZW50Tm9kZShjb250ZW50Tm9k
ZSk7CiAgICAgbV9tYXBOYW1lZEZsb3dDb250ZW50Tm9kZXMucmVtb3ZlKGNvbnRlbnROb2RlKTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3gu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCmluZGV4IDEy
NmRiMjdmOTgxMWQxNWI3OWUzYTgwN2NiZmYxYWUxYzNhNzRiMjMuLmU3ZDgxOTgyZDY5MDIyYWQ2
MmYwODc5YWU2NTc4Yjg3Y2MxNjc2MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9JbmxpbmVGbG93Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5s
aW5lRmxvd0JveC5jcHAKQEAgLTQ1OSw3ICs0NTksNyBAQCBib29sIElubGluZUZsb3dCb3g6OnJl
cXVpcmVzSWRlb2dyYXBoaWNCYXNlbGluZShjb25zdCBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tG
bwogICAgICAgICAgICAgY29uc3QgVmVjdG9yPGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIHVzZWRG
b250cyA9IDA7CiAgICAgICAgICAgICBpZiAoY3Vyci0+aXNJbmxpbmVUZXh0Qm94KCkpIHsKICAg
ICAgICAgICAgICAgICBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSB0ZXh0Qm94RGF0YU1hcC5maW5kKHRvSW5saW5lVGV4dEJveChjdXJyKSk7Ci0g
ICAgICAgICAgICAgICAgdXNlZEZvbnRzID0gaXQgPT0gdGV4dEJveERhdGFNYXAuZW5kKCkgPyAw
IDogJml0LT5zZWNvbmQuZmlyc3Q7CisgICAgICAgICAgICAgICAgdXNlZEZvbnRzID0gaXQgPT0g
dGV4dEJveERhdGFNYXAuZW5kKCkgPyAwIDogJml0LT52YWx1ZS5maXJzdDsKICAgICAgICAgICAg
IH0KIAogICAgICAgICAgICAgaWYgKHVzZWRGb250cykgewpAQCAtODIzLDcgKzgyMyw3IEBAIGlu
bGluZSB2b2lkIElubGluZUZsb3dCb3g6OmFkZFRleHRCb3hWaXN1YWxPdmVyZmxvdyhJbmxpbmVU
ZXh0Qm94KiB0ZXh0Qm94LCBHbHlwCiAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gdGV4dEJveC0+
cmVuZGVyZXIoKS0+c3R5bGUoaXNGaXJzdExpbmVTdHlsZSgpKTsKICAgICAKICAgICBHbHlwaE92
ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcDo6aXRlcmF0b3IgaXQgPSB0ZXh0Qm94RGF0YU1hcC5m
aW5kKHRleHRCb3gpOwotICAgIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cgPSBpdCA9PSB0
ZXh0Qm94RGF0YU1hcC5lbmQoKSA/IDAgOiAmaXQtPnNlY29uZC5zZWNvbmQ7CisgICAgR2x5cGhP
dmVyZmxvdyogZ2x5cGhPdmVyZmxvdyA9IGl0ID09IHRleHRCb3hEYXRhTWFwLmVuZCgpID8gMCA6
ICZpdC0+dmFsdWUuc2Vjb25kOwogICAgIGJvb2wgaXNGbGlwcGVkTGluZSA9IHN0eWxlLT5pc0Zs
aXBwZWRMaW5lc1dyaXRpbmdNb2RlKCk7CiAKICAgICBpbnQgdG9wR2x5cGhFZGdlID0gZ2x5cGhP
dmVyZmxvdyA/IChpc0ZsaXBwZWRMaW5lID8gZ2x5cGhPdmVyZmxvdy0+Ym90dG9tIDogZ2x5cGhP
dmVyZmxvdy0+dG9wKSA6IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2suY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNw
cAppbmRleCAzMWI4ZmQ1MWMzYzRjZGY4ZWEwMDQ0MTE3NzdlZTI0YTI0NTZjNzJkLi41NTA0YmY5
YTMwOGQwYWQ0MjFiNDZmYTYwNzNiOGRjNTEwOGQ5ZjY2IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCbG9jay5jcHAKQEAgLTQ0MDMsNyArNDQwMyw3IEBAIHZvaWQgUmVuZGVyQmxv
Y2s6OmNsZWFyRmxvYXRzKCkKIAogICAgICAgICBSZW5kZXJlclRvRmxvYXRJbmZvTWFwOjppdGVy
YXRvciBlbmQgPSBmbG9hdE1hcC5lbmQoKTsKICAgICAgICAgZm9yIChSZW5kZXJlclRvRmxvYXRJ
bmZvTWFwOjppdGVyYXRvciBpdCA9IGZsb2F0TWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewotICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0ID0gKCppdCkuc2Vj
b25kOworICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0ID0gKCppdCku
dmFsdWU7CiAgICAgICAgICAgICBpZiAoIWZsb2F0aW5nT2JqZWN0LT5pc0Rlc2NlbmRhbnQoKSkg
ewogICAgICAgICAgICAgICAgIGNoYW5nZUxvZ2ljYWxUb3AgPSAwOwogICAgICAgICAgICAgICAg
IGNoYW5nZUxvZ2ljYWxCb3R0b20gPSBtYXgoY2hhbmdlTG9naWNhbEJvdHRvbSwgbG9naWNhbEJv
dHRvbUZvckZsb2F0KGZsb2F0aW5nT2JqZWN0KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCmluZGV4IGI2NGMxZDMxNTZhZDExN2Ey
NzA5M2I3NTA4MjJmMGY4ODU2NzkwOTUuLjE5NTNkZDE1MWEzYmVhYTUzZTY5NzE0ZGRjZDc2Yjg1
ZTU1NmEzZjAgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
a0xpbmVMYXlvdXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
a0xpbmVMYXlvdXQuY3BwCkBAIC03MDcsMTQgKzcwNywxNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQg
c2V0TG9naWNhbFdpZHRoRm9yVGV4dFJ1bihSb290SW5saW5lQm94KiBsaW5lQm94LCBCaWRpUnVu
KiBydQogICAgIGlmICghZmFsbGJhY2tGb250cy5pc0VtcHR5KCkpIHsKICAgICAgICAgQVNTRVJU
KHJ1bi0+bV9ib3gtPmlzVGV4dCgpKTsKICAgICAgICAgR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNr
Rm9udHNNYXA6Oml0ZXJhdG9yIGl0ID0gdGV4dEJveERhdGFNYXAuYWRkKHRvSW5saW5lVGV4dEJv
eChydW4tPm1fYm94KSwgbWFrZV9wYWlyKFZlY3Rvcjxjb25zdCBTaW1wbGVGb250RGF0YSo+KCks
IEdseXBoT3ZlcmZsb3coKSkpLml0ZXJhdG9yOwotICAgICAgICBBU1NFUlQoaXQtPnNlY29uZC5m
aXJzdC5pc0VtcHR5KCkpOwotICAgICAgICBjb3B5VG9WZWN0b3IoZmFsbGJhY2tGb250cywgaXQt
PnNlY29uZC5maXJzdCk7CisgICAgICAgIEFTU0VSVChpdC0+dmFsdWUuZmlyc3QuaXNFbXB0eSgp
KTsKKyAgICAgICAgY29weVRvVmVjdG9yKGZhbGxiYWNrRm9udHMsIGl0LT52YWx1ZS5maXJzdCk7
CiAgICAgICAgIHJ1bi0+bV9ib3gtPnBhcmVudCgpLT5jbGVhckRlc2NlbmRhbnRzSGF2ZVNhbWVM
aW5lSGVpZ2h0QW5kQmFzZWxpbmUoKTsKICAgICB9CiAgICAgaWYgKChnbHlwaE92ZXJmbG93LnRv
cCB8fCBnbHlwaE92ZXJmbG93LmJvdHRvbSB8fCBnbHlwaE92ZXJmbG93LmxlZnQgfHwgZ2x5cGhP
dmVyZmxvdy5yaWdodCkpIHsKICAgICAgICAgQVNTRVJUKHJ1bi0+bV9ib3gtPmlzVGV4dCgpKTsK
ICAgICAgICAgR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXA6Oml0ZXJhdG9yIGl0ID0g
dGV4dEJveERhdGFNYXAuYWRkKHRvSW5saW5lVGV4dEJveChydW4tPm1fYm94KSwgbWFrZV9wYWly
KFZlY3Rvcjxjb25zdCBTaW1wbGVGb250RGF0YSo+KCksIEdseXBoT3ZlcmZsb3coKSkpLml0ZXJh
dG9yOwotICAgICAgICBpdC0+c2Vjb25kLnNlY29uZCA9IGdseXBoT3ZlcmZsb3c7CisgICAgICAg
IGl0LT52YWx1ZS5zZWNvbmQgPSBnbHlwaE92ZXJmbG93OwogICAgICAgICBydW4tPm1fYm94LT5j
bGVhcktub3duVG9IYXZlTm9PdmVyZmxvdygpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCmluZGV4IDdkY2QyNDEyOTE2
ZjVhYTBhOWQ2NGJmYmZkNzAxODViMjNkZDJkNTMuLjE3MDc4ZTI2ZWJjODYxNGZjNTI0MzhiNjIz
ZmE0ZjQyNDM5ODY3NzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCb3hNb2RlbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveE1vZGVsT2JqZWN0LmNwcApAQCAtMTM3LDcgKzEzNyw3IEBAIHZvaWQgSW1hZ2VRdWFsaXR5
Q29udHJvbGxlcjo6aGlnaFF1YWxpdHlSZXBhaW50VGltZXJGaXJlZChUaW1lcjxJbWFnZVF1YWxp
dHlDb250CiAgICAgaWYgKG1fYW5pbWF0ZWRSZXNpemVJc0FjdGl2ZSkgewogICAgICAgICBtX2Fu
aW1hdGVkUmVzaXplSXNBY3RpdmUgPSBmYWxzZTsKICAgICAgICAgZm9yIChPYmplY3RMYXllclNp
emVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9vYmplY3RMYXllclNpemVNYXAuYmVnaW4oKTsgaXQgIT0g
bV9vYmplY3RMYXllclNpemVNYXAuZW5kKCk7ICsraXQpCi0gICAgICAgICAgICBpdC0+Zmlyc3Qt
PnJlcGFpbnQoKTsKKyAgICAgICAgICAgIGl0LT5rZXktPnJlcGFpbnQoKTsKICAgICB9CiB9CiAK
QEAgLTE2MiwxNCArMTYyLDE0IEBAIGJvb2wgSW1hZ2VRdWFsaXR5Q29udHJvbGxlcjo6c2hvdWxk
UGFpbnRBdExvd1F1YWxpdHkoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBSCiAKICAgICAvLyBM
b29rIG91cnNlbHZlcyB1cCBpbiB0aGUgaGFzaHRhYmxlcy4KICAgICBPYmplY3RMYXllclNpemVN
YXA6Oml0ZXJhdG9yIGkgPSBtX29iamVjdExheWVyU2l6ZU1hcC5maW5kKG9iamVjdCk7Ci0gICAg
TGF5ZXJTaXplTWFwKiBpbm5lck1hcCA9IGkgIT0gbV9vYmplY3RMYXllclNpemVNYXAuZW5kKCkg
PyAmaS0+c2Vjb25kIDogMDsKKyAgICBMYXllclNpemVNYXAqIGlubmVyTWFwID0gaSAhPSBtX29i
amVjdExheWVyU2l6ZU1hcC5lbmQoKSA/ICZpLT52YWx1ZSA6IDA7CiAgICAgTGF5b3V0U2l6ZSBv
bGRTaXplOwogICAgIGJvb2wgaXNGaXJzdFJlc2l6ZSA9IHRydWU7CiAgICAgaWYgKGlubmVyTWFw
KSB7CiAgICAgICAgIExheWVyU2l6ZU1hcDo6aXRlcmF0b3IgaiA9IGlubmVyTWFwLT5maW5kKGxh
eWVyKTsKICAgICAgICAgaWYgKGogIT0gaW5uZXJNYXAtPmVuZCgpKSB7CiAgICAgICAgICAgICBp
c0ZpcnN0UmVzaXplID0gZmFsc2U7Ci0gICAgICAgICAgICBvbGRTaXplID0gai0+c2Vjb25kOwor
ICAgICAgICAgICAgb2xkU2l6ZSA9IGotPnZhbHVlOwogICAgICAgICB9CiAgICAgfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ291bnRlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ291bnRlci5jcHAKaW5kZXggZGU0NWQ4OTVlMTdl
MDlhNzFiNjM5MWRkOThlODIzMDc3YjIxZDEwNy4uNTQ1N2EzYTFkZDE2OGI4NmVkM2JhZGE3MDcw
YmE0NjM0NGIzODAyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckNvdW50ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb3VudGVy
LmNwcApAQCAtNTcxLDExICs1NzEsMTEgQEAgdm9pZCBSZW5kZXJDb3VudGVyOjpkZXN0cm95Q291
bnRlck5vZGVzKFJlbmRlck9iamVjdCogb3duZXIpCiAgICAgQ291bnRlck1hcHM6Oml0ZXJhdG9y
IG1hcHNJdGVyYXRvciA9IG1hcHMuZmluZChvd25lcik7CiAgICAgaWYgKG1hcHNJdGVyYXRvciA9
PSBtYXBzLmVuZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgQ291bnRlck1hcCogbWFwID0gbWFw
c0l0ZXJhdG9yLT5zZWNvbmQuZ2V0KCk7CisgICAgQ291bnRlck1hcCogbWFwID0gbWFwc0l0ZXJh
dG9yLT52YWx1ZS5nZXQoKTsKICAgICBDb3VudGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBt
YXAtPmVuZCgpOwogICAgIGZvciAoQ291bnRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAt
PmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBBdG9taWNTdHJpbmcgaWRlbnRp
ZmllcihpdC0+Zmlyc3QuZ2V0KCkpOwotICAgICAgICBkZXN0cm95Q291bnRlck5vZGVXaXRob3V0
TWFwUmVtb3ZhbChpZGVudGlmaWVyLCBpdC0+c2Vjb25kLmdldCgpKTsKKyAgICAgICAgQXRvbWlj
U3RyaW5nIGlkZW50aWZpZXIoaXQtPmtleS5nZXQoKSk7CisgICAgICAgIGRlc3Ryb3lDb3VudGVy
Tm9kZVdpdGhvdXRNYXBSZW1vdmFsKGlkZW50aWZpZXIsIGl0LT52YWx1ZS5nZXQoKSk7CiAgICAg
fQogICAgIG1hcHMucmVtb3ZlKG1hcHNJdGVyYXRvcik7CiAgICAgb3duZXItPnNldEhhc0NvdW50
ZXJOb2RlTWFwKGZhbHNlKTsKQEAgLTU4OSw3ICs1ODksNyBAQCB2b2lkIFJlbmRlckNvdW50ZXI6
OmRlc3Ryb3lDb3VudGVyTm9kZShSZW5kZXJPYmplY3QqIG93bmVyLCBjb25zdCBBdG9taWNTdHJp
bmcmCiAgICAgQ291bnRlck1hcDo6aXRlcmF0b3IgbWFwSXRlcmF0b3IgPSBtYXAtPmZpbmQoaWRl
bnRpZmllci5pbXBsKCkpOwogICAgIGlmIChtYXBJdGVyYXRvciA9PSBtYXAtPmVuZCgpKQogICAg
ICAgICByZXR1cm47Ci0gICAgZGVzdHJveUNvdW50ZXJOb2RlV2l0aG91dE1hcFJlbW92YWwoaWRl
bnRpZmllciwgbWFwSXRlcmF0b3ItPnNlY29uZC5nZXQoKSk7CisgICAgZGVzdHJveUNvdW50ZXJO
b2RlV2l0aG91dE1hcFJlbW92YWwoaWRlbnRpZmllciwgbWFwSXRlcmF0b3ItPnZhbHVlLmdldCgp
KTsKICAgICBtYXAtPnJlbW92ZShtYXBJdGVyYXRvcik7CiAgICAgLy8gV2UgZG8gbm90IGRlbGV0
ZSAibWFwIiBoZXJlIGV2ZW4gaWYgZW1wdHkgYmVjYXVzZSB3ZSBleHBlY3QgdG8gcmV1c2UKICAg
ICAvLyBpdCBzb29uLiBJbiBvcmRlciBmb3IgYSByZW5kZXJlciB0byBsb3NlIGFsbCBpdHMgY291
bnRlcnMgcGVybWFuZW50bHksCkBAIC02MjksMjIgKzYyOSwyMiBAQCBzdGF0aWMgdm9pZCB1cGRh
dGVDb3VudGVycyhSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogICAgIENvdW50ZXJEaXJlY3RpdmVN
YXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGRpcmVjdGl2ZU1hcC0+ZW5kKCk7CiAgICAgaWYgKCFy
ZW5kZXJlci0+aGFzQ291bnRlck5vZGVNYXAoKSkgewogICAgICAgICBmb3IgKENvdW50ZXJEaXJl
Y3RpdmVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZGlyZWN0aXZlTWFwLT5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBtYWtlQ291bnRlck5vZGUocmVuZGVyZXIsIEF0b21p
Y1N0cmluZyhpdC0+Zmlyc3QuZ2V0KCkpLCBmYWxzZSk7CisgICAgICAgICAgICBtYWtlQ291bnRl
ck5vZGUocmVuZGVyZXIsIEF0b21pY1N0cmluZyhpdC0+a2V5LmdldCgpKSwgZmFsc2UpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIENvdW50ZXJNYXAqIGNvdW50ZXJNYXAgPSBjb3VudGVy
TWFwcygpLmdldChyZW5kZXJlcik7CiAgICAgQVNTRVJUKGNvdW50ZXJNYXApOwogICAgIGZvciAo
Q291bnRlckRpcmVjdGl2ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBkaXJlY3RpdmVNYXAtPmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBSZWZQdHI8Q291bnRlck5vZGU+IG5v
ZGUgPSBjb3VudGVyTWFwLT5nZXQoaXQtPmZpcnN0LmdldCgpKTsKKyAgICAgICAgUmVmUHRyPENv
dW50ZXJOb2RlPiBub2RlID0gY291bnRlck1hcC0+Z2V0KGl0LT5rZXkuZ2V0KCkpOwogICAgICAg
ICBpZiAoIW5vZGUpIHsKLSAgICAgICAgICAgIG1ha2VDb3VudGVyTm9kZShyZW5kZXJlciwgQXRv
bWljU3RyaW5nKGl0LT5maXJzdC5nZXQoKSksIGZhbHNlKTsKKyAgICAgICAgICAgIG1ha2VDb3Vu
dGVyTm9kZShyZW5kZXJlciwgQXRvbWljU3RyaW5nKGl0LT5rZXkuZ2V0KCkpLCBmYWxzZSk7CiAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICBSZWZQdHI8Q291bnRlck5v
ZGU+IG5ld1BhcmVudCA9IDA7CiAgICAgICAgIFJlZlB0cjxDb3VudGVyTm9kZT4gbmV3UHJldmlv
dXNTaWJsaW5nID0gMDsKICAgICAgICAgCi0gICAgICAgIGZpbmRQbGFjZUZvckNvdW50ZXIocmVu
ZGVyZXIsIEF0b21pY1N0cmluZyhpdC0+Zmlyc3QuZ2V0KCkpLCBub2RlLT5oYXNSZXNldFR5cGUo
KSwgbmV3UGFyZW50LCBuZXdQcmV2aW91c1NpYmxpbmcpOwotICAgICAgICBpZiAobm9kZSAhPSBj
b3VudGVyTWFwLT5nZXQoaXQtPmZpcnN0LmdldCgpKSkKKyAgICAgICAgZmluZFBsYWNlRm9yQ291
bnRlcihyZW5kZXJlciwgQXRvbWljU3RyaW5nKGl0LT5rZXkuZ2V0KCkpLCBub2RlLT5oYXNSZXNl
dFR5cGUoKSwgbmV3UGFyZW50LCBuZXdQcmV2aW91c1NpYmxpbmcpOworICAgICAgICBpZiAobm9k
ZSAhPSBjb3VudGVyTWFwLT5nZXQoaXQtPmtleS5nZXQoKSkpCiAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgQ291bnRlck5vZGUqIHBhcmVudCA9IG5vZGUtPnBhcmVudCgpOwogICAgICAg
ICBpZiAobmV3UGFyZW50ID09IHBhcmVudCAmJiBuZXdQcmV2aW91c1NpYmxpbmcgPT0gbm9kZS0+
cHJldmlvdXNTaWJsaW5nKCkpCkBAIC02NTIsNyArNjUyLDcgQEAgc3RhdGljIHZvaWQgdXBkYXRl
Q291bnRlcnMoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKICAgICAgICAgaWYgKHBhcmVudCkKICAg
ICAgICAgICAgIHBhcmVudC0+cmVtb3ZlQ2hpbGQobm9kZS5nZXQoKSk7CiAgICAgICAgIGlmIChu
ZXdQYXJlbnQpCi0gICAgICAgICAgICBuZXdQYXJlbnQtPmluc2VydEFmdGVyKG5vZGUuZ2V0KCks
IG5ld1ByZXZpb3VzU2libGluZy5nZXQoKSwgaXQtPmZpcnN0LmdldCgpKTsKKyAgICAgICAgICAg
IG5ld1BhcmVudC0+aW5zZXJ0QWZ0ZXIobm9kZS5nZXQoKSwgbmV3UHJldmlvdXNTaWJsaW5nLmdl
dCgpLCBpdC0+a2V5LmdldCgpKTsKICAgICB9CiB9CiAKQEAgLTY4NCwyMSArNjg0LDIxIEBAIHZv
aWQgUmVuZGVyQ291bnRlcjo6cmVuZGVyZXJTdHlsZUNoYW5nZWQoUmVuZGVyT2JqZWN0KiByZW5k
ZXJlciwgY29uc3QgUmVuZGVyU3R5CiAgICAgICAgICAgICBDb3VudGVyRGlyZWN0aXZlTWFwOjpj
b25zdF9pdGVyYXRvciBuZXdNYXBFbmQgPSBuZXdDb3VudGVyRGlyZWN0aXZlcy0+ZW5kKCk7CiAg
ICAgICAgICAgICBDb3VudGVyRGlyZWN0aXZlTWFwOjpjb25zdF9pdGVyYXRvciBvbGRNYXBFbmQg
PSBvbGRDb3VudGVyRGlyZWN0aXZlcy0+ZW5kKCk7CiAgICAgICAgICAgICBmb3IgKENvdW50ZXJE
aXJlY3RpdmVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbmV3Q291bnRlckRpcmVjdGl2ZXMtPmJl
Z2luKCk7IGl0ICE9IG5ld01hcEVuZDsgKytpdCkgewotICAgICAgICAgICAgICAgIENvdW50ZXJE
aXJlY3RpdmVNYXA6OmNvbnN0X2l0ZXJhdG9yIG9sZE1hcEl0ID0gb2xkQ291bnRlckRpcmVjdGl2
ZXMtPmZpbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgICAgICAgICBDb3VudGVyRGlyZWN0aXZlTWFw
Ojpjb25zdF9pdGVyYXRvciBvbGRNYXBJdCA9IG9sZENvdW50ZXJEaXJlY3RpdmVzLT5maW5kKGl0
LT5rZXkpOwogICAgICAgICAgICAgICAgIGlmIChvbGRNYXBJdCAhPSBvbGRNYXBFbmQpIHsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKG9sZE1hcEl0LT5zZWNvbmQgPT0gaXQtPnNlY29uZCkKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKG9sZE1hcEl0LT52YWx1ZSA9PSBpdC0+dmFsdWUpCiAgICAg
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgUmVuZGVy
Q291bnRlcjo6ZGVzdHJveUNvdW50ZXJOb2RlKHJlbmRlcmVyLCBpdC0+Zmlyc3QuZ2V0KCkpOwor
ICAgICAgICAgICAgICAgICAgICBSZW5kZXJDb3VudGVyOjpkZXN0cm95Q291bnRlck5vZGUocmVu
ZGVyZXIsIGl0LT5rZXkuZ2V0KCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAvLyBXZSBtdXN0IGNyZWF0ZSB0aGlzIG5vZGUgaGVyZSwgYmVjYXVzZSB0aGUgY2hhbmdlZCBu
b2RlIG1heSBiZSBhIG5vZGUgd2l0aCBubyBkaXNwbGF5IHN1Y2ggYXMKICAgICAgICAgICAgICAg
ICAvLyBhcyB0aG9zZSBjcmVhdGVkIGJ5IHRoZSBpbmNyZW1lbnQgb3IgcmVzZXQgZGlyZWN0aXZl
cyBhbmQgdGhlIHJlLWxheW91dCB0aGF0IHdpbGwgaGFwcGVuIHdpbGwKICAgICAgICAgICAgICAg
ICAvLyBub3QgY2F0Y2ggdGhlIGNoYW5nZSBpZiB0aGUgbm9kZSBoYWQgbm8gY2hpbGRyZW4uCi0g
ICAgICAgICAgICAgICAgbWFrZUNvdW50ZXJOb2RlKHJlbmRlcmVyLCBpdC0+Zmlyc3QuZ2V0KCks
IGZhbHNlKTsKKyAgICAgICAgICAgICAgICBtYWtlQ291bnRlck5vZGUocmVuZGVyZXIsIGl0LT5r
ZXkuZ2V0KCksIGZhbHNlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8vIERlc3Ryb3lp
bmcgb2xkIGNvdW50ZXJzIHRoYXQgZG8gbm90IGV4aXN0IGluIHRoZSBuZXcgY291bnRlckRpcmVj
dGl2ZSBtYXAuCiAgICAgICAgICAgICBmb3IgKENvdW50ZXJEaXJlY3RpdmVNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gb2xkQ291bnRlckRpcmVjdGl2ZXMtPmJlZ2luKCk7IGl0ICE9b2xkTWFwRW5k
OyArK2l0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFuZXdDb3VudGVyRGlyZWN0aXZlcy0+Y29u
dGFpbnMoaXQtPmZpcnN0KSkKLSAgICAgICAgICAgICAgICAgICAgUmVuZGVyQ291bnRlcjo6ZGVz
dHJveUNvdW50ZXJOb2RlKHJlbmRlcmVyLCBpdC0+Zmlyc3QuZ2V0KCkpOworICAgICAgICAgICAg
ICAgIGlmICghbmV3Q291bnRlckRpcmVjdGl2ZXMtPmNvbnRhaW5zKGl0LT5rZXkpKQorICAgICAg
ICAgICAgICAgICAgICBSZW5kZXJDb3VudGVyOjpkZXN0cm95Q291bnRlck5vZGUocmVuZGVyZXIs
IGl0LT5rZXkuZ2V0KCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgaWYgKHJlbmRlcmVyLT5oYXNDb3VudGVyTm9kZU1hcCgpKQpAQCAtNzEwLDcgKzcxMCw3
IEBAIHZvaWQgUmVuZGVyQ291bnRlcjo6cmVuZGVyZXJTdHlsZUNoYW5nZWQoUmVuZGVyT2JqZWN0
KiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5CiAgICAgICAgICAgICAvLyBXZSBtdXN0IGNyZWF0
ZSB0aGlzIG5vZGUgaGVyZSwgYmVjYXVzZSB0aGUgYWRkZWQgbm9kZSBtYXkgYmUgYSBub2RlIHdp
dGggbm8gZGlzcGxheSBzdWNoIGFzCiAgICAgICAgICAgICAvLyBhcyB0aG9zZSBjcmVhdGVkIGJ5
IHRoZSBpbmNyZW1lbnQgb3IgcmVzZXQgZGlyZWN0aXZlcyBhbmQgdGhlIHJlLWxheW91dCB0aGF0
IHdpbGwgaGFwcGVuIHdpbGwKICAgICAgICAgICAgIC8vIG5vdCBjYXRjaCB0aGUgY2hhbmdlIGlm
IHRoZSBub2RlIGhhZCBubyBjaGlsZHJlbi4KLSAgICAgICAgICAgIG1ha2VDb3VudGVyTm9kZShy
ZW5kZXJlciwgaXQtPmZpcnN0LmdldCgpLCBmYWxzZSk7CisgICAgICAgICAgICBtYWtlQ291bnRl
ck5vZGUocmVuZGVyZXIsIGl0LT5rZXkuZ2V0KCksIGZhbHNlKTsKICAgICAgICAgfQogICAgIH0K
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFk
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcAppbmRl
eCBkMzA1OWRmMTM1MDQxOWUwZTFkYmNhMmFiNTUxOGU2YjFmNDhmZjUxLi43N2YyZWY3Mjg1YmVh
Mjc5MTUxZTI3NzExNTE0NzZhYTdkYmNhM2EyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwCkBAIC02MjAsNyArNjIwLDcgQEAgdm9pZCBSZW5kZXJG
bG93VGhyZWFkOjpzZXRSZWdpb25SYW5nZUZvckJveChjb25zdCBSZW5kZXJCb3gqIGJveCwgTGF5
b3V0VW5pdCBvZmYKICAgICB9CiAKICAgICAvLyBJZiBub3RoaW5nIGNoYW5nZWQsIGp1c3QgYmFp
bC4KLSAgICBSZW5kZXJSZWdpb25SYW5nZSYgcmFuZ2UgPSBpdC0+c2Vjb25kOworICAgIFJlbmRl
clJlZ2lvblJhbmdlJiByYW5nZSA9IGl0LT52YWx1ZTsKICAgICBpZiAocmFuZ2Uuc3RhcnRSZWdp
b24oKSA9PSBzdGFydFJlZ2lvbiAmJiByYW5nZS5lbmRSZWdpb24oKSA9PSBlbmRSZWdpb24pCiAg
ICAgICAgIHJldHVybjsKIApAQCAtNjUwLDcgKzY1MCw3IEBAIHZvaWQgUmVuZGVyRmxvd1RocmVh
ZDo6Z2V0UmVnaW9uUmFuZ2VGb3JCb3goY29uc3QgUmVuZGVyQm94KiBib3gsIFJlbmRlclJlZ2lv
biomCiAgICAgaWYgKGl0ID09IG1fcmVnaW9uUmFuZ2VNYXAuZW5kKCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGNvbnN0IFJlbmRlclJlZ2lvblJhbmdlJiByYW5nZSA9IGl0LT5zZWNvbmQ7Cisg
ICAgY29uc3QgUmVuZGVyUmVnaW9uUmFuZ2UmIHJhbmdlID0gaXQtPnZhbHVlOwogICAgIHN0YXJ0
UmVnaW9uID0gcmFuZ2Uuc3RhcnRSZWdpb24oKTsKICAgICBlbmRSZWdpb24gPSByYW5nZS5lbmRS
ZWdpb24oKTsKICAgICBBU1NFUlQobV9yZWdpb25MaXN0LmNvbnRhaW5zKHN0YXJ0UmVnaW9uKSAm
JiBtX3JlZ2lvbkxpc3QuY29udGFpbnMoZW5kUmVnaW9uKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyLmNwcAppbmRleCAwMzUwYWM5MzAxNWEwODY1YjI1MDQzNWQyM2EwN2Jj
YWNlN2FiNmExLi41YzEwNjM1MjRmMzIzNzI4YzRmNzU3MzBkYjM3Mzg3YjEwZjAwMDE1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTI4NzEsNyArMjg3MSw3
IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29u
c3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwKICAgICBwYWludExheWVyKHRoaXMsIGNvbnRleHQs
IGVuY2xvc2luZ0ludFJlY3QoZGFtYWdlUmVjdCksIExheW91dFNpemUoKSwgcGFpbnRCZWhhdmlv
ciwgcGFpbnRpbmdSb290LCByZWdpb24sICZvdmVybGFwVGVzdFJlcXVlc3RzLCBwYWludEZsYWdz
KTsKICAgICBPdmVybGFwVGVzdFJlcXVlc3RNYXA6Oml0ZXJhdG9yIGVuZCA9IG92ZXJsYXBUZXN0
UmVxdWVzdHMuZW5kKCk7CiAgICAgZm9yIChPdmVybGFwVGVzdFJlcXVlc3RNYXA6Oml0ZXJhdG9y
IGl0ID0gb3ZlcmxhcFRlc3RSZXF1ZXN0cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAg
ICAgIGl0LT5maXJzdC0+c2V0T3ZlcmxhcFRlc3RSZXN1bHQoZmFsc2UpOworICAgICAgICBpdC0+
a2V5LT5zZXRPdmVybGFwVGVzdFJlc3VsdChmYWxzZSk7CiB9CiAKIHZvaWQgUmVuZGVyTGF5ZXI6
OnBhaW50T3ZlcmxheVNjcm9sbGJhcnMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBM
YXlvdXRSZWN0JiBkYW1hZ2VSZWN0LCBQYWludEJlaGF2aW9yIHBhaW50QmVoYXZpb3IsIFJlbmRl
ck9iamVjdCogcGFpbnRpbmdSb290KQpAQCAtMjk0MCwxMSArMjk0MCwxMSBAQCBzdGF0aWMgdm9p
ZCBwZXJmb3JtT3ZlcmxhcFRlc3RzKE92ZXJsYXBUZXN0UmVxdWVzdE1hcCYgb3ZlcmxhcFRlc3RS
ZXF1ZXN0cywgY29ucwogICAgIE92ZXJsYXBUZXN0UmVxdWVzdE1hcDo6aXRlcmF0b3IgZW5kID0g
b3ZlcmxhcFRlc3RSZXF1ZXN0cy5lbmQoKTsKICAgICBMYXlvdXRSZWN0IGJvdW5kaW5nQm94ID0g
bGF5ZXItPmJvdW5kaW5nQm94KHJvb3RMYXllcik7CiAgICAgZm9yIChPdmVybGFwVGVzdFJlcXVl
c3RNYXA6Oml0ZXJhdG9yIGl0ID0gb3ZlcmxhcFRlc3RSZXF1ZXN0cy5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKCFib3VuZGluZ0JveC5pbnRlcnNlY3RzKGl0LT5zZWNv
bmQpKQorICAgICAgICBpZiAoIWJvdW5kaW5nQm94LmludGVyc2VjdHMoaXQtPnZhbHVlKSkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGl0LT5maXJzdC0+c2V0T3ZlcmxhcFRlc3RS
ZXN1bHQodHJ1ZSk7Ci0gICAgICAgIG92ZXJsYXBwZWRSZXF1ZXN0Q2xpZW50cy5hcHBlbmQoaXQt
PmZpcnN0KTsKKyAgICAgICAgaXQtPmtleS0+c2V0T3ZlcmxhcFRlc3RSZXN1bHQodHJ1ZSk7Cisg
ICAgICAgIG92ZXJsYXBwZWRSZXF1ZXN0Q2xpZW50cy5hcHBlbmQoaXQtPmtleSk7CiAgICAgfQog
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb3ZlcmxhcHBlZFJlcXVlc3RDbGllbnRzLnNpemUo
KTsgKytpKQogICAgICAgICBvdmVybGFwVGVzdFJlcXVlc3RzLnJlbW92ZShvdmVybGFwcGVkUmVx
dWVzdENsaWVudHNbaV0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyRmlsdGVySW5mby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJGaWx0ZXJJbmZvLmNwcAppbmRleCBhY2JmMDdkOWQxYmZkMjAyMWM1NTQxNTI2NmRkNDQz
MDUwNTU1YTdkLi5jYjRjNWQ2NjExMGM5MjQxMmYzNTBlYTg5OTMyNzJjZTYyY2Q3ZTA4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvLmNw
cApAQCAtNTYsNyArNTYsNyBAQCBSZW5kZXJMYXllckZpbHRlckluZm8qIFJlbmRlckxheWVyRmls
dGVySW5mbzo6ZmlsdGVySW5mb0ZvclJlbmRlckxheWVyKGNvbnN0IFJlbgogICAgIGlmICghc19m
aWx0ZXJNYXApCiAgICAgICAgIHJldHVybiAwOwogICAgIFJlbmRlckxheWVyRmlsdGVySW5mb01h
cDo6aXRlcmF0b3IgaXRlciA9IHNfZmlsdGVyTWFwLT5maW5kKGxheWVyKTsKLSAgICByZXR1cm4g
KGl0ZXIgIT0gc19maWx0ZXJNYXAtPmVuZCgpKSA/IGl0ZXItPnNlY29uZCA6IDA7CisgICAgcmV0
dXJuIChpdGVyICE9IHNfZmlsdGVyTWFwLT5lbmQoKSkgPyBpdGVyLT52YWx1ZSA6IDA7CiB9CiAK
IFJlbmRlckxheWVyRmlsdGVySW5mbyogUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvOjpjcmVhdGVGaWx0
ZXJJbmZvRm9yUmVuZGVyTGF5ZXJJZk5lZWRlZChSZW5kZXJMYXllciogbGF5ZXIpCkBAIC02Nyw3
ICs2Nyw3IEBAIFJlbmRlckxheWVyRmlsdGVySW5mbyogUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvOjpj
cmVhdGVGaWx0ZXJJbmZvRm9yUmVuZGVyTGF5ZXJJZk5lCiAgICAgUmVuZGVyTGF5ZXJGaWx0ZXJJ
bmZvTWFwOjppdGVyYXRvciBpdGVyID0gc19maWx0ZXJNYXAtPmZpbmQobGF5ZXIpOwogICAgIGlm
IChpdGVyICE9IHNfZmlsdGVyTWFwLT5lbmQoKSkgewogICAgICAgICBBU1NFUlQobGF5ZXItPmhh
c0ZpbHRlckluZm8oKSk7Ci0gICAgICAgIHJldHVybiBpdGVyLT5zZWNvbmQ7CisgICAgICAgIHJl
dHVybiBpdGVyLT52YWx1ZTsKICAgICB9CiAgICAgCiAgICAgUmVuZGVyTGF5ZXJGaWx0ZXJJbmZv
KiBmaWx0ZXIgPSBuZXcgUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvKGxheWVyKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd1RocmVhZC5jcHAKaW5kZXggNWIw
MjQ1M2U0YzZjM2RiYWVkNjNkZGE1MGVhMzM5NGNiZTQ3Y2YyNC4uYzEyZmNmNzNmZDZkZjI2NDFh
ZjIyNWM5MTkyYzdhNzI5NTI4OTc5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck5hbWVkRmxvd1RocmVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck5hbWVkRmxvd1RocmVhZC5jcHAKQEAgLTExNyw3ICsxMTcsNyBAQCBib29sIFJl
bmRlck5hbWVkRmxvd1RocmVhZDo6ZGVwZW5kc09uKFJlbmRlck5hbWVkRmxvd1RocmVhZCogb3Ro
ZXJSZW5kZXJGbG93VGhyZQogICAgIFJlbmRlck5hbWVkRmxvd1RocmVhZENvdW50ZWRTZXQ6OmNv
bnN0X2l0ZXJhdG9yIGl0ZXJhdG9yID0gbV9sYXlvdXRCZWZvcmVUaHJlYWRzU2V0LmJlZ2luKCk7
CiAgICAgUmVuZGVyTmFtZWRGbG93VGhyZWFkQ291bnRlZFNldDo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gbV9sYXlvdXRCZWZvcmVUaHJlYWRzU2V0LmVuZCgpOwogICAgIGZvciAoOyBpdGVyYXRvciAh
PSBlbmQ7ICsraXRlcmF0b3IpIHsKLSAgICAgICAgY29uc3QgUmVuZGVyTmFtZWRGbG93VGhyZWFk
KiBiZWZvcmVGbG93VGhyZWFkID0gKCppdGVyYXRvcikuZmlyc3Q7CisgICAgICAgIGNvbnN0IFJl
bmRlck5hbWVkRmxvd1RocmVhZCogYmVmb3JlRmxvd1RocmVhZCA9ICgqaXRlcmF0b3IpLmtleTsK
ICAgICAgICAgaWYgKGJlZm9yZUZsb3dUaHJlYWQtPmRlcGVuZHNPbihvdGhlclJlbmRlckZsb3dU
aHJlYWQpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMjUxLDcgKzI1MSw3
IEBAIHZvaWQgUmVuZGVyTmFtZWRGbG93VGhyZWFkOjpyZW1vdmVEZXBlbmRlbmN5T25GbG93VGhy
ZWFkKFJlbmRlck5hbWVkRmxvd1RocmVhZCoKIHZvaWQgUmVuZGVyTmFtZWRGbG93VGhyZWFkOjpw
dXNoRGVwZW5kZW5jaWVzKFJlbmRlck5hbWVkRmxvd1RocmVhZExpc3QmIGxpc3QpCiB7CiAgICAg
Zm9yIChSZW5kZXJOYW1lZEZsb3dUaHJlYWRDb3VudGVkU2V0OjppdGVyYXRvciBpdGVyID0gbV9s
YXlvdXRCZWZvcmVUaHJlYWRzU2V0LmJlZ2luKCk7IGl0ZXIgIT0gbV9sYXlvdXRCZWZvcmVUaHJl
YWRzU2V0LmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgUmVuZGVyTmFtZWRGbG93VGhyZWFkKiBm
bG93VGhyZWFkID0gKCppdGVyKS5maXJzdDsKKyAgICAgICAgUmVuZGVyTmFtZWRGbG93VGhyZWFk
KiBmbG93VGhyZWFkID0gKCppdGVyKS5rZXk7CiAgICAgICAgIGlmIChsaXN0LmNvbnRhaW5zKGZs
b3dUaHJlYWQpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGZsb3dUaHJlYWQtPnB1
c2hEZXBlbmRlbmNpZXMobGlzdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyUmVnaW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZWdp
b24uY3BwCmluZGV4IGRiZGJlODNmN2I1YzU4MzFmOGY5NDQxYmYwMTA1ODQzNjE5YTEzNmYuLmQ3
OTJiODAxOTAzYjExMGNkMjhmNTAzNWNjN2IyZWY1ZTljYWQ0MzkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZWdpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJSZWdpb24uY3BwCkBAIC0yNTgsNyArMjU4LDcgQEAgUmVuZGVyQm94
UmVnaW9uSW5mbyogUmVuZGVyUmVnaW9uOjpzZXRSZW5kZXJCb3hSZWdpb25JbmZvKGNvbnN0IFJl
bmRlckJveCogYm94LAogICAgIGlmICghbV9pc1ZhbGlkIHx8ICFtX2Zsb3dUaHJlYWQpCiAgICAg
ICAgIHJldHVybiAwOwogCi0gICAgT3duUHRyPFJlbmRlckJveFJlZ2lvbkluZm8+JiBib3hJbmZv
ID0gbV9yZW5kZXJCb3hSZWdpb25JbmZvLmFkZChib3gsIG51bGxwdHIpLml0ZXJhdG9yLT5zZWNv
bmQ7CisgICAgT3duUHRyPFJlbmRlckJveFJlZ2lvbkluZm8+JiBib3hJbmZvID0gbV9yZW5kZXJC
b3hSZWdpb25JbmZvLmFkZChib3gsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAo
Ym94SW5mbykKICAgICAgICAgKmJveEluZm8gPSBSZW5kZXJCb3hSZWdpb25JbmZvKGxvZ2ljYWxM
ZWZ0SW5zZXQsIGxvZ2ljYWxSaWdodEluc2V0LCBjb250YWluaW5nQmxvY2tDaGFpbklzSW5zZXQp
OwogICAgIGVsc2UKQEAgLTMxOCw4ICszMTgsOCBAQCB2b2lkIFJlbmRlclJlZ2lvbjo6c2V0UmVn
aW9uT2JqZWN0c1JlZ2lvblN0eWxlKCkKICAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBvYmpl
Y3RTdHlsZUluUmVnaW9uOwogICAgICAgICBib29sIG9iamVjdFJlZ2lvblN0eWxlQ2FjaGVkID0g
ZmFsc2U7CiAgICAgICAgIGlmIChpdCAhPSBtX3JlbmRlck9iamVjdFJlZ2lvblN0eWxlLmVuZCgp
KSB7Ci0gICAgICAgICAgICBvYmplY3RTdHlsZUluUmVnaW9uID0gaXQtPnNlY29uZC5zdHlsZTsK
LSAgICAgICAgICAgIEFTU0VSVChpdC0+c2Vjb25kLmNhY2hlZCk7CisgICAgICAgICAgICBvYmpl
Y3RTdHlsZUluUmVnaW9uID0gaXQtPnZhbHVlLnN0eWxlOworICAgICAgICAgICAgQVNTRVJUKGl0
LT52YWx1ZS5jYWNoZWQpOwogICAgICAgICAgICAgb2JqZWN0UmVnaW9uU3R5bGVDYWNoZWQgPSB0
cnVlOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIG9iamVjdFN0eWxlSW5SZWdpb24gPSBj
b21wdXRlU3R5bGVJblJlZ2lvbihvYmplY3QpOwpAQCAtMzM3LDEyICszMzcsMTIgQEAgdm9pZCBS
ZW5kZXJSZWdpb246OnJlc3RvcmVSZWdpb25PYmplY3RzT3JpZ2luYWxTdHlsZSgpCiAKICAgICBS
ZW5kZXJPYmplY3RSZWdpb25TdHlsZU1hcCB0ZW1wOwogICAgIGZvciAoUmVuZGVyT2JqZWN0UmVn
aW9uU3R5bGVNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3JlbmRlck9iamVjdFJlZ2lvblN0eWxlLmJl
Z2luKCksIGVuZCA9IG1fcmVuZGVyT2JqZWN0UmVnaW9uU3R5bGUuZW5kKCk7IGl0ZXIgIT0gZW5k
OyArK2l0ZXIpIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiBvYmplY3QgPSBjb25zdF9jYXN0PFJl
bmRlck9iamVjdCo+KGl0ZXItPmZpcnN0KTsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBvYmplY3Qg
PSBjb25zdF9jYXN0PFJlbmRlck9iamVjdCo+KGl0ZXItPmtleSk7CiAgICAgICAgIFJlZlB0cjxS
ZW5kZXJTdHlsZT4gb2JqZWN0UmVnaW9uU3R5bGUgPSBvYmplY3QtPnN0eWxlKCk7Ci0gICAgICAg
IFJlZlB0cjxSZW5kZXJTdHlsZT4gb2JqZWN0T3JpZ2luYWxTdHlsZSA9IGl0ZXItPnNlY29uZC5z
dHlsZTsKKyAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBvYmplY3RPcmlnaW5hbFN0eWxlID0g
aXRlci0+dmFsdWUuc3R5bGU7CiAgICAgICAgIG9iamVjdC0+c2V0U3R5bGVJbnRlcm5hbChvYmpl
Y3RPcmlnaW5hbFN0eWxlKTsKIAotICAgICAgICBib29sIHNob3VsZENhY2hlUmVnaW9uU3R5bGUg
PSBpdGVyLT5zZWNvbmQuY2FjaGVkOworICAgICAgICBib29sIHNob3VsZENhY2hlUmVnaW9uU3R5
bGUgPSBpdGVyLT52YWx1ZS5jYWNoZWQ7CiAgICAgICAgIGlmICghc2hvdWxkQ2FjaGVSZWdpb25T
dHlsZSkgewogICAgICAgICAgICAgLy8gQ2hlY2sgd2hldGhlciB3ZSBzaG91bGQgY2FjaGUgdGhl
IGNvbXB1dGVkIHN0eWxlIGluIHJlZ2lvbi4KICAgICAgICAgICAgIHVuc2lnbmVkIGNoYW5nZWRD
b250ZXh0U2Vuc2l0aXZlUHJvcGVydGllcyA9IENvbnRleHRTZW5zaXRpdmVQcm9wZXJ0eU5vbmU7
CkBAIC0zOTgsNyArMzk4LDcgQEAgdm9pZCBSZW5kZXJSZWdpb246OmNvbXB1dGVDaGlsZHJlblN0
eWxlSW5SZWdpb24oY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCiAgICAgICAgIFJlZlB0cjxS
ZW5kZXJTdHlsZT4gY2hpbGRTdHlsZUluUmVnaW9uOwogICAgICAgICBib29sIG9iamVjdFJlZ2lv
blN0eWxlQ2FjaGVkID0gZmFsc2U7CiAgICAgICAgIGlmIChpdCAhPSBtX3JlbmRlck9iamVjdFJl
Z2lvblN0eWxlLmVuZCgpKSB7Ci0gICAgICAgICAgICBjaGlsZFN0eWxlSW5SZWdpb24gPSBpdC0+
c2Vjb25kLnN0eWxlOworICAgICAgICAgICAgY2hpbGRTdHlsZUluUmVnaW9uID0gaXQtPnZhbHVl
LnN0eWxlOwogICAgICAgICAgICAgb2JqZWN0UmVnaW9uU3R5bGVDYWNoZWQgPSB0cnVlOwogICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKGNoaWxkLT5pc0Fub255bW91cygpKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAppbmRleCA1
YzA4ZTdhMWNlNDAwNDZmY2VkZTkxNDQ1NzIyYzlhMmZjYzUxOWVkLi5iYzRkOTA0NGY2ZThkM2E3
YzYzYjMyOTZmNWVmMzcyZTUzOTExMmUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcApAQCAtMTQ1MCw3ICsxNDUwLDcgQEAgQ29sbGFwc2Vk
Qm9yZGVyVmFsdWUmIFJlbmRlclRhYmxlU2VjdGlvbjo6Y2FjaGVkQ29sbGFwc2VkQm9yZGVyKGNv
bnN0IFJlbmRlclRhYmwKICAgICBBU1NFUlQodGFibGUoKS0+Y29sbGFwc2VCb3JkZXJzKCkpOwog
ICAgIEhhc2hNYXA8cGFpcjxjb25zdCBSZW5kZXJUYWJsZUNlbGwqLCBpbnQ+LCBDb2xsYXBzZWRC
b3JkZXJWYWx1ZT46Oml0ZXJhdG9yIGl0ID0gbV9jZWxsc0NvbGxhcHNlZEJvcmRlcnMuZmluZCht
YWtlX3BhaXIoY2VsbCwgc2lkZSkpOwogICAgIEFTU0VSVChpdCAhPSBtX2NlbGxzQ29sbGFwc2Vk
Qm9yZGVycy5lbmQoKSk7Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgcmV0dXJuIGl0LT52
YWx1ZTsKIH0KIAogUmVuZGVyVGFibGVTZWN0aW9uKiBSZW5kZXJUYWJsZVNlY3Rpb246OmNyZWF0
ZUFub255bW91c1dpdGhQYXJlbnRSZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QqIHBhcmVudCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbSBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQppbmRleCAwYmM5ODA0
ZmI3NTliMTFlZDk2YTQwOTEwNmEwMTE2Nzk4YzIwNGJlLi42NDA0ZDJhZmMxNDZlODE1NTgwNWI5
ZWFlODA4NGIyYTQwYjgxZjM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWVNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lTWFjLm1tCkBAIC0zODAsNyArMzgwLDcgQEAgQ29sb3IgUmVuZGVyVGhlbWVNYWM6OnN5c3Rl
bUNvbG9yKGludCBjc3NWYWx1ZUlkKSBjb25zdAogICAgIHsKICAgICAgICAgSGFzaE1hcDxpbnQs
IFJHQkEzMj46Oml0ZXJhdG9yIGl0ID0gbV9zeXN0ZW1Db2xvckNhY2hlLmZpbmQoY3NzVmFsdWVJ
ZCk7CiAgICAgICAgIGlmIChpdCAhPSBtX3N5c3RlbUNvbG9yQ2FjaGUuZW5kKCkpCi0gICAgICAg
ICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIHJldHVybiBpdC0+dmFsdWU7CiAg
ICAgfQogCiAgICAgQ29sb3IgY29sb3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmll
dy5jcHAKaW5kZXggOGNjMzRhMzMwZGM4ODI1NmQ1NTE4MGUwYjU1YjM0NDg3Zjc4ZWNiNS4uOGZk
Yzk0YmZjZDQ2MzdmOTQ3OWM5Y2VlZGEzMDcyNTczMTAwZjMzMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJWaWV3LmNwcApAQCAtNDM4LDcgKzQzOCw3IEBAIEludFJlY3QgUmVuZGVy
Vmlldzo6c2VsZWN0aW9uQm91bmRzKGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRlbnQpIGNvbnN0CiAg
ICAgICAgICAgICBzZWxlY3RlZE9iamVjdHMuc2V0KG9zLCBhZG9wdFB0cihuZXcgUmVuZGVyU2Vs
ZWN0aW9uSW5mbyhvcywgY2xpcFRvVmlzaWJsZUNvbnRlbnQpKSk7CiAgICAgICAgICAgICBSZW5k
ZXJCbG9jayogY2IgPSBvcy0+Y29udGFpbmluZ0Jsb2NrKCk7CiAgICAgICAgICAgICB3aGlsZSAo
Y2IgJiYgIWNiLT5pc1JlbmRlclZpZXcoKSkgewotICAgICAgICAgICAgICAgIE93blB0cjxSZW5k
ZXJTZWxlY3Rpb25JbmZvPiYgYmxvY2tJbmZvID0gc2VsZWN0ZWRPYmplY3RzLmFkZChjYiwgbnVs
bHB0cikuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgICAgICAgICBPd25QdHI8UmVuZGVyU2Vs
ZWN0aW9uSW5mbz4mIGJsb2NrSW5mbyA9IHNlbGVjdGVkT2JqZWN0cy5hZGQoY2IsIG51bGxwdHIp
Lml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgICAgICAgICBpZiAoYmxvY2tJbmZvKQogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBibG9ja0luZm8gPSBhZG9wdFB0
cihuZXcgUmVuZGVyU2VsZWN0aW9uSW5mbyhjYiwgY2xpcFRvVmlzaWJsZUNvbnRlbnQpKTsKQEAg
LTQ1Myw3ICs0NTMsNyBAQCBJbnRSZWN0IFJlbmRlclZpZXc6OnNlbGVjdGlvbkJvdW5kcyhib29s
IGNsaXBUb1Zpc2libGVDb250ZW50KSBjb25zdAogICAgIExheW91dFJlY3Qgc2VsUmVjdDsKICAg
ICBTZWxlY3Rpb25NYXA6Oml0ZXJhdG9yIGVuZCA9IHNlbGVjdGVkT2JqZWN0cy5lbmQoKTsKICAg
ICBmb3IgKFNlbGVjdGlvbk1hcDo6aXRlcmF0b3IgaSA9IHNlbGVjdGVkT2JqZWN0cy5iZWdpbigp
OyBpICE9IGVuZDsgKytpKSB7Ci0gICAgICAgIFJlbmRlclNlbGVjdGlvbkluZm8qIGluZm8gPSBp
LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIFJlbmRlclNlbGVjdGlvbkluZm8qIGluZm8gPSBpLT52
YWx1ZS5nZXQoKTsKICAgICAgICAgLy8gUmVuZGVyU2VsZWN0aW9uSW5mbzo6cmVjdCgpIGlzIGlu
IHRoZSBjb29yZGluYXRlcyBvZiB0aGUgcmVwYWludENvbnRhaW5lciwgc28gbWFwIHRvIHBhZ2Ug
Y29vcmRpbmF0ZXMuCiAgICAgICAgIExheW91dFJlY3QgY3VyclJlY3QgPSBpbmZvLT5yZWN0KCk7
CiAgICAgICAgIGlmIChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciA9IGlu
Zm8tPnJlcGFpbnRDb250YWluZXIoKSkgewpAQCAtNTE4LDcgKzUxOCw3IEBAIHZvaWQgUmVuZGVy
Vmlldzo6c2V0U2VsZWN0aW9uKFJlbmRlck9iamVjdCogc3RhcnQsIGludCBzdGFydFBvcywgUmVu
ZGVyT2JqZWN0KiBlCiAgICAgICAgICAgICBpZiAoYmxvY2tSZXBhaW50TW9kZSA9PSBSZXBhaW50
TmV3WE9ST2xkKSB7CiAgICAgICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGNiID0gb3MtPmNvbnRh
aW5pbmdCbG9jaygpOwogICAgICAgICAgICAgICAgIHdoaWxlIChjYiAmJiAhY2ItPmlzUmVuZGVy
VmlldygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIE93blB0cjxSZW5kZXJCbG9ja1NlbGVjdGlv
bkluZm8+JiBibG9ja0luZm8gPSBvbGRTZWxlY3RlZEJsb2Nrcy5hZGQoY2IsIG51bGxwdHIpLml0
ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgICAgICAgICAgICAgIE93blB0cjxSZW5kZXJCbG9ja1Nl
bGVjdGlvbkluZm8+JiBibG9ja0luZm8gPSBvbGRTZWxlY3RlZEJsb2Nrcy5hZGQoY2IsIG51bGxw
dHIpLml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGJsb2NrSW5mbykK
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBibG9j
a0luZm8gPSBhZG9wdFB0cihuZXcgUmVuZGVyQmxvY2tTZWxlY3Rpb25JbmZvKGNiKSk7CkBAIC01
MzMsNyArNTMzLDcgQEAgdm9pZCBSZW5kZXJWaWV3OjpzZXRTZWxlY3Rpb24oUmVuZGVyT2JqZWN0
KiBzdGFydCwgaW50IHN0YXJ0UG9zLCBSZW5kZXJPYmplY3QqIGUKICAgICAvLyBOb3cgY2xlYXIg
dGhlIHNlbGVjdGlvbi4KICAgICBTZWxlY3RlZE9iamVjdE1hcDo6aXRlcmF0b3Igb2xkT2JqZWN0
c0VuZCA9IG9sZFNlbGVjdGVkT2JqZWN0cy5lbmQoKTsKICAgICBmb3IgKFNlbGVjdGVkT2JqZWN0
TWFwOjppdGVyYXRvciBpID0gb2xkU2VsZWN0ZWRPYmplY3RzLmJlZ2luKCk7IGkgIT0gb2xkT2Jq
ZWN0c0VuZDsgKytpKQotICAgICAgICBpLT5maXJzdC0+c2V0U2VsZWN0aW9uU3RhdGVJZk5lZWRl
ZChTZWxlY3Rpb25Ob25lKTsKKyAgICAgICAgaS0+a2V5LT5zZXRTZWxlY3Rpb25TdGF0ZUlmTmVl
ZGVkKFNlbGVjdGlvbk5vbmUpOwogCiAgICAgLy8gc2V0IHNlbGVjdGlvbiBzdGFydCBhbmQgZW5k
CiAgICAgbV9zZWxlY3Rpb25TdGFydCA9IHN0YXJ0OwpAQCAtNTcxLDcgKzU3MSw3IEBAIHZvaWQg
UmVuZGVyVmlldzo6c2V0U2VsZWN0aW9uKFJlbmRlck9iamVjdCogc3RhcnQsIGludCBzdGFydFBv
cywgUmVuZGVyT2JqZWN0KiBlCiAgICAgICAgICAgICBuZXdTZWxlY3RlZE9iamVjdHMuc2V0KG8s
IGFkb3B0UHRyKG5ldyBSZW5kZXJTZWxlY3Rpb25JbmZvKG8sIHRydWUpKSk7CiAgICAgICAgICAg
ICBSZW5kZXJCbG9jayogY2IgPSBvLT5jb250YWluaW5nQmxvY2soKTsKICAgICAgICAgICAgIHdo
aWxlIChjYiAmJiAhY2ItPmlzUmVuZGVyVmlldygpKSB7Ci0gICAgICAgICAgICAgICAgT3duUHRy
PFJlbmRlckJsb2NrU2VsZWN0aW9uSW5mbz4mIGJsb2NrSW5mbyA9IG5ld1NlbGVjdGVkQmxvY2tz
LmFkZChjYiwgbnVsbHB0cikuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgICAgICAgICBPd25Q
dHI8UmVuZGVyQmxvY2tTZWxlY3Rpb25JbmZvPiYgYmxvY2tJbmZvID0gbmV3U2VsZWN0ZWRCbG9j
a3MuYWRkKGNiLCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgICAgICAgICAgaWYg
KGJsb2NrSW5mbykKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
YmxvY2tJbmZvID0gYWRvcHRQdHIobmV3IFJlbmRlckJsb2NrU2VsZWN0aW9uSW5mbyhjYikpOwpA
QCAtNTg5LDkgKzU4OSw5IEBAIHZvaWQgUmVuZGVyVmlldzo6c2V0U2VsZWN0aW9uKFJlbmRlck9i
amVjdCogc3RhcnQsIGludCBzdGFydFBvcywgUmVuZGVyT2JqZWN0KiBlCiAKICAgICAvLyBIYXZl
IGFueSBvZiB0aGUgb2xkIHNlbGVjdGVkIG9iamVjdHMgY2hhbmdlZCBjb21wYXJlZCB0byB0aGUg
bmV3IHNlbGVjdGlvbj8KICAgICBmb3IgKFNlbGVjdGVkT2JqZWN0TWFwOjppdGVyYXRvciBpID0g
b2xkU2VsZWN0ZWRPYmplY3RzLmJlZ2luKCk7IGkgIT0gb2xkT2JqZWN0c0VuZDsgKytpKSB7Ci0g
ICAgICAgIFJlbmRlck9iamVjdCogb2JqID0gaS0+Zmlyc3Q7CisgICAgICAgIFJlbmRlck9iamVj
dCogb2JqID0gaS0+a2V5OwogICAgICAgICBSZW5kZXJTZWxlY3Rpb25JbmZvKiBuZXdJbmZvID0g
bmV3U2VsZWN0ZWRPYmplY3RzLmdldChvYmopOwotICAgICAgICBSZW5kZXJTZWxlY3Rpb25JbmZv
KiBvbGRJbmZvID0gaS0+c2Vjb25kLmdldCgpOworICAgICAgICBSZW5kZXJTZWxlY3Rpb25JbmZv
KiBvbGRJbmZvID0gaS0+dmFsdWUuZ2V0KCk7CiAgICAgICAgIGlmICghbmV3SW5mbyB8fCBvbGRJ
bmZvLT5yZWN0KCkgIT0gbmV3SW5mby0+cmVjdCgpIHx8IG9sZEluZm8tPnN0YXRlKCkgIT0gbmV3
SW5mby0+c3RhdGUoKSB8fAogICAgICAgICAgICAgKG1fc2VsZWN0aW9uU3RhcnQgPT0gb2JqICYm
IG9sZFN0YXJ0UG9zICE9IG1fc2VsZWN0aW9uU3RhcnRQb3MpIHx8CiAgICAgICAgICAgICAobV9z
ZWxlY3Rpb25FbmQgPT0gb2JqICYmIG9sZEVuZFBvcyAhPSBtX3NlbGVjdGlvbkVuZFBvcykpIHsK
QEAgLTYwNiwxNCArNjA2LDE0IEBAIHZvaWQgUmVuZGVyVmlldzo6c2V0U2VsZWN0aW9uKFJlbmRl
ck9iamVjdCogc3RhcnQsIGludCBzdGFydFBvcywgUmVuZGVyT2JqZWN0KiBlCiAgICAgLy8gQW55
IG5ldyBvYmplY3RzIHRoYXQgcmVtYWluIHdlcmUgbm90IGZvdW5kIGluIHRoZSBvbGQgb2JqZWN0
cyBkaWN0LCBhbmQgc28gdGhleSBuZWVkIHRvIGJlIHVwZGF0ZWQuCiAgICAgU2VsZWN0ZWRPYmpl
Y3RNYXA6Oml0ZXJhdG9yIG5ld09iamVjdHNFbmQgPSBuZXdTZWxlY3RlZE9iamVjdHMuZW5kKCk7
CiAgICAgZm9yIChTZWxlY3RlZE9iamVjdE1hcDo6aXRlcmF0b3IgaSA9IG5ld1NlbGVjdGVkT2Jq
ZWN0cy5iZWdpbigpOyBpICE9IG5ld09iamVjdHNFbmQ7ICsraSkKLSAgICAgICAgaS0+c2Vjb25k
LT5yZXBhaW50KCk7CisgICAgICAgIGktPnZhbHVlLT5yZXBhaW50KCk7CiAKICAgICAvLyBIYXZl
IGFueSBvZiB0aGUgb2xkIGJsb2NrcyBjaGFuZ2VkPwogICAgIFNlbGVjdGVkQmxvY2tNYXA6Oml0
ZXJhdG9yIG9sZEJsb2Nrc0VuZCA9IG9sZFNlbGVjdGVkQmxvY2tzLmVuZCgpOwogICAgIGZvciAo
U2VsZWN0ZWRCbG9ja01hcDo6aXRlcmF0b3IgaSA9IG9sZFNlbGVjdGVkQmxvY2tzLmJlZ2luKCk7
IGkgIT0gb2xkQmxvY2tzRW5kOyArK2kpIHsKLSAgICAgICAgUmVuZGVyQmxvY2sqIGJsb2NrID0g
aS0+Zmlyc3Q7CisgICAgICAgIFJlbmRlckJsb2NrKiBibG9jayA9IGktPmtleTsKICAgICAgICAg
UmVuZGVyQmxvY2tTZWxlY3Rpb25JbmZvKiBuZXdJbmZvID0gbmV3U2VsZWN0ZWRCbG9ja3MuZ2V0
KGJsb2NrKTsKLSAgICAgICAgUmVuZGVyQmxvY2tTZWxlY3Rpb25JbmZvKiBvbGRJbmZvID0gaS0+
c2Vjb25kLmdldCgpOworICAgICAgICBSZW5kZXJCbG9ja1NlbGVjdGlvbkluZm8qIG9sZEluZm8g
PSBpLT52YWx1ZS5nZXQoKTsKICAgICAgICAgaWYgKCFuZXdJbmZvIHx8IG9sZEluZm8tPnJlY3Rz
KCkgIT0gbmV3SW5mby0+cmVjdHMoKSB8fCBvbGRJbmZvLT5zdGF0ZSgpICE9IG5ld0luZm8tPnN0
YXRlKCkpIHsKICAgICAgICAgICAgIG9sZEluZm8tPnJlcGFpbnQoKTsKICAgICAgICAgICAgIGlm
IChuZXdJbmZvKSB7CkBAIC02MjYsNyArNjI2LDcgQEAgdm9pZCBSZW5kZXJWaWV3OjpzZXRTZWxl
Y3Rpb24oUmVuZGVyT2JqZWN0KiBzdGFydCwgaW50IHN0YXJ0UG9zLCBSZW5kZXJPYmplY3QqIGUK
ICAgICAvLyBBbnkgbmV3IGJsb2NrcyB0aGF0IHJlbWFpbiB3ZXJlIG5vdCBmb3VuZCBpbiB0aGUg
b2xkIGJsb2NrcyBkaWN0LCBhbmQgc28gdGhleSBuZWVkIHRvIGJlIHVwZGF0ZWQuCiAgICAgU2Vs
ZWN0ZWRCbG9ja01hcDo6aXRlcmF0b3IgbmV3QmxvY2tzRW5kID0gbmV3U2VsZWN0ZWRCbG9ja3Mu
ZW5kKCk7CiAgICAgZm9yIChTZWxlY3RlZEJsb2NrTWFwOjppdGVyYXRvciBpID0gbmV3U2VsZWN0
ZWRCbG9ja3MuYmVnaW4oKTsgaSAhPSBuZXdCbG9ja3NFbmQ7ICsraSkKLSAgICAgICAgaS0+c2Vj
b25kLT5yZXBhaW50KCk7CisgICAgICAgIGktPnZhbHVlLT5yZXBhaW50KCk7CiAKICAgICBtX2Zy
YW1lVmlldy0+ZW5kRGVmZXJyZWRSZXBhaW50cygpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyV2lkZ2V0LmNwcAppbmRleCBmYzRmMmYzNWEzZTc3MGQwNGFjNGM2Y2IyMGEzMzEy
NDgxM2ZkOGI3Li41YmJmZmU0YmVhNzY2YjdkNjIzY2I4NmMxMWY5M2E4ZWNhMzcyZTg1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcApAQCAtNzAsOSArNzAsOSBA
QCB2b2lkIFJlbmRlcldpZGdldDo6cmVzdW1lV2lkZ2V0SGllcmFyY2h5VXBkYXRlcygpCiAgICAg
ICAgIHdpZGdldE5ld1BhcmVudE1hcCgpLmNsZWFyKCk7CiAgICAgICAgIFdpZGdldFRvUGFyZW50
TWFwOjppdGVyYXRvciBlbmQgPSBtYXAuZW5kKCk7CiAgICAgICAgIGZvciAoV2lkZ2V0VG9QYXJl
bnRNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAg
ICAgICAgICAgV2lkZ2V0KiBjaGlsZCA9IGl0LT5maXJzdC5nZXQoKTsKKyAgICAgICAgICAgIFdp
ZGdldCogY2hpbGQgPSBpdC0+a2V5LmdldCgpOwogICAgICAgICAgICAgU2Nyb2xsVmlldyogY3Vy
cmVudFBhcmVudCA9IGNoaWxkLT5wYXJlbnQoKTsKLSAgICAgICAgICAgIEZyYW1lVmlldyogbmV3
UGFyZW50ID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIEZyYW1lVmlldyogbmV3UGFyZW50ID0g
aXQtPnZhbHVlOwogICAgICAgICAgICAgaWYgKG5ld1BhcmVudCAhPSBjdXJyZW50UGFyZW50KSB7
CiAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRQYXJlbnQpCiAgICAgICAgICAgICAgICAgICAg
IGN1cnJlbnRQYXJlbnQtPnJlbW92ZUNoaWxkKGNoaWxkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9Sb290SW5saW5lQm94LmNwcAppbmRleCA0MzEzZmE3MzVhMTZhYzY5YjkxNWMxMmUwYTMz
ZTJlYTU5YTY0NDJkLi4yYzE4MmUxZDdmYThlZWEzNjc2YmViYmQ4MWJlMTFiNWMzNGIzNmFhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCkBAIC03NTUsOCAr
NzU1LDggQEAgdm9pZCBSb290SW5saW5lQm94Ojphc2NlbnRBbmREZXNjZW50Rm9yQm94KElubGlu
ZUJveCogYm94LCBHbHlwaE92ZXJmbG93QW5kRmFsbGIKICAgICBHbHlwaE92ZXJmbG93KiBnbHlw
aE92ZXJmbG93ID0gMDsKICAgICBpZiAoYm94LT5pc1RleHQoKSkgewogICAgICAgICBHbHlwaE92
ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcDo6aXRlcmF0b3IgaXQgPSB0ZXh0Qm94RGF0YU1hcC5m
aW5kKHRvSW5saW5lVGV4dEJveChib3gpKTsKLSAgICAgICAgdXNlZEZvbnRzID0gaXQgPT0gdGV4
dEJveERhdGFNYXAuZW5kKCkgPyAwIDogJml0LT5zZWNvbmQuZmlyc3Q7Ci0gICAgICAgIGdseXBo
T3ZlcmZsb3cgPSBpdCA9PSB0ZXh0Qm94RGF0YU1hcC5lbmQoKSA/IDAgOiAmaXQtPnNlY29uZC5z
ZWNvbmQ7CisgICAgICAgIHVzZWRGb250cyA9IGl0ID09IHRleHRCb3hEYXRhTWFwLmVuZCgpID8g
MCA6ICZpdC0+dmFsdWUuZmlyc3Q7CisgICAgICAgIGdseXBoT3ZlcmZsb3cgPSBpdCA9PSB0ZXh0
Qm94RGF0YU1hcC5lbmQoKSA/IDAgOiAmaXQtPnZhbHVlLnNlY29uZDsKICAgICB9CiAgICAgICAg
IAogICAgIGJvb2wgaW5jbHVkZUxlYWRpbmcgPSBpbmNsdWRlTGVhZGluZ0ZvckJveChib3gpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1ZlcnRpY2FsUG9zaXRpb25DYWNo
ZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1ZlcnRpY2FsUG9zaXRpb25DYWNoZS5oCmlu
ZGV4IGJiMzk4Nzc3MjFkYTcwNWMzN2JkM2I4ODE5MDI0Y2QyN2UzNmU1Y2UuLmI3Y2Q3ZTA4NWU3
ZjliZWRiNTI4ZjYyZGVlZjU3YTdiYjhhYTViZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9WZXJ0aWNhbFBvc2l0aW9uQ2FjaGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvVmVydGljYWxQb3NpdGlvbkNhY2hlLmgKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGlj
OgogICAgICAgICBjb25zdCBIYXNoTWFwPFJlbmRlck9iamVjdCosIGludD46OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbWFwVG9DaGVjay5maW5kKHJlbmRlcmVyKTsKICAgICAgICAgaWYgKGl0ID09IG1h
cFRvQ2hlY2suZW5kKCkpCiAgICAgICAgICAgICByZXR1cm4gUG9zaXRpb25VbmRlZmluZWQ7Ci0g
ICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwogICAg
IH0KICAgICAKICAgICB2b2lkIHNldChSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBGb250QmFzZWxp
bmUgYmFzZWxpbmVUeXBlLCBpbnQgcG9zaXRpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvV3JhcFNoYXBlSW5mby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
V3JhcFNoYXBlSW5mby5jcHAKaW5kZXggMTU0NzA2NmIyOWRkNGE3M2Q5OGZhYjMzMTZjNmQwMjNl
ODZlMDUxMC4uYWJkMzU1ZWI0MTkwMjU5ZjA2YmFiNzlmOWVjMTBhZDM3YTlmMjdiYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1dyYXBTaGFwZUluZm8uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9XcmFwU2hhcGVJbmZvLmNwcApAQCAtNjAsNyArNjAsNyBA
QCBXcmFwU2hhcGVJbmZvOjp+V3JhcFNoYXBlSW5mbygpCiBXcmFwU2hhcGVJbmZvKiBXcmFwU2hh
cGVJbmZvOjplbnN1cmVXcmFwU2hhcGVJbmZvRm9yUmVuZGVyQmxvY2soUmVuZGVyQmxvY2sqIGJs
b2NrKQogewogICAgIFdyYXBTaGFwZUluZm9NYXA6OkFkZFJlc3VsdCByZXN1bHQgPSB3cmFwU2hh
cGVJbmZvTWFwKCkuYWRkKGJsb2NrLCBjcmVhdGUoYmxvY2spKTsKLSAgICByZXR1cm4gcmVzdWx0
Lml0ZXJhdG9yLT5zZWNvbmQuZ2V0KCk7CisgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFs
dWUuZ2V0KCk7CiB9CiAKIFdyYXBTaGFwZUluZm8qIFdyYXBTaGFwZUluZm86OndyYXBTaGFwZUlu
Zm9Gb3JSZW5kZXJCbG9jayhjb25zdCBSZW5kZXJCbG9jayogYmxvY2spCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAppbmRleCA0
NTRmN2FhNmQwN2I2YmQzMTIzMjM2YmVmY2E0OTllY2ZlNWEwN2EwLi4yMzcxZDFhYmY5Yzk2YmE0
YTQ2MjhiOTNjYTQ5NDJhZjdhMDdiOTVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAKQEAgLTE1OCw3ICsxNTgsNyBAQCBi
b29sIFJlbmRlclNWR0lubGluZVRleHQ6OmNoYXJhY3RlclN0YXJ0c05ld1RleHRDaHVuayhpbnQg
cG9zaXRpb24pIGNvbnN0CiAgICAgaWYgKGl0ID09IG1fbGF5b3V0QXR0cmlidXRlcy5jaGFyYWN0
ZXJEYXRhTWFwKCkuZW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBp
dC0+c2Vjb25kLnggIT0gU1ZHVGV4dExheW91dEF0dHJpYnV0ZXM6OmVtcHR5VmFsdWUoKSB8fCBp
dC0+c2Vjb25kLnkgIT0gU1ZHVGV4dExheW91dEF0dHJpYnV0ZXM6OmVtcHR5VmFsdWUoKTsKKyAg
ICByZXR1cm4gaXQtPnZhbHVlLnggIT0gU1ZHVGV4dExheW91dEF0dHJpYnV0ZXM6OmVtcHR5VmFs
dWUoKSB8fCBpdC0+dmFsdWUueSAhPSBTVkdUZXh0TGF5b3V0QXR0cmlidXRlczo6ZW1wdHlWYWx1
ZSgpOwogfQogCiBWaXNpYmxlUG9zaXRpb24gUmVuZGVyU1ZHSW5saW5lVGV4dDo6cG9zaXRpb25G
b3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCmluZGV4IGVl
NmE0OWRiODhhOWZkNmM3NzA1ZmExOGI2ZWVjYTg4MTZlMWEyZWIuLjM4MzJiMmIwMWUzMDUwYTVm
ODQzYzY1ZjFjZGRjYjBlYzE1M2E5NjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCkBAIC0zMzgsNyArMzM4
LDcgQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cHJpbWl0aXZlQXR0cmlidXRlQ2hh
bmdlZChSZW5kZXJPYmplY3QqIG9iamVjdCwgY28KICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFu
ZGFyZEF0dHJpYnV0ZXMqIHByaW1pdHZlID0gc3RhdGljX2Nhc3Q8U1ZHRmlsdGVyUHJpbWl0aXZl
U3RhbmRhcmRBdHRyaWJ1dGVzKj4ob2JqZWN0LT5ub2RlKCkpOwogCiAgICAgZm9yICg7IGl0ICE9
IGVuZDsgKytpdCkgewotICAgICAgICBGaWx0ZXJEYXRhKiBmaWx0ZXJEYXRhID0gaXQtPnNlY29u
ZDsKKyAgICAgICAgRmlsdGVyRGF0YSogZmlsdGVyRGF0YSA9IGl0LT52YWx1ZTsKICAgICAgICAg
aWYgKCFmaWx0ZXJEYXRhLT5idWlsZGVkKQogICAgICAgICAgICAgY29udGludWU7CiAKQEAgLTM1
Myw3ICszNTMsNyBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwcmltaXRpdmVBdHRy
aWJ1dGVDaGFuZ2VkKFJlbmRlck9iamVjdCogb2JqZWN0LCBjbwogICAgICAgICBidWlsZGVyLT5j
bGVhclJlc3VsdHNSZWN1cnNpdmUoZWZmZWN0KTsKIAogICAgICAgICAvLyBSZXBhaW50IHRoZSBp
bWFnZSBvbiB0aGUgc2NyZWVuLgotICAgICAgICBtYXJrQ2xpZW50Rm9ySW52YWxpZGF0aW9uKGl0
LT5maXJzdCwgUmVwYWludEludmFsaWRhdGlvbik7CisgICAgICAgIG1hcmtDbGllbnRGb3JJbnZh
bGlkYXRpb24oaXQtPmtleSwgUmVwYWludEludmFsaWRhdGlvbik7CiAgICAgfQogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3Jh
ZGllbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZUdyYWRpZW50LmNwcAppbmRleCA1OGUwMDc5YjIyY2IyYzVjMTdkOGYyZDRkNzNjYmJhMjEwYWE5
YTVlLi4zMGNlMWI4Y2I0Zjk3OGMwMGRjYmRhMTdkZmI1NTcyM2NmYzU4MDgxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VH
cmFkaWVudC5jcHAKQEAgLTE0MCw3ICsxNDAsNyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlR3Jh
ZGllbnQ6OmFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiBvYmplY3QsIFJlbmRlclN0eWxlKgog
ICAgIGlmIChncmFkaWVudFVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09C
SkVDVEJPVU5ESU5HQk9YICYmIG9iamVjdEJvdW5kaW5nQm94LmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgT3duUHRyPEdyYWRpZW50RGF0YT4mIGdyYWRpZW50RGF0YSA9
IG1fZ3JhZGllbnRNYXAuYWRkKG9iamVjdCwgbnVsbHB0cikuaXRlcmF0b3ItPnNlY29uZDsKKyAg
ICBPd25QdHI8R3JhZGllbnREYXRhPiYgZ3JhZGllbnREYXRhID0gbV9ncmFkaWVudE1hcC5hZGQo
b2JqZWN0LCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCFncmFkaWVudERhdGEp
CiAgICAgICAgIGdyYWRpZW50RGF0YSA9IGFkb3B0UHRyKG5ldyBHcmFkaWVudERhdGEpOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
UGF0dGVybi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlUGF0dGVybi5jcHAKaW5kZXggYjRhZjk5OTE4NTUyYTE1NDg1MmJiMmE0YjQ3YjAzMGVkYTZh
NTMxNi4uM2ExODgyYWNmODIxNzIyODZiMjNiYjU0MmJlNDA2NmEzYmFjY2NjNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQ
YXR0ZXJuLmNwcApAQCAtODQsNyArODQsNyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlUGF0dGVy
bjo6YXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqIG9iamVjdCwgUmVuZGVyU3R5bGUqCiAgICAg
aWYgKG1fYXR0cmlidXRlcy5wYXR0ZXJuVW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6OlNWR19VTklU
X1RZUEVfT0JKRUNUQk9VTkRJTkdCT1ggJiYgb2JqZWN0Qm91bmRpbmdCb3guaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBPd25QdHI8UGF0dGVybkRhdGE+JiBwYXR0ZXJu
RGF0YSA9IG1fcGF0dGVybk1hcC5hZGQob2JqZWN0LCBudWxscHRyKS5pdGVyYXRvci0+c2Vjb25k
OworICAgIE93blB0cjxQYXR0ZXJuRGF0YT4mIHBhdHRlcm5EYXRhID0gbV9wYXR0ZXJuTWFwLmFk
ZChvYmplY3QsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoIXBhdHRlcm5EYXRh
KQogICAgICAgICBwYXR0ZXJuRGF0YSA9IGFkb3B0UHRyKG5ldyBQYXR0ZXJuRGF0YSk7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzQ2FjaGUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXNDYWNoZS5jcHAK
aW5kZXggMjk3YzA3YjZhZDQwOWEyN2U2MzU4NTYwMDBjOWFkNGI5MDViNDM1NC4uOGI0OGNmNTNl
Nzk5YTBiN2RlMmI1NGE0YzcxNTJlMDkyNzUzOWMwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXNDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXNDYWNoZS5jcHAKQEAgLTE5OCwxMSArMTk4LDEx
IEBAIHZvaWQgU1ZHUmVzb3VyY2VzQ2FjaGU6OnJlc291cmNlRGVzdHJveWVkKFJlbmRlclNWR1Jl
c291cmNlQ29udGFpbmVyKiByZXNvdXJjZSkKIAogICAgIEhhc2hNYXA8Y29uc3QgUmVuZGVyT2Jq
ZWN0KiwgU1ZHUmVzb3VyY2VzKj46Oml0ZXJhdG9yIGVuZCA9IGNhY2hlLT5tX2NhY2hlLmVuZCgp
OwogICAgIGZvciAoSGFzaE1hcDxjb25zdCBSZW5kZXJPYmplY3QqLCBTVkdSZXNvdXJjZXMqPjo6
aXRlcmF0b3IgaXQgPSBjYWNoZS0+bV9jYWNoZS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
LSAgICAgICAgaXQtPnNlY29uZC0+cmVzb3VyY2VEZXN0cm95ZWQocmVzb3VyY2UpOworICAgICAg
ICBpdC0+dmFsdWUtPnJlc291cmNlRGVzdHJveWVkKHJlc291cmNlKTsKIAogICAgICAgICAvLyBN
YXJrIHVzZXJzIG9mIGRlc3Ryb3llZCByZXNvdXJjZXMgYXMgcGVuZGluZyByZXNvbHV0aW9uIGJh
c2VkIG9uIHRoZSBpZCBvZiB0aGUgb2xkIHJlc291cmNlLgogICAgICAgICBFbGVtZW50KiByZXNv
dXJjZUVsZW1lbnQgPSB0b0VsZW1lbnQocmVzb3VyY2UtPm5vZGUoKSk7Ci0gICAgICAgIFNWR1N0
eWxlZEVsZW1lbnQqIGNsaWVudEVsZW1lbnQgPSB0b1NWR1N0eWxlZEVsZW1lbnQoaXQtPmZpcnN0
LT5ub2RlKCkpOworICAgICAgICBTVkdTdHlsZWRFbGVtZW50KiBjbGllbnRFbGVtZW50ID0gdG9T
VkdTdHlsZWRFbGVtZW50KGl0LT5rZXktPm5vZGUoKSk7CiAgICAgICAgIFNWR0RvY3VtZW50RXh0
ZW5zaW9ucyogZXh0ZW5zaW9ucyA9IGNsaWVudEVsZW1lbnQtPmRvY3VtZW50KCktPmFjY2Vzc1NW
R0V4dGVuc2lvbnMoKTsKIAogICAgICAgICBleHRlbnNpb25zLT5hZGRQZW5kaW5nUmVzb3VyY2Uo
cmVzb3VyY2VFbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKEhUTUxOYW1lczo6aWRBdHRyKSwgY2xp
ZW50RWxlbWVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1Jvb3RJbmxpbmVCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSb290
SW5saW5lQm94LmNwcAppbmRleCAzNGU5M2EwMmVmNzQzMmUzYzI2ZWYyMzYwZDFjZjNmZDQzN2U0
MTZlLi41NDZmZWMyNmNlNjk4MWFjZDFmY2Q3YWJlMGEwYTk4MzhjNzBiNDNjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jvb3RJbmxpbmVCb3guY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUm9vdElubGluZUJveC5jcHAKQEAgLTIy
NiwxNyArMjI2LDE3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzd2FwSXRlbXNJbkxheW91dEF0dHJp
YnV0ZXMoU1ZHVGV4dExheW91dEF0dHJpYnV0ZXMqIGZpcnN0QXR0CiAgICAgICAgIHJldHVybjsK
IAogICAgIGlmIChmaXJzdFByZXNlbnQgJiYgbGFzdFByZXNlbnQpIHsKLSAgICAgICAgc3RkOjpz
d2FwKGl0Rmlyc3QtPnNlY29uZCwgaXRMYXN0LT5zZWNvbmQpOworICAgICAgICBzdGQ6OnN3YXAo
aXRGaXJzdC0+dmFsdWUsIGl0TGFzdC0+dmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CiAgICAgaWYgKGZpcnN0UHJlc2VudCAmJiAhbGFzdFByZXNlbnQpIHsKLSAgICAgICAgbGFzdEF0
dHJpYnV0ZXMtPmNoYXJhY3RlckRhdGFNYXAoKS5zZXQobGFzdFBvc2l0aW9uICsgMSwgaXRGaXJz
dC0+c2Vjb25kKTsKKyAgICAgICAgbGFzdEF0dHJpYnV0ZXMtPmNoYXJhY3RlckRhdGFNYXAoKS5z
ZXQobGFzdFBvc2l0aW9uICsgMSwgaXRGaXJzdC0+dmFsdWUpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCiAgICAgLy8gIWZpcnN0UHJlc2VudCAmJiBsYXN0UHJlc2VudAotICAgIGZpcnN0QXR0
cmlidXRlcy0+Y2hhcmFjdGVyRGF0YU1hcCgpLnNldChmaXJzdFBvc2l0aW9uICsgMSwgaXRMYXN0
LT5zZWNvbmQpOworICAgIGZpcnN0QXR0cmlidXRlcy0+Y2hhcmFjdGVyRGF0YU1hcCgpLnNldChm
aXJzdFBvc2l0aW9uICsgMSwgaXRMYXN0LT52YWx1ZSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9p
ZCBmaW5kRmlyc3RBbmRMYXN0QXR0cmlidXRlc0luVmVjdG9yKFZlY3RvcjxTVkdUZXh0TGF5b3V0
QXR0cmlidXRlcyo+JiBhdHRyaWJ1dGVzLCBSZW5kZXJTVkdJbmxpbmVUZXh0KiBmaXJzdENvbnRl
eHQsIFJlbmRlclNWR0lubGluZVRleHQqIGxhc3RDb250ZXh0LApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRlcy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1dGVzLmNwcAppbmRl
eCBhOTI1OTZjZWVlZGJlMjVhZjc3N2RmNGE0YzgzY2QzZWY5N2I5Y2U4Li42N2ZhMGZhOTgyYWQ2
MGJhNzI2NTFhODQ1NDk1ODFmN2ViNTBjZDBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1dGVzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1dGVzLmNwcApAQCAtNjIsOCAr
NjIsOCBAQCB2b2lkIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzOjpkdW1wKCkgY29uc3QKICAgICBm
cHJpbnRmKHN0ZGVyciwgImNvbnRleHQ6ICVwXG4iLCBtX2NvbnRleHQpOwogICAgIGNvbnN0IFNW
R0NoYXJhY3RlckRhdGFNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fY2hhcmFjdGVyRGF0YU1h
cC5lbmQoKTsKICAgICBmb3IgKFNWR0NoYXJhY3RlckRhdGFNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV9jaGFyYWN0ZXJEYXRhTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAg
ICBjb25zdCBTVkdDaGFyYWN0ZXJEYXRhJiBkYXRhID0gaXQtPnNlY29uZDsKLSAgICAgICAgZnBy
aW50ZihzdGRlcnIsICIgLS0tPiBwb3M9JWksIGRhdGE9eyIsIGl0LT5maXJzdCk7CisgICAgICAg
IGNvbnN0IFNWR0NoYXJhY3RlckRhdGEmIGRhdGEgPSBpdC0+dmFsdWU7CisgICAgICAgIGZwcmlu
dGYoc3RkZXJyLCAiIC0tLT4gcG9zPSVpLCBkYXRhPXsiLCBpdC0+a2V5KTsKICAgICAgICAgZHVt
cFNWR0NoYXJhY3RlckRhdGFNYXBWYWx1ZSgieCIsIGRhdGEueCk7CiAgICAgICAgIGR1bXBTVkdD
aGFyYWN0ZXJEYXRhTWFwVmFsdWUoInkiLCBkYXRhLnkpOwogICAgICAgICBkdW1wU1ZHQ2hhcmFj
dGVyRGF0YU1hcFZhbHVlKCJkeCIsIGRhdGEuZHgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXIu
Y3BwCmluZGV4IGJlMmExMmZlOTYwYjc5MjQ4MzEzZGYzNjk5MTQ1MDNmZWU5YTI5MWIuLmI5Njlh
NTMxOWU4MGFjNzg3MmE1ZTQxZDhkZTc3NDMwNDhiZGM0M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1dGVz
QnVpbGRlci5jcHAKQEAgLTE0OSw3ICsxNDksNyBAQCB2b2lkIFNWR1RleHRMYXlvdXRBdHRyaWJ1
dGVzQnVpbGRlcjo6YnVpbGRDaGFyYWN0ZXJEYXRhTWFwKFJlbmRlclNWR1RleHQqIHRleHRSbwog
ICAgICAgICBkYXRhLnkgPSAwOwogICAgICAgICBtX2NoYXJhY3RlckRhdGFNYXAuc2V0KDEsIGRh
dGEpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIFNWR0NoYXJhY3RlckRhdGEmIGRhdGEgPSBpdC0+
c2Vjb25kOworICAgICAgICBTVkdDaGFyYWN0ZXJEYXRhJiBkYXRhID0gaXQtPnZhbHVlOwogICAg
ICAgICBpZiAoZGF0YS54ID09IFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzOjplbXB0eVZhbHVlKCkp
CiAgICAgICAgICAgICBkYXRhLnggPSAwOwogICAgICAgICBpZiAoZGF0YS55ID09IFNWR1RleHRM
YXlvdXRBdHRyaWJ1dGVzOjplbXB0eVZhbHVlKCkpCkBAIC0yMTMsNyArMjEzLDcgQEAgdm9pZCBT
VkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXI6OmZpbGxDaGFyYWN0ZXJEYXRhTWFwKGNvbnN0
IFRleHRQb3NpdGlvbiYgcG8KICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAg
ICAgICAgdXBkYXRlQ2hhcmFjdGVyRGF0YShpLCBsYXN0Um90YXRpb24sIGl0LT5zZWNvbmQsIGxl
bmd0aENvbnRleHQsIHhMaXN0UHRyLCB5TGlzdFB0ciwgZHhMaXN0UHRyLCBkeUxpc3RQdHIsIHJv
dGF0ZUxpc3RQdHIpOworICAgICAgICB1cGRhdGVDaGFyYWN0ZXJEYXRhKGksIGxhc3RSb3RhdGlv
biwgaXQtPnZhbHVlLCBsZW5ndGhDb250ZXh0LCB4TGlzdFB0ciwgeUxpc3RQdHIsIGR4TGlzdFB0
ciwgZHlMaXN0UHRyLCByb3RhdGVMaXN0UHRyKTsKICAgICB9CiAKICAgICAvLyBUaGUgbGFzdCBy
b3RhdGlvbiB2YWx1ZSBhbHdheXMgc3BhbnMgdGhlIHdob2xlIHNjb3BlLgpAQCAtMjI5LDcgKzIy
OSw3IEBAIHZvaWQgU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyOjpmaWxsQ2hhcmFjdGVy
RGF0YU1hcChjb25zdCBUZXh0UG9zaXRpb24mIHBvCiAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgfQogCi0gICAgICAgIGl0LT5zZWNvbmQucm90YXRlID0gbGFzdFJvdGF0aW9uOworICAg
ICAgICBpdC0+dmFsdWUucm90YXRlID0gbGFzdFJvdGF0aW9uOwogICAgIH0KIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZS5jcHAK
aW5kZXggNWM1NDliMjFjODc1MjA4NDcyNDZhZjI1NGZkMDU5ZjJlM2I5YjVlOC4uYmEyYjc2Mzlk
M2Y5NWI3Mzg5NDc1ZmEyZGMwMGM5YTZhYTg1YjMxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmUuY3BwCkBAIC00NzUsNyArNDc1
LDcgQEAgdm9pZCBTVkdUZXh0TGF5b3V0RW5naW5lOjpsYXlvdXRUZXh0T25MaW5lT3JQYXRoKFNW
R0lubGluZVRleHRCb3gqIHRleHRCb3gsIFJlbmQKICAgICAgICAgU1ZHQ2hhcmFjdGVyRGF0YSBk
YXRhOwogICAgICAgICBTVkdDaGFyYWN0ZXJEYXRhTWFwOjppdGVyYXRvciBpdCA9IGNoYXJhY3Rl
ckRhdGFNYXAuZmluZChtX2xvZ2ljYWxDaGFyYWN0ZXJPZmZzZXQgKyAxKTsKICAgICAgICAgaWYg
KGl0ICE9IGNoYXJhY3RlckRhdGFNYXAuZW5kKCkpCi0gICAgICAgICAgICBkYXRhID0gaXQtPnNl
Y29uZDsKKyAgICAgICAgICAgIGRhdGEgPSBpdC0+dmFsdWU7CiAKICAgICAgICAgZmxvYXQgeCA9
IGRhdGEueDsKICAgICAgICAgZmxvYXQgeSA9IGRhdGEueTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3NCdWlsZGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3NCdWlsZGVyLmNwcAppbmRleCA1YWM4
NWNiYmU4NDc3MTBmZDVhZTFlMjJmZjNmMzM2MjExNmE4NWMyLi4wNWQ4MDVmNzdmMmY5ZDI5MDAy
NjFiMGI2MGNhNjg2ZTFlYTBjYmExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1RleHRNZXRyaWNzQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljc0J1aWxkZXIuY3BwCkBAIC0xNjEsNyArMTYxLDcgQEAg
dm9pZCBTVkdUZXh0TWV0cmljc0J1aWxkZXI6Om1lYXN1cmVUZXh0UmVuZGVyZXIoUmVuZGVyU1ZH
SW5saW5lVGV4dCogdGV4dCwgTWVhc3UKICAgICAgICAgICAgIGlmIChkYXRhLT5hbGxDaGFyYWN0
ZXJzTWFwKSB7CiAgICAgICAgICAgICAgICAgY29uc3QgU1ZHQ2hhcmFjdGVyRGF0YU1hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBkYXRhLT5hbGxDaGFyYWN0ZXJzTWFwLT5maW5kKGRhdGEtPnZhbHVl
TGlzdFBvc2l0aW9uICsgbV90ZXh0UG9zaXRpb24gLSBkYXRhLT5za2lwcGVkQ2hhcmFjdGVycyAt
IHN1cnJvZ2F0ZVBhaXJDaGFyYWN0ZXJzICsgMSk7CiAgICAgICAgICAgICAgICAgaWYgKGl0ICE9
IGRhdGEtPmFsbENoYXJhY3RlcnNNYXAtPmVuZCgpKQotICAgICAgICAgICAgICAgICAgICBhdHRy
aWJ1dGVzLT5jaGFyYWN0ZXJEYXRhTWFwKCkuc2V0KG1fdGV4dFBvc2l0aW9uICsgMSwgaXQtPnNl
Y29uZCk7CisgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMtPmNoYXJhY3RlckRhdGFNYXAo
KS5zZXQobV90ZXh0UG9zaXRpb24gKyAxLCBpdC0+dmFsdWUpOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgdGV4dE1ldHJpY3NWYWx1ZXMtPmFwcGVuZChtX2N1cnJlbnRNZXRyaWNzKTsKICAg
ICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5
bmMuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCmluZGV4
IDQ0MjA5YzZmNTlkMGQyYTFkN2YzM2IyZjExMjlhODdlOTA0NWU3Y2QuLmZjYjEyNmExZDU2ZDVh
ZmNjOWFiZWJhNjIxZmIwNzc4ZTMyYjdmZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0
b3JhZ2VBcmVhU3luYy5jcHAKQEAgLTE4OCw3ICsxODgsNyBAQCB2b2lkIFN0b3JhZ2VBcmVhU3lu
Yzo6c3luY1RpbWVyRmlyZWQoVGltZXI8U3RvcmFnZUFyZWFTeW5jPiopCiAgICAgICAgICAgICAg
ICAgcGFydGlhbFN5bmMgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgbV9pdGVtc1BlbmRpbmdTeW5jLnNldChjaGFuZ2VkX2l0LT5maXJz
dC5pc29sYXRlZENvcHkoKSwgY2hhbmdlZF9pdC0+c2Vjb25kLmlzb2xhdGVkQ29weSgpKTsKKyAg
ICAgICAgICAgIG1faXRlbXNQZW5kaW5nU3luYy5zZXQoY2hhbmdlZF9pdC0+a2V5Lmlzb2xhdGVk
Q29weSgpLCBjaGFuZ2VkX2l0LT52YWx1ZS5pc29sYXRlZENvcHkoKSk7CiAgICAgICAgIH0KIAog
ICAgICAgICBpZiAocGFydGlhbFN5bmMpIHsKQEAgLTE5OCw3ICsxOTgsNyBAQCB2b2lkIFN0b3Jh
Z2VBcmVhU3luYzo6c3luY1RpbWVyRmlyZWQoVGltZXI8U3RvcmFnZUFyZWFTeW5jPiopCiAgICAg
ICAgICAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6aXRlcmF0b3IgcGVuZGluZ19pdCA9IG1f
aXRlbXNQZW5kaW5nU3luYy5iZWdpbigpOwogICAgICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFN0
cmluZz46Oml0ZXJhdG9yIHBlbmRpbmdfZW5kID0gbV9pdGVtc1BlbmRpbmdTeW5jLmVuZCgpOwog
ICAgICAgICAgICAgZm9yICg7IHBlbmRpbmdfaXQgIT0gcGVuZGluZ19lbmQ7ICsrcGVuZGluZ19p
dCkKLSAgICAgICAgICAgICAgICBtX2NoYW5nZWRJdGVtcy5yZW1vdmUocGVuZGluZ19pdC0+Zmly
c3QpOworICAgICAgICAgICAgICAgIG1fY2hhbmdlZEl0ZW1zLnJlbW92ZShwZW5kaW5nX2l0LT5r
ZXkpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFtX3N5bmNTY2hlZHVsZWQpIHsKQEAgLTM0
NSw3ICszNDUsNyBAQCB2b2lkIFN0b3JhZ2VBcmVhU3luYzo6cGVyZm9ybUltcG9ydCgpCiAgICAg
SGFzaE1hcDxTdHJpbmcsIFN0cmluZz46Oml0ZXJhdG9yIGVuZCA9IGl0ZW1NYXAuZW5kKCk7CiAK
ICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBtX3N0b3JhZ2VBcmVhLT5pbXBv
cnRJdGVtKGl0LT5maXJzdCwgaXQtPnNlY29uZCk7CisgICAgICAgIG1fc3RvcmFnZUFyZWEtPmlt
cG9ydEl0ZW0oaXQtPmtleSwgaXQtPnZhbHVlKTsKIAogICAgIG1hcmtJbXBvcnRlZCgpOwogfQpA
QCAtNDM5LDEzICs0MzksMTMgQEAgdm9pZCBTdG9yYWdlQXJlYVN5bmM6OnN5bmMoYm9vbCBjbGVh
ckl0ZW1zLCBjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgaXRlbXMKICAgICB0cmFuc2Fj
dGlvbi5iZWdpbigpOwogICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gaXRlbXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIC8v
IEJhc2VkIG9uIHRoZSBudWxsLW5lc3Mgb2YgdGhlIHNlY29uZCBhcmd1bWVudCwgZGVjaWRlIHdo
ZXRoZXIgdGhpcyBpcyBhbiBpbnNlcnQgb3IgYSBkZWxldGUuCi0gICAgICAgIFNRTGl0ZVN0YXRl
bWVudCYgcXVlcnkgPSBpdC0+c2Vjb25kLmlzTnVsbCgpID8gcmVtb3ZlIDogaW5zZXJ0OworICAg
ICAgICBTUUxpdGVTdGF0ZW1lbnQmIHF1ZXJ5ID0gaXQtPnZhbHVlLmlzTnVsbCgpID8gcmVtb3Zl
IDogaW5zZXJ0OwogCi0gICAgICAgIHF1ZXJ5LmJpbmRUZXh0KDEsIGl0LT5maXJzdCk7CisgICAg
ICAgIHF1ZXJ5LmJpbmRUZXh0KDEsIGl0LT5rZXkpOwogCiAgICAgICAgIC8vIElmIHRoZSBzZWNv
bmQgYXJndW1lbnQgaXMgbm9uLW51bGwsIHdlJ3JlIGRvaW5nIGFuIGluc2VydCwgc28gYmluZCBp
dCBhcyB0aGUgdmFsdWUuCi0gICAgICAgIGlmICghaXQtPnNlY29uZC5pc051bGwoKSkKLSAgICAg
ICAgICAgIHF1ZXJ5LmJpbmRCbG9iKDIsIGl0LT5zZWNvbmQpOworICAgICAgICBpZiAoIWl0LT52
YWx1ZS5pc051bGwoKSkKKyAgICAgICAgICAgIHF1ZXJ5LmJpbmRCbG9iKDIsIGl0LT52YWx1ZSk7
CiAKICAgICAgICAgaW50IHJlc3VsdCA9IHF1ZXJ5LnN0ZXAoKTsKICAgICAgICAgaWYgKHJlc3Vs
dCAhPSBTUUxSZXN1bHREb25lKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L1N0b3JhZ2VNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTWFwLmNwcApp
bmRleCA4ZTQyZDJmMTc2ZGQzYjExMTJhMDFhNTFkOGRiNjJmNGIzOGJiYTM1Li40MGUxYTM4ZjFj
YTRhNzlmMGNlMjQ3MDExNTM0N2FkYjkyOWY0OTgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL1N0b3JhZ2VNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3Rv
cmFnZU1hcC5jcHAKQEAgLTg5LDcgKzg5LDcgQEAgU3RyaW5nIFN0b3JhZ2VNYXA6OmtleSh1bnNp
Z25lZCBpbmRleCkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCiAgICAgc2V0SXRlcmF0b3JU
b0luZGV4KGluZGV4KTsKLSAgICByZXR1cm4gbV9pdGVyYXRvci0+Zmlyc3Q7CisgICAgcmV0dXJu
IG1faXRlcmF0b3ItPmtleTsKIH0KIAogU3RyaW5nIFN0b3JhZ2VNYXA6OmdldEl0ZW0oY29uc3Qg
U3RyaW5nJiBrZXkpIGNvbnN0CkBAIC0xMzMsNyArMTMzLDcgQEAgUGFzc1JlZlB0cjxTdG9yYWdl
TWFwPiBTdG9yYWdlTWFwOjpzZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcm
IHZhbHUKIAogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+OjpBZGRSZXN1bHQgYWRkUmVzdWx0
ID0gbV9tYXAuYWRkKGtleSwgdmFsdWUpOwogICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkp
Ci0gICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gdmFsdWU7CisgICAgICAgIGFk
ZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSB2YWx1ZTsKIAogICAgIGludmFsaWRhdGVJdGVyYXRv
cigpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3Bh
Y2VJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwu
Y3BwCmluZGV4IDlkMWFjNTE3YTBlMmU3YjNmMjZiODIzYjI4OWE1OTM5NThiZGM4YTAuLjQ1MDFi
MTFmYmMxNWNmNDIzOWQwN2ZjMzc0NzY0MTZkYmI3NWVmY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwCkBAIC01NSw3ICs1NSw3IEBAIFBh
c3NSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gU3RvcmFnZU5hbWVzcGFjZUltcGw6OmxvY2FsU3Rv
cmFnZU5hbWVzcGFjZShjb25zdCBTCiAgICAgICAgIHJldHVybiBzdG9yYWdlTmFtZXNwYWNlLnJl
bGVhc2UoKTsKICAgICB9CiAKLSAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICByZXR1cm4gaXQt
PnZhbHVlOwogfQogCiBQYXNzUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IFN0b3JhZ2VOYW1lc3Bh
Y2VJbXBsOjpzZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSh1bnNpZ25lZCBxdW90YSkKQEAgLTk3LDcg
Kzk3LDcgQEAgUGFzc1JlZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiBTdG9yYWdlTmFtZXNwYWNlSW1w
bDo6Y29weSgpCiAKICAgICBTdG9yYWdlQXJlYU1hcDo6aXRlcmF0b3IgZW5kID0gbV9zdG9yYWdl
QXJlYU1hcC5lbmQoKTsKICAgICBmb3IgKFN0b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBpID0gbV9z
dG9yYWdlQXJlYU1hcC5iZWdpbigpOyBpICE9IGVuZDsgKytpKQotICAgICAgICBuZXdOYW1lc3Bh
Y2UtPm1fc3RvcmFnZUFyZWFNYXAuc2V0KGktPmZpcnN0LCBpLT5zZWNvbmQtPmNvcHkoKSk7Cisg
ICAgICAgIG5ld05hbWVzcGFjZS0+bV9zdG9yYWdlQXJlYU1hcC5zZXQoaS0+a2V5LCBpLT52YWx1
ZS0+Y29weSgpKTsKICAgICByZXR1cm4gbmV3TmFtZXNwYWNlLnJlbGVhc2UoKTsKIH0KIApAQCAt
MTMxLDcgKzEzMSw3IEBAIHZvaWQgU3RvcmFnZU5hbWVzcGFjZUltcGw6OmNsb3NlKCkKIAogICAg
IFN0b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBlbmQgPSBtX3N0b3JhZ2VBcmVhTWFwLmVuZCgpOwog
ICAgIGZvciAoU3RvcmFnZUFyZWFNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zdG9yYWdlQXJlYU1hcC5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPmNsb3NlKCk7Cisg
ICAgICAgIGl0LT52YWx1ZS0+Y2xvc2UoKTsKIAogICAgIGlmIChtX3N5bmNNYW5hZ2VyKQogICAg
ICAgICBtX3N5bmNNYW5hZ2VyLT5jbG9zZSgpOwpAQCAtMTU0LDcgKzE1NCw3IEBAIHZvaWQgU3Rv
cmFnZU5hbWVzcGFjZUltcGw6OmNsZWFyQWxsT3JpZ2luc0ZvckRlbGV0aW9uKCkKIAogICAgIFN0
b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBlbmQgPSBtX3N0b3JhZ2VBcmVhTWFwLmVuZCgpOwogICAg
IGZvciAoU3RvcmFnZUFyZWFNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zdG9yYWdlQXJlYU1hcC5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPmNsZWFyRm9yT3JpZ2lu
RGVsZXRpb24oKTsKKyAgICAgICAgaXQtPnZhbHVlLT5jbGVhckZvck9yaWdpbkRlbGV0aW9uKCk7
CiB9CiAgICAgCiB2b2lkIFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpzeW5jKCkKQEAgLTE2Miw3ICsx
NjIsNyBAQCB2b2lkIFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpzeW5jKCkKICAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwogICAgIFN0b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBlbmQgPSBtX3N0b3Jh
Z2VBcmVhTWFwLmVuZCgpOwogICAgIGZvciAoU3RvcmFnZUFyZWFNYXA6Oml0ZXJhdG9yIGl0ID0g
bV9zdG9yYWdlQXJlYU1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5z
ZWNvbmQtPnN5bmMoKTsKKyAgICAgICAgaXQtPnZhbHVlLT5zeW5jKCk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVu
dEV4dGVuc2lvbnMuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9u
cy5jcHAKaW5kZXggY2FjMWFlYTA3ZTA5MGQ3NGUyNWVhMzQ2MDA5ZjI1YzdkNDY4MGUzOS4uY2Ni
NjMyM2U0N2RhODQxYTc2MWNiOTNhMWVjOGVhZDE1NzUwOTZlYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5jcHAKQEAgLTE1Niw3ICsxNTYsNyBAQCB2b2lk
IFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlQW5pbWF0aW9uRWxlbWVudEZyb21UYXJnZXQo
U1ZHU01JTEVsZW1lbnQqIGFuaQogICAgIEhhc2hNYXA8U1ZHRWxlbWVudCosIEhhc2hTZXQ8U1ZH
U01JTEVsZW1lbnQqPiogPjo6aXRlcmF0b3IgaXQgPSBtX2FuaW1hdGVkRWxlbWVudHMuZmluZCh0
YXJnZXRFbGVtZW50KTsKICAgICBBU1NFUlQoaXQgIT0gbV9hbmltYXRlZEVsZW1lbnRzLmVuZCgp
KTsKICAgICAKLSAgICBIYXNoU2V0PFNWR1NNSUxFbGVtZW50Kj4qIGFuaW1hdGlvbkVsZW1lbnRz
Rm9yVGFyZ2V0ID0gaXQtPnNlY29uZDsKKyAgICBIYXNoU2V0PFNWR1NNSUxFbGVtZW50Kj4qIGFu
aW1hdGlvbkVsZW1lbnRzRm9yVGFyZ2V0ID0gaXQtPnZhbHVlOwogICAgIEFTU0VSVCghYW5pbWF0
aW9uRWxlbWVudHNGb3JUYXJnZXQtPmlzRW1wdHkoKSk7CiAKICAgICBhbmltYXRpb25FbGVtZW50
c0ZvclRhcmdldC0+cmVtb3ZlKGFuaW1hdGlvbkVsZW1lbnQpOwpAQCAtMTczLDcgKzE3Myw3IEBA
IHZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZW1vdmVBbGxBbmltYXRpb25FbGVtZW50c0Zy
b21UYXJnZXQoU1ZHRWxlbWVudCogdGFyCiAgICAgaWYgKGl0ID09IG1fYW5pbWF0ZWRFbGVtZW50
cy5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSGFzaFNldDxTVkdTTUlMRWxlbWVudCo+
KiBhbmltYXRpb25FbGVtZW50c0ZvclRhcmdldCA9IGl0LT5zZWNvbmQ7CisgICAgSGFzaFNldDxT
VkdTTUlMRWxlbWVudCo+KiBhbmltYXRpb25FbGVtZW50c0ZvclRhcmdldCA9IGl0LT52YWx1ZTsK
ICAgICBWZWN0b3I8U1ZHU01JTEVsZW1lbnQqPiB0b0JlUmVzZXQ7CiAKICAgICBIYXNoU2V0PFNW
R1NNSUxFbGVtZW50Kj46Oml0ZXJhdG9yIGVuZCA9IGFuaW1hdGlvbkVsZW1lbnRzRm9yVGFyZ2V0
LT5lbmQoKTsKQEAgLTIxOSw5ICsyMTksOSBAQCB2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6
YWRkUGVuZGluZ1Jlc291cmNlKGNvbnN0IEF0b21pY1N0cmluZyYgaWQsIFNWR1N0eWxlZAogCiAg
ICAgLy8gVGhlIEhhc2hNYXAgYWRkIGZ1bmN0aW9uIGxlYXZlcyB0aGUgbWFwIGFsb25lIGFuZCBy
ZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgZWxlbWVudCBpbiB0aGUKICAgICAvLyBtYXAgaWYgdGhl
IGVsZW1lbnQgYWxyZWFkeSBleGlzdHMuIFNvIHdlIGFkZCB3aXRoIGEgdmFsdWUgb2YgMCwgYW5k
IGl0IGVpdGhlciBmaW5kcyB0aGUKLSAgICAvLyBleGlzdGluZyBlbGVtZW50IG9yIGFkZHMgYSBu
ZXcgb25lIGluIGEgc2luZ2xlIG9wZXJhdGlvbi4gVGhlICIuaXRlcmF0b3ItPnNlY29uZCIgaWRp
b20gZ2V0cworICAgIC8vIGV4aXN0aW5nIGVsZW1lbnQgb3IgYWRkcyBhIG5ldyBvbmUgaW4gYSBz
aW5nbGUgb3BlcmF0aW9uLiBUaGUgIi5pdGVyYXRvci0+dmFsdWUiIGlkaW9tIGdldHMKICAgICAv
LyB1cyB0byB0aGUgaXRlcmF0b3IgZnJvbSBhZGQncyByZXN1bHQsIGFuZCB0aGVuIHRvIHRoZSB2
YWx1ZSBpbnNpZGUgdGhlIGhhc2ggdGFibGUuCi0gICAgU1ZHUGVuZGluZ0VsZW1lbnRzKiYgc2V0
ID0gbV9wZW5kaW5nUmVzb3VyY2VzLmFkZChpZCwgMCkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBT
VkdQZW5kaW5nRWxlbWVudHMqJiBzZXQgPSBtX3BlbmRpbmdSZXNvdXJjZXMuYWRkKGlkLCAwKS5p
dGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCFzZXQpCiAgICAgICAgIHNldCA9IG5ldyBTVkdQZW5k
aW5nRWxlbWVudHM7CiAgICAgc2V0LT5hZGQoZWxlbWVudCk7CkBAIC0yNDYsNyArMjQ2LDcgQEAg
Ym9vbCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OmlzRWxlbWVudFBlbmRpbmdSZXNvdXJjZXMoU1ZH
U3R5bGVkRWxlbWVudCogZWxlbWVudCkKIAogICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBTVkdQ
ZW5kaW5nRWxlbWVudHMqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wZW5kaW5nUmVzb3VyY2Vz
LmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDxBdG9taWNTdHJpbmcsIFNWR1BlbmRpbmdFbGVtZW50
cyo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGVuZGluZ1Jlc291cmNlcy5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKLSAgICAgICAgU1ZHUGVuZGluZ0VsZW1lbnRzKiBlbGVtZW50cyA9IGl0
LT5zZWNvbmQ7CisgICAgICAgIFNWR1BlbmRpbmdFbGVtZW50cyogZWxlbWVudHMgPSBpdC0+dmFs
dWU7CiAgICAgICAgIEFTU0VSVChlbGVtZW50cyk7CiAKICAgICAgICAgaWYgKGVsZW1lbnRzLT5j
b250YWlucyhlbGVtZW50KSkKQEAgLTI3NCwxMyArMjc0LDEzIEBAIHZvaWQgU1ZHRG9jdW1lbnRF
eHRlbnNpb25zOjpyZW1vdmVFbGVtZW50RnJvbVBlbmRpbmdSZXNvdXJjZXMoU1ZHU3R5bGVkRWxl
bWVudCoKICAgICAgICAgVmVjdG9yPEF0b21pY1N0cmluZz4gdG9CZVJlbW92ZWQ7CiAgICAgICAg
IEhhc2hNYXA8QXRvbWljU3RyaW5nLCBTVkdQZW5kaW5nRWxlbWVudHMqPjo6aXRlcmF0b3IgZW5k
ID0gbV9wZW5kaW5nUmVzb3VyY2VzLmVuZCgpOwogICAgICAgICBmb3IgKEhhc2hNYXA8QXRvbWlj
U3RyaW5nLCBTVkdQZW5kaW5nRWxlbWVudHMqPjo6aXRlcmF0b3IgaXQgPSBtX3BlbmRpbmdSZXNv
dXJjZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBTVkdQZW5kaW5n
RWxlbWVudHMqIGVsZW1lbnRzID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIFNWR1BlbmRpbmdF
bGVtZW50cyogZWxlbWVudHMgPSBpdC0+dmFsdWU7CiAgICAgICAgICAgICBBU1NFUlQoZWxlbWVu
dHMpOwogICAgICAgICAgICAgQVNTRVJUKCFlbGVtZW50cy0+aXNFbXB0eSgpKTsKIAogICAgICAg
ICAgICAgZWxlbWVudHMtPnJlbW92ZShlbGVtZW50KTsKICAgICAgICAgICAgIGlmIChlbGVtZW50
cy0+aXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHRvQmVSZW1vdmVkLmFwcGVuZChpdC0+Zmly
c3QpOworICAgICAgICAgICAgICAgIHRvQmVSZW1vdmVkLmFwcGVuZChpdC0+a2V5KTsKICAgICAg
ICAgfQogCiAgICAgICAgIGVsZW1lbnQtPmNsZWFySGFzUGVuZGluZ1Jlc291cmNlc0lmUG9zc2li
bGUoKTsKQEAgLTI5NiwxMyArMjk2LDEzIEBAIHZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpy
ZW1vdmVFbGVtZW50RnJvbVBlbmRpbmdSZXNvdXJjZXMoU1ZHU3R5bGVkRWxlbWVudCoKICAgICAg
ICAgVmVjdG9yPEF0b21pY1N0cmluZz4gdG9CZVJlbW92ZWQ7CiAgICAgICAgIEhhc2hNYXA8QXRv
bWljU3RyaW5nLCBTVkdQZW5kaW5nRWxlbWVudHMqPjo6aXRlcmF0b3IgZW5kID0gbV9wZW5kaW5n
UmVzb3VyY2VzRm9yUmVtb3ZhbC5lbmQoKTsKICAgICAgICAgZm9yIChIYXNoTWFwPEF0b21pY1N0
cmluZywgU1ZHUGVuZGluZ0VsZW1lbnRzKj46Oml0ZXJhdG9yIGl0ID0gbV9wZW5kaW5nUmVzb3Vy
Y2VzRm9yUmVtb3ZhbC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIFNW
R1BlbmRpbmdFbGVtZW50cyogZWxlbWVudHMgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgU1ZH
UGVuZGluZ0VsZW1lbnRzKiBlbGVtZW50cyA9IGl0LT52YWx1ZTsKICAgICAgICAgICAgIEFTU0VS
VChlbGVtZW50cyk7CiAgICAgICAgICAgICBBU1NFUlQoIWVsZW1lbnRzLT5pc0VtcHR5KCkpOwog
CiAgICAgICAgICAgICBlbGVtZW50cy0+cmVtb3ZlKGVsZW1lbnQpOwogICAgICAgICAgICAgaWYg
KGVsZW1lbnRzLT5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgdG9CZVJlbW92ZWQuYXBwZW5k
KGl0LT5maXJzdCk7CisgICAgICAgICAgICAgICAgdG9CZVJlbW92ZWQuYXBwZW5kKGl0LT5rZXkp
OwogICAgICAgICB9CiAKICAgICAgICAgLy8gV2UgdXNlIHRoZSByZW1vdmVQZW5kaW5nUmVzb3Vy
Y2VGb3JSZW1vdmFsIGZ1bmN0aW9uIGhlcmUgYmVjYXVzZSBpdCBkZWFscyB3aXRoIHNldCBsaWZl
dGltZSBjb3JyZWN0bHkuCkBAIC0zNjIsNyArMzYyLDcgQEAgSGFzaFNldDxTVkdFbGVtZW50Kj4q
IFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6c2V0T2ZFbGVtZW50c1JlZmVyZW5jaW5nVGFyZ2V0KFNW
R0UKICAgICBjb25zdCBIYXNoTWFwPFNWR0VsZW1lbnQqLCBPd25QdHI8SGFzaFNldDxTVkdFbGVt
ZW50Kj4gPiA+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fZWxlbWVudERlcGVuZGVuY2llcy5maW5k
KHJlZmVyZW5jZWRFbGVtZW50KTsKICAgICBpZiAoaXQgPT0gbV9lbGVtZW50RGVwZW5kZW5jaWVz
LmVuZCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gaXQtPnNlY29uZC5nZXQoKTsK
KyAgICByZXR1cm4gaXQtPnZhbHVlLmdldCgpOwogfQogCiB2b2lkIFNWR0RvY3VtZW50RXh0ZW5z
aW9uczo6YWRkRWxlbWVudFJlZmVyZW5jaW5nVGFyZ2V0KFNWR0VsZW1lbnQqIHJlZmVyZW5jaW5n
RWxlbWVudCwgU1ZHRWxlbWVudCogcmVmZXJlbmNlZEVsZW1lbnQpCkBAIC0zODYsOCArMzg2LDgg
QEAgdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlbW92ZUFsbFRhcmdldFJlZmVyZW5jZXNG
b3JFbGVtZW50KFNWR0VsZW1lbnQqIHJlZmUKIAogICAgIEhhc2hNYXA8U1ZHRWxlbWVudCosIE93
blB0cjxIYXNoU2V0PFNWR0VsZW1lbnQqPiA+ID46Oml0ZXJhdG9yIGVuZCA9IG1fZWxlbWVudERl
cGVuZGVuY2llcy5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8U1ZHRWxlbWVudCosIE93blB0cjxI
YXNoU2V0PFNWR0VsZW1lbnQqPiA+ID46Oml0ZXJhdG9yIGl0ID0gbV9lbGVtZW50RGVwZW5kZW5j
aWVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBTVkdFbGVtZW50KiByZWZl
cmVuY2VkRWxlbWVudCA9IGl0LT5maXJzdDsKLSAgICAgICAgSGFzaFNldDxTVkdFbGVtZW50Kj4q
IHJlZmVyZW5jaW5nRWxlbWVudHMgPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICBTVkdFbGVt
ZW50KiByZWZlcmVuY2VkRWxlbWVudCA9IGl0LT5rZXk7CisgICAgICAgIEhhc2hTZXQ8U1ZHRWxl
bWVudCo+KiByZWZlcmVuY2luZ0VsZW1lbnRzID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICBI
YXNoU2V0PFNWR0VsZW1lbnQqPjo6aXRlcmF0b3Igc2V0SXQgPSByZWZlcmVuY2luZ0VsZW1lbnRz
LT5maW5kKHJlZmVyZW5jaW5nRWxlbWVudCk7CiAgICAgICAgIGlmIChzZXRJdCA9PSByZWZlcmVu
Y2luZ0VsZW1lbnRzLT5lbmQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtNDA4LDEwICs0
MDgsMTAgQEAgdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlbW92ZUFsbEVsZW1lbnRSZWZl
cmVuY2VzRm9yVGFyZ2V0KFNWR0VsZW1lbnQqIHJlZmUKICAgICBIYXNoTWFwPFNWR0VsZW1lbnQq
LCBPd25QdHI8SGFzaFNldDxTVkdFbGVtZW50Kj4gPiA+OjppdGVyYXRvciBpdCA9IG1fZWxlbWVu
dERlcGVuZGVuY2llcy5maW5kKHJlZmVyZW5jZWRFbGVtZW50KTsKICAgICBpZiAoaXQgPT0gbV9l
bGVtZW50RGVwZW5kZW5jaWVzLmVuZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKGl0
LT5maXJzdCA9PSByZWZlcmVuY2VkRWxlbWVudCk7CisgICAgQVNTRVJUKGl0LT5rZXkgPT0gcmVm
ZXJlbmNlZEVsZW1lbnQpOwogICAgIFZlY3RvcjxTVkdFbGVtZW50Kj4gdG9CZU5vdGlmaWVkOwog
Ci0gICAgSGFzaFNldDxTVkdFbGVtZW50Kj4qIHJlZmVyZW5jaW5nRWxlbWVudHMgPSBpdC0+c2Vj
b25kLmdldCgpOworICAgIEhhc2hTZXQ8U1ZHRWxlbWVudCo+KiByZWZlcmVuY2luZ0VsZW1lbnRz
ID0gaXQtPnZhbHVlLmdldCgpOwogICAgIEhhc2hTZXQ8U1ZHRWxlbWVudCo+OjppdGVyYXRvciBz
ZXRFbmQgPSByZWZlcmVuY2luZ0VsZW1lbnRzLT5lbmQoKTsKICAgICBmb3IgKEhhc2hTZXQ8U1ZH
RWxlbWVudCo+OjppdGVyYXRvciBzZXRJdCA9IHJlZmVyZW5jaW5nRWxlbWVudHMtPmJlZ2luKCk7
IHNldEl0ICE9IHNldEVuZDsgKytzZXRJdCkKICAgICAgICAgdG9CZU5vdGlmaWVkLmFwcGVuZCgq
c2V0SXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCmluZGV4IDFjMDljNjE5YjYxZmQ4MmU0
ODhlYjBkNTE2MjQyOGQ4ZTRhMWYyMzAuLmIwMjEyZDdiYzQ1M2VhNDdiMmNlZjkxNzcxMjEyNGM3
ODNiMmM4YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAKQEAgLTY4LDcgKzY4LDcgQEAg
U1ZHRWxlbWVudDo6flNWR0VsZW1lbnQoKQogICAgICAgICBTVkdFbGVtZW50UmFyZURhdGE6OlNW
R0VsZW1lbnRSYXJlRGF0YU1hcDo6aXRlcmF0b3IgaXQgPSByYXJlRGF0YU1hcC5maW5kKHRoaXMp
OwogICAgICAgICBBU1NFUlQoaXQgIT0gcmFyZURhdGFNYXAuZW5kKCkpOwogCi0gICAgICAgIFNW
R0VsZW1lbnRSYXJlRGF0YSogcmFyZURhdGEgPSBpdC0+c2Vjb25kOworICAgICAgICBTVkdFbGVt
ZW50UmFyZURhdGEqIHJhcmVEYXRhID0gaXQtPnZhbHVlOwogICAgICAgICByYXJlRGF0YS0+ZGVz
dHJveUFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygpOwogICAgICAgICBpZiAoU1ZHQ3Vyc29y
RWxlbWVudCogY3Vyc29yRWxlbWVudCA9IHJhcmVEYXRhLT5jdXJzb3JFbGVtZW50KCkpCiAgICAg
ICAgICAgICBjdXJzb3JFbGVtZW50LT5yZW1vdmVDbGllbnQodGhpcyk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuY3BwCmluZGV4IGIwMzJm
MzE1ODI1NmU1ZTNjYzg5MDQ1MGNiYTg2ODBiMDdlNGZmOWMuLjBlZmE2YTQyYmIwOTM1Y2JlOTQy
NTJlNjExOTgzOWRjZGFmMmNmZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9hbmlt
YXRpb24vU01JTFRpbWVDb250YWluZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9hbmlt
YXRpb24vU01JTFRpbWVDb250YWluZXIuY3BwCkBAIC0yNzIsNyArMjcyLDcgQEAgdm9pZCBTTUlM
VGltZUNvbnRhaW5lcjo6dXBkYXRlQW5pbWF0aW9ucyhTTUlMVGltZSBlbGFwc2VkLCBib29sIHNl
ZWtUb1RpbWUpCiAgICAgVmVjdG9yPFNWR1NNSUxFbGVtZW50Kj4gYW5pbWF0aW9uc1RvQXBwbHk7
CiAgICAgUmVzdWx0RWxlbWVudE1hcDo6aXRlcmF0b3IgZW5kID0gcmVzdWx0c0VsZW1lbnRzLmVu
ZCgpOwogICAgIGZvciAoUmVzdWx0RWxlbWVudE1hcDo6aXRlcmF0b3IgaXQgPSByZXN1bHRzRWxl
bWVudHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFNWR1NNSUxFbGVtZW50
KiBhbmltYXRpb24gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICBTVkdTTUlMRWxlbWVudCog
YW5pbWF0aW9uID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICBpZiAoY29udHJpYnV0aW5nRWxl
bWVudHMuY29udGFpbnMoYW5pbWF0aW9uKSkKICAgICAgICAgICAgIGFuaW1hdGlvbnNUb0FwcGx5
LmFwcGVuZChhbmltYXRpb24pOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9ncmFwaGljcy9TVkdJbWFnZUNhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGlj
cy9TVkdJbWFnZUNhY2hlLmNwcAppbmRleCA2OTNlZTJhOGZmZjVjN2YzNzIyZmI0NmM5ZmQwYjU1
YjVjZDNhZTFjLi4yNWZjYzc3OTdmMDRjMWZlODU5MmI2MDQxMzhhODZkMjhkZDQzZTY0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VDYWNoZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlQ2FjaGUuY3BwCkBAIC00Nyw4
ICs0Nyw4IEBAIFNWR0ltYWdlQ2FjaGU6On5TVkdJbWFnZUNhY2hlKCkKICAgICAgICAgLy8gQ2hl
Y2tzIGlmIHRoZSBjbGllbnQgKGl0LT5maXJzdCkgaXMgc3RpbGwgdmFsaWQuIFRoZSBjbGllbnQg
c2hvdWxkIHJlbW92ZSBpdHNlbGYgZnJvbSB0aGlzCiAgICAgICAgIC8vIGNhY2hlIGJlZm9yZSBp
dHMgZW5kIG9mIGxpZmUsIG90aGVyd2lzZSB0aGUgZm9sbG93aW5nIEFTU0VSVCB3aWxsIGNyYXNo
IG9uIHB1cmUgdmlydHVhbAogICAgICAgICAvLyBmdW5jdGlvbiBjYWxsIG9yIGEgZ2VuZXJhbCBj
cmFzaC4KLSAgICAgICAgQVNTRVJUKGl0LT5maXJzdC0+cmVzb3VyY2VDbGllbnRUeXBlKCkgPT0g
Q2FjaGVkSW1hZ2VDbGllbnQ6OmV4cGVjdGVkVHlwZSgpKTsKLSAgICAgICAgZGVsZXRlIGl0LT5z
ZWNvbmQuYnVmZmVyOworICAgICAgICBBU1NFUlQoaXQtPmtleS0+cmVzb3VyY2VDbGllbnRUeXBl
KCkgPT0gQ2FjaGVkSW1hZ2VDbGllbnQ6OmV4cGVjdGVkVHlwZSgpKTsKKyAgICAgICAgZGVsZXRl
IGl0LT52YWx1ZS5idWZmZXI7CiAgICAgfQogCiAgICAgbV9pbWFnZURhdGFNYXAuY2xlYXIoKTsK
QEAgLTYzLDcgKzYzLDcgQEAgdm9pZCBTVkdJbWFnZUNhY2hlOjpyZW1vdmVDbGllbnRGcm9tQ2Fj
aGUoY29uc3QgQ2FjaGVkSW1hZ2VDbGllbnQqIGNsaWVudCkKICAgICBpZiAoaXQgPT0gbV9pbWFn
ZURhdGFNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGRlbGV0ZSBpdC0+c2Vjb25k
LmJ1ZmZlcjsKKyAgICBkZWxldGUgaXQtPnZhbHVlLmJ1ZmZlcjsKICAgICBtX2ltYWdlRGF0YU1h
cC5yZW1vdmUoaXQpOwogfQogCkBAIC04MCwxNCArODAsMTQgQEAgU1ZHSW1hZ2VDYWNoZTo6U2l6
ZUFuZFNjYWxlcyBTVkdJbWFnZUNhY2hlOjpyZXF1ZXN0ZWRTaXplQW5kU2NhbGVzKGNvbnN0IENh
Y2hlZEkKICAgICBTaXplQW5kU2NhbGVzTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fc2l6ZUFu
ZFNjYWxlc01hcC5maW5kKGNsaWVudCk7CiAgICAgaWYgKGl0ID09IG1fc2l6ZUFuZFNjYWxlc01h
cC5lbmQoKSkKICAgICAgICAgcmV0dXJuIFNpemVBbmRTY2FsZXMoKTsKLSAgICByZXR1cm4gaXQt
PnNlY29uZDsKKyAgICByZXR1cm4gaXQtPnZhbHVlOwogfQogCiB2b2lkIFNWR0ltYWdlQ2FjaGU6
OmltYWdlQ29udGVudENoYW5nZWQoKQogewogICAgIEltYWdlRGF0YU1hcDo6aXRlcmF0b3IgZW5k
ID0gbV9pbWFnZURhdGFNYXAuZW5kKCk7CiAgICAgZm9yIChJbWFnZURhdGFNYXA6Oml0ZXJhdG9y
IGl0ID0gbV9pbWFnZURhdGFNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBp
dC0+c2Vjb25kLmltYWdlTmVlZHNVcGRhdGUgPSB0cnVlOworICAgICAgICBpdC0+dmFsdWUuaW1h
Z2VOZWVkc1VwZGF0ZSA9IHRydWU7CiAKICAgICAvLyBJZiB3ZSdyZSBpbiB0aGUgbWlkZGxlIG9m
IGxheW91dCwgc3RhcnQgcmVkcmF3aW5nIGRpcnR5CiAgICAgLy8gaW1hZ2VzIG9uIGEgdGltZXI7
IG90aGVyd2lzZSBpdCdzIHNhZmUgdG8gZHJhdyBpbW1lZGlhdGVseS4KQEAgLTEwMyw3ICsxMDMs
NyBAQCB2b2lkIFNWR0ltYWdlQ2FjaGU6OnJlZHJhdygpCiB7CiAgICAgSW1hZ2VEYXRhTWFwOjpp
dGVyYXRvciBlbmQgPSBtX2ltYWdlRGF0YU1hcC5lbmQoKTsKICAgICBmb3IgKEltYWdlRGF0YU1h
cDo6aXRlcmF0b3IgaXQgPSBtX2ltYWdlRGF0YU1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKLSAgICAgICAgSW1hZ2VEYXRhJiBkYXRhID0gaXQtPnNlY29uZDsKKyAgICAgICAgSW1hZ2VE
YXRhJiBkYXRhID0gaXQtPnZhbHVlOwogICAgICAgICBpZiAoIWRhdGEuaW1hZ2VOZWVkc1VwZGF0
ZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAvLyBJZiB0aGUgY29udGVudCBjaGFu
Z2VkIHdlIHJlZHJhdyB1c2luZyBvdXIgZXhpc3RpbmcgSW1hZ2VCdWZmZXIuCkBAIC0xMzksOSAr
MTM5LDkgQEAgSW1hZ2UqIFNWR0ltYWdlQ2FjaGU6Omxvb2t1cE9yQ3JlYXRlQml0bWFwSW1hZ2VG
b3JSZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QqIHIKICAgICBpZiAoc2l6ZUl0ID09IG1fc2l6
ZUFuZFNjYWxlc01hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuIEltYWdlOjpudWxsSW1hZ2UoKTsK
IAotICAgIEludFNpemUgc2l6ZSA9IHNpemVJdC0+c2Vjb25kLnNpemU7Ci0gICAgZmxvYXQgem9v
bSA9IHNpemVJdC0+c2Vjb25kLnpvb207Ci0gICAgZmxvYXQgc2NhbGUgPSBzaXplSXQtPnNlY29u
ZC5zY2FsZTsKKyAgICBJbnRTaXplIHNpemUgPSBzaXplSXQtPnZhbHVlLnNpemU7CisgICAgZmxv
YXQgem9vbSA9IHNpemVJdC0+dmFsdWUuem9vbTsKKyAgICBmbG9hdCBzY2FsZSA9IHNpemVJdC0+
dmFsdWUuc2NhbGU7CiAKICAgICAvLyBGSVhNRSAoODUzMzUpOiBUaGlzIG5lZWRzIHRvIHRha2Ug
Q1NTIHRyYW5zZm9ybSBzY2FsZSBpbnRvIGFjY291bnQgYXMgd2VsbC4KICAgICBQYWdlKiBwYWdl
ID0gcmVuZGVyZXItPmRvY3VtZW50KCktPnBhZ2UoKTsKQEAgLTE1Myw3ICsxNTMsNyBAQCBJbWFn
ZSogU1ZHSW1hZ2VDYWNoZTo6bG9va3VwT3JDcmVhdGVCaXRtYXBJbWFnZUZvclJlbmRlcmVyKGNv
bnN0IFJlbmRlck9iamVjdCogcgogICAgIC8vIExvb2t1cCBpbWFnZSBmb3IgY2xpZW50IGluIGNh
Y2hlIGFuZCBldmVudHVhbGx5IHVwZGF0ZSBpdC4KICAgICBJbWFnZURhdGFNYXA6Oml0ZXJhdG9y
IGl0ID0gbV9pbWFnZURhdGFNYXAuZmluZChjbGllbnQpOwogICAgIGlmIChpdCAhPSBtX2ltYWdl
RGF0YU1hcC5lbmQoKSkgewotICAgICAgICBJbWFnZURhdGEmIGRhdGEgPSBpdC0+c2Vjb25kOwor
ICAgICAgICBJbWFnZURhdGEmIGRhdGEgPSBpdC0+dmFsdWU7CiAKICAgICAgICAgLy8gQ29tbW9u
IGNhc2U6IGltYWdlIHNpemUgJiB6b29tIHJlbWFpbmVkIHRoZSBzYW1lLgogICAgICAgICBpZiAo
ZGF0YS5zaXplQW5kU2NhbGVzLnNpemUgPT0gc2l6ZSAmJiBkYXRhLnNpemVBbmRTY2FsZXMuem9v
bSA9PSB6b29tICYmIGRhdGEuc2l6ZUFuZFNjYWxlcy5zY2FsZSA9PSBzY2FsZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIu
aAppbmRleCA0NGQzMjI3YjgzZTliODcxOGU3OWQ4YzE0YzllM2JlM2E2YWY2Mzg1Li4xOTE1ODBk
ZDhhYmU1OWY1MTc5ODQ3ODlmZWYzZGY5ZDFhYmM2YzIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oCkBAIC01MCw3
ICs1MCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIC8vIE9ubHkgYWxsb3dlZCBmb3IgZWZm
ZWN0cyBiZWxvbmdzIHRvIHRoaXMgYnVpbGRlci4KICAgICAgICAgQVNTRVJUKG1fZWZmZWN0UmVm
ZXJlbmNlcy5jb250YWlucyhlZmZlY3QpKTsKLSAgICAgICAgcmV0dXJuIG1fZWZmZWN0UmVmZXJl
bmNlcy5maW5kKGVmZmVjdCktPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIG1fZWZmZWN0UmVmZXJl
bmNlcy5maW5kKGVmZmVjdCktPnZhbHVlOwogICAgIH0KIAogICAgIC8vIFJlcXVpcmVkIHRvIGNo
YW5nZSB0aGUgYXR0cmlidXRlcyBvZiBhIGZpbHRlciBkdXJpbmcgYW4gc3ZnQXR0cmlidXRlQ2hh
bmdlZC4KQEAgLTY2LDcgKzY2LDcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIEhhc2hNYXA8
QXRvbWljU3RyaW5nLCBSZWZQdHI8RmlsdGVyRWZmZWN0PiA+OjppdGVyYXRvciBlbmQgPSBtX2J1
aWx0aW5FZmZlY3RzLmVuZCgpOwogICAgICAgICBmb3IgKEhhc2hNYXA8QXRvbWljU3RyaW5nLCBS
ZWZQdHI8RmlsdGVyRWZmZWN0PiA+OjppdGVyYXRvciBpdGVyYXRvciA9IG1fYnVpbHRpbkVmZmVj
dHMuYmVnaW4oKTsgaXRlcmF0b3IgIT0gZW5kOyArK2l0ZXJhdG9yKQotICAgICAgICAgICAgIG1f
ZWZmZWN0UmVmZXJlbmNlcy5hZGQoaXRlcmF0b3ItPnNlY29uZCwgRmlsdGVyRWZmZWN0U2V0KCkp
OworICAgICAgICAgICAgIG1fZWZmZWN0UmVmZXJlbmNlcy5hZGQoaXRlcmF0b3ItPnZhbHVlLCBG
aWx0ZXJFZmZlY3RTZXQoKSk7CiAgICAgfQogCiAgICAgSGFzaE1hcDxBdG9taWNTdHJpbmcsIFJl
ZlB0cjxGaWx0ZXJFZmZlY3Q+ID4gbV9idWlsdGluRWZmZWN0czsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHkuaCBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHkuaAppbmRleCA2ZGZkYWM2
ZGQ1NzhhZjMwZjZkZWFiN2NkMjY1ODM2MDQ0MmYzYWRmLi42YTFmMDA5N2I2MWJjMGI1ZGIwOTgw
MTU1MDkwM2MxOTA0NDk2N2JhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVy
dGllcy9TVkdBbmltYXRlZFByb3BlcnR5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3Bl
cnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eS5oCkBAIC01OCw4ICs1OCw4IEBAIHB1YmxpYzoKICAg
ICAgICAgQ2FjaGUqIGNhY2hlID0gYW5pbWF0ZWRQcm9wZXJ0eUNhY2hlKCk7CiAgICAgICAgIGNv
bnN0IENhY2hlOjpjb25zdF9pdGVyYXRvciBlbmQgPSBjYWNoZS0+ZW5kKCk7CiAgICAgICAgIGZv
ciAoQ2FjaGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY2FjaGUtPmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgewotICAgICAgICAgICAgaWYgKGl0LT5zZWNvbmQgPT0gdGhpcykgewotICAgICAgICAg
ICAgICAgIGNhY2hlLT5yZW1vdmUoaXQtPmZpcnN0KTsKKyAgICAgICAgICAgIGlmIChpdC0+dmFs
dWUgPT0gdGhpcykgeworICAgICAgICAgICAgICAgIGNhY2hlLT5yZW1vdmUoaXQtPmtleSk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0F0dHJpYnV0ZVRvUHJvcGVydHlN
YXAuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQXR0cmlidXRlVG9Qcm9w
ZXJ0eU1hcC5jcHAKaW5kZXggYmUzMWNjM2M3ZGEyZjUwZjUxZjY5YjU1NDQwMjY1ZGIxMzViNTI4
Yy4uY2M0NmNjZmEwODFmZmM4ODMwOWI3ZWYyMmQ2M2YwZjM0ZWZkODE3YyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQXR0cmlidXRlVG9Qcm9wZXJ0eU1hcC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQXR0cmlidXRlVG9Qcm9w
ZXJ0eU1hcC5jcHAKQEAgLTMxLDcgKzMxLDcgQEAgdm9pZCBTVkdBdHRyaWJ1dGVUb1Byb3BlcnR5
TWFwOjphZGRQcm9wZXJ0aWVzKFNWR0F0dHJpYnV0ZVRvUHJvcGVydHlNYXAmIG1hcCkKIHsKICAg
ICBBdHRyaWJ1dGVUb1Byb3BlcnRpZXNNYXA6Oml0ZXJhdG9yIGVuZCA9IG1hcC5tX21hcC5lbmQo
KTsKICAgICBmb3IgKEF0dHJpYnV0ZVRvUHJvcGVydGllc01hcDo6aXRlcmF0b3IgaXQgPSBtYXAu
bV9tYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFByb3BlcnRpZXNWZWN0
b3IqIHZlY3RvciA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFByb3BlcnRpZXNWZWN0b3IqIHZlY3Rv
ciA9IGl0LT52YWx1ZTsKICAgICAgICAgQVNTRVJUKHZlY3Rvcik7CiAKICAgICAgICAgUHJvcGVy
dGllc1ZlY3Rvcjo6aXRlcmF0b3IgdmVjdG9yRW5kID0gdmVjdG9yLT5lbmQoKTsKQEAgLTgxLDEy
ICs4MSwxMiBAQCB2b2lkIFNWR0F0dHJpYnV0ZVRvUHJvcGVydHlNYXA6OnN5bmNocm9uaXplUHJv
cGVydGllcyhTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudAogICAgIEFTU0VSVChjb250ZXh0RWxl
bWVudCk7CiAgICAgQXR0cmlidXRlVG9Qcm9wZXJ0aWVzTWFwOjppdGVyYXRvciBlbmQgPSBtX21h
cC5lbmQoKTsKICAgICBmb3IgKEF0dHJpYnV0ZVRvUHJvcGVydGllc01hcDo6aXRlcmF0b3IgaXQg
PSBtX21hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgUHJvcGVydGllc1Zl
Y3RvciogdmVjdG9yID0gaXQtPnNlY29uZDsKKyAgICAgICAgUHJvcGVydGllc1ZlY3RvciogdmVj
dG9yID0gaXQtPnZhbHVlOwogICAgICAgICBBU1NFUlQodmVjdG9yKTsKIAogICAgICAgICBQcm9w
ZXJ0aWVzVmVjdG9yOjppdGVyYXRvciB2ZWN0b3JFbmQgPSB2ZWN0b3ItPmVuZCgpOwogICAgICAg
ICBmb3IgKFByb3BlcnRpZXNWZWN0b3I6Oml0ZXJhdG9yIHZlY3Rvckl0ID0gdmVjdG9yLT5iZWdp
bigpOyB2ZWN0b3JJdCAhPSB2ZWN0b3JFbmQ7ICsrdmVjdG9ySXQpCi0gICAgICAgICAgICBzeW5j
aHJvbml6ZVByb3BlcnR5KGNvbnRleHRFbGVtZW50LCBpdC0+Zmlyc3QsICp2ZWN0b3JJdCk7Cisg
ICAgICAgICAgICBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnRleHRFbGVtZW50LCBpdC0+a2V5LCAq
dmVjdG9ySXQpOwogICAgIH0gCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtl
cnMvV29ya2VyQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRl
eHQuY3BwCmluZGV4IGQ3ZWFmNWRiNDZlZThjYTc4MGViNzYxYzhmNDJiNDc2YzkwNTU3NDguLmE2
OWZiNzI0NmZiY2ZhZjZiZTZmODg4NzcyMzdjYmUxYTZmYjQxY2EgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
d29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcApAQCAtMTg0LDcgKzE4NCw3IEBAIGJvb2wgV29ya2Vy
Q29udGV4dDo6aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QKICAgICBBY3RpdmVET01PYmplY3Rz
TWFwJiBhY3RpdmVPYmplY3RzID0gYWN0aXZlRE9NT2JqZWN0cygpOwogICAgIEFjdGl2ZURPTU9i
amVjdHNNYXA6OmNvbnN0X2l0ZXJhdG9yIGFjdGl2ZU9iamVjdHNFbmQgPSBhY3RpdmVPYmplY3Rz
LmVuZCgpOwogICAgIGZvciAoQWN0aXZlRE9NT2JqZWN0c01hcDo6Y29uc3RfaXRlcmF0b3IgaXRl
ciA9IGFjdGl2ZU9iamVjdHMuYmVnaW4oKTsgaXRlciAhPSBhY3RpdmVPYmplY3RzRW5kOyArK2l0
ZXIpIHsKLSAgICAgICAgaWYgKGl0ZXItPmZpcnN0LT5oYXNQZW5kaW5nQWN0aXZpdHkoKSkKKyAg
ICAgICAgaWYgKGl0ZXItPmtleS0+aGFzUGVuZGluZ0FjdGl2aXR5KCkpCiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
V29ya2VyRXZlbnRRdWV1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckV2ZW50
UXVldWUuY3BwCmluZGV4IDU5YTkzMDdlYWMxNzg0YjY5OWMzZmVkMjBhNDU1YTc5ZjA4OTEwN2Uu
LjIzNTUyOWYxZmViOTcxMjhjMzFkOTZhMzBkYTBjZGZmYmJlOWQwZWIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyRXZlbnRRdWV1ZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvd29ya2Vycy9Xb3JrZXJFdmVudFF1ZXVlLmNwcApAQCAtMTI3LDcgKzEyNyw3IEBAIHZv
aWQgV29ya2VyRXZlbnRRdWV1ZTo6Y2xvc2UoKQogewogICAgIG1faXNDbG9zZWQgPSB0cnVlOwog
ICAgIGZvciAoRXZlbnRUYXNrTWFwOjppdGVyYXRvciBpdCA9IG1fZXZlbnRUYXNrTWFwLmJlZ2lu
KCk7IGl0ICE9IG1fZXZlbnRUYXNrTWFwLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIEV2ZW50RGlz
cGF0Y2hlclRhc2sqIHRhc2sgPSBpdC0+c2Vjb25kOworICAgICAgICBFdmVudERpc3BhdGNoZXJU
YXNrKiB0YXNrID0gaXQtPnZhbHVlOwogICAgICAgICB0YXNrLT5jYW5jZWwoKTsKICAgICB9CiAg
ICAgbV9ldmVudFRhc2tNYXAuY2xlYXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3ht
bC9YTUxIdHRwUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3Qu
Y3BwCmluZGV4IDExMWE2NDlhMTNlNzZhZWY4MzcwYjE4MmM5NTFjYTllNzVjZmIyMmUuLjQ1ZjNm
Y2RiZTYyYzcwYWEwMTA0NWZiZGFkMTk2NjI3N2I2MzI5ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hN
TEh0dHBSZXF1ZXN0LmNwcApAQCAtOTIwLDcgKzkyMCw3IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6
OnNldFJlcXVlc3RIZWFkZXJJbnRlcm5hbChjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0
IFN0CiB7CiAgICAgSFRUUEhlYWRlck1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fcmVxdWVzdEhl
YWRlcnMuYWRkKG5hbWUsIHZhbHVlKTsKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAg
ICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCArPSAiLCAiICsgdmFsdWU7CisgICAgICAgIHJl
c3VsdC5pdGVyYXRvci0+dmFsdWUgKz0gIiwgIiArIHZhbHVlOwogfQogCiBTdHJpbmcgWE1MSHR0
cFJlcXVlc3Q6OmdldFJlcXVlc3RIZWFkZXIoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKSBjb25z
dApAQCAtOTQ3LDE2ICs5NDcsMTYgQEAgU3RyaW5nIFhNTEh0dHBSZXF1ZXN0OjpnZXRBbGxSZXNw
b25zZUhlYWRlcnMoRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiAgICAgICAgIC8vICAgICAyKSBU
aGVyZSdzIG5vIGtub3duIGhhcm0gaW4gaGlkaW5nIFNldC1Db29raWUgaGVhZGVyIGZpZWxkcyBl
bnRpcmVseTsgd2UgZG9uJ3QKICAgICAgICAgLy8gICAgICAgIGtub3cgYW55IHdpZGVseSB1c2Vk
IHRlY2huaXF1ZSB0aGF0IHJlcXVpcmVzIGFjY2VzcyB0byB0aGVtLgogICAgICAgICAvLyAgICAg
MykgRmlyZWZveCBoYXMgaW1wbGVtZW50ZWQgdGhpcyBwb2xpY3kuCi0gICAgICAgIGlmIChpc1Nl
dENvb2tpZUhlYWRlcihpdC0+Zmlyc3QpICYmICFzZWN1cml0eU9yaWdpbigpLT5jYW5Mb2FkTG9j
YWxSZXNvdXJjZXMoKSkKKyAgICAgICAgaWYgKGlzU2V0Q29va2llSGVhZGVyKGl0LT5rZXkpICYm
ICFzZWN1cml0eU9yaWdpbigpLT5jYW5Mb2FkTG9jYWxSZXNvdXJjZXMoKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogCi0gICAgICAgIGlmICghbV9zYW1lT3JpZ2luUmVxdWVzdCAmJiAhaXNPbkFj
Y2Vzc0NvbnRyb2xSZXNwb25zZUhlYWRlcldoaXRlbGlzdChpdC0+Zmlyc3QpICYmICFhY2Nlc3ND
b250cm9sRXhwb3NlSGVhZGVyU2V0LmNvbnRhaW5zKGl0LT5maXJzdCkpCisgICAgICAgIGlmICgh
bV9zYW1lT3JpZ2luUmVxdWVzdCAmJiAhaXNPbkFjY2Vzc0NvbnRyb2xSZXNwb25zZUhlYWRlcldo
aXRlbGlzdChpdC0+a2V5KSAmJiAhYWNjZXNzQ29udHJvbEV4cG9zZUhlYWRlclNldC5jb250YWlu
cyhpdC0+a2V5KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKGl0LT5maXJzdCk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5r
ZXkpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnOicpOwogICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZCgnICcpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+c2Vj
b25kKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPnZhbHVlKTsKICAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xyJyk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KCdcbicpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aEZ1bmN0
aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhGdW5jdGlvbnMuY3BwCmluZGV4IDNj
OTBlM2I1MTcxODU5YTU2ZTg3MmJiNzY1MmY1OTU5OGE2MzdkMmEuLjAwMTliYzQzNjUwNGJhMmIy
MWRlZmVmZjMwZjY0ODBjMWVmOTgxZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9Y
UGF0aEZ1bmN0aW9ucy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoRnVuY3Rpb25z
LmNwcApAQCAtNzIzLDcgKzcyMyw3IEBAIEZ1bmN0aW9uKiBjcmVhdGVGdW5jdGlvbihjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uKj4mIGFyZ3MpCiAgICAgSGFzaE1h
cDxTdHJpbmcsIEZ1bmN0aW9uUmVjPjo6aXRlcmF0b3IgZnVuY3Rpb25NYXBJdGVyID0gZnVuY3Rp
b25NYXAtPmZpbmQobmFtZSk7CiAgICAgRnVuY3Rpb25SZWMqIGZ1bmN0aW9uUmVjID0gMDsKIAot
ICAgIGlmIChmdW5jdGlvbk1hcEl0ZXIgPT0gZnVuY3Rpb25NYXAtPmVuZCgpIHx8ICEoZnVuY3Rp
b25SZWMgPSAmZnVuY3Rpb25NYXBJdGVyLT5zZWNvbmQpLT5hcmdzLmNvbnRhaW5zKGFyZ3Muc2l6
ZSgpKSkKKyAgICBpZiAoZnVuY3Rpb25NYXBJdGVyID09IGZ1bmN0aW9uTWFwLT5lbmQoKSB8fCAh
KGZ1bmN0aW9uUmVjID0gJmZ1bmN0aW9uTWFwSXRlci0+dmFsdWUpLT5hcmdzLmNvbnRhaW5zKGFy
Z3Muc2l6ZSgpKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBGdW5jdGlvbiogZnVuY3Rpb24g
PSBmdW5jdGlvblJlYy0+ZmFjdG9yeUZuKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94
bWwvWFBhdGhQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoUGFyc2VyLmNwcApp
bmRleCBiNWU2YTkyMzc1OTNiNGFhYTJhMjQzZjJmZjlkODZlNTdmOTMwYTk3Li43NDkxODBkYmU1
ZWU4ZjliMTIyZmNkYTFlNjk4MTY5YzAwOWY4ZjgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS94bWwvWFBhdGhQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aFBhcnNl
ci5jcHAKQEAgLTEwMyw3ICsxMDMsNyBAQCBzdGF0aWMgYm9vbCBpc0F4aXNOYW1lKGNvbnN0IFN0
cmluZyYgbmFtZSwgU3RlcDo6QXhpcyYgdHlwZSkKICAgICBBeGlzTmFtZXNNYXA6Oml0ZXJhdG9y
IGl0ID0gYXhpc05hbWVzLmZpbmQobmFtZSk7CiAgICAgaWYgKGl0ID09IGF4aXNOYW1lcy5lbmQo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHR5cGUgPSBpdC0+c2Vjb25kOworICAgIHR5
cGUgPSBpdC0+dmFsdWU7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yTGlieHNsdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94
bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwCmluZGV4IGUyMWM4MjdjMjVkYmM1ZWZkMzFiZTcw
NWY5ZjM2ZjUyZGU1NDgyNDEuLmE5MTI5ODhkYTYzOGNjZjg0MmU3YjE3YWY1ZTQzNDQ2ZThhMzJk
MjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yTGlieHNsdC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JMaWJ4c2x0LmNwcApAQCAt
MjI1LDggKzIyNSw4IEBAIHN0YXRpYyBjb25zdCBjaGFyKiogeHNsdFBhcmFtQXJyYXlGcm9tUGFy
YW1ldGVyTWFwKFhTTFRQcm9jZXNzb3I6OlBhcmFtZXRlck1hcCYKICAgICBYU0xUUHJvY2Vzc29y
OjpQYXJhbWV0ZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IHBhcmFtZXRlcnMuZW5kKCk7CiAgICAgdW5z
aWduZWQgaW5kZXggPSAwOwogICAgIGZvciAoWFNMVFByb2Nlc3Nvcjo6UGFyYW1ldGVyTWFwOjpp
dGVyYXRvciBpdCA9IHBhcmFtZXRlcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAg
ICAgIHBhcmFtZXRlckFycmF5W2luZGV4KytdID0gZmFzdFN0ckR1cChpdC0+Zmlyc3QudXRmOCgp
LmRhdGEoKSk7Ci0gICAgICAgIHBhcmFtZXRlckFycmF5W2luZGV4KytdID0gZmFzdFN0ckR1cChp
dC0+c2Vjb25kLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBwYXJhbWV0ZXJBcnJheVtpbmRleCsr
XSA9IGZhc3RTdHJEdXAoaXQtPmtleS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgcGFyYW1ldGVy
QXJyYXlbaW5kZXgrK10gPSBmYXN0U3RyRHVwKGl0LT52YWx1ZS51dGY4KCkuZGF0YSgpKTsKICAg
ICB9CiAgICAgcGFyYW1ldGVyQXJyYXlbaW5kZXhdID0gMDsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFNM
VFByb2Nlc3NvclF0LmNwcAppbmRleCBhNjdjNWZkZTc2ZmNjNTY4Y2UzYzRjNjhjNjEwNjBkNDBi
YjkzMTBjLi4wYzQxNDBhOGQ3OWVkZWZhNTAyMzM1ZmUwMTgzMTJmNDc1ZjE3MGY0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvclF0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvclF0LmNwcApAQCAtMTQyLDcgKzE0Miw3IEBAIGJvb2wg
WFNMVFByb2Nlc3Nvcjo6dHJhbnNmb3JtVG9TdHJpbmcoTm9kZSogc291cmNlTm9kZSwgU3RyaW5n
JiwgU3RyaW5nJiByZXN1bHRTCiAKICAgICBYU0xUUHJvY2Vzc29yOjpQYXJhbWV0ZXJNYXA6Oml0
ZXJhdG9yIGVuZCA9IG1fcGFyYW1ldGVycy5lbmQoKTsKICAgICBmb3IgKFhTTFRQcm9jZXNzb3I6
OlBhcmFtZXRlck1hcDo6aXRlcmF0b3IgaXQgPSBtX3BhcmFtZXRlcnMuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KQotICAgICAgICBxdWVyeS5iaW5kVmFyaWFibGUoUVN0cmluZyhpdC0+Zmlyc3Qp
LCBRWG1sSXRlbShRVmFyaWFudChRU3RyaW5nKGl0LT5zZWNvbmQpKSkpOworICAgICAgICBxdWVy
eS5iaW5kVmFyaWFibGUoUVN0cmluZyhpdC0+a2V5KSwgUVhtbEl0ZW0oUVZhcmlhbnQoUVN0cmlu
ZyhpdC0+dmFsdWUpKSkpOwogCiAgICAgUVN0cmluZyBzb3VyY2U7CiAgICAgaWYgKHNvdXJjZUlz
RG9jdW1lbnQgJiYgb3duZXJEb2N1bWVudC0+dHJhbnNmb3JtU291cmNlKCkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL0JhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2JsYWNrYmVycnkvQXBpL0JhY2tpbmdTdG9yZS5jcHAKaW5kZXggZDNjMmNlOTNhNjI1
YjZkY2MxZmIxMzE0NTk4ZGU4ODAxMDY0MWZjYS4uOTY3MTU0ODhhNzk3NzU3NTdjNzMwNmI1ZTQ2
ZjkzODdjMGNhZjM2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9C
YWNraW5nU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvQmFja2lu
Z1N0b3JlLmNwcApAQCAtNzExLDggKzcxMSw4IEBAIHZvaWQgQmFja2luZ1N0b3JlUHJpdmF0ZTo6
c2V0QmFja2luZ1N0b3JlUmVjdChjb25zdCBQbGF0Zm9ybTo6SW50UmVjdCYgYmFja2luZ1N0CiAg
ICAgLy8gb3VyIG5ldyBiYWNraW5nIHN0b3JlIHJlY3QuCiAgICAgVGlsZU1hcDo6Y29uc3RfaXRl
cmF0b3IgdGlsZU1hcEVuZCA9IGN1cnJlbnRNYXAuZW5kKCk7CiAgICAgZm9yIChUaWxlTWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IGN1cnJlbnRNYXAuYmVnaW4oKTsgaXQgIT0gdGlsZU1hcEVuZDsg
KytpdCkgewotICAgICAgICBUaWxlSW5kZXggb2xkSW5kZXggPSBpdC0+Zmlyc3Q7Ci0gICAgICAg
IEJhY2tpbmdTdG9yZVRpbGUqIHRpbGUgPSBpdC0+c2Vjb25kOworICAgICAgICBUaWxlSW5kZXgg
b2xkSW5kZXggPSBpdC0+a2V5OworICAgICAgICBCYWNraW5nU3RvcmVUaWxlKiB0aWxlID0gaXQt
PnZhbHVlOwogCiAgICAgICAgIC8vIFJlc2V0IHRoZSBvbGQgaW5kZXguCiAgICAgICAgIHJlc2V0
VGlsZShvbGRJbmRleCwgdGlsZSwgZmFsc2UgLypyZXNldEJhY2tncm91bmQqLyk7CkBAIC03Njgs
OCArNzY4LDggQEAgdm9pZCBCYWNraW5nU3RvcmVQcml2YXRlOjpzZXRCYWNraW5nU3RvcmVSZWN0
KGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0JiBiYWNraW5nU3QKICAgICBzaXplX3QgaSA9IDA7CiAg
ICAgVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgbGVmdE92ZXJFbmQgPSBsZWZ0T3ZlclRpbGVzLmVu
ZCgpOwogICAgIGZvciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsZWZ0T3ZlclRpbGVz
LmJlZ2luKCk7IGl0ICE9IGxlZnRPdmVyRW5kOyArK2l0KSB7Ci0gICAgICAgIFRpbGVJbmRleCBv
bGRJbmRleCA9IGl0LT5maXJzdDsKLSAgICAgICAgQmFja2luZ1N0b3JlVGlsZSogdGlsZSA9IGl0
LT5zZWNvbmQ7CisgICAgICAgIFRpbGVJbmRleCBvbGRJbmRleCA9IGl0LT5rZXk7CisgICAgICAg
IEJhY2tpbmdTdG9yZVRpbGUqIHRpbGUgPSBpdC0+dmFsdWU7CiAgICAgICAgIGlmIChpID49IGlu
ZGV4ZXNUb0ZpbGwuc2l6ZSgpKSB7CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTc0NCw3ICsxNzQ0LDcgQEAgUGxhdGZvcm06OkludFJl
Y3QgQmFja2luZ1N0b3JlUHJpdmF0ZTo6dmlzaWJsZVRpbGVzUmVjdCgpIGNvbnN0CiAgICAgVGls
ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY3VycmVudE1hcC5lbmQoKTsKICAgICBmb3IgKFRp
bGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY3VycmVudE1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKICAgICAgICAgVGlsZVJlY3QgdGlsZVJlY3Q7Ci0gICAgICAgIHRpbGVSZWN0LmZp
cnN0ID0gaXQtPmZpcnN0OworICAgICAgICB0aWxlUmVjdC5maXJzdCA9IGl0LT5rZXk7CiAgICAg
ICAgIHRpbGVSZWN0LnNlY29uZCA9IHRoaXMtPnRpbGVSZWN0KCk7CiAgICAgICAgIFBsYXRmb3Jt
OjpJbnRSZWN0IHRpbGUgPSBtYXBGcm9tVGlsZXNUb1RyYW5zZm9ybWVkQ29udGVudHModGlsZVJl
Y3QpOwogICAgICAgICBpZiAodGlsZS5pbnRlcnNlY3RzKHZpc2libGVDb250ZW50c1JlY3QoKSkp
CkBAIC0xODA1LDcgKzE4MDUsNyBAQCB2b2lkIEJhY2tpbmdTdG9yZVByaXZhdGU6OnJlc2V0VGls
ZXMoYm9vbCByZXNldEJhY2tncm91bmQpCiAKICAgICBUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBl
bmQgPSBjdXJyZW50TWFwLmVuZCgpOwogICAgIGZvciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBjdXJyZW50TWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgcmVzZXRU
aWxlKGl0LT5maXJzdCwgaXQtPnNlY29uZCwgcmVzZXRCYWNrZ3JvdW5kKTsKKyAgICAgICAgcmVz
ZXRUaWxlKGl0LT5rZXksIGl0LT52YWx1ZSwgcmVzZXRCYWNrZ3JvdW5kKTsKIH0KIAogdm9pZCBC
YWNraW5nU3RvcmVQcml2YXRlOjp1cGRhdGVUaWxlcyhib29sIHVwZGF0ZVZpc2libGUsIGJvb2wg
aW1tZWRpYXRlKQpAQCAtMTgxOCwxMCArMTgxOCwxMCBAQCB2b2lkIEJhY2tpbmdTdG9yZVByaXZh
dGU6OnVwZGF0ZVRpbGVzKGJvb2wgdXBkYXRlVmlzaWJsZSwgYm9vbCBpbW1lZGlhdGUpCiAKICAg
ICBUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBjdXJyZW50TWFwLmVuZCgpOwogICAgIGZv
ciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjdXJyZW50TWFwLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgewotICAgICAgICBib29sIGlzVmlzaWJsZSA9IGlzVGlsZVZpc2libGUoaXQt
PmZpcnN0KTsKKyAgICAgICAgYm9vbCBpc1Zpc2libGUgPSBpc1RpbGVWaXNpYmxlKGl0LT5rZXkp
OwogICAgICAgICBpZiAoIXVwZGF0ZVZpc2libGUgJiYgaXNWaXNpYmxlKQogICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIHVwZGF0ZVRpbGUoaXQtPmZpcnN0LCBpbW1lZGlhdGUpOworICAg
ICAgICB1cGRhdGVUaWxlKGl0LT5rZXksIGltbWVkaWF0ZSk7CiAgICAgfQogfQogCkBAIC0xODQy
LDggKzE4NDIsOCBAQCB2b2lkIEJhY2tpbmdTdG9yZVByaXZhdGU6OnVwZGF0ZVRpbGVzRm9yU2Ny
b2xsT3JOb3RSZW5kZXJlZFJlZ2lvbihib29sIGNoZWNrTG9hZAogCiAgICAgVGlsZU1hcDo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gY3VycmVudE1hcC5lbmQoKTsKICAgICBmb3IgKFRpbGVNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gY3VycmVudE1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
LSAgICAgICAgVGlsZUluZGV4IGluZGV4ID0gaXQtPmZpcnN0OwotICAgICAgICBCYWNraW5nU3Rv
cmVUaWxlKiB0aWxlID0gaXQtPnNlY29uZDsKKyAgICAgICAgVGlsZUluZGV4IGluZGV4ID0gaXQt
PmtleTsKKyAgICAgICAgQmFja2luZ1N0b3JlVGlsZSogdGlsZSA9IGl0LT52YWx1ZTsKICAgICAg
ICAgYm9vbCBpc1Zpc2libGUgPSBpc1RpbGVWaXNpYmxlKGluZGV4KTsKICAgICAgICAgLy8gVGhl
IHJlY3QgaW4gdHJhbnNmb3JtZWQgY29udGVudHMgY29vcmRpbmF0ZXMuCiAgICAgICAgIFBsYXRm
b3JtOjpJbnRSZWN0IHJlY3Qob3JpZ2luT2ZUaWxlKGluZGV4KSwgdGlsZVNpemUoKSk7CkBAIC0x
OTg2LDggKzE5ODYsOCBAQCBCYWNraW5nU3RvcmVQcml2YXRlOjpUaWxlUmVjdExpc3QgQmFja2lu
Z1N0b3JlUHJpdmF0ZTo6bWFwRnJvbVRyYW5zZm9ybWVkQ29udGVudAogICAgIFRpbGVSZWN0TGlz
dCB0aWxlUmVjdExpc3Q7CiAgICAgVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gdGlsZU1h
cC5lbmQoKTsKICAgICBmb3IgKFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdGlsZU1hcC5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgVGlsZUluZGV4IGluZGV4ID0gaXQt
PmZpcnN0OwotICAgICAgICBCYWNraW5nU3RvcmVUaWxlKiB0aWxlID0gaXQtPnNlY29uZDsKKyAg
ICAgICAgVGlsZUluZGV4IGluZGV4ID0gaXQtPmtleTsKKyAgICAgICAgQmFja2luZ1N0b3JlVGls
ZSogdGlsZSA9IGl0LT52YWx1ZTsKIAogICAgICAgICAvLyBOZWVkIHRvIG1hcCB0aGUgcmVjdCB0
byB0aWxlIGNvb3JkaW5hdGVzLgogICAgICAgICBQbGF0Zm9ybTo6SW50UmVjdCByID0gcmVjdDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9Ob3Rp
ZmljYXRpb25QcmVzZW50ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJD
b3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmNwcAppbmRleCA2YjI5MjEwMjk0
NjI3N2RhMjhlNzk4ZDdlZWRmOGI5MzljNTMxOWM3Li4yY2Q3YzE3NDUyN2RmMTBmMzkwYTE2NWJh
YTdiZDk2ZjRmNTNmZDhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2Vi
Q29yZVN1cHBvcnQvTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbC5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlckltcGwu
Y3BwCkBAIC04MSw3ICs4MSw3IEBAIHZvaWQgTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6Y2Fu
Y2VsKE5vdGlmaWNhdGlvbiogbm90aWZpY2F0aW9uKQogICAgIGlmIChpdCA9PSBtX25vdGlmaWNh
dGlvbnMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcGxhdGZvcm1QcmVzZW50ZXIt
PmNhbmNlbChzdGQ6OnN0cmluZyhpdC0+c2Vjb25kLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICBtX3Bs
YXRmb3JtUHJlc2VudGVyLT5jYW5jZWwoc3RkOjpzdHJpbmcoaXQtPnZhbHVlLnV0ZjgoKS5kYXRh
KCkpKTsKICAgICBtX25vdGlmaWNhdGlvbnMucmVtb3ZlKGl0KTsKIH0KIApAQCAtMTA4LDEyICsx
MDgsMTIgQEAgdm9pZCBOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpvblBlcm1pc3Npb24oY29u
c3Qgc3RkOjpzdHJpbmcmIGRvbWFpbiwgYm9vbCBpc0EKICAgICBTdHJpbmcgZG9tYWluU3RyaW5n
ID0gU3RyaW5nOjpmcm9tVVRGOChkb21haW4uY19zdHIoKSk7CiAgICAgUGVybWlzc2lvblJlcXVl
c3RNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wZXJtaXNzaW9uUmVxdWVzdHMuYmVnaW4oKTsKICAgICBm
b3IgKDsgaXQgIT0gbV9wZXJtaXNzaW9uUmVxdWVzdHMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAg
aWYgKGl0LT5maXJzdC0+dXJsKCkuaG9zdCgpICE9IGRvbWFpblN0cmluZykKKyAgICAgICAgaWYg
KGl0LT5rZXktPnVybCgpLmhvc3QoKSAhPSBkb21haW5TdHJpbmcpCiAgICAgICAgICAgICBjb250
aW51ZTsKIAogICAgICAgICBpZiAoaXNBbGxvd2VkKSB7CiAgICAgICAgICAgICBtX2FsbG93ZWRE
b21haW5zLmFkZChkb21haW5TdHJpbmcpOwotICAgICAgICAgICAgaXQtPnNlY29uZC0+aGFuZGxl
RXZlbnQoKTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+aGFuZGxlRXZlbnQoKTsKICAgICAgICAg
fSBlbHNlCiAgICAgICAgICAgICBtX2FsbG93ZWREb21haW5zLnJlbW92ZShkb21haW5TdHJpbmcp
OwogCkBAIC0xNDQsOSArMTQ0LDkgQEAgdm9pZCBOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpu
b3RpZmljYXRpb25DbGlja2VkKGNvbnN0IHN0ZDo6c3RyaW5nJiBpZCkKICAgICBTdHJpbmcgaWRT
dHJpbmcgPSBTdHJpbmc6OmZyb21VVEY4KGlkLmNfc3RyKCkpOwogICAgIE5vdGlmaWNhdGlvbk1h
cDo6aXRlcmF0b3IgaXQgPSBtX25vdGlmaWNhdGlvbnMuYmVnaW4oKTsKICAgICBmb3IgKDsgaXQg
IT0gbV9ub3RpZmljYXRpb25zLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25k
ID09IGlkU3RyaW5nICYmIGl0LT5maXJzdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSB7Ci0g
ICAgICAgICAgICBSZWZQdHI8Tm90aWZpY2F0aW9uPiBub3RpZmljYXRpb24gPSBpdC0+Zmlyc3Q7
Ci0gICAgICAgICAgICBpdC0+Zmlyc3QtPmRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVu
dE5hbWVzKCkuY2xpY2tFdmVudCwgZmFsc2UsIHRydWUpKTsKKyAgICAgICAgaWYgKGl0LT52YWx1
ZSA9PSBpZFN0cmluZyAmJiBpdC0+Zmlyc3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkgewor
ICAgICAgICAgICAgUmVmUHRyPE5vdGlmaWNhdGlvbj4gbm90aWZpY2F0aW9uID0gaXQtPmtleTsK
KyAgICAgICAgICAgIGl0LT5rZXktPmRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5h
bWVzKCkuY2xpY2tFdmVudCwgZmFsc2UsIHRydWUpKTsKICAgICAgICAgICAgIG1fbm90aWZpY2F0
aW9ucy5yZW1vdmUobm90aWZpY2F0aW9uKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvQWJv
dXREYXRhLmNwcCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0Fib3V0
RGF0YS5jcHAKaW5kZXggN2I3YTFkNTlhYjg1NzgxYzI5ZWI5MjE5ZWIzNTcyY2I2ODcwOTNlNC4u
NWUxYjc3ZTNiM2Y5ZjM2MzYyM2M0ZmI2ZjFhNmQwODkxM2FhMDEyYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvQWJvdXREYXRhLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9BYm91dERhdGEuY3BwCkBAIC0y
MDUsNyArMjA1LDcgQEAgc3RhdGljIHZvaWQgZHVtcEpTQ1R5cGVDb3VudFNldFRvVGFibGVIVE1M
KFN0cmluZyYgdGFibGVIVE1MLCBKU0M6OlR5cGVDb3VudFNldCoKICAgICAgICAgcmV0dXJuOwog
CiAgICAgZm9yIChKU0M6OlR5cGVDb3VudFNldDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHR5cGVD
b3VudFNldC0+YmVnaW4oKTsgaXRlciAhPSB0eXBlQ291bnRTZXQtPmVuZCgpOyArK2l0ZXIpCi0g
ICAgICAgIHRhYmxlSFRNTCArPSBudW1iZXJUb0hUTUxUcihpdGVyLT5maXJzdCwgaXRlci0+c2Vj
b25kKTsKKyAgICAgICAgdGFibGVIVE1MICs9IG51bWJlclRvSFRNTFRyKGl0ZXItPmtleSwgaXRl
ci0+dmFsdWUpOwogfQogCiBzdGF0aWMgU3RyaW5nIG1lbW9yeVBhZ2UoKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvRnJhbWVMYXllcnMuY3BwIGIv
U291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvRnJhbWVMYXllcnMuY3BwCmlu
ZGV4IGE0OWY1OTRmMmMyMGMyYzMxNzkzMjM5MmQ3MWE1NDU2ODliNWM0NjcuLjI3YzYyYjYwMDBk
NTc2MmQzOWVkMTE2MmZlYmQ0MzZiNDMzOGQ1NWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
YmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0ZyYW1lTGF5ZXJzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9GcmFtZUxheWVycy5jcHAKQEAgLTkxLDcgKzkx
LDcgQEAgdm9pZCBGcmFtZUxheWVyczo6cmVtb3ZlTGF5ZXJCeUZyYW1lKEZyYW1lKiBmcmFtZSkK
ICAgICBBU1NFUlQoZnJhbWUpOwogICAgIEZyYW1lTGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9m
cmFtZUxheWVycy5maW5kKGZyYW1lKTsKICAgICBpZiAoaXQgIT0gbV9mcmFtZUxheWVycy5lbmQo
KSkgewotICAgICAgICBMYXllcldlYktpdFRocmVhZCogbGF5ZXIgPSBpdC0+c2Vjb25kOworICAg
ICAgICBMYXllcldlYktpdFRocmVhZCogbGF5ZXIgPSBpdC0+dmFsdWU7CiAgICAgICAgIGlmIChs
YXllci0+c3VwZXJsYXllcigpKQogICAgICAgICAgICAgbGF5ZXItPnJlbW92ZUZyb21TdXBlcmxh
eWVyKCk7CiAgICAgICAgIG1fZnJhbWVMYXllcnMucmVtb3ZlKGl0KTsKQEAgLTEwNCw3ICsxMDQs
NyBAQCB2b2lkIEZyYW1lTGF5ZXJzOjpjb21taXRPbldlYktpdFRocmVhZChkb3VibGUgc2NhbGUp
CiAgICAgQVNTRVJUKG1fcm9vdExheWVyKTsKICAgICBpZiAoIWlzUm9vdExheWVyTWFpbkZyYW1l
TGF5ZXIoKSkgewogICAgICAgICBmb3IgKEZyYW1lTGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9m
cmFtZUxheWVycy5iZWdpbigpOyBpdCAhPSBtX2ZyYW1lTGF5ZXJzLmVuZCgpOyArK2l0KQotICAg
ICAgICAgICAgaXQtPnNlY29uZC0+c2V0QWJzb2x1dGVPZmZzZXQoZnJhbWVMYXllckFic29sdXRl
T2Zmc2V0KGl0LT5maXJzdCkpOworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRBYnNvbHV0ZU9m
ZnNldChmcmFtZUxheWVyQWJzb2x1dGVPZmZzZXQoaXQtPmtleSkpOwogICAgIH0KICAgICBtX3Jv
b3RMYXllci0+Y29tbWl0T25XZWJLaXRUaHJlYWQoc2NhbGUpOwogfQpAQCAtMTEyLDcgKzExMiw3
IEBAIHZvaWQgRnJhbWVMYXllcnM6OmNvbW1pdE9uV2ViS2l0VGhyZWFkKGRvdWJsZSBzY2FsZSkK
IHZvaWQgRnJhbWVMYXllcnM6OmNhbGN1bGF0ZVJvb3RMYXllcigpCiB7CiAgICAgaWYgKG1fZnJh
bWVMYXllcnMuc2l6ZSgpID09IDEgJiYgbV9mcmFtZUxheWVycy5iZWdpbigpLT5maXJzdCA9PSBt
X3BhZ2VQcml2YXRlLT5tX21haW5GcmFtZSkKLSAgICAgICAgbV9yb290TGF5ZXIgPSBtX2ZyYW1l
TGF5ZXJzLmJlZ2luKCktPnNlY29uZDsKKyAgICAgICAgbV9yb290TGF5ZXIgPSBtX2ZyYW1lTGF5
ZXJzLmJlZ2luKCktPnZhbHVlOwogICAgIGVsc2UgaWYgKG1fcm9vdEdyYXBoaWNzTGF5ZXIpCiAg
ICAgICAgIG1fcm9vdExheWVyID0gbV9yb290R3JhcGhpY3NMYXllci0+cGxhdGZvcm1MYXllcigp
OwogICAgIGVsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdl
b2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYkdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyLmNwcAppbmRl
eCA0YzBlZDljZDcxN2I2ZjRkNWFhNmFmYWY5NzBiZWI2OTY3OTY4OWQzLi4xZWVhYzY2N2JkZjY2
YjNmMTkzZmIzMzVhMzg3MTI4ZmJjOTEyNjc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVx
dWVzdE1hbmFnZXIuY3BwCkBAIC02NCw3ICs2NCw3IEBAIGJvb2wgV2ViR2VvbG9jYXRpb25QZXJt
aXNzaW9uUmVxdWVzdE1hbmFnZXI6OnJlbW92ZShjb25zdCBXZWJLaXQ6OldlYkdlb2xvY2F0aW9u
CiAgICAgR2VvbG9jYXRpb25JZE1hcDo6aXRlcmF0b3IgaXQgPSBtX3ByaXZhdGUtPm1fZ2VvbG9j
YXRpb25JZE1hcC5maW5kKGdlb2xvY2F0aW9uKTsKICAgICBpZiAoaXQgPT0gbV9wcml2YXRlLT5t
X2dlb2xvY2F0aW9uSWRNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZCA9
IGl0LT5zZWNvbmQ7CisgICAgaWQgPSBpdC0+dmFsdWU7CiAgICAgbV9wcml2YXRlLT5tX2dlb2xv
Y2F0aW9uSWRNYXAucmVtb3ZlKGl0KTsKICAgICBtX3ByaXZhdGUtPm1faWRHZW9sb2NhdGlvbk1h
cC5yZW1vdmUoaWQpOwogICAgIHJldHVybiB0cnVlOwpAQCAtNzUsNyArNzUsNyBAQCBib29sIFdl
Ykdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyOjpyZW1vdmUoaW50IGlkLCBXZWJL
aXQ6OldlYkdlb2xvY2F0aQogICAgIElkR2VvbG9jYXRpb25NYXA6Oml0ZXJhdG9yIGl0ID0gbV9w
cml2YXRlLT5tX2lkR2VvbG9jYXRpb25NYXAuZmluZChpZCk7CiAgICAgaWYgKGl0ID09IG1fcHJp
dmF0ZS0+bV9pZEdlb2xvY2F0aW9uTWFwLmVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgR2VvbG9jYXRpb24qIGdlb2xvY2F0aW9uID0gaXQtPnNlY29uZDsKKyAgICBHZW9sb2NhdGlv
biogZ2VvbG9jYXRpb24gPSBpdC0+dmFsdWU7CiAgICAgcGVybWlzc2lvblJlcXVlc3QgPSBXZWJH
ZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0KGdlb2xvY2F0aW9uKTsKICAgICBtX3ByaXZhdGUt
Pm1faWRHZW9sb2NhdGlvbk1hcC5yZW1vdmUoaXQpOwogICAgIG1fcHJpdmF0ZS0+bV9nZW9sb2Nh
dGlvbklkTWFwLnJlbW92ZShnZW9sb2NhdGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJJREJNZXRhZGF0YS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJJREJNZXRhZGF0YS5jcHAKaW5kZXggMDFkODc4YTBhOWYyYzFjODkxNDkxOTFiYzhj
ODcxZDhjZGNmNjUzNy4uZjJmYzI4NTk0NDRjNDhhNzJkZDk0YWRjMTFkMTg4MTdmNWViNDVkOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCTWV0YWRhdGEuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQk1ldGFkYXRhLmNwcApAQCAt
NDYsNyArNDYsNyBAQCBXZWJJREJNZXRhZGF0YTo6V2ViSURCTWV0YWRhdGEoY29uc3QgV2ViQ29y
ZTo6SURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEpCiAKICAgICBzaXplX3QgaSA9IDA7CiAg
ICAgZm9yIChJREJEYXRhYmFzZU1ldGFkYXRhOjpPYmplY3RTdG9yZU1hcDo6Y29uc3RfaXRlcmF0
b3Igc3RvcmVJdGVyYXRvciA9IG1ldGFkYXRhLm9iamVjdFN0b3Jlcy5iZWdpbigpOyBzdG9yZUl0
ZXJhdG9yICE9IG1ldGFkYXRhLm9iamVjdFN0b3Jlcy5lbmQoKTsgKytzdG9yZUl0ZXJhdG9yKSB7
Ci0gICAgICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlID0gc3Rv
cmVJdGVyYXRvci0+c2Vjb25kOworICAgICAgICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRh
JiBvYmplY3RTdG9yZSA9IHN0b3JlSXRlcmF0b3ItPnZhbHVlOwogICAgICAgICBPYmplY3RTdG9y
ZSB3ZWJPYmplY3RTdG9yZTsKICAgICAgICAgd2ViT2JqZWN0U3RvcmUubmFtZSA9IG9iamVjdFN0
b3JlLm5hbWU7CiAgICAgICAgIHdlYk9iamVjdFN0b3JlLmtleVBhdGggPSBvYmplY3RTdG9yZS5r
ZXlQYXRoOwpAQCAtNTUsNyArNTUsNyBAQCBXZWJJREJNZXRhZGF0YTo6V2ViSURCTWV0YWRhdGEo
Y29uc3QgV2ViQ29yZTo6SURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEpCiAKICAgICAgICAg
c2l6ZV90IGogPSAwOwogICAgICAgICBmb3IgKElEQk9iamVjdFN0b3JlTWV0YWRhdGE6OkluZGV4
TWFwOjpjb25zdF9pdGVyYXRvciBpbmRleEl0ZXJhdG9yID0gb2JqZWN0U3RvcmUuaW5kZXhlcy5i
ZWdpbigpOyBpbmRleEl0ZXJhdG9yICE9IG9iamVjdFN0b3JlLmluZGV4ZXMuZW5kKCk7ICsraW5k
ZXhJdGVyYXRvcikgewotICAgICAgICAgICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXgg
PSBpbmRleEl0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgICAgICBjb25zdCBJREJJbmRleE1ldGFk
YXRhJiBpbmRleCA9IGluZGV4SXRlcmF0b3ItPnZhbHVlOwogICAgICAgICAgICAgSW5kZXggd2Vi
SW5kZXg7CiAgICAgICAgICAgICB3ZWJJbmRleC5uYW1lID0gaW5kZXgubmFtZTsKICAgICAgICAg
ICAgIHdlYkluZGV4LmtleVBhdGggPSBpbmRleC5rZXlQYXRoOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW50ZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkludGVudC5jcHAKaW5kZXggNTU3NzVlY2ZjZGMxNjIwNGU1ODQwNmExNTc4YWU4
ZWI2Njg3ZWQ4Yy4uMDQxYzdmMmU5YzUwMzU3NTliZDhlM2ViYjM0M2ZjNGNmZmRiN2QwZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW50ZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJbnRlbnQuY3BwCkBAIC0xODgsNyArMTg4LDcg
QEAgV2ViU3RyaW5nIFdlYkludGVudDo6ZXh0cmFzVmFsdWUoY29uc3QgV2ViU3RyaW5nJiBuYW1l
KSBjb25zdAogICAgIFdURjo6SGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9y
IHZhbCA9IG1fcHJpdmF0ZS0+ZXh0cmFzKCkuZmluZChuYW1lKTsKICAgICBpZiAodmFsID09IG1f
cHJpdmF0ZS0+ZXh0cmFzKCkuZW5kKCkpCiAgICAgICAgIHJldHVybiBXZWJTdHJpbmcoKTsKLSAg
ICByZXR1cm4gdmFsLT5zZWNvbmQ7CisgICAgcmV0dXJuIHZhbC0+dmFsdWU7CiAjZWxzZQogICAg
IHJldHVybiBXZWJTdHJpbmcoKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9XZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyVGVzdC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXJUZXN0
LmNwcAppbmRleCAzNTg5ODNiODM5OTMxNGNkYTAzN2M4YzAzMjQ5ZWU5YjY3MmU5NjdiLi4yNDUx
NGNkNThmYmZkMDBhYWE4ODcyNDJhMWFjMzYzMzFjYWViNzgwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXJUZXN0LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYlNvY2tldEV4dGVuc2lvbkRp
c3BhdGNoZXJUZXN0LmNwcApAQCAtMTAzLDEwICsxMDMsMTAgQEAgVEVTVF9GKFdlYlNvY2tldEV4
dGVuc2lvbkRpc3BhdGNoZXJUZXN0LCBUZXN0UGFyYW1ldGVycykKICAgICBFWFBFQ1RfRVEoMiwg
bV9wYXJzZWRQYXJhbWV0ZXJzWzBdLnNpemUoKSk7CiAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmlu
Zz46Oml0ZXJhdG9yIHBhcmFtZXRlciA9IG1fcGFyc2VkUGFyYW1ldGVyc1swXS5maW5kKCJtYXgt
Y2hhbm5lbHMiKTsKICAgICBFWFBFQ1RfVFJVRShwYXJhbWV0ZXIgIT0gbV9wYXJzZWRQYXJhbWV0
ZXJzWzBdLmVuZCgpKTsKLSAgICBFWFBFQ1RfRVEoIjQiLCBwYXJhbWV0ZXItPnNlY29uZCk7Cisg
ICAgRVhQRUNUX0VRKCI0IiwgcGFyYW1ldGVyLT52YWx1ZSk7CiAgICAgcGFyYW1ldGVyID0gbV9w
YXJzZWRQYXJhbWV0ZXJzWzBdLmZpbmQoImZsb3ctY29udHJvbCIpOwogICAgIEVYUEVDVF9UUlVF
KHBhcmFtZXRlciAhPSBtX3BhcnNlZFBhcmFtZXRlcnNbMF0uZW5kKCkpOwotICAgIEVYUEVDVF9U
UlVFKHBhcmFtZXRlci0+c2Vjb25kLmlzTnVsbCgpKTsKKyAgICBFWFBFQ1RfVFJVRShwYXJhbWV0
ZXItPnZhbHVlLmlzTnVsbCgpKTsKIH0KIAogVEVTVF9GKFdlYlNvY2tldEV4dGVuc2lvbkRpc3Bh
dGNoZXJUZXN0LCBUZXN0TXVsdGlwbGUpCkBAIC0xMzEsMTIgKzEzMSwxMiBAQCBURVNUX0YoV2Vi
U29ja2V0RXh0ZW5zaW9uRGlzcGF0Y2hlclRlc3QsIFRlc3RNdWx0aXBsZSkKICAgICAgICAgY29u
c3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIHBhcnNlZFBhcmFtZXRlcnMgPSBtX3BhcnNlZFBh
cmFtZXRlcnNbaV07CiAgICAgICAgIEVYUEVDVF9FUShleHBlY3RlZFtpXS5wYXJhbWV0ZXJzLnNp
emUoKSwgbV9wYXJzZWRQYXJhbWV0ZXJzW2ldLnNpemUoKSk7CiAgICAgICAgIGZvciAoSGFzaE1h
cDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ZXJhdG9yID0gZXhwZWN0ZWRQYXJh
bWV0ZXJzLmJlZ2luKCk7IGl0ZXJhdG9yICE9IGV4cGVjdGVkUGFyYW1ldGVycy5lbmQoKTsgKytp
dGVyYXRvcikgewotICAgICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0
ZXJhdG9yIHBhcnNlZCA9IHBhcnNlZFBhcmFtZXRlcnMuZmluZChpdGVyYXRvci0+Zmlyc3QpOwor
ICAgICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIHBhcnNl
ZCA9IHBhcnNlZFBhcmFtZXRlcnMuZmluZChpdGVyYXRvci0+a2V5KTsKICAgICAgICAgICAgIEVY
UEVDVF9UUlVFKHBhcnNlZCAhPSBwYXJzZWRQYXJhbWV0ZXJzLmVuZCgpKTsKLSAgICAgICAgICAg
IGlmIChpdGVyYXRvci0+c2Vjb25kLmlzTnVsbCgpKQotICAgICAgICAgICAgICAgIEVYUEVDVF9U
UlVFKHBhcnNlZC0+c2Vjb25kLmlzTnVsbCgpKTsKKyAgICAgICAgICAgIGlmIChpdGVyYXRvci0+
dmFsdWUuaXNOdWxsKCkpCisgICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUocGFyc2VkLT52YWx1
ZS5pc051bGwoKSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgRVhQRUNUX0VR
KGl0ZXJhdG9yLT5zZWNvbmQsIHBhcnNlZC0+c2Vjb25kKTsKKyAgICAgICAgICAgICAgICBFWFBF
Q1RfRVEoaXRlcmF0b3ItPnZhbHVlLCBwYXJzZWQtPnZhbHVlKTsKICAgICAgICAgfQogICAgIH0K
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5k
ZXJUcmVlU3VwcG9ydEVmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9E
dW1wUmVuZGVyVHJlZVN1cHBvcnRFZmwuY3BwCmluZGV4IDk2YTU3OTFlZTJhOWYwNjU0MTFkMjk4
NGFiMGE0ZjgyYTFmYThkYmEuLjY2ZTk3ZmY5NmM2MzMyNWM3MTMyY2NmZDc2NDYwZjE4YjNiZjA5
MDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5k
ZXJUcmVlU3VwcG9ydEVmbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBv
cnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsLmNwcApAQCAtNTQ4LDcgKzU0OCw3IEBAIHZvaWQg
RHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZChj
b25zdCBFdmFzX09iamVjdCoKICAgICBlbHNlIHsKICAgICAgICAgV1RGOjpIYXNoTWFwPGludCwg
UmVmUHRyPFdlYkNvcmU6OkRPTVdyYXBwZXJXb3JsZCA+ID46OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
d29ybGRNYXAuZmluZCh3b3JsZElEKTsKICAgICAgICAgaWYgKGl0ICE9IHdvcmxkTWFwLmVuZCgp
KQotICAgICAgICAgICAgc2NyaXB0V29ybGQgPSAoKml0KS5zZWNvbmQ7CisgICAgICAgICAgICBz
Y3JpcHRXb3JsZCA9ICgqaXQpLnZhbHVlOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIHNj
cmlwdFdvcmxkID0gV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6Y3JlYXRlV29ybGQoKTsKICAg
ICAgICAgICAgIHdvcmxkTWFwLnNldCh3b3JsZElELCBzY3JpcHRXb3JsZCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNFZmwu
Y3BwIGIvU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVz
RWZsLmNwcAppbmRleCA1YjQwMzA4YTIxOTA3NWMwNGZlMTZmMDUzYWE5YzI3ZDMzYWQ0ZDZmLi4w
OThkMzAzYTRhYzU5NWM0Njc2Yjk1NThmMjQyNTYyOTVjNWE3ZTg1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNFZmwuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc0Vm
bC5jcHAKQEAgLTk5LDggKzk5LDggQEAgdm9pZCBQbGF0Zm9ybVN0cmF0ZWdpZXNFZmw6OmdldFBs
dWdpbkluZm8oY29uc3QgUGFnZSogcGFnZSwgVmVjdG9yPFBsdWdpbkluZm8+JgogICAgICAgICBm
b3IgKE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtaW1lVG9EZXNj
cmlwdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBNaW1lQ2xh
c3NJbmZvIG1pbWU7CiAKLSAgICAgICAgICAgIG1pbWUudHlwZSA9IGl0LT5maXJzdDsKLSAgICAg
ICAgICAgIG1pbWUuZGVzYyA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICBtaW1lLnR5cGUgPSBp
dC0+a2V5OworICAgICAgICAgICAgbWltZS5kZXNjID0gaXQtPnZhbHVlOwogICAgICAgICAgICAg
bWltZS5leHRlbnNpb25zID0gcGFja2FnZS0+bWltZVRvRXh0ZW5zaW9ucygpLmdldChtaW1lLnR5
cGUpOwogICAgICAgICAgICAgcGx1Z2luSW5mby5taW1lcy5hcHBlbmQobWltZSk7CiAgICAgICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfaW50ZW50LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfaW50ZW50LmNwcAppbmRleCA3NmMyZDY4ZGFhNzIxMjRl
YTViNjFiN2UyNGYwMzRjMmMwY2RiODFlLi44M2JjZTg3NjRhZjZhZDc5NzQ0MzY5MmY1Mzk2ZTNi
YWFiMzU1ODhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2ludGVudC5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19pbnRlbnQuY3BwCkBAIC0xMjAsNyAr
MTIwLDcgQEAgY29uc3QgY2hhciogZXdrX2ludGVudF9leHRyYV9nZXQoY29uc3QgRXdrX0ludGVu
dCogaW50ZW50LCBjb25zdCBjaGFyKiBrZXkpCiAgICAgV1RGOjpIYXNoTWFwPFN0cmluZywgU3Ry
aW5nPjo6Y29uc3RfaXRlcmF0b3IgdmFsID0gY29yZS0+ZXh0cmFzKCkuZmluZChTdHJpbmc6OmZy
b21VVEY4KGtleSkpOwogICAgIGlmICh2YWwgPT0gY29yZS0+ZXh0cmFzKCkuZW5kKCkpCiAgICAg
ICAgIHJldHVybiAwOwotICAgIHJldHVybiBlaW5hX3N0cmluZ3NoYXJlX2FkZCh2YWwtPnNlY29u
ZC51dGY4KCkuZGF0YSgpKTsKKyAgICByZXR1cm4gZWluYV9zdHJpbmdzaGFyZV9hZGQodmFsLT52
YWx1ZS51dGY4KCkuZGF0YSgpKTsKICNlbHNlCiAgICAgcmV0dXJuIDA7CiAjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2ll
c0d0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0
ZWdpZXNHdGsuY3BwCmluZGV4IDI5MjE3M2FlMjkyZjUxMjExODdlOGJlNTA1MDM5M2Q3YzMzODRj
NWEuLjkxMDNjODQ2MDk0ZDUxZjhmNWI5NDg3NGNkNjdhZjA0Nzk5MDlhZTAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc0d0ay5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVn
aWVzR3RrLmNwcApAQCAtODgsOCArODgsOCBAQCB2b2lkIFBsYXRmb3JtU3RyYXRlZ2llc0d0azo6
Z2V0UGx1Z2luSW5mbyhjb25zdCBQYWdlKiBwYWdlLCBWZWN0b3I8UGx1Z2luSW5mbz4mCiAgICAg
ICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWltZVRvRGVz
Y3JpcHRpb25zLmVuZCgpOwogICAgICAgICBmb3IgKE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7CiAgICAgICAgICAgICBNaW1lQ2xhc3NJbmZvIG1pbWU7Ci0gICAgICAgICAgICBtaW1l
LnR5cGUgPSBpdC0+Zmlyc3Q7Ci0gICAgICAgICAgICBtaW1lLmRlc2MgPSBpdC0+c2Vjb25kOwor
ICAgICAgICAgICAgbWltZS50eXBlID0gaXQtPmtleTsKKyAgICAgICAgICAgIG1pbWUuZGVzYyA9
IGl0LT52YWx1ZTsKICAgICAgICAgICAgIG1pbWUuZXh0ZW5zaW9ucyA9IHBhY2thZ2UtPm1pbWVU
b0V4dGVuc2lvbnMoKS5nZXQobWltZS50eXBlKTsKICAgICAgICAgICAgIHBsdWdpbkluZm8ubWlt
ZXMuYXBwZW5kKG1pbWUpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0ZmF2aWNvbmRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXRmYXZpY29uZGF0YWJhc2UuY3BwCmluZGV4IDZiYWJmZTRkZDkyZTUxNDJjZTBj
NGY3MmMzOWE2Y2I2YzNkZGUxZmYuLmIzYTFkNzVjYTEyYjZhZTBmNjQ1YmY5MmIxMjhhNTgwMGEy
MGVjY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRmYXZpY29u
ZGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRmYXZpY29u
ZGF0YWJhc2UuY3BwCkBAIC02MTQsMTggKzYxNCwxOCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRGYXZp
Y29uRGF0YWJhc2VJbXBvcnRGaW5pc2hlZChXZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRhdGFiYXNl
KQogICAgIFZlY3RvcjxTdHJpbmc+IHRvRGVsZXRlVVJMczsKICAgICBQZW5kaW5nSWNvblJlcXVl
c3RNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGRhdGFiYXNlLT5wcml2LT5wZW5kaW5nSWNvblJl
cXVlc3RzLmVuZCgpOwogICAgIGZvciAoUGVuZGluZ0ljb25SZXF1ZXN0TWFwOjpjb25zdF9pdGVy
YXRvciBpdGVyID0gZGF0YWJhc2UtPnByaXYtPnBlbmRpbmdJY29uUmVxdWVzdHMuYmVnaW4oKTsg
aXRlciAhPSBlbmQ7ICsraXRlcikgewotICAgICAgICBTdHJpbmcgaWNvblVSTCA9IGljb25EYXRh
YmFzZSgpLnN5bmNocm9ub3VzSWNvblVSTEZvclBhZ2VVUkwoaXRlci0+Zmlyc3QpOworICAgICAg
ICBTdHJpbmcgaWNvblVSTCA9IGljb25EYXRhYmFzZSgpLnN5bmNocm9ub3VzSWNvblVSTEZvclBh
Z2VVUkwoaXRlci0+a2V5KTsKICAgICAgICAgaWYgKCFpY29uVVJMLmlzRW1wdHkoKSkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIFBlbmRpbmdJY29uUmVxdWVzdFZlY3RvciogaWNv
bnMgPSBpdGVyLT5zZWNvbmQ7CisgICAgICAgIFBlbmRpbmdJY29uUmVxdWVzdFZlY3RvciogaWNv
bnMgPSBpdGVyLT52YWx1ZTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpY29ucy0+
c2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIFBlbmRpbmdJY29uUmVxdWVzdCogcmVxdWVzdCA9
IGljb25zLT5hdChpKS5nZXQoKTsKICAgICAgICAgICAgIGlmIChyZXF1ZXN0LT5hc3luY1Jlc3Vs
dCgpKQogICAgICAgICAgICAgICAgIHJlcXVlc3QtPmFzeW5jUmVzdWx0Q29tcGxldGUoMCk7CiAg
ICAgICAgIH0KIAotICAgICAgICB0b0RlbGV0ZVVSTHMuYXBwZW5kKGl0ZXItPmZpcnN0KTsKKyAg
ICAgICAgdG9EZWxldGVVUkxzLmFwcGVuZChpdGVyLT5rZXkpOwogICAgIH0KIAogICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgdG9EZWxldGVVUkxzLnNpemUoKTsgKytpKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnBsdWdpbi5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0d2VicGx1Z2luLmNwcAppbmRleCBlMDNiMWVhNmRhMzNiN2Uy
ZjAwMjI1NWNlODc3Nzg2MjRjZGE3MDhjLi4wMWQwYmI1ZjJiZmQ3MDBmNmIzYzlmYzRmOGU0MjBj
NTcyNDg2ZWMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vi
cGx1Z2luLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2VicGx1Z2lu
LmNwcApAQCAtMjM3LDEwICsyMzcsMTAgQEAgR1NMaXN0KiB3ZWJraXRfd2ViX3BsdWdpbl9nZXRf
bWltZXR5cGVzKFdlYktpdFdlYlBsdWdpbiogcGx1Z2luKQogCiAgICAgZm9yIChNSU1FVG9EZXNj
cmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWltZVRvRGVzY3JpcHRpb25zLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBXZWJLaXRXZWJQbHVnaW5NSU1FVHlwZSog
bWltZVR5cGUgPSBnX3NsaWNlX25ldzAoV2ViS2l0V2ViUGx1Z2luTUlNRVR5cGUpOwotICAgICAg
ICBtaW1lVHlwZS0+bmFtZSA9IGdfc3RyZHVwKGl0LT5maXJzdC51dGY4KCkuZGF0YSgpKTsKLSAg
ICAgICAgbWltZVR5cGUtPmRlc2NyaXB0aW9uID0gZ19zdHJkdXAoaXQtPnNlY29uZC51dGY4KCku
ZGF0YSgpKTsKKyAgICAgICAgbWltZVR5cGUtPm5hbWUgPSBnX3N0cmR1cChpdC0+a2V5LnV0Zjgo
KS5kYXRhKCkpOworICAgICAgICBtaW1lVHlwZS0+ZGVzY3JpcHRpb24gPSBnX3N0cmR1cChpdC0+
dmFsdWUudXRmOCgpLmRhdGEoKSk7CiAKLSAgICAgICAgVmVjdG9yPFN0cmluZz4gZXh0ZW5zaW9u
cyA9IHByaXYtPmNvcmVQbHVnaW4tPm1pbWVUb0V4dGVuc2lvbnMoKS5nZXQoaXQtPmZpcnN0KTsK
KyAgICAgICAgVmVjdG9yPFN0cmluZz4gZXh0ZW5zaW9ucyA9IHByaXYtPmNvcmVQbHVnaW4tPm1p
bWVUb0V4dGVuc2lvbnMoKS5nZXQoaXQtPmtleSk7CiAgICAgICAgIG1pbWVUeXBlLT5leHRlbnNp
b25zID0gc3RhdGljX2Nhc3Q8Z2NoYXIqKj4oZ19tYWxsb2MwKHNpemVvZihjaGFyKikgKiAoZXh0
ZW5zaW9ucy5zaXplKCkgKyAxKSkpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
ZXh0ZW5zaW9ucy5zaXplKCk7IGkrKykKICAgICAgICAgICAgIG1pbWVUeXBlLT5leHRlbnNpb25z
W2ldID0gZ19zdHJkdXAoZXh0ZW5zaW9uc1tpXS51dGY4KCkuZGF0YSgpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvbWFjL0hpc3RvcnkvV2ViSGlzdG9yeS5tbSBiL1NvdXJjZS9XZWJLaXQv
bWFjL0hpc3RvcnkvV2ViSGlzdG9yeS5tbQppbmRleCA2OTY0ZmM5NDliNTEyMTczYTZiZGM1ZTcw
YjU2MThkMzFjYjY3N2EzLi5lNzgxZDMyZmQxZGU5NTBkOTE0YWY0ODM0OTc2NDIwZGY1ODdkYWY3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9IaXN0b3J5L1dlYkhpc3RvcnkubW0KKysr
IGIvU291cmNlL1dlYktpdC9tYWMvSGlzdG9yeS9XZWJIaXN0b3J5Lm1tCkBAIC0yMzgsNyArMjM4
LDcgQEAgc3RhdGljIGlubGluZSBXZWJIaXN0b3J5RGF0ZUtleSBkYXRlS2V5KE5TVGltZUludGVy
dmFsIGRhdGUpCiAgICAgICAgIHJldHVybiBOTzsKIAogICAgIERhdGVUb0VudHJpZXNNYXA6Oml0
ZXJhdG9yIGl0ID0gX2VudHJpZXNCeURhdGUtPmZpbmQoZGF0ZUtleSk7Ci0gICAgTlNNdXRhYmxl
QXJyYXkgKmVudHJpZXNGb3JEYXRlID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICBOU011dGFibGVB
cnJheSAqZW50cmllc0ZvckRhdGUgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgW2VudHJpZXNGb3JE
YXRlIHJlbW92ZU9iamVjdElkZW50aWNhbFRvOmVudHJ5XTsKICAgICAKICAgICAvLyByZW1vdmUg
dGhpcyBkYXRlIGVudGlyZWx5IGlmIHRoZXJlIGFyZSBubyBvdGhlciBlbnRyaWVzIG9uIGl0CkBA
IC00NDAsNyArNDQwLDcgQEAgc3RhdGljIGlubGluZSBXZWJIaXN0b3J5RGF0ZUtleSBkYXRlS2V5
KE5TVGltZUludGVydmFsIGRhdGUpCiAgICAgICAgIGRheXNBc1RpbWVJbnRlcnZhbHMucmVzZXJ2
ZUNhcGFjaXR5KF9lbnRyaWVzQnlEYXRlLT5zaXplKCkpOwogICAgICAgICBEYXRlVG9FbnRyaWVz
TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBfZW50cmllc0J5RGF0ZS0+ZW5kKCk7CiAgICAgICAg
IGZvciAoRGF0ZVRvRW50cmllc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBfZW50cmllc0J5RGF0
ZS0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgZGF5c0FzVGltZUludGVy
dmFscy5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgICAgIGRheXNBc1RpbWVJbnRlcnZhbHMu
YXBwZW5kKGl0LT5rZXkpOwogCiAgICAgICAgIHNvcnQoZGF5c0FzVGltZUludGVydmFscy5iZWdp
bigpLCBkYXlzQXNUaW1lSW50ZXJ2YWxzLmVuZCgpKTsKICAgICAgICAgc2l6ZV90IGNvdW50ID0g
ZGF5c0FzVGltZUludGVydmFscy5zaXplKCk7CkBAIC04OTcsNyArODk3LDcgQEAgV2ViSGlzdG9y
eVdyaXRlcjo6V2ViSGlzdG9yeVdyaXRlcihEYXRlVG9FbnRyaWVzTWFwKiBlbnRyaWVzQnlEYXRl
KQogICAgIG1fZGF0ZUtleXMucmVzZXJ2ZUNhcGFjaXR5KG1fZW50cmllc0J5RGF0ZS0+c2l6ZSgp
KTsKICAgICBEYXRlVG9FbnRyaWVzTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2VudHJpZXNC
eURhdGUtPmVuZCgpOwogICAgIGZvciAoRGF0ZVRvRW50cmllc01hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtX2VudHJpZXNCeURhdGUtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAg
bV9kYXRlS2V5cy5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgbV9kYXRlS2V5cy5hcHBlbmQo
aXQtPmtleSk7CiAgICAgc29ydChtX2RhdGVLZXlzLmJlZ2luKCksIG1fZGF0ZUtleXMuZW5kKCkp
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0
aWNzLm1tIGIvU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbQppbmRl
eCAyOTZkZDZiMjViZDhiZGI3N2EzYzY4MGUxMzI0ZTViMzk3ZDI2NmMzLi44ZGU2MzEzOWI3NzQz
NzZiYmQxZjdjMTEwNmY2ZWVkYmRkM2U1YjI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21h
Yy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL01pc2Mv
V2ViQ29yZVN0YXRpc3RpY3MubW0KQEAgLTg5LDggKzg5LDggQEAgdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CiAgICAgT3duUHRyPFR5cGVDb3VudFNldD4gY291bnRzKEpTRE9NV2luZG93Ojpjb21t
b25KU0dsb2JhbERhdGEoKS0+aGVhcC5wcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzKCkpOwogICAg
IEhhc2hDb3VudGVkU2V0PGNvbnN0IGNoYXIqPjo6aXRlcmF0b3IgZW5kID0gY291bnRzLT5lbmQo
KTsKICAgICBmb3IgKEhhc2hDb3VudGVkU2V0PGNvbnN0IGNoYXIqPjo6aXRlcmF0b3IgaXQgPSBj
b3VudHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGl0LT5zZWNvbmQ7ICsraSkKLSAgICAgICAgICAgIFtyZXN1bHQgYWRkT2JqZWN0
OltOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzppdC0+Zmlyc3RdXTsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0LT52YWx1ZTsgKytpKQorICAgICAgICAgICAgW3Jlc3Vs
dCBhZGRPYmplY3Q6W05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOml0LT5rZXldXTsKICAg
ICAKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMTA0LDggKzEwNCw4IEBAIHVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwogICAgIE93blB0cjxUeXBlQ291bnRTZXQ+IGNvdW50cyhKU0RPTVdpbmRv
dzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAub2JqZWN0VHlwZUNvdW50cygpKTsKICAgICBI
YXNoQ291bnRlZFNldDxjb25zdCBjaGFyKj46Oml0ZXJhdG9yIGVuZCA9IGNvdW50cy0+ZW5kKCk7
CiAgICAgZm9yIChIYXNoQ291bnRlZFNldDxjb25zdCBjaGFyKj46Oml0ZXJhdG9yIGl0ID0gY291
bnRzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBpdC0+c2Vjb25kOyArK2kpCi0gICAgICAgICAgICBbcmVzdWx0IGFkZE9iamVjdDpb
TlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6aXQtPmZpcnN0XV07CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBpdC0+dmFsdWU7ICsraSkKKyAgICAgICAgICAgIFtyZXN1bHQg
YWRkT2JqZWN0OltOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzppdC0+a2V5XV07CiAgICAg
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1Bs
dWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXIubW0gYi9Tb3VyY2UvV2ViS2l0
L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyLm1tCmluZGV4IGU0
OWQ1MGY0YmNiZDVjMWNiY2I4MzdjOGYyOTQ2M2Q0ZGMyZjQ5ZjYuLjNjZTA4OWJlZDI3YTRjMjNh
ZjIzYzc1MDkyNGE5ZDg5YWMwYzcxMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1Bs
dWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXIubW0KKysrIGIvU291cmNlL1dl
YktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlci5tbQpAQCAt
NzMsNyArNzMsNyBAQCBOZXRzY2FwZVBsdWdpbkhvc3RQcm94eSogTmV0c2NhcGVQbHVnaW5Ib3N0
TWFuYWdlcjo6aG9zdEZvclBsdWdpbihjb25zdCBXVEY6OlN0cgogICAgIAogICAgIC8vIFRoZSBw
YWNrYWdlIHdhcyBhbHJlYWR5IGluIHRoZSBtYXAsIGp1c3QgcmV0dXJuIGl0LgogICAgIGlmICgh
cmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnNlY29u
ZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgIAogICAg
IG1hY2hfcG9ydF90IGNsaWVudFBvcnQ7CiAgICAgaWYgKG1hY2hfcG9ydF9hbGxvY2F0ZShtYWNo
X3Rhc2tfc2VsZigpLCBNQUNIX1BPUlRfUklHSFRfUkVDRUlWRSwgJmNsaWVudFBvcnQpICE9IEtF
Uk5fU1VDQ0VTUykgewpAQCAtOTUsNyArOTUsNyBAQCBOZXRzY2FwZVBsdWdpbkhvc3RQcm94eSog
TmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlcjo6aG9zdEZvclBsdWdpbihjb25zdCBXVEY6OlN0cgog
ICAgIAogICAgIE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5KiBob3N0UHJveHkgPSBuZXcgTmV0c2Nh
cGVQbHVnaW5Ib3N0UHJveHkoY2xpZW50UG9ydCwgcGx1Z2luSG9zdFBvcnQsIHBsdWdpbkhvc3RQ
U04sIHNob3VsZENhY2hlTWlzc2luZ1Byb3BlcnRpZXNBbmRNZXRob2RzKTsKICAgICAKLSAgICBy
ZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IGhvc3RQcm94eTsKKyAgICByZXN1bHQuaXRlcmF0b3It
PnZhbHVlID0gaG9zdFByb3h5OwogICAgIAogICAgIHJldHVybiBob3N0UHJveHk7CiB9CkBAIC0y
MDQsNyArMjA0LDcgQEAgdm9pZCBOZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyOjpwbHVnaW5Ib3N0
RGllZChOZXRzY2FwZVBsdWdpbkhvc3RQcm94eSogcGx1Z2luSG8KIAogICAgIC8vIFRoaXMgaGFz
IE8obikgY29tcGxleGl0eSBidXQgdGhlIG51bWJlciBvZiBhY3RpdmUgcGx1Zy1pbiBob3N0cyBp
cyB2ZXJ5IHNtYWxsIHNvIGl0IHNob3VsZG4ndCBtYXR0ZXIuCiAgICAgZm9yIChQbHVnaW5Ib3N0
TWFwOjppdGVyYXRvciBpdCA9IG1fcGx1Z2luSG9zdHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kID09IHBsdWdpbkhvc3QpIHsKKyAgICAgICAgaWYg
KGl0LT52YWx1ZSA9PSBwbHVnaW5Ib3N0KSB7CiAgICAgICAgICAgICBtX3BsdWdpbkhvc3RzLnJl
bW92ZShpdCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTI4Niw3ICsyODYs
NyBAQCB2b2lkIE5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXI6OmRpZENyZWF0ZVdpbmRvdygpCiAg
ICAgLy8gU2VlIGlmIGFueSBvZiBvdXIgaG9zdHMgYXJlIGluIGZ1bGwtc2NyZWVuIG1vZGUuCiAg
ICAgUGx1Z2luSG9zdE1hcDo6aXRlcmF0b3IgZW5kID0gbV9wbHVnaW5Ib3N0cy5lbmQoKTsKICAg
ICBmb3IgKFBsdWdpbkhvc3RNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wbHVnaW5Ib3N0cy5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkqIGhv
c3RQcm94eSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5KiBo
b3N0UHJveHkgPSBpdC0+dmFsdWU7CiAgICAgICAgIAogICAgICAgICBpZiAoIWhvc3RQcm94eS0+
aXNNZW51QmFyVmlzaWJsZSgpKSB7CiAgICAgICAgICAgICAvLyBNYWtlIG91cnNlbHZlcyB0aGUg
ZnJvbnQgcHJvY2Vzcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9z
dGVkL05ldHNjYXBlUGx1Z2luSG9zdFByb3h5Lm1tIGIvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lu
cy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkubW0KaW5kZXggYWY2ZjJiZTk5NjljYjEx
Y2IzM2E1NjMxN2ZkZGE4YzJjZjYxY2Y1ZS4uMGZiMjZkMGE5Yjg0NzUyMjZiZWZjYzM0OTY4Yjlm
NTA2ZWI5MTViYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQv
TmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lu
cy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkubW0KQEAgLTE0NCw3ICsxNDQsNyBAQCB2
b2lkIE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5OjpwbHVnaW5Ib3N0RGllZCgpCiAgIAogICAgIFBs
dWdpbkluc3RhbmNlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBpbnN0YW5jZXMuZW5kKCk7CiAg
ICAgZm9yIChQbHVnaW5JbnN0YW5jZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBpbnN0YW5jZXMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5wbHVnaW5Ib3N0
RGllZCgpOworICAgICAgICBpdC0+dmFsdWUtPnBsdWdpbkhvc3REaWVkKCk7CiAgICAgCiAgICAg
TmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlcjo6c2hhcmVkKCkucGx1Z2luSG9zdERpZWQodGhpcyk7
CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRz
Y2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hv
c3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW0KaW5kZXggOTEwNDQzMDVmYmE2YjIz
YWIyNTU1MDZjMTE3YTEyNGFjNDkzMWNiNS4uMDFlNDg4MjA0OThlMjMxZjVlMTUwOWUzYzYyYjFk
ZjkyZmM3MDdlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQv
TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1Bs
dWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5tbQpAQCAtMTQ1LDcgKzE0
NSw3IEBAIHVpbnQzMl90IE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6TG9jYWxPYmplY3RN
YXA6OmlkRm9yT2JqZWN0KEpTR2xvYmFsRGF0YSYKICAgICAKICAgICBIYXNoTWFwPEpTQzo6SlNP
YmplY3QqLCBwYWlyPHVpbnQzMl90LCB1aW50MzJfdD4gPjo6aXRlcmF0b3IgaXRlciA9IG1fanNP
YmplY3RUb0lETWFwLmZpbmQob2JqZWN0KTsKICAgICBpZiAoaXRlciAhPSBtX2pzT2JqZWN0VG9J
RE1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0ZXItPnNlY29uZC5maXJzdDsKKyAgICAgICAg
cmV0dXJuIGl0ZXItPnZhbHVlLmZpcnN0OwogICAgIAogICAgIGRvIHsKICAgICAgICAgb2JqZWN0
SUQgPSArK21fb2JqZWN0SURDb3VudGVyOwpAQCAtMTYyLDcgKzE2Miw3IEBAIHZvaWQgTmV0c2Nh
cGVQbHVnaW5JbnN0YW5jZVByb3h5OjpMb2NhbE9iamVjdE1hcDo6cmV0YWluKEpTQzo6SlNPYmpl
Y3QqIG9iamVjdCkKICAgICBIYXNoTWFwPEpTQzo6SlNPYmplY3QqLCBwYWlyPHVpbnQzMl90LCB1
aW50MzJfdD4gPjo6aXRlcmF0b3IgaXRlciA9IG1fanNPYmplY3RUb0lETWFwLmZpbmQob2JqZWN0
KTsKICAgICBBU1NFUlQoaXRlciAhPSBtX2pzT2JqZWN0VG9JRE1hcC5lbmQoKSk7CiAKLSAgICBp
dGVyLT5zZWNvbmQuc2Vjb25kID0gaXRlci0+c2Vjb25kLnNlY29uZCArIDE7CisgICAgaXRlci0+
dmFsdWUuc2Vjb25kID0gaXRlci0+dmFsdWUuc2Vjb25kICsgMTsKIH0KIAogdm9pZCBOZXRzY2Fw
ZVBsdWdpbkluc3RhbmNlUHJveHk6OkxvY2FsT2JqZWN0TWFwOjpyZWxlYXNlKEpTQzo6SlNPYmpl
Y3QqIG9iamVjdCkKQEAgLTE3MCwxMCArMTcwLDEwIEBAIHZvaWQgTmV0c2NhcGVQbHVnaW5JbnN0
YW5jZVByb3h5OjpMb2NhbE9iamVjdE1hcDo6cmVsZWFzZShKU0M6OkpTT2JqZWN0KiBvYmplY3Qp
CiAgICAgSGFzaE1hcDxKU0M6OkpTT2JqZWN0KiwgcGFpcjx1aW50MzJfdCwgdWludDMyX3Q+ID46
Oml0ZXJhdG9yIGl0ZXIgPSBtX2pzT2JqZWN0VG9JRE1hcC5maW5kKG9iamVjdCk7CiAgICAgQVNT
RVJUKGl0ZXIgIT0gbV9qc09iamVjdFRvSURNYXAuZW5kKCkpOwogCi0gICAgQVNTRVJUKGl0ZXIt
PnNlY29uZC5zZWNvbmQgPiAwKTsKLSAgICBpdGVyLT5zZWNvbmQuc2Vjb25kID0gaXRlci0+c2Vj
b25kLnNlY29uZCAtIDE7Ci0gICAgaWYgKCFpdGVyLT5zZWNvbmQuc2Vjb25kKSB7Ci0gICAgICAg
IG1faWRUb0pTT2JqZWN0TWFwLnJlbW92ZShpdGVyLT5zZWNvbmQuZmlyc3QpOworICAgIEFTU0VS
VChpdGVyLT52YWx1ZS5zZWNvbmQgPiAwKTsKKyAgICBpdGVyLT52YWx1ZS5zZWNvbmQgPSBpdGVy
LT52YWx1ZS5zZWNvbmQgLSAxOworICAgIGlmICghaXRlci0+dmFsdWUuc2Vjb25kKSB7CisgICAg
ICAgIG1faWRUb0pTT2JqZWN0TWFwLnJlbW92ZShpdGVyLT52YWx1ZS5maXJzdCk7CiAgICAgICAg
IG1fanNPYmplY3RUb0lETWFwLnJlbW92ZShpdGVyKTsKICAgICB9CiB9CkBAIC0xOTcsMTAgKzE5
NywxMCBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6TG9jYWxPYmplY3RNYXA6
OmZvcmdldCh1aW50MzJfdCBvYmplY3RJRCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
Ci0gICAgSGFzaE1hcDxKU0M6OkpTT2JqZWN0KiwgcGFpcjx1aW50MzJfdCwgdWludDMyX3Q+ID46
Oml0ZXJhdG9yIHJJdGVyID0gbV9qc09iamVjdFRvSURNYXAuZmluZChpdGVyLT5zZWNvbmQuZ2V0
KCkpOworICAgIEhhc2hNYXA8SlNDOjpKU09iamVjdCosIHBhaXI8dWludDMyX3QsIHVpbnQzMl90
PiA+OjppdGVyYXRvciBySXRlciA9IG1fanNPYmplY3RUb0lETWFwLmZpbmQoaXRlci0+dmFsdWUu
Z2V0KCkpOwogCiAgICAgLy8gSWYgdGhlIG9iamVjdCBpcyBiZWluZyBzZW50IHRvIHBsdWctaW4g
cmlnaHQgbm93LCB0aGVuIGl0J3Mgbm90IHRoZSB0aW1lIHRvIGZvcmdldC4KLSAgICBpZiAockl0
ZXItPnNlY29uZC5zZWNvbmQgIT0gMSkKKyAgICBpZiAockl0ZXItPnZhbHVlLnNlY29uZCAhPSAx
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBtX2pzT2JqZWN0VG9JRE1hcC5yZW1vdmUo
ckl0ZXIpOwpAQCAtMzMwLDcgKzMzMCw3IEBAIHZvaWQgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVBy
b3h5OjpkZXN0cm95KCkKICAgICAKICAgICBGcmFtZUxvYWRNYXA6Oml0ZXJhdG9yIGVuZCA9IG1f
cGVuZGluZ0ZyYW1lTG9hZHMuZW5kKCk7CiAgICAgZm9yIChGcmFtZUxvYWRNYXA6Oml0ZXJhdG9y
IGl0ID0gbV9wZW5kaW5nRnJhbWVMb2Fkcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAg
ICAgIFsoaXQtPmZpcnN0KSBfc2V0SW50ZXJuYWxMb2FkRGVsZWdhdGU6bmlsXTsKKyAgICAgICAg
WyhpdC0+a2V5KSBfc2V0SW50ZXJuYWxMb2FkRGVsZWdhdGU6bmlsXTsKIAogICAgIF9XS1BIRGVz
dHJveVBsdWdpbkluc3RhbmNlKG1fcGx1Z2luSG9zdFByb3h5LT5wb3J0KCksIG1fcGx1Z2luSUQs
IHJlcXVlc3RJRCk7CiAgCkBAIC02NzgsNyArNjc4LDcgQEAgdm9pZCBOZXRzY2FwZVBsdWdpbklu
c3RhbmNlUHJveHk6OndlYkZyYW1lRGlkRmluaXNoTG9hZFdpdGhSZWFzb24oV2ViRnJhbWUqIHdl
YkYKICAgICBGcmFtZUxvYWRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wZW5kaW5nRnJhbWVMb2Fkcy5m
aW5kKHdlYkZyYW1lKTsKICAgICBBU1NFUlQoaXQgIT0gbV9wZW5kaW5nRnJhbWVMb2Fkcy5lbmQo
KSk7CiAgICAgICAgIAotICAgIFBsdWdpblJlcXVlc3QqIHBsdWdpblJlcXVlc3QgPSBpdC0+c2Vj
b25kLmdldCgpOworICAgIFBsdWdpblJlcXVlc3QqIHBsdWdpblJlcXVlc3QgPSBpdC0+dmFsdWUu
Z2V0KCk7CiAgICAgX1dLUEhMb2FkVVJMTm90aWZ5KG1fcGx1Z2luSG9zdFByb3h5LT5wb3J0KCks
IG1fcGx1Z2luSUQsIHBsdWdpblJlcXVlc3QtPnJlcXVlc3RJRCgpLCByZWFzb24pOwogIAogICAg
IG1fcGVuZGluZ0ZyYW1lTG9hZHMucmVtb3ZlKGl0KTsKQEAgLTE2MjgsNyArMTYyOCw3IEBAIHZv
aWQgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpjYW5jZWxDaGVja0lmQWxsb3dlZFRvTG9h
ZFVSTCh1aW50MzJfdCBjaGVja0lECiAgICAgaWYgKGl0ID09IG1fdXJsQ2hlY2tzLmVuZCgpKQog
ICAgICAgICByZXR1cm47CiAgICAgCi0gICAgV2ViUGx1Z2luQ29udGFpbmVyQ2hlY2sgKmNoZWNr
ID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICBXZWJQbHVnaW5Db250YWluZXJDaGVjayAqY2hlY2sg
PSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgW2NoZWNrIGNhbmNlbF07CiAgICAgbV91cmxDaGVja3Mu
cmVtb3ZlKGl0KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9z
dGVkL1Byb3h5SW5zdGFuY2UubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9Q
cm94eUluc3RhbmNlLm1tCmluZGV4IDg5OGM1ZTIxNDA2OWZjOWJiZmQzNDljNWI0YzZiYThmNzM1
NWUyNzAuLjU5OGVlOGYzN2IwMTAxYTU2M2RhOWM0NmQ1YmQ1YTQ1ZDU1Yjc3MWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL1Byb3h5SW5zdGFuY2UubW0KKysr
IGIvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvUHJveHlJbnN0YW5jZS5tbQpAQCAt
MzU5LDggKzM1OSw4IEBAIE1ldGhvZExpc3QgUHJveHlJbnN0YW5jZTo6bWV0aG9kc05hbWVkKFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiAgICAgTWV0aG9kTWFwOjppdGVyYXRvciBleGlzdGlu
Z01hcEVudHJ5ID0gbV9tZXRob2RzLmZpbmQobmFtZS5pbXBsKCkpOwogICAgIGlmIChleGlzdGlu
Z01hcEVudHJ5ICE9IG1fbWV0aG9kcy5lbmQoKSkgewogICAgICAgICBNZXRob2RMaXN0IG1ldGhv
ZExpc3Q7Ci0gICAgICAgIGlmIChleGlzdGluZ01hcEVudHJ5LT5zZWNvbmQpCi0gICAgICAgICAg
ICBtZXRob2RMaXN0LmFwcGVuZChleGlzdGluZ01hcEVudHJ5LT5zZWNvbmQpOworICAgICAgICBp
ZiAoZXhpc3RpbmdNYXBFbnRyeS0+dmFsdWUpCisgICAgICAgICAgICBtZXRob2RMaXN0LmFwcGVu
ZChleGlzdGluZ01hcEVudHJ5LT52YWx1ZSk7CiAgICAgICAgIHJldHVybiBtZXRob2RMaXN0Owog
ICAgIH0KICAgICAKQEAgLTM4MiwxMSArMzgyLDExIEBAIE1ldGhvZExpc3QgUHJveHlJbnN0YW5j
ZTo6bWV0aG9kc05hbWVkKFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiAgICAgLy8gQWRkIGEg
bmV3IGVudHJ5IHRvIHRoZSBtYXAgdW5sZXNzIGFuIGVudHJ5IHdhcyBhZGRlZCB3aGlsZSB3ZSB3
ZXJlIGluIHdhaXRGb3JSZXBseS4KICAgICBNZXRob2RNYXA6OkFkZFJlc3VsdCBtYXBBZGRSZXN1
bHQgPSBtX21ldGhvZHMuYWRkKG5hbWUuaW1wbCgpLCAwKTsKICAgICBpZiAobWFwQWRkUmVzdWx0
LmlzTmV3RW50cnkgJiYgcmVwbHktPm1fcmVzdWx0KQotICAgICAgICBtYXBBZGRSZXN1bHQuaXRl
cmF0b3ItPnNlY29uZCA9IG5ldyBQcm94eU1ldGhvZChtZXRob2ROYW1lKTsKKyAgICAgICAgbWFw
QWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IG5ldyBQcm94eU1ldGhvZChtZXRob2ROYW1lKTsK
IAogICAgIE1ldGhvZExpc3QgbWV0aG9kTGlzdDsKLSAgICBpZiAobWFwQWRkUmVzdWx0Lml0ZXJh
dG9yLT5zZWNvbmQpCi0gICAgICAgIG1ldGhvZExpc3QuYXBwZW5kKG1hcEFkZFJlc3VsdC5pdGVy
YXRvci0+c2Vjb25kKTsKKyAgICBpZiAobWFwQWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSkKKyAg
ICAgICAgbWV0aG9kTGlzdC5hcHBlbmQobWFwQWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CiAg
ICAgcmV0dXJuIG1ldGhvZExpc3Q7CiB9CiAKQEAgLTQwMiw3ICs0MDIsNyBAQCBGaWVsZCogUHJv
eHlJbnN0YW5jZTo6ZmllbGROYW1lZChQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogICAgIC8v
IElmIHdlIGFscmVhZHkgaGF2ZSBhbiBlbnRyeSBpbiB0aGUgbWFwLCB1c2UgaXQuCiAgICAgRmll
bGRNYXA6Oml0ZXJhdG9yIGV4aXN0aW5nTWFwRW50cnkgPSBtX2ZpZWxkcy5maW5kKG5hbWUuaW1w
bCgpKTsKICAgICBpZiAoZXhpc3RpbmdNYXBFbnRyeSAhPSBtX2ZpZWxkcy5lbmQoKSkKLSAgICAg
ICAgcmV0dXJuIGV4aXN0aW5nTWFwRW50cnktPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGV4aXN0
aW5nTWFwRW50cnktPnZhbHVlOwogICAgIAogICAgIHVpbnQ2NF90IGlkZW50aWZpZXIgPSByZWlu
dGVycHJldF9jYXN0PHVpbnQ2NF90PihfTlBOX0dldFN0cmluZ0lkZW50aWZpZXIobmFtZS5hc2Np
aSgpLmRhdGEoKSkpOwogICAgIHVpbnQzMl90IHJlcXVlc3RJRCA9IG1faW5zdGFuY2VQcm94eS0+
bmV4dFJlcXVlc3RJRCgpOwpAQCAtNDIyLDggKzQyMiw4IEBAIEZpZWxkKiBQcm94eUluc3RhbmNl
OjpmaWVsZE5hbWVkKFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiAgICAgLy8gQWRkIGEgbmV3
IGVudHJ5IHRvIHRoZSBtYXAgdW5sZXNzIGFuIGVudHJ5IHdhcyBhZGRlZCB3aGlsZSB3ZSB3ZXJl
IGluIHdhaXRGb3JSZXBseS4KICAgICBGaWVsZE1hcDo6QWRkUmVzdWx0IG1hcEFkZFJlc3VsdCA9
IG1fZmllbGRzLmFkZChuYW1lLmltcGwoKSwgMCk7CiAgICAgaWYgKG1hcEFkZFJlc3VsdC5pc05l
d0VudHJ5ICYmIHJlcGx5LT5tX3Jlc3VsdCkKLSAgICAgICAgbWFwQWRkUmVzdWx0Lml0ZXJhdG9y
LT5zZWNvbmQgPSBuZXcgUHJveHlGaWVsZChpZGVudGlmaWVyKTsKLSAgICByZXR1cm4gbWFwQWRk
UmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgIG1hcEFkZFJlc3VsdC5pdGVyYXRvci0+
dmFsdWUgPSBuZXcgUHJveHlGaWVsZChpZGVudGlmaWVyKTsKKyAgICByZXR1cm4gbWFwQWRkUmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIAogSlNDOjpKU1ZhbHVlIFByb3h5SW5zdGFuY2U6OmZp
ZWxkVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBGaWVsZCogZmllbGQpIGNvbnN0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5t
bSBiL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5WaWV3Lm1tCmlu
ZGV4IDRlMWFhZDQ5NTI4Y2Q3ZDA4MWQ0MTM1MjQ1NGI5Yzg1N2ZiYzI1YjcuLjZhMWViNjQwYTBk
YWNmMGNjZTAxZWVkMzgxOTIzNTBiNWRjODUyZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
bWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5WaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQv
bWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5WaWV3Lm1tCkBAIC03MTAsNyArNzEwLDcgQEAg
c3RhdGljIGlubGluZSB2b2lkIGdldE5QUmVjdChjb25zdCBOU1JlY3QmIG5yLCBOUFJlY3QmIG5w
cikKIAogICAgIEhhc2hNYXA8dWludDMyX3QsIFBsdWdpblRpbWVyKj46OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IHRpbWVycy0+ZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPHVpbnQzMl90LCBQbHVnaW5U
aW1lcio+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHRpbWVycy0+YmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7Ci0gICAgICAgIFBsdWdpblRpbWVyKiB0aW1lciA9IGl0LT5zZWNvbmQ7CisgICAgICAg
IFBsdWdpblRpbWVyKiB0aW1lciA9IGl0LT52YWx1ZTsKICAgICAgICAgdGltZXItPnN0b3AoKTsK
ICAgICB9ICAgIAogfQpAQCAtNzI4LDcgKzcyOCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBnZXRO
UFJlY3QoY29uc3QgTlNSZWN0JiBuciwgTlBSZWN0JiBucHIpCiAgICAgCiAgICAgSGFzaE1hcDx1
aW50MzJfdCwgUGx1Z2luVGltZXIqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gdGltZXJzLT5lbmQo
KTsKICAgICBmb3IgKEhhc2hNYXA8dWludDMyX3QsIFBsdWdpblRpbWVyKj46OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gdGltZXJzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgUGx1
Z2luVGltZXIqIHRpbWVyID0gaXQtPnNlY29uZDsKKyAgICAgICAgUGx1Z2luVGltZXIqIHRpbWVy
ID0gaXQtPnZhbHVlOwogICAgICAgICBBU1NFUlQoIXRpbWVyLT5pc0FjdGl2ZSgpKTsKICAgICAg
ICAgdGltZXItPnN0YXJ0KF9pc0NvbXBsZXRlbHlPYnNjdXJlZCk7CiAgICAgfSAgICAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYk5vdGlmaWNhdGlvbkNs
aWVudC5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYk5vdGlmaWNhdGlv
bkNsaWVudC5tbQppbmRleCBlMmEwNWM2YThiYWMyNjFkZTVmZjVhZDAwM2NjOGZjMWFhZWY4MmNm
Li5mMGM0OWE2Y2NjNDUwZTY0MWVjMTI2NTI3NDNiYzZjOTA4ZmJkMjZiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJOb3RpZmljYXRpb25DbGllbnQubW0K
KysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViTm90aWZpY2F0aW9uQ2xp
ZW50Lm1tCkBAIC05MCw3ICs5MCw3IEBAIGJvb2wgV2ViTm90aWZpY2F0aW9uQ2xpZW50OjpzaG93
KE5vdGlmaWNhdGlvbiogbm90aWZpY2F0aW9uKQogICAgIG1fbm90aWZpY2F0aW9uTWFwLnNldChu
b3RpZmljYXRpb24sIHdlYk5vdGlmaWNhdGlvbik7CiAKICAgICBOb3RpZmljYXRpb25Db250ZXh0
TWFwOjppdGVyYXRvciBpdCA9IG1fbm90aWZpY2F0aW9uQ29udGV4dE1hcC5hZGQobm90aWZpY2F0
aW9uLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIFZlY3RvcjxSZXRhaW5QdHI8V2ViTm90aWZp
Y2F0aW9uPiA+KCkpLml0ZXJhdG9yOwotICAgIGl0LT5zZWNvbmQuYXBwZW5kKHdlYk5vdGlmaWNh
dGlvbik7CisgICAgaXQtPnZhbHVlLmFwcGVuZCh3ZWJOb3RpZmljYXRpb24pOwogCiAgICAgW1tt
X3dlYlZpZXcgX25vdGlmaWNhdGlvblByb3ZpZGVyXSBzaG93Tm90aWZpY2F0aW9uOndlYk5vdGlm
aWNhdGlvbi5nZXQoKSBmcm9tV2ViVmlldzptX3dlYlZpZXddOwogICAgIHJldHVybiB0cnVlOwpA
QCAtMTIwLDcgKzEyMCw3IEBAIHZvaWQgV2ViTm90aWZpY2F0aW9uQ2xpZW50OjpjbGVhck5vdGlm
aWNhdGlvbnMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKICAgICBpZiAoaXQgPT0g
bV9ub3RpZmljYXRpb25Db250ZXh0TWFwLmVuZCgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0g
ICAgVmVjdG9yPFJldGFpblB0cjxXZWJOb3RpZmljYXRpb24+ID4mIHdlYk5vdGlmaWNhdGlvbnMg
PSBpdC0+c2Vjb25kOworICAgIFZlY3RvcjxSZXRhaW5QdHI8V2ViTm90aWZpY2F0aW9uPiA+JiB3
ZWJOb3RpZmljYXRpb25zID0gaXQtPnZhbHVlOwogICAgIE5TTXV0YWJsZUFycmF5ICpuc0lEcyA9
IFtOU011dGFibGVBcnJheSBhcnJheV07CiAgICAgc2l6ZV90IGNvdW50ID0gd2ViTm90aWZpY2F0
aW9ucy5zaXplKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CkBA
IC0xNDYsMTAgKzE0NiwxMCBAQCB2b2lkIFdlYk5vdGlmaWNhdGlvbkNsaWVudDo6bm90aWZpY2F0
aW9uT2JqZWN0RGVzdHJveWVkKE5vdGlmaWNhdGlvbiogbm90aWZpY2F0aQogCiAgICAgTm90aWZp
Y2F0aW9uQ29udGV4dE1hcDo6aXRlcmF0b3IgaXQgPSBtX25vdGlmaWNhdGlvbkNvbnRleHRNYXAu
ZmluZChub3RpZmljYXRpb24tPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CiAgICAgQVNTRVJU
KGl0ICE9IG1fbm90aWZpY2F0aW9uQ29udGV4dE1hcC5lbmQoKSk7Ci0gICAgc2l6ZV90IGluZGV4
ID0gaXQtPnNlY29uZC5maW5kKHdlYk5vdGlmaWNhdGlvbik7CisgICAgc2l6ZV90IGluZGV4ID0g
aXQtPnZhbHVlLmZpbmQod2ViTm90aWZpY2F0aW9uKTsKICAgICBBU1NFUlQoaW5kZXggIT0gbm90
Rm91bmQpOwotICAgIGl0LT5zZWNvbmQucmVtb3ZlKGluZGV4KTsKLSAgICBpZiAoaXQtPnNlY29u
ZC5pc0VtcHR5KCkpCisgICAgaXQtPnZhbHVlLnJlbW92ZShpbmRleCk7CisgICAgaWYgKGl0LT52
YWx1ZS5pc0VtcHR5KCkpCiAgICAgICAgIG1fbm90aWZpY2F0aW9uQ29udGV4dE1hcC5yZW1vdmUo
aXQpOwogCiAgICAgW1ttX3dlYlZpZXcgX25vdGlmaWNhdGlvblByb3ZpZGVyXSBub3RpZmljYXRp
b25EZXN0cm95ZWQ6d2ViTm90aWZpY2F0aW9uLmdldCgpXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJW
aWV3L1dlYkhUTUxWaWV3Lm1tCmluZGV4IDUwNWRiNTMwMjEwNGVhODQ4ZmI4MjAxMjdmYTI5NGIz
MTZiZTA5MjEuLmI5YTAwMDZkNzlhMzQzNjBmMjk5YzNjODQxYmI3OTYyZjM3MmQ1OGIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0KKysrIGIvU291
cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQpAQCAtMjM3Niw3ICsyMzc2LDcg
QEAgc3RhdGljIFN0cmluZyBjb21tYW5kTmFtZUZvclNlbGVjdG9yKFNFTCBzZWxlY3RvcikKICAg
ICBzdGF0aWMgY29uc3QgU2VsZWN0b3JOYW1lTWFwKiBleGNlcHRpb25NYXAgPSBjcmVhdGVTZWxl
Y3RvckV4Y2VwdGlvbk1hcCgpOwogICAgIFNlbGVjdG9yTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBleGNlcHRpb25NYXAtPmZpbmQoc2VsZWN0b3IpOwogICAgIGlmIChpdCAhPSBleGNlcHRp
b25NYXAtPmVuZCgpKQotICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJu
IGl0LT52YWx1ZTsKIAogICAgIC8vIFJlbW92ZSB0aGUgdHJhaWxpbmcgY29sb24uCiAgICAgLy8g
Tm8gbmVlZCB0byBjYXBpdGFsaXplIHRoZSBjb21tYW5kIG5hbWUgc2luY2UgRWRpdG9yIGNvbW1h
bmQgbmFtZXMgYXJlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAKaW5kZXggMDhlODYxODNhNmI2
ZWE0NDA4N2VmMjQ3MWZkOTAwMmQ0YjYwNDBmNC4uM2RiNjk3Njk4YzM3YzEyN2YxNjcxNWZkNGUy
ZGIyNWYzZTAxNzIwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcApAQCAtMjI1OCw3ICsy
MjU4LDcgQEAgc3RhdGljIHZvaWQgZXh0cmFjdENvbnRlbnRUeXBlRnJvbVBsdWdpblZlY3Rvcihj
b25zdCBWZWN0b3I8UGx1Z2luUGFja2FnZSo+JiBwbHUKICAgICAgICAgTUlNRVRvRGVzY3JpcHRp
b25zTWFwOjpjb25zdF9pdGVyYXRvciBtYXBfaXQgPSBwbHVnaW5zW2ldLT5taW1lVG9EZXNjcmlw
dGlvbnMoKS5iZWdpbigpOwogICAgICAgICBNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0
ZXJhdG9yIG1hcF9lbmQgPSBwbHVnaW5zW2ldLT5taW1lVG9EZXNjcmlwdGlvbnMoKS5lbmQoKTsK
ICAgICAgICAgZm9yICg7IG1hcF9pdCAhPSBtYXBfZW5kOyArK21hcF9pdCkKLSAgICAgICAgICAg
ICpsaXN0IDw8IG1hcF9pdC0+Zmlyc3Q7CisgICAgICAgICAgICAqbGlzdCA8PCBtYXBfaXQtPmtl
eTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwbHVn
aW5kYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGx1Z2luZGF0YWJhc2Uu
Y3BwCmluZGV4IGE3YTNiNWYyYzFlODlmNDc0MzdjMDhhOTdmY2IyOTY3ODZiZjhlNTguLmM1MzI4
YzhmNjc1ZjJjNjZmN2I5YjQyMGQ2NTEzN2ZkOWY4NmI4OTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvcXQvQXBpL3F3ZWJwbHVnaW5kYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9x
dC9BcGkvcXdlYnBsdWdpbmRhdGFiYXNlLmNwcApAQCAtMTIyLDggKzEyMiw4IEBAIFFMaXN0PFFX
ZWJQbHVnaW5JbmZvOjpNaW1lVHlwZT4gUVdlYlBsdWdpbkluZm86Om1pbWVUeXBlcygpIGNvbnN0
CiAKICAgICAgICAgZm9yIChNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbWltZVRvRGVzY3JpcHRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAg
ICAgICAgTWltZVR5cGUgbWltZVR5cGU7Ci0gICAgICAgICAgICBtaW1lVHlwZS5uYW1lID0gaXQt
PmZpcnN0OwotICAgICAgICAgICAgbWltZVR5cGUuZGVzY3JpcHRpb24gPSBpdC0+c2Vjb25kOwor
ICAgICAgICAgICAgbWltZVR5cGUubmFtZSA9IGl0LT5rZXk7CisgICAgICAgICAgICBtaW1lVHlw
ZS5kZXNjcmlwdGlvbiA9IGl0LT52YWx1ZTsKIAogICAgICAgICAgICAgUVN0cmluZ0xpc3QgZmls
ZUV4dGVuc2lvbnM7CiAgICAgICAgICAgICBWZWN0b3I8U3RyaW5nPiBleHRlbnNpb25zID0gbV9w
YWNrYWdlLT5taW1lVG9FeHRlbnNpb25zKCkuZ2V0KG1pbWVUeXBlLm5hbWUpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNRdC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1F0
LmNwcAppbmRleCBjZDRhYjBkNzJkODY4MTI1ZGM4NmVlOTg3YmNjZTZlZjNhYjFhZDg5Li43ZDRi
MGI3NWY5ZDJjNGU3Njc5ZGIzZDA3YjU2MTdhNDIxNDA0YzU2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1F0LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1F0LmNwcApA
QCAtMTMzLDggKzEzMyw4IEBAIHZvaWQgUGxhdGZvcm1TdHJhdGVnaWVzUXQ6OmdldFBsdWdpbklu
Zm8oY29uc3QgV2ViQ29yZTo6UGFnZSogcGFnZSwgVmVjdG9yPFdlYkNvCiAgICAgICAgIGZvciAo
TUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1pbWVUb0Rlc2NyaXB0
aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIE1pbWVDbGFzc0lu
Zm8gbWltZTsKIAotICAgICAgICAgICAgbWltZS50eXBlID0gaXQtPmZpcnN0OwotICAgICAgICAg
ICAgbWltZS5kZXNjID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIG1pbWUudHlwZSA9IGl0LT5r
ZXk7CisgICAgICAgICAgICBtaW1lLmRlc2MgPSBpdC0+dmFsdWU7CiAgICAgICAgICAgICBtaW1l
LmV4dGVuc2lvbnMgPSBwYWNrYWdlLT5taW1lVG9FeHRlbnNpb25zKCkuZ2V0KG1pbWUudHlwZSk7
CiAKICAgICAgICAgICAgIGluZm8ubWltZXMuYXBwZW5kKG1pbWUpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC93aW4vQ09NUHJvcGVydHlCYWcuaCBiL1NvdXJjZS9XZWJLaXQvd2luL0NPTVBy
b3BlcnR5QmFnLmgKaW5kZXggYzc2ODYzZjE1MDEyZjJlYWRlMGRjZTE1ZmRkYjczOWJmYmMyNzlj
My4uOGU4NGU0NzQwYWEzYTk4NjM1OTRiZWRjZWNlOGUzNzEyYWQ0YTJmZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC93aW4vQ09NUHJvcGVydHlCYWcuaAorKysgYi9Tb3VyY2UvV2ViS2l0L3dp
bi9DT01Qcm9wZXJ0eUJhZy5oCkBAIC0xNDcsOSArMTQ3LDkgQEAgSFJFU1VMVCBTVERNRVRIT0RD
QUxMVFlQRSBDT01Qcm9wZXJ0eUJhZzxWYWx1ZVR5cGUsIEtleVR5cGUsIEhhc2hUeXBlPjo6UmVh
ZChMUEMKIAogICAgIFZBUlRZUEUgcmVxdWVzdGVkVHlwZSA9IFZfVlQocFZhcik7CiAgICAgVl9W
VChwVmFyKSA9IFZUX0VNUFRZOwotICAgIENPTVZhcmlhbnRTZXR0ZXI8VmFsdWVUeXBlPjo6c2V0
VmFyaWFudChwVmFyLCBpdC0+c2Vjb25kKTsKKyAgICBDT01WYXJpYW50U2V0dGVyPFZhbHVlVHlw
ZT46OnNldFZhcmlhbnQocFZhciwgaXQtPnZhbHVlKTsKIAotICAgIGlmIChyZXF1ZXN0ZWRUeXBl
ICE9IENPTVZhcmlhbnRTZXR0ZXI8VmFsdWVUeXBlPjo6dmFyaWFudFR5cGUoaXQtPnNlY29uZCkg
JiYgcmVxdWVzdGVkVHlwZSAhPSBWVF9FTVBUWSkKKyAgICBpZiAocmVxdWVzdGVkVHlwZSAhPSBD
T01WYXJpYW50U2V0dGVyPFZhbHVlVHlwZT46OnZhcmlhbnRUeXBlKGl0LT52YWx1ZSkgJiYgcmVx
dWVzdGVkVHlwZSAhPSBWVF9FTVBUWSkKICAgICAgICAgcmV0dXJuIDo6VmFyaWFudENoYW5nZVR5
cGUocFZhciwgcFZhciwgVkFSSUFOVF9OT1VTRVJPVkVSUklERSB8IFZBUklBTlRfQUxQSEFCT09M
LCByZXF1ZXN0ZWRUeXBlKTsKIAogICAgIHJldHVybiBTX09LOwpAQCAtMjE3LDEyICsyMTcsMTIg
QEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBDT01Qcm9wZXJ0eUJhZzxWYWx1ZVR5cGUsIEtl
eVR5cGUsIEhhc2hUeXBlPjo6R2V0UHJvcGUKICAgICAgICAgLy9wUHJvcEJhZ1tqXS5jbHNpZDsg
ICAgLy8gKENMU0lEKSBDTFNJRCBvZiB0aGUgb2JqZWN0LiBUaGlzIG1lbWJlciBpcyB2YWxpZCBv
bmx5IGlmIGR3VHlwZSBpcyBQUk9QQkFHMl9UWVBFX09CSkVDVC4KIAogICAgICAgICBwUHJvcEJh
Z1tqXS5kd1R5cGUgPSBQUk9QQkFHMl9UWVBFX0RBVEE7Ci0gICAgICAgIHBQcm9wQmFnW2pdLnZ0
ID0gQ09NVmFyaWFudFNldHRlcjxWYWx1ZVR5cGU+Ojp2YXJpYW50VHlwZShjdXJyZW50LT5zZWNv
bmQpOworICAgICAgICBwUHJvcEJhZ1tqXS52dCA9IENPTVZhcmlhbnRTZXR0ZXI8VmFsdWVUeXBl
Pjo6dmFyaWFudFR5cGUoY3VycmVudC0+dmFsdWUpOwogICAgICAgICBwUHJvcEJhZ1tqXS5kd0hp
bnQgPSBpUHJvcGVydHkgKyBqOwotICAgICAgICBwUHJvcEJhZ1tqXS5wc3RyTmFtZSA9IChMUE9M
RVNUUilDb1Rhc2tNZW1BbGxvYyhzaXplb2Yod2NoYXJfdCkqKGN1cnJlbnQtPmZpcnN0Lmxlbmd0
aCgpKzEpKTsKKyAgICAgICAgcFByb3BCYWdbal0ucHN0ck5hbWUgPSAoTFBPTEVTVFIpQ29UYXNr
TWVtQWxsb2Moc2l6ZW9mKHdjaGFyX3QpKihjdXJyZW50LT5rZXkubGVuZ3RoKCkrMSkpOwogICAg
ICAgICBpZiAoIXBQcm9wQmFnW2pdLnBzdHJOYW1lKQogICAgICAgICAgICAgcmV0dXJuIEVfT1VU
T0ZNRU1PUlk7Ci0gICAgICAgIHdjc2NweV9zKHBQcm9wQmFnW2pdLnBzdHJOYW1lLCBjdXJyZW50
LT5maXJzdC5sZW5ndGgoKSsxLCBzdGF0aWNfY2FzdDxTdHJpbmc+KGN1cnJlbnQtPmZpcnN0KS5j
aGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpKTsKKyAgICAgICAgd2NzY3B5X3MocFByb3BC
YWdbal0ucHN0ck5hbWUsIGN1cnJlbnQtPmtleS5sZW5ndGgoKSsxLCBzdGF0aWNfY2FzdDxTdHJp
bmc+KGN1cnJlbnQtPmtleSkuY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSk7CiAgICAg
ICAgICsrKnBjUHJvcGVydGllczsKICAgICB9CiAgICAgcmV0dXJuIFNfT0s7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3RhdGlzdGljcy5jcHAgYi9Tb3VyY2UvV2ViS2l0
L3dpbi9XZWJDb3JlU3RhdGlzdGljcy5jcHAKaW5kZXggYzFjYTlmMjE0ZjI0OWMwYTQ5ZjFmY2Ix
MjJmMDZhZDM0OTNiNGIxOS4uMmYyMmIwM2M2MjI1MDAyYWUyMTljYTBmNDViYTQ3ZDI5ODBjMzdh
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN0YXRpc3RpY3MuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdGF0aXN0aWNzLmNwcApAQCAtMTQ1LDcgKzE0
NSw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViQ29yZVN0YXRpc3RpY3M6OmphdmFT
Y3JpcHRQcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzCiAgICAgSXRlcmF0b3IgZW5kID0ganNPYmpl
Y3RUeXBlTmFtZXMtPmVuZCgpOwogICAgIEhhc2hNYXA8U3RyaW5nLCBpbnQ+IHR5cGVDb3VudE1h
cDsKICAgICBmb3IgKEl0ZXJhdG9yIGN1cnJlbnQgPSBqc09iamVjdFR5cGVOYW1lcy0+YmVnaW4o
KTsgY3VycmVudCAhPSBlbmQ7ICsrY3VycmVudCkKLSAgICAgICAgdHlwZUNvdW50TWFwLnNldChj
dXJyZW50LT5maXJzdCwgY3VycmVudC0+c2Vjb25kKTsKKyAgICAgICAgdHlwZUNvdW50TWFwLnNl
dChjdXJyZW50LT5rZXksIGN1cnJlbnQtPnZhbHVlKTsKIAogICAgIENPTVB0cjxJUHJvcGVydHlC
YWcyPiByZXN1bHRzKEFkb3B0Q09NLCBDT01Qcm9wZXJ0eUJhZzxpbnQ+OjpjcmVhdGVJbnN0YW5j
ZSh0eXBlQ291bnRNYXApKTsKICAgICByZXN1bHRzLmNvcHlSZWZUbyh0eXBlTmFtZXNBbmRDb3Vu
dHMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViUGxh
dGZvcm1TdHJhdGVnaWVzLmNwcCBiL1NvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dl
YlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAKaW5kZXggMjMwZjMzMjNmNTQyOTFkMDFlMTQxOTgxNzhm
YTIxNmE0OGMwY2Y1Yi4uZjEzMGY3NmJkMmE2NzY5N2FkZTdhMzY3ODg0NTI0M2E5ZjZhNzFhNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1T
dHJhdGVnaWVzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJQ
bGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCkBAIC05Myw4ICs5Myw4IEBAIHZvaWQgV2ViUGxhdGZvcm1T
dHJhdGVnaWVzOjpnZXRQbHVnaW5JbmZvKGNvbnN0IFdlYkNvcmU6OlBhZ2UqLCBWZWN0b3I8V2Vi
Q29yZTo6CiAgICAgICAgIGZvciAoTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAg
ICAgICAgICAgIE1pbWVDbGFzc0luZm8gbWltZTsKIAotICAgICAgICAgICAgbWltZS50eXBlID0g
aXQtPmZpcnN0OwotICAgICAgICAgICAgbWltZS5kZXNjID0gaXQtPnNlY29uZDsKKyAgICAgICAg
ICAgIG1pbWUudHlwZSA9IGl0LT5rZXk7CisgICAgICAgICAgICBtaW1lLmRlc2MgPSBpdC0+dmFs
dWU7CiAgICAgICAgICAgICBtaW1lLmV4dGVuc2lvbnMgPSBwYWNrYWdlLT5taW1lVG9FeHRlbnNp
b25zKCkuZ2V0KG1pbWUudHlwZSk7CiAKICAgICAgICAgICAgIGluZm8ubWltZXMuYXBwZW5kKG1p
bWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vV2ViSGlzdG9yeS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L3dpbi9XZWJIaXN0b3J5LmNwcAppbmRleCBlODQyYzE0MDczNWM3MTk5MWE1ZDEx
ZThiOWQzYjU3ZjdkNWNkMjdiLi44MjMzNWE3OGE3NWY4YzgyMmRkOTk2ZTVkNjg5OGMzOWMwNGUz
YjMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJIaXN0b3J5LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L3dpbi9XZWJIaXN0b3J5LmNwcApAQCAtODM0LDcgKzgzNCw3IEBAIEhSRVNV
TFQgV2ViSGlzdG9yeTo6cmVtb3ZlSXRlbUZyb21EYXRlQ2FjaGVzKElXZWJIaXN0b3J5SXRlbSog
ZW50cnkpCiAKICAgICBEYXRlVG9FbnRyaWVzTWFwOjppdGVyYXRvciBmb3VuZCA9IG1fZW50cmll
c0J5RGF0ZS5maW5kKGRhdGVLZXkpOwogICAgIEFTU0VSVChmb3VuZCAhPSBtX2VudHJpZXNCeURh
dGUuZW5kKCkpOwotICAgIENGTXV0YWJsZUFycmF5UmVmIGVudHJpZXNGb3JEYXRlID0gZm91bmQt
PnNlY29uZC5nZXQoKTsKKyAgICBDRk11dGFibGVBcnJheVJlZiBlbnRyaWVzRm9yRGF0ZSA9IGZv
dW5kLT52YWx1ZS5nZXQoKTsKIAogICAgIENGSW5kZXggY291bnQgPSBDRkFycmF5R2V0Q291bnQo
ZW50cmllc0ZvckRhdGUpOwogICAgIGZvciAoaW50IGkgPSBjb3VudCAtIDE7IGkgPj0gMDsgLS1p
KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJLaXRDT01BUEkuY3BwIGIvU291
cmNlL1dlYktpdC93aW4vV2ViS2l0Q09NQVBJLmNwcAppbmRleCA5YzljYzAyNmI0N2I0ZmVhOTYw
YzYzOTg0NmUwZWJhNTFjNDY1M2MyLi40ZDhmZjA5NWJkYTk2MDdkMjlhMTQ1Yjg1N2M3OGRkZmY4
ZTM1ZTdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJLaXRDT01BUEkuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvd2luL1dlYktpdENPTUFQSS5jcHAKQEAgLTUyLDcgKzUyLDcgQEAg
c3RhdGljIENPTVB0cjxJQ2xhc3NGYWN0b3J5PiBjbGFzc0ZhY3RvcnkoY29uc3QgQ0xTSUQmIGNs
c2lkKQogICAgIHN0YXRpYyBGYWN0b3J5TWFwJiBmYWN0b3JpZXMgPSAqbmV3IEZhY3RvcnlNYXA7
CiAKICAgICBGYWN0b3J5TWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gZmFjdG9yaWVzLmFkZChjbHNp
ZCwgMCk7Ci0gICAgQ09NUHRyPElDbGFzc0ZhY3Rvcnk+JiBmYWN0b3J5ID0gcmVzdWx0Lml0ZXJh
dG9yLT5zZWNvbmQ7CisgICAgQ09NUHRyPElDbGFzc0ZhY3Rvcnk+JiBmYWN0b3J5ID0gcmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkgJiYgRkFJTEVEKERs
bEdldENsYXNzT2JqZWN0KGNsc2lkLCBfX3V1aWRvZihmYWN0b3J5KSwgcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKio+KCZmYWN0b3J5KSkpKQogICAgICAgICBmYWN0b3J5ID0gMDsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC93aW4vV2ViS2l0U3RhdGlzdGljcy5jcHAgYi9Tb3VyY2UvV2ViS2l0
L3dpbi9XZWJLaXRTdGF0aXN0aWNzLmNwcAppbmRleCA5Y2Q5NWM3YWM5MzU5NTMwMDdlMTU3ZGNh
NzRlODA3YzQ1YWVlMDZlLi5jN2I4ZWQxYWM3N2NlNmUxOTI2YWE1ZGIyMjQyNGYyZWVlMWEzNTBj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJLaXRTdGF0aXN0aWNzLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJLaXRTdGF0aXN0aWNzLmNwcApAQCAtMTQ0LDkgKzE0NCw5
IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViS2l0U3RhdGlzdGljczo6Y29tQ2xhc3NO
YW1lQ291bnRzKAogICAgIEl0ZXJhdG9yIGVuZCA9IGdDbGFzc05hbWVDb3VudC5lbmQoKTsKICAg
ICBWZWN0b3I8VUNoYXI+IHZlY3RvcjsKICAgICBmb3IgKEl0ZXJhdG9yIGN1cnJlbnQgPSBnQ2xh
c3NOYW1lQ291bnQuYmVnaW4oKTsgY3VycmVudCAhPSBlbmQ7ICsrY3VycmVudCkgewotICAgICAg
ICBhcHBlbmQodmVjdG9yLCBTdHJpbmc6OmZvcm1hdCgiJTR1IiwgY3VycmVudC0+c2Vjb25kKSk7
CisgICAgICAgIGFwcGVuZCh2ZWN0b3IsIFN0cmluZzo6Zm9ybWF0KCIlNHUiLCBjdXJyZW50LT52
YWx1ZSkpOwogICAgICAgICB2ZWN0b3IuYXBwZW5kKCdcdCcpOwotICAgICAgICBhcHBlbmQodmVj
dG9yLCBzdGF0aWNfY2FzdDxTdHJpbmc+KGN1cnJlbnQtPmZpcnN0KSk7CisgICAgICAgIGFwcGVu
ZCh2ZWN0b3IsIHN0YXRpY19jYXN0PFN0cmluZz4oY3VycmVudC0+a2V5KSk7CiAgICAgICAgIHZl
Y3Rvci5hcHBlbmQoJ1xuJyk7CiAgICAgfQogICAgICpvdXRwdXQgPSBCU3RyaW5nKFN0cmluZzo6
YWRvcHQodmVjdG9yKSkucmVsZWFzZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4v
V2ViTm90aWZpY2F0aW9uQ2VudGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvd2luL1dlYk5vdGlmaWNh
dGlvbkNlbnRlci5jcHAKaW5kZXggYzcxOTJkOGQzY2RiMmNkYWUyYmFhNzFhZTYwZjdiYTlkODFl
ZDdlYS4uMzFjODExOWE1MDJiOWNlZTY1ZTQyMGJmNTE3ZWU3OWFhMTI4NDFiMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC93aW4vV2ViTm90aWZpY2F0aW9uQ2VudGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L3dpbi9XZWJOb3RpZmljYXRpb25DZW50ZXIuY3BwCkBAIC0xMjAsNyArMTIwLDcg
QEAgdm9pZCBXZWJOb3RpZmljYXRpb25DZW50ZXI6OnBvc3ROb3RpZmljYXRpb25JbnRlcm5hbChJ
V2ViTm90aWZpY2F0aW9uKiBub3RpZmljYXQKIAogICAgIC8vIEludGVudGlvbmFsbHkgbWFrZSBh
IGNvcHkgb2YgdGhlIGxpc3QgdG8gYXZvaWQgdGhlIHBvc3NpYmlsaXR5IG9mIGVycm9ycwogICAg
IC8vIGZyb20gYSBtdXRhdGlvbiBvZiB0aGUgbGlzdCBpbiB0aGUgb25Ob3RpZnkgY2FsbGJhY2su
Ci0gICAgT2JqZWN0T2JzZXJ2ZXJMaXN0IGxpc3QgPSBpdC0+c2Vjb25kOworICAgIE9iamVjdE9i
c2VydmVyTGlzdCBsaXN0ID0gaXQtPnZhbHVlOwogCiAgICAgT2JzZXJ2ZXJMaXN0SXRlcmF0b3Ig
ZW5kID0gbGlzdC5lbmQoKTsKICAgICBmb3IgKE9ic2VydmVyTGlzdEl0ZXJhdG9yIGl0MiA9IGxp
c3QuYmVnaW4oKTsgaXQyICE9IGVuZDsgKytpdDIpIHsKQEAgLTE0OSw3ICsxNDksNyBAQCBIUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIFdlYk5vdGlmaWNhdGlvbkNlbnRlcjo6YWRkT2JzZXJ2ZXIo
CiAgICAgU3RyaW5nIG5hbWUobm90aWZpY2F0aW9uTmFtZSwgU3lzU3RyaW5nTGVuKG5vdGlmaWNh
dGlvbk5hbWUpKTsKICAgICBNYXBwZWRPYnNlcnZlcnM6Oml0ZXJhdG9yIGl0ID0gZC0+bV9tYXBw
ZWRPYnNlcnZlcnMuZmluZChuYW1lKTsKICAgICBpZiAoaXQgIT0gZC0+bV9tYXBwZWRPYnNlcnZl
cnMuZW5kKCkpCi0gICAgICAgIGl0LT5zZWNvbmQuYXBwZW5kKE9iamVjdE9ic2VydmVyUGFpcihh
bk9iamVjdCwgb2JzZXJ2ZXIpKTsKKyAgICAgICAgaXQtPnZhbHVlLmFwcGVuZChPYmplY3RPYnNl
cnZlclBhaXIoYW5PYmplY3QsIG9ic2VydmVyKSk7CiAgICAgZWxzZSB7CiAgICAgICAgIE9iamVj
dE9ic2VydmVyTGlzdCBsaXN0OwogICAgICAgICBsaXN0LmFwcGVuZChPYmplY3RPYnNlcnZlclBh
aXIoYW5PYmplY3QsIG9ic2VydmVyKSk7CkBAIC0xOTgsNyArMTk4LDcgQEAgSFJFU1VMVCBTVERN
RVRIT0RDQUxMVFlQRSBXZWJOb3RpZmljYXRpb25DZW50ZXI6OnJlbW92ZU9ic2VydmVyKAogICAg
IGlmIChpdCA9PSBkLT5tX21hcHBlZE9ic2VydmVycy5lbmQoKSkKICAgICAgICAgcmV0dXJuIEVf
RkFJTDsKIAotICAgIE9iamVjdE9ic2VydmVyTGlzdCYgb2JzZXJ2ZXJMaXN0ID0gaXQtPnNlY29u
ZDsKKyAgICBPYmplY3RPYnNlcnZlckxpc3QmIG9ic2VydmVyTGlzdCA9IGl0LT52YWx1ZTsKICAg
ICBPYnNlcnZlckxpc3RJdGVyYXRvciBlbmQgPSBvYnNlcnZlckxpc3QuZW5kKCk7CiAKICAgICBp
bnQgaSA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0
L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmNwcCBiL1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29y
ZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuY3BwCmluZGV4IDNmOGM5MDdjNzM5ZjA4
Y2RiOTkxNmU4MzZmOWIwOGRlNjc4NDUxY2YuLmQ1NTc5NzIzMTE2MTU5MWQ1ZmRiMTcxNTgwNDQ1
OGRiNzgyYzkxZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBv
cnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luY2Uv
V2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuY3BwCkBAIC05NCw4ICs5NCw4
IEBAIHZvaWQgUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OmdldFBsdWdpbkluZm8oY29uc3QgUGFn
ZSosIFZlY3RvcjxQbHVnaW5JbmZvPiYgb3V0CiAgICAgICAgIGZvciAoTUlNRVRvRGVzY3JpcHRp
b25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIE1pbWVDbGFzc0luZm8gbWltZTsKIAotICAg
ICAgICAgICAgbWltZS50eXBlID0gaXQtPmZpcnN0OwotICAgICAgICAgICAgbWltZS5kZXNjID0g
aXQtPnNlY29uZDsKKyAgICAgICAgICAgIG1pbWUudHlwZSA9IGl0LT5rZXk7CisgICAgICAgICAg
ICBtaW1lLmRlc2MgPSBpdC0+dmFsdWU7CiAgICAgICAgICAgICBtaW1lLmV4dGVuc2lvbnMgPSBw
YWNrYWdlLT5taW1lVG9FeHRlbnNpb25zKCkuZ2V0KG1pbWUudHlwZSk7CiAKICAgICAgICAgICAg
IGluZm8ubWltZXMuYXBwZW5kKG1pbWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxh
dGZvcm0vQ29yZUlQQy9Bcmd1bWVudENvZGVycy5oIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0v
Q29yZUlQQy9Bcmd1bWVudENvZGVycy5oCmluZGV4IGRkNTRkZmVlZjkxYTdkZTMxMTkxNWU5M2Q5
YWZiZWIxM2ExY2JlNzcuLmFmMTYzYmU2ZDliNjRjMzA5ZDkxOWFkMWI3MzY1ODhlYjI2MzFjYmEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQXJndW1lbnRDb2Rl
cnMuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50Q29kZXJz
LmgKQEAgLTc1LDggKzc1LDggQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gc3Ry
dWN0IEFyZ3VtZW50Q29kZXI8c3RkOjpwYWlyPFQsIFU+ID4gewogdGVtcGxhdGU8dHlwZW5hbWUg
S2V5VHlwZSwgdHlwZW5hbWUgVmFsdWVUeXBlPiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXVEY6Oktl
eVZhbHVlUGFpcjxLZXlUeXBlLCBWYWx1ZVR5cGU+ID4gewogICAgIHN0YXRpYyB2b2lkIGVuY29k
ZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0IFdURjo6S2V5VmFsdWVQYWlyPEtleVR5
cGUsIFZhbHVlVHlwZT4mIHBhaXIpCiAgICAgewotICAgICAgICBlbmNvZGVyLT5lbmNvZGUocGFp
ci5maXJzdCk7Ci0gICAgICAgIGVuY29kZXItPmVuY29kZShwYWlyLnNlY29uZCk7CisgICAgICAg
IGVuY29kZXItPmVuY29kZShwYWlyLmtleSk7CisgICAgICAgIGVuY29kZXItPmVuY29kZShwYWly
LnZhbHVlKTsKICAgICB9CiAKICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVy
KiBkZWNvZGVyLCBXVEY6OktleVZhbHVlUGFpcjxLZXlUeXBlLCBWYWx1ZVR5cGU+JiBwYWlyKQpA
QCAtODksOCArODksOCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlUeXBlLCB0eXBlbmFtZSBWYWx1
ZVR5cGU+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdURjo6S2V5VmFsdQogICAgICAgICBpZiAoIWRl
Y29kZXItPmRlY29kZSh2YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAg
ICAgcGFpci5maXJzdCA9IGtleTsKLSAgICAgICAgcGFpci5zZWNvbmQgPSB2YWx1ZTsKKyAgICAg
ICAgcGFpci5rZXkgPSBrZXk7CisgICAgICAgIHBhaXIudmFsdWUgPSB2YWx1ZTsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRm
b3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3Jl
SVBDL0Nvbm5lY3Rpb24uY3BwCmluZGV4IGQyMmI4YjRjMWI4YzUyOGNlY2I4YjIxYzcwNTQwZjMw
NmNiM2VlMzQuLjM0NDllMzUyZTEwY2VjYjA0N2JlMDlmYWI4OGUwYWY5MDY5MzJhZDIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Db25uZWN0aW9uLmNwcApAQCAtMTAy
LDEyICsxMDIsMTIgQEAgUGFzc1JlZlB0cjxDb25uZWN0aW9uOjpTeW5jTWVzc2FnZVN0YXRlPiBD
b25uZWN0aW9uOjpTeW5jTWVzc2FnZVN0YXRlOjpnZXRPckNyZWEKICAgICBTeW5jTWVzc2FnZVN0
YXRlTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gc3luY01lc3NhZ2VTdGF0ZU1hcCgpLmFkZChydW5M
b29wLCAwKTsKIAogICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgQVNTRVJU
KHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRv
ci0+c2Vjb25kOworICAgICAgICBBU1NFUlQocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CisgICAg
ICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogICAgIH0KIAogICAgIFJlZlB0cjxT
eW5jTWVzc2FnZVN0YXRlPiBzeW5jTWVzc2FnZVN0YXRlID0gYWRvcHRSZWYobmV3IFN5bmNNZXNz
YWdlU3RhdGUocnVuTG9vcCkpOwotICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gc3luY01l
c3NhZ2VTdGF0ZS5nZXQoKTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gc3luY01lc3Nh
Z2VTdGF0ZS5nZXQoKTsKIAogICAgIHJldHVybiBzeW5jTWVzc2FnZVN0YXRlLnJlbGVhc2UoKTsK
IH0KQEAgLTM2MiwxMCArMzYyLDEwIEBAIFBhc3NPd25QdHI8QXJndW1lbnREZWNvZGVyPiBDb25u
ZWN0aW9uOjp3YWl0Rm9yTWVzc2FnZShNZXNzYWdlSUQgbWVzc2FnZUlELCB1aW50CiAgICAgICAg
IE11dGV4TG9ja2VyIGxvY2tlcihtX3dhaXRGb3JNZXNzYWdlTXV0ZXgpOwogCiAgICAgICAgIEhh
c2hNYXA8c3RkOjpwYWlyPHVuc2lnbmVkLCB1aW50NjRfdD4sIEFyZ3VtZW50RGVjb2Rlcio+Ojpp
dGVyYXRvciBpdCA9IG1fd2FpdEZvck1lc3NhZ2VNYXAuZmluZChtZXNzYWdlQW5kRGVzdGluYXRp
b24pOwotICAgICAgICBpZiAoaXQtPnNlY29uZCkgeworICAgICAgICBpZiAoaXQtPnZhbHVlKSB7
CiAgICAgICAgICAgICAvLyBGSVhNRTogbV93YWl0Rm9yTWVzc2FnZU1hcCBzaG91bGQgcmVhbGx5
IGhvbGQgT3duUHRycyB0bwogICAgICAgICAgICAgLy8gQXJndW1lbnREZWNvZGVycywgYnV0IEhh
c2hNYXAgZG9lc24ndCBjdXJyZW50bHkgc3VwcG9ydCBPd25QdHJzLgotICAgICAgICAgICAgT3du
UHRyPEFyZ3VtZW50RGVjb2Rlcj4gYXJndW1lbnRzID0gYWRvcHRQdHIoaXQtPnNlY29uZCk7Cisg
ICAgICAgICAgICBPd25QdHI8QXJndW1lbnREZWNvZGVyPiBhcmd1bWVudHMgPSBhZG9wdFB0cihp
dC0+dmFsdWUpOwogICAgICAgICAgICAgbV93YWl0Rm9yTWVzc2FnZU1hcC5yZW1vdmUoaXQpOwog
ICAgICAgICAgICAgCiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnRzLnJlbGVhc2UoKTsKQEAg
LTUzOSw4ICs1MzksOCBAQCB2b2lkIENvbm5lY3Rpb246OnByb2Nlc3NJbmNvbWluZ01lc3NhZ2Uo
TWVzc2FnZUlEIG1lc3NhZ2VJRCwgUGFzc093blB0cjxBcmd1bWVudAogICAgICAgICAKICAgICAg
ICAgSGFzaE1hcDxzdGQ6OnBhaXI8dW5zaWduZWQsIHVpbnQ2NF90PiwgQXJndW1lbnREZWNvZGVy
Kj46Oml0ZXJhdG9yIGl0ID0gbV93YWl0Rm9yTWVzc2FnZU1hcC5maW5kKHN0ZDo6bWFrZV9wYWly
KG1lc3NhZ2VJRC50b0ludCgpLCBpbmNvbWluZ01lc3NhZ2UuZGVzdGluYXRpb25JRCgpKSk7CiAg
ICAgICAgIGlmIChpdCAhPSBtX3dhaXRGb3JNZXNzYWdlTWFwLmVuZCgpKSB7Ci0gICAgICAgICAg
ICBpdC0+c2Vjb25kID0gaW5jb21pbmdNZXNzYWdlLnJlbGVhc2VBcmd1bWVudHMoKS5sZWFrUHRy
KCk7Ci0gICAgICAgICAgICBBU1NFUlQoaXQtPnNlY29uZCk7CisgICAgICAgICAgICBpdC0+dmFs
dWUgPSBpbmNvbWluZ01lc3NhZ2UucmVsZWFzZUFyZ3VtZW50cygpLmxlYWtQdHIoKTsKKyAgICAg
ICAgICAgIEFTU0VSVChpdC0+dmFsdWUpOwogICAgICAgICAKICAgICAgICAgICAgIG1fd2FpdEZv
ck1lc3NhZ2VDb25kaXRpb24uc2lnbmFsKCk7CiAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9ndGsvV29ya1F1ZXVlR3RrLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1BsYXRmb3JtL2d0ay9Xb3JrUXVldWVHdGsuY3BwCmluZGV4IDFkZmFiODNjY2Zi
MjRjOWYwMGVlNDBkMmRhYTFjOTViMTYzODJhNDMuLjY4ODVkNDg1YmQxMTZkMzI4ZGVjZDAyYWFm
NTRjOTE4NzgyYjJmMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2d0ay9X
b3JrUXVldWVHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2d0ay9Xb3JrUXVl
dWVHdGsuY3BwCkBAIC0xNjYsNyArMTY2LDcgQEAgdm9pZCBXb3JrUXVldWU6OnJlZ2lzdGVyRXZl
bnRTb3VyY2VIYW5kbGVyKGludCBmaWxlRGVzY3JpcHRvciwgaW50IGNvbmRpdGlvbiwgY28KICAg
ICAgICAgVmVjdG9yPEV2ZW50U291cmNlKj4gc291cmNlczsKICAgICAgICAgRXZlbnRTb3VyY2VJ
dGVyYXRvciBpdCA9IG1fZXZlbnRTb3VyY2VzLmZpbmQoZmlsZURlc2NyaXB0b3IpOwogICAgICAg
ICBpZiAoaXQgIT0gbV9ldmVudFNvdXJjZXMuZW5kKCkpIAotICAgICAgICAgICAgc291cmNlcyA9
IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICBzb3VyY2VzID0gaXQtPnZhbHVlOwogCiAgICAgICAg
IHNvdXJjZXMuYXBwZW5kKGV2ZW50U291cmNlKTsKICAgICAgICAgbV9ldmVudFNvdXJjZXMuc2V0
KGZpbGVEZXNjcmlwdG9yLCBzb3VyY2VzKTsKQEAgLTE4Niw3ICsxODYsNyBAQCB2b2lkIFdvcmtR
dWV1ZTo6dW5yZWdpc3RlckV2ZW50U291cmNlSGFuZGxlcihpbnQgZmlsZURlc2NyaXB0b3IpCiAg
ICAgQVNTRVJUKG1fZXZlbnRTb3VyY2VzLmNvbnRhaW5zKGZpbGVEZXNjcmlwdG9yKSk7CiAKICAg
ICBpZiAoaXQgIT0gbV9ldmVudFNvdXJjZXMuZW5kKCkpIHsKLSAgICAgICAgVmVjdG9yPEV2ZW50
U291cmNlKj4gc291cmNlcyA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFZlY3RvcjxFdmVudFNvdXJj
ZSo+IHNvdXJjZXMgPSBpdC0+dmFsdWU7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzb3VyY2VzLnNpemUoKTsgaSsrKQogICAgICAgICAgICAgc291cmNlc1tpXS0+Y2FuY2VsKCk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL21hYy9Xb3JrUXVldWVNYWMu
Y3BwIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vbWFjL1dvcmtRdWV1ZU1hYy5jcHAKaW5kZXgg
YWU0NzNlZTVjYzg0ZTU4NDI5YjA0MzljY2Q5MjFhYzJjNDkyZmZhYS4uNmU1NGNlZTBiNzA5ODQw
YTU0Zjc2Y2RhYTQyNGZlZWI0NjI5MDliMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxh
dGZvcm0vbWFjL1dvcmtRdWV1ZU1hYy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0v
bWFjL1dvcmtRdWV1ZU1hYy5jcHAKQEAgLTE1Myw3ICsxNTMsNyBAQCB2b2lkIFdvcmtRdWV1ZTo6
dW5yZWdpc3Rlck1hY2hQb3J0RXZlbnRIYW5kbGVyKG1hY2hfcG9ydF90IG1hY2hQb3J0KQogICAg
IAogICAgIEFTU0VSVChtX2V2ZW50U291cmNlcy5jb250YWlucyhtYWNoUG9ydCkpOwogCi0gICAg
RXZlbnRTb3VyY2UqIGV2ZW50U291cmNlID0gaXQtPnNlY29uZDsKKyAgICBFdmVudFNvdXJjZSog
ZXZlbnRTb3VyY2UgPSBpdC0+dmFsdWU7CiAgICAgLy8gQ2FuY2VsIGFuZCByZWxlYXNlIHRoZSBz
b3VyY2UuIEl0IHdpbGwgYmUgZGVsZXRlZCBpbiBpdHMgZmluYWxpemUgaGFuZGxlci4KICAgICBk
aXNwYXRjaF9zb3VyY2VfY2FuY2VsKGV2ZW50U291cmNlLT5kaXNwYXRjaFNvdXJjZSgpKTsKICAg
ICBkaXNwYXRjaF9yZWxlYXNlKGV2ZW50U291cmNlLT5kaXNwYXRjaFNvdXJjZSgpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9QbHVnaW5zL05QUmVtb3RlT2JqZWN0TWFwLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9QbHVnaW5zL05QUmVtb3RlT2JqZWN0TWFwLmNwcApp
bmRleCA3NjQxYWY1ZThjODkyZDFkMzdlZTk2ZGE5YjdlNjA1ODk5NzNlODhhLi5iNWVjMmQ5ZGEz
OWYyNmRjYjQzMjBkOTVlMDNmMmZjYWU0ZTdkN2RmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvUGx1Z2lucy9OUFJlbW90ZU9iamVjdE1hcC5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvU2hhcmVkL1BsdWdpbnMvTlBSZW1vdGVPYmplY3RNYXAuY3BwCkBAIC0yMDAsNyArMjAwLDcg
QEAgdm9pZCBOUFJlbW90ZU9iamVjdE1hcDo6cGx1Z2luRGVzdHJveWVkKFBsdWdpbiogcGx1Z2lu
KQogCiAgICAgLy8gR2F0aGVyIHRoZSByZWNlaXZlcnMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcGx1
Zy1pbi4KICAgICBmb3IgKEhhc2hNYXA8dWludDY0X3QsIE5QT2JqZWN0TWVzc2FnZVJlY2VpdmVy
Kj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9yZWdpc3RlcmVkTlBPYmplY3RzLmJlZ2luKCksIGVu
ZCA9IG1fcmVnaXN0ZXJlZE5QT2JqZWN0cy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAg
ICAgIE5QT2JqZWN0TWVzc2FnZVJlY2VpdmVyKiBucE9iamVjdE1lc3NhZ2VSZWNlaXZlciA9IGl0
LT5zZWNvbmQ7CisgICAgICAgIE5QT2JqZWN0TWVzc2FnZVJlY2VpdmVyKiBucE9iamVjdE1lc3Nh
Z2VSZWNlaXZlciA9IGl0LT52YWx1ZTsKICAgICAgICAgaWYgKG5wT2JqZWN0TWVzc2FnZVJlY2Vp
dmVyLT5wbHVnaW4oKSA9PSBwbHVnaW4pCiAgICAgICAgICAgICBtZXNzYWdlUmVjZWl2ZXJzLmFw
cGVuZChucE9iamVjdE1lc3NhZ2VSZWNlaXZlcik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvU2hhcmVkL1VzZXJNZXNzYWdlQ29kZXJzLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvVXNlck1lc3NhZ2VDb2RlcnMuaAppbmRleCBlZTRhYjY0ZmZhNWI2M2I5MmMwOTk5NTU0ODVm
MjBlMjE1NTVlNmNmLi4yZWM1YmI0ZDUyYjIwNzUxZmRiNTdlZDY2MjgwZWE5MDdiZDM5YjUwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvVXNlck1lc3NhZ2VDb2RlcnMuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvVXNlck1lc3NhZ2VDb2RlcnMuaApAQCAtOTMsOCArOTMs
OCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBJbW11dGFibGVEaWN0aW9uYXJ5OjpNYXBUeXBlOjpj
b25zdF9pdGVyYXRvciBpdCA9IG1hcC5iZWdpbigpOwogICAgICAgICAgICAgSW1tdXRhYmxlRGlj
dGlvbmFyeTo6TWFwVHlwZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLmVuZCgpOwogICAgICAg
ICAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgICAgIGVuY29kZXIt
PmVuY29kZShpdC0+Zmlyc3QpOwotICAgICAgICAgICAgICAgIGVuY29kZXItPmVuY29kZShPd25l
cihpdC0+c2Vjb25kLmdldCgpKSk7CisgICAgICAgICAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKGl0
LT5rZXkpOworICAgICAgICAgICAgICAgIGVuY29kZXItPmVuY29kZShPd25lcihpdC0+dmFsdWUu
Z2V0KCkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9y
ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5jcHAKaW5k
ZXggODk3MzRiZjBlZmIwODAzODBlZGM2NDVlM2VjNzFkY2RmMzY3YzZmOS4uM2JhMjdlZGMwNjA2
NzllYmQ1ZGNlZTBhNTdmZmQ3YTViOWQwYjlmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
U2hhcmVkL1dlYlByZWZlcmVuY2VzU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9XZWJQcmVmZXJlbmNlc1N0b3JlLmNwcApAQCAtMTUxLDcgKzE1MSw3IEBAIHN0YXRpYyB0eXBl
bmFtZSBNYXBUeXBlOjpNYXBwZWRUeXBlIHZhbHVlRm9yS2V5KGNvbnN0IE1hcFR5cGUmIG1hcCwg
Y29uc3QgdHlwZW5hCiB7CiAgICAgdHlwZW5hbWUgTWFwVHlwZTo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtYXAuZmluZChrZXkpOwogICAgIGlmIChpdCAhPSBtYXAuZW5kKCkpCi0gICAgICAgIHJldHVy
biBpdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwogCiAgICAgcmV0dXJuIGRl
ZmF1bHRWYWx1ZUZvcktleTx0eXBlbmFtZSBNYXBUeXBlOjpNYXBwZWRUeXBlPihrZXkpOwogfQpA
QCAtMTg3LDcgKzE4Nyw3IEBAIGJvb2wgV2ViUHJlZmVyZW5jZXNTdG9yZTo6Z2V0Qm9vbFZhbHVl
Rm9yS2V5KGNvbnN0IFN0cmluZyYga2V5KSBjb25zdAogICAgIC8vIEZJWE1FOiBFeHRlbmQgb3Zl
cnJpZGluZyB0byBvdGhlciBrZXkgdHlwZXMgdXNlZCBmcm9tIFRlc3RSdW5uZXIuCiAgICAgQm9v
bE92ZXJyaWRlc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBib29sVGVzdFJ1bm5lck92ZXJyaWRl
c01hcCgpLmZpbmQoa2V5KTsKICAgICBpZiAoaXQgIT0gYm9vbFRlc3RSdW5uZXJPdmVycmlkZXNN
YXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBp
dC0+dmFsdWU7CiAgICAgcmV0dXJuIHZhbHVlRm9yS2V5KG1fYm9vbFZhbHVlcywga2V5KTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9XZWJDb3JlQXJndW1lbnRD
b2RlcnNNYWMubW0gYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1dlYkNvcmVBcmd1bWVudENv
ZGVyc01hYy5tbQppbmRleCAxOTZhYjExYzdhNzQzMTA3ZDM4MDBlMWZmOGZhNWJlMWYyYjNiODE4
Li4wZjlkM2Q4YTNiZmI3Mzc0M2IzOTMzNTMzNWRjNWY1OGMxZDE0NzgwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1dlYkNvcmVBcmd1bWVudENvZGVyc01hYy5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1dlYkNvcmVBcmd1bWVudENvZGVyc01hYy5tbQpA
QCAtMTgzLDcgKzE4Myw3IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxSZXNvdXJjZUVycm9yPjo6ZGVj
b2RlKEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgUmVzb3VyY2VFcnJvCiAgICAgSGFzaE1hcDxT
dHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gc3RyaW5nVXNlckluZm9NYXAuYmVn
aW4oKTsKICAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
c3RyaW5nVXNlckluZm9NYXAuZW5kKCk7CiAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkKLSAg
ICAgICAgW3VzZXJJbmZvIHNldE9iamVjdDpuc1N0cmluZyhpdC0+c2Vjb25kKSBmb3JLZXk6bnNT
dHJpbmcoaXQtPmZpcnN0KV07CisgICAgICAgIFt1c2VySW5mbyBzZXRPYmplY3Q6bnNTdHJpbmco
aXQtPnZhbHVlKSBmb3JLZXk6bnNTdHJpbmcoaXQtPmtleSldOwogCiAgICAgaWYgKGNlcnRpZmlj
YXRlLmNlcnRpZmljYXRlQ2hhaW4oKSkKICAgICAgICAgW3VzZXJJbmZvIHNldE9iamVjdDooTlNB
cnJheSAqKWNlcnRpZmljYXRlLmNlcnRpZmljYXRlQ2hhaW4oKSBmb3JLZXk6QCJOU0Vycm9yUGVl
ckNlcnRpZmljYXRlQ2hhaW5LZXkiXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9xdC9Bcmd1bWVudENvZGVyc1F0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9Bcmd1
bWVudENvZGVyc1F0LmNwcAppbmRleCBjODliZjQ0ZjE3MTkwYjAyYzQxMTJiY2JlZDZlMGM0MWZh
M2M2NzVmLi5hNDM5Y2FmZjFlNDg4ZTEwMmM1NTBhZDA0ZjM0NmQ1OTk2ZGQxODkyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvQXJndW1lbnRDb2RlcnNRdC5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL3F0L0FyZ3VtZW50Q29kZXJzUXQuY3BwCkBAIC04Niw4ICs4
Niw4IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpEcmFnRGF0YT46OmRlY29kZShBcmd1
bWVudERlY29kZXIqIGRlY29kZXIsIERyYWdEYXRhCiAgICAgICAgIE1JTUVEYXRhSGFzaE1hcDo6
aXRlcmF0b3IgaXQgPSBtYXAuYmVnaW4oKTsKICAgICAgICAgTUlNRURhdGFIYXNoTWFwOjppdGVy
YXRvciBlbmQgPSBtYXAuZW5kKCk7CiAgICAgICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsK
LSAgICAgICAgICAgIFFCeXRlQXJyYXkgYnl0ZXMoKGNoYXIqKWl0LT5zZWNvbmQuZGF0YSgpLCBp
dC0+c2Vjb25kLnNpemUoKSk7Ci0gICAgICAgICAgICBtaW1lRGF0YS0+c2V0RGF0YShpdC0+Zmly
c3QsIGJ5dGVzKTsKKyAgICAgICAgICAgIFFCeXRlQXJyYXkgYnl0ZXMoKGNoYXIqKWl0LT52YWx1
ZS5kYXRhKCksIGl0LT52YWx1ZS5zaXplKCkpOworICAgICAgICAgICAgbWltZURhdGEtPnNldERh
dGEoaXQtPmtleSwgYnl0ZXMpOwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvc291cC9XZWJDb3JlQXJndW1lbnRDb2RlcnNTb3VwLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9zb3VwL1dlYkNvcmVBcmd1bWVudENvZGVyc1NvdXAuY3BwCmlu
ZGV4IGRiZTJjNTFjZGNmYjc5OGFmYWNkMmZkMWRiZmE0OTJiMWExZWZiMWIuLjMzZDliZDNmZjIw
ZTYxOTBjYzNjZTRmZjg1OTkzOGIwMzk0ZWQ2YzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9zb3VwL1dlYkNvcmVBcmd1bWVudENvZGVyc1NvdXAuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9zb3VwL1dlYkNvcmVBcmd1bWVudENvZGVyc1NvdXAuY3BwCkBAIC0xNDQs
NyArMTQ0LDcgQEAgYm9vbCBBcmd1bWVudENvZGVyPFJlc291cmNlUmVzcG9uc2U+OjpkZWNvZGUo
QXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBSZXNvdXJjZVIKICAgICBpZiAoIWRlY29kZXItPmRl
Y29kZShoZWFkZXJzKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGZvciAoSFRUUEhlYWRl
ck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBoZWFkZXJzLmJlZ2luKCksIGVuZCA9IGhlYWRlcnMu
ZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgcmVzcG9uc2Uuc2V0SFRUUEhlYWRlckZp
ZWxkKGl0LT5maXJzdCwgaXQtPnNlY29uZCk7CisgICAgICAgIHJlc3BvbnNlLnNldEhUVFBIZWFk
ZXJGaWVsZChpdC0+a2V5LCBpdC0+dmFsdWUpOwogCiAgICAgdWludDMyX3Qgc291cE1lc3NhZ2VG
bGFnczsKICAgICBpZiAoIWRlY29kZXItPmRlY29kZShzb3VwTWVzc2FnZUZsYWdzKSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcAppbmRleCA3
MTUwNGY2NDFkMjA2NWRmMmJmNjg4ZGE0NWU5NWQ1YTUxZGI1OGI0Li5jZjJmY2MzZjkyMThhZGYw
MmM0NDViYTMyNTBmMmQwYjNmMGJiZGUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCkBAIC05Nyw3ICs5Nyw3IEBAIHN0cnVjdCBfRXdr
X0NvbnRleHQgewogICAgICAgICBIYXNoTWFwPHVpbnQ2NF90LCBFd2tfRG93bmxvYWRfSm9iKj46
Oml0ZXJhdG9yIGl0ID0gZG93bmxvYWRKb2JzLmJlZ2luKCk7CiAgICAgICAgIEhhc2hNYXA8dWlu
dDY0X3QsIEV3a19Eb3dubG9hZF9Kb2IqPjo6aXRlcmF0b3IgZW5kID0gZG93bmxvYWRKb2JzLmVu
ZCgpOwogICAgICAgICBmb3IgKCA7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIGV3a19k
b3dubG9hZF9qb2JfdW5yZWYoaXQtPnNlY29uZCk7CisgICAgICAgICAgICBld2tfZG93bmxvYWRf
am9iX3VucmVmKGl0LT52YWx1ZSk7CiAgICAgfQogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwCmluZGV4IGNlN2Y3YjQ1NDk0NjNjMTBmYmFjY2I3
NTczYTNiZWFhZGUyNTNiMGQuLjcxNDM4MDI3MTAzN2YwYTNmNWVjM2VmNTljNDU3MWEzYmRmMDQ5
OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAK
QEAgLTM0NCw3ICszNDQsNyBAQCBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfcHJpdl9sb2FkaW5nX3Jl
c291cmNlc19jbGVhcihMb2FkaW5nUmVzb3VyY2VzTWFwJiBsb2FkaW5nUgogICAgIExvYWRpbmdS
ZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbG9hZGluZ1Jlc291cmNlc01hcC5iZWdpbigpOwog
ICAgIExvYWRpbmdSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGVuZCA9IGxvYWRpbmdSZXNvdXJjZXNN
YXAuZW5kKCk7CiAgICAgZm9yICggOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGV3a193ZWJf
cmVzb3VyY2VfdW5yZWYoaXQtPnNlY29uZCk7CisgICAgICAgIGV3a193ZWJfcmVzb3VyY2VfdW5y
ZWYoaXQtPnZhbHVlKTsKIAogICAgIGxvYWRpbmdSZXNvdXJjZXNNYXAuY2xlYXIoKTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcu
Y3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAK
aW5kZXggZWU4NmQ0NDhhODgyYThhNjdiNTFjYzY4Y2Q0NTNiZTVhYWIwN2NjOC4uMWYwMWI0ODU1
NTU1N2Y5ZTBlZGRlODQ4YmQ0NjZhNjExYmFiZTFhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKQEAgLTIzMDAsNyArMjMwMCw3
IEBAIEdMaXN0KiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3N1YnJlc291cmNlcyhXZWJLaXRXZWJWaWV3
KiB3ZWJWaWV3KQogICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiBwcml2ID0gd2ViVmlldy0+cHJp
djsKICAgICBSZXNvdXJjZXNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHByaXYtPnN1YnJlc291
cmNlc01hcC5lbmQoKTsKICAgICBmb3IgKFJlc291cmNlc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBwcml2LT5zdWJyZXNvdXJjZXNNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAg
ICBzdWJyZXNvdXJjZXMgPSBnX2xpc3RfcHJlcGVuZChzdWJyZXNvdXJjZXMsIGl0LT5zZWNvbmQu
Z2V0KCkpOworICAgICAgICBzdWJyZXNvdXJjZXMgPSBnX2xpc3RfcHJlcGVuZChzdWJyZXNvdXJj
ZXMsIGl0LT52YWx1ZS5nZXQoKSk7CiAKICAgICByZXR1cm4gZ19saXN0X3JldmVyc2Uoc3VicmVz
b3VyY2VzKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFdlYlZpZXdCYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFdlYlZpZXdCYXNlLmNwcAppbmRleCA0OTI1YjVhN2MxY2VlOWM4NGZlNTg0MmJjZDBj
MWE5MTIyNmU1OTRhLi4xOTA5MTE3MzE2N2ZmNjNjNzBjZGFmMWZiOTAxNGY5ZDYxMzNmM2I3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3
QmFzZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vi
Vmlld0Jhc2UuY3BwCkBAIC0yMjQsNyArMjI0LDcgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViVmll
d0Jhc2VDb250YWluZXJGb3JhbGwoR3RrQ29udGFpbmVyKiBjb250YWluZXIsIGdib29sZWFuIGkK
ICAgICBXZWJLaXRXZWJWaWV3Q2hpbGRyZW5NYXAgY2hpbGRyZW4gPSBwcml2LT5jaGlsZHJlbjsK
ICAgICBXZWJLaXRXZWJWaWV3Q2hpbGRyZW5NYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGNoaWxk
cmVuLmVuZCgpOwogICAgIGZvciAoV2ViS2l0V2ViVmlld0NoaWxkcmVuTWFwOjpjb25zdF9pdGVy
YXRvciBjdXJyZW50ID0gY2hpbGRyZW4uYmVnaW4oKTsgY3VycmVudCAhPSBlbmQ7ICsrY3VycmVu
dCkKLSAgICAgICAgKCpjYWxsYmFjaykoY3VycmVudC0+Zmlyc3QsIGNhbGxiYWNrRGF0YSk7Cisg
ICAgICAgICgqY2FsbGJhY2spKGN1cnJlbnQtPmtleSwgY2FsbGJhY2tEYXRhKTsKIAogICAgIGlm
IChpbmNsdWRlSW50ZXJuYWxzICYmIHByaXYtPmluc3BlY3RvclZpZXcpCiAgICAgICAgICgqY2Fs
bGJhY2spKHByaXYtPmluc3BlY3RvclZpZXcsIGNhbGxiYWNrRGF0YSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ByaW50aW5nVmlldy5tbSBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLUHJpbnRpbmdWaWV3Lm1tCmluZGV4IDYzYzU4
ODk1ZjcxMjkzYjFiNTQ1OGQ5ZWI2ODQxZDBhMDY0ODE0OWQuLmNhMWNhZDU4MjU5OWZkMGM2MGIy
NTI0YzZiYzc3Mjc2OWQyZmQzOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvbWFjL1dLUHJpbnRpbmdWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvbWFjL1dLUHJpbnRpbmdWaWV3Lm1tCkBAIC0xOTQsOCArMTk0LDggQEAgc3RhdGljIEJP
T0wgaXNGb3JjaW5nUHJldmlld1VwZGF0ZTsKIC0gKHVpbnQ2NF90KV9leHBlY3RlZFByZXZpZXdD
YWxsYmFja0ZvclJlY3Q6KGNvbnN0IEludFJlY3QmKXJlY3QKIHsKICAgICBmb3IgKEhhc2hNYXA8
dWludDY0X3QsIFdlYkNvcmU6OkludFJlY3Q+OjppdGVyYXRvciBpdGVyID0gX2V4cGVjdGVkUHJl
dmlld0NhbGxiYWNrcy5iZWdpbigpOyBpdGVyICE9IF9leHBlY3RlZFByZXZpZXdDYWxsYmFja3Mu
ZW5kKCk7ICsraXRlcikgewotICAgICAgICBpZiAoaXRlci0+c2Vjb25kICA9PSByZWN0KQotICAg
ICAgICAgICAgcmV0dXJuIGl0ZXItPmZpcnN0OworICAgICAgICBpZiAoaXRlci0+dmFsdWUgID09
IHJlY3QpCisgICAgICAgICAgICByZXR1cm4gaXRlci0+a2V5OwogICAgIH0KICAgICByZXR1cm4g
MDsKIH0KQEAgLTIyOSw4ICsyMjksOCBAQCBzdGF0aWMgdm9pZCBwYWdlRGlkRHJhd1RvUERGKFdL
RGF0YVJlZiBkYXRhUmVmLCBXS0Vycm9yUmVmLCB2b2lkKiB1bnR5cGVkQ29udGV4dAogICAgICAg
ICAgICAgQVNTRVJUKFt2aWV3IF9pc1ByaW50aW5nUHJldmlld10pOwogCiAgICAgICAgICAgICBp
ZiAoZGF0YSkgewotICAgICAgICAgICAgICAgIEhhc2hNYXA8V2ViQ29yZTo6SW50UmVjdCwgVmVj
dG9yPHVpbnQ4X3Q+ID46OkFkZFJlc3VsdCBlbnRyeSA9IHZpZXctPl9wYWdlUHJldmlld3MuYWRk
KGl0ZXItPnNlY29uZCwgVmVjdG9yPHVpbnQ4X3Q+KCkpOwotICAgICAgICAgICAgICAgIGVudHJ5
Lml0ZXJhdG9yLT5zZWNvbmQuYXBwZW5kKGRhdGEtPmJ5dGVzKCksIGRhdGEtPnNpemUoKSk7Cisg
ICAgICAgICAgICAgICAgSGFzaE1hcDxXZWJDb3JlOjpJbnRSZWN0LCBWZWN0b3I8dWludDhfdD4g
Pjo6QWRkUmVzdWx0IGVudHJ5ID0gdmlldy0+X3BhZ2VQcmV2aWV3cy5hZGQoaXRlci0+dmFsdWUs
IFZlY3Rvcjx1aW50OF90PigpKTsKKyAgICAgICAgICAgICAgICBlbnRyeS5pdGVyYXRvci0+dmFs
dWUuYXBwZW5kKGRhdGEtPmJ5dGVzKCksIGRhdGEtPnNpemUoKSk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB2aWV3LT5fZXhwZWN0ZWRQcmV2aWV3Q2FsbGJhY2tzLnJlbW92ZShjb250ZXh0
LT5jYWxsYmFja0lEKTsKICAgICAgICAgICAgIGJvb2wgcmVjZWl2ZWRSZXNwb25zZVRvTGF0ZXN0
UmVxdWVzdCA9IHZpZXctPl9sYXRlc3RFeHBlY3RlZFByZXZpZXdDYWxsYmFjayA9PSBjb250ZXh0
LT5jYWxsYmFja0lEOwpAQCAtNDk0LDcgKzQ5NCw3IEBAIHN0YXRpYyB2b2lkIHByZXBhcmVEYXRh
Rm9yUHJpbnRpbmdPblNlY29uZGFyeVRocmVhZCh2b2lkKiB1bnR5cGVkQ29udGV4dCkKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgcGRmRGF0YUJ5
dGVzID0gcGFnZVByZXZpZXdJdGVyYXRvci0+c2Vjb25kOworICAgIGNvbnN0IFZlY3Rvcjx1aW50
OF90PiYgcGRmRGF0YUJ5dGVzID0gcGFnZVByZXZpZXdJdGVyYXRvci0+dmFsdWU7CiAgICAgUmV0
YWluUHRyPE5TRGF0YT4gcGRmRGF0YShBZG9wdE5TLCBbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhC
eXRlczpwZGZEYXRhQnl0ZXMuZGF0YSgpIGxlbmd0aDpwZGZEYXRhQnl0ZXMuc2l6ZSgpXSk7CiAg
ICAgUmV0YWluUHRyPFBERkRvY3VtZW50PiBwZGZEb2N1bWVudChBZG9wdE5TLCBbW3BkZkRvY3Vt
ZW50Q2xhc3MoKSBhbGxvY10gaW5pdFdpdGhEYXRhOnBkZkRhdGEuZ2V0KCldKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCmluZGV4IGViNmI4MTljNWQ0MDU2
Mzk4MTVlZTdiMTg5NTZlYzcxMDhhNWRhN2YuLjE5M2ExZDA1MmNlMjljMzExZTQ4MGRhM2Y4NTU1
YjkzZDEyMDg1NGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFj
L1dLVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcu
bW0KQEAgLTQyMyw3ICs0MjMsNyBAQCBzdGF0aWMgU3RyaW5nIGNvbW1hbmROYW1lRm9yU2VsZWN0
b3IoU0VMIHNlbGVjdG9yKQogICAgIHN0YXRpYyBjb25zdCBTZWxlY3Rvck5hbWVNYXAqIGV4Y2Vw
dGlvbk1hcCA9IGNyZWF0ZVNlbGVjdG9yRXhjZXB0aW9uTWFwKCk7CiAgICAgU2VsZWN0b3JOYW1l
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGV4Y2VwdGlvbk1hcC0+ZmluZChzZWxlY3Rvcik7CiAg
ICAgaWYgKGl0ICE9IGV4Y2VwdGlvbk1hcC0+ZW5kKCkpCi0gICAgICAgIHJldHVybiBpdC0+c2Vj
b25kOworICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwogICAgIAogICAgIC8vIFJlbW92ZSB0aGUg
dHJhaWxpbmcgY29sb24uCiAgICAgLy8gTm8gbmVlZCB0byBjYXBpdGFsaXplIHRoZSBjb21tYW5k
IG5hbWUgc2luY2UgRWRpdG9yIGNvbW1hbmQgbmFtZXMgYXJlCkBAIC03MzcsNyArNzM3LDcgQEAg
c3RhdGljIHZvaWQgdmFsaWRhdGVDb21tYW5kQ2FsbGJhY2soV0tTdHJpbmdSZWYgY29tbWFuZE5h
bWUsIGJvb2wgaXNFbmFibGVkLCBpbnQKIAogICAgIC8vIEFkZCB0aGlzIGl0ZW0gdG8gdGhlIHZl
Y3RvciBvZiBpdGVtcyBmb3IgYSBnaXZlbiBjb21tYW5kIHRoYXQgYXJlIGF3YWl0aW5nIHZhbGlk
YXRpb24uCiAgICAgVmFsaWRhdGlvbk1hcDo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IF9kYXRhLT5f
dmFsaWRhdGlvbk1hcC5hZGQoY29tbWFuZE5hbWUsIFZhbGlkYXRpb25WZWN0b3IoKSk7Ci0gICAg
YWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQuYXBwZW5kKGl0ZW0pOworICAgIGFkZFJlc3VsdC5p
dGVyYXRvci0+dmFsdWUuYXBwZW5kKGl0ZW0pOwogICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRy
eSkgewogICAgICAgICAvLyBJZiB3ZSBhcmUgbm90IGFscmVhZHkgYXdhaXRpbmcgdmFsaWRhdGlv
biBmb3IgdGhpcyBjb21tYW5kLCBzdGFydCB0aGUgYXN5bmNocm9ub3VzIHZhbGlkYXRpb24gcHJv
Y2Vzcy4KICAgICAgICAgLy8gRklYTUU6IFRoZW9yZXRpY2FsbHksIHRoZXJlIGlzIGEgcmFjZSBo
ZXJlOyB3aGVuIHdlIGdldCB0aGUgYW5zd2VyIGl0IG1pZ2h0IGJlIG9sZCwgZnJvbSBhIHByZXZp
b3VzIHRpbWUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRl
ZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmNwcApp
bmRleCA4NGY2ZWJkMmYxNjU4ZTY5OTY1ZTQ3MWJhMzYyNWE5MjI4OWZhYTcyLi43N2ZkYzBhMjZm
ODhkNDMwN2E3YjYwMDdkYWJkNTNmMjkwNmQ1NDdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29v
cmRpbmF0ZWRCYWNraW5nU3RvcmUuY3BwCkBAIC04MCwxNSArODAsMTUgQEAgdm9pZCBDb29yZGlu
YXRlZEJhY2tpbmdTdG9yZTo6dXBkYXRlVGlsZShpbnQgaWQsIGNvbnN0IEludFJlY3QmIHNvdXJj
ZVJlY3QsIGNvbnMKIHsKICAgICBIYXNoTWFwPGludCwgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVU
aWxlPjo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmZpbmQoaWQpOwogICAgIEFTU0VSVChpdCAhPSBt
X3RpbGVzLmVuZCgpKTsKLSAgICBpdC0+c2Vjb25kLmluY3JlbWVudFJlcGFpbnRDb3VudCgpOwot
ICAgIGl0LT5zZWNvbmQuc2V0QmFja0J1ZmZlcih0YXJnZXRSZWN0LCBzb3VyY2VSZWN0LCBiYWNr
QnVmZmVyLCBvZmZzZXQpOworICAgIGl0LT52YWx1ZS5pbmNyZW1lbnRSZXBhaW50Q291bnQoKTsK
KyAgICBpdC0+dmFsdWUuc2V0QmFja0J1ZmZlcih0YXJnZXRSZWN0LCBzb3VyY2VSZWN0LCBiYWNr
QnVmZmVyLCBvZmZzZXQpOwogfQogCiBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IENvb3JkaW5h
dGVkQmFja2luZ1N0b3JlOjp0ZXh0dXJlKCkgY29uc3QKIHsKICAgICBIYXNoTWFwPGludCwgQ29v
cmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV90aWxlcy5l
bmQoKTsKICAgICBmb3IgKEhhc2hNYXA8aW50LCBDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGU+
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7
Ci0gICAgICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiB0ZXh0dXJlID0gaXQtPnNlY29uZC50ZXh0
dXJlKCk7CisgICAgICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiB0ZXh0dXJlID0gaXQtPnZhbHVl
LnRleHR1cmUoKTsKICAgICAgICAgaWYgKHRleHR1cmUpCiAgICAgICAgICAgICByZXR1cm4gdGV4
dHVyZTsKICAgICB9CkBAIC0xMTIsNyArMTEyLDcgQEAgdm9pZCBDb29yZGluYXRlZEJhY2tpbmdT
dG9yZTo6cGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwK
ICAgICBIYXNoTWFwPGludCwgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlPjo6aXRlcmF0b3Ig
ZW5kID0gbV90aWxlcy5lbmQoKTsKICAgICBGbG9hdFJlY3QgY292ZXJlZFJlY3Q7CiAgICAgZm9y
IChIYXNoTWFwPGludCwgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlPjo6aXRlcmF0b3IgaXQg
PSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBDb29yZGluYXRl
ZEJhY2tpbmdTdG9yZVRpbGUmIHRpbGUgPSBpdC0+c2Vjb25kOworICAgICAgICBDb29yZGluYXRl
ZEJhY2tpbmdTdG9yZVRpbGUmIHRpbGUgPSBpdC0+dmFsdWU7CiAgICAgICAgIGlmICghdGlsZS50
ZXh0dXJlKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIApAQCAtMTU2LDcgKzE1Niw3IEBAIHZv
aWQgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OmNvbW1pdFRpbGVPcGVyYXRpb25zKFRleHR1cmVN
YXBwZXIqIHRleHR1cmVNYXBwZXIpCiAKICAgICBIYXNoTWFwPGludCwgQ29vcmRpbmF0ZWRCYWNr
aW5nU3RvcmVUaWxlPjo6aXRlcmF0b3IgdGlsZXNFbmQgPSBtX3RpbGVzLmVuZCgpOwogICAgIGZv
ciAoSGFzaE1hcDxpbnQsIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZT46Oml0ZXJhdG9yIGl0
ID0gbV90aWxlcy5iZWdpbigpOyBpdCAhPSB0aWxlc0VuZDsgKytpdCkKLSAgICAgICAgaXQtPnNl
Y29uZC5zd2FwQnVmZmVycyh0ZXh0dXJlTWFwcGVyKTsKKyAgICAgICAgaXQtPnZhbHVlLnN3YXBC
dWZmZXJzKHRleHR1cmVNYXBwZXIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVy
VHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5jcHAKaW5kZXggNmIwZGU3
ZjI1NGIxODAzZDAzNjlhNmNmNGY4ODM5ODliODM4OTFjMC4uZmNjMWY2NzU2NWI2OGE4YTA3ODhh
MDFhNGQzOGE5ODc5Zjc2NDE5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29v
cmRpbmF0b3JQcm94eS5jcHAKQEAgLTczLDcgKzczLDcgQEAgdm9pZCBMYXllclRyZWVDb29yZGlu
YXRvclByb3h5Ojp1cGRhdGVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGludCB0aWxlSUQsIGNv
bnMKICAgICAgICAgICAgIHN1cmZhY2UgPSBTaGFyZWFibGVTdXJmYWNlOjpjcmVhdGUodXBkYXRl
SW5mby5zdXJmYWNlSGFuZGxlKTsKICAgICAgICAgICAgIG1fc3VyZmFjZXMuYWRkKHRva2VuLCBz
dXJmYWNlKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBzdXJmYWNlID0gaXQtPnNlY29u
ZDsKKyAgICAgICAgICAgIHN1cmZhY2UgPSBpdC0+dmFsdWU7CiAgICAgfSBlbHNlCiAgICAgICAg
IHN1cmZhY2UgPSBTaGFyZWFibGVTdXJmYWNlOjpjcmVhdGUodXBkYXRlSW5mby5zdXJmYWNlSGFu
ZGxlKTsKICNlbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRp
bmF0ZWRHcmFwaGljcy9MYXllclRyZWVSZW5kZXJlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVSZW5kZXJlci5jcHAKaW5kZXggNDgx
YjlmNzRiODk4NjExOTQ2Y2I2ODc0ZGRiYWUyOTUyMjA3OWRiYi4uNWUwY2UyZjhkMTUxMzU4NjZi
MmZjZDdiZGY5ZTRhN2M3OGU4NWYyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVy
LmNwcApAQCAtMTgzLDcgKzE4Myw3IEBAIHZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmFkanVzdFBv
c2l0aW9uRm9yRml4ZWRMYXllcnMoKQogCiAgICAgTGF5ZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IG1f
Zml4ZWRMYXllcnMuZW5kKCk7CiAgICAgZm9yIChMYXllck1hcDo6aXRlcmF0b3IgaXQgPSBtX2Zp
eGVkTGF5ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgdG9UZXh0dXJlTWFw
cGVyTGF5ZXIoaXQtPnNlY29uZCktPnNldFNjcm9sbFBvc2l0aW9uRGVsdGFJZk5lZWRlZChkZWx0
YSk7CisgICAgICAgIHRvVGV4dHVyZU1hcHBlckxheWVyKGl0LT52YWx1ZSktPnNldFNjcm9sbFBv
c2l0aW9uRGVsdGFJZk5lZWRlZChkZWx0YSk7CiB9CiAKIHZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6
OmRpZENoYW5nZVNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFBvaW50JiBwb3NpdGlvbikKQEAgLTIw
Niw3ICsyMDYsNyBAQCB2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpzeW5jQ2FudmFzKFdlYkxheWVy
SUQgaWQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGNhbnZhcwogICAgICAgICBjYW52YXNCYWNr
aW5nU3RvcmUgPSBUZXh0dXJlTWFwcGVyU3VyZmFjZUJhY2tpbmdTdG9yZTo6Y3JlYXRlKCk7CiAg
ICAgICAgIG1fc3VyZmFjZUJhY2tpbmdTdG9yZXMuc2V0KGlkLCBjYW52YXNCYWNraW5nU3RvcmUp
OwogICAgIH0gZWxzZQotICAgICAgICBjYW52YXNCYWNraW5nU3RvcmUgPSBpdC0+c2Vjb25kOwor
ICAgICAgICBjYW52YXNCYWNraW5nU3RvcmUgPSBpdC0+dmFsdWU7CiAKICAgICBjYW52YXNCYWNr
aW5nU3RvcmUtPnNldEdyYXBoaWNzU3VyZmFjZShncmFwaGljc1N1cmZhY2VUb2tlbiwgY2FudmFz
U2l6ZSwgZnJvbnRCdWZmZXIpOwogICAgIGxheWVyLT5zZXRDb250ZW50c1RvTWVkaWEoY2FudmFz
QmFja2luZ1N0b3JlLmdldCgpKTsKQEAgLTIxNyw3ICsyMTcsNyBAQCB2b2lkIExheWVyVHJlZVJl
bmRlcmVyOjpzZXRMYXllckNoaWxkcmVuKFdlYkxheWVySUQgaWQsIGNvbnN0IFZlY3RvcjxXZWJM
YXllcklEPgogewogICAgIGVuc3VyZUxheWVyKGlkKTsKICAgICBMYXllck1hcDo6aXRlcmF0b3Ig
aXQgPSBtX2xheWVycy5maW5kKGlkKTsKLSAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IGl0LT5z
ZWNvbmQ7CisgICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBpdC0+dmFsdWU7CiAgICAgVmVjdG9y
PEdyYXBoaWNzTGF5ZXIqPiBjaGlsZHJlbjsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
Y2hpbGRJRHMuc2l6ZSgpOyArK2kpIHsKQEAgLTIzOSw3ICsyMzksNyBAQCB2b2lkIExheWVyVHJl
ZVJlbmRlcmVyOjpzZXRMYXllckZpbHRlcnMoV2ViTGF5ZXJJRCBpZCwgY29uc3QgRmlsdGVyT3Bl
cmF0aW9ucyYgZgogICAgIExheWVyTWFwOjppdGVyYXRvciBpdCA9IG1fbGF5ZXJzLmZpbmQoaWQp
OwogICAgIEFTU0VSVChpdCAhPSBtX2xheWVycy5lbmQoKSk7CiAKLSAgICBHcmFwaGljc0xheWVy
KiBsYXllciA9IGl0LT5zZWNvbmQ7CisgICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBpdC0+dmFs
dWU7CiAgICAgbGF5ZXItPnNldEZpbHRlcnMoZmlsdGVycyk7CiB9CiAjZW5kaWYKQEAgLTI1MCw3
ICsyNTAsNyBAQCB2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpzZXRMYXllclN0YXRlKFdlYkxheWVy
SUQgaWQsIGNvbnN0IFdlYkxheWVySW5mbyYgbGF5ZXJJbgogICAgIExheWVyTWFwOjppdGVyYXRv
ciBpdCA9IG1fbGF5ZXJzLmZpbmQoaWQpOwogICAgIEFTU0VSVChpdCAhPSBtX2xheWVycy5lbmQo
KSk7CiAKLSAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IGl0LT5zZWNvbmQ7CisgICAgR3JhcGhp
Y3NMYXllciogbGF5ZXIgPSBpdC0+dmFsdWU7CiAKICAgICBsYXllci0+c2V0UmVwbGljYXRlZEJ5
TGF5ZXIobGF5ZXJCeUlEKGxheWVySW5mby5yZXBsaWNhKSk7CiAgICAgbGF5ZXItPnNldE1hc2tM
YXllcihsYXllckJ5SUQobGF5ZXJJbmZvLm1hc2spKTsKQEAgLTM3Nyw3ICszNzcsNyBAQCB2b2lk
IExheWVyVHJlZVJlbmRlcmVyOjphc3NpZ25JbWFnZVRvTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5
ZXIsIGludDY0X3QgaW1hZ2VJRAogCiAgICAgSGFzaE1hcDxpbnQ2NF90LCBSZWZQdHI8VGV4dHVy
ZU1hcHBlckJhY2tpbmdTdG9yZT4gPjo6aXRlcmF0b3IgaXQgPSBtX2RpcmVjdGx5Q29tcG9zaXRl
ZEltYWdlcy5maW5kKGltYWdlSUQpOwogICAgIEFTU0VSVChpdCAhPSBtX2RpcmVjdGx5Q29tcG9z
aXRlZEltYWdlcy5lbmQoKSk7Ci0gICAgbGF5ZXItPnNldENvbnRlbnRzVG9NZWRpYShpdC0+c2Vj
b25kLmdldCgpKTsKKyAgICBsYXllci0+c2V0Q29udGVudHNUb01lZGlhKGl0LT52YWx1ZS5nZXQo
KSk7CiB9CiAKIHZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmNvbW1pdFRpbGVPcGVyYXRpb25zKCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9HZW9sb2NhdGlvblBlcm1pc3Np
b25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9HZW9s
b2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcAppbmRleCA3MWJlYWY1YTVj
MzFkNDU1Y2E4ZDJiMWEyODgxY2EyYTcyNzE0N2IyLi4wZDQxNjM1NTQ2NWZmOTBkYTZiY2YwOGVj
MzViODRjMTcxYTUzOTk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvR2Vv
bG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHku
Y3BwCkBAIC00Miw3ICs0Miw3IEBAIHZvaWQgR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1h
bmFnZXJQcm94eTo6aW52YWxpZGF0ZVJlcXVlc3RzKCkKICAgICBQZW5kaW5nUmVxdWVzdE1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BlbmRpbmdSZXF1ZXN0cy5iZWdpbigpOwogICAgIFBlbmRp
bmdSZXF1ZXN0TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BlbmRpbmdSZXF1ZXN0cy5lbmQo
KTsKICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5pbnZh
bGlkYXRlKCk7CisgICAgICAgIGl0LT52YWx1ZS0+aW52YWxpZGF0ZSgpOwogCiAgICAgbV9wZW5k
aW5nUmVxdWVzdHMuY2xlYXIoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvV2ViSW5zcGVjdG9yU2VydmVyLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvV2ViSW5zcGVjdG9yU2VydmVyLmNwcAppbmRl
eCBlY2IxNzFiYjQ3MmI2YmFlZjNlZmMyOTI3ZjcxOGE2MWFmNDRjZTBjLi4zYTllMjNlZWRmOTdi
NjRkYjgxNmUzYWJiZGJjMjlkNmJiODdmMmI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL1dlYkluc3BlY3RvclNlcnZlci5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9XZWJJbnNwZWN0b3JTZXJ2ZXIu
Y3BwCkBAIC02Nyw3ICs2Nyw3IEBAIFdlYkluc3BlY3RvclNlcnZlcjo6fldlYkluc3BlY3RvclNl
cnZlcigpCiAgICAgLy8gQ2xvc2UgYW55IHJlbWFpbmluZyBvcGVuIGNvbm5lY3Rpb25zLgogICAg
IEhhc2hNYXA8dW5zaWduZWQsIFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24qPjo6aXRlcmF0b3Ig
ZW5kID0gbV9jb25uZWN0aW9uTWFwLmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDx1bnNpZ25lZCwg
V2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbio+OjppdGVyYXRvciBpdCA9IG1fY29ubmVjdGlvbk1h
cC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgV2ViU29ja2V0U2VydmVyQ29u
bmVjdGlvbiogY29ubmVjdGlvbiA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFdlYlNvY2tldFNlcnZl
ckNvbm5lY3Rpb24qIGNvbm5lY3Rpb24gPSBpdC0+dmFsdWU7CiAgICAgICAgIFdlYkluc3BlY3Rv
clByb3h5KiBjbGllbnQgPSBtX2NsaWVudE1hcC5nZXQoY29ubmVjdGlvbi0+aWRlbnRpZmllcigp
KTsKICAgICAgICAgY2xvc2VDb25uZWN0aW9uKGNsaWVudCwgY29ubmVjdGlvbik7CiAgICAgfQpA
QCAtNzgsNyArNzgsNyBAQCBpbnQgV2ViSW5zcGVjdG9yU2VydmVyOjpyZWdpc3RlclBhZ2UoV2Vi
SW5zcGVjdG9yUHJveHkqIGNsaWVudCkKICNpZm5kZWYgQVNTRVJUX0RJU0FCTEVECiAgICAgQ2xp
ZW50TWFwOjppdGVyYXRvciBlbmQgPSBtX2NsaWVudE1hcC5lbmQoKTsKICAgICBmb3IgKENsaWVu
dE1hcDo6aXRlcmF0b3IgaXQgPSBtX2NsaWVudE1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
Ci0gICAgICAgIEFTU0VSVChpdC0+c2Vjb25kICE9IGNsaWVudCk7CisgICAgICAgIEFTU0VSVChp
dC0+dmFsdWUgIT0gY2xpZW50KTsKICNlbmRpZgogCiAgICAgaW50IHBhZ2VJZCA9IG1fbmV4dEF2
YWlsYWJsZVBhZ2VJZCsrOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0lu
c3BlY3RvclNlcnZlci9XZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbi5j
cHAKaW5kZXggNTcyMDZlYjdiYjUyYThkOGE4NDhkZjU5NjdhMTBjNGI3MGUwNzdhNS4uYmVkYTUz
ZGI3YzRhNjUzNjY1OGZiZGJlODlhZTA4YmNlY2U1MDBmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9XZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9u
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL1dlYlNv
Y2tldFNlcnZlckNvbm5lY3Rpb24uY3BwCkBAIC0xMDYsOSArMTA2LDkgQEAgdm9pZCBXZWJTb2Nr
ZXRTZXJ2ZXJDb25uZWN0aW9uOjpzZW5kSFRUUFJlc3BvbnNlSGVhZGVyKGludCBzdGF0dXNDb2Rl
LCBjb25zdCBTdHIKICAgICBidWlsZGVyLmFwcGVuZCgiXHJcbiIpOwogICAgIEhUVFBIZWFkZXJN
YXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGhlYWRlckZpZWxkcy5lbmQoKTsKICAgICBmb3IgKEhU
VFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaGVhZGVyRmllbGRzLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgewotICAgICAgICBidWlsZGVyLmFwcGVuZChpdC0+Zmlyc3QpOworICAg
ICAgICBidWlsZGVyLmFwcGVuZChpdC0+a2V5KTsKICAgICAgICAgYnVpbGRlci5hcHBlbmQoIjog
Iik7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKGl0LT5zZWNvbmQgKyAiXHJcbiIpOworICAgICAg
ICBidWlsZGVyLmFwcGVuZChpdC0+dmFsdWUgKyAiXHJcbiIpOwogICAgIH0KICAgICBidWlsZGVy
LmFwcGVuZCgiXHJcbiIpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
SW5zcGVjdG9yU2VydmVyL3F0L1dlYkluc3BlY3RvclNlcnZlclF0LmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvcXQvV2ViSW5zcGVjdG9yU2VydmVyUXQuY3Bw
CmluZGV4IDhkZTBmOTMyZGIyNjAzYWU4OTg4ZGViYjMwMjcxMjYwYzBjNmFjNTYuLmE5M2VhOTE2
MmJjOWNhZjQxMDFmZTMzZDExZTYxMGIwYzJkNWVmODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvcXQvV2ViSW5zcGVjdG9yU2VydmVyUXQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvcXQvV2ViSW5z
cGVjdG9yU2VydmVyUXQuY3BwCkBAIC04MywxNiArODMsMTYgQEAgdm9pZCBXZWJJbnNwZWN0b3JT
ZXJ2ZXI6OmJ1aWxkUGFnZUxpc3QoVmVjdG9yPGNoYXI+JiBkYXRhLCBTdHJpbmcmIGNvbnRlbnRU
eXBlKQogICAgIGJ1aWxkZXIuYXBwZW5kKCJbICIpOwogICAgIENsaWVudE1hcDo6aXRlcmF0b3Ig
ZW5kID0gbV9jbGllbnRNYXAuZW5kKCk7CiAgICAgZm9yIChDbGllbnRNYXA6Oml0ZXJhdG9yIGl0
ID0gbV9jbGllbnRNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFdlYlBh
Z2VQcm94eSogd2ViUGFnZSA9IGl0LT5zZWNvbmQtPnBhZ2UoKTsKKyAgICAgICAgV2ViUGFnZVBy
b3h5KiB3ZWJQYWdlID0gaXQtPnZhbHVlLT5wYWdlKCk7CiAgICAgICAgIGlmIChpdCAhPSBtX2Ns
aWVudE1hcC5iZWdpbigpKQogICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoIiwgIik7Ci0gICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKCJ7IFwiaWRcIjogIiArIFN0cmluZzo6bnVtYmVyKGl0LT5maXJz
dCkpOworICAgICAgICBidWlsZGVyLmFwcGVuZCgieyBcImlkXCI6ICIgKyBTdHJpbmc6Om51bWJl
cihpdC0+a2V5KSk7CiAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIsIFwidGl0bGVcIjogXCIiKTsK
ICAgICAgICAgYnVpbGRlci5hcHBlbmQod2ViUGFnZS0+cGFnZVRpdGxlKCkpOwogICAgICAgICBi
dWlsZGVyLmFwcGVuZCgiXCIsIFwidXJsXCI6IFwiIik7CiAgICAgICAgIGJ1aWxkZXIuYXBwZW5k
KHdlYlBhZ2UtPmFjdGl2ZVVSTCgpKTsKICAgICAgICAgYnVpbGRlci5hcHBlbmQoIlwiLCBcImlu
c3BlY3RvclVybFwiOiBcIiIpOwotICAgICAgICBidWlsZGVyLmFwcGVuZChyZW1vdGVJbnNwZWN0
b3JQYWdlUGF0aCgpICsgU3RyaW5nOjpudW1iZXIoaXQtPmZpcnN0KSk7CisgICAgICAgIGJ1aWxk
ZXIuYXBwZW5kKHJlbW90ZUluc3BlY3RvclBhZ2VQYXRoKCkgKyBTdHJpbmc6Om51bWJlcihpdC0+
a2V5KSk7CiAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCJcIiB9Iik7CiAgICAgfQogICAgIGJ1aWxk
ZXIuYXBwZW5kKCIgXSIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL05v
dGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL05vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uUGVy
bWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuY3BwCmluZGV4IDA3OTIyOTg1ZTQ1NjVmM2M3M2Nh
ZGMzYTBjZjQ1NTIxN2M2MTk5NjkuLjRhMGM0NzUyOTM3Yjg3MmQ1ZGUyNjljOTE2OTRlMjIxOGQz
MjBlMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Ob3RpZmljYXRpb25z
L05vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvTm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb25QZXJtaXNzaW9u
UmVxdWVzdE1hbmFnZXJQcm94eS5jcHAKQEAgLTQzLDcgKzQzLDcgQEAgdm9pZCBOb3RpZmljYXRp
b25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eTo6aW52YWxpZGF0ZVJlcXVlc3RzKCkKICAg
ICBQZW5kaW5nUmVxdWVzdE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BlbmRpbmdSZXF1ZXN0
cy5iZWdpbigpOwogICAgIFBlbmRpbmdSZXF1ZXN0TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBt
X3BlbmRpbmdSZXF1ZXN0cy5lbmQoKTsKICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KQotICAg
ICAgICBpdC0+c2Vjb25kLT5pbnZhbGlkYXRlKCk7CisgICAgICAgIGl0LT52YWx1ZS0+aW52YWxp
ZGF0ZSgpOwogICAgIAogICAgIG1fcGVuZGluZ1JlcXVlc3RzLmNsZWFyKCk7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzUHJveHku
Y3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc1Byb3h5
LmNwcAppbmRleCAxMmFiZjZkYzJlNGYyYTBjYTE2MmI0ZjE5YjMyZWEwNTZmYWU4MjJmLi40OWRk
YWM4ZTUxMWY2OGI5OWJlYjg0MDk2YjM0NDdjYjM3NWU5ZjVmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzUHJveHkuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NQcm94eS5jcHAKQEAg
LTE0OSwxMCArMTQ5LDEwIEBAIHZvaWQgUGx1Z2luUHJvY2Vzc1Byb3h5OjpwbHVnaW5Qcm9jZXNz
Q3Jhc2hlZE9yRmFpbGVkVG9MYXVuY2goKQogICAgIH0KIAogICAgIHdoaWxlICghbV9wZW5kaW5n
R2V0U2l0ZXNSZXBsaWVzLmlzRW1wdHkoKSkKLSAgICAgICAgZGlkR2V0U2l0ZXNXaXRoRGF0YShW
ZWN0b3I8U3RyaW5nPigpLCBtX3BlbmRpbmdHZXRTaXRlc1JlcGxpZXMuYmVnaW4oKS0+Zmlyc3Qp
OworICAgICAgICBkaWRHZXRTaXRlc1dpdGhEYXRhKFZlY3RvcjxTdHJpbmc+KCksIG1fcGVuZGlu
Z0dldFNpdGVzUmVwbGllcy5iZWdpbigpLT5rZXkpOwogCiAgICAgd2hpbGUgKCFtX3BlbmRpbmdD
bGVhclNpdGVEYXRhUmVwbGllcy5pc0VtcHR5KCkpCi0gICAgICAgIGRpZENsZWFyU2l0ZURhdGEo
bV9wZW5kaW5nQ2xlYXJTaXRlRGF0YVJlcGxpZXMuYmVnaW4oKS0+Zmlyc3QpOworICAgICAgICBk
aWRDbGVhclNpdGVEYXRhKG1fcGVuZGluZ0NsZWFyU2l0ZURhdGFSZXBsaWVzLmJlZ2luKCktPmtl
eSk7CiAKICAgICAvLyBUZWxsIHRoZSBwbHVnLWluIHByb2Nlc3MgbWFuYWdlciB0byBmb3JnZXQg
YWJvdXQgdGhpcyBwbHVnLWluIHByb2Nlc3MgcHJveHkuIFRoaXMgbWF5IGNhdXNlIHVzIHRvIGJl
IGRlbGV0ZWQuCiAgICAgbV9wbHVnaW5Qcm9jZXNzTWFuYWdlci0+cmVtb3ZlUGx1Z2luUHJvY2Vz
c1Byb3h5KHRoaXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNv
bnRleHQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHQuY3BwCmluZGV4
IDFiNTNiMDQ4NjJmNGQ4NDUyNzJhOTNmMzg5YmJjMmFlMDMwZWE2ZGEuLjk0NTExOTEzM2ZjZTJh
OGFlOTkzMjg4ZTk2MTg2OTBmYjU4OTYxZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
Q29udGV4dC5jcHAKQEAgLTkwNiw3ICs5MDYsNyBAQCBzdGF0aWMgUGFzc1JlZlB0cjxNdXRhYmxl
RGljdGlvbmFyeT4gY3JlYXRlRGljdGlvbmFyeUZyb21IYXNoTWFwKGNvbnN0IEhhc2hNYXA8Uwog
ICAgIFJlZlB0cjxNdXRhYmxlRGljdGlvbmFyeT4gcmVzdWx0ID0gTXV0YWJsZURpY3Rpb25hcnk6
OmNyZWF0ZSgpOwogICAgIEhhc2hNYXA8U3RyaW5nLCB1aW50NjRfdD46OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IG1hcC5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCB1aW50NjRfdD46OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAg
cmVzdWx0LT5zZXQoaXQtPmZpcnN0LCBSZWZQdHI8V2ViVUludDY0PihXZWJVSW50NjQ6OmNyZWF0
ZShpdC0+c2Vjb25kKSkuZ2V0KCkpOworICAgICAgICByZXN1bHQtPnNldChpdC0+a2V5LCBSZWZQ
dHI8V2ViVUludDY0PihXZWJVSW50NjQ6OmNyZWF0ZShpdC0+dmFsdWUpKS5nZXQoKSk7CiAgICAg
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJJY29uRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYklj
b25EYXRhYmFzZS5jcHAKaW5kZXggYzBjNzA2MTdiZTI3YWQ0ZDIwYzQyMGYxZGU0MzY5MTgzZDUy
OTMyMy4uZDJhMTA2ZmUwNmVjYzI5MWU0ZmQ4NWU1ZTljMTBkMzJiZTkyMDMwNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkljb25EYXRhYmFzZS5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkljb25EYXRhYmFzZS5jcHAKQEAgLTI2MywxNCArMjYz
LDE0IEBAIHZvaWQgV2ViSWNvbkRhdGFiYXNlOjpkaWRGaW5pc2hVUkxJbXBvcnQoKQogICAgIEhh
c2hNYXA8dWludDY0X3QsIFN0cmluZz46Oml0ZXJhdG9yIGVuZCA9IG1fcGVuZGluZ0xvYWREZWNp
c2lvblVSTE1hcC5lbmQoKTsKICAgICAKICAgICBmb3IgKDsgaSAhPSBlbmQ7ICsraSkgewotICAg
ICAgICBMT0coSWNvbkRhdGFiYXNlLCAiV0syIFVJUHJvY2VzcyBwZXJmb3JtaW5nIGRlbGF5ZWQg
Y2FsbGJhY2sgb24gY2FsbGJhY2sgSUQgJWkgZm9yIHBhZ2UgdXJsICVzIiwgKGludClpLT5maXJz
dCwgaS0+c2Vjb25kLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgSWNvbkxvYWREZWNpc2lvbiBk
ZWNpc2lvbiA9IG1faWNvbkRhdGFiYXNlSW1wbC0+c3luY2hyb25vdXNMb2FkRGVjaXNpb25Gb3JJ
Y29uVVJMKGktPnNlY29uZCwgMCk7CisgICAgICAgIExPRyhJY29uRGF0YWJhc2UsICJXSzIgVUlQ
cm9jZXNzIHBlcmZvcm1pbmcgZGVsYXllZCBjYWxsYmFjayBvbiBjYWxsYmFjayBJRCAlaSBmb3Ig
cGFnZSB1cmwgJXMiLCAoaW50KWktPmtleSwgaS0+dmFsdWUuYXNjaWkoKS5kYXRhKCkpOworICAg
ICAgICBJY29uTG9hZERlY2lzaW9uIGRlY2lzaW9uID0gbV9pY29uRGF0YWJhc2VJbXBsLT5zeW5j
aHJvbm91c0xvYWREZWNpc2lvbkZvckljb25VUkwoaS0+dmFsdWUsIDApOwogCiAgICAgICAgIC8v
IERlY2lzaW9ucyBzaG91bGQgbmV2ZXIgYmUgdW5rbm93biBhZnRlciB0aGUgaW5pdGFsIGltcG9y
dCBpcyBjb21wbGV0ZQogICAgICAgICBBU1NFUlQoZGVjaXNpb24gIT0gSWNvbkxvYWRVbmtub3du
KTsKIAogICAgICAgICAvLyBGSVhNRSAoTXVsdGktV2ViUHJvY2Vzcyk6IFdlIG5lZWQgdG8ga25v
dyB3aGljaCBjb25uZWN0aW9uIHRvIHNlbmQgdGhpcyBtZXNzYWdlIHRvLgotICAgICAgICBtX3dl
YkNvbnRleHQtPnNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViSWNvbkRhdGFiYXNlUHJv
eHk6OlJlY2VpdmVkSWNvbkxvYWREZWNpc2lvbihzdGF0aWNfY2FzdDxpbnQ+KGRlY2lzaW9uKSwg
aS0+Zmlyc3QpKTsKKyAgICAgICAgbV93ZWJDb250ZXh0LT5zZW5kVG9BbGxQcm9jZXNzZXMoTWVz
c2FnZXM6OldlYkljb25EYXRhYmFzZVByb3h5OjpSZWNlaXZlZEljb25Mb2FkRGVjaXNpb24oc3Rh
dGljX2Nhc3Q8aW50PihkZWNpc2lvbiksIGktPmtleSkpOwogICAgIH0KICAgICAKICAgICBtX3Bl
bmRpbmdMb2FkRGVjaXNpb25VUkxNYXAuY2xlYXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAKaW5kZXggMjJhMmI3ZjJjN2EyNDFjZWRlOTZiOTc0YmUz
NGFiNDQ2MGI3MTdkZC4uYTIwZTQ2N2ZlNzY3ZDY0NDQ4OTJlYzYxNTIyM2M4ZjYyOGZiYjJhOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAKQEAgLTI2
Niw5ICsyNjYsOSBAQCBib29sIFdlYlByb2Nlc3NQcm94eTo6Y2hlY2tVUkxSZWNlaXZlZEZyb21X
ZWJQcm9jZXNzKGNvbnN0IEtVUkwmIHVybCkKICAgICAvLyBJdGVtcyBpbiBiYWNrL2ZvcndhcmQg
bGlzdCBoYXZlIGJlZW4gYWxyZWFkeSBjaGVja2VkLgogICAgIC8vIE9uZSBjYXNlIHdoZXJlIHdl
IGRvbid0IGhhdmUgc2FuZGJveCBleHRlbnNpb25zIGZvciBmaWxlIFVSTHMgaW4gYi9mIGxpc3Qg
aXMgaWYgdGhlIGxpc3QgaGFzIGJlZW4gcmVpbnN0YXRlZCBhZnRlciBhIGNyYXNoIG9yIGEgYnJv
d3NlciByZXN0YXJ0LgogICAgIGZvciAoV2ViQmFja0ZvcndhcmRMaXN0SXRlbU1hcDo6aXRlcmF0
b3IgaXRlciA9IG1fYmFja0ZvcndhcmRMaXN0SXRlbU1hcC5iZWdpbigpLCBlbmQgPSBtX2JhY2tG
b3J3YXJkTGlzdEl0ZW1NYXAuZW5kKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKLSAgICAgICAg
aWYgKEtVUkwoS1VSTCgpLCBpdGVyLT5zZWNvbmQtPnVybCgpKS5maWxlU3lzdGVtUGF0aCgpID09
IHBhdGgpCisgICAgICAgIGlmIChLVVJMKEtVUkwoKSwgaXRlci0+dmFsdWUtPnVybCgpKS5maWxl
U3lzdGVtUGF0aCgpID09IHBhdGgpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
aWYgKEtVUkwoS1VSTCgpLCBpdGVyLT5zZWNvbmQtPm9yaWdpbmFsVVJMKCkpLmZpbGVTeXN0ZW1Q
YXRoKCkgPT0gcGF0aCkKKyAgICAgICAgaWYgKEtVUkwoS1VSTCgpLCBpdGVyLT52YWx1ZS0+b3Jp
Z2luYWxVUkwoKSkuZmlsZVN5c3RlbVBhdGgoKSA9PSBwYXRoKQogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogCkBAIC0yOTEsMTUgKzI5MSwxNSBAQCB2b2lkIFdlYlByb2Nlc3NQcm94
eTo6YWRkQmFja0ZvcndhcmRJdGVtKHVpbnQ2NF90IGl0ZW1JRCwgY29uc3QgU3RyaW5nJiBvcmln
aW5hbAogCiAgICAgV2ViQmFja0ZvcndhcmRMaXN0SXRlbU1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9
IG1fYmFja0ZvcndhcmRMaXN0SXRlbU1hcC5hZGQoaXRlbUlELCAwKTsKICAgICBpZiAocmVzdWx0
LmlzTmV3RW50cnkpIHsKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBXZWJCYWNr
Rm9yd2FyZExpc3RJdGVtOjpjcmVhdGUob3JpZ2luYWxVUkwsIHVybCwgdGl0bGUsIGJhY2tGb3J3
YXJkRGF0YS5kYXRhKCksIGJhY2tGb3J3YXJkRGF0YS5zaXplKCksIGl0ZW1JRCk7CisgICAgICAg
IHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBXZWJCYWNrRm9yd2FyZExpc3RJdGVtOjpjcmVhdGUo
b3JpZ2luYWxVUkwsIHVybCwgdGl0bGUsIGJhY2tGb3J3YXJkRGF0YS5kYXRhKCksIGJhY2tGb3J3
YXJkRGF0YS5zaXplKCksIGl0ZW1JRCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICAv
LyBVcGRhdGUgZXhpc3RpbmcgaXRlbS4KLSAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZC0+c2V0
T3JpZ2luYWxVUkwob3JpZ2luYWxVUkwpOwotICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLT5z
ZXRVUkwodXJsKTsKLSAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZC0+c2V0VGl0bGUodGl0bGUp
OwotICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLT5zZXRCYWNrRm9yd2FyZERhdGEoYmFja0Zv
cndhcmREYXRhLmRhdGEoKSwgYmFja0ZvcndhcmREYXRhLnNpemUoKSk7CisgICAgcmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZS0+c2V0T3JpZ2luYWxVUkwob3JpZ2luYWxVUkwpOworICAgIHJlc3VsdC5p
dGVyYXRvci0+dmFsdWUtPnNldFVSTCh1cmwpOworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUt
PnNldFRpdGxlKHRpdGxlKTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5zZXRCYWNrRm9y
d2FyZERhdGEoYmFja0ZvcndhcmREYXRhLmRhdGEoKSwgYmFja0ZvcndhcmREYXRhLnNpemUoKSk7
CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpzZW5kRGlkR2V0UGx1Z2lucyh1aW50NjRfdCBy
ZXF1ZXN0SUQsIFBhc3NPd25QdHI8VmVjdG9yPFBsdWdpbkluZm8+ID4gcGx1Z2luSW5mb3MpCkBA
IC01NzgsNyArNTc4LDcgQEAgc2l6ZV90IFdlYlByb2Nlc3NQcm94eTo6ZnJhbWVDb3VudEluUGFn
ZShXZWJQYWdlUHJveHkqIHBhZ2UpIGNvbnN0CiB7CiAgICAgc2l6ZV90IHJlc3VsdCA9IDA7CiAg
ICAgZm9yIChIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8V2ViRnJhbWVQcm94eT4gPjo6Y29uc3Rf
aXRlcmF0b3IgaXRlciA9IG1fZnJhbWVNYXAuYmVnaW4oKTsgaXRlciAhPSBtX2ZyYW1lTWFwLmVu
ZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgaWYgKGl0ZXItPnNlY29uZC0+cGFnZSgpID09IHBhZ2Up
CisgICAgICAgIGlmIChpdGVyLT52YWx1ZS0+cGFnZSgpID09IHBhZ2UpCiAgICAgICAgICAgICAr
K3Jlc3VsdDsKICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvR2VvbG9jYXRpb24vR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVz
dE1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9HZW9sb2NhdGlvbi9HZW9s
b2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5jcHAKaW5kZXggZDZiZGI4ZTE1MzE0NTBi
MTJhYmM4MmQ4NmIyZmMwMTNmMTM1NDNiNy4uZmNhNzFhMWQwOTVmZWVmYWJhMDVhNmE3MjVmZGI0
MzYzNTgxNGI2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9HZW9sb2Nh
dGlvbi9HZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9HZW9sb2NhdGlvbi9HZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1
ZXN0TWFuYWdlci5jcHAKQEAgLTc0LDcgKzc0LDcgQEAgdm9pZCBHZW9sb2NhdGlvblBlcm1pc3Np
b25SZXF1ZXN0TWFuYWdlcjo6Y2FuY2VsUmVxdWVzdEZvckdlb2xvY2F0aW9uKEdlb2xvY2F0aW8K
ICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9nZW9sb2NhdGlvblRvSURNYXAucmVtb3ZlKGl0KTsK
LSAgICBtX2lkVG9HZW9sb2NhdGlvbk1hcC5yZW1vdmUoaXQtPnNlY29uZCk7CisgICAgbV9pZFRv
R2VvbG9jYXRpb25NYXAucmVtb3ZlKGl0LT52YWx1ZSk7CiB9CiAKIHZvaWQgR2VvbG9jYXRpb25Q
ZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXI6OmRpZFJlY2VpdmVHZW9sb2NhdGlvblBlcm1pc3Npb25E
ZWNpc2lvbih1aW50NjRfdCBnZW9sb2NhdGlvbklELCBib29sIGFsbG93ZWQpCkBAIC04Myw3ICs4
Myw3IEBAIHZvaWQgR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXI6OmRpZFJlY2Vp
dmVHZW9sb2NhdGlvblBlcm1pc3Npb25EZWNpc2lvCiAgICAgaWYgKGl0ID09IG1faWRUb0dlb2xv
Y2F0aW9uTWFwLmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBHZW9sb2NhdGlvbiogZ2Vv
bG9jYXRpb24gPSBpdC0+c2Vjb25kOworICAgIEdlb2xvY2F0aW9uKiBnZW9sb2NhdGlvbiA9IGl0
LT52YWx1ZTsKICAgICBnZW9sb2NhdGlvbi0+c2V0SXNBbGxvd2VkKGFsbG93ZWQpOwogCiAgICAg
bV9pZFRvR2VvbG9jYXRpb25NYXAucmVtb3ZlKGl0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxlTm9kZUhhbmRs
ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9Jbmpl
Y3RlZEJ1bmRsZU5vZGVIYW5kbGUuY3BwCmluZGV4IDBjNDI5NWU2MTJjZGQ3NmYwM2E1MzEzZDQ1
ZTZjZWMxZmIxZTg1OTYuLjc3ZTAzMDkzZDVmZDBkOTY0MjRkMzE1NGY3N2M5NGQ0MTk0YjE2ZWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9N
L0luamVjdGVkQnVuZGxlTm9kZUhhbmRsZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlLmNwcApAQCAt
NjksMTAgKzY5LDEwIEBAIFBhc3NSZWZQdHI8SW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlPiBJbmpl
Y3RlZEJ1bmRsZU5vZGVIYW5kbGU6OmdldE9yQ3JlYXRlKE5vZGUqCiAKICAgICBET01IYW5kbGVD
YWNoZTo6QWRkUmVzdWx0IHJlc3VsdCA9IGRvbUhhbmRsZUNhY2hlKCkuYWRkKG5vZGUsIDApOwog
ICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJldHVybiBQYXNzUmVmUHRyPElu
amVjdGVkQnVuZGxlTm9kZUhhbmRsZT4ocmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOworICAgICAg
ICByZXR1cm4gUGFzc1JlZlB0cjxJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU+KHJlc3VsdC5pdGVy
YXRvci0+dmFsdWUpOwogCiAgICAgUmVmUHRyPEluamVjdGVkQnVuZGxlTm9kZUhhbmRsZT4gbm9k
ZUhhbmRsZSA9IEluamVjdGVkQnVuZGxlTm9kZUhhbmRsZTo6Y3JlYXRlKG5vZGUpOwotICAgIHJl
c3VsdC5pdGVyYXRvci0+c2Vjb25kID0gbm9kZUhhbmRsZS5nZXQoKTsKKyAgICByZXN1bHQuaXRl
cmF0b3ItPnZhbHVlID0gbm9kZUhhbmRsZS5nZXQoKTsKICAgICByZXR1cm4gbm9kZUhhbmRsZS5y
ZWxlYXNlKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGUuY3BwIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVSYW5nZUhh
bmRsZS5jcHAKaW5kZXggMWI3NGYwMTI0MDA4ZGIzYzA3ODI4ZWE2ZjZkMmMwNWFjMDU5YzMwNi4u
ZDYwMDBhYjkxMzMyOWNkNTdkYWIzZTNmZDY0MDE0Yzc2ZTk1MmRjMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVS
YW5nZUhhbmRsZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5jcHAKQEAgLTQ4LDEwICs0OCwxMCBA
QCBQYXNzUmVmUHRyPEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU+IEluamVjdGVkQnVuZGxlUmFu
Z2VIYW5kbGU6OmdldE9yQ3JlYXRlKFJhbgogCiAgICAgRE9NSGFuZGxlQ2FjaGU6OkFkZFJlc3Vs
dCByZXN1bHQgPSBkb21IYW5kbGVDYWNoZSgpLmFkZChyYW5nZSwgMCk7CiAgICAgaWYgKCFyZXN1
bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgcmV0dXJuIFBhc3NSZWZQdHI8SW5qZWN0ZWRCdW5kbGVS
YW5nZUhhbmRsZT4ocmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOworICAgICAgICByZXR1cm4gUGFz
c1JlZlB0cjxJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlPihyZXN1bHQuaXRlcmF0b3ItPnZhbHVl
KTsKIAogICAgIFJlZlB0cjxJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlPiByYW5nZUhhbmRsZSA9
IEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OmNyZWF0ZShyYW5nZSk7Ci0gICAgcmVzdWx0Lml0
ZXJhdG9yLT5zZWNvbmQgPSByYW5nZUhhbmRsZS5nZXQoKTsKKyAgICByZXN1bHQuaXRlcmF0b3It
PnZhbHVlID0gcmFuZ2VIYW5kbGUuZ2V0KCk7CiAgICAgcmV0dXJuIHJhbmdlSGFuZGxlLnJlbGVh
c2UoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Ob3RpZmlj
YXRpb25zL1dlYk5vdGlmaWNhdGlvbk1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9Ob3RpZmljYXRpb25zL1dlYk5vdGlmaWNhdGlvbk1hbmFnZXIuY3BwCmluZGV4IDJkNjY3
ZWY1ZTE3MmIxZDhjY2Q4NjNlNDE3MWM2ZjRiNDM0ZDE4OTcuLjI1MWM0MTI0NTRjNTUzN2VhZDJl
YjQ4NTVlMzZjMWUzODdiYTRjMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvTm90aWZpY2F0aW9ucy9XZWJOb3RpZmljYXRpb25NYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL05vdGlmaWNhdGlvbnMvV2ViTm90aWZpY2F0aW9uTWFuYWdlci5j
cHAKQEAgLTk5LDcgKzk5LDcgQEAgTm90aWZpY2F0aW9uQ2xpZW50OjpQZXJtaXNzaW9uIFdlYk5v
dGlmaWNhdGlvbk1hbmFnZXI6OnBvbGljeUZvck9yaWdpbihXZWJDb3JlOjoKICAgICBBU1NFUlQo
IW9yaWdpbi0+aXNVbmlxdWUoKSk7CiAgICAgSGFzaE1hcDxTdHJpbmcsIGJvb2w+Ojpjb25zdF9p
dGVyYXRvciBpdCA9IG1fcGVybWlzc2lvbnNNYXAuZmluZChvcmlnaW4tPnRvUmF3U3RyaW5nKCkp
OwogICAgIGlmIChpdCAhPSBtX3Blcm1pc3Npb25zTWFwLmVuZCgpKQotICAgICAgICByZXR1cm4g
aXQtPnNlY29uZCA/IE5vdGlmaWNhdGlvbkNsaWVudDo6UGVybWlzc2lvbkFsbG93ZWQgOiBOb3Rp
ZmljYXRpb25DbGllbnQ6OlBlcm1pc3Npb25EZW5pZWQ7CisgICAgICAgIHJldHVybiBpdC0+dmFs
dWUgPyBOb3RpZmljYXRpb25DbGllbnQ6OlBlcm1pc3Npb25BbGxvd2VkIDogTm90aWZpY2F0aW9u
Q2xpZW50OjpQZXJtaXNzaW9uRGVuaWVkOwogI2VuZGlmCiAgICAgCiAgICAgcmV0dXJuIE5vdGlm
aWNhdGlvbkNsaWVudDo6UGVybWlzc2lvbk5vdEFsbG93ZWQ7CkBAIC0xMTYsNyArMTE2LDcgQEAg
Ym9vbCBXZWJOb3RpZmljYXRpb25NYW5hZ2VyOjpzaG93KE5vdGlmaWNhdGlvbiogbm90aWZpY2F0
aW9uLCBXZWJQYWdlKiBwYWdlKQogICAgIG1fbm90aWZpY2F0aW9uSURNYXAuc2V0KG5vdGlmaWNh
dGlvbklELCBub3RpZmljYXRpb24pOwogICAgIAogICAgIE5vdGlmaWNhdGlvbkNvbnRleHRNYXA6
Oml0ZXJhdG9yIGl0ID0gbV9ub3RpZmljYXRpb25Db250ZXh0TWFwLmFkZChub3RpZmljYXRpb24t
PnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgVmVjdG9yPHVpbnQ2NF90PigpKS5pdGVyYXRvcjsK
LSAgICBpdC0+c2Vjb25kLmFwcGVuZChub3RpZmljYXRpb25JRCk7CisgICAgaXQtPnZhbHVlLmFw
cGVuZChub3RpZmljYXRpb25JRCk7CiAKICNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykKICAgICBt
X3Byb2Nlc3MtPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTaG93
Tm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbi0+dGl0bGUoKSwgbm90aWZpY2F0aW9uLT5ib2R5KCks
IG5vdGlmaWNhdGlvbi0+aWNvblVSTCgpLnN0cmluZygpLCBub3RpZmljYXRpb24tPnRhZygpLCBu
b3RpZmljYXRpb24tPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+
dG9TdHJpbmcoKSwgbm90aWZpY2F0aW9uSUQpLCBwYWdlLT5wYWdlSUQoKSk7CkBAIC0xNTAsNyAr
MTUwLDcgQEAgdm9pZCBXZWJOb3RpZmljYXRpb25NYW5hZ2VyOjpjbGVhck5vdGlmaWNhdGlvbnMo
V2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCoKICAgICBpZiAoaXQgPT0gbV9ub3RpZmlj
YXRpb25Db250ZXh0TWFwLmVuZCgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgVmVjdG9y
PHVpbnQ2NF90PiYgbm90aWZpY2F0aW9uSURzID0gaXQtPnNlY29uZDsKKyAgICBWZWN0b3I8dWlu
dDY0X3Q+JiBub3RpZmljYXRpb25JRHMgPSBpdC0+dmFsdWU7CiAgICAgbV9wcm9jZXNzLT5jb25u
ZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYk5vdGlmaWNhdGlvbk1hbmFnZXJQcm94eTo6Q2xl
YXJOb3RpZmljYXRpb25zKG5vdGlmaWNhdGlvbklEcyksIHBhZ2UtPnBhZ2VJRCgpKTsKICAgICBz
aXplX3QgY291bnQgPSBub3RpZmljYXRpb25JRHMuc2l6ZSgpOwogICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgY291bnQ7ICsraSkgewpAQCAtMjMzLDEwICsyMzMsMTAgQEAgdm9pZCBXZWJOb3Rp
ZmljYXRpb25NYW5hZ2VyOjpyZW1vdmVOb3RpZmljYXRpb25Gcm9tQ29udGV4dE1hcCh1aW50NjRf
dCBub3RpZmljYXQKICAgICAvLyBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIGZvciBtYW5hZ2lu
ZyB0aGUgaGFzaCBtYXBzLgogICAgIE5vdGlmaWNhdGlvbkNvbnRleHRNYXA6Oml0ZXJhdG9yIGl0
ID0gbV9ub3RpZmljYXRpb25Db250ZXh0TWFwLmZpbmQobm90aWZpY2F0aW9uLT5zY3JpcHRFeGVj
dXRpb25Db250ZXh0KCkpOwogICAgIEFTU0VSVChpdCAhPSBtX25vdGlmaWNhdGlvbkNvbnRleHRN
YXAuZW5kKCkpOwotICAgIHNpemVfdCBpbmRleCA9IGl0LT5zZWNvbmQuZmluZChub3RpZmljYXRp
b25JRCk7CisgICAgc2l6ZV90IGluZGV4ID0gaXQtPnZhbHVlLmZpbmQobm90aWZpY2F0aW9uSUQp
OwogICAgIEFTU0VSVChpbmRleCAhPSBub3RGb3VuZCk7Ci0gICAgaXQtPnNlY29uZC5yZW1vdmUo
aW5kZXgpOwotICAgIGlmIChpdC0+c2Vjb25kLmlzRW1wdHkoKSkKKyAgICBpdC0+dmFsdWUucmVt
b3ZlKGluZGV4KTsKKyAgICBpZiAoaXQtPnZhbHVlLmlzRW1wdHkoKSkKICAgICAgICAgbV9ub3Rp
ZmljYXRpb25Db250ZXh0TWFwLnJlbW92ZShpdCk7CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RN
YXAuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QUnVu
dGltZU9iamVjdE1hcC5jcHAKaW5kZXggMzU4NTMzZmViZmM4NjI3YjljM2FjYWY2NjA2ODE0ZWI4
ZGQyNzFhYS4uMGNlNzAzYzBhZDg4MDNjYTI4ZGQ1NDMxOGU3MTg5NDM2MzZkNjk2MiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QUnVudGlt
ZU9iamVjdE1hcC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05l
dHNjYXBlL05QUnVudGltZU9iamVjdE1hcC5jcHAKQEAgLTIxMiw3ICsyMTIsNyBAQCB2b2lkIE5Q
UnVudGltZU9iamVjdE1hcDo6aW52YWxpZGF0ZSgpCiAgICAgVmVjdG9yPE5QT2JqZWN0Kj4gb2Jq
ZWN0czsKIAogICAgIGZvciAoSGFzaE1hcDxOUE9iamVjdCosIEpTQzo6V2VhazxKU05QT2JqZWN0
PiA+OjppdGVyYXRvciBwdHIgPSBtX2pzTlBPYmplY3RzLmJlZ2luKCksIGVuZCA9IG1fanNOUE9i
amVjdHMuZW5kKCk7IHB0ciAhPSBlbmQ7ICsrcHRyKSB7Ci0gICAgICAgIEpTTlBPYmplY3QqIGpz
TlBPYmplY3QgPSBwdHItPnNlY29uZC5nZXQoKTsKKyAgICAgICAgSlNOUE9iamVjdCoganNOUE9i
amVjdCA9IHB0ci0+dmFsdWUuZ2V0KCk7CiAgICAgICAgIGlmICghanNOUE9iamVjdCkgLy8gU2tp
cCB6b21iaWVzLgogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIG9iamVjdHMuYXBwZW5k
KGpzTlBPYmplY3QtPmxlYWtOUE9iamVjdCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbi5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW4uY3BwCmlu
ZGV4IGIyMDc0MzIxM2JjNWVhNDEzYzJmMDk2M2QzOWM2YTIyMzM0ZmQxNGMuLmYxZTc5ZTQ1ZDgx
NmQyNzBjYjQ1YzEwMzA4MzVmNDZmOTMyM2EwNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbi5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luLmNw
cApAQCAtMTk5LDggKzE5OSw4IEBAIE5QRXJyb3IgTmV0c2NhcGVQbHVnaW46OmRlc3Ryb3lTdHJl
YW0oTlBTdHJlYW0qIHN0cmVhbSwgTlBSZWFzb24gcmVhc29uKQogICAgIE5ldHNjYXBlUGx1Z2lu
U3RyZWFtKiBwbHVnaW5TdHJlYW0gPSAwOwogCiAgICAgZm9yIChTdHJlYW1zTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IG1fc3RyZWFtcy5iZWdpbigpLCBlbmQgPSBtX3N0cmVhbXMuZW5kKCk7IGl0
ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnNlY29uZC0+bnBTdHJlYW0oKSA9PSBz
dHJlYW0pIHsKLSAgICAgICAgICAgIHBsdWdpblN0cmVhbSA9IGl0LT5zZWNvbmQuZ2V0KCk7Cisg
ICAgICAgIGlmIChpdC0+dmFsdWUtPm5wU3RyZWFtKCkgPT0gc3RyZWFtKSB7CisgICAgICAgICAg
ICBwbHVnaW5TdHJlYW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgIH0KQEAgLTM4Nyw3ICszODcsNyBAQCB2b2lkIE5ldHNjYXBlUGx1Z2luOjp1
bnNjaGVkdWxlVGltZXIodW5zaWduZWQgdGltZXJJRCkKICAgICBpZiAoaXQgPT0gbV90aW1lcnMu
ZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIE93blB0cjxUaW1lcj4gdGltZXIgPSBhZG9w
dFB0cihpdC0+c2Vjb25kKTsKKyAgICBPd25QdHI8VGltZXI+IHRpbWVyID0gYWRvcHRQdHIoaXQt
PnZhbHVlKTsKICAgICBtX3RpbWVycy5yZW1vdmUoaXQpOwogCiAgICAgdGltZXItPnN0b3AoKTsK
QEAgLTc2Miw4ICs3NjIsOCBAQCB2b2lkIE5ldHNjYXBlUGx1Z2luOjpmcmFtZURpZEZpbmlzaExv
YWRpbmcodWludDY0X3QgcmVxdWVzdElEKQogICAgIGlmIChpdCA9PSBtX3BlbmRpbmdVUkxOb3Rp
ZmljYXRpb25zLmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBTdHJpbmcgdXJsID0gaXQt
PnNlY29uZC5maXJzdDsKLSAgICB2b2lkKiBub3RpZmljYXRpb25EYXRhID0gaXQtPnNlY29uZC5z
ZWNvbmQ7CisgICAgU3RyaW5nIHVybCA9IGl0LT52YWx1ZS5maXJzdDsKKyAgICB2b2lkKiBub3Rp
ZmljYXRpb25EYXRhID0gaXQtPnZhbHVlLnNlY29uZDsKIAogICAgIG1fcGVuZGluZ1VSTE5vdGlm
aWNhdGlvbnMucmVtb3ZlKGl0KTsKICAgICAKQEAgLTc3OCw4ICs3NzgsOCBAQCB2b2lkIE5ldHNj
YXBlUGx1Z2luOjpmcmFtZURpZEZhaWwodWludDY0X3QgcmVxdWVzdElELCBib29sIHdhc0NhbmNl
bGxlZCkKICAgICBpZiAoaXQgPT0gbV9wZW5kaW5nVVJMTm90aWZpY2F0aW9ucy5lbmQoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgU3RyaW5nIHVybCA9IGl0LT5zZWNvbmQuZmlyc3Q7Ci0gICAg
dm9pZCogbm90aWZpY2F0aW9uRGF0YSA9IGl0LT5zZWNvbmQuc2Vjb25kOworICAgIFN0cmluZyB1
cmwgPSBpdC0+dmFsdWUuZmlyc3Q7CisgICAgdm9pZCogbm90aWZpY2F0aW9uRGF0YSA9IGl0LT52
YWx1ZS5zZWNvbmQ7CiAKICAgICBtX3BlbmRpbmdVUkxOb3RpZmljYXRpb25zLnJlbW92ZShpdCk7
CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1
Z2luVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmll
dy5jcHAKaW5kZXggZDA3ZjhiNzlkNmE4MDJhZjc5NDA3YmE5NTY2MDE1NjkyYmU1ZjVmNS4uNjRh
ZTFhNGU0YjI4ZDM4YWJjNjc3OWZiY2JmMDZlYWViMTM2ZDlkOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcApAQCAtMTcwLDkgKzE3MCw5
IEBAIHN0YXRpYyBTdHJpbmcgYnVpbGRIVFRQSGVhZGVycyhjb25zdCBSZXNvdXJjZVJlc3BvbnNl
JiByZXNwb25zZSwgbG9uZyBsb25nJiBleHBlCiAgICAgCiAgICAgSFRUUEhlYWRlck1hcDo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkcygpLmVuZCgpOwogICAg
IGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSByZXNwb25zZS5odHRwSGVh
ZGVyRmllbGRzKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKGl0LT5maXJzdC5jaGFyYWN0ZXJzKCksIGl0LT5maXJzdC5sZW5ndGgoKSk7
CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5rZXkuY2hhcmFjdGVycygpLCBpdC0+
a2V5Lmxlbmd0aCgpKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoc2VwYXJhdG9yLmNo
YXJhY3RlcnMoKSwgc2VwYXJhdG9yLmxlbmd0aCgpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQoaXQtPnNlY29uZC5jaGFyYWN0ZXJzKCksIGl0LT5zZWNvbmQubGVuZ3RoKCkpOworICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+dmFsdWUuY2hhcmFjdGVycygpLCBpdC0+dmFs
dWUubGVuZ3RoKCkpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKICAgICB9
CiAgICAgCkBAIC0yODQsNyArMjg0LDcgQEAgUGx1Z2luVmlldzo6flBsdWdpblZpZXcoKQogCiAg
ICAgLy8gQ2FuY2VsIGFsbCBwZW5kaW5nIGZyYW1lIGxvYWRzLgogICAgIGZvciAoRnJhbWVMb2Fk
TWFwOjppdGVyYXRvciBpdCA9IG1fcGVuZGluZ0ZyYW1lTG9hZHMuYmVnaW4oKSwgZW5kID0gbV9w
ZW5kaW5nRnJhbWVMb2Fkcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+Zmly
c3QtPnNldExvYWRMaXN0ZW5lcigwKTsKKyAgICAgICAgaXQtPmtleS0+c2V0TG9hZExpc3RlbmVy
KDApOwogCiAgICAgaWYgKG1fcGx1Z2luKSB7CiAgICAgICAgIG1faXNCZWluZ0Rlc3Ryb3llZCA9
IHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29v
cmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyLmNwcAppbmRleCAxNDFkMmU2MDNmODQ4MDk1YzIzYTZlN2IzN2EzMWM4ODY5
NzFkMDA1Li44ZjI0MTMwZGNlNDNlYWQ5ZTA4N2JkYTk0MTQxNDE2NzMzOTBmNjZiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXll
ci5jcHAKQEAgLTUzLDcgKzUzLDcgQEAgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKiBDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXI6OmxheWVyQnlJRChXZWJLaXQ6OldlYkxheWVySUQKICAgICBIYXNo
TWFwPFdlYkxheWVySUQsIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcio+OjppdGVyYXRvciBpdCA9
IHRhYmxlLmZpbmQoaWQpOwogICAgIGlmIChpdCA9PSB0YWJsZS5lbmQoKSkKICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgcmV0dXJuIGl0LT52YWx1ZTsKIH0K
IAogc3RhdGljIFdlYkxheWVySUQgdG9XZWJMYXllcklEKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3Bw
CmluZGV4IGEzYTU3MjkwNzNiZGU5ZmY3MzM1ZTdjMmE3YTg0Y2VhM2VkNTgzYzUuLjU3NGMwNzlk
Y2Y0YjRlZTc0NGM2NGFlYTcwOWQwNTIwM2ZiMWUyNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3Jk
aW5hdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRp
bmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5jcHAKQEAgLTQ1NCw3ICs0NTQsNyBA
QCBpbnQ2NF90IExheWVyVHJlZUNvb3JkaW5hdG9yOjphZG9wdEltYWdlQmFja2luZ1N0b3JlKElt
YWdlKiBpbWFnZSkKICAgICBIYXNoTWFwPGludDY0X3QsIGludD46Oml0ZXJhdG9yIGl0ID0gbV9k
aXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5maW5kKGtleSk7CiAKICAgICBpZiAoaXQg
IT0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5lbmQoKSkgewotICAgICAgICAr
KyhpdC0+c2Vjb25kKTsKKyAgICAgICAgKysoaXQtPnZhbHVlKTsKICAgICAgICAgcmV0dXJuIGtl
eTsKICAgICB9CiAKQEAgLTQ3OSw5ICs0NzksOSBAQCB2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9y
OjpyZWxlYXNlSW1hZ2VCYWNraW5nU3RvcmUoaW50NjRfdCBrZXkpCiAgICAgaWYgKGl0ID09IG1f
ZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMuZW5kKCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGl0LT5zZWNvbmQtLTsKKyAgICBpdC0+dmFsdWUtLTsKIAotICAgIGlmIChpdC0+c2Vj
b25kKQorICAgIGlmIChpdC0+dmFsdWUpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fZGlyZWN0
bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMucmVtb3ZlKGl0KTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9yd2FyZExpc3RQcm94eS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFja0ZvcndhcmRMaXN0UHJv
eHkuY3BwCmluZGV4IDRjYTRlNWZkYjcyY2ZjZWFjNjk1NDVkZDE3ZDlmN2EyY2M4NDY4MzguLmJl
ODJhMTk3YTczNmQ2MjMyYTU0MzdkYTljMjkwMmViMDVjYTNhMGIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9yd2FyZExpc3RQcm94eS5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlz
dFByb3h5LmNwcApAQCAtMTMwLDkgKzEzMCw5IEBAIHZvaWQgV2ViQmFja0ZvcndhcmRMaXN0UHJv
eHk6OnJlbW92ZUl0ZW0odWludDY0X3QgaXRlbUlEKQogICAgIGlmIChpdCA9PSBpZFRvSGlzdG9y
eUl0ZW1NYXAoKS5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICBXZWJDb3Jl
OjpwYWdlQ2FjaGUoKS0+cmVtb3ZlKGl0LT5zZWNvbmQuZ2V0KCkpOworICAgIFdlYkNvcmU6OnBh
Z2VDYWNoZSgpLT5yZW1vdmUoaXQtPnZhbHVlLmdldCgpKTsKIAotICAgIGhpc3RvcnlJdGVtVG9J
RE1hcCgpLnJlbW92ZShpdC0+c2Vjb25kKTsKKyAgICBoaXN0b3J5SXRlbVRvSURNYXAoKS5yZW1v
dmUoaXQtPnZhbHVlKTsKICAgICBpZFRvSGlzdG9yeUl0ZW1NYXAoKS5yZW1vdmUoaXQpOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBh
Z2VNYWMubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VN
YWMubW0KaW5kZXggYzJmMDE2NTM3NTk1M2I1M2NjM2NkMWI5ZWI0MzFkYjVlY2ViOTNhZC4uMjIy
NzNjMWY2NDYyMWQ5ZmYwMjgwZTc1Y2U2MTM1YmE1ZDI1YWI3MyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQpAQCAtMTIxLDcg
KzEyMSw3IEBAIHN0YXRpYyBTdHJpbmcgY29tbWFuZE5hbWVGb3JTZWxlY3Rvck5hbWUoY29uc3Qg
U3RyaW5nJiBzZWxlY3Rvck5hbWUpCiAgICAgc3RhdGljIGNvbnN0IFNlbGVjdG9yTmFtZU1hcCog
ZXhjZXB0aW9uTWFwID0gY3JlYXRlU2VsZWN0b3JFeGNlcHRpb25NYXAoKTsKICAgICBTZWxlY3Rv
ck5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZXhjZXB0aW9uTWFwLT5maW5kKHNlbGVjdG9y
TmFtZSk7CiAgICAgaWYgKGl0ICE9IGV4Y2VwdGlvbk1hcC0+ZW5kKCkpCi0gICAgICAgIHJldHVy
biBpdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwogCiAgICAgLy8gUmVtb3Zl
IHRoZSB0cmFpbGluZyBjb2xvbi4KICAgICAvLyBObyBuZWVkIHRvIGNhcGl0YWxpemUgdGhlIGNv
bW1hbmQgbmFtZSBzaW5jZSBFZGl0b3IgY29tbWFuZCBuYW1lcyBhcmUgbm90IGNhc2Ugc2Vuc2l0
aXZlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKaW5kZXggMTQ5MGZm
M2NhZjc0MzczY2M2YmQ2MDMxZjRiYmM1YWQ3ODk5ODhmMi4uNmFhOTIwNDE1OTZjOTM5ZmE5ZjIx
NDgxYTljN2ViYTRkNThiNjlkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nl
c3MuY3BwCkBAIC0zMzksNyArMzM5LDcgQEAgdm9pZCBXZWJQcm9jZXNzOjp2aXNpdGVkTGlua1N0
YXRlQ2hhbmdlZChjb25zdCBWZWN0b3I8V2ViQ29yZTo6TGlua0hhc2g+JiBsaW5rSGEKICAgICAg
ICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPFdlYlBhZ2VHcm91cFByb3h5PiA+Ojpjb25zdF9p
dGVyYXRvciBpdCA9IG1fcGFnZUdyb3VwTWFwLmJlZ2luKCk7CiAgICAgICAgIEhhc2hNYXA8dWlu
dDY0X3QsIFJlZlB0cjxXZWJQYWdlR3JvdXBQcm94eT4gPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
bV9wYWdlR3JvdXBNYXAuZW5kKCk7CiAgICAgICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpCi0g
ICAgICAgICAgICBQYWdlOjp2aXNpdGVkU3RhdGVDaGFuZ2VkKFBhZ2VHcm91cDo6cGFnZUdyb3Vw
KGl0LT5zZWNvbmQtPmlkZW50aWZpZXIoKSksIGxpbmtIYXNoZXNbaV0pOworICAgICAgICAgICAg
UGFnZTo6dmlzaXRlZFN0YXRlQ2hhbmdlZChQYWdlR3JvdXA6OnBhZ2VHcm91cChpdC0+dmFsdWUt
PmlkZW50aWZpZXIoKSksIGxpbmtIYXNoZXNbaV0pOwogICAgIH0KIAogICAgIHBhZ2VDYWNoZSgp
LT5tYXJrUGFnZXNGb3JWaXN0ZWRMaW5rU3R5bGVSZWNhbGMoKTsKQEAgLTM1MSw3ICszNTEsNyBA
QCB2b2lkIFdlYlByb2Nlc3M6OmFsbFZpc2l0ZWRMaW5rU3RhdGVDaGFuZ2VkKCkKICAgICBIYXNo
TWFwPHVpbnQ2NF90LCBSZWZQdHI8V2ViUGFnZUdyb3VwUHJveHk+ID46OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbV9wYWdlR3JvdXBNYXAuYmVnaW4oKTsKICAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQ
dHI8V2ViUGFnZUdyb3VwUHJveHk+ID46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGFnZUdyb3Vw
TWFwLmVuZCgpOwogICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIFBhZ2U6OmFs
bFZpc2l0ZWRTdGF0ZUNoYW5nZWQoUGFnZUdyb3VwOjpwYWdlR3JvdXAoaXQtPnNlY29uZC0+aWRl
bnRpZmllcigpKSk7CisgICAgICAgIFBhZ2U6OmFsbFZpc2l0ZWRTdGF0ZUNoYW5nZWQoUGFnZUdy
b3VwOjpwYWdlR3JvdXAoaXQtPnZhbHVlLT5pZGVudGlmaWVyKCkpKTsKIAogICAgIHBhZ2VDYWNo
ZSgpLT5tYXJrUGFnZXNGb3JWaXN0ZWRMaW5rU3R5bGVSZWNhbGMoKTsKIH0KQEAgLTUyNyw3ICs1
MjcsNyBAQCBXZWJQYWdlKiBXZWJQcm9jZXNzOjpmb2N1c2VkV2ViUGFnZSgpIGNvbnN0CiB7ICAg
IAogICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxXZWJQYWdlPiA+Ojpjb25zdF9pdGVyYXRv
ciBlbmQgPSBtX3BhZ2VNYXAuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPHVpbnQ2NF90LCBSZWZQ
dHI8V2ViUGFnZT4gPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BhZ2VNYXAuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFdlYlBhZ2UqIHBhZ2UgPSAoKml0KS5zZWNvbmQuZ2V0
KCk7CisgICAgICAgIFdlYlBhZ2UqIHBhZ2UgPSAoKml0KS52YWx1ZS5nZXQoKTsKICAgICAgICAg
aWYgKHBhZ2UtPndpbmRvd0FuZFdlYlBhZ2VBcmVGb2N1c2VkKCkpCiAgICAgICAgICAgICByZXR1
cm4gcGFnZTsKICAgICB9CkBAIC01NDUsMTQgKzU0NSwxNCBAQCB2b2lkIFdlYlByb2Nlc3M6OmNy
ZWF0ZVdlYlBhZ2UodWludDY0X3QgcGFnZUlELCBjb25zdCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0
ZXJzJgogICAgIC8vIGxpbmspIHRoZSBXZWJQYWdlIGdldHMgY3JlYXRlZCBib3RoIGluIHRoZSBz
eW5jaHJvbm91cyBoYW5kbGVyIGFuZCB0aHJvdWdoIHRoZSBub3JtYWwgd2F5LiAKICAgICBIYXNo
TWFwPHVpbnQ2NF90LCBSZWZQdHI8V2ViUGFnZT4gPjo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fcGFn
ZU1hcC5hZGQocGFnZUlELCAwKTsKICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAg
ICAgQVNTRVJUKCFyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7Ci0gICAgICAgIHJlc3VsdC5pdGVy
YXRvci0+c2Vjb25kID0gV2ViUGFnZTo6Y3JlYXRlKHBhZ2VJRCwgcGFyYW1ldGVycyk7CisgICAg
ICAgIEFTU0VSVCghcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CisgICAgICAgIHJlc3VsdC5pdGVy
YXRvci0+dmFsdWUgPSBXZWJQYWdlOjpjcmVhdGUocGFnZUlELCBwYXJhbWV0ZXJzKTsKIAogICAg
ICAgICAvLyBCYWxhbmNlZCBieSBhbiBlbmFibGVUZXJtaW5hdGlvbiBpbiByZW1vdmVXZWJQYWdl
LgogICAgICAgICBkaXNhYmxlVGVybWluYXRpb24oKTsKICAgICB9CiAKLSAgICBBU1NFUlQocmVz
dWx0Lml0ZXJhdG9yLT5zZWNvbmQpOworICAgIEFTU0VSVChyZXN1bHQuaXRlcmF0b3ItPnZhbHVl
KTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzOjpyZW1vdmVXZWJQYWdlKHVpbnQ2NF90IHBhZ2VJRCkK
QEAgLTc4OSwxMSArNzg5LDExIEBAIFdlYlBhZ2VHcm91cFByb3h5KiBXZWJQcm9jZXNzOjp3ZWJQ
YWdlR3JvdXAoY29uc3QgV2ViUGFnZUdyb3VwRGF0YSYgcGFnZUdyb3VwRGF0CiB7CiAgICAgSGFz
aE1hcDx1aW50NjRfdCwgUmVmUHRyPFdlYlBhZ2VHcm91cFByb3h5PiA+OjpBZGRSZXN1bHQgcmVz
dWx0ID0gbV9wYWdlR3JvdXBNYXAuYWRkKHBhZ2VHcm91cERhdGEucGFnZUdyb3VwSUQsIDApOwog
ICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICBBU1NFUlQoIXJlc3VsdC5pdGVy
YXRvci0+c2Vjb25kKTsKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBXZWJQYWdl
R3JvdXBQcm94eTo6Y3JlYXRlKHBhZ2VHcm91cERhdGEpOworICAgICAgICBBU1NFUlQoIXJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gV2Vi
UGFnZUdyb3VwUHJveHk6OmNyZWF0ZShwYWdlR3JvdXBEYXRhKTsKICAgICB9CiAKLSAgICByZXR1
cm4gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQuZ2V0KCk7CisgICAgcmV0dXJuIHJlc3VsdC5pdGVy
YXRvci0+dmFsdWUuZ2V0KCk7CiB9CiAKICNpZiBFTkFCTEUoV0VCX0lOVEVOVFMpCkBAIC05MTIs
NyArOTEyLDcgQEAgc3RhdGljIHZvaWQgZnJvbUNvdW50ZWRTZXRUb0hhc2hNYXAoVHlwZUNvdW50
U2V0KiBjb3VudGVkU2V0LCBIYXNoTWFwPFN0cmluZywgdWkKIHsKICAgICBUeXBlQ291bnRTZXQ6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGNvdW50ZWRTZXQtPmVuZCgpOwogICAgIGZvciAoVHlwZUNv
dW50U2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IGNvdW50ZWRTZXQtPmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkKLSAgICAgICAgbWFwLnNldChpdC0+Zmlyc3QsIGl0LT5zZWNvbmQpOworICAgICAg
ICBtYXAuc2V0KGl0LT5rZXksIGl0LT52YWx1ZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGdldFdlYkNv
cmVNZW1vcnlDYWNoZVN0YXRpc3RpY3MoVmVjdG9yPEhhc2hNYXA8U3RyaW5nLCB1aW50NjRfdD4g
PiYgcmVzdWx0KQpAQCAtMTA4NSw3ICsxMDg1LDcgQEAgdm9pZCBXZWJQcm9jZXNzOjpzZXRUZXh0
Q2hlY2tlclN0YXRlKGNvbnN0IFRleHRDaGVja2VyU3RhdGUmIHRleHRDaGVja2VyU3RhdGUpCiAK
ICAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8V2ViUGFnZT4gPjo6aXRlcmF0b3IgZW5kID0g
bV9wYWdlTWFwLmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPFdlYlBh
Z2U+ID46Oml0ZXJhdG9yIGl0ID0gbV9wYWdlTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewotICAgICAgICBXZWJQYWdlKiBwYWdlID0gKCppdCkuc2Vjb25kLmdldCgpOworICAgICAgICBX
ZWJQYWdlKiBwYWdlID0gKCppdCkudmFsdWUuZ2V0KCk7CiAgICAgICAgIGlmIChjb250aW51b3Vz
U3BlbGxDaGVja2luZ1R1cm5lZE9mZikKICAgICAgICAgICAgIHBhZ2UtPnVubWFya0FsbE1pc3Nw
ZWxsaW5ncygpOwogICAgICAgICBpZiAoZ3JhbW1hckNoZWNraW5nVHVybmVkT2ZmKQpkaWZmIC0t
Z2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDhkNzJkMzgyMWEy
NTNjOTJlMDMzMzZlYjJjOTE3YzM2NjY3MWUxNTIuLjk5ZTRjMjU1YjI0NTIxM2QyNTdlYWJhZTNi
Zjk0ZDBlMDQzNTAxM2UgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwzOSBAQAorMjAxMi0wOC0yNyAgQ2FpbyBNYXJjZWxvIGRlIE9s
aXZlaXJhIEZpbGhvICA8Y2Fpby5vbGl2ZWlyYUBvcGVuYm9zc2Eub3JnPgorCisgICAgICAgIFJl
bmFtZSBmaXJzdC9zZWNvbmQgdG8ga2V5L3ZhbHVlIGluIEhhc2hNYXAgaXRlcmF0b3JzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Mjc4NAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChN
b2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyOjphZGRNb2NrUmVjb2duaXRpb25SZXN1bHQpOgor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL05vdGlmaWNhdGlvblByZXNlbnRlci5j
cHA6CisgICAgICAgIChOb3RpZmljYXRpb25QcmVzZW50ZXI6OnNpbXVsYXRlQ2xpY2spOgorICAg
ICAgICAoTm90aWZpY2F0aW9uUHJlc2VudGVyOjpzaG93KToKKyAgICAgICAgKiBEdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL0NwcEJvdW5kQ2xhc3MuY3BwOgorICAgICAgICAoQ3Bw
Qm91bmRDbGFzczo6fkNwcEJvdW5kQ2xhc3MpOgorICAgICAgICAoQ3BwQm91bmRDbGFzczo6aW52
b2tlKToKKyAgICAgICAgKENwcEJvdW5kQ2xhc3M6OmdldFByb3BlcnR5KToKKyAgICAgICAgKENw
cEJvdW5kQ2xhc3M6OnNldFByb3BlcnR5KToKKyAgICAgICAgKENwcEJvdW5kQ2xhc3M6OmJpbmRD
YWxsYmFjayk6CisgICAgICAgIChDcHBCb3VuZENsYXNzOjpiaW5kUHJvcGVydHkpOgorICAgICAg
ICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZlcmVuY2VzLmNwcDoKKyAgICAgICAg
KGFwcGx5Rm9udE1hcCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmll
d0hvc3QuY3BwOgorICAgICAgICAoV2ViVmlld0hvc3Q6OnByaW50UmVzb3VyY2VEZXNjcmlwdGlv
bik6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL0FjY2Vzc2liaWxpdHlDb250cm9sbGVy
V2luLmNwcDoKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjp+QWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXIpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6Ondpbk5vdGlm
aWNhdGlvblJlY2VpdmVkKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vUmVzb3VyY2VM
b2FkRGVsZWdhdGUuY3BwOgorICAgICAgICAoUmVzb3VyY2VMb2FkRGVsZWdhdGU6OmRlc2NyaXB0
aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdDIvRE9NV2luZG93RXh0ZW5zaW9uQmFzaWNfQnVuZGxlLmNwcDoKKyAgICAgICAgKFRl
c3RXZWJLaXRBUEk6OkRPTVdpbmRvd0V4dGVuc2lvbkJhc2ljOjp3aWxsRGVzdHJveVBhZ2UpOgor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9ET01XaW5kb3dFeHRlbnNpb25O
b0NhY2hlX0J1bmRsZS5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpET01XaW5kb3dFeHRl
bnNpb25Ob0NhY2hlOjp3aWxsRGVzdHJveVBhZ2UpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5u
ZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHA6CisgICAgICAgIChXVFI6OlRlc3RSdW5u
ZXI6OndvcmxkSURGb3JXb3JsZCk6CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmV2YWx1YXRl
U2NyaXB0SW5Jc29sYXRlZFdvcmxkKToKKwogMjAxMi0wOC0yNyAgUGhpbGlwcGUgTm9ybWFuZCAg
PHBub3JtYW5kQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dTdHJlYW1lcl1bUXRdIFdlYkF1ZGlv
IHN1cHBvcnQKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL01vY2tX
ZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlci5jcHAKaW5kZXggNzE2MjIyZjlhY2NmZThm
ZmJlMzU5OTc4NTM4Mzc2NDcwNmM2NGUxZS4uMTNjOGZmMWVjNGMxY2RlNTUwNzY2OThkZmNmZTVl
ODcxMjZhODJlYiAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTW9j
a1dlYlNwZWVjaElucHV0Q29udHJvbGxlci5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlci5jcHAKQEAgLTUyLDcgKzUyLDcg
QEAgdm9pZCBNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyOjphZGRNb2NrUmVjb2duaXRpb25S
ZXN1bHQoY29uc3QgV2ViU3RyaW5nJiByZXMKICAgICAgICAgU3RyaW5nIGxhbmdTdHJpbmcgPSBT
dHJpbmc6OmZyb21VVEY4KGxhbmd1YWdlLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICBpZiAoIW1f
cmVjb2duaXRpb25SZXN1bHRzLmNvbnRhaW5zKGxhbmdTdHJpbmcpKQogICAgICAgICAgICAgbV9y
ZWNvZ25pdGlvblJlc3VsdHMuc2V0KGxhbmdTdHJpbmcsIFZlY3RvcjxXZWJTcGVlY2hJbnB1dFJl
c3VsdD4oKSk7Ci0gICAgICAgIG1fcmVjb2duaXRpb25SZXN1bHRzLmZpbmQobGFuZ1N0cmluZykt
PnNlY29uZC5hcHBlbmQocmVzKTsKKyAgICAgICAgbV9yZWNvZ25pdGlvblJlc3VsdHMuZmluZChs
YW5nU3RyaW5nKS0+dmFsdWUuYXBwZW5kKHJlcyk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9U
b29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9Ob3RpZmljYXRpb25QcmVzZW50ZXIuY3BwIGIv
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTm90aWZpY2F0aW9uUHJlc2VudGVyLmNwcApp
bmRleCAwYzU0MDBmNWU5ZThmNzE3MGVjZjU5OWE4MWJkNDI2ZmJkNzcyOTFkLi5hMjE1ODhmNzQ0
ZTVjM2Y1YWI3MGRiZGIwM2MyNzVjNTA3MDhmMDNhIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9Ob3RpZmljYXRpb25QcmVzZW50ZXIuY3BwCisrKyBiL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL05vdGlmaWNhdGlvblByZXNlbnRlci5jcHAKQEAgLTc1LDcg
Kzc1LDcgQEAgYm9vbCBOb3RpZmljYXRpb25QcmVzZW50ZXI6OnNpbXVsYXRlQ2xpY2soY29uc3Qg
V2ViU3RyaW5nJiB0aXRsZSkKICAgICBpZiAobV9hY3RpdmVOb3RpZmljYXRpb25zLmZpbmQoaWQp
ID09IG1fYWN0aXZlTm90aWZpY2F0aW9ucy5lbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIAotICAgIGNvbnN0IFdlYk5vdGlmaWNhdGlvbiYgbm90aWZpY2F0aW9uID0gbV9hY3RpdmVO
b3RpZmljYXRpb25zLmZpbmQoaWQpLT5zZWNvbmQ7CisgICAgY29uc3QgV2ViTm90aWZpY2F0aW9u
JiBub3RpZmljYXRpb24gPSBtX2FjdGl2ZU5vdGlmaWNhdGlvbnMuZmluZChpZCktPnZhbHVlOwog
ICAgIFdlYk5vdGlmaWNhdGlvbiBldmVudFRhcmdldChub3RpZmljYXRpb24pOwogICAgIGV2ZW50
VGFyZ2V0LmRpc3BhdGNoQ2xpY2tFdmVudCgpOwogICAgIHJldHVybiB0cnVlOwpAQCAtODksNyAr
ODksNyBAQCBib29sIE5vdGlmaWNhdGlvblByZXNlbnRlcjo6c2hvdyhjb25zdCBXZWJOb3RpZmlj
YXRpb24mIG5vdGlmaWNhdGlvbikKICAgICAgICAgV1RGOjpTdHJpbmcgcmVwbGFjZUlkKG5vdGlm
aWNhdGlvbi5yZXBsYWNlSWQoKS5kYXRhKCksIG5vdGlmaWNhdGlvbi5yZXBsYWNlSWQoKS5sZW5n
dGgoKSk7CiAgICAgICAgIGlmIChtX3JlcGxhY2VtZW50cy5maW5kKHJlcGxhY2VJZCkgIT0gbV9y
ZXBsYWNlbWVudHMuZW5kKCkpCiAgICAgICAgICAgICBwcmludGYoIlJFUExBQ0lORyBOT1RJRklD
QVRJT04gJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgbV9yZXBsYWNlbWVudHMuZmluZChyZXBs
YWNlSWQpLT5zZWNvbmQudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgICAgbV9yZXBs
YWNlbWVudHMuZmluZChyZXBsYWNlSWQpLT52YWx1ZS51dGY4KCkuZGF0YSgpKTsKIAogICAgICAg
ICBtX3JlcGxhY2VtZW50cy5zZXQocmVwbGFjZUlkLCBXVEY6OlN0cmluZyhpZGVudGlmaWVyLmRh
dGEoKSwgaWRlbnRpZmllci5sZW5ndGgoKSkpOwogICAgIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvQ3BwQm91bmRDbGFzcy5jcHAgYi9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL0NwcEJvdW5kQ2xhc3MuY3BwCmlu
ZGV4IDliNGEzYjY0NjQ1ZDA1N2I0MTcyZTFjN2RmYTA3YzdhNjJlNzdjZjguLjFiMjlkMmIwZjU1
ZDAxZjczODcxNDU3ODc3ZjlkYmRmMDZmMWI0OTEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvQ3BwQm91bmRDbGFzcy5jcHAKKysrIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9DcHBCb3VuZENsYXNzLmNwcApAQCAt
MjAzLDEwICsyMDMsMTAgQEAgYm9vbCBDcHBOUE9iamVjdDo6c2V0UHJvcGVydHkoTlBPYmplY3Qq
IG5wT2JqLCBOUElkZW50aWZpZXIgaWRlbnQsIGNvbnN0IE5QVmFyaWEKIENwcEJvdW5kQ2xhc3M6
On5DcHBCb3VuZENsYXNzKCkKIHsKICAgICBmb3IgKE1ldGhvZExpc3Q6Oml0ZXJhdG9yIGkgPSBt
X21ldGhvZHMuYmVnaW4oKTsgaSAhPSBtX21ldGhvZHMuZW5kKCk7ICsraSkKLSAgICAgICAgZGVs
ZXRlIGktPnNlY29uZDsKKyAgICAgICAgZGVsZXRlIGktPnZhbHVlOwogCiAgICAgZm9yIChQcm9w
ZXJ0eUxpc3Q6Oml0ZXJhdG9yIGkgPSBtX3Byb3BlcnRpZXMuYmVnaW4oKTsgaSAhPSBtX3Byb3Bl
cnRpZXMuZW5kKCk7ICsraSkKLSAgICAgICAgZGVsZXRlIGktPnNlY29uZDsKKyAgICAgICAgZGVs
ZXRlIGktPnZhbHVlOwogCiAgICAgLy8gVW5yZWdpc3RlciBvdXJzZWx2ZXMgaWYgd2Ugd2VyZSBi
b3VuZCB0byBhIGZyYW1lLgogICAgIGlmIChtX2JvdW5kVG9GcmFtZSkKQEAgLTIzNyw3ICsyMzcs
NyBAQCBib29sIENwcEJvdW5kQ2xhc3M6Omludm9rZShOUElkZW50aWZpZXIgaWRlbnQsCiAgICAg
ICAgIH0KICAgICAgICAgY2FsbGJhY2sgPSBtX2ZhbGxiYWNrQ2FsbGJhY2suZ2V0KCk7CiAgICAg
fSBlbHNlCi0gICAgICAgIGNhbGxiYWNrID0gKCptZXRob2QpLnNlY29uZDsKKyAgICAgICAgY2Fs
bGJhY2sgPSAoKm1ldGhvZCkudmFsdWU7CiAKICAgICAvLyBCdWlsZCBhIENwcEFyZ3VtZW50TGlz
dCBhcmd1bWVudCB2ZWN0b3IgZnJvbSB0aGUgTlBWYXJpYW50cyBjb21pbmcgaW4uCiAgICAgQ3Bw
QXJndW1lbnRMaXN0IGNwcEFyZ3VtZW50cyhhcmd1bWVudENvdW50KTsKQEAgLTI2MCw3ICsyNjAs
NyBAQCBib29sIENwcEJvdW5kQ2xhc3M6OmdldFByb3BlcnR5KE5QSWRlbnRpZmllciBpZGVudCwg
TlBWYXJpYW50KiByZXN1bHQpIGNvbnN0CiAgICAgfQogCiAgICAgQ3BwVmFyaWFudCBjcHBWYWx1
ZTsKLSAgICBpZiAoIWNhbGxiYWNrLT5zZWNvbmQtPmdldFZhbHVlKCZjcHBWYWx1ZSkpCisgICAg
aWYgKCFjYWxsYmFjay0+dmFsdWUtPmdldFZhbHVlKCZjcHBWYWx1ZSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICBjcHBWYWx1ZS5jb3B5VG9OUFZhcmlhbnQocmVzdWx0KTsKICAgICByZXR1
cm4gdHJ1ZTsKQEAgLTI3NCw3ICsyNzQsNyBAQCBib29sIENwcEJvdW5kQ2xhc3M6OnNldFByb3Bl
cnR5KE5QSWRlbnRpZmllciBpZGVudCwgY29uc3QgTlBWYXJpYW50KiB2YWx1ZSkKIAogICAgIENw
cFZhcmlhbnQgY3BwVmFsdWU7CiAgICAgY3BwVmFsdWUuc2V0KCp2YWx1ZSk7Ci0gICAgcmV0dXJu
ICgqY2FsbGJhY2spLnNlY29uZC0+c2V0VmFsdWUoY3BwVmFsdWUpOworICAgIHJldHVybiAoKmNh
bGxiYWNrKS52YWx1ZS0+c2V0VmFsdWUoY3BwVmFsdWUpOwogfQogCiB2b2lkIENwcEJvdW5kQ2xh
c3M6OmJpbmRDYWxsYmFjayhjb25zdCBzdHJpbmcmIG5hbWUsIENhbGxiYWNrKiBjYWxsYmFjaykK
QEAgLTI4Miw3ICsyODIsNyBAQCB2b2lkIENwcEJvdW5kQ2xhc3M6OmJpbmRDYWxsYmFjayhjb25z
dCBzdHJpbmcmIG5hbWUsIENhbGxiYWNrKiBjYWxsYmFjaykKICAgICBOUElkZW50aWZpZXIgaWRl
bnQgPSBXZWJCaW5kaW5nczo6Z2V0U3RyaW5nSWRlbnRpZmllcihuYW1lLmNfc3RyKCkpOwogICAg
IE1ldGhvZExpc3Q6Oml0ZXJhdG9yIG9sZENhbGxiYWNrID0gbV9tZXRob2RzLmZpbmQoaWRlbnQp
OwogICAgIGlmIChvbGRDYWxsYmFjayAhPSBtX21ldGhvZHMuZW5kKCkpIHsKLSAgICAgICAgZGVs
ZXRlIG9sZENhbGxiYWNrLT5zZWNvbmQ7CisgICAgICAgIGRlbGV0ZSBvbGRDYWxsYmFjay0+dmFs
dWU7CiAgICAgICAgIGlmICghY2FsbGJhY2spIHsKICAgICAgICAgICAgIG1fbWV0aG9kcy5yZW1v
dmUob2xkQ2FsbGJhY2spOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzA5LDcgKzMwOSw3IEBA
IHZvaWQgQ3BwQm91bmRDbGFzczo6YmluZFByb3BlcnR5KGNvbnN0IHN0cmluZyYgbmFtZSwgUHJv
cGVydHlDYWxsYmFjayogY2FsbGJhY2spCiAgICAgTlBJZGVudGlmaWVyIGlkZW50ID0gV2ViQmlu
ZGluZ3M6OmdldFN0cmluZ0lkZW50aWZpZXIobmFtZS5jX3N0cigpKTsKICAgICBQcm9wZXJ0eUxp
c3Q6Oml0ZXJhdG9yIG9sZENhbGxiYWNrID0gbV9wcm9wZXJ0aWVzLmZpbmQoaWRlbnQpOwogICAg
IGlmIChvbGRDYWxsYmFjayAhPSBtX3Byb3BlcnRpZXMuZW5kKCkpIHsKLSAgICAgICAgZGVsZXRl
IG9sZENhbGxiYWNrLT5zZWNvbmQ7CisgICAgICAgIGRlbGV0ZSBvbGRDYWxsYmFjay0+dmFsdWU7
CiAgICAgICAgIGlmICghY2FsbGJhY2spIHsKICAgICAgICAgICAgIG1fcHJvcGVydGllcy5yZW1v
dmUob2xkQ2FsbGJhY2spOwogICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViUHJlZmVyZW5jZXMuY3BwIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vV2ViUHJlZmVyZW5jZXMuY3BwCmluZGV4IGM0ZGUwYWJjMTQ0NTBh
MTA5YWFjYTdmOTc3YTI5ZTg5MzliMjZjZTQuLjZlYzBlNDM0ZGRmNGUxZmY0YmM4M2Q3ZWU5NzYy
MWYyZjg2MDQ1MTggMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dl
YlByZWZlcmVuY2VzLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQ
cmVmZXJlbmNlcy5jcHAKQEAgLTE1Niw5ICsxNTYsOSBAQCB0eXBlZGVmIHZvaWQgKCpTZXRGb250
RmFtaWx5V3JhcHBlcikoV2ViU2V0dGluZ3MqLCBjb25zdCBXZWJTdHJpbmcmLCBVU2NyaXB0Q29k
ZQogc3RhdGljIHZvaWQgYXBwbHlGb250TWFwKFdlYlNldHRpbmdzKiBzZXR0aW5ncywgY29uc3Qg
V2ViUHJlZmVyZW5jZXM6OlNjcmlwdEZvbnRGYW1pbHlNYXAmIG1hcCwgU2V0Rm9udEZhbWlseVdy
YXBwZXIgc2V0dGVyKQogewogICAgIGZvciAoV2ViUHJlZmVyZW5jZXM6OlNjcmlwdEZvbnRGYW1p
bHlNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtYXAuYmVnaW4oKTsgaXRlciAhPSBtYXAuZW5k
KCk7ICsraXRlcikgewotICAgICAgICBjb25zdCBXZWJTdHJpbmcmIGZvbnQgPSBpdGVyLT5zZWNv
bmQ7CisgICAgICAgIGNvbnN0IFdlYlN0cmluZyYgZm9udCA9IGl0ZXItPnZhbHVlOwogICAgICAg
ICBpZiAoIWZvbnQuaXNOdWxsKCkgJiYgIWZvbnQuaXNFbXB0eSgpKQotICAgICAgICAgICAgKCpz
ZXR0ZXIpKHNldHRpbmdzLCBmb250LCBzdGF0aWNfY2FzdDxVU2NyaXB0Q29kZT4oaXRlci0+Zmly
c3QpKTsKKyAgICAgICAgICAgICgqc2V0dGVyKShzZXR0aW5ncywgZm9udCwgc3RhdGljX2Nhc3Q8
VVNjcmlwdENvZGU+KGl0ZXItPmtleSkpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuY3BwIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuY3BwCmluZGV4IGRiMGVhNWVlZmYyOWZhZmRiYzEw
MmExMWY1NmQwZjgyNmE4MmE2ZjYuLjRlM2U1OTJmNGI5YWQ4ZWM2ZTBlYjdmNTJmNTcwYmJlYWIz
MTAzMWUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdI
b3N0LmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5j
cHAKQEAgLTE3NjMsNyArMTc2Myw3IEBAIHZvaWQgV2ViVmlld0hvc3Q6OnByaW50RnJhbWVVc2Vy
R2VzdHVyZVN0YXR1cyhXZWJGcmFtZSogd2ViZnJhbWUsIGNvbnN0IGNoYXIqIG1zCiB2b2lkIFdl
YlZpZXdIb3N0OjpwcmludFJlc291cmNlRGVzY3JpcHRpb24odW5zaWduZWQgaWRlbnRpZmllcikK
IHsKICAgICBSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlSWRlbnRpZmllck1h
cC5maW5kKGlkZW50aWZpZXIpOwotICAgIHByaW50ZigiJXMiLCBpdCAhPSBtX3Jlc291cmNlSWRl
bnRpZmllck1hcC5lbmQoKSA/IGl0LT5zZWNvbmQuY19zdHIoKSA6ICI8dW5rbm93bj4iKTsKKyAg
ICBwcmludGYoIiVzIiwgaXQgIT0gbV9yZXNvdXJjZUlkZW50aWZpZXJNYXAuZW5kKCkgPyBpdC0+
dmFsdWUuY19zdHIoKSA6ICI8dW5rbm93bj4iKTsKIH0KIAogdm9pZCBXZWJWaWV3SG9zdDo6c2V0
UGVuZGluZ0V4dHJhRGF0YShQYXNzT3duUHRyPFRlc3RTaGVsbEV4dHJhRGF0YT4gZXh0cmFEYXRh
KQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0FjY2Vzc2liaWxpdHlDb250
cm9sbGVyV2luLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9BY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlcldpbi5jcHAKaW5kZXggN2Y5YWE2Y2MyZWU5MjliMmJmOGVhNDE2ZjVkNjViYjA1NmUz
ZWFkMS4uZWIzOGI1NDM1YzE2OWQyYmRmYjA1NjhjNjNlYTIwM2I1YzZmYTNkYyAxMDA2NDQKLS0t
IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyV2luLmNw
cAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJX
aW4uY3BwCkBAIC01OCw3ICs1OCw3IEBAIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjp+QWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXIoKQogICAgICAgICBVbmhvb2tXaW5FdmVudChtX25vdGlmaWNhdGlv
bnNFdmVudEhvb2spOwogCiAgICAgZm9yIChIYXNoTWFwPFBsYXRmb3JtVUlFbGVtZW50LCBKU09i
amVjdFJlZj46Oml0ZXJhdG9yIGl0ID0gbV9ub3RpZmljYXRpb25MaXN0ZW5lcnMuYmVnaW4oKTsg
aXQgIT0gbV9ub3RpZmljYXRpb25MaXN0ZW5lcnMuZW5kKCk7ICsraXQpCi0gICAgICAgIEpTVmFs
dWVVbnByb3RlY3QoZnJhbWUtPmdsb2JhbENvbnRleHQoKSwgaXQtPnNlY29uZCk7CisgICAgICAg
IEpTVmFsdWVVbnByb3RlY3QoZnJhbWUtPmdsb2JhbENvbnRleHQoKSwgaXQtPnZhbHVlKTsKIH0K
IAogQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6ZWxlbWVu
dEF0UG9pbnQoaW50IHgsIGludCB5KQpAQCAtMjkzLDcgKzI5Myw3IEBAIHZvaWQgQWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXI6OnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKCkKIHZvaWQgQWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXI6Ondpbk5vdGlmaWNhdGlvblJlY2VpdmVkKFBsYXRmb3JtVUlFbGVt
ZW50IGVsZW1lbnQsIGNvbnN0IHN0cmluZyYgZXZlbnROYW1lKQogewogICAgIGZvciAoSGFzaE1h
cDxQbGF0Zm9ybVVJRWxlbWVudCwgSlNPYmplY3RSZWY+OjppdGVyYXRvciBpdCA9IG1fbm90aWZp
Y2F0aW9uTGlzdGVuZXJzLmJlZ2luKCk7IGl0ICE9IG1fbm90aWZpY2F0aW9uTGlzdGVuZXJzLmVu
ZCgpOyArK2l0KSB7Ci0gICAgICAgIENPTVB0cjxJU2VydmljZVByb3ZpZGVyPiB0aGlzU2Vydmlj
ZVByb3ZpZGVyKFF1ZXJ5LCBpdC0+Zmlyc3QpOworICAgICAgICBDT01QdHI8SVNlcnZpY2VQcm92
aWRlcj4gdGhpc1NlcnZpY2VQcm92aWRlcihRdWVyeSwgaXQtPmtleSk7CiAgICAgICAgIGlmICgh
dGhpc1NlcnZpY2VQcm92aWRlcikKICAgICAgICAgICAgIGNvbnRpbnVlOwogCkBAIC0zMTYsNyAr
MzE2LDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6d2luTm90aWZpY2F0aW9uUmVj
ZWl2ZWQoUGxhdGZvcm1VSUVsZW1lbnQgZWxlbWVudCwKIAogICAgICAgICBKU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4ganNOb3RpZmljYXRpb24oQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKGV2ZW50TmFtZS5jX3N0cigpKSk7CiAgICAgICAgIEpTVmFsdWVSZWYgYXJndW1lbnQg
PSBKU1ZhbHVlTWFrZVN0cmluZyhmcmFtZS0+Z2xvYmFsQ29udGV4dCgpLCBqc05vdGlmaWNhdGlv
bi5nZXQoKSk7Ci0gICAgICAgIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24oZnJhbWUtPmdsb2JhbENv
bnRleHQoKSwgaXQtPnNlY29uZCwgTlVMTCwgMSwgJmFyZ3VtZW50LCBOVUxMKTsKKyAgICAgICAg
SlNPYmplY3RDYWxsQXNGdW5jdGlvbihmcmFtZS0+Z2xvYmFsQ29udGV4dCgpLCBpdC0+dmFsdWUs
IDAsIDEsICZhcmd1bWVudCwgMCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Ub29scy9EdW1w
UmVuZGVyVHJlZS93aW4vUmVzb3VyY2VMb2FkRGVsZWdhdGUuY3BwIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvd2luL1Jlc291cmNlTG9hZERlbGVnYXRlLmNwcAppbmRleCA5MGI5YWUwZmNjM2Y2MTdm
NGZmNjc1NTYyZGEyOTZlZTVlMmJiYzMzLi42ODU5NzgwZjM5MmYxOGUzMDY2MWIwNDkyN2I0Y2Nj
YmYzYzQ3MWEyIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vUmVzb3VyY2VM
b2FkRGVsZWdhdGUuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9SZXNvdXJjZUxv
YWREZWxlZ2F0ZS5jcHAKQEAgLTY2LDcgKzY2LDcgQEAgd3N0cmluZyBSZXNvdXJjZUxvYWREZWxl
Z2F0ZTo6ZGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQodW5zaWduZWQgbG9uZyBpZGUK
ICAgICBpZiAoaXQgPT0gbV91cmxNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybiBMIjx1bmtub3du
PiI7CiAKLSAgICByZXR1cm4gdXJsU3VpdGFibGVGb3JUZXN0UmVzdWx0KGl0LT5zZWNvbmQpOwor
ICAgIHJldHVybiB1cmxTdWl0YWJsZUZvclRlc3RSZXN1bHQoaXQtPnZhbHVlKTsKIH0KIAogd3N0
cmluZyBSZXNvdXJjZUxvYWREZWxlZ2F0ZTo6ZGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1
bHQoSVdlYlVSTFJlcXVlc3QqIHJlcXVlc3QpCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdDIvRE9NV2luZG93RXh0ZW5zaW9uQmFzaWNfQnVuZGxlLmNwcCBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9ET01XaW5kb3dFeHRlbnNpb25CYXNpY19C
dW5kbGUuY3BwCmluZGV4IDk4YmZhYjM1YWY0NmNmNDljNjJiY2M5YjBhODU5NDU3ZjQ4Y2MxYzEu
LjViMTI5NmY0N2QxOWQyOGI5ZGU3ZmNlOGQxMzFhYTQwNTQ3NmJkZDEgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9ET01XaW5kb3dFeHRlbnNpb25CYXNpY19C
dW5kbGUuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9ET01XaW5k
b3dFeHRlbnNpb25CYXNpY19CdW5kbGUuY3BwCkBAIC0xNzEsOCArMTcxLDggQEAgdm9pZCBET01X
aW5kb3dFeHRlbnNpb25CYXNpYzo6d2lsbERlc3Ryb3lQYWdlKFdLQnVuZGxlUmVmLCBXS0J1bmRs
ZVBhZ2VSZWYpCiAgICAgSGFzaE1hcDxXS0J1bmRsZURPTVdpbmRvd0V4dGVuc2lvblJlZiwgaW50
Pjo6aXRlcmF0b3IgaXQgPSBtX2V4dGVuc2lvblRvUmVjb3JkTWFwLmJlZ2luKCk7CiAgICAgSGFz
aE1hcDxXS0J1bmRsZURPTVdpbmRvd0V4dGVuc2lvblJlZiwgaW50Pjo6aXRlcmF0b3IgZW5kID0g
bV9leHRlbnNpb25Ub1JlY29yZE1hcC5lbmQoKTsKICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0
KSB7Ci0gICAgICAgIHVwZGF0ZUV4dGVuc2lvblN0YXRlUmVjb3JkKGl0LT5maXJzdCwgUmVtb3Zl
ZCk7Ci0gICAgICAgIFdLUmVsZWFzZShpdC0+Zmlyc3QpOworICAgICAgICB1cGRhdGVFeHRlbnNp
b25TdGF0ZVJlY29yZChpdC0+a2V5LCBSZW1vdmVkKTsKKyAgICAgICAgV0tSZWxlYXNlKGl0LT5r
ZXkpOwogICAgIH0KIAogICAgIG1fZXh0ZW5zaW9uVG9SZWNvcmRNYXAuY2xlYXIoKTsKZGlmZiAt
LWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9ET01XaW5kb3dFeHRlbnNp
b25Ob0NhY2hlX0J1bmRsZS5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIv
RE9NV2luZG93RXh0ZW5zaW9uTm9DYWNoZV9CdW5kbGUuY3BwCmluZGV4IDhmNmNkN2IzNzM1YjVh
ZTI3OWQwYWRiNzcxODVjNWQyODA3MTFjYWUuLjQxMWUxMTVlYTQ0ZmJlNDg3MGU3ZjFmMzFkOTA1
ZTg1NzdmMDdlMjIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Mi9ET01XaW5kb3dFeHRlbnNpb25Ob0NhY2hlX0J1bmRsZS5jcHAKKysrIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXQyL0RPTVdpbmRvd0V4dGVuc2lvbk5vQ2FjaGVfQnVuZGxlLmNw
cApAQCAtMTc4LDggKzE3OCw4IEBAIHZvaWQgRE9NV2luZG93RXh0ZW5zaW9uTm9DYWNoZTo6d2ls
bERlc3Ryb3lQYWdlKFdLQnVuZGxlUmVmLCBXS0J1bmRsZVBhZ2VSZWYpCiAgICAgSGFzaE1hcDxX
S0J1bmRsZURPTVdpbmRvd0V4dGVuc2lvblJlZiwgaW50Pjo6aXRlcmF0b3IgaXQgPSBtX2V4dGVu
c2lvblRvUmVjb3JkTWFwLmJlZ2luKCk7CiAgICAgSGFzaE1hcDxXS0J1bmRsZURPTVdpbmRvd0V4
dGVuc2lvblJlZiwgaW50Pjo6aXRlcmF0b3IgZW5kID0gbV9leHRlbnNpb25Ub1JlY29yZE1hcC5l
bmQoKTsKICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIHVwZGF0ZUV4dGVu
c2lvblN0YXRlUmVjb3JkKGl0LT5maXJzdCwgUmVtb3ZlZCk7Ci0gICAgICAgIFdLUmVsZWFzZShp
dC0+Zmlyc3QpOworICAgICAgICB1cGRhdGVFeHRlbnNpb25TdGF0ZVJlY29yZChpdC0+a2V5LCBS
ZW1vdmVkKTsKKyAgICAgICAgV0tSZWxlYXNlKGl0LT5rZXkpOwogICAgIH0KIAogICAgIG1fZXh0
ZW5zaW9uVG9SZWNvcmRNYXAuY2xlYXIoKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwCmluZGV4IGI5NGU1ZDQ3NjNhMTE4YzRl
ZDZkODUyZDQxNzg0MmEwNWUxNGI0NGQuLmY4NDI5Nzg0MWZmNzQyMTRkYmFhYTJkMmYxOWRjZDcy
ZTRhNzA1OTQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvVGVzdFJ1bm5lci5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9UZXN0UnVubmVyLmNwcApAQCAtNDU1LDggKzQ1NSw4IEBAIHVuc2lnbmVkIFRlc3RSdW5u
ZXI6OndvcmxkSURGb3JXb3JsZChXS0J1bmRsZVNjcmlwdFdvcmxkUmVmIHdvcmxkKQogewogICAg
IFdvcmxkTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSB3b3JsZE1hcCgpLmVuZCgpOwogICAgIGZv
ciAoV29ybGRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gd29ybGRNYXAoKS5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQgPT0gd29ybGQpCi0gICAgICAg
ICAgICByZXR1cm4gaXQtPmZpcnN0OworICAgICAgICBpZiAoaXQtPnZhbHVlID09IHdvcmxkKQor
ICAgICAgICAgICAgcmV0dXJuIGl0LT5rZXk7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CkBAIC00
NzAsNyArNDcwLDcgQEAgdm9pZCBUZXN0UnVubmVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRX
b3JsZChKU0NvbnRleHRSZWYgY29udGV4dCwgdW5zaWduZWQgd28KICAgICBpZiAoIXdvcmxkSUQp
CiAgICAgICAgIHdvcmxkLmFkb3B0KFdLQnVuZGxlU2NyaXB0V29ybGRDcmVhdGVXb3JsZCgpKTsK
ICAgICBlbHNlIHsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tCdW5kbGVTY3JpcHRXb3JsZFJlZj4m
IHdvcmxkU2xvdCA9IHdvcmxkTWFwKCkuYWRkKHdvcmxkSUQsIDApLml0ZXJhdG9yLT5zZWNvbmQ7
CisgICAgICAgIFdLUmV0YWluUHRyPFdLQnVuZGxlU2NyaXB0V29ybGRSZWY+JiB3b3JsZFNsb3Qg
PSB3b3JsZE1hcCgpLmFkZCh3b3JsZElELCAwKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgIGlm
ICghd29ybGRTbG90KQogICAgICAgICAgICAgd29ybGRTbG90LmFkb3B0KFdLQnVuZGxlU2NyaXB0
V29ybGRDcmVhdGVXb3JsZCgpKTsKICAgICAgICAgd29ybGQgPSB3b3JsZFNsb3Q7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160821</attachid>
            <date>2012-08-27 15:13:03 -0700</date>
            <delta_ts>2012-08-27 16:22:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-82784-20120827191253.patch</filename>
            <type>text/plain</type>
            <size>702302</size>
            <attacher name="Caio Marcelo de Oliveira Filho">cmarcelo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI2ODAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
OTQ3ZDQ0ZjNhY2JhYjkzZWExMzE1MTIyNzllYjg3M2JlYzYyOTdkLi5hNDQxNGI0YzEzODJmMmUw
ZjYzMDk0YmVmNWZiMThjNTZjM2Y5ZDVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMTggQEAKKzIwMTItMDgtMjcgIENhaW8gTWFyY2VsbyBkZSBPbGl2ZWlyYSBGaWxobyAg
PGNhaW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KKworICAgICAgICBSZW5hbWUgZmlyc3Qvc2Vj
b25kIHRvIGtleS92YWx1ZSBpbiBIYXNoTWFwIGl0ZXJhdG9ycworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI3ODQKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0Lmg6Cisg
ICAgICAgIChKU0M6OkpTQ2FsbGJhY2tPYmplY3REYXRhOjpKU1ByaXZhdGVQcm9wZXJ0eU1hcDo6
Z2V0UHJpdmF0ZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNDYWxsYmFja09iamVjdERhdGE6
OkpTUHJpdmF0ZVByb3BlcnR5TWFwOjpzZXRQcml2YXRlUHJvcGVydHkpOgorICAgICAgICAoSlND
OjpKU0NhbGxiYWNrT2JqZWN0RGF0YTo6SlNQcml2YXRlUHJvcGVydHlNYXA6OnZpc2l0Q2hpbGRy
ZW4pOgorICAgICAgICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmg6CisgICAgICAg
IChKU0M6Ojo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgICogQVBJL0pTQ2xhc3NSZWYu
Y3BwOgorICAgICAgICAoT3BhcXVlSlNDbGFzczo6fk9wYXF1ZUpTQ2xhc3MpOgorICAgICAgICAo
T3BhcXVlSlNDbGFzc0NvbnRleHREYXRhOjpPcGFxdWVKU0NsYXNzQ29udGV4dERhdGEpOgorICAg
ICAgICAoT3BhcXVlSlNDbGFzczo6Y29udGV4dERhdGEpOgorICAgICAgICAqIGJ5dGVjb2RlL0Nv
ZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcCk6CisgICAgICAgIChK
U0M6OkV2YWxDb2RlQ2FjaGU6OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpuYW1lRm9yUmVnaXN0ZXIpOgorICAgICAgICAqIGJ5dGVjb2RlL0p1bXBUYWJsZS5oOgor
ICAgICAgICAoSlNDOjpTdHJpbmdKdW1wVGFibGU6Om9mZnNldEZvclZhbHVlKToKKyAgICAgICAg
KEpTQzo6U3RyaW5nSnVtcFRhYmxlOjpjdGlGb3JWYWx1ZSk6CisgICAgICAgICogYnl0ZWNvZGUv
TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3BwOgorICAgICAgICAoSlNDOjpMYXp5T3BlcmFuZFZh
bHVlUHJvZmlsZVBhcnNlcjo6Z2V0SWZQcmVzZW50KToKKyAgICAgICAgKiBieXRlY29kZS9TYW1w
bGluZ1Rvb2wuY3BwOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1Rvb2w6OmR1bXApOgorICAgICAg
ICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5
dGVjb2RlR2VuZXJhdG9yOjphZGRWYXIpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRv
cjo6YWRkR2xvYmFsVmFyKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmFkZENv
bnN0YW50KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmFkZENvbnN0YW50VmFs
dWUpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdExvYWQpOgorICAgICAg
ICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6YWRkU3RyaW5nQ29uc3RhbnQpOgorICAgICAgICAo
SlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdExhenlOZXdGdW5jdGlvbik6CisgICAgICAgICog
Ynl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHA6CisgICAgICAgIChKU0M6OlByb3BlcnR5TGlz
dE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgICogZGVidWdnZXIvRGVidWdnZXIuY3BwOgor
ICAgICAgICAqIGRmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlOjpydW4pOgorICAgICAg
ICAoSlNDOjpERkc6OkFyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2U6Om9ic2VydmVCYWRBcmd1
bWVudHNVc2UpOgorICAgICAgICAoSlNDOjpERkc6OkFyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhh
c2U6Om9ic2VydmVQcm9wZXJBcmd1bWVudHNVc2UpOgorICAgICAgICAoSlNDOjpERkc6OkFyZ3Vt
ZW50c1NpbXBsaWZpY2F0aW9uUGhhc2U6OmlzT0tUb09wdGltaXplKToKKyAgICAgICAgKEpTQzo6
REZHOjpBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlOjpyZW1vdmVBcmd1bWVudHNSZWZlcmVu
Y2luZ1BoYW50b21DaGlsZCk6CisgICAgICAgICogZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6QXNzZW1ibHlIZWxwZXJzOjpkZWNvZGVkQ29kZU1hcEZvcik6
CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlQ2FjaGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZUNhY2hlOjp+Qnl0ZUNvZGVDYWNoZSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVDYWNoZTo6Z2V0KToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpjZWxsQ29uc3RhbnQpOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmVTdGFja0Vu
dHJ5KToKKyAgICAgICAgKiBkZmcvREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2U6OnJ1bik6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlOjpub3RpY2VTdHJ1
Y3R1cmVDaGVjayk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQ2hlY2tIb2lzdGluZ1Bo
YXNlOjpub3RpY2VDbG9iYmVyKToKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAo
SlNDOjpIZWFwOjptYXJrUHJvdGVjdGVkT2JqZWN0cyk6CisgICAgICAgICogaGVhcC9IZWFwLmg6
CisgICAgICAgIChKU0M6OkhlYXA6OmZvckVhY2hQcm90ZWN0ZWRDZWxsKToKKyAgICAgICAgKiBo
ZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUU3R1YlJvdXRpbmVT
ZXQ6Om1hcmtTbG93KToKKyAgICAgICAgKEpTQzo6SklUU3R1YlJvdXRpbmVTZXQ6OmRlbGV0ZVVu
bWFya2VkSmV0dGlzb25lZFN0dWJSb3V0aW5lcyk6CisgICAgICAgICogaGVhcC9NYXJrU3RhY2su
Y3BwOgorICAgICAgICAoSlNDOjpNYXJrU3RhY2s6OmludGVybmFsQXBwZW5kKToKKyAgICAgICAg
KiBoZWFwL1dlYWsuaDoKKyAgICAgICAgKEpTQzo6d2Vha1JlbW92ZSk6CisgICAgICAgICogaml0
L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGUpOgorICAgICAgICAq
IGppdC9KSVRTdHVicy5jcHA6CisgICAgICAgIChKU0M6OkpJVFRodW5rczo6Y3RpU3R1Yik6Cisg
ICAgICAgICogcGFyc2VyL1BhcnNlci5jcHA6CisgICAgICAgIChKU0M6Ojo6cGFyc2VTdHJpY3RP
YmplY3RMaXRlcmFsKToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlLmNwcDoKKyAgICAgICAg
KEpTQzo6ZnVuY3Rpb25OYW1lQ291bnRQYWlyQ29tcGFyYXRvcik6CisgICAgICAgIChKU0M6OlBy
b2ZpbGU6OmRlYnVnUHJpbnREYXRhU2FtcGxlU3R5bGUpOgorICAgICAgICAqIHJ1bnRpbWUvSWRl
bnRpZmllci5jcHA6CisgICAgICAgIChKU0M6OklkZW50aWZpZXI6OmFkZCk6CisgICAgICAgICog
cnVudGltZS9KU0FjdGl2YXRpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0FjdGl2YXRpb246Omdl
dE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpKU0FjdGl2YXRpb246OnN5bWJvbFRh
YmxlUHV0V2l0aEF0dHJpYnV0ZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5jcHA6Cisg
ICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OnB1dCk6CisgICAgICAgIChKU0M6OlNw
YXJzZUFycmF5VmFsdWVNYXA6OnB1dERpcmVjdCk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5
VmFsdWVNYXA6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU0FycmF5OjplbnRlckRp
Y3Rpb25hcnlNb2RlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6ZGVmaW5lT3duTnVtZXJpY1By
b3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRl
eCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcik6Cisg
ICAgICAgIChKU0M6OkpTQXJyYXk6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgpOgorICAg
ICAgICAoSlNDOjpKU0FycmF5OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aCk6Cisg
ICAgICAgIChKU0M6OkpTQXJyYXk6OmRlbGV0ZVByb3BlcnR5QnlJbmRleCk6CisgICAgICAgIChK
U0M6OkpTQXJyYXk6OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpKU0FycmF5
OjpzZXRMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpzb3J0KToKKyAgICAgICAgKEpT
Qzo6SlNBcnJheTo6Y29tcGFjdEZvclNvcnRpbmcpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpj
aGVja0NvbnNpc3RlbmN5KToKKyAgICAgICAgKiBydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3Qu
Y3BwOgorICAgICAgICAoSlNDOjpKU1N5bWJvbFRhYmxlT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5h
bWVzKToKKyAgICAgICAgKiBydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaDoKKyAgICAgICAg
KEpTQzo6c3ltYm9sVGFibGVHZXQpOgorICAgICAgICAoSlNDOjpzeW1ib2xUYWJsZVB1dCk6Cisg
ICAgICAgIChKU0M6OnN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMpOgorICAgICAgICAqIHJ1
bnRpbWUvUmVnRXhwQ2FjaGUuY3BwOgorICAgICAgICAoSlNDOjpSZWdFeHBDYWNoZTo6aW52YWxp
ZGF0ZUNvZGUpOgorICAgICAgICAqIHJ1bnRpbWUvV2Vha0dDTWFwLmg6CisgICAgICAgIChKU0M6
OldlYWtHQ01hcDo6Y2xlYXIpOgorICAgICAgICAoSlNDOjpXZWFrR0NNYXA6OnNldCk6CisgICAg
ICAgICogdG9vbHMvUHJvZmlsZVRyZWVOb2RlLmg6CisgICAgICAgIChKU0M6OlByb2ZpbGVUcmVl
Tm9kZTo6c2FtcGxlQ2hpbGQpOgorICAgICAgICAoSlNDOjpQcm9maWxlVHJlZU5vZGU6OmNoaWxk
Q291bnQpOgorICAgICAgICAoSlNDOjpQcm9maWxlVHJlZU5vZGU6OmR1bXBJbnRlcm5hbCk6Cisg
ICAgICAgIChKU0M6OlByb2ZpbGVUcmVlTm9kZTo6Y29tcGFyZUVudHJpZXMpOgorCiAyMDEyLTA4
LTI3ICBCZW5qYW1pbiBQb3VsYWluICA8YmVuamFtaW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBB
ZGQgRUNNQVNjcmlwdCBOdW1iZXIgdG8gU3RyaW5nIGNvbnZlcnNpb24gdG8gV1RGOjpTdHJpbmcK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggMjYwMmIzOTk2MDYyZjM4ZGNlOTQ0ZWM2MWQ3M2YyZTdmMDc4YzQ0OC4uYzA1OTZhNTli
NjRkYTYyMGU3OGRlNjA5MTU4MDNmN2M5N2NmZTQxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1NyBAQAorMjAx
Mi0wOC0yNyAgQ2FpbyBNYXJjZWxvIGRlIE9saXZlaXJhIEZpbGhvICA8Y2Fpby5vbGl2ZWlyYUBv
cGVuYm9zc2Eub3JnPgorCisgICAgICAgIFJlbmFtZSBmaXJzdC9zZWNvbmQgdG8ga2V5L3ZhbHVl
IGluIEhhc2hNYXAgaXRlcmF0b3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD04Mjc4NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogd3RmL0hhc2hDb3VudGVkU2V0Lmg6CisgICAgICAgIChXVEY6Ojo6YWRk
KToKKyAgICAgICAgKFdURjo6OjpyZW1vdmUpOgorICAgICAgICAoV1RGOjpjb3B5VG9WZWN0b3Ip
OgorICAgICAgICAqIHd0Zi9IYXNoSXRlcmF0b3JzLmg6CisgICAgICAgIChXVEY6Okhhc2hUYWJs
ZUNvbnN0S2V5c0l0ZXJhdG9yOjpnZXQpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGVDb25zdFZh
bHVlc0l0ZXJhdG9yOjpnZXQpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGVWYWx1ZXNJdGVyYXRv
cjo6Z2V0KToKKyAgICAgICAgKiB3dGYvSGFzaE1hcC5oOgorICAgICAgICAoV1RGOjpLZXlWYWx1
ZVBhaXJLZXlFeHRyYWN0b3I6OmV4dHJhY3QpOgorICAgICAgICAoV1RGOjpIYXNoTWFwVmFsdWVU
cmFpdHM6OmlzRW1wdHlWYWx1ZSk6CisgICAgICAgIChXVEY6Okhhc2hNYXBUcmFuc2xhdG9yOjp0
cmFuc2xhdGUpOgorICAgICAgICAoV1RGOjpIYXNoTWFwVHJhbnNsYXRvckFkYXB0ZXI6OnRyYW5z
bGF0ZSk6CisgICAgICAgIChXVEY6Ojo6c2V0KToKKyAgICAgICAgKFdURjo6OjpnZXQpOgorICAg
ICAgICAoV1RGOjo6OnRha2UpOgorICAgICAgICAoV1RGOjpvcGVyYXRvcj09KToKKyAgICAgICAg
KFdURjo6ZGVsZXRlQWxsVmFsdWVzKToKKyAgICAgICAgKFdURjo6ZGVsZXRlQWxsS2V5cyk6Cisg
ICAgICAgIFJlbW92ZSBkZWxldGVBbGxQYWlyRmlyc3RzL1NlY29uZHMuCisKKyAgICAgICAgKiB3
dGYvSGFzaFRhYmxlLmg6CisgICAgICAgIChXVEY6Omhhc2hUYWJsZVN3YXApOgorICAgICAgICAo
V1RGOjo6OmNoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUpOgorICAgICAgICAqIHd0Zi9I
YXNoVHJhaXRzLmg6CisgICAgICAgIChXVEY6OktleVZhbHVlUGFpcjo6S2V5VmFsdWVQYWlyKToK
KyAgICAgICAgKEtleVZhbHVlUGFpcik6CisgICAgICAgIChXVEY6OktleVZhbHVlUGFpckhhc2hU
cmFpdHM6OmNvbnN0cnVjdERlbGV0ZWRWYWx1ZSk6CisgICAgICAgIChXVEY6OktleVZhbHVlUGFp
ckhhc2hUcmFpdHM6OmlzRGVsZXRlZFZhbHVlKToKKyAgICAgICAgKiB3dGYvTWV0YUFsbG9jYXRv
ci5jcHA6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmFkZEZyZWVTcGFjZSk6CisgICAg
ICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmluY3JlbWVudFBhZ2VPY2N1cGFuY3kpOgorICAgICAg
ICAoV1RGOjpNZXRhQWxsb2NhdG9yOjpkZWNyZW1lbnRQYWdlT2NjdXBhbmN5KToKKyAgICAgICAg
KiB3dGYvUmVmQ291bnRlZExlYWtDb3VudGVyLmNwcDoKKyAgICAgICAgKFdURjo6UmVmQ291bnRl
ZExlYWtDb3VudGVyOjp+UmVmQ291bnRlZExlYWtDb3VudGVyKToKKyAgICAgICAgKiB3dGYvUmVm
UHRySGFzaE1hcC5oOgorICAgICAgICAoV1RGOjo6OnNldCk6CisgICAgICAgIChXVEY6Ojo6Z2V0
KToKKyAgICAgICAgKFdURjo6OjppbmxpbmVHZXQpOgorICAgICAgICAoV1RGOjo6OnRha2UpOgor
ICAgICAgICAqIHd0Zi9TcGVjdHJ1bS5oOgorICAgICAgICAoV1RGOjpTcGVjdHJ1bTo6YWRkKToK
KyAgICAgICAgKFdURjo6U3BlY3RydW06OmdldCk6CisgICAgICAgIChXVEY6OlNwZWN0cnVtOjpi
dWlsZExpc3QpOgorICAgICAgICAqIHd0Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHA6CisgICAgICAg
IChXVEY6OmlkZW50aWZpZXJCeVB0aHJlYWRIYW5kbGUpOgorCiAyMDEyLTA4LTI3ICBCZW5qYW1p
biBQb3VsYWluICA8YmVuamFtaW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBBZGQgRUNNQVNjcmlw
dCBOdW1iZXIgdG8gU3RyaW5nIGNvbnZlcnNpb24gdG8gV1RGOjpTdHJpbmcKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRl
eCA2OTkwMDEzYTNiZGFkNmVmMzBlZGIyYmI3YWQ3ZTUyMTI4Y2U3OGMzLi5iYThkMDllZTQ0YzQ1
M2UwM2E2MTUxZmUxODM0MTRmOTY1MjE4ZWEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODY3IEBA
CisyMDEyLTA4LTI3ICBDYWlvIE1hcmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gIDxjYWlvLm9saXZl
aXJhQG9wZW5ib3NzYS5vcmc+CisKKyAgICAgICAgUmVuYW1lIGZpcnN0L3NlY29uZCB0byBrZXkv
dmFsdWUgaW4gSGFzaE1hcCBpdGVyYXRvcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTgyNzg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBNb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uOjpXYXRjaGVyczo6ZmluZCk6CisgICAgICAg
IChXZWJDb3JlOjpHZW9sb2NhdGlvbjo6V2F0Y2hlcnM6OnJlbW92ZSk6CisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0
YWJhc2U6Om9iamVjdFN0b3JlTmFtZXMpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lE
QkRhdGFiYXNlQmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6bWV0YWRhdGEpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkZh
Y3RvcnlCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJGYWN0b3J5QmFja2Vu
ZEltcGw6OmRlbGV0ZURhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkZhY3RvcnlCYWNr
ZW5kSW1wbDo6b3BlbkJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJGYWN0b3J5
QmFja2VuZEltcGw6Om9wZW4pOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVj
dFN0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjppbmRleE5hbWVz
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpwdXQpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCT2JqZWN0U3RvcmU6OmluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVj
dFN0b3JlOjpkZWxldGVJbmRleCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjptZXRhZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjptYWtlSW5kZXhXcml0
ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRlbGV0
ZUludGVybmFsKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6b2JqZWN0U3RvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246Om9iamVjdFN0b3JlRGVsZXRlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6b25BYm9ydCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJUcmFuc2FjdGlvbjo6ZGlzcGF0Y2hFdmVudCk6CisgICAgICAgICogTW9kdWxlcy93ZWJk
YXRhYmFzZS9BYnN0cmFjdERhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0
RGF0YWJhc2U6OnBlcmZvcm1PcGVuQW5kVmVyaWZ5KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRh
dGFiYXNlL0RhdGFiYXNlVHJhY2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRy
YWNrZXI6OmludGVycnVwdEFsbERhdGFiYXNlc0ZvckNvbnRleHQpOgorICAgICAgICAqIE1vZHVs
ZXMvd2ViZGF0YWJhc2UvT3JpZ2luVXNhZ2VSZWNvcmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
T3JpZ2luVXNhZ2VSZWNvcmQ6OmRpc2tVc2FnZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRh
YmFzZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNR
TFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OmFjcXVpcmVMb2NrKToKKyAgICAgICAgKFdlYkNvcmU6
OlNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OnJlbGVhc2VMb2NrKToKKyAgICAgICAgKFdlYkNv
cmU6OlNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OnNodXRkb3duKToKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL0RhdGFiYXNlVHJhY2tlckNocm9taXVtLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6aW50ZXJydXB0QWxsRGF0YWJhc2VzRm9y
Q29udGV4dCk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9jaHJvbWl1bS9RdW90YVRy
YWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UXVvdGFUcmFja2VyOjpnZXREYXRhYmFzZVNp
emVBbmRTcGFjZUF2YWlsYWJsZVRvT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OlF1b3RhVHJh
Y2tlcjo6dXBkYXRlRGF0YWJhc2VTaXplKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYnNvY2tldHMv
V2ViU29ja2V0RGVmbGF0ZUZyYW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRF
eHRlbnNpb25EZWZsYXRlRnJhbWU6OnByb2Nlc3NSZXNwb25zZSk6CisgICAgICAgICogTW9kdWxl
cy93ZWJzb2NrZXRzL1dlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6V2ViU29ja2V0RXh0ZW5zaW9uRGlzcGF0Y2hlcjo6YXBwZW5kQWNjZXB0ZWRFeHRl
bnNpb24pOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjp+QVhPYmplY3RDYWNoZSk6CisgICAgICAgICog
YmluZGluZ3MvZ29iamVjdC9ET01PYmplY3RDYWNoZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRP
TU9iamVjdENhY2hlOjpjbGVhckJ5RnJhbWUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0RPTU9i
amVjdEhhc2hUYWJsZU1hcC5oOgorICAgICAgICAoV2ViQ29yZTo6RE9NT2JqZWN0SGFzaFRhYmxl
TWFwOjp+RE9NT2JqZWN0SGFzaFRhYmxlTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTU9iamVj
dEhhc2hUYWJsZU1hcDo6Z2V0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2FjaGVET01TdHJ1Y3R1cmUpOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9N
R2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RP
TUdsb2JhbE9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6Z2V0RE9NQ29uc3RydWN0b3IpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpQYWdlU2NyaXB0RGVidWdTZXJ2ZXI6OmFkZExpc3RlbmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlBhZ2VTY3JpcHREZWJ1Z1NlcnZlcjo6cmVtb3ZlTGlzdGVuZXIpOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL1NjcmlwdENhY2hlZEZyYW1lRGF0YS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTY3JpcHRDYWNoZWRGcmFtZURhdGE6OlNjcmlwdENhY2hlZEZyYW1lRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JpcHRDYWNoZWRGcmFtZURhdGE6OnJlc3RvcmUpOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
aXB0Q29udHJvbGxlcjo6flNjcmlwdENvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
aXB0Q29udHJvbGxlcjo6Y2xlYXJXaW5kb3dTaGVsbCk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jp
cHRDb250cm9sbGVyOjphdHRhY2hEZWJ1Z2dlcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRD
b250cm9sbGVyOjp1cGRhdGVEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250
cm9sbGVyOjpjcmVhdGVSb290T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRy
b2xsZXI6OmNvbGxlY3RJc29sYXRlZENvbnRleHRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlw
dENvbnRyb2xsZXI6OmNsZWFudXBTY3JpcHRPYmplY3RzRm9yUGx1Z2luKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmNsZWFyU2NyaXB0T2JqZWN0cyk6CisgICAgICAgICog
YmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5oOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0
Q29udHJvbGxlcjo6d2luZG93U2hlbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJv
bGxlcjo6ZXhpc3RpbmdXaW5kb3dTaGVsbCk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0
RGVidWdTZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OnNl
dEJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OnJlbW92
ZUJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6Omhhc0Jy
ZWFrcG9pbnQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZVNlcmlhbGl6ZXI6OmNoZWNrRm9yRHVwbGljYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lU2VyaWFsaXplcjo6ZHVtcElmVGVybWluYWwpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2xvbmVTZXJpYWxpemVyOjp3cml0ZSk6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06CisgICAgICAgIChHZW5lcmF0ZUltcGxl
bWVudGF0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhGbG9hdDY0
QXJyYXkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhGbG9hdDY0QXJyYXk6OkdldFJhd1RlbXBs
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RmxvYXQ2NEFycmF5OjpHZXRUZW1wbGF0ZSk6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEFjdGl2ZURPTU9iamVjdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RBY3RpdmVET01PYmplY3Q6OkdldFJhd1RlbXBs
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdEFjdGl2ZURPTU9iamVjdDo6R2V0VGVtcGxh
dGUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RDdXN0b21OYW1l
ZEdldHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RDdXN0b21OYW1lZEdldHRlcjo6
R2V0UmF3VGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0Q3VzdG9tTmFtZWRHZXR0
ZXI6OkdldFRlbXBsYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhU
ZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RFdmVudENv
bnN0cnVjdG9yOjpHZXRSYXdUZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RFdmVu
dENvbnN0cnVjdG9yOjpHZXRUZW1wbGF0ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Y4L1Y4VGVzdEV2ZW50VGFyZ2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdEV2
ZW50VGFyZ2V0OjpHZXRSYXdUZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RFdmVu
dFRhcmdldDo6R2V0VGVtcGxhdGUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9W
OC9WOFRlc3RFeGNlcHRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0RXhjZXB0aW9u
OjpHZXRSYXdUZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RFeGNlcHRpb246Okdl
dFRlbXBsYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0SW50
ZXJmYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdEludGVyZmFjZTo6R2V0UmF3VGVt
cGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0SW50ZXJmYWNlOjpHZXRUZW1wbGF0ZSk6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE1lZGlhUXVlcnlMaXN0
TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0
ZW5lcjo6R2V0UmF3VGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0TWVkaWFRdWVy
eUxpc3RMaXN0ZW5lcjo6R2V0VGVtcGxhdGUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOFRlc3ROYW1lZENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4
VGVzdE5hbWVkQ29uc3RydWN0b3I6OkdldFJhd1RlbXBsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OlY4VGVzdE5hbWVkQ29uc3RydWN0b3I6OkdldFRlbXBsYXRlKToKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Tm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOFRl
c3ROb2RlOjpHZXRSYXdUZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3ROb2RlOjpH
ZXRUZW1wbGF0ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9i
ai5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RPYmo6OkdldFJhd1RlbXBsYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlY4VGVzdE9iajo6R2V0VGVtcGxhdGUpOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlOjpHZXRSYXdUZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2U6OkdldFRlbXBsYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy92
OC9ET01XcmFwcGVyV29ybGQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NV3JhcHBlcldvcmxk
OjpkZWFsbG9jYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVdyYXBwZXJXb3JsZDo6Z2V0T3JD
cmVhdGVJc29sYXRlZFdvcmxkKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9OUFY4T2JqZWN0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmZyZWVWOE5QT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
Om5wQ3JlYXRlVjhTY3JpcHRPYmplY3QpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdENv
bnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6Y2xlYXJT
Y3JpcHRPYmplY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OnJlc2V0
SXNvbGF0ZWRXb3JsZHMpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6ZXZh
bHVhdGVJbklzb2xhdGVkV29ybGQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxl
cjo6c2V0SXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cmlwdENvbnRyb2xsZXI6OmNsZWFudXBTY3JpcHRPYmplY3RzRm9yUGx1Z2luKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmNvbGxlY3RJc29sYXRlZENvbnRleHRzKToKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAq
IGJpbmRpbmdzL3Y4L1Y4RE9NTWFwLmg6CisgICAgICAgIChXZWJDb3JlOjpXZWFrUmVmZXJlbmNl
TWFwOjpyZW1vdmVJZlByZXNlbnQpOgorICAgICAgICAoV2ViQ29yZTo6V2Vha1JlZmVyZW5jZU1h
cDo6dmlzaXQpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmVudW1lcmF0ZUdsb2JhbEhhbmRsZXMpOgorICAgICAgICAqIGJpbmRp
bmdzL3Y4L1Y4UGVyQ29udGV4dERhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhQZXJDb250
ZXh0RGF0YTo6ZGlzcG9zZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvbnBydW50aW1lLmNwcDoK
KyAgICAgICAgKiBicmlkZ2UvSWRlbnRpZmllclJlcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
ZGVudGlmaWVyUmVwOjpnZXQpOgorICAgICAgICAqIGJyaWRnZS9OUF9qc29iamVjdC5jcHA6Cisg
ICAgICAgIChPYmplY3RNYXA6OmFkZCk6CisgICAgICAgIChPYmplY3RNYXA6OnJlbW92ZSk6Cisg
ICAgICAgICogYnJpZGdlL2puaS9qc2MvSmF2YUNsYXNzSlNDLmNwcDoKKyAgICAgICAgKEphdmFD
bGFzczo6fkphdmFDbGFzcyk6CisgICAgICAgICogYnJpZGdlL3F0L3F0X2luc3RhbmNlLmNwcDoK
KyAgICAgICAgKEpTQzo6QmluZGluZ3M6OldlYWtNYXA6OnNldCk6CisgICAgICAgICogYnJpZGdl
L3J1bnRpbWVfcm9vdC5jcHA6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpSb290T2JqZWN0Ojpp
bnZhbGlkYXRlKToKKyAgICAgICAgKiBjc3MvQ1NTQ2FudmFzVmFsdWUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTQ2FudmFzVmFsdWU6OmNhbnZhc0NoYW5nZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTQ2FudmFzVmFsdWU6OmNhbnZhc1Jlc2l6ZWQpOgorICAgICAgICAqIGNzcy9DU1NDb21w
dXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y291bnRlclRvQ1NT
VmFsdWUpOgorICAgICAgICAqIGNzcy9DU1NDcm9zc2ZhZGVWYWx1ZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NDcm9zc2ZhZGVWYWx1ZTo6Y3Jvc3NmYWRlQ2hhbmdlZCk6CisgICAgICAgICog
Y3NzL0NTU0ZvbnRGYWNlU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNl
U291cmNlOjpnZXRGb250RGF0YSk6CisgICAgICAgICogY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250U2VsZWN0b3I6OmFkZEZvbnRGYWNlUnVsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NGb250U2VsZWN0b3I6OmdldEZvbnREYXRhKToKKyAgICAgICAg
KiBjc3MvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NJ
bWFnZUdlbmVyYXRvclZhbHVlOjphZGRDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTSW1h
Z2VHZW5lcmF0b3JWYWx1ZTo6cmVtb3ZlQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0lt
YWdlR2VuZXJhdG9yVmFsdWU6OmdldEltYWdlKToKKyAgICAgICAgKiBjc3MvQ1NTU2VnbWVudGVk
Rm9udEZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU2VnbWVudGVkRm9udEZhY2U6Omdl
dEZvbnREYXRhKToKKyAgICAgICAgKiBjc3MvQ1NTU2VsZWN0b3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTU2VsZWN0b3I6OnBhcnNlUHNldWRvVHlwZSk6CisgICAgICAgICogY3NzL0NTU1Zh
bHVlUG9vbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NWYWx1ZVBvb2w6OmNyZWF0ZUNvbG9y
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVmFsdWVQb29sOjpjcmVhdGVGb250RmFtaWx5
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVmFsdWVQb29sOjpjcmVhdGVGb250RmFjZVZh
bHVlKToKKyAgICAgICAgKiBjc3MvUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6Y2xvbmVB
bmRDYWNoZUZvckNTU09NKToKKyAgICAgICAgKiBjc3MvU3R5bGVCdWlsZGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlDb3VudGVyOjphcHBseUluaGVyaXRWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Q291bnRlcjo6YXBwbHlWYWx1ZSk6CisgICAg
ICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6Y29sbGVjdEZlYXR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6
OnJ1bGVTZXRGb3JTY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBl
bmRBdXRob3JTdHlsZXNoZWV0cyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpz
d2VlcE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KToKKyAgICAgICAgKiBjc3MvU3R5bGVT
aGVldENvbnRlbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRDb250ZW50czo6
cGFyc2VyQWRkTmFtZXNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRDb250ZW50
czo6ZGV0ZXJtaW5lTmFtZXNwYWNlKToKKyAgICAgICAgKiBkb20vQ2hlY2tlZFJhZGlvQnV0dG9u
cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaGVja2VkUmFkaW9CdXR0b25zOjphZGRCdXR0b24p
OgorICAgICAgICAoV2ViQ29yZTo6Q2hlY2tlZFJhZGlvQnV0dG9uczo6cmVtb3ZlQnV0dG9uKToK
KyAgICAgICAgKiBkb20vQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlcjo6
Y2hpbGRBZGRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpN
dXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlcjo6d2lsbFJlbW92ZUNoaWxkKToKKyAgICAgICAgKFdl
YkNvcmU6OkNoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVy
OjppbmNyZW1lbnRTY29waW5nTGV2ZWwpOgorICAgICAgICAoV2ViQ29yZTo6Q2hpbGRMaXN0TXV0
YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXI6OmRlY3JlbWVudFNjb3BpbmdM
ZXZlbCk6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50OjpwYWdlR3JvdXBVc2VyU2hlZXRzKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50
Ojp3aW5kb3dOYW1lZEl0ZW1zKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpkb2N1bWVu
dE5hbWVkSXRlbXMpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmdldENTU0NhbnZhc0Vs
ZW1lbnQpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjptYXJrZXJDb250YWluaW5n
UG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW5k
ZXJlZFJlY3RzRm9yTWFya2Vycyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNv
bnRyb2xsZXI6OnJlbW92ZU1hcmtlcnMpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJr
ZXJDb250cm9sbGVyOjpyZXBhaW50TWFya2Vycyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVu
dE1hcmtlckNvbnRyb2xsZXI6OmludmFsaWRhdGVSZW5kZXJlZFJlY3RzRm9yTWFya2Vyc0luUmVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnNob3dNYXJr
ZXJzKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnRPcmRlcmVkTWFwLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50T3JkZXJlZE1hcDo6cmVtb3ZlKToKKyAgICAgICAgKiBkb20vRWxlbWVu
dEF0dHJpYnV0ZURhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZW5zdXJlQXR0ckxpc3RGb3JF
bGVtZW50KToKKyAgICAgICAgKiBkb20vRXZlbnREaXNwYXRjaGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkV2ZW50UmVsYXRlZFRhcmdldEFkanVzdGVyOjpmaW5kUmVsYXRlZFRhcmdldCk6Cisg
ICAgICAgICogZG9tL0V2ZW50TGlzdGVuZXJNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZl
bnRMaXN0ZW5lck1hcDo6ZXZlbnRUeXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudExpc3Rl
bmVyTWFwOjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRMaXN0ZW5lck1hcDo6cmVtb3Zl
KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50TGlzdGVuZXJNYXA6OmZpbmQpOgorICAgICAgICAo
V2ViQ29yZTo6RXZlbnRMaXN0ZW5lck1hcDo6cmVtb3ZlRmlyc3RFdmVudExpc3RlbmVyQ3JlYXRl
ZEZyb21NYXJrdXApOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRMaXN0ZW5lck1hcDo6Y29weUV2
ZW50TGlzdGVuZXJzTm90Q3JlYXRlZEZyb21NYXJrdXBUb1RhcmdldCk6CisgICAgICAgIChXZWJD
b3JlOjpFdmVudExpc3RlbmVySXRlcmF0b3I6Om5leHRMaXN0ZW5lcik6CisgICAgICAgICogZG9t
L0lkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJZFRhcmdl
dE9ic2VydmVyUmVnaXN0cnk6OmFkZE9ic2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklkVGFy
Z2V0T2JzZXJ2ZXJSZWdpc3RyeTo6cmVtb3ZlT2JzZXJ2ZXIpOgorICAgICAgICAqIGRvbS9NZW1v
cnlJbnN0cnVtZW50YXRpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lbW9yeUluc3RydW1lbnRh
dGlvbjo6YWRkSW5zdHJ1bWVudGVkTWFwRW50cmllcyk6CisgICAgICAgIChXZWJDb3JlOjpNZW1v
cnlJbnN0cnVtZW50YXRpb246OmFkZEluc3RydW1lbnRlZE1hcFZhbHVlcyk6CisgICAgICAgICog
ZG9tL011dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Ok11dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3VwOjppc09sZFZhbHVlUmVxdWVzdGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok11dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3VwOjplbnF1ZXVlTXV0
YXRpb25SZWNvcmQpOgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Ok5vZGU6OmR1bXBTdGF0aXN0aWNzKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmNsZWFyUmFy
ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZUxpc3RzTm9kZURhdGE6OmludmFsaWRhdGVD
YWNoZXMpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Y29sbGVjdE1hdGNoaW5nT2JzZXJ2ZXJz
Rm9yTXV0YXRpb24pOgorICAgICAgICAqIGRvbS9Ob2RlUmFyZURhdGEuaDoKKyAgICAgICAgKFdl
YkNvcmU6Ok5vZGVMaXN0c05vZGVEYXRhOjphZGRDYWNoZVdpdGhBdG9taWNOYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok5vZGVMaXN0c05vZGVEYXRhOjphZGRDYWNoZVdpdGhOYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok5vZGVMaXN0c05vZGVEYXRhOjphZGRDYWNoZVdpdGhRdWFsaWZpZWROYW1l
KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVMaXN0c05vZGVEYXRhOjphZG9wdFRyZWVTY29wZSk6
CisgICAgICAgICogZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246OmNoZWNrU3R5bGVTaGVldCk6CisgICAgICAgICog
ZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0
RXhlY3V0aW9uQ29udGV4dDo6Y2FuU3VzcGVuZEFjdGl2ZURPTU9iamVjdHMpOgorICAgICAgICAo
V2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6c3VzcGVuZEFjdGl2ZURPTU9iamVjdHMp
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6cmVzdW1lQWN0aXZl
RE9NT2JqZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0Ojpz
dG9wQWN0aXZlRE9NT2JqZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25D
b250ZXh0OjphZGp1c3RNaW5pbXVtVGltZXJJbnRlcnZhbCk6CisgICAgICAgICogZG9tL1NlbGVj
dG9yUXVlcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JRdWVyeUNhY2hlOjphZGQp
OgorICAgICAgICAqIGRvbS9TcGFjZVNwbGl0U3RyaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNwYWNlU3BsaXRTdHJpbmdEYXRhOjpjcmVhdGUpOgorICAgICAgICAqIGRvbS9TdHlsZWRFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlZEVsZW1lbnQ6OnVwZGF0ZUF0dHJpYnV0
ZVN0eWxlKToKKyAgICAgICAgKiBlZGl0aW5nL21hYy9BbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xs
ZXIubW06CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xsZXI6OkFs
ZXJuYXRpdmVUZXh0Q29udGV4dENvbnRyb2xsZXI6OmFsdGVybmF0aXZlc0ZvckNvbnRleHQpOgor
ICAgICAgICAqIGh0bWwvRm9ybUNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2F2
ZWRGb3JtU3RhdGU6OnNlcmlhbGl6ZVRvKToKKyAgICAgICAgKFdlYkNvcmU6OlNhdmVkRm9ybVN0
YXRlOjphcHBlbmRDb250cm9sU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2F2ZWRGb3JtU3Rh
dGU6OnRha2VDb250cm9sU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2F2ZWRGb3JtU3RhdGU6
OmdldFJlZmVyZW5jZWRGaWxlUGF0aHMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUtleUdlbmVy
YXRvcjo6Zm9ybUtleSk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtQ29udHJvbGxlcjo6Y3JlYXRl
U2F2ZWRGb3JtU3RhdGVNYXApOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUNvbnRyb2xsZXI6OmZv
cm1FbGVtZW50c1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1Db250cm9sbGVyOjp0YWtl
U3RhdGVGb3JGb3JtRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtQ29udHJvbGxlcjo6
Z2V0UmVmZXJlbmNlZEZpbGVQYXRocyk6CisgICAgICAgICogaHRtbC9IVE1MQ29sbGVjdGlvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbkNhY2hlQmFzZTo6YXBwZW5kKToK
KyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMRnJhbWVidWZmZXI6OmdldEF0dGFjaG1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6cmVtb3ZlQXR0YWNobWVudEZyb21Cb3VuZEZyYW1lYnVmZmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRnJhbWVidWZmZXI6OmNoZWNrU3RhdHVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMRnJhbWVidWZmZXI6OmRlbGV0ZU9iamVjdEltcGwpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6aW5pdGlhbGl6ZUF0dGFjaG1lbnRzKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weToKKyAgICAgICAg
KiBpbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVBh
dGNoU3VwcG9ydDo6ZGlmZik6CisgICAgICAgIChXZWJDb3JlOjpET01QYXRjaFN1cHBvcnQ6Omlu
bmVyUGF0Y2hDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpET01QYXRjaFN1cHBvcnQ6OnJl
bW92ZUNoaWxkQW5kTW92ZVRvTmV3KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0TWFuYWdlcjo6
aW5qZWN0ZWRTY3JpcHRGb3JJZCk6CisgICAgICAgIChXZWJDb3JlOjpJbmplY3RlZFNjcmlwdE1h
bmFnZXI6OmluamVjdGVkU2NyaXB0SWRGb3IpOgorICAgICAgICAoV2ViQ29yZTo6SW5qZWN0ZWRT
Y3JpcHRNYW5hZ2VyOjpkaXNjYXJkSW5qZWN0ZWRTY3JpcHRzRm9yKToKKyAgICAgICAgKFdlYkNv
cmU6OkluamVjdGVkU2NyaXB0TWFuYWdlcjo6cmVsZWFzZU9iamVjdEdyb3VwKToKKyAgICAgICAg
KFdlYkNvcmU6OkluamVjdGVkU2NyaXB0TWFuYWdlcjo6aW5qZWN0ZWRTY3JpcHRGb3IpOgorICAg
ICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTZWxlY3RvclByb2ZpbGU6OmNvbW1pdFNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNl
bGVjdG9yUHJvZmlsZTo6Y29tbWl0U2VsZWN0b3JUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlNl
bGVjdG9yUHJvZmlsZTo6dG9JbnNwZWN0b3JPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQ1NTQWdlbnQ6OmZvcmNlUHNldWRvU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQ1NTQWdlbnQ6OmFzSW5zcGVjdG9yU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JDU1NBZ2VudDo6YXNzZXJ0U3R5bGVTaGVldEZvcklkKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpkaWRSZW1vdmVET01Ob2RlKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpkaWRNb2RpZnlET01BdHRyKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpyZXNldFBzZXVkb1N0YXRlcyk6CisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3RvckNvbnNvbGVBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JDb25zb2xlQWdlbnQ6OnN0b3BUaW1pbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQ29uc29sZUFnZW50Ojpjb3VudCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
ckRPTUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50Ojpub2Rl
Rm9ySWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OnBlcmZvcm1TZWFy
Y2gpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmdldFNlYXJjaFJlc3Vs
dHMpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OndpbGxTZW5kWE1M
SHR0cFJlcXVlc3QpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlQWdl
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpjbGVh
ckZyb250ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6
ZW5hYmxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6c3Rv
cmFnZUlkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6Z2V0
RE9NU3RvcmFnZVJlc291cmNlRm9ySWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9N
U3RvcmFnZUFnZW50OjpkaWRVc2VET01TdG9yYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckRPTVN0b3JhZ2VBZ2VudDo6bWVtb3J5Qnl0ZXNVc2VkQnlTdG9yYWdlQ2FjaGUpOgorICAg
ICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmVuYWJsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjpkYXRhYmFzZUlkKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmZpbmRCeUZpbGVOYW1lKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmRhdGFiYXNlRm9ySWQpOgorICAgICAgICAqIGlu
c3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnRCeVVybCk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZW1vdmVCcmVha3BvaW50KToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnJlc29sdmVCcmVha3BvaW50KToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNlYXJjaEluQ29udGVudCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpnZXRTY3JpcHRTb3Vy
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkUGFyc2VT
b3VyY2UpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHA6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yTWVtb3J5
QWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3Bl
Y3RvclBhZ2VBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjYWNoZWRSZXNvdXJjZXNGb3JG
cmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6OmRpZENsZWFyV2lu
ZG93T2JqZWN0SW5Xb3JsZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6
OmZyYW1lRGV0YWNoZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFn
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmdldFBy
b2ZpbGVIZWFkZXJzKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yUHJvZmlsZXJBZ2VudDo6Z2V0UHJvZmlsZSk6CisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3RvclJlc291cmNlQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRPYmplY3RG
b3JIZWFkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlc291cmNlQWdlbnQ6Ondp
bGxTZW5kUmVxdWVzdCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0YXRlOjpnZXRCb29sZWFuKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvclN0YXRlOjpnZXRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yU3RhdGU6OmdldExvbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3Rh
dGU6OmdldERvdWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdGF0ZTo6Z2V0T2Jq
ZWN0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZTo6c3R5bGVXaXRoUHJvcGVydGllcyk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjppbnNwZWN0b3JTdHlsZUZvcklkKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3Rvck9iamVjdEJhc2U6OmdldCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JPYmplY3RCYXNlOjp3cml0ZUpTT04pOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JX
b3JrZXJBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JXb3JrZXJBZ2VudDo6
d29ya2VyQ29udGV4dFRlcm1pbmF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yV29y
a2VyQWdlbnQ6OmNyZWF0ZVdvcmtlckZyb250ZW5kQ2hhbm5lbHNGb3JFeGlzdGluZ1dvcmtlcnMp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yV29ya2VyQWdlbnQ6OmRlc3Ryb3lXb3JrZXJG
cm9udGVuZENoYW5uZWxzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvTmV0d29ya1Jlc291cmNlc0Rh
dGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1Jlc291cmNlc0RhdGE6OnJlbW92ZUNh
Y2hlZFJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtSZXNvdXJjZXNEYXRhOjpj
bGVhcik6CisgICAgICAgICogbG9hZGVyL0Nyb3NzT3JpZ2luQWNjZXNzQ29udHJvbC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjppc1NpbXBsZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVzdCk6CisgICAg
ICAgIChXZWJDb3JlOjpjcmVhdGVBY2Nlc3NDb250cm9sUHJlZmxpZ2h0UmVxdWVzdCk6CisgICAg
ICAgICogbG9hZGVyL0Nyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZUl0ZW06OmFsbG93c0Ny
b3NzT3JpZ2luSGVhZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpDcm9zc09yaWdpblByZWZsaWdo
dFJlc3VsdENhY2hlOjpjYW5Ta2lwUHJlZmxpZ2h0KToKKyAgICAgICAgKiBsb2FkZXIvRG9jdW1l
bnRMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI6OmdldFN1YnJl
c291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6c3Vic3RpdHV0ZVJl
c291cmNlRGVsaXZlcnlUaW1lckZpcmVkKToKKyAgICAgICAgKiBsb2FkZXIvTWFpblJlc291cmNl
TG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1haW5SZXNvdXJjZUxvYWRlcjo6ZGlkUmVj
ZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2VydmVQZW5kaW5n
UmVxdWVzdHMpOgorICAgICAgICAqIGxvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGU6OnJlbW92ZVJlc291cmNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGU6OmNsZWFyU3RvcmFnZUlEKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGU6OmR1bXApOgorICAgICAgICAqIGxvYWRl
ci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
QXBwbGljYXRpb25DYWNoZUdyb3VwOjpkaWRGaW5pc2hMb2FkaW5nTWFuaWZlc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUdyb3VwOjpzdGFydExvYWRpbmdFbnRyeSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmFkZEVudHJ5KToKKyAgICAg
ICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUhvc3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUhvc3Q6OmZpbGxSZXNvdXJjZUxpc3QpOgorICAgICAg
ICAqIGxvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVJlc291cmNlOjplc3RpbWF0ZWRTaXplSW5TdG9y
YWdlKToKKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmZpbmRPckNy
ZWF0ZUNhY2hlR3JvdXApOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3Jh
Z2U6OmNhY2hlR3JvdXBGb3JVUkwpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNo
ZVN0b3JhZ2U6OmZhbGxiYWNrQ2FjaGVHcm91cEZvclVSTCk6CisgICAgICAgIChXZWJDb3JlOjpB
cHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2U6OmVtcHR5KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9u
Q2FjaGVTdG9yYWdlOjpzdG9yZUNvcHlPZkNhY2hlKToKKyAgICAgICAgKiBsb2FkZXIvYXJjaGl2
ZS9BcmNoaXZlRmFjdG9yeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcmNoaXZlRmFjdG9yeTo6
cmVnaXN0ZXJLbm93bkFyY2hpdmVNSU1FVHlwZXMpOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9D
YWNoZWRSYXdSZXNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSYXdSZXNvdXJj
ZTo6Y2FuUmV1c2UpOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZTo6c3dpdGNoQ2xpZW50c1RvUmV2YWxp
ZGF0ZWRSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZTo6dXBkYXRl
UmVzcG9uc2VBZnRlclJldmFsaWRhdGlvbik6CisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hl
ZFJlc291cmNlQ2xpZW50V2Fsa2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJj
ZUNsaWVudFdhbGtlcjo6Q2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIpOgorICAgICAgICAqIGxv
YWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
YWNoZWRSZXNvdXJjZUxvYWRlcjo6fkNhY2hlZFJlc291cmNlTG9hZGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkNhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0UmVzb3VyY2UpOgorICAgICAgICAo
V2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OnNldEF1dG9Mb2FkSW1hZ2VzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlTG9hZGVyOjpyZW1vdmVDYWNoZWRSZXNvdXJjZSk6
CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZUxvYWRlcjo6Z2FyYmFnZUNvbGxlY3RE
b2N1bWVudFJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZUxvYWRl
cjo6cmVwb3J0TWVtb3J5VXNhZ2UpOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9NZW1vcnlDYWNo
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlDYWNoZTo6cmVtb3ZlUmVzb3VyY2VzV2l0
aE9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlDYWNoZTo6Z2V0T3JpZ2luc1dpdGhD
YWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlDYWNoZTo6Z2V0U3RhdGlzdGljcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZW1vcnlDYWNoZTo6cmVwb3J0TWVtb3J5VXNhZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVtb3J5Q2FjaGU6OnNldERpc2FibGVkKToKKyAgICAgICAgKiBsb2FkZXIv
aWNvbi9JY29uRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SWNvbkRhdGFiYXNlOjpy
ZW1vdmVBbGxJY29ucyk6CisgICAgICAgIChXZWJDb3JlOjpJY29uRGF0YWJhc2U6Omljb25SZWNv
cmRDb3VudFdpdGhEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Okljb25EYXRhYmFzZTo6cGVyZm9y
bVBlbmRpbmdSZXRhaW5BbmRSZWxlYXNlT3BlcmF0aW9ucyk6CisgICAgICAgICogcGFnZS9ET01X
aW5kb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93OjpkaXNwYXRjaEFsbFBlbmRp
bmdCZWZvcmVVbmxvYWRFdmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93OjpkaXNw
YXRjaEFsbFBlbmRpbmdVbmxvYWRFdmVudHMpOgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlVG91Y2hFdmVudCk6
CisgICAgICAgICogcGFnZS9GcmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6aW5q
ZWN0VXNlclNjcmlwdHMpOgorICAgICAgICAqIHBhZ2UvUGFnZUdyb3VwLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlBhZ2VHcm91cDo6cGFnZUdyb3VwKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VH
cm91cDo6Y2xvc2VMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUdyb3VwOjpj
bGVhckxvY2FsU3RvcmFnZUZvckFsbE9yaWdpbnMpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUdy
b3VwOjpjbGVhckxvY2FsU3RvcmFnZUZvck9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpQYWdl
R3JvdXA6OnN5bmNMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUdyb3VwOjph
ZGRVc2VyU2NyaXB0VG9Xb3JsZCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlR3JvdXA6OmFkZFVz
ZXJTdHlsZVNoZWV0VG9Xb3JsZCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlR3JvdXA6OnJlbW92
ZVVzZXJTY3JpcHRGcm9tV29ybGQpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUdyb3VwOjpyZW1v
dmVVc2VyU3R5bGVTaGVldEZyb21Xb3JsZCk6CisgICAgICAgICogcGFnZS9QYWdlU2VyaWFsaXpl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlU2VyaWFsaXplcjo6dXJsRm9yQmxhbmtGcmFt
ZSk6CisgICAgICAgICogcGFnZS9TZWN1cml0eVBvbGljeS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTZWN1cml0eVBvbGljeTo6YWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkpOgorICAgICAg
ICAoV2ViQ29yZTo6U2VjdXJpdHlQb2xpY3k6OnJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVu
dHJ5KToKKyAgICAgICAgKiBwYWdlL1NldHRpbmdzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNl
dEdlbmVyaWNGb250RmFtaWx5TWFwKToKKyAgICAgICAgKFdlYkNvcmU6OmdldEdlbmVyaWNGb250
RmFtaWx5Rm9yU2NyaXB0KToKKyAgICAgICAgKiBwYWdlL1NwZWVjaElucHV0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNwZWVjaElucHV0OjpyZWdpc3Rlckxpc3RlbmVyKToKKyAgICAgICAgKiBw
YWdlL1dpbmRvd0ZlYXR1cmVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldpbmRvd0ZlYXR1cmVz
Ojpib29sRmVhdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpXaW5kb3dGZWF0dXJlczo6ZmxvYXRG
ZWF0dXJlKToKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjp1cGRhdGVB
bmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRl
OjpzdXNwZW5kQW5pbWF0aW9uc0ZvckRvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1h
dGlvbkNvbnRyb2xsZXJQcml2YXRlOjpyZXN1bWVBbmltYXRpb25zRm9yRG9jdW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6Om51bWJlck9mQWN0aXZl
QW5pbWF0aW9ucyk6CisgICAgICAgICogcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9u
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlvbjo6Y2xlYXJSZW5kZXJl
cik6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb246OnVwZGF0ZVRyYW5zaXRp
b25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlS2V5ZnJh
bWVBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlvbjo6YW5p
bWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb246OmdldEFuaW1hdGVk
U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjpzZXRBbmltYXRp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjp0aW1lVG9OZXh0U2Vy
dmljZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb246OmdldEFuaW1hdGlv
bkZvclByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlvbjo6c3Vz
cGVuZEFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjpy
ZXN1bWVBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlvbjo6
b3ZlcnJpZGVJbXBsaWNpdEFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRl
QW5pbWF0aW9uOjpyZXN1bWVPdmVycmlkZGVuSW1wbGljaXRBbmltYXRpb25zKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlvbjo6aXNBbmltYXRpbmdQcm9wZXJ0eSk6CisgICAg
ICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb246Om51bWJlck9mQWN0aXZlQW5pbWF0aW9u
cyk6CisgICAgICAgICogcGxhdGZvcm0vTGFuZ3VhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
bGFuZ3VhZ2VEaWRDaGFuZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnku
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TUlNRVR5cGVSZWdpc3RyeTo6Z2V0Tm9ybWFsaXplZE1J
TUVUeXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9IUlRGRWxldmF0aW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmdldENvbmNhdGVuYXRlZEltcHVsc2VSZXNwb25zZXNGb3JTdWJqZWN0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ibGFja2JlcnJ5L0Nvb2tpZU1hbmFnZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q29va2llTWFuYWdlcjo6Z2VuZXJhdGVIdG1sRnJhZ21lbnRGb3JDb29r
aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZU1hbmFnZXI6OnJlbW92ZUFsbENvb2tpZXMp
OgorICAgICAgICAqIHBsYXRmb3JtL2JsYWNrYmVycnkvQ29va2llTWFwLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNvb2tpZU1hcDo6cmVtb3ZlT2xkZXN0Q29va2llKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvb2tpZU1hcDo6Z2V0QWxsQ2hpbGRDb29raWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9j
Zi9CaW5hcnlQcm9wZXJ0eUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmluYXJ5UHJvcGVy
dHlMaXN0UGxhbjo6d3JpdGVJbnRlZ2VyQXJyYXkpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9t
aXVtL3N1cHBvcnQvV2ViSFRUUExvYWRJbmZvLmNwcDoKKyAgICAgICAgKFdlYktpdDo6YWRkSGVh
ZGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlVSTFJlcXVlc3Qu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxSZXF1ZXN0Ojp2aXNpdEhUVFBIZWFkZXJGaWVs
ZHMpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVVJMUmVzcG9uc2Uu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxSZXNwb25zZTo6YWRkSFRUUEhlYWRlckZpZWxk
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMUmVzcG9uc2U6OnZpc2l0SFRUUEhlYWRlckZpZWxk
cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlSZWZyZXNoTW9uaXRvck1hbmFnZXI6OmVuc3Vy
ZU1vbml0b3JGb3JDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheVJlZnJlc2hNb25p
dG9yTWFuYWdlcjo6dW5yZWdpc3RlckNsaWVudCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0Q2FjaGVk
Rm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldENhY2hl
ZEZvbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6cmVsZWFzZUZvbnREYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2VUcmVlTm9kZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpHbHlwaFBhZ2VUcmVlTm9kZTo6dHJlZUdseXBoUGFnZUNvdW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdseXBoUGFnZVRyZWVOb2RlOjpwYWdlQ291bnQpOgorICAgICAgICAo
V2ViQ29yZTo6R2x5cGhQYWdlVHJlZU5vZGU6OnBydW5lVHJlZUN1c3RvbUZvbnREYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdseXBoUGFnZVRyZWVOb2RlOjpwcnVuZVRyZWVGb250RGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHbHlwaFBhZ2VUcmVlTm9kZTo6cHJ1bmVDdXN0b21Gb250RGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpHbHlwaFBhZ2VUcmVlTm9kZTo6cHJ1bmVGb250RGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHbHlwaFBhZ2VUcmVlTm9kZTo6c2hvd1N1YnRyZWUpOgorICAgICAg
ICAoc2hvd0dseXBoUGFnZVRyZWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9UaWxl
ZEJhY2tpbmdTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZEJhY2tpbmdTdG9yZTo6
dXBkYXRlVGlsZUJ1ZmZlcnMpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRCYWNraW5nU3RvcmU6
OnJlc2l6ZUVkZ2VUaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZEJhY2tpbmdTdG9yZTo6
c2V0S2VlcFJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9j
Zi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25DRi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpBVkZXcmFwcGVyOjphdmZXcmFwcGVyRm9yQ2FsbGJhY2tDb250ZXh0KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyVGlsZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJUaWxlcjo6bGF5ZXJWaXNpYmlsaXR5Q2hhbmdlZCk6CisgICAgICAgIChXZWJD
b3JlOjpMYXllclRpbGVyOjp1cGxvYWRUZXh0dXJlc0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyVGlsZXI6OmFkZFRpbGVKb2IpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxl
cjo6ZGVsZXRlVGV4dHVyZXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlcjo6cHJ1bmVU
ZXh0dXJlcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyOjpiaW5kQ29udGVudHNUZXh0
dXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L1RleHR1cmVDYWNo
ZUNvbXBvc2l0aW5nVGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVDYWNoZUNv
bXBvc2l0aW5nVGhyZWFkOjp0ZXh0dXJlRm9yVGlsZWRDb250ZW50cyk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZDo6dGV4dHVyZUZvckNvbG9yKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjptb3ZlT3JDb3B5QW5pbWF0aW9ucyk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnBhdXNlQW5pbWF0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6bGF5ZXJEaWREaXNwbGF5KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlR2VvbWV0cnkpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NMYXllckNBOjp1cGRhdGVUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NMYXllckNBOjp1cGRhdGVDaGlsZHJlblRyYW5zZm9ybSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZU1hc2tzVG9Cb3VuZHMpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NMYXllckNBOjp1cGRhdGVDb250ZW50c1Zpc2liaWxpdHkpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjp1cGRhdGVDb250ZW50c09wYXF1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUJhY2tmYWNlVmlzaWJpbGl0eSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUZpbHRlcnMpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjplbnN1cmVTdHJ1Y3R1cmFsTGF5ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjp1cGRhdGVMYXllckRyYXdzQ29udGVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUNvbnRlbnRzSW1h
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjp1cGRhdGVDb250ZW50c1Jl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjp1cGRhdGVNYXNrTGF5ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjp1cGRhdGVMYXllckFuaW1hdGlv
bnMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjpzZXRBbmltYXRpb25Pbkxh
eWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6cmVtb3ZlQ0FBbmltYXRp
b25Gcm9tTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjpwYXVzZUNB
QW5pbWF0aW9uT25MYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnN1
c3BlbmRBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6cmVz
dW1lQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OmZpbmRP
ck1ha2VDbG9uZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnNldE9wYWNp
dHlJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZU9w
YWNpdHlPbkxheWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvVGlsZUNh
Y2hlLm1tOgorICAgICAgICAoV2ViQ29yZTo6VGlsZUNhY2hlOjpzZXROZWVkc0Rpc3BsYXkpOgor
ICAgICAgICAoV2ViQ29yZTo6VGlsZUNhY2hlOjpzZXRTY2FsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpUaWxlQ2FjaGU6OnNldEFjY2VsZXJhdGVzRHJhd2luZyk6CisgICAgICAgIChXZWJDb3JlOjpU
aWxlQ2FjaGU6OnNldFRpbGVEZWJ1Z0JvcmRlcldpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlRp
bGVDYWNoZTo6c2V0VGlsZURlYnVnQm9yZGVyQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6VGls
ZUNhY2hlOjpyZXZhbGlkYXRlVGlsZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nh
L3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwOgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyOjph
bmltYXRpb25TdGFydGVkKToKKyAgICAgICAgKHJlc3VibWl0QWxsQW5pbWF0aW9ucyk6CisgICAg
ICAgIChQbGF0Zm9ybUNBTGF5ZXI6OmFuaW1hdGlvbkZvcktleSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENhY2hlQ2hyb21pdW1XaW4uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TG9va3VwQWx0TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpmb250Q29udGFpbnND
aGFyYWN0ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRVdGls
c0Nocm9taXVtV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldERlcml2ZWRGb250RGF0YSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVt
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRp
ZXNUbyk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnNldExheWVyVHJl
ZUhvc3QpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjppbnZhbGlkYXRl
Q29udGVudFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjpzZXRU
ZXh0dXJlUHJpb3JpdGllcyk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06
OnJlc2V0VXBkYXRlU3RhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDRGFtYWdlVHJhY2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0RhbWFnZVRyYWNr
ZXI6OnRyYWNrRGFtYWdlRnJvbUxlZnRvdmVyUmVjdHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDRGlyZWN0UmVuZGVyZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NEaXJlY3RSZW5kZXJlcjo6ZGVjaWRlUmVuZGVyUGFzc0FsbG9jYXRpb25zRm9yRnJhbWUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUaWxpbmdE
YXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUaWxpbmdEYXRhOjpzZXRCb3VuZHMp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6On5DQ0xheWVyVHJlZUhv
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpzdGFydFJhdGVMaW1pdGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6c3RvcFJhdGVMaW1pdGVyKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJ
bXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRSZW5kZXJQYXNzQnlJZCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZXNvdXJjZVByb3ZpZGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNDUmVzb3VyY2VQcm92aWRlcjo6aW5Vc2VCeUNvbnN1bWVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDUmVzb3VyY2VQcm92aWRlcjo6ZGVsZXRlUmVzb3VyY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NSZXNvdXJjZVByb3ZpZGVyOjpkZWxldGVPd25lZFJlc291cmNl
cyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Jlc291cmNlUHJvdmlkZXI6OnJlc291cmNlVHlwZSk6
CisgICAgICAgIChXZWJDb3JlOjpDQ1Jlc291cmNlUHJvdmlkZXI6OnVwbG9hZCk6CisgICAgICAg
IChXZWJDb3JlOjpDQ1Jlc291cmNlUHJvdmlkZXI6OmxvY2tGb3JSZWFkKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDUmVzb3VyY2VQcm92aWRlcjo6dW5sb2NrRm9yUmVhZCk6CisgICAgICAgIChXZWJD
b3JlOjpDQ1Jlc291cmNlUHJvdmlkZXI6OmxvY2tGb3JXcml0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1Jlc291cmNlUHJvdmlkZXI6OnVubG9ja0ZvcldyaXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDUmVzb3VyY2VQcm92aWRlcjo6ZGVzdHJveUNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkND
UmVzb3VyY2VQcm92aWRlcjo6Z2V0Q2hpbGRUb1BhcmVudE1hcCk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1Jlc291cmNlUHJvdmlkZXI6OnByZXBhcmVTZW5kVG9QYXJlbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NSZXNvdXJjZVByb3ZpZGVyOjpwcmVwYXJlU2VuZFRvQ2hpbGQpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NSZXNvdXJjZVByb3ZpZGVyOjpyZWNlaXZlRnJvbUNoaWxkKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDUmVzb3VyY2VQcm92aWRlcjo6cmVjZWl2ZUZyb21QYXJlbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NSZXNvdXJjZVByb3ZpZGVyOjp0cmFuc2ZlclJlc291cmNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDUmVzb3VyY2VQcm92aWRlcjo6dHJpbU1haWxib3hEZXF1ZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUZpbHRlckdsb2JhbENvbnRleHQ6On5DdXN0
b21GaWx0ZXJHbG9iYWxDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUZpbHRlckds
b2JhbENvbnRleHQ6OmdldENvbXBpbGVkUHJvZ3JhbSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJQcm9ncmFtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkN1c3RvbUZpbHRlclByb2dyYW06Om5vdGlmeUNsaWVudHMpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpn
ZXRDYWNoZWRIYXJmYnV6ekZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6cmVsZWFzZUNhY2hlZEhh
cmZidXp6RmFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFy
ZkJ1enpOR0ZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpOR0ZhY2U6OkhhcmZC
dXp6TkdGYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6TkdGYWNlOjp+SGFyZkJ1enpO
R0ZhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YUNv
cmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpnZXRDRlN0cmlu
Z0F0dHJpYnV0ZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250
RGF0YU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpjYW5SZW5kZXJD
b21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpF
eHRlbnNpb25zM0RPcGVuR0xDb21tb246OmdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3Bl
bkdMQ29tbW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjb21w
aWxlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFk
ZXJpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVySW5m
b0xvZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVyU291
cmNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvRUdMRGlzcGxheU9wZW5W
Ry5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFR0xEaXNwbGF5T3BlblZHOjp+RUdMRGlzcGxheU9w
ZW5WRyk6CisgICAgICAgIChXZWJDb3JlOjpFR0xEaXNwbGF5T3BlblZHOjpkZXN0cm95U3VyZmFj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpFR0xEaXNwbGF5T3BlblZHOjpjb250ZXh0Rm9yU3VyZmFj
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFyZWRHTERhdGE6
OmN1cnJlbnRTaGFyZWRHTERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdM
RGF0YTo6U2hhcmVkR0xEYXRhOjp+U2hhcmVkR0xEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OmdldFNoYWRlclByb2dyYW0pOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OmdldFNoYWRlckZv
ckZpbHRlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udFBsYXRmb3Jt
RGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaXhlZFNpemVGb250RGF0YTo6Y3JlYXRlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvRGF0YU9iamVjdEd0ay5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhT2JqZWN0R3RrOjpmb3JDbGlwYm9hcmQpOgorICAgICAgICAqIHBsYXRmb3JtL2d0
ay9HdGtEcmFnQW5kRHJvcEhlbHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHdGtEcmFnQW5k
RHJvcEhlbHBlcjo6aGFuZGxlR2V0RHJhZ0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3RrRHJh
Z0FuZERyb3BIZWxwZXI6OmhhbmRsZURyYWdMZWF2ZSk6CisgICAgICAgIChXZWJDb3JlOjpHdGtE
cmFnQW5kRHJvcEhlbHBlcjo6aGFuZGxlRHJhZ01vdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpH
dGtEcmFnQW5kRHJvcEhlbHBlcjo6aGFuZGxlRHJhZ0RhdGFSZWNlaXZlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpHdGtEcmFnQW5kRHJvcEhlbHBlcjo6aGFuZGxlRHJhZ0Ryb3ApOgorICAgICAgICAq
IHBsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0azMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z3Rr
U3R5bGVDaGFuZ2VkQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6Z2V0U3R5bGVDb250ZXh0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMubW06CisgICAgICAg
ICgrW1dlYlNjcm9sbGJhclByZWZzT2JzZXJ2ZXIgYXBwZWFyYW5jZVByZWZzQ2hhbmdlZDpdKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWxTdG9yYWdlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNyZWRlbnRpYWxTdG9yYWdlOjpzZXQpOgorICAgICAgICAoV2ViQ29yZTo6
Q3JlZGVudGlhbFN0b3JhZ2U6OmdldCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9IVFRQ
SGVhZGVyTWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUVFBIZWFkZXJNYXA6OmNvcHlEYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUVFBIZWFkZXJNYXA6OmdldCk6CisgICAgICAgICogcGxh
dGZvcm0vbmV0d29yay9NSU1FSGVhZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1JTUVIZWFk
ZXI6OnBhcnNlSGVhZGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFu
ZGxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpjcmVhdGUpOgorICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjphZGRIVFRQSGVhZGVyRmllbGQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6YWRkSFRUUEhlYWRlckZpZWxkcyk6
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlUmVxdWVzdEJs
YWNrQmVycnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Ojp0YXJnZXRU
eXBlRnJvbU1pbWVUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdDo6aW5p
dGlhbGl6ZVBsYXRmb3JtUmVxdWVzdCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9S
ZXNvdXJjZUhhbmRsZUNGTmV0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VGaW5hbFJlcXVl
c3QpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0Q0ZOZXQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6c2V0SGVhZGVyRmllbGRzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlc291cmNlSGFuZGxlTWFuYWdlcjo6aW5pdGlhbGl6ZUhhbmRsZSk6CisgICAgICAg
ICogcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VSZXF1ZXN0TWFjLm1tOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Ojpkb1VwZGF0ZVBsYXRmb3JtUmVxdWVzdCk6CisgICAg
ICAgICogcGxhdGZvcm0vbmV0d29yay9xdC9SZXNvdXJjZVJlcXVlc3RRdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q6OnRvTmV0d29ya1JlcXVlc3QpOgorICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6c2VuZFJlcXVlc3RDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZUhhbmRsZTo6c2V0Q2xpZW50Q2VydGlmaWNhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdv
cmsvc291cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlUmVxdWVzdDo6dXBkYXRlU291cE1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0Ojp0b1NvdXBNZXNzYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvUmVzb3VyY2VSZXNwb25zZVNvdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VS
ZXNwb25zZTo6dG9Tb3VwTWVzc2FnZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay93aW4v
UmVzb3VyY2VIYW5kbGVXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6
OnN0YXJ0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9SdW5Mb29wUXQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UnVuTG9vcDo6VGltZXJCYXNlOjp0aW1lckZpcmVkKToKKyAgICAgICAgKiBwbGF0
Zm9ybS90ZXh0L0xvY2FsZVRvU2NyaXB0TWFwcGluZ0RlZmF1bHQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6c2NyaXB0TmFtZVRvQ29kZSk6CisgICAgICAgIChXZWJDb3JlOjpsb2NhbGVUb1Njcmlw
dENvZGVGb3JGb250U2VsZWN0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRFbmNv
ZGluZ1JlZ2lzdHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBydW5lQmxhY2tsaXN0ZWRDb2Rl
Y3MpOgorICAgICAgICAoV2ViQ29yZTo6ZHVtcFRleHRFbmNvZGluZ05hbWVNYXApOgorICAgICAg
ICAqIHBsYXRmb3JtL3RleHQvdHJhbnNjb2Rlci9Gb250VHJhbnNjb2Rlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGb250VHJhbnNjb2Rlcjo6Y29udmVydGVyVHlwZSk6CisgICAgICAgICogcGxh
dGZvcm0vdGV4dC93aW4vVGV4dENvZGVjV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okxhbmd1
YWdlTWFuYWdlcjo6TGFuZ3VhZ2VNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OmdldENvZGVQ
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY1dpbjo6cmVnaXN0ZXJFeHRlbmRlZEVu
Y29kaW5nTmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjV2luOjpyZWdpc3RlckV4
dGVuZGVkQ29kZWNzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY1dpbjo6ZW51bWVyYXRl
U3VwcG9ydGVkRW5jb2RpbmdzKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vQ2xpcGJvYXJkVXRp
bGl0aWVzV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldERhdGFNYXBJdGVtKToKKyAgICAg
ICAgKFdlYkNvcmU6OmdldENsaXBib2FyZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6c2V0Q2xp
cGJvYXJkRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vd2luL0NsaXBib2FyZFdpbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRXaW46OnR5cGVzKToKKyAgICAgICAgKiBwbGF0Zm9y
bS93aW4vRmlsZVN5c3RlbVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjYWNoZWRTdG9yYWdl
RGlyZWN0b3J5KToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vUnVuTG9vcFdpbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSdW5Mb29wOjpUaW1lckJhc2U6OnRpbWVyRmlyZWQpOgorICAgICAgICAq
IHBsYXRmb3JtL3dpbi9XQ0RhdGFPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0NEYXRh
T2JqZWN0OjpjcmVhdGVJbnN0YW5jZSk6CisgICAgICAgICogcGxhdGZvcm0vd2luY2UvTUlNRVR5
cGVSZWdpc3RyeVdpbkNFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1JTUVUeXBlUmVnaXN0cnk6
OmdldFByZWZlcnJlZEV4dGVuc2lvbkZvck1JTUVUeXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS93
eC9Db250ZXh0TWVudVd4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51OjphcHBl
bmRJdGVtKToKKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNlOjpyZWZyZXNoKToKKyAgICAgICAgKFdlYkNvcmU6OlBs
dWdpbkRhdGFiYXNlOjpNSU1FVHlwZUZvckV4dGVuc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5EYXRhYmFzZTo6cmVtb3ZlKToKKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpbk1haW5UaHJl
YWRTY2hlZHVsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luTWFpblRocmVhZFNjaGVk
dWxlcjo6c2NoZWR1bGVDYWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbk1haW5UaHJlYWRT
Y2hlZHVsZXI6OmRpc3BhdGNoQ2FsbHMpOgorICAgICAgICAqIHBsdWdpbnMvUGx1Z2luU3RyZWFt
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblN0cmVhbTo6c3RhcnRTdHJlYW0pOgorICAg
ICAgICAqIHBsdWdpbnMvYmxhY2tiZXJyeS9QbHVnaW5EYXRhQmxhY2tCZXJyeS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhOjppbml0UGx1Z2lucyk6CisgICAgICAgICogcGx1Z2lu
cy93eC9QbHVnaW5EYXRhV3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YTo6aW5p
dFBsdWdpbnMpOgorICAgICAgICAqIHJlbmRlcmluZy9GbG93VGhyZWFkQ29udHJvbGxlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGbG93VGhyZWFkQ29udHJvbGxlcjo6dW5yZWdpc3Rlck5hbWVk
Rmxvd0NvbnRlbnROb2RlKToKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVGbG93Qm94OjpyZXF1aXJlc0lkZW9ncmFwaGljQmFz
ZWxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6YWRkVGV4dEJveFZpc3Vh
bE92ZXJmbG93KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmNsZWFyRmxvYXRzKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldExvZ2lj
YWxXaWR0aEZvclRleHRSdW4pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9i
amVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVF1YWxpdHlDb250cm9sbGVyOjpoaWdo
UXVhbGl0eVJlcGFpbnRUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlUXVhbGl0
eUNvbnRyb2xsZXI6OnNob3VsZFBhaW50QXRMb3dRdWFsaXR5KToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyQ291bnRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJDb3VudGVyOjpk
ZXN0cm95Q291bnRlck5vZGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckNvdW50ZXI6OmRl
c3Ryb3lDb3VudGVyTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjp1cGRhdGVDb3VudGVycyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJDb3VudGVyOjpyZW5kZXJlclN0eWxlQ2hhbmdlZCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyRmxvd1RocmVhZDo6c2V0UmVnaW9uUmFuZ2VGb3JCb3gpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyRmxvd1RocmVhZDo6Z2V0UmVnaW9uUmFuZ2VGb3JCb3gpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
cjo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6cGVyZm9ybU92ZXJsYXBUZXN0cyk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVySW5mby5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllckZpbHRlckluZm86OmZpbHRlckluZm9Gb3JSZW5kZXJMYXllcik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlckluZm86OmNyZWF0ZUZpbHRlckluZm9G
b3JSZW5kZXJMYXllcklmTmVlZGVkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTmFtZWRG
bG93VGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck5hbWVkRmxvd1RocmVhZDo6
ZGVwZW5kc09uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck5hbWVkRmxvd1RocmVhZDo6cHVz
aERlcGVuZGVuY2llcyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZWdpb246OnNldFJlbmRlckJveFJlZ2lvbkluZm8pOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVnaW9uOjpzZXRSZWdpb25PYmplY3RzUmVnaW9uU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVnaW9uOjpyZXN0b3JlUmVnaW9uT2JqZWN0
c09yaWdpbmFsU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVnaW9uOjpjb21wdXRl
Q2hpbGRyZW5TdHlsZUluUmVnaW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVT
ZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6Y2FjaGVk
Q29sbGFwc2VkQm9yZGVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW06
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6c3lzdGVtQ29sb3IpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZp
ZXc6OnNlbGVjdGlvbkJvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpzZXRT
ZWxlY3Rpb24pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyV2lkZ2V0OjpyZXN1bWVXaWRnZXRIaWVyYXJjaHlVcGRhdGVzKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSb290SW5saW5lQm94Ojphc2NlbnRBbmREZXNjZW50Rm9yQm94KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvVmVydGljYWxQb3NpdGlvbkNhY2hlLmg6CisgICAgICAgIChXZWJDb3JlOjpWZXJ0aWNh
bFBvc2l0aW9uQ2FjaGU6OmdldCk6CisgICAgICAgICogcmVuZGVyaW5nL1dyYXBTaGFwZUluZm8u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6V3JhcFNoYXBlSW5mbzo6ZW5zdXJlV3JhcFNoYXBlSW5m
b0ZvclJlbmRlckJsb2NrKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGlu
ZVRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHSW5saW5lVGV4dDo6Y2hhcmFj
dGVyU3RhcnRzTmV3VGV4dENodW5rKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNl
RmlsdGVyOjpwcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKiByZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU1ZHUmVzb3VyY2VHcmFkaWVudDo6YXBwbHlSZXNvdXJjZSk6CisgICAgICAgICogcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuOjphcHBseVJlc291cmNlKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvc3ZnL1NWR1Jlc291cmNlc0NhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Jl
c291cmNlc0NhY2hlOjpyZXNvdXJjZURlc3Ryb3llZCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2
Zy9TVkdSb290SW5saW5lQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnN3YXBJdGVtc0luTGF5
b3V0QXR0cmlidXRlcyk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0
cmlidXRlcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0TGF5b3V0QXR0cmlidXRlczo6
ZHVtcCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1
aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWls
ZGVyOjpidWlsZENoYXJhY3RlckRhdGFNYXApOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dExh
eW91dEF0dHJpYnV0ZXNCdWlsZGVyOjpmaWxsQ2hhcmFjdGVyRGF0YU1hcCk6CisgICAgICAgICog
cmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1RleHRMYXlvdXRFbmdpbmU6OmxheW91dFRleHRPbkxpbmVPclBhdGgpOgorICAgICAgICAq
IHJlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3NCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1RleHRNZXRyaWNzQnVpbGRlcjo6bWVhc3VyZVRleHRSZW5kZXJlcik6CisgICAgICAg
ICogc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFn
ZUFyZWFTeW5jOjpzeW5jVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJl
YVN5bmM6OnBlcmZvcm1JbXBvcnQpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFTeW5j
OjpzeW5jKToKKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VNYXAuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U3RvcmFnZU1hcDo6a2V5KToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VNYXA6OnNl
dEl0ZW0pOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U3RvcmFnZU5hbWVzcGFjZUltcGw6OmxvY2FsU3RvcmFnZU5hbWVzcGFj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNlSW1wbDo6Y29weSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNlSW1wbDo6Y2xvc2UpOgorICAgICAgICAoV2Vi
Q29yZTo6U3RvcmFnZU5hbWVzcGFjZUltcGw6OmNsZWFyQWxsT3JpZ2luc0ZvckRlbGV0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpzeW5jKToKKyAgICAgICAg
KiBzdmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Rv
Y3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlQW5pbWF0aW9uRWxlbWVudEZyb21UYXJnZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZW1vdmVBbGxBbmltYXRpb25F
bGVtZW50c0Zyb21UYXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRG9jdW1lbnRFeHRlbnNp
b25zOjphZGRQZW5kaW5nUmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRG9jdW1lbnRF
eHRlbnNpb25zOjppc0VsZW1lbnRQZW5kaW5nUmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlRWxlbWVudEZyb21QZW5kaW5nUmVzb3VyY2Vz
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0RvY3VtZW50RXh0ZW5zaW9uczo6c2V0T2ZFbGVtZW50
c1JlZmVyZW5jaW5nVGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0RvY3VtZW50RXh0ZW5z
aW9uczo6cmVtb3ZlQWxsVGFyZ2V0UmVmZXJlbmNlc0ZvckVsZW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZW1vdmVBbGxFbGVtZW50UmVmZXJlbmNlc0Zv
clRhcmdldCk6CisgICAgICAgICogc3ZnL1NWR0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHRWxlbWVudDo6flNWR0VsZW1lbnQpOgorICAgICAgICAqIHN2Zy9hbmltYXRpb24vU01J
TFRpbWVDb250YWluZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWVDb250YWluZXI6
OnVwZGF0ZUFuaW1hdGlvbnMpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZUNhY2hl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlQ2FjaGU6On5TVkdJbWFnZUNhY2hlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlQ2FjaGU6OnJlbW92ZUNsaWVudEZyb21DYWNoZSk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZUNhY2hlOjpyZXF1ZXN0ZWRTaXplQW5kU2NhbGVz
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlQ2FjaGU6OmltYWdlQ29udGVudENoYW5nZWQp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2VDYWNoZTo6cmVkcmF3KToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0ltYWdlQ2FjaGU6Omxvb2t1cE9yQ3JlYXRlQml0bWFwSW1hZ2VGb3JSZW5kZXJl
cik6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6ZWZmZWN0UmVmZXJlbmNlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjphZGRCdWlsdGluRWZmZWN0cyk6Cisg
ICAgICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eS5oOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHQW5pbWF0ZWRQcm9wZXJ0eTo6flNWR0FuaW1hdGVkUHJvcGVydHkpOgorICAg
ICAgICAqIHN2Zy9wcm9wZXJ0aWVzL1NWR0F0dHJpYnV0ZVRvUHJvcGVydHlNYXAuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHQXR0cmlidXRlVG9Qcm9wZXJ0eU1hcDo6YWRkUHJvcGVydGllcyk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdBdHRyaWJ1dGVUb1Byb3BlcnR5TWFwOjpzeW5jaHJvbml6
ZVByb3BlcnRpZXMpOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyQ29udGV4dC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0OjpoYXNQZW5kaW5nQWN0aXZpdHkpOgorICAgICAg
ICAqIHdvcmtlcnMvV29ya2VyRXZlbnRRdWV1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3Jr
ZXJFdmVudFF1ZXVlOjpjbG9zZSk6CisgICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpzZXRSZXF1ZXN0SGVhZGVySW50ZXJu
YWwpOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OmdldEFsbFJlc3BvbnNlSGVh
ZGVycyk6CisgICAgICAgICogeG1sL1hQYXRoRnVuY3Rpb25zLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlhQYXRoOjpjcmVhdGVGdW5jdGlvbik6CisgICAgICAgICogeG1sL1hQYXRoUGFyc2VyLmNw
cDoKKyAgICAgICAgKGlzQXhpc05hbWUpOgorICAgICAgICAqIHhtbC9YU0xUUHJvY2Vzc29yTGli
eHNsdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp4c2x0UGFyYW1BcnJheUZyb21QYXJhbWV0ZXJN
YXApOgorICAgICAgICAqIHhtbC9YU0xUUHJvY2Vzc29yUXQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6WFNMVFByb2Nlc3Nvcjo6dHJhbnNmb3JtVG9TdHJpbmcpOgorCiAyMDEyLTA4LTI3ICBSb2Ig
QnVpcyAgPHJidWlzQHJpbS5jb20+CiAKICAgICAgICAgRml4IGNvbXBpbGVyIHdhcm5pbmdzIGlu
IFRleHR1cmVNYXBwZXJMYXllci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2ti
ZXJyeS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQ2hhbmdlTG9nCmluZGV4
IDU2ZDllZDU0OTNkYmNjNmMwNzAzZjAzNjAwZmZlZThlM2UwYmNlZjMuLjU3ZjIxMWQxZGVlMmIx
ODJkYWQ0N2UyYjUzZjg4NzU2YWZiN2ZhZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDI4IEBACisyMDEyLTA4LTI3ICBDYWlvIE1hcmNlbG8gZGUgT2xpdmVpcmEg
RmlsaG8gIDxjYWlvLm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+CisKKyAgICAgICAgUmVuYW1lIGZp
cnN0L3NlY29uZCB0byBrZXkvdmFsdWUgaW4gSGFzaE1hcCBpdGVyYXRvcnMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyNzg0CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBBcGkvQmFja2luZ1N0b3JlLmNw
cDoKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6QmFja2luZ1N0b3JlUHJpdmF0ZTo6c2V0
QmFja2luZ1N0b3JlUmVjdCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkJhY2tpbmdT
dG9yZVByaXZhdGU6OnZpc2libGVUaWxlc1JlY3QpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2Vi
S2l0OjpCYWNraW5nU3RvcmVQcml2YXRlOjpyZXNldFRpbGVzKToKKyAgICAgICAgKEJsYWNrQmVy
cnk6OldlYktpdDo6QmFja2luZ1N0b3JlUHJpdmF0ZTo6dXBkYXRlVGlsZXMpOgorICAgICAgICAo
QmxhY2tCZXJyeTo6V2ViS2l0OjpCYWNraW5nU3RvcmVQcml2YXRlOjp1cGRhdGVUaWxlc0ZvclNj
cm9sbE9yTm90UmVuZGVyZWRSZWdpb24pOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpC
YWNraW5nU3RvcmVQcml2YXRlOjptYXBGcm9tVHJhbnNmb3JtZWRDb250ZW50c1RvVGlsZXMpOgor
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlckltcGwuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6Y2FuY2VsKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6Om9uUGVybWlzc2lvbik6
CisgICAgICAgIChXZWJDb3JlOjpOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpub3RpZmljYXRp
b25DbGlja2VkKToKKyAgICAgICAgKiBXZWJLaXRTdXBwb3J0L0Fib3V0RGF0YS5jcHA6CisgICAg
ICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OmR1bXBKU0NUeXBlQ291bnRTZXRUb1RhYmxlSFRNTCk6
CisgICAgICAgICogV2ViS2l0U3VwcG9ydC9GcmFtZUxheWVycy5jcHA6CisgICAgICAgIChCbGFj
a0JlcnJ5OjpXZWJLaXQ6OkZyYW1lTGF5ZXJzOjpyZW1vdmVMYXllckJ5RnJhbWUpOgorICAgICAg
ICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpGcmFtZUxheWVyczo6Y29tbWl0T25XZWJLaXRUaHJlYWQp
OgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpGcmFtZUxheWVyczo6Y2FsY3VsYXRlUm9v
dExheWVyKToKKwogMjAxMi0wOC0yNyAgTGVvIFlhbmcgIDxsZW95YW5nQHJpbS5jb20+CiAKICAg
ICAgICAgW0JsYWNrQmVycnldIE5vdCB1c2luZyBhYnNvbHV0ZVZpc2libGVPdmVyU2l6ZSB3aGVu
IHJvdGF0aW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDE0N2QxNTdiOWExODIwN2Qw
ZjU4YTBlMTVkZDZkNjBmYjM4ZGNhYjMuLmFmYjdkOTc1MzczNDg4MTE3MDkxZjg3NDRjMDMxZTZi
OWIzMGFjODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIw
MTItMDgtMjcgIENhaW8gTWFyY2VsbyBkZSBPbGl2ZWlyYSBGaWxobyAgPGNhaW8ub2xpdmVpcmFA
b3BlbmJvc3NhLm9yZz4KKworICAgICAgICBSZW5hbWUgZmlyc3Qvc2Vjb25kIHRvIGtleS92YWx1
ZSBpbiBIYXNoTWFwIGl0ZXJhdG9ycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9ODI3ODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIHNyYy9XZWJHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdl
ci5jcHA6CisgICAgICAgIChXZWJHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlcjo6
cmVtb3ZlKToKKyAgICAgICAgKiBzcmMvV2ViSURCTWV0YWRhdGEuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJJREJNZXRhZGF0YTo6V2ViSURCTWV0YWRhdGEpOgorICAgICAgICAqIHNyYy9XZWJJ
bnRlbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnRlbnQ6OmV4dHJhc1ZhbHVlKToKKyAg
ICAgICAgKiB0ZXN0cy9XZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyVGVzdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpURVNUX0YpOgorCiAyMDEyLTA4LTI3ICBBZHJpZW5uZSBXYWxrZXIgIDxl
bm5lQGdvb2dsZS5jb20+CiAKICAgICAgICAgW2Nocm9taXVtXSBQcmV2ZW50IHNjcm9sbGJhciB0
aHVtYiBzaXplIGZyb20gY2hhbmdpbmcgZHVyaW5nIGNvbXBvc2l0b3Igem9vbQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdl
TG9nCmluZGV4IDRhOGJiYjgwZDBiNjNlODEzMjgwZmY0MzkzNGQ1MzVjZjY1NTUxYzAuLmExMTY3
ODM1ODhmYWYwYjkxZTJmMzdkY2QxNjM2MmJlNTRlMjk0NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvZWZsL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxNyBAQAorMjAxMi0wOC0yNyAgQ2FpbyBNYXJjZWxvIGRlIE9saXZlaXJhIEZpbGhv
ICA8Y2Fpby5vbGl2ZWlyYUBvcGVuYm9zc2Eub3JnPgorCisgICAgICAgIFJlbmFtZSBmaXJzdC9z
ZWNvbmQgdG8ga2V5L3ZhbHVlIGluIEhhc2hNYXAgaXRlcmF0b3JzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Mjc4NAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRl
clRyZWVTdXBwb3J0RWZsLmNwcDoKKyAgICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6
ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0
L1BsYXRmb3JtU3RyYXRlZ2llc0VmbC5jcHA6CisgICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNF
Zmw6OmdldFBsdWdpbkluZm8pOgorICAgICAgICAqIGV3ay9ld2tfaW50ZW50LmNwcDoKKyAgICAg
ICAgKGV3a19pbnRlbnRfZXh0cmFfZ2V0KToKKwogMjAxMi0wOC0yNyAgTWlraGFpbCBQb3pkbnlh
a292ICA8bWlraGFpbC5wb3pkbnlha292QGludGVsLmNvbT4KIAogICAgICAgICBSZW5hbWUgUmVn
aXN0ZXJQcm90b2NvbEhhbmRsZXIgQVBJIHRvIE5hdmlnYXRvckNvbnRlbnRVdGlscwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9ndGsvQ2hh
bmdlTG9nCmluZGV4IDA4MTMwYmNhN2M4YjI1YTgyYzU5NmIwYzMzZGU4NGQ1OTMxZWE1NDMuLjlk
MzIwMWI4MjgxYmNmYmZkZDQ4NTc4YThlOWJmMDE2MTAxODk1NzUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxNyBAQAorMjAxMi0wOC0yNyAgQ2FpbyBNYXJjZWxvIGRlIE9saXZlaXJhIEZp
bGhvICA8Y2Fpby5vbGl2ZWlyYUBvcGVuYm9zc2Eub3JnPgorCisgICAgICAgIFJlbmFtZSBmaXJz
dC9zZWNvbmQgdG8ga2V5L3ZhbHVlIGluIEhhc2hNYXAgaXRlcmF0b3JzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Mjc4NAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGxhdGZv
cm1TdHJhdGVnaWVzR3RrLmNwcDoKKyAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc0d0azo6Z2V0
UGx1Z2luSW5mbyk6CisgICAgICAgICogd2Via2l0L3dlYmtpdGZhdmljb25kYXRhYmFzZS5jcHA6
CisgICAgICAgICh3ZWJraXRGYXZpY29uRGF0YWJhc2VJbXBvcnRGaW5pc2hlZCk6CisgICAgICAg
ICogd2Via2l0L3dlYmtpdHdlYnBsdWdpbi5jcHA6CisgICAgICAgICh3ZWJraXRfd2ViX3BsdWdp
bl9nZXRfbWltZXR5cGVzKToKKwogMjAxMi0wOC0yNyAgTWlraGFpbCBQb3pkbnlha292ICA8bWlr
aGFpbC5wb3pkbnlha292QGludGVsLmNvbT4KIAogICAgICAgICBSZW5hbWUgUmVnaXN0ZXJQcm90
b2NvbEhhbmRsZXIgQVBJIHRvIE5hdmlnYXRvckNvbnRlbnRVdGlscwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCmlu
ZGV4IGI0NjAxZDNkYzc2MDA4OTMzMGUzY2FiNjUyNTJlMGJlNTIxOGVkMzkuLjYyODZmNzcyYmVj
OTA3ZWY3NjlkMDI4MTE3NjhkMDU4MTEwZDFjM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
bWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSw0NCBAQAorMjAxMi0wOC0yNyAgQ2FpbyBNYXJjZWxvIGRlIE9saXZlaXJhIEZpbGhvICA8Y2Fp
by5vbGl2ZWlyYUBvcGVuYm9zc2Eub3JnPgorCisgICAgICAgIFJlbmFtZSBmaXJzdC9zZWNvbmQg
dG8ga2V5L3ZhbHVlIGluIEhhc2hNYXAgaXRlcmF0b3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Mjc4NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogSGlzdG9yeS9XZWJIaXN0b3J5Lm1tOgorICAgICAg
ICAoLVtXZWJIaXN0b3J5UHJpdmF0ZSByZW1vdmVJdGVtRnJvbURhdGVDYWNoZXM6XSk6CisgICAg
ICAgICgtW1dlYkhpc3RvcnlQcml2YXRlIG9yZGVyZWRMYXN0VmlzaXRlZERheXNdKToKKyAgICAg
ICAgKFdlYkhpc3RvcnlXcml0ZXI6OldlYkhpc3RvcnlXcml0ZXIpOgorICAgICAgICAqIE1pc2Mv
V2ViQ29yZVN0YXRpc3RpY3MubW06CisgICAgICAgICgrW1dlYkNvcmVTdGF0aXN0aWNzIGphdmFT
Y3JpcHRQcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzXSk6CisgICAgICAgICgrW1dlYkNvcmVTdGF0
aXN0aWNzIGphdmFTY3JpcHRPYmplY3RUeXBlQ291bnRzXSk6CisgICAgICAgICogUGx1Z2lucy9I
b3N0ZWQvTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlci5tbToKKyAgICAgICAgKFdlYktpdDo6TmV0
c2NhcGVQbHVnaW5Ib3N0TWFuYWdlcjo6aG9zdEZvclBsdWdpbik6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXI6OnBsdWdpbkhvc3REaWVkKToKKyAgICAgICAgKFdl
YktpdDo6TmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlcjo6ZGlkQ3JlYXRlV2luZG93KToKKyAgICAg
ICAgKiBQbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkhvc3RQcm94eS5tbToKKyAgICAgICAg
KFdlYktpdDo6TmV0c2NhcGVQbHVnaW5Ib3N0UHJveHk6OnBsdWdpbkhvc3REaWVkKToKKyAgICAg
ICAgKiBQbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW06CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6TG9jYWxPYmplY3RNYXA6
OmlkRm9yT2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVBy
b3h5OjpMb2NhbE9iamVjdE1hcDo6cmV0YWluKToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQ
bHVnaW5JbnN0YW5jZVByb3h5OjpMb2NhbE9iamVjdE1hcDo6cmVsZWFzZSk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6TG9jYWxPYmplY3RNYXA6OmZvcmdl
dCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6ZGVzdHJv
eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6d2ViRnJh
bWVEaWRGaW5pc2hMb2FkV2l0aFJlYXNvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1
Z2luSW5zdGFuY2VQcm94eTo6Y2FuY2VsQ2hlY2tJZkFsbG93ZWRUb0xvYWRVUkwpOgorICAgICAg
ICAqIFBsdWdpbnMvSG9zdGVkL1Byb3h5SW5zdGFuY2UubW06CisgICAgICAgIChXZWJLaXQ6OlBy
b3h5SW5zdGFuY2U6Om1ldGhvZHNOYW1lZCk6CisgICAgICAgIChXZWJLaXQ6OlByb3h5SW5zdGFu
Y2U6OmZpZWxkTmFtZWQpOgorICAgICAgICAqIFBsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5WaWV3
Lm1tOgorICAgICAgICAoLVtXZWJOZXRzY2FwZVBsdWdpblZpZXcgc3RvcFRpbWVyc10pOgorICAg
ICAgICAoLVtXZWJOZXRzY2FwZVBsdWdpblZpZXcgc3RhcnRUaW1lcnNdKToKKyAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9XZWJOb3RpZmljYXRpb25DbGllbnQubW06CisgICAgICAgIChXZWJOb3Rp
ZmljYXRpb25DbGllbnQ6OnNob3cpOgorICAgICAgICAoV2ViTm90aWZpY2F0aW9uQ2xpZW50Ojpj
bGVhck5vdGlmaWNhdGlvbnMpOgorICAgICAgICAoV2ViTm90aWZpY2F0aW9uQ2xpZW50Ojpub3Rp
ZmljYXRpb25PYmplY3REZXN0cm95ZWQpOgorICAgICAgICAqIFdlYlZpZXcvV2ViSFRNTFZpZXcu
bW06CisgICAgICAgIChjb21tYW5kTmFtZUZvclNlbGVjdG9yKToKKwogMjAxMi0wOC0yNyAgTWlr
aGFpbCBQb3pkbnlha292ICA8bWlraGFpbC5wb3pkbnlha292QGludGVsLmNvbT4KIAogICAgICAg
ICBSZW5hbWUgUmVnaXN0ZXJQcm90b2NvbEhhbmRsZXIgQVBJIHRvIE5hdmlnYXRvckNvbnRlbnRV
dGlscwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0L3F0L0NoYW5nZUxvZwppbmRleCA4YzEzMDY2YjEzNzA2YWZiYjgzMmEwMTEyYzI0NGY0MDEx
ODFmYmM2Li44ZWU4NGFhMjc3NmQ4NDg1NmZjMWI0NzE1ZjdlNDk3YWQyMjRhYzg1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L3F0L0No
YW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDEyLTA4LTI3ICBDYWlvIE1hcmNlbG8gZGUgT2xp
dmVpcmEgRmlsaG8gIDxjYWlvLm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+CisKKyAgICAgICAgUmVu
YW1lIGZpcnN0L3NlY29uZCB0byBrZXkvdmFsdWUgaW4gSGFzaE1hcCBpdGVyYXRvcnMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyNzg0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBBcGkvcXdlYnBhZ2Uu
Y3BwOgorICAgICAgICAoZXh0cmFjdENvbnRlbnRUeXBlRnJvbVBsdWdpblZlY3Rvcik6CisgICAg
ICAgICogQXBpL3F3ZWJwbHVnaW5kYXRhYmFzZS5jcHA6CisgICAgICAgIChRV2ViUGx1Z2luSW5m
bzo6bWltZVR5cGVzKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdp
ZXNRdC5jcHA6CisgICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNRdDo6Z2V0UGx1Z2luSW5mbyk6
CisKIDIwMTItMDgtMjIgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29t
PgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMjYyODcuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VM
b2cKaW5kZXggMzE5YTc1Y2ViYTM2Mzk4NGZlMTE0NDVkNzk0OTM4NjM0ZTM5MDE4NS4uNDBkNWUw
NTczYzYyYzE0MzE3NTc4MTFiOTk2MzYwYjk1OTEwMDZmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC93aW4vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDI4IEBACisyMDEyLTA4LTI3ICBDYWlvIE1hcmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8g
IDxjYWlvLm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+CisKKyAgICAgICAgUmVuYW1lIGZpcnN0L3Nl
Y29uZCB0byBrZXkvdmFsdWUgaW4gSGFzaE1hcCBpdGVyYXRvcnMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyNzg0CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBDT01Qcm9wZXJ0eUJhZy5oOgorICAgICAg
ICAoOjpSZWFkKToKKyAgICAgICAgKDo6R2V0UHJvcGVydHlJbmZvKToKKyAgICAgICAgKiBXZWJD
b3JlU3RhdGlzdGljcy5jcHA6CisgICAgICAgIChXZWJDb3JlU3RhdGlzdGljczo6amF2YVNjcmlw
dFByb3RlY3RlZE9iamVjdFR5cGVDb3VudHMpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dl
YlBsYXRmb3JtU3RyYXRlZ2llcy5jcHA6CisgICAgICAgIChXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6
OmdldFBsdWdpbkluZm8pOgorICAgICAgICAqIFdlYkhpc3RvcnkuY3BwOgorICAgICAgICAoV2Vi
SGlzdG9yeTo6cmVtb3ZlSXRlbUZyb21EYXRlQ2FjaGVzKToKKyAgICAgICAgKiBXZWJLaXRDT01B
UEkuY3BwOgorICAgICAgICAoY2xhc3NGYWN0b3J5KToKKyAgICAgICAgKiBXZWJLaXRTdGF0aXN0
aWNzLmNwcDoKKyAgICAgICAgKFdlYktpdFN0YXRpc3RpY3M6OmNvbUNsYXNzTmFtZUNvdW50cyk6
CisgICAgICAgICogV2ViTm90aWZpY2F0aW9uQ2VudGVyLmNwcDoKKyAgICAgICAgKFdlYk5vdGlm
aWNhdGlvbkNlbnRlcjo6cG9zdE5vdGlmaWNhdGlvbkludGVybmFsKToKKyAgICAgICAgKFdlYk5v
dGlmaWNhdGlvbkNlbnRlcjo6YWRkT2JzZXJ2ZXIpOgorICAgICAgICAoV2ViTm90aWZpY2F0aW9u
Q2VudGVyOjpyZW1vdmVPYnNlcnZlcik6CisKIDIwMTItMDgtMjMgIEFkcmllbm5lIFdhbGtlciAg
PGVubmVAZ29vZ2xlLmNvbT4KIAogICAgICAgICBDb252ZXJ0IFNjcm9sbGFibGVBcmVhIEFTU0VS
VF9OT1RfUkVBQ0hFRCB2aXJ0dWFscwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW5jZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L3dpbmNlL0NoYW5nZUxvZwppbmRleCAzMWY1MjE3NDYw
YzkxZDc4NjJhODg5ZTE0NTZlZGM4YWYxZmRhNjEwLi4zMTRjNDBkMTA1ZjhjOTczNDc3Mjc2NDZj
MzUzY2UxNzZlNTE0ZTQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbmNlL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0L3dpbmNlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisy
MDEyLTA4LTI3ICBDYWlvIE1hcmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gIDxjYWlvLm9saXZlaXJh
QG9wZW5ib3NzYS5vcmc+CisKKyAgICAgICAgUmVuYW1lIGZpcnN0L3NlY29uZCB0byBrZXkvdmFs
dWUgaW4gSGFzaE1hcCBpdGVyYXRvcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTgyNzg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5j
cHA6CisgICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6Z2V0UGx1Z2luSW5mbyk6CisK
IDIwMTItMDgtMTMgIFRvbSBTZXBleiAgPHRzZXBlekBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
W2Nocm9taXVtXSByZWxlYXNlIEZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6bV9wbHVnaW5XaWRnZXQg
cmVmcHRyIHVwb24gUGx1Z2luIERvY3VtZW50IGRldGFjaC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCBlZGQ1Njg5
ZWQzYjQ0YzY2ZTExOGUzNTIyZWMxNTNiZGJmNjQyMDY3Li4wMzMxNzgyMzUyOWY2M2Q5MTUzMTAw
NTcxNjZjODA5ZDk1NGU5YjA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTI5IEBACisyMDEyLTA4
LTI3ICBDYWlvIE1hcmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gIDxjYWlvLm9saXZlaXJhQG9wZW5i
b3NzYS5vcmc+CisKKyAgICAgICAgUmVuYW1lIGZpcnN0L3NlY29uZCB0byBrZXkvdmFsdWUgaW4g
SGFzaE1hcCBpdGVyYXRvcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTgyNzg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBQbGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50Q29kZXJzLmg6CisgICAgICAgICog
UGxhdGZvcm0vQ29yZUlQQy9Db25uZWN0aW9uLmNwcDoKKyAgICAgICAgKENvcmVJUEM6OkNvbm5l
Y3Rpb246OlN5bmNNZXNzYWdlU3RhdGU6OmdldE9yQ3JlYXRlKToKKyAgICAgICAgKENvcmVJUEM6
OkNvbm5lY3Rpb246OndhaXRGb3JNZXNzYWdlKToKKyAgICAgICAgKENvcmVJUEM6OkNvbm5lY3Rp
b246OnByb2Nlc3NJbmNvbWluZ01lc3NhZ2UpOgorICAgICAgICAqIFBsYXRmb3JtL2d0ay9Xb3Jr
UXVldWVHdGsuY3BwOgorICAgICAgICAoV29ya1F1ZXVlOjpyZWdpc3RlckV2ZW50U291cmNlSGFu
ZGxlcik6CisgICAgICAgIChXb3JrUXVldWU6OnVucmVnaXN0ZXJFdmVudFNvdXJjZUhhbmRsZXIp
OgorICAgICAgICAqIFBsYXRmb3JtL21hYy9Xb3JrUXVldWVNYWMuY3BwOgorICAgICAgICAoV29y
a1F1ZXVlOjp1bnJlZ2lzdGVyTWFjaFBvcnRFdmVudEhhbmRsZXIpOgorICAgICAgICAqIFNoYXJl
ZC9QbHVnaW5zL05QUmVtb3RlT2JqZWN0TWFwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TlBSZW1v
dGVPYmplY3RNYXA6OnBsdWdpbkRlc3Ryb3llZCk6CisgICAgICAgICogU2hhcmVkL1VzZXJNZXNz
YWdlQ29kZXJzLmg6CisgICAgICAgIChXZWJLaXQ6OlVzZXJNZXNzYWdlRW5jb2Rlcjo6YmFzZUVu
Y29kZSk6CisgICAgICAgICogU2hhcmVkL1dlYlByZWZlcmVuY2VzU3RvcmUuY3BwOgorICAgICAg
ICAoV2ViS2l0Ojp2YWx1ZUZvcktleSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByZWZlcmVuY2Vz
U3RvcmU6OmdldEJvb2xWYWx1ZUZvcktleSk6CisgICAgICAgICogU2hhcmVkL21hYy9XZWJDb3Jl
QXJndW1lbnRDb2RlcnNNYWMubW06CisgICAgICAgIChDb3JlSVBDOjo6OmRlY29kZSk6CisgICAg
ICAgICogU2hhcmVkL3F0L0FyZ3VtZW50Q29kZXJzUXQuY3BwOgorICAgICAgICAoQ29yZUlQQzo6
OjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9zb3VwL1dlYkNvcmVBcmd1bWVudENvZGVyc1Nv
dXAuY3BwOgorICAgICAgICAoQ29yZUlQQzo6OjpkZWNvZGUpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdC5jcHA6CisgICAgICAgIChfRXdrX0JhY2tf
Rm9yd2FyZF9MaXN0Ojp+X0V3a19CYWNrX0ZvcndhcmRfTGlzdCk6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwOgorICAgICAgICAoX0V3a19Db250ZXh0Ojp+X0V3
a19Db250ZXh0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHA6Cisg
ICAgICAgIChfZXdrX3ZpZXdfcHJpdl9sb2FkaW5nX3Jlc291cmNlc19jbGVhcik6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHA6CisgICAgICAgICh3ZWJraXRf
d2ViX3ZpZXdfZ2V0X3N1YnJlc291cmNlcyk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0V2ViVmlld0Jhc2UuY3BwOgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VDb250YWlu
ZXJGb3JhbGwpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dLUHJpbnRpbmdWaWV3Lm1t
OgorICAgICAgICAoLVtXS1ByaW50aW5nVmlldyBfZXhwZWN0ZWRQcmV2aWV3Q2FsbGJhY2tGb3JS
ZWN0Ol0pOgorICAgICAgICAocGFnZURpZERyYXdUb1BERik6CisgICAgICAgICgtW1dLUHJpbnRp
bmdWaWV3IF9kcmF3UHJldmlldzpdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9XS1Zp
ZXcubW06CisgICAgICAgIChjb21tYW5kTmFtZUZvclNlbGVjdG9yKToKKyAgICAgICAgKC1bV0tW
aWV3IHZhbGlkYXRlVXNlckludGVyZmFjZUl0ZW06XSk6CisgICAgICAgICogVUlQcm9jZXNzL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuY3BwOgorICAgICAgICAo
V2ViS2l0OjpDb29yZGluYXRlZEJhY2tpbmdTdG9yZTo6dXBkYXRlVGlsZSk6CisgICAgICAgIChX
ZWJLaXQ6OkNvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjp0ZXh0dXJlKToKKyAgICAgICAgKFdlYktp
dDo6Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OnBhaW50VG9UZXh0dXJlTWFwcGVyKToKKyAgICAg
ICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OmNvbW1pdFRpbGVPcGVyYXRpb25z
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29y
ZGluYXRvclByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQ
cm94eTo6dXBkYXRlVGlsZUZvckxheWVyKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29vcmRpbmF0
ZWRHcmFwaGljcy9MYXllclRyZWVSZW5kZXJlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkxheWVy
VHJlZVJlbmRlcmVyOjphZGp1c3RQb3NpdGlvbkZvckZpeGVkTGF5ZXJzKToKKyAgICAgICAgKFdl
YktpdDo6TGF5ZXJUcmVlUmVuZGVyZXI6OnN5bmNDYW52YXMpOgorICAgICAgICAoV2ViS2l0OjpM
YXllclRyZWVSZW5kZXJlcjo6c2V0TGF5ZXJDaGlsZHJlbik6CisgICAgICAgIChXZWJLaXQ6Okxh
eWVyVHJlZVJlbmRlcmVyOjpzZXRMYXllckZpbHRlcnMpOgorICAgICAgICAoV2ViS2l0OjpMYXll
clRyZWVSZW5kZXJlcjo6c2V0TGF5ZXJTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJl
ZVJlbmRlcmVyOjphc3NpZ25JbWFnZVRvTGF5ZXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9HZW9s
b2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcDoKKyAgICAgICAgKFdlYktp
dDo6R2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eTo6aW52YWxpZGF0ZVJl
cXVlc3RzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL1dlYkluc3BlY3Rv
clNlcnZlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclNlcnZlcjo6fldlYklu
c3BlY3RvclNlcnZlcik6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclNlcnZlcjo6cmVn
aXN0ZXJQYWdlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL1dlYlNvY2tl
dFNlcnZlckNvbm5lY3Rpb24uY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJTb2NrZXRTZXJ2ZXJD
b25uZWN0aW9uOjpzZW5kSFRUUFJlc3BvbnNlSGVhZGVyKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
SW5zcGVjdG9yU2VydmVyL3F0L1dlYkluc3BlY3RvclNlcnZlclF0LmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViSW5zcGVjdG9yU2VydmVyOjpidWlsZFBhZ2VMaXN0KToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvTm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQ
cm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0
TWFuYWdlclByb3h5OjppbnZhbGlkYXRlUmVxdWVzdHMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Q
bHVnaW5zL1BsdWdpblByb2Nlc3NQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBsdWdpblBy
b2Nlc3NQcm94eTo6cGx1Z2luUHJvY2Vzc0NyYXNoZWRPckZhaWxlZFRvTGF1bmNoKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvV2ViQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJLaXQ6OmNyZWF0ZURp
Y3Rpb25hcnlGcm9tSGFzaE1hcCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkljb25EYXRhYmFz
ZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkljb25EYXRhYmFzZTo6ZGlkRmluaXNoVVJMSW1w
b3J0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViSW50ZW50RGF0YS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYkludGVudERhdGE6OmV4dHJhcyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBy
b2Nlc3NQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6Y2hlY2tV
UkxSZWNlaXZlZEZyb21XZWJQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1By
b3h5OjphZGRCYWNrRm9yd2FyZEl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJv
eHk6OmZyYW1lQ291bnRJblBhZ2UpOgorICAgICAgICAqIFdlYlByb2Nlc3MvR2VvbG9jYXRpb24v
R2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0
OjpHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlcjo6Y2FuY2VsUmVxdWVzdEZvckdl
b2xvY2F0aW9uKToKKyAgICAgICAgKFdlYktpdDo6R2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVz
dE1hbmFnZXI6OmRpZFJlY2VpdmVHZW9sb2NhdGlvblBlcm1pc3Npb25EZWNpc2lvbik6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVOb2RlSGFu
ZGxlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlOjpnZXRP
ckNyZWF0ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0
ZWRCdW5kbGVSYW5nZUhhbmRsZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkluamVjdGVkQnVuZGxl
UmFuZ2VIYW5kbGU6OmdldE9yQ3JlYXRlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0luamVjdGVkQnVuZGxlSW50ZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0
ZWRCdW5kbGVJbnRlbnQ6OmV4dHJhcyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9Ob3RpZmljYXRp
b25zL1dlYk5vdGlmaWNhdGlvbk1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJOb3Rp
ZmljYXRpb25NYW5hZ2VyOjpwb2xpY3lGb3JPcmlnaW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJO
b3RpZmljYXRpb25NYW5hZ2VyOjpzaG93KToKKyAgICAgICAgKFdlYktpdDo6V2ViTm90aWZpY2F0
aW9uTWFuYWdlcjo6Y2xlYXJOb3RpZmljYXRpb25zKToKKyAgICAgICAgKFdlYktpdDo6V2ViTm90
aWZpY2F0aW9uTWFuYWdlcjo6cmVtb3ZlTm90aWZpY2F0aW9uRnJvbUNvbnRleHRNYXApOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpOUFJ1bnRpbWVPYmplY3RNYXA6OmludmFsaWRhdGUpOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbi5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luOjpkZXN0cm95U3RyZWFtKToKKyAgICAgICAg
KFdlYktpdDo6TmV0c2NhcGVQbHVnaW46OnVuc2NoZWR1bGVUaW1lcik6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHNjYXBlUGx1Z2luOjpmcmFtZURpZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpOZXRzY2FwZVBsdWdpbjo6ZnJhbWVEaWRGYWlsKToKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1BsdWdpbnMvUGx1Z2luVmlldy5jcHA6CisgICAgICAgIChXZWJLaXQ6OmJ1aWxkSFRUUEhlYWRl
cnMpOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3Ojp+UGx1Z2luVmlldyk6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6bGF5ZXJCeUlEKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkxheWVy
VHJlZUNvb3JkaW5hdG9yOjphZG9wdEltYWdlQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYktp
dDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnJlbGVhc2VJbWFnZUJhY2tpbmdTdG9yZSk6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFByb3h5LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViQmFja0ZvcndhcmRMaXN0UHJveHk6OnJlbW92ZUl0ZW0pOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbToKKyAgICAgICAgKFdl
YktpdDo6Y29tbWFuZE5hbWVGb3JTZWxlY3Rvck5hbWUpOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OnZpc2l0ZWRMaW5r
U3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6YWxsVmlzaXRlZExp
bmtTdGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpmb2N1c2VkV2Vi
UGFnZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OmNyZWF0ZVdlYlBhZ2UpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjp3ZWJQYWdlR3JvdXApOgorICAgICAgICAoV2ViS2l0
Ojpmcm9tQ291bnRlZFNldFRvSGFzaE1hcCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6
OnNldFRleHRDaGVja2VyU3RhdGUpOgorCiAyMDEyLTA4LTI3ICBTaW1vbiBGcmFzZXIgIDxzaW1v
bi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2UgRm9yY2UgUmVwYWludCB3b3JrIHdp
dGggdGlsZWQgYmFja2luZyBzdG9yZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU0NhbGxiYWNrT2JqZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2Fs
bGJhY2tPYmplY3QuaAppbmRleCAyYzNlMGU4NTlmMTZlODk1ODFhMmZhMzU2Yjg0OTJmMjAzNzky
MDdkLi44ODg2ZjExMTUwNGVkZGYyNzJjYzg4NzZmMDRmYzA1YTRjODI4MGM2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaApAQCAtODMsMTMgKzgzLDEz
IEBAIHN0cnVjdCBKU0NhbGxiYWNrT2JqZWN0RGF0YSA6IFdlYWtIYW5kbGVPd25lciB7CiAgICAg
ICAgICAgICBQcml2YXRlUHJvcGVydHlNYXA6OmNvbnN0X2l0ZXJhdG9yIGxvY2F0aW9uID0gbV9w
cm9wZXJ0eU1hcC5maW5kKHByb3BlcnR5TmFtZS5pbXBsKCkpOwogICAgICAgICAgICAgaWYgKGxv
Y2F0aW9uID09IG1fcHJvcGVydHlNYXAuZW5kKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWUoKTsKLSAgICAgICAgICAgIHJldHVybiBsb2NhdGlvbi0+c2Vjb25kLmdldCgpOworICAg
ICAgICAgICAgcmV0dXJuIGxvY2F0aW9uLT52YWx1ZS5nZXQoKTsKICAgICAgICAgfQogICAgICAg
ICAKICAgICAgICAgdm9pZCBzZXRQcml2YXRlUHJvcGVydHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBKU0NlbGwqIG93bmVyLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFs
dWUgdmFsdWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBl
bXB0eTsKLSAgICAgICAgICAgIG1fcHJvcGVydHlNYXAuYWRkKHByb3BlcnR5TmFtZS5pbXBsKCks
IGVtcHR5KS5pdGVyYXRvci0+c2Vjb25kLnNldChnbG9iYWxEYXRhLCBvd25lciwgdmFsdWUpOwor
ICAgICAgICAgICAgbV9wcm9wZXJ0eU1hcC5hZGQocHJvcGVydHlOYW1lLmltcGwoKSwgZW1wdHkp
Lml0ZXJhdG9yLT52YWx1ZS5zZXQoZ2xvYmFsRGF0YSwgb3duZXIsIHZhbHVlKTsKICAgICAgICAg
fQogICAgICAgICAKICAgICAgICAgdm9pZCBkZWxldGVQcml2YXRlUHJvcGVydHkoY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lKQpAQCAtMTAwLDggKzEwMCw4IEBAIHN0cnVjdCBKU0NhbGxi
YWNrT2JqZWN0RGF0YSA6IFdlYWtIYW5kbGVPd25lciB7CiAgICAgICAgIHZvaWQgdmlzaXRDaGls
ZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICAgICAgewogICAgICAgICAgICAgZm9yIChQ
cml2YXRlUHJvcGVydHlNYXA6Oml0ZXJhdG9yIHB0ciA9IG1fcHJvcGVydHlNYXAuYmVnaW4oKTsg
cHRyICE9IG1fcHJvcGVydHlNYXAuZW5kKCk7ICsrcHRyKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KHB0ci0+c2Vjb25kKQotICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgmcHRyLT5z
ZWNvbmQpOworICAgICAgICAgICAgICAgIGlmIChwdHItPnZhbHVlKQorICAgICAgICAgICAgICAg
ICAgICB2aXNpdG9yLmFwcGVuZCgmcHRyLT52YWx1ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2Jq
ZWN0RnVuY3Rpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmpl
Y3RGdW5jdGlvbnMuaAppbmRleCAxNjBmNDg4ODdiODcyYzI5YmMzZTJhZGJlZGM5MWVmYWZjZDRk
OTM5Li4yY2FlMjFjNTJhODhhOGIyMmY1YzNmMzYwMzQ1YmRmMDJlYjc5NWYzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMu
aApAQCAtNDY1LDggKzQ2NSw4IEBAIHZvaWQgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpnZXRP
d25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSoKICAgICAgICAgICAg
IHR5cGVkZWYgT3BhcXVlSlNDbGFzc1N0YXRpY1ZhbHVlc1RhYmxlOjpjb25zdF9pdGVyYXRvciBp
dGVyYXRvcjsKICAgICAgICAgICAgIGl0ZXJhdG9yIGVuZCA9IHN0YXRpY1ZhbHVlcy0+ZW5kKCk7
CiAgICAgICAgICAgICBmb3IgKGl0ZXJhdG9yIGl0ID0gc3RhdGljVmFsdWVzLT5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgICAgICBTdHJpbmdJbXBsKiBuYW1lID0gaXQt
PmZpcnN0LmdldCgpOwotICAgICAgICAgICAgICAgIFN0YXRpY1ZhbHVlRW50cnkqIGVudHJ5ID0g
aXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgICAgICBTdHJpbmdJbXBsKiBuYW1lID0gaXQt
PmtleS5nZXQoKTsKKyAgICAgICAgICAgICAgICBTdGF0aWNWYWx1ZUVudHJ5KiBlbnRyeSA9IGl0
LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgICAgICBpZiAoZW50cnktPmdldFByb3BlcnR5ICYm
ICghKGVudHJ5LT5hdHRyaWJ1dGVzICYga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RW51bSkgfHwg
KG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykpKQogICAgICAgICAgICAgICAgICAg
ICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyKGV4ZWMsIG5hbWUpKTsKICAgICAgICAgICAg
IH0KQEAgLTQ3Niw4ICs0NzYsOCBAQCB2b2lkIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6Z2V0
T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqCiAgICAgICAgICAg
ICB0eXBlZGVmIE9wYXF1ZUpTQ2xhc3NTdGF0aWNGdW5jdGlvbnNUYWJsZTo6Y29uc3RfaXRlcmF0
b3IgaXRlcmF0b3I7CiAgICAgICAgICAgICBpdGVyYXRvciBlbmQgPSBzdGF0aWNGdW5jdGlvbnMt
PmVuZCgpOwogICAgICAgICAgICAgZm9yIChpdGVyYXRvciBpdCA9IHN0YXRpY0Z1bmN0aW9ucy0+
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nSW1wbCog
bmFtZSA9IGl0LT5maXJzdC5nZXQoKTsKLSAgICAgICAgICAgICAgICBTdGF0aWNGdW5jdGlvbkVu
dHJ5KiBlbnRyeSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICAgICAgU3RyaW5nSW1w
bCogbmFtZSA9IGl0LT5rZXkuZ2V0KCk7CisgICAgICAgICAgICAgICAgU3RhdGljRnVuY3Rpb25F
bnRyeSogZW50cnkgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICAgICAgaWYgKCEoZW50
cnktPmF0dHJpYnV0ZXMgJiBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRFbnVtKSB8fCAobW9kZSA9
PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKSkKICAgICAgICAgICAgICAgICAgICAgcHJvcGVy
dHlOYW1lcy5hZGQoSWRlbnRpZmllcihleGVjLCBuYW1lKSk7CiAgICAgICAgICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2xhc3NSZWYuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU0NsYXNzUmVmLmNwcAppbmRleCAxMzQ0MzE2NTQ3ODkxNWY4
YTEzYTRkYmQzODA0NDFlZDI0YmM0ZDJkLi45NjVlZWRkNGYxYjg2ZGFkYjM0ZTY0YmViMDM4N2Fk
YzMwMTIwYzZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2xhc3NS
ZWYuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDbGFzc1JlZi5jcHAKQEAg
LTEwNywxMyArMTA3LDEzIEBAIE9wYXF1ZUpTQ2xhc3M6On5PcGFxdWVKU0NsYXNzKCkKICAgICBp
ZiAobV9zdGF0aWNWYWx1ZXMpIHsKICAgICAgICAgT3BhcXVlSlNDbGFzc1N0YXRpY1ZhbHVlc1Rh
YmxlOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3N0YXRpY1ZhbHVlcy0+ZW5kKCk7CiAgICAgICAg
IGZvciAoT3BhcXVlSlNDbGFzc1N0YXRpY1ZhbHVlc1RhYmxlOjpjb25zdF9pdGVyYXRvciBpdCA9
IG1fc3RhdGljVmFsdWVzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBB
U1NFUlQoIWl0LT5maXJzdC0+aXNJZGVudGlmaWVyKCkpOworICAgICAgICAgICAgQVNTRVJUKCFp
dC0+a2V5LT5pc0lkZW50aWZpZXIoKSk7CiAgICAgfQogCiAgICAgaWYgKG1fc3RhdGljRnVuY3Rp
b25zKSB7CiAgICAgICAgIE9wYXF1ZUpTQ2xhc3NTdGF0aWNGdW5jdGlvbnNUYWJsZTo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gbV9zdGF0aWNGdW5jdGlvbnMtPmVuZCgpOwogICAgICAgICBmb3IgKE9w
YXF1ZUpTQ2xhc3NTdGF0aWNGdW5jdGlvbnNUYWJsZTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3N0
YXRpY0Z1bmN0aW9ucy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgQVNT
RVJUKCFpdC0+Zmlyc3QtPmlzSWRlbnRpZmllcigpKTsKKyAgICAgICAgICAgIEFTU0VSVCghaXQt
PmtleS0+aXNJZGVudGlmaWVyKCkpOwogICAgIH0KICNlbmRpZgogICAgIApAQCAtMTQ3LDggKzE0
Nyw4IEBAIE9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YTo6T3BhcXVlSlNDbGFzc0NvbnRleHREYXRh
KEpTQzo6SlNHbG9iYWxEYXRhJiwgT3BhcXVlSlNDCiAgICAgICAgIHN0YXRpY1ZhbHVlcyA9IGFk
b3B0UHRyKG5ldyBPcGFxdWVKU0NsYXNzU3RhdGljVmFsdWVzVGFibGUpOwogICAgICAgICBPcGFx
dWVKU0NsYXNzU3RhdGljVmFsdWVzVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGpzQ2xhc3Mt
Pm1fc3RhdGljVmFsdWVzLT5lbmQoKTsKICAgICAgICAgZm9yIChPcGFxdWVKU0NsYXNzU3RhdGlj
VmFsdWVzVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0ganNDbGFzcy0+bV9zdGF0aWNWYWx1ZXMt
PmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgQVNTRVJUKCFpdC0+Zmly
c3QtPmlzSWRlbnRpZmllcigpKTsKLSAgICAgICAgICAgIHN0YXRpY1ZhbHVlcy0+YWRkKFN0cmlu
Z0ltcGw6OmNyZWF0ZShpdC0+Zmlyc3QtPmNoYXJhY3RlcnMoKSwgaXQtPmZpcnN0LT5sZW5ndGgo
KSksIGFkb3B0UHRyKG5ldyBTdGF0aWNWYWx1ZUVudHJ5KGl0LT5zZWNvbmQtPmdldFByb3BlcnR5
LCBpdC0+c2Vjb25kLT5zZXRQcm9wZXJ0eSwgaXQtPnNlY29uZC0+YXR0cmlidXRlcykpKTsKKyAg
ICAgICAgICAgIEFTU0VSVCghaXQtPmtleS0+aXNJZGVudGlmaWVyKCkpOworICAgICAgICAgICAg
c3RhdGljVmFsdWVzLT5hZGQoU3RyaW5nSW1wbDo6Y3JlYXRlKGl0LT5rZXktPmNoYXJhY3RlcnMo
KSwgaXQtPmtleS0+bGVuZ3RoKCkpLCBhZG9wdFB0cihuZXcgU3RhdGljVmFsdWVFbnRyeShpdC0+
dmFsdWUtPmdldFByb3BlcnR5LCBpdC0+dmFsdWUtPnNldFByb3BlcnR5LCBpdC0+dmFsdWUtPmF0
dHJpYnV0ZXMpKSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE1NiwxNSArMTU2LDE1IEBAIE9w
YXF1ZUpTQ2xhc3NDb250ZXh0RGF0YTo6T3BhcXVlSlNDbGFzc0NvbnRleHREYXRhKEpTQzo6SlNH
bG9iYWxEYXRhJiwgT3BhcXVlSlNDCiAgICAgICAgIHN0YXRpY0Z1bmN0aW9ucyA9IGFkb3B0UHRy
KG5ldyBPcGFxdWVKU0NsYXNzU3RhdGljRnVuY3Rpb25zVGFibGUpOwogICAgICAgICBPcGFxdWVK
U0NsYXNzU3RhdGljRnVuY3Rpb25zVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGpzQ2xhc3Mt
Pm1fc3RhdGljRnVuY3Rpb25zLT5lbmQoKTsKICAgICAgICAgZm9yIChPcGFxdWVKU0NsYXNzU3Rh
dGljRnVuY3Rpb25zVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0ganNDbGFzcy0+bV9zdGF0aWNG
dW5jdGlvbnMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgQVNTRVJU
KCFpdC0+Zmlyc3QtPmlzSWRlbnRpZmllcigpKTsKLSAgICAgICAgICAgIHN0YXRpY0Z1bmN0aW9u
cy0+YWRkKFN0cmluZ0ltcGw6OmNyZWF0ZShpdC0+Zmlyc3QtPmNoYXJhY3RlcnMoKSwgaXQtPmZp
cnN0LT5sZW5ndGgoKSksIGFkb3B0UHRyKG5ldyBTdGF0aWNGdW5jdGlvbkVudHJ5KGl0LT5zZWNv
bmQtPmNhbGxBc0Z1bmN0aW9uLCBpdC0+c2Vjb25kLT5hdHRyaWJ1dGVzKSkpOworICAgICAgICAg
ICAgQVNTRVJUKCFpdC0+a2V5LT5pc0lkZW50aWZpZXIoKSk7CisgICAgICAgICAgICBzdGF0aWNG
dW5jdGlvbnMtPmFkZChTdHJpbmdJbXBsOjpjcmVhdGUoaXQtPmtleS0+Y2hhcmFjdGVycygpLCBp
dC0+a2V5LT5sZW5ndGgoKSksIGFkb3B0UHRyKG5ldyBTdGF0aWNGdW5jdGlvbkVudHJ5KGl0LT52
YWx1ZS0+Y2FsbEFzRnVuY3Rpb24sIGl0LT52YWx1ZS0+YXR0cmlidXRlcykpKTsKICAgICAgICAg
fQogICAgIH0KIH0KIAogT3BhcXVlSlNDbGFzc0NvbnRleHREYXRhJiBPcGFxdWVKU0NsYXNzOjpj
b250ZXh0RGF0YShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgT3duUHRyPE9wYXF1ZUpTQ2xhc3ND
b250ZXh0RGF0YT4mIGNvbnRleHREYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpLm9wYXF1ZUpTQ2xh
c3NEYXRhLmFkZCh0aGlzLCBudWxscHRyKS5pdGVyYXRvci0+c2Vjb25kOworICAgIE93blB0cjxP
cGFxdWVKU0NsYXNzQ29udGV4dERhdGE+JiBjb250ZXh0RGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEo
KS5vcGFxdWVKU0NsYXNzRGF0YS5hZGQodGhpcywgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwog
ICAgIGlmICghY29udGV4dERhdGEpCiAgICAgICAgIGNvbnRleHREYXRhID0gYWRvcHRQdHIobmV3
IE9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMpKTsKICAg
ICByZXR1cm4gKmNvbnRleHREYXRhOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcAppbmRleCBkNDUyYmQ0NDYyYTZlYWRlNjRkOTVlN2Y3NWVjNjg4NDYxYmJl
NmFkLi41ZmFkOWU3MjVlMzc2OTMwN2Q3OThhYTg3NjZiODZjN2M5OTA5OWVhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcApAQCAtNjU2LDcgKzY1Niw3
IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wKEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgICAgIGRh
dGFMb2coIiAgJTFkID0ge1xuIiwgaSk7CiAgICAgICAgICAgICBTdHJpbmdKdW1wVGFibGU6OlN0
cmluZ09mZnNldFRhYmxlOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3JhcmVEYXRhLT5tX3N0cmlu
Z1N3aXRjaEp1bXBUYWJsZXNbaV0ub2Zmc2V0VGFibGUuZW5kKCk7CiAgICAgICAgICAgICBmb3Ig
KFN0cmluZ0p1bXBUYWJsZTo6U3RyaW5nT2Zmc2V0VGFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIg
PSBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbaV0ub2Zmc2V0VGFibGUuYmVn
aW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCJcdFx0
XCIlc1wiID0+ICUwNGRcbiIsIFVTdHJpbmcoaXRlci0+Zmlyc3QpLnV0ZjgoKS5kYXRhKCksIGl0
ZXItPnNlY29uZC5icmFuY2hPZmZzZXQpOworICAgICAgICAgICAgICAgIGRhdGFMb2coIlx0XHRc
IiVzXCIgPT4gJTA0ZFxuIiwgVVN0cmluZyhpdGVyLT5rZXkpLnV0ZjgoKS5kYXRhKCksIGl0ZXIt
PnZhbHVlLmJyYW5jaE9mZnNldCk7CiAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICB9XG4iKTsK
ICAgICAgICAgICAgICsraTsKICAgICAgICAgfSB3aGlsZSAoaSA8IG1fcmFyZURhdGEtPm1fc3Ry
aW5nU3dpdGNoSnVtcFRhYmxlcy5zaXplKCkpOwpAQCAtMTg5Myw3ICsxODkzLDcgQEAgdm9pZCBF
dmFsQ29kZUNhY2hlOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBFdmFsQ2FjaGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fY2FjaGVNYXAuZW5kKCk7CiAgICAgZm9y
IChFdmFsQ2FjaGVNYXA6Oml0ZXJhdG9yIHB0ciA9IG1fY2FjaGVNYXAuYmVnaW4oKTsgcHRyICE9
IGVuZDsgKytwdHIpCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kKCZwdHItPnNlY29uZCk7CisgICAg
ICAgIHZpc2l0b3IuYXBwZW5kKCZwdHItPnZhbHVlKTsKIH0KIAogdm9pZCBDb2RlQmxvY2s6OnZp
c2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpAQCAtMzAwOCw4ICszMDA4LDggQEAg
VVN0cmluZyBDb2RlQmxvY2s6Om5hbWVGb3JSZWdpc3RlcihpbnQgcmVnaXN0ZXJOdW1iZXIpCiB7
CiAgICAgU3ltYm9sVGFibGU6Oml0ZXJhdG9yIGVuZCA9IG1fc3ltYm9sVGFibGUtPmVuZCgpOwog
ICAgIGZvciAoU3ltYm9sVGFibGU6Oml0ZXJhdG9yIHB0ciA9IG1fc3ltYm9sVGFibGUtPmJlZ2lu
KCk7IHB0ciAhPSBlbmQ7ICsrcHRyKSB7Ci0gICAgICAgIGlmIChwdHItPnNlY29uZC5nZXRJbmRl
eCgpID09IHJlZ2lzdGVyTnVtYmVyKQotICAgICAgICAgICAgcmV0dXJuIFVTdHJpbmcocHRyLT5m
aXJzdCk7CisgICAgICAgIGlmIChwdHItPnZhbHVlLmdldEluZGV4KCkgPT0gcmVnaXN0ZXJOdW1i
ZXIpCisgICAgICAgICAgICByZXR1cm4gVVN0cmluZyhwdHItPmtleSk7CiAgICAgfQogICAgIGlm
IChuZWVkc0FjdGl2YXRpb24oKSAmJiByZWdpc3Rlck51bWJlciA9PSBhY3RpdmF0aW9uUmVnaXN0
ZXIoKSkKICAgICAgICAgcmV0dXJuICJhY3RpdmF0aW9uIjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9KdW1wVGFibGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9KdW1wVGFibGUuaAppbmRleCA1YmJlMDQ3MTA3ZjViMDFjMDI4OWJlYTMzMTg2
ZTFmODRhM2FhZmM3Li42MDM2Y2RhNTFkNWJjZjU2NWVhZTk3ZThkYjI2NTUxYzkwMjU1YzczIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSnVtcFRhYmxlLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0p1bXBUYWJsZS5oCkBAIC01Nyw3ICs1
Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgU3RyaW5nT2Zmc2V0VGFibGU6OmNv
bnN0X2l0ZXJhdG9yIGxvYyA9IG9mZnNldFRhYmxlLmZpbmQodmFsdWUpOwogICAgICAgICAgICAg
aWYgKGxvYyA9PSBlbmQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRPZmZzZXQ7Ci0g
ICAgICAgICAgICByZXR1cm4gbG9jLT5zZWNvbmQuYnJhbmNoT2Zmc2V0OworICAgICAgICAgICAg
cmV0dXJuIGxvYy0+dmFsdWUuYnJhbmNoT2Zmc2V0OwogICAgICAgICB9CiAKICNpZiBFTkFCTEUo
SklUKQpAQCAtNjcsNyArNjcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIFN0cmlu
Z09mZnNldFRhYmxlOjpjb25zdF9pdGVyYXRvciBsb2MgPSBvZmZzZXRUYWJsZS5maW5kKHZhbHVl
KTsKICAgICAgICAgICAgIGlmIChsb2MgPT0gZW5kKQogICAgICAgICAgICAgICAgIHJldHVybiBj
dGlEZWZhdWx0OwotICAgICAgICAgICAgcmV0dXJuIGxvYy0+c2Vjb25kLmN0aU9mZnNldDsKKyAg
ICAgICAgICAgIHJldHVybiBsb2MtPnZhbHVlLmN0aU9mZnNldDsKICAgICAgICAgfQogI2VuZGlm
CiAgICAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MYXp5
T3BlcmFuZFZhbHVlUHJvZmlsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3BwCmluZGV4IDU5ZjBkMDIzNDM0MTdhNzQxYmM4MjU3
MzdkMjYxMTNjZGM3YTMyOTUuLmY5MjNlNGEyOGJiY2IwMDM5YTUzNzNlOTZmODQ1MjNlNzljZWUw
ODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MYXp5T3BlcmFu
ZFZhbHVlUHJvZmlsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xh
enlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcApAQCAtODEsNyArODEsNyBAQCBMYXp5T3BlcmFuZFZh
bHVlUHJvZmlsZSogTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVQYXJzZXI6OmdldElmUHJlc2VudCgK
ICAgICBpZiAoaXRlciA9PSBtX21hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCi0g
ICAgcmV0dXJuIGl0ZXItPnNlY29uZDsKKyAgICByZXR1cm4gaXRlci0+dmFsdWU7CiB9CiAKIFNw
ZWN1bGF0ZWRUeXBlIExhenlPcGVyYW5kVmFsdWVQcm9maWxlUGFyc2VyOjpwcmVkaWN0aW9uKApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NhbXBsaW5nVG9vbC5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2FtcGxpbmdUb29sLmNwcAppbmRl
eCBmMDdkYzc5ZmI3ODI1OGQ4NjFkNGY0ODUxN2YxYjU1YjI5NjM5NTNkLi5mOWI4MjQ1ZTU0Nzdh
OGYzMGVkNTIxYzMxMjZiZjAxOWQ1Y2IyZTY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU2FtcGxpbmdUb29sLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU2FtcGxpbmdUb29sLmNwcApAQCAtNDEwLDcgKzQxMCw3IEBAIHZvaWQgU2Ft
cGxpbmdUb29sOjpkdW1wKEV4ZWNTdGF0ZSogZXhlYykKICAgICBWZWN0b3I8U2NyaXB0U2FtcGxl
UmVjb3JkKj4gY29kZUJsb2NrU2FtcGxlcyhzY29wZUNvdW50KTsKICAgICBTY3JpcHRTYW1wbGVS
ZWNvcmRNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3Njb3BlU2FtcGxlTWFwLT5iZWdpbigpOwogICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgc2NvcGVDb3VudDsgKytpLCArK2l0ZXIpCi0gICAgICAgIGNv
ZGVCbG9ja1NhbXBsZXNbaV0gPSBpdGVyLT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIGNvZGVCbG9j
a1NhbXBsZXNbaV0gPSBpdGVyLT52YWx1ZS5nZXQoKTsKIAogICAgIHFzb3J0KGNvZGVCbG9ja1Nh
bXBsZXMuYmVnaW4oKSwgc2NvcGVDb3VudCwgc2l6ZW9mKFNjcmlwdFNhbXBsZVJlY29yZCopLCBj
b21wYXJlU2NyaXB0U2FtcGxlUmVjb3Jkcyk7CiAKQEAgLTQ0Niw4ICs0NDYsOCBAQCB2b2lkIFNh
bXBsaW5nVG9vbDo6ZHVtcChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgICAgICAgICAgVmVjdG9y
PExpbmVDb3VudEluZm8+IGxpbmVDb3VudEluZm8obGluZXNDb3VudCk7CiAgICAgICAgICAgICAg
ICAgaW50IGxpbmVubyA9IDA7CiAgICAgICAgICAgICAgICAgZm9yIChIYXNoTWFwPHVuc2lnbmVk
LHVuc2lnbmVkPjo6aXRlcmF0b3IgaXRlciA9IGxpbmVDb3VudHMuYmVnaW4oKTsgaXRlciAhPSBs
aW5lQ291bnRzLmVuZCgpOyArK2l0ZXIsICsrbGluZW5vKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGxpbmVDb3VudEluZm9bbGluZW5vXS5saW5lID0gaXRlci0+Zmlyc3Q7Ci0gICAgICAgICAgICAg
ICAgICAgIGxpbmVDb3VudEluZm9bbGluZW5vXS5jb3VudCA9IGl0ZXItPnNlY29uZDsKKyAgICAg
ICAgICAgICAgICAgICAgbGluZUNvdW50SW5mb1tsaW5lbm9dLmxpbmUgPSBpdGVyLT5rZXk7Cisg
ICAgICAgICAgICAgICAgICAgIGxpbmVDb3VudEluZm9bbGluZW5vXS5jb3VudCA9IGl0ZXItPnZh
bHVlOwogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIHFzb3J0KGxpbmVDb3Vu
dEluZm8uYmVnaW4oKSwgbGluZXNDb3VudCwgc2l6ZW9mKExpbmVDb3VudEluZm8pLCBjb21wYXJl
TGluZUNvdW50SW5mb1NhbXBsaW5nKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKaW5kZXggMDVkZjljYWZiYzMz
NDExN2NjMzM3ZGEyNDg3MWQ4Y2UzYmJkYWRjNC4uNjhiZmM4NGVmMjI5Y2MyYTFkZTg1N2YwNjdi
OTdhMTZhM2U4NWRiMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKQEAgLTIzMCw3ICsyMzAsNyBAQCBib29s
IEJ5dGVjb2RlR2VuZXJhdG9yOjphZGRWYXIoY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGJvb2wg
aXNDb25zdGFudCwgUmVnaXN0ZQogICAgIFN5bWJvbFRhYmxlOjpBZGRSZXN1bHQgcmVzdWx0ID0g
c3ltYm9sVGFibGUoKS5hZGQoaWRlbnQuaW1wbCgpLCBuZXdFbnRyeSk7CiAKICAgICBpZiAoIXJl
c3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIHIwID0gJnJlZ2lzdGVyRm9yKHJlc3VsdC5pdGVy
YXRvci0+c2Vjb25kLmdldEluZGV4KCkpOworICAgICAgICByMCA9ICZyZWdpc3RlckZvcihyZXN1
bHQuaXRlcmF0b3ItPnZhbHVlLmdldEluZGV4KCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogCkBAIC0yNDgsOCArMjQ4LDggQEAgaW50IEJ5dGVjb2RlR2VuZXJhdG9yOjphZGRHbG9i
YWxWYXIoCiAgICAgICAgIG5ld0VudHJ5LmF0dGVtcHRUb1dhdGNoKCk7CiAgICAgU3ltYm9sVGFi
bGU6OkFkZFJlc3VsdCByZXN1bHQgPSBzeW1ib2xUYWJsZSgpLmFkZChpZGVudC5pbXBsKCksIG5l
d0VudHJ5KTsKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIHJlc3VsdC5p
dGVyYXRvci0+c2Vjb25kLm5vdGlmeVdyaXRlKCk7Ci0gICAgICAgIGluZGV4ID0gcmVzdWx0Lml0
ZXJhdG9yLT5zZWNvbmQuZ2V0SW5kZXgoKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZS5ub3RpZnlXcml0ZSgpOworICAgICAgICBpbmRleCA9IHJlc3VsdC5pdGVyYXRvci0+dmFsdWUu
Z2V0SW5kZXgoKTsKICAgICB9CiAgICAgcmV0dXJuIGluZGV4OwogfQpAQCAtMTA2Myw3ICsxMDYz
LDcgQEAgdW5zaWduZWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmFkZENvbnN0YW50KGNvbnN0IElkZW50
aWZpZXImIGlkZW50KQogICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKICAgICAgICAgbV9jb2Rl
QmxvY2stPmFkZElkZW50aWZpZXIoSWRlbnRpZmllcihtX2dsb2JhbERhdGEsIHJlcCkpOwogCi0g
ICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgIHJldHVybiByZXN1bHQuaXRl
cmF0b3ItPnZhbHVlOwogfQogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6YWRkQ29u
c3RhbnRWYWx1ZShKU1ZhbHVlIHYpCkBAIC0xMDc2LDcgKzEwNzYsNyBAQCBSZWdpc3RlcklEKiBC
eXRlY29kZUdlbmVyYXRvcjo6YWRkQ29uc3RhbnRWYWx1ZShKU1ZhbHVlIHYpCiAgICAgICAgICsr
bV9uZXh0Q29uc3RhbnRPZmZzZXQ7CiAgICAgICAgIG1fY29kZUJsb2NrLT5hZGRDb25zdGFudChK
U1ZhbHVlKHYpKTsKICAgICB9IGVsc2UKLSAgICAgICAgaW5kZXggPSByZXN1bHQuaXRlcmF0b3It
PnNlY29uZDsKKyAgICAgICAgaW5kZXggPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogCiAgICAg
cmV0dXJuICZtX2NvbnN0YW50UG9vbFJlZ2lzdGVyc1tpbmRleF07CiB9CkBAIC0xMjIzLDcgKzEy
MjMsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdExvYWQoUmVnaXN0ZXJJ
RCogZHN0LCBkb3VibGUgbnVtYmVyKQogICAgIC8vIHdvcmsgY29ycmVjdGx5IHdpdGggTmFOIGFz
IGEga2V5LgogICAgIGlmIChpc25hbihudW1iZXIpIHx8IG51bWJlciA9PSBIYXNoVHJhaXRzPGRv
dWJsZT46OmVtcHR5VmFsdWUoKSB8fCBIYXNoVHJhaXRzPGRvdWJsZT46OmlzRGVsZXRlZFZhbHVl
KG51bWJlcikpCiAgICAgICAgIHJldHVybiBlbWl0TG9hZChkc3QsIGpzTnVtYmVyKG51bWJlcikp
OwotICAgIEpTVmFsdWUmIHZhbHVlSW5NYXAgPSBtX251bWJlck1hcC5hZGQobnVtYmVyLCBKU1Zh
bHVlKCkpLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgSlNWYWx1ZSYgdmFsdWVJbk1hcCA9IG1fbnVt
YmVyTWFwLmFkZChudW1iZXIsIEpTVmFsdWUoKSkuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICgh
dmFsdWVJbk1hcCkKICAgICAgICAgdmFsdWVJbk1hcCA9IGpzTnVtYmVyKG51bWJlcik7CiAgICAg
cmV0dXJuIGVtaXRMb2FkKGRzdCwgdmFsdWVJbk1hcCk7CkBAIC0xMjMxLDcgKzEyMzEsNyBAQCBS
ZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdExvYWQoUmVnaXN0ZXJJRCogZHN0LCBk
b3VibGUgbnVtYmVyKQogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdExvYWQo
UmVnaXN0ZXJJRCogZHN0LCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKQogewotICAgIEpT
U3RyaW5nKiYgc3RyaW5nSW5NYXAgPSBtX3N0cmluZ01hcC5hZGQoaWRlbnRpZmllci5pbXBsKCks
IDApLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgSlNTdHJpbmcqJiBzdHJpbmdJbk1hcCA9IG1fc3Ry
aW5nTWFwLmFkZChpZGVudGlmaWVyLmltcGwoKSwgMCkuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlm
ICghc3RyaW5nSW5NYXApCiAgICAgICAgIHN0cmluZ0luTWFwID0ganNPd25lZFN0cmluZyhnbG9i
YWxEYXRhKCksIGlkZW50aWZpZXIudXN0cmluZygpKTsKICAgICByZXR1cm4gZW1pdExvYWQoZHN0
LCBKU1ZhbHVlKHN0cmluZ0luTWFwKSk7CkBAIC0xNzczLDcgKzE3NzMsNyBAQCB1bnNpZ25lZCBC
eXRlY29kZUdlbmVyYXRvcjo6YWRkQ29uc3RhbnRCdWZmZXIodW5zaWduZWQgbGVuZ3RoKQogCiBK
U1N0cmluZyogQnl0ZWNvZGVHZW5lcmF0b3I6OmFkZFN0cmluZ0NvbnN0YW50KGNvbnN0IElkZW50
aWZpZXImIGlkZW50aWZpZXIpCiB7Ci0gICAgSlNTdHJpbmcqJiBzdHJpbmdJbk1hcCA9IG1fc3Ry
aW5nTWFwLmFkZChpZGVudGlmaWVyLmltcGwoKSwgMCkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBK
U1N0cmluZyomIHN0cmluZ0luTWFwID0gbV9zdHJpbmdNYXAuYWRkKGlkZW50aWZpZXIuaW1wbCgp
LCAwKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCFzdHJpbmdJbk1hcCkgewogICAgICAgICBz
dHJpbmdJbk1hcCA9IGpzU3RyaW5nKGdsb2JhbERhdGEoKSwgaWRlbnRpZmllci51c3RyaW5nKCkp
OwogICAgICAgICBhZGRDb25zdGFudFZhbHVlKHN0cmluZ0luTWFwKTsKQEAgLTE4NDUsOCArMTg0
NSw4IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TGF6eU5ld0Z1bmN0aW9u
KFJlZ2lzdGVySUQqIGRzdCwgRnVuY3Rpb25Cb2R5CiB7CiAgICAgRnVuY3Rpb25PZmZzZXRNYXA6
OkFkZFJlc3VsdCBwdHIgPSBtX2Z1bmN0aW9uT2Zmc2V0cy5hZGQoZnVuY3Rpb24sIDApOwogICAg
IGlmIChwdHIuaXNOZXdFbnRyeSkKLSAgICAgICAgcHRyLml0ZXJhdG9yLT5zZWNvbmQgPSBtX2Nv
ZGVCbG9jay0+YWRkRnVuY3Rpb25EZWNsKG1ha2VGdW5jdGlvbihtX2dsb2JhbERhdGEsIGZ1bmN0
aW9uKSk7Ci0gICAgcmV0dXJuIGVtaXROZXdGdW5jdGlvbkludGVybmFsKGRzdCwgcHRyLml0ZXJh
dG9yLT5zZWNvbmQsIHRydWUpOworICAgICAgICBwdHIuaXRlcmF0b3ItPnZhbHVlID0gbV9jb2Rl
QmxvY2stPmFkZEZ1bmN0aW9uRGVjbChtYWtlRnVuY3Rpb24obV9nbG9iYWxEYXRhLCBmdW5jdGlv
bikpOworICAgIHJldHVybiBlbWl0TmV3RnVuY3Rpb25JbnRlcm5hbChkc3QsIHB0ci5pdGVyYXRv
ci0+dmFsdWUsIHRydWUpOwogfQogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1p
dE5ld0Z1bmN0aW9uSW50ZXJuYWwoUmVnaXN0ZXJJRCogZHN0LCB1bnNpZ25lZCBpbmRleCwgYm9v
bCBkb051bGxDaGVjaykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvTm9kZXNDb2RlZ2VuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvTm9kZXNDb2RlZ2VuLmNwcAppbmRleCA5ZGE1OWEwMDliOGJjMjE4YjE0MmFlODRhY2IxZWE2
ZmJlMDU5NDIyLi4wY2FiMzk2YTRjMDZiYjM3ZDk0YTE5MzAyZTI0NjJmY2M5ZmM1M2FmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4u
Y3BwCkBAIC0yNjEsNyArMjYxLDcgQEAgUmVnaXN0ZXJJRCogUHJvcGVydHlMaXN0Tm9kZTo6ZW1p
dEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGUKICAgICAgICAg
ICAgIEdldHRlclNldHRlclBhaXIgcGFpcihub2RlLCBzdGF0aWNfY2FzdDxQcm9wZXJ0eU5vZGUq
PigwKSk7CiAgICAgICAgICAgICBHZXR0ZXJTZXR0ZXJNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBt
YXAuYWRkKG5vZGUtPm5hbWUoKS5pbXBsKCksIHBhaXIpOwogICAgICAgICAgICAgaWYgKCFyZXN1
bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZC5z
ZWNvbmQgPSBub2RlOworICAgICAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuc2Vj
b25kID0gbm9kZTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIEl0ZXJhdGUgb3ZlciB0aGUgcmVt
YWluaW5nIHByb3BlcnRpZXMgaW4gdGhlIGxpc3QuCkBAIC0yNzksNyArMjc5LDcgQEAgUmVnaXN0
ZXJJRCogUHJvcGVydHlMaXN0Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBn
ZW5lcmF0b3IsIFJlZ2lzdGUKICAgICAgICAgICAgIEFTU0VSVChub2RlLT5tX3R5cGUgPT0gUHJv
cGVydHlOb2RlOjpHZXR0ZXIgfHwgbm9kZS0+bV90eXBlID09IFByb3BlcnR5Tm9kZTo6U2V0dGVy
KTsKICAgICAgICAgICAgIEdldHRlclNldHRlck1hcDo6aXRlcmF0b3IgaXQgPSBtYXAuZmluZChu
b2RlLT5uYW1lKCkuaW1wbCgpKTsKICAgICAgICAgICAgIEFTU0VSVChpdCAhPSBtYXAuZW5kKCkp
OwotICAgICAgICAgICAgR2V0dGVyU2V0dGVyUGFpciYgcGFpciA9IGl0LT5zZWNvbmQ7CisgICAg
ICAgICAgICBHZXR0ZXJTZXR0ZXJQYWlyJiBwYWlyID0gaXQtPnZhbHVlOwogCiAgICAgICAgICAg
ICAvLyBXYXMgdGhpcyBhbHJlYWR5IGdlbmVyYXRlZCBhcyBhIHBhcnQgb2YgaXRzIHBhcnRuZXI/
CiAgICAgICAgICAgICBpZiAocGFpci5zZWNvbmQgPT0gbm9kZSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3BwCmluZGV4IDBhNjZkNmYzNGU2ZjRiYzljYzZkMDQ3
YmY5ODZkZmI0MWI3MGViZDAuLjU0ODNkMmUwZTc0YTc0NmJmNmJkZDVmMjYzMTkxYjE5YzAzYWY5
YTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcApAQCAt
NTksNyArNTksNyBAQCBpbmxpbmUgUmVjb21waWxlcjo6flJlY29tcGlsZXIoKQogICAgIC8vIEph
dmFTY3JpcHQgaW4gdGhlIGluc3BlY3Rvci4KICAgICBTb3VyY2VQcm92aWRlck1hcDo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gbV9zb3VyY2VQcm92aWRlcnMuZW5kKCk7CiAgICAgZm9yIChTb3VyY2VQ
cm92aWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1fc291cmNlUHJvdmlkZXJzLmJlZ2lu
KCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCi0gICAgICAgIG1fZGVidWdnZXItPnNvdXJjZVBhcnNl
ZChpdGVyLT5zZWNvbmQsIGl0ZXItPmZpcnN0LCAtMSwgVVN0cmluZygpKTsKKyAgICAgICAgbV9k
ZWJ1Z2dlci0+c291cmNlUGFyc2VkKGl0ZXItPnZhbHVlLCBpdGVyLT5rZXksIC0xLCBVU3RyaW5n
KCkpOwogfQogCiBpbmxpbmUgdm9pZCBSZWNvbXBpbGVyOjpvcGVyYXRvcigpKEpTQ2VsbCogY2Vs
bCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2lt
cGxpZmljYXRpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3Vt
ZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCmluZGV4IDY0MGEwYTk2NjViMTZlYjU0NWRiNTM1
YjBhNzg0YmNlYzM5MzhlMzEuLmFlZTI1MjcwMjI3OWZlMTg2YmU2MTZjM2MzNjMxYjI4MGQ1NTAy
NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2lt
cGxpZmljYXRpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
cmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcApAQCAtMjE0LDcgKzIxNCw3IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGlmIGl0J3MgYSB2
YXJpYWJsZSB0aGF0IHdlIHRoaW5rIGlzIGFsaWFzZWQgdG8KICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIHRoZSBhcmd1bWVudHMsIHRoYXQgd2Uga25vdyB0aGF0IGl0IG1pZ2h0IGFjdHVhbGx5
IG5vdCBiZS4KICAgICAgICAgICAgICAgICAgICAgICAgIEFyZ3VtZW50c0FsaWFzaW5nRGF0YSYg
ZGF0YSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9hcmd1bWVudHNBbGlhc2luZy5m
aW5kKHZhcmlhYmxlQWNjZXNzRGF0YSktPnNlY29uZDsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+dmFsdWU7
CiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLm1lcmdlTm9uQXJndW1lbnRzQXNzaWdubWVu
dCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXJnZUNhbGxDb250ZXh0KG5vZGUu
Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CkBAIC0yMzIsNyArMjMyLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgQXJndW1l
bnRzQWxpYXNpbmdEYXRhJiBkYXRhID0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1fYXJndW1l
bnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT5zZWNvbmQ7CisgICAgICAgICAg
ICAgICAgICAgICAgICBtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRh
KS0+dmFsdWU7CiAgICAgICAgICAgICAgICAgICAgIGRhdGEubWVyZ2VBcmd1bWVudHNBc3NpZ25t
ZW50KCk7CiAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSB2YXJp
YWJsZSdzIHVzZXMgYXJlIGluIHRoZSBzYW1lIGNvbnRleHQgYXMKICAgICAgICAgICAgICAgICAg
ICAgLy8gdGhlIGFyZ3VtZW50cyBpdCBpcyBhbGlhc2luZy4KQEAgLTI0Nyw3ICsyNDcsNyBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2Fw
dHVyZWQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
ICAgICBBcmd1bWVudHNBbGlhc2luZ0RhdGEmIGRhdGEgPQotICAgICAgICAgICAgICAgICAgICAg
ICAgbV9hcmd1bWVudHNBbGlhc2luZy5maW5kKHZhcmlhYmxlQWNjZXNzRGF0YSktPnNlY29uZDsK
KyAgICAgICAgICAgICAgICAgICAgICAgIG1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJs
ZUFjY2Vzc0RhdGEpLT52YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXJnZUNhbGxD
b250ZXh0KG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CkBAIC0yNTcsNyArMjU3LDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVk
KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAg
QXJndW1lbnRzQWxpYXNpbmdEYXRhJiBkYXRhID0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1f
YXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT5zZWNvbmQ7CisgICAg
ICAgICAgICAgICAgICAgICAgICBtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nl
c3NEYXRhKS0+dmFsdWU7CiAgICAgICAgICAgICAgICAgICAgIGRhdGEubWVyZ2VDYWxsQ29udGV4
dChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgICAgIC8vIElmIGEgdmFyaWFibGUgaXMgdXNlZCBpbiBhIGZsdXNo
IHRoZW4gYnkgZGVmaW5pdGlvbiBpdCBlc2NhcGVzLgpAQCAtMjcwLDcgKzI3MCw3IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJl
ZCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAg
IEFyZ3VtZW50c0FsaWFzaW5nRGF0YSYgZGF0YSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICBt
X2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+c2Vjb25kOworICAg
ICAgICAgICAgICAgICAgICAgICAgbV9hcmd1bWVudHNBbGlhc2luZy5maW5kKHZhcmlhYmxlQWNj
ZXNzRGF0YSktPnZhbHVlOwogICAgICAgICAgICAgICAgICAgICBkYXRhLm1lcmdlTm9uQXJndW1l
bnRzQXNzaWdubWVudCgpOwogICAgICAgICAgICAgICAgICAgICBkYXRhLm1lcmdlQ2FsbENvbnRl
eHQobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwpAQCAtMzU0LDcgKzM1NCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgQXJndW1lbnRzQWxpYXNpbmdEYXRhJiBk
YXRhID0KLSAgICAgICAgICAgICAgICAgICAgbV9hcmd1bWVudHNBbGlhc2luZy5maW5kKHZhcmlh
YmxlQWNjZXNzRGF0YSktPnNlY29uZDsKKyAgICAgICAgICAgICAgICAgICAgbV9hcmd1bWVudHNB
bGlhc2luZy5maW5kKHZhcmlhYmxlQWNjZXNzRGF0YSktPnZhbHVlOwogICAgICAgICAgICAgICAg
IGlmIChkYXRhLmlzVmFsaWQoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICAgICAgCkBAIC0zNzMsNyArMzczLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAg
IGRhdGFMb2coIkNhcHR1cmVkIik7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAg
ICBBcmd1bWVudHNBbGlhc2luZ0RhdGEmIGRhdGEgPQotICAgICAgICAgICAgICAgICAgICBtX2Fy
Z3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+c2Vjb25kOworICAgICAg
ICAgICAgICAgICAgICBtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRh
KS0+dmFsdWU7CiAgICAgICAgICAgICAgICAgYm9vbCBmaXJzdCA9IHRydWU7CiAgICAgICAgICAg
ICAgICAgaWYgKGRhdGEuY2FsbENvbnRleHRJc1ZhbGlkKCkpIHsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFmaXJzdCkKQEAgLTQ1NCw3ICs0NTQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgICAgIC8vIHRoaW5ncy4gTm90ZSBhbHNvIHRoYXQgdGhlIFNldExvY2FsIHNob3VsZCBiZWNv
bWUgZGVhZCBhcyBzb29uIGFzCiAgICAgICAgICAgICAgICAgICAgIC8vIHdlIHJlcGxhY2UgYWxs
IHVzZXMgb2YgdGhpcyB2YXJpYWJsZSB3aXRoIEdldE15QXJndW1lbnRzTGVuZ3RoIGFuZAogICAg
ICAgICAgICAgICAgICAgICAvLyBHZXRNeUFyZ3VtZW50QnlWYWwuCi0gICAgICAgICAgICAgICAg
ICAgIEFTU0VSVChtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+
c2Vjb25kLmlzVmFsaWQoKSk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChtX2FyZ3VtZW50
c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+dmFsdWUuaXNWYWxpZCgpKTsKICAg
ICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPm1lcmdlSXNB
cmd1bWVudHNBbGlhcyh0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgfQpAQCAtNzE0LDcgKzcxNCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAo
dmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIEFyZ3VtZW50c0FsaWFzaW5nRGF0YSYgZGF0YSA9
IG1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT5zZWNvbmQ7Cisg
ICAgICAgICAgICBBcmd1bWVudHNBbGlhc2luZ0RhdGEmIGRhdGEgPSBtX2FyZ3VtZW50c0FsaWFz
aW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+dmFsdWU7CiAgICAgICAgICAgICBkYXRhLmVz
Y2FwZXMgPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTc2MSw3ICs3
NjEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAg
IAotICAgICAgICBBcmd1bWVudHNBbGlhc2luZ0RhdGEmIGRhdGEgPSBtX2FyZ3VtZW50c0FsaWFz
aW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+c2Vjb25kOworICAgICAgICBBcmd1bWVudHNB
bGlhc2luZ0RhdGEmIGRhdGEgPSBtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nl
c3NEYXRhKS0+dmFsdWU7CiAgICAgICAgIGRhdGEubWVyZ2VDYWxsQ29udGV4dChub2RlLmNvZGVP
cmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICB9CiAgICAgCkBAIC03ODQsNyArNzg0LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIEFyZ3VtZW50c0FsaWFzaW5nRGF0YSYgZGF0YSA9Ci0gICAgICAgICAgICAgICAgbV9hcmd1
bWVudHNBbGlhc2luZy5maW5kKHZhcmlhYmxlQWNjZXNzRGF0YSktPnNlY29uZDsKKyAgICAgICAg
ICAgICAgICBtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+dmFs
dWU7CiAgICAgICAgICAgICBpZiAoIWRhdGEuaXNWYWxpZCgpKQogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIApAQCAtODIwLDcgKzgyMCw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgJiYgIW1fY3JlYXRlc0FyZ3VtZW50cy5jb250YWlucyhj
aGlsZC5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CiAgICAgICAgICAgICBib29sIGlzQWxp
YXNlZEFyZ3VtZW50c1JlZ2lzdGVyID0KICAgICAgICAgICAgICAgICAhdmFyaWFibGVBY2Nlc3NE
YXRhLT5pc0NhcHR1cmVkKCkKLSAgICAgICAgICAgICAgICAmJiBtX2FyZ3VtZW50c0FsaWFzaW5n
LmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+c2Vjb25kLmlzVmFsaWQoKQorICAgICAgICAgICAg
ICAgICYmIG1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT52YWx1
ZS5pc1ZhbGlkKCkKICAgICAgICAgICAgICAgICAmJiAhbV9jcmVhdGVzQXJndW1lbnRzLmNvbnRh
aW5zKGNoaWxkLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgIGlmICgh
aXNEZWFkQXJndW1lbnRzUmVnaXN0ZXIgJiYgIWlzQWxpYXNlZEFyZ3VtZW50c1JlZ2lzdGVyKQog
ICAgICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBc3NlbWJseUhlbHBlcnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBc3NlbWJseUhlbHBlcnMuY3BwCmluZGV4IDc3OTllZTUwNTkzNWFkNGUxM2JjM2NlMThkMGI3
MzJhM2FhNDI5NmUuLmI1YjY2ODQxOGE2M2E3Yzk0NGRmNWRjNDdhNjA0YjFlNTM1NzQxZDcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXNzZW1ibHlIZWxwZXJzLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5jcHAK
QEAgLTQ5LDkgKzQ5LDkgQEAgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIEFzc2Vt
Ymx5SGVscGVyczo6ZGVjb2RlZENvZGVNYXBGb3IoQ29kZUJsb2NrKgogICAgIEhhc2hNYXA8Q29k
ZUJsb2NrKiwgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4gPjo6QWRkUmVzdWx0IHJl
c3VsdCA9IG1fZGVjb2RlZENvZGVNYXBzLmFkZChjb2RlQmxvY2ssIFZlY3RvcjxCeXRlY29kZUFu
ZE1hY2hpbmVPZmZzZXQ+KCkpOwogICAgIAogICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKLSAg
ICAgICAgY29kZUJsb2NrLT5qaXRDb2RlTWFwKCktPmRlY29kZShyZXN1bHQuaXRlcmF0b3ItPnNl
Y29uZCk7CisgICAgICAgIGNvZGVCbG9jay0+aml0Q29kZU1hcCgpLT5kZWNvZGUocmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZSk7CiAgICAgCi0gICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25k
OworICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogfQogCiAjaWYgRU5BQkxFKFNB
TVBMSU5HX0ZMQUdTKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
eXRlQ29kZUNhY2hlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlQ2Fj
aGUuaAppbmRleCBmNmE3NDVjNjY1ODcxMzNiMTJjYmQ0NGZmM2E5MjlhOTNjMWJhMTA3Li44ZWQx
NTc4ZjI2ZDNhNGU3NWUyM2E5ZDhlZWZmMDlhYjRhYjYwMDljIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlQ2FjaGUuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlQ2FjaGUuaApAQCAtMTMyLDEwICsxMzIsMTAgQEAgcHVi
bGljOgogICAgICAgICBNYXA6Oml0ZXJhdG9yIGJlZ2luID0gbV9tYXAuYmVnaW4oKTsKICAgICAg
ICAgTWFwOjppdGVyYXRvciBlbmQgPSBtX21hcC5lbmQoKTsKICAgICAgICAgZm9yIChNYXA6Oml0
ZXJhdG9yIGl0ZXIgPSBiZWdpbjsgaXRlciAhPSBlbmQ7ICsraXRlcikgewotICAgICAgICAgICAg
aWYgKCFpdGVyLT5zZWNvbmQuY29kZUJsb2NrKQorICAgICAgICAgICAgaWYgKCFpdGVyLT52YWx1
ZS5jb2RlQmxvY2spCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAo
aXRlci0+c2Vjb25kLm93bmVkKSB7Ci0gICAgICAgICAgICAgICAgZGVsZXRlIGl0ZXItPnNlY29u
ZC5jb2RlQmxvY2s7CisgICAgICAgICAgICBpZiAoaXRlci0+dmFsdWUub3duZWQpIHsKKyAgICAg
ICAgICAgICAgICBkZWxldGUgaXRlci0+dmFsdWUuY29kZUJsb2NrOwogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xNDUsNyArMTQ1LDcgQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgTWFwOjppdGVyYXRvciBpdGVyID0gbV9tYXAuZmluZChr
ZXkpOwogICAgICAgICBpZiAoaXRlciAhPSBtX21hcC5lbmQoKSkKLSAgICAgICAgICAgIHJldHVy
biBpdGVyLT5zZWNvbmQuY29kZUJsb2NrOworICAgICAgICAgICAgcmV0dXJuIGl0ZXItPnZhbHVl
LmNvZGVCbG9jazsKICAgICAgICAgCiAgICAgICAgIEJ5dGVDb2RlQ2FjaGVWYWx1ZSB2YWx1ZTsK
ICAgICAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwCmluZGV4IGRmMTljMzA4MmQ3YzViYTJjNjU4ZDU5MjEyNDBlZjA2ZGMzODgzYTUuLjNl
ZTNiZDJiZTRmOWQxODdmOTczYWU1YmQ5MTZlYmM0ODk2ZDhmODMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCkBAIC02NjAsOSArNjYwLDkg
QEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIEhhc2hNYXA8SlNDZWxsKiwgTm9kZUluZGV4Pjo6
QWRkUmVzdWx0IHJlc3VsdCA9IG1fY2VsbENvbnN0YW50Tm9kZXMuYWRkKGNlbGwsIE5vTm9kZSk7
CiAgICAgICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgIHJlc3VsdC5pdGVy
YXRvci0+c2Vjb25kID0gYWRkVG9HcmFwaChXZWFrSlNDb25zdGFudCwgT3BJbmZvKGNlbGwpKTsK
KyAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBhZGRUb0dyYXBoKFdlYWtKU0Nv
bnN0YW50LCBPcEluZm8oY2VsbCkpOwogICAgICAgICAKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5p
dGVyYXRvci0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsK
ICAgICB9CiAgICAgCiAgICAgQ29kZU9yaWdpbiBjdXJyZW50Q29kZU9yaWdpbigpCkBAIC0zMjA5
LDcgKzMyMDksNyBAQCBCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lU3Rh
Y2tFbnRyeSgKICAgICAgICAgICAgIElkZW50aWZpZXJNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBi
eXRlQ29kZVBhcnNlci0+bV9pZGVudGlmaWVyTWFwLmFkZChyZXAsIGJ5dGVDb2RlUGFyc2VyLT5t
X2NvZGVCbG9jay0+bnVtYmVyT2ZJZGVudGlmaWVycygpKTsKICAgICAgICAgICAgIGlmIChyZXN1
bHQuaXNOZXdFbnRyeSkKICAgICAgICAgICAgICAgICBieXRlQ29kZVBhcnNlci0+bV9jb2RlQmxv
Y2stPmFkZElkZW50aWZpZXIoSWRlbnRpZmllcihieXRlQ29kZVBhcnNlci0+bV9nbG9iYWxEYXRh
LCByZXApKTsKLSAgICAgICAgICAgIG1faWRlbnRpZmllclJlbWFwW2ldID0gcmVzdWx0Lml0ZXJh
dG9yLT5zZWNvbmQ7CisgICAgICAgICAgICBtX2lkZW50aWZpZXJSZW1hcFtpXSA9IHJlc3VsdC5p
dGVyYXRvci0+dmFsdWU7CiAgICAgICAgIH0KICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBjb2RlQmxvY2stPm51bWJlck9mQ29uc3RhbnRSZWdpc3RlcnMoKTsgKytpKSB7CiAgICAgICAg
ICAgICBKU1ZhbHVlIHZhbHVlID0gY29kZUJsb2NrLT5nZXRDb25zdGFudChpICsgRmlyc3RDb25z
dGFudFJlZ2lzdGVySW5kZXgpOwpAQCAtMzIyNyw3ICszMjI3LDcgQEAgQnl0ZUNvZGVQYXJzZXI6
OklubGluZVN0YWNrRW50cnk6OklubGluZVN0YWNrRW50cnkoCiAgICAgICAgICAgICAgICAgYnl0
ZUNvZGVQYXJzZXItPm1fY29kZUJsb2NrLT5hZGRDb25zdGFudCh2YWx1ZSk7CiAgICAgICAgICAg
ICAgICAgYnl0ZUNvZGVQYXJzZXItPm1fY29uc3RhbnRzLmFwcGVuZChDb25zdGFudFJlY29yZCgp
KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fY29uc3RhbnRSZW1hcFtpXSA9IHJlc3Vs
dC5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICAgICAgbV9jb25zdGFudFJlbWFwW2ldID0gcmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgfQogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgY29kZUJsb2NrLT5udW1iZXJPZkdsb2JhbFJlc29sdmVJbmZvcygpOyArK2kpCiAg
ICAgICAgICAgICBieXRlQ29kZVBhcnNlci0+bV9jb2RlQmxvY2stPmFkZEdsb2JhbFJlc29sdmVJ
bmZvKHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQ
aGFzZS5jcHAKaW5kZXggZWU3ZGQwYTM3YTQyNmQ0ZjhkOTk2OGNmOGZmZjk5ZTQ1ZjE5NTljZC4u
OGNhNzY0ZGQxNjg3NzdjNzY2OTc4ZmVhNTYxOGFkM2NkZDkzMjg2YSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQ2hlY2tIb2lzdGlu
Z1BoYXNlLmNwcApAQCAtMTI4LDcgKzEyOCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGRhdGFM
b2coIlplcm9pbmcgdGhlIHN0cnVjdHVyZSB0byBob2lzdCBmb3IgJXMgYmVjYXVzZSB0aGUgcmF0
aW8gaXMgJWxmLlxuIiwKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5uYW1lT2ZWYXJpYWJs
ZUFjY2Vzc0RhdGEodmFyaWFibGUpLCB2YXJpYWJsZS0+dm90ZVJhdGlvKCkpOwogI2VuZGlmCi0g
ICAgICAgICAgICBpdGVyLT5zZWNvbmQubV9zdHJ1Y3R1cmUgPSAwOworICAgICAgICAgICAgaXRl
ci0+dmFsdWUubV9zdHJ1Y3R1cmUgPSAwOwogICAgICAgICB9CiAKICAgICAgICAgLy8gSWRlbnRp
ZnkgdGhlIHNldCBvZiB2YXJpYWJsZXMgdGhhdCBhcmUgbGl2ZSBhY3Jvc3MgYSBzdHJ1Y3R1cmUg
Y2xvYmJlci4KQEAgLTI5NSw5ICsyOTUsOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAg
IEhhc2hNYXA8VmFyaWFibGVBY2Nlc3NEYXRhKiwgQ2hlY2tEYXRhPjo6aXRlcmF0b3IgaXRlciA9
IG1fbWFwLmZpbmQodmFyaWFibGUpOwogICAgICAgICAgICAgICAgICAgICBpZiAoaXRlciA9PSBt
X21hcC5lbmQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICBpZiAoIWl0ZXItPnNlY29uZC5tX3N0cnVjdHVyZSkKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCFpdGVyLT52YWx1ZS5tX3N0cnVjdHVyZSkKICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBpZiAoaXRlci0+c2Vjb25kLm1faXNDbG9iYmVy
ZWQgJiYgIWl0ZXItPnNlY29uZC5tX3N0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRJ
c1N0aWxsVmFsaWQoKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZXItPnZhbHVlLm1faXND
bG9iYmVyZWQgJiYgIWl0ZXItPnZhbHVlLm1fc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2lu
dFNldElzU3RpbGxWYWxpZCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBub2RlLnJlZigpOwpAQCAtMzEx
LDcgKzMxMSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5hcHBlbmQo
Z2V0TG9jYWwpOwogICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuYXBwZW5kKGluZGV4
SW5CbG9jayArIDEsIGdldExvY2FsSW5kZXgpOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICAgICAgTm9kZSBjaGVja1N0cnVjdHVyZShDaGVja1N0cnVjdHVyZSwgY29kZU9y
aWdpbiwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KGl0ZXItPnNlY29uZC5tX3N0cnVj
dHVyZSkpLCBnZXRMb2NhbEluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSBjaGVja1N0
cnVjdHVyZShDaGVja1N0cnVjdHVyZSwgY29kZU9yaWdpbiwgT3BJbmZvKG1fZ3JhcGguYWRkU3Ry
dWN0dXJlU2V0KGl0ZXItPnZhbHVlLm1fc3RydWN0dXJlKSksIGdldExvY2FsSW5kZXgpOwogICAg
ICAgICAgICAgICAgICAgICBjaGVja1N0cnVjdHVyZS5yZWYoKTsKICAgICAgICAgICAgICAgICAg
ICAgTm9kZUluZGV4IGNoZWNrU3RydWN0dXJlSW5kZXggPSBtX2dyYXBoLnNpemUoKTsKICAgICAg
ICAgICAgICAgICAgICAgbV9ncmFwaC5hcHBlbmQoY2hlY2tTdHJ1Y3R1cmUpOwpAQCAtMzMxLDkg
KzMzMSw5IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgSGFzaE1hcDxWYXJpYWJsZUFj
Y2Vzc0RhdGEqLCBDaGVja0RhdGE+OjppdGVyYXRvciBpdGVyID0gbV9tYXAuZmluZCh2YXJpYWJs
ZSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVyID09IG1fbWFwLmVuZCgpKQogICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaXRlci0+
c2Vjb25kLm1fc3RydWN0dXJlKQorICAgICAgICAgICAgICAgICAgICBpZiAoIWl0ZXItPnZhbHVl
Lm1fc3RydWN0dXJlKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChpdGVyLT5zZWNvbmQubV9pc0Nsb2JiZXJlZCAmJiAhaXRlci0+c2Vjb25k
Lm1fc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldElzU3RpbGxWYWxpZCgpKQorICAg
ICAgICAgICAgICAgICAgICBpZiAoaXRlci0+dmFsdWUubV9pc0Nsb2JiZXJlZCAmJiAhaXRlci0+
dmFsdWUubV9zdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SXNTdGlsbFZhbGlkKCkp
CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgICAgICAgICAv
LyBGaXJzdCBpbnNlcnQgYSBkZWFkIFNldExvY2FsIHRvIHRlbGwgT1NSIHRoYXQgdGhlIGNoaWxk
J3MgdmFsdWUgc2hvdWxkCkBAIC0zNTAsNyArMzUwLDcgQEAgcHVibGljOgogICAgICAgICAgICAg
ICAgICAgICBtX2dyYXBoW2NoaWxkMV0ucmVmKCk7CiAgICAgICAgICAgICAgICAgICAgIC8vIFVz
ZSBhIEZvcndhcmRDaGVja1N0cnVjdHVyZSB0byBpbmRpY2F0ZSB0aGF0IHdlIHNob3VsZCBleGl0
IHRvIHRoZQogICAgICAgICAgICAgICAgICAgICAvLyBuZXh0IGJ5dGVjb2RlIGluc3RydWN0aW9u
IHJhdGhlciB0aGFuIHJlZXhlY3V0aW5nIHRoZSBjdXJyZW50IG9uZS4KLSAgICAgICAgICAgICAg
ICAgICAgTm9kZSBjaGVja1N0cnVjdHVyZShGb3J3YXJkQ2hlY2tTdHJ1Y3R1cmUsIGNvZGVPcmln
aW4sIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChpdGVyLT5zZWNvbmQubV9zdHJ1Y3R1
cmUpKSwgY2hpbGQxKTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSBjaGVja1N0cnVjdHVyZShG
b3J3YXJkQ2hlY2tTdHJ1Y3R1cmUsIGNvZGVPcmlnaW4sIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVj
dHVyZVNldChpdGVyLT52YWx1ZS5tX3N0cnVjdHVyZSkpLCBjaGlsZDEpOwogICAgICAgICAgICAg
ICAgICAgICBjaGVja1N0cnVjdHVyZS5yZWYoKTsKICAgICAgICAgICAgICAgICAgICAgTm9kZUlu
ZGV4IGNoZWNrU3RydWN0dXJlSW5kZXggPSBtX2dyYXBoLnNpemUoKTsKICAgICAgICAgICAgICAg
ICAgICAgbV9ncmFwaC5hcHBlbmQoY2hlY2tTdHJ1Y3R1cmUpOwpAQCAtMzY2LDE2ICszNjYsMTYg
QEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBIYXNoTWFwPFZhcmlhYmxlQWNjZXNzRGF0
YSosIENoZWNrRGF0YT46Oml0ZXJhdG9yIGl0ZXIgPSBtX21hcC5maW5kKGNoaWxkLnZhcmlhYmxl
QWNjZXNzRGF0YSgpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZXIgPT0gbV9tYXAuZW5k
KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKCFpdGVyLT5zZWNvbmQubV9zdHJ1Y3R1cmUpCisgICAgICAgICAgICAgICAgICAgIGlmICgh
aXRlci0+dmFsdWUubV9zdHJ1Y3R1cmUpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKCFpdGVyLT5zZWNvbmQubV9pc0Nsb2JiZXJlZCkgewor
ICAgICAgICAgICAgICAgICAgICBpZiAoIWl0ZXItPnZhbHVlLm1faXNDbG9iYmVyZWQpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS5yZWZDb3VudCgpID09IDEpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgaWYgKCFpdGVyLT5zZWNvbmQubV9zdHJ1Y3R1cmUtPnRyYW5zaXRp
b25XYXRjaHBvaW50U2V0SXNTdGlsbFZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAgIGlmICgh
aXRlci0+dmFsdWUubV9zdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SXNTdGlsbFZh
bGlkKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgQVNTRVJUKGl0ZXItPnNlY29uZC5tX3N0cnVjdHVyZSA9PSBub2RlLnN0cnVjdHVyZVNldCgp
LnNpbmdsZXRvblN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGl0ZXIt
PnZhbHVlLm1fc3RydWN0dXJlID09IG5vZGUuc3RydWN0dXJlU2V0KCkuc2luZ2xldG9uU3RydWN0
dXJlKCkpOwogICAgICAgICAgICAgICAgICAgICBub2RlLmNvbnZlcnRUb1N0cnVjdHVyZVRyYW5z
aXRpb25XYXRjaHBvaW50KCk7CiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTM5OCw5ICszOTgsOSBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgbV9tYXAuYWRkKHZhcmlhYmxlLCBDaGVja0RhdGEoc3RydWN0dXJlLCBmYWxz
ZSkpOwogICAgICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpCiAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIGlmIChyZXN1bHQuaXRlcmF0b3ItPnNlY29uZC5tX3N0cnVjdHVyZSA9PSBzdHJ1
Y3R1cmUpCisgICAgICAgIGlmIChyZXN1bHQuaXRlcmF0b3ItPnZhbHVlLm1fc3RydWN0dXJlID09
IHN0cnVjdHVyZSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9y
LT5zZWNvbmQubV9zdHJ1Y3R1cmUgPSAwOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVl
Lm1fc3RydWN0dXJlID0gMDsKICAgICB9CiAgICAgCiAgICAgdm9pZCBub3RpY2VTdHJ1Y3R1cmVD
aGVjayhWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHNl
dCkKQEAgLTQxOCw3ICs0MTgsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9tYXAuZmluZCh2
YXJpYWJsZSk7CiAgICAgICAgIGlmIChpdGVyID09IG1fbWFwLmVuZCgpKQogICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICBpdGVyLT5zZWNvbmQubV9pc0Nsb2JiZXJlZCA9IHRydWU7CisgICAg
ICAgIGl0ZXItPnZhbHVlLm1faXNDbG9iYmVyZWQgPSB0cnVlOwogICAgIH0KICAgICAKICAgICB2
b2lkIGNsb2JiZXIoY29uc3QgT3BlcmFuZHM8VmFyaWFibGVBY2Nlc3NEYXRhKj4mIGxpdmUpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCmluZGV4IDY2OTE3ODgwNGU2M2Y4ZTc1YTczNmVl
NGFlYWUzYjJjOGNkMTY5OWIuLjllMWM0N2NhYjZmOTJmZDgxNWRkNmRlYmVmODg1NjM3MzBhZGNm
ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCkBAIC0zNDUsNyArMzQ1LDcgQEAg
dm9pZCBIZWFwOjptYXJrUHJvdGVjdGVkT2JqZWN0cyhIZWFwUm9vdFZpc2l0b3ImIGhlYXBSb290
VmlzaXRvcikKIHsKICAgICBQcm90ZWN0Q291bnRTZXQ6Oml0ZXJhdG9yIGVuZCA9IG1fcHJvdGVj
dGVkVmFsdWVzLmVuZCgpOwogICAgIGZvciAoUHJvdGVjdENvdW50U2V0OjppdGVyYXRvciBpdCA9
IG1fcHJvdGVjdGVkVmFsdWVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaGVh
cFJvb3RWaXNpdG9yLnZpc2l0KCZpdC0+Zmlyc3QpOworICAgICAgICBoZWFwUm9vdFZpc2l0b3Iu
dmlzaXQoJml0LT5rZXkpOwogfQogCiB2b2lkIEhlYXA6OnB1c2hUZW1wU29ydFZlY3RvcihWZWN0
b3I8VmFsdWVTdHJpbmdQYWlyPiogdGVtcFZlY3RvcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
aAppbmRleCA2ZjEzYWZiNzI1YTk5OTllNzNlY2YwMzg0NzQzNmU1YzNhMzNmMjE0Li5kNzEwMTBi
ZjIzZDdiMGI1ZWZlZmRlODVhNGE0NzBlNGIyZWNjOTViIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcC5oCkBAIC0zNDgsNyArMzQ4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgewogICAgICAg
ICBQcm90ZWN0Q291bnRTZXQ6Oml0ZXJhdG9yIGVuZCA9IG1fcHJvdGVjdGVkVmFsdWVzLmVuZCgp
OwogICAgICAgICBmb3IgKFByb3RlY3RDb3VudFNldDo6aXRlcmF0b3IgaXQgPSBtX3Byb3RlY3Rl
ZFZhbHVlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBmdW5jdG9yKGl0
LT5maXJzdCk7CisgICAgICAgICAgICBmdW5jdG9yKGl0LT5rZXkpOwogICAgICAgICBtX2hhbmRs
ZVNldC5mb3JFYWNoU3Ryb25nSGFuZGxlKGZ1bmN0b3IsIG1fcHJvdGVjdGVkVmFsdWVzKTsKIAog
ICAgICAgICByZXR1cm4gZnVuY3Rvci5yZXR1cm5WYWx1ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSklUU3R1YlJvdXRpbmVTZXQuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSklUU3R1YlJvdXRpbmVTZXQuY3BwCmluZGV4IDA1NGJmMDZkZGNmYWE0
N2VmN2Y2MmE5MTUwMzM5MzRiMzE4YTFmNDYuLjhlMjc5MWZjNzE5MDNhYmQyNjY4YzQ4MjZmYjJl
YzRmMTc0MDI1MGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pJVFN0
dWJSb3V0aW5lU2V0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KSVRTdHVi
Um91dGluZVNldC5jcHAKQEAgLTgyLDcgKzgyLDcgQEAgdm9pZCBKSVRTdHViUm91dGluZVNldDo6
bWFya1Nsb3codWludHB0cl90IGFkZHJlc3MpCiAgICAgaWYgKGl0ZXIgPT0gbV9hZGRyZXNzVG9S
b3V0aW5lTWFwLmVuZCgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgaXRlci0+c2Vjb25k
LT5tX21heUJlRXhlY3V0aW5nID0gdHJ1ZTsKKyAgICBpdGVyLT52YWx1ZS0+bV9tYXlCZUV4ZWN1
dGluZyA9IHRydWU7CiB9CiAKIHZvaWQgSklUU3R1YlJvdXRpbmVTZXQ6OmRlbGV0ZVVubWFya2Vk
SmV0dGlzb25lZFN0dWJSb3V0aW5lcygpCkBAIC05Nyw3ICs5Nyw3IEBAIHZvaWQgSklUU3R1YlJv
dXRpbmVTZXQ6OmRlbGV0ZVVubWFya2VkSmV0dGlzb25lZFN0dWJSb3V0aW5lcygpCiAgICAgICAg
IHVpbnRwdHJfdCBzdGVwID0gSklUU3R1YlJvdXRpbmU6OmFkZHJlc3NTdGVwKCk7CiAgICAgICAg
IGZvciAodWludHB0cl90IGl0ZXIgPSBzdGFydDsgaXRlciA8IGVuZDsgaXRlciArPSBzdGVwKSB7
CiAgICAgICAgICAgICBBU1NFUlQobV9hZGRyZXNzVG9Sb3V0aW5lTWFwLmZpbmQoaXRlcikgIT0g
bV9hZGRyZXNzVG9Sb3V0aW5lTWFwLmVuZCgpKTsKLSAgICAgICAgICAgIEFTU0VSVChtX2FkZHJl
c3NUb1JvdXRpbmVNYXAuZmluZChpdGVyKS0+c2Vjb25kID09IHJvdXRpbmUpOworICAgICAgICAg
ICAgQVNTRVJUKG1fYWRkcmVzc1RvUm91dGluZU1hcC5maW5kKGl0ZXIpLT52YWx1ZSA9PSByb3V0
aW5lKTsKICAgICAgICAgICAgIG1fYWRkcmVzc1RvUm91dGluZU1hcC5yZW1vdmUoaXRlcik7CiAg
ICAgICAgIH0KICAgICAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrU3RhY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmNw
cAppbmRleCBiMzEzNjY0M2I0ZWRiNzhmMWFmMTE1M2M3OTVlYzIzMTAxNGM5NThlLi5lMzU4YmJm
MzdmNGNlZDBkYjIxNGQ0MzVhMTA5YmUxNWVjNzQ0MmI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtTdGFjay5jcHAKQEAgLTUzMyw3ICs1MzMsNyBAQCBBTFdBWVNfSU5MSU5FIHZv
aWQgTWFya1N0YWNrOjppbnRlcm5hbEFwcGVuZChKU1ZhbHVlKiBzbG90KQogICAgICAgICAgICAg
aWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQogICAgICAgICAgICAgICAgIHN0cmluZy0+c2V0SGFz
aENvbnN0U2luZ2xldG9uKCk7CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBK
U1ZhbHVlIGV4aXN0aW5nSlNWYWx1ZSA9IGFkZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAg
ICAgICAgICAgICAgIEpTVmFsdWUgZXhpc3RpbmdKU1ZhbHVlID0gYWRkUmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZTsKICAgICAgICAgICAgICAgICBpZiAodmFsdWUgIT0gZXhpc3RpbmdKU1ZhbHVlKQog
ICAgICAgICAgICAgICAgICAgICBqc0Nhc3Q8SlNTdHJpbmcqPihleGlzdGluZ0pTVmFsdWUuYXND
ZWxsKCkpLT5jbGVhckhhc2hDb25zdFNpbmdsZXRvbigpOwogICAgICAgICAgICAgICAgICpzbG90
ID0gZXhpc3RpbmdKU1ZhbHVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvV2Vhay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vhay5oCmluZGV4IDA3Njk4
ZmQwNmIwNmM3NTAxNGJiNjViZjI1ZmMzMWMyOGE5YTA2ODQuLjNjM2QxZDBjZWZlMTgxMjY1OWM1
ZmE3M2M3NGQxOTk0OGMxOGZmZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1dlYWsuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrLmgKQEAgLTE2
NCw4ICsxNjQsOCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXAsIHR5cGVuYW1lIEtleSwgdHlwZW5h
bWUgVmFsdWU+IGlubGluZSB2b2lkIHdlYWtSZW1vdmUoTWFwJgogICAgIHR5cGVuYW1lIE1hcDo6
aXRlcmF0b3IgaXQgPSBtYXAuZmluZChrZXkpOwogICAgIEFTU0VSVF9VTlVTRUQodmFsdWUsIHZh
bHVlKTsKICAgICBBU1NFUlQoaXQgIT0gbWFwLmVuZCgpKTsKLSAgICBBU1NFUlQoaXQtPnNlY29u
ZC53YXModmFsdWUpKTsKLSAgICBBU1NFUlQoIWl0LT5zZWNvbmQpOworICAgIEFTU0VSVChpdC0+
dmFsdWUud2FzKHZhbHVlKSk7CisgICAgQVNTRVJUKCFpdC0+dmFsdWUpOwogICAgIG1hcC5yZW1v
dmUoaXQpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKaW5kZXggNTJhNzE1OGU2NjA2
YWZkZjc0YWUzMjZkZTgwOTkwMmE0MTkzMzQ0Ni4uODM3YjhkMjFlM2I1MTJmZGZjMzUyZGZhN2Vh
MTMzMmI1MWRkNmRlNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcApAQCAtNzExLDggKzcx
MSw4IEBAIEpJVENvZGUgSklUOjpwcml2YXRlQ29tcGlsZShDb2RlUHRyKiBmdW5jdGlvbkVudHJ5
QXJpdHlDaGVjaywgSklUQ29tcGlsYXRpb25FZmZvCiAKICAgICAgICAgICAgIFN0cmluZ0p1bXBU
YWJsZTo6U3RyaW5nT2Zmc2V0VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHJlY29yZC5qdW1wVGFibGUu
c3RyaW5nSnVtcFRhYmxlLT5vZmZzZXRUYWJsZS5lbmQoKTsgICAgICAgICAgICAKICAgICAgICAg
ICAgIGZvciAoU3RyaW5nSnVtcFRhYmxlOjpTdHJpbmdPZmZzZXRUYWJsZTo6aXRlcmF0b3IgaXQg
PSByZWNvcmQuanVtcFRhYmxlLnN0cmluZ0p1bXBUYWJsZS0+b2Zmc2V0VGFibGUuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gaXQt
PnNlY29uZC5icmFuY2hPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgaXQtPnNlY29uZC5jdGlPZmZz
ZXQgPSBvZmZzZXQgPyBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKG1fbGFiZWxzW2J5dGVjb2RlT2Zm
c2V0ICsgb2Zmc2V0XSkgOiByZWNvcmQuanVtcFRhYmxlLnN0cmluZ0p1bXBUYWJsZS0+Y3RpRGVm
YXVsdDsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBpdC0+dmFsdWUuYnJhbmNo
T2Zmc2V0OworICAgICAgICAgICAgICAgIGl0LT52YWx1ZS5jdGlPZmZzZXQgPSBvZmZzZXQgPyBw
YXRjaEJ1ZmZlci5sb2NhdGlvbk9mKG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0ICsgb2Zmc2V0XSkg
OiByZWNvcmQuanVtcFRhYmxlLnN0cmluZ0p1bXBUYWJsZS0+Y3RpRGVmYXVsdDsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUU3R1YnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5j
cHAKaW5kZXggY2M4OTk1ODdmMDY5ZmIyZjNmZmZiMTE4NzAyOWRhMDk3M2Y2NmJhOS4uOTc1Nzlm
YjQyZWE1ZTBmOTMzYmQ4MDViNTQ2NzRhOWRjYTNiOTNlYiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRTdHVicy5jcHAKQEAgLTM0NTksOCArMzQ1OSw4IEBAIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiBKSVRUaHVua3M6OmN0aVN0dWIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBUaHVua0dl
bmVyYXRvCiB7CiAgICAgQ1RJU3R1Yk1hcDo6QWRkUmVzdWx0IGVudHJ5ID0gbV9jdGlTdHViTWFw
LmFkZChnZW5lcmF0b3IsIE1hY3JvQXNzZW1ibGVyQ29kZVJlZigpKTsKICAgICBpZiAoZW50cnku
aXNOZXdFbnRyeSkKLSAgICAgICAgZW50cnkuaXRlcmF0b3ItPnNlY29uZCA9IGdlbmVyYXRvcihn
bG9iYWxEYXRhKTsKLSAgICByZXR1cm4gZW50cnkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAg
ZW50cnkuaXRlcmF0b3ItPnZhbHVlID0gZ2VuZXJhdG9yKGdsb2JhbERhdGEpOworICAgIHJldHVy
biBlbnRyeS5pdGVyYXRvci0+dmFsdWU7CiB9CiAKIE5hdGl2ZUV4ZWN1dGFibGUqIEpJVFRodW5r
czo6aG9zdEZ1bmN0aW9uU3R1YihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIE5hdGl2ZUZ1bmN0
aW9uIGZ1bmN0aW9uLCBOYXRpdmVGdW5jdGlvbiBjb25zdHJ1Y3RvcikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAppbmRleCA0ZmQ2NzFmYjczNWYxZGQyMTUxMTEyOTMzMDMy
MTg0ZjM4YmM3NDA1Li4yOTM2ODFmZjQ5Nzk1MWYwMzc2ZTdiMTVlNWYyNjVhNjcyMGJjOGIxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCkBAIC0xMzY0LDEwICsxMzY0
LDEwIEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3Npb24gUGFyc2Vy
PExleGVyVHlwZT46OnBhcnNlU3RyaWN0T2JqZWN0CiAgICAgICAgIGlmICghbV9zeW50YXhBbHJl
YWR5VmFsaWRhdGVkKSB7CiAgICAgICAgICAgICBPYmplY3RWYWxpZGF0aW9uTWFwOjpBZGRSZXN1
bHQgcHJvcGVydHlFbnRyeSA9IG9iamVjdFZhbGlkYXRvci5hZGQoY29udGV4dC5nZXROYW1lKHBy
b3BlcnR5KS5pbXBsKCksIGNvbnRleHQuZ2V0VHlwZShwcm9wZXJ0eSkpOwogICAgICAgICAgICAg
aWYgKCFwcm9wZXJ0eUVudHJ5LmlzTmV3RW50cnkpIHsKLSAgICAgICAgICAgICAgICBmYWlsSWZU
cnVlKHByb3BlcnR5RW50cnkuaXRlcmF0b3ItPnNlY29uZCA9PSBQcm9wZXJ0eU5vZGU6OkNvbnN0
YW50KTsKKyAgICAgICAgICAgICAgICBmYWlsSWZUcnVlKHByb3BlcnR5RW50cnkuaXRlcmF0b3It
PnZhbHVlID09IFByb3BlcnR5Tm9kZTo6Q29uc3RhbnQpOwogICAgICAgICAgICAgICAgIGZhaWxJ
ZlRydWUoY29udGV4dC5nZXRUeXBlKHByb3BlcnR5KSA9PSBQcm9wZXJ0eU5vZGU6OkNvbnN0YW50
KTsKLSAgICAgICAgICAgICAgICBmYWlsSWZUcnVlKGNvbnRleHQuZ2V0VHlwZShwcm9wZXJ0eSkg
JiBwcm9wZXJ0eUVudHJ5Lml0ZXJhdG9yLT5zZWNvbmQpOwotICAgICAgICAgICAgICAgIHByb3Bl
cnR5RW50cnkuaXRlcmF0b3ItPnNlY29uZCB8PSBjb250ZXh0LmdldFR5cGUocHJvcGVydHkpOwor
ICAgICAgICAgICAgICAgIGZhaWxJZlRydWUoY29udGV4dC5nZXRUeXBlKHByb3BlcnR5KSAmIHBy
b3BlcnR5RW50cnkuaXRlcmF0b3ItPnZhbHVlKTsKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eUVu
dHJ5Lml0ZXJhdG9yLT52YWx1ZSB8PSBjb250ZXh0LmdldFR5cGUocHJvcGVydHkpOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHRhaWwgPSBjb250ZXh0LmNyZWF0ZVByb3BlcnR5
TGlzdChwcm9wZXJ0eUxvY2F0aW9uLCBwcm9wZXJ0eSwgdGFpbCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcHJvZmlsZXIvUHJvZmlsZS5jcHAKaW5kZXggOTJlMzJjNGJhNjY0YTQxZjQxYTg4ZTky
OWNhM2YwY2U4YmY3MDc2Zi4uNDRkZDUyZDI0MjM4OGYyZjM2NzBiOGRhZTZmNWY2MzM1MjI0OGIy
NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGUuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlLmNwcApAQCAtMTEx
LDcgKzExMSw3IEBAIHR5cGVkZWYgV1RGOjpLZXlWYWx1ZVBhaXI8RnVuY3Rpb25DYWxsSGFzaENv
dW50OjpWYWx1ZVR5cGUsIHVuc2lnbmVkPiBOYW1lQ291bnRQCiAKIHN0YXRpYyBpbmxpbmUgYm9v
bCBmdW5jdGlvbk5hbWVDb3VudFBhaXJDb21wYXJhdG9yKGNvbnN0IE5hbWVDb3VudFBhaXImIGEs
IGNvbnN0IE5hbWVDb3VudFBhaXImIGIpCiB7Ci0gICAgcmV0dXJuIGEuc2Vjb25kID4gYi5zZWNv
bmQ7CisgICAgcmV0dXJuIGEudmFsdWUgPiBiLnZhbHVlOwogfQogCiB2b2lkIFByb2ZpbGU6OmRl
YnVnUHJpbnREYXRhU2FtcGxlU3R5bGUoKSBjb25zdApAQCAtMTI4LDcgKzEyOCw3IEBAIHZvaWQg
UHJvZmlsZTo6ZGVidWdQcmludERhdGFTYW1wbGVTdHlsZSgpIGNvbnN0CiAKICAgICBzdGQ6OnNv
cnQoc29ydGVkRnVuY3Rpb25zLmJlZ2luKCksIHNvcnRlZEZ1bmN0aW9ucy5lbmQoKSwgZnVuY3Rp
b25OYW1lQ291bnRQYWlyQ29tcGFyYXRvcik7CiAgICAgZm9yIChOYW1lQ291bnRQYWlyVmVjdG9y
OjppdGVyYXRvciBpdCA9IHNvcnRlZEZ1bmN0aW9ucy5iZWdpbigpOyBpdCAhPSBzb3J0ZWRGdW5j
dGlvbnMuZW5kKCk7ICsraXQpCi0gICAgICAgIGRhdGFMb2coIiAgICAgICAgJS0xMmQlc1xuIiwg
KCppdCkuc2Vjb25kLCBVU3RyaW5nKCgqaXQpLmZpcnN0KS51dGY4KCkuZGF0YSgpKTsKKyAgICAg
ICAgZGF0YUxvZygiICAgICAgICAlLTEyZCVzXG4iLCAoKml0KS52YWx1ZSwgVVN0cmluZygoKml0
KS5rZXkpLnV0ZjgoKS5kYXRhKCkpOwogCiAgICAgZGF0YUxvZygiXG5Tb3J0IGJ5IHRvcCBvZiBz
dGFjaywgc2FtZSBjb2xsYXBzZWQgKHdoZW4gPj0gNSk6XG4iKTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5jcHAKaW5kZXggMGZjNTRmM2M2ZmQ4NzViMzli
MWM1ZjA1MzZmM2ZlYjY4MzE4MjI0MS4uNDhhN2FkZjBjZjBjNjhjYjdkZDQxNDFjZjJkNmUxZjZl
MGUwY2IyYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRp
Zmllci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5j
cHAKQEAgLTEwMiw3ICsxMDIsNyBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IElkZW50aWZpZXI6
OmFkZChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IGNoYXIqIGMpCiAKICAgICBjb25z
dCBMaXRlcmFsSWRlbnRpZmllclRhYmxlOjppdGVyYXRvciYgaXRlciA9IGxpdGVyYWxJZGVudGlm
aWVyVGFibGUuZmluZChjKTsKICAgICBpZiAoaXRlciAhPSBsaXRlcmFsSWRlbnRpZmllclRhYmxl
LmVuZCgpKQotICAgICAgICByZXR1cm4gaXRlci0+c2Vjb25kOworICAgICAgICByZXR1cm4gaXRl
ci0+dmFsdWU7CiAKICAgICBIYXNoU2V0PFN0cmluZ0ltcGwqPjo6QWRkUmVzdWx0IGFkZFJlc3Vs
dCA9IGlkZW50aWZpZXJUYWJsZS5hZGQ8Y29uc3QgTENoYXIqLCBJZGVudGlmaWVyQVNDSUlTdHJp
bmdUcmFuc2xhdG9yPihyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oYykpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmNwcAppbmRleCBhMjI2
YjQxNmY5MGZkN2I4MmRiNzA3MjQ2NTliYzkyNmExNDcyZGRiLi4xOGMzMDc5MzljMWY4MWM1YzUz
ZTM1NGIyYTdhOGYzNGEwOGMxNjM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FjdGl2YXRpb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQWN0aXZhdGlvbi5jcHAKQEAgLTE0MCwxMSArMTQwLDExIEBAIHZvaWQgSlNBY3RpdmF0
aW9uOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVyCiAKICAgICBTeW1ib2xUYWJsZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gdGhpc09i
amVjdC0+c3ltYm9sVGFibGUoKS0+ZW5kKCk7CiAgICAgZm9yIChTeW1ib2xUYWJsZTo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSB0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQuZ2V0QXR0cmlidXRlcygpICYgRG9u
dEVudW0gJiYgbW9kZSAhPSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKQorICAgICAgICBpZiAo
aXQtPnZhbHVlLmdldEF0dHJpYnV0ZXMoKSAmIERvbnRFbnVtICYmIG1vZGUgIT0gSW5jbHVkZURv
bnRFbnVtUHJvcGVydGllcykKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoaXQt
PnNlY29uZC5nZXRJbmRleCgpID49IHRoaXNPYmplY3QtPm1fbnVtQ2FwdHVyZWRWYXJzKQorICAg
ICAgICBpZiAoaXQtPnZhbHVlLmdldEluZGV4KCkgPj0gdGhpc09iamVjdC0+bV9udW1DYXB0dXJl
ZFZhcnMpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQo
SWRlbnRpZmllcihleGVjLCBpdC0+Zmlyc3QuZ2V0KCkpKTsKKyAgICAgICAgcHJvcGVydHlOYW1l
cy5hZGQoSWRlbnRpZmllcihleGVjLCBpdC0+a2V5LmdldCgpKSk7CiAgICAgfQogICAgIC8vIFNr
aXAgdGhlIEpTVmFyaWFibGVPYmplY3QgaW1wbGVtZW50YXRpb24gb2YgZ2V0T3duUHJvcGVydHlO
YW1lcwogICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMs
IHByb3BlcnR5TmFtZXMsIG1vZGUpOwpAQCAtMTU3LDcgKzE1Nyw3IEBAIGlubGluZSBib29sIEpT
QWN0aXZhdGlvbjo6c3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRlcyhKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsCiAgICAgU3ltYm9sVGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSBzeW1ib2xUYWJsZSgp
LT5maW5kKHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCkpOwogICAgIGlmIChpdGVyID09IHN5bWJv
bFRhYmxlKCktPmVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgU3ltYm9sVGFibGVF
bnRyeSYgZW50cnkgPSBpdGVyLT5zZWNvbmQ7CisgICAgU3ltYm9sVGFibGVFbnRyeSYgZW50cnkg
PSBpdGVyLT52YWx1ZTsKICAgICBBU1NFUlQoIWVudHJ5LmlzTnVsbCgpKTsKICAgICBpZiAoZW50
cnkuZ2V0SW5kZXgoKSA+PSBtX251bUNhcHR1cmVkVmFycykKICAgICAgICAgcmV0dXJuIGZhbHNl
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAppbmRleCA3MjE4NjA0
ZDExMmM3OGI1NzEyYjQ1NDQzOGYyOWIxMGI1MjA4NDM4Li5mNTg0OGQ5MmY4ZjExNjBmNTg4ZTlk
ZWY2MGNkOTRkMjcxMzFjYzJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5LmNwcApAQCAtMjA0LDcgKzIwNCw3IEBAIGlubGluZSBTcGFyc2VBcnJheVZhbHVlTWFwOjpB
ZGRSZXN1bHQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6YWRkKEpTQXJyYXkqIGFycmF5LCB1CiBpbmxp
bmUgdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjpwdXQoRXhlY1N0YXRlKiBleGVjLCBKU0FycmF5
KiBhcnJheSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKIHsK
ICAgICBBZGRSZXN1bHQgcmVzdWx0ID0gYWRkKGFycmF5LCBpKTsKLSAgICBTcGFyc2VBcnJheUVu
dHJ5JiBlbnRyeSA9IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgIFNwYXJzZUFycmF5RW50
cnkmIGVudHJ5ID0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIAogICAgIC8vIFRvIHNhdmUgYSBz
ZXBhcmF0ZSBmaW5kICYgYWRkLCB3ZSBmaXJzdCBhbHdheXMgYWRkIHRvIHRoZSBzcGFyc2UgbWFw
LgogICAgIC8vIEluIHRoZSB1bmNvbW1vbiBjYXNlIHRoYXQgdGhpcyBpcyBhIG5ldyBwcm9wZXJ0
eSwgYW5kIHRoZSBhcnJheSBpcyBub3QKQEAgLTI0Nyw3ICsyNDcsNyBAQCBpbmxpbmUgdm9pZCBT
cGFyc2VBcnJheVZhbHVlTWFwOjpwdXQoRXhlY1N0YXRlKiBleGVjLCBKU0FycmF5KiBhcnJheSwg
dW5zaWduZWQgaQogaW5saW5lIGJvb2wgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6cHV0RGlyZWN0KEV4
ZWNTdGF0ZSogZXhlYywgSlNBcnJheSogYXJyYXksIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUs
IGJvb2wgc2hvdWxkVGhyb3cpCiB7CiAgICAgQWRkUmVzdWx0IHJlc3VsdCA9IGFkZChhcnJheSwg
aSk7Ci0gICAgU3BhcnNlQXJyYXlFbnRyeSYgZW50cnkgPSByZXN1bHQuaXRlcmF0b3ItPnNlY29u
ZDsKKyAgICBTcGFyc2VBcnJheUVudHJ5JiBlbnRyeSA9IHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7
CiAKICAgICAvLyBUbyBzYXZlIGEgc2VwYXJhdGUgZmluZCAmIGFkZCwgd2UgZmlyc3QgYWx3YXlz
IGFkZCB0byB0aGUgc3BhcnNlIG1hcC4KICAgICAvLyBJbiB0aGUgdW5jb21tb24gY2FzZSB0aGF0
IHRoaXMgaXMgYSBuZXcgcHJvcGVydHksIGFuZCB0aGUgYXJyYXkgaXMgbm90CkBAIC0zMTMsNyAr
MzEzLDcgQEAgaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6dmlzaXRDaGlsZHJlbihT
bG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpdGVyYXRvciBlbmQgPSBtX21hcC5lbmQoKTsK
ICAgICBmb3IgKGl0ZXJhdG9yIGl0ID0gbV9tYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQot
ICAgICAgICB2aXNpdG9yLmFwcGVuZCgmaXQtPnNlY29uZCk7CisgICAgICAgIHZpc2l0b3IuYXBw
ZW5kKCZpdC0+dmFsdWUpOwogfQogCiB2b2lkIEpTQXJyYXk6OmFsbG9jYXRlU3BhcnNlTWFwKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKQEAgLTM0OSw3ICszNDksNyBAQCB2b2lkIEpTQXJyYXk6
OmVudGVyRGljdGlvbmFyeU1vZGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogICAgICAgICAv
LyBUaGlzIHdpbGwgYWx3YXlzIGJlIGEgbmV3IGVudHJ5IGluIHRoZSBtYXAsIHNvIG5vIG5lZWQg
dG8gY2hlY2sgd2UgY2FuIHdyaXRlLAogICAgICAgICAvLyBhbmQgYXR0cmlidXRlcyBhcmUgZGVm
YXVsdCBzbyBubyBuZWVkIHRvIHNldCB0aGVtLgogICAgICAgICBpZiAodmFsdWUpCi0gICAgICAg
ICAgICBtYXAtPmFkZCh0aGlzLCBpKS5pdGVyYXRvci0+c2Vjb25kLnNldChnbG9iYWxEYXRhLCB0
aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICBtYXAtPmFkZCh0aGlzLCBpKS5pdGVyYXRvci0+dmFs
dWUuc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKICAgICB9CiAKICAgICB2b2lkKiBuZXdS
YXdTdG9yYWdlID0gMDsKQEAgLTQyNSw3ICs0MjUsNyBAQCBib29sIEpTQXJyYXk6OmRlZmluZU93
bk51bWVyaWNQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4LCBQcm9wZXJ0
eQogCiAgICAgLy8gMS4gTGV0IGN1cnJlbnQgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBb
W0dldE93blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBwcm9wZXJ0eSBuYW1l
IFAuCiAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1hcC0+YWRk
KHRoaXMsIGluZGV4KTsKLSAgICBTcGFyc2VBcnJheUVudHJ5KiBlbnRyeUluTWFwID0gJnJlc3Vs
dC5pdGVyYXRvci0+c2Vjb25kOworICAgIFNwYXJzZUFycmF5RW50cnkqIGVudHJ5SW5NYXAgPSAm
cmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIAogICAgIC8vIDIuIExldCBleHRlbnNpYmxlIGJlIHRo
ZSB2YWx1ZSBvZiB0aGUgW1tFeHRlbnNpYmxlXV0gaW50ZXJuYWwgcHJvcGVydHkgb2YgTy4KICAg
ICAvLyAzLiBJZiBjdXJyZW50IGlzIHVuZGVmaW5lZCBhbmQgZXh0ZW5zaWJsZSBpcyBmYWxzZSwg
dGhlbiBSZWplY3QuCkBAIC02NTYsNyArNjU2LDcgQEAgYm9vbCBKU0FycmF5OjpnZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZAog
ICAgIH0gZWxzZSBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gdGhpc09iamVjdC0+bV9z
cGFyc2VWYWx1ZU1hcCkgewogICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBp
dCA9IG1hcC0+ZmluZChpKTsKICAgICAgICAgaWYgKGl0ICE9IG1hcC0+bm90Rm91bmQoKSkgewot
ICAgICAgICAgICAgaXQtPnNlY29uZC5nZXQoc2xvdCk7CisgICAgICAgICAgICBpdC0+dmFsdWUu
Z2V0KHNsb3QpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CkBA
IC03MDIsNyArNzAyLDcgQEAgYm9vbCBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
SlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXIKICAgICAgICAgfSBlbHNl
IGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSB0aGlzT2JqZWN0LT5tX3NwYXJzZVZhbHVl
TWFwKSB7CiAgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1h
cC0+ZmluZChpKTsKICAgICAgICAgICAgIGlmIChpdCAhPSBtYXAtPm5vdEZvdW5kKCkpIHsKLSAg
ICAgICAgICAgICAgICBpdC0+c2Vjb25kLmdldChkZXNjcmlwdG9yKTsKKyAgICAgICAgICAgICAg
ICBpdC0+dmFsdWUuZ2V0KGRlc2NyaXB0b3IpOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC04MzQsNyArODM0LDcgQEAgdm9pZCBKU0Fy
cmF5OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWdu
ZWQgaSwgSlNWYWx1ZQogICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0gc3RvcmFn
ZS0+bV92ZWN0b3I7CiAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gbWFwLT5lbmQoKTsKICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHZlY3Rvcltp
dC0+Zmlyc3RdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBpdC0+c2Vjb25kLmdldE5vblNwYXJzZU1v
ZGUoKSk7CisgICAgICAgIHZlY3RvcltpdC0+a2V5XS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgaXQt
PnZhbHVlLmdldE5vblNwYXJzZU1vZGUoKSk7CiAgICAgZGVhbGxvY2F0ZVNwYXJzZU1hcCgpOwog
CiAgICAgLy8gU3RvcmUgdGhlIG5ldyBwcm9wZXJ0eSBpbnRvIHRoZSB2ZWN0b3IuCkBAIC05MDQs
NyArOTA0LDcgQEAgYm9vbCBKU0FycmF5OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0
aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmEKICAgICBXcml0ZUJhcnJpZXI8VW5r
bm93bj4qIHZlY3RvciA9IHN0b3JhZ2UtPm1fdmVjdG9yOwogICAgIFNwYXJzZUFycmF5VmFsdWVN
YXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7CiAgICAgZm9yIChTcGFyc2VBcnJh
eVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KQotICAgICAgICB2ZWN0b3JbaXQtPmZpcnN0XS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgaXQt
PnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCkpOworICAgICAgICB2ZWN0b3JbaXQtPmtleV0uc2V0
KGdsb2JhbERhdGEsIHRoaXMsIGl0LT52YWx1ZS5nZXROb25TcGFyc2VNb2RlKCkpOwogICAgIGRl
YWxsb2NhdGVTcGFyc2VNYXAoKTsKIAogICAgIC8vIFN0b3JlIHRoZSBuZXcgcHJvcGVydHkgaW50
byB0aGUgdmVjdG9yLgpAQCAtOTQ3LDcgKzk0Nyw3IEBAIGJvb2wgSlNBcnJheTo6ZGVsZXRlUHJv
cGVydHlCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpKQog
ICAgIH0gZWxzZSBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gdGhpc09iamVjdC0+bV9z
cGFyc2VWYWx1ZU1hcCkgewogICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBp
dCA9IG1hcC0+ZmluZChpKTsKICAgICAgICAgaWYgKGl0ICE9IG1hcC0+bm90Rm91bmQoKSkgewot
ICAgICAgICAgICAgaWYgKGl0LT5zZWNvbmQuYXR0cmlidXRlcyAmIERvbnREZWxldGUpCisgICAg
ICAgICAgICBpZiAoaXQtPnZhbHVlLmF0dHJpYnV0ZXMgJiBEb250RGVsZXRlKQogICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIG1hcC0+cmVtb3ZlKGl0KTsKICAgICAg
ICAgfQpAQCAtOTg1LDggKzk4NSw4IEBAIHZvaWQgSlNBcnJheTo6Z2V0T3duUHJvcGVydHlOYW1l
cyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtCiAgICAgICAg
IAogICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAt
PmVuZCgpOwogICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGlmICht
b2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMgfHwgIShpdC0+c2Vjb25kLmF0dHJpYnV0
ZXMgJiBEb250RW51bSkpCi0gICAgICAgICAgICAgICAga2V5cy5hcHBlbmQoc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KGl0LT5maXJzdCkpOworICAgICAgICAgICAgaWYgKG1vZGUgPT0gSW5jbHVkZURv
bnRFbnVtUHJvcGVydGllcyB8fCAhKGl0LT52YWx1ZS5hdHRyaWJ1dGVzICYgRG9udEVudW0pKQor
ICAgICAgICAgICAgICAgIGtleXMuYXBwZW5kKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpdC0+a2V5
KSk7CiAgICAgICAgIH0KIAogICAgICAgICBxc29ydChrZXlzLmJlZ2luKCksIGtleXMuc2l6ZSgp
LCBzaXplb2YodW5zaWduZWQpLCBjb21wYXJlS2V5c0ZvclFTb3J0KTsKQEAgLTExNzksNyArMTE3
OSw3IEBAIGJvb2wgSlNBcnJheTo6c2V0TGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQg
bmV3TGVuZ3RoLCBib29sIHRocm93RXhjZXB0aW9uCiAgICAgICAgICAgICBrZXlzLnJlc2VydmVD
YXBhY2l0eShtaW4obWFwLT5zaXplKCksIHN0YXRpY19jYXN0PHNpemVfdD4obGVuZ3RoIC0gbmV3
TGVuZ3RoKSkpOwogICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gbWFwLT5lbmQoKTsKICAgICAgICAgICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewot
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGl0
LT5maXJzdCk7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oaXQtPmtleSk7CiAgICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgbGVuZ3RoICYm
IGluZGV4ID49IG5ld0xlbmd0aCkKICAgICAgICAgICAgICAgICAgICAga2V5cy5hcHBlbmQoaW5k
ZXgpOwogICAgICAgICAgICAgfQpAQCAtMTE5NCw3ICsxMTk0LDcgQEAgYm9vbCBKU0FycmF5Ojpz
ZXRMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBuZXdMZW5ndGgsIGJvb2wgdGhyb3dF
eGNlcHRpb24KICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBrZXlzWy0taV07
CiAgICAgICAgICAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6Oml0ZXJhdG9yIGl0ID0g
bWFwLT5maW5kKGluZGV4KTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGl0ICE9IG1hcC0+
bm90Rm91bmQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpdC0+c2Vjb25kLmF0dHJpYnV0
ZXMgJiBEb250RGVsZXRlKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpdC0+dmFsdWUuYXR0
cmlidXRlcyAmIERvbnREZWxldGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2Ut
Pm1fbGVuZ3RoID0gaW5kZXggKyAxOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJl
amVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIlVuYWJsZSB0byBkZWxldGUgcHJvcGVydHkuIik7
CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTE2NjksNyArMTY2OSw3IEBAIHZvaWQgSlNBcnJh
eTo6c29ydChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgY29tcGFyZUZ1bmN0aW9uLCBDYWxsVHlw
ZSBjYWxsVHlwZSwKIAogICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRv
ciBlbmQgPSBtYXAtPmVuZCgpOwogICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbbnVtRGVmaW5lZF0udmFsdWUgPSBpdC0+
c2Vjb25kLmdldE5vblNwYXJzZU1vZGUoKTsKKyAgICAgICAgICAgIHRyZWUuYWJzdHJhY3Rvcigp
Lm1fbm9kZXNbbnVtRGVmaW5lZF0udmFsdWUgPSBpdC0+dmFsdWUuZ2V0Tm9uU3BhcnNlTW9kZSgp
OwogICAgICAgICAgICAgdHJlZS5pbnNlcnQobnVtRGVmaW5lZCk7CiAgICAgICAgICAgICArK251
bURlZmluZWQ7CiAgICAgICAgIH0KQEAgLTE3ODQsNyArMTc4NCw3IEBAIHVuc2lnbmVkIEpTQXJy
YXk6OmNvbXBhY3RGb3JTb3J0aW5nKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKIAogICAgICAg
ICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwog
ICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFw
LT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3Rv
cltudW1EZWZpbmVkKytdLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoaXQtPnNlY29uZC5nZXROb25T
cGFyc2VNb2RlKCkpOworICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbbnVtRGVmaW5lZCsr
XS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGl0LT52YWx1ZS5nZXROb25TcGFyc2VNb2RlKCkpOwog
CiAgICAgICAgIGRlYWxsb2NhdGVTcGFyc2VNYXAoKTsKICAgICB9CkBAIC0xODMxLDEzICsxODMx
LDEzIEBAIHZvaWQgSlNBcnJheTo6Y2hlY2tDb25zaXN0ZW5jeShDb25zaXN0ZW5jeUNoZWNrVHlw
ZSB0eXBlKQogICAgIGlmIChtX3NwYXJzZVZhbHVlTWFwKSB7CiAgICAgICAgIFNwYXJzZUFycmF5
VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fc3BhcnNlVmFsdWVNYXAtPmVuZCgpOwog
ICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9z
cGFyc2VWYWx1ZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICB1
bnNpZ25lZCBpbmRleCA9IGl0LT5maXJzdDsKKyAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0g
aXQtPmtleTsKICAgICAgICAgICAgIEFTU0VSVChpbmRleCA8IHN0b3JhZ2UtPm1fbGVuZ3RoKTsK
ICAgICAgICAgICAgIEFTU0VSVChpbmRleCA+PSBtX3ZlY3Rvckxlbmd0aCk7CiAgICAgICAgICAg
ICBBU1NFUlQoaW5kZXggPD0gTUFYX0FSUkFZX0lOREVYKTsKLSAgICAgICAgICAgIEFTU0VSVChp
dC0+c2Vjb25kKTsKKyAgICAgICAgICAgIEFTU0VSVChpdC0+dmFsdWUpOwogICAgICAgICAgICAg
aWYgKHR5cGUgIT0gRGVzdHJ1Y3RvckNvbnNpc3RlbmN5Q2hlY2spCi0gICAgICAgICAgICAgICAg
aXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCkuaXNVbmRlZmluZWQoKTsgLy8gTGlrZWx5IHRv
IGNyYXNoIGlmIHRoZSBvYmplY3Qgd2FzIGRlYWxsb2NhdGVkLgorICAgICAgICAgICAgICAgIGl0
LT52YWx1ZS5nZXROb25TcGFyc2VNb2RlKCkuaXNVbmRlZmluZWQoKTsgLy8gTGlrZWx5IHRvIGNy
YXNoIGlmIHRoZSBvYmplY3Qgd2FzIGRlYWxsb2NhdGVkLgogICAgICAgICB9CiAgICAgfQogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9i
amVjdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2Jq
ZWN0LmNwcAppbmRleCAyMzM0YTA4Y2FlOGFhY2VmZjhmNjU1ZDE3OWUxZDY5Y2Y0YzM1NjM4Li4z
N2NjMWFlMDQxNmI1ZGM4NzVlNGRhNDkxZjkxY2I3NWI2OTYzMGU2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcApAQCAt
NjEsOCArNjEsOCBAQCB2b2lkIEpTU3ltYm9sVGFibGVPYmplY3Q6OmdldE93blByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLAogICAgIEpTU3ltYm9sVGFibGVP
YmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTeW1ib2xUYWJsZU9iamVjdCo+KG9iamVjdCk7
CiAgICAgU3ltYm9sVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHRoaXNPYmplY3QtPnN5bWJv
bFRhYmxlKCktPmVuZCgpOwogICAgIGZvciAoU3ltYm9sVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7
Ci0gICAgICAgIGlmICghKGl0LT5zZWNvbmQuZ2V0QXR0cmlidXRlcygpICYgRG9udEVudW0pIHx8
IChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpKQotICAgICAgICAgICAgcHJvcGVy
dHlOYW1lcy5hZGQoSWRlbnRpZmllcihleGVjLCBpdC0+Zmlyc3QuZ2V0KCkpKTsKKyAgICAgICAg
aWYgKCEoaXQtPnZhbHVlLmdldEF0dHJpYnV0ZXMoKSAmIERvbnRFbnVtKSB8fCAobW9kZSA9PSBJ
bmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKSkKKyAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRk
KElkZW50aWZpZXIoZXhlYywgaXQtPmtleS5nZXQoKSkpOwogICAgIH0KICAgICAKICAgICBKU09i
amVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVz
LCBtb2RlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3lt
Ym9sVGFibGVPYmplY3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9s
VGFibGVPYmplY3QuaAppbmRleCAxYTk5YjE5OWZmZTFiNjdhN2NkYmNkZmNjOTY5M2Y0ZjFlMWQ0
ZDkyLi41MGE2NDk1NzkzYTFlMGNiOTJhNTdhNmJjZjY0Zjk4MDk4NWI2NjU2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oCkBA
IC03Nyw3ICs3Nyw3IEBAIGlubGluZSBib29sIHN5bWJvbFRhYmxlR2V0KAogICAgIFN5bWJvbFRh
YmxlOjppdGVyYXRvciBpdGVyID0gc3ltYm9sVGFibGUuZmluZChwcm9wZXJ0eU5hbWUucHVibGlj
TmFtZSgpKTsKICAgICBpZiAoaXRlciA9PSBzeW1ib2xUYWJsZS5lbmQoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIFN5bWJvbFRhYmxlRW50cnk6OkZhc3QgZW50cnkgPSBpdGVyLT5zZWNv
bmQ7CisgICAgU3ltYm9sVGFibGVFbnRyeTo6RmFzdCBlbnRyeSA9IGl0ZXItPnZhbHVlOwogICAg
IEFTU0VSVCghZW50cnkuaXNOdWxsKCkpOwogICAgIHNsb3Quc2V0VmFsdWUob2JqZWN0LT5yZWdp
c3RlckF0KGVudHJ5LmdldEluZGV4KCkpLmdldCgpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTkx
LDcgKzkxLDcgQEAgaW5saW5lIGJvb2wgc3ltYm9sVGFibGVHZXQoCiAgICAgU3ltYm9sVGFibGU6
Oml0ZXJhdG9yIGl0ZXIgPSBzeW1ib2xUYWJsZS5maW5kKHByb3BlcnR5TmFtZS5wdWJsaWNOYW1l
KCkpOwogICAgIGlmIChpdGVyID09IHN5bWJvbFRhYmxlLmVuZCgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgU3ltYm9sVGFibGVFbnRyeTo6RmFzdCBlbnRyeSA9IGl0ZXItPnNlY29uZDsK
KyAgICBTeW1ib2xUYWJsZUVudHJ5OjpGYXN0IGVudHJ5ID0gaXRlci0+dmFsdWU7CiAgICAgQVNT
RVJUKCFlbnRyeS5pc051bGwoKSk7CiAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKAogICAg
ICAgICBvYmplY3QtPnJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuZ2V0KCksIGVudHJ5Lmdl
dEF0dHJpYnV0ZXMoKSB8IERvbnREZWxldGUpOwpAQCAtMTA3LDcgKzEwNyw3IEBAIGlubGluZSBi
b29sIHN5bWJvbFRhYmxlR2V0KAogICAgIFN5bWJvbFRhYmxlOjppdGVyYXRvciBpdGVyID0gc3lt
Ym9sVGFibGUuZmluZChwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpKTsKICAgICBpZiAoaXRlciA9
PSBzeW1ib2xUYWJsZS5lbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFN5bWJvbFRh
YmxlRW50cnk6OkZhc3QgZW50cnkgPSBpdGVyLT5zZWNvbmQ7CisgICAgU3ltYm9sVGFibGVFbnRy
eTo6RmFzdCBlbnRyeSA9IGl0ZXItPnZhbHVlOwogICAgIEFTU0VSVCghZW50cnkuaXNOdWxsKCkp
OwogICAgIHNsb3Quc2V0VmFsdWUob2JqZWN0LT5yZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkp
LmdldCgpKTsKICAgICBzbG90SXNXcml0ZWFibGUgPSAhZW50cnkuaXNSZWFkT25seSgpOwpAQCAt
MTI3LDcgKzEyNyw3IEBAIGlubGluZSBib29sIHN5bWJvbFRhYmxlUHV0KAogICAgIGlmIChpdGVy
ID09IHN5bWJvbFRhYmxlLmVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgYm9vbCB3
YXNGYXQ7Ci0gICAgU3ltYm9sVGFibGVFbnRyeTo6RmFzdCBmYXN0RW50cnkgPSBpdGVyLT5zZWNv
bmQuZ2V0RmFzdCh3YXNGYXQpOworICAgIFN5bWJvbFRhYmxlRW50cnk6OkZhc3QgZmFzdEVudHJ5
ID0gaXRlci0+dmFsdWUuZ2V0RmFzdCh3YXNGYXQpOwogICAgIEFTU0VSVCghZmFzdEVudHJ5Lmlz
TnVsbCgpKTsKICAgICBpZiAoZmFzdEVudHJ5LmlzUmVhZE9ubHkoKSkgewogICAgICAgICBpZiAo
c2hvdWxkVGhyb3cpCkBAIC0xMzUsNyArMTM1LDcgQEAgaW5saW5lIGJvb2wgc3ltYm9sVGFibGVQ
dXQoCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBpZiAoVU5MSUtFTFkod2FzRmF0
KSkKLSAgICAgICAgaXRlci0+c2Vjb25kLm5vdGlmeVdyaXRlKCk7CisgICAgICAgIGl0ZXItPnZh
bHVlLm5vdGlmeVdyaXRlKCk7CiAgICAgb2JqZWN0LT5yZWdpc3RlckF0KGZhc3RFbnRyeS5nZXRJ
bmRleCgpKS5zZXQoZ2xvYmFsRGF0YSwgb2JqZWN0LCB2YWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7
CiB9CkBAIC0xNTAsNyArMTUwLDcgQEAgaW5saW5lIGJvb2wgc3ltYm9sVGFibGVQdXRXaXRoQXR0
cmlidXRlcygKICAgICBTeW1ib2xUYWJsZTo6aXRlcmF0b3IgaXRlciA9IG9iamVjdC0+c3ltYm9s
VGFibGUoKS0+ZmluZChwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpKTsKICAgICBpZiAoaXRlciA9
PSBvYmplY3QtPnN5bWJvbFRhYmxlKCktPmVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgU3ltYm9sVGFibGVFbnRyeSYgZW50cnkgPSBpdGVyLT5zZWNvbmQ7CisgICAgU3ltYm9sVGFi
bGVFbnRyeSYgZW50cnkgPSBpdGVyLT52YWx1ZTsKICAgICBBU1NFUlQoIWVudHJ5LmlzTnVsbCgp
KTsKICAgICBlbnRyeS5ub3RpZnlXcml0ZSgpOwogICAgIGVudHJ5LnNldEF0dHJpYnV0ZXMoYXR0
cmlidXRlcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdF
eHBDYWNoZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZS5j
cHAKaW5kZXggNTNhMTNhNGI1OWI3N2U3NmE0Yjg4MGNmZTc1YjM2MDZjODdlMWZhZC4uYWI0Zjk4
NzhhOTk5OGQ0OTg0MDJlNmI0ZGNlNzA5YmQyOGUyY2VlOCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlLmNwcApAQCAtODAsNyArODAsNyBAQCB2b2lkIFJl
Z0V4cENhY2hlOjppbnZhbGlkYXRlQ29kZSgpCiAKICAgICBSZWdFeHBDYWNoZU1hcDo6aXRlcmF0
b3IgZW5kID0gbV93ZWFrQ2FjaGUuZW5kKCk7CiAgICAgZm9yIChSZWdFeHBDYWNoZU1hcDo6aXRl
cmF0b3IgaXQgPSBtX3dlYWtDYWNoZS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgUmVnRXhwKiByZWdFeHAgPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICBSZWdFeHAqIHJl
Z0V4cCA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgaWYgKCFyZWdFeHApIC8vIFNraXAgem9t
Ymllcy4KICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICByZWdFeHAtPmludmFsaWRhdGVD
b2RlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrR0NN
YXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ01hcC5oCmluZGV4IDY5
MjYxNjVhNzg1YTc2N2RhMzc3YWNlYjI1Mzk3MGNlYzNiOWE5NDguLjUyZTVlMjk0NmZkMTAzYjdm
ZWFmNjIxZjZmZDJhNTBkMDUzNDlkMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1dlYWtHQ01hcC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1dlYWtHQ01hcC5oCkBAIC02Myw3ICs2Myw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHR5
cGVuYW1lIE1hcFR5cGU6Oml0ZXJhdG9yIGVuZCA9IG1fbWFwLmVuZCgpOwogICAgICAgICBmb3Ig
KHR5cGVuYW1lIE1hcFR5cGU6Oml0ZXJhdG9yIHB0ciA9IG1fbWFwLmJlZ2luKCk7IHB0ciAhPSBl
bmQ7ICsrcHRyKQotICAgICAgICAgICAgV2Vha1NldDo6ZGVhbGxvY2F0ZShwdHItPnNlY29uZCk7
CisgICAgICAgICAgICBXZWFrU2V0OjpkZWFsbG9jYXRlKHB0ci0+dmFsdWUpOwogICAgICAgICBt
X21hcC5jbGVhcigpOwogICAgIH0KIApAQCAtODAsOCArODAsOCBAQCBwdWJsaWM6CiAgICAgICAg
IEFTU0VSVF9VTlVTRUQoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5hcGlMb2NrKCkuY3VycmVudFRo
cmVhZElzSG9sZGluZ0xvY2soKSk7CiAgICAgICAgIHR5cGVuYW1lIE1hcFR5cGU6OkFkZFJlc3Vs
dCByZXN1bHQgPSBtX21hcC5hZGQoa2V5LCAwKTsKICAgICAgICAgaWYgKCFyZXN1bHQuaXNOZXdF
bnRyeSkKLSAgICAgICAgICAgIFdlYWtTZXQ6OmRlYWxsb2NhdGUocmVzdWx0Lml0ZXJhdG9yLT5z
ZWNvbmQpOwotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IFdlYWtTZXQ6OmFsbG9j
YXRlKHZhbHVlLCB0aGlzLCBGaW5hbGl6ZXJDYWxsYmFjazo6ZmluYWxpemVyQ29udGV4dEZvcihr
ZXkpKTsKKyAgICAgICAgICAgIFdlYWtTZXQ6OmRlYWxsb2NhdGUocmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZSk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBXZWFrU2V0OjphbGxvY2F0
ZSh2YWx1ZSwgdGhpcywgRmluYWxpemVyQ2FsbGJhY2s6OmZpbmFsaXplckNvbnRleHRGb3Ioa2V5
KSk7CiAgICAgfQogCiAgICAgdm9pZCByZW1vdmUoY29uc3QgS2V5VHlwZSYga2V5KQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1Byb2ZpbGVUcmVlTm9kZS5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1Byb2ZpbGVUcmVlTm9kZS5oCmluZGV4IDdiNTFlZmI4
NWRiMzQ0MWEyMjI2M2I0MjQ5N2EzMTc1MmI1YjUyZmQuLjdiNWE5NWVjNDA0NGI2M2YyMTExMzYx
MjJkOTIzY2E4ODk0NjBhMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29s
cy9Qcm9maWxlVHJlZU5vZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvUHJv
ZmlsZVRyZWVOb2RlLmgKQEAgLTUxLDcgKzUxLDcgQEAgcHVibGljOgogICAgIAogICAgICAgICBQ
cm9maWxlVHJlZU5vZGUgbmV3RW50cnk7CiAgICAgICAgIE1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9
IG1fY2hpbGRyZW4tPmFkZChTdHJpbmcobmFtZSksIG5ld0VudHJ5KTsKLSAgICAgICAgUHJvZmls
ZVRyZWVOb2RlKiBjaGlsZEluTWFwID0gJnJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgICAg
ICBQcm9maWxlVHJlZU5vZGUqIGNoaWxkSW5NYXAgPSAmcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsK
ICAgICAgICAgKytjaGlsZEluTWFwLT5tX2NvdW50OwogICAgICAgICByZXR1cm4gY2hpbGRJbk1h
cDsKICAgICB9CkBAIC03Miw3ICs3Miw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiAw
OwogICAgICAgICB1aW50NjRfdCBjaGlsZENvdW50ID0gMDsKICAgICAgICAgZm9yIChNYXA6Oml0
ZXJhdG9yIGl0ID0gbV9jaGlsZHJlbi0+YmVnaW4oKTsgaXQgIT0gbV9jaGlsZHJlbi0+ZW5kKCk7
ICsraXQpCi0gICAgICAgICAgICBjaGlsZENvdW50ICs9IGl0LT5zZWNvbmQuY291bnQoKTsKKyAg
ICAgICAgICAgIGNoaWxkQ291bnQgKz0gaXQtPnZhbHVlLmNvdW50KCk7CiAgICAgICAgIHJldHVy
biBjaGlsZENvdW50OwogICAgIH0KICAgICAKQEAgLTk3LDE5ICs5NywxOSBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGluZGVudDsgKytpKQogICAgICAg
ICAgICAgICAgIGRhdGFMb2coIiAgICAiKTsKICAgICAgICAgICAgIGRhdGFMb2coIiUgOGxsZDog
JXMgKCVsbGQgc3RhY2sgdG9wKVxuIiwKLSAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxsb25n
IGxvbmc+KGVudHJ5LT5zZWNvbmQuY291bnQoKSksCi0gICAgICAgICAgICAgICAgZW50cnktPmZp
cnN0LnV0ZjgoKS5kYXRhKCksCi0gICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8bG9uZyBsb25n
PihlbnRyeS0+c2Vjb25kLmNvdW50KCkgLSBlbnRyeS0+c2Vjb25kLmNoaWxkQ291bnQoKSkpOwor
ICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oZW50cnktPnZhbHVlLmNvdW50
KCkpLAorICAgICAgICAgICAgICAgIGVudHJ5LT5rZXkudXRmOCgpLmRhdGEoKSwKKyAgICAgICAg
ICAgICAgICBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KGVudHJ5LT52YWx1ZS5jb3VudCgpIC0gZW50
cnktPnZhbHVlLmNoaWxkQ291bnQoKSkpOwogCiAgICAgICAgICAgICAvLyBSZWN1cnNpdmVseSBk
dW1wIHRoZSBjaGlsZCBub2Rlcy4KLSAgICAgICAgICAgIGVudHJ5LT5zZWNvbmQuZHVtcEludGVy
bmFsKGluZGVudCArIDEpOworICAgICAgICAgICAgZW50cnktPnZhbHVlLmR1bXBJbnRlcm5hbChp
bmRlbnQgKyAxKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIHN0YXRpYyBpbnQgY29tcGFyZUVu
dHJpZXMoY29uc3Qgdm9pZCogYSwgY29uc3Qgdm9pZCogYikKICAgICB7Ci0gICAgICAgIHVpbnQ2
NF90IGRhID0gKCpzdGF0aWNfY2FzdDxNYXBFbnRyeSogY29uc3QgKj4oYSkpLT5zZWNvbmQuY291
bnQoKTsKLSAgICAgICAgdWludDY0X3QgZGIgPSAoKnN0YXRpY19jYXN0PE1hcEVudHJ5KiBjb25z
dCAqPihiKSktPnNlY29uZC5jb3VudCgpOworICAgICAgICB1aW50NjRfdCBkYSA9ICgqc3RhdGlj
X2Nhc3Q8TWFwRW50cnkqIGNvbnN0ICo+KGEpKS0+dmFsdWUuY291bnQoKTsKKyAgICAgICAgdWlu
dDY0X3QgZGIgPSAoKnN0YXRpY19jYXN0PE1hcEVudHJ5KiBjb25zdCAqPihiKSktPnZhbHVlLmNv
dW50KCk7CiAgICAgICAgIHJldHVybiAoZGEgPCBkYikgLSAoZGEgPiBkYik7CiAgICAgfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoQ291bnRlZFNldC5oIGIvU291cmNlL1dURi93
dGYvSGFzaENvdW50ZWRTZXQuaAppbmRleCBlZjg5YmRiYzc1MjYxODVkZTAxNzUzZTAzZTlmNmIw
Yjc3ZTNlMDFkLi5lZmY0YTI5M2U5YzczOWIxMmM0M2I2ODkxMjZkMGM4NDUwYmNkMDBhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoQ291bnRlZFNldC5oCisrKyBiL1NvdXJjZS9XVEYv
d3RmL0hhc2hDb3VudGVkU2V0LmgKQEAgLTE1NCw3ICsxNTQsNyBAQCBuYW1lc3BhY2UgV1RGIHsK
ICAgICBpbmxpbmUgdHlwZW5hbWUgSGFzaENvdW50ZWRTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMs
IFRyYWl0cz46OkFkZFJlc3VsdCBIYXNoQ291bnRlZFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywg
VHJhaXRzPjo6YWRkKGNvbnN0IFZhbHVlVHlwZSAmdmFsdWUpCiAgICAgewogICAgICAgICBBZGRS
ZXN1bHQgcmVzdWx0ID0gbV9pbXBsLmFkZCh2YWx1ZSwgMCk7Ci0gICAgICAgICsrcmVzdWx0Lml0
ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgICsrcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCkBAIC0xNzAsMTEgKzE3MCwxMSBAQCBuYW1l
c3BhY2UgV1RGIHsKICAgICAgICAgaWYgKGl0ID09IGVuZCgpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgICAgIHVuc2lnbmVkIG9sZFZhbCA9IGl0LT5zZWNvbmQ7CisgICAgICAg
IHVuc2lnbmVkIG9sZFZhbCA9IGl0LT52YWx1ZTsKICAgICAgICAgQVNTRVJUKG9sZFZhbCk7CiAg
ICAgICAgIHVuc2lnbmVkIG5ld1ZhbCA9IG9sZFZhbCAtIDE7CiAgICAgICAgIGlmIChuZXdWYWwp
IHsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQgPSBuZXdWYWw7CisgICAgICAgICAgICBpdC0+dmFs
dWUgPSBuZXdWYWw7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIApAQCAt
MjI2LDcgKzIyNiw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBpdGVyYXRvciBpdCA9IGNv
bGxlY3Rpb24uYmVnaW4oKTsKICAgICAgICAgaXRlcmF0b3IgZW5kID0gY29sbGVjdGlvbi5lbmQo
KTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaXQgIT0gZW5kOyArK2l0LCArK2kpCi0g
ICAgICAgICAgICB2ZWN0b3JbaV0gPSAoKml0KS5maXJzdDsKKyAgICAgICAgICAgIHZlY3Rvcltp
XSA9ICgqaXQpLmtleTsKICAgICB9CiAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvSGFz
aEl0ZXJhdG9ycy5oIGIvU291cmNlL1dURi93dGYvSGFzaEl0ZXJhdG9ycy5oCmluZGV4IDYzOWZm
NzI1MGExZWYwZmIzZjgyNGRjOTE2ODg0OTZiODliNjVlMTcuLjNhODQxOGFhZGVmNzgzYjlhYmMw
MzRhOWVlMGE0YWU3YWI4YjE2YTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0hhc2hJdGVy
YXRvcnMuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoSXRlcmF0b3JzLmgKQEAgLTkxLDcgKzkx
LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgcHVibGljOgogICAgICAgICBIYXNoVGFibGVDb25z
dEtleXNJdGVyYXRvcihjb25zdCBDb25zdEl0ZXJhdG9yJiBpbXBsKSA6IG1faW1wbChpbXBsKSB7
fQogICAgICAgICAKLSAgICAgICAgY29uc3QgS2V5VHlwZSogZ2V0KCkgY29uc3QgeyByZXR1cm4g
JihtX2ltcGwuZ2V0KCktPmZpcnN0KTsgfQorICAgICAgICBjb25zdCBLZXlUeXBlKiBnZXQoKSBj
b25zdCB7IHJldHVybiAmKG1faW1wbC5nZXQoKS0+a2V5KTsgfQogICAgICAgICBjb25zdCBLZXlU
eXBlJiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqZ2V0KCk7IH0KICAgICAgICAgY29uc3Qg
S2V5VHlwZSogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIGdldCgpOyB9CiAKQEAgLTEwOCw3
ICsxMDgsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICBwdWJsaWM6CiAgICAgICAgIEhhc2hUYWJs
ZUNvbnN0VmFsdWVzSXRlcmF0b3IoY29uc3QgQ29uc3RJdGVyYXRvciYgaW1wbCkgOiBtX2ltcGwo
aW1wbCkge30KICAgICAgICAgCi0gICAgICAgIGNvbnN0IE1hcHBlZFR5cGUqIGdldCgpIGNvbnN0
IHsgcmV0dXJuICYobV9pbXBsLmdldCgpLT5zZWNvbmQpOyB9CisgICAgICAgIGNvbnN0IE1hcHBl
ZFR5cGUqIGdldCgpIGNvbnN0IHsgcmV0dXJuICYobV9pbXBsLmdldCgpLT52YWx1ZSk7IH0KICAg
ICAgICAgY29uc3QgTWFwcGVkVHlwZSYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKmdldCgp
OyB9CiAgICAgICAgIGNvbnN0IE1hcHBlZFR5cGUqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVy
biBnZXQoKTsgfQogCkBAIC0xNDksNyArMTQ5LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgcHVi
bGljOgogICAgICAgICBIYXNoVGFibGVWYWx1ZXNJdGVyYXRvcihjb25zdCBJdGVyYXRvciYgaW1w
bCkgOiBtX2ltcGwoaW1wbCkge30KICAgICAgICAgCi0gICAgICAgIE1hcHBlZFR5cGUqIGdldCgp
IGNvbnN0IHsgcmV0dXJuICYobV9pbXBsLmdldCgpLT5zZWNvbmQpOyB9CisgICAgICAgIE1hcHBl
ZFR5cGUqIGdldCgpIGNvbnN0IHsgcmV0dXJuICYobV9pbXBsLmdldCgpLT52YWx1ZSk7IH0KICAg
ICAgICAgTWFwcGVkVHlwZSYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKmdldCgpOyB9CiAg
ICAgICAgIE1hcHBlZFR5cGUqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBnZXQoKTsgfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoTWFwLmggYi9Tb3VyY2UvV1RGL3d0Zi9I
YXNoTWFwLmgKaW5kZXggOTAxMDQ3NGM4MjU1NjNlZjg0MWI5Njg3ZmVmZjQ5NGFhNjU1YjRlOC4u
MTBlZTQyNWRhOTU5NmJhYWRmMzRlNTc4ZWY1YWJlNTcwZjlhZTBkNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi93dGYvSGFzaE1hcC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0hhc2hNYXAuaApAQCAt
MzUsNyArMzUsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICB9OwogCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IEtleVZhbHVlUGFpcktleUV4dHJhY3RvciB7Ci0gICAgICAgIHN0YXRp
YyBjb25zdCB0eXBlbmFtZSBUOjpLZXlUeXBlJiBleHRyYWN0KGNvbnN0IFQmIHApIHsgcmV0dXJu
IHAuZmlyc3Q7IH0KKyAgICAgICAgc3RhdGljIGNvbnN0IHR5cGVuYW1lIFQ6OktleVR5cGUmIGV4
dHJhY3QoY29uc3QgVCYgcCkgeyByZXR1cm4gcC5rZXk7IH0KICAgICB9OwogCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcg
PSB0eXBlbmFtZSBEZWZhdWx0SGFzaDxLZXlBcmc+OjpIYXNoLApAQCAtMjExLDcgKzIxMSw3IEBA
IG5hbWVzcGFjZSBXVEYgewogICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNJc0VtcHR5VmFs
dWVGdW5jdGlvbiA9IHRydWU7CiAgICAgICAgIHN0YXRpYyBib29sIGlzRW1wdHlWYWx1ZShjb25z
dCB0eXBlbmFtZSBLZXlWYWx1ZVBhaXJIYXNoVHJhaXRzPEtleVRyYWl0cywgTWFwcGVkVHJhaXRz
Pjo6VHJhaXRUeXBlJiB2YWx1ZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGlzSGFz
aFRyYWl0c0VtcHR5VmFsdWU8S2V5VHJhaXRzPih2YWx1ZS5maXJzdCk7CisgICAgICAgICAgICBy
ZXR1cm4gaXNIYXNoVHJhaXRzRW1wdHlWYWx1ZTxLZXlUcmFpdHM+KHZhbHVlLmtleSk7CiAgICAg
ICAgIH0KICAgICB9OwogCkBAIC0yMjEsOCArMjIxLDggQEAgbmFtZXNwYWNlIFdURiB7CiAgICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IHN0YXRpYyBib29sIGVxdWFsKGNv
bnN0IFQmIGEsIGNvbnN0IFUmIGIpIHsgcmV0dXJuIEhhc2hGdW5jdGlvbnM6OmVxdWFsKGEsIGIp
OyB9CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+
IHN0YXRpYyB2b2lkIHRyYW5zbGF0ZShUJiBsb2NhdGlvbiwgY29uc3QgVSYga2V5LCBjb25zdCBW
JiBtYXBwZWQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGxvY2F0aW9uLmZpcnN0ID0ga2V5Owot
ICAgICAgICAgICAgVmFsdWVUcmFpdHM6OlZhbHVlVHJhaXRzOjpzdG9yZShtYXBwZWQsIGxvY2F0
aW9uLnNlY29uZCk7CisgICAgICAgICAgICBsb2NhdGlvbi5rZXkgPSBrZXk7CisgICAgICAgICAg
ICBWYWx1ZVRyYWl0czo6VmFsdWVUcmFpdHM6OnN0b3JlKG1hcHBlZCwgbG9jYXRpb24udmFsdWUp
OwogICAgICAgICB9CiAgICAgfTsKIApAQCAtMjMyLDggKzIzMiw4IEBAIG5hbWVzcGFjZSBXVEYg
ewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBzdGF0aWMgYm9vbCBl
cXVhbChjb25zdCBUJiBhLCBjb25zdCBVJiBiKSB7IHJldHVybiBUcmFuc2xhdG9yOjplcXVhbChh
LCBiKTsgfQogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFt
ZSBWPiBzdGF0aWMgdm9pZCB0cmFuc2xhdGUoVCYgbG9jYXRpb24sIGNvbnN0IFUmIGtleSwgY29u
c3QgViYgbWFwcGVkLCB1bnNpZ25lZCBoYXNoQ29kZSkKICAgICAgICAgewotICAgICAgICAgICAg
VHJhbnNsYXRvcjo6dHJhbnNsYXRlKGxvY2F0aW9uLmZpcnN0LCBrZXksIGhhc2hDb2RlKTsKLSAg
ICAgICAgICAgIFZhbHVlVHJhaXRzOjpWYWx1ZVRyYWl0czo6c3RvcmUobWFwcGVkLCBsb2NhdGlv
bi5zZWNvbmQpOworICAgICAgICAgICAgVHJhbnNsYXRvcjo6dHJhbnNsYXRlKGxvY2F0aW9uLmtl
eSwga2V5LCBoYXNoQ29kZSk7CisgICAgICAgICAgICBWYWx1ZVRyYWl0czo6VmFsdWVUcmFpdHM6
OnN0b3JlKG1hcHBlZCwgbG9jYXRpb24udmFsdWUpOwogICAgICAgICB9CiAgICAgfTsKIApAQCAt
MzQxLDcgKzM0MSw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBBZGRSZXN1bHQgcmVzdWx0
ID0gaW5saW5lQWRkKGtleSwgbWFwcGVkKTsKICAgICAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRy
eSkgewogICAgICAgICAgICAgLy8gVGhlIGlubGluZUFkZCBjYWxsIGFib3ZlIGZvdW5kIGFuIGV4
aXN0aW5nIGhhc2ggdGFibGUgZW50cnk7IHdlIG5lZWQgdG8gc2V0IHRoZSBtYXBwZWQgdmFsdWUu
Ci0gICAgICAgICAgICBNYXBwZWRUcmFpdHM6OnN0b3JlKG1hcHBlZCwgcmVzdWx0Lml0ZXJhdG9y
LT5zZWNvbmQpOworICAgICAgICAgICAgTWFwcGVkVHJhaXRzOjpzdG9yZShtYXBwZWQsIHJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICAgfQpAQCAtMzY4LDcgKzM2OCw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBWYWx1ZVR5
cGUqIGVudHJ5ID0gY29uc3RfY2FzdDxIYXNoVGFibGVUeXBlJj4obV9pbXBsKS5sb29rdXAoa2V5
KTsKICAgICAgICAgaWYgKCFlbnRyeSkKICAgICAgICAgICAgIHJldHVybiBNYXBwZWRUcmFpdHM6
OnBlZWsoTWFwcGVkVHJhaXRzOjplbXB0eVZhbHVlKCkpOwotICAgICAgICByZXR1cm4gTWFwcGVk
VHJhaXRzOjpwZWVrKGVudHJ5LT5zZWNvbmQpOworICAgICAgICByZXR1cm4gTWFwcGVkVHJhaXRz
OjpwZWVrKGVudHJ5LT52YWx1ZSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KQEAgLTM5OSw3
ICszOTksNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgaXRlcmF0b3IgaXQgPSBmaW5kKGtl
eSk7CiAgICAgICAgIGlmIChpdCA9PSBlbmQoKSkKICAgICAgICAgICAgIHJldHVybiBNYXBwZWRU
cmFpdHM6OnBhc3NPdXQoTWFwcGVkVHJhaXRzOjplbXB0eVZhbHVlKCkpOwotICAgICAgICBNYXBw
ZWRQYXNzT3V0VHlwZSByZXN1bHQgPSBNYXBwZWRUcmFpdHM6OnBhc3NPdXQoaXQtPnNlY29uZCk7
CisgICAgICAgIE1hcHBlZFBhc3NPdXRUeXBlIHJlc3VsdCA9IE1hcHBlZFRyYWl0czo6cGFzc091
dChpdC0+dmFsdWUpOwogICAgICAgICByZW1vdmUoaXQpOwogICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgIH0KQEAgLTQyMSw4ICs0MjEsOCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgY29u
c3RfaXRlcmF0b3IgZW5kID0gYS5lbmQoKTsKICAgICAgICAgY29uc3RfaXRlcmF0b3Igbm90Rm91
bmQgPSBiLmVuZCgpOwogICAgICAgICBmb3IgKGNvbnN0X2l0ZXJhdG9yIGl0ID0gYS5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGNvbnN0X2l0ZXJhdG9yIGJQb3MgPSBi
LmZpbmQoaXQtPmZpcnN0KTsKLSAgICAgICAgICAgIGlmIChiUG9zID09IG5vdEZvdW5kIHx8IGl0
LT5zZWNvbmQgIT0gYlBvcy0+c2Vjb25kKQorICAgICAgICAgICAgY29uc3RfaXRlcmF0b3IgYlBv
cyA9IGIuZmluZChpdC0+a2V5KTsKKyAgICAgICAgICAgIGlmIChiUG9zID09IG5vdEZvdW5kIHx8
IGl0LT52YWx1ZSAhPSBiUG9zLT52YWx1ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIH0KIApAQCAtNDM1LDM0ICs0MzUsMjIgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAg
ICAgIHJldHVybiAhKGEgPT0gYik7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFz
aFRhYmxlVHlwZT4KLSAgICB2b2lkIGRlbGV0ZUFsbFBhaXJTZWNvbmRzKEhhc2hUYWJsZVR5cGUm
IGNvbGxlY3Rpb24pCi0gICAgewotICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIEhhc2hUYWJsZVR5
cGU6OmNvbnN0X2l0ZXJhdG9yIGl0ZXJhdG9yOwotICAgICAgICBpdGVyYXRvciBlbmQgPSBjb2xs
ZWN0aW9uLmVuZCgpOwotICAgICAgICBmb3IgKGl0ZXJhdG9yIGl0ID0gY29sbGVjdGlvbi5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBkZWxldGUgaXQtPnNlY29uZDsKLSAg
ICB9Ci0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0
eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgogICAgIGlubGluZSB2b2lkIGRlbGV0ZUFsbFZhbHVlcyhj
b25zdCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+JiBjb2xsZWN0aW9uKQogICAgIHsKLSAgICAgICAg
ZGVsZXRlQWxsUGFpclNlY29uZHMoY29sbGVjdGlvbik7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgSGFzaFRhYmxlVHlwZT4KLSAgICB2b2lkIGRlbGV0ZUFsbFBhaXJGaXJzdHMoSGFz
aFRhYmxlVHlwZSYgY29sbGVjdGlvbikKLSAgICB7Ci0gICAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
SGFzaFRhYmxlVHlwZTo6Y29uc3RfaXRlcmF0b3IgaXRlcmF0b3I7CisgICAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6Y29uc3RfaXRlcmF0b3IgaXRlcmF0b3I7
CiAgICAgICAgIGl0ZXJhdG9yIGVuZCA9IGNvbGxlY3Rpb24uZW5kKCk7CiAgICAgICAgIGZvciAo
aXRlcmF0b3IgaXQgPSBjb2xsZWN0aW9uLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAg
ICAgICAgIGRlbGV0ZSBpdC0+Zmlyc3Q7CisgICAgICAgICAgICBkZWxldGUgaXQtPnZhbHVlOwog
ICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYs
IHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+CiAgICAgaW5saW5lIHZvaWQgZGVsZXRlQWxsS2V5cyhj
b25zdCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+JiBjb2xsZWN0aW9uKQogICAgIHsKLSAgICAgICAg
ZGVsZXRlQWxsUGFpckZpcnN0cyhjb2xsZWN0aW9uKTsKKyAgICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojpjb25zdF9pdGVyYXRvciBpdGVyYXRvcjsKKyAgICAg
ICAgaXRlcmF0b3IgZW5kID0gY29sbGVjdGlvbi5lbmQoKTsKKyAgICAgICAgZm9yIChpdGVyYXRv
ciBpdCA9IGNvbGxlY3Rpb24uYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAg
ZGVsZXRlIGl0LT5rZXk7CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaCBiL1NvdXJjZS9XVEYvd3Rm
L0hhc2hUYWJsZS5oCmluZGV4IDFjZTNjNWNmNjg4ZWYwYTgxZTEwNjFiYzZjZTI2MjBiZTNkOTgw
MGUuLjE2ZmRkOWU4MWQyODNiNjllNjFkNDZiYTZmOTVmZDEyZTI0NjljNjYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0hhc2hUYWJs
ZS5oCkBAIC0yODYsOCArMjg2LDggQEAgbmFtZXNwYWNlIFdURiB7CiAKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgdm9pZCBoYXNoVGFibGVTd2FwKEtleVZhbHVl
UGFpcjxULCBVPiYgYSwgS2V5VmFsdWVQYWlyPFQsIFU+JiBiKQogICAgIHsKLSAgICAgICAgc3dh
cChhLmZpcnN0LCBiLmZpcnN0KTsKLSAgICAgICAgc3dhcChhLnNlY29uZCwgYi5zZWNvbmQpOwor
ICAgICAgICBzd2FwKGEua2V5LCBiLmtleSk7CisgICAgICAgIHN3YXAoYS52YWx1ZSwgYi52YWx1
ZSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgYm9vbCB1c2VTd2FwPiBzdHJ1
Y3QgTW92ZXI7CkBAIC0xMjQ2LDcgKzEyNDYsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAg
ICAgIEFTU0VSVChlbnRyeSA9PSBpdC5tX3Bvc2l0aW9uKTsKICAgICAgICAgICAgICsrY291bnQ7
CiAKLSAgICAgICAgICAgIFZhbHVlQ2hlY2s8S2V5Pjo6Y2hlY2tDb25zaXN0ZW5jeShpdC0+Zmly
c3QpOworICAgICAgICAgICAgVmFsdWVDaGVjazxLZXk+OjpjaGVja0NvbnNpc3RlbmN5KGl0LT5r
ZXkpOwogICAgICAgICB9CiAKICAgICAgICAgQVNTRVJUKGNvdW50ID09IG1fa2V5Q291bnQpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvSGFzaFRyYWl0cy5oIGIvU291cmNlL1dURi93dGYv
SGFzaFRyYWl0cy5oCmluZGV4IGViZTc5NWViMWE4OTllMmM2MWVlNWRjMzY0NzM3YjI5Yjg1NzBh
MDkuLjczYmYyYmVhYTJlNWVmNGVmZWQ5ZGIwYzJkZWFmM2YxMTJlYjRhYWQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvd3RmL0hhc2hUcmFpdHMuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoVHJh
aXRzLmgKQEAgLTE5MywyMSArMTkzLDIwIEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICB9CiAK
ICAgICAgICAgS2V5VmFsdWVQYWlyKGNvbnN0IEtleVR5cGVBcmcmIGtleSwgY29uc3QgVmFsdWVU
eXBlQXJnJiB2YWx1ZSkKLSAgICAgICAgICAgIDogZmlyc3Qoa2V5KQotICAgICAgICAgICAgLCBz
ZWNvbmQodmFsdWUpCisgICAgICAgICAgICA6IGtleShrZXkpCisgICAgICAgICAgICAsIHZhbHVl
KHZhbHVlKQogICAgICAgICB7CiAgICAgICAgIH0KIAogICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgT3RoZXJLZXlUeXBlLCB0eXBlbmFtZSBPdGhlclZhbHVlVHlwZT4KICAgICAgICAgS2V5VmFs
dWVQYWlyKGNvbnN0IEtleVZhbHVlUGFpcjxPdGhlcktleVR5cGUsIE90aGVyVmFsdWVUeXBlPiYg
b3RoZXIpCi0gICAgICAgICAgICA6IGZpcnN0KG90aGVyLmZpcnN0KQotICAgICAgICAgICAgLCBz
ZWNvbmQob3RoZXIuc2Vjb25kKQorICAgICAgICAgICAgOiBrZXkob3RoZXIua2V5KQorICAgICAg
ICAgICAgLCB2YWx1ZShvdGhlci52YWx1ZSkKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAg
ICAgLy8gVE9ETzogUmVuYW1lIHRoZXNlIHRvIGtleSBhbmQgdmFsdWUuIFNlZSBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI3ODQuCi0gICAgICAgIEtleVR5cGVBcmcg
Zmlyc3Q7Ci0gICAgICAgIFZhbHVlVHlwZUFyZyBzZWNvbmQ7CisgICAgICAgIEtleVR5cGVBcmcg
a2V5OworICAgICAgICBWYWx1ZVR5cGVBcmcgdmFsdWU7CiAgICAgfTsKIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgVmFsdWVUcmFpdHNBcmc+CkBAIC0yMjQs
OCArMjIzLDggQEAgbmFtZXNwYWNlIFdURiB7CiAKICAgICAgICAgc3RhdGljIGNvbnN0IGludCBt
aW5pbXVtVGFibGVTaXplID0gS2V5VHJhaXRzOjptaW5pbXVtVGFibGVTaXplOwogCi0gICAgICAg
IHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShUcmFpdFR5cGUmIHNsb3QpIHsgS2V5
VHJhaXRzOjpjb25zdHJ1Y3REZWxldGVkVmFsdWUoc2xvdC5maXJzdCk7IH0KLSAgICAgICAgc3Rh
dGljIGJvb2wgaXNEZWxldGVkVmFsdWUoY29uc3QgVHJhaXRUeXBlJiB2YWx1ZSkgeyByZXR1cm4g
S2V5VHJhaXRzOjppc0RlbGV0ZWRWYWx1ZSh2YWx1ZS5maXJzdCk7IH0KKyAgICAgICAgc3RhdGlj
IHZvaWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKFRyYWl0VHlwZSYgc2xvdCkgeyBLZXlUcmFpdHM6
OmNvbnN0cnVjdERlbGV0ZWRWYWx1ZShzbG90LmtleSk7IH0KKyAgICAgICAgc3RhdGljIGJvb2wg
aXNEZWxldGVkVmFsdWUoY29uc3QgVHJhaXRUeXBlJiB2YWx1ZSkgeyByZXR1cm4gS2V5VHJhaXRz
Ojppc0RlbGV0ZWRWYWx1ZSh2YWx1ZS5rZXkpOyB9CiAgICAgfTsKIAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9N
ZXRhQWxsb2NhdG9yLmNwcCBiL1NvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3IuY3BwCmluZGV4
IDllZmNmZjJlYjEzZjcyY2NiNTk3NzUxYzg0M2JiNDI5NTFmYzc0YTMuLjczYjM2YWE0MjFmOGE5
NTUwN2FhZDk2YTNhNGJhZjgyYWUxMWQ1M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL01l
dGFBbGxvY2F0b3IuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3IuY3BwCkBA
IC0zMDgsOSArMzA4LDkgQEAgdm9pZCBNZXRhQWxsb2NhdG9yOjphZGRGcmVlU3BhY2Uodm9pZCog
c3RhcnQsIHNpemVfdCBzaXplSW5CeXRlcykKICAgICAgICAgLy8gV2UgaGF2ZSBzb21ldGhpbmcg
d2UgY2FuIGNvYWxlc2NlIHdpdGggb24gdGhlIGxlZnQuIFJlbW92ZSBpdCBmcm9tIHRoZSB0cmVl
LCBhbmQKICAgICAgICAgLy8gcmVtb3ZlIGl0cyBlbmQgZnJvbSB0aGUgZW5kIGFkZHJlc3MgbWFw
LgogICAgICAgICAKLSAgICAgICAgQVNTRVJUKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50
ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihsZWZ0TmVpZ2hib3ItPnNlY29uZC0+bV9zdGFydCkgKyBs
ZWZ0TmVpZ2hib3ItPnNlY29uZC0+bV9zaXplSW5CeXRlcykgPT0gbGVmdE5laWdoYm9yLT5maXJz
dCk7CisgICAgICAgIEFTU0VSVChyZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9j
YXN0PHVpbnRwdHJfdD4obGVmdE5laWdoYm9yLT52YWx1ZS0+bV9zdGFydCkgKyBsZWZ0TmVpZ2hi
b3ItPnZhbHVlLT5tX3NpemVJbkJ5dGVzKSA9PSBsZWZ0TmVpZ2hib3ItPmtleSk7CiAgICAgICAg
IAotICAgICAgICBGcmVlU3BhY2VOb2RlKiBsZWZ0Tm9kZSA9IGxlZnROZWlnaGJvci0+c2Vjb25k
OworICAgICAgICBGcmVlU3BhY2VOb2RlKiBsZWZ0Tm9kZSA9IGxlZnROZWlnaGJvci0+dmFsdWU7
CiAgICAgICAgIAogICAgICAgICB2b2lkKiBsZWZ0U3RhcnQgPSBsZWZ0Tm9kZS0+bV9zdGFydDsK
ICAgICAgICAgc2l6ZV90IGxlZnRTaXplID0gbGVmdE5vZGUtPm1fc2l6ZUluQnl0ZXM7CkBAIC0z
MjYsMTAgKzMyNiwxMCBAQCB2b2lkIE1ldGFBbGxvY2F0b3I6OmFkZEZyZWVTcGFjZSh2b2lkKiBz
dGFydCwgc2l6ZV90IHNpemVJbkJ5dGVzKQogICAgICAgICAgICAgLy8gRnJlZWluZyBzb21ldGhp
bmcgaW4gdGhlIG1pZGRsZSBvZiBmcmVlIGJsb2Nrcy4gQ29hbGVzY2UgYm90aCBsZWZ0IGFuZAog
ICAgICAgICAgICAgLy8gcmlnaHQsIHdoaWxzdCByZW1vdmluZyB0aGUgcmlnaHQgbmVpZ2hib3Ig
ZnJvbSB0aGUgbWFwcy4KICAgICAgICAgICAgIAotICAgICAgICAgICAgQVNTRVJUKHJpZ2h0TmVp
Z2hib3ItPnNlY29uZC0+bV9zdGFydCA9PSByaWdodE5laWdoYm9yLT5maXJzdCk7CisgICAgICAg
ICAgICBBU1NFUlQocmlnaHROZWlnaGJvci0+dmFsdWUtPm1fc3RhcnQgPT0gcmlnaHROZWlnaGJv
ci0+a2V5KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgRnJlZVNwYWNlTm9kZSogcmlnaHRO
b2RlID0gcmlnaHROZWlnaGJvci0+c2Vjb25kOwotICAgICAgICAgICAgdm9pZCogcmlnaHRTdGFy
dCA9IHJpZ2h0TmVpZ2hib3ItPmZpcnN0OworICAgICAgICAgICAgRnJlZVNwYWNlTm9kZSogcmln
aHROb2RlID0gcmlnaHROZWlnaGJvci0+dmFsdWU7CisgICAgICAgICAgICB2b2lkKiByaWdodFN0
YXJ0ID0gcmlnaHROZWlnaGJvci0+a2V5OwogICAgICAgICAgICAgc2l6ZV90IHJpZ2h0U2l6ZSA9
IHJpZ2h0Tm9kZS0+bV9zaXplSW5CeXRlczsKICAgICAgICAgICAgIHZvaWQqIHJpZ2h0RW5kID0g
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHJpZ2h0
U3RhcnQpICsgcmlnaHRTaXplKTsKICAgICAgICAgICAgIApAQCAtMzU2LDggKzM1Niw4IEBAIHZv
aWQgTWV0YUFsbG9jYXRvcjo6YWRkRnJlZVNwYWNlKHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUlu
Qnl0ZXMpCiAgICAgICAgIC8vIENhbm5vdCBjb2FsZXNjZSB3aXRoIGxlZnQ7IHRyeSB0byBzZWUg
aWYgd2UgY2FuIGNvYWxlc2NlIHdpdGggcmlnaHQuCiAgICAgICAgIAogICAgICAgICBpZiAocmln
aHROZWlnaGJvciAhPSBtX2ZyZWVTcGFjZVN0YXJ0QWRkcmVzc01hcC5lbmQoKSkgewotICAgICAg
ICAgICAgRnJlZVNwYWNlTm9kZSogcmlnaHROb2RlID0gcmlnaHROZWlnaGJvci0+c2Vjb25kOwot
ICAgICAgICAgICAgdm9pZCogcmlnaHRTdGFydCA9IHJpZ2h0TmVpZ2hib3ItPmZpcnN0OworICAg
ICAgICAgICAgRnJlZVNwYWNlTm9kZSogcmlnaHROb2RlID0gcmlnaHROZWlnaGJvci0+dmFsdWU7
CisgICAgICAgICAgICB2b2lkKiByaWdodFN0YXJ0ID0gcmlnaHROZWlnaGJvci0+a2V5OwogICAg
ICAgICAgICAgc2l6ZV90IHJpZ2h0U2l6ZSA9IHJpZ2h0Tm9kZS0+bV9zaXplSW5CeXRlczsKICAg
ICAgICAgICAgIHZvaWQqIHJpZ2h0RW5kID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRl
cnByZXRfY2FzdDx1aW50cHRyX3Q+KHJpZ2h0U3RhcnQpICsgcmlnaHRTaXplKTsKICAgICAgICAg
ICAgIApAQCAtNDAzLDcgKzQwMyw3IEBAIHZvaWQgTWV0YUFsbG9jYXRvcjo6aW5jcmVtZW50UGFn
ZU9jY3VwYW5jeSh2b2lkKiBhZGRyZXNzLCBzaXplX3Qgc2l6ZUluQnl0ZXMpCiAgICAgICAgICAg
ICBtX2J5dGVzQ29tbWl0dGVkICs9IG1fcGFnZVNpemU7CiAgICAgICAgICAgICBub3RpZnlOZWVk
UGFnZShyZWludGVycHJldF9jYXN0PHZvaWQqPihwYWdlIDw8IG1fbG9nUGFnZVNpemUpKTsKICAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICBpdGVyLT5zZWNvbmQrKzsKKyAgICAgICAgICAgIGl0
ZXItPnZhbHVlKys7CiAgICAgfQogfQogCkBAIC00MTUsNyArNDE1LDcgQEAgdm9pZCBNZXRhQWxs
b2NhdG9yOjpkZWNyZW1lbnRQYWdlT2NjdXBhbmN5KHZvaWQqIGFkZHJlc3MsIHNpemVfdCBzaXpl
SW5CeXRlcykKICAgICBmb3IgKHVpbnRwdHJfdCBwYWdlID0gZmlyc3RQYWdlOyBwYWdlIDw9IGxh
c3RQYWdlOyArK3BhZ2UpIHsKICAgICAgICAgSGFzaE1hcDx1aW50cHRyX3QsIHNpemVfdD46Oml0
ZXJhdG9yIGl0ZXIgPSBtX3BhZ2VPY2N1cGFuY3lNYXAuZmluZChwYWdlKTsKICAgICAgICAgQVNT
RVJUKGl0ZXIgIT0gbV9wYWdlT2NjdXBhbmN5TWFwLmVuZCgpKTsKLSAgICAgICAgaWYgKCEtLShp
dGVyLT5zZWNvbmQpKSB7CisgICAgICAgIGlmICghLS0oaXRlci0+dmFsdWUpKSB7CiAgICAgICAg
ICAgICBtX3BhZ2VPY2N1cGFuY3lNYXAucmVtb3ZlKGl0ZXIpOwogICAgICAgICAgICAgbV9ieXRl
c0NvbW1pdHRlZCAtPSBtX3BhZ2VTaXplOwogICAgICAgICAgICAgbm90aWZ5UGFnZUlzRnJlZShy
ZWludGVycHJldF9jYXN0PHZvaWQqPihwYWdlIDw8IG1fbG9nUGFnZVNpemUpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL1JlZkNvdW50ZWRMZWFrQ291bnRlci5jcHAgYi9Tb3VyY2UvV1RG
L3d0Zi9SZWZDb3VudGVkTGVha0NvdW50ZXIuY3BwCmluZGV4IDY3MGYyYTBjZWM1OTljNmQ0ZjMx
NjQ0ZWJlYjU4NzQxNWVmNDMyMWEuLjRhMDQ1MjgyNDg5ZmU5NWExN2UyMzkxOTc3M2QzN2NiMjQ0
MTBiZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1JlZkNvdW50ZWRMZWFrQ291bnRlci5j
cHAKKysrIGIvU291cmNlL1dURi93dGYvUmVmQ291bnRlZExlYWtDb3VudGVyLmNwcApAQCAtNzEs
NyArNzEsNyBAQCBSZWZDb3VudGVkTGVha0NvdW50ZXI6On5SZWZDb3VudGVkTGVha0NvdW50ZXIo
KQogICAgICAgICAgICAgTE9HKFJlZkNvdW50ZWRMZWFrcywgIkxFQUs6ICV1ICVzIiwgbV9jb3Vu
dCwgbV9kZXNjcmlwdGlvbik7CiAgICAgICAgIGVsc2UgaWYgKCFsb2dnZWRTdXBwcmVzc2lvblJl
YXNvbikgewogICAgICAgICAgICAgLy8gVGhpcyBsb2dzIG9ubHkgb25lIHJlYXNvbi4gTGF0ZXIg
d2UgY291bGQgY2hhbmdlIGl0IHNvIHdlIGxvZyBhbGwgdGhlIHJlYXNvbnMuCi0gICAgICAgICAg
ICBMT0coUmVmQ291bnRlZExlYWtzLCAiTm8gbGVhayBjaGVja2luZyBkb25lOiAlcyIsIGxlYWtN
ZXNzYWdlU3VwcHJlc3Npb25SZWFzb25zLT5iZWdpbigpLT5maXJzdCk7CisgICAgICAgICAgICBM
T0coUmVmQ291bnRlZExlYWtzLCAiTm8gbGVhayBjaGVja2luZyBkb25lOiAlcyIsIGxlYWtNZXNz
YWdlU3VwcHJlc3Npb25SZWFzb25zLT5iZWdpbigpLT5rZXkpOwogICAgICAgICAgICAgbG9nZ2Vk
U3VwcHJlc3Npb25SZWFzb24gPSB0cnVlOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dURi93dGYvUmVmUHRySGFzaE1hcC5oIGIvU291cmNlL1dURi93dGYvUmVmUHRySGFz
aE1hcC5oCmluZGV4IDVmYWU5MGU4Y2Q0NzExMjllODlkY2M4ZTdhZTY2MzhhZGExNTRkMzEuLjk1
NDE4MzdlMmE2ZjI5YjlmMDZjM2M5NTYyYTEzMzQ2YjAxZDRjZTEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvd3RmL1JlZlB0ckhhc2hNYXAuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9SZWZQdHJIYXNo
TWFwLmgKQEAgLTIxNiw3ICsyMTYsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgQWRkUmVz
dWx0IHJlc3VsdCA9IGlubGluZUFkZChrZXksIG1hcHBlZCk7CiAgICAgICAgIGlmICghcmVzdWx0
LmlzTmV3RW50cnkpIHsKICAgICAgICAgICAgIC8vIFRoZSBpbmxpbmVBZGQgY2FsbCBhYm92ZSBm
b3VuZCBhbiBleGlzdGluZyBoYXNoIHRhYmxlIGVudHJ5OyB3ZSBuZWVkIHRvIHNldCB0aGUgbWFw
cGVkIHZhbHVlLgotICAgICAgICAgICAgTWFwcGVkVHJhaXRzOjpzdG9yZShtYXBwZWQsIHJlc3Vs
dC5pdGVyYXRvci0+c2Vjb25kKTsKKyAgICAgICAgICAgIE1hcHBlZFRyYWl0czo6c3RvcmUobWFw
cGVkLCByZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgIH0KQEAgLTIyOCw3ICsyMjgsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAg
ICAgQWRkUmVzdWx0IHJlc3VsdCA9IGlubGluZUFkZChrZXksIG1hcHBlZCk7CiAgICAgICAgIGlm
ICghcmVzdWx0LmlzTmV3RW50cnkpIHsKICAgICAgICAgICAgIC8vIFRoZSBpbmxpbmVBZGQgY2Fs
bCBhYm92ZSBmb3VuZCBhbiBleGlzdGluZyBoYXNoIHRhYmxlIGVudHJ5OyB3ZSBuZWVkIHRvIHNl
dCB0aGUgbWFwcGVkIHZhbHVlLgotICAgICAgICAgICAgTWFwcGVkVHJhaXRzOjpzdG9yZShtYXBw
ZWQsIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKKyAgICAgICAgICAgIE1hcHBlZFRyYWl0czo6
c3RvcmUobWFwcGVkLCByZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKICAgICAgICAgfQogICAgICAg
ICByZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTI1NCw3ICsyNTQsNyBAQCBuYW1lc3BhY2UgV1RG
IHsKICAgICAgICAgVmFsdWVUeXBlKiBlbnRyeSA9IGNvbnN0X2Nhc3Q8SGFzaFRhYmxlVHlwZSY+
KG1faW1wbCkubG9va3VwKGtleSk7CiAgICAgICAgIGlmICghZW50cnkpCiAgICAgICAgICAgICBy
ZXR1cm4gTWFwcGVkVHJhaXRzOjpwZWVrKE1hcHBlZFRyYWl0czo6ZW1wdHlWYWx1ZSgpKTsKLSAg
ICAgICAgcmV0dXJuIE1hcHBlZFRyYWl0czo6cGVlayhlbnRyeS0+c2Vjb25kKTsKKyAgICAgICAg
cmV0dXJuIE1hcHBlZFRyYWl0czo6cGVlayhlbnRyeS0+dmFsdWUpOwogICAgIH0KIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5
cGVuYW1lIE1hcHBlZFRyYWl0cz4KQEAgLTI2NCw3ICsyNjQsNyBAQCBuYW1lc3BhY2UgV1RGIHsK
ICAgICAgICAgVmFsdWVUeXBlKiBlbnRyeSA9IGNvbnN0X2Nhc3Q8SGFzaFRhYmxlVHlwZSY+KG1f
aW1wbCkudGVtcGxhdGUgbG9va3VwPFRyYW5zbGF0b3I+KGtleSk7CiAgICAgICAgIGlmICghZW50
cnkpCiAgICAgICAgICAgICByZXR1cm4gTWFwcGVkVHJhaXRzOjpwZWVrKE1hcHBlZFRyYWl0czo6
ZW1wdHlWYWx1ZSgpKTsKLSAgICAgICAgcmV0dXJuIE1hcHBlZFRyYWl0czo6cGVlayhlbnRyeS0+
c2Vjb25kKTsKKyAgICAgICAgcmV0dXJuIE1hcHBlZFRyYWl0czo6cGVlayhlbnRyeS0+dmFsdWUp
OwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1l
IFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0cz4KQEAgLTMwOCw3ICszMDgsNyBA
QCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgaXRlcmF0b3IgaXQgPSBmaW5kKGtleSk7CiAgICAg
ICAgIGlmIChpdCA9PSBlbmQoKSkKICAgICAgICAgICAgIHJldHVybiBNYXBwZWRUcmFpdHM6OnBh
c3NPdXQoTWFwcGVkVHJhaXRzOjplbXB0eVZhbHVlKCkpOwotICAgICAgICBNYXBwZWRQYXNzT3V0
VHlwZSByZXN1bHQgPSBNYXBwZWRUcmFpdHM6OnBhc3NPdXQoaXQtPnNlY29uZCk7CisgICAgICAg
IE1hcHBlZFBhc3NPdXRUeXBlIHJlc3VsdCA9IE1hcHBlZFRyYWl0czo6cGFzc091dChpdC0+dmFs
dWUpOwogICAgICAgICByZW1vdmUoaXQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0K
QEAgLTMyMCw3ICszMjAsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgaXRlcmF0b3IgaXQg
PSBmaW5kKGtleSk7CiAgICAgICAgIGlmIChpdCA9PSBlbmQoKSkKICAgICAgICAgICAgIHJldHVy
biBNYXBwZWRUcmFpdHM6OnBhc3NPdXQoTWFwcGVkVHJhaXRzOjplbXB0eVZhbHVlKCkpOwotICAg
ICAgICBNYXBwZWRQYXNzT3V0VHlwZSByZXN1bHQgPSBNYXBwZWRUcmFpdHM6OnBhc3NPdXQoaXQt
PnNlY29uZCk7CisgICAgICAgIE1hcHBlZFBhc3NPdXRUeXBlIHJlc3VsdCA9IE1hcHBlZFRyYWl0
czo6cGFzc091dChpdC0+dmFsdWUpOwogICAgICAgICByZW1vdmUoaXQpOwogICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1NwZWN0cnVtLmgg
Yi9Tb3VyY2UvV1RGL3d0Zi9TcGVjdHJ1bS5oCmluZGV4IDVlN2E0ODRjZDg3NjZiY2FmMjJjYTRj
OTNkZGNlOTcwZGQyYmEyMTMuLjNlNmZhNGE2MzNmYWQ0MmRlYjRkYzQ4MzMyNTkyMzQxZTg0YjNh
MDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1NwZWN0cnVtLmgKKysrIGIvU291cmNlL1dU
Ri93dGYvU3BlY3RydW0uaApAQCAtNDQsNyArNDQsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAg
ICB0eXBlbmFtZSBIYXNoTWFwPFQsIHVuc2lnbmVkIGxvbmc+OjpBZGRSZXN1bHQgcmVzdWx0ID0g
bV9tYXAuYWRkKGtleSwgY291bnQpOwogICAgICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQot
ICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgKz0gY291bnQ7CisgICAgICAgICAg
ICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlICs9IGNvdW50OwogICAgIH0KICAgICAKICAgICB1bnNp
Z25lZCBsb25nIGdldChjb25zdCBUJiBrZXkpIGNvbnN0CkBAIC01Miw3ICs1Miw3IEBAIHB1Ymxp
YzoKICAgICAgICAgY29uc3RfaXRlcmF0b3IgaXRlciA9IG1fbWFwLmZpbmQoa2V5KTsKICAgICAg
ICAgaWYgKGl0ZXIgPT0gbV9tYXAuZW5kKCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAg
ICAgcmV0dXJuIGl0ZXItPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGl0ZXItPnZhbHVlOwogICAg
IH0KICAgICAKICAgICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIG1fbWFwLmJlZ2luKCk7IH0K
QEAgLTg4LDcgKzg4LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgVmVjdG9yPEtleUFuZENv
dW50PiBsaXN0OwogICAgICAgICBmb3IgKGNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBiZWdpbigpOyBp
dGVyICE9IGVuZCgpOyArK2l0ZXIpCi0gICAgICAgICAgICBsaXN0LmFwcGVuZChLZXlBbmRDb3Vu
dChpdGVyLT5maXJzdCwgaXRlci0+c2Vjb25kKSk7CisgICAgICAgICAgICBsaXN0LmFwcGVuZChL
ZXlBbmRDb3VudChpdGVyLT5rZXksIGl0ZXItPnZhbHVlKSk7CiAgICAgICAgIAogICAgICAgICBz
dGQ6OnNvcnQobGlzdC5iZWdpbigpLCBsaXN0LmVuZCgpKTsKICAgICAgICAgcmV0dXJuIGxpc3Q7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHAgYi9Tb3Vy
Y2UvV1RGL3d0Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHAKaW5kZXggMjI2ZWNiZDQ4YzAyOTg3OWQx
MWM5NTIzZDUwNTM0NGU1NjgwZjg1OS4uZGRjMzNiNGFjZjkyYTVjNjQ3N2ZiMjMzODYyMjhkY2Vh
MTcwODMyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nUHRocmVhZHMuY3Bw
CisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcApAQCAtMTUwLDggKzE1
MCw4IEBAIHN0YXRpYyBUaHJlYWRJZGVudGlmaWVyIGlkZW50aWZpZXJCeVB0aHJlYWRIYW5kbGUo
Y29uc3QgcHRocmVhZF90JiBwdGhyZWFkSGFuZGxlCiAKICAgICBUaHJlYWRNYXA6Oml0ZXJhdG9y
IGkgPSB0aHJlYWRNYXAoKS5iZWdpbigpOwogICAgIGZvciAoOyBpICE9IHRocmVhZE1hcCgpLmVu
ZCgpOyArK2kpIHsKLSAgICAgICAgaWYgKHB0aHJlYWRfZXF1YWwoaS0+c2Vjb25kLT5wdGhyZWFk
SGFuZGxlKCksIHB0aHJlYWRIYW5kbGUpICYmICFpLT5zZWNvbmQtPmhhc0V4aXRlZCgpKQotICAg
ICAgICAgICAgcmV0dXJuIGktPmZpcnN0OworICAgICAgICBpZiAocHRocmVhZF9lcXVhbChpLT52
YWx1ZS0+cHRocmVhZEhhbmRsZSgpLCBwdGhyZWFkSGFuZGxlKSAmJiAhaS0+dmFsdWUtPmhhc0V4
aXRlZCgpKQorICAgICAgICAgICAgcmV0dXJuIGktPmtleTsKICAgICB9CiAKICAgICByZXR1cm4g
MDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vR2VvbG9j
YXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlv
bi5jcHAKaW5kZXggNTdjYWYzMTUyYWNjODlkNjk3YWE4ZjY0NWNjOGYwMTM1OWJjYjE1Mi4uYTNl
ZjQwMjZkZDA5OWFhYzcxMDY0NjQ5NGJkY2Q1Yjk2ODU1ZGEzZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlvbi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlvbi5jcHAKQEAgLTE5Miw3ICsx
OTIsNyBAQCBHZW9sb2NhdGlvbjo6R2VvTm90aWZpZXIqIEdlb2xvY2F0aW9uOjpXYXRjaGVyczo6
ZmluZChpbnQgaWQpCiAgICAgSWRUb05vdGlmaWVyTWFwOjppdGVyYXRvciBpdGVyID0gbV9pZFRv
Tm90aWZpZXJNYXAuZmluZChpZCk7CiAgICAgaWYgKGl0ZXIgPT0gbV9pZFRvTm90aWZpZXJNYXAu
ZW5kKCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBpdGVyLT5zZWNvbmQuZ2V0KCk7
CisgICAgcmV0dXJuIGl0ZXItPnZhbHVlLmdldCgpOwogfQogCiB2b2lkIEdlb2xvY2F0aW9uOjpX
YXRjaGVyczo6cmVtb3ZlKGludCBpZCkKQEAgLTIwMSw3ICsyMDEsNyBAQCB2b2lkIEdlb2xvY2F0
aW9uOjpXYXRjaGVyczo6cmVtb3ZlKGludCBpZCkKICAgICBJZFRvTm90aWZpZXJNYXA6Oml0ZXJh
dG9yIGl0ZXIgPSBtX2lkVG9Ob3RpZmllck1hcC5maW5kKGlkKTsKICAgICBpZiAoaXRlciA9PSBt
X2lkVG9Ob3RpZmllck1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIG1fbm90aWZpZXJU
b0lkTWFwLnJlbW92ZShpdGVyLT5zZWNvbmQpOworICAgIG1fbm90aWZpZXJUb0lkTWFwLnJlbW92
ZShpdGVyLT52YWx1ZSk7CiAgICAgbV9pZFRvTm90aWZpZXJNYXAucmVtb3ZlKGl0ZXIpOwogfQog
CkBAIC0yMTAsNyArMjEwLDcgQEAgdm9pZCBHZW9sb2NhdGlvbjo6V2F0Y2hlcnM6OnJlbW92ZShH
ZW9Ob3RpZmllciogbm90aWZpZXIpCiAgICAgTm90aWZpZXJUb0lkTWFwOjppdGVyYXRvciBpdGVy
ID0gbV9ub3RpZmllclRvSWRNYXAuZmluZChub3RpZmllcik7CiAgICAgaWYgKGl0ZXIgPT0gbV9u
b3RpZmllclRvSWRNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBtX2lkVG9Ob3RpZmll
ck1hcC5yZW1vdmUoaXRlci0+c2Vjb25kKTsKKyAgICBtX2lkVG9Ob3RpZmllck1hcC5yZW1vdmUo
aXRlci0+dmFsdWUpOwogICAgIG1fbm90aWZpZXJUb0lkTWFwLnJlbW92ZShpdGVyKTsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2Uu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwCmlu
ZGV4IGFhOTNlNmE4MmM3NTQ4Yzk4YjE5OTQyNWFhMDBiMmNlYzM5ZTg4OTMuLjgxMWNmNGEyZjY5
NzdmODMyYWYzMWE4YzIwNzAyNjkxOTcwNmJiMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAKQEAgLTEwOCw3ICsxMDgsNyBAQCBQYXNz
UmVmUHRyPERPTVN0cmluZ0xpc3Q+IElEQkRhdGFiYXNlOjpvYmplY3RTdG9yZU5hbWVzKCkgY29u
c3QKIHsKICAgICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4gb2JqZWN0U3RvcmVOYW1lcyA9IERPTVN0
cmluZ0xpc3Q6OmNyZWF0ZSgpOwogICAgIGZvciAoSURCRGF0YWJhc2VNZXRhZGF0YTo6T2JqZWN0
U3RvcmVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuYmVn
aW4oKTsgaXQgIT0gbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuZW5kKCk7ICsraXQpCi0gICAgICAg
IG9iamVjdFN0b3JlTmFtZXMtPmFwcGVuZChpdC0+Zmlyc3QpOworICAgICAgICBvYmplY3RTdG9y
ZU5hbWVzLT5hcHBlbmQoaXQtPmtleSk7CiAgICAgb2JqZWN0U3RvcmVOYW1lcy0+c29ydCgpOwog
ICAgIHJldHVybiBvYmplY3RTdG9yZU5hbWVzLnJlbGVhc2UoKTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1w
bC5jcHAKaW5kZXggODExMGMyNGMxM2IzYzQ2M2VlMzdiMjBkNGNmZmE3MTI0MjQ0YjYzOS4uNzUz
ODA3ZmQ4ZTg3ZmY2NDQ1YzU2MTViYTU4NTI1MWQxZDk4ZDg0YiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1w
bC5jcHAKQEAgLTE1OSw3ICsxNTksNyBAQCBJREJEYXRhYmFzZU1ldGFkYXRhIElEQkRhdGFiYXNl
QmFja2VuZEltcGw6Om1ldGFkYXRhKCkgY29uc3QKIHsKICAgICBJREJEYXRhYmFzZU1ldGFkYXRh
IG1ldGFkYXRhKG1fbmFtZSwgbV92ZXJzaW9uLCBtX2ludFZlcnNpb24pOwogICAgIGZvciAoT2Jq
ZWN0U3RvcmVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9vYmplY3RTdG9yZXMuYmVnaW4oKTsg
aXQgIT0gbV9vYmplY3RTdG9yZXMuZW5kKCk7ICsraXQpCi0gICAgICAgIG1ldGFkYXRhLm9iamVj
dFN0b3Jlcy5zZXQoaXQtPmZpcnN0LCBpdC0+c2Vjb25kLT5tZXRhZGF0YSgpKTsKKyAgICAgICAg
bWV0YWRhdGEub2JqZWN0U3RvcmVzLnNldChpdC0+a2V5LCBpdC0+dmFsdWUtPm1ldGFkYXRhKCkp
OwogICAgIHJldHVybiBtZXRhZGF0YTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKaW5kZXggOGRh
NWMwMmU0MjNmNmY2NGU1Nzk3MzBkYjczZmEyOWVjMmJlNDYwNi4uMTYwNjY5Y2QyNmE5ODUzMGRj
NDgzYzcwOTg1MTRhNDZjMzg3YTI1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwCkBAIC0xMDcsNyAr
MTA3LDcgQEAgdm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6OmRlbGV0ZURhdGFiYXNlKGNvbnN0
IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWwKICAgICBpZiAoaXQgIT0gbV9kYXRhYmFz
ZUJhY2tlbmRNYXAuZW5kKCkpIHsKICAgICAgICAgLy8gSWYgdGhlcmUgYXJlIGFueSBjb25uZWN0
aW9ucyB0byB0aGUgZGF0YWJhc2UsIGRpcmVjdGx5IGRlbGV0ZSB0aGUKICAgICAgICAgLy8gZGF0
YWJhc2UuCi0gICAgICAgIGl0LT5zZWNvbmQtPmRlbGV0ZURhdGFiYXNlKGNhbGxiYWNrcyk7Cisg
ICAgICAgIGl0LT52YWx1ZS0+ZGVsZXRlRGF0YWJhc2UoY2FsbGJhY2tzKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIApAQCAtMTM0LDcgKzEzNCw3IEBAIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0
b3JlPiBJREJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW5CYWNraW5nU3RvcmUoUGFzc1JlZlB0cjxT
CiAgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlOwogICAgIElEQkJhY2tp
bmdTdG9yZU1hcDo6aXRlcmF0b3IgaXQyID0gbV9iYWNraW5nU3RvcmVNYXAuZmluZChmaWxlSWRl
bnRpZmllcik7CiAgICAgaWYgKGl0MiAhPSBtX2JhY2tpbmdTdG9yZU1hcC5lbmQoKSkKLSAgICAg
ICAgYmFja2luZ1N0b3JlID0gaXQyLT5zZWNvbmQ7CisgICAgICAgIGJhY2tpbmdTdG9yZSA9IGl0
Mi0+dmFsdWU7CiAgICAgZWxzZSB7CiAjaWYgVVNFKExFVkVMREIpCiAgICAgICAgIGJhY2tpbmdT
dG9yZSA9IElEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW4oc2VjdXJpdHlPcmlnaW4uZ2V0KCks
IGRhdGFEaXJlY3RvcnksIGZpbGVJZGVudGlmaWVyLCB0aGlzKTsKQEAgLTE3Miw3ICsxNzIsNyBA
QCB2b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6b3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIGlu
dDY0X3QgdmVyc2lvbiwgUGFzc1JlZlB0cgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAgICAgfSBlbHNlCi0gICAgICAgIGRhdGFiYXNlQmFja2VuZCA9IGl0LT5zZWNvbmQ7CisgICAg
ICAgIGRhdGFiYXNlQmFja2VuZCA9IGl0LT52YWx1ZTsKIAogICAgIGlmICh2ZXJzaW9uID09IElE
QkRhdGFiYXNlTWV0YWRhdGE6Ok5vSW50VmVyc2lvbikKICAgICAgICAgZGF0YWJhc2VCYWNrZW5k
LT5vcGVuQ29ubmVjdGlvbihjYWxsYmFja3MpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCmluZGV4IGMzMGEyNTNhNDA2NTNlODk2
YjI0ZDNmNzU4ZDdjYTU4OTM2MTI4OGMuLjBiZmRmOTFlZjAzZDU0NDc2ODQyMzc1M2RhYWEzMmE1
ZDBkZTg3YjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
Qk9iamVjdFN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJPYmplY3RTdG9yZS5jcHAKQEAgLTY2LDcgKzY2LDcgQEAgUGFzc1JlZlB0cjxET01TdHJpbmdM
aXN0PiBJREJPYmplY3RTdG9yZTo6aW5kZXhOYW1lcygpIGNvbnN0CiAgICAgSURCX1RSQUNFKCJJ
REJPYmplY3RTdG9yZTo6aW5kZXhOYW1lcyIpOwogICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiBp
bmRleE5hbWVzID0gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7CiAgICAgZm9yIChJREJPYmplY3RT
dG9yZU1ldGFkYXRhOjpJbmRleE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX21ldGFkYXRhLmlu
ZGV4ZXMuYmVnaW4oKTsgaXQgIT0gbV9tZXRhZGF0YS5pbmRleGVzLmVuZCgpOyArK2l0KQotICAg
ICAgICBpbmRleE5hbWVzLT5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgaW5kZXhOYW1lcy0+
YXBwZW5kKGl0LT5rZXkpOwogICAgIGluZGV4TmFtZXMtPnNvcnQoKTsKICAgICByZXR1cm4gaW5k
ZXhOYW1lcy5yZWxlYXNlKCk7CiB9CkBAIC0yMDYsOCArMjA2LDggQEAgUGFzc1JlZlB0cjxJREJS
ZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0KElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFj
ZTo6UHV0TW8KICAgICBWZWN0b3I8SW5kZXhLZXlzPiBpbmRleEtleXM7CiAgICAgZm9yIChJREJP
YmplY3RTdG9yZU1ldGFkYXRhOjpJbmRleE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX21ldGFk
YXRhLmluZGV4ZXMuYmVnaW4oKTsgaXQgIT0gbV9tZXRhZGF0YS5pbmRleGVzLmVuZCgpOyArK2l0
KSB7CiAgICAgICAgIEluZGV4S2V5cyBrZXlzOwotICAgICAgICBnZW5lcmF0ZUluZGV4S2V5c0Zv
clZhbHVlKGl0LT5zZWNvbmQsIHZhbHVlLCAma2V5cyk7Ci0gICAgICAgIGluZGV4TmFtZXMuYXBw
ZW5kKGl0LT5maXJzdCk7CisgICAgICAgIGdlbmVyYXRlSW5kZXhLZXlzRm9yVmFsdWUoaXQtPnZh
bHVlLCB2YWx1ZSwgJmtleXMpOworICAgICAgICBpbmRleE5hbWVzLmFwcGVuZChpdC0+a2V5KTsK
ICAgICAgICAgaW5kZXhLZXlzLmFwcGVuZChrZXlzKTsKICAgICB9CiAgICAgQVNTRVJUKGluZGV4
S2V5cy5zaXplKCkgPT0gaW5kZXhOYW1lcy5zaXplKCkpOwpAQCAtNDQ4LDcgKzQ0OCw3IEBAIFBh
c3NSZWZQdHI8SURCSW5kZXg+IElEQk9iamVjdFN0b3JlOjppbmRleChjb25zdCBTdHJpbmcmIG5h
bWUsIEV4Y2VwdGlvbkNvZGUmIGVjCiAKICAgICBJREJJbmRleE1hcDo6aXRlcmF0b3IgaXQgPSBt
X2luZGV4TWFwLmZpbmQobmFtZSk7CiAgICAgaWYgKGl0ICE9IG1faW5kZXhNYXAuZW5kKCkpCi0g
ICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwogCiAg
ICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gaW5kZXhCYWNrZW5kID0gbV9iYWNr
ZW5kLT5pbmRleChuYW1lLCBlYyk7CiAgICAgQVNTRVJUKCFpbmRleEJhY2tlbmQgIT0gIWVjKTsg
Ly8gSWYgd2UgZGlkbid0IGdldCBhbiBpbmRleCwgd2Ugc2hvdWxkIGhhdmUgZ290dGVuIGFuIGV4
Y2VwdGlvbiBjb2RlLiBBbmQgdmljZSB2ZXJzYS4KQEAgLTQ1OCw3ICs0NTgsNyBAQCBQYXNzUmVm
UHRyPElEQkluZGV4PiBJREJPYmplY3RTdG9yZTo6aW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBF
eGNlcHRpb25Db2RlJiBlYwogICAgIElEQk9iamVjdFN0b3JlTWV0YWRhdGE6OkluZGV4TWFwOjpj
b25zdF9pdGVyYXRvciBtZGl0ID0gbV9tZXRhZGF0YS5pbmRleGVzLmZpbmQobmFtZSk7CiAgICAg
QVNTRVJUKG1kaXQgIT0gbV9tZXRhZGF0YS5pbmRleGVzLmVuZCgpKTsKIAotICAgIFJlZlB0cjxJ
REJJbmRleD4gaW5kZXggPSBJREJJbmRleDo6Y3JlYXRlKG1kaXQtPnNlY29uZCwgaW5kZXhCYWNr
ZW5kLnJlbGVhc2UoKSwgdGhpcywgbV90cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgUmVmUHRyPElE
QkluZGV4PiBpbmRleCA9IElEQkluZGV4OjpjcmVhdGUobWRpdC0+dmFsdWUsIGluZGV4QmFja2Vu
ZC5yZWxlYXNlKCksIHRoaXMsIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwogICAgIG1faW5kZXhNYXAu
c2V0KG5hbWUsIGluZGV4KTsKICAgICByZXR1cm4gaW5kZXgucmVsZWFzZSgpOwogfQpAQCAtNDgy
LDcgKzQ4Miw3IEBAIHZvaWQgSURCT2JqZWN0U3RvcmU6OmRlbGV0ZUluZGV4KGNvbnN0IFN0cmlu
ZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgaWYgKCFlYykgewogICAgICAgICBJREJJ
bmRleE1hcDo6aXRlcmF0b3IgaXQgPSBtX2luZGV4TWFwLmZpbmQobmFtZSk7CiAgICAgICAgIGlm
IChpdCAhPSBtX2luZGV4TWFwLmVuZCgpKSB7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLT5tYXJr
RGVsZXRlZCgpOworICAgICAgICAgICAgaXQtPnZhbHVlLT5tYXJrRGVsZXRlZCgpOwogICAgICAg
ICAgICAgbV9pbmRleE1hcC5yZW1vdmUobmFtZSk7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsLmNwcAppbmRleCBiNmQwZWEwYTUwZGUyMGRkZWFjNTE1ZjY0ZjZkODU5M2E2NzI0
M2ZhLi4wZWI0ODA0ODM4MWZiN2M3YTNkNmVjN2FhZDgxYTE5NzFiYzQ5MGE1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsLmNwcApAQCAtNzQsNyArNzQsNyBAQCBJREJPYmplY3RTdG9yZU1ldGFk
YXRhIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Om1ldGFkYXRhKCkgY29uc3QKIHsKICAgICBJ
REJPYmplY3RTdG9yZU1ldGFkYXRhIG1ldGFkYXRhKG1fbmFtZSwgbV9rZXlQYXRoLCBtX2F1dG9J
bmNyZW1lbnQpOwogICAgIGZvciAoSW5kZXhNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9pbmRl
eGVzLmJlZ2luKCk7IGl0ICE9IG1faW5kZXhlcy5lbmQoKTsgKytpdCkKLSAgICAgICAgbWV0YWRh
dGEuaW5kZXhlcy5zZXQoaXQtPmZpcnN0LCBpdC0+c2Vjb25kLT5tZXRhZGF0YSgpKTsKKyAgICAg
ICAgbWV0YWRhdGEuaW5kZXhlcy5zZXQoaXQtPmtleSwgaXQtPnZhbHVlLT5tZXRhZGF0YSgpKTsK
ICAgICByZXR1cm4gbWV0YWRhdGE7CiB9CiAKQEAgLTIzMCwxMSArMjMwLDExIEBAIHN0YXRpYyBi
b29sIG1ha2VJbmRleFdyaXRlcnMoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCogb2JqZWN0U3Rv
cmUsIFBhc3NSZWZQdHI8CiAKICAgICBmb3IgKElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Oklu
ZGV4TWFwOjppdGVyYXRvciBpdCA9IG9iamVjdFN0b3JlLT5pdGVySW5kZXhlc0JlZ2luKCk7IGl0
ICE9IG9iamVjdFN0b3JlLT5pdGVySW5kZXhlc0VuZCgpOyArK2l0KSB7CiAKLSAgICAgICAgY29u
c3QgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+JiBpbmRleCA9IGl0LT5zZWNvbmQ7CisgICAg
ICAgIGNvbnN0IFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiYgaW5kZXggPSBpdC0+dmFsdWU7
CiAgICAgICAgIGlmICghaW5kZXgtPmhhc1ZhbGlkSWQoKSkKICAgICAgICAgICAgIGNvbnRpbnVl
OyAvLyBUaGUgaW5kZXggb2JqZWN0IGhhcyBiZWVuIGNyZWF0ZWQsIGJ1dCBkb2VzIG5vdCBleGlz
dCBpbiB0aGUgZGF0YWJhc2UgeWV0LgogCi0gICAgICAgIElEQk9iamVjdFN0b3JlQmFja2VuZElu
dGVyZmFjZTo6SW5kZXhLZXlzIGtleXMgPSBpbmRleEtleU1hcC5nZXQoaXQtPmZpcnN0KTsKKyAg
ICAgICAgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleXMga2V5cyA9IGlu
ZGV4S2V5TWFwLmdldChpdC0+a2V5KTsKICAgICAgICAgLy8gSWYgdGhlIG9iamVjdFN0b3JlIGlz
IHVzaW5nIGF1dG9JbmNyZW1lbnQsIHRoZW4gYW55IGluZGV4ZXMgd2l0aCBhbiBpZGVudGljYWwg
a2V5UGF0aCBuZWVkIHRvIGFsc28gdXNlIHRoZSBwcmltYXJ5IChnZW5lcmF0ZWQpIGtleSBhcyBh
IGtleS4KICAgICAgICAgaWYgKGtleVdhc0dlbmVyYXRlZCkgewogICAgICAgICAgICAgY29uc3Qg
SURCS2V5UGF0aCYgaW5kZXhLZXlQYXRoID0gaW5kZXgtPmtleVBhdGgoKTsKQEAgLTQwNCwxMCAr
NDA0LDEwIEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW50ZXJuYWwo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQCiAgICAgICAgICAgICByZWNvcmRJZGVu
dGlmaWVyID0gYmFja2luZ1N0b3JlQ3Vyc29yLT5vYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIo
KTsKIAogICAgICAgICAgICAgZm9yIChJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpJbmRleE1h
cDo6aXRlcmF0b3IgaXQgPSBvYmplY3RTdG9yZS0+bV9pbmRleGVzLmJlZ2luKCk7IGl0ICE9IG9i
amVjdFN0b3JlLT5tX2luZGV4ZXMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgICAgICAgICBpZiAo
IWl0LT5zZWNvbmQtPmhhc1ZhbGlkSWQoKSkKKyAgICAgICAgICAgICAgICBpZiAoIWl0LT52YWx1
ZS0+aGFzVmFsaWRJZCgpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgLy8gVGhlIGlu
ZGV4IG9iamVjdCBoYXMgYmVlbiBjcmVhdGVkLCBidXQgZG9lcyBub3QgZXhpc3QgaW4gdGhlIGRh
dGFiYXNlIHlldC4KIAotICAgICAgICAgICAgICAgIGJvb2wgc3VjY2VzcyA9IG9iamVjdFN0b3Jl
LT5iYWNraW5nU3RvcmUoKS0+ZGVsZXRlSW5kZXhEYXRhRm9yUmVjb3JkKG9iamVjdFN0b3JlLT5k
YXRhYmFzZUlkKCksIG9iamVjdFN0b3JlLT5pZCgpLCBpdC0+c2Vjb25kLT5pZCgpLCByZWNvcmRJ
ZGVudGlmaWVyLmdldCgpKTsKKyAgICAgICAgICAgICAgICBib29sIHN1Y2Nlc3MgPSBvYmplY3RT
dG9yZS0+YmFja2luZ1N0b3JlKCktPmRlbGV0ZUluZGV4RGF0YUZvclJlY29yZChvYmplY3RTdG9y
ZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+aWQoKSwgaXQtPnZhbHVlLT5pZCgpLCByZWNv
cmRJZGVudGlmaWVyLmdldCgpKTsKICAgICAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nl
c3MsIHN1Y2Nlc3MpOwogICAgICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAKaW5kZXggMjFlNWYzMjhlMzQ1NTM4
OWNlMDg1NjYyMDcwZWVlYTE0NjU1ZjYyOC4uYjUzNDY3NzQxYjQ0MjdmMWQ2Y2QwNDlmOWEwNDYx
OWEwNTM2YjFhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCVHJhbnNhY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQlRyYW5zYWN0aW9uLmNwcApAQCAtMTUxLDcgKzE1MSw3IEBAIFBhc3NSZWZQdHI8SURCT2Jq
ZWN0U3RvcmU+IElEQlRyYW5zYWN0aW9uOjpvYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUs
IEV4Y2VwCiAKICAgICBJREJPYmplY3RTdG9yZU1hcDo6aXRlcmF0b3IgaXQgPSBtX29iamVjdFN0
b3JlTWFwLmZpbmQobmFtZSk7CiAgICAgaWYgKGl0ICE9IG1fb2JqZWN0U3RvcmVNYXAuZW5kKCkp
Ci0gICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwog
CiAgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gb2JqZWN0U3RvcmVC
YWNrZW5kID0gbV9iYWNrZW5kLT5vYmplY3RTdG9yZShuYW1lLCBlYyk7CiAgICAgQVNTRVJUKCFv
YmplY3RTdG9yZUJhY2tlbmQgIT0gIWVjKTsgLy8gSWYgd2UgZGlkbid0IGdldCBhIHN0b3JlLCB3
ZSBzaG91bGQgaGF2ZSBnb3R0ZW4gYW4gZXhjZXB0aW9uIGNvZGUuIEFuZCB2aWNlIHZlcnNhLgpA
QCAtMTYyLDcgKzE2Miw3IEBAIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IElEQlRyYW5zYWN0
aW9uOjpvYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwCiAgICAgSURCRGF0YWJh
c2VNZXRhZGF0YTo6T2JqZWN0U3RvcmVNYXA6OmNvbnN0X2l0ZXJhdG9yIG1kaXQgPSBtZXRhZGF0
YS5vYmplY3RTdG9yZXMuZmluZChuYW1lKTsKICAgICBBU1NFUlQobWRpdCAhPSBtZXRhZGF0YS5v
YmplY3RTdG9yZXMuZW5kKCkpOwogCi0gICAgUmVmUHRyPElEQk9iamVjdFN0b3JlPiBvYmplY3RT
dG9yZSA9IElEQk9iamVjdFN0b3JlOjpjcmVhdGUobWRpdC0+c2Vjb25kLCBvYmplY3RTdG9yZUJh
Y2tlbmQsIHRoaXMpOworICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZT4gb2JqZWN0U3RvcmUgPSBJ
REJPYmplY3RTdG9yZTo6Y3JlYXRlKG1kaXQtPnZhbHVlLCBvYmplY3RTdG9yZUJhY2tlbmQsIHRo
aXMpOwogICAgIG9iamVjdFN0b3JlQ3JlYXRlZChuYW1lLCBvYmplY3RTdG9yZSk7CiAgICAgcmV0
dXJuIG9iamVjdFN0b3JlLnJlbGVhc2UoKTsKIH0KQEAgLTE4Miw3ICsxODIsNyBAQCB2b2lkIElE
QlRyYW5zYWN0aW9uOjpvYmplY3RTdG9yZURlbGV0ZWQoY29uc3QgU3RyaW5nJiBuYW1lKQogICAg
IEFTU0VSVChpc1ZlcnNpb25DaGFuZ2UoKSk7CiAgICAgSURCT2JqZWN0U3RvcmVNYXA6Oml0ZXJh
dG9yIGl0ID0gbV9vYmplY3RTdG9yZU1hcC5maW5kKG5hbWUpOwogICAgIGlmIChpdCAhPSBtX29i
amVjdFN0b3JlTWFwLmVuZCgpKSB7Ci0gICAgICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZT4gb2Jq
ZWN0U3RvcmUgPSBpdC0+c2Vjb25kOworICAgICAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmU+IG9i
amVjdFN0b3JlID0gaXQtPnZhbHVlOwogICAgICAgICBtX29iamVjdFN0b3JlTWFwLnJlbW92ZShu
YW1lKTsKICAgICAgICAgb2JqZWN0U3RvcmUtPm1hcmtEZWxldGVkKCk7CiAgICAgICAgIG1fb2Jq
ZWN0U3RvcmVDbGVhbnVwTWFwLnNldChvYmplY3RTdG9yZSwgb2JqZWN0U3RvcmUtPm1ldGFkYXRh
KCkpOwpAQCAtMjkwLDcgKzI5MCw3IEBAIHZvaWQgSURCVHJhbnNhY3Rpb246Om9uQWJvcnQoKQog
CiAgICAgaWYgKGlzVmVyc2lvbkNoYW5nZSgpKSB7CiAgICAgICAgIGZvciAoSURCT2JqZWN0U3Rv
cmVNZXRhZGF0YU1hcDo6aXRlcmF0b3IgaXQgPSBtX29iamVjdFN0b3JlQ2xlYW51cE1hcC5iZWdp
bigpOyBpdCAhPSBtX29iamVjdFN0b3JlQ2xlYW51cE1hcC5lbmQoKTsgKytpdCkKLSAgICAgICAg
ICAgIGl0LT5maXJzdC0+c2V0TWV0YWRhdGEoaXQtPnNlY29uZCk7CisgICAgICAgICAgICBpdC0+
a2V5LT5zZXRNZXRhZGF0YShpdC0+dmFsdWUpOwogICAgIH0KICAgICBtX29iamVjdFN0b3JlQ2xl
YW51cE1hcC5jbGVhcigpOwogICAgIGNsb3NlT3BlbkN1cnNvcnMoKTsKQEAgLTM3OCw3ICszNzgs
NyBAQCBib29sIElEQlRyYW5zYWN0aW9uOjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+
IGV2ZW50KQogCiAgICAgLy8gQnJlYWsgcmVmZXJlbmNlIGN5Y2xlcy4KICAgICBmb3IgKElEQk9i
amVjdFN0b3JlTWFwOjppdGVyYXRvciBpdCA9IG1fb2JqZWN0U3RvcmVNYXAuYmVnaW4oKTsgaXQg
IT0gbV9vYmplY3RTdG9yZU1hcC5lbmQoKTsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+dHJh
bnNhY3Rpb25GaW5pc2hlZCgpOworICAgICAgICBpdC0+dmFsdWUtPnRyYW5zYWN0aW9uRmluaXNo
ZWQoKTsKICAgICBtX29iamVjdFN0b3JlTWFwLmNsZWFyKCk7CiAKICAgICBWZWN0b3I8UmVmUHRy
PEV2ZW50VGFyZ2V0PiA+IHRhcmdldHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmRhdGFiYXNlL0Fic3RyYWN0RGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJkYXRhYmFzZS9BYnN0cmFjdERhdGFiYXNlLmNwcAppbmRleCBjNzUzOWM2ZTExMmI5
ZTFlNmJmMWUyY2QzZjAyYWUwY2JhMmJlYTI2Li42MjkwN2UzZTFjZTZiMDkxNWMyYjAzNDc2MDll
NTA3ZThjMDFjZWI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFi
YXNlL0Fic3RyYWN0RGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvQWJzdHJhY3REYXRhYmFzZS5jcHAKQEAgLTI4Miw3ICsyODIsNyBAQCBib29sIEFi
c3RyYWN0RGF0YWJhc2U6OnBlcmZvcm1PcGVuQW5kVmVyaWZ5KGJvb2wgc2hvdWxkU2V0VmVyc2lv
bkluTmV3RGF0YWJhc2UsCiAgICAgICAgIEd1aWRWZXJzaW9uTWFwOjppdGVyYXRvciBlbnRyeSA9
IGd1aWRUb1ZlcnNpb25NYXAoKS5maW5kKG1fZ3VpZCk7CiAgICAgICAgIGlmIChlbnRyeSAhPSBn
dWlkVG9WZXJzaW9uTWFwKCkuZW5kKCkpIHsKICAgICAgICAgICAgIC8vIE1hcCBudWxsIHN0cmlu
ZyB0byBlbXB0eSBzdHJpbmcgKHNlZSB1cGRhdGVHdWlkVmVyc2lvbk1hcCgpKS4KLSAgICAgICAg
ICAgIGN1cnJlbnRWZXJzaW9uID0gZW50cnktPnNlY29uZC5pc051bGwoKSA/IGVtcHR5U3RyaW5n
KCkgOiBlbnRyeS0+c2Vjb25kLmlzb2xhdGVkQ29weSgpOworICAgICAgICAgICAgY3VycmVudFZl
cnNpb24gPSBlbnRyeS0+dmFsdWUuaXNOdWxsKCkgPyBlbXB0eVN0cmluZygpIDogZW50cnktPnZh
bHVlLmlzb2xhdGVkQ29weSgpOwogICAgICAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJDdXJyZW50
IGNhY2hlZCB2ZXJzaW9uIGZvciBndWlkICVpIGlzICVzIiwgbV9ndWlkLCBjdXJyZW50VmVyc2lv
bi5hc2NpaSgpLmRhdGEoKSk7CiAKICNpZiBQTEFURk9STShDSFJPTUlVTSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNwcApp
bmRleCA0NmQyODEyOTJkOWI3ZTQzN2I1ZGUwZjMyNWZhZjI0NWM4MTYzYWQ0Li41YmQ1ZTdiM2Qy
ZTFjNDAyMTFiMDFhNjFkMGJmNzgzY2IzNTI2MjI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3BwCkBAIC0yNTAsNyAr
MjUwLDcgQEAgdm9pZCBEYXRhYmFzZVRyYWNrZXI6OmludGVycnVwdEFsbERhdGFiYXNlc0ZvckNv
bnRleHQoY29uc3QgU2NyaXB0RXhlY3V0aW9uQ29udGUKIAogICAgICAgICBEYXRhYmFzZU5hbWVN
YXA6OmNvbnN0X2l0ZXJhdG9yIGRiTmFtZU1hcEVuZEl0ID0gbmFtZU1hcC0+ZW5kKCk7CiAgICAg
ICAgIGZvciAoRGF0YWJhc2VOYW1lTWFwOjpjb25zdF9pdGVyYXRvciBkYk5hbWVNYXBJdCA9IG5h
bWVNYXAtPmJlZ2luKCk7IGRiTmFtZU1hcEl0ICE9IGRiTmFtZU1hcEVuZEl0OyArK2RiTmFtZU1h
cEl0KSB7Ci0gICAgICAgICAgICBEYXRhYmFzZVNldCogZGF0YWJhc2VTZXQgPSBkYk5hbWVNYXBJ
dC0+c2Vjb25kOworICAgICAgICAgICAgRGF0YWJhc2VTZXQqIGRhdGFiYXNlU2V0ID0gZGJOYW1l
TWFwSXQtPnZhbHVlOwogICAgICAgICAgICAgRGF0YWJhc2VTZXQ6OmNvbnN0X2l0ZXJhdG9yIGRi
U2V0RW5kSXQgPSBkYXRhYmFzZVNldC0+ZW5kKCk7CiAgICAgICAgICAgICBmb3IgKERhdGFiYXNl
U2V0Ojpjb25zdF9pdGVyYXRvciBkYlNldEl0ID0gZGF0YWJhc2VTZXQtPmJlZ2luKCk7IGRiU2V0
SXQgIT0gZGJTZXRFbmRJdDsgKytkYlNldEl0KSB7CiAgICAgICAgICAgICAgICAgaWYgKCgqZGJT
ZXRJdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSA9PSBjb250ZXh0KQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9PcmlnaW5Vc2FnZVJlY29yZC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL09yaWdpblVzYWdlUmVjb3JkLmNw
cAppbmRleCA0NDM1NTBhNTczMDlmMzM2M2YwZmNhOThmNTA4YzAyNzZkMGQ5OWRiLi4yYmY4YWY0
YWUwMDk5MjgwYWNhMTc1Nzc0OGJhMjFjZjkwYjcwMmRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL09yaWdpblVzYWdlUmVjb3JkLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL09yaWdpblVzYWdlUmVjb3JkLmNwcApAQCAt
OTMsNyArOTMsNyBAQCB1bnNpZ25lZCBsb25nIGxvbmcgT3JpZ2luVXNhZ2VSZWNvcmQ6OmRpc2tV
c2FnZSgpCiAgICAgSGFzaE1hcDxTdHJpbmcsIERhdGFiYXNlRW50cnk+OjppdGVyYXRvciBpRGF0
YWJhc2UgPSBtX2RhdGFiYXNlTWFwLmJlZ2luKCk7CiAgICAgSGFzaE1hcDxTdHJpbmcsIERhdGFi
YXNlRW50cnk+OjppdGVyYXRvciBlbmREYXRhYmFzZSA9IG1fZGF0YWJhc2VNYXAuZW5kKCk7CiAg
ICAgZm9yICg7IGlEYXRhYmFzZSAhPSBlbmREYXRhYmFzZTsgKytpRGF0YWJhc2UpCi0gICAgICAg
IG1fY2FjaGVkRGlza1VzYWdlICs9IGlEYXRhYmFzZS0+c2Vjb25kLnNpemU7CisgICAgICAgIG1f
Y2FjaGVkRGlza1VzYWdlICs9IGlEYXRhYmFzZS0+dmFsdWUuc2l6ZTsKIAogICAgIG1fY2FjaGVk
RGlza1VzYWdlSXNWYWxpZCA9IHRydWU7CiAgICAgcmV0dXJuIG1fY2FjaGVkRGlza1VzYWdlOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2Fj
dGlvbkNvb3JkaW5hdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2Uv
U1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAKaW5kZXggODM3YjhmYmQyMjA1YWRjOTc0ODZk
ZDNmMGU4ZjAyMDczODBmOGQ5Yi4uZGEzYTdlZTc1YjhjMDEyNTk0NjZlYzRhN2VhZGE5N2JkMWMy
M2JmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxU
cmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwCkBAIC03OCw3ICs3OCw3IEBA
IHZvaWQgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6YWNxdWlyZUxvY2soU1FMVHJhbnNhY3Rp
b24qIHRyYW5zYWN0aW9uKQogICAgICAgICBjb29yZGluYXRpb25JbmZvSXRlcmF0b3IgPSBtX2Nv
b3JkaW5hdGlvbkluZm9NYXAuYWRkKGRiSWRlbnRpZmllciwgQ29vcmRpbmF0aW9uSW5mbygpKS5p
dGVyYXRvcjsKICAgICB9CiAKLSAgICBDb29yZGluYXRpb25JbmZvJiBpbmZvID0gY29vcmRpbmF0
aW9uSW5mb0l0ZXJhdG9yLT5zZWNvbmQ7CisgICAgQ29vcmRpbmF0aW9uSW5mbyYgaW5mbyA9IGNv
b3JkaW5hdGlvbkluZm9JdGVyYXRvci0+dmFsdWU7CiAgICAgaW5mby5wZW5kaW5nVHJhbnNhY3Rp
b25zLmFwcGVuZCh0cmFuc2FjdGlvbik7CiAgICAgcHJvY2Vzc1BlbmRpbmdUcmFuc2FjdGlvbnMo
aW5mbyk7CiB9CkBAIC05Miw3ICs5Miw3IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRv
cjo6cmVsZWFzZUxvY2soU1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQogCiAgICAgQ29vcmRp
bmF0aW9uSW5mb01hcDo6aXRlcmF0b3IgY29vcmRpbmF0aW9uSW5mb0l0ZXJhdG9yID0gbV9jb29y
ZGluYXRpb25JbmZvTWFwLmZpbmQoZGJJZGVudGlmaWVyKTsKICAgICBBU1NFUlQoY29vcmRpbmF0
aW9uSW5mb0l0ZXJhdG9yICE9IG1fY29vcmRpbmF0aW9uSW5mb01hcC5lbmQoKSk7Ci0gICAgQ29v
cmRpbmF0aW9uSW5mbyYgaW5mbyA9IGNvb3JkaW5hdGlvbkluZm9JdGVyYXRvci0+c2Vjb25kOwor
ICAgIENvb3JkaW5hdGlvbkluZm8mIGluZm8gPSBjb29yZGluYXRpb25JbmZvSXRlcmF0b3ItPnZh
bHVlOwogCiAgICAgaWYgKHRyYW5zYWN0aW9uLT5pc1JlYWRPbmx5KCkpIHsKICAgICAgICAgQVNT
RVJUKGluZm8uYWN0aXZlUmVhZFRyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbikpOwpA
QCAtMTEwLDcgKzExMCw3IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6c2h1dGRv
d24oKQogICAgIC8vIE5vdGlmeSBhbGwgdHJhbnNhY3Rpb25zIGluIHByb2dyZXNzIHRoYXQgdGhl
IGRhdGFiYXNlIHRocmVhZCBpcyBzaHV0dGluZyBkb3duCiAgICAgZm9yIChDb29yZGluYXRpb25J
bmZvTWFwOjppdGVyYXRvciBjb29yZGluYXRpb25JbmZvSXRlcmF0b3IgPSBtX2Nvb3JkaW5hdGlv
bkluZm9NYXAuYmVnaW4oKTsKICAgICAgICAgIGNvb3JkaW5hdGlvbkluZm9JdGVyYXRvciAhPSBt
X2Nvb3JkaW5hdGlvbkluZm9NYXAuZW5kKCk7ICsrY29vcmRpbmF0aW9uSW5mb0l0ZXJhdG9yKSB7
Ci0gICAgICAgIENvb3JkaW5hdGlvbkluZm8mIGluZm8gPSBjb29yZGluYXRpb25JbmZvSXRlcmF0
b3ItPnNlY29uZDsKKyAgICAgICAgQ29vcmRpbmF0aW9uSW5mbyYgaW5mbyA9IGNvb3JkaW5hdGlv
bkluZm9JdGVyYXRvci0+dmFsdWU7CiAgICAgICAgIGlmIChpbmZvLmFjdGl2ZVdyaXRlVHJhbnNh
Y3Rpb24pCiAgICAgICAgICAgICBpbmZvLmFjdGl2ZVdyaXRlVHJhbnNhY3Rpb24tPm5vdGlmeURh
dGFiYXNlVGhyZWFkSXNTaHV0dGluZ0Rvd24oKTsKICAgICAgICAgZm9yIChIYXNoU2V0PFJlZlB0
cjxTUUxUcmFuc2FjdGlvbj4gPjo6aXRlcmF0b3IgYWN0aXZlUmVhZFRyYW5zYWN0aW9uc0l0ZXJh
dG9yID0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvY2hy
b21pdW0vRGF0YWJhc2VUcmFja2VyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJkYXRhYmFzZS9jaHJvbWl1bS9EYXRhYmFzZVRyYWNrZXJDaHJvbWl1bS5jcHAKaW5kZXgg
MTE3ZmRiZWVkMzFkNjNiNjRiOTQxODAzYjhlYWRjZDk5ODVjZWVmYy4uNjBhNzZjYTVjOTU5ODJi
ZWE5NGNlMDdiYWY2NmVkYTVkODI3YzVhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJkYXRhYmFzZS9jaHJvbWl1bS9EYXRhYmFzZVRyYWNrZXJDaHJvbWl1bS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9jaHJvbWl1bS9EYXRhYmFzZVRy
YWNrZXJDaHJvbWl1bS5jcHAKQEAgLTE4MCw3ICsxODAsNyBAQCB2b2lkIERhdGFiYXNlVHJhY2tl
cjo6aW50ZXJydXB0QWxsRGF0YWJhc2VzRm9yQ29udGV4dChjb25zdCBTY3JpcHRFeGVjdXRpb25D
b250ZQogCiAgICAgRGF0YWJhc2VOYW1lTWFwOjpjb25zdF9pdGVyYXRvciBkYk5hbWVNYXBFbmRJ
dCA9IG5hbWVNYXAtPmVuZCgpOwogICAgIGZvciAoRGF0YWJhc2VOYW1lTWFwOjpjb25zdF9pdGVy
YXRvciBkYk5hbWVNYXBJdCA9IG5hbWVNYXAtPmJlZ2luKCk7IGRiTmFtZU1hcEl0ICE9IGRiTmFt
ZU1hcEVuZEl0OyArK2RiTmFtZU1hcEl0KSB7Ci0gICAgICAgIERhdGFiYXNlU2V0KiBkYXRhYmFz
ZVNldCA9IGRiTmFtZU1hcEl0LT5zZWNvbmQ7CisgICAgICAgIERhdGFiYXNlU2V0KiBkYXRhYmFz
ZVNldCA9IGRiTmFtZU1hcEl0LT52YWx1ZTsKICAgICAgICAgRGF0YWJhc2VTZXQ6OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IGRhdGFiYXNlU2V0LT5lbmQoKTsKICAgICAgICAgZm9yIChEYXRhYmFzZVNl
dDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBkYXRhYmFzZVNldC0+YmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7CiAgICAgICAgICAgICBpZiAoKCppdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSA9
PSBjb250ZXh0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFz
ZS9jaHJvbWl1bS9RdW90YVRyYWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9jaHJvbWl1bS9RdW90YVRyYWNrZXIuY3BwCmluZGV4IDAzNDRjYThmNjU2YTY1ZDM3
YjMwNGJiN2UzOTg4OWZjZTM2ZjhmNWQuLjM4MmEzZmI4YjU3ODYyNTVjZWJhMGU3Zjg1OWIxNDJh
ZWMxZDk1MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2Uv
Y2hyb21pdW0vUXVvdGFUcmFja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmRhdGFiYXNlL2Nocm9taXVtL1F1b3RhVHJhY2tlci5jcHAKQEAgLTUzLDggKzUzLDggQEAgdm9p
ZCBRdW90YVRyYWNrZXI6OmdldERhdGFiYXNlU2l6ZUFuZFNwYWNlQXZhaWxhYmxlVG9PcmlnaW4o
CiAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhKG1fZGF0YUd1YXJkKTsKICAgICAgICAgQVNT
RVJUKG1fZGF0YWJhc2VTaXplcy5jb250YWlucyhvcmlnaW5JZGVudGlmaWVyKSk7CiAgICAgICAg
IEhhc2hNYXA8U3RyaW5nLCBTaXplTWFwPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2RhdGFiYXNl
U2l6ZXMuZmluZChvcmlnaW5JZGVudGlmaWVyKTsKLSAgICAgICAgQVNTRVJUKGl0LT5zZWNvbmQu
Y29udGFpbnMoZGF0YWJhc2VOYW1lKSk7Ci0gICAgICAgICpkYXRhYmFzZVNpemUgPSBpdC0+c2Vj
b25kLmdldChkYXRhYmFzZU5hbWUpOworICAgICAgICBBU1NFUlQoaXQtPnZhbHVlLmNvbnRhaW5z
KGRhdGFiYXNlTmFtZSkpOworICAgICAgICAqZGF0YWJhc2VTaXplID0gaXQtPnZhbHVlLmdldChk
YXRhYmFzZU5hbWUpOwogCiAgICAgICAgIGlmIChtX3NwYWNlQXZhaWxhYmxlVG9PcmlnaW5zLmNv
bnRhaW5zKG9yaWdpbklkZW50aWZpZXIpKSB7CiAgICAgICAgICAgICAqc3BhY2VBdmFpbGFibGUg
PSBtX3NwYWNlQXZhaWxhYmxlVG9PcmlnaW5zLmdldChvcmlnaW5JZGVudGlmaWVyKTsKQEAgLTcy
LDcgKzcyLDcgQEAgdm9pZCBRdW90YVRyYWNrZXI6OnVwZGF0ZURhdGFiYXNlU2l6ZSgKIHsKICAg
ICBNdXRleExvY2tlciBsb2NrRGF0YShtX2RhdGFHdWFyZCk7CiAgICAgSGFzaE1hcDxTdHJpbmcs
IFNpemVNYXA+OjppdGVyYXRvciBpdCA9IG1fZGF0YWJhc2VTaXplcy5hZGQob3JpZ2luSWRlbnRp
ZmllciwgU2l6ZU1hcCgpKS5pdGVyYXRvcjsKLSAgICBpdC0+c2Vjb25kLnNldChkYXRhYmFzZU5h
bWUsIGRhdGFiYXNlU2l6ZSk7CisgICAgaXQtPnZhbHVlLnNldChkYXRhYmFzZU5hbWUsIGRhdGFi
YXNlU2l6ZSk7CiB9CiAKIHZvaWQgUXVvdGFUcmFja2VyOjp1cGRhdGVTcGFjZUF2YWlsYWJsZVRv
T3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllciwgdW5zaWduZWQgbG9uZyBsb25n
IHNwYWNlQXZhaWxhYmxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJz
b2NrZXRzL1dlYlNvY2tldERlZmxhdGVGcmFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJzb2NrZXRzL1dlYlNvY2tldERlZmxhdGVGcmFtZXIuY3BwCmluZGV4IDc2YzA0MGQxYzkz
NzJhYjcwZTIyNjQ2MGE4N2QyYTU1ZjJjODhmZjAuLjY3YmIzZGFhMTI5OTg4NDUxMTEwNjkwZTE5
MmVhMGRhMDA3NjZjZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29j
a2V0cy9XZWJTb2NrZXREZWZsYXRlRnJhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0RGVmbGF0ZUZyYW1lci5jcHAKQEAgLTg3LDcgKzg3LDcg
QEAgYm9vbCBXZWJTb2NrZXRFeHRlbnNpb25EZWZsYXRlRnJhbWU6OnByb2Nlc3NSZXNwb25zZShj
b25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW4KICAgICBpbnQgd2luZG93Qml0cyA9IDE1OwogICAg
IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBwYXJhbWV0ZXIgPSBzZXJ2
ZXJQYXJhbWV0ZXJzLmZpbmQoIm1heF93aW5kb3dfYml0cyIpOwogICAgIGlmIChwYXJhbWV0ZXIg
IT0gc2VydmVyUGFyYW1ldGVycy5lbmQoKSkgewotICAgICAgICB3aW5kb3dCaXRzID0gcGFyYW1l
dGVyLT5zZWNvbmQudG9JbnQoKTsKKyAgICAgICAgd2luZG93Qml0cyA9IHBhcmFtZXRlci0+dmFs
dWUudG9JbnQoKTsKICAgICAgICAgaWYgKHdpbmRvd0JpdHMgPCA4IHx8IHdpbmRvd0JpdHMgPiAx
NSkgewogICAgICAgICAgICAgbV9mYWlsdXJlUmVhc29uID0gIlJlY2VpdmVkIGludmFsaWQgbWF4
X3dpbmRvd19iaXRzIHBhcmFtZXRlciI7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC05
OCw3ICs5OCw3IEBAIGJvb2wgV2ViU29ja2V0RXh0ZW5zaW9uRGVmbGF0ZUZyYW1lOjpwcm9jZXNz
UmVzcG9uc2UoY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluCiAgICAgV2ViU29ja2V0RGVmbGF0
ZXI6OkNvbnRleHRUYWtlT3Zlck1vZGUgbW9kZSA9IFdlYlNvY2tldERlZmxhdGVyOjpUYWtlT3Zl
ckNvbnRleHQ7CiAgICAgcGFyYW1ldGVyID0gc2VydmVyUGFyYW1ldGVycy5maW5kKCJub19jb250
ZXh0X3Rha2VvdmVyIik7CiAgICAgaWYgKHBhcmFtZXRlciAhPSBzZXJ2ZXJQYXJhbWV0ZXJzLmVu
ZCgpKSB7Ci0gICAgICAgIGlmICghcGFyYW1ldGVyLT5zZWNvbmQuaXNOdWxsKCkpIHsKKyAgICAg
ICAgaWYgKCFwYXJhbWV0ZXItPnZhbHVlLmlzTnVsbCgpKSB7CiAgICAgICAgICAgICBtX2ZhaWx1
cmVSZWFzb24gPSAiUmVjZWl2ZWQgaW52YWxpZCBub19jb250ZXh0X3Rha2VvdmVyIHBhcmFtZXRl
ciI7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRj
aGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRFeHRl
bnNpb25EaXNwYXRjaGVyLmNwcAppbmRleCA3YzU5MmFkMWJmMjgwNjhjODMwMzM2OWI2MDY1Njcz
YjZiYTdlOTc0Li41NjA5ZjY1ODFhYWI5NzQyYjBmZDg1ZmYxNWQxNWZhNTBlZDI5ZjViIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0RXh0ZW5z
aW9uRGlzcGF0Y2hlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRz
L1dlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXIuY3BwCkBAIC0xODEsMTAgKzE4MSwxMCBAQCB2
b2lkIFdlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXI6OmFwcGVuZEFjY2VwdGVkRXh0ZW5zaW9u
KGNvbnN0IFN0cmluZyYgZXh0ZW5zaQogICAgIC8vIEZJWE1FOiBTaG91bGQgdXNlIExpc3RIYXNo
U2V0IHRvIGtlZXAgdGhlIG9yZGVyIG9mIHRoZSBwYXJhbWV0ZXJzLgogICAgIGZvciAoSGFzaE1h
cDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ZXJhdG9yID0gZXh0ZW5zaW9uUGFy
YW1ldGVycy5iZWdpbigpOyBpdGVyYXRvciAhPSBleHRlbnNpb25QYXJhbWV0ZXJzLmVuZCgpOyAr
K2l0ZXJhdG9yKSB7CiAgICAgICAgIG1fYWNjZXB0ZWRFeHRlbnNpb25zQnVpbGRlci5hcHBlbmQo
IjsgIik7Ci0gICAgICAgIG1fYWNjZXB0ZWRFeHRlbnNpb25zQnVpbGRlci5hcHBlbmQoaXRlcmF0
b3ItPmZpcnN0KTsKLSAgICAgICAgaWYgKCFpdGVyYXRvci0+c2Vjb25kLmlzTnVsbCgpKSB7Cisg
ICAgICAgIG1fYWNjZXB0ZWRFeHRlbnNpb25zQnVpbGRlci5hcHBlbmQoaXRlcmF0b3ItPmtleSk7
CisgICAgICAgIGlmICghaXRlcmF0b3ItPnZhbHVlLmlzTnVsbCgpKSB7CiAgICAgICAgICAgICBt
X2FjY2VwdGVkRXh0ZW5zaW9uc0J1aWxkZXIuYXBwZW5kKCI9Iik7Ci0gICAgICAgICAgICBtX2Fj
Y2VwdGVkRXh0ZW5zaW9uc0J1aWxkZXIuYXBwZW5kKGl0ZXJhdG9yLT5zZWNvbmQpOworICAgICAg
ICAgICAgbV9hY2NlcHRlZEV4dGVuc2lvbnNCdWlsZGVyLmFwcGVuZChpdGVyYXRvci0+dmFsdWUp
OwogICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QVhPYmplY3RDYWNoZS5jcHAKaW5kZXggNmMwOGJlMjFmMGUzMTY3MTI3YWIzZjJiNGI5NTdmOWI0
ZWJjZjgyMy4uOGUzMmViNTAxMDEzM2Y5ZWU4NzNlNzk1OGNlNGIzYjZjN2JlYTBlZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCkBAIC05NCw3
ICs5NCw3IEBAIEFYT2JqZWN0Q2FjaGU6On5BWE9iamVjdENhY2hlKCkKIHsKICAgICBIYXNoTWFw
PEFYSUQsIFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiA+OjppdGVyYXRvciBlbmQgPSBtX29i
amVjdHMuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPEFYSUQsIFJlZlB0cjxBY2Nlc3NpYmlsaXR5
T2JqZWN0PiA+OjppdGVyYXRvciBpdCA9IG1fb2JqZWN0cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKLSAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqID0gKCppdCkuc2Vjb25kLmdl
dCgpOworICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmogPSAoKml0KS52YWx1ZS5nZXQo
KTsKICAgICAgICAgZGV0YWNoV3JhcHBlcihvYmopOwogICAgICAgICBvYmotPmRldGFjaCgpOwog
ICAgICAgICByZW1vdmVBWElEKG9iaik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9nb2JqZWN0L0RPTU9iamVjdENhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2dvYmplY3QvRE9NT2JqZWN0Q2FjaGUuY3BwCmluZGV4IDJlN2YxMDZlNzllMzFjNzMxNTRhYjlj
ZmFhMTlhNTg5ZTlkZTdkZDUuLmRkN2QwNDk3MThjODEyMmYyNGIzOGRiODgzZTViNmI2NGUyZWMw
NjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvRE9NT2JqZWN0
Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvRE9NT2JqZWN0
Q2FjaGUuY3BwCkBAIC03NCw3ICs3NCw3IEBAIHZvaWQgRE9NT2JqZWN0Q2FjaGU6OmNsZWFyQnlG
cmFtZShXZWJDb3JlOjpGcmFtZSogZnJhbWUpCiAgICAgLy8gaXRlcmF0aW5nIHRoZSBjYWNoZSBp
dHNlbGYuCiAgICAgRE9NT2JqZWN0TWFwOjppdGVyYXRvciBlbmQgPSBkb21PYmplY3RzKCkuZW5k
KCk7CiAgICAgZm9yIChET01PYmplY3RNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBkb21PYmplY3RzKCku
YmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewotICAgICAgICBET01PYmplY3RDYWNoZURh
dGEqIGRhdGEgPSBpdGVyLT5zZWNvbmQ7CisgICAgICAgIERPTU9iamVjdENhY2hlRGF0YSogZGF0
YSA9IGl0ZXItPnZhbHVlOwogICAgICAgICBBU1NFUlQoZGF0YSk7CiAgICAgICAgIGlmICgoIWZy
YW1lIHx8IGRhdGEtPmZyYW1lID09IGZyYW1lKSAmJiBkYXRhLT50aW1lc1JldHVybmVkKQogICAg
ICAgICAgICAgdG9VbnJlZi5hcHBlbmQoZGF0YSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9ET01PYmplY3RIYXNoVGFibGVNYXAuaCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0RPTU9iamVjdEhhc2hUYWJsZU1hcC5oCmluZGV4IDY0ODI4ZDY5ODhmN2U0M2Iz
ZTlhNDYzNjkwOGNkMjEyNTQ3YTJmZmMuLjc1M2MwNGQyZmM1NzcyZTA5NTlkY2VmNWFjNjFiYTMw
Yzk2ZTE3OGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTU9iamVj
dEhhc2hUYWJsZU1hcC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTU9iamVj
dEhhc2hUYWJsZU1hcC5oCkBAIC0zOSwxNSArMzksMTUgQEAgcHVibGljOgogICAgIH5ET01PYmpl
Y3RIYXNoVGFibGVNYXAoKQogICAgIHsKICAgICAgICAgZm9yIChIYXNoTWFwPGNvbnN0IEpTQzo6
SGFzaFRhYmxlKiwgSlNDOjpIYXNoVGFibGU+OjppdGVyYXRvciBpdGVyID0gbV9tYXAuYmVnaW4o
KTsgaXRlciAhPSBtX21hcC5lbmQoKTsgKytpdGVyKQotICAgICAgICAgICAgaXRlci0+c2Vjb25k
LmRlbGV0ZVRhYmxlKCk7CisgICAgICAgICAgICBpdGVyLT52YWx1ZS5kZWxldGVUYWJsZSgpOwog
ICAgIH0KIAogICAgIGNvbnN0IEpTQzo6SGFzaFRhYmxlKiBnZXQoY29uc3QgSlNDOjpIYXNoVGFi
bGUqIHN0YXRpY1RhYmxlKQogICAgIHsKICAgICAgICAgSGFzaE1hcDxjb25zdCBKU0M6Okhhc2hU
YWJsZSosIEpTQzo6SGFzaFRhYmxlPjo6aXRlcmF0b3IgaXRlciA9IG1fbWFwLmZpbmQoc3RhdGlj
VGFibGUpOwogICAgICAgICBpZiAoaXRlciAhPSBtX21hcC5lbmQoKSkKLSAgICAgICAgICAgIHJl
dHVybiAmaXRlci0+c2Vjb25kOwotICAgICAgICByZXR1cm4gJm1fbWFwLnNldChzdGF0aWNUYWJs
ZSwgc3RhdGljVGFibGUtPmNvcHkoKSkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgICAgIHJl
dHVybiAmaXRlci0+dmFsdWU7CisgICAgICAgIHJldHVybiAmbV9tYXAuc2V0KHN0YXRpY1RhYmxl
LCBzdGF0aWNUYWJsZS0+Y29weSgpKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgfQogCiBwcml2YXRl
OgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAKaW5kZXggNjU1
MWQ2Njg3ZGZmODI4ZTk1NGJjMmNmMWY0YWE2YzhmYTI0NjUyNS4uMTNjOTNmNmE5Yjg0YThhZjVk
NjEwZGQ1NDk5NDYxOGVmODQ1NGY2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01CaW5kaW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTUJpbmRpbmcuY3BwCkBAIC0yNTksNyArMjU5LDcgQEAgU3RydWN0dXJlKiBjYWNoZURPTVN0
cnVjdHVyZShKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVj
dHUKIHsKICAgICBKU0RPTVN0cnVjdHVyZU1hcCYgc3RydWN0dXJlcyA9IGdsb2JhbE9iamVjdC0+
c3RydWN0dXJlcygpOwogICAgIEFTU0VSVCghc3RydWN0dXJlcy5jb250YWlucyhjbGFzc0luZm8p
KTsKLSAgICByZXR1cm4gc3RydWN0dXJlcy5zZXQoY2xhc3NJbmZvLCBXcml0ZUJhcnJpZXI8U3Ry
dWN0dXJlPihnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1
cmUpKS5pdGVyYXRvci0+c2Vjb25kLmdldCgpOworICAgIHJldHVybiBzdHJ1Y3R1cmVzLnNldChj
bGFzc0luZm8sIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0
YSgpLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkpLml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01HbG9iYWxPYmplY3QuY3BwCmluZGV4IDM2MTA0ODA4YmI2MDllNTdiMDQ4MTE4NTJl
ODk1ZGFkNzEzMGE0YWUuLmQzYzQyOWE1MDhkOTEwZGU3YmQyZWViZWQ2N2Q3NzVjMjVlYzdiMTgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5j
cHAKQEAgLTg4LDExICs4OCwxMSBAQCB2b2lkIEpTRE9NR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAKICAgICBKU0RPTVN0cnVj
dHVyZU1hcDo6aXRlcmF0b3IgZW5kID0gdGhpc09iamVjdC0+c3RydWN0dXJlcygpLmVuZCgpOwog
ICAgIGZvciAoSlNET01TdHJ1Y3R1cmVNYXA6Oml0ZXJhdG9yIGl0ID0gdGhpc09iamVjdC0+c3Ry
dWN0dXJlcygpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgdmlzaXRvci5hcHBl
bmQoJml0LT5zZWNvbmQpOworICAgICAgICB2aXNpdG9yLmFwcGVuZCgmaXQtPnZhbHVlKTsKIAog
ICAgIEpTRE9NQ29uc3RydWN0b3JNYXA6Oml0ZXJhdG9yIGVuZDIgPSB0aGlzT2JqZWN0LT5jb25z
dHJ1Y3RvcnMoKS5lbmQoKTsKICAgICBmb3IgKEpTRE9NQ29uc3RydWN0b3JNYXA6Oml0ZXJhdG9y
IGl0MiA9IHRoaXNPYmplY3QtPmNvbnN0cnVjdG9ycygpLmJlZ2luKCk7IGl0MiAhPSBlbmQyOyAr
K2l0MikKLSAgICAgICAgdmlzaXRvci5hcHBlbmQoJml0Mi0+c2Vjb25kKTsKKyAgICAgICAgdmlz
aXRvci5hcHBlbmQoJml0Mi0+dmFsdWUpOwogfQogCiB2b2lkIEpTRE9NR2xvYmFsT2JqZWN0Ojpz
ZXRDdXJyZW50RXZlbnQoRXZlbnQqIGN1cnJlbnRFdmVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oCmluZGV4IGJkYWI1NjhmMDI0NTNiMTQ0ZjIz
ZDQ3Y2E0N2U5ZDQ2OTNmNTVjNjMuLjljYzE3MWJjMjg4NzRhODM5ZWY4MzNkMjE0ZjZmOGY1MTg5
ZjQ3NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFs
T2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmpl
Y3QuaApAQCAtOTMsNyArOTMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEpTQzo6
SlNPYmplY3QqIGNvbnN0cnVjdG9yID0gQ29uc3RydWN0b3JDbGFzczo6Y3JlYXRlKGV4ZWMsIENv
bnN0cnVjdG9yQ2xhc3M6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIGNvbnN0
X2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpLCBnbG9iYWxPYmplY3QtPm9i
amVjdFByb3RvdHlwZSgpKSwgY29uc3RfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9i
amVjdCkpOwogICAgICAgICBBU1NFUlQoIWNvbnN0X2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihn
bG9iYWxPYmplY3QpLT5jb25zdHJ1Y3RvcnMoKS5jb250YWlucygmQ29uc3RydWN0b3JDbGFzczo6
c19pbmZvKSk7CiAgICAgICAgIEpTQzo6V3JpdGVCYXJyaWVyPEpTQzo6SlNPYmplY3Q+IHRlbXA7
Ci0gICAgICAgIGNvbnN0X2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpLT5j
b25zdHJ1Y3RvcnMoKS5hZGQoJkNvbnN0cnVjdG9yQ2xhc3M6OnNfaW5mbywgdGVtcCkuaXRlcmF0
b3ItPnNlY29uZC5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QsIGNvbnN0cnVj
dG9yKTsKKyAgICAgICAgY29uc3RfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVj
dCktPmNvbnN0cnVjdG9ycygpLmFkZCgmQ29uc3RydWN0b3JDbGFzczo6c19pbmZvLCB0ZW1wKS5p
dGVyYXRvci0+dmFsdWUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LCBjb25z
dHJ1Y3Rvcik7CiAgICAgICAgIHJldHVybiBjb25zdHJ1Y3RvcjsKICAgICB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCmlu
ZGV4IGZmMGFlZWZiNTBhNjA4YzkyMTAzM2Q5ODc5MzNjZGM2NWZjZmQyYzkuLmVkNzQzY2M5ZTll
YzUxYzBkNTMxNjEwOTRmMzNkOWM5MmFkYjEwZDYgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvUGFnZVNjcmlwdERlYnVnU2VydmVyLmNwcApAQCAtODIsNyArODIsNyBA
QCB2b2lkIFBhZ2VTY3JpcHREZWJ1Z1NlcnZlcjo6YWRkTGlzdGVuZXIoU2NyaXB0RGVidWdMaXN0
ZW5lciogbGlzdGVuZXIsIFBhZ2UqIHBhZwogICAgIEFTU0VSVF9BUkcobGlzdGVuZXIsIGxpc3Rl
bmVyKTsKICAgICBBU1NFUlRfQVJHKHBhZ2UsIHBhZ2UpOwogCi0gICAgT3duUHRyPExpc3RlbmVy
U2V0PiYgbGlzdGVuZXJzID0gbV9wYWdlTGlzdGVuZXJzTWFwLmFkZChwYWdlLCBudWxscHRyKS5p
dGVyYXRvci0+c2Vjb25kOworICAgIE93blB0cjxMaXN0ZW5lclNldD4mIGxpc3RlbmVycyA9IG1f
cGFnZUxpc3RlbmVyc01hcC5hZGQocGFnZSwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwogICAg
IGlmICghbGlzdGVuZXJzKQogICAgICAgICBsaXN0ZW5lcnMgPSBhZG9wdFB0cihuZXcgTGlzdGVu
ZXJTZXQpOwogICAgIGxpc3RlbmVycy0+YWRkKGxpc3RlbmVyKTsKQEAgLTEwMCw3ICsxMDAsNyBA
QCB2b2lkIFBhZ2VTY3JpcHREZWJ1Z1NlcnZlcjo6cmVtb3ZlTGlzdGVuZXIoU2NyaXB0RGVidWdM
aXN0ZW5lciogbGlzdGVuZXIsIFBhZ2UqCiAgICAgaWYgKGl0ID09IG1fcGFnZUxpc3RlbmVyc01h
cC5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgTGlzdGVuZXJTZXQqIGxpc3RlbmVycyA9
IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgTGlzdGVuZXJTZXQqIGxpc3RlbmVycyA9IGl0LT52YWx1
ZS5nZXQoKTsKICAgICBsaXN0ZW5lcnMtPnJlbW92ZShsaXN0ZW5lcik7CiAgICAgaWYgKGxpc3Rl
bmVycy0+aXNFbXB0eSgpKSB7CiAgICAgICAgIG1fcGFnZUxpc3RlbmVyc01hcC5yZW1vdmUoaXQp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q2FjaGVkRnJh
bWVEYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENhY2hlZEZyYW1l
RGF0YS5jcHAKaW5kZXggZGVmNzljZjJjMTZiYTc2ZTUxYmQ4ZjAxZmYwNzAwOWZlZDIwY2M2ZS4u
YzYyNDg3ZTgwNWZkY2MxYjcwMWM1YmJmNWQ5Njk0Y2JmYmQ3NDRkYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDYWNoZWRGcmFtZURhdGEuY3BwCkBAIC01
Myw4ICs1Myw4IEBAIFNjcmlwdENhY2hlZEZyYW1lRGF0YTo6U2NyaXB0Q2FjaGVkRnJhbWVEYXRh
KEZyYW1lKiBmcmFtZSkKIAogICAgIFNjcmlwdENvbnRyb2xsZXI6OlNoZWxsTWFwOjppdGVyYXRv
ciB3aW5kb3dTaGVsbHNFbmQgPSB3aW5kb3dTaGVsbHMuZW5kKCk7CiAgICAgZm9yIChTY3JpcHRD
b250cm9sbGVyOjpTaGVsbE1hcDo6aXRlcmF0b3IgaXRlciA9IHdpbmRvd1NoZWxscy5iZWdpbigp
OyBpdGVyICE9IHdpbmRvd1NoZWxsc0VuZDsgKytpdGVyKSB7Ci0gICAgICAgIEpTRE9NV2luZG93
KiB3aW5kb3cgPSBpdGVyLT5zZWNvbmQtPndpbmRvdygpOwotICAgICAgICBtX3dpbmRvd3MuYWRk
KGl0ZXItPmZpcnN0LmdldCgpLCBTdHJvbmc8SlNET01XaW5kb3c+KHdpbmRvdy0+Z2xvYmFsRGF0
YSgpLCB3aW5kb3cpKTsKKyAgICAgICAgSlNET01XaW5kb3cqIHdpbmRvdyA9IGl0ZXItPnZhbHVl
LT53aW5kb3coKTsKKyAgICAgICAgbV93aW5kb3dzLmFkZChpdGVyLT5rZXkuZ2V0KCksIFN0cm9u
ZzxKU0RPTVdpbmRvdz4od2luZG93LT5nbG9iYWxEYXRhKCksIHdpbmRvdykpOwogICAgIH0KIAog
ICAgIHNjcmlwdENvbnRyb2xsZXItPmF0dGFjaERlYnVnZ2VyKDApOwpAQCAtNzQsOCArNzQsOCBA
QCB2b2lkIFNjcmlwdENhY2hlZEZyYW1lRGF0YTo6cmVzdG9yZShGcmFtZSogZnJhbWUpCiAKICAg
ICBTY3JpcHRDb250cm9sbGVyOjpTaGVsbE1hcDo6aXRlcmF0b3Igd2luZG93U2hlbGxzRW5kID0g
d2luZG93U2hlbGxzLmVuZCgpOwogICAgIGZvciAoU2NyaXB0Q29udHJvbGxlcjo6U2hlbGxNYXA6
Oml0ZXJhdG9yIGl0ZXIgPSB3aW5kb3dTaGVsbHMuYmVnaW4oKTsgaXRlciAhPSB3aW5kb3dTaGVs
bHNFbmQ7ICsraXRlcikgewotICAgICAgICBET01XcmFwcGVyV29ybGQqIHdvcmxkID0gaXRlci0+
Zmlyc3QuZ2V0KCk7Ci0gICAgICAgIEpTRE9NV2luZG93U2hlbGwqIHdpbmRvd1NoZWxsID0gaXRl
ci0+c2Vjb25kLmdldCgpOworICAgICAgICBET01XcmFwcGVyV29ybGQqIHdvcmxkID0gaXRlci0+
a2V5LmdldCgpOworICAgICAgICBKU0RPTVdpbmRvd1NoZWxsKiB3aW5kb3dTaGVsbCA9IGl0ZXIt
PnZhbHVlLmdldCgpOwogCiAgICAgICAgIGlmIChKU0RPTVdpbmRvdyogd2luZG93ID0gbV93aW5k
b3dzLmdldCh3b3JsZCkuZ2V0KCkpCiAgICAgICAgICAgICB3aW5kb3dTaGVsbC0+c2V0V2luZG93
KHdpbmRvdy0+Z2xvYmFsRGF0YSgpLCB3aW5kb3cpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAppbmRleCBkYTkzOTg0ZWQ3NmMwNDgyMDM1ZDc0
OThhZTdmMDI3MWY5Njc5ZjgzLi5iOWVhZjQ3NzY5YmQ2MjdiNGViMWY5MzY2NjZmZDliOWIzMGZj
ZjY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9s
bGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVy
LmNwcApAQCAtOTYsNyArOTYsNyBAQCBTY3JpcHRDb250cm9sbGVyOjp+U2NyaXB0Q29udHJvbGxl
cigpCiAgICAgLy8gSXQncyBsaWtlbHkgdGhhdCBkZXN0cm95aW5nIG1fd2luZG93U2hlbGxzIHdp
bGwgY3JlYXRlIGEgbG90IG9mIGdhcmJhZ2UuCiAgICAgaWYgKCFtX3dpbmRvd1NoZWxscy5pc0Vt
cHR5KCkpIHsKICAgICAgICAgd2hpbGUgKCFtX3dpbmRvd1NoZWxscy5pc0VtcHR5KCkpCi0gICAg
ICAgICAgICBkZXN0cm95V2luZG93U2hlbGwobV93aW5kb3dTaGVsbHMuYmVnaW4oKS0+Zmlyc3Qu
Z2V0KCkpOworICAgICAgICAgICAgZGVzdHJveVdpbmRvd1NoZWxsKG1fd2luZG93U2hlbGxzLmJl
Z2luKCktPmtleS5nZXQoKSk7CiAgICAgICAgIGdjQ29udHJvbGxlcigpLmdhcmJhZ2VDb2xsZWN0
U29vbigpOwogICAgIH0KIH0KQEAgLTE4Myw3ICsxODMsNyBAQCB2b2lkIFNjcmlwdENvbnRyb2xs
ZXI6OmNsZWFyV2luZG93U2hlbGwoRE9NV2luZG93KiBuZXdET01XaW5kb3csIGJvb2wgZ29pbmdJ
bnRvUAogICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9i
YWxEYXRhKCkpOwogCiAgICAgZm9yIChTaGVsbE1hcDo6aXRlcmF0b3IgaXRlciA9IG1fd2luZG93
U2hlbGxzLmJlZ2luKCk7IGl0ZXIgIT0gbV93aW5kb3dTaGVsbHMuZW5kKCk7ICsraXRlcikgewot
ICAgICAgICBKU0RPTVdpbmRvd1NoZWxsKiB3aW5kb3dTaGVsbCA9IGl0ZXItPnNlY29uZC5nZXQo
KTsKKyAgICAgICAgSlNET01XaW5kb3dTaGVsbCogd2luZG93U2hlbGwgPSBpdGVyLT52YWx1ZS5n
ZXQoKTsKIAogICAgICAgICBpZiAod2luZG93U2hlbGwtPndpbmRvdygpLT5pbXBsKCkgPT0gbmV3
RE9NV2luZG93KQogICAgICAgICAgICAgY29udGludWU7CkBAIC0yNzYsNyArMjc2LDcgQEAgYm9v
bCBTY3JpcHRDb250cm9sbGVyOjpjYW5BY2Nlc3NGcm9tQ3VycmVudE9yaWdpbihGcmFtZSAqZnJh
bWUpCiB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmF0dGFjaERlYnVnZ2VyKEpTQzo6RGVidWdnZXIq
IGRlYnVnZ2VyKQogewogICAgIGZvciAoU2hlbGxNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3dpbmRv
d1NoZWxscy5iZWdpbigpOyBpdGVyICE9IG1fd2luZG93U2hlbGxzLmVuZCgpOyArK2l0ZXIpCi0g
ICAgICAgIGF0dGFjaERlYnVnZ2VyKGl0ZXItPnNlY29uZC5nZXQoKSwgZGVidWdnZXIpOworICAg
ICAgICBhdHRhY2hEZWJ1Z2dlcihpdGVyLT52YWx1ZS5nZXQoKSwgZGVidWdnZXIpOwogfQogCiB2
b2lkIFNjcmlwdENvbnRyb2xsZXI6OmF0dGFjaERlYnVnZ2VyKEpTRE9NV2luZG93U2hlbGwqIHNo
ZWxsLCBKU0M6OkRlYnVnZ2VyKiBkZWJ1Z2dlcikKQEAgLTI5Nyw4ICsyOTcsOCBAQCB2b2lkIFNj
cmlwdENvbnRyb2xsZXI6OnVwZGF0ZURvY3VtZW50KCkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
Zm9yIChTaGVsbE1hcDo6aXRlcmF0b3IgaXRlciA9IG1fd2luZG93U2hlbGxzLmJlZ2luKCk7IGl0
ZXIgIT0gbV93aW5kb3dTaGVsbHMuZW5kKCk7ICsraXRlcikgewotICAgICAgICBKU0xvY2tIb2xk
ZXIgbG9jayhpdGVyLT5maXJzdC0+Z2xvYmFsRGF0YSgpKTsKLSAgICAgICAgaXRlci0+c2Vjb25k
LT53aW5kb3coKS0+dXBkYXRlRG9jdW1lbnQoKTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2so
aXRlci0+a2V5LT5nbG9iYWxEYXRhKCkpOworICAgICAgICBpdGVyLT52YWx1ZS0+d2luZG93KCkt
PnVwZGF0ZURvY3VtZW50KCk7CiAgICAgfQogfQogCkBAIC0zMzUsNyArMzM1LDcgQEAgUGFzc1Jl
ZlB0cjxCaW5kaW5nczo6Um9vdE9iamVjdD4gU2NyaXB0Q29udHJvbGxlcjo6Y3JlYXRlUm9vdE9i
amVjdCh2b2lkKiBuYXRpdmUKIHsKICAgICBSb290T2JqZWN0TWFwOjppdGVyYXRvciBpdCA9IG1f
cm9vdE9iamVjdHMuZmluZChuYXRpdmVIYW5kbGUpOwogICAgIGlmIChpdCAhPSBtX3Jvb3RPYmpl
Y3RzLmVuZCgpKQotICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGl0
LT52YWx1ZTsKIAogICAgIFJlZlB0cjxCaW5kaW5nczo6Um9vdE9iamVjdD4gcm9vdE9iamVjdCA9
IEJpbmRpbmdzOjpSb290T2JqZWN0OjpjcmVhdGUobmF0aXZlSGFuZGxlLCBnbG9iYWxPYmplY3Qo
cGx1Z2luV29ybGQoKSkpOwogCkBAIC0zNTEsOCArMzUxLDggQEAgdm9pZCBTY3JpcHRDb250cm9s
bGVyOjpzZXRDYXB0dXJlQ2FsbFN0YWNrRm9yVW5jYXVnaHRFeGNlcHRpb25zKGJvb2wpCiB2b2lk
IFNjcmlwdENvbnRyb2xsZXI6OmNvbGxlY3RJc29sYXRlZENvbnRleHRzKFZlY3RvcjxzdGQ6OnBh
aXI8SlNDOjpFeGVjU3RhdGUqLCBTZWN1cml0eU9yaWdpbio+ID4mIHJlc3VsdCkKIHsKICAgICBm
b3IgKFNoZWxsTWFwOjppdGVyYXRvciBpdGVyID0gbV93aW5kb3dTaGVsbHMuYmVnaW4oKTsgaXRl
ciAhPSBtX3dpbmRvd1NoZWxscy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIEpTQzo6RXhlY1N0
YXRlKiBleGVjID0gaXRlci0+c2Vjb25kLT53aW5kb3coKS0+Z2xvYmFsRXhlYygpOwotICAgICAg
ICBTZWN1cml0eU9yaWdpbiogb3JpZ2luID0gaXRlci0+c2Vjb25kLT53aW5kb3coKS0+aW1wbCgp
LT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpOworICAgICAgICBKU0M6OkV4ZWNTdGF0ZSog
ZXhlYyA9IGl0ZXItPnZhbHVlLT53aW5kb3coKS0+Z2xvYmFsRXhlYygpOworICAgICAgICBTZWN1
cml0eU9yaWdpbiogb3JpZ2luID0gaXRlci0+dmFsdWUtPndpbmRvdygpLT5pbXBsKCktPmRvY3Vt
ZW50KCktPnNlY3VyaXR5T3JpZ2luKCk7CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoc3RkOjpwYWly
PFNjcmlwdFN0YXRlKiwgU2VjdXJpdHlPcmlnaW4qPihleGVjLCBvcmlnaW4pKTsKICAgICB9CiB9
CkBAIC00NDAsNyArNDQwLDcgQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpjbGVhbnVwU2NyaXB0
T2JqZWN0c0ZvclBsdWdpbih2b2lkKiBuYXRpdmVIYW5kbGUpCiAgICAgaWYgKGl0ID09IG1fcm9v
dE9iamVjdHMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGl0LT5zZWNvbmQtPmludmFs
aWRhdGUoKTsKKyAgICBpdC0+dmFsdWUtPmludmFsaWRhdGUoKTsKICAgICBtX3Jvb3RPYmplY3Rz
LnJlbW92ZShpdCk7CiB9CiAKQEAgLTQ1MCw3ICs0NTAsNyBAQCB2b2lkIFNjcmlwdENvbnRyb2xs
ZXI6OmNsZWFyU2NyaXB0T2JqZWN0cygpCiAKICAgICBSb290T2JqZWN0TWFwOjpjb25zdF9pdGVy
YXRvciBlbmQgPSBtX3Jvb3RPYmplY3RzLmVuZCgpOwogICAgIGZvciAoUm9vdE9iamVjdE1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Jvb3RPYmplY3RzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkKLSAgICAgICAgaXQtPnNlY29uZC0+aW52YWxpZGF0ZSgpOworICAgICAgICBpdC0+dmFsdWUt
PmludmFsaWRhdGUoKTsKIAogICAgIG1fcm9vdE9iamVjdHMuY2xlYXIoKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5oIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5oCmluZGV4IGY3NmZkZThmYzcy
ZjY4MDVlZjQ4YzAzYWZjMWQwNmEzYTE1NGNhODcuLmYzZGE1M2UwNTNkZjBmNmFmOTY3MTZmYzBj
MDJiMmI5NWNjMzU0ZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nj
cmlwdENvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRD
b250cm9sbGVyLmgKQEAgLTc0LDEyICs3NCwxMiBAQCBwdWJsaWM6CiAgICAgSlNET01XaW5kb3dT
aGVsbCogd2luZG93U2hlbGwoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCkKICAgICB7CiAgICAgICAg
IFNoZWxsTWFwOjppdGVyYXRvciBpdGVyID0gbV93aW5kb3dTaGVsbHMuZmluZCh3b3JsZCk7Ci0g
ICAgICAgIHJldHVybiAoaXRlciAhPSBtX3dpbmRvd1NoZWxscy5lbmQoKSkgPyBpdGVyLT5zZWNv
bmQuZ2V0KCkgOiBpbml0U2NyaXB0KHdvcmxkKTsKKyAgICAgICAgcmV0dXJuIChpdGVyICE9IG1f
d2luZG93U2hlbGxzLmVuZCgpKSA/IGl0ZXItPnZhbHVlLmdldCgpIDogaW5pdFNjcmlwdCh3b3Js
ZCk7CiAgICAgfQogICAgIEpTRE9NV2luZG93U2hlbGwqIGV4aXN0aW5nV2luZG93U2hlbGwoRE9N
V3JhcHBlcldvcmxkKiB3b3JsZCkgY29uc3QKICAgICB7CiAgICAgICAgIFNoZWxsTWFwOjpjb25z
dF9pdGVyYXRvciBpdGVyID0gbV93aW5kb3dTaGVsbHMuZmluZCh3b3JsZCk7Ci0gICAgICAgIHJl
dHVybiAoaXRlciAhPSBtX3dpbmRvd1NoZWxscy5lbmQoKSkgPyBpdGVyLT5zZWNvbmQuZ2V0KCkg
OiAwOworICAgICAgICByZXR1cm4gKGl0ZXIgIT0gbV93aW5kb3dTaGVsbHMuZW5kKCkpID8gaXRl
ci0+dmFsdWUuZ2V0KCkgOiAwOwogICAgIH0KICAgICBKU0RPTVdpbmRvdyogZ2xvYmFsT2JqZWN0
KERPTVdyYXBwZXJXb3JsZCogd29ybGQpCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCmluZGV4IGJiY2Q1NDI5OTY1NzBmYTEzNzk5
YTRlNWE4Mjk1MDMwZGU1MGEwYTEuLmI0MDEzOTI0YmU4MTY3MmNjYTE0YzdmODViODFiY2RiMjZh
NjJjOTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVn
U2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1Nl
cnZlci5jcHAKQEAgLTc1LDExICs3NSwxMSBAQCBTdHJpbmcgU2NyaXB0RGVidWdTZXJ2ZXI6OnNl
dEJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgY29uc3QgU2NyaXB0QnJlYQogICAg
IFNvdXJjZUlkVG9CcmVha3BvaW50c01hcDo6aXRlcmF0b3IgaXQgPSBtX3NvdXJjZUlkVG9CcmVh
a3BvaW50cy5maW5kKHNvdXJjZUlEVmFsdWUpOwogICAgIGlmIChpdCA9PSBtX3NvdXJjZUlkVG9C
cmVha3BvaW50cy5lbmQoKSkKICAgICAgICAgaXQgPSBtX3NvdXJjZUlkVG9CcmVha3BvaW50cy5z
ZXQoc291cmNlSURWYWx1ZSwgTGluZVRvQnJlYWtwb2ludE1hcCgpKS5pdGVyYXRvcjsKLSAgICBM
aW5lVG9CcmVha3BvaW50TWFwOjppdGVyYXRvciBicmVha3NJdCA9IGl0LT5zZWNvbmQuZmluZChz
Y3JpcHRCcmVha3BvaW50LmxpbmVOdW1iZXIgKyAxKTsKLSAgICBpZiAoYnJlYWtzSXQgPT0gaXQt
PnNlY29uZC5lbmQoKSkKLSAgICAgICAgYnJlYWtzSXQgPSBpdC0+c2Vjb25kLnNldChzY3JpcHRC
cmVha3BvaW50LmxpbmVOdW1iZXIgKyAxLCBCcmVha3BvaW50c0luTGluZSgpKS5pdGVyYXRvcjsK
KyAgICBMaW5lVG9CcmVha3BvaW50TWFwOjppdGVyYXRvciBicmVha3NJdCA9IGl0LT52YWx1ZS5m
aW5kKHNjcmlwdEJyZWFrcG9pbnQubGluZU51bWJlciArIDEpOworICAgIGlmIChicmVha3NJdCA9
PSBpdC0+dmFsdWUuZW5kKCkpCisgICAgICAgIGJyZWFrc0l0ID0gaXQtPnZhbHVlLnNldChzY3Jp
cHRCcmVha3BvaW50LmxpbmVOdW1iZXIgKyAxLCBCcmVha3BvaW50c0luTGluZSgpKS5pdGVyYXRv
cjsKIAotICAgIEJyZWFrcG9pbnRzSW5MaW5lJiBicmVha3NWZWN0b3IgPSBicmVha3NJdC0+c2Vj
b25kOworICAgIEJyZWFrcG9pbnRzSW5MaW5lJiBicmVha3NWZWN0b3IgPSBicmVha3NJdC0+dmFs
dWU7CiAgICAgdW5zaWduZWQgYnJlYWtzQ291bnQgPSBicmVha3NWZWN0b3Iuc2l6ZSgpOwogICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBicmVha3NDb3VudDsgaSsrKSB7CiAgICAgICAgIGlm
IChicmVha3NWZWN0b3IuYXQoaSkuY29sdW1uTnVtYmVyID09IHNjcmlwdEJyZWFrcG9pbnQuY29s
dW1uTnVtYmVyKQpAQCAtMTEyLDExICsxMTIsMTEgQEAgdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6
cmVtb3ZlQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIGJyZWFrcG9pbnRJZCkKICAgICBTb3VyY2VJ
ZFRvQnJlYWtwb2ludHNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zb3VyY2VJZFRvQnJlYWtwb2ludHMu
ZmluZChzb3VyY2VJRFZhbHVlKTsKICAgICBpZiAoaXQgPT0gbV9zb3VyY2VJZFRvQnJlYWtwb2lu
dHMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBMaW5lVG9CcmVha3BvaW50TWFwOjppdGVy
YXRvciBicmVha3NJdCA9IGl0LT5zZWNvbmQuZmluZChsaW5lTnVtYmVyICsgMSk7Ci0gICAgaWYg
KGJyZWFrc0l0ID09IGl0LT5zZWNvbmQuZW5kKCkpCisgICAgTGluZVRvQnJlYWtwb2ludE1hcDo6
aXRlcmF0b3IgYnJlYWtzSXQgPSBpdC0+dmFsdWUuZmluZChsaW5lTnVtYmVyICsgMSk7CisgICAg
aWYgKGJyZWFrc0l0ID09IGl0LT52YWx1ZS5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
QnJlYWtwb2ludHNJbkxpbmUmIGJyZWFrc1ZlY3RvciA9IGJyZWFrc0l0LT5zZWNvbmQ7CisgICAg
QnJlYWtwb2ludHNJbkxpbmUmIGJyZWFrc1ZlY3RvciA9IGJyZWFrc0l0LT52YWx1ZTsKICAgICB1
bnNpZ25lZCBicmVha3NDb3VudCA9IGJyZWFrc1ZlY3Rvci5zaXplKCk7CiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGJyZWFrc0NvdW50OyBpKyspIHsKICAgICAgICAgaWYgKGJyZWFrc1Zl
Y3Rvci5hdChpKS5jb2x1bW5OdW1iZXIgPT0gc3RhdGljX2Nhc3Q8aW50Pihjb2x1bW5OdW1iZXIp
KSB7CkBAIC0xNzgsMTIgKzE3OCwxMiBAQCBib29sIFNjcmlwdERlYnVnU2VydmVyOjpoYXNCcmVh
a3BvaW50KGludHB0cl90IHNvdXJjZUlELCBjb25zdCBUZXh0UG9zaXRpb24mIHBvcwogICAgIGlm
IChsaW5lTnVtYmVyIDwgMCB8fCBjb2x1bW5OdW1iZXIgPCAwKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBMaW5lVG9CcmVha3BvaW50TWFwOjpjb25zdF9pdGVyYXRvciBicmVha3NJdCA9
IGl0LT5zZWNvbmQuZmluZChsaW5lTnVtYmVyICsgMSk7Ci0gICAgaWYgKGJyZWFrc0l0ID09IGl0
LT5zZWNvbmQuZW5kKCkpCisgICAgTGluZVRvQnJlYWtwb2ludE1hcDo6Y29uc3RfaXRlcmF0b3Ig
YnJlYWtzSXQgPSBpdC0+dmFsdWUuZmluZChsaW5lTnVtYmVyICsgMSk7CisgICAgaWYgKGJyZWFr
c0l0ID09IGl0LT52YWx1ZS5lbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYm9v
bCBoaXQgPSBmYWxzZTsKLSAgICBjb25zdCBCcmVha3BvaW50c0luTGluZSYgYnJlYWtzVmVjdG9y
ID0gYnJlYWtzSXQtPnNlY29uZDsKKyAgICBjb25zdCBCcmVha3BvaW50c0luTGluZSYgYnJlYWtz
VmVjdG9yID0gYnJlYWtzSXQtPnZhbHVlOwogICAgIHVuc2lnbmVkIGJyZWFrc0NvdW50ID0gYnJl
YWtzVmVjdG9yLnNpemUoKTsKICAgICB1bnNpZ25lZCBpOwogICAgIGZvciAoaSA9IDA7IGkgPCBi
cmVha3NDb3VudDsgaSsrKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAppbmRleCBlYTcwMjI5NWI3ZTY1MzZlZDQ0NjE5ODMz
M2QwODcyZGQxMjQwNTNjLi41NzM0OWVmNjViYjhmNzI2OTdhZmU0NTdkNmJlNGNkNTQxMjZkMzc3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0
VmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZS5jcHAKQEAgLTQyNSw4ICs0MjUsOCBAQCBwcml2YXRlOgogICAgICAgICAvLyBIYW5k
bGUgZHVwbGljYXRlIHJlZmVyZW5jZXMKICAgICAgICAgaWYgKGZvdW5kICE9IG1fb2JqZWN0UG9v
bC5lbmQoKSkgewogICAgICAgICAgICAgd3JpdGUoT2JqZWN0UmVmZXJlbmNlVGFnKTsKLSAgICAg
ICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQzMl90Pihmb3VuZC0+c2Vjb25kKSA8IG1fb2Jq
ZWN0UG9vbC5zaXplKCkpOwotICAgICAgICAgICAgd3JpdGVPYmplY3RJbmRleChmb3VuZC0+c2Vj
b25kKTsKKyAgICAgICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQzMl90Pihmb3VuZC0+dmFs
dWUpIDwgbV9vYmplY3RQb29sLnNpemUoKSk7CisgICAgICAgICAgICB3cml0ZU9iamVjdEluZGV4
KGZvdW5kLT52YWx1ZSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCkBA
IC02ODMsNyArNjgzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBPYmplY3RQb29sOjpp
dGVyYXRvciBpbmRleCA9IG1fdHJhbnNmZXJyZWRNZXNzYWdlUG9ydHMuZmluZChvYmopOwogICAg
ICAgICAgICAgICAgIGlmIChpbmRleCAhPSBtX3RyYW5zZmVycmVkTWVzc2FnZVBvcnRzLmVuZCgp
KSB7CiAgICAgICAgICAgICAgICAgICAgIHdyaXRlKE1lc3NhZ2VQb3J0UmVmZXJlbmNlVGFnKTsK
LSAgICAgICAgICAgICAgICAgICAgd3JpdGUoaW5kZXgtPnNlY29uZCk7CisgICAgICAgICAgICAg
ICAgICAgIHdyaXRlKGluZGV4LT52YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAvLyBNZXNzYWdlUG9ydCBv
YmplY3QgY291bGQgbm90IGJlIGZvdW5kIGluIHRyYW5zZmVycmVkIG1lc3NhZ2UgcG9ydHMKQEAg
LTY5OSw3ICs2OTksNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIE9iamVjdFBvb2w6Oml0
ZXJhdG9yIGluZGV4ID0gbV90cmFuc2ZlcnJlZEFycmF5QnVmZmVycy5maW5kKG9iaik7CiAgICAg
ICAgICAgICAgICAgaWYgKGluZGV4ICE9IG1fdHJhbnNmZXJyZWRBcnJheUJ1ZmZlcnMuZW5kKCkp
IHsKICAgICAgICAgICAgICAgICAgICAgd3JpdGUoQXJyYXlCdWZmZXJUcmFuc2ZlclRhZyk7Ci0g
ICAgICAgICAgICAgICAgICAgIHdyaXRlKGluZGV4LT5zZWNvbmQpOworICAgICAgICAgICAgICAg
ICAgICB3cml0ZShpbmRleC0+dmFsdWUpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKCFzdGFydE9iamVjdElu
dGVybmFsKG9iaikpIC8vIGhhbmRsZSBkdXBsaWNhdGVzCkBAIC03OTYsNyArNzk2LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgU3RyaW5nQ29uc3RhbnRQb29sOjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0g
bV9jb25zdGFudFBvb2wuYWRkKHN0ci5pbXBsKCksIG1fY29uc3RhbnRQb29sLnNpemUoKSk7CiAg
ICAgICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKICAgICAgICAgICAgIHdyaXRlKFN0
cmluZ1Bvb2xUYWcpOwotICAgICAgICAgICAgd3JpdGVTdHJpbmdJbmRleChhZGRSZXN1bHQuaXRl
cmF0b3ItPnNlY29uZCk7CisgICAgICAgICAgICB3cml0ZVN0cmluZ0luZGV4KGFkZFJlc3VsdC5p
dGVyYXRvci0+dmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBt
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KaW5k
ZXggMmQ3OTU3Y2ZiNjJhMGMxN2NlOWJhZDVjMjA4N2RlYmU0NzUzYzIwYi4uZmZmYzA2ZDcxZjRl
ZTJhZTQzN2UxY2ZiZTE4YTU4YzE4Yzg1YmY2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KQEAgLTI5NzcsNyArMjk3Nyw3IEBA
IHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiAke2NsYXNzTmFtZX06OkdldFJh
d1RlbXBsYXRlKCkKICAgICBWOFBlcklzb2xhdGVEYXRhKiBkYXRhID0gVjhQZXJJc29sYXRlRGF0
YTo6Y3VycmVudCgpOwogICAgIFY4UGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRv
ciByZXN1bHQgPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwogICAgIGlmIChy
ZXN1bHQgIT0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHJl
c3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAogICAgIHY4OjpI
YW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25U
ZW1wbGF0ZT4gdGVtcGwgPSBjcmVhdGVSYXdUZW1wbGF0ZSgpOwpAQCAtMjk5MCw3ICsyOTkwLDcg
QEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+ICR7Y2xhc3NOYW1lfTo6R2V0
VGVtcGxhdGUoKQogICAgIFY4UGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOFBlcklzb2xhdGVEYXRh
OjpjdXJyZW50KCk7CiAgICAgVjhQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9y
IHJlc3VsdCA9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3Vs
dCAhPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5z
ZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNj
b3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRl
PiB0ZW1wbCA9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVjgvVjhGbG9hdDY0QXJyYXkuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Y4L1Y4RmxvYXQ2NEFycmF5LmNwcAppbmRleCBiZGE0N2E1YWNkZWI5ZWJmN2FlZGJk
MWYzZDMzY2Y5ZDE1NGY0NDBkLi4xYmY2ODI0MmFhNTcxNjYwMDE2YThmZmE5ZWFjOGIxMWJhZDk2
NjAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgv
VjhGbG9hdDY0QXJyYXkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOEZsb2F0NjRBcnJheS5jcHAKQEAgLTExOSw3ICsxMTksNyBAQCB2ODo6UGVyc2lz
dGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhGbG9hdDY0QXJyYXk6OkdldFJhd1RlbXBsYXRl
KCkKICAgICBWOFBlcklzb2xhdGVEYXRhKiBkYXRhID0gVjhQZXJJc29sYXRlRGF0YTo6Y3VycmVu
dCgpOwogICAgIFY4UGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQg
PSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwogICAgIGlmIChyZXN1bHQgIT0g
ZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vj
b25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVTY29w
ZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4g
dGVtcGwgPSBjcmVhdGVSYXdUZW1wbGF0ZSgpOwpAQCAtMTMyLDcgKzEzMiw3IEBAIHY4OjpQZXJz
aXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOEZsb2F0NjRBcnJheTo6R2V0VGVtcGxhdGUo
KQogICAgIFY4UGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOFBlcklzb2xhdGVEYXRhOjpjdXJyZW50
KCk7CiAgICAgVjhQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9
IGRhdGEtPnRlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRh
LT50ZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7Cisg
ICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRs
ZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhU
ZXN0QWN0aXZlRE9NT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOFRlc3RBY3RpdmVET01PYmplY3QuY3BwCmluZGV4IGMyYzk5NDA0NTlhMzFkZWE2
MjQ5ZjcxZWVmYWZmNmMyYzEwNjAyYWUuLjVkMmQ1Y2FiY2NjOGFkNzc3YzkzZGQzNTU3MTY4OWY5
N2RlODYzYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9WOC9WOFRlc3RBY3RpdmVET01PYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RBY3RpdmVET01PYmplY3QuY3BwCkBAIC0xNDgsNyAr
MTQ4LDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdEFjdGl2
ZURPTU9iamVjdDo6R2V0UmF3VGVtcGxhdGUoKQogICAgIFY4UGVySXNvbGF0ZURhdGEqIGRhdGEg
PSBWOFBlcklzb2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhQZXJJc29sYXRlRGF0YTo6VGVt
cGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZmluZCgm
aW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmVuZCgpKQot
ICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZh
bHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0
ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9IGNyZWF0ZVJhd1RlbXBsYXRlKCk7CkBA
IC0xNjEsNyArMTYxLDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4
VGVzdEFjdGl2ZURPTU9iamVjdDo6R2V0VGVtcGxhdGUoKQogICAgIFY4UGVySXNvbGF0ZURhdGEq
IGRhdGEgPSBWOFBlcklzb2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhQZXJJc29sYXRlRGF0
YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZmlu
ZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmVuZCgpKQot
ICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZh
bHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0
ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEN1c3RvbU5h
bWVkR2V0dGVyLmNwcAppbmRleCA4OTc1Y2Y2MzI1ZTIwNmUzNzA4NjI0MzM5YzhlMzJhZGY3ZjEw
ZGNiLi5lNGQyZjdkNGM0YWM3ZmQwMGRlN2RkZDNmYmYzNjQyZjBiYzY4OTlkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Q3VzdG9tTmFt
ZWRHZXR0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9W
OC9WOFRlc3RDdXN0b21OYW1lZEdldHRlci5jcHAKQEAgLTgyLDcgKzgyLDcgQEAgdjg6OlBlcnNp
c3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdEN1c3RvbU5hbWVkR2V0dGVyOjpHZXRS
YXdUZW1wbGF0ZSgpCiAgICAgVjhQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4UGVySXNvbGF0ZURh
dGE6OmN1cnJlbnQoKTsKICAgICBWOFBlcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0
b3IgcmVzdWx0ID0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAo
cmVzdWx0ICE9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiBy
ZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6
SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9u
VGVtcGxhdGU+IHRlbXBsID0gY3JlYXRlUmF3VGVtcGxhdGUoKTsKQEAgLTk1LDcgKzk1LDcgQEAg
djg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdEN1c3RvbU5hbWVkR2V0
dGVyOjpHZXRUZW1wbGF0ZSgpCiAgICAgVjhQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4UGVySXNv
bGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOFBlcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6
aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+dGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBp
ZiAocmVzdWx0ICE9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiBy
ZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6
SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9u
VGVtcGxhdGU+IHRlbXBsID0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudENvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudENvbnN0cnVjdG9yLmNwcAppbmRl
eCBmZTNlYjRmZmYwNTA2OGY0MGQyYzc1YjUxMTExMTI1NjQxMDE1ZTEyLi4zMjYzODNjMzk5MjNh
NTY2N2Q0Y2VjOTllNTBkNWQ1ZmJlYmQwNzZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50Q29uc3Ry
dWN0b3IuY3BwCkBAIC0xMTksNyArMTE5LDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9u
VGVtcGxhdGU+IFY4VGVzdEV2ZW50Q29uc3RydWN0b3I6OkdldFJhd1RlbXBsYXRlKCkKICAgICBW
OFBlcklzb2xhdGVEYXRhKiBkYXRhID0gVjhQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAg
IFY4UGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT5y
YXdUZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+cmF3
VGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAg
ICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVT
Y29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPSBj
cmVhdGVSYXdUZW1wbGF0ZSgpOwpAQCAtMTMyLDcgKzEzMiw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4
OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3RFdmVudENvbnN0cnVjdG9yOjpHZXRUZW1wbGF0ZSgp
CiAgICAgVjhQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4UGVySXNvbGF0ZURhdGE6OmN1cnJlbnQo
KTsKICAgICBWOFBlcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0g
ZGF0YS0+dGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEt
PnRlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxl
U2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3RFdmVudFRhcmdldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VjgvVjhUZXN0RXZlbnRUYXJnZXQuY3BwCmluZGV4IDE5NDBkN2RiZGJlYTg0MjJkN2M2M2U4MWM4
YWExNGQzOGUyOGU0MGIuLmVkYmVmM2JiYTc0MGI5YTE2NDJmZTNmZWQxYjM5NTVmNzY1OTY5YTIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3RFdmVudFRhcmdldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Y4L1Y4VGVzdEV2ZW50VGFyZ2V0LmNwcApAQCAtMTQzLDcgKzE0Myw3IEBAIHY4OjpQZXJz
aXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3RFdmVudFRhcmdldDo6R2V0UmF3VGVt
cGxhdGUoKQogICAgIFY4UGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOFBlcklzb2xhdGVEYXRhOjpj
dXJyZW50KCk7CiAgICAgVjhQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJl
c3VsdCA9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3Vs
dCAhPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0
LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRs
ZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBs
YXRlPiB0ZW1wbCA9IGNyZWF0ZVJhd1RlbXBsYXRlKCk7CkBAIC0xNTYsNyArMTU2LDcgQEAgdjg6
OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdEV2ZW50VGFyZ2V0OjpHZXRU
ZW1wbGF0ZSgpCiAgICAgVjhQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4UGVySXNvbGF0ZURhdGE6
OmN1cnJlbnQoKTsKICAgICBWOFBlcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3Ig
cmVzdWx0ID0gZGF0YS0+dGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0
ICE9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNl
Y29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2Nv
cGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+
IHRlbXBsID0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9WOC9WOFRlc3RFeGNlcHRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Y4L1Y4VGVzdEV4Y2VwdGlvbi5jcHAKaW5kZXggOTM3NWNlMzEwNjM5NDQ2NDBjNWIw
ZjZmNzcxYmExODA5Mzg2OTMwNS4uNTBhODdkNjY0YjJiODgzNmFmZDdmNTUyMjBmODNkMDQzNmQz
NzFkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4
L1Y4VGVzdEV4Y2VwdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Y4L1Y4VGVzdEV4Y2VwdGlvbi5jcHAKQEAgLTczLDcgKzczLDcgQEAgdjg6OlBlcnNp
c3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdEV4Y2VwdGlvbjo6R2V0UmF3VGVtcGxh
dGUoKQogICAgIFY4UGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOFBlcklzb2xhdGVEYXRhOjpjdXJy
ZW50KCk7CiAgICAgVjhQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3Vs
dCA9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAh
PSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5z
ZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNj
b3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRl
PiB0ZW1wbCA9IGNyZWF0ZVJhd1RlbXBsYXRlKCk7CkBAIC04Niw3ICs4Niw3IEBAIHY4OjpQZXJz
aXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3RFeGNlcHRpb246OkdldFRlbXBsYXRl
KCkKICAgICBWOFBlcklzb2xhdGVEYXRhKiBkYXRhID0gVjhQZXJJc29sYXRlRGF0YTo6Y3VycmVu
dCgpOwogICAgIFY4UGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQg
PSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwogICAgIGlmIChyZXN1bHQgIT0gZGF0
YS0+dGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOwor
ICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5k
bGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwg
PQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4
VGVzdEludGVyZmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VjgvVjhUZXN0SW50ZXJmYWNlLmNwcAppbmRleCAwMDk4ZDVlYjBiODQ4ZDY4MTY2MWIwMzU5ZDlh
OGMzMDM1ODI4N2E5Li5jMDJhODg1NjU5ODliYTU3YjNhMjE0MzRhZTljMmVkZWNlY2U4NDk2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0
SW50ZXJmYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VjgvVjhUZXN0SW50ZXJmYWNlLmNwcApAQCAtMzEyLDcgKzMxMiw3IEBAIHY4OjpQZXJzaXN0ZW50
PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3RJbnRlcmZhY2U6OkdldFJhd1RlbXBsYXRlKCkK
ICAgICBWOFBlcklzb2xhdGVEYXRhKiBkYXRhID0gVjhQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgp
OwogICAgIFY4UGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBk
YXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwogICAgIGlmIChyZXN1bHQgIT0gZGF0
YS0+cmF3VGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25k
OworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBo
YW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVt
cGwgPSBjcmVhdGVSYXdUZW1wbGF0ZSgpOwpAQCAtMzI1LDcgKzMyNSw3IEBAIHY4OjpQZXJzaXN0
ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3RJbnRlcmZhY2U6OkdldFRlbXBsYXRlKCkK
ICAgICBWOFBlcklzb2xhdGVEYXRhKiBkYXRhID0gVjhQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgp
OwogICAgIFY4UGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBk
YXRhLT50ZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+
dGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAg
ICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVT
Y29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVz
dE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Y4L1Y4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCmluZGV4IGFjMTE2
Nzk5OGQwOGM3NWQ0NmY4NzYwMTljNzg5ZTQ3ZTJjYjdhM2YuLmRkOGM1OTJhYTkwZDc2NGUwMTNk
Nzg5NzQxY2JhZTYxZjliYWRmMjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lci5jcHAKQEAgLTgyLDcgKzgyLDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0
aW9uVGVtcGxhdGU+IFY4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI6OkdldFJhd1RlbXBsYXQK
ICAgICBWOFBlcklzb2xhdGVEYXRhKiBkYXRhID0gVjhQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgp
OwogICAgIFY4UGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBk
YXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwogICAgIGlmIChyZXN1bHQgIT0gZGF0
YS0+cmF3VGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25k
OworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBo
YW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVt
cGwgPSBjcmVhdGVSYXdUZW1wbGF0ZSgpOwpAQCAtOTUsNyArOTUsNyBAQCB2ODo6UGVyc2lzdGVu
dDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6R2V0
VGVtcGxhdGUoKQogICAgIFY4UGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOFBlcklzb2xhdGVEYXRh
OjpjdXJyZW50KCk7CiAgICAgVjhQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9y
IHJlc3VsdCA9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3Vs
dCAhPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5z
ZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNj
b3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRl
PiB0ZW1wbCA9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVjgvVjhUZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAKaW5kZXggN2E3NGY1
ODI3OTJhODE2ODFlNDIyZWNkZWFkNDViMTY0ZmNjODE3OS4uNjc2MzVjZmYzZGNlY2JiM2FmNTky
OWRlM2YyMDc2YTdhZDhmMWMxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROYW1lZENvbnN0cnVjdG9yLmNw
cApAQCAtMTIyLDcgKzEyMiw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRl
PiBWOFRlc3ROYW1lZENvbnN0cnVjdG9yOjpHZXRSYXdUZW1wbGF0ZSgpCiAgICAgVjhQZXJJc29s
YXRlRGF0YSogZGF0YSA9IFY4UGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOFBlcklz
b2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+cmF3VGVtcGxh
dGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnJhd1RlbXBsYXRl
TWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAg
ICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0gY3JlYXRlUmF3
VGVtcGxhdGUoKTsKQEAgLTEzNSw3ICsxMzUsNyBAQCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rp
b25UZW1wbGF0ZT4gVjhUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6R2V0VGVtcGxhdGUoKQogICAgIFY4
UGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOFBlcklzb2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAg
VjhQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnRl
bXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT50ZW1wbGF0
ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJl
dHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwog
ICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Tm9kZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Tm9kZS5j
cHAKaW5kZXggY2U0MmY5MmVkOWY2OWY0NDkwZDYwYzY3MjFkZGE2OTA5ZDJhYzEzMC4uNDkwZjkx
MTdhZGJmNjE3NjZhOTliM2I2MDliNWQwYWRiZTNhNWRhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5vZGUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROb2RlLmNwcApAQCAtODEs
NyArODEsNyBAQCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0Tm9k
ZTo6R2V0UmF3VGVtcGxhdGUoKQogICAgIFY4UGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOFBlcklz
b2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6
Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAg
ICAgaWYgKHJlc3VsdCAhPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICBy
ZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAg
ICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpG
dW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9IGNyZWF0ZVJhd1RlbXBsYXRlKCk7CkBAIC05NCw3ICs5
NCw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3ROb2RlOjpH
ZXRUZW1wbGF0ZSgpCiAgICAgVjhQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4UGVySXNvbGF0ZURh
dGE6OmN1cnJlbnQoKTsKICAgICBWOFBlcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0
b3IgcmVzdWx0ID0gZGF0YS0+dGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVz
dWx0ICE9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQt
PnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxl
U2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxh
dGU+IHRlbXBsID0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOFRlc3RPYmouY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKaW5kZXggMzdkNzM5MzkzNDRmYzdhMDA5YjcxNmU3MjNjMjcz
YzE3N2Y0MmFkYy4uMjg1MmExYzQ5ZjIyMmY2YzI5MDZmOWNiNDg4YTRhYjhlMGJiODZhOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9i
ai5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVz
dE9iai5jcHAKQEAgLTIyNjcsNyArMjI2Nyw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlv
blRlbXBsYXRlPiBWOFRlc3RPYmo6OkdldFJhd1RlbXBsYXRlKCkKICAgICBWOFBlcklzb2xhdGVE
YXRhKiBkYXRhID0gVjhQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4UGVySXNvbGF0
ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT5yYXdUZW1wbGF0ZU1h
cCgpLmZpbmQoJmluZm8pOwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+cmF3VGVtcGxhdGVNYXAo
KS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4g
cmVzdWx0LT52YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2
ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPSBjcmVhdGVSYXdUZW1w
bGF0ZSgpOwpAQCAtMjI4MCw3ICsyMjgwLDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9u
VGVtcGxhdGU+IFY4VGVzdE9iajo6R2V0VGVtcGxhdGUoKQogICAgIFY4UGVySXNvbGF0ZURhdGEq
IGRhdGEgPSBWOFBlcklzb2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhQZXJJc29sYXRlRGF0
YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZmlu
ZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmVuZCgpKQot
ICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZh
bHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0
ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9W
OFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCmluZGV4IGFlOGQxOGQ0NWNm
ZGM1YWM0OWEzYWRkYmM0MWY0Y2Y1MmI5YWRlYWUuLjk4NjNkNzQxYWRlNmY0M2FhNWViMDE2NTcw
YjQzZDZiMmY3MDE1ZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9WOC9WOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCkBAIC0yNjUsNyArMjY1LDcgQEAgdjg6OlBlcnNpc3Rl
bnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZTo6R2V0UmEKICAgICBWOFBlcklzb2xhdGVEYXRhKiBkYXRhID0gVjhQZXJJc29sYXRlRGF0
YTo6Y3VycmVudCgpOwogICAgIFY4UGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRv
ciByZXN1bHQgPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwogICAgIGlmIChy
ZXN1bHQgIT0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHJl
c3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAogICAgIHY4OjpI
YW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25U
ZW1wbGF0ZT4gdGVtcGwgPSBjcmVhdGVSYXdUZW1wbGF0ZSgpOwpAQCAtMjc4LDcgKzI3OCw3IEBA
IHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2U6OkdldFRlCiAgICAgVjhQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4
UGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOFBlcklzb2xhdGVEYXRhOjpUZW1wbGF0
ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+dGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsK
ICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJl
dHVybiByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAg
ICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1
bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L0RPTVdyYXBwZXJXb3JsZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9E
T01XcmFwcGVyV29ybGQuY3BwCmluZGV4IDMxYTAyODZjNDUxZjc2N2RjZDNlYjQ0MWE3ZmU4YzEz
ZmNjY2IzMWYuLjUyNzM3OTYzNzRlOWUyOGYwNDQ4ODA0NjliNzcyMjA2OTNmMjE4Y2IgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTVdyYXBwZXJXb3JsZC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NV3JhcHBlcldvcmxkLmNwcApAQCAtODIs
NyArODIsNyBAQCB2b2lkIERPTVdyYXBwZXJXb3JsZDo6ZGVhbGxvY2F0ZShET01XcmFwcGVyV29y
bGQqIHdvcmxkKQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KLSAgICBBU1NFUlQoaS0+c2Vjb25kID09IHdvcmxkKTsKKyAgICBBU1NFUlQoaS0+
dmFsdWUgPT0gd29ybGQpOwogCiAgICAgbWFwLnJlbW92ZShpKTsKICAgICBpc29sYXRlZFdvcmxk
Q291bnQtLTsKQEAgLTEwMSw5ICsxMDEsOSBAQCBQYXNzUmVmUHRyPERPTVdyYXBwZXJXb3JsZD4g
RE9NV3JhcHBlcldvcmxkOjpnZXRPckNyZWF0ZUlzb2xhdGVkV29ybGQoaW50IHdvcmxkSQogICAg
IGVsc2UgewogICAgICAgICBXb3JsZE1hcDo6aXRlcmF0b3IgaSA9IG1hcC5maW5kKHdvcmxkSWQp
OwogICAgICAgICBpZiAoaSAhPSBtYXAuZW5kKCkpIHsKLSAgICAgICAgICAgIEFTU0VSVChpLT5z
ZWNvbmQtPndvcmxkSWQoKSA9PSB3b3JsZElkKTsKLSAgICAgICAgICAgIEFTU0VSVChpLT5zZWNv
bmQtPmV4dGVuc2lvbkdyb3VwKCkgPT0gZXh0ZW5zaW9uR3JvdXApOwotICAgICAgICAgICAgcmV0
dXJuIGktPnNlY29uZDsKKyAgICAgICAgICAgIEFTU0VSVChpLT52YWx1ZS0+d29ybGRJZCgpID09
IHdvcmxkSWQpOworICAgICAgICAgICAgQVNTRVJUKGktPnZhbHVlLT5leHRlbnNpb25Hcm91cCgp
ID09IGV4dGVuc2lvbkdyb3VwKTsKKyAgICAgICAgICAgIHJldHVybiBpLT52YWx1ZTsKICAgICAg
ICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvTlBW
OE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9OUFY4T2JqZWN0LmNwcApp
bmRleCBhMzJiNDRlYTU5NjkwNDM2Yzk0NTE3MzczNWQzZTk1OTA5NGQ2MGNkLi5iNWYzYzY2YjMz
YjdjNTgyM2RmMDU0YWY1NzgyYjUwOTllMDdmNjAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9OUFY4T2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9OUFY4T2JqZWN0LmNwcApAQCAtODYsNyArODYsNyBAQCBzdGF0aWMgdm9pZCBmcmVlVjhO
UE9iamVjdChOUE9iamVjdCogbnBPYmplY3QpCiAgICAgaWYgKGludCB2OE9iamVjdEhhc2ggPSB2
OE5wT2JqZWN0LT52OE9iamVjdC0+R2V0SWRlbnRpdHlIYXNoKCkpIHsKICAgICAgICAgVjhOUE9i
amVjdE1hcDo6aXRlcmF0b3IgaXRlciA9IHN0YXRpY1Y4TlBPYmplY3RNYXAoKS0+ZmluZCh2OE9i
amVjdEhhc2gpOwogICAgICAgICBpZiAoaXRlciAhPSBzdGF0aWNWOE5QT2JqZWN0TWFwKCktPmVu
ZCgpKSB7Ci0gICAgICAgICAgICBWOE5QT2JqZWN0VmVjdG9yJiBvYmplY3RzID0gaXRlci0+c2Vj
b25kOworICAgICAgICAgICAgVjhOUE9iamVjdFZlY3RvciYgb2JqZWN0cyA9IGl0ZXItPnZhbHVl
OwogICAgICAgICAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG9iamVjdHMuc2l6
ZSgpOyArK2luZGV4KSB7CiAgICAgICAgICAgICAgICAgaWYgKG9iamVjdHMuYXQoaW5kZXgpID09
IHY4TnBPYmplY3QpIHsKICAgICAgICAgICAgICAgICAgICAgb2JqZWN0cy5yZW1vdmUoaW5kZXgp
OwpAQCAtMTYxLDcgKzE2MSw3IEBAIE5QT2JqZWN0KiBucENyZWF0ZVY4U2NyaXB0T2JqZWN0KE5Q
UCBucHAsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0LCBET01XaW5kCiAgICAgQVNTRVJU
KHY4T2JqZWN0SGFzaCk7CiAgICAgVjhOUE9iamVjdE1hcDo6aXRlcmF0b3IgaXRlciA9IHN0YXRp
Y1Y4TlBPYmplY3RNYXAoKS0+ZmluZCh2OE9iamVjdEhhc2gpOwogICAgIGlmIChpdGVyICE9IHN0
YXRpY1Y4TlBPYmplY3RNYXAoKS0+ZW5kKCkpIHsKLSAgICAgICAgVjhOUE9iamVjdFZlY3RvciYg
b2JqZWN0cyA9IGl0ZXItPnNlY29uZDsKKyAgICAgICAgVjhOUE9iamVjdFZlY3RvciYgb2JqZWN0
cyA9IGl0ZXItPnZhbHVlOwogICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwg
b2JqZWN0cy5zaXplKCk7ICsraW5kZXgpIHsKICAgICAgICAgICAgIFY4TlBPYmplY3QqIHY4bnBP
YmplY3QgPSBvYmplY3RzLmF0KGluZGV4KTsKICAgICAgICAgICAgIGlmICh2OG5wT2JqZWN0LT5y
b290T2JqZWN0ID09IHJvb3QpIHsKQEAgLTE4MSw3ICsxODEsNyBAQCBOUE9iamVjdCogbnBDcmVh
dGVWOFNjcmlwdE9iamVjdChOUFAgbnBwLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCwg
RE9NV2luZAogI2VuZGlmCiAgICAgdjhucE9iamVjdC0+cm9vdE9iamVjdCA9IHJvb3Q7CiAKLSAg
ICBpdGVyLT5zZWNvbmQuYXBwZW5kKHY4bnBPYmplY3QpOworICAgIGl0ZXItPnZhbHVlLmFwcGVu
ZCh2OG5wT2JqZWN0KTsKIAogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PE5QT2JqZWN0Kj4o
djhucE9iamVjdCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9T
Y3JpcHRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENv
bnRyb2xsZXIuY3BwCmluZGV4IDZhMTNkZWFhYzM5ZjhlMGFlYWJiODExNTAyYjk3YTZkNmYwMDQ2
MTEuLjM4N2Q5MzFiOWFhZTUwZDkwN2QyMjg2OGVhYjcwYWI0MTdlNjJiYmMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwCkBAIC0xMjgsOCAr
MTI4LDggQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpjbGVhclNjcmlwdE9iamVjdHMoKQogewog
ICAgIFBsdWdpbk9iamVjdE1hcDo6aXRlcmF0b3IgaXQgPSBtX3BsdWdpbk9iamVjdHMuYmVnaW4o
KTsKICAgICBmb3IgKDsgaXQgIT0gbV9wbHVnaW5PYmplY3RzLmVuZCgpOyArK2l0KSB7Ci0gICAg
ICAgIF9OUE5fVW5yZWdpc3Rlck9iamVjdChpdC0+c2Vjb25kKTsKLSAgICAgICAgX05QTl9SZWxl
YXNlT2JqZWN0KGl0LT5zZWNvbmQpOworICAgICAgICBfTlBOX1VucmVnaXN0ZXJPYmplY3QoaXQt
PnZhbHVlKTsKKyAgICAgICAgX05QTl9SZWxlYXNlT2JqZWN0KGl0LT52YWx1ZSk7CiAgICAgfQog
ICAgIG1fcGx1Z2luT2JqZWN0cy5jbGVhcigpOwogCkBAIC0xNTcsNyArMTU3LDcgQEAgdm9pZCBT
Y3JpcHRDb250cm9sbGVyOjpyZXNldElzb2xhdGVkV29ybGRzKCkKIHsKICAgICBmb3IgKElzb2xh
dGVkV29ybGRNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2lzb2xhdGVkV29ybGRzLmJlZ2luKCk7CiAg
ICAgICAgICBpdGVyICE9IG1faXNvbGF0ZWRXb3JsZHMuZW5kKCk7ICsraXRlcikgewotICAgICAg
ICBpdGVyLT5zZWNvbmQtPmRlc3Ryb3koKTsKKyAgICAgICAgaXRlci0+dmFsdWUtPmRlc3Ryb3ko
KTsKICAgICB9CiAgICAgbV9pc29sYXRlZFdvcmxkcy5jbGVhcigpOwogICAgIG1faXNvbGF0ZWRX
b3JsZFNlY3VyaXR5T3JpZ2lucy5jbGVhcigpOwpAQCAtMzQ0LDcgKzM0NCw3IEBAIHZvaWQgU2Ny
aXB0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQodW5zaWduZWQgd29ybGRJRCwg
Y29uc3QgVmVjdG9yPFNjCiAgICAgICAgIGlmICh3b3JsZElEID4gMCkgewogICAgICAgICAgICAg
SXNvbGF0ZWRXb3JsZE1hcDo6aXRlcmF0b3IgaXRlciA9IG1faXNvbGF0ZWRXb3JsZHMuZmluZCh3
b3JsZElEKTsKICAgICAgICAgICAgIGlmIChpdGVyICE9IG1faXNvbGF0ZWRXb3JsZHMuZW5kKCkp
Ci0gICAgICAgICAgICAgICAgaXNvbGF0ZWRDb250ZXh0ID0gaXRlci0+c2Vjb25kOworICAgICAg
ICAgICAgICAgIGlzb2xhdGVkQ29udGV4dCA9IGl0ZXItPnZhbHVlOwogICAgICAgICAgICAgZWxz
ZSB7CiAgICAgICAgICAgICAgICAgaXNvbGF0ZWRDb250ZXh0ID0gbmV3IFY4SXNvbGF0ZWRDb250
ZXh0KG1fZnJhbWUsIERPTVdyYXBwZXJXb3JsZDo6Z2V0T3JDcmVhdGVJc29sYXRlZFdvcmxkKHdv
cmxkSUQsIGV4dGVuc2lvbkdyb3VwKSk7CiAgICAgICAgICAgICAgICAgaWYgKGlzb2xhdGVkQ29u
dGV4dC0+Y29udGV4dCgpLklzRW1wdHkoKSkgewpAQCAtMzU4LDcgKzM1OCw3IEBAIHZvaWQgU2Ny
aXB0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQodW5zaWduZWQgd29ybGRJRCwg
Y29uc3QgVmVjdG9yPFNjCiAKICAgICAgICAgICAgIElzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdp
bk1hcDo6aXRlcmF0b3Igc2VjdXJpdHlPcmlnaW5JdGVyID0gbV9pc29sYXRlZFdvcmxkU2VjdXJp
dHlPcmlnaW5zLmZpbmQod29ybGRJRCk7CiAgICAgICAgICAgICBpZiAoc2VjdXJpdHlPcmlnaW5J
dGVyICE9IG1faXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2lucy5lbmQoKSkKLSAgICAgICAgICAg
ICAgICBpc29sYXRlZENvbnRleHQtPnNldFNlY3VyaXR5T3JpZ2luKHNlY3VyaXR5T3JpZ2luSXRl
ci0+c2Vjb25kKTsKKyAgICAgICAgICAgICAgICBpc29sYXRlZENvbnRleHQtPnNldFNlY3VyaXR5
T3JpZ2luKHNlY3VyaXR5T3JpZ2luSXRlci0+dmFsdWUpOwogICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgaXNvbGF0ZWRDb250ZXh0ID0gbmV3IFY4SXNvbGF0ZWRDb250ZXh0KG1fZnJhbWUs
IERPTVdyYXBwZXJXb3JsZDo6Z2V0T3JDcmVhdGVJc29sYXRlZFdvcmxkKHdvcmxkSUQsIGV4dGVu
c2lvbkdyb3VwKSk7CiAgICAgICAgICAgICBpZiAoaXNvbGF0ZWRDb250ZXh0LT5jb250ZXh0KCku
SXNFbXB0eSgpKSB7CkBAIC0zOTYsNyArMzk2LDcgQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpz
ZXRJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4oaW50IHdvcmxkSUQsIFBhc3NSZWZQdHI8U2UK
ICAgICBtX2lzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbnMuc2V0KHdvcmxkSUQsIHNlY3VyaXR5
T3JpZ2luKTsKICAgICBJc29sYXRlZFdvcmxkTWFwOjppdGVyYXRvciBpdGVyID0gbV9pc29sYXRl
ZFdvcmxkcy5maW5kKHdvcmxkSUQpOwogICAgIGlmIChpdGVyICE9IG1faXNvbGF0ZWRXb3JsZHMu
ZW5kKCkpCi0gICAgICAgIGl0ZXItPnNlY29uZC0+c2V0U2VjdXJpdHlPcmlnaW4oc2VjdXJpdHlP
cmlnaW4pOworICAgICAgICBpdGVyLT52YWx1ZS0+c2V0U2VjdXJpdHlPcmlnaW4oc2VjdXJpdHlP
cmlnaW4pOwogfQogCiBUZXh0UG9zaXRpb24gU2NyaXB0Q29udHJvbGxlcjo6ZXZlbnRIYW5kbGVy
UG9zaXRpb24oKSBjb25zdApAQCAtNTQ2LDggKzU0Niw4IEBAIHZvaWQgU2NyaXB0Q29udHJvbGxl
cjo6Y2xlYW51cFNjcmlwdE9iamVjdHNGb3JQbHVnaW4oV2lkZ2V0KiBuYXRpdmVIYW5kbGUpCiAg
ICAgUGx1Z2luT2JqZWN0TWFwOjppdGVyYXRvciBpdCA9IG1fcGx1Z2luT2JqZWN0cy5maW5kKG5h
dGl2ZUhhbmRsZSk7CiAgICAgaWYgKGl0ID09IG1fcGx1Z2luT2JqZWN0cy5lbmQoKSkKICAgICAg
ICAgcmV0dXJuOwotICAgIF9OUE5fVW5yZWdpc3Rlck9iamVjdChpdC0+c2Vjb25kKTsKLSAgICBf
TlBOX1JlbGVhc2VPYmplY3QoaXQtPnNlY29uZCk7CisgICAgX05QTl9VbnJlZ2lzdGVyT2JqZWN0
KGl0LT52YWx1ZSk7CisgICAgX05QTl9SZWxlYXNlT2JqZWN0KGl0LT52YWx1ZSk7CiAgICAgbV9w
bHVnaW5PYmplY3RzLnJlbW92ZShpdCk7CiB9CiAKQEAgLTY2Myw3ICs2NjMsNyBAQCB2b2lkIFNj
cmlwdENvbnRyb2xsZXI6OmNvbGxlY3RJc29sYXRlZENvbnRleHRzKFZlY3RvcjxzdGQ6OnBhaXI8
U2NyaXB0U3RhdGUqLCBTZQogewogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAg
ICBmb3IgKElzb2xhdGVkV29ybGRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pc29sYXRlZFdvcmxkcy5i
ZWdpbigpOyBpdCAhPSBtX2lzb2xhdGVkV29ybGRzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIFY4
SXNvbGF0ZWRDb250ZXh0KiBpc29sYXRlZENvbnRleHQgPSBpdC0+c2Vjb25kOworICAgICAgICBW
OElzb2xhdGVkQ29udGV4dCogaXNvbGF0ZWRDb250ZXh0ID0gaXQtPnZhbHVlOwogICAgICAgICBp
ZiAoIWlzb2xhdGVkQ29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiB2OENvbnRleHQgPSBpc29sYXRl
ZENvbnRleHQtPmNvbnRleHQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCmluZGV4IGE5YjM5Y2UxMTkzNjUzNTBjYWM4Yzc2
MmU4YmFiMDAzZjU0M2Y5NGQuLjY3NmVkNmQyMDg3NGYzNzliNWNlZWRmZDcyNDI3YWI5YmIzMTNm
ZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2VyaWFsaXplZFNj
cmlwdFZhbHVlLmNwcApAQCAtMTA4LDcgKzEwOCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAg
IHR5cGVuYW1lIEhhbmRsZVRvVDo6aXRlcmF0b3IgcmVzdWx0ID0gbV9tYXAuZmluZCgqaGFuZGxl
KTsKICAgICAgICAgaWYgKHJlc3VsdCAhPSBtX21hcC5lbmQoKSkgewotICAgICAgICAgICAgKnZh
bHVlT3V0ID0gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgICAgICAqdmFsdWVPdXQgPSByZXN1bHQt
PnZhbHVlOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0
dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01N
YXAuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NTWFwLmgKaW5kZXggY2M3NmZm
YTUzMWVhM2EyMDViMGYxMWQ1MTUxYjIwMWUwZTIwNzdjNC4uMzhiNTE0Mjc3NzMxOGE0ZDZmZDcw
OTczZWRlMTkwYmEzNDRiNzkyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhET01NYXAuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTU1hcC5o
CkBAIC0xMTAsNyArMTEwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIHJl
bW92ZUlmUHJlc2VudChLZXlUeXBlKiBrZXksIHY4OjpQZXJzaXN0ZW50PFZhbHVlVHlwZT4gdmFs
dWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIHR5cGVuYW1lIEhhc2hNYXA8S2V5VHlwZSosIFZh
bHVlVHlwZSo+OjppdGVyYXRvciBpdCA9IG1fbWFwLmZpbmQoa2V5KTsKLSAgICAgICAgICAgIGlm
IChpdCA9PSBtX21hcC5lbmQoKSB8fCBpdC0+c2Vjb25kICE9ICp2YWx1ZSkKKyAgICAgICAgICAg
IGlmIChpdCA9PSBtX21hcC5lbmQoKSB8fCBpdC0+dmFsdWUgIT0gKnZhbHVlKQogICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAgbV9tYXAucmVtb3ZlKGl0KTsKQEAg
LTEzMCw3ICsxMzAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICB2aXNpdG9y
LT5zdGFydE1hcCgpOwogICAgICAgICAgICAgdHlwZW5hbWUgSGFzaE1hcDxLZXlUeXBlKiwgVmFs
dWVUeXBlKj46Oml0ZXJhdG9yIGl0ID0gbV9tYXAuYmVnaW4oKTsKICAgICAgICAgICAgIGZvciAo
OyBpdCAhPSBtX21hcC5lbmQoKTsgKytpdCkKLSAgICAgICAgICAgICAgICB2aXNpdG9yLT52aXNp
dERPTVdyYXBwZXIoc3RvcmUsIGl0LT5maXJzdCwgdjg6OlBlcnNpc3RlbnQ8VmFsdWVUeXBlPihp
dC0+c2Vjb25kKSk7CisgICAgICAgICAgICAgICAgdmlzaXRvci0+dmlzaXRET01XcmFwcGVyKHN0
b3JlLCBpdC0+a2V5LCB2ODo6UGVyc2lzdGVudDxWYWx1ZVR5cGU+KGl0LT52YWx1ZSkpOwogICAg
ICAgICAgICAgdmlzaXRvci0+ZW5kTWFwKCk7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xsZXIuY3BwCmluZGV4IDJhODgyZGM3NmU0ZWRlM2Yx
MzI0YzQ5ZjQ2ZmJkOTBkZDM3YjdhODguLmMyYWI3NGQ3MWNiOGQ2Y2ViNjJlOTQ2Njc1MzI2ZmM0
YTM4Mjc4YjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4R0NDb250
cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEdDQ29udHJvbGxl
ci5jcHAKQEAgLTEwMCw5ICsxMDAsOSBAQCBzdGF0aWMgdm9pZCBlbnVtZXJhdGVHbG9iYWxIYW5k
bGVzKCkKIHsKICAgICBHbG9iYWxIYW5kbGVNYXAmIGdsb2JhbEhhbmRsZU1hcCA9IGN1cnJlbnRH
bG9iYWxIYW5kbGVNYXAoKTsKICAgICBmb3IgKEdsb2JhbEhhbmRsZU1hcDo6aXRlcmF0b3IgaXQg
PSBnbG9iYWxIYW5kbGVNYXAuYmVnaW4oKSwgZW5kID0gZ2xvYmFsSGFuZGxlTWFwLmVuZCgpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgR2xvYmFsSGFuZGxlSW5mbyogaW5mbyA9IGl0LT5z
ZWNvbmQ7CisgICAgICAgIEdsb2JhbEhhbmRsZUluZm8qIGluZm8gPSBpdC0+dmFsdWU7CiAgICAg
ICAgIFVOVVNFRF9QQVJBTShpbmZvKTsKLSAgICAgICAgdjg6OlZhbHVlKiBoYW5kbGUgPSBpdC0+
Zmlyc3Q7CisgICAgICAgIHY4OjpWYWx1ZSogaGFuZGxlID0gaXQtPmtleTsKICAgICAgICAgVU5V
U0VEX1BBUkFNKGhhbmRsZSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvVjhQZXJDb250ZXh0RGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9WOFBlckNvbnRleHREYXRhLmNwcAppbmRleCBlNTcwMjliZmQ3MjRiODk2NTU2NjVlZDFi
NjVkZTIxNDU0NjgyMDE0Li42MzVmZjIzNzFmYzk0MTg5ZjAzNGUzM2VmZTcyZTk3NmY5ZmQxYTMy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFBlckNvbnRleHREYXRh
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFBlckNvbnRleHREYXRhLmNw
cApAQCAtNDAsNyArNDAsNyBAQCB2b2lkIFY4UGVyQ29udGV4dERhdGE6OmRpc3Bvc2UoKQogICAg
IHsKICAgICAgICAgV3JhcHBlckJvaWxlcnBsYXRlTWFwOjppdGVyYXRvciBpdCA9IG1fd3JhcHBl
ckJvaWxlcnBsYXRlcy5iZWdpbigpOwogICAgICAgICBmb3IgKDsgaXQgIT0gbV93cmFwcGVyQm9p
bGVycGxhdGVzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgICAgICB2ODo6UGVyc2lzdGVudDx2ODo6
T2JqZWN0PiB3cmFwcGVyID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIHY4OjpQZXJzaXN0ZW50
PHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBpdC0+dmFsdWU7CiAgICAgICAgICAgICB3cmFwcGVyLkRp
c3Bvc2UoKTsKICAgICAgICAgfQogICAgICAgICBtX3dyYXBwZXJCb2lsZXJwbGF0ZXMuY2xlYXIo
KTsKQEAgLTQ5LDcgKzQ5LDcgQEAgdm9pZCBWOFBlckNvbnRleHREYXRhOjpkaXNwb3NlKCkKICAg
ICB7CiAgICAgICAgIENvbnN0cnVjdG9yTWFwOjppdGVyYXRvciBpdCA9IG1fY29uc3RydWN0b3JN
YXAuYmVnaW4oKTsKICAgICAgICAgZm9yICg7IGl0ICE9IG1fY29uc3RydWN0b3JNYXAuZW5kKCk7
ICsraXQpIHsKLSAgICAgICAgICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvbj4gd3JhcHBl
ciA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb24+
IHdyYXBwZXIgPSBpdC0+dmFsdWU7CiAgICAgICAgICAgICB3cmFwcGVyLkRpc3Bvc2UoKTsKICAg
ICAgICAgfQogICAgICAgICBtX2NvbnN0cnVjdG9yTWFwLmNsZWFyKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ucHJ1bnRpbWUuY3BwIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvbnBydW50aW1lLmNwcAppbmRleCA4ZDgwY2Y5MzMxODZlODU0N2MxODUxODNk
N2U3NDg0YmNlMWU4NGEzLi4yYjAzNjdjZDE1ZjJhNGZiMTEzZDRjYzBiZjc2N2VjOGNmMWIwYTVl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ucHJ1bnRpbWUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L25wcnVudGltZS5jcHAKQEAgLTE2NCw3ICsx
NjQsNyBAQCBOUElkZW50aWZpZXIgX05QTl9HZXRTdHJpbmdJZGVudGlmaWVyKGNvbnN0IE5QVVRG
OCogbmFtZSkKICAgICAgICAgU3RyaW5nSWRlbnRpZmllck1hcCogaWRlbnRNYXAgPSBnZXRTdHJp
bmdJZGVudGlmaWVyTWFwKCk7CiAgICAgICAgIFN0cmluZ0lkZW50aWZpZXJNYXA6Oml0ZXJhdG9y
IGl0ZXIgPSBpZGVudE1hcC0+ZmluZChrZXkpOwogICAgICAgICBpZiAoaXRlciAhPSBpZGVudE1h
cC0+ZW5kKCkpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TlBJZGVudGlmaWVyPihp
dGVyLT5zZWNvbmQpOworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PE5QSWRlbnRpZmll
cj4oaXRlci0+dmFsdWUpOwogCiAgICAgICAgIHNpemVfdCBuYW1lTGVuID0ga2V5Lm1fbGVuZ3Ro
OwogCkBAIC0yMTEsNyArMjExLDcgQEAgTlBJZGVudGlmaWVyIF9OUE5fR2V0SW50SWRlbnRpZmll
cihpbnQzMl90IGludElkKQogICAgIEludElkZW50aWZpZXJNYXAqIGlkZW50TWFwID0gZ2V0SW50
SWRlbnRpZmllck1hcCgpOwogICAgIEludElkZW50aWZpZXJNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBp
ZGVudE1hcC0+ZmluZChpbnRJZCk7CiAgICAgaWYgKGl0ZXIgIT0gaWRlbnRNYXAtPmVuZCgpKQot
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TlBJZGVudGlmaWVyPihpdGVyLT5zZWNvbmQpOwor
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TlBJZGVudGlmaWVyPihpdGVyLT52YWx1ZSk7CiAK
ICAgICAvLyBXZSBuZXZlciByZWxlYXNlIGlkZW50aWZpZXJzLCBzbyB0aGlzIGRpY3Rpb25hcnkg
d2lsbCBncm93LgogICAgIFByaXZhdGVJZGVudGlmaWVyKiBpZGVudGlmaWVyID0gcmVpbnRlcnBy
ZXRfY2FzdDxQcml2YXRlSWRlbnRpZmllcio+KG1hbGxvYyhzaXplb2YoUHJpdmF0ZUlkZW50aWZp
ZXIpKSk7CkBAIC0zODgsNyArMzg4LDcgQEAgdm9pZCBfTlBOX1JlZ2lzdGVyT2JqZWN0KE5QT2Jq
ZWN0KiBucE9iamVjdCwgTlBPYmplY3QqIG93bmVyKQogICAgICAgICBOUE9iamVjdE1hcDo6aXRl
cmF0b3Igb3duZXJFbnRyeSA9IGxpdmVPYmplY3RNYXAoKS5maW5kKG93bmVyKTsKICAgICAgICAg
TlBPYmplY3QqIHBhcmVudCA9IDA7CiAgICAgICAgIGlmIChsaXZlT2JqZWN0TWFwKCkuZW5kKCkg
IT0gb3duZXJFbnRyeSkKLSAgICAgICAgICAgIHBhcmVudCA9IG93bmVyRW50cnktPnNlY29uZDsK
KyAgICAgICAgICAgIHBhcmVudCA9IG93bmVyRW50cnktPnZhbHVlOwogCiAgICAgICAgIGlmIChw
YXJlbnQpCiAgICAgICAgICAgICBvd25lciA9IHBhcmVudDsKQEAgLTQwOCw3ICs0MDgsNyBAQCB2
b2lkIF9OUE5fVW5yZWdpc3Rlck9iamVjdChOUE9iamVjdCogbnBPYmplY3QpCiAKICAgICBOUE9i
amVjdCogb3duZXIgPSAwOwogICAgIGlmIChsaXZlT2JqZWN0TWFwKCkuZmluZChucE9iamVjdCkg
IT0gbGl2ZU9iamVjdE1hcCgpLmVuZCgpKQotICAgICAgICBvd25lciA9IGxpdmVPYmplY3RNYXAo
KS5maW5kKG5wT2JqZWN0KS0+c2Vjb25kOworICAgICAgICBvd25lciA9IGxpdmVPYmplY3RNYXAo
KS5maW5kKG5wT2JqZWN0KS0+dmFsdWU7CiAKICAgICBpZiAoIW93bmVyKSB7CiAgICAgICAgIC8v
IFVucmVnaXN0ZXJpbmcgYSBvd25lciBvYmplY3Q7IGFsc28gdW5yZWdpc3RlciBpdCdzIGRlc2Nl
bmRhbnRzLgpAQCAtNDQzLDcgKzQ0Myw3IEBAIHZvaWQgX05QTl9VbnJlZ2lzdGVyT2JqZWN0KE5Q
T2JqZWN0KiBucE9iamVjdCkKICAgICB9IGVsc2UgewogICAgICAgICBOUFJvb3RPYmplY3RNYXA6
Oml0ZXJhdG9yIG93bmVyRW50cnkgPSByb290T2JqZWN0TWFwKCkuZmluZChvd25lcik7CiAgICAg
ICAgIGlmIChvd25lckVudHJ5ICE9IHJvb3RPYmplY3RNYXAoKS5lbmQoKSkgewotICAgICAgICAg
ICAgTlBPYmplY3RTZXQqIGxpc3QgPSBvd25lckVudHJ5LT5zZWNvbmQ7CisgICAgICAgICAgICBO
UE9iamVjdFNldCogbGlzdCA9IG93bmVyRW50cnktPnZhbHVlOwogICAgICAgICAgICAgQVNTRVJU
KGxpc3QtPmZpbmQobnBPYmplY3QpICE9IGxpc3QtPmVuZCgpKTsKICAgICAgICAgICAgIGxpc3Qt
PnJlbW92ZShucE9iamVjdCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JyaWRnZS9JZGVudGlmaWVyUmVwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9JZGVudGlm
aWVyUmVwLmNwcAppbmRleCAyYWNmMTQxNTNkMWRiOWUxMmI3MjU1OGE1Mzg4ZDk4NmZmOGE1ZTg1
Li4xZGY1OGE5ZTQxNTgxYzNiZWMzMTUxZmYyMWJjZWFhMjQ3MmRjMWY1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9icmlkZ2UvSWRlbnRpZmllclJlcC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYnJpZGdlL0lkZW50aWZpZXJSZXAuY3BwCkBAIC02OSwxMyArNjksMTMgQEAgSWRlbnRpZmll
clJlcCogSWRlbnRpZmllclJlcDo6Z2V0KGludCBpbnRJRCkKICAgICAKICAgICBJbnRJZGVudGlm
aWVyTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gaW50SWRlbnRpZmllck1hcCgpLmFkZChpbnRJRCwg
MCk7CiAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIEFTU0VSVCghcmVzdWx0
Lml0ZXJhdG9yLT5zZWNvbmQpOwotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IG5l
dyBJZGVudGlmaWVyUmVwKGludElEKTsKKyAgICAgICAgQVNTRVJUKCFyZXN1bHQuaXRlcmF0b3It
PnZhbHVlKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IG5ldyBJZGVudGlmaWVy
UmVwKGludElEKTsKICAgICAgICAgCi0gICAgICAgIGlkZW50aWZpZXJTZXQoKS5hZGQocmVzdWx0
Lml0ZXJhdG9yLT5zZWNvbmQpOworICAgICAgICBpZGVudGlmaWVyU2V0KCkuYWRkKHJlc3VsdC5p
dGVyYXRvci0+dmFsdWUpOwogICAgIH0KICAgICAKLSAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9y
LT5zZWNvbmQ7CisgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiB9CiAKIHR5cGVk
ZWYgSGFzaE1hcDxSZWZQdHI8U3RyaW5nSW1wbD4sIElkZW50aWZpZXJSZXAqPiBTdHJpbmdJZGVu
dGlmaWVyTWFwOwpAQCAtOTUsMTMgKzk1LDEzIEBAIElkZW50aWZpZXJSZXAqIElkZW50aWZpZXJS
ZXA6OmdldChjb25zdCBjaGFyKiBuYW1lKQogICAgIFVTdHJpbmcgc3RyaW5nID0gc3RyaW5nVG9V
U3RyaW5nKFN0cmluZzo6ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2sobmFtZSwgc3RybGVuKG5h
bWUpKSk7CiAgICAgU3RyaW5nSWRlbnRpZmllck1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IHN0cmlu
Z0lkZW50aWZpZXJNYXAoKS5hZGQoc3RyaW5nLmltcGwoKSwgMCk7CiAgICAgaWYgKHJlc3VsdC5p
c05ld0VudHJ5KSB7Ci0gICAgICAgIEFTU0VSVCghcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOwot
ICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IG5ldyBJZGVudGlmaWVyUmVwKG5hbWUp
OworICAgICAgICBBU1NFUlQoIXJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOworICAgICAgICByZXN1
bHQuaXRlcmF0b3ItPnZhbHVlID0gbmV3IElkZW50aWZpZXJSZXAobmFtZSk7CiAgICAgICAgIAot
ICAgICAgICBpZGVudGlmaWVyU2V0KCkuYWRkKHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKKyAg
ICAgICAgaWRlbnRpZmllclNldCgpLmFkZChyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKICAgICB9
CiAgICAgCi0gICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgIHJldHVybiBy
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogfQogCiBib29sIElkZW50aWZpZXJSZXA6OmlzVmFsaWQo
SWRlbnRpZmllclJlcCogaWRlbnRpZmllcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jy
aWRnZS9OUF9qc29iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvTlBfanNvYmplY3Qu
Y3BwCmluZGV4IDYxZTM2Nzk1NjFhNjNlNGUzY2Y1YmU0ZDA4OTY3MjMxMzdmNjMyYzcuLjYyZWJk
MjM3NmVjOTFlY2RlNjUzOTU4NjI2YTA5YWVmZDM5NzNiZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JyaWRnZS9OUF9qc29iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYnJpZGdl
L05QX2pzb2JqZWN0LmNwcApAQCAtNjUsOCArNjUsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBp
dGVyID0gbV9tYXAuYWRkKHJvb3RPYmplY3QsIEpTVG9OUE9iamVjdE1hcCgpKS5pdGVyYXRvcjsK
ICAgICAgICAgfQogCi0gICAgICAgIEFTU0VSVChpdGVyLT5zZWNvbmQuZmluZChqc09iamVjdCkg
PT0gaXRlci0+c2Vjb25kLmVuZCgpKTsKLSAgICAgICAgaXRlci0+c2Vjb25kLmFkZChqc09iamVj
dCwgbnBPYmplY3QpOworICAgICAgICBBU1NFUlQoaXRlci0+dmFsdWUuZmluZChqc09iamVjdCkg
PT0gaXRlci0+dmFsdWUuZW5kKCkpOworICAgICAgICBpdGVyLT52YWx1ZS5hZGQoanNPYmplY3Qs
IG5wT2JqZWN0KTsKICAgICB9CiAKICAgICB2b2lkIHJlbW92ZShSb290T2JqZWN0KiByb290T2Jq
ZWN0KQpAQCAtODAsOSArODAsOSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBIYXNoTWFwPFJv
b3RPYmplY3QqLCBKU1RvTlBPYmplY3RNYXA+OjppdGVyYXRvciBpdGVyID0gbV9tYXAuZmluZChy
b290T2JqZWN0KTsKICAgICAgICAgQVNTRVJUKGl0ZXIgIT0gbV9tYXAuZW5kKCkpOwotICAgICAg
ICBBU1NFUlQoaXRlci0+c2Vjb25kLmZpbmQoanNPYmplY3QpICE9IGl0ZXItPnNlY29uZC5lbmQo
KSk7CisgICAgICAgIEFTU0VSVChpdGVyLT52YWx1ZS5maW5kKGpzT2JqZWN0KSAhPSBpdGVyLT52
YWx1ZS5lbmQoKSk7CiAKLSAgICAgICAgaXRlci0+c2Vjb25kLnJlbW92ZShqc09iamVjdCk7Cisg
ICAgICAgIGl0ZXItPnZhbHVlLnJlbW92ZShqc09iamVjdCk7CiAgICAgfQogCiBwcml2YXRlOgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YUNsYXNzSlNDLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFDbGFzc0pTQy5jcHAKaW5kZXgg
YWViNDAyMGJkODRhMjM3YjllYzFjMGFiNzZhOWY2ZmZiNmU4Yjk3NS4uYTYwODAxZTU2Mjk0Yzcy
ZjhlMmY3NDY2ZTQ0MmI2MWNkZDg0ZWVmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYnJp
ZGdlL2puaS9qc2MvSmF2YUNsYXNzSlNDLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
am5pL2pzYy9KYXZhQ2xhc3NKU0MuY3BwCkBAIC0xMDcsNyArMTA3LDcgQEAgSmF2YUNsYXNzOjp+
SmF2YUNsYXNzKCkKIAogICAgIE1ldGhvZExpc3RNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1f
bWV0aG9kcy5lbmQoKTsKICAgICBmb3IgKE1ldGhvZExpc3RNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV9tZXRob2RzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBjb25zdCBN
ZXRob2RMaXN0KiBtZXRob2RMaXN0ID0gaXQtPnNlY29uZDsKKyAgICAgICAgY29uc3QgTWV0aG9k
TGlzdCogbWV0aG9kTGlzdCA9IGl0LT52YWx1ZTsKICAgICAgICAgZGVsZXRlQWxsVmFsdWVzKCpt
ZXRob2RMaXN0KTsKICAgICAgICAgZGVsZXRlIG1ldGhvZExpc3Q7CiAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X2luc3RhbmNlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JyaWRnZS9xdC9xdF9pbnN0YW5jZS5jcHAKaW5kZXggYjlhMzRhYzMwYjdmYzNkNzU0MzZj
MWIzODkzMjE2NDAxODI3OGVlNi4uMmViNGExMGY1YmY2YTA3MjlhNzAxYjA1ODc3ZWUwZjRmYWNl
MmNiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X2luc3RhbmNlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfaW5zdGFuY2UuY3BwCkBAIC03OCw4
ICs3OCw4IEBAIHZvaWQgV2Vha01hcDo6c2V0KEpTQ29udGV4dFJlZiBjb250ZXh0LCB2b2lkICpr
ZXksIEpTT2JqZWN0UmVmIG9iamVjdCkKICAgICAgICAgSlNDb250ZXh0R3JvdXBSZWYgZ3JvdXAg
PSBKU0NvbnRleHRHZXRHcm91cChjb250ZXh0KTsKICAgICAgICAgV2Vha01hcFNldDo6QWRkUmVz
dWx0IGVudHJ5ID0gd2Vha01hcHMuYWRkKGdyb3VwLCAwKTsKICAgICAgICAgaWYgKGVudHJ5Lmlz
TmV3RW50cnkpCi0gICAgICAgICAgICBlbnRyeS5pdGVyYXRvci0+c2Vjb25kID0gYWRvcHRSZWYo
bmV3IFdlYWtNYXBJbXBsKGdyb3VwKSk7Ci0gICAgICAgIG1faW1wbCA9IGVudHJ5Lml0ZXJhdG9y
LT5zZWNvbmQ7CisgICAgICAgICAgICBlbnRyeS5pdGVyYXRvci0+dmFsdWUgPSBhZG9wdFJlZihu
ZXcgV2Vha01hcEltcGwoZ3JvdXApKTsKKyAgICAgICAgbV9pbXBsID0gZW50cnkuaXRlcmF0b3It
PnZhbHVlOwogICAgIH0KICAgICBKU1dlYWtPYmplY3RNYXBTZXQobV9pbXBsLT5tX2NvbnRleHQs
IG1faW1wbC0+bV9tYXAsIGtleSwgb2JqZWN0KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JyaWRnZS9ydW50aW1lX3Jvb3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRp
bWVfcm9vdC5jcHAKaW5kZXggOWI2MjI0YThiNTYwZmM1ZTYwZTE1ODllNTc5ZDE0MjU0OTcyOTEz
NC4uNzRkODMxOTIxZjIxOWI4YjczMzM2NzU5MTVlNDFiZGMxN2RkZmRjZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfcm9vdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYnJpZGdlL3J1bnRpbWVfcm9vdC5jcHAKQEAgLTEwNSw3ICsxMDUsNyBAQCB2b2lkIFJvb3RP
YmplY3Q6OmludmFsaWRhdGUoKQogICAgIHsKICAgICAgICAgSGFzaE1hcDxSdW50aW1lT2JqZWN0
KiwgSlNDOjpXZWFrPFJ1bnRpbWVPYmplY3Q+ID46Oml0ZXJhdG9yIGVuZCA9IG1fcnVudGltZU9i
amVjdHMuZW5kKCk7CiAgICAgICAgIGZvciAoSGFzaE1hcDxSdW50aW1lT2JqZWN0KiwgSlNDOjpX
ZWFrPFJ1bnRpbWVPYmplY3Q+ID46Oml0ZXJhdG9yIGl0ID0gbV9ydW50aW1lT2JqZWN0cy5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIFJ1bnRpbWVPYmplY3QqIHJ1bnRp
bWVPYmplY3QgPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgUnVudGltZU9iamVjdCog
cnVudGltZU9iamVjdCA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGlmICghcnVudGlt
ZU9iamVjdCkgLy8gU2tpcCB6b21iaWVzLgogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgcnVudGltZU9iamVjdC0+aW52YWxpZGF0ZSgpOwpAQCAtMTI5LDcgKzEyOSw3IEBA
IHZvaWQgUm9vdE9iamVjdDo6aW52YWxpZGF0ZSgpCiAKICAgICBQcm90ZWN0Q291bnRTZXQ6Oml0
ZXJhdG9yIGVuZCA9IG1fcHJvdGVjdENvdW50U2V0LmVuZCgpOwogICAgIGZvciAoUHJvdGVjdENv
dW50U2V0OjppdGVyYXRvciBpdCA9IG1fcHJvdGVjdENvdW50U2V0LmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkKLSAgICAgICAgSlNDOjpnY1VucHJvdGVjdChpdC0+Zmlyc3QpOworICAgICAgICBK
U0M6OmdjVW5wcm90ZWN0KGl0LT5rZXkpOwogICAgIG1fcHJvdGVjdENvdW50U2V0LmNsZWFyKCk7
CiAKICAgICByb290T2JqZWN0U2V0KCktPnJlbW92ZSh0aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NDYW52YXNWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
Q2FudmFzVmFsdWUuY3BwCmluZGV4IDYzNzc3YmI0ZGRkZGEwOTc2MTZmOGZhMGFiYzFiYTVjNzdm
Yjk0NTUuLmM5MmQxMzM2ZDg2MDYyMDVmYzAzN2QwZmM1OWZkM2EwNzM1NDIxNTUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYW52YXNWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvY3NzL0NTU0NhbnZhc1ZhbHVlLmNwcApAQCAtNTAsMTQgKzUwLDE0IEBAIHZvaWQgQ1NT
Q2FudmFzVmFsdWU6OmNhbnZhc0NoYW5nZWQoSFRNTENhbnZhc0VsZW1lbnQqLCBjb25zdCBGbG9h
dFJlY3QmIGNoYW5nZWRSCiAgICAgSW50UmVjdCBpbWFnZUNoYW5nZVJlY3QgPSBlbmNsb3NpbmdJ
bnRSZWN0KGNoYW5nZWRSZWN0KTsKICAgICBSZW5kZXJPYmplY3RTaXplQ291bnRNYXA6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IGNsaWVudHMoKS5lbmQoKTsKICAgICBmb3IgKFJlbmRlck9iamVjdFNp
emVDb3VudE1hcDo6Y29uc3RfaXRlcmF0b3IgY3VyciA9IGNsaWVudHMoKS5iZWdpbigpOyBjdXJy
ICE9IGVuZDsgKytjdXJyKQotICAgICAgICBjb25zdF9jYXN0PFJlbmRlck9iamVjdCo+KGN1cnIt
PmZpcnN0KS0+aW1hZ2VDaGFuZ2VkKHN0YXRpY19jYXN0PFdyYXBwZWRJbWFnZVB0cj4odGhpcyks
ICZpbWFnZUNoYW5nZVJlY3QpOworICAgICAgICBjb25zdF9jYXN0PFJlbmRlck9iamVjdCo+KGN1
cnItPmtleSktPmltYWdlQ2hhbmdlZChzdGF0aWNfY2FzdDxXcmFwcGVkSW1hZ2VQdHI+KHRoaXMp
LCAmaW1hZ2VDaGFuZ2VSZWN0KTsKIH0KIAogdm9pZCBDU1NDYW52YXNWYWx1ZTo6Y2FudmFzUmVz
aXplZChIVE1MQ2FudmFzRWxlbWVudCopCiB7CiAgICAgUmVuZGVyT2JqZWN0U2l6ZUNvdW50TWFw
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBjbGllbnRzKCkuZW5kKCk7CiAgICAgZm9yIChSZW5kZXJP
YmplY3RTaXplQ291bnRNYXA6OmNvbnN0X2l0ZXJhdG9yIGN1cnIgPSBjbGllbnRzKCkuYmVnaW4o
KTsgY3VyciAhPSBlbmQ7ICsrY3VycikKLSAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJPYmplY3Qq
PihjdXJyLT5maXJzdCktPmltYWdlQ2hhbmdlZChzdGF0aWNfY2FzdDxXcmFwcGVkSW1hZ2VQdHI+
KHRoaXMpKTsKKyAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJPYmplY3QqPihjdXJyLT5rZXkpLT5p
bWFnZUNoYW5nZWQoc3RhdGljX2Nhc3Q8V3JhcHBlZEltYWdlUHRyPih0aGlzKSk7CiB9CiAKIHZv
aWQgQ1NTQ2FudmFzVmFsdWU6OmNhbnZhc0Rlc3Ryb3llZChIVE1MQ2FudmFzRWxlbWVudCogZWxl
bWVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVj
bGFyYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJh
dGlvbi5jcHAKaW5kZXggMDcwOGMyM2JhYjhkNTBhOGJlOTFkYTEzM2Q4NDczMzg4YzgyN2ViOC4u
M2QzZmNlOTg5NTJjODViZWViZjVmNjU0OWYwYmY4MTJlMTI3YTk3NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKQEAgLTEyNzMs
OCArMTI3Myw4IEBAIHN0YXRpYyBQYXNzUmVmUHRyPENTU1ZhbHVlPiBjb3VudGVyVG9DU1NWYWx1
ZShjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIENTU1Byb3BlCiAKICAgICBSZWZQdHI8Q1NTVmFs
dWVMaXN0PiBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOwogICAg
IGZvciAoQ291bnRlckRpcmVjdGl2ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2lu
KCk7IGl0ICE9IG1hcC0+ZW5kKCk7ICsraXQpIHsKLSAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1Zh
bHVlUG9vbCgpLmNyZWF0ZVZhbHVlKGl0LT5maXJzdC5nZXQoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19TVFJJTkcpKTsKLSAgICAgICAgc2hvcnQgbnVtYmVyID0gcHJvcGVydHlJRCA9PSBDU1NQ
cm9wZXJ0eUNvdW50ZXJJbmNyZW1lbnQgPyBpdC0+c2Vjb25kLm1faW5jcmVtZW50VmFsdWUgOiBp
dC0+c2Vjb25kLm1fcmVzZXRWYWx1ZTsKKyAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9v
bCgpLmNyZWF0ZVZhbHVlKGl0LT5rZXkuZ2V0KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RS
SU5HKSk7CisgICAgICAgIHNob3J0IG51bWJlciA9IHByb3BlcnR5SUQgPT0gQ1NTUHJvcGVydHlD
b3VudGVySW5jcmVtZW50ID8gaXQtPnZhbHVlLm1faW5jcmVtZW50VmFsdWUgOiBpdC0+dmFsdWUu
bV9yZXNldFZhbHVlOwogICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRl
VmFsdWUoKGRvdWJsZSludW1iZXIsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7CiAg
ICAgfQogICAgIHJldHVybiBsaXN0LnJlbGVhc2UoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NDcm9zc2ZhZGVWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Jv
c3NmYWRlVmFsdWUuY3BwCmluZGV4IDVlZDdkYTE4ZDNjYjllOWFkODBjMmJlNzgxODI2MmVjMzgy
YjRlMjkuLjgyNzg4M2IxMzU5ZjljNTg0MDZlYjRlOGFlZGFmMjM1NTk0ZjIzYTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDcm9zc2ZhZGVWYWx1ZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0Nyb3NzZmFkZVZhbHVlLmNwcApAQCAtMTc1LDcgKzE3NSw3IEBAIHZv
aWQgQ1NTQ3Jvc3NmYWRlVmFsdWU6OmNyb3NzZmFkZUNoYW5nZWQoY29uc3QgSW50UmVjdCYpCiB7
CiAgICAgUmVuZGVyT2JqZWN0U2l6ZUNvdW50TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBjbGll
bnRzKCkuZW5kKCk7CiAgICAgZm9yIChSZW5kZXJPYmplY3RTaXplQ291bnRNYXA6OmNvbnN0X2l0
ZXJhdG9yIGN1cnIgPSBjbGllbnRzKCkuYmVnaW4oKTsgY3VyciAhPSBlbmQ7ICsrY3Vycikgewot
ICAgICAgICBSZW5kZXJPYmplY3QqIGNsaWVudCA9IGNvbnN0X2Nhc3Q8UmVuZGVyT2JqZWN0Kj4o
Y3Vyci0+Zmlyc3QpOworICAgICAgICBSZW5kZXJPYmplY3QqIGNsaWVudCA9IGNvbnN0X2Nhc3Q8
UmVuZGVyT2JqZWN0Kj4oY3Vyci0+a2V5KTsKICAgICAgICAgY2xpZW50LT5pbWFnZUNoYW5nZWQo
c3RhdGljX2Nhc3Q8V3JhcHBlZEltYWdlUHRyPih0aGlzKSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU291cmNlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5jcHAKaW5kZXggZGQ5MDRkMzdmYjk1NGU0NGRiYTY1
Mzg3NjczNTgzMTE5OGZhZDNkNy4uY2U0NTM2N2FjMzMyMzcyYTBmYjllYzhjNWE1MmZiOWYwODg5
ZWRmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU291cmNlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuY3BwCkBAIC0xMTQs
NyArMTE0LDcgQEAgU2ltcGxlRm9udERhdGEqIENTU0ZvbnRGYWNlU291cmNlOjpnZXRGb250RGF0
YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmkKICAgICB1bnNpZ25lZCBoYXNoS2V5
ID0gKGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpICsgMSkgPDwgNiB8IGZvbnRE
ZXNjcmlwdGlvbi53aWR0aFZhcmlhbnQoKSA8PCA0CiAgICAgICAgICAgICAgICAgICAgICAgIHwg
KGZvbnREZXNjcmlwdGlvbi50ZXh0T3JpZW50YXRpb24oKSA9PSBUZXh0T3JpZW50YXRpb25VcHJp
Z2h0ID8gOCA6IDApIHwgKGZvbnREZXNjcmlwdGlvbi5vcmllbnRhdGlvbigpID09IFZlcnRpY2Fs
ID8gNCA6IDApIHwgKHN5bnRoZXRpY0JvbGQgPyAyIDogMCkgfCAoc3ludGhldGljSXRhbGljID8g
MSA6IDApOwogCi0gICAgU2ltcGxlRm9udERhdGEqJiBjYWNoZWREYXRhID0gbV9mb250RGF0YVRh
YmxlLmFkZChoYXNoS2V5LCAwKS5pdGVyYXRvci0+c2Vjb25kOworICAgIFNpbXBsZUZvbnREYXRh
KiYgY2FjaGVkRGF0YSA9IG1fZm9udERhdGFUYWJsZS5hZGQoaGFzaEtleSwgMCkuaXRlcmF0b3It
PnZhbHVlOwogICAgIGlmIChjYWNoZWREYXRhKQogICAgICAgICByZXR1cm4gY2FjaGVkRGF0YTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmNwcAppbmRleCBjYzVmZmEwNmNkMGU1
MDE0NjRjMDcxMDNhYmZkZGExYWY1YTNlYWNjLi4xNTE3Yjc2Y2FkNWVkYzVlZjBiZmE0NTE5ZTlk
YjlmMWU1MmNjMmY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVj
dG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmNwcApAQCAt
Mjg1LDcgKzI4NSw3IEBAIHZvaWQgQ1NTRm9udFNlbGVjdG9yOjphZGRGb250RmFjZVJ1bGUoY29u
c3QgU3R5bGVSdWxlRm9udEZhY2UqIGZvbnRGYWNlUnVsZSkKICAgICAgICAgaWYgKGZhbWlseU5h
bWUuaXNFbXB0eSgpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgT3duUHRyPFZl
Y3RvcjxSZWZQdHI8Q1NTRm9udEZhY2U+ID4gPiYgZmFtaWx5Rm9udEZhY2VzID0gbV9mb250RmFj
ZXMuYWRkKGZhbWlseU5hbWUsIG51bGxwdHIpLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgIE93
blB0cjxWZWN0b3I8UmVmUHRyPENTU0ZvbnRGYWNlPiA+ID4mIGZhbWlseUZvbnRGYWNlcyA9IG1f
Zm9udEZhY2VzLmFkZChmYW1pbHlOYW1lLCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CiAgICAg
ICAgIGlmICghZmFtaWx5Rm9udEZhY2VzKSB7CiAgICAgICAgICAgICBmYW1pbHlGb250RmFjZXMg
PSBhZG9wdFB0cihuZXcgVmVjdG9yPFJlZlB0cjxDU1NGb250RmFjZT4gPik7CiAKQEAgLTQ4Nywx
MyArNDg3LDEzIEBAIEZvbnREYXRhKiBDU1NGb250U2VsZWN0b3I6OmdldEZvbnREYXRhKGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjCiAgICAgICAgIHJldHVybiBmb250
RGF0YUZvckdlbmVyaWNGYW1pbHkobV9kb2N1bWVudCwgZm9udERlc2NyaXB0aW9uLCBmYW1pbHlO
YW1lKTsKICAgICB9CiAKLSAgICBPd25QdHI8SGFzaE1hcDx1bnNpZ25lZCwgUmVmUHRyPENTU1Nl
Z21lbnRlZEZvbnRGYWNlPiA+ID4mIHNlZ21lbnRlZEZvbnRGYWNlQ2FjaGUgPSBtX2ZvbnRzLmFk
ZChmYW1pbHksIG51bGxwdHIpLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgT3duUHRyPEhhc2hNYXA8
dW5zaWduZWQsIFJlZlB0cjxDU1NTZWdtZW50ZWRGb250RmFjZT4gPiA+JiBzZWdtZW50ZWRGb250
RmFjZUNhY2hlID0gbV9mb250cy5hZGQoZmFtaWx5LCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7
CiAgICAgaWYgKCFzZWdtZW50ZWRGb250RmFjZUNhY2hlKQogICAgICAgICBzZWdtZW50ZWRGb250
RmFjZUNhY2hlID0gYWRvcHRQdHIobmV3IEhhc2hNYXA8dW5zaWduZWQsIFJlZlB0cjxDU1NTZWdt
ZW50ZWRGb250RmFjZT4gPik7CiAKICAgICBGb250VHJhaXRzTWFzayB0cmFpdHNNYXNrID0gZm9u
dERlc2NyaXB0aW9uLnRyYWl0c01hc2soKTsKIAotICAgIFJlZlB0cjxDU1NTZWdtZW50ZWRGb250
RmFjZT4mIGZhY2UgPSBzZWdtZW50ZWRGb250RmFjZUNhY2hlLT5hZGQodHJhaXRzTWFzaywgMCku
aXRlcmF0b3ItPnNlY29uZDsKKyAgICBSZWZQdHI8Q1NTU2VnbWVudGVkRm9udEZhY2U+JiBmYWNl
ID0gc2VnbWVudGVkRm9udEZhY2VDYWNoZS0+YWRkKHRyYWl0c01hc2ssIDApLml0ZXJhdG9yLT52
YWx1ZTsKICAgICBpZiAoIWZhY2UpIHsKICAgICAgICAgZmFjZSA9IENTU1NlZ21lbnRlZEZvbnRG
YWNlOjpjcmVhdGUodGhpcyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJ
bWFnZUdlbmVyYXRvclZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZUdlbmVy
YXRvclZhbHVlLmNwcAppbmRleCA2MzA0MGYzYmU2ZTk4ZGYyYzlkOTUyYzVhZDQ2NDE1NjE5NDU0
NGIxLi5hZDZjYmE5MjJhY2FjYjRhMjFhMTE3NGQ5NThkNTZlZTM0MGJmZmRjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUuY3BwCkBAIC01Nyw3ICs1Nyw3
IEBAIHZvaWQgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6YWRkQ2xpZW50KFJlbmRlck9iamVjdCog
cmVuZGVyZXIsIGNvbnN0IEludFNpemUmIHNpCiAgICAgaWYgKGl0ID09IG1fY2xpZW50cy5lbmQo
KSkKICAgICAgICAgbV9jbGllbnRzLmFkZChyZW5kZXJlciwgU2l6ZUFuZENvdW50KHNpemUsIDEp
KTsKICAgICBlbHNlIHsKLSAgICAgICAgU2l6ZUFuZENvdW50JiBzaXplQ291bnQgPSBpdC0+c2Vj
b25kOworICAgICAgICBTaXplQW5kQ291bnQmIHNpemVDb3VudCA9IGl0LT52YWx1ZTsKICAgICAg
ICAgKytzaXplQ291bnQuY291bnQ7CiAgICAgfQogfQpAQCAtNjksNyArNjksNyBAQCB2b2lkIENT
U0ltYWdlR2VuZXJhdG9yVmFsdWU6OnJlbW92ZUNsaWVudChSZW5kZXJPYmplY3QqIHJlbmRlcmVy
KQogICAgIEFTU0VSVChpdCAhPSBtX2NsaWVudHMuZW5kKCkpOwogCiAgICAgSW50U2l6ZSByZW1v
dmVkSW1hZ2VTaXplOwotICAgIFNpemVBbmRDb3VudCYgc2l6ZUNvdW50ID0gaXQtPnNlY29uZDsK
KyAgICBTaXplQW5kQ291bnQmIHNpemVDb3VudCA9IGl0LT52YWx1ZTsKICAgICBJbnRTaXplIHNp
emUgPSBzaXplQ291bnQuc2l6ZTsKICAgICBpZiAoIXNpemUuaXNFbXB0eSgpKSB7CiAgICAgICAg
IG1fc2l6ZXMucmVtb3ZlKHNpemUpOwpAQCAtODcsNyArODcsNyBAQCBJbWFnZSogQ1NTSW1hZ2VH
ZW5lcmF0b3JWYWx1ZTo6Z2V0SW1hZ2UoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgSW50
U2l6ZSYgcwogewogICAgIFJlbmRlck9iamVjdFNpemVDb3VudE1hcDo6aXRlcmF0b3IgaXQgPSBt
X2NsaWVudHMuZmluZChyZW5kZXJlcik7CiAgICAgaWYgKGl0ICE9IG1fY2xpZW50cy5lbmQoKSkg
ewotICAgICAgICBTaXplQW5kQ291bnQmIHNpemVDb3VudCA9IGl0LT5zZWNvbmQ7CisgICAgICAg
IFNpemVBbmRDb3VudCYgc2l6ZUNvdW50ID0gaXQtPnZhbHVlOwogICAgICAgICBJbnRTaXplIG9s
ZFNpemUgPSBzaXplQ291bnQuc2l6ZTsKICAgICAgICAgaWYgKG9sZFNpemUgIT0gc2l6ZSkgewog
ICAgICAgICAgICAgUmVmUHRyPENTU0ltYWdlR2VuZXJhdG9yVmFsdWU+IHByb3RlY3QodGhpcyk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmNwcAppbmRleCA5ODM0
MjU0NjkyNGY4NjQyYmVmNzAyMGJiMGViYzg2NDQxNzI1Y2JiLi4xYjc1MzRjMTNmOWJjMzljZDBi
MTEyNGIwYzY3NmZmODM0ZWU1YmI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
U2VnbWVudGVkRm9udEZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWdtZW50
ZWRGb250RmFjZS5jcHAKQEAgLTEwNiw3ICsxMDYsNyBAQCBGb250RGF0YSogQ1NTU2VnbWVudGVk
Rm9udEZhY2U6OmdldEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0
aQogICAgIEZvbnRUcmFpdHNNYXNrIGRlc2lyZWRUcmFpdHNNYXNrID0gZm9udERlc2NyaXB0aW9u
LnRyYWl0c01hc2soKTsKICAgICB1bnNpZ25lZCBoYXNoS2V5ID0gKChmb250RGVzY3JpcHRpb24u
Y29tcHV0ZWRQaXhlbFNpemUoKSArIDEpIDw8IChGb250VHJhaXRzTWFza1dpZHRoICsgMSkpIHwg
KChmb250RGVzY3JpcHRpb24ub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCA/IDEgOiAwKSA8PCBG
b250VHJhaXRzTWFza1dpZHRoKSB8IGRlc2lyZWRUcmFpdHNNYXNrOwogCi0gICAgU2VnbWVudGVk
Rm9udERhdGEqJiBmb250RGF0YSA9IG1fZm9udERhdGFUYWJsZS5hZGQoaGFzaEtleSwgMCkuaXRl
cmF0b3ItPnNlY29uZDsKKyAgICBTZWdtZW50ZWRGb250RGF0YSomIGZvbnREYXRhID0gbV9mb250
RGF0YVRhYmxlLmFkZChoYXNoS2V5LCAwKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKGZvbnRE
YXRhKQogICAgICAgICByZXR1cm4gZm9udERhdGE7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NTZWxlY3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VsZWN0b3Iu
Y3BwCmluZGV4IGVhYmVlNDkzYTQxYWI3ZTQ0MjdjZjI4ZmQ3MDM0ODFiMGFkMDg3OWEuLjhkZGE1
OGQ1N2FhNzU0N2IyMjVmMDU1MGFkZjcwMTI4N2UxMmNhMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Nl
bGVjdG9yLmNwcApAQCAtMzc2LDcgKzM3Niw3IEBAIENTU1NlbGVjdG9yOjpQc2V1ZG9UeXBlIENT
U1NlbGVjdG9yOjpwYXJzZVBzZXVkb1R5cGUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKQogICAg
ICAgICByZXR1cm4gUHNldWRvVW5rbm93bjsKICAgICBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwq
LCBDU1NTZWxlY3Rvcjo6UHNldWRvVHlwZT4qIG5hbWVUb1BzZXVkb1R5cGUgPSBuYW1lVG9Qc2V1
ZG9UeXBlTWFwKCk7CiAgICAgSGFzaE1hcDxBdG9taWNTdHJpbmdJbXBsKiwgQ1NTU2VsZWN0b3I6
OlBzZXVkb1R5cGU+OjppdGVyYXRvciBzbG90ID0gbmFtZVRvUHNldWRvVHlwZS0+ZmluZChuYW1l
LmltcGwoKSk7Ci0gICAgcmV0dXJuIHNsb3QgPT0gbmFtZVRvUHNldWRvVHlwZS0+ZW5kKCkgPyBQ
c2V1ZG9Vbmtub3duIDogc2xvdC0+c2Vjb25kOworICAgIHJldHVybiBzbG90ID09IG5hbWVUb1Bz
ZXVkb1R5cGUtPmVuZCgpID8gUHNldWRvVW5rbm93biA6IHNsb3QtPnZhbHVlOwogfQogCiBib29s
IENTU1NlbGVjdG9yOjppc1Vua25vd25Qc2V1ZG9UeXBlKGNvbnN0IEF0b21pY1N0cmluZyYgbmFt
ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZVBvb2wuY3BwIGIvU291
cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlUG9vbC5jcHAKaW5kZXggY2U3NTdiOTMzYjNmNGEzMDJl
ODcxNjU2OGQwM2UwM2RiZjFiMDc2Yy4uYzE2ODk5MTlkMTZlZTE2ZjBlZTA3MzE5MTk5NmU5N2M1
YzhmYzkwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlUG9vbC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlUG9vbC5jcHAKQEAgLTc4LDggKzc4LDgg
QEAgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NTVmFsdWVQb29sOjpjcmVhdGVDb2xv
clZhbHVlKHVuc2lnbmVkIHJnYlZhbHVlKQogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
ZHVtbXlWYWx1ZTsKICAgICBDb2xvclZhbHVlQ2FjaGU6OkFkZFJlc3VsdCBlbnRyeSA9IG1fY29s
b3JWYWx1ZUNhY2hlLmFkZChyZ2JWYWx1ZSwgZHVtbXlWYWx1ZSk7CiAgICAgaWYgKGVudHJ5Lmlz
TmV3RW50cnkpCi0gICAgICAgIGVudHJ5Lml0ZXJhdG9yLT5zZWNvbmQgPSBDU1NQcmltaXRpdmVW
YWx1ZTo6Y3JlYXRlQ29sb3IocmdiVmFsdWUpOwotICAgIHJldHVybiBlbnRyeS5pdGVyYXRvci0+
c2Vjb25kOworICAgICAgICBlbnRyeS5pdGVyYXRvci0+dmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1
ZTo6Y3JlYXRlQ29sb3IocmdiVmFsdWUpOworICAgIHJldHVybiBlbnRyeS5pdGVyYXRvci0+dmFs
dWU7CiB9CiAKIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IENTU1ZhbHVlUG9vbDo6Y3Jl
YXRlVmFsdWUoZG91YmxlIHZhbHVlLCBDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzIHR5cGUp
CkBAIC0xMTMsNyArMTEzLDcgQEAgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NTVmFs
dWVQb29sOjpjcmVhdGVWYWx1ZShkb3VibGUgdmFsdWUsIENTU1ByaW1pdGkKIAogUGFzc1JlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NTVmFsdWVQb29sOjpjcmVhdGVGb250RmFtaWx5VmFsdWUo
Y29uc3QgU3RyaW5nJiBmYW1pbHlOYW1lKQogewotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4mIHZhbHVlID0gbV9mb250RmFtaWx5VmFsdWVDYWNoZS5hZGQoZmFtaWx5TmFtZSwgMCkuaXRl
cmF0b3ItPnNlY29uZDsKKyAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiB2YWx1ZSA9IG1f
Zm9udEZhbWlseVZhbHVlQ2FjaGUuYWRkKGZhbWlseU5hbWUsIDApLml0ZXJhdG9yLT52YWx1ZTsK
ICAgICBpZiAoIXZhbHVlKQogICAgICAgICB2YWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVh
dGUoZmFtaWx5TmFtZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpOwogICAgIHJldHVy
biB2YWx1ZTsKQEAgLTEyNiw3ICsxMjYsNyBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4gQ1NT
VmFsdWVQb29sOjpjcmVhdGVGb250RmFjZVZhbHVlKGNvbnN0IEF0b21pY1N0cmluZyYgcwogICAg
IGlmIChtX2ZvbnRGYWNlVmFsdWVDYWNoZS5zaXplKCkgPiBtYXhpbXVtRm9udEZhY2VDYWNoZVNp
emUpCiAgICAgICAgIG1fZm9udEZhY2VWYWx1ZUNhY2hlLmNsZWFyKCk7CiAKLSAgICBSZWZQdHI8
Q1NTVmFsdWVMaXN0PiYgdmFsdWUgPSBtX2ZvbnRGYWNlVmFsdWVDYWNoZS5hZGQoc3RyaW5nLCAw
KS5pdGVyYXRvci0+c2Vjb25kOworICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+JiB2YWx1ZSA9IG1f
Zm9udEZhY2VWYWx1ZUNhY2hlLmFkZChzdHJpbmcsIDApLml0ZXJhdG9yLT52YWx1ZTsKICAgICBp
ZiAoIXZhbHVlKQogICAgICAgICB2YWx1ZSA9IENTU1BhcnNlcjo6cGFyc2VGb250RmFjZVZhbHVl
KHN0cmluZyk7CiAgICAgcmV0dXJuIHZhbHVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3NzL1Byb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uLmNwcAppbmRleCA1ZmMyZDM4MDM1NWE5
MzhlYTBlZWQ3ZDNlNDQwMTg2ZTRiOTE3Yjc4Li44MTAxZjI4OTcwN2Q4N2I0MDUxZTg3NWM4YjQ5
MzRiOGVlNDA1YzRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvUHJvcGVydHlTZXRD
U1NTdHlsZURlY2xhcmF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvUHJvcGVydHlT
ZXRDU1NTdHlsZURlY2xhcmF0aW9uLmNwcApAQCAtMzQ2LDcgKzM0Niw3IEBAIENTU1ZhbHVlKiBQ
cm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OmNsb25lQW5kQ2FjaGVGb3JDU1NPTShDU1NW
YWx1ZSogaW50ZXJuCiAgICAgaWYgKCFtX2Nzc29tQ1NTVmFsdWVDbG9uZXMpCiAgICAgICAgIG1f
Y3Nzb21DU1NWYWx1ZUNsb25lcyA9IGFkb3B0UHRyKG5ldyBIYXNoTWFwPENTU1ZhbHVlKiwgUmVm
UHRyPENTU1ZhbHVlPiA+KTsKICAgICAKLSAgICBSZWZQdHI8Q1NTVmFsdWU+JiBjbG9uZWRWYWx1
ZSA9IG1fY3Nzb21DU1NWYWx1ZUNsb25lcy0+YWRkKGludGVybmFsVmFsdWUsIFJlZlB0cjxDU1NW
YWx1ZT4oKSkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBSZWZQdHI8Q1NTVmFsdWU+JiBjbG9uZWRW
YWx1ZSA9IG1fY3Nzb21DU1NWYWx1ZUNsb25lcy0+YWRkKGludGVybmFsVmFsdWUsIFJlZlB0cjxD
U1NWYWx1ZT4oKSkuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghY2xvbmVkVmFsdWUpCiAgICAg
ICAgIGNsb25lZFZhbHVlID0gaW50ZXJuYWxWYWx1ZS0+Y2xvbmVGb3JDU1NPTSgpOwogICAgIHJl
dHVybiBjbG9uZWRWYWx1ZS5nZXQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZUJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlci5jcHAKaW5k
ZXggNDg2YTRkYmI4MWMxYzVkY2Y5OWEzZGFiMGQ2OTJjNDA4NjAxY2NjMS4uZmUxZGJmNGJhZmQ1
NTYyMDUzZDRiM2E4ODMxOThjMWQ1MmE1MTc2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL1N0eWxlQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRl
ci5jcHAKQEAgLTEwMTQsMjEgKzEwMTQsMjEgQEAgcHVibGljOgogICAgICAgICB0eXBlZGVmIENv
dW50ZXJEaXJlY3RpdmVNYXA6Oml0ZXJhdG9yIEl0ZXJhdG9yOwogICAgICAgICBJdGVyYXRvciBl
bmQgPSBwYXJlbnRNYXAuZW5kKCk7CiAgICAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSBwYXJlbnRN
YXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBDb3VudGVyRGlyZWN0
aXZlcyYgZGlyZWN0aXZlcyA9IG1hcC5hZGQoaXQtPmZpcnN0LCBDb3VudGVyRGlyZWN0aXZlcygp
KS5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICAgICAgQ291bnRlckRpcmVjdGl2ZXMmIGRpcmVj
dGl2ZXMgPSBtYXAuYWRkKGl0LT5rZXksIENvdW50ZXJEaXJlY3RpdmVzKCkpLml0ZXJhdG9yLT52
YWx1ZTsKICAgICAgICAgICAgIGlmIChjb3VudGVyQmVoYXZpb3IgPT0gUmVzZXQpIHsKLSAgICAg
ICAgICAgICAgICBkaXJlY3RpdmVzLm1fcmVzZXQgPSBpdC0+c2Vjb25kLm1fcmVzZXQ7Ci0gICAg
ICAgICAgICAgICAgZGlyZWN0aXZlcy5tX3Jlc2V0VmFsdWUgPSBpdC0+c2Vjb25kLm1fcmVzZXRW
YWx1ZTsKKyAgICAgICAgICAgICAgICBkaXJlY3RpdmVzLm1fcmVzZXQgPSBpdC0+dmFsdWUubV9y
ZXNldDsKKyAgICAgICAgICAgICAgICBkaXJlY3RpdmVzLm1fcmVzZXRWYWx1ZSA9IGl0LT52YWx1
ZS5tX3Jlc2V0VmFsdWU7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8v
IEluaGVyaXRpbmcgYSBjb3VudGVyLWluY3JlbWVudCBtZWFucyB0YWtpbmcgdGhlIHBhcmVudCdz
IGN1cnJlbnQgdmFsdWUgZm9yIHRoZSBjb3VudGVyCiAgICAgICAgICAgICAgICAgLy8gYW5kIGFk
ZGluZyBpdCB0byBpdHNlbGYuCi0gICAgICAgICAgICAgICAgZGlyZWN0aXZlcy5tX2luY3JlbWVu
dCA9IGl0LT5zZWNvbmQubV9pbmNyZW1lbnQ7CisgICAgICAgICAgICAgICAgZGlyZWN0aXZlcy5t
X2luY3JlbWVudCA9IGl0LT52YWx1ZS5tX2luY3JlbWVudDsKICAgICAgICAgICAgICAgICBkaXJl
Y3RpdmVzLm1faW5jcmVtZW50VmFsdWUgPSAwOwogICAgICAgICAgICAgICAgIGlmIChkaXJlY3Rp
dmVzLm1faW5jcmVtZW50KSB7CiAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGluY3JlbWVudFZh
bHVlID0gZGlyZWN0aXZlcy5tX2luY3JlbWVudFZhbHVlOwotICAgICAgICAgICAgICAgICAgICBk
aXJlY3RpdmVzLm1faW5jcmVtZW50VmFsdWUgPSBjbGFtcFRvSW50ZWdlcihpbmNyZW1lbnRWYWx1
ZSArIGl0LT5zZWNvbmQubV9pbmNyZW1lbnRWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIGRp
cmVjdGl2ZXMubV9pbmNyZW1lbnRWYWx1ZSA9IGNsYW1wVG9JbnRlZ2VyKGluY3JlbWVudFZhbHVl
ICsgaXQtPnZhbHVlLm1faW5jcmVtZW50VmFsdWUpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXMubV9pbmNyZW1lbnQgPSB0cnVlOwotICAg
ICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzLm1faW5jcmVtZW50VmFsdWUgPSBpdC0+c2Vjb25k
Lm1faW5jcmVtZW50VmFsdWU7CisgICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXMubV9pbmNy
ZW1lbnRWYWx1ZSA9IGl0LT52YWx1ZS5tX2luY3JlbWVudFZhbHVlOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTA0Niw5ICsxMDQ2LDkgQEAgcHVibGlj
OgogICAgICAgICBJdGVyYXRvciBlbmQgPSBtYXAuZW5kKCk7CiAgICAgICAgIGZvciAoSXRlcmF0
b3IgaXQgPSBtYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQogICAgICAgICAgICAgaWYgKGNv
dW50ZXJCZWhhdmlvciA9PSBSZXNldCkKLSAgICAgICAgICAgICAgICBpdC0+c2Vjb25kLm1fcmVz
ZXQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBpdC0+dmFsdWUubV9yZXNldCA9IGZhbHNlOwog
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGl0LT5zZWNvbmQubV9pbmNyZW1lbnQg
PSBmYWxzZTsKKyAgICAgICAgICAgICAgICBpdC0+dmFsdWUubV9pbmNyZW1lbnQgPSBmYWxzZTsK
IAogICAgICAgICBpbnQgbGVuZ3RoID0gbGlzdCA/IGxpc3QtPmxlbmd0aCgpIDogMDsKICAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewpAQCAtMTA2Miw3ICsxMDYyLDcg
QEAgcHVibGljOgogCiAgICAgICAgICAgICBBdG9taWNTdHJpbmcgaWRlbnRpZmllciA9IHN0YXRp
Y19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4ocGFpci0+Zmlyc3QoKSktPmdldFN0cmluZ1ZhbHVl
KCk7CiAgICAgICAgICAgICBpbnQgdmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZSo+KHBhaXItPnNlY29uZCgpKS0+Z2V0SW50VmFsdWUoKTsKLSAgICAgICAgICAgIENvdW50ZXJE
aXJlY3RpdmVzJiBkaXJlY3RpdmVzID0gbWFwLmFkZChpZGVudGlmaWVyLmltcGwoKSwgQ291bnRl
ckRpcmVjdGl2ZXMoKSkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgICAgIENvdW50ZXJEaXJl
Y3RpdmVzJiBkaXJlY3RpdmVzID0gbWFwLmFkZChpZGVudGlmaWVyLmltcGwoKSwgQ291bnRlckRp
cmVjdGl2ZXMoKSkuaXRlcmF0b3ItPnZhbHVlOwogICAgICAgICAgICAgaWYgKGNvdW50ZXJCZWhh
dmlvciA9PSBSZXNldCkgewogICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXMubV9yZXNldCA9IHRy
dWU7CiAgICAgICAgICAgICAgICAgZGlyZWN0aXZlcy5tX3Jlc2V0VmFsdWUgPSB2YWx1ZTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAppbmRleCAxNWRlM2E3OThjMDUxNDU2NjQ5NTY4
NjM0NTIyY2UyYjE3ZTA0Yzg3Li45NjUxMjc5YWVmMzBmZWU0ZTMxZTllMTAxZDgxZTQ0MDE2OTcy
MjVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCkBAIC00OTgsNyArNDk4LDcg
QEAgdm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0RmVhdHVyZXMoKQogICAgIG1fZmVhdHVyZXMu
YWRkKG1fYXV0aG9yU3R5bGUtPmZlYXR1cmVzKCkpOwogI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQp
CiAgICAgZm9yIChTY29wZWRSdWxlU2V0TWFwOjppdGVyYXRvciBpdCA9IG1fc2NvcGVkQXV0aG9y
U3R5bGVzLmJlZ2luKCk7IGl0ICE9IG1fc2NvcGVkQXV0aG9yU3R5bGVzLmVuZCgpOyArK2l0KQot
ICAgICAgICBtX2ZlYXR1cmVzLmFkZChpdC0+c2Vjb25kLT5mZWF0dXJlcygpKTsKKyAgICAgICAg
bV9mZWF0dXJlcy5hZGQoaXQtPnZhbHVlLT5mZWF0dXJlcygpKTsKICNlbmRpZgogICAgIGlmICht
X3VzZXJTdHlsZSkKICAgICAgICAgbV9mZWF0dXJlcy5hZGQobV91c2VyU3R5bGUtPmZlYXR1cmVz
KCkpOwpAQCAtNTM1LDcgKzUzNSw3IEBAIGlubGluZSBSdWxlU2V0KiBTdHlsZVJlc29sdmVyOjpy
dWxlU2V0Rm9yU2NvcGUoY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpIGNvbnN0CiAgICAgaWYg
KCFzY29wZS0+aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSkKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgU2NvcGVkUnVsZVNldE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Njb3BlZEF1dGhvclN0
eWxlcy5maW5kKHNjb3BlKTsKLSAgICByZXR1cm4gaXQgIT0gbV9zY29wZWRBdXRob3JTdHlsZXMu
ZW5kKCkgPyBpdC0+c2Vjb25kLmdldCgpIDogMDsgCisgICAgcmV0dXJuIGl0ICE9IG1fc2NvcGVk
QXV0aG9yU3R5bGVzLmVuZCgpID8gaXQtPnZhbHVlLmdldCgpIDogMDsgCiB9CiAjZW5kaWYKIApA
QCAtNTU4LDggKzU1OCw4IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwZW5kQXV0aG9yU3R5bGVz
aGVldHModW5zaWduZWQgZmlyc3ROZXcsIGNvbnN0IFZlY3RvcjxSZWZQCiAgICAgICAgIGlmIChz
Y29wZSkgewogICAgICAgICAgICAgU2NvcGVkUnVsZVNldE1hcDo6QWRkUmVzdWx0IGFkZFJlc3Vs
dCA9IG1fc2NvcGVkQXV0aG9yU3R5bGVzLmFkZChzY29wZSwgbnVsbHB0cik7CiAgICAgICAgICAg
ICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgICAgICAgICAgYWRkUmVzdWx0Lml0
ZXJhdG9yLT5zZWNvbmQgPSBSdWxlU2V0OjpjcmVhdGUoKTsKLSAgICAgICAgICAgIGFkZFJlc3Vs
dC5pdGVyYXRvci0+c2Vjb25kLT5hZGRSdWxlc0Zyb21TaGVldChzaGVldCwgKm1fbWVkaXVtLCB0
aGlzLCBzY29wZSk7CisgICAgICAgICAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9
IFJ1bGVTZXQ6OmNyZWF0ZSgpOworICAgICAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZS0+YWRkUnVsZXNGcm9tU2hlZXQoc2hlZXQsICptX21lZGl1bSwgdGhpcywgc2NvcGUpOwogICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICNlbmRpZgpAQCAtNjg5LDEwICs2ODksMTAg
QEAgdm9pZCBTdHlsZVJlc29sdmVyOjpzd2VlcE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUoKQogICAg
IE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGU6Oml0ZXJhdG9yIGl0ID0gbV9tYXRjaGVkUHJvcGVydGll
c0NhY2hlLmJlZ2luKCk7CiAgICAgTWF0Y2hlZFByb3BlcnRpZXNDYWNoZTo6aXRlcmF0b3IgZW5k
ID0gbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlLmVuZCgpOwogICAgIGZvciAoOyBpdCAhPSBlbmQ7
ICsraXQpIHsKLSAgICAgICAgVmVjdG9yPE1hdGNoZWRQcm9wZXJ0aWVzPiYgbWF0Y2hlZFByb3Bl
cnRpZXMgPSBpdC0+c2Vjb25kLm1hdGNoZWRQcm9wZXJ0aWVzOworICAgICAgICBWZWN0b3I8TWF0
Y2hlZFByb3BlcnRpZXM+JiBtYXRjaGVkUHJvcGVydGllcyA9IGl0LT52YWx1ZS5tYXRjaGVkUHJv
cGVydGllczsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXRjaGVkUHJvcGVydGll
cy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgaWYgKG1hdGNoZWRQcm9wZXJ0aWVzW2ldLnBy
b3BlcnRpZXMtPmhhc09uZVJlZigpKSB7Ci0gICAgICAgICAgICAgICAgdG9SZW1vdmUuYXBwZW5k
KGl0LT5maXJzdCk7CisgICAgICAgICAgICAgICAgdG9SZW1vdmUuYXBwZW5kKGl0LT5rZXkpOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xODcx
LDcgKzE4NzEsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmtleWZyYW1lU3R5bGVzRm9yQW5pbWF0
aW9uKEVsZW1lbnQqIGUsIGNvbnN0IFJlbmRlclN0eWxlKiBlbAogICAgIGlmIChpdCA9PSBtX2tl
eWZyYW1lc1J1bGVNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNvbnN0IFN0eWxl
UnVsZUtleWZyYW1lcyoga2V5ZnJhbWVzUnVsZSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgY29u
c3QgU3R5bGVSdWxlS2V5ZnJhbWVzKiBrZXlmcmFtZXNSdWxlID0gaXQtPnZhbHVlLmdldCgpOwog
CiAgICAgLy8gQ29uc3RydWN0IGFuZCBwb3B1bGF0ZSB0aGUgc3R5bGUgZm9yIGVhY2gga2V5ZnJh
bWUKICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlS2V5ZnJhbWU+ID4mIGtleWZyYW1lcyA9
IGtleWZyYW1lc1J1bGUtPmtleWZyYW1lcygpOwpAQCAtMjU2Niw3ICsyNTY2LDcgQEAgc3RhdGlj
IHZvaWQgcmVwb3J0QXRvbVJ1bGVNYXAoTWVtb3J5Q2xhc3NJbmZvKiBpbmZvLCBjb25zdCBSdWxl
U2V0OjpBdG9tUnVsZU1hcCYKIHsKICAgICBpbmZvLT5hZGRIYXNoTWFwKGF0b21pY1J1bGVNYXAp
OwogICAgIGZvciAoUnVsZVNldDo6QXRvbVJ1bGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYXRv
bWljUnVsZU1hcC5iZWdpbigpOyBpdCAhPSBhdG9taWNSdWxlTWFwLmVuZCgpOyArK2l0KQotICAg
ICAgICBpbmZvLT5hZGRJbnN0cnVtZW50ZWRWZWN0b3IoKml0LT5zZWNvbmQpOworICAgICAgICBp
bmZvLT5hZGRJbnN0cnVtZW50ZWRWZWN0b3IoKml0LT52YWx1ZSk7CiB9CiAKIHZvaWQgUnVsZVNl
dDo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykg
Y29uc3QKQEAgLTI2MzcsNyArMjYzNyw3IEBAIHZvaWQgUnVsZVNldDo6YWRkVG9SdWxlU2V0KEF0
b21pY1N0cmluZ0ltcGwqIGtleSwgQXRvbVJ1bGVNYXAmIG1hcCwgY29uc3QgUnVsZURhCiB7CiAg
ICAgaWYgKCFrZXkpCiAgICAgICAgIHJldHVybjsKLSAgICBPd25QdHI8VmVjdG9yPFJ1bGVEYXRh
PiA+JiBydWxlcyA9IG1hcC5hZGQoa2V5LCBudWxscHRyKS5pdGVyYXRvci0+c2Vjb25kOworICAg
IE93blB0cjxWZWN0b3I8UnVsZURhdGE+ID4mIHJ1bGVzID0gbWFwLmFkZChrZXksIG51bGxwdHIp
Lml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoIXJ1bGVzKQogICAgICAgICBydWxlcyA9IGFkb3B0
UHRyKG5ldyBWZWN0b3I8UnVsZURhdGE+KTsKICAgICBydWxlcy0+YXBwZW5kKHJ1bGVEYXRhKTsK
QEAgLTI3OTgsNyArMjc5OCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzaHJpbmtNYXBWZWN0b3Jz
VG9GaXQoUnVsZVNldDo6QXRvbVJ1bGVNYXAmIG1hcCkKIHsKICAgICBSdWxlU2V0OjpBdG9tUnVs
ZU1hcDo6aXRlcmF0b3IgZW5kID0gbWFwLmVuZCgpOwogICAgIGZvciAoUnVsZVNldDo6QXRvbVJ1
bGVNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAg
ICAgaXQtPnNlY29uZC0+c2hyaW5rVG9GaXQoKTsKKyAgICAgICAgaXQtPnZhbHVlLT5zaHJpbmtU
b0ZpdCgpOwogfQogCiB2b2lkIFJ1bGVTZXQ6OnNocmlua1RvRml0KCkKQEAgLTI5NDQsNyArMjk0
NCw3IEBAIGNvbnN0IFN0eWxlUmVzb2x2ZXI6Ok1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVJdGVtKiBT
dHlsZVJlc29sdmVyOjpmaW5kRnJvbU1hdGNoZWRQCiAgICAgTWF0Y2hlZFByb3BlcnRpZXNDYWNo
ZTo6aXRlcmF0b3IgaXQgPSBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUuZmluZChoYXNoKTsKICAg
ICBpZiAoaXQgPT0gbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlLmVuZCgpKQogICAgICAgICByZXR1
cm4gMDsKLSAgICBNYXRjaGVkUHJvcGVydGllc0NhY2hlSXRlbSYgY2FjaGVJdGVtID0gaXQtPnNl
Y29uZDsKKyAgICBNYXRjaGVkUHJvcGVydGllc0NhY2hlSXRlbSYgY2FjaGVJdGVtID0gaXQtPnZh
bHVlOwogCiAgICAgc2l6ZV90IHNpemUgPSBtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5z
aXplKCk7CiAgICAgaWYgKHNpemUgIT0gY2FjaGVJdGVtLm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUo
KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0Q29udGVudHMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHAKaW5kZXggM2VhYTBk
YTM2OTEyMGNmZjEwYmI5Y2JjZTUzYjVhNzRjYWQyYWZhZi4uODIyODgyMzQwYTkyZTRkMTgzODcz
NmE3ZmRlNjk4MTE5YTAzMTY3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
U2hlZXRDb250ZW50cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRDb250
ZW50cy5jcHAKQEAgLTIzNSw3ICsyMzUsNyBAQCB2b2lkIFN0eWxlU2hlZXRDb250ZW50czo6cGFy
c2VyQWRkTmFtZXNwYWNlKGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4LCBjb25zdCBBdAogICAg
IFByZWZpeE5hbWVzcGFjZVVSSU1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fbmFtZXNwYWNlcy5h
ZGQocHJlZml4LCB1cmkpOwogICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKICAgICAgICAgcmV0
dXJuOwotICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gdXJpOworICAgIHJlc3VsdC5pdGVy
YXRvci0+dmFsdWUgPSB1cmk7CiB9CiAKIGNvbnN0IEF0b21pY1N0cmluZyYgU3R5bGVTaGVldENv
bnRlbnRzOjpkZXRlcm1pbmVOYW1lc3BhY2UoY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgpCkBA
IC0yNDcsNyArMjQ3LDcgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBTdHlsZVNoZWV0Q29udGVudHM6
OmRldGVybWluZU5hbWVzcGFjZShjb25zdCBBdG9taWNTdHJpbmcmIHAKICAgICBQcmVmaXhOYW1l
c3BhY2VVUklNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9uYW1lc3BhY2VzLmZpbmQocHJlZml4
KTsKICAgICBpZiAoaXQgPT0gbV9uYW1lc3BhY2VzLmVuZCgpKQogICAgICAgICByZXR1cm4gbnVs
bEF0b207Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgcmV0dXJuIGl0LT52YWx1ZTsKIH0K
IAogdm9pZCBTdHlsZVNoZWV0Q29udGVudHM6OnJlcXVlc3RJbXBvcnRlZFN0eWxlU2hlZXRzKENT
U1N0eWxlU2hlZXQqIHJvb3RTaGVldCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9D
aGVja2VkUmFkaW9CdXR0b25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGVja2VkUmFkaW9C
dXR0b25zLmNwcAppbmRleCBlNjcyMzI5YWY4ZGUzNzhiZWZkZmMxNGY4YWNiZDBmMmVjMGM3NDA1
Li45ZmE1MDliYjk1MWQzODA5MTQwMDAwMTFlZTVjZTY1MTRhOThkNDZiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vQ2hlY2tlZFJhZGlvQnV0dG9ucy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL0NoZWNrZWRSYWRpb0J1dHRvbnMuY3BwCkBAIC0xODUsNyArMTg1LDcgQEAgdm9p
ZCBDaGVja2VkUmFkaW9CdXR0b25zOjphZGRCdXR0b24oSFRNTElucHV0RWxlbWVudCogZWxlbWVu
dCkKICAgICBpZiAoIW1fbmFtZVRvR3JvdXBNYXApCiAgICAgICAgIG1fbmFtZVRvR3JvdXBNYXAg
PSBhZG9wdFB0cihuZXcgTmFtZVRvR3JvdXBNYXApOwogCi0gICAgT3duUHRyPFJhZGlvQnV0dG9u
R3JvdXA+JiBncm91cCA9IG1fbmFtZVRvR3JvdXBNYXAtPmFkZChlbGVtZW50LT5uYW1lKCkuaW1w
bCgpLCBQYXNzT3duUHRyPFJhZGlvQnV0dG9uR3JvdXA+KCkpLml0ZXJhdG9yLT5zZWNvbmQ7Cisg
ICAgT3duUHRyPFJhZGlvQnV0dG9uR3JvdXA+JiBncm91cCA9IG1fbmFtZVRvR3JvdXBNYXAtPmFk
ZChlbGVtZW50LT5uYW1lKCkuaW1wbCgpLCBQYXNzT3duUHRyPFJhZGlvQnV0dG9uR3JvdXA+KCkp
Lml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoIWdyb3VwKQogICAgICAgICBncm91cCA9IFJhZGlv
QnV0dG9uR3JvdXA6OmNyZWF0ZSgpOwogICAgIGdyb3VwLT5hZGQoZWxlbWVudCk7CkBAIC0yNDYs
OCArMjQ2LDggQEAgdm9pZCBDaGVja2VkUmFkaW9CdXR0b25zOjpyZW1vdmVCdXR0b24oSFRNTElu
cHV0RWxlbWVudCogZWxlbWVudCkKICAgICBOYW1lVG9Hcm91cE1hcDo6aXRlcmF0b3IgaXQgPSBt
X25hbWVUb0dyb3VwTWFwLT5maW5kKGVsZW1lbnQtPm5hbWUoKS5pbXBsKCkpOwogICAgIGlmIChp
dCA9PSBtX25hbWVUb0dyb3VwTWFwLT5lbmQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGl0LT5z
ZWNvbmQtPnJlbW92ZShlbGVtZW50KTsKLSAgICBpZiAoaXQtPnNlY29uZC0+aXNFbXB0eSgpKSB7
CisgICAgaXQtPnZhbHVlLT5yZW1vdmUoZWxlbWVudCk7CisgICAgaWYgKGl0LT52YWx1ZS0+aXNF
bXB0eSgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBXZSBtYXkgc2tpcCBkZWFsbG9jYXRpbmcgdGhl
IGVtcHR5IFJhZGlvQnV0dG9uR3JvdXAgZm9yCiAgICAgICAgIC8vIHBlcmZvcm1hbmNlIGltcHJv
dmVtZW50LiBJZiB3ZSBkbyBzbywgd2UgbmVlZCB0byBjaGFuZ2UgdGhlIGtleSB0eXBlCiAgICAg
ICAgIC8vIG9mIG1fbmFtZVRvR3JvdXBNYXAgZnJvbSBBdG9taWNTdHJpbmdJbXBsKiB0byBSZWZQ
dHI8QXRvbWljU3RyaW5nSW1wbD4uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hp
bGRMaXN0TXV0YXRpb25TY29wZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGRMaXN0TXV0
YXRpb25TY29wZS5jcHAKaW5kZXggZjRhMmRhMDRhYjYxNTgxM2Y4NjRhZTEzNTZmNGVhYTRkYjBi
ZmU0OS4uYWZkOGRkOWYxYjAwOTg1YzdhMjdiYmJiZGEzZWJmODA3NzZkNGM3YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL0NoaWxkTGlzdE11dGF0aW9uU2NvcGUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9DaGlsZExpc3RNdXRhdGlvblNjb3BlLmNwcApAQCAtMTkyLDI3ICsx
OTIsMjcgQEAgdm9pZCBDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdGlv
blJvdXRlcjo6Y2hpbGRBZGRlZChOb2RlKiB0YXJnZXQKIHsKICAgICBIYXNoTWFwPE5vZGUqLCBP
d25QdHI8Q2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRvcj4gPjo6aXRl
cmF0b3IgaXRlciA9IG1fYWNjdW11bGF0aW9ucy5maW5kKHRhcmdldCk7CiAgICAgQVNTRVJUKGl0
ZXIgIT0gbV9hY2N1bXVsYXRpb25zLmVuZCgpKTsKLSAgICBpZiAoaXRlciA9PSBtX2FjY3VtdWxh
dGlvbnMuZW5kKCkgfHwgIWl0ZXItPnNlY29uZCkKKyAgICBpZiAoaXRlciA9PSBtX2FjY3VtdWxh
dGlvbnMuZW5kKCkgfHwgIWl0ZXItPnZhbHVlKQogICAgICAgICByZXR1cm47CiAKLSAgICBpdGVy
LT5zZWNvbmQtPmNoaWxkQWRkZWQoY2hpbGQpOworICAgIGl0ZXItPnZhbHVlLT5jaGlsZEFkZGVk
KGNoaWxkKTsKIH0KIAogdm9pZCBDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3Vt
dWxhdGlvblJvdXRlcjo6d2lsbFJlbW92ZUNoaWxkKE5vZGUqIHRhcmdldCwgTm9kZSogY2hpbGQp
CiB7CiAgICAgSGFzaE1hcDxOb2RlKiwgT3duUHRyPENoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11
dGF0aW9uQWNjdW11bGF0b3I+ID46Oml0ZXJhdG9yIGl0ZXIgPSBtX2FjY3VtdWxhdGlvbnMuZmlu
ZCh0YXJnZXQpOwogICAgIEFTU0VSVChpdGVyICE9IG1fYWNjdW11bGF0aW9ucy5lbmQoKSk7Ci0g
ICAgaWYgKGl0ZXIgPT0gbV9hY2N1bXVsYXRpb25zLmVuZCgpIHx8ICFpdGVyLT5zZWNvbmQpCisg
ICAgaWYgKGl0ZXIgPT0gbV9hY2N1bXVsYXRpb25zLmVuZCgpIHx8ICFpdGVyLT52YWx1ZSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgaXRlci0+c2Vjb25kLT53aWxsUmVtb3ZlQ2hpbGQoY2hpbGQp
OworICAgIGl0ZXItPnZhbHVlLT53aWxsUmVtb3ZlQ2hpbGQoY2hpbGQpOwogfQogCiB2b2lkIENo
aWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVyOjppbmNyZW1l
bnRTY29waW5nTGV2ZWwoTm9kZSogdGFyZ2V0KQogewogICAgIFNjb3BpbmdMZXZlbE1hcDo6QWRk
UmVzdWx0IHJlc3VsdCA9IG1fc2NvcGluZ0xldmVscy5hZGQodGFyZ2V0LCAxKTsKICAgICBpZiAo
IXJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgICsrKHJlc3VsdC5pdGVyYXRvci0+c2Vjb25k
KTsKKyAgICAgICAgKysocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKQEAgLTIyOSw4ICsyMjksOCBAQCB2b2lkIENoaWxkTGlzdE11dGF0aW9uU2NvcGU6
Ok11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVyOjpkZWNyZW1lbnRTY29waW5nTGV2ZWwoTgogICAg
IFNjb3BpbmdMZXZlbE1hcDo6aXRlcmF0b3IgaXRlciA9IG1fc2NvcGluZ0xldmVscy5maW5kKHRh
cmdldCk7CiAgICAgQVNTRVJUKGl0ZXIgIT0gbV9zY29waW5nTGV2ZWxzLmVuZCgpKTsKIAotICAg
IC0tKGl0ZXItPnNlY29uZCk7Ci0gICAgaWYgKGl0ZXItPnNlY29uZCA+IDApCisgICAgLS0oaXRl
ci0+dmFsdWUpOworICAgIGlmIChpdGVyLT52YWx1ZSA+IDApCiAgICAgICAgIHJldHVybjsKIAog
ICAgIG1fc2NvcGluZ0xldmVscy5yZW1vdmUoaXRlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApp
bmRleCA5MWZhMmU4M2NkYzQwNWU5ZGU0YjhiNDgxYjFiOTVkYzQyMTk2NzBmLi5mZDI5MTNjM2E2
YjE3NWM2NjU1NzdmZjk1YTQ1ZGQ1MzRlNjRiYzE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAK
QEAgLTI5NDcsNyArMjk0Nyw3IEBAIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4g
PiogRG9jdW1lbnQ6OnBhZ2VHcm91cFVzZXJTaGVldHMoKSBjb25zdAogCiAgICAgVXNlclN0eWxl
U2hlZXRNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHNoZWV0c01hcC0+ZW5kKCk7CiAgICAgZm9y
IChVc2VyU3R5bGVTaGVldE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBzaGVldHNNYXAtPmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBjb25zdCBVc2VyU3R5bGVTaGVldFZlY3Rv
ciogc2hlZXRzID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgY29uc3QgVXNlclN0eWxlU2hl
ZXRWZWN0b3IqIHNoZWV0cyA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHNoZWV0cy0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIGNvbnN0IFVz
ZXJTdHlsZVNoZWV0KiBzaGVldCA9IHNoZWV0cy0+YXQoaSkuZ2V0KCk7CiAgICAgICAgICAgICBp
ZiAoc2hlZXQtPmluamVjdGVkRnJhbWVzKCkgPT0gSW5qZWN0SW5Ub3BGcmFtZU9ubHkgJiYgb3du
ZXJFbGVtZW50KCkpCkBAIC00ODMwLDEwICs0ODMwLDEwIEBAIFBhc3NSZWZQdHI8SFRNTENvbGxl
Y3Rpb24+IERvY3VtZW50Ojp3aW5kb3dOYW1lZEl0ZW1zKGNvbnN0IEF0b21pY1N0cmluZyYgbmFt
ZSkKIHsKICAgICBOYW1lZENvbGxlY3Rpb25NYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX3dpbmRv
d05hbWVkSXRlbUNvbGxlY3Rpb25zLmFkZChuYW1lLCAwKTsKICAgICBpZiAoIXJlc3VsdC5pc05l
d0VudHJ5KQotICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAg
IHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogCiAgICAgUmVmUHRyPEhUTUxOYW1lQ29s
bGVjdGlvbj4gY29sbGVjdGlvbiA9IEhUTUxOYW1lQ29sbGVjdGlvbjo6Y3JlYXRlKHRoaXMsIFdp
bmRvd05hbWVkSXRlbXMsIG5hbWUpOwotICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gY29s
bGVjdGlvbi5nZXQoKTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gY29sbGVjdGlvbi5n
ZXQoKTsKICAgICByZXR1cm4gY29sbGVjdGlvbi5yZWxlYXNlKCk7CiB9CiAKQEAgLTQ4NDEsMTAg
KzQ4NDEsMTAgQEAgUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gRG9jdW1lbnQ6OmRvY3VtZW50
TmFtZWRJdGVtcyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUKIHsKICAgICBOYW1lZENvbGxlY3Rp
b25NYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX2RvY3VtZW50TmFtZWRJdGVtQ29sbGVjdGlvbnMu
YWRkKG5hbWUsIDApOwogICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJldHVy
biByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRv
ci0+dmFsdWU7CiAKICAgICBSZWZQdHI8SFRNTE5hbWVDb2xsZWN0aW9uPiBjb2xsZWN0aW9uID0g
SFRNTE5hbWVDb2xsZWN0aW9uOjpjcmVhdGUodGhpcywgRG9jdW1lbnROYW1lZEl0ZW1zLCBuYW1l
KTsKLSAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IGNvbGxlY3Rpb24uZ2V0KCk7CisgICAg
cmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGNvbGxlY3Rpb24uZ2V0KCk7CiAgICAgcmV0dXJuIGNv
bGxlY3Rpb24ucmVsZWFzZSgpOwogfQogCkBAIC01MTc5LDcgKzUxNzksNyBAQCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0KiBEb2N1bWVudDo6Z2V0Q1NTQ2FudmFzQ29udGV4dChjb25zdCBTdHJpbmcm
IHR5cGUsIGNvbnN0CiAKIEhUTUxDYW52YXNFbGVtZW50KiBEb2N1bWVudDo6Z2V0Q1NTQ2FudmFz
RWxlbWVudChjb25zdCBTdHJpbmcmIG5hbWUpCiB7Ci0gICAgUmVmUHRyPEhUTUxDYW52YXNFbGVt
ZW50PiYgZWxlbWVudCA9IG1fY3NzQ2FudmFzRWxlbWVudHMuYWRkKG5hbWUsIDApLml0ZXJhdG9y
LT5zZWNvbmQ7CisgICAgUmVmUHRyPEhUTUxDYW52YXNFbGVtZW50PiYgZWxlbWVudCA9IG1fY3Nz
Q2FudmFzRWxlbWVudHMuYWRkKG5hbWUsIDApLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoIWVs
ZW1lbnQpCiAgICAgICAgIGVsZW1lbnQgPSBIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlKHRoaXMp
OwogICAgIHJldHVybiBlbGVtZW50LmdldCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcAppbmRleCBhM2ViYzkzNjkzMjVhNDdiMmU2MjkyODY5
NjBiNGQ2ZmViYzJmMGFlLi5iMmYwMDg5NTRmZTdlYTBlNjcwZGI3MTViNjM1M2QyNTNiYTI5NWEz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNw
cApAQCAtMzExLDcgKzMxMSw3IEBAIERvY3VtZW50TWFya2VyKiBEb2N1bWVudE1hcmtlckNvbnRy
b2xsZXI6Om1hcmtlckNvbnRhaW5pbmdQb2ludChjb25zdCBMYXlvdXRQb2luCiAgICAgTWFya2Vy
TWFwOjppdGVyYXRvciBlbmQgPSBtX21hcmtlcnMuZW5kKCk7CiAgICAgZm9yIChNYXJrZXJNYXA6
Oml0ZXJhdG9yIG5vZGVJdGVyYXRvciA9IG1fbWFya2Vycy5iZWdpbigpOyBub2RlSXRlcmF0b3Ig
IT0gZW5kOyArK25vZGVJdGVyYXRvcikgewogICAgICAgICAvLyBpbm5lciBsb29wOyBwcm9jZXNz
IGVhY2ggbWFya2VyIGluIHRoaXMgbm9kZQotICAgICAgICBNYXJrZXJMaXN0KiBsaXN0ID0gbm9k
ZUl0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgIE1hcmtlckxpc3QqIGxpc3QgPSBub2RlSXRlcmF0
b3ItPnZhbHVlOwogICAgICAgICB1bnNpZ25lZCBtYXJrZXJDb3VudCA9IGxpc3QtPnNpemUoKTsK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBtYXJrZXJJbmRleCA9IDA7IG1hcmtlckluZGV4IDwgbWFy
a2VyQ291bnQ7ICsrbWFya2VySW5kZXgpIHsKICAgICAgICAgICAgIFJlbmRlcmVkRG9jdW1lbnRN
YXJrZXImIG1hcmtlciA9IGxpc3QtPmF0KG1hcmtlckluZGV4KTsKQEAgLTM5OSw3ICszOTksNyBA
QCBWZWN0b3I8SW50UmVjdD4gRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW5kZXJlZFJlY3Rz
Rm9yTWFya2VycyhEb2N1bWVudE1hcmtlcgogICAgIE1hcmtlck1hcDo6aXRlcmF0b3IgZW5kID0g
bV9tYXJrZXJzLmVuZCgpOwogICAgIGZvciAoTWFya2VyTWFwOjppdGVyYXRvciBub2RlSXRlcmF0
b3IgPSBtX21hcmtlcnMuYmVnaW4oKTsgbm9kZUl0ZXJhdG9yICE9IGVuZDsgKytub2RlSXRlcmF0
b3IpIHsKICAgICAgICAgLy8gaW5uZXIgbG9vcDsgcHJvY2VzcyBlYWNoIG1hcmtlciBpbiB0aGlz
IG5vZGUKLSAgICAgICAgTWFya2VyTGlzdCogbGlzdCA9IG5vZGVJdGVyYXRvci0+c2Vjb25kOwor
ICAgICAgICBNYXJrZXJMaXN0KiBsaXN0ID0gbm9kZUl0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAg
dW5zaWduZWQgbWFya2VyQ291bnQgPSBsaXN0LT5zaXplKCk7CiAgICAgICAgIGZvciAodW5zaWdu
ZWQgbWFya2VySW5kZXggPSAwOyBtYXJrZXJJbmRleCA8IG1hcmtlckNvdW50OyArK21hcmtlcklu
ZGV4KSB7CiAgICAgICAgICAgICBjb25zdCBSZW5kZXJlZERvY3VtZW50TWFya2VyJiBtYXJrZXIg
PSBsaXN0LT5hdChtYXJrZXJJbmRleCk7CkBAIC00MjYsNyArNDI2LDcgQEAgdm9pZCBEb2N1bWVu
dE1hcmtlckNvbnRyb2xsZXI6OnJlbW92ZU1hcmtlcnMoTm9kZSogbm9kZSwgRG9jdW1lbnRNYXJr
ZXI6Ok1hcmtlclQKICAgICAKICAgICBNYXJrZXJNYXA6Oml0ZXJhdG9yIGl0ZXJhdG9yID0gbV9t
YXJrZXJzLmZpbmQobm9kZSk7CiAgICAgaWYgKGl0ZXJhdG9yICE9IG1fbWFya2Vycy5lbmQoKSkK
LSAgICAgICAgcmVtb3ZlTWFya2Vyc0Zyb21MaXN0KG5vZGUsIGl0ZXJhdG9yLT5zZWNvbmQsIG1h
cmtlclR5cGVzKTsKKyAgICAgICAgcmVtb3ZlTWFya2Vyc0Zyb21MaXN0KG5vZGUsIGl0ZXJhdG9y
LT52YWx1ZSwgbWFya2VyVHlwZXMpOwogfQogCiB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxl
cjo6cmVtb3ZlTWFya2VycyhEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZXMgbWFya2VyVHlwZXMp
CkBAIC00MzksNyArNDM5LDcgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbW92
ZU1hcmtlcnMoRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGVzIG1hcmtlclQKICAgICBNYXJrZXJN
YXAgbWFya2VyTWFwQ29weSA9IG1fbWFya2VyczsKICAgICBNYXJrZXJNYXA6Oml0ZXJhdG9yIGVu
ZCA9IG1hcmtlck1hcENvcHkuZW5kKCk7CiAgICAgZm9yIChNYXJrZXJNYXA6Oml0ZXJhdG9yIGkg
PSBtYXJrZXJNYXBDb3B5LmJlZ2luKCk7IGkgIT0gZW5kOyArK2kpCi0gICAgICAgIHJlbW92ZU1h
cmtlcnNGcm9tTGlzdChpLT5maXJzdC5nZXQoKSwgaS0+c2Vjb25kLCBtYXJrZXJUeXBlcyk7Cisg
ICAgICAgIHJlbW92ZU1hcmtlcnNGcm9tTGlzdChpLT5rZXkuZ2V0KCksIGktPnZhbHVlLCBtYXJr
ZXJUeXBlcyk7CiAgICAgbV9wb3NzaWJseUV4aXN0aW5nTWFya2VyVHlwZXMucmVtb3ZlKG1hcmtl
clR5cGVzKTsKIH0KIApAQCAtNDk1LDEwICs0OTUsMTAgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNv
bnRyb2xsZXI6OnJlcGFpbnRNYXJrZXJzKERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlcyBtYXJr
ZXIKICAgICAvLyBvdXRlciBsb29wOiBwcm9jZXNzIGVhY2ggbWFya2VyZWQgbm9kZSBpbiB0aGUg
ZG9jdW1lbnQKICAgICBNYXJrZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fbWFya2Vycy5lbmQoKTsK
ICAgICBmb3IgKE1hcmtlck1hcDo6aXRlcmF0b3IgaSA9IG1fbWFya2Vycy5iZWdpbigpOyBpICE9
IGVuZDsgKytpKSB7Ci0gICAgICAgIE5vZGUqIG5vZGUgPSBpLT5maXJzdC5nZXQoKTsKKyAgICAg
ICAgTm9kZSogbm9kZSA9IGktPmtleS5nZXQoKTsKIAogICAgICAgICAvLyBpbm5lciBsb29wOiBw
cm9jZXNzIGVhY2ggbWFya2VyIGluIHRoZSBjdXJyZW50IG5vZGUKLSAgICAgICAgTWFya2VyTGlz
dCogbGlzdCA9IGktPnNlY29uZDsKKyAgICAgICAgTWFya2VyTGlzdCogbGlzdCA9IGktPnZhbHVl
OwogICAgICAgICBib29sIG5vZGVOZWVkc1JlcGFpbnQgPSBmYWxzZTsKICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgIT0gbGlzdC0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIERvY3Vt
ZW50TWFya2VyIG1hcmtlciA9IGxpc3QtPmF0KGkpOwpAQCAtNTI2LDcgKzUyNiw3IEBAIHZvaWQg
RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjppbnZhbGlkYXRlUmVuZGVyZWRSZWN0c0Zvck1hcmtl
cnNJblJlY3QoY29uc3QgTGF5CiAgICAgZm9yIChNYXJrZXJNYXA6Oml0ZXJhdG9yIGkgPSBtX21h
cmtlcnMuYmVnaW4oKTsgaSAhPSBlbmQ7ICsraSkgewogCiAgICAgICAgIC8vIGlubmVyIGxvb3A6
IHByb2Nlc3MgZWFjaCByZWN0IGluIHRoZSBjdXJyZW50IG5vZGUKLSAgICAgICAgTWFya2VyTGlz
dCogbGlzdCA9IGktPnNlY29uZDsKKyAgICAgICAgTWFya2VyTGlzdCogbGlzdCA9IGktPnZhbHVl
OwogICAgICAgICBmb3IgKHNpemVfdCBsaXN0SW5kZXggPSAwOyBsaXN0SW5kZXggPCBsaXN0LT5z
aXplKCk7ICsrbGlzdEluZGV4KQogICAgICAgICAgICAgbGlzdC0+YXQobGlzdEluZGV4KS5pbnZh
bGlkYXRlKHIpOwogICAgIH0KQEAgLTY3NSw5ICs2NzUsOSBAQCB2b2lkIERvY3VtZW50TWFya2Vy
Q29udHJvbGxlcjo6c2hvd01hcmtlcnMoKSBjb25zdAogICAgIGZwcmludGYoc3RkZXJyLCAiJWQg
bm9kZXMgaGF2ZSBtYXJrZXJzOlxuIiwgbV9tYXJrZXJzLnNpemUoKSk7CiAgICAgTWFya2VyTWFw
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX21hcmtlcnMuZW5kKCk7CiAgICAgZm9yIChNYXJrZXJN
YXA6OmNvbnN0X2l0ZXJhdG9yIG5vZGVJdGVyYXRvciA9IG1fbWFya2Vycy5iZWdpbigpOyBub2Rl
SXRlcmF0b3IgIT0gZW5kOyArK25vZGVJdGVyYXRvcikgewotICAgICAgICBOb2RlKiBub2RlID0g
bm9kZUl0ZXJhdG9yLT5maXJzdC5nZXQoKTsKKyAgICAgICAgTm9kZSogbm9kZSA9IG5vZGVJdGVy
YXRvci0+a2V5LmdldCgpOwogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVwIiwgbm9kZSk7Ci0g
ICAgICAgIE1hcmtlckxpc3QqIGxpc3QgPSBub2RlSXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAg
TWFya2VyTGlzdCogbGlzdCA9IG5vZGVJdGVyYXRvci0+dmFsdWU7CiAgICAgICAgIGZvciAodW5z
aWduZWQgbWFya2VySW5kZXggPSAwOyBtYXJrZXJJbmRleCA8IGxpc3QtPnNpemUoKTsgKyttYXJr
ZXJJbmRleCkgewogICAgICAgICAgICAgY29uc3QgRG9jdW1lbnRNYXJrZXImIG1hcmtlciA9IGxp
c3QtPmF0KG1hcmtlckluZGV4KTsKICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiICVkOlsl
ZDolZF0oJWQpIiwgbWFya2VyLnR5cGUoKSwgbWFya2VyLnN0YXJ0T2Zmc2V0KCksIG1hcmtlci5l
bmRPZmZzZXQoKSwgbWFya2VyLmFjdGl2ZU1hdGNoKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL0RvY3VtZW50T3JkZXJlZE1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnRPcmRlcmVkTWFwLmNwcAppbmRleCAwODJhYTA3NDBhNzFjY2RmNTBlMWQ0MmQyM2QzMTdl
NjNhZjJmNGRhLi4xMjk3ZTUxMDJmYjRlNzljZTNkYjExMjM1NzAyMWUzZGQwNTU0YTUxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRPcmRlcmVkTWFwLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRPcmRlcmVkTWFwLmNwcApAQCAtOTgsNyArOTgsNyBA
QCB2b2lkIERvY3VtZW50T3JkZXJlZE1hcDo6cmVtb3ZlKEF0b21pY1N0cmluZ0ltcGwqIGtleSwg
RWxlbWVudCogZWxlbWVudCkKIAogICAgIG1fbWFwLmNoZWNrQ29uc2lzdGVuY3koKTsKICAgICBN
YXA6Oml0ZXJhdG9yIGNhY2hlZEl0ZW0gPSBtX21hcC5maW5kKGtleSk7Ci0gICAgaWYgKGNhY2hl
ZEl0ZW0gIT0gbV9tYXAuZW5kKCkgJiYgY2FjaGVkSXRlbS0+c2Vjb25kID09IGVsZW1lbnQpCisg
ICAgaWYgKGNhY2hlZEl0ZW0gIT0gbV9tYXAuZW5kKCkgJiYgY2FjaGVkSXRlbS0+dmFsdWUgPT0g
ZWxlbWVudCkKICAgICAgICAgbV9tYXAucmVtb3ZlKGNhY2hlZEl0ZW0pOwogICAgIGVsc2UKICAg
ICAgICAgbV9kdXBsaWNhdGVDb3VudHMucmVtb3ZlKGtleSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudEF0dHJpYnV0ZURhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9t
L0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmNwcAppbmRleCA0NzFlNTE5ZTBmYmNiODZkNGVkMjU4NmVh
YzlhZmY0NDI1YzQ1NzMxLi4wZWFmYmM0ZTUzNzZjYTk3MjJjMmVlZjljMDZhMzc2ODg5M2EwYWE3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0dHJpYnV0ZURhdGEuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50QXR0cmlidXRlRGF0YS5jcHAKQEAgLTEx
OCw3ICsxMTgsNyBAQCBzdGF0aWMgQXR0ckxpc3QqIGVuc3VyZUF0dHJMaXN0Rm9yRWxlbWVudChF
bGVtZW50KiBlbGVtZW50KQogICAgIEFTU0VSVCghYXR0ckxpc3RNYXAoKS5jb250YWlucyhlbGVt
ZW50KSk7CiAgICAgZWxlbWVudC0+c2V0SGFzQXR0ckxpc3QoKTsKICAgICBBdHRyTGlzdE1hcDo6
QWRkUmVzdWx0IHJlc3VsdCA9IGF0dHJMaXN0TWFwKCkuYWRkKGVsZW1lbnQsIGFkb3B0UHRyKG5l
dyBBdHRyTGlzdCkpOwotICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnNlY29uZC5nZXQoKTsK
KyAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKIH0KIAogc3RhdGljIHZv
aWQgcmVtb3ZlQXR0ckxpc3RGb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FdmVudERpc3BhdGNoZXIuY3BwCmluZGV4IGU1ODM5MGM1ZTRhZDlkODgwZWNlZmRkNTFk
OGYwZGQ4MDg3NjExOWUuLjg5YjljYzcwYjc4MGM4YzgwYmI3NDRkMWQ4YzFlZmYxNzU4MGM1MTcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwCkBAIC0xMTEsNyArMTExLDcg
QEAgRXZlbnRUYXJnZXQqIEV2ZW50UmVsYXRlZFRhcmdldEFkanVzdGVyOjpmaW5kUmVsYXRlZFRh
cmdldChUcmVlU2NvcGUqIHNjb3BlKQogICAgICAgICBwYXJlbnRUcmVlU2NvcGVzLmFwcGVuZChz
Y29wZSk7CiAgICAgICAgIFJlbGF0ZWRUYXJnZXRNYXA6OmNvbnN0X2l0ZXJhdG9yIGZvdW5kID0g
bV9yZWxhdGVkVGFyZ2V0TWFwLmZpbmQoc2NvcGUpOwogICAgICAgICBpZiAoZm91bmQgIT0gbV9y
ZWxhdGVkVGFyZ2V0TWFwLmVuZCgpKSB7Ci0gICAgICAgICAgICByZWxhdGVkVGFyZ2V0ID0gZm91
bmQtPnNlY29uZDsKKyAgICAgICAgICAgIHJlbGF0ZWRUYXJnZXQgPSBmb3VuZC0+dmFsdWU7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBzY29wZSA9IHNjb3BlLT5wYXJl
bnRUcmVlU2NvcGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudExpc3Rl
bmVyTWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudExpc3RlbmVyTWFwLmNwcAppbmRl
eCBjMWZkNGQ3Yzk1N2E2NGJmZjc4OGY5MDFlNjFkZTAxY2EwOTIyNzdlLi5hZjhjNDhhZWRlNTUx
MzZmNzRmZTE4NDc4MWQwNTI4YjQxZDdjY2FjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vRXZlbnRMaXN0ZW5lck1hcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TGlz
dGVuZXJNYXAuY3BwCkBAIC0xMDIsNyArMTAyLDcgQEAgVmVjdG9yPEF0b21pY1N0cmluZz4gRXZl
bnRMaXN0ZW5lck1hcDo6ZXZlbnRUeXBlcygpIGNvbnN0CiAgICAgICAgIEV2ZW50TGlzdGVuZXJI
YXNoTWFwOjppdGVyYXRvciBpdCA9IG1faGFzaE1hcC0+YmVnaW4oKTsKICAgICAgICAgRXZlbnRM
aXN0ZW5lckhhc2hNYXA6Oml0ZXJhdG9yIGVuZCA9IG1faGFzaE1hcC0+ZW5kKCk7CiAgICAgICAg
IGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICB0eXBlcy5hcHBlbmQoaXQtPmZp
cnN0KTsKKyAgICAgICAgICAgIHR5cGVzLmFwcGVuZChpdC0+a2V5KTsKICAgICB9IGVsc2UgaWYg
KG1fc2luZ2xlRXZlbnRMaXN0ZW5lclZlY3RvcikKICAgICAgICAgdHlwZXMuYXBwZW5kKG1fc2lu
Z2xlRXZlbnRMaXN0ZW5lclR5cGUpOwogCkBAIC0xMzYsOSArMTM2LDkgQEAgYm9vbCBFdmVudExp
c3RlbmVyTWFwOjphZGQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8
RXZlbnRMaXN0ZW4KICAgICBpZiAobV9oYXNoTWFwKSB7CiAgICAgICAgIEV2ZW50TGlzdGVuZXJI
YXNoTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9oYXNoTWFwLT5hZGQoZXZlbnRUeXBlLCBudWxs
cHRyKTsKICAgICAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICAgICAgcmVzdWx0
Lml0ZXJhdG9yLT5zZWNvbmQgPSBhZG9wdFB0cihuZXcgRXZlbnRMaXN0ZW5lclZlY3Rvcik7Cisg
ICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gYWRvcHRQdHIobmV3IEV2ZW50TGlz
dGVuZXJWZWN0b3IpOwogCi0gICAgICAgIHJldHVybiBhZGRMaXN0ZW5lclRvVmVjdG9yKHJlc3Vs
dC5pdGVyYXRvci0+c2Vjb25kLmdldCgpLCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSk7CisgICAgICAg
IHJldHVybiBhZGRMaXN0ZW5lclRvVmVjdG9yKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0KCks
IGxpc3RlbmVyLCB1c2VDYXB0dXJlKTsKICAgICB9CiAKICAgICBpZiAoIW1fc2luZ2xlRXZlbnRM
aXN0ZW5lclZlY3RvcikgewpAQCAtMTc5LDggKzE3OSw4IEBAIGJvb2wgRXZlbnRMaXN0ZW5lck1h
cDo6cmVtb3ZlKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyKiBs
aXN0CiAgICAgaWYgKGl0ID09IG1faGFzaE1hcC0+ZW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIGJvb2wgd2FzUmVtb3ZlZCA9IHJlbW92ZUxpc3RlbmVyRnJvbVZlY3RvcihpdC0+
c2Vjb25kLmdldCgpLCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSwgaW5kZXhPZlJlbW92ZWRMaXN0ZW5l
cik7Ci0gICAgaWYgKGl0LT5zZWNvbmQtPmlzRW1wdHkoKSkKKyAgICBib29sIHdhc1JlbW92ZWQg
PSByZW1vdmVMaXN0ZW5lckZyb21WZWN0b3IoaXQtPnZhbHVlLmdldCgpLCBsaXN0ZW5lciwgdXNl
Q2FwdHVyZSwgaW5kZXhPZlJlbW92ZWRMaXN0ZW5lcik7CisgICAgaWYgKGl0LT52YWx1ZS0+aXNF
bXB0eSgpKQogICAgICAgICBtX2hhc2hNYXAtPnJlbW92ZShpdCk7CiAgICAgcmV0dXJuIHdhc1Jl
bW92ZWQ7CiB9CkBAIC0xOTMsNyArMTkzLDcgQEAgRXZlbnRMaXN0ZW5lclZlY3RvciogRXZlbnRM
aXN0ZW5lck1hcDo6ZmluZChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSkKICAgICAgICAg
RXZlbnRMaXN0ZW5lckhhc2hNYXA6Oml0ZXJhdG9yIGl0ID0gbV9oYXNoTWFwLT5maW5kKGV2ZW50
VHlwZSk7CiAgICAgICAgIGlmIChpdCA9PSBtX2hhc2hNYXAtPmVuZCgpKQogICAgICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICByZXR1
cm4gaXQtPnZhbHVlLmdldCgpOwogICAgIH0KIAogICAgIGlmIChtX3NpbmdsZUV2ZW50TGlzdGVu
ZXJUeXBlID09IGV2ZW50VHlwZSkKQEAgLTIyNyw3ICsyMjcsNyBAQCB2b2lkIEV2ZW50TGlzdGVu
ZXJNYXA6OnJlbW92ZUZpcnN0RXZlbnRMaXN0ZW5lckNyZWF0ZWRGcm9tTWFya3VwKGNvbnN0IEF0
b21pY1N0cgogICAgICAgICBFdmVudExpc3RlbmVySGFzaE1hcDo6aXRlcmF0b3IgcmVzdWx0ID0g
bV9oYXNoTWFwLT5maW5kKGV2ZW50VHlwZSk7CiAgICAgICAgIEFTU0VSVChyZXN1bHQgIT0gbV9o
YXNoTWFwLT5lbmQoKSk7CiAKLSAgICAgICAgRXZlbnRMaXN0ZW5lclZlY3RvciogbGlzdGVuZXJW
ZWN0b3IgPSByZXN1bHQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgRXZlbnRMaXN0ZW5lclZlY3Rv
ciogbGlzdGVuZXJWZWN0b3IgPSByZXN1bHQtPnZhbHVlLmdldCgpOwogICAgICAgICBBU1NFUlQo
bGlzdGVuZXJWZWN0b3IpOwogCiAgICAgICAgIHJlbW92ZUZpcnN0TGlzdGVuZXJDcmVhdGVkRnJv
bU1hcmt1cChsaXN0ZW5lclZlY3Rvcik7CkBAIC0yNjUsNyArMjY1LDcgQEAgdm9pZCBFdmVudExp
c3RlbmVyTWFwOjpjb3B5RXZlbnRMaXN0ZW5lcnNOb3RDcmVhdGVkRnJvbU1hcmt1cFRvVGFyZ2V0
KEV2ZW50VGFyZ2UKICAgICBpZiAobV9oYXNoTWFwKSB7CiAgICAgICAgIEV2ZW50TGlzdGVuZXJI
YXNoTWFwOjppdGVyYXRvciBlbmQgPSBtX2hhc2hNYXAtPmVuZCgpOwogICAgICAgICBmb3IgKEV2
ZW50TGlzdGVuZXJIYXNoTWFwOjppdGVyYXRvciBpdCA9IG1faGFzaE1hcC0+YmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KQotICAgICAgICAgICAgY29weUxpc3RlbmVyc05vdENyZWF0ZWRGcm9tTWFy
a3VwVG9UYXJnZXQoaXQtPmZpcnN0LCBpdC0+c2Vjb25kLmdldCgpLCB0YXJnZXQpOworICAgICAg
ICAgICAgY29weUxpc3RlbmVyc05vdENyZWF0ZWRGcm9tTWFya3VwVG9UYXJnZXQoaXQtPmtleSwg
aXQtPnZhbHVlLmdldCgpLCB0YXJnZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0z
MjUsNyArMzI1LDcgQEAgRXZlbnRMaXN0ZW5lciogRXZlbnRMaXN0ZW5lckl0ZXJhdG9yOjpuZXh0
TGlzdGVuZXIoKQogCiAgICAgaWYgKG1fbWFwLT5tX2hhc2hNYXApIHsKICAgICAgICAgZm9yICg7
IG1fbWFwSXRlcmF0b3IgIT0gbV9tYXBFbmQ7ICsrbV9tYXBJdGVyYXRvcikgewotICAgICAgICAg
ICAgRXZlbnRMaXN0ZW5lclZlY3RvciYgbGlzdGVuZXJzID0gKm1fbWFwSXRlcmF0b3ItPnNlY29u
ZDsKKyAgICAgICAgICAgIEV2ZW50TGlzdGVuZXJWZWN0b3ImIGxpc3RlbmVycyA9ICptX21hcEl0
ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgICAgIGlmIChtX2luZGV4IDwgbGlzdGVuZXJzLnNpemUo
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gbGlzdGVuZXJzW21faW5kZXgrK10ubGlzdGVuZXIu
Z2V0KCk7CiAgICAgICAgICAgICBtX2luZGV4ID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9JZFRhcmdldE9ic2VydmVyUmVnaXN0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9t
L0lkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeS5jcHAKaW5kZXggNWZjMjZhY2ZlZTMzMmViN2QyZDYx
OWJhNTkyMGM3MzNmNWJiMGY3MC4uYWFmYThhMmQxYjUzMGI3ZDBmM2UzNjcwNTU4ZThjOTZiOTQ4
YWZiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0lkVGFyZ2V0T2JzZXJ2ZXJSZWdp
c3RyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0lkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3Ry
eS5jcHAKQEAgLTQyLDkgKzQyLDkgQEAgdm9pZCBJZFRhcmdldE9ic2VydmVyUmVnaXN0cnk6OmFk
ZE9ic2VydmVyKGNvbnN0IEF0b21pY1N0cmluZyYgaWQsIElkVGFyZ2V0T2JzZXIKICAgICAKICAg
ICBJZFRvT2JzZXJ2ZXJTZXRNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX3JlZ2lzdHJ5LmFkZChp
ZC5pbXBsKCksIG51bGxwdHIpOwogICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAg
cmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBhZG9wdFB0cihuZXcgT2JzZXJ2ZXJTZXQoKSk7Cisg
ICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBhZG9wdFB0cihuZXcgT2JzZXJ2ZXJTZXQo
KSk7CiAKLSAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZC0+YWRkKG9ic2VydmVyKTsKKyAgICBy
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5hZGQob2JzZXJ2ZXIpOwogfQogCiB2b2lkIElkVGFyZ2V0
T2JzZXJ2ZXJSZWdpc3RyeTo6cmVtb3ZlT2JzZXJ2ZXIoY29uc3QgQXRvbWljU3RyaW5nJiBpZCwg
SWRUYXJnZXRPYnNlcnZlciogb2JzZXJ2ZXIpCkBAIC01NCw3ICs1NCw3IEBAIHZvaWQgSWRUYXJn
ZXRPYnNlcnZlclJlZ2lzdHJ5OjpyZW1vdmVPYnNlcnZlcihjb25zdCBBdG9taWNTdHJpbmcmIGlk
LCBJZFRhcmdldE9iCiAKICAgICBJZFRvT2JzZXJ2ZXJTZXRNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBt
X3JlZ2lzdHJ5LmZpbmQoaWQuaW1wbCgpKTsKIAotICAgIE9ic2VydmVyU2V0KiBzZXQgPSBpdGVy
LT5zZWNvbmQuZ2V0KCk7CisgICAgT2JzZXJ2ZXJTZXQqIHNldCA9IGl0ZXItPnZhbHVlLmdldCgp
OwogICAgIHNldC0+cmVtb3ZlKG9ic2VydmVyKTsKICAgICBpZiAoc2V0LT5pc0VtcHR5KCkgJiYg
c2V0ICE9IG1fbm90aWZ5aW5nT2JzZXJ2ZXJzSW5TZXQpCiAgICAgICAgIG1fcmVnaXN0cnkucmVt
b3ZlKGl0ZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL01lbW9yeUluc3RydW1l
bnRhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvZG9tL01lbW9yeUluc3RydW1lbnRhdGlvbi5oCmlu
ZGV4IDM1Y2I2Y2I3YWYwNWMzZTE4MGJlZDY5MzdlYzIwMDhmMmVkNzE1MzMuLjJiOTVmOTY1Njg2
YTE2ODY5Mzc2ZWJmNDY4M2UyZWU3ZWQyOWVlMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9NZW1vcnlJbnN0cnVtZW50YXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTWVt
b3J5SW5zdHJ1bWVudGF0aW9uLmgKQEAgLTMyMyw4ICszMjMsOCBAQCB2b2lkIE1lbW9yeUluc3Ry
dW1lbnRhdGlvbjo6YWRkSW5zdHJ1bWVudGVkTWFwRW50cmllcyhjb25zdCBNYXBUeXBlJiBtYXAs
IE9iamVjdAogewogICAgIHR5cGVuYW1lIE1hcFR5cGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1h
cC5lbmQoKTsKICAgICBmb3IgKHR5cGVuYW1lIE1hcFR5cGU6OmNvbnN0X2l0ZXJhdG9yIGkgPSBt
YXAuYmVnaW4oKTsgaSAhPSBlbmQ7ICsraSkgewotICAgICAgICBhZGRJbnN0cnVtZW50ZWRPYmpl
Y3QoaS0+Zmlyc3QsIG93bmVyT2JqZWN0VHlwZSk7Ci0gICAgICAgIGFkZEluc3RydW1lbnRlZE9i
amVjdChpLT5zZWNvbmQsIG93bmVyT2JqZWN0VHlwZSk7CisgICAgICAgIGFkZEluc3RydW1lbnRl
ZE9iamVjdChpLT5rZXksIG93bmVyT2JqZWN0VHlwZSk7CisgICAgICAgIGFkZEluc3RydW1lbnRl
ZE9iamVjdChpLT52YWx1ZSwgb3duZXJPYmplY3RUeXBlKTsKICAgICB9CiB9CiAKQEAgLTMzMyw3
ICszMzMsNyBAQCB2b2lkIE1lbW9yeUluc3RydW1lbnRhdGlvbjo6YWRkSW5zdHJ1bWVudGVkTWFw
VmFsdWVzKGNvbnN0IE1hcFR5cGUmIG1hcCwgT2JqZWN0VAogewogICAgIHR5cGVuYW1lIE1hcFR5
cGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC5lbmQoKTsKICAgICBmb3IgKHR5cGVuYW1lIE1h
cFR5cGU6OmNvbnN0X2l0ZXJhdG9yIGkgPSBtYXAuYmVnaW4oKTsgaSAhPSBlbmQ7ICsraSkKLSAg
ICAgICAgYWRkSW5zdHJ1bWVudGVkT2JqZWN0KGktPnNlY29uZCwgb3duZXJPYmplY3RUeXBlKTsK
KyAgICAgICAgYWRkSW5zdHJ1bWVudGVkT2JqZWN0KGktPnZhbHVlLCBvd25lck9iamVjdFR5cGUp
OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0SGFzaFNldFR5cGU+CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25PYnNlcnZlckludGVyZXN0R3JvdXAuY3BwIGIvU291
cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3VwLmNwcAppbmRleCAy
NGMwY2I1ODY1MTdlMDhiYzdhOGI0MDkzZjIxZDMxZTBkYjJkNjRlLi40ZmFkMjIwODE4NTNjZDgx
NTM0ZDMwMGQxNjFkODhiMWFhNWU5NGM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
TXV0YXRpb25PYnNlcnZlckludGVyZXN0R3JvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9NdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cC5jcHAKQEAgLTYyLDcgKzYyLDcgQEAgTXV0
YXRpb25PYnNlcnZlckludGVyZXN0R3JvdXA6Ok11dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3Vw
KEhhc2hNYXA8TXV0YXRpb25PYnMKIGJvb2wgTXV0YXRpb25PYnNlcnZlckludGVyZXN0R3JvdXA6
OmlzT2xkVmFsdWVSZXF1ZXN0ZWQoKQogewogICAgIGZvciAoSGFzaE1hcDxNdXRhdGlvbk9ic2Vy
dmVyKiwgTXV0YXRpb25SZWNvcmREZWxpdmVyeU9wdGlvbnM+OjppdGVyYXRvciBpdGVyID0gbV9v
YnNlcnZlcnMuYmVnaW4oKTsgaXRlciAhPSBtX29ic2VydmVycy5lbmQoKTsgKytpdGVyKSB7Ci0g
ICAgICAgIGlmIChoYXNPbGRWYWx1ZShpdGVyLT5zZWNvbmQpKQorICAgICAgICBpZiAoaGFzT2xk
VmFsdWUoaXRlci0+dmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAg
IHJldHVybiBmYWxzZTsKQEAgLTczLDggKzczLDggQEAgdm9pZCBNdXRhdGlvbk9ic2VydmVySW50
ZXJlc3RHcm91cDo6ZW5xdWV1ZU11dGF0aW9uUmVjb3JkKFBhc3NSZWZQdHI8TXV0YXRpb25SZWMK
ICAgICBSZWZQdHI8TXV0YXRpb25SZWNvcmQ+IG11dGF0aW9uID0gcHJwTXV0YXRpb247CiAgICAg
UmVmUHRyPE11dGF0aW9uUmVjb3JkPiBtdXRhdGlvbldpdGhOdWxsT2xkVmFsdWU7CiAgICAgZm9y
IChIYXNoTWFwPE11dGF0aW9uT2JzZXJ2ZXIqLCBNdXRhdGlvblJlY29yZERlbGl2ZXJ5T3B0aW9u
cz46Oml0ZXJhdG9yIGl0ZXIgPSBtX29ic2VydmVycy5iZWdpbigpOyBpdGVyICE9IG1fb2JzZXJ2
ZXJzLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgTXV0YXRpb25PYnNlcnZlciogb2JzZXJ2ZXIg
PSBpdGVyLT5maXJzdDsKLSAgICAgICAgaWYgKGhhc09sZFZhbHVlKGl0ZXItPnNlY29uZCkpIHsK
KyAgICAgICAgTXV0YXRpb25PYnNlcnZlciogb2JzZXJ2ZXIgPSBpdGVyLT5rZXk7CisgICAgICAg
IGlmIChoYXNPbGRWYWx1ZShpdGVyLT52YWx1ZSkpIHsKICAgICAgICAgICAgIG9ic2VydmVyLT5l
bnF1ZXVlTXV0YXRpb25SZWNvcmQobXV0YXRpb24pOwogICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAppbmRleCBhM2ExYzIyZjI1NTQ5ZjdmY2FiZjQwNzAxNjFh
YjY5OGVkMjFjNzliLi5kZDUxN2E4ZGQ1NmRlNmMyNzYwZjJlMWFlYWYwNGM1MGVlMWQ4M2JhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL05vZGUuY3BwCkBAIC0xOTAsNyArMTkwLDcgQEAgdm9pZCBOb2RlOjpkdW1wU3RhdGlz
dGljcygpCiAgICAgICAgICAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEVs
ZW1lbnQqPihub2RlKTsKICAgICAgICAgICAgICAgICBIYXNoTWFwPFN0cmluZywgc2l6ZV90Pjo6
QWRkUmVzdWx0IHJlc3VsdCA9IHBlclRhZ0NvdW50LmFkZChlbGVtZW50LT50YWdOYW1lKCksIDEp
OwogICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgICAgICAg
ICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKys7CisgICAgICAgICAgICAgICAgICAgIHJl
c3VsdC5pdGVyYXRvci0+dmFsdWUrKzsKIAogICAgICAgICAgICAgICAgIGlmIChFbGVtZW50QXR0
cmlidXRlRGF0YSogYXR0cmlidXRlRGF0YSA9IGVsZW1lbnQtPmF0dHJpYnV0ZURhdGEoKSkgewog
ICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzICs9IGF0dHJpYnV0ZURhdGEtPmxlbmd0aCgp
OwpAQCAtMjc4LDcgKzI3OCw3IEBAIHZvaWQgTm9kZTo6ZHVtcFN0YXRpc3RpY3MoKQogCiAgICAg
cHJpbnRmKCJFbGVtZW50IHRhZyBuYW1lIGRpc3RpYnV0aW9uOlxuIik7CiAgICAgZm9yIChIYXNo
TWFwPFN0cmluZywgc2l6ZV90Pjo6aXRlcmF0b3IgaXQgPSBwZXJUYWdDb3VudC5iZWdpbigpOyBp
dCAhPSBwZXJUYWdDb3VudC5lbmQoKTsgKytpdCkKLSAgICAgICAgcHJpbnRmKCIgIE51bWJlciBv
ZiA8JXM+IHRhZ3M6ICV6dVxuIiwgaXQtPmZpcnN0LnV0ZjgoKS5kYXRhKCksIGl0LT5zZWNvbmQp
OworICAgICAgICBwcmludGYoIiAgTnVtYmVyIG9mIDwlcz4gdGFnczogJXp1XG4iLCBpdC0+a2V5
LnV0ZjgoKS5kYXRhKCksIGl0LT52YWx1ZSk7CiAKICAgICBwcmludGYoIkF0dHJpYnV0ZXM6XG4i
KTsKICAgICBwcmludGYoIiAgTnVtYmVyIG9mIEF0dHJpYnV0ZXMgKG5vbi1Ob2RlIGFuZCBOb2Rl
KTogJXp1IFslenVdXG4iLCBhdHRyaWJ1dGVzLCBzaXplb2YoQXR0cmlidXRlKSk7CkBAIC01MTEs
NyArNTExLDcgQEAgdm9pZCBOb2RlOjpjbGVhclJhcmVEYXRhKCkKICAgICAgICAgTm9kZVJhcmVE
YXRhOjpOb2RlUmFyZURhdGFNYXAmIGRhdGFNYXAgPSBOb2RlUmFyZURhdGE6OnJhcmVEYXRhTWFw
KCk7CiAgICAgICAgIE5vZGVSYXJlRGF0YTo6Tm9kZVJhcmVEYXRhTWFwOjppdGVyYXRvciBpdCA9
IGRhdGFNYXAuZmluZCh0aGlzKTsKICAgICAgICAgQVNTRVJUKGl0ICE9IGRhdGFNYXAuZW5kKCkp
OwotICAgICAgICBkZWxldGUgaXQtPnNlY29uZDsKKyAgICAgICAgZGVsZXRlIGl0LT52YWx1ZTsK
ICAgICAgICAgZGF0YU1hcC5yZW1vdmUoaXQpOwogICAgIH0KICAgICBjbGVhckZsYWcoSGFzUmFy
ZURhdGFGbGFnKTsKQEAgLTIyNjUsMTggKzIyNjUsMTggQEAgdm9pZCBOb2RlTGlzdHNOb2RlRGF0
YTo6aW52YWxpZGF0ZUNhY2hlcyhjb25zdCBRdWFsaWZpZWROYW1lKiBhdHRyTmFtZSkKIHsKICAg
ICBOb2RlTGlzdEF0b21pY05hbWVDYWNoZU1hcDo6Y29uc3RfaXRlcmF0b3IgYXRvbWljTmFtZUNh
Y2hlRW5kID0gbV9hdG9taWNOYW1lQ2FjaGVzLmVuZCgpOwogICAgIGZvciAoTm9kZUxpc3RBdG9t
aWNOYW1lQ2FjaGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9hdG9taWNOYW1lQ2FjaGVzLmJl
Z2luKCk7IGl0ICE9IGF0b21pY05hbWVDYWNoZUVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29u
ZC0+aW52YWxpZGF0ZUNhY2hlKGF0dHJOYW1lKTsKKyAgICAgICAgaXQtPnZhbHVlLT5pbnZhbGlk
YXRlQ2FjaGUoYXR0ck5hbWUpOwogCiAgICAgTm9kZUxpc3ROYW1lQ2FjaGVNYXA6OmNvbnN0X2l0
ZXJhdG9yIG5hbWVDYWNoZUVuZCA9IG1fbmFtZUNhY2hlcy5lbmQoKTsKICAgICBmb3IgKE5vZGVM
aXN0TmFtZUNhY2hlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fbmFtZUNhY2hlcy5iZWdpbigp
OyBpdCAhPSBuYW1lQ2FjaGVFbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPmludmFsaWRh
dGVDYWNoZShhdHRyTmFtZSk7CisgICAgICAgIGl0LT52YWx1ZS0+aW52YWxpZGF0ZUNhY2hlKGF0
dHJOYW1lKTsKIAogICAgIGlmIChhdHRyTmFtZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgVGFn
Tm9kZUxpc3RDYWNoZU5TOjppdGVyYXRvciB0YWdDYWNoZUVuZCA9IG1fdGFnTm9kZUxpc3RDYWNo
ZU5TLmVuZCgpOwogICAgIGZvciAoVGFnTm9kZUxpc3RDYWNoZU5TOjppdGVyYXRvciBpdCA9IG1f
dGFnTm9kZUxpc3RDYWNoZU5TLmJlZ2luKCk7IGl0ICE9IHRhZ0NhY2hlRW5kOyArK2l0KQotICAg
ICAgICBpdC0+c2Vjb25kLT5pbnZhbGlkYXRlQ2FjaGUoKTsKKyAgICAgICAgaXQtPnZhbHVlLT5p
bnZhbGlkYXRlQ2FjaGUoKTsKIH0KIAogdm9pZCBOb2RlOjpnZXRTdWJyZXNvdXJjZVVSTHMoTGlz
dEhhc2hTZXQ8S1VSTD4mIHVybHMpIGNvbnN0CkBAIC0yNDMzLDcgKzI0MzMsNyBAQCB2b2lkIE5v
ZGU6OmNvbGxlY3RNYXRjaGluZ09ic2VydmVyc0Zvck11dGF0aW9uKEhhc2hNYXA8TXV0YXRpb25P
YnNlcnZlciosIE11dGF0aQogICAgICAgICAgICAgICAgIE11dGF0aW9uUmVjb3JkRGVsaXZlcnlP
cHRpb25zIGRlbGl2ZXJ5T3B0aW9ucyA9IHJlZ2lzdHJhdGlvbi0+ZGVsaXZlcnlPcHRpb25zKCk7
CiAgICAgICAgICAgICAgICAgSGFzaE1hcDxNdXRhdGlvbk9ic2VydmVyKiwgTXV0YXRpb25SZWNv
cmREZWxpdmVyeU9wdGlvbnM+OjpBZGRSZXN1bHQgcmVzdWx0ID0gb2JzZXJ2ZXJzLmFkZChyZWdp
c3RyYXRpb24tPm9ic2VydmVyKCksIGRlbGl2ZXJ5T3B0aW9ucyk7CiAgICAgICAgICAgICAgICAg
aWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lml0ZXJh
dG9yLT5zZWNvbmQgfD0gZGVsaXZlcnlPcHRpb25zOworICAgICAgICAgICAgICAgICAgICByZXN1
bHQuaXRlcmF0b3ItPnZhbHVlIHw9IGRlbGl2ZXJ5T3B0aW9uczsKIAogICAgICAgICAgICAgfQog
ICAgICAgICB9CkBAIC0yNDQ2LDcgKzI0NDYsNyBAQCB2b2lkIE5vZGU6OmNvbGxlY3RNYXRjaGlu
Z09ic2VydmVyc0Zvck11dGF0aW9uKEhhc2hNYXA8TXV0YXRpb25PYnNlcnZlciosIE11dGF0aQog
ICAgICAgICAgICAgICAgIE11dGF0aW9uUmVjb3JkRGVsaXZlcnlPcHRpb25zIGRlbGl2ZXJ5T3B0
aW9ucyA9IHJlZ2lzdHJhdGlvbi0+ZGVsaXZlcnlPcHRpb25zKCk7CiAgICAgICAgICAgICAgICAg
SGFzaE1hcDxNdXRhdGlvbk9ic2VydmVyKiwgTXV0YXRpb25SZWNvcmREZWxpdmVyeU9wdGlvbnM+
OjpBZGRSZXN1bHQgcmVzdWx0ID0gb2JzZXJ2ZXJzLmFkZChyZWdpc3RyYXRpb24tPm9ic2VydmVy
KCksIGRlbGl2ZXJ5T3B0aW9ucyk7CiAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuaXNOZXdF
bnRyeSkKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgfD0gZGVs
aXZlcnlPcHRpb25zOworICAgICAgICAgICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVl
IHw9IGRlbGl2ZXJ5T3B0aW9uczsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlUmFyZURhdGEuaAppbmRleCAxZmRlYmI2ZDIxODczNDg1NDRjODMyMGUyYzU1
ZDZiZDg3MDk3N2Y0Li5mNDMxN2JkYmE1YmVkZGFkZjI0MTJiZWYyMzRjNTYyMDYxMzQ1MjgwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRhLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL05vZGVSYXJlRGF0YS5oCkBAIC02OCwxMCArNjgsMTAgQEAgcHVibGljOgog
ICAgIHsKICAgICAgICAgTm9kZUxpc3RBdG9taWNOYW1lQ2FjaGVNYXA6OkFkZFJlc3VsdCByZXN1
bHQgPSBtX2F0b21pY05hbWVDYWNoZXMuYWRkKG5hbWVkTm9kZUxpc3RLZXkobGlzdFR5cGUsIG5h
bWUpLCAwKTsKICAgICAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxUKj4ocmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOworICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFQqPihyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKIAogICAg
ICAgICBSZWZQdHI8VD4gbGlzdCA9IFQ6OmNyZWF0ZShub2RlLCBuYW1lKTsKLSAgICAgICAgcmVz
dWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBsaXN0LmdldCgpOworICAgICAgICByZXN1bHQuaXRlcmF0
b3ItPnZhbHVlID0gbGlzdC5nZXQoKTsKICAgICAgICAgcmV0dXJuIGxpc3QucmVsZWFzZSgpOwog
ICAgIH0KIApAQCAtODAsMTAgKzgwLDEwIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIE5vZGVM
aXN0TmFtZUNhY2hlTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9uYW1lQ2FjaGVzLmFkZChuYW1l
ZE5vZGVMaXN0S2V5KGxpc3RUeXBlLCBuYW1lKSwgMCk7CiAgICAgICAgIGlmICghcmVzdWx0Lmlz
TmV3RW50cnkpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VCo+KHJlc3VsdC5pdGVy
YXRvci0+c2Vjb25kKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUKj4ocmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZSk7CiAKICAgICAgICAgUmVmUHRyPFQ+IGxpc3QgPSBUOjpjcmVhdGUo
bm9kZSwgbmFtZSk7Ci0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gbGlzdC5nZXQo
KTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGxpc3QuZ2V0KCk7CiAgICAgICAg
IHJldHVybiBsaXN0LnJlbGVhc2UoKTsKICAgICB9CiAKQEAgLTkyLDEwICs5MiwxMCBAQCBwdWJs
aWM6CiAgICAgICAgIFF1YWxpZmllZE5hbWUgbmFtZShudWxsQXRvbSwgbG9jYWxOYW1lLCBuYW1l
c3BhY2VVUkkpOwogICAgICAgICBUYWdOb2RlTGlzdENhY2hlTlM6OkFkZFJlc3VsdCByZXN1bHQg
PSBtX3RhZ05vZGVMaXN0Q2FjaGVOUy5hZGQobmFtZSwgMCk7CiAgICAgICAgIGlmICghcmVzdWx0
LmlzTmV3RW50cnkpCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7
CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIAogICAgICAgICBS
ZWZQdHI8VGFnTm9kZUxpc3Q+IGxpc3QgPSBUYWdOb2RlTGlzdDo6Y3JlYXRlKG5vZGUsIG5hbWVz
cGFjZVVSSSwgbG9jYWxOYW1lKTsKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBs
aXN0LmdldCgpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gbGlzdC5nZXQoKTsK
ICAgICAgICAgcmV0dXJuIGxpc3QucmVsZWFzZSgpOwogICAgIH0KIApAQCAtMTM2LDIxICsxMzYs
MjEgQEAgcHVibGljOgogICAgICAgICBpZiAob2xkRG9jdW1lbnQgIT0gbmV3RG9jdW1lbnQpIHsK
ICAgICAgICAgICAgIE5vZGVMaXN0QXRvbWljTmFtZUNhY2hlTWFwOjpjb25zdF9pdGVyYXRvciBh
dG9taWNOYW1lQ2FjaGVFbmQgPSBtX2F0b21pY05hbWVDYWNoZXMuZW5kKCk7CiAgICAgICAgICAg
ICBmb3IgKE5vZGVMaXN0QXRvbWljTmFtZUNhY2hlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1f
YXRvbWljTmFtZUNhY2hlcy5iZWdpbigpOyBpdCAhPSBhdG9taWNOYW1lQ2FjaGVFbmQ7ICsraXQp
IHsKLSAgICAgICAgICAgICAgICBEeW5hbWljU3VidHJlZU5vZGVMaXN0KiBsaXN0ID0gaXQtPnNl
Y29uZDsKKyAgICAgICAgICAgICAgICBEeW5hbWljU3VidHJlZU5vZGVMaXN0KiBsaXN0ID0gaXQt
PnZhbHVlOwogICAgICAgICAgICAgICAgIG9sZERvY3VtZW50LT51bnJlZ2lzdGVyTm9kZUxpc3RD
YWNoZShsaXN0KTsKICAgICAgICAgICAgICAgICBuZXdEb2N1bWVudC0+cmVnaXN0ZXJOb2RlTGlz
dENhY2hlKGxpc3QpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBOb2RlTGlzdE5hbWVD
YWNoZU1hcDo6Y29uc3RfaXRlcmF0b3IgbmFtZUNhY2hlRW5kID0gbV9uYW1lQ2FjaGVzLmVuZCgp
OwogICAgICAgICAgICAgZm9yIChOb2RlTGlzdE5hbWVDYWNoZU1hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtX25hbWVDYWNoZXMuYmVnaW4oKTsgaXQgIT0gbmFtZUNhY2hlRW5kOyArK2l0KSB7Ci0g
ICAgICAgICAgICAgICAgRHluYW1pY1N1YnRyZWVOb2RlTGlzdCogbGlzdCA9IGl0LT5zZWNvbmQ7
CisgICAgICAgICAgICAgICAgRHluYW1pY1N1YnRyZWVOb2RlTGlzdCogbGlzdCA9IGl0LT52YWx1
ZTsKICAgICAgICAgICAgICAgICBvbGREb2N1bWVudC0+dW5yZWdpc3Rlck5vZGVMaXN0Q2FjaGUo
bGlzdCk7CiAgICAgICAgICAgICAgICAgbmV3RG9jdW1lbnQtPnJlZ2lzdGVyTm9kZUxpc3RDYWNo
ZShsaXN0KTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgVGFnTm9kZUxpc3RDYWNoZU5T
Ojpjb25zdF9pdGVyYXRvciB0YWdFbmQgPSBtX3RhZ05vZGVMaXN0Q2FjaGVOUy5lbmQoKTsKICAg
ICAgICAgICAgIGZvciAoVGFnTm9kZUxpc3RDYWNoZU5TOjpjb25zdF9pdGVyYXRvciBpdCA9IG1f
dGFnTm9kZUxpc3RDYWNoZU5TLmJlZ2luKCk7IGl0ICE9IHRhZ0VuZDsgKytpdCkgewotICAgICAg
ICAgICAgICAgIER5bmFtaWNTdWJ0cmVlTm9kZUxpc3QqIGxpc3QgPSBpdC0+c2Vjb25kOworICAg
ICAgICAgICAgICAgIER5bmFtaWNTdWJ0cmVlTm9kZUxpc3QqIGxpc3QgPSBpdC0+dmFsdWU7CiAg
ICAgICAgICAgICAgICAgQVNTRVJUKCFsaXN0LT5pc1Jvb3RlZEF0RG9jdW1lbnQoKSk7CiAgICAg
ICAgICAgICAgICAgb2xkRG9jdW1lbnQtPnVucmVnaXN0ZXJOb2RlTGlzdENhY2hlKGxpc3QpOwog
ICAgICAgICAgICAgICAgIG5ld0RvY3VtZW50LT5yZWdpc3Rlck5vZGVMaXN0Q2FjaGUobGlzdCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwCmluZGV4IGU1
OTQwOWJjZjQyYzViODBlMjk3NmJmNzhiZGU4MTg1MzhjYjY3NGUuLjJmNDNhNTNmZGU2ZjYyOTkw
ODU0ZmQwYzY0N2RmZjMwYWQ3ZThiMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Q
cm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Qcm9jZXNz
aW5nSW5zdHJ1Y3Rpb24uY3BwCkBAIC0xMTcsNyArMTE3LDcgQEAgdm9pZCBQcm9jZXNzaW5nSW5z
dHJ1Y3Rpb246OmNoZWNrU3R5bGVTaGVldCgpCiAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJp
bmc+Ojpjb25zdF9pdGVyYXRvciBpID0gYXR0cnMuZmluZCgidHlwZSIpOwogICAgICAgICBTdHJp
bmcgdHlwZTsKICAgICAgICAgaWYgKGkgIT0gYXR0cnMuZW5kKCkpCi0gICAgICAgICAgICB0eXBl
ID0gaS0+c2Vjb25kOworICAgICAgICAgICAgdHlwZSA9IGktPnZhbHVlOwogCiAgICAgICAgIG1f
aXNDU1MgPSB0eXBlLmlzRW1wdHkoKSB8fCB0eXBlID09ICJ0ZXh0L2NzcyI7CiAjaWYgRU5BQkxF
KFhTTFQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAK
aW5kZXggOTI0NDVjYTgwZGFmNjMzMjM5ZDJmNzljZWU5OGRkOWRkNDQxYjMyMy4uNTM1YjU3MGI1
ZDdkZTlmNGFmOTM1ODNlN2M3MWQxMmIyZDc1MzVhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcApAQCAtMTczLDkgKzE3Myw5IEBAIGJvb2wgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dDo6Y2FuU3VzcGVuZEFjdGl2ZURPTU9iamVjdHMoKQogICAgIG1f
aXRlcmF0aW5nQWN0aXZlRE9NT2JqZWN0cyA9IHRydWU7CiAgICAgSGFzaE1hcDxBY3RpdmVET01P
YmplY3QqLCB2b2lkKj46Oml0ZXJhdG9yIGFjdGl2ZU9iamVjdHNFbmQgPSBtX2FjdGl2ZURPTU9i
amVjdHMuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPEFjdGl2ZURPTU9iamVjdCosIHZvaWQqPjo6
aXRlcmF0b3IgaXRlciA9IG1fYWN0aXZlRE9NT2JqZWN0cy5iZWdpbigpOyBpdGVyICE9IGFjdGl2
ZU9iamVjdHNFbmQ7ICsraXRlcikgewotICAgICAgICBBU1NFUlQoaXRlci0+Zmlyc3QtPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSA9PSB0aGlzKTsKLSAgICAgICAgQVNTRVJUKGl0ZXItPmZpcnN0
LT5zdXNwZW5kSWZOZWVkZWRDYWxsZWQoKSk7Ci0gICAgICAgIGlmICghaXRlci0+Zmlyc3QtPmNh
blN1c3BlbmQoKSkgeworICAgICAgICBBU1NFUlQoaXRlci0+a2V5LT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkgPT0gdGhpcyk7CisgICAgICAgIEFTU0VSVChpdGVyLT5rZXktPnN1c3BlbmRJZk5l
ZWRlZENhbGxlZCgpKTsKKyAgICAgICAgaWYgKCFpdGVyLT5rZXktPmNhblN1c3BlbmQoKSkgewog
ICAgICAgICAgICAgbV9pdGVyYXRpbmdBY3RpdmVET01PYmplY3RzID0gZmFsc2U7CiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KQEAgLTE5MCw5ICsxOTAsOSBAQCB2b2lkIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnN1c3BlbmRBY3RpdmVET01PYmplY3RzKEFjdGl2ZURPTU9i
amVjdDo6UmVhc29uRm9yUwogICAgIG1faXRlcmF0aW5nQWN0aXZlRE9NT2JqZWN0cyA9IHRydWU7
CiAgICAgSGFzaE1hcDxBY3RpdmVET01PYmplY3QqLCB2b2lkKj46Oml0ZXJhdG9yIGFjdGl2ZU9i
amVjdHNFbmQgPSBtX2FjdGl2ZURPTU9iamVjdHMuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPEFj
dGl2ZURPTU9iamVjdCosIHZvaWQqPjo6aXRlcmF0b3IgaXRlciA9IG1fYWN0aXZlRE9NT2JqZWN0
cy5iZWdpbigpOyBpdGVyICE9IGFjdGl2ZU9iamVjdHNFbmQ7ICsraXRlcikgewotICAgICAgICBB
U1NFUlQoaXRlci0+Zmlyc3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSA9PSB0aGlzKTsKLSAg
ICAgICAgQVNTRVJUKGl0ZXItPmZpcnN0LT5zdXNwZW5kSWZOZWVkZWRDYWxsZWQoKSk7Ci0gICAg
ICAgIGl0ZXItPmZpcnN0LT5zdXNwZW5kKHdoeSk7CisgICAgICAgIEFTU0VSVChpdGVyLT5rZXkt
PnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSA9PSB0aGlzKTsKKyAgICAgICAgQVNTRVJUKGl0ZXIt
PmtleS0+c3VzcGVuZElmTmVlZGVkQ2FsbGVkKCkpOworICAgICAgICBpdGVyLT5rZXktPnN1c3Bl
bmQod2h5KTsKICAgICB9CiAgICAgbV9pdGVyYXRpbmdBY3RpdmVET01PYmplY3RzID0gZmFsc2U7
CiAgICAgbV9hY3RpdmVET01PYmplY3RzQXJlU3VzcGVuZGVkID0gdHJ1ZTsKQEAgLTIwNiw5ICsy
MDYsOSBAQCB2b2lkIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnJlc3VtZUFjdGl2ZURPTU9iamVj
dHMoKQogICAgIG1faXRlcmF0aW5nQWN0aXZlRE9NT2JqZWN0cyA9IHRydWU7CiAgICAgSGFzaE1h
cDxBY3RpdmVET01PYmplY3QqLCB2b2lkKj46Oml0ZXJhdG9yIGFjdGl2ZU9iamVjdHNFbmQgPSBt
X2FjdGl2ZURPTU9iamVjdHMuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPEFjdGl2ZURPTU9iamVj
dCosIHZvaWQqPjo6aXRlcmF0b3IgaXRlciA9IG1fYWN0aXZlRE9NT2JqZWN0cy5iZWdpbigpOyBp
dGVyICE9IGFjdGl2ZU9iamVjdHNFbmQ7ICsraXRlcikgewotICAgICAgICBBU1NFUlQoaXRlci0+
Zmlyc3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSA9PSB0aGlzKTsKLSAgICAgICAgQVNTRVJU
KGl0ZXItPmZpcnN0LT5zdXNwZW5kSWZOZWVkZWRDYWxsZWQoKSk7Ci0gICAgICAgIGl0ZXItPmZp
cnN0LT5yZXN1bWUoKTsKKyAgICAgICAgQVNTRVJUKGl0ZXItPmtleS0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpID09IHRoaXMpOworICAgICAgICBBU1NFUlQoaXRlci0+a2V5LT5zdXNwZW5kSWZO
ZWVkZWRDYWxsZWQoKSk7CisgICAgICAgIGl0ZXItPmtleS0+cmVzdW1lKCk7CiAgICAgfQogICAg
IG1faXRlcmF0aW5nQWN0aXZlRE9NT2JqZWN0cyA9IGZhbHNlOwogfQpAQCAtMjIwLDkgKzIyMCw5
IEBAIHZvaWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6c3RvcEFjdGl2ZURPTU9iamVjdHMoKQog
ICAgIG1faXRlcmF0aW5nQWN0aXZlRE9NT2JqZWN0cyA9IHRydWU7CiAgICAgSGFzaE1hcDxBY3Rp
dmVET01PYmplY3QqLCB2b2lkKj46Oml0ZXJhdG9yIGFjdGl2ZU9iamVjdHNFbmQgPSBtX2FjdGl2
ZURPTU9iamVjdHMuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPEFjdGl2ZURPTU9iamVjdCosIHZv
aWQqPjo6aXRlcmF0b3IgaXRlciA9IG1fYWN0aXZlRE9NT2JqZWN0cy5iZWdpbigpOyBpdGVyICE9
IGFjdGl2ZU9iamVjdHNFbmQ7ICsraXRlcikgewotICAgICAgICBBU1NFUlQoaXRlci0+Zmlyc3Qt
PnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSA9PSB0aGlzKTsKLSAgICAgICAgQVNTRVJUKGl0ZXIt
PmZpcnN0LT5zdXNwZW5kSWZOZWVkZWRDYWxsZWQoKSk7Ci0gICAgICAgIGl0ZXItPmZpcnN0LT5z
dG9wKCk7CisgICAgICAgIEFTU0VSVChpdGVyLT5rZXktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSA9PSB0aGlzKTsKKyAgICAgICAgQVNTRVJUKGl0ZXItPmtleS0+c3VzcGVuZElmTmVlZGVkQ2Fs
bGVkKCkpOworICAgICAgICBpdGVyLT5rZXktPnN0b3AoKTsKICAgICB9CiAgICAgbV9pdGVyYXRp
bmdBY3RpdmVET01PYmplY3RzID0gZmFsc2U7CiAKQEAgLTM4MCw3ICszODAsNyBAQCB2b2lkIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQ6OmFkanVzdE1pbmltdW1UaW1lckludGVydmFsKGRvdWJsZSBv
bGRNaW5pbXVtVGltZXJJbgogewogICAgIGlmIChtaW5pbXVtVGltZXJJbnRlcnZhbCgpICE9IG9s
ZE1pbmltdW1UaW1lckludGVydmFsKSB7CiAgICAgICAgIGZvciAoVGltZW91dE1hcDo6aXRlcmF0
b3IgaXRlciA9IG1fdGltZW91dHMuYmVnaW4oKTsgaXRlciAhPSBtX3RpbWVvdXRzLmVuZCgpOyAr
K2l0ZXIpIHsKLSAgICAgICAgICAgIERPTVRpbWVyKiB0aW1lciA9IGl0ZXItPnNlY29uZDsKKyAg
ICAgICAgICAgIERPTVRpbWVyKiB0aW1lciA9IGl0ZXItPnZhbHVlOwogICAgICAgICAgICAgdGlt
ZXItPmFkanVzdE1pbmltdW1UaW1lckludGVydmFsKG9sZE1pbmltdW1UaW1lckludGVydmFsKTsK
ICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TZWxlY3Rv
clF1ZXJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TZWxlY3RvclF1ZXJ5LmNwcAppbmRleCA3
ODYyYWVmY2MzYWJhOGU0YjkyYzg0MzMyYjc0YTk2MDNjYWU3MjI1Li5lY2I1YTE2MGZiMjZmYWM0
YTdkMjcxODFhMGMyNDRlYmQwNGNlNDUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
U2VsZWN0b3JRdWVyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NlbGVjdG9yUXVlcnku
Y3BwCkBAIC0xNjksNyArMTY5LDcgQEAgU2VsZWN0b3JRdWVyeSogU2VsZWN0b3JRdWVyeUNhY2hl
OjphZGQoY29uc3QgQXRvbWljU3RyaW5nJiBzZWxlY3RvcnMsIERvY3VtZW50KgogewogICAgIEhh
c2hNYXA8QXRvbWljU3RyaW5nLCBPd25QdHI8U2VsZWN0b3JRdWVyeT4gPjo6aXRlcmF0b3IgaXQg
PSBtX2VudHJpZXMuZmluZChzZWxlY3RvcnMpOwogICAgIGlmIChpdCAhPSBtX2VudHJpZXMuZW5k
KCkpCi0gICAgICAgIHJldHVybiBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICByZXR1cm4gaXQt
PnZhbHVlLmdldCgpOwogCiAgICAgQ1NTUGFyc2VyIHBhcnNlcihkb2N1bWVudCk7CiAgICAgQ1NT
U2VsZWN0b3JMaXN0IHNlbGVjdG9yTGlzdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9TcGFjZVNwbGl0U3RyaW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TcGFjZVNwbGl0U3Ry
aW5nLmNwcAppbmRleCA5Y2NlN2Q5NWI1ZTEwNDQzYzAzZWRhNWI3MmYxMTJjNTcwNTJlNTEyLi4x
ZGMxZmIwZGRlMWYwMjNmM2Y4YTY1M2IyM2FjM2Q4NzM4ZThjMzQ5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vU3BhY2VTcGxpdFN0cmluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL1NwYWNlU3BsaXRTdHJpbmcuY3BwCkBAIC0xNTAsNyArMTUwLDcgQEAgU3BhY2VTcGxpdFN0
cmluZ0RhdGE6On5TcGFjZVNwbGl0U3RyaW5nRGF0YSgpCiAKIFBhc3NSZWZQdHI8U3BhY2VTcGxp
dFN0cmluZ0RhdGE+IFNwYWNlU3BsaXRTdHJpbmdEYXRhOjpjcmVhdGUoY29uc3QgQXRvbWljU3Ry
aW5nJiBzdHJpbmcpCiB7Ci0gICAgU3BhY2VTcGxpdFN0cmluZ0RhdGEqJiBkYXRhID0gc2hhcmVk
RGF0YU1hcCgpLmFkZChzdHJpbmcsIDApLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgU3BhY2VTcGxp
dFN0cmluZ0RhdGEqJiBkYXRhID0gc2hhcmVkRGF0YU1hcCgpLmFkZChzdHJpbmcsIDApLml0ZXJh
dG9yLT52YWx1ZTsKICAgICBpZiAoIWRhdGEpIHsKICAgICAgICAgZGF0YSA9IG5ldyBTcGFjZVNw
bGl0U3RyaW5nRGF0YShzdHJpbmcpOwogICAgICAgICByZXR1cm4gYWRvcHRSZWYoZGF0YSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5jcHAKaW5kZXggZTc1Y2Q1MzFkMTZmOGQ4ZTIwMjM2
OTI3OTZmMWZlNDlhYzhmNzUyMi4uMTU1M2ViNGI2MTcxZmFkNGU5YjZmNGIyMjhlNGM1MmZiNTAx
ZjI4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcApAQCAtMjc3LDE0ICsyNzcs
MTQgQEAgdm9pZCBTdHlsZWRFbGVtZW50Ojp1cGRhdGVBdHRyaWJ1dGVTdHlsZSgpCiAgICAgUHJl
c2VudGF0aW9uQXR0cmlidXRlQ2FjaGU6Oml0ZXJhdG9yIGNhY2hlSXRlcmF0b3I7CiAgICAgaWYg
KGNhY2hlSGFzaCkgewogICAgICAgICBjYWNoZUl0ZXJhdG9yID0gcHJlc2VudGF0aW9uQXR0cmli
dXRlQ2FjaGUoKS5hZGQoY2FjaGVIYXNoLCBudWxscHRyKS5pdGVyYXRvcjsKLSAgICAgICAgaWYg
KGNhY2hlSXRlcmF0b3ItPnNlY29uZCAmJiBjYWNoZUl0ZXJhdG9yLT5zZWNvbmQtPmtleSAhPSBj
YWNoZUtleSkKKyAgICAgICAgaWYgKGNhY2hlSXRlcmF0b3ItPnZhbHVlICYmIGNhY2hlSXRlcmF0
b3ItPnZhbHVlLT5rZXkgIT0gY2FjaGVLZXkpCiAgICAgICAgICAgICBjYWNoZUhhc2ggPSAwOwog
ICAgIH0gZWxzZQogICAgICAgICBjYWNoZUl0ZXJhdG9yID0gcHJlc2VudGF0aW9uQXR0cmlidXRl
Q2FjaGUoKS5lbmQoKTsKIAogICAgIFJlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBzdHlsZTsKLSAg
ICBpZiAoY2FjaGVIYXNoICYmIGNhY2hlSXRlcmF0b3ItPnNlY29uZCkgewotICAgICAgICBzdHls
ZSA9IGNhY2hlSXRlcmF0b3ItPnNlY29uZC0+dmFsdWU7CisgICAgaWYgKGNhY2hlSGFzaCAmJiBj
YWNoZUl0ZXJhdG9yLT52YWx1ZSkgeworICAgICAgICBzdHlsZSA9IGNhY2hlSXRlcmF0b3ItPnZh
bHVlLT52YWx1ZTsKICAgICAgICAgcHJlc2VudGF0aW9uQXR0cmlidXRlQ2FjaGVDbGVhbmVyKCku
ZGlkSGl0UHJlc2VudGF0aW9uQXR0cmlidXRlQ2FjaGUoKTsKICAgICB9IGVsc2UgewogICAgICAg
ICBzdHlsZSA9IFN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZShpc1NWR0VsZW1lbnQoKSA/IFNWR0F0
dHJpYnV0ZU1vZGUgOiBDU1NRdWlya3NNb2RlKTsKQEAgLTI5OCw3ICsyOTgsNyBAQCB2b2lkIFN0
eWxlZEVsZW1lbnQ6OnVwZGF0ZUF0dHJpYnV0ZVN0eWxlKCkKIAogICAgIGF0dHJpYnV0ZURhdGEo
KS0+c2V0QXR0cmlidXRlU3R5bGUoc3R5bGUtPmlzRW1wdHkoKSA/IDAgOiBzdHlsZSk7CiAKLSAg
ICBpZiAoIWNhY2hlSGFzaCB8fCBjYWNoZUl0ZXJhdG9yLT5zZWNvbmQpCisgICAgaWYgKCFjYWNo
ZUhhc2ggfHwgY2FjaGVJdGVyYXRvci0+dmFsdWUpCiAgICAgICAgIHJldHVybjsKIAogICAgIE93
blB0cjxQcmVzZW50YXRpb25BdHRyaWJ1dGVDYWNoZUVudHJ5PiBuZXdFbnRyeSA9IGFkb3B0UHRy
KG5ldyBQcmVzZW50YXRpb25BdHRyaWJ1dGVDYWNoZUVudHJ5KTsKQEAgLTMxMSw3ICszMTEsNyBA
QCB2b2lkIFN0eWxlZEVsZW1lbnQ6OnVwZGF0ZUF0dHJpYnV0ZVN0eWxlKCkKICAgICAgICAgcHJl
c2VudGF0aW9uQXR0cmlidXRlQ2FjaGUoKS5jbGVhcigpOwogICAgICAgICBwcmVzZW50YXRpb25B
dHRyaWJ1dGVDYWNoZSgpLnNldChjYWNoZUhhc2gsIG5ld0VudHJ5LnJlbGVhc2UoKSk7CiAgICAg
fSBlbHNlCi0gICAgICAgIGNhY2hlSXRlcmF0b3ItPnNlY29uZCA9IG5ld0VudHJ5LnJlbGVhc2Uo
KTsKKyAgICAgICAgY2FjaGVJdGVyYXRvci0+dmFsdWUgPSBuZXdFbnRyeS5yZWxlYXNlKCk7CiB9
CiAKIHZvaWQgU3R5bGVkRWxlbWVudDo6YWRkUHJvcGVydHlUb0F0dHJpYnV0ZVN0eWxlKFN0eWxl
UHJvcGVydHlTZXQqIHN0eWxlLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGludCBpZGVudGlm
aWVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvQWx0ZXJuYXRpdmVU
ZXh0VUlDb250cm9sbGVyLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvQWx0ZXJuYXRp
dmVUZXh0VUlDb250cm9sbGVyLm1tCmluZGV4IDk5OTE2YzFlMDBmNDQ5MjJhYTdlYmM2Y2ZiMDBm
YzQ5NzY4ZDQ0M2IuLjZjYTVkNWYwMjljOTkxNjkzM2I4Mjg5ZDE0NWYwZDEyMWM2ZDU2NDYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0FsdGVybmF0aXZlVGV4dFVJQ29u
dHJvbGxlci5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9BbHRlcm5hdGl2ZVRl
eHRVSUNvbnRyb2xsZXIubW0KQEAgLTUwLDcgKzUwLDcgQEAgTlNUZXh0QWx0ZXJuYXRpdmVzKiBB
bHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xsZXI6OkFsZXJuYXRpdmVUZXh0Q29udGV4dENvbnRyb2xs
ZXIKICAgICBIYXNoTWFwVHlwZTo6Y29uc3RfaXRlcmF0b3IgaXRyID0gbV9hbHRlcm5hdGl2ZXNP
YmplY3RNYXAuZmluZChjb250ZXh0KTsKICAgICBpZiAoaXRyID09IG1fYWx0ZXJuYXRpdmVzT2Jq
ZWN0TWFwLmVuZCgpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICByZXR1cm4gaXRyLT5zZWNv
bmQuZ2V0KCk7CisgICAgcmV0dXJuIGl0ci0+dmFsdWUuZ2V0KCk7CiB9CiAKIHZvaWQgQWx0ZXJu
YXRpdmVUZXh0VUlDb250cm9sbGVyOjpBbGVybmF0aXZlVGV4dENvbnRleHRDb250cm9sbGVyOjpy
ZW1vdmVBbHRlcm5hdGl2ZXNGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHQpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0Zvcm1Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvRm9ybUNvbnRyb2xsZXIuY3BwCmluZGV4IGUzNWVmZjE5ZTE5YmE5YzVlNWQxNWM4MDJi
NmJiOWZlNDU0MWE0NmEuLjBhMDhjMWVjYTdjNTI4N2M0ODU3YmI3NDU0ZTQzMTUwZmNjMmMwNWMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUNvbnRyb2xsZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUNvbnRyb2xsZXIuY3BwCkBAIC0yMjgsOCArMjI4LDgg
QEAgdm9pZCBTYXZlZEZvcm1TdGF0ZTo6c2VyaWFsaXplVG8oVmVjdG9yPFN0cmluZz4mIHN0YXRl
VmVjdG9yKSBjb25zdAogewogICAgIHN0YXRlVmVjdG9yLmFwcGVuZChTdHJpbmc6Om51bWJlciht
X2NvbnRyb2xTdGF0ZUNvdW50KSk7CiAgICAgZm9yIChGb3JtRWxlbWVudFN0YXRlTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IG1fc3RhdGVGb3JOZXdGb3JtRWxlbWVudHMuYmVnaW4oKTsgaXQgIT0g
bV9zdGF0ZUZvck5ld0Zvcm1FbGVtZW50cy5lbmQoKTsgKytpdCkgewotICAgICAgICBjb25zdCBG
b3JtRWxlbWVudEtleSYga2V5ID0gaXQtPmZpcnN0OwotICAgICAgICBjb25zdCBEZXF1ZTxGb3Jt
Q29udHJvbFN0YXRlPiYgcXVldWUgPSBpdC0+c2Vjb25kOworICAgICAgICBjb25zdCBGb3JtRWxl
bWVudEtleSYga2V5ID0gaXQtPmtleTsKKyAgICAgICAgY29uc3QgRGVxdWU8Rm9ybUNvbnRyb2xT
dGF0ZT4mIHF1ZXVlID0gaXQtPnZhbHVlOwogICAgICAgICBmb3IgKERlcXVlPEZvcm1Db250cm9s
U3RhdGU+Ojpjb25zdF9pdGVyYXRvciBxdWVJdGVyYXRvciA9IHF1ZXVlLmJlZ2luKCk7IHF1ZUl0
ZXJhdG9yICE9IHF1ZXVlLmVuZCgpOyArK3F1ZUl0ZXJhdG9yKSB7CiAgICAgICAgICAgICBzdGF0
ZVZlY3Rvci5hcHBlbmQoa2V5Lm5hbWUoKSk7CiAgICAgICAgICAgICBzdGF0ZVZlY3Rvci5hcHBl
bmQoa2V5LnR5cGUoKSk7CkBAIC0yNDMsNyArMjQzLDcgQEAgdm9pZCBTYXZlZEZvcm1TdGF0ZTo6
YXBwZW5kQ29udHJvbFN0YXRlKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgY29uc3QgQXRvbWlj
U3QKICAgICBGb3JtRWxlbWVudEtleSBrZXkobmFtZS5pbXBsKCksIHR5cGUuaW1wbCgpKTsKICAg
ICBGb3JtRWxlbWVudFN0YXRlTWFwOjppdGVyYXRvciBpdCA9IG1fc3RhdGVGb3JOZXdGb3JtRWxl
bWVudHMuZmluZChrZXkpOwogICAgIGlmIChpdCAhPSBtX3N0YXRlRm9yTmV3Rm9ybUVsZW1lbnRz
LmVuZCgpKQotICAgICAgICBpdC0+c2Vjb25kLmFwcGVuZChzdGF0ZSk7CisgICAgICAgIGl0LT52
YWx1ZS5hcHBlbmQoc3RhdGUpOwogICAgIGVsc2UgewogICAgICAgICBEZXF1ZTxGb3JtQ29udHJv
bFN0YXRlPiBzdGF0ZUxpc3Q7CiAgICAgICAgIHN0YXRlTGlzdC5hcHBlbmQoc3RhdGUpOwpAQCAt
MjU5LDEwICsyNTksMTAgQEAgRm9ybUNvbnRyb2xTdGF0ZSBTYXZlZEZvcm1TdGF0ZTo6dGFrZUNv
bnRyb2xTdGF0ZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGNvbnMKICAgICBGb3JtRWxlbWVu
dFN0YXRlTWFwOjppdGVyYXRvciBpdCA9IG1fc3RhdGVGb3JOZXdGb3JtRWxlbWVudHMuZmluZChG
b3JtRWxlbWVudEtleShuYW1lLmltcGwoKSwgdHlwZS5pbXBsKCkpKTsKICAgICBpZiAoaXQgPT0g
bV9zdGF0ZUZvck5ld0Zvcm1FbGVtZW50cy5lbmQoKSkKICAgICAgICAgcmV0dXJuIEZvcm1Db250
cm9sU3RhdGUoKTsKLSAgICBBU1NFUlQoaXQtPnNlY29uZC5zaXplKCkpOwotICAgIEZvcm1Db250
cm9sU3RhdGUgc3RhdGUgPSBpdC0+c2Vjb25kLnRha2VGaXJzdCgpOworICAgIEFTU0VSVChpdC0+
dmFsdWUuc2l6ZSgpKTsKKyAgICBGb3JtQ29udHJvbFN0YXRlIHN0YXRlID0gaXQtPnZhbHVlLnRh
a2VGaXJzdCgpOwogICAgIG1fY29udHJvbFN0YXRlQ291bnQtLTsKLSAgICBpZiAoIWl0LT5zZWNv
bmQuc2l6ZSgpKQorICAgIGlmICghaXQtPnZhbHVlLnNpemUoKSkKICAgICAgICAgbV9zdGF0ZUZv
ck5ld0Zvcm1FbGVtZW50cy5yZW1vdmUoaXQpOwogICAgIHJldHVybiBzdGF0ZTsKIH0KQEAgLTI3
MSwxMCArMjcxLDEwIEBAIFZlY3RvcjxTdHJpbmc+IFNhdmVkRm9ybVN0YXRlOjpnZXRSZWZlcmVu
Y2VkRmlsZVBhdGhzKCkgY29uc3QKIHsKICAgICBWZWN0b3I8U3RyaW5nPiB0b1JldHVybjsKICAg
ICBmb3IgKEZvcm1FbGVtZW50U3RhdGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zdGF0ZUZv
ck5ld0Zvcm1FbGVtZW50cy5iZWdpbigpOyBpdCAhPSBtX3N0YXRlRm9yTmV3Rm9ybUVsZW1lbnRz
LmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IEZvcm1FbGVtZW50S2V5JiBrZXkgPSBpdC0+
Zmlyc3Q7CisgICAgICAgIGNvbnN0IEZvcm1FbGVtZW50S2V5JiBrZXkgPSBpdC0+a2V5OwogICAg
ICAgICBpZiAoQXRvbWljU3RyaW5nKGtleS50eXBlKCkpICE9IEF0b21pY1N0cmluZygiZmlsZSIp
KQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGNvbnN0IERlcXVlPEZvcm1Db250cm9s
U3RhdGU+JiBxdWV1ZSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIGNvbnN0IERlcXVlPEZvcm1Db250
cm9sU3RhdGU+JiBxdWV1ZSA9IGl0LT52YWx1ZTsKICAgICAgICAgZm9yIChEZXF1ZTxGb3JtQ29u
dHJvbFN0YXRlPjo6Y29uc3RfaXRlcmF0b3IgcXVlSXRlcmF0b3IgPSBxdWV1ZS5iZWdpbigpOyBx
dWVJdGVyYXRvciAhPSBxdWV1ZS5lbmQoKTsgKytxdWVJdGVyYXRvcikgewogICAgICAgICAgICAg
Y29uc3QgVmVjdG9yPEZpbGVDaG9vc2VyRmlsZUluZm8+JiBzZWxlY3RlZEZpbGVzID0gSFRNTElu
cHV0RWxlbWVudDo6ZmlsZXNGcm9tRmlsZUlucHV0Rm9ybUNvbnRyb2xTdGF0ZSgqcXVlSXRlcmF0
b3IpOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzZWxlY3RlZEZpbGVzLnNp
emUoKTsgKytpKQpAQCAtMzQ5LDEyICszNDksMTIgQEAgQXRvbWljU3RyaW5nIEZvcm1LZXlHZW5l
cmF0b3I6OmZvcm1LZXkoY29uc3QgSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZSYgY28K
ICAgICB9CiAgICAgRm9ybVRvS2V5TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fZm9ybVRvS2V5
TWFwLmZpbmQoZm9ybSk7CiAgICAgaWYgKGl0ICE9IG1fZm9ybVRvS2V5TWFwLmVuZCgpKQotICAg
ICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKIAogICAg
IFN0cmluZyBzaWduYXR1cmUgPSBmb3JtU2lnbmF0dXJlKCpmb3JtKTsKICAgICBBU1NFUlQoIXNp
Z25hdHVyZS5pc051bGwoKSk7CiAgICAgRm9ybVNpZ25hdHVyZVRvTmV4dEluZGV4TWFwOjpBZGRS
ZXN1bHQgcmVzdWx0ID0gbV9mb3JtU2lnbmF0dXJlVG9OZXh0SW5kZXhNYXAuYWRkKHNpZ25hdHVy
ZSwgMCk7Ci0gICAgdW5zaWduZWQgbmV4dEluZGV4ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQr
KzsKKyAgICB1bnNpZ25lZCBuZXh0SW5kZXggPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlKys7CiAK
ICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CiAgICAgYnVpbGRlci5hcHBlbmQoc2lnbmF0dXJl
KTsKQEAgLTQwNSw4ICs0MDUsOCBAQCBQYXNzT3duUHRyPEZvcm1Db250cm9sbGVyOjpTYXZlZEZv
cm1TdGF0ZU1hcD4gRm9ybUNvbnRyb2xsZXI6OmNyZWF0ZVNhdmVkRm9ybVN0YQogICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgIFNhdmVkRm9ybVN0YXRlTWFwOjpBZGRSZXN1bHQgcmVzdWx0
ID0gc3RhdGVNYXAtPmFkZChrZXlHZW5lcmF0b3ItPmZvcm1LZXkoKmNvbnRyb2wpLmltcGwoKSwg
bnVsbHB0cik7CiAgICAgICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgIHJl
c3VsdC5pdGVyYXRvci0+c2Vjb25kID0gU2F2ZWRGb3JtU3RhdGU6OmNyZWF0ZSgpOwotICAgICAg
ICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZC0+YXBwZW5kQ29udHJvbFN0YXRlKGNvbnRyb2wtPm5h
bWUoKSwgY29udHJvbC0+dHlwZSgpLCBjb250cm9sLT5zYXZlRm9ybUNvbnRyb2xTdGF0ZSgpKTsK
KyAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBTYXZlZEZvcm1TdGF0ZTo6Y3Jl
YXRlKCk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPmFwcGVuZENvbnRyb2xTdGF0
ZShjb250cm9sLT5uYW1lKCksIGNvbnRyb2wtPnR5cGUoKSwgY29udHJvbC0+c2F2ZUZvcm1Db250
cm9sU3RhdGUoKSk7CiAgICAgfQogICAgIHJldHVybiBzdGF0ZU1hcC5yZWxlYXNlKCk7CiB9CkBA
IC00MTgsOCArNDE4LDggQEAgVmVjdG9yPFN0cmluZz4gRm9ybUNvbnRyb2xsZXI6OmZvcm1FbGVt
ZW50c1N0YXRlKCkgY29uc3QKICAgICBzdGF0ZVZlY3Rvci5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KG1fZm9ybUVsZW1lbnRzV2l0aFN0YXRlLnNpemUoKSAqIDQpOwogICAgIHN0YXRlVmVjdG9yLmFw
cGVuZChmb3JtU3RhdGVTaWduYXR1cmUoKSk7CiAgICAgZm9yIChTYXZlZEZvcm1TdGF0ZU1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBzdGF0ZU1hcC0+YmVnaW4oKTsgaXQgIT0gc3RhdGVNYXAtPmVu
ZCgpOyArK2l0KSB7Ci0gICAgICAgIHN0YXRlVmVjdG9yLmFwcGVuZChpdC0+Zmlyc3QuZ2V0KCkp
OwotICAgICAgICBpdC0+c2Vjb25kLT5zZXJpYWxpemVUbyhzdGF0ZVZlY3Rvcik7CisgICAgICAg
IHN0YXRlVmVjdG9yLmFwcGVuZChpdC0+a2V5LmdldCgpKTsKKyAgICAgICAgaXQtPnZhbHVlLT5z
ZXJpYWxpemVUbyhzdGF0ZVZlY3Rvcik7CiAgICAgfQogICAgIGJvb2wgaGFzT25seVNpZ25hdHVy
ZSA9IHN0YXRlVmVjdG9yLnNpemUoKSA9PSAxOwogICAgIGlmIChoYXNPbmx5U2lnbmF0dXJlKQpA
QCAtNDQxLDggKzQ0MSw4IEBAIEZvcm1Db250cm9sU3RhdGUgRm9ybUNvbnRyb2xsZXI6OnRha2VT
dGF0ZUZvckZvcm1FbGVtZW50KGNvbnN0IEhUTUxGb3JtQ29udHJvbEVsCiAgICAgU2F2ZWRGb3Jt
U3RhdGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zYXZlZEZvcm1TdGF0ZU1hcC5maW5kKG1fZm9ybUtl
eUdlbmVyYXRvci0+Zm9ybUtleShjb250cm9sKS5pbXBsKCkpOwogICAgIGlmIChpdCA9PSBtX3Nh
dmVkRm9ybVN0YXRlTWFwLmVuZCgpKQogICAgICAgICByZXR1cm4gRm9ybUNvbnRyb2xTdGF0ZSgp
OwotICAgIEZvcm1Db250cm9sU3RhdGUgc3RhdGUgPSBpdC0+c2Vjb25kLT50YWtlQ29udHJvbFN0
YXRlKGNvbnRyb2wubmFtZSgpLCBjb250cm9sLnR5cGUoKSk7Ci0gICAgaWYgKGl0LT5zZWNvbmQt
PmlzRW1wdHkoKSkKKyAgICBGb3JtQ29udHJvbFN0YXRlIHN0YXRlID0gaXQtPnZhbHVlLT50YWtl
Q29udHJvbFN0YXRlKGNvbnRyb2wubmFtZSgpLCBjb250cm9sLnR5cGUoKSk7CisgICAgaWYgKGl0
LT52YWx1ZS0+aXNFbXB0eSgpKQogICAgICAgICBtX3NhdmVkRm9ybVN0YXRlTWFwLnJlbW92ZShp
dCk7CiAgICAgcmV0dXJuIHN0YXRlOwogfQpAQCAtNTExLDcgKzUxMSw3IEBAIFZlY3RvcjxTdHJp
bmc+IEZvcm1Db250cm9sbGVyOjpnZXRSZWZlcmVuY2VkRmlsZVBhdGhzKGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBzdGF0CiAgICAgU2F2ZWRGb3JtU3RhdGVNYXAgbWFwOwogICAgIGZvcm1TdGF0ZXNG
cm9tU3RhdGVWZWN0b3Ioc3RhdGVWZWN0b3IsIG1hcCk7CiAgICAgZm9yIChTYXZlZEZvcm1TdGF0
ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAuYmVnaW4oKTsgaXQgIT0gbWFwLmVuZCgpOyAr
K2l0KQotICAgICAgICB0b1JldHVybi5hcHBlbmQoaXQtPnNlY29uZC0+Z2V0UmVmZXJlbmNlZEZp
bGVQYXRocygpKTsKKyAgICAgICAgdG9SZXR1cm4uYXBwZW5kKGl0LT52YWx1ZS0+Z2V0UmVmZXJl
bmNlZEZpbGVQYXRocygpKTsKICAgICByZXR1cm4gdG9SZXR1cm47CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENvbGxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MQ29sbGVjdGlvbi5jcHAKaW5kZXggOTFlMThhM2ZiZGYyZDg3YTZlMDc5NGU3Y2Iy
YjcxYjY0ZjhhYjljNS4uMWVjYjY0NGNhMWI2MzA4MDdhZDY2YTk3NDRlM2RmMzMxNGZlYWY0NiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5jcHAKQEAgLTU1OSw3ICs1NTksNyBA
QCBQYXNzUmVmUHRyPE5vZGVMaXN0PiBIVE1MQ29sbGVjdGlvbjo6dGFncyhjb25zdCBTdHJpbmcm
IG5hbWUpCiAKIHZvaWQgSFRNTENvbGxlY3Rpb25DYWNoZUJhc2U6OmFwcGVuZChOb2RlQ2FjaGVN
YXAmIG1hcCwgY29uc3QgQXRvbWljU3RyaW5nJiBrZXksIEVsZW1lbnQqIGVsZW1lbnQpCiB7Ci0g
ICAgT3duUHRyPFZlY3RvcjxFbGVtZW50Kj4gPiYgdmVjdG9yID0gbWFwLmFkZChrZXkuaW1wbCgp
LCBudWxscHRyKS5pdGVyYXRvci0+c2Vjb25kOworICAgIE93blB0cjxWZWN0b3I8RWxlbWVudCo+
ID4mIHZlY3RvciA9IG1hcC5hZGQoa2V5LmltcGwoKSwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVl
OwogICAgIGlmICghdmVjdG9yKQogICAgICAgICB2ZWN0b3IgPSBhZG9wdFB0cihuZXcgVmVjdG9y
PEVsZW1lbnQqPik7CiAgICAgdmVjdG9yLT5hcHBlbmQoZWxlbWVudCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwCmluZGV4IGI5MWFlNTA2ZWNm
NzllM2Q2MmZlMTdlNDM3Nzk5M2ZkM2MxNDZjMWQuLmQwODFlMjQ5MDVhMGFkNTllNzRlNWRjMDVj
NzQ1MTA4NmE2ODRmNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMRnJhbWVidWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
RnJhbWVidWZmZXIuY3BwCkBAIC0zMjcsNyArMzI3LDcgQEAgV2ViR0xTaGFyZWRPYmplY3QqIFdl
YkdMRnJhbWVidWZmZXI6OmdldEF0dGFjaG1lbnRPYmplY3QoR0MzRGVudW0gYXR0YWNobWVudCkg
Y28KIFdlYkdMRnJhbWVidWZmZXI6OldlYkdMQXR0YWNobWVudCogV2ViR0xGcmFtZWJ1ZmZlcjo6
Z2V0QXR0YWNobWVudChHQzNEZW51bSBhdHRhY2htZW50KSBjb25zdAogewogICAgIGNvbnN0IEF0
dGFjaG1lbnRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9hdHRhY2htZW50cy5maW5kKGF0dGFj
aG1lbnQpOwotICAgIHJldHVybiAoaXQgIT0gbV9hdHRhY2htZW50cy5lbmQoKSkgPyBpdC0+c2Vj
b25kLmdldCgpIDogMDsKKyAgICByZXR1cm4gKGl0ICE9IG1fYXR0YWNobWVudHMuZW5kKCkpID8g
aXQtPnZhbHVlLmdldCgpIDogMDsKIH0KIAogdm9pZCBXZWJHTEZyYW1lYnVmZmVyOjpyZW1vdmVB
dHRhY2htZW50RnJvbUJvdW5kRnJhbWVidWZmZXIoR0MzRGVudW0gYXR0YWNobWVudCkKQEAgLTM2
Nyw5ICszNjcsOSBAQCB2b2lkIFdlYkdMRnJhbWVidWZmZXI6OnJlbW92ZUF0dGFjaG1lbnRGcm9t
Qm91bmRGcmFtZWJ1ZmZlcihXZWJHTFNoYXJlZE9iamVjdCogYQogICAgIHdoaWxlIChjaGVja01v
cmUpIHsKICAgICAgICAgY2hlY2tNb3JlID0gZmFsc2U7CiAgICAgICAgIGZvciAoQXR0YWNobWVu
dE1hcDo6aXRlcmF0b3IgaXQgPSBtX2F0dGFjaG1lbnRzLmJlZ2luKCk7IGl0ICE9IG1fYXR0YWNo
bWVudHMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgICAgIFdlYkdMQXR0YWNobWVudCogYXR0YWNo
bWVudE9iamVjdCA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBXZWJHTEF0dGFjaG1l
bnQqIGF0dGFjaG1lbnRPYmplY3QgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBpZiAo
YXR0YWNobWVudE9iamVjdC0+aXNTaGFyZWRPYmplY3QoYXR0YWNobWVudCkpIHsKLSAgICAgICAg
ICAgICAgICBHQzNEZW51bSBhdHRhY2htZW50VHlwZSA9IGl0LT5maXJzdDsKKyAgICAgICAgICAg
ICAgICBHQzNEZW51bSBhdHRhY2htZW50VHlwZSA9IGl0LT5rZXk7CiAgICAgICAgICAgICAgICAg
YXR0YWNobWVudE9iamVjdC0+dW5hdHRhY2goY29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgp
LCBhdHRhY2htZW50VHlwZSk7CiAgICAgICAgICAgICAgICAgcmVtb3ZlQXR0YWNobWVudEZyb21C
b3VuZEZyYW1lYnVmZmVyKGF0dGFjaG1lbnRUeXBlKTsKICAgICAgICAgICAgICAgICBjaGVja01v
cmUgPSB0cnVlOwpAQCAtNDE5LDggKzQxOSw4IEBAIEdDM0RlbnVtIFdlYkdMRnJhbWVidWZmZXI6
OmNoZWNrU3RhdHVzKGNvbnN0IGNoYXIqKiByZWFzb24pIGNvbnN0CiAgICAgYm9vbCBoYXZlU3Rl
bmNpbCA9IGZhbHNlOwogICAgIGJvb2wgaGF2ZURlcHRoU3RlbmNpbCA9IGZhbHNlOwogICAgIGZv
ciAoQXR0YWNobWVudE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2F0dGFjaG1lbnRzLmJlZ2lu
KCk7IGl0ICE9IG1fYXR0YWNobWVudHMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgV2ViR0xBdHRh
Y2htZW50KiBhdHRhY2htZW50ID0gaXQtPnNlY29uZC5nZXQoKTsKLSAgICAgICAgaWYgKCFpc0F0
dGFjaG1lbnRDb21wbGV0ZShhdHRhY2htZW50LCBpdC0+Zmlyc3QsIHJlYXNvbikpCisgICAgICAg
IFdlYkdMQXR0YWNobWVudCogYXR0YWNobWVudCA9IGl0LT52YWx1ZS5nZXQoKTsKKyAgICAgICAg
aWYgKCFpc0F0dGFjaG1lbnRDb21wbGV0ZShhdHRhY2htZW50LCBpdC0+a2V5LCByZWFzb24pKQog
ICAgICAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9JTkNPTVBM
RVRFX0FUVEFDSE1FTlQ7CiAgICAgICAgIGlmICghYXR0YWNobWVudC0+aXNWYWxpZCgpKSB7CiAg
ICAgICAgICAgICAqcmVhc29uID0gImF0dGFjaG1lbnQgaXMgbm90IHZhbGlkIjsKQEAgLTQzMCw3
ICs0MzAsNyBAQCBHQzNEZW51bSBXZWJHTEZyYW1lYnVmZmVyOjpjaGVja1N0YXR1cyhjb25zdCBj
aGFyKiogcmVhc29uKSBjb25zdAogICAgICAgICAgICAgKnJlYXNvbiA9ICJhdHRhY2htZW50IGlz
IGFuIHVuc3VwcG9ydGVkIGZvcm1hdCI7CiAgICAgICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKICAgICAgICAgfQotICAg
ICAgICBzd2l0Y2ggKGl0LT5maXJzdCkgeworICAgICAgICBzd2l0Y2ggKGl0LT5rZXkpIHsKICAg
ICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVDoKICAgICAgICAg
ICAgIGhhdmVEZXB0aCA9IHRydWU7CiAgICAgICAgICAgICBicmVhazsKQEAgLTQ4OCw3ICs0ODgs
NyBAQCBib29sIFdlYkdMRnJhbWVidWZmZXI6Omhhc1N0ZW5jaWxCdWZmZXIoKSBjb25zdAogdm9p
ZCBXZWJHTEZyYW1lYnVmZmVyOjpkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dDNEKiBj
b250ZXh0M2QsIFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0KQogewogICAgIGZvciAoQXR0YWNobWVu
dE1hcDo6aXRlcmF0b3IgaXQgPSBtX2F0dGFjaG1lbnRzLmJlZ2luKCk7IGl0ICE9IG1fYXR0YWNo
bWVudHMuZW5kKCk7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPm9uRGV0YWNoZWQoY29udGV4
dDNkKTsKKyAgICAgICAgaXQtPnZhbHVlLT5vbkRldGFjaGVkKGNvbnRleHQzZCk7CiAKICAgICBj
b250ZXh0M2QtPmRlbGV0ZUZyYW1lYnVmZmVyKG9iamVjdCk7CiB9CkBAIC00OTksOCArNDk5LDgg
QEAgYm9vbCBXZWJHTEZyYW1lYnVmZmVyOjppbml0aWFsaXplQXR0YWNobWVudHMoR3JhcGhpY3ND
b250ZXh0M0QqIGczZCwgY29uc3QgY2hhcioKICAgICBHQzNEYml0ZmllbGQgbWFzayA9IDA7CiAK
ICAgICBmb3IgKEF0dGFjaG1lbnRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9hdHRhY2htZW50cy5iZWdp
bigpOyBpdCAhPSBtX2F0dGFjaG1lbnRzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIEdDM0RlbnVt
IGF0dGFjaG1lbnRUeXBlID0gaXQtPmZpcnN0OwotICAgICAgICBXZWJHTEF0dGFjaG1lbnQqIGF0
dGFjaG1lbnQgPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICBHQzNEZW51bSBhdHRhY2htZW50
VHlwZSA9IGl0LT5rZXk7CisgICAgICAgIFdlYkdMQXR0YWNobWVudCogYXR0YWNobWVudCA9IGl0
LT52YWx1ZS5nZXQoKTsKICAgICAgICAgaWYgKCFhdHRhY2htZW50LT5pc0luaXRpYWxpemVkKCkp
CiAgICAgICAgICAgIG1hc2sgfD0gR3JhcGhpY3NDb250ZXh0M0Q6OmdldENsZWFyQml0c0J5QXR0
YWNobWVudFR5cGUoYXR0YWNobWVudFR5cGUpOwogICAgIH0KQEAgLTU3MSw4ICs1NzEsOCBAQCBi
b29sIFdlYkdMRnJhbWVidWZmZXI6OmluaXRpYWxpemVBdHRhY2htZW50cyhHcmFwaGljc0NvbnRl
eHQzRCogZzNkLCBjb25zdCBjaGFyKgogICAgICAgICBnM2QtPmRpc2FibGUoR3JhcGhpY3NDb250
ZXh0M0Q6OkRJVEhFUik7CiAKICAgICBmb3IgKEF0dGFjaG1lbnRNYXA6Oml0ZXJhdG9yIGl0ID0g
bV9hdHRhY2htZW50cy5iZWdpbigpOyBpdCAhPSBtX2F0dGFjaG1lbnRzLmVuZCgpOyArK2l0KSB7
Ci0gICAgICAgIEdDM0RlbnVtIGF0dGFjaG1lbnRUeXBlID0gaXQtPmZpcnN0OwotICAgICAgICBX
ZWJHTEF0dGFjaG1lbnQqIGF0dGFjaG1lbnQgPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICBH
QzNEZW51bSBhdHRhY2htZW50VHlwZSA9IGl0LT5rZXk7CisgICAgICAgIFdlYkdMQXR0YWNobWVu
dCogYXR0YWNobWVudCA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgR0MzRGJpdGZpZWxkIGJp
dHMgPSBHcmFwaGljc0NvbnRleHQzRDo6Z2V0Q2xlYXJCaXRzQnlBdHRhY2htZW50VHlwZShhdHRh
Y2htZW50VHlwZSk7CiAgICAgICAgIGlmIChiaXRzICYgbWFzaykKICAgICAgICAgICAgIGF0dGFj
aG1lbnQtPnNldEluaXRpYWxpemVkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weSBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CmluZGV4IDg1MjIyNTM4YjRkM2Q3ZTk2ZmQzY2U5
ZTNiZDBjOTFhZjMxOThjNzguLmY0NzA4ZmMzODdkY2U0ZWQyNDZmNmVhYTQyODBlOWE4OWUyNjVl
MTEgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5z
cGVjdG9yLnB5CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5z
cGVjdG9yLnB5CkBAIC0xMzE3LDcgKzEzMTcsNyBAQCBjbGFzcyBUeXBlQmluZGluZ3M6CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXds
aW5lKCIgICAgICAgIEluc3BlY3Rvck9iamVjdDo6aXRlcmF0b3IgJXM7XG4iICUgaXRfbmFtZSkK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVy
Lm5ld2xpbmUoIiAgICAgICAgJXMgPSBvYmplY3QtPmZpbmQoXCIlc1wiKTtcbiIgJSAoaXRfbmFt
ZSwgcHJvcF9kYXRhLnBbIm5hbWUiXSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgICAgIEFTU0VSVCglcyAhPSBv
YmplY3QtPmVuZCgpKTtcbiIgJSBpdF9uYW1lKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgICAgICAlcyglcy0+c2Vj
b25kLmdldCgpKTtcbiIgJSAocHJvcF9kYXRhLnBhcmFtX3R5cGVfYmluZGluZy5nZXRfdmFsaWRh
dG9yX2NhbGxfdGV4dCgpLCBpdF9uYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgJXMoJXMtPnZhbHVl
LmdldCgpKTtcbiIgJSAocHJvcF9kYXRhLnBhcmFtX3R5cGVfYmluZGluZy5nZXRfdmFsaWRhdG9y
X2NhbGxfdGV4dCgpLCBpdF9uYW1lKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICB9XG4iKQogCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBjbG9zZWRfZmllbGRfc2V0OgpAQCAtMTMyOSw3
ICsxMzI5LDcgQEAgY2xhc3MgVHlwZUJpbmRpbmdzOgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgICAgICBJbnNwZWN0
b3JPYmplY3Q6Oml0ZXJhdG9yICVzO1xuIiAlIGl0X25hbWUpCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgICAgICVz
ID0gb2JqZWN0LT5maW5kKFwiJXNcIik7XG4iICUgKGl0X25hbWUsIHByb3BfZGF0YS5wWyJuYW1l
Il0pKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93
cml0ZXIubmV3bGluZSgiICAgICAgICBpZiAoJXMgIT0gb2JqZWN0LT5lbmQoKSkge1xuIiAlIGl0
X25hbWUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9y
X3dyaXRlci5uZXdsaW5lKCIgICAgICAgICAgICAlcyglcy0+c2Vjb25kLmdldCgpKTtcbiIgJSAo
cHJvcF9kYXRhLnBhcmFtX3R5cGVfYmluZGluZy5nZXRfdmFsaWRhdG9yX2NhbGxfdGV4dCgpLCBp
dF9uYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0
b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgICAgICVzKCVzLT52YWx1ZS5nZXQoKSk7XG4iICUg
KHByb3BfZGF0YS5wYXJhbV90eXBlX2JpbmRpbmcuZ2V0X3ZhbGlkYXRvcl9jYWxsX3RleHQoKSwg
aXRfbmFtZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgY2xv
c2VkX2ZpZWxkX3NldDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgICAgICAgICArK2ZvdW5kUHJvcGVydGll
c0NvdW50O1xuIikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxp
ZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgfVxuIikKQEAgLTIwMDcsNyArMjAwNyw3IEBA
ICRtZXNzYWdlSGFuZGxlcnMKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgICgoKnRoaXMp
LippdC0+c2Vjb25kKShjYWxsSWQsIG1lc3NhZ2VPYmplY3QuZ2V0KCkpOworICAgICgoKnRoaXMp
LippdC0+dmFsdWUpKGNhbGxJZCwgbWVzc2FnZU9iamVjdC5nZXQoKSk7CiB9CiAKIHZvaWQgSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpzZW5kUmVzcG9uc2UobG9uZyBjYWxsSWQsIFBh
c3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQsIGNvbnN0IGNoYXIqIGNvbW1hbmROYW1l
LCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycywgRXJyb3JTdHJpbmcg
aW52b2NhdGlvbkVycm9yKQpAQCAtMjA5MSw3ICsyMDkxLDcgQEAgUiBJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlckltcGw6OmdldFByb3BlcnR5VmFsdWVJbXBsKEluc3BlY3Rvck9iamVjdCogb2Jq
ZWN0LAogICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgfQogCi0gICAgaWYgKCFhc19tZXRob2Qo
dmFsdWVJdGVyYXRvci0+c2Vjb25kLmdldCgpLCAmdmFsdWUpKQorICAgIGlmICghYXNfbWV0aG9k
KHZhbHVlSXRlcmF0b3ItPnZhbHVlLmdldCgpLCAmdmFsdWUpKQogICAgICAgICBwcm90b2NvbEVy
cm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiUGFyYW1ldGVyICclcycgaGFzIHdyb25n
IHR5cGUuIEl0IG11c3QgYmUgJyVzJy4iLCBuYW1lLnV0ZjgoKS5kYXRhKCksIHR5cGVfbmFtZSkp
OwogICAgIGVsc2UKICAgICAgICAgaWYgKHZhbHVlRm91bmQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9ET01QYXRjaFN1cHBvcnQuY3BwCmluZGV4IGMwM2RjZTQ3MTRkZjEyY2E1NWQ1OGVi
YWIyYjg5OWEyZGM3MTFjZTUuLjhlNmMxODAwZDM1MjgyNjRlNTMxMzRlZDhkYzYxYjgzZWY4OGI5
NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01QYXRjaFN1cHBvcnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01QYXRjaFN1cHBvcnQuY3BwCkBA
IC0yMzcsMjQgKzIzNywyNCBAQCBET01QYXRjaFN1cHBvcnQ6OmRpZmYoY29uc3QgVmVjdG9yPE93
blB0cjxEaWdlc3Q+ID4mIG9sZExpc3QsIGNvbnN0IFZlY3RvcjxPd25QdAogCiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBuZXdMaXN0LnNpemUoKTsgKytpKSB7CiAgICAgICAgIERpZmZUYWJs
ZTo6aXRlcmF0b3IgaXQgPSBuZXdUYWJsZS5hZGQobmV3TGlzdFtpXS0+bV9zaGExLCBWZWN0b3I8
c2l6ZV90PigpKS5pdGVyYXRvcjsKLSAgICAgICAgaXQtPnNlY29uZC5hcHBlbmQoaSk7CisgICAg
ICAgIGl0LT52YWx1ZS5hcHBlbmQoaSk7CiAgICAgfQogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBvbGRMaXN0LnNpemUoKTsgKytpKSB7CiAgICAgICAgIERpZmZUYWJsZTo6aXRlcmF0b3Ig
aXQgPSBvbGRUYWJsZS5hZGQob2xkTGlzdFtpXS0+bV9zaGExLCBWZWN0b3I8c2l6ZV90PigpKS5p
dGVyYXRvcjsKLSAgICAgICAgaXQtPnNlY29uZC5hcHBlbmQoaSk7CisgICAgICAgIGl0LT52YWx1
ZS5hcHBlbmQoaSk7CiAgICAgfQogCiAgICAgZm9yIChEaWZmVGFibGU6Oml0ZXJhdG9yIG5ld0l0
ID0gbmV3VGFibGUuYmVnaW4oKTsgbmV3SXQgIT0gbmV3VGFibGUuZW5kKCk7ICsrbmV3SXQpIHsK
LSAgICAgICAgaWYgKG5ld0l0LT5zZWNvbmQuc2l6ZSgpICE9IDEpCisgICAgICAgIGlmIChuZXdJ
dC0+dmFsdWUuc2l6ZSgpICE9IDEpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBE
aWZmVGFibGU6Oml0ZXJhdG9yIG9sZEl0ID0gb2xkVGFibGUuZmluZChuZXdJdC0+Zmlyc3QpOwot
ICAgICAgICBpZiAob2xkSXQgPT0gb2xkVGFibGUuZW5kKCkgfHwgb2xkSXQtPnNlY29uZC5zaXpl
KCkgIT0gMSkKKyAgICAgICAgRGlmZlRhYmxlOjppdGVyYXRvciBvbGRJdCA9IG9sZFRhYmxlLmZp
bmQobmV3SXQtPmtleSk7CisgICAgICAgIGlmIChvbGRJdCA9PSBvbGRUYWJsZS5lbmQoKSB8fCBv
bGRJdC0+dmFsdWUuc2l6ZSgpICE9IDEpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAg
ICBuZXdNYXBbbmV3SXQtPnNlY29uZFswXV0gPSBtYWtlX3BhaXIobmV3TGlzdFtuZXdJdC0+c2Vj
b25kWzBdXS5nZXQoKSwgb2xkSXQtPnNlY29uZFswXSk7Ci0gICAgICAgIG9sZE1hcFtvbGRJdC0+
c2Vjb25kWzBdXSA9IG1ha2VfcGFpcihvbGRMaXN0W29sZEl0LT5zZWNvbmRbMF1dLmdldCgpLCBu
ZXdJdC0+c2Vjb25kWzBdKTsKKyAgICAgICAgbmV3TWFwW25ld0l0LT52YWx1ZVswXV0gPSBtYWtl
X3BhaXIobmV3TGlzdFtuZXdJdC0+dmFsdWVbMF1dLmdldCgpLCBvbGRJdC0+dmFsdWVbMF0pOwor
ICAgICAgICBvbGRNYXBbb2xkSXQtPnZhbHVlWzBdXSA9IG1ha2VfcGFpcihvbGRMaXN0W29sZEl0
LT52YWx1ZVswXV0uZ2V0KCksIG5ld0l0LT52YWx1ZVswXSk7CiAgICAgfQogCiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IG5ld0xpc3Quc2l6ZSgpID4gMCAmJiBpIDwgbmV3TGlzdC5zaXplKCkgLSAx
OyArK2kpIHsKQEAgLTM2NCw3ICszNjQsNyBAQCBib29sIERPTVBhdGNoU3VwcG9ydDo6aW5uZXJQ
YXRjaENoaWxkcmVuKENvbnRhaW5lck5vZGUqIHBhcmVudE5vZGUsIGNvbnN0IFZlY3RvcgogCiAg
ICAgLy8gMi4gUGF0Y2ggbm9kZXMgbWFya2VkIGZvciBtZXJnZS4KICAgICBmb3IgKEhhc2hNYXA8
RGlnZXN0KiwgRGlnZXN0Kj46Oml0ZXJhdG9yIGl0ID0gbWVyZ2VzLmJlZ2luKCk7IGl0ICE9IG1l
cmdlcy5lbmQoKTsgKytpdCkgewotICAgICAgICBpZiAoIWlubmVyUGF0Y2hOb2RlKGl0LT5zZWNv
bmQsIGl0LT5maXJzdCwgZWMpKQorICAgICAgICBpZiAoIWlubmVyUGF0Y2hOb2RlKGl0LT52YWx1
ZSwgaXQtPmtleSwgZWMpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAt
NDYzLDcgKzQ2Myw3IEBAIGJvb2wgRE9NUGF0Y2hTdXBwb3J0OjpyZW1vdmVDaGlsZEFuZE1vdmVU
b05ldyhEaWdlc3QqIG9sZERpZ2VzdCwgRXhjZXB0aW9uQ29kZSYKICAgICAvLyBoaWdoIHRoYXQg
aXQgd2lsbCBnZXQgbWVyZ2VkIGJhY2sgaW50byB0aGUgb3JpZ2luYWwgRE9NIGR1cmluZyB0aGUg
ZnVydGhlciBwYXRjaGluZy4KICAgICBVbnVzZWROb2Rlc01hcDo6aXRlcmF0b3IgaXQgPSBtX3Vu
dXNlZE5vZGVzTWFwLmZpbmQob2xkRGlnZXN0LT5tX3NoYTEpOwogICAgIGlmIChpdCAhPSBtX3Vu
dXNlZE5vZGVzTWFwLmVuZCgpKSB7Ci0gICAgICAgIERpZ2VzdCogbmV3RGlnZXN0ID0gaXQtPnNl
Y29uZDsKKyAgICAgICAgRGlnZXN0KiBuZXdEaWdlc3QgPSBpdC0+dmFsdWU7CiAgICAgICAgIE5v
ZGUqIG5ld05vZGUgPSBuZXdEaWdlc3QtPm1fbm9kZTsKICAgICAgICAgaWYgKCFtX2RvbUVkaXRv
ci0+cmVwbGFjZUNoaWxkKG5ld05vZGUtPnBhcmVudE5vZGUoKSwgb2xkTm9kZSwgbmV3Tm9kZSwg
ZWMpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0TWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcAppbmRleCA1MmVjNzQ5MGEwNzdiNWNm
ZDRmM2IwODVkMjg3N2JjODcwY2MwN2NmLi4xZDVlMzE3NTdjZDg2YjNiMjJiOGZlZGIzMWFiY2Q1
ZTAyZWZmNDc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRT
Y3JpcHRNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRT
Y3JpcHRNYW5hZ2VyLmNwcApAQCAtODIsMTAgKzgyLDEwIEBAIEluamVjdGVkU2NyaXB0IEluamVj
dGVkU2NyaXB0TWFuYWdlcjo6aW5qZWN0ZWRTY3JpcHRGb3JJZChpbnQgaWQpCiB7CiAgICAgSWRU
b0luamVjdGVkU2NyaXB0TWFwOjppdGVyYXRvciBpdCA9IG1faWRUb0luamVjdGVkU2NyaXB0LmZp
bmQoaWQpOwogICAgIGlmIChpdCAhPSBtX2lkVG9JbmplY3RlZFNjcmlwdC5lbmQoKSkKLSAgICAg
ICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBpdC0+dmFsdWU7CiAgICAgZm9y
IChTY3JpcHRTdGF0ZVRvSWQ6Oml0ZXJhdG9yIGl0ID0gbV9zY3JpcHRTdGF0ZVRvSWQuYmVnaW4o
KTsgaXQgIT0gbV9zY3JpcHRTdGF0ZVRvSWQuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0
LT5zZWNvbmQgPT0gaWQpCi0gICAgICAgICAgICByZXR1cm4gaW5qZWN0ZWRTY3JpcHRGb3IoaXQt
PmZpcnN0KTsKKyAgICAgICAgaWYgKGl0LT52YWx1ZSA9PSBpZCkKKyAgICAgICAgICAgIHJldHVy
biBpbmplY3RlZFNjcmlwdEZvcihpdC0+a2V5KTsKICAgICB9CiAgICAgcmV0dXJuIEluamVjdGVk
U2NyaXB0KCk7CiB9CkBAIC05NCw3ICs5NCw3IEBAIGludCBJbmplY3RlZFNjcmlwdE1hbmFnZXI6
OmluamVjdGVkU2NyaXB0SWRGb3IoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlKQogewogICAgIFNj
cmlwdFN0YXRlVG9JZDo6aXRlcmF0b3IgaXQgPSBtX3NjcmlwdFN0YXRlVG9JZC5maW5kKHNjcmlw
dFN0YXRlKTsKICAgICBpZiAoaXQgIT0gbV9zY3JpcHRTdGF0ZVRvSWQuZW5kKCkpCi0gICAgICAg
IHJldHVybiBpdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwogICAgIGludCBp
ZCA9IG1fbmV4dEluamVjdGVkU2NyaXB0SWQrKzsKICAgICBtX3NjcmlwdFN0YXRlVG9JZC5zZXQo
c2NyaXB0U3RhdGUsIGlkKTsKICAgICByZXR1cm4gaWQ7CkBAIC0xMjYsMTEgKzEyNiwxMSBAQCB2
b2lkIEluamVjdGVkU2NyaXB0TWFuYWdlcjo6ZGlzY2FyZEluamVjdGVkU2NyaXB0c0ZvcihET01X
aW5kb3cqIHdpbmRvdykKICAgICBWZWN0b3I8bG9uZz4gaWRzVG9SZW1vdmU7CiAgICAgSWRUb0lu
amVjdGVkU2NyaXB0TWFwOjppdGVyYXRvciBlbmQgPSBtX2lkVG9JbmplY3RlZFNjcmlwdC5lbmQo
KTsKICAgICBmb3IgKElkVG9JbmplY3RlZFNjcmlwdE1hcDo6aXRlcmF0b3IgaXQgPSBtX2lkVG9J
bmplY3RlZFNjcmlwdC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgU2NyaXB0
U3RhdGUqIHNjcmlwdFN0YXRlID0gaXQtPnNlY29uZC5zY3JpcHRTdGF0ZSgpOworICAgICAgICBT
Y3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUgPSBpdC0+dmFsdWUuc2NyaXB0U3RhdGUoKTsKICAgICAg
ICAgaWYgKHdpbmRvdyAhPSBkb21XaW5kb3dGcm9tU2NyaXB0U3RhdGUoc2NyaXB0U3RhdGUpKQog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIG1fc2NyaXB0U3RhdGVUb0lkLnJlbW92ZShz
Y3JpcHRTdGF0ZSk7Ci0gICAgICAgIGlkc1RvUmVtb3ZlLmFwcGVuZChpdC0+Zmlyc3QpOworICAg
ICAgICBpZHNUb1JlbW92ZS5hcHBlbmQoaXQtPmtleSk7CiAgICAgfQogCiAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBpZHNUb1JlbW92ZS5zaXplKCk7IGkrKykKQEAgLTEzOSw3ICsxMzksNyBA
QCB2b2lkIEluamVjdGVkU2NyaXB0TWFuYWdlcjo6ZGlzY2FyZEluamVjdGVkU2NyaXB0c0ZvcihE
T01XaW5kb3cqIHdpbmRvdykKICAgICAvLyBOb3cgcmVtb3ZlIHNjcmlwdCBzdGF0ZXMgdGhhdCBo
YXZlIGlkIGJ1dCBubyBpbmplY3RlZCBzY3JpcHQuCiAgICAgVmVjdG9yPFNjcmlwdFN0YXRlKj4g
c2NyaXB0U3RhdGVzVG9SZW1vdmU7CiAgICAgZm9yIChTY3JpcHRTdGF0ZVRvSWQ6Oml0ZXJhdG9y
IGl0ID0gbV9zY3JpcHRTdGF0ZVRvSWQuYmVnaW4oKTsgaXQgIT0gbV9zY3JpcHRTdGF0ZVRvSWQu
ZW5kKCk7ICsraXQpIHsKLSAgICAgICAgU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlID0gaXQtPmZp
cnN0OworICAgICAgICBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUgPSBpdC0+a2V5OwogICAgICAg
ICBpZiAod2luZG93ID09IGRvbVdpbmRvd0Zyb21TY3JpcHRTdGF0ZShzY3JpcHRTdGF0ZSkpCiAg
ICAgICAgICAgICBzY3JpcHRTdGF0ZXNUb1JlbW92ZS5hcHBlbmQoc2NyaXB0U3RhdGUpOwogICAg
IH0KQEAgLTE1NSw3ICsxNTUsNyBAQCBib29sIEluamVjdGVkU2NyaXB0TWFuYWdlcjo6Y2FuQWNj
ZXNzSW5zcGVjdGVkV29ya2VyQ29udGV4dChTY3JpcHRTdGF0ZSopCiB2b2lkIEluamVjdGVkU2Ny
aXB0TWFuYWdlcjo6cmVsZWFzZU9iamVjdEdyb3VwKGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXAp
CiB7CiAgICAgZm9yIChJZFRvSW5qZWN0ZWRTY3JpcHRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pZFRv
SW5qZWN0ZWRTY3JpcHQuYmVnaW4oKTsgaXQgIT0gbV9pZFRvSW5qZWN0ZWRTY3JpcHQuZW5kKCk7
ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQucmVsZWFzZU9iamVjdEdyb3VwKG9iamVjdEdyb3Vw
KTsKKyAgICAgICAgaXQtPnZhbHVlLnJlbGVhc2VPYmplY3RHcm91cChvYmplY3RHcm91cCk7CiB9
CiAKIFN0cmluZyBJbmplY3RlZFNjcmlwdE1hbmFnZXI6OmluamVjdGVkU2NyaXB0U291cmNlKCkK
QEAgLTE3Myw5ICsxNzMsOSBAQCBJbmplY3RlZFNjcmlwdCBJbmplY3RlZFNjcmlwdE1hbmFnZXI6
OmluamVjdGVkU2NyaXB0Rm9yKFNjcmlwdFN0YXRlKiBpbnNwZWN0ZWRTYwogewogICAgIFNjcmlw
dFN0YXRlVG9JZDo6aXRlcmF0b3IgaXQgPSBtX3NjcmlwdFN0YXRlVG9JZC5maW5kKGluc3BlY3Rl
ZFNjcmlwdFN0YXRlKTsKICAgICBpZiAoaXQgIT0gbV9zY3JpcHRTdGF0ZVRvSWQuZW5kKCkpIHsK
LSAgICAgICAgSWRUb0luamVjdGVkU2NyaXB0TWFwOjppdGVyYXRvciBpdDEgPSBtX2lkVG9Jbmpl
Y3RlZFNjcmlwdC5maW5kKGl0LT5zZWNvbmQpOworICAgICAgICBJZFRvSW5qZWN0ZWRTY3JpcHRN
YXA6Oml0ZXJhdG9yIGl0MSA9IG1faWRUb0luamVjdGVkU2NyaXB0LmZpbmQoaXQtPnZhbHVlKTsK
ICAgICAgICAgaWYgKGl0MSAhPSBtX2lkVG9JbmplY3RlZFNjcmlwdC5lbmQoKSkKLSAgICAgICAg
ICAgIHJldHVybiBpdDEtPnNlY29uZDsKKyAgICAgICAgICAgIHJldHVybiBpdDEtPnZhbHVlOwog
ICAgIH0KIAogICAgIGlmICghbV9pbnNwZWN0ZWRTdGF0ZUFjY2Vzc0NoZWNrKGluc3BlY3RlZFNj
cmlwdFN0YXRlKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JDU1NBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdl
bnQuY3BwCmluZGV4IDUzYTM1M2Y5MGQ4MmQxYTVmNjU3MDAxNjBlNDBiZjZjNWFlZmVkZjAuLmY4
NWJjNGE0MjQ5NTIzNjFiNDFhOWYwZjBlMTQyZWZlYWVmMGQzZTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcApAQCAtMTg3LDEwICsxODcsMTAg
QEAgaW5saW5lIHZvaWQgU2VsZWN0b3JQcm9maWxlOjpjb21taXRTZWxlY3Rvcihib29sIG1hdGNo
ZWQpCiAKICAgICBSdWxlTWF0Y2hpbmdTdGF0c01hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fcnVs
ZU1hdGNoaW5nU3RhdHMuYWRkKG1ha2VLZXkoKSwgUnVsZU1hdGNoaW5nU3RhdHMobV9jdXJyZW50
TWF0Y2hEYXRhLCBtYXRjaFRpbWVNcywgMSwgbWF0Y2hlZCA/IDEgOiAwKSk7CiAgICAgaWYgKCFy
ZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZC50b3Rh
bFRpbWUgKz0gbWF0Y2hUaW1lTXM7Ci0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLmhp
dHMgKz0gMTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS50b3RhbFRpbWUgKz0gbWF0
Y2hUaW1lTXM7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuaGl0cyArPSAxOwogICAg
ICAgICBpZiAobWF0Y2hlZCkKLSAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLm1h
dGNoZXMgKz0gMTsKKyAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUubWF0Y2hlcyAr
PSAxOwogICAgIH0KIH0KIApAQCAtMjAzLDcgKzIwMyw3IEBAIGlubGluZSB2b2lkIFNlbGVjdG9y
UHJvZmlsZTo6Y29tbWl0U2VsZWN0b3JUaW1lKCkKICAgICBpZiAoaXQgPT0gbV9ydWxlTWF0Y2hp
bmdTdGF0cy5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaXQtPnNlY29uZC50b3RhbFRp
bWUgKz0gcHJvY2Vzc2luZ1RpbWVNczsKKyAgICBpdC0+dmFsdWUudG90YWxUaW1lICs9IHByb2Nl
c3NpbmdUaW1lTXM7CiB9CiAKIFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6U2VsZWN0b3JQ
cm9maWxlPiBTZWxlY3RvclByb2ZpbGU6OnRvSW5zcGVjdG9yT2JqZWN0KCkgY29uc3QKQEAgLTIx
MSwxMiArMjExLDEyIEBAIFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6U2VsZWN0b3JQcm9m
aWxlPiBTZWxlY3RvclByb2ZpbGU6OnRvSW5zcGVjdG9yT2JqZWN0CiAgICAgUmVmUHRyPFR5cGVC
dWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6Q1NTOjpTZWxlY3RvclByb2ZpbGVFbnRyeT4gPiBz
ZWxlY3RvclByb2ZpbGVEYXRhID0gVHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpDU1M6
OlNlbGVjdG9yUHJvZmlsZUVudHJ5Pjo6Y3JlYXRlKCk7CiAgICAgZm9yIChSdWxlTWF0Y2hpbmdT
dGF0c01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3J1bGVNYXRjaGluZ1N0YXRzLmJlZ2luKCk7
IGl0ICE9IG1fcnVsZU1hdGNoaW5nU3RhdHMuZW5kKCk7ICsraXQpIHsKICAgICAgICAgUmVmUHRy
PFR5cGVCdWlsZGVyOjpDU1M6OlNlbGVjdG9yUHJvZmlsZUVudHJ5PiBlbnRyeSA9IFR5cGVCdWls
ZGVyOjpDU1M6OlNlbGVjdG9yUHJvZmlsZUVudHJ5OjpjcmVhdGUoKQotICAgICAgICAgICAgLnNl
dFNlbGVjdG9yKGl0LT5zZWNvbmQuc2VsZWN0b3IpCi0gICAgICAgICAgICAuc2V0VXJsKGl0LT5z
ZWNvbmQudXJsKQotICAgICAgICAgICAgLnNldExpbmVOdW1iZXIoaXQtPnNlY29uZC5saW5lTnVt
YmVyKQotICAgICAgICAgICAgLnNldFRpbWUoaXQtPnNlY29uZC50b3RhbFRpbWUpCi0gICAgICAg
ICAgICAuc2V0SGl0Q291bnQoaXQtPnNlY29uZC5oaXRzKQotICAgICAgICAgICAgLnNldE1hdGNo
Q291bnQoaXQtPnNlY29uZC5tYXRjaGVzKTsKKyAgICAgICAgICAgIC5zZXRTZWxlY3RvcihpdC0+
dmFsdWUuc2VsZWN0b3IpCisgICAgICAgICAgICAuc2V0VXJsKGl0LT52YWx1ZS51cmwpCisgICAg
ICAgICAgICAuc2V0TGluZU51bWJlcihpdC0+dmFsdWUubGluZU51bWJlcikKKyAgICAgICAgICAg
IC5zZXRUaW1lKGl0LT52YWx1ZS50b3RhbFRpbWUpCisgICAgICAgICAgICAuc2V0SGl0Q291bnQo
aXQtPnZhbHVlLmhpdHMpCisgICAgICAgICAgICAuc2V0TWF0Y2hDb3VudChpdC0+dmFsdWUubWF0
Y2hlcyk7CiAgICAgICAgIHNlbGVjdG9yUHJvZmlsZURhdGEtPmFkZEl0ZW0oZW50cnkucmVsZWFz
ZSgpKTsKICAgICB9CiAKQEAgLTU2OCw3ICs1NjgsNyBAQCBib29sIEluc3BlY3RvckNTU0FnZW50
Ojpmb3JjZVBzZXVkb1N0YXRlKEVsZW1lbnQqIGVsZW1lbnQsIENTU1NlbGVjdG9yOjpQc2V1ZG9U
eQogICAgIGlmIChpdCA9PSBtX25vZGVJZFRvRm9yY2VkUHNldWRvU3RhdGUuZW5kKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIHVuc2lnbmVkIGZvcmNlZFBzZXVkb1N0YXRlID0gaXQt
PnNlY29uZDsKKyAgICB1bnNpZ25lZCBmb3JjZWRQc2V1ZG9TdGF0ZSA9IGl0LT52YWx1ZTsKICAg
ICBzd2l0Y2ggKHBzZXVkb1R5cGUpIHsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9BY3Rp
dmU6CiAgICAgICAgIHJldHVybiBmb3JjZWRQc2V1ZG9TdGF0ZSAmIFBzZXVkb0FjdGl2ZTsKQEAg
LTgwOSw3ICs4MDksNyBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50Ojpmb3JjZVBzZXVkb1N0YXRl
KEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgYwogCiAgICAgdW5zaWduZWQg
Zm9yY2VkUHNldWRvU3RhdGUgPSBjb21wdXRlUHNldWRvQ2xhc3NNYXNrKGZvcmNlZFBzZXVkb0Ns
YXNzZXMuZ2V0KCkpOwogICAgIE5vZGVJZFRvRm9yY2VkUHNldWRvU3RhdGU6Oml0ZXJhdG9yIGl0
ID0gbV9ub2RlSWRUb0ZvcmNlZFBzZXVkb1N0YXRlLmZpbmQobm9kZUlkKTsKLSAgICB1bnNpZ25l
ZCBjdXJyZW50Rm9yY2VkUHNldWRvU3RhdGUgPSBpdCA9PSBtX25vZGVJZFRvRm9yY2VkUHNldWRv
U3RhdGUuZW5kKCkgPyAwIDogaXQtPnNlY29uZDsKKyAgICB1bnNpZ25lZCBjdXJyZW50Rm9yY2Vk
UHNldWRvU3RhdGUgPSBpdCA9PSBtX25vZGVJZFRvRm9yY2VkUHNldWRvU3RhdGUuZW5kKCkgPyAw
IDogaXQtPnZhbHVlOwogICAgIGJvb2wgbmVlZFN0eWxlUmVjYWxjID0gZm9yY2VkUHNldWRvU3Rh
dGUgIT0gY3VycmVudEZvcmNlZFBzZXVkb1N0YXRlOwogICAgIGlmICghbmVlZFN0eWxlUmVjYWxj
KQogICAgICAgICByZXR1cm47CkBAIC05MTYsNyArOTE2LDcgQEAgSW5zcGVjdG9yU3R5bGVTaGVl
dEZvcklubGluZVN0eWxlKiBJbnNwZWN0b3JDU1NBZ2VudDo6YXNJbnNwZWN0b3JTdHlsZVNoZWV0
KEVsZW0KICAgICAgICAgcmV0dXJuIGluc3BlY3RvclN0eWxlU2hlZXQuZ2V0KCk7CiAgICAgfQog
Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgcmV0dXJuIGl0LT52YWx1ZS5nZXQo
KTsKIH0KIAogRWxlbWVudCogSW5zcGVjdG9yQ1NTQWdlbnQ6OmVsZW1lbnRGb3JJZChFcnJvclN0
cmluZyogZXJyb3JTdHJpbmcsIGludCBub2RlSWQpCkBAIC0xMDEwLDcgKzEwMTAsNyBAQCBJbnNw
ZWN0b3JTdHlsZVNoZWV0KiBJbnNwZWN0b3JDU1NBZ2VudDo6YXNzZXJ0U3R5bGVTaGVldEZvcklk
KEVycm9yU3RyaW5nKiBlcnJvcgogICAgICAgICAqZXJyb3JTdHJpbmcgPSAiTm8gc3R5bGUgc2hl
ZXQgd2l0aCBnaXZlbiBpZCBmb3VuZCI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICBy
ZXR1cm4gaXQtPnNlY29uZC5nZXQoKTsKKyAgICByZXR1cm4gaXQtPnZhbHVlLmdldCgpOwogfQog
CiBUeXBlQnVpbGRlcjo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpFbnVtIEluc3BlY3RvckNTU0Fn
ZW50OjpkZXRlY3RPcmlnaW4oQ1NTU3R5bGVTaGVldCogcGFnZVN0eWxlU2hlZXQsIERvY3VtZW50
KiBvd25lckRvY3VtZW50KQpAQCAtMTE0MSw3ICsxMTQxLDcgQEAgdm9pZCBJbnNwZWN0b3JDU1NB
Z2VudDo6ZGlkUmVtb3ZlRE9NTm9kZShOb2RlKiBub2RlKQogICAgIGlmIChpdCA9PSBtX25vZGVU
b0luc3BlY3RvclN0eWxlU2hlZXQuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1faWRU
b0luc3BlY3RvclN0eWxlU2hlZXQucmVtb3ZlKGl0LT5zZWNvbmQtPmlkKCkpOworICAgIG1faWRU
b0luc3BlY3RvclN0eWxlU2hlZXQucmVtb3ZlKGl0LT52YWx1ZS0+aWQoKSk7CiAgICAgbV9ub2Rl
VG9JbnNwZWN0b3JTdHlsZVNoZWV0LnJlbW92ZShub2RlKTsKIH0KIApAQCAtMTE1NCw3ICsxMTU0
LDcgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6ZGlkTW9kaWZ5RE9NQXR0cihFbGVtZW50KiBl
bGVtZW50KQogICAgIGlmIChpdCA9PSBtX25vZGVUb0luc3BlY3RvclN0eWxlU2hlZXQuZW5kKCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGl0LT5zZWNvbmQtPmRpZE1vZGlmeUVsZW1lbnRBdHRy
aWJ1dGUoKTsKKyAgICBpdC0+dmFsdWUtPmRpZE1vZGlmeUVsZW1lbnRBdHRyaWJ1dGUoKTsKIH0K
IAogdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6c3R5bGVTaGVldENoYW5nZWQoSW5zcGVjdG9yU3R5
bGVTaGVldCogc3R5bGVTaGVldCkKQEAgLTExNjcsNyArMTE2Nyw3IEBAIHZvaWQgSW5zcGVjdG9y
Q1NTQWdlbnQ6OnJlc2V0UHNldWRvU3RhdGVzKCkKIHsKICAgICBIYXNoU2V0PERvY3VtZW50Kj4g
ZG9jdW1lbnRzVG9DaGFuZ2U7CiAgICAgZm9yIChOb2RlSWRUb0ZvcmNlZFBzZXVkb1N0YXRlOjpp
dGVyYXRvciBpdCA9IG1fbm9kZUlkVG9Gb3JjZWRQc2V1ZG9TdGF0ZS5iZWdpbigpLCBlbmQgPSBt
X25vZGVJZFRvRm9yY2VkUHNldWRvU3RhdGUuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAg
ICAgICBFbGVtZW50KiBlbGVtZW50ID0gdG9FbGVtZW50KG1fZG9tQWdlbnQtPm5vZGVGb3JJZChp
dC0+Zmlyc3QpKTsKKyAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IHRvRWxlbWVudChtX2RvbUFn
ZW50LT5ub2RlRm9ySWQoaXQtPmtleSkpOwogICAgICAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50
LT5vd25lckRvY3VtZW50KCkpCiAgICAgICAgICAgICBkb2N1bWVudHNUb0NoYW5nZS5hZGQoZWxl
bWVudC0+b3duZXJEb2N1bWVudCgpKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDb25zb2xlQWdlbnQuY3BwCmluZGV4IGMxMmE1NmIwZDBmMjFkMGM0
OGE3OGFlZDU4MGRkMWRiZTk3ZGFmMTQuLmM2NGQ4NzFiNDIyMjMwNDk2YTQ0NDllNzc5ZDVhZDA1
MjkyZDkzZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JD
b25zb2xlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JD
b25zb2xlQWdlbnQuY3BwCkBAIC0xNzcsNyArMTc3LDcgQEAgdm9pZCBJbnNwZWN0b3JDb25zb2xl
QWdlbnQ6OnN0b3BUaW1pbmcoY29uc3QgU3RyaW5nJiB0aXRsZSwgUGFzc1JlZlB0cjxTY3JpcHRD
YWwKICAgICBpZiAoaXQgPT0gbV90aW1lcy5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
ZG91YmxlIHN0YXJ0VGltZSA9IGl0LT5zZWNvbmQ7CisgICAgZG91YmxlIHN0YXJ0VGltZSA9IGl0
LT52YWx1ZTsKICAgICBtX3RpbWVzLnJlbW92ZShpdCk7CiAKICAgICBkb3VibGUgZWxhcHNlZCA9
IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpIC0gc3RhcnRUaW1lOwpAQCAtMjAwLDcgKzIw
MCw3IEBAIHZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50Ojpjb3VudChQYXNzUmVmUHRyPFNjcmlw
dEFyZ3VtZW50cz4gYXJndW1lbnRzLCBQYXNzUmVmCiAgICAgaWYgKGl0ID09IG1fY291bnRzLmVu
ZCgpKQogICAgICAgICBjb3VudCA9IDE7CiAgICAgZWxzZSB7Ci0gICAgICAgIGNvdW50ID0gaXQt
PnNlY29uZCArIDE7CisgICAgICAgIGNvdW50ID0gaXQtPnZhbHVlICsgMTsKICAgICAgICAgbV9j
b3VudHMucmVtb3ZlKGl0KTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRE9NQWdlbnQuY3BwCmluZGV4IGVkNDdiNWQwYTE3MzkwMjU1OTYzNDNhMDI3M2Ri
ZGExZjBlMjQzNjcuLjIyMDg4M2FlMTZmM2IzYzc5NTg3NWFjNmMxMmExYjJiZWMzMzM4MDAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcApAQCAt
NDY5LDcgKzQ2OSw3IEBAIE5vZGUqIEluc3BlY3RvckRPTUFnZW50Ojpub2RlRm9ySWQoaW50IGlk
KQogCiAgICAgSGFzaE1hcDxpbnQsIE5vZGUqPjo6aXRlcmF0b3IgaXQgPSBtX2lkVG9Ob2RlLmZp
bmQoaWQpOwogICAgIGlmIChpdCAhPSBtX2lkVG9Ob2RlLmVuZCgpKQotICAgICAgICByZXR1cm4g
aXQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKICAgICByZXR1cm4gMDsKIH0K
IApAQCAtOTE1LDkgKzkxNSw5IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnBlcmZvcm1TZWFy
Y2goRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIHdoaXRlc3BhY2VUcmltCiAgICAgU2VhcmNo
UmVzdWx0czo6aXRlcmF0b3IgcmVzdWx0c0l0ID0gbV9zZWFyY2hSZXN1bHRzLmFkZCgqc2VhcmNo
SWQsIFZlY3RvcjxSZWZQdHI8Tm9kZT4gPigpKS5pdGVyYXRvcjsKIAogICAgIGZvciAoTGlzdEhh
c2hTZXQ8Tm9kZSo+OjppdGVyYXRvciBpdCA9IHJlc3VsdENvbGxlY3Rvci5iZWdpbigpOyBpdCAh
PSByZXN1bHRDb2xsZWN0b3IuZW5kKCk7ICsraXQpCi0gICAgICAgIHJlc3VsdHNJdC0+c2Vjb25k
LmFwcGVuZCgqaXQpOworICAgICAgICByZXN1bHRzSXQtPnZhbHVlLmFwcGVuZCgqaXQpOwogCi0g
ICAgKnJlc3VsdENvdW50ID0gcmVzdWx0c0l0LT5zZWNvbmQuc2l6ZSgpOworICAgICpyZXN1bHRD
b3VudCA9IHJlc3VsdHNJdC0+dmFsdWUuc2l6ZSgpOwogfQogCiB2b2lkIEluc3BlY3RvckRPTUFn
ZW50OjpnZXRTZWFyY2hSZXN1bHRzKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgU3Ry
aW5nJiBzZWFyY2hJZCwgaW50IGZyb21JbmRleCwgaW50IHRvSW5kZXgsIFJlZlB0cjxUeXBlQnVp
bGRlcjo6QXJyYXk8aW50PiA+JiBub2RlSWRzKQpAQCAtOTI4LDcgKzkyOCw3IEBAIHZvaWQgSW5z
cGVjdG9yRE9NQWdlbnQ6OmdldFNlYXJjaFJlc3VsdHMoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5n
LCBjb25zdCBTdHJpbmcmCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpbnQgc2l6ZSA9
IGl0LT5zZWNvbmQuc2l6ZSgpOworICAgIGludCBzaXplID0gaXQtPnZhbHVlLnNpemUoKTsKICAg
ICBpZiAoZnJvbUluZGV4IDwgMCB8fCB0b0luZGV4ID4gc2l6ZSB8fCBmcm9tSW5kZXggPj0gdG9J
bmRleCkgewogICAgICAgICAqZXJyb3JTdHJpbmcgPSAiSW52YWxpZCBzZWFyY2ggcmVzdWx0IHJh
bmdlIjsKICAgICAgICAgcmV0dXJuOwpAQCAtOTM2LDcgKzkzNiw3IEBAIHZvaWQgSW5zcGVjdG9y
RE9NQWdlbnQ6OmdldFNlYXJjaFJlc3VsdHMoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25z
dCBTdHJpbmcmCiAKICAgICBub2RlSWRzID0gVHlwZUJ1aWxkZXI6OkFycmF5PGludD46OmNyZWF0
ZSgpOwogICAgIGZvciAoaW50IGkgPSBmcm9tSW5kZXg7IGkgPCB0b0luZGV4OyArK2kpCi0gICAg
ICAgIG5vZGVJZHMtPmFkZEl0ZW0ocHVzaE5vZGVQYXRoVG9Gcm9udGVuZCgoaXQtPnNlY29uZClb
aV0uZ2V0KCkpKTsKKyAgICAgICAgbm9kZUlkcy0+YWRkSXRlbShwdXNoTm9kZVBhdGhUb0Zyb250
ZW5kKChpdC0+dmFsdWUpW2ldLmdldCgpKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6
OmRpc2NhcmRTZWFyY2hSZXN1bHRzKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBzZWFyY2hJ
ZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01EZWJ1
Z2dlckFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01EZWJ1
Z2dlckFnZW50LmNwcAppbmRleCA4MDMyMjk1ZDg5NWU5ZDIyYTJmODBjNTk4ZDllNDRkMjc0NzRh
MDU2Li5jNGZjYjgyYjdiNmZhMGUyYjlhNTNiZDRmYWFjNjIzNjI5ZDBiZTVlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQu
Y3BwCkBAIC00MDIsOCArNDAyLDggQEAgdm9pZCBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50Ojp3
aWxsU2VuZFhNTEh0dHBSZXF1ZXN0KGNvbnN0IFN0cmluZyYgdXJsKQogICAgIGVsc2UgewogICAg
ICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB4aHJCcmVha3BvaW50cyA9IG1fc3RhdGUtPmdl
dE9iamVjdChET01EZWJ1Z2dlckFnZW50U3RhdGU6OnhockJyZWFrcG9pbnRzKTsKICAgICAgICAg
Zm9yIChJbnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9yIGl0ID0geGhyQnJlYWtwb2ludHMtPmJlZ2lu
KCk7IGl0ICE9IHhockJyZWFrcG9pbnRzLT5lbmQoKTsgKytpdCkgewotICAgICAgICAgICAgaWYg
KHVybC5jb250YWlucyhpdC0+Zmlyc3QpKSB7Ci0gICAgICAgICAgICAgICAgYnJlYWtwb2ludFVS
TCA9IGl0LT5maXJzdDsKKyAgICAgICAgICAgIGlmICh1cmwuY29udGFpbnMoaXQtPmtleSkpIHsK
KyAgICAgICAgICAgICAgICBicmVha3BvaW50VVJMID0gaXQtPmtleTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcAppbmRleCA5MGEwYTll
NjA5MGUwYzJjMzlkNzg2OWY0MDJkNDMyYjNhMmJmNmYwLi5jMzJlYTI5ODc2ZGQ5ZWUxN2JjMmU2
MWUwZDdlNjg3MDZhMTI1Mzc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcApAQCAtNzcsNyArNzcsNyBAQCB2b2lkIElu
c3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6Y2xlYXJGcm9udGVuZCgpCiB7CiAgICAgRE9NU3RvcmFn
ZVJlc291cmNlc01hcDo6aXRlcmF0b3IgZG9tU3RvcmFnZUVuZCA9IG1fcmVzb3VyY2VzLmVuZCgp
OwogICAgIGZvciAoRE9NU3RvcmFnZVJlc291cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291
cmNlcy5iZWdpbigpOyBpdCAhPSBkb21TdG9yYWdlRW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vj
b25kLT51bmJpbmQoKTsKKyAgICAgICAgaXQtPnZhbHVlLT51bmJpbmQoKTsKICAgICBtX2Zyb250
ZW5kID0gMDsKICAgICBkaXNhYmxlKDApOwogfQpAQCAtOTYsNyArOTYsNyBAQCB2b2lkIEluc3Bl
Y3RvckRPTVN0b3JhZ2VBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nKikKIAogICAgIERPTVN0b3Jh
Z2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIHJlc291cmNlc0VuZCA9IG1fcmVzb3VyY2VzLmVuZCgp
OwogICAgIGZvciAoRE9NU3RvcmFnZVJlc291cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291
cmNlcy5iZWdpbigpOyBpdCAhPSByZXNvdXJjZXNFbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNv
bmQtPmJpbmQobV9mcm9udGVuZCk7CisgICAgICAgIGl0LT52YWx1ZS0+YmluZChtX2Zyb250ZW5k
KTsKIH0KIAogdm9pZCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJp
bmcqKQpAQCAtMTY1LDggKzE2NSw4IEBAIFN0cmluZyBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6
OnN0b3JhZ2VJZChTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4sIGJvb2wKICAgICBBU1NF
UlQoc2VjdXJpdHlPcmlnaW4pOwogICAgIERPTVN0b3JhZ2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9y
IGRvbVN0b3JhZ2VFbmQgPSBtX3Jlc291cmNlcy5lbmQoKTsKICAgICBmb3IgKERPTVN0b3JhZ2VS
ZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZG9t
U3RvcmFnZUVuZDsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnNlY29uZC0+aXNTYW1lT3JpZ2lu
QW5kVHlwZShzZWN1cml0eU9yaWdpbiwgaXNMb2NhbFN0b3JhZ2UpKQotICAgICAgICAgICAgcmV0
dXJuIGl0LT5maXJzdDsKKyAgICAgICAgaWYgKGl0LT52YWx1ZS0+aXNTYW1lT3JpZ2luQW5kVHlw
ZShzZWN1cml0eU9yaWdpbiwgaXNMb2NhbFN0b3JhZ2UpKQorICAgICAgICAgICAgcmV0dXJuIGl0
LT5rZXk7CiAgICAgfQogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KQEAgLTE3NiwxNCArMTc2LDE0
IEBAIEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZSogSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50
OjpnZXRET01TdG9yYWdlUmVzb3VyY2VGb3JJCiAgICAgRE9NU3RvcmFnZVJlc291cmNlc01hcDo6
aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5maW5kKHN0b3JhZ2VJZCk7CiAgICAgaWYgKGl0ID09
IG1fcmVzb3VyY2VzLmVuZCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gaXQtPnNl
Y29uZC5nZXQoKTsKKyAgICByZXR1cm4gaXQtPnZhbHVlLmdldCgpOwogfQogCiB2b2lkIEluc3Bl
Y3RvckRPTVN0b3JhZ2VBZ2VudDo6ZGlkVXNlRE9NU3RvcmFnZShTdG9yYWdlQXJlYSogc3RvcmFn
ZUFyZWEsIGJvb2wgaXNMb2NhbFN0b3JhZ2UsIEZyYW1lKiBmcmFtZSkKIHsKICAgICBET01TdG9y
YWdlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBkb21TdG9yYWdlRW5kID0gbV9yZXNvdXJjZXMuZW5k
KCk7CiAgICAgZm9yIChET01TdG9yYWdlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBpdCA9IG1fcmVz
b3VyY2VzLmJlZ2luKCk7IGl0ICE9IGRvbVN0b3JhZ2VFbmQ7ICsraXQpIHsKLSAgICAgICAgaWYg
KGl0LT5zZWNvbmQtPmlzU2FtZU9yaWdpbkFuZFR5cGUoZnJhbWUtPmRvY3VtZW50KCktPnNlY3Vy
aXR5T3JpZ2luKCksIGlzTG9jYWxTdG9yYWdlKSkKKyAgICAgICAgaWYgKGl0LT52YWx1ZS0+aXNT
YW1lT3JpZ2luQW5kVHlwZShmcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKSwgaXNM
b2NhbFN0b3JhZ2UpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMjE4LDcgKzIx
OCw3IEBAIHNpemVfdCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6Om1lbW9yeUJ5dGVzVXNlZEJ5
U3RvcmFnZUNhY2hlKCkgY29uc3QKIHsKICAgICBzaXplX3Qgc2l6ZSA9IDA7CiAgICAgZm9yIChE
T01TdG9yYWdlUmVzb3VyY2VzTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmJl
Z2luKCk7IGl0ICE9IG1fcmVzb3VyY2VzLmVuZCgpOyArK2l0KQotICAgICAgICBzaXplICs9IGl0
LT5zZWNvbmQtPnN0b3JhZ2VBcmVhKCktPm1lbW9yeUJ5dGVzVXNlZEJ5Q2FjaGUoKTsKKyAgICAg
ICAgc2l6ZSArPSBpdC0+dmFsdWUtPnN0b3JhZ2VBcmVhKCktPm1lbW9yeUJ5dGVzVXNlZEJ5Q2Fj
aGUoKTsKICAgICByZXR1cm4gc2l6ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuY3BwCmluZGV4IDk4YzkzNjNhZTY5N2Q0Njgz
NGVjM2I2MWQ0M2EzZWVkNDQ4MDllYWMuLjdiOGZjYTRkNGFhNjU3YjI4OWMyNTAzZDgyYWFiNGE5
Y2EwYTY3NTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JE
YXRhYmFzZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RGF0YWJhc2VBZ2VudC5jcHAKQEAgLTI3NSw3ICsyNzUsNyBAQCB2b2lkIEluc3BlY3RvckRhdGFi
YXNlQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyopCiAKICAgICBEYXRhYmFzZVJlc291cmNlc01h
cDo6aXRlcmF0b3IgZGF0YWJhc2VzRW5kID0gbV9yZXNvdXJjZXMuZW5kKCk7CiAgICAgZm9yIChE
YXRhYmFzZVJlc291cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5iZWdpbigpOyBp
dCAhPSBkYXRhYmFzZXNFbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPmJpbmQobV9mcm9u
dGVuZFByb3ZpZGVyLT5mcm9udGVuZCgpKTsKKyAgICAgICAgaXQtPnZhbHVlLT5iaW5kKG1fZnJv
bnRlbmRQcm92aWRlci0+ZnJvbnRlbmQoKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VB
Z2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyopCkBAIC0zMzMsOCArMzMzLDggQEAgdm9pZCBJbnNw
ZWN0b3JEYXRhYmFzZUFnZW50OjpleGVjdXRlU1FMKEVycm9yU3RyaW5nKiBlcnJvciwgY29uc3Qg
U3RyaW5nJiBkYXRhYmEKIFN0cmluZyBJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjpkYXRhYmFzZUlk
KERhdGFiYXNlKiBkYXRhYmFzZSkKIHsKICAgICBmb3IgKERhdGFiYXNlUmVzb3VyY2VzTWFwOjpp
dGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IG1fcmVzb3VyY2VzLmVuZCgp
OyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kLT5kYXRhYmFzZSgpID09IGRhdGFiYXNl
KQotICAgICAgICAgICAgcmV0dXJuIGl0LT5maXJzdDsKKyAgICAgICAgaWYgKGl0LT52YWx1ZS0+
ZGF0YWJhc2UoKSA9PSBkYXRhYmFzZSkKKyAgICAgICAgICAgIHJldHVybiBpdC0+a2V5OwogICAg
IH0KICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CkBAIC0zNDIsOCArMzQyLDggQEAgU3RyaW5nIElu
c3BlY3RvckRhdGFiYXNlQWdlbnQ6OmRhdGFiYXNlSWQoRGF0YWJhc2UqIGRhdGFiYXNlKQogSW5z
cGVjdG9yRGF0YWJhc2VSZXNvdXJjZSogSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6ZmluZEJ5Rmls
ZU5hbWUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSkKIHsKICAgICBmb3IgKERhdGFiYXNlUmVzb3Vy
Y2VzTWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IG1fcmVzb3Vy
Y2VzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kLT5kYXRhYmFzZSgpLT5m
aWxlTmFtZSgpID09IGZpbGVOYW1lKQotICAgICAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQuZ2V0
KCk7CisgICAgICAgIGlmIChpdC0+dmFsdWUtPmRhdGFiYXNlKCktPmZpbGVOYW1lKCkgPT0gZmls
ZU5hbWUpCisgICAgICAgICAgICByZXR1cm4gaXQtPnZhbHVlLmdldCgpOwogICAgIH0KICAgICBy
ZXR1cm4gMDsKIH0KQEAgLTM1Myw3ICszNTMsNyBAQCBEYXRhYmFzZSogSW5zcGVjdG9yRGF0YWJh
c2VBZ2VudDo6ZGF0YWJhc2VGb3JJZChjb25zdCBTdHJpbmcmIGRhdGFiYXNlSWQpCiAgICAgRGF0
YWJhc2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMuZmluZChkYXRhYmFz
ZUlkKTsKICAgICBpZiAoaXQgPT0gbV9yZXNvdXJjZXMuZW5kKCkpCiAgICAgICAgIHJldHVybiAw
OwotICAgIHJldHVybiBpdC0+c2Vjb25kLT5kYXRhYmFzZSgpOworICAgIHJldHVybiBpdC0+dmFs
dWUtPmRhdGFiYXNlKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAppbmRleCAx
YmMxNmYyMGYzYzViMWVlNjA5YjVjM2YxOWM0MjJlNDk2Yzg4ZjU0Li41Yjg3NjRjZTQ5MDZiZGUw
NzFlY2YyZTFjZDU5YWMzMzkxODM3Y2EzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCkBAIC0yNDgsOSArMjQ4LDkgQEAgdm9p
ZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRCcmVha3BvaW50QnlVcmwoRXJyb3JTdHJpbmcq
IGVycm9yU3RyaW5nLCBpbnQgbGkKIAogICAgIFNjcmlwdEJyZWFrcG9pbnQgYnJlYWtwb2ludChs
aW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIGNvbmRpdGlvbik7CiAgICAgZm9yIChTY3JpcHRzTWFw
OjppdGVyYXRvciBpdCA9IG1fc2NyaXB0cy5iZWdpbigpOyBpdCAhPSBtX3NjcmlwdHMuZW5kKCk7
ICsraXQpIHsKLSAgICAgICAgaWYgKCFtYXRjaGVzKGl0LT5zZWNvbmQudXJsLCB1cmwsIGlzUmVn
ZXgpKQorICAgICAgICBpZiAoIW1hdGNoZXMoaXQtPnZhbHVlLnVybCwgdXJsLCBpc1JlZ2V4KSkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkRlYnVn
Z2VyOjpMb2NhdGlvbj4gbG9jYXRpb24gPSByZXNvbHZlQnJlYWtwb2ludChicmVha3BvaW50SWQs
IGl0LT5maXJzdCwgYnJlYWtwb2ludCk7CisgICAgICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6RGVi
dWdnZXI6OkxvY2F0aW9uPiBsb2NhdGlvbiA9IHJlc29sdmVCcmVha3BvaW50KGJyZWFrcG9pbnRJ
ZCwgaXQtPmtleSwgYnJlYWtwb2ludCk7CiAgICAgICAgIGlmIChsb2NhdGlvbikKICAgICAgICAg
ICAgIGxvY2F0aW9ucy0+YWRkSXRlbShsb2NhdGlvbik7CiAgICAgfQpAQCAtMzAyLDggKzMwMiw4
IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6cmVtb3ZlQnJlYWtwb2ludChFcnJvclN0
cmluZyosIGNvbnN0IFN0cmluZyYgYnJlYWtwCiAgICAgQnJlYWtwb2ludElkVG9EZWJ1Z1NlcnZl
ckJyZWFrcG9pbnRJZHNNYXA6Oml0ZXJhdG9yIGRlYnVnU2VydmVyQnJlYWtwb2ludElkc0l0ZXJh
dG9yID0gbV9icmVha3BvaW50SWRUb0RlYnVnU2VydmVyQnJlYWtwb2ludElkcy5maW5kKGJyZWFr
cG9pbnRJZCk7CiAgICAgaWYgKGRlYnVnU2VydmVyQnJlYWtwb2ludElkc0l0ZXJhdG9yID09IG1f
YnJlYWtwb2ludElkVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHMuZW5kKCkpCiAgICAgICAgIHJl
dHVybjsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRlYnVnU2VydmVyQnJlYWtwb2ludElk
c0l0ZXJhdG9yLT5zZWNvbmQuc2l6ZSgpOyArK2kpCi0gICAgICAgIHNjcmlwdERlYnVnU2VydmVy
KCkucmVtb3ZlQnJlYWtwb2ludChkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNJdGVyYXRvci0+c2Vj
b25kW2ldKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRlYnVnU2VydmVyQnJlYWtwb2lu
dElkc0l0ZXJhdG9yLT52YWx1ZS5zaXplKCk7ICsraSkKKyAgICAgICAgc2NyaXB0RGVidWdTZXJ2
ZXIoKS5yZW1vdmVCcmVha3BvaW50KGRlYnVnU2VydmVyQnJlYWtwb2ludElkc0l0ZXJhdG9yLT52
YWx1ZVtpXSk7CiAgICAgbV9icmVha3BvaW50SWRUb0RlYnVnU2VydmVyQnJlYWtwb2ludElkcy5y
ZW1vdmUoZGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzSXRlcmF0b3IpOwogfQogCkBAIC0zMzEsNyAr
MzMxLDcgQEAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uPiBJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50OjpyZXNvbHZlQnJlYWsKICAgICBTY3JpcHRzTWFwOjppdGVyYXRv
ciBzY3JpcHRJdGVyYXRvciA9IG1fc2NyaXB0cy5maW5kKHNjcmlwdElkKTsKICAgICBpZiAoc2Ny
aXB0SXRlcmF0b3IgPT0gbV9zY3JpcHRzLmVuZCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBT
Y3JpcHQmIHNjcmlwdCA9IHNjcmlwdEl0ZXJhdG9yLT5zZWNvbmQ7CisgICAgU2NyaXB0JiBzY3Jp
cHQgPSBzY3JpcHRJdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKGJyZWFrcG9pbnQubGluZU51bWJl
ciA8IHNjcmlwdC5zdGFydExpbmUgfHwgc2NyaXB0LmVuZExpbmUgPCBicmVha3BvaW50LmxpbmVO
dW1iZXIpCiAgICAgICAgIHJldHVybiAwOwogCkBAIC0zNDQsNyArMzQ0LDcgQEAgUGFzc1JlZlB0
cjxUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uPiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpyZXNvbHZlQnJlYWsKICAgICBCcmVha3BvaW50SWRUb0RlYnVnU2VydmVyQnJlYWtwb2ludElk
c01hcDo6aXRlcmF0b3IgZGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzSXRlcmF0b3IgPSBtX2JyZWFr
cG9pbnRJZFRvRGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzLmZpbmQoYnJlYWtwb2ludElkKTsKICAg
ICBpZiAoZGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzSXRlcmF0b3IgPT0gbV9icmVha3BvaW50SWRU
b0RlYnVnU2VydmVyQnJlYWtwb2ludElkcy5lbmQoKSkKICAgICAgICAgZGVidWdTZXJ2ZXJCcmVh
a3BvaW50SWRzSXRlcmF0b3IgPSBtX2JyZWFrcG9pbnRJZFRvRGVidWdTZXJ2ZXJCcmVha3BvaW50
SWRzLnNldChicmVha3BvaW50SWQsIFZlY3RvcjxTdHJpbmc+KCkpLml0ZXJhdG9yOwotICAgIGRl
YnVnU2VydmVyQnJlYWtwb2ludElkc0l0ZXJhdG9yLT5zZWNvbmQuYXBwZW5kKGRlYnVnU2VydmVy
QnJlYWtwb2ludElkKTsKKyAgICBkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNJdGVyYXRvci0+dmFs
dWUuYXBwZW5kKGRlYnVnU2VydmVyQnJlYWtwb2ludElkKTsKIAogICAgIFJlZlB0cjxUeXBlQnVp
bGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uPiBsb2NhdGlvbiA9IFR5cGVCdWlsZGVyOjpEZWJ1Z2dl
cjo6TG9jYXRpb246OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRTY3JpcHRJZChzY3JpcHRJZCkKQEAg
LTM3MCw3ICszNzAsNyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNlYXJjaEluQ29u
dGVudChFcnJvclN0cmluZyogZXJyb3IsIGNvbnN0IFN0cmluZyYgcwogCiAgICAgU2NyaXB0c01h
cDo6aXRlcmF0b3IgaXQgPSBtX3NjcmlwdHMuZmluZChzY3JpcHRJZCk7CiAgICAgaWYgKGl0ICE9
IG1fc2NyaXB0cy5lbmQoKSkKLSAgICAgICAgcmVzdWx0cyA9IENvbnRlbnRTZWFyY2hVdGlsczo6
c2VhcmNoSW5UZXh0QnlMaW5lcyhpdC0+c2Vjb25kLnNvdXJjZSwgcXVlcnksIGNhc2VTZW5zaXRp
dmUsIGlzUmVnZXgpOworICAgICAgICByZXN1bHRzID0gQ29udGVudFNlYXJjaFV0aWxzOjpzZWFy
Y2hJblRleHRCeUxpbmVzKGl0LT52YWx1ZS5zb3VyY2UsIHF1ZXJ5LCBjYXNlU2Vuc2l0aXZlLCBp
c1JlZ2V4KTsKICAgICBlbHNlCiAgICAgICAgICplcnJvciA9ICJObyBzY3JpcHQgZm9yIGlkOiAi
ICsgc2NyaXB0SWQ7CiB9CkBAIC00MDMsNyArNDAzLDcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50OjpnZXRTY3JpcHRTb3VyY2UoRXJyb3JTdHJpbmcqIGVycm9yLCBjb25zdCBTdHJpbmcm
IHMKIHsKICAgICBTY3JpcHRzTWFwOjppdGVyYXRvciBpdCA9IG1fc2NyaXB0cy5maW5kKHNjcmlw
dElkKTsKICAgICBpZiAoaXQgIT0gbV9zY3JpcHRzLmVuZCgpKQotICAgICAgICAqc2NyaXB0U291
cmNlID0gaXQtPnNlY29uZC5zb3VyY2U7CisgICAgICAgICpzY3JpcHRTb3VyY2UgPSBpdC0+dmFs
dWUuc291cmNlOwogICAgIGVsc2UKICAgICAgICAgKmVycm9yID0gIk5vIHNjcmlwdCBmb3IgaWQ6
ICIgKyBzY3JpcHRJZDsKIH0KQEAgLTYzMCw3ICs2MzAsNyBAQCB2b2lkIEluc3BlY3RvckRlYnVn
Z2VyQWdlbnQ6OmRpZFBhcnNlU291cmNlKGNvbnN0IFN0cmluZyYgc2NyaXB0SWQsIGNvbnN0IFNj
cmlwdAogCiAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnJlYWtwb2ludHNDb29raWUgPSBt
X3N0YXRlLT5nZXRPYmplY3QoRGVidWdnZXJBZ2VudFN0YXRlOjpqYXZhU2NyaXB0QnJlYWtwb2lu
dHMpOwogICAgIGZvciAoSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciBpdCA9IGJyZWFrcG9pbnRz
Q29va2llLT5iZWdpbigpOyBpdCAhPSBicmVha3BvaW50c0Nvb2tpZS0+ZW5kKCk7ICsraXQpIHsK
LSAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnJlYWtwb2ludE9iamVjdCA9IGl0LT5z
ZWNvbmQtPmFzT2JqZWN0KCk7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJyZWFr
cG9pbnRPYmplY3QgPSBpdC0+dmFsdWUtPmFzT2JqZWN0KCk7CiAgICAgICAgIGJvb2wgaXNSZWdl
eDsKICAgICAgICAgYnJlYWtwb2ludE9iamVjdC0+Z2V0Qm9vbGVhbigiaXNSZWdleCIsICZpc1Jl
Z2V4KTsKICAgICAgICAgU3RyaW5nIHVybDsKQEAgLTY0MSw5ICs2NDEsOSBAQCB2b2lkIEluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBhcnNlU291cmNlKGNvbnN0IFN0cmluZyYgc2NyaXB0SWQs
IGNvbnN0IFNjcmlwdAogICAgICAgICBicmVha3BvaW50T2JqZWN0LT5nZXROdW1iZXIoImxpbmVO
dW1iZXIiLCAmYnJlYWtwb2ludC5saW5lTnVtYmVyKTsKICAgICAgICAgYnJlYWtwb2ludE9iamVj
dC0+Z2V0TnVtYmVyKCJjb2x1bW5OdW1iZXIiLCAmYnJlYWtwb2ludC5jb2x1bW5OdW1iZXIpOwog
ICAgICAgICBicmVha3BvaW50T2JqZWN0LT5nZXRTdHJpbmcoImNvbmRpdGlvbiIsICZicmVha3Bv
aW50LmNvbmRpdGlvbik7Ci0gICAgICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6RGVidWdnZXI6Okxv
Y2F0aW9uPiBsb2NhdGlvbiA9IHJlc29sdmVCcmVha3BvaW50KGl0LT5maXJzdCwgc2NyaXB0SWQs
IGJyZWFrcG9pbnQpOworICAgICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2Nh
dGlvbj4gbG9jYXRpb24gPSByZXNvbHZlQnJlYWtwb2ludChpdC0+a2V5LCBzY3JpcHRJZCwgYnJl
YWtwb2ludCk7CiAgICAgICAgIGlmIChsb2NhdGlvbikKLSAgICAgICAgICAgIG1fZnJvbnRlbmQt
PmJyZWFrcG9pbnRSZXNvbHZlZChpdC0+Zmlyc3QsIGxvY2F0aW9uKTsKKyAgICAgICAgICAgIG1f
ZnJvbnRlbmQtPmJyZWFrcG9pbnRSZXNvbHZlZChpdC0+a2V5LCBsb2NhdGlvbik7CiAgICAgfQog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhl
ZERCQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckluZGV4ZWRE
QkFnZW50LmNwcAppbmRleCAzM2IyMWI0ZmRkMTJjMTk5MjVmNDVjMzMzYWVhNzA0NzM3ZWM2Zjgx
Li5lYTMzOTllZjczMmVhMWJjNDkyYmE5ZGVlMDQ4OTE2MzJlNTM5ODM1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHAKQEAg
LTMxOSwxMiArMzE5LDEyIEBAIHB1YmxpYzoKICAgICAgICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpB
cnJheTxUeXBlQnVpbGRlcjo6SW5kZXhlZERCOjpPYmplY3RTdG9yZT4gPiBvYmplY3RTdG9yZXMg
PSBUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkluZGV4ZWREQjo6T2JqZWN0U3RvcmU+
OjpjcmVhdGUoKTsKIAogICAgICAgICBmb3IgKElEQkRhdGFiYXNlTWV0YWRhdGE6Ok9iamVjdFN0
b3JlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGRhdGFiYXNlTWV0YWRhdGEub2JqZWN0U3RvcmVz
LmJlZ2luKCk7IGl0ICE9IGRhdGFiYXNlTWV0YWRhdGEub2JqZWN0U3RvcmVzLmVuZCgpOyArK2l0
KSB7Ci0gICAgICAgICAgICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9y
ZU1ldGFkYXRhID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIGNvbnN0IElEQk9iamVjdFN0b3Jl
TWV0YWRhdGEmIG9iamVjdFN0b3JlTWV0YWRhdGEgPSBpdC0+dmFsdWU7CiAKICAgICAgICAgICAg
IFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkluZGV4ZWREQjo6T2JqZWN0
U3RvcmVJbmRleD4gPiBpbmRleGVzID0gVHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpJ
bmRleGVkREI6Ok9iamVjdFN0b3JlSW5kZXg+OjpjcmVhdGUoKTsKIAogICAgICAgICAgICAgZm9y
IChJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbmRleE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBv
YmplY3RTdG9yZU1ldGFkYXRhLmluZGV4ZXMuYmVnaW4oKTsgaXQgIT0gb2JqZWN0U3RvcmVNZXRh
ZGF0YS5pbmRleGVzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgSURCSW5k
ZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICAgICAg
Y29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSA9IGl0LT52YWx1ZTsKIAogICAg
ICAgICAgICAgICAgIFJlZlB0cjxPYmplY3RTdG9yZUluZGV4PiBvYmplY3RTdG9yZUluZGV4ID0g
T2JqZWN0U3RvcmVJbmRleDo6Y3JlYXRlKCkKICAgICAgICAgICAgICAgICAgICAgLnNldE5hbWUo
aW5kZXhNZXRhZGF0YS5uYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3Rvck1lbW9yeUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JNZW1vcnlBZ2VudC5jcHAKaW5kZXggZWE1MjU0YWFiNTllMzI0YmFjYmE5Nzc3YjY2ZGYz
ODBhMjViNGM3YS4uMDg0MjVjYzg3NDIwNTgyMTAyMGRhYTA5ZjZmMjc3NTcxNGQ0YzJlMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck1lbW9yeUFnZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTWVtb3J5QWdlbnQuY3Bw
CkBAIC0xNjMsOCArMTYzLDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgUmVmUHRyPFR5cGVC
dWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6TWVtb3J5OjpOb2RlQ291bnQ+ID4gY2hpbGRyZW5T
dGF0cyA9IFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6TWVtb3J5OjpOb2RlQ291bnQ+
OjpjcmVhdGUoKTsKICAgICAgICAgZm9yIChIYXNoTWFwPFN0cmluZywgaW50Pjo6aXRlcmF0b3Ig
aXQgPSBtX25vZGVOYW1lVG9Db3VudC5iZWdpbigpOyBpdCAhPSBtX25vZGVOYW1lVG9Db3VudC5l
bmQoKTsgKytpdCkgewotICAgICAgICAgICAgUmVmUHRyPE5vZGVDb3VudD4gbm9kZUNvdW50ID0g
Tm9kZUNvdW50OjpjcmVhdGUoKS5zZXROb2RlTmFtZShpdC0+Zmlyc3QpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldENvdW50
KGl0LT5zZWNvbmQpOworICAgICAgICAgICAgUmVmUHRyPE5vZGVDb3VudD4gbm9kZUNvdW50ID0g
Tm9kZUNvdW50OjpjcmVhdGUoKS5zZXROb2RlTmFtZShpdC0+a2V5KQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRDb3VudChp
dC0+dmFsdWUpOwogICAgICAgICAgICAgY2hpbGRyZW5TdGF0cy0+YWRkSXRlbShub2RlQ291bnQp
OwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBjaGlsZHJlblN0YXRzLnJlbGVhc2UoKTsKQEAg
LTE3NCw4ICsxNzQsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBSZWZQdHI8VHlwZUJ1aWxk
ZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpNZW1vcnk6Okxpc3RlbmVyQ291bnQ+ID4gbGlzdGVuZXJT
dGF0cyA9IFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6TWVtb3J5OjpMaXN0ZW5lckNv
dW50Pjo6Y3JlYXRlKCk7CiAgICAgICAgIGZvciAoSGFzaE1hcDxBdG9taWNTdHJpbmcsIGludD46
Oml0ZXJhdG9yIGl0ID0gbV9ldmVudFR5cGVUb0NvdW50LmJlZ2luKCk7IGl0ICE9IG1fZXZlbnRU
eXBlVG9Db3VudC5lbmQoKTsgKytpdCkgewotICAgICAgICAgICAgUmVmUHRyPExpc3RlbmVyQ291
bnQ+IGxpc3RlbmVyQ291bnQgPSBMaXN0ZW5lckNvdW50OjpjcmVhdGUoKS5zZXRUeXBlKGl0LT5m
aXJzdCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAuc2V0Q291bnQoaXQtPnNlY29uZCk7CisgICAgICAgICAg
ICBSZWZQdHI8TGlzdGVuZXJDb3VudD4gbGlzdGVuZXJDb3VudCA9IExpc3RlbmVyQ291bnQ6OmNy
ZWF0ZSgpLnNldFR5cGUoaXQtPmtleSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0Q291bnQoaXQtPnZh
bHVlKTsKICAgICAgICAgICAgIGxpc3RlbmVyU3RhdHMtPmFkZEl0ZW0obGlzdGVuZXJDb3VudCk7
CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGxpc3RlbmVyU3RhdHMucmVsZWFzZSgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAppbmRleCBj
NmIwNmJmYTY0ZTA4ZjVlODIzM2NmZTBhOTA4ZDk0MzQ2ZWM5ZWFjLi4xM2FjN2U5ZTQ4ZjJjNGMw
ZDA0ZjYwNzRhMWQxOWRkOGQxZDM0YmVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcApAQCAtNDYwLDcgKzQ2MCw3IEBAIHN0YXRpYyBWZWN0
b3I8Q2FjaGVkUmVzb3VyY2UqPiBjYWNoZWRSZXNvdXJjZXNGb3JGcmFtZShGcmFtZSogZnJhbWUp
CiAgICAgY29uc3QgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OkRvY3VtZW50UmVzb3VyY2VNYXAmIGFs
bFJlc291cmNlcyA9IGZyYW1lLT5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLT5h
bGxDYWNoZWRSZXNvdXJjZXMoKTsKICAgICBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6RG9jdW1lbnRS
ZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gYWxsUmVzb3VyY2VzLmVuZCgpOwogICAg
IGZvciAoQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OkRvY3VtZW50UmVzb3VyY2VNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gYWxsUmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAg
ICAgICBDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UgPSBpdC0+c2Vjb25kLmdldCgpOwor
ICAgICAgICBDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UgPSBpdC0+dmFsdWUuZ2V0KCk7
CiAKICAgICAgICAgc3dpdGNoIChjYWNoZWRSZXNvdXJjZS0+dHlwZSgpKSB7CiAgICAgICAgIGNh
c2UgQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3VyY2U6CkBAIC03NjQsNyArNzY0LDcgQEAgdm9p
ZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZChGcmFtZSog
ZnJhbWUsIERPTVdyYXBwZXJXb3IKICAgICAgICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVy
YXRvciBlbmQgPSBzY3JpcHRzLT5lbmQoKTsKICAgICAgICAgZm9yIChJbnNwZWN0b3JPYmplY3Q6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gc2NyaXB0cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7
CiAgICAgICAgICAgICBTdHJpbmcgc2NyaXB0VGV4dDsKLSAgICAgICAgICAgIGlmIChpdC0+c2Vj
b25kLT5hc1N0cmluZygmc2NyaXB0VGV4dCkpCisgICAgICAgICAgICBpZiAoaXQtPnZhbHVlLT5h
c1N0cmluZygmc2NyaXB0VGV4dCkpCiAgICAgICAgICAgICAgICAgbV9pbmplY3RlZFNjcmlwdE1h
bmFnZXItPmluamVjdFNjcmlwdChzY3JpcHRUZXh0LCBtYWluV29ybGRTY3JpcHRTdGF0ZShmcmFt
ZSkpOwogICAgICAgICB9CiAgICAgfQpAQCAtNzk2LDggKzc5Niw4IEBAIHZvaWQgSW5zcGVjdG9y
UGFnZUFnZW50OjpmcmFtZURldGFjaGVkKEZyYW1lKiBmcmFtZSkKIHsKICAgICBIYXNoTWFwPEZy
YW1lKiwgU3RyaW5nPjo6aXRlcmF0b3IgaXRlcmF0b3IgPSBtX2ZyYW1lVG9JZGVudGlmaWVyLmZp
bmQoZnJhbWUpOwogICAgIGlmIChpdGVyYXRvciAhPSBtX2ZyYW1lVG9JZGVudGlmaWVyLmVuZCgp
KSB7Ci0gICAgICAgIG1fZnJvbnRlbmQtPmZyYW1lRGV0YWNoZWQoaXRlcmF0b3ItPnNlY29uZCk7
Ci0gICAgICAgIG1faWRlbnRpZmllclRvRnJhbWUucmVtb3ZlKGl0ZXJhdG9yLT5zZWNvbmQpOwor
ICAgICAgICBtX2Zyb250ZW5kLT5mcmFtZURldGFjaGVkKGl0ZXJhdG9yLT52YWx1ZSk7CisgICAg
ICAgIG1faWRlbnRpZmllclRvRnJhbWUucmVtb3ZlKGl0ZXJhdG9yLT52YWx1ZSk7CiAgICAgICAg
IG1fZnJhbWVUb0lkZW50aWZpZXIucmVtb3ZlKGl0ZXJhdG9yKTsKICAgICB9CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAKaW5k
ZXggNDJjZGU4NWJiYWMxYTZhMmQ2ZDdlOTBlODExN2RiMGU4YmUxMjJhNS4uOTk3YTU4ZTk5M2Yy
MzIyNzE1NDYxMjBkN2Q0MjI5ODUxOWRmNGNiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcApAQCAtMjQ5LDEwICsyNDksMTAg
QEAgdm9pZCBJbnNwZWN0b3JQcm9maWxlckFnZW50OjpnZXRQcm9maWxlSGVhZGVycyhFcnJvclN0
cmluZyosIFJlZlB0cjxUeXBlQnVpbGRlcjoKIAogICAgIFByb2ZpbGVzTWFwOjppdGVyYXRvciBw
cm9maWxlc0VuZCA9IG1fcHJvZmlsZXMuZW5kKCk7CiAgICAgZm9yIChQcm9maWxlc01hcDo6aXRl
cmF0b3IgaXQgPSBtX3Byb2ZpbGVzLmJlZ2luKCk7IGl0ICE9IHByb2ZpbGVzRW5kOyArK2l0KQot
ICAgICAgICBoZWFkZXJzLT5hZGRJdGVtKGNyZWF0ZVByb2ZpbGVIZWFkZXIoKml0LT5zZWNvbmQp
KTsKKyAgICAgICAgaGVhZGVycy0+YWRkSXRlbShjcmVhdGVQcm9maWxlSGVhZGVyKCppdC0+dmFs
dWUpKTsKICAgICBIZWFwU25hcHNob3RzTWFwOjppdGVyYXRvciBzbmFwc2hvdHNFbmQgPSBtX3Nu
YXBzaG90cy5lbmQoKTsKICAgICBmb3IgKEhlYXBTbmFwc2hvdHNNYXA6Oml0ZXJhdG9yIGl0ID0g
bV9zbmFwc2hvdHMuYmVnaW4oKTsgaXQgIT0gc25hcHNob3RzRW5kOyArK2l0KQotICAgICAgICBo
ZWFkZXJzLT5hZGRJdGVtKGNyZWF0ZVNuYXBzaG90SGVhZGVyKCppdC0+c2Vjb25kKSk7CisgICAg
ICAgIGhlYWRlcnMtPmFkZEl0ZW0oY3JlYXRlU25hcHNob3RIZWFkZXIoKml0LT52YWx1ZSkpOwog
fQogCiBuYW1lc3BhY2UgewpAQCAtMjgwLDE2ICsyODAsMTYgQEAgdm9pZCBJbnNwZWN0b3JQcm9m
aWxlckFnZW50OjpnZXRQcm9maWxlKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgU3Ry
aW5nJgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIHByb2ZpbGVPYmpl
Y3QgPSBUeXBlQnVpbGRlcjo6UHJvZmlsZXI6OlByb2ZpbGU6OmNyZWF0ZSgpOwotICAgICAgICBw
cm9maWxlT2JqZWN0LT5zZXRIZWFkKGl0LT5zZWNvbmQtPmJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9y
SGVhZCgpKTsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQtPmJvdHRvbVVwSGVhZCgpKQotICAgICAg
ICAgICAgcHJvZmlsZU9iamVjdC0+c2V0Qm90dG9tVXBIZWFkKGl0LT5zZWNvbmQtPmJ1aWxkSW5z
cGVjdG9yT2JqZWN0Rm9yQm90dG9tVXBIZWFkKCkpOworICAgICAgICBwcm9maWxlT2JqZWN0LT5z
ZXRIZWFkKGl0LT52YWx1ZS0+YnVpbGRJbnNwZWN0b3JPYmplY3RGb3JIZWFkKCkpOworICAgICAg
ICBpZiAoaXQtPnZhbHVlLT5ib3R0b21VcEhlYWQoKSkKKyAgICAgICAgICAgIHByb2ZpbGVPYmpl
Y3QtPnNldEJvdHRvbVVwSGVhZChpdC0+dmFsdWUtPmJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9yQm90
dG9tVXBIZWFkKCkpOwogICAgIH0gZWxzZSBpZiAodHlwZSA9PSBIZWFwUHJvZmlsZVR5cGUpIHsK
ICAgICAgICAgSGVhcFNuYXBzaG90c01hcDo6aXRlcmF0b3IgaXQgPSBtX3NuYXBzaG90cy5maW5k
KHVpZCk7CiAgICAgICAgIGlmIChpdCA9PSBtX3NuYXBzaG90cy5lbmQoKSkgewogICAgICAgICAg
ICAgKmVycm9yU3RyaW5nID0gIlByb2ZpbGUgd2Fzbid0IGZvdW5kIjsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQotICAgICAgICBSZWZQdHI8U2NyaXB0SGVhcFNuYXBzaG90PiBzbmFw
c2hvdCA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFJlZlB0cjxTY3JpcHRIZWFwU25hcHNob3Q+IHNu
YXBzaG90ID0gaXQtPnZhbHVlOwogICAgICAgICBwcm9maWxlT2JqZWN0ID0gVHlwZUJ1aWxkZXI6
OlByb2ZpbGVyOjpQcm9maWxlOjpjcmVhdGUoKTsKICAgICAgICAgaWYgKG1fZnJvbnRlbmQpIHsK
ICAgICAgICAgICAgIE91dHB1dFN0cmVhbSBzdHJlYW0obV9mcm9udGVuZCwgdWlkKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmNwcApp
bmRleCA5ZDkyOWM5YTEwYmVkMzRjMjljMjg5NDgxYWIwYTRhNWE2Mjg2OTE0Li45NjA4MTEyMWI1
NDAzNjI5NjE2ZTdiNWQ0ZGI2NWIyNTlkOTViNTIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuY3BwCkBAIC0xMDMsNyArMTAzLDcg
QEAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZvckhlYWRl
cnMoY29uc3QgSFRUUEhlYWRlck1hcCYgaGUKICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBo
ZWFkZXJzT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBIVFRQSGVhZGVy
TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBoZWFkZXJzLmVuZCgpOwogICAgIGZvciAoSFRUUEhl
YWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBoZWFkZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkKLSAgICAgICAgaGVhZGVyc09iamVjdC0+c2V0U3RyaW5nKGl0LT5maXJzdC5zdHJpbmco
KSwgaXQtPnNlY29uZCk7CisgICAgICAgIGhlYWRlcnNPYmplY3QtPnNldFN0cmluZyhpdC0+a2V5
LnN0cmluZygpLCBpdC0+dmFsdWUpOwogICAgIHJldHVybiBoZWFkZXJzT2JqZWN0OwogfQogCkBA
IC0yMTQsOCArMjE0LDggQEAgdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50Ojp3aWxsU2VuZFJl
cXVlc3QodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBEb2N1bWVudEwKICAgICAgICAgSW5zcGVj
dG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBoZWFkZXJzLT5lbmQoKTsKICAgICAgICAg
Zm9yIChJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaGVhZGVycy0+YmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBTdHJpbmcgdmFsdWU7Ci0gICAgICAg
ICAgICBpZiAoaXQtPnNlY29uZC0+YXNTdHJpbmcoJnZhbHVlKSkKLSAgICAgICAgICAgICAgICBy
ZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZChpdC0+Zmlyc3QsIHZhbHVlKTsKKyAgICAgICAgICAg
IGlmIChpdC0+dmFsdWUtPmFzU3RyaW5nKCZ2YWx1ZSkpCisgICAgICAgICAgICAgICAgcmVxdWVz
dC5zZXRIVFRQSGVhZGVyRmllbGQoaXQtPmtleSwgdmFsdWUpOwogICAgICAgICB9CiAgICAgfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmNwcAppbmRleCA3MGEy
NDM5ODQ3YzQ1N2MzOGEzOTBhMzMwMDRhM2Q5ZTFiMWRiNDFkLi5iYWYxMGM5NzFlMTE5NTMyNTc2
YmY0OTQ1NTIyZjM3YjA4MzI1YWZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yU3RhdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JTdGF0ZS5jcHAKQEAgLTgwLDcgKzgwLDcgQEAgYm9vbCBJbnNwZWN0b3JTdGF0ZTo6Z2V0
Qm9vbGVhbihjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSkKICAgICBJbnNwZWN0b3JPYmplY3Q6
Oml0ZXJhdG9yIGl0ID0gbV9wcm9wZXJ0aWVzLT5maW5kKHByb3BlcnR5TmFtZSk7CiAgICAgYm9v
bCB2YWx1ZSA9IGZhbHNlOwogICAgIGlmIChpdCAhPSBtX3Byb3BlcnRpZXMtPmVuZCgpKQotICAg
ICAgICBpdC0+c2Vjb25kLT5hc0Jvb2xlYW4oJnZhbHVlKTsKKyAgICAgICAgaXQtPnZhbHVlLT5h
c0Jvb2xlYW4oJnZhbHVlKTsKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKQEAgLTg5LDcgKzg5LDcg
QEAgU3RyaW5nIEluc3BlY3RvclN0YXRlOjpnZXRTdHJpbmcoY29uc3QgU3RyaW5nJiBwcm9wZXJ0
eU5hbWUpCiAgICAgSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciBpdCA9IG1fcHJvcGVydGllcy0+
ZmluZChwcm9wZXJ0eU5hbWUpOwogICAgIFN0cmluZyB2YWx1ZTsKICAgICBpZiAoaXQgIT0gbV9w
cm9wZXJ0aWVzLT5lbmQoKSkKLSAgICAgICAgaXQtPnNlY29uZC0+YXNTdHJpbmcoJnZhbHVlKTsK
KyAgICAgICAgaXQtPnZhbHVlLT5hc1N0cmluZygmdmFsdWUpOwogICAgIHJldHVybiB2YWx1ZTsK
IH0KIApAQCAtOTgsNyArOTgsNyBAQCBsb25nIEluc3BlY3RvclN0YXRlOjpnZXRMb25nKGNvbnN0
IFN0cmluZyYgcHJvcGVydHlOYW1lKQogICAgIEluc3BlY3Rvck9iamVjdDo6aXRlcmF0b3IgaXQg
PSBtX3Byb3BlcnRpZXMtPmZpbmQocHJvcGVydHlOYW1lKTsKICAgICBsb25nIHZhbHVlID0gMDsK
ICAgICBpZiAoaXQgIT0gbV9wcm9wZXJ0aWVzLT5lbmQoKSkKLSAgICAgICAgaXQtPnNlY29uZC0+
YXNOdW1iZXIoJnZhbHVlKTsKKyAgICAgICAgaXQtPnZhbHVlLT5hc051bWJlcigmdmFsdWUpOwog
ICAgIHJldHVybiB2YWx1ZTsKIH0KIApAQCAtMTA3LDcgKzEwNyw3IEBAIGRvdWJsZSBJbnNwZWN0
b3JTdGF0ZTo6Z2V0RG91YmxlKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKQogICAgIEluc3Bl
Y3Rvck9iamVjdDo6aXRlcmF0b3IgaXQgPSBtX3Byb3BlcnRpZXMtPmZpbmQocHJvcGVydHlOYW1l
KTsKICAgICBkb3VibGUgdmFsdWUgPSAwOwogICAgIGlmIChpdCAhPSBtX3Byb3BlcnRpZXMtPmVu
ZCgpKQotICAgICAgICBpdC0+c2Vjb25kLT5hc051bWJlcigmdmFsdWUpOworICAgICAgICBpdC0+
dmFsdWUtPmFzTnVtYmVyKCZ2YWx1ZSk7CiAgICAgcmV0dXJuIHZhbHVlOwogfQogCkBAIC0xMTgs
NyArMTE4LDcgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvclN0YXRlOjpn
ZXRPYmplY3QoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUKICAgICAgICAgbV9wcm9wZXJ0aWVz
LT5zZXRPYmplY3QocHJvcGVydHlOYW1lLCBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKICAg
ICAgICAgaXQgPSBtX3Byb3BlcnRpZXMtPmZpbmQocHJvcGVydHlOYW1lKTsKICAgICB9Ci0gICAg
cmV0dXJuIGl0LT5zZWNvbmQtPmFzT2JqZWN0KCk7CisgICAgcmV0dXJuIGl0LT52YWx1ZS0+YXNP
YmplY3QoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCmluZGV4IDgzYjQwMmQ2ZWE5Mzlm
NGYzZTVlN2ViNDlkODBlMzBkYTc0NzFmZjcuLjIzNDBjMWRiNTM1OGQ2YWE5YzMxMGNlN2Y3ZmQ4
YjYzYTQ0OTM4MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JTdHlsZVNoZWV0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
U3R5bGVTaGVldC5jcHAKQEAgLTUzNSw3ICs1MzUsNyBAQCBQYXNzUmVmUHRyPFR5cGVCdWlsZGVy
OjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JTdHlsZTo6c3R5bGVXaXRoUHJvcGVydGllcygpIGNv
bgogICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkSW5hY3RpdmF0ZSA9IHRydWU7CiAgICAg
ICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmV2
aW91c1BhcnNlZE9rOwotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gYWN0
aXZlSXQtPnNlY29uZC0+Z2V0Qm9vbGVhbihUeXBlQnVpbGRlcjo6Q1NTOjpDU1NQcm9wZXJ0eTo6
UGFyc2VkT2ssICZwcmV2aW91c1BhcnNlZE9rKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgc3VjY2VzcyA9IGFjdGl2ZUl0LT52YWx1ZS0+Z2V0Qm9vbGVhbihUeXBlQnVpbGRlcjo6Q1NT
OjpDU1NQcm9wZXJ0eTo6UGFyc2VkT2ssICZwcmV2aW91c1BhcnNlZE9rKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChzdWNjZXNzICYmICFwcmV2aW91c1BhcnNlZE9rKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNob3VsZEluYWN0aXZhdGUgPSB0cnVlOwogICAgICAgICAgICAg
ICAgICAgICB9CkBAIC01NDMsNyArNTQzLDcgQEAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NT
OjpDU1NTdHlsZT4gSW5zcGVjdG9yU3R5bGU6OnN0eWxlV2l0aFByb3BlcnRpZXMoKSBjb24KICAg
ICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5LnNl
dChjYW5vbmljYWxQcm9wZXJ0eU5hbWUsIHByb3BlcnR5KTsKIAogICAgICAgICAgICAgICAgIGlm
IChzaG91bGRJbmFjdGl2YXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFjdGl2ZUl0LT5zZWNv
bmQtPnNldFN0YXR1cyhUeXBlQnVpbGRlcjo6Q1NTOjpDU1NQcm9wZXJ0eTo6U3RhdHVzOjpJbmFj
dGl2ZSk7CisgICAgICAgICAgICAgICAgICAgIGFjdGl2ZUl0LT52YWx1ZS0+c2V0U3RhdHVzKFR5
cGVCdWlsZGVyOjpDU1M6OkNTU1Byb3BlcnR5OjpTdGF0dXM6OkluYWN0aXZlKTsKICAgICAgICAg
ICAgICAgICAgICAgcHJvcGVydHlOYW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5LnNldChjYW5v
bmljYWxQcm9wZXJ0eU5hbWUsIHByb3BlcnR5KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9IGVsc2UgewpAQCAtMTAzNSw3ICsxMDM1LDcgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3JT
dHlsZT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6aW5zcGVjdG9yU3R5bGVGb3JJZChjb25zdCBJbnNw
ZWMKICAgICAgICAgUmVmUHRyPEluc3BlY3RvclN0eWxlPiBpbnNwZWN0b3JTdHlsZSA9IEluc3Bl
Y3RvclN0eWxlOjpjcmVhdGUoaWQsIHN0eWxlLCB0aGlzKTsKICAgICAgICAgcmV0dXJuIGluc3Bl
Y3RvclN0eWxlLnJlbGVhc2UoKTsKICAgICB9Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAg
cmV0dXJuIGl0LT52YWx1ZTsKIH0KIAogdm9pZCBJbnNwZWN0b3JTdHlsZVNoZWV0OjpyZW1lbWJl
ckluc3BlY3RvclN0eWxlKFJlZlB0cjxJbnNwZWN0b3JTdHlsZT4gaW5zcGVjdG9yU3R5bGUpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwCmluZGV4IGU0ZWFk
MTdlNTI4NjY4ZDllNTA1YmZkY2IxMDMwZTdiNTBmYjc3NzcuLmFkYTI2MTdjYzBjNGJlYTBhOWYx
OTlmMjU5NzcxNGQyNjkwYjA2ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JWYWx1ZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JWYWx1ZXMuY3BwCkBAIC03MTcsNyArNzE3LDcgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3JW
YWx1ZT4gSW5zcGVjdG9yT2JqZWN0QmFzZTo6Z2V0KGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QK
ICAgICBEaWN0aW9uYXJ5Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fZGF0YS5maW5kKG5hbWUpOwog
ICAgIGlmIChpdCA9PSBtX2RhdGEuZW5kKCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVy
biBpdC0+c2Vjb25kOworICAgIHJldHVybiBpdC0+dmFsdWU7CiB9CiAKIHZvaWQgSW5zcGVjdG9y
T2JqZWN0QmFzZTo6cmVtb3ZlKGNvbnN0IFN0cmluZyYgbmFtZSkKQEAgLTczOSw5ICs3MzksOSBA
QCB2b2lkIEluc3BlY3Rvck9iamVjdEJhc2U6OndyaXRlSlNPTihTdHJpbmdCdWlsZGVyKiBvdXRw
dXQpIGNvbnN0CiAgICAgICAgIEFTU0VSVChpdCAhPSBtX2RhdGEuZW5kKCkpOwogICAgICAgICBp
ZiAoaSkKICAgICAgICAgICAgIG91dHB1dC0+YXBwZW5kKCcsJyk7Ci0gICAgICAgIGRvdWJsZVF1
b3RlU3RyaW5nKGl0LT5maXJzdCwgb3V0cHV0KTsKKyAgICAgICAgZG91YmxlUXVvdGVTdHJpbmco
aXQtPmtleSwgb3V0cHV0KTsKICAgICAgICAgb3V0cHV0LT5hcHBlbmQoJzonKTsKLSAgICAgICAg
aXQtPnNlY29uZC0+d3JpdGVKU09OKG91dHB1dCk7CisgICAgICAgIGl0LT52YWx1ZS0+d3JpdGVK
U09OKG91dHB1dCk7CiAgICAgfQogICAgIG91dHB1dC0+YXBwZW5kKCd9Jyk7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yV29ya2VyQWdlbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvcldvcmtlckFnZW50LmNwcAppbmRleCAy
NGJlZWI1N2QwNzdmMzIwOTcyNjA0NzgzMTc4MjU0MGJiYzEzMjcwLi45ZmM2MWRiN2E3OWRiYTI0
MGQ2NzNmMTg0NzlhYzRkNmQ0Mzc2MmQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yV29ya2VyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JXb3JrZXJBZ2VudC5jcHAKQEAgLTIwNCw5ICsyMDQsOSBAQCB2b2lkIElu
c3BlY3RvcldvcmtlckFnZW50Ojp3b3JrZXJDb250ZXh0VGVybWluYXRlZChXb3JrZXJDb250ZXh0
UHJveHkqIHByb3h5KQogewogICAgIG1fZGVkaWNhdGVkV29ya2Vycy5yZW1vdmUocHJveHkpOwog
ICAgIGZvciAoV29ya2VyQ2hhbm5lbHM6Oml0ZXJhdG9yIGl0ID0gbV9pZFRvQ2hhbm5lbC5iZWdp
bigpOyBpdCAhPSBtX2lkVG9DaGFubmVsLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmIChwcm94
eSA9PSBpdC0+c2Vjb25kLT5wcm94eSgpKSB7Ci0gICAgICAgICAgICBtX2luc3BlY3RvckZyb250
ZW5kLT53b3JrZXIoKS0+d29ya2VyVGVybWluYXRlZChpdC0+Zmlyc3QpOwotICAgICAgICAgICAg
ZGVsZXRlIGl0LT5zZWNvbmQ7CisgICAgICAgIGlmIChwcm94eSA9PSBpdC0+dmFsdWUtPnByb3h5
KCkpIHsKKyAgICAgICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmQtPndvcmtlcigpLT53b3JrZXJU
ZXJtaW5hdGVkKGl0LT5rZXkpOworICAgICAgICAgICAgZGVsZXRlIGl0LT52YWx1ZTsKICAgICAg
ICAgICAgIG1faWRUb0NoYW5uZWwucmVtb3ZlKGl0KTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQpAQCAtMjE2LDE0ICsyMTYsMTQgQEAgdm9pZCBJbnNwZWN0b3JXb3JrZXJBZ2VudDo6
d29ya2VyQ29udGV4dFRlcm1pbmF0ZWQoV29ya2VyQ29udGV4dFByb3h5KiBwcm94eSkKIHZvaWQg
SW5zcGVjdG9yV29ya2VyQWdlbnQ6OmNyZWF0ZVdvcmtlckZyb250ZW5kQ2hhbm5lbHNGb3JFeGlz
dGluZ1dvcmtlcnMoKQogewogICAgIGZvciAoRGVkaWNhdGVkV29ya2Vyczo6aXRlcmF0b3IgaXQg
PSBtX2RlZGljYXRlZFdvcmtlcnMuYmVnaW4oKTsgaXQgIT0gbV9kZWRpY2F0ZWRXb3JrZXJzLmVu
ZCgpOyArK2l0KQotICAgICAgICBjcmVhdGVXb3JrZXJGcm9udGVuZENoYW5uZWwoaXQtPmZpcnN0
LCBpdC0+c2Vjb25kKTsKKyAgICAgICAgY3JlYXRlV29ya2VyRnJvbnRlbmRDaGFubmVsKGl0LT5r
ZXksIGl0LT52YWx1ZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yV29ya2VyQWdlbnQ6OmRlc3Ryb3lX
b3JrZXJGcm9udGVuZENoYW5uZWxzKCkKIHsKICAgICBmb3IgKFdvcmtlckNoYW5uZWxzOjppdGVy
YXRvciBpdCA9IG1faWRUb0NoYW5uZWwuYmVnaW4oKTsgaXQgIT0gbV9pZFRvQ2hhbm5lbC5lbmQo
KTsgKytpdCkgewotICAgICAgICBpdC0+c2Vjb25kLT5kaXNjb25uZWN0RnJvbVdvcmtlckNvbnRl
eHQoKTsKLSAgICAgICAgZGVsZXRlIGl0LT5zZWNvbmQ7CisgICAgICAgIGl0LT52YWx1ZS0+ZGlz
Y29ubmVjdEZyb21Xb3JrZXJDb250ZXh0KCk7CisgICAgICAgIGRlbGV0ZSBpdC0+dmFsdWU7CiAg
ICAgfQogICAgIG1faWRUb0NoYW5uZWwuY2xlYXIoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvTmV0d29ya1Jlc291cmNlc0RhdGEuY3BwCmluZGV4IGUwNWQxM2RlY2IzODE4
ZmNmMWJiODMzMjgzNTlkZWFmYjI5NWRmYWMuLjU5MjMzMDIzMTcxNjU2NTNkOWM1OTk2NTkzYTBj
NWIxYWUxOTczZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9OZXR3b3Jr
UmVzb3VyY2VzRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL05ldHdvcmtS
ZXNvdXJjZXNEYXRhLmNwcApAQCAtMjU5LDEwICsyNTksMTAgQEAgVmVjdG9yPFN0cmluZz4gTmV0
d29ya1Jlc291cmNlc0RhdGE6OnJlbW92ZUNhY2hlZFJlc291cmNlKENhY2hlZFJlc291cmNlKiBj
YWNoZWQKICAgICBSZXNvdXJjZURhdGFNYXA6Oml0ZXJhdG9yIGl0OwogICAgIFJlc291cmNlRGF0
YU1hcDo6aXRlcmF0b3IgZW5kID0gbV9yZXF1ZXN0SWRUb1Jlc291cmNlRGF0YU1hcC5lbmQoKTsK
ICAgICBmb3IgKGl0ID0gbV9yZXF1ZXN0SWRUb1Jlc291cmNlRGF0YU1hcC5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKLSAgICAgICAgUmVzb3VyY2VEYXRhKiByZXNvdXJjZURhdGEgPSBpdC0+
c2Vjb25kOworICAgICAgICBSZXNvdXJjZURhdGEqIHJlc291cmNlRGF0YSA9IGl0LT52YWx1ZTsK
ICAgICAgICAgaWYgKHJlc291cmNlRGF0YS0+Y2FjaGVkUmVzb3VyY2UoKSA9PSBjYWNoZWRSZXNv
dXJjZSkgewogICAgICAgICAgICAgcmVzb3VyY2VEYXRhLT5zZXRDYWNoZWRSZXNvdXJjZSgwKTsK
LSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmQoaXQtPmtleSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTI3OSw5ICsyNzksOSBA
QCB2b2lkIE5ldHdvcmtSZXNvdXJjZXNEYXRhOjpjbGVhcihjb25zdCBTdHJpbmcmIHByZXNlcnZl
ZExvYWRlcklkKQogICAgIFJlc291cmNlRGF0YU1hcDo6aXRlcmF0b3IgaXQ7CiAgICAgUmVzb3Vy
Y2VEYXRhTWFwOjppdGVyYXRvciBlbmQgPSBtX3JlcXVlc3RJZFRvUmVzb3VyY2VEYXRhTWFwLmVu
ZCgpOwogICAgIGZvciAoaXQgPSBtX3JlcXVlc3RJZFRvUmVzb3VyY2VEYXRhTWFwLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBSZXNvdXJjZURhdGEqIHJlc291cmNlRGF0YSA9
IGl0LT5zZWNvbmQ7CisgICAgICAgIFJlc291cmNlRGF0YSogcmVzb3VyY2VEYXRhID0gaXQtPnZh
bHVlOwogICAgICAgICBpZiAoIXByZXNlcnZlZExvYWRlcklkLmlzTnVsbCgpICYmIHJlc291cmNl
RGF0YS0+bG9hZGVySWQoKSA9PSBwcmVzZXJ2ZWRMb2FkZXJJZCkKLSAgICAgICAgICAgIHByZXNl
cnZlZE1hcC5zZXQoaXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsKKyAgICAgICAgICAgIHByZXNlcnZl
ZE1hcC5zZXQoaXQtPmtleSwgaXQtPnZhbHVlKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ZGVsZXRlIHJlc291cmNlRGF0YTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9Dcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuY3BwCmluZGV4IGFiYTJiYTA2M2U1OTMwOGZhZWM0
NGJmYzc4ZGZhZjhkOWI4NDVhMGIuLjliMjZmYzg2YzkwNDM5Mzk1MTVmMTBhZTY5ZWJiNjU1MzBj
MGI0MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpbkFjY2Vz
c0NvbnRyb2wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpbkFjY2Vz
c0NvbnRyb2wuY3BwCkBAIC02OCw3ICs2OCw3IEBAIGJvb2wgaXNTaW1wbGVDcm9zc09yaWdpbkFj
Y2Vzc1JlcXVlc3QoY29uc3QgU3RyaW5nJiBtZXRob2QsIGNvbnN0IEhUVFBIZWFkZXJNYXAmCiAK
ICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBoZWFkZXJNYXAuZW5kKCk7
CiAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGhlYWRlck1hcC5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKCFpc09uQWNjZXNzQ29udHJv
bFNpbXBsZVJlcXVlc3RIZWFkZXJXaGl0ZWxpc3QoaXQtPmZpcnN0LCBpdC0+c2Vjb25kKSkKKyAg
ICAgICAgaWYgKCFpc09uQWNjZXNzQ29udHJvbFNpbXBsZVJlcXVlc3RIZWFkZXJXaGl0ZWxpc3Qo
aXQtPmtleSwgaXQtPnZhbHVlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAK
QEAgLTExNiwxNCArMTE2LDE0IEBAIFJlc291cmNlUmVxdWVzdCBjcmVhdGVBY2Nlc3NDb250cm9s
UHJlZmxpZ2h0UmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlCiAgICAgaWYgKHJl
cXVlc3RIZWFkZXJGaWVsZHMuc2l6ZSgpID4gMCkgewogICAgICAgICBTdHJpbmdCdWlsZGVyIGhl
YWRlckJ1ZmZlcjsKICAgICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBy
ZXF1ZXN0SGVhZGVyRmllbGRzLmJlZ2luKCk7Ci0gICAgICAgIGhlYWRlckJ1ZmZlci5hcHBlbmQo
aXQtPmZpcnN0KTsKKyAgICAgICAgaGVhZGVyQnVmZmVyLmFwcGVuZChpdC0+a2V5KTsKICAgICAg
ICAgKytpdDsKIAogICAgICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBy
ZXF1ZXN0SGVhZGVyRmllbGRzLmVuZCgpOwogICAgICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0
KSB7CiAgICAgICAgICAgICBoZWFkZXJCdWZmZXIuYXBwZW5kKCcsJyk7CiAgICAgICAgICAgICBo
ZWFkZXJCdWZmZXIuYXBwZW5kKCcgJyk7Ci0gICAgICAgICAgICBoZWFkZXJCdWZmZXIuYXBwZW5k
KGl0LT5maXJzdCk7CisgICAgICAgICAgICBoZWFkZXJCdWZmZXIuYXBwZW5kKGl0LT5rZXkpOwog
ICAgICAgICB9CiAKICAgICAgICAgcHJlZmxpZ2h0UmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQo
IkFjY2Vzcy1Db250cm9sLVJlcXVlc3QtSGVhZGVycyIsIGhlYWRlckJ1ZmZlci50b1N0cmluZygp
Lmxvd2VyKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2lu
UHJlZmxpZ2h0UmVzdWx0Q2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3Jp
Z2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUuY3BwCmluZGV4IDA0ZDU4ODE1NWNlNTUzM2JkZGQzZjAy
YjNiZDgxNWVkOWVlMzk5ZWIuLjlkNTFjODdmZTZjNGU3ZDQzOTMzZTQ1ZWVmN2Q1YzE5YmQ1ZTIw
ODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpblByZWZsaWdo
dFJlc3VsdENhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5Q
cmVmbGlnaHRSZXN1bHRDYWNoZS5jcHAKQEAgLTEyNSw4ICsxMjUsOCBAQCBib29sIENyb3NzT3Jp
Z2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGVJdGVtOjphbGxvd3NDcm9zc09yaWdpbkhlYWRlcnMoY29u
c3QgSFRUUEhlYQogewogICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHJl
cXVlc3RIZWFkZXJzLmVuZCgpOwogICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSByZXF1ZXN0SGVhZGVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgaWYgKCFtX2hlYWRlcnMuY29udGFpbnMoaXQtPmZpcnN0KSAmJiAhaXNPbkFjY2Vzc0NvbnRy
b2xTaW1wbGVSZXF1ZXN0SGVhZGVyV2hpdGVsaXN0KGl0LT5maXJzdCwgaXQtPnNlY29uZCkpIHsK
LSAgICAgICAgICAgIGVycm9yRGVzY3JpcHRpb24gPSAiUmVxdWVzdCBoZWFkZXIgZmllbGQgIiAr
IGl0LT5maXJzdC5zdHJpbmcoKSArICIgaXMgbm90IGFsbG93ZWQgYnkgQWNjZXNzLUNvbnRyb2wt
QWxsb3ctSGVhZGVycy4iOworICAgICAgICBpZiAoIW1faGVhZGVycy5jb250YWlucyhpdC0+a2V5
KSAmJiAhaXNPbkFjY2Vzc0NvbnRyb2xTaW1wbGVSZXF1ZXN0SGVhZGVyV2hpdGVsaXN0KGl0LT5r
ZXksIGl0LT52YWx1ZSkpIHsKKyAgICAgICAgICAgIGVycm9yRGVzY3JpcHRpb24gPSAiUmVxdWVz
dCBoZWFkZXIgZmllbGQgIiArIGl0LT5rZXkuc3RyaW5nKCkgKyAiIGlzIG5vdCBhbGxvd2VkIGJ5
IEFjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnMuIjsKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgfQogICAgIH0KQEAgLTE2Nyw3ICsxNjcsNyBAQCBib29sIENyb3NzT3JpZ2lu
UHJlZmxpZ2h0UmVzdWx0Q2FjaGU6OmNhblNraXBQcmVmbGlnaHQoY29uc3QgU3RyaW5nJiBvcmln
aW4sIGNvbgogICAgIGlmIChjYWNoZUl0ID09IG1fcHJlZmxpZ2h0SGFzaE1hcC5lbmQoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGNhY2hlSXQtPnNlY29uZC0+YWxsb3dzUmVx
dWVzdChpbmNsdWRlQ3JlZGVudGlhbHMsIG1ldGhvZCwgcmVxdWVzdEhlYWRlcnMpKQorICAgIGlm
IChjYWNoZUl0LT52YWx1ZS0+YWxsb3dzUmVxdWVzdChpbmNsdWRlQ3JlZGVudGlhbHMsIG1ldGhv
ZCwgcmVxdWVzdEhlYWRlcnMpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIG1fcHJlZmxp
Z2h0SGFzaE1hcC5yZW1vdmUoY2FjaGVJdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50
TG9hZGVyLmNwcAppbmRleCBlYTY5YmY1MmY4ODMzNzU5ZmI5ODgyY2M2NzhjMjAyOTc0ZDk5MzQ4
Li4xMzkyYTI1MDY4YWVhNGI1NDVjM2I2OWMzOGNhOGJjNjQyMTUzZTg0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAKQEAgLTYxNSw3ICs2MTUsNyBAQCB2b2lkIERv
Y3VtZW50TG9hZGVyOjpnZXRTdWJyZXNvdXJjZXMoVmVjdG9yPFBhc3NSZWZQdHI8QXJjaGl2ZVJl
c291cmNlPiA+JiBzdWJyZQogICAgIGNvbnN0IENhY2hlZFJlc291cmNlTG9hZGVyOjpEb2N1bWVu
dFJlc291cmNlTWFwJiBhbGxSZXNvdXJjZXMgPSBkb2N1bWVudC0+Y2FjaGVkUmVzb3VyY2VMb2Fk
ZXIoKS0+YWxsQ2FjaGVkUmVzb3VyY2VzKCk7CiAgICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OkRv
Y3VtZW50UmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGFsbFJlc291cmNlcy5lbmQo
KTsKICAgICBmb3IgKENhY2hlZFJlc291cmNlTG9hZGVyOjpEb2N1bWVudFJlc291cmNlTWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IGFsbFJlc291cmNlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKLSAgICAgICAgUmVmUHRyPEFyY2hpdmVSZXNvdXJjZT4gc3VicmVzb3VyY2UgPSB0aGlzLT5z
dWJyZXNvdXJjZShLVVJMKFBhcnNlZFVSTFN0cmluZywgaXQtPnNlY29uZC0+dXJsKCkpKTsKKyAg
ICAgICAgUmVmUHRyPEFyY2hpdmVSZXNvdXJjZT4gc3VicmVzb3VyY2UgPSB0aGlzLT5zdWJyZXNv
dXJjZShLVVJMKFBhcnNlZFVSTFN0cmluZywgaXQtPnZhbHVlLT51cmwoKSkpOwogICAgICAgICBp
ZiAoc3VicmVzb3VyY2UpCiAgICAgICAgICAgICBzdWJyZXNvdXJjZXMuYXBwZW5kKHN1YnJlc291
cmNlLnJlbGVhc2UoKSk7CiAgICAgfQpAQCAtNjQ3LDggKzY0Nyw4IEBAIHZvaWQgRG9jdW1lbnRM
b2FkZXI6OnN1YnN0aXR1dGVSZXNvdXJjZURlbGl2ZXJ5VGltZXJGaXJlZChUaW1lcjxEb2N1bWVu
dExvYWRlcj4qCiAKICAgICBTdWJzdGl0dXRlUmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IGNvcHkuZW5kKCk7CiAgICAgZm9yIChTdWJzdGl0dXRlUmVzb3VyY2VNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gY29weS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgUmVm
UHRyPFJlc291cmNlTG9hZGVyPiBsb2FkZXIgPSBpdC0+Zmlyc3Q7Ci0gICAgICAgIFN1YnN0aXR1
dGVSZXNvdXJjZSogcmVzb3VyY2UgPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICBSZWZQdHI8
UmVzb3VyY2VMb2FkZXI+IGxvYWRlciA9IGl0LT5rZXk7CisgICAgICAgIFN1YnN0aXR1dGVSZXNv
dXJjZSogcmVzb3VyY2UgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgIAogICAgICAgICBpZiAo
cmVzb3VyY2UpIHsKICAgICAgICAgICAgIFNoYXJlZEJ1ZmZlciogZGF0YSA9IHJlc291cmNlLT5k
YXRhKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvTWFpblJlc291cmNlTG9h
ZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9NYWluUmVzb3VyY2VMb2FkZXIuY3BwCmlu
ZGV4IDA4MzZkOGNjMDBlODkwNThlOTgzMjNiYjZkNjA2NDUzZmNlOWM1MzcuLjMzNTJlNjQzNmE2
YTVmNjFjOTZhOTgyMGYxOTM3MjY2YmUxNjFkNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9NYWluUmVzb3VyY2VMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9NYWluUmVzb3VyY2VMb2FkZXIuY3BwCkBAIC0zNjgsNyArMzY4LDcgQEAgdm9pZCBNYWluUmVz
b3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiBy
KQogCiAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSByLmh0dHBIZWFkZXJG
aWVsZHMoKS5maW5kKEF0b21pY1N0cmluZygieC1mcmFtZS1vcHRpb25zIikpOwogICAgIGlmIChp
dCAhPSByLmh0dHBIZWFkZXJGaWVsZHMoKS5lbmQoKSkgewotICAgICAgICBTdHJpbmcgY29udGVu
dCA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFN0cmluZyBjb250ZW50ID0gaXQtPnZhbHVlOwogICAg
ICAgICBpZiAobV9mcmFtZS0+bG9hZGVyKCktPnNob3VsZEludGVycnVwdExvYWRGb3JYRnJhbWVP
cHRpb25zKGNvbnRlbnQsIHIudXJsKCkpKSB7CiAgICAgICAgICAgICBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OmNvbnRpbnVlQWZ0ZXJYRnJhbWVPcHRpb25zRGVuaWVkKG1fZnJhbWUuZ2V0KCks
IGRvY3VtZW50TG9hZGVyKCksIGlkZW50aWZpZXIoKSwgcik7CiAgICAgICAgICAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKFN0cmluZywgY29uc29sZU1lc3NhZ2UsICgiUmVmdXNlZCB0byBkaXNwbGF5
IGRvY3VtZW50IGJlY2F1c2UgZGlzcGxheSBmb3JiaWRkZW4gYnkgWC1GcmFtZS1PcHRpb25zLlxu
IikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFNjaGVk
dWxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNw
cAppbmRleCA4MDA0ZDhmMmViMmQ4YmMzNjA2YTA2OWZjN2VlYTM1MWFmY2ZjZGFhLi44ZWI0NGQ0
OWQyOWE2ODQ2NjRkODMyNWNhMjYxZjU3NWM2NDEwYjYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcApAQCAtMTc0LDcgKzE3NCw3IEBAIHZv
aWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhSZXNvdXJjZUxv
YWRQcmlvcml0eSBtaW5pbXVtUHJpCiAgICAgbV9ob3N0cy5jaGVja0NvbnNpc3RlbmN5KCk7CiAg
ICAgSG9zdE1hcDo6aXRlcmF0b3IgZW5kID0gbV9ob3N0cy5lbmQoKTsKICAgICBmb3IgKEhvc3RN
YXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2hvc3RzLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIp
Ci0gICAgICAgIGhvc3RzVG9TZXJ2ZS5hcHBlbmQoaXRlci0+c2Vjb25kKTsKKyAgICAgICAgaG9z
dHNUb1NlcnZlLmFwcGVuZChpdGVyLT52YWx1ZSk7CiAKICAgICBpbnQgc2l6ZSA9IGhvc3RzVG9T
ZXJ2ZS5zaXplKCk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlLmNwcApp
bmRleCA2M2NkN2JiYmZhODc4OWY0YWRiM2RmNTJjYjRlOWMxN2RkNzE1OTQ0Li5iN2VhNjUyNGM0
MDM5NzVmZjBkZjk0NmEyZjBkMDExY2IxNzAwYTZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGUuY3BwCkBAIC0xMDAsMTEgKzEwMCwx
MSBAQCB1bnNpZ25lZCBBcHBsaWNhdGlvbkNhY2hlOjpyZW1vdmVSZXNvdXJjZShjb25zdCBTdHJp
bmcmIHVybCkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAvLyBUaGUgcmVzb3VyY2UgZXhpc3Rz
LCBnZXQgaXRzIHR5cGUgc28gd2UgY2FuIHJldHVybiBpdC4KLSAgICB1bnNpZ25lZCB0eXBlID0g
aXQtPnNlY29uZC0+dHlwZSgpOworICAgIHVuc2lnbmVkIHR5cGUgPSBpdC0+dmFsdWUtPnR5cGUo
KTsKIAogICAgIG1fcmVzb3VyY2VzLnJlbW92ZShpdCk7CiAKLSAgICBtX2VzdGltYXRlZFNpemVJ
blN0b3JhZ2UgLT0gaXQtPnNlY29uZC0+ZXN0aW1hdGVkU2l6ZUluU3RvcmFnZSgpOworICAgIG1f
ZXN0aW1hdGVkU2l6ZUluU3RvcmFnZSAtPSBpdC0+dmFsdWUtPmVzdGltYXRlZFNpemVJblN0b3Jh
Z2UoKTsKIAogICAgIHJldHVybiB0eXBlOwogfSAgICAKQEAgLTE4MCw3ICsxODAsNyBAQCB2b2lk
IEFwcGxpY2F0aW9uQ2FjaGU6OmNsZWFyU3RvcmFnZUlEKCkKICAgICAKICAgICBSZXNvdXJjZU1h
cDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9yZXNvdXJjZXMuZW5kKCk7CiAgICAgZm9yIChSZXNv
dXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPmNsZWFyU3RvcmFnZUlEKCk7CisgICAgICAg
IGl0LT52YWx1ZS0+Y2xlYXJTdG9yYWdlSUQoKTsKIH0KICAgICAKIHZvaWQgQXBwbGljYXRpb25D
YWNoZTo6ZGVsZXRlQ2FjaGVGb3JPcmlnaW4oU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKQEAgLTIx
OCw4ICsyMTgsOCBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGU6OmR1bXAoKQogICAgIEhhc2hNYXA8
U3RyaW5nLCBSZWZQdHI8QXBwbGljYXRpb25DYWNoZVJlc291cmNlPiA+Ojpjb25zdF9pdGVyYXRv
ciBlbmQgPSBtX3Jlc291cmNlcy5lbmQoKTsKICAgICAKICAgICBmb3IgKEhhc2hNYXA8U3RyaW5n
LCBSZWZQdHI8QXBwbGljYXRpb25DYWNoZVJlc291cmNlPiA+Ojpjb25zdF9pdGVyYXRvciBpdCA9
IG1fcmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBwcmludGYo
IiVzICIsIGl0LT5maXJzdC5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIEFwcGxpY2F0aW9uQ2Fj
aGVSZXNvdXJjZTo6ZHVtcFR5cGUoaXQtPnNlY29uZC0+dHlwZSgpKTsKKyAgICAgICAgcHJpbnRm
KCIlcyAiLCBpdC0+a2V5LmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgQXBwbGljYXRpb25DYWNo
ZVJlc291cmNlOjpkdW1wVHlwZShpdC0+dmFsdWUtPnR5cGUoKSk7CiAgICAgfQogfQogI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25D
YWNoZUdyb3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlv
bkNhY2hlR3JvdXAuY3BwCmluZGV4IDkyMDgyYzU2YmUxMWM5ZGMyNTg1MGY3YTk0YmMyNzkzYjc3
ZjVmNWYuLjI3M2E2MDEwZDgyNTVmYjk0YWE2MDUxYjkyZjY5MmI0ODgzN2M5OTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hl
R3JvdXAuY3BwCkBAIC03NzcsOSArNzc3LDkgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6
OmRpZEZpbmlzaExvYWRpbmdNYW5pZmVzdCgpCiAgICAgaWYgKGlzVXBncmFkZUF0dGVtcHQpIHsK
ICAgICAgICAgQXBwbGljYXRpb25DYWNoZTo6UmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IG1fbmV3ZXN0Q2FjaGUtPmVuZCgpOwogICAgICAgICBmb3IgKEFwcGxpY2F0aW9uQ2FjaGU6
OlJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fbmV3ZXN0Q2FjaGUtPmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgdW5zaWduZWQgdHlwZSA9IGl0LT5zZWNv
bmQtPnR5cGUoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIHR5cGUgPSBpdC0+dmFsdWUtPnR5cGUo
KTsKICAgICAgICAgICAgIGlmICh0eXBlICYgQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpNYXN0
ZXIpCi0gICAgICAgICAgICAgICAgYWRkRW50cnkoaXQtPmZpcnN0LCB0eXBlKTsKKyAgICAgICAg
ICAgICAgICBhZGRFbnRyeShpdC0+a2V5LCB0eXBlKTsKICAgICAgICAgfQogICAgIH0KICAgICAK
QEAgLTEwMTgsNyArMTAxOCw3IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpzdGFydExv
YWRpbmdFbnRyeSgpCiAKICAgICBBU1NFUlQoIW1fY3VycmVudEhhbmRsZSk7CiAgICAgCi0gICAg
bV9jdXJyZW50SGFuZGxlID0gY3JlYXRlUmVzb3VyY2VIYW5kbGUoS1VSTChQYXJzZWRVUkxTdHJp
bmcsIGl0LT5maXJzdCksIG1fbmV3ZXN0Q2FjaGUgPyBtX25ld2VzdENhY2hlLT5yZXNvdXJjZUZv
clVSTChpdC0+Zmlyc3QpIDogMCk7CisgICAgbV9jdXJyZW50SGFuZGxlID0gY3JlYXRlUmVzb3Vy
Y2VIYW5kbGUoS1VSTChQYXJzZWRVUkxTdHJpbmcsIGl0LT5rZXkpLCBtX25ld2VzdENhY2hlID8g
bV9uZXdlc3RDYWNoZS0+cmVzb3VyY2VGb3JVUkwoaXQtPmtleSkgOiAwKTsKIH0KIAogdm9pZCBB
cHBsaWNhdGlvbkNhY2hlR3JvdXA6OmRlbGl2ZXJEZWxheWVkTWFpblJlc291cmNlcygpCkBAIC0x
MDY3LDcgKzEwNjcsNyBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6YWRkRW50cnkoY29u
c3QgU3RyaW5nJiB1cmwsIHVuc2lnbmVkIHR5cGUpCiAgICAgRW50cnlNYXA6OkFkZFJlc3VsdCBy
ZXN1bHQgPSBtX3BlbmRpbmdFbnRyaWVzLmFkZCh1cmwsIHR5cGUpOwogICAgIAogICAgIGlmICgh
cmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kIHw9IHR5
cGU7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgfD0gdHlwZTsKIH0KIAogdm9pZCBB
cHBsaWNhdGlvbkNhY2hlR3JvdXA6OmFzc29jaWF0ZURvY3VtZW50TG9hZGVyV2l0aENhY2hlKERv
Y3VtZW50TG9hZGVyKiBsb2FkZXIsIEFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hlKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVIb3N0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlSG9zdC5j
cHAKaW5kZXggODAxYzFiMzY3MDMxYTMzOWRiNDQ3MDdhOTJkMWJjODBkNDFkOGM3OS4uZmU5ZjAx
MGEwZmU2NTAzZDBiYzVlNWI5Mjc3MGEzZjdiNjQzNDRmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVIb3N0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUhvc3QuY3BwCkBAIC0y
ODIsNyArMjgyLDcgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6ZmlsbFJlc291cmNlTGlz
dChSZXNvdXJjZUluZm9MaXN0KiByZXNvdXJjZXMpCiAgICAgIAogICAgIEFwcGxpY2F0aW9uQ2Fj
aGU6OlJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBjYWNoZS0+ZW5kKCk7CiAgICAg
Zm9yIChBcHBsaWNhdGlvbkNhY2hlOjpSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBj
YWNoZS0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFJlZlB0cjxBcHBsaWNh
dGlvbkNhY2hlUmVzb3VyY2U+IHJlc291cmNlID0gaXQtPnNlY29uZDsKKyAgICAgICAgUmVmUHRy
PEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4gcmVzb3VyY2UgPSBpdC0+dmFsdWU7CiAgICAgICAg
IHVuc2lnbmVkIHR5cGUgPSByZXNvdXJjZS0+dHlwZSgpOwogICAgICAgICBib29sIGlzTWFzdGVy
ICAgPSB0eXBlICYgQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpNYXN0ZXI7CiAgICAgICAgIGJv
b2wgaXNNYW5pZmVzdCA9IHR5cGUgJiBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6Ok1hbmlmZXN0
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9u
Q2FjaGVSZXNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGlj
YXRpb25DYWNoZVJlc291cmNlLmNwcAppbmRleCBkODMxNzg0YjQxOTZhZGYzODJjZjM1NWUwZWVm
MDJkNmE3YTgwNzkwLi45OTc2NmUzYTY2YmQzNmViNDJmZWQyYTkyNjlkMzRiMDY2MTk0ZDdmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNo
ZVJlc291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGlj
YXRpb25DYWNoZVJlc291cmNlLmNwcApAQCAtNTQsNyArNTQsNyBAQCBpbnQ2NF90IEFwcGxpY2F0
aW9uQ2FjaGVSZXNvdXJjZTo6ZXN0aW1hdGVkU2l6ZUluU3RvcmFnZSgpCiAKICAgICBIVFRQSGVh
ZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSByZXNwb25zZSgpLmh0dHBIZWFkZXJGaWVsZHMo
KS5lbmQoKTsKICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcmVz
cG9uc2UoKS5odHRwSGVhZGVyRmllbGRzKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAg
ICAgICBtX2VzdGltYXRlZFNpemVJblN0b3JhZ2UgKz0gKGl0LT5maXJzdC5sZW5ndGgoKSArIGl0
LT5zZWNvbmQubGVuZ3RoKCkgKyAyKSAqIHNpemVvZihVQ2hhcik7CisgICAgICAgIG1fZXN0aW1h
dGVkU2l6ZUluU3RvcmFnZSArPSAoaXQtPmtleS5sZW5ndGgoKSArIGl0LT52YWx1ZS5sZW5ndGgo
KSArIDIpICogc2l6ZW9mKFVDaGFyKTsKIAogICAgIG1fZXN0aW1hdGVkU2l6ZUluU3RvcmFnZSAr
PSB1cmwoKS5zdHJpbmcoKS5sZW5ndGgoKSAqIHNpemVvZihVQ2hhcik7CiAgICAgbV9lc3RpbWF0
ZWRTaXplSW5TdG9yYWdlICs9IHNpemVvZihpbnQpOyAvLyByZXNwb25zZSgpLm1faHR0cFN0YXR1
c0NvZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNh
dGlvbkNhY2hlU3RvcmFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBw
bGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwCmluZGV4IDc3OGU0ZTM4ODg5MWQzMzQ3MjBjZDIxNTI1
NmQ0ZGFkMzliMjJmMWQuLmQxYzk3ZTRiMmFhMTYwOGZjOTQ4ZWE2MzJjMmJhNmVkMmE3ZTUxM2Qg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNh
Y2hlU3RvcmFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxp
Y2F0aW9uQ2FjaGVTdG9yYWdlLmNwcApAQCAtMTM3LDggKzEzNyw4IEBAIEFwcGxpY2F0aW9uQ2Fj
aGVHcm91cCogQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmZpbmRPckNyZWF0ZUNhY2hlR3JvdXAo
Y29uc3QgS1VSCiAgICAgQ2FjaGVHcm91cE1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fY2FjaGVz
SW5NZW1vcnkuYWRkKG1hbmlmZXN0VVJMLCAwKTsKICAgICAKICAgICBpZiAoIXJlc3VsdC5pc05l
d0VudHJ5KSB7Ci0gICAgICAgIEFTU0VSVChyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7Ci0gICAg
ICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgQVNTRVJUKHJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUpOworICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZTsKICAgICB9CiAKICAgICAvLyBMb29rIHVwIHRoZSBncm91cCBpbiB0aGUgZGF0YWJhc2UKQEAg
LTE1MCw3ICsxNTAsNyBAQCBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIEFwcGxpY2F0aW9uQ2FjaGVT
dG9yYWdlOjpmaW5kT3JDcmVhdGVDYWNoZUdyb3VwKGNvbnN0IEtVUgogICAgICAgICBtX2NhY2hl
SG9zdFNldC5hZGQodXJsSG9zdEhhc2gobWFuaWZlc3RVUkwpKTsKICAgICB9CiAgICAgCi0gICAg
cmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBncm91cDsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZh
bHVlID0gZ3JvdXA7CiAgICAgCiAgICAgcmV0dXJuIGdyb3VwOwogfQpAQCAtMTk3LDcgKzE5Nyw3
IEBAIEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmNhY2hl
R3JvdXBGb3JVUkwoY29uc3QgS1VSTCYgdXJsCiAgICAgLy8gQ2hlY2sgaWYgYSBjYWNoZSBhbHJl
YWR5IGV4aXN0cyBpbiBtZW1vcnkuCiAgICAgQ2FjaGVHcm91cE1hcDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gbV9jYWNoZXNJbk1lbW9yeS5lbmQoKTsKICAgICBmb3IgKENhY2hlR3JvdXBNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbV9jYWNoZXNJbk1lbW9yeS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKLSAgICAgICAgQXBwbGljYXRpb25DYWNoZUdyb3VwKiBncm91cCA9IGl0LT5zZWNvbmQ7
CisgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogZ3JvdXAgPSBpdC0+dmFsdWU7CiAKICAg
ICAgICAgQVNTRVJUKCFncm91cC0+aXNPYnNvbGV0ZSgpKTsKIApAQCAtMjY4LDcgKzI2OCw3IEBA
IEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmZhbGxiYWNr
Q2FjaGVHcm91cEZvclVSTChjb25zdCBLCiAgICAgLy8gQ2hlY2sgaWYgYW4gYXBwcm9wcmlhdGUg
Y2FjaGUgYWxyZWFkeSBleGlzdHMgaW4gbWVtb3J5LgogICAgIENhY2hlR3JvdXBNYXA6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IG1fY2FjaGVzSW5NZW1vcnkuZW5kKCk7CiAgICAgZm9yIChDYWNoZUdy
b3VwTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fY2FjaGVzSW5NZW1vcnkuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogZ3JvdXAgPSBp
dC0+c2Vjb25kOworICAgICAgICBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIGdyb3VwID0gaXQtPnZh
bHVlOwogICAgICAgICAKICAgICAgICAgQVNTRVJUKCFncm91cC0+aXNPYnNvbGV0ZSgpKTsKIApA
QCAtNzEzLDEzICs3MTMsMTMgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmUo
QXBwbGljYXRpb25DYWNoZSogY2FjaGUsIFJlc291cmNlU3RvcmFnZUlESm8KICAgICB7CiAgICAg
ICAgIEFwcGxpY2F0aW9uQ2FjaGU6OlJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBj
YWNoZS0+ZW5kKCk7CiAgICAgICAgIGZvciAoQXBwbGljYXRpb25DYWNoZTo6UmVzb3VyY2VNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY2FjaGUtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewot
ICAgICAgICAgICAgdW5zaWduZWQgb2xkU3RvcmFnZUlEID0gaXQtPnNlY29uZC0+c3RvcmFnZUlE
KCk7Ci0gICAgICAgICAgICBpZiAoIXN0b3JlKGl0LT5zZWNvbmQuZ2V0KCksIGNhY2hlU3RvcmFn
ZUlEKSkKKyAgICAgICAgICAgIHVuc2lnbmVkIG9sZFN0b3JhZ2VJRCA9IGl0LT52YWx1ZS0+c3Rv
cmFnZUlEKCk7CisgICAgICAgICAgICBpZiAoIXN0b3JlKGl0LT52YWx1ZS5nZXQoKSwgY2FjaGVT
dG9yYWdlSUQpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAg
Ly8gU3RvcmluZyB0aGUgcmVzb3VyY2Ugc3VjY2VlZGVkLiBMb2cgaXRzIG9sZCBzdG9yYWdlSUQg
aW4gY2FzZQogICAgICAgICAgICAgLy8gaXQgbmVlZHMgdG8gYmUgcmVzdG9yZWQgbGF0ZXIuCi0g
ICAgICAgICAgICBzdG9yYWdlSURKb3VybmFsLT5hZGQoaXQtPnNlY29uZC5nZXQoKSwgb2xkU3Rv
cmFnZUlEKTsKKyAgICAgICAgICAgIHN0b3JhZ2VJREpvdXJuYWwtPmFkZChpdC0+dmFsdWUuZ2V0
KCksIG9sZFN0b3JhZ2VJRCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC04MzksOSArODM5
LDkgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmUoQXBwbGljYXRpb25DYWNo
ZVJlc291cmNlKiByZXNvdXJjZSwgdW5zaWduZWQKICAgICAKICAgICBIVFRQSGVhZGVyTWFwOjpj
b25zdF9pdGVyYXRvciBlbmQgPSByZXNvdXJjZS0+cmVzcG9uc2UoKS5odHRwSGVhZGVyRmllbGRz
KCkuZW5kKCk7CiAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHJl
c291cmNlLT5yZXNwb25zZSgpLmh0dHBIZWFkZXJGaWVsZHMoKS5iZWdpbigpOyBpdCE9IGVuZDsg
KytpdCkgewotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+Zmlyc3QpOworICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+a2V5KTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQoKFVDaGFyKSc6Jyk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5zZWNv
bmQpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+dmFsdWUpOwogICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZCgoVUNoYXIpJ1xuJyk7CiAgICAgfQogICAgIApAQCAtMTI0MSw3
ICsxMjQxLDcgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZW1wdHkoKQogICAgIC8v
IHVudGlsIGEgY2FjaGUgdXBkYXRlIHByb2Nlc3MgaGFzIGJlZW4gaW5pdGlhdGVkLgogICAgIENh
Y2hlR3JvdXBNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fY2FjaGVzSW5NZW1vcnkuZW5kKCk7
CiAgICAgZm9yIChDYWNoZUdyb3VwTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fY2FjaGVzSW5N
ZW1vcnkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5jbGVh
clN0b3JhZ2VJRCgpOworICAgICAgICBpdC0+dmFsdWUtPmNsZWFyU3RvcmFnZUlEKCk7CiAgICAg
CiAgICAgY2hlY2tGb3JEZWxldGVkUmVzb3VyY2VzKCk7CiB9CkBAIC0xMzAzLDcgKzEzMDMsNyBA
QCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZUNvcHlPZkNhY2hlKGNvbnN0IFN0
cmluZyYgY2FjaGVEaXJlY3RvcnksIEFwcAogICAgIC8vIFRyYXZlcnNlIHRoZSBjYWNoZSBhbmQg
YWRkIGNvcGllcyBvZiBhbGwgcmVzb3VyY2VzLgogICAgIEFwcGxpY2F0aW9uQ2FjaGU6OlJlc291
cmNlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBjYWNoZS0+ZW5kKCk7CiAgICAgZm9yIChBcHBs
aWNhdGlvbkNhY2hlOjpSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjYWNoZS0+YmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJj
ZSogcmVzb3VyY2UgPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICBBcHBsaWNhdGlvbkNhY2hl
UmVzb3VyY2UqIHJlc291cmNlID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAKICAgICAgICAg
UmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4gcmVzb3VyY2VDb3B5ID0gQXBwbGljYXRp
b25DYWNoZVJlc291cmNlOjpjcmVhdGUocmVzb3VyY2UtPnVybCgpLCByZXNvdXJjZS0+cmVzcG9u
c2UoKSwgcmVzb3VyY2UtPnR5cGUoKSwgcmVzb3VyY2UtPmRhdGEoKSwgcmVzb3VyY2UtPnBhdGgo
KSk7CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUv
QXJjaGl2ZUZhY3RvcnkuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvQXJjaGl2
ZUZhY3RvcnkuY3BwCmluZGV4IGY2OTcwYWE1MzFiNWU1YTY1YzVhNjA1MjliMTVlMDU0Mzg2YzQ2
NWYuLmNkMzg3NmFhZWZhYzkwNGNiNGNkNDkwYzcyODg5MWUwMzg3NTY0ZGMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL0FyY2hpdmVGYWN0b3J5LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9BcmNoaXZlRmFjdG9yeS5jcHAKQEAgLTk1LDcg
Kzk1LDcgQEAgdm9pZCBBcmNoaXZlRmFjdG9yeTo6cmVnaXN0ZXJLbm93bkFyY2hpdmVNSU1FVHlw
ZXMoKQogICAgIEFyY2hpdmVNSU1FVHlwZXNNYXA6Oml0ZXJhdG9yIGVuZCA9IGFyY2hpdmVNSU1F
VHlwZXMoKS5lbmQoKTsKIAogICAgIGZvciAoOyBpICE9IGVuZDsgKytpKQotICAgICAgICBtaW1l
VHlwZXMuYWRkKGktPmZpcnN0KTsKKyAgICAgICAgbWltZVR5cGVzLmFkZChpLT5rZXkpOwogfQog
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmF3UmVz
b3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNl
LmNwcAppbmRleCA0ZTQzMTMxYjFkMjU0ODM3MWY3MTU3NGY1MTU2NTdlM2Q0MmQwODU0Li4xMjg4
ZmUxN2NmMDkzZmI0NGQxYmM0MGM2ODY5NTJhMDJhNGY0MDI4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5jcHAKQEAgLTE1Myw4ICsxNTMs
OCBAQCBib29sIENhY2hlZFJhd1Jlc291cmNlOjpjYW5SZXVzZShjb25zdCBSZXNvdXJjZVJlcXVl
c3QmIG5ld1JlcXVlc3QpIGNvbnN0CiAKICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRv
ciBlbmQgPSBuZXdIZWFkZXJzLmVuZCgpOwogICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3Rf
aXRlcmF0b3IgaSA9IG5ld0hlYWRlcnMuYmVnaW4oKTsgaSAhPSBlbmQ7ICsraSkgewotICAgICAg
ICBBdG9taWNTdHJpbmcgaGVhZGVyTmFtZSA9IGktPmZpcnN0OwotICAgICAgICBpZiAoaS0+c2Vj
b25kICE9IG9sZEhlYWRlcnMuZ2V0KGhlYWRlck5hbWUpKQorICAgICAgICBBdG9taWNTdHJpbmcg
aGVhZGVyTmFtZSA9IGktPmtleTsKKyAgICAgICAgaWYgKGktPnZhbHVlICE9IG9sZEhlYWRlcnMu
Z2V0KGhlYWRlck5hbWUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBy
ZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZWRSZXNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3Vy
Y2UuY3BwCmluZGV4IGQ3YWJjYWU4NDBjNzk2ZDYxYWI2MzYwNDVmZDVhZjVkZDcyYzc5MTYuLmFk
ZTk4M2U4NjVlNjRiODdjZTFjMTFjODM1ZWY0NzVlZDZiNzEzN2IgMTAwNzU1Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNwcApAQCAtNjEyLDggKzYxMiw4IEBA
IHZvaWQgQ2FjaGVkUmVzb3VyY2U6OnN3aXRjaENsaWVudHNUb1JldmFsaWRhdGVkUmVzb3VyY2Uo
KQogICAgIFZlY3RvcjxDYWNoZWRSZXNvdXJjZUNsaWVudCo+IGNsaWVudHNUb01vdmU7CiAgICAg
SGFzaENvdW50ZWRTZXQ8Q2FjaGVkUmVzb3VyY2VDbGllbnQqPjo6aXRlcmF0b3IgZW5kMiA9IG1f
Y2xpZW50cy5lbmQoKTsKICAgICBmb3IgKEhhc2hDb3VudGVkU2V0PENhY2hlZFJlc291cmNlQ2xp
ZW50Kj46Oml0ZXJhdG9yIGl0ID0gbV9jbGllbnRzLmJlZ2luKCk7IGl0ICE9IGVuZDI7ICsraXQp
IHsKLSAgICAgICAgQ2FjaGVkUmVzb3VyY2VDbGllbnQqIGNsaWVudCA9IGl0LT5maXJzdDsKLSAg
ICAgICAgdW5zaWduZWQgY291bnQgPSBpdC0+c2Vjb25kOworICAgICAgICBDYWNoZWRSZXNvdXJj
ZUNsaWVudCogY2xpZW50ID0gaXQtPmtleTsKKyAgICAgICAgdW5zaWduZWQgY291bnQgPSBpdC0+
dmFsdWU7CiAgICAgICAgIHdoaWxlIChjb3VudCkgewogICAgICAgICAgICAgY2xpZW50c1RvTW92
ZS5hcHBlbmQoY2xpZW50KTsKICAgICAgICAgICAgIC0tY291bnQ7CkBAIC02NDcsOSArNjQ3LDkg
QEAgdm9pZCBDYWNoZWRSZXNvdXJjZTo6dXBkYXRlUmVzcG9uc2VBZnRlclJldmFsaWRhdGlvbihj
b25zdCBSZXNvdXJjZVJlc3BvbnNlJiB2YWwKICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVy
YXRvciBlbmQgPSBuZXdIZWFkZXJzLmVuZCgpOwogICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBuZXdIZWFkZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewog
ICAgICAgICAvLyBEb24ndCBhbGxvdyAzMDQgcmVzcG9uc2UgdG8gdXBkYXRlIGNvbnRlbnQgaGVh
ZGVycywgdGhlc2UgY2FuJ3QgY2hhbmdlIGJ1dCBzb21lIHNlcnZlcnMgc2VuZCB3cm9uZyB2YWx1
ZXMuCi0gICAgICAgIGlmIChpdC0+Zmlyc3Quc3RhcnRzV2l0aChjb250ZW50SGVhZGVyUHJlZml4
LCBmYWxzZSkpCisgICAgICAgIGlmIChpdC0+a2V5LnN0YXJ0c1dpdGgoY29udGVudEhlYWRlclBy
ZWZpeCwgZmFsc2UpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIG1fcmVzcG9uc2Uu
c2V0SFRUUEhlYWRlckZpZWxkKGl0LT5maXJzdCwgaXQtPnNlY29uZCk7CisgICAgICAgIG1fcmVz
cG9uc2Uuc2V0SFRUUEhlYWRlckZpZWxkKGl0LT5rZXksIGl0LT52YWx1ZSk7CiAgICAgfQogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VD
bGllbnRXYWxrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJj
ZUNsaWVudFdhbGtlci5oCmluZGV4IDhiMzc4MGI1ZTY0YjIxNDM0NjI4OTZiZGEyYTZhMjY1YTVh
OGEwNzQuLjc5MzNiMGI4MTRjNTIxMjU2ZTA3NjBmODYxYjQzMTA5N2I4OWI1OWMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUNsaWVu
dFdhbGtlci5oCkBAIC00Miw3ICs0Miw3IEBAIHB1YmxpYzoKICAgICAgICAgSXRlcmF0b3IgZW5k
ID0gc2V0LmVuZCgpOwogICAgICAgICBzaXplX3QgY2xpZW50SW5kZXggPSAwOwogICAgICAgICBm
b3IgKEl0ZXJhdG9yIGN1cnJlbnQgPSBzZXQuYmVnaW4oKTsgY3VycmVudCAhPSBlbmQ7ICsrY3Vy
cmVudCkKLSAgICAgICAgICAgIG1fY2xpZW50VmVjdG9yW2NsaWVudEluZGV4KytdID0gY3VycmVu
dC0+Zmlyc3Q7CisgICAgICAgICAgICBtX2NsaWVudFZlY3RvcltjbGllbnRJbmRleCsrXSA9IGN1
cnJlbnQtPmtleTsKICAgICB9CiAKICAgICBUKiBuZXh0KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwCmluZGV4IGIyNThjMDU3
ZmYzYWYxMTE5NTgwZGUxYWY2MDg0MDUzMmY2YTBhNzUuLjU1YzIxNDJiOWQxMGUwOGRlOGVkMGVh
ZWY3NTc5NDUxYmFkYzZlNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNo
ZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2Nh
Y2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcApAQCAtMTI2LDcgKzEyNiw3IEBAIENhY2hlZFJl
c291cmNlTG9hZGVyOjp+Q2FjaGVkUmVzb3VyY2VMb2FkZXIoKQogICAgIGNsZWFyUHJlbG9hZHMo
KTsKICAgICBEb2N1bWVudFJlc291cmNlTWFwOjppdGVyYXRvciBlbmQgPSBtX2RvY3VtZW50UmVz
b3VyY2VzLmVuZCgpOwogICAgIGZvciAoRG9jdW1lbnRSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQg
PSBtX2RvY3VtZW50UmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAg
aXQtPnNlY29uZC0+c2V0T3duaW5nQ2FjaGVkUmVzb3VyY2VMb2FkZXIoMCk7CisgICAgICAgIGl0
LT52YWx1ZS0+c2V0T3duaW5nQ2FjaGVkUmVzb3VyY2VMb2FkZXIoMCk7CiAKICAgICAvLyBNYWtl
IHN1cmUgbm8gcmVxdWVzdHMgc3RpbGwgcG9pbnQgdG8gdGhpcyBDYWNoZWRSZXNvdXJjZUxvYWRl
cgogICAgIEFTU0VSVChtX3JlcXVlc3RDb3VudCA9PSAwKTsKQEAgLTQxOSw3ICs0MTksNyBAQCBD
YWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSZXNvdXJjZT4gQ2FjaGVkUmVzb3VyY2VMb2FkZXI6
OnJlcXVlc3RSZXNvdXJjZShDYWNoZQogICAgIGlmIChtZW1vcnlDYWNoZSgpLT5kaXNhYmxlZCgp
KSB7CiAgICAgICAgIERvY3VtZW50UmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9kb2N1bWVu
dFJlc291cmNlcy5maW5kKHVybC5zdHJpbmcoKSk7CiAgICAgICAgIGlmIChpdCAhPSBtX2RvY3Vt
ZW50UmVzb3VyY2VzLmVuZCgpKSB7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRPd25pbmdD
YWNoZWRSZXNvdXJjZUxvYWRlcigwKTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+c2V0T3duaW5n
Q2FjaGVkUmVzb3VyY2VMb2FkZXIoMCk7CiAgICAgICAgICAgICBtX2RvY3VtZW50UmVzb3VyY2Vz
LnJlbW92ZShpdCk7CiAgICAgICAgIH0KICAgICB9CkBAIC02MzEsNyArNjMxLDcgQEAgdm9pZCBD
YWNoZWRSZXNvdXJjZUxvYWRlcjo6c2V0QXV0b0xvYWRJbWFnZXMoYm9vbCBlbmFibGUpCiAKICAg
ICBEb2N1bWVudFJlc291cmNlTWFwOjppdGVyYXRvciBlbmQgPSBtX2RvY3VtZW50UmVzb3VyY2Vz
LmVuZCgpOwogICAgIGZvciAoRG9jdW1lbnRSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX2Rv
Y3VtZW50UmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBDYWNo
ZWRSZXNvdXJjZSogcmVzb3VyY2UgPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICBDYWNoZWRS
ZXNvdXJjZSogcmVzb3VyY2UgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgIGlmIChyZXNvdXJj
ZS0+dHlwZSgpID09IENhY2hlZFJlc291cmNlOjpJbWFnZVJlc291cmNlKSB7CiAgICAgICAgICAg
ICBDYWNoZWRJbWFnZSogaW1hZ2UgPSBjb25zdF9jYXN0PENhY2hlZEltYWdlKj4oc3RhdGljX2Nh
c3Q8Y29uc3QgQ2FjaGVkSW1hZ2UqPihyZXNvdXJjZSkpOwogCkBAIC02NTEsNyArNjUxLDcgQEAg
dm9pZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVtb3ZlQ2FjaGVkUmVzb3VyY2UoQ2FjaGVkUmVz
b3VyY2UqIHJlc291cmNlKSBjb25zdAogI2lmbmRlZiBOREVCVUcKICAgICBEb2N1bWVudFJlc291
cmNlTWFwOjppdGVyYXRvciBpdCA9IG1fZG9jdW1lbnRSZXNvdXJjZXMuZmluZChyZXNvdXJjZS0+
dXJsKCkpOwogICAgIGlmIChpdCAhPSBtX2RvY3VtZW50UmVzb3VyY2VzLmVuZCgpKQotICAgICAg
ICBBU1NFUlQoaXQtPnNlY29uZC5nZXQoKSA9PSByZXNvdXJjZSk7CisgICAgICAgIEFTU0VSVChp
dC0+dmFsdWUuZ2V0KCkgPT0gcmVzb3VyY2UpOwogI2VuZGlmCiAgICAgbV9kb2N1bWVudFJlc291
cmNlcy5yZW1vdmUocmVzb3VyY2UtPnVybCgpKTsKIH0KQEAgLTY4NSw5ICs2ODUsOSBAQCB2b2lk
IENhY2hlZFJlc291cmNlTG9hZGVyOjpnYXJiYWdlQ29sbGVjdERvY3VtZW50UmVzb3VyY2VzKCkK
ICAgICBTdHJpbmdWZWN0b3IgcmVzb3VyY2VzVG9EZWxldGU7CiAKICAgICBmb3IgKERvY3VtZW50
UmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9kb2N1bWVudFJlc291cmNlcy5iZWdpbigpOyBp
dCAhPSBtX2RvY3VtZW50UmVzb3VyY2VzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+
c2Vjb25kLT5oYXNPbmVIYW5kbGUoKSkgewotICAgICAgICAgICAgcmVzb3VyY2VzVG9EZWxldGUu
YXBwZW5kKGl0LT5maXJzdCk7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRPd25pbmdDYWNo
ZWRSZXNvdXJjZUxvYWRlcigwKTsKKyAgICAgICAgaWYgKGl0LT52YWx1ZS0+aGFzT25lSGFuZGxl
KCkpIHsKKyAgICAgICAgICAgIHJlc291cmNlc1RvRGVsZXRlLmFwcGVuZChpdC0+a2V5KTsKKyAg
ICAgICAgICAgIGl0LT52YWx1ZS0+c2V0T3duaW5nQ2FjaGVkUmVzb3VyY2VMb2FkZXIoMCk7CiAg
ICAgICAgIH0KICAgICB9CiAKQEAgLTg4Myw4ICs4ODMsOCBAQCB2b2lkIENhY2hlZFJlc291cmNl
TG9hZGVyOjpyZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJ
bmZvKQogICAgIE1lbW9yeUNsYXNzSW5mbyBpbmZvKG1lbW9yeU9iamVjdEluZm8sIHRoaXMsIE1l
bW9yeUluc3RydW1lbnRhdGlvbjo6TG9hZGVyKTsKICAgICBpbmZvLmFkZEhhc2hNYXAobV9kb2N1
bWVudFJlc291cmNlcyk7CiAgICAgZm9yIChEb2N1bWVudFJlc291cmNlTWFwOjpjb25zdF9pdGVy
YXRvciBpID0gbV9kb2N1bWVudFJlc291cmNlcy5iZWdpbigpOyBpICE9IG1fZG9jdW1lbnRSZXNv
dXJjZXMuZW5kKCk7ICsraSkgewotICAgICAgICBpbmZvLmFkZEluc3RydW1lbnRlZE1lbWJlcihp
LT5maXJzdCk7Ci0gICAgICAgIGluZm8uYWRkSW5zdHJ1bWVudGVkTWVtYmVyKGktPnNlY29uZCk7
CisgICAgICAgIGluZm8uYWRkSW5zdHJ1bWVudGVkTWVtYmVyKGktPmtleSk7CisgICAgICAgIGlu
Zm8uYWRkSW5zdHJ1bWVudGVkTWVtYmVyKGktPnZhbHVlKTsKICAgICB9CiAgICAgaW5mby5hZGRI
YXNoU2V0KG1fdmFsaWRhdGVkVVJMcyk7CiAgICAgaWYgKG1fcHJlbG9hZHMpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuY3BwIGIvU291cmNlL1dl
YkNvcmUvbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmNwcAppbmRleCA2NjExMWQ3M2Y3ZDFmYjAx
MjE5NTZhZWFmZDEwMzdhZGJkMjhiMDExLi5jMzg4NmE0MGU4YTZlZWNlOTE5ZWU1OTU1MjIyZDlh
NDg5NjViMjQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5
Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5j
cHAKQEAgLTU0MCw3ICs1NDAsNyBAQCB2b2lkIE1lbW9yeUNhY2hlOjpyZW1vdmVSZXNvdXJjZXNX
aXRoT3JpZ2luKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCiAKICAgICBDYWNoZWRSZXNvdXJjZU1h
cDo6aXRlcmF0b3IgZSA9IG1fcmVzb3VyY2VzLmVuZCgpOwogICAgIGZvciAoQ2FjaGVkUmVzb3Vy
Y2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZTsgKytpdCkg
ewotICAgICAgICBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UgPSBpdC0+c2Vjb25kOworICAgICAg
ICBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UgPSBpdC0+dmFsdWU7CiAgICAgICAgIFJlZlB0cjxT
ZWN1cml0eU9yaWdpbj4gcmVzb3VyY2VPcmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlRnJv
bVN0cmluZyhyZXNvdXJjZS0+dXJsKCkpOwogICAgICAgICBpZiAoIXJlc291cmNlT3JpZ2luKQog
ICAgICAgICAgICAgY29udGludWU7CkBAIC01NTYsNyArNTU2LDcgQEAgdm9pZCBNZW1vcnlDYWNo
ZTo6Z2V0T3JpZ2luc1dpdGhDYWNoZShTZWN1cml0eU9yaWdpblNldCYgb3JpZ2lucykKIHsKICAg
ICBDYWNoZWRSZXNvdXJjZU1hcDo6aXRlcmF0b3IgZSA9IG1fcmVzb3VyY2VzLmVuZCgpOwogICAg
IGZvciAoQ2FjaGVkUmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMuYmVnaW4o
KTsgaXQgIT0gZTsgKytpdCkKLSAgICAgICAgb3JpZ2lucy5hZGQoU2VjdXJpdHlPcmlnaW46OmNy
ZWF0ZUZyb21TdHJpbmcoaXQtPnNlY29uZC0+dXJsKCkpKTsKKyAgICAgICAgb3JpZ2lucy5hZGQo
U2VjdXJpdHlPcmlnaW46OmNyZWF0ZUZyb21TdHJpbmcoaXQtPnZhbHVlLT51cmwoKSkpOwogfQog
CiB2b2lkIE1lbW9yeUNhY2hlOjpyZW1vdmVGcm9tTGl2ZURlY29kZWRSZXNvdXJjZXNMaXN0KENh
Y2hlZFJlc291cmNlKiByZXNvdXJjZSkKQEAgLTY4OSw3ICs2ODksNyBAQCBNZW1vcnlDYWNoZTo6
U3RhdGlzdGljcyBNZW1vcnlDYWNoZTo6Z2V0U3RhdGlzdGljcygpCiAgICAgU3RhdGlzdGljcyBz
dGF0czsKICAgICBDYWNoZWRSZXNvdXJjZU1hcDo6aXRlcmF0b3IgZSA9IG1fcmVzb3VyY2VzLmVu
ZCgpOwogICAgIGZvciAoQ2FjaGVkUmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGkgPSBtX3Jlc291cmNl
cy5iZWdpbigpOyBpICE9IGU7ICsraSkgewotICAgICAgICBDYWNoZWRSZXNvdXJjZSogcmVzb3Vy
Y2UgPSBpLT5zZWNvbmQ7CisgICAgICAgIENhY2hlZFJlc291cmNlKiByZXNvdXJjZSA9IGktPnZh
bHVlOwogICAgICAgICBzd2l0Y2ggKHJlc291cmNlLT50eXBlKCkpIHsKICAgICAgICAgY2FzZSBD
YWNoZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJjZToKICAgICAgICAgICAgIHN0YXRzLmltYWdlcy5h
ZGRSZXNvdXJjZShyZXNvdXJjZSk7CkBAIC03MjEsOCArNzIxLDggQEAgdm9pZCBNZW1vcnlDYWNo
ZTo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykg
Y29uc3QKICAgICBpbmZvLmFkZEhhc2hNYXAobV9yZXNvdXJjZXMpOwogICAgIENhY2hlZFJlc291
cmNlTWFwOjpjb25zdF9pdGVyYXRvciBlID0gbV9yZXNvdXJjZXMuZW5kKCk7CiAgICAgZm9yIChD
YWNoZWRSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgaSA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7
IGkgIT0gZTsgKytpKSB7Ci0gICAgICAgIGluZm8uYWRkSW5zdHJ1bWVudGVkTWVtYmVyKGktPmZp
cnN0KTsKLSAgICAgICAgaW5mby5hZGRJbnN0cnVtZW50ZWRNZW1iZXIoaS0+c2Vjb25kKTsKKyAg
ICAgICAgaW5mby5hZGRJbnN0cnVtZW50ZWRNZW1iZXIoaS0+a2V5KTsKKyAgICAgICAgaW5mby5h
ZGRJbnN0cnVtZW50ZWRNZW1iZXIoaS0+dmFsdWUpOwogICAgIH0KICAgICBpbmZvLmFkZFZlY3Rv
cihtX2FsbFJlc291cmNlcyk7CiAgICAgaW5mby5hZGRNZW1iZXIobV9saXZlRGVjb2RlZFJlc291
cmNlcyk7CkBAIC03MzgsNyArNzM4LDcgQEAgdm9pZCBNZW1vcnlDYWNoZTo6c2V0RGlzYWJsZWQo
Ym9vbCBkaXNhYmxlZCkKICAgICAgICAgQ2FjaGVkUmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGkgPSBt
X3Jlc291cmNlcy5iZWdpbigpOwogICAgICAgICBpZiAoaSA9PSBtX3Jlc291cmNlcy5lbmQoKSkK
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBldmljdChpLT5zZWNvbmQpOworICAgICAgICBl
dmljdChpLT52YWx1ZSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24v
SWNvbkRhdGFiYXNlLmNwcAppbmRleCA3MTA2NDhmOTRhZGUxZmQ2MjBkZGRlYWRiNjA3NmViZTVl
NTEwYjIyLi5kYjA4MzNlMWVjNDc4M2Q2MzlmOGI1NTVlMjlkMDRjZDllZGZlZTU5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFzZS5jcHAKQEAgLTE5Miw3ICsxOTIs
NyBAQCB2b2lkIEljb25EYXRhYmFzZTo6cmVtb3ZlQWxsSWNvbnMoKQogICAgICAgICBIYXNoTWFw
PFN0cmluZywgUGFnZVVSTFJlY29yZCo+OjppdGVyYXRvciBpdGVyID0gbV9wYWdlVVJMVG9SZWNv
cmRNYXAuYmVnaW4oKTsKICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFBhZ2VVUkxSZWNvcmQqPjo6
aXRlcmF0b3IgZW5kID0gbV9wYWdlVVJMVG9SZWNvcmRNYXAuZW5kKCk7CiAgICAgICAgIGZvciAo
OyBpdGVyICE9IGVuZDsgKytpdGVyKQotICAgICAgICAgICAgKCppdGVyKS5zZWNvbmQtPnNldElj
b25SZWNvcmQoMCk7CisgICAgICAgICAgICAoKml0ZXIpLnZhbHVlLT5zZXRJY29uUmVjb3JkKDAp
OwogICAgICAgICAgICAgCiAgICAgICAgIC8vIENsZWFyIHRoZSBpY29uVVJMIC0+IEljb25SZWNv
cmQgbWFwCiAgICAgICAgIG1faWNvblVSTFRvUmVjb3JkTWFwLmNsZWFyKCk7CkBAIC03ODUsNyAr
Nzg1LDcgQEAgc2l6ZV90IEljb25EYXRhYmFzZTo6aWNvblJlY29yZENvdW50V2l0aERhdGEoKQog
ICAgIEhhc2hNYXA8U3RyaW5nLCBJY29uUmVjb3JkKj46Oml0ZXJhdG9yIGVuZCA9IG1faWNvblVS
TFRvUmVjb3JkTWFwLmVuZCgpOwogICAgIAogICAgIGZvciAoOyBpICE9IGVuZDsgKytpKQotICAg
ICAgICByZXN1bHQgKz0gKCgqaSkuc2Vjb25kLT5pbWFnZURhdGFTdGF0dXMoKSA9PSBJbWFnZURh
dGFTdGF0dXNQcmVzZW50KTsKKyAgICAgICAgcmVzdWx0ICs9ICgoKmkpLnZhbHVlLT5pbWFnZURh
dGFTdGF0dXMoKSA9PSBJbWFnZURhdGFTdGF0dXNQcmVzZW50KTsKICAgICAgICAgICAgIAogICAg
IHJldHVybiByZXN1bHQ7CiB9CkBAIC0xNTU2LDEzICsxNTU2LDEzIEBAIHZvaWQgSWNvbkRhdGFi
YXNlOjpwZXJmb3JtUGVuZGluZ1JldGFpbkFuZFJlbGVhc2VPcGVyYXRpb25zKCkKICAgICB9CiAK
ICAgICBmb3IgKEhhc2hDb3VudGVkU2V0PFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdG9S
ZXRhaW4uYmVnaW4oKSwgZW5kID0gdG9SZXRhaW4uZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewot
ICAgICAgICBBU1NFUlQoIWl0LT5maXJzdC5pbXBsKCkgfHwgaXQtPmZpcnN0LmltcGwoKS0+aGFz
T25lUmVmKCkpOwotICAgICAgICBwZXJmb3JtUmV0YWluSWNvbkZvclBhZ2VVUkwoaXQtPmZpcnN0
LCBpdC0+c2Vjb25kKTsKKyAgICAgICAgQVNTRVJUKCFpdC0+a2V5LmltcGwoKSB8fCBpdC0+a2V5
LmltcGwoKS0+aGFzT25lUmVmKCkpOworICAgICAgICBwZXJmb3JtUmV0YWluSWNvbkZvclBhZ2VV
UkwoaXQtPmtleSwgaXQtPnZhbHVlKTsKICAgICB9CiAKICAgICBmb3IgKEhhc2hDb3VudGVkU2V0
PFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdG9SZWxlYXNlLmJlZ2luKCksIGVuZCA9IHRv
UmVsZWFzZS5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIEFTU0VSVCghaXQtPmZp
cnN0LmltcGwoKSB8fCBpdC0+Zmlyc3QuaW1wbCgpLT5oYXNPbmVSZWYoKSk7Ci0gICAgICAgIHBl
cmZvcm1SZWxlYXNlSWNvbkZvclBhZ2VVUkwoaXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsKKyAgICAg
ICAgQVNTRVJUKCFpdC0+a2V5LmltcGwoKSB8fCBpdC0+a2V5LmltcGwoKS0+aGFzT25lUmVmKCkp
OworICAgICAgICBwZXJmb3JtUmVsZWFzZUljb25Gb3JQYWdlVVJMKGl0LT5rZXksIGl0LT52YWx1
ZSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRv
dy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKaW5kZXggZDc4N2E2NWJk
NmQ4MGM1NTBmOGQxMmEwZDRmMTMxZjc4NjFkMTdhZC4uNmM4ODlmYWEzODMzNzZiZTVkYTcyNzQz
MWY3N2M0MzM1MjBiYzliOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5k
b3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcApAQCAtMjQ4LDcg
KzI0OCw3IEBAIGJvb2wgRE9NV2luZG93OjpkaXNwYXRjaEFsbFBlbmRpbmdCZWZvcmVVbmxvYWRF
dmVudHMoKQogICAgIFZlY3RvcjxSZWZQdHI8RE9NV2luZG93PiA+IHdpbmRvd3M7CiAgICAgRE9N
V2luZG93U2V0OjppdGVyYXRvciBlbmQgPSBzZXQuZW5kKCk7CiAgICAgZm9yIChET01XaW5kb3dT
ZXQ6Oml0ZXJhdG9yIGl0ID0gc2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAg
d2luZG93cy5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgd2luZG93cy5hcHBlbmQoaXQtPmtl
eSk7CiAKICAgICBzaXplX3Qgc2l6ZSA9IHdpbmRvd3Muc2l6ZSgpOwogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CkBAIC0yOTAsNyArMjkwLDcgQEAgdm9pZCBET01XaW5k
b3c6OmRpc3BhdGNoQWxsUGVuZGluZ1VubG9hZEV2ZW50cygpCiAgICAgVmVjdG9yPFJlZlB0cjxE
T01XaW5kb3c+ID4gd2luZG93czsKICAgICBET01XaW5kb3dTZXQ6Oml0ZXJhdG9yIGVuZCA9IHNl
dC5lbmQoKTsKICAgICBmb3IgKERPTVdpbmRvd1NldDo6aXRlcmF0b3IgaXQgPSBzZXQuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICB3aW5kb3dzLmFwcGVuZChpdC0+Zmlyc3QpOwor
ICAgICAgICB3aW5kb3dzLmFwcGVuZChpdC0+a2V5KTsKIAogICAgIHNpemVfdCBzaXplID0gd2lu
ZG93cy5zaXplKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCA5NTdhZGEzNDAxNDA1ZTI2MzMwZGQ0
MmQ1YjQ1NzVlZjI5ZDY2NWFkLi43ZTVkZTUwNzE5NGQ0ZWIyYTU5MzczNmRlOTZjZjk1NDY3Mzgx
YmQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC0zNjM3LDcgKzM2Mzcs
NyBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlVG91Y2hFdmVudChjb25zdCBQbGF0Zm9ybVRv
dWNoRXZlbnQmIGV2ZW50KQogICAgICAgICAvLyByZWxlYXNlZCBvciBjYW5jZWxsZWQgaXQgd2ls
bCBvbmx5IGFwcGVhciBpbiB0aGUgY2hhbmdlZFRvdWNoZXMgbGlzdC4KICAgICAgICAgaWYgKHBv
aW50U3RhdGUgIT0gUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFJlbGVhc2VkICYmIHBvaW50U3Rh
dGUgIT0gUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaENhbmNlbGxlZCkgewogICAgICAgICAgICAg
dG91Y2hlcy0+YXBwZW5kKHRvdWNoKTsKLSAgICAgICAgICAgIHRhcmdldFRvdWNoZXNJdGVyYXRv
ci0+c2Vjb25kLT5hcHBlbmQodG91Y2gpOworICAgICAgICAgICAgdGFyZ2V0VG91Y2hlc0l0ZXJh
dG9yLT52YWx1ZS0+YXBwZW5kKHRvdWNoKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIE5vdyBi
dWlsZCB1cCB0aGUgY29ycmVjdCBsaXN0IGZvciBjaGFuZ2VkVG91Y2hlcy4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFt
ZS5jcHAKaW5kZXggMTg3NGRkZWYyZTFkMTY0NDY4NWZhMjBmMTk5MDQxNzU0MmVmMzk4Mi4uZThh
ODU5ZTg2ZDgyNTRhNTA1YjA5NjllZTQ2MzhhZGQ0YzE4ODk0NiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5j
cHAKQEAgLTU4MCw3ICs1ODAsNyBAQCB2b2lkIEZyYW1lOjppbmplY3RVc2VyU2NyaXB0cyhVc2Vy
U2NyaXB0SW5qZWN0aW9uVGltZSBpbmplY3Rpb25UaW1lKQogICAgICAgICByZXR1cm47CiAgICAg
VXNlclNjcmlwdE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gdXNlclNjcmlwdHMtPmVuZCgpOwog
ICAgIGZvciAoVXNlclNjcmlwdE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSB1c2VyU2NyaXB0cy0+
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpbmplY3RVc2VyU2NyaXB0c0Zvcldv
cmxkKGl0LT5maXJzdC5nZXQoKSwgKml0LT5zZWNvbmQsIGluamVjdGlvblRpbWUpOworICAgICAg
ICBpbmplY3RVc2VyU2NyaXB0c0ZvcldvcmxkKGl0LT5rZXkuZ2V0KCksICppdC0+dmFsdWUsIGlu
amVjdGlvblRpbWUpOwogfQogCiB2b2lkIEZyYW1lOjppbmplY3RVc2VyU2NyaXB0c0Zvcldvcmxk
KERPTVdyYXBwZXJXb3JsZCogd29ybGQsIGNvbnN0IFVzZXJTY3JpcHRWZWN0b3ImIHVzZXJTY3Jp
cHRzLCBVc2VyU2NyaXB0SW5qZWN0aW9uVGltZSBpbmplY3Rpb25UaW1lKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9QYWdlR3JvdXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Q
YWdlR3JvdXAuY3BwCmluZGV4IDQ1ZDI1ZjU1MjE0ZDc0NDE5NGU5MzdmYTMxZTZlNjQ2MGVhY2Fm
OTIuLjAzMjdiYjBiNmM3ZWViODNjMmMzZTlkMDI2MjdiODBkYzcxOWMxZjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1BhZ2VHcm91cC5jcHAKQEAgLTkzLDEyICs5MywxMiBAQCBQYWdlR3JvdXAqIFBhZ2VHcm91
cDo6cGFnZUdyb3VwKGNvbnN0IFN0cmluZyYgZ3JvdXBOYW1lKQogICAgIFBhZ2VHcm91cE1hcDo6
QWRkUmVzdWx0IHJlc3VsdCA9IHBhZ2VHcm91cHMtPmFkZChncm91cE5hbWUsIDApOwogCiAgICAg
aWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIEFTU0VSVCghcmVzdWx0Lml0ZXJhdG9y
LT5zZWNvbmQpOwotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IG5ldyBQYWdlR3Jv
dXAoZ3JvdXBOYW1lKTsKKyAgICAgICAgQVNTRVJUKCFyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsK
KyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IG5ldyBQYWdlR3JvdXAoZ3JvdXBOYW1l
KTsKICAgICB9CiAKLSAgICBBU1NFUlQocmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOwotICAgIHJl
dHVybiByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBBU1NFUlQocmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZSk7CisgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiB9CiAKIHZvaWQg
UGFnZUdyb3VwOjpjbG9zZUxvY2FsU3RvcmFnZSgpCkBAIC0xMDksOCArMTA5LDggQEAgdm9pZCBQ
YWdlR3JvdXA6OmNsb3NlTG9jYWxTdG9yYWdlKCkKICAgICBQYWdlR3JvdXBNYXA6Oml0ZXJhdG9y
IGVuZCA9IHBhZ2VHcm91cHMtPmVuZCgpOwogCiAgICAgZm9yIChQYWdlR3JvdXBNYXA6Oml0ZXJh
dG9yIGl0ID0gcGFnZUdyb3Vwcy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAg
IGlmIChpdC0+c2Vjb25kLT5oYXNMb2NhbFN0b3JhZ2UoKSkKLSAgICAgICAgICAgIGl0LT5zZWNv
bmQtPmxvY2FsU3RvcmFnZSgpLT5jbG9zZSgpOworICAgICAgICBpZiAoaXQtPnZhbHVlLT5oYXNM
b2NhbFN0b3JhZ2UoKSkKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+bG9jYWxTdG9yYWdlKCktPmNs
b3NlKCk7CiAgICAgfQogfQogCkBAIC0xMjEsOCArMTIxLDggQEAgdm9pZCBQYWdlR3JvdXA6OmNs
ZWFyTG9jYWxTdG9yYWdlRm9yQWxsT3JpZ2lucygpCiAKICAgICBQYWdlR3JvdXBNYXA6Oml0ZXJh
dG9yIGVuZCA9IHBhZ2VHcm91cHMtPmVuZCgpOwogICAgIGZvciAoUGFnZUdyb3VwTWFwOjppdGVy
YXRvciBpdCA9IHBhZ2VHcm91cHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAg
ICBpZiAoaXQtPnNlY29uZC0+aGFzTG9jYWxTdG9yYWdlKCkpCi0gICAgICAgICAgICBpdC0+c2Vj
b25kLT5sb2NhbFN0b3JhZ2UoKS0+Y2xlYXJBbGxPcmlnaW5zRm9yRGVsZXRpb24oKTsKKyAgICAg
ICAgaWYgKGl0LT52YWx1ZS0+aGFzTG9jYWxTdG9yYWdlKCkpCisgICAgICAgICAgICBpdC0+dmFs
dWUtPmxvY2FsU3RvcmFnZSgpLT5jbGVhckFsbE9yaWdpbnNGb3JEZWxldGlvbigpOwogICAgIH0K
IH0KIApAQCAtMTMzLDggKzEzMyw4IEBAIHZvaWQgUGFnZUdyb3VwOjpjbGVhckxvY2FsU3RvcmFn
ZUZvck9yaWdpbihTZWN1cml0eU9yaWdpbiogb3JpZ2luKQogCiAgICAgUGFnZUdyb3VwTWFwOjpp
dGVyYXRvciBlbmQgPSBwYWdlR3JvdXBzLT5lbmQoKTsKICAgICBmb3IgKFBhZ2VHcm91cE1hcDo6
aXRlcmF0b3IgaXQgPSBwYWdlR3JvdXBzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAg
ICAgICAgaWYgKGl0LT5zZWNvbmQtPmhhc0xvY2FsU3RvcmFnZSgpKQotICAgICAgICAgICAgaXQt
PnNlY29uZC0+bG9jYWxTdG9yYWdlKCktPmNsZWFyT3JpZ2luRm9yRGVsZXRpb24ob3JpZ2luKTsK
KyAgICAgICAgaWYgKGl0LT52YWx1ZS0+aGFzTG9jYWxTdG9yYWdlKCkpCisgICAgICAgICAgICBp
dC0+dmFsdWUtPmxvY2FsU3RvcmFnZSgpLT5jbGVhck9yaWdpbkZvckRlbGV0aW9uKG9yaWdpbik7
CiAgICAgfSAgICAKIH0KICAgICAKQEAgLTE0NSw4ICsxNDUsOCBAQCB2b2lkIFBhZ2VHcm91cDo6
c3luY0xvY2FsU3RvcmFnZSgpCiAKICAgICBQYWdlR3JvdXBNYXA6Oml0ZXJhdG9yIGVuZCA9IHBh
Z2VHcm91cHMtPmVuZCgpOwogICAgIGZvciAoUGFnZUdyb3VwTWFwOjppdGVyYXRvciBpdCA9IHBh
Z2VHcm91cHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnNl
Y29uZC0+aGFzTG9jYWxTdG9yYWdlKCkpCi0gICAgICAgICAgICBpdC0+c2Vjb25kLT5sb2NhbFN0
b3JhZ2UoKS0+c3luYygpOworICAgICAgICBpZiAoaXQtPnZhbHVlLT5oYXNMb2NhbFN0b3JhZ2Uo
KSkKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+bG9jYWxTdG9yYWdlKCktPnN5bmMoKTsKICAgICB9
CiB9CiAKQEAgLTI2OSw3ICsyNjksNyBAQCB2b2lkIFBhZ2VHcm91cDo6YWRkVXNlclNjcmlwdFRv
V29ybGQoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCwgY29uc3QgU3RyaW5nJiBzb3VyYwogICAgIE93
blB0cjxVc2VyU2NyaXB0PiB1c2VyU2NyaXB0ID0gYWRvcHRQdHIobmV3IFVzZXJTY3JpcHQoc291
cmNlLCB1cmwsIHdoaXRlbGlzdCwgYmxhY2tsaXN0LCBpbmplY3Rpb25UaW1lLCBpbmplY3RlZEZy
YW1lcykpOwogICAgIGlmICghbV91c2VyU2NyaXB0cykKICAgICAgICAgbV91c2VyU2NyaXB0cyA9
IGFkb3B0UHRyKG5ldyBVc2VyU2NyaXB0TWFwKTsKLSAgICBPd25QdHI8VXNlclNjcmlwdFZlY3Rv
cj4mIHNjcmlwdHNJbldvcmxkID0gbV91c2VyU2NyaXB0cy0+YWRkKHdvcmxkLCBudWxscHRyKS5p
dGVyYXRvci0+c2Vjb25kOworICAgIE93blB0cjxVc2VyU2NyaXB0VmVjdG9yPiYgc2NyaXB0c0lu
V29ybGQgPSBtX3VzZXJTY3JpcHRzLT5hZGQod29ybGQsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1
ZTsKICAgICBpZiAoIXNjcmlwdHNJbldvcmxkKQogICAgICAgICBzY3JpcHRzSW5Xb3JsZCA9IGFk
b3B0UHRyKG5ldyBVc2VyU2NyaXB0VmVjdG9yKTsKICAgICBzY3JpcHRzSW5Xb3JsZC0+YXBwZW5k
KHVzZXJTY3JpcHQucmVsZWFzZSgpKTsKQEAgLTI4Niw3ICsyODYsNyBAQCB2b2lkIFBhZ2VHcm91
cDo6YWRkVXNlclN0eWxlU2hlZXRUb1dvcmxkKERPTVdyYXBwZXJXb3JsZCogd29ybGQsIGNvbnN0
IFN0cmluZyYgcwogICAgIE93blB0cjxVc2VyU3R5bGVTaGVldD4gdXNlclN0eWxlU2hlZXQgPSBh
ZG9wdFB0cihuZXcgVXNlclN0eWxlU2hlZXQoc291cmNlLCB1cmwsIHdoaXRlbGlzdCwgYmxhY2ts
aXN0LCBpbmplY3RlZEZyYW1lcywgbGV2ZWwpKTsKICAgICBpZiAoIW1fdXNlclN0eWxlU2hlZXRz
KQogICAgICAgICBtX3VzZXJTdHlsZVNoZWV0cyA9IGFkb3B0UHRyKG5ldyBVc2VyU3R5bGVTaGVl
dE1hcCk7Ci0gICAgT3duUHRyPFVzZXJTdHlsZVNoZWV0VmVjdG9yPiYgc3R5bGVTaGVldHNJbldv
cmxkID0gbV91c2VyU3R5bGVTaGVldHMtPmFkZCh3b3JsZCwgbnVsbHB0cikuaXRlcmF0b3ItPnNl
Y29uZDsKKyAgICBPd25QdHI8VXNlclN0eWxlU2hlZXRWZWN0b3I+JiBzdHlsZVNoZWV0c0luV29y
bGQgPSBtX3VzZXJTdHlsZVNoZWV0cy0+YWRkKHdvcmxkLCBudWxscHRyKS5pdGVyYXRvci0+dmFs
dWU7CiAgICAgaWYgKCFzdHlsZVNoZWV0c0luV29ybGQpCiAgICAgICAgIHN0eWxlU2hlZXRzSW5X
b3JsZCA9IGFkb3B0UHRyKG5ldyBVc2VyU3R5bGVTaGVldFZlY3Rvcik7CiAgICAgc3R5bGVTaGVl
dHNJbldvcmxkLT5hcHBlbmQodXNlclN0eWxlU2hlZXQucmVsZWFzZSgpKTsKQEAgLTMwNiw3ICsz
MDYsNyBAQCB2b2lkIFBhZ2VHcm91cDo6cmVtb3ZlVXNlclNjcmlwdEZyb21Xb3JsZChET01XcmFw
cGVyV29ybGQqIHdvcmxkLCBjb25zdCBLVVJMJiB1cgogICAgIGlmIChpdCA9PSBtX3VzZXJTY3Jp
cHRzLT5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIFVzZXJTY3JpcHRWZWN0b3Iq
IHNjcmlwdHMgPSBpdC0+c2Vjb25kLmdldCgpOworICAgIFVzZXJTY3JpcHRWZWN0b3IqIHNjcmlw
dHMgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgZm9yIChpbnQgaSA9IHNjcmlwdHMtPnNpemUoKSAt
IDE7IGkgPj0gMDsgLS1pKSB7CiAgICAgICAgIGlmIChzY3JpcHRzLT5hdChpKS0+dXJsKCkgPT0g
dXJsKQogICAgICAgICAgICAgc2NyaXB0cy0+cmVtb3ZlKGkpOwpAQCAtMzI4LDcgKzMyOCw3IEBA
IHZvaWQgUGFnZUdyb3VwOjpyZW1vdmVVc2VyU3R5bGVTaGVldEZyb21Xb3JsZChET01XcmFwcGVy
V29ybGQqIHdvcmxkLCBjb25zdCBLVVJMCiAgICAgaWYgKGl0ID09IG1fdXNlclN0eWxlU2hlZXRz
LT5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIFVzZXJTdHlsZVNoZWV0VmVjdG9y
KiBzdHlsZXNoZWV0cyA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgVXNlclN0eWxlU2hlZXRWZWN0
b3IqIHN0eWxlc2hlZXRzID0gaXQtPnZhbHVlLmdldCgpOwogICAgIGZvciAoaW50IGkgPSBzdHls
ZXNoZWV0cy0+c2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKICAgICAgICAgaWYgKHN0eWxlc2hl
ZXRzLT5hdChpKS0+dXJsKCkgPT0gdXJsKSB7CiAgICAgICAgICAgICBzdHlsZXNoZWV0cy0+cmVt
b3ZlKGkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcAppbmRleCBjOTExZDU0
YTkyNTQ2YTdjZTE0ZjE4NjZlY2JjZWQ4YjU2ZTU2NjNiLi5hMTYxNDkyNTVjN2UzZTQyNjAzOWM0
YTEzMmZiMTYyYmM3YTE3ZmU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VT
ZXJpYWxpemVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNw
cApAQCAtMzM5LDcgKzMzOSw3IEBAIEtVUkwgUGFnZVNlcmlhbGl6ZXI6OnVybEZvckJsYW5rRnJh
bWUoRnJhbWUqIGZyYW1lKQogewogICAgIEhhc2hNYXA8RnJhbWUqLCBLVVJMPjo6aXRlcmF0b3Ig
aXRlciA9IG1fYmxhbmtGcmFtZVVSTHMuZmluZChmcmFtZSk7CiAgICAgaWYgKGl0ZXIgIT0gbV9i
bGFua0ZyYW1lVVJMcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0ZXItPnNlY29uZDsKKyAgICAg
ICAgcmV0dXJuIGl0ZXItPnZhbHVlOwogICAgIFN0cmluZyB1cmwgPSAid3ljaXd5ZzovL2ZyYW1l
LyIgKyBTdHJpbmc6Om51bWJlcihtX2JsYW5rRnJhbWVDb3VudGVyKyspOwogICAgIEtVUkwgZmFr
ZVVSTChQYXJzZWRVUkxTdHJpbmcsIHVybCk7CiAgICAgbV9ibGFua0ZyYW1lVVJMcy5hZGQoZnJh
bWUsIGZha2VVUkwpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eVBv
bGljeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5UG9saWN5LmNwcAppbmRleCBj
MmE1YWIxMTQzNWVmNmRiMDU3NjhjNzZjYTAzNTdiNTYyNTgzMzEyLi41YjM2ZjRmNzE2YzQ0YmZi
MDlmMjBlNjMyY2MwZDAzODZmM2NjYTNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L1NlY3VyaXR5UG9saWN5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5UG9s
aWN5LmNwcApAQCAtMTMzLDkgKzEzMyw5IEBAIHZvaWQgU2VjdXJpdHlQb2xpY3k6OmFkZE9yaWdp
bkFjY2Vzc1doaXRlbGlzdEVudHJ5KGNvbnN0IFNlY3VyaXR5T3JpZ2luJiBzb3VyY2VPCiAgICAg
U3RyaW5nIHNvdXJjZVN0cmluZyA9IHNvdXJjZU9yaWdpbi50b1N0cmluZygpOwogICAgIE9yaWdp
bkFjY2Vzc01hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG9yaWdpbkFjY2Vzc01hcCgpLmFkZChzb3Vy
Y2VTdHJpbmcsIG51bGxwdHIpOwogICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAg
cmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBhZG9wdFB0cihuZXcgT3JpZ2luQWNjZXNzV2hpdGVM
aXN0KTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGFkb3B0UHRyKG5ldyBPcmln
aW5BY2Nlc3NXaGl0ZUxpc3QpOwogCi0gICAgT3JpZ2luQWNjZXNzV2hpdGVMaXN0KiBsaXN0ID0g
cmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQuZ2V0KCk7CisgICAgT3JpZ2luQWNjZXNzV2hpdGVMaXN0
KiBsaXN0ID0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKICAgICBsaXN0LT5hcHBlbmQo
T3JpZ2luQWNjZXNzRW50cnkoZGVzdGluYXRpb25Qcm90b2NvbCwgZGVzdGluYXRpb25Eb21haW4s
IGFsbG93RGVzdGluYXRpb25TdWJkb21haW5zID8gT3JpZ2luQWNjZXNzRW50cnk6OkFsbG93U3Vi
ZG9tYWlucyA6IE9yaWdpbkFjY2Vzc0VudHJ5OjpEaXNhbGxvd1N1YmRvbWFpbnMpKTsKIH0KIApA
QCAtMTUyLDcgKzE1Miw3IEBAIHZvaWQgU2VjdXJpdHlQb2xpY3k6OnJlbW92ZU9yaWdpbkFjY2Vz
c1doaXRlbGlzdEVudHJ5KGNvbnN0IFNlY3VyaXR5T3JpZ2luJiBzb3VyCiAgICAgaWYgKGl0ID09
IG1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgT3JpZ2luQWNjZXNzV2hpdGVMaXN0
KiBsaXN0ID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICBPcmlnaW5BY2Nlc3NXaGl0ZUxpc3QqIGxp
c3QgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgc2l6ZV90IGluZGV4ID0gbGlzdC0+ZmluZChPcmln
aW5BY2Nlc3NFbnRyeShkZXN0aW5hdGlvblByb3RvY29sLCBkZXN0aW5hdGlvbkRvbWFpbiwgYWxs
b3dEZXN0aW5hdGlvblN1YmRvbWFpbnMgPyBPcmlnaW5BY2Nlc3NFbnRyeTo6QWxsb3dTdWJkb21h
aW5zIDogT3JpZ2luQWNjZXNzRW50cnk6OkRpc2FsbG93U3ViZG9tYWlucykpOwogICAgIGlmIChp
bmRleCA9PSBub3RGb3VuZCkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNw
cAppbmRleCBlOTdjNjRmNzNkY2IwZTI3YWU0OTY0ZDQ3NWU2MmFiODI5YjNmYzU0Li5hNTRlZDNi
NWRmMmU0OGU4Nzg5OTRmYjQ1MWUwMTJlNTU2ZTkyMzMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1NldHRpbmdzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdz
LmNwcApAQCAtNjAsNyArNjAsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0R2VuZXJpY0ZvbnRG
YW1pbHlNYXAoU2NyaXB0Rm9udEZhbWlseU1hcCYgZm9udE1hcCwgY29uc3QgQQogICAgICAgICBp
ZiAoaXQgPT0gZm9udE1hcC5lbmQoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgZm9u
dE1hcC5yZW1vdmUoaXQpOwotICAgIH0gZWxzZSBpZiAoaXQgIT0gZm9udE1hcC5lbmQoKSAmJiBp
dC0+c2Vjb25kID09IGZhbWlseSkKKyAgICB9IGVsc2UgaWYgKGl0ICE9IGZvbnRNYXAuZW5kKCkg
JiYgaXQtPnZhbHVlID09IGZhbWlseSkKICAgICAgICAgcmV0dXJuOwogICAgIGVsc2UKICAgICAg
ICAgZm9udE1hcC5zZXQoc3RhdGljX2Nhc3Q8aW50PihzY3JpcHQpLCBmYW1pbHkpOwpAQCAtNzMs
NyArNzMsNyBAQCBzdGF0aWMgaW5saW5lIGNvbnN0IEF0b21pY1N0cmluZyYgZ2V0R2VuZXJpY0Zv
bnRGYW1pbHlGb3JTY3JpcHQoY29uc3QgU2NyaXB0Rm9udAogewogICAgIFNjcmlwdEZvbnRGYW1p
bHlNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZm9udE1hcC5maW5kKHN0YXRpY19jYXN0PGludD4o
c2NyaXB0KSk7CiAgICAgaWYgKGl0ICE9IGZvbnRNYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiBp
dC0+c2Vjb25kOworICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwogICAgIGlmIChzY3JpcHQgIT0g
VVNDUklQVF9DT01NT04pCiAgICAgICAgIHJldHVybiBnZXRHZW5lcmljRm9udEZhbWlseUZvclNj
cmlwdChmb250TWFwLCBVU0NSSVBUX0NPTU1PTik7CiAgICAgcmV0dXJuIGVtcHR5QXRvbTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU3BlZWNoSW5wdXQuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9TcGVlY2hJbnB1dC5jcHAKaW5kZXggMDEyOGVmOGE0MGE0MjQzNTRhYjVmOGU1
MGJhOGVjYzYyMjU3YjNjOS4uODMyOGM1ZDRkZjMyOTk0MmI1OWYzZWNjMjI1MzU2OGNlMmE4YTEx
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9TcGVlY2hJbnB1dC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9TcGVlY2hJbnB1dC5jcHAKQEAgLTYyLDcgKzYyLDcgQEAgaW50
IFNwZWVjaElucHV0OjpyZWdpc3Rlckxpc3RlbmVyKFNwZWVjaElucHV0TGlzdGVuZXIqIGxpc3Rl
bmVyKQogI2lmIGRlZmluZWQoREVCVUcpCiAgICAgLy8gQ2hlY2sgaWYgYWxyZWFkeSBwcmVzZW50
LgogICAgIGZvciAoSGFzaE1hcDxpbnQsIFNwZWVjaElucHV0TGlzdGVuZXIqPjo6aXRlcmF0b3Ig
aXQgPSBtX2xpc3RlbmVycy5iZWdpbigpOyBpdCAhPSBtX2xpc3RlbmVycy5lbmQoKTsgKytpdCkK
LSAgICAgIEFTU0VSVChpdC0+c2Vjb25kICE9IGxpc3RlbmVyKTsKKyAgICAgIEFTU0VSVChpdC0+
dmFsdWUgIT0gbGlzdGVuZXIpOwogI2VuZGlmCiAKICAgICBtX2xpc3RlbmVycy5hZGQobV9uZXh0
TGlzdGVuZXJJZCwgbGlzdGVuZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9X
aW5kb3dGZWF0dXJlcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1dpbmRvd0ZlYXR1cmVzLmNw
cAppbmRleCA3NTY0MTUyOGRmZWMyZjRiZWM3ZWVhMzNkMDc0MGEwZGM3ZDdiYWM0Li4xYjZiMWQw
YjE2MzJlODJhOTRlZjA0Njc5ZDBhN2Q0N2FkMzFjYjUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1dpbmRvd0ZlYXR1cmVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1dp
bmRvd0ZlYXR1cmVzLmNwcApAQCAtMjEyLDcgKzIxMiw3IEBAIGJvb2wgV2luZG93RmVhdHVyZXM6
OmJvb2xGZWF0dXJlKGNvbnN0IERpYWxvZ0ZlYXR1cmVzTWFwJiBmZWF0dXJlcywgY29uc3QgY2hh
cioKICAgICBEaWFsb2dGZWF0dXJlc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBmZWF0dXJlcy5m
aW5kKGtleSk7CiAgICAgaWYgKGl0ID09IGZlYXR1cmVzLmVuZCgpKQogICAgICAgICByZXR1cm4g
ZGVmYXVsdFZhbHVlOwotICAgIGNvbnN0IFN0cmluZyYgdmFsdWUgPSBpdC0+c2Vjb25kOworICAg
IGNvbnN0IFN0cmluZyYgdmFsdWUgPSBpdC0+dmFsdWU7CiAgICAgcmV0dXJuIHZhbHVlLmlzTnVs
bCgpIHx8IHZhbHVlID09ICIxIiB8fCB2YWx1ZSA9PSAieWVzIiB8fCB2YWx1ZSA9PSAib24iOwog
fQogCkBAIC0yMjQsNyArMjI0LDcgQEAgZmxvYXQgV2luZG93RmVhdHVyZXM6OmZsb2F0RmVhdHVy
ZShjb25zdCBEaWFsb2dGZWF0dXJlc01hcCYgZmVhdHVyZXMsIGNvbnN0IGNoYXIKICAgICAvLyBG
SVhNRTogVGhlIHRvRG91YmxlIGZ1bmN0aW9uIGRvZXMgbm90IG9mZmVyIGEgd2F5IHRvIHRlbGwg
IjBxIiBmcm9tIHN0cmluZyB3aXRoIG5vIGRpZ2l0cyBpbiBpdDogQm90aAogICAgIC8vIHJldHVy
biB0aGUgbnVtYmVyIDAgYW5kIGZhbHNlIGZvciBvay4gQnV0ICIwcSIgc2hvdWxkIHlpZWxkIHRo
ZSBtaW5pbXVtIHJhdGhlciB0aGFuIHRoZSBkZWZhdWx0LgogICAgIGJvb2wgb2s7Ci0gICAgZG91
YmxlIHBhcnNlZE51bWJlciA9IGl0LT5zZWNvbmQudG9Eb3VibGUoJm9rKTsKKyAgICBkb3VibGUg
cGFyc2VkTnVtYmVyID0gaXQtPnZhbHVlLnRvRG91YmxlKCZvayk7CiAgICAgaWYgKChwYXJzZWRO
dW1iZXIgPT0gMCAmJiAhb2spIHx8IGlzbmFuKHBhcnNlZE51bWJlcikpCiAgICAgICAgIHJldHVy
biBkZWZhdWx0VmFsdWU7CiAgICAgaWYgKHBhcnNlZE51bWJlciA8IG1pbiB8fCBtYXggPD0gbWlu
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29u
dHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250
cm9sbGVyLmNwcAppbmRleCBjNDkxMTllNmExM2MwMTRjOGYyNThlMjk0NjEzODExY2RmYTBkNTFi
Li41ZTA3MTdlMGE5Y2ZiYTMyODk4Mjk1NjIxNzc5MTJjMDZmNzhjOGJlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmNwcApA
QCAtOTMsMTQgKzkzLDE0IEBAIGRvdWJsZSBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6dXBk
YXRlQW5pbWF0aW9ucyhTZXRDaGFuZ2VkIGNhbGxTZXRDaGFuZ2VkLyoKIAogICAgIFJlbmRlck9i
amVjdEFuaW1hdGlvbk1hcDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fY29tcG9z
aXRlQW5pbWF0aW9ucy5lbmQoKTsKICAgICBmb3IgKFJlbmRlck9iamVjdEFuaW1hdGlvbk1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0g
YW5pbWF0aW9uc0VuZDsgKytpdCkgewotICAgICAgICBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBB
bmltID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21w
QW5pbSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgaWYgKCFjb21wQW5pbS0+c3VzcGVuZGVk
KCkgJiYgY29tcEFuaW0tPmhhc0FuaW1hdGlvbnMoKSkgewogICAgICAgICAgICAgZG91YmxlIHQg
PSBjb21wQW5pbS0+dGltZVRvTmV4dFNlcnZpY2UoKTsKICAgICAgICAgICAgIGlmICh0ICE9IC0x
ICYmICh0IDwgdGltZVRvTmV4dFNlcnZpY2UgfHwgdGltZVRvTmV4dFNlcnZpY2UgPT0gLTEpKQog
ICAgICAgICAgICAgICAgIHRpbWVUb05leHRTZXJ2aWNlID0gdDsKICAgICAgICAgICAgIGlmICgh
dGltZVRvTmV4dFNlcnZpY2UpIHsKICAgICAgICAgICAgICAgICBpZiAoY2FsbFNldENoYW5nZWQg
PT0gQ2FsbFNldENoYW5nZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGl0
LT5maXJzdC0+bm9kZSgpOworICAgICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gaXQtPmtl
eS0+bm9kZSgpOwogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIW5vZGUgfHwgKG5vZGUtPmRv
Y3VtZW50KCkgJiYgIW5vZGUtPmRvY3VtZW50KCktPmluUGFnZUNhY2hlKCkpKTsKICAgICAgICAg
ICAgICAgICAgICAgbm9kZS0+c2V0TmVlZHNTdHlsZVJlY2FsYyhTeW50aGV0aWNTdHlsZUNoYW5n
ZSk7CiAgICAgICAgICAgICAgICAgICAgIGNhbGxlZFNldENoYW5nZWQgPSB0cnVlOwpAQCAtMjky
LDkgKzI5Miw5IEBAIHZvaWQgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnN1c3BlbmRBbmlt
YXRpb25zRm9yRG9jdW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50CiAgICAgCiAgICAgUmVuZGVyT2Jq
ZWN0QW5pbWF0aW9uTWFwOjpjb25zdF9pdGVyYXRvciBhbmltYXRpb25zRW5kID0gbV9jb21wb3Np
dGVBbmltYXRpb25zLmVuZCgpOwogICAgIGZvciAoUmVuZGVyT2JqZWN0QW5pbWF0aW9uTWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBh
bmltYXRpb25zRW5kOyArK2l0KSB7Ci0gICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBp
dC0+Zmlyc3Q7CisgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBpdC0+a2V5OwogICAg
ICAgICBpZiAocmVuZGVyZXItPmRvY3VtZW50KCkgPT0gZG9jdW1lbnQpIHsKLSAgICAgICAgICAg
IENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcEFuaW0gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAg
ICAgICAgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wQW5pbSA9IGl0LT52YWx1ZS5nZXQoKTsKICAg
ICAgICAgICAgIGNvbXBBbmltLT5zdXNwZW5kQW5pbWF0aW9ucygpOwogICAgICAgICB9CiAgICAg
fQpAQCAtMzA4LDkgKzMwOCw5IEBAIHZvaWQgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnJl
c3VtZUFuaW1hdGlvbnNGb3JEb2N1bWVudChEb2N1bWVudCogZG9jdW1lbnQpCiAgICAgCiAgICAg
UmVuZGVyT2JqZWN0QW5pbWF0aW9uTWFwOjpjb25zdF9pdGVyYXRvciBhbmltYXRpb25zRW5kID0g
bV9jb21wb3NpdGVBbmltYXRpb25zLmVuZCgpOwogICAgIGZvciAoUmVuZGVyT2JqZWN0QW5pbWF0
aW9uTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5iZWdpbigp
OyBpdCAhPSBhbmltYXRpb25zRW5kOyArK2l0KSB7Ci0gICAgICAgIFJlbmRlck9iamVjdCogcmVu
ZGVyZXIgPSBpdC0+Zmlyc3Q7CisgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBpdC0+
a2V5OwogICAgICAgICBpZiAocmVuZGVyZXItPmRvY3VtZW50KCkgPT0gZG9jdW1lbnQpIHsKLSAg
ICAgICAgICAgIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcEFuaW0gPSBpdC0+c2Vjb25kLmdldCgp
OworICAgICAgICAgICAgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wQW5pbSA9IGl0LT52YWx1ZS5n
ZXQoKTsKICAgICAgICAgICAgIGNvbXBBbmltLT5yZXN1bWVBbmltYXRpb25zKCk7CiAgICAgICAg
IH0KICAgICB9CkBAIC0zOTYsOCArMzk2LDggQEAgdW5zaWduZWQgQW5pbWF0aW9uQ29udHJvbGxl
clByaXZhdGU6Om51bWJlck9mQWN0aXZlQW5pbWF0aW9ucyhEb2N1bWVudCogZG9jdW1lbnQKICAg
ICAKICAgICBSZW5kZXJPYmplY3RBbmltYXRpb25NYXA6OmNvbnN0X2l0ZXJhdG9yIGFuaW1hdGlv
bnNFbmQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuZW5kKCk7CiAgICAgZm9yIChSZW5kZXJPYmpl
Y3RBbmltYXRpb25NYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9jb21wb3NpdGVBbmltYXRpb25z
LmJlZ2luKCk7IGl0ICE9IGFuaW1hdGlvbnNFbmQ7ICsraXQpIHsKLSAgICAgICAgUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlciA9IGl0LT5maXJzdDsKLSAgICAgICAgQ29tcG9zaXRlQW5pbWF0aW9uKiBj
b21wQW5pbSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVy
ZXIgPSBpdC0+a2V5OworICAgICAgICBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBBbmltID0gaXQt
PnZhbHVlLmdldCgpOwogICAgICAgICBpZiAocmVuZGVyZXItPmRvY3VtZW50KCkgPT0gZG9jdW1l
bnQpCiAgICAgICAgICAgICBjb3VudCArPSBjb21wQW5pbS0+bnVtYmVyT2ZBY3RpdmVBbmltYXRp
b25zKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24v
Q29tcG9zaXRlQW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0Nv
bXBvc2l0ZUFuaW1hdGlvbi5jcHAKaW5kZXggZjM1Nzc4MTg5NzQwZWUzNmU4YTMzYTUwYWY2Y2Fk
NTY5MjkwZjk2Yi4uMGIwZjM3OWQ1NmFiZDg1YzYzYmFlMTRjZTVlYTJiNDlhYjEzZWU4ZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9u
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRp
b24uY3BwCkBAIC01OCw3ICs1OCw3IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpjbGVhclJl
bmRlcmVyKCkKICAgICAgICAgLy8gYW4gYW5pbWF0aW9uIGNhbGxiYWNrIChzZWUgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMDUyKQogICAgICAgICBDU1NQcm9wZXJ0
eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciB0cmFuc2l0aW9uc0VuZCA9IG1fdHJhbnNp
dGlvbnMuZW5kKCk7CiAgICAgICAgIGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IHRyYW5zaXRpb25z
RW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogdHJhbnNpdGlvbiA9
IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogdHJhbnNp
dGlvbiA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGFuaW1hdGlvbkNvbnRyb2xsZXIo
KS0+YW5pbWF0aW9uV2lsbEJlUmVtb3ZlZCh0cmFuc2l0aW9uKTsKICAgICAgICAgICAgIHRyYW5z
aXRpb24tPmNsZWFyKCk7CiAgICAgICAgIH0KQEAgLTY3LDcgKzY3LDcgQEAgdm9pZCBDb21wb3Np
dGVBbmltYXRpb246OmNsZWFyUmVuZGVyZXIoKQogICAgICAgICBtX2tleWZyYW1lQW5pbWF0aW9u
cy5jaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgICAgIEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0
ZXJhdG9yIGFuaW1hdGlvbnNFbmQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5lbmQoKTsKICAgICAg
ICAgZm9yIChBbmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVB
bmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGFuaW1hdGlvbnNFbmQ7ICsraXQpIHsKLSAgICAgICAg
ICAgIEtleWZyYW1lQW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAg
ICAgIEtleWZyYW1lQW5pbWF0aW9uKiBhbmltID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAg
ICAgYW5pbWF0aW9uQ29udHJvbGxlcigpLT5hbmltYXRpb25XaWxsQmVSZW1vdmVkKGFuaW0pOwog
ICAgICAgICAgICAgYW5pbS0+Y2xlYXIoKTsKICAgICAgICAgfQpAQCAtODQsNyArODQsNyBAQCB2
b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlVHJhbnNpdGlvbnMoUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlciwgUmVuZGVyU3R5bGUqCiAgICAgLy8gaW4gdGhlIG5leHQgbG9vcCBhbmQgdGhlbiB0
b3NzIHRoZSBvbmVzIHRoYXQgZGlkbid0IGdldCBtYXJrZWQuCiAgICAgQ1NTUHJvcGVydHlUcmFu
c2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKICAg
ICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90
cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQt
PnNldEFjdGl2ZShmYWxzZSk7CisgICAgICAgIGl0LT52YWx1ZS0+c2V0QWN0aXZlKGZhbHNlKTsK
ICAgICAgICAgCiAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBtb2RpZmllZEN1cnJlbnRTdHlsZTsK
ICAgICAKQEAgLTE4MSw3ICsxODEsNyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRl
VHJhbnNpdGlvbnMoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgUmVuZGVyU3R5bGUqCiAgICAgVmVj
dG9yPGludD4gdG9CZVJlbW92ZWQ7CiAgICAgZW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKICAg
ICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90
cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgSW1wbGljaXRB
bmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICBJbXBsaWNpdEFuaW1h
dGlvbiogYW5pbSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgaWYgKCFhbmltLT5hY3RpdmUo
KSkgewogICAgICAgICAgICAgYW5pbWF0aW9uQ29udHJvbGxlcigpLT5hbmltYXRpb25XaWxsQmVS
ZW1vdmVkKGFuaW0pOwogICAgICAgICAgICAgdG9CZVJlbW92ZWQuYXBwZW5kKGFuaW0tPmFuaW1h
dGluZ1Byb3BlcnR5KCkpOwpAQCAtMjA3LDEzICsyMDcsMTMgQEAgdm9pZCBDb21wb3NpdGVBbmlt
YXRpb246OnVwZGF0ZUtleWZyYW1lQW5pbWF0aW9ucyhSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBS
ZW5kZXIKICAgICAgICAgLy8gVGhlIGN1cnJlbnQgYW5kIHRhcmdldCBhbmltYXRpb25zIGFyZSB0
aGUgc2FtZSBzbyB3ZSBqdXN0IG5lZWQgdG8gdG9zcyBhbnkgCiAgICAgICAgIC8vIGFuaW1hdGlv
biB3aGljaCBpcyBmaW5pc2hlZCAocG9zdEFjdGl2ZSkuCiAgICAgICAgIGZvciAoQW5pbWF0aW9u
TmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5iZWdpbigp
OyBpdCAhPSBrZmVuZDsgKytpdCkgewotICAgICAgICAgICAgaWYgKGl0LT5zZWNvbmQtPnBvc3RB
Y3RpdmUoKSkKLSAgICAgICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRJbmRleCgtMSk7CisgICAg
ICAgICAgICBpZiAoaXQtPnZhbHVlLT5wb3N0QWN0aXZlKCkpCisgICAgICAgICAgICAgICAgaXQt
PnZhbHVlLT5zZXRJbmRleCgtMSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICAv
LyBNYXJrIGFsbCBleGlzdGluZyBhbmltYXRpb25zIGFzIG5vIGxvbmdlciBhY3RpdmUuCiAgICAg
ICAgIGZvciAoQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2tleWZyYW1l
QW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBrZmVuZDsgKytpdCkKLSAgICAgICAgICAgIGl0LT5z
ZWNvbmQtPnNldEluZGV4KC0xKTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+c2V0SW5kZXgoLTEp
OwogICAgICAgICAgICAgCiAgICAgICAgIC8vIFRvc3MgdGhlIGFuaW1hdGlvbiBvcmRlciBtYXAu
CiAgICAgICAgIG1fa2V5ZnJhbWVBbmltYXRpb25PcmRlck1hcC5jbGVhcigpOwpAQCAtMjYyLDcg
KzI2Miw3IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVLZXlmcmFtZUFuaW1hdGlv
bnMoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgUmVuZGVyCiAgICAgVmVjdG9yPEF0b21pY1N0cmlu
Z0ltcGwqPiBhbmltc1RvQmVSZW1vdmVkOwogICAgIGtmZW5kID0gbV9rZXlmcmFtZUFuaW1hdGlv
bnMuZW5kKCk7CiAgICAgZm9yIChBbmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9
IG1fa2V5ZnJhbWVBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGtmZW5kOyArK2l0KSB7Ci0gICAg
ICAgIEtleWZyYW1lQW5pbWF0aW9uKiBrZXlmcmFtZUFuaW0gPSBpdC0+c2Vjb25kLmdldCgpOwor
ICAgICAgICBLZXlmcmFtZUFuaW1hdGlvbioga2V5ZnJhbWVBbmltID0gaXQtPnZhbHVlLmdldCgp
OwogICAgICAgICBpZiAoa2V5ZnJhbWVBbmltLT5pbmRleCgpIDwgMCkgewogICAgICAgICAgICAg
YW5pbXNUb0JlUmVtb3ZlZC5hcHBlbmQoa2V5ZnJhbWVBbmltLT5uYW1lKCkuaW1wbCgpKTsKICAg
ICAgICAgICAgIGFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+YW5pbWF0aW9uV2lsbEJlUmVtb3ZlZChr
ZXlmcmFtZUFuaW0pOwpAQCAtMjkwLDcgKzI5MCw3IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+
IENvbXBvc2l0ZUFuaW1hdGlvbjo6YW5pbWF0ZShSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBSZW5k
CiAgICAgICAgIGlmICghbV90cmFuc2l0aW9ucy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIENT
U1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fdHJhbnNpdGlv
bnMuZW5kKCk7CiAgICAgICAgICAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKLSAgICAgICAgICAgICAgICBpZiAoSW1wbGljaXRBbmltYXRpb24qIGFuaW0gPSBpdC0+c2Vj
b25kLmdldCgpKQorICAgICAgICAgICAgICAgIGlmIChJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9
IGl0LT52YWx1ZS5nZXQoKSkKICAgICAgICAgICAgICAgICAgICAgYW5pbS0+YW5pbWF0ZSh0aGlz
LCByZW5kZXJlciwgY3VycmVudFN0eWxlLCB0YXJnZXRTdHlsZSwgcmVzdWx0U3R5bGUpOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CkBAIC0zMTIsNyArMzEyLDcgQEAgUGFzc1JlZlB0cjxSZW5k
ZXJTdHlsZT4gQ29tcG9zaXRlQW5pbWF0aW9uOjpnZXRBbmltYXRlZFN0eWxlKCkgY29uc3QKICAg
ICBSZWZQdHI8UmVuZGVyU3R5bGU+IHJlc3VsdFN0eWxlOwogICAgIENTU1Byb3BlcnR5VHJhbnNp
dGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fdHJhbnNpdGlvbnMuZW5kKCk7CiAgICAg
Zm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJh
bnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChJbXBsaWNp
dEFuaW1hdGlvbiogaW1wbGljaXRBbmltYXRpb24gPSBpdC0+c2Vjb25kLmdldCgpKQorICAgICAg
ICBpZiAoSW1wbGljaXRBbmltYXRpb24qIGltcGxpY2l0QW5pbWF0aW9uID0gaXQtPnZhbHVlLmdl
dCgpKQogICAgICAgICAgICAgaW1wbGljaXRBbmltYXRpb24tPmdldEFuaW1hdGVkU3R5bGUocmVz
dWx0U3R5bGUpOwogICAgIH0KIApAQCAtMzMzLDcgKzMzMyw3IEBAIHZvaWQgQ29tcG9zaXRlQW5p
bWF0aW9uOjpzZXRBbmltYXRpbmcoYm9vbCBhbmltYXRpbmcpCiAgICAgaWYgKCFtX3RyYW5zaXRp
b25zLmlzRW1wdHkoKSkgewogICAgICAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25z
dF9pdGVyYXRvciB0cmFuc2l0aW9uc0VuZCA9IG1fdHJhbnNpdGlvbnMuZW5kKCk7CiAgICAgICAg
IGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Ry
YW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IHRyYW5zaXRpb25zRW5kOyArK2l0KSB7Ci0gICAgICAg
ICAgICBJbXBsaWNpdEFuaW1hdGlvbiogdHJhbnNpdGlvbiA9IGl0LT5zZWNvbmQuZ2V0KCk7Cisg
ICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogdHJhbnNpdGlvbiA9IGl0LT52YWx1ZS5nZXQo
KTsKICAgICAgICAgICAgIHRyYW5zaXRpb24tPnNldEFuaW1hdGluZyhhbmltYXRpbmcpOwogICAg
ICAgICB9CiAgICAgfQpAQCAtMzQxLDcgKzM0MSw3IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9u
OjpzZXRBbmltYXRpbmcoYm9vbCBhbmltYXRpbmcpCiAgICAgICAgIG1fa2V5ZnJhbWVBbmltYXRp
b25zLmNoZWNrQ29uc2lzdGVuY3koKTsKICAgICAgICAgQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3Rf
aXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmVuZCgpOwogICAg
ICAgICBmb3IgKEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFt
ZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gYW5pbWF0aW9uc0VuZDsgKytpdCkgewotICAgICAg
ICAgICAgS2V5ZnJhbWVBbmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAg
ICAgICAgS2V5ZnJhbWVBbmltYXRpb24qIGFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAg
ICAgICBhbmltLT5zZXRBbmltYXRpbmcoYW5pbWF0aW5nKTsKICAgICAgICAgfQogICAgIH0KQEAg
LTM1Niw3ICszNTYsNyBAQCBkb3VibGUgQ29tcG9zaXRlQW5pbWF0aW9uOjp0aW1lVG9OZXh0U2Vy
dmljZSgpIGNvbnN0CiAgICAgaWYgKCFtX3RyYW5zaXRpb25zLmlzRW1wdHkoKSkgewogICAgICAg
ICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciB0cmFuc2l0aW9uc0Vu
ZCA9IG1fdHJhbnNpdGlvbnMuZW5kKCk7CiAgICAgICAgIGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0
aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9
IHRyYW5zaXRpb25zRW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiog
dHJhbnNpdGlvbiA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBJbXBsaWNpdEFuaW1h
dGlvbiogdHJhbnNpdGlvbiA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGRvdWJsZSB0
ID0gdHJhbnNpdGlvbiA/IHRyYW5zaXRpb24tPnRpbWVUb05leHRTZXJ2aWNlKCkgOiAtMTsKICAg
ICAgICAgICAgIGlmICh0IDwgbWluVCB8fCBtaW5UID09IC0xKQogICAgICAgICAgICAgICAgIG1p
blQgPSB0OwpAQCAtMzY4LDcgKzM2OCw3IEBAIGRvdWJsZSBDb21wb3NpdGVBbmltYXRpb246OnRp
bWVUb05leHRTZXJ2aWNlKCkgY29uc3QKICAgICAgICAgbV9rZXlmcmFtZUFuaW1hdGlvbnMuY2hl
Y2tDb25zaXN0ZW5jeSgpOwogICAgICAgICBBbmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRv
ciBhbmltYXRpb25zRW5kID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuZW5kKCk7CiAgICAgICAgIGZv
ciAoQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lQW5pbWF0
aW9ucy5iZWdpbigpOyBpdCAhPSBhbmltYXRpb25zRW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBL
ZXlmcmFtZUFuaW1hdGlvbiogYW5pbWF0aW9uID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAg
ICAgIEtleWZyYW1lQW5pbWF0aW9uKiBhbmltYXRpb24gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAg
ICAgICAgICBkb3VibGUgdCA9IGFuaW1hdGlvbiA/IGFuaW1hdGlvbi0+dGltZVRvTmV4dFNlcnZp
Y2UoKSA6IC0xOwogICAgICAgICAgICAgaWYgKHQgPCBtaW5UIHx8IG1pblQgPT0gLTEpCiAgICAg
ICAgICAgICAgICAgbWluVCA9IHQ7CkBAIC0zOTAsNyArMzkwLDcgQEAgUGFzc1JlZlB0cjxLZXlm
cmFtZUFuaW1hdGlvbj4gQ29tcG9zaXRlQW5pbWF0aW9uOjpnZXRBbmltYXRpb25Gb3JQcm9wZXJ0
eShDU1NQcm8KICAgICAgICAgbV9rZXlmcmFtZUFuaW1hdGlvbnMuY2hlY2tDb25zaXN0ZW5jeSgp
OwogICAgICAgICBBbmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBhbmltYXRpb25zRW5k
ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuZW5kKCk7CiAgICAgICAgIGZvciAoQW5pbWF0aW9uTmFt
ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5iZWdpbigpOyBp
dCAhPSBhbmltYXRpb25zRW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBSZWZQdHI8S2V5ZnJhbWVB
bmltYXRpb24+IGFuaW0gPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgUmVmUHRyPEtleWZyYW1l
QW5pbWF0aW9uPiBhbmltID0gaXQtPnZhbHVlOwogICAgICAgICAgICAgaWYgKGFuaW0tPmhhc0Fu
aW1hdGlvbkZvclByb3BlcnR5KHByb3BlcnR5KSkKICAgICAgICAgICAgICAgICByZXR2YWwgPSBh
bmltOwogICAgICAgICB9CkBAIC00MTAsMTQgKzQxMCwxNCBAQCB2b2lkIENvbXBvc2l0ZUFuaW1h
dGlvbjo6c3VzcGVuZEFuaW1hdGlvbnMoKQogICAgICAgICBtX2tleWZyYW1lQW5pbWF0aW9ucy5j
aGVja0NvbnNpc3RlbmN5KCk7CiAgICAgICAgIEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJh
dG9yIGFuaW1hdGlvbnNFbmQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5lbmQoKTsKICAgICAgICAg
Zm9yIChBbmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVBbmlt
YXRpb25zLmJlZ2luKCk7IGl0ICE9IGFuaW1hdGlvbnNFbmQ7ICsraXQpIHsKLSAgICAgICAgICAg
IGlmIChLZXlmcmFtZUFuaW1hdGlvbiogYW5pbSA9IGl0LT5zZWNvbmQuZ2V0KCkpCisgICAgICAg
ICAgICBpZiAoS2V5ZnJhbWVBbmltYXRpb24qIGFuaW0gPSBpdC0+dmFsdWUuZ2V0KCkpCiAgICAg
ICAgICAgICAgICAgYW5pbS0+dXBkYXRlUGxheVN0YXRlKEFuaW1QbGF5U3RhdGVQYXVzZWQpOwog
ICAgICAgICB9CiAgICAgfQogICAgIGlmICghbV90cmFuc2l0aW9ucy5pc0VtcHR5KCkpIHsKICAg
ICAgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgdHJhbnNpdGlv
bnNFbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOwogICAgICAgICBmb3IgKENTU1Byb3BlcnR5VHJh
bnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBp
dCAhPSB0cmFuc2l0aW9uc0VuZDsgKytpdCkgewotICAgICAgICAgICAgSW1wbGljaXRBbmltYXRp
b24qIGFuaW0gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgSW1wbGljaXRBbmltYXRp
b24qIGFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoYW5pbSAmJiBhbmlt
LT5oYXNTdHlsZSgpKQogICAgICAgICAgICAgICAgIGFuaW0tPnVwZGF0ZVBsYXlTdGF0ZShBbmlt
UGxheVN0YXRlUGF1c2VkKTsKICAgICAgICAgfQpAQCAtNDM1LDcgKzQzNSw3IEBAIHZvaWQgQ29t
cG9zaXRlQW5pbWF0aW9uOjpyZXN1bWVBbmltYXRpb25zKCkKICAgICAgICAgbV9rZXlmcmFtZUFu
aW1hdGlvbnMuY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgICAgICBBbmltYXRpb25OYW1lTWFwOjpj
b25zdF9pdGVyYXRvciBhbmltYXRpb25zRW5kID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuZW5kKCk7
CiAgICAgICAgIGZvciAoQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2tl
eWZyYW1lQW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBhbmltYXRpb25zRW5kOyArK2l0KSB7Ci0g
ICAgICAgICAgICBLZXlmcmFtZUFuaW1hdGlvbiogYW5pbSA9IGl0LT5zZWNvbmQuZ2V0KCk7Cisg
ICAgICAgICAgICBLZXlmcmFtZUFuaW1hdGlvbiogYW5pbSA9IGl0LT52YWx1ZS5nZXQoKTsKICAg
ICAgICAgICAgIGlmIChhbmltICYmIGFuaW0tPnBsYXlTdGF0ZVBsYXlpbmcoKSkKICAgICAgICAg
ICAgICAgICBhbmltLT51cGRhdGVQbGF5U3RhdGUoQW5pbVBsYXlTdGF0ZVBsYXlpbmcpOwogICAg
ICAgICB9CkBAIC00NDQsNyArNDQ0LDcgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnJlc3Vt
ZUFuaW1hdGlvbnMoKQogICAgIGlmICghbV90cmFuc2l0aW9ucy5pc0VtcHR5KCkpIHsKICAgICAg
ICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgdHJhbnNpdGlvbnNF
bmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOwogICAgICAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNp
dGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAh
PSB0cmFuc2l0aW9uc0VuZDsgKytpdCkgewotICAgICAgICAgICAgSW1wbGljaXRBbmltYXRpb24q
IGFuaW0gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgSW1wbGljaXRBbmltYXRpb24q
IGFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoYW5pbSAmJiBhbmltLT5o
YXNTdHlsZSgpKQogICAgICAgICAgICAgICAgIGFuaW0tPnVwZGF0ZVBsYXlTdGF0ZShBbmltUGxh
eVN0YXRlUGxheWluZyk7CiAgICAgICAgIH0KQEAgLTQ1Niw3ICs0NTYsNyBAQCB2b2lkIENvbXBv
c2l0ZUFuaW1hdGlvbjo6b3ZlcnJpZGVJbXBsaWNpdEFuaW1hdGlvbnMoQ1NTUHJvcGVydHlJRCBw
cm9wZXJ0eSkKICAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBl
bmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOwogICAgIGlmICghbV90cmFuc2l0aW9ucy5pc0VtcHR5
KCkpIHsKICAgICAgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAg
ICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAg
ICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAg
ICAgICAgIGlmIChhbmltICYmIGFuaW0tPmFuaW1hdGluZ1Byb3BlcnR5KCkgPT0gcHJvcGVydHkp
CiAgICAgICAgICAgICAgICAgYW5pbS0+c2V0T3ZlcnJpZGRlbih0cnVlKTsKICAgICAgICAgfQpA
QCAtNDY4LDcgKzQ2OCw3IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpyZXN1bWVPdmVycmlk
ZGVuSW1wbGljaXRBbmltYXRpb25zKENTU1Byb3BlcnR5SUQgcHJvcGVyCiAgICAgaWYgKCFtX3Ry
YW5zaXRpb25zLmlzRW1wdHkoKSkgewogICAgICAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFw
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOwogICAgICAgICBmb3Ig
KENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0
aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIEltcGxpY2l0QW5p
bWF0aW9uKiBhbmltID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgIEltcGxpY2l0QW5p
bWF0aW9uKiBhbmltID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAgICAgaWYgKGFuaW0gJiYg
YW5pbS0+YW5pbWF0aW5nUHJvcGVydHkoKSA9PSBwcm9wZXJ0eSkKICAgICAgICAgICAgICAgICBh
bmltLT5zZXRPdmVycmlkZGVuKGZhbHNlKTsKICAgICAgICAgfQpAQCAtNDgxLDcgKzQ4MSw3IEBA
IGJvb2wgQ29tcG9zaXRlQW5pbWF0aW9uOjppc0FuaW1hdGluZ1Byb3BlcnR5KENTU1Byb3BlcnR5
SUQgcHJvcGVydHksIGJvb2wgYWNjZWxlCiAgICAgICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zLmNo
ZWNrQ29uc2lzdGVuY3koKTsKICAgICAgICAgQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0
b3IgYW5pbWF0aW9uc0VuZCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmVuZCgpOwogICAgICAgICBm
b3IgKEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1h
dGlvbnMuYmVnaW4oKTsgaXQgIT0gYW5pbWF0aW9uc0VuZDsgKytpdCkgewotICAgICAgICAgICAg
S2V5ZnJhbWVBbmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAg
S2V5ZnJhbWVBbmltYXRpb24qIGFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBp
ZiAoYW5pbSAmJiBhbmltLT5pc0FuaW1hdGluZ1Byb3BlcnR5KHByb3BlcnR5LCBhY2NlbGVyYXRl
ZE9ubHksIGlzUnVubmluZ05vdykpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgIH0KQEAgLTQ5MCw3ICs0OTAsNyBAQCBib29sIENvbXBvc2l0ZUFuaW1hdGlvbjo6aXNBbmlt
YXRpbmdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBib29sIGFjY2VsZQogICAgIGlm
ICghbV90cmFuc2l0aW9ucy5pc0VtcHR5KCkpIHsKICAgICAgICAgQ1NTUHJvcGVydHlUcmFuc2l0
aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgdHJhbnNpdGlvbnNFbmQgPSBtX3RyYW5zaXRpb25zLmVu
ZCgpOwogICAgICAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSB0cmFuc2l0aW9uc0VuZDsgKytp
dCkgewotICAgICAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kLmdl
dCgpOworICAgICAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGFuaW0gPSBpdC0+dmFsdWUuZ2V0
KCk7CiAgICAgICAgICAgICBpZiAoYW5pbSAmJiBhbmltLT5pc0FuaW1hdGluZ1Byb3BlcnR5KHBy
b3BlcnR5LCBhY2NlbGVyYXRlZE9ubHksIGlzUnVubmluZ05vdykpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTU1Niw3ICs1NTYsNyBAQCB1bnNpZ25lZCBDb21w
b3NpdGVBbmltYXRpb246Om51bWJlck9mQWN0aXZlQW5pbWF0aW9ucygpIGNvbnN0CiAgICAgICAg
IG1fa2V5ZnJhbWVBbmltYXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsKICAgICAgICAgQW5pbWF0
aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fa2V5ZnJhbWVBbmlt
YXRpb25zLmVuZCgpOwogICAgICAgICBmb3IgKEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gYW5pbWF0aW9uc0Vu
ZDsgKytpdCkgewotICAgICAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24qIGFuaW0gPSBpdC0+c2Vj
b25kLmdldCgpOworICAgICAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24qIGFuaW0gPSBpdC0+dmFs
dWUuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoYW5pbS0+cnVubmluZygpKQogICAgICAgICAgICAg
ICAgICsrY291bnQ7CiAgICAgICAgIH0KQEAgLTU2NSw3ICs1NjUsNyBAQCB1bnNpZ25lZCBDb21w
b3NpdGVBbmltYXRpb246Om51bWJlck9mQWN0aXZlQW5pbWF0aW9ucygpIGNvbnN0CiAgICAgaWYg
KCFtX3RyYW5zaXRpb25zLmlzRW1wdHkoKSkgewogICAgICAgICBDU1NQcm9wZXJ0eVRyYW5zaXRp
b25zTWFwOjpjb25zdF9pdGVyYXRvciB0cmFuc2l0aW9uc0VuZCA9IG1fdHJhbnNpdGlvbnMuZW5k
KCk7CiAgICAgICAgIGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IHRyYW5zaXRpb25zRW5kOyArK2l0
KSB7Ci0gICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT5zZWNvbmQuZ2V0
KCk7CisgICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT52YWx1ZS5nZXQo
KTsKICAgICAgICAgICAgIGlmIChhbmltLT5ydW5uaW5nKCkpCiAgICAgICAgICAgICAgICAgKytj
b3VudDsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGFu
Z3VhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGFuZ3VhZ2UuY3BwCmluZGV4IDQ3
ZjA5ZjYwOTI5OTcxZTMxNzM1NmU0OWZiY2I2M2I1ZGI0MTdmMzcuLmIzZjk3YmVjOTcyMTViODA5
YjM0MWVhYzAxYTYxN2U4MWFhN2EwNmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0xhbmd1YWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MYW5ndWFnZS5j
cHAKQEAgLTUzLDcgKzUzLDcgQEAgdm9pZCBsYW5ndWFnZURpZENoYW5nZSgpCiB7CiAgICAgT2Jz
ZXJ2ZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IG9ic2VydmVyTWFwKCkuZW5kKCk7CiAgICAgZm9yIChP
YnNlcnZlck1hcDo6aXRlcmF0b3IgaXRlciA9IG9ic2VydmVyTWFwKCkuYmVnaW4oKTsgaXRlciAh
PSBlbmQ7ICsraXRlcikKLSAgICAgICAgaXRlci0+c2Vjb25kKGl0ZXItPmZpcnN0KTsKKyAgICAg
ICAgaXRlci0+dmFsdWUoaXRlci0+a2V5KTsKIH0KIAogU3RyaW5nIGRlZmF1bHRMYW5ndWFnZSgp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuY3BwCmluZGV4IDI4
OWM2Njk5YjA1ZjQ5ZmI3MTdjMGM0MDNjMmI1NzFiYmM5YzI4YjguLjhmNTIxMDNjMmU5Y2FlOTdk
YTQ0ZDM0YzNiMjI4Mjk1Zjk2OGFkY2EgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL01JTUVUeXBlUmVnaXN0cnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01J
TUVUeXBlUmVnaXN0cnkuY3BwCkBAIC02OTIsNyArNjkyLDcgQEAgU3RyaW5nIE1JTUVUeXBlUmVn
aXN0cnk6OmdldE5vcm1hbGl6ZWRNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQogICAg
IE1JTUVUeXBlQXNzb2NpYXRpb25NYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWltZVR5cGVBc3Nv
Y2lhdGlvbk1hcCgpLmZpbmQobWltZVR5cGUpOwogCiAgICAgaWYgKGl0ICE9IG1pbWVUeXBlQXNz
b2NpYXRpb25NYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAg
IHJldHVybiBpdC0+dmFsdWU7CiAjZW5kaWYKICAgICByZXR1cm4gbWltZVR5cGU7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9IUlRGRWxldmF0aW9uLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0hSVEZFbGV2YXRpb24uY3BwCmluZGV4IDI1
ZTQ1ODk2MjVkY2NmZDdmNGQzYjU0YWY3NTMyZDhlODNmMjYyNzguLmNmZTEzZWQ4NTMwNmI1MTcx
MmFhMzA3NGI5YzhkYzM5MmNkNDY1MmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL0hSVEZFbGV2YXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL0hSVEZFbGV2YXRpb24uY3BwCkBAIC03OSw3ICs3OSw3IEBAIHN0YXRpYyBBdWRpb0J1
cyogZ2V0Q29uY2F0ZW5hdGVkSW1wdWxzZVJlc3BvbnNlc0ZvclN1YmplY3QoY29uc3QgU3RyaW5n
JiBzdWJqZWN0CiAgICAgICAgIGJ1cyA9IGNvbmNhdGVuYXRlZEltcHVsc2VSZXNwb25zZXMubGVh
a1B0cigpOwogICAgICAgICBhdWRpb0J1c01hcC5zZXQoc3ViamVjdE5hbWUsIGJ1cyk7CiAgICAg
fSBlbHNlCi0gICAgICAgIGJ1cyA9IGl0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgIGJ1cyA9IGl0
ZXJhdG9yLT52YWx1ZTsKIAogICAgIHNpemVfdCByZXNwb25zZUxlbmd0aCA9IGJ1cy0+bGVuZ3Ro
KCk7CiAgICAgc2l6ZV90IGV4cGVjdGVkTGVuZ3RoID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihUb3Rh
bE51bWJlck9mUmVzcG9uc2VzICogUmVzcG9uc2VGcmFtZVNpemUpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9Db29raWVNYW5hZ2VyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvQ29va2llTWFuYWdlci5jcHAKaW5kZXggZGQ5
MzcwMjIzMTQzNTAwNjRhMmIxOGE5ZWU5YzY1ZjI4NDllMmFiOC4uNmRiZjkxNjJiZjYxYTE3MWI0
NzlhNjIxZGQ0NzA5YTZiYmFjYWNiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYmxhY2tiZXJyeS9Db29raWVNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ibGFja2JlcnJ5L0Nvb2tpZU1hbmFnZXIuY3BwCkBAIC0xNjcsNyArMTY3LDcgQEAgU3Ry
aW5nIENvb2tpZU1hbmFnZXI6OmdlbmVyYXRlSHRtbEZyYWdtZW50Rm9yQ29va2llcygpCiAKICAg
ICBWZWN0b3I8UGFyc2VkQ29va2llKj4gY29va2llQ2FuZGlkYXRlczsKICAgICBmb3IgKEhhc2hN
YXA8U3RyaW5nLCBDb29raWVNYXAqPjo6aXRlcmF0b3IgaXQgPSBtX21hbmFnZXJNYXAuYmVnaW4o
KTsgaXQgIT0gbV9tYW5hZ2VyTWFwLmVuZCgpOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5n
ZXRBbGxDaGlsZENvb2tpZXMoJmNvb2tpZUNhbmRpZGF0ZXMpOworICAgICAgICBpdC0+dmFsdWUt
PmdldEFsbENoaWxkQ29va2llcygmY29va2llQ2FuZGlkYXRlcyk7CiAKICAgICBTdHJpbmcgcmVz
dWx0OwogICAgIFBhcnNlZENvb2tpZSogY29va2llID0gMDsKQEAgLTI4Niw3ICsyODYsNyBAQCB2
b2lkIENvb2tpZU1hbmFnZXI6OnJlbW92ZUFsbENvb2tpZXMoQmFja2luZ1N0b3JlUmVtb3ZhbFBv
bGljeSBiYWNraW5nU3RvcmVSZW1vdgogICAgIEhhc2hNYXA8U3RyaW5nLCBDb29raWVNYXAqPjo6
aXRlcmF0b3IgZmlyc3QgPSBtX21hbmFnZXJNYXAuYmVnaW4oKTsKICAgICBIYXNoTWFwPFN0cmlu
ZywgQ29va2llTWFwKj46Oml0ZXJhdG9yIGVuZCA9IG1fbWFuYWdlck1hcC5lbmQoKTsKICAgICBm
b3IgKEhhc2hNYXA8U3RyaW5nLCBDb29raWVNYXAqPjo6aXRlcmF0b3IgaXQgPSBmaXJzdDsgaXQg
IT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5kZWxldGVBbGxDb29raWVzQW5kRG9t
YWlucygpOworICAgICAgICBpdC0+dmFsdWUtPmRlbGV0ZUFsbENvb2tpZXNBbmREb21haW5zKCk7
CiAKICAgICBpZiAoYmFja2luZ1N0b3JlUmVtb3ZhbCA9PSBSZW1vdmVGcm9tQmFja2luZ1N0b3Jl
KQogICAgICAgICBtX2Nvb2tpZUJhY2tpbmdTdG9yZS0+cmVtb3ZlQWxsKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0Nvb2tpZU1hcC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0Nvb2tpZU1hcC5jcHAKaW5kZXggYmJlOWE3
Y2VkZjczZjcwZDUwYzRkZDA3MjRmNGE1ZDZhMDE1YzdhOC4uYWY0ODViNTRjMjBlY2NmY2EwYWE0
ZDk5NWZiNzIwYTQ1MzRkNzhhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YmxhY2tiZXJyeS9Db29raWVNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Js
YWNrYmVycnkvQ29va2llTWFwLmNwcApAQCAtMTcyLDcgKzE3Miw3IEBAIFBhcnNlZENvb2tpZSog
Q29va2llTWFwOjpyZW1vdmVPbGRlc3RDb29raWUoKQogICAgICAgICBDb29raWVMb2coIkNvb2tp
ZU1hcCAtIGxvb2tpbmcgaW50byBzdWJkb21haW5zIik7CiAKICAgICAgICAgZm9yIChIYXNoTWFw
PFN0cmluZywgQ29va2llTWFwKj46Oml0ZXJhdG9yIGl0ID0gbV9zdWJkb21haW5zLmJlZ2luKCk7
IGl0ICE9IG1fc3ViZG9tYWlucy5lbmQoKTsgKytpdCkgewotICAgICAgICAgICAgb2xkZXN0Q29v
a2llID0gaXQtPnNlY29uZC0+cmVtb3ZlT2xkZXN0Q29va2llKCk7CisgICAgICAgICAgICBvbGRl
c3RDb29raWUgPSBpdC0+dmFsdWUtPnJlbW92ZU9sZGVzdENvb2tpZSgpOwogICAgICAgICAgICAg
aWYgKG9sZGVzdENvb2tpZSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAt
MjE0LDcgKzIxNCw3IEBAIHZvaWQgQ29va2llTWFwOjpnZXRBbGxDaGlsZENvb2tpZXMoVmVjdG9y
PFBhcnNlZENvb2tpZSo+KiBzdGFja09mQ29va2llcykKICAgICBDb29raWVMb2coIkNvb2tpZU1h
cCAtIGdldEFsbENoaWxkQ29va2llcyBpbiBNYXAgLSAlcyIsIGdldE5hbWUoKS51dGY4KCkuZGF0
YSgpKTsKICAgICBnZXRBbGxDb29raWVzKHN0YWNrT2ZDb29raWVzKTsKICAgICBmb3IgKEhhc2hN
YXA8U3RyaW5nLCBDb29raWVNYXAqPjo6aXRlcmF0b3IgaXQgPSBtX3N1YmRvbWFpbnMuYmVnaW4o
KTsgaXQgIT0gbV9zdWJkb21haW5zLmVuZCgpOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5n
ZXRBbGxDaGlsZENvb2tpZXMoc3RhY2tPZkNvb2tpZXMpOworICAgICAgICBpdC0+dmFsdWUtPmdl
dEFsbENoaWxkQ29va2llcyhzdGFja09mQ29va2llcyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL0JpbmFyeVByb3Bl
cnR5TGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9CaW5hcnlQcm9wZXJ0eUxp
c3QuY3BwCmluZGV4IGJlYzJlYzk1MDY0NGM5OTNiZTg5YWIzNWUwYjg2N2E4YjYxMjYwODguLmIy
N2Q3ZDdjZDNjMTQzODYwZWM2NThiZWViMmQ2ZTc3MmU5NDJjNTIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2NmL0JpbmFyeVByb3BlcnR5TGlzdC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY2YvQmluYXJ5UHJvcGVydHlMaXN0LmNwcApAQCAtMjI5LDcgKzIy
OSw3IEBAIHZvaWQgQmluYXJ5UHJvcGVydHlMaXN0UGxhbjo6d3JpdGVJbnRlZ2VyQXJyYXkoY29u
c3QgaW50KiBpbnRlZ2Vycywgc2l6ZV90IHNpemUpCiAgICAgICAgIHJldHVybjsKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKICAgICAgICAgd3JpdGVJbnRlZ2VyKGludGVn
ZXJzW2ldKTsKLSAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IG1fY3VycmVudE9iamVj
dFJlZmVyZW5jZSsrOworICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBtX2N1cnJlbnRP
YmplY3RSZWZlcmVuY2UrKzsKICAgICB3cml0ZUFycmF5T2JqZWN0KHNpemUpOwogICAgIG1fY3Vy
cmVudEFnZ3JlZ2F0ZVNpemUgPSBzYXZlZEFnZ3JlZ2F0ZVNpemU7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYkhUVFBMb2FkSW5mby5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYkhUVFBMb2Fk
SW5mby5jcHAKaW5kZXggNzc2MmZkOGM0OWZkYTI0MmEzNzAyNmM2ZGZlNjc3ZjIzMDUwZTI5ZC4u
NjYzNzFiNGFiMWQyZGQyNTRmYmJkZDdhOWRlNzJlZDQxMTlkNTY2MSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJIVFRQTG9hZEluZm8uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViSFRUUExv
YWRJbmZvLmNwcApAQCAtMTA2LDcgKzEwNiw3IEBAIHN0YXRpYyB2b2lkIGFkZEhlYWRlcihIVFRQ
SGVhZGVyTWFwKiBtYXAsIGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgY29uc3QgV2ViU3RyaW5nCiAg
ICAgSFRUUEhlYWRlck1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1hcC0+YWRkKG5hbWUsIHZhbHVl
KTsKICAgICAvLyBJdCBpcyBpbXBvcnRhbnQgdGhhdCB2YWx1ZXMgYXJlIHNlcGFyYXRlZCBieSAn
XG4nLCBub3QgY29tbWEsIG90aGVyd2lzZSBTZXQtQ29va2llIGhlYWRlciBpcyBub3QgcGFyc2Vh
YmxlLgogICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJlc3VsdC5pdGVyYXRv
ci0+c2Vjb25kICs9ICJcbiIgKyBTdHJpbmcodmFsdWUpOworICAgICAgICByZXN1bHQuaXRlcmF0
b3ItPnZhbHVlICs9ICJcbiIgKyBTdHJpbmcodmFsdWUpOwogfQogCiB2b2lkIFdlYkhUVFBMb2Fk
SW5mbzo6YWRkUmVxdWVzdEhlYWRlcihjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYlN0
cmluZyYgdmFsdWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9zdXBwb3J0L1dlYlVSTFJlcXVlc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vc3VwcG9ydC9XZWJVUkxSZXF1ZXN0LmNwcAppbmRleCBmNDM3YjUxNjQzYjIzNGI2MDlm
NzcyNWZiOGQ3NmQ3MzFmNTYxN2VhLi5lMzg1MTAxNGZjZGQ0NWJmYWNiNDhiOTdiYmE3NmUzMWQ4
YjRhMDE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBw
b3J0L1dlYlVSTFJlcXVlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9t
aXVtL3N1cHBvcnQvV2ViVVJMUmVxdWVzdC5jcHAKQEAgLTE5NSw3ICsxOTUsNyBAQCB2b2lkIFdl
YlVSTFJlcXVlc3Q6OnZpc2l0SFRUUEhlYWRlckZpZWxkcyhXZWJIVFRQSGVhZGVyVmlzaXRvciog
dmlzaXRvcikgY29uc3QKIHsKICAgICBjb25zdCBIVFRQSGVhZGVyTWFwJiBtYXAgPSBtX3ByaXZh
dGUtPm1fcmVzb3VyY2VSZXF1ZXN0LT5odHRwSGVhZGVyRmllbGRzKCk7CiAgICAgZm9yIChIVFRQ
SGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC5iZWdpbigpOyBpdCAhPSBtYXAuZW5k
KCk7ICsraXQpCi0gICAgICAgIHZpc2l0b3ItPnZpc2l0SGVhZGVyKGl0LT5maXJzdCwgaXQtPnNl
Y29uZCk7CisgICAgICAgIHZpc2l0b3ItPnZpc2l0SGVhZGVyKGl0LT5rZXksIGl0LT52YWx1ZSk7
CiB9CiAKIFdlYkhUVFBCb2R5IFdlYlVSTFJlcXVlc3Q6Omh0dHBCb2R5KCkgY29uc3QKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVVJMUmVz
cG9uc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJV
UkxSZXNwb25zZS5jcHAKaW5kZXggMWY5Yjk2ODYwZTBiYTJlOTM4NWJlNTU1OTVkYTZlMDlmNTE1
MTNkNC4uODA1NjY2NDkxYjM1NDhjNmI0OTE0OWIxZmE3NTI1YWNiZDMyZDhkOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJVUkxSZXNwb25z
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJV
UkxSZXNwb25zZS5jcHAKQEAgLTI2MSw3ICsyNjEsNyBAQCB2b2lkIFdlYlVSTFJlc3BvbnNlOjph
ZGRIVFRQSGVhZGVyRmllbGQoY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBjb25zdCBXZWJTdHJpbmcm
CiAgICAgSFRUUEhlYWRlck1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9CiAgICAgICAgIGNvbnN0X2Nh
c3Q8SFRUUEhlYWRlck1hcCo+KCZtYXApLT5hZGQobmFtZSwgdmFsdWVTdHIpOwogICAgIGlmICgh
cmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kICs9ICIs
ICIgKyB2YWx1ZVN0cjsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSArPSAiLCAiICsg
dmFsdWVTdHI7CiB9CiAKIHZvaWQgV2ViVVJMUmVzcG9uc2U6OmNsZWFySFRUUEhlYWRlckZpZWxk
KGNvbnN0IFdlYlN0cmluZyYgbmFtZSkKQEAgLTI3NSw3ICsyNzUsNyBAQCB2b2lkIFdlYlVSTFJl
c3BvbnNlOjp2aXNpdEhUVFBIZWFkZXJGaWVsZHMoV2ViSFRUUEhlYWRlclZpc2l0b3IqIHZpc2l0
b3IpIGNvbnN0CiB7CiAgICAgY29uc3QgSFRUUEhlYWRlck1hcCYgbWFwID0gbV9wcml2YXRlLT5t
X3Jlc291cmNlUmVzcG9uc2UtPmh0dHBIZWFkZXJGaWVsZHMoKTsKICAgICBmb3IgKEhUVFBIZWFk
ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLmJlZ2luKCk7IGl0ICE9IG1hcC5lbmQoKTsg
KytpdCkKLSAgICAgICAgdmlzaXRvci0+dmlzaXRIZWFkZXIoaXQtPmZpcnN0LCBpdC0+c2Vjb25k
KTsKKyAgICAgICAgdmlzaXRvci0+dmlzaXRIZWFkZXIoaXQtPmtleSwgaXQtPnZhbHVlKTsKIH0K
IAogZG91YmxlIFdlYlVSTFJlc3BvbnNlOjpsYXN0TW9kaWZpZWREYXRlKCkgY29uc3QKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9u
aXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5UmVmcmVz
aE1vbml0b3IuY3BwCmluZGV4IDMwZDhkM2Q0MWUyMmJkZGExMDc2NGQ4ZjZhMWVmNDAzM2E2Mjlk
YWEuLmY4OTEwM2Y5YmUyYjVlZWRkMDdmYTc0MTFmZTI3OTFhNjIxODFlZTAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hN
b25pdG9yLmNwcApAQCAtMTM3LDcgKzEzNyw3IEBAIERpc3BsYXlSZWZyZXNoTW9uaXRvciogRGlz
cGxheVJlZnJlc2hNb25pdG9yTWFuYWdlcjo6ZW5zdXJlTW9uaXRvckZvckNsaWVudChEaXNwCiAg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgcmV0dXJuIGl0LT5zZWNvbmQuZ2V0
KCk7CisgICAgcmV0dXJuIGl0LT52YWx1ZS5nZXQoKTsKIH0KIAogdm9pZCBEaXNwbGF5UmVmcmVz
aE1vbml0b3JNYW5hZ2VyOjpyZWdpc3RlckNsaWVudChEaXNwbGF5UmVmcmVzaE1vbml0b3JDbGll
bnQqIGNsaWVudCkKQEAgLTE1Nyw3ICsxNTcsNyBAQCB2b2lkIERpc3BsYXlSZWZyZXNoTW9uaXRv
ck1hbmFnZXI6OnVucmVnaXN0ZXJDbGllbnQoRGlzcGxheVJlZnJlc2hNb25pdG9yQ2xpZW50Kgog
ICAgIGlmIChpdCA9PSBtX21vbml0b3JzLmVuZCgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0g
ICAgRGlzcGxheVJlZnJlc2hNb25pdG9yKiBtb25pdG9yID0gaXQtPnNlY29uZC5nZXQoKTsKKyAg
ICBEaXNwbGF5UmVmcmVzaE1vbml0b3IqIG1vbml0b3IgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAg
aWYgKG1vbml0b3ItPnJlbW92ZUNsaWVudChjbGllbnQpKSB7CiAgICAgICAgIGlmICghbW9uaXRv
ci0+aGFzQ2xpZW50cygpKQogICAgICAgICAgICAgbV9tb25pdG9ycy5yZW1vdmUoaXQpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAKaW5kZXggYjQ2
MjYzYTk2NjMyMzlkMmZjZmFkOGJiYmYzMjljZDU3ZDI2YjRlZC4uMGJjMTY0ZTM1MWQ1ZjE4MWE1
YmZiNDQ5MWZmMGE1YWIwMWFiZWFhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250Q2FjaGUuY3BwCkBAIC0yMTEsNyArMjExLDcgQEAgRm9udFBsYXRmb3JtRGF0
YSogRm9udENhY2hlOjpnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgZm8KICAgICAgICAgZ0ZvbnRQbGF0Zm9ybURhdGFDYWNoZS0+c2V0KGtleSwgcmVzdWx0
KTsKICAgICAgICAgZm91bmRSZXN1bHQgPSByZXN1bHQ7CiAgICAgfSBlbHNlIHsKLSAgICAgICAg
cmVzdWx0ID0gaXQtPnNlY29uZDsKKyAgICAgICAgcmVzdWx0ID0gaXQtPnZhbHVlOwogICAgICAg
ICBmb3VuZFJlc3VsdCA9IHRydWU7CiAgICAgfQogCkBAIC0zMzIsMjAgKzMzMiwyMCBAQCBTaW1w
bGVGb250RGF0YSogRm9udENhY2hlOjpnZXRDYWNoZWRGb250RGF0YShjb25zdCBGb250UGxhdGZv
cm1EYXRhKiBwbGF0Zm9ybURhdAogICAgICAgICByZXR1cm4gbmV3VmFsdWUuZmlyc3Q7CiAgICAg
fQogCi0gICAgaWYgKCFyZXN1bHQuZ2V0KCktPnNlY29uZC5zZWNvbmQpIHsKLSAgICAgICAgQVNT
RVJUKGdJbmFjdGl2ZUZvbnREYXRhLT5jb250YWlucyhyZXN1bHQuZ2V0KCktPnNlY29uZC5maXJz
dCkpOwotICAgICAgICBnSW5hY3RpdmVGb250RGF0YS0+cmVtb3ZlKHJlc3VsdC5nZXQoKS0+c2Vj
b25kLmZpcnN0KTsKKyAgICBpZiAoIXJlc3VsdC5nZXQoKS0+dmFsdWUuc2Vjb25kKSB7CisgICAg
ICAgIEFTU0VSVChnSW5hY3RpdmVGb250RGF0YS0+Y29udGFpbnMocmVzdWx0LmdldCgpLT52YWx1
ZS5maXJzdCkpOworICAgICAgICBnSW5hY3RpdmVGb250RGF0YS0+cmVtb3ZlKHJlc3VsdC5nZXQo
KS0+dmFsdWUuZmlyc3QpOwogICAgIH0KIAogICAgIGlmIChzaG91bGRSZXRhaW4gPT0gUmV0YWlu
KQotICAgICAgICByZXN1bHQuZ2V0KCktPnNlY29uZC5zZWNvbmQrKzsKLSAgICBlbHNlIGlmICgh
cmVzdWx0LmdldCgpLT5zZWNvbmQuc2Vjb25kKSB7CisgICAgICAgIHJlc3VsdC5nZXQoKS0+dmFs
dWUuc2Vjb25kKys7CisgICAgZWxzZSBpZiAoIXJlc3VsdC5nZXQoKS0+dmFsdWUuc2Vjb25kKSB7
CiAgICAgICAgIC8vIElmIHNob3VsZFJldGFpbiBpcyBEb05vdFJldGFpbiBhbmQgY291bnQgaXMg
MCwgd2Ugd2FudCB0byByZW1vdmUgdGhlIGZvbnREYXRhIGZyb20gCiAgICAgICAgIC8vIGdJbmFj
dGl2ZUZvbnREYXRhIChhYm92ZSkgYW5kIHJlLWFkZCBoZXJlIHRvIHVwZGF0ZSBMUlUgcG9zaXRp
b24uCi0gICAgICAgIGdJbmFjdGl2ZUZvbnREYXRhLT5hZGQocmVzdWx0LmdldCgpLT5zZWNvbmQu
Zmlyc3QpOworICAgICAgICBnSW5hY3RpdmVGb250RGF0YS0+YWRkKHJlc3VsdC5nZXQoKS0+dmFs
dWUuZmlyc3QpOwogICAgIH0KIAotICAgIHJldHVybiByZXN1bHQuZ2V0KCktPnNlY29uZC5maXJz
dDsKKyAgICByZXR1cm4gcmVzdWx0LmdldCgpLT52YWx1ZS5maXJzdDsKIH0KIAogU2ltcGxlRm9u
dERhdGEqIEZvbnRDYWNoZTo6Z2V0Tm9uUmV0YWluZWRMYXN0UmVzb3J0RmFsbGJhY2tGb250KGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKQpAQCAtMzYxLDggKzM2MSw4IEBA
IHZvaWQgRm9udENhY2hlOjpyZWxlYXNlRm9udERhdGEoY29uc3QgU2ltcGxlRm9udERhdGEqIGZv
bnREYXRhKQogICAgIEZvbnREYXRhQ2FjaGU6Oml0ZXJhdG9yIGl0ID0gZ0ZvbnREYXRhQ2FjaGUt
PmZpbmQoZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpKTsKICAgICBBU1NFUlQoaXQgIT0gZ0ZvbnRE
YXRhQ2FjaGUtPmVuZCgpKTsKIAotICAgIEFTU0VSVChpdC0+c2Vjb25kLnNlY29uZCk7Ci0gICAg
aWYgKCEtLWl0LT5zZWNvbmQuc2Vjb25kKQorICAgIEFTU0VSVChpdC0+dmFsdWUuc2Vjb25kKTsK
KyAgICBpZiAoIS0taXQtPnZhbHVlLnNlY29uZCkKICAgICAgICAgZ0luYWN0aXZlRm9udERhdGEt
PmFkZChmb250RGF0YSk7CiB9CiAKQEAgLTQxMCw4ICs0MTAsOCBAQCB2b2lkIEZvbnRDYWNoZTo6
cHVyZ2VJbmFjdGl2ZUZvbnREYXRhKGludCBjb3VudCkKICAgICAgICAga2V5c1RvUmVtb3ZlLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkoZ0ZvbnRQbGF0Zm9ybURhdGFDYWNoZS0+c2l6ZSgpKTsKICAg
ICAgICAgRm9udFBsYXRmb3JtRGF0YUNhY2hlOjppdGVyYXRvciBwbGF0Zm9ybURhdGFFbmQgPSBn
Rm9udFBsYXRmb3JtRGF0YUNhY2hlLT5lbmQoKTsKICAgICAgICAgZm9yIChGb250UGxhdGZvcm1E
YXRhQ2FjaGU6Oml0ZXJhdG9yIHBsYXRmb3JtRGF0YSA9IGdGb250UGxhdGZvcm1EYXRhQ2FjaGUt
PmJlZ2luKCk7IHBsYXRmb3JtRGF0YSAhPSBwbGF0Zm9ybURhdGFFbmQ7ICsrcGxhdGZvcm1EYXRh
KSB7Ci0gICAgICAgICAgICBpZiAocGxhdGZvcm1EYXRhLT5zZWNvbmQgJiYgIWdGb250RGF0YUNh
Y2hlLT5jb250YWlucygqcGxhdGZvcm1EYXRhLT5zZWNvbmQpKQotICAgICAgICAgICAgICAgIGtl
eXNUb1JlbW92ZS5hcHBlbmQocGxhdGZvcm1EYXRhLT5maXJzdCk7CisgICAgICAgICAgICBpZiAo
cGxhdGZvcm1EYXRhLT52YWx1ZSAmJiAhZ0ZvbnREYXRhQ2FjaGUtPmNvbnRhaW5zKCpwbGF0Zm9y
bURhdGEtPnZhbHVlKSkKKyAgICAgICAgICAgICAgICBrZXlzVG9SZW1vdmUuYXBwZW5kKHBsYXRm
b3JtRGF0YS0+a2V5KTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgc2l6ZV90IGtleXNU
b1JlbW92ZUNvdW50ID0ga2V5c1RvUmVtb3ZlLnNpemUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZVRyZWVOb2RlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZVRyZWVOb2RlLmNwcAppbmRleCA4N2U5
M2ZkOThmZjhkZWYwOTQ4MTZhNTI0MzRlOTAwNWU4OTk5NTlkLi42MzVlYzdiMjI5YWI0Y2E5OTE4
YjU1ZmVkZDdmYTk4N2I0MTkyNjUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HbHlwaFBhZ2VUcmVlTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlVHJlZU5vZGUuY3BwCkBAIC03NCw3ICs3NCw3IEBAIHNp
emVfdCBHbHlwaFBhZ2VUcmVlTm9kZTo6dHJlZUdseXBoUGFnZUNvdW50KCkKICAgICBpZiAocm9v
dHMpIHsKICAgICAgICAgSGFzaE1hcDxpbnQsIEdseXBoUGFnZVRyZWVOb2RlKj46Oml0ZXJhdG9y
IGVuZCA9IHJvb3RzLT5lbmQoKTsKICAgICAgICAgZm9yIChIYXNoTWFwPGludCwgR2x5cGhQYWdl
VHJlZU5vZGUqPjo6aXRlcmF0b3IgaXQgPSByb290cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KQotICAgICAgICAgICAgY291bnQgKz0gaXQtPnNlY29uZC0+cGFnZUNvdW50KCk7CisgICAgICAg
ICAgICBjb3VudCArPSBpdC0+dmFsdWUtPnBhZ2VDb3VudCgpOwogICAgIH0KICAgICAKICAgICBp
ZiAocGFnZVplcm9Sb290KQpAQCAtODgsNyArODgsNyBAQCBzaXplX3QgR2x5cGhQYWdlVHJlZU5v
ZGU6OnBhZ2VDb3VudCgpIGNvbnN0CiAgICAgc2l6ZV90IGNvdW50ID0gbV9wYWdlICYmIG1fcGFn
ZS0+b3duZXIoKSA9PSB0aGlzID8gMSA6IDA7CiAgICAgSGFzaE1hcDxjb25zdCBGb250RGF0YSos
IEdseXBoUGFnZVRyZWVOb2RlKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fY2hpbGRyZW4uZW5k
KCk7CiAgICAgZm9yIChIYXNoTWFwPGNvbnN0IEZvbnREYXRhKiwgR2x5cGhQYWdlVHJlZU5vZGUq
Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2NoaWxkcmVuLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkKLSAgICAgICAgY291bnQgKz0gaXQtPnNlY29uZC0+cGFnZUNvdW50KCk7CisgICAgICAgIGNv
dW50ICs9IGl0LT52YWx1ZS0+cGFnZUNvdW50KCk7CiAKICAgICByZXR1cm4gY291bnQ7CiB9CkBA
IC05OSw3ICs5OSw3IEBAIHZvaWQgR2x5cGhQYWdlVHJlZU5vZGU6OnBydW5lVHJlZUN1c3RvbUZv
bnREYXRhKGNvbnN0IEZvbnREYXRhKiBmb250RGF0YSkKICAgICBpZiAocm9vdHMpIHsKICAgICAg
ICAgSGFzaE1hcDxpbnQsIEdseXBoUGFnZVRyZWVOb2RlKj46Oml0ZXJhdG9yIGVuZCA9IHJvb3Rz
LT5lbmQoKTsKICAgICAgICAgZm9yIChIYXNoTWFwPGludCwgR2x5cGhQYWdlVHJlZU5vZGUqPjo6
aXRlcmF0b3IgaXQgPSByb290cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAg
ICAgaXQtPnNlY29uZC0+cHJ1bmVDdXN0b21Gb250RGF0YShmb250RGF0YSk7CisgICAgICAgICAg
ICBpdC0+dmFsdWUtPnBydW5lQ3VzdG9tRm9udERhdGEoZm9udERhdGEpOwogICAgIH0KICAgICAK
ICAgICBpZiAocGFnZVplcm9Sb290KQpAQCAtMTExLDcgKzExMSw3IEBAIHZvaWQgR2x5cGhQYWdl
VHJlZU5vZGU6OnBydW5lVHJlZUZvbnREYXRhKGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0
YSkKICAgICBpZiAocm9vdHMpIHsKICAgICAgICAgSGFzaE1hcDxpbnQsIEdseXBoUGFnZVRyZWVO
b2RlKj46Oml0ZXJhdG9yIGVuZCA9IHJvb3RzLT5lbmQoKTsKICAgICAgICAgZm9yIChIYXNoTWFw
PGludCwgR2x5cGhQYWdlVHJlZU5vZGUqPjo6aXRlcmF0b3IgaXQgPSByb290cy0+YmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgaXQtPnNlY29uZC0+cHJ1bmVGb250RGF0YShm
b250RGF0YSk7CisgICAgICAgICAgICBpdC0+dmFsdWUtPnBydW5lRm9udERhdGEoZm9udERhdGEp
OwogICAgIH0KICAgICAKICAgICBpZiAocGFnZVplcm9Sb290KQpAQCAtMzYyLDcgKzM2Miw3IEBA
IHZvaWQgR2x5cGhQYWdlVHJlZU5vZGU6OnBydW5lQ3VzdG9tRm9udERhdGEoY29uc3QgRm9udERh
dGEqIGZvbnREYXRhKQogICAgICAgICByZXR1cm47CiAgICAgSGFzaE1hcDxjb25zdCBGb250RGF0
YSosIEdseXBoUGFnZVRyZWVOb2RlKj46Oml0ZXJhdG9yIGVuZCA9IG1fY2hpbGRyZW4uZW5kKCk7
CiAgICAgZm9yIChIYXNoTWFwPGNvbnN0IEZvbnREYXRhKiwgR2x5cGhQYWdlVHJlZU5vZGUqPjo6
aXRlcmF0b3IgaXQgPSBtX2NoaWxkcmVuLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAg
ICAgaXQtPnNlY29uZC0+cHJ1bmVDdXN0b21Gb250RGF0YShmb250RGF0YSk7CisgICAgICAgIGl0
LT52YWx1ZS0+cHJ1bmVDdXN0b21Gb250RGF0YShmb250RGF0YSk7CiB9CiAKIHZvaWQgR2x5cGhQ
YWdlVHJlZU5vZGU6OnBydW5lRm9udERhdGEoY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRh
LCB1bnNpZ25lZCBsZXZlbCkKQEAgLTM3OCw3ICszNzgsNyBAQCB2b2lkIEdseXBoUGFnZVRyZWVO
b2RlOjpwcnVuZUZvbnREYXRhKGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwgdW5zaWdu
ZWQgbAogICAgIC8vIFBydW5lIGFueSBicmFuY2ggdGhhdCBjb250YWlucyB0aGlzIEZvbnREYXRh
LgogICAgIEhhc2hNYXA8Y29uc3QgRm9udERhdGEqLCBHbHlwaFBhZ2VUcmVlTm9kZSo+OjppdGVy
YXRvciBjaGlsZCA9IG1fY2hpbGRyZW4uZmluZChmb250RGF0YSk7CiAgICAgaWYgKGNoaWxkICE9
IG1fY2hpbGRyZW4uZW5kKCkpIHsKLSAgICAgICAgR2x5cGhQYWdlVHJlZU5vZGUqIG5vZGUgPSBj
aGlsZC0+c2Vjb25kOworICAgICAgICBHbHlwaFBhZ2VUcmVlTm9kZSogbm9kZSA9IGNoaWxkLT52
YWx1ZTsKICAgICAgICAgbV9jaGlsZHJlbi5yZW1vdmUoZm9udERhdGEpOwogICAgICAgICB1bnNp
Z25lZCBjdXN0b21Gb250Q291bnQgPSBub2RlLT5tX2N1c3RvbUZvbnRDb3VudDsKICAgICAgICAg
ZGVsZXRlIG5vZGU7CkBAIC0zOTQsNyArMzk0LDcgQEAgdm9pZCBHbHlwaFBhZ2VUcmVlTm9kZTo6
cHJ1bmVGb250RGF0YShjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEsIHVuc2lnbmVkIGwK
IAogICAgIEhhc2hNYXA8Y29uc3QgRm9udERhdGEqLCBHbHlwaFBhZ2VUcmVlTm9kZSo+OjppdGVy
YXRvciBlbmQgPSBtX2NoaWxkcmVuLmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDxjb25zdCBGb250
RGF0YSosIEdseXBoUGFnZVRyZWVOb2RlKj46Oml0ZXJhdG9yIGl0ID0gbV9jaGlsZHJlbi5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPnBydW5lRm9udERhdGEo
Zm9udERhdGEsIGxldmVsKTsKKyAgICAgICAgaXQtPnZhbHVlLT5wcnVuZUZvbnREYXRhKGZvbnRE
YXRhLCBsZXZlbCk7CiB9CiAKICNpZm5kZWYgTkRFQlVHCkBAIC00MDYsOCArNDA2LDggQEAgdm9p
ZCBHbHlwaFBhZ2VUcmVlTm9kZTo6cHJ1bmVGb250RGF0YShjb25zdCBTaW1wbGVGb250RGF0YSog
Zm9udERhdGEsIHVuc2lnbmVkIGwKIAogICAgICAgICBIYXNoTWFwPGNvbnN0IEZvbnREYXRhKiwg
R2x5cGhQYWdlVHJlZU5vZGUqPjo6aXRlcmF0b3IgZW5kID0gbV9jaGlsZHJlbi5lbmQoKTsKICAg
ICAgICAgZm9yIChIYXNoTWFwPGNvbnN0IEZvbnREYXRhKiwgR2x5cGhQYWdlVHJlZU5vZGUqPjo6
aXRlcmF0b3IgaXQgPSBtX2NoaWxkcmVuLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAg
ICAgICAgICAgcHJpbnRmKCIlc1x0JXAgJXNcbiIsIGluZGVudC5kYXRhKCksIGl0LT5maXJzdCwg
aXQtPmZpcnN0LT5kZXNjcmlwdGlvbigpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICAgICAgaXQt
PnNlY29uZC0+c2hvd1N1YnRyZWUoKTsKKyAgICAgICAgICAgIHByaW50ZigiJXNcdCVwICVzXG4i
LCBpbmRlbnQuZGF0YSgpLCBpdC0+a2V5LCBpdC0+a2V5LT5kZXNjcmlwdGlvbigpLnV0ZjgoKS5k
YXRhKCkpOworICAgICAgICAgICAgaXQtPnZhbHVlLT5zaG93U3VidHJlZSgpOwogICAgICAgICB9
CiAgICAgICAgIGlmIChtX3N5c3RlbUZhbGxiYWNrQ2hpbGQpIHsKICAgICAgICAgICAgIHByaW50
ZigiJXNcdCogZmFsbGJhY2tcbiIsIGluZGVudC5kYXRhKCkpOwpAQCAtNDI1LDggKzQyNSw4IEBA
IHZvaWQgc2hvd0dseXBoUGFnZVRyZWVzKCkKICAgICBzaG93R2x5cGhQYWdlVHJlZSgwKTsKICAg
ICBIYXNoTWFwPGludCwgV2ViQ29yZTo6R2x5cGhQYWdlVHJlZU5vZGUqPjo6aXRlcmF0b3IgZW5k
ID0gV2ViQ29yZTo6R2x5cGhQYWdlVHJlZU5vZGU6OnJvb3RzLT5lbmQoKTsKICAgICBmb3IgKEhh
c2hNYXA8aW50LCBXZWJDb3JlOjpHbHlwaFBhZ2VUcmVlTm9kZSo+OjppdGVyYXRvciBpdCA9IFdl
YkNvcmU6OkdseXBoUGFnZVRyZWVOb2RlOjpyb290cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7Ci0gICAgICAgIHByaW50ZigiXG5QYWdlICVkOlxuIiwgaXQtPmZpcnN0KTsKLSAgICAgICAg
c2hvd0dseXBoUGFnZVRyZWUoaXQtPmZpcnN0KTsKKyAgICAgICAgcHJpbnRmKCJcblBhZ2UgJWQ6
XG4iLCBpdC0+a2V5KTsKKyAgICAgICAgc2hvd0dseXBoUGFnZVRyZWUoaXQtPmtleSk7CiAgICAg
fQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UaWxl
ZEJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UaWxl
ZEJhY2tpbmdTdG9yZS5jcHAKaW5kZXggYjQ4NWRjZjE3ZjVlYmVmMjlhOTY2ZWNjNjNkNmExOTA4
MzJkNzMwNC4uZGY3ZmE3ZGNiM2I5OWFmYWYyYWJlNmRjZTFlMmZkMWE3ZTU3OWRjNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0
b3JlLmNwcApAQCAtMTE2LDkgKzExNiw5IEBAIHZvaWQgVGlsZWRCYWNraW5nU3RvcmU6OnVwZGF0
ZVRpbGVCdWZmZXJzKCkKICAgICBWZWN0b3I8UmVmUHRyPFRpbGU+ID4gZGlydHlUaWxlczsKICAg
ICBUaWxlTWFwOjppdGVyYXRvciBlbmQgPSBtX3RpbGVzLmVuZCgpOwogICAgIGZvciAoVGlsZU1h
cDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAg
ICAgICBpZiAoIWl0LT5zZWNvbmQtPmlzRGlydHkoKSkKKyAgICAgICAgaWYgKCFpdC0+dmFsdWUt
PmlzRGlydHkoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBkaXJ0eVRpbGVzLmFw
cGVuZChpdC0+c2Vjb25kKTsKKyAgICAgICAgZGlydHlUaWxlcy5hcHBlbmQoaXQtPnZhbHVlKTsK
ICAgICB9CiAKICAgICBpZiAoZGlydHlUaWxlcy5pc0VtcHR5KCkpIHsKQEAgLTQwMSwxMyArNDAx
LDEzIEBAIGJvb2wgVGlsZWRCYWNraW5nU3RvcmU6OnJlc2l6ZUVkZ2VUaWxlcygpCiAgICAgVmVj
dG9yPFRpbGU6OkNvb3JkaW5hdGU+IHRpbGVzVG9SZW1vdmU7CiAgICAgVGlsZU1hcDo6aXRlcmF0
b3IgZW5kID0gbV90aWxlcy5lbmQoKTsKICAgICBmb3IgKFRpbGVNYXA6Oml0ZXJhdG9yIGl0ID0g
bV90aWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgVGlsZTo6Q29vcmRp
bmF0ZSB0aWxlQ29vcmRpbmF0ZSA9IGl0LT5zZWNvbmQtPmNvb3JkaW5hdGUoKTsKLSAgICAgICAg
SW50UmVjdCB0aWxlUmVjdCA9IGl0LT5zZWNvbmQtPnJlY3QoKTsKKyAgICAgICAgVGlsZTo6Q29v
cmRpbmF0ZSB0aWxlQ29vcmRpbmF0ZSA9IGl0LT52YWx1ZS0+Y29vcmRpbmF0ZSgpOworICAgICAg
ICBJbnRSZWN0IHRpbGVSZWN0ID0gaXQtPnZhbHVlLT5yZWN0KCk7CiAgICAgICAgIEludFJlY3Qg
ZXhwZWN0ZWRUaWxlUmVjdCA9IHRpbGVSZWN0Rm9yQ29vcmRpbmF0ZSh0aWxlQ29vcmRpbmF0ZSk7
CiAgICAgICAgIGlmIChleHBlY3RlZFRpbGVSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgICAgIHRp
bGVzVG9SZW1vdmUuYXBwZW5kKHRpbGVDb29yZGluYXRlKTsKICAgICAgICAgZWxzZSBpZiAoZXhw
ZWN0ZWRUaWxlUmVjdCAhPSB0aWxlUmVjdCkgewotICAgICAgICAgICAgaXQtPnNlY29uZC0+cmVz
aXplKGV4cGVjdGVkVGlsZVJlY3Quc2l6ZSgpKTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+cmVz
aXplKGV4cGVjdGVkVGlsZVJlY3Quc2l6ZSgpKTsKICAgICAgICAgICAgIHdhc1Jlc2l6ZWQgPSB0
cnVlOwogICAgICAgICB9CiAgICAgfQpAQCAtNDI2LDggKzQyNiw4IEBAIHZvaWQgVGlsZWRCYWNr
aW5nU3RvcmU6OnNldEtlZXBSZWN0KGNvbnN0IEludFJlY3QmIGtlZXBSZWN0KQogICAgIFZlY3Rv
cjxUaWxlOjpDb29yZGluYXRlPiB0b1JlbW92ZTsKICAgICBUaWxlTWFwOjppdGVyYXRvciBlbmQg
PSBtX3RpbGVzLmVuZCgpOwogICAgIGZvciAoVGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVz
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBUaWxlOjpDb29yZGluYXRlIGNv
b3JkaW5hdGUgPSBpdC0+c2Vjb25kLT5jb29yZGluYXRlKCk7Ci0gICAgICAgIEZsb2F0UmVjdCB0
aWxlUmVjdCA9IGl0LT5zZWNvbmQtPnJlY3QoKTsKKyAgICAgICAgVGlsZTo6Q29vcmRpbmF0ZSBj
b29yZGluYXRlID0gaXQtPnZhbHVlLT5jb29yZGluYXRlKCk7CisgICAgICAgIEZsb2F0UmVjdCB0
aWxlUmVjdCA9IGl0LT52YWx1ZS0+cmVjdCgpOwogICAgICAgICBpZiAoIXRpbGVSZWN0LmludGVy
c2VjdHMoa2VlcFJlY3RGKSkKICAgICAgICAgICAgIHRvUmVtb3ZlLmFwcGVuZChjb29yZGluYXRl
KTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
dmZvdW5kYXRpb24vY2YvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0YuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL2NmL01lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbkNGLmNwcAppbmRleCA4MWQ4NjI5ODE1MjlkY2I1ZTRhYjJkMGMw
MDY2NzJkZTc2YTg4MmYxLi43OGNhYzY3MmU0MThjMTU5MDMzYzBhMWZmODhkZmYyZDZhMTE5NTc3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRp
b24vY2YvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0YuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9jZi9NZWRpYVBsYXllclByaXZh
dGVBVkZvdW5kYXRpb25DRi5jcHAKQEAgLTkxNSw3ICs5MTUsNyBAQCBBVkZXcmFwcGVyKiBBVkZX
cmFwcGVyOjphdmZXcmFwcGVyRm9yQ2FsbGJhY2tDb250ZXh0KHZvaWQqIGNvbnRleHQpCiAgICAg
aWYgKGl0ID09IG1hcCgpLmVuZCgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHJldHVybiBp
dC0+c2Vjb25kOworICAgIHJldHVybiBpdC0+dmFsdWU7CiB9CiAKIHZvaWQgQVZGV3JhcHBlcjo6
c2NoZWR1bGVEaXNjb25uZWN0QW5kRGVsZXRlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJUaWxlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyVGlsZXIuY3BwCmluZGV4IDlm
NWM2YWYzZTg1MDYxYTk3MmQwNDMxMWJlOTAzMTVlOTViNWUwZGEuLjZkZjFkYTNiN2M4MDA0Y2Ey
MTgyMTVhYmQ0ZmJiMjcxOWM1ZTg2MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJUaWxlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclRpbGVyLmNwcApAQCAtMzY5LDgg
KzM2OSw4IEBAIHZvaWQgTGF5ZXJUaWxlcjo6bGF5ZXJWaXNpYmlsaXR5Q2hhbmdlZChMYXllckNv
bXBvc2l0aW5nVGhyZWFkKiwgYm9vbCB2aXNpYmxlKQogICAgIH0KIAogICAgIGZvciAoVGlsZU1h
cDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IG1fdGlsZXMuZW5kKCk7ICsr
aXQpIHsKLSAgICAgICAgVGlsZUluZGV4IGluZGV4ID0gKCppdCkuZmlyc3Q7Ci0gICAgICAgIExh
eWVyVGlsZSogdGlsZSA9ICgqaXQpLnNlY29uZDsKKyAgICAgICAgVGlsZUluZGV4IGluZGV4ID0g
KCppdCkua2V5OworICAgICAgICBMYXllclRpbGUqIHRpbGUgPSAoKml0KS52YWx1ZTsKICAgICAg
ICAgdGlsZS0+c2V0VmlzaWJsZShmYWxzZSk7CiAgICAgfQogfQpAQCAtMzg0LDIxICszODQsMjEg
QEAgdm9pZCBMYXllclRpbGVyOjp1cGxvYWRUZXh0dXJlc0lmTmVlZGVkKExheWVyQ29tcG9zaXRp
bmdUaHJlYWQqKQogCiAgICAgVGlsZUpvYnNNYXA6OmNvbnN0X2l0ZXJhdG9yIHRpbGVKb2JzSXRl
ckVuZCA9IHRpbGVKb2JzTWFwLmVuZCgpOwogICAgIGZvciAoVGlsZUpvYnNNYXA6OmNvbnN0X2l0
ZXJhdG9yIHRpbGVKb2JzSXRlciA9IHRpbGVKb2JzTWFwLmJlZ2luKCk7IHRpbGVKb2JzSXRlciAh
PSB0aWxlSm9ic0l0ZXJFbmQ7ICsrdGlsZUpvYnNJdGVyKSB7Ci0gICAgICAgIEludFBvaW50IG9y
aWdpbiA9IG9yaWdpbk9mVGlsZSh0aWxlSm9ic0l0ZXItPmZpcnN0KTsKKyAgICAgICAgSW50UG9p
bnQgb3JpZ2luID0gb3JpZ2luT2ZUaWxlKHRpbGVKb2JzSXRlci0+a2V5KTsKIAotICAgICAgICBM
YXllclRpbGUqIHRpbGUgPSBtX3RpbGVzLmdldCh0aWxlSm9ic0l0ZXItPmZpcnN0KTsKKyAgICAg
ICAgTGF5ZXJUaWxlKiB0aWxlID0gbV90aWxlcy5nZXQodGlsZUpvYnNJdGVyLT5rZXkpOwogICAg
ICAgICBpZiAoIXRpbGUpIHsKICAgICAgICAgICAgIGlmIChvcmlnaW4ueCgpID49IG1fcmVxdWly
ZWRUZXh0dXJlU2l6ZS53aWR0aCgpIHx8IG9yaWdpbi55KCkgPj0gbV9yZXF1aXJlZFRleHR1cmVT
aXplLmhlaWdodCgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgdGls
ZSA9IG5ldyBMYXllclRpbGUoKTsKLSAgICAgICAgICAgIG1fdGlsZXMuYWRkKHRpbGVKb2JzSXRl
ci0+Zmlyc3QsIHRpbGUpOworICAgICAgICAgICAgbV90aWxlcy5hZGQodGlsZUpvYnNJdGVyLT5r
ZXksIHRpbGUpOwogICAgICAgICB9CiAKICAgICAgICAgSW50UmVjdCB0aWxlUmVjdChvcmlnaW4s
IHRpbGVTaXplKCkpOwogICAgICAgICB0aWxlUmVjdC5zZXRXaWR0aChtaW4obV9yZXF1aXJlZFRl
eHR1cmVTaXplLndpZHRoKCkgLSB0aWxlUmVjdC54KCksIHRpbGVSZWN0LndpZHRoKCkpKTsKICAg
ICAgICAgdGlsZVJlY3Quc2V0SGVpZ2h0KG1pbihtX3JlcXVpcmVkVGV4dHVyZVNpemUuaGVpZ2h0
KCkgLSB0aWxlUmVjdC55KCksIHRpbGVSZWN0LmhlaWdodCgpKSk7CiAKLSAgICAgICAgcGVyZm9y
bVRpbGVKb2IodGlsZSwgKnRpbGVKb2JzSXRlci0+c2Vjb25kLCB0aWxlUmVjdCk7CisgICAgICAg
IHBlcmZvcm1UaWxlSm9iKHRpbGUsICp0aWxlSm9ic0l0ZXItPnZhbHVlLCB0aWxlUmVjdCk7CiAg
ICAgfQogCiAgICAgbV90ZXh0dXJlSm9icy5jbGVhcigpOwpAQCAtNDQxLDExICs0NDEsMTEgQEAg
dm9pZCBMYXllclRpbGVyOjphZGRUaWxlSm9iKGNvbnN0IFRpbGVJbmRleCYgaW5kZXgsIGNvbnN0
IFRleHR1cmVKb2ImIGpvYiwgVGlsZUoKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gSW4gdGhp
cyBjYXNlIHdlIGxlYXZlIHRoZSBwcmV2aW91cyBqb2IuCi0gICAgaWYgKGpvYi5tX3R5cGUgPT0g
VGV4dHVyZUpvYjo6RGlydHlDb250ZW50cyAmJiByZXN1bHQuaXRlcmF0b3ItPnNlY29uZC0+bV90
eXBlID09IFRleHR1cmVKb2I6OkRpc2NhcmRDb250ZW50cykKKyAgICBpZiAoam9iLm1fdHlwZSA9
PSBUZXh0dXJlSm9iOjpEaXJ0eUNvbnRlbnRzICYmIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPm1f
dHlwZSA9PSBUZXh0dXJlSm9iOjpEaXNjYXJkQ29udGVudHMpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIC8vIE92ZXJyaWRlIHRoZSBwcmV2aW91cyBqb2IuCi0gICAgcmVzdWx0Lml0ZXJhdG9yLT5z
ZWNvbmQgPSAmam9iOworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSAmam9iOwogfQogCiB2
b2lkIExheWVyVGlsZXI6OnBlcmZvcm1UaWxlSm9iKExheWVyVGlsZSogdGlsZSwgY29uc3QgVGV4
dHVyZUpvYiYgam9iLCBjb25zdCBJbnRSZWN0JiB0aWxlUmVjdCkKQEAgLTYzMCw3ICs2MzAsNyBA
QCB2b2lkIExheWVyVGlsZXI6OmRlbGV0ZVRleHR1cmVzKExheWVyQ29tcG9zaXRpbmdUaHJlYWQq
KQogICAgIC8vIHRvdWNoaW5nIHNvbWUgV2ViS2l0IHRocmVhZCBzdGF0ZS4KICAgICBpZiAobV90
aWxlcy5zaXplKCkpIHsKICAgICAgICAgZm9yIChUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1fdGls
ZXMuYmVnaW4oKTsgaXQgIT0gbV90aWxlcy5lbmQoKTsgKytpdCkKLSAgICAgICAgICAgICgqaXQp
LnNlY29uZC0+ZGlzY2FyZENvbnRlbnRzKCk7CisgICAgICAgICAgICAoKml0KS52YWx1ZS0+ZGlz
Y2FyZENvbnRlbnRzKCk7CiAgICAgICAgIG1fdGlsZXMuY2xlYXIoKTsKIAogICAgICAgICBtX2Nv
bnRlbnRzRGlydHkgPSB0cnVlOwpAQCAtNjQ3LDcgKzY0Nyw3IEBAIHZvaWQgTGF5ZXJUaWxlcjo6
cHJ1bmVUZXh0dXJlcygpCiAgICAgLy8gUHJ1bmUgdGlsZXMgdGhhdCBhcmUgbm8gbG9uZ2VyIG5l
ZWRlZC4KICAgICBWZWN0b3I8VGlsZUluZGV4PiB0aWxlc1RvRGVsZXRlOwogICAgIGZvciAoVGls
ZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IG1fdGlsZXMuZW5kKCk7
ICsraXQpIHsKLSAgICAgICAgVGlsZUluZGV4IGluZGV4ID0gKCppdCkuZmlyc3Q7CisgICAgICAg
IFRpbGVJbmRleCBpbmRleCA9ICgqaXQpLmtleTsKIAogICAgICAgICBJbnRQb2ludCBvcmlnaW4g
PSBvcmlnaW5PZlRpbGUoaW5kZXgpOwogICAgICAgICBpZiAob3JpZ2luLngoKSA+PSBtX3JlcXVp
cmVkVGV4dHVyZVNpemUud2lkdGgoKSB8fCBvcmlnaW4ueSgpID49IG1fcmVxdWlyZWRUZXh0dXJl
U2l6ZS5oZWlnaHQoKSkKQEAgLTczOSw3ICs3MzksNyBAQCB2b2lkIExheWVyVGlsZXI6OmJpbmRD
b250ZW50c1RleHR1cmUoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCopCiAgICAgaWYgKG1fdGlsZXMu
c2l6ZSgpICE9IDEpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNvbnN0IExheWVyVGlsZSogdGls
ZSA9IG1fdGlsZXMuYmVnaW4oKS0+c2Vjb25kOworICAgIGNvbnN0IExheWVyVGlsZSogdGlsZSA9
IG1fdGlsZXMuYmVnaW4oKS0+dmFsdWU7CiAKICAgICBBU1NFUlQodGlsZS0+aGFzVGV4dHVyZSgp
KTsKICAgICBpZiAoIXRpbGUtPmhhc1RleHR1cmUoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvVGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdU
aHJlYWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9U
ZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZC5jcHAKaW5kZXggNWI2YmI4NzM2NDlmOWE4OGJj
Yjc4ZTIwYjE3YTE4ZWMzNTRjYjc1MS4uZDY1YzRkYWRkYmJiMjU5OGViMGZhMjQxNzFjNGU2YWYx
NGRkNzRjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxh
Y2tiZXJyeS9UZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9UZXh0dXJlQ2FjaGVDb21wb3NpdGlu
Z1RocmVhZC5jcHAKQEAgLTIwMiwxMCArMjAyLDEwIEBAIHZvaWQgVGV4dHVyZUNhY2hlQ29tcG9z
aXRpbmdUaHJlYWQ6OnNldE1lbW9yeVVzYWdlKHNpemVfdCBtZW1vcnlVc2FnZSkKIFBhc3NSZWZQ
dHI8VGV4dHVyZT4gVGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQ6OnRleHR1cmVGb3JUaWxl
ZENvbnRlbnRzKGNvbnN0IFNrQml0bWFwJiBjb250ZW50cywgY29uc3QgSW50UmVjdCYgdGlsZVJl
Y3QsIGNvbnN0IFRpbGVJbmRleCYgaW5kZXgsIGJvb2wgaXNPcGFxdWUpCiB7CiAgICAgSGFzaE1h
cDxDb250ZW50c0tleSwgVGV4dHVyZU1hcD46Oml0ZXJhdG9yIGl0ID0gbV9jYWNoZS5hZGQoa2V5
KGNvbnRlbnRzKSwgVGV4dHVyZU1hcCgpKS5pdGVyYXRvcjsKLSAgICBUZXh0dXJlTWFwJiBtYXAg
PSAoKml0KS5zZWNvbmQ7CisgICAgVGV4dHVyZU1hcCYgbWFwID0gKCppdCkudmFsdWU7CiAKICAg
ICBUZXh0dXJlTWFwOjppdGVyYXRvciBqdCA9IG1hcC5hZGQoaW5kZXgsIFJlZlB0cjxUZXh0dXJl
PigpKS5pdGVyYXRvcjsKLSAgICBSZWZQdHI8VGV4dHVyZT4gdGV4dHVyZSA9ICgqanQpLnNlY29u
ZDsKKyAgICBSZWZQdHI8VGV4dHVyZT4gdGV4dHVyZSA9ICgqanQpLnZhbHVlOwogICAgIGlmICgh
dGV4dHVyZSkgewogICAgICAgICB0ZXh0dXJlID0gY3JlYXRlVGV4dHVyZSgpOwogI2lmIERFQlVH
X1RFWFRVUkVfTUVNT1JZX1VTQUdFCkBAIC0yNDQsNyArMjQ0LDcgQEAgUGFzc1JlZlB0cjxUZXh0
dXJlPiBUZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZDo6dGV4dHVyZUZvckNvbG9yKGNvbnN0
IENvbG9yJgogI2VuZGlmCiAgICAgICAgIG1fY29sb3JzLnNldChjb2xvciwgdGV4dHVyZSk7CiAg
ICAgfSBlbHNlCi0gICAgICAgIHRleHR1cmUgPSAoKml0KS5zZWNvbmQ7CisgICAgICAgIHRleHR1
cmUgPSAoKml0KS52YWx1ZTsKIAogICAgIC8vIENvbG9yIHRleHR1cmVzIGNhbid0IGJlIGV2aWN0
ZWQsIHNvIG5vIG5lZWQgZm9yIFRleHR1cmVQcm90ZWN0b3IuCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCmluZGV4
IGRjZGI1ODZkMGNiZmIzMjkzNjFkNmVkYjU5ZmNjYWMwZWIzMGIyMjYuLjUwZDMzYTA3OWEyYmZk
NWRmOWI4ZDZmYjY2YmQ5MTFhNzBkMmZkZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcApAQCAtNDc3LDcgKzQ3
Nyw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjptb3ZlT3JDb3B5QW5pbWF0aW9ucyhNb3ZlT3JD
b3B5IG9wZXJhdGlvbiwgUGxhdGZvcm1DQUxheWVyCiAgICAgLy8gTG9vayBmb3IgcnVubmluZyBh
bmltYXRpb25zIGFmZmVjdGluZyB0aGlzIHByb3BlcnR5LgogICAgIEFuaW1hdGlvbnNNYXA6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IG1fcnVubmluZ0FuaW1hdGlvbnMuZW5kKCk7CiAgICAgZm9yIChB
bmltYXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fcnVubmluZ0FuaW1hdGlvbnMuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IFZlY3RvcjxMYXllclByb3Bl
cnR5QW5pbWF0aW9uPiYgcHJvcGVydHlBbmltYXRpb25zID0gaXQtPnNlY29uZDsKKyAgICAgICAg
Y29uc3QgVmVjdG9yPExheWVyUHJvcGVydHlBbmltYXRpb24+JiBwcm9wZXJ0eUFuaW1hdGlvbnMg
PSBpdC0+dmFsdWU7CiAgICAgICAgIHNpemVfdCBudW1BbmltYXRpb25zID0gcHJvcGVydHlBbmlt
YXRpb25zLnNpemUoKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1BbmltYXRp
b25zOyArK2kpIHsKICAgICAgICAgICAgIGNvbnN0IExheWVyUHJvcGVydHlBbmltYXRpb24mIGN1
cnJBbmltYXRpb24gPSBwcm9wZXJ0eUFuaW1hdGlvbnNbaV07CkBAIC03MTksNyArNzE5LDcgQEAg
dm9pZCBHcmFwaGljc0xheWVyQ0E6OnBhdXNlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0
aW9uTmFtZSwgZG91YmxlIHRpbWVPZmYKIAogICAgIEFuaW1hdGlvbnNUb1Byb2Nlc3NNYXA6Oml0
ZXJhdG9yIGl0ID0gbV9hbmltYXRpb25zVG9Qcm9jZXNzLmZpbmQoYW5pbWF0aW9uTmFtZSk7CiAg
ICAgaWYgKGl0ICE9IG1fYW5pbWF0aW9uc1RvUHJvY2Vzcy5lbmQoKSkgewotICAgICAgICBBbmlt
YXRpb25Qcm9jZXNzaW5nQWN0aW9uJiBwcm9jZXNzaW5nSW5mbyA9IGl0LT5zZWNvbmQ7CisgICAg
ICAgIEFuaW1hdGlvblByb2Nlc3NpbmdBY3Rpb24mIHByb2Nlc3NpbmdJbmZvID0gaXQtPnZhbHVl
OwogICAgICAgICAvLyBJZiBhbiBhbmltYXRpb24gaXMgc2NoZWR1bGVkIHRvIGJlIHJlbW92ZWQs
IGRvbid0IGNoYW5nZSB0aGUgcmVtb3ZlIHRvIGEgcGF1c2UuCiAgICAgICAgIGlmIChwcm9jZXNz
aW5nSW5mby5hY3Rpb24gIT0gUmVtb3ZlKQogICAgICAgICAgICAgcHJvY2Vzc2luZ0luZm8uYWN0
aW9uID0gUGF1c2U7CkBAIC04NTQsNyArODU0LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6Omxh
eWVyRGlkRGlzcGxheShQbGF0Zm9ybUxheWVyKiBsYXllcikKICAgICBpZiAobGF5ZXJDbG9uZU1h
cCkgewogICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1h
cC0+ZW5kKCk7CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5
ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBQbGF0
Zm9ybUNBTGF5ZXIqIGN1cnJDbG9uZSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBQ
bGF0Zm9ybUNBTGF5ZXIqIGN1cnJDbG9uZSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAg
IGlmICghY3VyckNsb25lKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCkBAIC0xMTk2LDEw
ICsxMTk2LDEwIEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVHZW9tZXRyeShmbG9hdCBw
YWdlU2NhbGVGYWN0b3IsIGNvbnN0IEZsb2F0UG9pbnQmIHBvCiAgICAgICAgIGlmIChMYXllck1h
cCogbGF5ZXJDbG9uZU1hcCA9IG1fc3RydWN0dXJhbExheWVyQ2xvbmVzLmdldCgpKSB7CiAgICAg
ICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5k
KCk7CiAgICAgICAgICAgICBmb3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGxheWVy
Q2xvbmVNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgICAgIFBs
YXRmb3JtQ0FMYXllciogY2xvbmUgPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgICAg
IFBsYXRmb3JtQ0FMYXllciogY2xvbmUgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICAg
ICAgRmxvYXRQb2ludCBjbG9uZVBvc2l0aW9uID0gbGF5ZXJQb3NpdGlvbjsKIAotICAgICAgICAg
ICAgICAgIGlmIChtX3JlcGxpY2FMYXllciAmJiBpc1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQtPmZp
cnN0KSkgeworICAgICAgICAgICAgICAgIGlmIChtX3JlcGxpY2FMYXllciAmJiBpc1JlcGxpY2F0
ZWRSb290Q2xvbmUoaXQtPmtleSkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gTWFpbnRhaW4g
dGhlIHNwZWNpYWwtY2FzZSBwb3NpdGlvbiBmb3IgdGhlIHJvb3Qgb2YgYSBjbG9uZSBzdWJ0cmVl
LAogICAgICAgICAgICAgICAgICAgICAvLyB3aGljaCB3ZSBzZXQgdXAgaW4gcmVwbGljYXRlZExh
eWVyUm9vdCgpLgogICAgICAgICAgICAgICAgICAgICBjbG9uZVBvc2l0aW9uID0gcG9zaXRpb25G
b3JDbG9uZVJvb3RMYXllcigpOwpAQCAtMTIyMywxMCArMTIyMywxMCBAQCB2b2lkIEdyYXBoaWNz
TGF5ZXJDQTo6dXBkYXRlR2VvbWV0cnkoZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBjb25zdCBGbG9h
dFBvaW50JiBwbwogICAgIGlmIChMYXllck1hcCogbGF5ZXJDbG9uZU1hcCA9IG1fbGF5ZXJDbG9u
ZXMuZ2V0KCkpIHsKICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxheWVy
Q2xvbmVNYXAtPmVuZCgpOwogICAgICAgICBmb3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IGxheWVyQ2xvbmVNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAg
ICAgUGxhdGZvcm1DQUxheWVyKiBjbG9uZSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAg
ICBQbGF0Zm9ybUNBTGF5ZXIqIGNsb25lID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAgICAg
RmxvYXRQb2ludCBjbG9uZVBvc2l0aW9uID0gYWRqdXN0ZWRQb3NpdGlvbjsKIAotICAgICAgICAg
ICAgaWYgKCFtX3N0cnVjdHVyYWxMYXllciAmJiBtX3JlcGxpY2FMYXllciAmJiBpc1JlcGxpY2F0
ZWRSb290Q2xvbmUoaXQtPmZpcnN0KSkgeworICAgICAgICAgICAgaWYgKCFtX3N0cnVjdHVyYWxM
YXllciAmJiBtX3JlcGxpY2FMYXllciAmJiBpc1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQtPmtleSkp
IHsKICAgICAgICAgICAgICAgICAvLyBNYWludGFpbiB0aGUgc3BlY2lhbC1jYXNlIHBvc2l0aW9u
IGZvciB0aGUgcm9vdCBvZiBhIGNsb25lIHN1YnRyZWUsCiAgICAgICAgICAgICAgICAgLy8gd2hp
Y2ggd2Ugc2V0IHVwIGluIHJlcGxpY2F0ZWRMYXllclJvb3QoKS4KICAgICAgICAgICAgICAgICBj
bG9uZVBvc2l0aW9uID0gcG9zaXRpb25Gb3JDbG9uZVJvb3RMYXllcigpOwpAQCAtMTI0Niw4ICsx
MjQ2LDggQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZVRyYW5zZm9ybSgpCiAgICAgaWYg
KExheWVyTWFwKiBsYXllckNsb25lTWFwID0gcHJpbWFyeUxheWVyQ2xvbmVzKCkpIHsKICAgICAg
ICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxheWVyQ2xvbmVNYXAtPmVuZCgpOwog
ICAgICAgICBmb3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGxheWVyQ2xvbmVNYXAt
PmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgUGxhdGZvcm1DQUxheWVy
KiBjdXJyTGF5ZXIgPSBpdC0+c2Vjb25kLmdldCgpOwotICAgICAgICAgICAgaWYgKG1fcmVwbGlj
YUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9uZShpdC0+Zmlyc3QpKSB7CisgICAgICAgICAg
ICBQbGF0Zm9ybUNBTGF5ZXIqIGN1cnJMYXllciA9IGl0LT52YWx1ZS5nZXQoKTsKKyAgICAgICAg
ICAgIGlmIChtX3JlcGxpY2FMYXllciAmJiBpc1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQtPmtleSkp
IHsKICAgICAgICAgICAgICAgICAvLyBNYWludGFpbiB0aGUgc3BlY2lhbC1jYXNlIHRyYW5zZm9y
bSBmb3IgdGhlIHJvb3Qgb2YgYSBjbG9uZSBzdWJ0cmVlLAogICAgICAgICAgICAgICAgIC8vIHdo
aWNoIHdlIHNldCB1cCBpbiByZXBsaWNhdGVkTGF5ZXJSb290KCkuCiAgICAgICAgICAgICAgICAg
Y3VyckxheWVyLT5zZXRUcmFuc2Zvcm0oVHJhbnNmb3JtYXRpb25NYXRyaXgoKSk7CkBAIC0xMjY0
LDcgKzEyNjQsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlQ2hpbGRyZW5UcmFuc2Zv
cm0oKQogICAgIGlmIChMYXllck1hcCogbGF5ZXJDbG9uZU1hcCA9IHByaW1hcnlMYXllckNsb25l
cygpKSB7CiAgICAgICAgIExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBsYXllckNsb25l
TWFwLT5lbmQoKTsKICAgICAgICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBs
YXllckNsb25lTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBpdC0+
c2Vjb25kLT5zZXRTdWJsYXllclRyYW5zZm9ybShtX2NoaWxkcmVuVHJhbnNmb3JtKTsKKyAgICAg
ICAgICAgIGl0LT52YWx1ZS0+c2V0U3VibGF5ZXJUcmFuc2Zvcm0obV9jaGlsZHJlblRyYW5zZm9y
bSk7CiAgICAgfQogfQogCkBAIC0xMjc1LDcgKzEyNzUsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJD
QTo6dXBkYXRlTWFza3NUb0JvdW5kcygpCiAgICAgaWYgKExheWVyTWFwKiBsYXllckNsb25lTWFw
ID0gbV9sYXllckNsb25lcy5nZXQoKSkgewogICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KQotICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0TWFza3NUb0JvdW5kcyhtX21hc2tzVG9Cb3Vu
ZHMpOworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRNYXNrc1RvQm91bmRzKG1fbWFza3NUb0Jv
dW5kcyk7CiAgICAgfQogCiAgICAgdXBkYXRlRGVidWdJbmRpY2F0b3JzKCk7CkBAIC0xMjkzLDcg
KzEyOTMsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlQ29udGVudHNWaXNpYmlsaXR5
KCkKICAgICAgICAgaWYgKExheWVyTWFwKiBsYXllckNsb25lTWFwID0gbV9sYXllckNsb25lcy5n
ZXQoKSkgewogICAgICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxheWVy
Q2xvbmVNYXAtPmVuZCgpOwogICAgICAgICAgICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBsYXllckNsb25lTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAg
ICAgICAgICAgaXQtPnNlY29uZC0+c2V0Q29udGVudHMoMCk7CisgICAgICAgICAgICAgICAgaXQt
PnZhbHVlLT5zZXRDb250ZW50cygwKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTEzMDUsNyAr
MTMwNSw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVDb250ZW50c09wYXF1ZSgpCiAg
ICAgaWYgKExheWVyTWFwKiBsYXllckNsb25lTWFwID0gbV9sYXllckNsb25lcy5nZXQoKSkgewog
ICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5k
KCk7CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9u
ZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgaXQtPnNlY29uZC0+
c2V0T3BhcXVlKG1fY29udGVudHNPcGFxdWUpOworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRP
cGFxdWUobV9jb250ZW50c09wYXF1ZSk7CiAgICAgfQogfQogCkBAIC0xMzE3LDcgKzEzMTcsNyBA
QCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlQmFja2ZhY2VWaXNpYmlsaXR5KCkKICAgICAg
ICAgaWYgKExheWVyTWFwKiBsYXllckNsb25lTWFwID0gbV9zdHJ1Y3R1cmFsTGF5ZXJDbG9uZXMu
Z2V0KCkpIHsKICAgICAgICAgICAgIExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBsYXll
ckNsb25lTWFwLT5lbmQoKTsKICAgICAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAg
ICAgICAgICAgIGl0LT5zZWNvbmQtPnNldERvdWJsZVNpZGVkKG1fYmFja2ZhY2VWaXNpYmlsaXR5
KTsKKyAgICAgICAgICAgICAgICBpdC0+dmFsdWUtPnNldERvdWJsZVNpZGVkKG1fYmFja2ZhY2VW
aXNpYmlsaXR5KTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTMyNiw3ICsxMzI2LDcgQEAgdm9p
ZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUJhY2tmYWNlVmlzaWJpbGl0eSgpCiAgICAgaWYgKExh
eWVyTWFwKiBsYXllckNsb25lTWFwID0gbV9sYXllckNsb25lcy5nZXQoKSkgewogICAgICAgICBM
YXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAg
ICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0RG91Ymxl
U2lkZWQobV9iYWNrZmFjZVZpc2liaWxpdHkpOworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRE
b3VibGVTaWRlZChtX2JhY2tmYWNlVmlzaWJpbGl0eSk7CiAgICAgfQogfQogCkBAIC0xMzM4LDEw
ICsxMzM4LDEwIEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVGaWx0ZXJzKCkKICAgICBp
ZiAoTGF5ZXJNYXAqIGxheWVyQ2xvbmVNYXAgPSBwcmltYXJ5TGF5ZXJDbG9uZXMoKSkgewogICAg
ICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7
CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1h
cC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAobV9yZXBsaWNh
TGF5ZXIgJiYgaXNSZXBsaWNhdGVkUm9vdENsb25lKGl0LT5maXJzdCkpCisgICAgICAgICAgICBp
ZiAobV9yZXBsaWNhTGF5ZXIgJiYgaXNSZXBsaWNhdGVkUm9vdENsb25lKGl0LT5rZXkpKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRGaWx0
ZXJzKG1fZmlsdGVycyk7CisgICAgICAgICAgICBpdC0+dmFsdWUtPnNldEZpbHRlcnMobV9maWx0
ZXJzKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTE0MzAsNyArMTQzMCw3IEBAIHZvaWQgR3Jh
cGhpY3NMYXllckNBOjplbnN1cmVTdHJ1Y3R1cmFsTGF5ZXIoU3RydWN0dXJhbExheWVyUHVycG9z
ZSBwdXJwb3NlLCBmbG9hCiAgICAgaWYgKG1fbGF5ZXJDbG9uZXMpIHsKICAgICAgICAgTGF5ZXJN
YXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fbGF5ZXJDbG9uZXMtPmVuZCgpOwogICAgICAgICBm
b3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fbGF5ZXJDbG9uZXMtPmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgUGxhdGZvcm1DQUxheWVyKiBjdXJyTGF5
ZXIgPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgUGxhdGZvcm1DQUxheWVyKiBjdXJy
TGF5ZXIgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBjdXJyTGF5ZXItPnNldFBvc2l0
aW9uKHBvaW50KTsKICAgICAgICAgICAgIGN1cnJMYXllci0+c2V0QW5jaG9yUG9pbnQoYW5jaG9y
UG9pbnQpOwogICAgICAgICAgICAgY3VyckxheWVyLT5zZXRUcmFuc2Zvcm0oVHJhbnNmb3JtYXRp
b25NYXRyaXgoKSk7CkBAIC0xNDc1LDcgKzE0NzUsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6
dXBkYXRlTGF5ZXJEcmF3c0NvbnRlbnQoZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBjb25zdCBGbG9h
dAogICAgICAgICBpZiAobV9sYXllckNsb25lcykgewogICAgICAgICAgICAgTGF5ZXJNYXA6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IG1fbGF5ZXJDbG9uZXMtPmVuZCgpOwogICAgICAgICAgICAgZm9y
IChMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2xheWVyQ2xvbmVzLT5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0Q29udGVudHMo
MCk7CisgICAgICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRDb250ZW50cygwKTsKICAgICAgICAg
fQogICAgIH0KICAgICB1cGRhdGVEZWJ1Z0luZGljYXRvcnMoKTsKQEAgLTE1MjYsNyArMTUyNiw3
IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVDb250ZW50c0ltYWdlKCkKICAgICAgICAg
aWYgKG1fY29udGVudHNMYXllckNsb25lcykgewogICAgICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IG1fY29udGVudHNMYXllckNsb25lcy0+ZW5kKCk7CiAgICAgICAgICAg
ICBmb3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fY29udGVudHNMYXllckNsb25l
cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgICAgIGl0LT5zZWNvbmQt
PnNldENvbnRlbnRzKG1fY29udGVudHNMYXllci0+Y29udGVudHMoKSk7CisgICAgICAgICAgICAg
ICAgaXQtPnZhbHVlLT5zZXRDb250ZW50cyhtX2NvbnRlbnRzTGF5ZXItPmNvbnRlbnRzKCkpOwog
ICAgICAgICB9CiAgICAgICAgIAogICAgICAgICB1cGRhdGVDb250ZW50c1JlY3QoKTsKQEAgLTE1
NzAsOCArMTU3MCw4IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVDb250ZW50c1JlY3Qo
KQogICAgIGlmIChtX2NvbnRlbnRzTGF5ZXJDbG9uZXMpIHsKICAgICAgICAgTGF5ZXJNYXA6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IG1fY29udGVudHNMYXllckNsb25lcy0+ZW5kKCk7CiAgICAgICAg
IGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9jb250ZW50c0xheWVyQ2xvbmVz
LT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNl
dFBvc2l0aW9uKHBvaW50KTsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNldEJvdW5kcyhyZWN0
KTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+c2V0UG9zaXRpb24ocG9pbnQpOworICAgICAgICAg
ICAgaXQtPnZhbHVlLT5zZXRCb3VuZHMocmVjdCk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0x
NTg2LDggKzE1ODYsOCBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlTWFza0xheWVyKCkK
ICAgICBpZiAoTGF5ZXJNYXAqIGxheWVyQ2xvbmVNYXAgPSBtX2xheWVyQ2xvbmVzLmdldCgpKSB7
CiAgICAgICAgIExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBsYXllckNsb25lTWFwLT5l
bmQoKTsKICAgICAgICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXllckNs
b25lTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsgICAgICAgICAgICAKLSAgICAgICAg
ICAgIFBsYXRmb3JtQ0FMYXllciogbWFza0Nsb25lID0gbWFza0xheWVyQ2xvbmVNYXAgPyBtYXNr
TGF5ZXJDbG9uZU1hcC0+Z2V0KGl0LT5maXJzdCkuZ2V0KCkgOiAwOwotICAgICAgICAgICAgaXQt
PnNlY29uZC0+c2V0TWFzayhtYXNrQ2xvbmUpOworICAgICAgICAgICAgUGxhdGZvcm1DQUxheWVy
KiBtYXNrQ2xvbmUgPSBtYXNrTGF5ZXJDbG9uZU1hcCA/IG1hc2tMYXllckNsb25lTWFwLT5nZXQo
aXQtPmtleSkuZ2V0KCkgOiAwOworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRNYXNrKG1hc2tD
bG9uZSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0xNjUxLDEzICsxNjUxLDEzIEBAIHZvaWQg
R3JhcGhpY3NMYXllckNBOjp1cGRhdGVMYXllckFuaW1hdGlvbnMoKQogICAgIGlmIChtX2FuaW1h
dGlvbnNUb1Byb2Nlc3Muc2l6ZSgpKSB7CiAgICAgICAgIEFuaW1hdGlvbnNUb1Byb2Nlc3NNYXA6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fYW5pbWF0aW9uc1RvUHJvY2Vzcy5lbmQoKTsKICAgICAg
ICAgZm9yIChBbmltYXRpb25zVG9Qcm9jZXNzTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fYW5p
bWF0aW9uc1RvUHJvY2Vzcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAg
IGNvbnN0IFN0cmluZyYgY3VyckFuaW1hdGlvbk5hbWUgPSBpdC0+Zmlyc3Q7CisgICAgICAgICAg
ICBjb25zdCBTdHJpbmcmIGN1cnJBbmltYXRpb25OYW1lID0gaXQtPmtleTsKICAgICAgICAgICAg
IEFuaW1hdGlvbnNNYXA6Oml0ZXJhdG9yIGFuaW1hdGlvbkl0ID0gbV9ydW5uaW5nQW5pbWF0aW9u
cy5maW5kKGN1cnJBbmltYXRpb25OYW1lKTsKICAgICAgICAgICAgIGlmIChhbmltYXRpb25JdCA9
PSBtX3J1bm5pbmdBbmltYXRpb25zLmVuZCgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
Ci0gICAgICAgICAgICBjb25zdCBBbmltYXRpb25Qcm9jZXNzaW5nQWN0aW9uJiBwcm9jZXNzaW5n
SW5mbyA9IGl0LT5zZWNvbmQ7Ci0gICAgICAgICAgICBjb25zdCBWZWN0b3I8TGF5ZXJQcm9wZXJ0
eUFuaW1hdGlvbj4mIGFuaW1hdGlvbnMgPSBhbmltYXRpb25JdC0+c2Vjb25kOworICAgICAgICAg
ICAgY29uc3QgQW5pbWF0aW9uUHJvY2Vzc2luZ0FjdGlvbiYgcHJvY2Vzc2luZ0luZm8gPSBpdC0+
dmFsdWU7CisgICAgICAgICAgICBjb25zdCBWZWN0b3I8TGF5ZXJQcm9wZXJ0eUFuaW1hdGlvbj4m
IGFuaW1hdGlvbnMgPSBhbmltYXRpb25JdC0+dmFsdWU7CiAgICAgICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgICAgICBj
b25zdCBMYXllclByb3BlcnR5QW5pbWF0aW9uJiBjdXJyQW5pbWF0aW9uID0gYW5pbWF0aW9uc1tp
XTsKICAgICAgICAgICAgICAgICBzd2l0Y2ggKHByb2Nlc3NpbmdJbmZvLmFjdGlvbikgewpAQCAt
MTY4OSw3ICsxNjg5LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUxheWVyQW5pbWF0
aW9ucygpCiAgICAgICAgICAgICAgICAgYW5pbWF0aW9ucy5hcHBlbmQocGVuZGluZ0FuaW1hdGlv
bik7CiAgICAgICAgICAgICAgICAgbV9ydW5uaW5nQW5pbWF0aW9ucy5hZGQocGVuZGluZ0FuaW1h
dGlvbi5tX25hbWUsIGFuaW1hdGlvbnMpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBWZWN0b3I8TGF5ZXJQcm9wZXJ0eUFuaW1hdGlvbj4mIGFuaW1hdGlvbnMgPSBpdC0+
c2Vjb25kOworICAgICAgICAgICAgICAgIFZlY3RvcjxMYXllclByb3BlcnR5QW5pbWF0aW9uPiYg
YW5pbWF0aW9ucyA9IGl0LT52YWx1ZTsKICAgICAgICAgICAgICAgICBhbmltYXRpb25zLmFwcGVu
ZChwZW5kaW5nQW5pbWF0aW9uKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTcxNCwx
MSArMTcxNCwxMSBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c2V0QW5pbWF0aW9uT25MYXllcihQ
bGF0Zm9ybUNBQW5pbWF0aW9uKiBjYUFuaW0sIEFuaW1hdGVkUAogICAgICAgICBMYXllck1hcDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAo
TGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICAvLyBTa2lwIGltbWVkaWF0ZSByZXBsaWNhcywg
c2luY2UgdGhleSBtb3ZlIHdpdGggdGhlIG9yaWdpbmFsLgotICAgICAgICAgICAgaWYgKG1fcmVw
bGljYUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9uZShpdC0+Zmlyc3QpKQorICAgICAgICAg
ICAgaWYgKG1fcmVwbGljYUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9uZShpdC0+a2V5KSkK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgaXQtPnNlY29uZC0+cmVt
b3ZlQW5pbWF0aW9uRm9yS2V5KGFuaW1hdGlvbklEKTsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQt
PmFkZEFuaW1hdGlvbkZvcktleShhbmltYXRpb25JRCwgY2FBbmltKTsKKyAgICAgICAgICAgIGl0
LT52YWx1ZS0+cmVtb3ZlQW5pbWF0aW9uRm9yS2V5KGFuaW1hdGlvbklEKTsKKyAgICAgICAgICAg
IGl0LT52YWx1ZS0+YWRkQW5pbWF0aW9uRm9yS2V5KGFuaW1hdGlvbklELCBjYUFuaW0pOwogICAg
ICAgICB9CiAgICAgfQogfQpAQCAtMTc1MywxMCArMTc1MywxMCBAQCBib29sIEdyYXBoaWNzTGF5
ZXJDQTo6cmVtb3ZlQ0FBbmltYXRpb25Gcm9tTGF5ZXIoQW5pbWF0ZWRQcm9wZXJ0eUlEIHByb3Bl
cnR5LCBjbwogICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9u
ZU1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICAv
LyBTa2lwIGltbWVkaWF0ZSByZXBsaWNhcywgc2luY2UgdGhleSBtb3ZlIHdpdGggdGhlIG9yaWdp
bmFsLgotICAgICAgICAgICAgaWYgKG1fcmVwbGljYUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RD
bG9uZShpdC0+Zmlyc3QpKQorICAgICAgICAgICAgaWYgKG1fcmVwbGljYUxheWVyICYmIGlzUmVw
bGljYXRlZFJvb3RDbG9uZShpdC0+a2V5KSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAot
ICAgICAgICAgICAgaXQtPnNlY29uZCAtPnJlbW92ZUFuaW1hdGlvbkZvcktleShhbmltYXRpb25J
RCk7CisgICAgICAgICAgICBpdC0+dmFsdWUtPnJlbW92ZUFuaW1hdGlvbkZvcktleShhbmltYXRp
b25JRCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIHRydWU7CkBAIC0xNzg1LDkgKzE3
ODUsOSBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6cGF1c2VDQUFuaW1hdGlvbk9uTGF5ZXIoQW5p
bWF0ZWRQcm9wZXJ0eUlEIHByb3BlcnR5LCBjb25zdAogICAgICAgICBMYXllck1hcDo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAoTGF5ZXJN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7CiAgICAgICAgICAgICAvLyBTa2lwIGltbWVkaWF0ZSByZXBsaWNhcywgc2luY2Ug
dGhleSBtb3ZlIHdpdGggdGhlIG9yaWdpbmFsLgotICAgICAgICAgICAgaWYgKG1fcmVwbGljYUxh
eWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9uZShpdC0+Zmlyc3QpKQorICAgICAgICAgICAgaWYg
KG1fcmVwbGljYUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9uZShpdC0+a2V5KSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPmFkZEFuaW1hdGlv
bkZvcktleShhbmltYXRpb25JRCwgbmV3QW5pbS5nZXQoKSk7CisgICAgICAgICAgICBpdC0+dmFs
dWUtPmFkZEFuaW1hdGlvbkZvcktleShhbmltYXRpb25JRCwgbmV3QW5pbS5nZXQoKSk7CiAgICAg
ICAgIH0KICAgICB9CiB9CkBAIC0yMzExLDggKzIzMTEsOCBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJD
QTo6c3VzcGVuZEFuaW1hdGlvbnMoZG91YmxlIHRpbWUpCiAgICAgaWYgKExheWVyTWFwKiBsYXll
ckNsb25lTWFwID0gcHJpbWFyeUxheWVyQ2xvbmVzKCkpIHsKICAgICAgICAgTGF5ZXJNYXA6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IGxheWVyQ2xvbmVNYXAtPmVuZCgpOwogICAgICAgICBmb3IgKExh
eWVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGxheWVyQ2xvbmVNYXAtPmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgewotICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0U3BlZWQoMCk7Ci0gICAg
ICAgICAgICBpdC0+c2Vjb25kLT5zZXRUaW1lT2Zmc2V0KHQpOworICAgICAgICAgICAgaXQtPnZh
bHVlLT5zZXRTcGVlZCgwKTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+c2V0VGltZU9mZnNldCh0
KTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTIzMjYsOCArMjMyNiw4IEBAIHZvaWQgR3JhcGhp
Y3NMYXllckNBOjpyZXN1bWVBbmltYXRpb25zKCkKICAgICBpZiAoTGF5ZXJNYXAqIGxheWVyQ2xv
bmVNYXAgPSBwcmltYXJ5TGF5ZXJDbG9uZXMoKSkgewogICAgICAgICBMYXllck1hcDo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAoTGF5ZXJN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRTcGVlZCgxKTsKLSAgICAgICAg
ICAgIGl0LT5zZWNvbmQtPnNldFRpbWVPZmZzZXQoMCk7CisgICAgICAgICAgICBpdC0+dmFsdWUt
PnNldFNwZWVkKDEpOworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRUaW1lT2Zmc2V0KDApOwog
ICAgICAgICB9CiAgICAgfQogfQpAQCAtMjUzNywxMyArMjUzNywxMyBAQCBQYXNzUmVmUHRyPFBs
YXRmb3JtQ0FMYXllcj4gR3JhcGhpY3NMYXllckNBOjpmaW5kT3JNYWtlQ2xvbmUoQ2xvbmVJRCBj
bG9uZUlELCBQbAogICAgIExheWVyTWFwOjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gY2xvbmVzLT5h
ZGQoY2xvbmVJRCwgZHVtbXkpOwogICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKICAg
ICAgICAgLy8gVmFsdWUgd2FzIG5vdCBhZGRlZCwgc28gaXQgZXhpc3RzIGFscmVhZHkuCi0gICAg
ICAgIHJlc3VsdExheWVyID0gYWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQuZ2V0KCk7CisgICAg
ICAgIHJlc3VsdExheWVyID0gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKICAgICB9
IGVsc2UgewogICAgICAgICByZXN1bHRMYXllciA9IGNsb25lTGF5ZXIoc291cmNlTGF5ZXIsIGNs
b25lTGV2ZWwpOwogI2lmbmRlZiBOREVCVUcKICAgICAgICAgcmVzdWx0TGF5ZXItPnNldE5hbWUo
U3RyaW5nOjpmb3JtYXQoIkNsb25lICVkIG9mIGxheWVyICVwIiwgY2xvbmVJRFswVV0sIHNvdXJj
ZUxheWVyLT5wbGF0Zm9ybUxheWVyKCkpKTsKICNlbmRpZgotICAgICAgICBhZGRSZXN1bHQuaXRl
cmF0b3ItPnNlY29uZCA9IHJlc3VsdExheWVyOworICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3It
PnZhbHVlID0gcmVzdWx0TGF5ZXI7CiAgICAgfQogCiAgICAgcmV0dXJuIHJlc3VsdExheWVyOwpA
QCAtMjczNSw5ICsyNzM1LDkgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnNldE9wYWNpdHlJbnRl
cm5hbChmbG9hdCBhY2N1bXVsYXRlZE9wYWNpdHkpCiAgICAgaWYgKGxheWVyQ2xvbmVNYXApIHsK
ICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxheWVyQ2xvbmVNYXAtPmVu
ZCgpOwogICAgICAgICBmb3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGxheWVyQ2xv
bmVNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgaWYgKG1fcmVw
bGljYUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9uZShpdC0+Zmlyc3QpKQorICAgICAgICAg
ICAgaWYgKG1fcmVwbGljYUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9uZShpdC0+a2V5KSkK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNldE9w
YWNpdHkobV9vcGFjaXR5KTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+c2V0T3BhY2l0eShtX29w
YWNpdHkpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMjc0OSwxMCArMjc0OSwxMCBAQCB2b2lk
IEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlT3BhY2l0eU9uTGF5ZXIoKQogICAgIGlmIChMYXllck1h
cCogbGF5ZXJDbG9uZU1hcCA9IHByaW1hcnlMYXllckNsb25lcygpKSB7CiAgICAgICAgIExheWVy
TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBsYXllckNsb25lTWFwLT5lbmQoKTsKICAgICAgICAg
Zm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXllckNsb25lTWFwLT5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGlmIChtX3JlcGxpY2FMYXllciAmJiBp
c1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQtPmZpcnN0KSkKKyAgICAgICAgICAgIGlmIChtX3JlcGxp
Y2FMYXllciAmJiBpc1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQtPmtleSkpCiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNldE9wYWNpdHkobV9vcGFj
aXR5KTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+c2V0T3BhY2l0eShtX29wYWNpdHkpOwogICAg
ICAgICB9CiAgICAgICAgIAogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL21hYy9UaWxlQ2FjaGUubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYS9tYWMvVGlsZUNhY2hlLm1tCmluZGV4IGE4ZWQ0YWFjYTBiMDY4ZTRlNzYw
MzY4NDYyYWMxYWQ1MjJmZGVmOTYuLjcwNzIyMDQyMGU3OGIwNTMwMmNjMDM2MmYxMjI1MjU1NTQy
OGE4ODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21h
Yy9UaWxlQ2FjaGUubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
bWFjL1RpbGVDYWNoZS5tbQpAQCAtOTYsNyArOTYsNyBAQCB2b2lkIFRpbGVDYWNoZTo6dGlsZUNh
Y2hlTGF5ZXJCb3VuZHNDaGFuZ2VkKCkKIHZvaWQgVGlsZUNhY2hlOjpzZXROZWVkc0Rpc3BsYXko
KQogewogICAgIGZvciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2lu
KCksIGVuZCA9IG1fdGlsZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgW2l0LT5z
ZWNvbmQuZ2V0KCkgc2V0TmVlZHNEaXNwbGF5XTsKKyAgICAgICAgW2l0LT52YWx1ZS5nZXQoKSBz
ZXROZWVkc0Rpc3BsYXldOwogfQogCiB2b2lkIFRpbGVDYWNoZTo6c2V0TmVlZHNEaXNwbGF5SW5S
ZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCkBAIC0xNzMsOSArMTczLDkgQEAgdm9pZCBUaWxlQ2Fj
aGU6OnNldFNjYWxlKENHRmxvYXQgc2NhbGUpCiAgICAgcmV2YWxpZGF0ZVRpbGVzKCk7CiAKICAg
ICBmb3IgKFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpLCBlbmQg
PSBtX3RpbGVzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgW2l0LT5zZWNvbmQu
Z2V0KCkgc2V0Q29udGVudHNTY2FsZTpkZXZpY2VTY2FsZUZhY3Rvcl07CisgICAgICAgIFtpdC0+
dmFsdWUuZ2V0KCkgc2V0Q29udGVudHNTY2FsZTpkZXZpY2VTY2FsZUZhY3Rvcl07CiAKLSAgICAg
ICAgSW50UmVjdCB0aWxlUmVjdCA9IHJlY3RGb3JUaWxlSW5kZXgoaXQtPmZpcnN0KTsKKyAgICAg
ICAgSW50UmVjdCB0aWxlUmVjdCA9IHJlY3RGb3JUaWxlSW5kZXgoaXQtPmtleSk7CiAgICAgICAg
IEZsb2F0UmVjdCBzY2FsZWRUaWxlUmVjdCA9IHRpbGVSZWN0OwogCiAgICAgICAgIHNjYWxlZFRp
bGVSZWN0LnNjYWxlKDEgLyBtX3NjYWxlKTsKQEAgLTE5NSw3ICsxOTUsNyBAQCB2b2lkIFRpbGVD
YWNoZTo6c2V0QWNjZWxlcmF0ZXNEcmF3aW5nKGJvb2wgYWNjZWxlcmF0ZXNEcmF3aW5nKQogICAg
IG1fYWNjZWxlcmF0ZXNEcmF3aW5nID0gYWNjZWxlcmF0ZXNEcmF3aW5nOwogCiAgICAgZm9yIChU
aWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKSwgZW5kID0gbV90aWxl
cy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBbaXQtPnNlY29uZC5nZXQoKSBzZXRB
Y2NlbGVyYXRlc0RyYXdpbmc6bV9hY2NlbGVyYXRlc0RyYXdpbmddOworICAgICAgICBbaXQtPnZh
bHVlLmdldCgpIHNldEFjY2VsZXJhdGVzRHJhd2luZzptX2FjY2VsZXJhdGVzRHJhd2luZ107CiAj
ZWxzZQogICAgIFVOVVNFRF9QQVJBTShhY2NlbGVyYXRlc0RyYXdpbmcpOwogI2VuZGlmCkBAIC0y
NDUsNyArMjQ1LDcgQEAgdm9pZCBUaWxlQ2FjaGU6OnNldFRpbGVEZWJ1Z0JvcmRlcldpZHRoKGZs
b2F0IGJvcmRlcldpZHRoKQogCiAgICAgbV90aWxlRGVidWdCb3JkZXJXaWR0aCA9IGJvcmRlcldp
ZHRoOwogICAgIGZvciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2lu
KCksIGVuZCA9IG1fdGlsZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgW2l0LT5z
ZWNvbmQuZ2V0KCkgc2V0Qm9yZGVyV2lkdGg6bV90aWxlRGVidWdCb3JkZXJXaWR0aF07CisgICAg
ICAgIFtpdC0+dmFsdWUuZ2V0KCkgc2V0Qm9yZGVyV2lkdGg6bV90aWxlRGVidWdCb3JkZXJXaWR0
aF07CiB9CiAKIHZvaWQgVGlsZUNhY2hlOjpzZXRUaWxlRGVidWdCb3JkZXJDb2xvcihDR0NvbG9y
UmVmIGJvcmRlckNvbG9yKQpAQCAtMjU1LDcgKzI1NSw3IEBAIHZvaWQgVGlsZUNhY2hlOjpzZXRU
aWxlRGVidWdCb3JkZXJDb2xvcihDR0NvbG9yUmVmIGJvcmRlckNvbG9yKQogCiAgICAgbV90aWxl
RGVidWdCb3JkZXJDb2xvciA9IGJvcmRlckNvbG9yOwogICAgIGZvciAoVGlsZU1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCksIGVuZCA9IG1fdGlsZXMuZW5kKCk7IGl0ICE9
IGVuZDsgKytpdCkKLSAgICAgICAgW2l0LT5zZWNvbmQuZ2V0KCkgc2V0Qm9yZGVyQ29sb3I6bV90
aWxlRGVidWdCb3JkZXJDb2xvci5nZXQoKV07CisgICAgICAgIFtpdC0+dmFsdWUuZ2V0KCkgc2V0
Qm9yZGVyQ29sb3I6bV90aWxlRGVidWdCb3JkZXJDb2xvci5nZXQoKV07CiB9CiAKIEludFJlY3Qg
VGlsZUNhY2hlOjpib3VuZHMoKSBjb25zdApAQCAtMzYxLDkgKzM2MSw5IEBAIHZvaWQgVGlsZUNh
Y2hlOjpyZXZhbGlkYXRlVGlsZXMoKQogICAgIFZlY3RvcjxUaWxlSW5kZXg+IHRpbGVzVG9SZW1v
dmU7CiAKICAgICBmb3IgKFRpbGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpLCBl
bmQgPSBtX3RpbGVzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgY29uc3QgVGls
ZUluZGV4JiB0aWxlSW5kZXggPSBpdC0+Zmlyc3Q7CisgICAgICAgIGNvbnN0IFRpbGVJbmRleCYg
dGlsZUluZGV4ID0gaXQtPmtleTsKIAotICAgICAgICBXZWJUaWxlTGF5ZXIqIHRpbGVMYXllciA9
IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIFdlYlRpbGVMYXllciogdGlsZUxheWVyID0gaXQt
PnZhbHVlLmdldCgpOwogCiAgICAgICAgIGlmICghcmVjdEZvclRpbGVJbmRleCh0aWxlSW5kZXgp
LmludGVyc2VjdHModGlsZUNvdmVyYWdlUmVjdCkpIHsKICAgICAgICAgICAgIC8vIFJlbW92ZSB0
aGlzIGxheWVyLgpAQCAtMzkxLDcgKzM5MSw3IEBAIHZvaWQgVGlsZUNhY2hlOjpyZXZhbGlkYXRl
VGlsZXMoKQogICAgICAgICAgICAgVGlsZUluZGV4IHRpbGVJbmRleCh4LCB5KTsKIAogICAgICAg
ICAgICAgSW50UmVjdCB0aWxlUmVjdCA9IHJlY3RGb3JUaWxlSW5kZXgodGlsZUluZGV4KTsKLSAg
ICAgICAgICAgIFJldGFpblB0cjxXZWJUaWxlTGF5ZXI+JiB0aWxlTGF5ZXIgPSBtX3RpbGVzLmFk
ZCh0aWxlSW5kZXgsIDApLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgICAgICBSZXRhaW5QdHI8
V2ViVGlsZUxheWVyPiYgdGlsZUxheWVyID0gbV90aWxlcy5hZGQodGlsZUluZGV4LCAwKS5pdGVy
YXRvci0+dmFsdWU7CiAgICAgICAgICAgICBpZiAoIXRpbGVMYXllcikgewogICAgICAgICAgICAg
ICAgIHRpbGVMYXllciA9IGNyZWF0ZVRpbGVMYXllcih0aWxlUmVjdCk7CiAgICAgICAgICAgICAg
ICAgW21fdGlsZUNvbnRhaW5lckxheWVyLmdldCgpIGFkZFN1YmxheWVyOnRpbGVMYXllci5nZXQo
KV07CkBAIC00MTEsNyArNDExLDcgQEAgdm9pZCBUaWxlQ2FjaGU6OnJldmFsaWRhdGVUaWxlcygp
CiAKICAgICBtX3RpbGVDb3ZlcmFnZVJlY3QgPSBJbnRSZWN0KCk7CiAgICAgZm9yIChUaWxlTWFw
OjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKSwgZW5kID0gbV90aWxlcy5lbmQoKTsgaXQg
IT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IFRpbGVJbmRleCYgdGlsZUluZGV4ID0gaXQt
PmZpcnN0OworICAgICAgICBjb25zdCBUaWxlSW5kZXgmIHRpbGVJbmRleCA9IGl0LT5rZXk7CiAK
ICAgICAgICAgbV90aWxlQ292ZXJhZ2VSZWN0LnVuaXRlKHJlY3RGb3JUaWxlSW5kZXgodGlsZUlu
ZGV4KSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luLmNwcAppbmRleCA0OGIyMGQwYjhi
ZDI0MmFiNTQ5YjhmZTQ0MmRmNDRhYjM2NzJlYjg1Li43MDE2OGIyMTA0ZGIzNjlkYTA3NTdhMTE0
NDYyMjExMWJjMzA2MWYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luLmNwcApAQCAtMTY3LDcg
KzE2Nyw3IEBAIHZvaWQgUGxhdGZvcm1DQUxheWVyOjphbmltYXRpb25TdGFydGVkKENGVGltZUlu
dGVydmFsIGJlZ2luVGltZSkKIAogICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8UGxhdGZvcm1D
QUFuaW1hdGlvbj4gPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9hbmltYXRpb25zLmVuZCgpOwog
ICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiA+Ojpj
b25zdF9pdGVyYXRvciBpdCA9IG1fYW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
Ci0gICAgICAgIGl0LT5zZWNvbmQtPnNldEFjdHVhbFN0YXJ0VGltZUlmTmVlZGVkKGNhY2ZCZWdp
blRpbWUpOworICAgICAgICBpdC0+dmFsdWUtPnNldEFjdHVhbFN0YXJ0VGltZUlmTmVlZGVkKGNh
Y2ZCZWdpblRpbWUpOwogCiAgICAgaWYgKG1fb3duZXIpCiAgICAgICAgIG1fb3duZXItPnBsYXRm
b3JtQ0FMYXllckFuaW1hdGlvblN0YXJ0ZWQoYmVnaW5UaW1lKTsKQEAgLTE3Nyw4ICsxNzcsOCBA
QCBzdGF0aWMgdm9pZCByZXN1Ym1pdEFsbEFuaW1hdGlvbnMoUGxhdGZvcm1DQUxheWVyKiBsYXll
cikKIHsKICAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+ID46
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxheWVyLT5hbmltYXRpb25zKCkuZW5kKCk7CiAgICAgZm9y
IChIYXNoTWFwPFN0cmluZywgUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+ID46OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbGF5ZXItPmFuaW1hdGlvbnMoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKLSAgICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBzKEFkb3B0Q0YsIGl0LT5maXJzdC5j
cmVhdGVDRlN0cmluZygpKTsKLSAgICAgICAgQ0FDRkxheWVyQWRkQW5pbWF0aW9uKGxheWVyLT5w
bGF0Zm9ybUxheWVyKCksIHMuZ2V0KCksIGl0LT5zZWNvbmQtPnBsYXRmb3JtQW5pbWF0aW9uKCkp
OworICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHMoQWRvcHRDRiwgaXQtPmtleS5jcmVh
dGVDRlN0cmluZygpKTsKKyAgICAgICAgQ0FDRkxheWVyQWRkQW5pbWF0aW9uKGxheWVyLT5wbGF0
Zm9ybUxheWVyKCksIHMuZ2V0KCksIGl0LT52YWx1ZS0+cGxhdGZvcm1BbmltYXRpb24oKSk7CiAg
ICAgfQogfQogCkBAIC0zMjgsNyArMzI4LDcgQEAgUGFzc1JlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0
aW9uPiBQbGF0Zm9ybUNBTGF5ZXI6OmFuaW1hdGlvbkZvcktleShjb25zdCBTdHJpbmcmIGsKICAg
ICBpZiAoaXQgPT0gbV9hbmltYXRpb25zLmVuZCgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAg
IHJldHVybiBpdC0+c2Vjb25kOworICAgIHJldHVybiBpdC0+dmFsdWU7CiB9CiAKIFBsYXRmb3Jt
Q0FMYXllciogUGxhdGZvcm1DQUxheWVyOjptYXNrKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUNocm9taXVtV2lu
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNo
ZUNocm9taXVtV2luLmNwcAppbmRleCA5Zjg5OThjZGFmZDgxMmUxODllNjVhMjg1ZmI2YzQ3NTMw
YTQ2ZTBjLi4wYzg2NTUwMGRlODhjM2Q4ZGM2MWZiNWM4MzFkOWVjMzRlNDEwZjcwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2FjaGVD
aHJvbWl1bVdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vRm9udENhY2hlQ2hyb21pdW1XaW4uY3BwCkBAIC0yMjMsMTAgKzIyMywxMCBAQCBzdGF0
aWMgYm9vbCBMb29rdXBBbHROYW1lKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBhbHROYW1l
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBzdGF0aWMgaW50IHN5c3RlbUNwID0gOjpH
ZXRBQ1AoKTsKLSAgICBpbnQgZm9udENwID0gaXRlci0+c2Vjb25kLT5jb2RlUGFnZTsKKyAgICBp
bnQgZm9udENwID0gaXRlci0+dmFsdWUtPmNvZGVQYWdlOwogCiAgICAgaWYgKChpc0FzY2lpICYm
IHN5c3RlbUNwID09IGZvbnRDcCkgfHwgKCFpc0FzY2lpICYmIHN5c3RlbUNwICE9IGZvbnRDcCkp
IHsKLSAgICAgICAgYWx0TmFtZSA9IFN0cmluZyhpdGVyLT5zZWNvbmQtPm5hbWUpOworICAgICAg
ICBhbHROYW1lID0gU3RyaW5nKGl0ZXItPnZhbHVlLT5uYW1lKTsKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogCkBAIC0yNzcsNyArMjc3LDcgQEAgc3RhdGljIGJvb2wgZm9udENvbnRhaW5z
Q2hhcmFjdGVyKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEqIGZvbnREYXRhLAogCiAgICAgSGFzaE1h
cDxjb25zdCB3Y2hhcl90KiwgaWN1OjpVbmljb2RlU2V0Kj46Oml0ZXJhdG9yIGl0ID0gZm9udENt
YXBDYWNoZS0+ZmluZChmYW1pbHkpOwogICAgIGlmIChpdCAhPSBmb250Q21hcENhY2hlLT5lbmQo
KSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQtPmNvbnRhaW5zKGNoYXJhY3Rlcik7CisgICAg
ICAgIHJldHVybiBpdC0+dmFsdWUtPmNvbnRhaW5zKGNoYXJhY3Rlcik7CiAKICAgICBIRk9OVCBo
Zm9udCA9IGZvbnREYXRhLT5oZm9udCgpOwogICAgIEhXbmREQyBoZGMoMCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250VXRpbHNDaHJv
bWl1bVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9G
b250VXRpbHNDaHJvbWl1bVdpbi5jcHAKaW5kZXggY2M1MmM1MmViNzA1NzgyZGUxZjk2OGRjODAz
YzQ1ZTRmMmFlMjI5Mi4uMmZmYWJiYjc2ODJkZWE4YTBlMWZjOWZkYWVlOWM3MTgwNWE0MmEwOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9u
dFV0aWxzQ2hyb21pdW1XaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0ZvbnRVdGlsc0Nocm9taXVtV2luLmNwcApAQCAtNDE1LDcgKzQxNSw3IEBA
IGJvb2wgZ2V0RGVyaXZlZEZvbnREYXRhKGNvbnN0IFVDaGFyKiBmYW1pbHksCiAgICAgICAgIC8v
IGNoZWNrIGl0IGFnYWluc3Qgd2hhdCB3ZSBhY3R1YWxseSB3YW50IChhcyBpcyBkb25lIGluCiAg
ICAgICAgIC8vIEZvbnRDYWNoZVdpbi5jcHApCiAgICAgICAgIEZvbnREYXRhQ2FjaGU6OkFkZFJl
c3VsdCBlbnRyeSA9IGZvbnREYXRhQ2FjaGUuYWRkKGZvbnRLZXksIEZvbnREYXRhKCkpOwotICAg
ICAgICBkZXJpdmVkID0gJmVudHJ5Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgIGRlcml2ZWQg
PSAmZW50cnkuaXRlcmF0b3ItPnZhbHVlOwogICAgICAgICBkZXJpdmVkLT5oZm9udCA9IENyZWF0
ZUZvbnRJbmRpcmVjdChsb2dmb250KTsKICAgICAgICAgLy8gR2V0QXNjZW50IG1heSByZXR1cm4g
a1VuZGVmaW5lZEFzY2VudCwgYnV0IHdlIHN0aWxsIHdhbnQgdG8KICAgICAgICAgLy8gY2FjaGUg
aXQgc28gdGhhdCB3ZSB3b24ndCBoYXZlIHRvIGNhbGwgQ3JlYXRlRm9udEluZGlyZWN0IG9uY2UK
QEAgLTQyMyw3ICs0MjMsNyBAQCBib29sIGdldERlcml2ZWRGb250RGF0YShjb25zdCBVQ2hhciog
ZmFtaWx5LAogICAgICAgICBkZXJpdmVkLT5hc2NlbnQgPSBnZXRBc2NlbnQoZGVyaXZlZC0+aGZv
bnQpOwogICAgICAgICBkZXJpdmVkLT5zcGFjZUdseXBoID0gZ2V0U3BhY2VHbHlwaChkZXJpdmVk
LT5oZm9udCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZGVyaXZlZCA9ICZpdGVyLT5zZWNvbmQ7
CisgICAgICAgIGRlcml2ZWQgPSAmaXRlci0+dmFsdWU7CiAgICAgICAgIC8vIExhc3QgdGltZSwg
R2V0QXNjZW50IGZhaWxlZCBzbyB0aGF0IG9ubHkgSEZPTlQgd2FzCiAgICAgICAgIC8vIGNhY2hl
ZC4gVHJ5IG9uY2UgbW9yZSBhc3N1bWluZyB0aGF0IFRyeVByZWxvYWRGb250CiAgICAgICAgIC8v
IHdhcyBjYWxsZWQgYnkgYSBjYWxsZXIgYmV0d2VlbiBjYWxscy4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVy
Q2hyb21pdW0uY3BwCmluZGV4IDVkYzY1ZWM1YTIwODFhYWQ0NDc3ZDMyODI5Mzk0YTM2MmQwMzc0
ZWIuLjJjM2QwY2Q0ZWRjMmNhODEzODcyYjNiYjk5MjMzYWY4MTM2YTA1YWIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJv
bWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
VGlsZWRMYXllckNocm9taXVtLmNwcApAQCAtMjI1LDkgKzIyNSw5IEBAIHZvaWQgVGlsZWRMYXll
ckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKENDTGF5ZXJJbXBsKiBsYXllcikKICAgICBWZWN0
b3I8VXBkYXRhYmxlVGlsZSo+IGludmFsaWRUaWxlczsKIAogICAgIGZvciAoQ0NMYXllclRpbGlu
Z0RhdGE6OlRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX3RpbGVyLT50aWxlcygpLmJl
Z2luKCk7IGl0ZXIgIT0gbV90aWxlci0+dGlsZXMoKS5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAg
IGludCBpID0gaXRlci0+Zmlyc3QuZmlyc3Q7Ci0gICAgICAgIGludCBqID0gaXRlci0+Zmlyc3Qu
c2Vjb25kOwotICAgICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gc3RhdGljX2Nhc3Q8VXBkYXRh
YmxlVGlsZSo+KGl0ZXItPnNlY29uZC5nZXQoKSk7CisgICAgICAgIGludCBpID0gaXRlci0+a2V5
LmZpcnN0OworICAgICAgICBpbnQgaiA9IGl0ZXItPmtleS5zZWNvbmQ7CisgICAgICAgIFVwZGF0
YWJsZVRpbGUqIHRpbGUgPSBzdGF0aWNfY2FzdDxVcGRhdGFibGVUaWxlKj4oaXRlci0+dmFsdWUu
Z2V0KCkpOwogICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgbm90IGV2ZXIgYmUgbnVsbC4K
ICAgICAgICAgaWYgKCF0aWxlKQogICAgICAgICAgICAgY29udGludWU7CkBAIC0yNTcsNyArMjU3
LDcgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnNldExheWVyVHJlZUhvc3QoQ0NMYXllclRy
ZWVIb3N0KiBob3N0KQogewogICAgIGlmIChob3N0ICYmIGhvc3QgIT0gbGF5ZXJUcmVlSG9zdCgp
KSB7CiAgICAgICAgIGZvciAoQ0NMYXllclRpbGluZ0RhdGE6OlRpbGVNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ZXIgPSBtX3RpbGVyLT50aWxlcygpLmJlZ2luKCk7IGl0ZXIgIT0gbV90aWxlci0+dGls
ZXMoKS5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0g
c3RhdGljX2Nhc3Q8VXBkYXRhYmxlVGlsZSo+KGl0ZXItPnNlY29uZC5nZXQoKSk7CisgICAgICAg
ICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gc3RhdGljX2Nhc3Q8VXBkYXRhYmxlVGlsZSo+KGl0
ZXItPnZhbHVlLmdldCgpKTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBub3Qg
ZXZlciBiZSBudWxsLgogICAgICAgICAgICAgaWYgKCF0aWxlKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwpAQCAtMzI1LDcgKzMyNSw3IEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjppbnZh
bGlkYXRlQ29udGVudFJlY3QoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIGZvciAoQ0NMYXllclRpbGluZ0RhdGE6OlRpbGVNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ZXIgPSBtX3RpbGVyLT50aWxlcygpLmJlZ2luKCk7IGl0ZXIgIT0gbV90aWxlci0+dGls
ZXMoKS5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIFVwZGF0YWJsZVRpbGUqIHRpbGUgPSBzdGF0
aWNfY2FzdDxVcGRhdGFibGVUaWxlKj4oaXRlci0+c2Vjb25kLmdldCgpKTsKKyAgICAgICAgVXBk
YXRhYmxlVGlsZSogdGlsZSA9IHN0YXRpY19jYXN0PFVwZGF0YWJsZVRpbGUqPihpdGVyLT52YWx1
ZS5nZXQoKSk7CiAgICAgICAgIEFTU0VSVCh0aWxlKTsKICAgICAgICAgLy8gRklYTUU6IFRoaXMg
c2hvdWxkIG5vdCBldmVyIGJlIG51bGwuCiAgICAgICAgIGlmICghdGlsZSkKQEAgLTY1NSw3ICs2
NTUsNyBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6c2V0VGV4dHVyZVByaW9yaXRpZXMoY29u
c3QgQ0NQcmlvcml0eUNhbGN1bGF0b3ImIHByaW9yaQogCiAgICAgLy8gTm93IHVwZGF0ZSBwcmlv
cml0aWVzIG9uIGFsbCB0aWxlcyB3ZSBoYXZlIGluIHRoZSBsYXllciwgbm8gbWF0dGVyIHdoZXJl
IHRoZXkgYXJlLgogICAgIGZvciAoQ0NMYXllclRpbGluZ0RhdGE6OlRpbGVNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ZXIgPSBtX3RpbGVyLT50aWxlcygpLmJlZ2luKCk7IGl0ZXIgIT0gbV90aWxlci0+
dGlsZXMoKS5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIFVwZGF0YWJsZVRpbGUqIHRpbGUgPSBz
dGF0aWNfY2FzdDxVcGRhdGFibGVUaWxlKj4oaXRlci0+c2Vjb25kLmdldCgpKTsKKyAgICAgICAg
VXBkYXRhYmxlVGlsZSogdGlsZSA9IHN0YXRpY19jYXN0PFVwZGF0YWJsZVRpbGUqPihpdGVyLT52
YWx1ZS5nZXQoKSk7CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBub3QgZXZlciBiZSBu
dWxsLgogICAgICAgICBpZiAoIXRpbGUpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTY4MCw3
ICs2ODAsNyBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6cmVzZXRVcGRhdGVTdGF0ZSgpCiAK
ICAgICBDQ0xheWVyVGlsaW5nRGF0YTo6VGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV90
aWxlci0+dGlsZXMoKS5lbmQoKTsKICAgICBmb3IgKENDTGF5ZXJUaWxpbmdEYXRhOjpUaWxlTWFw
Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gbV90aWxlci0+dGlsZXMoKS5iZWdpbigpOyBpdGVyICE9
IGVuZDsgKytpdGVyKSB7Ci0gICAgICAgIFVwZGF0YWJsZVRpbGUqIHRpbGUgPSBzdGF0aWNfY2Fz
dDxVcGRhdGFibGVUaWxlKj4oaXRlci0+c2Vjb25kLmdldCgpKTsKKyAgICAgICAgVXBkYXRhYmxl
VGlsZSogdGlsZSA9IHN0YXRpY19jYXN0PFVwZGF0YWJsZVRpbGUqPihpdGVyLT52YWx1ZS5nZXQo
KSk7CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBub3QgZXZlciBiZSBudWxsLgogICAg
ICAgICBpZiAoIXRpbGUpCiAgICAgICAgICAgICBjb250aW51ZTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGFtYWdlVHJhY2tlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RhbWFn
ZVRyYWNrZXIuY3BwCmluZGV4IDExNDQ5OWJhMTdlZDRmZjE1ZGUwOGUwY2Q0MGZhMzM2NzFhNjE0
ODYuLjc1YTE1NjQ4MWUzZTIxNzc5ZmY5N2U3ZjY0ZTdkMDk5MjI0OWQ1M2IgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGFtYWdlVHJh
Y2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NEYW1hZ2VUcmFja2VyLmNwcApAQCAtMjMzLDcgKzIzMyw3IEBAIEZsb2F0UmVjdCBDQ0Rh
bWFnZVRyYWNrZXI6OnRyYWNrRGFtYWdlRnJvbUxlZnRvdmVyUmVjdHMoKQogICAgIEZsb2F0UmVj
dCBkYW1hZ2VSZWN0ID0gRmxvYXRSZWN0KCk7CiAKICAgICBmb3IgKFJlY3RNYXA6Oml0ZXJhdG9y
IGl0ID0gbV9jdXJyZW50UmVjdEhpc3RvcnktPmJlZ2luKCk7IGl0ICE9IG1fY3VycmVudFJlY3RI
aXN0b3J5LT5lbmQoKTsgKytpdCkKLSAgICAgICAgZGFtYWdlUmVjdC51bml0ZShpdC0+c2Vjb25k
KTsKKyAgICAgICAgZGFtYWdlUmVjdC51bml0ZShpdC0+dmFsdWUpOwogCiAgICAgbV9jdXJyZW50
UmVjdEhpc3RvcnktPmNsZWFyKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGlyZWN0UmVuZGVyZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEaXJlY3RSZW5kZXJlci5jcHAK
aW5kZXggNDY4OGJlZDE5YmZjNGU4MzViYWRmMzc5MjZkOTAzZDI2YTBlZDM0Zi4uZmI4YWMxZDIx
MzYyNzNhMGI2ODg2MTg5ZGIyNjZiMGZlMmE0NjA2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEaXJlY3RSZW5kZXJlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEaXJlY3RS
ZW5kZXJlci5jcHAKQEAgLTExOSwxNSArMTE5LDE1IEBAIHZvaWQgQ0NEaXJlY3RSZW5kZXJlcjo6
ZGVjaWRlUmVuZGVyUGFzc0FsbG9jYXRpb25zRm9yRnJhbWUoY29uc3QgQ0NSZW5kZXJQYXNzTGlz
CiAgICAgVmVjdG9yPGludD4gcGFzc2VzVG9EZWxldGU7CiAgICAgSGFzaE1hcDxpbnQsIE93blB0
cjxDYWNoZWRUZXh0dXJlPiA+Ojpjb25zdF9pdGVyYXRvciBwYXNzSXRlcmF0b3I7CiAgICAgZm9y
IChwYXNzSXRlcmF0b3IgPSBtX3JlbmRlclBhc3NUZXh0dXJlcy5iZWdpbigpOyBwYXNzSXRlcmF0
b3IgIT0gbV9yZW5kZXJQYXNzVGV4dHVyZXMuZW5kKCk7ICsrcGFzc0l0ZXJhdG9yKSB7Ci0gICAg
ICAgIGNvbnN0IENDUmVuZGVyUGFzcyogcmVuZGVyUGFzc0luRnJhbWUgPSByZW5kZXJQYXNzZXNJ
bkZyYW1lLmdldChwYXNzSXRlcmF0b3ItPmZpcnN0KTsKKyAgICAgICAgY29uc3QgQ0NSZW5kZXJQ
YXNzKiByZW5kZXJQYXNzSW5GcmFtZSA9IHJlbmRlclBhc3Nlc0luRnJhbWUuZ2V0KHBhc3NJdGVy
YXRvci0+a2V5KTsKICAgICAgICAgaWYgKCFyZW5kZXJQYXNzSW5GcmFtZSkgewotICAgICAgICAg
ICAgcGFzc2VzVG9EZWxldGUuYXBwZW5kKHBhc3NJdGVyYXRvci0+Zmlyc3QpOworICAgICAgICAg
ICAgcGFzc2VzVG9EZWxldGUuYXBwZW5kKHBhc3NJdGVyYXRvci0+a2V5KTsKICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICB9CiAKICAgICAgICAgY29uc3QgSW50U2l6ZSYgcmVxdWlyZWRT
aXplID0gcmVuZGVyUGFzc1RleHR1cmVTaXplKHJlbmRlclBhc3NJbkZyYW1lKTsKICAgICAgICAg
R0MzRGVudW0gcmVxdWlyZWRGb3JtYXQgPSByZW5kZXJQYXNzVGV4dHVyZUZvcm1hdChyZW5kZXJQ
YXNzSW5GcmFtZSk7Ci0gICAgICAgIENhY2hlZFRleHR1cmUqIHRleHR1cmUgPSBwYXNzSXRlcmF0
b3ItPnNlY29uZC5nZXQoKTsKKyAgICAgICAgQ2FjaGVkVGV4dHVyZSogdGV4dHVyZSA9IHBhc3NJ
dGVyYXRvci0+dmFsdWUuZ2V0KCk7CiAgICAgICAgIEFTU0VSVCh0ZXh0dXJlKTsKIAogICAgICAg
ICBpZiAodGV4dHVyZS0+aWQoKSAmJiAodGV4dHVyZS0+c2l6ZSgpICE9IHJlcXVpcmVkU2l6ZSB8
fCB0ZXh0dXJlLT5mb3JtYXQoKSAhPSByZXF1aXJlZEZvcm1hdCkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVGlsaW5nRGF0
YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVGlsaW5nRGF0YS5jcHAKaW5kZXggOWI1NTE1NmQ5NWJhMzQzM2ZmNmMxNmM2ZWI1NTA5YWI3
MTAyOWQxOS4uYTgxZTA2YzA1MDkyYjEzZjlhNmJmMDA0NjkyNWRmM2Q1NGEyN2YzZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRpbGluZ0RhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUaWxpbmdEYXRhLmNwcApAQCAtMTUzLDggKzE1Myw4IEBAIHZvaWQg
Q0NMYXllclRpbGluZ0RhdGE6OnNldEJvdW5kcyhjb25zdCBJbnRTaXplJiBzaXplKQogICAgIGNv
bnRlbnRSZWN0VG9UaWxlSW5kaWNlcyhJbnRSZWN0KEludFBvaW50KCksIHNpemUpLCBsZWZ0LCB0
b3AsIHJpZ2h0LCBib3R0b20pOwogICAgIFZlY3RvcjxUaWxlTWFwS2V5PiBpbnZhbGlkVGlsZUtl
eXM7CiAgICAgZm9yIChUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4o
KTsgaXQgIT0gbV90aWxlcy5lbmQoKTsgKytpdCkgewotICAgICAgICBpZiAoaXQtPmZpcnN0LmZp
cnN0ID4gcmlnaHQgfHwgaXQtPmZpcnN0LnNlY29uZCA+IGJvdHRvbSkKLSAgICAgICAgICAgIGlu
dmFsaWRUaWxlS2V5cy5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgaWYgKGl0LT5rZXkuZmly
c3QgPiByaWdodCB8fCBpdC0+a2V5LnNlY29uZCA+IGJvdHRvbSkKKyAgICAgICAgICAgIGludmFs
aWRUaWxlS2V5cy5hcHBlbmQoaXQtPmtleSk7CiAgICAgfQogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgaW52YWxpZFRpbGVLZXlzLnNpemUoKTsgKytpKQogICAgICAgICBtX3RpbGVzLnJlbW92
ZShpbnZhbGlkVGlsZUtleXNbaV0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKaW5k
ZXggMjRhMzM0YzNmYzcxMjQ3YWYxYzIzYjMyY2ZjMjJlOThhZjIyN2I0Yy4uNDhkYmI2Y2U5NGUw
MTYzMTkxZGNmMjJkZGJmM2NkNjlkOWVmMzVhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3QuY3BwCkBAIC0xMjMsNyArMTIzLDcgQEAgQ0NMYXllclRyZWVIb3N0Ojp+Q0NMYXllclRyZWVI
b3N0KCkKICAgICBudW1MYXllclRyZWVJbnN0YW5jZXMtLTsKICAgICBSYXRlTGltaXRlck1hcDo6
aXRlcmF0b3IgaXQgPSBtX3JhdGVMaW1pdGVycy5iZWdpbigpOwogICAgIGlmIChpdCAhPSBtX3Jh
dGVMaW1pdGVycy5lbmQoKSkKLSAgICAgICAgaXQtPnNlY29uZC0+c3RvcCgpOworICAgICAgICBp
dC0+dmFsdWUtPnN0b3AoKTsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnNldFN1cmZhY2VS
ZWFkeSgpCkBAIC02NjksNyArNjY5LDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnN0YXJ0UmF0
ZUxpbWl0ZXIoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKICAgICBBU1NF
UlQoY29udGV4dCk7CiAgICAgUmF0ZUxpbWl0ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yYXRlTGlt
aXRlcnMuZmluZChjb250ZXh0KTsKICAgICBpZiAoaXQgIT0gbV9yYXRlTGltaXRlcnMuZW5kKCkp
Ci0gICAgICAgIGl0LT5zZWNvbmQtPnN0YXJ0KCk7CisgICAgICAgIGl0LT52YWx1ZS0+c3RhcnQo
KTsKICAgICBlbHNlIHsKICAgICAgICAgUmVmUHRyPFJhdGVMaW1pdGVyPiByYXRlTGltaXRlciA9
IFJhdGVMaW1pdGVyOjpjcmVhdGUoY29udGV4dCwgdGhpcyk7CiAgICAgICAgIG1fcmF0ZUxpbWl0
ZXJzLnNldChjb250ZXh0LCByYXRlTGltaXRlcik7CkBAIC02ODEsNyArNjgxLDcgQEAgdm9pZCBD
Q0xheWVyVHJlZUhvc3Q6OnN0b3BSYXRlTGltaXRlcihXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4
dDNEKiBjb250ZXh0KQogewogICAgIFJhdGVMaW1pdGVyTWFwOjppdGVyYXRvciBpdCA9IG1fcmF0
ZUxpbWl0ZXJzLmZpbmQoY29udGV4dCk7CiAgICAgaWYgKGl0ICE9IG1fcmF0ZUxpbWl0ZXJzLmVu
ZCgpKSB7Ci0gICAgICAgIGl0LT5zZWNvbmQtPnN0b3AoKTsKKyAgICAgICAgaXQtPnZhbHVlLT5z
dG9wKCk7CiAgICAgICAgIG1fcmF0ZUxpbWl0ZXJzLnJlbW92ZShpdCk7CiAgICAgfQogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAppbmRleCBlZDA3OWY3ODI5YWMxMDRm
Njc4YjY3OTU1MjdjNDIxYTc0ZWIxNTI5Li5iYTQ3MDUzN2M4MzQ0MGM5YmM0ZTdlMjcyMjJmNDA1
Mzg2MTFiYWVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcApAQCAt
NDA4LDcgKzQwOCw3IEBAIHN0YXRpYyBpbmxpbmUgQ0NSZW5kZXJQYXNzKiBmaW5kUmVuZGVyUGFz
c0J5SWQoaW50IHJlbmRlclBhc3NJZCwgY29uc3QgQ0NMYXllclRyCiB7CiAgICAgQ0NSZW5kZXJQ
YXNzSWRIYXNoTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGZyYW1lLnJlbmRlclBhc3Nlc0J5SWQu
ZmluZChyZW5kZXJQYXNzSWQpOwogICAgIEFTU0VSVChpdCAhPSBmcmFtZS5yZW5kZXJQYXNzZXNC
eUlkLmVuZCgpKTsKLSAgICByZXR1cm4gaXQtPnNlY29uZC5nZXQoKTsKKyAgICByZXR1cm4gaXQt
PnZhbHVlLmdldCgpOwogfQogCiBzdGF0aWMgdm9pZCByZW1vdmVSZW5kZXJQYXNzZXNSZWN1cnNp
dmUoaW50IHJlbW92ZVJlbmRlclBhc3NJZCwgQ0NMYXllclRyZWVIb3N0SW1wbDo6RnJhbWVEYXRh
JiBmcmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUmVzb3VyY2VQcm92aWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Jlc291cmNlUHJvdmlkZXIuY3BwCmluZGV4IDNhYWQx
NDdjYTY0NDczN2Q0ZTJmY2ZkOTNhZWM3ODEyZTJlMjAxZjguLjZhYTE4MzMxYWM1NjNlNzJiYjFi
NzkxMDdjOTY0NDdlYTdhNDNiZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVzb3VyY2VQcm92aWRlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZXNvdXJjZVByb3ZpZGVy
LmNwcApAQCAtODQsNyArODQsNyBAQCBib29sIENDUmVzb3VyY2VQcm92aWRlcjo6aW5Vc2VCeUNv
bnN1bWVyKFJlc291cmNlSWQgaWQpCiAgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgp
KTsKICAgICBSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5maW5kKGlkKTsK
ICAgICBBU1NFUlQoaXQgIT0gbV9yZXNvdXJjZXMuZW5kKCkpOwotICAgIHJldHVybiAhIWl0LT5z
ZWNvbmQubG9ja0ZvclJlYWRDb3VudCB8fCBpdC0+c2Vjb25kLmV4cG9ydGVkOworICAgIHJldHVy
biAhIWl0LT52YWx1ZS5sb2NrRm9yUmVhZENvdW50IHx8IGl0LT52YWx1ZS5leHBvcnRlZDsKIH0K
IAogQ0NSZXNvdXJjZVByb3ZpZGVyOjpSZXNvdXJjZUlkIENDUmVzb3VyY2VQcm92aWRlcjo6Y3Jl
YXRlUmVzb3VyY2UoaW50IHBvb2wsIGNvbnN0IEludFNpemUmIHNpemUsIEdDM0RlbnVtIGZvcm1h
dCwgVGV4dHVyZVVzYWdlSGludCBoaW50KQpAQCAtMTU0LDE1ICsxNTQsMTUgQEAgdm9pZCBDQ1Jl
c291cmNlUHJvdmlkZXI6OmRlbGV0ZVJlc291cmNlKFJlc291cmNlSWQgaWQpCiB7CiAgICAgQVNT
RVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKICAgICBSZXNvdXJjZU1hcDo6aXRlcmF0b3Ig
aXQgPSBtX3Jlc291cmNlcy5maW5kKGlkKTsKLSAgICBBU1NFUlQoaXQgIT0gbV9yZXNvdXJjZXMu
ZW5kKCkgJiYgIWl0LT5zZWNvbmQubG9ja2VkRm9yV3JpdGUgJiYgIWl0LT5zZWNvbmQubG9ja0Zv
clJlYWRDb3VudCk7CisgICAgQVNTRVJUKGl0ICE9IG1fcmVzb3VyY2VzLmVuZCgpICYmICFpdC0+
dmFsdWUubG9ja2VkRm9yV3JpdGUgJiYgIWl0LT52YWx1ZS5sb2NrRm9yUmVhZENvdW50KTsKIAot
ICAgIGlmIChpdC0+c2Vjb25kLmdsSWQgJiYgIWl0LT5zZWNvbmQuZXh0ZXJuYWwpIHsKKyAgICBp
ZiAoaXQtPnZhbHVlLmdsSWQgJiYgIWl0LT52YWx1ZS5leHRlcm5hbCkgewogICAgICAgICBXZWJH
cmFwaGljc0NvbnRleHQzRCogY29udGV4dDNkID0gbV9jb250ZXh0LT5jb250ZXh0M0QoKTsKICAg
ICAgICAgQVNTRVJUKGNvbnRleHQzZCk7Ci0gICAgICAgIEdMQyhjb250ZXh0M2QsIGNvbnRleHQz
ZC0+ZGVsZXRlVGV4dHVyZShpdC0+c2Vjb25kLmdsSWQpKTsKKyAgICAgICAgR0xDKGNvbnRleHQz
ZCwgY29udGV4dDNkLT5kZWxldGVUZXh0dXJlKGl0LT52YWx1ZS5nbElkKSk7CiAgICAgfQotICAg
IGlmIChpdC0+c2Vjb25kLnBpeGVscykKLSAgICAgICAgZGVsZXRlIGl0LT5zZWNvbmQucGl4ZWxz
OworICAgIGlmIChpdC0+dmFsdWUucGl4ZWxzKQorICAgICAgICBkZWxldGUgaXQtPnZhbHVlLnBp
eGVsczsKIAogICAgIG1fcmVzb3VyY2VzLnJlbW92ZShpdCk7CiB9CkBAIC0xNzIsOCArMTcyLDgg
QEAgdm9pZCBDQ1Jlc291cmNlUHJvdmlkZXI6OmRlbGV0ZU93bmVkUmVzb3VyY2VzKGludCBwb29s
KQogICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CiAgICAgUmVzb3VyY2VJZEFy
cmF5IHRvRGVsZXRlOwogICAgIGZvciAoUmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNv
dXJjZXMuYmVnaW4oKTsgaXQgIT0gbV9yZXNvdXJjZXMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAg
aWYgKGl0LT5zZWNvbmQucG9vbCA9PSBwb29sICYmICFpdC0+c2Vjb25kLmV4dGVybmFsKQotICAg
ICAgICAgICAgdG9EZWxldGUuYXBwZW5kKGl0LT5maXJzdCk7CisgICAgICAgIGlmIChpdC0+dmFs
dWUucG9vbCA9PSBwb29sICYmICFpdC0+dmFsdWUuZXh0ZXJuYWwpCisgICAgICAgICAgICB0b0Rl
bGV0ZS5hcHBlbmQoaXQtPmtleSk7CiAgICAgfQogICAgIGZvciAoUmVzb3VyY2VJZEFycmF5Ojpp
dGVyYXRvciBpdCA9IHRvRGVsZXRlLmJlZ2luKCk7IGl0ICE9IHRvRGVsZXRlLmVuZCgpOyArK2l0
KQogICAgICAgICBkZWxldGVSZXNvdXJjZSgqaXQpOwpAQCAtMTgzLDI0ICsxODMsMjQgQEAgQ0NS
ZXNvdXJjZVByb3ZpZGVyOjpSZXNvdXJjZVR5cGUgQ0NSZXNvdXJjZVByb3ZpZGVyOjpyZXNvdXJj
ZVR5cGUoUmVzb3VyY2VJZCBpZCkKIHsKICAgICBSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBt
X3Jlc291cmNlcy5maW5kKGlkKTsKICAgICBBU1NFUlQoaXQgIT0gbV9yZXNvdXJjZXMuZW5kKCkp
OwotICAgIHJldHVybiBpdC0+c2Vjb25kLnR5cGU7CisgICAgcmV0dXJuIGl0LT52YWx1ZS50eXBl
OwogfQogCiB2b2lkIENDUmVzb3VyY2VQcm92aWRlcjo6dXBsb2FkKFJlc291cmNlSWQgaWQsIGNv
bnN0IHVpbnQ4X3QqIGltYWdlLCBjb25zdCBJbnRSZWN0JiBpbWFnZVJlY3QsIGNvbnN0IEludFJl
Y3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFNpemUmIGRlc3RPZmZzZXQpCiB7CiAgICAgQVNTRVJU
KENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKICAgICBSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQg
PSBtX3Jlc291cmNlcy5maW5kKGlkKTsKLSAgICBBU1NFUlQoaXQgIT0gbV9yZXNvdXJjZXMuZW5k
KCkgJiYgIWl0LT5zZWNvbmQubG9ja2VkRm9yV3JpdGUgJiYgIWl0LT5zZWNvbmQubG9ja0ZvclJl
YWRDb3VudCAmJiAhaXQtPnNlY29uZC5leHRlcm5hbCk7CisgICAgQVNTRVJUKGl0ICE9IG1fcmVz
b3VyY2VzLmVuZCgpICYmICFpdC0+dmFsdWUubG9ja2VkRm9yV3JpdGUgJiYgIWl0LT52YWx1ZS5s
b2NrRm9yUmVhZENvdW50ICYmICFpdC0+dmFsdWUuZXh0ZXJuYWwpOwogCi0gICAgaWYgKGl0LT5z
ZWNvbmQuZ2xJZCkgeworICAgIGlmIChpdC0+dmFsdWUuZ2xJZCkgewogICAgICAgICBXZWJHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dDNkID0gbV9jb250ZXh0LT5jb250ZXh0M0QoKTsKICAgICAg
ICAgQVNTRVJUKGNvbnRleHQzZCk7CiAgICAgICAgIEFTU0VSVChtX3RleFN1YkltYWdlLmdldCgp
KTsKLSAgICAgICAgY29udGV4dDNkLT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgaXQtPnNlY29uZC5nbElkKTsKLSAgICAgICAgbV90ZXhTdWJJbWFnZS0+dXBsb2Fk
KGltYWdlLCBpbWFnZVJlY3QsIHNvdXJjZVJlY3QsIGRlc3RPZmZzZXQsIGl0LT5zZWNvbmQuZm9y
bWF0LCBjb250ZXh0M2QpOworICAgICAgICBjb250ZXh0M2QtPmJpbmRUZXh0dXJlKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCBpdC0+dmFsdWUuZ2xJZCk7CisgICAgICAgIG1fdGV4U3Vi
SW1hZ2UtPnVwbG9hZChpbWFnZSwgaW1hZ2VSZWN0LCBzb3VyY2VSZWN0LCBkZXN0T2Zmc2V0LCBp
dC0+dmFsdWUuZm9ybWF0LCBjb250ZXh0M2QpOwogICAgIH0KIAotICAgIGlmIChpdC0+c2Vjb25k
LnBpeGVscykgeworICAgIGlmIChpdC0+dmFsdWUucGl4ZWxzKSB7CiAgICAgICAgIFNrQml0bWFw
IHNyY0Z1bGw7CiAgICAgICAgIHNyY0Z1bGwuc2V0Q29uZmlnKFNrQml0bWFwOjprQVJHQl84ODg4
X0NvbmZpZywgaW1hZ2VSZWN0LndpZHRoKCksIGltYWdlUmVjdC5oZWlnaHQoKSk7CiAgICAgICAg
IHNyY0Z1bGwuc2V0UGl4ZWxzKGNvbnN0X2Nhc3Q8dWludDhfdCo+KGltYWdlKSk7CkBAIC0yMzgs
MTcgKzIzOCwxNyBAQCBjb25zdCBDQ1Jlc291cmNlUHJvdmlkZXI6OlJlc291cmNlKiBDQ1Jlc291
cmNlUHJvdmlkZXI6OmxvY2tGb3JSZWFkKFJlc291cmNlSWQgaQogewogICAgIEFTU0VSVChDQ1By
b3h5Ojppc0ltcGxUaHJlYWQoKSk7CiAgICAgUmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9y
ZXNvdXJjZXMuZmluZChpZCk7Ci0gICAgQVNTRVJUKGl0ICE9IG1fcmVzb3VyY2VzLmVuZCgpICYm
ICFpdC0+c2Vjb25kLmxvY2tlZEZvcldyaXRlKTsKLSAgICBpdC0+c2Vjb25kLmxvY2tGb3JSZWFk
Q291bnQrKzsKLSAgICByZXR1cm4gJml0LT5zZWNvbmQ7CisgICAgQVNTRVJUKGl0ICE9IG1fcmVz
b3VyY2VzLmVuZCgpICYmICFpdC0+dmFsdWUubG9ja2VkRm9yV3JpdGUpOworICAgIGl0LT52YWx1
ZS5sb2NrRm9yUmVhZENvdW50Kys7CisgICAgcmV0dXJuICZpdC0+dmFsdWU7CiB9CiAKIHZvaWQg
Q0NSZXNvdXJjZVByb3ZpZGVyOjp1bmxvY2tGb3JSZWFkKFJlc291cmNlSWQgaWQpCiB7CiAgICAg
QVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKICAgICBSZXNvdXJjZU1hcDo6aXRlcmF0
b3IgaXQgPSBtX3Jlc291cmNlcy5maW5kKGlkKTsKLSAgICBBU1NFUlQoaXQgIT0gbV9yZXNvdXJj
ZXMuZW5kKCkgJiYgaXQtPnNlY29uZC5sb2NrRm9yUmVhZENvdW50ID4gMCk7Ci0gICAgaXQtPnNl
Y29uZC5sb2NrRm9yUmVhZENvdW50LS07CisgICAgQVNTRVJUKGl0ICE9IG1fcmVzb3VyY2VzLmVu
ZCgpICYmIGl0LT52YWx1ZS5sb2NrRm9yUmVhZENvdW50ID4gMCk7CisgICAgaXQtPnZhbHVlLmxv
Y2tGb3JSZWFkQ291bnQtLTsKIH0KIAogY29uc3QgQ0NSZXNvdXJjZVByb3ZpZGVyOjpSZXNvdXJj
ZSogQ0NSZXNvdXJjZVByb3ZpZGVyOjpsb2NrRm9yV3JpdGUoUmVzb3VyY2VJZCBpZCkKQEAgLTI1
Niw4ICsyNTYsOCBAQCBjb25zdCBDQ1Jlc291cmNlUHJvdmlkZXI6OlJlc291cmNlKiBDQ1Jlc291
cmNlUHJvdmlkZXI6OmxvY2tGb3JXcml0ZShSZXNvdXJjZUlkCiAgICAgQVNTRVJUKENDUHJveHk6
OmlzSW1wbFRocmVhZCgpKTsKICAgICBSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291
cmNlcy5maW5kKGlkKTsKICAgICBBU1NFUlQoaXQgIT0gbV9yZXNvdXJjZXMuZW5kKCkgJiYgIWl0
LT5zZWNvbmQubG9ja2VkRm9yV3JpdGUgJiYgIWl0LT5zZWNvbmQubG9ja0ZvclJlYWRDb3VudCAm
JiAhaXQtPnNlY29uZC5leHRlcm5hbCk7Ci0gICAgaXQtPnNlY29uZC5sb2NrZWRGb3JXcml0ZSA9
IHRydWU7Ci0gICAgcmV0dXJuICZpdC0+c2Vjb25kOworICAgIGl0LT52YWx1ZS5sb2NrZWRGb3JX
cml0ZSA9IHRydWU7CisgICAgcmV0dXJuICZpdC0+dmFsdWU7CiB9CiAKIHZvaWQgQ0NSZXNvdXJj
ZVByb3ZpZGVyOjp1bmxvY2tGb3JXcml0ZShSZXNvdXJjZUlkIGlkKQpAQCAtMjY1LDcgKzI2NSw3
IEBAIHZvaWQgQ0NSZXNvdXJjZVByb3ZpZGVyOjp1bmxvY2tGb3JXcml0ZShSZXNvdXJjZUlkIGlk
KQogICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CiAgICAgUmVzb3VyY2VNYXA6
Oml0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMuZmluZChpZCk7CiAgICAgQVNTRVJUKGl0ICE9IG1f
cmVzb3VyY2VzLmVuZCgpICYmIGl0LT5zZWNvbmQubG9ja2VkRm9yV3JpdGUgJiYgIWl0LT5zZWNv
bmQuZXh0ZXJuYWwpOwotICAgIGl0LT5zZWNvbmQubG9ja2VkRm9yV3JpdGUgPSBmYWxzZTsKKyAg
ICBpdC0+dmFsdWUubG9ja2VkRm9yV3JpdGUgPSBmYWxzZTsKIH0KIAogQ0NSZXNvdXJjZVByb3Zp
ZGVyOjpTY29wZWRSZWFkTG9ja0dMOjpTY29wZWRSZWFkTG9ja0dMKENDUmVzb3VyY2VQcm92aWRl
ciogcmVzb3VyY2VQcm92aWRlciwgQ0NSZXNvdXJjZVByb3ZpZGVyOjpSZXNvdXJjZUlkIHJlc291
cmNlSWQpCkBAIC0zODgsNyArMzg4LDcgQEAgdm9pZCBDQ1Jlc291cmNlUHJvdmlkZXI6OmRlc3Ry
b3lDaGlsZChpbnQgY2hpbGQpCiAgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsK
ICAgICBDaGlsZE1hcDo6aXRlcmF0b3IgaXQgPSBtX2NoaWxkcmVuLmZpbmQoY2hpbGQpOwogICAg
IEFTU0VSVChpdCAhPSBtX2NoaWxkcmVuLmVuZCgpKTsKLSAgICBkZWxldGVPd25lZFJlc291cmNl
cyhpdC0+c2Vjb25kLnBvb2wpOworICAgIGRlbGV0ZU93bmVkUmVzb3VyY2VzKGl0LT52YWx1ZS5w
b29sKTsKICAgICBtX2NoaWxkcmVuLnJlbW92ZShpdCk7CiAgICAgdHJpbU1haWxib3hEZXF1ZSgp
OwogfQpAQCAtMzk4LDcgKzM5OCw3IEBAIGNvbnN0IENDUmVzb3VyY2VQcm92aWRlcjo6UmVzb3Vy
Y2VJZE1hcCYgQ0NSZXNvdXJjZVByb3ZpZGVyOjpnZXRDaGlsZFRvUGFyZW50TWFwCiAgICAgQVNT
RVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKICAgICBDaGlsZE1hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtX2NoaWxkcmVuLmZpbmQoY2hpbGQpOwogICAgIEFTU0VSVChpdCAhPSBtX2NoaWxk
cmVuLmVuZCgpKTsKLSAgICByZXR1cm4gaXQtPnNlY29uZC5jaGlsZFRvUGFyZW50TWFwOworICAg
IHJldHVybiBpdC0+dmFsdWUuY2hpbGRUb1BhcmVudE1hcDsKIH0KIAogQ0NSZXNvdXJjZVByb3Zp
ZGVyOjpUcmFuc2ZlcmFibGVSZXNvdXJjZUxpc3QgQ0NSZXNvdXJjZVByb3ZpZGVyOjpwcmVwYXJl
U2VuZFRvUGFyZW50KGNvbnN0IFJlc291cmNlSWRBcnJheSYgcmVzb3VyY2VzKQpAQCAtNDE0LDcg
KzQxNCw3IEBAIENDUmVzb3VyY2VQcm92aWRlcjo6VHJhbnNmZXJhYmxlUmVzb3VyY2VMaXN0IEND
UmVzb3VyY2VQcm92aWRlcjo6cHJlcGFyZVNlbmRUb1BhCiAgICAgZm9yIChSZXNvdXJjZUlkQXJy
YXk6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IHJlc291cmNl
cy5lbmQoKTsgKytpdCkgewogICAgICAgICBUcmFuc2ZlcmFibGVSZXNvdXJjZSByZXNvdXJjZTsK
ICAgICAgICAgaWYgKHRyYW5zZmVyUmVzb3VyY2UoY29udGV4dDNkLCAqaXQsICZyZXNvdXJjZSkp
IHsKLSAgICAgICAgICAgIG1fcmVzb3VyY2VzLmZpbmQoKml0KS0+c2Vjb25kLmV4cG9ydGVkID0g
dHJ1ZTsKKyAgICAgICAgICAgIG1fcmVzb3VyY2VzLmZpbmQoKml0KS0+dmFsdWUuZXhwb3J0ZWQg
PSB0cnVlOwogICAgICAgICAgICAgbGlzdC5yZXNvdXJjZXMuYXBwZW5kKHJlc291cmNlKTsKICAg
ICAgICAgfQogICAgIH0KQEAgLTQzMyw3ICs0MzMsNyBAQCBDQ1Jlc291cmNlUHJvdmlkZXI6OlRy
YW5zZmVyYWJsZVJlc291cmNlTGlzdCBDQ1Jlc291cmNlUHJvdmlkZXI6OnByZXBhcmVTZW5kVG9D
aAogICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgcGF0aCBmb3Igc29mdHdhcmUgY29t
cG9zaXRpbmcuCiAgICAgICAgIHJldHVybiBsaXN0OwogICAgIH0KLSAgICBDaGlsZCYgY2hpbGRJ
bmZvID0gbV9jaGlsZHJlbi5maW5kKGNoaWxkKS0+c2Vjb25kOworICAgIENoaWxkJiBjaGlsZElu
Zm8gPSBtX2NoaWxkcmVuLmZpbmQoY2hpbGQpLT52YWx1ZTsKICAgICBmb3IgKFJlc291cmNlSWRB
cnJheTo6Y29uc3RfaXRlcmF0b3IgaXQgPSByZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gcmVzb3Vy
Y2VzLmVuZCgpOyArK2l0KSB7CiAgICAgICAgIFRyYW5zZmVyYWJsZVJlc291cmNlIHJlc291cmNl
OwogICAgICAgICBpZiAoIXRyYW5zZmVyUmVzb3VyY2UoY29udGV4dDNkLCAqaXQsICZyZXNvdXJj
ZSkpCkBAIC00NjYsNyArNDY2LDcgQEAgdm9pZCBDQ1Jlc291cmNlUHJvdmlkZXI6OnJlY2VpdmVG
cm9tQ2hpbGQoaW50IGNoaWxkLCBjb25zdCBUcmFuc2ZlcmFibGVSZXNvdXJjZUwKICAgICAgICAg
Ly8gKGFuZCBpcyBzaW1wbGVyKSB0byB3YWl0LgogICAgICAgICBHTEMoY29udGV4dDNkLCBjb250
ZXh0M2QtPndhaXRTeW5jUG9pbnQocmVzb3VyY2VzLnN5bmNQb2ludCkpOwogICAgIH0KLSAgICBD
aGlsZCYgY2hpbGRJbmZvID0gbV9jaGlsZHJlbi5maW5kKGNoaWxkKS0+c2Vjb25kOworICAgIENo
aWxkJiBjaGlsZEluZm8gPSBtX2NoaWxkcmVuLmZpbmQoY2hpbGQpLT52YWx1ZTsKICAgICBmb3Ig
KFZlY3RvcjxUcmFuc2ZlcmFibGVSZXNvdXJjZT46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcmVzb3Vy
Y2VzLnJlc291cmNlcy5iZWdpbigpOyBpdCAhPSByZXNvdXJjZXMucmVzb3VyY2VzLmVuZCgpOyAr
K2l0KSB7CiAgICAgICAgIHVuc2lnbmVkIHRleHR1cmVJZDsKICAgICAgICAgR0xDKGNvbnRleHQz
ZCwgdGV4dHVyZUlkID0gY29udGV4dDNkLT5jcmVhdGVUZXh0dXJlKCkpOwpAQCAtNDkyLDcgKzQ5
Miw3IEBAIHZvaWQgQ0NSZXNvdXJjZVByb3ZpZGVyOjpyZWNlaXZlRnJvbVBhcmVudChjb25zdCBU
cmFuc2ZlcmFibGVSZXNvdXJjZUxpc3QmIHJlc291CiAgICAgaWYgKHJlc291cmNlcy5zeW5jUG9p
bnQpCiAgICAgICAgIEdMQyhjb250ZXh0M2QsIGNvbnRleHQzZC0+d2FpdFN5bmNQb2ludChyZXNv
dXJjZXMuc3luY1BvaW50KSk7CiAgICAgZm9yIChWZWN0b3I8VHJhbnNmZXJhYmxlUmVzb3VyY2U+
Ojpjb25zdF9pdGVyYXRvciBpdCA9IHJlc291cmNlcy5yZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0g
cmVzb3VyY2VzLnJlc291cmNlcy5lbmQoKTsgKytpdCkgewotICAgICAgICBSZXNvdXJjZSYgcmVz
b3VyY2UgPSBtX3Jlc291cmNlcy5maW5kKGl0LT5pZCktPnNlY29uZDsKKyAgICAgICAgUmVzb3Vy
Y2UmIHJlc291cmNlID0gbV9yZXNvdXJjZXMuZmluZChpdC0+aWQpLT52YWx1ZTsKICAgICAgICAg
QVNTRVJUKHJlc291cmNlLmV4cG9ydGVkKTsKICAgICAgICAgcmVzb3VyY2UuZXhwb3J0ZWQgPSBm
YWxzZTsKICAgICAgICAgR0xDKGNvbnRleHQzZCwgY29udGV4dDNkLT5iaW5kVGV4dHVyZShHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgcmVzb3VyY2UuZ2xJZCkpOwpAQCAtNTA2LDE2ICs1
MDYsMTYgQEAgYm9vbCBDQ1Jlc291cmNlUHJvdmlkZXI6OnRyYW5zZmVyUmVzb3VyY2UoV2ViR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFJlc291cmMKICAgICBBU1NFUlQoQ0NQcm94eTo6aXNJ
bXBsVGhyZWFkKCkpOwogICAgIFJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fcmVz
b3VyY2VzLmZpbmQoaWQpOwogICAgIEFTU0VSVChpdCAhPSBtX3Jlc291cmNlcy5lbmQoKSAmJiAh
aXQtPnNlY29uZC5sb2NrZWRGb3JXcml0ZSAmJiAhaXQtPnNlY29uZC5sb2NrRm9yUmVhZENvdW50
ICYmICFpdC0+c2Vjb25kLmV4dGVybmFsKTsKLSAgICBpZiAoaXQtPnNlY29uZC5leHBvcnRlZCkK
KyAgICBpZiAoaXQtPnZhbHVlLmV4cG9ydGVkKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
cmVzb3VyY2UtPmlkID0gaWQ7Ci0gICAgcmVzb3VyY2UtPmZvcm1hdCA9IGl0LT5zZWNvbmQuZm9y
bWF0OwotICAgIHJlc291cmNlLT5zaXplID0gaXQtPnNlY29uZC5zaXplOworICAgIHJlc291cmNl
LT5mb3JtYXQgPSBpdC0+dmFsdWUuZm9ybWF0OworICAgIHJlc291cmNlLT5zaXplID0gaXQtPnZh
bHVlLnNpemU7CiAgICAgaWYgKCFtX21haWxib3hlcy5pc0VtcHR5KCkpCiAgICAgICAgIHJlc291
cmNlLT5tYWlsYm94ID0gbV9tYWlsYm94ZXMudGFrZUZpcnN0KCk7CiAgICAgZWxzZQogICAgICAg
ICBHTEMoY29udGV4dCwgY29udGV4dC0+Z2VuTWFpbGJveENIUk9NSVVNKHJlc291cmNlLT5tYWls
Ym94Lm5hbWUpKTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGl0LT5zZWNvbmQuZ2xJZCkpOworICAgIEdMQyhjb250
ZXh0LCBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
aXQtPnZhbHVlLmdsSWQpKTsKICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+cHJvZHVjZVRleHR1
cmVDSFJPTUlVTShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgcmVzb3VyY2UtPm1haWxi
b3gubmFtZSkpOwogICAgIHJldHVybiB0cnVlOwogfQpAQCAtNTMwLDE1ICs1MzAsMTUgQEAgdm9p
ZCBDQ1Jlc291cmNlUHJvdmlkZXI6OnRyaW1NYWlsYm94RGVxdWUoKQogICAgIHNpemVfdCBtYXhN
YWlsYm94Q291bnQgPSAwOwogICAgIGlmIChtX2NvbnRleHQtPmNhcGFiaWxpdGllcygpLmhhc1Bh
cmVudENvbXBvc2l0b3IpIHsKICAgICAgICAgZm9yIChSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQg
PSBtX3Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSBtX3Jlc291cmNlcy5lbmQoKTsgKytpdCkgewot
ICAgICAgICAgICAgaWYgKCFpdC0+c2Vjb25kLmV4cG9ydGVkICYmICFpdC0+c2Vjb25kLmV4dGVy
bmFsKQorICAgICAgICAgICAgaWYgKCFpdC0+dmFsdWUuZXhwb3J0ZWQgJiYgIWl0LT52YWx1ZS5l
eHRlcm5hbCkKICAgICAgICAgICAgICAgICArK21heE1haWxib3hDb3VudDsKICAgICAgICAgfQog
ICAgIH0gZWxzZSB7CiAgICAgICAgIEhhc2hTZXQ8aW50PiBjaGlsZFBvb2xTZXQ7CiAgICAgICAg
IGZvciAoQ2hpbGRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9jaGlsZHJlbi5iZWdpbigpOyBpdCAhPSBt
X2NoaWxkcmVuLmVuZCgpOyArK2l0KQotICAgICAgICAgICAgY2hpbGRQb29sU2V0LmFkZChpdC0+
c2Vjb25kLnBvb2wpOworICAgICAgICAgICAgY2hpbGRQb29sU2V0LmFkZChpdC0+dmFsdWUucG9v
bCk7CiAgICAgICAgIGZvciAoUmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMu
YmVnaW4oKTsgaXQgIT0gbV9yZXNvdXJjZXMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgICAgIGlm
IChjaGlsZFBvb2xTZXQuY29udGFpbnMoaXQtPnNlY29uZC5wb29sKSkKKyAgICAgICAgICAgIGlm
IChjaGlsZFBvb2xTZXQuY29udGFpbnMoaXQtPnZhbHVlLnBvb2wpKQogICAgICAgICAgICAgICAg
ICsrbWF4TWFpbGJveENvdW50OwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJHbG9iYWxDb250
ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9t
RmlsdGVyR2xvYmFsQ29udGV4dC5jcHAKaW5kZXggMzgyYzI3OGVhMjFkMTM1ZjA5Yzc3NmM4M2Yw
NTIxNmJhNmU4ZWQ3My4uMGFlZjZjZDQ2MGQ0ZTM5OGE1YWE0ZDU2OGU4NjUyZTZmMzI5YjUwNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0
b21GaWx0ZXJHbG9iYWxDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlckdsb2JhbENvbnRleHQuY3BwCkBAIC00NCw3ICs0
NCw3IEBAIEN1c3RvbUZpbHRlckdsb2JhbENvbnRleHQ6OkN1c3RvbUZpbHRlckdsb2JhbENvbnRl
eHQoKQogQ3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dDo6fkN1c3RvbUZpbHRlckdsb2JhbENvbnRl
eHQoKQogewogICAgIGZvciAoQ3VzdG9tRmlsdGVyQ29tcGlsZWRQcm9ncmFtc01hcDo6aXRlcmF0
b3IgaXRlciA9IG1fcHJvZ3JhbXMuYmVnaW4oKTsgaXRlciAhPSBtX3Byb2dyYW1zLmVuZCgpOyAr
K2l0ZXIpCi0gICAgICAgIGl0ZXItPnNlY29uZC0+ZGV0YWNoRnJvbUdsb2JhbENvbnRleHQoKTsK
KyAgICAgICAgaXRlci0+dmFsdWUtPmRldGFjaEZyb21HbG9iYWxDb250ZXh0KCk7CiB9CiAKIHZv
aWQgQ3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dDo6cHJlcGFyZUNvbnRleHRJZk5lZWRlZChIb3N0
V2luZG93KiBob3N0V2luZG93KQpAQCAtNjksNyArNjksNyBAQCBQYXNzUmVmUHRyPEN1c3RvbUZp
bHRlckNvbXBpbGVkUHJvZ3JhbT4gQ3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dDo6Z2V0Q29tcGls
ZWRQcgogCiAgICAgQ3VzdG9tRmlsdGVyQ29tcGlsZWRQcm9ncmFtc01hcDo6aXRlcmF0b3IgaXRl
ciA9IG1fcHJvZ3JhbXMuZmluZChwcm9ncmFtSW5mbyk7CiAgICAgaWYgKGl0ZXIgIT0gbV9wcm9n
cmFtcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0ZXItPnNlY29uZDsKKyAgICAgICAgcmV0dXJu
IGl0ZXItPnZhbHVlOwogCiAgICAgUmVmUHRyPEN1c3RvbUZpbHRlckNvbXBpbGVkUHJvZ3JhbT4g
Y29tcGlsZWRQcm9ncmFtID0gQ3VzdG9tRmlsdGVyQ29tcGlsZWRQcm9ncmFtOjpjcmVhdGUodGhp
cywgcHJvZ3JhbUluZm8pOwogICAgIG1fcHJvZ3JhbXMuc2V0KHByb2dyYW1JbmZvLCBjb21waWxl
ZFByb2dyYW0uZ2V0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJQcm9ncmFtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyUHJvZ3JhbS5jcHAKaW5kZXggZDFj
ZjYxMzRmNzBhZThhYmY1MmZjNjIzYTdkNjk2NTM0ODc5ZjYxMi4uOTRlODNkZjliODNiMmI1YjU0
ZmU3NDdhN2UyYWZjYjQyMjVlOWNmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJQcm9ncmFtLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclByb2dyYW0uY3Bw
CkBAIC03NSw3ICs3NSw3IEBAIHZvaWQgQ3VzdG9tRmlsdGVyUHJvZ3JhbTo6cmVtb3ZlQ2xpZW50
KEN1c3RvbUZpbHRlclByb2dyYW1DbGllbnQqIGNsaWVudCkKIHZvaWQgQ3VzdG9tRmlsdGVyUHJv
Z3JhbTo6bm90aWZ5Q2xpZW50cygpCiB7CiAgICAgZm9yIChDdXN0b21GaWx0ZXJQcm9ncmFtQ2xp
ZW50TGlzdDo6aXRlcmF0b3IgaXRlciA9IG1fY2xpZW50cy5iZWdpbigpLCBlbmQgPSBtX2NsaWVu
dHMuZW5kKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCi0gICAgICAgIGl0ZXItPmZpcnN0LT5ub3Rp
ZnlDdXN0b21GaWx0ZXJQcm9ncmFtTG9hZGVkKHRoaXMpOworICAgICAgICBpdGVyLT5rZXktPm5v
dGlmeUN1c3RvbUZpbHRlclByb2dyYW1Mb2FkZWQodGhpcyk7CiB9CiAKIEN1c3RvbUZpbHRlclBy
b2dyYW1JbmZvIEN1c3RvbUZpbHRlclByb2dyYW06OnByb2dyYW1JbmZvKCkgY29uc3QKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6
U2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJm
QnV6elNraWEuY3BwCmluZGV4IGY2OGVhNjE5MjQ1Zjg2NmU1YmQwZDU3OGQwMTA0ODQ0NTI1ODRj
MmIuLjFlODg2N2JiNzU3ZjIyNDJlOGY0OTYyZjg3NWIxYmRmN2FlOTkxMmUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2tpYS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1
enpTa2lhLmNwcApAQCAtMjQ0LDE4ICsyNDQsMTggQEAgc3RhdGljIEhCX0ZhY2VSZWNfKiBnZXRD
YWNoZWRIYXJmYnV6ekZhY2UoRm9udFBsYXRmb3JtRGF0YSogcGxhdGZvcm1EYXRhKQogICAgICAg
ICBnSGFyZmJ1enpGYWNlQ2FjaGUtPnNldCh1bmlxdWVJRCwgZW50cnkpOwogICAgICAgICByZXR1
cm4gZW50cnkuZmlyc3Q7CiAgICAgfQotICAgICsrKHJlc3VsdC5nZXQoKS0+c2Vjb25kLnNlY29u
ZCk7Ci0gICAgcmV0dXJuIHJlc3VsdC5nZXQoKS0+c2Vjb25kLmZpcnN0OworICAgICsrKHJlc3Vs
dC5nZXQoKS0+dmFsdWUuc2Vjb25kKTsKKyAgICByZXR1cm4gcmVzdWx0LmdldCgpLT52YWx1ZS5m
aXJzdDsKIH0KIAogc3RhdGljIHZvaWQgcmVsZWFzZUNhY2hlZEhhcmZidXp6RmFjZShTa0ZvbnRJ
RCB1bmlxdWVJRCkKIHsKICAgICBIYXJmYnV6ekZhY2VDYWNoZTo6aXRlcmF0b3IgcmVzdWx0ID0g
Z0hhcmZidXp6RmFjZUNhY2hlLT5maW5kKHVuaXF1ZUlEKTsKICAgICBBU1NFUlQocmVzdWx0ICE9
IGdIYXJmYnV6ekZhY2VDYWNoZS0+ZW5kKCkpOwotICAgIEFTU0VSVChyZXN1bHQuZ2V0KCktPnNl
Y29uZC5zZWNvbmQgPiAwKTsKLSAgICAtLShyZXN1bHQuZ2V0KCktPnNlY29uZC5zZWNvbmQpOwot
ICAgIGlmICghKHJlc3VsdC5nZXQoKS0+c2Vjb25kLnNlY29uZCkpIHsKLSAgICAgICAgSEJfRnJl
ZUZhY2UocmVzdWx0LmdldCgpLT5zZWNvbmQuZmlyc3QpOworICAgIEFTU0VSVChyZXN1bHQuZ2V0
KCktPnZhbHVlLnNlY29uZCA+IDApOworICAgIC0tKHJlc3VsdC5nZXQoKS0+dmFsdWUuc2Vjb25k
KTsKKyAgICBpZiAoIShyZXN1bHQuZ2V0KCktPnZhbHVlLnNlY29uZCkpIHsKKyAgICAgICAgSEJf
RnJlZUZhY2UocmVzdWx0LmdldCgpLT52YWx1ZS5maXJzdCk7CiAgICAgICAgIGdIYXJmYnV6ekZh
Y2VDYWNoZS0+cmVtb3ZlKHVuaXF1ZUlEKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ek5HRmFjZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ek5H
RmFjZS5jcHAKaW5kZXggN2RkMDQ4YjNiNDNmZjU5Mzg4ZWFmNGU3MjEwZWUyY2NiZDU1NDIyMy4u
NjA0NzU5YjhjYmRlZDNjOGI4NDFkYzY2ODc3ZTNkZWEzNDYxZjc2OCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpOR0ZhY2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hh
cmZCdXp6TkdGYWNlLmNwcApAQCAtNjAsOCArNjAsOCBAQCBIYXJmQnV6ek5HRmFjZTo6SGFyZkJ1
enpOR0ZhY2UoRm9udFBsYXRmb3JtRGF0YSogcGxhdGZvcm1EYXRhLCB1aW50NjRfdCB1bmlxdWVJ
RAogICAgICAgICBBU1NFUlQobV9mYWNlKTsKICAgICAgICAgaGFyZmJ1enpGYWNlQ2FjaGUoKS0+
c2V0KG1fdW5pcXVlSUQsIEZhY2VDYWNoZUVudHJ5KG1fZmFjZSwgMSkpOwogICAgIH0gZWxzZSB7
Ci0gICAgICAgICsrKHJlc3VsdC5nZXQoKS0+c2Vjb25kLnNlY29uZCk7Ci0gICAgICAgIG1fZmFj
ZSA9IHJlc3VsdC5nZXQoKS0+c2Vjb25kLmZpcnN0OworICAgICAgICArKyhyZXN1bHQuZ2V0KCkt
PnZhbHVlLnNlY29uZCk7CisgICAgICAgIG1fZmFjZSA9IHJlc3VsdC5nZXQoKS0+dmFsdWUuZmly
c3Q7CiAgICAgfQogfQogCkBAIC02OSwxMCArNjksMTAgQEAgSGFyZkJ1enpOR0ZhY2U6On5IYXJm
QnV6ek5HRmFjZSgpCiB7CiAgICAgSGFyZkJ1enpOR0ZhY2VDYWNoZTo6aXRlcmF0b3IgcmVzdWx0
ID0gaGFyZmJ1enpGYWNlQ2FjaGUoKS0+ZmluZChtX3VuaXF1ZUlEKTsKICAgICBBU1NFUlQocmVz
dWx0ICE9IGhhcmZidXp6RmFjZUNhY2hlKCktPmVuZCgpKTsKLSAgICBBU1NFUlQocmVzdWx0Lmdl
dCgpLT5zZWNvbmQuc2Vjb25kID4gMCk7Ci0gICAgLS0ocmVzdWx0LmdldCgpLT5zZWNvbmQuc2Vj
b25kKTsKLSAgICBpZiAoIShyZXN1bHQuZ2V0KCktPnNlY29uZC5zZWNvbmQpKSB7Ci0gICAgICAg
IGhiX2ZhY2VfZGVzdHJveShyZXN1bHQuZ2V0KCktPnNlY29uZC5maXJzdCk7CisgICAgQVNTRVJU
KHJlc3VsdC5nZXQoKS0+dmFsdWUuc2Vjb25kID4gMCk7CisgICAgLS0ocmVzdWx0LmdldCgpLT52
YWx1ZS5zZWNvbmQpOworICAgIGlmICghKHJlc3VsdC5nZXQoKS0+dmFsdWUuc2Vjb25kKSkgewor
ICAgICAgICBoYl9mYWNlX2Rlc3Ryb3kocmVzdWx0LmdldCgpLT52YWx1ZS5maXJzdCk7CiAgICAg
ICAgIGhhcmZidXp6RmFjZUNhY2hlKCktPnJlbW92ZShtX3VuaXF1ZUlEKTsKICAgICB9CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9u
dERhdGFDb3JlVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMv
U2ltcGxlRm9udERhdGFDb3JlVGV4dC5jcHAKaW5kZXggMDUxOTM3NDJjNTg1MmRiZTljOWNlZDY0
YjlhMDdhYWQyYzFlYTQ3Ny4uMGI3MTMzNDdmNjA0NjM1NTQ5ZTUwZDU2MzY1MjE4YjIzNDQyNmFj
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBs
ZUZvbnREYXRhQ29yZVRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9TaW1wbGVGb250RGF0YUNvcmVUZXh0LmNwcApAQCAtNDMsNyArNDMsNyBAQCBDRkRp
Y3Rpb25hcnlSZWYgU2ltcGxlRm9udERhdGE6OmdldENGU3RyaW5nQXR0cmlidXRlcyhUeXBlc2V0
dGluZ0ZlYXR1cmVzIHR5cGVzZQogewogICAgIHVuc2lnbmVkIGtleSA9IHR5cGVzZXR0aW5nRmVh
dHVyZXMgKyAxOwogICAgIEhhc2hNYXA8dW5zaWduZWQsIFJldGFpblB0cjxDRkRpY3Rpb25hcnlS
ZWY+ID46OkFkZFJlc3VsdCBhZGRSZXN1bHQgPSBtX0NGU3RyaW5nQXR0cmlidXRlcy5hZGQoa2V5
LCBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPigpKTsKLSAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9u
YXJ5UmVmPiYgYXR0cmlidXRlc0RpY3Rpb25hcnkgPSBhZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29u
ZDsKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiYgYXR0cmlidXRlc0RpY3Rpb25hcnkg
PSBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50
cnkpCiAgICAgICAgIHJldHVybiBhdHRyaWJ1dGVzRGljdGlvbmFyeS5nZXQoKTsKICAgICAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250
RGF0YU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVG
b250RGF0YU1hYy5tbQppbmRleCA2NmZlOTBhNTkzOTBlNGNkMjJmNjE4MzhmOGM2YTlkYmZiNTJh
YzZjLi45N2ViYmY5OWMzZDJlNWU3MWNhNjBkYWNiM2RlODI1YTQxYjY3MTdkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFNYWMu
bW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnRE
YXRhTWFjLm1tCkBAIC00NjEsNyArNDYxLDcgQEAgYm9vbCBTaW1wbGVGb250RGF0YTo6Y2FuUmVu
ZGVyQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMKIAog
ICAgIFdURjo6SGFzaE1hcDxTdHJpbmcsIGJvb2w+OjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gbV9j
b21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZVN1cHBvcnQtPmFkZChTdHJpbmcoY2hhcmFjdGVycywg
bGVuZ3RoKSwgZmFsc2UpOwogICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAg
IHJldHVybiBhZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGFkZFJl
c3VsdC5pdGVyYXRvci0+dmFsdWU7CiAKICAgICBSZXRhaW5QdHI8Q0dGb250UmVmPiBjZ0ZvbnQo
QWRvcHRDRiwgQ1RGb250Q29weUdyYXBoaWNzRm9udChwbGF0Zm9ybURhdGEoKS5jdEZvbnQoKSwg
MCkpOwogCkBAIC00ODEsNyArNDgxLDcgQEAgYm9vbCBTaW1wbGVGb250RGF0YTo6Y2FuUmVuZGVy
Q29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnNl
Y29uZCA9IHRydWU7CisgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IHRydWU7CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAK
aW5kZXggYTNjMDU2NTkxMjBmYWQ4MmNkMTJiNGE1NWE4ZjQ3NGIyM2MyYmVjOS4uOGJlOTM4NjI1
YjQwZTUzY2VkNjZkYjU2ZmEwZjk5YTRhMDA0ZTZmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMz
RE9wZW5HTENvbW1vbi5jcHAKQEAgLTExNyw3ICsxMTcsNyBAQCBTdHJpbmcgRXh0ZW5zaW9uczNE
T3BlbkdMQ29tbW9uOjpnZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUoUGxhdGZvcm0zRE9i
amVjdAogICAgIGlmIChyZXN1bHQgPT0gbV9jb250ZXh0LT5tX3NoYWRlclNvdXJjZU1hcC5lbmQo
KSkKICAgICAgICAgcmV0dXJuICIiOwogCi0gICAgR3JhcGhpY3NDb250ZXh0M0Q6OlNoYWRlclNv
dXJjZUVudHJ5JiBlbnRyeSA9IHJlc3VsdC0+c2Vjb25kOworICAgIEdyYXBoaWNzQ29udGV4dDNE
OjpTaGFkZXJTb3VyY2VFbnRyeSYgZW50cnkgPSByZXN1bHQtPnZhbHVlOwogCiAgICAgU3RyaW5n
IHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2U7CiAgICAgU3RyaW5nIHNoYWRlckluZm9Mb2c7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3ND
b250ZXh0M0RPcGVuR0xDb21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcAppbmRleCA3NzJjYTgx
YTBhMTU4M2YzYTI4ZGQ4ZDY5MWViMDM5Y2MwYzUxODYyLi5kZjljY2I1NzQzMjI2MGJmYTViYjM1
Nzk2MjNhOGYyMmIyMGEwYmQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9w
ZW5HTENvbW1vbi5jcHAKQEAgLTQ3Myw3ICs0NzMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNE
Ojpjb21waWxlU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQogCiAgICAgaWYgKGxlbmd0
aCkgewogICAgICAgICBIYXNoTWFwPFBsYXRmb3JtM0RPYmplY3QsIEdyYXBoaWNzQ29udGV4dDNE
OjpTaGFkZXJTb3VyY2VFbnRyeT46Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFw
LmZpbmQoc2hhZGVyKTsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OlNoYWRlclNvdXJjZUVu
dHJ5JiBlbnRyeSA9IHJlc3VsdC0+c2Vjb25kOworICAgICAgICBHcmFwaGljc0NvbnRleHQzRDo6
U2hhZGVyU291cmNlRW50cnkmIGVudHJ5ID0gcmVzdWx0LT52YWx1ZTsKIAogICAgICAgICBHTHNp
emVpIHNpemUgPSAwOwogICAgICAgICBPd25BcnJheVB0cjxHTGNoYXI+IGluZm8gPSBhZG9wdEFy
cmF5UHRyKG5ldyBHTGNoYXJbbGVuZ3RoXSk7CkBAIC0xMTQ1LDcgKzExNDUsNyBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJpdihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlciwgR0Mz
RGVudW0gcG5hbWUsIEdDMwogICAgICAgICAgICAgKnZhbHVlID0gc3RhdGljX2Nhc3Q8aW50Pihm
YWxzZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgKnZhbHVlID0g
c3RhdGljX2Nhc3Q8aW50PihyZXN1bHQtPnNlY29uZC5pc1ZhbGlkKTsKKyAgICAgICAgKnZhbHVl
ID0gc3RhdGljX2Nhc3Q8aW50PihyZXN1bHQtPnZhbHVlLmlzVmFsaWQpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIElORk9fTE9HX0xFTkdUSDoKICAgICAgICAgaWYgKHJlc3VsdCA9PSBtX3No
YWRlclNvdXJjZU1hcC5lbmQoKSkgewpAQCAtMTE3Miw3ICsxMTcyLDcgQEAgU3RyaW5nIEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRTaGFkZXJJbmZvTG9nKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQog
ICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCiAgICAgICAgIHJldHVy
biBTdHJpbmcoKTsgCiAKLSAgICBTaGFkZXJTb3VyY2VFbnRyeSBlbnRyeSA9IHJlc3VsdC0+c2Vj
b25kOworICAgIFNoYWRlclNvdXJjZUVudHJ5IGVudHJ5ID0gcmVzdWx0LT52YWx1ZTsKICAgICBp
ZiAoIWVudHJ5LmlzVmFsaWQpCiAgICAgICAgIHJldHVybiBlbnRyeS5sb2c7CiAKQEAgLTExOTgs
NyArMTE5OCw3IEBAIFN0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVyU291cmNlKFBs
YXRmb3JtM0RPYmplY3Qgc2hhZGVyKQogICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VN
YXAuZW5kKCkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsgCiAKLSAgICByZXR1cm4gcmVzdWx0
LT5zZWNvbmQuc291cmNlOworICAgIHJldHVybiByZXN1bHQtPnZhbHVlLnNvdXJjZTsKIH0KIAog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvRUdM
RGlzcGxheU9wZW5WRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
dmcvRUdMRGlzcGxheU9wZW5WRy5jcHAKaW5kZXggZDY4MWQ3NTgxZmIzZmJmMjlkODhlMTI2ZTUz
ODM4NzgyMzBiNTIyMC4uMWE2OGFlZmY4Y2M4YzlmNTQ3NmI0ZjA1MzU2NjIwZmUxOTE0MWM0YyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL0VHTERp
c3BsYXlPcGVuVkcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW52Zy9FR0xEaXNwbGF5T3BlblZHLmNwcApAQCAtMTIxLDcgKzEyMSw3IEBAIEVHTERpc3BsYXlP
cGVuVkc6On5FR0xEaXNwbGF5T3BlblZHKCkKIAogICAgIEhhc2hNYXA8RUdMU3VyZmFjZSwgRUdM
aW50Pjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9zdXJmYWNlQ29uZmlnSWRzLmVuZCgpOwogICAg
IGZvciAoSGFzaE1hcDxFR0xTdXJmYWNlLCBFR0xpbnQ+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1f
c3VyZmFjZUNvbmZpZ0lkcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGRlc3Ry
b3lTdXJmYWNlKCgqaXQpLmZpcnN0KTsKKyAgICAgICAgZGVzdHJveVN1cmZhY2UoKCppdCkua2V5
KTsKIAogICAgIGVnbFRlcm1pbmF0ZShtX2Rpc3BsYXkpOwogICAgIEFTU0VSVF9FR0xfTk9fRVJS
T1IoKTsKQEAgLTMzOCw3ICszMzgsNyBAQCB2b2lkIEVHTERpc3BsYXlPcGVuVkc6OmRlc3Ryb3lT
dXJmYWNlKGNvbnN0IEVHTFN1cmZhY2UmIHN1cmZhY2UpCiAKICAgICAgICAgLy8gLi4uYnV0IG9u
bHkgaWYgdGhlcmUncyBubyBvdGhlciBzdXJmYWNlcyBhc3NvY2lhdGVkIHRvIHRoYXQgY29udGV4
dC4KICAgICAgICAgZm9yIChIYXNoTWFwPEVHTFN1cmZhY2UsIEVHTGludD46Oml0ZXJhdG9yIGl0
ID0gbV9zdXJmYWNlQ29uZmlnSWRzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAg
ICAgICAgaWYgKCgqaXQpLnNlY29uZCA9PSBzdXJmYWNlQ29uZmlnSWQpIHsKKyAgICAgICAgICAg
IGlmICgoKml0KS52YWx1ZSA9PSBzdXJmYWNlQ29uZmlnSWQpIHsKICAgICAgICAgICAgICAgICBp
c0NvbnRleHRSZWZlcmVuY2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIH0KQEAgLTM1NCw3ICszNTQsNyBAQCB2b2lkIEVHTERpc3BsYXlPcGVuVkc6OmRlc3Ry
b3lTdXJmYWNlKGNvbnN0IEVHTFN1cmZhY2UmIHN1cmZhY2UpCiAKICAgICBIYXNoTWFwPEVHTE5h
dGl2ZVdpbmRvd1R5cGUsIEVHTFN1cmZhY2U+OjppdGVyYXRvciBlbmQgPSBtX3dpbmRvd1N1cmZh
Y2VzLmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDxFR0xOYXRpdmVXaW5kb3dUeXBlLCBFR0xTdXJm
YWNlPjo6aXRlcmF0b3IgaXQgPSBtX3dpbmRvd1N1cmZhY2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgewotICAgICAgICBpZiAoKCppdCkuc2Vjb25kID09IHN1cmZhY2UpIHsKKyAgICAgICAg
aWYgKCgqaXQpLnZhbHVlID09IHN1cmZhY2UpIHsKICAgICAgICAgICAgIG1fd2luZG93U3VyZmFj
ZXMucmVtb3ZlKGl0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC00MDksNyAr
NDA5LDcgQEAgRUdMQ29udGV4dCBFR0xEaXNwbGF5T3BlblZHOjpjb250ZXh0Rm9yU3VyZmFjZShj
b25zdCBFR0xTdXJmYWNlJiBzdXJmYWNlKQogICAgIEhhc2hNYXA8RUdMaW50LCBFR0xDb250ZXh0
Pjo6aXRlcmF0b3IgZW5kID0gbV9jb250ZXh0cy5lbmQoKTsKIAogICAgIGZvciAoSGFzaE1hcDxF
R0xpbnQsIEVHTENvbnRleHQ+OjppdGVyYXRvciBpdCA9IG1fY29udGV4dHMuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGVnbE1ha2VDdXJyZW50KG1fZGlzcGxheSwgc3VyZmFj
ZSwgc3VyZmFjZSwgKCppdCkuc2Vjb25kKTsKKyAgICAgICAgZWdsTWFrZUN1cnJlbnQobV9kaXNw
bGF5LCBzdXJmYWNlLCBzdXJmYWNlLCAoKml0KS52YWx1ZSk7CiAgICAgICAgIGlmIChlZ2xHZXRF
cnJvcigpID09IEVHTF9TVUNDRVNTKSB7CiAgICAgICAgICAgICAvLyBSZXN0b3JlIHByZXZpb3Vz
IHN1cmZhY2UvY29udGV4dC4KICAgICAgICAgICAgIGlmIChjdXJyZW50Q29udGV4dCAhPSBFR0xf
Tk9fQ09OVEVYVCkgewpAQCAtNDE3LDggKzQxNyw4IEBAIEVHTENvbnRleHQgRUdMRGlzcGxheU9w
ZW5WRzo6Y29udGV4dEZvclN1cmZhY2UoY29uc3QgRUdMU3VyZmFjZSYgc3VyZmFjZSkKICAgICAg
ICAgICAgICAgICBBU1NFUlRfRUdMX05PX0VSUk9SKCk7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAvLyBDb29sLCBzdXJmYWNlIGlzIGNvbXBhdGlibGUgdG8gb25lIG9mIG91ciBleGlzdGlu
ZyBjb250ZXh0cy4KLSAgICAgICAgICAgIG1fY29tcGF0aWJsZUNvbmZpZ0lkcy5zZXQoc3VyZmFj
ZUNvbmZpZ0lkLCAoKml0KS5maXJzdCk7Ci0gICAgICAgICAgICByZXR1cm4gKCppdCkuc2Vjb25k
OworICAgICAgICAgICAgbV9jb21wYXRpYmxlQ29uZmlnSWRzLnNldChzdXJmYWNlQ29uZmlnSWQs
ICgqaXQpLmtleSk7CisgICAgICAgICAgICByZXR1cm4gKCppdCkudmFsdWU7CiAgICAgICAgIH0K
ICAgICB9CiAgICAgLy8gUmVzdG9yZSBwcmV2aW91cyBzdXJmYWNlL2NvbnRleHQuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ckdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyR0wuY3BwCmluZGV4IGEyMmU3MjBlMTY1MGEwZjNiY2Y4MWU0ZjNjZGZmNzgxNzBkOGFh
ZDAuLjAxNjIxNGE4YTdkMTk0ZTQ2N2VjMTgxOGNjYzEyN2QxNjIyZWU0ODYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyR0wuY3BwCkBAIC0xMDUsNyArMTA1LDcgQEAgc3RydWN0IFRleHR1cmVNYXBwZXJHTERh
dGEgewogICAgICAgICAgICAgR0xDb250ZXh0IGN1cnJlbnRHTENvbmV4dCA9IGdldEN1cnJlbnRH
TENvbnRleHQoKTsKICAgICAgICAgICAgIEdMQ29udGV4dERhdGFNYXA6Oml0ZXJhdG9yIGl0ID0g
Z2xDb250ZXh0RGF0YU1hcCgpLmZpbmQoY3VycmVudEdMQ29uZXh0KTsKICAgICAgICAgICAgIGlm
IChpdCAhPSBnbENvbnRleHREYXRhTWFwKCkuZW5kKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKIAogICAgICAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTaGFyZWRHTERhdGEoZ2V0Q3VycmVudEdMQ29udGV4
dCgpKSk7CiAgICAgICAgIH0KQEAgLTEyNCw3ICsxMjQsNyBAQCBzdHJ1Y3QgVGV4dHVyZU1hcHBl
ckdMRGF0YSB7CiAgICAgICAgICAgICBHTENvbnRleHREYXRhTWFwOjpjb25zdF9pdGVyYXRvciBl
bmQgPSBnbENvbnRleHREYXRhTWFwKCkuZW5kKCk7CiAgICAgICAgICAgICBHTENvbnRleHREYXRh
TWFwOjppdGVyYXRvciBpdDsKICAgICAgICAgICAgIGZvciAoaXQgPSBnbENvbnRleHREYXRhTWFw
KCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGl0LT5z
ZWNvbmQgPT0gdGhpcykKKyAgICAgICAgICAgICAgICBpZiAoaXQtPnZhbHVlID09IHRoaXMpCiAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcAppbmRleCAwZmJkYmU5NWNhZjE2NDcwZGQwNjMy
ZjA0YzE0NGI4MjBiNmU4YmIzLi40NjQ5ZjRiNjJkOGUxOWFhM2M1M2JhYWM5Zjc1MjJjZjEzOWYz
MjM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAKQEAgLTIw
OCw3ICsyMDgsNyBAQCBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBUZXh0
dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6Z2V0U2hhZGVyUHJvZwogCiAgICAgVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1NYXA6Oml0ZXJhdG9yIGl0ID0gbV90ZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbU1hcC5maW5kKHNoYWRlclR5cGUpOwogICAgIGlmIChpdCAhPSBtX3RleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtTWFwLmVuZCgpKQotICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICAg
ICAgcmV0dXJuIGl0LT52YWx1ZTsKIAogICAgIHN3aXRjaCAoc2hhZGVyVHlwZSkgewogICAgIGNh
c2UgU2ltcGxlOgpAQCAtNzY1LDcgKzc2NSw3IEBAIFBhc3NSZWZQdHI8U3RhbmRhcmRGaWx0ZXJQ
cm9ncmFtPiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6Z2V0U2hhZGVyRm9yRmlsdGVyCiAK
ICAgICAgICAgbV9maWx0ZXJNYXAuYWRkKGtleSwgcHJvZ3JhbSk7CiAgICAgfSBlbHNlCi0gICAg
ICAgIHByb2dyYW0gPSBpdGVyYXRvci0+c2Vjb25kOworICAgICAgICBwcm9ncmFtID0gaXRlcmF0
b3ItPnZhbHVlOwogCiAgICAgcmV0dXJuIHByb2dyYW07CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250UGxhdGZvcm1EYXRhLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRQbGF0Zm9ybURhdGEuY3Bw
CmluZGV4IDE5NzkwYWQ0OWIzMzAzZGQ3YjYyYzdlN2EwYTgyMzY3N2I0Y2ZmNTEuLjE5ZjUyNDU1
ZDExYjM1NGNjNGQ0M2U2ODM5OWNlNzlhYzk5YmMwYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRQbGF0Zm9ybURhdGEuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRQbGF0Zm9ybURhdGEuY3Bw
CkBAIC0yODcsOSArMjg3LDkgQEAgc3RhdGljIFBhc3NSZWZQdHI8Rml4ZWRTaXplRm9udERhdGE+
IGNyZWF0ZUZpeGVkU2l6ZUZvbnREYXRhKGNvbnN0IEF0b21pY1N0cmluZyYKICAgICBGaXhlZFNp
emVGb250RGF0YUtleSBrZXkoZmFtaWx5LCB3ZWlnaHQsIGl0YWxpYyk7CiAgICAgRml4ZWRTaXpl
Rm9udENhY2hlOjpBZGRSZXN1bHQgcmVzdWx0ID0gZ19maXhlZFNpemVGb250Q2FjaGUuYWRkKGtl
eSwgUmVmUHRyPEZpeGVkU2l6ZUZvbnREYXRhPigpKTsKICAgICBpZiAocmVzdWx0LmlzTmV3RW50
cnkpCi0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gRml4ZWRTaXplRm9udERhdGE6
OmNyZWF0ZShmYW1pbHksIHdlaWdodCwgaXRhbGljKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZSA9IEZpeGVkU2l6ZUZvbnREYXRhOjpjcmVhdGUoZmFtaWx5LCB3ZWlnaHQsIGl0YWxp
Yyk7CiAKLSAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgcmV0dXJuIHJl
c3VsdC5pdGVyYXRvci0+dmFsdWU7CiB9CiAKIHN0YXRpYyBMT05HIHRvR0RJRm9udFdlaWdodChG
b250V2VpZ2h0IGZvbnRXZWlnaHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvRGF0YU9iamVjdEd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRGF0
YU9iamVjdEd0ay5jcHAKaW5kZXggMWE4NGY4YmQzMTk1MmIyOGUyNjgyNzFkZDJhNWY1N2Y0NGQ4
MjdkNy4uYWRmYzY2ZTAxNWU1MDIyNjc4OGMyMTQ3NjhhMTViMjkxMzY4NDNiOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RhdGFPYmplY3RHdGsuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmNwcApAQCAtMTcxLDcgKzE3
MSw3IEBAIERhdGFPYmplY3RHdGsqIERhdGFPYmplY3RHdGs6OmZvckNsaXBib2FyZChHdGtDbGlw
Ym9hcmQqIGNsaXBib2FyZCkKICAgICB9CiAKICAgICBIYXNoTWFwPEd0a0NsaXBib2FyZCosIFJl
ZlB0cjxEYXRhT2JqZWN0R3RrPiA+OjppdGVyYXRvciBpdCA9IG9iamVjdE1hcC5maW5kKGNsaXBi
b2FyZCk7Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgcmV0dXJuIGl0LT52YWx1
ZS5nZXQoKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L0d0a0RyYWdBbmREcm9wSGVscGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9H
dGtEcmFnQW5kRHJvcEhlbHBlci5jcHAKaW5kZXggNzYzZDEyMGQwOTQxNjIyNzI2NjBjNjA2MzJh
MTkyOTg2ZjU0MmVhNC4uZmMyZjU2ZTYxNjZlYjFhYWNkYmFkYThmNTJmZWYzYzZkZDg4NjRjYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0RyYWdBbmREcm9wSGVs
cGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrRHJhZ0FuZERyb3BI
ZWxwZXIuY3BwCkBAIC03MCw3ICs3MCw3IEBAIHZvaWQgR3RrRHJhZ0FuZERyb3BIZWxwZXI6Omhh
bmRsZUdldERyYWdEYXRhKEdka0RyYWdDb250ZXh0KiBjb250ZXh0LCBHdGtTZWxlY3RpCiAgICAg
RHJhZ2dpbmdEYXRhT2JqZWN0c01hcDo6aXRlcmF0b3IgaXRlcmF0b3IgPSBtX2RyYWdnaW5nRGF0
YU9iamVjdHMuZmluZChjb250ZXh0KTsKICAgICBpZiAoaXRlcmF0b3IgPT0gbV9kcmFnZ2luZ0Rh
dGFPYmplY3RzLmVuZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgUGFzdGVib2FyZEhlbHBlcjo6
ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+ZmlsbFNlbGVjdGlvbkRhdGEoc2VsZWN0aW9uRGF0
YSwgaW5mbywgaXRlcmF0b3ItPnNlY29uZC5nZXQoKSk7CisgICAgUGFzdGVib2FyZEhlbHBlcjo6
ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+ZmlsbFNlbGVjdGlvbkRhdGEoc2VsZWN0aW9uRGF0
YSwgaW5mbywgaXRlcmF0b3ItPnZhbHVlLmdldCgpKTsKIH0KIAogc3RydWN0IEhhbmRsZURyYWdM
YXRlckRhdGEgewpAQCAtMTE2LDcgKzExNiw3IEBAIHZvaWQgR3RrRHJhZ0FuZERyb3BIZWxwZXI6
OmhhbmRsZURyYWdMZWF2ZShHZGtEcmFnQ29udGV4dCogZ2RrQ29udGV4dCwgRHJhZ0V4aXRlCiAg
ICAgLy8gdGhlIGRyYWctZHJvcCBzaWduYWwuIFdlIHdhbnQgdGhlIGFjdGlvbnMgZm9yIGRyYWct
bGVhdmUgdG8gaGFwcGVuIGFmdGVyCiAgICAgLy8gdGhvc2UgZm9yIGRyYWctZHJvcCwgc28gc2No
ZWR1bGUgdGhlbSB0byBoYXBwZW4gYXN5bmNocm9ub3VzbHkgaGVyZS4KICAgICBIYW5kbGVEcmFn
TGF0ZXJEYXRhKiBkYXRhID0gbmV3IEhhbmRsZURyYWdMYXRlckRhdGE7Ci0gICAgZGF0YS0+Y29u
dGV4dCA9IGl0ZXJhdG9yLT5zZWNvbmQ7CisgICAgZGF0YS0+Y29udGV4dCA9IGl0ZXJhdG9yLT52
YWx1ZTsKICAgICBkYXRhLT5jb250ZXh0LT5leGl0ZWRDYWxsYmFjayA9IGV4aXRlZENhbGxiYWNr
OwogICAgIGRhdGEtPmdsdWUgPSB0aGlzOwogICAgIGdfdGltZW91dF9hZGQoMCwgcmVpbnRlcnBy
ZXRfY2FzdDxHU291cmNlRnVuYz4oaGFuZGxlRHJhZ0xlYXZlTGF0ZXJDYWxsYmFjayksIGRhdGEp
OwpAQCAtMTQwLDcgKzE0MCw3IEBAIFBhc3NPd25QdHI8RHJhZ0RhdGE+IEd0a0RyYWdBbmREcm9w
SGVscGVyOjpoYW5kbGVEcmFnTW90aW9uKEdka0RyYWdDb250ZXh0KiBjb250CiAgICAgICAgIG1f
ZHJvcHBpbmdDb250ZXh0cy5zZXQoY29udGV4dCwgZHJvcHBpbmdDb250ZXh0KTsKICAgICAgICAg
cXVlcnlOZXdEcm9wQ29udGV4dERhdGEoZHJvcHBpbmdDb250ZXh0LCBtX3dpZGdldCwgdGltZSk7
CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZHJvcHBpbmdDb250ZXh0ID0gaXRlcmF0b3ItPnNlY29u
ZDsKKyAgICAgICAgZHJvcHBpbmdDb250ZXh0ID0gaXRlcmF0b3ItPnZhbHVlOwogICAgICAgICBk
cm9wcGluZ0NvbnRleHQtPmxhc3RNb3Rpb25Qb3NpdGlvbiA9IHBvc2l0aW9uOwogICAgIH0KIApA
QCAtMTYyLDcgKzE2Miw3IEBAIFBhc3NPd25QdHI8RHJhZ0RhdGE+IEd0a0RyYWdBbmREcm9wSGVs
cGVyOjpoYW5kbGVEcmFnRGF0YVJlY2VpdmVkKEdka0RyYWdDb250ZXh0CiAgICAgaWYgKGl0ZXJh
dG9yID09IG1fZHJvcHBpbmdDb250ZXh0cy5lbmQoKSkKICAgICAgICAgcmV0dXJuIGFkb3B0UHRy
KHN0YXRpY19jYXN0PERyYWdEYXRhKj4oMCkpOwogCi0gICAgRHJvcHBpbmdDb250ZXh0KiBkcm9w
cGluZ0NvbnRleHQgPSBpdGVyYXRvci0+c2Vjb25kOworICAgIERyb3BwaW5nQ29udGV4dCogZHJv
cHBpbmdDb250ZXh0ID0gaXRlcmF0b3ItPnZhbHVlOwogICAgIGRyb3BwaW5nQ29udGV4dC0+cGVu
ZGluZ0RhdGFSZXF1ZXN0cy0tOwogICAgIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJv
YXJkSGVscGVyKCktPmZpbGxEYXRhT2JqZWN0RnJvbURyb3BEYXRhKHNlbGVjdGlvbkRhdGEsIGlu
Zm8sIGRyb3BwaW5nQ29udGV4dC0+ZGF0YU9iamVjdC5nZXQoKSk7CiAKQEAgLTE4NSw3ICsxODUs
NyBAQCBQYXNzT3duUHRyPERyYWdEYXRhPiBHdGtEcmFnQW5kRHJvcEhlbHBlcjo6aGFuZGxlRHJh
Z0Ryb3AoR2RrRHJhZ0NvbnRleHQqIGNvbnRleAogICAgIGlmIChpdGVyYXRvciA9PSBtX2Ryb3Bw
aW5nQ29udGV4dHMuZW5kKCkpCiAgICAgICAgIHJldHVybiBhZG9wdFB0cihzdGF0aWNfY2FzdDxE
cmFnRGF0YSo+KDApKTsKIAotICAgIERyb3BwaW5nQ29udGV4dCogZHJvcHBpbmdDb250ZXh0ID0g
aXRlcmF0b3ItPnNlY29uZDsKKyAgICBEcm9wcGluZ0NvbnRleHQqIGRyb3BwaW5nQ29udGV4dCA9
IGl0ZXJhdG9yLT52YWx1ZTsKICAgICBkcm9wcGluZ0NvbnRleHQtPmRyb3BIYXBwZW5lZCA9IHRy
dWU7CiAKICAgICByZXR1cm4gYWRvcHRQdHIobmV3IERyYWdEYXRhKGRyb3BwaW5nQ29udGV4dC0+
ZGF0YU9iamVjdC5nZXQoKSwgcG9zaXRpb24sIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrMy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvUmVuZGVyVGhlbWVHdGszLmNwcAppbmRleCA3NzQ5MzkxNTE3MTNkZjAxMTM0ZDZjZWE0
ZWQ5ZDcwNGI0ZGNmYzBiLi4wYTgzODI3YzdmZWJjYmU0MDU0OGZhZDU2MmI1NDExNzFlYzE2OWY2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsz
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGszLmNw
cApAQCAtNTYsNyArNTYsNyBAQCBzdGF0aWMgdm9pZCBndGtTdHlsZUNoYW5nZWRDYWxsYmFjayhH
T2JqZWN0KiwgR1BhcmFtU3BlYyopCiB7CiAgICAgU3R5bGVDb250ZXh0TWFwOjpjb25zdF9pdGVy
YXRvciBlbmQgPSBzdHlsZUNvbnRleHRNYXAoKS5lbmQoKTsKICAgICBmb3IgKFN0eWxlQ29udGV4
dE1hcDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHN0eWxlQ29udGV4dE1hcCgpLmJlZ2luKCk7IGl0
ZXIgIT0gZW5kOyArK2l0ZXIpCi0gICAgICAgIGd0a19zdHlsZV9jb250ZXh0X2ludmFsaWRhdGUo
aXRlci0+c2Vjb25kLmdldCgpKTsKKyAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfaW52YWxpZGF0
ZShpdGVyLT52YWx1ZS5nZXQoKSk7CiAKICAgICBQYWdlOjpzY2hlZHVsZUZvcmNlZFN0eWxlUmVj
YWxjRm9yQWxsUGFnZXMoKTsKIH0KQEAgLTc5LDcgKzc5LDcgQEAgc3RhdGljIEd0a1N0eWxlQ29u
dGV4dCogZ2V0U3R5bGVDb250ZXh0KEdUeXBlIHdpZGdldFR5cGUpCiB7CiAgICAgU3R5bGVDb250
ZXh0TWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gc3R5bGVDb250ZXh0TWFwKCkuYWRkKHdpZGdldFR5
cGUsIDApOwogICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJldHVybiByZXN1
bHQuaXRlcmF0b3ItPnNlY29uZC5nZXQoKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRv
ci0+dmFsdWUuZ2V0KCk7CiAKICAgICBHdGtXaWRnZXRQYXRoKiBwYXRoID0gZ3RrX3dpZGdldF9w
YXRoX25ldygpOwogICAgIGd0a193aWRnZXRfcGF0aF9hcHBlbmRfdHlwZShwYXRoLCB3aWRnZXRU
eXBlKTsKQEAgLTExMSw3ICsxMTEsNyBAQCBzdGF0aWMgR3RrU3R5bGVDb250ZXh0KiBnZXRTdHls
ZUNvbnRleHQoR1R5cGUgd2lkZ2V0VHlwZSkKICAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfcGF0
aChjb250ZXh0LmdldCgpLCBwYXRoKTsKICAgICBndGtfd2lkZ2V0X3BhdGhfZnJlZShwYXRoKTsK
IAotICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gY29udGV4dDsKKyAgICByZXN1bHQuaXRl
cmF0b3ItPnZhbHVlID0gY29udGV4dDsKICAgICByZXR1cm4gY29udGV4dC5nZXQoKTsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbGJhclRoZW1lTWFj
Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbGJhclRoZW1lTWFjLm1tCmlu
ZGV4IDk2YWExMmEyNjkxNDdmNzY4ZWUzZjY0NTFkZmViNTI3M2Y5NGVjNDkuLmZkOWI3MjRhNGQ5
YzRiNDcxMTRlZGY3ZGJiYzg4ZmM1ODUyZjE2ZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9TY3JvbGxiYXJUaGVtZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMubW0KQEAgLTg2LDggKzg2LDggQEAgc3RhdGlj
IFNjcm9sbGJhclBhaW50ZXJNYXAqIHNjcm9sbGJhck1hcCgpCiAgICAgICAgIHJldHVybjsKICAg
ICBTY3JvbGxiYXJQYWludGVyTWFwOjppdGVyYXRvciBlbmQgPSBzY3JvbGxiYXJNYXAoKS0+ZW5k
KCk7CiAgICAgZm9yIChTY3JvbGxiYXJQYWludGVyTWFwOjppdGVyYXRvciBpdCA9IHNjcm9sbGJh
ck1hcCgpLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaXQtPmZpcnN0LT5z
dHlsZUNoYW5nZWQoKTsKLSAgICAgICAgaXQtPmZpcnN0LT5pbnZhbGlkYXRlKCk7CisgICAgICAg
IGl0LT5rZXktPnN0eWxlQ2hhbmdlZCgpOworICAgICAgICBpdC0+a2V5LT5pbnZhbGlkYXRlKCk7
CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L0NyZWRlbnRpYWxTdG9yYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Q3JlZGVudGlhbFN0b3JhZ2UuY3BwCmluZGV4IGY2MjRkNGZjYjI5MmNjNDBjNWI2OWVlZGYzZTVj
ODc1MTUyZjAxZjkuLjhiNWFjNDc4YjIxMzUwNmNkOWNlYWNhOWJhNTg1MWJjZDI5M2E1YzkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbFN0b3Jh
Z2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbFN0
b3JhZ2UuY3BwCkBAIC0xNDcsNyArMTQ3LDcgQEAgYm9vbCBDcmVkZW50aWFsU3RvcmFnZTo6c2V0
KGNvbnN0IENyZWRlbnRpYWwmIGNyZWRlbnRpYWwsIGNvbnN0IEtVUkwmIHVybCkKICAgICBpZiAo
aXRlciA9PSBwYXRoVG9EZWZhdWx0UHJvdGVjdGlvblNwYWNlTWFwKCkuZW5kKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICBBU1NFUlQob3JpZ2luc1dpdGhDcmVkZW50aWFscygpLmNvbnRh
aW5zKG9yaWdpblN0cmluZ0Zyb21VUkwodXJsKSkpOwotICAgIHByb3RlY3Rpb25TcGFjZVRvQ3Jl
ZGVudGlhbE1hcCgpLnNldChpdGVyLT5zZWNvbmQsIGNyZWRlbnRpYWwpOworICAgIHByb3RlY3Rp
b25TcGFjZVRvQ3JlZGVudGlhbE1hcCgpLnNldChpdGVyLT52YWx1ZSwgY3JlZGVudGlhbCk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE1Niw3ICsxNTYsNyBAQCBDcmVkZW50aWFsIENyZWRl
bnRpYWxTdG9yYWdlOjpnZXQoY29uc3QgS1VSTCYgdXJsKQogICAgIFBhdGhUb0RlZmF1bHRQcm90
ZWN0aW9uU3BhY2VNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBmaW5kRGVmYXVsdFByb3RlY3Rpb25TcGFj
ZUZvclVSTCh1cmwpOwogICAgIGlmIChpdGVyID09IHBhdGhUb0RlZmF1bHRQcm90ZWN0aW9uU3Bh
Y2VNYXAoKS5lbmQoKSkKICAgICAgICAgcmV0dXJuIENyZWRlbnRpYWwoKTsKLSAgICByZXR1cm4g
cHJvdGVjdGlvblNwYWNlVG9DcmVkZW50aWFsTWFwKCkuZ2V0KGl0ZXItPnNlY29uZCk7CisgICAg
cmV0dXJuIHByb3RlY3Rpb25TcGFjZVRvQ3JlZGVudGlhbE1hcCgpLmdldChpdGVyLT52YWx1ZSk7
CiB9CiAKIHZvaWQgQ3JlZGVudGlhbFN0b3JhZ2U6OnNldFByaXZhdGVNb2RlKGJvb2wgbW9kZSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUEhlYWRlck1h
cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBIZWFkZXJNYXAuY3Bw
CmluZGV4IDUwMDkxZTE5ZDNhZjU2ZmY0YThkZjE3NWJmODk3ODcwMDc2MTQyODAuLmRlZmUxYWU4
NGJmMGFkZjA3Nzk0OTU1YjExYTVkYzczZWEwMjNlMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUEhlYWRlck1hcC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9IVFRQSGVhZGVyTWFwLmNwcApAQCAtNTIsNyArNTIsNyBAQCBQ
YXNzT3duUHRyPENyb3NzVGhyZWFkSFRUUEhlYWRlck1hcERhdGE+IEhUVFBIZWFkZXJNYXA6OmNv
cHlEYXRhKCkgY29uc3QKIAogICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZF9p
dCA9IGVuZCgpOwogICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBi
ZWdpbigpOyBpdCAhPSBlbmRfaXQ7ICsraXQpIHsKLSAgICAgICAgZGF0YS0+YXBwZW5kKG1ha2Vf
cGFpcihpdC0+Zmlyc3Quc3RyaW5nKCkuaXNvbGF0ZWRDb3B5KCksIGl0LT5zZWNvbmQuaXNvbGF0
ZWRDb3B5KCkpKTsKKyAgICAgICAgZGF0YS0+YXBwZW5kKG1ha2VfcGFpcihpdC0+a2V5LnN0cmlu
ZygpLmlzb2xhdGVkQ29weSgpLCBpdC0+dmFsdWUuaXNvbGF0ZWRDb3B5KCkpKTsKICAgICB9CiAg
ICAgcmV0dXJuIGRhdGEucmVsZWFzZSgpOwogfQpAQCAtMTAwLDcgKzEwMCw3IEBAIFN0cmluZyBI
VFRQSGVhZGVyTWFwOjpnZXQoY29uc3QgY2hhciogbmFtZSkgY29uc3QKICAgICBjb25zdF9pdGVy
YXRvciBpID0gZmluZDxjb25zdCBjaGFyKiwgQ2FzZUZvbGRpbmdDU3RyaW5nVHJhbnNsYXRvcj4o
bmFtZSk7CiAgICAgaWYgKGkgPT0gZW5kKCkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAg
ICByZXR1cm4gaS0+c2Vjb25kOworICAgIHJldHVybiBpLT52YWx1ZTsKIH0KICAgICAKIGJvb2wg
SFRUUEhlYWRlck1hcDo6Y29udGFpbnMoY29uc3QgY2hhciogbmFtZSkgY29uc3QKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvTUlNRUhlYWRlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL01JTUVIZWFkZXIuY3BwCmluZGV4IDVkNmI4NThm
NDZlNDM4M2ZjYjJmZWE2Mjg1OGFmNzUzMmQ0M2E1YWYuLmY0ZTNlYmY2NzRkZTZiZDFkMjRhOTU5
MGE0ODE4YmViNmZkOGRlNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvTUlNRUhlYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9NSU1FSGVhZGVyLmNwcApAQCAtODYsNyArODYsNyBAQCBQYXNzUmVmUHRyPE1JTUVIZWFkZXI+
IE1JTUVIZWFkZXI6OnBhcnNlSGVhZGVyKFNoYXJlZEJ1ZmZlckNodW5rUmVhZGVyKiBidWZmZXIp
CiAgICAgS2V5VmFsdWVNYXA6Oml0ZXJhdG9yIG1pbWVQYXJhbWV0ZXJzSXRlcmF0b3IgPSBrZXlW
YWx1ZVBhaXJzLmZpbmQoImNvbnRlbnQtdHlwZSIpOwogICAgIGlmIChtaW1lUGFyYW1ldGVyc0l0
ZXJhdG9yICE9IGtleVZhbHVlUGFpcnMuZW5kKCkpIHsKICAgICAgICAgLy8gRklYTUU6IG1ha2Ug
Q29udGVudFR5cGVQYXJzZXIgbW9yZSBmbGV4aWJsZSBzbyB3ZSBkb24ndCBoYXZlIHRvIHN5bnRo
ZXNpemUgdGhlICJDb250ZW50LVR5cGU6Ii4KLSAgICAgICAgQ29udGVudFR5cGVQYXJzZXIgY29u
dGVudFR5cGVQYXJzZXIobWFrZVN0cmluZygiQ29udGVudC1UeXBlOiIsIG1pbWVQYXJhbWV0ZXJz
SXRlcmF0b3ItPnNlY29uZCkpOworICAgICAgICBDb250ZW50VHlwZVBhcnNlciBjb250ZW50VHlw
ZVBhcnNlcihtYWtlU3RyaW5nKCJDb250ZW50LVR5cGU6IiwgbWltZVBhcmFtZXRlcnNJdGVyYXRv
ci0+dmFsdWUpKTsKICAgICAgICAgbWltZUhlYWRlci0+bV9jb250ZW50VHlwZSA9IGNvbnRlbnRU
eXBlUGFyc2VyLm1pbWVUeXBlKCk7CiAgICAgICAgIGlmICghbWltZUhlYWRlci0+aXNNdWx0aXBh
cnQoKSkKICAgICAgICAgICAgIG1pbWVIZWFkZXItPm1fY2hhcnNldCA9IGNvbnRlbnRUeXBlUGFy
c2VyLmNoYXJzZXQoKS5zdHJpcFdoaXRlU3BhY2UoKTsKQEAgLTEwNSwxMSArMTA1LDExIEBAIFBh
c3NSZWZQdHI8TUlNRUhlYWRlcj4gTUlNRUhlYWRlcjo6cGFyc2VIZWFkZXIoU2hhcmVkQnVmZmVy
Q2h1bmtSZWFkZXIqIGJ1ZmZlcikKIAogICAgIG1pbWVQYXJhbWV0ZXJzSXRlcmF0b3IgPSBrZXlW
YWx1ZVBhaXJzLmZpbmQoImNvbnRlbnQtdHJhbnNmZXItZW5jb2RpbmciKTsKICAgICBpZiAobWlt
ZVBhcmFtZXRlcnNJdGVyYXRvciAhPSBrZXlWYWx1ZVBhaXJzLmVuZCgpKQotICAgICAgICBtaW1l
SGVhZGVyLT5tX2NvbnRlbnRUcmFuc2ZlckVuY29kaW5nID0gcGFyc2VDb250ZW50VHJhbnNmZXJF
bmNvZGluZyhtaW1lUGFyYW1ldGVyc0l0ZXJhdG9yLT5zZWNvbmQpOworICAgICAgICBtaW1lSGVh
ZGVyLT5tX2NvbnRlbnRUcmFuc2ZlckVuY29kaW5nID0gcGFyc2VDb250ZW50VHJhbnNmZXJFbmNv
ZGluZyhtaW1lUGFyYW1ldGVyc0l0ZXJhdG9yLT52YWx1ZSk7CiAKICAgICBtaW1lUGFyYW1ldGVy
c0l0ZXJhdG9yID0ga2V5VmFsdWVQYWlycy5maW5kKCJjb250ZW50LWxvY2F0aW9uIik7CiAgICAg
aWYgKG1pbWVQYXJhbWV0ZXJzSXRlcmF0b3IgIT0ga2V5VmFsdWVQYWlycy5lbmQoKSkKLSAgICAg
ICAgbWltZUhlYWRlci0+bV9jb250ZW50TG9jYXRpb24gPSBtaW1lUGFyYW1ldGVyc0l0ZXJhdG9y
LT5zZWNvbmQ7CisgICAgICAgIG1pbWVIZWFkZXItPm1fY29udGVudExvY2F0aW9uID0gbWltZVBh
cmFtZXRlcnNJdGVyYXRvci0+dmFsdWU7CiAKICAgICByZXR1cm4gbWltZUhlYWRlci5yZWxlYXNl
KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291
cmNlSGFuZGxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VI
YW5kbGUuY3BwCmluZGV4IDdkZGM0N2U0ZWE3OTlhNDZkZWU2ZjMyY2ZkMDc4ZWY3NTE1NGYxZWUu
LjZkMTJmOWQ4OWIwMjQ3NzQ2YTU3ZTFiYmNhZmIyYzIxN2Q1OTEwMzUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwCkBAIC03MSw3
ICs3MSw3IEBAIFBhc3NSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IFJlc291cmNlSGFuZGxlOjpjcmVh
dGUoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvCiAgICAgQnVpbHRpblJlc291cmNlSGFu
ZGxlQ29uc3RydWN0b3JNYXA6Oml0ZXJhdG9yIHByb3RvY29sTWFwSXRlbSA9IGJ1aWx0aW5SZXNv
dXJjZUhhbmRsZUNvbnN0cnVjdG9yTWFwKCkuZmluZChyZXF1ZXN0LnVybCgpLnByb3RvY29sKCkp
OwogCiAgICAgaWYgKHByb3RvY29sTWFwSXRlbSAhPSBidWlsdGluUmVzb3VyY2VIYW5kbGVDb25z
dHJ1Y3Rvck1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcHJvdG9jb2xNYXBJdGVtLT5zZWNv
bmQocmVxdWVzdCwgY2xpZW50KTsKKyAgICAgICAgcmV0dXJuIHByb3RvY29sTWFwSXRlbS0+dmFs
dWUocmVxdWVzdCwgY2xpZW50KTsKIAogICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4gbmV3SGFu
ZGxlKGFkb3B0UmVmKG5ldyBSZXNvdXJjZUhhbmRsZShyZXF1ZXN0LCBjbGllbnQsIGRlZmVyc0xv
YWRpbmcsIHNob3VsZENvbnRlbnRTbmlmZikpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHAKaW5kZXggNjRlYmMx
OGM4YTc0NTBkZjY0YTYyMGE2NmQzZTM2ODMxN2UxYzk2OS4uZjZjMGUxM2U3OWNmMTQ3OWY4ZmVi
YTY1N2MwYWZiZDI1NjY3ZGJmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwCkBAIC0zNzQsNyArMzc0LDcgQEAg
dm9pZCBSZXNvdXJjZVJlcXVlc3RCYXNlOjphZGRIVFRQSGVhZGVyRmllbGQoY29uc3QgQXRvbWlj
U3RyaW5nJiBuYW1lLCBjb25zdCBTdHIKICAgICB1cGRhdGVSZXNvdXJjZVJlcXVlc3QoKTsKICAg
ICBIVFRQSGVhZGVyTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9odHRwSGVhZGVyRmllbGRzLmFk
ZChuYW1lLCB2YWx1ZSk7CiAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgcmVz
dWx0Lml0ZXJhdG9yLT5zZWNvbmQgKz0gIiwiICsgdmFsdWU7CisgICAgICAgIHJlc3VsdC5pdGVy
YXRvci0+dmFsdWUgKz0gIiwiICsgdmFsdWU7CiAKICAgICBpZiAodXJsKCkucHJvdG9jb2xJc0lu
SFRUUEZhbWlseSgpKQogICAgICAgICBtX3BsYXRmb3JtUmVxdWVzdFVwZGF0ZWQgPSBmYWxzZTsK
QEAgLTM4NCw3ICszODQsNyBAQCB2b2lkIFJlc291cmNlUmVxdWVzdEJhc2U6OmFkZEhUVFBIZWFk
ZXJGaWVsZHMoY29uc3QgSFRUUEhlYWRlck1hcCYgaGVhZGVyRmllbGRzKQogewogICAgIEhUVFBI
ZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGhlYWRlckZpZWxkcy5lbmQoKTsKICAgICBm
b3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaGVhZGVyRmllbGRzLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgYWRkSFRUUEhlYWRlckZpZWxkKGl0LT5maXJz
dCwgaXQtPnNlY29uZCk7CisgICAgICAgIGFkZEhUVFBIZWFkZXJGaWVsZChpdC0+a2V5LCBpdC0+
dmFsdWUpOwogfQogCiBib29sIGVxdWFsSWdub3JpbmdIZWFkZXJGaWVsZHMoY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0QmFzZSYgYSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0QmFzZSYgYikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJjZVJl
cXVlc3RCbGFja0JlcnJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxh
Y2tiZXJyeS9SZXNvdXJjZVJlcXVlc3RCbGFja0JlcnJ5LmNwcAppbmRleCA5ZjZmZmFiYTU1NmQy
MzAzZjZmYTlkMWFiOTRiYzZlYWM4ZGNhYWM2Li4wYzgxMjczOGQ1YzU1ZDg3ZDI1NzViM2Y3ODZi
MDA0ODZiOTE4NTI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2JsYWNrYmVycnkvUmVzb3VyY2VSZXF1ZXN0QmxhY2tCZXJyeS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlUmVxdWVzdEJsYWNrQmVy
cnkuY3BwCkBAIC0xNDAsNyArMTQwLDcgQEAgUmVzb3VyY2VSZXF1ZXN0OjpUYXJnZXRUeXBlIFJl
c291cmNlUmVxdWVzdDo6dGFyZ2V0VHlwZUZyb21NaW1lVHlwZShjb25zdCBTdHJpbmcKICAgICBp
ZiAoaXRlciA9PSBtYXAuZW5kKCkpCiAgICAgICAgIHJldHVybiBSZXNvdXJjZVJlcXVlc3Q6OlRh
cmdldElzVW5zcGVjaWZpZWQ7CiAKLSAgICByZXR1cm4gaXRlci0+c2Vjb25kOworICAgIHJldHVy
biBpdGVyLT52YWx1ZTsKIH0KIAogdm9pZCBSZXNvdXJjZVJlcXVlc3Q6OmluaXRpYWxpemVQbGF0
Zm9ybVJlcXVlc3QoTmV0d29ya1JlcXVlc3QmIHBsYXRmb3JtUmVxdWVzdCwgYm9vbCBjb29raWVz
RW5hYmxlZCwgYm9vbCBpc0luaXRpYWwsIGJvb2wgaXNSZWRpcmVjdCkgY29uc3QKQEAgLTE5OCw4
ICsxOTgsOCBAQCB2b2lkIFJlc291cmNlUmVxdWVzdDo6aW5pdGlhbGl6ZVBsYXRmb3JtUmVxdWVz
dChOZXR3b3JrUmVxdWVzdCYgcGxhdGZvcm1SZXF1ZXN0LAogICAgICAgICBib29sIGNvb2tpZUhl
YWRlck1heUJlRGlydHkgPSBpc1JlZGlyZWN0IHx8IGNhY2hlUG9saWN5KCkgPT0gV2ViQ29yZTo6
UmVsb2FkSWdub3JpbmdDYWNoZURhdGEgfHwgY2FjaGVQb2xpY3koKSA9PSBXZWJDb3JlOjpSZXR1
cm5DYWNoZURhdGFFbHNlTG9hZDsKIAogICAgICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gaHR0cEhlYWRlckZpZWxkcygpLmJlZ2luKCk7IGl0ICE9IGh0dHBIZWFk
ZXJGaWVsZHMoKS5lbmQoKTsgKytpdCkgewotICAgICAgICAgICAgU3RyaW5nIGtleSA9IGl0LT5m
aXJzdDsKLSAgICAgICAgICAgIFN0cmluZyB2YWx1ZSA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAg
ICBTdHJpbmcga2V5ID0gaXQtPmtleTsKKyAgICAgICAgICAgIFN0cmluZyB2YWx1ZSA9IGl0LT52
YWx1ZTsKICAgICAgICAgICAgIGlmICgha2V5LmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAg
IGlmIChlcXVhbElnbm9yaW5nQ2FzZShrZXksICJDb29raWUiKSkgewogICAgICAgICAgICAgICAg
ICAgICAvLyBXZSB3b24ndCB1c2UgdGhlIG9sZCBjb29raWVzIG9mIHJlc291cmNlUmVxdWVzdCBm
b3IgbmV3IGxvY2F0aW9uIGJlY2F1c2UgdGhlc2UgY29va2llcyBtYXkgYmUgY2hhbmdlZCBieSBy
ZWRpcmVjdGlvbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y2YvUmVzb3VyY2VIYW5kbGVDRk5ldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZOZXQuY3BwCmluZGV4IGY2ZDFmMzgyMTI2MmYxOTUwNDE1
NTlhMjU2YzAyYmQ2YmQ3ODI5ZTUuLjAxZThiOGFlNWMwZDFjNmE2YThmMDMzMDg1ZTkwZjAxMGJj
MWY3YzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVz
b3VyY2VIYW5kbGVDRk5ldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNwcApAQCAtNDI4LDcgKzQyOCw3IEBAIHN0YXRpYyBD
RlVSTFJlcXVlc3RSZWYgbWFrZUZpbmFsUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJl
cXVlc3QsIGJvb2wgc2hvCiAgICAgICAgIGlmICghc3NsUHJvcHMpCiAgICAgICAgICAgICBzc2xQ
cm9wcy5hZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVs
dCwgMCwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlW
YWx1ZUNhbGxCYWNrcykpOwogI2lmIFBMQVRGT1JNKFdJTikKLSAgICAgICAgd2tTZXRDbGllbnRD
ZXJ0aWZpY2F0ZUluU1NMUHJvcGVydGllcyhzc2xQcm9wcy5nZXQoKSwgKGNsaWVudENlcnQtPnNl
Y29uZCkuZ2V0KCkpOworICAgICAgICB3a1NldENsaWVudENlcnRpZmljYXRlSW5TU0xQcm9wZXJ0
aWVzKHNzbFByb3BzLmdldCgpLCAoY2xpZW50Q2VydC0+dmFsdWUpLmdldCgpKTsKICNlbmRpZgog
ICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9S
ZXNvdXJjZVJlcXVlc3RDRk5ldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2NmL1Jlc291cmNlUmVxdWVzdENGTmV0LmNwcAppbmRleCA1N2E2ZmIyYzhhNGMwOGY3OWZiZDRi
OWJjNTViODVhOTM0MjY3YTM3Li44Y2ZmODdjYTBkNThlYTJlNTIzZjM3MzBkNmI0YTc3MzBiMDZi
ZTRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291
cmNlUmVxdWVzdENGTmV0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2NmL1Jlc291cmNlUmVxdWVzdENGTmV0LmNwcApAQCAtMTIwLDggKzEyMCw4IEBAIHN0YXRpYyBp
bmxpbmUgdm9pZCBzZXRIZWFkZXJGaWVsZHMoQ0ZNdXRhYmxlVVJMUmVxdWVzdFJlZiByZXF1ZXN0
LCBjb25zdCBIVFRQSGVhCiAKICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQg
PSByZXF1ZXN0SGVhZGVycy5lbmQoKTsKICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gcmVxdWVzdEhlYWRlcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0g
ICAgICAgIENGU3RyaW5nUmVmIGtleSA9IGl0LT5maXJzdC5jcmVhdGVDRlN0cmluZygpOwotICAg
ICAgICBDRlN0cmluZ1JlZiB2YWx1ZSA9IGl0LT5zZWNvbmQuY3JlYXRlQ0ZTdHJpbmcoKTsKKyAg
ICAgICAgQ0ZTdHJpbmdSZWYga2V5ID0gaXQtPmtleS5jcmVhdGVDRlN0cmluZygpOworICAgICAg
ICBDRlN0cmluZ1JlZiB2YWx1ZSA9IGl0LT52YWx1ZS5jcmVhdGVDRlN0cmluZygpOwogICAgICAg
ICBDRlVSTFJlcXVlc3RTZXRIVFRQSGVhZGVyRmllbGRWYWx1ZShyZXF1ZXN0LCBrZXksIHZhbHVl
KTsKICAgICAgICAgQ0ZSZWxlYXNlKGtleSk7CiAgICAgICAgIENGUmVsZWFzZSh2YWx1ZSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VI
YW5kbGVNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9S
ZXNvdXJjZUhhbmRsZU1hbmFnZXIuY3BwCmluZGV4IGFmMDc1ZWY5ZTMyMTg4ZTc3MTQ5N2ViZjdj
NzRkYzFhYTE1ZTIxN2EuLjY1YmNjMTBhZDNkMjAwNWQ2ODlkNzNlOGRkNjc5ODhiOWM1Y2I1ZDUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJj
ZUhhbmRsZU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y3VybC9SZXNvdXJjZUhhbmRsZU1hbmFnZXIuY3BwCkBAIC03MDMsOCArNzAzLDggQEAgdm9pZCBS
ZXNvdXJjZUhhbmRsZU1hbmFnZXI6OmluaXRpYWxpemVIYW5kbGUoUmVzb3VyY2VIYW5kbGUqIGpv
YikKICAgICAgICAgSFRUUEhlYWRlck1hcCBjdXN0b21IZWFkZXJzID0gam9iLT5maXJzdFJlcXVl
c3QoKS5odHRwSGVhZGVyRmllbGRzKCk7CiAgICAgICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IGN1c3RvbUhlYWRlcnMuZW5kKCk7CiAgICAgICAgIGZvciAoSFRUUEhlYWRl
ck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjdXN0b21IZWFkZXJzLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewotICAgICAgICAgICAgU3RyaW5nIGtleSA9IGl0LT5maXJzdDsKLSAgICAgICAg
ICAgIFN0cmluZyB2YWx1ZSA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICBTdHJpbmcga2V5ID0g
aXQtPmtleTsKKyAgICAgICAgICAgIFN0cmluZyB2YWx1ZSA9IGl0LT52YWx1ZTsKICAgICAgICAg
ICAgIFN0cmluZyBoZWFkZXJTdHJpbmcoa2V5KTsKICAgICAgICAgICAgIGhlYWRlclN0cmluZy5h
cHBlbmQoIjogIik7CiAgICAgICAgICAgICBoZWFkZXJTdHJpbmcuYXBwZW5kKHZhbHVlKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlUmVx
dWVzdE1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNl
UmVxdWVzdE1hYy5tbQppbmRleCA5NmM0OTdkNTAzYjU0N2UzYjAxYTlhMjUyYTU4ZmMyZWVmM2Y5
NDQ0Li45MzIxNmNiNTVlODU3NzMxMzZmM2U4YzNhMDdjZTZmYjU1NmUwNmQyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZVJlcXVlc3RNYWMu
bW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VSZXF1
ZXN0TWFjLm1tCkBAIC0xNTUsNyArMTU1LDcgQEAgdm9pZCBSZXNvdXJjZVJlcXVlc3Q6OmRvVXBk
YXRlUGxhdGZvcm1SZXF1ZXN0KCkKICAgICAgICAgW25zUmVxdWVzdCBzZXRWYWx1ZTpuaWwgZm9y
SFRUUEhlYWRlckZpZWxkOltvbGRIZWFkZXJGaWVsZE5hbWVzIG9iamVjdEF0SW5kZXg6aSAtIDFd
XTsKICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBodHRwSGVhZGVyRmll
bGRzKCkuZW5kKCk7CiAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9
IGh0dHBIZWFkZXJGaWVsZHMoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIFtu
c1JlcXVlc3Qgc2V0VmFsdWU6aXQtPnNlY29uZCBmb3JIVFRQSGVhZGVyRmllbGQ6aXQtPmZpcnN0
XTsKKyAgICAgICAgW25zUmVxdWVzdCBzZXRWYWx1ZTppdC0+dmFsdWUgZm9ySFRUUEhlYWRlckZp
ZWxkOml0LT5rZXldOwogCiAgICAgLy8gVGhlIGJlbG93IGNoZWNrIGNhbiBiZSByZW1vdmVkIG9u
Y2Ugd2UgcmVxdWlyZSBhIHZlcnNpb24gb2YgRm91bmRhdGlvbiB3aXRoIC1bTlNNdXRhYmxlVVJM
UmVxdWVzdCBzZXRDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXk6XSBtZXRo
b2QuCiAgICAgc3RhdGljIGJvb2wgc3VwcG9ydHNDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0Zh
bGxiYWNrQXJyYXkgPSBbTlNNdXRhYmxlVVJMUmVxdWVzdCBpbnN0YW5jZXNSZXNwb25kVG9TZWxl
Y3RvcjpAc2VsZWN0b3Ioc2V0Q29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5
OildOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9xdC9SZXNv
dXJjZVJlcXVlc3RRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3F0L1Jl
c291cmNlUmVxdWVzdFF0LmNwcAppbmRleCBkYmI3Yjc0ZGQ1OWM0ZjRkMGYyZWNlY2ZkYmUwODEz
ZDI4Yjc0YTNlLi5lODRlNjc3YTVmNzJjNzFlODljNjAwZmQ3NzcwMGJiNjgyMjE0YzJjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3F0L1Jlc291cmNlUmVxdWVz
dFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3F0L1Jlc291cmNl
UmVxdWVzdFF0LmNwcApAQCAtNDksOCArNDksOCBAQCBRTmV0d29ya1JlcXVlc3QgUmVzb3VyY2VS
ZXF1ZXN0Ojp0b05ldHdvcmtSZXF1ZXN0KE5ldHdvcmtpbmdDb250ZXh0ICpjb250ZXh0KSBjbwog
ICAgIGNvbnN0IEhUVFBIZWFkZXJNYXAgJmhlYWRlcnMgPSBodHRwSGVhZGVyRmllbGRzKCk7CiAg
ICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGhlYWRlcnMuYmVnaW4o
KSwgZW5kID0gaGVhZGVycy5lbmQoKTsKICAgICAgICAgIGl0ICE9IGVuZDsgKytpdCkgewotICAg
ICAgICBRQnl0ZUFycmF5IG5hbWUgPSBRU3RyaW5nKGl0LT5maXJzdCkudG9MYXRpbjEoKTsKLSAg
ICAgICAgUUJ5dGVBcnJheSB2YWx1ZSA9IFFTdHJpbmcoaXQtPnNlY29uZCkudG9MYXRpbjEoKTsK
KyAgICAgICAgUUJ5dGVBcnJheSBuYW1lID0gUVN0cmluZyhpdC0+a2V5KS50b0xhdGluMSgpOwor
ICAgICAgICBRQnl0ZUFycmF5IHZhbHVlID0gUVN0cmluZyhpdC0+dmFsdWUpLnRvTGF0aW4xKCk7
CiAgICAgICAgIC8vIFFOZXR3b3JrUmVxdWVzdDo6c2V0UmF3SGVhZGVyKCkgd291bGQgcmVtb3Zl
IHRoZSBoZWFkZXIgaWYgdGhlIHZhbHVlIGlzIG51bGwKICAgICAgICAgLy8gTWFrZSBzdXJlIHRv
IHNldCBhbiBlbXB0eSBoZWFkZXIgaW5zdGVhZCBvZiBudWxsIGhlYWRlci4KICAgICAgICAgaWYg
KCF2YWx1ZS5pc051bGwoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAKaW5kZXggMzBhMmRlNDU1ZTQy
ZGJjM2JhYWZhYjM0OWE1NGQwOGM1YjljOWMyNS4uZGMzYjJlMmM1ZmVlMDg0MDY1OThhNGY5Zjkx
ZmE3NDZlZTY4NjBmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAKQEAgLTQ0OCw3ICs0NDgsNyBA
QCBzdGF0aWMgdm9pZCBzZW5kUmVxdWVzdENhbGxiYWNrKEdPYmplY3QqIHNvdXJjZSwgR0FzeW5j
UmVzdWx0KiByZXMsIGdwb2ludGVyIGRhdAogCiAgICAgICAgIGlmIChoYXNVbmlnbm9yZWRUTFNF
cnJvcnMoaGFuZGxlLmdldCgpKSkgewogICAgICAgICAgICAgQ2VydGlmaWNhdGVzTWFwOjppdGVy
YXRvciBpdGVyID0gY2xpZW50Q2VydGlmaWNhdGVzKCkuZmluZChoYW5kbGUtPmZpcnN0UmVxdWVz
dCgpLnVybCgpLmhvc3QoKS5sb3dlcigpKTsKLSAgICAgICAgICAgIGlmIChpdGVyID09IGNsaWVu
dENlcnRpZmljYXRlcygpLmVuZCgpIHx8ICFpdGVyLT5zZWNvbmQuY29udGFpbnMoZC0+bV9yZXNw
b25zZS5zb3VwTWVzc2FnZUNlcnRpZmljYXRlKCkpKSB7CisgICAgICAgICAgICBpZiAoaXRlciA9
PSBjbGllbnRDZXJ0aWZpY2F0ZXMoKS5lbmQoKSB8fCAhaXRlci0+dmFsdWUuY29udGFpbnMoZC0+
bV9yZXNwb25zZS5zb3VwTWVzc2FnZUNlcnRpZmljYXRlKCkpKSB7CiAgICAgICAgICAgICAgICAg
R093blB0cjxjaGFyPiB1cmkoc291cF91cmlfdG9fc3RyaW5nKHNvdXBfcmVxdWVzdF9nZXRfdXJp
KGQtPm1fc291cFJlcXVlc3QuZ2V0KCkpLCBGQUxTRSkpOwogICAgICAgICAgICAgICAgIGNsaWVu
dC0+ZGlkRmFpbChoYW5kbGUuZ2V0KCksIFJlc291cmNlRXJyb3IoZ19xdWFya190b19zdHJpbmco
U09VUF9IVFRQX0VSUk9SKSwgU09VUF9TVEFUVVNfU1NMX0ZBSUxFRCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVyaS5nZXQoKSwg
dW5hY2NlcHRhYmxlVExTQ2VydGlmaWNhdGUoKSwKQEAgLTgxOSw3ICs4MTksNyBAQCB2b2lkIFJl
c291cmNlSGFuZGxlOjpzZXRIb3N0QWxsb3dzQW55SFRUUFNDZXJ0aWZpY2F0ZShjb25zdCBTdHJp
bmcmIGhvc3QpCiAKIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnNldENsaWVudENlcnRpZmljYXRlKGNv
bnN0IFN0cmluZyYgaG9zdCwgR1Rsc0NlcnRpZmljYXRlKiBjZXJ0aWZpY2F0ZSkKIHsKLSAgICBj
bGllbnRDZXJ0aWZpY2F0ZXMoKS5hZGQoaG9zdC5sb3dlcigpLCBIb3N0VExTQ2VydGlmaWNhdGVT
ZXQoKSkuaXRlcmF0b3ItPnNlY29uZC5hZGQoY2VydGlmaWNhdGUpOworICAgIGNsaWVudENlcnRp
ZmljYXRlcygpLmFkZChob3N0Lmxvd2VyKCksIEhvc3RUTFNDZXJ0aWZpY2F0ZVNldCgpKS5pdGVy
YXRvci0+dmFsdWUuYWRkKGNlcnRpZmljYXRlKTsKIH0KIAogdm9pZCBSZXNvdXJjZUhhbmRsZTo6
c2V0SWdub3JlU1NMRXJyb3JzKGJvb2wgaWdub3JlU1NMRXJyb3JzKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVzdFNvdXAuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVzdFNv
dXAuY3BwCmluZGV4IGQ3MTI3YjRiNWI4ZTQ1OWE0Y2FlYzU1YTU1MjdiYmNmM2M4Mzc3ODUuLjU3
YWI0ZDY0N2IzYmZmYzI1YmE5MjM3NzhjNzFkNGY0YmVlMTVjYjkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0
U291cC5jcHAKQEAgLTQzLDcgKzQzLDcgQEAgdm9pZCBSZXNvdXJjZVJlcXVlc3Q6OnVwZGF0ZVNv
dXBNZXNzYWdlKFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSkgY29uc3QKICAgICBpZiAoIWhlYWRl
cnMuaXNFbXB0eSgpKSB7CiAgICAgICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IGhlYWRlcnMuZW5kKCk7CiAgICAgICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBoZWFkZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAg
IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChzb3VwSGVhZGVycywgaXQtPmZpcnN0LnN0cmlu
ZygpLnV0ZjgoKS5kYXRhKCksIGl0LT5zZWNvbmQudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAg
ICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQoc291cEhlYWRlcnMsIGl0LT5rZXkuc3RyaW5n
KCkudXRmOCgpLmRhdGEoKSwgaXQtPnZhbHVlLnV0ZjgoKS5kYXRhKCkpOwogICAgIH0KIAogICAg
IFN0cmluZyBmaXJzdFBhcnR5U3RyaW5nID0gZmlyc3RQYXJ0eUZvckNvb2tpZXMoKS5zdHJpbmco
KTsKQEAgLTY2LDcgKzY2LDcgQEAgU291cE1lc3NhZ2UqIFJlc291cmNlUmVxdWVzdDo6dG9Tb3Vw
TWVzc2FnZSgpIGNvbnN0CiAgICAgaWYgKCFoZWFkZXJzLmlzRW1wdHkoKSkgewogICAgICAgICBI
VFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBoZWFkZXJzLmVuZCgpOwogICAgICAg
ICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaGVhZGVycy5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBl
bmQoc291cEhlYWRlcnMsIGl0LT5maXJzdC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBpdC0+c2Vj
b25kLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBw
ZW5kKHNvdXBIZWFkZXJzLCBpdC0+a2V5LnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGl0LT52YWx1
ZS51dGY4KCkuZGF0YSgpKTsKICAgICB9CiAKICAgICBTdHJpbmcgZmlyc3RQYXJ0eVN0cmluZyA9
IGZpcnN0UGFydHlGb3JDb29raWVzKCkuc3RyaW5nKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXNwb25zZVNvdXAuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVzcG9uc2VTb3VwLmNw
cAppbmRleCBkZGFhODkzYjYzYTlmM2YxMDM1M2YwZGVkNWVmNjNiYTRlMGZhY2VhLi43MzlkNDRi
Mjg1ZDNkOWQyOTFlOGQ1YjI3YWFiZTdlNjlkZTY1YTFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXNwb25zZVNvdXAuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlc3BvbnNlU291
cC5jcHAKQEAgLTQ2LDcgKzQ2LDcgQEAgU291cE1lc3NhZ2UqIFJlc291cmNlUmVzcG9uc2U6OnRv
U291cE1lc3NhZ2UoKSBjb25zdAogICAgIGlmICghaGVhZGVycy5pc0VtcHR5KCkpIHsKICAgICAg
ICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaGVhZGVycy5lbmQoKTsKICAg
ICAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGhlYWRlcnMuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNf
YXBwZW5kKHNvdXBIZWFkZXJzLCBpdC0+Zmlyc3Quc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgaXQt
PnNlY29uZC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJz
X2FwcGVuZChzb3VwSGVhZGVycywgaXQtPmtleS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBpdC0+
dmFsdWUudXRmOCgpLmRhdGEoKSk7CiAgICAgfQogCiAgICAgc291cF9tZXNzYWdlX3NldF9mbGFn
cyhzb3VwTWVzc2FnZSwgbV9zb3VwRmxhZ3MpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay93aW4vUmVzb3VyY2VIYW5kbGVXaW4uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay93aW4vUmVzb3VyY2VIYW5kbGVXaW4uY3BwCmluZGV4IDAyMTJk
MGNkYTk4YzlmMTM3OTI4ZTYxMmZkZjk1MDM2NWEwMWQwZDYuLmYyNTA1Mjc3NWIwZGVkZmUyMWM3
NTVkM2Y4Mzk5ODUzZTdhMGYzOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvd2luL1Jlc291cmNlSGFuZGxlV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL3dpbi9SZXNvdXJjZUhhbmRsZVdpbi5jcHAKQEAgLTMyMywxNSArMzIz
LDE1IEBAIGJvb2wgUmVzb3VyY2VIYW5kbGU6OnN0YXJ0KE5ldHdvcmtpbmdDb250ZXh0KiBjb250
ZXh0KQogICAgIGNvbnN0IEhUVFBIZWFkZXJNYXAmIGh0dHBIZWFkZXJGaWVsZHMgPSBmaXJzdFJl
cXVlc3QoKS5odHRwSGVhZGVyRmllbGRzKCk7CiAKICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gaHR0cEhlYWRlckZpZWxkcy5iZWdpbigpOyBpdCAhPSBodHRwSGVh
ZGVyRmllbGRzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShp
dC0+Zmlyc3QsICJBY2NlcHQiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShpdC0+Zmlyc3QsICJSZWZl
cmVyIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UoaXQtPmZpcnN0LCAiVXNlci1BZ2VudCIpKQorICAg
ICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoaXQtPmtleSwgIkFjY2VwdCIpIHx8IGVxdWFsSWdu
b3JpbmdDYXNlKGl0LT5rZXksICJSZWZlcmVyIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UoaXQtPmtl
eSwgIlVzZXItQWdlbnQiKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIGlmICgh
aHR0cEhlYWRlcnMuaXNFbXB0eSgpKQogICAgICAgICAgICAgaHR0cEhlYWRlcnMuYXBwZW5kKCdc
bicpOwogCi0gICAgICAgIGh0dHBIZWFkZXJzLmFwcGVuZChpdC0+Zmlyc3QuY2hhcmFjdGVycygp
LCBpdC0+Zmlyc3QubGVuZ3RoKCkpOworICAgICAgICBodHRwSGVhZGVycy5hcHBlbmQoaXQtPmtl
eS5jaGFyYWN0ZXJzKCksIGl0LT5rZXkubGVuZ3RoKCkpOwogICAgICAgICBodHRwSGVhZGVycy5h
cHBlbmQoJzonKTsKLSAgICAgICAgaHR0cEhlYWRlcnMuYXBwZW5kKGl0LT5zZWNvbmQuY2hhcmFj
dGVycygpLCBpdC0+c2Vjb25kLmxlbmd0aCgpKTsKKyAgICAgICAgaHR0cEhlYWRlcnMuYXBwZW5k
KGl0LT52YWx1ZS5jaGFyYWN0ZXJzKCksIGl0LT52YWx1ZS5sZW5ndGgoKSk7CiAgICAgfQogCiAg
ICAgSU5URVJORVRfQlVGRkVSU1cgaW50ZXJuZXRCdWZmZXJzOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vcXQvUnVuTG9vcFF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3F0L1J1bkxvb3BRdC5jcHAKaW5kZXggMmE4N2UyZmM4ZjY2Nzc3NjlmNzMxNDNlNTcxZTA5
YzVhNTRjNmViYS4uNTAxYmQ1YzEyM2IwZjAzY2U5YTBjZjkwZTE3MjY5MWY1MDZkOWExYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUnVuTG9vcFF0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SdW5Mb29wUXQuY3BwCkBAIC0xMDksNyArMTA5LDcg
QEAgdm9pZCBSdW5Mb29wOjpUaW1lckJhc2U6OnRpbWVyRmlyZWQoUnVuTG9vcCogcnVuTG9vcCwg
aW50IElEKQogewogICAgIFRpbWVyTWFwOjppdGVyYXRvciBpdCA9IHJ1bkxvb3AtPm1fYWN0aXZl
VGltZXJzLmZpbmQoSUQpOwogICAgIEFTU0VSVChpdCAhPSBydW5Mb29wLT5tX2FjdGl2ZVRpbWVy
cy5lbmQoKSk7Ci0gICAgVGltZXJCYXNlKiB0aW1lciA9IGl0LT5zZWNvbmQ7CisgICAgVGltZXJC
YXNlKiB0aW1lciA9IGl0LT52YWx1ZTsKIAogICAgIGlmICghdGltZXItPm1faXNSZXBlYXRpbmcp
IHsKICAgICAgICAgLy8gU3RvcCB0aGUgdGltZXIgKGNhbGxpbmcgc3RvcCB3b3VsZCBuZWVkIGFu
b3RoZXIgaGFzaCB0YWJsZSBsb29rdXApLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9Mb2NhbGVUb1NjcmlwdE1hcHBpbmdEZWZhdWx0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvTG9jYWxlVG9TY3JpcHRNYXBwaW5nRGVmYXVsdC5jcHAKaW5kZXgg
OTA5NDczODQ5Njk2YjRjMjkyZDZiOWFjMjg1YmM3ZDlmNGFjMjg0MS4uNTgyNjQ5MDdkNWU0MGEw
MDliNDBmZDY5OTE4MGYzM2VmN2Q1MTdjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9Mb2NhbGVUb1NjcmlwdE1hcHBpbmdEZWZhdWx0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0xvY2FsZVRvU2NyaXB0TWFwcGluZ0RlZmF1bHQuY3BwCkBA
IC0xNjYsNyArMTY2LDcgQEAgVVNjcmlwdENvZGUgc2NyaXB0TmFtZVRvQ29kZShjb25zdCBTdHJp
bmcmIHNjcmlwdE5hbWUpCiAKICAgICBIYXNoTWFwPFN0cmluZywgVVNjcmlwdENvZGU+OjppdGVy
YXRvciBpdCA9IHNjcmlwdE5hbWVDb2RlTWFwLmZpbmQoc2NyaXB0TmFtZS5sb3dlcigpKTsKICAg
ICBpZiAoaXQgIT0gc2NyaXB0TmFtZUNvZGVNYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdC0+
c2Vjb25kOworICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwogICAgIHJldHVybiBVU0NSSVBUX0lO
VkFMSURfQ09ERTsKIH0KIApAQCAtMzg5LDcgKzM4OSw3IEBAIFVTY3JpcHRDb2RlIGxvY2FsZVRv
U2NyaXB0Q29kZUZvckZvbnRTZWxlY3Rpb24oY29uc3QgU3RyaW5nJiBsb2NhbGUpCiAgICAgd2hp
bGUgKCFjYW5vbmljYWxMb2NhbGUuaXNFbXB0eSgpKSB7CiAgICAgICAgIEhhc2hNYXA8U3RyaW5n
LCBVU2NyaXB0Q29kZT46Oml0ZXJhdG9yIGl0ID0gbG9jYWxlU2NyaXB0TWFwLmZpbmQoY2Fub25p
Y2FsTG9jYWxlKTsKICAgICAgICAgaWYgKGl0ICE9IGxvY2FsZVNjcmlwdE1hcC5lbmQoKSkKLSAg
ICAgICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgICAgICAgICAgcmV0dXJuIGl0LT52YWx1
ZTsKICAgICAgICAgc2l6ZV90IHBvcyA9IGNhbm9uaWNhbExvY2FsZS5yZXZlcnNlRmluZCgnXycp
OwogICAgICAgICBpZiAocG9zID09IG5vdEZvdW5kKQogICAgICAgICAgICAgYnJlYWs7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnku
Y3BwCmluZGV4IDQ3NjNiZjgzNGMwZTAxZTYxODY3N2I4YTExNDE0ODAzNjE1MjlhNGUuLmQyMjky
ZTRlZDVmMWYwMmQ0NDQxM2M3OWY4MzU5YWFjY2M4MDY3MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnkuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnkuY3BwCkBAIC0xOTYs
OCArMTk2LDggQEAgc3RhdGljIHZvaWQgcHJ1bmVCbGFja2xpc3RlZENvZGVjcygpCiAgICAgICAg
IFRleHRFbmNvZGluZ05hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdGV4dEVuY29kaW5nTmFt
ZU1hcC0+YmVnaW4oKTsKICAgICAgICAgVGV4dEVuY29kaW5nTmFtZU1hcDo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gdGV4dEVuY29kaW5nTmFtZU1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAoOyBpdCAh
PSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGlmIChpdC0+c2Vjb25kID09IGF0b21pY05hbWUp
Ci0gICAgICAgICAgICAgICAgbmFtZXMuYXBwZW5kKGl0LT5maXJzdCk7CisgICAgICAgICAgICBp
ZiAoaXQtPnZhbHVlID09IGF0b21pY05hbWUpCisgICAgICAgICAgICAgICAgbmFtZXMuYXBwZW5k
KGl0LT5rZXkpOwogICAgICAgICB9CiAKICAgICAgICAgc2l6ZV90IGxlbmd0aCA9IG5hbWVzLnNp
emUoKTsKQEAgLTM3OSw3ICszNzksNyBAQCB2b2lkIGR1bXBUZXh0RW5jb2RpbmdOYW1lTWFwKCkK
ICAgICBUZXh0RW5jb2RpbmdOYW1lTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHRleHRFbmNvZGlu
Z05hbWVNYXAtPmJlZ2luKCk7CiAgICAgVGV4dEVuY29kaW5nTmFtZU1hcDo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gdGV4dEVuY29kaW5nTmFtZU1hcC0+ZW5kKCk7CiAgICAgZm9yICg7IGl0ICE9IGVu
ZDsgKytpdCkKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICInJXMnID0+ICclcydcbiIsIGl0LT5m
aXJzdCwgaXQtPnNlY29uZCk7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJyVzJyA9PiAnJXMn
XG4iLCBpdC0+a2V5LCBpdC0+dmFsdWUpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvdHJhbnNjb2Rlci9Gb250VHJhbnNjb2Rlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3RyYW5zY29kZXIvRm9udFRyYW5zY29kZXIuY3Bw
CmluZGV4IDRlMDdmNTBmYmRiMGM1N2MzZWVjYTZmOGJlNzFmNzUwNWRiNTNiYzAuLjQ4NDIyOGNh
YThlNzYwNzFiMzdhOWQyMGE5OTJkNTBhMWQ0MWY0MGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvdHJhbnNjb2Rlci9Gb250VHJhbnNjb2Rlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC90cmFuc2NvZGVyL0ZvbnRUcmFuc2NvZGVyLmNwcApA
QCAtNjYsNyArNjYsNyBAQCBGb250VHJhbnNjb2Rlcjo6Q29udmVydGVyVHlwZSBGb250VHJhbnNj
b2Rlcjo6Y29udmVydGVyVHlwZShjb25zdCBGb250RGVzY3JpcHRpbwogICAgIGlmICghZm9udEZh
bWlseS5pc051bGwoKSkgewogICAgICAgICBIYXNoTWFwPEF0b21pY1N0cmluZywgQ29udmVydGVy
VHlwZT46OmNvbnN0X2l0ZXJhdG9yIGZvdW5kID0gbV9jb252ZXJ0ZXJUeXBlcy5maW5kKGZvbnRG
YW1pbHkpOwogICAgICAgICBpZiAoZm91bmQgIT0gbV9jb252ZXJ0ZXJUeXBlcy5lbmQoKSkKLSAg
ICAgICAgICAgIHJldHVybiBmb3VuZC0+c2Vjb25kOworICAgICAgICAgICAgcmV0dXJuIGZvdW5k
LT52YWx1ZTsKICAgICB9CiAKICAgICAvLyBJRSdzIGRlZmF1bHQgZm9udHMgZm9yIEphcGFuZXNl
IGVuY29kaW5ncyBjaGFuZ2UgYmFja3NsYXNoZXMgaW50byB5ZW4gc2lnbnMuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3dpbi9UZXh0Q29kZWNXaW4uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC93aW4vVGV4dENvZGVjV2luLmNwcAppbmRleCBlMTky
MzdkNjhkOTBkZjJmNTAzYWY0MjM5YWEzNjdiNmYxNGYyNGI1Li44NzlhZjc2OTc3MmZmNTE1ZjM1
NGFhOGIxOTcxNjk5YjYyYWJhNjYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L3dpbi9UZXh0Q29kZWNXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvd2luL1RleHRDb2RlY1dpbi5jcHAKQEAgLTEwNSwxNyArMTA1LDE3IEBAIExhbmd1YWdl
TWFuYWdlcjo6TGFuZ3VhZ2VNYW5hZ2VyKCkKICAgICAgICAgICAgIGkgPSBjb2RlUGFnZUNoYXJz
ZXRzKCkuc2V0KGNwSW5mby51aUNvZGVQYWdlLCBuYW1lKS5pdGVyYXRvcjsKICAgICAgICAgfQog
ICAgICAgICBpZiAoaSAhPSBjb2RlUGFnZUNoYXJzZXRzKCkuZW5kKCkpIHsKLSAgICAgICAgICAg
IEhhc2hNYXA8U3RyaW5nLCBDaGFyc2V0SW5mbz46Oml0ZXJhdG9yIGogPSBrbm93bkNoYXJzZXRz
KCkuZmluZChTdHJpbmcoaS0+c2Vjb25kLmRhdGEoKSwgaS0+c2Vjb25kLmxlbmd0aCgpKSk7Cisg
ICAgICAgICAgICBIYXNoTWFwPFN0cmluZywgQ2hhcnNldEluZm8+OjppdGVyYXRvciBqID0ga25v
d25DaGFyc2V0cygpLmZpbmQoU3RyaW5nKGktPnZhbHVlLmRhdGEoKSwgaS0+dmFsdWUubGVuZ3Ro
KCkpKTsKICAgICAgICAgICAgIEFTU0VSVChqICE9IGtub3duQ2hhcnNldHMoKS5lbmQoKSk7Ci0g
ICAgICAgICAgICBDaGFyc2V0SW5mbyYgaW5mbyA9IGotPnNlY29uZDsKLSAgICAgICAgICAgIGlu
Zm8ubV9uYW1lID0gaS0+c2Vjb25kLmRhdGEoKTsKKyAgICAgICAgICAgIENoYXJzZXRJbmZvJiBp
bmZvID0gai0+dmFsdWU7CisgICAgICAgICAgICBpbmZvLm1fbmFtZSA9IGktPnZhbHVlLmRhdGEo
KTsKICAgICAgICAgICAgIGluZm8ubV9mcmllbmRseU5hbWUgPSBjcEluZm8ud3N6RGVzY3JpcHRp
b247CiAgICAgICAgICAgICBpbmZvLm1fYWxpYXNlcy5hcHBlbmQobmFtZSk7CiAgICAgICAgICAg
ICBpbmZvLm1fYWxpYXNlcy5hcHBlbmQoU3RyaW5nKGNwSW5mby53c3pIZWFkZXJDaGFyc2V0KS5s
YXRpbjEoKSk7CiAgICAgICAgICAgICBpbmZvLm1fYWxpYXNlcy5hcHBlbmQoU3RyaW5nKGNwSW5m
by53c3pCb2R5Q2hhcnNldCkubGF0aW4xKCkpOwogICAgICAgICAgICAgU3RyaW5nIGNwTmFtZSA9
ICJjcCIgKyBTdHJpbmc6Om51bWJlcihjcEluZm8udWlDb2RlUGFnZSk7CiAgICAgICAgICAgICBp
bmZvLm1fYWxpYXNlcy5hcHBlbmQoY3BOYW1lLmxhdGluMSgpKTsKLSAgICAgICAgICAgIHN1cHBv
cnRlZENoYXJzZXRzKCkuYWRkKGktPnNlY29uZC5kYXRhKCkpOworICAgICAgICAgICAgc3VwcG9y
dGVkQ2hhcnNldHMoKS5hZGQoaS0+dmFsdWUuZGF0YSgpKTsKICAgICAgICAgfQogICAgIH0KIH0K
QEAgLTEyNiw3ICsxMjYsNyBAQCBzdGF0aWMgVUlOVCBnZXRDb2RlUGFnZShjb25zdCBjaGFyKiBu
YW1lKQogICAgIC8vIHNheWluZyAiPT0iIGlzIG5vdCBmb3VuZCBmb3IgY29uc3RfaXRlcmF0b3Ig
YW5kIGl0ZXJhdG9yCiAgICAgY29uc3QgSGFzaE1hcDxTdHJpbmcsIENoYXJzZXRJbmZvPiYgY2hh
cnNldHMgPSBrbm93bkNoYXJzZXRzKCk7CiAgICAgSGFzaE1hcDxTdHJpbmcsIENoYXJzZXRJbmZv
Pjo6Y29uc3RfaXRlcmF0b3IgaSA9IGNoYXJzZXRzLmZpbmQobmFtZSk7Ci0gICAgcmV0dXJuIGkg
PT0gY2hhcnNldHMuZW5kKCkgPyBDUF9BQ1AgOiBpLT5zZWNvbmQubV9jb2RlUGFnZTsKKyAgICBy
ZXR1cm4gaSA9PSBjaGFyc2V0cy5lbmQoKSA/IENQX0FDUCA6IGktPnZhbHVlLm1fY29kZVBhZ2U7
CiB9CiAKIHN0YXRpYyBQYXNzT3duUHRyPFRleHRDb2RlYz4gbmV3VGV4dENvZGVjV2luKGNvbnN0
IFRleHRFbmNvZGluZyYgZW5jb2RpbmcsIGNvbnN0IHZvaWQqKQpAQCAtMTQ5LDkgKzE0OSw5IEBA
IHZvaWQgVGV4dENvZGVjV2luOjpyZWdpc3RlckV4dGVuZGVkRW5jb2RpbmdOYW1lcyhFbmNvZGlu
Z05hbWVSZWdpc3RyYXIgcmVnaXN0cmFyCiAgICAgZm9yIChDaGFyc2V0U2V0OjppdGVyYXRvciBp
ID0gc3VwcG9ydGVkQ2hhcnNldHMoKS5iZWdpbigpOyBpICE9IHN1cHBvcnRlZENoYXJzZXRzKCku
ZW5kKCk7ICsraSkgewogICAgICAgICBIYXNoTWFwPFN0cmluZywgQ2hhcnNldEluZm8+OjppdGVy
YXRvciBqID0ga25vd25DaGFyc2V0cygpLmZpbmQoKmkpOwogICAgICAgICBpZiAoaiAhPSBrbm93
bkNoYXJzZXRzKCkuZW5kKCkpIHsKLSAgICAgICAgICAgIHJlZ2lzdHJhcihqLT5zZWNvbmQubV9u
YW1lLmRhdGEoKSwgai0+c2Vjb25kLm1fbmFtZS5kYXRhKCkpOwotICAgICAgICAgICAgZm9yIChW
ZWN0b3I8Q1N0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGFsaWFzID0gai0+c2Vjb25kLm1fYWxpYXNl
cy5iZWdpbigpOyBhbGlhcyAhPSBqLT5zZWNvbmQubV9hbGlhc2VzLmVuZCgpOyArK2FsaWFzKQot
ICAgICAgICAgICAgICAgIHJlZ2lzdHJhcihhbGlhcy0+ZGF0YSgpLCBqLT5zZWNvbmQubV9uYW1l
LmRhdGEoKSk7CisgICAgICAgICAgICByZWdpc3RyYXIoai0+dmFsdWUubV9uYW1lLmRhdGEoKSwg
ai0+dmFsdWUubV9uYW1lLmRhdGEoKSk7CisgICAgICAgICAgICBmb3IgKFZlY3RvcjxDU3RyaW5n
Pjo6Y29uc3RfaXRlcmF0b3IgYWxpYXMgPSBqLT52YWx1ZS5tX2FsaWFzZXMuYmVnaW4oKTsgYWxp
YXMgIT0gai0+dmFsdWUubV9hbGlhc2VzLmVuZCgpOyArK2FsaWFzKQorICAgICAgICAgICAgICAg
IHJlZ2lzdHJhcihhbGlhcy0+ZGF0YSgpLCBqLT52YWx1ZS5tX25hbWUuZGF0YSgpKTsKICAgICAg
ICAgfQogICAgIH0KIH0KQEAgLTE2Miw3ICsxNjIsNyBAQCB2b2lkIFRleHRDb2RlY1dpbjo6cmVn
aXN0ZXJFeHRlbmRlZENvZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIgcmVnaXN0cmFyKQogICAgIGZv
ciAoQ2hhcnNldFNldDo6aXRlcmF0b3IgaSA9IHN1cHBvcnRlZENoYXJzZXRzKCkuYmVnaW4oKTsg
aSAhPSBzdXBwb3J0ZWRDaGFyc2V0cygpLmVuZCgpOyArK2kpIHsKICAgICAgICAgSGFzaE1hcDxT
dHJpbmcsIENoYXJzZXRJbmZvPjo6aXRlcmF0b3IgaiA9IGtub3duQ2hhcnNldHMoKS5maW5kKCpp
KTsKICAgICAgICAgaWYgKGogIT0ga25vd25DaGFyc2V0cygpLmVuZCgpKQotICAgICAgICAgICAg
cmVnaXN0cmFyKGotPnNlY29uZC5tX25hbWUuZGF0YSgpLCBuZXdUZXh0Q29kZWNXaW4sIDApOwor
ICAgICAgICAgICAgcmVnaXN0cmFyKGotPnZhbHVlLm1fbmFtZS5kYXRhKCksIG5ld1RleHRDb2Rl
Y1dpbiwgMCk7CiAgICAgfQogfQogCkBAIC0zMDEsNyArMzAxLDcgQEAgdm9pZCBUZXh0Q29kZWNX
aW46OmVudW1lcmF0ZVN1cHBvcnRlZEVuY29kaW5ncyhFbmNvZGluZ1JlY2VpdmVyJiByZWNlaXZl
cikKICAgICBsYW5ndWFnZU1hbmFnZXIoKTsKICAgICBmb3IgKENoYXJzZXRTZXQ6Oml0ZXJhdG9y
IGkgPSBzdXBwb3J0ZWRDaGFyc2V0cygpLmJlZ2luKCk7IGkgIT0gc3VwcG9ydGVkQ2hhcnNldHMo
KS5lbmQoKTsgKytpKSB7CiAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBDaGFyc2V0SW5mbz46Oml0
ZXJhdG9yIGogPSBrbm93bkNoYXJzZXRzKCkuZmluZCgqaSk7Ci0gICAgICAgIGlmIChqICE9IGtu
b3duQ2hhcnNldHMoKS5lbmQoKSAmJiAhcmVjZWl2ZXIucmVjZWl2ZShqLT5zZWNvbmQubV9uYW1l
LmRhdGEoKSwgai0+c2Vjb25kLm1fZnJpZW5kbHlOYW1lLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1p
bmF0aW9uKCksIGotPnNlY29uZC5tX2NvZGVQYWdlKSkKKyAgICAgICAgaWYgKGogIT0ga25vd25D
aGFyc2V0cygpLmVuZCgpICYmICFyZWNlaXZlci5yZWNlaXZlKGotPnZhbHVlLm1fbmFtZS5kYXRh
KCksIGotPnZhbHVlLm1fZnJpZW5kbHlOYW1lLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9u
KCksIGotPnZhbHVlLm1fY29kZVBhZ2UpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFV0aWxpdGll
c1dpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xpcGJvYXJkVXRpbGl0aWVz
V2luLmNwcAppbmRleCA2MWUzNjIxYjUzZGM0OTU4NjUxM2FiNzQxNDRkZjVlNjJiYTFjMTYwLi43
NWZmOWRlN2JlMTAyM2Y3ZTEyZmI5OWRkMTZjZTc0NmZiOGVkZjI0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xpcGJvYXJkVXRpbGl0aWVzV2luLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xpcGJvYXJkVXRpbGl0aWVzV2luLmNwcApAQCAt
NzYsNyArNzYsNyBAQCBzdGF0aWMgYm9vbCBnZXREYXRhTWFwSXRlbShjb25zdCBEcmFnRGF0YU1h
cCogZGF0YU9iamVjdCwgRk9STUFURVRDKiBmb3JtYXQsIFN0cgogICAgIERyYWdEYXRhTWFwOjpj
b25zdF9pdGVyYXRvciBmb3VuZCA9IGRhdGFPYmplY3QtPmZpbmQoZm9ybWF0LT5jZkZvcm1hdCk7
CiAgICAgaWYgKGZvdW5kID09IGRhdGFPYmplY3QtPmVuZCgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgaXRlbSA9IGZvdW5kLT5zZWNvbmRbMF07CisgICAgaXRlbSA9IGZvdW5kLT52YWx1
ZVswXTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtODI2LDcgKzgyNiw3IEBAIHZvaWQgZ2V0
Q2xpcGJvYXJkRGF0YShJRGF0YU9iamVjdCogZGF0YU9iamVjdCwgRk9STUFURVRDKiBmb3JtYXQs
IFZlY3RvcjxTdHJpbmc+CiAgICAgQ2xpcGJvYXJkRm9ybWF0TWFwOjpjb25zdF9pdGVyYXRvciBm
b3VuZCA9IGZvcm1hdE1hcC5maW5kKGZvcm1hdC0+Y2ZGb3JtYXQpOwogICAgIGlmIChmb3VuZCA9
PSBmb3JtYXRNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBmb3VuZC0+c2Vjb25kLT5n
ZXRTdHJpbmcoZGF0YU9iamVjdCwgZm91bmQtPnNlY29uZC0+Zm9ybWF0LCBkYXRhU3RyaW5ncyk7
CisgICAgZm91bmQtPnZhbHVlLT5nZXRTdHJpbmcoZGF0YU9iamVjdCwgZm91bmQtPnZhbHVlLT5m
b3JtYXQsIGRhdGFTdHJpbmdzKTsKIH0KIAogdm9pZCBzZXRDbGlwYm9hcmREYXRhKElEYXRhT2Jq
ZWN0KiBkYXRhT2JqZWN0LCBVSU5UIGZvcm1hdCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGRhdGFT
dHJpbmdzKQpAQCAtODM1LDcgKzgzNSw3IEBAIHZvaWQgc2V0Q2xpcGJvYXJkRGF0YShJRGF0YU9i
amVjdCogZGF0YU9iamVjdCwgVUlOVCBmb3JtYXQsIGNvbnN0IFZlY3RvcjxTdHJpbmc+CiAgICAg
Q2xpcGJvYXJkRm9ybWF0TWFwOjpjb25zdF9pdGVyYXRvciBmb3VuZCA9IGZvcm1hdE1hcC5maW5k
KGZvcm1hdCk7CiAgICAgaWYgKGZvdW5kID09IGZvcm1hdE1hcC5lbmQoKSkKICAgICAgICAgcmV0
dXJuOwotICAgIGZvdW5kLT5zZWNvbmQtPnNldFN0cmluZyhkYXRhT2JqZWN0LCBmb3VuZC0+c2Vj
b25kLT5mb3JtYXQsIGRhdGFTdHJpbmdzKTsKKyAgICBmb3VuZC0+dmFsdWUtPnNldFN0cmluZyhk
YXRhT2JqZWN0LCBmb3VuZC0+dmFsdWUtPmZvcm1hdCwgZGF0YVN0cmluZ3MpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93
aW4vQ2xpcGJvYXJkV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9h
cmRXaW4uY3BwCmluZGV4IGQxYzEzODZhMTQ1MjA0YzM4ZTE4MWJkNzVhMjhiMjhjOTA1Mzc1ZDAu
LmY5NTBiMDhjZWZiZjZkMGJlMDFiNWU0MGFjZDBkYjY4M2E0MmEzYzMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRXaW4uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRXaW4uY3BwCkBAIC01MjUsNyArNTI1LDcgQEAg
SGFzaFNldDxTdHJpbmc+IENsaXBib2FyZFdpbjo6dHlwZXMoKSBjb25zdAogICAgIH0gZWxzZSB7
CiAgICAgICAgIGZvciAoRHJhZ0RhdGFNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9kcmFnRGF0
YU1hcC5iZWdpbigpOyBpdCAhPSBtX2RyYWdEYXRhTWFwLmVuZCgpOyArK2l0KSB7CiAgICAgICAg
ICAgICBGT1JNQVRFVEMgZGF0YTsKLSAgICAgICAgICAgIGRhdGEuY2ZGb3JtYXQgPSAoKml0KS5m
aXJzdDsKKyAgICAgICAgICAgIGRhdGEuY2ZGb3JtYXQgPSAoKml0KS5rZXk7CiAgICAgICAgICAg
ICBhZGRNaW1lVHlwZXNGb3JGb3JtYXQocmVzdWx0cywgZGF0YSk7CiAgICAgICAgIH0KICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5jcHAKaW5kZXgg
ZWUwMjU1ZTEyODU4ZWEzOWIxYmM5NDY2NTEyOTA3M2M0ZGNhMTk0ZC4uMDc5ZjhkNmU4ZDY0NWIw
MGZhMjlhMWI0YjVlMTYyYmVmZjYwNWU5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vd2luL0ZpbGVTeXN0ZW1XaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3dpbi9GaWxlU3lzdGVtV2luLmNwcApAQCAtMjM4LDcgKzIzOCw3IEBAIHN0YXRpYyBTdHJpbmcg
Y2FjaGVkU3RvcmFnZURpcmVjdG9yeShEV09SRCBwYXRoSWRlbnRpZmllcikKIAogICAgIEhhc2hN
YXA8RFdPUkQsIFN0cmluZz46Oml0ZXJhdG9yIGl0ID0gZGlyZWN0b3JpZXMuZmluZChwYXRoSWRl
bnRpZmllcik7CiAgICAgaWYgKGl0ICE9IGRpcmVjdG9yaWVzLmVuZCgpKQotICAgICAgICByZXR1
cm4gaXQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKIAogICAgIFN0cmluZyBk
aXJlY3RvcnkgPSBzdG9yYWdlRGlyZWN0b3J5KHBhdGhJZGVudGlmaWVyKTsKICAgICBkaXJlY3Rv
cmllcy5hZGQocGF0aElkZW50aWZpZXIsIGRpcmVjdG9yeSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS93aW4vUnVuTG9vcFdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93aW4vUnVuTG9vcFdpbi5jcHAKaW5kZXggMTY2M2I2NjEzM2FiYzJjYjNmZDAwNTdkMTk2
NzEyMzdkMGU3OTlkYS4uMTdkNjg0NWU5ZmZkYzM5MjhjMDY3YzdjMTU4ODNhYWI5MGQyOWE2OCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1J1bkxvb3BXaW4uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9SdW5Mb29wV2luLmNwcApAQCAtMTI2LDcg
KzEyNiw3IEBAIHZvaWQgUnVuTG9vcDo6VGltZXJCYXNlOjp0aW1lckZpcmVkKFJ1bkxvb3AqIHJ1
bkxvb3AsIHVpbnQ2NF90IElEKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgVGltZXJC
YXNlKiB0aW1lciA9IGl0LT5zZWNvbmQ7CisgICAgVGltZXJCYXNlKiB0aW1lciA9IGl0LT52YWx1
ZTsKIAogICAgIGlmICghdGltZXItPm1faXNSZXBlYXRpbmcpIHsKICAgICAgICAgcnVuTG9vcC0+
bV9hY3RpdmVUaW1lcnMucmVtb3ZlKGl0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3dpbi9XQ0RhdGFPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2lu
L1dDRGF0YU9iamVjdC5jcHAKaW5kZXggMGMwM2NlMDBmMjIxYWUwYWM4MWI4ZWU3MmNmZTBkMDU0
YTA1NjY1NC4uZGZiZDAwNWZjNDM2ZjhkNzIxNmEyMTc0NjY5OWI3ZGY4MWI1ODA0OCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1dDRGF0YU9iamVjdC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1dDRGF0YU9iamVjdC5jcHAKQEAgLTE2OSw3ICsx
NjksNyBAQCBIUkVTVUxUIFdDRGF0YU9iamVjdDo6Y3JlYXRlSW5zdGFuY2UoV0NEYXRhT2JqZWN0
KiogcmVzdWx0LCBjb25zdCBEcmFnRGF0YU1hcCYgZAogICAgICpyZXN1bHQgPSBuZXcgV0NEYXRh
T2JqZWN0OwogCiAgICAgZm9yIChEcmFnRGF0YU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBkYXRh
TWFwLmJlZ2luKCk7IGl0ICE9IGRhdGFNYXAuZW5kKCk7ICsraXQpCi0gICAgICAgIHNldENsaXBi
b2FyZERhdGEoKnJlc3VsdCwgaXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsKKyAgICAgICAgc2V0Q2xp
cGJvYXJkRGF0YSgqcmVzdWx0LCBpdC0+a2V5LCBpdC0+dmFsdWUpOwogICAgIHJldHVybiBTX09L
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW5jZS9NSU1FVHlw
ZVJlZ2lzdHJ5V2luQ0UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luY2UvTUlNRVR5
cGVSZWdpc3RyeVdpbkNFLmNwcAppbmRleCA4YTBkM2QyYjYxNjJiNDZkYmI3ZDYyZjIyY2EwMzI2
ZGM3ZmNlZGM1Li44ODg4NDcxYTk0MWI2NzI3ZDY1N2Y0NjQyOTdlZGM4YTY1NDIyZWQ5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW5jZS9NSU1FVHlwZVJlZ2lzdHJ5V2lu
Q0UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbmNlL01JTUVUeXBlUmVnaXN0
cnlXaW5DRS5jcHAKQEAgLTEwMSw3ICsxMDEsNyBAQCBTdHJpbmcgTUlNRVR5cGVSZWdpc3RyeTo6
Z2V0UHJlZmVycmVkRXh0ZW5zaW9uRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiB0eXBlKQogICAg
IGluaXRNSU1FVHlwZUVudGVuc2lvbk1hcCgpOwogCiAgICAgZm9yIChIYXNoTWFwPFN0cmluZywg
U3RyaW5nPjo6aXRlcmF0b3IgaSA9IG1pbWV0eXBlTWFwLmJlZ2luKCk7IGkgIT0gbWltZXR5cGVN
YXAuZW5kKCk7ICsraSkgewotICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoaS0+c2Vjb25k
LCB0eXBlKSkKKyAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGktPnZhbHVlLCB0eXBlKSkK
ICAgICAgICAgICAgIHJldHVybiBpLT5maXJzdDsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3d4L0NvbnRleHRNZW51V3guY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vd3gvQ29udGV4dE1lbnVXeC5jcHAKaW5kZXggNDE4OWFhOTUyZmZlYjRiY2EyM2Ri
NzBhOTgwNjFlZWRmZjRmMWRmNC4uZGYyZWU1MjdkOTQ4ZTE2MmFiYjg5NDIzOGJiMmIzODRkODY5
ZjYyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvQ29udGV4dE1lbnVX
eC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvQ29udGV4dE1lbnVXeC5jcHAK
QEAgLTY3LDggKzY3LDggQEAgdm9pZCBDb250ZXh0TWVudTo6YXBwZW5kSXRlbShDb250ZXh0TWVu
dUl0ZW0mIGl0ZW0pCiAKICAgICBJdGVtQWN0aW9uTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBz
X2l0ZW1BY3Rpb25zLmVuZCgpOwogICAgIGZvciAoSXRlbUFjdGlvbk1hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBzX2l0ZW1BY3Rpb25zLmJlZ2luKCk7ICBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgaWYgKGl0LT5zZWNvbmQgPT0gaXRlbURlc2NyaXB0aW9uLmFjdGlvbikKLSAgICAgICAgICAg
IGlkV3ggPSBpdC0+Zmlyc3Q7CisgICAgICAgIGlmIChpdC0+dmFsdWUgPT0gaXRlbURlc2NyaXB0
aW9uLmFjdGlvbikKKyAgICAgICAgICAgIGlkV3ggPSBpdC0+a2V5OwogICAgIH0KIAogICAgIGlm
IChpdGVtRGVzY3JpcHRpb24uc3ViTWVudSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdp
bkRhdGFiYXNlLmNwcAppbmRleCA5NjFjNDU0ODViZjJkODc3NGFhMzAwYzc4NjUwZWFjOWRhYTA1
ZmM4Li40NDUyYWZlMWU0YjYzOGI1ZjdkZGEwZWM3YjE3OWQ3YWUzZDlkNmUzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmNwcApAQCAtMTY2LDcgKzE2Niw3IEBAIGJv
b2wgUGx1Z2luRGF0YWJhc2U6OnJlZnJlc2goKQogICAgICAgICBNSU1FVG9EZXNjcmlwdGlvbnNN
YXA6OmNvbnN0X2l0ZXJhdG9yIG1hcF9pdCA9ICgqaXQpLT5taW1lVG9EZXNjcmlwdGlvbnMoKS5i
ZWdpbigpOwogICAgICAgICBNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIG1h
cF9lbmQgPSAoKml0KS0+bWltZVRvRGVzY3JpcHRpb25zKCkuZW5kKCk7CiAgICAgICAgIGZvciAo
OyBtYXBfaXQgIT0gbWFwX2VuZDsgKyttYXBfaXQpCi0gICAgICAgICAgICBtX3JlZ2lzdGVyZWRN
SU1FVHlwZXMuYWRkKG1hcF9pdC0+Zmlyc3QpOworICAgICAgICAgICAgbV9yZWdpc3RlcmVkTUlN
RVR5cGVzLmFkZChtYXBfaXQtPmtleSk7CiAgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CkBAIC0y
NDcsOSArMjQ3LDkgQEAgU3RyaW5nIFBsdWdpbkRhdGFiYXNlOjpNSU1FVHlwZUZvckV4dGVuc2lv
bihjb25zdCBTdHJpbmcmIGV4dGVuc2lvbikgY29uc3QKICAgICAgICAgTUlNRVRvRXh0ZW5zaW9u
c01hcDo6Y29uc3RfaXRlcmF0b3IgbWltZV9lbmQgPSAoKml0KS0+bWltZVRvRXh0ZW5zaW9ucygp
LmVuZCgpOwogCiAgICAgICAgIGZvciAoTUlNRVRvRXh0ZW5zaW9uc01hcDo6Y29uc3RfaXRlcmF0
b3IgbWltZV9pdCA9ICgqaXQpLT5taW1lVG9FeHRlbnNpb25zKCkuYmVnaW4oKTsgbWltZV9pdCAh
PSBtaW1lX2VuZDsgKyttaW1lX2l0KSB7Ci0gICAgICAgICAgICBtaW1lVHlwZSA9IG1pbWVfaXQt
PmZpcnN0OworICAgICAgICAgICAgbWltZVR5cGUgPSBtaW1lX2l0LT5rZXk7CiAgICAgICAgICAg
ICBQbHVnaW5QYWNrYWdlKiBwcmVmZXJyZWRQbHVnaW4gPSBtX3ByZWZlcnJlZFBsdWdpbnMuZ2V0
KG1pbWVUeXBlKS5nZXQoKTsKLSAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBleHRl
bnNpb25zID0gbWltZV9pdC0+c2Vjb25kOworICAgICAgICAgICAgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIGV4dGVuc2lvbnMgPSBtaW1lX2l0LT52YWx1ZTsKICAgICAgICAgICAgIGJvb2wgZm91bmRN
YXBwaW5nID0gZmFsc2U7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXh0
ZW5zaW9ucy5zaXplKCk7IGkrKykgewogICAgICAgICAgICAgICAgIGlmIChlcXVhbElnbm9yaW5n
Q2FzZShleHRlbnNpb25zW2ldLCBleHRlbnNpb24pKSB7CkBAIC0zMzksOCArMzM5LDggQEAgdm9p
ZCBQbHVnaW5EYXRhYmFzZTo6cmVtb3ZlKFBsdWdpblBhY2thZ2UqIHBhY2thZ2UpCiAgICAgTUlN
RVRvRXh0ZW5zaW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBwYWNrYWdlLT5taW1lVG9FeHRl
bnNpb25zKCkuYmVnaW4oKTsKICAgICBNSU1FVG9FeHRlbnNpb25zTWFwOjpjb25zdF9pdGVyYXRv
ciBlbmQgPSBwYWNrYWdlLT5taW1lVG9FeHRlbnNpb25zKCkuZW5kKCk7CiAgICAgZm9yICggOyBp
dCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgUGx1Z2luUGFja2FnZUJ5TmFtZU1hcDo6aXRlcmF0
b3IgcGFja2FnZUluTWFwID0gbV9wcmVmZXJyZWRQbHVnaW5zLmZpbmQoaXQtPmZpcnN0KTsKLSAg
ICAgICAgaWYgKHBhY2thZ2VJbk1hcCAhPSBtX3ByZWZlcnJlZFBsdWdpbnMuZW5kKCkgJiYgcGFj
a2FnZUluTWFwLT5zZWNvbmQgPT0gcGFja2FnZSkKKyAgICAgICAgUGx1Z2luUGFja2FnZUJ5TmFt
ZU1hcDo6aXRlcmF0b3IgcGFja2FnZUluTWFwID0gbV9wcmVmZXJyZWRQbHVnaW5zLmZpbmQoaXQt
PmtleSk7CisgICAgICAgIGlmIChwYWNrYWdlSW5NYXAgIT0gbV9wcmVmZXJyZWRQbHVnaW5zLmVu
ZCgpICYmIHBhY2thZ2VJbk1hcC0+dmFsdWUgPT0gcGFja2FnZSkKICAgICAgICAgICAgIG1fcHJl
ZmVycmVkUGx1Z2lucy5yZW1vdmUocGFja2FnZUluTWFwKTsKICAgICB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luTWFpblRocmVhZFNjaGVkdWxlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXIuY3BwCmluZGV4
IDc1Mjg2NzZiMTJhYThiZGE4ZjMzYjMyZWY0MGNjODc2NTc2NmQzMWEuLjM5YWU3OTRlMmZiMDk3
MjE5YTUyMjNlYmZiZWVkZjY5YjZlMjg2MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
dWdpbnMvUGx1Z2luTWFpblRocmVhZFNjaGVkdWxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGx1Z2lucy9QbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyLmNwcApAQCAtNDksNyArNDksNyBAQCB2
b2lkIFBsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXI6OnNjaGVkdWxlQ2FsbChOUFAgbnBwLCBNYWlu
VGhyZWFkRnVuY3Rpb24gZnVuY3RpbwogICAgIGlmIChpdCA9PSBtX2NhbGxRdWV1ZU1hcC5lbmQo
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaXQtPnNlY29uZC5hcHBlbmQoQ2FsbChmdW5jdGlv
biwgdXNlckRhdGEpKTsKKyAgICBpdC0+dmFsdWUuYXBwZW5kKENhbGwoZnVuY3Rpb24sIHVzZXJE
YXRhKSk7CiAKICAgICBpZiAoIW1fY2FsbFBlbmRpbmcpIHsKICAgICAgICAgY2FsbE9uTWFpblRo
cmVhZChtYWluVGhyZWFkQ2FsbGJhY2ssIHRoaXMpOwpAQCAtOTcsNyArOTcsNyBAQCB2b2lkIFBs
dWdpbk1haW5UaHJlYWRTY2hlZHVsZXI6OmRpc3BhdGNoQ2FsbHMoKQogICAgICAgICAvLyBFbXB0
eSBhbGwgdGhlIHF1ZXVlcyBpbiB0aGUgb3JpZ2luYWwgbWFwCiAgICAgICAgIENhbGxRdWV1ZU1h
cDo6aXRlcmF0b3IgZW5kID0gbV9jYWxsUXVldWVNYXAuZW5kKCk7CiAgICAgICAgIGZvciAoQ2Fs
bFF1ZXVlTWFwOjppdGVyYXRvciBpdCA9IG1fY2FsbFF1ZXVlTWFwLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkKLSAgICAgICAgICAgIGl0LT5zZWNvbmQuY2xlYXIoKTsKKyAgICAgICAgICAgIGl0
LT52YWx1ZS5jbGVhcigpOwogICAgIH0KIAogICAgIG1fY2FsbFBlbmRpbmcgPSBmYWxzZTsKQEAg
LTEwNSw3ICsxMDUsNyBAQCB2b2lkIFBsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXI6OmRpc3BhdGNo
Q2FsbHMoKQogCiAgICAgQ2FsbFF1ZXVlTWFwOjppdGVyYXRvciBlbmQgPSBjb3B5LmVuZCgpOwog
ICAgIGZvciAoQ2FsbFF1ZXVlTWFwOjppdGVyYXRvciBpdCA9IGNvcHkuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KQotICAgICAgICBkaXNwYXRjaENhbGxzRm9yUGx1Z2luKGl0LT5maXJzdCwgaXQt
PnNlY29uZCk7CisgICAgICAgIGRpc3BhdGNoQ2FsbHNGb3JQbHVnaW4oaXQtPmtleSwgaXQtPnZh
bHVlKTsKIH0KIAogdm9pZCBQbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyOjptYWluVGhyZWFkQ2Fs
bGJhY2sodm9pZCogY29udGV4dCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMv
UGx1Z2luU3RyZWFtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luU3RyZWFtLmNw
cAppbmRleCAwMDIzODBmNWY5NTNmOWJlZTJjNTY1ZTljYTVjMTMyYWQ0YzBhZjRhLi5mZGI3ODYw
MzViMGQxNjU0ODIxZmNiNDYwYWQ0ZTJkM2E3MWE1YTM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbHVnaW5zL1BsdWdpblN0cmVhbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lu
cy9QbHVnaW5TdHJlYW0uY3BwCkBAIC0xNDcsOSArMTQ3LDkgQEAgdm9pZCBQbHVnaW5TdHJlYW06
OnN0YXJ0U3RyZWFtKCkKIAogICAgICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBl
bmQgPSBtX3Jlc291cmNlUmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkcygpLmVuZCgpOwogICAgICAg
ICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZVJlc3Bv
bnNlLmh0dHBIZWFkZXJGaWVsZHMoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5maXJzdCk7CisgICAgICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZChpdC0+a2V5KTsKICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKHNlcGFyYXRvcik7Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+c2Vj
b25kKTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT52YWx1ZSk7CiAgICAg
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKICAgICAgICAgfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2JsYWNrYmVycnkvUGx1Z2luRGF0YUJsYWNrQmVy
cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ibGFja2JlcnJ5L1BsdWdpbkRhdGFCbGFj
a0JlcnJ5LmNwcAppbmRleCBkOTIwZDFmYmQ1YTExMjQ2MDNhOGNkOThmYTEzNDM1NmU3MzA2YjU5
Li40NzQ2NjE2ZGUzMzVmYTgzY2VjOTZkOTMwZTIwZDhjMjhlOTRjM2I3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbHVnaW5zL2JsYWNrYmVycnkvUGx1Z2luRGF0YUJsYWNrQmVycnkuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvYmxhY2tiZXJyeS9QbHVnaW5EYXRhQmxhY2tC
ZXJyeS5jcHAKQEAgLTQxLDggKzQxLDggQEAgdm9pZCBQbHVnaW5EYXRhOjppbml0UGx1Z2lucyhj
b25zdCBQYWdlKikKICAgICAgICAgTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRv
ciBlbmQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuZW5kKCk7CiAgICAgICAgIGZvciAoTUlNRVRvRGVz
Y3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIE1pbWVDbGFzc0luZm8gbWltZTsK
LSAgICAgICAgICAgIG1pbWUudHlwZSA9IGl0LT5maXJzdDsKLSAgICAgICAgICAgIG1pbWUuZGVz
YyA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICBtaW1lLnR5cGUgPSBpdC0+a2V5OworICAgICAg
ICAgICAgbWltZS5kZXNjID0gaXQtPnZhbHVlOwogICAgICAgICAgICAgbWltZS5leHRlbnNpb25z
ID0gcGFja2FnZS0+bWltZVRvRXh0ZW5zaW9ucygpLmdldChtaW1lLnR5cGUpOwogICAgICAgICAg
ICAgaW5mby5taW1lcy5hcHBlbmQobWltZSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsdWdpbnMvd3gvUGx1Z2luRGF0YVd4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
dWdpbnMvd3gvUGx1Z2luRGF0YVd4LmNwcAppbmRleCAwZWI4OTBmZWYwNWExMTVlYWNlNDI2Mzc2
ODBhM2Q2YTEyZjU3NzI5Li4yNzk1MmM0YWU4YmZhNDllOThiMTFhZTk5NTlmYzc1NGU0ZGIyM2Jl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3d4L1BsdWdpbkRhdGFXeC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy93eC9QbHVnaW5EYXRhV3guY3BwCkBAIC01MSw4
ICs1MSw4IEBAIHZvaWQgUGx1Z2luRGF0YTo6aW5pdFBsdWdpbnMoY29uc3QgUGFnZSopCiAgICAg
ICAgIGZvciAoTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1pbWVU
b0Rlc2NyaXB0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIE1p
bWVDbGFzc0luZm8gbWltZTsKIAotICAgICAgICAgICAgbWltZS50eXBlID0gaXQtPmZpcnN0Owot
ICAgICAgICAgICAgbWltZS5kZXNjID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIG1pbWUudHlw
ZSA9IGl0LT5rZXk7CisgICAgICAgICAgICBtaW1lLmRlc2MgPSBpdC0+dmFsdWU7CiAgICAgICAg
ICAgICBtaW1lLmV4dGVuc2lvbnMgPSBwYWNrYWdlLT5taW1lVG9FeHRlbnNpb25zKCkuZ2V0KG1p
bWUudHlwZSk7CiAKICAgICAgICAgICAgIGluZm8ubWltZXMuYXBwZW5kKG1pbWUpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0Zsb3dUaHJlYWRDb250cm9sbGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GbG93VGhyZWFkQ29udHJvbGxlci5jcHAKaW5kZXgg
MDEzZTRhMjBmNWY4ZjE4NWEyZTQwMGFhMDg5ZDJmNjE2NjJmNzJiYS4uYWE4YzhkZDE1YTE1ZWVm
YjQyMTEzZmQxMjYxZjhmMjVlYzBlODI1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0Zsb3dUaHJlYWRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvRmxvd1RocmVhZENvbnRyb2xsZXIuY3BwCkBAIC0xNDAsOSArMTQwLDkgQEAgdm9pZCBG
bG93VGhyZWFkQ29udHJvbGxlcjo6dW5yZWdpc3Rlck5hbWVkRmxvd0NvbnRlbnROb2RlKE5vZGUq
IGNvbnRlbnROb2RlKQogICAgIEFTU0VSVChjb250ZW50Tm9kZSAmJiBjb250ZW50Tm9kZS0+aXNF
bGVtZW50Tm9kZSgpKTsKICAgICBIYXNoTWFwPE5vZGUqLCBSZW5kZXJOYW1lZEZsb3dUaHJlYWQq
Pjo6aXRlcmF0b3IgaXQgPSBtX21hcE5hbWVkRmxvd0NvbnRlbnROb2Rlcy5maW5kKGNvbnRlbnRO
b2RlKTsKICAgICBBU1NFUlQoaXQgIT0gbV9tYXBOYW1lZEZsb3dDb250ZW50Tm9kZXMuZW5kKCkp
OwotICAgIEFTU0VSVChpdC0+c2Vjb25kKTsKLSAgICBBU1NFUlQoaXQtPnNlY29uZC0+aGFzQ29u
dGVudE5vZGUoY29udGVudE5vZGUpKTsKLSAgICBpdC0+c2Vjb25kLT51bnJlZ2lzdGVyTmFtZWRG
bG93Q29udGVudE5vZGUoY29udGVudE5vZGUpOworICAgIEFTU0VSVChpdC0+dmFsdWUpOworICAg
IEFTU0VSVChpdC0+dmFsdWUtPmhhc0NvbnRlbnROb2RlKGNvbnRlbnROb2RlKSk7CisgICAgaXQt
PnZhbHVlLT51bnJlZ2lzdGVyTmFtZWRGbG93Q29udGVudE5vZGUoY29udGVudE5vZGUpOwogICAg
IG1fbWFwTmFtZWRGbG93Q29udGVudE5vZGVzLnJlbW92ZShjb250ZW50Tm9kZSk7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAppbmRleCAxMjZkYjI3Zjk4
MTFkMTViNzllM2E4MDdjYmZmMWFlMWMzYTc0YjIzLi5lN2Q4MTk4MmQ2OTAyMmFkNjJmMDg3OWFl
NjU3OGI4N2NjMTY3NjBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5s
aW5lRmxvd0JveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dC
b3guY3BwCkBAIC00NTksNyArNDU5LDcgQEAgYm9vbCBJbmxpbmVGbG93Qm94OjpyZXF1aXJlc0lk
ZW9ncmFwaGljQmFzZWxpbmUoY29uc3QgR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm8KICAgICAg
ICAgICAgIGNvbnN0IFZlY3Rvcjxjb25zdCBTaW1wbGVGb250RGF0YSo+KiB1c2VkRm9udHMgPSAw
OwogICAgICAgICAgICAgaWYgKGN1cnItPmlzSW5saW5lVGV4dEJveCgpKSB7CiAgICAgICAgICAg
ICAgICAgR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gdGV4dEJveERhdGFNYXAuZmluZCh0b0lubGluZVRleHRCb3goY3VycikpOwotICAgICAgICAg
ICAgICAgIHVzZWRGb250cyA9IGl0ID09IHRleHRCb3hEYXRhTWFwLmVuZCgpID8gMCA6ICZpdC0+
c2Vjb25kLmZpcnN0OworICAgICAgICAgICAgICAgIHVzZWRGb250cyA9IGl0ID09IHRleHRCb3hE
YXRhTWFwLmVuZCgpID8gMCA6ICZpdC0+dmFsdWUuZmlyc3Q7CiAgICAgICAgICAgICB9CiAKICAg
ICAgICAgICAgIGlmICh1c2VkRm9udHMpIHsKQEAgLTgyMyw3ICs4MjMsNyBAQCBpbmxpbmUgdm9p
ZCBJbmxpbmVGbG93Qm94OjphZGRUZXh0Qm94VmlzdWFsT3ZlcmZsb3coSW5saW5lVGV4dEJveCog
dGV4dEJveCwgR2x5cAogICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHRleHRCb3gtPnJlbmRlcmVy
KCktPnN0eWxlKGlzRmlyc3RMaW5lU3R5bGUoKSk7CiAgICAgCiAgICAgR2x5cGhPdmVyZmxvd0Fu
ZEZhbGxiYWNrRm9udHNNYXA6Oml0ZXJhdG9yIGl0ID0gdGV4dEJveERhdGFNYXAuZmluZCh0ZXh0
Qm94KTsKLSAgICBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93ID0gaXQgPT0gdGV4dEJveERh
dGFNYXAuZW5kKCkgPyAwIDogJml0LT5zZWNvbmQuc2Vjb25kOworICAgIEdseXBoT3ZlcmZsb3cq
IGdseXBoT3ZlcmZsb3cgPSBpdCA9PSB0ZXh0Qm94RGF0YU1hcC5lbmQoKSA/IDAgOiAmaXQtPnZh
bHVlLnNlY29uZDsKICAgICBib29sIGlzRmxpcHBlZExpbmUgPSBzdHlsZS0+aXNGbGlwcGVkTGlu
ZXNXcml0aW5nTW9kZSgpOwogCiAgICAgaW50IHRvcEdseXBoRWRnZSA9IGdseXBoT3ZlcmZsb3cg
PyAoaXNGbGlwcGVkTGluZSA/IGdseXBoT3ZlcmZsb3ctPmJvdHRvbSA6IGdseXBoT3ZlcmZsb3ct
PnRvcCkgOiAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJs
b2NrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKaW5kZXgg
ODI3NzA3NzZmYmRjZjBlYWRhYzEzNDkxZmE5YjRlOGJiNTBkNTk3YS4uZWE3ODAzODdkZjliYTNm
OWEzYTljMzIwMmY2N2Y1NmFiYzdkYjE3OSAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2suY3BwCkBAIC00NDAzLDcgKzQ0MDMsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpjbGVh
ckZsb2F0cygpCiAKICAgICAgICAgUmVuZGVyZXJUb0Zsb2F0SW5mb01hcDo6aXRlcmF0b3IgZW5k
ID0gZmxvYXRNYXAuZW5kKCk7CiAgICAgICAgIGZvciAoUmVuZGVyZXJUb0Zsb2F0SW5mb01hcDo6
aXRlcmF0b3IgaXQgPSBmbG9hdE1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCA9ICgqaXQpLnNlY29uZDsKKyAg
ICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCA9ICgqaXQpLnZhbHVlOwog
ICAgICAgICAgICAgaWYgKCFmbG9hdGluZ09iamVjdC0+aXNEZXNjZW5kYW50KCkpIHsKICAgICAg
ICAgICAgICAgICBjaGFuZ2VMb2dpY2FsVG9wID0gMDsKICAgICAgICAgICAgICAgICBjaGFuZ2VM
b2dpY2FsQm90dG9tID0gbWF4KGNoYW5nZUxvZ2ljYWxCb3R0b20sIGxvZ2ljYWxCb3R0b21Gb3JG
bG9hdChmbG9hdGluZ09iamVjdCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAppbmRleCBiNjRjMWQzMTU2YWQxMTdhMjcwOTNiNzUw
ODIyZjBmODg1Njc5MDk1Li4xOTUzZGQxNTFhM2JlYWE1M2U2OTcxNGRkY2Q3NmI4NWU1NTZhM2Yw
IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5
b3V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5
b3V0LmNwcApAQCAtNzA3LDE0ICs3MDcsMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldExvZ2lj
YWxXaWR0aEZvclRleHRSdW4oUm9vdElubGluZUJveCogbGluZUJveCwgQmlkaVJ1biogcnUKICAg
ICBpZiAoIWZhbGxiYWNrRm9udHMuaXNFbXB0eSgpKSB7CiAgICAgICAgIEFTU0VSVChydW4tPm1f
Ym94LT5pc1RleHQoKSk7CiAgICAgICAgIEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFw
OjppdGVyYXRvciBpdCA9IHRleHRCb3hEYXRhTWFwLmFkZCh0b0lubGluZVRleHRCb3gocnVuLT5t
X2JveCksIG1ha2VfcGFpcihWZWN0b3I8Y29uc3QgU2ltcGxlRm9udERhdGEqPigpLCBHbHlwaE92
ZXJmbG93KCkpKS5pdGVyYXRvcjsKLSAgICAgICAgQVNTRVJUKGl0LT5zZWNvbmQuZmlyc3QuaXNF
bXB0eSgpKTsKLSAgICAgICAgY29weVRvVmVjdG9yKGZhbGxiYWNrRm9udHMsIGl0LT5zZWNvbmQu
Zmlyc3QpOworICAgICAgICBBU1NFUlQoaXQtPnZhbHVlLmZpcnN0LmlzRW1wdHkoKSk7CisgICAg
ICAgIGNvcHlUb1ZlY3RvcihmYWxsYmFja0ZvbnRzLCBpdC0+dmFsdWUuZmlyc3QpOwogICAgICAg
ICBydW4tPm1fYm94LT5wYXJlbnQoKS0+Y2xlYXJEZXNjZW5kYW50c0hhdmVTYW1lTGluZUhlaWdo
dEFuZEJhc2VsaW5lKCk7CiAgICAgfQogICAgIGlmICgoZ2x5cGhPdmVyZmxvdy50b3AgfHwgZ2x5
cGhPdmVyZmxvdy5ib3R0b20gfHwgZ2x5cGhPdmVyZmxvdy5sZWZ0IHx8IGdseXBoT3ZlcmZsb3cu
cmlnaHQpKSB7CiAgICAgICAgIEFTU0VSVChydW4tPm1fYm94LT5pc1RleHQoKSk7CiAgICAgICAg
IEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFwOjppdGVyYXRvciBpdCA9IHRleHRCb3hE
YXRhTWFwLmFkZCh0b0lubGluZVRleHRCb3gocnVuLT5tX2JveCksIG1ha2VfcGFpcihWZWN0b3I8
Y29uc3QgU2ltcGxlRm9udERhdGEqPigpLCBHbHlwaE92ZXJmbG93KCkpKS5pdGVyYXRvcjsKLSAg
ICAgICAgaXQtPnNlY29uZC5zZWNvbmQgPSBnbHlwaE92ZXJmbG93OworICAgICAgICBpdC0+dmFs
dWUuc2Vjb25kID0gZ2x5cGhPdmVyZmxvdzsKICAgICAgICAgcnVuLT5tX2JveC0+Y2xlYXJLbm93
blRvSGF2ZU5vT3ZlcmZsb3coKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAppbmRleCA1MDUzZDg3MGM1ZGI0YzJiYzAw
M2FjNjg5MDE1MDVkN2Q0MmJlOTljLi5mNzU4MTljYjk3ZTFlYzdjZGE2YzRmM2NiM2ZlYzgzY2U5
Zjk5ZDZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9k
ZWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2Rl
bE9iamVjdC5jcHAKQEAgLTEzNyw3ICsxMzcsNyBAQCB2b2lkIEltYWdlUXVhbGl0eUNvbnRyb2xs
ZXI6OmhpZ2hRdWFsaXR5UmVwYWludFRpbWVyRmlyZWQoVGltZXI8SW1hZ2VRdWFsaXR5Q29udAog
ICAgIGlmIChtX2FuaW1hdGVkUmVzaXplSXNBY3RpdmUpIHsKICAgICAgICAgbV9hbmltYXRlZFJl
c2l6ZUlzQWN0aXZlID0gZmFsc2U7CiAgICAgICAgIGZvciAoT2JqZWN0TGF5ZXJTaXplTWFwOjpp
dGVyYXRvciBpdCA9IG1fb2JqZWN0TGF5ZXJTaXplTWFwLmJlZ2luKCk7IGl0ICE9IG1fb2JqZWN0
TGF5ZXJTaXplTWFwLmVuZCgpOyArK2l0KQotICAgICAgICAgICAgaXQtPmZpcnN0LT5yZXBhaW50
KCk7CisgICAgICAgICAgICBpdC0+a2V5LT5yZXBhaW50KCk7CiAgICAgfQogfQogCkBAIC0xNjIs
MTQgKzE2MiwxNCBAQCBib29sIEltYWdlUXVhbGl0eUNvbnRyb2xsZXI6OnNob3VsZFBhaW50QXRM
b3dRdWFsaXR5KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgUgogCiAgICAgLy8gTG9vayBvdXJz
ZWx2ZXMgdXAgaW4gdGhlIGhhc2h0YWJsZXMuCiAgICAgT2JqZWN0TGF5ZXJTaXplTWFwOjppdGVy
YXRvciBpID0gbV9vYmplY3RMYXllclNpemVNYXAuZmluZChvYmplY3QpOwotICAgIExheWVyU2l6
ZU1hcCogaW5uZXJNYXAgPSBpICE9IG1fb2JqZWN0TGF5ZXJTaXplTWFwLmVuZCgpID8gJmktPnNl
Y29uZCA6IDA7CisgICAgTGF5ZXJTaXplTWFwKiBpbm5lck1hcCA9IGkgIT0gbV9vYmplY3RMYXll
clNpemVNYXAuZW5kKCkgPyAmaS0+dmFsdWUgOiAwOwogICAgIExheW91dFNpemUgb2xkU2l6ZTsK
ICAgICBib29sIGlzRmlyc3RSZXNpemUgPSB0cnVlOwogICAgIGlmIChpbm5lck1hcCkgewogICAg
ICAgICBMYXllclNpemVNYXA6Oml0ZXJhdG9yIGogPSBpbm5lck1hcC0+ZmluZChsYXllcik7CiAg
ICAgICAgIGlmIChqICE9IGlubmVyTWFwLT5lbmQoKSkgewogICAgICAgICAgICAgaXNGaXJzdFJl
c2l6ZSA9IGZhbHNlOwotICAgICAgICAgICAgb2xkU2l6ZSA9IGotPnNlY29uZDsKKyAgICAgICAg
ICAgIG9sZFNpemUgPSBqLT52YWx1ZTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwCmluZGV4IGRlNDVkODk1ZTE3ZTA5YTcxYjYz
OTFkZDk4ZTgyMzA3N2IyMWQxMDcuLjU0NTdhM2ExZGQxNjhiODZlZDNiYWRhNzA3MGJhNDYzNDRi
MzgwMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb3VudGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ291bnRlci5jcHAKQEAg
LTU3MSwxMSArNTcxLDExIEBAIHZvaWQgUmVuZGVyQ291bnRlcjo6ZGVzdHJveUNvdW50ZXJOb2Rl
cyhSZW5kZXJPYmplY3QqIG93bmVyKQogICAgIENvdW50ZXJNYXBzOjppdGVyYXRvciBtYXBzSXRl
cmF0b3IgPSBtYXBzLmZpbmQob3duZXIpOwogICAgIGlmIChtYXBzSXRlcmF0b3IgPT0gbWFwcy5l
bmQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIENvdW50ZXJNYXAqIG1hcCA9IG1hcHNJdGVyYXRv
ci0+c2Vjb25kLmdldCgpOworICAgIENvdW50ZXJNYXAqIG1hcCA9IG1hcHNJdGVyYXRvci0+dmFs
dWUuZ2V0KCk7CiAgICAgQ291bnRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQo
KTsKICAgICBmb3IgKENvdW50ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgQXRvbWljU3RyaW5nIGlkZW50aWZpZXIoaXQt
PmZpcnN0LmdldCgpKTsKLSAgICAgICAgZGVzdHJveUNvdW50ZXJOb2RlV2l0aG91dE1hcFJlbW92
YWwoaWRlbnRpZmllciwgaXQtPnNlY29uZC5nZXQoKSk7CisgICAgICAgIEF0b21pY1N0cmluZyBp
ZGVudGlmaWVyKGl0LT5rZXkuZ2V0KCkpOworICAgICAgICBkZXN0cm95Q291bnRlck5vZGVXaXRo
b3V0TWFwUmVtb3ZhbChpZGVudGlmaWVyLCBpdC0+dmFsdWUuZ2V0KCkpOwogICAgIH0KICAgICBt
YXBzLnJlbW92ZShtYXBzSXRlcmF0b3IpOwogICAgIG93bmVyLT5zZXRIYXNDb3VudGVyTm9kZU1h
cChmYWxzZSk7CkBAIC01ODksNyArNTg5LDcgQEAgdm9pZCBSZW5kZXJDb3VudGVyOjpkZXN0cm95
Q291bnRlck5vZGUoUmVuZGVyT2JqZWN0KiBvd25lciwgY29uc3QgQXRvbWljU3RyaW5nJgogICAg
IENvdW50ZXJNYXA6Oml0ZXJhdG9yIG1hcEl0ZXJhdG9yID0gbWFwLT5maW5kKGlkZW50aWZpZXIu
aW1wbCgpKTsKICAgICBpZiAobWFwSXRlcmF0b3IgPT0gbWFwLT5lbmQoKSkKICAgICAgICAgcmV0
dXJuOwotICAgIGRlc3Ryb3lDb3VudGVyTm9kZVdpdGhvdXRNYXBSZW1vdmFsKGlkZW50aWZpZXIs
IG1hcEl0ZXJhdG9yLT5zZWNvbmQuZ2V0KCkpOworICAgIGRlc3Ryb3lDb3VudGVyTm9kZVdpdGhv
dXRNYXBSZW1vdmFsKGlkZW50aWZpZXIsIG1hcEl0ZXJhdG9yLT52YWx1ZS5nZXQoKSk7CiAgICAg
bWFwLT5yZW1vdmUobWFwSXRlcmF0b3IpOwogICAgIC8vIFdlIGRvIG5vdCBkZWxldGUgIm1hcCIg
aGVyZSBldmVuIGlmIGVtcHR5IGJlY2F1c2Ugd2UgZXhwZWN0IHRvIHJldXNlCiAgICAgLy8gaXQg
c29vbi4gSW4gb3JkZXIgZm9yIGEgcmVuZGVyZXIgdG8gbG9zZSBhbGwgaXRzIGNvdW50ZXJzIHBl
cm1hbmVudGx5LApAQCAtNjI5LDIyICs2MjksMjIgQEAgc3RhdGljIHZvaWQgdXBkYXRlQ291bnRl
cnMoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKICAgICBDb3VudGVyRGlyZWN0aXZlTWFwOjpjb25z
dF9pdGVyYXRvciBlbmQgPSBkaXJlY3RpdmVNYXAtPmVuZCgpOwogICAgIGlmICghcmVuZGVyZXIt
Pmhhc0NvdW50ZXJOb2RlTWFwKCkpIHsKICAgICAgICAgZm9yIChDb3VudGVyRGlyZWN0aXZlTWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IGRpcmVjdGl2ZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KQotICAgICAgICAgICAgbWFrZUNvdW50ZXJOb2RlKHJlbmRlcmVyLCBBdG9taWNTdHJpbmco
aXQtPmZpcnN0LmdldCgpKSwgZmFsc2UpOworICAgICAgICAgICAgbWFrZUNvdW50ZXJOb2RlKHJl
bmRlcmVyLCBBdG9taWNTdHJpbmcoaXQtPmtleS5nZXQoKSksIGZhbHNlKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICBDb3VudGVyTWFwKiBjb3VudGVyTWFwID0gY291bnRlck1hcHMoKS5n
ZXQocmVuZGVyZXIpOwogICAgIEFTU0VSVChjb3VudGVyTWFwKTsKICAgICBmb3IgKENvdW50ZXJE
aXJlY3RpdmVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZGlyZWN0aXZlTWFwLT5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgUmVmUHRyPENvdW50ZXJOb2RlPiBub2RlID0gY291
bnRlck1hcC0+Z2V0KGl0LT5maXJzdC5nZXQoKSk7CisgICAgICAgIFJlZlB0cjxDb3VudGVyTm9k
ZT4gbm9kZSA9IGNvdW50ZXJNYXAtPmdldChpdC0+a2V5LmdldCgpKTsKICAgICAgICAgaWYgKCFu
b2RlKSB7Ci0gICAgICAgICAgICBtYWtlQ291bnRlck5vZGUocmVuZGVyZXIsIEF0b21pY1N0cmlu
ZyhpdC0+Zmlyc3QuZ2V0KCkpLCBmYWxzZSk7CisgICAgICAgICAgICBtYWtlQ291bnRlck5vZGUo
cmVuZGVyZXIsIEF0b21pY1N0cmluZyhpdC0+a2V5LmdldCgpKSwgZmFsc2UpOwogICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgUmVmUHRyPENvdW50ZXJOb2RlPiBuZXdQ
YXJlbnQgPSAwOwogICAgICAgICBSZWZQdHI8Q291bnRlck5vZGU+IG5ld1ByZXZpb3VzU2libGlu
ZyA9IDA7CiAgICAgICAgIAotICAgICAgICBmaW5kUGxhY2VGb3JDb3VudGVyKHJlbmRlcmVyLCBB
dG9taWNTdHJpbmcoaXQtPmZpcnN0LmdldCgpKSwgbm9kZS0+aGFzUmVzZXRUeXBlKCksIG5ld1Bh
cmVudCwgbmV3UHJldmlvdXNTaWJsaW5nKTsKLSAgICAgICAgaWYgKG5vZGUgIT0gY291bnRlck1h
cC0+Z2V0KGl0LT5maXJzdC5nZXQoKSkpCisgICAgICAgIGZpbmRQbGFjZUZvckNvdW50ZXIocmVu
ZGVyZXIsIEF0b21pY1N0cmluZyhpdC0+a2V5LmdldCgpKSwgbm9kZS0+aGFzUmVzZXRUeXBlKCks
IG5ld1BhcmVudCwgbmV3UHJldmlvdXNTaWJsaW5nKTsKKyAgICAgICAgaWYgKG5vZGUgIT0gY291
bnRlck1hcC0+Z2V0KGl0LT5rZXkuZ2V0KCkpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIENvdW50ZXJOb2RlKiBwYXJlbnQgPSBub2RlLT5wYXJlbnQoKTsKICAgICAgICAgaWYgKG5l
d1BhcmVudCA9PSBwYXJlbnQgJiYgbmV3UHJldmlvdXNTaWJsaW5nID09IG5vZGUtPnByZXZpb3Vz
U2libGluZygpKQpAQCAtNjUyLDcgKzY1Miw3IEBAIHN0YXRpYyB2b2lkIHVwZGF0ZUNvdW50ZXJz
KFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiAgICAgICAgIGlmIChwYXJlbnQpCiAgICAgICAgICAg
ICBwYXJlbnQtPnJlbW92ZUNoaWxkKG5vZGUuZ2V0KCkpOwogICAgICAgICBpZiAobmV3UGFyZW50
KQotICAgICAgICAgICAgbmV3UGFyZW50LT5pbnNlcnRBZnRlcihub2RlLmdldCgpLCBuZXdQcmV2
aW91c1NpYmxpbmcuZ2V0KCksIGl0LT5maXJzdC5nZXQoKSk7CisgICAgICAgICAgICBuZXdQYXJl
bnQtPmluc2VydEFmdGVyKG5vZGUuZ2V0KCksIG5ld1ByZXZpb3VzU2libGluZy5nZXQoKSwgaXQt
PmtleS5nZXQoKSk7CiAgICAgfQogfQogCkBAIC02ODQsMjEgKzY4NCwyMSBAQCB2b2lkIFJlbmRl
ckNvdW50ZXI6OnJlbmRlcmVyU3R5bGVDaGFuZ2VkKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNv
bnN0IFJlbmRlclN0eQogICAgICAgICAgICAgQ291bnRlckRpcmVjdGl2ZU1hcDo6Y29uc3RfaXRl
cmF0b3IgbmV3TWFwRW5kID0gbmV3Q291bnRlckRpcmVjdGl2ZXMtPmVuZCgpOwogICAgICAgICAg
ICAgQ291bnRlckRpcmVjdGl2ZU1hcDo6Y29uc3RfaXRlcmF0b3Igb2xkTWFwRW5kID0gb2xkQ291
bnRlckRpcmVjdGl2ZXMtPmVuZCgpOwogICAgICAgICAgICAgZm9yIChDb3VudGVyRGlyZWN0aXZl
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG5ld0NvdW50ZXJEaXJlY3RpdmVzLT5iZWdpbigpOyBp
dCAhPSBuZXdNYXBFbmQ7ICsraXQpIHsKLSAgICAgICAgICAgICAgICBDb3VudGVyRGlyZWN0aXZl
TWFwOjpjb25zdF9pdGVyYXRvciBvbGRNYXBJdCA9IG9sZENvdW50ZXJEaXJlY3RpdmVzLT5maW5k
KGl0LT5maXJzdCk7CisgICAgICAgICAgICAgICAgQ291bnRlckRpcmVjdGl2ZU1hcDo6Y29uc3Rf
aXRlcmF0b3Igb2xkTWFwSXQgPSBvbGRDb3VudGVyRGlyZWN0aXZlcy0+ZmluZChpdC0+a2V5KTsK
ICAgICAgICAgICAgICAgICBpZiAob2xkTWFwSXQgIT0gb2xkTWFwRW5kKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChvbGRNYXBJdC0+c2Vjb25kID09IGl0LT5zZWNvbmQpCisgICAgICAgICAg
ICAgICAgICAgIGlmIChvbGRNYXBJdC0+dmFsdWUgPT0gaXQtPnZhbHVlKQogICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIFJlbmRlckNvdW50ZXI6
OmRlc3Ryb3lDb3VudGVyTm9kZShyZW5kZXJlciwgaXQtPmZpcnN0LmdldCgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgUmVuZGVyQ291bnRlcjo6ZGVzdHJveUNvdW50ZXJOb2RlKHJlbmRlcmVyLCBp
dC0+a2V5LmdldCgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgLy8gV2Ug
bXVzdCBjcmVhdGUgdGhpcyBub2RlIGhlcmUsIGJlY2F1c2UgdGhlIGNoYW5nZWQgbm9kZSBtYXkg
YmUgYSBub2RlIHdpdGggbm8gZGlzcGxheSBzdWNoIGFzCiAgICAgICAgICAgICAgICAgLy8gYXMg
dGhvc2UgY3JlYXRlZCBieSB0aGUgaW5jcmVtZW50IG9yIHJlc2V0IGRpcmVjdGl2ZXMgYW5kIHRo
ZSByZS1sYXlvdXQgdGhhdCB3aWxsIGhhcHBlbiB3aWxsCiAgICAgICAgICAgICAgICAgLy8gbm90
IGNhdGNoIHRoZSBjaGFuZ2UgaWYgdGhlIG5vZGUgaGFkIG5vIGNoaWxkcmVuLgotICAgICAgICAg
ICAgICAgIG1ha2VDb3VudGVyTm9kZShyZW5kZXJlciwgaXQtPmZpcnN0LmdldCgpLCBmYWxzZSk7
CisgICAgICAgICAgICAgICAgbWFrZUNvdW50ZXJOb2RlKHJlbmRlcmVyLCBpdC0+a2V5LmdldCgp
LCBmYWxzZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyBEZXN0cm95aW5nIG9sZCBj
b3VudGVycyB0aGF0IGRvIG5vdCBleGlzdCBpbiB0aGUgbmV3IGNvdW50ZXJEaXJlY3RpdmUgbWFw
LgogICAgICAgICAgICAgZm9yIChDb3VudGVyRGlyZWN0aXZlTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IG9sZENvdW50ZXJEaXJlY3RpdmVzLT5iZWdpbigpOyBpdCAhPW9sZE1hcEVuZDsgKytpdCkg
ewotICAgICAgICAgICAgICAgIGlmICghbmV3Q291bnRlckRpcmVjdGl2ZXMtPmNvbnRhaW5zKGl0
LT5maXJzdCkpCi0gICAgICAgICAgICAgICAgICAgIFJlbmRlckNvdW50ZXI6OmRlc3Ryb3lDb3Vu
dGVyTm9kZShyZW5kZXJlciwgaXQtPmZpcnN0LmdldCgpKTsKKyAgICAgICAgICAgICAgICBpZiAo
IW5ld0NvdW50ZXJEaXJlY3RpdmVzLT5jb250YWlucyhpdC0+a2V5KSkKKyAgICAgICAgICAgICAg
ICAgICAgUmVuZGVyQ291bnRlcjo6ZGVzdHJveUNvdW50ZXJOb2RlKHJlbmRlcmVyLCBpdC0+a2V5
LmdldCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlm
IChyZW5kZXJlci0+aGFzQ291bnRlck5vZGVNYXAoKSkKQEAgLTcxMCw3ICs3MTAsNyBAQCB2b2lk
IFJlbmRlckNvdW50ZXI6OnJlbmRlcmVyU3R5bGVDaGFuZ2VkKFJlbmRlck9iamVjdCogcmVuZGVy
ZXIsIGNvbnN0IFJlbmRlclN0eQogICAgICAgICAgICAgLy8gV2UgbXVzdCBjcmVhdGUgdGhpcyBu
b2RlIGhlcmUsIGJlY2F1c2UgdGhlIGFkZGVkIG5vZGUgbWF5IGJlIGEgbm9kZSB3aXRoIG5vIGRp
c3BsYXkgc3VjaCBhcwogICAgICAgICAgICAgLy8gYXMgdGhvc2UgY3JlYXRlZCBieSB0aGUgaW5j
cmVtZW50IG9yIHJlc2V0IGRpcmVjdGl2ZXMgYW5kIHRoZSByZS1sYXlvdXQgdGhhdCB3aWxsIGhh
cHBlbiB3aWxsCiAgICAgICAgICAgICAvLyBub3QgY2F0Y2ggdGhlIGNoYW5nZSBpZiB0aGUgbm9k
ZSBoYWQgbm8gY2hpbGRyZW4uCi0gICAgICAgICAgICBtYWtlQ291bnRlck5vZGUocmVuZGVyZXIs
IGl0LT5maXJzdC5nZXQoKSwgZmFsc2UpOworICAgICAgICAgICAgbWFrZUNvdW50ZXJOb2RlKHJl
bmRlcmVyLCBpdC0+a2V5LmdldCgpLCBmYWxzZSk7CiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAKaW5kZXggZDMwNTlk
ZjEzNTA0MTllMGUxZGJjYTJhYjU1MThlNmIxZjQ4ZmY1MS4uNzdmMmVmNzI4NWJlYTI3OTE1MWUy
NzcxMTUxNDc2YWE3ZGJjYTNhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckZsb3dUaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJGbG93VGhyZWFkLmNwcApAQCAtNjIwLDcgKzYyMCw3IEBAIHZvaWQgUmVuZGVyRmxvd1RocmVh
ZDo6c2V0UmVnaW9uUmFuZ2VGb3JCb3goY29uc3QgUmVuZGVyQm94KiBib3gsIExheW91dFVuaXQg
b2ZmCiAgICAgfQogCiAgICAgLy8gSWYgbm90aGluZyBjaGFuZ2VkLCBqdXN0IGJhaWwuCi0gICAg
UmVuZGVyUmVnaW9uUmFuZ2UmIHJhbmdlID0gaXQtPnNlY29uZDsKKyAgICBSZW5kZXJSZWdpb25S
YW5nZSYgcmFuZ2UgPSBpdC0+dmFsdWU7CiAgICAgaWYgKHJhbmdlLnN0YXJ0UmVnaW9uKCkgPT0g
c3RhcnRSZWdpb24gJiYgcmFuZ2UuZW5kUmVnaW9uKCkgPT0gZW5kUmVnaW9uKQogICAgICAgICBy
ZXR1cm47CiAKQEAgLTY1MCw3ICs2NTAsNyBAQCB2b2lkIFJlbmRlckZsb3dUaHJlYWQ6OmdldFJl
Z2lvblJhbmdlRm9yQm94KGNvbnN0IFJlbmRlckJveCogYm94LCBSZW5kZXJSZWdpb24qJgogICAg
IGlmIChpdCA9PSBtX3JlZ2lvblJhbmdlTWFwLmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBjb25zdCBSZW5kZXJSZWdpb25SYW5nZSYgcmFuZ2UgPSBpdC0+c2Vjb25kOworICAgIGNvbnN0
IFJlbmRlclJlZ2lvblJhbmdlJiByYW5nZSA9IGl0LT52YWx1ZTsKICAgICBzdGFydFJlZ2lvbiA9
IHJhbmdlLnN0YXJ0UmVnaW9uKCk7CiAgICAgZW5kUmVnaW9uID0gcmFuZ2UuZW5kUmVnaW9uKCk7
CiAgICAgQVNTRVJUKG1fcmVnaW9uTGlzdC5jb250YWlucyhzdGFydFJlZ2lvbikgJiYgbV9yZWdp
b25MaXN0LmNvbnRhaW5zKGVuZFJlZ2lvbikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllci5jcHAKaW5kZXggMmQ5MWZkOGIyZWUxZmEzMzFmNjU2ZDhjNjc0Y2YzOGNjZDZhYjEy
Mi4uNTViNzYxNTcyMzBmZTY0M2YzZDhmMGU1YzhhM2ZiOWU0NjU4YzMyZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCkBAIC0yODcxLDcgKzI4NzEsNyBAQCB2b2lk
IFJlbmRlckxheWVyOjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IExheW91
dFJlY3QmIGRhbWFnZVJlY3QsCiAgICAgcGFpbnRMYXllcih0aGlzLCBjb250ZXh0LCBlbmNsb3Np
bmdJbnRSZWN0KGRhbWFnZVJlY3QpLCBMYXlvdXRTaXplKCksIHBhaW50QmVoYXZpb3IsIHBhaW50
aW5nUm9vdCwgcmVnaW9uLCAmb3ZlcmxhcFRlc3RSZXF1ZXN0cywgcGFpbnRGbGFncyk7CiAgICAg
T3ZlcmxhcFRlc3RSZXF1ZXN0TWFwOjppdGVyYXRvciBlbmQgPSBvdmVybGFwVGVzdFJlcXVlc3Rz
LmVuZCgpOwogICAgIGZvciAoT3ZlcmxhcFRlc3RSZXF1ZXN0TWFwOjppdGVyYXRvciBpdCA9IG92
ZXJsYXBUZXN0UmVxdWVzdHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+
Zmlyc3QtPnNldE92ZXJsYXBUZXN0UmVzdWx0KGZhbHNlKTsKKyAgICAgICAgaXQtPmtleS0+c2V0
T3ZlcmxhcFRlc3RSZXN1bHQoZmFsc2UpOwogfQogCiB2b2lkIFJlbmRlckxheWVyOjpwYWludE92
ZXJsYXlTY3JvbGxiYXJzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgTGF5b3V0UmVj
dCYgZGFtYWdlUmVjdCwgUGFpbnRCZWhhdmlvciBwYWludEJlaGF2aW9yLCBSZW5kZXJPYmplY3Qq
IHBhaW50aW5nUm9vdCkKQEAgLTI5NDAsMTEgKzI5NDAsMTEgQEAgc3RhdGljIHZvaWQgcGVyZm9y
bU92ZXJsYXBUZXN0cyhPdmVybGFwVGVzdFJlcXVlc3RNYXAmIG92ZXJsYXBUZXN0UmVxdWVzdHMs
IGNvbnMKICAgICBPdmVybGFwVGVzdFJlcXVlc3RNYXA6Oml0ZXJhdG9yIGVuZCA9IG92ZXJsYXBU
ZXN0UmVxdWVzdHMuZW5kKCk7CiAgICAgTGF5b3V0UmVjdCBib3VuZGluZ0JveCA9IGxheWVyLT5i
b3VuZGluZ0JveChyb290TGF5ZXIpOwogICAgIGZvciAoT3ZlcmxhcFRlc3RSZXF1ZXN0TWFwOjpp
dGVyYXRvciBpdCA9IG92ZXJsYXBUZXN0UmVxdWVzdHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7Ci0gICAgICAgIGlmICghYm91bmRpbmdCb3guaW50ZXJzZWN0cyhpdC0+c2Vjb25kKSkKKyAg
ICAgICAgaWYgKCFib3VuZGluZ0JveC5pbnRlcnNlY3RzKGl0LT52YWx1ZSkpCiAgICAgICAgICAg
ICBjb250aW51ZTsKIAotICAgICAgICBpdC0+Zmlyc3QtPnNldE92ZXJsYXBUZXN0UmVzdWx0KHRy
dWUpOwotICAgICAgICBvdmVybGFwcGVkUmVxdWVzdENsaWVudHMuYXBwZW5kKGl0LT5maXJzdCk7
CisgICAgICAgIGl0LT5rZXktPnNldE92ZXJsYXBUZXN0UmVzdWx0KHRydWUpOworICAgICAgICBv
dmVybGFwcGVkUmVxdWVzdENsaWVudHMuYXBwZW5kKGl0LT5rZXkpOwogICAgIH0KICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG92ZXJsYXBwZWRSZXF1ZXN0Q2xpZW50cy5zaXplKCk7ICsraSkK
ICAgICAgICAgb3ZlcmxhcFRlc3RSZXF1ZXN0cy5yZW1vdmUob3ZlcmxhcHBlZFJlcXVlc3RDbGll
bnRzW2ldKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ckZpbHRlckluZm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmls
dGVySW5mby5jcHAKaW5kZXggYWNiZjA3ZDlkMWJmZDIwMjFjNTU0MTUyNjZkZDQ0MzA1MDU1NWE3
ZC4uY2I0YzVkNjYxMTBjOTI0MTJmMzUwZWE4OTkzMjcyY2U2MmNkN2UwOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVySW5mby5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVySW5mby5jcHAKQEAgLTU2
LDcgKzU2LDcgQEAgUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvKiBSZW5kZXJMYXllckZpbHRlckluZm86
OmZpbHRlckluZm9Gb3JSZW5kZXJMYXllcihjb25zdCBSZW4KICAgICBpZiAoIXNfZmlsdGVyTWFw
KQogICAgICAgICByZXR1cm4gMDsKICAgICBSZW5kZXJMYXllckZpbHRlckluZm9NYXA6Oml0ZXJh
dG9yIGl0ZXIgPSBzX2ZpbHRlck1hcC0+ZmluZChsYXllcik7Ci0gICAgcmV0dXJuIChpdGVyICE9
IHNfZmlsdGVyTWFwLT5lbmQoKSkgPyBpdGVyLT5zZWNvbmQgOiAwOworICAgIHJldHVybiAoaXRl
ciAhPSBzX2ZpbHRlck1hcC0+ZW5kKCkpID8gaXRlci0+dmFsdWUgOiAwOwogfQogCiBSZW5kZXJM
YXllckZpbHRlckluZm8qIFJlbmRlckxheWVyRmlsdGVySW5mbzo6Y3JlYXRlRmlsdGVySW5mb0Zv
clJlbmRlckxheWVySWZOZWVkZWQoUmVuZGVyTGF5ZXIqIGxheWVyKQpAQCAtNjcsNyArNjcsNyBA
QCBSZW5kZXJMYXllckZpbHRlckluZm8qIFJlbmRlckxheWVyRmlsdGVySW5mbzo6Y3JlYXRlRmls
dGVySW5mb0ZvclJlbmRlckxheWVySWZOZQogICAgIFJlbmRlckxheWVyRmlsdGVySW5mb01hcDo6
aXRlcmF0b3IgaXRlciA9IHNfZmlsdGVyTWFwLT5maW5kKGxheWVyKTsKICAgICBpZiAoaXRlciAh
PSBzX2ZpbHRlck1hcC0+ZW5kKCkpIHsKICAgICAgICAgQVNTRVJUKGxheWVyLT5oYXNGaWx0ZXJJ
bmZvKCkpOwotICAgICAgICByZXR1cm4gaXRlci0+c2Vjb25kOworICAgICAgICByZXR1cm4gaXRl
ci0+dmFsdWU7CiAgICAgfQogICAgIAogICAgIFJlbmRlckxheWVyRmlsdGVySW5mbyogZmlsdGVy
ID0gbmV3IFJlbmRlckxheWVyRmlsdGVySW5mbyhsYXllcik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93VGhyZWFkLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3BwCmluZGV4IDViMDI0NTNlNGM2
YzNkYmFlZDYzZGRhNTBlYTMzOTRjYmU0N2NmMjQuLmMxMmZjZjczZmQ2ZGYyNjQxYWYyMjVjOTE5
MmM3YTcyOTUyODk3OWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJOYW1lZEZsb3dUaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJOYW1lZEZsb3dUaHJlYWQuY3BwCkBAIC0xMTcsNyArMTE3LDcgQEAgYm9vbCBSZW5kZXJOYW1l
ZEZsb3dUaHJlYWQ6OmRlcGVuZHNPbihSZW5kZXJOYW1lZEZsb3dUaHJlYWQqIG90aGVyUmVuZGVy
Rmxvd1RocmUKICAgICBSZW5kZXJOYW1lZEZsb3dUaHJlYWRDb3VudGVkU2V0Ojpjb25zdF9pdGVy
YXRvciBpdGVyYXRvciA9IG1fbGF5b3V0QmVmb3JlVGhyZWFkc1NldC5iZWdpbigpOwogICAgIFJl
bmRlck5hbWVkRmxvd1RocmVhZENvdW50ZWRTZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fbGF5
b3V0QmVmb3JlVGhyZWFkc1NldC5lbmQoKTsKICAgICBmb3IgKDsgaXRlcmF0b3IgIT0gZW5kOyAr
K2l0ZXJhdG9yKSB7Ci0gICAgICAgIGNvbnN0IFJlbmRlck5hbWVkRmxvd1RocmVhZCogYmVmb3Jl
Rmxvd1RocmVhZCA9ICgqaXRlcmF0b3IpLmZpcnN0OworICAgICAgICBjb25zdCBSZW5kZXJOYW1l
ZEZsb3dUaHJlYWQqIGJlZm9yZUZsb3dUaHJlYWQgPSAoKml0ZXJhdG9yKS5rZXk7CiAgICAgICAg
IGlmIChiZWZvcmVGbG93VGhyZWFkLT5kZXBlbmRzT24ob3RoZXJSZW5kZXJGbG93VGhyZWFkKSkK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTI1MSw3ICsyNTEsNyBAQCB2b2lk
IFJlbmRlck5hbWVkRmxvd1RocmVhZDo6cmVtb3ZlRGVwZW5kZW5jeU9uRmxvd1RocmVhZChSZW5k
ZXJOYW1lZEZsb3dUaHJlYWQqCiB2b2lkIFJlbmRlck5hbWVkRmxvd1RocmVhZDo6cHVzaERlcGVu
ZGVuY2llcyhSZW5kZXJOYW1lZEZsb3dUaHJlYWRMaXN0JiBsaXN0KQogewogICAgIGZvciAoUmVu
ZGVyTmFtZWRGbG93VGhyZWFkQ291bnRlZFNldDo6aXRlcmF0b3IgaXRlciA9IG1fbGF5b3V0QmVm
b3JlVGhyZWFkc1NldC5iZWdpbigpOyBpdGVyICE9IG1fbGF5b3V0QmVmb3JlVGhyZWFkc1NldC5l
bmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIFJlbmRlck5hbWVkRmxvd1RocmVhZCogZmxvd1RocmVh
ZCA9ICgqaXRlcikuZmlyc3Q7CisgICAgICAgIFJlbmRlck5hbWVkRmxvd1RocmVhZCogZmxvd1Ro
cmVhZCA9ICgqaXRlcikua2V5OwogICAgICAgICBpZiAobGlzdC5jb250YWlucyhmbG93VGhyZWFk
KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBmbG93VGhyZWFkLT5wdXNoRGVwZW5k
ZW5jaWVzKGxpc3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clJlZ2lvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcApp
bmRleCBkYmRiZTgzZjdiNWM1ODMxZjhmOTQ0MWJmMDEwNTg0MzYxOWExMzZmLi5kNzkyYjgwMTkw
M2IxMTBjZDI4ZjUwMzVjYzdiMmVmNWU5Y2FkNDM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyUmVnaW9uLmNwcApAQCAtMjU4LDcgKzI1OCw3IEBAIFJlbmRlckJveFJlZ2lvbklu
Zm8qIFJlbmRlclJlZ2lvbjo6c2V0UmVuZGVyQm94UmVnaW9uSW5mbyhjb25zdCBSZW5kZXJCb3gq
IGJveCwKICAgICBpZiAoIW1faXNWYWxpZCB8fCAhbV9mbG93VGhyZWFkKQogICAgICAgICByZXR1
cm4gMDsKIAotICAgIE93blB0cjxSZW5kZXJCb3hSZWdpb25JbmZvPiYgYm94SW5mbyA9IG1fcmVu
ZGVyQm94UmVnaW9uSW5mby5hZGQoYm94LCBudWxscHRyKS5pdGVyYXRvci0+c2Vjb25kOworICAg
IE93blB0cjxSZW5kZXJCb3hSZWdpb25JbmZvPiYgYm94SW5mbyA9IG1fcmVuZGVyQm94UmVnaW9u
SW5mby5hZGQoYm94LCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKGJveEluZm8p
CiAgICAgICAgICpib3hJbmZvID0gUmVuZGVyQm94UmVnaW9uSW5mbyhsb2dpY2FsTGVmdEluc2V0
LCBsb2dpY2FsUmlnaHRJbnNldCwgY29udGFpbmluZ0Jsb2NrQ2hhaW5Jc0luc2V0KTsKICAgICBl
bHNlCkBAIC0zMTgsOCArMzE4LDggQEAgdm9pZCBSZW5kZXJSZWdpb246OnNldFJlZ2lvbk9iamVj
dHNSZWdpb25TdHlsZSgpCiAgICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gb2JqZWN0U3R5bGVJ
blJlZ2lvbjsKICAgICAgICAgYm9vbCBvYmplY3RSZWdpb25TdHlsZUNhY2hlZCA9IGZhbHNlOwog
ICAgICAgICBpZiAoaXQgIT0gbV9yZW5kZXJPYmplY3RSZWdpb25TdHlsZS5lbmQoKSkgewotICAg
ICAgICAgICAgb2JqZWN0U3R5bGVJblJlZ2lvbiA9IGl0LT5zZWNvbmQuc3R5bGU7Ci0gICAgICAg
ICAgICBBU1NFUlQoaXQtPnNlY29uZC5jYWNoZWQpOworICAgICAgICAgICAgb2JqZWN0U3R5bGVJ
blJlZ2lvbiA9IGl0LT52YWx1ZS5zdHlsZTsKKyAgICAgICAgICAgIEFTU0VSVChpdC0+dmFsdWUu
Y2FjaGVkKTsKICAgICAgICAgICAgIG9iamVjdFJlZ2lvblN0eWxlQ2FjaGVkID0gdHJ1ZTsKICAg
ICAgICAgfSBlbHNlCiAgICAgICAgICAgICBvYmplY3RTdHlsZUluUmVnaW9uID0gY29tcHV0ZVN0
eWxlSW5SZWdpb24ob2JqZWN0KTsKQEAgLTMzNywxMiArMzM3LDEyIEBAIHZvaWQgUmVuZGVyUmVn
aW9uOjpyZXN0b3JlUmVnaW9uT2JqZWN0c09yaWdpbmFsU3R5bGUoKQogCiAgICAgUmVuZGVyT2Jq
ZWN0UmVnaW9uU3R5bGVNYXAgdGVtcDsKICAgICBmb3IgKFJlbmRlck9iamVjdFJlZ2lvblN0eWxl
TWFwOjppdGVyYXRvciBpdGVyID0gbV9yZW5kZXJPYmplY3RSZWdpb25TdHlsZS5iZWdpbigpLCBl
bmQgPSBtX3JlbmRlck9iamVjdFJlZ2lvblN0eWxlLmVuZCgpOyBpdGVyICE9IGVuZDsgKytpdGVy
KSB7Ci0gICAgICAgIFJlbmRlck9iamVjdCogb2JqZWN0ID0gY29uc3RfY2FzdDxSZW5kZXJPYmpl
Y3QqPihpdGVyLT5maXJzdCk7CisgICAgICAgIFJlbmRlck9iamVjdCogb2JqZWN0ID0gY29uc3Rf
Y2FzdDxSZW5kZXJPYmplY3QqPihpdGVyLT5rZXkpOwogICAgICAgICBSZWZQdHI8UmVuZGVyU3R5
bGU+IG9iamVjdFJlZ2lvblN0eWxlID0gb2JqZWN0LT5zdHlsZSgpOwotICAgICAgICBSZWZQdHI8
UmVuZGVyU3R5bGU+IG9iamVjdE9yaWdpbmFsU3R5bGUgPSBpdGVyLT5zZWNvbmQuc3R5bGU7Cisg
ICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gb2JqZWN0T3JpZ2luYWxTdHlsZSA9IGl0ZXItPnZh
bHVlLnN0eWxlOwogICAgICAgICBvYmplY3QtPnNldFN0eWxlSW50ZXJuYWwob2JqZWN0T3JpZ2lu
YWxTdHlsZSk7CiAKLSAgICAgICAgYm9vbCBzaG91bGRDYWNoZVJlZ2lvblN0eWxlID0gaXRlci0+
c2Vjb25kLmNhY2hlZDsKKyAgICAgICAgYm9vbCBzaG91bGRDYWNoZVJlZ2lvblN0eWxlID0gaXRl
ci0+dmFsdWUuY2FjaGVkOwogICAgICAgICBpZiAoIXNob3VsZENhY2hlUmVnaW9uU3R5bGUpIHsK
ICAgICAgICAgICAgIC8vIENoZWNrIHdoZXRoZXIgd2Ugc2hvdWxkIGNhY2hlIHRoZSBjb21wdXRl
ZCBzdHlsZSBpbiByZWdpb24uCiAgICAgICAgICAgICB1bnNpZ25lZCBjaGFuZ2VkQ29udGV4dFNl
bnNpdGl2ZVByb3BlcnRpZXMgPSBDb250ZXh0U2Vuc2l0aXZlUHJvcGVydHlOb25lOwpAQCAtMzk4
LDcgKzM5OCw3IEBAIHZvaWQgUmVuZGVyUmVnaW9uOjpjb21wdXRlQ2hpbGRyZW5TdHlsZUluUmVn
aW9uKGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0KQogICAgICAgICBSZWZQdHI8UmVuZGVyU3R5
bGU+IGNoaWxkU3R5bGVJblJlZ2lvbjsKICAgICAgICAgYm9vbCBvYmplY3RSZWdpb25TdHlsZUNh
Y2hlZCA9IGZhbHNlOwogICAgICAgICBpZiAoaXQgIT0gbV9yZW5kZXJPYmplY3RSZWdpb25TdHls
ZS5lbmQoKSkgewotICAgICAgICAgICAgY2hpbGRTdHlsZUluUmVnaW9uID0gaXQtPnNlY29uZC5z
dHlsZTsKKyAgICAgICAgICAgIGNoaWxkU3R5bGVJblJlZ2lvbiA9IGl0LT52YWx1ZS5zdHlsZTsK
ICAgICAgICAgICAgIG9iamVjdFJlZ2lvblN0eWxlQ2FjaGVkID0gdHJ1ZTsKICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgIGlmIChjaGlsZC0+aXNBbm9ueW1vdXMoKSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKaW5kZXggNWMwOGU3YTFj
ZTQwMDQ2ZmNlZGU5MTQ0NTcyMmM5YTJmY2M1MTllZC4uYmM0ZDkwNDRmNmU4ZDNhN2M2M2IzMjk2
ZjVlZjM3MmU1MzkxMTJlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRhYmxlU2VjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRhYmxlU2VjdGlvbi5jcHAKQEAgLTE0NTAsNyArMTQ1MCw3IEBAIENvbGxhcHNlZEJvcmRlclZh
bHVlJiBSZW5kZXJUYWJsZVNlY3Rpb246OmNhY2hlZENvbGxhcHNlZEJvcmRlcihjb25zdCBSZW5k
ZXJUYWJsCiAgICAgQVNTRVJUKHRhYmxlKCktPmNvbGxhcHNlQm9yZGVycygpKTsKICAgICBIYXNo
TWFwPHBhaXI8Y29uc3QgUmVuZGVyVGFibGVDZWxsKiwgaW50PiwgQ29sbGFwc2VkQm9yZGVyVmFs
dWU+OjppdGVyYXRvciBpdCA9IG1fY2VsbHNDb2xsYXBzZWRCb3JkZXJzLmZpbmQobWFrZV9wYWly
KGNlbGwsIHNpZGUpKTsKICAgICBBU1NFUlQoaXQgIT0gbV9jZWxsc0NvbGxhcHNlZEJvcmRlcnMu
ZW5kKCkpOwotICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgIHJldHVybiBpdC0+dmFsdWU7CiB9
CiAKIFJlbmRlclRhYmxlU2VjdGlvbiogUmVuZGVyVGFibGVTZWN0aW9uOjpjcmVhdGVBbm9ueW1v
dXNXaXRoUGFyZW50UmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0KiBwYXJlbnQpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0gYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KaW5kZXggMGJjOTgwNGZiNzU5YjEx
ZWQ5NmE0MDkxMDZhMDExNjc5OGMyMDRiZS4uNjQwNGQyYWZjMTQ2ZTgxNTU4MDViOWVhZTgwODRi
MmE0MGI4MWYzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5t
bQpAQCAtMzgwLDcgKzM4MCw3IEBAIENvbG9yIFJlbmRlclRoZW1lTWFjOjpzeXN0ZW1Db2xvcihp
bnQgY3NzVmFsdWVJZCkgY29uc3QKICAgICB7CiAgICAgICAgIEhhc2hNYXA8aW50LCBSR0JBMzI+
OjppdGVyYXRvciBpdCA9IG1fc3lzdGVtQ29sb3JDYWNoZS5maW5kKGNzc1ZhbHVlSWQpOwogICAg
ICAgICBpZiAoaXQgIT0gbV9zeXN0ZW1Db2xvckNhY2hlLmVuZCgpKQotICAgICAgICAgICAgcmV0
dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwogICAgIH0KIAog
ICAgIENvbG9yIGNvbG9yOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCmlu
ZGV4IDhjYzM0YTMzMGRjODgyNTZkNTUxODBlMGI1NWIzNDQ4N2Y3OGVjYjUuLjhmZGM5NGJmY2Q0
NjM3Zjk0NzljOWNlZWRhMzA3MjU3MzEwMGYzMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVmlldy5jcHAKQEAgLTQzOCw3ICs0MzgsNyBAQCBJbnRSZWN0IFJlbmRlclZpZXc6OnNl
bGVjdGlvbkJvdW5kcyhib29sIGNsaXBUb1Zpc2libGVDb250ZW50KSBjb25zdAogICAgICAgICAg
ICAgc2VsZWN0ZWRPYmplY3RzLnNldChvcywgYWRvcHRQdHIobmV3IFJlbmRlclNlbGVjdGlvbklu
Zm8ob3MsIGNsaXBUb1Zpc2libGVDb250ZW50KSkpOwogICAgICAgICAgICAgUmVuZGVyQmxvY2sq
IGNiID0gb3MtPmNvbnRhaW5pbmdCbG9jaygpOwogICAgICAgICAgICAgd2hpbGUgKGNiICYmICFj
Yi0+aXNSZW5kZXJWaWV3KCkpIHsKLSAgICAgICAgICAgICAgICBPd25QdHI8UmVuZGVyU2VsZWN0
aW9uSW5mbz4mIGJsb2NrSW5mbyA9IHNlbGVjdGVkT2JqZWN0cy5hZGQoY2IsIG51bGxwdHIpLml0
ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgICAgICAgICAgT3duUHRyPFJlbmRlclNlbGVjdGlvbklu
Zm8+JiBibG9ja0luZm8gPSBzZWxlY3RlZE9iamVjdHMuYWRkKGNiLCBudWxscHRyKS5pdGVyYXRv
ci0+dmFsdWU7CiAgICAgICAgICAgICAgICAgaWYgKGJsb2NrSW5mbykKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgYmxvY2tJbmZvID0gYWRvcHRQdHIobmV3IFJl
bmRlclNlbGVjdGlvbkluZm8oY2IsIGNsaXBUb1Zpc2libGVDb250ZW50KSk7CkBAIC00NTMsNyAr
NDUzLDcgQEAgSW50UmVjdCBSZW5kZXJWaWV3OjpzZWxlY3Rpb25Cb3VuZHMoYm9vbCBjbGlwVG9W
aXNpYmxlQ29udGVudCkgY29uc3QKICAgICBMYXlvdXRSZWN0IHNlbFJlY3Q7CiAgICAgU2VsZWN0
aW9uTWFwOjppdGVyYXRvciBlbmQgPSBzZWxlY3RlZE9iamVjdHMuZW5kKCk7CiAgICAgZm9yIChT
ZWxlY3Rpb25NYXA6Oml0ZXJhdG9yIGkgPSBzZWxlY3RlZE9iamVjdHMuYmVnaW4oKTsgaSAhPSBl
bmQ7ICsraSkgewotICAgICAgICBSZW5kZXJTZWxlY3Rpb25JbmZvKiBpbmZvID0gaS0+c2Vjb25k
LmdldCgpOworICAgICAgICBSZW5kZXJTZWxlY3Rpb25JbmZvKiBpbmZvID0gaS0+dmFsdWUuZ2V0
KCk7CiAgICAgICAgIC8vIFJlbmRlclNlbGVjdGlvbkluZm86OnJlY3QoKSBpcyBpbiB0aGUgY29v
cmRpbmF0ZXMgb2YgdGhlIHJlcGFpbnRDb250YWluZXIsIHNvIG1hcCB0byBwYWdlIGNvb3JkaW5h
dGVzLgogICAgICAgICBMYXlvdXRSZWN0IGN1cnJSZWN0ID0gaW5mby0+cmVjdCgpOwogICAgICAg
ICBpZiAoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIgPSBpbmZvLT5yZXBh
aW50Q29udGFpbmVyKCkpIHsKQEAgLTUxOCw3ICs1MTgsNyBAQCB2b2lkIFJlbmRlclZpZXc6OnNl
dFNlbGVjdGlvbihSZW5kZXJPYmplY3QqIHN0YXJ0LCBpbnQgc3RhcnRQb3MsIFJlbmRlck9iamVj
dCogZQogICAgICAgICAgICAgaWYgKGJsb2NrUmVwYWludE1vZGUgPT0gUmVwYWludE5ld1hPUk9s
ZCkgewogICAgICAgICAgICAgICAgIFJlbmRlckJsb2NrKiBjYiA9IG9zLT5jb250YWluaW5nQmxv
Y2soKTsKICAgICAgICAgICAgICAgICB3aGlsZSAoY2IgJiYgIWNiLT5pc1JlbmRlclZpZXcoKSkg
ewotICAgICAgICAgICAgICAgICAgICBPd25QdHI8UmVuZGVyQmxvY2tTZWxlY3Rpb25JbmZvPiYg
YmxvY2tJbmZvID0gb2xkU2VsZWN0ZWRCbG9ja3MuYWRkKGNiLCBudWxscHRyKS5pdGVyYXRvci0+
c2Vjb25kOworICAgICAgICAgICAgICAgICAgICBPd25QdHI8UmVuZGVyQmxvY2tTZWxlY3Rpb25J
bmZvPiYgYmxvY2tJbmZvID0gb2xkU2VsZWN0ZWRCbG9ja3MuYWRkKGNiLCBudWxscHRyKS5pdGVy
YXRvci0+dmFsdWU7CiAgICAgICAgICAgICAgICAgICAgIGlmIChibG9ja0luZm8pCiAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgYmxvY2tJbmZvID0g
YWRvcHRQdHIobmV3IFJlbmRlckJsb2NrU2VsZWN0aW9uSW5mbyhjYikpOwpAQCAtNTMzLDcgKzUz
Myw3IEBAIHZvaWQgUmVuZGVyVmlldzo6c2V0U2VsZWN0aW9uKFJlbmRlck9iamVjdCogc3RhcnQs
IGludCBzdGFydFBvcywgUmVuZGVyT2JqZWN0KiBlCiAgICAgLy8gTm93IGNsZWFyIHRoZSBzZWxl
Y3Rpb24uCiAgICAgU2VsZWN0ZWRPYmplY3RNYXA6Oml0ZXJhdG9yIG9sZE9iamVjdHNFbmQgPSBv
bGRTZWxlY3RlZE9iamVjdHMuZW5kKCk7CiAgICAgZm9yIChTZWxlY3RlZE9iamVjdE1hcDo6aXRl
cmF0b3IgaSA9IG9sZFNlbGVjdGVkT2JqZWN0cy5iZWdpbigpOyBpICE9IG9sZE9iamVjdHNFbmQ7
ICsraSkKLSAgICAgICAgaS0+Zmlyc3QtPnNldFNlbGVjdGlvblN0YXRlSWZOZWVkZWQoU2VsZWN0
aW9uTm9uZSk7CisgICAgICAgIGktPmtleS0+c2V0U2VsZWN0aW9uU3RhdGVJZk5lZWRlZChTZWxl
Y3Rpb25Ob25lKTsKIAogICAgIC8vIHNldCBzZWxlY3Rpb24gc3RhcnQgYW5kIGVuZAogICAgIG1f
c2VsZWN0aW9uU3RhcnQgPSBzdGFydDsKQEAgLTU3MSw3ICs1NzEsNyBAQCB2b2lkIFJlbmRlclZp
ZXc6OnNldFNlbGVjdGlvbihSZW5kZXJPYmplY3QqIHN0YXJ0LCBpbnQgc3RhcnRQb3MsIFJlbmRl
ck9iamVjdCogZQogICAgICAgICAgICAgbmV3U2VsZWN0ZWRPYmplY3RzLnNldChvLCBhZG9wdFB0
cihuZXcgUmVuZGVyU2VsZWN0aW9uSW5mbyhvLCB0cnVlKSkpOwogICAgICAgICAgICAgUmVuZGVy
QmxvY2sqIGNiID0gby0+Y29udGFpbmluZ0Jsb2NrKCk7CiAgICAgICAgICAgICB3aGlsZSAoY2Ig
JiYgIWNiLT5pc1JlbmRlclZpZXcoKSkgewotICAgICAgICAgICAgICAgIE93blB0cjxSZW5kZXJC
bG9ja1NlbGVjdGlvbkluZm8+JiBibG9ja0luZm8gPSBuZXdTZWxlY3RlZEJsb2Nrcy5hZGQoY2Is
IG51bGxwdHIpLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgICAgICAgICAgT3duUHRyPFJlbmRl
ckJsb2NrU2VsZWN0aW9uSW5mbz4mIGJsb2NrSW5mbyA9IG5ld1NlbGVjdGVkQmxvY2tzLmFkZChj
YiwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwogICAgICAgICAgICAgICAgIGlmIChibG9ja0lu
Zm8pCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGJsb2NrSW5m
byA9IGFkb3B0UHRyKG5ldyBSZW5kZXJCbG9ja1NlbGVjdGlvbkluZm8oY2IpKTsKQEAgLTU4OSw5
ICs1ODksOSBAQCB2b2lkIFJlbmRlclZpZXc6OnNldFNlbGVjdGlvbihSZW5kZXJPYmplY3QqIHN0
YXJ0LCBpbnQgc3RhcnRQb3MsIFJlbmRlck9iamVjdCogZQogCiAgICAgLy8gSGF2ZSBhbnkgb2Yg
dGhlIG9sZCBzZWxlY3RlZCBvYmplY3RzIGNoYW5nZWQgY29tcGFyZWQgdG8gdGhlIG5ldyBzZWxl
Y3Rpb24/CiAgICAgZm9yIChTZWxlY3RlZE9iamVjdE1hcDo6aXRlcmF0b3IgaSA9IG9sZFNlbGVj
dGVkT2JqZWN0cy5iZWdpbigpOyBpICE9IG9sZE9iamVjdHNFbmQ7ICsraSkgewotICAgICAgICBS
ZW5kZXJPYmplY3QqIG9iaiA9IGktPmZpcnN0OworICAgICAgICBSZW5kZXJPYmplY3QqIG9iaiA9
IGktPmtleTsKICAgICAgICAgUmVuZGVyU2VsZWN0aW9uSW5mbyogbmV3SW5mbyA9IG5ld1NlbGVj
dGVkT2JqZWN0cy5nZXQob2JqKTsKLSAgICAgICAgUmVuZGVyU2VsZWN0aW9uSW5mbyogb2xkSW5m
byA9IGktPnNlY29uZC5nZXQoKTsKKyAgICAgICAgUmVuZGVyU2VsZWN0aW9uSW5mbyogb2xkSW5m
byA9IGktPnZhbHVlLmdldCgpOwogICAgICAgICBpZiAoIW5ld0luZm8gfHwgb2xkSW5mby0+cmVj
dCgpICE9IG5ld0luZm8tPnJlY3QoKSB8fCBvbGRJbmZvLT5zdGF0ZSgpICE9IG5ld0luZm8tPnN0
YXRlKCkgfHwKICAgICAgICAgICAgIChtX3NlbGVjdGlvblN0YXJ0ID09IG9iaiAmJiBvbGRTdGFy
dFBvcyAhPSBtX3NlbGVjdGlvblN0YXJ0UG9zKSB8fAogICAgICAgICAgICAgKG1fc2VsZWN0aW9u
RW5kID09IG9iaiAmJiBvbGRFbmRQb3MgIT0gbV9zZWxlY3Rpb25FbmRQb3MpKSB7CkBAIC02MDYs
MTQgKzYwNiwxNCBAQCB2b2lkIFJlbmRlclZpZXc6OnNldFNlbGVjdGlvbihSZW5kZXJPYmplY3Qq
IHN0YXJ0LCBpbnQgc3RhcnRQb3MsIFJlbmRlck9iamVjdCogZQogICAgIC8vIEFueSBuZXcgb2Jq
ZWN0cyB0aGF0IHJlbWFpbiB3ZXJlIG5vdCBmb3VuZCBpbiB0aGUgb2xkIG9iamVjdHMgZGljdCwg
YW5kIHNvIHRoZXkgbmVlZCB0byBiZSB1cGRhdGVkLgogICAgIFNlbGVjdGVkT2JqZWN0TWFwOjpp
dGVyYXRvciBuZXdPYmplY3RzRW5kID0gbmV3U2VsZWN0ZWRPYmplY3RzLmVuZCgpOwogICAgIGZv
ciAoU2VsZWN0ZWRPYmplY3RNYXA6Oml0ZXJhdG9yIGkgPSBuZXdTZWxlY3RlZE9iamVjdHMuYmVn
aW4oKTsgaSAhPSBuZXdPYmplY3RzRW5kOyArK2kpCi0gICAgICAgIGktPnNlY29uZC0+cmVwYWlu
dCgpOworICAgICAgICBpLT52YWx1ZS0+cmVwYWludCgpOwogCiAgICAgLy8gSGF2ZSBhbnkgb2Yg
dGhlIG9sZCBibG9ja3MgY2hhbmdlZD8KICAgICBTZWxlY3RlZEJsb2NrTWFwOjppdGVyYXRvciBv
bGRCbG9ja3NFbmQgPSBvbGRTZWxlY3RlZEJsb2Nrcy5lbmQoKTsKICAgICBmb3IgKFNlbGVjdGVk
QmxvY2tNYXA6Oml0ZXJhdG9yIGkgPSBvbGRTZWxlY3RlZEJsb2Nrcy5iZWdpbigpOyBpICE9IG9s
ZEJsb2Nrc0VuZDsgKytpKSB7Ci0gICAgICAgIFJlbmRlckJsb2NrKiBibG9jayA9IGktPmZpcnN0
OworICAgICAgICBSZW5kZXJCbG9jayogYmxvY2sgPSBpLT5rZXk7CiAgICAgICAgIFJlbmRlckJs
b2NrU2VsZWN0aW9uSW5mbyogbmV3SW5mbyA9IG5ld1NlbGVjdGVkQmxvY2tzLmdldChibG9jayk7
Ci0gICAgICAgIFJlbmRlckJsb2NrU2VsZWN0aW9uSW5mbyogb2xkSW5mbyA9IGktPnNlY29uZC5n
ZXQoKTsKKyAgICAgICAgUmVuZGVyQmxvY2tTZWxlY3Rpb25JbmZvKiBvbGRJbmZvID0gaS0+dmFs
dWUuZ2V0KCk7CiAgICAgICAgIGlmICghbmV3SW5mbyB8fCBvbGRJbmZvLT5yZWN0cygpICE9IG5l
d0luZm8tPnJlY3RzKCkgfHwgb2xkSW5mby0+c3RhdGUoKSAhPSBuZXdJbmZvLT5zdGF0ZSgpKSB7
CiAgICAgICAgICAgICBvbGRJbmZvLT5yZXBhaW50KCk7CiAgICAgICAgICAgICBpZiAobmV3SW5m
bykgewpAQCAtNjI2LDcgKzYyNiw3IEBAIHZvaWQgUmVuZGVyVmlldzo6c2V0U2VsZWN0aW9uKFJl
bmRlck9iamVjdCogc3RhcnQsIGludCBzdGFydFBvcywgUmVuZGVyT2JqZWN0KiBlCiAgICAgLy8g
QW55IG5ldyBibG9ja3MgdGhhdCByZW1haW4gd2VyZSBub3QgZm91bmQgaW4gdGhlIG9sZCBibG9j
a3MgZGljdCwgYW5kIHNvIHRoZXkgbmVlZCB0byBiZSB1cGRhdGVkLgogICAgIFNlbGVjdGVkQmxv
Y2tNYXA6Oml0ZXJhdG9yIG5ld0Jsb2Nrc0VuZCA9IG5ld1NlbGVjdGVkQmxvY2tzLmVuZCgpOwog
ICAgIGZvciAoU2VsZWN0ZWRCbG9ja01hcDo6aXRlcmF0b3IgaSA9IG5ld1NlbGVjdGVkQmxvY2tz
LmJlZ2luKCk7IGkgIT0gbmV3QmxvY2tzRW5kOyArK2kpCi0gICAgICAgIGktPnNlY29uZC0+cmVw
YWludCgpOworICAgICAgICBpLT52YWx1ZS0+cmVwYWludCgpOwogCiAgICAgbV9mcmFtZVZpZXct
PmVuZERlZmVycmVkUmVwYWludHMoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
cldpZGdldC5jcHAKaW5kZXggZmM0ZjJmMzVhM2U3NzBkMDRhYzRjNmNiMjBhMzMxMjQ4MTNmZDhi
Ny4uNWJiZmZlNGJlYTc2NmI3ZDYyM2NiODZjMTFmOTNhOGVjYTM3MmU4NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKQEAgLTcwLDkgKzcwLDkgQEAgdm9pZCBS
ZW5kZXJXaWRnZXQ6OnJlc3VtZVdpZGdldEhpZXJhcmNoeVVwZGF0ZXMoKQogICAgICAgICB3aWRn
ZXROZXdQYXJlbnRNYXAoKS5jbGVhcigpOwogICAgICAgICBXaWRnZXRUb1BhcmVudE1hcDo6aXRl
cmF0b3IgZW5kID0gbWFwLmVuZCgpOwogICAgICAgICBmb3IgKFdpZGdldFRvUGFyZW50TWFwOjpp
dGVyYXRvciBpdCA9IG1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAg
IFdpZGdldCogY2hpbGQgPSBpdC0+Zmlyc3QuZ2V0KCk7CisgICAgICAgICAgICBXaWRnZXQqIGNo
aWxkID0gaXQtPmtleS5nZXQoKTsKICAgICAgICAgICAgIFNjcm9sbFZpZXcqIGN1cnJlbnRQYXJl
bnQgPSBjaGlsZC0+cGFyZW50KCk7Ci0gICAgICAgICAgICBGcmFtZVZpZXcqIG5ld1BhcmVudCA9
IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICBGcmFtZVZpZXcqIG5ld1BhcmVudCA9IGl0LT52YWx1
ZTsKICAgICAgICAgICAgIGlmIChuZXdQYXJlbnQgIT0gY3VycmVudFBhcmVudCkgewogICAgICAg
ICAgICAgICAgIGlmIChjdXJyZW50UGFyZW50KQogICAgICAgICAgICAgICAgICAgICBjdXJyZW50
UGFyZW50LT5yZW1vdmVDaGlsZChjaGlsZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9v
dElubGluZUJveC5jcHAKaW5kZXggNDMxM2ZhNzM1YTE2YWM2OWI5MTVjMTJlMGEzM2UyZWE1OWE2
NDQyZC4uMmMxODJlMWQ3ZmE4ZWVhMzY3NmJlYmJkODFiZTExYjVjMzRiMzZhYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcApAQCAtNzU1LDggKzc1NSw4IEBA
IHZvaWQgUm9vdElubGluZUJveDo6YXNjZW50QW5kRGVzY2VudEZvckJveChJbmxpbmVCb3gqIGJv
eCwgR2x5cGhPdmVyZmxvd0FuZEZhbGxiCiAgICAgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxv
dyA9IDA7CiAgICAgaWYgKGJveC0+aXNUZXh0KCkpIHsKICAgICAgICAgR2x5cGhPdmVyZmxvd0Fu
ZEZhbGxiYWNrRm9udHNNYXA6Oml0ZXJhdG9yIGl0ID0gdGV4dEJveERhdGFNYXAuZmluZCh0b0lu
bGluZVRleHRCb3goYm94KSk7Ci0gICAgICAgIHVzZWRGb250cyA9IGl0ID09IHRleHRCb3hEYXRh
TWFwLmVuZCgpID8gMCA6ICZpdC0+c2Vjb25kLmZpcnN0OwotICAgICAgICBnbHlwaE92ZXJmbG93
ID0gaXQgPT0gdGV4dEJveERhdGFNYXAuZW5kKCkgPyAwIDogJml0LT5zZWNvbmQuc2Vjb25kOwor
ICAgICAgICB1c2VkRm9udHMgPSBpdCA9PSB0ZXh0Qm94RGF0YU1hcC5lbmQoKSA/IDAgOiAmaXQt
PnZhbHVlLmZpcnN0OworICAgICAgICBnbHlwaE92ZXJmbG93ID0gaXQgPT0gdGV4dEJveERhdGFN
YXAuZW5kKCkgPyAwIDogJml0LT52YWx1ZS5zZWNvbmQ7CiAgICAgfQogICAgICAgICAKICAgICBi
b29sIGluY2x1ZGVMZWFkaW5nID0gaW5jbHVkZUxlYWRpbmdGb3JCb3goYm94KTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9WZXJ0aWNhbFBvc2l0aW9uQ2FjaGUuaCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9WZXJ0aWNhbFBvc2l0aW9uQ2FjaGUuaAppbmRleCBiYjM5
ODc3NzIxZGE3MDVjMzdiZDNiODgxOTAyNGNkMjdlMzZlNWNlLi5iN2NkN2UwODVlN2Y5YmVkYjUy
OGY2MmRlZWY1N2E3YmI4YWE1YmUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvVmVydGljYWxQb3NpdGlvbkNhY2hlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1ZlcnRpY2FsUG9zaXRpb25DYWNoZS5oCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKICAgICAg
ICAgY29uc3QgSGFzaE1hcDxSZW5kZXJPYmplY3QqLCBpbnQ+Ojpjb25zdF9pdGVyYXRvciBpdCA9
IG1hcFRvQ2hlY2suZmluZChyZW5kZXJlcik7CiAgICAgICAgIGlmIChpdCA9PSBtYXBUb0NoZWNr
LmVuZCgpKQogICAgICAgICAgICAgcmV0dXJuIFBvc2l0aW9uVW5kZWZpbmVkOwotICAgICAgICBy
ZXR1cm4gaXQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKICAgICB9CiAgICAg
CiAgICAgdm9pZCBzZXQoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgRm9udEJhc2VsaW5lIGJhc2Vs
aW5lVHlwZSwgaW50IHBvc2l0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1dyYXBTaGFwZUluZm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1dyYXBTaGFw
ZUluZm8uY3BwCmluZGV4IDE1NDcwNjZiMjlkZDRhNzNkOThmYWIzMzE2YzZkMDIzZTg2ZTA1MTAu
LmFiZDM1NWViNDE5MDI1OWYwNmJhYjc5ZjllYzEwYWQzN2E5ZjI3YmIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9XcmFwU2hhcGVJbmZvLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvV3JhcFNoYXBlSW5mby5jcHAKQEAgLTYwLDcgKzYwLDcgQEAgV3JhcFNo
YXBlSW5mbzo6fldyYXBTaGFwZUluZm8oKQogV3JhcFNoYXBlSW5mbyogV3JhcFNoYXBlSW5mbzo6
ZW5zdXJlV3JhcFNoYXBlSW5mb0ZvclJlbmRlckJsb2NrKFJlbmRlckJsb2NrKiBibG9jaykKIHsK
ICAgICBXcmFwU2hhcGVJbmZvTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gd3JhcFNoYXBlSW5mb01h
cCgpLmFkZChibG9jaywgY3JlYXRlKGJsb2NrKSk7Ci0gICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRv
ci0+c2Vjb25kLmdldCgpOworICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgp
OwogfQogCiBXcmFwU2hhcGVJbmZvKiBXcmFwU2hhcGVJbmZvOjp3cmFwU2hhcGVJbmZvRm9yUmVu
ZGVyQmxvY2soY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAKaW5kZXggNDU0ZjdhYTZk
MDdiNmJkMzEyMzIzNmJlZmNhNDk5ZWNmZTVhMDdhMC4uMjM3MWQxYWJmOWM5NmJhNGE0NjI4Yjkz
Y2E0OTQyYWY3YTA3Yjk1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwCkBAIC0xNTgsNyArMTU4LDcgQEAgYm9vbCBSZW5k
ZXJTVkdJbmxpbmVUZXh0OjpjaGFyYWN0ZXJTdGFydHNOZXdUZXh0Q2h1bmsoaW50IHBvc2l0aW9u
KSBjb25zdAogICAgIGlmIChpdCA9PSBtX2xheW91dEF0dHJpYnV0ZXMuY2hhcmFjdGVyRGF0YU1h
cCgpLmVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gaXQtPnNlY29u
ZC54ICE9IFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzOjplbXB0eVZhbHVlKCkgfHwgaXQtPnNlY29u
ZC55ICE9IFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzOjplbXB0eVZhbHVlKCk7CisgICAgcmV0dXJu
IGl0LT52YWx1ZS54ICE9IFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzOjplbXB0eVZhbHVlKCkgfHwg
aXQtPnZhbHVlLnkgIT0gU1ZHVGV4dExheW91dEF0dHJpYnV0ZXM6OmVtcHR5VmFsdWUoKTsKIH0K
IAogVmlzaWJsZVBvc2l0aW9uIFJlbmRlclNWR0lubGluZVRleHQ6OnBvc2l0aW9uRm9yUG9pbnQo
Y29uc3QgTGF5b3V0UG9pbnQmIHBvaW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcAppbmRleCBlZTZhNDlkYjg4
YTlmZDZjNzcwNWZhMThiNmVlY2E4ODE2ZTFhMmViLi4zODMyYjJiMDFlMzA1MGE1Zjg0M2M2NWYx
Y2RkY2IwZWMxNTNhOTY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcApAQCAtMzM4LDcgKzMzOCw3IEBAIHZv
aWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQoUmVu
ZGVyT2JqZWN0KiBvYmplY3QsIGNvCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRy
aWJ1dGVzKiBwcmltaXR2ZSA9IHN0YXRpY19jYXN0PFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJk
QXR0cmlidXRlcyo+KG9iamVjdC0+bm9kZSgpKTsKIAogICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKLSAgICAgICAgRmlsdGVyRGF0YSogZmlsdGVyRGF0YSA9IGl0LT5zZWNvbmQ7CisgICAg
ICAgIEZpbHRlckRhdGEqIGZpbHRlckRhdGEgPSBpdC0+dmFsdWU7CiAgICAgICAgIGlmICghZmls
dGVyRGF0YS0+YnVpbGRlZCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCkBAIC0zNTMsNyArMzUz
LDcgQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cHJpbWl0aXZlQXR0cmlidXRlQ2hh
bmdlZChSZW5kZXJPYmplY3QqIG9iamVjdCwgY28KICAgICAgICAgYnVpbGRlci0+Y2xlYXJSZXN1
bHRzUmVjdXJzaXZlKGVmZmVjdCk7CiAKICAgICAgICAgLy8gUmVwYWludCB0aGUgaW1hZ2Ugb24g
dGhlIHNjcmVlbi4KLSAgICAgICAgbWFya0NsaWVudEZvckludmFsaWRhdGlvbihpdC0+Zmlyc3Qs
IFJlcGFpbnRJbnZhbGlkYXRpb24pOworICAgICAgICBtYXJrQ2xpZW50Rm9ySW52YWxpZGF0aW9u
KGl0LT5rZXksIFJlcGFpbnRJbnZhbGlkYXRpb24pOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVu
dC5jcHAKaW5kZXggNThlMDA3OWIyMmNiMmM1YzE3ZDhmMmQ0ZDczY2JiYTIxMGFhOWE1ZS4uMzBj
ZTFiOGNiNGY5NzhjMDBkY2JkYTE3ZGZiNTU3MjNjZmM1ODA4MSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQu
Y3BwCkBAIC0xNDAsNyArMTQwLDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50Ojph
cHBseVJlc291cmNlKFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5kZXJTdHlsZSoKICAgICBpZiAo
Z3JhZGllbnRVbml0cygpID09IFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VO
RElOR0JPWCAmJiBvYmplY3RCb3VuZGluZ0JveC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIE93blB0cjxHcmFkaWVudERhdGE+JiBncmFkaWVudERhdGEgPSBtX2dyYWRp
ZW50TWFwLmFkZChvYmplY3QsIG51bGxwdHIpLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgT3duUHRy
PEdyYWRpZW50RGF0YT4mIGdyYWRpZW50RGF0YSA9IG1fZ3JhZGllbnRNYXAuYWRkKG9iamVjdCwg
bnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghZ3JhZGllbnREYXRhKQogICAgICAg
ICBncmFkaWVudERhdGEgPSBhZG9wdFB0cihuZXcgR3JhZGllbnREYXRhKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRl
cm4uY3BwCmluZGV4IGI0YWY5OTkxODU1MmExNTQ4NTJiYjJhNGI0N2IwMzBlZGE2YTUzMTYuLjNh
MTg4MmFjZjgyMTcyMjg2YjIzYmI1NDJiZTQwNjZhM2JhY2NjYzcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5j
cHAKQEAgLTg0LDcgKzg0LDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46OmFwcGx5
UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiBvYmplY3QsIFJlbmRlclN0eWxlKgogICAgIGlmIChtX2F0
dHJpYnV0ZXMucGF0dGVyblVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09C
SkVDVEJPVU5ESU5HQk9YICYmIG9iamVjdEJvdW5kaW5nQm94LmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgT3duUHRyPFBhdHRlcm5EYXRhPiYgcGF0dGVybkRhdGEgPSBt
X3BhdHRlcm5NYXAuYWRkKG9iamVjdCwgbnVsbHB0cikuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBP
d25QdHI8UGF0dGVybkRhdGE+JiBwYXR0ZXJuRGF0YSA9IG1fcGF0dGVybk1hcC5hZGQob2JqZWN0
LCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCFwYXR0ZXJuRGF0YSkKICAgICAg
ICAgcGF0dGVybkRhdGEgPSBhZG9wdFB0cihuZXcgUGF0dGVybkRhdGEpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlc0NhY2hlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzQ2FjaGUuY3BwCmluZGV4IDI5
N2MwN2I2YWQ0MDlhMjdlNjM1ODU2MDAwYzlhZDRiOTA1YjQzNTQuLjhiNDhjZjUzZTc5OWEwYjdk
ZTJiNTRhNGM3MTUyZTA5Mjc1MzljMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHUmVzb3VyY2VzQ2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHUmVzb3VyY2VzQ2FjaGUuY3BwCkBAIC0xOTgsMTEgKzE5OCwxMSBAQCB2b2lk
IFNWR1Jlc291cmNlc0NhY2hlOjpyZXNvdXJjZURlc3Ryb3llZChSZW5kZXJTVkdSZXNvdXJjZUNv
bnRhaW5lciogcmVzb3VyY2UpCiAKICAgICBIYXNoTWFwPGNvbnN0IFJlbmRlck9iamVjdCosIFNW
R1Jlc291cmNlcyo+OjppdGVyYXRvciBlbmQgPSBjYWNoZS0+bV9jYWNoZS5lbmQoKTsKICAgICBm
b3IgKEhhc2hNYXA8Y29uc3QgUmVuZGVyT2JqZWN0KiwgU1ZHUmVzb3VyY2VzKj46Oml0ZXJhdG9y
IGl0ID0gY2FjaGUtPm1fY2FjaGUuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAg
IGl0LT5zZWNvbmQtPnJlc291cmNlRGVzdHJveWVkKHJlc291cmNlKTsKKyAgICAgICAgaXQtPnZh
bHVlLT5yZXNvdXJjZURlc3Ryb3llZChyZXNvdXJjZSk7CiAKICAgICAgICAgLy8gTWFyayB1c2Vy
cyBvZiBkZXN0cm95ZWQgcmVzb3VyY2VzIGFzIHBlbmRpbmcgcmVzb2x1dGlvbiBiYXNlZCBvbiB0
aGUgaWQgb2YgdGhlIG9sZCByZXNvdXJjZS4KICAgICAgICAgRWxlbWVudCogcmVzb3VyY2VFbGVt
ZW50ID0gdG9FbGVtZW50KHJlc291cmNlLT5ub2RlKCkpOwotICAgICAgICBTVkdTdHlsZWRFbGVt
ZW50KiBjbGllbnRFbGVtZW50ID0gdG9TVkdTdHlsZWRFbGVtZW50KGl0LT5maXJzdC0+bm9kZSgp
KTsKKyAgICAgICAgU1ZHU3R5bGVkRWxlbWVudCogY2xpZW50RWxlbWVudCA9IHRvU1ZHU3R5bGVk
RWxlbWVudChpdC0+a2V5LT5ub2RlKCkpOwogICAgICAgICBTVkdEb2N1bWVudEV4dGVuc2lvbnMq
IGV4dGVuc2lvbnMgPSBjbGllbnRFbGVtZW50LT5kb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNp
b25zKCk7CiAKICAgICAgICAgZXh0ZW5zaW9ucy0+YWRkUGVuZGluZ1Jlc291cmNlKHJlc291cmNl
RWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OmlkQXR0ciksIGNsaWVudEVsZW1l
bnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSb290SW5s
aW5lQm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUm9vdElubGluZUJv
eC5jcHAKaW5kZXggMzRlOTNhMDJlZjc0MzJlM2MyNmVmMjM2MGQxY2YzZmQ0MzdlNDE2ZS4uNTQ2
ZmVjMjZjZTY5ODFhY2QxZmNkN2FiZTBhMGE5ODM4YzcwYjQzYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSb290SW5saW5lQm94LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jvb3RJbmxpbmVCb3guY3BwCkBAIC0yMjYsMTcgKzIy
NiwxNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc3dhcEl0ZW1zSW5MYXlvdXRBdHRyaWJ1dGVzKFNW
R1RleHRMYXlvdXRBdHRyaWJ1dGVzKiBmaXJzdEF0dAogICAgICAgICByZXR1cm47CiAKICAgICBp
ZiAoZmlyc3RQcmVzZW50ICYmIGxhc3RQcmVzZW50KSB7Ci0gICAgICAgIHN0ZDo6c3dhcChpdEZp
cnN0LT5zZWNvbmQsIGl0TGFzdC0+c2Vjb25kKTsKKyAgICAgICAgc3RkOjpzd2FwKGl0Rmlyc3Qt
PnZhbHVlLCBpdExhc3QtPnZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlm
IChmaXJzdFByZXNlbnQgJiYgIWxhc3RQcmVzZW50KSB7Ci0gICAgICAgIGxhc3RBdHRyaWJ1dGVz
LT5jaGFyYWN0ZXJEYXRhTWFwKCkuc2V0KGxhc3RQb3NpdGlvbiArIDEsIGl0Rmlyc3QtPnNlY29u
ZCk7CisgICAgICAgIGxhc3RBdHRyaWJ1dGVzLT5jaGFyYWN0ZXJEYXRhTWFwKCkuc2V0KGxhc3RQ
b3NpdGlvbiArIDEsIGl0Rmlyc3QtPnZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAog
ICAgIC8vICFmaXJzdFByZXNlbnQgJiYgbGFzdFByZXNlbnQKLSAgICBmaXJzdEF0dHJpYnV0ZXMt
PmNoYXJhY3RlckRhdGFNYXAoKS5zZXQoZmlyc3RQb3NpdGlvbiArIDEsIGl0TGFzdC0+c2Vjb25k
KTsKKyAgICBmaXJzdEF0dHJpYnV0ZXMtPmNoYXJhY3RlckRhdGFNYXAoKS5zZXQoZmlyc3RQb3Np
dGlvbiArIDEsIGl0TGFzdC0+dmFsdWUpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZmluZEZp
cnN0QW5kTGFzdEF0dHJpYnV0ZXNJblZlY3RvcihWZWN0b3I8U1ZHVGV4dExheW91dEF0dHJpYnV0
ZXMqPiYgYXR0cmlidXRlcywgUmVuZGVyU1ZHSW5saW5lVGV4dCogZmlyc3RDb250ZXh0LCBSZW5k
ZXJTVkdJbmxpbmVUZXh0KiBsYXN0Q29udGV4dCwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEF0dHJpYnV0ZXMuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRlcy5jcHAKaW5kZXggYTkyNTk2
Y2VlZWRiZTI1YWY3NzdkZjRhNGM4M2NkM2VmOTdiOWNlOC4uNjdmYTBmYTk4MmFkNjBiYTcyNjUx
YTg0NTQ5NTgxZjdlYjUwY2QwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRlcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRlcy5jcHAKQEAgLTYyLDggKzYyLDggQEAg
dm9pZCBTVkdUZXh0TGF5b3V0QXR0cmlidXRlczo6ZHVtcCgpIGNvbnN0CiAgICAgZnByaW50Zihz
dGRlcnIsICJjb250ZXh0OiAlcFxuIiwgbV9jb250ZXh0KTsKICAgICBjb25zdCBTVkdDaGFyYWN0
ZXJEYXRhTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2NoYXJhY3RlckRhdGFNYXAuZW5kKCk7
CiAgICAgZm9yIChTVkdDaGFyYWN0ZXJEYXRhTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fY2hh
cmFjdGVyRGF0YU1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgY29uc3Qg
U1ZHQ2hhcmFjdGVyRGF0YSYgZGF0YSA9IGl0LT5zZWNvbmQ7Ci0gICAgICAgIGZwcmludGYoc3Rk
ZXJyLCAiIC0tLT4gcG9zPSVpLCBkYXRhPXsiLCBpdC0+Zmlyc3QpOworICAgICAgICBjb25zdCBT
VkdDaGFyYWN0ZXJEYXRhJiBkYXRhID0gaXQtPnZhbHVlOworICAgICAgICBmcHJpbnRmKHN0ZGVy
ciwgIiAtLS0+IHBvcz0laSwgZGF0YT17IiwgaXQtPmtleSk7CiAgICAgICAgIGR1bXBTVkdDaGFy
YWN0ZXJEYXRhTWFwVmFsdWUoIngiLCBkYXRhLngpOwogICAgICAgICBkdW1wU1ZHQ2hhcmFjdGVy
RGF0YU1hcFZhbHVlKCJ5IiwgZGF0YS55KTsKICAgICAgICAgZHVtcFNWR0NoYXJhY3RlckRhdGFN
YXBWYWx1ZSgiZHgiLCBkYXRhLmR4KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyLmNwcAppbmRl
eCBiZTJhMTJmZTk2MGI3OTI0ODMxM2RmMzY5OTE0NTAzZmVlOWEyOTFiLi5iOTY5YTUzMTllODBh
Yzc4NzJhNWU0MWQ4ZGU3NzQzMDQ4YmRjNDNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXIu
Y3BwCkBAIC0xNDksNyArMTQ5LDcgQEAgdm9pZCBTVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxk
ZXI6OmJ1aWxkQ2hhcmFjdGVyRGF0YU1hcChSZW5kZXJTVkdUZXh0KiB0ZXh0Um8KICAgICAgICAg
ZGF0YS55ID0gMDsKICAgICAgICAgbV9jaGFyYWN0ZXJEYXRhTWFwLnNldCgxLCBkYXRhKTsKICAg
ICB9IGVsc2UgewotICAgICAgICBTVkdDaGFyYWN0ZXJEYXRhJiBkYXRhID0gaXQtPnNlY29uZDsK
KyAgICAgICAgU1ZHQ2hhcmFjdGVyRGF0YSYgZGF0YSA9IGl0LT52YWx1ZTsKICAgICAgICAgaWYg
KGRhdGEueCA9PSBTVkdUZXh0TGF5b3V0QXR0cmlidXRlczo6ZW1wdHlWYWx1ZSgpKQogICAgICAg
ICAgICAgZGF0YS54ID0gMDsKICAgICAgICAgaWYgKGRhdGEueSA9PSBTVkdUZXh0TGF5b3V0QXR0
cmlidXRlczo6ZW1wdHlWYWx1ZSgpKQpAQCAtMjEzLDcgKzIxMyw3IEBAIHZvaWQgU1ZHVGV4dExh
eW91dEF0dHJpYnV0ZXNCdWlsZGVyOjpmaWxsQ2hhcmFjdGVyRGF0YU1hcChjb25zdCBUZXh0UG9z
aXRpb24mIHBvCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIHVw
ZGF0ZUNoYXJhY3RlckRhdGEoaSwgbGFzdFJvdGF0aW9uLCBpdC0+c2Vjb25kLCBsZW5ndGhDb250
ZXh0LCB4TGlzdFB0ciwgeUxpc3RQdHIsIGR4TGlzdFB0ciwgZHlMaXN0UHRyLCByb3RhdGVMaXN0
UHRyKTsKKyAgICAgICAgdXBkYXRlQ2hhcmFjdGVyRGF0YShpLCBsYXN0Um90YXRpb24sIGl0LT52
YWx1ZSwgbGVuZ3RoQ29udGV4dCwgeExpc3RQdHIsIHlMaXN0UHRyLCBkeExpc3RQdHIsIGR5TGlz
dFB0ciwgcm90YXRlTGlzdFB0cik7CiAgICAgfQogCiAgICAgLy8gVGhlIGxhc3Qgcm90YXRpb24g
dmFsdWUgYWx3YXlzIHNwYW5zIHRoZSB3aG9sZSBzY29wZS4KQEAgLTIyOSw3ICsyMjksNyBAQCB2
b2lkIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlcjo6ZmlsbENoYXJhY3RlckRhdGFNYXAo
Y29uc3QgVGV4dFBvc2l0aW9uJiBwbwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0K
IAotICAgICAgICBpdC0+c2Vjb25kLnJvdGF0ZSA9IGxhc3RSb3RhdGlvbjsKKyAgICAgICAgaXQt
PnZhbHVlLnJvdGF0ZSA9IGxhc3RSb3RhdGlvbjsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmUuY3BwCmluZGV4IDVj
NTQ5YjIxYzg3NTIwODQ3MjQ2YWYyNTRmZDA1OWYyZTNiOWI1ZTguLmJhMmI3NjM5ZDNmOTViNzM4
OTQ3NWZhMmRjMDBjOWE2YWE4NWIzMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lLmNwcApAQCAtNDc1LDcgKzQ3NSw3IEBAIHZv
aWQgU1ZHVGV4dExheW91dEVuZ2luZTo6bGF5b3V0VGV4dE9uTGluZU9yUGF0aChTVkdJbmxpbmVU
ZXh0Qm94KiB0ZXh0Qm94LCBSZW5kCiAgICAgICAgIFNWR0NoYXJhY3RlckRhdGEgZGF0YTsKICAg
ICAgICAgU1ZHQ2hhcmFjdGVyRGF0YU1hcDo6aXRlcmF0b3IgaXQgPSBjaGFyYWN0ZXJEYXRhTWFw
LmZpbmQobV9sb2dpY2FsQ2hhcmFjdGVyT2Zmc2V0ICsgMSk7CiAgICAgICAgIGlmIChpdCAhPSBj
aGFyYWN0ZXJEYXRhTWFwLmVuZCgpKQotICAgICAgICAgICAgZGF0YSA9IGl0LT5zZWNvbmQ7Cisg
ICAgICAgICAgICBkYXRhID0gaXQtPnZhbHVlOwogCiAgICAgICAgIGZsb2F0IHggPSBkYXRhLng7
CiAgICAgICAgIGZsb2F0IHkgPSBkYXRhLnk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNzQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNzQnVpbGRlci5jcHAKaW5kZXggNWFjODVjYmJlODQ3
NzEwZmQ1YWUxZTIyZmYzZjMzNjIxMTZhODVjMi4uMDVkODA1Zjc3ZjJmOWQyOTAwMjYxYjBiNjBj
YTY4NmUxZWEwY2JhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdUZXh0TWV0cmljc0J1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHVGV4dE1ldHJpY3NCdWlsZGVyLmNwcApAQCAtMTYxLDcgKzE2MSw3IEBAIHZvaWQgU1ZH
VGV4dE1ldHJpY3NCdWlsZGVyOjptZWFzdXJlVGV4dFJlbmRlcmVyKFJlbmRlclNWR0lubGluZVRl
eHQqIHRleHQsIE1lYXN1CiAgICAgICAgICAgICBpZiAoZGF0YS0+YWxsQ2hhcmFjdGVyc01hcCkg
ewogICAgICAgICAgICAgICAgIGNvbnN0IFNWR0NoYXJhY3RlckRhdGFNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gZGF0YS0+YWxsQ2hhcmFjdGVyc01hcC0+ZmluZChkYXRhLT52YWx1ZUxpc3RQb3Np
dGlvbiArIG1fdGV4dFBvc2l0aW9uIC0gZGF0YS0+c2tpcHBlZENoYXJhY3RlcnMgLSBzdXJyb2dh
dGVQYWlyQ2hhcmFjdGVycyArIDEpOwogICAgICAgICAgICAgICAgIGlmIChpdCAhPSBkYXRhLT5h
bGxDaGFyYWN0ZXJzTWFwLT5lbmQoKSkKLSAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcy0+
Y2hhcmFjdGVyRGF0YU1hcCgpLnNldChtX3RleHRQb3NpdGlvbiArIDEsIGl0LT5zZWNvbmQpOwor
ICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLT5jaGFyYWN0ZXJEYXRhTWFwKCkuc2V0KG1f
dGV4dFBvc2l0aW9uICsgMSwgaXQtPnZhbHVlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IHRleHRNZXRyaWNzVmFsdWVzLT5hcHBlbmQobV9jdXJyZW50TWV0cmljcyk7CiAgICAgICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmNwcAppbmRleCA0NDIwOWM2
ZjU5ZDBkMmExZDdmMzNiMmYxMTI5YTg3ZTkwNDVlN2NkLi5mY2IxMjZhMWQ1NmQ1YWZjYzlhYmVi
YTYyMWZiMDc3OGUzMmI3ZmUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0
b3JhZ2VBcmVhU3luYy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJl
YVN5bmMuY3BwCkBAIC0xODgsNyArMTg4LDcgQEAgdm9pZCBTdG9yYWdlQXJlYVN5bmM6OnN5bmNU
aW1lckZpcmVkKFRpbWVyPFN0b3JhZ2VBcmVhU3luYz4qKQogICAgICAgICAgICAgICAgIHBhcnRp
YWxTeW5jID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIG1faXRlbXNQZW5kaW5nU3luYy5zZXQoY2hhbmdlZF9pdC0+Zmlyc3QuaXNvbGF0
ZWRDb3B5KCksIGNoYW5nZWRfaXQtPnNlY29uZC5pc29sYXRlZENvcHkoKSk7CisgICAgICAgICAg
ICBtX2l0ZW1zUGVuZGluZ1N5bmMuc2V0KGNoYW5nZWRfaXQtPmtleS5pc29sYXRlZENvcHkoKSwg
Y2hhbmdlZF9pdC0+dmFsdWUuaXNvbGF0ZWRDb3B5KCkpOwogICAgICAgICB9CiAKICAgICAgICAg
aWYgKHBhcnRpYWxTeW5jKSB7CkBAIC0xOTgsNyArMTk4LDcgQEAgdm9pZCBTdG9yYWdlQXJlYVN5
bmM6OnN5bmNUaW1lckZpcmVkKFRpbWVyPFN0b3JhZ2VBcmVhU3luYz4qKQogICAgICAgICAgICAg
SGFzaE1hcDxTdHJpbmcsIFN0cmluZz46Oml0ZXJhdG9yIHBlbmRpbmdfaXQgPSBtX2l0ZW1zUGVu
ZGluZ1N5bmMuYmVnaW4oKTsKICAgICAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpp
dGVyYXRvciBwZW5kaW5nX2VuZCA9IG1faXRlbXNQZW5kaW5nU3luYy5lbmQoKTsKICAgICAgICAg
ICAgIGZvciAoOyBwZW5kaW5nX2l0ICE9IHBlbmRpbmdfZW5kOyArK3BlbmRpbmdfaXQpCi0gICAg
ICAgICAgICAgICAgbV9jaGFuZ2VkSXRlbXMucmVtb3ZlKHBlbmRpbmdfaXQtPmZpcnN0KTsKKyAg
ICAgICAgICAgICAgICBtX2NoYW5nZWRJdGVtcy5yZW1vdmUocGVuZGluZ19pdC0+a2V5KTsKICAg
ICAgICAgfQogCiAgICAgICAgIGlmICghbV9zeW5jU2NoZWR1bGVkKSB7CkBAIC0zNDUsNyArMzQ1
LDcgQEAgdm9pZCBTdG9yYWdlQXJlYVN5bmM6OnBlcmZvcm1JbXBvcnQoKQogICAgIEhhc2hNYXA8
U3RyaW5nLCBTdHJpbmc+OjppdGVyYXRvciBlbmQgPSBpdGVtTWFwLmVuZCgpOwogCiAgICAgZm9y
ICg7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgbV9zdG9yYWdlQXJlYS0+aW1wb3J0SXRlbShp
dC0+Zmlyc3QsIGl0LT5zZWNvbmQpOworICAgICAgICBtX3N0b3JhZ2VBcmVhLT5pbXBvcnRJdGVt
KGl0LT5rZXksIGl0LT52YWx1ZSk7CiAKICAgICBtYXJrSW1wb3J0ZWQoKTsKIH0KQEAgLTQzOSwx
MyArNDM5LDEzIEBAIHZvaWQgU3RvcmFnZUFyZWFTeW5jOjpzeW5jKGJvb2wgY2xlYXJJdGVtcywg
Y29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIGl0ZW1zCiAgICAgdHJhbnNhY3Rpb24uYmVn
aW4oKTsKICAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBp
dCA9IGl0ZW1zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAvLyBCYXNlZCBv
biB0aGUgbnVsbC1uZXNzIG9mIHRoZSBzZWNvbmQgYXJndW1lbnQsIGRlY2lkZSB3aGV0aGVyIHRo
aXMgaXMgYW4gaW5zZXJ0IG9yIGEgZGVsZXRlLgotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQmIHF1
ZXJ5ID0gaXQtPnNlY29uZC5pc051bGwoKSA/IHJlbW92ZSA6IGluc2VydDsKKyAgICAgICAgU1FM
aXRlU3RhdGVtZW50JiBxdWVyeSA9IGl0LT52YWx1ZS5pc051bGwoKSA/IHJlbW92ZSA6IGluc2Vy
dDsKIAotICAgICAgICBxdWVyeS5iaW5kVGV4dCgxLCBpdC0+Zmlyc3QpOworICAgICAgICBxdWVy
eS5iaW5kVGV4dCgxLCBpdC0+a2V5KTsKIAogICAgICAgICAvLyBJZiB0aGUgc2Vjb25kIGFyZ3Vt
ZW50IGlzIG5vbi1udWxsLCB3ZSdyZSBkb2luZyBhbiBpbnNlcnQsIHNvIGJpbmQgaXQgYXMgdGhl
IHZhbHVlLgotICAgICAgICBpZiAoIWl0LT5zZWNvbmQuaXNOdWxsKCkpCi0gICAgICAgICAgICBx
dWVyeS5iaW5kQmxvYigyLCBpdC0+c2Vjb25kKTsKKyAgICAgICAgaWYgKCFpdC0+dmFsdWUuaXNO
dWxsKCkpCisgICAgICAgICAgICBxdWVyeS5iaW5kQmxvYigyLCBpdC0+dmFsdWUpOwogCiAgICAg
ICAgIGludCByZXN1bHQgPSBxdWVyeS5zdGVwKCk7CiAgICAgICAgIGlmIChyZXN1bHQgIT0gU1FM
UmVzdWx0RG9uZSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdl
TWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU1hcC5jcHAKaW5kZXggOGU0
MmQyZjE3NmRkM2IxMTEyYTAxYTUxZDhkYjYyZjRiMzhiYmEzNS4uNDBlMWEzOGYxY2E0YTc5ZjBj
ZTI0NzAxMTUzNDdhZGI5MjlmNDk4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9TdG9yYWdlTWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VNYXAu
Y3BwCkBAIC04OSw3ICs4OSw3IEBAIFN0cmluZyBTdG9yYWdlTWFwOjprZXkodW5zaWduZWQgaW5k
ZXgpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAogICAgIHNldEl0ZXJhdG9yVG9JbmRleChp
bmRleCk7Ci0gICAgcmV0dXJuIG1faXRlcmF0b3ItPmZpcnN0OworICAgIHJldHVybiBtX2l0ZXJh
dG9yLT5rZXk7CiB9CiAKIFN0cmluZyBTdG9yYWdlTWFwOjpnZXRJdGVtKGNvbnN0IFN0cmluZyYg
a2V5KSBjb25zdApAQCAtMTMzLDcgKzEzMyw3IEBAIFBhc3NSZWZQdHI8U3RvcmFnZU1hcD4gU3Rv
cmFnZU1hcDo6c2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1CiAK
ICAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IG1fbWFw
LmFkZChrZXksIHZhbHVlKTsKICAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5KQotICAgICAg
ICBhZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IHZhbHVlOworICAgICAgICBhZGRSZXN1bHQu
aXRlcmF0b3ItPnZhbHVlID0gdmFsdWU7CiAKICAgICBpbnZhbGlkYXRlSXRlcmF0b3IoKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcAppbmRl
eCA5ZDFhYzUxN2EwZTJlN2IzZjI2YjgyM2IyODlhNTkzOTU4YmRjOGEwLi40NTAxYjExZmJjMTVj
ZjQyMzlkMDdmYzM3NDc2NDE2ZGJiNzVlZmNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcApAQCAtNTUsNyArNTUsNyBAQCBQYXNzUmVmUHRy
PFN0b3JhZ2VOYW1lc3BhY2U+IFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpsb2NhbFN0b3JhZ2VOYW1l
c3BhY2UoY29uc3QgUwogICAgICAgICByZXR1cm4gc3RvcmFnZU5hbWVzcGFjZS5yZWxlYXNlKCk7
CiAgICAgfQogCi0gICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgcmV0dXJuIGl0LT52YWx1ZTsK
IH0KIAogUGFzc1JlZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6
c2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UodW5zaWduZWQgcXVvdGEpCkBAIC05Nyw3ICs5Nyw3IEBA
IFBhc3NSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gU3RvcmFnZU5hbWVzcGFjZUltcGw6OmNvcHko
KQogCiAgICAgU3RvcmFnZUFyZWFNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fc3RvcmFnZUFyZWFNYXAu
ZW5kKCk7CiAgICAgZm9yIChTdG9yYWdlQXJlYU1hcDo6aXRlcmF0b3IgaSA9IG1fc3RvcmFnZUFy
ZWFNYXAuYmVnaW4oKTsgaSAhPSBlbmQ7ICsraSkKLSAgICAgICAgbmV3TmFtZXNwYWNlLT5tX3N0
b3JhZ2VBcmVhTWFwLnNldChpLT5maXJzdCwgaS0+c2Vjb25kLT5jb3B5KCkpOworICAgICAgICBu
ZXdOYW1lc3BhY2UtPm1fc3RvcmFnZUFyZWFNYXAuc2V0KGktPmtleSwgaS0+dmFsdWUtPmNvcHko
KSk7CiAgICAgcmV0dXJuIG5ld05hbWVzcGFjZS5yZWxlYXNlKCk7CiB9CiAKQEAgLTEzMSw3ICsx
MzEsNyBAQCB2b2lkIFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpjbG9zZSgpCiAKICAgICBTdG9yYWdl
QXJlYU1hcDo6aXRlcmF0b3IgZW5kID0gbV9zdG9yYWdlQXJlYU1hcC5lbmQoKTsKICAgICBmb3Ig
KFN0b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBpdCA9IG1fc3RvcmFnZUFyZWFNYXAuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5jbG9zZSgpOworICAgICAgICBp
dC0+dmFsdWUtPmNsb3NlKCk7CiAKICAgICBpZiAobV9zeW5jTWFuYWdlcikKICAgICAgICAgbV9z
eW5jTWFuYWdlci0+Y2xvc2UoKTsKQEAgLTE1NCw3ICsxNTQsNyBAQCB2b2lkIFN0b3JhZ2VOYW1l
c3BhY2VJbXBsOjpjbGVhckFsbE9yaWdpbnNGb3JEZWxldGlvbigpCiAKICAgICBTdG9yYWdlQXJl
YU1hcDo6aXRlcmF0b3IgZW5kID0gbV9zdG9yYWdlQXJlYU1hcC5lbmQoKTsKICAgICBmb3IgKFN0
b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBpdCA9IG1fc3RvcmFnZUFyZWFNYXAuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5jbGVhckZvck9yaWdpbkRlbGV0aW9u
KCk7CisgICAgICAgIGl0LT52YWx1ZS0+Y2xlYXJGb3JPcmlnaW5EZWxldGlvbigpOwogfQogICAg
IAogdm9pZCBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6c3luYygpCkBAIC0xNjIsNyArMTYyLDcgQEAg
dm9pZCBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6c3luYygpCiAgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKICAgICBTdG9yYWdlQXJlYU1hcDo6aXRlcmF0b3IgZW5kID0gbV9zdG9yYWdlQXJlYU1h
cC5lbmQoKTsKICAgICBmb3IgKFN0b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBpdCA9IG1fc3RvcmFn
ZUFyZWFNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5z
eW5jKCk7CisgICAgICAgIGl0LT52YWx1ZS0+c3luYygpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnRFeHRlbnNp
b25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwCmlu
ZGV4IGNhYzFhZWEwN2UwOTBkNzRlMjVlYTM0NjAwOWYyNWM3ZDQ2ODBlMzkuLmNjYjYzMjNlNDdk
YTg0MWE3NjFjYjkzYTFlYzhlYWQxNTc1MDk2ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwCkBAIC0xNTYsNyArMTU2LDcgQEAgdm9pZCBTVkdEb2N1
bWVudEV4dGVuc2lvbnM6OnJlbW92ZUFuaW1hdGlvbkVsZW1lbnRGcm9tVGFyZ2V0KFNWR1NNSUxF
bGVtZW50KiBhbmkKICAgICBIYXNoTWFwPFNWR0VsZW1lbnQqLCBIYXNoU2V0PFNWR1NNSUxFbGVt
ZW50Kj4qID46Oml0ZXJhdG9yIGl0ID0gbV9hbmltYXRlZEVsZW1lbnRzLmZpbmQodGFyZ2V0RWxl
bWVudCk7CiAgICAgQVNTRVJUKGl0ICE9IG1fYW5pbWF0ZWRFbGVtZW50cy5lbmQoKSk7CiAgICAg
Ci0gICAgSGFzaFNldDxTVkdTTUlMRWxlbWVudCo+KiBhbmltYXRpb25FbGVtZW50c0ZvclRhcmdl
dCA9IGl0LT5zZWNvbmQ7CisgICAgSGFzaFNldDxTVkdTTUlMRWxlbWVudCo+KiBhbmltYXRpb25F
bGVtZW50c0ZvclRhcmdldCA9IGl0LT52YWx1ZTsKICAgICBBU1NFUlQoIWFuaW1hdGlvbkVsZW1l
bnRzRm9yVGFyZ2V0LT5pc0VtcHR5KCkpOwogCiAgICAgYW5pbWF0aW9uRWxlbWVudHNGb3JUYXJn
ZXQtPnJlbW92ZShhbmltYXRpb25FbGVtZW50KTsKQEAgLTE3Myw3ICsxNzMsNyBAQCB2b2lkIFNW
R0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlQWxsQW5pbWF0aW9uRWxlbWVudHNGcm9tVGFyZ2V0
KFNWR0VsZW1lbnQqIHRhcgogICAgIGlmIChpdCA9PSBtX2FuaW1hdGVkRWxlbWVudHMuZW5kKCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIEhhc2hTZXQ8U1ZHU01JTEVsZW1lbnQqPiogYW5pbWF0
aW9uRWxlbWVudHNGb3JUYXJnZXQgPSBpdC0+c2Vjb25kOworICAgIEhhc2hTZXQ8U1ZHU01JTEVs
ZW1lbnQqPiogYW5pbWF0aW9uRWxlbWVudHNGb3JUYXJnZXQgPSBpdC0+dmFsdWU7CiAgICAgVmVj
dG9yPFNWR1NNSUxFbGVtZW50Kj4gdG9CZVJlc2V0OwogCiAgICAgSGFzaFNldDxTVkdTTUlMRWxl
bWVudCo+OjppdGVyYXRvciBlbmQgPSBhbmltYXRpb25FbGVtZW50c0ZvclRhcmdldC0+ZW5kKCk7
CkBAIC0yMTksOSArMjE5LDkgQEAgdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OmFkZFBlbmRp
bmdSZXNvdXJjZShjb25zdCBBdG9taWNTdHJpbmcmIGlkLCBTVkdTdHlsZWQKIAogICAgIC8vIFRo
ZSBIYXNoTWFwIGFkZCBmdW5jdGlvbiBsZWF2ZXMgdGhlIG1hcCBhbG9uZSBhbmQgcmV0dXJucyBh
IHBvaW50ZXIgdG8gdGhlIGVsZW1lbnQgaW4gdGhlCiAgICAgLy8gbWFwIGlmIHRoZSBlbGVtZW50
IGFscmVhZHkgZXhpc3RzLiBTbyB3ZSBhZGQgd2l0aCBhIHZhbHVlIG9mIDAsIGFuZCBpdCBlaXRo
ZXIgZmluZHMgdGhlCi0gICAgLy8gZXhpc3RpbmcgZWxlbWVudCBvciBhZGRzIGEgbmV3IG9uZSBp
biBhIHNpbmdsZSBvcGVyYXRpb24uIFRoZSAiLml0ZXJhdG9yLT5zZWNvbmQiIGlkaW9tIGdldHMK
KyAgICAvLyBleGlzdGluZyBlbGVtZW50IG9yIGFkZHMgYSBuZXcgb25lIGluIGEgc2luZ2xlIG9w
ZXJhdGlvbi4gVGhlICIuaXRlcmF0b3ItPnZhbHVlIiBpZGlvbSBnZXRzCiAgICAgLy8gdXMgdG8g
dGhlIGl0ZXJhdG9yIGZyb20gYWRkJ3MgcmVzdWx0LCBhbmQgdGhlbiB0byB0aGUgdmFsdWUgaW5z
aWRlIHRoZSBoYXNoIHRhYmxlLgotICAgIFNWR1BlbmRpbmdFbGVtZW50cyomIHNldCA9IG1fcGVu
ZGluZ1Jlc291cmNlcy5hZGQoaWQsIDApLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgU1ZHUGVuZGlu
Z0VsZW1lbnRzKiYgc2V0ID0gbV9wZW5kaW5nUmVzb3VyY2VzLmFkZChpZCwgMCkuaXRlcmF0b3It
PnZhbHVlOwogICAgIGlmICghc2V0KQogICAgICAgICBzZXQgPSBuZXcgU1ZHUGVuZGluZ0VsZW1l
bnRzOwogICAgIHNldC0+YWRkKGVsZW1lbnQpOwpAQCAtMjQ2LDcgKzI0Niw3IEBAIGJvb2wgU1ZH
RG9jdW1lbnRFeHRlbnNpb25zOjppc0VsZW1lbnRQZW5kaW5nUmVzb3VyY2VzKFNWR1N0eWxlZEVs
ZW1lbnQqIGVsZW1lbnQpCiAKICAgICBIYXNoTWFwPEF0b21pY1N0cmluZywgU1ZHUGVuZGluZ0Vs
ZW1lbnRzKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGVuZGluZ1Jlc291cmNlcy5lbmQoKTsK
ICAgICBmb3IgKEhhc2hNYXA8QXRvbWljU3RyaW5nLCBTVkdQZW5kaW5nRWxlbWVudHMqPjo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtX3BlbmRpbmdSZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7Ci0gICAgICAgIFNWR1BlbmRpbmdFbGVtZW50cyogZWxlbWVudHMgPSBpdC0+c2Vjb25k
OworICAgICAgICBTVkdQZW5kaW5nRWxlbWVudHMqIGVsZW1lbnRzID0gaXQtPnZhbHVlOwogICAg
ICAgICBBU1NFUlQoZWxlbWVudHMpOwogCiAgICAgICAgIGlmIChlbGVtZW50cy0+Y29udGFpbnMo
ZWxlbWVudCkpCkBAIC0yNzQsMTMgKzI3NCwxMyBAQCB2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9u
czo6cmVtb3ZlRWxlbWVudEZyb21QZW5kaW5nUmVzb3VyY2VzKFNWR1N0eWxlZEVsZW1lbnQqCiAg
ICAgICAgIFZlY3RvcjxBdG9taWNTdHJpbmc+IHRvQmVSZW1vdmVkOwogICAgICAgICBIYXNoTWFw
PEF0b21pY1N0cmluZywgU1ZHUGVuZGluZ0VsZW1lbnRzKj46Oml0ZXJhdG9yIGVuZCA9IG1fcGVu
ZGluZ1Jlc291cmNlcy5lbmQoKTsKICAgICAgICAgZm9yIChIYXNoTWFwPEF0b21pY1N0cmluZywg
U1ZHUGVuZGluZ0VsZW1lbnRzKj46Oml0ZXJhdG9yIGl0ID0gbV9wZW5kaW5nUmVzb3VyY2VzLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgU1ZHUGVuZGluZ0VsZW1lbnRz
KiBlbGVtZW50cyA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICBTVkdQZW5kaW5nRWxlbWVudHMq
IGVsZW1lbnRzID0gaXQtPnZhbHVlOwogICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnRzKTsKICAg
ICAgICAgICAgIEFTU0VSVCghZWxlbWVudHMtPmlzRW1wdHkoKSk7CiAKICAgICAgICAgICAgIGVs
ZW1lbnRzLT5yZW1vdmUoZWxlbWVudCk7CiAgICAgICAgICAgICBpZiAoZWxlbWVudHMtPmlzRW1w
dHkoKSkKLSAgICAgICAgICAgICAgICB0b0JlUmVtb3ZlZC5hcHBlbmQoaXQtPmZpcnN0KTsKKyAg
ICAgICAgICAgICAgICB0b0JlUmVtb3ZlZC5hcHBlbmQoaXQtPmtleSk7CiAgICAgICAgIH0KIAog
ICAgICAgICBlbGVtZW50LT5jbGVhckhhc1BlbmRpbmdSZXNvdXJjZXNJZlBvc3NpYmxlKCk7CkBA
IC0yOTYsMTMgKzI5NiwxMyBAQCB2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlRWxl
bWVudEZyb21QZW5kaW5nUmVzb3VyY2VzKFNWR1N0eWxlZEVsZW1lbnQqCiAgICAgICAgIFZlY3Rv
cjxBdG9taWNTdHJpbmc+IHRvQmVSZW1vdmVkOwogICAgICAgICBIYXNoTWFwPEF0b21pY1N0cmlu
ZywgU1ZHUGVuZGluZ0VsZW1lbnRzKj46Oml0ZXJhdG9yIGVuZCA9IG1fcGVuZGluZ1Jlc291cmNl
c0ZvclJlbW92YWwuZW5kKCk7CiAgICAgICAgIGZvciAoSGFzaE1hcDxBdG9taWNTdHJpbmcsIFNW
R1BlbmRpbmdFbGVtZW50cyo+OjppdGVyYXRvciBpdCA9IG1fcGVuZGluZ1Jlc291cmNlc0ZvclJl
bW92YWwuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBTVkdQZW5kaW5n
RWxlbWVudHMqIGVsZW1lbnRzID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIFNWR1BlbmRpbmdF
bGVtZW50cyogZWxlbWVudHMgPSBpdC0+dmFsdWU7CiAgICAgICAgICAgICBBU1NFUlQoZWxlbWVu
dHMpOwogICAgICAgICAgICAgQVNTRVJUKCFlbGVtZW50cy0+aXNFbXB0eSgpKTsKIAogICAgICAg
ICAgICAgZWxlbWVudHMtPnJlbW92ZShlbGVtZW50KTsKICAgICAgICAgICAgIGlmIChlbGVtZW50
cy0+aXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHRvQmVSZW1vdmVkLmFwcGVuZChpdC0+Zmly
c3QpOworICAgICAgICAgICAgICAgIHRvQmVSZW1vdmVkLmFwcGVuZChpdC0+a2V5KTsKICAgICAg
ICAgfQogCiAgICAgICAgIC8vIFdlIHVzZSB0aGUgcmVtb3ZlUGVuZGluZ1Jlc291cmNlRm9yUmVt
b3ZhbCBmdW5jdGlvbiBoZXJlIGJlY2F1c2UgaXQgZGVhbHMgd2l0aCBzZXQgbGlmZXRpbWUgY29y
cmVjdGx5LgpAQCAtMzYyLDcgKzM2Miw3IEBAIEhhc2hTZXQ8U1ZHRWxlbWVudCo+KiBTVkdEb2N1
bWVudEV4dGVuc2lvbnM6OnNldE9mRWxlbWVudHNSZWZlcmVuY2luZ1RhcmdldChTVkdFCiAgICAg
Y29uc3QgSGFzaE1hcDxTVkdFbGVtZW50KiwgT3duUHRyPEhhc2hTZXQ8U1ZHRWxlbWVudCo+ID4g
Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2VsZW1lbnREZXBlbmRlbmNpZXMuZmluZChyZWZlcmVu
Y2VkRWxlbWVudCk7CiAgICAgaWYgKGl0ID09IG1fZWxlbWVudERlcGVuZGVuY2llcy5lbmQoKSkK
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgcmV0
dXJuIGl0LT52YWx1ZS5nZXQoKTsKIH0KIAogdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OmFk
ZEVsZW1lbnRSZWZlcmVuY2luZ1RhcmdldChTVkdFbGVtZW50KiByZWZlcmVuY2luZ0VsZW1lbnQs
IFNWR0VsZW1lbnQqIHJlZmVyZW5jZWRFbGVtZW50KQpAQCAtMzg2LDggKzM4Niw4IEBAIHZvaWQg
U1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZW1vdmVBbGxUYXJnZXRSZWZlcmVuY2VzRm9yRWxlbWVu
dChTVkdFbGVtZW50KiByZWZlCiAKICAgICBIYXNoTWFwPFNWR0VsZW1lbnQqLCBPd25QdHI8SGFz
aFNldDxTVkdFbGVtZW50Kj4gPiA+OjppdGVyYXRvciBlbmQgPSBtX2VsZW1lbnREZXBlbmRlbmNp
ZXMuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPFNWR0VsZW1lbnQqLCBPd25QdHI8SGFzaFNldDxT
VkdFbGVtZW50Kj4gPiA+OjppdGVyYXRvciBpdCA9IG1fZWxlbWVudERlcGVuZGVuY2llcy5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgU1ZHRWxlbWVudCogcmVmZXJlbmNlZEVs
ZW1lbnQgPSBpdC0+Zmlyc3Q7Ci0gICAgICAgIEhhc2hTZXQ8U1ZHRWxlbWVudCo+KiByZWZlcmVu
Y2luZ0VsZW1lbnRzID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgU1ZHRWxlbWVudCogcmVm
ZXJlbmNlZEVsZW1lbnQgPSBpdC0+a2V5OworICAgICAgICBIYXNoU2V0PFNWR0VsZW1lbnQqPiog
cmVmZXJlbmNpbmdFbGVtZW50cyA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgSGFzaFNldDxT
VkdFbGVtZW50Kj46Oml0ZXJhdG9yIHNldEl0ID0gcmVmZXJlbmNpbmdFbGVtZW50cy0+ZmluZChy
ZWZlcmVuY2luZ0VsZW1lbnQpOwogICAgICAgICBpZiAoc2V0SXQgPT0gcmVmZXJlbmNpbmdFbGVt
ZW50cy0+ZW5kKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTQwOCwxMCArNDA4LDEwIEBA
IHZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZW1vdmVBbGxFbGVtZW50UmVmZXJlbmNlc0Zv
clRhcmdldChTVkdFbGVtZW50KiByZWZlCiAgICAgSGFzaE1hcDxTVkdFbGVtZW50KiwgT3duUHRy
PEhhc2hTZXQ8U1ZHRWxlbWVudCo+ID4gPjo6aXRlcmF0b3IgaXQgPSBtX2VsZW1lbnREZXBlbmRl
bmNpZXMuZmluZChyZWZlcmVuY2VkRWxlbWVudCk7CiAgICAgaWYgKGl0ID09IG1fZWxlbWVudERl
cGVuZGVuY2llcy5lbmQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVChpdC0+Zmlyc3Qg
PT0gcmVmZXJlbmNlZEVsZW1lbnQpOworICAgIEFTU0VSVChpdC0+a2V5ID09IHJlZmVyZW5jZWRF
bGVtZW50KTsKICAgICBWZWN0b3I8U1ZHRWxlbWVudCo+IHRvQmVOb3RpZmllZDsKIAotICAgIEhh
c2hTZXQ8U1ZHRWxlbWVudCo+KiByZWZlcmVuY2luZ0VsZW1lbnRzID0gaXQtPnNlY29uZC5nZXQo
KTsKKyAgICBIYXNoU2V0PFNWR0VsZW1lbnQqPiogcmVmZXJlbmNpbmdFbGVtZW50cyA9IGl0LT52
YWx1ZS5nZXQoKTsKICAgICBIYXNoU2V0PFNWR0VsZW1lbnQqPjo6aXRlcmF0b3Igc2V0RW5kID0g
cmVmZXJlbmNpbmdFbGVtZW50cy0+ZW5kKCk7CiAgICAgZm9yIChIYXNoU2V0PFNWR0VsZW1lbnQq
Pjo6aXRlcmF0b3Igc2V0SXQgPSByZWZlcmVuY2luZ0VsZW1lbnRzLT5iZWdpbigpOyBzZXRJdCAh
PSBzZXRFbmQ7ICsrc2V0SXQpCiAgICAgICAgIHRvQmVOb3RpZmllZC5hcHBlbmQoKnNldEl0KTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAppbmRleCAxYzA5YzYxOWI2MWZkODJlNDg4ZWIwZDUx
NjI0MjhkOGU0YTFmMjMwLi5iMDIxMmQ3YmM0NTNlYTQ3YjJjZWY5MTc3MTIxMjRjNzgzYjJjOGI3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCkBAIC02OCw3ICs2OCw3IEBAIFNWR0VsZW1l
bnQ6On5TVkdFbGVtZW50KCkKICAgICAgICAgU1ZHRWxlbWVudFJhcmVEYXRhOjpTVkdFbGVtZW50
UmFyZURhdGFNYXA6Oml0ZXJhdG9yIGl0ID0gcmFyZURhdGFNYXAuZmluZCh0aGlzKTsKICAgICAg
ICAgQVNTRVJUKGl0ICE9IHJhcmVEYXRhTWFwLmVuZCgpKTsKIAotICAgICAgICBTVkdFbGVtZW50
UmFyZURhdGEqIHJhcmVEYXRhID0gaXQtPnNlY29uZDsKKyAgICAgICAgU1ZHRWxlbWVudFJhcmVE
YXRhKiByYXJlRGF0YSA9IGl0LT52YWx1ZTsKICAgICAgICAgcmFyZURhdGEtPmRlc3Ryb3lBbmlt
YXRlZFNNSUxTdHlsZVByb3BlcnRpZXMoKTsKICAgICAgICAgaWYgKFNWR0N1cnNvckVsZW1lbnQq
IGN1cnNvckVsZW1lbnQgPSByYXJlRGF0YS0+Y3Vyc29yRWxlbWVudCgpKQogICAgICAgICAgICAg
Y3Vyc29yRWxlbWVudC0+cmVtb3ZlQ2xpZW50KHRoaXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNvbnRhaW5lci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmNwcAppbmRleCBiMDMyZjMxNTgyNTZl
NWUzY2M4OTA0NTBjYmE4NjgwYjA3ZTRmZjljLi4wZWZhNmE0MmJiMDkzNWNiZTk0MjUyZTYxMTk4
MzlkY2RhZjJjZmQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NN
SUxUaW1lQ29udGFpbmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NN
SUxUaW1lQ29udGFpbmVyLmNwcApAQCAtMjcyLDcgKzI3Miw3IEBAIHZvaWQgU01JTFRpbWVDb250
YWluZXI6OnVwZGF0ZUFuaW1hdGlvbnMoU01JTFRpbWUgZWxhcHNlZCwgYm9vbCBzZWVrVG9UaW1l
KQogICAgIFZlY3RvcjxTVkdTTUlMRWxlbWVudCo+IGFuaW1hdGlvbnNUb0FwcGx5OwogICAgIFJl
c3VsdEVsZW1lbnRNYXA6Oml0ZXJhdG9yIGVuZCA9IHJlc3VsdHNFbGVtZW50cy5lbmQoKTsKICAg
ICBmb3IgKFJlc3VsdEVsZW1lbnRNYXA6Oml0ZXJhdG9yIGl0ID0gcmVzdWx0c0VsZW1lbnRzLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBTVkdTTUlMRWxlbWVudCogYW5pbWF0
aW9uID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgU1ZHU01JTEVsZW1lbnQqIGFuaW1hdGlv
biA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgaWYgKGNvbnRyaWJ1dGluZ0VsZW1lbnRzLmNv
bnRhaW5zKGFuaW1hdGlvbikpCiAgICAgICAgICAgICBhbmltYXRpb25zVG9BcHBseS5hcHBlbmQo
YW5pbWF0aW9uKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvU1ZHSW1hZ2VDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1h
Z2VDYWNoZS5jcHAKaW5kZXggNjkzZWUyYThmZmY1YzdmMzcyMmZiNDZjOWZkMGI1NWI1Y2QzYWUx
Yy4uMjVmY2M3Nzk3ZjA0YzFmZTg1OTJiNjA0MTM4YTg2ZDI4ZGQ0M2U2NCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlQ2FjaGUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZUNhY2hlLmNwcApAQCAtNDcsOCArNDcsOCBA
QCBTVkdJbWFnZUNhY2hlOjp+U1ZHSW1hZ2VDYWNoZSgpCiAgICAgICAgIC8vIENoZWNrcyBpZiB0
aGUgY2xpZW50IChpdC0+Zmlyc3QpIGlzIHN0aWxsIHZhbGlkLiBUaGUgY2xpZW50IHNob3VsZCBy
ZW1vdmUgaXRzZWxmIGZyb20gdGhpcwogICAgICAgICAvLyBjYWNoZSBiZWZvcmUgaXRzIGVuZCBv
ZiBsaWZlLCBvdGhlcndpc2UgdGhlIGZvbGxvd2luZyBBU1NFUlQgd2lsbCBjcmFzaCBvbiBwdXJl
IHZpcnR1YWwKICAgICAgICAgLy8gZnVuY3Rpb24gY2FsbCBvciBhIGdlbmVyYWwgY3Jhc2guCi0g
ICAgICAgIEFTU0VSVChpdC0+Zmlyc3QtPnJlc291cmNlQ2xpZW50VHlwZSgpID09IENhY2hlZElt
YWdlQ2xpZW50OjpleHBlY3RlZFR5cGUoKSk7Ci0gICAgICAgIGRlbGV0ZSBpdC0+c2Vjb25kLmJ1
ZmZlcjsKKyAgICAgICAgQVNTRVJUKGl0LT5rZXktPnJlc291cmNlQ2xpZW50VHlwZSgpID09IENh
Y2hlZEltYWdlQ2xpZW50OjpleHBlY3RlZFR5cGUoKSk7CisgICAgICAgIGRlbGV0ZSBpdC0+dmFs
dWUuYnVmZmVyOwogICAgIH0KIAogICAgIG1faW1hZ2VEYXRhTWFwLmNsZWFyKCk7CkBAIC02Myw3
ICs2Myw3IEBAIHZvaWQgU1ZHSW1hZ2VDYWNoZTo6cmVtb3ZlQ2xpZW50RnJvbUNhY2hlKGNvbnN0
IENhY2hlZEltYWdlQ2xpZW50KiBjbGllbnQpCiAgICAgaWYgKGl0ID09IG1faW1hZ2VEYXRhTWFw
LmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBkZWxldGUgaXQtPnNlY29uZC5idWZmZXI7
CisgICAgZGVsZXRlIGl0LT52YWx1ZS5idWZmZXI7CiAgICAgbV9pbWFnZURhdGFNYXAucmVtb3Zl
KGl0KTsKIH0KIApAQCAtODAsMTQgKzgwLDE0IEBAIFNWR0ltYWdlQ2FjaGU6OlNpemVBbmRTY2Fs
ZXMgU1ZHSW1hZ2VDYWNoZTo6cmVxdWVzdGVkU2l6ZUFuZFNjYWxlcyhjb25zdCBDYWNoZWRJCiAg
ICAgU2l6ZUFuZFNjYWxlc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3NpemVBbmRTY2FsZXNN
YXAuZmluZChjbGllbnQpOwogICAgIGlmIChpdCA9PSBtX3NpemVBbmRTY2FsZXNNYXAuZW5kKCkp
CiAgICAgICAgIHJldHVybiBTaXplQW5kU2NhbGVzKCk7Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQ7
CisgICAgcmV0dXJuIGl0LT52YWx1ZTsKIH0KIAogdm9pZCBTVkdJbWFnZUNhY2hlOjppbWFnZUNv
bnRlbnRDaGFuZ2VkKCkKIHsKICAgICBJbWFnZURhdGFNYXA6Oml0ZXJhdG9yIGVuZCA9IG1faW1h
Z2VEYXRhTWFwLmVuZCgpOwogICAgIGZvciAoSW1hZ2VEYXRhTWFwOjppdGVyYXRvciBpdCA9IG1f
aW1hZ2VEYXRhTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29u
ZC5pbWFnZU5lZWRzVXBkYXRlID0gdHJ1ZTsKKyAgICAgICAgaXQtPnZhbHVlLmltYWdlTmVlZHNV
cGRhdGUgPSB0cnVlOwogCiAgICAgLy8gSWYgd2UncmUgaW4gdGhlIG1pZGRsZSBvZiBsYXlvdXQs
IHN0YXJ0IHJlZHJhd2luZyBkaXJ0eQogICAgIC8vIGltYWdlcyBvbiBhIHRpbWVyOyBvdGhlcndp
c2UgaXQncyBzYWZlIHRvIGRyYXcgaW1tZWRpYXRlbHkuCkBAIC0xMDMsNyArMTAzLDcgQEAgdm9p
ZCBTVkdJbWFnZUNhY2hlOjpyZWRyYXcoKQogewogICAgIEltYWdlRGF0YU1hcDo6aXRlcmF0b3Ig
ZW5kID0gbV9pbWFnZURhdGFNYXAuZW5kKCk7CiAgICAgZm9yIChJbWFnZURhdGFNYXA6Oml0ZXJh
dG9yIGl0ID0gbV9pbWFnZURhdGFNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAg
ICAgIEltYWdlRGF0YSYgZGF0YSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIEltYWdlRGF0YSYgZGF0
YSA9IGl0LT52YWx1ZTsKICAgICAgICAgaWYgKCFkYXRhLmltYWdlTmVlZHNVcGRhdGUpCiAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgLy8gSWYgdGhlIGNvbnRlbnQgY2hhbmdlZCB3ZSBy
ZWRyYXcgdXNpbmcgb3VyIGV4aXN0aW5nIEltYWdlQnVmZmVyLgpAQCAtMTM5LDkgKzEzOSw5IEBA
IEltYWdlKiBTVkdJbWFnZUNhY2hlOjpsb29rdXBPckNyZWF0ZUJpdG1hcEltYWdlRm9yUmVuZGVy
ZXIoY29uc3QgUmVuZGVyT2JqZWN0KiByCiAgICAgaWYgKHNpemVJdCA9PSBtX3NpemVBbmRTY2Fs
ZXNNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybiBJbWFnZTo6bnVsbEltYWdlKCk7CiAKLSAgICBJ
bnRTaXplIHNpemUgPSBzaXplSXQtPnNlY29uZC5zaXplOwotICAgIGZsb2F0IHpvb20gPSBzaXpl
SXQtPnNlY29uZC56b29tOwotICAgIGZsb2F0IHNjYWxlID0gc2l6ZUl0LT5zZWNvbmQuc2NhbGU7
CisgICAgSW50U2l6ZSBzaXplID0gc2l6ZUl0LT52YWx1ZS5zaXplOworICAgIGZsb2F0IHpvb20g
PSBzaXplSXQtPnZhbHVlLnpvb207CisgICAgZmxvYXQgc2NhbGUgPSBzaXplSXQtPnZhbHVlLnNj
YWxlOwogCiAgICAgLy8gRklYTUUgKDg1MzM1KTogVGhpcyBuZWVkcyB0byB0YWtlIENTUyB0cmFu
c2Zvcm0gc2NhbGUgaW50byBhY2NvdW50IGFzIHdlbGwuCiAgICAgUGFnZSogcGFnZSA9IHJlbmRl
cmVyLT5kb2N1bWVudCgpLT5wYWdlKCk7CkBAIC0xNTMsNyArMTUzLDcgQEAgSW1hZ2UqIFNWR0lt
YWdlQ2FjaGU6Omxvb2t1cE9yQ3JlYXRlQml0bWFwSW1hZ2VGb3JSZW5kZXJlcihjb25zdCBSZW5k
ZXJPYmplY3QqIHIKICAgICAvLyBMb29rdXAgaW1hZ2UgZm9yIGNsaWVudCBpbiBjYWNoZSBhbmQg
ZXZlbnR1YWxseSB1cGRhdGUgaXQuCiAgICAgSW1hZ2VEYXRhTWFwOjppdGVyYXRvciBpdCA9IG1f
aW1hZ2VEYXRhTWFwLmZpbmQoY2xpZW50KTsKICAgICBpZiAoaXQgIT0gbV9pbWFnZURhdGFNYXAu
ZW5kKCkpIHsKLSAgICAgICAgSW1hZ2VEYXRhJiBkYXRhID0gaXQtPnNlY29uZDsKKyAgICAgICAg
SW1hZ2VEYXRhJiBkYXRhID0gaXQtPnZhbHVlOwogCiAgICAgICAgIC8vIENvbW1vbiBjYXNlOiBp
bWFnZSBzaXplICYgem9vbSByZW1haW5lZCB0aGUgc2FtZS4KICAgICAgICAgaWYgKGRhdGEuc2l6
ZUFuZFNjYWxlcy5zaXplID09IHNpemUgJiYgZGF0YS5zaXplQW5kU2NhbGVzLnpvb20gPT0gem9v
bSAmJiBkYXRhLnNpemVBbmRTY2FsZXMuc2NhbGUgPT0gc2NhbGUpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmgKaW5kZXgg
NDRkMzIyN2I4M2U5Yjg3MThlNzlkOGMxNGM5ZTNiZTNhNmFmNjM4NS4uMTkxNTgwZGQ4YWJlNTlm
NTE3OTg0Nzg5ZmVmM2RmOWQxYWJjNmMyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Zn
L2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaApAQCAtNTAsNyArNTAsNyBA
QCBwdWJsaWM6CiAgICAgewogICAgICAgICAvLyBPbmx5IGFsbG93ZWQgZm9yIGVmZmVjdHMgYmVs
b25ncyB0byB0aGlzIGJ1aWxkZXIuCiAgICAgICAgIEFTU0VSVChtX2VmZmVjdFJlZmVyZW5jZXMu
Y29udGFpbnMoZWZmZWN0KSk7Ci0gICAgICAgIHJldHVybiBtX2VmZmVjdFJlZmVyZW5jZXMuZmlu
ZChlZmZlY3QpLT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBtX2VmZmVjdFJlZmVyZW5jZXMuZmlu
ZChlZmZlY3QpLT52YWx1ZTsKICAgICB9CiAKICAgICAvLyBSZXF1aXJlZCB0byBjaGFuZ2UgdGhl
IGF0dHJpYnV0ZXMgb2YgYSBmaWx0ZXIgZHVyaW5nIGFuIHN2Z0F0dHJpYnV0ZUNoYW5nZWQuCkBA
IC02Niw3ICs2Niw3IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBIYXNoTWFwPEF0b21pY1N0
cmluZywgUmVmUHRyPEZpbHRlckVmZmVjdD4gPjo6aXRlcmF0b3IgZW5kID0gbV9idWlsdGluRWZm
ZWN0cy5lbmQoKTsKICAgICAgICAgZm9yIChIYXNoTWFwPEF0b21pY1N0cmluZywgUmVmUHRyPEZp
bHRlckVmZmVjdD4gPjo6aXRlcmF0b3IgaXRlcmF0b3IgPSBtX2J1aWx0aW5FZmZlY3RzLmJlZ2lu
KCk7IGl0ZXJhdG9yICE9IGVuZDsgKytpdGVyYXRvcikKLSAgICAgICAgICAgICBtX2VmZmVjdFJl
ZmVyZW5jZXMuYWRkKGl0ZXJhdG9yLT5zZWNvbmQsIEZpbHRlckVmZmVjdFNldCgpKTsKKyAgICAg
ICAgICAgICBtX2VmZmVjdFJlZmVyZW5jZXMuYWRkKGl0ZXJhdG9yLT52YWx1ZSwgRmlsdGVyRWZm
ZWN0U2V0KCkpOwogICAgIH0KIAogICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBSZWZQdHI8Rmls
dGVyRWZmZWN0PiA+IG1fYnVpbHRpbkVmZmVjdHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5LmggYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5LmgKaW5kZXggNmRmZGFjNmRkNTc4YWYz
MGY2ZGVhYjdjZDI2NTgzNjA0NDJmM2FkZi4uNmExZjAwOTdiNjFiYzBiNWRiMDk4MDE1NTA5MDNj
MTkwNDQ5NjdiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZH
QW5pbWF0ZWRQcm9wZXJ0eS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NW
R0FuaW1hdGVkUHJvcGVydHkuaApAQCAtNTgsOCArNTgsOCBAQCBwdWJsaWM6CiAgICAgICAgIENh
Y2hlKiBjYWNoZSA9IGFuaW1hdGVkUHJvcGVydHlDYWNoZSgpOwogICAgICAgICBjb25zdCBDYWNo
ZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY2FjaGUtPmVuZCgpOwogICAgICAgICBmb3IgKENhY2hl
Ojpjb25zdF9pdGVyYXRvciBpdCA9IGNhY2hlLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
LSAgICAgICAgICAgIGlmIChpdC0+c2Vjb25kID09IHRoaXMpIHsKLSAgICAgICAgICAgICAgICBj
YWNoZS0+cmVtb3ZlKGl0LT5maXJzdCk7CisgICAgICAgICAgICBpZiAoaXQtPnZhbHVlID09IHRo
aXMpIHsKKyAgICAgICAgICAgICAgICBjYWNoZS0+cmVtb3ZlKGl0LT5rZXkpOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBdHRyaWJ1dGVUb1Byb3BlcnR5TWFwLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0F0dHJpYnV0ZVRvUHJvcGVydHlNYXAu
Y3BwCmluZGV4IGJlMzFjYzNjN2RhMmY1MGY1MWY2OWI1NTQ0MDI2NWRiMTM1YjUyOGMuLmNjNDZj
Y2ZhMDgxZmZjODgzMDliN2VmMjJkNjNmMGYzNGVmZDgxN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0F0dHJpYnV0ZVRvUHJvcGVydHlNYXAuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0F0dHJpYnV0ZVRvUHJvcGVydHlNYXAu
Y3BwCkBAIC0zMSw3ICszMSw3IEBAIHZvaWQgU1ZHQXR0cmlidXRlVG9Qcm9wZXJ0eU1hcDo6YWRk
UHJvcGVydGllcyhTVkdBdHRyaWJ1dGVUb1Byb3BlcnR5TWFwJiBtYXApCiB7CiAgICAgQXR0cmli
dXRlVG9Qcm9wZXJ0aWVzTWFwOjppdGVyYXRvciBlbmQgPSBtYXAubV9tYXAuZW5kKCk7CiAgICAg
Zm9yIChBdHRyaWJ1dGVUb1Byb3BlcnRpZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLm1fbWFwLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBQcm9wZXJ0aWVzVmVjdG9yKiB2ZWN0
b3IgPSBpdC0+c2Vjb25kOworICAgICAgICBQcm9wZXJ0aWVzVmVjdG9yKiB2ZWN0b3IgPSBpdC0+
dmFsdWU7CiAgICAgICAgIEFTU0VSVCh2ZWN0b3IpOwogCiAgICAgICAgIFByb3BlcnRpZXNWZWN0
b3I6Oml0ZXJhdG9yIHZlY3RvckVuZCA9IHZlY3Rvci0+ZW5kKCk7CkBAIC04MSwxMiArODEsMTIg
QEAgdm9pZCBTVkdBdHRyaWJ1dGVUb1Byb3BlcnR5TWFwOjpzeW5jaHJvbml6ZVByb3BlcnRpZXMo
U1ZHRWxlbWVudCogY29udGV4dEVsZW1lbnQKICAgICBBU1NFUlQoY29udGV4dEVsZW1lbnQpOwog
ICAgIEF0dHJpYnV0ZVRvUHJvcGVydGllc01hcDo6aXRlcmF0b3IgZW5kID0gbV9tYXAuZW5kKCk7
CiAgICAgZm9yIChBdHRyaWJ1dGVUb1Byb3BlcnRpZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9tYXAu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFByb3BlcnRpZXNWZWN0b3IqIHZl
Y3RvciA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFByb3BlcnRpZXNWZWN0b3IqIHZlY3RvciA9IGl0
LT52YWx1ZTsKICAgICAgICAgQVNTRVJUKHZlY3Rvcik7CiAKICAgICAgICAgUHJvcGVydGllc1Zl
Y3Rvcjo6aXRlcmF0b3IgdmVjdG9yRW5kID0gdmVjdG9yLT5lbmQoKTsKICAgICAgICAgZm9yIChQ
cm9wZXJ0aWVzVmVjdG9yOjppdGVyYXRvciB2ZWN0b3JJdCA9IHZlY3Rvci0+YmVnaW4oKTsgdmVj
dG9ySXQgIT0gdmVjdG9yRW5kOyArK3ZlY3Rvckl0KQotICAgICAgICAgICAgc3luY2hyb25pemVQ
cm9wZXJ0eShjb250ZXh0RWxlbWVudCwgaXQtPmZpcnN0LCAqdmVjdG9ySXQpOworICAgICAgICAg
ICAgc3luY2hyb25pemVQcm9wZXJ0eShjb250ZXh0RWxlbWVudCwgaXQtPmtleSwgKnZlY3Rvckl0
KTsKICAgICB9IAogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtl
ckNvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcApp
bmRleCBkN2VhZjVkYjQ2ZWU4Y2E3ODBlYjc2MWM4ZjQyYjQ3NmM5MDU1NzQ4Li5hNjlmYjcyNDZm
YmNmYWY2YmU2Zjg4ODc3MjM3Y2JlMWE2ZmI0MWNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS93b3JrZXJzL1dvcmtlckNvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
V29ya2VyQ29udGV4dC5jcHAKQEAgLTE4NCw3ICsxODQsNyBAQCBib29sIFdvcmtlckNvbnRleHQ6
Omhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0CiAgICAgQWN0aXZlRE9NT2JqZWN0c01hcCYgYWN0
aXZlT2JqZWN0cyA9IGFjdGl2ZURPTU9iamVjdHMoKTsKICAgICBBY3RpdmVET01PYmplY3RzTWFw
Ojpjb25zdF9pdGVyYXRvciBhY3RpdmVPYmplY3RzRW5kID0gYWN0aXZlT2JqZWN0cy5lbmQoKTsK
ICAgICBmb3IgKEFjdGl2ZURPTU9iamVjdHNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBhY3Rp
dmVPYmplY3RzLmJlZ2luKCk7IGl0ZXIgIT0gYWN0aXZlT2JqZWN0c0VuZDsgKytpdGVyKSB7Ci0g
ICAgICAgIGlmIChpdGVyLT5maXJzdC0+aGFzUGVuZGluZ0FjdGl2aXR5KCkpCisgICAgICAgIGlm
IChpdGVyLT5rZXktPmhhc1BlbmRpbmdBY3Rpdml0eSgpKQogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckV2
ZW50UXVldWUuY3BwIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJFdmVudFF1ZXVlLmNw
cAppbmRleCA1OWE5MzA3ZWFjMTc4NGI2OTljM2ZlZDIwYTQ1NWE3OWYwODkxMDdlLi4yMzU1Mjlm
MWZlYjk3MTI4YzMxZDk2YTMwZGEwY2RmZmJiZTlkMGViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS93b3JrZXJzL1dvcmtlckV2ZW50UXVldWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dv
cmtlcnMvV29ya2VyRXZlbnRRdWV1ZS5jcHAKQEAgLTEyNyw3ICsxMjcsNyBAQCB2b2lkIFdvcmtl
ckV2ZW50UXVldWU6OmNsb3NlKCkKIHsKICAgICBtX2lzQ2xvc2VkID0gdHJ1ZTsKICAgICBmb3Ig
KEV2ZW50VGFza01hcDo6aXRlcmF0b3IgaXQgPSBtX2V2ZW50VGFza01hcC5iZWdpbigpOyBpdCAh
PSBtX2V2ZW50VGFza01hcC5lbmQoKTsgKytpdCkgewotICAgICAgICBFdmVudERpc3BhdGNoZXJU
YXNrKiB0YXNrID0gaXQtPnNlY29uZDsKKyAgICAgICAgRXZlbnREaXNwYXRjaGVyVGFzayogdGFz
ayA9IGl0LT52YWx1ZTsKICAgICAgICAgdGFzay0+Y2FuY2VsKCk7CiAgICAgfQogICAgIG1fZXZl
bnRUYXNrTWFwLmNsZWFyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0
cFJlcXVlc3QuY3BwIGIvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAppbmRl
eCAxMTFhNjQ5YTEzZTc2YWVmODM3MGIxODJjOTUxY2E5ZTc1Y2ZiMjJlLi40NWYzZmNkYmU2MmM3
MGFhMDEwNDVmYmRhZDE5NjYyNzdiNjMyOWRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94
bWwvWE1MSHR0cFJlcXVlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVx
dWVzdC5jcHAKQEAgLTkyMCw3ICs5MjAsNyBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpzZXRSZXF1
ZXN0SGVhZGVySW50ZXJuYWwoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBjb25zdCBTdAogewog
ICAgIEhUVFBIZWFkZXJNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX3JlcXVlc3RIZWFkZXJzLmFk
ZChuYW1lLCB2YWx1ZSk7CiAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgcmVz
dWx0Lml0ZXJhdG9yLT5zZWNvbmQgKz0gIiwgIiArIHZhbHVlOworICAgICAgICByZXN1bHQuaXRl
cmF0b3ItPnZhbHVlICs9ICIsICIgKyB2YWx1ZTsKIH0KIAogU3RyaW5nIFhNTEh0dHBSZXF1ZXN0
OjpnZXRSZXF1ZXN0SGVhZGVyKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkgY29uc3QKQEAgLTk0
NywxNiArOTQ3LDE2IEBAIFN0cmluZyBYTUxIdHRwUmVxdWVzdDo6Z2V0QWxsUmVzcG9uc2VIZWFk
ZXJzKEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAogICAgICAgICAvLyAgICAgMikgVGhlcmUncyBu
byBrbm93biBoYXJtIGluIGhpZGluZyBTZXQtQ29va2llIGhlYWRlciBmaWVsZHMgZW50aXJlbHk7
IHdlIGRvbid0CiAgICAgICAgIC8vICAgICAgICBrbm93IGFueSB3aWRlbHkgdXNlZCB0ZWNobmlx
dWUgdGhhdCByZXF1aXJlcyBhY2Nlc3MgdG8gdGhlbS4KICAgICAgICAgLy8gICAgIDMpIEZpcmVm
b3ggaGFzIGltcGxlbWVudGVkIHRoaXMgcG9saWN5LgotICAgICAgICBpZiAoaXNTZXRDb29raWVI
ZWFkZXIoaXQtPmZpcnN0KSAmJiAhc2VjdXJpdHlPcmlnaW4oKS0+Y2FuTG9hZExvY2FsUmVzb3Vy
Y2VzKCkpCisgICAgICAgIGlmIChpc1NldENvb2tpZUhlYWRlcihpdC0+a2V5KSAmJiAhc2VjdXJp
dHlPcmlnaW4oKS0+Y2FuTG9hZExvY2FsUmVzb3VyY2VzKCkpCiAgICAgICAgICAgICBjb250aW51
ZTsKIAotICAgICAgICBpZiAoIW1fc2FtZU9yaWdpblJlcXVlc3QgJiYgIWlzT25BY2Nlc3NDb250
cm9sUmVzcG9uc2VIZWFkZXJXaGl0ZWxpc3QoaXQtPmZpcnN0KSAmJiAhYWNjZXNzQ29udHJvbEV4
cG9zZUhlYWRlclNldC5jb250YWlucyhpdC0+Zmlyc3QpKQorICAgICAgICBpZiAoIW1fc2FtZU9y
aWdpblJlcXVlc3QgJiYgIWlzT25BY2Nlc3NDb250cm9sUmVzcG9uc2VIZWFkZXJXaGl0ZWxpc3Qo
aXQtPmtleSkgJiYgIWFjY2Vzc0NvbnRyb2xFeHBvc2VIZWFkZXJTZXQuY29udGFpbnMoaXQtPmtl
eSkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZChpdC0+Zmlyc3QpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+a2V5KTsKICAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJzonKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQoJyAnKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPnNlY29uZCk7Cisg
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT52YWx1ZSk7CiAgICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKCdccicpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsK
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhGdW5jdGlvbnMuY3Bw
IGIvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoRnVuY3Rpb25zLmNwcAppbmRleCAzYzkwZTNiNTE3
MTg1OWE1NmU4NzJiYjc2NTJmNTk1OThhNjM3ZDJhLi4wMDE5YmM0MzY1MDRiYTJiMjFkZWZlZmYz
MGY2NDgwYzFlZjk4MWUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhGdW5j
dGlvbnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aEZ1bmN0aW9ucy5jcHAKQEAg
LTcyMyw3ICs3MjMsNyBAQCBGdW5jdGlvbiogY3JlYXRlRnVuY3Rpb24oY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBWZWN0b3I8RXhwcmVzc2lvbio+JiBhcmdzKQogICAgIEhhc2hNYXA8U3RyaW5n
LCBGdW5jdGlvblJlYz46Oml0ZXJhdG9yIGZ1bmN0aW9uTWFwSXRlciA9IGZ1bmN0aW9uTWFwLT5m
aW5kKG5hbWUpOwogICAgIEZ1bmN0aW9uUmVjKiBmdW5jdGlvblJlYyA9IDA7CiAKLSAgICBpZiAo
ZnVuY3Rpb25NYXBJdGVyID09IGZ1bmN0aW9uTWFwLT5lbmQoKSB8fCAhKGZ1bmN0aW9uUmVjID0g
JmZ1bmN0aW9uTWFwSXRlci0+c2Vjb25kKS0+YXJncy5jb250YWlucyhhcmdzLnNpemUoKSkpCisg
ICAgaWYgKGZ1bmN0aW9uTWFwSXRlciA9PSBmdW5jdGlvbk1hcC0+ZW5kKCkgfHwgIShmdW5jdGlv
blJlYyA9ICZmdW5jdGlvbk1hcEl0ZXItPnZhbHVlKS0+YXJncy5jb250YWlucyhhcmdzLnNpemUo
KSkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgRnVuY3Rpb24qIGZ1bmN0aW9uID0gZnVuY3Rp
b25SZWMtPmZhY3RvcnlGbigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL1hQYXRo
UGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aFBhcnNlci5jcHAKaW5kZXggYjVl
NmE5MjM3NTkzYjRhYWEyYTI0M2YyZmY5ZDg2ZTU3ZjkzMGE5Ny4uNzQ5MTgwZGJlNWVlOGY5YjEy
MmZjZGExZTY5ODE2OWMwMDlmOGY4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL1hQ
YXRoUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhQYXJzZXIuY3BwCkBA
IC0xMDMsNyArMTAzLDcgQEAgc3RhdGljIGJvb2wgaXNBeGlzTmFtZShjb25zdCBTdHJpbmcmIG5h
bWUsIFN0ZXA6OkF4aXMmIHR5cGUpCiAgICAgQXhpc05hbWVzTWFwOjppdGVyYXRvciBpdCA9IGF4
aXNOYW1lcy5maW5kKG5hbWUpOwogICAgIGlmIChpdCA9PSBheGlzTmFtZXMuZW5kKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB0eXBlID0gaXQtPnNlY29uZDsKKyAgICB0eXBlID0gaXQt
PnZhbHVlOwogICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS94bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwIGIvU291cmNlL1dlYkNvcmUveG1sL1hTTFRQ
cm9jZXNzb3JMaWJ4c2x0LmNwcAppbmRleCBlMjFjODI3YzI1ZGJjNWVmZDMxYmU3MDVmOWYzNmY1
MmRlNTQ4MjQxLi5hOTEyOTg4ZGE2MzhjY2Y4NDJlN2IxN2FmNWU0MzQ0NmU4YTMyZDI4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yTGlieHNsdC5jcHAKQEAgLTIyNSw4ICsy
MjUsOCBAQCBzdGF0aWMgY29uc3QgY2hhcioqIHhzbHRQYXJhbUFycmF5RnJvbVBhcmFtZXRlck1h
cChYU0xUUHJvY2Vzc29yOjpQYXJhbWV0ZXJNYXAmCiAgICAgWFNMVFByb2Nlc3Nvcjo6UGFyYW1l
dGVyTWFwOjppdGVyYXRvciBlbmQgPSBwYXJhbWV0ZXJzLmVuZCgpOwogICAgIHVuc2lnbmVkIGlu
ZGV4ID0gMDsKICAgICBmb3IgKFhTTFRQcm9jZXNzb3I6OlBhcmFtZXRlck1hcDo6aXRlcmF0b3Ig
aXQgPSBwYXJhbWV0ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBwYXJh
bWV0ZXJBcnJheVtpbmRleCsrXSA9IGZhc3RTdHJEdXAoaXQtPmZpcnN0LnV0ZjgoKS5kYXRhKCkp
OwotICAgICAgICBwYXJhbWV0ZXJBcnJheVtpbmRleCsrXSA9IGZhc3RTdHJEdXAoaXQtPnNlY29u
ZC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgcGFyYW1ldGVyQXJyYXlbaW5kZXgrK10gPSBmYXN0
U3RyRHVwKGl0LT5rZXkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHBhcmFtZXRlckFycmF5W2lu
ZGV4KytdID0gZmFzdFN0ckR1cChpdC0+dmFsdWUudXRmOCgpLmRhdGEoKSk7CiAgICAgfQogICAg
IHBhcmFtZXRlckFycmF5W2luZGV4XSA9IDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3htbC9YU0xUUHJvY2Vzc29yUXQuY3BwIGIvU291cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNz
b3JRdC5jcHAKaW5kZXggYTY3YzVmZGU3NmZjYzU2OGNlM2M0YzY4YzYxMDYwZDQwYmI5MzEwYy4u
MGM0MTQwYThkNzllZGVmYTUwMjMzNWZlMDE4MzEyZjQ3NWYxNzBmNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
eG1sL1hTTFRQcm9jZXNzb3JRdC5jcHAKQEAgLTE0Miw3ICsxNDIsNyBAQCBib29sIFhTTFRQcm9j
ZXNzb3I6OnRyYW5zZm9ybVRvU3RyaW5nKE5vZGUqIHNvdXJjZU5vZGUsIFN0cmluZyYsIFN0cmlu
ZyYgcmVzdWx0UwogCiAgICAgWFNMVFByb2Nlc3Nvcjo6UGFyYW1ldGVyTWFwOjppdGVyYXRvciBl
bmQgPSBtX3BhcmFtZXRlcnMuZW5kKCk7CiAgICAgZm9yIChYU0xUUHJvY2Vzc29yOjpQYXJhbWV0
ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wYXJhbWV0ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkKLSAgICAgICAgcXVlcnkuYmluZFZhcmlhYmxlKFFTdHJpbmcoaXQtPmZpcnN0KSwgUVhtbEl0
ZW0oUVZhcmlhbnQoUVN0cmluZyhpdC0+c2Vjb25kKSkpKTsKKyAgICAgICAgcXVlcnkuYmluZFZh
cmlhYmxlKFFTdHJpbmcoaXQtPmtleSksIFFYbWxJdGVtKFFWYXJpYW50KFFTdHJpbmcoaXQtPnZh
bHVlKSkpKTsKIAogICAgIFFTdHJpbmcgc291cmNlOwogICAgIGlmIChzb3VyY2VJc0RvY3VtZW50
ICYmIG93bmVyRG9jdW1lbnQtPnRyYW5zZm9ybVNvdXJjZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9ibGFja2JlcnJ5L0FwaS9CYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9i
bGFja2JlcnJ5L0FwaS9CYWNraW5nU3RvcmUuY3BwCmluZGV4IGQzYzJjZTkzYTYyNWI2ZGNjMWZi
MTMxNDU5OGRlODgwMTA2NDFmY2EuLjk2NzE1NDg4YTc5Nzc1NzU3YzczMDZiNWU0NmY5Mzg3YzBj
YWYzNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvQmFja2luZ1N0
b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL0JhY2tpbmdTdG9yZS5j
cHAKQEAgLTcxMSw4ICs3MTEsOCBAQCB2b2lkIEJhY2tpbmdTdG9yZVByaXZhdGU6OnNldEJhY2tp
bmdTdG9yZVJlY3QoY29uc3QgUGxhdGZvcm06OkludFJlY3QmIGJhY2tpbmdTdAogICAgIC8vIG91
ciBuZXcgYmFja2luZyBzdG9yZSByZWN0LgogICAgIFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIHRp
bGVNYXBFbmQgPSBjdXJyZW50TWFwLmVuZCgpOwogICAgIGZvciAoVGlsZU1hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBjdXJyZW50TWFwLmJlZ2luKCk7IGl0ICE9IHRpbGVNYXBFbmQ7ICsraXQpIHsK
LSAgICAgICAgVGlsZUluZGV4IG9sZEluZGV4ID0gaXQtPmZpcnN0OwotICAgICAgICBCYWNraW5n
U3RvcmVUaWxlKiB0aWxlID0gaXQtPnNlY29uZDsKKyAgICAgICAgVGlsZUluZGV4IG9sZEluZGV4
ID0gaXQtPmtleTsKKyAgICAgICAgQmFja2luZ1N0b3JlVGlsZSogdGlsZSA9IGl0LT52YWx1ZTsK
IAogICAgICAgICAvLyBSZXNldCB0aGUgb2xkIGluZGV4LgogICAgICAgICByZXNldFRpbGUob2xk
SW5kZXgsIHRpbGUsIGZhbHNlIC8qcmVzZXRCYWNrZ3JvdW5kKi8pOwpAQCAtNzY4LDggKzc2OCw4
IEBAIHZvaWQgQmFja2luZ1N0b3JlUHJpdmF0ZTo6c2V0QmFja2luZ1N0b3JlUmVjdChjb25zdCBQ
bGF0Zm9ybTo6SW50UmVjdCYgYmFja2luZ1N0CiAgICAgc2l6ZV90IGkgPSAwOwogICAgIFRpbGVN
YXA6OmNvbnN0X2l0ZXJhdG9yIGxlZnRPdmVyRW5kID0gbGVmdE92ZXJUaWxlcy5lbmQoKTsKICAg
ICBmb3IgKFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGVmdE92ZXJUaWxlcy5iZWdpbigp
OyBpdCAhPSBsZWZ0T3ZlckVuZDsgKytpdCkgewotICAgICAgICBUaWxlSW5kZXggb2xkSW5kZXgg
PSBpdC0+Zmlyc3Q7Ci0gICAgICAgIEJhY2tpbmdTdG9yZVRpbGUqIHRpbGUgPSBpdC0+c2Vjb25k
OworICAgICAgICBUaWxlSW5kZXggb2xkSW5kZXggPSBpdC0+a2V5OworICAgICAgICBCYWNraW5n
U3RvcmVUaWxlKiB0aWxlID0gaXQtPnZhbHVlOwogICAgICAgICBpZiAoaSA+PSBpbmRleGVzVG9G
aWxsLnNpemUoKSkgewogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
ICAgICBicmVhazsKQEAgLTE3NDQsNyArMTc0NCw3IEBAIFBsYXRmb3JtOjpJbnRSZWN0IEJhY2tp
bmdTdG9yZVByaXZhdGU6OnZpc2libGVUaWxlc1JlY3QoKSBjb25zdAogICAgIFRpbGVNYXA6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IGN1cnJlbnRNYXAuZW5kKCk7CiAgICAgZm9yIChUaWxlTWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IGN1cnJlbnRNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7
CiAgICAgICAgIFRpbGVSZWN0IHRpbGVSZWN0OwotICAgICAgICB0aWxlUmVjdC5maXJzdCA9IGl0
LT5maXJzdDsKKyAgICAgICAgdGlsZVJlY3QuZmlyc3QgPSBpdC0+a2V5OwogICAgICAgICB0aWxl
UmVjdC5zZWNvbmQgPSB0aGlzLT50aWxlUmVjdCgpOwogICAgICAgICBQbGF0Zm9ybTo6SW50UmVj
dCB0aWxlID0gbWFwRnJvbVRpbGVzVG9UcmFuc2Zvcm1lZENvbnRlbnRzKHRpbGVSZWN0KTsKICAg
ICAgICAgaWYgKHRpbGUuaW50ZXJzZWN0cyh2aXNpYmxlQ29udGVudHNSZWN0KCkpKQpAQCAtMTgw
NSw3ICsxODA1LDcgQEAgdm9pZCBCYWNraW5nU3RvcmVQcml2YXRlOjpyZXNldFRpbGVzKGJvb2wg
cmVzZXRCYWNrZ3JvdW5kKQogCiAgICAgVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY3Vy
cmVudE1hcC5lbmQoKTsKICAgICBmb3IgKFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY3Vy
cmVudE1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHJlc2V0VGlsZShpdC0+
Zmlyc3QsIGl0LT5zZWNvbmQsIHJlc2V0QmFja2dyb3VuZCk7CisgICAgICAgIHJlc2V0VGlsZShp
dC0+a2V5LCBpdC0+dmFsdWUsIHJlc2V0QmFja2dyb3VuZCk7CiB9CiAKIHZvaWQgQmFja2luZ1N0
b3JlUHJpdmF0ZTo6dXBkYXRlVGlsZXMoYm9vbCB1cGRhdGVWaXNpYmxlLCBib29sIGltbWVkaWF0
ZSkKQEAgLTE4MTgsMTAgKzE4MTgsMTAgQEAgdm9pZCBCYWNraW5nU3RvcmVQcml2YXRlOjp1cGRh
dGVUaWxlcyhib29sIHVwZGF0ZVZpc2libGUsIGJvb2wgaW1tZWRpYXRlKQogCiAgICAgVGlsZU1h
cDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY3VycmVudE1hcC5lbmQoKTsKICAgICBmb3IgKFRpbGVN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY3VycmVudE1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKLSAgICAgICAgYm9vbCBpc1Zpc2libGUgPSBpc1RpbGVWaXNpYmxlKGl0LT5maXJzdCk7
CisgICAgICAgIGJvb2wgaXNWaXNpYmxlID0gaXNUaWxlVmlzaWJsZShpdC0+a2V5KTsKICAgICAg
ICAgaWYgKCF1cGRhdGVWaXNpYmxlICYmIGlzVmlzaWJsZSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICB1cGRhdGVUaWxlKGl0LT5maXJzdCwgaW1tZWRpYXRlKTsKKyAgICAgICAgdXBk
YXRlVGlsZShpdC0+a2V5LCBpbW1lZGlhdGUpOwogICAgIH0KIH0KIApAQCAtMTg0Miw4ICsxODQy
LDggQEAgdm9pZCBCYWNraW5nU3RvcmVQcml2YXRlOjp1cGRhdGVUaWxlc0ZvclNjcm9sbE9yTm90
UmVuZGVyZWRSZWdpb24oYm9vbCBjaGVja0xvYWQKIAogICAgIFRpbGVNYXA6OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IGN1cnJlbnRNYXAuZW5kKCk7CiAgICAgZm9yIChUaWxlTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IGN1cnJlbnRNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAg
IFRpbGVJbmRleCBpbmRleCA9IGl0LT5maXJzdDsKLSAgICAgICAgQmFja2luZ1N0b3JlVGlsZSog
dGlsZSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFRpbGVJbmRleCBpbmRleCA9IGl0LT5rZXk7Cisg
ICAgICAgIEJhY2tpbmdTdG9yZVRpbGUqIHRpbGUgPSBpdC0+dmFsdWU7CiAgICAgICAgIGJvb2wg
aXNWaXNpYmxlID0gaXNUaWxlVmlzaWJsZShpbmRleCk7CiAgICAgICAgIC8vIFRoZSByZWN0IGlu
IHRyYW5zZm9ybWVkIGNvbnRlbnRzIGNvb3JkaW5hdGVzLgogICAgICAgICBQbGF0Zm9ybTo6SW50
UmVjdCByZWN0KG9yaWdpbk9mVGlsZShpbmRleCksIHRpbGVTaXplKCkpOwpAQCAtMTk4Niw4ICsx
OTg2LDggQEAgQmFja2luZ1N0b3JlUHJpdmF0ZTo6VGlsZVJlY3RMaXN0IEJhY2tpbmdTdG9yZVBy
aXZhdGU6Om1hcEZyb21UcmFuc2Zvcm1lZENvbnRlbnQKICAgICBUaWxlUmVjdExpc3QgdGlsZVJl
Y3RMaXN0OwogICAgIFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHRpbGVNYXAuZW5kKCk7
CiAgICAgZm9yIChUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHRpbGVNYXAuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFRpbGVJbmRleCBpbmRleCA9IGl0LT5maXJzdDsK
LSAgICAgICAgQmFja2luZ1N0b3JlVGlsZSogdGlsZSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFRp
bGVJbmRleCBpbmRleCA9IGl0LT5rZXk7CisgICAgICAgIEJhY2tpbmdTdG9yZVRpbGUqIHRpbGUg
PSBpdC0+dmFsdWU7CiAKICAgICAgICAgLy8gTmVlZCB0byBtYXAgdGhlIHJlY3QgdG8gdGlsZSBj
b29yZGluYXRlcy4KICAgICAgICAgUGxhdGZvcm06OkludFJlY3QgciA9IHJlY3Q7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9u
UHJlc2VudGVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBv
cnQvTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbC5jcHAKaW5kZXggNmIyOTIxMDI5NDYyNzdkYTI4
ZTc5OGQ3ZWVkZjhiOTM5YzUzMTljNy4uMmNkN2MxNzQ1MjdkZjEwZjM5MGExNjViYWE3YmQ5NmY0
ZjUzZmQ4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBw
b3J0L05vdGlmaWNhdGlvblByZXNlbnRlckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmNwcApAQCAt
ODEsNyArODEsNyBAQCB2b2lkIE5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6OmNhbmNlbChOb3Rp
ZmljYXRpb24qIG5vdGlmaWNhdGlvbikKICAgICBpZiAoaXQgPT0gbV9ub3RpZmljYXRpb25zLmVu
ZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3BsYXRmb3JtUHJlc2VudGVyLT5jYW5jZWwo
c3RkOjpzdHJpbmcoaXQtPnNlY29uZC51dGY4KCkuZGF0YSgpKSk7CisgICAgbV9wbGF0Zm9ybVBy
ZXNlbnRlci0+Y2FuY2VsKHN0ZDo6c3RyaW5nKGl0LT52YWx1ZS51dGY4KCkuZGF0YSgpKSk7CiAg
ICAgbV9ub3RpZmljYXRpb25zLnJlbW92ZShpdCk7CiB9CiAKQEAgLTEwOCwxMiArMTA4LDEyIEBA
IHZvaWQgTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6b25QZXJtaXNzaW9uKGNvbnN0IHN0ZDo6
c3RyaW5nJiBkb21haW4sIGJvb2wgaXNBCiAgICAgU3RyaW5nIGRvbWFpblN0cmluZyA9IFN0cmlu
Zzo6ZnJvbVVURjgoZG9tYWluLmNfc3RyKCkpOwogICAgIFBlcm1pc3Npb25SZXF1ZXN0TWFwOjpp
dGVyYXRvciBpdCA9IG1fcGVybWlzc2lvblJlcXVlc3RzLmJlZ2luKCk7CiAgICAgZm9yICg7IGl0
ICE9IG1fcGVybWlzc2lvblJlcXVlc3RzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+
Zmlyc3QtPnVybCgpLmhvc3QoKSAhPSBkb21haW5TdHJpbmcpCisgICAgICAgIGlmIChpdC0+a2V5
LT51cmwoKS5ob3N0KCkgIT0gZG9tYWluU3RyaW5nKQogICAgICAgICAgICAgY29udGludWU7CiAK
ICAgICAgICAgaWYgKGlzQWxsb3dlZCkgewogICAgICAgICAgICAgbV9hbGxvd2VkRG9tYWlucy5h
ZGQoZG9tYWluU3RyaW5nKTsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPmhhbmRsZUV2ZW50KCk7
CisgICAgICAgICAgICBpdC0+dmFsdWUtPmhhbmRsZUV2ZW50KCk7CiAgICAgICAgIH0gZWxzZQog
ICAgICAgICAgICAgbV9hbGxvd2VkRG9tYWlucy5yZW1vdmUoZG9tYWluU3RyaW5nKTsKIApAQCAt
MTQ0LDkgKzE0NCw5IEBAIHZvaWQgTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6bm90aWZpY2F0
aW9uQ2xpY2tlZChjb25zdCBzdGQ6OnN0cmluZyYgaWQpCiAgICAgU3RyaW5nIGlkU3RyaW5nID0g
U3RyaW5nOjpmcm9tVVRGOChpZC5jX3N0cigpKTsKICAgICBOb3RpZmljYXRpb25NYXA6Oml0ZXJh
dG9yIGl0ID0gbV9ub3RpZmljYXRpb25zLmJlZ2luKCk7CiAgICAgZm9yICg7IGl0ICE9IG1fbm90
aWZpY2F0aW9ucy5lbmQoKTsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnNlY29uZCA9PSBpZFN0
cmluZyAmJiBpdC0+Zmlyc3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkgewotICAgICAgICAg
ICAgUmVmUHRyPE5vdGlmaWNhdGlvbj4gbm90aWZpY2F0aW9uID0gaXQtPmZpcnN0OwotICAgICAg
ICAgICAgaXQtPmZpcnN0LT5kaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygp
LmNsaWNrRXZlbnQsIGZhbHNlLCB0cnVlKSk7CisgICAgICAgIGlmIChpdC0+dmFsdWUgPT0gaWRT
dHJpbmcgJiYgaXQtPmZpcnN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpIHsKKyAgICAgICAg
ICAgIFJlZlB0cjxOb3RpZmljYXRpb24+IG5vdGlmaWNhdGlvbiA9IGl0LT5rZXk7CisgICAgICAg
ICAgICBpdC0+a2V5LT5kaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmNs
aWNrRXZlbnQsIGZhbHNlLCB0cnVlKSk7CiAgICAgICAgICAgICBtX25vdGlmaWNhdGlvbnMucmVt
b3ZlKG5vdGlmaWNhdGlvbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0Fib3V0RGF0YS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9BYm91dERhdGEuY3Bw
CmluZGV4IDdiN2ExZDU5YWI4NTc4MWMyOWViOTIxOWViMzU3MmNiNjg3MDkzZTQuLjVlMWI3N2Uz
YjNmOWYzNjM2MjNjNGZiNmYxYTZkMDg5MTNhYTAxMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0Fib3V0RGF0YS5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvQWJvdXREYXRhLmNwcApAQCAtMjA1LDcgKzIw
NSw3IEBAIHN0YXRpYyB2b2lkIGR1bXBKU0NUeXBlQ291bnRTZXRUb1RhYmxlSFRNTChTdHJpbmcm
IHRhYmxlSFRNTCwgSlNDOjpUeXBlQ291bnRTZXQqCiAgICAgICAgIHJldHVybjsKIAogICAgIGZv
ciAoSlNDOjpUeXBlQ291bnRTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSB0eXBlQ291bnRTZXQt
PmJlZ2luKCk7IGl0ZXIgIT0gdHlwZUNvdW50U2V0LT5lbmQoKTsgKytpdGVyKQotICAgICAgICB0
YWJsZUhUTUwgKz0gbnVtYmVyVG9IVE1MVHIoaXRlci0+Zmlyc3QsIGl0ZXItPnNlY29uZCk7Cisg
ICAgICAgIHRhYmxlSFRNTCArPSBudW1iZXJUb0hUTUxUcihpdGVyLT5rZXksIGl0ZXItPnZhbHVl
KTsKIH0KIAogc3RhdGljIFN0cmluZyBtZW1vcnlQYWdlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0ZyYW1lTGF5ZXJzLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0ZyYW1lTGF5ZXJzLmNwcAppbmRleCBhNDlm
NTk0ZjJjMjBjMmMzMTc5MzIzOTJkNzFhNTQ1Njg5YjVjNDY3Li4yN2M2MmI2MDAwZDU3NjJkMzll
ZDExNjJmZWJkNDM2YjQzMzhkNTVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVy
cnkvV2ViS2l0U3VwcG9ydC9GcmFtZUxheWVycy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ibGFj
a2JlcnJ5L1dlYktpdFN1cHBvcnQvRnJhbWVMYXllcnMuY3BwCkBAIC05MSw3ICs5MSw3IEBAIHZv
aWQgRnJhbWVMYXllcnM6OnJlbW92ZUxheWVyQnlGcmFtZShGcmFtZSogZnJhbWUpCiAgICAgQVNT
RVJUKGZyYW1lKTsKICAgICBGcmFtZUxheWVyTWFwOjppdGVyYXRvciBpdCA9IG1fZnJhbWVMYXll
cnMuZmluZChmcmFtZSk7CiAgICAgaWYgKGl0ICE9IG1fZnJhbWVMYXllcnMuZW5kKCkpIHsKLSAg
ICAgICAgTGF5ZXJXZWJLaXRUaHJlYWQqIGxheWVyID0gaXQtPnNlY29uZDsKKyAgICAgICAgTGF5
ZXJXZWJLaXRUaHJlYWQqIGxheWVyID0gaXQtPnZhbHVlOwogICAgICAgICBpZiAobGF5ZXItPnN1
cGVybGF5ZXIoKSkKICAgICAgICAgICAgIGxheWVyLT5yZW1vdmVGcm9tU3VwZXJsYXllcigpOwog
ICAgICAgICBtX2ZyYW1lTGF5ZXJzLnJlbW92ZShpdCk7CkBAIC0xMDQsNyArMTA0LDcgQEAgdm9p
ZCBGcmFtZUxheWVyczo6Y29tbWl0T25XZWJLaXRUaHJlYWQoZG91YmxlIHNjYWxlKQogICAgIEFT
U0VSVChtX3Jvb3RMYXllcik7CiAgICAgaWYgKCFpc1Jvb3RMYXllck1haW5GcmFtZUxheWVyKCkp
IHsKICAgICAgICAgZm9yIChGcmFtZUxheWVyTWFwOjppdGVyYXRvciBpdCA9IG1fZnJhbWVMYXll
cnMuYmVnaW4oKTsgaXQgIT0gbV9mcmFtZUxheWVycy5lbmQoKTsgKytpdCkKLSAgICAgICAgICAg
IGl0LT5zZWNvbmQtPnNldEFic29sdXRlT2Zmc2V0KGZyYW1lTGF5ZXJBYnNvbHV0ZU9mZnNldChp
dC0+Zmlyc3QpKTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+c2V0QWJzb2x1dGVPZmZzZXQoZnJh
bWVMYXllckFic29sdXRlT2Zmc2V0KGl0LT5rZXkpKTsKICAgICB9CiAgICAgbV9yb290TGF5ZXIt
PmNvbW1pdE9uV2ViS2l0VGhyZWFkKHNjYWxlKTsKIH0KQEAgLTExMiw3ICsxMTIsNyBAQCB2b2lk
IEZyYW1lTGF5ZXJzOjpjb21taXRPbldlYktpdFRocmVhZChkb3VibGUgc2NhbGUpCiB2b2lkIEZy
YW1lTGF5ZXJzOjpjYWxjdWxhdGVSb290TGF5ZXIoKQogewogICAgIGlmIChtX2ZyYW1lTGF5ZXJz
LnNpemUoKSA9PSAxICYmIG1fZnJhbWVMYXllcnMuYmVnaW4oKS0+Zmlyc3QgPT0gbV9wYWdlUHJp
dmF0ZS0+bV9tYWluRnJhbWUpCi0gICAgICAgIG1fcm9vdExheWVyID0gbV9mcmFtZUxheWVycy5i
ZWdpbigpLT5zZWNvbmQ7CisgICAgICAgIG1fcm9vdExheWVyID0gbV9mcmFtZUxheWVycy5iZWdp
bigpLT52YWx1ZTsKICAgICBlbHNlIGlmIChtX3Jvb3RHcmFwaGljc0xheWVyKQogICAgICAgICBt
X3Jvb3RMYXllciA9IG1fcm9vdEdyYXBoaWNzTGF5ZXItPnBsYXRmb3JtTGF5ZXIoKTsKICAgICBl
bHNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHZW9sb2NhdGlv
blBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5jcHAKaW5kZXggNGMwZWQ5
Y2Q3MTdiNmY0ZDVhYTZhZmFmOTcwYmViNjk2Nzk2ODlkMy4uMWVlYWM2NjdiZGY2NmIzZjE5M2Zi
MzM1YTM4NzEyOGZiYzkxMjY3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5h
Z2VyLmNwcApAQCAtNjQsNyArNjQsNyBAQCBib29sIFdlYkdlb2xvY2F0aW9uUGVybWlzc2lvblJl
cXVlc3RNYW5hZ2VyOjpyZW1vdmUoY29uc3QgV2ViS2l0OjpXZWJHZW9sb2NhdGlvbgogICAgIEdl
b2xvY2F0aW9uSWRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wcml2YXRlLT5tX2dlb2xvY2F0aW9uSWRN
YXAuZmluZChnZW9sb2NhdGlvbik7CiAgICAgaWYgKGl0ID09IG1fcHJpdmF0ZS0+bV9nZW9sb2Nh
dGlvbklkTWFwLmVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWQgPSBpdC0+c2Vj
b25kOworICAgIGlkID0gaXQtPnZhbHVlOwogICAgIG1fcHJpdmF0ZS0+bV9nZW9sb2NhdGlvbklk
TWFwLnJlbW92ZShpdCk7CiAgICAgbV9wcml2YXRlLT5tX2lkR2VvbG9jYXRpb25NYXAucmVtb3Zl
KGlkKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTc1LDcgKzc1LDcgQEAgYm9vbCBXZWJHZW9sb2Nh
dGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlcjo6cmVtb3ZlKGludCBpZCwgV2ViS2l0OjpXZWJH
ZW9sb2NhdGkKICAgICBJZEdlb2xvY2F0aW9uTWFwOjppdGVyYXRvciBpdCA9IG1fcHJpdmF0ZS0+
bV9pZEdlb2xvY2F0aW9uTWFwLmZpbmQoaWQpOwogICAgIGlmIChpdCA9PSBtX3ByaXZhdGUtPm1f
aWRHZW9sb2NhdGlvbk1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEdlb2xv
Y2F0aW9uKiBnZW9sb2NhdGlvbiA9IGl0LT5zZWNvbmQ7CisgICAgR2VvbG9jYXRpb24qIGdlb2xv
Y2F0aW9uID0gaXQtPnZhbHVlOwogICAgIHBlcm1pc3Npb25SZXF1ZXN0ID0gV2ViR2VvbG9jYXRp
b25QZXJtaXNzaW9uUmVxdWVzdChnZW9sb2NhdGlvbik7CiAgICAgbV9wcml2YXRlLT5tX2lkR2Vv
bG9jYXRpb25NYXAucmVtb3ZlKGl0KTsKICAgICBtX3ByaXZhdGUtPm1fZ2VvbG9jYXRpb25JZE1h
cC5yZW1vdmUoZ2VvbG9jYXRpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViSURCTWV0YWRhdGEuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
SURCTWV0YWRhdGEuY3BwCmluZGV4IDAxZDg3OGEwYTlmMmMxYzg5MTQ5MTkxYmM4Yzg3MWQ4Y2Rj
ZjY1MzcuLmYyZmMyODU5NDQ0YzQ4YTcyZGQ5NGFkYzExZDE4ODE3ZjVlYjQ1ZDggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQk1ldGFkYXRhLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJNZXRhZGF0YS5jcHAKQEAgLTQ2LDcgKzQ2
LDcgQEAgV2ViSURCTWV0YWRhdGE6OldlYklEQk1ldGFkYXRhKGNvbnN0IFdlYkNvcmU6OklEQkRh
dGFiYXNlTWV0YWRhdGEmIG1ldGFkYXRhKQogCiAgICAgc2l6ZV90IGkgPSAwOwogICAgIGZvciAo
SURCRGF0YWJhc2VNZXRhZGF0YTo6T2JqZWN0U3RvcmVNYXA6OmNvbnN0X2l0ZXJhdG9yIHN0b3Jl
SXRlcmF0b3IgPSBtZXRhZGF0YS5vYmplY3RTdG9yZXMuYmVnaW4oKTsgc3RvcmVJdGVyYXRvciAh
PSBtZXRhZGF0YS5vYmplY3RTdG9yZXMuZW5kKCk7ICsrc3RvcmVJdGVyYXRvcikgewotICAgICAg
ICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZSA9IHN0b3JlSXRlcmF0
b3ItPnNlY29uZDsKKyAgICAgICAgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0
U3RvcmUgPSBzdG9yZUl0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgT2JqZWN0U3RvcmUgd2ViT2Jq
ZWN0U3RvcmU7CiAgICAgICAgIHdlYk9iamVjdFN0b3JlLm5hbWUgPSBvYmplY3RTdG9yZS5uYW1l
OwogICAgICAgICB3ZWJPYmplY3RTdG9yZS5rZXlQYXRoID0gb2JqZWN0U3RvcmUua2V5UGF0aDsK
QEAgLTU1LDcgKzU1LDcgQEAgV2ViSURCTWV0YWRhdGE6OldlYklEQk1ldGFkYXRhKGNvbnN0IFdl
YkNvcmU6OklEQkRhdGFiYXNlTWV0YWRhdGEmIG1ldGFkYXRhKQogCiAgICAgICAgIHNpemVfdCBq
ID0gMDsKICAgICAgICAgZm9yIChJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbmRleE1hcDo6Y29u
c3RfaXRlcmF0b3IgaW5kZXhJdGVyYXRvciA9IG9iamVjdFN0b3JlLmluZGV4ZXMuYmVnaW4oKTsg
aW5kZXhJdGVyYXRvciAhPSBvYmplY3RTdG9yZS5pbmRleGVzLmVuZCgpOyArK2luZGV4SXRlcmF0
b3IpIHsKLSAgICAgICAgICAgIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4ID0gaW5kZXhJ
dGVyYXRvci0+c2Vjb25kOworICAgICAgICAgICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5k
ZXggPSBpbmRleEl0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgICAgIEluZGV4IHdlYkluZGV4Owog
ICAgICAgICAgICAgd2ViSW5kZXgubmFtZSA9IGluZGV4Lm5hbWU7CiAgICAgICAgICAgICB3ZWJJ
bmRleC5rZXlQYXRoID0gaW5kZXgua2V5UGF0aDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkludGVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJJbnRlbnQuY3BwCmluZGV4IDU1Nzc1ZWNmY2RjMTYyMDRlNTg0MDZhMTU3OGFlOGViNjY4N2Vk
OGMuLjA0MWM3ZjJlOWM1MDM1NzU5YmQ4ZTNlYmIzNDNmYzRjZmZkYjdkMGQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkludGVudC5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViSW50ZW50LmNwcApAQCAtMTg4LDcgKzE4OCw3IEBAIFdlYlN0
cmluZyBXZWJJbnRlbnQ6OmV4dHJhc1ZhbHVlKGNvbnN0IFdlYlN0cmluZyYgbmFtZSkgY29uc3QK
ICAgICBXVEY6Okhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciB2YWwgPSBt
X3ByaXZhdGUtPmV4dHJhcygpLmZpbmQobmFtZSk7CiAgICAgaWYgKHZhbCA9PSBtX3ByaXZhdGUt
PmV4dHJhcygpLmVuZCgpKQogICAgICAgICByZXR1cm4gV2ViU3RyaW5nKCk7Ci0gICAgcmV0dXJu
IHZhbC0+c2Vjb25kOworICAgIHJldHVybiB2YWwtPnZhbHVlOwogI2Vsc2UKICAgICByZXR1cm4g
V2ViU3RyaW5nKCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvV2ViU29ja2V0RXh0ZW5zaW9uRGlzcGF0Y2hlclRlc3QuY3BwIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9XZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyVGVzdC5jcHAKaW5k
ZXggMzU4OTgzYjgzOTkzMTRjZGEwMzdjOGMwMzI0OWVlOWI2NzJlOTY3Yi4uMjQ1MTRjZDU4ZmJm
ZDAwYWFhODg3MjQyYTFhYzM2MzMxY2FlYjc4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9XZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyVGVzdC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVy
VGVzdC5jcHAKQEAgLTEwMywxMCArMTAzLDEwIEBAIFRFU1RfRihXZWJTb2NrZXRFeHRlbnNpb25E
aXNwYXRjaGVyVGVzdCwgVGVzdFBhcmFtZXRlcnMpCiAgICAgRVhQRUNUX0VRKDIsIG1fcGFyc2Vk
UGFyYW1ldGVyc1swXS5zaXplKCkpOwogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+OjppdGVy
YXRvciBwYXJhbWV0ZXIgPSBtX3BhcnNlZFBhcmFtZXRlcnNbMF0uZmluZCgibWF4LWNoYW5uZWxz
Iik7CiAgICAgRVhQRUNUX1RSVUUocGFyYW1ldGVyICE9IG1fcGFyc2VkUGFyYW1ldGVyc1swXS5l
bmQoKSk7Ci0gICAgRVhQRUNUX0VRKCI0IiwgcGFyYW1ldGVyLT5zZWNvbmQpOworICAgIEVYUEVD
VF9FUSgiNCIsIHBhcmFtZXRlci0+dmFsdWUpOwogICAgIHBhcmFtZXRlciA9IG1fcGFyc2VkUGFy
YW1ldGVyc1swXS5maW5kKCJmbG93LWNvbnRyb2wiKTsKICAgICBFWFBFQ1RfVFJVRShwYXJhbWV0
ZXIgIT0gbV9wYXJzZWRQYXJhbWV0ZXJzWzBdLmVuZCgpKTsKLSAgICBFWFBFQ1RfVFJVRShwYXJh
bWV0ZXItPnNlY29uZC5pc051bGwoKSk7CisgICAgRVhQRUNUX1RSVUUocGFyYW1ldGVyLT52YWx1
ZS5pc051bGwoKSk7CiB9CiAKIFRFU1RfRihXZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyVGVz
dCwgVGVzdE11bHRpcGxlKQpAQCAtMTMxLDEyICsxMzEsMTIgQEAgVEVTVF9GKFdlYlNvY2tldEV4
dGVuc2lvbkRpc3BhdGNoZXJUZXN0LCBUZXN0TXVsdGlwbGUpCiAgICAgICAgIGNvbnN0IEhhc2hN
YXA8U3RyaW5nLCBTdHJpbmc+JiBwYXJzZWRQYXJhbWV0ZXJzID0gbV9wYXJzZWRQYXJhbWV0ZXJz
W2ldOwogICAgICAgICBFWFBFQ1RfRVEoZXhwZWN0ZWRbaV0ucGFyYW1ldGVycy5zaXplKCksIG1f
cGFyc2VkUGFyYW1ldGVyc1tpXS5zaXplKCkpOwogICAgICAgICBmb3IgKEhhc2hNYXA8U3RyaW5n
LCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdGVyYXRvciA9IGV4cGVjdGVkUGFyYW1ldGVycy5i
ZWdpbigpOyBpdGVyYXRvciAhPSBleHBlY3RlZFBhcmFtZXRlcnMuZW5kKCk7ICsraXRlcmF0b3Ip
IHsKLSAgICAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBw
YXJzZWQgPSBwYXJzZWRQYXJhbWV0ZXJzLmZpbmQoaXRlcmF0b3ItPmZpcnN0KTsKKyAgICAgICAg
ICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBwYXJzZWQgPSBwYXJz
ZWRQYXJhbWV0ZXJzLmZpbmQoaXRlcmF0b3ItPmtleSk7CiAgICAgICAgICAgICBFWFBFQ1RfVFJV
RShwYXJzZWQgIT0gcGFyc2VkUGFyYW1ldGVycy5lbmQoKSk7Ci0gICAgICAgICAgICBpZiAoaXRl
cmF0b3ItPnNlY29uZC5pc051bGwoKSkKLSAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShwYXJz
ZWQtPnNlY29uZC5pc051bGwoKSk7CisgICAgICAgICAgICBpZiAoaXRlcmF0b3ItPnZhbHVlLmlz
TnVsbCgpKQorICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVFKHBhcnNlZC0+dmFsdWUuaXNOdWxs
KCkpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIEVYUEVDVF9FUShpdGVyYXRv
ci0+c2Vjb25kLCBwYXJzZWQtPnNlY29uZCk7CisgICAgICAgICAgICAgICAgRVhQRUNUX0VRKGl0
ZXJhdG9yLT52YWx1ZSwgcGFyc2VkLT52YWx1ZSk7CiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1
cHBvcnRFZmwuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRl
clRyZWVTdXBwb3J0RWZsLmNwcAppbmRleCA5NmE1NzkxZWUyYTlmMDY1NDExZDI5ODRhYjBhNGY4
MmExZmE4ZGJhLi42NmU5N2ZmOTZjNjMzMjVjNzEzMmNjZmQ3NjQ2MGYxOGIzYmYwOTA0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1
cHBvcnRFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0R1bXBS
ZW5kZXJUcmVlU3VwcG9ydEVmbC5jcHAKQEAgLTU0OCw3ICs1NDgsNyBAQCB2b2lkIER1bXBSZW5k
ZXJUcmVlU3VwcG9ydEVmbDo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQoY29uc3QgRXZh
c19PYmplY3QqCiAgICAgZWxzZSB7CiAgICAgICAgIFdURjo6SGFzaE1hcDxpbnQsIFJlZlB0cjxX
ZWJDb3JlOjpET01XcmFwcGVyV29ybGQgPiA+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHdvcmxkTWFw
LmZpbmQod29ybGRJRCk7CiAgICAgICAgIGlmIChpdCAhPSB3b3JsZE1hcC5lbmQoKSkKLSAgICAg
ICAgICAgIHNjcmlwdFdvcmxkID0gKCppdCkuc2Vjb25kOworICAgICAgICAgICAgc2NyaXB0V29y
bGQgPSAoKml0KS52YWx1ZTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBzY3JpcHRXb3Js
ZCA9IFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmNyZWF0ZVdvcmxkKCk7CiAgICAgICAgICAg
ICB3b3JsZE1hcC5zZXQod29ybGRJRCwgc2NyaXB0V29ybGQpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzRWZsLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc0VmbC5jcHAK
aW5kZXggNWI0MDMwOGEyMTkwNzVjMDRmZTE2ZjA1M2FhOWMyN2QzM2FkNGQ2Zi4uMDk4ZDMwM2E0
YWM1OTVjNDY3NmI5NTU4ZjI0MjU2Mjk1YzVhN2U4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9lZmwvV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzRWZsLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNFZmwuY3BwCkBA
IC05OSw4ICs5OSw4IEBAIHZvaWQgUGxhdGZvcm1TdHJhdGVnaWVzRWZsOjpnZXRQbHVnaW5JbmZv
KGNvbnN0IFBhZ2UqIHBhZ2UsIFZlY3RvcjxQbHVnaW5JbmZvPiYKICAgICAgICAgZm9yIChNSU1F
VG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWltZVRvRGVzY3JpcHRpb25z
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgTWltZUNsYXNzSW5mbyBt
aW1lOwogCi0gICAgICAgICAgICBtaW1lLnR5cGUgPSBpdC0+Zmlyc3Q7Ci0gICAgICAgICAgICBt
aW1lLmRlc2MgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgbWltZS50eXBlID0gaXQtPmtleTsK
KyAgICAgICAgICAgIG1pbWUuZGVzYyA9IGl0LT52YWx1ZTsKICAgICAgICAgICAgIG1pbWUuZXh0
ZW5zaW9ucyA9IHBhY2thZ2UtPm1pbWVUb0V4dGVuc2lvbnMoKS5nZXQobWltZS50eXBlKTsKICAg
ICAgICAgICAgIHBsdWdpbkluZm8ubWltZXMuYXBwZW5kKG1pbWUpOwogICAgICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2ludGVudC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2VmbC9ld2svZXdrX2ludGVudC5jcHAKaW5kZXggNzZjMmQ2OGRhYTcyMTI0ZWE1YjYxYjdl
MjRmMDM0YzJjMGNkYjgxZS4uODNiY2U4NzY0YWY2YWQ3OTc0NDM2OTJmNTM5NmUzYmFhYjM1NTg4
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19pbnRlbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfaW50ZW50LmNwcApAQCAtMTIwLDcgKzEyMCw3IEBA
IGNvbnN0IGNoYXIqIGV3a19pbnRlbnRfZXh0cmFfZ2V0KGNvbnN0IEV3a19JbnRlbnQqIGludGVu
dCwgY29uc3QgY2hhcioga2V5KQogICAgIFdURjo6SGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNv
bnN0X2l0ZXJhdG9yIHZhbCA9IGNvcmUtPmV4dHJhcygpLmZpbmQoU3RyaW5nOjpmcm9tVVRGOChr
ZXkpKTsKICAgICBpZiAodmFsID09IGNvcmUtPmV4dHJhcygpLmVuZCgpKQogICAgICAgICByZXR1
cm4gMDsKLSAgICByZXR1cm4gZWluYV9zdHJpbmdzaGFyZV9hZGQodmFsLT5zZWNvbmQudXRmOCgp
LmRhdGEoKSk7CisgICAgcmV0dXJuIGVpbmFfc3RyaW5nc2hhcmVfYWRkKHZhbC0+dmFsdWUudXRm
OCgpLmRhdGEoKSk7CiAjZWxzZQogICAgIHJldHVybiAwOwogI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNHdGsuY3Bw
IGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzR3Rr
LmNwcAppbmRleCAyOTIxNzNhZTI5MmY1MTIxMTg3ZThiZTUwNTAzOTNkN2MzMzg0YzVhLi45MTAz
Yzg0NjA5NGQ1MWY4ZjViOTQ4NzRjZDY3YWYwNDc5OTA5YWUwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNHdGsuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc0d0ay5j
cHAKQEAgLTg4LDggKzg4LDggQEAgdm9pZCBQbGF0Zm9ybVN0cmF0ZWdpZXNHdGs6OmdldFBsdWdp
bkluZm8oY29uc3QgUGFnZSogcGFnZSwgVmVjdG9yPFBsdWdpbkluZm8+JgogICAgICAgICBNSU1F
VG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1pbWVUb0Rlc2NyaXB0aW9u
cy5lbmQoKTsKICAgICAgICAgZm9yIChNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbWltZVRvRGVzY3JpcHRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewog
ICAgICAgICAgICAgTWltZUNsYXNzSW5mbyBtaW1lOwotICAgICAgICAgICAgbWltZS50eXBlID0g
aXQtPmZpcnN0OwotICAgICAgICAgICAgbWltZS5kZXNjID0gaXQtPnNlY29uZDsKKyAgICAgICAg
ICAgIG1pbWUudHlwZSA9IGl0LT5rZXk7CisgICAgICAgICAgICBtaW1lLmRlc2MgPSBpdC0+dmFs
dWU7CiAgICAgICAgICAgICBtaW1lLmV4dGVuc2lvbnMgPSBwYWNrYWdlLT5taW1lVG9FeHRlbnNp
b25zKCkuZ2V0KG1pbWUudHlwZSk7CiAgICAgICAgICAgICBwbHVnaW5JbmZvLm1pbWVzLmFwcGVu
ZChtaW1lKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0
L3dlYmtpdGZhdmljb25kYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0ZmF2aWNvbmRhdGFiYXNlLmNwcAppbmRleCA2YmFiZmU0ZGQ5MmU1MTQyY2UwYzRmNzJjMzlh
NmNiNmMzZGRlMWZmLi5iM2ExZDc1Y2ExMmI2YWUwZjY0NWJmOTJiMTI4YTU4MDBhMjBlY2NmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZmF2aWNvbmRhdGFiYXNl
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZmF2aWNvbmRhdGFiYXNl
LmNwcApAQCAtNjE0LDE4ICs2MTQsMTggQEAgc3RhdGljIHZvaWQgd2Via2l0RmF2aWNvbkRhdGFi
YXNlSW1wb3J0RmluaXNoZWQoV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSkKICAgICBW
ZWN0b3I8U3RyaW5nPiB0b0RlbGV0ZVVSTHM7CiAgICAgUGVuZGluZ0ljb25SZXF1ZXN0TWFwOjpj
b25zdF9pdGVyYXRvciBlbmQgPSBkYXRhYmFzZS0+cHJpdi0+cGVuZGluZ0ljb25SZXF1ZXN0cy5l
bmQoKTsKICAgICBmb3IgKFBlbmRpbmdJY29uUmVxdWVzdE1hcDo6Y29uc3RfaXRlcmF0b3IgaXRl
ciA9IGRhdGFiYXNlLT5wcml2LT5wZW5kaW5nSWNvblJlcXVlc3RzLmJlZ2luKCk7IGl0ZXIgIT0g
ZW5kOyArK2l0ZXIpIHsKLSAgICAgICAgU3RyaW5nIGljb25VUkwgPSBpY29uRGF0YWJhc2UoKS5z
eW5jaHJvbm91c0ljb25VUkxGb3JQYWdlVVJMKGl0ZXItPmZpcnN0KTsKKyAgICAgICAgU3RyaW5n
IGljb25VUkwgPSBpY29uRGF0YWJhc2UoKS5zeW5jaHJvbm91c0ljb25VUkxGb3JQYWdlVVJMKGl0
ZXItPmtleSk7CiAgICAgICAgIGlmICghaWNvblVSTC5pc0VtcHR5KCkpCiAgICAgICAgICAgICBj
b250aW51ZTsKIAotICAgICAgICBQZW5kaW5nSWNvblJlcXVlc3RWZWN0b3IqIGljb25zID0gaXRl
ci0+c2Vjb25kOworICAgICAgICBQZW5kaW5nSWNvblJlcXVlc3RWZWN0b3IqIGljb25zID0gaXRl
ci0+dmFsdWU7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaWNvbnMtPnNpemUoKTsg
KytpKSB7CiAgICAgICAgICAgICBQZW5kaW5nSWNvblJlcXVlc3QqIHJlcXVlc3QgPSBpY29ucy0+
YXQoaSkuZ2V0KCk7CiAgICAgICAgICAgICBpZiAocmVxdWVzdC0+YXN5bmNSZXN1bHQoKSkKICAg
ICAgICAgICAgICAgICByZXF1ZXN0LT5hc3luY1Jlc3VsdENvbXBsZXRlKDApOwogICAgICAgICB9
CiAKLSAgICAgICAgdG9EZWxldGVVUkxzLmFwcGVuZChpdGVyLT5maXJzdCk7CisgICAgICAgIHRv
RGVsZXRlVVJMcy5hcHBlbmQoaXRlci0+a2V5KTsKICAgICB9CiAKICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHRvRGVsZXRlVVJMcy5zaXplKCk7ICsraSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJwbHVnaW4uY3BwIGIvU291cmNlL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdHdlYnBsdWdpbi5jcHAKaW5kZXggZTAzYjFlYTZkYTMzYjdlMmYwMDIyNTVj
ZTg3Nzc4NjI0Y2RhNzA4Yy4uMDFkMGJiNWYyYmZkNzAwZjZiM2M5ZmM0ZjhlNDIwYzU3MjQ4NmVj
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnBsdWdpbi5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnBsdWdpbi5jcHAKQEAg
LTIzNywxMCArMjM3LDEwIEBAIEdTTGlzdCogd2Via2l0X3dlYl9wbHVnaW5fZ2V0X21pbWV0eXBl
cyhXZWJLaXRXZWJQbHVnaW4qIHBsdWdpbikKIAogICAgIGZvciAoTUlNRVRvRGVzY3JpcHRpb25z
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKICAgICAgICAgV2ViS2l0V2ViUGx1Z2luTUlNRVR5cGUqIG1pbWVUeXBl
ID0gZ19zbGljZV9uZXcwKFdlYktpdFdlYlBsdWdpbk1JTUVUeXBlKTsKLSAgICAgICAgbWltZVR5
cGUtPm5hbWUgPSBnX3N0cmR1cChpdC0+Zmlyc3QudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIG1p
bWVUeXBlLT5kZXNjcmlwdGlvbiA9IGdfc3RyZHVwKGl0LT5zZWNvbmQudXRmOCgpLmRhdGEoKSk7
CisgICAgICAgIG1pbWVUeXBlLT5uYW1lID0gZ19zdHJkdXAoaXQtPmtleS51dGY4KCkuZGF0YSgp
KTsKKyAgICAgICAgbWltZVR5cGUtPmRlc2NyaXB0aW9uID0gZ19zdHJkdXAoaXQtPnZhbHVlLnV0
ZjgoKS5kYXRhKCkpOwogCi0gICAgICAgIFZlY3RvcjxTdHJpbmc+IGV4dGVuc2lvbnMgPSBwcml2
LT5jb3JlUGx1Z2luLT5taW1lVG9FeHRlbnNpb25zKCkuZ2V0KGl0LT5maXJzdCk7CisgICAgICAg
IFZlY3RvcjxTdHJpbmc+IGV4dGVuc2lvbnMgPSBwcml2LT5jb3JlUGx1Z2luLT5taW1lVG9FeHRl
bnNpb25zKCkuZ2V0KGl0LT5rZXkpOwogICAgICAgICBtaW1lVHlwZS0+ZXh0ZW5zaW9ucyA9IHN0
YXRpY19jYXN0PGdjaGFyKio+KGdfbWFsbG9jMChzaXplb2YoY2hhciopICogKGV4dGVuc2lvbnMu
c2l6ZSgpICsgMSkpKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4dGVuc2lv
bnMuc2l6ZSgpOyBpKyspCiAgICAgICAgICAgICBtaW1lVHlwZS0+ZXh0ZW5zaW9uc1tpXSA9IGdf
c3RyZHVwKGV4dGVuc2lvbnNbaV0udXRmOCgpLmRhdGEoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L21hYy9IaXN0b3J5L1dlYkhpc3RvcnkubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9IaXN0
b3J5L1dlYkhpc3RvcnkubW0KaW5kZXggNjk2NGZjOTQ5YjUxMjE3M2E2YmRjNWU3MGI1NjE4ZDMx
Y2I2NzdhMy4uZTc4MWQzMmZkMWRlOTUwZDkxNGFmNDgzNDk3NjQyMGRmNTg3ZGFmNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9tYWMvSGlzdG9yeS9XZWJIaXN0b3J5Lm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXQvbWFjL0hpc3RvcnkvV2ViSGlzdG9yeS5tbQpAQCAtMjM4LDcgKzIzOCw3IEBAIHN0
YXRpYyBpbmxpbmUgV2ViSGlzdG9yeURhdGVLZXkgZGF0ZUtleShOU1RpbWVJbnRlcnZhbCBkYXRl
KQogICAgICAgICByZXR1cm4gTk87CiAKICAgICBEYXRlVG9FbnRyaWVzTWFwOjppdGVyYXRvciBp
dCA9IF9lbnRyaWVzQnlEYXRlLT5maW5kKGRhdGVLZXkpOwotICAgIE5TTXV0YWJsZUFycmF5ICpl
bnRyaWVzRm9yRGF0ZSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgTlNNdXRhYmxlQXJyYXkgKmVu
dHJpZXNGb3JEYXRlID0gaXQtPnZhbHVlLmdldCgpOwogICAgIFtlbnRyaWVzRm9yRGF0ZSByZW1v
dmVPYmplY3RJZGVudGljYWxUbzplbnRyeV07CiAgICAgCiAgICAgLy8gcmVtb3ZlIHRoaXMgZGF0
ZSBlbnRpcmVseSBpZiB0aGVyZSBhcmUgbm8gb3RoZXIgZW50cmllcyBvbiBpdApAQCAtNDQwLDcg
KzQ0MCw3IEBAIHN0YXRpYyBpbmxpbmUgV2ViSGlzdG9yeURhdGVLZXkgZGF0ZUtleShOU1RpbWVJ
bnRlcnZhbCBkYXRlKQogICAgICAgICBkYXlzQXNUaW1lSW50ZXJ2YWxzLnJlc2VydmVDYXBhY2l0
eShfZW50cmllc0J5RGF0ZS0+c2l6ZSgpKTsKICAgICAgICAgRGF0ZVRvRW50cmllc01hcDo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gX2VudHJpZXNCeURhdGUtPmVuZCgpOwogICAgICAgICBmb3IgKERh
dGVUb0VudHJpZXNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gX2VudHJpZXNCeURhdGUtPmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIGRheXNBc1RpbWVJbnRlcnZhbHMuYXBw
ZW5kKGl0LT5maXJzdCk7CisgICAgICAgICAgICBkYXlzQXNUaW1lSW50ZXJ2YWxzLmFwcGVuZChp
dC0+a2V5KTsKIAogICAgICAgICBzb3J0KGRheXNBc1RpbWVJbnRlcnZhbHMuYmVnaW4oKSwgZGF5
c0FzVGltZUludGVydmFscy5lbmQoKSk7CiAgICAgICAgIHNpemVfdCBjb3VudCA9IGRheXNBc1Rp
bWVJbnRlcnZhbHMuc2l6ZSgpOwpAQCAtODk3LDcgKzg5Nyw3IEBAIFdlYkhpc3RvcnlXcml0ZXI6
OldlYkhpc3RvcnlXcml0ZXIoRGF0ZVRvRW50cmllc01hcCogZW50cmllc0J5RGF0ZSkKICAgICBt
X2RhdGVLZXlzLnJlc2VydmVDYXBhY2l0eShtX2VudHJpZXNCeURhdGUtPnNpemUoKSk7CiAgICAg
RGF0ZVRvRW50cmllc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9lbnRyaWVzQnlEYXRlLT5l
bmQoKTsKICAgICBmb3IgKERhdGVUb0VudHJpZXNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9l
bnRyaWVzQnlEYXRlLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIG1fZGF0ZUtl
eXMuYXBwZW5kKGl0LT5maXJzdCk7CisgICAgICAgIG1fZGF0ZUtleXMuYXBwZW5kKGl0LT5rZXkp
OwogICAgIHNvcnQobV9kYXRlS2V5cy5iZWdpbigpLCBtX2RhdGVLZXlzLmVuZCgpKTsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbSBi
L1NvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW0KaW5kZXggMjk2ZGQ2
YjI1YmQ4YmRiNzdhM2M2ODBlMTMyNGU1YjM5N2QyNjZjMy4uOGRlNjMxMzliNzc0Mzc2YmJkMWY3
YzExMDZmNmVlZGJkZDNlNWIyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvTWlzYy9X
ZWJDb3JlU3RhdGlzdGljcy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYkNvcmVT
dGF0aXN0aWNzLm1tCkBAIC04OSw4ICs4OSw4IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwog
ICAgIE93blB0cjxUeXBlQ291bnRTZXQ+IGNvdW50cyhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9i
YWxEYXRhKCktPmhlYXAucHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50cygpKTsKICAgICBIYXNoQ291
bnRlZFNldDxjb25zdCBjaGFyKj46Oml0ZXJhdG9yIGVuZCA9IGNvdW50cy0+ZW5kKCk7CiAgICAg
Zm9yIChIYXNoQ291bnRlZFNldDxjb25zdCBjaGFyKj46Oml0ZXJhdG9yIGl0ID0gY291bnRzLT5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBpdC0+c2Vjb25kOyArK2kpCi0gICAgICAgICAgICBbcmVzdWx0IGFkZE9iamVjdDpbTlNTdHJp
bmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6aXQtPmZpcnN0XV07CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBpdC0+dmFsdWU7ICsraSkKKyAgICAgICAgICAgIFtyZXN1bHQgYWRkT2Jq
ZWN0OltOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzppdC0+a2V5XV07CiAgICAgCiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KQEAgLTEwNCw4ICsxMDQsOCBAQCB1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKICAgICBPd25QdHI8VHlwZUNvdW50U2V0PiBjb3VudHMoSlNET01XaW5kb3c6OmNvbW1v
bkpTR2xvYmFsRGF0YSgpLT5oZWFwLm9iamVjdFR5cGVDb3VudHMoKSk7CiAgICAgSGFzaENvdW50
ZWRTZXQ8Y29uc3QgY2hhcio+OjppdGVyYXRvciBlbmQgPSBjb3VudHMtPmVuZCgpOwogICAgIGZv
ciAoSGFzaENvdW50ZWRTZXQ8Y29uc3QgY2hhcio+OjppdGVyYXRvciBpdCA9IGNvdW50cy0+YmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
aXQtPnNlY29uZDsgKytpKQotICAgICAgICAgICAgW3Jlc3VsdCBhZGRPYmplY3Q6W05TU3RyaW5n
IHN0cmluZ1dpdGhVVEY4U3RyaW5nOml0LT5maXJzdF1dOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgaXQtPnZhbHVlOyArK2kpCisgICAgICAgICAgICBbcmVzdWx0IGFkZE9iamVj
dDpbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6aXQtPmtleV1dOwogICAgIAogICAgIHJl
dHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hv
c3RlZC9OZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyLm1tIGIvU291cmNlL1dlYktpdC9tYWMvUGx1
Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlci5tbQppbmRleCBlNDlkNTBmNGJj
YmQ1YzFjYmNiODM3YzhmMjk0NjNkNGRjMmY0OWY2Li4zY2UwODliZWQyN2E0YzIzYWYyM2M3NTA5
MjRhOWQ4OWFjMGM3MTFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hv
c3RlZC9OZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFj
L1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXIubW0KQEAgLTczLDcgKzcz
LDcgQEAgTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkqIE5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXI6
Omhvc3RGb3JQbHVnaW4oY29uc3QgV1RGOjpTdHIKICAgICAKICAgICAvLyBUaGUgcGFja2FnZSB3
YXMgYWxyZWFkeSBpbiB0aGUgbWFwLCBqdXN0IHJldHVybiBpdC4KICAgICBpZiAoIXJlc3VsdC5p
c05ld0VudHJ5KQotICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAg
ICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogICAgICAgICAKICAgICBtYWNoX3Bv
cnRfdCBjbGllbnRQb3J0OwogICAgIGlmIChtYWNoX3BvcnRfYWxsb2NhdGUobWFjaF90YXNrX3Nl
bGYoKSwgTUFDSF9QT1JUX1JJR0hUX1JFQ0VJVkUsICZjbGllbnRQb3J0KSAhPSBLRVJOX1NVQ0NF
U1MpIHsKQEAgLTk1LDcgKzk1LDcgQEAgTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkqIE5ldHNjYXBl
UGx1Z2luSG9zdE1hbmFnZXI6Omhvc3RGb3JQbHVnaW4oY29uc3QgV1RGOjpTdHIKICAgICAKICAg
ICBOZXRzY2FwZVBsdWdpbkhvc3RQcm94eSogaG9zdFByb3h5ID0gbmV3IE5ldHNjYXBlUGx1Z2lu
SG9zdFByb3h5KGNsaWVudFBvcnQsIHBsdWdpbkhvc3RQb3J0LCBwbHVnaW5Ib3N0UFNOLCBzaG91
bGRDYWNoZU1pc3NpbmdQcm9wZXJ0aWVzQW5kTWV0aG9kcyk7CiAgICAgCi0gICAgcmVzdWx0Lml0
ZXJhdG9yLT5zZWNvbmQgPSBob3N0UHJveHk7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9
IGhvc3RQcm94eTsKICAgICAKICAgICByZXR1cm4gaG9zdFByb3h5OwogfQpAQCAtMjA0LDcgKzIw
NCw3IEBAIHZvaWQgTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlcjo6cGx1Z2luSG9zdERpZWQoTmV0
c2NhcGVQbHVnaW5Ib3N0UHJveHkqIHBsdWdpbkhvCiAKICAgICAvLyBUaGlzIGhhcyBPKG4pIGNv
bXBsZXhpdHkgYnV0IHRoZSBudW1iZXIgb2YgYWN0aXZlIHBsdWctaW4gaG9zdHMgaXMgdmVyeSBz
bWFsbCBzbyBpdCBzaG91bGRuJ3QgbWF0dGVyLgogICAgIGZvciAoUGx1Z2luSG9zdE1hcDo6aXRl
cmF0b3IgaXQgPSBtX3BsdWdpbkhvc3RzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAg
ICAgICBpZiAoaXQtPnNlY29uZCA9PSBwbHVnaW5Ib3N0KSB7CisgICAgICAgIGlmIChpdC0+dmFs
dWUgPT0gcGx1Z2luSG9zdCkgewogICAgICAgICAgICAgbV9wbHVnaW5Ib3N0cy5yZW1vdmUoaXQp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0yODYsNyArMjg2LDcgQEAgdm9p
ZCBOZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyOjpkaWRDcmVhdGVXaW5kb3coKQogICAgIC8vIFNl
ZSBpZiBhbnkgb2Ygb3VyIGhvc3RzIGFyZSBpbiBmdWxsLXNjcmVlbiBtb2RlLgogICAgIFBsdWdp
bkhvc3RNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fcGx1Z2luSG9zdHMuZW5kKCk7CiAgICAgZm9yIChQ
bHVnaW5Ib3N0TWFwOjppdGVyYXRvciBpdCA9IG1fcGx1Z2luSG9zdHMuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7Ci0gICAgICAgIE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5KiBob3N0UHJveHkg
PSBpdC0+c2Vjb25kOworICAgICAgICBOZXRzY2FwZVBsdWdpbkhvc3RQcm94eSogaG9zdFByb3h5
ID0gaXQtPnZhbHVlOwogICAgICAgICAKICAgICAgICAgaWYgKCFob3N0UHJveHktPmlzTWVudUJh
clZpc2libGUoKSkgewogICAgICAgICAgICAgLy8gTWFrZSBvdXJzZWx2ZXMgdGhlIGZyb250IHBy
b2Nlc3MuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRz
Y2FwZVBsdWdpbkhvc3RQcm94eS5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVk
L05ldHNjYXBlUGx1Z2luSG9zdFByb3h5Lm1tCmluZGV4IGFmNmYyYmU5OTY5Y2IxMWNiMzNhNTYz
MTdmZGRhOGMyY2Y2MWNmNWUuLjBmYjI2ZDBhOWI4NDc1MjI2YmVmY2MzNDk2OGI5ZjUwNmViOTE1
YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBl
UGx1Z2luSG9zdFByb3h5Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVk
L05ldHNjYXBlUGx1Z2luSG9zdFByb3h5Lm1tCkBAIC0xNDQsNyArMTQ0LDcgQEAgdm9pZCBOZXRz
Y2FwZVBsdWdpbkhvc3RQcm94eTo6cGx1Z2luSG9zdERpZWQoKQogICAKICAgICBQbHVnaW5JbnN0
YW5jZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaW5zdGFuY2VzLmVuZCgpOwogICAgIGZvciAo
UGx1Z2luSW5zdGFuY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaW5zdGFuY2VzLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+cGx1Z2luSG9zdERpZWQoKTsK
KyAgICAgICAgaXQtPnZhbHVlLT5wbHVnaW5Ib3N0RGllZCgpOwogICAgIAogICAgIE5ldHNjYXBl
UGx1Z2luSG9zdE1hbmFnZXI6OnNoYXJlZCgpLnBsdWdpbkhvc3REaWVkKHRoaXMpOwogICAgIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVn
aW5JbnN0YW5jZVByb3h5Lm1tIGIvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0
c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tCmluZGV4IDkxMDQ0MzA1ZmJhNmIyM2FiMjU1NTA2
YzExN2ExMjRhYzQ5MzFjYjUuLjAxZTQ4ODIwNDk4ZTIzMWY1ZTE1MDllM2M2MmIxZGY5MmZjNzA3
ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBl
UGx1Z2luSW5zdGFuY2VQcm94eS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hv
c3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW0KQEAgLTE0NSw3ICsxNDUsNyBAQCB1
aW50MzJfdCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OkxvY2FsT2JqZWN0TWFwOjppZEZv
ck9iamVjdChKU0dsb2JhbERhdGEmCiAgICAgCiAgICAgSGFzaE1hcDxKU0M6OkpTT2JqZWN0Kiwg
cGFpcjx1aW50MzJfdCwgdWludDMyX3Q+ID46Oml0ZXJhdG9yIGl0ZXIgPSBtX2pzT2JqZWN0VG9J
RE1hcC5maW5kKG9iamVjdCk7CiAgICAgaWYgKGl0ZXIgIT0gbV9qc09iamVjdFRvSURNYXAuZW5k
KCkpCi0gICAgICAgIHJldHVybiBpdGVyLT5zZWNvbmQuZmlyc3Q7CisgICAgICAgIHJldHVybiBp
dGVyLT52YWx1ZS5maXJzdDsKICAgICAKICAgICBkbyB7CiAgICAgICAgIG9iamVjdElEID0gKytt
X29iamVjdElEQ291bnRlcjsKQEAgLTE2Miw3ICsxNjIsNyBAQCB2b2lkIE5ldHNjYXBlUGx1Z2lu
SW5zdGFuY2VQcm94eTo6TG9jYWxPYmplY3RNYXA6OnJldGFpbihKU0M6OkpTT2JqZWN0KiBvYmpl
Y3QpCiAgICAgSGFzaE1hcDxKU0M6OkpTT2JqZWN0KiwgcGFpcjx1aW50MzJfdCwgdWludDMyX3Q+
ID46Oml0ZXJhdG9yIGl0ZXIgPSBtX2pzT2JqZWN0VG9JRE1hcC5maW5kKG9iamVjdCk7CiAgICAg
QVNTRVJUKGl0ZXIgIT0gbV9qc09iamVjdFRvSURNYXAuZW5kKCkpOwogCi0gICAgaXRlci0+c2Vj
b25kLnNlY29uZCA9IGl0ZXItPnNlY29uZC5zZWNvbmQgKyAxOworICAgIGl0ZXItPnZhbHVlLnNl
Y29uZCA9IGl0ZXItPnZhbHVlLnNlY29uZCArIDE7CiB9CiAKIHZvaWQgTmV0c2NhcGVQbHVnaW5J
bnN0YW5jZVByb3h5OjpMb2NhbE9iamVjdE1hcDo6cmVsZWFzZShKU0M6OkpTT2JqZWN0KiBvYmpl
Y3QpCkBAIC0xNzAsMTAgKzE3MCwxMCBAQCB2b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94
eTo6TG9jYWxPYmplY3RNYXA6OnJlbGVhc2UoSlNDOjpKU09iamVjdCogb2JqZWN0KQogICAgIEhh
c2hNYXA8SlNDOjpKU09iamVjdCosIHBhaXI8dWludDMyX3QsIHVpbnQzMl90PiA+OjppdGVyYXRv
ciBpdGVyID0gbV9qc09iamVjdFRvSURNYXAuZmluZChvYmplY3QpOwogICAgIEFTU0VSVChpdGVy
ICE9IG1fanNPYmplY3RUb0lETWFwLmVuZCgpKTsKIAotICAgIEFTU0VSVChpdGVyLT5zZWNvbmQu
c2Vjb25kID4gMCk7Ci0gICAgaXRlci0+c2Vjb25kLnNlY29uZCA9IGl0ZXItPnNlY29uZC5zZWNv
bmQgLSAxOwotICAgIGlmICghaXRlci0+c2Vjb25kLnNlY29uZCkgewotICAgICAgICBtX2lkVG9K
U09iamVjdE1hcC5yZW1vdmUoaXRlci0+c2Vjb25kLmZpcnN0KTsKKyAgICBBU1NFUlQoaXRlci0+
dmFsdWUuc2Vjb25kID4gMCk7CisgICAgaXRlci0+dmFsdWUuc2Vjb25kID0gaXRlci0+dmFsdWUu
c2Vjb25kIC0gMTsKKyAgICBpZiAoIWl0ZXItPnZhbHVlLnNlY29uZCkgeworICAgICAgICBtX2lk
VG9KU09iamVjdE1hcC5yZW1vdmUoaXRlci0+dmFsdWUuZmlyc3QpOwogICAgICAgICBtX2pzT2Jq
ZWN0VG9JRE1hcC5yZW1vdmUoaXRlcik7CiAgICAgfQogfQpAQCAtMTk3LDEwICsxOTcsMTAgQEAg
Ym9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OkxvY2FsT2JqZWN0TWFwOjpmb3JnZXQo
dWludDMyX3Qgb2JqZWN0SUQpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIEhh
c2hNYXA8SlNDOjpKU09iamVjdCosIHBhaXI8dWludDMyX3QsIHVpbnQzMl90PiA+OjppdGVyYXRv
ciBySXRlciA9IG1fanNPYmplY3RUb0lETWFwLmZpbmQoaXRlci0+c2Vjb25kLmdldCgpKTsKKyAg
ICBIYXNoTWFwPEpTQzo6SlNPYmplY3QqLCBwYWlyPHVpbnQzMl90LCB1aW50MzJfdD4gPjo6aXRl
cmF0b3Igckl0ZXIgPSBtX2pzT2JqZWN0VG9JRE1hcC5maW5kKGl0ZXItPnZhbHVlLmdldCgpKTsK
IAogICAgIC8vIElmIHRoZSBvYmplY3QgaXMgYmVpbmcgc2VudCB0byBwbHVnLWluIHJpZ2h0IG5v
dywgdGhlbiBpdCdzIG5vdCB0aGUgdGltZSB0byBmb3JnZXQuCi0gICAgaWYgKHJJdGVyLT5zZWNv
bmQuc2Vjb25kICE9IDEpCisgICAgaWYgKHJJdGVyLT52YWx1ZS5zZWNvbmQgIT0gMSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgbV9qc09iamVjdFRvSURNYXAucmVtb3ZlKHJJdGVyKTsK
QEAgLTMzMCw3ICszMzAsNyBAQCB2b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6ZGVz
dHJveSgpCiAgICAgCiAgICAgRnJhbWVMb2FkTWFwOjppdGVyYXRvciBlbmQgPSBtX3BlbmRpbmdG
cmFtZUxvYWRzLmVuZCgpOwogICAgIGZvciAoRnJhbWVMb2FkTWFwOjppdGVyYXRvciBpdCA9IG1f
cGVuZGluZ0ZyYW1lTG9hZHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBbKGl0
LT5maXJzdCkgX3NldEludGVybmFsTG9hZERlbGVnYXRlOm5pbF07CisgICAgICAgIFsoaXQtPmtl
eSkgX3NldEludGVybmFsTG9hZERlbGVnYXRlOm5pbF07CiAKICAgICBfV0tQSERlc3Ryb3lQbHVn
aW5JbnN0YW5jZShtX3BsdWdpbkhvc3RQcm94eS0+cG9ydCgpLCBtX3BsdWdpbklELCByZXF1ZXN0
SUQpOwogIApAQCAtNjc4LDcgKzY3OCw3IEBAIHZvaWQgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVBy
b3h5Ojp3ZWJGcmFtZURpZEZpbmlzaExvYWRXaXRoUmVhc29uKFdlYkZyYW1lKiB3ZWJGCiAgICAg
RnJhbWVMb2FkTWFwOjppdGVyYXRvciBpdCA9IG1fcGVuZGluZ0ZyYW1lTG9hZHMuZmluZCh3ZWJG
cmFtZSk7CiAgICAgQVNTRVJUKGl0ICE9IG1fcGVuZGluZ0ZyYW1lTG9hZHMuZW5kKCkpOwogICAg
ICAgICAKLSAgICBQbHVnaW5SZXF1ZXN0KiBwbHVnaW5SZXF1ZXN0ID0gaXQtPnNlY29uZC5nZXQo
KTsKKyAgICBQbHVnaW5SZXF1ZXN0KiBwbHVnaW5SZXF1ZXN0ID0gaXQtPnZhbHVlLmdldCgpOwog
ICAgIF9XS1BITG9hZFVSTE5vdGlmeShtX3BsdWdpbkhvc3RQcm94eS0+cG9ydCgpLCBtX3BsdWdp
bklELCBwbHVnaW5SZXF1ZXN0LT5yZXF1ZXN0SUQoKSwgcmVhc29uKTsKICAKICAgICBtX3BlbmRp
bmdGcmFtZUxvYWRzLnJlbW92ZShpdCk7CkBAIC0xNjI4LDcgKzE2MjgsNyBAQCB2b2lkIE5ldHNj
YXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6Y2FuY2VsQ2hlY2tJZkFsbG93ZWRUb0xvYWRVUkwodWlu
dDMyX3QgY2hlY2tJRAogICAgIGlmIChpdCA9PSBtX3VybENoZWNrcy5lbmQoKSkKICAgICAgICAg
cmV0dXJuOwogICAgIAotICAgIFdlYlBsdWdpbkNvbnRhaW5lckNoZWNrICpjaGVjayA9IGl0LT5z
ZWNvbmQuZ2V0KCk7CisgICAgV2ViUGx1Z2luQ29udGFpbmVyQ2hlY2sgKmNoZWNrID0gaXQtPnZh
bHVlLmdldCgpOwogICAgIFtjaGVjayBjYW5jZWxdOwogICAgIG1fdXJsQ2hlY2tzLnJlbW92ZShp
dCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9Qcm94
eUluc3RhbmNlLm1tIGIvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvUHJveHlJbnN0
YW5jZS5tbQppbmRleCA4OThjNWUyMTQwNjlmYzliYmZkMzQ5YzViNGM2YmE4ZjczNTVlMjcwLi41
OThlZThmMzdiMDEwMWE1NjNkYTljNDZkNWJkNWE0NWQ1NWI3NzFhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9Qcm94eUluc3RhbmNlLm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL1Byb3h5SW5zdGFuY2UubW0KQEAgLTM1OSw4ICsz
NTksOCBAQCBNZXRob2RMaXN0IFByb3h5SW5zdGFuY2U6Om1ldGhvZHNOYW1lZChQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lKQogICAgIE1ldGhvZE1hcDo6aXRlcmF0b3IgZXhpc3RpbmdNYXBFbnRy
eSA9IG1fbWV0aG9kcy5maW5kKG5hbWUuaW1wbCgpKTsKICAgICBpZiAoZXhpc3RpbmdNYXBFbnRy
eSAhPSBtX21ldGhvZHMuZW5kKCkpIHsKICAgICAgICAgTWV0aG9kTGlzdCBtZXRob2RMaXN0Owot
ICAgICAgICBpZiAoZXhpc3RpbmdNYXBFbnRyeS0+c2Vjb25kKQotICAgICAgICAgICAgbWV0aG9k
TGlzdC5hcHBlbmQoZXhpc3RpbmdNYXBFbnRyeS0+c2Vjb25kKTsKKyAgICAgICAgaWYgKGV4aXN0
aW5nTWFwRW50cnktPnZhbHVlKQorICAgICAgICAgICAgbWV0aG9kTGlzdC5hcHBlbmQoZXhpc3Rp
bmdNYXBFbnRyeS0+dmFsdWUpOwogICAgICAgICByZXR1cm4gbWV0aG9kTGlzdDsKICAgICB9CiAg
ICAgCkBAIC0zODIsMTEgKzM4MiwxMSBAQCBNZXRob2RMaXN0IFByb3h5SW5zdGFuY2U6Om1ldGhv
ZHNOYW1lZChQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogICAgIC8vIEFkZCBhIG5ldyBlbnRy
eSB0byB0aGUgbWFwIHVubGVzcyBhbiBlbnRyeSB3YXMgYWRkZWQgd2hpbGUgd2Ugd2VyZSBpbiB3
YWl0Rm9yUmVwbHkuCiAgICAgTWV0aG9kTWFwOjpBZGRSZXN1bHQgbWFwQWRkUmVzdWx0ID0gbV9t
ZXRob2RzLmFkZChuYW1lLmltcGwoKSwgMCk7CiAgICAgaWYgKG1hcEFkZFJlc3VsdC5pc05ld0Vu
dHJ5ICYmIHJlcGx5LT5tX3Jlc3VsdCkKLSAgICAgICAgbWFwQWRkUmVzdWx0Lml0ZXJhdG9yLT5z
ZWNvbmQgPSBuZXcgUHJveHlNZXRob2QobWV0aG9kTmFtZSk7CisgICAgICAgIG1hcEFkZFJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUgPSBuZXcgUHJveHlNZXRob2QobWV0aG9kTmFtZSk7CiAKICAgICBN
ZXRob2RMaXN0IG1ldGhvZExpc3Q7Ci0gICAgaWYgKG1hcEFkZFJlc3VsdC5pdGVyYXRvci0+c2Vj
b25kKQotICAgICAgICBtZXRob2RMaXN0LmFwcGVuZChtYXBBZGRSZXN1bHQuaXRlcmF0b3ItPnNl
Y29uZCk7CisgICAgaWYgKG1hcEFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUpCisgICAgICAgIG1l
dGhvZExpc3QuYXBwZW5kKG1hcEFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwogICAgIHJldHVy
biBtZXRob2RMaXN0OwogfQogCkBAIC00MDIsNyArNDAyLDcgQEAgRmllbGQqIFByb3h5SW5zdGFu
Y2U6OmZpZWxkTmFtZWQoUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKICAgICAvLyBJZiB3ZSBh
bHJlYWR5IGhhdmUgYW4gZW50cnkgaW4gdGhlIG1hcCwgdXNlIGl0LgogICAgIEZpZWxkTWFwOjpp
dGVyYXRvciBleGlzdGluZ01hcEVudHJ5ID0gbV9maWVsZHMuZmluZChuYW1lLmltcGwoKSk7CiAg
ICAgaWYgKGV4aXN0aW5nTWFwRW50cnkgIT0gbV9maWVsZHMuZW5kKCkpCi0gICAgICAgIHJldHVy
biBleGlzdGluZ01hcEVudHJ5LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBleGlzdGluZ01hcEVu
dHJ5LT52YWx1ZTsKICAgICAKICAgICB1aW50NjRfdCBpZGVudGlmaWVyID0gcmVpbnRlcnByZXRf
Y2FzdDx1aW50NjRfdD4oX05QTl9HZXRTdHJpbmdJZGVudGlmaWVyKG5hbWUuYXNjaWkoKS5kYXRh
KCkpKTsKICAgICB1aW50MzJfdCByZXF1ZXN0SUQgPSBtX2luc3RhbmNlUHJveHktPm5leHRSZXF1
ZXN0SUQoKTsKQEAgLTQyMiw4ICs0MjIsOCBAQCBGaWVsZCogUHJveHlJbnN0YW5jZTo6ZmllbGRO
YW1lZChQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogICAgIC8vIEFkZCBhIG5ldyBlbnRyeSB0
byB0aGUgbWFwIHVubGVzcyBhbiBlbnRyeSB3YXMgYWRkZWQgd2hpbGUgd2Ugd2VyZSBpbiB3YWl0
Rm9yUmVwbHkuCiAgICAgRmllbGRNYXA6OkFkZFJlc3VsdCBtYXBBZGRSZXN1bHQgPSBtX2ZpZWxk
cy5hZGQobmFtZS5pbXBsKCksIDApOwogICAgIGlmIChtYXBBZGRSZXN1bHQuaXNOZXdFbnRyeSAm
JiByZXBseS0+bV9yZXN1bHQpCi0gICAgICAgIG1hcEFkZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25k
ID0gbmV3IFByb3h5RmllbGQoaWRlbnRpZmllcik7Ci0gICAgcmV0dXJuIG1hcEFkZFJlc3VsdC5p
dGVyYXRvci0+c2Vjb25kOworICAgICAgICBtYXBBZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0g
bmV3IFByb3h5RmllbGQoaWRlbnRpZmllcik7CisgICAgcmV0dXJuIG1hcEFkZFJlc3VsdC5pdGVy
YXRvci0+dmFsdWU7CiB9CiAKIEpTQzo6SlNWYWx1ZSBQcm94eUluc3RhbmNlOjpmaWVsZFZhbHVl
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgRmllbGQqIGZpZWxkKSBjb25zdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblZpZXcubW0gYi9Tb3Vy
Y2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5tbQppbmRleCA0ZTFh
YWQ0OTUyOGNkN2QwODFkNDEzNTI0NTRiOWM4NTdmYmMyNWI3Li42YTFlYjY0MGEwZGFjZjBjY2Uw
MWVlZDM4MTkyMzUwYjVkYzg1MmYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9QbHVn
aW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9QbHVn
aW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5tbQpAQCAtNzEwLDcgKzcxMCw3IEBAIHN0YXRpYyBp
bmxpbmUgdm9pZCBnZXROUFJlY3QoY29uc3QgTlNSZWN0JiBuciwgTlBSZWN0JiBucHIpCiAKICAg
ICBIYXNoTWFwPHVpbnQzMl90LCBQbHVnaW5UaW1lcio+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSB0
aW1lcnMtPmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDx1aW50MzJfdCwgUGx1Z2luVGltZXIqPjo6
Y29uc3RfaXRlcmF0b3IgaXQgPSB0aW1lcnMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewot
ICAgICAgICBQbHVnaW5UaW1lciogdGltZXIgPSBpdC0+c2Vjb25kOworICAgICAgICBQbHVnaW5U
aW1lciogdGltZXIgPSBpdC0+dmFsdWU7CiAgICAgICAgIHRpbWVyLT5zdG9wKCk7CiAgICAgfSAg
ICAKIH0KQEAgLTcyOCw3ICs3MjgsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZ2V0TlBSZWN0KGNv
bnN0IE5TUmVjdCYgbnIsIE5QUmVjdCYgbnByKQogICAgIAogICAgIEhhc2hNYXA8dWludDMyX3Qs
IFBsdWdpblRpbWVyKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHRpbWVycy0+ZW5kKCk7CiAgICAg
Zm9yIChIYXNoTWFwPHVpbnQzMl90LCBQbHVnaW5UaW1lcio+Ojpjb25zdF9pdGVyYXRvciBpdCA9
IHRpbWVycy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFBsdWdpblRpbWVy
KiB0aW1lciA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFBsdWdpblRpbWVyKiB0aW1lciA9IGl0LT52
YWx1ZTsKICAgICAgICAgQVNTRVJUKCF0aW1lci0+aXNBY3RpdmUoKSk7CiAgICAgICAgIHRpbWVy
LT5zdGFydChfaXNDb21wbGV0ZWx5T2JzY3VyZWQpOwogICAgIH0gICAgCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJOb3RpZmljYXRpb25DbGllbnQubW0g
Yi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJOb3RpZmljYXRpb25DbGllbnQu
bW0KaW5kZXggZTJhMDVjNmE4YmFjMjYxZGU1ZmY1YWQwMDNjYzhmYzFhYWVmODJjZi4uZjBjNDlh
NmNjYzQ1MGU2NDFlYzEyNjUyNzQzYmM2YzkwOGZiZDI2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViTm90aWZpY2F0aW9uQ2xpZW50Lm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYk5vdGlmaWNhdGlvbkNsaWVudC5tbQpA
QCAtOTAsNyArOTAsNyBAQCBib29sIFdlYk5vdGlmaWNhdGlvbkNsaWVudDo6c2hvdyhOb3RpZmlj
YXRpb24qIG5vdGlmaWNhdGlvbikKICAgICBtX25vdGlmaWNhdGlvbk1hcC5zZXQobm90aWZpY2F0
aW9uLCB3ZWJOb3RpZmljYXRpb24pOwogCiAgICAgTm90aWZpY2F0aW9uQ29udGV4dE1hcDo6aXRl
cmF0b3IgaXQgPSBtX25vdGlmaWNhdGlvbkNvbnRleHRNYXAuYWRkKG5vdGlmaWNhdGlvbi0+c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpLCBWZWN0b3I8UmV0YWluUHRyPFdlYk5vdGlmaWNhdGlvbj4g
PigpKS5pdGVyYXRvcjsKLSAgICBpdC0+c2Vjb25kLmFwcGVuZCh3ZWJOb3RpZmljYXRpb24pOwor
ICAgIGl0LT52YWx1ZS5hcHBlbmQod2ViTm90aWZpY2F0aW9uKTsKIAogICAgIFtbbV93ZWJWaWV3
IF9ub3RpZmljYXRpb25Qcm92aWRlcl0gc2hvd05vdGlmaWNhdGlvbjp3ZWJOb3RpZmljYXRpb24u
Z2V0KCkgZnJvbVdlYlZpZXc6bV93ZWJWaWV3XTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEyMCw3
ICsxMjAsNyBAQCB2b2lkIFdlYk5vdGlmaWNhdGlvbkNsaWVudDo6Y2xlYXJOb3RpZmljYXRpb25z
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCiAgICAgaWYgKGl0ID09IG1fbm90aWZp
Y2F0aW9uQ29udGV4dE1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIFZlY3Rv
cjxSZXRhaW5QdHI8V2ViTm90aWZpY2F0aW9uPiA+JiB3ZWJOb3RpZmljYXRpb25zID0gaXQtPnNl
Y29uZDsKKyAgICBWZWN0b3I8UmV0YWluUHRyPFdlYk5vdGlmaWNhdGlvbj4gPiYgd2ViTm90aWZp
Y2F0aW9ucyA9IGl0LT52YWx1ZTsKICAgICBOU011dGFibGVBcnJheSAqbnNJRHMgPSBbTlNNdXRh
YmxlQXJyYXkgYXJyYXldOwogICAgIHNpemVfdCBjb3VudCA9IHdlYk5vdGlmaWNhdGlvbnMuc2l6
ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewpAQCAtMTQ2LDEw
ICsxNDYsMTAgQEAgdm9pZCBXZWJOb3RpZmljYXRpb25DbGllbnQ6Om5vdGlmaWNhdGlvbk9iamVj
dERlc3Ryb3llZChOb3RpZmljYXRpb24qIG5vdGlmaWNhdGkKIAogICAgIE5vdGlmaWNhdGlvbkNv
bnRleHRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9ub3RpZmljYXRpb25Db250ZXh0TWFwLmZpbmQobm90
aWZpY2F0aW9uLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwogICAgIEFTU0VSVChpdCAhPSBt
X25vdGlmaWNhdGlvbkNvbnRleHRNYXAuZW5kKCkpOwotICAgIHNpemVfdCBpbmRleCA9IGl0LT5z
ZWNvbmQuZmluZCh3ZWJOb3RpZmljYXRpb24pOworICAgIHNpemVfdCBpbmRleCA9IGl0LT52YWx1
ZS5maW5kKHdlYk5vdGlmaWNhdGlvbik7CiAgICAgQVNTRVJUKGluZGV4ICE9IG5vdEZvdW5kKTsK
LSAgICBpdC0+c2Vjb25kLnJlbW92ZShpbmRleCk7Ci0gICAgaWYgKGl0LT5zZWNvbmQuaXNFbXB0
eSgpKQorICAgIGl0LT52YWx1ZS5yZW1vdmUoaW5kZXgpOworICAgIGlmIChpdC0+dmFsdWUuaXNF
bXB0eSgpKQogICAgICAgICBtX25vdGlmaWNhdGlvbkNvbnRleHRNYXAucmVtb3ZlKGl0KTsKIAog
ICAgIFtbbV93ZWJWaWV3IF9ub3RpZmljYXRpb25Qcm92aWRlcl0gbm90aWZpY2F0aW9uRGVzdHJv
eWVkOndlYk5vdGlmaWNhdGlvbi5nZXQoKV07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJI
VE1MVmlldy5tbQppbmRleCA1MDVkYjUzMDIxMDRlYTg0OGZiODIwMTI3ZmEyOTRiMzE2YmUwOTIx
Li5iOWEwMDA2ZDc5YTM0MzYwZjI5OWMzYzg0MWJiNzk2MmYzNzJkNThiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJL
aXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0KQEAgLTIzNzYsNyArMjM3Niw3IEBAIHN0YXRp
YyBTdHJpbmcgY29tbWFuZE5hbWVGb3JTZWxlY3RvcihTRUwgc2VsZWN0b3IpCiAgICAgc3RhdGlj
IGNvbnN0IFNlbGVjdG9yTmFtZU1hcCogZXhjZXB0aW9uTWFwID0gY3JlYXRlU2VsZWN0b3JFeGNl
cHRpb25NYXAoKTsKICAgICBTZWxlY3Rvck5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZXhj
ZXB0aW9uTWFwLT5maW5kKHNlbGVjdG9yKTsKICAgICBpZiAoaXQgIT0gZXhjZXB0aW9uTWFwLT5l
bmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBpdC0+dmFs
dWU7CiAKICAgICAvLyBSZW1vdmUgdGhlIHRyYWlsaW5nIGNvbG9uLgogICAgIC8vIE5vIG5lZWQg
dG8gY2FwaXRhbGl6ZSB0aGUgY29tbWFuZCBuYW1lIHNpbmNlIEVkaXRvciBjb21tYW5kIG5hbWVz
IGFyZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwIGIvU291
cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCmluZGV4IDA4ZTg2MTgzYTZiNmVhNDQwODdl
ZjI0NzFmZDkwMDJkNGI2MDQwZjQuLjNkYjY5NzY5OGMzN2MxMjdmMTY3MTVmZDRlMmRiMjVmM2Uw
MTcyMDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAKQEAgLTIyNTgsNyArMjI1OCw3IEBA
IHN0YXRpYyB2b2lkIGV4dHJhY3RDb250ZW50VHlwZUZyb21QbHVnaW5WZWN0b3IoY29uc3QgVmVj
dG9yPFBsdWdpblBhY2thZ2UqPiYgcGx1CiAgICAgICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6
Y29uc3RfaXRlcmF0b3IgbWFwX2l0ID0gcGx1Z2luc1tpXS0+bWltZVRvRGVzY3JpcHRpb25zKCku
YmVnaW4oKTsKICAgICAgICAgTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBt
YXBfZW5kID0gcGx1Z2luc1tpXS0+bWltZVRvRGVzY3JpcHRpb25zKCkuZW5kKCk7CiAgICAgICAg
IGZvciAoOyBtYXBfaXQgIT0gbWFwX2VuZDsgKyttYXBfaXQpCi0gICAgICAgICAgICAqbGlzdCA8
PCBtYXBfaXQtPmZpcnN0OworICAgICAgICAgICAgKmxpc3QgPDwgbWFwX2l0LT5rZXk7CiAgICAg
fQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGx1Z2luZGF0YWJh
c2UuY3BwIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBsdWdpbmRhdGFiYXNlLmNwcAppbmRl
eCBhN2EzYjVmMmMxZTg5ZjQ3NDM3YzA4YTk3ZmNiMjk2Nzg2YmY4ZTU4Li5jNTMyOGM4ZjY3NWYy
YzY2ZjdiOWI0MjBkNjUxMzdmZDlmODZiODk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0
L0FwaS9xd2VicGx1Z2luZGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3
ZWJwbHVnaW5kYXRhYmFzZS5jcHAKQEAgLTEyMiw4ICsxMjIsOCBAQCBRTGlzdDxRV2ViUGx1Z2lu
SW5mbzo6TWltZVR5cGU+IFFXZWJQbHVnaW5JbmZvOjptaW1lVHlwZXMoKSBjb25zdAogCiAgICAg
ICAgIGZvciAoTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1pbWVU
b0Rlc2NyaXB0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIE1p
bWVUeXBlIG1pbWVUeXBlOwotICAgICAgICAgICAgbWltZVR5cGUubmFtZSA9IGl0LT5maXJzdDsK
LSAgICAgICAgICAgIG1pbWVUeXBlLmRlc2NyaXB0aW9uID0gaXQtPnNlY29uZDsKKyAgICAgICAg
ICAgIG1pbWVUeXBlLm5hbWUgPSBpdC0+a2V5OworICAgICAgICAgICAgbWltZVR5cGUuZGVzY3Jp
cHRpb24gPSBpdC0+dmFsdWU7CiAKICAgICAgICAgICAgIFFTdHJpbmdMaXN0IGZpbGVFeHRlbnNp
b25zOwogICAgICAgICAgICAgVmVjdG9yPFN0cmluZz4gZXh0ZW5zaW9ucyA9IG1fcGFja2FnZS0+
bWltZVRvRXh0ZW5zaW9ucygpLmdldChtaW1lVHlwZS5uYW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzUXQuY3BwIGIvU291
cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNRdC5jcHAKaW5k
ZXggY2Q0YWIwZDcyZDg2ODEyNWRjODZlZTk4N2JjY2U2ZWYzYWIxYWQ4OS4uN2Q0YjBiNzVmOWQy
YzRlNzY3OWRiM2QwN2I1NjE3YTQyMTQwNGM1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNRdC5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNRdC5jcHAKQEAgLTEzMyw4
ICsxMzMsOCBAQCB2b2lkIFBsYXRmb3JtU3RyYXRlZ2llc1F0OjpnZXRQbHVnaW5JbmZvKGNvbnN0
IFdlYkNvcmU6OlBhZ2UqIHBhZ2UsIFZlY3RvcjxXZWJDbwogICAgICAgICBmb3IgKE1JTUVUb0Rl
c2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBNaW1lQ2xhc3NJbmZvIG1pbWU7
CiAKLSAgICAgICAgICAgIG1pbWUudHlwZSA9IGl0LT5maXJzdDsKLSAgICAgICAgICAgIG1pbWUu
ZGVzYyA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICBtaW1lLnR5cGUgPSBpdC0+a2V5OworICAg
ICAgICAgICAgbWltZS5kZXNjID0gaXQtPnZhbHVlOwogICAgICAgICAgICAgbWltZS5leHRlbnNp
b25zID0gcGFja2FnZS0+bWltZVRvRXh0ZW5zaW9ucygpLmdldChtaW1lLnR5cGUpOwogCiAgICAg
ICAgICAgICBpbmZvLm1pbWVzLmFwcGVuZChtaW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvd2luL0NPTVByb3BlcnR5QmFnLmggYi9Tb3VyY2UvV2ViS2l0L3dpbi9DT01Qcm9wZXJ0eUJh
Zy5oCmluZGV4IGM3Njg2M2YxNTAxMmYyZWFkZTBkY2UxNWZkZGI3MzliZmJjMjc5YzMuLjhlODRl
NDc0MGFhM2E5ODYzNTk0YmVkY2VjZThlMzcxMmFkNGEyZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvd2luL0NPTVByb3BlcnR5QmFnLmgKKysrIGIvU291cmNlL1dlYktpdC93aW4vQ09NUHJv
cGVydHlCYWcuaApAQCAtMTQ3LDkgKzE0Nyw5IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUg
Q09NUHJvcGVydHlCYWc8VmFsdWVUeXBlLCBLZXlUeXBlLCBIYXNoVHlwZT46OlJlYWQoTFBDCiAK
ICAgICBWQVJUWVBFIHJlcXVlc3RlZFR5cGUgPSBWX1ZUKHBWYXIpOwogICAgIFZfVlQocFZhcikg
PSBWVF9FTVBUWTsKLSAgICBDT01WYXJpYW50U2V0dGVyPFZhbHVlVHlwZT46OnNldFZhcmlhbnQo
cFZhciwgaXQtPnNlY29uZCk7CisgICAgQ09NVmFyaWFudFNldHRlcjxWYWx1ZVR5cGU+OjpzZXRW
YXJpYW50KHBWYXIsIGl0LT52YWx1ZSk7CiAKLSAgICBpZiAocmVxdWVzdGVkVHlwZSAhPSBDT01W
YXJpYW50U2V0dGVyPFZhbHVlVHlwZT46OnZhcmlhbnRUeXBlKGl0LT5zZWNvbmQpICYmIHJlcXVl
c3RlZFR5cGUgIT0gVlRfRU1QVFkpCisgICAgaWYgKHJlcXVlc3RlZFR5cGUgIT0gQ09NVmFyaWFu
dFNldHRlcjxWYWx1ZVR5cGU+Ojp2YXJpYW50VHlwZShpdC0+dmFsdWUpICYmIHJlcXVlc3RlZFR5
cGUgIT0gVlRfRU1QVFkpCiAgICAgICAgIHJldHVybiA6OlZhcmlhbnRDaGFuZ2VUeXBlKHBWYXIs
IHBWYXIsIFZBUklBTlRfTk9VU0VST1ZFUlJJREUgfCBWQVJJQU5UX0FMUEhBQk9PTCwgcmVxdWVz
dGVkVHlwZSk7CiAKICAgICByZXR1cm4gU19PSzsKQEAgLTIxNywxMiArMjE3LDEyIEBAIEhSRVNV
TFQgU1RETUVUSE9EQ0FMTFRZUEUgQ09NUHJvcGVydHlCYWc8VmFsdWVUeXBlLCBLZXlUeXBlLCBI
YXNoVHlwZT46OkdldFByb3BlCiAgICAgICAgIC8vcFByb3BCYWdbal0uY2xzaWQ7ICAgIC8vIChD
TFNJRCkgQ0xTSUQgb2YgdGhlIG9iamVjdC4gVGhpcyBtZW1iZXIgaXMgdmFsaWQgb25seSBpZiBk
d1R5cGUgaXMgUFJPUEJBRzJfVFlQRV9PQkpFQ1QuCiAKICAgICAgICAgcFByb3BCYWdbal0uZHdU
eXBlID0gUFJPUEJBRzJfVFlQRV9EQVRBOwotICAgICAgICBwUHJvcEJhZ1tqXS52dCA9IENPTVZh
cmlhbnRTZXR0ZXI8VmFsdWVUeXBlPjo6dmFyaWFudFR5cGUoY3VycmVudC0+c2Vjb25kKTsKKyAg
ICAgICAgcFByb3BCYWdbal0udnQgPSBDT01WYXJpYW50U2V0dGVyPFZhbHVlVHlwZT46OnZhcmlh
bnRUeXBlKGN1cnJlbnQtPnZhbHVlKTsKICAgICAgICAgcFByb3BCYWdbal0uZHdIaW50ID0gaVBy
b3BlcnR5ICsgajsKLSAgICAgICAgcFByb3BCYWdbal0ucHN0ck5hbWUgPSAoTFBPTEVTVFIpQ29U
YXNrTWVtQWxsb2Moc2l6ZW9mKHdjaGFyX3QpKihjdXJyZW50LT5maXJzdC5sZW5ndGgoKSsxKSk7
CisgICAgICAgIHBQcm9wQmFnW2pdLnBzdHJOYW1lID0gKExQT0xFU1RSKUNvVGFza01lbUFsbG9j
KHNpemVvZih3Y2hhcl90KSooY3VycmVudC0+a2V5Lmxlbmd0aCgpKzEpKTsKICAgICAgICAgaWYg
KCFwUHJvcEJhZ1tqXS5wc3RyTmFtZSkKICAgICAgICAgICAgIHJldHVybiBFX09VVE9GTUVNT1JZ
OwotICAgICAgICB3Y3NjcHlfcyhwUHJvcEJhZ1tqXS5wc3RyTmFtZSwgY3VycmVudC0+Zmlyc3Qu
bGVuZ3RoKCkrMSwgc3RhdGljX2Nhc3Q8U3RyaW5nPihjdXJyZW50LT5maXJzdCkuY2hhcmFjdGVy
c1dpdGhOdWxsVGVybWluYXRpb24oKSk7CisgICAgICAgIHdjc2NweV9zKHBQcm9wQmFnW2pdLnBz
dHJOYW1lLCBjdXJyZW50LT5rZXkubGVuZ3RoKCkrMSwgc3RhdGljX2Nhc3Q8U3RyaW5nPihjdXJy
ZW50LT5rZXkpLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkpOwogICAgICAgICArKypw
Y1Byb3BlcnRpZXM7CiAgICAgfQogICAgIHJldHVybiBTX09LOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC93aW4vV2ViQ29yZVN0YXRpc3RpY3MuY3BwIGIvU291cmNlL1dlYktpdC93aW4vV2Vi
Q29yZVN0YXRpc3RpY3MuY3BwCmluZGV4IGMxY2E5ZjIxNGYyNDljMGE0OWYxZmNiMTIyZjA2YWQz
NDkzYjRiMTkuLjJmMjJiMDNjNjIyNTAwMmFlMjE5Y2EwZjQ1YmE0N2QyOTgwYzM3YTAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdGF0aXN0aWNzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L3dpbi9XZWJDb3JlU3RhdGlzdGljcy5jcHAKQEAgLTE0NSw3ICsxNDUsNyBAQCBI
UkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkNvcmVTdGF0aXN0aWNzOjpqYXZhU2NyaXB0UHJv
dGVjdGVkT2JqZWN0VHlwZUNvdW50cwogICAgIEl0ZXJhdG9yIGVuZCA9IGpzT2JqZWN0VHlwZU5h
bWVzLT5lbmQoKTsKICAgICBIYXNoTWFwPFN0cmluZywgaW50PiB0eXBlQ291bnRNYXA7CiAgICAg
Zm9yIChJdGVyYXRvciBjdXJyZW50ID0ganNPYmplY3RUeXBlTmFtZXMtPmJlZ2luKCk7IGN1cnJl
bnQgIT0gZW5kOyArK2N1cnJlbnQpCi0gICAgICAgIHR5cGVDb3VudE1hcC5zZXQoY3VycmVudC0+
Zmlyc3QsIGN1cnJlbnQtPnNlY29uZCk7CisgICAgICAgIHR5cGVDb3VudE1hcC5zZXQoY3VycmVu
dC0+a2V5LCBjdXJyZW50LT52YWx1ZSk7CiAKICAgICBDT01QdHI8SVByb3BlcnR5QmFnMj4gcmVz
dWx0cyhBZG9wdENPTSwgQ09NUHJvcGVydHlCYWc8aW50Pjo6Y3JlYXRlSW5zdGFuY2UodHlwZUNv
dW50TWFwKSk7CiAgICAgcmVzdWx0cy5jb3B5UmVmVG8odHlwZU5hbWVzQW5kQ291bnRzKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3Ry
YXRlZ2llcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9y
bVN0cmF0ZWdpZXMuY3BwCmluZGV4IDIzMGYzMzIzZjU0MjkxZDAxZTE0MTk4MTc4ZmEyMTZhNDhj
MGNmNWIuLmYxMzBmNzZiZDJhNjc2OTdhZGU3YTM2Nzg4NDUyNDNhOWY2YTcxYTUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2ll
cy5jcHAKKysrIGIvU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1T
dHJhdGVnaWVzLmNwcApAQCAtOTMsOCArOTMsOCBAQCB2b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2ll
czo6Z2V0UGx1Z2luSW5mbyhjb25zdCBXZWJDb3JlOjpQYWdlKiwgVmVjdG9yPFdlYkNvcmU6Ogog
ICAgICAgICBmb3IgKE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
aW1lVG9EZXNjcmlwdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAg
ICBNaW1lQ2xhc3NJbmZvIG1pbWU7CiAKLSAgICAgICAgICAgIG1pbWUudHlwZSA9IGl0LT5maXJz
dDsKLSAgICAgICAgICAgIG1pbWUuZGVzYyA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICBtaW1l
LnR5cGUgPSBpdC0+a2V5OworICAgICAgICAgICAgbWltZS5kZXNjID0gaXQtPnZhbHVlOwogICAg
ICAgICAgICAgbWltZS5leHRlbnNpb25zID0gcGFja2FnZS0+bWltZVRvRXh0ZW5zaW9ucygpLmdl
dChtaW1lLnR5cGUpOwogCiAgICAgICAgICAgICBpbmZvLm1pbWVzLmFwcGVuZChtaW1lKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYkhpc3RvcnkuY3BwIGIvU291cmNlL1dlYktp
dC93aW4vV2ViSGlzdG9yeS5jcHAKaW5kZXggZTg0MmMxNDA3MzVjNzE5OTFhNWQxMWU4YjlkM2I1
N2Y3ZDVjZDI3Yi4uODIzMzVhNzhhNzVmOGM4MjJkZDk5NmU1ZDY4OThjMzljMDRlM2IzMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vV2ViSGlzdG9yeS5jcHAKKysrIGIvU291cmNlL1dl
YktpdC93aW4vV2ViSGlzdG9yeS5jcHAKQEAgLTgzNCw3ICs4MzQsNyBAQCBIUkVTVUxUIFdlYkhp
c3Rvcnk6OnJlbW92ZUl0ZW1Gcm9tRGF0ZUNhY2hlcyhJV2ViSGlzdG9yeUl0ZW0qIGVudHJ5KQog
CiAgICAgRGF0ZVRvRW50cmllc01hcDo6aXRlcmF0b3IgZm91bmQgPSBtX2VudHJpZXNCeURhdGUu
ZmluZChkYXRlS2V5KTsKICAgICBBU1NFUlQoZm91bmQgIT0gbV9lbnRyaWVzQnlEYXRlLmVuZCgp
KTsKLSAgICBDRk11dGFibGVBcnJheVJlZiBlbnRyaWVzRm9yRGF0ZSA9IGZvdW5kLT5zZWNvbmQu
Z2V0KCk7CisgICAgQ0ZNdXRhYmxlQXJyYXlSZWYgZW50cmllc0ZvckRhdGUgPSBmb3VuZC0+dmFs
dWUuZ2V0KCk7CiAKICAgICBDRkluZGV4IGNvdW50ID0gQ0ZBcnJheUdldENvdW50KGVudHJpZXNG
b3JEYXRlKTsKICAgICBmb3IgKGludCBpID0gY291bnQgLSAxOyBpID49IDA7IC0taSkgewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vV2ViS2l0Q09NQVBJLmNwcCBiL1NvdXJjZS9XZWJL
aXQvd2luL1dlYktpdENPTUFQSS5jcHAKaW5kZXggOWM5Y2MwMjZiNDdiNGZlYTk2MGM2Mzk4NDZl
MGViYTUxYzQ2NTNjMi4uNGQ4ZmYwOTViZGE5NjA3ZDI5YTE0NWI4NTdjNzhkZGZmOGUzNWU3YSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vV2ViS2l0Q09NQVBJLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L3dpbi9XZWJLaXRDT01BUEkuY3BwCkBAIC01Miw3ICs1Miw3IEBAIHN0YXRpYyBD
T01QdHI8SUNsYXNzRmFjdG9yeT4gY2xhc3NGYWN0b3J5KGNvbnN0IENMU0lEJiBjbHNpZCkKICAg
ICBzdGF0aWMgRmFjdG9yeU1hcCYgZmFjdG9yaWVzID0gKm5ldyBGYWN0b3J5TWFwOwogCiAgICAg
RmFjdG9yeU1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IGZhY3Rvcmllcy5hZGQoY2xzaWQsIDApOwot
ICAgIENPTVB0cjxJQ2xhc3NGYWN0b3J5PiYgZmFjdG9yeSA9IHJlc3VsdC5pdGVyYXRvci0+c2Vj
b25kOworICAgIENPTVB0cjxJQ2xhc3NGYWN0b3J5PiYgZmFjdG9yeSA9IHJlc3VsdC5pdGVyYXRv
ci0+dmFsdWU7CiAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5ICYmIEZBSUxFRChEbGxHZXRDbGFz
c09iamVjdChjbHNpZCwgX191dWlkb2YoZmFjdG9yeSksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoq
PigmZmFjdG9yeSkpKSkKICAgICAgICAgZmFjdG9yeSA9IDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvd2luL1dlYktpdFN0YXRpc3RpY3MuY3BwIGIvU291cmNlL1dlYktpdC93aW4vV2Vi
S2l0U3RhdGlzdGljcy5jcHAKaW5kZXggOWNkOTVjN2FjOTM1OTUzMDA3ZTE1N2RjYTc0ZTgwN2M0
NWFlZTA2ZS4uYzdiOGVkMWFjNzdjZTZlMTkyNmFhNWRiMjI0MjRmMmVlZTFhMzUwYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC93aW4vV2ViS2l0U3RhdGlzdGljcy5jcHAKKysrIGIvU291cmNl
L1dlYktpdC93aW4vV2ViS2l0U3RhdGlzdGljcy5jcHAKQEAgLTE0NCw5ICsxNDQsOSBAQCBIUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIFdlYktpdFN0YXRpc3RpY3M6OmNvbUNsYXNzTmFtZUNvdW50
cygKICAgICBJdGVyYXRvciBlbmQgPSBnQ2xhc3NOYW1lQ291bnQuZW5kKCk7CiAgICAgVmVjdG9y
PFVDaGFyPiB2ZWN0b3I7CiAgICAgZm9yIChJdGVyYXRvciBjdXJyZW50ID0gZ0NsYXNzTmFtZUNv
dW50LmJlZ2luKCk7IGN1cnJlbnQgIT0gZW5kOyArK2N1cnJlbnQpIHsKLSAgICAgICAgYXBwZW5k
KHZlY3RvciwgU3RyaW5nOjpmb3JtYXQoIiU0dSIsIGN1cnJlbnQtPnNlY29uZCkpOworICAgICAg
ICBhcHBlbmQodmVjdG9yLCBTdHJpbmc6OmZvcm1hdCgiJTR1IiwgY3VycmVudC0+dmFsdWUpKTsK
ICAgICAgICAgdmVjdG9yLmFwcGVuZCgnXHQnKTsKLSAgICAgICAgYXBwZW5kKHZlY3Rvciwgc3Rh
dGljX2Nhc3Q8U3RyaW5nPihjdXJyZW50LT5maXJzdCkpOworICAgICAgICBhcHBlbmQodmVjdG9y
LCBzdGF0aWNfY2FzdDxTdHJpbmc+KGN1cnJlbnQtPmtleSkpOwogICAgICAgICB2ZWN0b3IuYXBw
ZW5kKCdcbicpOwogICAgIH0KICAgICAqb3V0cHV0ID0gQlN0cmluZyhTdHJpbmc6OmFkb3B0KHZl
Y3RvcikpLnJlbGVhc2UoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYk5vdGlm
aWNhdGlvbkNlbnRlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJOb3RpZmljYXRpb25DZW50
ZXIuY3BwCmluZGV4IGM3MTkyZDhkM2NkYjJjZGFlMmJhYTcxYWU2MGY3YmE5ZDgxZWQ3ZWEuLjMx
YzgxMTlhNTAyYjljZWU2NWU0MjBiZjUxN2VlNzlhYTEyODQxYjAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvd2luL1dlYk5vdGlmaWNhdGlvbkNlbnRlci5jcHAKKysrIGIvU291cmNlL1dlYktp
dC93aW4vV2ViTm90aWZpY2F0aW9uQ2VudGVyLmNwcApAQCAtMTIwLDcgKzEyMCw3IEBAIHZvaWQg
V2ViTm90aWZpY2F0aW9uQ2VudGVyOjpwb3N0Tm90aWZpY2F0aW9uSW50ZXJuYWwoSVdlYk5vdGlm
aWNhdGlvbiogbm90aWZpY2F0CiAKICAgICAvLyBJbnRlbnRpb25hbGx5IG1ha2UgYSBjb3B5IG9m
IHRoZSBsaXN0IHRvIGF2b2lkIHRoZSBwb3NzaWJpbGl0eSBvZiBlcnJvcnMKICAgICAvLyBmcm9t
IGEgbXV0YXRpb24gb2YgdGhlIGxpc3QgaW4gdGhlIG9uTm90aWZ5IGNhbGxiYWNrLgotICAgIE9i
amVjdE9ic2VydmVyTGlzdCBsaXN0ID0gaXQtPnNlY29uZDsKKyAgICBPYmplY3RPYnNlcnZlckxp
c3QgbGlzdCA9IGl0LT52YWx1ZTsKIAogICAgIE9ic2VydmVyTGlzdEl0ZXJhdG9yIGVuZCA9IGxp
c3QuZW5kKCk7CiAgICAgZm9yIChPYnNlcnZlckxpc3RJdGVyYXRvciBpdDIgPSBsaXN0LmJlZ2lu
KCk7IGl0MiAhPSBlbmQ7ICsraXQyKSB7CkBAIC0xNDksNyArMTQ5LDcgQEAgSFJFU1VMVCBTVERN
RVRIT0RDQUxMVFlQRSBXZWJOb3RpZmljYXRpb25DZW50ZXI6OmFkZE9ic2VydmVyKAogICAgIFN0
cmluZyBuYW1lKG5vdGlmaWNhdGlvbk5hbWUsIFN5c1N0cmluZ0xlbihub3RpZmljYXRpb25OYW1l
KSk7CiAgICAgTWFwcGVkT2JzZXJ2ZXJzOjppdGVyYXRvciBpdCA9IGQtPm1fbWFwcGVkT2JzZXJ2
ZXJzLmZpbmQobmFtZSk7CiAgICAgaWYgKGl0ICE9IGQtPm1fbWFwcGVkT2JzZXJ2ZXJzLmVuZCgp
KQotICAgICAgICBpdC0+c2Vjb25kLmFwcGVuZChPYmplY3RPYnNlcnZlclBhaXIoYW5PYmplY3Qs
IG9ic2VydmVyKSk7CisgICAgICAgIGl0LT52YWx1ZS5hcHBlbmQoT2JqZWN0T2JzZXJ2ZXJQYWly
KGFuT2JqZWN0LCBvYnNlcnZlcikpOwogICAgIGVsc2UgewogICAgICAgICBPYmplY3RPYnNlcnZl
ckxpc3QgbGlzdDsKICAgICAgICAgbGlzdC5hcHBlbmQoT2JqZWN0T2JzZXJ2ZXJQYWlyKGFuT2Jq
ZWN0LCBvYnNlcnZlcikpOwpAQCAtMTk4LDcgKzE5OCw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgV2ViTm90aWZpY2F0aW9uQ2VudGVyOjpyZW1vdmVPYnNlcnZlcigKICAgICBpZiAoaXQg
PT0gZC0+bV9tYXBwZWRPYnNlcnZlcnMuZW5kKCkpCiAgICAgICAgIHJldHVybiBFX0ZBSUw7CiAK
LSAgICBPYmplY3RPYnNlcnZlckxpc3QmIG9ic2VydmVyTGlzdCA9IGl0LT5zZWNvbmQ7CisgICAg
T2JqZWN0T2JzZXJ2ZXJMaXN0JiBvYnNlcnZlckxpc3QgPSBpdC0+dmFsdWU7CiAgICAgT2JzZXJ2
ZXJMaXN0SXRlcmF0b3IgZW5kID0gb2JzZXJ2ZXJMaXN0LmVuZCgpOwogCiAgICAgaW50IGkgPSAw
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW5jZS9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9y
bVN0cmF0ZWdpZXNXaW5DRS5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0
L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmNwcAppbmRleCAzZjhjOTA3YzczOWYwOGNkYjk5MTZl
ODM2ZjliMDhkZTY3ODQ1MWNmLi5kNTU3OTcyMzExNjE1OTFkNWZkYjE3MTU4MDQ0NThkYjc4MmM5
MWYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L1BsYXRm
b3JtU3RyYXRlZ2llc1dpbkNFLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVT
dXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmNwcApAQCAtOTQsOCArOTQsOCBAQCB2b2lk
IFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjpnZXRQbHVnaW5JbmZvKGNvbnN0IFBhZ2UqLCBWZWN0
b3I8UGx1Z2luSW5mbz4mIG91dAogICAgICAgICBmb3IgKE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7CiAgICAgICAgICAgICBNaW1lQ2xhc3NJbmZvIG1pbWU7CiAKLSAgICAgICAgICAg
IG1pbWUudHlwZSA9IGl0LT5maXJzdDsKLSAgICAgICAgICAgIG1pbWUuZGVzYyA9IGl0LT5zZWNv
bmQ7CisgICAgICAgICAgICBtaW1lLnR5cGUgPSBpdC0+a2V5OworICAgICAgICAgICAgbWltZS5k
ZXNjID0gaXQtPnZhbHVlOwogICAgICAgICAgICAgbWltZS5leHRlbnNpb25zID0gcGFja2FnZS0+
bWltZVRvRXh0ZW5zaW9ucygpLmdldChtaW1lLnR5cGUpOwogCiAgICAgICAgICAgICBpbmZvLm1p
bWVzLmFwcGVuZChtaW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0Nv
cmVJUEMvQXJndW1lbnRDb2RlcnMuaCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMv
QXJndW1lbnRDb2RlcnMuaAppbmRleCBkZDU0ZGZlZWY5MWE3ZGUzMTE5MTVlOTNkOWFmYmViMTNh
MWNiZTc3Li5hZjE2M2JlNmQ5YjY0YzMwOWQ5MTlhZDFiNzM2NTg4ZWIyNjMxY2JhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50Q29kZXJzLmgKKysr
IGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVudENvZGVycy5oCkBAIC03
NSw4ICs3NSw4IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IHN0cnVjdCBBcmd1
bWVudENvZGVyPHN0ZDo6cGFpcjxULCBVPiA+IHsKIHRlbXBsYXRlPHR5cGVuYW1lIEtleVR5cGUs
IHR5cGVuYW1lIFZhbHVlVHlwZT4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V1RGOjpLZXlWYWx1ZVBh
aXI8S2V5VHlwZSwgVmFsdWVUeXBlPiA+IHsKICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1l
bnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBXVEY6OktleVZhbHVlUGFpcjxLZXlUeXBlLCBWYWx1
ZVR5cGU+JiBwYWlyKQogICAgIHsKLSAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKHBhaXIuZmlyc3Qp
OwotICAgICAgICBlbmNvZGVyLT5lbmNvZGUocGFpci5zZWNvbmQpOworICAgICAgICBlbmNvZGVy
LT5lbmNvZGUocGFpci5rZXkpOworICAgICAgICBlbmNvZGVyLT5lbmNvZGUocGFpci52YWx1ZSk7
CiAgICAgfQogCiAgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciogZGVjb2Rl
ciwgV1RGOjpLZXlWYWx1ZVBhaXI8S2V5VHlwZSwgVmFsdWVUeXBlPiYgcGFpcikKQEAgLTg5LDgg
Kzg5LDggQEAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5VHlwZSwgdHlwZW5hbWUgVmFsdWVUeXBlPiBz
dHJ1Y3QgQXJndW1lbnRDb2RlcjxXVEY6OktleVZhbHUKICAgICAgICAgaWYgKCFkZWNvZGVyLT5k
ZWNvZGUodmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIHBhaXIu
Zmlyc3QgPSBrZXk7Ci0gICAgICAgIHBhaXIuc2Vjb25kID0gdmFsdWU7CisgICAgICAgIHBhaXIu
a2V5ID0ga2V5OworICAgICAgICBwYWlyLnZhbHVlID0gdmFsdWU7CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3Jl
SVBDL0Nvbm5lY3Rpb24uY3BwIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Db25u
ZWN0aW9uLmNwcAppbmRleCBkMjJiOGI0YzFiOGM1MjhjZWNiOGIyMWM3MDU0MGYzMDZjYjNlZTM0
Li4zNDQ5ZTM1MmUxMGNlY2IwNDdiZTA5ZmFiODhlMGFmOTA2OTMyYWQyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5jcHAKQEAgLTEwMiwxMiArMTAy
LDEyIEBAIFBhc3NSZWZQdHI8Q29ubmVjdGlvbjo6U3luY01lc3NhZ2VTdGF0ZT4gQ29ubmVjdGlv
bjo6U3luY01lc3NhZ2VTdGF0ZTo6Z2V0T3JDcmVhCiAgICAgU3luY01lc3NhZ2VTdGF0ZU1hcDo6
QWRkUmVzdWx0IHJlc3VsdCA9IHN5bmNNZXNzYWdlU3RhdGVNYXAoKS5hZGQocnVuTG9vcCwgMCk7
CiAKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIEFTU0VSVChyZXN1bHQu
aXRlcmF0b3ItPnNlY29uZCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnNlY29u
ZDsKKyAgICAgICAgQVNTRVJUKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOworICAgICAgICByZXR1
cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAgICB9CiAKICAgICBSZWZQdHI8U3luY01lc3Nh
Z2VTdGF0ZT4gc3luY01lc3NhZ2VTdGF0ZSA9IGFkb3B0UmVmKG5ldyBTeW5jTWVzc2FnZVN0YXRl
KHJ1bkxvb3ApKTsKLSAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IHN5bmNNZXNzYWdlU3Rh
dGUuZ2V0KCk7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IHN5bmNNZXNzYWdlU3RhdGUu
Z2V0KCk7CiAKICAgICByZXR1cm4gc3luY01lc3NhZ2VTdGF0ZS5yZWxlYXNlKCk7CiB9CkBAIC0z
NjIsMTAgKzM2MiwxMCBAQCBQYXNzT3duUHRyPEFyZ3VtZW50RGVjb2Rlcj4gQ29ubmVjdGlvbjo6
d2FpdEZvck1lc3NhZ2UoTWVzc2FnZUlEIG1lc3NhZ2VJRCwgdWludAogICAgICAgICBNdXRleExv
Y2tlciBsb2NrZXIobV93YWl0Rm9yTWVzc2FnZU11dGV4KTsKIAogICAgICAgICBIYXNoTWFwPHN0
ZDo6cGFpcjx1bnNpZ25lZCwgdWludDY0X3Q+LCBBcmd1bWVudERlY29kZXIqPjo6aXRlcmF0b3Ig
aXQgPSBtX3dhaXRGb3JNZXNzYWdlTWFwLmZpbmQobWVzc2FnZUFuZERlc3RpbmF0aW9uKTsKLSAg
ICAgICAgaWYgKGl0LT5zZWNvbmQpIHsKKyAgICAgICAgaWYgKGl0LT52YWx1ZSkgewogICAgICAg
ICAgICAgLy8gRklYTUU6IG1fd2FpdEZvck1lc3NhZ2VNYXAgc2hvdWxkIHJlYWxseSBob2xkIE93
blB0cnMgdG8KICAgICAgICAgICAgIC8vIEFyZ3VtZW50RGVjb2RlcnMsIGJ1dCBIYXNoTWFwIGRv
ZXNuJ3QgY3VycmVudGx5IHN1cHBvcnQgT3duUHRycy4KLSAgICAgICAgICAgIE93blB0cjxBcmd1
bWVudERlY29kZXI+IGFyZ3VtZW50cyA9IGFkb3B0UHRyKGl0LT5zZWNvbmQpOworICAgICAgICAg
ICAgT3duUHRyPEFyZ3VtZW50RGVjb2Rlcj4gYXJndW1lbnRzID0gYWRvcHRQdHIoaXQtPnZhbHVl
KTsKICAgICAgICAgICAgIG1fd2FpdEZvck1lc3NhZ2VNYXAucmVtb3ZlKGl0KTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50cy5yZWxlYXNlKCk7CkBAIC01MzksOCAr
NTM5LDggQEAgdm9pZCBDb25uZWN0aW9uOjpwcm9jZXNzSW5jb21pbmdNZXNzYWdlKE1lc3NhZ2VJ
RCBtZXNzYWdlSUQsIFBhc3NPd25QdHI8QXJndW1lbnQKICAgICAgICAgCiAgICAgICAgIEhhc2hN
YXA8c3RkOjpwYWlyPHVuc2lnbmVkLCB1aW50NjRfdD4sIEFyZ3VtZW50RGVjb2Rlcio+OjppdGVy
YXRvciBpdCA9IG1fd2FpdEZvck1lc3NhZ2VNYXAuZmluZChzdGQ6Om1ha2VfcGFpcihtZXNzYWdl
SUQudG9JbnQoKSwgaW5jb21pbmdNZXNzYWdlLmRlc3RpbmF0aW9uSUQoKSkpOwogICAgICAgICBp
ZiAoaXQgIT0gbV93YWl0Rm9yTWVzc2FnZU1hcC5lbmQoKSkgewotICAgICAgICAgICAgaXQtPnNl
Y29uZCA9IGluY29taW5nTWVzc2FnZS5yZWxlYXNlQXJndW1lbnRzKCkubGVha1B0cigpOwotICAg
ICAgICAgICAgQVNTRVJUKGl0LT5zZWNvbmQpOworICAgICAgICAgICAgaXQtPnZhbHVlID0gaW5j
b21pbmdNZXNzYWdlLnJlbGVhc2VBcmd1bWVudHMoKS5sZWFrUHRyKCk7CisgICAgICAgICAgICBB
U1NFUlQoaXQtPnZhbHVlKTsKICAgICAgICAgCiAgICAgICAgICAgICBtX3dhaXRGb3JNZXNzYWdl
Q29uZGl0aW9uLnNpZ25hbCgpOwogICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvUGxhdGZvcm0vZ3RrL1dvcmtRdWV1ZUd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9QbGF0Zm9ybS9ndGsvV29ya1F1ZXVlR3RrLmNwcAppbmRleCAxZGZhYjgzY2NmYjI0YzlmMDBl
ZTQwZDJkYWExYzk1YjE2MzgyYTQzLi42ODg1ZDQ4NWJkMTE2ZDMyOGRlY2QwMmFhZjU0YzkxODc4
MmIyZjE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9ndGsvV29ya1F1ZXVl
R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9ndGsvV29ya1F1ZXVlR3RrLmNw
cApAQCAtMTY2LDcgKzE2Niw3IEBAIHZvaWQgV29ya1F1ZXVlOjpyZWdpc3RlckV2ZW50U291cmNl
SGFuZGxlcihpbnQgZmlsZURlc2NyaXB0b3IsIGludCBjb25kaXRpb24sIGNvCiAgICAgICAgIFZl
Y3RvcjxFdmVudFNvdXJjZSo+IHNvdXJjZXM7CiAgICAgICAgIEV2ZW50U291cmNlSXRlcmF0b3Ig
aXQgPSBtX2V2ZW50U291cmNlcy5maW5kKGZpbGVEZXNjcmlwdG9yKTsKICAgICAgICAgaWYgKGl0
ICE9IG1fZXZlbnRTb3VyY2VzLmVuZCgpKSAKLSAgICAgICAgICAgIHNvdXJjZXMgPSBpdC0+c2Vj
b25kOworICAgICAgICAgICAgc291cmNlcyA9IGl0LT52YWx1ZTsKIAogICAgICAgICBzb3VyY2Vz
LmFwcGVuZChldmVudFNvdXJjZSk7CiAgICAgICAgIG1fZXZlbnRTb3VyY2VzLnNldChmaWxlRGVz
Y3JpcHRvciwgc291cmNlcyk7CkBAIC0xODYsNyArMTg2LDcgQEAgdm9pZCBXb3JrUXVldWU6OnVu
cmVnaXN0ZXJFdmVudFNvdXJjZUhhbmRsZXIoaW50IGZpbGVEZXNjcmlwdG9yKQogICAgIEFTU0VS
VChtX2V2ZW50U291cmNlcy5jb250YWlucyhmaWxlRGVzY3JpcHRvcikpOwogCiAgICAgaWYgKGl0
ICE9IG1fZXZlbnRTb3VyY2VzLmVuZCgpKSB7Ci0gICAgICAgIFZlY3RvcjxFdmVudFNvdXJjZSo+
IHNvdXJjZXMgPSBpdC0+c2Vjb25kOworICAgICAgICBWZWN0b3I8RXZlbnRTb3VyY2UqPiBzb3Vy
Y2VzID0gaXQtPnZhbHVlOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc291cmNl
cy5zaXplKCk7IGkrKykKICAgICAgICAgICAgIHNvdXJjZXNbaV0tPmNhbmNlbCgpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9tYWMvV29ya1F1ZXVlTWFjLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtL21hYy9Xb3JrUXVldWVNYWMuY3BwCmluZGV4IGFlNDczZWU1
Y2M4NGU1ODQyOWIwNDM5Y2NkOTIxYWMyYzQ5MmZmYWEuLjZlNTRjZWUwYjcwOTg0MGE1NGY3NmNk
YWE0MjRmZWViNDYyOTA5YjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL21h
Yy9Xb3JrUXVldWVNYWMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL21hYy9Xb3Jr
UXVldWVNYWMuY3BwCkBAIC0xNTMsNyArMTUzLDcgQEAgdm9pZCBXb3JrUXVldWU6OnVucmVnaXN0
ZXJNYWNoUG9ydEV2ZW50SGFuZGxlcihtYWNoX3BvcnRfdCBtYWNoUG9ydCkKICAgICAKICAgICBB
U1NFUlQobV9ldmVudFNvdXJjZXMuY29udGFpbnMobWFjaFBvcnQpKTsKIAotICAgIEV2ZW50U291
cmNlKiBldmVudFNvdXJjZSA9IGl0LT5zZWNvbmQ7CisgICAgRXZlbnRTb3VyY2UqIGV2ZW50U291
cmNlID0gaXQtPnZhbHVlOwogICAgIC8vIENhbmNlbCBhbmQgcmVsZWFzZSB0aGUgc291cmNlLiBJ
dCB3aWxsIGJlIGRlbGV0ZWQgaW4gaXRzIGZpbmFsaXplIGhhbmRsZXIuCiAgICAgZGlzcGF0Y2hf
c291cmNlX2NhbmNlbChldmVudFNvdXJjZS0+ZGlzcGF0Y2hTb3VyY2UoKSk7CiAgICAgZGlzcGF0
Y2hfcmVsZWFzZShldmVudFNvdXJjZS0+ZGlzcGF0Y2hTb3VyY2UoKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvUGx1Z2lucy9OUFJlbW90ZU9iamVjdE1hcC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvUGx1Z2lucy9OUFJlbW90ZU9iamVjdE1hcC5jcHAKaW5kZXggNzY0
MWFmNWU4Yzg5MmQxZDM3ZWU5NmRhOWI3ZTYwNTg5OTczZTg4YS4uYjVlYzJkOWRhMzlmMjZkY2I0
MzIwZDk1ZTAzZjJmY2FlNGU3ZDdkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVk
L1BsdWdpbnMvTlBSZW1vdGVPYmplY3RNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9QbHVnaW5zL05QUmVtb3RlT2JqZWN0TWFwLmNwcApAQCAtMjAwLDcgKzIwMCw3IEBAIHZvaWQg
TlBSZW1vdGVPYmplY3RNYXA6OnBsdWdpbkRlc3Ryb3llZChQbHVnaW4qIHBsdWdpbikKIAogICAg
IC8vIEdhdGhlciB0aGUgcmVjZWl2ZXJzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHBsdWctaW4uCiAg
ICAgZm9yIChIYXNoTWFwPHVpbnQ2NF90LCBOUE9iamVjdE1lc3NhZ2VSZWNlaXZlcio+Ojpjb25z
dF9pdGVyYXRvciBpdCA9IG1fcmVnaXN0ZXJlZE5QT2JqZWN0cy5iZWdpbigpLCBlbmQgPSBtX3Jl
Z2lzdGVyZWROUE9iamVjdHMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBOUE9i
amVjdE1lc3NhZ2VSZWNlaXZlciogbnBPYmplY3RNZXNzYWdlUmVjZWl2ZXIgPSBpdC0+c2Vjb25k
OworICAgICAgICBOUE9iamVjdE1lc3NhZ2VSZWNlaXZlciogbnBPYmplY3RNZXNzYWdlUmVjZWl2
ZXIgPSBpdC0+dmFsdWU7CiAgICAgICAgIGlmIChucE9iamVjdE1lc3NhZ2VSZWNlaXZlci0+cGx1
Z2luKCkgPT0gcGx1Z2luKQogICAgICAgICAgICAgbWVzc2FnZVJlY2VpdmVycy5hcHBlbmQobnBP
YmplY3RNZXNzYWdlUmVjZWl2ZXIpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9Vc2VyTWVzc2FnZUNvZGVycy5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1VzZXJN
ZXNzYWdlQ29kZXJzLmgKaW5kZXggZWU0YWI2NGZmYTViNjNiOTJjMDk5OTU1NDg1ZjIwZTIxNTU1
ZTZjZi4uMmVjNWJiNGQ1MmIyMDc1MWZkYjU3ZWQ2NjI4MGVhOTA3YmQzOWI1MCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1VzZXJNZXNzYWdlQ29kZXJzLmgKKysrIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL1VzZXJNZXNzYWdlQ29kZXJzLmgKQEAgLTkzLDggKzkzLDggQEAgcHVi
bGljOgogICAgICAgICAgICAgSW1tdXRhYmxlRGljdGlvbmFyeTo6TWFwVHlwZTo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtYXAuYmVnaW4oKTsKICAgICAgICAgICAgIEltbXV0YWJsZURpY3Rpb25hcnk6
Ok1hcFR5cGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC5lbmQoKTsKICAgICAgICAgICAgIGZv
ciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgICAgICBlbmNvZGVyLT5lbmNvZGUo
aXQtPmZpcnN0KTsKLSAgICAgICAgICAgICAgICBlbmNvZGVyLT5lbmNvZGUoT3duZXIoaXQtPnNl
Y29uZC5nZXQoKSkpOworICAgICAgICAgICAgICAgIGVuY29kZXItPmVuY29kZShpdC0+a2V5KTsK
KyAgICAgICAgICAgICAgICBlbmNvZGVyLT5lbmNvZGUoT3duZXIoaXQtPnZhbHVlLmdldCgpKSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByZWZlcmVuY2VzU3RvcmUuY3BwIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByZWZlcmVuY2VzU3RvcmUuY3BwCmluZGV4IDg5NzM0
YmYwZWZiMDgwMzgwZWRjNjQ1ZTNlYzcxZGNkZjM2N2M2ZjkuLjNiYTI3ZWRjMDYwNjc5ZWJkNWRj
ZWUwYTU3ZmZkN2E1YjlkMGI5ZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9X
ZWJQcmVmZXJlbmNlc1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJl
ZmVyZW5jZXNTdG9yZS5jcHAKQEAgLTE1MSw3ICsxNTEsNyBAQCBzdGF0aWMgdHlwZW5hbWUgTWFw
VHlwZTo6TWFwcGVkVHlwZSB2YWx1ZUZvcktleShjb25zdCBNYXBUeXBlJiBtYXAsIGNvbnN0IHR5
cGVuYQogewogICAgIHR5cGVuYW1lIE1hcFR5cGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLmZp
bmQoa2V5KTsKICAgICBpZiAoaXQgIT0gbWFwLmVuZCgpKQotICAgICAgICByZXR1cm4gaXQtPnNl
Y29uZDsKKyAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKIAogICAgIHJldHVybiBkZWZhdWx0VmFs
dWVGb3JLZXk8dHlwZW5hbWUgTWFwVHlwZTo6TWFwcGVkVHlwZT4oa2V5KTsKIH0KQEAgLTE4Nyw3
ICsxODcsNyBAQCBib29sIFdlYlByZWZlcmVuY2VzU3RvcmU6OmdldEJvb2xWYWx1ZUZvcktleShj
b25zdCBTdHJpbmcmIGtleSkgY29uc3QKICAgICAvLyBGSVhNRTogRXh0ZW5kIG92ZXJyaWRpbmcg
dG8gb3RoZXIga2V5IHR5cGVzIHVzZWQgZnJvbSBUZXN0UnVubmVyLgogICAgIEJvb2xPdmVycmlk
ZXNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYm9vbFRlc3RSdW5uZXJPdmVycmlkZXNNYXAoKS5m
aW5kKGtleSk7CiAgICAgaWYgKGl0ICE9IGJvb2xUZXN0UnVubmVyT3ZlcnJpZGVzTWFwKCkuZW5k
KCkpCi0gICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gaXQtPnZhbHVl
OwogICAgIHJldHVybiB2YWx1ZUZvcktleShtX2Jvb2xWYWx1ZXMsIGtleSk7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvV2ViQ29yZUFyZ3VtZW50Q29kZXJzTWFj
Lm1tIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9XZWJDb3JlQXJndW1lbnRDb2RlcnNNYWMu
bW0KaW5kZXggMTk2YWIxMWM3YTc0MzEwN2QzODAwZTFmZjhmYTViZTFmMmIzYjgxOC4uMGY5ZDNk
OGEzYmZiNzM3NDNiMzkzMzUzMzVkYzVmNThjMWQxNDc4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvU2hhcmVkL21hYy9XZWJDb3JlQXJndW1lbnRDb2RlcnNNYWMubW0KKysrIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL21hYy9XZWJDb3JlQXJndW1lbnRDb2RlcnNNYWMubW0KQEAgLTE4Myw3
ICsxODMsNyBAQCBib29sIEFyZ3VtZW50Q29kZXI8UmVzb3VyY2VFcnJvcj46OmRlY29kZShBcmd1
bWVudERlY29kZXIqIGRlY29kZXIsIFJlc291cmNlRXJybwogICAgIEhhc2hNYXA8U3RyaW5nLCBT
dHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHN0cmluZ1VzZXJJbmZvTWFwLmJlZ2luKCk7CiAg
ICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHN0cmluZ1Vz
ZXJJbmZvTWFwLmVuZCgpOwogICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIFt1
c2VySW5mbyBzZXRPYmplY3Q6bnNTdHJpbmcoaXQtPnNlY29uZCkgZm9yS2V5Om5zU3RyaW5nKGl0
LT5maXJzdCldOworICAgICAgICBbdXNlckluZm8gc2V0T2JqZWN0Om5zU3RyaW5nKGl0LT52YWx1
ZSkgZm9yS2V5Om5zU3RyaW5nKGl0LT5rZXkpXTsKIAogICAgIGlmIChjZXJ0aWZpY2F0ZS5jZXJ0
aWZpY2F0ZUNoYWluKCkpCiAgICAgICAgIFt1c2VySW5mbyBzZXRPYmplY3Q6KE5TQXJyYXkgKilj
ZXJ0aWZpY2F0ZS5jZXJ0aWZpY2F0ZUNoYWluKCkgZm9yS2V5OkAiTlNFcnJvclBlZXJDZXJ0aWZp
Y2F0ZUNoYWluS2V5Il07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvQXJn
dW1lbnRDb2RlcnNRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvQXJndW1lbnRDb2Rl
cnNRdC5jcHAKaW5kZXggYzg5YmY0NGYxNzE5MGIwMmM0MTEyYmNiZWQ2ZTBjNDFmYTNjNjc1Zi4u
YTQzOWNhZmYxZTQ4OGUxMDJjNTUwYWQwNGYzNDZkNTk5NmRkMTg5MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvU2hhcmVkL3F0L0FyZ3VtZW50Q29kZXJzUXQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9xdC9Bcmd1bWVudENvZGVyc1F0LmNwcApAQCAtODYsOCArODYsOCBAQCBi
b29sIEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6RHJhZ0RhdGE+OjpkZWNvZGUoQXJndW1lbnREZWNv
ZGVyKiBkZWNvZGVyLCBEcmFnRGF0YQogICAgICAgICBNSU1FRGF0YUhhc2hNYXA6Oml0ZXJhdG9y
IGl0ID0gbWFwLmJlZ2luKCk7CiAgICAgICAgIE1JTUVEYXRhSGFzaE1hcDo6aXRlcmF0b3IgZW5k
ID0gbWFwLmVuZCgpOwogICAgICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAg
ICAgICBRQnl0ZUFycmF5IGJ5dGVzKChjaGFyKilpdC0+c2Vjb25kLmRhdGEoKSwgaXQtPnNlY29u
ZC5zaXplKCkpOwotICAgICAgICAgICAgbWltZURhdGEtPnNldERhdGEoaXQtPmZpcnN0LCBieXRl
cyk7CisgICAgICAgICAgICBRQnl0ZUFycmF5IGJ5dGVzKChjaGFyKilpdC0+dmFsdWUuZGF0YSgp
LCBpdC0+dmFsdWUuc2l6ZSgpKTsKKyAgICAgICAgICAgIG1pbWVEYXRhLT5zZXREYXRhKGl0LT5r
ZXksIGJ5dGVzKTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvU2hhcmVkL3NvdXAvV2ViQ29yZUFyZ3VtZW50Q29kZXJzU291cC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvc291cC9XZWJDb3JlQXJndW1lbnRDb2RlcnNTb3VwLmNwcAppbmRleCBkYmUy
YzUxY2RjZmI3OThhZmFjZDJmZDFkYmZhNDkyYjFhMWVmYjFiLi4zM2Q5YmQzZmYyMGU2MTkwY2Mz
Y2U0ZmY4NTk5MzhiMDM5NGVkNmMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
c291cC9XZWJDb3JlQXJndW1lbnRDb2RlcnNTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvc291cC9XZWJDb3JlQXJndW1lbnRDb2RlcnNTb3VwLmNwcApAQCAtMTQ0LDcgKzE0NCw3
IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxSZXNvdXJjZVJlc3BvbnNlPjo6ZGVjb2RlKEFyZ3VtZW50
RGVjb2RlciogZGVjb2RlciwgUmVzb3VyY2VSCiAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoaGVh
ZGVycykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gaGVhZGVycy5iZWdpbigpLCBlbmQgPSBoZWFkZXJzLmVuZCgpOyBp
dCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHJlc3BvbnNlLnNldEhUVFBIZWFkZXJGaWVsZChpdC0+
Zmlyc3QsIGl0LT5zZWNvbmQpOworICAgICAgICByZXNwb25zZS5zZXRIVFRQSGVhZGVyRmllbGQo
aXQtPmtleSwgaXQtPnZhbHVlKTsKIAogICAgIHVpbnQzMl90IHNvdXBNZXNzYWdlRmxhZ3M7CiAg
ICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoc291cE1lc3NhZ2VGbGFncykpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3QuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0
LmNwcAppbmRleCBmNmJkMGE3NjBlNmZlYWVkZjNmZTAzM2M4MWYzYTFhMDlkMWE4NDVlLi4zMWVm
NWFmYWZlNmQzNTk5NDJkNDJlNWU3ZDVkNGNmMmZlMjI5MTY5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdC5j
cHAKQEAgLTU0LDcgKzU0LDcgQEAgc3RydWN0IF9Fd2tfQmFja19Gb3J3YXJkX0xpc3QgewogICAg
ICAgICBJdGVtc01hcDo6aXRlcmF0b3IgaXQgPSB3cmFwcGVyQ2FjaGUuYmVnaW4oKTsKICAgICAg
ICAgSXRlbXNNYXA6Oml0ZXJhdG9yIGVuZCA9IHdyYXBwZXJDYWNoZS5lbmQoKTsKICAgICAgICAg
Zm9yICg7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIGV3a19iYWNrX2ZvcndhcmRfbGlz
dF9pdGVtX3VucmVmKGl0LT5zZWNvbmQpOworICAgICAgICAgICAgZXdrX2JhY2tfZm9yd2FyZF9s
aXN0X2l0ZW1fdW5yZWYoaXQtPnZhbHVlKTsKICAgICB9CiB9OwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAKaW5kZXggNzE1MDRmNjQxZDIw
NjVkZjJiZjY4OGRhNDVlOTVkNWE1MWRiNThiNC4uY2YyZmNjM2Y5MjE4YWRmMDJjNDQ1YmEzMjUw
ZjJkMGIzZjBiYmRlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX2NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a19jb250ZXh0LmNwcApAQCAtOTcsNyArOTcsNyBAQCBzdHJ1Y3QgX0V3a19Db250ZXh0IHsK
ICAgICAgICAgSGFzaE1hcDx1aW50NjRfdCwgRXdrX0Rvd25sb2FkX0pvYio+OjppdGVyYXRvciBp
dCA9IGRvd25sb2FkSm9icy5iZWdpbigpOwogICAgICAgICBIYXNoTWFwPHVpbnQ2NF90LCBFd2tf
RG93bmxvYWRfSm9iKj46Oml0ZXJhdG9yIGVuZCA9IGRvd25sb2FkSm9icy5lbmQoKTsKICAgICAg
ICAgZm9yICggOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBld2tfZG93bmxvYWRfam9i
X3VucmVmKGl0LT5zZWNvbmQpOworICAgICAgICAgICAgZXdrX2Rvd25sb2FkX2pvYl91bnJlZihp
dC0+dmFsdWUpOwogICAgIH0KIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL2V3a192aWV3LmNwcAppbmRleCBjZTdmN2I0NTQ5NDYzYzEwZmJhY2NiNzU3M2EzYmVhYWRl
MjUzYjBkLi43MTQzODAyNzEwMzdmMGEzZjVlYzNlZjU5YzQ1NzFhM2JkZjA0OTk3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwCkBAIC0zNDQsNyAr
MzQ0LDcgQEAgc3RhdGljIHZvaWQgX2V3a192aWV3X3ByaXZfbG9hZGluZ19yZXNvdXJjZXNfY2xl
YXIoTG9hZGluZ1Jlc291cmNlc01hcCYgbG9hZGluZ1IKICAgICBMb2FkaW5nUmVzb3VyY2VzTWFw
OjppdGVyYXRvciBpdCA9IGxvYWRpbmdSZXNvdXJjZXNNYXAuYmVnaW4oKTsKICAgICBMb2FkaW5n
UmVzb3VyY2VzTWFwOjppdGVyYXRvciBlbmQgPSBsb2FkaW5nUmVzb3VyY2VzTWFwLmVuZCgpOwog
ICAgIGZvciAoIDsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBld2tfd2ViX3Jlc291cmNlX3Vu
cmVmKGl0LT5zZWNvbmQpOworICAgICAgICBld2tfd2ViX3Jlc291cmNlX3VucmVmKGl0LT52YWx1
ZSk7CiAKICAgICBsb2FkaW5nUmVzb3VyY2VzTWFwLmNsZWFyKCk7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCmluZGV4IGVlODZk
NDQ4YTg4MmE4YTY3YjUxY2M2OGNkNDUzYmU1YWFiMDdjYzguLjFmMDFiNDg1NTU1NTdmOWUwZWRk
ZTg0OGJkNDY2YTYxMWJhYmUxYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCkBAIC0yMzAwLDcgKzIzMDAsNyBAQCBHTGlzdCog
d2Via2l0X3dlYl92aWV3X2dldF9zdWJyZXNvdXJjZXMoV2ViS2l0V2ViVmlldyogd2ViVmlldykK
ICAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogcHJpdiA9IHdlYlZpZXctPnByaXY7CiAgICAgUmVz
b3VyY2VzTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBwcml2LT5zdWJyZXNvdXJjZXNNYXAuZW5k
KCk7CiAgICAgZm9yIChSZXNvdXJjZXNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcHJpdi0+c3Vi
cmVzb3VyY2VzTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgc3VicmVzb3Vy
Y2VzID0gZ19saXN0X3ByZXBlbmQoc3VicmVzb3VyY2VzLCBpdC0+c2Vjb25kLmdldCgpKTsKKyAg
ICAgICAgc3VicmVzb3VyY2VzID0gZ19saXN0X3ByZXBlbmQoc3VicmVzb3VyY2VzLCBpdC0+dmFs
dWUuZ2V0KCkpOwogCiAgICAgcmV0dXJuIGdfbGlzdF9yZXZlcnNlKHN1YnJlc291cmNlcyk7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJW
aWV3QmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJW
aWV3QmFzZS5jcHAKaW5kZXggNDkyNWI1YTdjMWNlZTljODRmZTU4NDJiY2QwYzFhOTEyMjZlNTk0
YS4uMTkwOTExNzMxNjdmZjYzYzcwY2RhZjFmYjkwMTRmOWQ2MTMzZjNiNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNw
cApAQCAtMjI0LDcgKzIyNCw3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlQ29udGFp
bmVyRm9yYWxsKEd0a0NvbnRhaW5lciogY29udGFpbmVyLCBnYm9vbGVhbiBpCiAgICAgV2ViS2l0
V2ViVmlld0NoaWxkcmVuTWFwIGNoaWxkcmVuID0gcHJpdi0+Y2hpbGRyZW47CiAgICAgV2ViS2l0
V2ViVmlld0NoaWxkcmVuTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBjaGlsZHJlbi5lbmQoKTsK
ICAgICBmb3IgKFdlYktpdFdlYlZpZXdDaGlsZHJlbk1hcDo6Y29uc3RfaXRlcmF0b3IgY3VycmVu
dCA9IGNoaWxkcmVuLmJlZ2luKCk7IGN1cnJlbnQgIT0gZW5kOyArK2N1cnJlbnQpCi0gICAgICAg
ICgqY2FsbGJhY2spKGN1cnJlbnQtPmZpcnN0LCBjYWxsYmFja0RhdGEpOworICAgICAgICAoKmNh
bGxiYWNrKShjdXJyZW50LT5rZXksIGNhbGxiYWNrRGF0YSk7CiAKICAgICBpZiAoaW5jbHVkZUlu
dGVybmFscyAmJiBwcml2LT5pbnNwZWN0b3JWaWV3KQogICAgICAgICAoKmNhbGxiYWNrKShwcml2
LT5pbnNwZWN0b3JWaWV3LCBjYWxsYmFja0RhdGEpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tQcmludGluZ1ZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL21hYy9XS1ByaW50aW5nVmlldy5tbQppbmRleCA2M2M1ODg5NWY3MTI5M2Ix
YjU0NThkOWViNjg0MWQwYTA2NDgxNDlkLi5jYTFjYWQ1ODI1OTlmZDBjNjBiMjUyNGM2YmM3NzI3
NjlkMmZkMzlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9X
S1ByaW50aW5nVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9X
S1ByaW50aW5nVmlldy5tbQpAQCAtMTk0LDggKzE5NCw4IEBAIHN0YXRpYyBCT09MIGlzRm9yY2lu
Z1ByZXZpZXdVcGRhdGU7CiAtICh1aW50NjRfdClfZXhwZWN0ZWRQcmV2aWV3Q2FsbGJhY2tGb3JS
ZWN0Oihjb25zdCBJbnRSZWN0JilyZWN0CiB7CiAgICAgZm9yIChIYXNoTWFwPHVpbnQ2NF90LCBX
ZWJDb3JlOjpJbnRSZWN0Pjo6aXRlcmF0b3IgaXRlciA9IF9leHBlY3RlZFByZXZpZXdDYWxsYmFj
a3MuYmVnaW4oKTsgaXRlciAhPSBfZXhwZWN0ZWRQcmV2aWV3Q2FsbGJhY2tzLmVuZCgpOyArK2l0
ZXIpIHsKLSAgICAgICAgaWYgKGl0ZXItPnNlY29uZCAgPT0gcmVjdCkKLSAgICAgICAgICAgIHJl
dHVybiBpdGVyLT5maXJzdDsKKyAgICAgICAgaWYgKGl0ZXItPnZhbHVlICA9PSByZWN0KQorICAg
ICAgICAgICAgcmV0dXJuIGl0ZXItPmtleTsKICAgICB9CiAgICAgcmV0dXJuIDA7CiB9CkBAIC0y
MjksOCArMjI5LDggQEAgc3RhdGljIHZvaWQgcGFnZURpZERyYXdUb1BERihXS0RhdGFSZWYgZGF0
YVJlZiwgV0tFcnJvclJlZiwgdm9pZCogdW50eXBlZENvbnRleHQKICAgICAgICAgICAgIEFTU0VS
VChbdmlldyBfaXNQcmludGluZ1ByZXZpZXddKTsKIAogICAgICAgICAgICAgaWYgKGRhdGEpIHsK
LSAgICAgICAgICAgICAgICBIYXNoTWFwPFdlYkNvcmU6OkludFJlY3QsIFZlY3Rvcjx1aW50OF90
PiA+OjpBZGRSZXN1bHQgZW50cnkgPSB2aWV3LT5fcGFnZVByZXZpZXdzLmFkZChpdGVyLT5zZWNv
bmQsIFZlY3Rvcjx1aW50OF90PigpKTsKLSAgICAgICAgICAgICAgICBlbnRyeS5pdGVyYXRvci0+
c2Vjb25kLmFwcGVuZChkYXRhLT5ieXRlcygpLCBkYXRhLT5zaXplKCkpOworICAgICAgICAgICAg
ICAgIEhhc2hNYXA8V2ViQ29yZTo6SW50UmVjdCwgVmVjdG9yPHVpbnQ4X3Q+ID46OkFkZFJlc3Vs
dCBlbnRyeSA9IHZpZXctPl9wYWdlUHJldmlld3MuYWRkKGl0ZXItPnZhbHVlLCBWZWN0b3I8dWlu
dDhfdD4oKSk7CisgICAgICAgICAgICAgICAgZW50cnkuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChk
YXRhLT5ieXRlcygpLCBkYXRhLT5zaXplKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
dmlldy0+X2V4cGVjdGVkUHJldmlld0NhbGxiYWNrcy5yZW1vdmUoY29udGV4dC0+Y2FsbGJhY2tJ
RCk7CiAgICAgICAgICAgICBib29sIHJlY2VpdmVkUmVzcG9uc2VUb0xhdGVzdFJlcXVlc3QgPSB2
aWV3LT5fbGF0ZXN0RXhwZWN0ZWRQcmV2aWV3Q2FsbGJhY2sgPT0gY29udGV4dC0+Y2FsbGJhY2tJ
RDsKQEAgLTQ5NCw3ICs0OTQsNyBAQCBzdGF0aWMgdm9pZCBwcmVwYXJlRGF0YUZvclByaW50aW5n
T25TZWNvbmRhcnlUaHJlYWQodm9pZCogdW50eXBlZENvbnRleHQpCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBjb25zdCBWZWN0b3I8dWludDhfdD4mIHBkZkRhdGFCeXRlcyA9IHBhZ2VQ
cmV2aWV3SXRlcmF0b3ItPnNlY29uZDsKKyAgICBjb25zdCBWZWN0b3I8dWludDhfdD4mIHBkZkRh
dGFCeXRlcyA9IHBhZ2VQcmV2aWV3SXRlcmF0b3ItPnZhbHVlOwogICAgIFJldGFpblB0cjxOU0Rh
dGE+IHBkZkRhdGEoQWRvcHROUywgW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6cGRmRGF0
YUJ5dGVzLmRhdGEoKSBsZW5ndGg6cGRmRGF0YUJ5dGVzLnNpemUoKV0pOwogICAgIFJldGFpblB0
cjxQREZEb2N1bWVudD4gcGRmRG9jdW1lbnQoQWRvcHROUywgW1twZGZEb2N1bWVudENsYXNzKCkg
YWxsb2NdIGluaXRXaXRoRGF0YTpwZGZEYXRhLmdldCgpXSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQppbmRleCBlYjZiODE5YzVkNDA1NjM5ODE1ZWU3YjE4
OTU2ZWM3MTA4YTVkYTdmLi4xOTNhMWQwNTJjZTI5YzMxMWU0ODBkYTNmODU1NWI5M2QxMjA4NTRl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0K
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCkBAIC00MjMs
NyArNDIzLDcgQEAgc3RhdGljIFN0cmluZyBjb21tYW5kTmFtZUZvclNlbGVjdG9yKFNFTCBzZWxl
Y3RvcikKICAgICBzdGF0aWMgY29uc3QgU2VsZWN0b3JOYW1lTWFwKiBleGNlcHRpb25NYXAgPSBj
cmVhdGVTZWxlY3RvckV4Y2VwdGlvbk1hcCgpOwogICAgIFNlbGVjdG9yTmFtZU1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBleGNlcHRpb25NYXAtPmZpbmQoc2VsZWN0b3IpOwogICAgIGlmIChpdCAh
PSBleGNlcHRpb25NYXAtPmVuZCgpKQotICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICAg
ICAgcmV0dXJuIGl0LT52YWx1ZTsKICAgICAKICAgICAvLyBSZW1vdmUgdGhlIHRyYWlsaW5nIGNv
bG9uLgogICAgIC8vIE5vIG5lZWQgdG8gY2FwaXRhbGl6ZSB0aGUgY29tbWFuZCBuYW1lIHNpbmNl
IEVkaXRvciBjb21tYW5kIG5hbWVzIGFyZQpAQCAtNzM3LDcgKzczNyw3IEBAIHN0YXRpYyB2b2lk
IHZhbGlkYXRlQ29tbWFuZENhbGxiYWNrKFdLU3RyaW5nUmVmIGNvbW1hbmROYW1lLCBib29sIGlz
RW5hYmxlZCwgaW50CiAKICAgICAvLyBBZGQgdGhpcyBpdGVtIHRvIHRoZSB2ZWN0b3Igb2YgaXRl
bXMgZm9yIGEgZ2l2ZW4gY29tbWFuZCB0aGF0IGFyZSBhd2FpdGluZyB2YWxpZGF0aW9uLgogICAg
IFZhbGlkYXRpb25NYXA6OkFkZFJlc3VsdCBhZGRSZXN1bHQgPSBfZGF0YS0+X3ZhbGlkYXRpb25N
YXAuYWRkKGNvbW1hbmROYW1lLCBWYWxpZGF0aW9uVmVjdG9yKCkpOwotICAgIGFkZFJlc3VsdC5p
dGVyYXRvci0+c2Vjb25kLmFwcGVuZChpdGVtKTsKKyAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZh
bHVlLmFwcGVuZChpdGVtKTsKICAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKICAgICAg
ICAgLy8gSWYgd2UgYXJlIG5vdCBhbHJlYWR5IGF3YWl0aW5nIHZhbGlkYXRpb24gZm9yIHRoaXMg
Y29tbWFuZCwgc3RhcnQgdGhlIGFzeW5jaHJvbm91cyB2YWxpZGF0aW9uIHByb2Nlc3MuCiAgICAg
ICAgIC8vIEZJWE1FOiBUaGVvcmV0aWNhbGx5LCB0aGVyZSBpcyBhIHJhY2UgaGVyZTsgd2hlbiB3
ZSBnZXQgdGhlIGFuc3dlciBpdCBtaWdodCBiZSBvbGQsIGZyb20gYSBwcmV2aW91cyB0aW1lCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9D
b29yZGluYXRlZEJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29v
cmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5jcHAKaW5kZXggODRmNmVi
ZDJmMTY1OGU2OTk2NWU0NzFiYTM2MjVhOTIyODlmYWE3Mi4uNzdmZGMwYTI2Zjg4ZDQzMDdhN2I2
MDA3ZGFiZDUzZjI5MDZkNTQ3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQmFj
a2luZ1N0b3JlLmNwcApAQCAtODAsMTUgKzgwLDE1IEBAIHZvaWQgQ29vcmRpbmF0ZWRCYWNraW5n
U3RvcmU6OnVwZGF0ZVRpbGUoaW50IGlkLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25z
CiB7CiAgICAgSGFzaE1hcDxpbnQsIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZT46Oml0ZXJh
dG9yIGl0ID0gbV90aWxlcy5maW5kKGlkKTsKICAgICBBU1NFUlQoaXQgIT0gbV90aWxlcy5lbmQo
KSk7Ci0gICAgaXQtPnNlY29uZC5pbmNyZW1lbnRSZXBhaW50Q291bnQoKTsKLSAgICBpdC0+c2Vj
b25kLnNldEJhY2tCdWZmZXIodGFyZ2V0UmVjdCwgc291cmNlUmVjdCwgYmFja0J1ZmZlciwgb2Zm
c2V0KTsKKyAgICBpdC0+dmFsdWUuaW5jcmVtZW50UmVwYWludENvdW50KCk7CisgICAgaXQtPnZh
bHVlLnNldEJhY2tCdWZmZXIodGFyZ2V0UmVjdCwgc291cmNlUmVjdCwgYmFja0J1ZmZlciwgb2Zm
c2V0KTsKIH0KIAogUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBDb29yZGluYXRlZEJhY2tpbmdT
dG9yZTo6dGV4dHVyZSgpIGNvbnN0CiB7CiAgICAgSGFzaE1hcDxpbnQsIENvb3JkaW5hdGVkQmFj
a2luZ1N0b3JlVGlsZT46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fdGlsZXMuZW5kKCk7CiAgICAg
Zm9yIChIYXNoTWFwPGludCwgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlPjo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBS
ZWZQdHI8Qml0bWFwVGV4dHVyZT4gdGV4dHVyZSA9IGl0LT5zZWNvbmQudGV4dHVyZSgpOworICAg
ICAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gdGV4dHVyZSA9IGl0LT52YWx1ZS50ZXh0dXJlKCk7
CiAgICAgICAgIGlmICh0ZXh0dXJlKQogICAgICAgICAgICAgcmV0dXJuIHRleHR1cmU7CiAgICAg
fQpAQCAtMTEyLDcgKzExMiw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OnBhaW50
VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsCiAgICAgSGFzaE1h
cDxpbnQsIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZT46Oml0ZXJhdG9yIGVuZCA9IG1fdGls
ZXMuZW5kKCk7CiAgICAgRmxvYXRSZWN0IGNvdmVyZWRSZWN0OwogICAgIGZvciAoSGFzaE1hcDxp
bnQsIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZT46Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgQ29vcmRpbmF0ZWRCYWNraW5nU3Rv
cmVUaWxlJiB0aWxlID0gaXQtPnNlY29uZDsKKyAgICAgICAgQ29vcmRpbmF0ZWRCYWNraW5nU3Rv
cmVUaWxlJiB0aWxlID0gaXQtPnZhbHVlOwogICAgICAgICBpZiAoIXRpbGUudGV4dHVyZSgpKQog
ICAgICAgICAgICAgY29udGludWU7CiAKQEAgLTE1Niw3ICsxNTYsNyBAQCB2b2lkIENvb3JkaW5h
dGVkQmFja2luZ1N0b3JlOjpjb21taXRUaWxlT3BlcmF0aW9ucyhUZXh0dXJlTWFwcGVyKiB0ZXh0
dXJlTWFwcGVyKQogCiAgICAgSGFzaE1hcDxpbnQsIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGls
ZT46Oml0ZXJhdG9yIHRpbGVzRW5kID0gbV90aWxlcy5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8
aW50LCBDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGU+OjppdGVyYXRvciBpdCA9IG1fdGlsZXMu
YmVnaW4oKTsgaXQgIT0gdGlsZXNFbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQuc3dhcEJ1
ZmZlcnModGV4dHVyZU1hcHBlcik7CisgICAgICAgIGl0LT52YWx1ZS5zd2FwQnVmZmVycyh0ZXh0
dXJlTWFwcGVyKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGlu
YXRvclByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBo
aWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwCmluZGV4IDZiMGRlN2YyNTRiMTgwM2Qw
MzY5YTZjZjRmODgzOTg5YjgzODkxYzAuLmZjYzFmNjc1NjViNjhhOGEwNzg4YTAxYTRkMzhhOTg3
OWY3NjQxOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRl
ZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJv
eHkuY3BwCkBAIC03Myw3ICs3Myw3IEBAIHZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6
dXBkYXRlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zCiAgICAgICAg
ICAgICBzdXJmYWNlID0gU2hhcmVhYmxlU3VyZmFjZTo6Y3JlYXRlKHVwZGF0ZUluZm8uc3VyZmFj
ZUhhbmRsZSk7CiAgICAgICAgICAgICBtX3N1cmZhY2VzLmFkZCh0b2tlbiwgc3VyZmFjZSk7CiAg
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgc3VyZmFjZSA9IGl0LT5zZWNvbmQ7CisgICAgICAg
ICAgICBzdXJmYWNlID0gaXQtPnZhbHVlOwogICAgIH0gZWxzZQogICAgICAgICBzdXJmYWNlID0g
U2hhcmVhYmxlU3VyZmFjZTo6Y3JlYXRlKHVwZGF0ZUluZm8uc3VyZmFjZUhhbmRsZSk7CiAjZWxz
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvTGF5ZXJUcmVlUmVuZGVyZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuY3BwCmluZGV4IDQ4MWI5Zjc0Yjg5ODYx
MTk0NmNiNjg3NGRkYmFlMjk1MjIwNzlkYmIuLjVlMGNlMmY4ZDE1MTM1ODY2YjJmY2Q3YmRmOWU0
YTdjNzhlODVmMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGlu
YXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVSZW5kZXJlci5jcHAKQEAgLTE4
Myw3ICsxODMsNyBAQCB2b2lkIExheWVyVHJlZVJlbmRlcmVyOjphZGp1c3RQb3NpdGlvbkZvckZp
eGVkTGF5ZXJzKCkKIAogICAgIExheWVyTWFwOjppdGVyYXRvciBlbmQgPSBtX2ZpeGVkTGF5ZXJz
LmVuZCgpOwogICAgIGZvciAoTGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9maXhlZExheWVycy5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHRvVGV4dHVyZU1hcHBlckxheWVyKGl0
LT5zZWNvbmQpLT5zZXRTY3JvbGxQb3NpdGlvbkRlbHRhSWZOZWVkZWQoZGVsdGEpOworICAgICAg
ICB0b1RleHR1cmVNYXBwZXJMYXllcihpdC0+dmFsdWUpLT5zZXRTY3JvbGxQb3NpdGlvbkRlbHRh
SWZOZWVkZWQoZGVsdGEpOwogfQogCiB2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpkaWRDaGFuZ2VT
Y3JvbGxQb3NpdGlvbihjb25zdCBJbnRQb2ludCYgcG9zaXRpb24pCkBAIC0yMDYsNyArMjA2LDcg
QEAgdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6c3luY0NhbnZhcyhXZWJMYXllcklEIGlkLCBjb25z
dCBXZWJDb3JlOjpJbnRTaXplJiBjYW52YXMKICAgICAgICAgY2FudmFzQmFja2luZ1N0b3JlID0g
VGV4dHVyZU1hcHBlclN1cmZhY2VCYWNraW5nU3RvcmU6OmNyZWF0ZSgpOwogICAgICAgICBtX3N1
cmZhY2VCYWNraW5nU3RvcmVzLnNldChpZCwgY2FudmFzQmFja2luZ1N0b3JlKTsKICAgICB9IGVs
c2UKLSAgICAgICAgY2FudmFzQmFja2luZ1N0b3JlID0gaXQtPnNlY29uZDsKKyAgICAgICAgY2Fu
dmFzQmFja2luZ1N0b3JlID0gaXQtPnZhbHVlOwogCiAgICAgY2FudmFzQmFja2luZ1N0b3JlLT5z
ZXRHcmFwaGljc1N1cmZhY2UoZ3JhcGhpY3NTdXJmYWNlVG9rZW4sIGNhbnZhc1NpemUsIGZyb250
QnVmZmVyKTsKICAgICBsYXllci0+c2V0Q29udGVudHNUb01lZGlhKGNhbnZhc0JhY2tpbmdTdG9y
ZS5nZXQoKSk7CkBAIC0yMTcsNyArMjE3LDcgQEAgdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6c2V0
TGF5ZXJDaGlsZHJlbihXZWJMYXllcklEIGlkLCBjb25zdCBWZWN0b3I8V2ViTGF5ZXJJRD4KIHsK
ICAgICBlbnN1cmVMYXllcihpZCk7CiAgICAgTGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9sYXll
cnMuZmluZChpZCk7Ci0gICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBpdC0+c2Vjb25kOworICAg
IEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gaXQtPnZhbHVlOwogICAgIFZlY3RvcjxHcmFwaGljc0xh
eWVyKj4gY2hpbGRyZW47CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkSURzLnNp
emUoKTsgKytpKSB7CkBAIC0yMzksNyArMjM5LDcgQEAgdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6
c2V0TGF5ZXJGaWx0ZXJzKFdlYkxheWVySUQgaWQsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGYK
ICAgICBMYXllck1hcDo6aXRlcmF0b3IgaXQgPSBtX2xheWVycy5maW5kKGlkKTsKICAgICBBU1NF
UlQoaXQgIT0gbV9sYXllcnMuZW5kKCkpOwogCi0gICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBp
dC0+c2Vjb25kOworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gaXQtPnZhbHVlOwogICAgIGxh
eWVyLT5zZXRGaWx0ZXJzKGZpbHRlcnMpOwogfQogI2VuZGlmCkBAIC0yNTAsNyArMjUwLDcgQEAg
dm9pZCBMYXllclRyZWVSZW5kZXJlcjo6c2V0TGF5ZXJTdGF0ZShXZWJMYXllcklEIGlkLCBjb25z
dCBXZWJMYXllckluZm8mIGxheWVySW4KICAgICBMYXllck1hcDo6aXRlcmF0b3IgaXQgPSBtX2xh
eWVycy5maW5kKGlkKTsKICAgICBBU1NFUlQoaXQgIT0gbV9sYXllcnMuZW5kKCkpOwogCi0gICAg
R3JhcGhpY3NMYXllciogbGF5ZXIgPSBpdC0+c2Vjb25kOworICAgIEdyYXBoaWNzTGF5ZXIqIGxh
eWVyID0gaXQtPnZhbHVlOwogCiAgICAgbGF5ZXItPnNldFJlcGxpY2F0ZWRCeUxheWVyKGxheWVy
QnlJRChsYXllckluZm8ucmVwbGljYSkpOwogICAgIGxheWVyLT5zZXRNYXNrTGF5ZXIobGF5ZXJC
eUlEKGxheWVySW5mby5tYXNrKSk7CkBAIC0zNzcsNyArMzc3LDcgQEAgdm9pZCBMYXllclRyZWVS
ZW5kZXJlcjo6YXNzaWduSW1hZ2VUb0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBpbnQ2NF90
IGltYWdlSUQKIAogICAgIEhhc2hNYXA8aW50NjRfdCwgUmVmUHRyPFRleHR1cmVNYXBwZXJCYWNr
aW5nU3RvcmU+ID46Oml0ZXJhdG9yIGl0ID0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuZmlu
ZChpbWFnZUlEKTsKICAgICBBU1NFUlQoaXQgIT0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMu
ZW5kKCkpOwotICAgIGxheWVyLT5zZXRDb250ZW50c1RvTWVkaWEoaXQtPnNlY29uZC5nZXQoKSk7
CisgICAgbGF5ZXItPnNldENvbnRlbnRzVG9NZWRpYShpdC0+dmFsdWUuZ2V0KCkpOwogfQogCiB2
b2lkIExheWVyVHJlZVJlbmRlcmVyOjpjb21taXRUaWxlT3BlcmF0aW9ucygpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1h
bmFnZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvR2VvbG9jYXRpb25QZXJt
aXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5jcHAKaW5kZXggNzFiZWFmNWE1YzMxZDQ1NWNhOGQy
YjFhMjg4MWNhMmE3MjcxNDdiMi4uMGQ0MTYzNTU0NjVmZjkwZGE2YmNmMDhlYzM1Yjg0YzE3MWE1
Mzk5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0dlb2xvY2F0aW9uUGVy
bWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9HZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcApAQCAtNDIs
NyArNDIsNyBAQCB2b2lkIEdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHk6
OmludmFsaWRhdGVSZXF1ZXN0cygpCiAgICAgUGVuZGluZ1JlcXVlc3RNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV9wZW5kaW5nUmVxdWVzdHMuYmVnaW4oKTsKICAgICBQZW5kaW5nUmVxdWVzdE1h
cDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wZW5kaW5nUmVxdWVzdHMuZW5kKCk7CiAgICAgZm9y
ICg7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+aW52YWxpZGF0ZSgpOwor
ICAgICAgICBpdC0+dmFsdWUtPmludmFsaWRhdGUoKTsKIAogICAgIG1fcGVuZGluZ1JlcXVlc3Rz
LmNsZWFyKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvSW5zcGVj
dG9yU2VydmVyL1dlYkluc3BlY3RvclNlcnZlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvSW5zcGVjdG9yU2VydmVyL1dlYkluc3BlY3RvclNlcnZlci5jcHAKaW5kZXggZWNiMTcxYmI0
NzJiNmJhZWYzZWZjMjkyN2Y3MThhNjFhZjQ0Y2UwYy4uM2E5ZTIzZWVkZjk3YjY0ZGI4MTZlM2Fi
YmRiYzI5ZDZiYjg3ZjJiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0lu
c3BlY3RvclNlcnZlci9XZWJJbnNwZWN0b3JTZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvV2ViSW5zcGVjdG9yU2VydmVyLmNwcApAQCAtNjcs
NyArNjcsNyBAQCBXZWJJbnNwZWN0b3JTZXJ2ZXI6On5XZWJJbnNwZWN0b3JTZXJ2ZXIoKQogICAg
IC8vIENsb3NlIGFueSByZW1haW5pbmcgb3BlbiBjb25uZWN0aW9ucy4KICAgICBIYXNoTWFwPHVu
c2lnbmVkLCBXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uKj46Oml0ZXJhdG9yIGVuZCA9IG1fY29u
bmVjdGlvbk1hcC5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8dW5zaWduZWQsIFdlYlNvY2tldFNl
cnZlckNvbm5lY3Rpb24qPjo6aXRlcmF0b3IgaXQgPSBtX2Nvbm5lY3Rpb25NYXAuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24qIGNv
bm5lY3Rpb24gPSBpdC0+c2Vjb25kOworICAgICAgICBXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9u
KiBjb25uZWN0aW9uID0gaXQtPnZhbHVlOwogICAgICAgICBXZWJJbnNwZWN0b3JQcm94eSogY2xp
ZW50ID0gbV9jbGllbnRNYXAuZ2V0KGNvbm5lY3Rpb24tPmlkZW50aWZpZXIoKSk7CiAgICAgICAg
IGNsb3NlQ29ubmVjdGlvbihjbGllbnQsIGNvbm5lY3Rpb24pOwogICAgIH0KQEAgLTc4LDcgKzc4
LDcgQEAgaW50IFdlYkluc3BlY3RvclNlcnZlcjo6cmVnaXN0ZXJQYWdlKFdlYkluc3BlY3RvclBy
b3h5KiBjbGllbnQpCiAjaWZuZGVmIEFTU0VSVF9ESVNBQkxFRAogICAgIENsaWVudE1hcDo6aXRl
cmF0b3IgZW5kID0gbV9jbGllbnRNYXAuZW5kKCk7CiAgICAgZm9yIChDbGllbnRNYXA6Oml0ZXJh
dG9yIGl0ID0gbV9jbGllbnRNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBB
U1NFUlQoaXQtPnNlY29uZCAhPSBjbGllbnQpOworICAgICAgICBBU1NFUlQoaXQtPnZhbHVlICE9
IGNsaWVudCk7CiAjZW5kaWYKIAogICAgIGludCBwYWdlSWQgPSBtX25leHRBdmFpbGFibGVQYWdl
SWQrKzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2
ZXIvV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvSW5zcGVjdG9yU2VydmVyL1dlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24uY3BwCmluZGV4IDU3
MjA2ZWI3YmI1MmE4ZDhhODQ4ZGY1OTY3YTEwYzRiNzBlMDc3YTUuLmJlZGE1M2RiN2M0YTY1MzY2
NThmYmRiZTg5YWUwOGJjZWNlNTAwZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbi5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9XZWJTb2NrZXRTZXJ2ZXJD
b25uZWN0aW9uLmNwcApAQCAtMTA2LDkgKzEwNiw5IEBAIHZvaWQgV2ViU29ja2V0U2VydmVyQ29u
bmVjdGlvbjo6c2VuZEhUVFBSZXNwb25zZUhlYWRlcihpbnQgc3RhdHVzQ29kZSwgY29uc3QgU3Ry
CiAgICAgYnVpbGRlci5hcHBlbmQoIlxyXG4iKTsKICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9p
dGVyYXRvciBlbmQgPSBoZWFkZXJGaWVsZHMuZW5kKCk7CiAgICAgZm9yIChIVFRQSGVhZGVyTWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IGhlYWRlckZpZWxkcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgYnVpbGRl
ci5hcHBlbmQoaXQtPmtleSk7CiAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCI6ICIpOwotICAgICAg
ICBidWlsZGVyLmFwcGVuZChpdC0+c2Vjb25kICsgIlxyXG4iKTsKKyAgICAgICAgYnVpbGRlci5h
cHBlbmQoaXQtPnZhbHVlICsgIlxyXG4iKTsKICAgICB9CiAgICAgYnVpbGRlci5hcHBlbmQoIlxy
XG4iKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0luc3BlY3RvclNl
cnZlci9xdC9XZWJJbnNwZWN0b3JTZXJ2ZXJRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvSW5zcGVjdG9yU2VydmVyL3F0L1dlYkluc3BlY3RvclNlcnZlclF0LmNwcAppbmRleCA4ZGUw
ZjkzMmRiMjYwM2FlODk4OGRlYmIzMDI3MTI2MGMwYzZhYzU2Li5hOTNlYTkxNjJiYzljYWY0MTAx
ZmUzM2QxMWU2MTBiMGMyZDVlZjg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvSW5zcGVjdG9yU2VydmVyL3F0L1dlYkluc3BlY3RvclNlcnZlclF0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL3F0L1dlYkluc3BlY3RvclNlcnZl
clF0LmNwcApAQCAtODMsMTYgKzgzLDE2IEBAIHZvaWQgV2ViSW5zcGVjdG9yU2VydmVyOjpidWls
ZFBhZ2VMaXN0KFZlY3RvcjxjaGFyPiYgZGF0YSwgU3RyaW5nJiBjb250ZW50VHlwZSkKICAgICBi
dWlsZGVyLmFwcGVuZCgiWyAiKTsKICAgICBDbGllbnRNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fY2xp
ZW50TWFwLmVuZCgpOwogICAgIGZvciAoQ2xpZW50TWFwOjppdGVyYXRvciBpdCA9IG1fY2xpZW50
TWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBXZWJQYWdlUHJveHkqIHdl
YlBhZ2UgPSBpdC0+c2Vjb25kLT5wYWdlKCk7CisgICAgICAgIFdlYlBhZ2VQcm94eSogd2ViUGFn
ZSA9IGl0LT52YWx1ZS0+cGFnZSgpOwogICAgICAgICBpZiAoaXQgIT0gbV9jbGllbnRNYXAuYmVn
aW4oKSkKICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIsICIpOwotICAgICAgICBidWlsZGVy
LmFwcGVuZCgieyBcImlkXCI6ICIgKyBTdHJpbmc6Om51bWJlcihpdC0+Zmlyc3QpKTsKKyAgICAg
ICAgYnVpbGRlci5hcHBlbmQoInsgXCJpZFwiOiAiICsgU3RyaW5nOjpudW1iZXIoaXQtPmtleSkp
OwogICAgICAgICBidWlsZGVyLmFwcGVuZCgiLCBcInRpdGxlXCI6IFwiIik7CiAgICAgICAgIGJ1
aWxkZXIuYXBwZW5kKHdlYlBhZ2UtPnBhZ2VUaXRsZSgpKTsKICAgICAgICAgYnVpbGRlci5hcHBl
bmQoIlwiLCBcInVybFwiOiBcIiIpOwogICAgICAgICBidWlsZGVyLmFwcGVuZCh3ZWJQYWdlLT5h
Y3RpdmVVUkwoKSk7CiAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCJcIiwgXCJpbnNwZWN0b3JVcmxc
IjogXCIiKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQocmVtb3RlSW5zcGVjdG9yUGFnZVBhdGgo
KSArIFN0cmluZzo6bnVtYmVyKGl0LT5maXJzdCkpOworICAgICAgICBidWlsZGVyLmFwcGVuZChy
ZW1vdGVJbnNwZWN0b3JQYWdlUGF0aCgpICsgU3RyaW5nOjpudW1iZXIoaXQtPmtleSkpOwogICAg
ICAgICBidWlsZGVyLmFwcGVuZCgiXCIgfSIpOwogICAgIH0KICAgICBidWlsZGVyLmFwcGVuZCgi
IF0iKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Ob3RpZmljYXRpb25z
L05vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9Ob3RpZmljYXRpb25zL05vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1
ZXN0TWFuYWdlclByb3h5LmNwcAppbmRleCAwNzkyMjk4NWU0NTY1ZjNjNzNjYWRjM2EwY2Y0NTUy
MTdjNjE5OTY5Li40YTBjNDc1MjkzN2I4NzJkNWRlMjY5YzkxNjk0ZTIyMThkMzIwZTFkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTm90aWZpY2F0aW9ucy9Ob3RpZmljYXRp
b25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL05vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5h
Z2VyUHJveHkuY3BwCkBAIC00Myw3ICs0Myw3IEBAIHZvaWQgTm90aWZpY2F0aW9uUGVybWlzc2lv
blJlcXVlc3RNYW5hZ2VyUHJveHk6OmludmFsaWRhdGVSZXF1ZXN0cygpCiAgICAgUGVuZGluZ1Jl
cXVlc3RNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wZW5kaW5nUmVxdWVzdHMuYmVnaW4oKTsK
ICAgICBQZW5kaW5nUmVxdWVzdE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wZW5kaW5nUmVx
dWVzdHMuZW5kKCk7CiAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNl
Y29uZC0+aW52YWxpZGF0ZSgpOworICAgICAgICBpdC0+dmFsdWUtPmludmFsaWRhdGUoKTsKICAg
ICAKICAgICBtX3BlbmRpbmdSZXF1ZXN0cy5jbGVhcigpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc1Byb3h5LmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NQcm94eS5jcHAKaW5kZXgg
MTJhYmY2ZGMyZTRmMmEwY2ExNjJiNGYxOWIzMmVhMDU2ZmFlODIyZi4uNDlkZGFjOGU1MTFmNjhi
OTliZWI4NDA5NmIzNDQ3Y2IzNzVlOWY1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc1Byb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzUHJveHkuY3BwCkBAIC0xNDksMTAgKzE0
OSwxMCBAQCB2b2lkIFBsdWdpblByb2Nlc3NQcm94eTo6cGx1Z2luUHJvY2Vzc0NyYXNoZWRPckZh
aWxlZFRvTGF1bmNoKCkKICAgICB9CiAKICAgICB3aGlsZSAoIW1fcGVuZGluZ0dldFNpdGVzUmVw
bGllcy5pc0VtcHR5KCkpCi0gICAgICAgIGRpZEdldFNpdGVzV2l0aERhdGEoVmVjdG9yPFN0cmlu
Zz4oKSwgbV9wZW5kaW5nR2V0U2l0ZXNSZXBsaWVzLmJlZ2luKCktPmZpcnN0KTsKKyAgICAgICAg
ZGlkR2V0U2l0ZXNXaXRoRGF0YShWZWN0b3I8U3RyaW5nPigpLCBtX3BlbmRpbmdHZXRTaXRlc1Jl
cGxpZXMuYmVnaW4oKS0+a2V5KTsKIAogICAgIHdoaWxlICghbV9wZW5kaW5nQ2xlYXJTaXRlRGF0
YVJlcGxpZXMuaXNFbXB0eSgpKQotICAgICAgICBkaWRDbGVhclNpdGVEYXRhKG1fcGVuZGluZ0Ns
ZWFyU2l0ZURhdGFSZXBsaWVzLmJlZ2luKCktPmZpcnN0KTsKKyAgICAgICAgZGlkQ2xlYXJTaXRl
RGF0YShtX3BlbmRpbmdDbGVhclNpdGVEYXRhUmVwbGllcy5iZWdpbigpLT5rZXkpOwogCiAgICAg
Ly8gVGVsbCB0aGUgcGx1Zy1pbiBwcm9jZXNzIG1hbmFnZXIgdG8gZm9yZ2V0IGFib3V0IHRoaXMg
cGx1Zy1pbiBwcm9jZXNzIHByb3h5LiBUaGlzIG1heSBjYXVzZSB1cyB0byBiZSBkZWxldGVkLgog
ICAgIG1fcGx1Z2luUHJvY2Vzc01hbmFnZXItPnJlbW92ZVBsdWdpblByb2Nlc3NQcm94eSh0aGlz
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmNwcAppbmRleCAxYjUzYjA0ODYy
ZjRkODQ1MjcyYTkzZjM4OWJiYzJhZTAzMGVhNmRhLi45NDUxMTkxMzNmY2UyYThhZTk5MzI4OGU5
NjE4NjkwZmI1ODk2MWRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
Q29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHQuY3Bw
CkBAIC05MDYsNyArOTA2LDcgQEAgc3RhdGljIFBhc3NSZWZQdHI8TXV0YWJsZURpY3Rpb25hcnk+
IGNyZWF0ZURpY3Rpb25hcnlGcm9tSGFzaE1hcChjb25zdCBIYXNoTWFwPFMKICAgICBSZWZQdHI8
TXV0YWJsZURpY3Rpb25hcnk+IHJlc3VsdCA9IE11dGFibGVEaWN0aW9uYXJ5OjpjcmVhdGUoKTsK
ICAgICBIYXNoTWFwPFN0cmluZywgdWludDY0X3Q+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAu
ZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPFN0cmluZywgdWludDY0X3Q+Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IG1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHJlc3VsdC0+c2V0
KGl0LT5maXJzdCwgUmVmUHRyPFdlYlVJbnQ2ND4oV2ViVUludDY0OjpjcmVhdGUoaXQtPnNlY29u
ZCkpLmdldCgpKTsKKyAgICAgICAgcmVzdWx0LT5zZXQoaXQtPmtleSwgUmVmUHRyPFdlYlVJbnQ2
ND4oV2ViVUludDY0OjpjcmVhdGUoaXQtPnZhbHVlKSkuZ2V0KCkpOwogICAgIAogICAgIHJldHVy
biByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViSWNv
bkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJY29uRGF0YWJhc2Uu
Y3BwCmluZGV4IGMwYzcwNjE3YmUyN2FkNGQyMGM0MjBmMWRlNDM2OTE4M2Q1MjkzMjMuLmQyYTEw
NmZlMDZlY2MyOTFlNGZkODVlNWU5YzEwZDMyYmU5MjAzMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJJY29uRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJJY29uRGF0YWJhc2UuY3BwCkBAIC0yNjMsMTQgKzI2MywxNCBAQCB2b2lk
IFdlYkljb25EYXRhYmFzZTo6ZGlkRmluaXNoVVJMSW1wb3J0KCkKICAgICBIYXNoTWFwPHVpbnQ2
NF90LCBTdHJpbmc+OjppdGVyYXRvciBlbmQgPSBtX3BlbmRpbmdMb2FkRGVjaXNpb25VUkxNYXAu
ZW5kKCk7CiAgICAgCiAgICAgZm9yICg7IGkgIT0gZW5kOyArK2kpIHsKLSAgICAgICAgTE9HKElj
b25EYXRhYmFzZSwgIldLMiBVSVByb2Nlc3MgcGVyZm9ybWluZyBkZWxheWVkIGNhbGxiYWNrIG9u
IGNhbGxiYWNrIElEICVpIGZvciBwYWdlIHVybCAlcyIsIChpbnQpaS0+Zmlyc3QsIGktPnNlY29u
ZC5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIEljb25Mb2FkRGVjaXNpb24gZGVjaXNpb24gPSBt
X2ljb25EYXRhYmFzZUltcGwtPnN5bmNocm9ub3VzTG9hZERlY2lzaW9uRm9ySWNvblVSTChpLT5z
ZWNvbmQsIDApOworICAgICAgICBMT0coSWNvbkRhdGFiYXNlLCAiV0syIFVJUHJvY2VzcyBwZXJm
b3JtaW5nIGRlbGF5ZWQgY2FsbGJhY2sgb24gY2FsbGJhY2sgSUQgJWkgZm9yIHBhZ2UgdXJsICVz
IiwgKGludClpLT5rZXksIGktPnZhbHVlLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgSWNvbkxv
YWREZWNpc2lvbiBkZWNpc2lvbiA9IG1faWNvbkRhdGFiYXNlSW1wbC0+c3luY2hyb25vdXNMb2Fk
RGVjaXNpb25Gb3JJY29uVVJMKGktPnZhbHVlLCAwKTsKIAogICAgICAgICAvLyBEZWNpc2lvbnMg
c2hvdWxkIG5ldmVyIGJlIHVua25vd24gYWZ0ZXIgdGhlIGluaXRhbCBpbXBvcnQgaXMgY29tcGxl
dGUKICAgICAgICAgQVNTRVJUKGRlY2lzaW9uICE9IEljb25Mb2FkVW5rbm93bik7CiAKICAgICAg
ICAgLy8gRklYTUUgKE11bHRpLVdlYlByb2Nlc3MpOiBXZSBuZWVkIHRvIGtub3cgd2hpY2ggY29u
bmVjdGlvbiB0byBzZW5kIHRoaXMgbWVzc2FnZSB0by4KLSAgICAgICAgbV93ZWJDb250ZXh0LT5z
ZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYkljb25EYXRhYmFzZVByb3h5OjpSZWNlaXZl
ZEljb25Mb2FkRGVjaXNpb24oc3RhdGljX2Nhc3Q8aW50PihkZWNpc2lvbiksIGktPmZpcnN0KSk7
CisgICAgICAgIG1fd2ViQ29udGV4dC0+c2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJJ
Y29uRGF0YWJhc2VQcm94eTo6UmVjZWl2ZWRJY29uTG9hZERlY2lzaW9uKHN0YXRpY19jYXN0PGlu
dD4oZGVjaXNpb24pLCBpLT5rZXkpKTsKICAgICB9CiAgICAgCiAgICAgbV9wZW5kaW5nTG9hZERl
Y2lzaW9uVVJMTWFwLmNsZWFyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViSW50ZW50RGF0YS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViSW50ZW50
RGF0YS5jcHAKaW5kZXggNjMyYWEzYjc1NTRkYjI0M2JkMzc1ZGQ3OTIxMzk1MzFlNjlhZTFmZC4u
YzZkOGM2NGJhODU5NjI1MWQ1ZDM2Y2ZlOTE5YTI5NjM4MjcxMTk0YyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkludGVudERhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJJbnRlbnREYXRhLmNwcApAQCAtNzgsNyArNzgsNyBAQCBQYXNzUmVm
UHRyPEltbXV0YWJsZURpY3Rpb25hcnk+IFdlYkludGVudERhdGE6OmV4dHJhcygpIGNvbnN0CiAg
ICAgSW1tdXRhYmxlRGljdGlvbmFyeTo6TWFwVHlwZSB3a0V4dHJhczsKICAgICBIYXNoTWFwPFN0
cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9zdG9yZS5leHRyYXMuZW5kKCk7
CiAgICAgZm9yIChIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
X3N0b3JlLmV4dHJhcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHdrRXh0cmFz
LnNldChpdC0+Zmlyc3QsIFdlYlN0cmluZzo6Y3JlYXRlKGl0LT5zZWNvbmQpKTsKKyAgICAgICAg
d2tFeHRyYXMuc2V0KGl0LT5rZXksIFdlYlN0cmluZzo6Y3JlYXRlKGl0LT52YWx1ZSkpOwogCiAg
ICAgcmV0dXJuIEltbXV0YWJsZURpY3Rpb25hcnk6OmFkb3B0KHdrRXh0cmFzKTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAKaW5kZXggMjJhMmI3ZjJj
N2EyNDFjZWRlOTZiOTc0YmUzNGFiNDQ2MGI3MTdkZC4uYTIwZTQ2N2ZlNzY3ZDY0NDQ4OTJlYzYx
NTIyM2M4ZjYyOGZiYjJhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlByb2Nlc3NQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nl
c3NQcm94eS5jcHAKQEAgLTI2Niw5ICsyNjYsOSBAQCBib29sIFdlYlByb2Nlc3NQcm94eTo6Y2hl
Y2tVUkxSZWNlaXZlZEZyb21XZWJQcm9jZXNzKGNvbnN0IEtVUkwmIHVybCkKICAgICAvLyBJdGVt
cyBpbiBiYWNrL2ZvcndhcmQgbGlzdCBoYXZlIGJlZW4gYWxyZWFkeSBjaGVja2VkLgogICAgIC8v
IE9uZSBjYXNlIHdoZXJlIHdlIGRvbid0IGhhdmUgc2FuZGJveCBleHRlbnNpb25zIGZvciBmaWxl
IFVSTHMgaW4gYi9mIGxpc3QgaXMgaWYgdGhlIGxpc3QgaGFzIGJlZW4gcmVpbnN0YXRlZCBhZnRl
ciBhIGNyYXNoIG9yIGEgYnJvd3NlciByZXN0YXJ0LgogICAgIGZvciAoV2ViQmFja0ZvcndhcmRM
aXN0SXRlbU1hcDo6aXRlcmF0b3IgaXRlciA9IG1fYmFja0ZvcndhcmRMaXN0SXRlbU1hcC5iZWdp
bigpLCBlbmQgPSBtX2JhY2tGb3J3YXJkTGlzdEl0ZW1NYXAuZW5kKCk7IGl0ZXIgIT0gZW5kOyAr
K2l0ZXIpIHsKLSAgICAgICAgaWYgKEtVUkwoS1VSTCgpLCBpdGVyLT5zZWNvbmQtPnVybCgpKS5m
aWxlU3lzdGVtUGF0aCgpID09IHBhdGgpCisgICAgICAgIGlmIChLVVJMKEtVUkwoKSwgaXRlci0+
dmFsdWUtPnVybCgpKS5maWxlU3lzdGVtUGF0aCgpID09IHBhdGgpCiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgaWYgKEtVUkwoS1VSTCgpLCBpdGVyLT5zZWNvbmQtPm9yaWdpbmFs
VVJMKCkpLmZpbGVTeXN0ZW1QYXRoKCkgPT0gcGF0aCkKKyAgICAgICAgaWYgKEtVUkwoS1VSTCgp
LCBpdGVyLT52YWx1ZS0+b3JpZ2luYWxVUkwoKSkuZmlsZVN5c3RlbVBhdGgoKSA9PSBwYXRoKQog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0yOTEsMTUgKzI5MSwxNSBAQCB2
b2lkIFdlYlByb2Nlc3NQcm94eTo6YWRkQmFja0ZvcndhcmRJdGVtKHVpbnQ2NF90IGl0ZW1JRCwg
Y29uc3QgU3RyaW5nJiBvcmlnaW5hbAogCiAgICAgV2ViQmFja0ZvcndhcmRMaXN0SXRlbU1hcDo6
QWRkUmVzdWx0IHJlc3VsdCA9IG1fYmFja0ZvcndhcmRMaXN0SXRlbU1hcC5hZGQoaXRlbUlELCAw
KTsKICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9y
LT5zZWNvbmQgPSBXZWJCYWNrRm9yd2FyZExpc3RJdGVtOjpjcmVhdGUob3JpZ2luYWxVUkwsIHVy
bCwgdGl0bGUsIGJhY2tGb3J3YXJkRGF0YS5kYXRhKCksIGJhY2tGb3J3YXJkRGF0YS5zaXplKCks
IGl0ZW1JRCk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBXZWJCYWNrRm9yd2Fy
ZExpc3RJdGVtOjpjcmVhdGUob3JpZ2luYWxVUkwsIHVybCwgdGl0bGUsIGJhY2tGb3J3YXJkRGF0
YS5kYXRhKCksIGJhY2tGb3J3YXJkRGF0YS5zaXplKCksIGl0ZW1JRCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKICAgICAvLyBVcGRhdGUgZXhpc3RpbmcgaXRlbS4KLSAgICByZXN1bHQuaXRl
cmF0b3ItPnNlY29uZC0+c2V0T3JpZ2luYWxVUkwob3JpZ2luYWxVUkwpOwotICAgIHJlc3VsdC5p
dGVyYXRvci0+c2Vjb25kLT5zZXRVUkwodXJsKTsKLSAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29u
ZC0+c2V0VGl0bGUodGl0bGUpOwotICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLT5zZXRCYWNr
Rm9yd2FyZERhdGEoYmFja0ZvcndhcmREYXRhLmRhdGEoKSwgYmFja0ZvcndhcmREYXRhLnNpemUo
KSk7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+c2V0T3JpZ2luYWxVUkwob3JpZ2luYWxV
UkwpOworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPnNldFVSTCh1cmwpOworICAgIHJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUtPnNldFRpdGxlKHRpdGxlKTsKKyAgICByZXN1bHQuaXRlcmF0b3It
PnZhbHVlLT5zZXRCYWNrRm9yd2FyZERhdGEoYmFja0ZvcndhcmREYXRhLmRhdGEoKSwgYmFja0Zv
cndhcmREYXRhLnNpemUoKSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpzZW5kRGlkR2V0
UGx1Z2lucyh1aW50NjRfdCByZXF1ZXN0SUQsIFBhc3NPd25QdHI8VmVjdG9yPFBsdWdpbkluZm8+
ID4gcGx1Z2luSW5mb3MpCkBAIC01NzgsNyArNTc4LDcgQEAgc2l6ZV90IFdlYlByb2Nlc3NQcm94
eTo6ZnJhbWVDb3VudEluUGFnZShXZWJQYWdlUHJveHkqIHBhZ2UpIGNvbnN0CiB7CiAgICAgc2l6
ZV90IHJlc3VsdCA9IDA7CiAgICAgZm9yIChIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8V2ViRnJh
bWVQcm94eT4gPjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1fZnJhbWVNYXAuYmVnaW4oKTsgaXRl
ciAhPSBtX2ZyYW1lTWFwLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgaWYgKGl0ZXItPnNlY29u
ZC0+cGFnZSgpID09IHBhZ2UpCisgICAgICAgIGlmIChpdGVyLT52YWx1ZS0+cGFnZSgpID09IHBh
Z2UpCiAgICAgICAgICAgICArK3Jlc3VsdDsKICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvR2VvbG9jYXRpb24vR2VvbG9jYXRp
b25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9HZW9sb2NhdGlvbi9HZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5jcHAKaW5k
ZXggZDZiZGI4ZTE1MzE0NTBiMTJhYmM4MmQ4NmIyZmMwMTNmMTM1NDNiNy4uZmNhNzFhMWQwOTVm
ZWVmYWJhMDVhNmE3MjVmZGI0MzYzNTgxNGI2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9HZW9sb2NhdGlvbi9HZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdl
ci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9HZW9sb2NhdGlvbi9HZW9sb2Nh
dGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5jcHAKQEAgLTc0LDcgKzc0LDcgQEAgdm9pZCBH
ZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlcjo6Y2FuY2VsUmVxdWVzdEZvckdlb2xv
Y2F0aW9uKEdlb2xvY2F0aW8KICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9nZW9sb2NhdGlvblRv
SURNYXAucmVtb3ZlKGl0KTsKLSAgICBtX2lkVG9HZW9sb2NhdGlvbk1hcC5yZW1vdmUoaXQtPnNl
Y29uZCk7CisgICAgbV9pZFRvR2VvbG9jYXRpb25NYXAucmVtb3ZlKGl0LT52YWx1ZSk7CiB9CiAK
IHZvaWQgR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXI6OmRpZFJlY2VpdmVHZW9s
b2NhdGlvblBlcm1pc3Npb25EZWNpc2lvbih1aW50NjRfdCBnZW9sb2NhdGlvbklELCBib29sIGFs
bG93ZWQpCkBAIC04Myw3ICs4Myw3IEBAIHZvaWQgR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVz
dE1hbmFnZXI6OmRpZFJlY2VpdmVHZW9sb2NhdGlvblBlcm1pc3Npb25EZWNpc2lvCiAgICAgaWYg
KGl0ID09IG1faWRUb0dlb2xvY2F0aW9uTWFwLmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBHZW9sb2NhdGlvbiogZ2VvbG9jYXRpb24gPSBpdC0+c2Vjb25kOworICAgIEdlb2xvY2F0aW9u
KiBnZW9sb2NhdGlvbiA9IGl0LT52YWx1ZTsKICAgICBnZW9sb2NhdGlvbi0+c2V0SXNBbGxvd2Vk
KGFsbG93ZWQpOwogCiAgICAgbV9pZFRvR2VvbG9jYXRpb25NYXAucmVtb3ZlKGl0KTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVj
dGVkQnVuZGxlTm9kZUhhbmRsZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGUuY3BwCmluZGV4IDBjNDI5NWU2
MTJjZGQ3NmYwM2E1MzEzZDQ1ZTZjZWMxZmIxZTg1OTYuLjc3ZTAzMDkzZDVmZDBkOTY0MjRkMzE1
NGY3N2M5NGQ0MTk0YjE2ZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxlTm9kZUhhbmRsZS5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVO
b2RlSGFuZGxlLmNwcApAQCAtNjksMTAgKzY5LDEwIEBAIFBhc3NSZWZQdHI8SW5qZWN0ZWRCdW5k
bGVOb2RlSGFuZGxlPiBJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU6OmdldE9yQ3JlYXRlKE5vZGUq
CiAKICAgICBET01IYW5kbGVDYWNoZTo6QWRkUmVzdWx0IHJlc3VsdCA9IGRvbUhhbmRsZUNhY2hl
KCkuYWRkKG5vZGUsIDApOwogICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJl
dHVybiBQYXNzUmVmUHRyPEluamVjdGVkQnVuZGxlTm9kZUhhbmRsZT4ocmVzdWx0Lml0ZXJhdG9y
LT5zZWNvbmQpOworICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxJbmplY3RlZEJ1bmRsZU5vZGVI
YW5kbGU+KHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwogCiAgICAgUmVmUHRyPEluamVjdGVkQnVu
ZGxlTm9kZUhhbmRsZT4gbm9kZUhhbmRsZSA9IEluamVjdGVkQnVuZGxlTm9kZUhhbmRsZTo6Y3Jl
YXRlKG5vZGUpOwotICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gbm9kZUhhbmRsZS5nZXQo
KTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gbm9kZUhhbmRsZS5nZXQoKTsKICAgICBy
ZXR1cm4gbm9kZUhhbmRsZS5yZWxlYXNlKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxlUmFuZ2VIYW5k
bGUuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5q
ZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5jcHAKaW5kZXggMWI3NGYwMTI0MDA4ZGIzYzA3ODI4ZWE2
ZjZkMmMwNWFjMDU5YzMwNi4uZDYwMDBhYjkxMzMyOWNkNTdkYWIzZTNmZDY0MDE0Yzc2ZTk1MmRj
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9E
T00vSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5jcHAK
QEAgLTQ4LDEwICs0OCwxMCBAQCBQYXNzUmVmUHRyPEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU+
IEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OmdldE9yQ3JlYXRlKFJhbgogCiAgICAgRE9NSGFu
ZGxlQ2FjaGU6OkFkZFJlc3VsdCByZXN1bHQgPSBkb21IYW5kbGVDYWNoZSgpLmFkZChyYW5nZSwg
MCk7CiAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgcmV0dXJuIFBhc3NSZWZQ
dHI8SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZT4ocmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOwor
ICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlPihyZXN1
bHQuaXRlcmF0b3ItPnZhbHVlKTsKIAogICAgIFJlZlB0cjxJbmplY3RlZEJ1bmRsZVJhbmdlSGFu
ZGxlPiByYW5nZUhhbmRsZSA9IEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OmNyZWF0ZShyYW5n
ZSk7Ci0gICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSByYW5nZUhhbmRsZS5nZXQoKTsKKyAg
ICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gcmFuZ2VIYW5kbGUuZ2V0KCk7CiAgICAgcmV0dXJu
IHJhbmdlSGFuZGxlLnJlbGVhc2UoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZUludGVudC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlSW50ZW50
LmNwcAppbmRleCA5MmRlNjFjNmMyYmQ2ZTllNDJjNDc1ZGFhMDdjMDE3NzliMTc1N2NlLi5kOGFj
M2EyNWRmMzViNGEwNWYwMjJjMTBhMzM4NDdmNjZmZjk2ZThjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlSW50ZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVk
QnVuZGxlSW50ZW50LmNwcApAQCAtNzksNyArNzksNyBAQCBQYXNzUmVmUHRyPEltbXV0YWJsZURp
Y3Rpb25hcnk+IEluamVjdGVkQnVuZGxlSW50ZW50OjpleHRyYXMoKSBjb25zdAogICAgIEltbXV0
YWJsZURpY3Rpb25hcnk6Ok1hcFR5cGUgd2tFeHRyYXM7CiAgICAgSGFzaE1hcDxTdHJpbmcsIFN0
cmluZz46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGV4dHJhcy5lbmQoKTsKICAgICBmb3IgKEhhc2hN
YXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGV4dHJhcy5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHdrRXh0cmFzLnNldChpdC0+Zmlyc3QsIFdlYlN0cmlu
Zzo6Y3JlYXRlKGl0LT5zZWNvbmQpKTsKKyAgICAgICAgd2tFeHRyYXMuc2V0KGl0LT5rZXksIFdl
YlN0cmluZzo6Y3JlYXRlKGl0LT52YWx1ZSkpOwogCiAgICAgcmV0dXJuIEltbXV0YWJsZURpY3Rp
b25hcnk6OmFkb3B0KHdrRXh0cmFzKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvTm90aWZpY2F0aW9ucy9XZWJOb3RpZmljYXRpb25NYW5hZ2VyLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvTm90aWZpY2F0aW9ucy9XZWJOb3RpZmljYXRpb25NYW5hZ2Vy
LmNwcAppbmRleCAyZDY2N2VmNWUxNzJiMWQ4Y2NkODYzZTQxNzFjNmY0YjQzNGQxODk3Li4yNTFj
NDEyNDU0YzU1MzdlYWQyZWI0ODU1ZTM2YzFlMzg3YmE0YzE1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL05vdGlmaWNhdGlvbnMvV2ViTm90aWZpY2F0aW9uTWFuYWdlci5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Ob3RpZmljYXRpb25zL1dlYk5vdGlm
aWNhdGlvbk1hbmFnZXIuY3BwCkBAIC05OSw3ICs5OSw3IEBAIE5vdGlmaWNhdGlvbkNsaWVudDo6
UGVybWlzc2lvbiBXZWJOb3RpZmljYXRpb25NYW5hZ2VyOjpwb2xpY3lGb3JPcmlnaW4oV2ViQ29y
ZTo6CiAgICAgQVNTRVJUKCFvcmlnaW4tPmlzVW5pcXVlKCkpOwogICAgIEhhc2hNYXA8U3RyaW5n
LCBib29sPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Blcm1pc3Npb25zTWFwLmZpbmQob3JpZ2lu
LT50b1Jhd1N0cmluZygpKTsKICAgICBpZiAoaXQgIT0gbV9wZXJtaXNzaW9uc01hcC5lbmQoKSkK
LSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQgPyBOb3RpZmljYXRpb25DbGllbnQ6OlBlcm1pc3Np
b25BbGxvd2VkIDogTm90aWZpY2F0aW9uQ2xpZW50OjpQZXJtaXNzaW9uRGVuaWVkOworICAgICAg
ICByZXR1cm4gaXQtPnZhbHVlID8gTm90aWZpY2F0aW9uQ2xpZW50OjpQZXJtaXNzaW9uQWxsb3dl
ZCA6IE5vdGlmaWNhdGlvbkNsaWVudDo6UGVybWlzc2lvbkRlbmllZDsKICNlbmRpZgogICAgIAog
ICAgIHJldHVybiBOb3RpZmljYXRpb25DbGllbnQ6OlBlcm1pc3Npb25Ob3RBbGxvd2VkOwpAQCAt
MTE2LDcgKzExNiw3IEBAIGJvb2wgV2ViTm90aWZpY2F0aW9uTWFuYWdlcjo6c2hvdyhOb3RpZmlj
YXRpb24qIG5vdGlmaWNhdGlvbiwgV2ViUGFnZSogcGFnZSkKICAgICBtX25vdGlmaWNhdGlvbklE
TWFwLnNldChub3RpZmljYXRpb25JRCwgbm90aWZpY2F0aW9uKTsKICAgICAKICAgICBOb3RpZmlj
YXRpb25Db250ZXh0TWFwOjppdGVyYXRvciBpdCA9IG1fbm90aWZpY2F0aW9uQ29udGV4dE1hcC5h
ZGQobm90aWZpY2F0aW9uLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIFZlY3Rvcjx1aW50NjRf
dD4oKSkuaXRlcmF0b3I7Ci0gICAgaXQtPnNlY29uZC5hcHBlbmQobm90aWZpY2F0aW9uSUQpOwor
ICAgIGl0LT52YWx1ZS5hcHBlbmQobm90aWZpY2F0aW9uSUQpOwogCiAjaWYgRU5BQkxFKE5PVElG
SUNBVElPTlMpCiAgICAgbV9wcm9jZXNzLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2VQcm94eTo6U2hvd05vdGlmaWNhdGlvbihub3RpZmljYXRpb24tPnRpdGxlKCksIG5vdGlm
aWNhdGlvbi0+Ym9keSgpLCBub3RpZmljYXRpb24tPmljb25VUkwoKS5zdHJpbmcoKSwgbm90aWZp
Y2F0aW9uLT50YWcoKSwgbm90aWZpY2F0aW9uLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnNl
Y3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCksIG5vdGlmaWNhdGlvbklEKSwgcGFnZS0+cGFnZUlE
KCkpOwpAQCAtMTUwLDcgKzE1MCw3IEBAIHZvaWQgV2ViTm90aWZpY2F0aW9uTWFuYWdlcjo6Y2xl
YXJOb3RpZmljYXRpb25zKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqCiAgICAgaWYg
KGl0ID09IG1fbm90aWZpY2F0aW9uQ29udGV4dE1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuOwog
ICAgIAotICAgIFZlY3Rvcjx1aW50NjRfdD4mIG5vdGlmaWNhdGlvbklEcyA9IGl0LT5zZWNvbmQ7
CisgICAgVmVjdG9yPHVpbnQ2NF90PiYgbm90aWZpY2F0aW9uSURzID0gaXQtPnZhbHVlOwogICAg
IG1fcHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJOb3RpZmljYXRpb25N
YW5hZ2VyUHJveHk6OkNsZWFyTm90aWZpY2F0aW9ucyhub3RpZmljYXRpb25JRHMpLCBwYWdlLT5w
YWdlSUQoKSk7CiAgICAgc2l6ZV90IGNvdW50ID0gbm90aWZpY2F0aW9uSURzLnNpemUoKTsKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKQEAgLTIzMywxMCArMjMzLDEw
IEBAIHZvaWQgV2ViTm90aWZpY2F0aW9uTWFuYWdlcjo6cmVtb3ZlTm90aWZpY2F0aW9uRnJvbUNv
bnRleHRNYXAodWludDY0X3Qgbm90aWZpY2F0CiAgICAgLy8gVGhpcyBpcyBhIGhlbHBlciBmdW5j
dGlvbiBmb3IgbWFuYWdpbmcgdGhlIGhhc2ggbWFwcy4KICAgICBOb3RpZmljYXRpb25Db250ZXh0
TWFwOjppdGVyYXRvciBpdCA9IG1fbm90aWZpY2F0aW9uQ29udGV4dE1hcC5maW5kKG5vdGlmaWNh
dGlvbi0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKICAgICBBU1NFUlQoaXQgIT0gbV9ub3Rp
ZmljYXRpb25Db250ZXh0TWFwLmVuZCgpKTsKLSAgICBzaXplX3QgaW5kZXggPSBpdC0+c2Vjb25k
LmZpbmQobm90aWZpY2F0aW9uSUQpOworICAgIHNpemVfdCBpbmRleCA9IGl0LT52YWx1ZS5maW5k
KG5vdGlmaWNhdGlvbklEKTsKICAgICBBU1NFUlQoaW5kZXggIT0gbm90Rm91bmQpOwotICAgIGl0
LT5zZWNvbmQucmVtb3ZlKGluZGV4KTsKLSAgICBpZiAoaXQtPnNlY29uZC5pc0VtcHR5KCkpCisg
ICAgaXQtPnZhbHVlLnJlbW92ZShpbmRleCk7CisgICAgaWYgKGl0LT52YWx1ZS5pc0VtcHR5KCkp
CiAgICAgICAgIG1fbm90aWZpY2F0aW9uQ29udGV4dE1hcC5yZW1vdmUoaXQpOwogfQogI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUv
TlBSdW50aW1lT2JqZWN0TWFwLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lu
cy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3BwCmluZGV4IDM1ODUzM2ZlYmZjODYyN2I5
YzNhY2FmNjYwNjgxNGViOGRkMjcxYWEuLjBjZTcwM2MwYWQ4ODAzY2EyOGRkNTQzMThlNzE4OTQz
NjM2ZDY5NjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9O
ZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3BwCkBAIC0yMTIsNyAr
MjEyLDcgQEAgdm9pZCBOUFJ1bnRpbWVPYmplY3RNYXA6OmludmFsaWRhdGUoKQogICAgIFZlY3Rv
cjxOUE9iamVjdCo+IG9iamVjdHM7CiAKICAgICBmb3IgKEhhc2hNYXA8TlBPYmplY3QqLCBKU0M6
OldlYWs8SlNOUE9iamVjdD4gPjo6aXRlcmF0b3IgcHRyID0gbV9qc05QT2JqZWN0cy5iZWdpbigp
LCBlbmQgPSBtX2pzTlBPYmplY3RzLmVuZCgpOyBwdHIgIT0gZW5kOyArK3B0cikgewotICAgICAg
ICBKU05QT2JqZWN0KiBqc05QT2JqZWN0ID0gcHRyLT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIEpT
TlBPYmplY3QqIGpzTlBPYmplY3QgPSBwdHItPnZhbHVlLmdldCgpOwogICAgICAgICBpZiAoIWpz
TlBPYmplY3QpIC8vIFNraXAgem9tYmllcy4KICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICBvYmplY3RzLmFwcGVuZChqc05QT2JqZWN0LT5sZWFrTlBPYmplY3QoKSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVn
aW4uY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNj
YXBlUGx1Z2luLmNwcAppbmRleCBiMjA3NDMyMTNiYzVlYTQxM2MyZjA5NjNkMzljNmEyMjMzNGZk
MTRjLi5mMWU3OWU0NWQ4MTZkMjcwY2I0NWMxMDMwODM1ZjQ2ZjkzMjNhMDU2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVn
aW4uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9O
ZXRzY2FwZVBsdWdpbi5jcHAKQEAgLTE5OSw4ICsxOTksOCBAQCBOUEVycm9yIE5ldHNjYXBlUGx1
Z2luOjpkZXN0cm95U3RyZWFtKE5QU3RyZWFtKiBzdHJlYW0sIE5QUmVhc29uIHJlYXNvbikKICAg
ICBOZXRzY2FwZVBsdWdpblN0cmVhbSogcGx1Z2luU3RyZWFtID0gMDsKIAogICAgIGZvciAoU3Ry
ZWFtc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3N0cmVhbXMuYmVnaW4oKSwgZW5kID0gbV9z
dHJlYW1zLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQt
Pm5wU3RyZWFtKCkgPT0gc3RyZWFtKSB7Ci0gICAgICAgICAgICBwbHVnaW5TdHJlYW0gPSBpdC0+
c2Vjb25kLmdldCgpOworICAgICAgICBpZiAoaXQtPnZhbHVlLT5ucFN0cmVhbSgpID09IHN0cmVh
bSkgeworICAgICAgICAgICAgcGx1Z2luU3RyZWFtID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CkBAIC0zODcsNyArMzg3LDcgQEAgdm9pZCBO
ZXRzY2FwZVBsdWdpbjo6dW5zY2hlZHVsZVRpbWVyKHVuc2lnbmVkIHRpbWVySUQpCiAgICAgaWYg
KGl0ID09IG1fdGltZXJzLmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBPd25QdHI8VGlt
ZXI+IHRpbWVyID0gYWRvcHRQdHIoaXQtPnNlY29uZCk7CisgICAgT3duUHRyPFRpbWVyPiB0aW1l
ciA9IGFkb3B0UHRyKGl0LT52YWx1ZSk7CiAgICAgbV90aW1lcnMucmVtb3ZlKGl0KTsKIAogICAg
IHRpbWVyLT5zdG9wKCk7CkBAIC03NjIsOCArNzYyLDggQEAgdm9pZCBOZXRzY2FwZVBsdWdpbjo6
ZnJhbWVEaWRGaW5pc2hMb2FkaW5nKHVpbnQ2NF90IHJlcXVlc3RJRCkKICAgICBpZiAoaXQgPT0g
bV9wZW5kaW5nVVJMTm90aWZpY2F0aW9ucy5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
U3RyaW5nIHVybCA9IGl0LT5zZWNvbmQuZmlyc3Q7Ci0gICAgdm9pZCogbm90aWZpY2F0aW9uRGF0
YSA9IGl0LT5zZWNvbmQuc2Vjb25kOworICAgIFN0cmluZyB1cmwgPSBpdC0+dmFsdWUuZmlyc3Q7
CisgICAgdm9pZCogbm90aWZpY2F0aW9uRGF0YSA9IGl0LT52YWx1ZS5zZWNvbmQ7CiAKICAgICBt
X3BlbmRpbmdVUkxOb3RpZmljYXRpb25zLnJlbW92ZShpdCk7CiAgICAgCkBAIC03NzgsOCArNzc4
LDggQEAgdm9pZCBOZXRzY2FwZVBsdWdpbjo6ZnJhbWVEaWRGYWlsKHVpbnQ2NF90IHJlcXVlc3RJ
RCwgYm9vbCB3YXNDYW5jZWxsZWQpCiAgICAgaWYgKGl0ID09IG1fcGVuZGluZ1VSTE5vdGlmaWNh
dGlvbnMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFN0cmluZyB1cmwgPSBpdC0+c2Vj
b25kLmZpcnN0OwotICAgIHZvaWQqIG5vdGlmaWNhdGlvbkRhdGEgPSBpdC0+c2Vjb25kLnNlY29u
ZDsKKyAgICBTdHJpbmcgdXJsID0gaXQtPnZhbHVlLmZpcnN0OworICAgIHZvaWQqIG5vdGlmaWNh
dGlvbkRhdGEgPSBpdC0+dmFsdWUuc2Vjb25kOwogCiAgICAgbV9wZW5kaW5nVVJMTm90aWZpY2F0
aW9ucy5yZW1vdmUoaXQpOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Q
bHVnaW5zL1BsdWdpblZpZXcuY3BwCmluZGV4IGQwN2Y4Yjc5ZDZhODAyYWY3OTQwN2JhOTU2NjAx
NTY5MmJlNWY1ZjUuLjY0YWUxYTRlNGIyOGQzOGFiYzY3NzlmYmNiZjA2ZWFlYjEzNmQ5ZDkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAK
QEAgLTE3MCw5ICsxNzAsOSBAQCBzdGF0aWMgU3RyaW5nIGJ1aWxkSFRUUEhlYWRlcnMoY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIGxvbmcgbG9uZyYgZXhwZQogICAgIAogICAgIEhU
VFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVs
ZHMoKS5lbmQoKTsKICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
cmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkcygpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewot
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+Zmlyc3QuY2hhcmFjdGVycygpLCBpdC0+
Zmlyc3QubGVuZ3RoKCkpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+a2V5LmNo
YXJhY3RlcnMoKSwgaXQtPmtleS5sZW5ndGgoKSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKHNlcGFyYXRvci5jaGFyYWN0ZXJzKCksIHNlcGFyYXRvci5sZW5ndGgoKSk7Ci0gICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5zZWNvbmQuY2hhcmFjdGVycygpLCBpdC0+c2Vjb25k
Lmxlbmd0aCgpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPnZhbHVlLmNoYXJh
Y3RlcnMoKSwgaXQtPnZhbHVlLmxlbmd0aCgpKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQoJ1xuJyk7CiAgICAgfQogICAgIApAQCAtMjg0LDcgKzI4NCw3IEBAIFBsdWdpblZpZXc6On5Q
bHVnaW5WaWV3KCkKIAogICAgIC8vIENhbmNlbCBhbGwgcGVuZGluZyBmcmFtZSBsb2Fkcy4KICAg
ICBmb3IgKEZyYW1lTG9hZE1hcDo6aXRlcmF0b3IgaXQgPSBtX3BlbmRpbmdGcmFtZUxvYWRzLmJl
Z2luKCksIGVuZCA9IG1fcGVuZGluZ0ZyYW1lTG9hZHMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkK
LSAgICAgICAgaXQtPmZpcnN0LT5zZXRMb2FkTGlzdGVuZXIoMCk7CisgICAgICAgIGl0LT5rZXkt
PnNldExvYWRMaXN0ZW5lcigwKTsKIAogICAgIGlmIChtX3BsdWdpbikgewogICAgICAgICBtX2lz
QmVpbmdEZXN0cm95ZWQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBo
aWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAKaW5kZXggNGYxNzZkZDg2YTQ1NWIzNzUw
OTMxZjJjYzk0ZmI5Y2U3ODE1YWI0NS4uNzM1NjA5NGRlODYxODlhMGU1ODQzNmE3YWQ3NzIxNzJi
OGRiOTFkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXIuY3BwCkBAIC01Myw3ICs1Myw3IEBAIENvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllciogQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpsYXllckJ5SUQoV2ViS2l0OjpXZWJM
YXllcklECiAgICAgSGFzaE1hcDxXZWJMYXllcklELCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIq
Pjo6aXRlcmF0b3IgaXQgPSB0YWJsZS5maW5kKGlkKTsKICAgICBpZiAoaXQgPT0gdGFibGUuZW5k
KCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgIHJldHVy
biBpdC0+dmFsdWU7CiB9CiAKIHN0YXRpYyBXZWJMYXllcklEIHRvV2ViTGF5ZXJJRChHcmFwaGlj
c0xheWVyKiBsYXllcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJl
ZUNvb3JkaW5hdG9yLmNwcAppbmRleCBhM2E1NzI5MDczYmRlOWZmNzMzNWU3YzJhN2E4NGNlYTNl
ZDU4M2M1Li41NzRjMDc5ZGNmNGI0ZWU3NDRjNjRhZWE3MDlkMDUyMDNmYjFlMjYyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9MYXllclRyZWVDb29yZGluYXRvci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3BwCkBA
IC00NTQsNyArNDU0LDcgQEAgaW50NjRfdCBMYXllclRyZWVDb29yZGluYXRvcjo6YWRvcHRJbWFn
ZUJhY2tpbmdTdG9yZShJbWFnZSogaW1hZ2UpCiAgICAgSGFzaE1hcDxpbnQ2NF90LCBpbnQ+Ojpp
dGVyYXRvciBpdCA9IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMuZmluZChrZXkp
OwogCiAgICAgaWYgKGl0ICE9IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMuZW5k
KCkpIHsKLSAgICAgICAgKysoaXQtPnNlY29uZCk7CisgICAgICAgICsrKGl0LT52YWx1ZSk7CiAg
ICAgICAgIHJldHVybiBrZXk7CiAgICAgfQogCkBAIC00NzksOSArNDc5LDkgQEAgdm9pZCBMYXll
clRyZWVDb29yZGluYXRvcjo6cmVsZWFzZUltYWdlQmFja2luZ1N0b3JlKGludDY0X3Qga2V5KQog
ICAgIGlmIChpdCA9PSBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLmVuZCgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBpdC0+c2Vjb25kLS07CisgICAgaXQtPnZhbHVlLS07CiAK
LSAgICBpZiAoaXQtPnNlY29uZCkKKyAgICBpZiAoaXQtPnZhbHVlKQogICAgICAgICByZXR1cm47
CiAKICAgICBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLnJlbW92ZShpdCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFja0Zvcndh
cmRMaXN0UHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJh
Y2tGb3J3YXJkTGlzdFByb3h5LmNwcAppbmRleCA0Y2E0ZTVmZGI3MmNmY2VhYzY5NTQ1ZGQxN2Q5
ZjdhMmNjODQ2ODM4Li5iZTgyYTE5N2E3MzZkNjIzMmE1NDM3ZGE5YzI5MDJlYjA1Y2EzYTBiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFja0Zvcndh
cmRMaXN0UHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJCYWNrRm9yd2FyZExpc3RQcm94eS5jcHAKQEAgLTEzMCw5ICsxMzAsOSBAQCB2b2lkIFdlYkJh
Y2tGb3J3YXJkTGlzdFByb3h5OjpyZW1vdmVJdGVtKHVpbnQ2NF90IGl0ZW1JRCkKICAgICBpZiAo
aXQgPT0gaWRUb0hpc3RvcnlJdGVtTWFwKCkuZW5kKCkpCiAgICAgICAgIHJldHVybjsKICAgICAg
ICAgCi0gICAgV2ViQ29yZTo6cGFnZUNhY2hlKCktPnJlbW92ZShpdC0+c2Vjb25kLmdldCgpKTsK
KyAgICBXZWJDb3JlOjpwYWdlQ2FjaGUoKS0+cmVtb3ZlKGl0LT52YWx1ZS5nZXQoKSk7CiAKLSAg
ICBoaXN0b3J5SXRlbVRvSURNYXAoKS5yZW1vdmUoaXQtPnNlY29uZCk7CisgICAgaGlzdG9yeUl0
ZW1Ub0lETWFwKCkucmVtb3ZlKGl0LT52YWx1ZSk7CiAgICAgaWRUb0hpc3RvcnlJdGVtTWFwKCku
cmVtb3ZlKGl0KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL21hYy9XZWJQYWdlTWFjLm1tCmluZGV4IGMyZjAxNjUzNzU5NTNiNTNjYzNjZDFiOWViNDMx
ZGI1ZWNlYjkzYWQuLjIyMjczYzFmNjQ2MjFkOWZmMDI4MGU3NWNlNjEzNWJhNWQyNWFiNzMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1h
Yy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VN
YWMubW0KQEAgLTEyMSw3ICsxMjEsNyBAQCBzdGF0aWMgU3RyaW5nIGNvbW1hbmROYW1lRm9yU2Vs
ZWN0b3JOYW1lKGNvbnN0IFN0cmluZyYgc2VsZWN0b3JOYW1lKQogICAgIHN0YXRpYyBjb25zdCBT
ZWxlY3Rvck5hbWVNYXAqIGV4Y2VwdGlvbk1hcCA9IGNyZWF0ZVNlbGVjdG9yRXhjZXB0aW9uTWFw
KCk7CiAgICAgU2VsZWN0b3JOYW1lTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGV4Y2VwdGlvbk1h
cC0+ZmluZChzZWxlY3Rvck5hbWUpOwogICAgIGlmIChpdCAhPSBleGNlcHRpb25NYXAtPmVuZCgp
KQotICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsK
IAogICAgIC8vIFJlbW92ZSB0aGUgdHJhaWxpbmcgY29sb24uCiAgICAgLy8gTm8gbmVlZCB0byBj
YXBpdGFsaXplIHRoZSBjb21tYW5kIG5hbWUgc2luY2UgRWRpdG9yIGNvbW1hbmQgbmFtZXMgYXJl
IG5vdCBjYXNlIHNlbnNpdGl2ZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3Mu
Y3BwCmluZGV4IDE0OTBmZjNjYWY3NDM3M2NjNmJkNjAzMWY0YmJjNWFkNzg5OTg4ZjIuLjZhYTky
MDQxNTk2YzkzOWZhOWYyMTQ4MWE5YzdlYmE0ZDU4YjY5ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQcm9jZXNzLmNwcApAQCAtMzM5LDcgKzMzOSw3IEBAIHZvaWQgV2ViUHJvY2Vz
czo6dmlzaXRlZExpbmtTdGF0ZUNoYW5nZWQoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkxpbmtIYXNo
PiYgbGlua0hhCiAgICAgICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxXZWJQYWdlR3JvdXBQ
cm94eT4gPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BhZ2VHcm91cE1hcC5iZWdpbigpOwogICAg
ICAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8V2ViUGFnZUdyb3VwUHJveHk+ID46OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IG1fcGFnZUdyb3VwTWFwLmVuZCgpOwogICAgICAgICBmb3IgKDsgaXQg
IT0gZW5kOyArK2l0KQotICAgICAgICAgICAgUGFnZTo6dmlzaXRlZFN0YXRlQ2hhbmdlZChQYWdl
R3JvdXA6OnBhZ2VHcm91cChpdC0+c2Vjb25kLT5pZGVudGlmaWVyKCkpLCBsaW5rSGFzaGVzW2ld
KTsKKyAgICAgICAgICAgIFBhZ2U6OnZpc2l0ZWRTdGF0ZUNoYW5nZWQoUGFnZUdyb3VwOjpwYWdl
R3JvdXAoaXQtPnZhbHVlLT5pZGVudGlmaWVyKCkpLCBsaW5rSGFzaGVzW2ldKTsKICAgICB9CiAK
ICAgICBwYWdlQ2FjaGUoKS0+bWFya1BhZ2VzRm9yVmlzdGVkTGlua1N0eWxlUmVjYWxjKCk7CkBA
IC0zNTEsNyArMzUxLDcgQEAgdm9pZCBXZWJQcm9jZXNzOjphbGxWaXNpdGVkTGlua1N0YXRlQ2hh
bmdlZCgpCiAgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPFdlYlBhZ2VHcm91cFByb3h5PiA+
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGFnZUdyb3VwTWFwLmJlZ2luKCk7CiAgICAgSGFzaE1h
cDx1aW50NjRfdCwgUmVmUHRyPFdlYlBhZ2VHcm91cFByb3h5PiA+Ojpjb25zdF9pdGVyYXRvciBl
bmQgPSBtX3BhZ2VHcm91cE1hcC5lbmQoKTsKICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KQot
ICAgICAgICBQYWdlOjphbGxWaXNpdGVkU3RhdGVDaGFuZ2VkKFBhZ2VHcm91cDo6cGFnZUdyb3Vw
KGl0LT5zZWNvbmQtPmlkZW50aWZpZXIoKSkpOworICAgICAgICBQYWdlOjphbGxWaXNpdGVkU3Rh
dGVDaGFuZ2VkKFBhZ2VHcm91cDo6cGFnZUdyb3VwKGl0LT52YWx1ZS0+aWRlbnRpZmllcigpKSk7
CiAKICAgICBwYWdlQ2FjaGUoKS0+bWFya1BhZ2VzRm9yVmlzdGVkTGlua1N0eWxlUmVjYWxjKCk7
CiB9CkBAIC01MjcsNyArNTI3LDcgQEAgV2ViUGFnZSogV2ViUHJvY2Vzczo6Zm9jdXNlZFdlYlBh
Z2UoKSBjb25zdAogeyAgICAKICAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8V2ViUGFnZT4g
Pjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wYWdlTWFwLmVuZCgpOwogICAgIGZvciAoSGFzaE1h
cDx1aW50NjRfdCwgUmVmUHRyPFdlYlBhZ2U+ID46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wYWdl
TWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBXZWJQYWdlKiBwYWdlID0g
KCppdCkuc2Vjb25kLmdldCgpOworICAgICAgICBXZWJQYWdlKiBwYWdlID0gKCppdCkudmFsdWUu
Z2V0KCk7CiAgICAgICAgIGlmIChwYWdlLT53aW5kb3dBbmRXZWJQYWdlQXJlRm9jdXNlZCgpKQog
ICAgICAgICAgICAgcmV0dXJuIHBhZ2U7CiAgICAgfQpAQCAtNTQ1LDE0ICs1NDUsMTQgQEAgdm9p
ZCBXZWJQcm9jZXNzOjpjcmVhdGVXZWJQYWdlKHVpbnQ2NF90IHBhZ2VJRCwgY29uc3QgV2ViUGFn
ZUNyZWF0aW9uUGFyYW1ldGVycyYKICAgICAvLyBsaW5rKSB0aGUgV2ViUGFnZSBnZXRzIGNyZWF0
ZWQgYm90aCBpbiB0aGUgc3luY2hyb25vdXMgaGFuZGxlciBhbmQgdGhyb3VnaCB0aGUgbm9ybWFs
IHdheS4gCiAgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPFdlYlBhZ2U+ID46OkFkZFJlc3Vs
dCByZXN1bHQgPSBtX3BhZ2VNYXAuYWRkKHBhZ2VJRCwgMCk7CiAgICAgaWYgKHJlc3VsdC5pc05l
d0VudHJ5KSB7Ci0gICAgICAgIEFTU0VSVCghcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOwotICAg
ICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IFdlYlBhZ2U6OmNyZWF0ZShwYWdlSUQsIHBh
cmFtZXRlcnMpOworICAgICAgICBBU1NFUlQoIXJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOworICAg
ICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gV2ViUGFnZTo6Y3JlYXRlKHBhZ2VJRCwgcGFy
YW1ldGVycyk7CiAKICAgICAgICAgLy8gQmFsYW5jZWQgYnkgYW4gZW5hYmxlVGVybWluYXRpb24g
aW4gcmVtb3ZlV2ViUGFnZS4KICAgICAgICAgZGlzYWJsZVRlcm1pbmF0aW9uKCk7CiAgICAgfQog
Ci0gICAgQVNTRVJUKHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKKyAgICBBU1NFUlQocmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzczo6cmVtb3ZlV2ViUGFnZSh1
aW50NjRfdCBwYWdlSUQpCkBAIC03ODksMTEgKzc4OSwxMSBAQCBXZWJQYWdlR3JvdXBQcm94eSog
V2ViUHJvY2Vzczo6d2ViUGFnZUdyb3VwKGNvbnN0IFdlYlBhZ2VHcm91cERhdGEmIHBhZ2VHcm91
cERhdAogewogICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxXZWJQYWdlR3JvdXBQcm94eT4g
Pjo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fcGFnZUdyb3VwTWFwLmFkZChwYWdlR3JvdXBEYXRhLnBh
Z2VHcm91cElELCAwKTsKICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgQVNT
RVJUKCFyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7Ci0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+
c2Vjb25kID0gV2ViUGFnZUdyb3VwUHJveHk6OmNyZWF0ZShwYWdlR3JvdXBEYXRhKTsKKyAgICAg
ICAgQVNTRVJUKCFyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZSA9IFdlYlBhZ2VHcm91cFByb3h5OjpjcmVhdGUocGFnZUdyb3VwRGF0YSk7CiAg
ICAgfQogCi0gICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLmdldCgpOworICAgIHJl
dHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpOwogfQogCiAjaWYgRU5BQkxFKFdFQl9J
TlRFTlRTKQpAQCAtOTEyLDcgKzkxMiw3IEBAIHN0YXRpYyB2b2lkIGZyb21Db3VudGVkU2V0VG9I
YXNoTWFwKFR5cGVDb3VudFNldCogY291bnRlZFNldCwgSGFzaE1hcDxTdHJpbmcsIHVpCiB7CiAg
ICAgVHlwZUNvdW50U2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBjb3VudGVkU2V0LT5lbmQoKTsK
ICAgICBmb3IgKFR5cGVDb3VudFNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjb3VudGVkU2V0LT5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIG1hcC5zZXQoaXQtPmZpcnN0LCBpdC0+
c2Vjb25kKTsKKyAgICAgICAgbWFwLnNldChpdC0+a2V5LCBpdC0+dmFsdWUpOwogfQogCiBzdGF0
aWMgdm9pZCBnZXRXZWJDb3JlTWVtb3J5Q2FjaGVTdGF0aXN0aWNzKFZlY3RvcjxIYXNoTWFwPFN0
cmluZywgdWludDY0X3Q+ID4mIHJlc3VsdCkKQEAgLTEwODUsNyArMTA4NSw3IEBAIHZvaWQgV2Vi
UHJvY2Vzczo6c2V0VGV4dENoZWNrZXJTdGF0ZShjb25zdCBUZXh0Q2hlY2tlclN0YXRlJiB0ZXh0
Q2hlY2tlclN0YXRlKQogCiAgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPFdlYlBhZ2U+ID46
Oml0ZXJhdG9yIGVuZCA9IG1fcGFnZU1hcC5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8dWludDY0
X3QsIFJlZlB0cjxXZWJQYWdlPiA+OjppdGVyYXRvciBpdCA9IG1fcGFnZU1hcC5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgV2ViUGFnZSogcGFnZSA9ICgqaXQpLnNlY29uZC5n
ZXQoKTsKKyAgICAgICAgV2ViUGFnZSogcGFnZSA9ICgqaXQpLnZhbHVlLmdldCgpOwogICAgICAg
ICBpZiAoY29udGludW91c1NwZWxsQ2hlY2tpbmdUdXJuZWRPZmYpCiAgICAgICAgICAgICBwYWdl
LT51bm1hcmtBbGxNaXNzcGVsbGluZ3MoKTsKICAgICAgICAgaWYgKGdyYW1tYXJDaGVja2luZ1R1
cm5lZE9mZikKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwpp
bmRleCA4MWIwYTNkOWExY2VmZTAwZTk4ZWMxZTA5ZDYzZWRiZDIyNzczNDczLi5jMmE1ZGI3MjZh
YTQ1Y2QwNWIxMjUyZDdhOWU1ZDBhZGYxYWM3YjU2IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VM
b2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDIgQEAKKzIwMTItMDgtMjcgIENh
aW8gTWFyY2VsbyBkZSBPbGl2ZWlyYSBGaWxobyAgPGNhaW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9y
Zz4KKworICAgICAgICBSZW5hbWUgZmlyc3Qvc2Vjb25kIHRvIGtleS92YWx1ZSBpbiBIYXNoTWFw
IGl0ZXJhdG9ycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9ODI3ODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL01vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIu
Y3BwOgorICAgICAgICAoTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcjo6YWRkTW9ja1JlY29n
bml0aW9uUmVzdWx0KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9Ob3RpZmlj
YXRpb25QcmVzZW50ZXIuY3BwOgorICAgICAgICAoTm90aWZpY2F0aW9uUHJlc2VudGVyOjpzaW11
bGF0ZUNsaWNrKToKKyAgICAgICAgKE5vdGlmaWNhdGlvblByZXNlbnRlcjo6c2hvdyk6CisgICAg
ICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9DcHBCb3VuZENsYXNzLmNw
cDoKKyAgICAgICAgKENwcEJvdW5kQ2xhc3M6On5DcHBCb3VuZENsYXNzKToKKyAgICAgICAgKENw
cEJvdW5kQ2xhc3M6Omludm9rZSk6CisgICAgICAgIChDcHBCb3VuZENsYXNzOjpnZXRQcm9wZXJ0
eSk6CisgICAgICAgIChDcHBCb3VuZENsYXNzOjpzZXRQcm9wZXJ0eSk6CisgICAgICAgIChDcHBC
b3VuZENsYXNzOjpiaW5kQ2FsbGJhY2spOgorICAgICAgICAoQ3BwQm91bmRDbGFzczo6YmluZFBy
b3BlcnR5KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNl
cy5jcHA6CisgICAgICAgIChhcHBseUZvbnRNYXApOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcDoKKyAgICAgICAgKFdlYlZpZXdIb3N0OjpwcmludFJl
c291cmNlRGVzY3JpcHRpb24pOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9BY2Nlc3Np
YmlsaXR5Q29udHJvbGxlcldpbi5jcHA6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5Q29udHJvbGxl
cjo6fkFjY2Vzc2liaWxpdHlDb250cm9sbGVyKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlDb250
cm9sbGVyOjp3aW5Ob3RpZmljYXRpb25SZWNlaXZlZCk6CisgICAgICAgICogRHVtcFJlbmRlclRy
ZWUvd2luL1Jlc291cmNlTG9hZERlbGVnYXRlLmNwcDoKKyAgICAgICAgKFJlc291cmNlTG9hZERl
bGVnYXRlOjpkZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdCk6CisgICAgICAgICogRHVt
cFJlbmRlclRyZWUvd2luL1Rlc3RSdW5uZXJXaW4uY3BwOgorICAgICAgICAod29ybGRJREZvcldv
cmxkKToKKyAgICAgICAgKFRlc3RSdW5uZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxk
KToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvRE9NV2luZG93RXh0ZW5z
aW9uQmFzaWNfQnVuZGxlLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkRPTVdpbmRvd0V4
dGVuc2lvbkJhc2ljOjp3aWxsRGVzdHJveVBhZ2UpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Mi9ET01XaW5kb3dFeHRlbnNpb25Ob0NhY2hlX0J1bmRsZS5jcHA6CisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpET01XaW5kb3dFeHRlbnNpb25Ob0NhY2hlOjp3aWxsRGVzdHJv
eVBhZ2UpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1
bm5lci5jcHA6CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OndvcmxkSURGb3JXb3JsZCk6Cisg
ICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKToK
KwogMjAxMi0wOC0yNyAgR2F2aW4gUGV0ZXJzICA8Z2F2aW5wQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBbd2Via2l0LXBhdGNoXSBEb24ndCBjcmFzaCBjaHJvbWUtY2hhbm5lbHMgY29tbWFuZCB3
aGVuIGEgcHJldmlvdXNseSB1bmtub3duIHBsYXRmb3JtIHNob3dzIHVwLgpkaWZmIC0tZ2l0IGEv
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxl
ci5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9Nb2NrV2ViU3BlZWNoSW5wdXRD
b250cm9sbGVyLmNwcAppbmRleCA3MTYyMjJmOWFjY2ZlOGZmYmUzNTk5Nzg1MzgzNzY0NzA2YzY0
ZTFlLi4xM2M4ZmYxZWM0YzFjZGU1NTA3NjY5OGRmY2ZlNWU4NzEyNmE4MmViIDEwMDY0NAotLS0g
YS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9Nb2NrV2ViU3BlZWNoSW5wdXRDb250cm9s
bGVyLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9Nb2NrV2ViU3BlZWNo
SW5wdXRDb250cm9sbGVyLmNwcApAQCAtNTIsNyArNTIsNyBAQCB2b2lkIE1vY2tXZWJTcGVlY2hJ
bnB1dENvbnRyb2xsZXI6OmFkZE1vY2tSZWNvZ25pdGlvblJlc3VsdChjb25zdCBXZWJTdHJpbmcm
IHJlcwogICAgICAgICBTdHJpbmcgbGFuZ1N0cmluZyA9IFN0cmluZzo6ZnJvbVVURjgobGFuZ3Vh
Z2UudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIGlmICghbV9yZWNvZ25pdGlvblJlc3VsdHMuY29u
dGFpbnMobGFuZ1N0cmluZykpCiAgICAgICAgICAgICBtX3JlY29nbml0aW9uUmVzdWx0cy5zZXQo
bGFuZ1N0cmluZywgVmVjdG9yPFdlYlNwZWVjaElucHV0UmVzdWx0PigpKTsKLSAgICAgICAgbV9y
ZWNvZ25pdGlvblJlc3VsdHMuZmluZChsYW5nU3RyaW5nKS0+c2Vjb25kLmFwcGVuZChyZXMpOwor
ICAgICAgICBtX3JlY29nbml0aW9uUmVzdWx0cy5maW5kKGxhbmdTdHJpbmcpLT52YWx1ZS5hcHBl
bmQocmVzKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL05vdGlmaWNhdGlvblByZXNlbnRlci5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9Ob3RpZmljYXRpb25QcmVzZW50ZXIuY3BwCmluZGV4IDBjNTQwMGY1ZTllOGY3MTcw
ZWNmNTk5YTgxYmQ0MjZmYmQ3NzI5MWQuLmEyMTU4OGY3NDRlNWMzZjVhYjcwZGJkYjAzYzI3NWM1
MDcwOGYwM2EgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL05vdGlm
aWNhdGlvblByZXNlbnRlci5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
Tm90aWZpY2F0aW9uUHJlc2VudGVyLmNwcApAQCAtNzUsNyArNzUsNyBAQCBib29sIE5vdGlmaWNh
dGlvblByZXNlbnRlcjo6c2ltdWxhdGVDbGljayhjb25zdCBXZWJTdHJpbmcmIHRpdGxlKQogICAg
IGlmIChtX2FjdGl2ZU5vdGlmaWNhdGlvbnMuZmluZChpZCkgPT0gbV9hY3RpdmVOb3RpZmljYXRp
b25zLmVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgY29uc3QgV2ViTm90
aWZpY2F0aW9uJiBub3RpZmljYXRpb24gPSBtX2FjdGl2ZU5vdGlmaWNhdGlvbnMuZmluZChpZCkt
PnNlY29uZDsKKyAgICBjb25zdCBXZWJOb3RpZmljYXRpb24mIG5vdGlmaWNhdGlvbiA9IG1fYWN0
aXZlTm90aWZpY2F0aW9ucy5maW5kKGlkKS0+dmFsdWU7CiAgICAgV2ViTm90aWZpY2F0aW9uIGV2
ZW50VGFyZ2V0KG5vdGlmaWNhdGlvbik7CiAgICAgZXZlbnRUYXJnZXQuZGlzcGF0Y2hDbGlja0V2
ZW50KCk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC04OSw3ICs4OSw3IEBAIGJvb2wgTm90aWZpY2F0
aW9uUHJlc2VudGVyOjpzaG93KGNvbnN0IFdlYk5vdGlmaWNhdGlvbiYgbm90aWZpY2F0aW9uKQog
ICAgICAgICBXVEY6OlN0cmluZyByZXBsYWNlSWQobm90aWZpY2F0aW9uLnJlcGxhY2VJZCgpLmRh
dGEoKSwgbm90aWZpY2F0aW9uLnJlcGxhY2VJZCgpLmxlbmd0aCgpKTsKICAgICAgICAgaWYgKG1f
cmVwbGFjZW1lbnRzLmZpbmQocmVwbGFjZUlkKSAhPSBtX3JlcGxhY2VtZW50cy5lbmQoKSkKICAg
ICAgICAgICAgIHByaW50ZigiUkVQTEFDSU5HIE5PVElGSUNBVElPTiAlc1xuIiwKLSAgICAgICAg
ICAgICAgICAgICBtX3JlcGxhY2VtZW50cy5maW5kKHJlcGxhY2VJZCktPnNlY29uZC51dGY4KCku
ZGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICBtX3JlcGxhY2VtZW50cy5maW5kKHJlcGxhY2VJ
ZCktPnZhbHVlLnV0ZjgoKS5kYXRhKCkpOwogCiAgICAgICAgIG1fcmVwbGFjZW1lbnRzLnNldChy
ZXBsYWNlSWQsIFdURjo6U3RyaW5nKGlkZW50aWZpZXIuZGF0YSgpLCBpZGVudGlmaWVyLmxlbmd0
aCgpKSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
VGVzdFJ1bm5lci9DcHBCb3VuZENsYXNzLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL1Rlc3RSdW5uZXIvQ3BwQm91bmRDbGFzcy5jcHAKaW5kZXggOWI0YTNiNjQ2NDVkMDU3YjQx
NzJlMWM3ZGZhMDdjN2E2MmU3N2NmOC4uMWIyOWQyYjBmNTVkMDFmNzM4NzE0NTc4NzdmOWRiZGYw
NmYxYjQ5MSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1
bm5lci9DcHBCb3VuZENsYXNzLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9UZXN0UnVubmVyL0NwcEJvdW5kQ2xhc3MuY3BwCkBAIC0yMDMsMTAgKzIwMywxMCBAQCBib29s
IENwcE5QT2JqZWN0OjpzZXRQcm9wZXJ0eShOUE9iamVjdCogbnBPYmosIE5QSWRlbnRpZmllciBp
ZGVudCwgY29uc3QgTlBWYXJpYQogQ3BwQm91bmRDbGFzczo6fkNwcEJvdW5kQ2xhc3MoKQogewog
ICAgIGZvciAoTWV0aG9kTGlzdDo6aXRlcmF0b3IgaSA9IG1fbWV0aG9kcy5iZWdpbigpOyBpICE9
IG1fbWV0aG9kcy5lbmQoKTsgKytpKQotICAgICAgICBkZWxldGUgaS0+c2Vjb25kOworICAgICAg
ICBkZWxldGUgaS0+dmFsdWU7CiAKICAgICBmb3IgKFByb3BlcnR5TGlzdDo6aXRlcmF0b3IgaSA9
IG1fcHJvcGVydGllcy5iZWdpbigpOyBpICE9IG1fcHJvcGVydGllcy5lbmQoKTsgKytpKQotICAg
ICAgICBkZWxldGUgaS0+c2Vjb25kOworICAgICAgICBkZWxldGUgaS0+dmFsdWU7CiAKICAgICAv
LyBVbnJlZ2lzdGVyIG91cnNlbHZlcyBpZiB3ZSB3ZXJlIGJvdW5kIHRvIGEgZnJhbWUuCiAgICAg
aWYgKG1fYm91bmRUb0ZyYW1lKQpAQCAtMjM3LDcgKzIzNyw3IEBAIGJvb2wgQ3BwQm91bmRDbGFz
czo6aW52b2tlKE5QSWRlbnRpZmllciBpZGVudCwKICAgICAgICAgfQogICAgICAgICBjYWxsYmFj
ayA9IG1fZmFsbGJhY2tDYWxsYmFjay5nZXQoKTsKICAgICB9IGVsc2UKLSAgICAgICAgY2FsbGJh
Y2sgPSAoKm1ldGhvZCkuc2Vjb25kOworICAgICAgICBjYWxsYmFjayA9ICgqbWV0aG9kKS52YWx1
ZTsKIAogICAgIC8vIEJ1aWxkIGEgQ3BwQXJndW1lbnRMaXN0IGFyZ3VtZW50IHZlY3RvciBmcm9t
IHRoZSBOUFZhcmlhbnRzIGNvbWluZyBpbi4KICAgICBDcHBBcmd1bWVudExpc3QgY3BwQXJndW1l
bnRzKGFyZ3VtZW50Q291bnQpOwpAQCAtMjYwLDcgKzI2MCw3IEBAIGJvb2wgQ3BwQm91bmRDbGFz
czo6Z2V0UHJvcGVydHkoTlBJZGVudGlmaWVyIGlkZW50LCBOUFZhcmlhbnQqIHJlc3VsdCkgY29u
c3QKICAgICB9CiAKICAgICBDcHBWYXJpYW50IGNwcFZhbHVlOwotICAgIGlmICghY2FsbGJhY2st
PnNlY29uZC0+Z2V0VmFsdWUoJmNwcFZhbHVlKSkKKyAgICBpZiAoIWNhbGxiYWNrLT52YWx1ZS0+
Z2V0VmFsdWUoJmNwcFZhbHVlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGNwcFZhbHVl
LmNvcHlUb05QVmFyaWFudChyZXN1bHQpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMjc0LDcgKzI3
NCw3IEBAIGJvb2wgQ3BwQm91bmRDbGFzczo6c2V0UHJvcGVydHkoTlBJZGVudGlmaWVyIGlkZW50
LCBjb25zdCBOUFZhcmlhbnQqIHZhbHVlKQogCiAgICAgQ3BwVmFyaWFudCBjcHBWYWx1ZTsKICAg
ICBjcHBWYWx1ZS5zZXQoKnZhbHVlKTsKLSAgICByZXR1cm4gKCpjYWxsYmFjaykuc2Vjb25kLT5z
ZXRWYWx1ZShjcHBWYWx1ZSk7CisgICAgcmV0dXJuICgqY2FsbGJhY2spLnZhbHVlLT5zZXRWYWx1
ZShjcHBWYWx1ZSk7CiB9CiAKIHZvaWQgQ3BwQm91bmRDbGFzczo6YmluZENhbGxiYWNrKGNvbnN0
IHN0cmluZyYgbmFtZSwgQ2FsbGJhY2sqIGNhbGxiYWNrKQpAQCAtMjgyLDcgKzI4Miw3IEBAIHZv
aWQgQ3BwQm91bmRDbGFzczo6YmluZENhbGxiYWNrKGNvbnN0IHN0cmluZyYgbmFtZSwgQ2FsbGJh
Y2sqIGNhbGxiYWNrKQogICAgIE5QSWRlbnRpZmllciBpZGVudCA9IFdlYkJpbmRpbmdzOjpnZXRT
dHJpbmdJZGVudGlmaWVyKG5hbWUuY19zdHIoKSk7CiAgICAgTWV0aG9kTGlzdDo6aXRlcmF0b3Ig
b2xkQ2FsbGJhY2sgPSBtX21ldGhvZHMuZmluZChpZGVudCk7CiAgICAgaWYgKG9sZENhbGxiYWNr
ICE9IG1fbWV0aG9kcy5lbmQoKSkgewotICAgICAgICBkZWxldGUgb2xkQ2FsbGJhY2stPnNlY29u
ZDsKKyAgICAgICAgZGVsZXRlIG9sZENhbGxiYWNrLT52YWx1ZTsKICAgICAgICAgaWYgKCFjYWxs
YmFjaykgewogICAgICAgICAgICAgbV9tZXRob2RzLnJlbW92ZShvbGRDYWxsYmFjayk7CiAgICAg
ICAgICAgICByZXR1cm47CkBAIC0zMDksNyArMzA5LDcgQEAgdm9pZCBDcHBCb3VuZENsYXNzOjpi
aW5kUHJvcGVydHkoY29uc3Qgc3RyaW5nJiBuYW1lLCBQcm9wZXJ0eUNhbGxiYWNrKiBjYWxsYmFj
aykKICAgICBOUElkZW50aWZpZXIgaWRlbnQgPSBXZWJCaW5kaW5nczo6Z2V0U3RyaW5nSWRlbnRp
ZmllcihuYW1lLmNfc3RyKCkpOwogICAgIFByb3BlcnR5TGlzdDo6aXRlcmF0b3Igb2xkQ2FsbGJh
Y2sgPSBtX3Byb3BlcnRpZXMuZmluZChpZGVudCk7CiAgICAgaWYgKG9sZENhbGxiYWNrICE9IG1f
cHJvcGVydGllcy5lbmQoKSkgewotICAgICAgICBkZWxldGUgb2xkQ2FsbGJhY2stPnNlY29uZDsK
KyAgICAgICAgZGVsZXRlIG9sZENhbGxiYWNrLT52YWx1ZTsKICAgICAgICAgaWYgKCFjYWxsYmFj
aykgewogICAgICAgICAgICAgbV9wcm9wZXJ0aWVzLnJlbW92ZShvbGRDYWxsYmFjayk7CiAgICAg
ICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9XZWJQcmVmZXJlbmNlcy5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQ
cmVmZXJlbmNlcy5jcHAKaW5kZXggYzRkZTBhYmMxNDQ1MGExMDlhYWNhN2Y5NzdhMjllODkzOWIy
NmNlNC4uNmVjMGU0MzRkZGY0ZTFmZjRiYzgzZDdlZTk3NjIxZjJmODYwNDUxOCAxMDA2NDQKLS0t
IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViUHJlZmVyZW5jZXMuY3BwCisrKyBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZlcmVuY2VzLmNwcApAQCAtMTU2
LDkgKzE1Niw5IEBAIHR5cGVkZWYgdm9pZCAoKlNldEZvbnRGYW1pbHlXcmFwcGVyKShXZWJTZXR0
aW5ncyosIGNvbnN0IFdlYlN0cmluZyYsIFVTY3JpcHRDb2RlCiBzdGF0aWMgdm9pZCBhcHBseUZv
bnRNYXAoV2ViU2V0dGluZ3MqIHNldHRpbmdzLCBjb25zdCBXZWJQcmVmZXJlbmNlczo6U2NyaXB0
Rm9udEZhbWlseU1hcCYgbWFwLCBTZXRGb250RmFtaWx5V3JhcHBlciBzZXR0ZXIpCiB7CiAgICAg
Zm9yIChXZWJQcmVmZXJlbmNlczo6U2NyaXB0Rm9udEZhbWlseU1hcDo6Y29uc3RfaXRlcmF0b3Ig
aXRlciA9IG1hcC5iZWdpbigpOyBpdGVyICE9IG1hcC5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAg
IGNvbnN0IFdlYlN0cmluZyYgZm9udCA9IGl0ZXItPnNlY29uZDsKKyAgICAgICAgY29uc3QgV2Vi
U3RyaW5nJiBmb250ID0gaXRlci0+dmFsdWU7CiAgICAgICAgIGlmICghZm9udC5pc051bGwoKSAm
JiAhZm9udC5pc0VtcHR5KCkpCi0gICAgICAgICAgICAoKnNldHRlcikoc2V0dGluZ3MsIGZvbnQs
IHN0YXRpY19jYXN0PFVTY3JpcHRDb2RlPihpdGVyLT5maXJzdCkpOworICAgICAgICAgICAgKCpz
ZXR0ZXIpKHNldHRpbmdzLCBmb250LCBzdGF0aWNfY2FzdDxVU2NyaXB0Q29kZT4oaXRlci0+a2V5
KSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9XZWJWaWV3SG9zdC5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3
SG9zdC5jcHAKaW5kZXggZGIwZWE1ZWVmZjI5ZmFmZGJjMTAyYTExZjU2ZDBmODI2YTgyYTZmNi4u
NGUzZTU5MmY0YjlhZDhlYzZlMGViN2Y1MmY1NzBiYmVhYjMxMDMxZSAxMDA2NDQKLS0tIGEvVG9v
bHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuY3BwCisrKyBiL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcApAQCAtMTc2Myw3ICsxNzYzLDcg
QEAgdm9pZCBXZWJWaWV3SG9zdDo6cHJpbnRGcmFtZVVzZXJHZXN0dXJlU3RhdHVzKFdlYkZyYW1l
KiB3ZWJmcmFtZSwgY29uc3QgY2hhciogbXMKIHZvaWQgV2ViVmlld0hvc3Q6OnByaW50UmVzb3Vy
Y2VEZXNjcmlwdGlvbih1bnNpZ25lZCBpZGVudGlmaWVyKQogewogICAgIFJlc291cmNlTWFwOjpp
dGVyYXRvciBpdCA9IG1fcmVzb3VyY2VJZGVudGlmaWVyTWFwLmZpbmQoaWRlbnRpZmllcik7Ci0g
ICAgcHJpbnRmKCIlcyIsIGl0ICE9IG1fcmVzb3VyY2VJZGVudGlmaWVyTWFwLmVuZCgpID8gaXQt
PnNlY29uZC5jX3N0cigpIDogIjx1bmtub3duPiIpOworICAgIHByaW50ZigiJXMiLCBpdCAhPSBt
X3Jlc291cmNlSWRlbnRpZmllck1hcC5lbmQoKSA/IGl0LT52YWx1ZS5jX3N0cigpIDogIjx1bmtu
b3duPiIpOwogfQogCiB2b2lkIFdlYlZpZXdIb3N0OjpzZXRQZW5kaW5nRXh0cmFEYXRhKFBhc3NP
d25QdHI8VGVzdFNoZWxsRXh0cmFEYXRhPiBleHRyYURhdGEpCmRpZmYgLS1naXQgYS9Ub29scy9E
dW1wUmVuZGVyVHJlZS93aW4vQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJXaW4uY3BwIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvd2luL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyV2luLmNwcAppbmRleCA3
ZjlhYTZjYzJlZTkyOWIyYmY4ZWE0MTZmNWQ2NWJiMDU2ZTNlYWQxLi5lYjM4YjU0MzVjMTY5ZDJi
ZGZiMDU2OGM2M2VhMjAzYjVjNmZhM2RjIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJl
ZS93aW4vQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJXaW4uY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL3dpbi9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlcldpbi5jcHAKQEAgLTU4LDcgKzU4LDcg
QEAgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6On5BY2Nlc3NpYmlsaXR5Q29udHJvbGxlcigpCiAg
ICAgICAgIFVuaG9va1dpbkV2ZW50KG1fbm90aWZpY2F0aW9uc0V2ZW50SG9vayk7CiAKICAgICBm
b3IgKEhhc2hNYXA8UGxhdGZvcm1VSUVsZW1lbnQsIEpTT2JqZWN0UmVmPjo6aXRlcmF0b3IgaXQg
PSBtX25vdGlmaWNhdGlvbkxpc3RlbmVycy5iZWdpbigpOyBpdCAhPSBtX25vdGlmaWNhdGlvbkxp
c3RlbmVycy5lbmQoKTsgKytpdCkKLSAgICAgICAgSlNWYWx1ZVVucHJvdGVjdChmcmFtZS0+Z2xv
YmFsQ29udGV4dCgpLCBpdC0+c2Vjb25kKTsKKyAgICAgICAgSlNWYWx1ZVVucHJvdGVjdChmcmFt
ZS0+Z2xvYmFsQ29udGV4dCgpLCBpdC0+dmFsdWUpOwogfQogCiBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjplbGVtZW50QXRQb2ludChpbnQgeCwgaW50IHkp
CkBAIC0yOTMsNyArMjkzLDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cmVtb3Zl
Tm90aWZpY2F0aW9uTGlzdGVuZXIoKQogdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6d2lu
Tm90aWZpY2F0aW9uUmVjZWl2ZWQoUGxhdGZvcm1VSUVsZW1lbnQgZWxlbWVudCwgY29uc3Qgc3Ry
aW5nJiBldmVudE5hbWUpCiB7CiAgICAgZm9yIChIYXNoTWFwPFBsYXRmb3JtVUlFbGVtZW50LCBK
U09iamVjdFJlZj46Oml0ZXJhdG9yIGl0ID0gbV9ub3RpZmljYXRpb25MaXN0ZW5lcnMuYmVnaW4o
KTsgaXQgIT0gbV9ub3RpZmljYXRpb25MaXN0ZW5lcnMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAg
Q09NUHRyPElTZXJ2aWNlUHJvdmlkZXI+IHRoaXNTZXJ2aWNlUHJvdmlkZXIoUXVlcnksIGl0LT5m
aXJzdCk7CisgICAgICAgIENPTVB0cjxJU2VydmljZVByb3ZpZGVyPiB0aGlzU2VydmljZVByb3Zp
ZGVyKFF1ZXJ5LCBpdC0+a2V5KTsKICAgICAgICAgaWYgKCF0aGlzU2VydmljZVByb3ZpZGVyKQog
ICAgICAgICAgICAgY29udGludWU7CiAKQEAgLTMxNiw3ICszMTYsNyBAQCB2b2lkIEFjY2Vzc2li
aWxpdHlDb250cm9sbGVyOjp3aW5Ob3RpZmljYXRpb25SZWNlaXZlZChQbGF0Zm9ybVVJRWxlbWVu
dCBlbGVtZW50LAogCiAgICAgICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBqc05vdGlmaWNh
dGlvbihBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoZXZlbnROYW1lLmNfc3Ry
KCkpKTsKICAgICAgICAgSlNWYWx1ZVJlZiBhcmd1bWVudCA9IEpTVmFsdWVNYWtlU3RyaW5nKGZy
YW1lLT5nbG9iYWxDb250ZXh0KCksIGpzTm90aWZpY2F0aW9uLmdldCgpKTsKLSAgICAgICAgSlNP
YmplY3RDYWxsQXNGdW5jdGlvbihmcmFtZS0+Z2xvYmFsQ29udGV4dCgpLCBpdC0+c2Vjb25kLCBO
VUxMLCAxLCAmYXJndW1lbnQsIE5VTEwpOworICAgICAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9u
KGZyYW1lLT5nbG9iYWxDb250ZXh0KCksIGl0LT52YWx1ZSwgMCwgMSwgJmFyZ3VtZW50LCAwKTsK
ICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9SZXNvdXJj
ZUxvYWREZWxlZ2F0ZS5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vUmVzb3VyY2VMb2Fk
RGVsZWdhdGUuY3BwCmluZGV4IDkwYjlhZTBmY2MzZjYxN2Y0ZmY2NzU1NjJkYTI5NmVlNWUyYmJj
MzMuLjY4NTk3ODBmMzkyZjE4ZTMwNjYxYjA0OTI3YjRjY2NiZjNjNDcxYTIgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9SZXNvdXJjZUxvYWREZWxlZ2F0ZS5jcHAKKysrIGIv
VG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1Jlc291cmNlTG9hZERlbGVnYXRlLmNwcApAQCAtNjYs
NyArNjYsNyBAQCB3c3RyaW5nIFJlc291cmNlTG9hZERlbGVnYXRlOjpkZXNjcmlwdGlvblN1aXRh
YmxlRm9yVGVzdFJlc3VsdCh1bnNpZ25lZCBsb25nIGlkZQogICAgIGlmIChpdCA9PSBtX3VybE1h
cC5lbmQoKSkKICAgICAgICAgcmV0dXJuIEwiPHVua25vd24+IjsKIAotICAgIHJldHVybiB1cmxT
dWl0YWJsZUZvclRlc3RSZXN1bHQoaXQtPnNlY29uZCk7CisgICAgcmV0dXJuIHVybFN1aXRhYmxl
Rm9yVGVzdFJlc3VsdChpdC0+dmFsdWUpOwogfQogCiB3c3RyaW5nIFJlc291cmNlTG9hZERlbGVn
YXRlOjpkZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChJV2ViVVJMUmVxdWVzdCogcmVx
dWVzdCkKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9UZXN0UnVubmVyV2lu
LmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9UZXN0UnVubmVyV2luLmNwcAppbmRleCBh
MmMxNWUzMGRjMWUwNjBiZjU4NTM1YWRiNzRiODRiOTA3ODhlNGMxLi45Njg2MDI2MmVlYWQwOGZm
Yzg5ZjkwOWM5Mzk3NDg1OTQ5MzQzYTc5IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJl
ZS93aW4vVGVzdFJ1bm5lcldpbi5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1Rl
c3RSdW5uZXJXaW4uY3BwCkBAIC0xMjQ2LDggKzEyNDYsOCBAQCB1bnNpZ25lZCB3b3JsZElERm9y
V29ybGQoSVdlYlNjcmlwdFdvcmxkKiB3b3JsZCkKIHsKICAgICBXb3JsZE1hcDo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gd29ybGRNYXAoKS5lbmQoKTsKICAgICBmb3IgKFdvcmxkTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IHdvcmxkTWFwKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAg
ICAgIGlmIChpdC0+c2Vjb25kID09IHdvcmxkKQotICAgICAgICAgICAgcmV0dXJuIGl0LT5maXJz
dDsKKyAgICAgICAgaWYgKGl0LT52YWx1ZSA9PSB3b3JsZCkKKyAgICAgICAgICAgIHJldHVybiBp
dC0+a2V5OwogICAgIH0KIAogICAgIHJldHVybiAwOwpAQCAtMTI3MSw3ICsxMjcxLDcgQEAgdm9p
ZCBUZXN0UnVubmVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCh1bnNpZ25lZCB3b3Js
ZElELCBKU09iamVjdFJlZiBnbG8KICAgICAgICAgaWYgKEZBSUxFRChXZWJLaXRDcmVhdGVJbnN0
YW5jZShfX3V1aWRvZihXZWJTY3JpcHRXb3JsZCksIDAsIF9fdXVpZG9mKHdvcmxkKSwgcmVpbnRl
cnByZXRfY2FzdDx2b2lkKio+KCZ3b3JsZCkpKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9
IGVsc2UgewotICAgICAgICBDT01QdHI8SVdlYlNjcmlwdFdvcmxkPiYgd29ybGRTbG90ID0gd29y
bGRNYXAoKS5hZGQod29ybGRJRCwgMCkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgQ09NUHRy
PElXZWJTY3JpcHRXb3JsZD4mIHdvcmxkU2xvdCA9IHdvcmxkTWFwKCkuYWRkKHdvcmxkSUQsIDAp
Lml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgaWYgKCF3b3JsZFNsb3QgJiYgRkFJTEVEKFdlYktp
dENyZWF0ZUluc3RhbmNlKF9fdXVpZG9mKFdlYlNjcmlwdFdvcmxkKSwgMCwgX191dWlkb2Yod29y
bGRTbG90KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZ3b3JsZFNsb3QpKSkpCiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIHdvcmxkID0gd29ybGRTbG90OwpkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL0RPTVdpbmRvd0V4dGVuc2lvbkJhc2ljX0J1
bmRsZS5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvRE9NV2luZG93RXh0
ZW5zaW9uQmFzaWNfQnVuZGxlLmNwcAppbmRleCA5OGJmYWIzNWFmNDZjZjQ5YzYyYmNjOWIwYTg1
OTQ1N2Y0OGNjMWMxLi41YjEyOTZmNDdkMTlkMjhiOWRlN2ZjZThkMTMxYWE0MDU0NzZiZGQxIDEw
MDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvRE9NV2luZG93RXh0
ZW5zaW9uQmFzaWNfQnVuZGxlLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdDIvRE9NV2luZG93RXh0ZW5zaW9uQmFzaWNfQnVuZGxlLmNwcApAQCAtMTcxLDggKzE3MSw4
IEBAIHZvaWQgRE9NV2luZG93RXh0ZW5zaW9uQmFzaWM6OndpbGxEZXN0cm95UGFnZShXS0J1bmRs
ZVJlZiwgV0tCdW5kbGVQYWdlUmVmKQogICAgIEhhc2hNYXA8V0tCdW5kbGVET01XaW5kb3dFeHRl
bnNpb25SZWYsIGludD46Oml0ZXJhdG9yIGl0ID0gbV9leHRlbnNpb25Ub1JlY29yZE1hcC5iZWdp
bigpOwogICAgIEhhc2hNYXA8V0tCdW5kbGVET01XaW5kb3dFeHRlbnNpb25SZWYsIGludD46Oml0
ZXJhdG9yIGVuZCA9IG1fZXh0ZW5zaW9uVG9SZWNvcmRNYXAuZW5kKCk7CiAgICAgZm9yICg7IGl0
ICE9IGVuZDsgKytpdCkgewotICAgICAgICB1cGRhdGVFeHRlbnNpb25TdGF0ZVJlY29yZChpdC0+
Zmlyc3QsIFJlbW92ZWQpOwotICAgICAgICBXS1JlbGVhc2UoaXQtPmZpcnN0KTsKKyAgICAgICAg
dXBkYXRlRXh0ZW5zaW9uU3RhdGVSZWNvcmQoaXQtPmtleSwgUmVtb3ZlZCk7CisgICAgICAgIFdL
UmVsZWFzZShpdC0+a2V5KTsKICAgICB9CiAKICAgICBtX2V4dGVuc2lvblRvUmVjb3JkTWFwLmNs
ZWFyKCk7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvRE9N
V2luZG93RXh0ZW5zaW9uTm9DYWNoZV9CdW5kbGUuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXQyL0RPTVdpbmRvd0V4dGVuc2lvbk5vQ2FjaGVfQnVuZGxlLmNwcAppbmRleCA4
ZjZjZDdiMzczNWI1YWUyNzlkMGFkYjc3MTg1YzVkMjgwNzExY2FlLi40MTFlMTE1ZWE0NGZiZTQ4
NzBlN2YxZjMxZDkwNWU4NTc3ZjA3ZTIyIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdDIvRE9NV2luZG93RXh0ZW5zaW9uTm9DYWNoZV9CdW5kbGUuY3BwCisrKyBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9ET01XaW5kb3dFeHRlbnNpb25Ob0Nh
Y2hlX0J1bmRsZS5jcHAKQEAgLTE3OCw4ICsxNzgsOCBAQCB2b2lkIERPTVdpbmRvd0V4dGVuc2lv
bk5vQ2FjaGU6OndpbGxEZXN0cm95UGFnZShXS0J1bmRsZVJlZiwgV0tCdW5kbGVQYWdlUmVmKQog
ICAgIEhhc2hNYXA8V0tCdW5kbGVET01XaW5kb3dFeHRlbnNpb25SZWYsIGludD46Oml0ZXJhdG9y
IGl0ID0gbV9leHRlbnNpb25Ub1JlY29yZE1hcC5iZWdpbigpOwogICAgIEhhc2hNYXA8V0tCdW5k
bGVET01XaW5kb3dFeHRlbnNpb25SZWYsIGludD46Oml0ZXJhdG9yIGVuZCA9IG1fZXh0ZW5zaW9u
VG9SZWNvcmRNYXAuZW5kKCk7CiAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAg
ICB1cGRhdGVFeHRlbnNpb25TdGF0ZVJlY29yZChpdC0+Zmlyc3QsIFJlbW92ZWQpOwotICAgICAg
ICBXS1JlbGVhc2UoaXQtPmZpcnN0KTsKKyAgICAgICAgdXBkYXRlRXh0ZW5zaW9uU3RhdGVSZWNv
cmQoaXQtPmtleSwgUmVtb3ZlZCk7CisgICAgICAgIFdLUmVsZWFzZShpdC0+a2V5KTsKICAgICB9
CiAKICAgICBtX2V4dGVuc2lvblRvUmVjb3JkTWFwLmNsZWFyKCk7CmRpZmYgLS1naXQgYS9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwIGIvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcAppbmRleCBiOTRl
NWQ0NzYzYTExOGM0ZWQ2ZDg1MmQ0MTc4NDJhMDVlMTRiNDRkLi5mODQyOTc4NDFmZjc0MjE0ZGJh
YWEyZDJmMTlkY2Q3MmU0YTcwNTk0IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHAKQEAgLTQ1NSw4ICs0NTUsOCBAQCB1bnNp
Z25lZCBUZXN0UnVubmVyOjp3b3JsZElERm9yV29ybGQoV0tCdW5kbGVTY3JpcHRXb3JsZFJlZiB3
b3JsZCkKIHsKICAgICBXb3JsZE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gd29ybGRNYXAoKS5l
bmQoKTsKICAgICBmb3IgKFdvcmxkTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHdvcmxkTWFwKCku
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kID09IHdv
cmxkKQotICAgICAgICAgICAgcmV0dXJuIGl0LT5maXJzdDsKKyAgICAgICAgaWYgKGl0LT52YWx1
ZSA9PSB3b3JsZCkKKyAgICAgICAgICAgIHJldHVybiBpdC0+a2V5OwogICAgIH0KIAogICAgIHJl
dHVybiAwOwpAQCAtNDcwLDcgKzQ3MCw3IEBAIHZvaWQgVGVzdFJ1bm5lcjo6ZXZhbHVhdGVTY3Jp
cHRJbklzb2xhdGVkV29ybGQoSlNDb250ZXh0UmVmIGNvbnRleHQsIHVuc2lnbmVkIHdvCiAgICAg
aWYgKCF3b3JsZElEKQogICAgICAgICB3b3JsZC5hZG9wdChXS0J1bmRsZVNjcmlwdFdvcmxkQ3Jl
YXRlV29ybGQoKSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLQnVuZGxlU2Ny
aXB0V29ybGRSZWY+JiB3b3JsZFNsb3QgPSB3b3JsZE1hcCgpLmFkZCh3b3JsZElELCAwKS5pdGVy
YXRvci0+c2Vjb25kOworICAgICAgICBXS1JldGFpblB0cjxXS0J1bmRsZVNjcmlwdFdvcmxkUmVm
PiYgd29ybGRTbG90ID0gd29ybGRNYXAoKS5hZGQod29ybGRJRCwgMCkuaXRlcmF0b3ItPnZhbHVl
OwogICAgICAgICBpZiAoIXdvcmxkU2xvdCkKICAgICAgICAgICAgIHdvcmxkU2xvdC5hZG9wdChX
S0J1bmRsZVNjcmlwdFdvcmxkQ3JlYXRlV29ybGQoKSk7CiAgICAgICAgIHdvcmxkID0gd29ybGRT
bG90Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160850</attachid>
            <date>2012-08-27 16:22:11 -0700</date>
            <delta_ts>2012-08-27 16:23:22 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-82784-20120827202201.patch</filename>
            <type>text/plain</type>
            <size>702290</size>
            <attacher name="Caio Marcelo de Oliveira Filho">cmarcelo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI2ODE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
OTdkM2U4OWQzYWQzNjEzNGY3OTQ5ZmUxMTA5OTFhZGM5ZWU0NzYwLi4zNGE3ODNjMGUzOTQ5MGQz
YzRlMjhmODZmOTg0MTQyOTc0OWE1YzgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMTggQEAKKzIwMTItMDgtMjcgIENhaW8gTWFyY2VsbyBkZSBPbGl2ZWlyYSBGaWxobyAg
PGNhaW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KKworICAgICAgICBSZW5hbWUgZmlyc3Qvc2Vj
b25kIHRvIGtleS92YWx1ZSBpbiBIYXNoTWFwIGl0ZXJhdG9ycworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI3ODQKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0Lmg6Cisg
ICAgICAgIChKU0M6OkpTQ2FsbGJhY2tPYmplY3REYXRhOjpKU1ByaXZhdGVQcm9wZXJ0eU1hcDo6
Z2V0UHJpdmF0ZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNDYWxsYmFja09iamVjdERhdGE6
OkpTUHJpdmF0ZVByb3BlcnR5TWFwOjpzZXRQcml2YXRlUHJvcGVydHkpOgorICAgICAgICAoSlND
OjpKU0NhbGxiYWNrT2JqZWN0RGF0YTo6SlNQcml2YXRlUHJvcGVydHlNYXA6OnZpc2l0Q2hpbGRy
ZW4pOgorICAgICAgICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmg6CisgICAgICAg
IChKU0M6Ojo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgICogQVBJL0pTQ2xhc3NSZWYu
Y3BwOgorICAgICAgICAoT3BhcXVlSlNDbGFzczo6fk9wYXF1ZUpTQ2xhc3MpOgorICAgICAgICAo
T3BhcXVlSlNDbGFzc0NvbnRleHREYXRhOjpPcGFxdWVKU0NsYXNzQ29udGV4dERhdGEpOgorICAg
ICAgICAoT3BhcXVlSlNDbGFzczo6Y29udGV4dERhdGEpOgorICAgICAgICAqIGJ5dGVjb2RlL0Nv
ZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcCk6CisgICAgICAgIChK
U0M6OkV2YWxDb2RlQ2FjaGU6OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpuYW1lRm9yUmVnaXN0ZXIpOgorICAgICAgICAqIGJ5dGVjb2RlL0p1bXBUYWJsZS5oOgor
ICAgICAgICAoSlNDOjpTdHJpbmdKdW1wVGFibGU6Om9mZnNldEZvclZhbHVlKToKKyAgICAgICAg
KEpTQzo6U3RyaW5nSnVtcFRhYmxlOjpjdGlGb3JWYWx1ZSk6CisgICAgICAgICogYnl0ZWNvZGUv
TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3BwOgorICAgICAgICAoSlNDOjpMYXp5T3BlcmFuZFZh
bHVlUHJvZmlsZVBhcnNlcjo6Z2V0SWZQcmVzZW50KToKKyAgICAgICAgKiBieXRlY29kZS9TYW1w
bGluZ1Rvb2wuY3BwOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1Rvb2w6OmR1bXApOgorICAgICAg
ICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5
dGVjb2RlR2VuZXJhdG9yOjphZGRWYXIpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRv
cjo6YWRkR2xvYmFsVmFyKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmFkZENv
bnN0YW50KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmFkZENvbnN0YW50VmFs
dWUpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdExvYWQpOgorICAgICAg
ICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6YWRkU3RyaW5nQ29uc3RhbnQpOgorICAgICAgICAo
SlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdExhenlOZXdGdW5jdGlvbik6CisgICAgICAgICog
Ynl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHA6CisgICAgICAgIChKU0M6OlByb3BlcnR5TGlz
dE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgICogZGVidWdnZXIvRGVidWdnZXIuY3BwOgor
ICAgICAgICAqIGRmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlOjpydW4pOgorICAgICAg
ICAoSlNDOjpERkc6OkFyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2U6Om9ic2VydmVCYWRBcmd1
bWVudHNVc2UpOgorICAgICAgICAoSlNDOjpERkc6OkFyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhh
c2U6Om9ic2VydmVQcm9wZXJBcmd1bWVudHNVc2UpOgorICAgICAgICAoSlNDOjpERkc6OkFyZ3Vt
ZW50c1NpbXBsaWZpY2F0aW9uUGhhc2U6OmlzT0tUb09wdGltaXplKToKKyAgICAgICAgKEpTQzo6
REZHOjpBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlOjpyZW1vdmVBcmd1bWVudHNSZWZlcmVu
Y2luZ1BoYW50b21DaGlsZCk6CisgICAgICAgICogZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6QXNzZW1ibHlIZWxwZXJzOjpkZWNvZGVkQ29kZU1hcEZvcik6
CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlQ2FjaGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZUNhY2hlOjp+Qnl0ZUNvZGVDYWNoZSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVDYWNoZTo6Z2V0KToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpjZWxsQ29uc3RhbnQpOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmVTdGFja0Vu
dHJ5KToKKyAgICAgICAgKiBkZmcvREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2U6OnJ1bik6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlOjpub3RpY2VTdHJ1
Y3R1cmVDaGVjayk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQ2hlY2tIb2lzdGluZ1Bo
YXNlOjpub3RpY2VDbG9iYmVyKToKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAo
SlNDOjpIZWFwOjptYXJrUHJvdGVjdGVkT2JqZWN0cyk6CisgICAgICAgICogaGVhcC9IZWFwLmg6
CisgICAgICAgIChKU0M6OkhlYXA6OmZvckVhY2hQcm90ZWN0ZWRDZWxsKToKKyAgICAgICAgKiBo
ZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUU3R1YlJvdXRpbmVT
ZXQ6Om1hcmtTbG93KToKKyAgICAgICAgKEpTQzo6SklUU3R1YlJvdXRpbmVTZXQ6OmRlbGV0ZVVu
bWFya2VkSmV0dGlzb25lZFN0dWJSb3V0aW5lcyk6CisgICAgICAgICogaGVhcC9NYXJrU3RhY2su
Y3BwOgorICAgICAgICAoSlNDOjpNYXJrU3RhY2s6OmludGVybmFsQXBwZW5kKToKKyAgICAgICAg
KiBoZWFwL1dlYWsuaDoKKyAgICAgICAgKEpTQzo6d2Vha1JlbW92ZSk6CisgICAgICAgICogaml0
L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGUpOgorICAgICAgICAq
IGppdC9KSVRTdHVicy5jcHA6CisgICAgICAgIChKU0M6OkpJVFRodW5rczo6Y3RpU3R1Yik6Cisg
ICAgICAgICogcGFyc2VyL1BhcnNlci5jcHA6CisgICAgICAgIChKU0M6Ojo6cGFyc2VTdHJpY3RP
YmplY3RMaXRlcmFsKToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlLmNwcDoKKyAgICAgICAg
KEpTQzo6ZnVuY3Rpb25OYW1lQ291bnRQYWlyQ29tcGFyYXRvcik6CisgICAgICAgIChKU0M6OlBy
b2ZpbGU6OmRlYnVnUHJpbnREYXRhU2FtcGxlU3R5bGUpOgorICAgICAgICAqIHJ1bnRpbWUvSWRl
bnRpZmllci5jcHA6CisgICAgICAgIChKU0M6OklkZW50aWZpZXI6OmFkZCk6CisgICAgICAgICog
cnVudGltZS9KU0FjdGl2YXRpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0FjdGl2YXRpb246Omdl
dE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpKU0FjdGl2YXRpb246OnN5bWJvbFRh
YmxlUHV0V2l0aEF0dHJpYnV0ZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5jcHA6Cisg
ICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OnB1dCk6CisgICAgICAgIChKU0M6OlNw
YXJzZUFycmF5VmFsdWVNYXA6OnB1dERpcmVjdCk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5
VmFsdWVNYXA6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU0FycmF5OjplbnRlckRp
Y3Rpb25hcnlNb2RlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6ZGVmaW5lT3duTnVtZXJpY1By
b3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRl
eCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcik6Cisg
ICAgICAgIChKU0M6OkpTQXJyYXk6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgpOgorICAg
ICAgICAoSlNDOjpKU0FycmF5OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aCk6Cisg
ICAgICAgIChKU0M6OkpTQXJyYXk6OmRlbGV0ZVByb3BlcnR5QnlJbmRleCk6CisgICAgICAgIChK
U0M6OkpTQXJyYXk6OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpKU0FycmF5
OjpzZXRMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpzb3J0KToKKyAgICAgICAgKEpT
Qzo6SlNBcnJheTo6Y29tcGFjdEZvclNvcnRpbmcpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpj
aGVja0NvbnNpc3RlbmN5KToKKyAgICAgICAgKiBydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3Qu
Y3BwOgorICAgICAgICAoSlNDOjpKU1N5bWJvbFRhYmxlT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5h
bWVzKToKKyAgICAgICAgKiBydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaDoKKyAgICAgICAg
KEpTQzo6c3ltYm9sVGFibGVHZXQpOgorICAgICAgICAoSlNDOjpzeW1ib2xUYWJsZVB1dCk6Cisg
ICAgICAgIChKU0M6OnN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMpOgorICAgICAgICAqIHJ1
bnRpbWUvUmVnRXhwQ2FjaGUuY3BwOgorICAgICAgICAoSlNDOjpSZWdFeHBDYWNoZTo6aW52YWxp
ZGF0ZUNvZGUpOgorICAgICAgICAqIHJ1bnRpbWUvV2Vha0dDTWFwLmg6CisgICAgICAgIChKU0M6
OldlYWtHQ01hcDo6Y2xlYXIpOgorICAgICAgICAoSlNDOjpXZWFrR0NNYXA6OnNldCk6CisgICAg
ICAgICogdG9vbHMvUHJvZmlsZVRyZWVOb2RlLmg6CisgICAgICAgIChKU0M6OlByb2ZpbGVUcmVl
Tm9kZTo6c2FtcGxlQ2hpbGQpOgorICAgICAgICAoSlNDOjpQcm9maWxlVHJlZU5vZGU6OmNoaWxk
Q291bnQpOgorICAgICAgICAoSlNDOjpQcm9maWxlVHJlZU5vZGU6OmR1bXBJbnRlcm5hbCk6Cisg
ICAgICAgIChKU0M6OlByb2ZpbGVUcmVlTm9kZTo6Y29tcGFyZUVudHJpZXMpOgorCiAyMDEyLTA4
LTI3ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CiAKICAgICAgICAg
UmVtb3ZlIHVzZSBvZiBDbGFzc0luZm8gZnJvbSBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5
VmFsT25Bcmd1bWVudHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNl
L1dURi9DaGFuZ2VMb2cKaW5kZXggMjYwMmIzOTk2MDYyZjM4ZGNlOTQ0ZWM2MWQ3M2YyZTdmMDc4
YzQ0OC4uYzA1OTZhNTliNjRkYTYyMGU3OGRlNjA5MTU4MDNmN2M5N2NmZTQxMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1NyBAQAorMjAxMi0wOC0yNyAgQ2FpbyBNYXJjZWxvIGRlIE9saXZlaXJhIEZpbGhvICA8
Y2Fpby5vbGl2ZWlyYUBvcGVuYm9zc2Eub3JnPgorCisgICAgICAgIFJlbmFtZSBmaXJzdC9zZWNv
bmQgdG8ga2V5L3ZhbHVlIGluIEhhc2hNYXAgaXRlcmF0b3JzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Mjc4NAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd3RmL0hhc2hDb3VudGVkU2V0Lmg6CisgICAg
ICAgIChXVEY6Ojo6YWRkKToKKyAgICAgICAgKFdURjo6OjpyZW1vdmUpOgorICAgICAgICAoV1RG
Ojpjb3B5VG9WZWN0b3IpOgorICAgICAgICAqIHd0Zi9IYXNoSXRlcmF0b3JzLmg6CisgICAgICAg
IChXVEY6Okhhc2hUYWJsZUNvbnN0S2V5c0l0ZXJhdG9yOjpnZXQpOgorICAgICAgICAoV1RGOjpI
YXNoVGFibGVDb25zdFZhbHVlc0l0ZXJhdG9yOjpnZXQpOgorICAgICAgICAoV1RGOjpIYXNoVGFi
bGVWYWx1ZXNJdGVyYXRvcjo6Z2V0KToKKyAgICAgICAgKiB3dGYvSGFzaE1hcC5oOgorICAgICAg
ICAoV1RGOjpLZXlWYWx1ZVBhaXJLZXlFeHRyYWN0b3I6OmV4dHJhY3QpOgorICAgICAgICAoV1RG
OjpIYXNoTWFwVmFsdWVUcmFpdHM6OmlzRW1wdHlWYWx1ZSk6CisgICAgICAgIChXVEY6Okhhc2hN
YXBUcmFuc2xhdG9yOjp0cmFuc2xhdGUpOgorICAgICAgICAoV1RGOjpIYXNoTWFwVHJhbnNsYXRv
ckFkYXB0ZXI6OnRyYW5zbGF0ZSk6CisgICAgICAgIChXVEY6Ojo6c2V0KToKKyAgICAgICAgKFdU
Rjo6OjpnZXQpOgorICAgICAgICAoV1RGOjo6OnRha2UpOgorICAgICAgICAoV1RGOjpvcGVyYXRv
cj09KToKKyAgICAgICAgKFdURjo6ZGVsZXRlQWxsVmFsdWVzKToKKyAgICAgICAgKFdURjo6ZGVs
ZXRlQWxsS2V5cyk6CisgICAgICAgIFJlbW92ZSBkZWxldGVBbGxQYWlyRmlyc3RzL1NlY29uZHMu
CisKKyAgICAgICAgKiB3dGYvSGFzaFRhYmxlLmg6CisgICAgICAgIChXVEY6Omhhc2hUYWJsZVN3
YXApOgorICAgICAgICAoV1RGOjo6OmNoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUpOgor
ICAgICAgICAqIHd0Zi9IYXNoVHJhaXRzLmg6CisgICAgICAgIChXVEY6OktleVZhbHVlUGFpcjo6
S2V5VmFsdWVQYWlyKToKKyAgICAgICAgKEtleVZhbHVlUGFpcik6CisgICAgICAgIChXVEY6Oktl
eVZhbHVlUGFpckhhc2hUcmFpdHM6OmNvbnN0cnVjdERlbGV0ZWRWYWx1ZSk6CisgICAgICAgIChX
VEY6OktleVZhbHVlUGFpckhhc2hUcmFpdHM6OmlzRGVsZXRlZFZhbHVlKToKKyAgICAgICAgKiB3
dGYvTWV0YUFsbG9jYXRvci5jcHA6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmFkZEZy
ZWVTcGFjZSk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmluY3JlbWVudFBhZ2VPY2N1
cGFuY3kpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjpkZWNyZW1lbnRQYWdlT2NjdXBh
bmN5KToKKyAgICAgICAgKiB3dGYvUmVmQ291bnRlZExlYWtDb3VudGVyLmNwcDoKKyAgICAgICAg
KFdURjo6UmVmQ291bnRlZExlYWtDb3VudGVyOjp+UmVmQ291bnRlZExlYWtDb3VudGVyKToKKyAg
ICAgICAgKiB3dGYvUmVmUHRySGFzaE1hcC5oOgorICAgICAgICAoV1RGOjo6OnNldCk6CisgICAg
ICAgIChXVEY6Ojo6Z2V0KToKKyAgICAgICAgKFdURjo6OjppbmxpbmVHZXQpOgorICAgICAgICAo
V1RGOjo6OnRha2UpOgorICAgICAgICAqIHd0Zi9TcGVjdHJ1bS5oOgorICAgICAgICAoV1RGOjpT
cGVjdHJ1bTo6YWRkKToKKyAgICAgICAgKFdURjo6U3BlY3RydW06OmdldCk6CisgICAgICAgIChX
VEY6OlNwZWN0cnVtOjpidWlsZExpc3QpOgorICAgICAgICAqIHd0Zi9UaHJlYWRpbmdQdGhyZWFk
cy5jcHA6CisgICAgICAgIChXVEY6OmlkZW50aWZpZXJCeVB0aHJlYWRIYW5kbGUpOgorCiAyMDEy
LTA4LTI3ICBCZW5qYW1pbiBQb3VsYWluICA8YmVuamFtaW5Ad2Via2l0Lm9yZz4KIAogICAgICAg
ICBBZGQgRUNNQVNjcmlwdCBOdW1iZXIgdG8gU3RyaW5nIGNvbnZlcnNpb24gdG8gV1RGOjpTdHJp
bmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwppbmRleCBmNTFjNTRlNTFlNDdlMDdiMmRhNTg3ZjVkMjMxNDc3MzA3YjhhZDk2
Li44ZDUzZWJiNzVmNjEzYTJkODQ5MmY5NDFmZGEyNzRlNWQ5OGRkZTc3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsODY3IEBACisyMDEyLTA4LTI3ICBDYWlvIE1hcmNlbG8gZGUgT2xpdmVpcmEgRmls
aG8gIDxjYWlvLm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+CisKKyAgICAgICAgUmVuYW1lIGZpcnN0
L3NlY29uZCB0byBrZXkvdmFsdWUgaW4gSGFzaE1hcCBpdGVyYXRvcnMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyNzg0CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBNb2R1bGVzL2dlb2xvY2F0aW9uL0dl
b2xvY2F0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uOjpXYXRjaGVyczo6
ZmluZCk6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvbjo6V2F0Y2hlcnM6OnJlbW92ZSk6
CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SURCRGF0YWJhc2U6Om9iamVjdFN0b3JlTmFtZXMpOgorICAgICAgICAqIE1vZHVs
ZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6bWV0YWRhdGEpOgorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
REJGYWN0b3J5QmFja2VuZEltcGw6OmRlbGV0ZURhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkZhY3RvcnlCYWNrZW5kSW1wbDo6b3BlbkJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJD
b3JlOjpJREJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW4pOgorICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0
b3JlOjppbmRleE5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpwdXQp
OgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmluZGV4KToKKyAgICAgICAgKFdl
YkNvcmU6OklEQk9iamVjdFN0b3JlOjpkZWxldGVJbmRleCk6CisgICAgICAgICogTW9kdWxlcy9p
bmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjptZXRhZGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjptYWtlSW5kZXhXcml0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OmRlbGV0ZUludGVybmFsKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9J
REJUcmFuc2FjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6b2Jq
ZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246Om9iamVjdFN0b3Jl
RGVsZXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6b25BYm9ydCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6ZGlzcGF0Y2hFdmVudCk6CisgICAgICAg
ICogTW9kdWxlcy93ZWJkYXRhYmFzZS9BYnN0cmFjdERhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6OnBlcmZvcm1PcGVuQW5kVmVyaWZ5KToKKyAgICAgICAg
KiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZVRyYWNrZXI6OmludGVycnVwdEFsbERhdGFiYXNlc0ZvckNvbnRleHQpOgor
ICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvT3JpZ2luVXNhZ2VSZWNvcmQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6T3JpZ2luVXNhZ2VSZWNvcmQ6OmRpc2tVc2FnZSk6CisgICAgICAgICog
TW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OmFjcXVpcmVMb2NrKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OnJlbGVhc2VMb2NrKToK
KyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OnNodXRkb3duKToK
KyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL0RhdGFiYXNlVHJhY2tlckNo
cm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6aW50ZXJydXB0
QWxsRGF0YWJhc2VzRm9yQ29udGV4dCk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9j
aHJvbWl1bS9RdW90YVRyYWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UXVvdGFUcmFja2Vy
OjpnZXREYXRhYmFzZVNpemVBbmRTcGFjZUF2YWlsYWJsZVRvT3JpZ2luKToKKyAgICAgICAgKFdl
YkNvcmU6OlF1b3RhVHJhY2tlcjo6dXBkYXRlRGF0YWJhc2VTaXplKToKKyAgICAgICAgKiBNb2R1
bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0RGVmbGF0ZUZyYW1lci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpXZWJTb2NrZXRFeHRlbnNpb25EZWZsYXRlRnJhbWU6OnByb2Nlc3NSZXNwb25zZSk6Cisg
ICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0RXh0ZW5zaW9uRGlzcGF0Y2hlcjo6YXBw
ZW5kQWNjZXB0ZWRFeHRlbnNpb24pOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQVhPYmplY3RD
YWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjp+QVhPYmplY3RDYWNo
ZSk6CisgICAgICAgICogYmluZGluZ3MvZ29iamVjdC9ET01PYmplY3RDYWNoZS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpjbGVhckJ5RnJhbWUpOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL0RPTU9iamVjdEhhc2hUYWJsZU1hcC5oOgorICAgICAgICAoV2ViQ29yZTo6RE9N
T2JqZWN0SGFzaFRhYmxlTWFwOjp+RE9NT2JqZWN0SGFzaFRhYmxlTWFwKToKKyAgICAgICAgKFdl
YkNvcmU6OkRPTU9iamVjdEhhc2hUYWJsZU1hcDo6Z2V0KToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0RPTUJpbmRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2FjaGVET01TdHJ1Y3R1cmUp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkpTRE9NR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6Z2V0RE9N
Q29uc3RydWN0b3IpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1BhZ2VTY3JpcHREZWJ1Z1NlcnZl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlU2NyaXB0RGVidWdTZXJ2ZXI6OmFkZExpc3Rl
bmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VTY3JpcHREZWJ1Z1NlcnZlcjo6cmVtb3ZlTGlz
dGVuZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdENhY2hlZEZyYW1lRGF0YS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDYWNoZWRGcmFtZURhdGE6OlNjcmlwdENhY2hlZEZy
YW1lRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDYWNoZWRGcmFtZURhdGE6OnJlc3Rv
cmUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6flNjcmlwdENvbnRyb2xsZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6Y2xlYXJXaW5kb3dTaGVsbCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjphdHRhY2hEZWJ1Z2dlcik6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjp1cGRhdGVEb2N1bWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JpcHRDb250cm9sbGVyOjpjcmVhdGVSb290T2JqZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdENvbnRyb2xsZXI6OmNvbGxlY3RJc29sYXRlZENvbnRleHRzKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmNsZWFudXBTY3JpcHRPYmplY3RzRm9yUGx1Z2lu
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmNsZWFyU2NyaXB0T2JqZWN0
cyk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5oOgorICAgICAgICAo
V2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6d2luZG93U2hlbGwpOgorICAgICAgICAoV2ViQ29y
ZTo6U2NyaXB0Q29udHJvbGxlcjo6ZXhpc3RpbmdXaW5kb3dTaGVsbCk6CisgICAgICAgICogYmlu
ZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0
RGVidWdTZXJ2ZXI6OnNldEJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVi
dWdTZXJ2ZXI6OnJlbW92ZUJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVi
dWdTZXJ2ZXI6Omhhc0JyZWFrcG9pbnQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NlcmlhbGl6
ZWRTY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZVNlcmlhbGl6ZXI6OmNo
ZWNrRm9yRHVwbGljYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lU2VyaWFsaXplcjo6ZHVt
cElmVGVybWluYWwpOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVTZXJpYWxpemVyOjp3cml0ZSk6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06CisgICAgICAg
IChHZW5lcmF0ZUltcGxlbWVudGF0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVjgvVjhGbG9hdDY0QXJyYXkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhGbG9hdDY0QXJy
YXk6OkdldFJhd1RlbXBsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RmxvYXQ2NEFycmF5OjpH
ZXRUZW1wbGF0ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEFj
dGl2ZURPTU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RBY3RpdmVET01PYmpl
Y3Q6OkdldFJhd1RlbXBsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdEFjdGl2ZURPTU9i
amVjdDo6R2V0VGVtcGxhdGUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9W
OFRlc3RDdXN0b21OYW1lZEdldHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RDdXN0
b21OYW1lZEdldHRlcjo6R2V0UmF3VGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0
Q3VzdG9tTmFtZWRHZXR0ZXI6OkdldFRlbXBsYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpWOFRlc3RFdmVudENvbnN0cnVjdG9yOjpHZXRSYXdUZW1wbGF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpWOFRlc3RFdmVudENvbnN0cnVjdG9yOjpHZXRUZW1wbGF0ZSk6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50VGFyZ2V0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlY4VGVzdEV2ZW50VGFyZ2V0OjpHZXRSYXdUZW1wbGF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpWOFRlc3RFdmVudFRhcmdldDo6R2V0VGVtcGxhdGUpOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFeGNlcHRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VjhUZXN0RXhjZXB0aW9uOjpHZXRSYXdUZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOFRl
c3RFeGNlcHRpb246OkdldFRlbXBsYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVjgvVjhUZXN0SW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdEludGVy
ZmFjZTo6R2V0UmF3VGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0SW50ZXJmYWNl
OjpHZXRUZW1wbGF0ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVz
dE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0TWVk
aWFRdWVyeUxpc3RMaXN0ZW5lcjo6R2V0UmF3VGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
VjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6R2V0VGVtcGxhdGUpOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROYW1lZENvbnN0cnVjdG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlY4VGVzdE5hbWVkQ29uc3RydWN0b3I6OkdldFJhd1RlbXBsYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlY4VGVzdE5hbWVkQ29uc3RydWN0b3I6OkdldFRlbXBsYXRlKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Tm9kZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpWOFRlc3ROb2RlOjpHZXRSYXdUZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpWOFRlc3ROb2RlOjpHZXRUZW1wbGF0ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Y4L1Y4VGVzdE9iai5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RPYmo6OkdldFJh
d1RlbXBsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdE9iajo6R2V0VGVtcGxhdGUpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlOjpHZXRSYXdUZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpW
OFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OkdldFRlbXBsYXRlKToKKyAgICAg
ICAgKiBiaW5kaW5ncy92OC9ET01XcmFwcGVyV29ybGQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RE9NV3JhcHBlcldvcmxkOjpkZWFsbG9jYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVdyYXBw
ZXJXb3JsZDo6Z2V0T3JDcmVhdGVJc29sYXRlZFdvcmxkKToKKyAgICAgICAgKiBiaW5kaW5ncy92
OC9OUFY4T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZyZWVWOE5QT2JqZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6Om5wQ3JlYXRlVjhTY3JpcHRPYmplY3QpOgorICAgICAgICAqIGJpbmRp
bmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29u
dHJvbGxlcjo6Y2xlYXJTY3JpcHRPYmplY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENv
bnRyb2xsZXI6OnJlc2V0SXNvbGF0ZWRXb3JsZHMpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0
Q29udHJvbGxlcjo6ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQpOgorICAgICAgICAoV2ViQ29yZTo6
U2NyaXB0Q29udHJvbGxlcjo6c2V0SXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2luKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmNsZWFudXBTY3JpcHRPYmplY3RzRm9yUGx1
Z2luKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmNvbGxlY3RJc29sYXRl
ZENvbnRleHRzKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUu
Y3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4RE9NTWFwLmg6CisgICAgICAgIChXZWJDb3Jl
OjpXZWFrUmVmZXJlbmNlTWFwOjpyZW1vdmVJZlByZXNlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
V2Vha1JlZmVyZW5jZU1hcDo6dmlzaXQpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4R0NDb250
cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmVudW1lcmF0ZUdsb2JhbEhhbmRsZXMpOgor
ICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4UGVyQ29udGV4dERhdGEuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6VjhQZXJDb250ZXh0RGF0YTo6ZGlzcG9zZSk6CisgICAgICAgICogYmluZGluZ3Mvdjgv
bnBydW50aW1lLmNwcDoKKyAgICAgICAgKiBicmlkZ2UvSWRlbnRpZmllclJlcC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJZGVudGlmaWVyUmVwOjpnZXQpOgorICAgICAgICAqIGJyaWRnZS9OUF9q
c29iamVjdC5jcHA6CisgICAgICAgIChPYmplY3RNYXA6OmFkZCk6CisgICAgICAgIChPYmplY3RN
YXA6OnJlbW92ZSk6CisgICAgICAgICogYnJpZGdlL2puaS9qc2MvSmF2YUNsYXNzSlNDLmNwcDoK
KyAgICAgICAgKEphdmFDbGFzczo6fkphdmFDbGFzcyk6CisgICAgICAgICogYnJpZGdlL3F0L3F0
X2luc3RhbmNlLmNwcDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OldlYWtNYXA6OnNldCk6Cisg
ICAgICAgICogYnJpZGdlL3J1bnRpbWVfcm9vdC5jcHA6CisgICAgICAgIChKU0M6OkJpbmRpbmdz
OjpSb290T2JqZWN0OjppbnZhbGlkYXRlKToKKyAgICAgICAgKiBjc3MvQ1NTQ2FudmFzVmFsdWUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FudmFzVmFsdWU6OmNhbnZhc0NoYW5nZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FudmFzVmFsdWU6OmNhbnZhc1Jlc2l6ZWQpOgorICAgICAg
ICAqIGNzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Y291bnRlclRvQ1NTVmFsdWUpOgorICAgICAgICAqIGNzcy9DU1NDcm9zc2ZhZGVWYWx1ZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NDcm9zc2ZhZGVWYWx1ZTo6Y3Jvc3NmYWRlQ2hhbmdl
ZCk6CisgICAgICAgICogY3NzL0NTU0ZvbnRGYWNlU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNTU0ZvbnRGYWNlU291cmNlOjpnZXRGb250RGF0YSk6CisgICAgICAgICogY3NzL0NTU0Zv
bnRTZWxlY3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250U2VsZWN0b3I6OmFkZEZv
bnRGYWNlUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250U2VsZWN0b3I6OmdldEZvbnRE
YXRhKToKKyAgICAgICAgKiBjc3MvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjphZGRDbGllbnQpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6cmVtb3ZlQ2xpZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0ltYWdlR2VuZXJhdG9yVmFsdWU6OmdldEltYWdlKToKKyAgICAgICAgKiBj
c3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU2VnbWVu
dGVkRm9udEZhY2U6OmdldEZvbnREYXRhKToKKyAgICAgICAgKiBjc3MvQ1NTU2VsZWN0b3IuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTU2VsZWN0b3I6OnBhcnNlUHNldWRvVHlwZSk6CisgICAg
ICAgICogY3NzL0NTU1ZhbHVlUG9vbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NWYWx1ZVBv
b2w6OmNyZWF0ZUNvbG9yVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVmFsdWVQb29sOjpj
cmVhdGVGb250RmFtaWx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVmFsdWVQb29sOjpj
cmVhdGVGb250RmFjZVZhbHVlKToKKyAgICAgICAgKiBjc3MvUHJvcGVydHlTZXRDU1NTdHlsZURl
Y2xhcmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlByb3BlcnR5U2V0Q1NTU3R5bGVEZWNs
YXJhdGlvbjo6Y2xvbmVBbmRDYWNoZUZvckNTU09NKToKKyAgICAgICAgKiBjc3MvU3R5bGVCdWls
ZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlDb3VudGVyOjphcHBseUlu
aGVyaXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Q291bnRlcjo6YXBw
bHlWYWx1ZSk6CisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVSZXNvbHZlcjo6Y29sbGVjdEZlYXR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUmVzb2x2ZXI6OnJ1bGVTZXRGb3JTY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjphcHBlbmRBdXRob3JTdHlsZXNoZWV0cyk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjpzd2VlcE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KToKKyAgICAg
ICAgKiBjc3MvU3R5bGVTaGVldENvbnRlbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
U2hlZXRDb250ZW50czo6cGFyc2VyQWRkTmFtZXNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlU2hlZXRDb250ZW50czo6ZGV0ZXJtaW5lTmFtZXNwYWNlKToKKyAgICAgICAgKiBkb20vQ2hl
Y2tlZFJhZGlvQnV0dG9ucy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaGVja2VkUmFkaW9CdXR0
b25zOjphZGRCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6Q2hlY2tlZFJhZGlvQnV0dG9uczo6
cmVtb3ZlQnV0dG9uKToKKyAgICAgICAgKiBkb20vQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3Vt
dWxhdGlvblJvdXRlcjo6Y2hpbGRBZGRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RN
dXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlcjo6d2lsbFJlbW92ZUNoaWxk
KToKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNj
dW11bGF0aW9uUm91dGVyOjppbmNyZW1lbnRTY29waW5nTGV2ZWwpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXI6OmRl
Y3JlbWVudFNjb3BpbmdMZXZlbCk6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRvY3VtZW50OjpwYWdlR3JvdXBVc2VyU2hlZXRzKToKKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50Ojp3aW5kb3dOYW1lZEl0ZW1zKToKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50Ojpkb2N1bWVudE5hbWVkSXRlbXMpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6
OmdldENTU0NhbnZhc0VsZW1lbnQpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudE1hcmtlckNvbnRy
b2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpt
YXJrZXJDb250YWluaW5nUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJD
b250cm9sbGVyOjpyZW5kZXJlZFJlY3RzRm9yTWFya2Vycyk6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbW92ZU1hcmtlcnMpOgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZXBhaW50TWFya2Vycyk6CisgICAgICAgIChX
ZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmludmFsaWRhdGVSZW5kZXJlZFJlY3Rz
Rm9yTWFya2Vyc0luUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRy
b2xsZXI6OnNob3dNYXJrZXJzKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnRPcmRlcmVkTWFwLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50T3JkZXJlZE1hcDo6cmVtb3ZlKToKKyAgICAg
ICAgKiBkb20vRWxlbWVudEF0dHJpYnV0ZURhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZW5z
dXJlQXR0ckxpc3RGb3JFbGVtZW50KToKKyAgICAgICAgKiBkb20vRXZlbnREaXNwYXRjaGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50UmVsYXRlZFRhcmdldEFkanVzdGVyOjpmaW5kUmVs
YXRlZFRhcmdldCk6CisgICAgICAgICogZG9tL0V2ZW50TGlzdGVuZXJNYXAuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RXZlbnRMaXN0ZW5lck1hcDo6ZXZlbnRUeXBlcyk6CisgICAgICAgIChXZWJD
b3JlOjpFdmVudExpc3RlbmVyTWFwOjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRMaXN0
ZW5lck1hcDo6cmVtb3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50TGlzdGVuZXJNYXA6OmZp
bmQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRMaXN0ZW5lck1hcDo6cmVtb3ZlRmlyc3RFdmVu
dExpc3RlbmVyQ3JlYXRlZEZyb21NYXJrdXApOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRMaXN0
ZW5lck1hcDo6Y29weUV2ZW50TGlzdGVuZXJzTm90Q3JlYXRlZEZyb21NYXJrdXBUb1RhcmdldCk6
CisgICAgICAgIChXZWJDb3JlOjpFdmVudExpc3RlbmVySXRlcmF0b3I6Om5leHRMaXN0ZW5lcik6
CisgICAgICAgICogZG9tL0lkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJZFRhcmdldE9ic2VydmVyUmVnaXN0cnk6OmFkZE9ic2VydmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OklkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeTo6cmVtb3ZlT2JzZXJ2ZXIpOgorICAg
ICAgICAqIGRvbS9NZW1vcnlJbnN0cnVtZW50YXRpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1l
bW9yeUluc3RydW1lbnRhdGlvbjo6YWRkSW5zdHJ1bWVudGVkTWFwRW50cmllcyk6CisgICAgICAg
IChXZWJDb3JlOjpNZW1vcnlJbnN0cnVtZW50YXRpb246OmFkZEluc3RydW1lbnRlZE1hcFZhbHVl
cyk6CisgICAgICAgICogZG9tL011dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3VwLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Ok11dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3VwOjppc09sZFZhbHVl
UmVxdWVzdGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok11dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdy
b3VwOjplbnF1ZXVlTXV0YXRpb25SZWNvcmQpOgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Ok5vZGU6OmR1bXBTdGF0aXN0aWNzKToKKyAgICAgICAgKFdlYkNvcmU6
Ok5vZGU6OmNsZWFyUmFyZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZUxpc3RzTm9kZURh
dGE6OmludmFsaWRhdGVDYWNoZXMpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Y29sbGVjdE1h
dGNoaW5nT2JzZXJ2ZXJzRm9yTXV0YXRpb24pOgorICAgICAgICAqIGRvbS9Ob2RlUmFyZURhdGEu
aDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVMaXN0c05vZGVEYXRhOjphZGRDYWNoZVdpdGhBdG9t
aWNOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVMaXN0c05vZGVEYXRhOjphZGRDYWNoZVdp
dGhOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVMaXN0c05vZGVEYXRhOjphZGRDYWNoZVdp
dGhRdWFsaWZpZWROYW1lKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVMaXN0c05vZGVEYXRhOjph
ZG9wdFRyZWVTY29wZSk6CisgICAgICAgICogZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246OmNoZWNrU3R5bGVTaGVl
dCk6CisgICAgICAgICogZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6Y2FuU3VzcGVuZEFjdGl2ZURPTU9iamVj
dHMpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6c3VzcGVuZEFj
dGl2ZURPTU9iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4
dDo6cmVzdW1lQWN0aXZlRE9NT2JqZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFeGVj
dXRpb25Db250ZXh0OjpzdG9wQWN0aXZlRE9NT2JqZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JpcHRFeGVjdXRpb25Db250ZXh0OjphZGp1c3RNaW5pbXVtVGltZXJJbnRlcnZhbCk6CisgICAg
ICAgICogZG9tL1NlbGVjdG9yUXVlcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JR
dWVyeUNhY2hlOjphZGQpOgorICAgICAgICAqIGRvbS9TcGFjZVNwbGl0U3RyaW5nLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNwYWNlU3BsaXRTdHJpbmdEYXRhOjpjcmVhdGUpOgorICAgICAgICAq
IGRvbS9TdHlsZWRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlZEVsZW1lbnQ6
OnVwZGF0ZUF0dHJpYnV0ZVN0eWxlKToKKyAgICAgICAgKiBlZGl0aW5nL21hYy9BbHRlcm5hdGl2
ZVRleHRVSUNvbnRyb2xsZXIubW06CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRV
SUNvbnRyb2xsZXI6OkFsZXJuYXRpdmVUZXh0Q29udGV4dENvbnRyb2xsZXI6OmFsdGVybmF0aXZl
c0ZvckNvbnRleHQpOgorICAgICAgICAqIGh0bWwvRm9ybUNvbnRyb2xsZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U2F2ZWRGb3JtU3RhdGU6OnNlcmlhbGl6ZVRvKToKKyAgICAgICAgKFdlYkNv
cmU6OlNhdmVkRm9ybVN0YXRlOjphcHBlbmRDb250cm9sU3RhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U2F2ZWRGb3JtU3RhdGU6OnRha2VDb250cm9sU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
U2F2ZWRGb3JtU3RhdGU6OmdldFJlZmVyZW5jZWRGaWxlUGF0aHMpOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9ybUtleUdlbmVyYXRvcjo6Zm9ybUtleSk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtQ29u
dHJvbGxlcjo6Y3JlYXRlU2F2ZWRGb3JtU3RhdGVNYXApOgorICAgICAgICAoV2ViQ29yZTo6Rm9y
bUNvbnRyb2xsZXI6OmZvcm1FbGVtZW50c1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1D
b250cm9sbGVyOjp0YWtlU3RhdGVGb3JGb3JtRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpG
b3JtQ29udHJvbGxlcjo6Z2V0UmVmZXJlbmNlZEZpbGVQYXRocyk6CisgICAgICAgICogaHRtbC9I
VE1MQ29sbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbkNhY2hl
QmFzZTo6YXBwZW5kKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRnJhbWVidWZmZXI6OmdldEF0dGFjaG1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6cmVtb3ZlQXR0YWNobWVudEZyb21C
b3VuZEZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRnJhbWVidWZmZXI6OmNo
ZWNrU3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRnJhbWVidWZmZXI6OmRlbGV0ZU9i
amVjdEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6aW5pdGlhbGl6
ZUF0dGFjaG1lbnRzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rv
ci5weToKKyAgICAgICAgKiBpbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkRPTVBhdGNoU3VwcG9ydDo6ZGlmZik6CisgICAgICAgIChXZWJDb3JlOjpET01Q
YXRjaFN1cHBvcnQ6OmlubmVyUGF0Y2hDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpET01Q
YXRjaFN1cHBvcnQ6OnJlbW92ZUNoaWxkQW5kTW92ZVRvTmV3KToKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVk
U2NyaXB0TWFuYWdlcjo6aW5qZWN0ZWRTY3JpcHRGb3JJZCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bmplY3RlZFNjcmlwdE1hbmFnZXI6OmluamVjdGVkU2NyaXB0SWRGb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjpkaXNjYXJkSW5qZWN0ZWRTY3JpcHRzRm9yKToK
KyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0TWFuYWdlcjo6cmVsZWFzZU9iamVjdEdy
b3VwKToKKyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0TWFuYWdlcjo6aW5qZWN0ZWRT
Y3JpcHRGb3IpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTZWxlY3RvclByb2ZpbGU6OmNvbW1pdFNlbGVjdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNlbGVjdG9yUHJvZmlsZTo6Y29tbWl0U2VsZWN0b3JUaW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNlbGVjdG9yUHJvZmlsZTo6dG9JbnNwZWN0b3JPYmplY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OmZvcmNlUHNldWRvU3RhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OmFzSW5zcGVjdG9yU3R5bGVTaGVldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6YXNzZXJ0U3R5bGVTaGVldEZvcklk
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpkaWRSZW1vdmVET01Ob2Rl
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpkaWRNb2RpZnlET01BdHRy
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpyZXNldFBzZXVkb1N0YXRl
cyk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnNvbGVBZ2VudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OnN0b3BUaW1pbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29uc29sZUFnZW50Ojpjb3VudCk6CisgICAgICAgICogaW5z
cGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckRPTUFnZW50Ojpub2RlRm9ySWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdl
bnQ6OnBlcmZvcm1TZWFyY2gpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6
OmdldFNlYXJjaFJlc3VsdHMpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01EZWJ1
Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTURlYnVnZ2VyQWdl
bnQ6OndpbGxTZW5kWE1MSHR0cFJlcXVlc3QpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0
b3JET01TdG9yYWdlQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NU3Rv
cmFnZUFnZW50OjpjbGVhckZyb250ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRP
TVN0b3JhZ2VBZ2VudDo6ZW5hYmxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTVN0
b3JhZ2VBZ2VudDo6c3RvcmFnZUlkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTVN0
b3JhZ2VBZ2VudDo6Z2V0RE9NU3RvcmFnZVJlc291cmNlRm9ySWQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpkaWRVc2VET01TdG9yYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6bWVtb3J5Qnl0ZXNVc2VkQnlTdG9y
YWdlQ2FjaGUpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmVuYWJsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjpkYXRhYmFzZUlkKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmZpbmRCeUZpbGVOYW1lKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmRhdGFiYXNlRm9ySWQp
OgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnRCeVVybCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZW1vdmVCcmVha3Bv
aW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnJlc29sdmVC
cmVha3BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNl
YXJjaEluQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpnZXRTY3JpcHRTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6ZGlkUGFyc2VTb3VyY2UpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JJbmRl
eGVkREJBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yTWVtb3J5QWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjYWNo
ZWRSZXNvdXJjZXNGb3JGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdl
bnQ6OmRpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JQYWdlQWdlbnQ6OmZyYW1lRGV0YWNoZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JQcm9maWxlckFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclByb2Zp
bGVyQWdlbnQ6OmdldFByb2ZpbGVIZWFkZXJzKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6Z2V0UHJvZmlsZSk6CisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6YnVpbGRPYmplY3RGb3JIZWFkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJl
c291cmNlQWdlbnQ6OndpbGxTZW5kUmVxdWVzdCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3Bl
Y3RvclN0YXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0YXRlOjpnZXRCb29s
ZWFuKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0YXRlOjpnZXRTdHJpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3RhdGU6OmdldExvbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yU3RhdGU6OmdldERvdWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JTdGF0ZTo6Z2V0T2JqZWN0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVT
aGVldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZTo6c3R5bGVXaXRoUHJv
cGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjppbnNwZWN0
b3JTdHlsZUZvcklkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck9iamVjdEJhc2U6OmdldCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JPYmplY3RCYXNlOjp3cml0ZUpTT04pOgorICAgICAgICAqIGluc3Bl
Y3Rvci9JbnNwZWN0b3JXb3JrZXJBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JXb3JrZXJBZ2VudDo6d29ya2VyQ29udGV4dFRlcm1pbmF0ZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yV29ya2VyQWdlbnQ6OmNyZWF0ZVdvcmtlckZyb250ZW5kQ2hhbm5lbHNGb3JF
eGlzdGluZ1dvcmtlcnMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yV29ya2VyQWdlbnQ6
OmRlc3Ryb3lXb3JrZXJGcm9udGVuZENoYW5uZWxzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvTmV0
d29ya1Jlc291cmNlc0RhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1Jlc291cmNl
c0RhdGE6OnJlbW92ZUNhY2hlZFJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtS
ZXNvdXJjZXNEYXRhOjpjbGVhcik6CisgICAgICAgICogbG9hZGVyL0Nyb3NzT3JpZ2luQWNjZXNz
Q29udHJvbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc1NpbXBsZUNyb3NzT3JpZ2luQWNjZXNz
UmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVBY2Nlc3NDb250cm9sUHJlZmxpZ2h0
UmVxdWVzdCk6CisgICAgICAgICogbG9hZGVyL0Nyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2Fj
aGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNo
ZUl0ZW06OmFsbG93c0Nyb3NzT3JpZ2luSGVhZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpDcm9z
c09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlOjpjYW5Ta2lwUHJlZmxpZ2h0KToKKyAgICAgICAg
KiBsb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRM
b2FkZXI6OmdldFN1YnJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudExvYWRl
cjo6c3Vic3RpdHV0ZVJlc291cmNlRGVsaXZlcnlUaW1lckZpcmVkKToKKyAgICAgICAgKiBsb2Fk
ZXIvTWFpblJlc291cmNlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1haW5SZXNvdXJj
ZUxvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VM
b2FkU2NoZWR1bGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZFNjaGVkdWxl
cjo6c2VydmVQZW5kaW5nUmVxdWVzdHMpOgorICAgICAgICAqIGxvYWRlci9hcHBjYWNoZS9BcHBs
aWNhdGlvbkNhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGU6OnJl
bW92ZVJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGU6OmNsZWFy
U3RvcmFnZUlEKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGU6OmR1bXApOgor
ICAgICAgICAqIGxvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUdyb3VwOjpkaWRGaW5pc2hMb2FkaW5nTWFu
aWZlc3QpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUdyb3VwOjpzdGFydExv
YWRpbmdFbnRyeSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmFk
ZEVudHJ5KToKKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUhvc3Qu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUhvc3Q6OmZpbGxSZXNvdXJj
ZUxpc3QpOgorICAgICAgICAqIGxvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlUmVzb3Vy
Y2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVJlc291cmNlOjplc3Rp
bWF0ZWRTaXplSW5TdG9yYWdlKToKKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRp
b25DYWNoZVN0b3JhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0
b3JhZ2U6OmZpbmRPckNyZWF0ZUNhY2hlR3JvdXApOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2U6OmNhY2hlR3JvdXBGb3JVUkwpOgorICAgICAgICAoV2ViQ29yZTo6
QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmZhbGxiYWNrQ2FjaGVHcm91cEZvclVSTCk6CisgICAg
ICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmVtcHR5KToKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZUNvcHlPZkNhY2hlKToKKyAgICAgICAg
KiBsb2FkZXIvYXJjaGl2ZS9BcmNoaXZlRmFjdG9yeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpB
cmNoaXZlRmFjdG9yeTo6cmVnaXN0ZXJLbm93bkFyY2hpdmVNSU1FVHlwZXMpOgorICAgICAgICAq
IGxvYWRlci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
YWNoZWRSYXdSZXNvdXJjZTo6Y2FuUmV1c2UpOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNo
ZWRSZXNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZTo6c3dpdGNo
Q2xpZW50c1RvUmV2YWxpZGF0ZWRSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRS
ZXNvdXJjZTo6dXBkYXRlUmVzcG9uc2VBZnRlclJldmFsaWRhdGlvbik6CisgICAgICAgICogbG9h
ZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyLmg6CisgICAgICAgIChXZWJDb3Jl
OjpDYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlcjo6Q2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIp
OgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZUxvYWRlcjo6fkNhY2hlZFJlc291cmNlTG9hZGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0UmVzb3Vy
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OnNldEF1dG9Mb2Fk
SW1hZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlTG9hZGVyOjpyZW1vdmVD
YWNoZWRSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZUxvYWRlcjo6
Z2FyYmFnZUNvbGxlY3REb2N1bWVudFJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpDYWNo
ZWRSZXNvdXJjZUxvYWRlcjo6cmVwb3J0TWVtb3J5VXNhZ2UpOgorICAgICAgICAqIGxvYWRlci9j
YWNoZS9NZW1vcnlDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlDYWNoZTo6cmVt
b3ZlUmVzb3VyY2VzV2l0aE9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlDYWNoZTo6
Z2V0T3JpZ2luc1dpdGhDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlDYWNoZTo6Z2V0
U3RhdGlzdGljcyk6CisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlDYWNoZTo6cmVwb3J0TWVtb3J5
VXNhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVtb3J5Q2FjaGU6OnNldERpc2FibGVkKToKKyAg
ICAgICAgKiBsb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SWNvbkRhdGFiYXNlOjpyZW1vdmVBbGxJY29ucyk6CisgICAgICAgIChXZWJDb3JlOjpJY29uRGF0
YWJhc2U6Omljb25SZWNvcmRDb3VudFdpdGhEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Okljb25E
YXRhYmFzZTo6cGVyZm9ybVBlbmRpbmdSZXRhaW5BbmRSZWxlYXNlT3BlcmF0aW9ucyk6CisgICAg
ICAgICogcGFnZS9ET01XaW5kb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93Ojpk
aXNwYXRjaEFsbFBlbmRpbmdCZWZvcmVVbmxvYWRFdmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6
RE9NV2luZG93OjpkaXNwYXRjaEFsbFBlbmRpbmdVbmxvYWRFdmVudHMpOgorICAgICAgICAqIHBh
Z2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFu
ZGxlVG91Y2hFdmVudCk6CisgICAgICAgICogcGFnZS9GcmFtZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZTo6aW5qZWN0VXNlclNjcmlwdHMpOgorICAgICAgICAqIHBhZ2UvUGFnZUdyb3Vw
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VHcm91cDo6cGFnZUdyb3VwKToKKyAgICAgICAg
KFdlYkNvcmU6OlBhZ2VHcm91cDo6Y2xvc2VMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6UGFnZUdyb3VwOjpjbGVhckxvY2FsU3RvcmFnZUZvckFsbE9yaWdpbnMpOgorICAgICAgICAo
V2ViQ29yZTo6UGFnZUdyb3VwOjpjbGVhckxvY2FsU3RvcmFnZUZvck9yaWdpbik6CisgICAgICAg
IChXZWJDb3JlOjpQYWdlR3JvdXA6OnN5bmNMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6UGFnZUdyb3VwOjphZGRVc2VyU2NyaXB0VG9Xb3JsZCk6CisgICAgICAgIChXZWJDb3JlOjpQ
YWdlR3JvdXA6OmFkZFVzZXJTdHlsZVNoZWV0VG9Xb3JsZCk6CisgICAgICAgIChXZWJDb3JlOjpQ
YWdlR3JvdXA6OnJlbW92ZVVzZXJTY3JpcHRGcm9tV29ybGQpOgorICAgICAgICAoV2ViQ29yZTo6
UGFnZUdyb3VwOjpyZW1vdmVVc2VyU3R5bGVTaGVldEZyb21Xb3JsZCk6CisgICAgICAgICogcGFn
ZS9QYWdlU2VyaWFsaXplci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlU2VyaWFsaXplcjo6
dXJsRm9yQmxhbmtGcmFtZSk6CisgICAgICAgICogcGFnZS9TZWN1cml0eVBvbGljeS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTZWN1cml0eVBvbGljeTo6YWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0
RW50cnkpOgorICAgICAgICAoV2ViQ29yZTo6U2VjdXJpdHlQb2xpY3k6OnJlbW92ZU9yaWdpbkFj
Y2Vzc1doaXRlbGlzdEVudHJ5KToKKyAgICAgICAgKiBwYWdlL1NldHRpbmdzLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OnNldEdlbmVyaWNGb250RmFtaWx5TWFwKToKKyAgICAgICAgKFdlYkNvcmU6
OmdldEdlbmVyaWNGb250RmFtaWx5Rm9yU2NyaXB0KToKKyAgICAgICAgKiBwYWdlL1NwZWVjaElu
cHV0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNwZWVjaElucHV0OjpyZWdpc3Rlckxpc3RlbmVy
KToKKyAgICAgICAgKiBwYWdlL1dpbmRvd0ZlYXR1cmVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OldpbmRvd0ZlYXR1cmVzOjpib29sRmVhdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpXaW5kb3dG
ZWF0dXJlczo6ZmxvYXRGZWF0dXJlKToKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9BbmltYXRp
b25Db250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkNvbnRyb2xsZXJQ
cml2YXRlOjp1cGRhdGVBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkNv
bnRyb2xsZXJQcml2YXRlOjpzdXNwZW5kQW5pbWF0aW9uc0ZvckRvY3VtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpyZXN1bWVBbmltYXRpb25zRm9y
RG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6
Om51bWJlck9mQWN0aXZlQW5pbWF0aW9ucyk6CisgICAgICAgICogcGFnZS9hbmltYXRpb24vQ29t
cG9zaXRlQW5pbWF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlv
bjo6Y2xlYXJSZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb246
OnVwZGF0ZVRyYW5zaXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlv
bjo6dXBkYXRlS2V5ZnJhbWVBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0
ZUFuaW1hdGlvbjo6YW5pbWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRp
b246OmdldEFuaW1hdGVkU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0
aW9uOjpzZXRBbmltYXRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9u
Ojp0aW1lVG9OZXh0U2VydmljZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRp
b246OmdldEFuaW1hdGlvbkZvclByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0
ZUFuaW1hdGlvbjo6c3VzcGVuZEFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9z
aXRlQW5pbWF0aW9uOjpyZXN1bWVBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBv
c2l0ZUFuaW1hdGlvbjo6b3ZlcnJpZGVJbXBsaWNpdEFuaW1hdGlvbnMpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjpyZXN1bWVPdmVycmlkZGVuSW1wbGljaXRBbmltYXRp
b25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlvbjo6aXNBbmltYXRpbmdQ
cm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb246Om51bWJlck9m
QWN0aXZlQW5pbWF0aW9ucyk6CisgICAgICAgICogcGxhdGZvcm0vTGFuZ3VhZ2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6bGFuZ3VhZ2VEaWRDaGFuZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL01J
TUVUeXBlUmVnaXN0cnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TUlNRVR5cGVSZWdpc3RyeTo6
Z2V0Tm9ybWFsaXplZE1JTUVUeXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9IUlRGRWxl
dmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldENvbmNhdGVuYXRlZEltcHVsc2VSZXNw
b25zZXNGb3JTdWJqZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ibGFja2JlcnJ5L0Nvb2tpZU1h
bmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llTWFuYWdlcjo6Z2VuZXJhdGVIdG1s
RnJhZ21lbnRGb3JDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZU1hbmFnZXI6OnJl
bW92ZUFsbENvb2tpZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2JsYWNrYmVycnkvQ29va2llTWFw
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZU1hcDo6cmVtb3ZlT2xkZXN0Q29va2llKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZU1hcDo6Z2V0QWxsQ2hpbGRDb29raWVzKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9jZi9CaW5hcnlQcm9wZXJ0eUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QmluYXJ5UHJvcGVydHlMaXN0UGxhbjo6d3JpdGVJbnRlZ2VyQXJyYXkpOgorICAgICAgICAq
IHBsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViSFRUUExvYWRJbmZvLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6YWRkSGVhZGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0
L1dlYlVSTFJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxSZXF1ZXN0Ojp2aXNp
dEhUVFBIZWFkZXJGaWVsZHMpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQv
V2ViVVJMUmVzcG9uc2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxSZXNwb25zZTo6YWRk
SFRUUEhlYWRlckZpZWxkKToKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMUmVzcG9uc2U6OnZpc2l0
SFRUUEhlYWRlckZpZWxkcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJl
ZnJlc2hNb25pdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlSZWZyZXNoTW9uaXRv
ck1hbmFnZXI6OmVuc3VyZU1vbml0b3JGb3JDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheVJlZnJlc2hNb25pdG9yTWFuYWdlcjo6dW5yZWdpc3RlckNsaWVudCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRD
YWNoZTo6Z2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250
Q2FjaGU6OmdldENhY2hlZEZvbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6
cmVsZWFzZUZvbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6cHVyZ2VJbmFj
dGl2ZUZvbnREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2VUcmVl
Tm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaFBhZ2VUcmVlTm9kZTo6dHJlZUdseXBo
UGFnZUNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoUGFnZVRyZWVOb2RlOjpwYWdlQ291
bnQpOgorICAgICAgICAoV2ViQ29yZTo6R2x5cGhQYWdlVHJlZU5vZGU6OnBydW5lVHJlZUN1c3Rv
bUZvbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoUGFnZVRyZWVOb2RlOjpwcnVuZVRy
ZWVGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaFBhZ2VUcmVlTm9kZTo6cHJ1bmVD
dXN0b21Gb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaFBhZ2VUcmVlTm9kZTo6cHJ1
bmVGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaFBhZ2VUcmVlTm9kZTo6c2hvd1N1
YnRyZWUpOgorICAgICAgICAoc2hvd0dseXBoUGFnZVRyZWVzKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUaWxl
ZEJhY2tpbmdTdG9yZTo6dXBkYXRlVGlsZUJ1ZmZlcnMpOgorICAgICAgICAoV2ViQ29yZTo6VGls
ZWRCYWNraW5nU3RvcmU6OnJlc2l6ZUVkZ2VUaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpUaWxl
ZEJhY2tpbmdTdG9yZTo6c2V0S2VlcFJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2F2Zm91bmRhdGlvbi9jZi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25DRi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpBVkZXcmFwcGVyOjphdmZXcmFwcGVyRm9yQ2FsbGJhY2tDb250ZXh0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyVGlsZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlcjo6bGF5ZXJWaXNpYmlsaXR5Q2hhbmdlZCk6
CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyOjp1cGxvYWRUZXh0dXJlc0lmTmVlZGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXI6OmFkZFRpbGVKb2IpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJUaWxlcjo6ZGVsZXRlVGV4dHVyZXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJUaWxlcjo6cHJ1bmVUZXh0dXJlcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyOjpi
aW5kQ29udGVudHNUZXh0dXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2Jl
cnJ5L1RleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkOjp0ZXh0dXJlRm9yVGlsZWRDb250ZW50cyk6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZDo6dGV4dHVy
ZUZvckNvbG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVy
Q0EuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjptb3ZlT3JDb3B5QW5p
bWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnBhdXNlQW5pbWF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6bGF5ZXJEaWREaXNwbGF5
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlR2VvbWV0cnkpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjp1cGRhdGVUcmFuc2Zvcm0pOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjp1cGRhdGVDaGlsZHJlblRyYW5zZm9ybSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZU1hc2tzVG9Cb3VuZHMp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjp1cGRhdGVDb250ZW50c1Zpc2li
aWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjp1cGRhdGVDb250ZW50
c09wYXF1ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUJhY2tm
YWNlVmlzaWJpbGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnVwZGF0
ZUZpbHRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjplbnN1cmVTdHJ1
Y3R1cmFsTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjp1cGRhdGVM
YXllckRyYXdzQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnVw
ZGF0ZUNvbnRlbnRzSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjp1
cGRhdGVDb250ZW50c1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjp1
cGRhdGVNYXNrTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjp1cGRh
dGVMYXllckFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjpz
ZXRBbmltYXRpb25PbkxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6
cmVtb3ZlQ0FBbmltYXRpb25Gcm9tTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NM
YXllckNBOjpwYXVzZUNBQW5pbWF0aW9uT25MYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0xheWVyQ0E6OnN1c3BlbmRBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXJDQTo6cmVzdW1lQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0xheWVyQ0E6OmZpbmRPck1ha2VDbG9uZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xh
eWVyQ0E6OnNldE9wYWNpdHlJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xh
eWVyQ0E6OnVwZGF0ZU9wYWNpdHlPbkxheWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jYS9tYWMvVGlsZUNhY2hlLm1tOgorICAgICAgICAoV2ViQ29yZTo6VGlsZUNhY2hlOjpzZXRO
ZWVkc0Rpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZUNhY2hlOjpzZXRTY2FsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpUaWxlQ2FjaGU6OnNldEFjY2VsZXJhdGVzRHJhd2luZyk6CisgICAg
ICAgIChXZWJDb3JlOjpUaWxlQ2FjaGU6OnNldFRpbGVEZWJ1Z0JvcmRlcldpZHRoKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRpbGVDYWNoZTo6c2V0VGlsZURlYnVnQm9yZGVyQ29sb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6VGlsZUNhY2hlOjpyZXZhbGlkYXRlVGlsZXMpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwOgorICAgICAgICAoUGxh
dGZvcm1DQUxheWVyOjphbmltYXRpb25TdGFydGVkKToKKyAgICAgICAgKHJlc3VibWl0QWxsQW5p
bWF0aW9ucyk6CisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXI6OmFuaW1hdGlvbkZvcktleSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENhY2hlQ2hyb21pdW1XaW4u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TG9va3VwQWx0TmFtZSk6CisgICAgICAgIChXZWJDb3Jl
Ojpmb250Q29udGFpbnNDaGFyYWN0ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0ZvbnRVdGlsc0Nocm9taXVtV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldERl
cml2ZWRGb250RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGls
ZWRMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1
bTo6cHVzaFByb3BlcnRpZXNUbyk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21p
dW06OnNldExheWVyVHJlZUhvc3QpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9t
aXVtOjppbnZhbGlkYXRlQ29udGVudFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXll
ckNocm9taXVtOjpzZXRUZXh0dXJlUHJpb3JpdGllcyk6CisgICAgICAgIChXZWJDb3JlOjpUaWxl
ZExheWVyQ2hyb21pdW06OnJlc2V0VXBkYXRlU3RhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDRGFtYWdlVHJhY2tlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0RhbWFnZVRyYWNrZXI6OnRyYWNrRGFtYWdlRnJvbUxlZnRvdmVyUmVjdHMpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGlyZWN0UmVuZGVyZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NEaXJlY3RSZW5kZXJlcjo6ZGVjaWRlUmVuZGVyUGFzc0FsbG9j
YXRpb25zRm9yRnJhbWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUaWxpbmdEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUaWxpbmdE
YXRhOjpzZXRCb3VuZHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6
On5DQ0xheWVyVHJlZUhvc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Ojpz
dGFydFJhdGVMaW1pdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6c3Rv
cFJhdGVMaW1pdGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3RJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRSZW5kZXJQYXNz
QnlJZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZXNvdXJj
ZVByb3ZpZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVzb3VyY2VQcm92aWRlcjo6aW5V
c2VCeUNvbnN1bWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVzb3VyY2VQcm92aWRlcjo6ZGVs
ZXRlUmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZXNvdXJjZVByb3ZpZGVyOjpkZWxl
dGVPd25lZFJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Jlc291cmNlUHJvdmlkZXI6
OnJlc291cmNlVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Jlc291cmNlUHJvdmlkZXI6OnVw
bG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Jlc291cmNlUHJvdmlkZXI6OmxvY2tGb3JSZWFk
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVzb3VyY2VQcm92aWRlcjo6dW5sb2NrRm9yUmVhZCk6
CisgICAgICAgIChXZWJDb3JlOjpDQ1Jlc291cmNlUHJvdmlkZXI6OmxvY2tGb3JXcml0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ1Jlc291cmNlUHJvdmlkZXI6OnVubG9ja0ZvcldyaXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDUmVzb3VyY2VQcm92aWRlcjo6ZGVzdHJveUNoaWxkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDUmVzb3VyY2VQcm92aWRlcjo6Z2V0Q2hpbGRUb1BhcmVudE1hcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ1Jlc291cmNlUHJvdmlkZXI6OnByZXBhcmVTZW5kVG9QYXJlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NSZXNvdXJjZVByb3ZpZGVyOjpwcmVwYXJlU2VuZFRvQ2hp
bGQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZXNvdXJjZVByb3ZpZGVyOjpyZWNlaXZlRnJvbUNo
aWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVzb3VyY2VQcm92aWRlcjo6cmVjZWl2ZUZyb21Q
YXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZXNvdXJjZVByb3ZpZGVyOjp0cmFuc2ZlclJl
c291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVzb3VyY2VQcm92aWRlcjo6dHJpbU1haWxi
b3hEZXF1ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0
ZXJHbG9iYWxDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUZpbHRlckdsb2Jh
bENvbnRleHQ6On5DdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OkN1c3RvbUZpbHRlckdsb2JhbENvbnRleHQ6OmdldENvbXBpbGVkUHJvZ3JhbSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJQcm9ncmFtLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkN1c3RvbUZpbHRlclByb2dyYW06Om5vdGlmeUNsaWVudHMpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2tpYS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpnZXRDYWNoZWRIYXJmYnV6ekZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6
cmVsZWFzZUNhY2hlZEhhcmZidXp6RmFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
aGFyZmJ1enovbmcvSGFyZkJ1enpOR0ZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1
enpOR0ZhY2U6OkhhcmZCdXp6TkdGYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6TkdG
YWNlOjp+SGFyZkJ1enpOR0ZhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9T
aW1wbGVGb250RGF0YUNvcmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnRE
YXRhOjpnZXRDRlN0cmluZ0F0dHJpYnV0ZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L21hYy9TaW1wbGVGb250RGF0YU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnRE
YXRhOjpjYW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RPcGVuR0xDb21tb246OmdldFRyYW5zbGF0ZWRTaGFk
ZXJTb3VyY2VBTkdMRSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBo
aWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpjb21waWxlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRTaGFkZXJpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6Z2V0U2hhZGVySW5mb0xvZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6Z2V0U2hhZGVyU291cmNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcv
RUdMRGlzcGxheU9wZW5WRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFR0xEaXNwbGF5T3BlblZH
Ojp+RUdMRGlzcGxheU9wZW5WRyk6CisgICAgICAgIChXZWJDb3JlOjpFR0xEaXNwbGF5T3BlblZH
OjpkZXN0cm95U3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpFR0xEaXNwbGF5T3BlblZHOjpj
b250ZXh0Rm9yU3VyZmFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJHTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0xEYXRh
OjpTaGFyZWRHTERhdGE6OmN1cnJlbnRTaGFyZWRHTERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlckdMRGF0YTo6U2hhcmVkR0xEYXRhOjp+U2hhcmVkR0xEYXRhKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OmdldFNo
YWRlclByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlck1hbmFn
ZXI6OmdldFNoYWRlckZvckZpbHRlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
Y2UvRm9udFBsYXRmb3JtRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaXhlZFNpemVGb250
RGF0YTo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvRGF0YU9iamVjdEd0ay5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEYXRhT2JqZWN0R3RrOjpmb3JDbGlwYm9hcmQpOgorICAgICAg
ICAqIHBsYXRmb3JtL2d0ay9HdGtEcmFnQW5kRHJvcEhlbHBlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpHdGtEcmFnQW5kRHJvcEhlbHBlcjo6aGFuZGxlR2V0RHJhZ0RhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6R3RrRHJhZ0FuZERyb3BIZWxwZXI6OmhhbmRsZURyYWdMZWF2ZSk6CisgICAgICAg
IChXZWJDb3JlOjpHdGtEcmFnQW5kRHJvcEhlbHBlcjo6aGFuZGxlRHJhZ01vdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpHdGtEcmFnQW5kRHJvcEhlbHBlcjo6aGFuZGxlRHJhZ0RhdGFSZWNlaXZl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpHdGtEcmFnQW5kRHJvcEhlbHBlcjo6aGFuZGxlRHJhZ0Ry
b3ApOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0azMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Z3RrU3R5bGVDaGFuZ2VkQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6
Z2V0U3R5bGVDb250ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVN
YWMubW06CisgICAgICAgICgrW1dlYlNjcm9sbGJhclByZWZzT2JzZXJ2ZXIgYXBwZWFyYW5jZVBy
ZWZzQ2hhbmdlZDpdKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWxTdG9y
YWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyZWRlbnRpYWxTdG9yYWdlOjpzZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q3JlZGVudGlhbFN0b3JhZ2U6OmdldCk6CisgICAgICAgICogcGxhdGZv
cm0vbmV0d29yay9IVFRQSGVhZGVyTWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUVFBIZWFk
ZXJNYXA6OmNvcHlEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkhUVFBIZWFkZXJNYXA6OmdldCk6
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9NSU1FSGVhZGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Ok1JTUVIZWFkZXI6OnBhcnNlSGVhZGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3
b3JrL1Jlc291cmNlSGFuZGxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxl
OjpjcmVhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFz
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjphZGRIVFRQSGVh
ZGVyRmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6YWRkSFRU
UEhlYWRlckZpZWxkcyk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jl
c291cmNlUmVxdWVzdEJsYWNrQmVycnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0Ojp0YXJnZXRUeXBlRnJvbU1pbWVUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlUmVxdWVzdDo6aW5pdGlhbGl6ZVBsYXRmb3JtUmVxdWVzdCk6CisgICAgICAgICogcGxhdGZv
cm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Om1ha2VGaW5hbFJlcXVlc3QpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3Vy
Y2VSZXF1ZXN0Q0ZOZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2V0SGVhZGVyRmllbGRzKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlTWFuYWdlcjo6aW5pdGlhbGl6ZUhh
bmRsZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VSZXF1ZXN0TWFj
Lm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Ojpkb1VwZGF0ZVBsYXRmb3Jt
UmVxdWVzdCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9xdC9SZXNvdXJjZVJlcXVlc3RR
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q6OnRvTmV0d29ya1JlcXVl
c3QpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6c2VuZFJlcXVlc3RDYWxsYmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6c2V0Q2xpZW50Q2VydGlmaWNhdGUpOgorICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdDo6dXBkYXRlU291cE1lc3NhZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Ojp0b1NvdXBNZXNzYWdlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXNwb25zZVNvdXAuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVzb3VyY2VSZXNwb25zZTo6dG9Tb3VwTWVzc2FnZSk6CisgICAgICAgICogcGxhdGZv
cm0vbmV0d29yay93aW4vUmVzb3VyY2VIYW5kbGVXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VIYW5kbGU6OnN0YXJ0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9SdW5Mb29wUXQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UnVuTG9vcDo6VGltZXJCYXNlOjp0aW1lckZpcmVkKToK
KyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L0xvY2FsZVRvU2NyaXB0TWFwcGluZ0RlZmF1bHQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6c2NyaXB0TmFtZVRvQ29kZSk6CisgICAgICAgIChXZWJDb3Jl
Ojpsb2NhbGVUb1NjcmlwdENvZGVGb3JGb250U2VsZWN0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9y
bS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBydW5l
QmxhY2tsaXN0ZWRDb2RlY3MpOgorICAgICAgICAoV2ViQ29yZTo6ZHVtcFRleHRFbmNvZGluZ05h
bWVNYXApOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvdHJhbnNjb2Rlci9Gb250VHJhbnNjb2Rl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250VHJhbnNjb2Rlcjo6Y29udmVydGVyVHlwZSk6
CisgICAgICAgICogcGxhdGZvcm0vdGV4dC93aW4vVGV4dENvZGVjV2luLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Okxhbmd1YWdlTWFuYWdlcjo6TGFuZ3VhZ2VNYW5hZ2VyKToKKyAgICAgICAgKFdl
YkNvcmU6OmdldENvZGVQYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY1dpbjo6cmVn
aXN0ZXJFeHRlbmRlZEVuY29kaW5nTmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVj
V2luOjpyZWdpc3RlckV4dGVuZGVkQ29kZWNzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2Rl
Y1dpbjo6ZW51bWVyYXRlU3VwcG9ydGVkRW5jb2RpbmdzKToKKyAgICAgICAgKiBwbGF0Zm9ybS93
aW4vQ2xpcGJvYXJkVXRpbGl0aWVzV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldERhdGFN
YXBJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OmdldENsaXBib2FyZERhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6c2V0Q2xpcGJvYXJkRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vd2luL0NsaXBi
b2FyZFdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRXaW46OnR5cGVzKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpjYWNoZWRTdG9yYWdlRGlyZWN0b3J5KToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vUnVuTG9v
cFdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSdW5Mb29wOjpUaW1lckJhc2U6OnRpbWVyRmly
ZWQpOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9XQ0RhdGFPYmplY3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6V0NEYXRhT2JqZWN0OjpjcmVhdGVJbnN0YW5jZSk6CisgICAgICAgICogcGxhdGZv
cm0vd2luY2UvTUlNRVR5cGVSZWdpc3RyeVdpbkNFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1J
TUVUeXBlUmVnaXN0cnk6OmdldFByZWZlcnJlZEV4dGVuc2lvbkZvck1JTUVUeXBlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS93eC9Db250ZXh0TWVudVd4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRleHRNZW51OjphcHBlbmRJdGVtKToKKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpbkRhdGFiYXNl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNlOjpyZWZyZXNoKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNlOjpNSU1FVHlwZUZvckV4dGVuc2lvbik6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6cmVtb3ZlKToKKyAgICAgICAgKiBwbHVnaW5z
L1BsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2lu
TWFpblRocmVhZFNjaGVkdWxlcjo6c2NoZWR1bGVDYWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlBs
dWdpbk1haW5UaHJlYWRTY2hlZHVsZXI6OmRpc3BhdGNoQ2FsbHMpOgorICAgICAgICAqIHBsdWdp
bnMvUGx1Z2luU3RyZWFtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblN0cmVhbTo6c3Rh
cnRTdHJlYW0pOgorICAgICAgICAqIHBsdWdpbnMvYmxhY2tiZXJyeS9QbHVnaW5EYXRhQmxhY2tC
ZXJyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhOjppbml0UGx1Z2lucyk6Cisg
ICAgICAgICogcGx1Z2lucy93eC9QbHVnaW5EYXRhV3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UGx1Z2luRGF0YTo6aW5pdFBsdWdpbnMpOgorICAgICAgICAqIHJlbmRlcmluZy9GbG93VGhyZWFk
Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGbG93VGhyZWFkQ29udHJvbGxlcjo6
dW5yZWdpc3Rlck5hbWVkRmxvd0NvbnRlbnROb2RlKToKKyAgICAgICAgKiByZW5kZXJpbmcvSW5s
aW5lRmxvd0JveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVGbG93Qm94OjpyZXF1aXJl
c0lkZW9ncmFwaGljQmFzZWxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6
YWRkVGV4dEJveFZpc3VhbE92ZXJmbG93KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxv
Y2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmNsZWFyRmxvYXRzKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OnNldExvZ2ljYWxXaWR0aEZvclRleHRSdW4pOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJCb3hNb2RlbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVF1YWxpdHlD
b250cm9sbGVyOjpoaWdoUXVhbGl0eVJlcGFpbnRUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlUXVhbGl0eUNvbnRyb2xsZXI6OnNob3VsZFBhaW50QXRMb3dRdWFsaXR5KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQ291bnRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJDb3VudGVyOjpkZXN0cm95Q291bnRlck5vZGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckNvdW50ZXI6OmRlc3Ryb3lDb3VudGVyTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjp1cGRh
dGVDb3VudGVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJDb3VudGVyOjpyZW5kZXJlclN0
eWxlQ2hhbmdlZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6c2V0UmVnaW9uUmFuZ2VGb3JCb3gp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6Z2V0UmVnaW9uUmFuZ2VGb3JC
b3gpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllcjo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6cGVyZm9ybU92ZXJs
YXBUZXN0cyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVySW5mby5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlckluZm86OmZpbHRlckluZm9Gb3JS
ZW5kZXJMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlckluZm86OmNy
ZWF0ZUZpbHRlckluZm9Gb3JSZW5kZXJMYXllcklmTmVlZGVkKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyTmFtZWRGbG93VGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck5h
bWVkRmxvd1RocmVhZDo6ZGVwZW5kc09uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck5hbWVk
Rmxvd1RocmVhZDo6cHVzaERlcGVuZGVuY2llcyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clJlZ2lvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZWdpb246OnNldFJlbmRlckJv
eFJlZ2lvbkluZm8pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVnaW9uOjpzZXRSZWdpb25P
YmplY3RzUmVnaW9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVnaW9uOjpyZXN0
b3JlUmVnaW9uT2JqZWN0c09yaWdpbmFsU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
UmVnaW9uOjpjb21wdXRlQ2hpbGRyZW5TdHlsZUluUmVnaW9uKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxl
U2VjdGlvbjo6Y2FjaGVkQ29sbGFwc2VkQm9yZGVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyVGhlbWVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6c3lzdGVt
Q29sb3IpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJWaWV3LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclZpZXc6OnNlbGVjdGlvbkJvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJWaWV3OjpzZXRTZWxlY3Rpb24pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJXaWRn
ZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyV2lkZ2V0OjpyZXN1bWVXaWRnZXRIaWVy
YXJjaHlVcGRhdGVzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSb290SW5saW5lQm94Ojphc2NlbnRBbmREZXNjZW50Rm9yQm94KToK
KyAgICAgICAgKiByZW5kZXJpbmcvVmVydGljYWxQb3NpdGlvbkNhY2hlLmg6CisgICAgICAgIChX
ZWJDb3JlOjpWZXJ0aWNhbFBvc2l0aW9uQ2FjaGU6OmdldCk6CisgICAgICAgICogcmVuZGVyaW5n
L1dyYXBTaGFwZUluZm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6V3JhcFNoYXBlSW5mbzo6ZW5z
dXJlV3JhcFNoYXBlSW5mb0ZvclJlbmRlckJsb2NrKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR0lubGluZVRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHSW5s
aW5lVGV4dDo6Y2hhcmFjdGVyU3RhcnRzTmV3VGV4dENodW5rKToKKyAgICAgICAgKiByZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR1Jlc291cmNlRmlsdGVyOjpwcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudDo6YXBwbHlSZXNvdXJjZSk6Cisg
ICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuOjphcHBseVJlc291cmNlKToK
KyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlc0NhY2hlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1Jlc291cmNlc0NhY2hlOjpyZXNvdXJjZURlc3Ryb3llZCk6CisgICAgICAg
ICogcmVuZGVyaW5nL3N2Zy9TVkdSb290SW5saW5lQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OnN3YXBJdGVtc0luTGF5b3V0QXR0cmlidXRlcyk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9T
VkdUZXh0TGF5b3V0QXR0cmlidXRlcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0TGF5
b3V0QXR0cmlidXRlczo6ZHVtcCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5
b3V0QXR0cmlidXRlc0J1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dExheW91
dEF0dHJpYnV0ZXNCdWlsZGVyOjpidWlsZENoYXJhY3RlckRhdGFNYXApOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyOjpmaWxsQ2hhcmFjdGVyRGF0YU1h
cCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1RleHRMYXlvdXRFbmdpbmU6OmxheW91dFRleHRPbkxpbmVPclBh
dGgpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3NCdWlsZGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRNZXRyaWNzQnVpbGRlcjo6bWVhc3VyZVRleHRSZW5k
ZXJlcik6CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U3RvcmFnZUFyZWFTeW5jOjpzeW5jVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJD
b3JlOjpTdG9yYWdlQXJlYVN5bmM6OnBlcmZvcm1JbXBvcnQpOgorICAgICAgICAoV2ViQ29yZTo6
U3RvcmFnZUFyZWFTeW5jOjpzeW5jKToKKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VNYXAuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU1hcDo6a2V5KToKKyAgICAgICAgKFdlYkNvcmU6
OlN0b3JhZ2VNYXA6OnNldEl0ZW0pOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFj
ZUltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU5hbWVzcGFjZUltcGw6OmxvY2Fs
U3RvcmFnZU5hbWVzcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNlSW1w
bDo6Y29weSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNlSW1wbDo6Y2xvc2Up
OgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU5hbWVzcGFjZUltcGw6OmNsZWFyQWxsT3JpZ2lu
c0ZvckRlbGV0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpz
eW5jKToKKyAgICAgICAgKiBzdmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlQW5pbWF0aW9uRWxlbWVudEZy
b21UYXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZW1v
dmVBbGxBbmltYXRpb25FbGVtZW50c0Zyb21UYXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
RG9jdW1lbnRFeHRlbnNpb25zOjphZGRQZW5kaW5nUmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHRG9jdW1lbnRFeHRlbnNpb25zOjppc0VsZW1lbnRQZW5kaW5nUmVzb3VyY2VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlRWxlbWVudEZyb21Q
ZW5kaW5nUmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0RvY3VtZW50RXh0ZW5zaW9u
czo6c2V0T2ZFbGVtZW50c1JlZmVyZW5jaW5nVGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlQWxsVGFyZ2V0UmVmZXJlbmNlc0ZvckVsZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZW1vdmVBbGxFbGVt
ZW50UmVmZXJlbmNlc0ZvclRhcmdldCk6CisgICAgICAgICogc3ZnL1NWR0VsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudDo6flNWR0VsZW1lbnQpOgorICAgICAgICAqIHN2
Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U01J
TFRpbWVDb250YWluZXI6OnVwZGF0ZUFuaW1hdGlvbnMpOgorICAgICAgICAqIHN2Zy9ncmFwaGlj
cy9TVkdJbWFnZUNhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlQ2FjaGU6On5T
VkdJbWFnZUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlQ2FjaGU6OnJlbW92ZUNs
aWVudEZyb21DYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZUNhY2hlOjpyZXF1ZXN0
ZWRTaXplQW5kU2NhbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlQ2FjaGU6OmltYWdl
Q29udGVudENoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2VDYWNoZTo6cmVkcmF3
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlQ2FjaGU6Omxvb2t1cE9yQ3JlYXRlQml0bWFw
SW1hZ2VGb3JSZW5kZXJlcik6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmls
dGVyQnVpbGRlci5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6ZWZmZWN0
UmVmZXJlbmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjphZGRCdWls
dGluRWZmZWN0cyk6CisgICAgICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0
eS5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRQcm9wZXJ0eTo6flNWR0FuaW1hdGVk
UHJvcGVydHkpOgorICAgICAgICAqIHN2Zy9wcm9wZXJ0aWVzL1NWR0F0dHJpYnV0ZVRvUHJvcGVy
dHlNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQXR0cmlidXRlVG9Qcm9wZXJ0eU1hcDo6
YWRkUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBdHRyaWJ1dGVUb1Byb3BlcnR5
TWFwOjpzeW5jaHJvbml6ZVByb3BlcnRpZXMpOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyQ29u
dGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0OjpoYXNQZW5kaW5nQWN0
aXZpdHkpOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyRXZlbnRRdWV1ZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpXb3JrZXJFdmVudFF1ZXVlOjpjbG9zZSk6CisgICAgICAgICogeG1sL1hNTEh0
dHBSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpzZXRSZXF1
ZXN0SGVhZGVySW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6Omdl
dEFsbFJlc3BvbnNlSGVhZGVycyk6CisgICAgICAgICogeG1sL1hQYXRoRnVuY3Rpb25zLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpjcmVhdGVGdW5jdGlvbik6CisgICAgICAgICogeG1s
L1hQYXRoUGFyc2VyLmNwcDoKKyAgICAgICAgKGlzQXhpc05hbWUpOgorICAgICAgICAqIHhtbC9Y
U0xUUHJvY2Vzc29yTGlieHNsdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp4c2x0UGFyYW1BcnJh
eUZyb21QYXJhbWV0ZXJNYXApOgorICAgICAgICAqIHhtbC9YU0xUUHJvY2Vzc29yUXQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6WFNMVFByb2Nlc3Nvcjo6dHJhbnNmb3JtVG9TdHJpbmcpOgorCiAy
MDEyLTA4LTI3ICBOaWtoaWwgQmhhcmdhdmEgIDxuYmhhcmdhdmFAZ29vZ2xlLmNvbT4KIAogICAg
ICAgICBTcGxpdCBMYXlvdXRUeXBlcy5oIHRvIGltcHJvdmUgY29tcGlsZSB0aW1lCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9i
bGFja2JlcnJ5L0NoYW5nZUxvZwppbmRleCBmZmRmZGNhYjA5ZTdlNjAwZjRkMTBjNGRkOGNjN2Ix
ZWI3MDQ2ZjFhLi5lYWU4ZmZkNDMxNTZkYzZhYTNhY2E0YTMxM2Y2OGZlMWQzOWI4ZDBkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXQvYmxhY2tiZXJyeS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOCBAQAorMjAxMi0wOC0yNyAg
Q2FpbyBNYXJjZWxvIGRlIE9saXZlaXJhIEZpbGhvICA8Y2Fpby5vbGl2ZWlyYUBvcGVuYm9zc2Eu
b3JnPgorCisgICAgICAgIFJlbmFtZSBmaXJzdC9zZWNvbmQgdG8ga2V5L3ZhbHVlIGluIEhhc2hN
YXAgaXRlcmF0b3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD04Mjc4NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogQXBpL0JhY2tpbmdTdG9yZS5jcHA6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6
OkJhY2tpbmdTdG9yZVByaXZhdGU6OnNldEJhY2tpbmdTdG9yZVJlY3QpOgorICAgICAgICAoQmxh
Y2tCZXJyeTo6V2ViS2l0OjpCYWNraW5nU3RvcmVQcml2YXRlOjp2aXNpYmxlVGlsZXNSZWN0KToK
KyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6QmFja2luZ1N0b3JlUHJpdmF0ZTo6cmVzZXRU
aWxlcyk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkJhY2tpbmdTdG9yZVByaXZhdGU6
OnVwZGF0ZVRpbGVzKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6QmFja2luZ1N0b3Jl
UHJpdmF0ZTo6dXBkYXRlVGlsZXNGb3JTY3JvbGxPck5vdFJlbmRlcmVkUmVnaW9uKToKKyAgICAg
ICAgKEJsYWNrQmVycnk6OldlYktpdDo6QmFja2luZ1N0b3JlUHJpdmF0ZTo6bWFwRnJvbVRyYW5z
Zm9ybWVkQ29udGVudHNUb1RpbGVzKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9Ob3RpZmlj
YXRpb25QcmVzZW50ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vdGlmaWNhdGlvblBy
ZXNlbnRlckltcGw6OmNhbmNlbCk6CisgICAgICAgIChXZWJDb3JlOjpOb3RpZmljYXRpb25QcmVz
ZW50ZXJJbXBsOjpvblBlcm1pc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6Tm90aWZpY2F0aW9u
UHJlc2VudGVySW1wbDo6bm90aWZpY2F0aW9uQ2xpY2tlZCk6CisgICAgICAgICogV2ViS2l0U3Vw
cG9ydC9BYm91dERhdGEuY3BwOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpkdW1wSlND
VHlwZUNvdW50U2V0VG9UYWJsZUhUTUwpOgorICAgICAgICAqIFdlYktpdFN1cHBvcnQvRnJhbWVM
YXllcnMuY3BwOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpGcmFtZUxheWVyczo6cmVt
b3ZlTGF5ZXJCeUZyYW1lKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6RnJhbWVMYXll
cnM6OmNvbW1pdE9uV2ViS2l0VGhyZWFkKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6
RnJhbWVMYXllcnM6OmNhbGN1bGF0ZVJvb3RMYXllcik6CisKIDIwMTItMDgtMjcgIFNoZXJpZmYg
Qm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQs
IHJvbGxpbmcgb3V0IHIxMjY3NzIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDM4OGIy
MjIwOWM5NDk2NTFmY2EwY2E4YTY3NDliOGRlZTdiZDM4OWUuLmI1OTgxNDQ5OWMwOTAyOTllNDAy
NzViY2U4NzAyNzYyZjkzYWYzNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTkgQEAKKzIwMTItMDgtMjcgIENhaW8gTWFyY2VsbyBkZSBPbGl2ZWlyYSBGaWxobyAgPGNh
aW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KKworICAgICAgICBSZW5hbWUgZmlyc3Qvc2Vjb25k
IHRvIGtleS92YWx1ZSBpbiBIYXNoTWFwIGl0ZXJhdG9ycworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI3ODQKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHNyYy9XZWJHZW9sb2NhdGlvblBlcm1pc3Npb25S
ZXF1ZXN0TWFuYWdlci5jcHA6CisgICAgICAgIChXZWJHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1
ZXN0TWFuYWdlcjo6cmVtb3ZlKToKKyAgICAgICAgKiBzcmMvV2ViSURCTWV0YWRhdGEuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJJREJNZXRhZGF0YTo6V2ViSURCTWV0YWRhdGEpOgorICAgICAg
ICAqIHNyYy9XZWJJbnRlbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnRlbnQ6OmV4dHJh
c1ZhbHVlKToKKyAgICAgICAgKiB0ZXN0cy9XZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyVGVz
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpURVNUX0YpOgorCiAyMDEyLTA4LTI0ICBKYW1lcyBS
b2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBDbGVh
biB1cCBkZXBlbmRlbmNpZXMgb2YgV2ViU2Nyb2xsYmFyIGFuZCBXZWJTY3JvbGxiYXJMYXllcgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9l
ZmwvQ2hhbmdlTG9nCmluZGV4IDRhOGJiYjgwZDBiNjNlODEzMjgwZmY0MzkzNGQ1MzVjZjY1NTUx
YzAuLmExMTY3ODM1ODhmYWYwYjkxZTJmMzdkY2QxNjM2MmJlNTRlMjk0NTEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxMi0wOC0yNyAgQ2FpbyBNYXJjZWxvIGRlIE9saXZl
aXJhIEZpbGhvICA8Y2Fpby5vbGl2ZWlyYUBvcGVuYm9zc2Eub3JnPgorCisgICAgICAgIFJlbmFt
ZSBmaXJzdC9zZWNvbmQgdG8ga2V5L3ZhbHVlIGluIEhhc2hNYXAgaXRlcmF0b3JzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Mjc4NAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQv
RHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsLmNwcDoKKyAgICAgICAgKER1bXBSZW5kZXJUcmVlU3Vw
cG9ydEVmbDo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQpOgorICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc0VmbC5jcHA6CisgICAgICAgIChQbGF0Zm9ybVN0
cmF0ZWdpZXNFZmw6OmdldFBsdWdpbkluZm8pOgorICAgICAgICAqIGV3ay9ld2tfaW50ZW50LmNw
cDoKKyAgICAgICAgKGV3a19pbnRlbnRfZXh0cmFfZ2V0KToKKwogMjAxMi0wOC0yNyAgTWlraGFp
bCBQb3pkbnlha292ICA8bWlraGFpbC5wb3pkbnlha292QGludGVsLmNvbT4KIAogICAgICAgICBS
ZW5hbWUgUmVnaXN0ZXJQcm90b2NvbEhhbmRsZXIgQVBJIHRvIE5hdmlnYXRvckNvbnRlbnRVdGls
cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dC9ndGsvQ2hhbmdlTG9nCmluZGV4IDA4MTMwYmNhN2M4YjI1YTgyYzU5NmIwYzMzZGU4NGQ1OTMx
ZWE1NDMuLjlkMzIwMWI4MjgxYmNmYmZkZDQ4NTc4YThlOWJmMDE2MTAxODk1NzUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxMi0wOC0yNyAgQ2FpbyBNYXJjZWxvIGRlIE9s
aXZlaXJhIEZpbGhvICA8Y2Fpby5vbGl2ZWlyYUBvcGVuYm9zc2Eub3JnPgorCisgICAgICAgIFJl
bmFtZSBmaXJzdC9zZWNvbmQgdG8ga2V5L3ZhbHVlIGluIEhhc2hNYXAgaXRlcmF0b3JzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Mjc4NAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZVN1cHBv
cnQvUGxhdGZvcm1TdHJhdGVnaWVzR3RrLmNwcDoKKyAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2ll
c0d0azo6Z2V0UGx1Z2luSW5mbyk6CisgICAgICAgICogd2Via2l0L3dlYmtpdGZhdmljb25kYXRh
YmFzZS5jcHA6CisgICAgICAgICh3ZWJraXRGYXZpY29uRGF0YWJhc2VJbXBvcnRGaW5pc2hlZCk6
CisgICAgICAgICogd2Via2l0L3dlYmtpdHdlYnBsdWdpbi5jcHA6CisgICAgICAgICh3ZWJraXRf
d2ViX3BsdWdpbl9nZXRfbWltZXR5cGVzKToKKwogMjAxMi0wOC0yNyAgTWlraGFpbCBQb3pkbnlh
a292ICA8bWlraGFpbC5wb3pkbnlha292QGludGVsLmNvbT4KIAogICAgICAgICBSZW5hbWUgUmVn
aXN0ZXJQcm90b2NvbEhhbmRsZXIgQVBJIHRvIE5hdmlnYXRvckNvbnRlbnRVdGlscwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9tYWMvQ2hh
bmdlTG9nCmluZGV4IGI0NjAxZDNkYzc2MDA4OTMzMGUzY2FiNjUyNTJlMGJlNTIxOGVkMzkuLjYy
ODZmNzcyYmVjOTA3ZWY3NjlkMDI4MTE3NjhkMDU4MTEwZDFjM2UgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSw0NCBAQAorMjAxMi0wOC0yNyAgQ2FpbyBNYXJjZWxvIGRlIE9saXZlaXJhIEZp
bGhvICA8Y2Fpby5vbGl2ZWlyYUBvcGVuYm9zc2Eub3JnPgorCisgICAgICAgIFJlbmFtZSBmaXJz
dC9zZWNvbmQgdG8ga2V5L3ZhbHVlIGluIEhhc2hNYXAgaXRlcmF0b3JzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Mjc4NAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogSGlzdG9yeS9XZWJIaXN0b3J5Lm1t
OgorICAgICAgICAoLVtXZWJIaXN0b3J5UHJpdmF0ZSByZW1vdmVJdGVtRnJvbURhdGVDYWNoZXM6
XSk6CisgICAgICAgICgtW1dlYkhpc3RvcnlQcml2YXRlIG9yZGVyZWRMYXN0VmlzaXRlZERheXNd
KToKKyAgICAgICAgKFdlYkhpc3RvcnlXcml0ZXI6OldlYkhpc3RvcnlXcml0ZXIpOgorICAgICAg
ICAqIE1pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW06CisgICAgICAgICgrW1dlYkNvcmVTdGF0aXN0
aWNzIGphdmFTY3JpcHRQcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzXSk6CisgICAgICAgICgrW1dl
YkNvcmVTdGF0aXN0aWNzIGphdmFTY3JpcHRPYmplY3RUeXBlQ291bnRzXSk6CisgICAgICAgICog
UGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlci5tbToKKyAgICAgICAgKFdl
YktpdDo6TmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlcjo6aG9zdEZvclBsdWdpbik6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXI6OnBsdWdpbkhvc3REaWVkKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlcjo6ZGlkQ3JlYXRlV2luZG93
KToKKyAgICAgICAgKiBQbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkhvc3RQcm94eS5tbToK
KyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5Ib3N0UHJveHk6OnBsdWdpbkhvc3REaWVk
KToKKyAgICAgICAgKiBQbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHku
bW06CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6TG9jYWxP
YmplY3RNYXA6OmlkRm9yT2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5J
bnN0YW5jZVByb3h5OjpMb2NhbE9iamVjdE1hcDo6cmV0YWluKToKKyAgICAgICAgKFdlYktpdDo6
TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpMb2NhbE9iamVjdE1hcDo6cmVsZWFzZSk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6TG9jYWxPYmplY3RN
YXA6OmZvcmdldCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94
eTo6ZGVzdHJveSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94
eTo6d2ViRnJhbWVEaWRGaW5pc2hMb2FkV2l0aFJlYXNvbik6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6Y2FuY2VsQ2hlY2tJZkFsbG93ZWRUb0xvYWRVUkwp
OgorICAgICAgICAqIFBsdWdpbnMvSG9zdGVkL1Byb3h5SW5zdGFuY2UubW06CisgICAgICAgIChX
ZWJLaXQ6OlByb3h5SW5zdGFuY2U6Om1ldGhvZHNOYW1lZCk6CisgICAgICAgIChXZWJLaXQ6OlBy
b3h5SW5zdGFuY2U6OmZpZWxkTmFtZWQpOgorICAgICAgICAqIFBsdWdpbnMvV2ViTmV0c2NhcGVQ
bHVnaW5WaWV3Lm1tOgorICAgICAgICAoLVtXZWJOZXRzY2FwZVBsdWdpblZpZXcgc3RvcFRpbWVy
c10pOgorICAgICAgICAoLVtXZWJOZXRzY2FwZVBsdWdpblZpZXcgc3RhcnRUaW1lcnNdKToKKyAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJOb3RpZmljYXRpb25DbGllbnQubW06CisgICAgICAg
IChXZWJOb3RpZmljYXRpb25DbGllbnQ6OnNob3cpOgorICAgICAgICAoV2ViTm90aWZpY2F0aW9u
Q2xpZW50OjpjbGVhck5vdGlmaWNhdGlvbnMpOgorICAgICAgICAoV2ViTm90aWZpY2F0aW9uQ2xp
ZW50Ojpub3RpZmljYXRpb25PYmplY3REZXN0cm95ZWQpOgorICAgICAgICAqIFdlYlZpZXcvV2Vi
SFRNTFZpZXcubW06CisgICAgICAgIChjb21tYW5kTmFtZUZvclNlbGVjdG9yKToKKwogMjAxMi0w
OC0yNyAgTWlraGFpbCBQb3pkbnlha292ICA8bWlraGFpbC5wb3pkbnlha292QGludGVsLmNvbT4K
IAogICAgICAgICBSZW5hbWUgUmVnaXN0ZXJQcm90b2NvbEhhbmRsZXIgQVBJIHRvIE5hdmlnYXRv
ckNvbnRlbnRVdGlscwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwppbmRleCA4YzEzMDY2YjEzNzA2YWZiYjgzMmEwMTEy
YzI0NGY0MDExODFmYmM2Li44ZWU4NGFhMjc3NmQ4NDg1NmZjMWI0NzE1ZjdlNDk3YWQyMjRhYzg1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0L3F0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDEyLTA4LTI3ICBDYWlvIE1hcmNl
bG8gZGUgT2xpdmVpcmEgRmlsaG8gIDxjYWlvLm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+CisKKyAg
ICAgICAgUmVuYW1lIGZpcnN0L3NlY29uZCB0byBrZXkvdmFsdWUgaW4gSGFzaE1hcCBpdGVyYXRv
cnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyNzg0
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBBcGkv
cXdlYnBhZ2UuY3BwOgorICAgICAgICAoZXh0cmFjdENvbnRlbnRUeXBlRnJvbVBsdWdpblZlY3Rv
cik6CisgICAgICAgICogQXBpL3F3ZWJwbHVnaW5kYXRhYmFzZS5jcHA6CisgICAgICAgIChRV2Vi
UGx1Z2luSW5mbzo6bWltZVR5cGVzKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QbGF0Zm9y
bVN0cmF0ZWdpZXNRdC5jcHA6CisgICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNRdDo6Z2V0UGx1
Z2luSW5mbyk6CisKIDIwMTItMDgtMjIgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RA
Z21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMjYyODcuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L3dp
bi9DaGFuZ2VMb2cKaW5kZXggMzE5YTc1Y2ViYTM2Mzk4NGZlMTE0NDVkNzk0OTM4NjM0ZTM5MDE4
NS4uNDBkNWUwNTczYzYyYzE0MzE3NTc4MTFiOTk2MzYwYjk1OTEwMDZmNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDEyLTA4LTI3ICBDYWlvIE1hcmNlbG8gZGUgT2xpdmVp
cmEgRmlsaG8gIDxjYWlvLm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+CisKKyAgICAgICAgUmVuYW1l
IGZpcnN0L3NlY29uZCB0byBrZXkvdmFsdWUgaW4gSGFzaE1hcCBpdGVyYXRvcnMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyNzg0CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBDT01Qcm9wZXJ0eUJhZy5o
OgorICAgICAgICAoOjpSZWFkKToKKyAgICAgICAgKDo6R2V0UHJvcGVydHlJbmZvKToKKyAgICAg
ICAgKiBXZWJDb3JlU3RhdGlzdGljcy5jcHA6CisgICAgICAgIChXZWJDb3JlU3RhdGlzdGljczo6
amF2YVNjcmlwdFByb3RlY3RlZE9iamVjdFR5cGVDb3VudHMpOgorICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHA6CisgICAgICAgIChXZWJQbGF0Zm9ybVN0
cmF0ZWdpZXM6OmdldFBsdWdpbkluZm8pOgorICAgICAgICAqIFdlYkhpc3RvcnkuY3BwOgorICAg
ICAgICAoV2ViSGlzdG9yeTo6cmVtb3ZlSXRlbUZyb21EYXRlQ2FjaGVzKToKKyAgICAgICAgKiBX
ZWJLaXRDT01BUEkuY3BwOgorICAgICAgICAoY2xhc3NGYWN0b3J5KToKKyAgICAgICAgKiBXZWJL
aXRTdGF0aXN0aWNzLmNwcDoKKyAgICAgICAgKFdlYktpdFN0YXRpc3RpY3M6OmNvbUNsYXNzTmFt
ZUNvdW50cyk6CisgICAgICAgICogV2ViTm90aWZpY2F0aW9uQ2VudGVyLmNwcDoKKyAgICAgICAg
KFdlYk5vdGlmaWNhdGlvbkNlbnRlcjo6cG9zdE5vdGlmaWNhdGlvbkludGVybmFsKToKKyAgICAg
ICAgKFdlYk5vdGlmaWNhdGlvbkNlbnRlcjo6YWRkT2JzZXJ2ZXIpOgorICAgICAgICAoV2ViTm90
aWZpY2F0aW9uQ2VudGVyOjpyZW1vdmVPYnNlcnZlcik6CisKIDIwMTItMDgtMjMgIEFkcmllbm5l
IFdhbGtlciAgPGVubmVAZ29vZ2xlLmNvbT4KIAogICAgICAgICBDb252ZXJ0IFNjcm9sbGFibGVB
cmVhIEFTU0VSVF9OT1RfUkVBQ0hFRCB2aXJ0dWFscwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC93aW5jZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L3dpbmNlL0NoYW5nZUxvZwppbmRleCAz
MWY1MjE3NDYwYzkxZDc4NjJhODg5ZTE0NTZlZGM4YWYxZmRhNjEwLi4zMTRjNDBkMTA1ZjhjOTcz
NDc3Mjc2NDZjMzUzY2UxNzZlNTE0ZTQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbmNl
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L3dpbmNlL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDEzIEBACisyMDEyLTA4LTI3ICBDYWlvIE1hcmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gIDxjYWlv
Lm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+CisKKyAgICAgICAgUmVuYW1lIGZpcnN0L3NlY29uZCB0
byBrZXkvdmFsdWUgaW4gSGFzaE1hcCBpdGVyYXRvcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyNzg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdp
ZXNXaW5DRS5jcHA6CisgICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6Z2V0UGx1Z2lu
SW5mbyk6CisKIDIwMTItMDgtMTMgIFRvbSBTZXBleiAgPHRzZXBlekBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgW2Nocm9taXVtXSByZWxlYXNlIEZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6bV9wbHVn
aW5XaWRnZXQgcmVmcHRyIHVwb24gUGx1Z2luIERvY3VtZW50IGRldGFjaC4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRl
eCBlZGQ1Njg5ZWQzYjQ0YzY2ZTExOGUzNTIyZWMxNTNiZGJmNjQyMDY3Li4wMzMxNzgyMzUyOWY2
M2Q5MTUzMTAwNTcxNjZjODA5ZDk1NGU5YjA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTI5IEBA
CisyMDEyLTA4LTI3ICBDYWlvIE1hcmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gIDxjYWlvLm9saXZl
aXJhQG9wZW5ib3NzYS5vcmc+CisKKyAgICAgICAgUmVuYW1lIGZpcnN0L3NlY29uZCB0byBrZXkv
dmFsdWUgaW4gSGFzaE1hcCBpdGVyYXRvcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTgyNzg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBQbGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50Q29kZXJzLmg6Cisg
ICAgICAgICogUGxhdGZvcm0vQ29yZUlQQy9Db25uZWN0aW9uLmNwcDoKKyAgICAgICAgKENvcmVJ
UEM6OkNvbm5lY3Rpb246OlN5bmNNZXNzYWdlU3RhdGU6OmdldE9yQ3JlYXRlKToKKyAgICAgICAg
KENvcmVJUEM6OkNvbm5lY3Rpb246OndhaXRGb3JNZXNzYWdlKToKKyAgICAgICAgKENvcmVJUEM6
OkNvbm5lY3Rpb246OnByb2Nlc3NJbmNvbWluZ01lc3NhZ2UpOgorICAgICAgICAqIFBsYXRmb3Jt
L2d0ay9Xb3JrUXVldWVHdGsuY3BwOgorICAgICAgICAoV29ya1F1ZXVlOjpyZWdpc3RlckV2ZW50
U291cmNlSGFuZGxlcik6CisgICAgICAgIChXb3JrUXVldWU6OnVucmVnaXN0ZXJFdmVudFNvdXJj
ZUhhbmRsZXIpOgorICAgICAgICAqIFBsYXRmb3JtL21hYy9Xb3JrUXVldWVNYWMuY3BwOgorICAg
ICAgICAoV29ya1F1ZXVlOjp1bnJlZ2lzdGVyTWFjaFBvcnRFdmVudEhhbmRsZXIpOgorICAgICAg
ICAqIFNoYXJlZC9QbHVnaW5zL05QUmVtb3RlT2JqZWN0TWFwLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6TlBSZW1vdGVPYmplY3RNYXA6OnBsdWdpbkRlc3Ryb3llZCk6CisgICAgICAgICogU2hhcmVk
L1VzZXJNZXNzYWdlQ29kZXJzLmg6CisgICAgICAgIChXZWJLaXQ6OlVzZXJNZXNzYWdlRW5jb2Rl
cjo6YmFzZUVuY29kZSk6CisgICAgICAgICogU2hhcmVkL1dlYlByZWZlcmVuY2VzU3RvcmUuY3Bw
OgorICAgICAgICAoV2ViS2l0Ojp2YWx1ZUZvcktleSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBy
ZWZlcmVuY2VzU3RvcmU6OmdldEJvb2xWYWx1ZUZvcktleSk6CisgICAgICAgICogU2hhcmVkL21h
Yy9XZWJDb3JlQXJndW1lbnRDb2RlcnNNYWMubW06CisgICAgICAgIChDb3JlSVBDOjo6OmRlY29k
ZSk6CisgICAgICAgICogU2hhcmVkL3F0L0FyZ3VtZW50Q29kZXJzUXQuY3BwOgorICAgICAgICAo
Q29yZUlQQzo6OjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9zb3VwL1dlYkNvcmVBcmd1bWVu
dENvZGVyc1NvdXAuY3BwOgorICAgICAgICAoQ29yZUlQQzo6OjpkZWNvZGUpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdC5jcHA6CisgICAgICAgIChf
RXdrX0JhY2tfRm9yd2FyZF9MaXN0Ojp+X0V3a19CYWNrX0ZvcndhcmRfTGlzdCk6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwOgorICAgICAgICAoX0V3a19Db250
ZXh0Ojp+X0V3a19Db250ZXh0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmll
dy5jcHA6CisgICAgICAgIChfZXdrX3ZpZXdfcHJpdl9sb2FkaW5nX3Jlc291cmNlc19jbGVhcik6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHA6CisgICAgICAg
ICh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3N1YnJlc291cmNlcyk6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwOgorICAgICAgICAod2Via2l0V2ViVmlld0Jh
c2VDb250YWluZXJGb3JhbGwpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dLUHJpbnRp
bmdWaWV3Lm1tOgorICAgICAgICAoLVtXS1ByaW50aW5nVmlldyBfZXhwZWN0ZWRQcmV2aWV3Q2Fs
bGJhY2tGb3JSZWN0Ol0pOgorICAgICAgICAocGFnZURpZERyYXdUb1BERik6CisgICAgICAgICgt
W1dLUHJpbnRpbmdWaWV3IF9kcmF3UHJldmlldzpdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L21hYy9XS1ZpZXcubW06CisgICAgICAgIChjb21tYW5kTmFtZUZvclNlbGVjdG9yKToKKyAgICAg
ICAgKC1bV0tWaWV3IHZhbGlkYXRlVXNlckludGVyZmFjZUl0ZW06XSk6CisgICAgICAgICogVUlQ
cm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZEJhY2tpbmdTdG9yZTo6dXBkYXRlVGlsZSk6Cisg
ICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjp0ZXh0dXJlKToKKyAgICAg
ICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OnBhaW50VG9UZXh0dXJlTWFwcGVy
KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OmNvbW1pdFRpbGVP
cGVyYXRpb25zKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXll
clRyZWVDb29yZGluYXRvclByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29v
cmRpbmF0b3JQcm94eTo6dXBkYXRlVGlsZUZvckxheWVyKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
Q29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVSZW5kZXJlci5jcHA6CisgICAgICAgIChXZWJL
aXQ6OkxheWVyVHJlZVJlbmRlcmVyOjphZGp1c3RQb3NpdGlvbkZvckZpeGVkTGF5ZXJzKToKKyAg
ICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlUmVuZGVyZXI6OnN5bmNDYW52YXMpOgorICAgICAgICAo
V2ViS2l0OjpMYXllclRyZWVSZW5kZXJlcjo6c2V0TGF5ZXJDaGlsZHJlbik6CisgICAgICAgIChX
ZWJLaXQ6OkxheWVyVHJlZVJlbmRlcmVyOjpzZXRMYXllckZpbHRlcnMpOgorICAgICAgICAoV2Vi
S2l0OjpMYXllclRyZWVSZW5kZXJlcjo6c2V0TGF5ZXJTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6
OkxheWVyVHJlZVJlbmRlcmVyOjphc3NpZ25JbWFnZVRvTGF5ZXIpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9HZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6R2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eTo6aW52
YWxpZGF0ZVJlcXVlc3RzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL1dl
Ykluc3BlY3RvclNlcnZlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclNlcnZl
cjo6fldlYkluc3BlY3RvclNlcnZlcik6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclNl
cnZlcjo6cmVnaXN0ZXJQYWdlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVy
L1dlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24uY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJTb2Nr
ZXRTZXJ2ZXJDb25uZWN0aW9uOjpzZW5kSFRUUFJlc3BvbnNlSGVhZGVyKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL3F0L1dlYkluc3BlY3RvclNlcnZlclF0LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yU2VydmVyOjpidWlsZFBhZ2VMaXN0KToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvTm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVz
dE1hbmFnZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5vdGlmaWNhdGlvblBlcm1pc3Np
b25SZXF1ZXN0TWFuYWdlclByb3h5OjppbnZhbGlkYXRlUmVxdWVzdHMpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6
OlBsdWdpblByb2Nlc3NQcm94eTo6cGx1Z2luUHJvY2Vzc0NyYXNoZWRPckZhaWxlZFRvTGF1bmNo
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJLaXQ6
OmNyZWF0ZURpY3Rpb25hcnlGcm9tSGFzaE1hcCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYklj
b25EYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkljb25EYXRhYmFzZTo6ZGlkRmlu
aXNoVVJMSW1wb3J0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViSW50ZW50RGF0YS5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkludGVudERhdGE6OmV4dHJhcyk6CisgICAgICAgICogVUlQcm9j
ZXNzL1dlYlByb2Nlc3NQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94
eTo6Y2hlY2tVUkxSZWNlaXZlZEZyb21XZWJQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzc1Byb3h5OjphZGRCYWNrRm9yd2FyZEl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzUHJveHk6OmZyYW1lQ291bnRJblBhZ2UpOgorICAgICAgICAqIFdlYlByb2Nlc3MvR2Vv
bG9jYXRpb24vR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlcjo6Y2FuY2VsUmVx
dWVzdEZvckdlb2xvY2F0aW9uKToKKyAgICAgICAgKFdlYktpdDo6R2VvbG9jYXRpb25QZXJtaXNz
aW9uUmVxdWVzdE1hbmFnZXI6OmRpZFJlY2VpdmVHZW9sb2NhdGlvblBlcm1pc3Npb25EZWNpc2lv
bik6CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5k
bGVOb2RlSGFuZGxlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVOb2RlSGFu
ZGxlOjpnZXRPckNyZWF0ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9E
T00vSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkluamVj
dGVkQnVuZGxlUmFuZ2VIYW5kbGU6OmdldE9yQ3JlYXRlKToKKyAgICAgICAgKiBXZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlSW50ZW50LmNwcDoKKyAgICAgICAgKFdlYktp
dDo6SW5qZWN0ZWRCdW5kbGVJbnRlbnQ6OmV4dHJhcyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9O
b3RpZmljYXRpb25zL1dlYk5vdGlmaWNhdGlvbk1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJOb3RpZmljYXRpb25NYW5hZ2VyOjpwb2xpY3lGb3JPcmlnaW4pOgorICAgICAgICAoV2Vi
S2l0OjpXZWJOb3RpZmljYXRpb25NYW5hZ2VyOjpzaG93KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Tm90aWZpY2F0aW9uTWFuYWdlcjo6Y2xlYXJOb3RpZmljYXRpb25zKToKKyAgICAgICAgKFdlYktp
dDo6V2ViTm90aWZpY2F0aW9uTWFuYWdlcjo6cmVtb3ZlTm90aWZpY2F0aW9uRnJvbUNvbnRleHRN
YXApOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmpl
Y3RNYXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpOUFJ1bnRpbWVPYmplY3RNYXA6OmludmFsaWRh
dGUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdp
bi5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luOjpkZXN0cm95U3RyZWFtKToK
KyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW46OnVuc2NoZWR1bGVUaW1lcik6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luOjpmcmFtZURpZEZpbmlzaExvYWRpbmcpOgorICAg
ICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbjo6ZnJhbWVEaWRGYWlsKToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHA6CisgICAgICAgIChXZWJLaXQ6OmJ1aWxk
SFRUUEhlYWRlcnMpOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3Ojp+UGx1Z2luVmlldyk6
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcjo6bGF5ZXJCeUlEKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29v
cmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5jcHA6CisgICAgICAgIChXZWJL
aXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjphZG9wdEltYWdlQmFja2luZ1N0b3JlKToKKyAgICAg
ICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnJlbGVhc2VJbWFnZUJhY2tpbmdTdG9y
ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFByb3h5
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQmFja0ZvcndhcmRMaXN0UHJveHk6OnJlbW92ZUl0
ZW0pOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbToKKyAg
ICAgICAgKFdlYktpdDo6Y29tbWFuZE5hbWVGb3JTZWxlY3Rvck5hbWUpOgorICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OnZp
c2l0ZWRMaW5rU3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6YWxs
VmlzaXRlZExpbmtTdGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpm
b2N1c2VkV2ViUGFnZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OmNyZWF0ZVdlYlBh
Z2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjp3ZWJQYWdlR3JvdXApOgorICAgICAg
ICAoV2ViS2l0Ojpmcm9tQ291bnRlZFNldFRvSGFzaE1hcCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlByb2Nlc3M6OnNldFRleHRDaGVja2VyU3RhdGUpOgorCiAyMDEyLTA4LTI3ICBTaW1vbiBGcmFz
ZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2UgRm9yY2UgUmVwYWlu
dCB3b3JrIHdpdGggdGlsZWQgYmFja2luZyBzdG9yZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTQ2FsbGJhY2tPYmplY3QuaAppbmRleCAyYzNlMGU4NTlmMTZlODk1ODFhMmZhMzU2Yjg0
OTJmMjAzNzkyMDdkLi44ODg2ZjExMTUwNGVkZGYyNzJjYzg4NzZmMDRmYzA1YTRjODI4MGM2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaApAQCAtODMs
MTMgKzgzLDEzIEBAIHN0cnVjdCBKU0NhbGxiYWNrT2JqZWN0RGF0YSA6IFdlYWtIYW5kbGVPd25l
ciB7CiAgICAgICAgICAgICBQcml2YXRlUHJvcGVydHlNYXA6OmNvbnN0X2l0ZXJhdG9yIGxvY2F0
aW9uID0gbV9wcm9wZXJ0eU1hcC5maW5kKHByb3BlcnR5TmFtZS5pbXBsKCkpOwogICAgICAgICAg
ICAgaWYgKGxvY2F0aW9uID09IG1fcHJvcGVydHlNYXAuZW5kKCkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWUoKTsKLSAgICAgICAgICAgIHJldHVybiBsb2NhdGlvbi0+c2Vjb25kLmdl
dCgpOworICAgICAgICAgICAgcmV0dXJuIGxvY2F0aW9uLT52YWx1ZS5nZXQoKTsKICAgICAgICAg
fQogICAgICAgICAKICAgICAgICAgdm9pZCBzZXRQcml2YXRlUHJvcGVydHkoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBKU0NlbGwqIG93bmVyLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUsIEpTVmFsdWUgdmFsdWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIFdyaXRlQmFycmllcjxV
bmtub3duPiBlbXB0eTsKLSAgICAgICAgICAgIG1fcHJvcGVydHlNYXAuYWRkKHByb3BlcnR5TmFt
ZS5pbXBsKCksIGVtcHR5KS5pdGVyYXRvci0+c2Vjb25kLnNldChnbG9iYWxEYXRhLCBvd25lciwg
dmFsdWUpOworICAgICAgICAgICAgbV9wcm9wZXJ0eU1hcC5hZGQocHJvcGVydHlOYW1lLmltcGwo
KSwgZW1wdHkpLml0ZXJhdG9yLT52YWx1ZS5zZXQoZ2xvYmFsRGF0YSwgb3duZXIsIHZhbHVlKTsK
ICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgdm9pZCBkZWxldGVQcml2YXRlUHJvcGVydHko
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQpAQCAtMTAwLDggKzEwMCw4IEBAIHN0cnVj
dCBKU0NhbGxiYWNrT2JqZWN0RGF0YSA6IFdlYWtIYW5kbGVPd25lciB7CiAgICAgICAgIHZvaWQg
dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICAgICAgewogICAgICAgICAg
ICAgZm9yIChQcml2YXRlUHJvcGVydHlNYXA6Oml0ZXJhdG9yIHB0ciA9IG1fcHJvcGVydHlNYXAu
YmVnaW4oKTsgcHRyICE9IG1fcHJvcGVydHlNYXAuZW5kKCk7ICsrcHRyKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKHB0ci0+c2Vjb25kKQotICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVu
ZCgmcHRyLT5zZWNvbmQpOworICAgICAgICAgICAgICAgIGlmIChwdHItPnZhbHVlKQorICAgICAg
ICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgmcHRyLT52YWx1ZSk7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Nh
bGxiYWNrT2JqZWN0RnVuY3Rpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2Fs
bGJhY2tPYmplY3RGdW5jdGlvbnMuaAppbmRleCAxNjBmNDg4ODdiODcyYzI5YmMzZTJhZGJlZGM5
MWVmYWZjZDRkOTM5Li4yY2FlMjFjNTJhODhhOGIyMmY1YzNmMzYwMzQ1YmRmMDJlYjc5NWYzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5j
dGlvbnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RG
dW5jdGlvbnMuaApAQCAtNDY1LDggKzQ2NSw4IEBAIHZvaWQgSlNDYWxsYmFja09iamVjdDxQYXJl
bnQ+OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSoKICAg
ICAgICAgICAgIHR5cGVkZWYgT3BhcXVlSlNDbGFzc1N0YXRpY1ZhbHVlc1RhYmxlOjpjb25zdF9p
dGVyYXRvciBpdGVyYXRvcjsKICAgICAgICAgICAgIGl0ZXJhdG9yIGVuZCA9IHN0YXRpY1ZhbHVl
cy0+ZW5kKCk7CiAgICAgICAgICAgICBmb3IgKGl0ZXJhdG9yIGl0ID0gc3RhdGljVmFsdWVzLT5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgICAgICBTdHJpbmdJbXBsKiBu
YW1lID0gaXQtPmZpcnN0LmdldCgpOwotICAgICAgICAgICAgICAgIFN0YXRpY1ZhbHVlRW50cnkq
IGVudHJ5ID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgICAgICBTdHJpbmdJbXBsKiBu
YW1lID0gaXQtPmtleS5nZXQoKTsKKyAgICAgICAgICAgICAgICBTdGF0aWNWYWx1ZUVudHJ5KiBl
bnRyeSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgICAgICBpZiAoZW50cnktPmdldFBy
b3BlcnR5ICYmICghKGVudHJ5LT5hdHRyaWJ1dGVzICYga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250
RW51bSkgfHwgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykpKQogICAgICAgICAg
ICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyKGV4ZWMsIG5hbWUpKTsKICAg
ICAgICAgICAgIH0KQEAgLTQ3Niw4ICs0NzYsOCBAQCB2b2lkIEpTQ2FsbGJhY2tPYmplY3Q8UGFy
ZW50Pjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqCiAg
ICAgICAgICAgICB0eXBlZGVmIE9wYXF1ZUpTQ2xhc3NTdGF0aWNGdW5jdGlvbnNUYWJsZTo6Y29u
c3RfaXRlcmF0b3IgaXRlcmF0b3I7CiAgICAgICAgICAgICBpdGVyYXRvciBlbmQgPSBzdGF0aWNG
dW5jdGlvbnMtPmVuZCgpOwogICAgICAgICAgICAgZm9yIChpdGVyYXRvciBpdCA9IHN0YXRpY0Z1
bmN0aW9ucy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAgU3Ry
aW5nSW1wbCogbmFtZSA9IGl0LT5maXJzdC5nZXQoKTsKLSAgICAgICAgICAgICAgICBTdGF0aWNG
dW5jdGlvbkVudHJ5KiBlbnRyeSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICAgICAg
U3RyaW5nSW1wbCogbmFtZSA9IGl0LT5rZXkuZ2V0KCk7CisgICAgICAgICAgICAgICAgU3RhdGlj
RnVuY3Rpb25FbnRyeSogZW50cnkgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICAgICAg
aWYgKCEoZW50cnktPmF0dHJpYnV0ZXMgJiBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRFbnVtKSB8
fCAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKSkKICAgICAgICAgICAgICAgICAg
ICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihleGVjLCBuYW1lKSk7CiAgICAgICAgICAg
ICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2xhc3NSZWYuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NsYXNzUmVmLmNwcAppbmRleCAxMzQ0MzE2
NTQ3ODkxNWY4YTEzYTRkYmQzODA0NDFlZDI0YmM0ZDJkLi45NjVlZWRkNGYxYjg2ZGFkYjM0ZTY0
YmViMDM4N2FkYzMwMTIwYzZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQ2xhc3NSZWYuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDbGFzc1Jl
Zi5jcHAKQEAgLTEwNywxMyArMTA3LDEzIEBAIE9wYXF1ZUpTQ2xhc3M6On5PcGFxdWVKU0NsYXNz
KCkKICAgICBpZiAobV9zdGF0aWNWYWx1ZXMpIHsKICAgICAgICAgT3BhcXVlSlNDbGFzc1N0YXRp
Y1ZhbHVlc1RhYmxlOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3N0YXRpY1ZhbHVlcy0+ZW5kKCk7
CiAgICAgICAgIGZvciAoT3BhcXVlSlNDbGFzc1N0YXRpY1ZhbHVlc1RhYmxlOjpjb25zdF9pdGVy
YXRvciBpdCA9IG1fc3RhdGljVmFsdWVzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAg
ICAgICAgICBBU1NFUlQoIWl0LT5maXJzdC0+aXNJZGVudGlmaWVyKCkpOworICAgICAgICAgICAg
QVNTRVJUKCFpdC0+a2V5LT5pc0lkZW50aWZpZXIoKSk7CiAgICAgfQogCiAgICAgaWYgKG1fc3Rh
dGljRnVuY3Rpb25zKSB7CiAgICAgICAgIE9wYXF1ZUpTQ2xhc3NTdGF0aWNGdW5jdGlvbnNUYWJs
ZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9zdGF0aWNGdW5jdGlvbnMtPmVuZCgpOwogICAgICAg
ICBmb3IgKE9wYXF1ZUpTQ2xhc3NTdGF0aWNGdW5jdGlvbnNUYWJsZTo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtX3N0YXRpY0Z1bmN0aW9ucy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAg
ICAgICAgQVNTRVJUKCFpdC0+Zmlyc3QtPmlzSWRlbnRpZmllcigpKTsKKyAgICAgICAgICAgIEFT
U0VSVCghaXQtPmtleS0+aXNJZGVudGlmaWVyKCkpOwogICAgIH0KICNlbmRpZgogICAgIApAQCAt
MTQ3LDggKzE0Nyw4IEBAIE9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YTo6T3BhcXVlSlNDbGFzc0Nv
bnRleHREYXRhKEpTQzo6SlNHbG9iYWxEYXRhJiwgT3BhcXVlSlNDCiAgICAgICAgIHN0YXRpY1Zh
bHVlcyA9IGFkb3B0UHRyKG5ldyBPcGFxdWVKU0NsYXNzU3RhdGljVmFsdWVzVGFibGUpOwogICAg
ICAgICBPcGFxdWVKU0NsYXNzU3RhdGljVmFsdWVzVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IGpzQ2xhc3MtPm1fc3RhdGljVmFsdWVzLT5lbmQoKTsKICAgICAgICAgZm9yIChPcGFxdWVKU0Ns
YXNzU3RhdGljVmFsdWVzVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0ganNDbGFzcy0+bV9zdGF0
aWNWYWx1ZXMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgQVNTRVJU
KCFpdC0+Zmlyc3QtPmlzSWRlbnRpZmllcigpKTsKLSAgICAgICAgICAgIHN0YXRpY1ZhbHVlcy0+
YWRkKFN0cmluZ0ltcGw6OmNyZWF0ZShpdC0+Zmlyc3QtPmNoYXJhY3RlcnMoKSwgaXQtPmZpcnN0
LT5sZW5ndGgoKSksIGFkb3B0UHRyKG5ldyBTdGF0aWNWYWx1ZUVudHJ5KGl0LT5zZWNvbmQtPmdl
dFByb3BlcnR5LCBpdC0+c2Vjb25kLT5zZXRQcm9wZXJ0eSwgaXQtPnNlY29uZC0+YXR0cmlidXRl
cykpKTsKKyAgICAgICAgICAgIEFTU0VSVCghaXQtPmtleS0+aXNJZGVudGlmaWVyKCkpOworICAg
ICAgICAgICAgc3RhdGljVmFsdWVzLT5hZGQoU3RyaW5nSW1wbDo6Y3JlYXRlKGl0LT5rZXktPmNo
YXJhY3RlcnMoKSwgaXQtPmtleS0+bGVuZ3RoKCkpLCBhZG9wdFB0cihuZXcgU3RhdGljVmFsdWVF
bnRyeShpdC0+dmFsdWUtPmdldFByb3BlcnR5LCBpdC0+dmFsdWUtPnNldFByb3BlcnR5LCBpdC0+
dmFsdWUtPmF0dHJpYnV0ZXMpKSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE1NiwxNSArMTU2
LDE1IEBAIE9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YTo6T3BhcXVlSlNDbGFzc0NvbnRleHREYXRh
KEpTQzo6SlNHbG9iYWxEYXRhJiwgT3BhcXVlSlNDCiAgICAgICAgIHN0YXRpY0Z1bmN0aW9ucyA9
IGFkb3B0UHRyKG5ldyBPcGFxdWVKU0NsYXNzU3RhdGljRnVuY3Rpb25zVGFibGUpOwogICAgICAg
ICBPcGFxdWVKU0NsYXNzU3RhdGljRnVuY3Rpb25zVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IGpzQ2xhc3MtPm1fc3RhdGljRnVuY3Rpb25zLT5lbmQoKTsKICAgICAgICAgZm9yIChPcGFxdWVK
U0NsYXNzU3RhdGljRnVuY3Rpb25zVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0ganNDbGFzcy0+
bV9zdGF0aWNGdW5jdGlvbnMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAg
ICAgQVNTRVJUKCFpdC0+Zmlyc3QtPmlzSWRlbnRpZmllcigpKTsKLSAgICAgICAgICAgIHN0YXRp
Y0Z1bmN0aW9ucy0+YWRkKFN0cmluZ0ltcGw6OmNyZWF0ZShpdC0+Zmlyc3QtPmNoYXJhY3RlcnMo
KSwgaXQtPmZpcnN0LT5sZW5ndGgoKSksIGFkb3B0UHRyKG5ldyBTdGF0aWNGdW5jdGlvbkVudHJ5
KGl0LT5zZWNvbmQtPmNhbGxBc0Z1bmN0aW9uLCBpdC0+c2Vjb25kLT5hdHRyaWJ1dGVzKSkpOwor
ICAgICAgICAgICAgQVNTRVJUKCFpdC0+a2V5LT5pc0lkZW50aWZpZXIoKSk7CisgICAgICAgICAg
ICBzdGF0aWNGdW5jdGlvbnMtPmFkZChTdHJpbmdJbXBsOjpjcmVhdGUoaXQtPmtleS0+Y2hhcmFj
dGVycygpLCBpdC0+a2V5LT5sZW5ndGgoKSksIGFkb3B0UHRyKG5ldyBTdGF0aWNGdW5jdGlvbkVu
dHJ5KGl0LT52YWx1ZS0+Y2FsbEFzRnVuY3Rpb24sIGl0LT52YWx1ZS0+YXR0cmlidXRlcykpKTsK
ICAgICAgICAgfQogICAgIH0KIH0KIAogT3BhcXVlSlNDbGFzc0NvbnRleHREYXRhJiBPcGFxdWVK
U0NsYXNzOjpjb250ZXh0RGF0YShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgT3duUHRyPE9wYXF1
ZUpTQ2xhc3NDb250ZXh0RGF0YT4mIGNvbnRleHREYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpLm9w
YXF1ZUpTQ2xhc3NEYXRhLmFkZCh0aGlzLCBudWxscHRyKS5pdGVyYXRvci0+c2Vjb25kOworICAg
IE93blB0cjxPcGFxdWVKU0NsYXNzQ29udGV4dERhdGE+JiBjb250ZXh0RGF0YSA9IGV4ZWMtPmds
b2JhbERhdGEoKS5vcGFxdWVKU0NsYXNzRGF0YS5hZGQodGhpcywgbnVsbHB0cikuaXRlcmF0b3It
PnZhbHVlOwogICAgIGlmICghY29udGV4dERhdGEpCiAgICAgICAgIGNvbnRleHREYXRhID0gYWRv
cHRQdHIobmV3IE9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YShleGVjLT5nbG9iYWxEYXRhKCksIHRo
aXMpKTsKICAgICByZXR1cm4gKmNvbnRleHREYXRhOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmNwcAppbmRleCBkNDUyYmQ0NDYyYTZlYWRlNjRkOTVlN2Y3NWVj
Njg4NDYxYmJlNmFkLi41ZmFkOWU3MjVlMzc2OTMwN2Q3OThhYTg3NjZiODZjN2M5OTA5OWVhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcApAQCAtNjU2
LDcgKzY1Niw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wKEV4ZWNTdGF0ZSogZXhlYykKICAgICAg
ICAgICAgIGRhdGFMb2coIiAgJTFkID0ge1xuIiwgaSk7CiAgICAgICAgICAgICBTdHJpbmdKdW1w
VGFibGU6OlN0cmluZ09mZnNldFRhYmxlOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3JhcmVEYXRh
LT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbaV0ub2Zmc2V0VGFibGUuZW5kKCk7CiAgICAgICAg
ICAgICBmb3IgKFN0cmluZ0p1bXBUYWJsZTo6U3RyaW5nT2Zmc2V0VGFibGU6OmNvbnN0X2l0ZXJh
dG9yIGl0ZXIgPSBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbaV0ub2Zmc2V0
VGFibGUuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikKLSAgICAgICAgICAgICAgICBkYXRh
TG9nKCJcdFx0XCIlc1wiID0+ICUwNGRcbiIsIFVTdHJpbmcoaXRlci0+Zmlyc3QpLnV0ZjgoKS5k
YXRhKCksIGl0ZXItPnNlY29uZC5icmFuY2hPZmZzZXQpOworICAgICAgICAgICAgICAgIGRhdGFM
b2coIlx0XHRcIiVzXCIgPT4gJTA0ZFxuIiwgVVN0cmluZyhpdGVyLT5rZXkpLnV0ZjgoKS5kYXRh
KCksIGl0ZXItPnZhbHVlLmJyYW5jaE9mZnNldCk7CiAgICAgICAgICAgICBkYXRhTG9nKCIgICAg
ICB9XG4iKTsKICAgICAgICAgICAgICsraTsKICAgICAgICAgfSB3aGlsZSAoaSA8IG1fcmFyZURh
dGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5zaXplKCkpOwpAQCAtMTg5Myw3ICsxODkzLDcg
QEAgdm9pZCBFdmFsQ29kZUNhY2hlOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBFdmFsQ2FjaGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fY2FjaGVNYXAuZW5kKCk7
CiAgICAgZm9yIChFdmFsQ2FjaGVNYXA6Oml0ZXJhdG9yIHB0ciA9IG1fY2FjaGVNYXAuYmVnaW4o
KTsgcHRyICE9IGVuZDsgKytwdHIpCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kKCZwdHItPnNlY29u
ZCk7CisgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZwdHItPnZhbHVlKTsKIH0KIAogdm9pZCBDb2Rl
QmxvY2s6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpAQCAtMzAwOCw4ICsz
MDA4LDggQEAgVVN0cmluZyBDb2RlQmxvY2s6Om5hbWVGb3JSZWdpc3RlcihpbnQgcmVnaXN0ZXJO
dW1iZXIpCiB7CiAgICAgU3ltYm9sVGFibGU6Oml0ZXJhdG9yIGVuZCA9IG1fc3ltYm9sVGFibGUt
PmVuZCgpOwogICAgIGZvciAoU3ltYm9sVGFibGU6Oml0ZXJhdG9yIHB0ciA9IG1fc3ltYm9sVGFi
bGUtPmJlZ2luKCk7IHB0ciAhPSBlbmQ7ICsrcHRyKSB7Ci0gICAgICAgIGlmIChwdHItPnNlY29u
ZC5nZXRJbmRleCgpID09IHJlZ2lzdGVyTnVtYmVyKQotICAgICAgICAgICAgcmV0dXJuIFVTdHJp
bmcocHRyLT5maXJzdCk7CisgICAgICAgIGlmIChwdHItPnZhbHVlLmdldEluZGV4KCkgPT0gcmVn
aXN0ZXJOdW1iZXIpCisgICAgICAgICAgICByZXR1cm4gVVN0cmluZyhwdHItPmtleSk7CiAgICAg
fQogICAgIGlmIChuZWVkc0FjdGl2YXRpb24oKSAmJiByZWdpc3Rlck51bWJlciA9PSBhY3RpdmF0
aW9uUmVnaXN0ZXIoKSkKICAgICAgICAgcmV0dXJuICJhY3RpdmF0aW9uIjsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9KdW1wVGFibGUuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9KdW1wVGFibGUuaAppbmRleCA1YmJlMDQ3MTA3ZjViMDFjMDI4
OWJlYTMzMTg2ZTFmODRhM2FhZmM3Li42MDM2Y2RhNTFkNWJjZjU2NWVhZTk3ZThkYjI2NTUxYzkw
MjU1YzczIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSnVtcFRh
YmxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0p1bXBUYWJsZS5oCkBA
IC01Nyw3ICs1Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgU3RyaW5nT2Zmc2V0
VGFibGU6OmNvbnN0X2l0ZXJhdG9yIGxvYyA9IG9mZnNldFRhYmxlLmZpbmQodmFsdWUpOwogICAg
ICAgICAgICAgaWYgKGxvYyA9PSBlbmQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRP
ZmZzZXQ7Ci0gICAgICAgICAgICByZXR1cm4gbG9jLT5zZWNvbmQuYnJhbmNoT2Zmc2V0OworICAg
ICAgICAgICAgcmV0dXJuIGxvYy0+dmFsdWUuYnJhbmNoT2Zmc2V0OwogICAgICAgICB9CiAKICNp
ZiBFTkFCTEUoSklUKQpAQCAtNjcsNyArNjcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
ICAgIFN0cmluZ09mZnNldFRhYmxlOjpjb25zdF9pdGVyYXRvciBsb2MgPSBvZmZzZXRUYWJsZS5m
aW5kKHZhbHVlKTsKICAgICAgICAgICAgIGlmIChsb2MgPT0gZW5kKQogICAgICAgICAgICAgICAg
IHJldHVybiBjdGlEZWZhdWx0OwotICAgICAgICAgICAgcmV0dXJuIGxvYy0+c2Vjb25kLmN0aU9m
ZnNldDsKKyAgICAgICAgICAgIHJldHVybiBsb2MtPnZhbHVlLmN0aU9mZnNldDsKICAgICAgICAg
fQogI2VuZGlmCiAgICAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3BwCmluZGV4IDU5ZjBkMDIzNDM0MTdh
NzQxYmM4MjU3MzdkMjYxMTNjZGM3YTMyOTUuLmY5MjNlNGEyOGJiY2IwMDM5YTUzNzNlOTZmODQ1
MjNlNzljZWUwODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9M
YXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0xhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcApAQCAtODEsNyArODEsNyBAQCBMYXp5
T3BlcmFuZFZhbHVlUHJvZmlsZSogTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVQYXJzZXI6OmdldElm
UHJlc2VudCgKICAgICBpZiAoaXRlciA9PSBtX21hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuIDA7
CiAgICAgCi0gICAgcmV0dXJuIGl0ZXItPnNlY29uZDsKKyAgICByZXR1cm4gaXRlci0+dmFsdWU7
CiB9CiAKIFNwZWN1bGF0ZWRUeXBlIExhenlPcGVyYW5kVmFsdWVQcm9maWxlUGFyc2VyOjpwcmVk
aWN0aW9uKApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NhbXBs
aW5nVG9vbC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2FtcGxpbmdUb29s
LmNwcAppbmRleCBmMDdkYzc5ZmI3ODI1OGQ4NjFkNGY0ODUxN2YxYjU1YjI5NjM5NTNkLi5mOWI4
MjQ1ZTU0NzdhOGYzMGVkNTIxYzMxMjZiZjAxOWQ1Y2IyZTY3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2FtcGxpbmdUb29sLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2FtcGxpbmdUb29sLmNwcApAQCAtNDEwLDcgKzQxMCw3IEBA
IHZvaWQgU2FtcGxpbmdUb29sOjpkdW1wKEV4ZWNTdGF0ZSogZXhlYykKICAgICBWZWN0b3I8U2Ny
aXB0U2FtcGxlUmVjb3JkKj4gY29kZUJsb2NrU2FtcGxlcyhzY29wZUNvdW50KTsKICAgICBTY3Jp
cHRTYW1wbGVSZWNvcmRNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3Njb3BlU2FtcGxlTWFwLT5iZWdp
bigpOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2NvcGVDb3VudDsgKytpLCArK2l0ZXIpCi0g
ICAgICAgIGNvZGVCbG9ja1NhbXBsZXNbaV0gPSBpdGVyLT5zZWNvbmQuZ2V0KCk7CisgICAgICAg
IGNvZGVCbG9ja1NhbXBsZXNbaV0gPSBpdGVyLT52YWx1ZS5nZXQoKTsKIAogICAgIHFzb3J0KGNv
ZGVCbG9ja1NhbXBsZXMuYmVnaW4oKSwgc2NvcGVDb3VudCwgc2l6ZW9mKFNjcmlwdFNhbXBsZVJl
Y29yZCopLCBjb21wYXJlU2NyaXB0U2FtcGxlUmVjb3Jkcyk7CiAKQEAgLTQ0Niw4ICs0NDYsOCBA
QCB2b2lkIFNhbXBsaW5nVG9vbDo6ZHVtcChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgICAgICAg
ICAgVmVjdG9yPExpbmVDb3VudEluZm8+IGxpbmVDb3VudEluZm8obGluZXNDb3VudCk7CiAgICAg
ICAgICAgICAgICAgaW50IGxpbmVubyA9IDA7CiAgICAgICAgICAgICAgICAgZm9yIChIYXNoTWFw
PHVuc2lnbmVkLHVuc2lnbmVkPjo6aXRlcmF0b3IgaXRlciA9IGxpbmVDb3VudHMuYmVnaW4oKTsg
aXRlciAhPSBsaW5lQ291bnRzLmVuZCgpOyArK2l0ZXIsICsrbGluZW5vKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGxpbmVDb3VudEluZm9bbGluZW5vXS5saW5lID0gaXRlci0+Zmlyc3Q7Ci0gICAg
ICAgICAgICAgICAgICAgIGxpbmVDb3VudEluZm9bbGluZW5vXS5jb3VudCA9IGl0ZXItPnNlY29u
ZDsKKyAgICAgICAgICAgICAgICAgICAgbGluZUNvdW50SW5mb1tsaW5lbm9dLmxpbmUgPSBpdGVy
LT5rZXk7CisgICAgICAgICAgICAgICAgICAgIGxpbmVDb3VudEluZm9bbGluZW5vXS5jb3VudCA9
IGl0ZXItPnZhbHVlOwogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIHFzb3J0
KGxpbmVDb3VudEluZm8uYmVnaW4oKSwgbGluZXNDb3VudCwgc2l6ZW9mKExpbmVDb3VudEluZm8p
LCBjb21wYXJlTGluZUNvdW50SW5mb1NhbXBsaW5nKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKaW5kZXggMDVk
ZjljYWZiYzMzNDExN2NjMzM3ZGEyNDg3MWQ4Y2UzYmJkYWRjNC4uNjhiZmM4NGVmMjI5Y2MyYTFk
ZTg1N2YwNjdiOTdhMTZhM2U4NWRiMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKQEAgLTIzMCw3ICsyMzAs
NyBAQCBib29sIEJ5dGVjb2RlR2VuZXJhdG9yOjphZGRWYXIoY29uc3QgSWRlbnRpZmllciYgaWRl
bnQsIGJvb2wgaXNDb25zdGFudCwgUmVnaXN0ZQogICAgIFN5bWJvbFRhYmxlOjpBZGRSZXN1bHQg
cmVzdWx0ID0gc3ltYm9sVGFibGUoKS5hZGQoaWRlbnQuaW1wbCgpLCBuZXdFbnRyeSk7CiAKICAg
ICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIHIwID0gJnJlZ2lzdGVyRm9yKHJl
c3VsdC5pdGVyYXRvci0+c2Vjb25kLmdldEluZGV4KCkpOworICAgICAgICByMCA9ICZyZWdpc3Rl
ckZvcihyZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldEluZGV4KCkpOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogCkBAIC0yNDgsOCArMjQ4LDggQEAgaW50IEJ5dGVjb2RlR2VuZXJhdG9y
OjphZGRHbG9iYWxWYXIoCiAgICAgICAgIG5ld0VudHJ5LmF0dGVtcHRUb1dhdGNoKCk7CiAgICAg
U3ltYm9sVGFibGU6OkFkZFJlc3VsdCByZXN1bHQgPSBzeW1ib2xUYWJsZSgpLmFkZChpZGVudC5p
bXBsKCksIG5ld0VudHJ5KTsKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAg
IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLm5vdGlmeVdyaXRlKCk7Ci0gICAgICAgIGluZGV4ID0g
cmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQuZ2V0SW5kZXgoKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZS5ub3RpZnlXcml0ZSgpOworICAgICAgICBpbmRleCA9IHJlc3VsdC5pdGVyYXRv
ci0+dmFsdWUuZ2V0SW5kZXgoKTsKICAgICB9CiAgICAgcmV0dXJuIGluZGV4OwogfQpAQCAtMTA2
Myw3ICsxMDYzLDcgQEAgdW5zaWduZWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmFkZENvbnN0YW50KGNv
bnN0IElkZW50aWZpZXImIGlkZW50KQogICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKICAgICAg
ICAgbV9jb2RlQmxvY2stPmFkZElkZW50aWZpZXIoSWRlbnRpZmllcihtX2dsb2JhbERhdGEsIHJl
cCkpOwogCi0gICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgIHJldHVybiBy
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogfQogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRv
cjo6YWRkQ29uc3RhbnRWYWx1ZShKU1ZhbHVlIHYpCkBAIC0xMDc2LDcgKzEwNzYsNyBAQCBSZWdp
c3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6YWRkQ29uc3RhbnRWYWx1ZShKU1ZhbHVlIHYpCiAg
ICAgICAgICsrbV9uZXh0Q29uc3RhbnRPZmZzZXQ7CiAgICAgICAgIG1fY29kZUJsb2NrLT5hZGRD
b25zdGFudChKU1ZhbHVlKHYpKTsKICAgICB9IGVsc2UKLSAgICAgICAgaW5kZXggPSByZXN1bHQu
aXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgaW5kZXggPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVl
OwogCiAgICAgcmV0dXJuICZtX2NvbnN0YW50UG9vbFJlZ2lzdGVyc1tpbmRleF07CiB9CkBAIC0x
MjIzLDcgKzEyMjMsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdExvYWQo
UmVnaXN0ZXJJRCogZHN0LCBkb3VibGUgbnVtYmVyKQogICAgIC8vIHdvcmsgY29ycmVjdGx5IHdp
dGggTmFOIGFzIGEga2V5LgogICAgIGlmIChpc25hbihudW1iZXIpIHx8IG51bWJlciA9PSBIYXNo
VHJhaXRzPGRvdWJsZT46OmVtcHR5VmFsdWUoKSB8fCBIYXNoVHJhaXRzPGRvdWJsZT46OmlzRGVs
ZXRlZFZhbHVlKG51bWJlcikpCiAgICAgICAgIHJldHVybiBlbWl0TG9hZChkc3QsIGpzTnVtYmVy
KG51bWJlcikpOwotICAgIEpTVmFsdWUmIHZhbHVlSW5NYXAgPSBtX251bWJlck1hcC5hZGQobnVt
YmVyLCBKU1ZhbHVlKCkpLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgSlNWYWx1ZSYgdmFsdWVJbk1h
cCA9IG1fbnVtYmVyTWFwLmFkZChudW1iZXIsIEpTVmFsdWUoKSkuaXRlcmF0b3ItPnZhbHVlOwog
ICAgIGlmICghdmFsdWVJbk1hcCkKICAgICAgICAgdmFsdWVJbk1hcCA9IGpzTnVtYmVyKG51bWJl
cik7CiAgICAgcmV0dXJuIGVtaXRMb2FkKGRzdCwgdmFsdWVJbk1hcCk7CkBAIC0xMjMxLDcgKzEy
MzEsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdExvYWQoUmVnaXN0ZXJJ
RCogZHN0LCBkb3VibGUgbnVtYmVyKQogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdExvYWQoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKQog
ewotICAgIEpTU3RyaW5nKiYgc3RyaW5nSW5NYXAgPSBtX3N0cmluZ01hcC5hZGQoaWRlbnRpZmll
ci5pbXBsKCksIDApLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgSlNTdHJpbmcqJiBzdHJpbmdJbk1h
cCA9IG1fc3RyaW5nTWFwLmFkZChpZGVudGlmaWVyLmltcGwoKSwgMCkuaXRlcmF0b3ItPnZhbHVl
OwogICAgIGlmICghc3RyaW5nSW5NYXApCiAgICAgICAgIHN0cmluZ0luTWFwID0ganNPd25lZFN0
cmluZyhnbG9iYWxEYXRhKCksIGlkZW50aWZpZXIudXN0cmluZygpKTsKICAgICByZXR1cm4gZW1p
dExvYWQoZHN0LCBKU1ZhbHVlKHN0cmluZ0luTWFwKSk7CkBAIC0xNzczLDcgKzE3NzMsNyBAQCB1
bnNpZ25lZCBCeXRlY29kZUdlbmVyYXRvcjo6YWRkQ29uc3RhbnRCdWZmZXIodW5zaWduZWQgbGVu
Z3RoKQogCiBKU1N0cmluZyogQnl0ZWNvZGVHZW5lcmF0b3I6OmFkZFN0cmluZ0NvbnN0YW50KGNv
bnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIpCiB7Ci0gICAgSlNTdHJpbmcqJiBzdHJpbmdJbk1h
cCA9IG1fc3RyaW5nTWFwLmFkZChpZGVudGlmaWVyLmltcGwoKSwgMCkuaXRlcmF0b3ItPnNlY29u
ZDsKKyAgICBKU1N0cmluZyomIHN0cmluZ0luTWFwID0gbV9zdHJpbmdNYXAuYWRkKGlkZW50aWZp
ZXIuaW1wbCgpLCAwKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCFzdHJpbmdJbk1hcCkgewog
ICAgICAgICBzdHJpbmdJbk1hcCA9IGpzU3RyaW5nKGdsb2JhbERhdGEoKSwgaWRlbnRpZmllci51
c3RyaW5nKCkpOwogICAgICAgICBhZGRDb25zdGFudFZhbHVlKHN0cmluZ0luTWFwKTsKQEAgLTE4
NDUsOCArMTg0NSw4IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TGF6eU5l
d0Z1bmN0aW9uKFJlZ2lzdGVySUQqIGRzdCwgRnVuY3Rpb25Cb2R5CiB7CiAgICAgRnVuY3Rpb25P
ZmZzZXRNYXA6OkFkZFJlc3VsdCBwdHIgPSBtX2Z1bmN0aW9uT2Zmc2V0cy5hZGQoZnVuY3Rpb24s
IDApOwogICAgIGlmIChwdHIuaXNOZXdFbnRyeSkKLSAgICAgICAgcHRyLml0ZXJhdG9yLT5zZWNv
bmQgPSBtX2NvZGVCbG9jay0+YWRkRnVuY3Rpb25EZWNsKG1ha2VGdW5jdGlvbihtX2dsb2JhbERh
dGEsIGZ1bmN0aW9uKSk7Ci0gICAgcmV0dXJuIGVtaXROZXdGdW5jdGlvbkludGVybmFsKGRzdCwg
cHRyLml0ZXJhdG9yLT5zZWNvbmQsIHRydWUpOworICAgICAgICBwdHIuaXRlcmF0b3ItPnZhbHVl
ID0gbV9jb2RlQmxvY2stPmFkZEZ1bmN0aW9uRGVjbChtYWtlRnVuY3Rpb24obV9nbG9iYWxEYXRh
LCBmdW5jdGlvbikpOworICAgIHJldHVybiBlbWl0TmV3RnVuY3Rpb25JbnRlcm5hbChkc3QsIHB0
ci5pdGVyYXRvci0+dmFsdWUsIHRydWUpOwogfQogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdE5ld0Z1bmN0aW9uSW50ZXJuYWwoUmVnaXN0ZXJJRCogZHN0LCB1bnNpZ25lZCBp
bmRleCwgYm9vbCBkb051bGxDaGVjaykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAppbmRleCA5ZGE1OWEwMDliOGJjMjE4YjE0MmFl
ODRhY2IxZWE2ZmJlMDU5NDIyLi4wY2FiMzk2YTRjMDZiYjM3ZDk0YTE5MzAyZTI0NjJmY2M5ZmM1
M2FmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVz
Q29kZWdlbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rl
c0NvZGVnZW4uY3BwCkBAIC0yNjEsNyArMjYxLDcgQEAgUmVnaXN0ZXJJRCogUHJvcGVydHlMaXN0
Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGUK
ICAgICAgICAgICAgIEdldHRlclNldHRlclBhaXIgcGFpcihub2RlLCBzdGF0aWNfY2FzdDxQcm9w
ZXJ0eU5vZGUqPigwKSk7CiAgICAgICAgICAgICBHZXR0ZXJTZXR0ZXJNYXA6OkFkZFJlc3VsdCBy
ZXN1bHQgPSBtYXAuYWRkKG5vZGUtPm5hbWUoKS5pbXBsKCksIHBhaXIpOwogICAgICAgICAgICAg
aWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgICAgICByZXN1bHQuaXRlcmF0b3It
PnNlY29uZC5zZWNvbmQgPSBub2RlOworICAgICAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+
dmFsdWUuc2Vjb25kID0gbm9kZTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIEl0ZXJhdGUgb3Zl
ciB0aGUgcmVtYWluaW5nIHByb3BlcnRpZXMgaW4gdGhlIGxpc3QuCkBAIC0yNzksNyArMjc5LDcg
QEAgUmVnaXN0ZXJJRCogUHJvcGVydHlMaXN0Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2Vu
ZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGUKICAgICAgICAgICAgIEFTU0VSVChub2RlLT5tX3R5
cGUgPT0gUHJvcGVydHlOb2RlOjpHZXR0ZXIgfHwgbm9kZS0+bV90eXBlID09IFByb3BlcnR5Tm9k
ZTo6U2V0dGVyKTsKICAgICAgICAgICAgIEdldHRlclNldHRlck1hcDo6aXRlcmF0b3IgaXQgPSBt
YXAuZmluZChub2RlLT5uYW1lKCkuaW1wbCgpKTsKICAgICAgICAgICAgIEFTU0VSVChpdCAhPSBt
YXAuZW5kKCkpOwotICAgICAgICAgICAgR2V0dGVyU2V0dGVyUGFpciYgcGFpciA9IGl0LT5zZWNv
bmQ7CisgICAgICAgICAgICBHZXR0ZXJTZXR0ZXJQYWlyJiBwYWlyID0gaXQtPnZhbHVlOwogCiAg
ICAgICAgICAgICAvLyBXYXMgdGhpcyBhbHJlYWR5IGdlbmVyYXRlZCBhcyBhIHBhcnQgb2YgaXRz
IHBhcnRuZXI/CiAgICAgICAgICAgICBpZiAocGFpci5zZWNvbmQgPT0gbm9kZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3BwCmluZGV4IDBhNjZkNmYzNGU2ZjRi
YzljYzZkMDQ3YmY5ODZkZmI0MWI3MGViZDAuLjU0ODNkMmUwZTc0YTc0NmJmNmJkZDVmMjYzMTkx
YjE5YzAzYWY5YTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9E
ZWJ1Z2dlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2Vy
LmNwcApAQCAtNTksNyArNTksNyBAQCBpbmxpbmUgUmVjb21waWxlcjo6flJlY29tcGlsZXIoKQog
ICAgIC8vIEphdmFTY3JpcHQgaW4gdGhlIGluc3BlY3Rvci4KICAgICBTb3VyY2VQcm92aWRlck1h
cDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9zb3VyY2VQcm92aWRlcnMuZW5kKCk7CiAgICAgZm9y
IChTb3VyY2VQcm92aWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1fc291cmNlUHJvdmlk
ZXJzLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCi0gICAgICAgIG1fZGVidWdnZXItPnNv
dXJjZVBhcnNlZChpdGVyLT5zZWNvbmQsIGl0ZXItPmZpcnN0LCAtMSwgVVN0cmluZygpKTsKKyAg
ICAgICAgbV9kZWJ1Z2dlci0+c291cmNlUGFyc2VkKGl0ZXItPnZhbHVlLCBpdGVyLT5rZXksIC0x
LCBVU3RyaW5nKCkpOwogfQogCiBpbmxpbmUgdm9pZCBSZWNvbXBpbGVyOjpvcGVyYXRvcigpKEpT
Q2VsbCogY2VsbCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJn
dW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCmluZGV4IDY0MGEwYTk2NjViMTZl
YjU0NWRiNTM1YjBhNzg0YmNlYzM5MzhlMzEuLmFlZTI1MjcwMjI3OWZlMTg2YmU2MTZjM2MzNjMx
YjI4MGQ1NTAyNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJn
dW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcApAQCAtMjE0LDcgKzIxNCw3
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGlm
IGl0J3MgYSB2YXJpYWJsZSB0aGF0IHdlIHRoaW5rIGlzIGFsaWFzZWQgdG8KICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIHRoZSBhcmd1bWVudHMsIHRoYXQgd2Uga25vdyB0aGF0IGl0IG1pZ2h0
IGFjdHVhbGx5IG5vdCBiZS4KICAgICAgICAgICAgICAgICAgICAgICAgIEFyZ3VtZW50c0FsaWFz
aW5nRGF0YSYgZGF0YSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9hcmd1bWVudHNB
bGlhc2luZy5maW5kKHZhcmlhYmxlQWNjZXNzRGF0YSktPnNlY29uZDsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRh
KS0+dmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLm1lcmdlTm9uQXJndW1lbnRz
QXNzaWdubWVudCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXJnZUNhbGxDb250
ZXh0KG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CkBAIC0yMzIsNyArMjMyLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgQXJndW1lbnRzQWxpYXNpbmdEYXRhJiBkYXRhID0KLSAgICAgICAgICAgICAgICAgICAgICAg
IG1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT5zZWNvbmQ7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVB
Y2Nlc3NEYXRhKS0+dmFsdWU7CiAgICAgICAgICAgICAgICAgICAgIGRhdGEubWVyZ2VBcmd1bWVu
dHNBc3NpZ25tZW50KCk7CiAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgZW5zdXJlcyB0aGF0
IHRoZSB2YXJpYWJsZSdzIHVzZXMgYXJlIGluIHRoZSBzYW1lIGNvbnRleHQgYXMKICAgICAgICAg
ICAgICAgICAgICAgLy8gdGhlIGFyZ3VtZW50cyBpdCBpcyBhbGlhc2luZy4KQEAgLTI0Nyw3ICsy
NDcsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0Rh
dGEtPmlzQ2FwdHVyZWQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgICAgICBBcmd1bWVudHNBbGlhc2luZ0RhdGEmIGRhdGEgPQotICAgICAgICAgICAg
ICAgICAgICAgICAgbV9hcmd1bWVudHNBbGlhc2luZy5maW5kKHZhcmlhYmxlQWNjZXNzRGF0YSkt
PnNlY29uZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fYXJndW1lbnRzQWxpYXNpbmcuZmlu
ZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT52YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgZGF0YS5t
ZXJnZUNhbGxDb250ZXh0KG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CkBAIC0yNTcsNyArMjU3LDcg
QEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5p
c0NhcHR1cmVkKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAgICAgQXJndW1lbnRzQWxpYXNpbmdEYXRhJiBkYXRhID0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIG1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT5zZWNv
bmQ7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFy
aWFibGVBY2Nlc3NEYXRhKS0+dmFsdWU7CiAgICAgICAgICAgICAgICAgICAgIGRhdGEubWVyZ2VD
YWxsQ29udGV4dChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIC8vIElmIGEgdmFyaWFibGUgaXMgdXNlZCBp
biBhIGZsdXNoIHRoZW4gYnkgZGVmaW5pdGlvbiBpdCBlc2NhcGVzLgpAQCAtMjcwLDcgKzI3MCw3
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+
aXNDYXB0dXJlZCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgICAgIEFyZ3VtZW50c0FsaWFzaW5nRGF0YSYgZGF0YSA9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+c2Vj
b25kOworICAgICAgICAgICAgICAgICAgICAgICAgbV9hcmd1bWVudHNBbGlhc2luZy5maW5kKHZh
cmlhYmxlQWNjZXNzRGF0YSktPnZhbHVlOwogICAgICAgICAgICAgICAgICAgICBkYXRhLm1lcmdl
Tm9uQXJndW1lbnRzQXNzaWdubWVudCgpOwogICAgICAgICAgICAgICAgICAgICBkYXRhLm1lcmdl
Q2FsbENvbnRleHQobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtMzU0LDcgKzM1NCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgQXJndW1lbnRzQWxpYXNp
bmdEYXRhJiBkYXRhID0KLSAgICAgICAgICAgICAgICAgICAgbV9hcmd1bWVudHNBbGlhc2luZy5m
aW5kKHZhcmlhYmxlQWNjZXNzRGF0YSktPnNlY29uZDsKKyAgICAgICAgICAgICAgICAgICAgbV9h
cmd1bWVudHNBbGlhc2luZy5maW5kKHZhcmlhYmxlQWNjZXNzRGF0YSktPnZhbHVlOwogICAgICAg
ICAgICAgICAgIGlmIChkYXRhLmlzVmFsaWQoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICAgICAgCkBAIC0zNzMsNyArMzczLDcgQEAgcHVibGljOgogICAgICAg
ICAgICAgICAgIGRhdGFMb2coIkNhcHR1cmVkIik7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAg
ICAgICAgICAgICBBcmd1bWVudHNBbGlhc2luZ0RhdGEmIGRhdGEgPQotICAgICAgICAgICAgICAg
ICAgICBtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+c2Vjb25k
OworICAgICAgICAgICAgICAgICAgICBtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVB
Y2Nlc3NEYXRhKS0+dmFsdWU7CiAgICAgICAgICAgICAgICAgYm9vbCBmaXJzdCA9IHRydWU7CiAg
ICAgICAgICAgICAgICAgaWYgKGRhdGEuY2FsbENvbnRleHRJc1ZhbGlkKCkpIHsKICAgICAgICAg
ICAgICAgICAgICAgaWYgKCFmaXJzdCkKQEAgLTQ1NCw3ICs0NTQsNyBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgICAgIC8vIHRoaW5ncy4gTm90ZSBhbHNvIHRoYXQgdGhlIFNldExvY2FsIHNo
b3VsZCBiZWNvbWUgZGVhZCBhcyBzb29uIGFzCiAgICAgICAgICAgICAgICAgICAgIC8vIHdlIHJl
cGxhY2UgYWxsIHVzZXMgb2YgdGhpcyB2YXJpYWJsZSB3aXRoIEdldE15QXJndW1lbnRzTGVuZ3Ro
IGFuZAogICAgICAgICAgICAgICAgICAgICAvLyBHZXRNeUFyZ3VtZW50QnlWYWwuCi0gICAgICAg
ICAgICAgICAgICAgIEFTU0VSVChtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nl
c3NEYXRhKS0+c2Vjb25kLmlzVmFsaWQoKSk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVCht
X2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+dmFsdWUuaXNWYWxp
ZCgpKTsKICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSB2YXJpYWJsZUFjY2Vzc0RhdGEt
Pm1lcmdlSXNBcmd1bWVudHNBbGlhcyh0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgfQpAQCAtNzE0LDcgKzcxNCw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkpCiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIEFyZ3VtZW50c0FsaWFzaW5nRGF0
YSYgZGF0YSA9IG1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT5z
ZWNvbmQ7CisgICAgICAgICAgICBBcmd1bWVudHNBbGlhc2luZ0RhdGEmIGRhdGEgPSBtX2FyZ3Vt
ZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+dmFsdWU7CiAgICAgICAgICAg
ICBkYXRhLmVzY2FwZXMgPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAg
LTc2MSw3ICs3NjEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAgICAgICAgIAotICAgICAgICBBcmd1bWVudHNBbGlhc2luZ0RhdGEmIGRhdGEgPSBtX2FyZ3Vt
ZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+c2Vjb25kOworICAgICAgICBB
cmd1bWVudHNBbGlhc2luZ0RhdGEmIGRhdGEgPSBtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFy
aWFibGVBY2Nlc3NEYXRhKS0+dmFsdWU7CiAgICAgICAgIGRhdGEubWVyZ2VDYWxsQ29udGV4dChu
b2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICB9CiAgICAgCkBAIC03ODQsNyAr
Nzg0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIEFyZ3VtZW50c0FsaWFzaW5nRGF0YSYgZGF0YSA9Ci0gICAgICAgICAgICAg
ICAgbV9hcmd1bWVudHNBbGlhc2luZy5maW5kKHZhcmlhYmxlQWNjZXNzRGF0YSktPnNlY29uZDsK
KyAgICAgICAgICAgICAgICBtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NE
YXRhKS0+dmFsdWU7CiAgICAgICAgICAgICBpZiAoIWRhdGEuaXNWYWxpZCgpKQogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIApAQCAtODIwLDcgKzgy
MCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgJiYgIW1fY3JlYXRlc0FyZ3VtZW50cy5j
b250YWlucyhjaGlsZC5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CiAgICAgICAgICAgICBi
b29sIGlzQWxpYXNlZEFyZ3VtZW50c1JlZ2lzdGVyID0KICAgICAgICAgICAgICAgICAhdmFyaWFi
bGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkKLSAgICAgICAgICAgICAgICAmJiBtX2FyZ3VtZW50
c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+c2Vjb25kLmlzVmFsaWQoKQorICAg
ICAgICAgICAgICAgICYmIG1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0Rh
dGEpLT52YWx1ZS5pc1ZhbGlkKCkKICAgICAgICAgICAgICAgICAmJiAhbV9jcmVhdGVzQXJndW1l
bnRzLmNvbnRhaW5zKGNoaWxkLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAg
ICAgIGlmICghaXNEZWFkQXJndW1lbnRzUmVnaXN0ZXIgJiYgIWlzQWxpYXNlZEFyZ3VtZW50c1Jl
Z2lzdGVyKQogICAgICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBc3NlbWJseUhlbHBlcnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBc3NlbWJseUhlbHBlcnMuY3BwCmluZGV4IDc3OTllZTUwNTkzNWFkNGUxM2Jj
M2NlMThkMGI3MzJhM2FhNDI5NmUuLmI1YjY2ODQxOGE2M2E3Yzk0NGRmNWRjNDdhNjA0YjFlNTM1
NzQxZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXNzZW1ibHlI
ZWxwZXJzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fzc2VtYmx5SGVs
cGVycy5jcHAKQEAgLTQ5LDkgKzQ5LDkgQEAgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNl
dD4mIEFzc2VtYmx5SGVscGVyczo6ZGVjb2RlZENvZGVNYXBGb3IoQ29kZUJsb2NrKgogICAgIEhh
c2hNYXA8Q29kZUJsb2NrKiwgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4gPjo6QWRk
UmVzdWx0IHJlc3VsdCA9IG1fZGVjb2RlZENvZGVNYXBzLmFkZChjb2RlQmxvY2ssIFZlY3RvcjxC
eXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+KCkpOwogICAgIAogICAgIGlmIChyZXN1bHQuaXNOZXdF
bnRyeSkKLSAgICAgICAgY29kZUJsb2NrLT5qaXRDb2RlTWFwKCktPmRlY29kZShyZXN1bHQuaXRl
cmF0b3ItPnNlY29uZCk7CisgICAgICAgIGNvZGVCbG9jay0+aml0Q29kZU1hcCgpLT5kZWNvZGUo
cmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CiAgICAgCi0gICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRv
ci0+c2Vjb25kOworICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogfQogCiAjaWYg
RU5BQkxFKFNBTVBMSU5HX0ZMQUdTKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCeXRlQ29kZUNhY2hlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5
dGVDb2RlQ2FjaGUuaAppbmRleCBmNmE3NDVjNjY1ODcxMzNiMTJjYmQ0NGZmM2E5MjlhOTNjMWJh
MTA3Li44ZWQxNTc4ZjI2ZDNhNGU3NWUyM2E5ZDhlZWZmMDlhYjRhYjYwMDljIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlQ2FjaGUuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlQ2FjaGUuaApAQCAtMTMyLDEwICsxMzIs
MTAgQEAgcHVibGljOgogICAgICAgICBNYXA6Oml0ZXJhdG9yIGJlZ2luID0gbV9tYXAuYmVnaW4o
KTsKICAgICAgICAgTWFwOjppdGVyYXRvciBlbmQgPSBtX21hcC5lbmQoKTsKICAgICAgICAgZm9y
IChNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBiZWdpbjsgaXRlciAhPSBlbmQ7ICsraXRlcikgewotICAg
ICAgICAgICAgaWYgKCFpdGVyLT5zZWNvbmQuY29kZUJsb2NrKQorICAgICAgICAgICAgaWYgKCFp
dGVyLT52YWx1ZS5jb2RlQmxvY2spCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICBpZiAoaXRlci0+c2Vjb25kLm93bmVkKSB7Ci0gICAgICAgICAgICAgICAgZGVsZXRlIGl0
ZXItPnNlY29uZC5jb2RlQmxvY2s7CisgICAgICAgICAgICBpZiAoaXRlci0+dmFsdWUub3duZWQp
IHsKKyAgICAgICAgICAgICAgICBkZWxldGUgaXRlci0+dmFsdWUuY29kZUJsb2NrOwogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xNDUsNyAr
MTQ1LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgTWFwOjppdGVyYXRvciBpdGVyID0gbV9t
YXAuZmluZChrZXkpOwogICAgICAgICBpZiAoaXRlciAhPSBtX21hcC5lbmQoKSkKLSAgICAgICAg
ICAgIHJldHVybiBpdGVyLT5zZWNvbmQuY29kZUJsb2NrOworICAgICAgICAgICAgcmV0dXJuIGl0
ZXItPnZhbHVlLmNvZGVCbG9jazsKICAgICAgICAgCiAgICAgICAgIEJ5dGVDb2RlQ2FjaGVWYWx1
ZSB2YWx1ZTsKICAgICAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0
ZUNvZGVQYXJzZXIuY3BwCmluZGV4IGRmMTljMzA4MmQ3YzViYTJjNjU4ZDU5MjEyNDBlZjA2ZGMz
ODgzYTUuLjNlZTNiZDJiZTRmOWQxODdmOTczYWU1YmQ5MTZlYmM0ODk2ZDhmODMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCkBAIC02NjAs
OSArNjYwLDkgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIEhhc2hNYXA8SlNDZWxsKiwgTm9k
ZUluZGV4Pjo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fY2VsbENvbnN0YW50Tm9kZXMuYWRkKGNlbGws
IE5vTm9kZSk7CiAgICAgICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgIHJl
c3VsdC5pdGVyYXRvci0+c2Vjb25kID0gYWRkVG9HcmFwaChXZWFrSlNDb25zdGFudCwgT3BJbmZv
KGNlbGwpKTsKKyAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBhZGRUb0dyYXBo
KFdlYWtKU0NvbnN0YW50LCBPcEluZm8oY2VsbCkpOwogICAgICAgICAKLSAgICAgICAgcmV0dXJu
IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZTsKICAgICB9CiAgICAgCiAgICAgQ29kZU9yaWdpbiBjdXJyZW50Q29kZU9yaWdpbigp
CkBAIC0zMjA5LDcgKzMyMDksNyBAQCBCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6
SW5saW5lU3RhY2tFbnRyeSgKICAgICAgICAgICAgIElkZW50aWZpZXJNYXA6OkFkZFJlc3VsdCBy
ZXN1bHQgPSBieXRlQ29kZVBhcnNlci0+bV9pZGVudGlmaWVyTWFwLmFkZChyZXAsIGJ5dGVDb2Rl
UGFyc2VyLT5tX2NvZGVCbG9jay0+bnVtYmVyT2ZJZGVudGlmaWVycygpKTsKICAgICAgICAgICAg
IGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKICAgICAgICAgICAgICAgICBieXRlQ29kZVBhcnNlci0+
bV9jb2RlQmxvY2stPmFkZElkZW50aWZpZXIoSWRlbnRpZmllcihieXRlQ29kZVBhcnNlci0+bV9n
bG9iYWxEYXRhLCByZXApKTsKLSAgICAgICAgICAgIG1faWRlbnRpZmllclJlbWFwW2ldID0gcmVz
dWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgICAgICBtX2lkZW50aWZpZXJSZW1hcFtpXSA9
IHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgIH0KICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBjb2RlQmxvY2stPm51bWJlck9mQ29uc3RhbnRSZWdpc3RlcnMoKTsgKytpKSB7
CiAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gY29kZUJsb2NrLT5nZXRDb25zdGFudChpICsg
Rmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOwpAQCAtMzIyNyw3ICszMjI3LDcgQEAgQnl0ZUNv
ZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZVN0YWNrRW50cnkoCiAgICAgICAgICAg
ICAgICAgYnl0ZUNvZGVQYXJzZXItPm1fY29kZUJsb2NrLT5hZGRDb25zdGFudCh2YWx1ZSk7CiAg
ICAgICAgICAgICAgICAgYnl0ZUNvZGVQYXJzZXItPm1fY29uc3RhbnRzLmFwcGVuZChDb25zdGFu
dFJlY29yZCgpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fY29uc3RhbnRSZW1hcFtp
XSA9IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICAgICAgbV9jb25zdGFudFJlbWFw
W2ldID0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgfQogICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgY29kZUJsb2NrLT5udW1iZXJPZkdsb2JhbFJlc29sdmVJbmZvcygp
OyArK2kpCiAgICAgICAgICAgICBieXRlQ29kZVBhcnNlci0+bV9jb2RlQmxvY2stPmFkZEdsb2Jh
bFJlc29sdmVJbmZvKHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3Rp
bmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUNoZWNr
SG9pc3RpbmdQaGFzZS5jcHAKaW5kZXggZWU3ZGQwYTM3YTQyNmQ0ZjhkOTk2OGNmOGZmZjk5ZTQ1
ZjE5NTljZC4uOGNhNzY0ZGQxNjg3NzdjNzY2OTc4ZmVhNTYxOGFkM2NkZDkzMjg2YSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5n
UGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQ2hl
Y2tIb2lzdGluZ1BoYXNlLmNwcApAQCAtMTI4LDcgKzEyOCw3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIGRhdGFMb2coIlplcm9pbmcgdGhlIHN0cnVjdHVyZSB0byBob2lzdCBmb3IgJXMgYmVjYXVz
ZSB0aGUgcmF0aW8gaXMgJWxmLlxuIiwKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5uYW1l
T2ZWYXJpYWJsZUFjY2Vzc0RhdGEodmFyaWFibGUpLCB2YXJpYWJsZS0+dm90ZVJhdGlvKCkpOwog
I2VuZGlmCi0gICAgICAgICAgICBpdGVyLT5zZWNvbmQubV9zdHJ1Y3R1cmUgPSAwOworICAgICAg
ICAgICAgaXRlci0+dmFsdWUubV9zdHJ1Y3R1cmUgPSAwOwogICAgICAgICB9CiAKICAgICAgICAg
Ly8gSWRlbnRpZnkgdGhlIHNldCBvZiB2YXJpYWJsZXMgdGhhdCBhcmUgbGl2ZSBhY3Jvc3MgYSBz
dHJ1Y3R1cmUgY2xvYmJlci4KQEAgLTI5NSw5ICsyOTUsOSBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgICAgIEhhc2hNYXA8VmFyaWFibGVBY2Nlc3NEYXRhKiwgQ2hlY2tEYXRhPjo6aXRlcmF0
b3IgaXRlciA9IG1fbWFwLmZpbmQodmFyaWFibGUpOwogICAgICAgICAgICAgICAgICAgICBpZiAo
aXRlciA9PSBtX21hcC5lbmQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICBpZiAoIWl0ZXItPnNlY29uZC5tX3N0cnVjdHVyZSkKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCFpdGVyLT52YWx1ZS5tX3N0cnVjdHVyZSkKICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBpZiAoaXRlci0+c2Vjb25kLm1f
aXNDbG9iYmVyZWQgJiYgIWl0ZXItPnNlY29uZC5tX3N0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNo
cG9pbnRTZXRJc1N0aWxsVmFsaWQoKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZXItPnZh
bHVlLm1faXNDbG9iYmVyZWQgJiYgIWl0ZXItPnZhbHVlLm1fc3RydWN0dXJlLT50cmFuc2l0aW9u
V2F0Y2hwb2ludFNldElzU3RpbGxWYWxpZCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBub2RlLnJlZigp
OwpAQCAtMzExLDcgKzMxMSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgbV9ncmFw
aC5hcHBlbmQoZ2V0TG9jYWwpOwogICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuYXBw
ZW5kKGluZGV4SW5CbG9jayArIDEsIGdldExvY2FsSW5kZXgpOwogICAgICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICAgICAgTm9kZSBjaGVja1N0cnVjdHVyZShDaGVja1N0cnVjdHVy
ZSwgY29kZU9yaWdpbiwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KGl0ZXItPnNlY29u
ZC5tX3N0cnVjdHVyZSkpLCBnZXRMb2NhbEluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgTm9k
ZSBjaGVja1N0cnVjdHVyZShDaGVja1N0cnVjdHVyZSwgY29kZU9yaWdpbiwgT3BJbmZvKG1fZ3Jh
cGguYWRkU3RydWN0dXJlU2V0KGl0ZXItPnZhbHVlLm1fc3RydWN0dXJlKSksIGdldExvY2FsSW5k
ZXgpOwogICAgICAgICAgICAgICAgICAgICBjaGVja1N0cnVjdHVyZS5yZWYoKTsKICAgICAgICAg
ICAgICAgICAgICAgTm9kZUluZGV4IGNoZWNrU3RydWN0dXJlSW5kZXggPSBtX2dyYXBoLnNpemUo
KTsKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5hcHBlbmQoY2hlY2tTdHJ1Y3R1cmUpOwpA
QCAtMzMxLDkgKzMzMSw5IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgSGFzaE1hcDxW
YXJpYWJsZUFjY2Vzc0RhdGEqLCBDaGVja0RhdGE+OjppdGVyYXRvciBpdGVyID0gbV9tYXAuZmlu
ZCh2YXJpYWJsZSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVyID09IG1fbWFwLmVuZCgp
KQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGlm
ICghaXRlci0+c2Vjb25kLm1fc3RydWN0dXJlKQorICAgICAgICAgICAgICAgICAgICBpZiAoIWl0
ZXItPnZhbHVlLm1fc3RydWN0dXJlKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChpdGVyLT5zZWNvbmQubV9pc0Nsb2JiZXJlZCAmJiAhaXRl
ci0+c2Vjb25kLm1fc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldElzU3RpbGxWYWxp
ZCgpKQorICAgICAgICAgICAgICAgICAgICBpZiAoaXRlci0+dmFsdWUubV9pc0Nsb2JiZXJlZCAm
JiAhaXRlci0+dmFsdWUubV9zdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SXNTdGls
bFZhbGlkKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAg
ICAgICAgICAvLyBGaXJzdCBpbnNlcnQgYSBkZWFkIFNldExvY2FsIHRvIHRlbGwgT1NSIHRoYXQg
dGhlIGNoaWxkJ3MgdmFsdWUgc2hvdWxkCkBAIC0zNTAsNyArMzUwLDcgQEAgcHVibGljOgogICAg
ICAgICAgICAgICAgICAgICBtX2dyYXBoW2NoaWxkMV0ucmVmKCk7CiAgICAgICAgICAgICAgICAg
ICAgIC8vIFVzZSBhIEZvcndhcmRDaGVja1N0cnVjdHVyZSB0byBpbmRpY2F0ZSB0aGF0IHdlIHNo
b3VsZCBleGl0IHRvIHRoZQogICAgICAgICAgICAgICAgICAgICAvLyBuZXh0IGJ5dGVjb2RlIGlu
c3RydWN0aW9uIHJhdGhlciB0aGFuIHJlZXhlY3V0aW5nIHRoZSBjdXJyZW50IG9uZS4KLSAgICAg
ICAgICAgICAgICAgICAgTm9kZSBjaGVja1N0cnVjdHVyZShGb3J3YXJkQ2hlY2tTdHJ1Y3R1cmUs
IGNvZGVPcmlnaW4sIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChpdGVyLT5zZWNvbmQu
bV9zdHJ1Y3R1cmUpKSwgY2hpbGQxKTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSBjaGVja1N0
cnVjdHVyZShGb3J3YXJkQ2hlY2tTdHJ1Y3R1cmUsIGNvZGVPcmlnaW4sIE9wSW5mbyhtX2dyYXBo
LmFkZFN0cnVjdHVyZVNldChpdGVyLT52YWx1ZS5tX3N0cnVjdHVyZSkpLCBjaGlsZDEpOwogICAg
ICAgICAgICAgICAgICAgICBjaGVja1N0cnVjdHVyZS5yZWYoKTsKICAgICAgICAgICAgICAgICAg
ICAgTm9kZUluZGV4IGNoZWNrU3RydWN0dXJlSW5kZXggPSBtX2dyYXBoLnNpemUoKTsKICAgICAg
ICAgICAgICAgICAgICAgbV9ncmFwaC5hcHBlbmQoY2hlY2tTdHJ1Y3R1cmUpOwpAQCAtMzY2LDE2
ICszNjYsMTYgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBIYXNoTWFwPFZhcmlhYmxl
QWNjZXNzRGF0YSosIENoZWNrRGF0YT46Oml0ZXJhdG9yIGl0ZXIgPSBtX21hcC5maW5kKGNoaWxk
LnZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZXIgPT0g
bV9tYXAuZW5kKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKCFpdGVyLT5zZWNvbmQubV9zdHJ1Y3R1cmUpCisgICAgICAgICAgICAgICAg
ICAgIGlmICghaXRlci0+dmFsdWUubV9zdHJ1Y3R1cmUpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpdGVyLT5zZWNvbmQubV9pc0Nsb2Ji
ZXJlZCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIWl0ZXItPnZhbHVlLm1faXNDbG9iYmVy
ZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0T3BBbmREZWZhdWx0RmxhZ3Mo
UGhhbnRvbSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS5yZWZDb3VudCgp
ID09IDEpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpdGVyLT5zZWNvbmQubV9zdHJ1Y3R1cmUt
PnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SXNTdGlsbFZhbGlkKCkpCisgICAgICAgICAgICAgICAg
ICAgIGlmICghaXRlci0+dmFsdWUubV9zdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0
SXNTdGlsbFZhbGlkKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKGl0ZXItPnNlY29uZC5tX3N0cnVjdHVyZSA9PSBub2RlLnN0cnVj
dHVyZVNldCgpLnNpbmdsZXRvblN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKGl0ZXItPnZhbHVlLm1fc3RydWN0dXJlID09IG5vZGUuc3RydWN0dXJlU2V0KCkuc2luZ2xl
dG9uU3RydWN0dXJlKCkpOwogICAgICAgICAgICAgICAgICAgICBub2RlLmNvbnZlcnRUb1N0cnVj
dHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KCk7CiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQg
PSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTM5OCw5ICszOTgsOSBAQCBw
cml2YXRlOgogICAgICAgICAgICAgbV9tYXAuYWRkKHZhcmlhYmxlLCBDaGVja0RhdGEoc3RydWN0
dXJlLCBmYWxzZSkpOwogICAgICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpCiAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIGlmIChyZXN1bHQuaXRlcmF0b3ItPnNlY29uZC5tX3N0cnVjdHVy
ZSA9PSBzdHJ1Y3R1cmUpCisgICAgICAgIGlmIChyZXN1bHQuaXRlcmF0b3ItPnZhbHVlLm1fc3Ry
dWN0dXJlID09IHN0cnVjdHVyZSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgcmVzdWx0
Lml0ZXJhdG9yLT5zZWNvbmQubV9zdHJ1Y3R1cmUgPSAwOworICAgICAgICByZXN1bHQuaXRlcmF0
b3ItPnZhbHVlLm1fc3RydWN0dXJlID0gMDsKICAgICB9CiAgICAgCiAgICAgdm9pZCBub3RpY2VT
dHJ1Y3R1cmVDaGVjayhWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlLCBjb25zdCBTdHJ1Y3R1
cmVTZXQmIHNldCkKQEAgLTQxOCw3ICs0MTgsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9t
YXAuZmluZCh2YXJpYWJsZSk7CiAgICAgICAgIGlmIChpdGVyID09IG1fbWFwLmVuZCgpKQogICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBpdGVyLT5zZWNvbmQubV9pc0Nsb2JiZXJlZCA9IHRy
dWU7CisgICAgICAgIGl0ZXItPnZhbHVlLm1faXNDbG9iYmVyZWQgPSB0cnVlOwogICAgIH0KICAg
ICAKICAgICB2b2lkIGNsb2JiZXIoY29uc3QgT3BlcmFuZHM8VmFyaWFibGVBY2Nlc3NEYXRhKj4m
IGxpdmUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCmluZGV4IDY2OTE3ODgwNGU2M2Y4
ZTc1YTczNmVlNGFlYWUzYjJjOGNkMTY5OWIuLjllMWM0N2NhYjZmOTJmZDgxNWRkNmRlYmVmODg1
NjM3MzBhZGNmZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCkBAIC0zNDUsNyAr
MzQ1LDcgQEAgdm9pZCBIZWFwOjptYXJrUHJvdGVjdGVkT2JqZWN0cyhIZWFwUm9vdFZpc2l0b3Im
IGhlYXBSb290VmlzaXRvcikKIHsKICAgICBQcm90ZWN0Q291bnRTZXQ6Oml0ZXJhdG9yIGVuZCA9
IG1fcHJvdGVjdGVkVmFsdWVzLmVuZCgpOwogICAgIGZvciAoUHJvdGVjdENvdW50U2V0OjppdGVy
YXRvciBpdCA9IG1fcHJvdGVjdGVkVmFsdWVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAg
ICAgICAgaGVhcFJvb3RWaXNpdG9yLnZpc2l0KCZpdC0+Zmlyc3QpOworICAgICAgICBoZWFwUm9v
dFZpc2l0b3IudmlzaXQoJml0LT5rZXkpOwogfQogCiB2b2lkIEhlYXA6OnB1c2hUZW1wU29ydFZl
Y3RvcihWZWN0b3I8VmFsdWVTdHJpbmdQYWlyPiogdGVtcFZlY3RvcikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuaAppbmRleCA2ZjEzYWZiNzI1YTk5OTllNzNlY2YwMzg0NzQzNmU1YzNhMzNmMjE0
Li5kNzEwMTBiZjIzZDdiMGI1ZWZlZmRlODVhNGE0NzBlNGIyZWNjOTViIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5oCkBAIC0zNDgsNyArMzQ4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ewogICAgICAgICBQcm90ZWN0Q291bnRTZXQ6Oml0ZXJhdG9yIGVuZCA9IG1fcHJvdGVjdGVkVmFs
dWVzLmVuZCgpOwogICAgICAgICBmb3IgKFByb3RlY3RDb3VudFNldDo6aXRlcmF0b3IgaXQgPSBt
X3Byb3RlY3RlZFZhbHVlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBm
dW5jdG9yKGl0LT5maXJzdCk7CisgICAgICAgICAgICBmdW5jdG9yKGl0LT5rZXkpOwogICAgICAg
ICBtX2hhbmRsZVNldC5mb3JFYWNoU3Ryb25nSGFuZGxlKGZ1bmN0b3IsIG1fcHJvdGVjdGVkVmFs
dWVzKTsKIAogICAgICAgICByZXR1cm4gZnVuY3Rvci5yZXR1cm5WYWx1ZSgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSklUU3R1YlJvdXRpbmVTZXQuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSklUU3R1YlJvdXRpbmVTZXQuY3BwCmluZGV4IDA1NGJm
MDZkZGNmYWE0N2VmN2Y2MmE5MTUwMzM5MzRiMzE4YTFmNDYuLjhlMjc5MWZjNzE5MDNhYmQyNjY4
YzQ4MjZmYjJlYzRmMTc0MDI1MGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9KSVRTdHViUm91dGluZVNldC5jcHAKQEAgLTgyLDcgKzgyLDcgQEAgdm9pZCBKSVRTdHViUm91
dGluZVNldDo6bWFya1Nsb3codWludHB0cl90IGFkZHJlc3MpCiAgICAgaWYgKGl0ZXIgPT0gbV9h
ZGRyZXNzVG9Sb3V0aW5lTWFwLmVuZCgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgaXRl
ci0+c2Vjb25kLT5tX21heUJlRXhlY3V0aW5nID0gdHJ1ZTsKKyAgICBpdGVyLT52YWx1ZS0+bV9t
YXlCZUV4ZWN1dGluZyA9IHRydWU7CiB9CiAKIHZvaWQgSklUU3R1YlJvdXRpbmVTZXQ6OmRlbGV0
ZVVubWFya2VkSmV0dGlzb25lZFN0dWJSb3V0aW5lcygpCkBAIC05Nyw3ICs5Nyw3IEBAIHZvaWQg
SklUU3R1YlJvdXRpbmVTZXQ6OmRlbGV0ZVVubWFya2VkSmV0dGlzb25lZFN0dWJSb3V0aW5lcygp
CiAgICAgICAgIHVpbnRwdHJfdCBzdGVwID0gSklUU3R1YlJvdXRpbmU6OmFkZHJlc3NTdGVwKCk7
CiAgICAgICAgIGZvciAodWludHB0cl90IGl0ZXIgPSBzdGFydDsgaXRlciA8IGVuZDsgaXRlciAr
PSBzdGVwKSB7CiAgICAgICAgICAgICBBU1NFUlQobV9hZGRyZXNzVG9Sb3V0aW5lTWFwLmZpbmQo
aXRlcikgIT0gbV9hZGRyZXNzVG9Sb3V0aW5lTWFwLmVuZCgpKTsKLSAgICAgICAgICAgIEFTU0VS
VChtX2FkZHJlc3NUb1JvdXRpbmVNYXAuZmluZChpdGVyKS0+c2Vjb25kID09IHJvdXRpbmUpOwor
ICAgICAgICAgICAgQVNTRVJUKG1fYWRkcmVzc1RvUm91dGluZU1hcC5maW5kKGl0ZXIpLT52YWx1
ZSA9PSByb3V0aW5lKTsKICAgICAgICAgICAgIG1fYWRkcmVzc1RvUm91dGluZU1hcC5yZW1vdmUo
aXRlcik7CiAgICAgICAgIH0KICAgICAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrU3RhY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a1N0YWNrLmNwcAppbmRleCBiMzEzNjY0M2I0ZWRiNzhmMWFmMTE1M2M3OTVlYzIzMTAxNGM5NThl
Li5lMzU4YmJmMzdmNGNlZDBkYjIxNGQ0MzVhMTA5YmUxNWVjNzQ0MmI1IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5jcHAKQEAgLTUzMyw3ICs1MzMsNyBAQCBBTFdBWVNf
SU5MSU5FIHZvaWQgTWFya1N0YWNrOjppbnRlcm5hbEFwcGVuZChKU1ZhbHVlKiBzbG90KQogICAg
ICAgICAgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQogICAgICAgICAgICAgICAgIHN0cmlu
Zy0+c2V0SGFzaENvbnN0U2luZ2xldG9uKCk7CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBKU1ZhbHVlIGV4aXN0aW5nSlNWYWx1ZSA9IGFkZFJlc3VsdC5pdGVyYXRvci0+c2Vj
b25kOworICAgICAgICAgICAgICAgIEpTVmFsdWUgZXhpc3RpbmdKU1ZhbHVlID0gYWRkUmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgICAgICAgICBpZiAodmFsdWUgIT0gZXhpc3RpbmdK
U1ZhbHVlKQogICAgICAgICAgICAgICAgICAgICBqc0Nhc3Q8SlNTdHJpbmcqPihleGlzdGluZ0pT
VmFsdWUuYXNDZWxsKCkpLT5jbGVhckhhc2hDb25zdFNpbmdsZXRvbigpOwogICAgICAgICAgICAg
ICAgICpzbG90ID0gZXhpc3RpbmdKU1ZhbHVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvV2Vhay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vhay5oCmlu
ZGV4IDA3Njk4ZmQwNmIwNmM3NTAxNGJiNjViZjI1ZmMzMWMyOGE5YTA2ODQuLjNjM2QxZDBjZWZl
MTgxMjY1OWM1ZmE3M2M3NGQxOTk0OGMxOGZmZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1dlYWsuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFr
LmgKQEAgLTE2NCw4ICsxNjQsOCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXAsIHR5cGVuYW1lIEtl
eSwgdHlwZW5hbWUgVmFsdWU+IGlubGluZSB2b2lkIHdlYWtSZW1vdmUoTWFwJgogICAgIHR5cGVu
YW1lIE1hcDo6aXRlcmF0b3IgaXQgPSBtYXAuZmluZChrZXkpOwogICAgIEFTU0VSVF9VTlVTRUQo
dmFsdWUsIHZhbHVlKTsKICAgICBBU1NFUlQoaXQgIT0gbWFwLmVuZCgpKTsKLSAgICBBU1NFUlQo
aXQtPnNlY29uZC53YXModmFsdWUpKTsKLSAgICBBU1NFUlQoIWl0LT5zZWNvbmQpOworICAgIEFT
U0VSVChpdC0+dmFsdWUud2FzKHZhbHVlKSk7CisgICAgQVNTRVJUKCFpdC0+dmFsdWUpOwogICAg
IG1hcC5yZW1vdmUoaXQpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKaW5kZXggNTJh
NzE1OGU2NjA2YWZkZjc0YWUzMjZkZTgwOTkwMmE0MTkzMzQ0Ni4uODM3YjhkMjFlM2I1MTJmZGZj
MzUyZGZhN2VhMTMzMmI1MWRkNmRlNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcApAQCAt
NzExLDggKzcxMSw4IEBAIEpJVENvZGUgSklUOjpwcml2YXRlQ29tcGlsZShDb2RlUHRyKiBmdW5j
dGlvbkVudHJ5QXJpdHlDaGVjaywgSklUQ29tcGlsYXRpb25FZmZvCiAKICAgICAgICAgICAgIFN0
cmluZ0p1bXBUYWJsZTo6U3RyaW5nT2Zmc2V0VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHJlY29yZC5q
dW1wVGFibGUuc3RyaW5nSnVtcFRhYmxlLT5vZmZzZXRUYWJsZS5lbmQoKTsgICAgICAgICAgICAK
ICAgICAgICAgICAgIGZvciAoU3RyaW5nSnVtcFRhYmxlOjpTdHJpbmdPZmZzZXRUYWJsZTo6aXRl
cmF0b3IgaXQgPSByZWNvcmQuanVtcFRhYmxlLnN0cmluZ0p1bXBUYWJsZS0+b2Zmc2V0VGFibGUu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgb2Zm
c2V0ID0gaXQtPnNlY29uZC5icmFuY2hPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgaXQtPnNlY29u
ZC5jdGlPZmZzZXQgPSBvZmZzZXQgPyBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKG1fbGFiZWxzW2J5
dGVjb2RlT2Zmc2V0ICsgb2Zmc2V0XSkgOiByZWNvcmQuanVtcFRhYmxlLnN0cmluZ0p1bXBUYWJs
ZS0+Y3RpRGVmYXVsdDsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBpdC0+dmFs
dWUuYnJhbmNoT2Zmc2V0OworICAgICAgICAgICAgICAgIGl0LT52YWx1ZS5jdGlPZmZzZXQgPSBv
ZmZzZXQgPyBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0ICsg
b2Zmc2V0XSkgOiByZWNvcmQuanVtcFRhYmxlLnN0cmluZ0p1bXBUYWJsZS0+Y3RpRGVmYXVsdDsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRTdHVicy5jcHAKaW5kZXggY2M4OTk1ODdmMDY5ZmIyZjNmZmZiMTE4NzAyOWRhMDk3M2Y2NmJh
OS4uOTc1NzlmYjQyZWE1ZTBmOTMzYmQ4MDViNTQ2NzRhOWRjYTNiOTNlYiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKQEAgLTM0NTksOCArMzQ1OSw4IEBAIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBKSVRUaHVua3M6OmN0aVN0dWIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
LCBUaHVua0dlbmVyYXRvCiB7CiAgICAgQ1RJU3R1Yk1hcDo6QWRkUmVzdWx0IGVudHJ5ID0gbV9j
dGlTdHViTWFwLmFkZChnZW5lcmF0b3IsIE1hY3JvQXNzZW1ibGVyQ29kZVJlZigpKTsKICAgICBp
ZiAoZW50cnkuaXNOZXdFbnRyeSkKLSAgICAgICAgZW50cnkuaXRlcmF0b3ItPnNlY29uZCA9IGdl
bmVyYXRvcihnbG9iYWxEYXRhKTsKLSAgICByZXR1cm4gZW50cnkuaXRlcmF0b3ItPnNlY29uZDsK
KyAgICAgICAgZW50cnkuaXRlcmF0b3ItPnZhbHVlID0gZ2VuZXJhdG9yKGdsb2JhbERhdGEpOwor
ICAgIHJldHVybiBlbnRyeS5pdGVyYXRvci0+dmFsdWU7CiB9CiAKIE5hdGl2ZUV4ZWN1dGFibGUq
IEpJVFRodW5rczo6aG9zdEZ1bmN0aW9uU3R1YihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIE5h
dGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBOYXRpdmVGdW5jdGlvbiBjb25zdHJ1Y3RvcikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAppbmRleCA0ZmQ2NzFmYjczNWYxZGQyMTUx
MTEyOTMzMDMyMTg0ZjM4YmM3NDA1Li4yOTM2ODFmZjQ5Nzk1MWYwMzc2ZTdiMTVlNWYyNjVhNjcy
MGJjOGIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCkBAIC0xMzY0
LDEwICsxMzY0LDEwIEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3Np
b24gUGFyc2VyPExleGVyVHlwZT46OnBhcnNlU3RyaWN0T2JqZWN0CiAgICAgICAgIGlmICghbV9z
eW50YXhBbHJlYWR5VmFsaWRhdGVkKSB7CiAgICAgICAgICAgICBPYmplY3RWYWxpZGF0aW9uTWFw
OjpBZGRSZXN1bHQgcHJvcGVydHlFbnRyeSA9IG9iamVjdFZhbGlkYXRvci5hZGQoY29udGV4dC5n
ZXROYW1lKHByb3BlcnR5KS5pbXBsKCksIGNvbnRleHQuZ2V0VHlwZShwcm9wZXJ0eSkpOwogICAg
ICAgICAgICAgaWYgKCFwcm9wZXJ0eUVudHJ5LmlzTmV3RW50cnkpIHsKLSAgICAgICAgICAgICAg
ICBmYWlsSWZUcnVlKHByb3BlcnR5RW50cnkuaXRlcmF0b3ItPnNlY29uZCA9PSBQcm9wZXJ0eU5v
ZGU6OkNvbnN0YW50KTsKKyAgICAgICAgICAgICAgICBmYWlsSWZUcnVlKHByb3BlcnR5RW50cnku
aXRlcmF0b3ItPnZhbHVlID09IFByb3BlcnR5Tm9kZTo6Q29uc3RhbnQpOwogICAgICAgICAgICAg
ICAgIGZhaWxJZlRydWUoY29udGV4dC5nZXRUeXBlKHByb3BlcnR5KSA9PSBQcm9wZXJ0eU5vZGU6
OkNvbnN0YW50KTsKLSAgICAgICAgICAgICAgICBmYWlsSWZUcnVlKGNvbnRleHQuZ2V0VHlwZShw
cm9wZXJ0eSkgJiBwcm9wZXJ0eUVudHJ5Lml0ZXJhdG9yLT5zZWNvbmQpOwotICAgICAgICAgICAg
ICAgIHByb3BlcnR5RW50cnkuaXRlcmF0b3ItPnNlY29uZCB8PSBjb250ZXh0LmdldFR5cGUocHJv
cGVydHkpOworICAgICAgICAgICAgICAgIGZhaWxJZlRydWUoY29udGV4dC5nZXRUeXBlKHByb3Bl
cnR5KSAmIHByb3BlcnR5RW50cnkuaXRlcmF0b3ItPnZhbHVlKTsKKyAgICAgICAgICAgICAgICBw
cm9wZXJ0eUVudHJ5Lml0ZXJhdG9yLT52YWx1ZSB8PSBjb250ZXh0LmdldFR5cGUocHJvcGVydHkp
OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHRhaWwgPSBjb250ZXh0LmNyZWF0
ZVByb3BlcnR5TGlzdChwcm9wZXJ0eUxvY2F0aW9uLCBwcm9wZXJ0eSwgdGFpbCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZS5jcHAKaW5kZXggOTJlMzJjNGJhNjY0YTQx
ZjQxYTg4ZTkyOWNhM2YwY2U4YmY3MDc2Zi4uNDRkZDUyZDI0MjM4OGYyZjM2NzBiOGRhZTZmNWY2
MzM1MjI0OGIyNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1By
b2ZpbGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlLmNw
cApAQCAtMTExLDcgKzExMSw3IEBAIHR5cGVkZWYgV1RGOjpLZXlWYWx1ZVBhaXI8RnVuY3Rpb25D
YWxsSGFzaENvdW50OjpWYWx1ZVR5cGUsIHVuc2lnbmVkPiBOYW1lQ291bnRQCiAKIHN0YXRpYyBp
bmxpbmUgYm9vbCBmdW5jdGlvbk5hbWVDb3VudFBhaXJDb21wYXJhdG9yKGNvbnN0IE5hbWVDb3Vu
dFBhaXImIGEsIGNvbnN0IE5hbWVDb3VudFBhaXImIGIpCiB7Ci0gICAgcmV0dXJuIGEuc2Vjb25k
ID4gYi5zZWNvbmQ7CisgICAgcmV0dXJuIGEudmFsdWUgPiBiLnZhbHVlOwogfQogCiB2b2lkIFBy
b2ZpbGU6OmRlYnVnUHJpbnREYXRhU2FtcGxlU3R5bGUoKSBjb25zdApAQCAtMTI4LDcgKzEyOCw3
IEBAIHZvaWQgUHJvZmlsZTo6ZGVidWdQcmludERhdGFTYW1wbGVTdHlsZSgpIGNvbnN0CiAKICAg
ICBzdGQ6OnNvcnQoc29ydGVkRnVuY3Rpb25zLmJlZ2luKCksIHNvcnRlZEZ1bmN0aW9ucy5lbmQo
KSwgZnVuY3Rpb25OYW1lQ291bnRQYWlyQ29tcGFyYXRvcik7CiAgICAgZm9yIChOYW1lQ291bnRQ
YWlyVmVjdG9yOjppdGVyYXRvciBpdCA9IHNvcnRlZEZ1bmN0aW9ucy5iZWdpbigpOyBpdCAhPSBz
b3J0ZWRGdW5jdGlvbnMuZW5kKCk7ICsraXQpCi0gICAgICAgIGRhdGFMb2coIiAgICAgICAgJS0x
MmQlc1xuIiwgKCppdCkuc2Vjb25kLCBVU3RyaW5nKCgqaXQpLmZpcnN0KS51dGY4KCkuZGF0YSgp
KTsKKyAgICAgICAgZGF0YUxvZygiICAgICAgICAlLTEyZCVzXG4iLCAoKml0KS52YWx1ZSwgVVN0
cmluZygoKml0KS5rZXkpLnV0ZjgoKS5kYXRhKCkpOwogCiAgICAgZGF0YUxvZygiXG5Tb3J0IGJ5
IHRvcCBvZiBzdGFjaywgc2FtZSBjb2xsYXBzZWQgKHdoZW4gPj0gNSk6XG4iKTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5jcHAKaW5kZXggMGZjNTRmM2M2
ZmQ4NzViMzliMWM1ZjA1MzZmM2ZlYjY4MzE4MjI0MS4uNDhhN2FkZjBjZjBjNjhjYjdkZDQxNDFj
ZjJkNmUxZjZlMGUwY2IyYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSWRlbnRpZmllci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRl
bnRpZmllci5jcHAKQEAgLTEwMiw3ICsxMDIsNyBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IElk
ZW50aWZpZXI6OmFkZChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IGNoYXIqIGMpCiAK
ICAgICBjb25zdCBMaXRlcmFsSWRlbnRpZmllclRhYmxlOjppdGVyYXRvciYgaXRlciA9IGxpdGVy
YWxJZGVudGlmaWVyVGFibGUuZmluZChjKTsKICAgICBpZiAoaXRlciAhPSBsaXRlcmFsSWRlbnRp
ZmllclRhYmxlLmVuZCgpKQotICAgICAgICByZXR1cm4gaXRlci0+c2Vjb25kOworICAgICAgICBy
ZXR1cm4gaXRlci0+dmFsdWU7CiAKICAgICBIYXNoU2V0PFN0cmluZ0ltcGwqPjo6QWRkUmVzdWx0
IGFkZFJlc3VsdCA9IGlkZW50aWZpZXJUYWJsZS5hZGQ8Y29uc3QgTENoYXIqLCBJZGVudGlmaWVy
QVNDSUlTdHJpbmdUcmFuc2xhdG9yPihyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oYykp
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRp
b24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmNwcApp
bmRleCBhMjI2YjQxNmY5MGZkN2I4MmRiNzA3MjQ2NTliYzkyNmExNDcyZGRiLi4xOGMzMDc5Mzlj
MWY4MWM1YzUzZTM1NGIyYTdhOGYzNGEwOGMxNjM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5jcHAKQEAgLTE0MCwxMSArMTQwLDExIEBAIHZvaWQg
SlNBY3RpdmF0aW9uOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVyCiAKICAgICBTeW1ib2xUYWJsZTo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS0+ZW5kKCk7CiAgICAgZm9yIChTeW1ib2xUYWJs
ZTo6Y29uc3RfaXRlcmF0b3IgaXQgPSB0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQuZ2V0QXR0cmlidXRl
cygpICYgRG9udEVudW0gJiYgbW9kZSAhPSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKQorICAg
ICAgICBpZiAoaXQtPnZhbHVlLmdldEF0dHJpYnV0ZXMoKSAmIERvbnRFbnVtICYmIG1vZGUgIT0g
SW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICBpZiAoaXQtPnNlY29uZC5nZXRJbmRleCgpID49IHRoaXNPYmplY3QtPm1fbnVtQ2FwdHVyZWRW
YXJzKQorICAgICAgICBpZiAoaXQtPnZhbHVlLmdldEluZGV4KCkgPj0gdGhpc09iamVjdC0+bV9u
dW1DYXB0dXJlZFZhcnMpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgcHJvcGVydHlO
YW1lcy5hZGQoSWRlbnRpZmllcihleGVjLCBpdC0+Zmlyc3QuZ2V0KCkpKTsKKyAgICAgICAgcHJv
cGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihleGVjLCBpdC0+a2V5LmdldCgpKSk7CiAgICAgfQog
ICAgIC8vIFNraXAgdGhlIEpTVmFyaWFibGVPYmplY3QgaW1wbGVtZW50YXRpb24gb2YgZ2V0T3du
UHJvcGVydHlOYW1lcwogICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmpl
Y3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwpAQCAtMTU3LDcgKzE1Nyw3IEBAIGlubGlu
ZSBib29sIEpTQWN0aXZhdGlvbjo6c3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRlcyhKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsCiAgICAgU3ltYm9sVGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSBzeW1i
b2xUYWJsZSgpLT5maW5kKHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCkpOwogICAgIGlmIChpdGVy
ID09IHN5bWJvbFRhYmxlKCktPmVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgU3lt
Ym9sVGFibGVFbnRyeSYgZW50cnkgPSBpdGVyLT5zZWNvbmQ7CisgICAgU3ltYm9sVGFibGVFbnRy
eSYgZW50cnkgPSBpdGVyLT52YWx1ZTsKICAgICBBU1NFUlQoIWVudHJ5LmlzTnVsbCgpKTsKICAg
ICBpZiAoZW50cnkuZ2V0SW5kZXgoKSA+PSBtX251bUNhcHR1cmVkVmFycykKICAgICAgICAgcmV0
dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
cnJheS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAppbmRl
eCA3MjE4NjA0ZDExMmM3OGI1NzEyYjQ1NDQzOGYyOWIxMGI1MjA4NDM4Li5mNTg0OGQ5MmY4ZjEx
NjBmNTg4ZTlkZWY2MGNkOTRkMjcxMzFjYzJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FycmF5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5LmNwcApAQCAtMjA0LDcgKzIwNCw3IEBAIGlubGluZSBTcGFyc2VBcnJheVZh
bHVlTWFwOjpBZGRSZXN1bHQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6YWRkKEpTQXJyYXkqIGFycmF5
LCB1CiBpbmxpbmUgdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjpwdXQoRXhlY1N0YXRlKiBleGVj
LCBKU0FycmF5KiBhcnJheSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRU
aHJvdykKIHsKICAgICBBZGRSZXN1bHQgcmVzdWx0ID0gYWRkKGFycmF5LCBpKTsKLSAgICBTcGFy
c2VBcnJheUVudHJ5JiBlbnRyeSA9IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgIFNwYXJz
ZUFycmF5RW50cnkmIGVudHJ5ID0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIAogICAgIC8vIFRv
IHNhdmUgYSBzZXBhcmF0ZSBmaW5kICYgYWRkLCB3ZSBmaXJzdCBhbHdheXMgYWRkIHRvIHRoZSBz
cGFyc2UgbWFwLgogICAgIC8vIEluIHRoZSB1bmNvbW1vbiBjYXNlIHRoYXQgdGhpcyBpcyBhIG5l
dyBwcm9wZXJ0eSwgYW5kIHRoZSBhcnJheSBpcyBub3QKQEAgLTI0Nyw3ICsyNDcsNyBAQCBpbmxp
bmUgdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjpwdXQoRXhlY1N0YXRlKiBleGVjLCBKU0FycmF5
KiBhcnJheSwgdW5zaWduZWQgaQogaW5saW5lIGJvb2wgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6cHV0
RGlyZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJheSogYXJyYXksIHVuc2lnbmVkIGksIEpTVmFs
dWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCiB7CiAgICAgQWRkUmVzdWx0IHJlc3VsdCA9IGFk
ZChhcnJheSwgaSk7Ci0gICAgU3BhcnNlQXJyYXlFbnRyeSYgZW50cnkgPSByZXN1bHQuaXRlcmF0
b3ItPnNlY29uZDsKKyAgICBTcGFyc2VBcnJheUVudHJ5JiBlbnRyeSA9IHJlc3VsdC5pdGVyYXRv
ci0+dmFsdWU7CiAKICAgICAvLyBUbyBzYXZlIGEgc2VwYXJhdGUgZmluZCAmIGFkZCwgd2UgZmly
c3QgYWx3YXlzIGFkZCB0byB0aGUgc3BhcnNlIG1hcC4KICAgICAvLyBJbiB0aGUgdW5jb21tb24g
Y2FzZSB0aGF0IHRoaXMgaXMgYSBuZXcgcHJvcGVydHksIGFuZCB0aGUgYXJyYXkgaXMgbm90CkBA
IC0zMTMsNyArMzEzLDcgQEAgaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6dmlzaXRD
aGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpdGVyYXRvciBlbmQgPSBtX21h
cC5lbmQoKTsKICAgICBmb3IgKGl0ZXJhdG9yIGl0ID0gbV9tYXAuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KQotICAgICAgICB2aXNpdG9yLmFwcGVuZCgmaXQtPnNlY29uZCk7CisgICAgICAgIHZp
c2l0b3IuYXBwZW5kKCZpdC0+dmFsdWUpOwogfQogCiB2b2lkIEpTQXJyYXk6OmFsbG9jYXRlU3Bh
cnNlTWFwKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKQEAgLTM0OSw3ICszNDksNyBAQCB2b2lk
IEpTQXJyYXk6OmVudGVyRGljdGlvbmFyeU1vZGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQog
ICAgICAgICAvLyBUaGlzIHdpbGwgYWx3YXlzIGJlIGEgbmV3IGVudHJ5IGluIHRoZSBtYXAsIHNv
IG5vIG5lZWQgdG8gY2hlY2sgd2UgY2FuIHdyaXRlLAogICAgICAgICAvLyBhbmQgYXR0cmlidXRl
cyBhcmUgZGVmYXVsdCBzbyBubyBuZWVkIHRvIHNldCB0aGVtLgogICAgICAgICBpZiAodmFsdWUp
Ci0gICAgICAgICAgICBtYXAtPmFkZCh0aGlzLCBpKS5pdGVyYXRvci0+c2Vjb25kLnNldChnbG9i
YWxEYXRhLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICBtYXAtPmFkZCh0aGlzLCBpKS5pdGVy
YXRvci0+dmFsdWUuc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKICAgICB9CiAKICAgICB2
b2lkKiBuZXdSYXdTdG9yYWdlID0gMDsKQEAgLTQyNSw3ICs0MjUsNyBAQCBib29sIEpTQXJyYXk6
OmRlZmluZU93bk51bWVyaWNQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4
LCBQcm9wZXJ0eQogCiAgICAgLy8gMS4gTGV0IGN1cnJlbnQgYmUgdGhlIHJlc3VsdCBvZiBjYWxs
aW5nIHRoZSBbW0dldE93blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBwcm9w
ZXJ0eSBuYW1lIFAuCiAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9
IG1hcC0+YWRkKHRoaXMsIGluZGV4KTsKLSAgICBTcGFyc2VBcnJheUVudHJ5KiBlbnRyeUluTWFw
ID0gJnJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgIFNwYXJzZUFycmF5RW50cnkqIGVudHJ5
SW5NYXAgPSAmcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIAogICAgIC8vIDIuIExldCBleHRlbnNp
YmxlIGJlIHRoZSB2YWx1ZSBvZiB0aGUgW1tFeHRlbnNpYmxlXV0gaW50ZXJuYWwgcHJvcGVydHkg
b2YgTy4KICAgICAvLyAzLiBJZiBjdXJyZW50IGlzIHVuZGVmaW5lZCBhbmQgZXh0ZW5zaWJsZSBp
cyBmYWxzZSwgdGhlbiBSZWplY3QuCkBAIC02NTYsNyArNjU2LDcgQEAgYm9vbCBKU0FycmF5Ojpn
ZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1
bnNpZ25lZAogICAgIH0gZWxzZSBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gdGhpc09i
amVjdC0+bV9zcGFyc2VWYWx1ZU1hcCkgewogICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpp
dGVyYXRvciBpdCA9IG1hcC0+ZmluZChpKTsKICAgICAgICAgaWYgKGl0ICE9IG1hcC0+bm90Rm91
bmQoKSkgewotICAgICAgICAgICAgaXQtPnNlY29uZC5nZXQoc2xvdCk7CisgICAgICAgICAgICBp
dC0+dmFsdWUuZ2V0KHNsb3QpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0K
ICAgICB9CkBAIC03MDIsNyArNzAyLDcgQEAgYm9vbCBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXIKICAgICAg
ICAgfSBlbHNlIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSB0aGlzT2JqZWN0LT5tX3Nw
YXJzZVZhbHVlTWFwKSB7CiAgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRv
ciBpdCA9IG1hcC0+ZmluZChpKTsKICAgICAgICAgICAgIGlmIChpdCAhPSBtYXAtPm5vdEZvdW5k
KCkpIHsKLSAgICAgICAgICAgICAgICBpdC0+c2Vjb25kLmdldChkZXNjcmlwdG9yKTsKKyAgICAg
ICAgICAgICAgICBpdC0+dmFsdWUuZ2V0KGRlc2NyaXB0b3IpOwogICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC04MzQsNyArODM0LDcgQEAg
dm9pZCBKU0FycmF5OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSogZXhl
YywgdW5zaWduZWQgaSwgSlNWYWx1ZQogICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9y
ID0gc3RvcmFnZS0+bV92ZWN0b3I7CiAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAg
IHZlY3RvcltpdC0+Zmlyc3RdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBpdC0+c2Vjb25kLmdldE5v
blNwYXJzZU1vZGUoKSk7CisgICAgICAgIHZlY3RvcltpdC0+a2V5XS5zZXQoZ2xvYmFsRGF0YSwg
dGhpcywgaXQtPnZhbHVlLmdldE5vblNwYXJzZU1vZGUoKSk7CiAgICAgZGVhbGxvY2F0ZVNwYXJz
ZU1hcCgpOwogCiAgICAgLy8gU3RvcmUgdGhlIG5ldyBwcm9wZXJ0eSBpbnRvIHRoZSB2ZWN0b3Iu
CkBAIC05MDQsNyArOTA0LDcgQEAgYm9vbCBKU0FycmF5OjpwdXREaXJlY3RJbmRleEJleW9uZFZl
Y3Rvckxlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmEKICAgICBXcml0ZUJh
cnJpZXI8VW5rbm93bj4qIHZlY3RvciA9IHN0b3JhZ2UtPm1fdmVjdG9yOwogICAgIFNwYXJzZUFy
cmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7CiAgICAgZm9yIChT
cGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KQotICAgICAgICB2ZWN0b3JbaXQtPmZpcnN0XS5zZXQoZ2xvYmFsRGF0YSwg
dGhpcywgaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCkpOworICAgICAgICB2ZWN0b3JbaXQt
PmtleV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIGl0LT52YWx1ZS5nZXROb25TcGFyc2VNb2RlKCkp
OwogICAgIGRlYWxsb2NhdGVTcGFyc2VNYXAoKTsKIAogICAgIC8vIFN0b3JlIHRoZSBuZXcgcHJv
cGVydHkgaW50byB0aGUgdmVjdG9yLgpAQCAtOTQ3LDcgKzk0Nyw3IEBAIGJvb2wgSlNBcnJheTo6
ZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNp
Z25lZCBpKQogICAgIH0gZWxzZSBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gdGhpc09i
amVjdC0+bV9zcGFyc2VWYWx1ZU1hcCkgewogICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpp
dGVyYXRvciBpdCA9IG1hcC0+ZmluZChpKTsKICAgICAgICAgaWYgKGl0ICE9IG1hcC0+bm90Rm91
bmQoKSkgewotICAgICAgICAgICAgaWYgKGl0LT5zZWNvbmQuYXR0cmlidXRlcyAmIERvbnREZWxl
dGUpCisgICAgICAgICAgICBpZiAoaXQtPnZhbHVlLmF0dHJpYnV0ZXMgJiBEb250RGVsZXRlKQog
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIG1hcC0+cmVtb3ZlKGl0
KTsKICAgICAgICAgfQpAQCAtOTg1LDggKzk4NSw4IEBAIHZvaWQgSlNBcnJheTo6Z2V0T3duUHJv
cGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFt
CiAgICAgICAgIAogICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBl
bmQgPSBtYXAtPmVuZCgpOwogICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAg
ICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMgfHwgIShpdC0+c2Vjb25k
LmF0dHJpYnV0ZXMgJiBEb250RW51bSkpCi0gICAgICAgICAgICAgICAga2V5cy5hcHBlbmQoc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGl0LT5maXJzdCkpOworICAgICAgICAgICAgaWYgKG1vZGUgPT0g
SW5jbHVkZURvbnRFbnVtUHJvcGVydGllcyB8fCAhKGl0LT52YWx1ZS5hdHRyaWJ1dGVzICYgRG9u
dEVudW0pKQorICAgICAgICAgICAgICAgIGtleXMuYXBwZW5kKHN0YXRpY19jYXN0PHVuc2lnbmVk
PihpdC0+a2V5KSk7CiAgICAgICAgIH0KIAogICAgICAgICBxc29ydChrZXlzLmJlZ2luKCksIGtl
eXMuc2l6ZSgpLCBzaXplb2YodW5zaWduZWQpLCBjb21wYXJlS2V5c0ZvclFTb3J0KTsKQEAgLTEx
NzksNyArMTE3OSw3IEBAIGJvb2wgSlNBcnJheTo6c2V0TGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywg
dW5zaWduZWQgbmV3TGVuZ3RoLCBib29sIHRocm93RXhjZXB0aW9uCiAgICAgICAgICAgICBrZXlz
LnJlc2VydmVDYXBhY2l0eShtaW4obWFwLT5zaXplKCksIHN0YXRpY19jYXN0PHNpemVfdD4obGVu
Z3RoIC0gbmV3TGVuZ3RoKSkpOwogICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKICAgICAgICAgICAgIGZvciAoU3BhcnNlQXJy
YXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGl0LT5maXJzdCk7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oaXQtPmtleSk7CiAgICAgICAgICAgICAgICAgaWYgKGluZGV4IDwg
bGVuZ3RoICYmIGluZGV4ID49IG5ld0xlbmd0aCkKICAgICAgICAgICAgICAgICAgICAga2V5cy5h
cHBlbmQoaW5kZXgpOwogICAgICAgICAgICAgfQpAQCAtMTE5NCw3ICsxMTk0LDcgQEAgYm9vbCBK
U0FycmF5OjpzZXRMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBuZXdMZW5ndGgsIGJv
b2wgdGhyb3dFeGNlcHRpb24KICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBr
ZXlzWy0taV07CiAgICAgICAgICAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6Oml0ZXJh
dG9yIGl0ID0gbWFwLT5maW5kKGluZGV4KTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGl0
ICE9IG1hcC0+bm90Rm91bmQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpdC0+c2Vjb25k
LmF0dHJpYnV0ZXMgJiBEb250RGVsZXRlKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpdC0+
dmFsdWUuYXR0cmlidXRlcyAmIERvbnREZWxldGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
IHN0b3JhZ2UtPm1fbGVuZ3RoID0gaW5kZXggKyAxOwogICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIlVuYWJsZSB0byBkZWxldGUgcHJv
cGVydHkuIik7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTE2NjksNyArMTY2OSw3IEBAIHZv
aWQgSlNBcnJheTo6c29ydChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgY29tcGFyZUZ1bmN0aW9u
LCBDYWxsVHlwZSBjYWxsVHlwZSwKIAogICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25z
dF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwogICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFs
dWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKLSAgICAgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbbnVtRGVmaW5lZF0udmFs
dWUgPSBpdC0+c2Vjb25kLmdldE5vblNwYXJzZU1vZGUoKTsKKyAgICAgICAgICAgIHRyZWUuYWJz
dHJhY3RvcigpLm1fbm9kZXNbbnVtRGVmaW5lZF0udmFsdWUgPSBpdC0+dmFsdWUuZ2V0Tm9uU3Bh
cnNlTW9kZSgpOwogICAgICAgICAgICAgdHJlZS5pbnNlcnQobnVtRGVmaW5lZCk7CiAgICAgICAg
ICAgICArK251bURlZmluZWQ7CiAgICAgICAgIH0KQEAgLTE3ODQsNyArMTc4NCw3IEBAIHVuc2ln
bmVkIEpTQXJyYXk6OmNvbXBhY3RGb3JTb3J0aW5nKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkK
IAogICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAt
PmVuZCgpOwogICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBzdG9yYWdl
LT5tX3ZlY3RvcltudW1EZWZpbmVkKytdLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoaXQtPnNlY29u
ZC5nZXROb25TcGFyc2VNb2RlKCkpOworICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbbnVt
RGVmaW5lZCsrXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGl0LT52YWx1ZS5nZXROb25TcGFyc2VN
b2RlKCkpOwogCiAgICAgICAgIGRlYWxsb2NhdGVTcGFyc2VNYXAoKTsKICAgICB9CkBAIC0xODMx
LDEzICsxODMxLDEzIEBAIHZvaWQgSlNBcnJheTo6Y2hlY2tDb25zaXN0ZW5jeShDb25zaXN0ZW5j
eUNoZWNrVHlwZSB0eXBlKQogICAgIGlmIChtX3NwYXJzZVZhbHVlTWFwKSB7CiAgICAgICAgIFNw
YXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fc3BhcnNlVmFsdWVNYXAt
PmVuZCgpOwogICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbV9zcGFyc2VWYWx1ZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAg
ICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGl0LT5maXJzdDsKKyAgICAgICAgICAgIHVuc2lnbmVk
IGluZGV4ID0gaXQtPmtleTsKICAgICAgICAgICAgIEFTU0VSVChpbmRleCA8IHN0b3JhZ2UtPm1f
bGVuZ3RoKTsKICAgICAgICAgICAgIEFTU0VSVChpbmRleCA+PSBtX3ZlY3Rvckxlbmd0aCk7CiAg
ICAgICAgICAgICBBU1NFUlQoaW5kZXggPD0gTUFYX0FSUkFZX0lOREVYKTsKLSAgICAgICAgICAg
IEFTU0VSVChpdC0+c2Vjb25kKTsKKyAgICAgICAgICAgIEFTU0VSVChpdC0+dmFsdWUpOwogICAg
ICAgICAgICAgaWYgKHR5cGUgIT0gRGVzdHJ1Y3RvckNvbnNpc3RlbmN5Q2hlY2spCi0gICAgICAg
ICAgICAgICAgaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCkuaXNVbmRlZmluZWQoKTsgLy8g
TGlrZWx5IHRvIGNyYXNoIGlmIHRoZSBvYmplY3Qgd2FzIGRlYWxsb2NhdGVkLgorICAgICAgICAg
ICAgICAgIGl0LT52YWx1ZS5nZXROb25TcGFyc2VNb2RlKCkuaXNVbmRlZmluZWQoKTsgLy8gTGlr
ZWx5IHRvIGNyYXNoIGlmIHRoZSBvYmplY3Qgd2FzIGRlYWxsb2NhdGVkLgogICAgICAgICB9CiAg
ICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1i
b2xUYWJsZU9iamVjdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJv
bFRhYmxlT2JqZWN0LmNwcAppbmRleCAyMzM0YTA4Y2FlOGFhY2VmZjhmNjU1ZDE3OWUxZDY5Y2Y0
YzM1NjM4Li4zN2NjMWFlMDQxNmI1ZGM4NzVlNGRhNDkxZjkxY2I3NWI2OTYzMGU2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0
LmNwcApAQCAtNjEsOCArNjEsOCBAQCB2b2lkIEpTU3ltYm9sVGFibGVPYmplY3Q6OmdldE93blBy
b3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLAogICAgIEpTU3lt
Ym9sVGFibGVPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTeW1ib2xUYWJsZU9iamVjdCo+
KG9iamVjdCk7CiAgICAgU3ltYm9sVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHRoaXNPYmpl
Y3QtPnN5bWJvbFRhYmxlKCktPmVuZCgpOwogICAgIGZvciAoU3ltYm9sVGFibGU6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS0+YmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7Ci0gICAgICAgIGlmICghKGl0LT5zZWNvbmQuZ2V0QXR0cmlidXRlcygpICYgRG9u
dEVudW0pIHx8IChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpKQotICAgICAgICAg
ICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihleGVjLCBpdC0+Zmlyc3QuZ2V0KCkpKTsK
KyAgICAgICAgaWYgKCEoaXQtPnZhbHVlLmdldEF0dHJpYnV0ZXMoKSAmIERvbnRFbnVtKSB8fCAo
bW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKSkKKyAgICAgICAgICAgIHByb3BlcnR5
TmFtZXMuYWRkKElkZW50aWZpZXIoZXhlYywgaXQtPmtleS5nZXQoKSkpOwogICAgIH0KICAgICAK
ICAgICBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9w
ZXJ0eU5hbWVzLCBtb2RlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU3ltYm9sVGFibGVPYmplY3QuaAppbmRleCAxYTk5YjE5OWZmZTFiNjdhN2NkYmNkZmNjOTY5
M2Y0ZjFlMWQ0ZDkyLi41MGE2NDk1NzkzYTFlMGNiOTJhNTdhNmJjZjY0Zjk4MDk4NWI2NjU2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2Jq
ZWN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9i
amVjdC5oCkBAIC03Nyw3ICs3Nyw3IEBAIGlubGluZSBib29sIHN5bWJvbFRhYmxlR2V0KAogICAg
IFN5bWJvbFRhYmxlOjppdGVyYXRvciBpdGVyID0gc3ltYm9sVGFibGUuZmluZChwcm9wZXJ0eU5h
bWUucHVibGljTmFtZSgpKTsKICAgICBpZiAoaXRlciA9PSBzeW1ib2xUYWJsZS5lbmQoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFN5bWJvbFRhYmxlRW50cnk6OkZhc3QgZW50cnkgPSBp
dGVyLT5zZWNvbmQ7CisgICAgU3ltYm9sVGFibGVFbnRyeTo6RmFzdCBlbnRyeSA9IGl0ZXItPnZh
bHVlOwogICAgIEFTU0VSVCghZW50cnkuaXNOdWxsKCkpOwogICAgIHNsb3Quc2V0VmFsdWUob2Jq
ZWN0LT5yZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpLmdldCgpKTsKICAgICByZXR1cm4gdHJ1
ZTsKQEAgLTkxLDcgKzkxLDcgQEAgaW5saW5lIGJvb2wgc3ltYm9sVGFibGVHZXQoCiAgICAgU3lt
Ym9sVGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSBzeW1ib2xUYWJsZS5maW5kKHByb3BlcnR5TmFtZS5w
dWJsaWNOYW1lKCkpOwogICAgIGlmIChpdGVyID09IHN5bWJvbFRhYmxlLmVuZCgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgU3ltYm9sVGFibGVFbnRyeTo6RmFzdCBlbnRyeSA9IGl0ZXIt
PnNlY29uZDsKKyAgICBTeW1ib2xUYWJsZUVudHJ5OjpGYXN0IGVudHJ5ID0gaXRlci0+dmFsdWU7
CiAgICAgQVNTRVJUKCFlbnRyeS5pc051bGwoKSk7CiAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlw
dG9yKAogICAgICAgICBvYmplY3QtPnJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuZ2V0KCks
IGVudHJ5LmdldEF0dHJpYnV0ZXMoKSB8IERvbnREZWxldGUpOwpAQCAtMTA3LDcgKzEwNyw3IEBA
IGlubGluZSBib29sIHN5bWJvbFRhYmxlR2V0KAogICAgIFN5bWJvbFRhYmxlOjppdGVyYXRvciBp
dGVyID0gc3ltYm9sVGFibGUuZmluZChwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpKTsKICAgICBp
ZiAoaXRlciA9PSBzeW1ib2xUYWJsZS5lbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IFN5bWJvbFRhYmxlRW50cnk6OkZhc3QgZW50cnkgPSBpdGVyLT5zZWNvbmQ7CisgICAgU3ltYm9s
VGFibGVFbnRyeTo6RmFzdCBlbnRyeSA9IGl0ZXItPnZhbHVlOwogICAgIEFTU0VSVCghZW50cnku
aXNOdWxsKCkpOwogICAgIHNsb3Quc2V0VmFsdWUob2JqZWN0LT5yZWdpc3RlckF0KGVudHJ5Lmdl
dEluZGV4KCkpLmdldCgpKTsKICAgICBzbG90SXNXcml0ZWFibGUgPSAhZW50cnkuaXNSZWFkT25s
eSgpOwpAQCAtMTI3LDcgKzEyNyw3IEBAIGlubGluZSBib29sIHN5bWJvbFRhYmxlUHV0KAogICAg
IGlmIChpdGVyID09IHN5bWJvbFRhYmxlLmVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgYm9vbCB3YXNGYXQ7Ci0gICAgU3ltYm9sVGFibGVFbnRyeTo6RmFzdCBmYXN0RW50cnkgPSBp
dGVyLT5zZWNvbmQuZ2V0RmFzdCh3YXNGYXQpOworICAgIFN5bWJvbFRhYmxlRW50cnk6OkZhc3Qg
ZmFzdEVudHJ5ID0gaXRlci0+dmFsdWUuZ2V0RmFzdCh3YXNGYXQpOwogICAgIEFTU0VSVCghZmFz
dEVudHJ5LmlzTnVsbCgpKTsKICAgICBpZiAoZmFzdEVudHJ5LmlzUmVhZE9ubHkoKSkgewogICAg
ICAgICBpZiAoc2hvdWxkVGhyb3cpCkBAIC0xMzUsNyArMTM1LDcgQEAgaW5saW5lIGJvb2wgc3lt
Ym9sVGFibGVQdXQoCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBpZiAoVU5MSUtF
TFkod2FzRmF0KSkKLSAgICAgICAgaXRlci0+c2Vjb25kLm5vdGlmeVdyaXRlKCk7CisgICAgICAg
IGl0ZXItPnZhbHVlLm5vdGlmeVdyaXRlKCk7CiAgICAgb2JqZWN0LT5yZWdpc3RlckF0KGZhc3RF
bnRyeS5nZXRJbmRleCgpKS5zZXQoZ2xvYmFsRGF0YSwgb2JqZWN0LCB2YWx1ZSk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CkBAIC0xNTAsNyArMTUwLDcgQEAgaW5saW5lIGJvb2wgc3ltYm9sVGFibGVQ
dXRXaXRoQXR0cmlidXRlcygKICAgICBTeW1ib2xUYWJsZTo6aXRlcmF0b3IgaXRlciA9IG9iamVj
dC0+c3ltYm9sVGFibGUoKS0+ZmluZChwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpKTsKICAgICBp
ZiAoaXRlciA9PSBvYmplY3QtPnN5bWJvbFRhYmxlKCktPmVuZCgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgU3ltYm9sVGFibGVFbnRyeSYgZW50cnkgPSBpdGVyLT5zZWNvbmQ7CisgICAg
U3ltYm9sVGFibGVFbnRyeSYgZW50cnkgPSBpdGVyLT52YWx1ZTsKICAgICBBU1NFUlQoIWVudHJ5
LmlzTnVsbCgpKTsKICAgICBlbnRyeS5ub3RpZnlXcml0ZSgpOwogICAgIGVudHJ5LnNldEF0dHJp
YnV0ZXMoYXR0cmlidXRlcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9SZWdFeHBDYWNoZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdF
eHBDYWNoZS5jcHAKaW5kZXggNTNhMTNhNGI1OWI3N2U3NmE0Yjg4MGNmZTc1YjM2MDZjODdlMWZh
ZC4uYWI0Zjk4NzhhOTk5OGQ0OTg0MDJlNmI0ZGNlNzA5YmQyOGUyY2VlOCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGUuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlLmNwcApAQCAtODAsNyArODAsNyBA
QCB2b2lkIFJlZ0V4cENhY2hlOjppbnZhbGlkYXRlQ29kZSgpCiAKICAgICBSZWdFeHBDYWNoZU1h
cDo6aXRlcmF0b3IgZW5kID0gbV93ZWFrQ2FjaGUuZW5kKCk7CiAgICAgZm9yIChSZWdFeHBDYWNo
ZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3dlYWtDYWNoZS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKLSAgICAgICAgUmVnRXhwKiByZWdFeHAgPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICBS
ZWdFeHAqIHJlZ0V4cCA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgaWYgKCFyZWdFeHApIC8v
IFNraXAgem9tYmllcy4KICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICByZWdFeHAtPmlu
dmFsaWRhdGVDb2RlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9XZWFrR0NNYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ01hcC5o
CmluZGV4IDY5MjYxNjVhNzg1YTc2N2RhMzc3YWNlYjI1Mzk3MGNlYzNiOWE5NDguLjUyZTVlMjk0
NmZkMTAzYjdmZWFmNjIxZjZmZDJhNTBkMDUzNDlkMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ01hcC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1dlYWtHQ01hcC5oCkBAIC02Myw3ICs2Myw3IEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgICAgIHR5cGVuYW1lIE1hcFR5cGU6Oml0ZXJhdG9yIGVuZCA9IG1fbWFwLmVuZCgpOwogICAg
ICAgICBmb3IgKHR5cGVuYW1lIE1hcFR5cGU6Oml0ZXJhdG9yIHB0ciA9IG1fbWFwLmJlZ2luKCk7
IHB0ciAhPSBlbmQ7ICsrcHRyKQotICAgICAgICAgICAgV2Vha1NldDo6ZGVhbGxvY2F0ZShwdHIt
PnNlY29uZCk7CisgICAgICAgICAgICBXZWFrU2V0OjpkZWFsbG9jYXRlKHB0ci0+dmFsdWUpOwog
ICAgICAgICBtX21hcC5jbGVhcigpOwogICAgIH0KIApAQCAtODAsOCArODAsOCBAQCBwdWJsaWM6
CiAgICAgICAgIEFTU0VSVF9VTlVTRUQoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5hcGlMb2NrKCku
Y3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSk7CiAgICAgICAgIHR5cGVuYW1lIE1hcFR5cGU6
OkFkZFJlc3VsdCByZXN1bHQgPSBtX21hcC5hZGQoa2V5LCAwKTsKICAgICAgICAgaWYgKCFyZXN1
bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgIFdlYWtTZXQ6OmRlYWxsb2NhdGUocmVzdWx0Lml0
ZXJhdG9yLT5zZWNvbmQpOwotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IFdlYWtT
ZXQ6OmFsbG9jYXRlKHZhbHVlLCB0aGlzLCBGaW5hbGl6ZXJDYWxsYmFjazo6ZmluYWxpemVyQ29u
dGV4dEZvcihrZXkpKTsKKyAgICAgICAgICAgIFdlYWtTZXQ6OmRlYWxsb2NhdGUocmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZSk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBXZWFrU2V0
OjphbGxvY2F0ZSh2YWx1ZSwgdGhpcywgRmluYWxpemVyQ2FsbGJhY2s6OmZpbmFsaXplckNvbnRl
eHRGb3Ioa2V5KSk7CiAgICAgfQogCiAgICAgdm9pZCByZW1vdmUoY29uc3QgS2V5VHlwZSYga2V5
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1Byb2ZpbGVUcmVlTm9k
ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1Byb2ZpbGVUcmVlTm9kZS5oCmluZGV4
IDdiNTFlZmI4NWRiMzQ0MWEyMjI2M2I0MjQ5N2EzMTc1MmI1YjUyZmQuLjdiNWE5NWVjNDA0NGI2
M2YyMTExMzYxMjJkOTIzY2E4ODk0NjBhMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS90b29scy9Qcm9maWxlVHJlZU5vZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
dG9vbHMvUHJvZmlsZVRyZWVOb2RlLmgKQEAgLTUxLDcgKzUxLDcgQEAgcHVibGljOgogICAgIAog
ICAgICAgICBQcm9maWxlVHJlZU5vZGUgbmV3RW50cnk7CiAgICAgICAgIE1hcDo6QWRkUmVzdWx0
IHJlc3VsdCA9IG1fY2hpbGRyZW4tPmFkZChTdHJpbmcobmFtZSksIG5ld0VudHJ5KTsKLSAgICAg
ICAgUHJvZmlsZVRyZWVOb2RlKiBjaGlsZEluTWFwID0gJnJlc3VsdC5pdGVyYXRvci0+c2Vjb25k
OworICAgICAgICBQcm9maWxlVHJlZU5vZGUqIGNoaWxkSW5NYXAgPSAmcmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZTsKICAgICAgICAgKytjaGlsZEluTWFwLT5tX2NvdW50OwogICAgICAgICByZXR1cm4g
Y2hpbGRJbk1hcDsKICAgICB9CkBAIC03Miw3ICs3Miw3IEBAIHB1YmxpYzoKICAgICAgICAgICAg
IHJldHVybiAwOwogICAgICAgICB1aW50NjRfdCBjaGlsZENvdW50ID0gMDsKICAgICAgICAgZm9y
IChNYXA6Oml0ZXJhdG9yIGl0ID0gbV9jaGlsZHJlbi0+YmVnaW4oKTsgaXQgIT0gbV9jaGlsZHJl
bi0+ZW5kKCk7ICsraXQpCi0gICAgICAgICAgICBjaGlsZENvdW50ICs9IGl0LT5zZWNvbmQuY291
bnQoKTsKKyAgICAgICAgICAgIGNoaWxkQ291bnQgKz0gaXQtPnZhbHVlLmNvdW50KCk7CiAgICAg
ICAgIHJldHVybiBjaGlsZENvdW50OwogICAgIH0KICAgICAKQEAgLTk3LDE5ICs5NywxOSBAQCBw
cml2YXRlOgogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGluZGVudDsgKytp
KQogICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAiKTsKICAgICAgICAgICAgIGRhdGFMb2co
IiUgOGxsZDogJXMgKCVsbGQgc3RhY2sgdG9wKVxuIiwKLSAgICAgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxsb25nIGxvbmc+KGVudHJ5LT5zZWNvbmQuY291bnQoKSksCi0gICAgICAgICAgICAgICAg
ZW50cnktPmZpcnN0LnV0ZjgoKS5kYXRhKCksCi0gICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
bG9uZyBsb25nPihlbnRyeS0+c2Vjb25kLmNvdW50KCkgLSBlbnRyeS0+c2Vjb25kLmNoaWxkQ291
bnQoKSkpOworICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oZW50cnktPnZh
bHVlLmNvdW50KCkpLAorICAgICAgICAgICAgICAgIGVudHJ5LT5rZXkudXRmOCgpLmRhdGEoKSwK
KyAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KGVudHJ5LT52YWx1ZS5jb3Vu
dCgpIC0gZW50cnktPnZhbHVlLmNoaWxkQ291bnQoKSkpOwogCiAgICAgICAgICAgICAvLyBSZWN1
cnNpdmVseSBkdW1wIHRoZSBjaGlsZCBub2Rlcy4KLSAgICAgICAgICAgIGVudHJ5LT5zZWNvbmQu
ZHVtcEludGVybmFsKGluZGVudCArIDEpOworICAgICAgICAgICAgZW50cnktPnZhbHVlLmR1bXBJ
bnRlcm5hbChpbmRlbnQgKyAxKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIHN0YXRpYyBpbnQg
Y29tcGFyZUVudHJpZXMoY29uc3Qgdm9pZCogYSwgY29uc3Qgdm9pZCogYikKICAgICB7Ci0gICAg
ICAgIHVpbnQ2NF90IGRhID0gKCpzdGF0aWNfY2FzdDxNYXBFbnRyeSogY29uc3QgKj4oYSkpLT5z
ZWNvbmQuY291bnQoKTsKLSAgICAgICAgdWludDY0X3QgZGIgPSAoKnN0YXRpY19jYXN0PE1hcEVu
dHJ5KiBjb25zdCAqPihiKSktPnNlY29uZC5jb3VudCgpOworICAgICAgICB1aW50NjRfdCBkYSA9
ICgqc3RhdGljX2Nhc3Q8TWFwRW50cnkqIGNvbnN0ICo+KGEpKS0+dmFsdWUuY291bnQoKTsKKyAg
ICAgICAgdWludDY0X3QgZGIgPSAoKnN0YXRpY19jYXN0PE1hcEVudHJ5KiBjb25zdCAqPihiKSkt
PnZhbHVlLmNvdW50KCk7CiAgICAgICAgIHJldHVybiAoZGEgPCBkYikgLSAoZGEgPiBkYik7CiAg
ICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoQ291bnRlZFNldC5oIGIvU291
cmNlL1dURi93dGYvSGFzaENvdW50ZWRTZXQuaAppbmRleCBlZjg5YmRiYzc1MjYxODVkZTAxNzUz
ZTAzZTlmNmIwYjc3ZTNlMDFkLi5lZmY0YTI5M2U5YzczOWIxMmM0M2I2ODkxMjZkMGM4NDUwYmNk
MDBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoQ291bnRlZFNldC5oCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL0hhc2hDb3VudGVkU2V0LmgKQEAgLTE1NCw3ICsxNTQsNyBAQCBuYW1lc3Bh
Y2UgV1RGIHsKICAgICBpbmxpbmUgdHlwZW5hbWUgSGFzaENvdW50ZWRTZXQ8VmFsdWUsIEhhc2hG
dW5jdGlvbnMsIFRyYWl0cz46OkFkZFJlc3VsdCBIYXNoQ291bnRlZFNldDxWYWx1ZSwgSGFzaEZ1
bmN0aW9ucywgVHJhaXRzPjo6YWRkKGNvbnN0IFZhbHVlVHlwZSAmdmFsdWUpCiAgICAgewogICAg
ICAgICBBZGRSZXN1bHQgcmVzdWx0ID0gbV9pbXBsLmFkZCh2YWx1ZSwgMCk7Ci0gICAgICAgICsr
cmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgICsrcmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCkBAIC0xNzAsMTEgKzE3MCwx
MSBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgaWYgKGl0ID09IGVuZCgpKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIHVuc2lnbmVkIG9sZFZhbCA9IGl0LT5zZWNvbmQ7
CisgICAgICAgIHVuc2lnbmVkIG9sZFZhbCA9IGl0LT52YWx1ZTsKICAgICAgICAgQVNTRVJUKG9s
ZFZhbCk7CiAgICAgICAgIHVuc2lnbmVkIG5ld1ZhbCA9IG9sZFZhbCAtIDE7CiAgICAgICAgIGlm
IChuZXdWYWwpIHsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQgPSBuZXdWYWw7CisgICAgICAgICAg
ICBpdC0+dmFsdWUgPSBuZXdWYWw7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IH0KIApAQCAtMjI2LDcgKzIyNiw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBpdGVyYXRv
ciBpdCA9IGNvbGxlY3Rpb24uYmVnaW4oKTsKICAgICAgICAgaXRlcmF0b3IgZW5kID0gY29sbGVj
dGlvbi5lbmQoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaXQgIT0gZW5kOyArK2l0
LCArK2kpCi0gICAgICAgICAgICB2ZWN0b3JbaV0gPSAoKml0KS5maXJzdDsKKyAgICAgICAgICAg
IHZlY3RvcltpXSA9ICgqaXQpLmtleTsKICAgICB9CiAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvSGFzaEl0ZXJhdG9ycy5oIGIvU291cmNlL1dURi93dGYvSGFzaEl0ZXJhdG9ycy5oCmlu
ZGV4IDYzOWZmNzI1MGExZWYwZmIzZjgyNGRjOTE2ODg0OTZiODliNjVlMTcuLjNhODQxOGFhZGVm
NzgzYjlhYmMwMzRhOWVlMGE0YWU3YWI4YjE2YTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3Rm
L0hhc2hJdGVyYXRvcnMuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoSXRlcmF0b3JzLmgKQEAg
LTkxLDcgKzkxLDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgcHVibGljOgogICAgICAgICBIYXNo
VGFibGVDb25zdEtleXNJdGVyYXRvcihjb25zdCBDb25zdEl0ZXJhdG9yJiBpbXBsKSA6IG1faW1w
bChpbXBsKSB7fQogICAgICAgICAKLSAgICAgICAgY29uc3QgS2V5VHlwZSogZ2V0KCkgY29uc3Qg
eyByZXR1cm4gJihtX2ltcGwuZ2V0KCktPmZpcnN0KTsgfQorICAgICAgICBjb25zdCBLZXlUeXBl
KiBnZXQoKSBjb25zdCB7IHJldHVybiAmKG1faW1wbC5nZXQoKS0+a2V5KTsgfQogICAgICAgICBj
b25zdCBLZXlUeXBlJiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqZ2V0KCk7IH0KICAgICAg
ICAgY29uc3QgS2V5VHlwZSogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIGdldCgpOyB9CiAK
QEAgLTEwOCw3ICsxMDgsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICBwdWJsaWM6CiAgICAgICAg
IEhhc2hUYWJsZUNvbnN0VmFsdWVzSXRlcmF0b3IoY29uc3QgQ29uc3RJdGVyYXRvciYgaW1wbCkg
OiBtX2ltcGwoaW1wbCkge30KICAgICAgICAgCi0gICAgICAgIGNvbnN0IE1hcHBlZFR5cGUqIGdl
dCgpIGNvbnN0IHsgcmV0dXJuICYobV9pbXBsLmdldCgpLT5zZWNvbmQpOyB9CisgICAgICAgIGNv
bnN0IE1hcHBlZFR5cGUqIGdldCgpIGNvbnN0IHsgcmV0dXJuICYobV9pbXBsLmdldCgpLT52YWx1
ZSk7IH0KICAgICAgICAgY29uc3QgTWFwcGVkVHlwZSYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1
cm4gKmdldCgpOyB9CiAgICAgICAgIGNvbnN0IE1hcHBlZFR5cGUqIG9wZXJhdG9yLT4oKSBjb25z
dCB7IHJldHVybiBnZXQoKTsgfQogCkBAIC0xNDksNyArMTQ5LDcgQEAgbmFtZXNwYWNlIFdURiB7
CiAgICAgcHVibGljOgogICAgICAgICBIYXNoVGFibGVWYWx1ZXNJdGVyYXRvcihjb25zdCBJdGVy
YXRvciYgaW1wbCkgOiBtX2ltcGwoaW1wbCkge30KICAgICAgICAgCi0gICAgICAgIE1hcHBlZFR5
cGUqIGdldCgpIGNvbnN0IHsgcmV0dXJuICYobV9pbXBsLmdldCgpLT5zZWNvbmQpOyB9CisgICAg
ICAgIE1hcHBlZFR5cGUqIGdldCgpIGNvbnN0IHsgcmV0dXJuICYobV9pbXBsLmdldCgpLT52YWx1
ZSk7IH0KICAgICAgICAgTWFwcGVkVHlwZSYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKmdl
dCgpOyB9CiAgICAgICAgIE1hcHBlZFR5cGUqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBn
ZXQoKTsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoTWFwLmggYi9Tb3VyY2Uv
V1RGL3d0Zi9IYXNoTWFwLmgKaW5kZXggOTAxMDQ3NGM4MjU1NjNlZjg0MWI5Njg3ZmVmZjQ5NGFh
NjU1YjRlOC4uMTBlZTQyNWRhOTU5NmJhYWRmMzRlNTc4ZWY1YWJlNTcwZjlhZTBkNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dURi93dGYvSGFzaE1hcC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0hhc2hN
YXAuaApAQCAtMzUsNyArMzUsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICB9OwogCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEtleVZhbHVlUGFpcktleUV4dHJhY3RvciB7Ci0gICAg
ICAgIHN0YXRpYyBjb25zdCB0eXBlbmFtZSBUOjpLZXlUeXBlJiBleHRyYWN0KGNvbnN0IFQmIHAp
IHsgcmV0dXJuIHAuZmlyc3Q7IH0KKyAgICAgICAgc3RhdGljIGNvbnN0IHR5cGVuYW1lIFQ6Oktl
eVR5cGUmIGV4dHJhY3QoY29uc3QgVCYgcCkgeyByZXR1cm4gcC5rZXk7IH0KICAgICB9OwogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1l
IEhhc2hBcmcgPSB0eXBlbmFtZSBEZWZhdWx0SGFzaDxLZXlBcmc+OjpIYXNoLApAQCAtMjExLDcg
KzIxMSw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNJ
c0VtcHR5VmFsdWVGdW5jdGlvbiA9IHRydWU7CiAgICAgICAgIHN0YXRpYyBib29sIGlzRW1wdHlW
YWx1ZShjb25zdCB0eXBlbmFtZSBLZXlWYWx1ZVBhaXJIYXNoVHJhaXRzPEtleVRyYWl0cywgTWFw
cGVkVHJhaXRzPjo6VHJhaXRUeXBlJiB2YWx1ZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIGlzSGFzaFRyYWl0c0VtcHR5VmFsdWU8S2V5VHJhaXRzPih2YWx1ZS5maXJzdCk7CisgICAg
ICAgICAgICByZXR1cm4gaXNIYXNoVHJhaXRzRW1wdHlWYWx1ZTxLZXlUcmFpdHM+KHZhbHVlLmtl
eSk7CiAgICAgICAgIH0KICAgICB9OwogCkBAIC0yMjEsOCArMjIxLDggQEAgbmFtZXNwYWNlIFdU
RiB7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IHN0YXRpYyBib29s
IGVxdWFsKGNvbnN0IFQmIGEsIGNvbnN0IFUmIGIpIHsgcmV0dXJuIEhhc2hGdW5jdGlvbnM6OmVx
dWFsKGEsIGIpOyB9CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5
cGVuYW1lIFY+IHN0YXRpYyB2b2lkIHRyYW5zbGF0ZShUJiBsb2NhdGlvbiwgY29uc3QgVSYga2V5
LCBjb25zdCBWJiBtYXBwZWQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGxvY2F0aW9uLmZpcnN0
ID0ga2V5OwotICAgICAgICAgICAgVmFsdWVUcmFpdHM6OlZhbHVlVHJhaXRzOjpzdG9yZShtYXBw
ZWQsIGxvY2F0aW9uLnNlY29uZCk7CisgICAgICAgICAgICBsb2NhdGlvbi5rZXkgPSBrZXk7Cisg
ICAgICAgICAgICBWYWx1ZVRyYWl0czo6VmFsdWVUcmFpdHM6OnN0b3JlKG1hcHBlZCwgbG9jYXRp
b24udmFsdWUpOwogICAgICAgICB9CiAgICAgfTsKIApAQCAtMjMyLDggKzIzMiw4IEBAIG5hbWVz
cGFjZSBXVEYgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBzdGF0
aWMgYm9vbCBlcXVhbChjb25zdCBUJiBhLCBjb25zdCBVJiBiKSB7IHJldHVybiBUcmFuc2xhdG9y
OjplcXVhbChhLCBiKTsgfQogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
LCB0eXBlbmFtZSBWPiBzdGF0aWMgdm9pZCB0cmFuc2xhdGUoVCYgbG9jYXRpb24sIGNvbnN0IFUm
IGtleSwgY29uc3QgViYgbWFwcGVkLCB1bnNpZ25lZCBoYXNoQ29kZSkKICAgICAgICAgewotICAg
ICAgICAgICAgVHJhbnNsYXRvcjo6dHJhbnNsYXRlKGxvY2F0aW9uLmZpcnN0LCBrZXksIGhhc2hD
b2RlKTsKLSAgICAgICAgICAgIFZhbHVlVHJhaXRzOjpWYWx1ZVRyYWl0czo6c3RvcmUobWFwcGVk
LCBsb2NhdGlvbi5zZWNvbmQpOworICAgICAgICAgICAgVHJhbnNsYXRvcjo6dHJhbnNsYXRlKGxv
Y2F0aW9uLmtleSwga2V5LCBoYXNoQ29kZSk7CisgICAgICAgICAgICBWYWx1ZVRyYWl0czo6VmFs
dWVUcmFpdHM6OnN0b3JlKG1hcHBlZCwgbG9jYXRpb24udmFsdWUpOwogICAgICAgICB9CiAgICAg
fTsKIApAQCAtMzQxLDcgKzM0MSw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBBZGRSZXN1
bHQgcmVzdWx0ID0gaW5saW5lQWRkKGtleSwgbWFwcGVkKTsKICAgICAgICAgaWYgKCFyZXN1bHQu
aXNOZXdFbnRyeSkgewogICAgICAgICAgICAgLy8gVGhlIGlubGluZUFkZCBjYWxsIGFib3ZlIGZv
dW5kIGFuIGV4aXN0aW5nIGhhc2ggdGFibGUgZW50cnk7IHdlIG5lZWQgdG8gc2V0IHRoZSBtYXBw
ZWQgdmFsdWUuCi0gICAgICAgICAgICBNYXBwZWRUcmFpdHM6OnN0b3JlKG1hcHBlZCwgcmVzdWx0
Lml0ZXJhdG9yLT5zZWNvbmQpOworICAgICAgICAgICAgTWFwcGVkVHJhaXRzOjpzdG9yZShtYXBw
ZWQsIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICAgfQpAQCAtMzY4LDcgKzM2OCw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAg
ICBWYWx1ZVR5cGUqIGVudHJ5ID0gY29uc3RfY2FzdDxIYXNoVGFibGVUeXBlJj4obV9pbXBsKS5s
b29rdXAoa2V5KTsKICAgICAgICAgaWYgKCFlbnRyeSkKICAgICAgICAgICAgIHJldHVybiBNYXBw
ZWRUcmFpdHM6OnBlZWsoTWFwcGVkVHJhaXRzOjplbXB0eVZhbHVlKCkpOwotICAgICAgICByZXR1
cm4gTWFwcGVkVHJhaXRzOjpwZWVrKGVudHJ5LT5zZWNvbmQpOworICAgICAgICByZXR1cm4gTWFw
cGVkVHJhaXRzOjpwZWVrKGVudHJ5LT52YWx1ZSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4K
QEAgLTM5OSw3ICszOTksNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgaXRlcmF0b3IgaXQg
PSBmaW5kKGtleSk7CiAgICAgICAgIGlmIChpdCA9PSBlbmQoKSkKICAgICAgICAgICAgIHJldHVy
biBNYXBwZWRUcmFpdHM6OnBhc3NPdXQoTWFwcGVkVHJhaXRzOjplbXB0eVZhbHVlKCkpOwotICAg
ICAgICBNYXBwZWRQYXNzT3V0VHlwZSByZXN1bHQgPSBNYXBwZWRUcmFpdHM6OnBhc3NPdXQoaXQt
PnNlY29uZCk7CisgICAgICAgIE1hcHBlZFBhc3NPdXRUeXBlIHJlc3VsdCA9IE1hcHBlZFRyYWl0
czo6cGFzc091dChpdC0+dmFsdWUpOwogICAgICAgICByZW1vdmUoaXQpOwogICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgIH0KQEAgLTQyMSw4ICs0MjEsOCBAQCBuYW1lc3BhY2UgV1RGIHsKICAg
ICAgICAgY29uc3RfaXRlcmF0b3IgZW5kID0gYS5lbmQoKTsKICAgICAgICAgY29uc3RfaXRlcmF0
b3Igbm90Rm91bmQgPSBiLmVuZCgpOwogICAgICAgICBmb3IgKGNvbnN0X2l0ZXJhdG9yIGl0ID0g
YS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGNvbnN0X2l0ZXJhdG9y
IGJQb3MgPSBiLmZpbmQoaXQtPmZpcnN0KTsKLSAgICAgICAgICAgIGlmIChiUG9zID09IG5vdEZv
dW5kIHx8IGl0LT5zZWNvbmQgIT0gYlBvcy0+c2Vjb25kKQorICAgICAgICAgICAgY29uc3RfaXRl
cmF0b3IgYlBvcyA9IGIuZmluZChpdC0+a2V5KTsKKyAgICAgICAgICAgIGlmIChiUG9zID09IG5v
dEZvdW5kIHx8IGl0LT52YWx1ZSAhPSBiUG9zLT52YWx1ZSkKICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIH0KIApAQCAtNDM1LDM0ICs0MzUsMjIgQEAgbmFtZXNwYWNlIFdU
RiB7CiAgICAgICAgIHJldHVybiAhKGEgPT0gYik7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgSGFzaFRhYmxlVHlwZT4KLSAgICB2b2lkIGRlbGV0ZUFsbFBhaXJTZWNvbmRzKEhhc2hU
YWJsZVR5cGUmIGNvbGxlY3Rpb24pCi0gICAgewotICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIEhh
c2hUYWJsZVR5cGU6OmNvbnN0X2l0ZXJhdG9yIGl0ZXJhdG9yOwotICAgICAgICBpdGVyYXRvciBl
bmQgPSBjb2xsZWN0aW9uLmVuZCgpOwotICAgICAgICBmb3IgKGl0ZXJhdG9yIGl0ID0gY29sbGVj
dGlvbi5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBkZWxldGUgaXQtPnNl
Y29uZDsKLSAgICB9Ci0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBl
bmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgogICAgIGlubGluZSB2b2lkIGRlbGV0ZUFs
bFZhbHVlcyhjb25zdCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+JiBjb2xsZWN0aW9uKQogICAgIHsK
LSAgICAgICAgZGVsZXRlQWxsUGFpclNlY29uZHMoY29sbGVjdGlvbik7Ci0gICAgfQotCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlVHlwZT4KLSAgICB2b2lkIGRlbGV0ZUFsbFBhaXJG
aXJzdHMoSGFzaFRhYmxlVHlwZSYgY29sbGVjdGlvbikKLSAgICB7Ci0gICAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgSGFzaFRhYmxlVHlwZTo6Y29uc3RfaXRlcmF0b3IgaXRlcmF0b3I7CisgICAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6Y29uc3RfaXRlcmF0b3Ig
aXRlcmF0b3I7CiAgICAgICAgIGl0ZXJhdG9yIGVuZCA9IGNvbGxlY3Rpb24uZW5kKCk7CiAgICAg
ICAgIGZvciAoaXRlcmF0b3IgaXQgPSBjb2xsZWN0aW9uLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkKLSAgICAgICAgICAgIGRlbGV0ZSBpdC0+Zmlyc3Q7CisgICAgICAgICAgICBkZWxldGUgaXQt
PnZhbHVlOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5
cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+CiAgICAgaW5saW5lIHZvaWQgZGVsZXRl
QWxsS2V5cyhjb25zdCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+JiBjb2xsZWN0aW9uKQogICAgIHsK
LSAgICAgICAgZGVsZXRlQWxsUGFpckZpcnN0cyhjb2xsZWN0aW9uKTsKKyAgICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojpjb25zdF9pdGVyYXRvciBpdGVyYXRv
cjsKKyAgICAgICAgaXRlcmF0b3IgZW5kID0gY29sbGVjdGlvbi5lbmQoKTsKKyAgICAgICAgZm9y
IChpdGVyYXRvciBpdCA9IGNvbGxlY3Rpb24uYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAg
ICAgICAgICAgZGVsZXRlIGl0LT5rZXk7CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5
cGVuYW1lIFk+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaCBiL1NvdXJj
ZS9XVEYvd3RmL0hhc2hUYWJsZS5oCmluZGV4IDFjZTNjNWNmNjg4ZWYwYTgxZTEwNjFiYzZjZTI2
MjBiZTNkOTgwMGUuLjE2ZmRkOWU4MWQyODNiNjllNjFkNDZiYTZmOTVmZDEyZTI0NjljNjYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L0hhc2hUYWJsZS5oCkBAIC0yODYsOCArMjg2LDggQEAgbmFtZXNwYWNlIFdURiB7CiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgdm9pZCBoYXNoVGFibGVTd2Fw
KEtleVZhbHVlUGFpcjxULCBVPiYgYSwgS2V5VmFsdWVQYWlyPFQsIFU+JiBiKQogICAgIHsKLSAg
ICAgICAgc3dhcChhLmZpcnN0LCBiLmZpcnN0KTsKLSAgICAgICAgc3dhcChhLnNlY29uZCwgYi5z
ZWNvbmQpOworICAgICAgICBzd2FwKGEua2V5LCBiLmtleSk7CisgICAgICAgIHN3YXAoYS52YWx1
ZSwgYi52YWx1ZSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgYm9vbCB1c2VT
d2FwPiBzdHJ1Y3QgTW92ZXI7CkBAIC0xMjQ2LDcgKzEyNDYsNyBAQCBuYW1lc3BhY2UgV1RGIHsK
ICAgICAgICAgICAgIEFTU0VSVChlbnRyeSA9PSBpdC5tX3Bvc2l0aW9uKTsKICAgICAgICAgICAg
ICsrY291bnQ7CiAKLSAgICAgICAgICAgIFZhbHVlQ2hlY2s8S2V5Pjo6Y2hlY2tDb25zaXN0ZW5j
eShpdC0+Zmlyc3QpOworICAgICAgICAgICAgVmFsdWVDaGVjazxLZXk+OjpjaGVja0NvbnNpc3Rl
bmN5KGl0LT5rZXkpOwogICAgICAgICB9CiAKICAgICAgICAgQVNTRVJUKGNvdW50ID09IG1fa2V5
Q291bnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvSGFzaFRyYWl0cy5oIGIvU291cmNl
L1dURi93dGYvSGFzaFRyYWl0cy5oCmluZGV4IGViZTc5NWViMWE4OTllMmM2MWVlNWRjMzY0NzM3
YjI5Yjg1NzBhMDkuLjczYmYyYmVhYTJlNWVmNGVmZWQ5ZGIwYzJkZWFmM2YxMTJlYjRhYWQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0hhc2hUcmFpdHMuaAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi9IYXNoVHJhaXRzLmgKQEAgLTE5MywyMSArMTkzLDIwIEBAIG5hbWVzcGFjZSBXVEYgewogICAg
ICAgICB9CiAKICAgICAgICAgS2V5VmFsdWVQYWlyKGNvbnN0IEtleVR5cGVBcmcmIGtleSwgY29u
c3QgVmFsdWVUeXBlQXJnJiB2YWx1ZSkKLSAgICAgICAgICAgIDogZmlyc3Qoa2V5KQotICAgICAg
ICAgICAgLCBzZWNvbmQodmFsdWUpCisgICAgICAgICAgICA6IGtleShrZXkpCisgICAgICAgICAg
ICAsIHZhbHVlKHZhbHVlKQogICAgICAgICB7CiAgICAgICAgIH0KIAogICAgICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgT3RoZXJLZXlUeXBlLCB0eXBlbmFtZSBPdGhlclZhbHVlVHlwZT4KICAgICAg
ICAgS2V5VmFsdWVQYWlyKGNvbnN0IEtleVZhbHVlUGFpcjxPdGhlcktleVR5cGUsIE90aGVyVmFs
dWVUeXBlPiYgb3RoZXIpCi0gICAgICAgICAgICA6IGZpcnN0KG90aGVyLmZpcnN0KQotICAgICAg
ICAgICAgLCBzZWNvbmQob3RoZXIuc2Vjb25kKQorICAgICAgICAgICAgOiBrZXkob3RoZXIua2V5
KQorICAgICAgICAgICAgLCB2YWx1ZShvdGhlci52YWx1ZSkKICAgICAgICAgewogICAgICAgICB9
CiAKLSAgICAgICAgLy8gVE9ETzogUmVuYW1lIHRoZXNlIHRvIGtleSBhbmQgdmFsdWUuIFNlZSBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI3ODQuCi0gICAgICAgIEtl
eVR5cGVBcmcgZmlyc3Q7Ci0gICAgICAgIFZhbHVlVHlwZUFyZyBzZWNvbmQ7CisgICAgICAgIEtl
eVR5cGVBcmcga2V5OworICAgICAgICBWYWx1ZVR5cGVBcmcgdmFsdWU7CiAgICAgfTsKIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgVmFsdWVUcmFpdHNBcmc+
CkBAIC0yMjQsOCArMjIzLDggQEAgbmFtZXNwYWNlIFdURiB7CiAKICAgICAgICAgc3RhdGljIGNv
bnN0IGludCBtaW5pbXVtVGFibGVTaXplID0gS2V5VHJhaXRzOjptaW5pbXVtVGFibGVTaXplOwog
Ci0gICAgICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShUcmFpdFR5cGUmIHNs
b3QpIHsgS2V5VHJhaXRzOjpjb25zdHJ1Y3REZWxldGVkVmFsdWUoc2xvdC5maXJzdCk7IH0KLSAg
ICAgICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUoY29uc3QgVHJhaXRUeXBlJiB2YWx1ZSkg
eyByZXR1cm4gS2V5VHJhaXRzOjppc0RlbGV0ZWRWYWx1ZSh2YWx1ZS5maXJzdCk7IH0KKyAgICAg
ICAgc3RhdGljIHZvaWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKFRyYWl0VHlwZSYgc2xvdCkgeyBL
ZXlUcmFpdHM6OmNvbnN0cnVjdERlbGV0ZWRWYWx1ZShzbG90LmtleSk7IH0KKyAgICAgICAgc3Rh
dGljIGJvb2wgaXNEZWxldGVkVmFsdWUoY29uc3QgVHJhaXRUeXBlJiB2YWx1ZSkgeyByZXR1cm4g
S2V5VHJhaXRzOjppc0RlbGV0ZWRWYWx1ZSh2YWx1ZS5rZXkpOyB9CiAgICAgfTsKIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWU+CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi9NZXRhQWxsb2NhdG9yLmNwcCBiL1NvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3Iu
Y3BwCmluZGV4IDllZmNmZjJlYjEzZjcyY2NiNTk3NzUxYzg0M2JiNDI5NTFmYzc0YTMuLjczYjM2
YWE0MjFmOGE5NTUwN2FhZDk2YTNhNGJhZjgyYWUxMWQ1M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
VEYvd3RmL01ldGFBbGxvY2F0b3IuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0
b3IuY3BwCkBAIC0zMDgsOSArMzA4LDkgQEAgdm9pZCBNZXRhQWxsb2NhdG9yOjphZGRGcmVlU3Bh
Y2Uodm9pZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRlcykKICAgICAgICAgLy8gV2UgaGF2ZSBz
b21ldGhpbmcgd2UgY2FuIGNvYWxlc2NlIHdpdGggb24gdGhlIGxlZnQuIFJlbW92ZSBpdCBmcm9t
IHRoZSB0cmVlLCBhbmQKICAgICAgICAgLy8gcmVtb3ZlIGl0cyBlbmQgZnJvbSB0aGUgZW5kIGFk
ZHJlc3MgbWFwLgogICAgICAgICAKLSAgICAgICAgQVNTRVJUKHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihsZWZ0TmVpZ2hib3ItPnNlY29uZC0+bV9z
dGFydCkgKyBsZWZ0TmVpZ2hib3ItPnNlY29uZC0+bV9zaXplSW5CeXRlcykgPT0gbGVmdE5laWdo
Ym9yLT5maXJzdCk7CisgICAgICAgIEFTU0VSVChyZWludGVycHJldF9jYXN0PHZvaWQqPihyZWlu
dGVycHJldF9jYXN0PHVpbnRwdHJfdD4obGVmdE5laWdoYm9yLT52YWx1ZS0+bV9zdGFydCkgKyBs
ZWZ0TmVpZ2hib3ItPnZhbHVlLT5tX3NpemVJbkJ5dGVzKSA9PSBsZWZ0TmVpZ2hib3ItPmtleSk7
CiAgICAgICAgIAotICAgICAgICBGcmVlU3BhY2VOb2RlKiBsZWZ0Tm9kZSA9IGxlZnROZWlnaGJv
ci0+c2Vjb25kOworICAgICAgICBGcmVlU3BhY2VOb2RlKiBsZWZ0Tm9kZSA9IGxlZnROZWlnaGJv
ci0+dmFsdWU7CiAgICAgICAgIAogICAgICAgICB2b2lkKiBsZWZ0U3RhcnQgPSBsZWZ0Tm9kZS0+
bV9zdGFydDsKICAgICAgICAgc2l6ZV90IGxlZnRTaXplID0gbGVmdE5vZGUtPm1fc2l6ZUluQnl0
ZXM7CkBAIC0zMjYsMTAgKzMyNiwxMCBAQCB2b2lkIE1ldGFBbGxvY2F0b3I6OmFkZEZyZWVTcGFj
ZSh2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVzKQogICAgICAgICAgICAgLy8gRnJlZWlu
ZyBzb21ldGhpbmcgaW4gdGhlIG1pZGRsZSBvZiBmcmVlIGJsb2Nrcy4gQ29hbGVzY2UgYm90aCBs
ZWZ0IGFuZAogICAgICAgICAgICAgLy8gcmlnaHQsIHdoaWxzdCByZW1vdmluZyB0aGUgcmlnaHQg
bmVpZ2hib3IgZnJvbSB0aGUgbWFwcy4KICAgICAgICAgICAgIAotICAgICAgICAgICAgQVNTRVJU
KHJpZ2h0TmVpZ2hib3ItPnNlY29uZC0+bV9zdGFydCA9PSByaWdodE5laWdoYm9yLT5maXJzdCk7
CisgICAgICAgICAgICBBU1NFUlQocmlnaHROZWlnaGJvci0+dmFsdWUtPm1fc3RhcnQgPT0gcmln
aHROZWlnaGJvci0+a2V5KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgRnJlZVNwYWNlTm9k
ZSogcmlnaHROb2RlID0gcmlnaHROZWlnaGJvci0+c2Vjb25kOwotICAgICAgICAgICAgdm9pZCog
cmlnaHRTdGFydCA9IHJpZ2h0TmVpZ2hib3ItPmZpcnN0OworICAgICAgICAgICAgRnJlZVNwYWNl
Tm9kZSogcmlnaHROb2RlID0gcmlnaHROZWlnaGJvci0+dmFsdWU7CisgICAgICAgICAgICB2b2lk
KiByaWdodFN0YXJ0ID0gcmlnaHROZWlnaGJvci0+a2V5OwogICAgICAgICAgICAgc2l6ZV90IHJp
Z2h0U2l6ZSA9IHJpZ2h0Tm9kZS0+bV9zaXplSW5CeXRlczsKICAgICAgICAgICAgIHZvaWQqIHJp
Z2h0RW5kID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRy
X3Q+KHJpZ2h0U3RhcnQpICsgcmlnaHRTaXplKTsKICAgICAgICAgICAgIApAQCAtMzU2LDggKzM1
Niw4IEBAIHZvaWQgTWV0YUFsbG9jYXRvcjo6YWRkRnJlZVNwYWNlKHZvaWQqIHN0YXJ0LCBzaXpl
X3Qgc2l6ZUluQnl0ZXMpCiAgICAgICAgIC8vIENhbm5vdCBjb2FsZXNjZSB3aXRoIGxlZnQ7IHRy
eSB0byBzZWUgaWYgd2UgY2FuIGNvYWxlc2NlIHdpdGggcmlnaHQuCiAgICAgICAgIAogICAgICAg
ICBpZiAocmlnaHROZWlnaGJvciAhPSBtX2ZyZWVTcGFjZVN0YXJ0QWRkcmVzc01hcC5lbmQoKSkg
ewotICAgICAgICAgICAgRnJlZVNwYWNlTm9kZSogcmlnaHROb2RlID0gcmlnaHROZWlnaGJvci0+
c2Vjb25kOwotICAgICAgICAgICAgdm9pZCogcmlnaHRTdGFydCA9IHJpZ2h0TmVpZ2hib3ItPmZp
cnN0OworICAgICAgICAgICAgRnJlZVNwYWNlTm9kZSogcmlnaHROb2RlID0gcmlnaHROZWlnaGJv
ci0+dmFsdWU7CisgICAgICAgICAgICB2b2lkKiByaWdodFN0YXJ0ID0gcmlnaHROZWlnaGJvci0+
a2V5OwogICAgICAgICAgICAgc2l6ZV90IHJpZ2h0U2l6ZSA9IHJpZ2h0Tm9kZS0+bV9zaXplSW5C
eXRlczsKICAgICAgICAgICAgIHZvaWQqIHJpZ2h0RW5kID0gcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHJpZ2h0U3RhcnQpICsgcmlnaHRTaXplKTsK
ICAgICAgICAgICAgIApAQCAtNDAzLDcgKzQwMyw3IEBAIHZvaWQgTWV0YUFsbG9jYXRvcjo6aW5j
cmVtZW50UGFnZU9jY3VwYW5jeSh2b2lkKiBhZGRyZXNzLCBzaXplX3Qgc2l6ZUluQnl0ZXMpCiAg
ICAgICAgICAgICBtX2J5dGVzQ29tbWl0dGVkICs9IG1fcGFnZVNpemU7CiAgICAgICAgICAgICBu
b3RpZnlOZWVkUGFnZShyZWludGVycHJldF9jYXN0PHZvaWQqPihwYWdlIDw8IG1fbG9nUGFnZVNp
emUpKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBpdGVyLT5zZWNvbmQrKzsKKyAgICAg
ICAgICAgIGl0ZXItPnZhbHVlKys7CiAgICAgfQogfQogCkBAIC00MTUsNyArNDE1LDcgQEAgdm9p
ZCBNZXRhQWxsb2NhdG9yOjpkZWNyZW1lbnRQYWdlT2NjdXBhbmN5KHZvaWQqIGFkZHJlc3MsIHNp
emVfdCBzaXplSW5CeXRlcykKICAgICBmb3IgKHVpbnRwdHJfdCBwYWdlID0gZmlyc3RQYWdlOyBw
YWdlIDw9IGxhc3RQYWdlOyArK3BhZ2UpIHsKICAgICAgICAgSGFzaE1hcDx1aW50cHRyX3QsIHNp
emVfdD46Oml0ZXJhdG9yIGl0ZXIgPSBtX3BhZ2VPY2N1cGFuY3lNYXAuZmluZChwYWdlKTsKICAg
ICAgICAgQVNTRVJUKGl0ZXIgIT0gbV9wYWdlT2NjdXBhbmN5TWFwLmVuZCgpKTsKLSAgICAgICAg
aWYgKCEtLShpdGVyLT5zZWNvbmQpKSB7CisgICAgICAgIGlmICghLS0oaXRlci0+dmFsdWUpKSB7
CiAgICAgICAgICAgICBtX3BhZ2VPY2N1cGFuY3lNYXAucmVtb3ZlKGl0ZXIpOwogICAgICAgICAg
ICAgbV9ieXRlc0NvbW1pdHRlZCAtPSBtX3BhZ2VTaXplOwogICAgICAgICAgICAgbm90aWZ5UGFn
ZUlzRnJlZShyZWludGVycHJldF9jYXN0PHZvaWQqPihwYWdlIDw8IG1fbG9nUGFnZVNpemUpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1JlZkNvdW50ZWRMZWFrQ291bnRlci5jcHAgYi9T
b3VyY2UvV1RGL3d0Zi9SZWZDb3VudGVkTGVha0NvdW50ZXIuY3BwCmluZGV4IDY3MGYyYTBjZWM1
OTljNmQ0ZjMxNjQ0ZWJlYjU4NzQxNWVmNDMyMWEuLjRhMDQ1MjgyNDg5ZmU5NWExN2UyMzkxOTc3
M2QzN2NiMjQ0MTBiZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1JlZkNvdW50ZWRMZWFr
Q291bnRlci5jcHAKKysrIGIvU291cmNlL1dURi93dGYvUmVmQ291bnRlZExlYWtDb3VudGVyLmNw
cApAQCAtNzEsNyArNzEsNyBAQCBSZWZDb3VudGVkTGVha0NvdW50ZXI6On5SZWZDb3VudGVkTGVh
a0NvdW50ZXIoKQogICAgICAgICAgICAgTE9HKFJlZkNvdW50ZWRMZWFrcywgIkxFQUs6ICV1ICVz
IiwgbV9jb3VudCwgbV9kZXNjcmlwdGlvbik7CiAgICAgICAgIGVsc2UgaWYgKCFsb2dnZWRTdXBw
cmVzc2lvblJlYXNvbikgewogICAgICAgICAgICAgLy8gVGhpcyBsb2dzIG9ubHkgb25lIHJlYXNv
bi4gTGF0ZXIgd2UgY291bGQgY2hhbmdlIGl0IHNvIHdlIGxvZyBhbGwgdGhlIHJlYXNvbnMuCi0g
ICAgICAgICAgICBMT0coUmVmQ291bnRlZExlYWtzLCAiTm8gbGVhayBjaGVja2luZyBkb25lOiAl
cyIsIGxlYWtNZXNzYWdlU3VwcHJlc3Npb25SZWFzb25zLT5iZWdpbigpLT5maXJzdCk7CisgICAg
ICAgICAgICBMT0coUmVmQ291bnRlZExlYWtzLCAiTm8gbGVhayBjaGVja2luZyBkb25lOiAlcyIs
IGxlYWtNZXNzYWdlU3VwcHJlc3Npb25SZWFzb25zLT5iZWdpbigpLT5rZXkpOwogICAgICAgICAg
ICAgbG9nZ2VkU3VwcHJlc3Npb25SZWFzb24gPSB0cnVlOwogICAgICAgICB9CiAgICAgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvUmVmUHRySGFzaE1hcC5oIGIvU291cmNlL1dURi93dGYv
UmVmUHRySGFzaE1hcC5oCmluZGV4IDVmYWU5MGU4Y2Q0NzExMjllODlkY2M4ZTdhZTY2MzhhZGEx
NTRkMzEuLjk1NDE4MzdlMmE2ZjI5YjlmMDZjM2M5NTYyYTEzMzQ2YjAxZDRjZTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XVEYvd3RmL1JlZlB0ckhhc2hNYXAuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9S
ZWZQdHJIYXNoTWFwLmgKQEAgLTIxNiw3ICsyMTYsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAg
ICAgQWRkUmVzdWx0IHJlc3VsdCA9IGlubGluZUFkZChrZXksIG1hcHBlZCk7CiAgICAgICAgIGlm
ICghcmVzdWx0LmlzTmV3RW50cnkpIHsKICAgICAgICAgICAgIC8vIFRoZSBpbmxpbmVBZGQgY2Fs
bCBhYm92ZSBmb3VuZCBhbiBleGlzdGluZyBoYXNoIHRhYmxlIGVudHJ5OyB3ZSBuZWVkIHRvIHNl
dCB0aGUgbWFwcGVkIHZhbHVlLgotICAgICAgICAgICAgTWFwcGVkVHJhaXRzOjpzdG9yZShtYXBw
ZWQsIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKKyAgICAgICAgICAgIE1hcHBlZFRyYWl0czo6
c3RvcmUobWFwcGVkLCByZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKICAgICAgICAgfQogICAgICAg
ICByZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTIyOCw3ICsyMjgsNyBAQCBuYW1lc3BhY2UgV1RG
IHsKICAgICAgICAgQWRkUmVzdWx0IHJlc3VsdCA9IGlubGluZUFkZChrZXksIG1hcHBlZCk7CiAg
ICAgICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpIHsKICAgICAgICAgICAgIC8vIFRoZSBpbmxp
bmVBZGQgY2FsbCBhYm92ZSBmb3VuZCBhbiBleGlzdGluZyBoYXNoIHRhYmxlIGVudHJ5OyB3ZSBu
ZWVkIHRvIHNldCB0aGUgbWFwcGVkIHZhbHVlLgotICAgICAgICAgICAgTWFwcGVkVHJhaXRzOjpz
dG9yZShtYXBwZWQsIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKKyAgICAgICAgICAgIE1hcHBl
ZFRyYWl0czo6c3RvcmUobWFwcGVkLCByZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKICAgICAgICAg
fQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTI1NCw3ICsyNTQsNyBAQCBuYW1l
c3BhY2UgV1RGIHsKICAgICAgICAgVmFsdWVUeXBlKiBlbnRyeSA9IGNvbnN0X2Nhc3Q8SGFzaFRh
YmxlVHlwZSY+KG1faW1wbCkubG9va3VwKGtleSk7CiAgICAgICAgIGlmICghZW50cnkpCiAgICAg
ICAgICAgICByZXR1cm4gTWFwcGVkVHJhaXRzOjpwZWVrKE1hcHBlZFRyYWl0czo6ZW1wdHlWYWx1
ZSgpKTsKLSAgICAgICAgcmV0dXJuIE1hcHBlZFRyYWl0czo6cGVlayhlbnRyeS0+c2Vjb25kKTsK
KyAgICAgICAgcmV0dXJuIE1hcHBlZFRyYWl0czo6cGVlayhlbnRyeS0+dmFsdWUpOwogICAgIH0K
IAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVu
YW1lIFcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0cz4KQEAgLTI2NCw3ICsyNjQsNyBAQCBuYW1lc3Bh
Y2UgV1RGIHsKICAgICAgICAgVmFsdWVUeXBlKiBlbnRyeSA9IGNvbnN0X2Nhc3Q8SGFzaFRhYmxl
VHlwZSY+KG1faW1wbCkudGVtcGxhdGUgbG9va3VwPFRyYW5zbGF0b3I+KGtleSk7CiAgICAgICAg
IGlmICghZW50cnkpCiAgICAgICAgICAgICByZXR1cm4gTWFwcGVkVHJhaXRzOjpwZWVrKE1hcHBl
ZFRyYWl0czo6ZW1wdHlWYWx1ZSgpKTsKLSAgICAgICAgcmV0dXJuIE1hcHBlZFRyYWl0czo6cGVl
ayhlbnRyeS0+c2Vjb25kKTsKKyAgICAgICAgcmV0dXJuIE1hcHBlZFRyYWl0czo6cGVlayhlbnRy
eS0+dmFsdWUpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUs
IHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0cz4KQEAgLTMwOCw3
ICszMDgsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgaXRlcmF0b3IgaXQgPSBmaW5kKGtl
eSk7CiAgICAgICAgIGlmIChpdCA9PSBlbmQoKSkKICAgICAgICAgICAgIHJldHVybiBNYXBwZWRU
cmFpdHM6OnBhc3NPdXQoTWFwcGVkVHJhaXRzOjplbXB0eVZhbHVlKCkpOwotICAgICAgICBNYXBw
ZWRQYXNzT3V0VHlwZSByZXN1bHQgPSBNYXBwZWRUcmFpdHM6OnBhc3NPdXQoaXQtPnNlY29uZCk7
CisgICAgICAgIE1hcHBlZFBhc3NPdXRUeXBlIHJlc3VsdCA9IE1hcHBlZFRyYWl0czo6cGFzc091
dChpdC0+dmFsdWUpOwogICAgICAgICByZW1vdmUoaXQpOwogICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgIH0KQEAgLTMyMCw3ICszMjAsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgaXRl
cmF0b3IgaXQgPSBmaW5kKGtleSk7CiAgICAgICAgIGlmIChpdCA9PSBlbmQoKSkKICAgICAgICAg
ICAgIHJldHVybiBNYXBwZWRUcmFpdHM6OnBhc3NPdXQoTWFwcGVkVHJhaXRzOjplbXB0eVZhbHVl
KCkpOwotICAgICAgICBNYXBwZWRQYXNzT3V0VHlwZSByZXN1bHQgPSBNYXBwZWRUcmFpdHM6OnBh
c3NPdXQoaXQtPnNlY29uZCk7CisgICAgICAgIE1hcHBlZFBhc3NPdXRUeXBlIHJlc3VsdCA9IE1h
cHBlZFRyYWl0czo6cGFzc091dChpdC0+dmFsdWUpOwogICAgICAgICByZW1vdmUoaXQpOwogICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1Nw
ZWN0cnVtLmggYi9Tb3VyY2UvV1RGL3d0Zi9TcGVjdHJ1bS5oCmluZGV4IDVlN2E0ODRjZDg3NjZi
Y2FmMjJjYTRjOTNkZGNlOTcwZGQyYmEyMTMuLjNlNmZhNGE2MzNmYWQ0MmRlYjRkYzQ4MzMyNTky
MzQxZTg0YjNhMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1NwZWN0cnVtLmgKKysrIGIv
U291cmNlL1dURi93dGYvU3BlY3RydW0uaApAQCAtNDQsNyArNDQsNyBAQCBwdWJsaWM6CiAgICAg
ewogICAgICAgICB0eXBlbmFtZSBIYXNoTWFwPFQsIHVuc2lnbmVkIGxvbmc+OjpBZGRSZXN1bHQg
cmVzdWx0ID0gbV9tYXAuYWRkKGtleSwgY291bnQpOwogICAgICAgICBpZiAoIXJlc3VsdC5pc05l
d0VudHJ5KQotICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgKz0gY291bnQ7Cisg
ICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlICs9IGNvdW50OwogICAgIH0KICAgICAK
ICAgICB1bnNpZ25lZCBsb25nIGdldChjb25zdCBUJiBrZXkpIGNvbnN0CkBAIC01Miw3ICs1Miw3
IEBAIHB1YmxpYzoKICAgICAgICAgY29uc3RfaXRlcmF0b3IgaXRlciA9IG1fbWFwLmZpbmQoa2V5
KTsKICAgICAgICAgaWYgKGl0ZXIgPT0gbV9tYXAuZW5kKCkpCiAgICAgICAgICAgICByZXR1cm4g
MDsKLSAgICAgICAgcmV0dXJuIGl0ZXItPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGl0ZXItPnZh
bHVlOwogICAgIH0KICAgICAKICAgICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIG1fbWFwLmJl
Z2luKCk7IH0KQEAgLTg4LDcgKzg4LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgVmVjdG9y
PEtleUFuZENvdW50PiBsaXN0OwogICAgICAgICBmb3IgKGNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBi
ZWdpbigpOyBpdGVyICE9IGVuZCgpOyArK2l0ZXIpCi0gICAgICAgICAgICBsaXN0LmFwcGVuZChL
ZXlBbmRDb3VudChpdGVyLT5maXJzdCwgaXRlci0+c2Vjb25kKSk7CisgICAgICAgICAgICBsaXN0
LmFwcGVuZChLZXlBbmRDb3VudChpdGVyLT5rZXksIGl0ZXItPnZhbHVlKSk7CiAgICAgICAgIAog
ICAgICAgICBzdGQ6OnNvcnQobGlzdC5iZWdpbigpLCBsaXN0LmVuZCgpKTsKICAgICAgICAgcmV0
dXJuIGxpc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdQdGhyZWFkcy5j
cHAgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHAKaW5kZXggMjI2ZWNiZDQ4
YzAyOTg3OWQxMWM5NTIzZDUwNTM0NGU1NjgwZjg1OS4uZGRjMzNiNGFjZjkyYTVjNjQ3N2ZiMjMz
ODYyMjhkY2VhMTcwODMyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nUHRo
cmVhZHMuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcApAQCAt
MTUwLDggKzE1MCw4IEBAIHN0YXRpYyBUaHJlYWRJZGVudGlmaWVyIGlkZW50aWZpZXJCeVB0aHJl
YWRIYW5kbGUoY29uc3QgcHRocmVhZF90JiBwdGhyZWFkSGFuZGxlCiAKICAgICBUaHJlYWRNYXA6
Oml0ZXJhdG9yIGkgPSB0aHJlYWRNYXAoKS5iZWdpbigpOwogICAgIGZvciAoOyBpICE9IHRocmVh
ZE1hcCgpLmVuZCgpOyArK2kpIHsKLSAgICAgICAgaWYgKHB0aHJlYWRfZXF1YWwoaS0+c2Vjb25k
LT5wdGhyZWFkSGFuZGxlKCksIHB0aHJlYWRIYW5kbGUpICYmICFpLT5zZWNvbmQtPmhhc0V4aXRl
ZCgpKQotICAgICAgICAgICAgcmV0dXJuIGktPmZpcnN0OworICAgICAgICBpZiAocHRocmVhZF9l
cXVhbChpLT52YWx1ZS0+cHRocmVhZEhhbmRsZSgpLCBwdGhyZWFkSGFuZGxlKSAmJiAhaS0+dmFs
dWUtPmhhc0V4aXRlZCgpKQorICAgICAgICAgICAgcmV0dXJuIGktPmtleTsKICAgICB9CiAKICAg
ICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRp
b24vR2VvbG9jYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9H
ZW9sb2NhdGlvbi5jcHAKaW5kZXggNTdjYWYzMTUyYWNjODlkNjk3YWE4ZjY0NWNjOGYwMTM1OWJj
YjE1Mi4uYTNlZjQwMjZkZDA5OWFhYzcxMDY0NjQ5NGJkY2Q1Yjk2ODU1ZGEzZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlvbi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlvbi5jcHAKQEAg
LTE5Miw3ICsxOTIsNyBAQCBHZW9sb2NhdGlvbjo6R2VvTm90aWZpZXIqIEdlb2xvY2F0aW9uOjpX
YXRjaGVyczo6ZmluZChpbnQgaWQpCiAgICAgSWRUb05vdGlmaWVyTWFwOjppdGVyYXRvciBpdGVy
ID0gbV9pZFRvTm90aWZpZXJNYXAuZmluZChpZCk7CiAgICAgaWYgKGl0ZXIgPT0gbV9pZFRvTm90
aWZpZXJNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBpdGVyLT5zZWNv
bmQuZ2V0KCk7CisgICAgcmV0dXJuIGl0ZXItPnZhbHVlLmdldCgpOwogfQogCiB2b2lkIEdlb2xv
Y2F0aW9uOjpXYXRjaGVyczo6cmVtb3ZlKGludCBpZCkKQEAgLTIwMSw3ICsyMDEsNyBAQCB2b2lk
IEdlb2xvY2F0aW9uOjpXYXRjaGVyczo6cmVtb3ZlKGludCBpZCkKICAgICBJZFRvTm90aWZpZXJN
YXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2lkVG9Ob3RpZmllck1hcC5maW5kKGlkKTsKICAgICBpZiAo
aXRlciA9PSBtX2lkVG9Ob3RpZmllck1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIG1f
bm90aWZpZXJUb0lkTWFwLnJlbW92ZShpdGVyLT5zZWNvbmQpOworICAgIG1fbm90aWZpZXJUb0lk
TWFwLnJlbW92ZShpdGVyLT52YWx1ZSk7CiAgICAgbV9pZFRvTm90aWZpZXJNYXAucmVtb3ZlKGl0
ZXIpOwogfQogCkBAIC0yMTAsNyArMjEwLDcgQEAgdm9pZCBHZW9sb2NhdGlvbjo6V2F0Y2hlcnM6
OnJlbW92ZShHZW9Ob3RpZmllciogbm90aWZpZXIpCiAgICAgTm90aWZpZXJUb0lkTWFwOjppdGVy
YXRvciBpdGVyID0gbV9ub3RpZmllclRvSWRNYXAuZmluZChub3RpZmllcik7CiAgICAgaWYgKGl0
ZXIgPT0gbV9ub3RpZmllclRvSWRNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBtX2lk
VG9Ob3RpZmllck1hcC5yZW1vdmUoaXRlci0+c2Vjb25kKTsKKyAgICBtX2lkVG9Ob3RpZmllck1h
cC5yZW1vdmUoaXRlci0+dmFsdWUpOwogICAgIG1fbm90aWZpZXJUb0lkTWFwLnJlbW92ZShpdGVy
KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
RGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJh
c2UuY3BwCmluZGV4IGFhOTNlNmE4MmM3NTQ4Yzk4YjE5OTQyNWFhMDBiMmNlYzM5ZTg4OTMuLjgx
MWNmNGEyZjY5NzdmODMyYWYzMWE4YzIwNzAyNjkxOTcwNmJiMTIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAKQEAgLTEwOCw3ICsxMDgs
NyBAQCBQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IElEQkRhdGFiYXNlOjpvYmplY3RTdG9yZU5h
bWVzKCkgY29uc3QKIHsKICAgICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4gb2JqZWN0U3RvcmVOYW1l
cyA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOwogICAgIGZvciAoSURCRGF0YWJhc2VNZXRhZGF0
YTo6T2JqZWN0U3RvcmVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9tZXRhZGF0YS5vYmplY3RT
dG9yZXMuYmVnaW4oKTsgaXQgIT0gbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuZW5kKCk7ICsraXQp
Ci0gICAgICAgIG9iamVjdFN0b3JlTmFtZXMtPmFwcGVuZChpdC0+Zmlyc3QpOworICAgICAgICBv
YmplY3RTdG9yZU5hbWVzLT5hcHBlbmQoaXQtPmtleSk7CiAgICAgb2JqZWN0U3RvcmVOYW1lcy0+
c29ydCgpOwogICAgIHJldHVybiBvYmplY3RTdG9yZU5hbWVzLnJlbGVhc2UoKTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2Vu
ZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VC
YWNrZW5kSW1wbC5jcHAKaW5kZXggODExMGMyNGMxM2IzYzQ2M2VlMzdiMjBkNGNmZmE3MTI0MjQ0
YjYzOS4uNzUzODA3ZmQ4ZTg3ZmY2NDQ1YzU2MTViYTU4NTI1MWQxZDk4ZDg0YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1w
bC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VC
YWNrZW5kSW1wbC5jcHAKQEAgLTE1OSw3ICsxNTksNyBAQCBJREJEYXRhYmFzZU1ldGFkYXRhIElE
QkRhdGFiYXNlQmFja2VuZEltcGw6Om1ldGFkYXRhKCkgY29uc3QKIHsKICAgICBJREJEYXRhYmFz
ZU1ldGFkYXRhIG1ldGFkYXRhKG1fbmFtZSwgbV92ZXJzaW9uLCBtX2ludFZlcnNpb24pOwogICAg
IGZvciAoT2JqZWN0U3RvcmVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9vYmplY3RTdG9yZXMu
YmVnaW4oKTsgaXQgIT0gbV9vYmplY3RTdG9yZXMuZW5kKCk7ICsraXQpCi0gICAgICAgIG1ldGFk
YXRhLm9iamVjdFN0b3Jlcy5zZXQoaXQtPmZpcnN0LCBpdC0+c2Vjb25kLT5tZXRhZGF0YSgpKTsK
KyAgICAgICAgbWV0YWRhdGEub2JqZWN0U3RvcmVzLnNldChpdC0+a2V5LCBpdC0+dmFsdWUtPm1l
dGFkYXRhKCkpOwogICAgIHJldHVybiBtZXRhZGF0YTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAK
aW5kZXggOGRhNWMwMmU0MjNmNmY2NGU1Nzk3MzBkYjczZmEyOWVjMmJlNDYwNi4uMTYwNjY5Y2Qy
NmE5ODUzMGRjNDgzYzcwOTg1MTRhNDZjMzg3YTI1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwCkBA
IC0xMDcsNyArMTA3LDcgQEAgdm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6OmRlbGV0ZURhdGFi
YXNlKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWwKICAgICBpZiAoaXQgIT0g
bV9kYXRhYmFzZUJhY2tlbmRNYXAuZW5kKCkpIHsKICAgICAgICAgLy8gSWYgdGhlcmUgYXJlIGFu
eSBjb25uZWN0aW9ucyB0byB0aGUgZGF0YWJhc2UsIGRpcmVjdGx5IGRlbGV0ZSB0aGUKICAgICAg
ICAgLy8gZGF0YWJhc2UuCi0gICAgICAgIGl0LT5zZWNvbmQtPmRlbGV0ZURhdGFiYXNlKGNhbGxi
YWNrcyk7CisgICAgICAgIGl0LT52YWx1ZS0+ZGVsZXRlRGF0YWJhc2UoY2FsbGJhY2tzKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTM0LDcgKzEzNCw3IEBAIFBhc3NSZWZQdHI8SURC
QmFja2luZ1N0b3JlPiBJREJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW5CYWNraW5nU3RvcmUoUGFz
c1JlZlB0cjxTCiAgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlOwogICAg
IElEQkJhY2tpbmdTdG9yZU1hcDo6aXRlcmF0b3IgaXQyID0gbV9iYWNraW5nU3RvcmVNYXAuZmlu
ZChmaWxlSWRlbnRpZmllcik7CiAgICAgaWYgKGl0MiAhPSBtX2JhY2tpbmdTdG9yZU1hcC5lbmQo
KSkKLSAgICAgICAgYmFja2luZ1N0b3JlID0gaXQyLT5zZWNvbmQ7CisgICAgICAgIGJhY2tpbmdT
dG9yZSA9IGl0Mi0+dmFsdWU7CiAgICAgZWxzZSB7CiAjaWYgVVNFKExFVkVMREIpCiAgICAgICAg
IGJhY2tpbmdTdG9yZSA9IElEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW4oc2VjdXJpdHlPcmln
aW4uZ2V0KCksIGRhdGFEaXJlY3RvcnksIGZpbGVJZGVudGlmaWVyLCB0aGlzKTsKQEAgLTE3Miw3
ICsxNzIsNyBAQCB2b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6b3Blbihjb25zdCBTdHJpbmcm
IG5hbWUsIGludDY0X3QgdmVyc2lvbiwgUGFzc1JlZlB0cgogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAgICAgfSBlbHNlCi0gICAgICAgIGRhdGFiYXNlQmFja2VuZCA9IGl0LT5zZWNv
bmQ7CisgICAgICAgIGRhdGFiYXNlQmFja2VuZCA9IGl0LT52YWx1ZTsKIAogICAgIGlmICh2ZXJz
aW9uID09IElEQkRhdGFiYXNlTWV0YWRhdGE6Ok5vSW50VmVyc2lvbikKICAgICAgICAgZGF0YWJh
c2VCYWNrZW5kLT5vcGVuQ29ubmVjdGlvbihjYWxsYmFja3MpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCmluZGV4IGMzMGEyNTNh
NDA2NTNlODk2YjI0ZDNmNzU4ZDdjYTU4OTM2MTI4OGMuLjBiZmRmOTFlZjAzZDU0NDc2ODQyMzc1
M2RhYWEzMmE1ZDBkZTg3YjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKQEAgLTY2LDcgKzY2LDcgQEAgUGFzc1JlZlB0cjxE
T01TdHJpbmdMaXN0PiBJREJPYmplY3RTdG9yZTo6aW5kZXhOYW1lcygpIGNvbnN0CiAgICAgSURC
X1RSQUNFKCJJREJPYmplY3RTdG9yZTo6aW5kZXhOYW1lcyIpOwogICAgIFJlZlB0cjxET01TdHJp
bmdMaXN0PiBpbmRleE5hbWVzID0gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7CiAgICAgZm9yIChJ
REJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbmRleE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX21l
dGFkYXRhLmluZGV4ZXMuYmVnaW4oKTsgaXQgIT0gbV9tZXRhZGF0YS5pbmRleGVzLmVuZCgpOyAr
K2l0KQotICAgICAgICBpbmRleE5hbWVzLT5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgaW5k
ZXhOYW1lcy0+YXBwZW5kKGl0LT5rZXkpOwogICAgIGluZGV4TmFtZXMtPnNvcnQoKTsKICAgICBy
ZXR1cm4gaW5kZXhOYW1lcy5yZWxlYXNlKCk7CiB9CkBAIC0yMDYsOCArMjA2LDggQEAgUGFzc1Jl
ZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0KElEQk9iamVjdFN0b3JlQmFja2Vu
ZEludGVyZmFjZTo6UHV0TW8KICAgICBWZWN0b3I8SW5kZXhLZXlzPiBpbmRleEtleXM7CiAgICAg
Zm9yIChJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbmRleE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtX21ldGFkYXRhLmluZGV4ZXMuYmVnaW4oKTsgaXQgIT0gbV9tZXRhZGF0YS5pbmRleGVzLmVu
ZCgpOyArK2l0KSB7CiAgICAgICAgIEluZGV4S2V5cyBrZXlzOwotICAgICAgICBnZW5lcmF0ZUlu
ZGV4S2V5c0ZvclZhbHVlKGl0LT5zZWNvbmQsIHZhbHVlLCAma2V5cyk7Ci0gICAgICAgIGluZGV4
TmFtZXMuYXBwZW5kKGl0LT5maXJzdCk7CisgICAgICAgIGdlbmVyYXRlSW5kZXhLZXlzRm9yVmFs
dWUoaXQtPnZhbHVlLCB2YWx1ZSwgJmtleXMpOworICAgICAgICBpbmRleE5hbWVzLmFwcGVuZChp
dC0+a2V5KTsKICAgICAgICAgaW5kZXhLZXlzLmFwcGVuZChrZXlzKTsKICAgICB9CiAgICAgQVNT
RVJUKGluZGV4S2V5cy5zaXplKCkgPT0gaW5kZXhOYW1lcy5zaXplKCkpOwpAQCAtNDQ4LDcgKzQ0
OCw3IEBAIFBhc3NSZWZQdHI8SURCSW5kZXg+IElEQk9iamVjdFN0b3JlOjppbmRleChjb25zdCBT
dHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjCiAKICAgICBJREJJbmRleE1hcDo6aXRlcmF0
b3IgaXQgPSBtX2luZGV4TWFwLmZpbmQobmFtZSk7CiAgICAgaWYgKGl0ICE9IG1faW5kZXhNYXAu
ZW5kKCkpCi0gICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gaXQtPnZh
bHVlOwogCiAgICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gaW5kZXhCYWNrZW5k
ID0gbV9iYWNrZW5kLT5pbmRleChuYW1lLCBlYyk7CiAgICAgQVNTRVJUKCFpbmRleEJhY2tlbmQg
IT0gIWVjKTsgLy8gSWYgd2UgZGlkbid0IGdldCBhbiBpbmRleCwgd2Ugc2hvdWxkIGhhdmUgZ290
dGVuIGFuIGV4Y2VwdGlvbiBjb2RlLiBBbmQgdmljZSB2ZXJzYS4KQEAgLTQ1OCw3ICs0NTgsNyBA
QCBQYXNzUmVmUHRyPElEQkluZGV4PiBJREJPYmplY3RTdG9yZTo6aW5kZXgoY29uc3QgU3RyaW5n
JiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYwogICAgIElEQk9iamVjdFN0b3JlTWV0YWRhdGE6Oklu
ZGV4TWFwOjpjb25zdF9pdGVyYXRvciBtZGl0ID0gbV9tZXRhZGF0YS5pbmRleGVzLmZpbmQobmFt
ZSk7CiAgICAgQVNTRVJUKG1kaXQgIT0gbV9tZXRhZGF0YS5pbmRleGVzLmVuZCgpKTsKIAotICAg
IFJlZlB0cjxJREJJbmRleD4gaW5kZXggPSBJREJJbmRleDo6Y3JlYXRlKG1kaXQtPnNlY29uZCwg
aW5kZXhCYWNrZW5kLnJlbGVhc2UoKSwgdGhpcywgbV90cmFuc2FjdGlvbi5nZXQoKSk7CisgICAg
UmVmUHRyPElEQkluZGV4PiBpbmRleCA9IElEQkluZGV4OjpjcmVhdGUobWRpdC0+dmFsdWUsIGlu
ZGV4QmFja2VuZC5yZWxlYXNlKCksIHRoaXMsIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwogICAgIG1f
aW5kZXhNYXAuc2V0KG5hbWUsIGluZGV4KTsKICAgICByZXR1cm4gaW5kZXgucmVsZWFzZSgpOwog
fQpAQCAtNDgyLDcgKzQ4Miw3IEBAIHZvaWQgSURCT2JqZWN0U3RvcmU6OmRlbGV0ZUluZGV4KGNv
bnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgaWYgKCFlYykgewogICAg
ICAgICBJREJJbmRleE1hcDo6aXRlcmF0b3IgaXQgPSBtX2luZGV4TWFwLmZpbmQobmFtZSk7CiAg
ICAgICAgIGlmIChpdCAhPSBtX2luZGV4TWFwLmVuZCgpKSB7Ci0gICAgICAgICAgICBpdC0+c2Vj
b25kLT5tYXJrRGVsZXRlZCgpOworICAgICAgICAgICAgaXQtPnZhbHVlLT5tYXJrRGVsZXRlZCgp
OwogICAgICAgICAgICAgbV9pbmRleE1hcC5yZW1vdmUobmFtZSk7CiAgICAgICAgIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsLmNwcAppbmRleCBiNmQwZWEwYTUwZGUyMGRkZWFjNTE1ZjY0ZjZk
ODU5M2E2NzI0M2ZhLi4wZWI0ODA0ODM4MWZiN2M3YTNkNmVjN2FhZDgxYTE5NzFiYzQ5MGE1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcApAQCAtNzQsNyArNzQsNyBAQCBJREJPYmplY3RT
dG9yZU1ldGFkYXRhIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Om1ldGFkYXRhKCkgY29uc3QK
IHsKICAgICBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG1ldGFkYXRhKG1fbmFtZSwgbV9rZXlQYXRo
LCBtX2F1dG9JbmNyZW1lbnQpOwogICAgIGZvciAoSW5kZXhNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV9pbmRleGVzLmJlZ2luKCk7IGl0ICE9IG1faW5kZXhlcy5lbmQoKTsgKytpdCkKLSAgICAg
ICAgbWV0YWRhdGEuaW5kZXhlcy5zZXQoaXQtPmZpcnN0LCBpdC0+c2Vjb25kLT5tZXRhZGF0YSgp
KTsKKyAgICAgICAgbWV0YWRhdGEuaW5kZXhlcy5zZXQoaXQtPmtleSwgaXQtPnZhbHVlLT5tZXRh
ZGF0YSgpKTsKICAgICByZXR1cm4gbWV0YWRhdGE7CiB9CiAKQEAgLTIzMCwxMSArMjMwLDExIEBA
IHN0YXRpYyBib29sIG1ha2VJbmRleFdyaXRlcnMoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCog
b2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8CiAKICAgICBmb3IgKElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6OkluZGV4TWFwOjppdGVyYXRvciBpdCA9IG9iamVjdFN0b3JlLT5pdGVySW5kZXhlc0Jl
Z2luKCk7IGl0ICE9IG9iamVjdFN0b3JlLT5pdGVySW5kZXhlc0VuZCgpOyArK2l0KSB7CiAKLSAg
ICAgICAgY29uc3QgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+JiBpbmRleCA9IGl0LT5zZWNv
bmQ7CisgICAgICAgIGNvbnN0IFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiYgaW5kZXggPSBp
dC0+dmFsdWU7CiAgICAgICAgIGlmICghaW5kZXgtPmhhc1ZhbGlkSWQoKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOyAvLyBUaGUgaW5kZXggb2JqZWN0IGhhcyBiZWVuIGNyZWF0ZWQsIGJ1dCBkb2Vz
IG5vdCBleGlzdCBpbiB0aGUgZGF0YWJhc2UgeWV0LgogCi0gICAgICAgIElEQk9iamVjdFN0b3Jl
QmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlzIGtleXMgPSBpbmRleEtleU1hcC5nZXQoaXQtPmZp
cnN0KTsKKyAgICAgICAgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleXMg
a2V5cyA9IGluZGV4S2V5TWFwLmdldChpdC0+a2V5KTsKICAgICAgICAgLy8gSWYgdGhlIG9iamVj
dFN0b3JlIGlzIHVzaW5nIGF1dG9JbmNyZW1lbnQsIHRoZW4gYW55IGluZGV4ZXMgd2l0aCBhbiBp
ZGVudGljYWwga2V5UGF0aCBuZWVkIHRvIGFsc28gdXNlIHRoZSBwcmltYXJ5IChnZW5lcmF0ZWQp
IGtleSBhcyBhIGtleS4KICAgICAgICAgaWYgKGtleVdhc0dlbmVyYXRlZCkgewogICAgICAgICAg
ICAgY29uc3QgSURCS2V5UGF0aCYgaW5kZXhLZXlQYXRoID0gaW5kZXgtPmtleVBhdGgoKTsKQEAg
LTQwNCwxMCArNDA0LDEwIEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRl
SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQCiAgICAgICAgICAgICBy
ZWNvcmRJZGVudGlmaWVyID0gYmFja2luZ1N0b3JlQ3Vyc29yLT5vYmplY3RTdG9yZVJlY29yZElk
ZW50aWZpZXIoKTsKIAogICAgICAgICAgICAgZm9yIChJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
OjpJbmRleE1hcDo6aXRlcmF0b3IgaXQgPSBvYmplY3RTdG9yZS0+bV9pbmRleGVzLmJlZ2luKCk7
IGl0ICE9IG9iamVjdFN0b3JlLT5tX2luZGV4ZXMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgICAg
ICAgICBpZiAoIWl0LT5zZWNvbmQtPmhhc1ZhbGlkSWQoKSkKKyAgICAgICAgICAgICAgICBpZiAo
IWl0LT52YWx1ZS0+aGFzVmFsaWRJZCgpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsg
Ly8gVGhlIGluZGV4IG9iamVjdCBoYXMgYmVlbiBjcmVhdGVkLCBidXQgZG9lcyBub3QgZXhpc3Qg
aW4gdGhlIGRhdGFiYXNlIHlldC4KIAotICAgICAgICAgICAgICAgIGJvb2wgc3VjY2VzcyA9IG9i
amVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+ZGVsZXRlSW5kZXhEYXRhRm9yUmVjb3JkKG9iamVj
dFN0b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0b3JlLT5pZCgpLCBpdC0+c2Vjb25kLT5pZCgp
LCByZWNvcmRJZGVudGlmaWVyLmdldCgpKTsKKyAgICAgICAgICAgICAgICBib29sIHN1Y2Nlc3Mg
PSBvYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCktPmRlbGV0ZUluZGV4RGF0YUZvclJlY29yZChv
YmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+aWQoKSwgaXQtPnZhbHVlLT5p
ZCgpLCByZWNvcmRJZGVudGlmaWVyLmdldCgpKTsKICAgICAgICAgICAgICAgICBBU1NFUlRfVU5V
U0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOwogICAgICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAKaW5kZXggMjFlNWYz
MjhlMzQ1NTM4OWNlMDg1NjYyMDcwZWVlYTE0NjU1ZjYyOC4uYjUzNDY3NzQxYjQ0MjdmMWQ2Y2Qw
NDlmOWEwNDYxOWEwNTM2YjFhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcApAQCAtMTUxLDcgKzE1MSw3IEBAIFBhc3NSZWZQ
dHI8SURCT2JqZWN0U3RvcmU+IElEQlRyYW5zYWN0aW9uOjpvYmplY3RTdG9yZShjb25zdCBTdHJp
bmcmIG5hbWUsIEV4Y2VwCiAKICAgICBJREJPYmplY3RTdG9yZU1hcDo6aXRlcmF0b3IgaXQgPSBt
X29iamVjdFN0b3JlTWFwLmZpbmQobmFtZSk7CiAgICAgaWYgKGl0ICE9IG1fb2JqZWN0U3RvcmVN
YXAuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gaXQt
PnZhbHVlOwogCiAgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gb2Jq
ZWN0U3RvcmVCYWNrZW5kID0gbV9iYWNrZW5kLT5vYmplY3RTdG9yZShuYW1lLCBlYyk7CiAgICAg
QVNTRVJUKCFvYmplY3RTdG9yZUJhY2tlbmQgIT0gIWVjKTsgLy8gSWYgd2UgZGlkbid0IGdldCBh
IHN0b3JlLCB3ZSBzaG91bGQgaGF2ZSBnb3R0ZW4gYW4gZXhjZXB0aW9uIGNvZGUuIEFuZCB2aWNl
IHZlcnNhLgpAQCAtMTYyLDcgKzE2Miw3IEBAIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IElE
QlRyYW5zYWN0aW9uOjpvYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwCiAgICAg
SURCRGF0YWJhc2VNZXRhZGF0YTo6T2JqZWN0U3RvcmVNYXA6OmNvbnN0X2l0ZXJhdG9yIG1kaXQg
PSBtZXRhZGF0YS5vYmplY3RTdG9yZXMuZmluZChuYW1lKTsKICAgICBBU1NFUlQobWRpdCAhPSBt
ZXRhZGF0YS5vYmplY3RTdG9yZXMuZW5kKCkpOwogCi0gICAgUmVmUHRyPElEQk9iamVjdFN0b3Jl
PiBvYmplY3RTdG9yZSA9IElEQk9iamVjdFN0b3JlOjpjcmVhdGUobWRpdC0+c2Vjb25kLCBvYmpl
Y3RTdG9yZUJhY2tlbmQsIHRoaXMpOworICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZT4gb2JqZWN0
U3RvcmUgPSBJREJPYmplY3RTdG9yZTo6Y3JlYXRlKG1kaXQtPnZhbHVlLCBvYmplY3RTdG9yZUJh
Y2tlbmQsIHRoaXMpOwogICAgIG9iamVjdFN0b3JlQ3JlYXRlZChuYW1lLCBvYmplY3RTdG9yZSk7
CiAgICAgcmV0dXJuIG9iamVjdFN0b3JlLnJlbGVhc2UoKTsKIH0KQEAgLTE4Miw3ICsxODIsNyBA
QCB2b2lkIElEQlRyYW5zYWN0aW9uOjpvYmplY3RTdG9yZURlbGV0ZWQoY29uc3QgU3RyaW5nJiBu
YW1lKQogICAgIEFTU0VSVChpc1ZlcnNpb25DaGFuZ2UoKSk7CiAgICAgSURCT2JqZWN0U3RvcmVN
YXA6Oml0ZXJhdG9yIGl0ID0gbV9vYmplY3RTdG9yZU1hcC5maW5kKG5hbWUpOwogICAgIGlmIChp
dCAhPSBtX29iamVjdFN0b3JlTWFwLmVuZCgpKSB7Ci0gICAgICAgIFJlZlB0cjxJREJPYmplY3RT
dG9yZT4gb2JqZWN0U3RvcmUgPSBpdC0+c2Vjb25kOworICAgICAgICBSZWZQdHI8SURCT2JqZWN0
U3RvcmU+IG9iamVjdFN0b3JlID0gaXQtPnZhbHVlOwogICAgICAgICBtX29iamVjdFN0b3JlTWFw
LnJlbW92ZShuYW1lKTsKICAgICAgICAgb2JqZWN0U3RvcmUtPm1hcmtEZWxldGVkKCk7CiAgICAg
ICAgIG1fb2JqZWN0U3RvcmVDbGVhbnVwTWFwLnNldChvYmplY3RTdG9yZSwgb2JqZWN0U3RvcmUt
Pm1ldGFkYXRhKCkpOwpAQCAtMjkwLDcgKzI5MCw3IEBAIHZvaWQgSURCVHJhbnNhY3Rpb246Om9u
QWJvcnQoKQogCiAgICAgaWYgKGlzVmVyc2lvbkNoYW5nZSgpKSB7CiAgICAgICAgIGZvciAoSURC
T2JqZWN0U3RvcmVNZXRhZGF0YU1hcDo6aXRlcmF0b3IgaXQgPSBtX29iamVjdFN0b3JlQ2xlYW51
cE1hcC5iZWdpbigpOyBpdCAhPSBtX29iamVjdFN0b3JlQ2xlYW51cE1hcC5lbmQoKTsgKytpdCkK
LSAgICAgICAgICAgIGl0LT5maXJzdC0+c2V0TWV0YWRhdGEoaXQtPnNlY29uZCk7CisgICAgICAg
ICAgICBpdC0+a2V5LT5zZXRNZXRhZGF0YShpdC0+dmFsdWUpOwogICAgIH0KICAgICBtX29iamVj
dFN0b3JlQ2xlYW51cE1hcC5jbGVhcigpOwogICAgIGNsb3NlT3BlbkN1cnNvcnMoKTsKQEAgLTM3
OCw3ICszNzgsNyBAQCBib29sIElEQlRyYW5zYWN0aW9uOjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQ
dHI8RXZlbnQ+IGV2ZW50KQogCiAgICAgLy8gQnJlYWsgcmVmZXJlbmNlIGN5Y2xlcy4KICAgICBm
b3IgKElEQk9iamVjdFN0b3JlTWFwOjppdGVyYXRvciBpdCA9IG1fb2JqZWN0U3RvcmVNYXAuYmVn
aW4oKTsgaXQgIT0gbV9vYmplY3RTdG9yZU1hcC5lbmQoKTsgKytpdCkKLSAgICAgICAgaXQtPnNl
Y29uZC0+dHJhbnNhY3Rpb25GaW5pc2hlZCgpOworICAgICAgICBpdC0+dmFsdWUtPnRyYW5zYWN0
aW9uRmluaXNoZWQoKTsKICAgICBtX29iamVjdFN0b3JlTWFwLmNsZWFyKCk7CiAKICAgICBWZWN0
b3I8UmVmUHRyPEV2ZW50VGFyZ2V0PiA+IHRhcmdldHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Fic3RyYWN0RGF0YWJhc2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9BYnN0cmFjdERhdGFiYXNlLmNwcAppbmRleCBjNzUz
OWM2ZTExMmI5ZTFlNmJmMWUyY2QzZjAyYWUwY2JhMmJlYTI2Li42MjkwN2UzZTFjZTZiMDkxNWMy
YjAzNDc2MDllNTA3ZThjMDFjZWI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmRhdGFiYXNlL0Fic3RyYWN0RGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZGF0YWJhc2UvQWJzdHJhY3REYXRhYmFzZS5jcHAKQEAgLTI4Miw3ICsyODIsNyBA
QCBib29sIEFic3RyYWN0RGF0YWJhc2U6OnBlcmZvcm1PcGVuQW5kVmVyaWZ5KGJvb2wgc2hvdWxk
U2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsCiAgICAgICAgIEd1aWRWZXJzaW9uTWFwOjppdGVyYXRv
ciBlbnRyeSA9IGd1aWRUb1ZlcnNpb25NYXAoKS5maW5kKG1fZ3VpZCk7CiAgICAgICAgIGlmIChl
bnRyeSAhPSBndWlkVG9WZXJzaW9uTWFwKCkuZW5kKCkpIHsKICAgICAgICAgICAgIC8vIE1hcCBu
dWxsIHN0cmluZyB0byBlbXB0eSBzdHJpbmcgKHNlZSB1cGRhdGVHdWlkVmVyc2lvbk1hcCgpKS4K
LSAgICAgICAgICAgIGN1cnJlbnRWZXJzaW9uID0gZW50cnktPnNlY29uZC5pc051bGwoKSA/IGVt
cHR5U3RyaW5nKCkgOiBlbnRyeS0+c2Vjb25kLmlzb2xhdGVkQ29weSgpOworICAgICAgICAgICAg
Y3VycmVudFZlcnNpb24gPSBlbnRyeS0+dmFsdWUuaXNOdWxsKCkgPyBlbXB0eVN0cmluZygpIDog
ZW50cnktPnZhbHVlLmlzb2xhdGVkQ29weSgpOwogICAgICAgICAgICAgTE9HKFN0b3JhZ2VBUEks
ICJDdXJyZW50IGNhY2hlZCB2ZXJzaW9uIGZvciBndWlkICVpIGlzICVzIiwgbV9ndWlkLCBjdXJy
ZW50VmVyc2lvbi5hc2NpaSgpLmRhdGEoKSk7CiAKICNpZiBQTEFURk9STShDSFJPTUlVTSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFj
a2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFj
a2VyLmNwcAppbmRleCA0NmQyODEyOTJkOWI3ZTQzN2I1ZGUwZjMyNWZhZjI0NWM4MTYzYWQ0Li41
YmQ1ZTdiM2QyZTFjNDAyMTFiMDFhNjFkMGJmNzgzY2IzNTI2MjI4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3BwCkBA
IC0yNTAsNyArMjUwLDcgQEAgdm9pZCBEYXRhYmFzZVRyYWNrZXI6OmludGVycnVwdEFsbERhdGFi
YXNlc0ZvckNvbnRleHQoY29uc3QgU2NyaXB0RXhlY3V0aW9uQ29udGUKIAogICAgICAgICBEYXRh
YmFzZU5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGRiTmFtZU1hcEVuZEl0ID0gbmFtZU1hcC0+ZW5k
KCk7CiAgICAgICAgIGZvciAoRGF0YWJhc2VOYW1lTWFwOjpjb25zdF9pdGVyYXRvciBkYk5hbWVN
YXBJdCA9IG5hbWVNYXAtPmJlZ2luKCk7IGRiTmFtZU1hcEl0ICE9IGRiTmFtZU1hcEVuZEl0OyAr
K2RiTmFtZU1hcEl0KSB7Ci0gICAgICAgICAgICBEYXRhYmFzZVNldCogZGF0YWJhc2VTZXQgPSBk
Yk5hbWVNYXBJdC0+c2Vjb25kOworICAgICAgICAgICAgRGF0YWJhc2VTZXQqIGRhdGFiYXNlU2V0
ID0gZGJOYW1lTWFwSXQtPnZhbHVlOwogICAgICAgICAgICAgRGF0YWJhc2VTZXQ6OmNvbnN0X2l0
ZXJhdG9yIGRiU2V0RW5kSXQgPSBkYXRhYmFzZVNldC0+ZW5kKCk7CiAgICAgICAgICAgICBmb3Ig
KERhdGFiYXNlU2V0Ojpjb25zdF9pdGVyYXRvciBkYlNldEl0ID0gZGF0YWJhc2VTZXQtPmJlZ2lu
KCk7IGRiU2V0SXQgIT0gZGJTZXRFbmRJdDsgKytkYlNldEl0KSB7CiAgICAgICAgICAgICAgICAg
aWYgKCgqZGJTZXRJdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSA9PSBjb250ZXh0KQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9PcmlnaW5Vc2FnZVJl
Y29yZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL09yaWdpblVzYWdl
UmVjb3JkLmNwcAppbmRleCA0NDM1NTBhNTczMDlmMzM2M2YwZmNhOThmNTA4YzAyNzZkMGQ5OWRi
Li4yYmY4YWY0YWUwMDk5MjgwYWNhMTc1Nzc0OGJhMjFjZjkwYjcwMmRiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL09yaWdpblVzYWdlUmVjb3JkLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL09yaWdpblVzYWdlUmVjb3Jk
LmNwcApAQCAtOTMsNyArOTMsNyBAQCB1bnNpZ25lZCBsb25nIGxvbmcgT3JpZ2luVXNhZ2VSZWNv
cmQ6OmRpc2tVc2FnZSgpCiAgICAgSGFzaE1hcDxTdHJpbmcsIERhdGFiYXNlRW50cnk+OjppdGVy
YXRvciBpRGF0YWJhc2UgPSBtX2RhdGFiYXNlTWFwLmJlZ2luKCk7CiAgICAgSGFzaE1hcDxTdHJp
bmcsIERhdGFiYXNlRW50cnk+OjppdGVyYXRvciBlbmREYXRhYmFzZSA9IG1fZGF0YWJhc2VNYXAu
ZW5kKCk7CiAgICAgZm9yICg7IGlEYXRhYmFzZSAhPSBlbmREYXRhYmFzZTsgKytpRGF0YWJhc2Up
Ci0gICAgICAgIG1fY2FjaGVkRGlza1VzYWdlICs9IGlEYXRhYmFzZS0+c2Vjb25kLnNpemU7Cisg
ICAgICAgIG1fY2FjaGVkRGlza1VzYWdlICs9IGlEYXRhYmFzZS0+dmFsdWUuc2l6ZTsKIAogICAg
IG1fY2FjaGVkRGlza1VzYWdlSXNWYWxpZCA9IHRydWU7CiAgICAgcmV0dXJuIG1fY2FjaGVkRGlz
a1VzYWdlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9T
UUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAKaW5kZXggODM3YjhmYmQyMjA1
YWRjOTc0ODZkZDNmMGU4ZjAyMDczODBmOGQ5Yi4uZGEzYTdlZTc1YjhjMDEyNTk0NjZlYzRhN2Vh
ZGE5N2JkMWMyM2JmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRh
YmFzZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwCkBAIC03OCw3
ICs3OCw3IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6YWNxdWlyZUxvY2soU1FM
VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQogICAgICAgICBjb29yZGluYXRpb25JbmZvSXRlcmF0
b3IgPSBtX2Nvb3JkaW5hdGlvbkluZm9NYXAuYWRkKGRiSWRlbnRpZmllciwgQ29vcmRpbmF0aW9u
SW5mbygpKS5pdGVyYXRvcjsKICAgICB9CiAKLSAgICBDb29yZGluYXRpb25JbmZvJiBpbmZvID0g
Y29vcmRpbmF0aW9uSW5mb0l0ZXJhdG9yLT5zZWNvbmQ7CisgICAgQ29vcmRpbmF0aW9uSW5mbyYg
aW5mbyA9IGNvb3JkaW5hdGlvbkluZm9JdGVyYXRvci0+dmFsdWU7CiAgICAgaW5mby5wZW5kaW5n
VHJhbnNhY3Rpb25zLmFwcGVuZCh0cmFuc2FjdGlvbik7CiAgICAgcHJvY2Vzc1BlbmRpbmdUcmFu
c2FjdGlvbnMoaW5mbyk7CiB9CkBAIC05Miw3ICs5Miw3IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb25D
b29yZGluYXRvcjo6cmVsZWFzZUxvY2soU1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQogCiAg
ICAgQ29vcmRpbmF0aW9uSW5mb01hcDo6aXRlcmF0b3IgY29vcmRpbmF0aW9uSW5mb0l0ZXJhdG9y
ID0gbV9jb29yZGluYXRpb25JbmZvTWFwLmZpbmQoZGJJZGVudGlmaWVyKTsKICAgICBBU1NFUlQo
Y29vcmRpbmF0aW9uSW5mb0l0ZXJhdG9yICE9IG1fY29vcmRpbmF0aW9uSW5mb01hcC5lbmQoKSk7
Ci0gICAgQ29vcmRpbmF0aW9uSW5mbyYgaW5mbyA9IGNvb3JkaW5hdGlvbkluZm9JdGVyYXRvci0+
c2Vjb25kOworICAgIENvb3JkaW5hdGlvbkluZm8mIGluZm8gPSBjb29yZGluYXRpb25JbmZvSXRl
cmF0b3ItPnZhbHVlOwogCiAgICAgaWYgKHRyYW5zYWN0aW9uLT5pc1JlYWRPbmx5KCkpIHsKICAg
ICAgICAgQVNTRVJUKGluZm8uYWN0aXZlUmVhZFRyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2Fj
dGlvbikpOwpAQCAtMTEwLDcgKzExMCw3IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRv
cjo6c2h1dGRvd24oKQogICAgIC8vIE5vdGlmeSBhbGwgdHJhbnNhY3Rpb25zIGluIHByb2dyZXNz
IHRoYXQgdGhlIGRhdGFiYXNlIHRocmVhZCBpcyBzaHV0dGluZyBkb3duCiAgICAgZm9yIChDb29y
ZGluYXRpb25JbmZvTWFwOjppdGVyYXRvciBjb29yZGluYXRpb25JbmZvSXRlcmF0b3IgPSBtX2Nv
b3JkaW5hdGlvbkluZm9NYXAuYmVnaW4oKTsKICAgICAgICAgIGNvb3JkaW5hdGlvbkluZm9JdGVy
YXRvciAhPSBtX2Nvb3JkaW5hdGlvbkluZm9NYXAuZW5kKCk7ICsrY29vcmRpbmF0aW9uSW5mb0l0
ZXJhdG9yKSB7Ci0gICAgICAgIENvb3JkaW5hdGlvbkluZm8mIGluZm8gPSBjb29yZGluYXRpb25J
bmZvSXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgQ29vcmRpbmF0aW9uSW5mbyYgaW5mbyA9IGNv
b3JkaW5hdGlvbkluZm9JdGVyYXRvci0+dmFsdWU7CiAgICAgICAgIGlmIChpbmZvLmFjdGl2ZVdy
aXRlVHJhbnNhY3Rpb24pCiAgICAgICAgICAgICBpbmZvLmFjdGl2ZVdyaXRlVHJhbnNhY3Rpb24t
Pm5vdGlmeURhdGFiYXNlVGhyZWFkSXNTaHV0dGluZ0Rvd24oKTsKICAgICAgICAgZm9yIChIYXNo
U2V0PFJlZlB0cjxTUUxUcmFuc2FjdGlvbj4gPjo6aXRlcmF0b3IgYWN0aXZlUmVhZFRyYW5zYWN0
aW9uc0l0ZXJhdG9yID0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0
YWJhc2UvY2hyb21pdW0vRGF0YWJhc2VUcmFja2VyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9jaHJvbWl1bS9EYXRhYmFzZVRyYWNrZXJDaHJvbWl1bS5j
cHAKaW5kZXggMTE3ZmRiZWVkMzFkNjNiNjRiOTQxODAzYjhlYWRjZDk5ODVjZWVmYy4uNjBhNzZj
YTVjOTU5ODJiZWE5NGNlMDdiYWY2NmVkYTVkODI3YzVhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9jaHJvbWl1bS9EYXRhYmFzZVRyYWNrZXJDaHJvbWl1
bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9jaHJvbWl1bS9E
YXRhYmFzZVRyYWNrZXJDaHJvbWl1bS5jcHAKQEAgLTE4MCw3ICsxODAsNyBAQCB2b2lkIERhdGFi
YXNlVHJhY2tlcjo6aW50ZXJydXB0QWxsRGF0YWJhc2VzRm9yQ29udGV4dChjb25zdCBTY3JpcHRF
eGVjdXRpb25Db250ZQogCiAgICAgRGF0YWJhc2VOYW1lTWFwOjpjb25zdF9pdGVyYXRvciBkYk5h
bWVNYXBFbmRJdCA9IG5hbWVNYXAtPmVuZCgpOwogICAgIGZvciAoRGF0YWJhc2VOYW1lTWFwOjpj
b25zdF9pdGVyYXRvciBkYk5hbWVNYXBJdCA9IG5hbWVNYXAtPmJlZ2luKCk7IGRiTmFtZU1hcEl0
ICE9IGRiTmFtZU1hcEVuZEl0OyArK2RiTmFtZU1hcEl0KSB7Ci0gICAgICAgIERhdGFiYXNlU2V0
KiBkYXRhYmFzZVNldCA9IGRiTmFtZU1hcEl0LT5zZWNvbmQ7CisgICAgICAgIERhdGFiYXNlU2V0
KiBkYXRhYmFzZVNldCA9IGRiTmFtZU1hcEl0LT52YWx1ZTsKICAgICAgICAgRGF0YWJhc2VTZXQ6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGRhdGFiYXNlU2V0LT5lbmQoKTsKICAgICAgICAgZm9yIChE
YXRhYmFzZVNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBkYXRhYmFzZVNldC0+YmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBpZiAoKCppdCktPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSA9PSBjb250ZXh0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJkYXRhYmFzZS9jaHJvbWl1bS9RdW90YVRyYWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJkYXRhYmFzZS9jaHJvbWl1bS9RdW90YVRyYWNrZXIuY3BwCmluZGV4IDAzNDRjYThm
NjU2YTY1ZDM3YjMwNGJiN2UzOTg4OWZjZTM2ZjhmNWQuLjM4MmEzZmI4YjU3ODYyNTVjZWJhMGU3
Zjg1OWIxNDJhZWMxZDk1MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvY2hyb21pdW0vUXVvdGFUcmFja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL1F1b3RhVHJhY2tlci5jcHAKQEAgLTUzLDggKzUz
LDggQEAgdm9pZCBRdW90YVRyYWNrZXI6OmdldERhdGFiYXNlU2l6ZUFuZFNwYWNlQXZhaWxhYmxl
VG9PcmlnaW4oCiAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhKG1fZGF0YUd1YXJkKTsKICAg
ICAgICAgQVNTRVJUKG1fZGF0YWJhc2VTaXplcy5jb250YWlucyhvcmlnaW5JZGVudGlmaWVyKSk7
CiAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBTaXplTWFwPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
X2RhdGFiYXNlU2l6ZXMuZmluZChvcmlnaW5JZGVudGlmaWVyKTsKLSAgICAgICAgQVNTRVJUKGl0
LT5zZWNvbmQuY29udGFpbnMoZGF0YWJhc2VOYW1lKSk7Ci0gICAgICAgICpkYXRhYmFzZVNpemUg
PSBpdC0+c2Vjb25kLmdldChkYXRhYmFzZU5hbWUpOworICAgICAgICBBU1NFUlQoaXQtPnZhbHVl
LmNvbnRhaW5zKGRhdGFiYXNlTmFtZSkpOworICAgICAgICAqZGF0YWJhc2VTaXplID0gaXQtPnZh
bHVlLmdldChkYXRhYmFzZU5hbWUpOwogCiAgICAgICAgIGlmIChtX3NwYWNlQXZhaWxhYmxlVG9P
cmlnaW5zLmNvbnRhaW5zKG9yaWdpbklkZW50aWZpZXIpKSB7CiAgICAgICAgICAgICAqc3BhY2VB
dmFpbGFibGUgPSBtX3NwYWNlQXZhaWxhYmxlVG9PcmlnaW5zLmdldChvcmlnaW5JZGVudGlmaWVy
KTsKQEAgLTcyLDcgKzcyLDcgQEAgdm9pZCBRdW90YVRyYWNrZXI6OnVwZGF0ZURhdGFiYXNlU2l6
ZSgKIHsKICAgICBNdXRleExvY2tlciBsb2NrRGF0YShtX2RhdGFHdWFyZCk7CiAgICAgSGFzaE1h
cDxTdHJpbmcsIFNpemVNYXA+OjppdGVyYXRvciBpdCA9IG1fZGF0YWJhc2VTaXplcy5hZGQob3Jp
Z2luSWRlbnRpZmllciwgU2l6ZU1hcCgpKS5pdGVyYXRvcjsKLSAgICBpdC0+c2Vjb25kLnNldChk
YXRhYmFzZU5hbWUsIGRhdGFiYXNlU2l6ZSk7CisgICAgaXQtPnZhbHVlLnNldChkYXRhYmFzZU5h
bWUsIGRhdGFiYXNlU2l6ZSk7CiB9CiAKIHZvaWQgUXVvdGFUcmFja2VyOjp1cGRhdGVTcGFjZUF2
YWlsYWJsZVRvT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllciwgdW5zaWduZWQg
bG9uZyBsb25nIHNwYWNlQXZhaWxhYmxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldERlZmxhdGVGcmFtZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldERlZmxhdGVGcmFtZXIuY3BwCmluZGV4IDc2
YzA0MGQxYzkzNzJhYjcwZTIyNjQ2MGE4N2QyYTU1ZjJjODhmZjAuLjY3YmIzZGFhMTI5OTg4NDUx
MTEwNjkwZTE5MmVhMGRhMDA3NjZjZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2Vic29ja2V0cy9XZWJTb2NrZXREZWZsYXRlRnJhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0RGVmbGF0ZUZyYW1lci5jcHAKQEAgLTg3
LDcgKzg3LDcgQEAgYm9vbCBXZWJTb2NrZXRFeHRlbnNpb25EZWZsYXRlRnJhbWU6OnByb2Nlc3NS
ZXNwb25zZShjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW4KICAgICBpbnQgd2luZG93Qml0cyA9
IDE1OwogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBwYXJhbWV0
ZXIgPSBzZXJ2ZXJQYXJhbWV0ZXJzLmZpbmQoIm1heF93aW5kb3dfYml0cyIpOwogICAgIGlmIChw
YXJhbWV0ZXIgIT0gc2VydmVyUGFyYW1ldGVycy5lbmQoKSkgewotICAgICAgICB3aW5kb3dCaXRz
ID0gcGFyYW1ldGVyLT5zZWNvbmQudG9JbnQoKTsKKyAgICAgICAgd2luZG93Qml0cyA9IHBhcmFt
ZXRlci0+dmFsdWUudG9JbnQoKTsKICAgICAgICAgaWYgKHdpbmRvd0JpdHMgPCA4IHx8IHdpbmRv
d0JpdHMgPiAxNSkgewogICAgICAgICAgICAgbV9mYWlsdXJlUmVhc29uID0gIlJlY2VpdmVkIGlu
dmFsaWQgbWF4X3dpbmRvd19iaXRzIHBhcmFtZXRlciI7CiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CkBAIC05OCw3ICs5OCw3IEBAIGJvb2wgV2ViU29ja2V0RXh0ZW5zaW9uRGVmbGF0ZUZyYW1l
Ojpwcm9jZXNzUmVzcG9uc2UoY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluCiAgICAgV2ViU29j
a2V0RGVmbGF0ZXI6OkNvbnRleHRUYWtlT3Zlck1vZGUgbW9kZSA9IFdlYlNvY2tldERlZmxhdGVy
OjpUYWtlT3ZlckNvbnRleHQ7CiAgICAgcGFyYW1ldGVyID0gc2VydmVyUGFyYW1ldGVycy5maW5k
KCJub19jb250ZXh0X3Rha2VvdmVyIik7CiAgICAgaWYgKHBhcmFtZXRlciAhPSBzZXJ2ZXJQYXJh
bWV0ZXJzLmVuZCgpKSB7Ci0gICAgICAgIGlmICghcGFyYW1ldGVyLT5zZWNvbmQuaXNOdWxsKCkp
IHsKKyAgICAgICAgaWYgKCFwYXJhbWV0ZXItPnZhbHVlLmlzTnVsbCgpKSB7CiAgICAgICAgICAg
ICBtX2ZhaWx1cmVSZWFzb24gPSAiUmVjZWl2ZWQgaW52YWxpZCBub19jb250ZXh0X3Rha2VvdmVy
IHBhcmFtZXRlciI7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRFeHRlbnNp
b25EaXNwYXRjaGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJT
b2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyLmNwcAppbmRleCA3YzU5MmFkMWJmMjgwNjhjODMwMzM2
OWI2MDY1NjczYjZiYTdlOTc0Li41NjA5ZjY1ODFhYWI5NzQyYjBmZDg1ZmYxNWQxNWZhNTBlZDI5
ZjViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29j
a2V0RXh0ZW5zaW9uRGlzcGF0Y2hlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJzb2NrZXRzL1dlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXIuY3BwCkBAIC0xODEsMTAgKzE4
MSwxMCBAQCB2b2lkIFdlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXI6OmFwcGVuZEFjY2VwdGVk
RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZXh0ZW5zaQogICAgIC8vIEZJWE1FOiBTaG91bGQgdXNl
IExpc3RIYXNoU2V0IHRvIGtlZXAgdGhlIG9yZGVyIG9mIHRoZSBwYXJhbWV0ZXJzLgogICAgIGZv
ciAoSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ZXJhdG9yID0gZXh0
ZW5zaW9uUGFyYW1ldGVycy5iZWdpbigpOyBpdGVyYXRvciAhPSBleHRlbnNpb25QYXJhbWV0ZXJz
LmVuZCgpOyArK2l0ZXJhdG9yKSB7CiAgICAgICAgIG1fYWNjZXB0ZWRFeHRlbnNpb25zQnVpbGRl
ci5hcHBlbmQoIjsgIik7Ci0gICAgICAgIG1fYWNjZXB0ZWRFeHRlbnNpb25zQnVpbGRlci5hcHBl
bmQoaXRlcmF0b3ItPmZpcnN0KTsKLSAgICAgICAgaWYgKCFpdGVyYXRvci0+c2Vjb25kLmlzTnVs
bCgpKSB7CisgICAgICAgIG1fYWNjZXB0ZWRFeHRlbnNpb25zQnVpbGRlci5hcHBlbmQoaXRlcmF0
b3ItPmtleSk7CisgICAgICAgIGlmICghaXRlcmF0b3ItPnZhbHVlLmlzTnVsbCgpKSB7CiAgICAg
ICAgICAgICBtX2FjY2VwdGVkRXh0ZW5zaW9uc0J1aWxkZXIuYXBwZW5kKCI9Iik7Ci0gICAgICAg
ICAgICBtX2FjY2VwdGVkRXh0ZW5zaW9uc0J1aWxkZXIuYXBwZW5kKGl0ZXJhdG9yLT5zZWNvbmQp
OworICAgICAgICAgICAgbV9hY2NlcHRlZEV4dGVuc2lvbnNCdWlsZGVyLmFwcGVuZChpdGVyYXRv
ci0+dmFsdWUpOwogICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKaW5kZXggNmMwOGJlMjFmMGUzMTY3MTI3YWIzZjJi
NGI5NTdmOWI0ZWJjZjgyMy4uOGUzMmViNTAxMDEzM2Y5ZWU4NzNlNzk1OGNlNGIzYjZjN2JlYTBl
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3Bw
CkBAIC05NCw3ICs5NCw3IEBAIEFYT2JqZWN0Q2FjaGU6On5BWE9iamVjdENhY2hlKCkKIHsKICAg
ICBIYXNoTWFwPEFYSUQsIFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiA+OjppdGVyYXRvciBl
bmQgPSBtX29iamVjdHMuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPEFYSUQsIFJlZlB0cjxBY2Nl
c3NpYmlsaXR5T2JqZWN0PiA+OjppdGVyYXRvciBpdCA9IG1fb2JqZWN0cy5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKLSAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqID0gKCppdCku
c2Vjb25kLmdldCgpOworICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmogPSAoKml0KS52
YWx1ZS5nZXQoKTsKICAgICAgICAgZGV0YWNoV3JhcHBlcihvYmopOwogICAgICAgICBvYmotPmRl
dGFjaCgpOwogICAgICAgICByZW1vdmVBWElEKG9iaik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9nb2JqZWN0L0RPTU9iamVjdENhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2dvYmplY3QvRE9NT2JqZWN0Q2FjaGUuY3BwCmluZGV4IDJlN2YxMDZlNzllMzFj
NzMxNTRhYjljZmFhMTlhNTg5ZTlkZTdkZDUuLmRkN2QwNDk3MThjODEyMmYyNGIzOGRiODgzZTVi
NmI2NGUyZWMwNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3Qv
RE9NT2JqZWN0Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3Qv
RE9NT2JqZWN0Q2FjaGUuY3BwCkBAIC03NCw3ICs3NCw3IEBAIHZvaWQgRE9NT2JqZWN0Q2FjaGU6
OmNsZWFyQnlGcmFtZShXZWJDb3JlOjpGcmFtZSogZnJhbWUpCiAgICAgLy8gaXRlcmF0aW5nIHRo
ZSBjYWNoZSBpdHNlbGYuCiAgICAgRE9NT2JqZWN0TWFwOjppdGVyYXRvciBlbmQgPSBkb21PYmpl
Y3RzKCkuZW5kKCk7CiAgICAgZm9yIChET01PYmplY3RNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBkb21P
YmplY3RzKCkuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewotICAgICAgICBET01PYmpl
Y3RDYWNoZURhdGEqIGRhdGEgPSBpdGVyLT5zZWNvbmQ7CisgICAgICAgIERPTU9iamVjdENhY2hl
RGF0YSogZGF0YSA9IGl0ZXItPnZhbHVlOwogICAgICAgICBBU1NFUlQoZGF0YSk7CiAgICAgICAg
IGlmICgoIWZyYW1lIHx8IGRhdGEtPmZyYW1lID09IGZyYW1lKSAmJiBkYXRhLT50aW1lc1JldHVy
bmVkKQogICAgICAgICAgICAgdG9VbnJlZi5hcHBlbmQoZGF0YSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01PYmplY3RIYXNoVGFibGVNYXAuaCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0RPTU9iamVjdEhhc2hUYWJsZU1hcC5oCmluZGV4IDY0ODI4ZDY5
ODhmN2U0M2IzZTlhNDYzNjkwOGNkMjEyNTQ3YTJmZmMuLjc1M2MwNGQyZmM1NzcyZTA5NTlkY2Vm
NWFjNjFiYTMwYzk2ZTE3OGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0RPTU9iamVjdEhhc2hUYWJsZU1hcC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0RPTU9iamVjdEhhc2hUYWJsZU1hcC5oCkBAIC0zOSwxNSArMzksMTUgQEAgcHVibGljOgogICAg
IH5ET01PYmplY3RIYXNoVGFibGVNYXAoKQogICAgIHsKICAgICAgICAgZm9yIChIYXNoTWFwPGNv
bnN0IEpTQzo6SGFzaFRhYmxlKiwgSlNDOjpIYXNoVGFibGU+OjppdGVyYXRvciBpdGVyID0gbV9t
YXAuYmVnaW4oKTsgaXRlciAhPSBtX21hcC5lbmQoKTsgKytpdGVyKQotICAgICAgICAgICAgaXRl
ci0+c2Vjb25kLmRlbGV0ZVRhYmxlKCk7CisgICAgICAgICAgICBpdGVyLT52YWx1ZS5kZWxldGVU
YWJsZSgpOwogICAgIH0KIAogICAgIGNvbnN0IEpTQzo6SGFzaFRhYmxlKiBnZXQoY29uc3QgSlND
OjpIYXNoVGFibGUqIHN0YXRpY1RhYmxlKQogICAgIHsKICAgICAgICAgSGFzaE1hcDxjb25zdCBK
U0M6Okhhc2hUYWJsZSosIEpTQzo6SGFzaFRhYmxlPjo6aXRlcmF0b3IgaXRlciA9IG1fbWFwLmZp
bmQoc3RhdGljVGFibGUpOwogICAgICAgICBpZiAoaXRlciAhPSBtX21hcC5lbmQoKSkKLSAgICAg
ICAgICAgIHJldHVybiAmaXRlci0+c2Vjb25kOwotICAgICAgICByZXR1cm4gJm1fbWFwLnNldChz
dGF0aWNUYWJsZSwgc3RhdGljVGFibGUtPmNvcHkoKSkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAg
ICAgICAgIHJldHVybiAmaXRlci0+dmFsdWU7CisgICAgICAgIHJldHVybiAmbV9tYXAuc2V0KHN0
YXRpY1RhYmxlLCBzdGF0aWNUYWJsZS0+Y29weSgpKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgfQog
CiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01C
aW5kaW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAK
aW5kZXggNjU1MWQ2Njg3ZGZmODI4ZTk1NGJjMmNmMWY0YWE2YzhmYTI0NjUyNS4uMTNjOTNmNmE5
Yjg0YThhZjVkNjEwZGQ1NDk5NDYxOGVmODQ1NGY2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCkBAIC0yNTksNyArMjU5LDcgQEAgU3RydWN0dXJlKiBj
YWNoZURPTVN0cnVjdHVyZShKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1
cmUqIHN0cnVjdHUKIHsKICAgICBKU0RPTVN0cnVjdHVyZU1hcCYgc3RydWN0dXJlcyA9IGdsb2Jh
bE9iamVjdC0+c3RydWN0dXJlcygpOwogICAgIEFTU0VSVCghc3RydWN0dXJlcy5jb250YWlucyhj
bGFzc0luZm8pKTsKLSAgICByZXR1cm4gc3RydWN0dXJlcy5zZXQoY2xhc3NJbmZvLCBXcml0ZUJh
cnJpZXI8U3RydWN0dXJlPihnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0
LCBzdHJ1Y3R1cmUpKS5pdGVyYXRvci0+c2Vjb25kLmdldCgpOworICAgIHJldHVybiBzdHJ1Y3R1
cmVzLnNldChjbGFzc0luZm8sIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KGdsb2JhbE9iamVjdC0+
Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkpLml0ZXJhdG9yLT52YWx1ZS5n
ZXQoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwCmluZGV4IDM2MTA0ODA4YmI2MDllNTdi
MDQ4MTE4NTJlODk1ZGFkNzEzMGE0YWUuLmQzYzQyOWE1MDhkOTEwZGU3YmQyZWViZWQ2N2Q3NzVj
MjVlYzdiMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xv
YmFsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2Jh
bE9iamVjdC5jcHAKQEAgLTg4LDExICs4OCwxMSBAQCB2b2lkIEpTRE9NR2xvYmFsT2JqZWN0Ojp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAKICAgICBK
U0RPTVN0cnVjdHVyZU1hcDo6aXRlcmF0b3IgZW5kID0gdGhpc09iamVjdC0+c3RydWN0dXJlcygp
LmVuZCgpOwogICAgIGZvciAoSlNET01TdHJ1Y3R1cmVNYXA6Oml0ZXJhdG9yIGl0ID0gdGhpc09i
amVjdC0+c3RydWN0dXJlcygpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgdmlz
aXRvci5hcHBlbmQoJml0LT5zZWNvbmQpOworICAgICAgICB2aXNpdG9yLmFwcGVuZCgmaXQtPnZh
bHVlKTsKIAogICAgIEpTRE9NQ29uc3RydWN0b3JNYXA6Oml0ZXJhdG9yIGVuZDIgPSB0aGlzT2Jq
ZWN0LT5jb25zdHJ1Y3RvcnMoKS5lbmQoKTsKICAgICBmb3IgKEpTRE9NQ29uc3RydWN0b3JNYXA6
Oml0ZXJhdG9yIGl0MiA9IHRoaXNPYmplY3QtPmNvbnN0cnVjdG9ycygpLmJlZ2luKCk7IGl0MiAh
PSBlbmQyOyArK2l0MikKLSAgICAgICAgdmlzaXRvci5hcHBlbmQoJml0Mi0+c2Vjb25kKTsKKyAg
ICAgICAgdmlzaXRvci5hcHBlbmQoJml0Mi0+dmFsdWUpOwogfQogCiB2b2lkIEpTRE9NR2xvYmFs
T2JqZWN0OjpzZXRDdXJyZW50RXZlbnQoRXZlbnQqIGN1cnJlbnRFdmVudCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmggYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oCmluZGV4IGJkYWI1NjhmMDI0
NTNiMTQ0ZjIzZDQ3Y2E0N2U5ZDQ2OTNmNTVjNjMuLjljYzE3MWJjMjg4NzRhODM5ZWY4MzNkMjE0
ZjZmOGY1MTg5ZjQ3NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NR2xvYmFsT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01H
bG9iYWxPYmplY3QuaApAQCAtOTMsNyArOTMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIEpTQzo6SlNPYmplY3QqIGNvbnN0cnVjdG9yID0gQ29uc3RydWN0b3JDbGFzczo6Y3JlYXRl
KGV4ZWMsIENvbnN0cnVjdG9yQ2xhc3M6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRh
KCksIGNvbnN0X2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpLCBnbG9iYWxP
YmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSwgY29uc3RfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+
KGdsb2JhbE9iamVjdCkpOwogICAgICAgICBBU1NFUlQoIWNvbnN0X2Nhc3Q8SlNET01HbG9iYWxP
YmplY3QqPihnbG9iYWxPYmplY3QpLT5jb25zdHJ1Y3RvcnMoKS5jb250YWlucygmQ29uc3RydWN0
b3JDbGFzczo6c19pbmZvKSk7CiAgICAgICAgIEpTQzo6V3JpdGVCYXJyaWVyPEpTQzo6SlNPYmpl
Y3Q+IHRlbXA7Ci0gICAgICAgIGNvbnN0X2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxP
YmplY3QpLT5jb25zdHJ1Y3RvcnMoKS5hZGQoJkNvbnN0cnVjdG9yQ2xhc3M6OnNfaW5mbywgdGVt
cCkuaXRlcmF0b3ItPnNlY29uZC5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3Qs
IGNvbnN0cnVjdG9yKTsKKyAgICAgICAgY29uc3RfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGds
b2JhbE9iamVjdCktPmNvbnN0cnVjdG9ycygpLmFkZCgmQ29uc3RydWN0b3JDbGFzczo6c19pbmZv
LCB0ZW1wKS5pdGVyYXRvci0+dmFsdWUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2Jq
ZWN0LCBjb25zdHJ1Y3Rvcik7CiAgICAgICAgIHJldHVybiBjb25zdHJ1Y3RvcjsKICAgICB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1BhZ2VTY3JpcHREZWJ1Z1Nl
cnZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9QYWdlU2NyaXB0RGVidWdTZXJ2
ZXIuY3BwCmluZGV4IGZmMGFlZWZiNTBhNjA4YzkyMTAzM2Q5ODc5MzNjZGM2NWZjZmQyYzkuLmVk
NzQzY2M5ZTllYzUxYzBkNTMxNjEwOTRmMzNkOWM5MmFkYjEwZDYgMTAwNzU1Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUGFnZVNjcmlwdERlYnVnU2VydmVyLmNwcApAQCAtODIs
NyArODIsNyBAQCB2b2lkIFBhZ2VTY3JpcHREZWJ1Z1NlcnZlcjo6YWRkTGlzdGVuZXIoU2NyaXB0
RGVidWdMaXN0ZW5lciogbGlzdGVuZXIsIFBhZ2UqIHBhZwogICAgIEFTU0VSVF9BUkcobGlzdGVu
ZXIsIGxpc3RlbmVyKTsKICAgICBBU1NFUlRfQVJHKHBhZ2UsIHBhZ2UpOwogCi0gICAgT3duUHRy
PExpc3RlbmVyU2V0PiYgbGlzdGVuZXJzID0gbV9wYWdlTGlzdGVuZXJzTWFwLmFkZChwYWdlLCBu
dWxscHRyKS5pdGVyYXRvci0+c2Vjb25kOworICAgIE93blB0cjxMaXN0ZW5lclNldD4mIGxpc3Rl
bmVycyA9IG1fcGFnZUxpc3RlbmVyc01hcC5hZGQocGFnZSwgbnVsbHB0cikuaXRlcmF0b3ItPnZh
bHVlOwogICAgIGlmICghbGlzdGVuZXJzKQogICAgICAgICBsaXN0ZW5lcnMgPSBhZG9wdFB0cihu
ZXcgTGlzdGVuZXJTZXQpOwogICAgIGxpc3RlbmVycy0+YWRkKGxpc3RlbmVyKTsKQEAgLTEwMCw3
ICsxMDAsNyBAQCB2b2lkIFBhZ2VTY3JpcHREZWJ1Z1NlcnZlcjo6cmVtb3ZlTGlzdGVuZXIoU2Ny
aXB0RGVidWdMaXN0ZW5lciogbGlzdGVuZXIsIFBhZ2UqCiAgICAgaWYgKGl0ID09IG1fcGFnZUxp
c3RlbmVyc01hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgTGlzdGVuZXJTZXQqIGxp
c3RlbmVycyA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgTGlzdGVuZXJTZXQqIGxpc3RlbmVycyA9
IGl0LT52YWx1ZS5nZXQoKTsKICAgICBsaXN0ZW5lcnMtPnJlbW92ZShsaXN0ZW5lcik7CiAgICAg
aWYgKGxpc3RlbmVycy0+aXNFbXB0eSgpKSB7CiAgICAgICAgIG1fcGFnZUxpc3RlbmVyc01hcC5y
ZW1vdmUoaXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0
Q2FjaGVkRnJhbWVEYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENh
Y2hlZEZyYW1lRGF0YS5jcHAKaW5kZXggZGVmNzljZjJjMTZiYTc2ZTUxYmQ4ZjAxZmYwNzAwOWZl
ZDIwY2M2ZS4uYzYyNDg3ZTgwNWZkY2MxYjcwMWM1YmJmNWQ5Njk0Y2JmYmQ3NDRkYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDYWNoZWRGcmFtZURhdGEu
Y3BwCkBAIC01Myw4ICs1Myw4IEBAIFNjcmlwdENhY2hlZEZyYW1lRGF0YTo6U2NyaXB0Q2FjaGVk
RnJhbWVEYXRhKEZyYW1lKiBmcmFtZSkKIAogICAgIFNjcmlwdENvbnRyb2xsZXI6OlNoZWxsTWFw
OjppdGVyYXRvciB3aW5kb3dTaGVsbHNFbmQgPSB3aW5kb3dTaGVsbHMuZW5kKCk7CiAgICAgZm9y
IChTY3JpcHRDb250cm9sbGVyOjpTaGVsbE1hcDo6aXRlcmF0b3IgaXRlciA9IHdpbmRvd1NoZWxs
cy5iZWdpbigpOyBpdGVyICE9IHdpbmRvd1NoZWxsc0VuZDsgKytpdGVyKSB7Ci0gICAgICAgIEpT
RE9NV2luZG93KiB3aW5kb3cgPSBpdGVyLT5zZWNvbmQtPndpbmRvdygpOwotICAgICAgICBtX3dp
bmRvd3MuYWRkKGl0ZXItPmZpcnN0LmdldCgpLCBTdHJvbmc8SlNET01XaW5kb3c+KHdpbmRvdy0+
Z2xvYmFsRGF0YSgpLCB3aW5kb3cpKTsKKyAgICAgICAgSlNET01XaW5kb3cqIHdpbmRvdyA9IGl0
ZXItPnZhbHVlLT53aW5kb3coKTsKKyAgICAgICAgbV93aW5kb3dzLmFkZChpdGVyLT5rZXkuZ2V0
KCksIFN0cm9uZzxKU0RPTVdpbmRvdz4od2luZG93LT5nbG9iYWxEYXRhKCksIHdpbmRvdykpOwog
ICAgIH0KIAogICAgIHNjcmlwdENvbnRyb2xsZXItPmF0dGFjaERlYnVnZ2VyKDApOwpAQCAtNzQs
OCArNzQsOCBAQCB2b2lkIFNjcmlwdENhY2hlZEZyYW1lRGF0YTo6cmVzdG9yZShGcmFtZSogZnJh
bWUpCiAKICAgICBTY3JpcHRDb250cm9sbGVyOjpTaGVsbE1hcDo6aXRlcmF0b3Igd2luZG93U2hl
bGxzRW5kID0gd2luZG93U2hlbGxzLmVuZCgpOwogICAgIGZvciAoU2NyaXB0Q29udHJvbGxlcjo6
U2hlbGxNYXA6Oml0ZXJhdG9yIGl0ZXIgPSB3aW5kb3dTaGVsbHMuYmVnaW4oKTsgaXRlciAhPSB3
aW5kb3dTaGVsbHNFbmQ7ICsraXRlcikgewotICAgICAgICBET01XcmFwcGVyV29ybGQqIHdvcmxk
ID0gaXRlci0+Zmlyc3QuZ2V0KCk7Ci0gICAgICAgIEpTRE9NV2luZG93U2hlbGwqIHdpbmRvd1No
ZWxsID0gaXRlci0+c2Vjb25kLmdldCgpOworICAgICAgICBET01XcmFwcGVyV29ybGQqIHdvcmxk
ID0gaXRlci0+a2V5LmdldCgpOworICAgICAgICBKU0RPTVdpbmRvd1NoZWxsKiB3aW5kb3dTaGVs
bCA9IGl0ZXItPnZhbHVlLmdldCgpOwogCiAgICAgICAgIGlmIChKU0RPTVdpbmRvdyogd2luZG93
ID0gbV93aW5kb3dzLmdldCh3b3JsZCkuZ2V0KCkpCiAgICAgICAgICAgICB3aW5kb3dTaGVsbC0+
c2V0V2luZG93KHdpbmRvdy0+Z2xvYmFsRGF0YSgpLCB3aW5kb3cpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAppbmRleCBkYTkzOTg0ZWQ3NmMw
NDgyMDM1ZDc0OThhZTdmMDI3MWY5Njc5ZjgzLi5iOWVhZjQ3NzY5YmQ2MjdiNGViMWY5MzY2NjZm
ZDliOWIzMGZjZjY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3Jp
cHRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRD
b250cm9sbGVyLmNwcApAQCAtOTYsNyArOTYsNyBAQCBTY3JpcHRDb250cm9sbGVyOjp+U2NyaXB0
Q29udHJvbGxlcigpCiAgICAgLy8gSXQncyBsaWtlbHkgdGhhdCBkZXN0cm95aW5nIG1fd2luZG93
U2hlbGxzIHdpbGwgY3JlYXRlIGEgbG90IG9mIGdhcmJhZ2UuCiAgICAgaWYgKCFtX3dpbmRvd1No
ZWxscy5pc0VtcHR5KCkpIHsKICAgICAgICAgd2hpbGUgKCFtX3dpbmRvd1NoZWxscy5pc0VtcHR5
KCkpCi0gICAgICAgICAgICBkZXN0cm95V2luZG93U2hlbGwobV93aW5kb3dTaGVsbHMuYmVnaW4o
KS0+Zmlyc3QuZ2V0KCkpOworICAgICAgICAgICAgZGVzdHJveVdpbmRvd1NoZWxsKG1fd2luZG93
U2hlbGxzLmJlZ2luKCktPmtleS5nZXQoKSk7CiAgICAgICAgIGdjQ29udHJvbGxlcigpLmdhcmJh
Z2VDb2xsZWN0U29vbigpOwogICAgIH0KIH0KQEAgLTE4Myw3ICsxODMsNyBAQCB2b2lkIFNjcmlw
dENvbnRyb2xsZXI6OmNsZWFyV2luZG93U2hlbGwoRE9NV2luZG93KiBuZXdET01XaW5kb3csIGJv
b2wgZ29pbmdJbnRvUAogICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93QmFzZTo6Y29t
bW9uSlNHbG9iYWxEYXRhKCkpOwogCiAgICAgZm9yIChTaGVsbE1hcDo6aXRlcmF0b3IgaXRlciA9
IG1fd2luZG93U2hlbGxzLmJlZ2luKCk7IGl0ZXIgIT0gbV93aW5kb3dTaGVsbHMuZW5kKCk7ICsr
aXRlcikgewotICAgICAgICBKU0RPTVdpbmRvd1NoZWxsKiB3aW5kb3dTaGVsbCA9IGl0ZXItPnNl
Y29uZC5nZXQoKTsKKyAgICAgICAgSlNET01XaW5kb3dTaGVsbCogd2luZG93U2hlbGwgPSBpdGVy
LT52YWx1ZS5nZXQoKTsKIAogICAgICAgICBpZiAod2luZG93U2hlbGwtPndpbmRvdygpLT5pbXBs
KCkgPT0gbmV3RE9NV2luZG93KQogICAgICAgICAgICAgY29udGludWU7CkBAIC0yNzYsNyArMjc2
LDcgQEAgYm9vbCBTY3JpcHRDb250cm9sbGVyOjpjYW5BY2Nlc3NGcm9tQ3VycmVudE9yaWdpbihG
cmFtZSAqZnJhbWUpCiB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmF0dGFjaERlYnVnZ2VyKEpTQzo6
RGVidWdnZXIqIGRlYnVnZ2VyKQogewogICAgIGZvciAoU2hlbGxNYXA6Oml0ZXJhdG9yIGl0ZXIg
PSBtX3dpbmRvd1NoZWxscy5iZWdpbigpOyBpdGVyICE9IG1fd2luZG93U2hlbGxzLmVuZCgpOyAr
K2l0ZXIpCi0gICAgICAgIGF0dGFjaERlYnVnZ2VyKGl0ZXItPnNlY29uZC5nZXQoKSwgZGVidWdn
ZXIpOworICAgICAgICBhdHRhY2hEZWJ1Z2dlcihpdGVyLT52YWx1ZS5nZXQoKSwgZGVidWdnZXIp
OwogfQogCiB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmF0dGFjaERlYnVnZ2VyKEpTRE9NV2luZG93
U2hlbGwqIHNoZWxsLCBKU0M6OkRlYnVnZ2VyKiBkZWJ1Z2dlcikKQEAgLTI5Nyw4ICsyOTcsOCBA
QCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OnVwZGF0ZURvY3VtZW50KCkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgZm9yIChTaGVsbE1hcDo6aXRlcmF0b3IgaXRlciA9IG1fd2luZG93U2hlbGxzLmJl
Z2luKCk7IGl0ZXIgIT0gbV93aW5kb3dTaGVsbHMuZW5kKCk7ICsraXRlcikgewotICAgICAgICBK
U0xvY2tIb2xkZXIgbG9jayhpdGVyLT5maXJzdC0+Z2xvYmFsRGF0YSgpKTsKLSAgICAgICAgaXRl
ci0+c2Vjb25kLT53aW5kb3coKS0+dXBkYXRlRG9jdW1lbnQoKTsKKyAgICAgICAgSlNMb2NrSG9s
ZGVyIGxvY2soaXRlci0+a2V5LT5nbG9iYWxEYXRhKCkpOworICAgICAgICBpdGVyLT52YWx1ZS0+
d2luZG93KCktPnVwZGF0ZURvY3VtZW50KCk7CiAgICAgfQogfQogCkBAIC0zMzUsNyArMzM1LDcg
QEAgUGFzc1JlZlB0cjxCaW5kaW5nczo6Um9vdE9iamVjdD4gU2NyaXB0Q29udHJvbGxlcjo6Y3Jl
YXRlUm9vdE9iamVjdCh2b2lkKiBuYXRpdmUKIHsKICAgICBSb290T2JqZWN0TWFwOjppdGVyYXRv
ciBpdCA9IG1fcm9vdE9iamVjdHMuZmluZChuYXRpdmVIYW5kbGUpOwogICAgIGlmIChpdCAhPSBt
X3Jvb3RPYmplY3RzLmVuZCgpKQotICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICAgICAg
cmV0dXJuIGl0LT52YWx1ZTsKIAogICAgIFJlZlB0cjxCaW5kaW5nczo6Um9vdE9iamVjdD4gcm9v
dE9iamVjdCA9IEJpbmRpbmdzOjpSb290T2JqZWN0OjpjcmVhdGUobmF0aXZlSGFuZGxlLCBnbG9i
YWxPYmplY3QocGx1Z2luV29ybGQoKSkpOwogCkBAIC0zNTEsOCArMzUxLDggQEAgdm9pZCBTY3Jp
cHRDb250cm9sbGVyOjpzZXRDYXB0dXJlQ2FsbFN0YWNrRm9yVW5jYXVnaHRFeGNlcHRpb25zKGJv
b2wpCiB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmNvbGxlY3RJc29sYXRlZENvbnRleHRzKFZlY3Rv
cjxzdGQ6OnBhaXI8SlNDOjpFeGVjU3RhdGUqLCBTZWN1cml0eU9yaWdpbio+ID4mIHJlc3VsdCkK
IHsKICAgICBmb3IgKFNoZWxsTWFwOjppdGVyYXRvciBpdGVyID0gbV93aW5kb3dTaGVsbHMuYmVn
aW4oKTsgaXRlciAhPSBtX3dpbmRvd1NoZWxscy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIEpT
Qzo6RXhlY1N0YXRlKiBleGVjID0gaXRlci0+c2Vjb25kLT53aW5kb3coKS0+Z2xvYmFsRXhlYygp
OwotICAgICAgICBTZWN1cml0eU9yaWdpbiogb3JpZ2luID0gaXRlci0+c2Vjb25kLT53aW5kb3co
KS0+aW1wbCgpLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpOworICAgICAgICBKU0M6OkV4
ZWNTdGF0ZSogZXhlYyA9IGl0ZXItPnZhbHVlLT53aW5kb3coKS0+Z2xvYmFsRXhlYygpOworICAg
ICAgICBTZWN1cml0eU9yaWdpbiogb3JpZ2luID0gaXRlci0+dmFsdWUtPndpbmRvdygpLT5pbXBs
KCktPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCk7CiAgICAgICAgIHJlc3VsdC5hcHBlbmQo
c3RkOjpwYWlyPFNjcmlwdFN0YXRlKiwgU2VjdXJpdHlPcmlnaW4qPihleGVjLCBvcmlnaW4pKTsK
ICAgICB9CiB9CkBAIC00NDAsNyArNDQwLDcgQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpjbGVh
bnVwU2NyaXB0T2JqZWN0c0ZvclBsdWdpbih2b2lkKiBuYXRpdmVIYW5kbGUpCiAgICAgaWYgKGl0
ID09IG1fcm9vdE9iamVjdHMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGl0LT5zZWNv
bmQtPmludmFsaWRhdGUoKTsKKyAgICBpdC0+dmFsdWUtPmludmFsaWRhdGUoKTsKICAgICBtX3Jv
b3RPYmplY3RzLnJlbW92ZShpdCk7CiB9CiAKQEAgLTQ1MCw3ICs0NTAsNyBAQCB2b2lkIFNjcmlw
dENvbnRyb2xsZXI6OmNsZWFyU2NyaXB0T2JqZWN0cygpCiAKICAgICBSb290T2JqZWN0TWFwOjpj
b25zdF9pdGVyYXRvciBlbmQgPSBtX3Jvb3RPYmplY3RzLmVuZCgpOwogICAgIGZvciAoUm9vdE9i
amVjdE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Jvb3RPYmplY3RzLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+aW52YWxpZGF0ZSgpOworICAgICAgICBp
dC0+dmFsdWUtPmludmFsaWRhdGUoKTsKIAogICAgIG1fcm9vdE9iamVjdHMuY2xlYXIoKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5o
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5oCmluZGV4IGY3
NmZkZThmYzcyZjY4MDVlZjQ4YzAzYWZjMWQwNmEzYTE1NGNhODcuLmYzZGE1M2UwNTNkZjBmNmFm
OTY3MTZmYzBjMDJiMmI5NWNjMzU0ZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TY3JpcHRDb250cm9sbGVyLmgKQEAgLTc0LDEyICs3NCwxMiBAQCBwdWJsaWM6CiAgICAgSlNE
T01XaW5kb3dTaGVsbCogd2luZG93U2hlbGwoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCkKICAgICB7
CiAgICAgICAgIFNoZWxsTWFwOjppdGVyYXRvciBpdGVyID0gbV93aW5kb3dTaGVsbHMuZmluZCh3
b3JsZCk7Ci0gICAgICAgIHJldHVybiAoaXRlciAhPSBtX3dpbmRvd1NoZWxscy5lbmQoKSkgPyBp
dGVyLT5zZWNvbmQuZ2V0KCkgOiBpbml0U2NyaXB0KHdvcmxkKTsKKyAgICAgICAgcmV0dXJuIChp
dGVyICE9IG1fd2luZG93U2hlbGxzLmVuZCgpKSA/IGl0ZXItPnZhbHVlLmdldCgpIDogaW5pdFNj
cmlwdCh3b3JsZCk7CiAgICAgfQogICAgIEpTRE9NV2luZG93U2hlbGwqIGV4aXN0aW5nV2luZG93
U2hlbGwoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCkgY29uc3QKICAgICB7CiAgICAgICAgIFNoZWxs
TWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbV93aW5kb3dTaGVsbHMuZmluZCh3b3JsZCk7Ci0g
ICAgICAgIHJldHVybiAoaXRlciAhPSBtX3dpbmRvd1NoZWxscy5lbmQoKSkgPyBpdGVyLT5zZWNv
bmQuZ2V0KCkgOiAwOworICAgICAgICByZXR1cm4gKGl0ZXIgIT0gbV93aW5kb3dTaGVsbHMuZW5k
KCkpID8gaXRlci0+dmFsdWUuZ2V0KCkgOiAwOwogICAgIH0KICAgICBKU0RPTVdpbmRvdyogZ2xv
YmFsT2JqZWN0KERPTVdyYXBwZXJXb3JsZCogd29ybGQpCiAgICAgewpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCmluZGV4IGJiY2Q1NDI5OTY1
NzBmYTEzNzk5YTRlNWE4Mjk1MDMwZGU1MGEwYTEuLmI0MDEzOTI0YmU4MTY3MmNjYTE0YzdmODVi
ODFiY2RiMjZhNjJjOTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nj
cmlwdERlYnVnU2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3Jp
cHREZWJ1Z1NlcnZlci5jcHAKQEAgLTc1LDExICs3NSwxMSBAQCBTdHJpbmcgU2NyaXB0RGVidWdT
ZXJ2ZXI6OnNldEJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgY29uc3QgU2NyaXB0
QnJlYQogICAgIFNvdXJjZUlkVG9CcmVha3BvaW50c01hcDo6aXRlcmF0b3IgaXQgPSBtX3NvdXJj
ZUlkVG9CcmVha3BvaW50cy5maW5kKHNvdXJjZUlEVmFsdWUpOwogICAgIGlmIChpdCA9PSBtX3Nv
dXJjZUlkVG9CcmVha3BvaW50cy5lbmQoKSkKICAgICAgICAgaXQgPSBtX3NvdXJjZUlkVG9CcmVh
a3BvaW50cy5zZXQoc291cmNlSURWYWx1ZSwgTGluZVRvQnJlYWtwb2ludE1hcCgpKS5pdGVyYXRv
cjsKLSAgICBMaW5lVG9CcmVha3BvaW50TWFwOjppdGVyYXRvciBicmVha3NJdCA9IGl0LT5zZWNv
bmQuZmluZChzY3JpcHRCcmVha3BvaW50LmxpbmVOdW1iZXIgKyAxKTsKLSAgICBpZiAoYnJlYWtz
SXQgPT0gaXQtPnNlY29uZC5lbmQoKSkKLSAgICAgICAgYnJlYWtzSXQgPSBpdC0+c2Vjb25kLnNl
dChzY3JpcHRCcmVha3BvaW50LmxpbmVOdW1iZXIgKyAxLCBCcmVha3BvaW50c0luTGluZSgpKS5p
dGVyYXRvcjsKKyAgICBMaW5lVG9CcmVha3BvaW50TWFwOjppdGVyYXRvciBicmVha3NJdCA9IGl0
LT52YWx1ZS5maW5kKHNjcmlwdEJyZWFrcG9pbnQubGluZU51bWJlciArIDEpOworICAgIGlmIChi
cmVha3NJdCA9PSBpdC0+dmFsdWUuZW5kKCkpCisgICAgICAgIGJyZWFrc0l0ID0gaXQtPnZhbHVl
LnNldChzY3JpcHRCcmVha3BvaW50LmxpbmVOdW1iZXIgKyAxLCBCcmVha3BvaW50c0luTGluZSgp
KS5pdGVyYXRvcjsKIAotICAgIEJyZWFrcG9pbnRzSW5MaW5lJiBicmVha3NWZWN0b3IgPSBicmVh
a3NJdC0+c2Vjb25kOworICAgIEJyZWFrcG9pbnRzSW5MaW5lJiBicmVha3NWZWN0b3IgPSBicmVh
a3NJdC0+dmFsdWU7CiAgICAgdW5zaWduZWQgYnJlYWtzQ291bnQgPSBicmVha3NWZWN0b3Iuc2l6
ZSgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBicmVha3NDb3VudDsgaSsrKSB7CiAg
ICAgICAgIGlmIChicmVha3NWZWN0b3IuYXQoaSkuY29sdW1uTnVtYmVyID09IHNjcmlwdEJyZWFr
cG9pbnQuY29sdW1uTnVtYmVyKQpAQCAtMTEyLDExICsxMTIsMTEgQEAgdm9pZCBTY3JpcHREZWJ1
Z1NlcnZlcjo6cmVtb3ZlQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIGJyZWFrcG9pbnRJZCkKICAg
ICBTb3VyY2VJZFRvQnJlYWtwb2ludHNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zb3VyY2VJZFRvQnJl
YWtwb2ludHMuZmluZChzb3VyY2VJRFZhbHVlKTsKICAgICBpZiAoaXQgPT0gbV9zb3VyY2VJZFRv
QnJlYWtwb2ludHMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBMaW5lVG9CcmVha3BvaW50
TWFwOjppdGVyYXRvciBicmVha3NJdCA9IGl0LT5zZWNvbmQuZmluZChsaW5lTnVtYmVyICsgMSk7
Ci0gICAgaWYgKGJyZWFrc0l0ID09IGl0LT5zZWNvbmQuZW5kKCkpCisgICAgTGluZVRvQnJlYWtw
b2ludE1hcDo6aXRlcmF0b3IgYnJlYWtzSXQgPSBpdC0+dmFsdWUuZmluZChsaW5lTnVtYmVyICsg
MSk7CisgICAgaWYgKGJyZWFrc0l0ID09IGl0LT52YWx1ZS5lbmQoKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgQnJlYWtwb2ludHNJbkxpbmUmIGJyZWFrc1ZlY3RvciA9IGJyZWFrc0l0LT5zZWNv
bmQ7CisgICAgQnJlYWtwb2ludHNJbkxpbmUmIGJyZWFrc1ZlY3RvciA9IGJyZWFrc0l0LT52YWx1
ZTsKICAgICB1bnNpZ25lZCBicmVha3NDb3VudCA9IGJyZWFrc1ZlY3Rvci5zaXplKCk7CiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJyZWFrc0NvdW50OyBpKyspIHsKICAgICAgICAgaWYg
KGJyZWFrc1ZlY3Rvci5hdChpKS5jb2x1bW5OdW1iZXIgPT0gc3RhdGljX2Nhc3Q8aW50Pihjb2x1
bW5OdW1iZXIpKSB7CkBAIC0xNzgsMTIgKzE3OCwxMiBAQCBib29sIFNjcmlwdERlYnVnU2VydmVy
OjpoYXNCcmVha3BvaW50KGludHB0cl90IHNvdXJjZUlELCBjb25zdCBUZXh0UG9zaXRpb24mIHBv
cwogICAgIGlmIChsaW5lTnVtYmVyIDwgMCB8fCBjb2x1bW5OdW1iZXIgPCAwKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBMaW5lVG9CcmVha3BvaW50TWFwOjpjb25zdF9pdGVyYXRvciBi
cmVha3NJdCA9IGl0LT5zZWNvbmQuZmluZChsaW5lTnVtYmVyICsgMSk7Ci0gICAgaWYgKGJyZWFr
c0l0ID09IGl0LT5zZWNvbmQuZW5kKCkpCisgICAgTGluZVRvQnJlYWtwb2ludE1hcDo6Y29uc3Rf
aXRlcmF0b3IgYnJlYWtzSXQgPSBpdC0+dmFsdWUuZmluZChsaW5lTnVtYmVyICsgMSk7CisgICAg
aWYgKGJyZWFrc0l0ID09IGl0LT52YWx1ZS5lbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgYm9vbCBoaXQgPSBmYWxzZTsKLSAgICBjb25zdCBCcmVha3BvaW50c0luTGluZSYgYnJl
YWtzVmVjdG9yID0gYnJlYWtzSXQtPnNlY29uZDsKKyAgICBjb25zdCBCcmVha3BvaW50c0luTGlu
ZSYgYnJlYWtzVmVjdG9yID0gYnJlYWtzSXQtPnZhbHVlOwogICAgIHVuc2lnbmVkIGJyZWFrc0Nv
dW50ID0gYnJlYWtzVmVjdG9yLnNpemUoKTsKICAgICB1bnNpZ25lZCBpOwogICAgIGZvciAoaSA9
IDA7IGkgPCBicmVha3NDb3VudDsgaSsrKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAppbmRleCBlYTcwMjI5NWI3ZTY1MzZl
ZDQ0NjE5ODMzM2QwODcyZGQxMjQwNTNjLi41NzM0OWVmNjViYjhmNzI2OTdhZmU0NTdkNmJlNGNk
NTQxMjZkMzc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxp
emVkU2NyaXB0VmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nlcmlh
bGl6ZWRTY3JpcHRWYWx1ZS5jcHAKQEAgLTQyNSw4ICs0MjUsOCBAQCBwcml2YXRlOgogICAgICAg
ICAvLyBIYW5kbGUgZHVwbGljYXRlIHJlZmVyZW5jZXMKICAgICAgICAgaWYgKGZvdW5kICE9IG1f
b2JqZWN0UG9vbC5lbmQoKSkgewogICAgICAgICAgICAgd3JpdGUoT2JqZWN0UmVmZXJlbmNlVGFn
KTsKLSAgICAgICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQzMl90Pihmb3VuZC0+c2Vjb25k
KSA8IG1fb2JqZWN0UG9vbC5zaXplKCkpOwotICAgICAgICAgICAgd3JpdGVPYmplY3RJbmRleChm
b3VuZC0+c2Vjb25kKTsKKyAgICAgICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQzMl90Pihm
b3VuZC0+dmFsdWUpIDwgbV9vYmplY3RQb29sLnNpemUoKSk7CisgICAgICAgICAgICB3cml0ZU9i
amVjdEluZGV4KGZvdW5kLT52YWx1ZSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgfQogCkBAIC02ODMsNyArNjgzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBPYmpl
Y3RQb29sOjppdGVyYXRvciBpbmRleCA9IG1fdHJhbnNmZXJyZWRNZXNzYWdlUG9ydHMuZmluZChv
YmopOwogICAgICAgICAgICAgICAgIGlmIChpbmRleCAhPSBtX3RyYW5zZmVycmVkTWVzc2FnZVBv
cnRzLmVuZCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIHdyaXRlKE1lc3NhZ2VQb3J0UmVmZXJl
bmNlVGFnKTsKLSAgICAgICAgICAgICAgICAgICAgd3JpdGUoaW5kZXgtPnNlY29uZCk7CisgICAg
ICAgICAgICAgICAgICAgIHdyaXRlKGluZGV4LT52YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAvLyBNZXNz
YWdlUG9ydCBvYmplY3QgY291bGQgbm90IGJlIGZvdW5kIGluIHRyYW5zZmVycmVkIG1lc3NhZ2Ug
cG9ydHMKQEAgLTY5OSw3ICs2OTksNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIE9iamVj
dFBvb2w6Oml0ZXJhdG9yIGluZGV4ID0gbV90cmFuc2ZlcnJlZEFycmF5QnVmZmVycy5maW5kKG9i
aik7CiAgICAgICAgICAgICAgICAgaWYgKGluZGV4ICE9IG1fdHJhbnNmZXJyZWRBcnJheUJ1ZmZl
cnMuZW5kKCkpIHsKICAgICAgICAgICAgICAgICAgICAgd3JpdGUoQXJyYXlCdWZmZXJUcmFuc2Zl
clRhZyk7Ci0gICAgICAgICAgICAgICAgICAgIHdyaXRlKGluZGV4LT5zZWNvbmQpOworICAgICAg
ICAgICAgICAgICAgICB3cml0ZShpbmRleC0+dmFsdWUpOwogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKCFzdGFy
dE9iamVjdEludGVybmFsKG9iaikpIC8vIGhhbmRsZSBkdXBsaWNhdGVzCkBAIC03OTYsNyArNzk2
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgU3RyaW5nQ29uc3RhbnRQb29sOjpBZGRSZXN1bHQgYWRk
UmVzdWx0ID0gbV9jb25zdGFudFBvb2wuYWRkKHN0ci5pbXBsKCksIG1fY29uc3RhbnRQb29sLnNp
emUoKSk7CiAgICAgICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKICAgICAgICAgICAg
IHdyaXRlKFN0cmluZ1Bvb2xUYWcpOwotICAgICAgICAgICAgd3JpdGVTdHJpbmdJbmRleChhZGRS
ZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7CisgICAgICAgICAgICB3cml0ZVN0cmluZ0luZGV4KGFk
ZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVy
YXRvclY4LnBtIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
VjgucG0KaW5kZXggMmQ3OTU3Y2ZiNjJhMGMxN2NlOWJhZDVjMjA4N2RlYmU0NzUzYzIwYi4uZmZm
YzA2ZDcxZjRlZTJhZTQzN2UxY2ZiZTE4YTU4YzE4Yzg1YmY2NSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KQEAgLTI5NzcsNyAr
Mjk3Nyw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiAke2NsYXNzTmFt
ZX06OkdldFJhd1RlbXBsYXRlKCkKICAgICBWOFBlcklzb2xhdGVEYXRhKiBkYXRhID0gVjhQZXJJ
c29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4UGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFw
OjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwog
ICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAg
cmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAog
ICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6
RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPSBjcmVhdGVSYXdUZW1wbGF0ZSgpOwpAQCAtMjk5MCw3
ICsyOTkwLDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+ICR7Y2xhc3NO
YW1lfTo6R2V0VGVtcGxhdGUoKQogICAgIFY4UGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOFBlcklz
b2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6
Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAg
aWYgKHJlc3VsdCAhPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4g
cmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6
OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlv
blRlbXBsYXRlPiB0ZW1wbCA9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVjgvVjhGbG9hdDY0QXJyYXkuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4RmxvYXQ2NEFycmF5LmNwcAppbmRleCBiZGE0N2E1YWNkZWI5
ZWJmN2FlZGJkMWYzZDMzY2Y5ZDE1NGY0NDBkLi4xYmY2ODI0MmFhNTcxNjYwMDE2YThmZmE5ZWFj
OGIxMWJhZDk2NjAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVjgvVjhGbG9hdDY0QXJyYXkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9WOC9WOEZsb2F0NjRBcnJheS5jcHAKQEAgLTExOSw3ICsxMTksNyBAQCB2
ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhGbG9hdDY0QXJyYXk6OkdldFJh
d1RlbXBsYXRlKCkKICAgICBWOFBlcklzb2xhdGVEYXRhKiBkYXRhID0gVjhQZXJJc29sYXRlRGF0
YTo6Y3VycmVudCgpOwogICAgIFY4UGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRv
ciByZXN1bHQgPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwogICAgIGlmIChy
ZXN1bHQgIT0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHJl
c3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAogICAgIHY4OjpI
YW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25U
ZW1wbGF0ZT4gdGVtcGwgPSBjcmVhdGVSYXdUZW1wbGF0ZSgpOwpAQCAtMTMyLDcgKzEzMiw3IEBA
IHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOEZsb2F0NjRBcnJheTo6R2V0
VGVtcGxhdGUoKQogICAgIFY4UGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOFBlcklzb2xhdGVEYXRh
OjpjdXJyZW50KCk7CiAgICAgVjhQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9y
IHJlc3VsdCA9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3Vs
dCAhPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5z
ZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNj
b3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRl
PiB0ZW1wbCA9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVjgvVjhUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RBY3RpdmVET01PYmplY3QuY3BwCmluZGV4IGMyYzk5NDA0
NTlhMzFkZWE2MjQ5ZjcxZWVmYWZmNmMyYzEwNjAyYWUuLjVkMmQ1Y2FiY2NjOGFkNzc3YzkzZGQz
NTU3MTY4OWY5N2RlODYzYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9WOC9WOFRlc3RBY3RpdmVET01PYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RBY3RpdmVET01PYmplY3QuY3BwCkBA
IC0xNDgsNyArMTQ4LDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4
VGVzdEFjdGl2ZURPTU9iamVjdDo6R2V0UmF3VGVtcGxhdGUoKQogICAgIFY4UGVySXNvbGF0ZURh
dGEqIGRhdGEgPSBWOFBlcklzb2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhQZXJJc29sYXRl
RGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnJhd1RlbXBsYXRlTWFw
KCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgp
LmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBy
ZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4
OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9IGNyZWF0ZVJhd1RlbXBs
YXRlKCk7CkBAIC0xNjEsNyArMTYxLDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVt
cGxhdGU+IFY4VGVzdEFjdGl2ZURPTU9iamVjdDo6R2V0VGVtcGxhdGUoKQogICAgIFY4UGVySXNv
bGF0ZURhdGEqIGRhdGEgPSBWOFBlcklzb2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhQZXJJ
c29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnRlbXBsYXRl
TWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT50ZW1wbGF0ZU1hcCgp
LmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBy
ZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4
OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Q3VzdG9tTmFtZWRH
ZXR0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVz
dEN1c3RvbU5hbWVkR2V0dGVyLmNwcAppbmRleCA4OTc1Y2Y2MzI1ZTIwNmUzNzA4NjI0MzM5Yzhl
MzJhZGY3ZjEwZGNiLi5lNGQyZjdkNGM0YWM3ZmQwMGRlN2RkZDNmYmYzNjQyZjBiYzY4OTlkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0
Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9WOC9WOFRlc3RDdXN0b21OYW1lZEdldHRlci5jcHAKQEAgLTgyLDcgKzgyLDcgQEAg
djg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdEN1c3RvbU5hbWVkR2V0
dGVyOjpHZXRSYXdUZW1wbGF0ZSgpCiAgICAgVjhQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4UGVy
SXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOFBlcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1h
cDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsK
ICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAg
IHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAK
ICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6
OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0gY3JlYXRlUmF3VGVtcGxhdGUoKTsKQEAgLTk1LDcg
Kzk1LDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdEN1c3Rv
bU5hbWVkR2V0dGVyOjpHZXRUZW1wbGF0ZSgpCiAgICAgVjhQZXJJc29sYXRlRGF0YSogZGF0YSA9
IFY4UGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOFBlcklzb2xhdGVEYXRhOjpUZW1w
bGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+dGVtcGxhdGVNYXAoKS5maW5kKCZpbmZv
KTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAg
IHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAK
ICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6
OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudENvbnN0cnVjdG9yLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudENvbnN0cnVjdG9y
LmNwcAppbmRleCBmZTNlYjRmZmYwNTA2OGY0MGQyYzc1YjUxMTExMTI1NjQxMDE1ZTEyLi4zMjYz
ODNjMzk5MjNhNTY2N2Q0Y2VjOTllNTBkNWQ1ZmJlYmQwNzZmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRDb25zdHJ1Y3Rvci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2
ZW50Q29uc3RydWN0b3IuY3BwCkBAIC0xMTksNyArMTE5LDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6
OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdEV2ZW50Q29uc3RydWN0b3I6OkdldFJhd1RlbXBsYXRl
KCkKICAgICBWOFBlcklzb2xhdGVEYXRhKiBkYXRhID0gVjhQZXJJc29sYXRlRGF0YTo6Y3VycmVu
dCgpOwogICAgIFY4UGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQg
PSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwogICAgIGlmIChyZXN1bHQgIT0g
ZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vj
b25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVTY29w
ZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4g
dGVtcGwgPSBjcmVhdGVSYXdUZW1wbGF0ZSgpOwpAQCAtMTMyLDcgKzEzMiw3IEBAIHY4OjpQZXJz
aXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3RFdmVudENvbnN0cnVjdG9yOjpHZXRU
ZW1wbGF0ZSgpCiAgICAgVjhQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4UGVySXNvbGF0ZURhdGE6
OmN1cnJlbnQoKTsKICAgICBWOFBlcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3Ig
cmVzdWx0ID0gZGF0YS0+dGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0
ICE9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNl
Y29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2Nv
cGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+
IHRlbXBsID0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9WOC9WOFRlc3RFdmVudFRhcmdldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRUYXJnZXQuY3BwCmluZGV4IDE5NDBkN2RiZGJlYTg0MjJk
N2M2M2U4MWM4YWExNGQzOGUyOGU0MGIuLmVkYmVmM2JiYTc0MGI5YTE2NDJmZTNmZWQxYjM5NTVm
NzY1OTY5YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9WOC9WOFRlc3RFdmVudFRhcmdldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50VGFyZ2V0LmNwcApAQCAtMTQzLDcgKzE0Myw3IEBA
IHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3RFdmVudFRhcmdldDo6
R2V0UmF3VGVtcGxhdGUoKQogICAgIFY4UGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOFBlcklzb2xh
dGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0
ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAg
aWYgKHJlc3VsdCAhPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1
cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAg
djg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5j
dGlvblRlbXBsYXRlPiB0ZW1wbCA9IGNyZWF0ZVJhd1RlbXBsYXRlKCk7CkBAIC0xNTYsNyArMTU2
LDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdEV2ZW50VGFy
Z2V0OjpHZXRUZW1wbGF0ZSgpCiAgICAgVjhQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4UGVySXNv
bGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOFBlcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6
aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+dGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBp
ZiAocmVzdWx0ICE9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiBy
ZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6
SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9u
VGVtcGxhdGU+IHRlbXBsID0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9WOC9WOFRlc3RFeGNlcHRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV4Y2VwdGlvbi5jcHAKaW5kZXggOTM3NWNlMzEwNjM5
NDQ2NDBjNWIwZjZmNzcxYmExODA5Mzg2OTMwNS4uNTBhODdkNjY0YjJiODgzNmFmZDdmNTUyMjBm
ODNkMDQzNmQzNzFkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Y4L1Y4VGVzdEV4Y2VwdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV4Y2VwdGlvbi5jcHAKQEAgLTczLDcgKzczLDcgQEAg
djg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdEV4Y2VwdGlvbjo6R2V0
UmF3VGVtcGxhdGUoKQogICAgIFY4UGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOFBlcklzb2xhdGVE
YXRhOjpjdXJyZW50KCk7CiAgICAgVjhQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJh
dG9yIHJlc3VsdCA9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYg
KHJlc3VsdCAhPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4g
cmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6
OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlv
blRlbXBsYXRlPiB0ZW1wbCA9IGNyZWF0ZVJhd1RlbXBsYXRlKCk7CkBAIC04Niw3ICs4Niw3IEBA
IHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3RFeGNlcHRpb246Okdl
dFRlbXBsYXRlKCkKICAgICBWOFBlcklzb2xhdGVEYXRhKiBkYXRhID0gVjhQZXJJc29sYXRlRGF0
YTo6Y3VycmVudCgpOwogICAgIFY4UGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRv
ciByZXN1bHQgPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwogICAgIGlmIChyZXN1
bHQgIT0gZGF0YS0+dGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC0+
c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVT
Y29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0
ZT4gdGVtcGwgPQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Y4L1Y4VGVzdEludGVyZmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVjgvVjhUZXN0SW50ZXJmYWNlLmNwcAppbmRleCAwMDk4ZDVlYjBiODQ4ZDY4MTY2
MWIwMzU5ZDlhOGMzMDM1ODI4N2E5Li5jMDJhODg1NjU5ODliYTU3YjNhMjE0MzRhZTljMmVkZWNl
Y2U4NDk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VjgvVjhUZXN0SW50ZXJmYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVjgvVjhUZXN0SW50ZXJmYWNlLmNwcApAQCAtMzEyLDcgKzMxMiw3IEBAIHY4OjpQ
ZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3RJbnRlcmZhY2U6OkdldFJhd1Rl
bXBsYXRlKCkKICAgICBWOFBlcklzb2xhdGVEYXRhKiBkYXRhID0gVjhQZXJJc29sYXRlRGF0YTo6
Y3VycmVudCgpOwogICAgIFY4UGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciBy
ZXN1bHQgPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwogICAgIGlmIChyZXN1
bHQgIT0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAogICAgIHY4OjpIYW5k
bGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1w
bGF0ZT4gdGVtcGwgPSBjcmVhdGVSYXdUZW1wbGF0ZSgpOwpAQCAtMzI1LDcgKzMyNSw3IEBAIHY4
OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3RJbnRlcmZhY2U6OkdldFRl
bXBsYXRlKCkKICAgICBWOFBlcklzb2xhdGVEYXRhKiBkYXRhID0gVjhQZXJJc29sYXRlRGF0YTo6
Y3VycmVudCgpOwogICAgIFY4UGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciBy
ZXN1bHQgPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwogICAgIGlmIChyZXN1bHQg
IT0gZGF0YS0+dGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vj
b25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVTY29w
ZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4g
dGVtcGwgPQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Y4L1Y4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCmlu
ZGV4IGFjMTE2Nzk5OGQwOGM3NWQ0NmY4NzYwMTljNzg5ZTQ3ZTJjYjdhM2YuLmRkOGM1OTJhYTkw
ZDc2NGUwMTNkNzg5NzQxY2JhZTYxZjliYWRmMjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TWVk
aWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAKQEAgLTgyLDcgKzgyLDcgQEAgdjg6OlBlcnNpc3RlbnQ8
djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI6OkdldFJh
d1RlbXBsYXQKICAgICBWOFBlcklzb2xhdGVEYXRhKiBkYXRhID0gVjhQZXJJc29sYXRlRGF0YTo6
Y3VycmVudCgpOwogICAgIFY4UGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciBy
ZXN1bHQgPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwogICAgIGlmIChyZXN1
bHQgIT0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAogICAgIHY4OjpIYW5k
bGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1w
bGF0ZT4gdGVtcGwgPSBjcmVhdGVSYXdUZW1wbGF0ZSgpOwpAQCAtOTUsNyArOTUsNyBAQCB2ODo6
UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0
ZW5lcjo6R2V0VGVtcGxhdGUoKQogICAgIFY4UGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOFBlcklz
b2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6
Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAg
aWYgKHJlc3VsdCAhPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4g
cmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6
OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlv
blRlbXBsYXRlPiB0ZW1wbCA9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVjgvVjhUZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAKaW5k
ZXggN2E3NGY1ODI3OTJhODE2ODFlNDIyZWNkZWFkNDViMTY0ZmNjODE3OS4uNjc2MzVjZmYzZGNl
Y2JiM2FmNTkyOWRlM2YyMDc2YTdhZDhmMWMxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROYW1lZENvbnN0
cnVjdG9yLmNwcApAQCAtMTIyLDcgKzEyMiw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlv
blRlbXBsYXRlPiBWOFRlc3ROYW1lZENvbnN0cnVjdG9yOjpHZXRSYXdUZW1wbGF0ZSgpCiAgICAg
VjhQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4UGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAg
ICBWOFBlcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+
cmF3VGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnJh
d1RlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxl
U2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0g
Y3JlYXRlUmF3VGVtcGxhdGUoKTsKQEAgLTEzNSw3ICsxMzUsNyBAQCB2ODo6UGVyc2lzdGVudDx2
ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6R2V0VGVtcGxhdGUo
KQogICAgIFY4UGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOFBlcklzb2xhdGVEYXRhOjpjdXJyZW50
KCk7CiAgICAgVjhQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9
IGRhdGEtPnRlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRh
LT50ZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7Cisg
ICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRs
ZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhU
ZXN0Tm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhU
ZXN0Tm9kZS5jcHAKaW5kZXggY2U0MmY5MmVkOWY2OWY0NDkwZDYwYzY3MjFkZGE2OTA5ZDJhYzEz
MC4uNDkwZjkxMTdhZGJmNjE3NjZhOTliM2I2MDliNWQwYWRiZTNhNWRhZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5vZGUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROb2RlLmNw
cApAQCAtODEsNyArODEsNyBAQCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4g
VjhUZXN0Tm9kZTo6R2V0UmF3VGVtcGxhdGUoKQogICAgIFY4UGVySXNvbGF0ZURhdGEqIGRhdGEg
PSBWOFBlcklzb2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhQZXJJc29sYXRlRGF0YTo6VGVt
cGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZmluZCgm
aW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmVuZCgpKQot
ICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZh
bHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0
ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9IGNyZWF0ZVJhd1RlbXBsYXRlKCk7CkBA
IC05NCw3ICs5NCw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRl
c3ROb2RlOjpHZXRUZW1wbGF0ZSgpCiAgICAgVjhQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4UGVy
SXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOFBlcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1h
cDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+dGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAg
ICBpZiAocmVzdWx0ICE9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVy
biByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2
ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0
aW9uVGVtcGxhdGU+IHRlbXBsID0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKaW5kZXggMzdkNzM5MzkzNDRmYzdhMDA5Yjcx
NmU3MjNjMjczYzE3N2Y0MmFkYy4uMjg1MmExYzQ5ZjIyMmY2YzI5MDZmOWNiNDg4YTRhYjhlMGJi
ODZhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4
L1Y4VGVzdE9iai5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Y4L1Y4VGVzdE9iai5jcHAKQEAgLTIyNjcsNyArMjI2Nyw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4
OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3RPYmo6OkdldFJhd1RlbXBsYXRlKCkKICAgICBWOFBl
cklzb2xhdGVEYXRhKiBkYXRhID0gVjhQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4
UGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT5yYXdU
ZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+cmF3VGVt
cGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAg
ICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29w
ZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPSBjcmVh
dGVSYXdUZW1wbGF0ZSgpOwpAQCAtMjI4MCw3ICsyMjgwLDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6
OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdE9iajo6R2V0VGVtcGxhdGUoKQogICAgIFY4UGVySXNv
bGF0ZURhdGEqIGRhdGEgPSBWOFBlcklzb2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhQZXJJ
c29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnRlbXBsYXRl
TWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT50ZW1wbGF0ZU1hcCgp
LmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBy
ZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4
OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCmluZGV4IGFl
OGQxOGQ0NWNmZGM1YWM0OWEzYWRkYmM0MWY0Y2Y1MmI5YWRlYWUuLjk4NjNkNzQxYWRlNmY0M2Fh
NWViMDE2NTcwYjQzZDZiMmY3MDE1ZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCkBAIC0yNjUsNyArMjY1LDcgQEAgdjg6
OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZTo6R2V0UmEKICAgICBWOFBlcklzb2xhdGVEYXRhKiBkYXRhID0gVjhQZXJJ
c29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4UGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFw
OjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwog
ICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAg
cmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAog
ICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6
RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPSBjcmVhdGVSYXdUZW1wbGF0ZSgpOwpAQCAtMjc4LDcg
KzI3OCw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OkdldFRlCiAgICAgVjhQZXJJc29sYXRlRGF0YSog
ZGF0YSA9IFY4UGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOFBlcklzb2xhdGVEYXRh
OjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+dGVtcGxhdGVNYXAoKS5maW5k
KCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZW5kKCkpCi0g
ICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFs
dWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3Rl
bnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L0RPTVdyYXBwZXJXb3JsZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9ET01XcmFwcGVyV29ybGQuY3BwCmluZGV4IDMxYTAyODZjNDUxZjc2N2RjZDNlYjQ0
MWE3ZmU4YzEzZmNjY2IzMWYuLjUyNzM3OTYzNzRlOWUyOGYwNDQ4ODA0NjliNzcyMjA2OTNmMjE4
Y2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTVdyYXBwZXJXb3Js
ZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NV3JhcHBlcldvcmxkLmNw
cApAQCAtODIsNyArODIsNyBAQCB2b2lkIERPTVdyYXBwZXJXb3JsZDo6ZGVhbGxvY2F0ZShET01X
cmFwcGVyV29ybGQqIHdvcmxkKQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KLSAgICBBU1NFUlQoaS0+c2Vjb25kID09IHdvcmxkKTsKKyAgICBB
U1NFUlQoaS0+dmFsdWUgPT0gd29ybGQpOwogCiAgICAgbWFwLnJlbW92ZShpKTsKICAgICBpc29s
YXRlZFdvcmxkQ291bnQtLTsKQEAgLTEwMSw5ICsxMDEsOSBAQCBQYXNzUmVmUHRyPERPTVdyYXBw
ZXJXb3JsZD4gRE9NV3JhcHBlcldvcmxkOjpnZXRPckNyZWF0ZUlzb2xhdGVkV29ybGQoaW50IHdv
cmxkSQogICAgIGVsc2UgewogICAgICAgICBXb3JsZE1hcDo6aXRlcmF0b3IgaSA9IG1hcC5maW5k
KHdvcmxkSWQpOwogICAgICAgICBpZiAoaSAhPSBtYXAuZW5kKCkpIHsKLSAgICAgICAgICAgIEFT
U0VSVChpLT5zZWNvbmQtPndvcmxkSWQoKSA9PSB3b3JsZElkKTsKLSAgICAgICAgICAgIEFTU0VS
VChpLT5zZWNvbmQtPmV4dGVuc2lvbkdyb3VwKCkgPT0gZXh0ZW5zaW9uR3JvdXApOwotICAgICAg
ICAgICAgcmV0dXJuIGktPnNlY29uZDsKKyAgICAgICAgICAgIEFTU0VSVChpLT52YWx1ZS0+d29y
bGRJZCgpID09IHdvcmxkSWQpOworICAgICAgICAgICAgQVNTRVJUKGktPnZhbHVlLT5leHRlbnNp
b25Hcm91cCgpID09IGV4dGVuc2lvbkdyb3VwKTsKKyAgICAgICAgICAgIHJldHVybiBpLT52YWx1
ZTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvTlBWOE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9OUFY4T2Jq
ZWN0LmNwcAppbmRleCBhMzJiNDRlYTU5NjkwNDM2Yzk0NTE3MzczNWQzZTk1OTA5NGQ2MGNkLi5i
NWYzYzY2YjMzYjdjNTgyM2RmMDU0YWY1NzgyYjUwOTllMDdmNjAyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9OUFY4T2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9OUFY4T2JqZWN0LmNwcApAQCAtODYsNyArODYsNyBAQCBzdGF0aWMgdm9p
ZCBmcmVlVjhOUE9iamVjdChOUE9iamVjdCogbnBPYmplY3QpCiAgICAgaWYgKGludCB2OE9iamVj
dEhhc2ggPSB2OE5wT2JqZWN0LT52OE9iamVjdC0+R2V0SWRlbnRpdHlIYXNoKCkpIHsKICAgICAg
ICAgVjhOUE9iamVjdE1hcDo6aXRlcmF0b3IgaXRlciA9IHN0YXRpY1Y4TlBPYmplY3RNYXAoKS0+
ZmluZCh2OE9iamVjdEhhc2gpOwogICAgICAgICBpZiAoaXRlciAhPSBzdGF0aWNWOE5QT2JqZWN0
TWFwKCktPmVuZCgpKSB7Ci0gICAgICAgICAgICBWOE5QT2JqZWN0VmVjdG9yJiBvYmplY3RzID0g
aXRlci0+c2Vjb25kOworICAgICAgICAgICAgVjhOUE9iamVjdFZlY3RvciYgb2JqZWN0cyA9IGl0
ZXItPnZhbHVlOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG9i
amVjdHMuc2l6ZSgpOyArK2luZGV4KSB7CiAgICAgICAgICAgICAgICAgaWYgKG9iamVjdHMuYXQo
aW5kZXgpID09IHY4TnBPYmplY3QpIHsKICAgICAgICAgICAgICAgICAgICAgb2JqZWN0cy5yZW1v
dmUoaW5kZXgpOwpAQCAtMTYxLDcgKzE2MSw3IEBAIE5QT2JqZWN0KiBucENyZWF0ZVY4U2NyaXB0
T2JqZWN0KE5QUCBucHAsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0LCBET01XaW5kCiAg
ICAgQVNTRVJUKHY4T2JqZWN0SGFzaCk7CiAgICAgVjhOUE9iamVjdE1hcDo6aXRlcmF0b3IgaXRl
ciA9IHN0YXRpY1Y4TlBPYmplY3RNYXAoKS0+ZmluZCh2OE9iamVjdEhhc2gpOwogICAgIGlmIChp
dGVyICE9IHN0YXRpY1Y4TlBPYmplY3RNYXAoKS0+ZW5kKCkpIHsKLSAgICAgICAgVjhOUE9iamVj
dFZlY3RvciYgb2JqZWN0cyA9IGl0ZXItPnNlY29uZDsKKyAgICAgICAgVjhOUE9iamVjdFZlY3Rv
ciYgb2JqZWN0cyA9IGl0ZXItPnZhbHVlOwogICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7
IGluZGV4IDwgb2JqZWN0cy5zaXplKCk7ICsraW5kZXgpIHsKICAgICAgICAgICAgIFY4TlBPYmpl
Y3QqIHY4bnBPYmplY3QgPSBvYmplY3RzLmF0KGluZGV4KTsKICAgICAgICAgICAgIGlmICh2OG5w
T2JqZWN0LT5yb290T2JqZWN0ID09IHJvb3QpIHsKQEAgLTE4MSw3ICsxODEsNyBAQCBOUE9iamVj
dCogbnBDcmVhdGVWOFNjcmlwdE9iamVjdChOUFAgbnBwLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IG9iamVjdCwgRE9NV2luZAogI2VuZGlmCiAgICAgdjhucE9iamVjdC0+cm9vdE9iamVjdCA9IHJv
b3Q7CiAKLSAgICBpdGVyLT5zZWNvbmQuYXBwZW5kKHY4bnBPYmplY3QpOworICAgIGl0ZXItPnZh
bHVlLmFwcGVuZCh2OG5wT2JqZWN0KTsKIAogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PE5Q
T2JqZWN0Kj4odjhucE9iamVjdCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1NjcmlwdENvbnRyb2xsZXIuY3BwCmluZGV4IDZhMTNkZWFhYzM5ZjhlMGFlYWJiODExNTAyYjk3
YTZkNmYwMDQ2MTEuLjM4N2Q5MzFiOWFhZTUwZDkwN2QyMjg2OGVhYjcwYWI0MTdlNjJiYmMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwCkBA
IC0xMjgsOCArMTI4LDggQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpjbGVhclNjcmlwdE9iamVj
dHMoKQogewogICAgIFBsdWdpbk9iamVjdE1hcDo6aXRlcmF0b3IgaXQgPSBtX3BsdWdpbk9iamVj
dHMuYmVnaW4oKTsKICAgICBmb3IgKDsgaXQgIT0gbV9wbHVnaW5PYmplY3RzLmVuZCgpOyArK2l0
KSB7Ci0gICAgICAgIF9OUE5fVW5yZWdpc3Rlck9iamVjdChpdC0+c2Vjb25kKTsKLSAgICAgICAg
X05QTl9SZWxlYXNlT2JqZWN0KGl0LT5zZWNvbmQpOworICAgICAgICBfTlBOX1VucmVnaXN0ZXJP
YmplY3QoaXQtPnZhbHVlKTsKKyAgICAgICAgX05QTl9SZWxlYXNlT2JqZWN0KGl0LT52YWx1ZSk7
CiAgICAgfQogICAgIG1fcGx1Z2luT2JqZWN0cy5jbGVhcigpOwogCkBAIC0xNTcsNyArMTU3LDcg
QEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpyZXNldElzb2xhdGVkV29ybGRzKCkKIHsKICAgICBm
b3IgKElzb2xhdGVkV29ybGRNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2lzb2xhdGVkV29ybGRzLmJl
Z2luKCk7CiAgICAgICAgICBpdGVyICE9IG1faXNvbGF0ZWRXb3JsZHMuZW5kKCk7ICsraXRlcikg
ewotICAgICAgICBpdGVyLT5zZWNvbmQtPmRlc3Ryb3koKTsKKyAgICAgICAgaXRlci0+dmFsdWUt
PmRlc3Ryb3koKTsKICAgICB9CiAgICAgbV9pc29sYXRlZFdvcmxkcy5jbGVhcigpOwogICAgIG1f
aXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2lucy5jbGVhcigpOwpAQCAtMzQ0LDcgKzM0NCw3IEBA
IHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQodW5zaWduZWQg
d29ybGRJRCwgY29uc3QgVmVjdG9yPFNjCiAgICAgICAgIGlmICh3b3JsZElEID4gMCkgewogICAg
ICAgICAgICAgSXNvbGF0ZWRXb3JsZE1hcDo6aXRlcmF0b3IgaXRlciA9IG1faXNvbGF0ZWRXb3Js
ZHMuZmluZCh3b3JsZElEKTsKICAgICAgICAgICAgIGlmIChpdGVyICE9IG1faXNvbGF0ZWRXb3Js
ZHMuZW5kKCkpCi0gICAgICAgICAgICAgICAgaXNvbGF0ZWRDb250ZXh0ID0gaXRlci0+c2Vjb25k
OworICAgICAgICAgICAgICAgIGlzb2xhdGVkQ29udGV4dCA9IGl0ZXItPnZhbHVlOwogICAgICAg
ICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgaXNvbGF0ZWRDb250ZXh0ID0gbmV3IFY4SXNv
bGF0ZWRDb250ZXh0KG1fZnJhbWUsIERPTVdyYXBwZXJXb3JsZDo6Z2V0T3JDcmVhdGVJc29sYXRl
ZFdvcmxkKHdvcmxkSUQsIGV4dGVuc2lvbkdyb3VwKSk7CiAgICAgICAgICAgICAgICAgaWYgKGlz
b2xhdGVkQ29udGV4dC0+Y29udGV4dCgpLklzRW1wdHkoKSkgewpAQCAtMzU4LDcgKzM1OCw3IEBA
IHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQodW5zaWduZWQg
d29ybGRJRCwgY29uc3QgVmVjdG9yPFNjCiAKICAgICAgICAgICAgIElzb2xhdGVkV29ybGRTZWN1
cml0eU9yaWdpbk1hcDo6aXRlcmF0b3Igc2VjdXJpdHlPcmlnaW5JdGVyID0gbV9pc29sYXRlZFdv
cmxkU2VjdXJpdHlPcmlnaW5zLmZpbmQod29ybGRJRCk7CiAgICAgICAgICAgICBpZiAoc2VjdXJp
dHlPcmlnaW5JdGVyICE9IG1faXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2lucy5lbmQoKSkKLSAg
ICAgICAgICAgICAgICBpc29sYXRlZENvbnRleHQtPnNldFNlY3VyaXR5T3JpZ2luKHNlY3VyaXR5
T3JpZ2luSXRlci0+c2Vjb25kKTsKKyAgICAgICAgICAgICAgICBpc29sYXRlZENvbnRleHQtPnNl
dFNlY3VyaXR5T3JpZ2luKHNlY3VyaXR5T3JpZ2luSXRlci0+dmFsdWUpOwogICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgaXNvbGF0ZWRDb250ZXh0ID0gbmV3IFY4SXNvbGF0ZWRDb250ZXh0
KG1fZnJhbWUsIERPTVdyYXBwZXJXb3JsZDo6Z2V0T3JDcmVhdGVJc29sYXRlZFdvcmxkKHdvcmxk
SUQsIGV4dGVuc2lvbkdyb3VwKSk7CiAgICAgICAgICAgICBpZiAoaXNvbGF0ZWRDb250ZXh0LT5j
b250ZXh0KCkuSXNFbXB0eSgpKSB7CkBAIC0zOTYsNyArMzk2LDcgQEAgdm9pZCBTY3JpcHRDb250
cm9sbGVyOjpzZXRJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4oaW50IHdvcmxkSUQsIFBhc3NS
ZWZQdHI8U2UKICAgICBtX2lzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbnMuc2V0KHdvcmxkSUQs
IHNlY3VyaXR5T3JpZ2luKTsKICAgICBJc29sYXRlZFdvcmxkTWFwOjppdGVyYXRvciBpdGVyID0g
bV9pc29sYXRlZFdvcmxkcy5maW5kKHdvcmxkSUQpOwogICAgIGlmIChpdGVyICE9IG1faXNvbGF0
ZWRXb3JsZHMuZW5kKCkpCi0gICAgICAgIGl0ZXItPnNlY29uZC0+c2V0U2VjdXJpdHlPcmlnaW4o
c2VjdXJpdHlPcmlnaW4pOworICAgICAgICBpdGVyLT52YWx1ZS0+c2V0U2VjdXJpdHlPcmlnaW4o
c2VjdXJpdHlPcmlnaW4pOwogfQogCiBUZXh0UG9zaXRpb24gU2NyaXB0Q29udHJvbGxlcjo6ZXZl
bnRIYW5kbGVyUG9zaXRpb24oKSBjb25zdApAQCAtNTQ2LDggKzU0Niw4IEBAIHZvaWQgU2NyaXB0
Q29udHJvbGxlcjo6Y2xlYW51cFNjcmlwdE9iamVjdHNGb3JQbHVnaW4oV2lkZ2V0KiBuYXRpdmVI
YW5kbGUpCiAgICAgUGx1Z2luT2JqZWN0TWFwOjppdGVyYXRvciBpdCA9IG1fcGx1Z2luT2JqZWN0
cy5maW5kKG5hdGl2ZUhhbmRsZSk7CiAgICAgaWYgKGl0ID09IG1fcGx1Z2luT2JqZWN0cy5lbmQo
KSkKICAgICAgICAgcmV0dXJuOwotICAgIF9OUE5fVW5yZWdpc3Rlck9iamVjdChpdC0+c2Vjb25k
KTsKLSAgICBfTlBOX1JlbGVhc2VPYmplY3QoaXQtPnNlY29uZCk7CisgICAgX05QTl9VbnJlZ2lz
dGVyT2JqZWN0KGl0LT52YWx1ZSk7CisgICAgX05QTl9SZWxlYXNlT2JqZWN0KGl0LT52YWx1ZSk7
CiAgICAgbV9wbHVnaW5PYmplY3RzLnJlbW92ZShpdCk7CiB9CiAKQEAgLTY2Myw3ICs2NjMsNyBA
QCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmNvbGxlY3RJc29sYXRlZENvbnRleHRzKFZlY3Rvcjxz
dGQ6OnBhaXI8U2NyaXB0U3RhdGUqLCBTZQogewogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVT
Y29wZTsKICAgICBmb3IgKElzb2xhdGVkV29ybGRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pc29sYXRl
ZFdvcmxkcy5iZWdpbigpOyBpdCAhPSBtX2lzb2xhdGVkV29ybGRzLmVuZCgpOyArK2l0KSB7Ci0g
ICAgICAgIFY4SXNvbGF0ZWRDb250ZXh0KiBpc29sYXRlZENvbnRleHQgPSBpdC0+c2Vjb25kOwor
ICAgICAgICBWOElzb2xhdGVkQ29udGV4dCogaXNvbGF0ZWRDb250ZXh0ID0gaXQtPnZhbHVlOwog
ICAgICAgICBpZiAoIWlzb2xhdGVkQ29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiB2OENvbnRleHQg
PSBpc29sYXRlZENvbnRleHQtPmNvbnRleHQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCmluZGV4IGE5YjM5Y2UxMTkzNjUz
NTBjYWM4Yzc2MmU4YmFiMDAzZjU0M2Y5NGQuLjY3NmVkNmQyMDg3NGYzNzliNWNlZWRmZDcyNDI3
YWI5YmIzMTNmZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Nlcmlh
bGl6ZWRTY3JpcHRWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2Vy
aWFsaXplZFNjcmlwdFZhbHVlLmNwcApAQCAtMTA4LDcgKzEwOCw3IEBAIHB1YmxpYzoKICAgICB7
CiAgICAgICAgIHR5cGVuYW1lIEhhbmRsZVRvVDo6aXRlcmF0b3IgcmVzdWx0ID0gbV9tYXAuZmlu
ZCgqaGFuZGxlKTsKICAgICAgICAgaWYgKHJlc3VsdCAhPSBtX21hcC5lbmQoKSkgewotICAgICAg
ICAgICAgKnZhbHVlT3V0ID0gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgICAgICAqdmFsdWVPdXQg
PSByZXN1bHQtPnZhbHVlOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhET01NYXAuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NTWFwLmgKaW5k
ZXggY2M3NmZmYTUzMWVhM2EyMDViMGYxMWQ1MTUxYjIwMWUwZTIwNzdjNC4uMzhiNTE0Mjc3NzMx
OGE0ZDZmZDcwOTczZWRlMTkwYmEzNDRiNzkyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvVjhET01NYXAuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9W
OERPTU1hcC5oCkBAIC0xMTAsNyArMTEwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICBib29sIHJlbW92ZUlmUHJlc2VudChLZXlUeXBlKiBrZXksIHY4OjpQZXJzaXN0ZW50PFZhbHVl
VHlwZT4gdmFsdWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIHR5cGVuYW1lIEhhc2hNYXA8S2V5
VHlwZSosIFZhbHVlVHlwZSo+OjppdGVyYXRvciBpdCA9IG1fbWFwLmZpbmQoa2V5KTsKLSAgICAg
ICAgICAgIGlmIChpdCA9PSBtX21hcC5lbmQoKSB8fCBpdC0+c2Vjb25kICE9ICp2YWx1ZSkKKyAg
ICAgICAgICAgIGlmIChpdCA9PSBtX21hcC5lbmQoKSB8fCBpdC0+dmFsdWUgIT0gKnZhbHVlKQog
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAgbV9tYXAucmVtb3Zl
KGl0KTsKQEAgLTEzMCw3ICsxMzAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAg
ICB2aXNpdG9yLT5zdGFydE1hcCgpOwogICAgICAgICAgICAgdHlwZW5hbWUgSGFzaE1hcDxLZXlU
eXBlKiwgVmFsdWVUeXBlKj46Oml0ZXJhdG9yIGl0ID0gbV9tYXAuYmVnaW4oKTsKICAgICAgICAg
ICAgIGZvciAoOyBpdCAhPSBtX21hcC5lbmQoKTsgKytpdCkKLSAgICAgICAgICAgICAgICB2aXNp
dG9yLT52aXNpdERPTVdyYXBwZXIoc3RvcmUsIGl0LT5maXJzdCwgdjg6OlBlcnNpc3RlbnQ8VmFs
dWVUeXBlPihpdC0+c2Vjb25kKSk7CisgICAgICAgICAgICAgICAgdmlzaXRvci0+dmlzaXRET01X
cmFwcGVyKHN0b3JlLCBpdC0+a2V5LCB2ODo6UGVyc2lzdGVudDxWYWx1ZVR5cGU+KGl0LT52YWx1
ZSkpOwogICAgICAgICAgICAgdmlzaXRvci0+ZW5kTWFwKCk7CiAgICAgICAgIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xsZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xsZXIuY3BwCmluZGV4IDJhODgyZGM3
NmU0ZWRlM2YxMzI0YzQ5ZjQ2ZmJkOTBkZDM3YjdhODguLmMyYWI3NGQ3MWNiOGQ2Y2ViNjJlOTQ2
Njc1MzI2ZmM0YTM4Mjc4YjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1Y4R0NDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEdD
Q29udHJvbGxlci5jcHAKQEAgLTEwMCw5ICsxMDAsOSBAQCBzdGF0aWMgdm9pZCBlbnVtZXJhdGVH
bG9iYWxIYW5kbGVzKCkKIHsKICAgICBHbG9iYWxIYW5kbGVNYXAmIGdsb2JhbEhhbmRsZU1hcCA9
IGN1cnJlbnRHbG9iYWxIYW5kbGVNYXAoKTsKICAgICBmb3IgKEdsb2JhbEhhbmRsZU1hcDo6aXRl
cmF0b3IgaXQgPSBnbG9iYWxIYW5kbGVNYXAuYmVnaW4oKSwgZW5kID0gZ2xvYmFsSGFuZGxlTWFw
LmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgR2xvYmFsSGFuZGxlSW5mbyogaW5m
byA9IGl0LT5zZWNvbmQ7CisgICAgICAgIEdsb2JhbEhhbmRsZUluZm8qIGluZm8gPSBpdC0+dmFs
dWU7CiAgICAgICAgIFVOVVNFRF9QQVJBTShpbmZvKTsKLSAgICAgICAgdjg6OlZhbHVlKiBoYW5k
bGUgPSBpdC0+Zmlyc3Q7CisgICAgICAgIHY4OjpWYWx1ZSogaGFuZGxlID0gaXQtPmtleTsKICAg
ICAgICAgVU5VU0VEX1BBUkFNKGhhbmRsZSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQZXJDb250ZXh0RGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9WOFBlckNvbnRleHREYXRhLmNwcAppbmRleCBlNTcwMjliZmQ3MjRiODk2
NTU2NjVlZDFiNjVkZTIxNDU0NjgyMDE0Li42MzVmZjIzNzFmYzk0MTg5ZjAzNGUzM2VmZTcyZTk3
NmY5ZmQxYTMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFBlckNv
bnRleHREYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFBlckNvbnRl
eHREYXRhLmNwcApAQCAtNDAsNyArNDAsNyBAQCB2b2lkIFY4UGVyQ29udGV4dERhdGE6OmRpc3Bv
c2UoKQogICAgIHsKICAgICAgICAgV3JhcHBlckJvaWxlcnBsYXRlTWFwOjppdGVyYXRvciBpdCA9
IG1fd3JhcHBlckJvaWxlcnBsYXRlcy5iZWdpbigpOwogICAgICAgICBmb3IgKDsgaXQgIT0gbV93
cmFwcGVyQm9pbGVycGxhdGVzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgICAgICB2ODo6UGVyc2lz
dGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIHY4OjpQ
ZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBpdC0+dmFsdWU7CiAgICAgICAgICAgICB3
cmFwcGVyLkRpc3Bvc2UoKTsKICAgICAgICAgfQogICAgICAgICBtX3dyYXBwZXJCb2lsZXJwbGF0
ZXMuY2xlYXIoKTsKQEAgLTQ5LDcgKzQ5LDcgQEAgdm9pZCBWOFBlckNvbnRleHREYXRhOjpkaXNw
b3NlKCkKICAgICB7CiAgICAgICAgIENvbnN0cnVjdG9yTWFwOjppdGVyYXRvciBpdCA9IG1fY29u
c3RydWN0b3JNYXAuYmVnaW4oKTsKICAgICAgICAgZm9yICg7IGl0ICE9IG1fY29uc3RydWN0b3JN
YXAuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlv
bj4gd3JhcHBlciA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICB2ODo6UGVyc2lzdGVudDx2ODo6
RnVuY3Rpb24+IHdyYXBwZXIgPSBpdC0+dmFsdWU7CiAgICAgICAgICAgICB3cmFwcGVyLkRpc3Bv
c2UoKTsKICAgICAgICAgfQogICAgICAgICBtX2NvbnN0cnVjdG9yTWFwLmNsZWFyKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ucHJ1bnRpbWUuY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvbnBydW50aW1lLmNwcAppbmRleCA4ZDgwY2Y5MzMxODZlODU0
N2MxODUxODNkN2U3NDg0YmNlMWU4NGEzLi4yYjAzNjdjZDE1ZjJhNGZiMTEzZDRjYzBiZjc2N2Vj
OGNmMWIwYTVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ucHJ1bnRp
bWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L25wcnVudGltZS5jcHAKQEAg
LTE2NCw3ICsxNjQsNyBAQCBOUElkZW50aWZpZXIgX05QTl9HZXRTdHJpbmdJZGVudGlmaWVyKGNv
bnN0IE5QVVRGOCogbmFtZSkKICAgICAgICAgU3RyaW5nSWRlbnRpZmllck1hcCogaWRlbnRNYXAg
PSBnZXRTdHJpbmdJZGVudGlmaWVyTWFwKCk7CiAgICAgICAgIFN0cmluZ0lkZW50aWZpZXJNYXA6
Oml0ZXJhdG9yIGl0ZXIgPSBpZGVudE1hcC0+ZmluZChrZXkpOwogICAgICAgICBpZiAoaXRlciAh
PSBpZGVudE1hcC0+ZW5kKCkpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TlBJZGVu
dGlmaWVyPihpdGVyLT5zZWNvbmQpOworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PE5Q
SWRlbnRpZmllcj4oaXRlci0+dmFsdWUpOwogCiAgICAgICAgIHNpemVfdCBuYW1lTGVuID0ga2V5
Lm1fbGVuZ3RoOwogCkBAIC0yMTEsNyArMjExLDcgQEAgTlBJZGVudGlmaWVyIF9OUE5fR2V0SW50
SWRlbnRpZmllcihpbnQzMl90IGludElkKQogICAgIEludElkZW50aWZpZXJNYXAqIGlkZW50TWFw
ID0gZ2V0SW50SWRlbnRpZmllck1hcCgpOwogICAgIEludElkZW50aWZpZXJNYXA6Oml0ZXJhdG9y
IGl0ZXIgPSBpZGVudE1hcC0+ZmluZChpbnRJZCk7CiAgICAgaWYgKGl0ZXIgIT0gaWRlbnRNYXAt
PmVuZCgpKQotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TlBJZGVudGlmaWVyPihpdGVyLT5z
ZWNvbmQpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TlBJZGVudGlmaWVyPihpdGVyLT52
YWx1ZSk7CiAKICAgICAvLyBXZSBuZXZlciByZWxlYXNlIGlkZW50aWZpZXJzLCBzbyB0aGlzIGRp
Y3Rpb25hcnkgd2lsbCBncm93LgogICAgIFByaXZhdGVJZGVudGlmaWVyKiBpZGVudGlmaWVyID0g
cmVpbnRlcnByZXRfY2FzdDxQcml2YXRlSWRlbnRpZmllcio+KG1hbGxvYyhzaXplb2YoUHJpdmF0
ZUlkZW50aWZpZXIpKSk7CkBAIC0zODgsNyArMzg4LDcgQEAgdm9pZCBfTlBOX1JlZ2lzdGVyT2Jq
ZWN0KE5QT2JqZWN0KiBucE9iamVjdCwgTlBPYmplY3QqIG93bmVyKQogICAgICAgICBOUE9iamVj
dE1hcDo6aXRlcmF0b3Igb3duZXJFbnRyeSA9IGxpdmVPYmplY3RNYXAoKS5maW5kKG93bmVyKTsK
ICAgICAgICAgTlBPYmplY3QqIHBhcmVudCA9IDA7CiAgICAgICAgIGlmIChsaXZlT2JqZWN0TWFw
KCkuZW5kKCkgIT0gb3duZXJFbnRyeSkKLSAgICAgICAgICAgIHBhcmVudCA9IG93bmVyRW50cnkt
PnNlY29uZDsKKyAgICAgICAgICAgIHBhcmVudCA9IG93bmVyRW50cnktPnZhbHVlOwogCiAgICAg
ICAgIGlmIChwYXJlbnQpCiAgICAgICAgICAgICBvd25lciA9IHBhcmVudDsKQEAgLTQwOCw3ICs0
MDgsNyBAQCB2b2lkIF9OUE5fVW5yZWdpc3Rlck9iamVjdChOUE9iamVjdCogbnBPYmplY3QpCiAK
ICAgICBOUE9iamVjdCogb3duZXIgPSAwOwogICAgIGlmIChsaXZlT2JqZWN0TWFwKCkuZmluZChu
cE9iamVjdCkgIT0gbGl2ZU9iamVjdE1hcCgpLmVuZCgpKQotICAgICAgICBvd25lciA9IGxpdmVP
YmplY3RNYXAoKS5maW5kKG5wT2JqZWN0KS0+c2Vjb25kOworICAgICAgICBvd25lciA9IGxpdmVP
YmplY3RNYXAoKS5maW5kKG5wT2JqZWN0KS0+dmFsdWU7CiAKICAgICBpZiAoIW93bmVyKSB7CiAg
ICAgICAgIC8vIFVucmVnaXN0ZXJpbmcgYSBvd25lciBvYmplY3Q7IGFsc28gdW5yZWdpc3RlciBp
dCdzIGRlc2NlbmRhbnRzLgpAQCAtNDQzLDcgKzQ0Myw3IEBAIHZvaWQgX05QTl9VbnJlZ2lzdGVy
T2JqZWN0KE5QT2JqZWN0KiBucE9iamVjdCkKICAgICB9IGVsc2UgewogICAgICAgICBOUFJvb3RP
YmplY3RNYXA6Oml0ZXJhdG9yIG93bmVyRW50cnkgPSByb290T2JqZWN0TWFwKCkuZmluZChvd25l
cik7CiAgICAgICAgIGlmIChvd25lckVudHJ5ICE9IHJvb3RPYmplY3RNYXAoKS5lbmQoKSkgewot
ICAgICAgICAgICAgTlBPYmplY3RTZXQqIGxpc3QgPSBvd25lckVudHJ5LT5zZWNvbmQ7CisgICAg
ICAgICAgICBOUE9iamVjdFNldCogbGlzdCA9IG93bmVyRW50cnktPnZhbHVlOwogICAgICAgICAg
ICAgQVNTRVJUKGxpc3QtPmZpbmQobnBPYmplY3QpICE9IGxpc3QtPmVuZCgpKTsKICAgICAgICAg
ICAgIGxpc3QtPnJlbW92ZShucE9iamVjdCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9JZGVudGlmaWVyUmVwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRn
ZS9JZGVudGlmaWVyUmVwLmNwcAppbmRleCAyYWNmMTQxNTNkMWRiOWUxMmI3MjU1OGE1Mzg4ZDk4
NmZmOGE1ZTg1Li4xZGY1OGE5ZTQxNTgxYzNiZWMzMTUxZmYyMWJjZWFhMjQ3MmRjMWY1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvSWRlbnRpZmllclJlcC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYnJpZGdlL0lkZW50aWZpZXJSZXAuY3BwCkBAIC02OSwxMyArNjksMTMgQEAg
SWRlbnRpZmllclJlcCogSWRlbnRpZmllclJlcDo6Z2V0KGludCBpbnRJRCkKICAgICAKICAgICBJ
bnRJZGVudGlmaWVyTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gaW50SWRlbnRpZmllck1hcCgpLmFk
ZChpbnRJRCwgMCk7CiAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIEFTU0VS
VCghcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOwotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNl
Y29uZCA9IG5ldyBJZGVudGlmaWVyUmVwKGludElEKTsKKyAgICAgICAgQVNTRVJUKCFyZXN1bHQu
aXRlcmF0b3ItPnZhbHVlKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IG5ldyBJ
ZGVudGlmaWVyUmVwKGludElEKTsKICAgICAgICAgCi0gICAgICAgIGlkZW50aWZpZXJTZXQoKS5h
ZGQocmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOworICAgICAgICBpZGVudGlmaWVyU2V0KCkuYWRk
KHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwogICAgIH0KICAgICAKLSAgICByZXR1cm4gcmVzdWx0
Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiB9
CiAKIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8U3RyaW5nSW1wbD4sIElkZW50aWZpZXJSZXAqPiBT
dHJpbmdJZGVudGlmaWVyTWFwOwpAQCAtOTUsMTMgKzk1LDEzIEBAIElkZW50aWZpZXJSZXAqIElk
ZW50aWZpZXJSZXA6OmdldChjb25zdCBjaGFyKiBuYW1lKQogICAgIFVTdHJpbmcgc3RyaW5nID0g
c3RyaW5nVG9VU3RyaW5nKFN0cmluZzo6ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2sobmFtZSwg
c3RybGVuKG5hbWUpKSk7CiAgICAgU3RyaW5nSWRlbnRpZmllck1hcDo6QWRkUmVzdWx0IHJlc3Vs
dCA9IHN0cmluZ0lkZW50aWZpZXJNYXAoKS5hZGQoc3RyaW5nLmltcGwoKSwgMCk7CiAgICAgaWYg
KHJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIEFTU0VSVCghcmVzdWx0Lml0ZXJhdG9yLT5z
ZWNvbmQpOwotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IG5ldyBJZGVudGlmaWVy
UmVwKG5hbWUpOworICAgICAgICBBU1NFUlQoIXJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOworICAg
ICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gbmV3IElkZW50aWZpZXJSZXAobmFtZSk7CiAg
ICAgICAgIAotICAgICAgICBpZGVudGlmaWVyU2V0KCkuYWRkKHJlc3VsdC5pdGVyYXRvci0+c2Vj
b25kKTsKKyAgICAgICAgaWRlbnRpZmllclNldCgpLmFkZChyZXN1bHQuaXRlcmF0b3ItPnZhbHVl
KTsKICAgICB9CiAgICAgCi0gICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAg
IHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogfQogCiBib29sIElkZW50aWZpZXJSZXA6
OmlzVmFsaWQoSWRlbnRpZmllclJlcCogaWRlbnRpZmllcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JyaWRnZS9OUF9qc29iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvTlBf
anNvYmplY3QuY3BwCmluZGV4IDYxZTM2Nzk1NjFhNjNlNGUzY2Y1YmU0ZDA4OTY3MjMxMzdmNjMy
YzcuLjYyZWJkMjM3NmVjOTFlY2RlNjUzOTU4NjI2YTA5YWVmZDM5NzNiZTggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9OUF9qc29iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYnJpZGdlL05QX2pzb2JqZWN0LmNwcApAQCAtNjUsOCArNjUsOCBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICBpdGVyID0gbV9tYXAuYWRkKHJvb3RPYmplY3QsIEpTVG9OUE9iamVjdE1hcCgpKS5p
dGVyYXRvcjsKICAgICAgICAgfQogCi0gICAgICAgIEFTU0VSVChpdGVyLT5zZWNvbmQuZmluZChq
c09iamVjdCkgPT0gaXRlci0+c2Vjb25kLmVuZCgpKTsKLSAgICAgICAgaXRlci0+c2Vjb25kLmFk
ZChqc09iamVjdCwgbnBPYmplY3QpOworICAgICAgICBBU1NFUlQoaXRlci0+dmFsdWUuZmluZChq
c09iamVjdCkgPT0gaXRlci0+dmFsdWUuZW5kKCkpOworICAgICAgICBpdGVyLT52YWx1ZS5hZGQo
anNPYmplY3QsIG5wT2JqZWN0KTsKICAgICB9CiAKICAgICB2b2lkIHJlbW92ZShSb290T2JqZWN0
KiByb290T2JqZWN0KQpAQCAtODAsOSArODAsOSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBI
YXNoTWFwPFJvb3RPYmplY3QqLCBKU1RvTlBPYmplY3RNYXA+OjppdGVyYXRvciBpdGVyID0gbV9t
YXAuZmluZChyb290T2JqZWN0KTsKICAgICAgICAgQVNTRVJUKGl0ZXIgIT0gbV9tYXAuZW5kKCkp
OwotICAgICAgICBBU1NFUlQoaXRlci0+c2Vjb25kLmZpbmQoanNPYmplY3QpICE9IGl0ZXItPnNl
Y29uZC5lbmQoKSk7CisgICAgICAgIEFTU0VSVChpdGVyLT52YWx1ZS5maW5kKGpzT2JqZWN0KSAh
PSBpdGVyLT52YWx1ZS5lbmQoKSk7CiAKLSAgICAgICAgaXRlci0+c2Vjb25kLnJlbW92ZShqc09i
amVjdCk7CisgICAgICAgIGl0ZXItPnZhbHVlLnJlbW92ZShqc09iamVjdCk7CiAgICAgfQogCiBw
cml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YUNs
YXNzSlNDLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFDbGFzc0pTQy5j
cHAKaW5kZXggYWViNDAyMGJkODRhMjM3YjllYzFjMGFiNzZhOWY2ZmZiNmU4Yjk3NS4uYTYwODAx
ZTU2Mjk0YzcyZjhlMmY3NDY2ZTQ0MmI2MWNkZDg0ZWVmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YUNsYXNzSlNDLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9icmlkZ2Uvam5pL2pzYy9KYXZhQ2xhc3NKU0MuY3BwCkBAIC0xMDcsNyArMTA3LDcgQEAgSmF2
YUNsYXNzOjp+SmF2YUNsYXNzKCkKIAogICAgIE1ldGhvZExpc3RNYXA6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IG1fbWV0aG9kcy5lbmQoKTsKICAgICBmb3IgKE1ldGhvZExpc3RNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbV9tZXRob2RzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAg
ICBjb25zdCBNZXRob2RMaXN0KiBtZXRob2RMaXN0ID0gaXQtPnNlY29uZDsKKyAgICAgICAgY29u
c3QgTWV0aG9kTGlzdCogbWV0aG9kTGlzdCA9IGl0LT52YWx1ZTsKICAgICAgICAgZGVsZXRlQWxs
VmFsdWVzKCptZXRob2RMaXN0KTsKICAgICAgICAgZGVsZXRlIG1ldGhvZExpc3Q7CiAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X2luc3RhbmNlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9pbnN0YW5jZS5jcHAKaW5kZXggYjlhMzRhYzMwYjdm
YzNkNzU0MzZjMWIzODkzMjE2NDAxODI3OGVlNi4uMmViNGExMGY1YmY2YTA3MjlhNzAxYjA1ODc3
ZWUwZjRmYWNlMmNiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X2lu
c3RhbmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfaW5zdGFuY2UuY3Bw
CkBAIC03OCw4ICs3OCw4IEBAIHZvaWQgV2Vha01hcDo6c2V0KEpTQ29udGV4dFJlZiBjb250ZXh0
LCB2b2lkICprZXksIEpTT2JqZWN0UmVmIG9iamVjdCkKICAgICAgICAgSlNDb250ZXh0R3JvdXBS
ZWYgZ3JvdXAgPSBKU0NvbnRleHRHZXRHcm91cChjb250ZXh0KTsKICAgICAgICAgV2Vha01hcFNl
dDo6QWRkUmVzdWx0IGVudHJ5ID0gd2Vha01hcHMuYWRkKGdyb3VwLCAwKTsKICAgICAgICAgaWYg
KGVudHJ5LmlzTmV3RW50cnkpCi0gICAgICAgICAgICBlbnRyeS5pdGVyYXRvci0+c2Vjb25kID0g
YWRvcHRSZWYobmV3IFdlYWtNYXBJbXBsKGdyb3VwKSk7Ci0gICAgICAgIG1faW1wbCA9IGVudHJ5
Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgICAgICBlbnRyeS5pdGVyYXRvci0+dmFsdWUgPSBh
ZG9wdFJlZihuZXcgV2Vha01hcEltcGwoZ3JvdXApKTsKKyAgICAgICAgbV9pbXBsID0gZW50cnku
aXRlcmF0b3ItPnZhbHVlOwogICAgIH0KICAgICBKU1dlYWtPYmplY3RNYXBTZXQobV9pbXBsLT5t
X2NvbnRleHQsIG1faW1wbC0+bV9tYXAsIGtleSwgb2JqZWN0KTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX3Jvb3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYnJp
ZGdlL3J1bnRpbWVfcm9vdC5jcHAKaW5kZXggOWI2MjI0YThiNTYwZmM1ZTYwZTE1ODllNTc5ZDE0
MjU0OTcyOTEzNC4uNzRkODMxOTIxZjIxOWI4YjczMzM2NzU5MTVlNDFiZGMxN2RkZmRjZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfcm9vdC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfcm9vdC5jcHAKQEAgLTEwNSw3ICsxMDUsNyBAQCB2
b2lkIFJvb3RPYmplY3Q6OmludmFsaWRhdGUoKQogICAgIHsKICAgICAgICAgSGFzaE1hcDxSdW50
aW1lT2JqZWN0KiwgSlNDOjpXZWFrPFJ1bnRpbWVPYmplY3Q+ID46Oml0ZXJhdG9yIGVuZCA9IG1f
cnVudGltZU9iamVjdHMuZW5kKCk7CiAgICAgICAgIGZvciAoSGFzaE1hcDxSdW50aW1lT2JqZWN0
KiwgSlNDOjpXZWFrPFJ1bnRpbWVPYmplY3Q+ID46Oml0ZXJhdG9yIGl0ID0gbV9ydW50aW1lT2Jq
ZWN0cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIFJ1bnRpbWVPYmpl
Y3QqIHJ1bnRpbWVPYmplY3QgPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgUnVudGlt
ZU9iamVjdCogcnVudGltZU9iamVjdCA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGlm
ICghcnVudGltZU9iamVjdCkgLy8gU2tpcCB6b21iaWVzLgogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgcnVudGltZU9iamVjdC0+aW52YWxpZGF0ZSgpOwpAQCAtMTI5LDcg
KzEyOSw3IEBAIHZvaWQgUm9vdE9iamVjdDo6aW52YWxpZGF0ZSgpCiAKICAgICBQcm90ZWN0Q291
bnRTZXQ6Oml0ZXJhdG9yIGVuZCA9IG1fcHJvdGVjdENvdW50U2V0LmVuZCgpOwogICAgIGZvciAo
UHJvdGVjdENvdW50U2V0OjppdGVyYXRvciBpdCA9IG1fcHJvdGVjdENvdW50U2V0LmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgSlNDOjpnY1VucHJvdGVjdChpdC0+Zmlyc3QpOwor
ICAgICAgICBKU0M6OmdjVW5wcm90ZWN0KGl0LT5rZXkpOwogICAgIG1fcHJvdGVjdENvdW50U2V0
LmNsZWFyKCk7CiAKICAgICByb290T2JqZWN0U2V0KCktPnJlbW92ZSh0aGlzKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYW52YXNWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTQ2FudmFzVmFsdWUuY3BwCmluZGV4IDYzNzc3YmI0ZGRkZGEwOTc2MTZmOGZhMGFi
YzFiYTVjNzdmYjk0NTUuLmM5MmQxMzM2ZDg2MDYyMDVmYzAzN2QwZmM1OWZkM2EwNzM1NDIxNTUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYW52YXNWYWx1ZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbnZhc1ZhbHVlLmNwcApAQCAtNTAsMTQgKzUwLDE0IEBA
IHZvaWQgQ1NTQ2FudmFzVmFsdWU6OmNhbnZhc0NoYW5nZWQoSFRNTENhbnZhc0VsZW1lbnQqLCBj
b25zdCBGbG9hdFJlY3QmIGNoYW5nZWRSCiAgICAgSW50UmVjdCBpbWFnZUNoYW5nZVJlY3QgPSBl
bmNsb3NpbmdJbnRSZWN0KGNoYW5nZWRSZWN0KTsKICAgICBSZW5kZXJPYmplY3RTaXplQ291bnRN
YXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGNsaWVudHMoKS5lbmQoKTsKICAgICBmb3IgKFJlbmRl
ck9iamVjdFNpemVDb3VudE1hcDo6Y29uc3RfaXRlcmF0b3IgY3VyciA9IGNsaWVudHMoKS5iZWdp
bigpOyBjdXJyICE9IGVuZDsgKytjdXJyKQotICAgICAgICBjb25zdF9jYXN0PFJlbmRlck9iamVj
dCo+KGN1cnItPmZpcnN0KS0+aW1hZ2VDaGFuZ2VkKHN0YXRpY19jYXN0PFdyYXBwZWRJbWFnZVB0
cj4odGhpcyksICZpbWFnZUNoYW5nZVJlY3QpOworICAgICAgICBjb25zdF9jYXN0PFJlbmRlck9i
amVjdCo+KGN1cnItPmtleSktPmltYWdlQ2hhbmdlZChzdGF0aWNfY2FzdDxXcmFwcGVkSW1hZ2VQ
dHI+KHRoaXMpLCAmaW1hZ2VDaGFuZ2VSZWN0KTsKIH0KIAogdm9pZCBDU1NDYW52YXNWYWx1ZTo6
Y2FudmFzUmVzaXplZChIVE1MQ2FudmFzRWxlbWVudCopCiB7CiAgICAgUmVuZGVyT2JqZWN0U2l6
ZUNvdW50TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBjbGllbnRzKCkuZW5kKCk7CiAgICAgZm9y
IChSZW5kZXJPYmplY3RTaXplQ291bnRNYXA6OmNvbnN0X2l0ZXJhdG9yIGN1cnIgPSBjbGllbnRz
KCkuYmVnaW4oKTsgY3VyciAhPSBlbmQ7ICsrY3VycikKLSAgICAgICAgY29uc3RfY2FzdDxSZW5k
ZXJPYmplY3QqPihjdXJyLT5maXJzdCktPmltYWdlQ2hhbmdlZChzdGF0aWNfY2FzdDxXcmFwcGVk
SW1hZ2VQdHI+KHRoaXMpKTsKKyAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJPYmplY3QqPihjdXJy
LT5rZXkpLT5pbWFnZUNoYW5nZWQoc3RhdGljX2Nhc3Q8V3JhcHBlZEltYWdlUHRyPih0aGlzKSk7
CiB9CiAKIHZvaWQgQ1NTQ2FudmFzVmFsdWU6OmNhbnZhc0Rlc3Ryb3llZChIVE1MQ2FudmFzRWxl
bWVudCogZWxlbWVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRl
ZFN0eWxlRGVjbGFyYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5
bGVEZWNsYXJhdGlvbi5jcHAKaW5kZXggMDcwOGMyM2JhYjhkNTBhOGJlOTFkYTEzM2Q4NDczMzg4
YzgyN2ViOC4uM2QzZmNlOTg5NTJjODViZWViZjVmNjU0OWYwYmY4MTJlMTI3YTk3NSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAK
QEAgLTEyNzMsOCArMTI3Myw4IEBAIHN0YXRpYyBQYXNzUmVmUHRyPENTU1ZhbHVlPiBjb3VudGVy
VG9DU1NWYWx1ZShjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIENTU1Byb3BlCiAKICAgICBSZWZQ
dHI8Q1NTVmFsdWVMaXN0PiBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRl
ZCgpOwogICAgIGZvciAoQ291bnRlckRpcmVjdGl2ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
YXAtPmJlZ2luKCk7IGl0ICE9IG1hcC0+ZW5kKCk7ICsraXQpIHsKLSAgICAgICAgbGlzdC0+YXBw
ZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKGl0LT5maXJzdC5nZXQoKSwgQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19TVFJJTkcpKTsKLSAgICAgICAgc2hvcnQgbnVtYmVyID0gcHJvcGVydHlJ
RCA9PSBDU1NQcm9wZXJ0eUNvdW50ZXJJbmNyZW1lbnQgPyBpdC0+c2Vjb25kLm1faW5jcmVtZW50
VmFsdWUgOiBpdC0+c2Vjb25kLm1fcmVzZXRWYWx1ZTsKKyAgICAgICAgbGlzdC0+YXBwZW5kKGNz
c1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKGl0LT5rZXkuZ2V0KCksIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfU1RSSU5HKSk7CisgICAgICAgIHNob3J0IG51bWJlciA9IHByb3BlcnR5SUQgPT0gQ1NT
UHJvcGVydHlDb3VudGVySW5jcmVtZW50ID8gaXQtPnZhbHVlLm1faW5jcmVtZW50VmFsdWUgOiBp
dC0+dmFsdWUubV9yZXNldFZhbHVlOwogICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29s
KCkuY3JlYXRlVmFsdWUoKGRvdWJsZSludW1iZXIsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVN
QkVSKSk7CiAgICAgfQogICAgIHJldHVybiBsaXN0LnJlbGVhc2UoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NDcm9zc2ZhZGVWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTQ3Jvc3NmYWRlVmFsdWUuY3BwCmluZGV4IDVlZDdkYTE4ZDNjYjllOWFkODBjMmJlNzgx
ODI2MmVjMzgyYjRlMjkuLjgyNzg4M2IxMzU5ZjljNTg0MDZlYjRlOGFlZGFmMjM1NTk0ZjIzYTcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDcm9zc2ZhZGVWYWx1ZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Nyb3NzZmFkZVZhbHVlLmNwcApAQCAtMTc1LDcgKzE3
NSw3IEBAIHZvaWQgQ1NTQ3Jvc3NmYWRlVmFsdWU6OmNyb3NzZmFkZUNoYW5nZWQoY29uc3QgSW50
UmVjdCYpCiB7CiAgICAgUmVuZGVyT2JqZWN0U2l6ZUNvdW50TWFwOjpjb25zdF9pdGVyYXRvciBl
bmQgPSBjbGllbnRzKCkuZW5kKCk7CiAgICAgZm9yIChSZW5kZXJPYmplY3RTaXplQ291bnRNYXA6
OmNvbnN0X2l0ZXJhdG9yIGN1cnIgPSBjbGllbnRzKCkuYmVnaW4oKTsgY3VyciAhPSBlbmQ7ICsr
Y3VycikgewotICAgICAgICBSZW5kZXJPYmplY3QqIGNsaWVudCA9IGNvbnN0X2Nhc3Q8UmVuZGVy
T2JqZWN0Kj4oY3Vyci0+Zmlyc3QpOworICAgICAgICBSZW5kZXJPYmplY3QqIGNsaWVudCA9IGNv
bnN0X2Nhc3Q8UmVuZGVyT2JqZWN0Kj4oY3Vyci0+a2V5KTsKICAgICAgICAgY2xpZW50LT5pbWFn
ZUNoYW5nZWQoc3RhdGljX2Nhc3Q8V3JhcHBlZEltYWdlUHRyPih0aGlzKSk7CiAgICAgfQogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU291cmNlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5jcHAKaW5kZXggZGQ5MDRkMzdmYjk1
NGU0NGRiYTY1Mzg3NjczNTgzMTE5OGZhZDNkNy4uY2U0NTM2N2FjMzMyMzcyYTBmYjllYzhjNWE1
MmZiOWYwODg5ZWRmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNl
U291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuY3Bw
CkBAIC0xMTQsNyArMTE0LDcgQEAgU2ltcGxlRm9udERhdGEqIENTU0ZvbnRGYWNlU291cmNlOjpn
ZXRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmkKICAgICB1bnNpZ25l
ZCBoYXNoS2V5ID0gKGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpICsgMSkgPDwg
NiB8IGZvbnREZXNjcmlwdGlvbi53aWR0aFZhcmlhbnQoKSA8PCA0CiAgICAgICAgICAgICAgICAg
ICAgICAgIHwgKGZvbnREZXNjcmlwdGlvbi50ZXh0T3JpZW50YXRpb24oKSA9PSBUZXh0T3JpZW50
YXRpb25VcHJpZ2h0ID8gOCA6IDApIHwgKGZvbnREZXNjcmlwdGlvbi5vcmllbnRhdGlvbigpID09
IFZlcnRpY2FsID8gNCA6IDApIHwgKHN5bnRoZXRpY0JvbGQgPyAyIDogMCkgfCAoc3ludGhldGlj
SXRhbGljID8gMSA6IDApOwogCi0gICAgU2ltcGxlRm9udERhdGEqJiBjYWNoZWREYXRhID0gbV9m
b250RGF0YVRhYmxlLmFkZChoYXNoS2V5LCAwKS5pdGVyYXRvci0+c2Vjb25kOworICAgIFNpbXBs
ZUZvbnREYXRhKiYgY2FjaGVkRGF0YSA9IG1fZm9udERhdGFUYWJsZS5hZGQoaGFzaEtleSwgMCku
aXRlcmF0b3ItPnZhbHVlOwogICAgIGlmIChjYWNoZWREYXRhKQogICAgICAgICByZXR1cm4gY2Fj
aGVkRGF0YTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rv
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmNwcAppbmRleCBjYzVm
ZmEwNmNkMGU1MDE0NjRjMDcxMDNhYmZkZGExYWY1YTNlYWNjLi4xNTE3Yjc2Y2FkNWVkYzVlZjBi
ZmE0NTE5ZTlkYjlmMWU1MmNjMmY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
Rm9udFNlbGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9y
LmNwcApAQCAtMjg1LDcgKzI4NSw3IEBAIHZvaWQgQ1NTRm9udFNlbGVjdG9yOjphZGRGb250RmFj
ZVJ1bGUoY29uc3QgU3R5bGVSdWxlRm9udEZhY2UqIGZvbnRGYWNlUnVsZSkKICAgICAgICAgaWYg
KGZhbWlseU5hbWUuaXNFbXB0eSgpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAg
T3duUHRyPFZlY3RvcjxSZWZQdHI8Q1NTRm9udEZhY2U+ID4gPiYgZmFtaWx5Rm9udEZhY2VzID0g
bV9mb250RmFjZXMuYWRkKGZhbWlseU5hbWUsIG51bGxwdHIpLml0ZXJhdG9yLT5zZWNvbmQ7Cisg
ICAgICAgIE93blB0cjxWZWN0b3I8UmVmUHRyPENTU0ZvbnRGYWNlPiA+ID4mIGZhbWlseUZvbnRG
YWNlcyA9IG1fZm9udEZhY2VzLmFkZChmYW1pbHlOYW1lLCBudWxscHRyKS5pdGVyYXRvci0+dmFs
dWU7CiAgICAgICAgIGlmICghZmFtaWx5Rm9udEZhY2VzKSB7CiAgICAgICAgICAgICBmYW1pbHlG
b250RmFjZXMgPSBhZG9wdFB0cihuZXcgVmVjdG9yPFJlZlB0cjxDU1NGb250RmFjZT4gPik7CiAK
QEAgLTQ4NywxMyArNDg3LDEzIEBAIEZvbnREYXRhKiBDU1NGb250U2VsZWN0b3I6OmdldEZvbnRE
YXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjCiAgICAgICAgIHJl
dHVybiBmb250RGF0YUZvckdlbmVyaWNGYW1pbHkobV9kb2N1bWVudCwgZm9udERlc2NyaXB0aW9u
LCBmYW1pbHlOYW1lKTsKICAgICB9CiAKLSAgICBPd25QdHI8SGFzaE1hcDx1bnNpZ25lZCwgUmVm
UHRyPENTU1NlZ21lbnRlZEZvbnRGYWNlPiA+ID4mIHNlZ21lbnRlZEZvbnRGYWNlQ2FjaGUgPSBt
X2ZvbnRzLmFkZChmYW1pbHksIG51bGxwdHIpLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgT3duUHRy
PEhhc2hNYXA8dW5zaWduZWQsIFJlZlB0cjxDU1NTZWdtZW50ZWRGb250RmFjZT4gPiA+JiBzZWdt
ZW50ZWRGb250RmFjZUNhY2hlID0gbV9mb250cy5hZGQoZmFtaWx5LCBudWxscHRyKS5pdGVyYXRv
ci0+dmFsdWU7CiAgICAgaWYgKCFzZWdtZW50ZWRGb250RmFjZUNhY2hlKQogICAgICAgICBzZWdt
ZW50ZWRGb250RmFjZUNhY2hlID0gYWRvcHRQdHIobmV3IEhhc2hNYXA8dW5zaWduZWQsIFJlZlB0
cjxDU1NTZWdtZW50ZWRGb250RmFjZT4gPik7CiAKICAgICBGb250VHJhaXRzTWFzayB0cmFpdHNN
YXNrID0gZm9udERlc2NyaXB0aW9uLnRyYWl0c01hc2soKTsKIAotICAgIFJlZlB0cjxDU1NTZWdt
ZW50ZWRGb250RmFjZT4mIGZhY2UgPSBzZWdtZW50ZWRGb250RmFjZUNhY2hlLT5hZGQodHJhaXRz
TWFzaywgMCkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBSZWZQdHI8Q1NTU2VnbWVudGVkRm9udEZh
Y2U+JiBmYWNlID0gc2VnbWVudGVkRm9udEZhY2VDYWNoZS0+YWRkKHRyYWl0c01hc2ssIDApLml0
ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoIWZhY2UpIHsKICAgICAgICAgZmFjZSA9IENTU1NlZ21l
bnRlZEZvbnRGYWNlOjpjcmVhdGUodGhpcyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NJbWFnZUdlbmVyYXRvclZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJ
bWFnZUdlbmVyYXRvclZhbHVlLmNwcAppbmRleCA2MzA0MGYzYmU2ZTk4ZGYyYzlkOTUyYzVhZDQ2
NDE1NjE5NDU0NGIxLi5hZDZjYmE5MjJhY2FjYjRhMjFhMTE3NGQ5NThkNTZlZTM0MGJmZmRjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUuY3BwCkBAIC01
Nyw3ICs1Nyw3IEBAIHZvaWQgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6YWRkQ2xpZW50KFJlbmRl
ck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IEludFNpemUmIHNpCiAgICAgaWYgKGl0ID09IG1fY2xp
ZW50cy5lbmQoKSkKICAgICAgICAgbV9jbGllbnRzLmFkZChyZW5kZXJlciwgU2l6ZUFuZENvdW50
KHNpemUsIDEpKTsKICAgICBlbHNlIHsKLSAgICAgICAgU2l6ZUFuZENvdW50JiBzaXplQ291bnQg
PSBpdC0+c2Vjb25kOworICAgICAgICBTaXplQW5kQ291bnQmIHNpemVDb3VudCA9IGl0LT52YWx1
ZTsKICAgICAgICAgKytzaXplQ291bnQuY291bnQ7CiAgICAgfQogfQpAQCAtNjksNyArNjksNyBA
QCB2b2lkIENTU0ltYWdlR2VuZXJhdG9yVmFsdWU6OnJlbW92ZUNsaWVudChSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyKQogICAgIEFTU0VSVChpdCAhPSBtX2NsaWVudHMuZW5kKCkpOwogCiAgICAgSW50
U2l6ZSByZW1vdmVkSW1hZ2VTaXplOwotICAgIFNpemVBbmRDb3VudCYgc2l6ZUNvdW50ID0gaXQt
PnNlY29uZDsKKyAgICBTaXplQW5kQ291bnQmIHNpemVDb3VudCA9IGl0LT52YWx1ZTsKICAgICBJ
bnRTaXplIHNpemUgPSBzaXplQ291bnQuc2l6ZTsKICAgICBpZiAoIXNpemUuaXNFbXB0eSgpKSB7
CiAgICAgICAgIG1fc2l6ZXMucmVtb3ZlKHNpemUpOwpAQCAtODcsNyArODcsNyBAQCBJbWFnZSog
Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6Z2V0SW1hZ2UoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwg
Y29uc3QgSW50U2l6ZSYgcwogewogICAgIFJlbmRlck9iamVjdFNpemVDb3VudE1hcDo6aXRlcmF0
b3IgaXQgPSBtX2NsaWVudHMuZmluZChyZW5kZXJlcik7CiAgICAgaWYgKGl0ICE9IG1fY2xpZW50
cy5lbmQoKSkgewotICAgICAgICBTaXplQW5kQ291bnQmIHNpemVDb3VudCA9IGl0LT5zZWNvbmQ7
CisgICAgICAgIFNpemVBbmRDb3VudCYgc2l6ZUNvdW50ID0gaXQtPnZhbHVlOwogICAgICAgICBJ
bnRTaXplIG9sZFNpemUgPSBzaXplQ291bnQuc2l6ZTsKICAgICAgICAgaWYgKG9sZFNpemUgIT0g
c2l6ZSkgewogICAgICAgICAgICAgUmVmUHRyPENTU0ltYWdlR2VuZXJhdG9yVmFsdWU+IHByb3Rl
Y3QodGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VnbWVudGVkRm9u
dEZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmNwcApp
bmRleCA5ODM0MjU0NjkyNGY4NjQyYmVmNzAyMGJiMGViYzg2NDQxNzI1Y2JiLi4xYjc1MzRjMTNm
OWJjMzljZDBiMTEyNGIwYzY3NmZmODM0ZWU1YmI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NTZWdtZW50ZWRGb250RmFjZS5jcHAKQEAgLTEwNiw3ICsxMDYsNyBAQCBGb250RGF0YSogQ1NT
U2VnbWVudGVkRm9udEZhY2U6OmdldEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9u
dERlc2NyaXB0aQogICAgIEZvbnRUcmFpdHNNYXNrIGRlc2lyZWRUcmFpdHNNYXNrID0gZm9udERl
c2NyaXB0aW9uLnRyYWl0c01hc2soKTsKICAgICB1bnNpZ25lZCBoYXNoS2V5ID0gKChmb250RGVz
Y3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSArIDEpIDw8IChGb250VHJhaXRzTWFza1dpZHRo
ICsgMSkpIHwgKChmb250RGVzY3JpcHRpb24ub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCA/IDEg
OiAwKSA8PCBGb250VHJhaXRzTWFza1dpZHRoKSB8IGRlc2lyZWRUcmFpdHNNYXNrOwogCi0gICAg
U2VnbWVudGVkRm9udERhdGEqJiBmb250RGF0YSA9IG1fZm9udERhdGFUYWJsZS5hZGQoaGFzaEtl
eSwgMCkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBTZWdtZW50ZWRGb250RGF0YSomIGZvbnREYXRh
ID0gbV9mb250RGF0YVRhYmxlLmFkZChoYXNoS2V5LCAwKS5pdGVyYXRvci0+dmFsdWU7CiAgICAg
aWYgKGZvbnREYXRhKQogICAgICAgICByZXR1cm4gZm9udERhdGE7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
U2VsZWN0b3IuY3BwCmluZGV4IGVhYmVlNDkzYTQxYWI3ZTQ0MjdjZjI4ZmQ3MDM0ODFiMGFkMDg3
OWEuLjhkZGE1OGQ1N2FhNzU0N2IyMjVmMDU1MGFkZjcwMTI4N2UxMmNhMGUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1NlbGVjdG9yLmNwcApAQCAtMzc2LDcgKzM3Niw3IEBAIENTU1NlbGVjdG9yOjpQc2V1
ZG9UeXBlIENTU1NlbGVjdG9yOjpwYXJzZVBzZXVkb1R5cGUoY29uc3QgQXRvbWljU3RyaW5nJiBu
YW1lKQogICAgICAgICByZXR1cm4gUHNldWRvVW5rbm93bjsKICAgICBIYXNoTWFwPEF0b21pY1N0
cmluZ0ltcGwqLCBDU1NTZWxlY3Rvcjo6UHNldWRvVHlwZT4qIG5hbWVUb1BzZXVkb1R5cGUgPSBu
YW1lVG9Qc2V1ZG9UeXBlTWFwKCk7CiAgICAgSGFzaE1hcDxBdG9taWNTdHJpbmdJbXBsKiwgQ1NT
U2VsZWN0b3I6OlBzZXVkb1R5cGU+OjppdGVyYXRvciBzbG90ID0gbmFtZVRvUHNldWRvVHlwZS0+
ZmluZChuYW1lLmltcGwoKSk7Ci0gICAgcmV0dXJuIHNsb3QgPT0gbmFtZVRvUHNldWRvVHlwZS0+
ZW5kKCkgPyBQc2V1ZG9Vbmtub3duIDogc2xvdC0+c2Vjb25kOworICAgIHJldHVybiBzbG90ID09
IG5hbWVUb1BzZXVkb1R5cGUtPmVuZCgpID8gUHNldWRvVW5rbm93biA6IHNsb3QtPnZhbHVlOwog
fQogCiBib29sIENTU1NlbGVjdG9yOjppc1Vua25vd25Qc2V1ZG9UeXBlKGNvbnN0IEF0b21pY1N0
cmluZyYgbmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZVBvb2wu
Y3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlUG9vbC5jcHAKaW5kZXggY2U3NTdiOTMz
YjNmNGEzMDJlODcxNjU2OGQwM2UwM2RiZjFiMDc2Yy4uYzE2ODk5MTlkMTZlZTE2ZjBlZTA3MzE5
MTk5NmU5N2M1YzhmYzkwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVl
UG9vbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlUG9vbC5jcHAKQEAgLTc4
LDggKzc4LDggQEAgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NTVmFsdWVQb29sOjpj
cmVhdGVDb2xvclZhbHVlKHVuc2lnbmVkIHJnYlZhbHVlKQogICAgIFJlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gZHVtbXlWYWx1ZTsKICAgICBDb2xvclZhbHVlQ2FjaGU6OkFkZFJlc3VsdCBlbnRy
eSA9IG1fY29sb3JWYWx1ZUNhY2hlLmFkZChyZ2JWYWx1ZSwgZHVtbXlWYWx1ZSk7CiAgICAgaWYg
KGVudHJ5LmlzTmV3RW50cnkpCi0gICAgICAgIGVudHJ5Lml0ZXJhdG9yLT5zZWNvbmQgPSBDU1NQ
cmltaXRpdmVWYWx1ZTo6Y3JlYXRlQ29sb3IocmdiVmFsdWUpOwotICAgIHJldHVybiBlbnRyeS5p
dGVyYXRvci0+c2Vjb25kOworICAgICAgICBlbnRyeS5pdGVyYXRvci0+dmFsdWUgPSBDU1NQcmlt
aXRpdmVWYWx1ZTo6Y3JlYXRlQ29sb3IocmdiVmFsdWUpOworICAgIHJldHVybiBlbnRyeS5pdGVy
YXRvci0+dmFsdWU7CiB9CiAKIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IENTU1ZhbHVl
UG9vbDo6Y3JlYXRlVmFsdWUoZG91YmxlIHZhbHVlLCBDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5
cGVzIHR5cGUpCkBAIC0xMTMsNyArMTEzLDcgQEAgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gQ1NTVmFsdWVQb29sOjpjcmVhdGVWYWx1ZShkb3VibGUgdmFsdWUsIENTU1ByaW1pdGkKIAog
UGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NTVmFsdWVQb29sOjpjcmVhdGVGb250RmFt
aWx5VmFsdWUoY29uc3QgU3RyaW5nJiBmYW1pbHlOYW1lKQogewotICAgIFJlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4mIHZhbHVlID0gbV9mb250RmFtaWx5VmFsdWVDYWNoZS5hZGQoZmFtaWx5TmFt
ZSwgMCkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiB2
YWx1ZSA9IG1fZm9udEZhbWlseVZhbHVlQ2FjaGUuYWRkKGZhbWlseU5hbWUsIDApLml0ZXJhdG9y
LT52YWx1ZTsKICAgICBpZiAoIXZhbHVlKQogICAgICAgICB2YWx1ZSA9IENTU1ByaW1pdGl2ZVZh
bHVlOjpjcmVhdGUoZmFtaWx5TmFtZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpOwog
ICAgIHJldHVybiB2YWx1ZTsKQEAgLTEyNiw3ICsxMjYsNyBAQCBQYXNzUmVmUHRyPENTU1ZhbHVl
TGlzdD4gQ1NTVmFsdWVQb29sOjpjcmVhdGVGb250RmFjZVZhbHVlKGNvbnN0IEF0b21pY1N0cmlu
ZyYgcwogICAgIGlmIChtX2ZvbnRGYWNlVmFsdWVDYWNoZS5zaXplKCkgPiBtYXhpbXVtRm9udEZh
Y2VDYWNoZVNpemUpCiAgICAgICAgIG1fZm9udEZhY2VWYWx1ZUNhY2hlLmNsZWFyKCk7CiAKLSAg
ICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiYgdmFsdWUgPSBtX2ZvbnRGYWNlVmFsdWVDYWNoZS5hZGQo
c3RyaW5nLCAwKS5pdGVyYXRvci0+c2Vjb25kOworICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+JiB2
YWx1ZSA9IG1fZm9udEZhY2VWYWx1ZUNhY2hlLmFkZChzdHJpbmcsIDApLml0ZXJhdG9yLT52YWx1
ZTsKICAgICBpZiAoIXZhbHVlKQogICAgICAgICB2YWx1ZSA9IENTU1BhcnNlcjo6cGFyc2VGb250
RmFjZVZhbHVlKHN0cmluZyk7CiAgICAgcmV0dXJuIHZhbHVlOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvY3NzL1Byb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uLmNwcAppbmRleCA1ZmMy
ZDM4MDM1NWE5MzhlYTBlZWQ3ZDNlNDQwMTg2ZTRiOTE3Yjc4Li44MTAxZjI4OTcwN2Q4N2I0MDUx
ZTg3NWM4YjQ5MzRiOGVlNDA1YzRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvUHJv
cGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
UHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uLmNwcApAQCAtMzQ2LDcgKzM0Niw3IEBAIENT
U1ZhbHVlKiBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OmNsb25lQW5kQ2FjaGVGb3JD
U1NPTShDU1NWYWx1ZSogaW50ZXJuCiAgICAgaWYgKCFtX2Nzc29tQ1NTVmFsdWVDbG9uZXMpCiAg
ICAgICAgIG1fY3Nzb21DU1NWYWx1ZUNsb25lcyA9IGFkb3B0UHRyKG5ldyBIYXNoTWFwPENTU1Zh
bHVlKiwgUmVmUHRyPENTU1ZhbHVlPiA+KTsKICAgICAKLSAgICBSZWZQdHI8Q1NTVmFsdWU+JiBj
bG9uZWRWYWx1ZSA9IG1fY3Nzb21DU1NWYWx1ZUNsb25lcy0+YWRkKGludGVybmFsVmFsdWUsIFJl
ZlB0cjxDU1NWYWx1ZT4oKSkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBSZWZQdHI8Q1NTVmFsdWU+
JiBjbG9uZWRWYWx1ZSA9IG1fY3Nzb21DU1NWYWx1ZUNsb25lcy0+YWRkKGludGVybmFsVmFsdWUs
IFJlZlB0cjxDU1NWYWx1ZT4oKSkuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghY2xvbmVkVmFs
dWUpCiAgICAgICAgIGNsb25lZFZhbHVlID0gaW50ZXJuYWxWYWx1ZS0+Y2xvbmVGb3JDU1NPTSgp
OwogICAgIHJldHVybiBjbG9uZWRWYWx1ZS5nZXQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZUJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRl
ci5jcHAKaW5kZXggNDg2YTRkYmI4MWMxYzVkY2Y5OWEzZGFiMGQ2OTJjNDA4NjAxY2NjMS4uZmUx
ZGJmNGJhZmQ1NTYyMDUzZDRiM2E4ODMxOThjMWQ1MmE1MTc2YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0
eWxlQnVpbGRlci5jcHAKQEAgLTEwMTQsMjEgKzEwMTQsMjEgQEAgcHVibGljOgogICAgICAgICB0
eXBlZGVmIENvdW50ZXJEaXJlY3RpdmVNYXA6Oml0ZXJhdG9yIEl0ZXJhdG9yOwogICAgICAgICBJ
dGVyYXRvciBlbmQgPSBwYXJlbnRNYXAuZW5kKCk7CiAgICAgICAgIGZvciAoSXRlcmF0b3IgaXQg
PSBwYXJlbnRNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBDb3Vu
dGVyRGlyZWN0aXZlcyYgZGlyZWN0aXZlcyA9IG1hcC5hZGQoaXQtPmZpcnN0LCBDb3VudGVyRGly
ZWN0aXZlcygpKS5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICAgICAgQ291bnRlckRpcmVjdGl2
ZXMmIGRpcmVjdGl2ZXMgPSBtYXAuYWRkKGl0LT5rZXksIENvdW50ZXJEaXJlY3RpdmVzKCkpLml0
ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgICAgIGlmIChjb3VudGVyQmVoYXZpb3IgPT0gUmVzZXQp
IHsKLSAgICAgICAgICAgICAgICBkaXJlY3RpdmVzLm1fcmVzZXQgPSBpdC0+c2Vjb25kLm1fcmVz
ZXQ7Ci0gICAgICAgICAgICAgICAgZGlyZWN0aXZlcy5tX3Jlc2V0VmFsdWUgPSBpdC0+c2Vjb25k
Lm1fcmVzZXRWYWx1ZTsKKyAgICAgICAgICAgICAgICBkaXJlY3RpdmVzLm1fcmVzZXQgPSBpdC0+
dmFsdWUubV9yZXNldDsKKyAgICAgICAgICAgICAgICBkaXJlY3RpdmVzLm1fcmVzZXRWYWx1ZSA9
IGl0LT52YWx1ZS5tX3Jlc2V0VmFsdWU7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgICAgIC8vIEluaGVyaXRpbmcgYSBjb3VudGVyLWluY3JlbWVudCBtZWFucyB0YWtpbmcgdGhl
IHBhcmVudCdzIGN1cnJlbnQgdmFsdWUgZm9yIHRoZSBjb3VudGVyCiAgICAgICAgICAgICAgICAg
Ly8gYW5kIGFkZGluZyBpdCB0byBpdHNlbGYuCi0gICAgICAgICAgICAgICAgZGlyZWN0aXZlcy5t
X2luY3JlbWVudCA9IGl0LT5zZWNvbmQubV9pbmNyZW1lbnQ7CisgICAgICAgICAgICAgICAgZGly
ZWN0aXZlcy5tX2luY3JlbWVudCA9IGl0LT52YWx1ZS5tX2luY3JlbWVudDsKICAgICAgICAgICAg
ICAgICBkaXJlY3RpdmVzLm1faW5jcmVtZW50VmFsdWUgPSAwOwogICAgICAgICAgICAgICAgIGlm
IChkaXJlY3RpdmVzLm1faW5jcmVtZW50KSB7CiAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGlu
Y3JlbWVudFZhbHVlID0gZGlyZWN0aXZlcy5tX2luY3JlbWVudFZhbHVlOwotICAgICAgICAgICAg
ICAgICAgICBkaXJlY3RpdmVzLm1faW5jcmVtZW50VmFsdWUgPSBjbGFtcFRvSW50ZWdlcihpbmNy
ZW1lbnRWYWx1ZSArIGl0LT5zZWNvbmQubV9pbmNyZW1lbnRWYWx1ZSk7CisgICAgICAgICAgICAg
ICAgICAgIGRpcmVjdGl2ZXMubV9pbmNyZW1lbnRWYWx1ZSA9IGNsYW1wVG9JbnRlZ2VyKGluY3Jl
bWVudFZhbHVlICsgaXQtPnZhbHVlLm1faW5jcmVtZW50VmFsdWUpOwogICAgICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXMubV9pbmNyZW1lbnQgPSB0
cnVlOwotICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzLm1faW5jcmVtZW50VmFsdWUgPSBp
dC0+c2Vjb25kLm1faW5jcmVtZW50VmFsdWU7CisgICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2
ZXMubV9pbmNyZW1lbnRWYWx1ZSA9IGl0LT52YWx1ZS5tX2luY3JlbWVudFZhbHVlOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTA0Niw5ICsxMDQ2LDkg
QEAgcHVibGljOgogICAgICAgICBJdGVyYXRvciBlbmQgPSBtYXAuZW5kKCk7CiAgICAgICAgIGZv
ciAoSXRlcmF0b3IgaXQgPSBtYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQogICAgICAgICAg
ICAgaWYgKGNvdW50ZXJCZWhhdmlvciA9PSBSZXNldCkKLSAgICAgICAgICAgICAgICBpdC0+c2Vj
b25kLm1fcmVzZXQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBpdC0+dmFsdWUubV9yZXNldCA9
IGZhbHNlOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGl0LT5zZWNvbmQubV9p
bmNyZW1lbnQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBpdC0+dmFsdWUubV9pbmNyZW1lbnQg
PSBmYWxzZTsKIAogICAgICAgICBpbnQgbGVuZ3RoID0gbGlzdCA/IGxpc3QtPmxlbmd0aCgpIDog
MDsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewpAQCAtMTA2Miw3
ICsxMDYyLDcgQEAgcHVibGljOgogCiAgICAgICAgICAgICBBdG9taWNTdHJpbmcgaWRlbnRpZmll
ciA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4ocGFpci0+Zmlyc3QoKSktPmdldFN0
cmluZ1ZhbHVlKCk7CiAgICAgICAgICAgICBpbnQgdmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZSo+KHBhaXItPnNlY29uZCgpKS0+Z2V0SW50VmFsdWUoKTsKLSAgICAgICAgICAg
IENvdW50ZXJEaXJlY3RpdmVzJiBkaXJlY3RpdmVzID0gbWFwLmFkZChpZGVudGlmaWVyLmltcGwo
KSwgQ291bnRlckRpcmVjdGl2ZXMoKSkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgICAgIENv
dW50ZXJEaXJlY3RpdmVzJiBkaXJlY3RpdmVzID0gbWFwLmFkZChpZGVudGlmaWVyLmltcGwoKSwg
Q291bnRlckRpcmVjdGl2ZXMoKSkuaXRlcmF0b3ItPnZhbHVlOwogICAgICAgICAgICAgaWYgKGNv
dW50ZXJCZWhhdmlvciA9PSBSZXNldCkgewogICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXMubV9y
ZXNldCA9IHRydWU7CiAgICAgICAgICAgICAgICAgZGlyZWN0aXZlcy5tX3Jlc2V0VmFsdWUgPSB2
YWx1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAppbmRleCAxNWRlM2E3OThjMDUx
NDU2NjQ5NTY4NjM0NTIyY2UyYjE3ZTA0Yzg3Li45NjUxMjc5YWVmMzBmZWU0ZTMxZTllMTAxZDgx
ZTQ0MDE2OTcyMjVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCkBAIC00OTgs
NyArNDk4LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0RmVhdHVyZXMoKQogICAgIG1f
ZmVhdHVyZXMuYWRkKG1fYXV0aG9yU3R5bGUtPmZlYXR1cmVzKCkpOwogI2lmIEVOQUJMRShTVFlM
RV9TQ09QRUQpCiAgICAgZm9yIChTY29wZWRSdWxlU2V0TWFwOjppdGVyYXRvciBpdCA9IG1fc2Nv
cGVkQXV0aG9yU3R5bGVzLmJlZ2luKCk7IGl0ICE9IG1fc2NvcGVkQXV0aG9yU3R5bGVzLmVuZCgp
OyArK2l0KQotICAgICAgICBtX2ZlYXR1cmVzLmFkZChpdC0+c2Vjb25kLT5mZWF0dXJlcygpKTsK
KyAgICAgICAgbV9mZWF0dXJlcy5hZGQoaXQtPnZhbHVlLT5mZWF0dXJlcygpKTsKICNlbmRpZgog
ICAgIGlmIChtX3VzZXJTdHlsZSkKICAgICAgICAgbV9mZWF0dXJlcy5hZGQobV91c2VyU3R5bGUt
PmZlYXR1cmVzKCkpOwpAQCAtNTM1LDcgKzUzNSw3IEBAIGlubGluZSBSdWxlU2V0KiBTdHlsZVJl
c29sdmVyOjpydWxlU2V0Rm9yU2NvcGUoY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpIGNvbnN0
CiAgICAgaWYgKCFzY29wZS0+aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSkKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgU2NvcGVkUnVsZVNldE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Njb3Bl
ZEF1dGhvclN0eWxlcy5maW5kKHNjb3BlKTsKLSAgICByZXR1cm4gaXQgIT0gbV9zY29wZWRBdXRo
b3JTdHlsZXMuZW5kKCkgPyBpdC0+c2Vjb25kLmdldCgpIDogMDsgCisgICAgcmV0dXJuIGl0ICE9
IG1fc2NvcGVkQXV0aG9yU3R5bGVzLmVuZCgpID8gaXQtPnZhbHVlLmdldCgpIDogMDsgCiB9CiAj
ZW5kaWYKIApAQCAtNTU4LDggKzU1OCw4IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwZW5kQXV0
aG9yU3R5bGVzaGVldHModW5zaWduZWQgZmlyc3ROZXcsIGNvbnN0IFZlY3RvcjxSZWZQCiAgICAg
ICAgIGlmIChzY29wZSkgewogICAgICAgICAgICAgU2NvcGVkUnVsZVNldE1hcDo6QWRkUmVzdWx0
IGFkZFJlc3VsdCA9IG1fc2NvcGVkQXV0aG9yU3R5bGVzLmFkZChzY29wZSwgbnVsbHB0cik7CiAg
ICAgICAgICAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgICAgICAgICAgYWRk
UmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBSdWxlU2V0OjpjcmVhdGUoKTsKLSAgICAgICAgICAg
IGFkZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLT5hZGRSdWxlc0Zyb21TaGVldChzaGVldCwgKm1f
bWVkaXVtLCB0aGlzLCBzY29wZSk7CisgICAgICAgICAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZSA9IFJ1bGVTZXQ6OmNyZWF0ZSgpOworICAgICAgICAgICAgYWRkUmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZS0+YWRkUnVsZXNGcm9tU2hlZXQoc2hlZXQsICptX21lZGl1bSwgdGhpcywgc2Nv
cGUpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICNlbmRpZgpAQCAtNjg5LDEw
ICs2ODksMTAgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpzd2VlcE1hdGNoZWRQcm9wZXJ0aWVzQ2Fj
aGUoKQogICAgIE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGU6Oml0ZXJhdG9yIGl0ID0gbV9tYXRjaGVk
UHJvcGVydGllc0NhY2hlLmJlZ2luKCk7CiAgICAgTWF0Y2hlZFByb3BlcnRpZXNDYWNoZTo6aXRl
cmF0b3IgZW5kID0gbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlLmVuZCgpOwogICAgIGZvciAoOyBp
dCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgVmVjdG9yPE1hdGNoZWRQcm9wZXJ0aWVzPiYgbWF0
Y2hlZFByb3BlcnRpZXMgPSBpdC0+c2Vjb25kLm1hdGNoZWRQcm9wZXJ0aWVzOworICAgICAgICBW
ZWN0b3I8TWF0Y2hlZFByb3BlcnRpZXM+JiBtYXRjaGVkUHJvcGVydGllcyA9IGl0LT52YWx1ZS5t
YXRjaGVkUHJvcGVydGllczsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXRjaGVk
UHJvcGVydGllcy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgaWYgKG1hdGNoZWRQcm9wZXJ0
aWVzW2ldLnByb3BlcnRpZXMtPmhhc09uZVJlZigpKSB7Ci0gICAgICAgICAgICAgICAgdG9SZW1v
dmUuYXBwZW5kKGl0LT5maXJzdCk7CisgICAgICAgICAgICAgICAgdG9SZW1vdmUuYXBwZW5kKGl0
LT5rZXkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9
CkBAIC0xODcxLDcgKzE4NzEsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmtleWZyYW1lU3R5bGVz
Rm9yQW5pbWF0aW9uKEVsZW1lbnQqIGUsIGNvbnN0IFJlbmRlclN0eWxlKiBlbAogICAgIGlmIChp
dCA9PSBtX2tleWZyYW1lc1J1bGVNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNv
bnN0IFN0eWxlUnVsZUtleWZyYW1lcyoga2V5ZnJhbWVzUnVsZSA9IGl0LT5zZWNvbmQuZ2V0KCk7
CisgICAgY29uc3QgU3R5bGVSdWxlS2V5ZnJhbWVzKiBrZXlmcmFtZXNSdWxlID0gaXQtPnZhbHVl
LmdldCgpOwogCiAgICAgLy8gQ29uc3RydWN0IGFuZCBwb3B1bGF0ZSB0aGUgc3R5bGUgZm9yIGVh
Y2gga2V5ZnJhbWUKICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlS2V5ZnJhbWU+ID4mIGtl
eWZyYW1lcyA9IGtleWZyYW1lc1J1bGUtPmtleWZyYW1lcygpOwpAQCAtMjU2Niw3ICsyNTY2LDcg
QEAgc3RhdGljIHZvaWQgcmVwb3J0QXRvbVJ1bGVNYXAoTWVtb3J5Q2xhc3NJbmZvKiBpbmZvLCBj
b25zdCBSdWxlU2V0OjpBdG9tUnVsZU1hcCYKIHsKICAgICBpbmZvLT5hZGRIYXNoTWFwKGF0b21p
Y1J1bGVNYXApOwogICAgIGZvciAoUnVsZVNldDo6QXRvbVJ1bGVNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gYXRvbWljUnVsZU1hcC5iZWdpbigpOyBpdCAhPSBhdG9taWNSdWxlTWFwLmVuZCgpOyAr
K2l0KQotICAgICAgICBpbmZvLT5hZGRJbnN0cnVtZW50ZWRWZWN0b3IoKml0LT5zZWNvbmQpOwor
ICAgICAgICBpbmZvLT5hZGRJbnN0cnVtZW50ZWRWZWN0b3IoKml0LT52YWx1ZSk7CiB9CiAKIHZv
aWQgUnVsZVNldDo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2Jq
ZWN0SW5mbykgY29uc3QKQEAgLTI2MzcsNyArMjYzNyw3IEBAIHZvaWQgUnVsZVNldDo6YWRkVG9S
dWxlU2V0KEF0b21pY1N0cmluZ0ltcGwqIGtleSwgQXRvbVJ1bGVNYXAmIG1hcCwgY29uc3QgUnVs
ZURhCiB7CiAgICAgaWYgKCFrZXkpCiAgICAgICAgIHJldHVybjsKLSAgICBPd25QdHI8VmVjdG9y
PFJ1bGVEYXRhPiA+JiBydWxlcyA9IG1hcC5hZGQoa2V5LCBudWxscHRyKS5pdGVyYXRvci0+c2Vj
b25kOworICAgIE93blB0cjxWZWN0b3I8UnVsZURhdGE+ID4mIHJ1bGVzID0gbWFwLmFkZChrZXks
IG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoIXJ1bGVzKQogICAgICAgICBydWxl
cyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8UnVsZURhdGE+KTsKICAgICBydWxlcy0+YXBwZW5kKHJ1
bGVEYXRhKTsKQEAgLTI3OTgsNyArMjc5OCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzaHJpbmtN
YXBWZWN0b3JzVG9GaXQoUnVsZVNldDo6QXRvbVJ1bGVNYXAmIG1hcCkKIHsKICAgICBSdWxlU2V0
OjpBdG9tUnVsZU1hcDo6aXRlcmF0b3IgZW5kID0gbWFwLmVuZCgpOwogICAgIGZvciAoUnVsZVNl
dDo6QXRvbVJ1bGVNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkKLSAgICAgICAgaXQtPnNlY29uZC0+c2hyaW5rVG9GaXQoKTsKKyAgICAgICAgaXQtPnZhbHVl
LT5zaHJpbmtUb0ZpdCgpOwogfQogCiB2b2lkIFJ1bGVTZXQ6OnNocmlua1RvRml0KCkKQEAgLTI5
NDQsNyArMjk0NCw3IEBAIGNvbnN0IFN0eWxlUmVzb2x2ZXI6Ok1hdGNoZWRQcm9wZXJ0aWVzQ2Fj
aGVJdGVtKiBTdHlsZVJlc29sdmVyOjpmaW5kRnJvbU1hdGNoZWRQCiAgICAgTWF0Y2hlZFByb3Bl
cnRpZXNDYWNoZTo6aXRlcmF0b3IgaXQgPSBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUuZmluZCho
YXNoKTsKICAgICBpZiAoaXQgPT0gbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlLmVuZCgpKQogICAg
ICAgICByZXR1cm4gMDsKLSAgICBNYXRjaGVkUHJvcGVydGllc0NhY2hlSXRlbSYgY2FjaGVJdGVt
ID0gaXQtPnNlY29uZDsKKyAgICBNYXRjaGVkUHJvcGVydGllc0NhY2hlSXRlbSYgY2FjaGVJdGVt
ID0gaXQtPnZhbHVlOwogCiAgICAgc2l6ZV90IHNpemUgPSBtYXRjaFJlc3VsdC5tYXRjaGVkUHJv
cGVydGllcy5zaXplKCk7CiAgICAgaWYgKHNpemUgIT0gY2FjaGVJdGVtLm1hdGNoZWRQcm9wZXJ0
aWVzLnNpemUoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0Q29u
dGVudHMuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHAKaW5k
ZXggM2VhYTBkYTM2OTEyMGNmZjEwYmI5Y2JjZTUzYjVhNzRjYWQyYWZhZi4uODIyODgyMzQwYTky
ZTRkMTgzODczNmE3ZmRlNjk4MTE5YTAzMTY3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
U2hlZXRDb250ZW50cy5jcHAKQEAgLTIzNSw3ICsyMzUsNyBAQCB2b2lkIFN0eWxlU2hlZXRDb250
ZW50czo6cGFyc2VyQWRkTmFtZXNwYWNlKGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4LCBjb25z
dCBBdAogICAgIFByZWZpeE5hbWVzcGFjZVVSSU1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fbmFt
ZXNwYWNlcy5hZGQocHJlZml4LCB1cmkpOwogICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKICAg
ICAgICAgcmV0dXJuOwotICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gdXJpOworICAgIHJl
c3VsdC5pdGVyYXRvci0+dmFsdWUgPSB1cmk7CiB9CiAKIGNvbnN0IEF0b21pY1N0cmluZyYgU3R5
bGVTaGVldENvbnRlbnRzOjpkZXRlcm1pbmVOYW1lc3BhY2UoY29uc3QgQXRvbWljU3RyaW5nJiBw
cmVmaXgpCkBAIC0yNDcsNyArMjQ3LDcgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBTdHlsZVNoZWV0
Q29udGVudHM6OmRldGVybWluZU5hbWVzcGFjZShjb25zdCBBdG9taWNTdHJpbmcmIHAKICAgICBQ
cmVmaXhOYW1lc3BhY2VVUklNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9uYW1lc3BhY2VzLmZp
bmQocHJlZml4KTsKICAgICBpZiAoaXQgPT0gbV9uYW1lc3BhY2VzLmVuZCgpKQogICAgICAgICBy
ZXR1cm4gbnVsbEF0b207Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgcmV0dXJuIGl0LT52
YWx1ZTsKIH0KIAogdm9pZCBTdHlsZVNoZWV0Q29udGVudHM6OnJlcXVlc3RJbXBvcnRlZFN0eWxl
U2hlZXRzKENTU1N0eWxlU2hlZXQqIHJvb3RTaGVldCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9DaGVja2VkUmFkaW9CdXR0b25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGVj
a2VkUmFkaW9CdXR0b25zLmNwcAppbmRleCBlNjcyMzI5YWY4ZGUzNzhiZWZkZmMxNGY4YWNiZDBm
MmVjMGM3NDA1Li45ZmE1MDliYjk1MWQzODA5MTQwMDAwMTFlZTVjZTY1MTRhOThkNDZiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hlY2tlZFJhZGlvQnV0dG9ucy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL0NoZWNrZWRSYWRpb0J1dHRvbnMuY3BwCkBAIC0xODUsNyArMTg1
LDcgQEAgdm9pZCBDaGVja2VkUmFkaW9CdXR0b25zOjphZGRCdXR0b24oSFRNTElucHV0RWxlbWVu
dCogZWxlbWVudCkKICAgICBpZiAoIW1fbmFtZVRvR3JvdXBNYXApCiAgICAgICAgIG1fbmFtZVRv
R3JvdXBNYXAgPSBhZG9wdFB0cihuZXcgTmFtZVRvR3JvdXBNYXApOwogCi0gICAgT3duUHRyPFJh
ZGlvQnV0dG9uR3JvdXA+JiBncm91cCA9IG1fbmFtZVRvR3JvdXBNYXAtPmFkZChlbGVtZW50LT5u
YW1lKCkuaW1wbCgpLCBQYXNzT3duUHRyPFJhZGlvQnV0dG9uR3JvdXA+KCkpLml0ZXJhdG9yLT5z
ZWNvbmQ7CisgICAgT3duUHRyPFJhZGlvQnV0dG9uR3JvdXA+JiBncm91cCA9IG1fbmFtZVRvR3Jv
dXBNYXAtPmFkZChlbGVtZW50LT5uYW1lKCkuaW1wbCgpLCBQYXNzT3duUHRyPFJhZGlvQnV0dG9u
R3JvdXA+KCkpLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoIWdyb3VwKQogICAgICAgICBncm91
cCA9IFJhZGlvQnV0dG9uR3JvdXA6OmNyZWF0ZSgpOwogICAgIGdyb3VwLT5hZGQoZWxlbWVudCk7
CkBAIC0yNDYsOCArMjQ2LDggQEAgdm9pZCBDaGVja2VkUmFkaW9CdXR0b25zOjpyZW1vdmVCdXR0
b24oSFRNTElucHV0RWxlbWVudCogZWxlbWVudCkKICAgICBOYW1lVG9Hcm91cE1hcDo6aXRlcmF0
b3IgaXQgPSBtX25hbWVUb0dyb3VwTWFwLT5maW5kKGVsZW1lbnQtPm5hbWUoKS5pbXBsKCkpOwog
ICAgIGlmIChpdCA9PSBtX25hbWVUb0dyb3VwTWFwLT5lbmQoKSkKICAgICAgICAgcmV0dXJuOwot
ICAgIGl0LT5zZWNvbmQtPnJlbW92ZShlbGVtZW50KTsKLSAgICBpZiAoaXQtPnNlY29uZC0+aXNF
bXB0eSgpKSB7CisgICAgaXQtPnZhbHVlLT5yZW1vdmUoZWxlbWVudCk7CisgICAgaWYgKGl0LT52
YWx1ZS0+aXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBXZSBtYXkgc2tpcCBkZWFsbG9j
YXRpbmcgdGhlIGVtcHR5IFJhZGlvQnV0dG9uR3JvdXAgZm9yCiAgICAgICAgIC8vIHBlcmZvcm1h
bmNlIGltcHJvdmVtZW50LiBJZiB3ZSBkbyBzbywgd2UgbmVlZCB0byBjaGFuZ2UgdGhlIGtleSB0
eXBlCiAgICAgICAgIC8vIG9mIG1fbmFtZVRvR3JvdXBNYXAgZnJvbSBBdG9taWNTdHJpbmdJbXBs
KiB0byBSZWZQdHI8QXRvbWljU3RyaW5nSW1wbD4uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hp
bGRMaXN0TXV0YXRpb25TY29wZS5jcHAKaW5kZXggZjRhMmRhMDRhYjYxNTgxM2Y4NjRhZTEzNTZm
NGVhYTRkYjBiZmU0OS4uYWZkOGRkOWYxYjAwOTg1YzdhMjdiYmJiZGEzZWJmODA3NzZkNGM3YyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0NoaWxkTGlzdE11dGF0aW9uU2NvcGUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZExpc3RNdXRhdGlvblNjb3BlLmNwcApAQCAt
MTkyLDI3ICsxOTIsMjcgQEAgdm9pZCBDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFj
Y3VtdWxhdGlvblJvdXRlcjo6Y2hpbGRBZGRlZChOb2RlKiB0YXJnZXQKIHsKICAgICBIYXNoTWFw
PE5vZGUqLCBPd25QdHI8Q2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRv
cj4gPjo6aXRlcmF0b3IgaXRlciA9IG1fYWNjdW11bGF0aW9ucy5maW5kKHRhcmdldCk7CiAgICAg
QVNTRVJUKGl0ZXIgIT0gbV9hY2N1bXVsYXRpb25zLmVuZCgpKTsKLSAgICBpZiAoaXRlciA9PSBt
X2FjY3VtdWxhdGlvbnMuZW5kKCkgfHwgIWl0ZXItPnNlY29uZCkKKyAgICBpZiAoaXRlciA9PSBt
X2FjY3VtdWxhdGlvbnMuZW5kKCkgfHwgIWl0ZXItPnZhbHVlKQogICAgICAgICByZXR1cm47CiAK
LSAgICBpdGVyLT5zZWNvbmQtPmNoaWxkQWRkZWQoY2hpbGQpOworICAgIGl0ZXItPnZhbHVlLT5j
aGlsZEFkZGVkKGNoaWxkKTsKIH0KIAogdm9pZCBDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRh
dGlvbkFjY3VtdWxhdGlvblJvdXRlcjo6d2lsbFJlbW92ZUNoaWxkKE5vZGUqIHRhcmdldCwgTm9k
ZSogY2hpbGQpCiB7CiAgICAgSGFzaE1hcDxOb2RlKiwgT3duUHRyPENoaWxkTGlzdE11dGF0aW9u
U2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0b3I+ID46Oml0ZXJhdG9yIGl0ZXIgPSBtX2FjY3VtdWxh
dGlvbnMuZmluZCh0YXJnZXQpOwogICAgIEFTU0VSVChpdGVyICE9IG1fYWNjdW11bGF0aW9ucy5l
bmQoKSk7Ci0gICAgaWYgKGl0ZXIgPT0gbV9hY2N1bXVsYXRpb25zLmVuZCgpIHx8ICFpdGVyLT5z
ZWNvbmQpCisgICAgaWYgKGl0ZXIgPT0gbV9hY2N1bXVsYXRpb25zLmVuZCgpIHx8ICFpdGVyLT52
YWx1ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaXRlci0+c2Vjb25kLT53aWxsUmVtb3ZlQ2hp
bGQoY2hpbGQpOworICAgIGl0ZXItPnZhbHVlLT53aWxsUmVtb3ZlQ2hpbGQoY2hpbGQpOwogfQog
CiB2b2lkIENoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVy
OjppbmNyZW1lbnRTY29waW5nTGV2ZWwoTm9kZSogdGFyZ2V0KQogewogICAgIFNjb3BpbmdMZXZl
bE1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fc2NvcGluZ0xldmVscy5hZGQodGFyZ2V0LCAxKTsK
ICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgICsrKHJlc3VsdC5pdGVyYXRv
ci0+c2Vjb25kKTsKKyAgICAgICAgKysocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKQEAgLTIyOSw4ICsyMjksOCBAQCB2b2lkIENoaWxkTGlzdE11dGF0
aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVyOjpkZWNyZW1lbnRTY29waW5nTGV2
ZWwoTgogICAgIFNjb3BpbmdMZXZlbE1hcDo6aXRlcmF0b3IgaXRlciA9IG1fc2NvcGluZ0xldmVs
cy5maW5kKHRhcmdldCk7CiAgICAgQVNTRVJUKGl0ZXIgIT0gbV9zY29waW5nTGV2ZWxzLmVuZCgp
KTsKIAotICAgIC0tKGl0ZXItPnNlY29uZCk7Ci0gICAgaWYgKGl0ZXItPnNlY29uZCA+IDApCisg
ICAgLS0oaXRlci0+dmFsdWUpOworICAgIGlmIChpdGVyLT52YWx1ZSA+IDApCiAgICAgICAgIHJl
dHVybjsKIAogICAgIG1fc2NvcGluZ0xldmVscy5yZW1vdmUoaXRlcik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50LmNwcAppbmRleCA5MWZhMmU4M2NkYzQwNWU5ZGU0YjhiNDgxYjFiOTVkYzQyMTk2NzBmLi5m
ZDI5MTNjM2E2YjE3NWM2NjU1NzdmZjk1YTQ1ZGQ1MzRlNjRiYzE1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAKQEAgLTI5NDcsNyArMjk0Nyw3IEBAIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5
bGVTaGVldD4gPiogRG9jdW1lbnQ6OnBhZ2VHcm91cFVzZXJTaGVldHMoKSBjb25zdAogCiAgICAg
VXNlclN0eWxlU2hlZXRNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHNoZWV0c01hcC0+ZW5kKCk7
CiAgICAgZm9yIChVc2VyU3R5bGVTaGVldE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBzaGVldHNN
YXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBjb25zdCBVc2VyU3R5bGVT
aGVldFZlY3Rvciogc2hlZXRzID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgY29uc3QgVXNl
clN0eWxlU2hlZXRWZWN0b3IqIHNoZWV0cyA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHNoZWV0cy0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAg
IGNvbnN0IFVzZXJTdHlsZVNoZWV0KiBzaGVldCA9IHNoZWV0cy0+YXQoaSkuZ2V0KCk7CiAgICAg
ICAgICAgICBpZiAoc2hlZXQtPmluamVjdGVkRnJhbWVzKCkgPT0gSW5qZWN0SW5Ub3BGcmFtZU9u
bHkgJiYgb3duZXJFbGVtZW50KCkpCkBAIC00ODMwLDEwICs0ODMwLDEwIEBAIFBhc3NSZWZQdHI8
SFRNTENvbGxlY3Rpb24+IERvY3VtZW50Ojp3aW5kb3dOYW1lZEl0ZW1zKGNvbnN0IEF0b21pY1N0
cmluZyYgbmFtZSkKIHsKICAgICBOYW1lZENvbGxlY3Rpb25NYXA6OkFkZFJlc3VsdCByZXN1bHQg
PSBtX3dpbmRvd05hbWVkSXRlbUNvbGxlY3Rpb25zLmFkZChuYW1lLCAwKTsKICAgICBpZiAoIXJl
c3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7
CisgICAgICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogCiAgICAgUmVmUHRyPEhU
TUxOYW1lQ29sbGVjdGlvbj4gY29sbGVjdGlvbiA9IEhUTUxOYW1lQ29sbGVjdGlvbjo6Y3JlYXRl
KHRoaXMsIFdpbmRvd05hbWVkSXRlbXMsIG5hbWUpOwotICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vj
b25kID0gY29sbGVjdGlvbi5nZXQoKTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gY29s
bGVjdGlvbi5nZXQoKTsKICAgICByZXR1cm4gY29sbGVjdGlvbi5yZWxlYXNlKCk7CiB9CiAKQEAg
LTQ4NDEsMTAgKzQ4NDEsMTAgQEAgUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gRG9jdW1lbnQ6
OmRvY3VtZW50TmFtZWRJdGVtcyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUKIHsKICAgICBOYW1l
ZENvbGxlY3Rpb25NYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX2RvY3VtZW50TmFtZWRJdGVtQ29s
bGVjdGlvbnMuYWRkKG5hbWUsIDApOwogICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0gICAg
ICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dC5pdGVyYXRvci0+dmFsdWU7CiAKICAgICBSZWZQdHI8SFRNTE5hbWVDb2xsZWN0aW9uPiBjb2xs
ZWN0aW9uID0gSFRNTE5hbWVDb2xsZWN0aW9uOjpjcmVhdGUodGhpcywgRG9jdW1lbnROYW1lZEl0
ZW1zLCBuYW1lKTsKLSAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IGNvbGxlY3Rpb24uZ2V0
KCk7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGNvbGxlY3Rpb24uZ2V0KCk7CiAgICAg
cmV0dXJuIGNvbGxlY3Rpb24ucmVsZWFzZSgpOwogfQogCkBAIC01MTc5LDcgKzUxNzksNyBAQCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0KiBEb2N1bWVudDo6Z2V0Q1NTQ2FudmFzQ29udGV4dChjb25z
dCBTdHJpbmcmIHR5cGUsIGNvbnN0CiAKIEhUTUxDYW52YXNFbGVtZW50KiBEb2N1bWVudDo6Z2V0
Q1NTQ2FudmFzRWxlbWVudChjb25zdCBTdHJpbmcmIG5hbWUpCiB7Ci0gICAgUmVmUHRyPEhUTUxD
YW52YXNFbGVtZW50PiYgZWxlbWVudCA9IG1fY3NzQ2FudmFzRWxlbWVudHMuYWRkKG5hbWUsIDAp
Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgUmVmUHRyPEhUTUxDYW52YXNFbGVtZW50PiYgZWxlbWVu
dCA9IG1fY3NzQ2FudmFzRWxlbWVudHMuYWRkKG5hbWUsIDApLml0ZXJhdG9yLT52YWx1ZTsKICAg
ICBpZiAoIWVsZW1lbnQpCiAgICAgICAgIGVsZW1lbnQgPSBIVE1MQ2FudmFzRWxlbWVudDo6Y3Jl
YXRlKHRoaXMpOwogICAgIHJldHVybiBlbGVtZW50LmdldCgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcAppbmRleCBhM2ViYzkzNjkzMjVhNDdi
MmU2MjkyODY5NjBiNGQ2ZmViYzJmMGFlLi5iMmYwMDg5NTRmZTdlYTBlNjcwZGI3MTViNjM1M2Qy
NTNiYTI5NWEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJD
b250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250
cm9sbGVyLmNwcApAQCAtMzExLDcgKzMxMSw3IEBAIERvY3VtZW50TWFya2VyKiBEb2N1bWVudE1h
cmtlckNvbnRyb2xsZXI6Om1hcmtlckNvbnRhaW5pbmdQb2ludChjb25zdCBMYXlvdXRQb2luCiAg
ICAgTWFya2VyTWFwOjppdGVyYXRvciBlbmQgPSBtX21hcmtlcnMuZW5kKCk7CiAgICAgZm9yIChN
YXJrZXJNYXA6Oml0ZXJhdG9yIG5vZGVJdGVyYXRvciA9IG1fbWFya2Vycy5iZWdpbigpOyBub2Rl
SXRlcmF0b3IgIT0gZW5kOyArK25vZGVJdGVyYXRvcikgewogICAgICAgICAvLyBpbm5lciBsb29w
OyBwcm9jZXNzIGVhY2ggbWFya2VyIGluIHRoaXMgbm9kZQotICAgICAgICBNYXJrZXJMaXN0KiBs
aXN0ID0gbm9kZUl0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgIE1hcmtlckxpc3QqIGxpc3QgPSBu
b2RlSXRlcmF0b3ItPnZhbHVlOwogICAgICAgICB1bnNpZ25lZCBtYXJrZXJDb3VudCA9IGxpc3Qt
PnNpemUoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBtYXJrZXJJbmRleCA9IDA7IG1hcmtlcklu
ZGV4IDwgbWFya2VyQ291bnQ7ICsrbWFya2VySW5kZXgpIHsKICAgICAgICAgICAgIFJlbmRlcmVk
RG9jdW1lbnRNYXJrZXImIG1hcmtlciA9IGxpc3QtPmF0KG1hcmtlckluZGV4KTsKQEAgLTM5OSw3
ICszOTksNyBAQCBWZWN0b3I8SW50UmVjdD4gRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW5k
ZXJlZFJlY3RzRm9yTWFya2VycyhEb2N1bWVudE1hcmtlcgogICAgIE1hcmtlck1hcDo6aXRlcmF0
b3IgZW5kID0gbV9tYXJrZXJzLmVuZCgpOwogICAgIGZvciAoTWFya2VyTWFwOjppdGVyYXRvciBu
b2RlSXRlcmF0b3IgPSBtX21hcmtlcnMuYmVnaW4oKTsgbm9kZUl0ZXJhdG9yICE9IGVuZDsgKytu
b2RlSXRlcmF0b3IpIHsKICAgICAgICAgLy8gaW5uZXIgbG9vcDsgcHJvY2VzcyBlYWNoIG1hcmtl
ciBpbiB0aGlzIG5vZGUKLSAgICAgICAgTWFya2VyTGlzdCogbGlzdCA9IG5vZGVJdGVyYXRvci0+
c2Vjb25kOworICAgICAgICBNYXJrZXJMaXN0KiBsaXN0ID0gbm9kZUl0ZXJhdG9yLT52YWx1ZTsK
ICAgICAgICAgdW5zaWduZWQgbWFya2VyQ291bnQgPSBsaXN0LT5zaXplKCk7CiAgICAgICAgIGZv
ciAodW5zaWduZWQgbWFya2VySW5kZXggPSAwOyBtYXJrZXJJbmRleCA8IG1hcmtlckNvdW50OyAr
K21hcmtlckluZGV4KSB7CiAgICAgICAgICAgICBjb25zdCBSZW5kZXJlZERvY3VtZW50TWFya2Vy
JiBtYXJrZXIgPSBsaXN0LT5hdChtYXJrZXJJbmRleCk7CkBAIC00MjYsNyArNDI2LDcgQEAgdm9p
ZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbW92ZU1hcmtlcnMoTm9kZSogbm9kZSwgRG9j
dW1lbnRNYXJrZXI6Ok1hcmtlclQKICAgICAKICAgICBNYXJrZXJNYXA6Oml0ZXJhdG9yIGl0ZXJh
dG9yID0gbV9tYXJrZXJzLmZpbmQobm9kZSk7CiAgICAgaWYgKGl0ZXJhdG9yICE9IG1fbWFya2Vy
cy5lbmQoKSkKLSAgICAgICAgcmVtb3ZlTWFya2Vyc0Zyb21MaXN0KG5vZGUsIGl0ZXJhdG9yLT5z
ZWNvbmQsIG1hcmtlclR5cGVzKTsKKyAgICAgICAgcmVtb3ZlTWFya2Vyc0Zyb21MaXN0KG5vZGUs
IGl0ZXJhdG9yLT52YWx1ZSwgbWFya2VyVHlwZXMpOwogfQogCiB2b2lkIERvY3VtZW50TWFya2Vy
Q29udHJvbGxlcjo6cmVtb3ZlTWFya2VycyhEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZXMgbWFy
a2VyVHlwZXMpCkBAIC00MzksNyArNDM5LDcgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXI6OnJlbW92ZU1hcmtlcnMoRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGVzIG1hcmtlclQKICAg
ICBNYXJrZXJNYXAgbWFya2VyTWFwQ29weSA9IG1fbWFya2VyczsKICAgICBNYXJrZXJNYXA6Oml0
ZXJhdG9yIGVuZCA9IG1hcmtlck1hcENvcHkuZW5kKCk7CiAgICAgZm9yIChNYXJrZXJNYXA6Oml0
ZXJhdG9yIGkgPSBtYXJrZXJNYXBDb3B5LmJlZ2luKCk7IGkgIT0gZW5kOyArK2kpCi0gICAgICAg
IHJlbW92ZU1hcmtlcnNGcm9tTGlzdChpLT5maXJzdC5nZXQoKSwgaS0+c2Vjb25kLCBtYXJrZXJU
eXBlcyk7CisgICAgICAgIHJlbW92ZU1hcmtlcnNGcm9tTGlzdChpLT5rZXkuZ2V0KCksIGktPnZh
bHVlLCBtYXJrZXJUeXBlcyk7CiAgICAgbV9wb3NzaWJseUV4aXN0aW5nTWFya2VyVHlwZXMucmVt
b3ZlKG1hcmtlclR5cGVzKTsKIH0KIApAQCAtNDk1LDEwICs0OTUsMTAgQEAgdm9pZCBEb2N1bWVu
dE1hcmtlckNvbnRyb2xsZXI6OnJlcGFpbnRNYXJrZXJzKERvY3VtZW50TWFya2VyOjpNYXJrZXJU
eXBlcyBtYXJrZXIKICAgICAvLyBvdXRlciBsb29wOiBwcm9jZXNzIGVhY2ggbWFya2VyZWQgbm9k
ZSBpbiB0aGUgZG9jdW1lbnQKICAgICBNYXJrZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fbWFya2Vy
cy5lbmQoKTsKICAgICBmb3IgKE1hcmtlck1hcDo6aXRlcmF0b3IgaSA9IG1fbWFya2Vycy5iZWdp
bigpOyBpICE9IGVuZDsgKytpKSB7Ci0gICAgICAgIE5vZGUqIG5vZGUgPSBpLT5maXJzdC5nZXQo
KTsKKyAgICAgICAgTm9kZSogbm9kZSA9IGktPmtleS5nZXQoKTsKIAogICAgICAgICAvLyBpbm5l
ciBsb29wOiBwcm9jZXNzIGVhY2ggbWFya2VyIGluIHRoZSBjdXJyZW50IG5vZGUKLSAgICAgICAg
TWFya2VyTGlzdCogbGlzdCA9IGktPnNlY29uZDsKKyAgICAgICAgTWFya2VyTGlzdCogbGlzdCA9
IGktPnZhbHVlOwogICAgICAgICBib29sIG5vZGVOZWVkc1JlcGFpbnQgPSBmYWxzZTsKICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgIT0gbGlzdC0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAg
ICAgIERvY3VtZW50TWFya2VyIG1hcmtlciA9IGxpc3QtPmF0KGkpOwpAQCAtNTI2LDcgKzUyNiw3
IEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjppbnZhbGlkYXRlUmVuZGVyZWRSZWN0
c0Zvck1hcmtlcnNJblJlY3QoY29uc3QgTGF5CiAgICAgZm9yIChNYXJrZXJNYXA6Oml0ZXJhdG9y
IGkgPSBtX21hcmtlcnMuYmVnaW4oKTsgaSAhPSBlbmQ7ICsraSkgewogCiAgICAgICAgIC8vIGlu
bmVyIGxvb3A6IHByb2Nlc3MgZWFjaCByZWN0IGluIHRoZSBjdXJyZW50IG5vZGUKLSAgICAgICAg
TWFya2VyTGlzdCogbGlzdCA9IGktPnNlY29uZDsKKyAgICAgICAgTWFya2VyTGlzdCogbGlzdCA9
IGktPnZhbHVlOwogICAgICAgICBmb3IgKHNpemVfdCBsaXN0SW5kZXggPSAwOyBsaXN0SW5kZXgg
PCBsaXN0LT5zaXplKCk7ICsrbGlzdEluZGV4KQogICAgICAgICAgICAgbGlzdC0+YXQobGlzdElu
ZGV4KS5pbnZhbGlkYXRlKHIpOwogICAgIH0KQEAgLTY3NSw5ICs2NzUsOSBAQCB2b2lkIERvY3Vt
ZW50TWFya2VyQ29udHJvbGxlcjo6c2hvd01hcmtlcnMoKSBjb25zdAogICAgIGZwcmludGYoc3Rk
ZXJyLCAiJWQgbm9kZXMgaGF2ZSBtYXJrZXJzOlxuIiwgbV9tYXJrZXJzLnNpemUoKSk7CiAgICAg
TWFya2VyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX21hcmtlcnMuZW5kKCk7CiAgICAgZm9y
IChNYXJrZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIG5vZGVJdGVyYXRvciA9IG1fbWFya2Vycy5iZWdp
bigpOyBub2RlSXRlcmF0b3IgIT0gZW5kOyArK25vZGVJdGVyYXRvcikgewotICAgICAgICBOb2Rl
KiBub2RlID0gbm9kZUl0ZXJhdG9yLT5maXJzdC5nZXQoKTsKKyAgICAgICAgTm9kZSogbm9kZSA9
IG5vZGVJdGVyYXRvci0+a2V5LmdldCgpOwogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVwIiwg
bm9kZSk7Ci0gICAgICAgIE1hcmtlckxpc3QqIGxpc3QgPSBub2RlSXRlcmF0b3ItPnNlY29uZDsK
KyAgICAgICAgTWFya2VyTGlzdCogbGlzdCA9IG5vZGVJdGVyYXRvci0+dmFsdWU7CiAgICAgICAg
IGZvciAodW5zaWduZWQgbWFya2VySW5kZXggPSAwOyBtYXJrZXJJbmRleCA8IGxpc3QtPnNpemUo
KTsgKyttYXJrZXJJbmRleCkgewogICAgICAgICAgICAgY29uc3QgRG9jdW1lbnRNYXJrZXImIG1h
cmtlciA9IGxpc3QtPmF0KG1hcmtlckluZGV4KTsKICAgICAgICAgICAgIGZwcmludGYoc3RkZXJy
LCAiICVkOlslZDolZF0oJWQpIiwgbWFya2VyLnR5cGUoKSwgbWFya2VyLnN0YXJ0T2Zmc2V0KCks
IG1hcmtlci5lbmRPZmZzZXQoKSwgbWFya2VyLmFjdGl2ZU1hdGNoKCkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50T3JkZXJlZE1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnRPcmRlcmVkTWFwLmNwcAppbmRleCAwODJhYTA3NDBhNzFjY2RmNTBlMWQ0
MmQyM2QzMTdlNjNhZjJmNGRhLi4xMjk3ZTUxMDJmYjRlNzljZTNkYjExMjM1NzAyMWUzZGQwNTU0
YTUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRPcmRlcmVkTWFwLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRPcmRlcmVkTWFwLmNwcApAQCAtOTgs
NyArOTgsNyBAQCB2b2lkIERvY3VtZW50T3JkZXJlZE1hcDo6cmVtb3ZlKEF0b21pY1N0cmluZ0lt
cGwqIGtleSwgRWxlbWVudCogZWxlbWVudCkKIAogICAgIG1fbWFwLmNoZWNrQ29uc2lzdGVuY3ko
KTsKICAgICBNYXA6Oml0ZXJhdG9yIGNhY2hlZEl0ZW0gPSBtX21hcC5maW5kKGtleSk7Ci0gICAg
aWYgKGNhY2hlZEl0ZW0gIT0gbV9tYXAuZW5kKCkgJiYgY2FjaGVkSXRlbS0+c2Vjb25kID09IGVs
ZW1lbnQpCisgICAgaWYgKGNhY2hlZEl0ZW0gIT0gbV9tYXAuZW5kKCkgJiYgY2FjaGVkSXRlbS0+
dmFsdWUgPT0gZWxlbWVudCkKICAgICAgICAgbV9tYXAucmVtb3ZlKGNhY2hlZEl0ZW0pOwogICAg
IGVsc2UKICAgICAgICAgbV9kdXBsaWNhdGVDb3VudHMucmVtb3ZlKGtleSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0dHJpYnV0ZURhdGEuY3BwIGIvU291cmNlL1dl
YkNvcmUvZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmNwcAppbmRleCA0NzFlNTE5ZTBmYmNiODZk
NGVkMjU4NmVhYzlhZmY0NDI1YzQ1NzMxLi4wZWFmYmM0ZTUzNzZjYTk3MjJjMmVlZjljMDZhMzc2
ODg5M2EwYWE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0dHJpYnV0
ZURhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50QXR0cmlidXRlRGF0YS5j
cHAKQEAgLTExOCw3ICsxMTgsNyBAQCBzdGF0aWMgQXR0ckxpc3QqIGVuc3VyZUF0dHJMaXN0Rm9y
RWxlbWVudChFbGVtZW50KiBlbGVtZW50KQogICAgIEFTU0VSVCghYXR0ckxpc3RNYXAoKS5jb250
YWlucyhlbGVtZW50KSk7CiAgICAgZWxlbWVudC0+c2V0SGFzQXR0ckxpc3QoKTsKICAgICBBdHRy
TGlzdE1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IGF0dHJMaXN0TWFwKCkuYWRkKGVsZW1lbnQsIGFk
b3B0UHRyKG5ldyBBdHRyTGlzdCkpOwotICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnNlY29u
ZC5nZXQoKTsKKyAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKIH0KIAog
c3RhdGljIHZvaWQgcmVtb3ZlQXR0ckxpc3RGb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwCmluZGV4IGU1ODM5MGM1ZTRhZDlkODgw
ZWNlZmRkNTFkOGYwZGQ4MDg3NjExOWUuLjg5YjljYzcwYjc4MGM4YzgwYmI3NDRkMWQ4YzFlZmYx
NzU4MGM1MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwCkBAIC0xMTEs
NyArMTExLDcgQEAgRXZlbnRUYXJnZXQqIEV2ZW50UmVsYXRlZFRhcmdldEFkanVzdGVyOjpmaW5k
UmVsYXRlZFRhcmdldChUcmVlU2NvcGUqIHNjb3BlKQogICAgICAgICBwYXJlbnRUcmVlU2NvcGVz
LmFwcGVuZChzY29wZSk7CiAgICAgICAgIFJlbGF0ZWRUYXJnZXRNYXA6OmNvbnN0X2l0ZXJhdG9y
IGZvdW5kID0gbV9yZWxhdGVkVGFyZ2V0TWFwLmZpbmQoc2NvcGUpOwogICAgICAgICBpZiAoZm91
bmQgIT0gbV9yZWxhdGVkVGFyZ2V0TWFwLmVuZCgpKSB7Ci0gICAgICAgICAgICByZWxhdGVkVGFy
Z2V0ID0gZm91bmQtPnNlY29uZDsKKyAgICAgICAgICAgIHJlbGF0ZWRUYXJnZXQgPSBmb3VuZC0+
dmFsdWU7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBzY29wZSA9IHNj
b3BlLT5wYXJlbnRUcmVlU2NvcGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9F
dmVudExpc3RlbmVyTWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudExpc3RlbmVyTWFw
LmNwcAppbmRleCBjMWZkNGQ3Yzk1N2E2NGJmZjc4OGY5MDFlNjFkZTAxY2EwOTIyNzdlLi5hZjhj
NDhhZWRlNTUxMzZmNzRmZTE4NDc4MWQwNTI4YjQxZDdjY2FjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRXZlbnRMaXN0ZW5lck1hcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9t
L0V2ZW50TGlzdGVuZXJNYXAuY3BwCkBAIC0xMDIsNyArMTAyLDcgQEAgVmVjdG9yPEF0b21pY1N0
cmluZz4gRXZlbnRMaXN0ZW5lck1hcDo6ZXZlbnRUeXBlcygpIGNvbnN0CiAgICAgICAgIEV2ZW50
TGlzdGVuZXJIYXNoTWFwOjppdGVyYXRvciBpdCA9IG1faGFzaE1hcC0+YmVnaW4oKTsKICAgICAg
ICAgRXZlbnRMaXN0ZW5lckhhc2hNYXA6Oml0ZXJhdG9yIGVuZCA9IG1faGFzaE1hcC0+ZW5kKCk7
CiAgICAgICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICB0eXBlcy5hcHBl
bmQoaXQtPmZpcnN0KTsKKyAgICAgICAgICAgIHR5cGVzLmFwcGVuZChpdC0+a2V5KTsKICAgICB9
IGVsc2UgaWYgKG1fc2luZ2xlRXZlbnRMaXN0ZW5lclZlY3RvcikKICAgICAgICAgdHlwZXMuYXBw
ZW5kKG1fc2luZ2xlRXZlbnRMaXN0ZW5lclR5cGUpOwogCkBAIC0xMzYsOSArMTM2LDkgQEAgYm9v
bCBFdmVudExpc3RlbmVyTWFwOjphZGQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBh
c3NSZWZQdHI8RXZlbnRMaXN0ZW4KICAgICBpZiAobV9oYXNoTWFwKSB7CiAgICAgICAgIEV2ZW50
TGlzdGVuZXJIYXNoTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9oYXNoTWFwLT5hZGQoZXZlbnRU
eXBlLCBudWxscHRyKTsKICAgICAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICAg
ICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBhZG9wdFB0cihuZXcgRXZlbnRMaXN0ZW5lclZl
Y3Rvcik7CisgICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gYWRvcHRQdHIobmV3
IEV2ZW50TGlzdGVuZXJWZWN0b3IpOwogCi0gICAgICAgIHJldHVybiBhZGRMaXN0ZW5lclRvVmVj
dG9yKHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLmdldCgpLCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSk7
CisgICAgICAgIHJldHVybiBhZGRMaXN0ZW5lclRvVmVjdG9yKHJlc3VsdC5pdGVyYXRvci0+dmFs
dWUuZ2V0KCksIGxpc3RlbmVyLCB1c2VDYXB0dXJlKTsKICAgICB9CiAKICAgICBpZiAoIW1fc2lu
Z2xlRXZlbnRMaXN0ZW5lclZlY3RvcikgewpAQCAtMTc5LDggKzE3OSw4IEBAIGJvb2wgRXZlbnRM
aXN0ZW5lck1hcDo6cmVtb3ZlKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFdmVudExp
c3RlbmVyKiBsaXN0CiAgICAgaWYgKGl0ID09IG1faGFzaE1hcC0+ZW5kKCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIGJvb2wgd2FzUmVtb3ZlZCA9IHJlbW92ZUxpc3RlbmVyRnJvbVZl
Y3RvcihpdC0+c2Vjb25kLmdldCgpLCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSwgaW5kZXhPZlJlbW92
ZWRMaXN0ZW5lcik7Ci0gICAgaWYgKGl0LT5zZWNvbmQtPmlzRW1wdHkoKSkKKyAgICBib29sIHdh
c1JlbW92ZWQgPSByZW1vdmVMaXN0ZW5lckZyb21WZWN0b3IoaXQtPnZhbHVlLmdldCgpLCBsaXN0
ZW5lciwgdXNlQ2FwdHVyZSwgaW5kZXhPZlJlbW92ZWRMaXN0ZW5lcik7CisgICAgaWYgKGl0LT52
YWx1ZS0+aXNFbXB0eSgpKQogICAgICAgICBtX2hhc2hNYXAtPnJlbW92ZShpdCk7CiAgICAgcmV0
dXJuIHdhc1JlbW92ZWQ7CiB9CkBAIC0xOTMsNyArMTkzLDcgQEAgRXZlbnRMaXN0ZW5lclZlY3Rv
ciogRXZlbnRMaXN0ZW5lck1hcDo6ZmluZChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSkK
ICAgICAgICAgRXZlbnRMaXN0ZW5lckhhc2hNYXA6Oml0ZXJhdG9yIGl0ID0gbV9oYXNoTWFwLT5m
aW5kKGV2ZW50VHlwZSk7CiAgICAgICAgIGlmIChpdCA9PSBtX2hhc2hNYXAtPmVuZCgpKQogICAg
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiBpdC0+c2Vjb25kLmdldCgpOworICAg
ICAgICByZXR1cm4gaXQtPnZhbHVlLmdldCgpOwogICAgIH0KIAogICAgIGlmIChtX3NpbmdsZUV2
ZW50TGlzdGVuZXJUeXBlID09IGV2ZW50VHlwZSkKQEAgLTIyNyw3ICsyMjcsNyBAQCB2b2lkIEV2
ZW50TGlzdGVuZXJNYXA6OnJlbW92ZUZpcnN0RXZlbnRMaXN0ZW5lckNyZWF0ZWRGcm9tTWFya3Vw
KGNvbnN0IEF0b21pY1N0cgogICAgICAgICBFdmVudExpc3RlbmVySGFzaE1hcDo6aXRlcmF0b3Ig
cmVzdWx0ID0gbV9oYXNoTWFwLT5maW5kKGV2ZW50VHlwZSk7CiAgICAgICAgIEFTU0VSVChyZXN1
bHQgIT0gbV9oYXNoTWFwLT5lbmQoKSk7CiAKLSAgICAgICAgRXZlbnRMaXN0ZW5lclZlY3Rvciog
bGlzdGVuZXJWZWN0b3IgPSByZXN1bHQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgRXZlbnRMaXN0
ZW5lclZlY3RvciogbGlzdGVuZXJWZWN0b3IgPSByZXN1bHQtPnZhbHVlLmdldCgpOwogICAgICAg
ICBBU1NFUlQobGlzdGVuZXJWZWN0b3IpOwogCiAgICAgICAgIHJlbW92ZUZpcnN0TGlzdGVuZXJD
cmVhdGVkRnJvbU1hcmt1cChsaXN0ZW5lclZlY3Rvcik7CkBAIC0yNjUsNyArMjY1LDcgQEAgdm9p
ZCBFdmVudExpc3RlbmVyTWFwOjpjb3B5RXZlbnRMaXN0ZW5lcnNOb3RDcmVhdGVkRnJvbU1hcmt1
cFRvVGFyZ2V0KEV2ZW50VGFyZ2UKICAgICBpZiAobV9oYXNoTWFwKSB7CiAgICAgICAgIEV2ZW50
TGlzdGVuZXJIYXNoTWFwOjppdGVyYXRvciBlbmQgPSBtX2hhc2hNYXAtPmVuZCgpOwogICAgICAg
ICBmb3IgKEV2ZW50TGlzdGVuZXJIYXNoTWFwOjppdGVyYXRvciBpdCA9IG1faGFzaE1hcC0+YmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgY29weUxpc3RlbmVyc05vdENyZWF0
ZWRGcm9tTWFya3VwVG9UYXJnZXQoaXQtPmZpcnN0LCBpdC0+c2Vjb25kLmdldCgpLCB0YXJnZXQp
OworICAgICAgICAgICAgY29weUxpc3RlbmVyc05vdENyZWF0ZWRGcm9tTWFya3VwVG9UYXJnZXQo
aXQtPmtleSwgaXQtPnZhbHVlLmdldCgpLCB0YXJnZXQpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCkBAIC0zMjUsNyArMzI1LDcgQEAgRXZlbnRMaXN0ZW5lciogRXZlbnRMaXN0ZW5lckl0ZXJh
dG9yOjpuZXh0TGlzdGVuZXIoKQogCiAgICAgaWYgKG1fbWFwLT5tX2hhc2hNYXApIHsKICAgICAg
ICAgZm9yICg7IG1fbWFwSXRlcmF0b3IgIT0gbV9tYXBFbmQ7ICsrbV9tYXBJdGVyYXRvcikgewot
ICAgICAgICAgICAgRXZlbnRMaXN0ZW5lclZlY3RvciYgbGlzdGVuZXJzID0gKm1fbWFwSXRlcmF0
b3ItPnNlY29uZDsKKyAgICAgICAgICAgIEV2ZW50TGlzdGVuZXJWZWN0b3ImIGxpc3RlbmVycyA9
ICptX21hcEl0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgICAgIGlmIChtX2luZGV4IDwgbGlzdGVu
ZXJzLnNpemUoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gbGlzdGVuZXJzW21faW5kZXgrK10u
bGlzdGVuZXIuZ2V0KCk7CiAgICAgICAgICAgICBtX2luZGV4ID0gMDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9JZFRhcmdldE9ic2VydmVyUmVnaXN0cnkuY3BwIGIvU291cmNlL1dl
YkNvcmUvZG9tL0lkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeS5jcHAKaW5kZXggNWZjMjZhY2ZlZTMz
MmViN2QyZDYxOWJhNTkyMGM3MzNmNWJiMGY3MC4uYWFmYThhMmQxYjUzMGI3ZDBmM2UzNjcwNTU4
ZThjOTZiOTQ4YWZiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0lkVGFyZ2V0T2Jz
ZXJ2ZXJSZWdpc3RyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0lkVGFyZ2V0T2JzZXJ2
ZXJSZWdpc3RyeS5jcHAKQEAgLTQyLDkgKzQyLDkgQEAgdm9pZCBJZFRhcmdldE9ic2VydmVyUmVn
aXN0cnk6OmFkZE9ic2VydmVyKGNvbnN0IEF0b21pY1N0cmluZyYgaWQsIElkVGFyZ2V0T2JzZXIK
ICAgICAKICAgICBJZFRvT2JzZXJ2ZXJTZXRNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX3JlZ2lz
dHJ5LmFkZChpZC5pbXBsKCksIG51bGxwdHIpOwogICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkK
LSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBhZG9wdFB0cihuZXcgT2JzZXJ2ZXJT
ZXQoKSk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBhZG9wdFB0cihuZXcgT2Jz
ZXJ2ZXJTZXQoKSk7CiAKLSAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZC0+YWRkKG9ic2VydmVy
KTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5hZGQob2JzZXJ2ZXIpOwogfQogCiB2b2lk
IElkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeTo6cmVtb3ZlT2JzZXJ2ZXIoY29uc3QgQXRvbWljU3Ry
aW5nJiBpZCwgSWRUYXJnZXRPYnNlcnZlciogb2JzZXJ2ZXIpCkBAIC01NCw3ICs1NCw3IEBAIHZv
aWQgSWRUYXJnZXRPYnNlcnZlclJlZ2lzdHJ5OjpyZW1vdmVPYnNlcnZlcihjb25zdCBBdG9taWNT
dHJpbmcmIGlkLCBJZFRhcmdldE9iCiAKICAgICBJZFRvT2JzZXJ2ZXJTZXRNYXA6Oml0ZXJhdG9y
IGl0ZXIgPSBtX3JlZ2lzdHJ5LmZpbmQoaWQuaW1wbCgpKTsKIAotICAgIE9ic2VydmVyU2V0KiBz
ZXQgPSBpdGVyLT5zZWNvbmQuZ2V0KCk7CisgICAgT2JzZXJ2ZXJTZXQqIHNldCA9IGl0ZXItPnZh
bHVlLmdldCgpOwogICAgIHNldC0+cmVtb3ZlKG9ic2VydmVyKTsKICAgICBpZiAoc2V0LT5pc0Vt
cHR5KCkgJiYgc2V0ICE9IG1fbm90aWZ5aW5nT2JzZXJ2ZXJzSW5TZXQpCiAgICAgICAgIG1fcmVn
aXN0cnkucmVtb3ZlKGl0ZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL01lbW9y
eUluc3RydW1lbnRhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvZG9tL01lbW9yeUluc3RydW1lbnRh
dGlvbi5oCmluZGV4IDM1Y2I2Y2I3YWYwNWMzZTE4MGJlZDY5MzdlYzIwMDhmMmVkNzE1MzMuLjJi
OTVmOTY1Njg2YTE2ODY5Mzc2ZWJmNDY4M2UyZWU3ZWQyOWVlMzYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9NZW1vcnlJbnN0cnVtZW50YXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vTWVtb3J5SW5zdHJ1bWVudGF0aW9uLmgKQEAgLTMyMyw4ICszMjMsOCBAQCB2b2lkIE1l
bW9yeUluc3RydW1lbnRhdGlvbjo6YWRkSW5zdHJ1bWVudGVkTWFwRW50cmllcyhjb25zdCBNYXBU
eXBlJiBtYXAsIE9iamVjdAogewogICAgIHR5cGVuYW1lIE1hcFR5cGU6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IG1hcC5lbmQoKTsKICAgICBmb3IgKHR5cGVuYW1lIE1hcFR5cGU6OmNvbnN0X2l0ZXJh
dG9yIGkgPSBtYXAuYmVnaW4oKTsgaSAhPSBlbmQ7ICsraSkgewotICAgICAgICBhZGRJbnN0cnVt
ZW50ZWRPYmplY3QoaS0+Zmlyc3QsIG93bmVyT2JqZWN0VHlwZSk7Ci0gICAgICAgIGFkZEluc3Ry
dW1lbnRlZE9iamVjdChpLT5zZWNvbmQsIG93bmVyT2JqZWN0VHlwZSk7CisgICAgICAgIGFkZElu
c3RydW1lbnRlZE9iamVjdChpLT5rZXksIG93bmVyT2JqZWN0VHlwZSk7CisgICAgICAgIGFkZElu
c3RydW1lbnRlZE9iamVjdChpLT52YWx1ZSwgb3duZXJPYmplY3RUeXBlKTsKICAgICB9CiB9CiAK
QEAgLTMzMyw3ICszMzMsNyBAQCB2b2lkIE1lbW9yeUluc3RydW1lbnRhdGlvbjo6YWRkSW5zdHJ1
bWVudGVkTWFwVmFsdWVzKGNvbnN0IE1hcFR5cGUmIG1hcCwgT2JqZWN0VAogewogICAgIHR5cGVu
YW1lIE1hcFR5cGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC5lbmQoKTsKICAgICBmb3IgKHR5
cGVuYW1lIE1hcFR5cGU6OmNvbnN0X2l0ZXJhdG9yIGkgPSBtYXAuYmVnaW4oKTsgaSAhPSBlbmQ7
ICsraSkKLSAgICAgICAgYWRkSW5zdHJ1bWVudGVkT2JqZWN0KGktPnNlY29uZCwgb3duZXJPYmpl
Y3RUeXBlKTsKKyAgICAgICAgYWRkSW5zdHJ1bWVudGVkT2JqZWN0KGktPnZhbHVlLCBvd25lck9i
amVjdFR5cGUpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0SGFzaFNldFR5cGU+CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25PYnNlcnZlckludGVyZXN0R3JvdXAu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3VwLmNw
cAppbmRleCAyNGMwY2I1ODY1MTdlMDhiYzdhOGI0MDkzZjIxZDMxZTBkYjJkNjRlLi40ZmFkMjIw
ODE4NTNjZDgxNTM0ZDMwMGQxNjFkODhiMWFhNWU5NGM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vTXV0YXRpb25PYnNlcnZlckludGVyZXN0R3JvdXAuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9NdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cC5jcHAKQEAgLTYyLDcgKzYy
LDcgQEAgTXV0YXRpb25PYnNlcnZlckludGVyZXN0R3JvdXA6Ok11dGF0aW9uT2JzZXJ2ZXJJbnRl
cmVzdEdyb3VwKEhhc2hNYXA8TXV0YXRpb25PYnMKIGJvb2wgTXV0YXRpb25PYnNlcnZlckludGVy
ZXN0R3JvdXA6OmlzT2xkVmFsdWVSZXF1ZXN0ZWQoKQogewogICAgIGZvciAoSGFzaE1hcDxNdXRh
dGlvbk9ic2VydmVyKiwgTXV0YXRpb25SZWNvcmREZWxpdmVyeU9wdGlvbnM+OjppdGVyYXRvciBp
dGVyID0gbV9vYnNlcnZlcnMuYmVnaW4oKTsgaXRlciAhPSBtX29ic2VydmVycy5lbmQoKTsgKytp
dGVyKSB7Ci0gICAgICAgIGlmIChoYXNPbGRWYWx1ZShpdGVyLT5zZWNvbmQpKQorICAgICAgICBp
ZiAoaGFzT2xkVmFsdWUoaXRlci0+dmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogICAgIHJldHVybiBmYWxzZTsKQEAgLTczLDggKzczLDggQEAgdm9pZCBNdXRhdGlvbk9i
c2VydmVySW50ZXJlc3RHcm91cDo6ZW5xdWV1ZU11dGF0aW9uUmVjb3JkKFBhc3NSZWZQdHI8TXV0
YXRpb25SZWMKICAgICBSZWZQdHI8TXV0YXRpb25SZWNvcmQ+IG11dGF0aW9uID0gcHJwTXV0YXRp
b247CiAgICAgUmVmUHRyPE11dGF0aW9uUmVjb3JkPiBtdXRhdGlvbldpdGhOdWxsT2xkVmFsdWU7
CiAgICAgZm9yIChIYXNoTWFwPE11dGF0aW9uT2JzZXJ2ZXIqLCBNdXRhdGlvblJlY29yZERlbGl2
ZXJ5T3B0aW9ucz46Oml0ZXJhdG9yIGl0ZXIgPSBtX29ic2VydmVycy5iZWdpbigpOyBpdGVyICE9
IG1fb2JzZXJ2ZXJzLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgTXV0YXRpb25PYnNlcnZlciog
b2JzZXJ2ZXIgPSBpdGVyLT5maXJzdDsKLSAgICAgICAgaWYgKGhhc09sZFZhbHVlKGl0ZXItPnNl
Y29uZCkpIHsKKyAgICAgICAgTXV0YXRpb25PYnNlcnZlciogb2JzZXJ2ZXIgPSBpdGVyLT5rZXk7
CisgICAgICAgIGlmIChoYXNPbGRWYWx1ZShpdGVyLT52YWx1ZSkpIHsKICAgICAgICAgICAgIG9i
c2VydmVyLT5lbnF1ZXVlTXV0YXRpb25SZWNvcmQobXV0YXRpb24pOwogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAppbmRleCBhM2ExYzIyZjI1NTQ5ZjdmY2Fi
ZjQwNzAxNjFhYjY5OGVkMjFjNzliLi5kZDUxN2E4ZGQ1NmRlNmMyNzYwZjJlMWFlYWYwNGM1MGVl
MWQ4M2JhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCkBAIC0xOTAsNyArMTkwLDcgQEAgdm9pZCBOb2RlOjpk
dW1wU3RhdGlzdGljcygpCiAgICAgICAgICAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRp
Y19jYXN0PEVsZW1lbnQqPihub2RlKTsKICAgICAgICAgICAgICAgICBIYXNoTWFwPFN0cmluZywg
c2l6ZV90Pjo6QWRkUmVzdWx0IHJlc3VsdCA9IHBlclRhZ0NvdW50LmFkZChlbGVtZW50LT50YWdO
YW1lKCksIDEpOwogICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0gICAg
ICAgICAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKys7CisgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUrKzsKIAogICAgICAgICAgICAgICAgIGlmIChF
bGVtZW50QXR0cmlidXRlRGF0YSogYXR0cmlidXRlRGF0YSA9IGVsZW1lbnQtPmF0dHJpYnV0ZURh
dGEoKSkgewogICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzICs9IGF0dHJpYnV0ZURhdGEt
Pmxlbmd0aCgpOwpAQCAtMjc4LDcgKzI3OCw3IEBAIHZvaWQgTm9kZTo6ZHVtcFN0YXRpc3RpY3Mo
KQogCiAgICAgcHJpbnRmKCJFbGVtZW50IHRhZyBuYW1lIGRpc3RpYnV0aW9uOlxuIik7CiAgICAg
Zm9yIChIYXNoTWFwPFN0cmluZywgc2l6ZV90Pjo6aXRlcmF0b3IgaXQgPSBwZXJUYWdDb3VudC5i
ZWdpbigpOyBpdCAhPSBwZXJUYWdDb3VudC5lbmQoKTsgKytpdCkKLSAgICAgICAgcHJpbnRmKCIg
IE51bWJlciBvZiA8JXM+IHRhZ3M6ICV6dVxuIiwgaXQtPmZpcnN0LnV0ZjgoKS5kYXRhKCksIGl0
LT5zZWNvbmQpOworICAgICAgICBwcmludGYoIiAgTnVtYmVyIG9mIDwlcz4gdGFnczogJXp1XG4i
LCBpdC0+a2V5LnV0ZjgoKS5kYXRhKCksIGl0LT52YWx1ZSk7CiAKICAgICBwcmludGYoIkF0dHJp
YnV0ZXM6XG4iKTsKICAgICBwcmludGYoIiAgTnVtYmVyIG9mIEF0dHJpYnV0ZXMgKG5vbi1Ob2Rl
IGFuZCBOb2RlKTogJXp1IFslenVdXG4iLCBhdHRyaWJ1dGVzLCBzaXplb2YoQXR0cmlidXRlKSk7
CkBAIC01MTEsNyArNTExLDcgQEAgdm9pZCBOb2RlOjpjbGVhclJhcmVEYXRhKCkKICAgICAgICAg
Tm9kZVJhcmVEYXRhOjpOb2RlUmFyZURhdGFNYXAmIGRhdGFNYXAgPSBOb2RlUmFyZURhdGE6OnJh
cmVEYXRhTWFwKCk7CiAgICAgICAgIE5vZGVSYXJlRGF0YTo6Tm9kZVJhcmVEYXRhTWFwOjppdGVy
YXRvciBpdCA9IGRhdGFNYXAuZmluZCh0aGlzKTsKICAgICAgICAgQVNTRVJUKGl0ICE9IGRhdGFN
YXAuZW5kKCkpOwotICAgICAgICBkZWxldGUgaXQtPnNlY29uZDsKKyAgICAgICAgZGVsZXRlIGl0
LT52YWx1ZTsKICAgICAgICAgZGF0YU1hcC5yZW1vdmUoaXQpOwogICAgIH0KICAgICBjbGVhckZs
YWcoSGFzUmFyZURhdGFGbGFnKTsKQEAgLTIyNjUsMTggKzIyNjUsMTggQEAgdm9pZCBOb2RlTGlz
dHNOb2RlRGF0YTo6aW52YWxpZGF0ZUNhY2hlcyhjb25zdCBRdWFsaWZpZWROYW1lKiBhdHRyTmFt
ZSkKIHsKICAgICBOb2RlTGlzdEF0b21pY05hbWVDYWNoZU1hcDo6Y29uc3RfaXRlcmF0b3IgYXRv
bWljTmFtZUNhY2hlRW5kID0gbV9hdG9taWNOYW1lQ2FjaGVzLmVuZCgpOwogICAgIGZvciAoTm9k
ZUxpc3RBdG9taWNOYW1lQ2FjaGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9hdG9taWNOYW1l
Q2FjaGVzLmJlZ2luKCk7IGl0ICE9IGF0b21pY05hbWVDYWNoZUVuZDsgKytpdCkKLSAgICAgICAg
aXQtPnNlY29uZC0+aW52YWxpZGF0ZUNhY2hlKGF0dHJOYW1lKTsKKyAgICAgICAgaXQtPnZhbHVl
LT5pbnZhbGlkYXRlQ2FjaGUoYXR0ck5hbWUpOwogCiAgICAgTm9kZUxpc3ROYW1lQ2FjaGVNYXA6
OmNvbnN0X2l0ZXJhdG9yIG5hbWVDYWNoZUVuZCA9IG1fbmFtZUNhY2hlcy5lbmQoKTsKICAgICBm
b3IgKE5vZGVMaXN0TmFtZUNhY2hlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fbmFtZUNhY2hl
cy5iZWdpbigpOyBpdCAhPSBuYW1lQ2FjaGVFbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQt
PmludmFsaWRhdGVDYWNoZShhdHRyTmFtZSk7CisgICAgICAgIGl0LT52YWx1ZS0+aW52YWxpZGF0
ZUNhY2hlKGF0dHJOYW1lKTsKIAogICAgIGlmIChhdHRyTmFtZSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgVGFnTm9kZUxpc3RDYWNoZU5TOjppdGVyYXRvciB0YWdDYWNoZUVuZCA9IG1fdGFnTm9k
ZUxpc3RDYWNoZU5TLmVuZCgpOwogICAgIGZvciAoVGFnTm9kZUxpc3RDYWNoZU5TOjppdGVyYXRv
ciBpdCA9IG1fdGFnTm9kZUxpc3RDYWNoZU5TLmJlZ2luKCk7IGl0ICE9IHRhZ0NhY2hlRW5kOyAr
K2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5pbnZhbGlkYXRlQ2FjaGUoKTsKKyAgICAgICAgaXQt
PnZhbHVlLT5pbnZhbGlkYXRlQ2FjaGUoKTsKIH0KIAogdm9pZCBOb2RlOjpnZXRTdWJyZXNvdXJj
ZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mIHVybHMpIGNvbnN0CkBAIC0yNDMzLDcgKzI0MzMsNyBA
QCB2b2lkIE5vZGU6OmNvbGxlY3RNYXRjaGluZ09ic2VydmVyc0Zvck11dGF0aW9uKEhhc2hNYXA8
TXV0YXRpb25PYnNlcnZlciosIE11dGF0aQogICAgICAgICAgICAgICAgIE11dGF0aW9uUmVjb3Jk
RGVsaXZlcnlPcHRpb25zIGRlbGl2ZXJ5T3B0aW9ucyA9IHJlZ2lzdHJhdGlvbi0+ZGVsaXZlcnlP
cHRpb25zKCk7CiAgICAgICAgICAgICAgICAgSGFzaE1hcDxNdXRhdGlvbk9ic2VydmVyKiwgTXV0
YXRpb25SZWNvcmREZWxpdmVyeU9wdGlvbnM+OjpBZGRSZXN1bHQgcmVzdWx0ID0gb2JzZXJ2ZXJz
LmFkZChyZWdpc3RyYXRpb24tPm9ic2VydmVyKCksIGRlbGl2ZXJ5T3B0aW9ucyk7CiAgICAgICAg
ICAgICAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgICAgICAgICAgcmVz
dWx0Lml0ZXJhdG9yLT5zZWNvbmQgfD0gZGVsaXZlcnlPcHRpb25zOworICAgICAgICAgICAgICAg
ICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlIHw9IGRlbGl2ZXJ5T3B0aW9uczsKIAogICAgICAg
ICAgICAgfQogICAgICAgICB9CkBAIC0yNDQ2LDcgKzI0NDYsNyBAQCB2b2lkIE5vZGU6OmNvbGxl
Y3RNYXRjaGluZ09ic2VydmVyc0Zvck11dGF0aW9uKEhhc2hNYXA8TXV0YXRpb25PYnNlcnZlcios
IE11dGF0aQogICAgICAgICAgICAgICAgIE11dGF0aW9uUmVjb3JkRGVsaXZlcnlPcHRpb25zIGRl
bGl2ZXJ5T3B0aW9ucyA9IHJlZ2lzdHJhdGlvbi0+ZGVsaXZlcnlPcHRpb25zKCk7CiAgICAgICAg
ICAgICAgICAgSGFzaE1hcDxNdXRhdGlvbk9ic2VydmVyKiwgTXV0YXRpb25SZWNvcmREZWxpdmVy
eU9wdGlvbnM+OjpBZGRSZXN1bHQgcmVzdWx0ID0gb2JzZXJ2ZXJzLmFkZChyZWdpc3RyYXRpb24t
Pm9ic2VydmVyKCksIGRlbGl2ZXJ5T3B0aW9ucyk7CiAgICAgICAgICAgICAgICAgaWYgKCFyZXN1
bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNv
bmQgfD0gZGVsaXZlcnlPcHRpb25zOworICAgICAgICAgICAgICAgICAgICByZXN1bHQuaXRlcmF0
b3ItPnZhbHVlIHw9IGRlbGl2ZXJ5T3B0aW9uczsKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaAppbmRleCAxZmRlYmI2ZDIxODczNDg1NDRj
ODMyMGUyYzU1ZDZiZDg3MDk3N2Y0Li5mNDMxN2JkYmE1YmVkZGFkZjI0MTJiZWYyMzRjNTYyMDYx
MzQ1MjgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRhLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGVSYXJlRGF0YS5oCkBAIC02OCwxMCArNjgsMTAgQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgTm9kZUxpc3RBdG9taWNOYW1lQ2FjaGVNYXA6OkFkZFJl
c3VsdCByZXN1bHQgPSBtX2F0b21pY05hbWVDYWNoZXMuYWRkKG5hbWVkTm9kZUxpc3RLZXkobGlz
dFR5cGUsIG5hbWUpLCAwKTsKICAgICAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUKj4ocmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOwor
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQqPihyZXN1bHQuaXRlcmF0b3ItPnZhbHVl
KTsKIAogICAgICAgICBSZWZQdHI8VD4gbGlzdCA9IFQ6OmNyZWF0ZShub2RlLCBuYW1lKTsKLSAg
ICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBsaXN0LmdldCgpOworICAgICAgICByZXN1
bHQuaXRlcmF0b3ItPnZhbHVlID0gbGlzdC5nZXQoKTsKICAgICAgICAgcmV0dXJuIGxpc3QucmVs
ZWFzZSgpOwogICAgIH0KIApAQCAtODAsMTAgKzgwLDEwIEBAIHB1YmxpYzoKICAgICB7CiAgICAg
ICAgIE5vZGVMaXN0TmFtZUNhY2hlTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9uYW1lQ2FjaGVz
LmFkZChuYW1lZE5vZGVMaXN0S2V5KGxpc3RUeXBlLCBuYW1lKSwgMCk7CiAgICAgICAgIGlmICgh
cmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VCo+KHJl
c3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxU
Kj4ocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CiAKICAgICAgICAgUmVmUHRyPFQ+IGxpc3QgPSBU
OjpjcmVhdGUobm9kZSwgbmFtZSk7Ci0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0g
bGlzdC5nZXQoKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGxpc3QuZ2V0KCk7
CiAgICAgICAgIHJldHVybiBsaXN0LnJlbGVhc2UoKTsKICAgICB9CiAKQEAgLTkyLDEwICs5Miwx
MCBAQCBwdWJsaWM6CiAgICAgICAgIFF1YWxpZmllZE5hbWUgbmFtZShudWxsQXRvbSwgbG9jYWxO
YW1lLCBuYW1lc3BhY2VVUkkpOwogICAgICAgICBUYWdOb2RlTGlzdENhY2hlTlM6OkFkZFJlc3Vs
dCByZXN1bHQgPSBtX3RhZ05vZGVMaXN0Q2FjaGVOUy5hZGQobmFtZSwgMCk7CiAgICAgICAgIGlm
ICghcmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9y
LT5zZWNvbmQ7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIAog
ICAgICAgICBSZWZQdHI8VGFnTm9kZUxpc3Q+IGxpc3QgPSBUYWdOb2RlTGlzdDo6Y3JlYXRlKG5v
ZGUsIG5hbWVzcGFjZVVSSSwgbG9jYWxOYW1lKTsKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5z
ZWNvbmQgPSBsaXN0LmdldCgpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gbGlz
dC5nZXQoKTsKICAgICAgICAgcmV0dXJuIGxpc3QucmVsZWFzZSgpOwogICAgIH0KIApAQCAtMTM2
LDIxICsxMzYsMjEgQEAgcHVibGljOgogICAgICAgICBpZiAob2xkRG9jdW1lbnQgIT0gbmV3RG9j
dW1lbnQpIHsKICAgICAgICAgICAgIE5vZGVMaXN0QXRvbWljTmFtZUNhY2hlTWFwOjpjb25zdF9p
dGVyYXRvciBhdG9taWNOYW1lQ2FjaGVFbmQgPSBtX2F0b21pY05hbWVDYWNoZXMuZW5kKCk7CiAg
ICAgICAgICAgICBmb3IgKE5vZGVMaXN0QXRvbWljTmFtZUNhY2hlTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fYXRvbWljTmFtZUNhY2hlcy5iZWdpbigpOyBpdCAhPSBhdG9taWNOYW1lQ2FjaGVF
bmQ7ICsraXQpIHsKLSAgICAgICAgICAgICAgICBEeW5hbWljU3VidHJlZU5vZGVMaXN0KiBsaXN0
ID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgICAgICBEeW5hbWljU3VidHJlZU5vZGVMaXN0KiBs
aXN0ID0gaXQtPnZhbHVlOwogICAgICAgICAgICAgICAgIG9sZERvY3VtZW50LT51bnJlZ2lzdGVy
Tm9kZUxpc3RDYWNoZShsaXN0KTsKICAgICAgICAgICAgICAgICBuZXdEb2N1bWVudC0+cmVnaXN0
ZXJOb2RlTGlzdENhY2hlKGxpc3QpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBOb2Rl
TGlzdE5hbWVDYWNoZU1hcDo6Y29uc3RfaXRlcmF0b3IgbmFtZUNhY2hlRW5kID0gbV9uYW1lQ2Fj
aGVzLmVuZCgpOwogICAgICAgICAgICAgZm9yIChOb2RlTGlzdE5hbWVDYWNoZU1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX25hbWVDYWNoZXMuYmVnaW4oKTsgaXQgIT0gbmFtZUNhY2hlRW5kOyAr
K2l0KSB7Ci0gICAgICAgICAgICAgICAgRHluYW1pY1N1YnRyZWVOb2RlTGlzdCogbGlzdCA9IGl0
LT5zZWNvbmQ7CisgICAgICAgICAgICAgICAgRHluYW1pY1N1YnRyZWVOb2RlTGlzdCogbGlzdCA9
IGl0LT52YWx1ZTsKICAgICAgICAgICAgICAgICBvbGREb2N1bWVudC0+dW5yZWdpc3Rlck5vZGVM
aXN0Q2FjaGUobGlzdCk7CiAgICAgICAgICAgICAgICAgbmV3RG9jdW1lbnQtPnJlZ2lzdGVyTm9k
ZUxpc3RDYWNoZShsaXN0KTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgVGFnTm9kZUxp
c3RDYWNoZU5TOjpjb25zdF9pdGVyYXRvciB0YWdFbmQgPSBtX3RhZ05vZGVMaXN0Q2FjaGVOUy5l
bmQoKTsKICAgICAgICAgICAgIGZvciAoVGFnTm9kZUxpc3RDYWNoZU5TOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fdGFnTm9kZUxpc3RDYWNoZU5TLmJlZ2luKCk7IGl0ICE9IHRhZ0VuZDsgKytpdCkg
ewotICAgICAgICAgICAgICAgIER5bmFtaWNTdWJ0cmVlTm9kZUxpc3QqIGxpc3QgPSBpdC0+c2Vj
b25kOworICAgICAgICAgICAgICAgIER5bmFtaWNTdWJ0cmVlTm9kZUxpc3QqIGxpc3QgPSBpdC0+
dmFsdWU7CiAgICAgICAgICAgICAgICAgQVNTRVJUKCFsaXN0LT5pc1Jvb3RlZEF0RG9jdW1lbnQo
KSk7CiAgICAgICAgICAgICAgICAgb2xkRG9jdW1lbnQtPnVucmVnaXN0ZXJOb2RlTGlzdENhY2hl
KGxpc3QpOwogICAgICAgICAgICAgICAgIG5ld0RvY3VtZW50LT5yZWdpc3Rlck5vZGVMaXN0Q2Fj
aGUobGlzdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUHJvY2Vzc2luZ0luc3Ry
dWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3Bw
CmluZGV4IGU1OTQwOWJjZjQyYzViODBlMjk3NmJmNzhiZGU4MTg1MzhjYjY3NGUuLjJmNDNhNTNm
ZGU2ZjYyOTkwODU0ZmQwYzY0N2RmZjMwYWQ3ZThiMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwCkBAIC0xMTcsNyArMTE3LDcgQEAgdm9pZCBQcm9j
ZXNzaW5nSW5zdHJ1Y3Rpb246OmNoZWNrU3R5bGVTaGVldCgpCiAgICAgICAgIEhhc2hNYXA8U3Ry
aW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpID0gYXR0cnMuZmluZCgidHlwZSIpOwogICAg
ICAgICBTdHJpbmcgdHlwZTsKICAgICAgICAgaWYgKGkgIT0gYXR0cnMuZW5kKCkpCi0gICAgICAg
ICAgICB0eXBlID0gaS0+c2Vjb25kOworICAgICAgICAgICAgdHlwZSA9IGktPnZhbHVlOwogCiAg
ICAgICAgIG1faXNDU1MgPSB0eXBlLmlzRW1wdHkoKSB8fCB0eXBlID09ICJ0ZXh0L2NzcyI7CiAj
aWYgRU5BQkxFKFhTTFQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC5jcHAKaW5kZXggOTI0NDVjYTgwZGFmNjMzMjM5ZDJmNzljZWU5OGRkOWRkNDQxYjMyMy4u
NTM1YjU3MGI1ZDdkZTlmNGFmOTM1ODNlN2M3MWQxMmIyZDc1MzVhOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcApAQCAtMTczLDkgKzE3Myw5IEBA
IGJvb2wgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6Y2FuU3VzcGVuZEFjdGl2ZURPTU9iamVjdHMo
KQogICAgIG1faXRlcmF0aW5nQWN0aXZlRE9NT2JqZWN0cyA9IHRydWU7CiAgICAgSGFzaE1hcDxB
Y3RpdmVET01PYmplY3QqLCB2b2lkKj46Oml0ZXJhdG9yIGFjdGl2ZU9iamVjdHNFbmQgPSBtX2Fj
dGl2ZURPTU9iamVjdHMuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPEFjdGl2ZURPTU9iamVjdCos
IHZvaWQqPjo6aXRlcmF0b3IgaXRlciA9IG1fYWN0aXZlRE9NT2JqZWN0cy5iZWdpbigpOyBpdGVy
ICE9IGFjdGl2ZU9iamVjdHNFbmQ7ICsraXRlcikgewotICAgICAgICBBU1NFUlQoaXRlci0+Zmly
c3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSA9PSB0aGlzKTsKLSAgICAgICAgQVNTRVJUKGl0
ZXItPmZpcnN0LT5zdXNwZW5kSWZOZWVkZWRDYWxsZWQoKSk7Ci0gICAgICAgIGlmICghaXRlci0+
Zmlyc3QtPmNhblN1c3BlbmQoKSkgeworICAgICAgICBBU1NFUlQoaXRlci0+a2V5LT5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCkgPT0gdGhpcyk7CisgICAgICAgIEFTU0VSVChpdGVyLT5rZXktPnN1
c3BlbmRJZk5lZWRlZENhbGxlZCgpKTsKKyAgICAgICAgaWYgKCFpdGVyLT5rZXktPmNhblN1c3Bl
bmQoKSkgewogICAgICAgICAgICAgbV9pdGVyYXRpbmdBY3RpdmVET01PYmplY3RzID0gZmFsc2U7
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KQEAgLTE5MCw5ICsxOTAsOSBA
QCB2b2lkIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnN1c3BlbmRBY3RpdmVET01PYmplY3RzKEFj
dGl2ZURPTU9iamVjdDo6UmVhc29uRm9yUwogICAgIG1faXRlcmF0aW5nQWN0aXZlRE9NT2JqZWN0
cyA9IHRydWU7CiAgICAgSGFzaE1hcDxBY3RpdmVET01PYmplY3QqLCB2b2lkKj46Oml0ZXJhdG9y
IGFjdGl2ZU9iamVjdHNFbmQgPSBtX2FjdGl2ZURPTU9iamVjdHMuZW5kKCk7CiAgICAgZm9yIChI
YXNoTWFwPEFjdGl2ZURPTU9iamVjdCosIHZvaWQqPjo6aXRlcmF0b3IgaXRlciA9IG1fYWN0aXZl
RE9NT2JqZWN0cy5iZWdpbigpOyBpdGVyICE9IGFjdGl2ZU9iamVjdHNFbmQ7ICsraXRlcikgewot
ICAgICAgICBBU1NFUlQoaXRlci0+Zmlyc3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSA9PSB0
aGlzKTsKLSAgICAgICAgQVNTRVJUKGl0ZXItPmZpcnN0LT5zdXNwZW5kSWZOZWVkZWRDYWxsZWQo
KSk7Ci0gICAgICAgIGl0ZXItPmZpcnN0LT5zdXNwZW5kKHdoeSk7CisgICAgICAgIEFTU0VSVChp
dGVyLT5rZXktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSA9PSB0aGlzKTsKKyAgICAgICAgQVNT
RVJUKGl0ZXItPmtleS0+c3VzcGVuZElmTmVlZGVkQ2FsbGVkKCkpOworICAgICAgICBpdGVyLT5r
ZXktPnN1c3BlbmQod2h5KTsKICAgICB9CiAgICAgbV9pdGVyYXRpbmdBY3RpdmVET01PYmplY3Rz
ID0gZmFsc2U7CiAgICAgbV9hY3RpdmVET01PYmplY3RzQXJlU3VzcGVuZGVkID0gdHJ1ZTsKQEAg
LTIwNiw5ICsyMDYsOSBAQCB2b2lkIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnJlc3VtZUFjdGl2
ZURPTU9iamVjdHMoKQogICAgIG1faXRlcmF0aW5nQWN0aXZlRE9NT2JqZWN0cyA9IHRydWU7CiAg
ICAgSGFzaE1hcDxBY3RpdmVET01PYmplY3QqLCB2b2lkKj46Oml0ZXJhdG9yIGFjdGl2ZU9iamVj
dHNFbmQgPSBtX2FjdGl2ZURPTU9iamVjdHMuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPEFjdGl2
ZURPTU9iamVjdCosIHZvaWQqPjo6aXRlcmF0b3IgaXRlciA9IG1fYWN0aXZlRE9NT2JqZWN0cy5i
ZWdpbigpOyBpdGVyICE9IGFjdGl2ZU9iamVjdHNFbmQ7ICsraXRlcikgewotICAgICAgICBBU1NF
UlQoaXRlci0+Zmlyc3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSA9PSB0aGlzKTsKLSAgICAg
ICAgQVNTRVJUKGl0ZXItPmZpcnN0LT5zdXNwZW5kSWZOZWVkZWRDYWxsZWQoKSk7Ci0gICAgICAg
IGl0ZXItPmZpcnN0LT5yZXN1bWUoKTsKKyAgICAgICAgQVNTRVJUKGl0ZXItPmtleS0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpID09IHRoaXMpOworICAgICAgICBBU1NFUlQoaXRlci0+a2V5LT5z
dXNwZW5kSWZOZWVkZWRDYWxsZWQoKSk7CisgICAgICAgIGl0ZXItPmtleS0+cmVzdW1lKCk7CiAg
ICAgfQogICAgIG1faXRlcmF0aW5nQWN0aXZlRE9NT2JqZWN0cyA9IGZhbHNlOwogfQpAQCAtMjIw
LDkgKzIyMCw5IEBAIHZvaWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6c3RvcEFjdGl2ZURPTU9i
amVjdHMoKQogICAgIG1faXRlcmF0aW5nQWN0aXZlRE9NT2JqZWN0cyA9IHRydWU7CiAgICAgSGFz
aE1hcDxBY3RpdmVET01PYmplY3QqLCB2b2lkKj46Oml0ZXJhdG9yIGFjdGl2ZU9iamVjdHNFbmQg
PSBtX2FjdGl2ZURPTU9iamVjdHMuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPEFjdGl2ZURPTU9i
amVjdCosIHZvaWQqPjo6aXRlcmF0b3IgaXRlciA9IG1fYWN0aXZlRE9NT2JqZWN0cy5iZWdpbigp
OyBpdGVyICE9IGFjdGl2ZU9iamVjdHNFbmQ7ICsraXRlcikgewotICAgICAgICBBU1NFUlQoaXRl
ci0+Zmlyc3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSA9PSB0aGlzKTsKLSAgICAgICAgQVNT
RVJUKGl0ZXItPmZpcnN0LT5zdXNwZW5kSWZOZWVkZWRDYWxsZWQoKSk7Ci0gICAgICAgIGl0ZXIt
PmZpcnN0LT5zdG9wKCk7CisgICAgICAgIEFTU0VSVChpdGVyLT5rZXktPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKSA9PSB0aGlzKTsKKyAgICAgICAgQVNTRVJUKGl0ZXItPmtleS0+c3VzcGVuZElm
TmVlZGVkQ2FsbGVkKCkpOworICAgICAgICBpdGVyLT5rZXktPnN0b3AoKTsKICAgICB9CiAgICAg
bV9pdGVyYXRpbmdBY3RpdmVET01PYmplY3RzID0gZmFsc2U7CiAKQEAgLTM4MCw3ICszODAsNyBA
QCB2b2lkIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OmFkanVzdE1pbmltdW1UaW1lckludGVydmFs
KGRvdWJsZSBvbGRNaW5pbXVtVGltZXJJbgogewogICAgIGlmIChtaW5pbXVtVGltZXJJbnRlcnZh
bCgpICE9IG9sZE1pbmltdW1UaW1lckludGVydmFsKSB7CiAgICAgICAgIGZvciAoVGltZW91dE1h
cDo6aXRlcmF0b3IgaXRlciA9IG1fdGltZW91dHMuYmVnaW4oKTsgaXRlciAhPSBtX3RpbWVvdXRz
LmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgICAgIERPTVRpbWVyKiB0aW1lciA9IGl0ZXItPnNl
Y29uZDsKKyAgICAgICAgICAgIERPTVRpbWVyKiB0aW1lciA9IGl0ZXItPnZhbHVlOwogICAgICAg
ICAgICAgdGltZXItPmFkanVzdE1pbmltdW1UaW1lckludGVydmFsKG9sZE1pbmltdW1UaW1lcklu
dGVydmFsKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9TZWxlY3RvclF1ZXJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TZWxlY3RvclF1ZXJ5LmNw
cAppbmRleCA3ODYyYWVmY2MzYWJhOGU0YjkyYzg0MzMyYjc0YTk2MDNjYWU3MjI1Li5lY2I1YTE2
MGZiMjZmYWM0YTdkMjcxODFhMGMyNDRlYmQwNGNlNDUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vU2VsZWN0b3JRdWVyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NlbGVj
dG9yUXVlcnkuY3BwCkBAIC0xNjksNyArMTY5LDcgQEAgU2VsZWN0b3JRdWVyeSogU2VsZWN0b3JR
dWVyeUNhY2hlOjphZGQoY29uc3QgQXRvbWljU3RyaW5nJiBzZWxlY3RvcnMsIERvY3VtZW50Kgog
ewogICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBPd25QdHI8U2VsZWN0b3JRdWVyeT4gPjo6aXRl
cmF0b3IgaXQgPSBtX2VudHJpZXMuZmluZChzZWxlY3RvcnMpOwogICAgIGlmIChpdCAhPSBtX2Vu
dHJpZXMuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICBy
ZXR1cm4gaXQtPnZhbHVlLmdldCgpOwogCiAgICAgQ1NTUGFyc2VyIHBhcnNlcihkb2N1bWVudCk7
CiAgICAgQ1NTU2VsZWN0b3JMaXN0IHNlbGVjdG9yTGlzdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9TcGFjZVNwbGl0U3RyaW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TcGFj
ZVNwbGl0U3RyaW5nLmNwcAppbmRleCA5Y2NlN2Q5NWI1ZTEwNDQzYzAzZWRhNWI3MmYxMTJjNTcw
NTJlNTEyLi4xZGMxZmIwZGRlMWYwMjNmM2Y4YTY1M2IyM2FjM2Q4NzM4ZThjMzQ5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU3BhY2VTcGxpdFN0cmluZy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL1NwYWNlU3BsaXRTdHJpbmcuY3BwCkBAIC0xNTAsNyArMTUwLDcgQEAgU3Bh
Y2VTcGxpdFN0cmluZ0RhdGE6On5TcGFjZVNwbGl0U3RyaW5nRGF0YSgpCiAKIFBhc3NSZWZQdHI8
U3BhY2VTcGxpdFN0cmluZ0RhdGE+IFNwYWNlU3BsaXRTdHJpbmdEYXRhOjpjcmVhdGUoY29uc3Qg
QXRvbWljU3RyaW5nJiBzdHJpbmcpCiB7Ci0gICAgU3BhY2VTcGxpdFN0cmluZ0RhdGEqJiBkYXRh
ID0gc2hhcmVkRGF0YU1hcCgpLmFkZChzdHJpbmcsIDApLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAg
U3BhY2VTcGxpdFN0cmluZ0RhdGEqJiBkYXRhID0gc2hhcmVkRGF0YU1hcCgpLmFkZChzdHJpbmcs
IDApLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoIWRhdGEpIHsKICAgICAgICAgZGF0YSA9IG5l
dyBTcGFjZVNwbGl0U3RyaW5nRGF0YShzdHJpbmcpOwogICAgICAgICByZXR1cm4gYWRvcHRSZWYo
ZGF0YSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5jcHAKaW5kZXggZTc1Y2Q1MzFkMTZm
OGQ4ZTIwMjM2OTI3OTZmMWZlNDlhYzhmNzUyMi4uMTU1M2ViNGI2MTcxZmFkNGU5YjZmNGIyMjhl
NGM1MmZiNTAxZjI4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcApAQCAtMjc3
LDE0ICsyNzcsMTQgQEAgdm9pZCBTdHlsZWRFbGVtZW50Ojp1cGRhdGVBdHRyaWJ1dGVTdHlsZSgp
CiAgICAgUHJlc2VudGF0aW9uQXR0cmlidXRlQ2FjaGU6Oml0ZXJhdG9yIGNhY2hlSXRlcmF0b3I7
CiAgICAgaWYgKGNhY2hlSGFzaCkgewogICAgICAgICBjYWNoZUl0ZXJhdG9yID0gcHJlc2VudGF0
aW9uQXR0cmlidXRlQ2FjaGUoKS5hZGQoY2FjaGVIYXNoLCBudWxscHRyKS5pdGVyYXRvcjsKLSAg
ICAgICAgaWYgKGNhY2hlSXRlcmF0b3ItPnNlY29uZCAmJiBjYWNoZUl0ZXJhdG9yLT5zZWNvbmQt
PmtleSAhPSBjYWNoZUtleSkKKyAgICAgICAgaWYgKGNhY2hlSXRlcmF0b3ItPnZhbHVlICYmIGNh
Y2hlSXRlcmF0b3ItPnZhbHVlLT5rZXkgIT0gY2FjaGVLZXkpCiAgICAgICAgICAgICBjYWNoZUhh
c2ggPSAwOwogICAgIH0gZWxzZQogICAgICAgICBjYWNoZUl0ZXJhdG9yID0gcHJlc2VudGF0aW9u
QXR0cmlidXRlQ2FjaGUoKS5lbmQoKTsKIAogICAgIFJlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBz
dHlsZTsKLSAgICBpZiAoY2FjaGVIYXNoICYmIGNhY2hlSXRlcmF0b3ItPnNlY29uZCkgewotICAg
ICAgICBzdHlsZSA9IGNhY2hlSXRlcmF0b3ItPnNlY29uZC0+dmFsdWU7CisgICAgaWYgKGNhY2hl
SGFzaCAmJiBjYWNoZUl0ZXJhdG9yLT52YWx1ZSkgeworICAgICAgICBzdHlsZSA9IGNhY2hlSXRl
cmF0b3ItPnZhbHVlLT52YWx1ZTsKICAgICAgICAgcHJlc2VudGF0aW9uQXR0cmlidXRlQ2FjaGVD
bGVhbmVyKCkuZGlkSGl0UHJlc2VudGF0aW9uQXR0cmlidXRlQ2FjaGUoKTsKICAgICB9IGVsc2Ug
ewogICAgICAgICBzdHlsZSA9IFN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZShpc1NWR0VsZW1lbnQo
KSA/IFNWR0F0dHJpYnV0ZU1vZGUgOiBDU1NRdWlya3NNb2RlKTsKQEAgLTI5OCw3ICsyOTgsNyBA
QCB2b2lkIFN0eWxlZEVsZW1lbnQ6OnVwZGF0ZUF0dHJpYnV0ZVN0eWxlKCkKIAogICAgIGF0dHJp
YnV0ZURhdGEoKS0+c2V0QXR0cmlidXRlU3R5bGUoc3R5bGUtPmlzRW1wdHkoKSA/IDAgOiBzdHls
ZSk7CiAKLSAgICBpZiAoIWNhY2hlSGFzaCB8fCBjYWNoZUl0ZXJhdG9yLT5zZWNvbmQpCisgICAg
aWYgKCFjYWNoZUhhc2ggfHwgY2FjaGVJdGVyYXRvci0+dmFsdWUpCiAgICAgICAgIHJldHVybjsK
IAogICAgIE93blB0cjxQcmVzZW50YXRpb25BdHRyaWJ1dGVDYWNoZUVudHJ5PiBuZXdFbnRyeSA9
IGFkb3B0UHRyKG5ldyBQcmVzZW50YXRpb25BdHRyaWJ1dGVDYWNoZUVudHJ5KTsKQEAgLTMxMSw3
ICszMTEsNyBAQCB2b2lkIFN0eWxlZEVsZW1lbnQ6OnVwZGF0ZUF0dHJpYnV0ZVN0eWxlKCkKICAg
ICAgICAgcHJlc2VudGF0aW9uQXR0cmlidXRlQ2FjaGUoKS5jbGVhcigpOwogICAgICAgICBwcmVz
ZW50YXRpb25BdHRyaWJ1dGVDYWNoZSgpLnNldChjYWNoZUhhc2gsIG5ld0VudHJ5LnJlbGVhc2Uo
KSk7CiAgICAgfSBlbHNlCi0gICAgICAgIGNhY2hlSXRlcmF0b3ItPnNlY29uZCA9IG5ld0VudHJ5
LnJlbGVhc2UoKTsKKyAgICAgICAgY2FjaGVJdGVyYXRvci0+dmFsdWUgPSBuZXdFbnRyeS5yZWxl
YXNlKCk7CiB9CiAKIHZvaWQgU3R5bGVkRWxlbWVudDo6YWRkUHJvcGVydHlUb0F0dHJpYnV0ZVN0
eWxlKFN0eWxlUHJvcGVydHlTZXQqIHN0eWxlLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGlu
dCBpZGVudGlmaWVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvQWx0
ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMv
QWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyLm1tCmluZGV4IDk5OTE2YzFlMDBmNDQ5MjJhYTdl
YmM2Y2ZiMDBmYzQ5NzY4ZDQ0M2IuLjZjYTVkNWYwMjljOTkxNjkzM2I4Mjg5ZDE0NWYwZDEyMWM2
ZDU2NDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0FsdGVybmF0aXZl
VGV4dFVJQ29udHJvbGxlci5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9BbHRl
cm5hdGl2ZVRleHRVSUNvbnRyb2xsZXIubW0KQEAgLTUwLDcgKzUwLDcgQEAgTlNUZXh0QWx0ZXJu
YXRpdmVzKiBBbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xsZXI6OkFsZXJuYXRpdmVUZXh0Q29udGV4
dENvbnRyb2xsZXIKICAgICBIYXNoTWFwVHlwZTo6Y29uc3RfaXRlcmF0b3IgaXRyID0gbV9hbHRl
cm5hdGl2ZXNPYmplY3RNYXAuZmluZChjb250ZXh0KTsKICAgICBpZiAoaXRyID09IG1fYWx0ZXJu
YXRpdmVzT2JqZWN0TWFwLmVuZCgpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICByZXR1cm4g
aXRyLT5zZWNvbmQuZ2V0KCk7CisgICAgcmV0dXJuIGl0ci0+dmFsdWUuZ2V0KCk7CiB9CiAKIHZv
aWQgQWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyOjpBbGVybmF0aXZlVGV4dENvbnRleHRDb250
cm9sbGVyOjpyZW1vdmVBbHRlcm5hdGl2ZXNGb3JDb250ZXh0KHVpbnQ2NF90IGNvbnRleHQpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0Zvcm1Db250cm9sbGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvRm9ybUNvbnRyb2xsZXIuY3BwCmluZGV4IGUzNWVmZjE5ZTE5YmE5YzVl
NWQxNWM4MDJiNmJiOWZlNDU0MWE0NmEuLjBhMDhjMWVjYTdjNTI4N2M0ODU3YmI3NDU0ZTQzMTUw
ZmNjMmMwNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUNvbnRyb2xsZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUNvbnRyb2xsZXIuY3BwCkBAIC0yMjgs
OCArMjI4LDggQEAgdm9pZCBTYXZlZEZvcm1TdGF0ZTo6c2VyaWFsaXplVG8oVmVjdG9yPFN0cmlu
Zz4mIHN0YXRlVmVjdG9yKSBjb25zdAogewogICAgIHN0YXRlVmVjdG9yLmFwcGVuZChTdHJpbmc6
Om51bWJlcihtX2NvbnRyb2xTdGF0ZUNvdW50KSk7CiAgICAgZm9yIChGb3JtRWxlbWVudFN0YXRl
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fc3RhdGVGb3JOZXdGb3JtRWxlbWVudHMuYmVnaW4o
KTsgaXQgIT0gbV9zdGF0ZUZvck5ld0Zvcm1FbGVtZW50cy5lbmQoKTsgKytpdCkgewotICAgICAg
ICBjb25zdCBGb3JtRWxlbWVudEtleSYga2V5ID0gaXQtPmZpcnN0OwotICAgICAgICBjb25zdCBE
ZXF1ZTxGb3JtQ29udHJvbFN0YXRlPiYgcXVldWUgPSBpdC0+c2Vjb25kOworICAgICAgICBjb25z
dCBGb3JtRWxlbWVudEtleSYga2V5ID0gaXQtPmtleTsKKyAgICAgICAgY29uc3QgRGVxdWU8Rm9y
bUNvbnRyb2xTdGF0ZT4mIHF1ZXVlID0gaXQtPnZhbHVlOwogICAgICAgICBmb3IgKERlcXVlPEZv
cm1Db250cm9sU3RhdGU+Ojpjb25zdF9pdGVyYXRvciBxdWVJdGVyYXRvciA9IHF1ZXVlLmJlZ2lu
KCk7IHF1ZUl0ZXJhdG9yICE9IHF1ZXVlLmVuZCgpOyArK3F1ZUl0ZXJhdG9yKSB7CiAgICAgICAg
ICAgICBzdGF0ZVZlY3Rvci5hcHBlbmQoa2V5Lm5hbWUoKSk7CiAgICAgICAgICAgICBzdGF0ZVZl
Y3Rvci5hcHBlbmQoa2V5LnR5cGUoKSk7CkBAIC0yNDMsNyArMjQzLDcgQEAgdm9pZCBTYXZlZEZv
cm1TdGF0ZTo6YXBwZW5kQ29udHJvbFN0YXRlKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgY29u
c3QgQXRvbWljU3QKICAgICBGb3JtRWxlbWVudEtleSBrZXkobmFtZS5pbXBsKCksIHR5cGUuaW1w
bCgpKTsKICAgICBGb3JtRWxlbWVudFN0YXRlTWFwOjppdGVyYXRvciBpdCA9IG1fc3RhdGVGb3JO
ZXdGb3JtRWxlbWVudHMuZmluZChrZXkpOwogICAgIGlmIChpdCAhPSBtX3N0YXRlRm9yTmV3Rm9y
bUVsZW1lbnRzLmVuZCgpKQotICAgICAgICBpdC0+c2Vjb25kLmFwcGVuZChzdGF0ZSk7CisgICAg
ICAgIGl0LT52YWx1ZS5hcHBlbmQoc3RhdGUpOwogICAgIGVsc2UgewogICAgICAgICBEZXF1ZTxG
b3JtQ29udHJvbFN0YXRlPiBzdGF0ZUxpc3Q7CiAgICAgICAgIHN0YXRlTGlzdC5hcHBlbmQoc3Rh
dGUpOwpAQCAtMjU5LDEwICsyNTksMTAgQEAgRm9ybUNvbnRyb2xTdGF0ZSBTYXZlZEZvcm1TdGF0
ZTo6dGFrZUNvbnRyb2xTdGF0ZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGNvbnMKICAgICBG
b3JtRWxlbWVudFN0YXRlTWFwOjppdGVyYXRvciBpdCA9IG1fc3RhdGVGb3JOZXdGb3JtRWxlbWVu
dHMuZmluZChGb3JtRWxlbWVudEtleShuYW1lLmltcGwoKSwgdHlwZS5pbXBsKCkpKTsKICAgICBp
ZiAoaXQgPT0gbV9zdGF0ZUZvck5ld0Zvcm1FbGVtZW50cy5lbmQoKSkKICAgICAgICAgcmV0dXJu
IEZvcm1Db250cm9sU3RhdGUoKTsKLSAgICBBU1NFUlQoaXQtPnNlY29uZC5zaXplKCkpOwotICAg
IEZvcm1Db250cm9sU3RhdGUgc3RhdGUgPSBpdC0+c2Vjb25kLnRha2VGaXJzdCgpOworICAgIEFT
U0VSVChpdC0+dmFsdWUuc2l6ZSgpKTsKKyAgICBGb3JtQ29udHJvbFN0YXRlIHN0YXRlID0gaXQt
PnZhbHVlLnRha2VGaXJzdCgpOwogICAgIG1fY29udHJvbFN0YXRlQ291bnQtLTsKLSAgICBpZiAo
IWl0LT5zZWNvbmQuc2l6ZSgpKQorICAgIGlmICghaXQtPnZhbHVlLnNpemUoKSkKICAgICAgICAg
bV9zdGF0ZUZvck5ld0Zvcm1FbGVtZW50cy5yZW1vdmUoaXQpOwogICAgIHJldHVybiBzdGF0ZTsK
IH0KQEAgLTI3MSwxMCArMjcxLDEwIEBAIFZlY3RvcjxTdHJpbmc+IFNhdmVkRm9ybVN0YXRlOjpn
ZXRSZWZlcmVuY2VkRmlsZVBhdGhzKCkgY29uc3QKIHsKICAgICBWZWN0b3I8U3RyaW5nPiB0b1Jl
dHVybjsKICAgICBmb3IgKEZvcm1FbGVtZW50U3RhdGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bV9zdGF0ZUZvck5ld0Zvcm1FbGVtZW50cy5iZWdpbigpOyBpdCAhPSBtX3N0YXRlRm9yTmV3Rm9y
bUVsZW1lbnRzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IEZvcm1FbGVtZW50S2V5JiBr
ZXkgPSBpdC0+Zmlyc3Q7CisgICAgICAgIGNvbnN0IEZvcm1FbGVtZW50S2V5JiBrZXkgPSBpdC0+
a2V5OwogICAgICAgICBpZiAoQXRvbWljU3RyaW5nKGtleS50eXBlKCkpICE9IEF0b21pY1N0cmlu
ZygiZmlsZSIpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGNvbnN0IERlcXVlPEZv
cm1Db250cm9sU3RhdGU+JiBxdWV1ZSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIGNvbnN0IERlcXVl
PEZvcm1Db250cm9sU3RhdGU+JiBxdWV1ZSA9IGl0LT52YWx1ZTsKICAgICAgICAgZm9yIChEZXF1
ZTxGb3JtQ29udHJvbFN0YXRlPjo6Y29uc3RfaXRlcmF0b3IgcXVlSXRlcmF0b3IgPSBxdWV1ZS5i
ZWdpbigpOyBxdWVJdGVyYXRvciAhPSBxdWV1ZS5lbmQoKTsgKytxdWVJdGVyYXRvcikgewogICAg
ICAgICAgICAgY29uc3QgVmVjdG9yPEZpbGVDaG9vc2VyRmlsZUluZm8+JiBzZWxlY3RlZEZpbGVz
ID0gSFRNTElucHV0RWxlbWVudDo6ZmlsZXNGcm9tRmlsZUlucHV0Rm9ybUNvbnRyb2xTdGF0ZSgq
cXVlSXRlcmF0b3IpOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzZWxlY3Rl
ZEZpbGVzLnNpemUoKTsgKytpKQpAQCAtMzQ5LDEyICszNDksMTIgQEAgQXRvbWljU3RyaW5nIEZv
cm1LZXlHZW5lcmF0b3I6OmZvcm1LZXkoY29uc3QgSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhT
dGF0ZSYgY28KICAgICB9CiAgICAgRm9ybVRvS2V5TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1f
Zm9ybVRvS2V5TWFwLmZpbmQoZm9ybSk7CiAgICAgaWYgKGl0ICE9IG1fZm9ybVRvS2V5TWFwLmVu
ZCgpKQotICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGl0LT52YWx1
ZTsKIAogICAgIFN0cmluZyBzaWduYXR1cmUgPSBmb3JtU2lnbmF0dXJlKCpmb3JtKTsKICAgICBB
U1NFUlQoIXNpZ25hdHVyZS5pc051bGwoKSk7CiAgICAgRm9ybVNpZ25hdHVyZVRvTmV4dEluZGV4
TWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9mb3JtU2lnbmF0dXJlVG9OZXh0SW5kZXhNYXAuYWRk
KHNpZ25hdHVyZSwgMCk7Ci0gICAgdW5zaWduZWQgbmV4dEluZGV4ID0gcmVzdWx0Lml0ZXJhdG9y
LT5zZWNvbmQrKzsKKyAgICB1bnNpZ25lZCBuZXh0SW5kZXggPSByZXN1bHQuaXRlcmF0b3ItPnZh
bHVlKys7CiAKICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CiAgICAgYnVpbGRlci5hcHBlbmQo
c2lnbmF0dXJlKTsKQEAgLTQwNSw4ICs0MDUsOCBAQCBQYXNzT3duUHRyPEZvcm1Db250cm9sbGVy
OjpTYXZlZEZvcm1TdGF0ZU1hcD4gRm9ybUNvbnRyb2xsZXI6OmNyZWF0ZVNhdmVkRm9ybVN0YQog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIFNhdmVkRm9ybVN0YXRlTWFwOjpBZGRSZXN1
bHQgcmVzdWx0ID0gc3RhdGVNYXAtPmFkZChrZXlHZW5lcmF0b3ItPmZvcm1LZXkoKmNvbnRyb2wp
LmltcGwoKSwgbnVsbHB0cik7CiAgICAgICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAg
ICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gU2F2ZWRGb3JtU3RhdGU6OmNyZWF0ZSgp
OwotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZC0+YXBwZW5kQ29udHJvbFN0YXRlKGNv
bnRyb2wtPm5hbWUoKSwgY29udHJvbC0+dHlwZSgpLCBjb250cm9sLT5zYXZlRm9ybUNvbnRyb2xT
dGF0ZSgpKTsKKyAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBTYXZlZEZvcm1T
dGF0ZTo6Y3JlYXRlKCk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPmFwcGVuZENv
bnRyb2xTdGF0ZShjb250cm9sLT5uYW1lKCksIGNvbnRyb2wtPnR5cGUoKSwgY29udHJvbC0+c2F2
ZUZvcm1Db250cm9sU3RhdGUoKSk7CiAgICAgfQogICAgIHJldHVybiBzdGF0ZU1hcC5yZWxlYXNl
KCk7CiB9CkBAIC00MTgsOCArNDE4LDggQEAgVmVjdG9yPFN0cmluZz4gRm9ybUNvbnRyb2xsZXI6
OmZvcm1FbGVtZW50c1N0YXRlKCkgY29uc3QKICAgICBzdGF0ZVZlY3Rvci5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KG1fZm9ybUVsZW1lbnRzV2l0aFN0YXRlLnNpemUoKSAqIDQpOwogICAgIHN0YXRl
VmVjdG9yLmFwcGVuZChmb3JtU3RhdGVTaWduYXR1cmUoKSk7CiAgICAgZm9yIChTYXZlZEZvcm1T
dGF0ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBzdGF0ZU1hcC0+YmVnaW4oKTsgaXQgIT0gc3Rh
dGVNYXAtPmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIHN0YXRlVmVjdG9yLmFwcGVuZChpdC0+Zmly
c3QuZ2V0KCkpOwotICAgICAgICBpdC0+c2Vjb25kLT5zZXJpYWxpemVUbyhzdGF0ZVZlY3Rvcik7
CisgICAgICAgIHN0YXRlVmVjdG9yLmFwcGVuZChpdC0+a2V5LmdldCgpKTsKKyAgICAgICAgaXQt
PnZhbHVlLT5zZXJpYWxpemVUbyhzdGF0ZVZlY3Rvcik7CiAgICAgfQogICAgIGJvb2wgaGFzT25s
eVNpZ25hdHVyZSA9IHN0YXRlVmVjdG9yLnNpemUoKSA9PSAxOwogICAgIGlmIChoYXNPbmx5U2ln
bmF0dXJlKQpAQCAtNDQxLDggKzQ0MSw4IEBAIEZvcm1Db250cm9sU3RhdGUgRm9ybUNvbnRyb2xs
ZXI6OnRha2VTdGF0ZUZvckZvcm1FbGVtZW50KGNvbnN0IEhUTUxGb3JtQ29udHJvbEVsCiAgICAg
U2F2ZWRGb3JtU3RhdGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zYXZlZEZvcm1TdGF0ZU1hcC5maW5k
KG1fZm9ybUtleUdlbmVyYXRvci0+Zm9ybUtleShjb250cm9sKS5pbXBsKCkpOwogICAgIGlmIChp
dCA9PSBtX3NhdmVkRm9ybVN0YXRlTWFwLmVuZCgpKQogICAgICAgICByZXR1cm4gRm9ybUNvbnRy
b2xTdGF0ZSgpOwotICAgIEZvcm1Db250cm9sU3RhdGUgc3RhdGUgPSBpdC0+c2Vjb25kLT50YWtl
Q29udHJvbFN0YXRlKGNvbnRyb2wubmFtZSgpLCBjb250cm9sLnR5cGUoKSk7Ci0gICAgaWYgKGl0
LT5zZWNvbmQtPmlzRW1wdHkoKSkKKyAgICBGb3JtQ29udHJvbFN0YXRlIHN0YXRlID0gaXQtPnZh
bHVlLT50YWtlQ29udHJvbFN0YXRlKGNvbnRyb2wubmFtZSgpLCBjb250cm9sLnR5cGUoKSk7Cisg
ICAgaWYgKGl0LT52YWx1ZS0+aXNFbXB0eSgpKQogICAgICAgICBtX3NhdmVkRm9ybVN0YXRlTWFw
LnJlbW92ZShpdCk7CiAgICAgcmV0dXJuIHN0YXRlOwogfQpAQCAtNTExLDcgKzUxMSw3IEBAIFZl
Y3RvcjxTdHJpbmc+IEZvcm1Db250cm9sbGVyOjpnZXRSZWZlcmVuY2VkRmlsZVBhdGhzKGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBzdGF0CiAgICAgU2F2ZWRGb3JtU3RhdGVNYXAgbWFwOwogICAgIGZv
cm1TdGF0ZXNGcm9tU3RhdGVWZWN0b3Ioc3RhdGVWZWN0b3IsIG1hcCk7CiAgICAgZm9yIChTYXZl
ZEZvcm1TdGF0ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAuYmVnaW4oKTsgaXQgIT0gbWFw
LmVuZCgpOyArK2l0KQotICAgICAgICB0b1JldHVybi5hcHBlbmQoaXQtPnNlY29uZC0+Z2V0UmVm
ZXJlbmNlZEZpbGVQYXRocygpKTsKKyAgICAgICAgdG9SZXR1cm4uYXBwZW5kKGl0LT52YWx1ZS0+
Z2V0UmVmZXJlbmNlZEZpbGVQYXRocygpKTsKICAgICByZXR1cm4gdG9SZXR1cm47CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENvbGxlY3Rpb24uY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5jcHAKaW5kZXggOTFlMThhM2ZiZGYyZDg3YTZl
MDc5NGU3Y2IyYjcxYjY0ZjhhYjljNS4uMWVjYjY0NGNhMWI2MzA4MDdhZDY2YTk3NDRlM2RmMzMx
NGZlYWY0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5jcHAKQEAgLTU1OSw3
ICs1NTksNyBAQCBQYXNzUmVmUHRyPE5vZGVMaXN0PiBIVE1MQ29sbGVjdGlvbjo6dGFncyhjb25z
dCBTdHJpbmcmIG5hbWUpCiAKIHZvaWQgSFRNTENvbGxlY3Rpb25DYWNoZUJhc2U6OmFwcGVuZChO
b2RlQ2FjaGVNYXAmIG1hcCwgY29uc3QgQXRvbWljU3RyaW5nJiBrZXksIEVsZW1lbnQqIGVsZW1l
bnQpCiB7Ci0gICAgT3duUHRyPFZlY3RvcjxFbGVtZW50Kj4gPiYgdmVjdG9yID0gbWFwLmFkZChr
ZXkuaW1wbCgpLCBudWxscHRyKS5pdGVyYXRvci0+c2Vjb25kOworICAgIE93blB0cjxWZWN0b3I8
RWxlbWVudCo+ID4mIHZlY3RvciA9IG1hcC5hZGQoa2V5LmltcGwoKSwgbnVsbHB0cikuaXRlcmF0
b3ItPnZhbHVlOwogICAgIGlmICghdmVjdG9yKQogICAgICAgICB2ZWN0b3IgPSBhZG9wdFB0cihu
ZXcgVmVjdG9yPEVsZW1lbnQqPik7CiAgICAgdmVjdG9yLT5hcHBlbmQoZWxlbWVudCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwCmluZGV4IGI5
MWFlNTA2ZWNmNzllM2Q2MmZlMTdlNDM3Nzk5M2ZkM2MxNDZjMWQuLmQwODFlMjQ5MDVhMGFkNTll
NzRlNWRjMDVjNzQ1MTA4NmE2ODRmNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwCkBAIC0zMjcsNyArMzI3LDcgQEAgV2ViR0xTaGFyZWRP
YmplY3QqIFdlYkdMRnJhbWVidWZmZXI6OmdldEF0dGFjaG1lbnRPYmplY3QoR0MzRGVudW0gYXR0
YWNobWVudCkgY28KIFdlYkdMRnJhbWVidWZmZXI6OldlYkdMQXR0YWNobWVudCogV2ViR0xGcmFt
ZWJ1ZmZlcjo6Z2V0QXR0YWNobWVudChHQzNEZW51bSBhdHRhY2htZW50KSBjb25zdAogewogICAg
IGNvbnN0IEF0dGFjaG1lbnRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9hdHRhY2htZW50cy5m
aW5kKGF0dGFjaG1lbnQpOwotICAgIHJldHVybiAoaXQgIT0gbV9hdHRhY2htZW50cy5lbmQoKSkg
PyBpdC0+c2Vjb25kLmdldCgpIDogMDsKKyAgICByZXR1cm4gKGl0ICE9IG1fYXR0YWNobWVudHMu
ZW5kKCkpID8gaXQtPnZhbHVlLmdldCgpIDogMDsKIH0KIAogdm9pZCBXZWJHTEZyYW1lYnVmZmVy
OjpyZW1vdmVBdHRhY2htZW50RnJvbUJvdW5kRnJhbWVidWZmZXIoR0MzRGVudW0gYXR0YWNobWVu
dCkKQEAgLTM2Nyw5ICszNjcsOSBAQCB2b2lkIFdlYkdMRnJhbWVidWZmZXI6OnJlbW92ZUF0dGFj
aG1lbnRGcm9tQm91bmRGcmFtZWJ1ZmZlcihXZWJHTFNoYXJlZE9iamVjdCogYQogICAgIHdoaWxl
IChjaGVja01vcmUpIHsKICAgICAgICAgY2hlY2tNb3JlID0gZmFsc2U7CiAgICAgICAgIGZvciAo
QXR0YWNobWVudE1hcDo6aXRlcmF0b3IgaXQgPSBtX2F0dGFjaG1lbnRzLmJlZ2luKCk7IGl0ICE9
IG1fYXR0YWNobWVudHMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgICAgIFdlYkdMQXR0YWNobWVu
dCogYXR0YWNobWVudE9iamVjdCA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBXZWJH
TEF0dGFjaG1lbnQqIGF0dGFjaG1lbnRPYmplY3QgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAg
ICAgICBpZiAoYXR0YWNobWVudE9iamVjdC0+aXNTaGFyZWRPYmplY3QoYXR0YWNobWVudCkpIHsK
LSAgICAgICAgICAgICAgICBHQzNEZW51bSBhdHRhY2htZW50VHlwZSA9IGl0LT5maXJzdDsKKyAg
ICAgICAgICAgICAgICBHQzNEZW51bSBhdHRhY2htZW50VHlwZSA9IGl0LT5rZXk7CiAgICAgICAg
ICAgICAgICAgYXR0YWNobWVudE9iamVjdC0+dW5hdHRhY2goY29udGV4dCgpLT5ncmFwaGljc0Nv
bnRleHQzRCgpLCBhdHRhY2htZW50VHlwZSk7CiAgICAgICAgICAgICAgICAgcmVtb3ZlQXR0YWNo
bWVudEZyb21Cb3VuZEZyYW1lYnVmZmVyKGF0dGFjaG1lbnRUeXBlKTsKICAgICAgICAgICAgICAg
ICBjaGVja01vcmUgPSB0cnVlOwpAQCAtNDE5LDggKzQxOSw4IEBAIEdDM0RlbnVtIFdlYkdMRnJh
bWVidWZmZXI6OmNoZWNrU3RhdHVzKGNvbnN0IGNoYXIqKiByZWFzb24pIGNvbnN0CiAgICAgYm9v
bCBoYXZlU3RlbmNpbCA9IGZhbHNlOwogICAgIGJvb2wgaGF2ZURlcHRoU3RlbmNpbCA9IGZhbHNl
OwogICAgIGZvciAoQXR0YWNobWVudE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2F0dGFjaG1l
bnRzLmJlZ2luKCk7IGl0ICE9IG1fYXR0YWNobWVudHMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAg
V2ViR0xBdHRhY2htZW50KiBhdHRhY2htZW50ID0gaXQtPnNlY29uZC5nZXQoKTsKLSAgICAgICAg
aWYgKCFpc0F0dGFjaG1lbnRDb21wbGV0ZShhdHRhY2htZW50LCBpdC0+Zmlyc3QsIHJlYXNvbikp
CisgICAgICAgIFdlYkdMQXR0YWNobWVudCogYXR0YWNobWVudCA9IGl0LT52YWx1ZS5nZXQoKTsK
KyAgICAgICAgaWYgKCFpc0F0dGFjaG1lbnRDb21wbGV0ZShhdHRhY2htZW50LCBpdC0+a2V5LCBy
ZWFzb24pKQogICAgICAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZF
Ul9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAgICAgIGlmICghYXR0YWNobWVudC0+aXNWYWxp
ZCgpKSB7CiAgICAgICAgICAgICAqcmVhc29uID0gImF0dGFjaG1lbnQgaXMgbm90IHZhbGlkIjsK
QEAgLTQzMCw3ICs0MzAsNyBAQCBHQzNEZW51bSBXZWJHTEZyYW1lYnVmZmVyOjpjaGVja1N0YXR1
cyhjb25zdCBjaGFyKiogcmVhc29uKSBjb25zdAogICAgICAgICAgICAgKnJlYXNvbiA9ICJhdHRh
Y2htZW50IGlzIGFuIHVuc3VwcG9ydGVkIGZvcm1hdCI7CiAgICAgICAgICAgICByZXR1cm4gR3Jh
cGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKICAgICAg
ICAgfQotICAgICAgICBzd2l0Y2ggKGl0LT5maXJzdCkgeworICAgICAgICBzd2l0Y2ggKGl0LT5r
ZXkpIHsKICAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVDoK
ICAgICAgICAgICAgIGhhdmVEZXB0aCA9IHRydWU7CiAgICAgICAgICAgICBicmVhazsKQEAgLTQ4
OCw3ICs0ODgsNyBAQCBib29sIFdlYkdMRnJhbWVidWZmZXI6Omhhc1N0ZW5jaWxCdWZmZXIoKSBj
b25zdAogdm9pZCBXZWJHTEZyYW1lYnVmZmVyOjpkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29u
dGV4dDNEKiBjb250ZXh0M2QsIFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0KQogewogICAgIGZvciAo
QXR0YWNobWVudE1hcDo6aXRlcmF0b3IgaXQgPSBtX2F0dGFjaG1lbnRzLmJlZ2luKCk7IGl0ICE9
IG1fYXR0YWNobWVudHMuZW5kKCk7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPm9uRGV0YWNo
ZWQoY29udGV4dDNkKTsKKyAgICAgICAgaXQtPnZhbHVlLT5vbkRldGFjaGVkKGNvbnRleHQzZCk7
CiAKICAgICBjb250ZXh0M2QtPmRlbGV0ZUZyYW1lYnVmZmVyKG9iamVjdCk7CiB9CkBAIC00OTks
OCArNDk5LDggQEAgYm9vbCBXZWJHTEZyYW1lYnVmZmVyOjppbml0aWFsaXplQXR0YWNobWVudHMo
R3JhcGhpY3NDb250ZXh0M0QqIGczZCwgY29uc3QgY2hhcioKICAgICBHQzNEYml0ZmllbGQgbWFz
ayA9IDA7CiAKICAgICBmb3IgKEF0dGFjaG1lbnRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9hdHRhY2ht
ZW50cy5iZWdpbigpOyBpdCAhPSBtX2F0dGFjaG1lbnRzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAg
IEdDM0RlbnVtIGF0dGFjaG1lbnRUeXBlID0gaXQtPmZpcnN0OwotICAgICAgICBXZWJHTEF0dGFj
aG1lbnQqIGF0dGFjaG1lbnQgPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICBHQzNEZW51bSBh
dHRhY2htZW50VHlwZSA9IGl0LT5rZXk7CisgICAgICAgIFdlYkdMQXR0YWNobWVudCogYXR0YWNo
bWVudCA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgaWYgKCFhdHRhY2htZW50LT5pc0luaXRp
YWxpemVkKCkpCiAgICAgICAgICAgIG1hc2sgfD0gR3JhcGhpY3NDb250ZXh0M0Q6OmdldENsZWFy
Qml0c0J5QXR0YWNobWVudFR5cGUoYXR0YWNobWVudFR5cGUpOwogICAgIH0KQEAgLTU3MSw4ICs1
NzEsOCBAQCBib29sIFdlYkdMRnJhbWVidWZmZXI6OmluaXRpYWxpemVBdHRhY2htZW50cyhHcmFw
aGljc0NvbnRleHQzRCogZzNkLCBjb25zdCBjaGFyKgogICAgICAgICBnM2QtPmRpc2FibGUoR3Jh
cGhpY3NDb250ZXh0M0Q6OkRJVEhFUik7CiAKICAgICBmb3IgKEF0dGFjaG1lbnRNYXA6Oml0ZXJh
dG9yIGl0ID0gbV9hdHRhY2htZW50cy5iZWdpbigpOyBpdCAhPSBtX2F0dGFjaG1lbnRzLmVuZCgp
OyArK2l0KSB7Ci0gICAgICAgIEdDM0RlbnVtIGF0dGFjaG1lbnRUeXBlID0gaXQtPmZpcnN0Owot
ICAgICAgICBXZWJHTEF0dGFjaG1lbnQqIGF0dGFjaG1lbnQgPSBpdC0+c2Vjb25kLmdldCgpOwor
ICAgICAgICBHQzNEZW51bSBhdHRhY2htZW50VHlwZSA9IGl0LT5rZXk7CisgICAgICAgIFdlYkdM
QXR0YWNobWVudCogYXR0YWNobWVudCA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgR0MzRGJp
dGZpZWxkIGJpdHMgPSBHcmFwaGljc0NvbnRleHQzRDo6Z2V0Q2xlYXJCaXRzQnlBdHRhY2htZW50
VHlwZShhdHRhY2htZW50VHlwZSk7CiAgICAgICAgIGlmIChiaXRzICYgbWFzaykKICAgICAgICAg
ICAgIGF0dGFjaG1lbnQtPnNldEluaXRpYWxpemVkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weSBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CmluZGV4IDg1MjIyNTM4YjRkM2Q3
ZTk2ZmQzY2U5ZTNiZDBjOTFhZjMxOThjNzguLmY0NzA4ZmMzODdkY2U0ZWQyNDZmNmVhYTQyODBl
OWE4OWUyNjVlMTEgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2Vu
ZXJhdG9ySW5zcGVjdG9yLnB5CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2Vu
ZXJhdG9ySW5zcGVjdG9yLnB5CkBAIC0xMzE3LDcgKzEzMTcsNyBAQCBjbGFzcyBUeXBlQmluZGlu
Z3M6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dy
aXRlci5uZXdsaW5lKCIgICAgICAgIEluc3BlY3Rvck9iamVjdDo6aXRlcmF0b3IgJXM7XG4iICUg
aXRfbmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0
b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgJXMgPSBvYmplY3QtPmZpbmQoXCIlc1wiKTtcbiIg
JSAoaXRfbmFtZSwgcHJvcF9kYXRhLnBbIm5hbWUiXSkpCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgICAgIEFTU0VS
VCglcyAhPSBvYmplY3QtPmVuZCgpKTtcbiIgJSBpdF9uYW1lKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgICAgICAl
cyglcy0+c2Vjb25kLmdldCgpKTtcbiIgJSAocHJvcF9kYXRhLnBhcmFtX3R5cGVfYmluZGluZy5n
ZXRfdmFsaWRhdG9yX2NhbGxfdGV4dCgpLCBpdF9uYW1lKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgJXMo
JXMtPnZhbHVlLmdldCgpKTtcbiIgJSAocHJvcF9kYXRhLnBhcmFtX3R5cGVfYmluZGluZy5nZXRf
dmFsaWRhdG9yX2NhbGxfdGV4dCgpLCBpdF9uYW1lKSkKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICB9XG4iKQogCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBjbG9zZWRfZmllbGRfc2V0OgpA
QCAtMTMyOSw3ICsxMzI5LDcgQEAgY2xhc3MgVHlwZUJpbmRpbmdzOgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgICAg
ICBJbnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9yICVzO1xuIiAlIGl0X25hbWUpCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIg
ICAgICAgICVzID0gb2JqZWN0LT5maW5kKFwiJXNcIik7XG4iICUgKGl0X25hbWUsIHByb3BfZGF0
YS5wWyJuYW1lIl0pKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
bGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgICAgICBpZiAoJXMgIT0gb2JqZWN0LT5lbmQoKSkg
e1xuIiAlIGl0X25hbWUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgICAgICAgICAlcyglcy0+c2Vjb25kLmdldCgp
KTtcbiIgJSAocHJvcF9kYXRhLnBhcmFtX3R5cGVfYmluZGluZy5nZXRfdmFsaWRhdG9yX2NhbGxf
dGV4dCgpLCBpdF9uYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgICAgICVzKCVzLT52YWx1ZS5nZXQo
KSk7XG4iICUgKHByb3BfZGF0YS5wYXJhbV90eXBlX2JpbmRpbmcuZ2V0X3ZhbGlkYXRvcl9jYWxs
X3RleHQoKSwgaXRfbmFtZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgY2xvc2VkX2ZpZWxkX3NldDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgICAgICAgICArK2ZvdW5k
UHJvcGVydGllc0NvdW50O1xuIikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgfVxuIikKQEAgLTIwMDcsNyAr
MjAwNyw3IEBAICRtZXNzYWdlSGFuZGxlcnMKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
ICgoKnRoaXMpLippdC0+c2Vjb25kKShjYWxsSWQsIG1lc3NhZ2VPYmplY3QuZ2V0KCkpOworICAg
ICgoKnRoaXMpLippdC0+dmFsdWUpKGNhbGxJZCwgbWVzc2FnZU9iamVjdC5nZXQoKSk7CiB9CiAK
IHZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpzZW5kUmVzcG9uc2UobG9uZyBj
YWxsSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQsIGNvbnN0IGNoYXIqIGNv
bW1hbmROYW1lLCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycywgRXJy
b3JTdHJpbmcgaW52b2NhdGlvbkVycm9yKQpAQCAtMjA5MSw3ICsyMDkxLDcgQEAgUiBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OmdldFByb3BlcnR5VmFsdWVJbXBsKEluc3BlY3Rvck9i
amVjdCogb2JqZWN0LAogICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgfQogCi0gICAgaWYgKCFh
c19tZXRob2QodmFsdWVJdGVyYXRvci0+c2Vjb25kLmdldCgpLCAmdmFsdWUpKQorICAgIGlmICgh
YXNfbWV0aG9kKHZhbHVlSXRlcmF0b3ItPnZhbHVlLmdldCgpLCAmdmFsdWUpKQogICAgICAgICBw
cm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiUGFyYW1ldGVyICclcycg
aGFzIHdyb25nIHR5cGUuIEl0IG11c3QgYmUgJyVzJy4iLCBuYW1lLnV0ZjgoKS5kYXRhKCksIHR5
cGVfbmFtZSkpOwogICAgIGVsc2UKICAgICAgICAgaWYgKHZhbHVlRm91bmQpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9ET01QYXRjaFN1cHBvcnQuY3BwCmluZGV4IGMwM2RjZTQ3MTRkZjEy
Y2E1NWQ1OGViYWIyYjg5OWEyZGM3MTFjZTUuLjhlNmMxODAwZDM1MjgyNjRlNTMxMzRlZDhkYzYx
YjgzZWY4OGI5NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01QYXRj
aFN1cHBvcnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01QYXRjaFN1cHBv
cnQuY3BwCkBAIC0yMzcsMjQgKzIzNywyNCBAQCBET01QYXRjaFN1cHBvcnQ6OmRpZmYoY29uc3Qg
VmVjdG9yPE93blB0cjxEaWdlc3Q+ID4mIG9sZExpc3QsIGNvbnN0IFZlY3RvcjxPd25QdAogCiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuZXdMaXN0LnNpemUoKTsgKytpKSB7CiAgICAgICAg
IERpZmZUYWJsZTo6aXRlcmF0b3IgaXQgPSBuZXdUYWJsZS5hZGQobmV3TGlzdFtpXS0+bV9zaGEx
LCBWZWN0b3I8c2l6ZV90PigpKS5pdGVyYXRvcjsKLSAgICAgICAgaXQtPnNlY29uZC5hcHBlbmQo
aSk7CisgICAgICAgIGl0LT52YWx1ZS5hcHBlbmQoaSk7CiAgICAgfQogCiAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBvbGRMaXN0LnNpemUoKTsgKytpKSB7CiAgICAgICAgIERpZmZUYWJsZTo6
aXRlcmF0b3IgaXQgPSBvbGRUYWJsZS5hZGQob2xkTGlzdFtpXS0+bV9zaGExLCBWZWN0b3I8c2l6
ZV90PigpKS5pdGVyYXRvcjsKLSAgICAgICAgaXQtPnNlY29uZC5hcHBlbmQoaSk7CisgICAgICAg
IGl0LT52YWx1ZS5hcHBlbmQoaSk7CiAgICAgfQogCiAgICAgZm9yIChEaWZmVGFibGU6Oml0ZXJh
dG9yIG5ld0l0ID0gbmV3VGFibGUuYmVnaW4oKTsgbmV3SXQgIT0gbmV3VGFibGUuZW5kKCk7ICsr
bmV3SXQpIHsKLSAgICAgICAgaWYgKG5ld0l0LT5zZWNvbmQuc2l6ZSgpICE9IDEpCisgICAgICAg
IGlmIChuZXdJdC0+dmFsdWUuc2l6ZSgpICE9IDEpCiAgICAgICAgICAgICBjb250aW51ZTsKIAot
ICAgICAgICBEaWZmVGFibGU6Oml0ZXJhdG9yIG9sZEl0ID0gb2xkVGFibGUuZmluZChuZXdJdC0+
Zmlyc3QpOwotICAgICAgICBpZiAob2xkSXQgPT0gb2xkVGFibGUuZW5kKCkgfHwgb2xkSXQtPnNl
Y29uZC5zaXplKCkgIT0gMSkKKyAgICAgICAgRGlmZlRhYmxlOjppdGVyYXRvciBvbGRJdCA9IG9s
ZFRhYmxlLmZpbmQobmV3SXQtPmtleSk7CisgICAgICAgIGlmIChvbGRJdCA9PSBvbGRUYWJsZS5l
bmQoKSB8fCBvbGRJdC0+dmFsdWUuc2l6ZSgpICE9IDEpCiAgICAgICAgICAgICBjb250aW51ZTsK
IAotICAgICAgICBuZXdNYXBbbmV3SXQtPnNlY29uZFswXV0gPSBtYWtlX3BhaXIobmV3TGlzdFtu
ZXdJdC0+c2Vjb25kWzBdXS5nZXQoKSwgb2xkSXQtPnNlY29uZFswXSk7Ci0gICAgICAgIG9sZE1h
cFtvbGRJdC0+c2Vjb25kWzBdXSA9IG1ha2VfcGFpcihvbGRMaXN0W29sZEl0LT5zZWNvbmRbMF1d
LmdldCgpLCBuZXdJdC0+c2Vjb25kWzBdKTsKKyAgICAgICAgbmV3TWFwW25ld0l0LT52YWx1ZVsw
XV0gPSBtYWtlX3BhaXIobmV3TGlzdFtuZXdJdC0+dmFsdWVbMF1dLmdldCgpLCBvbGRJdC0+dmFs
dWVbMF0pOworICAgICAgICBvbGRNYXBbb2xkSXQtPnZhbHVlWzBdXSA9IG1ha2VfcGFpcihvbGRM
aXN0W29sZEl0LT52YWx1ZVswXV0uZ2V0KCksIG5ld0l0LT52YWx1ZVswXSk7CiAgICAgfQogCiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IG5ld0xpc3Quc2l6ZSgpID4gMCAmJiBpIDwgbmV3TGlzdC5z
aXplKCkgLSAxOyArK2kpIHsKQEAgLTM2NCw3ICszNjQsNyBAQCBib29sIERPTVBhdGNoU3VwcG9y
dDo6aW5uZXJQYXRjaENoaWxkcmVuKENvbnRhaW5lck5vZGUqIHBhcmVudE5vZGUsIGNvbnN0IFZl
Y3RvcgogCiAgICAgLy8gMi4gUGF0Y2ggbm9kZXMgbWFya2VkIGZvciBtZXJnZS4KICAgICBmb3Ig
KEhhc2hNYXA8RGlnZXN0KiwgRGlnZXN0Kj46Oml0ZXJhdG9yIGl0ID0gbWVyZ2VzLmJlZ2luKCk7
IGl0ICE9IG1lcmdlcy5lbmQoKTsgKytpdCkgewotICAgICAgICBpZiAoIWlubmVyUGF0Y2hOb2Rl
KGl0LT5zZWNvbmQsIGl0LT5maXJzdCwgZWMpKQorICAgICAgICBpZiAoIWlubmVyUGF0Y2hOb2Rl
KGl0LT52YWx1ZSwgaXQtPmtleSwgZWMpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KIApAQCAtNDYzLDcgKzQ2Myw3IEBAIGJvb2wgRE9NUGF0Y2hTdXBwb3J0OjpyZW1vdmVDaGls
ZEFuZE1vdmVUb05ldyhEaWdlc3QqIG9sZERpZ2VzdCwgRXhjZXB0aW9uQ29kZSYKICAgICAvLyBo
aWdoIHRoYXQgaXQgd2lsbCBnZXQgbWVyZ2VkIGJhY2sgaW50byB0aGUgb3JpZ2luYWwgRE9NIGR1
cmluZyB0aGUgZnVydGhlciBwYXRjaGluZy4KICAgICBVbnVzZWROb2Rlc01hcDo6aXRlcmF0b3Ig
aXQgPSBtX3VudXNlZE5vZGVzTWFwLmZpbmQob2xkRGlnZXN0LT5tX3NoYTEpOwogICAgIGlmIChp
dCAhPSBtX3VudXNlZE5vZGVzTWFwLmVuZCgpKSB7Ci0gICAgICAgIERpZ2VzdCogbmV3RGlnZXN0
ID0gaXQtPnNlY29uZDsKKyAgICAgICAgRGlnZXN0KiBuZXdEaWdlc3QgPSBpdC0+dmFsdWU7CiAg
ICAgICAgIE5vZGUqIG5ld05vZGUgPSBuZXdEaWdlc3QtPm1fbm9kZTsKICAgICAgICAgaWYgKCFt
X2RvbUVkaXRvci0+cmVwbGFjZUNoaWxkKG5ld05vZGUtPnBhcmVudE5vZGUoKSwgb2xkTm9kZSwg
bmV3Tm9kZSwgZWMpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0TWFuYWdlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcAppbmRleCA1MmVjNzQ5
MGEwNzdiNWNmZDRmM2IwODVkMjg3N2JjODcwY2MwN2NmLi4xZDVlMzE3NTdjZDg2YjNiMjJiOGZl
ZGIzMWFiY2Q1ZTAyZWZmNDc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcApAQCAtODIsMTAgKzgyLDEwIEBAIEluamVjdGVkU2Ny
aXB0IEluamVjdGVkU2NyaXB0TWFuYWdlcjo6aW5qZWN0ZWRTY3JpcHRGb3JJZChpbnQgaWQpCiB7
CiAgICAgSWRUb0luamVjdGVkU2NyaXB0TWFwOjppdGVyYXRvciBpdCA9IG1faWRUb0luamVjdGVk
U2NyaXB0LmZpbmQoaWQpOwogICAgIGlmIChpdCAhPSBtX2lkVG9JbmplY3RlZFNjcmlwdC5lbmQo
KSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBpdC0+dmFsdWU7
CiAgICAgZm9yIChTY3JpcHRTdGF0ZVRvSWQ6Oml0ZXJhdG9yIGl0ID0gbV9zY3JpcHRTdGF0ZVRv
SWQuYmVnaW4oKTsgaXQgIT0gbV9zY3JpcHRTdGF0ZVRvSWQuZW5kKCk7ICsraXQpIHsKLSAgICAg
ICAgaWYgKGl0LT5zZWNvbmQgPT0gaWQpCi0gICAgICAgICAgICByZXR1cm4gaW5qZWN0ZWRTY3Jp
cHRGb3IoaXQtPmZpcnN0KTsKKyAgICAgICAgaWYgKGl0LT52YWx1ZSA9PSBpZCkKKyAgICAgICAg
ICAgIHJldHVybiBpbmplY3RlZFNjcmlwdEZvcihpdC0+a2V5KTsKICAgICB9CiAgICAgcmV0dXJu
IEluamVjdGVkU2NyaXB0KCk7CiB9CkBAIC05NCw3ICs5NCw3IEBAIGludCBJbmplY3RlZFNjcmlw
dE1hbmFnZXI6OmluamVjdGVkU2NyaXB0SWRGb3IoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlKQog
ewogICAgIFNjcmlwdFN0YXRlVG9JZDo6aXRlcmF0b3IgaXQgPSBtX3NjcmlwdFN0YXRlVG9JZC5m
aW5kKHNjcmlwdFN0YXRlKTsKICAgICBpZiAoaXQgIT0gbV9zY3JpcHRTdGF0ZVRvSWQuZW5kKCkp
Ci0gICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwog
ICAgIGludCBpZCA9IG1fbmV4dEluamVjdGVkU2NyaXB0SWQrKzsKICAgICBtX3NjcmlwdFN0YXRl
VG9JZC5zZXQoc2NyaXB0U3RhdGUsIGlkKTsKICAgICByZXR1cm4gaWQ7CkBAIC0xMjYsMTEgKzEy
NiwxMSBAQCB2b2lkIEluamVjdGVkU2NyaXB0TWFuYWdlcjo6ZGlzY2FyZEluamVjdGVkU2NyaXB0
c0ZvcihET01XaW5kb3cqIHdpbmRvdykKICAgICBWZWN0b3I8bG9uZz4gaWRzVG9SZW1vdmU7CiAg
ICAgSWRUb0luamVjdGVkU2NyaXB0TWFwOjppdGVyYXRvciBlbmQgPSBtX2lkVG9JbmplY3RlZFNj
cmlwdC5lbmQoKTsKICAgICBmb3IgKElkVG9JbmplY3RlZFNjcmlwdE1hcDo6aXRlcmF0b3IgaXQg
PSBtX2lkVG9JbmplY3RlZFNjcmlwdC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlID0gaXQtPnNlY29uZC5zY3JpcHRTdGF0ZSgpOwor
ICAgICAgICBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUgPSBpdC0+dmFsdWUuc2NyaXB0U3RhdGUo
KTsKICAgICAgICAgaWYgKHdpbmRvdyAhPSBkb21XaW5kb3dGcm9tU2NyaXB0U3RhdGUoc2NyaXB0
U3RhdGUpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIG1fc2NyaXB0U3RhdGVUb0lk
LnJlbW92ZShzY3JpcHRTdGF0ZSk7Ci0gICAgICAgIGlkc1RvUmVtb3ZlLmFwcGVuZChpdC0+Zmly
c3QpOworICAgICAgICBpZHNUb1JlbW92ZS5hcHBlbmQoaXQtPmtleSk7CiAgICAgfQogCiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBpZHNUb1JlbW92ZS5zaXplKCk7IGkrKykKQEAgLTEzOSw3
ICsxMzksNyBAQCB2b2lkIEluamVjdGVkU2NyaXB0TWFuYWdlcjo6ZGlzY2FyZEluamVjdGVkU2Ny
aXB0c0ZvcihET01XaW5kb3cqIHdpbmRvdykKICAgICAvLyBOb3cgcmVtb3ZlIHNjcmlwdCBzdGF0
ZXMgdGhhdCBoYXZlIGlkIGJ1dCBubyBpbmplY3RlZCBzY3JpcHQuCiAgICAgVmVjdG9yPFNjcmlw
dFN0YXRlKj4gc2NyaXB0U3RhdGVzVG9SZW1vdmU7CiAgICAgZm9yIChTY3JpcHRTdGF0ZVRvSWQ6
Oml0ZXJhdG9yIGl0ID0gbV9zY3JpcHRTdGF0ZVRvSWQuYmVnaW4oKTsgaXQgIT0gbV9zY3JpcHRT
dGF0ZVRvSWQuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRl
ID0gaXQtPmZpcnN0OworICAgICAgICBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUgPSBpdC0+a2V5
OwogICAgICAgICBpZiAod2luZG93ID09IGRvbVdpbmRvd0Zyb21TY3JpcHRTdGF0ZShzY3JpcHRT
dGF0ZSkpCiAgICAgICAgICAgICBzY3JpcHRTdGF0ZXNUb1JlbW92ZS5hcHBlbmQoc2NyaXB0U3Rh
dGUpOwogICAgIH0KQEAgLTE1NSw3ICsxNTUsNyBAQCBib29sIEluamVjdGVkU2NyaXB0TWFuYWdl
cjo6Y2FuQWNjZXNzSW5zcGVjdGVkV29ya2VyQ29udGV4dChTY3JpcHRTdGF0ZSopCiB2b2lkIElu
amVjdGVkU2NyaXB0TWFuYWdlcjo6cmVsZWFzZU9iamVjdEdyb3VwKGNvbnN0IFN0cmluZyYgb2Jq
ZWN0R3JvdXApCiB7CiAgICAgZm9yIChJZFRvSW5qZWN0ZWRTY3JpcHRNYXA6Oml0ZXJhdG9yIGl0
ID0gbV9pZFRvSW5qZWN0ZWRTY3JpcHQuYmVnaW4oKTsgaXQgIT0gbV9pZFRvSW5qZWN0ZWRTY3Jp
cHQuZW5kKCk7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQucmVsZWFzZU9iamVjdEdyb3VwKG9i
amVjdEdyb3VwKTsKKyAgICAgICAgaXQtPnZhbHVlLnJlbGVhc2VPYmplY3RHcm91cChvYmplY3RH
cm91cCk7CiB9CiAKIFN0cmluZyBJbmplY3RlZFNjcmlwdE1hbmFnZXI6OmluamVjdGVkU2NyaXB0
U291cmNlKCkKQEAgLTE3Myw5ICsxNzMsOSBAQCBJbmplY3RlZFNjcmlwdCBJbmplY3RlZFNjcmlw
dE1hbmFnZXI6OmluamVjdGVkU2NyaXB0Rm9yKFNjcmlwdFN0YXRlKiBpbnNwZWN0ZWRTYwogewog
ICAgIFNjcmlwdFN0YXRlVG9JZDo6aXRlcmF0b3IgaXQgPSBtX3NjcmlwdFN0YXRlVG9JZC5maW5k
KGluc3BlY3RlZFNjcmlwdFN0YXRlKTsKICAgICBpZiAoaXQgIT0gbV9zY3JpcHRTdGF0ZVRvSWQu
ZW5kKCkpIHsKLSAgICAgICAgSWRUb0luamVjdGVkU2NyaXB0TWFwOjppdGVyYXRvciBpdDEgPSBt
X2lkVG9JbmplY3RlZFNjcmlwdC5maW5kKGl0LT5zZWNvbmQpOworICAgICAgICBJZFRvSW5qZWN0
ZWRTY3JpcHRNYXA6Oml0ZXJhdG9yIGl0MSA9IG1faWRUb0luamVjdGVkU2NyaXB0LmZpbmQoaXQt
PnZhbHVlKTsKICAgICAgICAgaWYgKGl0MSAhPSBtX2lkVG9JbmplY3RlZFNjcmlwdC5lbmQoKSkK
LSAgICAgICAgICAgIHJldHVybiBpdDEtPnNlY29uZDsKKyAgICAgICAgICAgIHJldHVybiBpdDEt
PnZhbHVlOwogICAgIH0KIAogICAgIGlmICghbV9pbnNwZWN0ZWRTdGF0ZUFjY2Vzc0NoZWNrKGlu
c3BlY3RlZFNjcmlwdFN0YXRlKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQ1NTQWdlbnQuY3BwCmluZGV4IDUzYTM1M2Y5MGQ4MmQxYTVmNjU3MDAxNjBlNDBiZjZjNWFl
ZmVkZjAuLmY4NWJjNGE0MjQ5NTIzNjFiNDFhOWYwZjBlMTQyZWZlYWVmMGQzZTAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcApAQCAtMTg3LDEw
ICsxODcsMTAgQEAgaW5saW5lIHZvaWQgU2VsZWN0b3JQcm9maWxlOjpjb21taXRTZWxlY3Rvcihi
b29sIG1hdGNoZWQpCiAKICAgICBSdWxlTWF0Y2hpbmdTdGF0c01hcDo6QWRkUmVzdWx0IHJlc3Vs
dCA9IG1fcnVsZU1hdGNoaW5nU3RhdHMuYWRkKG1ha2VLZXkoKSwgUnVsZU1hdGNoaW5nU3RhdHMo
bV9jdXJyZW50TWF0Y2hEYXRhLCBtYXRjaFRpbWVNcywgMSwgbWF0Y2hlZCA/IDEgOiAwKSk7CiAg
ICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNl
Y29uZC50b3RhbFRpbWUgKz0gbWF0Y2hUaW1lTXM7Ci0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+
c2Vjb25kLmhpdHMgKz0gMTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS50b3RhbFRp
bWUgKz0gbWF0Y2hUaW1lTXM7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuaGl0cyAr
PSAxOwogICAgICAgICBpZiAobWF0Y2hlZCkKLSAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+
c2Vjb25kLm1hdGNoZXMgKz0gMTsKKyAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUu
bWF0Y2hlcyArPSAxOwogICAgIH0KIH0KIApAQCAtMjAzLDcgKzIwMyw3IEBAIGlubGluZSB2b2lk
IFNlbGVjdG9yUHJvZmlsZTo6Y29tbWl0U2VsZWN0b3JUaW1lKCkKICAgICBpZiAoaXQgPT0gbV9y
dWxlTWF0Y2hpbmdTdGF0cy5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaXQtPnNlY29u
ZC50b3RhbFRpbWUgKz0gcHJvY2Vzc2luZ1RpbWVNczsKKyAgICBpdC0+dmFsdWUudG90YWxUaW1l
ICs9IHByb2Nlc3NpbmdUaW1lTXM7CiB9CiAKIFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6
U2VsZWN0b3JQcm9maWxlPiBTZWxlY3RvclByb2ZpbGU6OnRvSW5zcGVjdG9yT2JqZWN0KCkgY29u
c3QKQEAgLTIxMSwxMiArMjExLDEyIEBAIFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6U2Vs
ZWN0b3JQcm9maWxlPiBTZWxlY3RvclByb2ZpbGU6OnRvSW5zcGVjdG9yT2JqZWN0CiAgICAgUmVm
UHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6Q1NTOjpTZWxlY3RvclByb2ZpbGVF
bnRyeT4gPiBzZWxlY3RvclByb2ZpbGVEYXRhID0gVHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWls
ZGVyOjpDU1M6OlNlbGVjdG9yUHJvZmlsZUVudHJ5Pjo6Y3JlYXRlKCk7CiAgICAgZm9yIChSdWxl
TWF0Y2hpbmdTdGF0c01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3J1bGVNYXRjaGluZ1N0YXRz
LmJlZ2luKCk7IGl0ICE9IG1fcnVsZU1hdGNoaW5nU3RhdHMuZW5kKCk7ICsraXQpIHsKICAgICAg
ICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OlNlbGVjdG9yUHJvZmlsZUVudHJ5PiBlbnRyeSA9
IFR5cGVCdWlsZGVyOjpDU1M6OlNlbGVjdG9yUHJvZmlsZUVudHJ5OjpjcmVhdGUoKQotICAgICAg
ICAgICAgLnNldFNlbGVjdG9yKGl0LT5zZWNvbmQuc2VsZWN0b3IpCi0gICAgICAgICAgICAuc2V0
VXJsKGl0LT5zZWNvbmQudXJsKQotICAgICAgICAgICAgLnNldExpbmVOdW1iZXIoaXQtPnNlY29u
ZC5saW5lTnVtYmVyKQotICAgICAgICAgICAgLnNldFRpbWUoaXQtPnNlY29uZC50b3RhbFRpbWUp
Ci0gICAgICAgICAgICAuc2V0SGl0Q291bnQoaXQtPnNlY29uZC5oaXRzKQotICAgICAgICAgICAg
LnNldE1hdGNoQ291bnQoaXQtPnNlY29uZC5tYXRjaGVzKTsKKyAgICAgICAgICAgIC5zZXRTZWxl
Y3RvcihpdC0+dmFsdWUuc2VsZWN0b3IpCisgICAgICAgICAgICAuc2V0VXJsKGl0LT52YWx1ZS51
cmwpCisgICAgICAgICAgICAuc2V0TGluZU51bWJlcihpdC0+dmFsdWUubGluZU51bWJlcikKKyAg
ICAgICAgICAgIC5zZXRUaW1lKGl0LT52YWx1ZS50b3RhbFRpbWUpCisgICAgICAgICAgICAuc2V0
SGl0Q291bnQoaXQtPnZhbHVlLmhpdHMpCisgICAgICAgICAgICAuc2V0TWF0Y2hDb3VudChpdC0+
dmFsdWUubWF0Y2hlcyk7CiAgICAgICAgIHNlbGVjdG9yUHJvZmlsZURhdGEtPmFkZEl0ZW0oZW50
cnkucmVsZWFzZSgpKTsKICAgICB9CiAKQEAgLTU2OCw3ICs1NjgsNyBAQCBib29sIEluc3BlY3Rv
ckNTU0FnZW50Ojpmb3JjZVBzZXVkb1N0YXRlKEVsZW1lbnQqIGVsZW1lbnQsIENTU1NlbGVjdG9y
OjpQc2V1ZG9UeQogICAgIGlmIChpdCA9PSBtX25vZGVJZFRvRm9yY2VkUHNldWRvU3RhdGUuZW5k
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHVuc2lnbmVkIGZvcmNlZFBzZXVkb1N0
YXRlID0gaXQtPnNlY29uZDsKKyAgICB1bnNpZ25lZCBmb3JjZWRQc2V1ZG9TdGF0ZSA9IGl0LT52
YWx1ZTsKICAgICBzd2l0Y2ggKHBzZXVkb1R5cGUpIHsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQ
c2V1ZG9BY3RpdmU6CiAgICAgICAgIHJldHVybiBmb3JjZWRQc2V1ZG9TdGF0ZSAmIFBzZXVkb0Fj
dGl2ZTsKQEAgLTgwOSw3ICs4MDksNyBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50Ojpmb3JjZVBz
ZXVkb1N0YXRlKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgYwogCiAgICAg
dW5zaWduZWQgZm9yY2VkUHNldWRvU3RhdGUgPSBjb21wdXRlUHNldWRvQ2xhc3NNYXNrKGZvcmNl
ZFBzZXVkb0NsYXNzZXMuZ2V0KCkpOwogICAgIE5vZGVJZFRvRm9yY2VkUHNldWRvU3RhdGU6Oml0
ZXJhdG9yIGl0ID0gbV9ub2RlSWRUb0ZvcmNlZFBzZXVkb1N0YXRlLmZpbmQobm9kZUlkKTsKLSAg
ICB1bnNpZ25lZCBjdXJyZW50Rm9yY2VkUHNldWRvU3RhdGUgPSBpdCA9PSBtX25vZGVJZFRvRm9y
Y2VkUHNldWRvU3RhdGUuZW5kKCkgPyAwIDogaXQtPnNlY29uZDsKKyAgICB1bnNpZ25lZCBjdXJy
ZW50Rm9yY2VkUHNldWRvU3RhdGUgPSBpdCA9PSBtX25vZGVJZFRvRm9yY2VkUHNldWRvU3RhdGUu
ZW5kKCkgPyAwIDogaXQtPnZhbHVlOwogICAgIGJvb2wgbmVlZFN0eWxlUmVjYWxjID0gZm9yY2Vk
UHNldWRvU3RhdGUgIT0gY3VycmVudEZvcmNlZFBzZXVkb1N0YXRlOwogICAgIGlmICghbmVlZFN0
eWxlUmVjYWxjKQogICAgICAgICByZXR1cm47CkBAIC05MTYsNyArOTE2LDcgQEAgSW5zcGVjdG9y
U3R5bGVTaGVldEZvcklubGluZVN0eWxlKiBJbnNwZWN0b3JDU1NBZ2VudDo6YXNJbnNwZWN0b3JT
dHlsZVNoZWV0KEVsZW0KICAgICAgICAgcmV0dXJuIGluc3BlY3RvclN0eWxlU2hlZXQuZ2V0KCk7
CiAgICAgfQogCi0gICAgcmV0dXJuIGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgcmV0dXJuIGl0LT52
YWx1ZS5nZXQoKTsKIH0KIAogRWxlbWVudCogSW5zcGVjdG9yQ1NTQWdlbnQ6OmVsZW1lbnRGb3JJ
ZChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGludCBub2RlSWQpCkBAIC0xMDEwLDcgKzEwMTAs
NyBAQCBJbnNwZWN0b3JTdHlsZVNoZWV0KiBJbnNwZWN0b3JDU1NBZ2VudDo6YXNzZXJ0U3R5bGVT
aGVldEZvcklkKEVycm9yU3RyaW5nKiBlcnJvcgogICAgICAgICAqZXJyb3JTdHJpbmcgPSAiTm8g
c3R5bGUgc2hlZXQgd2l0aCBnaXZlbiBpZCBmb3VuZCI7CiAgICAgICAgIHJldHVybiAwOwogICAg
IH0KLSAgICByZXR1cm4gaXQtPnNlY29uZC5nZXQoKTsKKyAgICByZXR1cm4gaXQtPnZhbHVlLmdl
dCgpOwogfQogCiBUeXBlQnVpbGRlcjo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpFbnVtIEluc3Bl
Y3RvckNTU0FnZW50OjpkZXRlY3RPcmlnaW4oQ1NTU3R5bGVTaGVldCogcGFnZVN0eWxlU2hlZXQs
IERvY3VtZW50KiBvd25lckRvY3VtZW50KQpAQCAtMTE0MSw3ICsxMTQxLDcgQEAgdm9pZCBJbnNw
ZWN0b3JDU1NBZ2VudDo6ZGlkUmVtb3ZlRE9NTm9kZShOb2RlKiBub2RlKQogICAgIGlmIChpdCA9
PSBtX25vZGVUb0luc3BlY3RvclN0eWxlU2hlZXQuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIG1faWRUb0luc3BlY3RvclN0eWxlU2hlZXQucmVtb3ZlKGl0LT5zZWNvbmQtPmlkKCkpOwor
ICAgIG1faWRUb0luc3BlY3RvclN0eWxlU2hlZXQucmVtb3ZlKGl0LT52YWx1ZS0+aWQoKSk7CiAg
ICAgbV9ub2RlVG9JbnNwZWN0b3JTdHlsZVNoZWV0LnJlbW92ZShub2RlKTsKIH0KIApAQCAtMTE1
NCw3ICsxMTU0LDcgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6ZGlkTW9kaWZ5RE9NQXR0cihF
bGVtZW50KiBlbGVtZW50KQogICAgIGlmIChpdCA9PSBtX25vZGVUb0luc3BlY3RvclN0eWxlU2hl
ZXQuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGl0LT5zZWNvbmQtPmRpZE1vZGlmeUVs
ZW1lbnRBdHRyaWJ1dGUoKTsKKyAgICBpdC0+dmFsdWUtPmRpZE1vZGlmeUVsZW1lbnRBdHRyaWJ1
dGUoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6c3R5bGVTaGVldENoYW5nZWQoSW5z
cGVjdG9yU3R5bGVTaGVldCogc3R5bGVTaGVldCkKQEAgLTExNjcsNyArMTE2Nyw3IEBAIHZvaWQg
SW5zcGVjdG9yQ1NTQWdlbnQ6OnJlc2V0UHNldWRvU3RhdGVzKCkKIHsKICAgICBIYXNoU2V0PERv
Y3VtZW50Kj4gZG9jdW1lbnRzVG9DaGFuZ2U7CiAgICAgZm9yIChOb2RlSWRUb0ZvcmNlZFBzZXVk
b1N0YXRlOjppdGVyYXRvciBpdCA9IG1fbm9kZUlkVG9Gb3JjZWRQc2V1ZG9TdGF0ZS5iZWdpbigp
LCBlbmQgPSBtX25vZGVJZFRvRm9yY2VkUHNldWRvU3RhdGUuZW5kKCk7IGl0ICE9IGVuZDsgKytp
dCkgewotICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gdG9FbGVtZW50KG1fZG9tQWdlbnQtPm5v
ZGVGb3JJZChpdC0+Zmlyc3QpKTsKKyAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IHRvRWxlbWVu
dChtX2RvbUFnZW50LT5ub2RlRm9ySWQoaXQtPmtleSkpOwogICAgICAgICBpZiAoZWxlbWVudCAm
JiBlbGVtZW50LT5vd25lckRvY3VtZW50KCkpCiAgICAgICAgICAgICBkb2N1bWVudHNUb0NoYW5n
ZS5hZGQoZWxlbWVudC0+b3duZXJEb2N1bWVudCgpKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb25zb2xlQWdlbnQuY3BwCmluZGV4IGMxMmE1NmIw
ZDBmMjFkMGM0OGE3OGFlZDU4MGRkMWRiZTk3ZGFmMTQuLmM2NGQ4NzFiNDIyMjMwNDk2YTQ0NDll
Nzc5ZDVhZDA1MjkyZDkzZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDb25zb2xlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDb25zb2xlQWdlbnQuY3BwCkBAIC0xNzcsNyArMTc3LDcgQEAgdm9pZCBJbnNwZWN0
b3JDb25zb2xlQWdlbnQ6OnN0b3BUaW1pbmcoY29uc3QgU3RyaW5nJiB0aXRsZSwgUGFzc1JlZlB0
cjxTY3JpcHRDYWwKICAgICBpZiAoaXQgPT0gbV90aW1lcy5lbmQoKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgZG91YmxlIHN0YXJ0VGltZSA9IGl0LT5zZWNvbmQ7CisgICAgZG91YmxlIHN0YXJ0
VGltZSA9IGl0LT52YWx1ZTsKICAgICBtX3RpbWVzLnJlbW92ZShpdCk7CiAKICAgICBkb3VibGUg
ZWxhcHNlZCA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpIC0gc3RhcnRUaW1lOwpAQCAt
MjAwLDcgKzIwMCw3IEBAIHZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50Ojpjb3VudChQYXNzUmVm
UHRyPFNjcmlwdEFyZ3VtZW50cz4gYXJndW1lbnRzLCBQYXNzUmVmCiAgICAgaWYgKGl0ID09IG1f
Y291bnRzLmVuZCgpKQogICAgICAgICBjb3VudCA9IDE7CiAgICAgZWxzZSB7Ci0gICAgICAgIGNv
dW50ID0gaXQtPnNlY29uZCArIDE7CisgICAgICAgIGNvdW50ID0gaXQtPnZhbHVlICsgMTsKICAg
ICAgICAgbV9jb3VudHMucmVtb3ZlKGl0KTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCmluZGV4IGVkNDdiNWQwYTE3MzkwMjU1OTYz
NDNhMDI3M2RiZGExZjBlMjQzNjcuLjIyMDg4M2FlMTZmM2IzYzc5NTg3NWFjNmMxMmExYjJiZWMz
MzM4MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01B
Z2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50
LmNwcApAQCAtNDY5LDcgKzQ2OSw3IEBAIE5vZGUqIEluc3BlY3RvckRPTUFnZW50Ojpub2RlRm9y
SWQoaW50IGlkKQogCiAgICAgSGFzaE1hcDxpbnQsIE5vZGUqPjo6aXRlcmF0b3IgaXQgPSBtX2lk
VG9Ob2RlLmZpbmQoaWQpOwogICAgIGlmIChpdCAhPSBtX2lkVG9Ob2RlLmVuZCgpKQotICAgICAg
ICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKICAgICByZXR1
cm4gMDsKIH0KIApAQCAtOTE1LDkgKzkxNSw5IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnBl
cmZvcm1TZWFyY2goRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIHdoaXRlc3BhY2VUcmltCiAg
ICAgU2VhcmNoUmVzdWx0czo6aXRlcmF0b3IgcmVzdWx0c0l0ID0gbV9zZWFyY2hSZXN1bHRzLmFk
ZCgqc2VhcmNoSWQsIFZlY3RvcjxSZWZQdHI8Tm9kZT4gPigpKS5pdGVyYXRvcjsKIAogICAgIGZv
ciAoTGlzdEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRvciBpdCA9IHJlc3VsdENvbGxlY3Rvci5iZWdp
bigpOyBpdCAhPSByZXN1bHRDb2xsZWN0b3IuZW5kKCk7ICsraXQpCi0gICAgICAgIHJlc3VsdHNJ
dC0+c2Vjb25kLmFwcGVuZCgqaXQpOworICAgICAgICByZXN1bHRzSXQtPnZhbHVlLmFwcGVuZCgq
aXQpOwogCi0gICAgKnJlc3VsdENvdW50ID0gcmVzdWx0c0l0LT5zZWNvbmQuc2l6ZSgpOworICAg
ICpyZXN1bHRDb3VudCA9IHJlc3VsdHNJdC0+dmFsdWUuc2l6ZSgpOwogfQogCiB2b2lkIEluc3Bl
Y3RvckRPTUFnZW50OjpnZXRTZWFyY2hSZXN1bHRzKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywg
Y29uc3QgU3RyaW5nJiBzZWFyY2hJZCwgaW50IGZyb21JbmRleCwgaW50IHRvSW5kZXgsIFJlZlB0
cjxUeXBlQnVpbGRlcjo6QXJyYXk8aW50PiA+JiBub2RlSWRzKQpAQCAtOTI4LDcgKzkyOCw3IEBA
IHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldFNlYXJjaFJlc3VsdHMoRXJyb3JTdHJpbmcqIGVy
cm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBp
bnQgc2l6ZSA9IGl0LT5zZWNvbmQuc2l6ZSgpOworICAgIGludCBzaXplID0gaXQtPnZhbHVlLnNp
emUoKTsKICAgICBpZiAoZnJvbUluZGV4IDwgMCB8fCB0b0luZGV4ID4gc2l6ZSB8fCBmcm9tSW5k
ZXggPj0gdG9JbmRleCkgewogICAgICAgICAqZXJyb3JTdHJpbmcgPSAiSW52YWxpZCBzZWFyY2gg
cmVzdWx0IHJhbmdlIjsKICAgICAgICAgcmV0dXJuOwpAQCAtOTM2LDcgKzkzNiw3IEBAIHZvaWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OmdldFNlYXJjaFJlc3VsdHMoRXJyb3JTdHJpbmcqIGVycm9yU3Ry
aW5nLCBjb25zdCBTdHJpbmcmCiAKICAgICBub2RlSWRzID0gVHlwZUJ1aWxkZXI6OkFycmF5PGlu
dD46OmNyZWF0ZSgpOwogICAgIGZvciAoaW50IGkgPSBmcm9tSW5kZXg7IGkgPCB0b0luZGV4OyAr
K2kpCi0gICAgICAgIG5vZGVJZHMtPmFkZEl0ZW0ocHVzaE5vZGVQYXRoVG9Gcm9udGVuZCgoaXQt
PnNlY29uZClbaV0uZ2V0KCkpKTsKKyAgICAgICAgbm9kZUlkcy0+YWRkSXRlbShwdXNoTm9kZVBh
dGhUb0Zyb250ZW5kKChpdC0+dmFsdWUpW2ldLmdldCgpKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9y
RE9NQWdlbnQ6OmRpc2NhcmRTZWFyY2hSZXN1bHRzKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5n
JiBzZWFyY2hJZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JET01EZWJ1Z2dlckFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JET01EZWJ1Z2dlckFnZW50LmNwcAppbmRleCA4MDMyMjk1ZDg5NWU5ZDIyYTJmODBjNTk4ZDll
NDRkMjc0NzRhMDU2Li5jNGZjYjgyYjdiNmZhMGUyYjlhNTNiZDRmYWFjNjIzNjI5ZDBiZTVlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NRGVidWdnZXJB
Z2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTURlYnVn
Z2VyQWdlbnQuY3BwCkBAIC00MDIsOCArNDAyLDggQEAgdm9pZCBJbnNwZWN0b3JET01EZWJ1Z2dl
ckFnZW50Ojp3aWxsU2VuZFhNTEh0dHBSZXF1ZXN0KGNvbnN0IFN0cmluZyYgdXJsKQogICAgIGVs
c2UgewogICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB4aHJCcmVha3BvaW50cyA9IG1f
c3RhdGUtPmdldE9iamVjdChET01EZWJ1Z2dlckFnZW50U3RhdGU6OnhockJyZWFrcG9pbnRzKTsK
ICAgICAgICAgZm9yIChJbnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9yIGl0ID0geGhyQnJlYWtwb2lu
dHMtPmJlZ2luKCk7IGl0ICE9IHhockJyZWFrcG9pbnRzLT5lbmQoKTsgKytpdCkgewotICAgICAg
ICAgICAgaWYgKHVybC5jb250YWlucyhpdC0+Zmlyc3QpKSB7Ci0gICAgICAgICAgICAgICAgYnJl
YWtwb2ludFVSTCA9IGl0LT5maXJzdDsKKyAgICAgICAgICAgIGlmICh1cmwuY29udGFpbnMoaXQt
PmtleSkpIHsKKyAgICAgICAgICAgICAgICBicmVha3BvaW50VVJMID0gaXQtPmtleTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcAppbmRl
eCA5MGEwYTllNjA5MGUwYzJjMzlkNzg2OWY0MDJkNDMyYjNhMmJmNmYwLi5jMzJlYTI5ODc2ZGQ5
ZWUxN2JjMmU2MWUwZDdlNjg3MDZhMTI1Mzc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcApAQCAtNzcsNyArNzcsNyBA
QCB2b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6Y2xlYXJGcm9udGVuZCgpCiB7CiAgICAg
RE9NU3RvcmFnZVJlc291cmNlc01hcDo6aXRlcmF0b3IgZG9tU3RvcmFnZUVuZCA9IG1fcmVzb3Vy
Y2VzLmVuZCgpOwogICAgIGZvciAoRE9NU3RvcmFnZVJlc291cmNlc01hcDo6aXRlcmF0b3IgaXQg
PSBtX3Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSBkb21TdG9yYWdlRW5kOyArK2l0KQotICAgICAg
ICBpdC0+c2Vjb25kLT51bmJpbmQoKTsKKyAgICAgICAgaXQtPnZhbHVlLT51bmJpbmQoKTsKICAg
ICBtX2Zyb250ZW5kID0gMDsKICAgICBkaXNhYmxlKDApOwogfQpAQCAtOTYsNyArOTYsNyBAQCB2
b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nKikKIAogICAg
IERPTVN0b3JhZ2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIHJlc291cmNlc0VuZCA9IG1fcmVzb3Vy
Y2VzLmVuZCgpOwogICAgIGZvciAoRE9NU3RvcmFnZVJlc291cmNlc01hcDo6aXRlcmF0b3IgaXQg
PSBtX3Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSByZXNvdXJjZXNFbmQ7ICsraXQpCi0gICAgICAg
IGl0LT5zZWNvbmQtPmJpbmQobV9mcm9udGVuZCk7CisgICAgICAgIGl0LT52YWx1ZS0+YmluZCht
X2Zyb250ZW5kKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmRpc2FibGUo
RXJyb3JTdHJpbmcqKQpAQCAtMTY1LDggKzE2NSw4IEBAIFN0cmluZyBJbnNwZWN0b3JET01TdG9y
YWdlQWdlbnQ6OnN0b3JhZ2VJZChTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4sIGJvb2wK
ICAgICBBU1NFUlQoc2VjdXJpdHlPcmlnaW4pOwogICAgIERPTVN0b3JhZ2VSZXNvdXJjZXNNYXA6
Oml0ZXJhdG9yIGRvbVN0b3JhZ2VFbmQgPSBtX3Jlc291cmNlcy5lbmQoKTsKICAgICBmb3IgKERP
TVN0b3JhZ2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMuYmVnaW4oKTsg
aXQgIT0gZG9tU3RvcmFnZUVuZDsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnNlY29uZC0+aXNT
YW1lT3JpZ2luQW5kVHlwZShzZWN1cml0eU9yaWdpbiwgaXNMb2NhbFN0b3JhZ2UpKQotICAgICAg
ICAgICAgcmV0dXJuIGl0LT5maXJzdDsKKyAgICAgICAgaWYgKGl0LT52YWx1ZS0+aXNTYW1lT3Jp
Z2luQW5kVHlwZShzZWN1cml0eU9yaWdpbiwgaXNMb2NhbFN0b3JhZ2UpKQorICAgICAgICAgICAg
cmV0dXJuIGl0LT5rZXk7CiAgICAgfQogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KQEAgLTE3Niwx
NCArMTc2LDE0IEBAIEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZSogSW5zcGVjdG9yRE9NU3Rv
cmFnZUFnZW50OjpnZXRET01TdG9yYWdlUmVzb3VyY2VGb3JJCiAgICAgRE9NU3RvcmFnZVJlc291
cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5maW5kKHN0b3JhZ2VJZCk7CiAgICAg
aWYgKGl0ID09IG1fcmVzb3VyY2VzLmVuZCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1
cm4gaXQtPnNlY29uZC5nZXQoKTsKKyAgICByZXR1cm4gaXQtPnZhbHVlLmdldCgpOwogfQogCiB2
b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6ZGlkVXNlRE9NU3RvcmFnZShTdG9yYWdlQXJl
YSogc3RvcmFnZUFyZWEsIGJvb2wgaXNMb2NhbFN0b3JhZ2UsIEZyYW1lKiBmcmFtZSkKIHsKICAg
ICBET01TdG9yYWdlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBkb21TdG9yYWdlRW5kID0gbV9yZXNv
dXJjZXMuZW5kKCk7CiAgICAgZm9yIChET01TdG9yYWdlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBp
dCA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGRvbVN0b3JhZ2VFbmQ7ICsraXQpIHsKLSAg
ICAgICAgaWYgKGl0LT5zZWNvbmQtPmlzU2FtZU9yaWdpbkFuZFR5cGUoZnJhbWUtPmRvY3VtZW50
KCktPnNlY3VyaXR5T3JpZ2luKCksIGlzTG9jYWxTdG9yYWdlKSkKKyAgICAgICAgaWYgKGl0LT52
YWx1ZS0+aXNTYW1lT3JpZ2luQW5kVHlwZShmcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmln
aW4oKSwgaXNMb2NhbFN0b3JhZ2UpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAt
MjE4LDcgKzIxOCw3IEBAIHNpemVfdCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6Om1lbW9yeUJ5
dGVzVXNlZEJ5U3RvcmFnZUNhY2hlKCkgY29uc3QKIHsKICAgICBzaXplX3Qgc2l6ZSA9IDA7CiAg
ICAgZm9yIChET01TdG9yYWdlUmVzb3VyY2VzTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fcmVz
b3VyY2VzLmJlZ2luKCk7IGl0ICE9IG1fcmVzb3VyY2VzLmVuZCgpOyArK2l0KQotICAgICAgICBz
aXplICs9IGl0LT5zZWNvbmQtPnN0b3JhZ2VBcmVhKCktPm1lbW9yeUJ5dGVzVXNlZEJ5Q2FjaGUo
KTsKKyAgICAgICAgc2l6ZSArPSBpdC0+dmFsdWUtPnN0b3JhZ2VBcmVhKCktPm1lbW9yeUJ5dGVz
VXNlZEJ5Q2FjaGUoKTsKICAgICByZXR1cm4gc2l6ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuY3BwCmluZGV4IDk4YzkzNjNh
ZTY5N2Q0NjgzNGVjM2I2MWQ0M2EzZWVkNDQ4MDllYWMuLjdiOGZjYTRkNGFhNjU3YjI4OWMyNTAz
ZDgyYWFiNGE5Y2EwYTY3NTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JEYXRhYmFzZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5jcHAKQEAgLTI3NSw3ICsyNzUsNyBAQCB2b2lkIEluc3Bl
Y3RvckRhdGFiYXNlQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyopCiAKICAgICBEYXRhYmFzZVJl
c291cmNlc01hcDo6aXRlcmF0b3IgZGF0YWJhc2VzRW5kID0gbV9yZXNvdXJjZXMuZW5kKCk7CiAg
ICAgZm9yIChEYXRhYmFzZVJlc291cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5i
ZWdpbigpOyBpdCAhPSBkYXRhYmFzZXNFbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPmJp
bmQobV9mcm9udGVuZFByb3ZpZGVyLT5mcm9udGVuZCgpKTsKKyAgICAgICAgaXQtPnZhbHVlLT5i
aW5kKG1fZnJvbnRlbmRQcm92aWRlci0+ZnJvbnRlbmQoKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9y
RGF0YWJhc2VBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyopCkBAIC0zMzMsOCArMzMzLDggQEAg
dm9pZCBJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjpleGVjdXRlU1FMKEVycm9yU3RyaW5nKiBlcnJv
ciwgY29uc3QgU3RyaW5nJiBkYXRhYmEKIFN0cmluZyBJbnNwZWN0b3JEYXRhYmFzZUFnZW50Ojpk
YXRhYmFzZUlkKERhdGFiYXNlKiBkYXRhYmFzZSkKIHsKICAgICBmb3IgKERhdGFiYXNlUmVzb3Vy
Y2VzTWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IG1fcmVzb3Vy
Y2VzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kLT5kYXRhYmFzZSgpID09
IGRhdGFiYXNlKQotICAgICAgICAgICAgcmV0dXJuIGl0LT5maXJzdDsKKyAgICAgICAgaWYgKGl0
LT52YWx1ZS0+ZGF0YWJhc2UoKSA9PSBkYXRhYmFzZSkKKyAgICAgICAgICAgIHJldHVybiBpdC0+
a2V5OwogICAgIH0KICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CkBAIC0zNDIsOCArMzQyLDggQEAg
U3RyaW5nIEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmRhdGFiYXNlSWQoRGF0YWJhc2UqIGRhdGFi
YXNlKQogSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZSogSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6
ZmluZEJ5RmlsZU5hbWUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSkKIHsKICAgICBmb3IgKERhdGFi
YXNlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9
IG1fcmVzb3VyY2VzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kLT5kYXRh
YmFzZSgpLT5maWxlTmFtZSgpID09IGZpbGVOYW1lKQotICAgICAgICAgICAgcmV0dXJuIGl0LT5z
ZWNvbmQuZ2V0KCk7CisgICAgICAgIGlmIChpdC0+dmFsdWUtPmRhdGFiYXNlKCktPmZpbGVOYW1l
KCkgPT0gZmlsZU5hbWUpCisgICAgICAgICAgICByZXR1cm4gaXQtPnZhbHVlLmdldCgpOwogICAg
IH0KICAgICByZXR1cm4gMDsKIH0KQEAgLTM1Myw3ICszNTMsNyBAQCBEYXRhYmFzZSogSW5zcGVj
dG9yRGF0YWJhc2VBZ2VudDo6ZGF0YWJhc2VGb3JJZChjb25zdCBTdHJpbmcmIGRhdGFiYXNlSWQp
CiAgICAgRGF0YWJhc2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMuZmlu
ZChkYXRhYmFzZUlkKTsKICAgICBpZiAoaXQgPT0gbV9yZXNvdXJjZXMuZW5kKCkpCiAgICAgICAg
IHJldHVybiAwOwotICAgIHJldHVybiBpdC0+c2Vjb25kLT5kYXRhYmFzZSgpOworICAgIHJldHVy
biBpdC0+dmFsdWUtPmRhdGFiYXNlKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNw
cAppbmRleCAxYmMxNmYyMGYzYzViMWVlNjA5YjVjM2YxOWM0MjJlNDk2Yzg4ZjU0Li41Yjg3NjRj
ZTQ5MDZiZGUwNzFlY2YyZTFjZDU5YWMzMzkxODM3Y2EzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCkBAIC0yNDgsOSArMjQ4
LDkgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRCcmVha3BvaW50QnlVcmwoRXJy
b3JTdHJpbmcqIGVycm9yU3RyaW5nLCBpbnQgbGkKIAogICAgIFNjcmlwdEJyZWFrcG9pbnQgYnJl
YWtwb2ludChsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIGNvbmRpdGlvbik7CiAgICAgZm9yIChT
Y3JpcHRzTWFwOjppdGVyYXRvciBpdCA9IG1fc2NyaXB0cy5iZWdpbigpOyBpdCAhPSBtX3Njcmlw
dHMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgaWYgKCFtYXRjaGVzKGl0LT5zZWNvbmQudXJsLCB1
cmwsIGlzUmVnZXgpKQorICAgICAgICBpZiAoIW1hdGNoZXMoaXQtPnZhbHVlLnVybCwgdXJsLCBp
c1JlZ2V4KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBSZWZQdHI8VHlwZUJ1aWxk
ZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj4gbG9jYXRpb24gPSByZXNvbHZlQnJlYWtwb2ludChicmVh
a3BvaW50SWQsIGl0LT5maXJzdCwgYnJlYWtwb2ludCk7CisgICAgICAgIFJlZlB0cjxUeXBlQnVp
bGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uPiBsb2NhdGlvbiA9IHJlc29sdmVCcmVha3BvaW50KGJy
ZWFrcG9pbnRJZCwgaXQtPmtleSwgYnJlYWtwb2ludCk7CiAgICAgICAgIGlmIChsb2NhdGlvbikK
ICAgICAgICAgICAgIGxvY2F0aW9ucy0+YWRkSXRlbShsb2NhdGlvbik7CiAgICAgfQpAQCAtMzAy
LDggKzMwMiw4IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6cmVtb3ZlQnJlYWtwb2lu
dChFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgYnJlYWtwCiAgICAgQnJlYWtwb2ludElkVG9E
ZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNNYXA6Oml0ZXJhdG9yIGRlYnVnU2VydmVyQnJlYWtwb2lu
dElkc0l0ZXJhdG9yID0gbV9icmVha3BvaW50SWRUb0RlYnVnU2VydmVyQnJlYWtwb2ludElkcy5m
aW5kKGJyZWFrcG9pbnRJZCk7CiAgICAgaWYgKGRlYnVnU2VydmVyQnJlYWtwb2ludElkc0l0ZXJh
dG9yID09IG1fYnJlYWtwb2ludElkVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHMuZW5kKCkpCiAg
ICAgICAgIHJldHVybjsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRlYnVnU2VydmVyQnJl
YWtwb2ludElkc0l0ZXJhdG9yLT5zZWNvbmQuc2l6ZSgpOyArK2kpCi0gICAgICAgIHNjcmlwdERl
YnVnU2VydmVyKCkucmVtb3ZlQnJlYWtwb2ludChkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNJdGVy
YXRvci0+c2Vjb25kW2ldKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRlYnVnU2VydmVy
QnJlYWtwb2ludElkc0l0ZXJhdG9yLT52YWx1ZS5zaXplKCk7ICsraSkKKyAgICAgICAgc2NyaXB0
RGVidWdTZXJ2ZXIoKS5yZW1vdmVCcmVha3BvaW50KGRlYnVnU2VydmVyQnJlYWtwb2ludElkc0l0
ZXJhdG9yLT52YWx1ZVtpXSk7CiAgICAgbV9icmVha3BvaW50SWRUb0RlYnVnU2VydmVyQnJlYWtw
b2ludElkcy5yZW1vdmUoZGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzSXRlcmF0b3IpOwogfQogCkBA
IC0zMzEsNyArMzMxLDcgQEAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0
aW9uPiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZXNvbHZlQnJlYWsKICAgICBTY3JpcHRzTWFw
OjppdGVyYXRvciBzY3JpcHRJdGVyYXRvciA9IG1fc2NyaXB0cy5maW5kKHNjcmlwdElkKTsKICAg
ICBpZiAoc2NyaXB0SXRlcmF0b3IgPT0gbV9zY3JpcHRzLmVuZCgpKQogICAgICAgICByZXR1cm4g
MDsKLSAgICBTY3JpcHQmIHNjcmlwdCA9IHNjcmlwdEl0ZXJhdG9yLT5zZWNvbmQ7CisgICAgU2Ny
aXB0JiBzY3JpcHQgPSBzY3JpcHRJdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKGJyZWFrcG9pbnQu
bGluZU51bWJlciA8IHNjcmlwdC5zdGFydExpbmUgfHwgc2NyaXB0LmVuZExpbmUgPCBicmVha3Bv
aW50LmxpbmVOdW1iZXIpCiAgICAgICAgIHJldHVybiAwOwogCkBAIC0zNDQsNyArMzQ0LDcgQEAg
UGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uPiBJbnNwZWN0b3JEZWJ1
Z2dlckFnZW50OjpyZXNvbHZlQnJlYWsKICAgICBCcmVha3BvaW50SWRUb0RlYnVnU2VydmVyQnJl
YWtwb2ludElkc01hcDo6aXRlcmF0b3IgZGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzSXRlcmF0b3Ig
PSBtX2JyZWFrcG9pbnRJZFRvRGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzLmZpbmQoYnJlYWtwb2lu
dElkKTsKICAgICBpZiAoZGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzSXRlcmF0b3IgPT0gbV9icmVh
a3BvaW50SWRUb0RlYnVnU2VydmVyQnJlYWtwb2ludElkcy5lbmQoKSkKICAgICAgICAgZGVidWdT
ZXJ2ZXJCcmVha3BvaW50SWRzSXRlcmF0b3IgPSBtX2JyZWFrcG9pbnRJZFRvRGVidWdTZXJ2ZXJC
cmVha3BvaW50SWRzLnNldChicmVha3BvaW50SWQsIFZlY3RvcjxTdHJpbmc+KCkpLml0ZXJhdG9y
OwotICAgIGRlYnVnU2VydmVyQnJlYWtwb2ludElkc0l0ZXJhdG9yLT5zZWNvbmQuYXBwZW5kKGRl
YnVnU2VydmVyQnJlYWtwb2ludElkKTsKKyAgICBkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNJdGVy
YXRvci0+dmFsdWUuYXBwZW5kKGRlYnVnU2VydmVyQnJlYWtwb2ludElkKTsKIAogICAgIFJlZlB0
cjxUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uPiBsb2NhdGlvbiA9IFR5cGVCdWlsZGVy
OjpEZWJ1Z2dlcjo6TG9jYXRpb246OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRTY3JpcHRJZChzY3Jp
cHRJZCkKQEAgLTM3MCw3ICszNzAsNyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNl
YXJjaEluQ29udGVudChFcnJvclN0cmluZyogZXJyb3IsIGNvbnN0IFN0cmluZyYgcwogCiAgICAg
U2NyaXB0c01hcDo6aXRlcmF0b3IgaXQgPSBtX3NjcmlwdHMuZmluZChzY3JpcHRJZCk7CiAgICAg
aWYgKGl0ICE9IG1fc2NyaXB0cy5lbmQoKSkKLSAgICAgICAgcmVzdWx0cyA9IENvbnRlbnRTZWFy
Y2hVdGlsczo6c2VhcmNoSW5UZXh0QnlMaW5lcyhpdC0+c2Vjb25kLnNvdXJjZSwgcXVlcnksIGNh
c2VTZW5zaXRpdmUsIGlzUmVnZXgpOworICAgICAgICByZXN1bHRzID0gQ29udGVudFNlYXJjaFV0
aWxzOjpzZWFyY2hJblRleHRCeUxpbmVzKGl0LT52YWx1ZS5zb3VyY2UsIHF1ZXJ5LCBjYXNlU2Vu
c2l0aXZlLCBpc1JlZ2V4KTsKICAgICBlbHNlCiAgICAgICAgICplcnJvciA9ICJObyBzY3JpcHQg
Zm9yIGlkOiAiICsgc2NyaXB0SWQ7CiB9CkBAIC00MDMsNyArNDAzLDcgQEAgdm9pZCBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpnZXRTY3JpcHRTb3VyY2UoRXJyb3JTdHJpbmcqIGVycm9yLCBjb25z
dCBTdHJpbmcmIHMKIHsKICAgICBTY3JpcHRzTWFwOjppdGVyYXRvciBpdCA9IG1fc2NyaXB0cy5m
aW5kKHNjcmlwdElkKTsKICAgICBpZiAoaXQgIT0gbV9zY3JpcHRzLmVuZCgpKQotICAgICAgICAq
c2NyaXB0U291cmNlID0gaXQtPnNlY29uZC5zb3VyY2U7CisgICAgICAgICpzY3JpcHRTb3VyY2Ug
PSBpdC0+dmFsdWUuc291cmNlOwogICAgIGVsc2UKICAgICAgICAgKmVycm9yID0gIk5vIHNjcmlw
dCBmb3IgaWQ6ICIgKyBzY3JpcHRJZDsKIH0KQEAgLTYzMCw3ICs2MzAsNyBAQCB2b2lkIEluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBhcnNlU291cmNlKGNvbnN0IFN0cmluZyYgc2NyaXB0SWQs
IGNvbnN0IFNjcmlwdAogCiAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnJlYWtwb2ludHND
b29raWUgPSBtX3N0YXRlLT5nZXRPYmplY3QoRGVidWdnZXJBZ2VudFN0YXRlOjpqYXZhU2NyaXB0
QnJlYWtwb2ludHMpOwogICAgIGZvciAoSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciBpdCA9IGJy
ZWFrcG9pbnRzQ29va2llLT5iZWdpbigpOyBpdCAhPSBicmVha3BvaW50c0Nvb2tpZS0+ZW5kKCk7
ICsraXQpIHsKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnJlYWtwb2ludE9iamVj
dCA9IGl0LT5zZWNvbmQtPmFzT2JqZWN0KCk7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IGJyZWFrcG9pbnRPYmplY3QgPSBpdC0+dmFsdWUtPmFzT2JqZWN0KCk7CiAgICAgICAgIGJv
b2wgaXNSZWdleDsKICAgICAgICAgYnJlYWtwb2ludE9iamVjdC0+Z2V0Qm9vbGVhbigiaXNSZWdl
eCIsICZpc1JlZ2V4KTsKICAgICAgICAgU3RyaW5nIHVybDsKQEAgLTY0MSw5ICs2NDEsOSBAQCB2
b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBhcnNlU291cmNlKGNvbnN0IFN0cmluZyYg
c2NyaXB0SWQsIGNvbnN0IFNjcmlwdAogICAgICAgICBicmVha3BvaW50T2JqZWN0LT5nZXROdW1i
ZXIoImxpbmVOdW1iZXIiLCAmYnJlYWtwb2ludC5saW5lTnVtYmVyKTsKICAgICAgICAgYnJlYWtw
b2ludE9iamVjdC0+Z2V0TnVtYmVyKCJjb2x1bW5OdW1iZXIiLCAmYnJlYWtwb2ludC5jb2x1bW5O
dW1iZXIpOwogICAgICAgICBicmVha3BvaW50T2JqZWN0LT5nZXRTdHJpbmcoImNvbmRpdGlvbiIs
ICZicmVha3BvaW50LmNvbmRpdGlvbik7Ci0gICAgICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6RGVi
dWdnZXI6OkxvY2F0aW9uPiBsb2NhdGlvbiA9IHJlc29sdmVCcmVha3BvaW50KGl0LT5maXJzdCwg
c2NyaXB0SWQsIGJyZWFrcG9pbnQpOworICAgICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkRlYnVn
Z2VyOjpMb2NhdGlvbj4gbG9jYXRpb24gPSByZXNvbHZlQnJlYWtwb2ludChpdC0+a2V5LCBzY3Jp
cHRJZCwgYnJlYWtwb2ludCk7CiAgICAgICAgIGlmIChsb2NhdGlvbikKLSAgICAgICAgICAgIG1f
ZnJvbnRlbmQtPmJyZWFrcG9pbnRSZXNvbHZlZChpdC0+Zmlyc3QsIGxvY2F0aW9uKTsKKyAgICAg
ICAgICAgIG1fZnJvbnRlbmQtPmJyZWFrcG9pbnRSZXNvbHZlZChpdC0+a2V5LCBsb2NhdGlvbik7
CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9ySW5kZXhlZERCQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckluZGV4ZWREQkFnZW50LmNwcAppbmRleCAzM2IyMWI0ZmRkMTJjMTk5MjVmNDVjMzMzYWVhNzA0
NzM3ZWM2ZjgxLi5lYTMzOTllZjczMmVhMWJjNDkyYmE5ZGVlMDQ4OTE2MzJlNTM5ODM1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2Vu
dC5jcHAKQEAgLTMxOSwxMiArMzE5LDEyIEBAIHB1YmxpYzoKICAgICAgICAgUmVmUHRyPFR5cGVC
dWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6SW5kZXhlZERCOjpPYmplY3RTdG9yZT4gPiBvYmpl
Y3RTdG9yZXMgPSBUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkluZGV4ZWREQjo6T2Jq
ZWN0U3RvcmU+OjpjcmVhdGUoKTsKIAogICAgICAgICBmb3IgKElEQkRhdGFiYXNlTWV0YWRhdGE6
Ok9iamVjdFN0b3JlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGRhdGFiYXNlTWV0YWRhdGEub2Jq
ZWN0U3RvcmVzLmJlZ2luKCk7IGl0ICE9IGRhdGFiYXNlTWV0YWRhdGEub2JqZWN0U3RvcmVzLmVu
ZCgpOyArK2l0KSB7Ci0gICAgICAgICAgICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBv
YmplY3RTdG9yZU1ldGFkYXRhID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIGNvbnN0IElEQk9i
amVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlTWV0YWRhdGEgPSBpdC0+dmFsdWU7CiAKICAg
ICAgICAgICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkluZGV4ZWRE
Qjo6T2JqZWN0U3RvcmVJbmRleD4gPiBpbmRleGVzID0gVHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVC
dWlsZGVyOjpJbmRleGVkREI6Ok9iamVjdFN0b3JlSW5kZXg+OjpjcmVhdGUoKTsKIAogICAgICAg
ICAgICAgZm9yIChJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbmRleE1hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBvYmplY3RTdG9yZU1ldGFkYXRhLmluZGV4ZXMuYmVnaW4oKTsgaXQgIT0gb2JqZWN0
U3RvcmVNZXRhZGF0YS5pbmRleGVzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAgY29u
c3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSA9IGl0LT5zZWNvbmQ7CisgICAgICAg
ICAgICAgICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSA9IGl0LT52YWx1
ZTsKIAogICAgICAgICAgICAgICAgIFJlZlB0cjxPYmplY3RTdG9yZUluZGV4PiBvYmplY3RTdG9y
ZUluZGV4ID0gT2JqZWN0U3RvcmVJbmRleDo6Y3JlYXRlKCkKICAgICAgICAgICAgICAgICAgICAg
LnNldE5hbWUoaW5kZXhNZXRhZGF0YS5uYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3Rvck1lbW9yeUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JNZW1vcnlBZ2VudC5jcHAKaW5kZXggZWE1MjU0YWFiNTllMzI0YmFjYmE5
Nzc3YjY2ZGYzODBhMjViNGM3YS4uMDg0MjVjYzg3NDIwNTgyMTAyMGRhYTA5ZjZmMjc3NTcxNGQ0
YzJlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck1lbW9y
eUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTWVtb3J5
QWdlbnQuY3BwCkBAIC0xNjMsOCArMTYzLDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgUmVm
UHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6TWVtb3J5OjpOb2RlQ291bnQ+ID4g
Y2hpbGRyZW5TdGF0cyA9IFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6TWVtb3J5OjpO
b2RlQ291bnQ+OjpjcmVhdGUoKTsKICAgICAgICAgZm9yIChIYXNoTWFwPFN0cmluZywgaW50Pjo6
aXRlcmF0b3IgaXQgPSBtX25vZGVOYW1lVG9Db3VudC5iZWdpbigpOyBpdCAhPSBtX25vZGVOYW1l
VG9Db3VudC5lbmQoKTsgKytpdCkgewotICAgICAgICAgICAgUmVmUHRyPE5vZGVDb3VudD4gbm9k
ZUNvdW50ID0gTm9kZUNvdW50OjpjcmVhdGUoKS5zZXROb2RlTmFtZShpdC0+Zmlyc3QpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LnNldENvdW50KGl0LT5zZWNvbmQpOworICAgICAgICAgICAgUmVmUHRyPE5vZGVDb3VudD4gbm9k
ZUNvdW50ID0gTm9kZUNvdW50OjpjcmVhdGUoKS5zZXROb2RlTmFtZShpdC0+a2V5KQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5z
ZXRDb3VudChpdC0+dmFsdWUpOwogICAgICAgICAgICAgY2hpbGRyZW5TdGF0cy0+YWRkSXRlbShu
b2RlQ291bnQpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBjaGlsZHJlblN0YXRzLnJlbGVh
c2UoKTsKQEAgLTE3NCw4ICsxNzQsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBSZWZQdHI8
VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpNZW1vcnk6Okxpc3RlbmVyQ291bnQ+ID4g
bGlzdGVuZXJTdGF0cyA9IFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6TWVtb3J5OjpM
aXN0ZW5lckNvdW50Pjo6Y3JlYXRlKCk7CiAgICAgICAgIGZvciAoSGFzaE1hcDxBdG9taWNTdHJp
bmcsIGludD46Oml0ZXJhdG9yIGl0ID0gbV9ldmVudFR5cGVUb0NvdW50LmJlZ2luKCk7IGl0ICE9
IG1fZXZlbnRUeXBlVG9Db3VudC5lbmQoKTsgKytpdCkgewotICAgICAgICAgICAgUmVmUHRyPExp
c3RlbmVyQ291bnQ+IGxpc3RlbmVyQ291bnQgPSBMaXN0ZW5lckNvdW50OjpjcmVhdGUoKS5zZXRU
eXBlKGl0LT5maXJzdCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0Q291bnQoaXQtPnNlY29uZCk7Cisg
ICAgICAgICAgICBSZWZQdHI8TGlzdGVuZXJDb3VudD4gbGlzdGVuZXJDb3VudCA9IExpc3RlbmVy
Q291bnQ6OmNyZWF0ZSgpLnNldFR5cGUoaXQtPmtleSkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0Q291
bnQoaXQtPnZhbHVlKTsKICAgICAgICAgICAgIGxpc3RlbmVyU3RhdHMtPmFkZEl0ZW0obGlzdGVu
ZXJDb3VudCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGxpc3RlbmVyU3RhdHMucmVsZWFz
ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VB
Z2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNw
cAppbmRleCBjNmIwNmJmYTY0ZTA4ZjVlODIzM2NmZTBhOTA4ZDk0MzQ2ZWM5ZWFjLi4xM2FjN2U5
ZTQ4ZjJjNGMwZDA0ZjYwNzRhMWQxOWRkOGQxZDM0YmVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcApAQCAtNDYwLDcgKzQ2MCw3IEBAIHN0
YXRpYyBWZWN0b3I8Q2FjaGVkUmVzb3VyY2UqPiBjYWNoZWRSZXNvdXJjZXNGb3JGcmFtZShGcmFt
ZSogZnJhbWUpCiAgICAgY29uc3QgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OkRvY3VtZW50UmVzb3Vy
Y2VNYXAmIGFsbFJlc291cmNlcyA9IGZyYW1lLT5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxv
YWRlcigpLT5hbGxDYWNoZWRSZXNvdXJjZXMoKTsKICAgICBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6
RG9jdW1lbnRSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gYWxsUmVzb3VyY2VzLmVu
ZCgpOwogICAgIGZvciAoQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OkRvY3VtZW50UmVzb3VyY2VNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYWxsUmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgewotICAgICAgICBDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UgPSBpdC0+c2Vjb25k
LmdldCgpOworICAgICAgICBDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UgPSBpdC0+dmFs
dWUuZ2V0KCk7CiAKICAgICAgICAgc3dpdGNoIChjYWNoZWRSZXNvdXJjZS0+dHlwZSgpKSB7CiAg
ICAgICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3VyY2U6CkBAIC03NjQsNyArNzY0
LDcgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRpZENsZWFyV2luZG93T2JqZWN0SW5Xb3Js
ZChGcmFtZSogZnJhbWUsIERPTVdyYXBwZXJXb3IKICAgICAgICAgSW5zcGVjdG9yT2JqZWN0Ojpj
b25zdF9pdGVyYXRvciBlbmQgPSBzY3JpcHRzLT5lbmQoKTsKICAgICAgICAgZm9yIChJbnNwZWN0
b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gc2NyaXB0cy0+YmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7CiAgICAgICAgICAgICBTdHJpbmcgc2NyaXB0VGV4dDsKLSAgICAgICAgICAgIGlm
IChpdC0+c2Vjb25kLT5hc1N0cmluZygmc2NyaXB0VGV4dCkpCisgICAgICAgICAgICBpZiAoaXQt
PnZhbHVlLT5hc1N0cmluZygmc2NyaXB0VGV4dCkpCiAgICAgICAgICAgICAgICAgbV9pbmplY3Rl
ZFNjcmlwdE1hbmFnZXItPmluamVjdFNjcmlwdChzY3JpcHRUZXh0LCBtYWluV29ybGRTY3JpcHRT
dGF0ZShmcmFtZSkpOwogICAgICAgICB9CiAgICAgfQpAQCAtNzk2LDggKzc5Niw4IEBAIHZvaWQg
SW5zcGVjdG9yUGFnZUFnZW50OjpmcmFtZURldGFjaGVkKEZyYW1lKiBmcmFtZSkKIHsKICAgICBI
YXNoTWFwPEZyYW1lKiwgU3RyaW5nPjo6aXRlcmF0b3IgaXRlcmF0b3IgPSBtX2ZyYW1lVG9JZGVu
dGlmaWVyLmZpbmQoZnJhbWUpOwogICAgIGlmIChpdGVyYXRvciAhPSBtX2ZyYW1lVG9JZGVudGlm
aWVyLmVuZCgpKSB7Ci0gICAgICAgIG1fZnJvbnRlbmQtPmZyYW1lRGV0YWNoZWQoaXRlcmF0b3It
PnNlY29uZCk7Ci0gICAgICAgIG1faWRlbnRpZmllclRvRnJhbWUucmVtb3ZlKGl0ZXJhdG9yLT5z
ZWNvbmQpOworICAgICAgICBtX2Zyb250ZW5kLT5mcmFtZURldGFjaGVkKGl0ZXJhdG9yLT52YWx1
ZSk7CisgICAgICAgIG1faWRlbnRpZmllclRvRnJhbWUucmVtb3ZlKGl0ZXJhdG9yLT52YWx1ZSk7
CiAgICAgICAgIG1fZnJhbWVUb0lkZW50aWZpZXIucmVtb3ZlKGl0ZXJhdG9yKTsKICAgICB9CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJB
Z2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2Vu
dC5jcHAKaW5kZXggNDJjZGU4NWJiYWMxYTZhMmQ2ZDdlOTBlODExN2RiMGU4YmUxMjJhNS4uOTk3
YTU4ZTk5M2YyMzIyNzE1NDYxMjBkN2Q0MjI5ODUxOWRmNGNiZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcApAQCAtMjQ5LDEw
ICsyNDksMTAgQEAgdm9pZCBJbnNwZWN0b3JQcm9maWxlckFnZW50OjpnZXRQcm9maWxlSGVhZGVy
cyhFcnJvclN0cmluZyosIFJlZlB0cjxUeXBlQnVpbGRlcjoKIAogICAgIFByb2ZpbGVzTWFwOjpp
dGVyYXRvciBwcm9maWxlc0VuZCA9IG1fcHJvZmlsZXMuZW5kKCk7CiAgICAgZm9yIChQcm9maWxl
c01hcDo6aXRlcmF0b3IgaXQgPSBtX3Byb2ZpbGVzLmJlZ2luKCk7IGl0ICE9IHByb2ZpbGVzRW5k
OyArK2l0KQotICAgICAgICBoZWFkZXJzLT5hZGRJdGVtKGNyZWF0ZVByb2ZpbGVIZWFkZXIoKml0
LT5zZWNvbmQpKTsKKyAgICAgICAgaGVhZGVycy0+YWRkSXRlbShjcmVhdGVQcm9maWxlSGVhZGVy
KCppdC0+dmFsdWUpKTsKICAgICBIZWFwU25hcHNob3RzTWFwOjppdGVyYXRvciBzbmFwc2hvdHNF
bmQgPSBtX3NuYXBzaG90cy5lbmQoKTsKICAgICBmb3IgKEhlYXBTbmFwc2hvdHNNYXA6Oml0ZXJh
dG9yIGl0ID0gbV9zbmFwc2hvdHMuYmVnaW4oKTsgaXQgIT0gc25hcHNob3RzRW5kOyArK2l0KQot
ICAgICAgICBoZWFkZXJzLT5hZGRJdGVtKGNyZWF0ZVNuYXBzaG90SGVhZGVyKCppdC0+c2Vjb25k
KSk7CisgICAgICAgIGhlYWRlcnMtPmFkZEl0ZW0oY3JlYXRlU25hcHNob3RIZWFkZXIoKml0LT52
YWx1ZSkpOwogfQogCiBuYW1lc3BhY2UgewpAQCAtMjgwLDE2ICsyODAsMTYgQEAgdm9pZCBJbnNw
ZWN0b3JQcm9maWxlckFnZW50OjpnZXRQcm9maWxlKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywg
Y29uc3QgU3RyaW5nJgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIHBy
b2ZpbGVPYmplY3QgPSBUeXBlQnVpbGRlcjo6UHJvZmlsZXI6OlByb2ZpbGU6OmNyZWF0ZSgpOwot
ICAgICAgICBwcm9maWxlT2JqZWN0LT5zZXRIZWFkKGl0LT5zZWNvbmQtPmJ1aWxkSW5zcGVjdG9y
T2JqZWN0Rm9ySGVhZCgpKTsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQtPmJvdHRvbVVwSGVhZCgp
KQotICAgICAgICAgICAgcHJvZmlsZU9iamVjdC0+c2V0Qm90dG9tVXBIZWFkKGl0LT5zZWNvbmQt
PmJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9yQm90dG9tVXBIZWFkKCkpOworICAgICAgICBwcm9maWxl
T2JqZWN0LT5zZXRIZWFkKGl0LT52YWx1ZS0+YnVpbGRJbnNwZWN0b3JPYmplY3RGb3JIZWFkKCkp
OworICAgICAgICBpZiAoaXQtPnZhbHVlLT5ib3R0b21VcEhlYWQoKSkKKyAgICAgICAgICAgIHBy
b2ZpbGVPYmplY3QtPnNldEJvdHRvbVVwSGVhZChpdC0+dmFsdWUtPmJ1aWxkSW5zcGVjdG9yT2Jq
ZWN0Rm9yQm90dG9tVXBIZWFkKCkpOwogICAgIH0gZWxzZSBpZiAodHlwZSA9PSBIZWFwUHJvZmls
ZVR5cGUpIHsKICAgICAgICAgSGVhcFNuYXBzaG90c01hcDo6aXRlcmF0b3IgaXQgPSBtX3NuYXBz
aG90cy5maW5kKHVpZCk7CiAgICAgICAgIGlmIChpdCA9PSBtX3NuYXBzaG90cy5lbmQoKSkgewog
ICAgICAgICAgICAgKmVycm9yU3RyaW5nID0gIlByb2ZpbGUgd2Fzbid0IGZvdW5kIjsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBSZWZQdHI8U2NyaXB0SGVhcFNuYXBz
aG90PiBzbmFwc2hvdCA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFJlZlB0cjxTY3JpcHRIZWFwU25h
cHNob3Q+IHNuYXBzaG90ID0gaXQtPnZhbHVlOwogICAgICAgICBwcm9maWxlT2JqZWN0ID0gVHlw
ZUJ1aWxkZXI6OlByb2ZpbGVyOjpQcm9maWxlOjpjcmVhdGUoKTsKICAgICAgICAgaWYgKG1fZnJv
bnRlbmQpIHsKICAgICAgICAgICAgIE91dHB1dFN0cmVhbSBzdHJlYW0obV9mcm9udGVuZCwgdWlk
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJj
ZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFn
ZW50LmNwcAppbmRleCA5ZDkyOWM5YTEwYmVkMzRjMjljMjg5NDgxYWIwYTRhNWE2Mjg2OTE0Li45
NjA4MTEyMWI1NDAzNjI5NjE2ZTdiNWQ0ZGI2NWIyNTlkOTViNTIwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuY3BwCkBAIC0xMDMs
NyArMTAzLDcgQEAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVj
dEZvckhlYWRlcnMoY29uc3QgSFRUUEhlYWRlck1hcCYgaGUKICAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBoZWFkZXJzT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBI
VFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBoZWFkZXJzLmVuZCgpOwogICAgIGZv
ciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBoZWFkZXJzLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaGVhZGVyc09iamVjdC0+c2V0U3RyaW5nKGl0LT5maXJz
dC5zdHJpbmcoKSwgaXQtPnNlY29uZCk7CisgICAgICAgIGhlYWRlcnNPYmplY3QtPnNldFN0cmlu
ZyhpdC0+a2V5LnN0cmluZygpLCBpdC0+dmFsdWUpOwogICAgIHJldHVybiBoZWFkZXJzT2JqZWN0
OwogfQogCkBAIC0yMTQsOCArMjE0LDggQEAgdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50Ojp3
aWxsU2VuZFJlcXVlc3QodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBEb2N1bWVudEwKICAgICAg
ICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBoZWFkZXJzLT5lbmQoKTsK
ICAgICAgICAgZm9yIChJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaGVhZGVy
cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBTdHJpbmcgdmFsdWU7
Ci0gICAgICAgICAgICBpZiAoaXQtPnNlY29uZC0+YXNTdHJpbmcoJnZhbHVlKSkKLSAgICAgICAg
ICAgICAgICByZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZChpdC0+Zmlyc3QsIHZhbHVlKTsKKyAg
ICAgICAgICAgIGlmIChpdC0+dmFsdWUtPmFzU3RyaW5nKCZ2YWx1ZSkpCisgICAgICAgICAgICAg
ICAgcmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoaXQtPmtleSwgdmFsdWUpOwogICAgICAgICB9
CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
U3RhdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmNwcApp
bmRleCA3MGEyNDM5ODQ3YzQ1N2MzOGEzOTBhMzMwMDRhM2Q5ZTFiMWRiNDFkLi5iYWYxMGM5NzFl
MTE5NTMyNTc2YmY0OTQ1NTIyZjM3YjA4MzI1YWZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JTdGF0ZS5jcHAKQEAgLTgwLDcgKzgwLDcgQEAgYm9vbCBJbnNwZWN0b3JT
dGF0ZTo6Z2V0Qm9vbGVhbihjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSkKICAgICBJbnNwZWN0
b3JPYmplY3Q6Oml0ZXJhdG9yIGl0ID0gbV9wcm9wZXJ0aWVzLT5maW5kKHByb3BlcnR5TmFtZSk7
CiAgICAgYm9vbCB2YWx1ZSA9IGZhbHNlOwogICAgIGlmIChpdCAhPSBtX3Byb3BlcnRpZXMtPmVu
ZCgpKQotICAgICAgICBpdC0+c2Vjb25kLT5hc0Jvb2xlYW4oJnZhbHVlKTsKKyAgICAgICAgaXQt
PnZhbHVlLT5hc0Jvb2xlYW4oJnZhbHVlKTsKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKQEAgLTg5
LDcgKzg5LDcgQEAgU3RyaW5nIEluc3BlY3RvclN0YXRlOjpnZXRTdHJpbmcoY29uc3QgU3RyaW5n
JiBwcm9wZXJ0eU5hbWUpCiAgICAgSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciBpdCA9IG1fcHJv
cGVydGllcy0+ZmluZChwcm9wZXJ0eU5hbWUpOwogICAgIFN0cmluZyB2YWx1ZTsKICAgICBpZiAo
aXQgIT0gbV9wcm9wZXJ0aWVzLT5lbmQoKSkKLSAgICAgICAgaXQtPnNlY29uZC0+YXNTdHJpbmco
JnZhbHVlKTsKKyAgICAgICAgaXQtPnZhbHVlLT5hc1N0cmluZygmdmFsdWUpOwogICAgIHJldHVy
biB2YWx1ZTsKIH0KIApAQCAtOTgsNyArOTgsNyBAQCBsb25nIEluc3BlY3RvclN0YXRlOjpnZXRM
b25nKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKQogICAgIEluc3BlY3Rvck9iamVjdDo6aXRl
cmF0b3IgaXQgPSBtX3Byb3BlcnRpZXMtPmZpbmQocHJvcGVydHlOYW1lKTsKICAgICBsb25nIHZh
bHVlID0gMDsKICAgICBpZiAoaXQgIT0gbV9wcm9wZXJ0aWVzLT5lbmQoKSkKLSAgICAgICAgaXQt
PnNlY29uZC0+YXNOdW1iZXIoJnZhbHVlKTsKKyAgICAgICAgaXQtPnZhbHVlLT5hc051bWJlcigm
dmFsdWUpOwogICAgIHJldHVybiB2YWx1ZTsKIH0KIApAQCAtMTA3LDcgKzEwNyw3IEBAIGRvdWJs
ZSBJbnNwZWN0b3JTdGF0ZTo6Z2V0RG91YmxlKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKQog
ICAgIEluc3BlY3Rvck9iamVjdDo6aXRlcmF0b3IgaXQgPSBtX3Byb3BlcnRpZXMtPmZpbmQocHJv
cGVydHlOYW1lKTsKICAgICBkb3VibGUgdmFsdWUgPSAwOwogICAgIGlmIChpdCAhPSBtX3Byb3Bl
cnRpZXMtPmVuZCgpKQotICAgICAgICBpdC0+c2Vjb25kLT5hc051bWJlcigmdmFsdWUpOworICAg
ICAgICBpdC0+dmFsdWUtPmFzTnVtYmVyKCZ2YWx1ZSk7CiAgICAgcmV0dXJuIHZhbHVlOwogfQog
CkBAIC0xMTgsNyArMTE4LDcgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3Rv
clN0YXRlOjpnZXRPYmplY3QoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUKICAgICAgICAgbV9w
cm9wZXJ0aWVzLT5zZXRPYmplY3QocHJvcGVydHlOYW1lLCBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpKTsKICAgICAgICAgaXQgPSBtX3Byb3BlcnRpZXMtPmZpbmQocHJvcGVydHlOYW1lKTsKICAg
ICB9Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQtPmFzT2JqZWN0KCk7CisgICAgcmV0dXJuIGl0LT52
YWx1ZS0+YXNPYmplY3QoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCmluZGV4IDgzYjQw
MmQ2ZWE5MzlmNGYzZTVlN2ViNDlkODBlMzBkYTc0NzFmZjcuLjIzNDBjMWRiNTM1OGQ2YWE5YzMx
MGNlN2Y3ZmQ4YjYzYTQ0OTM4MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKQEAgLTUzNSw3ICs1MzUsNyBAQCBQYXNzUmVmUHRyPFR5
cGVCdWlsZGVyOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JTdHlsZTo6c3R5bGVXaXRoUHJvcGVy
dGllcygpIGNvbgogICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkSW5hY3RpdmF0ZSA9IHRy
dWU7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBwcmV2aW91c1BhcnNlZE9rOwotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzdWNj
ZXNzID0gYWN0aXZlSXQtPnNlY29uZC0+Z2V0Qm9vbGVhbihUeXBlQnVpbGRlcjo6Q1NTOjpDU1NQ
cm9wZXJ0eTo6UGFyc2VkT2ssICZwcmV2aW91c1BhcnNlZE9rKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgc3VjY2VzcyA9IGFjdGl2ZUl0LT52YWx1ZS0+Z2V0Qm9vbGVhbihUeXBlQnVp
bGRlcjo6Q1NTOjpDU1NQcm9wZXJ0eTo6UGFyc2VkT2ssICZwcmV2aW91c1BhcnNlZE9rKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWNjZXNzICYmICFwcmV2aW91c1BhcnNlZE9rKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZEluYWN0aXZhdGUgPSB0cnVlOwogICAg
ICAgICAgICAgICAgICAgICB9CkBAIC01NDMsNyArNTQzLDcgQEAgUGFzc1JlZlB0cjxUeXBlQnVp
bGRlcjo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yU3R5bGU6OnN0eWxlV2l0aFByb3BlcnRpZXMo
KSBjb24KICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lVG9QcmV2aW91c0FjdGl2ZVBy
b3BlcnR5LnNldChjYW5vbmljYWxQcm9wZXJ0eU5hbWUsIHByb3BlcnR5KTsKIAogICAgICAgICAg
ICAgICAgIGlmIChzaG91bGRJbmFjdGl2YXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFjdGl2
ZUl0LT5zZWNvbmQtPnNldFN0YXR1cyhUeXBlQnVpbGRlcjo6Q1NTOjpDU1NQcm9wZXJ0eTo6U3Rh
dHVzOjpJbmFjdGl2ZSk7CisgICAgICAgICAgICAgICAgICAgIGFjdGl2ZUl0LT52YWx1ZS0+c2V0
U3RhdHVzKFR5cGVCdWlsZGVyOjpDU1M6OkNTU1Byb3BlcnR5OjpTdGF0dXM6OkluYWN0aXZlKTsK
ICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5
LnNldChjYW5vbmljYWxQcm9wZXJ0eU5hbWUsIHByb3BlcnR5KTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtMTAzNSw3ICsxMDM1LDcgQEAgUGFzc1JlZlB0cjxJ
bnNwZWN0b3JTdHlsZT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6aW5zcGVjdG9yU3R5bGVGb3JJZChj
b25zdCBJbnNwZWMKICAgICAgICAgUmVmUHRyPEluc3BlY3RvclN0eWxlPiBpbnNwZWN0b3JTdHls
ZSA9IEluc3BlY3RvclN0eWxlOjpjcmVhdGUoaWQsIHN0eWxlLCB0aGlzKTsKICAgICAgICAgcmV0
dXJuIGluc3BlY3RvclN0eWxlLnJlbGVhc2UoKTsKICAgICB9Ci0gICAgcmV0dXJuIGl0LT5zZWNv
bmQ7CisgICAgcmV0dXJuIGl0LT52YWx1ZTsKIH0KIAogdm9pZCBJbnNwZWN0b3JTdHlsZVNoZWV0
OjpyZW1lbWJlckluc3BlY3RvclN0eWxlKFJlZlB0cjxJbnNwZWN0b3JTdHlsZT4gaW5zcGVjdG9y
U3R5bGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFs
dWVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwCmlu
ZGV4IGU0ZWFkMTdlNTI4NjY4ZDllNTA1YmZkY2IxMDMwZTdiNTBmYjc3NzcuLmFkYTI2MTdjYzBj
NGJlYTBhOWYxOTlmMjU5NzcxNGQyNjkwYjA2ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwCkBAIC03MTcsNyArNzE3LDcgQEAgUGFzc1JlZlB0cjxJ
bnNwZWN0b3JWYWx1ZT4gSW5zcGVjdG9yT2JqZWN0QmFzZTo6Z2V0KGNvbnN0IFN0cmluZyYgbmFt
ZSkgY29uc3QKICAgICBEaWN0aW9uYXJ5Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fZGF0YS5maW5k
KG5hbWUpOwogICAgIGlmIChpdCA9PSBtX2RhdGEuZW5kKCkpCiAgICAgICAgIHJldHVybiAwOwot
ICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgIHJldHVybiBpdC0+dmFsdWU7CiB9CiAKIHZvaWQg
SW5zcGVjdG9yT2JqZWN0QmFzZTo6cmVtb3ZlKGNvbnN0IFN0cmluZyYgbmFtZSkKQEAgLTczOSw5
ICs3MzksOSBAQCB2b2lkIEluc3BlY3Rvck9iamVjdEJhc2U6OndyaXRlSlNPTihTdHJpbmdCdWls
ZGVyKiBvdXRwdXQpIGNvbnN0CiAgICAgICAgIEFTU0VSVChpdCAhPSBtX2RhdGEuZW5kKCkpOwog
ICAgICAgICBpZiAoaSkKICAgICAgICAgICAgIG91dHB1dC0+YXBwZW5kKCcsJyk7Ci0gICAgICAg
IGRvdWJsZVF1b3RlU3RyaW5nKGl0LT5maXJzdCwgb3V0cHV0KTsKKyAgICAgICAgZG91YmxlUXVv
dGVTdHJpbmcoaXQtPmtleSwgb3V0cHV0KTsKICAgICAgICAgb3V0cHV0LT5hcHBlbmQoJzonKTsK
LSAgICAgICAgaXQtPnNlY29uZC0+d3JpdGVKU09OKG91dHB1dCk7CisgICAgICAgIGl0LT52YWx1
ZS0+d3JpdGVKU09OKG91dHB1dCk7CiAgICAgfQogICAgIG91dHB1dC0+YXBwZW5kKCd9Jyk7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yV29ya2VyQWdl
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvcldvcmtlckFnZW50LmNw
cAppbmRleCAyNGJlZWI1N2QwNzdmMzIwOTcyNjA0NzgzMTc4MjU0MGJiYzEzMjcwLi45ZmM2MWRi
N2E3OWRiYTI0MGQ2NzNmMTg0NzlhYzRkNmQ0Mzc2MmQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yV29ya2VyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JXb3JrZXJBZ2VudC5jcHAKQEAgLTIwNCw5ICsyMDQsOSBA
QCB2b2lkIEluc3BlY3RvcldvcmtlckFnZW50Ojp3b3JrZXJDb250ZXh0VGVybWluYXRlZChXb3Jr
ZXJDb250ZXh0UHJveHkqIHByb3h5KQogewogICAgIG1fZGVkaWNhdGVkV29ya2Vycy5yZW1vdmUo
cHJveHkpOwogICAgIGZvciAoV29ya2VyQ2hhbm5lbHM6Oml0ZXJhdG9yIGl0ID0gbV9pZFRvQ2hh
bm5lbC5iZWdpbigpOyBpdCAhPSBtX2lkVG9DaGFubmVsLmVuZCgpOyArK2l0KSB7Ci0gICAgICAg
IGlmIChwcm94eSA9PSBpdC0+c2Vjb25kLT5wcm94eSgpKSB7Ci0gICAgICAgICAgICBtX2luc3Bl
Y3RvckZyb250ZW5kLT53b3JrZXIoKS0+d29ya2VyVGVybWluYXRlZChpdC0+Zmlyc3QpOwotICAg
ICAgICAgICAgZGVsZXRlIGl0LT5zZWNvbmQ7CisgICAgICAgIGlmIChwcm94eSA9PSBpdC0+dmFs
dWUtPnByb3h5KCkpIHsKKyAgICAgICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmQtPndvcmtlcigp
LT53b3JrZXJUZXJtaW5hdGVkKGl0LT5rZXkpOworICAgICAgICAgICAgZGVsZXRlIGl0LT52YWx1
ZTsKICAgICAgICAgICAgIG1faWRUb0NoYW5uZWwucmVtb3ZlKGl0KTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQpAQCAtMjE2LDE0ICsyMTYsMTQgQEAgdm9pZCBJbnNwZWN0b3JXb3Jr
ZXJBZ2VudDo6d29ya2VyQ29udGV4dFRlcm1pbmF0ZWQoV29ya2VyQ29udGV4dFByb3h5KiBwcm94
eSkKIHZvaWQgSW5zcGVjdG9yV29ya2VyQWdlbnQ6OmNyZWF0ZVdvcmtlckZyb250ZW5kQ2hhbm5l
bHNGb3JFeGlzdGluZ1dvcmtlcnMoKQogewogICAgIGZvciAoRGVkaWNhdGVkV29ya2Vyczo6aXRl
cmF0b3IgaXQgPSBtX2RlZGljYXRlZFdvcmtlcnMuYmVnaW4oKTsgaXQgIT0gbV9kZWRpY2F0ZWRX
b3JrZXJzLmVuZCgpOyArK2l0KQotICAgICAgICBjcmVhdGVXb3JrZXJGcm9udGVuZENoYW5uZWwo
aXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsKKyAgICAgICAgY3JlYXRlV29ya2VyRnJvbnRlbmRDaGFu
bmVsKGl0LT5rZXksIGl0LT52YWx1ZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yV29ya2VyQWdlbnQ6
OmRlc3Ryb3lXb3JrZXJGcm9udGVuZENoYW5uZWxzKCkKIHsKICAgICBmb3IgKFdvcmtlckNoYW5u
ZWxzOjppdGVyYXRvciBpdCA9IG1faWRUb0NoYW5uZWwuYmVnaW4oKTsgaXQgIT0gbV9pZFRvQ2hh
bm5lbC5lbmQoKTsgKytpdCkgewotICAgICAgICBpdC0+c2Vjb25kLT5kaXNjb25uZWN0RnJvbVdv
cmtlckNvbnRleHQoKTsKLSAgICAgICAgZGVsZXRlIGl0LT5zZWNvbmQ7CisgICAgICAgIGl0LT52
YWx1ZS0+ZGlzY29ubmVjdEZyb21Xb3JrZXJDb250ZXh0KCk7CisgICAgICAgIGRlbGV0ZSBpdC0+
dmFsdWU7CiAgICAgfQogICAgIG1faWRUb0NoYW5uZWwuY2xlYXIoKTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0YS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvTmV0d29ya1Jlc291cmNlc0RhdGEuY3BwCmluZGV4IGUwNWQx
M2RlY2IzODE4ZmNmMWJiODMzMjgzNTlkZWFmYjI5NWRmYWMuLjU5MjMzMDIzMTcxNjU2NTNkOWM1
OTk2NTkzYTBjNWIxYWUxOTczZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9OZXR3b3JrUmVzb3VyY2VzRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L05ldHdvcmtSZXNvdXJjZXNEYXRhLmNwcApAQCAtMjU5LDEwICsyNTksMTAgQEAgVmVjdG9yPFN0
cmluZz4gTmV0d29ya1Jlc291cmNlc0RhdGE6OnJlbW92ZUNhY2hlZFJlc291cmNlKENhY2hlZFJl
c291cmNlKiBjYWNoZWQKICAgICBSZXNvdXJjZURhdGFNYXA6Oml0ZXJhdG9yIGl0OwogICAgIFJl
c291cmNlRGF0YU1hcDo6aXRlcmF0b3IgZW5kID0gbV9yZXF1ZXN0SWRUb1Jlc291cmNlRGF0YU1h
cC5lbmQoKTsKICAgICBmb3IgKGl0ID0gbV9yZXF1ZXN0SWRUb1Jlc291cmNlRGF0YU1hcC5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgUmVzb3VyY2VEYXRhKiByZXNvdXJjZURh
dGEgPSBpdC0+c2Vjb25kOworICAgICAgICBSZXNvdXJjZURhdGEqIHJlc291cmNlRGF0YSA9IGl0
LT52YWx1ZTsKICAgICAgICAgaWYgKHJlc291cmNlRGF0YS0+Y2FjaGVkUmVzb3VyY2UoKSA9PSBj
YWNoZWRSZXNvdXJjZSkgewogICAgICAgICAgICAgcmVzb3VyY2VEYXRhLT5zZXRDYWNoZWRSZXNv
dXJjZSgwKTsKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQoaXQtPmtleSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTI3OSw5
ICsyNzksOSBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZXNEYXRhOjpjbGVhcihjb25zdCBTdHJpbmcm
IHByZXNlcnZlZExvYWRlcklkKQogICAgIFJlc291cmNlRGF0YU1hcDo6aXRlcmF0b3IgaXQ7CiAg
ICAgUmVzb3VyY2VEYXRhTWFwOjppdGVyYXRvciBlbmQgPSBtX3JlcXVlc3RJZFRvUmVzb3VyY2VE
YXRhTWFwLmVuZCgpOwogICAgIGZvciAoaXQgPSBtX3JlcXVlc3RJZFRvUmVzb3VyY2VEYXRhTWFw
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBSZXNvdXJjZURhdGEqIHJlc291
cmNlRGF0YSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFJlc291cmNlRGF0YSogcmVzb3VyY2VEYXRh
ID0gaXQtPnZhbHVlOwogICAgICAgICBpZiAoIXByZXNlcnZlZExvYWRlcklkLmlzTnVsbCgpICYm
IHJlc291cmNlRGF0YS0+bG9hZGVySWQoKSA9PSBwcmVzZXJ2ZWRMb2FkZXJJZCkKLSAgICAgICAg
ICAgIHByZXNlcnZlZE1hcC5zZXQoaXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsKKyAgICAgICAgICAg
IHByZXNlcnZlZE1hcC5zZXQoaXQtPmtleSwgaXQtPnZhbHVlKTsKICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgZGVsZXRlIHJlc291cmNlRGF0YTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9Dcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuY3BwCmluZGV4IGFiYTJiYTA2M2U1
OTMwOGZhZWM0NGJmYzc4ZGZhZjhkOWI4NDVhMGIuLjliMjZmYzg2YzkwNDM5Mzk1MTVmMTBhZTY5
ZWJiNjU1MzBjMGI0MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09y
aWdpbkFjY2Vzc0NvbnRyb2wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09y
aWdpbkFjY2Vzc0NvbnRyb2wuY3BwCkBAIC02OCw3ICs2OCw3IEBAIGJvb2wgaXNTaW1wbGVDcm9z
c09yaWdpbkFjY2Vzc1JlcXVlc3QoY29uc3QgU3RyaW5nJiBtZXRob2QsIGNvbnN0IEhUVFBIZWFk
ZXJNYXAmCiAKICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBoZWFkZXJN
YXAuZW5kKCk7CiAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGhl
YWRlck1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKCFpc09uQWNj
ZXNzQ29udHJvbFNpbXBsZVJlcXVlc3RIZWFkZXJXaGl0ZWxpc3QoaXQtPmZpcnN0LCBpdC0+c2Vj
b25kKSkKKyAgICAgICAgaWYgKCFpc09uQWNjZXNzQ29udHJvbFNpbXBsZVJlcXVlc3RIZWFkZXJX
aGl0ZWxpc3QoaXQtPmtleSwgaXQtPnZhbHVlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAKQEAgLTExNiwxNCArMTE2LDE0IEBAIFJlc291cmNlUmVxdWVzdCBjcmVhdGVBY2Nl
c3NDb250cm9sUHJlZmxpZ2h0UmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlCiAg
ICAgaWYgKHJlcXVlc3RIZWFkZXJGaWVsZHMuc2l6ZSgpID4gMCkgewogICAgICAgICBTdHJpbmdC
dWlsZGVyIGhlYWRlckJ1ZmZlcjsKICAgICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSByZXF1ZXN0SGVhZGVyRmllbGRzLmJlZ2luKCk7Ci0gICAgICAgIGhlYWRlckJ1ZmZl
ci5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgaGVhZGVyQnVmZmVyLmFwcGVuZChpdC0+a2V5
KTsKICAgICAgICAgKytpdDsKIAogICAgICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRv
ciBlbmQgPSByZXF1ZXN0SGVhZGVyRmllbGRzLmVuZCgpOwogICAgICAgICBmb3IgKDsgaXQgIT0g
ZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBoZWFkZXJCdWZmZXIuYXBwZW5kKCcsJyk7CiAgICAg
ICAgICAgICBoZWFkZXJCdWZmZXIuYXBwZW5kKCcgJyk7Ci0gICAgICAgICAgICBoZWFkZXJCdWZm
ZXIuYXBwZW5kKGl0LT5maXJzdCk7CisgICAgICAgICAgICBoZWFkZXJCdWZmZXIuYXBwZW5kKGl0
LT5rZXkpOwogICAgICAgICB9CiAKICAgICAgICAgcHJlZmxpZ2h0UmVxdWVzdC5zZXRIVFRQSGVh
ZGVyRmllbGQoIkFjY2Vzcy1Db250cm9sLVJlcXVlc3QtSGVhZGVycyIsIGhlYWRlckJ1ZmZlci50
b1N0cmluZygpLmxvd2VyKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Ny
b3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVy
L0Nyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUuY3BwCmluZGV4IDA0ZDU4ODE1NWNlNTUz
M2JkZGQzZjAyYjNiZDgxNWVkOWVlMzk5ZWIuLjlkNTFjODdmZTZjNGU3ZDQzOTMzZTQ1ZWVmN2Q1
YzE5YmQ1ZTIwODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdp
blByZWZsaWdodFJlc3VsdENhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jv
c3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5jcHAKQEAgLTEyNSw4ICsxMjUsOCBAQCBib29s
IENyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGVJdGVtOjphbGxvd3NDcm9zc09yaWdpbkhl
YWRlcnMoY29uc3QgSFRUUEhlYQogewogICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IHJlcXVlc3RIZWFkZXJzLmVuZCgpOwogICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSByZXF1ZXN0SGVhZGVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKLSAgICAgICAgaWYgKCFtX2hlYWRlcnMuY29udGFpbnMoaXQtPmZpcnN0KSAmJiAhaXNPbkFj
Y2Vzc0NvbnRyb2xTaW1wbGVSZXF1ZXN0SGVhZGVyV2hpdGVsaXN0KGl0LT5maXJzdCwgaXQtPnNl
Y29uZCkpIHsKLSAgICAgICAgICAgIGVycm9yRGVzY3JpcHRpb24gPSAiUmVxdWVzdCBoZWFkZXIg
ZmllbGQgIiArIGl0LT5maXJzdC5zdHJpbmcoKSArICIgaXMgbm90IGFsbG93ZWQgYnkgQWNjZXNz
LUNvbnRyb2wtQWxsb3ctSGVhZGVycy4iOworICAgICAgICBpZiAoIW1faGVhZGVycy5jb250YWlu
cyhpdC0+a2V5KSAmJiAhaXNPbkFjY2Vzc0NvbnRyb2xTaW1wbGVSZXF1ZXN0SGVhZGVyV2hpdGVs
aXN0KGl0LT5rZXksIGl0LT52YWx1ZSkpIHsKKyAgICAgICAgICAgIGVycm9yRGVzY3JpcHRpb24g
PSAiUmVxdWVzdCBoZWFkZXIgZmllbGQgIiArIGl0LT5rZXkuc3RyaW5nKCkgKyAiIGlzIG5vdCBh
bGxvd2VkIGJ5IEFjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnMuIjsKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KQEAgLTE2Nyw3ICsxNjcsNyBAQCBib29sIENy
b3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGU6OmNhblNraXBQcmVmbGlnaHQoY29uc3QgU3Ry
aW5nJiBvcmlnaW4sIGNvbgogICAgIGlmIChjYWNoZUl0ID09IG1fcHJlZmxpZ2h0SGFzaE1hcC5l
bmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGNhY2hlSXQtPnNlY29uZC0+
YWxsb3dzUmVxdWVzdChpbmNsdWRlQ3JlZGVudGlhbHMsIG1ldGhvZCwgcmVxdWVzdEhlYWRlcnMp
KQorICAgIGlmIChjYWNoZUl0LT52YWx1ZS0+YWxsb3dzUmVxdWVzdChpbmNsdWRlQ3JlZGVudGlh
bHMsIG1ldGhvZCwgcmVxdWVzdEhlYWRlcnMpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAg
IG1fcHJlZmxpZ2h0SGFzaE1hcC5yZW1vdmUoY2FjaGVJdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVy
L0RvY3VtZW50TG9hZGVyLmNwcAppbmRleCBlYTY5YmY1MmY4ODMzNzU5ZmI5ODgyY2M2NzhjMjAy
OTc0ZDk5MzQ4Li4xMzkyYTI1MDY4YWVhNGI1NDVjM2I2OWMzOGNhOGJjNjQyMTUzZTg0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAKQEAgLTYxNSw3ICs2MTUsNyBA
QCB2b2lkIERvY3VtZW50TG9hZGVyOjpnZXRTdWJyZXNvdXJjZXMoVmVjdG9yPFBhc3NSZWZQdHI8
QXJjaGl2ZVJlc291cmNlPiA+JiBzdWJyZQogICAgIGNvbnN0IENhY2hlZFJlc291cmNlTG9hZGVy
OjpEb2N1bWVudFJlc291cmNlTWFwJiBhbGxSZXNvdXJjZXMgPSBkb2N1bWVudC0+Y2FjaGVkUmVz
b3VyY2VMb2FkZXIoKS0+YWxsQ2FjaGVkUmVzb3VyY2VzKCk7CiAgICAgQ2FjaGVkUmVzb3VyY2VM
b2FkZXI6OkRvY3VtZW50UmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGFsbFJlc291
cmNlcy5lbmQoKTsKICAgICBmb3IgKENhY2hlZFJlc291cmNlTG9hZGVyOjpEb2N1bWVudFJlc291
cmNlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGFsbFJlc291cmNlcy5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKLSAgICAgICAgUmVmUHRyPEFyY2hpdmVSZXNvdXJjZT4gc3VicmVzb3VyY2Ug
PSB0aGlzLT5zdWJyZXNvdXJjZShLVVJMKFBhcnNlZFVSTFN0cmluZywgaXQtPnNlY29uZC0+dXJs
KCkpKTsKKyAgICAgICAgUmVmUHRyPEFyY2hpdmVSZXNvdXJjZT4gc3VicmVzb3VyY2UgPSB0aGlz
LT5zdWJyZXNvdXJjZShLVVJMKFBhcnNlZFVSTFN0cmluZywgaXQtPnZhbHVlLT51cmwoKSkpOwog
ICAgICAgICBpZiAoc3VicmVzb3VyY2UpCiAgICAgICAgICAgICBzdWJyZXNvdXJjZXMuYXBwZW5k
KHN1YnJlc291cmNlLnJlbGVhc2UoKSk7CiAgICAgfQpAQCAtNjQ3LDggKzY0Nyw4IEBAIHZvaWQg
RG9jdW1lbnRMb2FkZXI6OnN1YnN0aXR1dGVSZXNvdXJjZURlbGl2ZXJ5VGltZXJGaXJlZChUaW1l
cjxEb2N1bWVudExvYWRlcj4qCiAKICAgICBTdWJzdGl0dXRlUmVzb3VyY2VNYXA6OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IGNvcHkuZW5kKCk7CiAgICAgZm9yIChTdWJzdGl0dXRlUmVzb3VyY2VNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY29weS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAg
ICAgICAgUmVmUHRyPFJlc291cmNlTG9hZGVyPiBsb2FkZXIgPSBpdC0+Zmlyc3Q7Ci0gICAgICAg
IFN1YnN0aXR1dGVSZXNvdXJjZSogcmVzb3VyY2UgPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAg
ICBSZWZQdHI8UmVzb3VyY2VMb2FkZXI+IGxvYWRlciA9IGl0LT5rZXk7CisgICAgICAgIFN1YnN0
aXR1dGVSZXNvdXJjZSogcmVzb3VyY2UgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgIAogICAg
ICAgICBpZiAocmVzb3VyY2UpIHsKICAgICAgICAgICAgIFNoYXJlZEJ1ZmZlciogZGF0YSA9IHJl
c291cmNlLT5kYXRhKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvTWFpblJl
c291cmNlTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9NYWluUmVzb3VyY2VMb2Fk
ZXIuY3BwCmluZGV4IDA4MzZkOGNjMDBlODkwNThlOTgzMjNiYjZkNjA2NDUzZmNlOWM1MzcuLjMz
NTJlNjQzNmE2YTVmNjFjOTZhOTgyMGYxOTM3MjY2YmUxNjFkNjUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9NYWluUmVzb3VyY2VMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9NYWluUmVzb3VyY2VMb2FkZXIuY3BwCkBAIC0zNjgsNyArMzY4LDcgQEAgdm9p
ZCBNYWluUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJl
c3BvbnNlJiByKQogCiAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSByLmh0
dHBIZWFkZXJGaWVsZHMoKS5maW5kKEF0b21pY1N0cmluZygieC1mcmFtZS1vcHRpb25zIikpOwog
ICAgIGlmIChpdCAhPSByLmh0dHBIZWFkZXJGaWVsZHMoKS5lbmQoKSkgewotICAgICAgICBTdHJp
bmcgY29udGVudCA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFN0cmluZyBjb250ZW50ID0gaXQtPnZh
bHVlOwogICAgICAgICBpZiAobV9mcmFtZS0+bG9hZGVyKCktPnNob3VsZEludGVycnVwdExvYWRG
b3JYRnJhbWVPcHRpb25zKGNvbnRlbnQsIHIudXJsKCkpKSB7CiAgICAgICAgICAgICBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OmNvbnRpbnVlQWZ0ZXJYRnJhbWVPcHRpb25zRGVuaWVkKG1fZnJh
bWUuZ2V0KCksIGRvY3VtZW50TG9hZGVyKCksIGlkZW50aWZpZXIoKSwgcik7CiAgICAgICAgICAg
ICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgY29uc29sZU1lc3NhZ2UsICgiUmVmdXNlZCB0
byBkaXNwbGF5IGRvY3VtZW50IGJlY2F1c2UgZGlzcGxheSBmb3JiaWRkZW4gYnkgWC1GcmFtZS1P
cHRpb25zLlxuIikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNl
TG9hZFNjaGVkdWxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU2No
ZWR1bGVyLmNwcAppbmRleCA4MDA0ZDhmMmViMmQ4YmMzNjA2YTA2OWZjN2VlYTM1MWFmY2ZjZGFh
Li44ZWI0NGQ0OWQyOWE2ODQ2NjRkODMyNWNhMjYxZjU3NWM2NDEwYjYzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcApAQCAtMTc0LDcgKzE3
NCw3IEBAIHZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhS
ZXNvdXJjZUxvYWRQcmlvcml0eSBtaW5pbXVtUHJpCiAgICAgbV9ob3N0cy5jaGVja0NvbnNpc3Rl
bmN5KCk7CiAgICAgSG9zdE1hcDo6aXRlcmF0b3IgZW5kID0gbV9ob3N0cy5lbmQoKTsKICAgICBm
b3IgKEhvc3RNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2hvc3RzLmJlZ2luKCk7IGl0ZXIgIT0gZW5k
OyArK2l0ZXIpCi0gICAgICAgIGhvc3RzVG9TZXJ2ZS5hcHBlbmQoaXRlci0+c2Vjb25kKTsKKyAg
ICAgICAgaG9zdHNUb1NlcnZlLmFwcGVuZChpdGVyLT52YWx1ZSk7CiAKICAgICBpbnQgc2l6ZSA9
IGhvc3RzVG9TZXJ2ZS5zaXplKCk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyArK2kp
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlv
bkNhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNh
Y2hlLmNwcAppbmRleCA2M2NkN2JiYmZhODc4OWY0YWRiM2RmNTJjYjRlOWMxN2RkNzE1OTQ0Li5i
N2VhNjUyNGM0MDM5NzVmZjBkZjk0NmEyZjBkMDExY2IxNzAwYTZhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGUuY3BwCkBAIC0xMDAs
MTEgKzEwMCwxMSBAQCB1bnNpZ25lZCBBcHBsaWNhdGlvbkNhY2hlOjpyZW1vdmVSZXNvdXJjZShj
b25zdCBTdHJpbmcmIHVybCkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAvLyBUaGUgcmVzb3Vy
Y2UgZXhpc3RzLCBnZXQgaXRzIHR5cGUgc28gd2UgY2FuIHJldHVybiBpdC4KLSAgICB1bnNpZ25l
ZCB0eXBlID0gaXQtPnNlY29uZC0+dHlwZSgpOworICAgIHVuc2lnbmVkIHR5cGUgPSBpdC0+dmFs
dWUtPnR5cGUoKTsKIAogICAgIG1fcmVzb3VyY2VzLnJlbW92ZShpdCk7CiAKLSAgICBtX2VzdGlt
YXRlZFNpemVJblN0b3JhZ2UgLT0gaXQtPnNlY29uZC0+ZXN0aW1hdGVkU2l6ZUluU3RvcmFnZSgp
OworICAgIG1fZXN0aW1hdGVkU2l6ZUluU3RvcmFnZSAtPSBpdC0+dmFsdWUtPmVzdGltYXRlZFNp
emVJblN0b3JhZ2UoKTsKIAogICAgIHJldHVybiB0eXBlOwogfSAgICAKQEAgLTE4MCw3ICsxODAs
NyBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGU6OmNsZWFyU3RvcmFnZUlEKCkKICAgICAKICAgICBS
ZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9yZXNvdXJjZXMuZW5kKCk7CiAgICAg
Zm9yIChSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPmNsZWFyU3RvcmFnZUlEKCk7
CisgICAgICAgIGl0LT52YWx1ZS0+Y2xlYXJTdG9yYWdlSUQoKTsKIH0KICAgICAKIHZvaWQgQXBw
bGljYXRpb25DYWNoZTo6ZGVsZXRlQ2FjaGVGb3JPcmlnaW4oU2VjdXJpdHlPcmlnaW4qIG9yaWdp
bikKQEAgLTIxOCw4ICsyMTgsOCBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGU6OmR1bXAoKQogICAg
IEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8QXBwbGljYXRpb25DYWNoZVJlc291cmNlPiA+Ojpjb25z
dF9pdGVyYXRvciBlbmQgPSBtX3Jlc291cmNlcy5lbmQoKTsKICAgICAKICAgICBmb3IgKEhhc2hN
YXA8U3RyaW5nLCBSZWZQdHI8QXBwbGljYXRpb25DYWNoZVJlc291cmNlPiA+Ojpjb25zdF9pdGVy
YXRvciBpdCA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAg
ICBwcmludGYoIiVzICIsIGl0LT5maXJzdC5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIEFwcGxp
Y2F0aW9uQ2FjaGVSZXNvdXJjZTo6ZHVtcFR5cGUoaXQtPnNlY29uZC0+dHlwZSgpKTsKKyAgICAg
ICAgcHJpbnRmKCIlcyAiLCBpdC0+a2V5LmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgQXBwbGlj
YXRpb25DYWNoZVJlc291cmNlOjpkdW1wVHlwZShpdC0+dmFsdWUtPnR5cGUoKSk7CiAgICAgfQog
fQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBw
bGljYXRpb25DYWNoZUdyb3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9B
cHBsaWNhdGlvbkNhY2hlR3JvdXAuY3BwCmluZGV4IDkyMDgyYzU2YmUxMWM5ZGMyNTg1MGY3YTk0
YmMyNzkzYjc3ZjVmNWYuLjI3M2E2MDEwZDgyNTVmYjk0YWE2MDUxYjkyZjY5MmI0ODgzN2M5OTYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNh
Y2hlR3JvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNh
dGlvbkNhY2hlR3JvdXAuY3BwCkBAIC03NzcsOSArNzc3LDkgQEAgdm9pZCBBcHBsaWNhdGlvbkNh
Y2hlR3JvdXA6OmRpZEZpbmlzaExvYWRpbmdNYW5pZmVzdCgpCiAgICAgaWYgKGlzVXBncmFkZUF0
dGVtcHQpIHsKICAgICAgICAgQXBwbGljYXRpb25DYWNoZTo6UmVzb3VyY2VNYXA6OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IG1fbmV3ZXN0Q2FjaGUtPmVuZCgpOwogICAgICAgICBmb3IgKEFwcGxpY2F0
aW9uQ2FjaGU6OlJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fbmV3ZXN0Q2FjaGUt
PmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgdW5zaWduZWQgdHlwZSA9
IGl0LT5zZWNvbmQtPnR5cGUoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIHR5cGUgPSBpdC0+dmFs
dWUtPnR5cGUoKTsKICAgICAgICAgICAgIGlmICh0eXBlICYgQXBwbGljYXRpb25DYWNoZVJlc291
cmNlOjpNYXN0ZXIpCi0gICAgICAgICAgICAgICAgYWRkRW50cnkoaXQtPmZpcnN0LCB0eXBlKTsK
KyAgICAgICAgICAgICAgICBhZGRFbnRyeShpdC0+a2V5LCB0eXBlKTsKICAgICAgICAgfQogICAg
IH0KICAgICAKQEAgLTEwMTgsNyArMTAxOCw3IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3Vw
OjpzdGFydExvYWRpbmdFbnRyeSgpCiAKICAgICBBU1NFUlQoIW1fY3VycmVudEhhbmRsZSk7CiAg
ICAgCi0gICAgbV9jdXJyZW50SGFuZGxlID0gY3JlYXRlUmVzb3VyY2VIYW5kbGUoS1VSTChQYXJz
ZWRVUkxTdHJpbmcsIGl0LT5maXJzdCksIG1fbmV3ZXN0Q2FjaGUgPyBtX25ld2VzdENhY2hlLT5y
ZXNvdXJjZUZvclVSTChpdC0+Zmlyc3QpIDogMCk7CisgICAgbV9jdXJyZW50SGFuZGxlID0gY3Jl
YXRlUmVzb3VyY2VIYW5kbGUoS1VSTChQYXJzZWRVUkxTdHJpbmcsIGl0LT5rZXkpLCBtX25ld2Vz
dENhY2hlID8gbV9uZXdlc3RDYWNoZS0+cmVzb3VyY2VGb3JVUkwoaXQtPmtleSkgOiAwKTsKIH0K
IAogdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmRlbGl2ZXJEZWxheWVkTWFpblJlc291cmNl
cygpCkBAIC0xMDY3LDcgKzEwNjcsNyBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6YWRk
RW50cnkoY29uc3QgU3RyaW5nJiB1cmwsIHVuc2lnbmVkIHR5cGUpCiAgICAgRW50cnlNYXA6OkFk
ZFJlc3VsdCByZXN1bHQgPSBtX3BlbmRpbmdFbnRyaWVzLmFkZCh1cmwsIHR5cGUpOwogICAgIAog
ICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vj
b25kIHw9IHR5cGU7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgfD0gdHlwZTsKIH0K
IAogdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmFzc29jaWF0ZURvY3VtZW50TG9hZGVyV2l0
aENhY2hlKERvY3VtZW50TG9hZGVyKiBsb2FkZXIsIEFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hlKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2Fj
aGVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNh
Y2hlSG9zdC5jcHAKaW5kZXggODAxYzFiMzY3MDMxYTMzOWRiNDQ3MDdhOTJkMWJjODBkNDFkOGM3
OS4uZmU5ZjAxMGEwZmU2NTAzZDBiYzVlNWI5Mjc3MGEzZjdiNjQzNDRmZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVIb3N0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUhvc3Qu
Y3BwCkBAIC0yODIsNyArMjgyLDcgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6ZmlsbFJl
c291cmNlTGlzdChSZXNvdXJjZUluZm9MaXN0KiByZXNvdXJjZXMpCiAgICAgIAogICAgIEFwcGxp
Y2F0aW9uQ2FjaGU6OlJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBjYWNoZS0+ZW5k
KCk7CiAgICAgZm9yIChBcHBsaWNhdGlvbkNhY2hlOjpSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBjYWNoZS0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFJlZlB0
cjxBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+IHJlc291cmNlID0gaXQtPnNlY29uZDsKKyAgICAg
ICAgUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4gcmVzb3VyY2UgPSBpdC0+dmFsdWU7
CiAgICAgICAgIHVuc2lnbmVkIHR5cGUgPSByZXNvdXJjZS0+dHlwZSgpOwogICAgICAgICBib29s
IGlzTWFzdGVyICAgPSB0eXBlICYgQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpNYXN0ZXI7CiAg
ICAgICAgIGJvb2wgaXNNYW5pZmVzdCA9IHR5cGUgJiBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6
Ok1hbmlmZXN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0Fw
cGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2Fj
aGUvQXBwbGljYXRpb25DYWNoZVJlc291cmNlLmNwcAppbmRleCBkODMxNzg0YjQxOTZhZGYzODJj
ZjM1NWUwZWVmMDJkNmE3YTgwNzkwLi45OTc2NmUzYTY2YmQzNmViNDJmZWQyYTkyNjlkMzRiMDY2
MTk0ZDdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGlj
YXRpb25DYWNoZVJlc291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2Fj
aGUvQXBwbGljYXRpb25DYWNoZVJlc291cmNlLmNwcApAQCAtNTQsNyArNTQsNyBAQCBpbnQ2NF90
IEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6ZXN0aW1hdGVkU2l6ZUluU3RvcmFnZSgpCiAKICAg
ICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSByZXNwb25zZSgpLmh0dHBIZWFk
ZXJGaWVsZHMoKS5lbmQoKTsKICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gcmVzcG9uc2UoKS5odHRwSGVhZGVyRmllbGRzKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KQotICAgICAgICBtX2VzdGltYXRlZFNpemVJblN0b3JhZ2UgKz0gKGl0LT5maXJzdC5sZW5n
dGgoKSArIGl0LT5zZWNvbmQubGVuZ3RoKCkgKyAyKSAqIHNpemVvZihVQ2hhcik7CisgICAgICAg
IG1fZXN0aW1hdGVkU2l6ZUluU3RvcmFnZSArPSAoaXQtPmtleS5sZW5ndGgoKSArIGl0LT52YWx1
ZS5sZW5ndGgoKSArIDIpICogc2l6ZW9mKFVDaGFyKTsKIAogICAgIG1fZXN0aW1hdGVkU2l6ZUlu
U3RvcmFnZSArPSB1cmwoKS5zdHJpbmcoKS5sZW5ndGgoKSAqIHNpemVvZihVQ2hhcik7CiAgICAg
bV9lc3RpbWF0ZWRTaXplSW5TdG9yYWdlICs9IHNpemVvZihpbnQpOyAvLyByZXNwb25zZSgpLm1f
aHR0cFN0YXR1c0NvZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNo
ZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBw
Y2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwCmluZGV4IDc3OGU0ZTM4ODg5MWQzMzQ3
MjBjZDIxNTI1NmQ0ZGFkMzliMjJmMWQuLmQxYzk3ZTRiMmFhMTYwOGZjOTQ4ZWE2MzJjMmJhNmVk
MmE3ZTUxM2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBs
aWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNh
Y2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcApAQCAtMTM3LDggKzEzNyw4IEBAIEFwcGxp
Y2F0aW9uQ2FjaGVHcm91cCogQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmZpbmRPckNyZWF0ZUNh
Y2hlR3JvdXAoY29uc3QgS1VSCiAgICAgQ2FjaGVHcm91cE1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9
IG1fY2FjaGVzSW5NZW1vcnkuYWRkKG1hbmlmZXN0VVJMLCAwKTsKICAgICAKICAgICBpZiAoIXJl
c3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIEFTU0VSVChyZXN1bHQuaXRlcmF0b3ItPnNlY29u
ZCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgQVNT
RVJUKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOworICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZTsKICAgICB9CiAKICAgICAvLyBMb29rIHVwIHRoZSBncm91cCBpbiB0aGUgZGF0
YWJhc2UKQEAgLTE1MCw3ICsxNTAsNyBAQCBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIEFwcGxpY2F0
aW9uQ2FjaGVTdG9yYWdlOjpmaW5kT3JDcmVhdGVDYWNoZUdyb3VwKGNvbnN0IEtVUgogICAgICAg
ICBtX2NhY2hlSG9zdFNldC5hZGQodXJsSG9zdEhhc2gobWFuaWZlc3RVUkwpKTsKICAgICB9CiAg
ICAgCi0gICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBncm91cDsKKyAgICByZXN1bHQuaXRl
cmF0b3ItPnZhbHVlID0gZ3JvdXA7CiAgICAgCiAgICAgcmV0dXJuIGdyb3VwOwogfQpAQCAtMTk3
LDcgKzE5Nyw3IEBAIEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogQXBwbGljYXRpb25DYWNoZVN0b3Jh
Z2U6OmNhY2hlR3JvdXBGb3JVUkwoY29uc3QgS1VSTCYgdXJsCiAgICAgLy8gQ2hlY2sgaWYgYSBj
YWNoZSBhbHJlYWR5IGV4aXN0cyBpbiBtZW1vcnkuCiAgICAgQ2FjaGVHcm91cE1hcDo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gbV9jYWNoZXNJbk1lbW9yeS5lbmQoKTsKICAgICBmb3IgKENhY2hlR3Jv
dXBNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9jYWNoZXNJbk1lbW9yeS5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKLSAgICAgICAgQXBwbGljYXRpb25DYWNoZUdyb3VwKiBncm91cCA9IGl0
LT5zZWNvbmQ7CisgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogZ3JvdXAgPSBpdC0+dmFs
dWU7CiAKICAgICAgICAgQVNTRVJUKCFncm91cC0+aXNPYnNvbGV0ZSgpKTsKIApAQCAtMjY4LDcg
KzI2OCw3IEBAIEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6
OmZhbGxiYWNrQ2FjaGVHcm91cEZvclVSTChjb25zdCBLCiAgICAgLy8gQ2hlY2sgaWYgYW4gYXBw
cm9wcmlhdGUgY2FjaGUgYWxyZWFkeSBleGlzdHMgaW4gbWVtb3J5LgogICAgIENhY2hlR3JvdXBN
YXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fY2FjaGVzSW5NZW1vcnkuZW5kKCk7CiAgICAgZm9y
IChDYWNoZUdyb3VwTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fY2FjaGVzSW5NZW1vcnkuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVHcm91cCog
Z3JvdXAgPSBpdC0+c2Vjb25kOworICAgICAgICBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIGdyb3Vw
ID0gaXQtPnZhbHVlOwogICAgICAgICAKICAgICAgICAgQVNTRVJUKCFncm91cC0+aXNPYnNvbGV0
ZSgpKTsKIApAQCAtNzEzLDEzICs3MTMsMTMgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFn
ZTo6c3RvcmUoQXBwbGljYXRpb25DYWNoZSogY2FjaGUsIFJlc291cmNlU3RvcmFnZUlESm8KICAg
ICB7CiAgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGU6OlJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRv
ciBlbmQgPSBjYWNoZS0+ZW5kKCk7CiAgICAgICAgIGZvciAoQXBwbGljYXRpb25DYWNoZTo6UmVz
b3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY2FjaGUtPmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgewotICAgICAgICAgICAgdW5zaWduZWQgb2xkU3RvcmFnZUlEID0gaXQtPnNlY29uZC0+
c3RvcmFnZUlEKCk7Ci0gICAgICAgICAgICBpZiAoIXN0b3JlKGl0LT5zZWNvbmQuZ2V0KCksIGNh
Y2hlU3RvcmFnZUlEKSkKKyAgICAgICAgICAgIHVuc2lnbmVkIG9sZFN0b3JhZ2VJRCA9IGl0LT52
YWx1ZS0+c3RvcmFnZUlEKCk7CisgICAgICAgICAgICBpZiAoIXN0b3JlKGl0LT52YWx1ZS5nZXQo
KSwgY2FjaGVTdG9yYWdlSUQpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
ICAgICAgICAgLy8gU3RvcmluZyB0aGUgcmVzb3VyY2Ugc3VjY2VlZGVkLiBMb2cgaXRzIG9sZCBz
dG9yYWdlSUQgaW4gY2FzZQogICAgICAgICAgICAgLy8gaXQgbmVlZHMgdG8gYmUgcmVzdG9yZWQg
bGF0ZXIuCi0gICAgICAgICAgICBzdG9yYWdlSURKb3VybmFsLT5hZGQoaXQtPnNlY29uZC5nZXQo
KSwgb2xkU3RvcmFnZUlEKTsKKyAgICAgICAgICAgIHN0b3JhZ2VJREpvdXJuYWwtPmFkZChpdC0+
dmFsdWUuZ2V0KCksIG9sZFN0b3JhZ2VJRCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC04
MzksOSArODM5LDkgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmUoQXBwbGlj
YXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJjZSwgdW5zaWduZWQKICAgICAKICAgICBIVFRQSGVh
ZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSByZXNvdXJjZS0+cmVzcG9uc2UoKS5odHRwSGVh
ZGVyRmllbGRzKCkuZW5kKCk7CiAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IHJlc291cmNlLT5yZXNwb25zZSgpLmh0dHBIZWFkZXJGaWVsZHMoKS5iZWdpbigpOyBp
dCE9IGVuZDsgKytpdCkgewotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+Zmlyc3Qp
OworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+a2V5KTsKICAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQoKFVDaGFyKSc6Jyk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KGl0LT5zZWNvbmQpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+dmFsdWUpOwog
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgoVUNoYXIpJ1xuJyk7CiAgICAgfQogICAgIApA
QCAtMTI0MSw3ICsxMjQxLDcgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZW1wdHko
KQogICAgIC8vIHVudGlsIGEgY2FjaGUgdXBkYXRlIHByb2Nlc3MgaGFzIGJlZW4gaW5pdGlhdGVk
LgogICAgIENhY2hlR3JvdXBNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fY2FjaGVzSW5NZW1v
cnkuZW5kKCk7CiAgICAgZm9yIChDYWNoZUdyb3VwTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1f
Y2FjaGVzSW5NZW1vcnkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vj
b25kLT5jbGVhclN0b3JhZ2VJRCgpOworICAgICAgICBpdC0+dmFsdWUtPmNsZWFyU3RvcmFnZUlE
KCk7CiAgICAgCiAgICAgY2hlY2tGb3JEZWxldGVkUmVzb3VyY2VzKCk7CiB9CkBAIC0xMzAzLDcg
KzEzMDMsNyBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZUNvcHlPZkNhY2hl
KGNvbnN0IFN0cmluZyYgY2FjaGVEaXJlY3RvcnksIEFwcAogICAgIC8vIFRyYXZlcnNlIHRoZSBj
YWNoZSBhbmQgYWRkIGNvcGllcyBvZiBhbGwgcmVzb3VyY2VzLgogICAgIEFwcGxpY2F0aW9uQ2Fj
aGU6OlJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBjYWNoZS0+ZW5kKCk7CiAgICAg
Zm9yIChBcHBsaWNhdGlvbkNhY2hlOjpSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBj
YWNoZS0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIEFwcGxpY2F0aW9uQ2Fj
aGVSZXNvdXJjZSogcmVzb3VyY2UgPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICBBcHBsaWNh
dGlvbkNhY2hlUmVzb3VyY2UqIHJlc291cmNlID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAK
ICAgICAgICAgUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4gcmVzb3VyY2VDb3B5ID0g
QXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpjcmVhdGUocmVzb3VyY2UtPnVybCgpLCByZXNvdXJj
ZS0+cmVzcG9uc2UoKSwgcmVzb3VyY2UtPnR5cGUoKSwgcmVzb3VyY2UtPmRhdGEoKSwgcmVzb3Vy
Y2UtPnBhdGgoKSk7CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVy
L2FyY2hpdmUvQXJjaGl2ZUZhY3RvcnkuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hp
dmUvQXJjaGl2ZUZhY3RvcnkuY3BwCmluZGV4IGY2OTcwYWE1MzFiNWU1YTY1YzVhNjA1MjliMTVl
MDU0Mzg2YzQ2NWYuLmNkMzg3NmFhZWZhYzkwNGNiNGNkNDkwYzcyODg5MWUwMzg3NTY0ZGMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL0FyY2hpdmVGYWN0b3J5LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9BcmNoaXZlRmFjdG9yeS5jcHAK
QEAgLTk1LDcgKzk1LDcgQEAgdm9pZCBBcmNoaXZlRmFjdG9yeTo6cmVnaXN0ZXJLbm93bkFyY2hp
dmVNSU1FVHlwZXMoKQogICAgIEFyY2hpdmVNSU1FVHlwZXNNYXA6Oml0ZXJhdG9yIGVuZCA9IGFy
Y2hpdmVNSU1FVHlwZXMoKS5lbmQoKTsKIAogICAgIGZvciAoOyBpICE9IGVuZDsgKytpKQotICAg
ICAgICBtaW1lVHlwZXMuYWRkKGktPmZpcnN0KTsKKyAgICAgICAgbWltZVR5cGVzLmFkZChpLT5r
ZXkpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2Fj
aGVkUmF3UmVzb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJh
d1Jlc291cmNlLmNwcAppbmRleCA0ZTQzMTMxYjFkMjU0ODM3MWY3MTU3NGY1MTU2NTdlM2Q0MmQw
ODU0Li4xMjg4ZmUxN2NmMDkzZmI0NGQxYmM0MGM2ODY5NTJhMDJhNGY0MDI4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5jcHAKQEAgLTE1
Myw4ICsxNTMsOCBAQCBib29sIENhY2hlZFJhd1Jlc291cmNlOjpjYW5SZXVzZShjb25zdCBSZXNv
dXJjZVJlcXVlc3QmIG5ld1JlcXVlc3QpIGNvbnN0CiAKICAgICBIVFRQSGVhZGVyTWFwOjpjb25z
dF9pdGVyYXRvciBlbmQgPSBuZXdIZWFkZXJzLmVuZCgpOwogICAgIGZvciAoSFRUUEhlYWRlck1h
cDo6Y29uc3RfaXRlcmF0b3IgaSA9IG5ld0hlYWRlcnMuYmVnaW4oKTsgaSAhPSBlbmQ7ICsraSkg
ewotICAgICAgICBBdG9taWNTdHJpbmcgaGVhZGVyTmFtZSA9IGktPmZpcnN0OwotICAgICAgICBp
ZiAoaS0+c2Vjb25kICE9IG9sZEhlYWRlcnMuZ2V0KGhlYWRlck5hbWUpKQorICAgICAgICBBdG9t
aWNTdHJpbmcgaGVhZGVyTmFtZSA9IGktPmtleTsKKyAgICAgICAgaWYgKGktPnZhbHVlICE9IG9s
ZEhlYWRlcnMuZ2V0KGhlYWRlck5hbWUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9j
YWNoZS9DYWNoZWRSZXNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2Fj
aGVkUmVzb3VyY2UuY3BwCmluZGV4IGQ3YWJjYWU4NDBjNzk2ZDYxYWI2MzYwNDVmZDVhZjVkZDcy
Yzc5MTYuLmFkZTk4M2U4NjVlNjRiODdjZTFjMTFjODM1ZWY0NzVlZDZiNzEzN2IgMTAwNzU1Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNwcApAQCAtNjEyLDgg
KzYxMiw4IEBAIHZvaWQgQ2FjaGVkUmVzb3VyY2U6OnN3aXRjaENsaWVudHNUb1JldmFsaWRhdGVk
UmVzb3VyY2UoKQogICAgIFZlY3RvcjxDYWNoZWRSZXNvdXJjZUNsaWVudCo+IGNsaWVudHNUb01v
dmU7CiAgICAgSGFzaENvdW50ZWRTZXQ8Q2FjaGVkUmVzb3VyY2VDbGllbnQqPjo6aXRlcmF0b3Ig
ZW5kMiA9IG1fY2xpZW50cy5lbmQoKTsKICAgICBmb3IgKEhhc2hDb3VudGVkU2V0PENhY2hlZFJl
c291cmNlQ2xpZW50Kj46Oml0ZXJhdG9yIGl0ID0gbV9jbGllbnRzLmJlZ2luKCk7IGl0ICE9IGVu
ZDI7ICsraXQpIHsKLSAgICAgICAgQ2FjaGVkUmVzb3VyY2VDbGllbnQqIGNsaWVudCA9IGl0LT5m
aXJzdDsKLSAgICAgICAgdW5zaWduZWQgY291bnQgPSBpdC0+c2Vjb25kOworICAgICAgICBDYWNo
ZWRSZXNvdXJjZUNsaWVudCogY2xpZW50ID0gaXQtPmtleTsKKyAgICAgICAgdW5zaWduZWQgY291
bnQgPSBpdC0+dmFsdWU7CiAgICAgICAgIHdoaWxlIChjb3VudCkgewogICAgICAgICAgICAgY2xp
ZW50c1RvTW92ZS5hcHBlbmQoY2xpZW50KTsKICAgICAgICAgICAgIC0tY291bnQ7CkBAIC02NDcs
OSArNjQ3LDkgQEAgdm9pZCBDYWNoZWRSZXNvdXJjZTo6dXBkYXRlUmVzcG9uc2VBZnRlclJldmFs
aWRhdGlvbihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiB2YWwKICAgICBIVFRQSGVhZGVyTWFwOjpj
b25zdF9pdGVyYXRvciBlbmQgPSBuZXdIZWFkZXJzLmVuZCgpOwogICAgIGZvciAoSFRUUEhlYWRl
ck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBuZXdIZWFkZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgewogICAgICAgICAvLyBEb24ndCBhbGxvdyAzMDQgcmVzcG9uc2UgdG8gdXBkYXRlIGNv
bnRlbnQgaGVhZGVycywgdGhlc2UgY2FuJ3QgY2hhbmdlIGJ1dCBzb21lIHNlcnZlcnMgc2VuZCB3
cm9uZyB2YWx1ZXMuCi0gICAgICAgIGlmIChpdC0+Zmlyc3Quc3RhcnRzV2l0aChjb250ZW50SGVh
ZGVyUHJlZml4LCBmYWxzZSkpCisgICAgICAgIGlmIChpdC0+a2V5LnN0YXJ0c1dpdGgoY29udGVu
dEhlYWRlclByZWZpeCwgZmFsc2UpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIG1f
cmVzcG9uc2Uuc2V0SFRUUEhlYWRlckZpZWxkKGl0LT5maXJzdCwgaXQtPnNlY29uZCk7CisgICAg
ICAgIG1fcmVzcG9uc2Uuc2V0SFRUUEhlYWRlckZpZWxkKGl0LT5rZXksIGl0LT52YWx1ZSk7CiAg
ICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVk
UmVzb3VyY2VDbGllbnRXYWxrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZWRSZXNvdXJjZUNsaWVudFdhbGtlci5oCmluZGV4IDhiMzc4MGI1ZTY0YjIxNDM0NjI4OTZiZGEy
YTZhMjY1YTVhOGEwNzQuLjc5MzNiMGI4MTRjNTIxMjU2ZTA3NjBmODYxYjQzMTA5N2I4OWI1OWMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUNs
aWVudFdhbGtlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNv
dXJjZUNsaWVudFdhbGtlci5oCkBAIC00Miw3ICs0Miw3IEBAIHB1YmxpYzoKICAgICAgICAgSXRl
cmF0b3IgZW5kID0gc2V0LmVuZCgpOwogICAgICAgICBzaXplX3QgY2xpZW50SW5kZXggPSAwOwog
ICAgICAgICBmb3IgKEl0ZXJhdG9yIGN1cnJlbnQgPSBzZXQuYmVnaW4oKTsgY3VycmVudCAhPSBl
bmQ7ICsrY3VycmVudCkKLSAgICAgICAgICAgIG1fY2xpZW50VmVjdG9yW2NsaWVudEluZGV4Kytd
ID0gY3VycmVudC0+Zmlyc3Q7CisgICAgICAgICAgICBtX2NsaWVudFZlY3RvcltjbGllbnRJbmRl
eCsrXSA9IGN1cnJlbnQtPmtleTsKICAgICB9CiAKICAgICBUKiBuZXh0KCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwCmluZGV4
IGIyNThjMDU3ZmYzYWYxMTE5NTgwZGUxYWY2MDg0MDUzMmY2YTBhNzUuLjU1YzIxNDJiOWQxMGUw
OGRlOGVkMGVhZWY3NTc5NDUxYmFkYzZlNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
bG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcApAQCAtMTI2LDcgKzEyNiw3IEBA
IENhY2hlZFJlc291cmNlTG9hZGVyOjp+Q2FjaGVkUmVzb3VyY2VMb2FkZXIoKQogICAgIGNsZWFy
UHJlbG9hZHMoKTsKICAgICBEb2N1bWVudFJlc291cmNlTWFwOjppdGVyYXRvciBlbmQgPSBtX2Rv
Y3VtZW50UmVzb3VyY2VzLmVuZCgpOwogICAgIGZvciAoRG9jdW1lbnRSZXNvdXJjZU1hcDo6aXRl
cmF0b3IgaXQgPSBtX2RvY3VtZW50UmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkK
LSAgICAgICAgaXQtPnNlY29uZC0+c2V0T3duaW5nQ2FjaGVkUmVzb3VyY2VMb2FkZXIoMCk7Cisg
ICAgICAgIGl0LT52YWx1ZS0+c2V0T3duaW5nQ2FjaGVkUmVzb3VyY2VMb2FkZXIoMCk7CiAKICAg
ICAvLyBNYWtlIHN1cmUgbm8gcmVxdWVzdHMgc3RpbGwgcG9pbnQgdG8gdGhpcyBDYWNoZWRSZXNv
dXJjZUxvYWRlcgogICAgIEFTU0VSVChtX3JlcXVlc3RDb3VudCA9PSAwKTsKQEAgLTQxOSw3ICs0
MTksNyBAQCBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSZXNvdXJjZT4gQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXI6OnJlcXVlc3RSZXNvdXJjZShDYWNoZQogICAgIGlmIChtZW1vcnlDYWNoZSgpLT5k
aXNhYmxlZCgpKSB7CiAgICAgICAgIERvY3VtZW50UmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGl0ID0g
bV9kb2N1bWVudFJlc291cmNlcy5maW5kKHVybC5zdHJpbmcoKSk7CiAgICAgICAgIGlmIChpdCAh
PSBtX2RvY3VtZW50UmVzb3VyY2VzLmVuZCgpKSB7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLT5z
ZXRPd25pbmdDYWNoZWRSZXNvdXJjZUxvYWRlcigwKTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+
c2V0T3duaW5nQ2FjaGVkUmVzb3VyY2VMb2FkZXIoMCk7CiAgICAgICAgICAgICBtX2RvY3VtZW50
UmVzb3VyY2VzLnJlbW92ZShpdCk7CiAgICAgICAgIH0KICAgICB9CkBAIC02MzEsNyArNjMxLDcg
QEAgdm9pZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6c2V0QXV0b0xvYWRJbWFnZXMoYm9vbCBlbmFi
bGUpCiAKICAgICBEb2N1bWVudFJlc291cmNlTWFwOjppdGVyYXRvciBlbmQgPSBtX2RvY3VtZW50
UmVzb3VyY2VzLmVuZCgpOwogICAgIGZvciAoRG9jdW1lbnRSZXNvdXJjZU1hcDo6aXRlcmF0b3Ig
aXQgPSBtX2RvY3VtZW50UmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAg
ICAgICBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UgPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAg
ICBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgIGlm
IChyZXNvdXJjZS0+dHlwZSgpID09IENhY2hlZFJlc291cmNlOjpJbWFnZVJlc291cmNlKSB7CiAg
ICAgICAgICAgICBDYWNoZWRJbWFnZSogaW1hZ2UgPSBjb25zdF9jYXN0PENhY2hlZEltYWdlKj4o
c3RhdGljX2Nhc3Q8Y29uc3QgQ2FjaGVkSW1hZ2UqPihyZXNvdXJjZSkpOwogCkBAIC02NTEsNyAr
NjUxLDcgQEAgdm9pZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVtb3ZlQ2FjaGVkUmVzb3VyY2Uo
Q2FjaGVkUmVzb3VyY2UqIHJlc291cmNlKSBjb25zdAogI2lmbmRlZiBOREVCVUcKICAgICBEb2N1
bWVudFJlc291cmNlTWFwOjppdGVyYXRvciBpdCA9IG1fZG9jdW1lbnRSZXNvdXJjZXMuZmluZChy
ZXNvdXJjZS0+dXJsKCkpOwogICAgIGlmIChpdCAhPSBtX2RvY3VtZW50UmVzb3VyY2VzLmVuZCgp
KQotICAgICAgICBBU1NFUlQoaXQtPnNlY29uZC5nZXQoKSA9PSByZXNvdXJjZSk7CisgICAgICAg
IEFTU0VSVChpdC0+dmFsdWUuZ2V0KCkgPT0gcmVzb3VyY2UpOwogI2VuZGlmCiAgICAgbV9kb2N1
bWVudFJlc291cmNlcy5yZW1vdmUocmVzb3VyY2UtPnVybCgpKTsKIH0KQEAgLTY4NSw5ICs2ODUs
OSBAQCB2b2lkIENhY2hlZFJlc291cmNlTG9hZGVyOjpnYXJiYWdlQ29sbGVjdERvY3VtZW50UmVz
b3VyY2VzKCkKICAgICBTdHJpbmdWZWN0b3IgcmVzb3VyY2VzVG9EZWxldGU7CiAKICAgICBmb3Ig
KERvY3VtZW50UmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9kb2N1bWVudFJlc291cmNlcy5i
ZWdpbigpOyBpdCAhPSBtX2RvY3VtZW50UmVzb3VyY2VzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAg
IGlmIChpdC0+c2Vjb25kLT5oYXNPbmVIYW5kbGUoKSkgewotICAgICAgICAgICAgcmVzb3VyY2Vz
VG9EZWxldGUuYXBwZW5kKGl0LT5maXJzdCk7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRP
d25pbmdDYWNoZWRSZXNvdXJjZUxvYWRlcigwKTsKKyAgICAgICAgaWYgKGl0LT52YWx1ZS0+aGFz
T25lSGFuZGxlKCkpIHsKKyAgICAgICAgICAgIHJlc291cmNlc1RvRGVsZXRlLmFwcGVuZChpdC0+
a2V5KTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+c2V0T3duaW5nQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXIoMCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTg4Myw4ICs4ODMsOCBAQCB2b2lkIENhY2hl
ZFJlc291cmNlTG9hZGVyOjpyZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1v
cnlPYmplY3RJbmZvKQogICAgIE1lbW9yeUNsYXNzSW5mbyBpbmZvKG1lbW9yeU9iamVjdEluZm8s
IHRoaXMsIE1lbW9yeUluc3RydW1lbnRhdGlvbjo6TG9hZGVyKTsKICAgICBpbmZvLmFkZEhhc2hN
YXAobV9kb2N1bWVudFJlc291cmNlcyk7CiAgICAgZm9yIChEb2N1bWVudFJlc291cmNlTWFwOjpj
b25zdF9pdGVyYXRvciBpID0gbV9kb2N1bWVudFJlc291cmNlcy5iZWdpbigpOyBpICE9IG1fZG9j
dW1lbnRSZXNvdXJjZXMuZW5kKCk7ICsraSkgewotICAgICAgICBpbmZvLmFkZEluc3RydW1lbnRl
ZE1lbWJlcihpLT5maXJzdCk7Ci0gICAgICAgIGluZm8uYWRkSW5zdHJ1bWVudGVkTWVtYmVyKGkt
PnNlY29uZCk7CisgICAgICAgIGluZm8uYWRkSW5zdHJ1bWVudGVkTWVtYmVyKGktPmtleSk7Cisg
ICAgICAgIGluZm8uYWRkSW5zdHJ1bWVudGVkTWVtYmVyKGktPnZhbHVlKTsKICAgICB9CiAgICAg
aW5mby5hZGRIYXNoU2V0KG1fdmFsaWRhdGVkVVJMcyk7CiAgICAgaWYgKG1fcHJlbG9hZHMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuY3BwIGIv
U291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmNwcAppbmRleCA2NjExMWQ3
M2Y3ZDFmYjAxMjE5NTZhZWFmZDEwMzdhZGJkMjhiMDExLi5jMzg4NmE0MGU4YTZlZWNlOTE5ZWU1
OTU1MjIyZDlhNDg5NjViMjQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2Fj
aGUvTWVtb3J5Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9NZW1v
cnlDYWNoZS5jcHAKQEAgLTU0MCw3ICs1NDAsNyBAQCB2b2lkIE1lbW9yeUNhY2hlOjpyZW1vdmVS
ZXNvdXJjZXNXaXRoT3JpZ2luKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCiAKICAgICBDYWNoZWRS
ZXNvdXJjZU1hcDo6aXRlcmF0b3IgZSA9IG1fcmVzb3VyY2VzLmVuZCgpOwogICAgIGZvciAoQ2Fj
aGVkUmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0g
ZTsgKytpdCkgewotICAgICAgICBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UgPSBpdC0+c2Vjb25k
OworICAgICAgICBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UgPSBpdC0+dmFsdWU7CiAgICAgICAg
IFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gcmVzb3VyY2VPcmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6
Y3JlYXRlRnJvbVN0cmluZyhyZXNvdXJjZS0+dXJsKCkpOwogICAgICAgICBpZiAoIXJlc291cmNl
T3JpZ2luKQogICAgICAgICAgICAgY29udGludWU7CkBAIC01NTYsNyArNTU2LDcgQEAgdm9pZCBN
ZW1vcnlDYWNoZTo6Z2V0T3JpZ2luc1dpdGhDYWNoZShTZWN1cml0eU9yaWdpblNldCYgb3JpZ2lu
cykKIHsKICAgICBDYWNoZWRSZXNvdXJjZU1hcDo6aXRlcmF0b3IgZSA9IG1fcmVzb3VyY2VzLmVu
ZCgpOwogICAgIGZvciAoQ2FjaGVkUmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNvdXJj
ZXMuYmVnaW4oKTsgaXQgIT0gZTsgKytpdCkKLSAgICAgICAgb3JpZ2lucy5hZGQoU2VjdXJpdHlP
cmlnaW46OmNyZWF0ZUZyb21TdHJpbmcoaXQtPnNlY29uZC0+dXJsKCkpKTsKKyAgICAgICAgb3Jp
Z2lucy5hZGQoU2VjdXJpdHlPcmlnaW46OmNyZWF0ZUZyb21TdHJpbmcoaXQtPnZhbHVlLT51cmwo
KSkpOwogfQogCiB2b2lkIE1lbW9yeUNhY2hlOjpyZW1vdmVGcm9tTGl2ZURlY29kZWRSZXNvdXJj
ZXNMaXN0KENhY2hlZFJlc291cmNlKiByZXNvdXJjZSkKQEAgLTY4OSw3ICs2ODksNyBAQCBNZW1v
cnlDYWNoZTo6U3RhdGlzdGljcyBNZW1vcnlDYWNoZTo6Z2V0U3RhdGlzdGljcygpCiAgICAgU3Rh
dGlzdGljcyBzdGF0czsKICAgICBDYWNoZWRSZXNvdXJjZU1hcDo6aXRlcmF0b3IgZSA9IG1fcmVz
b3VyY2VzLmVuZCgpOwogICAgIGZvciAoQ2FjaGVkUmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGkgPSBt
X3Jlc291cmNlcy5iZWdpbigpOyBpICE9IGU7ICsraSkgewotICAgICAgICBDYWNoZWRSZXNvdXJj
ZSogcmVzb3VyY2UgPSBpLT5zZWNvbmQ7CisgICAgICAgIENhY2hlZFJlc291cmNlKiByZXNvdXJj
ZSA9IGktPnZhbHVlOwogICAgICAgICBzd2l0Y2ggKHJlc291cmNlLT50eXBlKCkpIHsKICAgICAg
ICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJjZToKICAgICAgICAgICAgIHN0YXRz
LmltYWdlcy5hZGRSZXNvdXJjZShyZXNvdXJjZSk7CkBAIC03MjEsOCArNzIxLDggQEAgdm9pZCBN
ZW1vcnlDYWNoZTo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2Jq
ZWN0SW5mbykgY29uc3QKICAgICBpbmZvLmFkZEhhc2hNYXAobV9yZXNvdXJjZXMpOwogICAgIENh
Y2hlZFJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBlID0gbV9yZXNvdXJjZXMuZW5kKCk7CiAg
ICAgZm9yIChDYWNoZWRSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgaSA9IG1fcmVzb3VyY2Vz
LmJlZ2luKCk7IGkgIT0gZTsgKytpKSB7Ci0gICAgICAgIGluZm8uYWRkSW5zdHJ1bWVudGVkTWVt
YmVyKGktPmZpcnN0KTsKLSAgICAgICAgaW5mby5hZGRJbnN0cnVtZW50ZWRNZW1iZXIoaS0+c2Vj
b25kKTsKKyAgICAgICAgaW5mby5hZGRJbnN0cnVtZW50ZWRNZW1iZXIoaS0+a2V5KTsKKyAgICAg
ICAgaW5mby5hZGRJbnN0cnVtZW50ZWRNZW1iZXIoaS0+dmFsdWUpOwogICAgIH0KICAgICBpbmZv
LmFkZFZlY3RvcihtX2FsbFJlc291cmNlcyk7CiAgICAgaW5mby5hZGRNZW1iZXIobV9saXZlRGVj
b2RlZFJlc291cmNlcyk7CkBAIC03MzgsNyArNzM4LDcgQEAgdm9pZCBNZW1vcnlDYWNoZTo6c2V0
RGlzYWJsZWQoYm9vbCBkaXNhYmxlZCkKICAgICAgICAgQ2FjaGVkUmVzb3VyY2VNYXA6Oml0ZXJh
dG9yIGkgPSBtX3Jlc291cmNlcy5iZWdpbigpOwogICAgICAgICBpZiAoaSA9PSBtX3Jlc291cmNl
cy5lbmQoKSkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBldmljdChpLT5zZWNvbmQpOwor
ICAgICAgICBldmljdChpLT52YWx1ZSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2ljb24vSWNvbkRhdGFiYXNlLmNwcAppbmRleCA3MTA2NDhmOTRhZGUxZmQ2MjBkZGRlYWRi
NjA3NmViZTVlNTEwYjIyLi5kYjA4MzNlMWVjNDc4M2Q2MzlmOGI1NTVlMjlkMDRjZDllZGZlZTU5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFzZS5jcHAKQEAgLTE5
Miw3ICsxOTIsNyBAQCB2b2lkIEljb25EYXRhYmFzZTo6cmVtb3ZlQWxsSWNvbnMoKQogICAgICAg
ICBIYXNoTWFwPFN0cmluZywgUGFnZVVSTFJlY29yZCo+OjppdGVyYXRvciBpdGVyID0gbV9wYWdl
VVJMVG9SZWNvcmRNYXAuYmVnaW4oKTsKICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFBhZ2VVUkxS
ZWNvcmQqPjo6aXRlcmF0b3IgZW5kID0gbV9wYWdlVVJMVG9SZWNvcmRNYXAuZW5kKCk7CiAgICAg
ICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKQotICAgICAgICAgICAgKCppdGVyKS5zZWNv
bmQtPnNldEljb25SZWNvcmQoMCk7CisgICAgICAgICAgICAoKml0ZXIpLnZhbHVlLT5zZXRJY29u
UmVjb3JkKDApOwogICAgICAgICAgICAgCiAgICAgICAgIC8vIENsZWFyIHRoZSBpY29uVVJMIC0+
IEljb25SZWNvcmQgbWFwCiAgICAgICAgIG1faWNvblVSTFRvUmVjb3JkTWFwLmNsZWFyKCk7CkBA
IC03ODUsNyArNzg1LDcgQEAgc2l6ZV90IEljb25EYXRhYmFzZTo6aWNvblJlY29yZENvdW50V2l0
aERhdGEoKQogICAgIEhhc2hNYXA8U3RyaW5nLCBJY29uUmVjb3JkKj46Oml0ZXJhdG9yIGVuZCA9
IG1faWNvblVSTFRvUmVjb3JkTWFwLmVuZCgpOwogICAgIAogICAgIGZvciAoOyBpICE9IGVuZDsg
KytpKQotICAgICAgICByZXN1bHQgKz0gKCgqaSkuc2Vjb25kLT5pbWFnZURhdGFTdGF0dXMoKSA9
PSBJbWFnZURhdGFTdGF0dXNQcmVzZW50KTsKKyAgICAgICAgcmVzdWx0ICs9ICgoKmkpLnZhbHVl
LT5pbWFnZURhdGFTdGF0dXMoKSA9PSBJbWFnZURhdGFTdGF0dXNQcmVzZW50KTsKICAgICAgICAg
ICAgIAogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0xNTU2LDEzICsxNTU2LDEzIEBAIHZvaWQg
SWNvbkRhdGFiYXNlOjpwZXJmb3JtUGVuZGluZ1JldGFpbkFuZFJlbGVhc2VPcGVyYXRpb25zKCkK
ICAgICB9CiAKICAgICBmb3IgKEhhc2hDb3VudGVkU2V0PFN0cmluZz46OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gdG9SZXRhaW4uYmVnaW4oKSwgZW5kID0gdG9SZXRhaW4uZW5kKCk7IGl0ICE9IGVuZDsg
KytpdCkgewotICAgICAgICBBU1NFUlQoIWl0LT5maXJzdC5pbXBsKCkgfHwgaXQtPmZpcnN0Lmlt
cGwoKS0+aGFzT25lUmVmKCkpOwotICAgICAgICBwZXJmb3JtUmV0YWluSWNvbkZvclBhZ2VVUkwo
aXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsKKyAgICAgICAgQVNTRVJUKCFpdC0+a2V5LmltcGwoKSB8
fCBpdC0+a2V5LmltcGwoKS0+aGFzT25lUmVmKCkpOworICAgICAgICBwZXJmb3JtUmV0YWluSWNv
bkZvclBhZ2VVUkwoaXQtPmtleSwgaXQtPnZhbHVlKTsKICAgICB9CiAKICAgICBmb3IgKEhhc2hD
b3VudGVkU2V0PFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdG9SZWxlYXNlLmJlZ2luKCks
IGVuZCA9IHRvUmVsZWFzZS5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIEFTU0VS
VCghaXQtPmZpcnN0LmltcGwoKSB8fCBpdC0+Zmlyc3QuaW1wbCgpLT5oYXNPbmVSZWYoKSk7Ci0g
ICAgICAgIHBlcmZvcm1SZWxlYXNlSWNvbkZvclBhZ2VVUkwoaXQtPmZpcnN0LCBpdC0+c2Vjb25k
KTsKKyAgICAgICAgQVNTRVJUKCFpdC0+a2V5LmltcGwoKSB8fCBpdC0+a2V5LmltcGwoKS0+aGFz
T25lUmVmKCkpOworICAgICAgICBwZXJmb3JtUmVsZWFzZUljb25Gb3JQYWdlVVJMKGl0LT5rZXks
IGl0LT52YWx1ZSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0RPTVdpbmRvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKaW5kZXgg
ZDc4N2E2NWJkNmQ4MGM1NTBmOGQxMmEwZDRmMTMxZjc4NjFkMTdhZC4uNmM4ODlmYWEzODMzNzZi
ZTVkYTcyNzQzMWY3N2M0MzM1MjBiYzliOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9ET01XaW5kb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcApA
QCAtMjQ4LDcgKzI0OCw3IEBAIGJvb2wgRE9NV2luZG93OjpkaXNwYXRjaEFsbFBlbmRpbmdCZWZv
cmVVbmxvYWRFdmVudHMoKQogICAgIFZlY3RvcjxSZWZQdHI8RE9NV2luZG93PiA+IHdpbmRvd3M7
CiAgICAgRE9NV2luZG93U2V0OjppdGVyYXRvciBlbmQgPSBzZXQuZW5kKCk7CiAgICAgZm9yIChE
T01XaW5kb3dTZXQ6Oml0ZXJhdG9yIGl0ID0gc2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkK
LSAgICAgICAgd2luZG93cy5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgd2luZG93cy5hcHBl
bmQoaXQtPmtleSk7CiAKICAgICBzaXplX3Qgc2l6ZSA9IHdpbmRvd3Muc2l6ZSgpOwogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CkBAIC0yOTAsNyArMjkwLDcgQEAgdm9p
ZCBET01XaW5kb3c6OmRpc3BhdGNoQWxsUGVuZGluZ1VubG9hZEV2ZW50cygpCiAgICAgVmVjdG9y
PFJlZlB0cjxET01XaW5kb3c+ID4gd2luZG93czsKICAgICBET01XaW5kb3dTZXQ6Oml0ZXJhdG9y
IGVuZCA9IHNldC5lbmQoKTsKICAgICBmb3IgKERPTVdpbmRvd1NldDo6aXRlcmF0b3IgaXQgPSBz
ZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICB3aW5kb3dzLmFwcGVuZChpdC0+
Zmlyc3QpOworICAgICAgICB3aW5kb3dzLmFwcGVuZChpdC0+a2V5KTsKIAogICAgIHNpemVfdCBz
aXplID0gd2luZG93cy5zaXplKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyAr
K2kpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCA5NTdhZGEzNDAxNDA1
ZTI2MzMwZGQ0MmQ1YjQ1NzVlZjI5ZDY2NWFkLi43ZTVkZTUwNzE5NGQ0ZWIyYTU5MzczNmRlOTZj
Zjk1NDY3MzgxYmQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC0zNjM3
LDcgKzM2MzcsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlVG91Y2hFdmVudChjb25zdCBQ
bGF0Zm9ybVRvdWNoRXZlbnQmIGV2ZW50KQogICAgICAgICAvLyByZWxlYXNlZCBvciBjYW5jZWxs
ZWQgaXQgd2lsbCBvbmx5IGFwcGVhciBpbiB0aGUgY2hhbmdlZFRvdWNoZXMgbGlzdC4KICAgICAg
ICAgaWYgKHBvaW50U3RhdGUgIT0gUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFJlbGVhc2VkICYm
IHBvaW50U3RhdGUgIT0gUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaENhbmNlbGxlZCkgewogICAg
ICAgICAgICAgdG91Y2hlcy0+YXBwZW5kKHRvdWNoKTsKLSAgICAgICAgICAgIHRhcmdldFRvdWNo
ZXNJdGVyYXRvci0+c2Vjb25kLT5hcHBlbmQodG91Y2gpOworICAgICAgICAgICAgdGFyZ2V0VG91
Y2hlc0l0ZXJhdG9yLT52YWx1ZS0+YXBwZW5kKHRvdWNoKTsKICAgICAgICAgfQogCiAgICAgICAg
IC8vIE5vdyBidWlsZCB1cCB0aGUgY29ycmVjdCBsaXN0IGZvciBjaGFuZ2VkVG91Y2hlcy4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9GcmFtZS5jcHAKaW5kZXggMTg3NGRkZWYyZTFkMTY0NDY4NWZhMjBmMTk5MDQxNzU0MmVm
Mzk4Mi4uZThhODU5ZTg2ZDgyNTRhNTA1YjA5NjllZTQ2MzhhZGQ0YzE4ODk0NiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9GcmFtZS5jcHAKQEAgLTU4MCw3ICs1ODAsNyBAQCB2b2lkIEZyYW1lOjppbmplY3RVc2VyU2Ny
aXB0cyhVc2VyU2NyaXB0SW5qZWN0aW9uVGltZSBpbmplY3Rpb25UaW1lKQogICAgICAgICByZXR1
cm47CiAgICAgVXNlclNjcmlwdE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gdXNlclNjcmlwdHMt
PmVuZCgpOwogICAgIGZvciAoVXNlclNjcmlwdE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSB1c2Vy
U2NyaXB0cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpbmplY3RVc2VyU2Ny
aXB0c0ZvcldvcmxkKGl0LT5maXJzdC5nZXQoKSwgKml0LT5zZWNvbmQsIGluamVjdGlvblRpbWUp
OworICAgICAgICBpbmplY3RVc2VyU2NyaXB0c0ZvcldvcmxkKGl0LT5rZXkuZ2V0KCksICppdC0+
dmFsdWUsIGluamVjdGlvblRpbWUpOwogfQogCiB2b2lkIEZyYW1lOjppbmplY3RVc2VyU2NyaXB0
c0ZvcldvcmxkKERPTVdyYXBwZXJXb3JsZCogd29ybGQsIGNvbnN0IFVzZXJTY3JpcHRWZWN0b3Im
IHVzZXJTY3JpcHRzLCBVc2VyU2NyaXB0SW5qZWN0aW9uVGltZSBpbmplY3Rpb25UaW1lKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlR3JvdXAuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9QYWdlR3JvdXAuY3BwCmluZGV4IDQ1ZDI1ZjU1MjE0ZDc0NDE5NGU5MzdmYTMxZTZl
NjQ2MGVhY2FmOTIuLjAzMjdiYjBiNmM3ZWViODNjMmMzZTlkMDI2MjdiODBkYzcxOWMxZjMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5jcHAKQEAgLTkzLDEyICs5MywxMiBAQCBQYWdlR3JvdXAq
IFBhZ2VHcm91cDo6cGFnZUdyb3VwKGNvbnN0IFN0cmluZyYgZ3JvdXBOYW1lKQogICAgIFBhZ2VH
cm91cE1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IHBhZ2VHcm91cHMtPmFkZChncm91cE5hbWUsIDAp
OwogCiAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIEFTU0VSVCghcmVzdWx0
Lml0ZXJhdG9yLT5zZWNvbmQpOwotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IG5l
dyBQYWdlR3JvdXAoZ3JvdXBOYW1lKTsKKyAgICAgICAgQVNTRVJUKCFyZXN1bHQuaXRlcmF0b3It
PnZhbHVlKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IG5ldyBQYWdlR3JvdXAo
Z3JvdXBOYW1lKTsKICAgICB9CiAKLSAgICBBU1NFUlQocmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQp
OwotICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBBU1NFUlQocmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZSk7CisgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiB9
CiAKIHZvaWQgUGFnZUdyb3VwOjpjbG9zZUxvY2FsU3RvcmFnZSgpCkBAIC0xMDksOCArMTA5LDgg
QEAgdm9pZCBQYWdlR3JvdXA6OmNsb3NlTG9jYWxTdG9yYWdlKCkKICAgICBQYWdlR3JvdXBNYXA6
Oml0ZXJhdG9yIGVuZCA9IHBhZ2VHcm91cHMtPmVuZCgpOwogCiAgICAgZm9yIChQYWdlR3JvdXBN
YXA6Oml0ZXJhdG9yIGl0ID0gcGFnZUdyb3Vwcy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7
Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kLT5oYXNMb2NhbFN0b3JhZ2UoKSkKLSAgICAgICAgICAg
IGl0LT5zZWNvbmQtPmxvY2FsU3RvcmFnZSgpLT5jbG9zZSgpOworICAgICAgICBpZiAoaXQtPnZh
bHVlLT5oYXNMb2NhbFN0b3JhZ2UoKSkKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+bG9jYWxTdG9y
YWdlKCktPmNsb3NlKCk7CiAgICAgfQogfQogCkBAIC0xMjEsOCArMTIxLDggQEAgdm9pZCBQYWdl
R3JvdXA6OmNsZWFyTG9jYWxTdG9yYWdlRm9yQWxsT3JpZ2lucygpCiAKICAgICBQYWdlR3JvdXBN
YXA6Oml0ZXJhdG9yIGVuZCA9IHBhZ2VHcm91cHMtPmVuZCgpOwogICAgIGZvciAoUGFnZUdyb3Vw
TWFwOjppdGVyYXRvciBpdCA9IHBhZ2VHcm91cHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewotICAgICAgICBpZiAoaXQtPnNlY29uZC0+aGFzTG9jYWxTdG9yYWdlKCkpCi0gICAgICAgICAg
ICBpdC0+c2Vjb25kLT5sb2NhbFN0b3JhZ2UoKS0+Y2xlYXJBbGxPcmlnaW5zRm9yRGVsZXRpb24o
KTsKKyAgICAgICAgaWYgKGl0LT52YWx1ZS0+aGFzTG9jYWxTdG9yYWdlKCkpCisgICAgICAgICAg
ICBpdC0+dmFsdWUtPmxvY2FsU3RvcmFnZSgpLT5jbGVhckFsbE9yaWdpbnNGb3JEZWxldGlvbigp
OwogICAgIH0KIH0KIApAQCAtMTMzLDggKzEzMyw4IEBAIHZvaWQgUGFnZUdyb3VwOjpjbGVhckxv
Y2FsU3RvcmFnZUZvck9yaWdpbihTZWN1cml0eU9yaWdpbiogb3JpZ2luKQogCiAgICAgUGFnZUdy
b3VwTWFwOjppdGVyYXRvciBlbmQgPSBwYWdlR3JvdXBzLT5lbmQoKTsKICAgICBmb3IgKFBhZ2VH
cm91cE1hcDo6aXRlcmF0b3IgaXQgPSBwYWdlR3JvdXBzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQtPmhhc0xvY2FsU3RvcmFnZSgpKQotICAgICAg
ICAgICAgaXQtPnNlY29uZC0+bG9jYWxTdG9yYWdlKCktPmNsZWFyT3JpZ2luRm9yRGVsZXRpb24o
b3JpZ2luKTsKKyAgICAgICAgaWYgKGl0LT52YWx1ZS0+aGFzTG9jYWxTdG9yYWdlKCkpCisgICAg
ICAgICAgICBpdC0+dmFsdWUtPmxvY2FsU3RvcmFnZSgpLT5jbGVhck9yaWdpbkZvckRlbGV0aW9u
KG9yaWdpbik7CiAgICAgfSAgICAKIH0KICAgICAKQEAgLTE0NSw4ICsxNDUsOCBAQCB2b2lkIFBh
Z2VHcm91cDo6c3luY0xvY2FsU3RvcmFnZSgpCiAKICAgICBQYWdlR3JvdXBNYXA6Oml0ZXJhdG9y
IGVuZCA9IHBhZ2VHcm91cHMtPmVuZCgpOwogICAgIGZvciAoUGFnZUdyb3VwTWFwOjppdGVyYXRv
ciBpdCA9IHBhZ2VHcm91cHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBp
ZiAoaXQtPnNlY29uZC0+aGFzTG9jYWxTdG9yYWdlKCkpCi0gICAgICAgICAgICBpdC0+c2Vjb25k
LT5sb2NhbFN0b3JhZ2UoKS0+c3luYygpOworICAgICAgICBpZiAoaXQtPnZhbHVlLT5oYXNMb2Nh
bFN0b3JhZ2UoKSkKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+bG9jYWxTdG9yYWdlKCktPnN5bmMo
KTsKICAgICB9CiB9CiAKQEAgLTI2OSw3ICsyNjksNyBAQCB2b2lkIFBhZ2VHcm91cDo6YWRkVXNl
clNjcmlwdFRvV29ybGQoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCwgY29uc3QgU3RyaW5nJiBzb3Vy
YwogICAgIE93blB0cjxVc2VyU2NyaXB0PiB1c2VyU2NyaXB0ID0gYWRvcHRQdHIobmV3IFVzZXJT
Y3JpcHQoc291cmNlLCB1cmwsIHdoaXRlbGlzdCwgYmxhY2tsaXN0LCBpbmplY3Rpb25UaW1lLCBp
bmplY3RlZEZyYW1lcykpOwogICAgIGlmICghbV91c2VyU2NyaXB0cykKICAgICAgICAgbV91c2Vy
U2NyaXB0cyA9IGFkb3B0UHRyKG5ldyBVc2VyU2NyaXB0TWFwKTsKLSAgICBPd25QdHI8VXNlclNj
cmlwdFZlY3Rvcj4mIHNjcmlwdHNJbldvcmxkID0gbV91c2VyU2NyaXB0cy0+YWRkKHdvcmxkLCBu
dWxscHRyKS5pdGVyYXRvci0+c2Vjb25kOworICAgIE93blB0cjxVc2VyU2NyaXB0VmVjdG9yPiYg
c2NyaXB0c0luV29ybGQgPSBtX3VzZXJTY3JpcHRzLT5hZGQod29ybGQsIG51bGxwdHIpLml0ZXJh
dG9yLT52YWx1ZTsKICAgICBpZiAoIXNjcmlwdHNJbldvcmxkKQogICAgICAgICBzY3JpcHRzSW5X
b3JsZCA9IGFkb3B0UHRyKG5ldyBVc2VyU2NyaXB0VmVjdG9yKTsKICAgICBzY3JpcHRzSW5Xb3Js
ZC0+YXBwZW5kKHVzZXJTY3JpcHQucmVsZWFzZSgpKTsKQEAgLTI4Niw3ICsyODYsNyBAQCB2b2lk
IFBhZ2VHcm91cDo6YWRkVXNlclN0eWxlU2hlZXRUb1dvcmxkKERPTVdyYXBwZXJXb3JsZCogd29y
bGQsIGNvbnN0IFN0cmluZyYgcwogICAgIE93blB0cjxVc2VyU3R5bGVTaGVldD4gdXNlclN0eWxl
U2hlZXQgPSBhZG9wdFB0cihuZXcgVXNlclN0eWxlU2hlZXQoc291cmNlLCB1cmwsIHdoaXRlbGlz
dCwgYmxhY2tsaXN0LCBpbmplY3RlZEZyYW1lcywgbGV2ZWwpKTsKICAgICBpZiAoIW1fdXNlclN0
eWxlU2hlZXRzKQogICAgICAgICBtX3VzZXJTdHlsZVNoZWV0cyA9IGFkb3B0UHRyKG5ldyBVc2Vy
U3R5bGVTaGVldE1hcCk7Ci0gICAgT3duUHRyPFVzZXJTdHlsZVNoZWV0VmVjdG9yPiYgc3R5bGVT
aGVldHNJbldvcmxkID0gbV91c2VyU3R5bGVTaGVldHMtPmFkZCh3b3JsZCwgbnVsbHB0cikuaXRl
cmF0b3ItPnNlY29uZDsKKyAgICBPd25QdHI8VXNlclN0eWxlU2hlZXRWZWN0b3I+JiBzdHlsZVNo
ZWV0c0luV29ybGQgPSBtX3VzZXJTdHlsZVNoZWV0cy0+YWRkKHdvcmxkLCBudWxscHRyKS5pdGVy
YXRvci0+dmFsdWU7CiAgICAgaWYgKCFzdHlsZVNoZWV0c0luV29ybGQpCiAgICAgICAgIHN0eWxl
U2hlZXRzSW5Xb3JsZCA9IGFkb3B0UHRyKG5ldyBVc2VyU3R5bGVTaGVldFZlY3Rvcik7CiAgICAg
c3R5bGVTaGVldHNJbldvcmxkLT5hcHBlbmQodXNlclN0eWxlU2hlZXQucmVsZWFzZSgpKTsKQEAg
LTMwNiw3ICszMDYsNyBAQCB2b2lkIFBhZ2VHcm91cDo6cmVtb3ZlVXNlclNjcmlwdEZyb21Xb3Js
ZChET01XcmFwcGVyV29ybGQqIHdvcmxkLCBjb25zdCBLVVJMJiB1cgogICAgIGlmIChpdCA9PSBt
X3VzZXJTY3JpcHRzLT5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIFVzZXJTY3Jp
cHRWZWN0b3IqIHNjcmlwdHMgPSBpdC0+c2Vjb25kLmdldCgpOworICAgIFVzZXJTY3JpcHRWZWN0
b3IqIHNjcmlwdHMgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgZm9yIChpbnQgaSA9IHNjcmlwdHMt
PnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7CiAgICAgICAgIGlmIChzY3JpcHRzLT5hdChpKS0+
dXJsKCkgPT0gdXJsKQogICAgICAgICAgICAgc2NyaXB0cy0+cmVtb3ZlKGkpOwpAQCAtMzI4LDcg
KzMyOCw3IEBAIHZvaWQgUGFnZUdyb3VwOjpyZW1vdmVVc2VyU3R5bGVTaGVldEZyb21Xb3JsZChE
T01XcmFwcGVyV29ybGQqIHdvcmxkLCBjb25zdCBLVVJMCiAgICAgaWYgKGl0ID09IG1fdXNlclN0
eWxlU2hlZXRzLT5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIFVzZXJTdHlsZVNo
ZWV0VmVjdG9yKiBzdHlsZXNoZWV0cyA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgVXNlclN0eWxl
U2hlZXRWZWN0b3IqIHN0eWxlc2hlZXRzID0gaXQtPnZhbHVlLmdldCgpOwogICAgIGZvciAoaW50
IGkgPSBzdHlsZXNoZWV0cy0+c2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKICAgICAgICAgaWYg
KHN0eWxlc2hlZXRzLT5hdChpKS0+dXJsKCkgPT0gdXJsKSB7CiAgICAgICAgICAgICBzdHlsZXNo
ZWV0cy0+cmVtb3ZlKGkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2Vy
aWFsaXplci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcAppbmRl
eCBjOTExZDU0YTkyNTQ2YTdjZTE0ZjE4NjZlY2JjZWQ4YjU2ZTU2NjNiLi5hMTYxNDkyNTVjN2Uz
ZTQyNjAzOWM0YTEzMmZiMTYyYmM3YTE3ZmU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1BhZ2VTZXJpYWxpemVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJp
YWxpemVyLmNwcApAQCAtMzM5LDcgKzMzOSw3IEBAIEtVUkwgUGFnZVNlcmlhbGl6ZXI6OnVybEZv
ckJsYW5rRnJhbWUoRnJhbWUqIGZyYW1lKQogewogICAgIEhhc2hNYXA8RnJhbWUqLCBLVVJMPjo6
aXRlcmF0b3IgaXRlciA9IG1fYmxhbmtGcmFtZVVSTHMuZmluZChmcmFtZSk7CiAgICAgaWYgKGl0
ZXIgIT0gbV9ibGFua0ZyYW1lVVJMcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0ZXItPnNlY29u
ZDsKKyAgICAgICAgcmV0dXJuIGl0ZXItPnZhbHVlOwogICAgIFN0cmluZyB1cmwgPSAid3ljaXd5
ZzovL2ZyYW1lLyIgKyBTdHJpbmc6Om51bWJlcihtX2JsYW5rRnJhbWVDb3VudGVyKyspOwogICAg
IEtVUkwgZmFrZVVSTChQYXJzZWRVUkxTdHJpbmcsIHVybCk7CiAgICAgbV9ibGFua0ZyYW1lVVJM
cy5hZGQoZnJhbWUsIGZha2VVUkwpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9T
ZWN1cml0eVBvbGljeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5UG9saWN5LmNw
cAppbmRleCBjMmE1YWIxMTQzNWVmNmRiMDU3NjhjNzZjYTAzNTdiNTYyNTgzMzEyLi41YjM2ZjRm
NzE2YzQ0YmZiMDlmMjBlNjMyY2MwZDAzODZmM2NjYTNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1NlY3VyaXR5UG9saWN5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Nl
Y3VyaXR5UG9saWN5LmNwcApAQCAtMTMzLDkgKzEzMyw5IEBAIHZvaWQgU2VjdXJpdHlQb2xpY3k6
OmFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KGNvbnN0IFNlY3VyaXR5T3JpZ2luJiBzb3Vy
Y2VPCiAgICAgU3RyaW5nIHNvdXJjZVN0cmluZyA9IHNvdXJjZU9yaWdpbi50b1N0cmluZygpOwog
ICAgIE9yaWdpbkFjY2Vzc01hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG9yaWdpbkFjY2Vzc01hcCgp
LmFkZChzb3VyY2VTdHJpbmcsIG51bGxwdHIpOwogICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkK
LSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBhZG9wdFB0cihuZXcgT3JpZ2luQWNj
ZXNzV2hpdGVMaXN0KTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGFkb3B0UHRy
KG5ldyBPcmlnaW5BY2Nlc3NXaGl0ZUxpc3QpOwogCi0gICAgT3JpZ2luQWNjZXNzV2hpdGVMaXN0
KiBsaXN0ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQuZ2V0KCk7CisgICAgT3JpZ2luQWNjZXNz
V2hpdGVMaXN0KiBsaXN0ID0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKICAgICBsaXN0
LT5hcHBlbmQoT3JpZ2luQWNjZXNzRW50cnkoZGVzdGluYXRpb25Qcm90b2NvbCwgZGVzdGluYXRp
b25Eb21haW4sIGFsbG93RGVzdGluYXRpb25TdWJkb21haW5zID8gT3JpZ2luQWNjZXNzRW50cnk6
OkFsbG93U3ViZG9tYWlucyA6IE9yaWdpbkFjY2Vzc0VudHJ5OjpEaXNhbGxvd1N1YmRvbWFpbnMp
KTsKIH0KIApAQCAtMTUyLDcgKzE1Miw3IEBAIHZvaWQgU2VjdXJpdHlQb2xpY3k6OnJlbW92ZU9y
aWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KGNvbnN0IFNlY3VyaXR5T3JpZ2luJiBzb3VyCiAgICAg
aWYgKGl0ID09IG1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgT3JpZ2luQWNjZXNz
V2hpdGVMaXN0KiBsaXN0ID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICBPcmlnaW5BY2Nlc3NXaGl0
ZUxpc3QqIGxpc3QgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgc2l6ZV90IGluZGV4ID0gbGlzdC0+
ZmluZChPcmlnaW5BY2Nlc3NFbnRyeShkZXN0aW5hdGlvblByb3RvY29sLCBkZXN0aW5hdGlvbkRv
bWFpbiwgYWxsb3dEZXN0aW5hdGlvblN1YmRvbWFpbnMgPyBPcmlnaW5BY2Nlc3NFbnRyeTo6QWxs
b3dTdWJkb21haW5zIDogT3JpZ2luQWNjZXNzRW50cnk6OkRpc2FsbG93U3ViZG9tYWlucykpOwog
ICAgIGlmIChpbmRleCA9PSBub3RGb3VuZCkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Nl
dHRpbmdzLmNwcAppbmRleCBlOTdjNjRmNzNkY2IwZTI3YWU0OTY0ZDQ3NWU2MmFiODI5YjNmYzU0
Li5hNTRlZDNiNWRmMmU0OGU4Nzg5OTRmYjQ1MWUwMTJlNTU2ZTkyMzMxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L1NldHRpbmdzLmNwcApAQCAtNjAsNyArNjAsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0R2Vu
ZXJpY0ZvbnRGYW1pbHlNYXAoU2NyaXB0Rm9udEZhbWlseU1hcCYgZm9udE1hcCwgY29uc3QgQQog
ICAgICAgICBpZiAoaXQgPT0gZm9udE1hcC5lbmQoKSkKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgZm9udE1hcC5yZW1vdmUoaXQpOwotICAgIH0gZWxzZSBpZiAoaXQgIT0gZm9udE1hcC5l
bmQoKSAmJiBpdC0+c2Vjb25kID09IGZhbWlseSkKKyAgICB9IGVsc2UgaWYgKGl0ICE9IGZvbnRN
YXAuZW5kKCkgJiYgaXQtPnZhbHVlID09IGZhbWlseSkKICAgICAgICAgcmV0dXJuOwogICAgIGVs
c2UKICAgICAgICAgZm9udE1hcC5zZXQoc3RhdGljX2Nhc3Q8aW50PihzY3JpcHQpLCBmYW1pbHkp
OwpAQCAtNzMsNyArNzMsNyBAQCBzdGF0aWMgaW5saW5lIGNvbnN0IEF0b21pY1N0cmluZyYgZ2V0
R2VuZXJpY0ZvbnRGYW1pbHlGb3JTY3JpcHQoY29uc3QgU2NyaXB0Rm9udAogewogICAgIFNjcmlw
dEZvbnRGYW1pbHlNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZm9udE1hcC5maW5kKHN0YXRpY19j
YXN0PGludD4oc2NyaXB0KSk7CiAgICAgaWYgKGl0ICE9IGZvbnRNYXAuZW5kKCkpCi0gICAgICAg
IHJldHVybiBpdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwogICAgIGlmIChz
Y3JpcHQgIT0gVVNDUklQVF9DT01NT04pCiAgICAgICAgIHJldHVybiBnZXRHZW5lcmljRm9udEZh
bWlseUZvclNjcmlwdChmb250TWFwLCBVU0NSSVBUX0NPTU1PTik7CiAgICAgcmV0dXJuIGVtcHR5
QXRvbTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU3BlZWNoSW5wdXQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9TcGVlY2hJbnB1dC5jcHAKaW5kZXggMDEyOGVmOGE0MGE0MjQz
NTRhYjVmOGU1MGJhOGVjYzYyMjU3YjNjOS4uODMyOGM1ZDRkZjMyOTk0MmI1OWYzZWNjMjI1MzU2
OGNlMmE4YTExZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9TcGVlY2hJbnB1dC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TcGVlY2hJbnB1dC5jcHAKQEAgLTYyLDcgKzYy
LDcgQEAgaW50IFNwZWVjaElucHV0OjpyZWdpc3Rlckxpc3RlbmVyKFNwZWVjaElucHV0TGlzdGVu
ZXIqIGxpc3RlbmVyKQogI2lmIGRlZmluZWQoREVCVUcpCiAgICAgLy8gQ2hlY2sgaWYgYWxyZWFk
eSBwcmVzZW50LgogICAgIGZvciAoSGFzaE1hcDxpbnQsIFNwZWVjaElucHV0TGlzdGVuZXIqPjo6
aXRlcmF0b3IgaXQgPSBtX2xpc3RlbmVycy5iZWdpbigpOyBpdCAhPSBtX2xpc3RlbmVycy5lbmQo
KTsgKytpdCkKLSAgICAgIEFTU0VSVChpdC0+c2Vjb25kICE9IGxpc3RlbmVyKTsKKyAgICAgIEFT
U0VSVChpdC0+dmFsdWUgIT0gbGlzdGVuZXIpOwogI2VuZGlmCiAKICAgICBtX2xpc3RlbmVycy5h
ZGQobV9uZXh0TGlzdGVuZXJJZCwgbGlzdGVuZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9XaW5kb3dGZWF0dXJlcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1dpbmRvd0Zl
YXR1cmVzLmNwcAppbmRleCA3NTY0MTUyOGRmZWMyZjRiZWM3ZWVhMzNkMDc0MGEwZGM3ZDdiYWM0
Li4xYjZiMWQwYjE2MzJlODJhOTRlZjA0Njc5ZDBhN2Q0N2FkMzFjYjUwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL1dpbmRvd0ZlYXR1cmVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1dpbmRvd0ZlYXR1cmVzLmNwcApAQCAtMjEyLDcgKzIxMiw3IEBAIGJvb2wgV2luZG93
RmVhdHVyZXM6OmJvb2xGZWF0dXJlKGNvbnN0IERpYWxvZ0ZlYXR1cmVzTWFwJiBmZWF0dXJlcywg
Y29uc3QgY2hhcioKICAgICBEaWFsb2dGZWF0dXJlc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBm
ZWF0dXJlcy5maW5kKGtleSk7CiAgICAgaWYgKGl0ID09IGZlYXR1cmVzLmVuZCgpKQogICAgICAg
ICByZXR1cm4gZGVmYXVsdFZhbHVlOwotICAgIGNvbnN0IFN0cmluZyYgdmFsdWUgPSBpdC0+c2Vj
b25kOworICAgIGNvbnN0IFN0cmluZyYgdmFsdWUgPSBpdC0+dmFsdWU7CiAgICAgcmV0dXJuIHZh
bHVlLmlzTnVsbCgpIHx8IHZhbHVlID09ICIxIiB8fCB2YWx1ZSA9PSAieWVzIiB8fCB2YWx1ZSA9
PSAib24iOwogfQogCkBAIC0yMjQsNyArMjI0LDcgQEAgZmxvYXQgV2luZG93RmVhdHVyZXM6OmZs
b2F0RmVhdHVyZShjb25zdCBEaWFsb2dGZWF0dXJlc01hcCYgZmVhdHVyZXMsIGNvbnN0IGNoYXIK
ICAgICAvLyBGSVhNRTogVGhlIHRvRG91YmxlIGZ1bmN0aW9uIGRvZXMgbm90IG9mZmVyIGEgd2F5
IHRvIHRlbGwgIjBxIiBmcm9tIHN0cmluZyB3aXRoIG5vIGRpZ2l0cyBpbiBpdDogQm90aAogICAg
IC8vIHJldHVybiB0aGUgbnVtYmVyIDAgYW5kIGZhbHNlIGZvciBvay4gQnV0ICIwcSIgc2hvdWxk
IHlpZWxkIHRoZSBtaW5pbXVtIHJhdGhlciB0aGFuIHRoZSBkZWZhdWx0LgogICAgIGJvb2wgb2s7
Ci0gICAgZG91YmxlIHBhcnNlZE51bWJlciA9IGl0LT5zZWNvbmQudG9Eb3VibGUoJm9rKTsKKyAg
ICBkb3VibGUgcGFyc2VkTnVtYmVyID0gaXQtPnZhbHVlLnRvRG91YmxlKCZvayk7CiAgICAgaWYg
KChwYXJzZWROdW1iZXIgPT0gMCAmJiAhb2spIHx8IGlzbmFuKHBhcnNlZE51bWJlcikpCiAgICAg
ICAgIHJldHVybiBkZWZhdWx0VmFsdWU7CiAgICAgaWYgKHBhcnNlZE51bWJlciA8IG1pbiB8fCBt
YXggPD0gbWluKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5p
bWF0aW9uQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Bbmlt
YXRpb25Db250cm9sbGVyLmNwcAppbmRleCBjNDkxMTllNmExM2MwMTRjOGYyNThlMjk0NjEzODEx
Y2RmYTBkNTFiLi41ZTA3MTdlMGE5Y2ZiYTMyODk4Mjk1NjIxNzc5MTJjMDZmNzhjOGJlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9s
bGVyLmNwcApAQCAtOTMsMTQgKzkzLDE0IEBAIGRvdWJsZSBBbmltYXRpb25Db250cm9sbGVyUHJp
dmF0ZTo6dXBkYXRlQW5pbWF0aW9ucyhTZXRDaGFuZ2VkIGNhbGxTZXRDaGFuZ2VkLyoKIAogICAg
IFJlbmRlck9iamVjdEFuaW1hdGlvbk1hcDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9
IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5lbmQoKTsKICAgICBmb3IgKFJlbmRlck9iamVjdEFuaW1h
dGlvbk1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuYmVnaW4o
KTsgaXQgIT0gYW5pbWF0aW9uc0VuZDsgKytpdCkgewotICAgICAgICBDb21wb3NpdGVBbmltYXRp
b24qIGNvbXBBbmltID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgQ29tcG9zaXRlQW5pbWF0
aW9uKiBjb21wQW5pbSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgaWYgKCFjb21wQW5pbS0+
c3VzcGVuZGVkKCkgJiYgY29tcEFuaW0tPmhhc0FuaW1hdGlvbnMoKSkgewogICAgICAgICAgICAg
ZG91YmxlIHQgPSBjb21wQW5pbS0+dGltZVRvTmV4dFNlcnZpY2UoKTsKICAgICAgICAgICAgIGlm
ICh0ICE9IC0xICYmICh0IDwgdGltZVRvTmV4dFNlcnZpY2UgfHwgdGltZVRvTmV4dFNlcnZpY2Ug
PT0gLTEpKQogICAgICAgICAgICAgICAgIHRpbWVUb05leHRTZXJ2aWNlID0gdDsKICAgICAgICAg
ICAgIGlmICghdGltZVRvTmV4dFNlcnZpY2UpIHsKICAgICAgICAgICAgICAgICBpZiAoY2FsbFNl
dENoYW5nZWQgPT0gQ2FsbFNldENoYW5nZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgTm9kZSog
bm9kZSA9IGl0LT5maXJzdC0+bm9kZSgpOworICAgICAgICAgICAgICAgICAgICBOb2RlKiBub2Rl
ID0gaXQtPmtleS0+bm9kZSgpOwogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIW5vZGUgfHwg
KG5vZGUtPmRvY3VtZW50KCkgJiYgIW5vZGUtPmRvY3VtZW50KCktPmluUGFnZUNhY2hlKCkpKTsK
ICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0TmVlZHNTdHlsZVJlY2FsYyhTeW50aGV0aWNT
dHlsZUNoYW5nZSk7CiAgICAgICAgICAgICAgICAgICAgIGNhbGxlZFNldENoYW5nZWQgPSB0cnVl
OwpAQCAtMjkyLDkgKzI5Miw5IEBAIHZvaWQgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnN1
c3BlbmRBbmltYXRpb25zRm9yRG9jdW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50CiAgICAgCiAgICAg
UmVuZGVyT2JqZWN0QW5pbWF0aW9uTWFwOjpjb25zdF9pdGVyYXRvciBhbmltYXRpb25zRW5kID0g
bV9jb21wb3NpdGVBbmltYXRpb25zLmVuZCgpOwogICAgIGZvciAoUmVuZGVyT2JqZWN0QW5pbWF0
aW9uTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5iZWdpbigp
OyBpdCAhPSBhbmltYXRpb25zRW5kOyArK2l0KSB7Ci0gICAgICAgIFJlbmRlck9iamVjdCogcmVu
ZGVyZXIgPSBpdC0+Zmlyc3Q7CisgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBpdC0+
a2V5OwogICAgICAgICBpZiAocmVuZGVyZXItPmRvY3VtZW50KCkgPT0gZG9jdW1lbnQpIHsKLSAg
ICAgICAgICAgIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcEFuaW0gPSBpdC0+c2Vjb25kLmdldCgp
OworICAgICAgICAgICAgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wQW5pbSA9IGl0LT52YWx1ZS5n
ZXQoKTsKICAgICAgICAgICAgIGNvbXBBbmltLT5zdXNwZW5kQW5pbWF0aW9ucygpOwogICAgICAg
ICB9CiAgICAgfQpAQCAtMzA4LDkgKzMwOCw5IEBAIHZvaWQgQW5pbWF0aW9uQ29udHJvbGxlclBy
aXZhdGU6OnJlc3VtZUFuaW1hdGlvbnNGb3JEb2N1bWVudChEb2N1bWVudCogZG9jdW1lbnQpCiAg
ICAgCiAgICAgUmVuZGVyT2JqZWN0QW5pbWF0aW9uTWFwOjpjb25zdF9pdGVyYXRvciBhbmltYXRp
b25zRW5kID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmVuZCgpOwogICAgIGZvciAoUmVuZGVyT2Jq
ZWN0QW5pbWF0aW9uTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fY29tcG9zaXRlQW5pbWF0aW9u
cy5iZWdpbigpOyBpdCAhPSBhbmltYXRpb25zRW5kOyArK2l0KSB7Ci0gICAgICAgIFJlbmRlck9i
amVjdCogcmVuZGVyZXIgPSBpdC0+Zmlyc3Q7CisgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVy
ZXIgPSBpdC0+a2V5OwogICAgICAgICBpZiAocmVuZGVyZXItPmRvY3VtZW50KCkgPT0gZG9jdW1l
bnQpIHsKLSAgICAgICAgICAgIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcEFuaW0gPSBpdC0+c2Vj
b25kLmdldCgpOworICAgICAgICAgICAgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wQW5pbSA9IGl0
LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGNvbXBBbmltLT5yZXN1bWVBbmltYXRpb25zKCk7
CiAgICAgICAgIH0KICAgICB9CkBAIC0zOTYsOCArMzk2LDggQEAgdW5zaWduZWQgQW5pbWF0aW9u
Q29udHJvbGxlclByaXZhdGU6Om51bWJlck9mQWN0aXZlQW5pbWF0aW9ucyhEb2N1bWVudCogZG9j
dW1lbnQKICAgICAKICAgICBSZW5kZXJPYmplY3RBbmltYXRpb25NYXA6OmNvbnN0X2l0ZXJhdG9y
IGFuaW1hdGlvbnNFbmQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuZW5kKCk7CiAgICAgZm9yIChS
ZW5kZXJPYmplY3RBbmltYXRpb25NYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9jb21wb3NpdGVB
bmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGFuaW1hdGlvbnNFbmQ7ICsraXQpIHsKLSAgICAgICAg
UmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGl0LT5maXJzdDsKLSAgICAgICAgQ29tcG9zaXRlQW5p
bWF0aW9uKiBjb21wQW5pbSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIFJlbmRlck9iamVj
dCogcmVuZGVyZXIgPSBpdC0+a2V5OworICAgICAgICBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBB
bmltID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICBpZiAocmVuZGVyZXItPmRvY3VtZW50KCkg
PT0gZG9jdW1lbnQpCiAgICAgICAgICAgICBjb3VudCArPSBjb21wQW5pbS0+bnVtYmVyT2ZBY3Rp
dmVBbmltYXRpb25zKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9h
bmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5p
bWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHAKaW5kZXggZjM1Nzc4MTg5NzQwZWUzNmU4YTMz
YTUwYWY2Y2FkNTY5MjkwZjk2Yi4uMGIwZjM3OWQ1NmFiZDg1YzYzYmFlMTRjZTVlYTJiNDlhYjEz
ZWU4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ29tcG9zaXRl
QW5pbWF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3Np
dGVBbmltYXRpb24uY3BwCkBAIC01OCw3ICs1OCw3IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9u
OjpjbGVhclJlbmRlcmVyKCkKICAgICAgICAgLy8gYW4gYW5pbWF0aW9uIGNhbGxiYWNrIChzZWUg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMDUyKQogICAgICAgICBD
U1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciB0cmFuc2l0aW9uc0VuZCA9
IG1fdHJhbnNpdGlvbnMuZW5kKCk7CiAgICAgICAgIGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9u
c01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IHRy
YW5zaXRpb25zRW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogdHJh
bnNpdGlvbiA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlv
biogdHJhbnNpdGlvbiA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGFuaW1hdGlvbkNv
bnRyb2xsZXIoKS0+YW5pbWF0aW9uV2lsbEJlUmVtb3ZlZCh0cmFuc2l0aW9uKTsKICAgICAgICAg
ICAgIHRyYW5zaXRpb24tPmNsZWFyKCk7CiAgICAgICAgIH0KQEAgLTY3LDcgKzY3LDcgQEAgdm9p
ZCBDb21wb3NpdGVBbmltYXRpb246OmNsZWFyUmVuZGVyZXIoKQogICAgICAgICBtX2tleWZyYW1l
QW5pbWF0aW9ucy5jaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgICAgIEFuaW1hdGlvbk5hbWVNYXA6
OmNvbnN0X2l0ZXJhdG9yIGFuaW1hdGlvbnNFbmQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5lbmQo
KTsKICAgICAgICAgZm9yIChBbmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1f
a2V5ZnJhbWVBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGFuaW1hdGlvbnNFbmQ7ICsraXQpIHsK
LSAgICAgICAgICAgIEtleWZyYW1lQW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZC5nZXQoKTsK
KyAgICAgICAgICAgIEtleWZyYW1lQW5pbWF0aW9uKiBhbmltID0gaXQtPnZhbHVlLmdldCgpOwog
ICAgICAgICAgICAgYW5pbWF0aW9uQ29udHJvbGxlcigpLT5hbmltYXRpb25XaWxsQmVSZW1vdmVk
KGFuaW0pOwogICAgICAgICAgICAgYW5pbS0+Y2xlYXIoKTsKICAgICAgICAgfQpAQCAtODQsNyAr
ODQsNyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlVHJhbnNpdGlvbnMoUmVuZGVy
T2JqZWN0KiByZW5kZXJlciwgUmVuZGVyU3R5bGUqCiAgICAgLy8gaW4gdGhlIG5leHQgbG9vcCBh
bmQgdGhlbiB0b3NzIHRoZSBvbmVzIHRoYXQgZGlkbid0IGdldCBtYXJrZWQuCiAgICAgQ1NTUHJv
cGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV90cmFuc2l0aW9ucy5l
bmQoKTsKICAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0
LT5zZWNvbmQtPnNldEFjdGl2ZShmYWxzZSk7CisgICAgICAgIGl0LT52YWx1ZS0+c2V0QWN0aXZl
KGZhbHNlKTsKICAgICAgICAgCiAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBtb2RpZmllZEN1cnJl
bnRTdHlsZTsKICAgICAKQEAgLTE4MSw3ICsxODEsNyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlv
bjo6dXBkYXRlVHJhbnNpdGlvbnMoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgUmVuZGVyU3R5bGUq
CiAgICAgVmVjdG9yPGludD4gdG9CZVJlbW92ZWQ7CiAgICAgZW5kID0gbV90cmFuc2l0aW9ucy5l
bmQoKTsKICAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAg
SW1wbGljaXRBbmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICBJbXBs
aWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgaWYgKCFhbmlt
LT5hY3RpdmUoKSkgewogICAgICAgICAgICAgYW5pbWF0aW9uQ29udHJvbGxlcigpLT5hbmltYXRp
b25XaWxsQmVSZW1vdmVkKGFuaW0pOwogICAgICAgICAgICAgdG9CZVJlbW92ZWQuYXBwZW5kKGFu
aW0tPmFuaW1hdGluZ1Byb3BlcnR5KCkpOwpAQCAtMjA3LDEzICsyMDcsMTMgQEAgdm9pZCBDb21w
b3NpdGVBbmltYXRpb246OnVwZGF0ZUtleWZyYW1lQW5pbWF0aW9ucyhSZW5kZXJPYmplY3QqIHJl
bmRlcmVyLCBSZW5kZXIKICAgICAgICAgLy8gVGhlIGN1cnJlbnQgYW5kIHRhcmdldCBhbmltYXRp
b25zIGFyZSB0aGUgc2FtZSBzbyB3ZSBqdXN0IG5lZWQgdG8gdG9zcyBhbnkgCiAgICAgICAgIC8v
IGFuaW1hdGlvbiB3aGljaCBpcyBmaW5pc2hlZCAocG9zdEFjdGl2ZSkuCiAgICAgICAgIGZvciAo
QW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lQW5pbWF0aW9u
cy5iZWdpbigpOyBpdCAhPSBrZmVuZDsgKytpdCkgewotICAgICAgICAgICAgaWYgKGl0LT5zZWNv
bmQtPnBvc3RBY3RpdmUoKSkKLSAgICAgICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRJbmRleCgt
MSk7CisgICAgICAgICAgICBpZiAoaXQtPnZhbHVlLT5wb3N0QWN0aXZlKCkpCisgICAgICAgICAg
ICAgICAgaXQtPnZhbHVlLT5zZXRJbmRleCgtMSk7CiAgICAgICAgIH0KICAgICB9IGVsc2Ugewog
ICAgICAgICAvLyBNYXJrIGFsbCBleGlzdGluZyBhbmltYXRpb25zIGFzIG5vIGxvbmdlciBhY3Rp
dmUuCiAgICAgICAgIGZvciAoQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
X2tleWZyYW1lQW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBrZmVuZDsgKytpdCkKLSAgICAgICAg
ICAgIGl0LT5zZWNvbmQtPnNldEluZGV4KC0xKTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+c2V0
SW5kZXgoLTEpOwogICAgICAgICAgICAgCiAgICAgICAgIC8vIFRvc3MgdGhlIGFuaW1hdGlvbiBv
cmRlciBtYXAuCiAgICAgICAgIG1fa2V5ZnJhbWVBbmltYXRpb25PcmRlck1hcC5jbGVhcigpOwpA
QCAtMjYyLDcgKzI2Miw3IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVLZXlmcmFt
ZUFuaW1hdGlvbnMoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgUmVuZGVyCiAgICAgVmVjdG9yPEF0
b21pY1N0cmluZ0ltcGwqPiBhbmltc1RvQmVSZW1vdmVkOwogICAgIGtmZW5kID0gbV9rZXlmcmFt
ZUFuaW1hdGlvbnMuZW5kKCk7CiAgICAgZm9yIChBbmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGtmZW5kOyArK2l0
KSB7Ci0gICAgICAgIEtleWZyYW1lQW5pbWF0aW9uKiBrZXlmcmFtZUFuaW0gPSBpdC0+c2Vjb25k
LmdldCgpOworICAgICAgICBLZXlmcmFtZUFuaW1hdGlvbioga2V5ZnJhbWVBbmltID0gaXQtPnZh
bHVlLmdldCgpOwogICAgICAgICBpZiAoa2V5ZnJhbWVBbmltLT5pbmRleCgpIDwgMCkgewogICAg
ICAgICAgICAgYW5pbXNUb0JlUmVtb3ZlZC5hcHBlbmQoa2V5ZnJhbWVBbmltLT5uYW1lKCkuaW1w
bCgpKTsKICAgICAgICAgICAgIGFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+YW5pbWF0aW9uV2lsbEJl
UmVtb3ZlZChrZXlmcmFtZUFuaW0pOwpAQCAtMjkwLDcgKzI5MCw3IEBAIFBhc3NSZWZQdHI8UmVu
ZGVyU3R5bGU+IENvbXBvc2l0ZUFuaW1hdGlvbjo6YW5pbWF0ZShSZW5kZXJPYmplY3QqIHJlbmRl
cmVyLCBSZW5kCiAgICAgICAgIGlmICghbV90cmFuc2l0aW9ucy5pc0VtcHR5KCkpIHsKICAgICAg
ICAgICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1f
dHJhbnNpdGlvbnMuZW5kKCk7CiAgICAgICAgICAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlv
bnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKLSAgICAgICAgICAgICAgICBpZiAoSW1wbGljaXRBbmltYXRpb24qIGFuaW0g
PSBpdC0+c2Vjb25kLmdldCgpKQorICAgICAgICAgICAgICAgIGlmIChJbXBsaWNpdEFuaW1hdGlv
biogYW5pbSA9IGl0LT52YWx1ZS5nZXQoKSkKICAgICAgICAgICAgICAgICAgICAgYW5pbS0+YW5p
bWF0ZSh0aGlzLCByZW5kZXJlciwgY3VycmVudFN0eWxlLCB0YXJnZXRTdHlsZSwgcmVzdWx0U3R5
bGUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0zMTIsNyArMzEyLDcgQEAgUGFzc1Jl
ZlB0cjxSZW5kZXJTdHlsZT4gQ29tcG9zaXRlQW5pbWF0aW9uOjpnZXRBbmltYXRlZFN0eWxlKCkg
Y29uc3QKICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHJlc3VsdFN0eWxlOwogICAgIENTU1Byb3Bl
cnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fdHJhbnNpdGlvbnMuZW5k
KCk7CiAgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlm
IChJbXBsaWNpdEFuaW1hdGlvbiogaW1wbGljaXRBbmltYXRpb24gPSBpdC0+c2Vjb25kLmdldCgp
KQorICAgICAgICBpZiAoSW1wbGljaXRBbmltYXRpb24qIGltcGxpY2l0QW5pbWF0aW9uID0gaXQt
PnZhbHVlLmdldCgpKQogICAgICAgICAgICAgaW1wbGljaXRBbmltYXRpb24tPmdldEFuaW1hdGVk
U3R5bGUocmVzdWx0U3R5bGUpOwogICAgIH0KIApAQCAtMzMzLDcgKzMzMyw3IEBAIHZvaWQgQ29t
cG9zaXRlQW5pbWF0aW9uOjpzZXRBbmltYXRpbmcoYm9vbCBhbmltYXRpbmcpCiAgICAgaWYgKCFt
X3RyYW5zaXRpb25zLmlzRW1wdHkoKSkgewogICAgICAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25z
TWFwOjpjb25zdF9pdGVyYXRvciB0cmFuc2l0aW9uc0VuZCA9IG1fdHJhbnNpdGlvbnMuZW5kKCk7
CiAgICAgICAgIGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IHRyYW5zaXRpb25zRW5kOyArK2l0KSB7
Ci0gICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogdHJhbnNpdGlvbiA9IGl0LT5zZWNvbmQu
Z2V0KCk7CisgICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogdHJhbnNpdGlvbiA9IGl0LT52
YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIHRyYW5zaXRpb24tPnNldEFuaW1hdGluZyhhbmltYXRp
bmcpOwogICAgICAgICB9CiAgICAgfQpAQCAtMzQxLDcgKzM0MSw3IEBAIHZvaWQgQ29tcG9zaXRl
QW5pbWF0aW9uOjpzZXRBbmltYXRpbmcoYm9vbCBhbmltYXRpbmcpCiAgICAgICAgIG1fa2V5ZnJh
bWVBbmltYXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsKICAgICAgICAgQW5pbWF0aW9uTmFtZU1h
cDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmVu
ZCgpOwogICAgICAgICBmb3IgKEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gYW5pbWF0aW9uc0VuZDsgKytpdCkg
ewotICAgICAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kLmdldCgp
OworICAgICAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24qIGFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7
CiAgICAgICAgICAgICBhbmltLT5zZXRBbmltYXRpbmcoYW5pbWF0aW5nKTsKICAgICAgICAgfQog
ICAgIH0KQEAgLTM1Niw3ICszNTYsNyBAQCBkb3VibGUgQ29tcG9zaXRlQW5pbWF0aW9uOjp0aW1l
VG9OZXh0U2VydmljZSgpIGNvbnN0CiAgICAgaWYgKCFtX3RyYW5zaXRpb25zLmlzRW1wdHkoKSkg
ewogICAgICAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciB0cmFu
c2l0aW9uc0VuZCA9IG1fdHJhbnNpdGlvbnMuZW5kKCk7CiAgICAgICAgIGZvciAoQ1NTUHJvcGVy
dHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2lu
KCk7IGl0ICE9IHRyYW5zaXRpb25zRW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBJbXBsaWNpdEFu
aW1hdGlvbiogdHJhbnNpdGlvbiA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBJbXBs
aWNpdEFuaW1hdGlvbiogdHJhbnNpdGlvbiA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAg
IGRvdWJsZSB0ID0gdHJhbnNpdGlvbiA/IHRyYW5zaXRpb24tPnRpbWVUb05leHRTZXJ2aWNlKCkg
OiAtMTsKICAgICAgICAgICAgIGlmICh0IDwgbWluVCB8fCBtaW5UID09IC0xKQogICAgICAgICAg
ICAgICAgIG1pblQgPSB0OwpAQCAtMzY4LDcgKzM2OCw3IEBAIGRvdWJsZSBDb21wb3NpdGVBbmlt
YXRpb246OnRpbWVUb05leHRTZXJ2aWNlKCkgY29uc3QKICAgICAgICAgbV9rZXlmcmFtZUFuaW1h
dGlvbnMuY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgICAgICBBbmltYXRpb25OYW1lTWFwOjpjb25z
dF9pdGVyYXRvciBhbmltYXRpb25zRW5kID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuZW5kKCk7CiAg
ICAgICAgIGZvciAoQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2tleWZy
YW1lQW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBhbmltYXRpb25zRW5kOyArK2l0KSB7Ci0gICAg
ICAgICAgICBLZXlmcmFtZUFuaW1hdGlvbiogYW5pbWF0aW9uID0gaXQtPnNlY29uZC5nZXQoKTsK
KyAgICAgICAgICAgIEtleWZyYW1lQW5pbWF0aW9uKiBhbmltYXRpb24gPSBpdC0+dmFsdWUuZ2V0
KCk7CiAgICAgICAgICAgICBkb3VibGUgdCA9IGFuaW1hdGlvbiA/IGFuaW1hdGlvbi0+dGltZVRv
TmV4dFNlcnZpY2UoKSA6IC0xOwogICAgICAgICAgICAgaWYgKHQgPCBtaW5UIHx8IG1pblQgPT0g
LTEpCiAgICAgICAgICAgICAgICAgbWluVCA9IHQ7CkBAIC0zOTAsNyArMzkwLDcgQEAgUGFzc1Jl
ZlB0cjxLZXlmcmFtZUFuaW1hdGlvbj4gQ29tcG9zaXRlQW5pbWF0aW9uOjpnZXRBbmltYXRpb25G
b3JQcm9wZXJ0eShDU1NQcm8KICAgICAgICAgbV9rZXlmcmFtZUFuaW1hdGlvbnMuY2hlY2tDb25z
aXN0ZW5jeSgpOwogICAgICAgICBBbmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBhbmlt
YXRpb25zRW5kID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuZW5kKCk7CiAgICAgICAgIGZvciAoQW5p
bWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5i
ZWdpbigpOyBpdCAhPSBhbmltYXRpb25zRW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBSZWZQdHI8
S2V5ZnJhbWVBbmltYXRpb24+IGFuaW0gPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgUmVmUHRy
PEtleWZyYW1lQW5pbWF0aW9uPiBhbmltID0gaXQtPnZhbHVlOwogICAgICAgICAgICAgaWYgKGFu
aW0tPmhhc0FuaW1hdGlvbkZvclByb3BlcnR5KHByb3BlcnR5KSkKICAgICAgICAgICAgICAgICBy
ZXR2YWwgPSBhbmltOwogICAgICAgICB9CkBAIC00MTAsMTQgKzQxMCwxNCBAQCB2b2lkIENvbXBv
c2l0ZUFuaW1hdGlvbjo6c3VzcGVuZEFuaW1hdGlvbnMoKQogICAgICAgICBtX2tleWZyYW1lQW5p
bWF0aW9ucy5jaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgICAgIEFuaW1hdGlvbk5hbWVNYXA6OmNv
bnN0X2l0ZXJhdG9yIGFuaW1hdGlvbnNFbmQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5lbmQoKTsK
ICAgICAgICAgZm9yIChBbmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5
ZnJhbWVBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGFuaW1hdGlvbnNFbmQ7ICsraXQpIHsKLSAg
ICAgICAgICAgIGlmIChLZXlmcmFtZUFuaW1hdGlvbiogYW5pbSA9IGl0LT5zZWNvbmQuZ2V0KCkp
CisgICAgICAgICAgICBpZiAoS2V5ZnJhbWVBbmltYXRpb24qIGFuaW0gPSBpdC0+dmFsdWUuZ2V0
KCkpCiAgICAgICAgICAgICAgICAgYW5pbS0+dXBkYXRlUGxheVN0YXRlKEFuaW1QbGF5U3RhdGVQ
YXVzZWQpOwogICAgICAgICB9CiAgICAgfQogICAgIGlmICghbV90cmFuc2l0aW9ucy5pc0VtcHR5
KCkpIHsKICAgICAgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3Ig
dHJhbnNpdGlvbnNFbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOwogICAgICAgICBmb3IgKENTU1By
b3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5i
ZWdpbigpOyBpdCAhPSB0cmFuc2l0aW9uc0VuZDsgKytpdCkgewotICAgICAgICAgICAgSW1wbGlj
aXRBbmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgSW1wbGlj
aXRBbmltYXRpb24qIGFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoYW5p
bSAmJiBhbmltLT5oYXNTdHlsZSgpKQogICAgICAgICAgICAgICAgIGFuaW0tPnVwZGF0ZVBsYXlT
dGF0ZShBbmltUGxheVN0YXRlUGF1c2VkKTsKICAgICAgICAgfQpAQCAtNDM1LDcgKzQzNSw3IEBA
IHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpyZXN1bWVBbmltYXRpb25zKCkKICAgICAgICAgbV9r
ZXlmcmFtZUFuaW1hdGlvbnMuY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgICAgICBBbmltYXRpb25O
YW1lTWFwOjpjb25zdF9pdGVyYXRvciBhbmltYXRpb25zRW5kID0gbV9rZXlmcmFtZUFuaW1hdGlv
bnMuZW5kKCk7CiAgICAgICAgIGZvciAoQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBhbmltYXRpb25zRW5kOyAr
K2l0KSB7Ci0gICAgICAgICAgICBLZXlmcmFtZUFuaW1hdGlvbiogYW5pbSA9IGl0LT5zZWNvbmQu
Z2V0KCk7CisgICAgICAgICAgICBLZXlmcmFtZUFuaW1hdGlvbiogYW5pbSA9IGl0LT52YWx1ZS5n
ZXQoKTsKICAgICAgICAgICAgIGlmIChhbmltICYmIGFuaW0tPnBsYXlTdGF0ZVBsYXlpbmcoKSkK
ICAgICAgICAgICAgICAgICBhbmltLT51cGRhdGVQbGF5U3RhdGUoQW5pbVBsYXlTdGF0ZVBsYXlp
bmcpOwogICAgICAgICB9CkBAIC00NDQsNyArNDQ0LDcgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRp
b246OnJlc3VtZUFuaW1hdGlvbnMoKQogICAgIGlmICghbV90cmFuc2l0aW9ucy5pc0VtcHR5KCkp
IHsKICAgICAgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgdHJh
bnNpdGlvbnNFbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOwogICAgICAgICBmb3IgKENTU1Byb3Bl
cnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdp
bigpOyBpdCAhPSB0cmFuc2l0aW9uc0VuZDsgKytpdCkgewotICAgICAgICAgICAgSW1wbGljaXRB
bmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgSW1wbGljaXRB
bmltYXRpb24qIGFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoYW5pbSAm
JiBhbmltLT5oYXNTdHlsZSgpKQogICAgICAgICAgICAgICAgIGFuaW0tPnVwZGF0ZVBsYXlTdGF0
ZShBbmltUGxheVN0YXRlUGxheWluZyk7CiAgICAgICAgIH0KQEAgLTQ1Niw3ICs0NTYsNyBAQCB2
b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6b3ZlcnJpZGVJbXBsaWNpdEFuaW1hdGlvbnMoQ1NTUHJv
cGVydHlJRCBwcm9wZXJ0eSkKICAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9p
dGVyYXRvciBlbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOwogICAgIGlmICghbV90cmFuc2l0aW9u
cy5pc0VtcHR5KCkpIHsKICAgICAgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7Ci0gICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT5zZWNvbmQuZ2V0
KCk7CisgICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT52YWx1ZS5nZXQo
KTsKICAgICAgICAgICAgIGlmIChhbmltICYmIGFuaW0tPmFuaW1hdGluZ1Byb3BlcnR5KCkgPT0g
cHJvcGVydHkpCiAgICAgICAgICAgICAgICAgYW5pbS0+c2V0T3ZlcnJpZGRlbih0cnVlKTsKICAg
ICAgICAgfQpAQCAtNDY4LDcgKzQ2OCw3IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpyZXN1
bWVPdmVycmlkZGVuSW1wbGljaXRBbmltYXRpb25zKENTU1Byb3BlcnR5SUQgcHJvcGVyCiAgICAg
aWYgKCFtX3RyYW5zaXRpb25zLmlzRW1wdHkoKSkgewogICAgICAgICBDU1NQcm9wZXJ0eVRyYW5z
aXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOwogICAg
ICAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIElt
cGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgIElt
cGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAgICAgaWYg
KGFuaW0gJiYgYW5pbS0+YW5pbWF0aW5nUHJvcGVydHkoKSA9PSBwcm9wZXJ0eSkKICAgICAgICAg
ICAgICAgICBhbmltLT5zZXRPdmVycmlkZGVuKGZhbHNlKTsKICAgICAgICAgfQpAQCAtNDgxLDcg
KzQ4MSw3IEBAIGJvb2wgQ29tcG9zaXRlQW5pbWF0aW9uOjppc0FuaW1hdGluZ1Byb3BlcnR5KENT
U1Byb3BlcnR5SUQgcHJvcGVydHksIGJvb2wgYWNjZWxlCiAgICAgICAgIG1fa2V5ZnJhbWVBbmlt
YXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsKICAgICAgICAgQW5pbWF0aW9uTmFtZU1hcDo6Y29u
c3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmVuZCgpOwog
ICAgICAgICBmb3IgKEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlm
cmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gYW5pbWF0aW9uc0VuZDsgKytpdCkgewotICAg
ICAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kLmdldCgpOworICAg
ICAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24qIGFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAg
ICAgICAgICBpZiAoYW5pbSAmJiBhbmltLT5pc0FuaW1hdGluZ1Byb3BlcnR5KHByb3BlcnR5LCBh
Y2NlbGVyYXRlZE9ubHksIGlzUnVubmluZ05vdykpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgIH0KQEAgLTQ5MCw3ICs0OTAsNyBAQCBib29sIENvbXBvc2l0ZUFuaW1hdGlv
bjo6aXNBbmltYXRpbmdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBib29sIGFjY2Vs
ZQogICAgIGlmICghbV90cmFuc2l0aW9ucy5pc0VtcHR5KCkpIHsKICAgICAgICAgQ1NTUHJvcGVy
dHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgdHJhbnNpdGlvbnNFbmQgPSBtX3RyYW5z
aXRpb25zLmVuZCgpOwogICAgICAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSB0cmFuc2l0aW9u
c0VuZDsgKytpdCkgewotICAgICAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGFuaW0gPSBpdC0+
c2Vjb25kLmdldCgpOworICAgICAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGFuaW0gPSBpdC0+
dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoYW5pbSAmJiBhbmltLT5pc0FuaW1hdGluZ1By
b3BlcnR5KHByb3BlcnR5LCBhY2NlbGVyYXRlZE9ubHksIGlzUnVubmluZ05vdykpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTU1Niw3ICs1NTYsNyBAQCB1bnNp
Z25lZCBDb21wb3NpdGVBbmltYXRpb246Om51bWJlck9mQWN0aXZlQW5pbWF0aW9ucygpIGNvbnN0
CiAgICAgICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsKICAgICAg
ICAgQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fa2V5
ZnJhbWVBbmltYXRpb25zLmVuZCgpOwogICAgICAgICBmb3IgKEFuaW1hdGlvbk5hbWVNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gYW5p
bWF0aW9uc0VuZDsgKytpdCkgewotICAgICAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24qIGFuaW0g
PSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24qIGFuaW0g
PSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoYW5pbS0+cnVubmluZygpKQogICAg
ICAgICAgICAgICAgICsrY291bnQ7CiAgICAgICAgIH0KQEAgLTU2NSw3ICs1NjUsNyBAQCB1bnNp
Z25lZCBDb21wb3NpdGVBbmltYXRpb246Om51bWJlck9mQWN0aXZlQW5pbWF0aW9ucygpIGNvbnN0
CiAgICAgaWYgKCFtX3RyYW5zaXRpb25zLmlzRW1wdHkoKSkgewogICAgICAgICBDU1NQcm9wZXJ0
eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciB0cmFuc2l0aW9uc0VuZCA9IG1fdHJhbnNp
dGlvbnMuZW5kKCk7CiAgICAgICAgIGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IHRyYW5zaXRpb25z
RW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT5z
ZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT52
YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGlmIChhbmltLT5ydW5uaW5nKCkpCiAgICAgICAgICAg
ICAgICAgKytjb3VudDsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vTGFuZ3VhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGFuZ3VhZ2UuY3Bw
CmluZGV4IDQ3ZjA5ZjYwOTI5OTcxZTMxNzM1NmU0OWZiY2I2M2I1ZGI0MTdmMzcuLmIzZjk3YmVj
OTcyMTViODA5YjM0MWVhYzAxYTYxN2U4MWFhN2EwNmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL0xhbmd1YWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9M
YW5ndWFnZS5jcHAKQEAgLTUzLDcgKzUzLDcgQEAgdm9pZCBsYW5ndWFnZURpZENoYW5nZSgpCiB7
CiAgICAgT2JzZXJ2ZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IG9ic2VydmVyTWFwKCkuZW5kKCk7CiAg
ICAgZm9yIChPYnNlcnZlck1hcDo6aXRlcmF0b3IgaXRlciA9IG9ic2VydmVyTWFwKCkuYmVnaW4o
KTsgaXRlciAhPSBlbmQ7ICsraXRlcikKLSAgICAgICAgaXRlci0+c2Vjb25kKGl0ZXItPmZpcnN0
KTsKKyAgICAgICAgaXRlci0+dmFsdWUoaXRlci0+a2V5KTsKIH0KIAogU3RyaW5nIGRlZmF1bHRM
YW5ndWFnZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NSU1FVHlwZVJl
Z2lzdHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuY3Bw
CmluZGV4IDI4OWM2Njk5YjA1ZjQ5ZmI3MTdjMGM0MDNjMmI1NzFiYmM5YzI4YjguLjhmNTIxMDNj
MmU5Y2FlOTdkYTQ0ZDM0YzNiMjI4Mjk1Zjk2OGFkY2EgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuY3BwCkBAIC02OTIsNyArNjkyLDcgQEAgU3RyaW5nIE1J
TUVUeXBlUmVnaXN0cnk6OmdldE5vcm1hbGl6ZWRNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVU
eXBlKQogICAgIE1JTUVUeXBlQXNzb2NpYXRpb25NYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWlt
ZVR5cGVBc3NvY2lhdGlvbk1hcCgpLmZpbmQobWltZVR5cGUpOwogCiAgICAgaWYgKGl0ICE9IG1p
bWVUeXBlQXNzb2NpYXRpb25NYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7
CisgICAgICAgIHJldHVybiBpdC0+dmFsdWU7CiAjZW5kaWYKICAgICByZXR1cm4gbWltZVR5cGU7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9IUlRGRWxldmF0
aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0hSVEZFbGV2YXRpb24uY3Bw
CmluZGV4IDI1ZTQ1ODk2MjVkY2NmZDdmNGQzYjU0YWY3NTMyZDhlODNmMjYyNzguLmNmZTEzZWQ4
NTMwNmI1MTcxMmFhMzA3NGI5YzhkYzM5MmNkNDY1MmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2F1ZGlvL0hSVEZFbGV2YXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL0hSVEZFbGV2YXRpb24uY3BwCkBAIC03OSw3ICs3OSw3IEBAIHN0YXRp
YyBBdWRpb0J1cyogZ2V0Q29uY2F0ZW5hdGVkSW1wdWxzZVJlc3BvbnNlc0ZvclN1YmplY3QoY29u
c3QgU3RyaW5nJiBzdWJqZWN0CiAgICAgICAgIGJ1cyA9IGNvbmNhdGVuYXRlZEltcHVsc2VSZXNw
b25zZXMubGVha1B0cigpOwogICAgICAgICBhdWRpb0J1c01hcC5zZXQoc3ViamVjdE5hbWUsIGJ1
cyk7CiAgICAgfSBlbHNlCi0gICAgICAgIGJ1cyA9IGl0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAg
IGJ1cyA9IGl0ZXJhdG9yLT52YWx1ZTsKIAogICAgIHNpemVfdCByZXNwb25zZUxlbmd0aCA9IGJ1
cy0+bGVuZ3RoKCk7CiAgICAgc2l6ZV90IGV4cGVjdGVkTGVuZ3RoID0gc3RhdGljX2Nhc3Q8c2l6
ZV90PihUb3RhbE51bWJlck9mUmVzcG9uc2VzICogUmVzcG9uc2VGcmFtZVNpemUpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9Db29raWVNYW5hZ2VyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvQ29va2llTWFuYWdlci5jcHAK
aW5kZXggZGQ5MzcwMjIzMTQzNTAwNjRhMmIxOGE5ZWU5YzY1ZjI4NDllMmFiOC4uNmRiZjkxNjJi
ZjYxYTE3MWI0NzlhNjIxZGQ0NzA5YTZiYmFjYWNiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9Db29raWVNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0Nvb2tpZU1hbmFnZXIuY3BwCkBAIC0xNjcsNyArMTY3
LDcgQEAgU3RyaW5nIENvb2tpZU1hbmFnZXI6OmdlbmVyYXRlSHRtbEZyYWdtZW50Rm9yQ29va2ll
cygpCiAKICAgICBWZWN0b3I8UGFyc2VkQ29va2llKj4gY29va2llQ2FuZGlkYXRlczsKICAgICBm
b3IgKEhhc2hNYXA8U3RyaW5nLCBDb29raWVNYXAqPjo6aXRlcmF0b3IgaXQgPSBtX21hbmFnZXJN
YXAuYmVnaW4oKTsgaXQgIT0gbV9tYW5hZ2VyTWFwLmVuZCgpOyArK2l0KQotICAgICAgICBpdC0+
c2Vjb25kLT5nZXRBbGxDaGlsZENvb2tpZXMoJmNvb2tpZUNhbmRpZGF0ZXMpOworICAgICAgICBp
dC0+dmFsdWUtPmdldEFsbENoaWxkQ29va2llcygmY29va2llQ2FuZGlkYXRlcyk7CiAKICAgICBT
dHJpbmcgcmVzdWx0OwogICAgIFBhcnNlZENvb2tpZSogY29va2llID0gMDsKQEAgLTI4Niw3ICsy
ODYsNyBAQCB2b2lkIENvb2tpZU1hbmFnZXI6OnJlbW92ZUFsbENvb2tpZXMoQmFja2luZ1N0b3Jl
UmVtb3ZhbFBvbGljeSBiYWNraW5nU3RvcmVSZW1vdgogICAgIEhhc2hNYXA8U3RyaW5nLCBDb29r
aWVNYXAqPjo6aXRlcmF0b3IgZmlyc3QgPSBtX21hbmFnZXJNYXAuYmVnaW4oKTsKICAgICBIYXNo
TWFwPFN0cmluZywgQ29va2llTWFwKj46Oml0ZXJhdG9yIGVuZCA9IG1fbWFuYWdlck1hcC5lbmQo
KTsKICAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBDb29raWVNYXAqPjo6aXRlcmF0b3IgaXQgPSBm
aXJzdDsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5kZWxldGVBbGxDb29r
aWVzQW5kRG9tYWlucygpOworICAgICAgICBpdC0+dmFsdWUtPmRlbGV0ZUFsbENvb2tpZXNBbmRE
b21haW5zKCk7CiAKICAgICBpZiAoYmFja2luZ1N0b3JlUmVtb3ZhbCA9PSBSZW1vdmVGcm9tQmFj
a2luZ1N0b3JlKQogICAgICAgICBtX2Nvb2tpZUJhY2tpbmdTdG9yZS0+cmVtb3ZlQWxsKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0Nvb2tpZU1hcC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0Nvb2tpZU1hcC5jcHAKaW5k
ZXggYmJlOWE3Y2VkZjczZjcwZDUwYzRkZDA3MjRmNGE1ZDZhMDE1YzdhOC4uYWY0ODViNTRjMjBl
Y2NmY2EwYWE0ZDk5NWZiNzIwYTQ1MzRkNzhhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYmxhY2tiZXJyeS9Db29raWVNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2JsYWNrYmVycnkvQ29va2llTWFwLmNwcApAQCAtMTcyLDcgKzE3Miw3IEBAIFBhcnNl
ZENvb2tpZSogQ29va2llTWFwOjpyZW1vdmVPbGRlc3RDb29raWUoKQogICAgICAgICBDb29raWVM
b2coIkNvb2tpZU1hcCAtIGxvb2tpbmcgaW50byBzdWJkb21haW5zIik7CiAKICAgICAgICAgZm9y
IChIYXNoTWFwPFN0cmluZywgQ29va2llTWFwKj46Oml0ZXJhdG9yIGl0ID0gbV9zdWJkb21haW5z
LmJlZ2luKCk7IGl0ICE9IG1fc3ViZG9tYWlucy5lbmQoKTsgKytpdCkgewotICAgICAgICAgICAg
b2xkZXN0Q29va2llID0gaXQtPnNlY29uZC0+cmVtb3ZlT2xkZXN0Q29va2llKCk7CisgICAgICAg
ICAgICBvbGRlc3RDb29raWUgPSBpdC0+dmFsdWUtPnJlbW92ZU9sZGVzdENvb2tpZSgpOwogICAg
ICAgICAgICAgaWYgKG9sZGVzdENvb2tpZSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQpAQCAtMjE0LDcgKzIxNCw3IEBAIHZvaWQgQ29va2llTWFwOjpnZXRBbGxDaGlsZENvb2tp
ZXMoVmVjdG9yPFBhcnNlZENvb2tpZSo+KiBzdGFja09mQ29va2llcykKICAgICBDb29raWVMb2co
IkNvb2tpZU1hcCAtIGdldEFsbENoaWxkQ29va2llcyBpbiBNYXAgLSAlcyIsIGdldE5hbWUoKS51
dGY4KCkuZGF0YSgpKTsKICAgICBnZXRBbGxDb29raWVzKHN0YWNrT2ZDb29raWVzKTsKICAgICBm
b3IgKEhhc2hNYXA8U3RyaW5nLCBDb29raWVNYXAqPjo6aXRlcmF0b3IgaXQgPSBtX3N1YmRvbWFp
bnMuYmVnaW4oKTsgaXQgIT0gbV9zdWJkb21haW5zLmVuZCgpOyArK2l0KQotICAgICAgICBpdC0+
c2Vjb25kLT5nZXRBbGxDaGlsZENvb2tpZXMoc3RhY2tPZkNvb2tpZXMpOworICAgICAgICBpdC0+
dmFsdWUtPmdldEFsbENoaWxkQ29va2llcyhzdGFja09mQ29va2llcyk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL0Jp
bmFyeVByb3BlcnR5TGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9CaW5hcnlQ
cm9wZXJ0eUxpc3QuY3BwCmluZGV4IGJlYzJlYzk1MDY0NGM5OTNiZTg5YWIzNWUwYjg2N2E4YjYx
MjYwODguLmIyN2Q3ZDdjZDNjMTQzODYwZWM2NThiZWViMmQ2ZTc3MmU5NDJjNTIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL0JpbmFyeVByb3BlcnR5TGlzdC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2YvQmluYXJ5UHJvcGVydHlMaXN0LmNwcApAQCAt
MjI5LDcgKzIyOSw3IEBAIHZvaWQgQmluYXJ5UHJvcGVydHlMaXN0UGxhbjo6d3JpdGVJbnRlZ2Vy
QXJyYXkoY29uc3QgaW50KiBpbnRlZ2Vycywgc2l6ZV90IHNpemUpCiAgICAgICAgIHJldHVybjsK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKICAgICAgICAgd3JpdGVJbnRl
Z2VyKGludGVnZXJzW2ldKTsKLSAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IG1fY3Vy
cmVudE9iamVjdFJlZmVyZW5jZSsrOworICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBt
X2N1cnJlbnRPYmplY3RSZWZlcmVuY2UrKzsKICAgICB3cml0ZUFycmF5T2JqZWN0KHNpemUpOwog
ICAgIG1fY3VycmVudEFnZ3JlZ2F0ZVNpemUgPSBzYXZlZEFnZ3JlZ2F0ZVNpemU7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYkhUVFBM
b2FkSW5mby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dl
YkhUVFBMb2FkSW5mby5jcHAKaW5kZXggNzc2MmZkOGM0OWZkYTI0MmEzNzAyNmM2ZGZlNjc3ZjIz
MDUwZTI5ZC4uNjYzNzFiNGFiMWQyZGQyNTRmYmJkZDdhOWRlNzJlZDQxMTlkNTY2MSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJIVFRQTG9h
ZEluZm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQv
V2ViSFRUUExvYWRJbmZvLmNwcApAQCAtMTA2LDcgKzEwNiw3IEBAIHN0YXRpYyB2b2lkIGFkZEhl
YWRlcihIVFRQSGVhZGVyTWFwKiBtYXAsIGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgY29uc3QgV2Vi
U3RyaW5nCiAgICAgSFRUUEhlYWRlck1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1hcC0+YWRkKG5h
bWUsIHZhbHVlKTsKICAgICAvLyBJdCBpcyBpbXBvcnRhbnQgdGhhdCB2YWx1ZXMgYXJlIHNlcGFy
YXRlZCBieSAnXG4nLCBub3QgY29tbWEsIG90aGVyd2lzZSBTZXQtQ29va2llIGhlYWRlciBpcyBu
b3QgcGFyc2VhYmxlLgogICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJlc3Vs
dC5pdGVyYXRvci0+c2Vjb25kICs9ICJcbiIgKyBTdHJpbmcodmFsdWUpOworICAgICAgICByZXN1
bHQuaXRlcmF0b3ItPnZhbHVlICs9ICJcbiIgKyBTdHJpbmcodmFsdWUpOwogfQogCiB2b2lkIFdl
YkhUVFBMb2FkSW5mbzo6YWRkUmVxdWVzdEhlYWRlcihjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGNv
bnN0IFdlYlN0cmluZyYgdmFsdWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jaHJvbWl1bS9zdXBwb3J0L1dlYlVSTFJlcXVlc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJVUkxSZXF1ZXN0LmNwcAppbmRleCBmNDM3YjUxNjQz
YjIzNGI2MDlmNzcyNWZiOGQ3NmQ3MzFmNTYxN2VhLi5lMzg1MTAxNGZjZGQ0NWJmYWNiNDhiOTdi
YmE3NmUzMWQ4YjRhMDE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9zdXBwb3J0L1dlYlVSTFJlcXVlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVVJMUmVxdWVzdC5jcHAKQEAgLTE5NSw3ICsxOTUsNyBA
QCB2b2lkIFdlYlVSTFJlcXVlc3Q6OnZpc2l0SFRUUEhlYWRlckZpZWxkcyhXZWJIVFRQSGVhZGVy
VmlzaXRvciogdmlzaXRvcikgY29uc3QKIHsKICAgICBjb25zdCBIVFRQSGVhZGVyTWFwJiBtYXAg
PSBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXF1ZXN0LT5odHRwSGVhZGVyRmllbGRzKCk7CiAgICAg
Zm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC5iZWdpbigpOyBpdCAh
PSBtYXAuZW5kKCk7ICsraXQpCi0gICAgICAgIHZpc2l0b3ItPnZpc2l0SGVhZGVyKGl0LT5maXJz
dCwgaXQtPnNlY29uZCk7CisgICAgICAgIHZpc2l0b3ItPnZpc2l0SGVhZGVyKGl0LT5rZXksIGl0
LT52YWx1ZSk7CiB9CiAKIFdlYkhUVFBCb2R5IFdlYlVSTFJlcXVlc3Q6Omh0dHBCb2R5KCkgY29u
c3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQv
V2ViVVJMUmVzcG9uc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3Vw
cG9ydC9XZWJVUkxSZXNwb25zZS5jcHAKaW5kZXggMWY5Yjk2ODYwZTBiYTJlOTM4NWJlNTU1OTVk
YTZlMDlmNTE1MTNkNC4uODA1NjY2NDkxYjM1NDhjNmI0OTE0OWIxZmE3NTI1YWNiZDMyZDhkOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJV
UkxSZXNwb25zZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3Vw
cG9ydC9XZWJVUkxSZXNwb25zZS5jcHAKQEAgLTI2MSw3ICsyNjEsNyBAQCB2b2lkIFdlYlVSTFJl
c3BvbnNlOjphZGRIVFRQSGVhZGVyRmllbGQoY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBjb25zdCBX
ZWJTdHJpbmcmCiAgICAgSFRUUEhlYWRlck1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9CiAgICAgICAg
IGNvbnN0X2Nhc3Q8SFRUUEhlYWRlck1hcCo+KCZtYXApLT5hZGQobmFtZSwgdmFsdWVTdHIpOwog
ICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vj
b25kICs9ICIsICIgKyB2YWx1ZVN0cjsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSAr
PSAiLCAiICsgdmFsdWVTdHI7CiB9CiAKIHZvaWQgV2ViVVJMUmVzcG9uc2U6OmNsZWFySFRUUEhl
YWRlckZpZWxkKGNvbnN0IFdlYlN0cmluZyYgbmFtZSkKQEAgLTI3NSw3ICsyNzUsNyBAQCB2b2lk
IFdlYlVSTFJlc3BvbnNlOjp2aXNpdEhUVFBIZWFkZXJGaWVsZHMoV2ViSFRUUEhlYWRlclZpc2l0
b3IqIHZpc2l0b3IpIGNvbnN0CiB7CiAgICAgY29uc3QgSFRUUEhlYWRlck1hcCYgbWFwID0gbV9w
cml2YXRlLT5tX3Jlc291cmNlUmVzcG9uc2UtPmh0dHBIZWFkZXJGaWVsZHMoKTsKICAgICBmb3Ig
KEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLmJlZ2luKCk7IGl0ICE9IG1h
cC5lbmQoKTsgKytpdCkKLSAgICAgICAgdmlzaXRvci0+dmlzaXRIZWFkZXIoaXQtPmZpcnN0LCBp
dC0+c2Vjb25kKTsKKyAgICAgICAgdmlzaXRvci0+dmlzaXRIZWFkZXIoaXQtPmtleSwgaXQtPnZh
bHVlKTsKIH0KIAogZG91YmxlIFdlYlVSTFJlc3BvbnNlOjpsYXN0TW9kaWZpZWREYXRlKCkgY29u
c3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlS
ZWZyZXNoTW9uaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EaXNw
bGF5UmVmcmVzaE1vbml0b3IuY3BwCmluZGV4IDMwZDhkM2Q0MWUyMmJkZGExMDc2NGQ4ZjZhMWVm
NDAzM2E2MjlkYWEuLmY4OTEwM2Y5YmUyYjVlZWRkMDdmYTc0MTFmZTI3OTFhNjIxODFlZTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNo
TW9uaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxh
eVJlZnJlc2hNb25pdG9yLmNwcApAQCAtMTM3LDcgKzEzNyw3IEBAIERpc3BsYXlSZWZyZXNoTW9u
aXRvciogRGlzcGxheVJlZnJlc2hNb25pdG9yTWFuYWdlcjo6ZW5zdXJlTW9uaXRvckZvckNsaWVu
dChEaXNwCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgcmV0dXJuIGl0LT5z
ZWNvbmQuZ2V0KCk7CisgICAgcmV0dXJuIGl0LT52YWx1ZS5nZXQoKTsKIH0KIAogdm9pZCBEaXNw
bGF5UmVmcmVzaE1vbml0b3JNYW5hZ2VyOjpyZWdpc3RlckNsaWVudChEaXNwbGF5UmVmcmVzaE1v
bml0b3JDbGllbnQqIGNsaWVudCkKQEAgLTE1Nyw3ICsxNTcsNyBAQCB2b2lkIERpc3BsYXlSZWZy
ZXNoTW9uaXRvck1hbmFnZXI6OnVucmVnaXN0ZXJDbGllbnQoRGlzcGxheVJlZnJlc2hNb25pdG9y
Q2xpZW50KgogICAgIGlmIChpdCA9PSBtX21vbml0b3JzLmVuZCgpKQogICAgICAgICByZXR1cm47
CiAgICAgCi0gICAgRGlzcGxheVJlZnJlc2hNb25pdG9yKiBtb25pdG9yID0gaXQtPnNlY29uZC5n
ZXQoKTsKKyAgICBEaXNwbGF5UmVmcmVzaE1vbml0b3IqIG1vbml0b3IgPSBpdC0+dmFsdWUuZ2V0
KCk7CiAgICAgaWYgKG1vbml0b3ItPnJlbW92ZUNsaWVudChjbGllbnQpKSB7CiAgICAgICAgIGlm
ICghbW9uaXRvci0+aGFzQ2xpZW50cygpKQogICAgICAgICAgICAgbV9tb25pdG9ycy5yZW1vdmUo
aXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
Y2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAK
aW5kZXggYjQ2MjYzYTk2NjMyMzlkMmZjZmFkOGJiYmYzMjljZDU3ZDI2YjRlZC4uMGJjMTY0ZTM1
MWQ1ZjE4MWE1YmZiNDQ5MWZmMGE1YWIwMWFiZWFhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCkBAIC0yMTEsNyArMjExLDcgQEAgRm9udFBs
YXRmb3JtRGF0YSogRm9udENhY2hlOjpnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZm8KICAgICAgICAgZ0ZvbnRQbGF0Zm9ybURhdGFDYWNoZS0+c2V0KGtl
eSwgcmVzdWx0KTsKICAgICAgICAgZm91bmRSZXN1bHQgPSByZXN1bHQ7CiAgICAgfSBlbHNlIHsK
LSAgICAgICAgcmVzdWx0ID0gaXQtPnNlY29uZDsKKyAgICAgICAgcmVzdWx0ID0gaXQtPnZhbHVl
OwogICAgICAgICBmb3VuZFJlc3VsdCA9IHRydWU7CiAgICAgfQogCkBAIC0zMzIsMjAgKzMzMiwy
MCBAQCBTaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRDYWNoZWRGb250RGF0YShjb25zdCBG
b250UGxhdGZvcm1EYXRhKiBwbGF0Zm9ybURhdAogICAgICAgICByZXR1cm4gbmV3VmFsdWUuZmly
c3Q7CiAgICAgfQogCi0gICAgaWYgKCFyZXN1bHQuZ2V0KCktPnNlY29uZC5zZWNvbmQpIHsKLSAg
ICAgICAgQVNTRVJUKGdJbmFjdGl2ZUZvbnREYXRhLT5jb250YWlucyhyZXN1bHQuZ2V0KCktPnNl
Y29uZC5maXJzdCkpOwotICAgICAgICBnSW5hY3RpdmVGb250RGF0YS0+cmVtb3ZlKHJlc3VsdC5n
ZXQoKS0+c2Vjb25kLmZpcnN0KTsKKyAgICBpZiAoIXJlc3VsdC5nZXQoKS0+dmFsdWUuc2Vjb25k
KSB7CisgICAgICAgIEFTU0VSVChnSW5hY3RpdmVGb250RGF0YS0+Y29udGFpbnMocmVzdWx0Lmdl
dCgpLT52YWx1ZS5maXJzdCkpOworICAgICAgICBnSW5hY3RpdmVGb250RGF0YS0+cmVtb3ZlKHJl
c3VsdC5nZXQoKS0+dmFsdWUuZmlyc3QpOwogICAgIH0KIAogICAgIGlmIChzaG91bGRSZXRhaW4g
PT0gUmV0YWluKQotICAgICAgICByZXN1bHQuZ2V0KCktPnNlY29uZC5zZWNvbmQrKzsKLSAgICBl
bHNlIGlmICghcmVzdWx0LmdldCgpLT5zZWNvbmQuc2Vjb25kKSB7CisgICAgICAgIHJlc3VsdC5n
ZXQoKS0+dmFsdWUuc2Vjb25kKys7CisgICAgZWxzZSBpZiAoIXJlc3VsdC5nZXQoKS0+dmFsdWUu
c2Vjb25kKSB7CiAgICAgICAgIC8vIElmIHNob3VsZFJldGFpbiBpcyBEb05vdFJldGFpbiBhbmQg
Y291bnQgaXMgMCwgd2Ugd2FudCB0byByZW1vdmUgdGhlIGZvbnREYXRhIGZyb20gCiAgICAgICAg
IC8vIGdJbmFjdGl2ZUZvbnREYXRhIChhYm92ZSkgYW5kIHJlLWFkZCBoZXJlIHRvIHVwZGF0ZSBM
UlUgcG9zaXRpb24uCi0gICAgICAgIGdJbmFjdGl2ZUZvbnREYXRhLT5hZGQocmVzdWx0LmdldCgp
LT5zZWNvbmQuZmlyc3QpOworICAgICAgICBnSW5hY3RpdmVGb250RGF0YS0+YWRkKHJlc3VsdC5n
ZXQoKS0+dmFsdWUuZmlyc3QpOwogICAgIH0KIAotICAgIHJldHVybiByZXN1bHQuZ2V0KCktPnNl
Y29uZC5maXJzdDsKKyAgICByZXR1cm4gcmVzdWx0LmdldCgpLT52YWx1ZS5maXJzdDsKIH0KIAog
U2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Tm9uUmV0YWluZWRMYXN0UmVzb3J0RmFsbGJh
Y2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKQpAQCAtMzYxLDgg
KzM2MSw4IEBAIHZvaWQgRm9udENhY2hlOjpyZWxlYXNlRm9udERhdGEoY29uc3QgU2ltcGxlRm9u
dERhdGEqIGZvbnREYXRhKQogICAgIEZvbnREYXRhQ2FjaGU6Oml0ZXJhdG9yIGl0ID0gZ0ZvbnRE
YXRhQ2FjaGUtPmZpbmQoZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpKTsKICAgICBBU1NFUlQoaXQg
IT0gZ0ZvbnREYXRhQ2FjaGUtPmVuZCgpKTsKIAotICAgIEFTU0VSVChpdC0+c2Vjb25kLnNlY29u
ZCk7Ci0gICAgaWYgKCEtLWl0LT5zZWNvbmQuc2Vjb25kKQorICAgIEFTU0VSVChpdC0+dmFsdWUu
c2Vjb25kKTsKKyAgICBpZiAoIS0taXQtPnZhbHVlLnNlY29uZCkKICAgICAgICAgZ0luYWN0aXZl
Rm9udERhdGEtPmFkZChmb250RGF0YSk7CiB9CiAKQEAgLTQxMCw4ICs0MTAsOCBAQCB2b2lkIEZv
bnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhKGludCBjb3VudCkKICAgICAgICAga2V5c1Rv
UmVtb3ZlLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZ0ZvbnRQbGF0Zm9ybURhdGFDYWNoZS0+c2l6
ZSgpKTsKICAgICAgICAgRm9udFBsYXRmb3JtRGF0YUNhY2hlOjppdGVyYXRvciBwbGF0Zm9ybURh
dGFFbmQgPSBnRm9udFBsYXRmb3JtRGF0YUNhY2hlLT5lbmQoKTsKICAgICAgICAgZm9yIChGb250
UGxhdGZvcm1EYXRhQ2FjaGU6Oml0ZXJhdG9yIHBsYXRmb3JtRGF0YSA9IGdGb250UGxhdGZvcm1E
YXRhQ2FjaGUtPmJlZ2luKCk7IHBsYXRmb3JtRGF0YSAhPSBwbGF0Zm9ybURhdGFFbmQ7ICsrcGxh
dGZvcm1EYXRhKSB7Ci0gICAgICAgICAgICBpZiAocGxhdGZvcm1EYXRhLT5zZWNvbmQgJiYgIWdG
b250RGF0YUNhY2hlLT5jb250YWlucygqcGxhdGZvcm1EYXRhLT5zZWNvbmQpKQotICAgICAgICAg
ICAgICAgIGtleXNUb1JlbW92ZS5hcHBlbmQocGxhdGZvcm1EYXRhLT5maXJzdCk7CisgICAgICAg
ICAgICBpZiAocGxhdGZvcm1EYXRhLT52YWx1ZSAmJiAhZ0ZvbnREYXRhQ2FjaGUtPmNvbnRhaW5z
KCpwbGF0Zm9ybURhdGEtPnZhbHVlKSkKKyAgICAgICAgICAgICAgICBrZXlzVG9SZW1vdmUuYXBw
ZW5kKHBsYXRmb3JtRGF0YS0+a2V5KTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgc2l6
ZV90IGtleXNUb1JlbW92ZUNvdW50ID0ga2V5c1RvUmVtb3ZlLnNpemUoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZVRyZWVOb2RlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZVRyZWVOb2RlLmNwcApp
bmRleCA4N2U5M2ZkOThmZjhkZWYwOTQ4MTZhNTI0MzRlOTAwNWU4OTk5NTlkLi42MzVlYzdiMjI5
YWI0Y2E5OTE4YjU1ZmVkZDdmYTk4N2I0MTkyNjUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2VUcmVlTm9kZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlVHJlZU5vZGUuY3BwCkBAIC03NCw3ICs3
NCw3IEBAIHNpemVfdCBHbHlwaFBhZ2VUcmVlTm9kZTo6dHJlZUdseXBoUGFnZUNvdW50KCkKICAg
ICBpZiAocm9vdHMpIHsKICAgICAgICAgSGFzaE1hcDxpbnQsIEdseXBoUGFnZVRyZWVOb2RlKj46
Oml0ZXJhdG9yIGVuZCA9IHJvb3RzLT5lbmQoKTsKICAgICAgICAgZm9yIChIYXNoTWFwPGludCwg
R2x5cGhQYWdlVHJlZU5vZGUqPjo6aXRlcmF0b3IgaXQgPSByb290cy0+YmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KQotICAgICAgICAgICAgY291bnQgKz0gaXQtPnNlY29uZC0+cGFnZUNvdW50KCk7
CisgICAgICAgICAgICBjb3VudCArPSBpdC0+dmFsdWUtPnBhZ2VDb3VudCgpOwogICAgIH0KICAg
ICAKICAgICBpZiAocGFnZVplcm9Sb290KQpAQCAtODgsNyArODgsNyBAQCBzaXplX3QgR2x5cGhQ
YWdlVHJlZU5vZGU6OnBhZ2VDb3VudCgpIGNvbnN0CiAgICAgc2l6ZV90IGNvdW50ID0gbV9wYWdl
ICYmIG1fcGFnZS0+b3duZXIoKSA9PSB0aGlzID8gMSA6IDA7CiAgICAgSGFzaE1hcDxjb25zdCBG
b250RGF0YSosIEdseXBoUGFnZVRyZWVOb2RlKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fY2hp
bGRyZW4uZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPGNvbnN0IEZvbnREYXRhKiwgR2x5cGhQYWdl
VHJlZU5vZGUqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2NoaWxkcmVuLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkKLSAgICAgICAgY291bnQgKz0gaXQtPnNlY29uZC0+cGFnZUNvdW50KCk7Cisg
ICAgICAgIGNvdW50ICs9IGl0LT52YWx1ZS0+cGFnZUNvdW50KCk7CiAKICAgICByZXR1cm4gY291
bnQ7CiB9CkBAIC05OSw3ICs5OSw3IEBAIHZvaWQgR2x5cGhQYWdlVHJlZU5vZGU6OnBydW5lVHJl
ZUN1c3RvbUZvbnREYXRhKGNvbnN0IEZvbnREYXRhKiBmb250RGF0YSkKICAgICBpZiAocm9vdHMp
IHsKICAgICAgICAgSGFzaE1hcDxpbnQsIEdseXBoUGFnZVRyZWVOb2RlKj46Oml0ZXJhdG9yIGVu
ZCA9IHJvb3RzLT5lbmQoKTsKICAgICAgICAgZm9yIChIYXNoTWFwPGludCwgR2x5cGhQYWdlVHJl
ZU5vZGUqPjo6aXRlcmF0b3IgaXQgPSByb290cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQot
ICAgICAgICAgICAgaXQtPnNlY29uZC0+cHJ1bmVDdXN0b21Gb250RGF0YShmb250RGF0YSk7Cisg
ICAgICAgICAgICBpdC0+dmFsdWUtPnBydW5lQ3VzdG9tRm9udERhdGEoZm9udERhdGEpOwogICAg
IH0KICAgICAKICAgICBpZiAocGFnZVplcm9Sb290KQpAQCAtMTExLDcgKzExMSw3IEBAIHZvaWQg
R2x5cGhQYWdlVHJlZU5vZGU6OnBydW5lVHJlZUZvbnREYXRhKGNvbnN0IFNpbXBsZUZvbnREYXRh
KiBmb250RGF0YSkKICAgICBpZiAocm9vdHMpIHsKICAgICAgICAgSGFzaE1hcDxpbnQsIEdseXBo
UGFnZVRyZWVOb2RlKj46Oml0ZXJhdG9yIGVuZCA9IHJvb3RzLT5lbmQoKTsKICAgICAgICAgZm9y
IChIYXNoTWFwPGludCwgR2x5cGhQYWdlVHJlZU5vZGUqPjo6aXRlcmF0b3IgaXQgPSByb290cy0+
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgaXQtPnNlY29uZC0+cHJ1bmVG
b250RGF0YShmb250RGF0YSk7CisgICAgICAgICAgICBpdC0+dmFsdWUtPnBydW5lRm9udERhdGEo
Zm9udERhdGEpOwogICAgIH0KICAgICAKICAgICBpZiAocGFnZVplcm9Sb290KQpAQCAtMzYyLDcg
KzM2Miw3IEBAIHZvaWQgR2x5cGhQYWdlVHJlZU5vZGU6OnBydW5lQ3VzdG9tRm9udERhdGEoY29u
c3QgRm9udERhdGEqIGZvbnREYXRhKQogICAgICAgICByZXR1cm47CiAgICAgSGFzaE1hcDxjb25z
dCBGb250RGF0YSosIEdseXBoUGFnZVRyZWVOb2RlKj46Oml0ZXJhdG9yIGVuZCA9IG1fY2hpbGRy
ZW4uZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPGNvbnN0IEZvbnREYXRhKiwgR2x5cGhQYWdlVHJl
ZU5vZGUqPjo6aXRlcmF0b3IgaXQgPSBtX2NoaWxkcmVuLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkKLSAgICAgICAgaXQtPnNlY29uZC0+cHJ1bmVDdXN0b21Gb250RGF0YShmb250RGF0YSk7Cisg
ICAgICAgIGl0LT52YWx1ZS0+cHJ1bmVDdXN0b21Gb250RGF0YShmb250RGF0YSk7CiB9CiAKIHZv
aWQgR2x5cGhQYWdlVHJlZU5vZGU6OnBydW5lRm9udERhdGEoY29uc3QgU2ltcGxlRm9udERhdGEq
IGZvbnREYXRhLCB1bnNpZ25lZCBsZXZlbCkKQEAgLTM3OCw3ICszNzgsNyBAQCB2b2lkIEdseXBo
UGFnZVRyZWVOb2RlOjpwcnVuZUZvbnREYXRhKGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0
YSwgdW5zaWduZWQgbAogICAgIC8vIFBydW5lIGFueSBicmFuY2ggdGhhdCBjb250YWlucyB0aGlz
IEZvbnREYXRhLgogICAgIEhhc2hNYXA8Y29uc3QgRm9udERhdGEqLCBHbHlwaFBhZ2VUcmVlTm9k
ZSo+OjppdGVyYXRvciBjaGlsZCA9IG1fY2hpbGRyZW4uZmluZChmb250RGF0YSk7CiAgICAgaWYg
KGNoaWxkICE9IG1fY2hpbGRyZW4uZW5kKCkpIHsKLSAgICAgICAgR2x5cGhQYWdlVHJlZU5vZGUq
IG5vZGUgPSBjaGlsZC0+c2Vjb25kOworICAgICAgICBHbHlwaFBhZ2VUcmVlTm9kZSogbm9kZSA9
IGNoaWxkLT52YWx1ZTsKICAgICAgICAgbV9jaGlsZHJlbi5yZW1vdmUoZm9udERhdGEpOwogICAg
ICAgICB1bnNpZ25lZCBjdXN0b21Gb250Q291bnQgPSBub2RlLT5tX2N1c3RvbUZvbnRDb3VudDsK
ICAgICAgICAgZGVsZXRlIG5vZGU7CkBAIC0zOTQsNyArMzk0LDcgQEAgdm9pZCBHbHlwaFBhZ2VU
cmVlTm9kZTo6cHJ1bmVGb250RGF0YShjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEsIHVu
c2lnbmVkIGwKIAogICAgIEhhc2hNYXA8Y29uc3QgRm9udERhdGEqLCBHbHlwaFBhZ2VUcmVlTm9k
ZSo+OjppdGVyYXRvciBlbmQgPSBtX2NoaWxkcmVuLmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDxj
b25zdCBGb250RGF0YSosIEdseXBoUGFnZVRyZWVOb2RlKj46Oml0ZXJhdG9yIGl0ID0gbV9jaGls
ZHJlbi5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPnBydW5l
Rm9udERhdGEoZm9udERhdGEsIGxldmVsKTsKKyAgICAgICAgaXQtPnZhbHVlLT5wcnVuZUZvbnRE
YXRhKGZvbnREYXRhLCBsZXZlbCk7CiB9CiAKICNpZm5kZWYgTkRFQlVHCkBAIC00MDYsOCArNDA2
LDggQEAgdm9pZCBHbHlwaFBhZ2VUcmVlTm9kZTo6cHJ1bmVGb250RGF0YShjb25zdCBTaW1wbGVG
b250RGF0YSogZm9udERhdGEsIHVuc2lnbmVkIGwKIAogICAgICAgICBIYXNoTWFwPGNvbnN0IEZv
bnREYXRhKiwgR2x5cGhQYWdlVHJlZU5vZGUqPjo6aXRlcmF0b3IgZW5kID0gbV9jaGlsZHJlbi5l
bmQoKTsKICAgICAgICAgZm9yIChIYXNoTWFwPGNvbnN0IEZvbnREYXRhKiwgR2x5cGhQYWdlVHJl
ZU5vZGUqPjo6aXRlcmF0b3IgaXQgPSBtX2NoaWxkcmVuLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgewotICAgICAgICAgICAgcHJpbnRmKCIlc1x0JXAgJXNcbiIsIGluZGVudC5kYXRhKCksIGl0
LT5maXJzdCwgaXQtPmZpcnN0LT5kZXNjcmlwdGlvbigpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAg
ICAgICAgaXQtPnNlY29uZC0+c2hvd1N1YnRyZWUoKTsKKyAgICAgICAgICAgIHByaW50ZigiJXNc
dCVwICVzXG4iLCBpbmRlbnQuZGF0YSgpLCBpdC0+a2V5LCBpdC0+a2V5LT5kZXNjcmlwdGlvbigp
LnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgaXQtPnZhbHVlLT5zaG93U3VidHJlZSgpOwog
ICAgICAgICB9CiAgICAgICAgIGlmIChtX3N5c3RlbUZhbGxiYWNrQ2hpbGQpIHsKICAgICAgICAg
ICAgIHByaW50ZigiJXNcdCogZmFsbGJhY2tcbiIsIGluZGVudC5kYXRhKCkpOwpAQCAtNDI1LDgg
KzQyNSw4IEBAIHZvaWQgc2hvd0dseXBoUGFnZVRyZWVzKCkKICAgICBzaG93R2x5cGhQYWdlVHJl
ZSgwKTsKICAgICBIYXNoTWFwPGludCwgV2ViQ29yZTo6R2x5cGhQYWdlVHJlZU5vZGUqPjo6aXRl
cmF0b3IgZW5kID0gV2ViQ29yZTo6R2x5cGhQYWdlVHJlZU5vZGU6OnJvb3RzLT5lbmQoKTsKICAg
ICBmb3IgKEhhc2hNYXA8aW50LCBXZWJDb3JlOjpHbHlwaFBhZ2VUcmVlTm9kZSo+OjppdGVyYXRv
ciBpdCA9IFdlYkNvcmU6OkdseXBoUGFnZVRyZWVOb2RlOjpyb290cy0+YmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7Ci0gICAgICAgIHByaW50ZigiXG5QYWdlICVkOlxuIiwgaXQtPmZpcnN0KTsK
LSAgICAgICAgc2hvd0dseXBoUGFnZVRyZWUoaXQtPmZpcnN0KTsKKyAgICAgICAgcHJpbnRmKCJc
blBhZ2UgJWQ6XG4iLCBpdC0+a2V5KTsKKyAgICAgICAgc2hvd0dseXBoUGFnZVRyZWUoaXQtPmtl
eSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9UaWxlZEJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9UaWxlZEJhY2tpbmdTdG9yZS5jcHAKaW5kZXggYjQ4NWRjZjE3ZjVlYmVmMjlhOTY2ZWNj
NjNkNmExOTA4MzJkNzMwNC4uZGY3ZmE3ZGNiM2I5OWFmYWYyYWJlNmRjZTFlMmZkMWE3ZTU3OWRj
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNr
aW5nU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RpbGVk
QmFja2luZ1N0b3JlLmNwcApAQCAtMTE2LDkgKzExNiw5IEBAIHZvaWQgVGlsZWRCYWNraW5nU3Rv
cmU6OnVwZGF0ZVRpbGVCdWZmZXJzKCkKICAgICBWZWN0b3I8UmVmUHRyPFRpbGU+ID4gZGlydHlU
aWxlczsKICAgICBUaWxlTWFwOjppdGVyYXRvciBlbmQgPSBtX3RpbGVzLmVuZCgpOwogICAgIGZv
ciAoVGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgewotICAgICAgICBpZiAoIWl0LT5zZWNvbmQtPmlzRGlydHkoKSkKKyAgICAgICAgaWYgKCFp
dC0+dmFsdWUtPmlzRGlydHkoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBkaXJ0
eVRpbGVzLmFwcGVuZChpdC0+c2Vjb25kKTsKKyAgICAgICAgZGlydHlUaWxlcy5hcHBlbmQoaXQt
PnZhbHVlKTsKICAgICB9CiAKICAgICBpZiAoZGlydHlUaWxlcy5pc0VtcHR5KCkpIHsKQEAgLTQw
MSwxMyArNDAxLDEzIEBAIGJvb2wgVGlsZWRCYWNraW5nU3RvcmU6OnJlc2l6ZUVkZ2VUaWxlcygp
CiAgICAgVmVjdG9yPFRpbGU6OkNvb3JkaW5hdGU+IHRpbGVzVG9SZW1vdmU7CiAgICAgVGlsZU1h
cDo6aXRlcmF0b3IgZW5kID0gbV90aWxlcy5lbmQoKTsKICAgICBmb3IgKFRpbGVNYXA6Oml0ZXJh
dG9yIGl0ID0gbV90aWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgVGls
ZTo6Q29vcmRpbmF0ZSB0aWxlQ29vcmRpbmF0ZSA9IGl0LT5zZWNvbmQtPmNvb3JkaW5hdGUoKTsK
LSAgICAgICAgSW50UmVjdCB0aWxlUmVjdCA9IGl0LT5zZWNvbmQtPnJlY3QoKTsKKyAgICAgICAg
VGlsZTo6Q29vcmRpbmF0ZSB0aWxlQ29vcmRpbmF0ZSA9IGl0LT52YWx1ZS0+Y29vcmRpbmF0ZSgp
OworICAgICAgICBJbnRSZWN0IHRpbGVSZWN0ID0gaXQtPnZhbHVlLT5yZWN0KCk7CiAgICAgICAg
IEludFJlY3QgZXhwZWN0ZWRUaWxlUmVjdCA9IHRpbGVSZWN0Rm9yQ29vcmRpbmF0ZSh0aWxlQ29v
cmRpbmF0ZSk7CiAgICAgICAgIGlmIChleHBlY3RlZFRpbGVSZWN0LmlzRW1wdHkoKSkKICAgICAg
ICAgICAgIHRpbGVzVG9SZW1vdmUuYXBwZW5kKHRpbGVDb29yZGluYXRlKTsKICAgICAgICAgZWxz
ZSBpZiAoZXhwZWN0ZWRUaWxlUmVjdCAhPSB0aWxlUmVjdCkgewotICAgICAgICAgICAgaXQtPnNl
Y29uZC0+cmVzaXplKGV4cGVjdGVkVGlsZVJlY3Quc2l6ZSgpKTsKKyAgICAgICAgICAgIGl0LT52
YWx1ZS0+cmVzaXplKGV4cGVjdGVkVGlsZVJlY3Quc2l6ZSgpKTsKICAgICAgICAgICAgIHdhc1Jl
c2l6ZWQgPSB0cnVlOwogICAgICAgICB9CiAgICAgfQpAQCAtNDI2LDggKzQyNiw4IEBAIHZvaWQg
VGlsZWRCYWNraW5nU3RvcmU6OnNldEtlZXBSZWN0KGNvbnN0IEludFJlY3QmIGtlZXBSZWN0KQog
ICAgIFZlY3RvcjxUaWxlOjpDb29yZGluYXRlPiB0b1JlbW92ZTsKICAgICBUaWxlTWFwOjppdGVy
YXRvciBlbmQgPSBtX3RpbGVzLmVuZCgpOwogICAgIGZvciAoVGlsZU1hcDo6aXRlcmF0b3IgaXQg
PSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBUaWxlOjpDb29y
ZGluYXRlIGNvb3JkaW5hdGUgPSBpdC0+c2Vjb25kLT5jb29yZGluYXRlKCk7Ci0gICAgICAgIEZs
b2F0UmVjdCB0aWxlUmVjdCA9IGl0LT5zZWNvbmQtPnJlY3QoKTsKKyAgICAgICAgVGlsZTo6Q29v
cmRpbmF0ZSBjb29yZGluYXRlID0gaXQtPnZhbHVlLT5jb29yZGluYXRlKCk7CisgICAgICAgIEZs
b2F0UmVjdCB0aWxlUmVjdCA9IGl0LT52YWx1ZS0+cmVjdCgpOwogICAgICAgICBpZiAoIXRpbGVS
ZWN0LmludGVyc2VjdHMoa2VlcFJlY3RGKSkKICAgICAgICAgICAgIHRvUmVtb3ZlLmFwcGVuZChj
b29yZGluYXRlKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9hdmZvdW5kYXRpb24vY2YvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0Yu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL2NmL01l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGLmNwcAppbmRleCA4MWQ4NjI5ODE1MjlkY2I1
ZTRhYjJkMGMwMDY2NzJkZTc2YTg4MmYxLi43OGNhYzY3MmU0MThjMTU5MDMzYzBhMWZmODhkZmYy
ZDZhMTE5NTc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
dmZvdW5kYXRpb24vY2YvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0YuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9jZi9NZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb25DRi5jcHAKQEAgLTkxNSw3ICs5MTUsNyBAQCBBVkZXcmFw
cGVyKiBBVkZXcmFwcGVyOjphdmZXcmFwcGVyRm9yQ2FsbGJhY2tDb250ZXh0KHZvaWQqIGNvbnRl
eHQpCiAgICAgaWYgKGl0ID09IG1hcCgpLmVuZCgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAg
IHJldHVybiBpdC0+c2Vjb25kOworICAgIHJldHVybiBpdC0+dmFsdWU7CiB9CiAKIHZvaWQgQVZG
V3JhcHBlcjo6c2NoZWR1bGVEaXNjb25uZWN0QW5kRGVsZXRlKCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJUaWxlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyVGlsZXIuY3Bw
CmluZGV4IDlmNWM2YWYzZTg1MDYxYTk3MmQwNDMxMWJlOTAzMTVlOTViNWUwZGEuLjZkZjFkYTNi
N2M4MDA0Y2EyMTgyMTVhYmQ0ZmJiMjcxOWM1ZTg2MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJUaWxlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclRpbGVyLmNwcApA
QCAtMzY5LDggKzM2OSw4IEBAIHZvaWQgTGF5ZXJUaWxlcjo6bGF5ZXJWaXNpYmlsaXR5Q2hhbmdl
ZChMYXllckNvbXBvc2l0aW5nVGhyZWFkKiwgYm9vbCB2aXNpYmxlKQogICAgIH0KIAogICAgIGZv
ciAoVGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IG1fdGlsZXMu
ZW5kKCk7ICsraXQpIHsKLSAgICAgICAgVGlsZUluZGV4IGluZGV4ID0gKCppdCkuZmlyc3Q7Ci0g
ICAgICAgIExheWVyVGlsZSogdGlsZSA9ICgqaXQpLnNlY29uZDsKKyAgICAgICAgVGlsZUluZGV4
IGluZGV4ID0gKCppdCkua2V5OworICAgICAgICBMYXllclRpbGUqIHRpbGUgPSAoKml0KS52YWx1
ZTsKICAgICAgICAgdGlsZS0+c2V0VmlzaWJsZShmYWxzZSk7CiAgICAgfQogfQpAQCAtMzg0LDIx
ICszODQsMjEgQEAgdm9pZCBMYXllclRpbGVyOjp1cGxvYWRUZXh0dXJlc0lmTmVlZGVkKExheWVy
Q29tcG9zaXRpbmdUaHJlYWQqKQogCiAgICAgVGlsZUpvYnNNYXA6OmNvbnN0X2l0ZXJhdG9yIHRp
bGVKb2JzSXRlckVuZCA9IHRpbGVKb2JzTWFwLmVuZCgpOwogICAgIGZvciAoVGlsZUpvYnNNYXA6
OmNvbnN0X2l0ZXJhdG9yIHRpbGVKb2JzSXRlciA9IHRpbGVKb2JzTWFwLmJlZ2luKCk7IHRpbGVK
b2JzSXRlciAhPSB0aWxlSm9ic0l0ZXJFbmQ7ICsrdGlsZUpvYnNJdGVyKSB7Ci0gICAgICAgIElu
dFBvaW50IG9yaWdpbiA9IG9yaWdpbk9mVGlsZSh0aWxlSm9ic0l0ZXItPmZpcnN0KTsKKyAgICAg
ICAgSW50UG9pbnQgb3JpZ2luID0gb3JpZ2luT2ZUaWxlKHRpbGVKb2JzSXRlci0+a2V5KTsKIAot
ICAgICAgICBMYXllclRpbGUqIHRpbGUgPSBtX3RpbGVzLmdldCh0aWxlSm9ic0l0ZXItPmZpcnN0
KTsKKyAgICAgICAgTGF5ZXJUaWxlKiB0aWxlID0gbV90aWxlcy5nZXQodGlsZUpvYnNJdGVyLT5r
ZXkpOwogICAgICAgICBpZiAoIXRpbGUpIHsKICAgICAgICAgICAgIGlmIChvcmlnaW4ueCgpID49
IG1fcmVxdWlyZWRUZXh0dXJlU2l6ZS53aWR0aCgpIHx8IG9yaWdpbi55KCkgPj0gbV9yZXF1aXJl
ZFRleHR1cmVTaXplLmhlaWdodCgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgdGlsZSA9IG5ldyBMYXllclRpbGUoKTsKLSAgICAgICAgICAgIG1fdGlsZXMuYWRkKHRp
bGVKb2JzSXRlci0+Zmlyc3QsIHRpbGUpOworICAgICAgICAgICAgbV90aWxlcy5hZGQodGlsZUpv
YnNJdGVyLT5rZXksIHRpbGUpOwogICAgICAgICB9CiAKICAgICAgICAgSW50UmVjdCB0aWxlUmVj
dChvcmlnaW4sIHRpbGVTaXplKCkpOwogICAgICAgICB0aWxlUmVjdC5zZXRXaWR0aChtaW4obV9y
ZXF1aXJlZFRleHR1cmVTaXplLndpZHRoKCkgLSB0aWxlUmVjdC54KCksIHRpbGVSZWN0LndpZHRo
KCkpKTsKICAgICAgICAgdGlsZVJlY3Quc2V0SGVpZ2h0KG1pbihtX3JlcXVpcmVkVGV4dHVyZVNp
emUuaGVpZ2h0KCkgLSB0aWxlUmVjdC55KCksIHRpbGVSZWN0LmhlaWdodCgpKSk7CiAKLSAgICAg
ICAgcGVyZm9ybVRpbGVKb2IodGlsZSwgKnRpbGVKb2JzSXRlci0+c2Vjb25kLCB0aWxlUmVjdCk7
CisgICAgICAgIHBlcmZvcm1UaWxlSm9iKHRpbGUsICp0aWxlSm9ic0l0ZXItPnZhbHVlLCB0aWxl
UmVjdCk7CiAgICAgfQogCiAgICAgbV90ZXh0dXJlSm9icy5jbGVhcigpOwpAQCAtNDQxLDExICs0
NDEsMTEgQEAgdm9pZCBMYXllclRpbGVyOjphZGRUaWxlSm9iKGNvbnN0IFRpbGVJbmRleCYgaW5k
ZXgsIGNvbnN0IFRleHR1cmVKb2ImIGpvYiwgVGlsZUoKICAgICAgICAgcmV0dXJuOwogCiAgICAg
Ly8gSW4gdGhpcyBjYXNlIHdlIGxlYXZlIHRoZSBwcmV2aW91cyBqb2IuCi0gICAgaWYgKGpvYi5t
X3R5cGUgPT0gVGV4dHVyZUpvYjo6RGlydHlDb250ZW50cyAmJiByZXN1bHQuaXRlcmF0b3ItPnNl
Y29uZC0+bV90eXBlID09IFRleHR1cmVKb2I6OkRpc2NhcmRDb250ZW50cykKKyAgICBpZiAoam9i
Lm1fdHlwZSA9PSBUZXh0dXJlSm9iOjpEaXJ0eUNvbnRlbnRzICYmIHJlc3VsdC5pdGVyYXRvci0+
dmFsdWUtPm1fdHlwZSA9PSBUZXh0dXJlSm9iOjpEaXNjYXJkQ29udGVudHMpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIC8vIE92ZXJyaWRlIHRoZSBwcmV2aW91cyBqb2IuCi0gICAgcmVzdWx0Lml0
ZXJhdG9yLT5zZWNvbmQgPSAmam9iOworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSAmam9i
OwogfQogCiB2b2lkIExheWVyVGlsZXI6OnBlcmZvcm1UaWxlSm9iKExheWVyVGlsZSogdGlsZSwg
Y29uc3QgVGV4dHVyZUpvYiYgam9iLCBjb25zdCBJbnRSZWN0JiB0aWxlUmVjdCkKQEAgLTYzMCw3
ICs2MzAsNyBAQCB2b2lkIExheWVyVGlsZXI6OmRlbGV0ZVRleHR1cmVzKExheWVyQ29tcG9zaXRp
bmdUaHJlYWQqKQogICAgIC8vIHRvdWNoaW5nIHNvbWUgV2ViS2l0IHRocmVhZCBzdGF0ZS4KICAg
ICBpZiAobV90aWxlcy5zaXplKCkpIHsKICAgICAgICAgZm9yIChUaWxlTWFwOjppdGVyYXRvciBp
dCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0gbV90aWxlcy5lbmQoKTsgKytpdCkKLSAgICAgICAg
ICAgICgqaXQpLnNlY29uZC0+ZGlzY2FyZENvbnRlbnRzKCk7CisgICAgICAgICAgICAoKml0KS52
YWx1ZS0+ZGlzY2FyZENvbnRlbnRzKCk7CiAgICAgICAgIG1fdGlsZXMuY2xlYXIoKTsKIAogICAg
ICAgICBtX2NvbnRlbnRzRGlydHkgPSB0cnVlOwpAQCAtNjQ3LDcgKzY0Nyw3IEBAIHZvaWQgTGF5
ZXJUaWxlcjo6cHJ1bmVUZXh0dXJlcygpCiAgICAgLy8gUHJ1bmUgdGlsZXMgdGhhdCBhcmUgbm8g
bG9uZ2VyIG5lZWRlZC4KICAgICBWZWN0b3I8VGlsZUluZGV4PiB0aWxlc1RvRGVsZXRlOwogICAg
IGZvciAoVGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IG1fdGls
ZXMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgVGlsZUluZGV4IGluZGV4ID0gKCppdCkuZmlyc3Q7
CisgICAgICAgIFRpbGVJbmRleCBpbmRleCA9ICgqaXQpLmtleTsKIAogICAgICAgICBJbnRQb2lu
dCBvcmlnaW4gPSBvcmlnaW5PZlRpbGUoaW5kZXgpOwogICAgICAgICBpZiAob3JpZ2luLngoKSA+
PSBtX3JlcXVpcmVkVGV4dHVyZVNpemUud2lkdGgoKSB8fCBvcmlnaW4ueSgpID49IG1fcmVxdWly
ZWRUZXh0dXJlU2l6ZS5oZWlnaHQoKSkKQEAgLTczOSw3ICs3MzksNyBAQCB2b2lkIExheWVyVGls
ZXI6OmJpbmRDb250ZW50c1RleHR1cmUoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCopCiAgICAgaWYg
KG1fdGlsZXMuc2l6ZSgpICE9IDEpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNvbnN0IExheWVy
VGlsZSogdGlsZSA9IG1fdGlsZXMuYmVnaW4oKS0+c2Vjb25kOworICAgIGNvbnN0IExheWVyVGls
ZSogdGlsZSA9IG1fdGlsZXMuYmVnaW4oKS0+dmFsdWU7CiAKICAgICBBU1NFUlQodGlsZS0+aGFz
VGV4dHVyZSgpKTsKICAgICBpZiAoIXRpbGUtPmhhc1RleHR1cmUoKSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvVGV4dHVyZUNhY2hlQ29t
cG9zaXRpbmdUaHJlYWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxh
Y2tiZXJyeS9UZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZC5jcHAKaW5kZXggNWI2YmI4NzM2
NDlmOWE4OGJjYjc4ZTIwYjE3YTE4ZWMzNTRjYjc1MS4uZDY1YzRkYWRkYmJiMjU5OGViMGZhMjQx
NzFjNGU2YWYxNGRkNzRjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYmxhY2tiZXJyeS9UZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9UZXh0dXJlQ2FjaGVD
b21wb3NpdGluZ1RocmVhZC5jcHAKQEAgLTIwMiwxMCArMjAyLDEwIEBAIHZvaWQgVGV4dHVyZUNh
Y2hlQ29tcG9zaXRpbmdUaHJlYWQ6OnNldE1lbW9yeVVzYWdlKHNpemVfdCBtZW1vcnlVc2FnZSkK
IFBhc3NSZWZQdHI8VGV4dHVyZT4gVGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQ6OnRleHR1
cmVGb3JUaWxlZENvbnRlbnRzKGNvbnN0IFNrQml0bWFwJiBjb250ZW50cywgY29uc3QgSW50UmVj
dCYgdGlsZVJlY3QsIGNvbnN0IFRpbGVJbmRleCYgaW5kZXgsIGJvb2wgaXNPcGFxdWUpCiB7CiAg
ICAgSGFzaE1hcDxDb250ZW50c0tleSwgVGV4dHVyZU1hcD46Oml0ZXJhdG9yIGl0ID0gbV9jYWNo
ZS5hZGQoa2V5KGNvbnRlbnRzKSwgVGV4dHVyZU1hcCgpKS5pdGVyYXRvcjsKLSAgICBUZXh0dXJl
TWFwJiBtYXAgPSAoKml0KS5zZWNvbmQ7CisgICAgVGV4dHVyZU1hcCYgbWFwID0gKCppdCkudmFs
dWU7CiAKICAgICBUZXh0dXJlTWFwOjppdGVyYXRvciBqdCA9IG1hcC5hZGQoaW5kZXgsIFJlZlB0
cjxUZXh0dXJlPigpKS5pdGVyYXRvcjsKLSAgICBSZWZQdHI8VGV4dHVyZT4gdGV4dHVyZSA9ICgq
anQpLnNlY29uZDsKKyAgICBSZWZQdHI8VGV4dHVyZT4gdGV4dHVyZSA9ICgqanQpLnZhbHVlOwog
ICAgIGlmICghdGV4dHVyZSkgewogICAgICAgICB0ZXh0dXJlID0gY3JlYXRlVGV4dHVyZSgpOwog
I2lmIERFQlVHX1RFWFRVUkVfTUVNT1JZX1VTQUdFCkBAIC0yNDQsNyArMjQ0LDcgQEAgUGFzc1Jl
ZlB0cjxUZXh0dXJlPiBUZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZDo6dGV4dHVyZUZvckNv
bG9yKGNvbnN0IENvbG9yJgogI2VuZGlmCiAgICAgICAgIG1fY29sb3JzLnNldChjb2xvciwgdGV4
dHVyZSk7CiAgICAgfSBlbHNlCi0gICAgICAgIHRleHR1cmUgPSAoKml0KS5zZWNvbmQ7CisgICAg
ICAgIHRleHR1cmUgPSAoKml0KS52YWx1ZTsKIAogICAgIC8vIENvbG9yIHRleHR1cmVzIGNhbid0
IGJlIGV2aWN0ZWQsIHNvIG5vIG5lZWQgZm9yIFRleHR1cmVQcm90ZWN0b3IuCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0Eu
Y3BwCmluZGV4IGRjZGI1ODZkMGNiZmIzMjkzNjFkNmVkYjU5ZmNjYWMwZWIzMGIyMjYuLjUwZDMz
YTA3OWEyYmZkNWRmOWI4ZDZmYjY2YmQ5MTFhNzBkMmZkZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcApAQCAt
NDc3LDcgKzQ3Nyw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjptb3ZlT3JDb3B5QW5pbWF0aW9u
cyhNb3ZlT3JDb3B5IG9wZXJhdGlvbiwgUGxhdGZvcm1DQUxheWVyCiAgICAgLy8gTG9vayBmb3Ig
cnVubmluZyBhbmltYXRpb25zIGFmZmVjdGluZyB0aGlzIHByb3BlcnR5LgogICAgIEFuaW1hdGlv
bnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcnVubmluZ0FuaW1hdGlvbnMuZW5kKCk7CiAg
ICAgZm9yIChBbmltYXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fcnVubmluZ0FuaW1h
dGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IFZlY3RvcjxM
YXllclByb3BlcnR5QW5pbWF0aW9uPiYgcHJvcGVydHlBbmltYXRpb25zID0gaXQtPnNlY29uZDsK
KyAgICAgICAgY29uc3QgVmVjdG9yPExheWVyUHJvcGVydHlBbmltYXRpb24+JiBwcm9wZXJ0eUFu
aW1hdGlvbnMgPSBpdC0+dmFsdWU7CiAgICAgICAgIHNpemVfdCBudW1BbmltYXRpb25zID0gcHJv
cGVydHlBbmltYXRpb25zLnNpemUoKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBu
dW1BbmltYXRpb25zOyArK2kpIHsKICAgICAgICAgICAgIGNvbnN0IExheWVyUHJvcGVydHlBbmlt
YXRpb24mIGN1cnJBbmltYXRpb24gPSBwcm9wZXJ0eUFuaW1hdGlvbnNbaV07CkBAIC03MTksNyAr
NzE5LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnBhdXNlQW5pbWF0aW9uKGNvbnN0IFN0cmlu
ZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWVPZmYKIAogICAgIEFuaW1hdGlvbnNUb1Byb2Nl
c3NNYXA6Oml0ZXJhdG9yIGl0ID0gbV9hbmltYXRpb25zVG9Qcm9jZXNzLmZpbmQoYW5pbWF0aW9u
TmFtZSk7CiAgICAgaWYgKGl0ICE9IG1fYW5pbWF0aW9uc1RvUHJvY2Vzcy5lbmQoKSkgewotICAg
ICAgICBBbmltYXRpb25Qcm9jZXNzaW5nQWN0aW9uJiBwcm9jZXNzaW5nSW5mbyA9IGl0LT5zZWNv
bmQ7CisgICAgICAgIEFuaW1hdGlvblByb2Nlc3NpbmdBY3Rpb24mIHByb2Nlc3NpbmdJbmZvID0g
aXQtPnZhbHVlOwogICAgICAgICAvLyBJZiBhbiBhbmltYXRpb24gaXMgc2NoZWR1bGVkIHRvIGJl
IHJlbW92ZWQsIGRvbid0IGNoYW5nZSB0aGUgcmVtb3ZlIHRvIGEgcGF1c2UuCiAgICAgICAgIGlm
IChwcm9jZXNzaW5nSW5mby5hY3Rpb24gIT0gUmVtb3ZlKQogICAgICAgICAgICAgcHJvY2Vzc2lu
Z0luZm8uYWN0aW9uID0gUGF1c2U7CkBAIC04NTQsNyArODU0LDcgQEAgdm9pZCBHcmFwaGljc0xh
eWVyQ0E6OmxheWVyRGlkRGlzcGxheShQbGF0Zm9ybUxheWVyKiBsYXllcikKICAgICBpZiAobGF5
ZXJDbG9uZU1hcCkgewogICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5
ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAg
ICAgICBQbGF0Zm9ybUNBTGF5ZXIqIGN1cnJDbG9uZSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAg
ICAgICAgICBQbGF0Zm9ybUNBTGF5ZXIqIGN1cnJDbG9uZSA9IGl0LT52YWx1ZS5nZXQoKTsKICAg
ICAgICAgICAgIGlmICghY3VyckNsb25lKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCkBA
IC0xMTk2LDEwICsxMTk2LDEwIEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVHZW9tZXRy
eShmbG9hdCBwYWdlU2NhbGVGYWN0b3IsIGNvbnN0IEZsb2F0UG9pbnQmIHBvCiAgICAgICAgIGlm
IChMYXllck1hcCogbGF5ZXJDbG9uZU1hcCA9IG1fc3RydWN0dXJhbExheWVyQ2xvbmVzLmdldCgp
KSB7CiAgICAgICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9u
ZU1hcC0+ZW5kKCk7CiAgICAgICAgICAgICBmb3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IGxheWVyQ2xvbmVNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAg
ICAgICAgIFBsYXRmb3JtQ0FMYXllciogY2xvbmUgPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAg
ICAgICAgICAgIFBsYXRmb3JtQ0FMYXllciogY2xvbmUgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAg
ICAgICAgICAgICAgRmxvYXRQb2ludCBjbG9uZVBvc2l0aW9uID0gbGF5ZXJQb3NpdGlvbjsKIAot
ICAgICAgICAgICAgICAgIGlmIChtX3JlcGxpY2FMYXllciAmJiBpc1JlcGxpY2F0ZWRSb290Q2xv
bmUoaXQtPmZpcnN0KSkgeworICAgICAgICAgICAgICAgIGlmIChtX3JlcGxpY2FMYXllciAmJiBp
c1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQtPmtleSkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8g
TWFpbnRhaW4gdGhlIHNwZWNpYWwtY2FzZSBwb3NpdGlvbiBmb3IgdGhlIHJvb3Qgb2YgYSBjbG9u
ZSBzdWJ0cmVlLAogICAgICAgICAgICAgICAgICAgICAvLyB3aGljaCB3ZSBzZXQgdXAgaW4gcmVw
bGljYXRlZExheWVyUm9vdCgpLgogICAgICAgICAgICAgICAgICAgICBjbG9uZVBvc2l0aW9uID0g
cG9zaXRpb25Gb3JDbG9uZVJvb3RMYXllcigpOwpAQCAtMTIyMywxMCArMTIyMywxMCBAQCB2b2lk
IEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlR2VvbWV0cnkoZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBj
b25zdCBGbG9hdFBvaW50JiBwbwogICAgIGlmIChMYXllck1hcCogbGF5ZXJDbG9uZU1hcCA9IG1f
bGF5ZXJDbG9uZXMuZ2V0KCkpIHsKICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IGxheWVyQ2xvbmVNYXAtPmVuZCgpOwogICAgICAgICBmb3IgKExheWVyTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IGxheWVyQ2xvbmVNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewot
ICAgICAgICAgICAgUGxhdGZvcm1DQUxheWVyKiBjbG9uZSA9IGl0LT5zZWNvbmQuZ2V0KCk7Cisg
ICAgICAgICAgICBQbGF0Zm9ybUNBTGF5ZXIqIGNsb25lID0gaXQtPnZhbHVlLmdldCgpOwogICAg
ICAgICAgICAgRmxvYXRQb2ludCBjbG9uZVBvc2l0aW9uID0gYWRqdXN0ZWRQb3NpdGlvbjsKIAot
ICAgICAgICAgICAgaWYgKCFtX3N0cnVjdHVyYWxMYXllciAmJiBtX3JlcGxpY2FMYXllciAmJiBp
c1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQtPmZpcnN0KSkgeworICAgICAgICAgICAgaWYgKCFtX3N0
cnVjdHVyYWxMYXllciAmJiBtX3JlcGxpY2FMYXllciAmJiBpc1JlcGxpY2F0ZWRSb290Q2xvbmUo
aXQtPmtleSkpIHsKICAgICAgICAgICAgICAgICAvLyBNYWludGFpbiB0aGUgc3BlY2lhbC1jYXNl
IHBvc2l0aW9uIGZvciB0aGUgcm9vdCBvZiBhIGNsb25lIHN1YnRyZWUsCiAgICAgICAgICAgICAg
ICAgLy8gd2hpY2ggd2Ugc2V0IHVwIGluIHJlcGxpY2F0ZWRMYXllclJvb3QoKS4KICAgICAgICAg
ICAgICAgICBjbG9uZVBvc2l0aW9uID0gcG9zaXRpb25Gb3JDbG9uZVJvb3RMYXllcigpOwpAQCAt
MTI0Niw4ICsxMjQ2LDggQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZVRyYW5zZm9ybSgp
CiAgICAgaWYgKExheWVyTWFwKiBsYXllckNsb25lTWFwID0gcHJpbWFyeUxheWVyQ2xvbmVzKCkp
IHsKICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxheWVyQ2xvbmVNYXAt
PmVuZCgpOwogICAgICAgICBmb3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGxheWVy
Q2xvbmVNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgUGxhdGZv
cm1DQUxheWVyKiBjdXJyTGF5ZXIgPSBpdC0+c2Vjb25kLmdldCgpOwotICAgICAgICAgICAgaWYg
KG1fcmVwbGljYUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9uZShpdC0+Zmlyc3QpKSB7Cisg
ICAgICAgICAgICBQbGF0Zm9ybUNBTGF5ZXIqIGN1cnJMYXllciA9IGl0LT52YWx1ZS5nZXQoKTsK
KyAgICAgICAgICAgIGlmIChtX3JlcGxpY2FMYXllciAmJiBpc1JlcGxpY2F0ZWRSb290Q2xvbmUo
aXQtPmtleSkpIHsKICAgICAgICAgICAgICAgICAvLyBNYWludGFpbiB0aGUgc3BlY2lhbC1jYXNl
IHRyYW5zZm9ybSBmb3IgdGhlIHJvb3Qgb2YgYSBjbG9uZSBzdWJ0cmVlLAogICAgICAgICAgICAg
ICAgIC8vIHdoaWNoIHdlIHNldCB1cCBpbiByZXBsaWNhdGVkTGF5ZXJSb290KCkuCiAgICAgICAg
ICAgICAgICAgY3VyckxheWVyLT5zZXRUcmFuc2Zvcm0oVHJhbnNmb3JtYXRpb25NYXRyaXgoKSk7
CkBAIC0xMjY0LDcgKzEyNjQsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlQ2hpbGRy
ZW5UcmFuc2Zvcm0oKQogICAgIGlmIChMYXllck1hcCogbGF5ZXJDbG9uZU1hcCA9IHByaW1hcnlM
YXllckNsb25lcygpKSB7CiAgICAgICAgIExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBs
YXllckNsb25lTWFwLT5lbmQoKTsKICAgICAgICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBsYXllckNsb25lTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAg
ICAgICBpdC0+c2Vjb25kLT5zZXRTdWJsYXllclRyYW5zZm9ybShtX2NoaWxkcmVuVHJhbnNmb3Jt
KTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+c2V0U3VibGF5ZXJUcmFuc2Zvcm0obV9jaGlsZHJl
blRyYW5zZm9ybSk7CiAgICAgfQogfQogCkBAIC0xMjc1LDcgKzEyNzUsNyBAQCB2b2lkIEdyYXBo
aWNzTGF5ZXJDQTo6dXBkYXRlTWFza3NUb0JvdW5kcygpCiAgICAgaWYgKExheWVyTWFwKiBsYXll
ckNsb25lTWFwID0gbV9sYXllckNsb25lcy5nZXQoKSkgewogICAgICAgICBMYXllck1hcDo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAoTGF5
ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KQotICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0TWFza3NUb0JvdW5kcyhtX21h
c2tzVG9Cb3VuZHMpOworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRNYXNrc1RvQm91bmRzKG1f
bWFza3NUb0JvdW5kcyk7CiAgICAgfQogCiAgICAgdXBkYXRlRGVidWdJbmRpY2F0b3JzKCk7CkBA
IC0xMjkzLDcgKzEyOTMsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlQ29udGVudHNW
aXNpYmlsaXR5KCkKICAgICAgICAgaWYgKExheWVyTWFwKiBsYXllckNsb25lTWFwID0gbV9sYXll
ckNsb25lcy5nZXQoKSkgewogICAgICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IGxheWVyQ2xvbmVNYXAtPmVuZCgpOwogICAgICAgICAgICAgZm9yIChMYXllck1hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBsYXllckNsb25lTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
Ci0gICAgICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0Q29udGVudHMoMCk7CisgICAgICAgICAg
ICAgICAgaXQtPnZhbHVlLT5zZXRDb250ZW50cygwKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAg
LTEzMDUsNyArMTMwNSw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVDb250ZW50c09w
YXF1ZSgpCiAgICAgaWYgKExheWVyTWFwKiBsYXllckNsb25lTWFwID0gbV9sYXllckNsb25lcy5n
ZXQoKSkgewogICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9u
ZU1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgaXQt
PnNlY29uZC0+c2V0T3BhcXVlKG1fY29udGVudHNPcGFxdWUpOworICAgICAgICAgICAgaXQtPnZh
bHVlLT5zZXRPcGFxdWUobV9jb250ZW50c09wYXF1ZSk7CiAgICAgfQogfQogCkBAIC0xMzE3LDcg
KzEzMTcsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlQmFja2ZhY2VWaXNpYmlsaXR5
KCkKICAgICAgICAgaWYgKExheWVyTWFwKiBsYXllckNsb25lTWFwID0gbV9zdHJ1Y3R1cmFsTGF5
ZXJDbG9uZXMuZ2V0KCkpIHsKICAgICAgICAgICAgIExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBl
bmQgPSBsYXllckNsb25lTWFwLT5lbmQoKTsKICAgICAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KQotICAgICAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNldERvdWJsZVNpZGVkKG1fYmFja2ZhY2VW
aXNpYmlsaXR5KTsKKyAgICAgICAgICAgICAgICBpdC0+dmFsdWUtPnNldERvdWJsZVNpZGVkKG1f
YmFja2ZhY2VWaXNpYmlsaXR5KTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTMyNiw3ICsxMzI2
LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUJhY2tmYWNlVmlzaWJpbGl0eSgpCiAg
ICAgaWYgKExheWVyTWFwKiBsYXllckNsb25lTWFwID0gbV9sYXllckNsb25lcy5nZXQoKSkgewog
ICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5k
KCk7CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9u
ZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgaXQtPnNlY29uZC0+
c2V0RG91YmxlU2lkZWQobV9iYWNrZmFjZVZpc2liaWxpdHkpOworICAgICAgICAgICAgaXQtPnZh
bHVlLT5zZXREb3VibGVTaWRlZChtX2JhY2tmYWNlVmlzaWJpbGl0eSk7CiAgICAgfQogfQogCkBA
IC0xMzM4LDEwICsxMzM4LDEwIEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVGaWx0ZXJz
KCkKICAgICBpZiAoTGF5ZXJNYXAqIGxheWVyQ2xvbmVNYXAgPSBwcmltYXJ5TGF5ZXJDbG9uZXMo
KSkgewogICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1h
cC0+ZW5kKCk7CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5
ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAo
bV9yZXBsaWNhTGF5ZXIgJiYgaXNSZXBsaWNhdGVkUm9vdENsb25lKGl0LT5maXJzdCkpCisgICAg
ICAgICAgICBpZiAobV9yZXBsaWNhTGF5ZXIgJiYgaXNSZXBsaWNhdGVkUm9vdENsb25lKGl0LT5r
ZXkpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBpdC0+c2Vjb25k
LT5zZXRGaWx0ZXJzKG1fZmlsdGVycyk7CisgICAgICAgICAgICBpdC0+dmFsdWUtPnNldEZpbHRl
cnMobV9maWx0ZXJzKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTE0MzAsNyArMTQzMCw3IEBA
IHZvaWQgR3JhcGhpY3NMYXllckNBOjplbnN1cmVTdHJ1Y3R1cmFsTGF5ZXIoU3RydWN0dXJhbExh
eWVyUHVycG9zZSBwdXJwb3NlLCBmbG9hCiAgICAgaWYgKG1fbGF5ZXJDbG9uZXMpIHsKICAgICAg
ICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fbGF5ZXJDbG9uZXMtPmVuZCgpOwog
ICAgICAgICBmb3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fbGF5ZXJDbG9uZXMt
PmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgUGxhdGZvcm1DQUxheWVy
KiBjdXJyTGF5ZXIgPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgUGxhdGZvcm1DQUxh
eWVyKiBjdXJyTGF5ZXIgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBjdXJyTGF5ZXIt
PnNldFBvc2l0aW9uKHBvaW50KTsKICAgICAgICAgICAgIGN1cnJMYXllci0+c2V0QW5jaG9yUG9p
bnQoYW5jaG9yUG9pbnQpOwogICAgICAgICAgICAgY3VyckxheWVyLT5zZXRUcmFuc2Zvcm0oVHJh
bnNmb3JtYXRpb25NYXRyaXgoKSk7CkBAIC0xNDc1LDcgKzE0NzUsNyBAQCB2b2lkIEdyYXBoaWNz
TGF5ZXJDQTo6dXBkYXRlTGF5ZXJEcmF3c0NvbnRlbnQoZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBj
b25zdCBGbG9hdAogICAgICAgICBpZiAobV9sYXllckNsb25lcykgewogICAgICAgICAgICAgTGF5
ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fbGF5ZXJDbG9uZXMtPmVuZCgpOwogICAgICAg
ICAgICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2xheWVyQ2xvbmVzLT5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0
Q29udGVudHMoMCk7CisgICAgICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRDb250ZW50cygwKTsK
ICAgICAgICAgfQogICAgIH0KICAgICB1cGRhdGVEZWJ1Z0luZGljYXRvcnMoKTsKQEAgLTE1MjYs
NyArMTUyNiw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVDb250ZW50c0ltYWdlKCkK
ICAgICAgICAgaWYgKG1fY29udGVudHNMYXllckNsb25lcykgewogICAgICAgICAgICAgTGF5ZXJN
YXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fY29udGVudHNMYXllckNsb25lcy0+ZW5kKCk7CiAg
ICAgICAgICAgICBmb3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fY29udGVudHNM
YXllckNsb25lcy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgICAgIGl0
LT5zZWNvbmQtPnNldENvbnRlbnRzKG1fY29udGVudHNMYXllci0+Y29udGVudHMoKSk7CisgICAg
ICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRDb250ZW50cyhtX2NvbnRlbnRzTGF5ZXItPmNvbnRl
bnRzKCkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICB1cGRhdGVDb250ZW50c1JlY3Qo
KTsKQEAgLTE1NzAsOCArMTU3MCw4IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVDb250
ZW50c1JlY3QoKQogICAgIGlmIChtX2NvbnRlbnRzTGF5ZXJDbG9uZXMpIHsKICAgICAgICAgTGF5
ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fY29udGVudHNMYXllckNsb25lcy0+ZW5kKCk7
CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9jb250ZW50c0xh
eWVyQ2xvbmVzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGl0LT5z
ZWNvbmQtPnNldFBvc2l0aW9uKHBvaW50KTsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNldEJv
dW5kcyhyZWN0KTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+c2V0UG9zaXRpb24ocG9pbnQpOwor
ICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRCb3VuZHMocmVjdCk7CiAgICAgICAgIH0KICAgICB9
CiB9CkBAIC0xNTg2LDggKzE1ODYsOCBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlTWFz
a0xheWVyKCkKICAgICBpZiAoTGF5ZXJNYXAqIGxheWVyQ2xvbmVNYXAgPSBtX2xheWVyQ2xvbmVz
LmdldCgpKSB7CiAgICAgICAgIExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBsYXllckNs
b25lTWFwLT5lbmQoKTsKICAgICAgICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBsYXllckNsb25lTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsgICAgICAgICAgICAK
LSAgICAgICAgICAgIFBsYXRmb3JtQ0FMYXllciogbWFza0Nsb25lID0gbWFza0xheWVyQ2xvbmVN
YXAgPyBtYXNrTGF5ZXJDbG9uZU1hcC0+Z2V0KGl0LT5maXJzdCkuZ2V0KCkgOiAwOwotICAgICAg
ICAgICAgaXQtPnNlY29uZC0+c2V0TWFzayhtYXNrQ2xvbmUpOworICAgICAgICAgICAgUGxhdGZv
cm1DQUxheWVyKiBtYXNrQ2xvbmUgPSBtYXNrTGF5ZXJDbG9uZU1hcCA/IG1hc2tMYXllckNsb25l
TWFwLT5nZXQoaXQtPmtleSkuZ2V0KCkgOiAwOworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRN
YXNrKG1hc2tDbG9uZSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0xNjUxLDEzICsxNjUxLDEz
IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVMYXllckFuaW1hdGlvbnMoKQogICAgIGlm
IChtX2FuaW1hdGlvbnNUb1Byb2Nlc3Muc2l6ZSgpKSB7CiAgICAgICAgIEFuaW1hdGlvbnNUb1By
b2Nlc3NNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fYW5pbWF0aW9uc1RvUHJvY2Vzcy5lbmQo
KTsKICAgICAgICAgZm9yIChBbmltYXRpb25zVG9Qcm9jZXNzTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IG1fYW5pbWF0aW9uc1RvUHJvY2Vzcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAg
ICAgICAgICAgIGNvbnN0IFN0cmluZyYgY3VyckFuaW1hdGlvbk5hbWUgPSBpdC0+Zmlyc3Q7Cisg
ICAgICAgICAgICBjb25zdCBTdHJpbmcmIGN1cnJBbmltYXRpb25OYW1lID0gaXQtPmtleTsKICAg
ICAgICAgICAgIEFuaW1hdGlvbnNNYXA6Oml0ZXJhdG9yIGFuaW1hdGlvbkl0ID0gbV9ydW5uaW5n
QW5pbWF0aW9ucy5maW5kKGN1cnJBbmltYXRpb25OYW1lKTsKICAgICAgICAgICAgIGlmIChhbmlt
YXRpb25JdCA9PSBtX3J1bm5pbmdBbmltYXRpb25zLmVuZCgpKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogCi0gICAgICAgICAgICBjb25zdCBBbmltYXRpb25Qcm9jZXNzaW5nQWN0aW9uJiBw
cm9jZXNzaW5nSW5mbyA9IGl0LT5zZWNvbmQ7Ci0gICAgICAgICAgICBjb25zdCBWZWN0b3I8TGF5
ZXJQcm9wZXJ0eUFuaW1hdGlvbj4mIGFuaW1hdGlvbnMgPSBhbmltYXRpb25JdC0+c2Vjb25kOwor
ICAgICAgICAgICAgY29uc3QgQW5pbWF0aW9uUHJvY2Vzc2luZ0FjdGlvbiYgcHJvY2Vzc2luZ0lu
Zm8gPSBpdC0+dmFsdWU7CisgICAgICAgICAgICBjb25zdCBWZWN0b3I8TGF5ZXJQcm9wZXJ0eUFu
aW1hdGlvbj4mIGFuaW1hdGlvbnMgPSBhbmltYXRpb25JdC0+dmFsdWU7CiAgICAgICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAg
ICAgICAgICBjb25zdCBMYXllclByb3BlcnR5QW5pbWF0aW9uJiBjdXJyQW5pbWF0aW9uID0gYW5p
bWF0aW9uc1tpXTsKICAgICAgICAgICAgICAgICBzd2l0Y2ggKHByb2Nlc3NpbmdJbmZvLmFjdGlv
bikgewpAQCAtMTY4OSw3ICsxNjg5LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUxh
eWVyQW5pbWF0aW9ucygpCiAgICAgICAgICAgICAgICAgYW5pbWF0aW9ucy5hcHBlbmQocGVuZGlu
Z0FuaW1hdGlvbik7CiAgICAgICAgICAgICAgICAgbV9ydW5uaW5nQW5pbWF0aW9ucy5hZGQocGVu
ZGluZ0FuaW1hdGlvbi5tX25hbWUsIGFuaW1hdGlvbnMpOwogICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICBWZWN0b3I8TGF5ZXJQcm9wZXJ0eUFuaW1hdGlvbj4mIGFuaW1hdGlv
bnMgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgICAgIFZlY3RvcjxMYXllclByb3BlcnR5QW5p
bWF0aW9uPiYgYW5pbWF0aW9ucyA9IGl0LT52YWx1ZTsKICAgICAgICAgICAgICAgICBhbmltYXRp
b25zLmFwcGVuZChwZW5kaW5nQW5pbWF0aW9uKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpA
QCAtMTcxNCwxMSArMTcxNCwxMSBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c2V0QW5pbWF0aW9u
T25MYXllcihQbGF0Zm9ybUNBQW5pbWF0aW9uKiBjYUFuaW0sIEFuaW1hdGVkUAogICAgICAgICBM
YXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAg
ICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICAvLyBTa2lwIGltbWVkaWF0ZSBy
ZXBsaWNhcywgc2luY2UgdGhleSBtb3ZlIHdpdGggdGhlIG9yaWdpbmFsLgotICAgICAgICAgICAg
aWYgKG1fcmVwbGljYUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9uZShpdC0+Zmlyc3QpKQor
ICAgICAgICAgICAgaWYgKG1fcmVwbGljYUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9uZShp
dC0+a2V5KSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgaXQtPnNl
Y29uZC0+cmVtb3ZlQW5pbWF0aW9uRm9yS2V5KGFuaW1hdGlvbklEKTsKLSAgICAgICAgICAgIGl0
LT5zZWNvbmQtPmFkZEFuaW1hdGlvbkZvcktleShhbmltYXRpb25JRCwgY2FBbmltKTsKKyAgICAg
ICAgICAgIGl0LT52YWx1ZS0+cmVtb3ZlQW5pbWF0aW9uRm9yS2V5KGFuaW1hdGlvbklEKTsKKyAg
ICAgICAgICAgIGl0LT52YWx1ZS0+YWRkQW5pbWF0aW9uRm9yS2V5KGFuaW1hdGlvbklELCBjYUFu
aW0pOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMTc1MywxMCArMTc1MywxMCBAQCBib29sIEdy
YXBoaWNzTGF5ZXJDQTo6cmVtb3ZlQ0FBbmltYXRpb25Gcm9tTGF5ZXIoQW5pbWF0ZWRQcm9wZXJ0
eUlEIHByb3BlcnR5LCBjbwogICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
bGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAg
ICAgICAgICAvLyBTa2lwIGltbWVkaWF0ZSByZXBsaWNhcywgc2luY2UgdGhleSBtb3ZlIHdpdGgg
dGhlIG9yaWdpbmFsLgotICAgICAgICAgICAgaWYgKG1fcmVwbGljYUxheWVyICYmIGlzUmVwbGlj
YXRlZFJvb3RDbG9uZShpdC0+Zmlyc3QpKQorICAgICAgICAgICAgaWYgKG1fcmVwbGljYUxheWVy
ICYmIGlzUmVwbGljYXRlZFJvb3RDbG9uZShpdC0+a2V5KSkKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKIAotICAgICAgICAgICAgaXQtPnNlY29uZCAtPnJlbW92ZUFuaW1hdGlvbkZvcktleShh
bmltYXRpb25JRCk7CisgICAgICAgICAgICBpdC0+dmFsdWUtPnJlbW92ZUFuaW1hdGlvbkZvcktl
eShhbmltYXRpb25JRCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIHRydWU7CkBAIC0x
Nzg1LDkgKzE3ODUsOSBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6cGF1c2VDQUFuaW1hdGlvbk9u
TGF5ZXIoQW5pbWF0ZWRQcm9wZXJ0eUlEIHByb3BlcnR5LCBjb25zdAogICAgICAgICBMYXllck1h
cDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAgICAgIGZv
ciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICAvLyBTa2lwIGltbWVkaWF0ZSByZXBsaWNh
cywgc2luY2UgdGhleSBtb3ZlIHdpdGggdGhlIG9yaWdpbmFsLgotICAgICAgICAgICAgaWYgKG1f
cmVwbGljYUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9uZShpdC0+Zmlyc3QpKQorICAgICAg
ICAgICAgaWYgKG1fcmVwbGljYUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9uZShpdC0+a2V5
KSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPmFk
ZEFuaW1hdGlvbkZvcktleShhbmltYXRpb25JRCwgbmV3QW5pbS5nZXQoKSk7CisgICAgICAgICAg
ICBpdC0+dmFsdWUtPmFkZEFuaW1hdGlvbkZvcktleShhbmltYXRpb25JRCwgbmV3QW5pbS5nZXQo
KSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0yMzExLDggKzIzMTEsOCBAQCB2b2lkIEdyYXBo
aWNzTGF5ZXJDQTo6c3VzcGVuZEFuaW1hdGlvbnMoZG91YmxlIHRpbWUpCiAgICAgaWYgKExheWVy
TWFwKiBsYXllckNsb25lTWFwID0gcHJpbWFyeUxheWVyQ2xvbmVzKCkpIHsKICAgICAgICAgTGF5
ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxheWVyQ2xvbmVNYXAtPmVuZCgpOwogICAgICAg
ICBmb3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGxheWVyQ2xvbmVNYXAtPmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0U3BlZWQo
MCk7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRUaW1lT2Zmc2V0KHQpOworICAgICAgICAg
ICAgaXQtPnZhbHVlLT5zZXRTcGVlZCgwKTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+c2V0VGlt
ZU9mZnNldCh0KTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTIzMjYsOCArMjMyNiw4IEBAIHZv
aWQgR3JhcGhpY3NMYXllckNBOjpyZXN1bWVBbmltYXRpb25zKCkKICAgICBpZiAoTGF5ZXJNYXAq
IGxheWVyQ2xvbmVNYXAgPSBwcmltYXJ5TGF5ZXJDbG9uZXMoKSkgewogICAgICAgICBMYXllck1h
cDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAgICAgIGZv
ciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRTcGVlZCgxKTsK
LSAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNldFRpbWVPZmZzZXQoMCk7CisgICAgICAgICAgICBp
dC0+dmFsdWUtPnNldFNwZWVkKDEpOworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRUaW1lT2Zm
c2V0KDApOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMjUzNywxMyArMjUzNywxMyBAQCBQYXNz
UmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gR3JhcGhpY3NMYXllckNBOjpmaW5kT3JNYWtlQ2xvbmUo
Q2xvbmVJRCBjbG9uZUlELCBQbAogICAgIExheWVyTWFwOjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0g
Y2xvbmVzLT5hZGQoY2xvbmVJRCwgZHVtbXkpOwogICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50
cnkpIHsKICAgICAgICAgLy8gVmFsdWUgd2FzIG5vdCBhZGRlZCwgc28gaXQgZXhpc3RzIGFscmVh
ZHkuCi0gICAgICAgIHJlc3VsdExheWVyID0gYWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQuZ2V0
KCk7CisgICAgICAgIHJlc3VsdExheWVyID0gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQo
KTsKICAgICB9IGVsc2UgewogICAgICAgICByZXN1bHRMYXllciA9IGNsb25lTGF5ZXIoc291cmNl
TGF5ZXIsIGNsb25lTGV2ZWwpOwogI2lmbmRlZiBOREVCVUcKICAgICAgICAgcmVzdWx0TGF5ZXIt
PnNldE5hbWUoU3RyaW5nOjpmb3JtYXQoIkNsb25lICVkIG9mIGxheWVyICVwIiwgY2xvbmVJRFsw
VV0sIHNvdXJjZUxheWVyLT5wbGF0Zm9ybUxheWVyKCkpKTsKICNlbmRpZgotICAgICAgICBhZGRS
ZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IHJlc3VsdExheWVyOworICAgICAgICBhZGRSZXN1bHQu
aXRlcmF0b3ItPnZhbHVlID0gcmVzdWx0TGF5ZXI7CiAgICAgfQogCiAgICAgcmV0dXJuIHJlc3Vs
dExheWVyOwpAQCAtMjczNSw5ICsyNzM1LDkgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnNldE9w
YWNpdHlJbnRlcm5hbChmbG9hdCBhY2N1bXVsYXRlZE9wYWNpdHkpCiAgICAgaWYgKGxheWVyQ2xv
bmVNYXApIHsKICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxheWVyQ2xv
bmVNYXAtPmVuZCgpOwogICAgICAgICBmb3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9
IGxheWVyQ2xvbmVNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAg
aWYgKG1fcmVwbGljYUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9uZShpdC0+Zmlyc3QpKQor
ICAgICAgICAgICAgaWYgKG1fcmVwbGljYUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9uZShp
dC0+a2V5KSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGl0LT5zZWNv
bmQtPnNldE9wYWNpdHkobV9vcGFjaXR5KTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+c2V0T3Bh
Y2l0eShtX29wYWNpdHkpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMjc0OSwxMCArMjc0OSwx
MCBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlT3BhY2l0eU9uTGF5ZXIoKQogICAgIGlm
IChMYXllck1hcCogbGF5ZXJDbG9uZU1hcCA9IHByaW1hcnlMYXllckNsb25lcygpKSB7CiAgICAg
ICAgIExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBsYXllckNsb25lTWFwLT5lbmQoKTsK
ICAgICAgICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXllckNsb25lTWFw
LT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGlmIChtX3JlcGxpY2FM
YXllciAmJiBpc1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQtPmZpcnN0KSkKKyAgICAgICAgICAgIGlm
IChtX3JlcGxpY2FMYXllciAmJiBpc1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQtPmtleSkpCiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNldE9wYWNp
dHkobV9vcGFjaXR5KTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+c2V0T3BhY2l0eShtX29wYWNp
dHkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9UaWxlQ2FjaGUubW0gYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvVGlsZUNhY2hlLm1tCmluZGV4IGE4ZWQ0YWFjYTBi
MDY4ZTRlNzYwMzY4NDYyYWMxYWQ1MjJmZGVmOTYuLjcwNzIyMDQyMGU3OGIwNTMwMmNjMDM2MmYx
MjI1MjU1NTQyOGE4ODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL21hYy9UaWxlQ2FjaGUubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2EvbWFjL1RpbGVDYWNoZS5tbQpAQCAtOTYsNyArOTYsNyBAQCB2b2lkIFRpbGVDYWNo
ZTo6dGlsZUNhY2hlTGF5ZXJCb3VuZHNDaGFuZ2VkKCkKIHZvaWQgVGlsZUNhY2hlOjpzZXROZWVk
c0Rpc3BsYXkoKQogewogICAgIGZvciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Rp
bGVzLmJlZ2luKCksIGVuZCA9IG1fdGlsZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAg
ICAgW2l0LT5zZWNvbmQuZ2V0KCkgc2V0TmVlZHNEaXNwbGF5XTsKKyAgICAgICAgW2l0LT52YWx1
ZS5nZXQoKSBzZXROZWVkc0Rpc3BsYXldOwogfQogCiB2b2lkIFRpbGVDYWNoZTo6c2V0TmVlZHNE
aXNwbGF5SW5SZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCkBAIC0xNzMsOSArMTczLDkgQEAgdm9p
ZCBUaWxlQ2FjaGU6OnNldFNjYWxlKENHRmxvYXQgc2NhbGUpCiAgICAgcmV2YWxpZGF0ZVRpbGVz
KCk7CiAKICAgICBmb3IgKFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdp
bigpLCBlbmQgPSBtX3RpbGVzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgW2l0
LT5zZWNvbmQuZ2V0KCkgc2V0Q29udGVudHNTY2FsZTpkZXZpY2VTY2FsZUZhY3Rvcl07CisgICAg
ICAgIFtpdC0+dmFsdWUuZ2V0KCkgc2V0Q29udGVudHNTY2FsZTpkZXZpY2VTY2FsZUZhY3Rvcl07
CiAKLSAgICAgICAgSW50UmVjdCB0aWxlUmVjdCA9IHJlY3RGb3JUaWxlSW5kZXgoaXQtPmZpcnN0
KTsKKyAgICAgICAgSW50UmVjdCB0aWxlUmVjdCA9IHJlY3RGb3JUaWxlSW5kZXgoaXQtPmtleSk7
CiAgICAgICAgIEZsb2F0UmVjdCBzY2FsZWRUaWxlUmVjdCA9IHRpbGVSZWN0OwogCiAgICAgICAg
IHNjYWxlZFRpbGVSZWN0LnNjYWxlKDEgLyBtX3NjYWxlKTsKQEAgLTE5NSw3ICsxOTUsNyBAQCB2
b2lkIFRpbGVDYWNoZTo6c2V0QWNjZWxlcmF0ZXNEcmF3aW5nKGJvb2wgYWNjZWxlcmF0ZXNEcmF3
aW5nKQogICAgIG1fYWNjZWxlcmF0ZXNEcmF3aW5nID0gYWNjZWxlcmF0ZXNEcmF3aW5nOwogCiAg
ICAgZm9yIChUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKSwgZW5k
ID0gbV90aWxlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBbaXQtPnNlY29uZC5n
ZXQoKSBzZXRBY2NlbGVyYXRlc0RyYXdpbmc6bV9hY2NlbGVyYXRlc0RyYXdpbmddOworICAgICAg
ICBbaXQtPnZhbHVlLmdldCgpIHNldEFjY2VsZXJhdGVzRHJhd2luZzptX2FjY2VsZXJhdGVzRHJh
d2luZ107CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShhY2NlbGVyYXRlc0RyYXdpbmcpOwogI2Vu
ZGlmCkBAIC0yNDUsNyArMjQ1LDcgQEAgdm9pZCBUaWxlQ2FjaGU6OnNldFRpbGVEZWJ1Z0JvcmRl
cldpZHRoKGZsb2F0IGJvcmRlcldpZHRoKQogCiAgICAgbV90aWxlRGVidWdCb3JkZXJXaWR0aCA9
IGJvcmRlcldpZHRoOwogICAgIGZvciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Rp
bGVzLmJlZ2luKCksIGVuZCA9IG1fdGlsZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAg
ICAgW2l0LT5zZWNvbmQuZ2V0KCkgc2V0Qm9yZGVyV2lkdGg6bV90aWxlRGVidWdCb3JkZXJXaWR0
aF07CisgICAgICAgIFtpdC0+dmFsdWUuZ2V0KCkgc2V0Qm9yZGVyV2lkdGg6bV90aWxlRGVidWdC
b3JkZXJXaWR0aF07CiB9CiAKIHZvaWQgVGlsZUNhY2hlOjpzZXRUaWxlRGVidWdCb3JkZXJDb2xv
cihDR0NvbG9yUmVmIGJvcmRlckNvbG9yKQpAQCAtMjU1LDcgKzI1NSw3IEBAIHZvaWQgVGlsZUNh
Y2hlOjpzZXRUaWxlRGVidWdCb3JkZXJDb2xvcihDR0NvbG9yUmVmIGJvcmRlckNvbG9yKQogCiAg
ICAgbV90aWxlRGVidWdCb3JkZXJDb2xvciA9IGJvcmRlckNvbG9yOwogICAgIGZvciAoVGlsZU1h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCksIGVuZCA9IG1fdGlsZXMuZW5k
KCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgW2l0LT5zZWNvbmQuZ2V0KCkgc2V0Qm9yZGVy
Q29sb3I6bV90aWxlRGVidWdCb3JkZXJDb2xvci5nZXQoKV07CisgICAgICAgIFtpdC0+dmFsdWUu
Z2V0KCkgc2V0Qm9yZGVyQ29sb3I6bV90aWxlRGVidWdCb3JkZXJDb2xvci5nZXQoKV07CiB9CiAK
IEludFJlY3QgVGlsZUNhY2hlOjpib3VuZHMoKSBjb25zdApAQCAtMzYxLDkgKzM2MSw5IEBAIHZv
aWQgVGlsZUNhY2hlOjpyZXZhbGlkYXRlVGlsZXMoKQogICAgIFZlY3RvcjxUaWxlSW5kZXg+IHRp
bGVzVG9SZW1vdmU7CiAKICAgICBmb3IgKFRpbGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5i
ZWdpbigpLCBlbmQgPSBtX3RpbGVzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAg
Y29uc3QgVGlsZUluZGV4JiB0aWxlSW5kZXggPSBpdC0+Zmlyc3Q7CisgICAgICAgIGNvbnN0IFRp
bGVJbmRleCYgdGlsZUluZGV4ID0gaXQtPmtleTsKIAotICAgICAgICBXZWJUaWxlTGF5ZXIqIHRp
bGVMYXllciA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIFdlYlRpbGVMYXllciogdGlsZUxh
eWVyID0gaXQtPnZhbHVlLmdldCgpOwogCiAgICAgICAgIGlmICghcmVjdEZvclRpbGVJbmRleCh0
aWxlSW5kZXgpLmludGVyc2VjdHModGlsZUNvdmVyYWdlUmVjdCkpIHsKICAgICAgICAgICAgIC8v
IFJlbW92ZSB0aGlzIGxheWVyLgpAQCAtMzkxLDcgKzM5MSw3IEBAIHZvaWQgVGlsZUNhY2hlOjpy
ZXZhbGlkYXRlVGlsZXMoKQogICAgICAgICAgICAgVGlsZUluZGV4IHRpbGVJbmRleCh4LCB5KTsK
IAogICAgICAgICAgICAgSW50UmVjdCB0aWxlUmVjdCA9IHJlY3RGb3JUaWxlSW5kZXgodGlsZUlu
ZGV4KTsKLSAgICAgICAgICAgIFJldGFpblB0cjxXZWJUaWxlTGF5ZXI+JiB0aWxlTGF5ZXIgPSBt
X3RpbGVzLmFkZCh0aWxlSW5kZXgsIDApLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgICAgICBS
ZXRhaW5QdHI8V2ViVGlsZUxheWVyPiYgdGlsZUxheWVyID0gbV90aWxlcy5hZGQodGlsZUluZGV4
LCAwKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgICAgICBpZiAoIXRpbGVMYXllcikgewogICAg
ICAgICAgICAgICAgIHRpbGVMYXllciA9IGNyZWF0ZVRpbGVMYXllcih0aWxlUmVjdCk7CiAgICAg
ICAgICAgICAgICAgW21fdGlsZUNvbnRhaW5lckxheWVyLmdldCgpIGFkZFN1YmxheWVyOnRpbGVM
YXllci5nZXQoKV07CkBAIC00MTEsNyArNDExLDcgQEAgdm9pZCBUaWxlQ2FjaGU6OnJldmFsaWRh
dGVUaWxlcygpCiAKICAgICBtX3RpbGVDb3ZlcmFnZVJlY3QgPSBJbnRSZWN0KCk7CiAgICAgZm9y
IChUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKSwgZW5kID0gbV90aWxlcy5l
bmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IFRpbGVJbmRleCYgdGlsZUlu
ZGV4ID0gaXQtPmZpcnN0OworICAgICAgICBjb25zdCBUaWxlSW5kZXgmIHRpbGVJbmRleCA9IGl0
LT5rZXk7CiAKICAgICAgICAgbV90aWxlQ292ZXJhZ2VSZWN0LnVuaXRlKHJlY3RGb3JUaWxlSW5k
ZXgodGlsZUluZGV4KSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luLmNwcAppbmRleCA0
OGIyMGQwYjhiZDI0MmFiNTQ5YjhmZTQ0MmRmNDRhYjM2NzJlYjg1Li43MDE2OGIyMTA0ZGIzNjlk
YTA3NTdhMTE0NDYyMjExMWJjMzA2MWYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luLmNwcApA
QCAtMTY3LDcgKzE2Nyw3IEBAIHZvaWQgUGxhdGZvcm1DQUxheWVyOjphbmltYXRpb25TdGFydGVk
KENGVGltZUludGVydmFsIGJlZ2luVGltZSkKIAogICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8
UGxhdGZvcm1DQUFuaW1hdGlvbj4gPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9hbmltYXRpb25z
LmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0
aW9uPiA+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fYW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPnNldEFjdHVhbFN0YXJ0VGltZUlmTmVlZGVk
KGNhY2ZCZWdpblRpbWUpOworICAgICAgICBpdC0+dmFsdWUtPnNldEFjdHVhbFN0YXJ0VGltZUlm
TmVlZGVkKGNhY2ZCZWdpblRpbWUpOwogCiAgICAgaWYgKG1fb3duZXIpCiAgICAgICAgIG1fb3du
ZXItPnBsYXRmb3JtQ0FMYXllckFuaW1hdGlvblN0YXJ0ZWQoYmVnaW5UaW1lKTsKQEAgLTE3Nyw4
ICsxNzcsOCBAQCBzdGF0aWMgdm9pZCByZXN1Ym1pdEFsbEFuaW1hdGlvbnMoUGxhdGZvcm1DQUxh
eWVyKiBsYXllcikKIHsKICAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPFBsYXRmb3JtQ0FBbmlt
YXRpb24+ID46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxheWVyLT5hbmltYXRpb25zKCkuZW5kKCk7
CiAgICAgZm9yIChIYXNoTWFwPFN0cmluZywgUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+ID46
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXItPmFuaW1hdGlvbnMoKS5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKLSAgICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBzKEFkb3B0Q0YsIGl0
LT5maXJzdC5jcmVhdGVDRlN0cmluZygpKTsKLSAgICAgICAgQ0FDRkxheWVyQWRkQW5pbWF0aW9u
KGxheWVyLT5wbGF0Zm9ybUxheWVyKCksIHMuZ2V0KCksIGl0LT5zZWNvbmQtPnBsYXRmb3JtQW5p
bWF0aW9uKCkpOworICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHMoQWRvcHRDRiwgaXQt
PmtleS5jcmVhdGVDRlN0cmluZygpKTsKKyAgICAgICAgQ0FDRkxheWVyQWRkQW5pbWF0aW9uKGxh
eWVyLT5wbGF0Zm9ybUxheWVyKCksIHMuZ2V0KCksIGl0LT52YWx1ZS0+cGxhdGZvcm1BbmltYXRp
b24oKSk7CiAgICAgfQogfQogCkBAIC0zMjgsNyArMzI4LDcgQEAgUGFzc1JlZlB0cjxQbGF0Zm9y
bUNBQW5pbWF0aW9uPiBQbGF0Zm9ybUNBTGF5ZXI6OmFuaW1hdGlvbkZvcktleShjb25zdCBTdHJp
bmcmIGsKICAgICBpZiAoaXQgPT0gbV9hbmltYXRpb25zLmVuZCgpKQogICAgICAgICByZXR1cm4g
MDsKIAotICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgIHJldHVybiBpdC0+dmFsdWU7CiB9CiAK
IFBsYXRmb3JtQ0FMYXllciogUGxhdGZvcm1DQUxheWVyOjptYXNrKCkgY29uc3QKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUNo
cm9taXVtV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ZvbnRDYWNoZUNocm9taXVtV2luLmNwcAppbmRleCA5Zjg5OThjZGFmZDgxMmUxODllNjVhMjg1
ZmI2YzQ3NTMwYTQ2ZTBjLi4wYzg2NTUwMGRlODhjM2Q4ZGM2MWZiNWM4MzFkOWVjMzRlNDEwZjcw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9G
b250Q2FjaGVDaHJvbWl1bVdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vRm9udENhY2hlQ2hyb21pdW1XaW4uY3BwCkBAIC0yMjMsMTAgKzIyMywx
MCBAQCBzdGF0aWMgYm9vbCBMb29rdXBBbHROYW1lKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5n
JiBhbHROYW1lKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBzdGF0aWMgaW50IHN5c3Rl
bUNwID0gOjpHZXRBQ1AoKTsKLSAgICBpbnQgZm9udENwID0gaXRlci0+c2Vjb25kLT5jb2RlUGFn
ZTsKKyAgICBpbnQgZm9udENwID0gaXRlci0+dmFsdWUtPmNvZGVQYWdlOwogCiAgICAgaWYgKChp
c0FzY2lpICYmIHN5c3RlbUNwID09IGZvbnRDcCkgfHwgKCFpc0FzY2lpICYmIHN5c3RlbUNwICE9
IGZvbnRDcCkpIHsKLSAgICAgICAgYWx0TmFtZSA9IFN0cmluZyhpdGVyLT5zZWNvbmQtPm5hbWUp
OworICAgICAgICBhbHROYW1lID0gU3RyaW5nKGl0ZXItPnZhbHVlLT5uYW1lKTsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0yNzcsNyArMjc3LDcgQEAgc3RhdGljIGJvb2wgZm9u
dENvbnRhaW5zQ2hhcmFjdGVyKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEqIGZvbnREYXRhLAogCiAg
ICAgSGFzaE1hcDxjb25zdCB3Y2hhcl90KiwgaWN1OjpVbmljb2RlU2V0Kj46Oml0ZXJhdG9yIGl0
ID0gZm9udENtYXBDYWNoZS0+ZmluZChmYW1pbHkpOwogICAgIGlmIChpdCAhPSBmb250Q21hcENh
Y2hlLT5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQtPmNvbnRhaW5zKGNoYXJhY3Rl
cik7CisgICAgICAgIHJldHVybiBpdC0+dmFsdWUtPmNvbnRhaW5zKGNoYXJhY3Rlcik7CiAKICAg
ICBIRk9OVCBoZm9udCA9IGZvbnREYXRhLT5oZm9udCgpOwogICAgIEhXbmREQyBoZGMoMCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250
VXRpbHNDaHJvbWl1bVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9Gb250VXRpbHNDaHJvbWl1bVdpbi5jcHAKaW5kZXggY2M1MmM1MmViNzA1NzgyZGUx
Zjk2OGRjODAzYzQ1ZTRmMmFlMjI5Mi4uMmZmYWJiYjc2ODJkZWE4YTBlMWZjOWZkYWVlOWM3MTgw
NWE0MmEwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vRm9udFV0aWxzQ2hyb21pdW1XaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRVdGlsc0Nocm9taXVtV2luLmNwcApAQCAtNDE1LDcg
KzQxNSw3IEBAIGJvb2wgZ2V0RGVyaXZlZEZvbnREYXRhKGNvbnN0IFVDaGFyKiBmYW1pbHksCiAg
ICAgICAgIC8vIGNoZWNrIGl0IGFnYWluc3Qgd2hhdCB3ZSBhY3R1YWxseSB3YW50IChhcyBpcyBk
b25lIGluCiAgICAgICAgIC8vIEZvbnRDYWNoZVdpbi5jcHApCiAgICAgICAgIEZvbnREYXRhQ2Fj
aGU6OkFkZFJlc3VsdCBlbnRyeSA9IGZvbnREYXRhQ2FjaGUuYWRkKGZvbnRLZXksIEZvbnREYXRh
KCkpOwotICAgICAgICBkZXJpdmVkID0gJmVudHJ5Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAg
IGRlcml2ZWQgPSAmZW50cnkuaXRlcmF0b3ItPnZhbHVlOwogICAgICAgICBkZXJpdmVkLT5oZm9u
dCA9IENyZWF0ZUZvbnRJbmRpcmVjdChsb2dmb250KTsKICAgICAgICAgLy8gR2V0QXNjZW50IG1h
eSByZXR1cm4ga1VuZGVmaW5lZEFzY2VudCwgYnV0IHdlIHN0aWxsIHdhbnQgdG8KICAgICAgICAg
Ly8gY2FjaGUgaXQgc28gdGhhdCB3ZSB3b24ndCBoYXZlIHRvIGNhbGwgQ3JlYXRlRm9udEluZGly
ZWN0IG9uY2UKQEAgLTQyMyw3ICs0MjMsNyBAQCBib29sIGdldERlcml2ZWRGb250RGF0YShjb25z
dCBVQ2hhciogZmFtaWx5LAogICAgICAgICBkZXJpdmVkLT5hc2NlbnQgPSBnZXRBc2NlbnQoZGVy
aXZlZC0+aGZvbnQpOwogICAgICAgICBkZXJpdmVkLT5zcGFjZUdseXBoID0gZ2V0U3BhY2VHbHlw
aChkZXJpdmVkLT5oZm9udCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZGVyaXZlZCA9ICZpdGVy
LT5zZWNvbmQ7CisgICAgICAgIGRlcml2ZWQgPSAmaXRlci0+dmFsdWU7CiAgICAgICAgIC8vIExh
c3QgdGltZSwgR2V0QXNjZW50IGZhaWxlZCBzbyB0aGF0IG9ubHkgSEZPTlQgd2FzCiAgICAgICAg
IC8vIGNhY2hlZC4gVHJ5IG9uY2UgbW9yZSBhc3N1bWluZyB0aGF0IFRyeVByZWxvYWRGb250CiAg
ICAgICAgIC8vIHdhcyBjYWxsZWQgYnkgYSBjYWxsZXIgYmV0d2VlbiBjYWxscy4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJD
aHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9U
aWxlZExheWVyQ2hyb21pdW0uY3BwCmluZGV4IDVkYzY1ZWM1YTIwODFhYWQ0NDc3ZDMyODI5Mzk0
YTM2MmQwMzc0ZWIuLjJjM2QwY2Q0ZWRjMmNhODEzODcyYjNiYjk5MjMzYWY4MTM2YTA1YWIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVk
TGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcApAQCAtMjI1LDkgKzIyNSw5IEBAIHZvaWQg
VGlsZWRMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKENDTGF5ZXJJbXBsKiBsYXllcikK
ICAgICBWZWN0b3I8VXBkYXRhYmxlVGlsZSo+IGludmFsaWRUaWxlczsKIAogICAgIGZvciAoQ0NM
YXllclRpbGluZ0RhdGE6OlRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX3RpbGVyLT50
aWxlcygpLmJlZ2luKCk7IGl0ZXIgIT0gbV90aWxlci0+dGlsZXMoKS5lbmQoKTsgKytpdGVyKSB7
Ci0gICAgICAgIGludCBpID0gaXRlci0+Zmlyc3QuZmlyc3Q7Ci0gICAgICAgIGludCBqID0gaXRl
ci0+Zmlyc3Quc2Vjb25kOwotICAgICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gc3RhdGljX2Nh
c3Q8VXBkYXRhYmxlVGlsZSo+KGl0ZXItPnNlY29uZC5nZXQoKSk7CisgICAgICAgIGludCBpID0g
aXRlci0+a2V5LmZpcnN0OworICAgICAgICBpbnQgaiA9IGl0ZXItPmtleS5zZWNvbmQ7CisgICAg
ICAgIFVwZGF0YWJsZVRpbGUqIHRpbGUgPSBzdGF0aWNfY2FzdDxVcGRhdGFibGVUaWxlKj4oaXRl
ci0+dmFsdWUuZ2V0KCkpOwogICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgbm90IGV2ZXIg
YmUgbnVsbC4KICAgICAgICAgaWYgKCF0aWxlKQogICAgICAgICAgICAgY29udGludWU7CkBAIC0y
NTcsNyArMjU3LDcgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnNldExheWVyVHJlZUhvc3Qo
Q0NMYXllclRyZWVIb3N0KiBob3N0KQogewogICAgIGlmIChob3N0ICYmIGhvc3QgIT0gbGF5ZXJU
cmVlSG9zdCgpKSB7CiAgICAgICAgIGZvciAoQ0NMYXllclRpbGluZ0RhdGE6OlRpbGVNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX3RpbGVyLT50aWxlcygpLmJlZ2luKCk7IGl0ZXIgIT0gbV90
aWxlci0+dGlsZXMoKS5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgICAgICBVcGRhdGFibGVUaWxl
KiB0aWxlID0gc3RhdGljX2Nhc3Q8VXBkYXRhYmxlVGlsZSo+KGl0ZXItPnNlY29uZC5nZXQoKSk7
CisgICAgICAgICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gc3RhdGljX2Nhc3Q8VXBkYXRhYmxl
VGlsZSo+KGl0ZXItPnZhbHVlLmdldCgpKTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNo
b3VsZCBub3QgZXZlciBiZSBudWxsLgogICAgICAgICAgICAgaWYgKCF0aWxlKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwpAQCAtMzI1LDcgKzMyNSw3IEBAIHZvaWQgVGlsZWRMYXllckNocm9t
aXVtOjppbnZhbGlkYXRlQ29udGVudFJlY3QoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGZvciAoQ0NMYXllclRpbGluZ0RhdGE6OlRpbGVNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX3RpbGVyLT50aWxlcygpLmJlZ2luKCk7IGl0ZXIgIT0gbV90
aWxlci0+dGlsZXMoKS5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIFVwZGF0YWJsZVRpbGUqIHRp
bGUgPSBzdGF0aWNfY2FzdDxVcGRhdGFibGVUaWxlKj4oaXRlci0+c2Vjb25kLmdldCgpKTsKKyAg
ICAgICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHN0YXRpY19jYXN0PFVwZGF0YWJsZVRpbGUqPihp
dGVyLT52YWx1ZS5nZXQoKSk7CiAgICAgICAgIEFTU0VSVCh0aWxlKTsKICAgICAgICAgLy8gRklY
TUU6IFRoaXMgc2hvdWxkIG5vdCBldmVyIGJlIG51bGwuCiAgICAgICAgIGlmICghdGlsZSkKQEAg
LTY1NSw3ICs2NTUsNyBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6c2V0VGV4dHVyZVByaW9y
aXRpZXMoY29uc3QgQ0NQcmlvcml0eUNhbGN1bGF0b3ImIHByaW9yaQogCiAgICAgLy8gTm93IHVw
ZGF0ZSBwcmlvcml0aWVzIG9uIGFsbCB0aWxlcyB3ZSBoYXZlIGluIHRoZSBsYXllciwgbm8gbWF0
dGVyIHdoZXJlIHRoZXkgYXJlLgogICAgIGZvciAoQ0NMYXllclRpbGluZ0RhdGE6OlRpbGVNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX3RpbGVyLT50aWxlcygpLmJlZ2luKCk7IGl0ZXIgIT0g
bV90aWxlci0+dGlsZXMoKS5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIFVwZGF0YWJsZVRpbGUq
IHRpbGUgPSBzdGF0aWNfY2FzdDxVcGRhdGFibGVUaWxlKj4oaXRlci0+c2Vjb25kLmdldCgpKTsK
KyAgICAgICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHN0YXRpY19jYXN0PFVwZGF0YWJsZVRpbGUq
PihpdGVyLT52YWx1ZS5nZXQoKSk7CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBub3Qg
ZXZlciBiZSBudWxsLgogICAgICAgICBpZiAoIXRpbGUpCiAgICAgICAgICAgICBjb250aW51ZTsK
QEAgLTY4MCw3ICs2ODAsNyBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6cmVzZXRVcGRhdGVT
dGF0ZSgpCiAKICAgICBDQ0xheWVyVGlsaW5nRGF0YTo6VGlsZU1hcDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gbV90aWxlci0+dGlsZXMoKS5lbmQoKTsKICAgICBmb3IgKENDTGF5ZXJUaWxpbmdEYXRh
OjpUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbV90aWxlci0+dGlsZXMoKS5iZWdpbigp
OyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0gICAgICAgIFVwZGF0YWJsZVRpbGUqIHRpbGUgPSBz
dGF0aWNfY2FzdDxVcGRhdGFibGVUaWxlKj4oaXRlci0+c2Vjb25kLmdldCgpKTsKKyAgICAgICAg
VXBkYXRhYmxlVGlsZSogdGlsZSA9IHN0YXRpY19jYXN0PFVwZGF0YWJsZVRpbGUqPihpdGVyLT52
YWx1ZS5nZXQoKSk7CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBub3QgZXZlciBiZSBu
dWxsLgogICAgICAgICBpZiAoIXRpbGUpCiAgICAgICAgICAgICBjb250aW51ZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGFtYWdl
VHJhY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0RhbWFnZVRyYWNrZXIuY3BwCmluZGV4IDExNDQ5OWJhMTdlZDRmZjE1ZGUwOGUwY2Q0MGZh
MzM2NzFhNjE0ODYuLjc1YTE1NjQ4MWUzZTIxNzc5ZmY5N2U3ZjY0ZTdkMDk5MjI0OWQ1M2IgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
RGFtYWdlVHJhY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NEYW1hZ2VUcmFja2VyLmNwcApAQCAtMjMzLDcgKzIzMyw3IEBAIEZsb2F0
UmVjdCBDQ0RhbWFnZVRyYWNrZXI6OnRyYWNrRGFtYWdlRnJvbUxlZnRvdmVyUmVjdHMoKQogICAg
IEZsb2F0UmVjdCBkYW1hZ2VSZWN0ID0gRmxvYXRSZWN0KCk7CiAKICAgICBmb3IgKFJlY3RNYXA6
Oml0ZXJhdG9yIGl0ID0gbV9jdXJyZW50UmVjdEhpc3RvcnktPmJlZ2luKCk7IGl0ICE9IG1fY3Vy
cmVudFJlY3RIaXN0b3J5LT5lbmQoKTsgKytpdCkKLSAgICAgICAgZGFtYWdlUmVjdC51bml0ZShp
dC0+c2Vjb25kKTsKKyAgICAgICAgZGFtYWdlUmVjdC51bml0ZShpdC0+dmFsdWUpOwogCiAgICAg
bV9jdXJyZW50UmVjdEhpc3RvcnktPmNsZWFyKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGlyZWN0UmVuZGVyZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEaXJlY3RSZW5k
ZXJlci5jcHAKaW5kZXggNDY4OGJlZDE5YmZjNGU4MzViYWRmMzc5MjZkOTAzZDI2YTBlZDM0Zi4u
ZmI4YWMxZDIxMzYyNzNhMGI2ODg2MTg5ZGIyNjZiMGZlMmE0NjA2ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEaXJlY3RSZW5kZXJl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NEaXJlY3RSZW5kZXJlci5jcHAKQEAgLTExOSwxNSArMTE5LDE1IEBAIHZvaWQgQ0NEaXJlY3RS
ZW5kZXJlcjo6ZGVjaWRlUmVuZGVyUGFzc0FsbG9jYXRpb25zRm9yRnJhbWUoY29uc3QgQ0NSZW5k
ZXJQYXNzTGlzCiAgICAgVmVjdG9yPGludD4gcGFzc2VzVG9EZWxldGU7CiAgICAgSGFzaE1hcDxp
bnQsIE93blB0cjxDYWNoZWRUZXh0dXJlPiA+Ojpjb25zdF9pdGVyYXRvciBwYXNzSXRlcmF0b3I7
CiAgICAgZm9yIChwYXNzSXRlcmF0b3IgPSBtX3JlbmRlclBhc3NUZXh0dXJlcy5iZWdpbigpOyBw
YXNzSXRlcmF0b3IgIT0gbV9yZW5kZXJQYXNzVGV4dHVyZXMuZW5kKCk7ICsrcGFzc0l0ZXJhdG9y
KSB7Ci0gICAgICAgIGNvbnN0IENDUmVuZGVyUGFzcyogcmVuZGVyUGFzc0luRnJhbWUgPSByZW5k
ZXJQYXNzZXNJbkZyYW1lLmdldChwYXNzSXRlcmF0b3ItPmZpcnN0KTsKKyAgICAgICAgY29uc3Qg
Q0NSZW5kZXJQYXNzKiByZW5kZXJQYXNzSW5GcmFtZSA9IHJlbmRlclBhc3Nlc0luRnJhbWUuZ2V0
KHBhc3NJdGVyYXRvci0+a2V5KTsKICAgICAgICAgaWYgKCFyZW5kZXJQYXNzSW5GcmFtZSkgewot
ICAgICAgICAgICAgcGFzc2VzVG9EZWxldGUuYXBwZW5kKHBhc3NJdGVyYXRvci0+Zmlyc3QpOwor
ICAgICAgICAgICAgcGFzc2VzVG9EZWxldGUuYXBwZW5kKHBhc3NJdGVyYXRvci0+a2V5KTsKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKICAgICAgICAgY29uc3QgSW50U2l6ZSYg
cmVxdWlyZWRTaXplID0gcmVuZGVyUGFzc1RleHR1cmVTaXplKHJlbmRlclBhc3NJbkZyYW1lKTsK
ICAgICAgICAgR0MzRGVudW0gcmVxdWlyZWRGb3JtYXQgPSByZW5kZXJQYXNzVGV4dHVyZUZvcm1h
dChyZW5kZXJQYXNzSW5GcmFtZSk7Ci0gICAgICAgIENhY2hlZFRleHR1cmUqIHRleHR1cmUgPSBw
YXNzSXRlcmF0b3ItPnNlY29uZC5nZXQoKTsKKyAgICAgICAgQ2FjaGVkVGV4dHVyZSogdGV4dHVy
ZSA9IHBhc3NJdGVyYXRvci0+dmFsdWUuZ2V0KCk7CiAgICAgICAgIEFTU0VSVCh0ZXh0dXJlKTsK
IAogICAgICAgICBpZiAodGV4dHVyZS0+aWQoKSAmJiAodGV4dHVyZS0+c2l6ZSgpICE9IHJlcXVp
cmVkU2l6ZSB8fCB0ZXh0dXJlLT5mb3JtYXQoKSAhPSByZXF1aXJlZEZvcm1hdCkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VGlsaW5nRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVGlsaW5nRGF0YS5jcHAKaW5kZXggOWI1NTE1NmQ5NWJhMzQzM2ZmNmMxNmM2
ZWI1NTA5YWI3MTAyOWQxOS4uYTgxZTA2YzA1MDkyYjEzZjlhNmJmMDA0NjkyNWRmM2Q1NGEyN2Yz
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRpbGluZ0RhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUaWxpbmdEYXRhLmNwcApAQCAtMTUzLDggKzE1Myw4
IEBAIHZvaWQgQ0NMYXllclRpbGluZ0RhdGE6OnNldEJvdW5kcyhjb25zdCBJbnRTaXplJiBzaXpl
KQogICAgIGNvbnRlbnRSZWN0VG9UaWxlSW5kaWNlcyhJbnRSZWN0KEludFBvaW50KCksIHNpemUp
LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOwogICAgIFZlY3RvcjxUaWxlTWFwS2V5PiBpbnZh
bGlkVGlsZUtleXM7CiAgICAgZm9yIChUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGls
ZXMuYmVnaW4oKTsgaXQgIT0gbV90aWxlcy5lbmQoKTsgKytpdCkgewotICAgICAgICBpZiAoaXQt
PmZpcnN0LmZpcnN0ID4gcmlnaHQgfHwgaXQtPmZpcnN0LnNlY29uZCA+IGJvdHRvbSkKLSAgICAg
ICAgICAgIGludmFsaWRUaWxlS2V5cy5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgaWYgKGl0
LT5rZXkuZmlyc3QgPiByaWdodCB8fCBpdC0+a2V5LnNlY29uZCA+IGJvdHRvbSkKKyAgICAgICAg
ICAgIGludmFsaWRUaWxlS2V5cy5hcHBlbmQoaXQtPmtleSk7CiAgICAgfQogICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgaW52YWxpZFRpbGVLZXlzLnNpemUoKTsgKytpKQogICAgICAgICBtX3Rp
bGVzLnJlbW92ZShpbnZhbGlkVGlsZUtleXNbaV0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dC5jcHAKaW5kZXggMjRhMzM0YzNmYzcxMjQ3YWYxYzIzYjMyY2ZjMjJlOThhZjIyN2I0Yy4uNDhk
YmI2Y2U5NGUwMTYzMTkxZGNmMjJkZGJmM2NkNjlkOWVmMzVhMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3QuY3BwCkBAIC0xMjMsNyArMTIzLDcgQEAgQ0NMYXllclRyZWVIb3N0Ojp+Q0NM
YXllclRyZWVIb3N0KCkKICAgICBudW1MYXllclRyZWVJbnN0YW5jZXMtLTsKICAgICBSYXRlTGlt
aXRlck1hcDo6aXRlcmF0b3IgaXQgPSBtX3JhdGVMaW1pdGVycy5iZWdpbigpOwogICAgIGlmIChp
dCAhPSBtX3JhdGVMaW1pdGVycy5lbmQoKSkKLSAgICAgICAgaXQtPnNlY29uZC0+c3RvcCgpOwor
ICAgICAgICBpdC0+dmFsdWUtPnN0b3AoKTsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnNl
dFN1cmZhY2VSZWFkeSgpCkBAIC02NjksNyArNjY5LDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6
OnN0YXJ0UmF0ZUxpbWl0ZXIoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkK
ICAgICBBU1NFUlQoY29udGV4dCk7CiAgICAgUmF0ZUxpbWl0ZXJNYXA6Oml0ZXJhdG9yIGl0ID0g
bV9yYXRlTGltaXRlcnMuZmluZChjb250ZXh0KTsKICAgICBpZiAoaXQgIT0gbV9yYXRlTGltaXRl
cnMuZW5kKCkpCi0gICAgICAgIGl0LT5zZWNvbmQtPnN0YXJ0KCk7CisgICAgICAgIGl0LT52YWx1
ZS0+c3RhcnQoKTsKICAgICBlbHNlIHsKICAgICAgICAgUmVmUHRyPFJhdGVMaW1pdGVyPiByYXRl
TGltaXRlciA9IFJhdGVMaW1pdGVyOjpjcmVhdGUoY29udGV4dCwgdGhpcyk7CiAgICAgICAgIG1f
cmF0ZUxpbWl0ZXJzLnNldChjb250ZXh0LCByYXRlTGltaXRlcik7CkBAIC02ODEsNyArNjgxLDcg
QEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnN0b3BSYXRlTGltaXRlcihXZWJLaXQ6OldlYkdyYXBo
aWNzQ29udGV4dDNEKiBjb250ZXh0KQogewogICAgIFJhdGVMaW1pdGVyTWFwOjppdGVyYXRvciBp
dCA9IG1fcmF0ZUxpbWl0ZXJzLmZpbmQoY29udGV4dCk7CiAgICAgaWYgKGl0ICE9IG1fcmF0ZUxp
bWl0ZXJzLmVuZCgpKSB7Ci0gICAgICAgIGl0LT5zZWNvbmQtPnN0b3AoKTsKKyAgICAgICAgaXQt
PnZhbHVlLT5zdG9wKCk7CiAgICAgICAgIG1fcmF0ZUxpbWl0ZXJzLnJlbW92ZShpdCk7CiAgICAg
fQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAppbmRleCBlZDA3OWY3
ODI5YWMxMDRmNjc4YjY3OTU1MjdjNDIxYTc0ZWIxNTI5Li5iYTQ3MDUzN2M4MzQ0MGM5YmM0ZTdl
MjcyMjJmNDA1Mzg2MTFiYWVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBs
LmNwcApAQCAtNDA4LDcgKzQwOCw3IEBAIHN0YXRpYyBpbmxpbmUgQ0NSZW5kZXJQYXNzKiBmaW5k
UmVuZGVyUGFzc0J5SWQoaW50IHJlbmRlclBhc3NJZCwgY29uc3QgQ0NMYXllclRyCiB7CiAgICAg
Q0NSZW5kZXJQYXNzSWRIYXNoTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGZyYW1lLnJlbmRlclBh
c3Nlc0J5SWQuZmluZChyZW5kZXJQYXNzSWQpOwogICAgIEFTU0VSVChpdCAhPSBmcmFtZS5yZW5k
ZXJQYXNzZXNCeUlkLmVuZCgpKTsKLSAgICByZXR1cm4gaXQtPnNlY29uZC5nZXQoKTsKKyAgICBy
ZXR1cm4gaXQtPnZhbHVlLmdldCgpOwogfQogCiBzdGF0aWMgdm9pZCByZW1vdmVSZW5kZXJQYXNz
ZXNSZWN1cnNpdmUoaW50IHJlbW92ZVJlbmRlclBhc3NJZCwgQ0NMYXllclRyZWVIb3N0SW1wbDo6
RnJhbWVEYXRhJiBmcmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDUmVzb3VyY2VQcm92aWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Jlc291cmNlUHJvdmlkZXIuY3BwCmlu
ZGV4IDNhYWQxNDdjYTY0NDczN2Q0ZTJmY2ZkOTNhZWM3ODEyZTJlMjAxZjguLjZhYTE4MzMxYWM1
NjNlNzJiYjFiNzkxMDdjOTY0NDdlYTdhNDNiZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVzb3VyY2VQcm92aWRlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZXNvdXJj
ZVByb3ZpZGVyLmNwcApAQCAtODQsNyArODQsNyBAQCBib29sIENDUmVzb3VyY2VQcm92aWRlcjo6
aW5Vc2VCeUNvbnN1bWVyKFJlc291cmNlSWQgaWQpCiAgICAgQVNTRVJUKENDUHJveHk6OmlzSW1w
bFRocmVhZCgpKTsKICAgICBSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5m
aW5kKGlkKTsKICAgICBBU1NFUlQoaXQgIT0gbV9yZXNvdXJjZXMuZW5kKCkpOwotICAgIHJldHVy
biAhIWl0LT5zZWNvbmQubG9ja0ZvclJlYWRDb3VudCB8fCBpdC0+c2Vjb25kLmV4cG9ydGVkOwor
ICAgIHJldHVybiAhIWl0LT52YWx1ZS5sb2NrRm9yUmVhZENvdW50IHx8IGl0LT52YWx1ZS5leHBv
cnRlZDsKIH0KIAogQ0NSZXNvdXJjZVByb3ZpZGVyOjpSZXNvdXJjZUlkIENDUmVzb3VyY2VQcm92
aWRlcjo6Y3JlYXRlUmVzb3VyY2UoaW50IHBvb2wsIGNvbnN0IEludFNpemUmIHNpemUsIEdDM0Rl
bnVtIGZvcm1hdCwgVGV4dHVyZVVzYWdlSGludCBoaW50KQpAQCAtMTU0LDE1ICsxNTQsMTUgQEAg
dm9pZCBDQ1Jlc291cmNlUHJvdmlkZXI6OmRlbGV0ZVJlc291cmNlKFJlc291cmNlSWQgaWQpCiB7
CiAgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKICAgICBSZXNvdXJjZU1hcDo6
aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5maW5kKGlkKTsKLSAgICBBU1NFUlQoaXQgIT0gbV9y
ZXNvdXJjZXMuZW5kKCkgJiYgIWl0LT5zZWNvbmQubG9ja2VkRm9yV3JpdGUgJiYgIWl0LT5zZWNv
bmQubG9ja0ZvclJlYWRDb3VudCk7CisgICAgQVNTRVJUKGl0ICE9IG1fcmVzb3VyY2VzLmVuZCgp
ICYmICFpdC0+dmFsdWUubG9ja2VkRm9yV3JpdGUgJiYgIWl0LT52YWx1ZS5sb2NrRm9yUmVhZENv
dW50KTsKIAotICAgIGlmIChpdC0+c2Vjb25kLmdsSWQgJiYgIWl0LT5zZWNvbmQuZXh0ZXJuYWwp
IHsKKyAgICBpZiAoaXQtPnZhbHVlLmdsSWQgJiYgIWl0LT52YWx1ZS5leHRlcm5hbCkgewogICAg
ICAgICBXZWJHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNkID0gbV9jb250ZXh0LT5jb250ZXh0
M0QoKTsKICAgICAgICAgQVNTRVJUKGNvbnRleHQzZCk7Ci0gICAgICAgIEdMQyhjb250ZXh0M2Qs
IGNvbnRleHQzZC0+ZGVsZXRlVGV4dHVyZShpdC0+c2Vjb25kLmdsSWQpKTsKKyAgICAgICAgR0xD
KGNvbnRleHQzZCwgY29udGV4dDNkLT5kZWxldGVUZXh0dXJlKGl0LT52YWx1ZS5nbElkKSk7CiAg
ICAgfQotICAgIGlmIChpdC0+c2Vjb25kLnBpeGVscykKLSAgICAgICAgZGVsZXRlIGl0LT5zZWNv
bmQucGl4ZWxzOworICAgIGlmIChpdC0+dmFsdWUucGl4ZWxzKQorICAgICAgICBkZWxldGUgaXQt
PnZhbHVlLnBpeGVsczsKIAogICAgIG1fcmVzb3VyY2VzLnJlbW92ZShpdCk7CiB9CkBAIC0xNzIs
OCArMTcyLDggQEAgdm9pZCBDQ1Jlc291cmNlUHJvdmlkZXI6OmRlbGV0ZU93bmVkUmVzb3VyY2Vz
KGludCBwb29sKQogICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CiAgICAgUmVz
b3VyY2VJZEFycmF5IHRvRGVsZXRlOwogICAgIGZvciAoUmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGl0
ID0gbV9yZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gbV9yZXNvdXJjZXMuZW5kKCk7ICsraXQpIHsK
LSAgICAgICAgaWYgKGl0LT5zZWNvbmQucG9vbCA9PSBwb29sICYmICFpdC0+c2Vjb25kLmV4dGVy
bmFsKQotICAgICAgICAgICAgdG9EZWxldGUuYXBwZW5kKGl0LT5maXJzdCk7CisgICAgICAgIGlm
IChpdC0+dmFsdWUucG9vbCA9PSBwb29sICYmICFpdC0+dmFsdWUuZXh0ZXJuYWwpCisgICAgICAg
ICAgICB0b0RlbGV0ZS5hcHBlbmQoaXQtPmtleSk7CiAgICAgfQogICAgIGZvciAoUmVzb3VyY2VJ
ZEFycmF5OjppdGVyYXRvciBpdCA9IHRvRGVsZXRlLmJlZ2luKCk7IGl0ICE9IHRvRGVsZXRlLmVu
ZCgpOyArK2l0KQogICAgICAgICBkZWxldGVSZXNvdXJjZSgqaXQpOwpAQCAtMTgzLDI0ICsxODMs
MjQgQEAgQ0NSZXNvdXJjZVByb3ZpZGVyOjpSZXNvdXJjZVR5cGUgQ0NSZXNvdXJjZVByb3ZpZGVy
OjpyZXNvdXJjZVR5cGUoUmVzb3VyY2VJZCBpZCkKIHsKICAgICBSZXNvdXJjZU1hcDo6aXRlcmF0
b3IgaXQgPSBtX3Jlc291cmNlcy5maW5kKGlkKTsKICAgICBBU1NFUlQoaXQgIT0gbV9yZXNvdXJj
ZXMuZW5kKCkpOwotICAgIHJldHVybiBpdC0+c2Vjb25kLnR5cGU7CisgICAgcmV0dXJuIGl0LT52
YWx1ZS50eXBlOwogfQogCiB2b2lkIENDUmVzb3VyY2VQcm92aWRlcjo6dXBsb2FkKFJlc291cmNl
SWQgaWQsIGNvbnN0IHVpbnQ4X3QqIGltYWdlLCBjb25zdCBJbnRSZWN0JiBpbWFnZVJlY3QsIGNv
bnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFNpemUmIGRlc3RPZmZzZXQpCiB7CiAg
ICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKICAgICBSZXNvdXJjZU1hcDo6aXRl
cmF0b3IgaXQgPSBtX3Jlc291cmNlcy5maW5kKGlkKTsKLSAgICBBU1NFUlQoaXQgIT0gbV9yZXNv
dXJjZXMuZW5kKCkgJiYgIWl0LT5zZWNvbmQubG9ja2VkRm9yV3JpdGUgJiYgIWl0LT5zZWNvbmQu
bG9ja0ZvclJlYWRDb3VudCAmJiAhaXQtPnNlY29uZC5leHRlcm5hbCk7CisgICAgQVNTRVJUKGl0
ICE9IG1fcmVzb3VyY2VzLmVuZCgpICYmICFpdC0+dmFsdWUubG9ja2VkRm9yV3JpdGUgJiYgIWl0
LT52YWx1ZS5sb2NrRm9yUmVhZENvdW50ICYmICFpdC0+dmFsdWUuZXh0ZXJuYWwpOwogCi0gICAg
aWYgKGl0LT5zZWNvbmQuZ2xJZCkgeworICAgIGlmIChpdC0+dmFsdWUuZ2xJZCkgewogICAgICAg
ICBXZWJHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNkID0gbV9jb250ZXh0LT5jb250ZXh0M0Qo
KTsKICAgICAgICAgQVNTRVJUKGNvbnRleHQzZCk7CiAgICAgICAgIEFTU0VSVChtX3RleFN1Yklt
YWdlLmdldCgpKTsKLSAgICAgICAgY29udGV4dDNkLT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgaXQtPnNlY29uZC5nbElkKTsKLSAgICAgICAgbV90ZXhTdWJJbWFn
ZS0+dXBsb2FkKGltYWdlLCBpbWFnZVJlY3QsIHNvdXJjZVJlY3QsIGRlc3RPZmZzZXQsIGl0LT5z
ZWNvbmQuZm9ybWF0LCBjb250ZXh0M2QpOworICAgICAgICBjb250ZXh0M2QtPmJpbmRUZXh0dXJl
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBpdC0+dmFsdWUuZ2xJZCk7CisgICAgICAg
IG1fdGV4U3ViSW1hZ2UtPnVwbG9hZChpbWFnZSwgaW1hZ2VSZWN0LCBzb3VyY2VSZWN0LCBkZXN0
T2Zmc2V0LCBpdC0+dmFsdWUuZm9ybWF0LCBjb250ZXh0M2QpOwogICAgIH0KIAotICAgIGlmIChp
dC0+c2Vjb25kLnBpeGVscykgeworICAgIGlmIChpdC0+dmFsdWUucGl4ZWxzKSB7CiAgICAgICAg
IFNrQml0bWFwIHNyY0Z1bGw7CiAgICAgICAgIHNyY0Z1bGwuc2V0Q29uZmlnKFNrQml0bWFwOjpr
QVJHQl84ODg4X0NvbmZpZywgaW1hZ2VSZWN0LndpZHRoKCksIGltYWdlUmVjdC5oZWlnaHQoKSk7
CiAgICAgICAgIHNyY0Z1bGwuc2V0UGl4ZWxzKGNvbnN0X2Nhc3Q8dWludDhfdCo+KGltYWdlKSk7
CkBAIC0yMzgsMTcgKzIzOCwxNyBAQCBjb25zdCBDQ1Jlc291cmNlUHJvdmlkZXI6OlJlc291cmNl
KiBDQ1Jlc291cmNlUHJvdmlkZXI6OmxvY2tGb3JSZWFkKFJlc291cmNlSWQgaQogewogICAgIEFT
U0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CiAgICAgUmVzb3VyY2VNYXA6Oml0ZXJhdG9y
IGl0ID0gbV9yZXNvdXJjZXMuZmluZChpZCk7Ci0gICAgQVNTRVJUKGl0ICE9IG1fcmVzb3VyY2Vz
LmVuZCgpICYmICFpdC0+c2Vjb25kLmxvY2tlZEZvcldyaXRlKTsKLSAgICBpdC0+c2Vjb25kLmxv
Y2tGb3JSZWFkQ291bnQrKzsKLSAgICByZXR1cm4gJml0LT5zZWNvbmQ7CisgICAgQVNTRVJUKGl0
ICE9IG1fcmVzb3VyY2VzLmVuZCgpICYmICFpdC0+dmFsdWUubG9ja2VkRm9yV3JpdGUpOworICAg
IGl0LT52YWx1ZS5sb2NrRm9yUmVhZENvdW50Kys7CisgICAgcmV0dXJuICZpdC0+dmFsdWU7CiB9
CiAKIHZvaWQgQ0NSZXNvdXJjZVByb3ZpZGVyOjp1bmxvY2tGb3JSZWFkKFJlc291cmNlSWQgaWQp
CiB7CiAgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKICAgICBSZXNvdXJjZU1h
cDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5maW5kKGlkKTsKLSAgICBBU1NFUlQoaXQgIT0g
bV9yZXNvdXJjZXMuZW5kKCkgJiYgaXQtPnNlY29uZC5sb2NrRm9yUmVhZENvdW50ID4gMCk7Ci0g
ICAgaXQtPnNlY29uZC5sb2NrRm9yUmVhZENvdW50LS07CisgICAgQVNTRVJUKGl0ICE9IG1fcmVz
b3VyY2VzLmVuZCgpICYmIGl0LT52YWx1ZS5sb2NrRm9yUmVhZENvdW50ID4gMCk7CisgICAgaXQt
PnZhbHVlLmxvY2tGb3JSZWFkQ291bnQtLTsKIH0KIAogY29uc3QgQ0NSZXNvdXJjZVByb3ZpZGVy
OjpSZXNvdXJjZSogQ0NSZXNvdXJjZVByb3ZpZGVyOjpsb2NrRm9yV3JpdGUoUmVzb3VyY2VJZCBp
ZCkKQEAgLTI1Niw4ICsyNTYsOCBAQCBjb25zdCBDQ1Jlc291cmNlUHJvdmlkZXI6OlJlc291cmNl
KiBDQ1Jlc291cmNlUHJvdmlkZXI6OmxvY2tGb3JXcml0ZShSZXNvdXJjZUlkCiAgICAgQVNTRVJU
KENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKICAgICBSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQg
PSBtX3Jlc291cmNlcy5maW5kKGlkKTsKICAgICBBU1NFUlQoaXQgIT0gbV9yZXNvdXJjZXMuZW5k
KCkgJiYgIWl0LT5zZWNvbmQubG9ja2VkRm9yV3JpdGUgJiYgIWl0LT5zZWNvbmQubG9ja0ZvclJl
YWRDb3VudCAmJiAhaXQtPnNlY29uZC5leHRlcm5hbCk7Ci0gICAgaXQtPnNlY29uZC5sb2NrZWRG
b3JXcml0ZSA9IHRydWU7Ci0gICAgcmV0dXJuICZpdC0+c2Vjb25kOworICAgIGl0LT52YWx1ZS5s
b2NrZWRGb3JXcml0ZSA9IHRydWU7CisgICAgcmV0dXJuICZpdC0+dmFsdWU7CiB9CiAKIHZvaWQg
Q0NSZXNvdXJjZVByb3ZpZGVyOjp1bmxvY2tGb3JXcml0ZShSZXNvdXJjZUlkIGlkKQpAQCAtMjY1
LDcgKzI2NSw3IEBAIHZvaWQgQ0NSZXNvdXJjZVByb3ZpZGVyOjp1bmxvY2tGb3JXcml0ZShSZXNv
dXJjZUlkIGlkKQogICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CiAgICAgUmVz
b3VyY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMuZmluZChpZCk7CiAgICAgQVNTRVJU
KGl0ICE9IG1fcmVzb3VyY2VzLmVuZCgpICYmIGl0LT5zZWNvbmQubG9ja2VkRm9yV3JpdGUgJiYg
IWl0LT5zZWNvbmQuZXh0ZXJuYWwpOwotICAgIGl0LT5zZWNvbmQubG9ja2VkRm9yV3JpdGUgPSBm
YWxzZTsKKyAgICBpdC0+dmFsdWUubG9ja2VkRm9yV3JpdGUgPSBmYWxzZTsKIH0KIAogQ0NSZXNv
dXJjZVByb3ZpZGVyOjpTY29wZWRSZWFkTG9ja0dMOjpTY29wZWRSZWFkTG9ja0dMKENDUmVzb3Vy
Y2VQcm92aWRlciogcmVzb3VyY2VQcm92aWRlciwgQ0NSZXNvdXJjZVByb3ZpZGVyOjpSZXNvdXJj
ZUlkIHJlc291cmNlSWQpCkBAIC0zODgsNyArMzg4LDcgQEAgdm9pZCBDQ1Jlc291cmNlUHJvdmlk
ZXI6OmRlc3Ryb3lDaGlsZChpbnQgY2hpbGQpCiAgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRo
cmVhZCgpKTsKICAgICBDaGlsZE1hcDo6aXRlcmF0b3IgaXQgPSBtX2NoaWxkcmVuLmZpbmQoY2hp
bGQpOwogICAgIEFTU0VSVChpdCAhPSBtX2NoaWxkcmVuLmVuZCgpKTsKLSAgICBkZWxldGVPd25l
ZFJlc291cmNlcyhpdC0+c2Vjb25kLnBvb2wpOworICAgIGRlbGV0ZU93bmVkUmVzb3VyY2VzKGl0
LT52YWx1ZS5wb29sKTsKICAgICBtX2NoaWxkcmVuLnJlbW92ZShpdCk7CiAgICAgdHJpbU1haWxi
b3hEZXF1ZSgpOwogfQpAQCAtMzk4LDcgKzM5OCw3IEBAIGNvbnN0IENDUmVzb3VyY2VQcm92aWRl
cjo6UmVzb3VyY2VJZE1hcCYgQ0NSZXNvdXJjZVByb3ZpZGVyOjpnZXRDaGlsZFRvUGFyZW50TWFw
CiAgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKICAgICBDaGlsZE1hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtX2NoaWxkcmVuLmZpbmQoY2hpbGQpOwogICAgIEFTU0VSVChpdCAh
PSBtX2NoaWxkcmVuLmVuZCgpKTsKLSAgICByZXR1cm4gaXQtPnNlY29uZC5jaGlsZFRvUGFyZW50
TWFwOworICAgIHJldHVybiBpdC0+dmFsdWUuY2hpbGRUb1BhcmVudE1hcDsKIH0KIAogQ0NSZXNv
dXJjZVByb3ZpZGVyOjpUcmFuc2ZlcmFibGVSZXNvdXJjZUxpc3QgQ0NSZXNvdXJjZVByb3ZpZGVy
OjpwcmVwYXJlU2VuZFRvUGFyZW50KGNvbnN0IFJlc291cmNlSWRBcnJheSYgcmVzb3VyY2VzKQpA
QCAtNDE0LDcgKzQxNCw3IEBAIENDUmVzb3VyY2VQcm92aWRlcjo6VHJhbnNmZXJhYmxlUmVzb3Vy
Y2VMaXN0IENDUmVzb3VyY2VQcm92aWRlcjo6cHJlcGFyZVNlbmRUb1BhCiAgICAgZm9yIChSZXNv
dXJjZUlkQXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9
IHJlc291cmNlcy5lbmQoKTsgKytpdCkgewogICAgICAgICBUcmFuc2ZlcmFibGVSZXNvdXJjZSBy
ZXNvdXJjZTsKICAgICAgICAgaWYgKHRyYW5zZmVyUmVzb3VyY2UoY29udGV4dDNkLCAqaXQsICZy
ZXNvdXJjZSkpIHsKLSAgICAgICAgICAgIG1fcmVzb3VyY2VzLmZpbmQoKml0KS0+c2Vjb25kLmV4
cG9ydGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIG1fcmVzb3VyY2VzLmZpbmQoKml0KS0+dmFsdWUu
ZXhwb3J0ZWQgPSB0cnVlOwogICAgICAgICAgICAgbGlzdC5yZXNvdXJjZXMuYXBwZW5kKHJlc291
cmNlKTsKICAgICAgICAgfQogICAgIH0KQEAgLTQzMyw3ICs0MzMsNyBAQCBDQ1Jlc291cmNlUHJv
dmlkZXI6OlRyYW5zZmVyYWJsZVJlc291cmNlTGlzdCBDQ1Jlc291cmNlUHJvdmlkZXI6OnByZXBh
cmVTZW5kVG9DaAogICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgcGF0aCBmb3Igc29m
dHdhcmUgY29tcG9zaXRpbmcuCiAgICAgICAgIHJldHVybiBsaXN0OwogICAgIH0KLSAgICBDaGls
ZCYgY2hpbGRJbmZvID0gbV9jaGlsZHJlbi5maW5kKGNoaWxkKS0+c2Vjb25kOworICAgIENoaWxk
JiBjaGlsZEluZm8gPSBtX2NoaWxkcmVuLmZpbmQoY2hpbGQpLT52YWx1ZTsKICAgICBmb3IgKFJl
c291cmNlSWRBcnJheTo6Y29uc3RfaXRlcmF0b3IgaXQgPSByZXNvdXJjZXMuYmVnaW4oKTsgaXQg
IT0gcmVzb3VyY2VzLmVuZCgpOyArK2l0KSB7CiAgICAgICAgIFRyYW5zZmVyYWJsZVJlc291cmNl
IHJlc291cmNlOwogICAgICAgICBpZiAoIXRyYW5zZmVyUmVzb3VyY2UoY29udGV4dDNkLCAqaXQs
ICZyZXNvdXJjZSkpCkBAIC00NjYsNyArNDY2LDcgQEAgdm9pZCBDQ1Jlc291cmNlUHJvdmlkZXI6
OnJlY2VpdmVGcm9tQ2hpbGQoaW50IGNoaWxkLCBjb25zdCBUcmFuc2ZlcmFibGVSZXNvdXJjZUwK
ICAgICAgICAgLy8gKGFuZCBpcyBzaW1wbGVyKSB0byB3YWl0LgogICAgICAgICBHTEMoY29udGV4
dDNkLCBjb250ZXh0M2QtPndhaXRTeW5jUG9pbnQocmVzb3VyY2VzLnN5bmNQb2ludCkpOwogICAg
IH0KLSAgICBDaGlsZCYgY2hpbGRJbmZvID0gbV9jaGlsZHJlbi5maW5kKGNoaWxkKS0+c2Vjb25k
OworICAgIENoaWxkJiBjaGlsZEluZm8gPSBtX2NoaWxkcmVuLmZpbmQoY2hpbGQpLT52YWx1ZTsK
ICAgICBmb3IgKFZlY3RvcjxUcmFuc2ZlcmFibGVSZXNvdXJjZT46OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gcmVzb3VyY2VzLnJlc291cmNlcy5iZWdpbigpOyBpdCAhPSByZXNvdXJjZXMucmVzb3VyY2Vz
LmVuZCgpOyArK2l0KSB7CiAgICAgICAgIHVuc2lnbmVkIHRleHR1cmVJZDsKICAgICAgICAgR0xD
KGNvbnRleHQzZCwgdGV4dHVyZUlkID0gY29udGV4dDNkLT5jcmVhdGVUZXh0dXJlKCkpOwpAQCAt
NDkyLDcgKzQ5Miw3IEBAIHZvaWQgQ0NSZXNvdXJjZVByb3ZpZGVyOjpyZWNlaXZlRnJvbVBhcmVu
dChjb25zdCBUcmFuc2ZlcmFibGVSZXNvdXJjZUxpc3QmIHJlc291CiAgICAgaWYgKHJlc291cmNl
cy5zeW5jUG9pbnQpCiAgICAgICAgIEdMQyhjb250ZXh0M2QsIGNvbnRleHQzZC0+d2FpdFN5bmNQ
b2ludChyZXNvdXJjZXMuc3luY1BvaW50KSk7CiAgICAgZm9yIChWZWN0b3I8VHJhbnNmZXJhYmxl
UmVzb3VyY2U+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHJlc291cmNlcy5yZXNvdXJjZXMuYmVnaW4o
KTsgaXQgIT0gcmVzb3VyY2VzLnJlc291cmNlcy5lbmQoKTsgKytpdCkgewotICAgICAgICBSZXNv
dXJjZSYgcmVzb3VyY2UgPSBtX3Jlc291cmNlcy5maW5kKGl0LT5pZCktPnNlY29uZDsKKyAgICAg
ICAgUmVzb3VyY2UmIHJlc291cmNlID0gbV9yZXNvdXJjZXMuZmluZChpdC0+aWQpLT52YWx1ZTsK
ICAgICAgICAgQVNTRVJUKHJlc291cmNlLmV4cG9ydGVkKTsKICAgICAgICAgcmVzb3VyY2UuZXhw
b3J0ZWQgPSBmYWxzZTsKICAgICAgICAgR0xDKGNvbnRleHQzZCwgY29udGV4dDNkLT5iaW5kVGV4
dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgcmVzb3VyY2UuZ2xJZCkpOwpAQCAt
NTA2LDE2ICs1MDYsMTYgQEAgYm9vbCBDQ1Jlc291cmNlUHJvdmlkZXI6OnRyYW5zZmVyUmVzb3Vy
Y2UoV2ViR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFJlc291cmMKICAgICBBU1NFUlQoQ0NQ
cm94eTo6aXNJbXBsVGhyZWFkKCkpOwogICAgIFJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IG1fcmVzb3VyY2VzLmZpbmQoaWQpOwogICAgIEFTU0VSVChpdCAhPSBtX3Jlc291cmNlcy5l
bmQoKSAmJiAhaXQtPnNlY29uZC5sb2NrZWRGb3JXcml0ZSAmJiAhaXQtPnNlY29uZC5sb2NrRm9y
UmVhZENvdW50ICYmICFpdC0+c2Vjb25kLmV4dGVybmFsKTsKLSAgICBpZiAoaXQtPnNlY29uZC5l
eHBvcnRlZCkKKyAgICBpZiAoaXQtPnZhbHVlLmV4cG9ydGVkKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgcmVzb3VyY2UtPmlkID0gaWQ7Ci0gICAgcmVzb3VyY2UtPmZvcm1hdCA9IGl0LT5z
ZWNvbmQuZm9ybWF0OwotICAgIHJlc291cmNlLT5zaXplID0gaXQtPnNlY29uZC5zaXplOworICAg
IHJlc291cmNlLT5mb3JtYXQgPSBpdC0+dmFsdWUuZm9ybWF0OworICAgIHJlc291cmNlLT5zaXpl
ID0gaXQtPnZhbHVlLnNpemU7CiAgICAgaWYgKCFtX21haWxib3hlcy5pc0VtcHR5KCkpCiAgICAg
ICAgIHJlc291cmNlLT5tYWlsYm94ID0gbV9tYWlsYm94ZXMudGFrZUZpcnN0KCk7CiAgICAgZWxz
ZQogICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+Z2VuTWFpbGJveENIUk9NSVVNKHJlc291
cmNlLT5tYWlsYm94Lm5hbWUpKTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZFRleHR1
cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGl0LT5zZWNvbmQuZ2xJZCkpOworICAg
IEdMQyhjb250ZXh0LCBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgaXQtPnZhbHVlLmdsSWQpKTsKICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+cHJv
ZHVjZVRleHR1cmVDSFJPTUlVTShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgcmVzb3Vy
Y2UtPm1haWxib3gubmFtZSkpOwogICAgIHJldHVybiB0cnVlOwogfQpAQCAtNTMwLDE1ICs1MzAs
MTUgQEAgdm9pZCBDQ1Jlc291cmNlUHJvdmlkZXI6OnRyaW1NYWlsYm94RGVxdWUoKQogICAgIHNp
emVfdCBtYXhNYWlsYm94Q291bnQgPSAwOwogICAgIGlmIChtX2NvbnRleHQtPmNhcGFiaWxpdGll
cygpLmhhc1BhcmVudENvbXBvc2l0b3IpIHsKICAgICAgICAgZm9yIChSZXNvdXJjZU1hcDo6aXRl
cmF0b3IgaXQgPSBtX3Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSBtX3Jlc291cmNlcy5lbmQoKTsg
KytpdCkgewotICAgICAgICAgICAgaWYgKCFpdC0+c2Vjb25kLmV4cG9ydGVkICYmICFpdC0+c2Vj
b25kLmV4dGVybmFsKQorICAgICAgICAgICAgaWYgKCFpdC0+dmFsdWUuZXhwb3J0ZWQgJiYgIWl0
LT52YWx1ZS5leHRlcm5hbCkKICAgICAgICAgICAgICAgICArK21heE1haWxib3hDb3VudDsKICAg
ICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIEhhc2hTZXQ8aW50PiBjaGlsZFBvb2xTZXQ7
CiAgICAgICAgIGZvciAoQ2hpbGRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9jaGlsZHJlbi5iZWdpbigp
OyBpdCAhPSBtX2NoaWxkcmVuLmVuZCgpOyArK2l0KQotICAgICAgICAgICAgY2hpbGRQb29sU2V0
LmFkZChpdC0+c2Vjb25kLnBvb2wpOworICAgICAgICAgICAgY2hpbGRQb29sU2V0LmFkZChpdC0+
dmFsdWUucG9vbCk7CiAgICAgICAgIGZvciAoUmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9y
ZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gbV9yZXNvdXJjZXMuZW5kKCk7ICsraXQpIHsKLSAgICAg
ICAgICAgIGlmIChjaGlsZFBvb2xTZXQuY29udGFpbnMoaXQtPnNlY29uZC5wb29sKSkKKyAgICAg
ICAgICAgIGlmIChjaGlsZFBvb2xTZXQuY29udGFpbnMoaXQtPnZhbHVlLnBvb2wpKQogICAgICAg
ICAgICAgICAgICsrbWF4TWFpbGJveENvdW50OwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJH
bG9iYWxDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvQ3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dC5jcHAKaW5kZXggMzgyYzI3OGVhMjFkMTM1ZjA5
Yzc3NmM4M2YwNTIxNmJhNmU4ZWQ3My4uMGFlZjZjZDQ2MGQ0ZTM5OGE1YWE0ZDU2OGU4NjUyZTZm
MzI5YjUwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9DdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlckdsb2JhbENvbnRleHQuY3BwCkBA
IC00NCw3ICs0NCw3IEBAIEN1c3RvbUZpbHRlckdsb2JhbENvbnRleHQ6OkN1c3RvbUZpbHRlckds
b2JhbENvbnRleHQoKQogQ3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dDo6fkN1c3RvbUZpbHRlckds
b2JhbENvbnRleHQoKQogewogICAgIGZvciAoQ3VzdG9tRmlsdGVyQ29tcGlsZWRQcm9ncmFtc01h
cDo6aXRlcmF0b3IgaXRlciA9IG1fcHJvZ3JhbXMuYmVnaW4oKTsgaXRlciAhPSBtX3Byb2dyYW1z
LmVuZCgpOyArK2l0ZXIpCi0gICAgICAgIGl0ZXItPnNlY29uZC0+ZGV0YWNoRnJvbUdsb2JhbENv
bnRleHQoKTsKKyAgICAgICAgaXRlci0+dmFsdWUtPmRldGFjaEZyb21HbG9iYWxDb250ZXh0KCk7
CiB9CiAKIHZvaWQgQ3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dDo6cHJlcGFyZUNvbnRleHRJZk5l
ZWRlZChIb3N0V2luZG93KiBob3N0V2luZG93KQpAQCAtNjksNyArNjksNyBAQCBQYXNzUmVmUHRy
PEN1c3RvbUZpbHRlckNvbXBpbGVkUHJvZ3JhbT4gQ3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dDo6
Z2V0Q29tcGlsZWRQcgogCiAgICAgQ3VzdG9tRmlsdGVyQ29tcGlsZWRQcm9ncmFtc01hcDo6aXRl
cmF0b3IgaXRlciA9IG1fcHJvZ3JhbXMuZmluZChwcm9ncmFtSW5mbyk7CiAgICAgaWYgKGl0ZXIg
IT0gbV9wcm9ncmFtcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0ZXItPnNlY29uZDsKKyAgICAg
ICAgcmV0dXJuIGl0ZXItPnZhbHVlOwogCiAgICAgUmVmUHRyPEN1c3RvbUZpbHRlckNvbXBpbGVk
UHJvZ3JhbT4gY29tcGlsZWRQcm9ncmFtID0gQ3VzdG9tRmlsdGVyQ29tcGlsZWRQcm9ncmFtOjpj
cmVhdGUodGhpcywgcHJvZ3JhbUluZm8pOwogICAgIG1fcHJvZ3JhbXMuc2V0KHByb2dyYW1JbmZv
LCBjb21waWxlZFByb2dyYW0uZ2V0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJQcm9ncmFtLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyUHJvZ3JhbS5jcHAK
aW5kZXggZDFjZjYxMzRmNzBhZThhYmY1MmZjNjIzYTdkNjk2NTM0ODc5ZjYxMi4uOTRlODNkZjli
ODNiMmI1YjU0ZmU3NDdhN2UyYWZjYjQyMjVlOWNmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJQcm9ncmFtLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclBy
b2dyYW0uY3BwCkBAIC03NSw3ICs3NSw3IEBAIHZvaWQgQ3VzdG9tRmlsdGVyUHJvZ3JhbTo6cmVt
b3ZlQ2xpZW50KEN1c3RvbUZpbHRlclByb2dyYW1DbGllbnQqIGNsaWVudCkKIHZvaWQgQ3VzdG9t
RmlsdGVyUHJvZ3JhbTo6bm90aWZ5Q2xpZW50cygpCiB7CiAgICAgZm9yIChDdXN0b21GaWx0ZXJQ
cm9ncmFtQ2xpZW50TGlzdDo6aXRlcmF0b3IgaXRlciA9IG1fY2xpZW50cy5iZWdpbigpLCBlbmQg
PSBtX2NsaWVudHMuZW5kKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCi0gICAgICAgIGl0ZXItPmZp
cnN0LT5ub3RpZnlDdXN0b21GaWx0ZXJQcm9ncmFtTG9hZGVkKHRoaXMpOworICAgICAgICBpdGVy
LT5rZXktPm5vdGlmeUN1c3RvbUZpbHRlclByb2dyYW1Mb2FkZWQodGhpcyk7CiB9CiAKIEN1c3Rv
bUZpbHRlclByb2dyYW1JbmZvIEN1c3RvbUZpbHRlclByb2dyYW06OnByb2dyYW1JbmZvKCkgY29u
c3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6
L0hhcmZCdXp6U2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJm
YnV6ei9IYXJmQnV6elNraWEuY3BwCmluZGV4IGY2OGVhNjE5MjQ1Zjg2NmU1YmQwZDU3OGQwMTA0
ODQ0NTI1ODRjMmIuLjFlODg2N2JiNzU3ZjIyNDJlOGY0OTYyZjg3NWIxYmRmN2FlOTkxMmUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZC
dXp6U2tpYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1
enovSGFyZkJ1enpTa2lhLmNwcApAQCAtMjQ0LDE4ICsyNDQsMTggQEAgc3RhdGljIEhCX0ZhY2VS
ZWNfKiBnZXRDYWNoZWRIYXJmYnV6ekZhY2UoRm9udFBsYXRmb3JtRGF0YSogcGxhdGZvcm1EYXRh
KQogICAgICAgICBnSGFyZmJ1enpGYWNlQ2FjaGUtPnNldCh1bmlxdWVJRCwgZW50cnkpOwogICAg
ICAgICByZXR1cm4gZW50cnkuZmlyc3Q7CiAgICAgfQotICAgICsrKHJlc3VsdC5nZXQoKS0+c2Vj
b25kLnNlY29uZCk7Ci0gICAgcmV0dXJuIHJlc3VsdC5nZXQoKS0+c2Vjb25kLmZpcnN0OworICAg
ICsrKHJlc3VsdC5nZXQoKS0+dmFsdWUuc2Vjb25kKTsKKyAgICByZXR1cm4gcmVzdWx0LmdldCgp
LT52YWx1ZS5maXJzdDsKIH0KIAogc3RhdGljIHZvaWQgcmVsZWFzZUNhY2hlZEhhcmZidXp6RmFj
ZShTa0ZvbnRJRCB1bmlxdWVJRCkKIHsKICAgICBIYXJmYnV6ekZhY2VDYWNoZTo6aXRlcmF0b3Ig
cmVzdWx0ID0gZ0hhcmZidXp6RmFjZUNhY2hlLT5maW5kKHVuaXF1ZUlEKTsKICAgICBBU1NFUlQo
cmVzdWx0ICE9IGdIYXJmYnV6ekZhY2VDYWNoZS0+ZW5kKCkpOwotICAgIEFTU0VSVChyZXN1bHQu
Z2V0KCktPnNlY29uZC5zZWNvbmQgPiAwKTsKLSAgICAtLShyZXN1bHQuZ2V0KCktPnNlY29uZC5z
ZWNvbmQpOwotICAgIGlmICghKHJlc3VsdC5nZXQoKS0+c2Vjb25kLnNlY29uZCkpIHsKLSAgICAg
ICAgSEJfRnJlZUZhY2UocmVzdWx0LmdldCgpLT5zZWNvbmQuZmlyc3QpOworICAgIEFTU0VSVChy
ZXN1bHQuZ2V0KCktPnZhbHVlLnNlY29uZCA+IDApOworICAgIC0tKHJlc3VsdC5nZXQoKS0+dmFs
dWUuc2Vjb25kKTsKKyAgICBpZiAoIShyZXN1bHQuZ2V0KCktPnZhbHVlLnNlY29uZCkpIHsKKyAg
ICAgICAgSEJfRnJlZUZhY2UocmVzdWx0LmdldCgpLT52YWx1ZS5maXJzdCk7CiAgICAgICAgIGdI
YXJmYnV6ekZhY2VDYWNoZS0+cmVtb3ZlKHVuaXF1ZUlEKTsKICAgICB9CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ek5H
RmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9I
YXJmQnV6ek5HRmFjZS5jcHAKaW5kZXggN2RkMDQ4YjNiNDNmZjU5Mzg4ZWFmNGU3MjEwZWUyY2Ni
ZDU1NDIyMy4uNjA0NzU5YjhjYmRlZDNjOGI4NDFkYzY2ODc3ZTNkZWEzNDYxZjc2OCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1
enpOR0ZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZi
dXp6L25nL0hhcmZCdXp6TkdGYWNlLmNwcApAQCAtNjAsOCArNjAsOCBAQCBIYXJmQnV6ek5HRmFj
ZTo6SGFyZkJ1enpOR0ZhY2UoRm9udFBsYXRmb3JtRGF0YSogcGxhdGZvcm1EYXRhLCB1aW50NjRf
dCB1bmlxdWVJRAogICAgICAgICBBU1NFUlQobV9mYWNlKTsKICAgICAgICAgaGFyZmJ1enpGYWNl
Q2FjaGUoKS0+c2V0KG1fdW5pcXVlSUQsIEZhY2VDYWNoZUVudHJ5KG1fZmFjZSwgMSkpOwogICAg
IH0gZWxzZSB7Ci0gICAgICAgICsrKHJlc3VsdC5nZXQoKS0+c2Vjb25kLnNlY29uZCk7Ci0gICAg
ICAgIG1fZmFjZSA9IHJlc3VsdC5nZXQoKS0+c2Vjb25kLmZpcnN0OworICAgICAgICArKyhyZXN1
bHQuZ2V0KCktPnZhbHVlLnNlY29uZCk7CisgICAgICAgIG1fZmFjZSA9IHJlc3VsdC5nZXQoKS0+
dmFsdWUuZmlyc3Q7CiAgICAgfQogfQogCkBAIC02OSwxMCArNjksMTAgQEAgSGFyZkJ1enpOR0Zh
Y2U6On5IYXJmQnV6ek5HRmFjZSgpCiB7CiAgICAgSGFyZkJ1enpOR0ZhY2VDYWNoZTo6aXRlcmF0
b3IgcmVzdWx0ID0gaGFyZmJ1enpGYWNlQ2FjaGUoKS0+ZmluZChtX3VuaXF1ZUlEKTsKICAgICBB
U1NFUlQocmVzdWx0ICE9IGhhcmZidXp6RmFjZUNhY2hlKCktPmVuZCgpKTsKLSAgICBBU1NFUlQo
cmVzdWx0LmdldCgpLT5zZWNvbmQuc2Vjb25kID4gMCk7Ci0gICAgLS0ocmVzdWx0LmdldCgpLT5z
ZWNvbmQuc2Vjb25kKTsKLSAgICBpZiAoIShyZXN1bHQuZ2V0KCktPnNlY29uZC5zZWNvbmQpKSB7
Ci0gICAgICAgIGhiX2ZhY2VfZGVzdHJveShyZXN1bHQuZ2V0KCktPnNlY29uZC5maXJzdCk7Cisg
ICAgQVNTRVJUKHJlc3VsdC5nZXQoKS0+dmFsdWUuc2Vjb25kID4gMCk7CisgICAgLS0ocmVzdWx0
LmdldCgpLT52YWx1ZS5zZWNvbmQpOworICAgIGlmICghKHJlc3VsdC5nZXQoKS0+dmFsdWUuc2Vj
b25kKSkgeworICAgICAgICBoYl9mYWNlX2Rlc3Ryb3kocmVzdWx0LmdldCgpLT52YWx1ZS5maXJz
dCk7CiAgICAgICAgIGhhcmZidXp6RmFjZUNhY2hlKCktPnJlbW92ZShtX3VuaXF1ZUlEKTsKICAg
ICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMv
U2ltcGxlRm9udERhdGFDb3JlVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvU2ltcGxlRm9udERhdGFDb3JlVGV4dC5jcHAKaW5kZXggMDUxOTM3NDJjNTg1MmRi
ZTljOWNlZDY0YjlhMDdhYWQyYzFlYTQ3Ny4uMGI3MTMzNDdmNjA0NjM1NTQ5ZTUwZDU2MzY1MjE4
YjIzNDQyNmFjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL1NpbXBsZUZvbnREYXRhQ29yZVRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YUNvcmVUZXh0LmNwcApAQCAtNDMsNyArNDMs
NyBAQCBDRkRpY3Rpb25hcnlSZWYgU2ltcGxlRm9udERhdGE6OmdldENGU3RyaW5nQXR0cmlidXRl
cyhUeXBlc2V0dGluZ0ZlYXR1cmVzIHR5cGVzZQogewogICAgIHVuc2lnbmVkIGtleSA9IHR5cGVz
ZXR0aW5nRmVhdHVyZXMgKyAxOwogICAgIEhhc2hNYXA8dW5zaWduZWQsIFJldGFpblB0cjxDRkRp
Y3Rpb25hcnlSZWY+ID46OkFkZFJlc3VsdCBhZGRSZXN1bHQgPSBtX0NGU3RyaW5nQXR0cmlidXRl
cy5hZGQoa2V5LCBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPigpKTsKLSAgICBSZXRhaW5QdHI8
Q0ZEaWN0aW9uYXJ5UmVmPiYgYXR0cmlidXRlc0RpY3Rpb25hcnkgPSBhZGRSZXN1bHQuaXRlcmF0
b3ItPnNlY29uZDsKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiYgYXR0cmlidXRlc0Rp
Y3Rpb25hcnkgPSBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghYWRkUmVzdWx0
LmlzTmV3RW50cnkpCiAgICAgICAgIHJldHVybiBhdHRyaWJ1dGVzRGljdGlvbmFyeS5nZXQoKTsK
ICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9T
aW1wbGVGb250RGF0YU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9TaW1wbGVGb250RGF0YU1hYy5tbQppbmRleCA2NmZlOTBhNTkzOTBlNGNkMjJmNjE4MzhmOGM2
YTlkYmZiNTJhYzZjLi45N2ViYmY5OWMzZDJlNWU3MWNhNjBkYWNiM2RlODI1YTQxYjY3MTdkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9u
dERhdGFNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1Np
bXBsZUZvbnREYXRhTWFjLm1tCkBAIC00NjEsNyArNDYxLDcgQEAgYm9vbCBTaW1wbGVGb250RGF0
YTo6Y2FuUmVuZGVyQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY29uc3QgVUNoYXIqIGNoYXJh
Y3RlcnMKIAogICAgIFdURjo6SGFzaE1hcDxTdHJpbmcsIGJvb2w+OjpBZGRSZXN1bHQgYWRkUmVz
dWx0ID0gbV9jb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZVN1cHBvcnQtPmFkZChTdHJpbmcoY2hh
cmFjdGVycywgbGVuZ3RoKSwgZmFsc2UpOwogICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkp
Ci0gICAgICAgIHJldHVybiBhZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgcmV0
dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAKICAgICBSZXRhaW5QdHI8Q0dGb250UmVm
PiBjZ0ZvbnQoQWRvcHRDRiwgQ1RGb250Q29weUdyYXBoaWNzRm9udChwbGF0Zm9ybURhdGEoKS5j
dEZvbnQoKSwgMCkpOwogCkBAIC00ODEsNyArNDgxLDcgQEAgYm9vbCBTaW1wbGVGb250RGF0YTo6
Y2FuUmVuZGVyQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY29uc3QgVUNoYXIqIGNoYXJhY3Rl
cnMKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBhZGRSZXN1bHQuaXRl
cmF0b3ItPnNlY29uZCA9IHRydWU7CisgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IHRy
dWU7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENv
bW1vbi5jcHAKaW5kZXggYTNjMDU2NTkxMjBmYWQ4MmNkMTJiNGE1NWE4ZjQ3NGIyM2MyYmVjOS4u
OGJlOTM4NjI1YjQwZTUzY2VkNjZkYjU2ZmEwZjk5YTRhMDA0ZTZmOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENv
bW1vbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4
dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAKQEAgLTExNyw3ICsxMTcsNyBAQCBTdHJpbmcgRXh0
ZW5zaW9uczNET3BlbkdMQ29tbW9uOjpnZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUoUGxh
dGZvcm0zRE9iamVjdAogICAgIGlmIChyZXN1bHQgPT0gbV9jb250ZXh0LT5tX3NoYWRlclNvdXJj
ZU1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuICIiOwogCi0gICAgR3JhcGhpY3NDb250ZXh0M0Q6
OlNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3VsdC0+c2Vjb25kOworICAgIEdyYXBoaWNz
Q29udGV4dDNEOjpTaGFkZXJTb3VyY2VFbnRyeSYgZW50cnkgPSByZXN1bHQtPnZhbHVlOwogCiAg
ICAgU3RyaW5nIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2U7CiAgICAgU3RyaW5nIHNoYWRlckluZm9M
b2c7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
R3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcAppbmRl
eCA3NzJjYTgxYTBhMTU4M2YzYTI4ZGQ4ZDY5MWViMDM5Y2MwYzUxODYyLi5kZjljY2I1NzQzMjI2
MGJmYTViYjM1Nzk2MjNhOGYyMmIyMGEwYmQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0Nv
bnRleHQzRE9wZW5HTENvbW1vbi5jcHAKQEAgLTQ3Myw3ICs0NzMsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpjb21waWxlU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQogCiAgICAg
aWYgKGxlbmd0aCkgewogICAgICAgICBIYXNoTWFwPFBsYXRmb3JtM0RPYmplY3QsIEdyYXBoaWNz
Q29udGV4dDNEOjpTaGFkZXJTb3VyY2VFbnRyeT46Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVy
U291cmNlTWFwLmZpbmQoc2hhZGVyKTsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OlNoYWRl
clNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3VsdC0+c2Vjb25kOworICAgICAgICBHcmFwaGljc0Nv
bnRleHQzRDo6U2hhZGVyU291cmNlRW50cnkmIGVudHJ5ID0gcmVzdWx0LT52YWx1ZTsKIAogICAg
ICAgICBHTHNpemVpIHNpemUgPSAwOwogICAgICAgICBPd25BcnJheVB0cjxHTGNoYXI+IGluZm8g
PSBhZG9wdEFycmF5UHRyKG5ldyBHTGNoYXJbbGVuZ3RoXSk7CkBAIC0xMTQ1LDcgKzExNDUsNyBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJpdihQbGF0Zm9ybTNET2JqZWN0IHNo
YWRlciwgR0MzRGVudW0gcG5hbWUsIEdDMwogICAgICAgICAgICAgKnZhbHVlID0gc3RhdGljX2Nh
c3Q8aW50PihmYWxzZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAg
KnZhbHVlID0gc3RhdGljX2Nhc3Q8aW50PihyZXN1bHQtPnNlY29uZC5pc1ZhbGlkKTsKKyAgICAg
ICAgKnZhbHVlID0gc3RhdGljX2Nhc3Q8aW50PihyZXN1bHQtPnZhbHVlLmlzVmFsaWQpOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIElORk9fTE9HX0xFTkdUSDoKICAgICAgICAgaWYgKHJlc3Vs
dCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkgewpAQCAtMTE3Miw3ICsxMTcyLDcgQEAgU3Ry
aW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJJbmZvTG9nKFBsYXRmb3JtM0RPYmplY3Qg
c2hhZGVyKQogICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCiAgICAg
ICAgIHJldHVybiBTdHJpbmcoKTsgCiAKLSAgICBTaGFkZXJTb3VyY2VFbnRyeSBlbnRyeSA9IHJl
c3VsdC0+c2Vjb25kOworICAgIFNoYWRlclNvdXJjZUVudHJ5IGVudHJ5ID0gcmVzdWx0LT52YWx1
ZTsKICAgICBpZiAoIWVudHJ5LmlzVmFsaWQpCiAgICAgICAgIHJldHVybiBlbnRyeS5sb2c7CiAK
QEAgLTExOTgsNyArMTE5OCw3IEBAIFN0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVy
U291cmNlKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQogICAgIGlmIChyZXN1bHQgPT0gbV9zaGFk
ZXJTb3VyY2VNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsgCiAKLSAgICByZXR1
cm4gcmVzdWx0LT5zZWNvbmQuc291cmNlOworICAgIHJldHVybiByZXN1bHQtPnZhbHVlLnNvdXJj
ZTsKIH0KIAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVudmcvRUdMRGlzcGxheU9wZW5WRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVudmcvRUdMRGlzcGxheU9wZW5WRy5jcHAKaW5kZXggZDY4MWQ3NTgxZmIzZmJmMjlk
ODhlMTI2ZTUzODM4NzgyMzBiNTIyMC4uMWE2OGFlZmY4Y2M4YzlmNTQ3NmI0ZjA1MzU2NjIwZmUx
OTE0MWM0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bnZnL0VHTERpc3BsYXlPcGVuVkcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW52Zy9FR0xEaXNwbGF5T3BlblZHLmNwcApAQCAtMTIxLDcgKzEyMSw3IEBAIEVH
TERpc3BsYXlPcGVuVkc6On5FR0xEaXNwbGF5T3BlblZHKCkKIAogICAgIEhhc2hNYXA8RUdMU3Vy
ZmFjZSwgRUdMaW50Pjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9zdXJmYWNlQ29uZmlnSWRzLmVu
ZCgpOwogICAgIGZvciAoSGFzaE1hcDxFR0xTdXJmYWNlLCBFR0xpbnQ+Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fc3VyZmFjZUNvbmZpZ0lkcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAg
ICAgIGRlc3Ryb3lTdXJmYWNlKCgqaXQpLmZpcnN0KTsKKyAgICAgICAgZGVzdHJveVN1cmZhY2Uo
KCppdCkua2V5KTsKIAogICAgIGVnbFRlcm1pbmF0ZShtX2Rpc3BsYXkpOwogICAgIEFTU0VSVF9F
R0xfTk9fRVJST1IoKTsKQEAgLTMzOCw3ICszMzgsNyBAQCB2b2lkIEVHTERpc3BsYXlPcGVuVkc6
OmRlc3Ryb3lTdXJmYWNlKGNvbnN0IEVHTFN1cmZhY2UmIHN1cmZhY2UpCiAKICAgICAgICAgLy8g
Li4uYnV0IG9ubHkgaWYgdGhlcmUncyBubyBvdGhlciBzdXJmYWNlcyBhc3NvY2lhdGVkIHRvIHRo
YXQgY29udGV4dC4KICAgICAgICAgZm9yIChIYXNoTWFwPEVHTFN1cmZhY2UsIEVHTGludD46Oml0
ZXJhdG9yIGl0ID0gbV9zdXJmYWNlQ29uZmlnSWRzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewotICAgICAgICAgICAgaWYgKCgqaXQpLnNlY29uZCA9PSBzdXJmYWNlQ29uZmlnSWQpIHsKKyAg
ICAgICAgICAgIGlmICgoKml0KS52YWx1ZSA9PSBzdXJmYWNlQ29uZmlnSWQpIHsKICAgICAgICAg
ICAgICAgICBpc0NvbnRleHRSZWZlcmVuY2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KQEAgLTM1NCw3ICszNTQsNyBAQCB2b2lkIEVHTERpc3BsYXlPcGVu
Vkc6OmRlc3Ryb3lTdXJmYWNlKGNvbnN0IEVHTFN1cmZhY2UmIHN1cmZhY2UpCiAKICAgICBIYXNo
TWFwPEVHTE5hdGl2ZVdpbmRvd1R5cGUsIEVHTFN1cmZhY2U+OjppdGVyYXRvciBlbmQgPSBtX3dp
bmRvd1N1cmZhY2VzLmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDxFR0xOYXRpdmVXaW5kb3dUeXBl
LCBFR0xTdXJmYWNlPjo6aXRlcmF0b3IgaXQgPSBtX3dpbmRvd1N1cmZhY2VzLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoKCppdCkuc2Vjb25kID09IHN1cmZhY2UpIHsK
KyAgICAgICAgaWYgKCgqaXQpLnZhbHVlID09IHN1cmZhY2UpIHsKICAgICAgICAgICAgIG1fd2lu
ZG93U3VyZmFjZXMucmVtb3ZlKGl0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBA
IC00MDksNyArNDA5LDcgQEAgRUdMQ29udGV4dCBFR0xEaXNwbGF5T3BlblZHOjpjb250ZXh0Rm9y
U3VyZmFjZShjb25zdCBFR0xTdXJmYWNlJiBzdXJmYWNlKQogICAgIEhhc2hNYXA8RUdMaW50LCBF
R0xDb250ZXh0Pjo6aXRlcmF0b3IgZW5kID0gbV9jb250ZXh0cy5lbmQoKTsKIAogICAgIGZvciAo
SGFzaE1hcDxFR0xpbnQsIEVHTENvbnRleHQ+OjppdGVyYXRvciBpdCA9IG1fY29udGV4dHMuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGVnbE1ha2VDdXJyZW50KG1fZGlzcGxh
eSwgc3VyZmFjZSwgc3VyZmFjZSwgKCppdCkuc2Vjb25kKTsKKyAgICAgICAgZWdsTWFrZUN1cnJl
bnQobV9kaXNwbGF5LCBzdXJmYWNlLCBzdXJmYWNlLCAoKml0KS52YWx1ZSk7CiAgICAgICAgIGlm
IChlZ2xHZXRFcnJvcigpID09IEVHTF9TVUNDRVNTKSB7CiAgICAgICAgICAgICAvLyBSZXN0b3Jl
IHByZXZpb3VzIHN1cmZhY2UvY29udGV4dC4KICAgICAgICAgICAgIGlmIChjdXJyZW50Q29udGV4
dCAhPSBFR0xfTk9fQ09OVEVYVCkgewpAQCAtNDE3LDggKzQxNyw4IEBAIEVHTENvbnRleHQgRUdM
RGlzcGxheU9wZW5WRzo6Y29udGV4dEZvclN1cmZhY2UoY29uc3QgRUdMU3VyZmFjZSYgc3VyZmFj
ZSkKICAgICAgICAgICAgICAgICBBU1NFUlRfRUdMX05PX0VSUk9SKCk7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAvLyBDb29sLCBzdXJmYWNlIGlzIGNvbXBhdGlibGUgdG8gb25lIG9mIG91
ciBleGlzdGluZyBjb250ZXh0cy4KLSAgICAgICAgICAgIG1fY29tcGF0aWJsZUNvbmZpZ0lkcy5z
ZXQoc3VyZmFjZUNvbmZpZ0lkLCAoKml0KS5maXJzdCk7Ci0gICAgICAgICAgICByZXR1cm4gKCpp
dCkuc2Vjb25kOworICAgICAgICAgICAgbV9jb21wYXRpYmxlQ29uZmlnSWRzLnNldChzdXJmYWNl
Q29uZmlnSWQsICgqaXQpLmtleSk7CisgICAgICAgICAgICByZXR1cm4gKCppdCkudmFsdWU7CiAg
ICAgICAgIH0KICAgICB9CiAgICAgLy8gUmVzdG9yZSBwcmV2aW91cyBzdXJmYWNlL2NvbnRleHQu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlckdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyR0wuY3BwCmluZGV4IGEyMmU3MjBlMTY1MGEwZjNiY2Y4MWU0ZjNjZGZm
NzgxNzBkOGFhZDAuLjAxNjIxNGE4YTdkMTk0ZTQ2N2VjMTgxOGNjYzEyN2QxNjIyZWU0ODYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyR0wuY3BwCkBAIC0xMDUsNyArMTA1LDcgQEAgc3RydWN0IFRleHR1cmVN
YXBwZXJHTERhdGEgewogICAgICAgICAgICAgR0xDb250ZXh0IGN1cnJlbnRHTENvbmV4dCA9IGdl
dEN1cnJlbnRHTENvbnRleHQoKTsKICAgICAgICAgICAgIEdMQ29udGV4dERhdGFNYXA6Oml0ZXJh
dG9yIGl0ID0gZ2xDb250ZXh0RGF0YU1hcCgpLmZpbmQoY3VycmVudEdMQ29uZXh0KTsKICAgICAg
ICAgICAgIGlmIChpdCAhPSBnbENvbnRleHREYXRhTWFwKCkuZW5kKCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsK
IAogICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTaGFyZWRHTERhdGEoZ2V0Q3VycmVu
dEdMQ29udGV4dCgpKSk7CiAgICAgICAgIH0KQEAgLTEyNCw3ICsxMjQsNyBAQCBzdHJ1Y3QgVGV4
dHVyZU1hcHBlckdMRGF0YSB7CiAgICAgICAgICAgICBHTENvbnRleHREYXRhTWFwOjpjb25zdF9p
dGVyYXRvciBlbmQgPSBnbENvbnRleHREYXRhTWFwKCkuZW5kKCk7CiAgICAgICAgICAgICBHTENv
bnRleHREYXRhTWFwOjppdGVyYXRvciBpdDsKICAgICAgICAgICAgIGZvciAoaXQgPSBnbENvbnRl
eHREYXRhTWFwKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAg
aWYgKGl0LT5zZWNvbmQgPT0gdGhpcykKKyAgICAgICAgICAgICAgICBpZiAoaXQtPnZhbHVlID09
IHRoaXMpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlclNoYWRlck1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcAppbmRleCAwZmJkYmU5NWNhZjE2
NDcwZGQwNjMyZjA0YzE0NGI4MjBiNmU4YmIzLi40NjQ5ZjRiNjJkOGUxOWFhM2M1M2JhYWM5Zjc1
MjJjZjEzOWYzMjM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5j
cHAKQEAgLTIwOCw3ICsyMDgsNyBAQCBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtPiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6Z2V0U2hhZGVyUHJvZwogCiAgICAgVGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW1NYXA6Oml0ZXJhdG9yIGl0ID0gbV90ZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbU1hcC5maW5kKHNoYWRlclR5cGUpOwogICAgIGlmIChpdCAhPSBtX3RleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtTWFwLmVuZCgpKQotICAgICAgICByZXR1cm4gaXQtPnNlY29u
ZDsKKyAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKIAogICAgIHN3aXRjaCAoc2hhZGVyVHlwZSkg
ewogICAgIGNhc2UgU2ltcGxlOgpAQCAtNzY1LDcgKzc2NSw3IEBAIFBhc3NSZWZQdHI8U3RhbmRh
cmRGaWx0ZXJQcm9ncmFtPiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6Z2V0U2hhZGVyRm9y
RmlsdGVyCiAKICAgICAgICAgbV9maWx0ZXJNYXAuYWRkKGtleSwgcHJvZ3JhbSk7CiAgICAgfSBl
bHNlCi0gICAgICAgIHByb2dyYW0gPSBpdGVyYXRvci0+c2Vjb25kOworICAgICAgICBwcm9ncmFt
ID0gaXRlcmF0b3ItPnZhbHVlOwogCiAgICAgcmV0dXJuIHByb2dyYW07CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250UGxhdGZvcm1EYXRh
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRQbGF0Zm9y
bURhdGEuY3BwCmluZGV4IDE5NzkwYWQ0OWIzMzAzZGQ3YjYyYzdlN2EwYTgyMzY3N2I0Y2ZmNTEu
LjE5ZjUyNDU1ZDExYjM1NGNjNGQ0M2U2ODM5OWNlNzlhYzk5YmMwYjIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRQbGF0Zm9ybURhdGEuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRQbGF0Zm9y
bURhdGEuY3BwCkBAIC0yODcsOSArMjg3LDkgQEAgc3RhdGljIFBhc3NSZWZQdHI8Rml4ZWRTaXpl
Rm9udERhdGE+IGNyZWF0ZUZpeGVkU2l6ZUZvbnREYXRhKGNvbnN0IEF0b21pY1N0cmluZyYKICAg
ICBGaXhlZFNpemVGb250RGF0YUtleSBrZXkoZmFtaWx5LCB3ZWlnaHQsIGl0YWxpYyk7CiAgICAg
Rml4ZWRTaXplRm9udENhY2hlOjpBZGRSZXN1bHQgcmVzdWx0ID0gZ19maXhlZFNpemVGb250Q2Fj
aGUuYWRkKGtleSwgUmVmUHRyPEZpeGVkU2l6ZUZvbnREYXRhPigpKTsKICAgICBpZiAocmVzdWx0
LmlzTmV3RW50cnkpCi0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gRml4ZWRTaXpl
Rm9udERhdGE6OmNyZWF0ZShmYW1pbHksIHdlaWdodCwgaXRhbGljKTsKKyAgICAgICAgcmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZSA9IEZpeGVkU2l6ZUZvbnREYXRhOjpjcmVhdGUoZmFtaWx5LCB3ZWln
aHQsIGl0YWxpYyk7CiAKLSAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAg
cmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiB9CiAKIHN0YXRpYyBMT05HIHRvR0RJRm9u
dFdlaWdodChGb250V2VpZ2h0IGZvbnRXZWlnaHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvRGF0YU9iamVjdEd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvRGF0YU9iamVjdEd0ay5jcHAKaW5kZXggMWE4NGY4YmQzMTk1MmIyOGUyNjgyNzFkZDJh
NWY1N2Y0NGQ4MjdkNy4uYWRmYzY2ZTAxNWU1MDIyNjc4OGMyMTQ3NjhhMTViMjkxMzY4NDNiOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RhdGFPYmplY3RHdGsuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmNwcApAQCAt
MTcxLDcgKzE3MSw3IEBAIERhdGFPYmplY3RHdGsqIERhdGFPYmplY3RHdGs6OmZvckNsaXBib2Fy
ZChHdGtDbGlwYm9hcmQqIGNsaXBib2FyZCkKICAgICB9CiAKICAgICBIYXNoTWFwPEd0a0NsaXBi
b2FyZCosIFJlZlB0cjxEYXRhT2JqZWN0R3RrPiA+OjppdGVyYXRvciBpdCA9IG9iamVjdE1hcC5m
aW5kKGNsaXBib2FyZCk7Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgcmV0dXJu
IGl0LT52YWx1ZS5nZXQoKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL0d0a0RyYWdBbmREcm9wSGVscGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9HdGtEcmFnQW5kRHJvcEhlbHBlci5jcHAKaW5kZXggNzYzZDEyMGQwOTQxNjIyNzI2
NjBjNjA2MzJhMTkyOTg2ZjU0MmVhNC4uZmMyZjU2ZTYxNjZlYjFhYWNkYmFkYThmNTJmZWYzYzZk
ZDg4NjRjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0RyYWdB
bmREcm9wSGVscGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrRHJh
Z0FuZERyb3BIZWxwZXIuY3BwCkBAIC03MCw3ICs3MCw3IEBAIHZvaWQgR3RrRHJhZ0FuZERyb3BI
ZWxwZXI6OmhhbmRsZUdldERyYWdEYXRhKEdka0RyYWdDb250ZXh0KiBjb250ZXh0LCBHdGtTZWxl
Y3RpCiAgICAgRHJhZ2dpbmdEYXRhT2JqZWN0c01hcDo6aXRlcmF0b3IgaXRlcmF0b3IgPSBtX2Ry
YWdnaW5nRGF0YU9iamVjdHMuZmluZChjb250ZXh0KTsKICAgICBpZiAoaXRlcmF0b3IgPT0gbV9k
cmFnZ2luZ0RhdGFPYmplY3RzLmVuZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgUGFzdGVib2Fy
ZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+ZmlsbFNlbGVjdGlvbkRhdGEoc2Vs
ZWN0aW9uRGF0YSwgaW5mbywgaXRlcmF0b3ItPnNlY29uZC5nZXQoKSk7CisgICAgUGFzdGVib2Fy
ZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+ZmlsbFNlbGVjdGlvbkRhdGEoc2Vs
ZWN0aW9uRGF0YSwgaW5mbywgaXRlcmF0b3ItPnZhbHVlLmdldCgpKTsKIH0KIAogc3RydWN0IEhh
bmRsZURyYWdMYXRlckRhdGEgewpAQCAtMTE2LDcgKzExNiw3IEBAIHZvaWQgR3RrRHJhZ0FuZERy
b3BIZWxwZXI6OmhhbmRsZURyYWdMZWF2ZShHZGtEcmFnQ29udGV4dCogZ2RrQ29udGV4dCwgRHJh
Z0V4aXRlCiAgICAgLy8gdGhlIGRyYWctZHJvcCBzaWduYWwuIFdlIHdhbnQgdGhlIGFjdGlvbnMg
Zm9yIGRyYWctbGVhdmUgdG8gaGFwcGVuIGFmdGVyCiAgICAgLy8gdGhvc2UgZm9yIGRyYWctZHJv
cCwgc28gc2NoZWR1bGUgdGhlbSB0byBoYXBwZW4gYXN5bmNocm9ub3VzbHkgaGVyZS4KICAgICBI
YW5kbGVEcmFnTGF0ZXJEYXRhKiBkYXRhID0gbmV3IEhhbmRsZURyYWdMYXRlckRhdGE7Ci0gICAg
ZGF0YS0+Y29udGV4dCA9IGl0ZXJhdG9yLT5zZWNvbmQ7CisgICAgZGF0YS0+Y29udGV4dCA9IGl0
ZXJhdG9yLT52YWx1ZTsKICAgICBkYXRhLT5jb250ZXh0LT5leGl0ZWRDYWxsYmFjayA9IGV4aXRl
ZENhbGxiYWNrOwogICAgIGRhdGEtPmdsdWUgPSB0aGlzOwogICAgIGdfdGltZW91dF9hZGQoMCwg
cmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oaGFuZGxlRHJhZ0xlYXZlTGF0ZXJDYWxsYmFj
ayksIGRhdGEpOwpAQCAtMTQwLDcgKzE0MCw3IEBAIFBhc3NPd25QdHI8RHJhZ0RhdGE+IEd0a0Ry
YWdBbmREcm9wSGVscGVyOjpoYW5kbGVEcmFnTW90aW9uKEdka0RyYWdDb250ZXh0KiBjb250CiAg
ICAgICAgIG1fZHJvcHBpbmdDb250ZXh0cy5zZXQoY29udGV4dCwgZHJvcHBpbmdDb250ZXh0KTsK
ICAgICAgICAgcXVlcnlOZXdEcm9wQ29udGV4dERhdGEoZHJvcHBpbmdDb250ZXh0LCBtX3dpZGdl
dCwgdGltZSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZHJvcHBpbmdDb250ZXh0ID0gaXRlcmF0
b3ItPnNlY29uZDsKKyAgICAgICAgZHJvcHBpbmdDb250ZXh0ID0gaXRlcmF0b3ItPnZhbHVlOwog
ICAgICAgICBkcm9wcGluZ0NvbnRleHQtPmxhc3RNb3Rpb25Qb3NpdGlvbiA9IHBvc2l0aW9uOwog
ICAgIH0KIApAQCAtMTYyLDcgKzE2Miw3IEBAIFBhc3NPd25QdHI8RHJhZ0RhdGE+IEd0a0RyYWdB
bmREcm9wSGVscGVyOjpoYW5kbGVEcmFnRGF0YVJlY2VpdmVkKEdka0RyYWdDb250ZXh0CiAgICAg
aWYgKGl0ZXJhdG9yID09IG1fZHJvcHBpbmdDb250ZXh0cy5lbmQoKSkKICAgICAgICAgcmV0dXJu
IGFkb3B0UHRyKHN0YXRpY19jYXN0PERyYWdEYXRhKj4oMCkpOwogCi0gICAgRHJvcHBpbmdDb250
ZXh0KiBkcm9wcGluZ0NvbnRleHQgPSBpdGVyYXRvci0+c2Vjb25kOworICAgIERyb3BwaW5nQ29u
dGV4dCogZHJvcHBpbmdDb250ZXh0ID0gaXRlcmF0b3ItPnZhbHVlOwogICAgIGRyb3BwaW5nQ29u
dGV4dC0+cGVuZGluZ0RhdGFSZXF1ZXN0cy0tOwogICAgIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1
bHRQYXN0ZWJvYXJkSGVscGVyKCktPmZpbGxEYXRhT2JqZWN0RnJvbURyb3BEYXRhKHNlbGVjdGlv
bkRhdGEsIGluZm8sIGRyb3BwaW5nQ29udGV4dC0+ZGF0YU9iamVjdC5nZXQoKSk7CiAKQEAgLTE4
NSw3ICsxODUsNyBAQCBQYXNzT3duUHRyPERyYWdEYXRhPiBHdGtEcmFnQW5kRHJvcEhlbHBlcjo6
aGFuZGxlRHJhZ0Ryb3AoR2RrRHJhZ0NvbnRleHQqIGNvbnRleAogICAgIGlmIChpdGVyYXRvciA9
PSBtX2Ryb3BwaW5nQ29udGV4dHMuZW5kKCkpCiAgICAgICAgIHJldHVybiBhZG9wdFB0cihzdGF0
aWNfY2FzdDxEcmFnRGF0YSo+KDApKTsKIAotICAgIERyb3BwaW5nQ29udGV4dCogZHJvcHBpbmdD
b250ZXh0ID0gaXRlcmF0b3ItPnNlY29uZDsKKyAgICBEcm9wcGluZ0NvbnRleHQqIGRyb3BwaW5n
Q29udGV4dCA9IGl0ZXJhdG9yLT52YWx1ZTsKICAgICBkcm9wcGluZ0NvbnRleHQtPmRyb3BIYXBw
ZW5lZCA9IHRydWU7CiAKICAgICByZXR1cm4gYWRvcHRQdHIobmV3IERyYWdEYXRhKGRyb3BwaW5n
Q29udGV4dC0+ZGF0YU9iamVjdC5nZXQoKSwgcG9zaXRpb24sIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrMy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGszLmNwcAppbmRleCA3NzQ5MzkxNTE3MTNkZjAx
MTM0ZDZjZWE0ZWQ5ZDcwNGI0ZGNmYzBiLi4wYTgzODI3YzdmZWJjYmU0MDU0OGZhZDU2MmI1NDEx
NzFlYzE2OWY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVy
VGhlbWVHdGszLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhl
bWVHdGszLmNwcApAQCAtNTYsNyArNTYsNyBAQCBzdGF0aWMgdm9pZCBndGtTdHlsZUNoYW5nZWRD
YWxsYmFjayhHT2JqZWN0KiwgR1BhcmFtU3BlYyopCiB7CiAgICAgU3R5bGVDb250ZXh0TWFwOjpj
b25zdF9pdGVyYXRvciBlbmQgPSBzdHlsZUNvbnRleHRNYXAoKS5lbmQoKTsKICAgICBmb3IgKFN0
eWxlQ29udGV4dE1hcDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHN0eWxlQ29udGV4dE1hcCgpLmJl
Z2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCi0gICAgICAgIGd0a19zdHlsZV9jb250ZXh0X2lu
dmFsaWRhdGUoaXRlci0+c2Vjb25kLmdldCgpKTsKKyAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRf
aW52YWxpZGF0ZShpdGVyLT52YWx1ZS5nZXQoKSk7CiAKICAgICBQYWdlOjpzY2hlZHVsZUZvcmNl
ZFN0eWxlUmVjYWxjRm9yQWxsUGFnZXMoKTsKIH0KQEAgLTc5LDcgKzc5LDcgQEAgc3RhdGljIEd0
a1N0eWxlQ29udGV4dCogZ2V0U3R5bGVDb250ZXh0KEdUeXBlIHdpZGdldFR5cGUpCiB7CiAgICAg
U3R5bGVDb250ZXh0TWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gc3R5bGVDb250ZXh0TWFwKCkuYWRk
KHdpZGdldFR5cGUsIDApOwogICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJl
dHVybiByZXN1bHQuaXRlcmF0b3ItPnNlY29uZC5nZXQoKTsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7CiAKICAgICBHdGtXaWRnZXRQYXRoKiBwYXRoID0gZ3Rr
X3dpZGdldF9wYXRoX25ldygpOwogICAgIGd0a193aWRnZXRfcGF0aF9hcHBlbmRfdHlwZShwYXRo
LCB3aWRnZXRUeXBlKTsKQEAgLTExMSw3ICsxMTEsNyBAQCBzdGF0aWMgR3RrU3R5bGVDb250ZXh0
KiBnZXRTdHlsZUNvbnRleHQoR1R5cGUgd2lkZ2V0VHlwZSkKICAgICBndGtfc3R5bGVfY29udGV4
dF9zZXRfcGF0aChjb250ZXh0LmdldCgpLCBwYXRoKTsKICAgICBndGtfd2lkZ2V0X3BhdGhfZnJl
ZShwYXRoKTsKIAotICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gY29udGV4dDsKKyAgICBy
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gY29udGV4dDsKICAgICByZXR1cm4gY29udGV4dC5nZXQo
KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbGJh
clRoZW1lTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbGJhclRoZW1l
TWFjLm1tCmluZGV4IDk2YWExMmEyNjkxNDdmNzY4ZWUzZjY0NTFkZmViNTI3M2Y5NGVjNDkuLmZk
OWI3MjRhNGQ5YzRiNDcxMTRlZGY3ZGJiYzg4ZmM1ODUyZjE2ZDQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxiYXJUaGVtZU1hYy5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMubW0KQEAgLTg2LDggKzg2LDgg
QEAgc3RhdGljIFNjcm9sbGJhclBhaW50ZXJNYXAqIHNjcm9sbGJhck1hcCgpCiAgICAgICAgIHJl
dHVybjsKICAgICBTY3JvbGxiYXJQYWludGVyTWFwOjppdGVyYXRvciBlbmQgPSBzY3JvbGxiYXJN
YXAoKS0+ZW5kKCk7CiAgICAgZm9yIChTY3JvbGxiYXJQYWludGVyTWFwOjppdGVyYXRvciBpdCA9
IHNjcm9sbGJhck1hcCgpLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaXQt
PmZpcnN0LT5zdHlsZUNoYW5nZWQoKTsKLSAgICAgICAgaXQtPmZpcnN0LT5pbnZhbGlkYXRlKCk7
CisgICAgICAgIGl0LT5rZXktPnN0eWxlQ2hhbmdlZCgpOworICAgICAgICBpdC0+a2V5LT5pbnZh
bGlkYXRlKCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL0NyZWRlbnRpYWxTdG9yYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvQ3JlZGVudGlhbFN0b3JhZ2UuY3BwCmluZGV4IGY2MjRkNGZjYjI5MmNjNDBjNWI2
OWVlZGYzZTVjODc1MTUyZjAxZjkuLjhiNWFjNDc4YjIxMzUwNmNkOWNlYWNhOWJhNTg1MWJjZDI5
M2E1YzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVu
dGlhbFN0b3JhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ3Jl
ZGVudGlhbFN0b3JhZ2UuY3BwCkBAIC0xNDcsNyArMTQ3LDcgQEAgYm9vbCBDcmVkZW50aWFsU3Rv
cmFnZTo6c2V0KGNvbnN0IENyZWRlbnRpYWwmIGNyZWRlbnRpYWwsIGNvbnN0IEtVUkwmIHVybCkK
ICAgICBpZiAoaXRlciA9PSBwYXRoVG9EZWZhdWx0UHJvdGVjdGlvblNwYWNlTWFwKCkuZW5kKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBBU1NFUlQob3JpZ2luc1dpdGhDcmVkZW50aWFs
cygpLmNvbnRhaW5zKG9yaWdpblN0cmluZ0Zyb21VUkwodXJsKSkpOwotICAgIHByb3RlY3Rpb25T
cGFjZVRvQ3JlZGVudGlhbE1hcCgpLnNldChpdGVyLT5zZWNvbmQsIGNyZWRlbnRpYWwpOworICAg
IHByb3RlY3Rpb25TcGFjZVRvQ3JlZGVudGlhbE1hcCgpLnNldChpdGVyLT52YWx1ZSwgY3JlZGVu
dGlhbCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE1Niw3ICsxNTYsNyBAQCBDcmVkZW50
aWFsIENyZWRlbnRpYWxTdG9yYWdlOjpnZXQoY29uc3QgS1VSTCYgdXJsKQogICAgIFBhdGhUb0Rl
ZmF1bHRQcm90ZWN0aW9uU3BhY2VNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBmaW5kRGVmYXVsdFByb3Rl
Y3Rpb25TcGFjZUZvclVSTCh1cmwpOwogICAgIGlmIChpdGVyID09IHBhdGhUb0RlZmF1bHRQcm90
ZWN0aW9uU3BhY2VNYXAoKS5lbmQoKSkKICAgICAgICAgcmV0dXJuIENyZWRlbnRpYWwoKTsKLSAg
ICByZXR1cm4gcHJvdGVjdGlvblNwYWNlVG9DcmVkZW50aWFsTWFwKCkuZ2V0KGl0ZXItPnNlY29u
ZCk7CisgICAgcmV0dXJuIHByb3RlY3Rpb25TcGFjZVRvQ3JlZGVudGlhbE1hcCgpLmdldChpdGVy
LT52YWx1ZSk7CiB9CiAKIHZvaWQgQ3JlZGVudGlhbFN0b3JhZ2U6OnNldFByaXZhdGVNb2RlKGJv
b2wgbW9kZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRU
UEhlYWRlck1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBIZWFk
ZXJNYXAuY3BwCmluZGV4IDUwMDkxZTE5ZDNhZjU2ZmY0YThkZjE3NWJmODk3ODcwMDc2MTQyODAu
LmRlZmUxYWU4NGJmMGFkZjA3Nzk0OTU1YjExYTVkYzczZWEwMjNlMjYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUEhlYWRlck1hcC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQSGVhZGVyTWFwLmNwcApAQCAtNTIsNyAr
NTIsNyBAQCBQYXNzT3duUHRyPENyb3NzVGhyZWFkSFRUUEhlYWRlck1hcERhdGE+IEhUVFBIZWFk
ZXJNYXA6OmNvcHlEYXRhKCkgY29uc3QKIAogICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJh
dG9yIGVuZF9pdCA9IGVuZCgpOwogICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBiZWdpbigpOyBpdCAhPSBlbmRfaXQ7ICsraXQpIHsKLSAgICAgICAgZGF0YS0+YXBw
ZW5kKG1ha2VfcGFpcihpdC0+Zmlyc3Quc3RyaW5nKCkuaXNvbGF0ZWRDb3B5KCksIGl0LT5zZWNv
bmQuaXNvbGF0ZWRDb3B5KCkpKTsKKyAgICAgICAgZGF0YS0+YXBwZW5kKG1ha2VfcGFpcihpdC0+
a2V5LnN0cmluZygpLmlzb2xhdGVkQ29weSgpLCBpdC0+dmFsdWUuaXNvbGF0ZWRDb3B5KCkpKTsK
ICAgICB9CiAgICAgcmV0dXJuIGRhdGEucmVsZWFzZSgpOwogfQpAQCAtMTAwLDcgKzEwMCw3IEBA
IFN0cmluZyBIVFRQSGVhZGVyTWFwOjpnZXQoY29uc3QgY2hhciogbmFtZSkgY29uc3QKICAgICBj
b25zdF9pdGVyYXRvciBpID0gZmluZDxjb25zdCBjaGFyKiwgQ2FzZUZvbGRpbmdDU3RyaW5nVHJh
bnNsYXRvcj4obmFtZSk7CiAgICAgaWYgKGkgPT0gZW5kKCkpCiAgICAgICAgIHJldHVybiBTdHJp
bmcoKTsKLSAgICByZXR1cm4gaS0+c2Vjb25kOworICAgIHJldHVybiBpLT52YWx1ZTsKIH0KICAg
ICAKIGJvb2wgSFRUUEhlYWRlck1hcDo6Y29udGFpbnMoY29uc3QgY2hhciogbmFtZSkgY29uc3QK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvTUlNRUhlYWRlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL01JTUVIZWFkZXIuY3BwCmluZGV4
IDVkNmI4NThmNDZlNDM4M2ZjYjJmZWE2Mjg1OGFmNzUzMmQ0M2E1YWYuLmY0ZTNlYmY2NzRkZTZi
ZDFkMjRhOTU5MGE0ODE4YmViNmZkOGRlNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvTUlNRUhlYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9NSU1FSGVhZGVyLmNwcApAQCAtODYsNyArODYsNyBAQCBQYXNzUmVmUHRyPE1J
TUVIZWFkZXI+IE1JTUVIZWFkZXI6OnBhcnNlSGVhZGVyKFNoYXJlZEJ1ZmZlckNodW5rUmVhZGVy
KiBidWZmZXIpCiAgICAgS2V5VmFsdWVNYXA6Oml0ZXJhdG9yIG1pbWVQYXJhbWV0ZXJzSXRlcmF0
b3IgPSBrZXlWYWx1ZVBhaXJzLmZpbmQoImNvbnRlbnQtdHlwZSIpOwogICAgIGlmIChtaW1lUGFy
YW1ldGVyc0l0ZXJhdG9yICE9IGtleVZhbHVlUGFpcnMuZW5kKCkpIHsKICAgICAgICAgLy8gRklY
TUU6IG1ha2UgQ29udGVudFR5cGVQYXJzZXIgbW9yZSBmbGV4aWJsZSBzbyB3ZSBkb24ndCBoYXZl
IHRvIHN5bnRoZXNpemUgdGhlICJDb250ZW50LVR5cGU6Ii4KLSAgICAgICAgQ29udGVudFR5cGVQ
YXJzZXIgY29udGVudFR5cGVQYXJzZXIobWFrZVN0cmluZygiQ29udGVudC1UeXBlOiIsIG1pbWVQ
YXJhbWV0ZXJzSXRlcmF0b3ItPnNlY29uZCkpOworICAgICAgICBDb250ZW50VHlwZVBhcnNlciBj
b250ZW50VHlwZVBhcnNlcihtYWtlU3RyaW5nKCJDb250ZW50LVR5cGU6IiwgbWltZVBhcmFtZXRl
cnNJdGVyYXRvci0+dmFsdWUpKTsKICAgICAgICAgbWltZUhlYWRlci0+bV9jb250ZW50VHlwZSA9
IGNvbnRlbnRUeXBlUGFyc2VyLm1pbWVUeXBlKCk7CiAgICAgICAgIGlmICghbWltZUhlYWRlci0+
aXNNdWx0aXBhcnQoKSkKICAgICAgICAgICAgIG1pbWVIZWFkZXItPm1fY2hhcnNldCA9IGNvbnRl
bnRUeXBlUGFyc2VyLmNoYXJzZXQoKS5zdHJpcFdoaXRlU3BhY2UoKTsKQEAgLTEwNSwxMSArMTA1
LDExIEBAIFBhc3NSZWZQdHI8TUlNRUhlYWRlcj4gTUlNRUhlYWRlcjo6cGFyc2VIZWFkZXIoU2hh
cmVkQnVmZmVyQ2h1bmtSZWFkZXIqIGJ1ZmZlcikKIAogICAgIG1pbWVQYXJhbWV0ZXJzSXRlcmF0
b3IgPSBrZXlWYWx1ZVBhaXJzLmZpbmQoImNvbnRlbnQtdHJhbnNmZXItZW5jb2RpbmciKTsKICAg
ICBpZiAobWltZVBhcmFtZXRlcnNJdGVyYXRvciAhPSBrZXlWYWx1ZVBhaXJzLmVuZCgpKQotICAg
ICAgICBtaW1lSGVhZGVyLT5tX2NvbnRlbnRUcmFuc2ZlckVuY29kaW5nID0gcGFyc2VDb250ZW50
VHJhbnNmZXJFbmNvZGluZyhtaW1lUGFyYW1ldGVyc0l0ZXJhdG9yLT5zZWNvbmQpOworICAgICAg
ICBtaW1lSGVhZGVyLT5tX2NvbnRlbnRUcmFuc2ZlckVuY29kaW5nID0gcGFyc2VDb250ZW50VHJh
bnNmZXJFbmNvZGluZyhtaW1lUGFyYW1ldGVyc0l0ZXJhdG9yLT52YWx1ZSk7CiAKICAgICBtaW1l
UGFyYW1ldGVyc0l0ZXJhdG9yID0ga2V5VmFsdWVQYWlycy5maW5kKCJjb250ZW50LWxvY2F0aW9u
Iik7CiAgICAgaWYgKG1pbWVQYXJhbWV0ZXJzSXRlcmF0b3IgIT0ga2V5VmFsdWVQYWlycy5lbmQo
KSkKLSAgICAgICAgbWltZUhlYWRlci0+bV9jb250ZW50TG9jYXRpb24gPSBtaW1lUGFyYW1ldGVy
c0l0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgIG1pbWVIZWFkZXItPm1fY29udGVudExvY2F0aW9u
ID0gbWltZVBhcmFtZXRlcnNJdGVyYXRvci0+dmFsdWU7CiAKICAgICByZXR1cm4gbWltZUhlYWRl
ci5yZWxlYXNlKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL1Jlc291cmNlSGFuZGxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
UmVzb3VyY2VIYW5kbGUuY3BwCmluZGV4IDdkZGM0N2U0ZWE3OTlhNDZkZWU2ZjMyY2ZkMDc4ZWY3
NTE1NGYxZWUuLjZkMTJmOWQ4OWIwMjQ3NzQ2YTU3ZTFiYmNhZmIyYzIxN2Q1OTEwMzUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3Bw
CkBAIC03MSw3ICs3MSw3IEBAIFBhc3NSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IFJlc291cmNlSGFu
ZGxlOjpjcmVhdGUoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvCiAgICAgQnVpbHRpblJl
c291cmNlSGFuZGxlQ29uc3RydWN0b3JNYXA6Oml0ZXJhdG9yIHByb3RvY29sTWFwSXRlbSA9IGJ1
aWx0aW5SZXNvdXJjZUhhbmRsZUNvbnN0cnVjdG9yTWFwKCkuZmluZChyZXF1ZXN0LnVybCgpLnBy
b3RvY29sKCkpOwogCiAgICAgaWYgKHByb3RvY29sTWFwSXRlbSAhPSBidWlsdGluUmVzb3VyY2VI
YW5kbGVDb25zdHJ1Y3Rvck1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcHJvdG9jb2xNYXBJ
dGVtLT5zZWNvbmQocmVxdWVzdCwgY2xpZW50KTsKKyAgICAgICAgcmV0dXJuIHByb3RvY29sTWFw
SXRlbS0+dmFsdWUocmVxdWVzdCwgY2xpZW50KTsKIAogICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRs
ZT4gbmV3SGFuZGxlKGFkb3B0UmVmKG5ldyBSZXNvdXJjZUhhbmRsZShyZXF1ZXN0LCBjbGllbnQs
IGRlZmVyc0xvYWRpbmcsIHNob3VsZENvbnRlbnRTbmlmZikpKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHAKaW5k
ZXggNjRlYmMxOGM4YTc0NTBkZjY0YTYyMGE2NmQzZTM2ODMxN2UxYzk2OS4uZjZjMGUxM2U3OWNm
MTQ3OWY4ZmViYTY1N2MwYWZiZDI1NjY3ZGJmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwCkBAIC0zNzQsNyAr
Mzc0LDcgQEAgdm9pZCBSZXNvdXJjZVJlcXVlc3RCYXNlOjphZGRIVFRQSGVhZGVyRmllbGQoY29u
c3QgQXRvbWljU3RyaW5nJiBuYW1lLCBjb25zdCBTdHIKICAgICB1cGRhdGVSZXNvdXJjZVJlcXVl
c3QoKTsKICAgICBIVFRQSGVhZGVyTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9odHRwSGVhZGVy
RmllbGRzLmFkZChuYW1lLCB2YWx1ZSk7CiAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAg
ICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgKz0gIiwiICsgdmFsdWU7CisgICAgICAgIHJl
c3VsdC5pdGVyYXRvci0+dmFsdWUgKz0gIiwiICsgdmFsdWU7CiAKICAgICBpZiAodXJsKCkucHJv
dG9jb2xJc0luSFRUUEZhbWlseSgpKQogICAgICAgICBtX3BsYXRmb3JtUmVxdWVzdFVwZGF0ZWQg
PSBmYWxzZTsKQEAgLTM4NCw3ICszODQsNyBAQCB2b2lkIFJlc291cmNlUmVxdWVzdEJhc2U6OmFk
ZEhUVFBIZWFkZXJGaWVsZHMoY29uc3QgSFRUUEhlYWRlck1hcCYgaGVhZGVyRmllbGRzKQogewog
ICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGhlYWRlckZpZWxkcy5lbmQo
KTsKICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaGVhZGVyRmll
bGRzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgYWRkSFRUUEhlYWRlckZpZWxk
KGl0LT5maXJzdCwgaXQtPnNlY29uZCk7CisgICAgICAgIGFkZEhUVFBIZWFkZXJGaWVsZChpdC0+
a2V5LCBpdC0+dmFsdWUpOwogfQogCiBib29sIGVxdWFsSWdub3JpbmdIZWFkZXJGaWVsZHMoY29u
c3QgUmVzb3VyY2VSZXF1ZXN0QmFzZSYgYSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0QmFzZSYgYikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9S
ZXNvdXJjZVJlcXVlc3RCbGFja0JlcnJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJjZVJlcXVlc3RCbGFja0JlcnJ5LmNwcAppbmRleCA5ZjZm
ZmFiYTU1NmQyMzAzZjZmYTlkMWFiOTRiYzZlYWM4ZGNhYWM2Li4wYzgxMjczOGQ1YzU1ZDg3ZDI1
NzViM2Y3ODZiMDA0ODZiOTE4NTI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2JsYWNrYmVycnkvUmVzb3VyY2VSZXF1ZXN0QmxhY2tCZXJyeS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlUmVxdWVz
dEJsYWNrQmVycnkuY3BwCkBAIC0xNDAsNyArMTQwLDcgQEAgUmVzb3VyY2VSZXF1ZXN0OjpUYXJn
ZXRUeXBlIFJlc291cmNlUmVxdWVzdDo6dGFyZ2V0VHlwZUZyb21NaW1lVHlwZShjb25zdCBTdHJp
bmcKICAgICBpZiAoaXRlciA9PSBtYXAuZW5kKCkpCiAgICAgICAgIHJldHVybiBSZXNvdXJjZVJl
cXVlc3Q6OlRhcmdldElzVW5zcGVjaWZpZWQ7CiAKLSAgICByZXR1cm4gaXRlci0+c2Vjb25kOwor
ICAgIHJldHVybiBpdGVyLT52YWx1ZTsKIH0KIAogdm9pZCBSZXNvdXJjZVJlcXVlc3Q6OmluaXRp
YWxpemVQbGF0Zm9ybVJlcXVlc3QoTmV0d29ya1JlcXVlc3QmIHBsYXRmb3JtUmVxdWVzdCwgYm9v
bCBjb29raWVzRW5hYmxlZCwgYm9vbCBpc0luaXRpYWwsIGJvb2wgaXNSZWRpcmVjdCkgY29uc3QK
QEAgLTE5OCw4ICsxOTgsOCBAQCB2b2lkIFJlc291cmNlUmVxdWVzdDo6aW5pdGlhbGl6ZVBsYXRm
b3JtUmVxdWVzdChOZXR3b3JrUmVxdWVzdCYgcGxhdGZvcm1SZXF1ZXN0LAogICAgICAgICBib29s
IGNvb2tpZUhlYWRlck1heUJlRGlydHkgPSBpc1JlZGlyZWN0IHx8IGNhY2hlUG9saWN5KCkgPT0g
V2ViQ29yZTo6UmVsb2FkSWdub3JpbmdDYWNoZURhdGEgfHwgY2FjaGVQb2xpY3koKSA9PSBXZWJD
b3JlOjpSZXR1cm5DYWNoZURhdGFFbHNlTG9hZDsKIAogICAgICAgICBmb3IgKEhUVFBIZWFkZXJN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaHR0cEhlYWRlckZpZWxkcygpLmJlZ2luKCk7IGl0ICE9
IGh0dHBIZWFkZXJGaWVsZHMoKS5lbmQoKTsgKytpdCkgewotICAgICAgICAgICAgU3RyaW5nIGtl
eSA9IGl0LT5maXJzdDsKLSAgICAgICAgICAgIFN0cmluZyB2YWx1ZSA9IGl0LT5zZWNvbmQ7Cisg
ICAgICAgICAgICBTdHJpbmcga2V5ID0gaXQtPmtleTsKKyAgICAgICAgICAgIFN0cmluZyB2YWx1
ZSA9IGl0LT52YWx1ZTsKICAgICAgICAgICAgIGlmICgha2V5LmlzRW1wdHkoKSkgewogICAgICAg
ICAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShrZXksICJDb29raWUiKSkgewogICAgICAg
ICAgICAgICAgICAgICAvLyBXZSB3b24ndCB1c2UgdGhlIG9sZCBjb29raWVzIG9mIHJlc291cmNl
UmVxdWVzdCBmb3IgbmV3IGxvY2F0aW9uIGJlY2F1c2UgdGhlc2UgY29va2llcyBtYXkgYmUgY2hh
bmdlZCBieSByZWRpcmVjdGlvbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRk5ldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZOZXQuY3BwCmluZGV4IGY2ZDFmMzgyMTI2
MmYxOTUwNDE1NTlhMjU2YzAyYmQ2YmQ3ODI5ZTUuLjAxZThiOGFlNWMwZDFjNmE2YThmMDMzMDg1
ZTkwZjAxMGJjMWY3YzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY2YvUmVzb3VyY2VIYW5kbGVDRk5ldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNwcApAQCAtNDI4LDcgKzQyOCw3IEBA
IHN0YXRpYyBDRlVSTFJlcXVlc3RSZWYgbWFrZUZpbmFsUmVxdWVzdChjb25zdCBSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QsIGJvb2wgc2hvCiAgICAgICAgIGlmICghc3NsUHJvcHMpCiAgICAgICAg
ICAgICBzc2xQcm9wcy5hZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZU11dGFibGUoa0NGQWxsb2Nh
dG9yRGVmYXVsdCwgMCwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURp
Y3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOwogI2lmIFBMQVRGT1JNKFdJTikKLSAgICAgICAgd2tT
ZXRDbGllbnRDZXJ0aWZpY2F0ZUluU1NMUHJvcGVydGllcyhzc2xQcm9wcy5nZXQoKSwgKGNsaWVu
dENlcnQtPnNlY29uZCkuZ2V0KCkpOworICAgICAgICB3a1NldENsaWVudENlcnRpZmljYXRlSW5T
U0xQcm9wZXJ0aWVzKHNzbFByb3BzLmdldCgpLCAoY2xpZW50Q2VydC0+dmFsdWUpLmdldCgpKTsK
ICNlbmRpZgogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jZi9SZXNvdXJjZVJlcXVlc3RDRk5ldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2NmL1Jlc291cmNlUmVxdWVzdENGTmV0LmNwcAppbmRleCA1N2E2ZmIyYzhhNGMw
OGY3OWZiZDRiOWJjNTViODVhOTM0MjY3YTM3Li44Y2ZmODdjYTBkNThlYTJlNTIzZjM3MzBkNmI0
YTc3MzBiMDZiZTRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2NmL1Jlc291cmNlUmVxdWVzdENGTmV0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2NmL1Jlc291cmNlUmVxdWVzdENGTmV0LmNwcApAQCAtMTIwLDggKzEyMCw4IEBA
IHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRIZWFkZXJGaWVsZHMoQ0ZNdXRhYmxlVVJMUmVxdWVzdFJl
ZiByZXF1ZXN0LCBjb25zdCBIVFRQSGVhCiAKICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVy
YXRvciBlbmQgPSByZXF1ZXN0SGVhZGVycy5lbmQoKTsKICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcmVxdWVzdEhlYWRlcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7Ci0gICAgICAgIENGU3RyaW5nUmVmIGtleSA9IGl0LT5maXJzdC5jcmVhdGVDRlN0cmlu
ZygpOwotICAgICAgICBDRlN0cmluZ1JlZiB2YWx1ZSA9IGl0LT5zZWNvbmQuY3JlYXRlQ0ZTdHJp
bmcoKTsKKyAgICAgICAgQ0ZTdHJpbmdSZWYga2V5ID0gaXQtPmtleS5jcmVhdGVDRlN0cmluZygp
OworICAgICAgICBDRlN0cmluZ1JlZiB2YWx1ZSA9IGl0LT52YWx1ZS5jcmVhdGVDRlN0cmluZygp
OwogICAgICAgICBDRlVSTFJlcXVlc3RTZXRIVFRQSGVhZGVyRmllbGRWYWx1ZShyZXF1ZXN0LCBr
ZXksIHZhbHVlKTsKICAgICAgICAgQ0ZSZWxlYXNlKGtleSk7CiAgICAgICAgIENGUmVsZWFzZSh2
YWx1ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
UmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY3VybC9SZXNvdXJjZUhhbmRsZU1hbmFnZXIuY3BwCmluZGV4IGFmMDc1ZWY5ZTMyMTg4ZTc3
MTQ5N2ViZjdjNzRkYzFhYTE1ZTIxN2EuLjY1YmNjMTBhZDNkMjAwNWQ2ODlkNzNlOGRkNjc5ODhi
OWM1Y2I1ZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3Vy
bC9SZXNvdXJjZUhhbmRsZU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1hbmFnZXIuY3BwCkBAIC03MDMsOCArNzAzLDgg
QEAgdm9pZCBSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OmluaXRpYWxpemVIYW5kbGUoUmVzb3VyY2VI
YW5kbGUqIGpvYikKICAgICAgICAgSFRUUEhlYWRlck1hcCBjdXN0b21IZWFkZXJzID0gam9iLT5m
aXJzdFJlcXVlc3QoKS5odHRwSGVhZGVyRmllbGRzKCk7CiAgICAgICAgIEhUVFBIZWFkZXJNYXA6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGN1c3RvbUhlYWRlcnMuZW5kKCk7CiAgICAgICAgIGZvciAo
SFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjdXN0b21IZWFkZXJzLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgU3RyaW5nIGtleSA9IGl0LT5maXJzdDsK
LSAgICAgICAgICAgIFN0cmluZyB2YWx1ZSA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICBTdHJp
bmcga2V5ID0gaXQtPmtleTsKKyAgICAgICAgICAgIFN0cmluZyB2YWx1ZSA9IGl0LT52YWx1ZTsK
ICAgICAgICAgICAgIFN0cmluZyBoZWFkZXJTdHJpbmcoa2V5KTsKICAgICAgICAgICAgIGhlYWRl
clN0cmluZy5hcHBlbmQoIjogIik7CiAgICAgICAgICAgICBoZWFkZXJTdHJpbmcuYXBwZW5kKHZh
bHVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jl
c291cmNlUmVxdWVzdE1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFj
L1Jlc291cmNlUmVxdWVzdE1hYy5tbQppbmRleCA5NmM0OTdkNTAzYjU0N2UzYjAxYTlhMjUyYTU4
ZmMyZWVmM2Y5NDQ0Li45MzIxNmNiNTVlODU3NzMxMzZmM2U4YzNhMDdjZTZmYjU1NmUwNmQyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZVJl
cXVlc3RNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvUmVz
b3VyY2VSZXF1ZXN0TWFjLm1tCkBAIC0xNTUsNyArMTU1LDcgQEAgdm9pZCBSZXNvdXJjZVJlcXVl
c3Q6OmRvVXBkYXRlUGxhdGZvcm1SZXF1ZXN0KCkKICAgICAgICAgW25zUmVxdWVzdCBzZXRWYWx1
ZTpuaWwgZm9ySFRUUEhlYWRlckZpZWxkOltvbGRIZWFkZXJGaWVsZE5hbWVzIG9iamVjdEF0SW5k
ZXg6aSAtIDFdXTsKICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBodHRw
SGVhZGVyRmllbGRzKCkuZW5kKCk7CiAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IGh0dHBIZWFkZXJGaWVsZHMoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0g
ICAgICAgIFtuc1JlcXVlc3Qgc2V0VmFsdWU6aXQtPnNlY29uZCBmb3JIVFRQSGVhZGVyRmllbGQ6
aXQtPmZpcnN0XTsKKyAgICAgICAgW25zUmVxdWVzdCBzZXRWYWx1ZTppdC0+dmFsdWUgZm9ySFRU
UEhlYWRlckZpZWxkOml0LT5rZXldOwogCiAgICAgLy8gVGhlIGJlbG93IGNoZWNrIGNhbiBiZSBy
ZW1vdmVkIG9uY2Ugd2UgcmVxdWlyZSBhIHZlcnNpb24gb2YgRm91bmRhdGlvbiB3aXRoIC1bTlNN
dXRhYmxlVVJMUmVxdWVzdCBzZXRDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJy
YXk6XSBtZXRob2QuCiAgICAgc3RhdGljIGJvb2wgc3VwcG9ydHNDb250ZW50RGlzcG9zaXRpb25F
bmNvZGluZ0ZhbGxiYWNrQXJyYXkgPSBbTlNNdXRhYmxlVVJMUmVxdWVzdCBpbnN0YW5jZXNSZXNw
b25kVG9TZWxlY3RvcjpAc2VsZWN0b3Ioc2V0Q29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxs
YmFja0FycmF5OildOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9xdC9SZXNvdXJjZVJlcXVlc3RRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL3F0L1Jlc291cmNlUmVxdWVzdFF0LmNwcAppbmRleCBkYmI3Yjc0ZGQ1OWM0ZjRkMGYyZWNl
Y2ZkYmUwODEzZDI4Yjc0YTNlLi5lODRlNjc3YTVmNzJjNzFlODljNjAwZmQ3NzcwMGJiNjgyMjE0
YzJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3F0L1Jlc291
cmNlUmVxdWVzdFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3F0
L1Jlc291cmNlUmVxdWVzdFF0LmNwcApAQCAtNDksOCArNDksOCBAQCBRTmV0d29ya1JlcXVlc3Qg
UmVzb3VyY2VSZXF1ZXN0Ojp0b05ldHdvcmtSZXF1ZXN0KE5ldHdvcmtpbmdDb250ZXh0ICpjb250
ZXh0KSBjbwogICAgIGNvbnN0IEhUVFBIZWFkZXJNYXAgJmhlYWRlcnMgPSBodHRwSGVhZGVyRmll
bGRzKCk7CiAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGhlYWRl
cnMuYmVnaW4oKSwgZW5kID0gaGVhZGVycy5lbmQoKTsKICAgICAgICAgIGl0ICE9IGVuZDsgKytp
dCkgewotICAgICAgICBRQnl0ZUFycmF5IG5hbWUgPSBRU3RyaW5nKGl0LT5maXJzdCkudG9MYXRp
bjEoKTsKLSAgICAgICAgUUJ5dGVBcnJheSB2YWx1ZSA9IFFTdHJpbmcoaXQtPnNlY29uZCkudG9M
YXRpbjEoKTsKKyAgICAgICAgUUJ5dGVBcnJheSBuYW1lID0gUVN0cmluZyhpdC0+a2V5KS50b0xh
dGluMSgpOworICAgICAgICBRQnl0ZUFycmF5IHZhbHVlID0gUVN0cmluZyhpdC0+dmFsdWUpLnRv
TGF0aW4xKCk7CiAgICAgICAgIC8vIFFOZXR3b3JrUmVxdWVzdDo6c2V0UmF3SGVhZGVyKCkgd291
bGQgcmVtb3ZlIHRoZSBoZWFkZXIgaWYgdGhlIHZhbHVlIGlzIG51bGwKICAgICAgICAgLy8gTWFr
ZSBzdXJlIHRvIHNldCBhbiBlbXB0eSBoZWFkZXIgaW5zdGVhZCBvZiBudWxsIGhlYWRlci4KICAg
ICAgICAgaWYgKCF2YWx1ZS5pc051bGwoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAKaW5kZXggMzBh
MmRlNDU1ZTQyZGJjM2JhYWZhYjM0OWE1NGQwOGM1YjljOWMyNS4uZGMzYjJlMmM1ZmVlMDg0MDY1
OThhNGY5ZjkxZmE3NDZlZTY4NjBmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAKQEAgLTQ0OCw3
ICs0NDgsNyBAQCBzdGF0aWMgdm9pZCBzZW5kUmVxdWVzdENhbGxiYWNrKEdPYmplY3QqIHNvdXJj
ZSwgR0FzeW5jUmVzdWx0KiByZXMsIGdwb2ludGVyIGRhdAogCiAgICAgICAgIGlmIChoYXNVbmln
bm9yZWRUTFNFcnJvcnMoaGFuZGxlLmdldCgpKSkgewogICAgICAgICAgICAgQ2VydGlmaWNhdGVz
TWFwOjppdGVyYXRvciBpdGVyID0gY2xpZW50Q2VydGlmaWNhdGVzKCkuZmluZChoYW5kbGUtPmZp
cnN0UmVxdWVzdCgpLnVybCgpLmhvc3QoKS5sb3dlcigpKTsKLSAgICAgICAgICAgIGlmIChpdGVy
ID09IGNsaWVudENlcnRpZmljYXRlcygpLmVuZCgpIHx8ICFpdGVyLT5zZWNvbmQuY29udGFpbnMo
ZC0+bV9yZXNwb25zZS5zb3VwTWVzc2FnZUNlcnRpZmljYXRlKCkpKSB7CisgICAgICAgICAgICBp
ZiAoaXRlciA9PSBjbGllbnRDZXJ0aWZpY2F0ZXMoKS5lbmQoKSB8fCAhaXRlci0+dmFsdWUuY29u
dGFpbnMoZC0+bV9yZXNwb25zZS5zb3VwTWVzc2FnZUNlcnRpZmljYXRlKCkpKSB7CiAgICAgICAg
ICAgICAgICAgR093blB0cjxjaGFyPiB1cmkoc291cF91cmlfdG9fc3RyaW5nKHNvdXBfcmVxdWVz
dF9nZXRfdXJpKGQtPm1fc291cFJlcXVlc3QuZ2V0KCkpLCBGQUxTRSkpOwogICAgICAgICAgICAg
ICAgIGNsaWVudC0+ZGlkRmFpbChoYW5kbGUuZ2V0KCksIFJlc291cmNlRXJyb3IoZ19xdWFya190
b19zdHJpbmcoU09VUF9IVFRQX0VSUk9SKSwgU09VUF9TVEFUVVNfU1NMX0ZBSUxFRCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVy
aS5nZXQoKSwgdW5hY2NlcHRhYmxlVExTQ2VydGlmaWNhdGUoKSwKQEAgLTgxOSw3ICs4MTksNyBA
QCB2b2lkIFJlc291cmNlSGFuZGxlOjpzZXRIb3N0QWxsb3dzQW55SFRUUFNDZXJ0aWZpY2F0ZShj
b25zdCBTdHJpbmcmIGhvc3QpCiAKIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnNldENsaWVudENlcnRp
ZmljYXRlKGNvbnN0IFN0cmluZyYgaG9zdCwgR1Rsc0NlcnRpZmljYXRlKiBjZXJ0aWZpY2F0ZSkK
IHsKLSAgICBjbGllbnRDZXJ0aWZpY2F0ZXMoKS5hZGQoaG9zdC5sb3dlcigpLCBIb3N0VExTQ2Vy
dGlmaWNhdGVTZXQoKSkuaXRlcmF0b3ItPnNlY29uZC5hZGQoY2VydGlmaWNhdGUpOworICAgIGNs
aWVudENlcnRpZmljYXRlcygpLmFkZChob3N0Lmxvd2VyKCksIEhvc3RUTFNDZXJ0aWZpY2F0ZVNl
dCgpKS5pdGVyYXRvci0+dmFsdWUuYWRkKGNlcnRpZmljYXRlKTsKIH0KIAogdm9pZCBSZXNvdXJj
ZUhhbmRsZTo6c2V0SWdub3JlU1NMRXJyb3JzKGJvb2wgaWdub3JlU1NMRXJyb3JzKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVz
dFNvdXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNl
UmVxdWVzdFNvdXAuY3BwCmluZGV4IGQ3MTI3YjRiNWI4ZTQ1OWE0Y2FlYzU1YTU1MjdiYmNmM2M4
Mzc3ODUuLjU3YWI0ZDY0N2IzYmZmYzI1YmE5MjM3NzhjNzFkNGY0YmVlMTVjYjkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3RT
b3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3Vy
Y2VSZXF1ZXN0U291cC5jcHAKQEAgLTQzLDcgKzQzLDcgQEAgdm9pZCBSZXNvdXJjZVJlcXVlc3Q6
OnVwZGF0ZVNvdXBNZXNzYWdlKFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSkgY29uc3QKICAgICBp
ZiAoIWhlYWRlcnMuaXNFbXB0eSgpKSB7CiAgICAgICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IGhlYWRlcnMuZW5kKCk7CiAgICAgICAgIGZvciAoSFRUUEhlYWRlck1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBoZWFkZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAg
ICAgICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChzb3VwSGVhZGVycywgaXQtPmZp
cnN0LnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGl0LT5zZWNvbmQudXRmOCgpLmRhdGEoKSk7Cisg
ICAgICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQoc291cEhlYWRlcnMsIGl0LT5r
ZXkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgaXQtPnZhbHVlLnV0ZjgoKS5kYXRhKCkpOwogICAg
IH0KIAogICAgIFN0cmluZyBmaXJzdFBhcnR5U3RyaW5nID0gZmlyc3RQYXJ0eUZvckNvb2tpZXMo
KS5zdHJpbmcoKTsKQEAgLTY2LDcgKzY2LDcgQEAgU291cE1lc3NhZ2UqIFJlc291cmNlUmVxdWVz
dDo6dG9Tb3VwTWVzc2FnZSgpIGNvbnN0CiAgICAgaWYgKCFoZWFkZXJzLmlzRW1wdHkoKSkgewog
ICAgICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBoZWFkZXJzLmVuZCgp
OwogICAgICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaGVhZGVy
cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBzb3VwX21lc3NhZ2VfaGVh
ZGVyc19hcHBlbmQoc291cEhlYWRlcnMsIGl0LT5maXJzdC5zdHJpbmcoKS51dGY4KCkuZGF0YSgp
LCBpdC0+c2Vjb25kLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgc291cF9tZXNzYWdlX2hl
YWRlcnNfYXBwZW5kKHNvdXBIZWFkZXJzLCBpdC0+a2V5LnN0cmluZygpLnV0ZjgoKS5kYXRhKCks
IGl0LT52YWx1ZS51dGY4KCkuZGF0YSgpKTsKICAgICB9CiAKICAgICBTdHJpbmcgZmlyc3RQYXJ0
eVN0cmluZyA9IGZpcnN0UGFydHlGb3JDb29raWVzKCkuc3RyaW5nKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXNwb25zZVNvdXAu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVzcG9u
c2VTb3VwLmNwcAppbmRleCBkZGFhODkzYjYzYTlmM2YxMDM1M2YwZGVkNWVmNjNiYTRlMGZhY2Vh
Li43MzlkNDRiMjg1ZDNkOWQyOTFlOGQ1YjI3YWFiZTdlNjlkZTY1YTFmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXNwb25zZVNvdXAu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJl
c3BvbnNlU291cC5jcHAKQEAgLTQ2LDcgKzQ2LDcgQEAgU291cE1lc3NhZ2UqIFJlc291cmNlUmVz
cG9uc2U6OnRvU291cE1lc3NhZ2UoKSBjb25zdAogICAgIGlmICghaGVhZGVycy5pc0VtcHR5KCkp
IHsKICAgICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaGVhZGVycy5l
bmQoKTsKICAgICAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGhl
YWRlcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgc291cF9tZXNzYWdl
X2hlYWRlcnNfYXBwZW5kKHNvdXBIZWFkZXJzLCBpdC0+Zmlyc3Quc3RyaW5nKCkudXRmOCgpLmRh
dGEoKSwgaXQtPnNlY29uZC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIHNvdXBfbWVzc2Fn
ZV9oZWFkZXJzX2FwcGVuZChzb3VwSGVhZGVycywgaXQtPmtleS5zdHJpbmcoKS51dGY4KCkuZGF0
YSgpLCBpdC0+dmFsdWUudXRmOCgpLmRhdGEoKSk7CiAgICAgfQogCiAgICAgc291cF9tZXNzYWdl
X3NldF9mbGFncyhzb3VwTWVzc2FnZSwgbV9zb3VwRmxhZ3MpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay93aW4vUmVzb3VyY2VIYW5kbGVXaW4uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay93aW4vUmVzb3VyY2VIYW5kbGVXaW4uY3BwCmlu
ZGV4IDAyMTJkMGNkYTk4YzlmMTM3OTI4ZTYxMmZkZjk1MDM2NWEwMWQwZDYuLmYyNTA1Mjc3NWIw
ZGVkZmUyMWM3NTVkM2Y4Mzk5ODUzZTdhMGYzOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvd2luL1Jlc291cmNlSGFuZGxlV2luLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3dpbi9SZXNvdXJjZUhhbmRsZVdpbi5jcHAKQEAgLTMy
MywxNSArMzIzLDE1IEBAIGJvb2wgUmVzb3VyY2VIYW5kbGU6OnN0YXJ0KE5ldHdvcmtpbmdDb250
ZXh0KiBjb250ZXh0KQogICAgIGNvbnN0IEhUVFBIZWFkZXJNYXAmIGh0dHBIZWFkZXJGaWVsZHMg
PSBmaXJzdFJlcXVlc3QoKS5odHRwSGVhZGVyRmllbGRzKCk7CiAKICAgICBmb3IgKEhUVFBIZWFk
ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaHR0cEhlYWRlckZpZWxkcy5iZWdpbigpOyBpdCAh
PSBodHRwSGVhZGVyRmllbGRzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmIChlcXVhbElnbm9y
aW5nQ2FzZShpdC0+Zmlyc3QsICJBY2NlcHQiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShpdC0+Zmly
c3QsICJSZWZlcmVyIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UoaXQtPmZpcnN0LCAiVXNlci1BZ2Vu
dCIpKQorICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoaXQtPmtleSwgIkFjY2VwdCIpIHx8
IGVxdWFsSWdub3JpbmdDYXNlKGl0LT5rZXksICJSZWZlcmVyIikgfHwgZXF1YWxJZ25vcmluZ0Nh
c2UoaXQtPmtleSwgIlVzZXItQWdlbnQiKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAg
ICAgIGlmICghaHR0cEhlYWRlcnMuaXNFbXB0eSgpKQogICAgICAgICAgICAgaHR0cEhlYWRlcnMu
YXBwZW5kKCdcbicpOwogCi0gICAgICAgIGh0dHBIZWFkZXJzLmFwcGVuZChpdC0+Zmlyc3QuY2hh
cmFjdGVycygpLCBpdC0+Zmlyc3QubGVuZ3RoKCkpOworICAgICAgICBodHRwSGVhZGVycy5hcHBl
bmQoaXQtPmtleS5jaGFyYWN0ZXJzKCksIGl0LT5rZXkubGVuZ3RoKCkpOwogICAgICAgICBodHRw
SGVhZGVycy5hcHBlbmQoJzonKTsKLSAgICAgICAgaHR0cEhlYWRlcnMuYXBwZW5kKGl0LT5zZWNv
bmQuY2hhcmFjdGVycygpLCBpdC0+c2Vjb25kLmxlbmd0aCgpKTsKKyAgICAgICAgaHR0cEhlYWRl
cnMuYXBwZW5kKGl0LT52YWx1ZS5jaGFyYWN0ZXJzKCksIGl0LT52YWx1ZS5sZW5ndGgoKSk7CiAg
ICAgfQogCiAgICAgSU5URVJORVRfQlVGRkVSU1cgaW50ZXJuZXRCdWZmZXJzOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUnVuTG9vcFF0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3F0L1J1bkxvb3BRdC5jcHAKaW5kZXggMmE4N2UyZmM4ZjY2Nzc3NjlmNzMx
NDNlNTcxZTA5YzVhNTRjNmViYS4uNTAxYmQ1YzEyM2IwZjAzY2U5YTBjZjkwZTE3MjY5MWY1MDZk
OWExYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUnVuTG9vcFF0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SdW5Mb29wUXQuY3BwCkBAIC0xMDks
NyArMTA5LDcgQEAgdm9pZCBSdW5Mb29wOjpUaW1lckJhc2U6OnRpbWVyRmlyZWQoUnVuTG9vcCog
cnVuTG9vcCwgaW50IElEKQogewogICAgIFRpbWVyTWFwOjppdGVyYXRvciBpdCA9IHJ1bkxvb3At
Pm1fYWN0aXZlVGltZXJzLmZpbmQoSUQpOwogICAgIEFTU0VSVChpdCAhPSBydW5Mb29wLT5tX2Fj
dGl2ZVRpbWVycy5lbmQoKSk7Ci0gICAgVGltZXJCYXNlKiB0aW1lciA9IGl0LT5zZWNvbmQ7Cisg
ICAgVGltZXJCYXNlKiB0aW1lciA9IGl0LT52YWx1ZTsKIAogICAgIGlmICghdGltZXItPm1faXNS
ZXBlYXRpbmcpIHsKICAgICAgICAgLy8gU3RvcCB0aGUgdGltZXIgKGNhbGxpbmcgc3RvcCB3b3Vs
ZCBuZWVkIGFub3RoZXIgaGFzaCB0YWJsZSBsb29rdXApLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9Mb2NhbGVUb1NjcmlwdE1hcHBpbmdEZWZhdWx0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9jYWxlVG9TY3JpcHRNYXBwaW5nRGVmYXVsdC5j
cHAKaW5kZXggOTA5NDczODQ5Njk2YjRjMjkyZDZiOWFjMjg1YmM3ZDlmNGFjMjg0MS4uNTgyNjQ5
MDdkNWU0MGEwMDliNDBmZDY5OTE4MGYzM2VmN2Q1MTdjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9Mb2NhbGVUb1NjcmlwdE1hcHBpbmdEZWZhdWx0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0xvY2FsZVRvU2NyaXB0TWFwcGluZ0RlZmF1
bHQuY3BwCkBAIC0xNjYsNyArMTY2LDcgQEAgVVNjcmlwdENvZGUgc2NyaXB0TmFtZVRvQ29kZShj
b25zdCBTdHJpbmcmIHNjcmlwdE5hbWUpCiAKICAgICBIYXNoTWFwPFN0cmluZywgVVNjcmlwdENv
ZGU+OjppdGVyYXRvciBpdCA9IHNjcmlwdE5hbWVDb2RlTWFwLmZpbmQoc2NyaXB0TmFtZS5sb3dl
cigpKTsKICAgICBpZiAoaXQgIT0gc2NyaXB0TmFtZUNvZGVNYXAuZW5kKCkpCi0gICAgICAgIHJl
dHVybiBpdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwogICAgIHJldHVybiBV
U0NSSVBUX0lOVkFMSURfQ09ERTsKIH0KIApAQCAtMzg5LDcgKzM4OSw3IEBAIFVTY3JpcHRDb2Rl
IGxvY2FsZVRvU2NyaXB0Q29kZUZvckZvbnRTZWxlY3Rpb24oY29uc3QgU3RyaW5nJiBsb2NhbGUp
CiAgICAgd2hpbGUgKCFjYW5vbmljYWxMb2NhbGUuaXNFbXB0eSgpKSB7CiAgICAgICAgIEhhc2hN
YXA8U3RyaW5nLCBVU2NyaXB0Q29kZT46Oml0ZXJhdG9yIGl0ID0gbG9jYWxlU2NyaXB0TWFwLmZp
bmQoY2Fub25pY2FsTG9jYWxlKTsKICAgICAgICAgaWYgKGl0ICE9IGxvY2FsZVNjcmlwdE1hcC5l
bmQoKSkKLSAgICAgICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgICAgICAgICAgcmV0dXJu
IGl0LT52YWx1ZTsKICAgICAgICAgc2l6ZV90IHBvcyA9IGNhbm9uaWNhbExvY2FsZS5yZXZlcnNl
RmluZCgnXycpOwogICAgICAgICBpZiAocG9zID09IG5vdEZvdW5kKQogICAgICAgICAgICAgYnJl
YWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGlu
Z1JlZ2lzdHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5n
UmVnaXN0cnkuY3BwCmluZGV4IDQ3NjNiZjgzNGMwZTAxZTYxODY3N2I4YTExNDE0ODAzNjE1Mjlh
NGUuLmQyMjkyZTRlZDVmMWYwMmQ0NDQxM2M3OWY4MzU5YWFjY2M4MDY3MzYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnkuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnkuY3Bw
CkBAIC0xOTYsOCArMTk2LDggQEAgc3RhdGljIHZvaWQgcHJ1bmVCbGFja2xpc3RlZENvZGVjcygp
CiAgICAgICAgIFRleHRFbmNvZGluZ05hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdGV4dEVu
Y29kaW5nTmFtZU1hcC0+YmVnaW4oKTsKICAgICAgICAgVGV4dEVuY29kaW5nTmFtZU1hcDo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gdGV4dEVuY29kaW5nTmFtZU1hcC0+ZW5kKCk7CiAgICAgICAgIGZv
ciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGlmIChpdC0+c2Vjb25kID09IGF0
b21pY05hbWUpCi0gICAgICAgICAgICAgICAgbmFtZXMuYXBwZW5kKGl0LT5maXJzdCk7CisgICAg
ICAgICAgICBpZiAoaXQtPnZhbHVlID09IGF0b21pY05hbWUpCisgICAgICAgICAgICAgICAgbmFt
ZXMuYXBwZW5kKGl0LT5rZXkpOwogICAgICAgICB9CiAKICAgICAgICAgc2l6ZV90IGxlbmd0aCA9
IG5hbWVzLnNpemUoKTsKQEAgLTM3OSw3ICszNzksNyBAQCB2b2lkIGR1bXBUZXh0RW5jb2RpbmdO
YW1lTWFwKCkKICAgICBUZXh0RW5jb2RpbmdOYW1lTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHRl
eHRFbmNvZGluZ05hbWVNYXAtPmJlZ2luKCk7CiAgICAgVGV4dEVuY29kaW5nTmFtZU1hcDo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gdGV4dEVuY29kaW5nTmFtZU1hcC0+ZW5kKCk7CiAgICAgZm9yICg7
IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICInJXMnID0+ICclcydc
biIsIGl0LT5maXJzdCwgaXQtPnNlY29uZCk7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJyVz
JyA9PiAnJXMnXG4iLCBpdC0+a2V5LCBpdC0+dmFsdWUpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvdHJhbnNjb2Rlci9Gb250VHJhbnNjb2Rl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3RyYW5zY29kZXIvRm9udFRyYW5z
Y29kZXIuY3BwCmluZGV4IDRlMDdmNTBmYmRiMGM1N2MzZWVjYTZmOGJlNzFmNzUwNWRiNTNiYzAu
LjQ4NDIyOGNhYThlNzYwNzFiMzdhOWQyMGE5OTJkNTBhMWQ0MWY0MGMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvdHJhbnNjb2Rlci9Gb250VHJhbnNjb2Rlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC90cmFuc2NvZGVyL0ZvbnRUcmFuc2Nv
ZGVyLmNwcApAQCAtNjYsNyArNjYsNyBAQCBGb250VHJhbnNjb2Rlcjo6Q29udmVydGVyVHlwZSBG
b250VHJhbnNjb2Rlcjo6Y29udmVydGVyVHlwZShjb25zdCBGb250RGVzY3JpcHRpbwogICAgIGlm
ICghZm9udEZhbWlseS5pc051bGwoKSkgewogICAgICAgICBIYXNoTWFwPEF0b21pY1N0cmluZywg
Q29udmVydGVyVHlwZT46OmNvbnN0X2l0ZXJhdG9yIGZvdW5kID0gbV9jb252ZXJ0ZXJUeXBlcy5m
aW5kKGZvbnRGYW1pbHkpOwogICAgICAgICBpZiAoZm91bmQgIT0gbV9jb252ZXJ0ZXJUeXBlcy5l
bmQoKSkKLSAgICAgICAgICAgIHJldHVybiBmb3VuZC0+c2Vjb25kOworICAgICAgICAgICAgcmV0
dXJuIGZvdW5kLT52YWx1ZTsKICAgICB9CiAKICAgICAvLyBJRSdzIGRlZmF1bHQgZm9udHMgZm9y
IEphcGFuZXNlIGVuY29kaW5ncyBjaGFuZ2UgYmFja3NsYXNoZXMgaW50byB5ZW4gc2lnbnMuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3dpbi9UZXh0Q29kZWNXaW4u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC93aW4vVGV4dENvZGVjV2luLmNwcApp
bmRleCBlMTkyMzdkNjhkOTBkZjJmNTAzYWY0MjM5YWEzNjdiNmYxNGYyNGI1Li44NzlhZjc2OTc3
MmZmNTE1ZjM1NGFhOGIxOTcxNjk5YjYyYWJhNjYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L3dpbi9UZXh0Q29kZWNXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvd2luL1RleHRDb2RlY1dpbi5jcHAKQEAgLTEwNSwxNyArMTA1LDE3IEBA
IExhbmd1YWdlTWFuYWdlcjo6TGFuZ3VhZ2VNYW5hZ2VyKCkKICAgICAgICAgICAgIGkgPSBjb2Rl
UGFnZUNoYXJzZXRzKCkuc2V0KGNwSW5mby51aUNvZGVQYWdlLCBuYW1lKS5pdGVyYXRvcjsKICAg
ICAgICAgfQogICAgICAgICBpZiAoaSAhPSBjb2RlUGFnZUNoYXJzZXRzKCkuZW5kKCkpIHsKLSAg
ICAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBDaGFyc2V0SW5mbz46Oml0ZXJhdG9yIGogPSBrbm93
bkNoYXJzZXRzKCkuZmluZChTdHJpbmcoaS0+c2Vjb25kLmRhdGEoKSwgaS0+c2Vjb25kLmxlbmd0
aCgpKSk7CisgICAgICAgICAgICBIYXNoTWFwPFN0cmluZywgQ2hhcnNldEluZm8+OjppdGVyYXRv
ciBqID0ga25vd25DaGFyc2V0cygpLmZpbmQoU3RyaW5nKGktPnZhbHVlLmRhdGEoKSwgaS0+dmFs
dWUubGVuZ3RoKCkpKTsKICAgICAgICAgICAgIEFTU0VSVChqICE9IGtub3duQ2hhcnNldHMoKS5l
bmQoKSk7Ci0gICAgICAgICAgICBDaGFyc2V0SW5mbyYgaW5mbyA9IGotPnNlY29uZDsKLSAgICAg
ICAgICAgIGluZm8ubV9uYW1lID0gaS0+c2Vjb25kLmRhdGEoKTsKKyAgICAgICAgICAgIENoYXJz
ZXRJbmZvJiBpbmZvID0gai0+dmFsdWU7CisgICAgICAgICAgICBpbmZvLm1fbmFtZSA9IGktPnZh
bHVlLmRhdGEoKTsKICAgICAgICAgICAgIGluZm8ubV9mcmllbmRseU5hbWUgPSBjcEluZm8ud3N6
RGVzY3JpcHRpb247CiAgICAgICAgICAgICBpbmZvLm1fYWxpYXNlcy5hcHBlbmQobmFtZSk7CiAg
ICAgICAgICAgICBpbmZvLm1fYWxpYXNlcy5hcHBlbmQoU3RyaW5nKGNwSW5mby53c3pIZWFkZXJD
aGFyc2V0KS5sYXRpbjEoKSk7CiAgICAgICAgICAgICBpbmZvLm1fYWxpYXNlcy5hcHBlbmQoU3Ry
aW5nKGNwSW5mby53c3pCb2R5Q2hhcnNldCkubGF0aW4xKCkpOwogICAgICAgICAgICAgU3RyaW5n
IGNwTmFtZSA9ICJjcCIgKyBTdHJpbmc6Om51bWJlcihjcEluZm8udWlDb2RlUGFnZSk7CiAgICAg
ICAgICAgICBpbmZvLm1fYWxpYXNlcy5hcHBlbmQoY3BOYW1lLmxhdGluMSgpKTsKLSAgICAgICAg
ICAgIHN1cHBvcnRlZENoYXJzZXRzKCkuYWRkKGktPnNlY29uZC5kYXRhKCkpOworICAgICAgICAg
ICAgc3VwcG9ydGVkQ2hhcnNldHMoKS5hZGQoaS0+dmFsdWUuZGF0YSgpKTsKICAgICAgICAgfQog
ICAgIH0KIH0KQEAgLTEyNiw3ICsxMjYsNyBAQCBzdGF0aWMgVUlOVCBnZXRDb2RlUGFnZShjb25z
dCBjaGFyKiBuYW1lKQogICAgIC8vIHNheWluZyAiPT0iIGlzIG5vdCBmb3VuZCBmb3IgY29uc3Rf
aXRlcmF0b3IgYW5kIGl0ZXJhdG9yCiAgICAgY29uc3QgSGFzaE1hcDxTdHJpbmcsIENoYXJzZXRJ
bmZvPiYgY2hhcnNldHMgPSBrbm93bkNoYXJzZXRzKCk7CiAgICAgSGFzaE1hcDxTdHJpbmcsIENo
YXJzZXRJbmZvPjo6Y29uc3RfaXRlcmF0b3IgaSA9IGNoYXJzZXRzLmZpbmQobmFtZSk7Ci0gICAg
cmV0dXJuIGkgPT0gY2hhcnNldHMuZW5kKCkgPyBDUF9BQ1AgOiBpLT5zZWNvbmQubV9jb2RlUGFn
ZTsKKyAgICByZXR1cm4gaSA9PSBjaGFyc2V0cy5lbmQoKSA/IENQX0FDUCA6IGktPnZhbHVlLm1f
Y29kZVBhZ2U7CiB9CiAKIHN0YXRpYyBQYXNzT3duUHRyPFRleHRDb2RlYz4gbmV3VGV4dENvZGVj
V2luKGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcsIGNvbnN0IHZvaWQqKQpAQCAtMTQ5LDkg
KzE0OSw5IEBAIHZvaWQgVGV4dENvZGVjV2luOjpyZWdpc3RlckV4dGVuZGVkRW5jb2RpbmdOYW1l
cyhFbmNvZGluZ05hbWVSZWdpc3RyYXIgcmVnaXN0cmFyCiAgICAgZm9yIChDaGFyc2V0U2V0Ojpp
dGVyYXRvciBpID0gc3VwcG9ydGVkQ2hhcnNldHMoKS5iZWdpbigpOyBpICE9IHN1cHBvcnRlZENo
YXJzZXRzKCkuZW5kKCk7ICsraSkgewogICAgICAgICBIYXNoTWFwPFN0cmluZywgQ2hhcnNldElu
Zm8+OjppdGVyYXRvciBqID0ga25vd25DaGFyc2V0cygpLmZpbmQoKmkpOwogICAgICAgICBpZiAo
aiAhPSBrbm93bkNoYXJzZXRzKCkuZW5kKCkpIHsKLSAgICAgICAgICAgIHJlZ2lzdHJhcihqLT5z
ZWNvbmQubV9uYW1lLmRhdGEoKSwgai0+c2Vjb25kLm1fbmFtZS5kYXRhKCkpOwotICAgICAgICAg
ICAgZm9yIChWZWN0b3I8Q1N0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGFsaWFzID0gai0+c2Vjb25k
Lm1fYWxpYXNlcy5iZWdpbigpOyBhbGlhcyAhPSBqLT5zZWNvbmQubV9hbGlhc2VzLmVuZCgpOyAr
K2FsaWFzKQotICAgICAgICAgICAgICAgIHJlZ2lzdHJhcihhbGlhcy0+ZGF0YSgpLCBqLT5zZWNv
bmQubV9uYW1lLmRhdGEoKSk7CisgICAgICAgICAgICByZWdpc3RyYXIoai0+dmFsdWUubV9uYW1l
LmRhdGEoKSwgai0+dmFsdWUubV9uYW1lLmRhdGEoKSk7CisgICAgICAgICAgICBmb3IgKFZlY3Rv
cjxDU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgYWxpYXMgPSBqLT52YWx1ZS5tX2FsaWFzZXMuYmVn
aW4oKTsgYWxpYXMgIT0gai0+dmFsdWUubV9hbGlhc2VzLmVuZCgpOyArK2FsaWFzKQorICAgICAg
ICAgICAgICAgIHJlZ2lzdHJhcihhbGlhcy0+ZGF0YSgpLCBqLT52YWx1ZS5tX25hbWUuZGF0YSgp
KTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTE2Miw3ICsxNjIsNyBAQCB2b2lkIFRleHRDb2Rl
Y1dpbjo6cmVnaXN0ZXJFeHRlbmRlZENvZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIgcmVnaXN0cmFy
KQogICAgIGZvciAoQ2hhcnNldFNldDo6aXRlcmF0b3IgaSA9IHN1cHBvcnRlZENoYXJzZXRzKCku
YmVnaW4oKTsgaSAhPSBzdXBwb3J0ZWRDaGFyc2V0cygpLmVuZCgpOyArK2kpIHsKICAgICAgICAg
SGFzaE1hcDxTdHJpbmcsIENoYXJzZXRJbmZvPjo6aXRlcmF0b3IgaiA9IGtub3duQ2hhcnNldHMo
KS5maW5kKCppKTsKICAgICAgICAgaWYgKGogIT0ga25vd25DaGFyc2V0cygpLmVuZCgpKQotICAg
ICAgICAgICAgcmVnaXN0cmFyKGotPnNlY29uZC5tX25hbWUuZGF0YSgpLCBuZXdUZXh0Q29kZWNX
aW4sIDApOworICAgICAgICAgICAgcmVnaXN0cmFyKGotPnZhbHVlLm1fbmFtZS5kYXRhKCksIG5l
d1RleHRDb2RlY1dpbiwgMCk7CiAgICAgfQogfQogCkBAIC0zMDEsNyArMzAxLDcgQEAgdm9pZCBU
ZXh0Q29kZWNXaW46OmVudW1lcmF0ZVN1cHBvcnRlZEVuY29kaW5ncyhFbmNvZGluZ1JlY2VpdmVy
JiByZWNlaXZlcikKICAgICBsYW5ndWFnZU1hbmFnZXIoKTsKICAgICBmb3IgKENoYXJzZXRTZXQ6
Oml0ZXJhdG9yIGkgPSBzdXBwb3J0ZWRDaGFyc2V0cygpLmJlZ2luKCk7IGkgIT0gc3VwcG9ydGVk
Q2hhcnNldHMoKS5lbmQoKTsgKytpKSB7CiAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBDaGFyc2V0
SW5mbz46Oml0ZXJhdG9yIGogPSBrbm93bkNoYXJzZXRzKCkuZmluZCgqaSk7Ci0gICAgICAgIGlm
IChqICE9IGtub3duQ2hhcnNldHMoKS5lbmQoKSAmJiAhcmVjZWl2ZXIucmVjZWl2ZShqLT5zZWNv
bmQubV9uYW1lLmRhdGEoKSwgai0+c2Vjb25kLm1fZnJpZW5kbHlOYW1lLmNoYXJhY3RlcnNXaXRo
TnVsbFRlcm1pbmF0aW9uKCksIGotPnNlY29uZC5tX2NvZGVQYWdlKSkKKyAgICAgICAgaWYgKGog
IT0ga25vd25DaGFyc2V0cygpLmVuZCgpICYmICFyZWNlaXZlci5yZWNlaXZlKGotPnZhbHVlLm1f
bmFtZS5kYXRhKCksIGotPnZhbHVlLm1fZnJpZW5kbHlOYW1lLmNoYXJhY3RlcnNXaXRoTnVsbFRl
cm1pbmF0aW9uKCksIGotPnZhbHVlLm1fY29kZVBhZ2UpKQogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2Fy
ZFV0aWxpdGllc1dpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xpcGJvYXJk
VXRpbGl0aWVzV2luLmNwcAppbmRleCA2MWUzNjIxYjUzZGM0OTU4NjUxM2FiNzQxNDRkZjVlNjJi
YTFjMTYwLi43NWZmOWRlN2JlMTAyM2Y3ZTEyZmI5OWRkMTZjZTc0NmZiOGVkZjI0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xpcGJvYXJkVXRpbGl0aWVzV2luLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xpcGJvYXJkVXRpbGl0aWVzV2lu
LmNwcApAQCAtNzYsNyArNzYsNyBAQCBzdGF0aWMgYm9vbCBnZXREYXRhTWFwSXRlbShjb25zdCBE
cmFnRGF0YU1hcCogZGF0YU9iamVjdCwgRk9STUFURVRDKiBmb3JtYXQsIFN0cgogICAgIERyYWdE
YXRhTWFwOjpjb25zdF9pdGVyYXRvciBmb3VuZCA9IGRhdGFPYmplY3QtPmZpbmQoZm9ybWF0LT5j
ZkZvcm1hdCk7CiAgICAgaWYgKGZvdW5kID09IGRhdGFPYmplY3QtPmVuZCgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgaXRlbSA9IGZvdW5kLT5zZWNvbmRbMF07CisgICAgaXRlbSA9IGZv
dW5kLT52YWx1ZVswXTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtODI2LDcgKzgyNiw3IEBA
IHZvaWQgZ2V0Q2xpcGJvYXJkRGF0YShJRGF0YU9iamVjdCogZGF0YU9iamVjdCwgRk9STUFURVRD
KiBmb3JtYXQsIFZlY3RvcjxTdHJpbmc+CiAgICAgQ2xpcGJvYXJkRm9ybWF0TWFwOjpjb25zdF9p
dGVyYXRvciBmb3VuZCA9IGZvcm1hdE1hcC5maW5kKGZvcm1hdC0+Y2ZGb3JtYXQpOwogICAgIGlm
IChmb3VuZCA9PSBmb3JtYXRNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBmb3VuZC0+
c2Vjb25kLT5nZXRTdHJpbmcoZGF0YU9iamVjdCwgZm91bmQtPnNlY29uZC0+Zm9ybWF0LCBkYXRh
U3RyaW5ncyk7CisgICAgZm91bmQtPnZhbHVlLT5nZXRTdHJpbmcoZGF0YU9iamVjdCwgZm91bmQt
PnZhbHVlLT5mb3JtYXQsIGRhdGFTdHJpbmdzKTsKIH0KIAogdm9pZCBzZXRDbGlwYm9hcmREYXRh
KElEYXRhT2JqZWN0KiBkYXRhT2JqZWN0LCBVSU5UIGZvcm1hdCwgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIGRhdGFTdHJpbmdzKQpAQCAtODM1LDcgKzgzNSw3IEBAIHZvaWQgc2V0Q2xpcGJvYXJkRGF0
YShJRGF0YU9iamVjdCogZGF0YU9iamVjdCwgVUlOVCBmb3JtYXQsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+CiAgICAgQ2xpcGJvYXJkRm9ybWF0TWFwOjpjb25zdF9pdGVyYXRvciBmb3VuZCA9IGZvcm1h
dE1hcC5maW5kKGZvcm1hdCk7CiAgICAgaWYgKGZvdW5kID09IGZvcm1hdE1hcC5lbmQoKSkKICAg
ICAgICAgcmV0dXJuOwotICAgIGZvdW5kLT5zZWNvbmQtPnNldFN0cmluZyhkYXRhT2JqZWN0LCBm
b3VuZC0+c2Vjb25kLT5mb3JtYXQsIGRhdGFTdHJpbmdzKTsKKyAgICBmb3VuZC0+dmFsdWUtPnNl
dFN0cmluZyhkYXRhT2JqZWN0LCBmb3VuZC0+dmFsdWUtPmZvcm1hdCwgZGF0YVN0cmluZ3MpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS93aW4vQ2xpcGJvYXJkV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dp
bi9DbGlwYm9hcmRXaW4uY3BwCmluZGV4IGQxYzEzODZhMTQ1MjA0YzM4ZTE4MWJkNzVhMjhiMjhj
OTA1Mzc1ZDAuLmY5NTBiMDhjZWZiZjZkMGJlMDFiNWU0MGFjZDBkYjY4M2E0MmEzYzMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRXaW4uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRXaW4uY3BwCkBAIC01MjUsNyAr
NTI1LDcgQEAgSGFzaFNldDxTdHJpbmc+IENsaXBib2FyZFdpbjo6dHlwZXMoKSBjb25zdAogICAg
IH0gZWxzZSB7CiAgICAgICAgIGZvciAoRHJhZ0RhdGFNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bV9kcmFnRGF0YU1hcC5iZWdpbigpOyBpdCAhPSBtX2RyYWdEYXRhTWFwLmVuZCgpOyArK2l0KSB7
CiAgICAgICAgICAgICBGT1JNQVRFVEMgZGF0YTsKLSAgICAgICAgICAgIGRhdGEuY2ZGb3JtYXQg
PSAoKml0KS5maXJzdDsKKyAgICAgICAgICAgIGRhdGEuY2ZGb3JtYXQgPSAoKml0KS5rZXk7CiAg
ICAgICAgICAgICBhZGRNaW1lVHlwZXNGb3JGb3JtYXQocmVzdWx0cywgZGF0YSk7CiAgICAgICAg
IH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRmlsZVN5
c3RlbVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5j
cHAKaW5kZXggZWUwMjU1ZTEyODU4ZWEzOWIxYmM5NDY2NTEyOTA3M2M0ZGNhMTk0ZC4uMDc5Zjhk
NmU4ZDY0NWIwMGZhMjlhMWI0YjVlMTYyYmVmZjYwNWU5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vd2luL0ZpbGVTeXN0ZW1XaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3dpbi9GaWxlU3lzdGVtV2luLmNwcApAQCAtMjM4LDcgKzIzOCw3IEBAIHN0YXRp
YyBTdHJpbmcgY2FjaGVkU3RvcmFnZURpcmVjdG9yeShEV09SRCBwYXRoSWRlbnRpZmllcikKIAog
ICAgIEhhc2hNYXA8RFdPUkQsIFN0cmluZz46Oml0ZXJhdG9yIGl0ID0gZGlyZWN0b3JpZXMuZmlu
ZChwYXRoSWRlbnRpZmllcik7CiAgICAgaWYgKGl0ICE9IGRpcmVjdG9yaWVzLmVuZCgpKQotICAg
ICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKIAogICAg
IFN0cmluZyBkaXJlY3RvcnkgPSBzdG9yYWdlRGlyZWN0b3J5KHBhdGhJZGVudGlmaWVyKTsKICAg
ICBkaXJlY3Rvcmllcy5hZGQocGF0aElkZW50aWZpZXIsIGRpcmVjdG9yeSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUnVuTG9vcFdpbi5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS93aW4vUnVuTG9vcFdpbi5jcHAKaW5kZXggMTY2M2I2NjEzM2FiYzJjYjNm
ZDAwNTdkMTk2NzEyMzdkMGU3OTlkYS4uMTdkNjg0NWU5ZmZkYzM5MjhjMDY3YzdjMTU4ODNhYWI5
MGQyOWE2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1J1bkxvb3BX
aW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9SdW5Mb29wV2luLmNwcApA
QCAtMTI2LDcgKzEyNiw3IEBAIHZvaWQgUnVuTG9vcDo6VGltZXJCYXNlOjp0aW1lckZpcmVkKFJ1
bkxvb3AqIHJ1bkxvb3AsIHVpbnQ2NF90IElEKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgVGltZXJCYXNlKiB0aW1lciA9IGl0LT5zZWNvbmQ7CisgICAgVGltZXJCYXNlKiB0aW1lciA9
IGl0LT52YWx1ZTsKIAogICAgIGlmICghdGltZXItPm1faXNSZXBlYXRpbmcpIHsKICAgICAgICAg
cnVuTG9vcC0+bV9hY3RpdmVUaW1lcnMucmVtb3ZlKGl0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3dpbi9XQ0RhdGFPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vd2luL1dDRGF0YU9iamVjdC5jcHAKaW5kZXggMGMwM2NlMDBmMjIxYWUwYWM4MWI4ZWU3
MmNmZTBkMDU0YTA1NjY1NC4uZGZiZDAwNWZjNDM2ZjhkNzIxNmEyMTc0NjY5OWI3ZGY4MWI1ODA0
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1dDRGF0YU9iamVjdC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1dDRGF0YU9iamVjdC5jcHAKQEAg
LTE2OSw3ICsxNjksNyBAQCBIUkVTVUxUIFdDRGF0YU9iamVjdDo6Y3JlYXRlSW5zdGFuY2UoV0NE
YXRhT2JqZWN0KiogcmVzdWx0LCBjb25zdCBEcmFnRGF0YU1hcCYgZAogICAgICpyZXN1bHQgPSBu
ZXcgV0NEYXRhT2JqZWN0OwogCiAgICAgZm9yIChEcmFnRGF0YU1hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBkYXRhTWFwLmJlZ2luKCk7IGl0ICE9IGRhdGFNYXAuZW5kKCk7ICsraXQpCi0gICAgICAg
IHNldENsaXBib2FyZERhdGEoKnJlc3VsdCwgaXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsKKyAgICAg
ICAgc2V0Q2xpcGJvYXJkRGF0YSgqcmVzdWx0LCBpdC0+a2V5LCBpdC0+dmFsdWUpOwogICAgIHJl
dHVybiBTX09LOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW5j
ZS9NSU1FVHlwZVJlZ2lzdHJ5V2luQ0UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2lu
Y2UvTUlNRVR5cGVSZWdpc3RyeVdpbkNFLmNwcAppbmRleCA4YTBkM2QyYjYxNjJiNDZkYmI3ZDYy
ZjIyY2EwMzI2ZGM3ZmNlZGM1Li44ODg4NDcxYTk0MWI2NzI3ZDY1N2Y0NjQyOTdlZGM4YTY1NDIy
ZWQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW5jZS9NSU1FVHlwZVJl
Z2lzdHJ5V2luQ0UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbmNlL01JTUVU
eXBlUmVnaXN0cnlXaW5DRS5jcHAKQEAgLTEwMSw3ICsxMDEsNyBAQCBTdHJpbmcgTUlNRVR5cGVS
ZWdpc3RyeTo6Z2V0UHJlZmVycmVkRXh0ZW5zaW9uRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiB0
eXBlKQogICAgIGluaXRNSU1FVHlwZUVudGVuc2lvbk1hcCgpOwogCiAgICAgZm9yIChIYXNoTWFw
PFN0cmluZywgU3RyaW5nPjo6aXRlcmF0b3IgaSA9IG1pbWV0eXBlTWFwLmJlZ2luKCk7IGkgIT0g
bWltZXR5cGVNYXAuZW5kKCk7ICsraSkgewotICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2Uo
aS0+c2Vjb25kLCB0eXBlKSkKKyAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGktPnZhbHVl
LCB0eXBlKSkKICAgICAgICAgICAgIHJldHVybiBpLT5maXJzdDsKICAgICB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L0NvbnRleHRNZW51V3guY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vd3gvQ29udGV4dE1lbnVXeC5jcHAKaW5kZXggNDE4OWFhOTUyZmZl
YjRiY2EyM2RiNzBhOTgwNjFlZWRmZjRmMWRmNC4uZGYyZWU1MjdkOTQ4ZTE2MmFiYjg5NDIzOGJi
MmIzODRkODY5ZjYyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvQ29u
dGV4dE1lbnVXeC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvQ29udGV4dE1l
bnVXeC5jcHAKQEAgLTY3LDggKzY3LDggQEAgdm9pZCBDb250ZXh0TWVudTo6YXBwZW5kSXRlbShD
b250ZXh0TWVudUl0ZW0mIGl0ZW0pCiAKICAgICBJdGVtQWN0aW9uTWFwOjpjb25zdF9pdGVyYXRv
ciBlbmQgPSBzX2l0ZW1BY3Rpb25zLmVuZCgpOwogICAgIGZvciAoSXRlbUFjdGlvbk1hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBzX2l0ZW1BY3Rpb25zLmJlZ2luKCk7ICBpdCAhPSBlbmQ7ICsraXQp
IHsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQgPT0gaXRlbURlc2NyaXB0aW9uLmFjdGlvbikKLSAg
ICAgICAgICAgIGlkV3ggPSBpdC0+Zmlyc3Q7CisgICAgICAgIGlmIChpdC0+dmFsdWUgPT0gaXRl
bURlc2NyaXB0aW9uLmFjdGlvbikKKyAgICAgICAgICAgIGlkV3ggPSBpdC0+a2V5OwogICAgIH0K
IAogICAgIGlmIChpdGVtRGVzY3JpcHRpb24uc3ViTWVudSkgewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbHVn
aW5zL1BsdWdpbkRhdGFiYXNlLmNwcAppbmRleCA5NjFjNDU0ODViZjJkODc3NGFhMzAwYzc4NjUw
ZWFjOWRhYTA1ZmM4Li40NDUyYWZlMWU0YjYzOGI1ZjdkZGEwZWM3YjE3OWQ3YWUzZDlkNmUzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmNwcApAQCAtMTY2LDcgKzE2
Niw3IEBAIGJvb2wgUGx1Z2luRGF0YWJhc2U6OnJlZnJlc2goKQogICAgICAgICBNSU1FVG9EZXNj
cmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIG1hcF9pdCA9ICgqaXQpLT5taW1lVG9EZXNjcmlw
dGlvbnMoKS5iZWdpbigpOwogICAgICAgICBNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0
ZXJhdG9yIG1hcF9lbmQgPSAoKml0KS0+bWltZVRvRGVzY3JpcHRpb25zKCkuZW5kKCk7CiAgICAg
ICAgIGZvciAoOyBtYXBfaXQgIT0gbWFwX2VuZDsgKyttYXBfaXQpCi0gICAgICAgICAgICBtX3Jl
Z2lzdGVyZWRNSU1FVHlwZXMuYWRkKG1hcF9pdC0+Zmlyc3QpOworICAgICAgICAgICAgbV9yZWdp
c3RlcmVkTUlNRVR5cGVzLmFkZChtYXBfaXQtPmtleSk7CiAgICAgfQogCiAgICAgcmV0dXJuIHRy
dWU7CkBAIC0yNDcsOSArMjQ3LDkgQEAgU3RyaW5nIFBsdWdpbkRhdGFiYXNlOjpNSU1FVHlwZUZv
ckV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGV4dGVuc2lvbikgY29uc3QKICAgICAgICAgTUlNRVRv
RXh0ZW5zaW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWltZV9lbmQgPSAoKml0KS0+bWltZVRvRXh0
ZW5zaW9ucygpLmVuZCgpOwogCiAgICAgICAgIGZvciAoTUlNRVRvRXh0ZW5zaW9uc01hcDo6Y29u
c3RfaXRlcmF0b3IgbWltZV9pdCA9ICgqaXQpLT5taW1lVG9FeHRlbnNpb25zKCkuYmVnaW4oKTsg
bWltZV9pdCAhPSBtaW1lX2VuZDsgKyttaW1lX2l0KSB7Ci0gICAgICAgICAgICBtaW1lVHlwZSA9
IG1pbWVfaXQtPmZpcnN0OworICAgICAgICAgICAgbWltZVR5cGUgPSBtaW1lX2l0LT5rZXk7CiAg
ICAgICAgICAgICBQbHVnaW5QYWNrYWdlKiBwcmVmZXJyZWRQbHVnaW4gPSBtX3ByZWZlcnJlZFBs
dWdpbnMuZ2V0KG1pbWVUeXBlKS5nZXQoKTsKLSAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBleHRlbnNpb25zID0gbWltZV9pdC0+c2Vjb25kOworICAgICAgICAgICAgY29uc3QgVmVj
dG9yPFN0cmluZz4mIGV4dGVuc2lvbnMgPSBtaW1lX2l0LT52YWx1ZTsKICAgICAgICAgICAgIGJv
b2wgZm91bmRNYXBwaW5nID0gZmFsc2U7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgZXh0ZW5zaW9ucy5zaXplKCk7IGkrKykgewogICAgICAgICAgICAgICAgIGlmIChlcXVh
bElnbm9yaW5nQ2FzZShleHRlbnNpb25zW2ldLCBleHRlbnNpb24pKSB7CkBAIC0zMzksOCArMzM5
LDggQEAgdm9pZCBQbHVnaW5EYXRhYmFzZTo6cmVtb3ZlKFBsdWdpblBhY2thZ2UqIHBhY2thZ2Up
CiAgICAgTUlNRVRvRXh0ZW5zaW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBwYWNrYWdlLT5t
aW1lVG9FeHRlbnNpb25zKCkuYmVnaW4oKTsKICAgICBNSU1FVG9FeHRlbnNpb25zTWFwOjpjb25z
dF9pdGVyYXRvciBlbmQgPSBwYWNrYWdlLT5taW1lVG9FeHRlbnNpb25zKCkuZW5kKCk7CiAgICAg
Zm9yICggOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgUGx1Z2luUGFja2FnZUJ5TmFtZU1h
cDo6aXRlcmF0b3IgcGFja2FnZUluTWFwID0gbV9wcmVmZXJyZWRQbHVnaW5zLmZpbmQoaXQtPmZp
cnN0KTsKLSAgICAgICAgaWYgKHBhY2thZ2VJbk1hcCAhPSBtX3ByZWZlcnJlZFBsdWdpbnMuZW5k
KCkgJiYgcGFja2FnZUluTWFwLT5zZWNvbmQgPT0gcGFja2FnZSkKKyAgICAgICAgUGx1Z2luUGFj
a2FnZUJ5TmFtZU1hcDo6aXRlcmF0b3IgcGFja2FnZUluTWFwID0gbV9wcmVmZXJyZWRQbHVnaW5z
LmZpbmQoaXQtPmtleSk7CisgICAgICAgIGlmIChwYWNrYWdlSW5NYXAgIT0gbV9wcmVmZXJyZWRQ
bHVnaW5zLmVuZCgpICYmIHBhY2thZ2VJbk1hcC0+dmFsdWUgPT0gcGFja2FnZSkKICAgICAgICAg
ICAgIG1fcHJlZmVycmVkUGx1Z2lucy5yZW1vdmUocGFja2FnZUluTWFwKTsKICAgICB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luTWFpblRocmVhZFNjaGVkdWxl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXIu
Y3BwCmluZGV4IDc1Mjg2NzZiMTJhYThiZGE4ZjMzYjMyZWY0MGNjODc2NTc2NmQzMWEuLjM5YWU3
OTRlMmZiMDk3MjE5YTUyMjNlYmZiZWVkZjY5YjZlMjg2MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsdWdpbnMvUGx1Z2luTWFpblRocmVhZFNjaGVkdWxlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyLmNwcApAQCAtNDksNyAr
NDksNyBAQCB2b2lkIFBsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXI6OnNjaGVkdWxlQ2FsbChOUFAg
bnBwLCBNYWluVGhyZWFkRnVuY3Rpb24gZnVuY3RpbwogICAgIGlmIChpdCA9PSBtX2NhbGxRdWV1
ZU1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaXQtPnNlY29uZC5hcHBlbmQoQ2Fs
bChmdW5jdGlvbiwgdXNlckRhdGEpKTsKKyAgICBpdC0+dmFsdWUuYXBwZW5kKENhbGwoZnVuY3Rp
b24sIHVzZXJEYXRhKSk7CiAKICAgICBpZiAoIW1fY2FsbFBlbmRpbmcpIHsKICAgICAgICAgY2Fs
bE9uTWFpblRocmVhZChtYWluVGhyZWFkQ2FsbGJhY2ssIHRoaXMpOwpAQCAtOTcsNyArOTcsNyBA
QCB2b2lkIFBsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXI6OmRpc3BhdGNoQ2FsbHMoKQogICAgICAg
ICAvLyBFbXB0eSBhbGwgdGhlIHF1ZXVlcyBpbiB0aGUgb3JpZ2luYWwgbWFwCiAgICAgICAgIENh
bGxRdWV1ZU1hcDo6aXRlcmF0b3IgZW5kID0gbV9jYWxsUXVldWVNYXAuZW5kKCk7CiAgICAgICAg
IGZvciAoQ2FsbFF1ZXVlTWFwOjppdGVyYXRvciBpdCA9IG1fY2FsbFF1ZXVlTWFwLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIGl0LT5zZWNvbmQuY2xlYXIoKTsKKyAgICAg
ICAgICAgIGl0LT52YWx1ZS5jbGVhcigpOwogICAgIH0KIAogICAgIG1fY2FsbFBlbmRpbmcgPSBm
YWxzZTsKQEAgLTEwNSw3ICsxMDUsNyBAQCB2b2lkIFBsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXI6
OmRpc3BhdGNoQ2FsbHMoKQogCiAgICAgQ2FsbFF1ZXVlTWFwOjppdGVyYXRvciBlbmQgPSBjb3B5
LmVuZCgpOwogICAgIGZvciAoQ2FsbFF1ZXVlTWFwOjppdGVyYXRvciBpdCA9IGNvcHkuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBkaXNwYXRjaENhbGxzRm9yUGx1Z2luKGl0LT5m
aXJzdCwgaXQtPnNlY29uZCk7CisgICAgICAgIGRpc3BhdGNoQ2FsbHNGb3JQbHVnaW4oaXQtPmtl
eSwgaXQtPnZhbHVlKTsKIH0KIAogdm9pZCBQbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyOjptYWlu
VGhyZWFkQ2FsbGJhY2sodm9pZCogY29udGV4dCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsdWdpbnMvUGx1Z2luU3RyZWFtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2lu
U3RyZWFtLmNwcAppbmRleCAwMDIzODBmNWY5NTNmOWJlZTJjNTY1ZTljYTVjMTMyYWQ0YzBhZjRh
Li5mZGI3ODYwMzViMGQxNjU0ODIxZmNiNDYwYWQ0ZTJkM2E3MWE1YTM1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblN0cmVhbS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGx1Z2lucy9QbHVnaW5TdHJlYW0uY3BwCkBAIC0xNDcsOSArMTQ3LDkgQEAgdm9pZCBQbHVn
aW5TdHJlYW06OnN0YXJ0U3RyZWFtKCkKIAogICAgICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9p
dGVyYXRvciBlbmQgPSBtX3Jlc291cmNlUmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkcygpLmVuZCgp
OwogICAgICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9yZXNv
dXJjZVJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5maXJzdCk7CisgICAgICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+a2V5KTsKICAgICAgICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKHNlcGFyYXRvcik7Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZChpdC0+c2Vjb25kKTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT52YWx1
ZSk7CiAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKICAgICAgICAgfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2JsYWNrYmVycnkvUGx1Z2luRGF0
YUJsYWNrQmVycnkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ibGFja2JlcnJ5L1BsdWdp
bkRhdGFCbGFja0JlcnJ5LmNwcAppbmRleCBkOTIwZDFmYmQ1YTExMjQ2MDNhOGNkOThmYTEzNDM1
NmU3MzA2YjU5Li40NzQ2NjE2ZGUzMzVmYTgzY2VjOTZkOTMwZTIwZDhjMjhlOTRjM2I3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2JsYWNrYmVycnkvUGx1Z2luRGF0YUJsYWNr
QmVycnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvYmxhY2tiZXJyeS9QbHVnaW5E
YXRhQmxhY2tCZXJyeS5jcHAKQEAgLTQxLDggKzQxLDggQEAgdm9pZCBQbHVnaW5EYXRhOjppbml0
UGx1Z2lucyhjb25zdCBQYWdlKikKICAgICAgICAgTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25z
dF9pdGVyYXRvciBlbmQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuZW5kKCk7CiAgICAgICAgIGZvciAo
TUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1pbWVUb0Rlc2NyaXB0
aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIE1pbWVDbGFzc0lu
Zm8gbWltZTsKLSAgICAgICAgICAgIG1pbWUudHlwZSA9IGl0LT5maXJzdDsKLSAgICAgICAgICAg
IG1pbWUuZGVzYyA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICBtaW1lLnR5cGUgPSBpdC0+a2V5
OworICAgICAgICAgICAgbWltZS5kZXNjID0gaXQtPnZhbHVlOwogICAgICAgICAgICAgbWltZS5l
eHRlbnNpb25zID0gcGFja2FnZS0+bWltZVRvRXh0ZW5zaW9ucygpLmdldChtaW1lLnR5cGUpOwog
ICAgICAgICAgICAgaW5mby5taW1lcy5hcHBlbmQobWltZSk7CiAgICAgICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd3gvUGx1Z2luRGF0YVd4LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsdWdpbnMvd3gvUGx1Z2luRGF0YVd4LmNwcAppbmRleCAwZWI4OTBmZWYwNWExMTVl
YWNlNDI2Mzc2ODBhM2Q2YTEyZjU3NzI5Li4yNzk1MmM0YWU4YmZhNDllOThiMTFhZTk5NTlmYzc1
NGU0ZGIyM2JlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3d4L1BsdWdpbkRh
dGFXeC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy93eC9QbHVnaW5EYXRhV3guY3Bw
CkBAIC01MSw4ICs1MSw4IEBAIHZvaWQgUGx1Z2luRGF0YTo6aW5pdFBsdWdpbnMoY29uc3QgUGFn
ZSopCiAgICAgICAgIGZvciAoTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAg
ICAgICAgIE1pbWVDbGFzc0luZm8gbWltZTsKIAotICAgICAgICAgICAgbWltZS50eXBlID0gaXQt
PmZpcnN0OwotICAgICAgICAgICAgbWltZS5kZXNjID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAg
IG1pbWUudHlwZSA9IGl0LT5rZXk7CisgICAgICAgICAgICBtaW1lLmRlc2MgPSBpdC0+dmFsdWU7
CiAgICAgICAgICAgICBtaW1lLmV4dGVuc2lvbnMgPSBwYWNrYWdlLT5taW1lVG9FeHRlbnNpb25z
KCkuZ2V0KG1pbWUudHlwZSk7CiAKICAgICAgICAgICAgIGluZm8ubWltZXMuYXBwZW5kKG1pbWUp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0Zsb3dUaHJlYWRDb250cm9s
bGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GbG93VGhyZWFkQ29udHJvbGxlci5j
cHAKaW5kZXggMDEzZTRhMjBmNWY4ZjE4NWEyZTQwMGFhMDg5ZDJmNjE2NjJmNzJiYS4uYWE4Yzhk
ZDE1YTE1ZWVmYjQyMTEzZmQxMjYxZjhmMjVlYzBlODI1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0Zsb3dUaHJlYWRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvRmxvd1RocmVhZENvbnRyb2xsZXIuY3BwCkBAIC0xNDAsOSArMTQwLDkg
QEAgdm9pZCBGbG93VGhyZWFkQ29udHJvbGxlcjo6dW5yZWdpc3Rlck5hbWVkRmxvd0NvbnRlbnRO
b2RlKE5vZGUqIGNvbnRlbnROb2RlKQogICAgIEFTU0VSVChjb250ZW50Tm9kZSAmJiBjb250ZW50
Tm9kZS0+aXNFbGVtZW50Tm9kZSgpKTsKICAgICBIYXNoTWFwPE5vZGUqLCBSZW5kZXJOYW1lZEZs
b3dUaHJlYWQqPjo6aXRlcmF0b3IgaXQgPSBtX21hcE5hbWVkRmxvd0NvbnRlbnROb2Rlcy5maW5k
KGNvbnRlbnROb2RlKTsKICAgICBBU1NFUlQoaXQgIT0gbV9tYXBOYW1lZEZsb3dDb250ZW50Tm9k
ZXMuZW5kKCkpOwotICAgIEFTU0VSVChpdC0+c2Vjb25kKTsKLSAgICBBU1NFUlQoaXQtPnNlY29u
ZC0+aGFzQ29udGVudE5vZGUoY29udGVudE5vZGUpKTsKLSAgICBpdC0+c2Vjb25kLT51bnJlZ2lz
dGVyTmFtZWRGbG93Q29udGVudE5vZGUoY29udGVudE5vZGUpOworICAgIEFTU0VSVChpdC0+dmFs
dWUpOworICAgIEFTU0VSVChpdC0+dmFsdWUtPmhhc0NvbnRlbnROb2RlKGNvbnRlbnROb2RlKSk7
CisgICAgaXQtPnZhbHVlLT51bnJlZ2lzdGVyTmFtZWRGbG93Q29udGVudE5vZGUoY29udGVudE5v
ZGUpOwogICAgIG1fbWFwTmFtZWRGbG93Q29udGVudE5vZGVzLnJlbW92ZShjb250ZW50Tm9kZSk7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAppbmRleCAx
MjZkYjI3Zjk4MTFkMTViNzllM2E4MDdjYmZmMWFlMWMzYTc0YjIzLi5lN2Q4MTk4MmQ2OTAyMmFk
NjJmMDg3OWFlNjU3OGI4N2NjMTY3NjBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvSW5saW5lRmxvd0JveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lu
bGluZUZsb3dCb3guY3BwCkBAIC00NTksNyArNDU5LDcgQEAgYm9vbCBJbmxpbmVGbG93Qm94Ojpy
ZXF1aXJlc0lkZW9ncmFwaGljQmFzZWxpbmUoY29uc3QgR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNr
Rm8KICAgICAgICAgICAgIGNvbnN0IFZlY3Rvcjxjb25zdCBTaW1wbGVGb250RGF0YSo+KiB1c2Vk
Rm9udHMgPSAwOwogICAgICAgICAgICAgaWYgKGN1cnItPmlzSW5saW5lVGV4dEJveCgpKSB7CiAg
ICAgICAgICAgICAgICAgR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gdGV4dEJveERhdGFNYXAuZmluZCh0b0lubGluZVRleHRCb3goY3VycikpOwot
ICAgICAgICAgICAgICAgIHVzZWRGb250cyA9IGl0ID09IHRleHRCb3hEYXRhTWFwLmVuZCgpID8g
MCA6ICZpdC0+c2Vjb25kLmZpcnN0OworICAgICAgICAgICAgICAgIHVzZWRGb250cyA9IGl0ID09
IHRleHRCb3hEYXRhTWFwLmVuZCgpID8gMCA6ICZpdC0+dmFsdWUuZmlyc3Q7CiAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgIGlmICh1c2VkRm9udHMpIHsKQEAgLTgyMyw3ICs4MjMsNyBAQCBp
bmxpbmUgdm9pZCBJbmxpbmVGbG93Qm94OjphZGRUZXh0Qm94VmlzdWFsT3ZlcmZsb3coSW5saW5l
VGV4dEJveCogdGV4dEJveCwgR2x5cAogICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHRleHRCb3gt
PnJlbmRlcmVyKCktPnN0eWxlKGlzRmlyc3RMaW5lU3R5bGUoKSk7CiAgICAgCiAgICAgR2x5cGhP
dmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXA6Oml0ZXJhdG9yIGl0ID0gdGV4dEJveERhdGFNYXAu
ZmluZCh0ZXh0Qm94KTsKLSAgICBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93ID0gaXQgPT0g
dGV4dEJveERhdGFNYXAuZW5kKCkgPyAwIDogJml0LT5zZWNvbmQuc2Vjb25kOworICAgIEdseXBo
T3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cgPSBpdCA9PSB0ZXh0Qm94RGF0YU1hcC5lbmQoKSA/IDAg
OiAmaXQtPnZhbHVlLnNlY29uZDsKICAgICBib29sIGlzRmxpcHBlZExpbmUgPSBzdHlsZS0+aXNG
bGlwcGVkTGluZXNXcml0aW5nTW9kZSgpOwogCiAgICAgaW50IHRvcEdseXBoRWRnZSA9IGdseXBo
T3ZlcmZsb3cgPyAoaXNGbGlwcGVkTGluZSA/IGdseXBoT3ZlcmZsb3ctPmJvdHRvbSA6IGdseXBo
T3ZlcmZsb3ctPnRvcCkgOiAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5j
cHAKaW5kZXggODI3NzA3NzZmYmRjZjBlYWRhYzEzNDkxZmE5YjRlOGJiNTBkNTk3YS4uZWE3ODAz
ODdkZjliYTNmOWEzYTljMzIwMmY2N2Y1NmFiYzdkYjE3OSAxMDA3NTUKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2suY3BwCkBAIC00NDAzLDcgKzQ0MDMsNyBAQCB2b2lkIFJlbmRlckJs
b2NrOjpjbGVhckZsb2F0cygpCiAKICAgICAgICAgUmVuZGVyZXJUb0Zsb2F0SW5mb01hcDo6aXRl
cmF0b3IgZW5kID0gZmxvYXRNYXAuZW5kKCk7CiAgICAgICAgIGZvciAoUmVuZGVyZXJUb0Zsb2F0
SW5mb01hcDo6aXRlcmF0b3IgaXQgPSBmbG9hdE1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKLSAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCA9ICgqaXQpLnNl
Y29uZDsKKyAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCA9ICgqaXQp
LnZhbHVlOwogICAgICAgICAgICAgaWYgKCFmbG9hdGluZ09iamVjdC0+aXNEZXNjZW5kYW50KCkp
IHsKICAgICAgICAgICAgICAgICBjaGFuZ2VMb2dpY2FsVG9wID0gMDsKICAgICAgICAgICAgICAg
ICBjaGFuZ2VMb2dpY2FsQm90dG9tID0gbWF4KGNoYW5nZUxvZ2ljYWxCb3R0b20sIGxvZ2ljYWxC
b3R0b21Gb3JGbG9hdChmbG9hdGluZ09iamVjdCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAppbmRleCBiNjRjMWQzMTU2YWQxMTdh
MjcwOTNiNzUwODIyZjBmODg1Njc5MDk1Li4xOTUzZGQxNTFhM2JlYWE1M2U2OTcxNGRkY2Q3NmI4
NWU1NTZhM2YwIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2tMaW5lTGF5b3V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2tMaW5lTGF5b3V0LmNwcApAQCAtNzA3LDE0ICs3MDcsMTQgQEAgc3RhdGljIGlubGluZSB2b2lk
IHNldExvZ2ljYWxXaWR0aEZvclRleHRSdW4oUm9vdElubGluZUJveCogbGluZUJveCwgQmlkaVJ1
biogcnUKICAgICBpZiAoIWZhbGxiYWNrRm9udHMuaXNFbXB0eSgpKSB7CiAgICAgICAgIEFTU0VS
VChydW4tPm1fYm94LT5pc1RleHQoKSk7CiAgICAgICAgIEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFj
a0ZvbnRzTWFwOjppdGVyYXRvciBpdCA9IHRleHRCb3hEYXRhTWFwLmFkZCh0b0lubGluZVRleHRC
b3gocnVuLT5tX2JveCksIG1ha2VfcGFpcihWZWN0b3I8Y29uc3QgU2ltcGxlRm9udERhdGEqPigp
LCBHbHlwaE92ZXJmbG93KCkpKS5pdGVyYXRvcjsKLSAgICAgICAgQVNTRVJUKGl0LT5zZWNvbmQu
Zmlyc3QuaXNFbXB0eSgpKTsKLSAgICAgICAgY29weVRvVmVjdG9yKGZhbGxiYWNrRm9udHMsIGl0
LT5zZWNvbmQuZmlyc3QpOworICAgICAgICBBU1NFUlQoaXQtPnZhbHVlLmZpcnN0LmlzRW1wdHko
KSk7CisgICAgICAgIGNvcHlUb1ZlY3RvcihmYWxsYmFja0ZvbnRzLCBpdC0+dmFsdWUuZmlyc3Qp
OwogICAgICAgICBydW4tPm1fYm94LT5wYXJlbnQoKS0+Y2xlYXJEZXNjZW5kYW50c0hhdmVTYW1l
TGluZUhlaWdodEFuZEJhc2VsaW5lKCk7CiAgICAgfQogICAgIGlmICgoZ2x5cGhPdmVyZmxvdy50
b3AgfHwgZ2x5cGhPdmVyZmxvdy5ib3R0b20gfHwgZ2x5cGhPdmVyZmxvdy5sZWZ0IHx8IGdseXBo
T3ZlcmZsb3cucmlnaHQpKSB7CiAgICAgICAgIEFTU0VSVChydW4tPm1fYm94LT5pc1RleHQoKSk7
CiAgICAgICAgIEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFwOjppdGVyYXRvciBpdCA9
IHRleHRCb3hEYXRhTWFwLmFkZCh0b0lubGluZVRleHRCb3gocnVuLT5tX2JveCksIG1ha2VfcGFp
cihWZWN0b3I8Y29uc3QgU2ltcGxlRm9udERhdGEqPigpLCBHbHlwaE92ZXJmbG93KCkpKS5pdGVy
YXRvcjsKLSAgICAgICAgaXQtPnNlY29uZC5zZWNvbmQgPSBnbHlwaE92ZXJmbG93OworICAgICAg
ICBpdC0+dmFsdWUuc2Vjb25kID0gZ2x5cGhPdmVyZmxvdzsKICAgICAgICAgcnVuLT5tX2JveC0+
Y2xlYXJLbm93blRvSGF2ZU5vT3ZlcmZsb3coKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAppbmRleCA5OTg5M2ZjZDQ2
NjNiNTY3OTM3ZTk2YmM1OGZhZDY4MDA2YjI1ZTVmLi4zM2Y5M2JkYjE0NmJkMTU3YWZjNmZiMTcw
NzQxY2E3YzEyZmZjNjg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94TW9kZWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCb3hNb2RlbE9iamVjdC5jcHAKQEAgLTEzNyw3ICsxMzcsNyBAQCB2b2lkIEltYWdlUXVhbGl0
eUNvbnRyb2xsZXI6OmhpZ2hRdWFsaXR5UmVwYWludFRpbWVyRmlyZWQoVGltZXI8SW1hZ2VRdWFs
aXR5Q29udAogICAgIGlmIChtX2FuaW1hdGVkUmVzaXplSXNBY3RpdmUpIHsKICAgICAgICAgbV9h
bmltYXRlZFJlc2l6ZUlzQWN0aXZlID0gZmFsc2U7CiAgICAgICAgIGZvciAoT2JqZWN0TGF5ZXJT
aXplTWFwOjppdGVyYXRvciBpdCA9IG1fb2JqZWN0TGF5ZXJTaXplTWFwLmJlZ2luKCk7IGl0ICE9
IG1fb2JqZWN0TGF5ZXJTaXplTWFwLmVuZCgpOyArK2l0KQotICAgICAgICAgICAgaXQtPmZpcnN0
LT5yZXBhaW50KCk7CisgICAgICAgICAgICBpdC0+a2V5LT5yZXBhaW50KCk7CiAgICAgfQogfQog
CkBAIC0xNjIsMTQgKzE2MiwxNCBAQCBib29sIEltYWdlUXVhbGl0eUNvbnRyb2xsZXI6OnNob3Vs
ZFBhaW50QXRMb3dRdWFsaXR5KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgUgogCiAgICAgLy8g
TG9vayBvdXJzZWx2ZXMgdXAgaW4gdGhlIGhhc2h0YWJsZXMuCiAgICAgT2JqZWN0TGF5ZXJTaXpl
TWFwOjppdGVyYXRvciBpID0gbV9vYmplY3RMYXllclNpemVNYXAuZmluZChvYmplY3QpOwotICAg
IExheWVyU2l6ZU1hcCogaW5uZXJNYXAgPSBpICE9IG1fb2JqZWN0TGF5ZXJTaXplTWFwLmVuZCgp
ID8gJmktPnNlY29uZCA6IDA7CisgICAgTGF5ZXJTaXplTWFwKiBpbm5lck1hcCA9IGkgIT0gbV9v
YmplY3RMYXllclNpemVNYXAuZW5kKCkgPyAmaS0+dmFsdWUgOiAwOwogICAgIExheW91dFNpemUg
b2xkU2l6ZTsKICAgICBib29sIGlzRmlyc3RSZXNpemUgPSB0cnVlOwogICAgIGlmIChpbm5lck1h
cCkgewogICAgICAgICBMYXllclNpemVNYXA6Oml0ZXJhdG9yIGogPSBpbm5lck1hcC0+ZmluZChs
YXllcik7CiAgICAgICAgIGlmIChqICE9IGlubmVyTWFwLT5lbmQoKSkgewogICAgICAgICAgICAg
aXNGaXJzdFJlc2l6ZSA9IGZhbHNlOwotICAgICAgICAgICAgb2xkU2l6ZSA9IGotPnNlY29uZDsK
KyAgICAgICAgICAgIG9sZFNpemUgPSBqLT52YWx1ZTsKICAgICAgICAgfQogICAgIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwCmluZGV4IGRlNDVkODk1ZTE3
ZTA5YTcxYjYzOTFkZDk4ZTgyMzA3N2IyMWQxMDcuLjU0NTdhM2ExZGQxNjhiODZlZDNiYWRhNzA3
MGJhNDYzNDRiMzgwMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJDb3VudGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ291bnRl
ci5jcHAKQEAgLTU3MSwxMSArNTcxLDExIEBAIHZvaWQgUmVuZGVyQ291bnRlcjo6ZGVzdHJveUNv
dW50ZXJOb2RlcyhSZW5kZXJPYmplY3QqIG93bmVyKQogICAgIENvdW50ZXJNYXBzOjppdGVyYXRv
ciBtYXBzSXRlcmF0b3IgPSBtYXBzLmZpbmQob3duZXIpOwogICAgIGlmIChtYXBzSXRlcmF0b3Ig
PT0gbWFwcy5lbmQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIENvdW50ZXJNYXAqIG1hcCA9IG1h
cHNJdGVyYXRvci0+c2Vjb25kLmdldCgpOworICAgIENvdW50ZXJNYXAqIG1hcCA9IG1hcHNJdGVy
YXRvci0+dmFsdWUuZ2V0KCk7CiAgICAgQ291bnRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
bWFwLT5lbmQoKTsKICAgICBmb3IgKENvdW50ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFw
LT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgQXRvbWljU3RyaW5nIGlkZW50
aWZpZXIoaXQtPmZpcnN0LmdldCgpKTsKLSAgICAgICAgZGVzdHJveUNvdW50ZXJOb2RlV2l0aG91
dE1hcFJlbW92YWwoaWRlbnRpZmllciwgaXQtPnNlY29uZC5nZXQoKSk7CisgICAgICAgIEF0b21p
Y1N0cmluZyBpZGVudGlmaWVyKGl0LT5rZXkuZ2V0KCkpOworICAgICAgICBkZXN0cm95Q291bnRl
ck5vZGVXaXRob3V0TWFwUmVtb3ZhbChpZGVudGlmaWVyLCBpdC0+dmFsdWUuZ2V0KCkpOwogICAg
IH0KICAgICBtYXBzLnJlbW92ZShtYXBzSXRlcmF0b3IpOwogICAgIG93bmVyLT5zZXRIYXNDb3Vu
dGVyTm9kZU1hcChmYWxzZSk7CkBAIC01ODksNyArNTg5LDcgQEAgdm9pZCBSZW5kZXJDb3VudGVy
OjpkZXN0cm95Q291bnRlck5vZGUoUmVuZGVyT2JqZWN0KiBvd25lciwgY29uc3QgQXRvbWljU3Ry
aW5nJgogICAgIENvdW50ZXJNYXA6Oml0ZXJhdG9yIG1hcEl0ZXJhdG9yID0gbWFwLT5maW5kKGlk
ZW50aWZpZXIuaW1wbCgpKTsKICAgICBpZiAobWFwSXRlcmF0b3IgPT0gbWFwLT5lbmQoKSkKICAg
ICAgICAgcmV0dXJuOwotICAgIGRlc3Ryb3lDb3VudGVyTm9kZVdpdGhvdXRNYXBSZW1vdmFsKGlk
ZW50aWZpZXIsIG1hcEl0ZXJhdG9yLT5zZWNvbmQuZ2V0KCkpOworICAgIGRlc3Ryb3lDb3VudGVy
Tm9kZVdpdGhvdXRNYXBSZW1vdmFsKGlkZW50aWZpZXIsIG1hcEl0ZXJhdG9yLT52YWx1ZS5nZXQo
KSk7CiAgICAgbWFwLT5yZW1vdmUobWFwSXRlcmF0b3IpOwogICAgIC8vIFdlIGRvIG5vdCBkZWxl
dGUgIm1hcCIgaGVyZSBldmVuIGlmIGVtcHR5IGJlY2F1c2Ugd2UgZXhwZWN0IHRvIHJldXNlCiAg
ICAgLy8gaXQgc29vbi4gSW4gb3JkZXIgZm9yIGEgcmVuZGVyZXIgdG8gbG9zZSBhbGwgaXRzIGNv
dW50ZXJzIHBlcm1hbmVudGx5LApAQCAtNjI5LDIyICs2MjksMjIgQEAgc3RhdGljIHZvaWQgdXBk
YXRlQ291bnRlcnMoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKICAgICBDb3VudGVyRGlyZWN0aXZl
TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBkaXJlY3RpdmVNYXAtPmVuZCgpOwogICAgIGlmICgh
cmVuZGVyZXItPmhhc0NvdW50ZXJOb2RlTWFwKCkpIHsKICAgICAgICAgZm9yIChDb3VudGVyRGly
ZWN0aXZlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGRpcmVjdGl2ZU1hcC0+YmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KQotICAgICAgICAgICAgbWFrZUNvdW50ZXJOb2RlKHJlbmRlcmVyLCBBdG9t
aWNTdHJpbmcoaXQtPmZpcnN0LmdldCgpKSwgZmFsc2UpOworICAgICAgICAgICAgbWFrZUNvdW50
ZXJOb2RlKHJlbmRlcmVyLCBBdG9taWNTdHJpbmcoaXQtPmtleS5nZXQoKSksIGZhbHNlKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAgICBDb3VudGVyTWFwKiBjb3VudGVyTWFwID0gY291bnRl
ck1hcHMoKS5nZXQocmVuZGVyZXIpOwogICAgIEFTU0VSVChjb3VudGVyTWFwKTsKICAgICBmb3Ig
KENvdW50ZXJEaXJlY3RpdmVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZGlyZWN0aXZlTWFwLT5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgUmVmUHRyPENvdW50ZXJOb2RlPiBu
b2RlID0gY291bnRlck1hcC0+Z2V0KGl0LT5maXJzdC5nZXQoKSk7CisgICAgICAgIFJlZlB0cjxD
b3VudGVyTm9kZT4gbm9kZSA9IGNvdW50ZXJNYXAtPmdldChpdC0+a2V5LmdldCgpKTsKICAgICAg
ICAgaWYgKCFub2RlKSB7Ci0gICAgICAgICAgICBtYWtlQ291bnRlck5vZGUocmVuZGVyZXIsIEF0
b21pY1N0cmluZyhpdC0+Zmlyc3QuZ2V0KCkpLCBmYWxzZSk7CisgICAgICAgICAgICBtYWtlQ291
bnRlck5vZGUocmVuZGVyZXIsIEF0b21pY1N0cmluZyhpdC0+a2V5LmdldCgpKSwgZmFsc2UpOwog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgUmVmUHRyPENvdW50ZXJO
b2RlPiBuZXdQYXJlbnQgPSAwOwogICAgICAgICBSZWZQdHI8Q291bnRlck5vZGU+IG5ld1ByZXZp
b3VzU2libGluZyA9IDA7CiAgICAgICAgIAotICAgICAgICBmaW5kUGxhY2VGb3JDb3VudGVyKHJl
bmRlcmVyLCBBdG9taWNTdHJpbmcoaXQtPmZpcnN0LmdldCgpKSwgbm9kZS0+aGFzUmVzZXRUeXBl
KCksIG5ld1BhcmVudCwgbmV3UHJldmlvdXNTaWJsaW5nKTsKLSAgICAgICAgaWYgKG5vZGUgIT0g
Y291bnRlck1hcC0+Z2V0KGl0LT5maXJzdC5nZXQoKSkpCisgICAgICAgIGZpbmRQbGFjZUZvckNv
dW50ZXIocmVuZGVyZXIsIEF0b21pY1N0cmluZyhpdC0+a2V5LmdldCgpKSwgbm9kZS0+aGFzUmVz
ZXRUeXBlKCksIG5ld1BhcmVudCwgbmV3UHJldmlvdXNTaWJsaW5nKTsKKyAgICAgICAgaWYgKG5v
ZGUgIT0gY291bnRlck1hcC0+Z2V0KGl0LT5rZXkuZ2V0KCkpKQogICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgIENvdW50ZXJOb2RlKiBwYXJlbnQgPSBub2RlLT5wYXJlbnQoKTsKICAgICAg
ICAgaWYgKG5ld1BhcmVudCA9PSBwYXJlbnQgJiYgbmV3UHJldmlvdXNTaWJsaW5nID09IG5vZGUt
PnByZXZpb3VzU2libGluZygpKQpAQCAtNjUyLDcgKzY1Miw3IEBAIHN0YXRpYyB2b2lkIHVwZGF0
ZUNvdW50ZXJzKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiAgICAgICAgIGlmIChwYXJlbnQpCiAg
ICAgICAgICAgICBwYXJlbnQtPnJlbW92ZUNoaWxkKG5vZGUuZ2V0KCkpOwogICAgICAgICBpZiAo
bmV3UGFyZW50KQotICAgICAgICAgICAgbmV3UGFyZW50LT5pbnNlcnRBZnRlcihub2RlLmdldCgp
LCBuZXdQcmV2aW91c1NpYmxpbmcuZ2V0KCksIGl0LT5maXJzdC5nZXQoKSk7CisgICAgICAgICAg
ICBuZXdQYXJlbnQtPmluc2VydEFmdGVyKG5vZGUuZ2V0KCksIG5ld1ByZXZpb3VzU2libGluZy5n
ZXQoKSwgaXQtPmtleS5nZXQoKSk7CiAgICAgfQogfQogCkBAIC02ODQsMjEgKzY4NCwyMSBAQCB2
b2lkIFJlbmRlckNvdW50ZXI6OnJlbmRlcmVyU3R5bGVDaGFuZ2VkKFJlbmRlck9iamVjdCogcmVu
ZGVyZXIsIGNvbnN0IFJlbmRlclN0eQogICAgICAgICAgICAgQ291bnRlckRpcmVjdGl2ZU1hcDo6
Y29uc3RfaXRlcmF0b3IgbmV3TWFwRW5kID0gbmV3Q291bnRlckRpcmVjdGl2ZXMtPmVuZCgpOwog
ICAgICAgICAgICAgQ291bnRlckRpcmVjdGl2ZU1hcDo6Y29uc3RfaXRlcmF0b3Igb2xkTWFwRW5k
ID0gb2xkQ291bnRlckRpcmVjdGl2ZXMtPmVuZCgpOwogICAgICAgICAgICAgZm9yIChDb3VudGVy
RGlyZWN0aXZlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG5ld0NvdW50ZXJEaXJlY3RpdmVzLT5i
ZWdpbigpOyBpdCAhPSBuZXdNYXBFbmQ7ICsraXQpIHsKLSAgICAgICAgICAgICAgICBDb3VudGVy
RGlyZWN0aXZlTWFwOjpjb25zdF9pdGVyYXRvciBvbGRNYXBJdCA9IG9sZENvdW50ZXJEaXJlY3Rp
dmVzLT5maW5kKGl0LT5maXJzdCk7CisgICAgICAgICAgICAgICAgQ291bnRlckRpcmVjdGl2ZU1h
cDo6Y29uc3RfaXRlcmF0b3Igb2xkTWFwSXQgPSBvbGRDb3VudGVyRGlyZWN0aXZlcy0+ZmluZChp
dC0+a2V5KTsKICAgICAgICAgICAgICAgICBpZiAob2xkTWFwSXQgIT0gb2xkTWFwRW5kKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChvbGRNYXBJdC0+c2Vjb25kID09IGl0LT5zZWNvbmQpCisg
ICAgICAgICAgICAgICAgICAgIGlmIChvbGRNYXBJdC0+dmFsdWUgPT0gaXQtPnZhbHVlKQogICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIFJlbmRl
ckNvdW50ZXI6OmRlc3Ryb3lDb3VudGVyTm9kZShyZW5kZXJlciwgaXQtPmZpcnN0LmdldCgpKTsK
KyAgICAgICAgICAgICAgICAgICAgUmVuZGVyQ291bnRlcjo6ZGVzdHJveUNvdW50ZXJOb2RlKHJl
bmRlcmVyLCBpdC0+a2V5LmdldCgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgLy8gV2UgbXVzdCBjcmVhdGUgdGhpcyBub2RlIGhlcmUsIGJlY2F1c2UgdGhlIGNoYW5nZWQg
bm9kZSBtYXkgYmUgYSBub2RlIHdpdGggbm8gZGlzcGxheSBzdWNoIGFzCiAgICAgICAgICAgICAg
ICAgLy8gYXMgdGhvc2UgY3JlYXRlZCBieSB0aGUgaW5jcmVtZW50IG9yIHJlc2V0IGRpcmVjdGl2
ZXMgYW5kIHRoZSByZS1sYXlvdXQgdGhhdCB3aWxsIGhhcHBlbiB3aWxsCiAgICAgICAgICAgICAg
ICAgLy8gbm90IGNhdGNoIHRoZSBjaGFuZ2UgaWYgdGhlIG5vZGUgaGFkIG5vIGNoaWxkcmVuLgot
ICAgICAgICAgICAgICAgIG1ha2VDb3VudGVyTm9kZShyZW5kZXJlciwgaXQtPmZpcnN0LmdldCgp
LCBmYWxzZSk7CisgICAgICAgICAgICAgICAgbWFrZUNvdW50ZXJOb2RlKHJlbmRlcmVyLCBpdC0+
a2V5LmdldCgpLCBmYWxzZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyBEZXN0cm95
aW5nIG9sZCBjb3VudGVycyB0aGF0IGRvIG5vdCBleGlzdCBpbiB0aGUgbmV3IGNvdW50ZXJEaXJl
Y3RpdmUgbWFwLgogICAgICAgICAgICAgZm9yIChDb3VudGVyRGlyZWN0aXZlTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IG9sZENvdW50ZXJEaXJlY3RpdmVzLT5iZWdpbigpOyBpdCAhPW9sZE1hcEVu
ZDsgKytpdCkgewotICAgICAgICAgICAgICAgIGlmICghbmV3Q291bnRlckRpcmVjdGl2ZXMtPmNv
bnRhaW5zKGl0LT5maXJzdCkpCi0gICAgICAgICAgICAgICAgICAgIFJlbmRlckNvdW50ZXI6OmRl
c3Ryb3lDb3VudGVyTm9kZShyZW5kZXJlciwgaXQtPmZpcnN0LmdldCgpKTsKKyAgICAgICAgICAg
ICAgICBpZiAoIW5ld0NvdW50ZXJEaXJlY3RpdmVzLT5jb250YWlucyhpdC0+a2V5KSkKKyAgICAg
ICAgICAgICAgICAgICAgUmVuZGVyQ291bnRlcjo6ZGVzdHJveUNvdW50ZXJOb2RlKHJlbmRlcmVy
LCBpdC0+a2V5LmdldCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgIGlmIChyZW5kZXJlci0+aGFzQ291bnRlck5vZGVNYXAoKSkKQEAgLTcxMCw3ICs3MTAs
NyBAQCB2b2lkIFJlbmRlckNvdW50ZXI6OnJlbmRlcmVyU3R5bGVDaGFuZ2VkKFJlbmRlck9iamVj
dCogcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eQogICAgICAgICAgICAgLy8gV2UgbXVzdCBjcmVh
dGUgdGhpcyBub2RlIGhlcmUsIGJlY2F1c2UgdGhlIGFkZGVkIG5vZGUgbWF5IGJlIGEgbm9kZSB3
aXRoIG5vIGRpc3BsYXkgc3VjaCBhcwogICAgICAgICAgICAgLy8gYXMgdGhvc2UgY3JlYXRlZCBi
eSB0aGUgaW5jcmVtZW50IG9yIHJlc2V0IGRpcmVjdGl2ZXMgYW5kIHRoZSByZS1sYXlvdXQgdGhh
dCB3aWxsIGhhcHBlbiB3aWxsCiAgICAgICAgICAgICAvLyBub3QgY2F0Y2ggdGhlIGNoYW5nZSBp
ZiB0aGUgbm9kZSBoYWQgbm8gY2hpbGRyZW4uCi0gICAgICAgICAgICBtYWtlQ291bnRlck5vZGUo
cmVuZGVyZXIsIGl0LT5maXJzdC5nZXQoKSwgZmFsc2UpOworICAgICAgICAgICAgbWFrZUNvdW50
ZXJOb2RlKHJlbmRlcmVyLCBpdC0+a2V5LmdldCgpLCBmYWxzZSk7CiAgICAgICAgIH0KICAgICB9
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVh
ZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAKaW5k
ZXggZDMwNTlkZjEzNTA0MTllMGUxZGJjYTJhYjU1MThlNmIxZjQ4ZmY1MS4uNzdmMmVmNzI4NWJl
YTI3OTE1MWUyNzcxMTUxNDc2YWE3ZGJjYTNhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcApAQCAtNjIwLDcgKzYyMCw3IEBAIHZvaWQgUmVuZGVy
Rmxvd1RocmVhZDo6c2V0UmVnaW9uUmFuZ2VGb3JCb3goY29uc3QgUmVuZGVyQm94KiBib3gsIExh
eW91dFVuaXQgb2ZmCiAgICAgfQogCiAgICAgLy8gSWYgbm90aGluZyBjaGFuZ2VkLCBqdXN0IGJh
aWwuCi0gICAgUmVuZGVyUmVnaW9uUmFuZ2UmIHJhbmdlID0gaXQtPnNlY29uZDsKKyAgICBSZW5k
ZXJSZWdpb25SYW5nZSYgcmFuZ2UgPSBpdC0+dmFsdWU7CiAgICAgaWYgKHJhbmdlLnN0YXJ0UmVn
aW9uKCkgPT0gc3RhcnRSZWdpb24gJiYgcmFuZ2UuZW5kUmVnaW9uKCkgPT0gZW5kUmVnaW9uKQog
ICAgICAgICByZXR1cm47CiAKQEAgLTY1MCw3ICs2NTAsNyBAQCB2b2lkIFJlbmRlckZsb3dUaHJl
YWQ6OmdldFJlZ2lvblJhbmdlRm9yQm94KGNvbnN0IFJlbmRlckJveCogYm94LCBSZW5kZXJSZWdp
b24qJgogICAgIGlmIChpdCA9PSBtX3JlZ2lvblJhbmdlTWFwLmVuZCgpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBjb25zdCBSZW5kZXJSZWdpb25SYW5nZSYgcmFuZ2UgPSBpdC0+c2Vjb25kOwor
ICAgIGNvbnN0IFJlbmRlclJlZ2lvblJhbmdlJiByYW5nZSA9IGl0LT52YWx1ZTsKICAgICBzdGFy
dFJlZ2lvbiA9IHJhbmdlLnN0YXJ0UmVnaW9uKCk7CiAgICAgZW5kUmVnaW9uID0gcmFuZ2UuZW5k
UmVnaW9uKCk7CiAgICAgQVNTRVJUKG1fcmVnaW9uTGlzdC5jb250YWlucyhzdGFydFJlZ2lvbikg
JiYgbV9yZWdpb25MaXN0LmNvbnRhaW5zKGVuZFJlZ2lvbikpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllci5jcHAKaW5kZXggMmQ5MWZkOGIyZWUxZmEzMzFmNjU2ZDhjNjc0Y2Yz
OGNjZDZhYjEyMi4uNTViNzYxNTcyMzBmZTY0M2YzZDhmMGU1YzhhM2ZiOWU0NjU4YzMyZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCkBAIC0yODcxLDcgKzI4NzEs
NyBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QsCiAgICAgcGFpbnRMYXllcih0aGlzLCBjb250ZXh0
LCBlbmNsb3NpbmdJbnRSZWN0KGRhbWFnZVJlY3QpLCBMYXlvdXRTaXplKCksIHBhaW50QmVoYXZp
b3IsIHBhaW50aW5nUm9vdCwgcmVnaW9uLCAmb3ZlcmxhcFRlc3RSZXF1ZXN0cywgcGFpbnRGbGFn
cyk7CiAgICAgT3ZlcmxhcFRlc3RSZXF1ZXN0TWFwOjppdGVyYXRvciBlbmQgPSBvdmVybGFwVGVz
dFJlcXVlc3RzLmVuZCgpOwogICAgIGZvciAoT3ZlcmxhcFRlc3RSZXF1ZXN0TWFwOjppdGVyYXRv
ciBpdCA9IG92ZXJsYXBUZXN0UmVxdWVzdHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAg
ICAgICBpdC0+Zmlyc3QtPnNldE92ZXJsYXBUZXN0UmVzdWx0KGZhbHNlKTsKKyAgICAgICAgaXQt
PmtleS0+c2V0T3ZlcmxhcFRlc3RSZXN1bHQoZmFsc2UpOwogfQogCiB2b2lkIFJlbmRlckxheWVy
OjpwYWludE92ZXJsYXlTY3JvbGxiYXJzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3Qg
TGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwgUGFpbnRCZWhhdmlvciBwYWludEJlaGF2aW9yLCBSZW5k
ZXJPYmplY3QqIHBhaW50aW5nUm9vdCkKQEAgLTI5NDAsMTEgKzI5NDAsMTEgQEAgc3RhdGljIHZv
aWQgcGVyZm9ybU92ZXJsYXBUZXN0cyhPdmVybGFwVGVzdFJlcXVlc3RNYXAmIG92ZXJsYXBUZXN0
UmVxdWVzdHMsIGNvbnMKICAgICBPdmVybGFwVGVzdFJlcXVlc3RNYXA6Oml0ZXJhdG9yIGVuZCA9
IG92ZXJsYXBUZXN0UmVxdWVzdHMuZW5kKCk7CiAgICAgTGF5b3V0UmVjdCBib3VuZGluZ0JveCA9
IGxheWVyLT5ib3VuZGluZ0JveChyb290TGF5ZXIpOwogICAgIGZvciAoT3ZlcmxhcFRlc3RSZXF1
ZXN0TWFwOjppdGVyYXRvciBpdCA9IG92ZXJsYXBUZXN0UmVxdWVzdHMuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmICghYm91bmRpbmdCb3guaW50ZXJzZWN0cyhpdC0+c2Vj
b25kKSkKKyAgICAgICAgaWYgKCFib3VuZGluZ0JveC5pbnRlcnNlY3RzKGl0LT52YWx1ZSkpCiAg
ICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBpdC0+Zmlyc3QtPnNldE92ZXJsYXBUZXN0
UmVzdWx0KHRydWUpOwotICAgICAgICBvdmVybGFwcGVkUmVxdWVzdENsaWVudHMuYXBwZW5kKGl0
LT5maXJzdCk7CisgICAgICAgIGl0LT5rZXktPnNldE92ZXJsYXBUZXN0UmVzdWx0KHRydWUpOwor
ICAgICAgICBvdmVybGFwcGVkUmVxdWVzdENsaWVudHMuYXBwZW5kKGl0LT5rZXkpOwogICAgIH0K
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG92ZXJsYXBwZWRSZXF1ZXN0Q2xpZW50cy5zaXpl
KCk7ICsraSkKICAgICAgICAgb3ZlcmxhcFRlc3RSZXF1ZXN0cy5yZW1vdmUob3ZlcmxhcHBlZFJl
cXVlc3RDbGllbnRzW2ldKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllckZpbHRlckluZm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyRmlsdGVySW5mby5jcHAKaW5kZXggYWNiZjA3ZDlkMWJmZDIwMjFjNTU0MTUyNjZkZDQ0
MzA1MDU1NWE3ZC4uY2I0YzVkNjYxMTBjOTI0MTJmMzUwZWE4OTkzMjcyY2U2MmNkN2UwOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVySW5mby5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVySW5mby5j
cHAKQEAgLTU2LDcgKzU2LDcgQEAgUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvKiBSZW5kZXJMYXllckZp
bHRlckluZm86OmZpbHRlckluZm9Gb3JSZW5kZXJMYXllcihjb25zdCBSZW4KICAgICBpZiAoIXNf
ZmlsdGVyTWFwKQogICAgICAgICByZXR1cm4gMDsKICAgICBSZW5kZXJMYXllckZpbHRlckluZm9N
YXA6Oml0ZXJhdG9yIGl0ZXIgPSBzX2ZpbHRlck1hcC0+ZmluZChsYXllcik7Ci0gICAgcmV0dXJu
IChpdGVyICE9IHNfZmlsdGVyTWFwLT5lbmQoKSkgPyBpdGVyLT5zZWNvbmQgOiAwOworICAgIHJl
dHVybiAoaXRlciAhPSBzX2ZpbHRlck1hcC0+ZW5kKCkpID8gaXRlci0+dmFsdWUgOiAwOwogfQog
CiBSZW5kZXJMYXllckZpbHRlckluZm8qIFJlbmRlckxheWVyRmlsdGVySW5mbzo6Y3JlYXRlRmls
dGVySW5mb0ZvclJlbmRlckxheWVySWZOZWVkZWQoUmVuZGVyTGF5ZXIqIGxheWVyKQpAQCAtNjcs
NyArNjcsNyBAQCBSZW5kZXJMYXllckZpbHRlckluZm8qIFJlbmRlckxheWVyRmlsdGVySW5mbzo6
Y3JlYXRlRmlsdGVySW5mb0ZvclJlbmRlckxheWVySWZOZQogICAgIFJlbmRlckxheWVyRmlsdGVy
SW5mb01hcDo6aXRlcmF0b3IgaXRlciA9IHNfZmlsdGVyTWFwLT5maW5kKGxheWVyKTsKICAgICBp
ZiAoaXRlciAhPSBzX2ZpbHRlck1hcC0+ZW5kKCkpIHsKICAgICAgICAgQVNTRVJUKGxheWVyLT5o
YXNGaWx0ZXJJbmZvKCkpOwotICAgICAgICByZXR1cm4gaXRlci0+c2Vjb25kOworICAgICAgICBy
ZXR1cm4gaXRlci0+dmFsdWU7CiAgICAgfQogICAgIAogICAgIFJlbmRlckxheWVyRmlsdGVySW5m
byogZmlsdGVyID0gbmV3IFJlbmRlckxheWVyRmlsdGVySW5mbyhsYXllcik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93VGhyZWFkLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3BwCmluZGV4IDVi
MDI0NTNlNGM2YzNkYmFlZDYzZGRhNTBlYTMzOTRjYmU0N2NmMjQuLmMxMmZjZjczZmQ2ZGYyNjQx
YWYyMjVjOTE5MmM3YTcyOTUyODk3OWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3BwCkBAIC0xMTcsNyArMTE3LDcgQEAgYm9vbCBS
ZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OmRlcGVuZHNPbihSZW5kZXJOYW1lZEZsb3dUaHJlYWQqIG90
aGVyUmVuZGVyRmxvd1RocmUKICAgICBSZW5kZXJOYW1lZEZsb3dUaHJlYWRDb3VudGVkU2V0Ojpj
b25zdF9pdGVyYXRvciBpdGVyYXRvciA9IG1fbGF5b3V0QmVmb3JlVGhyZWFkc1NldC5iZWdpbigp
OwogICAgIFJlbmRlck5hbWVkRmxvd1RocmVhZENvdW50ZWRTZXQ6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IG1fbGF5b3V0QmVmb3JlVGhyZWFkc1NldC5lbmQoKTsKICAgICBmb3IgKDsgaXRlcmF0b3Ig
IT0gZW5kOyArK2l0ZXJhdG9yKSB7Ci0gICAgICAgIGNvbnN0IFJlbmRlck5hbWVkRmxvd1RocmVh
ZCogYmVmb3JlRmxvd1RocmVhZCA9ICgqaXRlcmF0b3IpLmZpcnN0OworICAgICAgICBjb25zdCBS
ZW5kZXJOYW1lZEZsb3dUaHJlYWQqIGJlZm9yZUZsb3dUaHJlYWQgPSAoKml0ZXJhdG9yKS5rZXk7
CiAgICAgICAgIGlmIChiZWZvcmVGbG93VGhyZWFkLT5kZXBlbmRzT24ob3RoZXJSZW5kZXJGbG93
VGhyZWFkKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTI1MSw3ICsyNTEs
NyBAQCB2b2lkIFJlbmRlck5hbWVkRmxvd1RocmVhZDo6cmVtb3ZlRGVwZW5kZW5jeU9uRmxvd1Ro
cmVhZChSZW5kZXJOYW1lZEZsb3dUaHJlYWQqCiB2b2lkIFJlbmRlck5hbWVkRmxvd1RocmVhZDo6
cHVzaERlcGVuZGVuY2llcyhSZW5kZXJOYW1lZEZsb3dUaHJlYWRMaXN0JiBsaXN0KQogewogICAg
IGZvciAoUmVuZGVyTmFtZWRGbG93VGhyZWFkQ291bnRlZFNldDo6aXRlcmF0b3IgaXRlciA9IG1f
bGF5b3V0QmVmb3JlVGhyZWFkc1NldC5iZWdpbigpOyBpdGVyICE9IG1fbGF5b3V0QmVmb3JlVGhy
ZWFkc1NldC5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIFJlbmRlck5hbWVkRmxvd1RocmVhZCog
Zmxvd1RocmVhZCA9ICgqaXRlcikuZmlyc3Q7CisgICAgICAgIFJlbmRlck5hbWVkRmxvd1RocmVh
ZCogZmxvd1RocmVhZCA9ICgqaXRlcikua2V5OwogICAgICAgICBpZiAobGlzdC5jb250YWlucyhm
bG93VGhyZWFkKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBmbG93VGhyZWFkLT5w
dXNoRGVwZW5kZW5jaWVzKGxpc3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclJlZ2lvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVn
aW9uLmNwcAppbmRleCBkYmRiZTgzZjdiNWM1ODMxZjhmOTQ0MWJmMDEwNTg0MzYxOWExMzZmLi5k
NzkyYjgwMTkwM2IxMTBjZDI4ZjUwMzVjYzdiMmVmNWU5Y2FkNDM5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcApAQCAtMjU4LDcgKzI1OCw3IEBAIFJlbmRlckJv
eFJlZ2lvbkluZm8qIFJlbmRlclJlZ2lvbjo6c2V0UmVuZGVyQm94UmVnaW9uSW5mbyhjb25zdCBS
ZW5kZXJCb3gqIGJveCwKICAgICBpZiAoIW1faXNWYWxpZCB8fCAhbV9mbG93VGhyZWFkKQogICAg
ICAgICByZXR1cm4gMDsKIAotICAgIE93blB0cjxSZW5kZXJCb3hSZWdpb25JbmZvPiYgYm94SW5m
byA9IG1fcmVuZGVyQm94UmVnaW9uSW5mby5hZGQoYm94LCBudWxscHRyKS5pdGVyYXRvci0+c2Vj
b25kOworICAgIE93blB0cjxSZW5kZXJCb3hSZWdpb25JbmZvPiYgYm94SW5mbyA9IG1fcmVuZGVy
Qm94UmVnaW9uSW5mby5hZGQoYm94LCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYg
KGJveEluZm8pCiAgICAgICAgICpib3hJbmZvID0gUmVuZGVyQm94UmVnaW9uSW5mbyhsb2dpY2Fs
TGVmdEluc2V0LCBsb2dpY2FsUmlnaHRJbnNldCwgY29udGFpbmluZ0Jsb2NrQ2hhaW5Jc0luc2V0
KTsKICAgICBlbHNlCkBAIC0zMTgsOCArMzE4LDggQEAgdm9pZCBSZW5kZXJSZWdpb246OnNldFJl
Z2lvbk9iamVjdHNSZWdpb25TdHlsZSgpCiAgICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gb2Jq
ZWN0U3R5bGVJblJlZ2lvbjsKICAgICAgICAgYm9vbCBvYmplY3RSZWdpb25TdHlsZUNhY2hlZCA9
IGZhbHNlOwogICAgICAgICBpZiAoaXQgIT0gbV9yZW5kZXJPYmplY3RSZWdpb25TdHlsZS5lbmQo
KSkgewotICAgICAgICAgICAgb2JqZWN0U3R5bGVJblJlZ2lvbiA9IGl0LT5zZWNvbmQuc3R5bGU7
Ci0gICAgICAgICAgICBBU1NFUlQoaXQtPnNlY29uZC5jYWNoZWQpOworICAgICAgICAgICAgb2Jq
ZWN0U3R5bGVJblJlZ2lvbiA9IGl0LT52YWx1ZS5zdHlsZTsKKyAgICAgICAgICAgIEFTU0VSVChp
dC0+dmFsdWUuY2FjaGVkKTsKICAgICAgICAgICAgIG9iamVjdFJlZ2lvblN0eWxlQ2FjaGVkID0g
dHJ1ZTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBvYmplY3RTdHlsZUluUmVnaW9uID0g
Y29tcHV0ZVN0eWxlSW5SZWdpb24ob2JqZWN0KTsKQEAgLTMzNywxMiArMzM3LDEyIEBAIHZvaWQg
UmVuZGVyUmVnaW9uOjpyZXN0b3JlUmVnaW9uT2JqZWN0c09yaWdpbmFsU3R5bGUoKQogCiAgICAg
UmVuZGVyT2JqZWN0UmVnaW9uU3R5bGVNYXAgdGVtcDsKICAgICBmb3IgKFJlbmRlck9iamVjdFJl
Z2lvblN0eWxlTWFwOjppdGVyYXRvciBpdGVyID0gbV9yZW5kZXJPYmplY3RSZWdpb25TdHlsZS5i
ZWdpbigpLCBlbmQgPSBtX3JlbmRlck9iamVjdFJlZ2lvblN0eWxlLmVuZCgpOyBpdGVyICE9IGVu
ZDsgKytpdGVyKSB7Ci0gICAgICAgIFJlbmRlck9iamVjdCogb2JqZWN0ID0gY29uc3RfY2FzdDxS
ZW5kZXJPYmplY3QqPihpdGVyLT5maXJzdCk7CisgICAgICAgIFJlbmRlck9iamVjdCogb2JqZWN0
ID0gY29uc3RfY2FzdDxSZW5kZXJPYmplY3QqPihpdGVyLT5rZXkpOwogICAgICAgICBSZWZQdHI8
UmVuZGVyU3R5bGU+IG9iamVjdFJlZ2lvblN0eWxlID0gb2JqZWN0LT5zdHlsZSgpOwotICAgICAg
ICBSZWZQdHI8UmVuZGVyU3R5bGU+IG9iamVjdE9yaWdpbmFsU3R5bGUgPSBpdGVyLT5zZWNvbmQu
c3R5bGU7CisgICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gb2JqZWN0T3JpZ2luYWxTdHlsZSA9
IGl0ZXItPnZhbHVlLnN0eWxlOwogICAgICAgICBvYmplY3QtPnNldFN0eWxlSW50ZXJuYWwob2Jq
ZWN0T3JpZ2luYWxTdHlsZSk7CiAKLSAgICAgICAgYm9vbCBzaG91bGRDYWNoZVJlZ2lvblN0eWxl
ID0gaXRlci0+c2Vjb25kLmNhY2hlZDsKKyAgICAgICAgYm9vbCBzaG91bGRDYWNoZVJlZ2lvblN0
eWxlID0gaXRlci0+dmFsdWUuY2FjaGVkOwogICAgICAgICBpZiAoIXNob3VsZENhY2hlUmVnaW9u
U3R5bGUpIHsKICAgICAgICAgICAgIC8vIENoZWNrIHdoZXRoZXIgd2Ugc2hvdWxkIGNhY2hlIHRo
ZSBjb21wdXRlZCBzdHlsZSBpbiByZWdpb24uCiAgICAgICAgICAgICB1bnNpZ25lZCBjaGFuZ2Vk
Q29udGV4dFNlbnNpdGl2ZVByb3BlcnRpZXMgPSBDb250ZXh0U2Vuc2l0aXZlUHJvcGVydHlOb25l
OwpAQCAtMzk4LDcgKzM5OCw3IEBAIHZvaWQgUmVuZGVyUmVnaW9uOjpjb21wdXRlQ2hpbGRyZW5T
dHlsZUluUmVnaW9uKGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0KQogICAgICAgICBSZWZQdHI8
UmVuZGVyU3R5bGU+IGNoaWxkU3R5bGVJblJlZ2lvbjsKICAgICAgICAgYm9vbCBvYmplY3RSZWdp
b25TdHlsZUNhY2hlZCA9IGZhbHNlOwogICAgICAgICBpZiAoaXQgIT0gbV9yZW5kZXJPYmplY3RS
ZWdpb25TdHlsZS5lbmQoKSkgewotICAgICAgICAgICAgY2hpbGRTdHlsZUluUmVnaW9uID0gaXQt
PnNlY29uZC5zdHlsZTsKKyAgICAgICAgICAgIGNoaWxkU3R5bGVJblJlZ2lvbiA9IGl0LT52YWx1
ZS5zdHlsZTsKICAgICAgICAgICAgIG9iamVjdFJlZ2lvblN0eWxlQ2FjaGVkID0gdHJ1ZTsKICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChjaGlsZC0+aXNBbm9ueW1vdXMoKSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKaW5kZXgg
NWMwOGU3YTFjZTQwMDQ2ZmNlZGU5MTQ0NTcyMmM5YTJmY2M1MTllZC4uYmM0ZDkwNDRmNmU4ZDNh
N2M2M2IzMjk2ZjVlZjM3MmU1MzkxMTJlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKQEAgLTE0NTAsNyArMTQ1MCw3IEBAIENvbGxhcHNl
ZEJvcmRlclZhbHVlJiBSZW5kZXJUYWJsZVNlY3Rpb246OmNhY2hlZENvbGxhcHNlZEJvcmRlcihj
b25zdCBSZW5kZXJUYWJsCiAgICAgQVNTRVJUKHRhYmxlKCktPmNvbGxhcHNlQm9yZGVycygpKTsK
ICAgICBIYXNoTWFwPHBhaXI8Y29uc3QgUmVuZGVyVGFibGVDZWxsKiwgaW50PiwgQ29sbGFwc2Vk
Qm9yZGVyVmFsdWU+OjppdGVyYXRvciBpdCA9IG1fY2VsbHNDb2xsYXBzZWRCb3JkZXJzLmZpbmQo
bWFrZV9wYWlyKGNlbGwsIHNpZGUpKTsKICAgICBBU1NFUlQoaXQgIT0gbV9jZWxsc0NvbGxhcHNl
ZEJvcmRlcnMuZW5kKCkpOwotICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgIHJldHVybiBpdC0+
dmFsdWU7CiB9CiAKIFJlbmRlclRhYmxlU2VjdGlvbiogUmVuZGVyVGFibGVTZWN0aW9uOjpjcmVh
dGVBbm9ueW1vdXNXaXRoUGFyZW50UmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0KiBwYXJlbnQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0g
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KaW5kZXggMGJjOTgw
NGZiNzU5YjExZWQ5NmE0MDkxMDZhMDExNjc5OGMyMDRiZS4uNjQwNGQyYWZjMTQ2ZTgxNTU4MDVi
OWVhZTgwODRiMmE0MGI4MWYzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZU1hYy5tbQpAQCAtMzgwLDcgKzM4MCw3IEBAIENvbG9yIFJlbmRlclRoZW1lTWFjOjpzeXN0
ZW1Db2xvcihpbnQgY3NzVmFsdWVJZCkgY29uc3QKICAgICB7CiAgICAgICAgIEhhc2hNYXA8aW50
LCBSR0JBMzI+OjppdGVyYXRvciBpdCA9IG1fc3lzdGVtQ29sb3JDYWNoZS5maW5kKGNzc1ZhbHVl
SWQpOwogICAgICAgICBpZiAoaXQgIT0gbV9zeXN0ZW1Db2xvckNhY2hlLmVuZCgpKQotICAgICAg
ICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwog
ICAgIH0KIAogICAgIENvbG9yIGNvbG9yOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZp
ZXcuY3BwCmluZGV4IDhjYzM0YTMzMGRjODgyNTZkNTUxODBlMGI1NWIzNDQ4N2Y3OGVjYjUuLjhm
ZGM5NGJmY2Q0NjM3Zjk0NzljOWNlZWRhMzA3MjU3MzEwMGYzMzMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKQEAgLTQzOCw3ICs0MzgsNyBAQCBJbnRSZWN0IFJlbmRl
clZpZXc6OnNlbGVjdGlvbkJvdW5kcyhib29sIGNsaXBUb1Zpc2libGVDb250ZW50KSBjb25zdAog
ICAgICAgICAgICAgc2VsZWN0ZWRPYmplY3RzLnNldChvcywgYWRvcHRQdHIobmV3IFJlbmRlclNl
bGVjdGlvbkluZm8ob3MsIGNsaXBUb1Zpc2libGVDb250ZW50KSkpOwogICAgICAgICAgICAgUmVu
ZGVyQmxvY2sqIGNiID0gb3MtPmNvbnRhaW5pbmdCbG9jaygpOwogICAgICAgICAgICAgd2hpbGUg
KGNiICYmICFjYi0+aXNSZW5kZXJWaWV3KCkpIHsKLSAgICAgICAgICAgICAgICBPd25QdHI8UmVu
ZGVyU2VsZWN0aW9uSW5mbz4mIGJsb2NrSW5mbyA9IHNlbGVjdGVkT2JqZWN0cy5hZGQoY2IsIG51
bGxwdHIpLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgICAgICAgICAgT3duUHRyPFJlbmRlclNl
bGVjdGlvbkluZm8+JiBibG9ja0luZm8gPSBzZWxlY3RlZE9iamVjdHMuYWRkKGNiLCBudWxscHRy
KS5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgICAgICAgICAgaWYgKGJsb2NrSW5mbykKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgYmxvY2tJbmZvID0gYWRvcHRQ
dHIobmV3IFJlbmRlclNlbGVjdGlvbkluZm8oY2IsIGNsaXBUb1Zpc2libGVDb250ZW50KSk7CkBA
IC00NTMsNyArNDUzLDcgQEAgSW50UmVjdCBSZW5kZXJWaWV3OjpzZWxlY3Rpb25Cb3VuZHMoYm9v
bCBjbGlwVG9WaXNpYmxlQ29udGVudCkgY29uc3QKICAgICBMYXlvdXRSZWN0IHNlbFJlY3Q7CiAg
ICAgU2VsZWN0aW9uTWFwOjppdGVyYXRvciBlbmQgPSBzZWxlY3RlZE9iamVjdHMuZW5kKCk7CiAg
ICAgZm9yIChTZWxlY3Rpb25NYXA6Oml0ZXJhdG9yIGkgPSBzZWxlY3RlZE9iamVjdHMuYmVnaW4o
KTsgaSAhPSBlbmQ7ICsraSkgewotICAgICAgICBSZW5kZXJTZWxlY3Rpb25JbmZvKiBpbmZvID0g
aS0+c2Vjb25kLmdldCgpOworICAgICAgICBSZW5kZXJTZWxlY3Rpb25JbmZvKiBpbmZvID0gaS0+
dmFsdWUuZ2V0KCk7CiAgICAgICAgIC8vIFJlbmRlclNlbGVjdGlvbkluZm86OnJlY3QoKSBpcyBp
biB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIHJlcGFpbnRDb250YWluZXIsIHNvIG1hcCB0byBwYWdl
IGNvb3JkaW5hdGVzLgogICAgICAgICBMYXlvdXRSZWN0IGN1cnJSZWN0ID0gaW5mby0+cmVjdCgp
OwogICAgICAgICBpZiAoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIgPSBp
bmZvLT5yZXBhaW50Q29udGFpbmVyKCkpIHsKQEAgLTUxOCw3ICs1MTgsNyBAQCB2b2lkIFJlbmRl
clZpZXc6OnNldFNlbGVjdGlvbihSZW5kZXJPYmplY3QqIHN0YXJ0LCBpbnQgc3RhcnRQb3MsIFJl
bmRlck9iamVjdCogZQogICAgICAgICAgICAgaWYgKGJsb2NrUmVwYWludE1vZGUgPT0gUmVwYWlu
dE5ld1hPUk9sZCkgewogICAgICAgICAgICAgICAgIFJlbmRlckJsb2NrKiBjYiA9IG9zLT5jb250
YWluaW5nQmxvY2soKTsKICAgICAgICAgICAgICAgICB3aGlsZSAoY2IgJiYgIWNiLT5pc1JlbmRl
clZpZXcoKSkgewotICAgICAgICAgICAgICAgICAgICBPd25QdHI8UmVuZGVyQmxvY2tTZWxlY3Rp
b25JbmZvPiYgYmxvY2tJbmZvID0gb2xkU2VsZWN0ZWRCbG9ja3MuYWRkKGNiLCBudWxscHRyKS5p
dGVyYXRvci0+c2Vjb25kOworICAgICAgICAgICAgICAgICAgICBPd25QdHI8UmVuZGVyQmxvY2tT
ZWxlY3Rpb25JbmZvPiYgYmxvY2tJbmZvID0gb2xkU2VsZWN0ZWRCbG9ja3MuYWRkKGNiLCBudWxs
cHRyKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgICAgICAgICAgICAgIGlmIChibG9ja0luZm8p
CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgYmxv
Y2tJbmZvID0gYWRvcHRQdHIobmV3IFJlbmRlckJsb2NrU2VsZWN0aW9uSW5mbyhjYikpOwpAQCAt
NTMzLDcgKzUzMyw3IEBAIHZvaWQgUmVuZGVyVmlldzo6c2V0U2VsZWN0aW9uKFJlbmRlck9iamVj
dCogc3RhcnQsIGludCBzdGFydFBvcywgUmVuZGVyT2JqZWN0KiBlCiAgICAgLy8gTm93IGNsZWFy
IHRoZSBzZWxlY3Rpb24uCiAgICAgU2VsZWN0ZWRPYmplY3RNYXA6Oml0ZXJhdG9yIG9sZE9iamVj
dHNFbmQgPSBvbGRTZWxlY3RlZE9iamVjdHMuZW5kKCk7CiAgICAgZm9yIChTZWxlY3RlZE9iamVj
dE1hcDo6aXRlcmF0b3IgaSA9IG9sZFNlbGVjdGVkT2JqZWN0cy5iZWdpbigpOyBpICE9IG9sZE9i
amVjdHNFbmQ7ICsraSkKLSAgICAgICAgaS0+Zmlyc3QtPnNldFNlbGVjdGlvblN0YXRlSWZOZWVk
ZWQoU2VsZWN0aW9uTm9uZSk7CisgICAgICAgIGktPmtleS0+c2V0U2VsZWN0aW9uU3RhdGVJZk5l
ZWRlZChTZWxlY3Rpb25Ob25lKTsKIAogICAgIC8vIHNldCBzZWxlY3Rpb24gc3RhcnQgYW5kIGVu
ZAogICAgIG1fc2VsZWN0aW9uU3RhcnQgPSBzdGFydDsKQEAgLTU3MSw3ICs1NzEsNyBAQCB2b2lk
IFJlbmRlclZpZXc6OnNldFNlbGVjdGlvbihSZW5kZXJPYmplY3QqIHN0YXJ0LCBpbnQgc3RhcnRQ
b3MsIFJlbmRlck9iamVjdCogZQogICAgICAgICAgICAgbmV3U2VsZWN0ZWRPYmplY3RzLnNldChv
LCBhZG9wdFB0cihuZXcgUmVuZGVyU2VsZWN0aW9uSW5mbyhvLCB0cnVlKSkpOwogICAgICAgICAg
ICAgUmVuZGVyQmxvY2sqIGNiID0gby0+Y29udGFpbmluZ0Jsb2NrKCk7CiAgICAgICAgICAgICB3
aGlsZSAoY2IgJiYgIWNiLT5pc1JlbmRlclZpZXcoKSkgewotICAgICAgICAgICAgICAgIE93blB0
cjxSZW5kZXJCbG9ja1NlbGVjdGlvbkluZm8+JiBibG9ja0luZm8gPSBuZXdTZWxlY3RlZEJsb2Nr
cy5hZGQoY2IsIG51bGxwdHIpLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgICAgICAgICAgT3du
UHRyPFJlbmRlckJsb2NrU2VsZWN0aW9uSW5mbz4mIGJsb2NrSW5mbyA9IG5ld1NlbGVjdGVkQmxv
Y2tzLmFkZChjYiwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwogICAgICAgICAgICAgICAgIGlm
IChibG9ja0luZm8pCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
IGJsb2NrSW5mbyA9IGFkb3B0UHRyKG5ldyBSZW5kZXJCbG9ja1NlbGVjdGlvbkluZm8oY2IpKTsK
QEAgLTU4OSw5ICs1ODksOSBAQCB2b2lkIFJlbmRlclZpZXc6OnNldFNlbGVjdGlvbihSZW5kZXJP
YmplY3QqIHN0YXJ0LCBpbnQgc3RhcnRQb3MsIFJlbmRlck9iamVjdCogZQogCiAgICAgLy8gSGF2
ZSBhbnkgb2YgdGhlIG9sZCBzZWxlY3RlZCBvYmplY3RzIGNoYW5nZWQgY29tcGFyZWQgdG8gdGhl
IG5ldyBzZWxlY3Rpb24/CiAgICAgZm9yIChTZWxlY3RlZE9iamVjdE1hcDo6aXRlcmF0b3IgaSA9
IG9sZFNlbGVjdGVkT2JqZWN0cy5iZWdpbigpOyBpICE9IG9sZE9iamVjdHNFbmQ7ICsraSkgewot
ICAgICAgICBSZW5kZXJPYmplY3QqIG9iaiA9IGktPmZpcnN0OworICAgICAgICBSZW5kZXJPYmpl
Y3QqIG9iaiA9IGktPmtleTsKICAgICAgICAgUmVuZGVyU2VsZWN0aW9uSW5mbyogbmV3SW5mbyA9
IG5ld1NlbGVjdGVkT2JqZWN0cy5nZXQob2JqKTsKLSAgICAgICAgUmVuZGVyU2VsZWN0aW9uSW5m
byogb2xkSW5mbyA9IGktPnNlY29uZC5nZXQoKTsKKyAgICAgICAgUmVuZGVyU2VsZWN0aW9uSW5m
byogb2xkSW5mbyA9IGktPnZhbHVlLmdldCgpOwogICAgICAgICBpZiAoIW5ld0luZm8gfHwgb2xk
SW5mby0+cmVjdCgpICE9IG5ld0luZm8tPnJlY3QoKSB8fCBvbGRJbmZvLT5zdGF0ZSgpICE9IG5l
d0luZm8tPnN0YXRlKCkgfHwKICAgICAgICAgICAgIChtX3NlbGVjdGlvblN0YXJ0ID09IG9iaiAm
JiBvbGRTdGFydFBvcyAhPSBtX3NlbGVjdGlvblN0YXJ0UG9zKSB8fAogICAgICAgICAgICAgKG1f
c2VsZWN0aW9uRW5kID09IG9iaiAmJiBvbGRFbmRQb3MgIT0gbV9zZWxlY3Rpb25FbmRQb3MpKSB7
CkBAIC02MDYsMTQgKzYwNiwxNCBAQCB2b2lkIFJlbmRlclZpZXc6OnNldFNlbGVjdGlvbihSZW5k
ZXJPYmplY3QqIHN0YXJ0LCBpbnQgc3RhcnRQb3MsIFJlbmRlck9iamVjdCogZQogICAgIC8vIEFu
eSBuZXcgb2JqZWN0cyB0aGF0IHJlbWFpbiB3ZXJlIG5vdCBmb3VuZCBpbiB0aGUgb2xkIG9iamVj
dHMgZGljdCwgYW5kIHNvIHRoZXkgbmVlZCB0byBiZSB1cGRhdGVkLgogICAgIFNlbGVjdGVkT2Jq
ZWN0TWFwOjppdGVyYXRvciBuZXdPYmplY3RzRW5kID0gbmV3U2VsZWN0ZWRPYmplY3RzLmVuZCgp
OwogICAgIGZvciAoU2VsZWN0ZWRPYmplY3RNYXA6Oml0ZXJhdG9yIGkgPSBuZXdTZWxlY3RlZE9i
amVjdHMuYmVnaW4oKTsgaSAhPSBuZXdPYmplY3RzRW5kOyArK2kpCi0gICAgICAgIGktPnNlY29u
ZC0+cmVwYWludCgpOworICAgICAgICBpLT52YWx1ZS0+cmVwYWludCgpOwogCiAgICAgLy8gSGF2
ZSBhbnkgb2YgdGhlIG9sZCBibG9ja3MgY2hhbmdlZD8KICAgICBTZWxlY3RlZEJsb2NrTWFwOjpp
dGVyYXRvciBvbGRCbG9ja3NFbmQgPSBvbGRTZWxlY3RlZEJsb2Nrcy5lbmQoKTsKICAgICBmb3Ig
KFNlbGVjdGVkQmxvY2tNYXA6Oml0ZXJhdG9yIGkgPSBvbGRTZWxlY3RlZEJsb2Nrcy5iZWdpbigp
OyBpICE9IG9sZEJsb2Nrc0VuZDsgKytpKSB7Ci0gICAgICAgIFJlbmRlckJsb2NrKiBibG9jayA9
IGktPmZpcnN0OworICAgICAgICBSZW5kZXJCbG9jayogYmxvY2sgPSBpLT5rZXk7CiAgICAgICAg
IFJlbmRlckJsb2NrU2VsZWN0aW9uSW5mbyogbmV3SW5mbyA9IG5ld1NlbGVjdGVkQmxvY2tzLmdl
dChibG9jayk7Ci0gICAgICAgIFJlbmRlckJsb2NrU2VsZWN0aW9uSW5mbyogb2xkSW5mbyA9IGkt
PnNlY29uZC5nZXQoKTsKKyAgICAgICAgUmVuZGVyQmxvY2tTZWxlY3Rpb25JbmZvKiBvbGRJbmZv
ID0gaS0+dmFsdWUuZ2V0KCk7CiAgICAgICAgIGlmICghbmV3SW5mbyB8fCBvbGRJbmZvLT5yZWN0
cygpICE9IG5ld0luZm8tPnJlY3RzKCkgfHwgb2xkSW5mby0+c3RhdGUoKSAhPSBuZXdJbmZvLT5z
dGF0ZSgpKSB7CiAgICAgICAgICAgICBvbGRJbmZvLT5yZXBhaW50KCk7CiAgICAgICAgICAgICBp
ZiAobmV3SW5mbykgewpAQCAtNjI2LDcgKzYyNiw3IEBAIHZvaWQgUmVuZGVyVmlldzo6c2V0U2Vs
ZWN0aW9uKFJlbmRlck9iamVjdCogc3RhcnQsIGludCBzdGFydFBvcywgUmVuZGVyT2JqZWN0KiBl
CiAgICAgLy8gQW55IG5ldyBibG9ja3MgdGhhdCByZW1haW4gd2VyZSBub3QgZm91bmQgaW4gdGhl
IG9sZCBibG9ja3MgZGljdCwgYW5kIHNvIHRoZXkgbmVlZCB0byBiZSB1cGRhdGVkLgogICAgIFNl
bGVjdGVkQmxvY2tNYXA6Oml0ZXJhdG9yIG5ld0Jsb2Nrc0VuZCA9IG5ld1NlbGVjdGVkQmxvY2tz
LmVuZCgpOwogICAgIGZvciAoU2VsZWN0ZWRCbG9ja01hcDo6aXRlcmF0b3IgaSA9IG5ld1NlbGVj
dGVkQmxvY2tzLmJlZ2luKCk7IGkgIT0gbmV3QmxvY2tzRW5kOyArK2kpCi0gICAgICAgIGktPnNl
Y29uZC0+cmVwYWludCgpOworICAgICAgICBpLT52YWx1ZS0+cmVwYWludCgpOwogCiAgICAgbV9m
cmFtZVZpZXctPmVuZERlZmVycmVkUmVwYWludHMoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlcldpZGdldC5jcHAKaW5kZXggZmM0ZjJmMzVhM2U3NzBkMDRhYzRjNmNiMjBhMzMx
MjQ4MTNmZDhiNy4uNWJiZmZlNGJlYTc2NmI3ZDYyM2NiODZjMTFmOTNhOGVjYTM3MmU4NSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKQEAgLTcwLDkgKzcwLDkg
QEAgdm9pZCBSZW5kZXJXaWRnZXQ6OnJlc3VtZVdpZGdldEhpZXJhcmNoeVVwZGF0ZXMoKQogICAg
ICAgICB3aWRnZXROZXdQYXJlbnRNYXAoKS5jbGVhcigpOwogICAgICAgICBXaWRnZXRUb1BhcmVu
dE1hcDo6aXRlcmF0b3IgZW5kID0gbWFwLmVuZCgpOwogICAgICAgICBmb3IgKFdpZGdldFRvUGFy
ZW50TWFwOjppdGVyYXRvciBpdCA9IG1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAg
ICAgICAgICAgIFdpZGdldCogY2hpbGQgPSBpdC0+Zmlyc3QuZ2V0KCk7CisgICAgICAgICAgICBX
aWRnZXQqIGNoaWxkID0gaXQtPmtleS5nZXQoKTsKICAgICAgICAgICAgIFNjcm9sbFZpZXcqIGN1
cnJlbnRQYXJlbnQgPSBjaGlsZC0+cGFyZW50KCk7Ci0gICAgICAgICAgICBGcmFtZVZpZXcqIG5l
d1BhcmVudCA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICBGcmFtZVZpZXcqIG5ld1BhcmVudCA9
IGl0LT52YWx1ZTsKICAgICAgICAgICAgIGlmIChuZXdQYXJlbnQgIT0gY3VycmVudFBhcmVudCkg
ewogICAgICAgICAgICAgICAgIGlmIChjdXJyZW50UGFyZW50KQogICAgICAgICAgICAgICAgICAg
ICBjdXJyZW50UGFyZW50LT5yZW1vdmVDaGlsZChjaGlsZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUm9vdElubGluZUJveC5jcHAKaW5kZXggNDMxM2ZhNzM1YTE2YWM2OWI5MTVjMTJlMGEz
M2UyZWE1OWE2NDQyZC4uMmMxODJlMWQ3ZmE4ZWVhMzY3NmJlYmJkODFiZTExYjVjMzRiMzZhYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcApAQCAtNzU1LDgg
Kzc1NSw4IEBAIHZvaWQgUm9vdElubGluZUJveDo6YXNjZW50QW5kRGVzY2VudEZvckJveChJbmxp
bmVCb3gqIGJveCwgR2x5cGhPdmVyZmxvd0FuZEZhbGxiCiAgICAgR2x5cGhPdmVyZmxvdyogZ2x5
cGhPdmVyZmxvdyA9IDA7CiAgICAgaWYgKGJveC0+aXNUZXh0KCkpIHsKICAgICAgICAgR2x5cGhP
dmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXA6Oml0ZXJhdG9yIGl0ID0gdGV4dEJveERhdGFNYXAu
ZmluZCh0b0lubGluZVRleHRCb3goYm94KSk7Ci0gICAgICAgIHVzZWRGb250cyA9IGl0ID09IHRl
eHRCb3hEYXRhTWFwLmVuZCgpID8gMCA6ICZpdC0+c2Vjb25kLmZpcnN0OwotICAgICAgICBnbHlw
aE92ZXJmbG93ID0gaXQgPT0gdGV4dEJveERhdGFNYXAuZW5kKCkgPyAwIDogJml0LT5zZWNvbmQu
c2Vjb25kOworICAgICAgICB1c2VkRm9udHMgPSBpdCA9PSB0ZXh0Qm94RGF0YU1hcC5lbmQoKSA/
IDAgOiAmaXQtPnZhbHVlLmZpcnN0OworICAgICAgICBnbHlwaE92ZXJmbG93ID0gaXQgPT0gdGV4
dEJveERhdGFNYXAuZW5kKCkgPyAwIDogJml0LT52YWx1ZS5zZWNvbmQ7CiAgICAgfQogICAgICAg
ICAKICAgICBib29sIGluY2x1ZGVMZWFkaW5nID0gaW5jbHVkZUxlYWRpbmdGb3JCb3goYm94KTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9WZXJ0aWNhbFBvc2l0aW9uQ2Fj
aGUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9WZXJ0aWNhbFBvc2l0aW9uQ2FjaGUuaApp
bmRleCBiYjM5ODc3NzIxZGE3MDVjMzdiZDNiODgxOTAyNGNkMjdlMzZlNWNlLi5iN2NkN2UwODVl
N2Y5YmVkYjUyOGY2MmRlZWY1N2E3YmI4YWE1YmUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvVmVydGljYWxQb3NpdGlvbkNhY2hlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1ZlcnRpY2FsUG9zaXRpb25DYWNoZS5oCkBAIC00OCw3ICs0OCw3IEBAIHB1Ymxp
YzoKICAgICAgICAgY29uc3QgSGFzaE1hcDxSZW5kZXJPYmplY3QqLCBpbnQ+Ojpjb25zdF9pdGVy
YXRvciBpdCA9IG1hcFRvQ2hlY2suZmluZChyZW5kZXJlcik7CiAgICAgICAgIGlmIChpdCA9PSBt
YXBUb0NoZWNrLmVuZCgpKQogICAgICAgICAgICAgcmV0dXJuIFBvc2l0aW9uVW5kZWZpbmVkOwot
ICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKICAg
ICB9CiAgICAgCiAgICAgdm9pZCBzZXQoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgRm9udEJhc2Vs
aW5lIGJhc2VsaW5lVHlwZSwgaW50IHBvc2l0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1dyYXBTaGFwZUluZm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1dyYXBTaGFwZUluZm8uY3BwCmluZGV4IDE1NDcwNjZiMjlkZDRhNzNkOThmYWIzMzE2YzZkMDIz
ZTg2ZTA1MTAuLmFiZDM1NWViNDE5MDI1OWYwNmJhYjc5ZjllYzEwYWQzN2E5ZjI3YmIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9XcmFwU2hhcGVJbmZvLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvV3JhcFNoYXBlSW5mby5jcHAKQEAgLTYwLDcgKzYwLDcg
QEAgV3JhcFNoYXBlSW5mbzo6fldyYXBTaGFwZUluZm8oKQogV3JhcFNoYXBlSW5mbyogV3JhcFNo
YXBlSW5mbzo6ZW5zdXJlV3JhcFNoYXBlSW5mb0ZvclJlbmRlckJsb2NrKFJlbmRlckJsb2NrKiBi
bG9jaykKIHsKICAgICBXcmFwU2hhcGVJbmZvTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gd3JhcFNo
YXBlSW5mb01hcCgpLmFkZChibG9jaywgY3JlYXRlKGJsb2NrKSk7Ci0gICAgcmV0dXJuIHJlc3Vs
dC5pdGVyYXRvci0+c2Vjb25kLmdldCgpOworICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZh
bHVlLmdldCgpOwogfQogCiBXcmFwU2hhcGVJbmZvKiBXcmFwU2hhcGVJbmZvOjp3cmFwU2hhcGVJ
bmZvRm9yUmVuZGVyQmxvY2soY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAKaW5kZXgg
NDU0ZjdhYTZkMDdiNmJkMzEyMzIzNmJlZmNhNDk5ZWNmZTVhMDdhMC4uMjM3MWQxYWJmOWM5NmJh
NGE0NjI4YjkzY2E0OTQyYWY3YTA3Yjk1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwCkBAIC0xNTgsNyArMTU4LDcgQEAg
Ym9vbCBSZW5kZXJTVkdJbmxpbmVUZXh0OjpjaGFyYWN0ZXJTdGFydHNOZXdUZXh0Q2h1bmsoaW50
IHBvc2l0aW9uKSBjb25zdAogICAgIGlmIChpdCA9PSBtX2xheW91dEF0dHJpYnV0ZXMuY2hhcmFj
dGVyRGF0YU1hcCgpLmVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4g
aXQtPnNlY29uZC54ICE9IFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzOjplbXB0eVZhbHVlKCkgfHwg
aXQtPnNlY29uZC55ICE9IFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzOjplbXB0eVZhbHVlKCk7Cisg
ICAgcmV0dXJuIGl0LT52YWx1ZS54ICE9IFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzOjplbXB0eVZh
bHVlKCkgfHwgaXQtPnZhbHVlLnkgIT0gU1ZHVGV4dExheW91dEF0dHJpYnV0ZXM6OmVtcHR5VmFs
dWUoKTsKIH0KIAogVmlzaWJsZVBvc2l0aW9uIFJlbmRlclNWR0lubGluZVRleHQ6OnBvc2l0aW9u
Rm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcAppbmRleCBl
ZTZhNDlkYjg4YTlmZDZjNzcwNWZhMThiNmVlY2E4ODE2ZTFhMmViLi4zODMyYjJiMDFlMzA1MGE1
Zjg0M2M2NWYxY2RkY2IwZWMxNTNhOTY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcApAQCAtMzM4LDcgKzMz
OCw3IEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnByaW1pdGl2ZUF0dHJpYnV0ZUNo
YW5nZWQoUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3Rh
bmRhcmRBdHRyaWJ1dGVzKiBwcmltaXR2ZSA9IHN0YXRpY19jYXN0PFNWR0ZpbHRlclByaW1pdGl2
ZVN0YW5kYXJkQXR0cmlidXRlcyo+KG9iamVjdC0+bm9kZSgpKTsKIAogICAgIGZvciAoOyBpdCAh
PSBlbmQ7ICsraXQpIHsKLSAgICAgICAgRmlsdGVyRGF0YSogZmlsdGVyRGF0YSA9IGl0LT5zZWNv
bmQ7CisgICAgICAgIEZpbHRlckRhdGEqIGZpbHRlckRhdGEgPSBpdC0+dmFsdWU7CiAgICAgICAg
IGlmICghZmlsdGVyRGF0YS0+YnVpbGRlZCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCkBAIC0z
NTMsNyArMzUzLDcgQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cHJpbWl0aXZlQXR0
cmlidXRlQ2hhbmdlZChSZW5kZXJPYmplY3QqIG9iamVjdCwgY28KICAgICAgICAgYnVpbGRlci0+
Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKGVmZmVjdCk7CiAKICAgICAgICAgLy8gUmVwYWludCB0aGUg
aW1hZ2Ugb24gdGhlIHNjcmVlbi4KLSAgICAgICAgbWFya0NsaWVudEZvckludmFsaWRhdGlvbihp
dC0+Zmlyc3QsIFJlcGFpbnRJbnZhbGlkYXRpb24pOworICAgICAgICBtYXJrQ2xpZW50Rm9ySW52
YWxpZGF0aW9uKGl0LT5rZXksIFJlcGFpbnRJbnZhbGlkYXRpb24pOwogICAgIH0KIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdy
YWRpZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VHcmFkaWVudC5jcHAKaW5kZXggNThlMDA3OWIyMmNiMmM1YzE3ZDhmMmQ0ZDczY2JiYTIxMGFh
OWE1ZS4uMzBjZTFiOGNiNGY5NzhjMDBkY2JkYTE3ZGZiNTU3MjNjZmM1ODA4MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
R3JhZGllbnQuY3BwCkBAIC0xNDAsNyArMTQwLDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUdy
YWRpZW50OjphcHBseVJlc291cmNlKFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5kZXJTdHlsZSoK
ICAgICBpZiAoZ3JhZGllbnRVbml0cygpID09IFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9P
QkpFQ1RCT1VORElOR0JPWCAmJiBvYmplY3RCb3VuZGluZ0JveC5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIE93blB0cjxHcmFkaWVudERhdGE+JiBncmFkaWVudERhdGEg
PSBtX2dyYWRpZW50TWFwLmFkZChvYmplY3QsIG51bGxwdHIpLml0ZXJhdG9yLT5zZWNvbmQ7Cisg
ICAgT3duUHRyPEdyYWRpZW50RGF0YT4mIGdyYWRpZW50RGF0YSA9IG1fZ3JhZGllbnRNYXAuYWRk
KG9iamVjdCwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghZ3JhZGllbnREYXRh
KQogICAgICAgICBncmFkaWVudERhdGEgPSBhZG9wdFB0cihuZXcgR3JhZGllbnREYXRhKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZVBhdHRlcm4uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNv
dXJjZVBhdHRlcm4uY3BwCmluZGV4IGI0YWY5OTkxODU1MmExNTQ4NTJiYjJhNGI0N2IwMzBlZGE2
YTUzMTYuLjNhMTg4MmFjZjgyMTcyMjg2YjIzYmI1NDJiZTQwNjZhM2JhY2NjYzcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJu
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
UGF0dGVybi5jcHAKQEAgLTg0LDcgKzg0LDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZVBhdHRl
cm46OmFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiBvYmplY3QsIFJlbmRlclN0eWxlKgogICAg
IGlmIChtX2F0dHJpYnV0ZXMucGF0dGVyblVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5J
VF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YICYmIG9iamVjdEJvdW5kaW5nQm94LmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgT3duUHRyPFBhdHRlcm5EYXRhPiYgcGF0dGVy
bkRhdGEgPSBtX3BhdHRlcm5NYXAuYWRkKG9iamVjdCwgbnVsbHB0cikuaXRlcmF0b3ItPnNlY29u
ZDsKKyAgICBPd25QdHI8UGF0dGVybkRhdGE+JiBwYXR0ZXJuRGF0YSA9IG1fcGF0dGVybk1hcC5h
ZGQob2JqZWN0LCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCFwYXR0ZXJuRGF0
YSkKICAgICAgICAgcGF0dGVybkRhdGEgPSBhZG9wdFB0cihuZXcgUGF0dGVybkRhdGEpOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlc0NhY2hl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzQ2FjaGUuY3Bw
CmluZGV4IDI5N2MwN2I2YWQ0MDlhMjdlNjM1ODU2MDAwYzlhZDRiOTA1YjQzNTQuLjhiNDhjZjUz
ZTc5OWEwYjdkZTJiNTRhNGM3MTUyZTA5Mjc1MzljMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzQ2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzQ2FjaGUuY3BwCkBAIC0xOTgsMTEgKzE5OCwx
MSBAQCB2b2lkIFNWR1Jlc291cmNlc0NhY2hlOjpyZXNvdXJjZURlc3Ryb3llZChSZW5kZXJTVkdS
ZXNvdXJjZUNvbnRhaW5lciogcmVzb3VyY2UpCiAKICAgICBIYXNoTWFwPGNvbnN0IFJlbmRlck9i
amVjdCosIFNWR1Jlc291cmNlcyo+OjppdGVyYXRvciBlbmQgPSBjYWNoZS0+bV9jYWNoZS5lbmQo
KTsKICAgICBmb3IgKEhhc2hNYXA8Y29uc3QgUmVuZGVyT2JqZWN0KiwgU1ZHUmVzb3VyY2VzKj46
Oml0ZXJhdG9yIGl0ID0gY2FjaGUtPm1fY2FjaGUuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7
Ci0gICAgICAgIGl0LT5zZWNvbmQtPnJlc291cmNlRGVzdHJveWVkKHJlc291cmNlKTsKKyAgICAg
ICAgaXQtPnZhbHVlLT5yZXNvdXJjZURlc3Ryb3llZChyZXNvdXJjZSk7CiAKICAgICAgICAgLy8g
TWFyayB1c2VycyBvZiBkZXN0cm95ZWQgcmVzb3VyY2VzIGFzIHBlbmRpbmcgcmVzb2x1dGlvbiBi
YXNlZCBvbiB0aGUgaWQgb2YgdGhlIG9sZCByZXNvdXJjZS4KICAgICAgICAgRWxlbWVudCogcmVz
b3VyY2VFbGVtZW50ID0gdG9FbGVtZW50KHJlc291cmNlLT5ub2RlKCkpOwotICAgICAgICBTVkdT
dHlsZWRFbGVtZW50KiBjbGllbnRFbGVtZW50ID0gdG9TVkdTdHlsZWRFbGVtZW50KGl0LT5maXJz
dC0+bm9kZSgpKTsKKyAgICAgICAgU1ZHU3R5bGVkRWxlbWVudCogY2xpZW50RWxlbWVudCA9IHRv
U1ZHU3R5bGVkRWxlbWVudChpdC0+a2V5LT5ub2RlKCkpOwogICAgICAgICBTVkdEb2N1bWVudEV4
dGVuc2lvbnMqIGV4dGVuc2lvbnMgPSBjbGllbnRFbGVtZW50LT5kb2N1bWVudCgpLT5hY2Nlc3NT
VkdFeHRlbnNpb25zKCk7CiAKICAgICAgICAgZXh0ZW5zaW9ucy0+YWRkUGVuZGluZ1Jlc291cmNl
KHJlc291cmNlRWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OmlkQXR0ciksIGNs
aWVudEVsZW1lbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdSb290SW5saW5lQm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUm9v
dElubGluZUJveC5jcHAKaW5kZXggMzRlOTNhMDJlZjc0MzJlM2MyNmVmMjM2MGQxY2YzZmQ0Mzdl
NDE2ZS4uNTQ2ZmVjMjZjZTY5ODFhY2QxZmNkN2FiZTBhMGE5ODM4YzcwYjQzYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSb290SW5saW5lQm94LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jvb3RJbmxpbmVCb3guY3BwCkBAIC0y
MjYsMTcgKzIyNiwxNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc3dhcEl0ZW1zSW5MYXlvdXRBdHRy
aWJ1dGVzKFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzKiBmaXJzdEF0dAogICAgICAgICByZXR1cm47
CiAKICAgICBpZiAoZmlyc3RQcmVzZW50ICYmIGxhc3RQcmVzZW50KSB7Ci0gICAgICAgIHN0ZDo6
c3dhcChpdEZpcnN0LT5zZWNvbmQsIGl0TGFzdC0+c2Vjb25kKTsKKyAgICAgICAgc3RkOjpzd2Fw
KGl0Rmlyc3QtPnZhbHVlLCBpdExhc3QtPnZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAogICAgIGlmIChmaXJzdFByZXNlbnQgJiYgIWxhc3RQcmVzZW50KSB7Ci0gICAgICAgIGxhc3RB
dHRyaWJ1dGVzLT5jaGFyYWN0ZXJEYXRhTWFwKCkuc2V0KGxhc3RQb3NpdGlvbiArIDEsIGl0Rmly
c3QtPnNlY29uZCk7CisgICAgICAgIGxhc3RBdHRyaWJ1dGVzLT5jaGFyYWN0ZXJEYXRhTWFwKCku
c2V0KGxhc3RQb3NpdGlvbiArIDEsIGl0Rmlyc3QtPnZhbHVlKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAogICAgIC8vICFmaXJzdFByZXNlbnQgJiYgbGFzdFByZXNlbnQKLSAgICBmaXJzdEF0
dHJpYnV0ZXMtPmNoYXJhY3RlckRhdGFNYXAoKS5zZXQoZmlyc3RQb3NpdGlvbiArIDEsIGl0TGFz
dC0+c2Vjb25kKTsKKyAgICBmaXJzdEF0dHJpYnV0ZXMtPmNoYXJhY3RlckRhdGFNYXAoKS5zZXQo
Zmlyc3RQb3NpdGlvbiArIDEsIGl0TGFzdC0+dmFsdWUpOwogfQogCiBzdGF0aWMgaW5saW5lIHZv
aWQgZmluZEZpcnN0QW5kTGFzdEF0dHJpYnV0ZXNJblZlY3RvcihWZWN0b3I8U1ZHVGV4dExheW91
dEF0dHJpYnV0ZXMqPiYgYXR0cmlidXRlcywgUmVuZGVyU1ZHSW5saW5lVGV4dCogZmlyc3RDb250
ZXh0LCBSZW5kZXJTVkdJbmxpbmVUZXh0KiBsYXN0Q29udGV4dCwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEF0dHJpYnV0ZXMuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRlcy5jcHAKaW5k
ZXggYTkyNTk2Y2VlZWRiZTI1YWY3NzdkZjRhNGM4M2NkM2VmOTdiOWNlOC4uNjdmYTBmYTk4MmFk
NjBiYTcyNjUxYTg0NTQ5NTgxZjdlYjUwY2QwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRlcy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRlcy5jcHAKQEAgLTYyLDgg
KzYyLDggQEAgdm9pZCBTVkdUZXh0TGF5b3V0QXR0cmlidXRlczo6ZHVtcCgpIGNvbnN0CiAgICAg
ZnByaW50ZihzdGRlcnIsICJjb250ZXh0OiAlcFxuIiwgbV9jb250ZXh0KTsKICAgICBjb25zdCBT
VkdDaGFyYWN0ZXJEYXRhTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2NoYXJhY3RlckRhdGFN
YXAuZW5kKCk7CiAgICAgZm9yIChTVkdDaGFyYWN0ZXJEYXRhTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IG1fY2hhcmFjdGVyRGF0YU1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgY29uc3QgU1ZHQ2hhcmFjdGVyRGF0YSYgZGF0YSA9IGl0LT5zZWNvbmQ7Ci0gICAgICAgIGZw
cmludGYoc3RkZXJyLCAiIC0tLT4gcG9zPSVpLCBkYXRhPXsiLCBpdC0+Zmlyc3QpOworICAgICAg
ICBjb25zdCBTVkdDaGFyYWN0ZXJEYXRhJiBkYXRhID0gaXQtPnZhbHVlOworICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIiAtLS0+IHBvcz0laSwgZGF0YT17IiwgaXQtPmtleSk7CiAgICAgICAgIGR1
bXBTVkdDaGFyYWN0ZXJEYXRhTWFwVmFsdWUoIngiLCBkYXRhLngpOwogICAgICAgICBkdW1wU1ZH
Q2hhcmFjdGVyRGF0YU1hcFZhbHVlKCJ5IiwgZGF0YS55KTsKICAgICAgICAgZHVtcFNWR0NoYXJh
Y3RlckRhdGFNYXBWYWx1ZSgiZHgiLCBkYXRhLmR4KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVy
LmNwcAppbmRleCBiZTJhMTJmZTk2MGI3OTI0ODMxM2RmMzY5OTE0NTAzZmVlOWEyOTFiLi5iOTY5
YTUzMTllODBhYzc4NzJhNWU0MWQ4ZGU3NzQzMDQ4YmRjNDNiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRl
c0J1aWxkZXIuY3BwCkBAIC0xNDksNyArMTQ5LDcgQEAgdm9pZCBTVkdUZXh0TGF5b3V0QXR0cmli
dXRlc0J1aWxkZXI6OmJ1aWxkQ2hhcmFjdGVyRGF0YU1hcChSZW5kZXJTVkdUZXh0KiB0ZXh0Um8K
ICAgICAgICAgZGF0YS55ID0gMDsKICAgICAgICAgbV9jaGFyYWN0ZXJEYXRhTWFwLnNldCgxLCBk
YXRhKTsKICAgICB9IGVsc2UgewotICAgICAgICBTVkdDaGFyYWN0ZXJEYXRhJiBkYXRhID0gaXQt
PnNlY29uZDsKKyAgICAgICAgU1ZHQ2hhcmFjdGVyRGF0YSYgZGF0YSA9IGl0LT52YWx1ZTsKICAg
ICAgICAgaWYgKGRhdGEueCA9PSBTVkdUZXh0TGF5b3V0QXR0cmlidXRlczo6ZW1wdHlWYWx1ZSgp
KQogICAgICAgICAgICAgZGF0YS54ID0gMDsKICAgICAgICAgaWYgKGRhdGEueSA9PSBTVkdUZXh0
TGF5b3V0QXR0cmlidXRlczo6ZW1wdHlWYWx1ZSgpKQpAQCAtMjEzLDcgKzIxMyw3IEBAIHZvaWQg
U1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyOjpmaWxsQ2hhcmFjdGVyRGF0YU1hcChjb25z
dCBUZXh0UG9zaXRpb24mIHBvCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0g
ICAgICAgIHVwZGF0ZUNoYXJhY3RlckRhdGEoaSwgbGFzdFJvdGF0aW9uLCBpdC0+c2Vjb25kLCBs
ZW5ndGhDb250ZXh0LCB4TGlzdFB0ciwgeUxpc3RQdHIsIGR4TGlzdFB0ciwgZHlMaXN0UHRyLCBy
b3RhdGVMaXN0UHRyKTsKKyAgICAgICAgdXBkYXRlQ2hhcmFjdGVyRGF0YShpLCBsYXN0Um90YXRp
b24sIGl0LT52YWx1ZSwgbGVuZ3RoQ29udGV4dCwgeExpc3RQdHIsIHlMaXN0UHRyLCBkeExpc3RQ
dHIsIGR5TGlzdFB0ciwgcm90YXRlTGlzdFB0cik7CiAgICAgfQogCiAgICAgLy8gVGhlIGxhc3Qg
cm90YXRpb24gdmFsdWUgYWx3YXlzIHNwYW5zIHRoZSB3aG9sZSBzY29wZS4KQEAgLTIyOSw3ICsy
MjksNyBAQCB2b2lkIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlcjo6ZmlsbENoYXJhY3Rl
ckRhdGFNYXAoY29uc3QgVGV4dFBvc2l0aW9uJiBwbwogICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgIH0KIAotICAgICAgICBpdC0+c2Vjb25kLnJvdGF0ZSA9IGxhc3RSb3RhdGlvbjsKKyAg
ICAgICAgaXQtPnZhbHVlLnJvdGF0ZSA9IGxhc3RSb3RhdGlvbjsKICAgICB9CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmUuY3Bw
CmluZGV4IDVjNTQ5YjIxYzg3NTIwODQ3MjQ2YWYyNTRmZDA1OWYyZTNiOWI1ZTguLmJhMmI3NjM5
ZDNmOTViNzM4OTQ3NWZhMmRjMDBjOWE2YWE4NWIzMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lLmNwcApAQCAtNDc1LDcgKzQ3
NSw3IEBAIHZvaWQgU1ZHVGV4dExheW91dEVuZ2luZTo6bGF5b3V0VGV4dE9uTGluZU9yUGF0aChT
VkdJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94LCBSZW5kCiAgICAgICAgIFNWR0NoYXJhY3RlckRhdGEg
ZGF0YTsKICAgICAgICAgU1ZHQ2hhcmFjdGVyRGF0YU1hcDo6aXRlcmF0b3IgaXQgPSBjaGFyYWN0
ZXJEYXRhTWFwLmZpbmQobV9sb2dpY2FsQ2hhcmFjdGVyT2Zmc2V0ICsgMSk7CiAgICAgICAgIGlm
IChpdCAhPSBjaGFyYWN0ZXJEYXRhTWFwLmVuZCgpKQotICAgICAgICAgICAgZGF0YSA9IGl0LT5z
ZWNvbmQ7CisgICAgICAgICAgICBkYXRhID0gaXQtPnZhbHVlOwogCiAgICAgICAgIGZsb2F0IHgg
PSBkYXRhLng7CiAgICAgICAgIGZsb2F0IHkgPSBkYXRhLnk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNzQnVpbGRlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNzQnVpbGRlci5jcHAKaW5kZXggNWFj
ODVjYmJlODQ3NzEwZmQ1YWUxZTIyZmYzZjMzNjIxMTZhODVjMi4uMDVkODA1Zjc3ZjJmOWQyOTAw
MjYxYjBiNjBjYTY4NmUxZWEwY2JhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdUZXh0TWV0cmljc0J1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3NCdWlsZGVyLmNwcApAQCAtMTYxLDcgKzE2MSw3IEBA
IHZvaWQgU1ZHVGV4dE1ldHJpY3NCdWlsZGVyOjptZWFzdXJlVGV4dFJlbmRlcmVyKFJlbmRlclNW
R0lubGluZVRleHQqIHRleHQsIE1lYXN1CiAgICAgICAgICAgICBpZiAoZGF0YS0+YWxsQ2hhcmFj
dGVyc01hcCkgewogICAgICAgICAgICAgICAgIGNvbnN0IFNWR0NoYXJhY3RlckRhdGFNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gZGF0YS0+YWxsQ2hhcmFjdGVyc01hcC0+ZmluZChkYXRhLT52YWx1
ZUxpc3RQb3NpdGlvbiArIG1fdGV4dFBvc2l0aW9uIC0gZGF0YS0+c2tpcHBlZENoYXJhY3RlcnMg
LSBzdXJyb2dhdGVQYWlyQ2hhcmFjdGVycyArIDEpOwogICAgICAgICAgICAgICAgIGlmIChpdCAh
PSBkYXRhLT5hbGxDaGFyYWN0ZXJzTWFwLT5lbmQoKSkKLSAgICAgICAgICAgICAgICAgICAgYXR0
cmlidXRlcy0+Y2hhcmFjdGVyRGF0YU1hcCgpLnNldChtX3RleHRQb3NpdGlvbiArIDEsIGl0LT5z
ZWNvbmQpOworICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLT5jaGFyYWN0ZXJEYXRhTWFw
KCkuc2V0KG1fdGV4dFBvc2l0aW9uICsgMSwgaXQtPnZhbHVlKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIHRleHRNZXRyaWNzVmFsdWVzLT5hcHBlbmQobV9jdXJyZW50TWV0cmljcyk7CiAg
ICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFT
eW5jLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmNwcAppbmRl
eCA0NDIwOWM2ZjU5ZDBkMmExZDdmMzNiMmYxMTI5YTg3ZTkwNDVlN2NkLi5mY2IxMjZhMWQ1NmQ1
YWZjYzlhYmViYTYyMWZiMDc3OGUzMmI3ZmUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9T
dG9yYWdlQXJlYVN5bmMuY3BwCkBAIC0xODgsNyArMTg4LDcgQEAgdm9pZCBTdG9yYWdlQXJlYVN5
bmM6OnN5bmNUaW1lckZpcmVkKFRpbWVyPFN0b3JhZ2VBcmVhU3luYz4qKQogICAgICAgICAgICAg
ICAgIHBhcnRpYWxTeW5jID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIG1faXRlbXNQZW5kaW5nU3luYy5zZXQoY2hhbmdlZF9pdC0+Zmly
c3QuaXNvbGF0ZWRDb3B5KCksIGNoYW5nZWRfaXQtPnNlY29uZC5pc29sYXRlZENvcHkoKSk7Cisg
ICAgICAgICAgICBtX2l0ZW1zUGVuZGluZ1N5bmMuc2V0KGNoYW5nZWRfaXQtPmtleS5pc29sYXRl
ZENvcHkoKSwgY2hhbmdlZF9pdC0+dmFsdWUuaXNvbGF0ZWRDb3B5KCkpOwogICAgICAgICB9CiAK
ICAgICAgICAgaWYgKHBhcnRpYWxTeW5jKSB7CkBAIC0xOTgsNyArMTk4LDcgQEAgdm9pZCBTdG9y
YWdlQXJlYVN5bmM6OnN5bmNUaW1lckZpcmVkKFRpbWVyPFN0b3JhZ2VBcmVhU3luYz4qKQogICAg
ICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46Oml0ZXJhdG9yIHBlbmRpbmdfaXQgPSBt
X2l0ZW1zUGVuZGluZ1N5bmMuYmVnaW4oKTsKICAgICAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBT
dHJpbmc+OjppdGVyYXRvciBwZW5kaW5nX2VuZCA9IG1faXRlbXNQZW5kaW5nU3luYy5lbmQoKTsK
ICAgICAgICAgICAgIGZvciAoOyBwZW5kaW5nX2l0ICE9IHBlbmRpbmdfZW5kOyArK3BlbmRpbmdf
aXQpCi0gICAgICAgICAgICAgICAgbV9jaGFuZ2VkSXRlbXMucmVtb3ZlKHBlbmRpbmdfaXQtPmZp
cnN0KTsKKyAgICAgICAgICAgICAgICBtX2NoYW5nZWRJdGVtcy5yZW1vdmUocGVuZGluZ19pdC0+
a2V5KTsKICAgICAgICAgfQogCiAgICAgICAgIGlmICghbV9zeW5jU2NoZWR1bGVkKSB7CkBAIC0z
NDUsNyArMzQ1LDcgQEAgdm9pZCBTdG9yYWdlQXJlYVN5bmM6OnBlcmZvcm1JbXBvcnQoKQogICAg
IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+OjppdGVyYXRvciBlbmQgPSBpdGVtTWFwLmVuZCgpOwog
CiAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgbV9zdG9yYWdlQXJlYS0+aW1w
b3J0SXRlbShpdC0+Zmlyc3QsIGl0LT5zZWNvbmQpOworICAgICAgICBtX3N0b3JhZ2VBcmVhLT5p
bXBvcnRJdGVtKGl0LT5rZXksIGl0LT52YWx1ZSk7CiAKICAgICBtYXJrSW1wb3J0ZWQoKTsKIH0K
QEAgLTQzOSwxMyArNDM5LDEzIEBAIHZvaWQgU3RvcmFnZUFyZWFTeW5jOjpzeW5jKGJvb2wgY2xl
YXJJdGVtcywgY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIGl0ZW1zCiAgICAgdHJhbnNh
Y3Rpb24uYmVnaW4oKTsKICAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9p
dGVyYXRvciBpdCA9IGl0ZW1zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAv
LyBCYXNlZCBvbiB0aGUgbnVsbC1uZXNzIG9mIHRoZSBzZWNvbmQgYXJndW1lbnQsIGRlY2lkZSB3
aGV0aGVyIHRoaXMgaXMgYW4gaW5zZXJ0IG9yIGEgZGVsZXRlLgotICAgICAgICBTUUxpdGVTdGF0
ZW1lbnQmIHF1ZXJ5ID0gaXQtPnNlY29uZC5pc051bGwoKSA/IHJlbW92ZSA6IGluc2VydDsKKyAg
ICAgICAgU1FMaXRlU3RhdGVtZW50JiBxdWVyeSA9IGl0LT52YWx1ZS5pc051bGwoKSA/IHJlbW92
ZSA6IGluc2VydDsKIAotICAgICAgICBxdWVyeS5iaW5kVGV4dCgxLCBpdC0+Zmlyc3QpOworICAg
ICAgICBxdWVyeS5iaW5kVGV4dCgxLCBpdC0+a2V5KTsKIAogICAgICAgICAvLyBJZiB0aGUgc2Vj
b25kIGFyZ3VtZW50IGlzIG5vbi1udWxsLCB3ZSdyZSBkb2luZyBhbiBpbnNlcnQsIHNvIGJpbmQg
aXQgYXMgdGhlIHZhbHVlLgotICAgICAgICBpZiAoIWl0LT5zZWNvbmQuaXNOdWxsKCkpCi0gICAg
ICAgICAgICBxdWVyeS5iaW5kQmxvYigyLCBpdC0+c2Vjb25kKTsKKyAgICAgICAgaWYgKCFpdC0+
dmFsdWUuaXNOdWxsKCkpCisgICAgICAgICAgICBxdWVyeS5iaW5kQmxvYigyLCBpdC0+dmFsdWUp
OwogCiAgICAgICAgIGludCByZXN1bHQgPSBxdWVyeS5zdGVwKCk7CiAgICAgICAgIGlmIChyZXN1
bHQgIT0gU1FMUmVzdWx0RG9uZSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9TdG9yYWdlTWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU1hcC5jcHAK
aW5kZXggOGU0MmQyZjE3NmRkM2IxMTEyYTAxYTUxZDhkYjYyZjRiMzhiYmEzNS4uNDBlMWEzOGYx
Y2E0YTc5ZjBjZTI0NzAxMTUzNDdhZGI5MjlmNDk4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9TdG9yYWdlTWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0
b3JhZ2VNYXAuY3BwCkBAIC04OSw3ICs4OSw3IEBAIFN0cmluZyBTdG9yYWdlTWFwOjprZXkodW5z
aWduZWQgaW5kZXgpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAogICAgIHNldEl0ZXJhdG9y
VG9JbmRleChpbmRleCk7Ci0gICAgcmV0dXJuIG1faXRlcmF0b3ItPmZpcnN0OworICAgIHJldHVy
biBtX2l0ZXJhdG9yLT5rZXk7CiB9CiAKIFN0cmluZyBTdG9yYWdlTWFwOjpnZXRJdGVtKGNvbnN0
IFN0cmluZyYga2V5KSBjb25zdApAQCAtMTMzLDcgKzEzMyw3IEBAIFBhc3NSZWZQdHI8U3RvcmFn
ZU1hcD4gU3RvcmFnZU1hcDo6c2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5n
JiB2YWx1CiAKICAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6QWRkUmVzdWx0IGFkZFJlc3Vs
dCA9IG1fbWFwLmFkZChrZXksIHZhbHVlKTsKICAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5
KQotICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IHZhbHVlOworICAgICAgICBh
ZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gdmFsdWU7CiAKICAgICBpbnZhbGlkYXRlSXRlcmF0
b3IoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNw
YWNlSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBs
LmNwcAppbmRleCA5ZDFhYzUxN2EwZTJlN2IzZjI2YjgyM2IyODlhNTkzOTU4YmRjOGEwLi40NTAx
YjExZmJjMTVjZjQyMzlkMDdmYzM3NDc2NDE2ZGJiNzVlZmNmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcApAQCAtNTUsNyArNTUsNyBAQCBQ
YXNzUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpsb2NhbFN0
b3JhZ2VOYW1lc3BhY2UoY29uc3QgUwogICAgICAgICByZXR1cm4gc3RvcmFnZU5hbWVzcGFjZS5y
ZWxlYXNlKCk7CiAgICAgfQogCi0gICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgcmV0dXJuIGl0
LT52YWx1ZTsKIH0KIAogUGFzc1JlZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiBTdG9yYWdlTmFtZXNw
YWNlSW1wbDo6c2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UodW5zaWduZWQgcXVvdGEpCkBAIC05Nyw3
ICs5Nyw3IEBAIFBhc3NSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gU3RvcmFnZU5hbWVzcGFjZUlt
cGw6OmNvcHkoKQogCiAgICAgU3RvcmFnZUFyZWFNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fc3RvcmFn
ZUFyZWFNYXAuZW5kKCk7CiAgICAgZm9yIChTdG9yYWdlQXJlYU1hcDo6aXRlcmF0b3IgaSA9IG1f
c3RvcmFnZUFyZWFNYXAuYmVnaW4oKTsgaSAhPSBlbmQ7ICsraSkKLSAgICAgICAgbmV3TmFtZXNw
YWNlLT5tX3N0b3JhZ2VBcmVhTWFwLnNldChpLT5maXJzdCwgaS0+c2Vjb25kLT5jb3B5KCkpOwor
ICAgICAgICBuZXdOYW1lc3BhY2UtPm1fc3RvcmFnZUFyZWFNYXAuc2V0KGktPmtleSwgaS0+dmFs
dWUtPmNvcHkoKSk7CiAgICAgcmV0dXJuIG5ld05hbWVzcGFjZS5yZWxlYXNlKCk7CiB9CiAKQEAg
LTEzMSw3ICsxMzEsNyBAQCB2b2lkIFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpjbG9zZSgpCiAKICAg
ICBTdG9yYWdlQXJlYU1hcDo6aXRlcmF0b3IgZW5kID0gbV9zdG9yYWdlQXJlYU1hcC5lbmQoKTsK
ICAgICBmb3IgKFN0b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBpdCA9IG1fc3RvcmFnZUFyZWFNYXAu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5jbG9zZSgpOwor
ICAgICAgICBpdC0+dmFsdWUtPmNsb3NlKCk7CiAKICAgICBpZiAobV9zeW5jTWFuYWdlcikKICAg
ICAgICAgbV9zeW5jTWFuYWdlci0+Y2xvc2UoKTsKQEAgLTE1NCw3ICsxNTQsNyBAQCB2b2lkIFN0
b3JhZ2VOYW1lc3BhY2VJbXBsOjpjbGVhckFsbE9yaWdpbnNGb3JEZWxldGlvbigpCiAKICAgICBT
dG9yYWdlQXJlYU1hcDo6aXRlcmF0b3IgZW5kID0gbV9zdG9yYWdlQXJlYU1hcC5lbmQoKTsKICAg
ICBmb3IgKFN0b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBpdCA9IG1fc3RvcmFnZUFyZWFNYXAuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5jbGVhckZvck9yaWdp
bkRlbGV0aW9uKCk7CisgICAgICAgIGl0LT52YWx1ZS0+Y2xlYXJGb3JPcmlnaW5EZWxldGlvbigp
OwogfQogICAgIAogdm9pZCBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6c3luYygpCkBAIC0xNjIsNyAr
MTYyLDcgQEAgdm9pZCBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6c3luYygpCiAgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKICAgICBTdG9yYWdlQXJlYU1hcDo6aXRlcmF0b3IgZW5kID0gbV9zdG9y
YWdlQXJlYU1hcC5lbmQoKTsKICAgICBmb3IgKFN0b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBpdCA9
IG1fc3RvcmFnZUFyZWFNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+
c2Vjb25kLT5zeW5jKCk7CisgICAgICAgIGl0LT52YWx1ZS0+c3luYygpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRG9jdW1l
bnRFeHRlbnNpb25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudEV4dGVuc2lv
bnMuY3BwCmluZGV4IGNhYzFhZWEwN2UwOTBkNzRlMjVlYTM0NjAwOWYyNWM3ZDQ2ODBlMzkuLmNj
YjYzMjNlNDdkYTg0MWE3NjFjYjkzYTFlYzhlYWQxNTc1MDk2ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwCkBAIC0xNTYsNyArMTU2LDcgQEAgdm9p
ZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlbW92ZUFuaW1hdGlvbkVsZW1lbnRGcm9tVGFyZ2V0
KFNWR1NNSUxFbGVtZW50KiBhbmkKICAgICBIYXNoTWFwPFNWR0VsZW1lbnQqLCBIYXNoU2V0PFNW
R1NNSUxFbGVtZW50Kj4qID46Oml0ZXJhdG9yIGl0ID0gbV9hbmltYXRlZEVsZW1lbnRzLmZpbmQo
dGFyZ2V0RWxlbWVudCk7CiAgICAgQVNTRVJUKGl0ICE9IG1fYW5pbWF0ZWRFbGVtZW50cy5lbmQo
KSk7CiAgICAgCi0gICAgSGFzaFNldDxTVkdTTUlMRWxlbWVudCo+KiBhbmltYXRpb25FbGVtZW50
c0ZvclRhcmdldCA9IGl0LT5zZWNvbmQ7CisgICAgSGFzaFNldDxTVkdTTUlMRWxlbWVudCo+KiBh
bmltYXRpb25FbGVtZW50c0ZvclRhcmdldCA9IGl0LT52YWx1ZTsKICAgICBBU1NFUlQoIWFuaW1h
dGlvbkVsZW1lbnRzRm9yVGFyZ2V0LT5pc0VtcHR5KCkpOwogCiAgICAgYW5pbWF0aW9uRWxlbWVu
dHNGb3JUYXJnZXQtPnJlbW92ZShhbmltYXRpb25FbGVtZW50KTsKQEAgLTE3Myw3ICsxNzMsNyBA
QCB2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlQWxsQW5pbWF0aW9uRWxlbWVudHNG
cm9tVGFyZ2V0KFNWR0VsZW1lbnQqIHRhcgogICAgIGlmIChpdCA9PSBtX2FuaW1hdGVkRWxlbWVu
dHMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEhhc2hTZXQ8U1ZHU01JTEVsZW1lbnQq
PiogYW5pbWF0aW9uRWxlbWVudHNGb3JUYXJnZXQgPSBpdC0+c2Vjb25kOworICAgIEhhc2hTZXQ8
U1ZHU01JTEVsZW1lbnQqPiogYW5pbWF0aW9uRWxlbWVudHNGb3JUYXJnZXQgPSBpdC0+dmFsdWU7
CiAgICAgVmVjdG9yPFNWR1NNSUxFbGVtZW50Kj4gdG9CZVJlc2V0OwogCiAgICAgSGFzaFNldDxT
VkdTTUlMRWxlbWVudCo+OjppdGVyYXRvciBlbmQgPSBhbmltYXRpb25FbGVtZW50c0ZvclRhcmdl
dC0+ZW5kKCk7CkBAIC0yMTksOSArMjE5LDkgQEAgdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6
OmFkZFBlbmRpbmdSZXNvdXJjZShjb25zdCBBdG9taWNTdHJpbmcmIGlkLCBTVkdTdHlsZWQKIAog
ICAgIC8vIFRoZSBIYXNoTWFwIGFkZCBmdW5jdGlvbiBsZWF2ZXMgdGhlIG1hcCBhbG9uZSBhbmQg
cmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGVsZW1lbnQgaW4gdGhlCiAgICAgLy8gbWFwIGlmIHRo
ZSBlbGVtZW50IGFscmVhZHkgZXhpc3RzLiBTbyB3ZSBhZGQgd2l0aCBhIHZhbHVlIG9mIDAsIGFu
ZCBpdCBlaXRoZXIgZmluZHMgdGhlCi0gICAgLy8gZXhpc3RpbmcgZWxlbWVudCBvciBhZGRzIGEg
bmV3IG9uZSBpbiBhIHNpbmdsZSBvcGVyYXRpb24uIFRoZSAiLml0ZXJhdG9yLT5zZWNvbmQiIGlk
aW9tIGdldHMKKyAgICAvLyBleGlzdGluZyBlbGVtZW50IG9yIGFkZHMgYSBuZXcgb25lIGluIGEg
c2luZ2xlIG9wZXJhdGlvbi4gVGhlICIuaXRlcmF0b3ItPnZhbHVlIiBpZGlvbSBnZXRzCiAgICAg
Ly8gdXMgdG8gdGhlIGl0ZXJhdG9yIGZyb20gYWRkJ3MgcmVzdWx0LCBhbmQgdGhlbiB0byB0aGUg
dmFsdWUgaW5zaWRlIHRoZSBoYXNoIHRhYmxlLgotICAgIFNWR1BlbmRpbmdFbGVtZW50cyomIHNl
dCA9IG1fcGVuZGluZ1Jlc291cmNlcy5hZGQoaWQsIDApLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAg
U1ZHUGVuZGluZ0VsZW1lbnRzKiYgc2V0ID0gbV9wZW5kaW5nUmVzb3VyY2VzLmFkZChpZCwgMCku
aXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghc2V0KQogICAgICAgICBzZXQgPSBuZXcgU1ZHUGVu
ZGluZ0VsZW1lbnRzOwogICAgIHNldC0+YWRkKGVsZW1lbnQpOwpAQCAtMjQ2LDcgKzI0Niw3IEBA
IGJvb2wgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjppc0VsZW1lbnRQZW5kaW5nUmVzb3VyY2VzKFNW
R1N0eWxlZEVsZW1lbnQqIGVsZW1lbnQpCiAKICAgICBIYXNoTWFwPEF0b21pY1N0cmluZywgU1ZH
UGVuZGluZ0VsZW1lbnRzKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGVuZGluZ1Jlc291cmNl
cy5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8QXRvbWljU3RyaW5nLCBTVkdQZW5kaW5nRWxlbWVu
dHMqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BlbmRpbmdSZXNvdXJjZXMuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFNWR1BlbmRpbmdFbGVtZW50cyogZWxlbWVudHMgPSBp
dC0+c2Vjb25kOworICAgICAgICBTVkdQZW5kaW5nRWxlbWVudHMqIGVsZW1lbnRzID0gaXQtPnZh
bHVlOwogICAgICAgICBBU1NFUlQoZWxlbWVudHMpOwogCiAgICAgICAgIGlmIChlbGVtZW50cy0+
Y29udGFpbnMoZWxlbWVudCkpCkBAIC0yNzQsMTMgKzI3NCwxMyBAQCB2b2lkIFNWR0RvY3VtZW50
RXh0ZW5zaW9uczo6cmVtb3ZlRWxlbWVudEZyb21QZW5kaW5nUmVzb3VyY2VzKFNWR1N0eWxlZEVs
ZW1lbnQqCiAgICAgICAgIFZlY3RvcjxBdG9taWNTdHJpbmc+IHRvQmVSZW1vdmVkOwogICAgICAg
ICBIYXNoTWFwPEF0b21pY1N0cmluZywgU1ZHUGVuZGluZ0VsZW1lbnRzKj46Oml0ZXJhdG9yIGVu
ZCA9IG1fcGVuZGluZ1Jlc291cmNlcy5lbmQoKTsKICAgICAgICAgZm9yIChIYXNoTWFwPEF0b21p
Y1N0cmluZywgU1ZHUGVuZGluZ0VsZW1lbnRzKj46Oml0ZXJhdG9yIGl0ID0gbV9wZW5kaW5nUmVz
b3VyY2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgU1ZHUGVuZGlu
Z0VsZW1lbnRzKiBlbGVtZW50cyA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICBTVkdQZW5kaW5n
RWxlbWVudHMqIGVsZW1lbnRzID0gaXQtPnZhbHVlOwogICAgICAgICAgICAgQVNTRVJUKGVsZW1l
bnRzKTsKICAgICAgICAgICAgIEFTU0VSVCghZWxlbWVudHMtPmlzRW1wdHkoKSk7CiAKICAgICAg
ICAgICAgIGVsZW1lbnRzLT5yZW1vdmUoZWxlbWVudCk7CiAgICAgICAgICAgICBpZiAoZWxlbWVu
dHMtPmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICB0b0JlUmVtb3ZlZC5hcHBlbmQoaXQtPmZp
cnN0KTsKKyAgICAgICAgICAgICAgICB0b0JlUmVtb3ZlZC5hcHBlbmQoaXQtPmtleSk7CiAgICAg
ICAgIH0KIAogICAgICAgICBlbGVtZW50LT5jbGVhckhhc1BlbmRpbmdSZXNvdXJjZXNJZlBvc3Np
YmxlKCk7CkBAIC0yOTYsMTMgKzI5NiwxMyBAQCB2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6
cmVtb3ZlRWxlbWVudEZyb21QZW5kaW5nUmVzb3VyY2VzKFNWR1N0eWxlZEVsZW1lbnQqCiAgICAg
ICAgIFZlY3RvcjxBdG9taWNTdHJpbmc+IHRvQmVSZW1vdmVkOwogICAgICAgICBIYXNoTWFwPEF0
b21pY1N0cmluZywgU1ZHUGVuZGluZ0VsZW1lbnRzKj46Oml0ZXJhdG9yIGVuZCA9IG1fcGVuZGlu
Z1Jlc291cmNlc0ZvclJlbW92YWwuZW5kKCk7CiAgICAgICAgIGZvciAoSGFzaE1hcDxBdG9taWNT
dHJpbmcsIFNWR1BlbmRpbmdFbGVtZW50cyo+OjppdGVyYXRvciBpdCA9IG1fcGVuZGluZ1Jlc291
cmNlc0ZvclJlbW92YWwuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBT
VkdQZW5kaW5nRWxlbWVudHMqIGVsZW1lbnRzID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIFNW
R1BlbmRpbmdFbGVtZW50cyogZWxlbWVudHMgPSBpdC0+dmFsdWU7CiAgICAgICAgICAgICBBU1NF
UlQoZWxlbWVudHMpOwogICAgICAgICAgICAgQVNTRVJUKCFlbGVtZW50cy0+aXNFbXB0eSgpKTsK
IAogICAgICAgICAgICAgZWxlbWVudHMtPnJlbW92ZShlbGVtZW50KTsKICAgICAgICAgICAgIGlm
IChlbGVtZW50cy0+aXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHRvQmVSZW1vdmVkLmFwcGVu
ZChpdC0+Zmlyc3QpOworICAgICAgICAgICAgICAgIHRvQmVSZW1vdmVkLmFwcGVuZChpdC0+a2V5
KTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIFdlIHVzZSB0aGUgcmVtb3ZlUGVuZGluZ1Jlc291
cmNlRm9yUmVtb3ZhbCBmdW5jdGlvbiBoZXJlIGJlY2F1c2UgaXQgZGVhbHMgd2l0aCBzZXQgbGlm
ZXRpbWUgY29ycmVjdGx5LgpAQCAtMzYyLDcgKzM2Miw3IEBAIEhhc2hTZXQ8U1ZHRWxlbWVudCo+
KiBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnNldE9mRWxlbWVudHNSZWZlcmVuY2luZ1RhcmdldChT
VkdFCiAgICAgY29uc3QgSGFzaE1hcDxTVkdFbGVtZW50KiwgT3duUHRyPEhhc2hTZXQ8U1ZHRWxl
bWVudCo+ID4gPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2VsZW1lbnREZXBlbmRlbmNpZXMuZmlu
ZChyZWZlcmVuY2VkRWxlbWVudCk7CiAgICAgaWYgKGl0ID09IG1fZWxlbWVudERlcGVuZGVuY2ll
cy5lbmQoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQuZ2V0KCk7
CisgICAgcmV0dXJuIGl0LT52YWx1ZS5nZXQoKTsKIH0KIAogdm9pZCBTVkdEb2N1bWVudEV4dGVu
c2lvbnM6OmFkZEVsZW1lbnRSZWZlcmVuY2luZ1RhcmdldChTVkdFbGVtZW50KiByZWZlcmVuY2lu
Z0VsZW1lbnQsIFNWR0VsZW1lbnQqIHJlZmVyZW5jZWRFbGVtZW50KQpAQCAtMzg2LDggKzM4Niw4
IEBAIHZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZW1vdmVBbGxUYXJnZXRSZWZlcmVuY2Vz
Rm9yRWxlbWVudChTVkdFbGVtZW50KiByZWZlCiAKICAgICBIYXNoTWFwPFNWR0VsZW1lbnQqLCBP
d25QdHI8SGFzaFNldDxTVkdFbGVtZW50Kj4gPiA+OjppdGVyYXRvciBlbmQgPSBtX2VsZW1lbnRE
ZXBlbmRlbmNpZXMuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPFNWR0VsZW1lbnQqLCBPd25QdHI8
SGFzaFNldDxTVkdFbGVtZW50Kj4gPiA+OjppdGVyYXRvciBpdCA9IG1fZWxlbWVudERlcGVuZGVu
Y2llcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgU1ZHRWxlbWVudCogcmVm
ZXJlbmNlZEVsZW1lbnQgPSBpdC0+Zmlyc3Q7Ci0gICAgICAgIEhhc2hTZXQ8U1ZHRWxlbWVudCo+
KiByZWZlcmVuY2luZ0VsZW1lbnRzID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgU1ZHRWxl
bWVudCogcmVmZXJlbmNlZEVsZW1lbnQgPSBpdC0+a2V5OworICAgICAgICBIYXNoU2V0PFNWR0Vs
ZW1lbnQqPiogcmVmZXJlbmNpbmdFbGVtZW50cyA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAg
SGFzaFNldDxTVkdFbGVtZW50Kj46Oml0ZXJhdG9yIHNldEl0ID0gcmVmZXJlbmNpbmdFbGVtZW50
cy0+ZmluZChyZWZlcmVuY2luZ0VsZW1lbnQpOwogICAgICAgICBpZiAoc2V0SXQgPT0gcmVmZXJl
bmNpbmdFbGVtZW50cy0+ZW5kKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTQwOCwxMCAr
NDA4LDEwIEBAIHZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZW1vdmVBbGxFbGVtZW50UmVm
ZXJlbmNlc0ZvclRhcmdldChTVkdFbGVtZW50KiByZWZlCiAgICAgSGFzaE1hcDxTVkdFbGVtZW50
KiwgT3duUHRyPEhhc2hTZXQ8U1ZHRWxlbWVudCo+ID4gPjo6aXRlcmF0b3IgaXQgPSBtX2VsZW1l
bnREZXBlbmRlbmNpZXMuZmluZChyZWZlcmVuY2VkRWxlbWVudCk7CiAgICAgaWYgKGl0ID09IG1f
ZWxlbWVudERlcGVuZGVuY2llcy5lbmQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVChp
dC0+Zmlyc3QgPT0gcmVmZXJlbmNlZEVsZW1lbnQpOworICAgIEFTU0VSVChpdC0+a2V5ID09IHJl
ZmVyZW5jZWRFbGVtZW50KTsKICAgICBWZWN0b3I8U1ZHRWxlbWVudCo+IHRvQmVOb3RpZmllZDsK
IAotICAgIEhhc2hTZXQ8U1ZHRWxlbWVudCo+KiByZWZlcmVuY2luZ0VsZW1lbnRzID0gaXQtPnNl
Y29uZC5nZXQoKTsKKyAgICBIYXNoU2V0PFNWR0VsZW1lbnQqPiogcmVmZXJlbmNpbmdFbGVtZW50
cyA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICBIYXNoU2V0PFNWR0VsZW1lbnQqPjo6aXRlcmF0b3Ig
c2V0RW5kID0gcmVmZXJlbmNpbmdFbGVtZW50cy0+ZW5kKCk7CiAgICAgZm9yIChIYXNoU2V0PFNW
R0VsZW1lbnQqPjo6aXRlcmF0b3Igc2V0SXQgPSByZWZlcmVuY2luZ0VsZW1lbnRzLT5iZWdpbigp
OyBzZXRJdCAhPSBzZXRFbmQ7ICsrc2V0SXQpCiAgICAgICAgIHRvQmVOb3RpZmllZC5hcHBlbmQo
KnNldEl0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAppbmRleCAxYzA5YzYxOWI2MWZkODJl
NDg4ZWIwZDUxNjI0MjhkOGU0YTFmMjMwLi5iMDIxMmQ3YmM0NTNlYTQ3YjJjZWY5MTc3MTIxMjRj
NzgzYjJjOGI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCkBAIC02OCw3ICs2OCw3IEBA
IFNWR0VsZW1lbnQ6On5TVkdFbGVtZW50KCkKICAgICAgICAgU1ZHRWxlbWVudFJhcmVEYXRhOjpT
VkdFbGVtZW50UmFyZURhdGFNYXA6Oml0ZXJhdG9yIGl0ID0gcmFyZURhdGFNYXAuZmluZCh0aGlz
KTsKICAgICAgICAgQVNTRVJUKGl0ICE9IHJhcmVEYXRhTWFwLmVuZCgpKTsKIAotICAgICAgICBT
VkdFbGVtZW50UmFyZURhdGEqIHJhcmVEYXRhID0gaXQtPnNlY29uZDsKKyAgICAgICAgU1ZHRWxl
bWVudFJhcmVEYXRhKiByYXJlRGF0YSA9IGl0LT52YWx1ZTsKICAgICAgICAgcmFyZURhdGEtPmRl
c3Ryb3lBbmltYXRlZFNNSUxTdHlsZVByb3BlcnRpZXMoKTsKICAgICAgICAgaWYgKFNWR0N1cnNv
ckVsZW1lbnQqIGN1cnNvckVsZW1lbnQgPSByYXJlRGF0YS0+Y3Vyc29yRWxlbWVudCgpKQogICAg
ICAgICAgICAgY3Vyc29yRWxlbWVudC0+cmVtb3ZlQ2xpZW50KHRoaXMpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNvbnRhaW5lci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmNwcAppbmRleCBiMDMy
ZjMxNTgyNTZlNWUzY2M4OTA0NTBjYmE4NjgwYjA3ZTRmZjljLi4wZWZhNmE0MmJiMDkzNWNiZTk0
MjUyZTYxMTk4MzlkY2RhZjJjZmQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5p
bWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5p
bWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmNwcApAQCAtMjcyLDcgKzI3Miw3IEBAIHZvaWQgU01J
TFRpbWVDb250YWluZXI6OnVwZGF0ZUFuaW1hdGlvbnMoU01JTFRpbWUgZWxhcHNlZCwgYm9vbCBz
ZWVrVG9UaW1lKQogICAgIFZlY3RvcjxTVkdTTUlMRWxlbWVudCo+IGFuaW1hdGlvbnNUb0FwcGx5
OwogICAgIFJlc3VsdEVsZW1lbnRNYXA6Oml0ZXJhdG9yIGVuZCA9IHJlc3VsdHNFbGVtZW50cy5l
bmQoKTsKICAgICBmb3IgKFJlc3VsdEVsZW1lbnRNYXA6Oml0ZXJhdG9yIGl0ID0gcmVzdWx0c0Vs
ZW1lbnRzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBTVkdTTUlMRWxlbWVu
dCogYW5pbWF0aW9uID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgU1ZHU01JTEVsZW1lbnQq
IGFuaW1hdGlvbiA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgaWYgKGNvbnRyaWJ1dGluZ0Vs
ZW1lbnRzLmNvbnRhaW5zKGFuaW1hdGlvbikpCiAgICAgICAgICAgICBhbmltYXRpb25zVG9BcHBs
eS5hcHBlbmQoYW5pbWF0aW9uKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvU1ZHSW1hZ2VDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvU1ZHSW1hZ2VDYWNoZS5jcHAKaW5kZXggNjkzZWUyYThmZmY1YzdmMzcyMmZiNDZjOWZkMGI1
NWI1Y2QzYWUxYy4uMjVmY2M3Nzk3ZjA0YzFmZTg1OTJiNjA0MTM4YTg2ZDI4ZGQ0M2U2NCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlQ2FjaGUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZUNhY2hlLmNwcApAQCAtNDcs
OCArNDcsOCBAQCBTVkdJbWFnZUNhY2hlOjp+U1ZHSW1hZ2VDYWNoZSgpCiAgICAgICAgIC8vIENo
ZWNrcyBpZiB0aGUgY2xpZW50IChpdC0+Zmlyc3QpIGlzIHN0aWxsIHZhbGlkLiBUaGUgY2xpZW50
IHNob3VsZCByZW1vdmUgaXRzZWxmIGZyb20gdGhpcwogICAgICAgICAvLyBjYWNoZSBiZWZvcmUg
aXRzIGVuZCBvZiBsaWZlLCBvdGhlcndpc2UgdGhlIGZvbGxvd2luZyBBU1NFUlQgd2lsbCBjcmFz
aCBvbiBwdXJlIHZpcnR1YWwKICAgICAgICAgLy8gZnVuY3Rpb24gY2FsbCBvciBhIGdlbmVyYWwg
Y3Jhc2guCi0gICAgICAgIEFTU0VSVChpdC0+Zmlyc3QtPnJlc291cmNlQ2xpZW50VHlwZSgpID09
IENhY2hlZEltYWdlQ2xpZW50OjpleHBlY3RlZFR5cGUoKSk7Ci0gICAgICAgIGRlbGV0ZSBpdC0+
c2Vjb25kLmJ1ZmZlcjsKKyAgICAgICAgQVNTRVJUKGl0LT5rZXktPnJlc291cmNlQ2xpZW50VHlw
ZSgpID09IENhY2hlZEltYWdlQ2xpZW50OjpleHBlY3RlZFR5cGUoKSk7CisgICAgICAgIGRlbGV0
ZSBpdC0+dmFsdWUuYnVmZmVyOwogICAgIH0KIAogICAgIG1faW1hZ2VEYXRhTWFwLmNsZWFyKCk7
CkBAIC02Myw3ICs2Myw3IEBAIHZvaWQgU1ZHSW1hZ2VDYWNoZTo6cmVtb3ZlQ2xpZW50RnJvbUNh
Y2hlKGNvbnN0IENhY2hlZEltYWdlQ2xpZW50KiBjbGllbnQpCiAgICAgaWYgKGl0ID09IG1faW1h
Z2VEYXRhTWFwLmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBkZWxldGUgaXQtPnNlY29u
ZC5idWZmZXI7CisgICAgZGVsZXRlIGl0LT52YWx1ZS5idWZmZXI7CiAgICAgbV9pbWFnZURhdGFN
YXAucmVtb3ZlKGl0KTsKIH0KIApAQCAtODAsMTQgKzgwLDE0IEBAIFNWR0ltYWdlQ2FjaGU6OlNp
emVBbmRTY2FsZXMgU1ZHSW1hZ2VDYWNoZTo6cmVxdWVzdGVkU2l6ZUFuZFNjYWxlcyhjb25zdCBD
YWNoZWRJCiAgICAgU2l6ZUFuZFNjYWxlc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3NpemVB
bmRTY2FsZXNNYXAuZmluZChjbGllbnQpOwogICAgIGlmIChpdCA9PSBtX3NpemVBbmRTY2FsZXNN
YXAuZW5kKCkpCiAgICAgICAgIHJldHVybiBTaXplQW5kU2NhbGVzKCk7Ci0gICAgcmV0dXJuIGl0
LT5zZWNvbmQ7CisgICAgcmV0dXJuIGl0LT52YWx1ZTsKIH0KIAogdm9pZCBTVkdJbWFnZUNhY2hl
OjppbWFnZUNvbnRlbnRDaGFuZ2VkKCkKIHsKICAgICBJbWFnZURhdGFNYXA6Oml0ZXJhdG9yIGVu
ZCA9IG1faW1hZ2VEYXRhTWFwLmVuZCgpOwogICAgIGZvciAoSW1hZ2VEYXRhTWFwOjppdGVyYXRv
ciBpdCA9IG1faW1hZ2VEYXRhTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAg
aXQtPnNlY29uZC5pbWFnZU5lZWRzVXBkYXRlID0gdHJ1ZTsKKyAgICAgICAgaXQtPnZhbHVlLmlt
YWdlTmVlZHNVcGRhdGUgPSB0cnVlOwogCiAgICAgLy8gSWYgd2UncmUgaW4gdGhlIG1pZGRsZSBv
ZiBsYXlvdXQsIHN0YXJ0IHJlZHJhd2luZyBkaXJ0eQogICAgIC8vIGltYWdlcyBvbiBhIHRpbWVy
OyBvdGhlcndpc2UgaXQncyBzYWZlIHRvIGRyYXcgaW1tZWRpYXRlbHkuCkBAIC0xMDMsNyArMTAz
LDcgQEAgdm9pZCBTVkdJbWFnZUNhY2hlOjpyZWRyYXcoKQogewogICAgIEltYWdlRGF0YU1hcDo6
aXRlcmF0b3IgZW5kID0gbV9pbWFnZURhdGFNYXAuZW5kKCk7CiAgICAgZm9yIChJbWFnZURhdGFN
YXA6Oml0ZXJhdG9yIGl0ID0gbV9pbWFnZURhdGFNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7Ci0gICAgICAgIEltYWdlRGF0YSYgZGF0YSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIEltYWdl
RGF0YSYgZGF0YSA9IGl0LT52YWx1ZTsKICAgICAgICAgaWYgKCFkYXRhLmltYWdlTmVlZHNVcGRh
dGUpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgLy8gSWYgdGhlIGNvbnRlbnQgY2hh
bmdlZCB3ZSByZWRyYXcgdXNpbmcgb3VyIGV4aXN0aW5nIEltYWdlQnVmZmVyLgpAQCAtMTM5LDkg
KzEzOSw5IEBAIEltYWdlKiBTVkdJbWFnZUNhY2hlOjpsb29rdXBPckNyZWF0ZUJpdG1hcEltYWdl
Rm9yUmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0KiByCiAgICAgaWYgKHNpemVJdCA9PSBtX3Np
emVBbmRTY2FsZXNNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybiBJbWFnZTo6bnVsbEltYWdlKCk7
CiAKLSAgICBJbnRTaXplIHNpemUgPSBzaXplSXQtPnNlY29uZC5zaXplOwotICAgIGZsb2F0IHpv
b20gPSBzaXplSXQtPnNlY29uZC56b29tOwotICAgIGZsb2F0IHNjYWxlID0gc2l6ZUl0LT5zZWNv
bmQuc2NhbGU7CisgICAgSW50U2l6ZSBzaXplID0gc2l6ZUl0LT52YWx1ZS5zaXplOworICAgIGZs
b2F0IHpvb20gPSBzaXplSXQtPnZhbHVlLnpvb207CisgICAgZmxvYXQgc2NhbGUgPSBzaXplSXQt
PnZhbHVlLnNjYWxlOwogCiAgICAgLy8gRklYTUUgKDg1MzM1KTogVGhpcyBuZWVkcyB0byB0YWtl
IENTUyB0cmFuc2Zvcm0gc2NhbGUgaW50byBhY2NvdW50IGFzIHdlbGwuCiAgICAgUGFnZSogcGFn
ZSA9IHJlbmRlcmVyLT5kb2N1bWVudCgpLT5wYWdlKCk7CkBAIC0xNTMsNyArMTUzLDcgQEAgSW1h
Z2UqIFNWR0ltYWdlQ2FjaGU6Omxvb2t1cE9yQ3JlYXRlQml0bWFwSW1hZ2VGb3JSZW5kZXJlcihj
b25zdCBSZW5kZXJPYmplY3QqIHIKICAgICAvLyBMb29rdXAgaW1hZ2UgZm9yIGNsaWVudCBpbiBj
YWNoZSBhbmQgZXZlbnR1YWxseSB1cGRhdGUgaXQuCiAgICAgSW1hZ2VEYXRhTWFwOjppdGVyYXRv
ciBpdCA9IG1faW1hZ2VEYXRhTWFwLmZpbmQoY2xpZW50KTsKICAgICBpZiAoaXQgIT0gbV9pbWFn
ZURhdGFNYXAuZW5kKCkpIHsKLSAgICAgICAgSW1hZ2VEYXRhJiBkYXRhID0gaXQtPnNlY29uZDsK
KyAgICAgICAgSW1hZ2VEYXRhJiBkYXRhID0gaXQtPnZhbHVlOwogCiAgICAgICAgIC8vIENvbW1v
biBjYXNlOiBpbWFnZSBzaXplICYgem9vbSByZW1haW5lZCB0aGUgc2FtZS4KICAgICAgICAgaWYg
KGRhdGEuc2l6ZUFuZFNjYWxlcy5zaXplID09IHNpemUgJiYgZGF0YS5zaXplQW5kU2NhbGVzLnpv
b20gPT0gem9vbSAmJiBkYXRhLnNpemVBbmRTY2FsZXMuc2NhbGUgPT0gc2NhbGUpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVy
LmgKaW5kZXggNDRkMzIyN2I4M2U5Yjg3MThlNzlkOGMxNGM5ZTNiZTNhNmFmNjM4NS4uMTkxNTgw
ZGQ4YWJlNTlmNTE3OTg0Nzg5ZmVmM2RmOWQxYWJjNmMyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaApAQCAtNTAs
NyArNTAsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICAvLyBPbmx5IGFsbG93ZWQgZm9yIGVm
ZmVjdHMgYmVsb25ncyB0byB0aGlzIGJ1aWxkZXIuCiAgICAgICAgIEFTU0VSVChtX2VmZmVjdFJl
ZmVyZW5jZXMuY29udGFpbnMoZWZmZWN0KSk7Ci0gICAgICAgIHJldHVybiBtX2VmZmVjdFJlZmVy
ZW5jZXMuZmluZChlZmZlY3QpLT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBtX2VmZmVjdFJlZmVy
ZW5jZXMuZmluZChlZmZlY3QpLT52YWx1ZTsKICAgICB9CiAKICAgICAvLyBSZXF1aXJlZCB0byBj
aGFuZ2UgdGhlIGF0dHJpYnV0ZXMgb2YgYSBmaWx0ZXIgZHVyaW5nIGFuIHN2Z0F0dHJpYnV0ZUNo
YW5nZWQuCkBAIC02Niw3ICs2Niw3IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBIYXNoTWFw
PEF0b21pY1N0cmluZywgUmVmUHRyPEZpbHRlckVmZmVjdD4gPjo6aXRlcmF0b3IgZW5kID0gbV9i
dWlsdGluRWZmZWN0cy5lbmQoKTsKICAgICAgICAgZm9yIChIYXNoTWFwPEF0b21pY1N0cmluZywg
UmVmUHRyPEZpbHRlckVmZmVjdD4gPjo6aXRlcmF0b3IgaXRlcmF0b3IgPSBtX2J1aWx0aW5FZmZl
Y3RzLmJlZ2luKCk7IGl0ZXJhdG9yICE9IGVuZDsgKytpdGVyYXRvcikKLSAgICAgICAgICAgICBt
X2VmZmVjdFJlZmVyZW5jZXMuYWRkKGl0ZXJhdG9yLT5zZWNvbmQsIEZpbHRlckVmZmVjdFNldCgp
KTsKKyAgICAgICAgICAgICBtX2VmZmVjdFJlZmVyZW5jZXMuYWRkKGl0ZXJhdG9yLT52YWx1ZSwg
RmlsdGVyRWZmZWN0U2V0KCkpOwogICAgIH0KIAogICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBS
ZWZQdHI8RmlsdGVyRWZmZWN0PiA+IG1fYnVpbHRpbkVmZmVjdHM7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5LmggYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5LmgKaW5kZXggNmRmZGFj
NmRkNTc4YWYzMGY2ZGVhYjdjZDI2NTgzNjA0NDJmM2FkZi4uNmExZjAwOTdiNjFiYzBiNWRiMDk4
MDE1NTA5MDNjMTkwNDQ5NjdiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3Bl
cnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9w
ZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHkuaApAQCAtNTgsOCArNTgsOCBAQCBwdWJsaWM6CiAg
ICAgICAgIENhY2hlKiBjYWNoZSA9IGFuaW1hdGVkUHJvcGVydHlDYWNoZSgpOwogICAgICAgICBj
b25zdCBDYWNoZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY2FjaGUtPmVuZCgpOwogICAgICAgICBm
b3IgKENhY2hlOjpjb25zdF9pdGVyYXRvciBpdCA9IGNhY2hlLT5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKLSAgICAgICAgICAgIGlmIChpdC0+c2Vjb25kID09IHRoaXMpIHsKLSAgICAgICAg
ICAgICAgICBjYWNoZS0+cmVtb3ZlKGl0LT5maXJzdCk7CisgICAgICAgICAgICBpZiAoaXQtPnZh
bHVlID09IHRoaXMpIHsKKyAgICAgICAgICAgICAgICBjYWNoZS0+cmVtb3ZlKGl0LT5rZXkpOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBdHRyaWJ1dGVUb1Byb3BlcnR5
TWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0F0dHJpYnV0ZVRvUHJv
cGVydHlNYXAuY3BwCmluZGV4IGJlMzFjYzNjN2RhMmY1MGY1MWY2OWI1NTQ0MDI2NWRiMTM1YjUy
OGMuLmNjNDZjY2ZhMDgxZmZjODgzMDliN2VmMjJkNjNmMGYzNGVmZDgxN2MgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0F0dHJpYnV0ZVRvUHJvcGVydHlNYXAu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0F0dHJpYnV0ZVRvUHJv
cGVydHlNYXAuY3BwCkBAIC0zMSw3ICszMSw3IEBAIHZvaWQgU1ZHQXR0cmlidXRlVG9Qcm9wZXJ0
eU1hcDo6YWRkUHJvcGVydGllcyhTVkdBdHRyaWJ1dGVUb1Byb3BlcnR5TWFwJiBtYXApCiB7CiAg
ICAgQXR0cmlidXRlVG9Qcm9wZXJ0aWVzTWFwOjppdGVyYXRvciBlbmQgPSBtYXAubV9tYXAuZW5k
KCk7CiAgICAgZm9yIChBdHRyaWJ1dGVUb1Byb3BlcnRpZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbWFw
Lm1fbWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBQcm9wZXJ0aWVzVmVj
dG9yKiB2ZWN0b3IgPSBpdC0+c2Vjb25kOworICAgICAgICBQcm9wZXJ0aWVzVmVjdG9yKiB2ZWN0
b3IgPSBpdC0+dmFsdWU7CiAgICAgICAgIEFTU0VSVCh2ZWN0b3IpOwogCiAgICAgICAgIFByb3Bl
cnRpZXNWZWN0b3I6Oml0ZXJhdG9yIHZlY3RvckVuZCA9IHZlY3Rvci0+ZW5kKCk7CkBAIC04MSwx
MiArODEsMTIgQEAgdm9pZCBTVkdBdHRyaWJ1dGVUb1Byb3BlcnR5TWFwOjpzeW5jaHJvbml6ZVBy
b3BlcnRpZXMoU1ZHRWxlbWVudCogY29udGV4dEVsZW1lbnQKICAgICBBU1NFUlQoY29udGV4dEVs
ZW1lbnQpOwogICAgIEF0dHJpYnV0ZVRvUHJvcGVydGllc01hcDo6aXRlcmF0b3IgZW5kID0gbV9t
YXAuZW5kKCk7CiAgICAgZm9yIChBdHRyaWJ1dGVUb1Byb3BlcnRpZXNNYXA6Oml0ZXJhdG9yIGl0
ID0gbV9tYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFByb3BlcnRpZXNW
ZWN0b3IqIHZlY3RvciA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFByb3BlcnRpZXNWZWN0b3IqIHZl
Y3RvciA9IGl0LT52YWx1ZTsKICAgICAgICAgQVNTRVJUKHZlY3Rvcik7CiAKICAgICAgICAgUHJv
cGVydGllc1ZlY3Rvcjo6aXRlcmF0b3IgdmVjdG9yRW5kID0gdmVjdG9yLT5lbmQoKTsKICAgICAg
ICAgZm9yIChQcm9wZXJ0aWVzVmVjdG9yOjppdGVyYXRvciB2ZWN0b3JJdCA9IHZlY3Rvci0+YmVn
aW4oKTsgdmVjdG9ySXQgIT0gdmVjdG9yRW5kOyArK3ZlY3Rvckl0KQotICAgICAgICAgICAgc3lu
Y2hyb25pemVQcm9wZXJ0eShjb250ZXh0RWxlbWVudCwgaXQtPmZpcnN0LCAqdmVjdG9ySXQpOwor
ICAgICAgICAgICAgc3luY2hyb25pemVQcm9wZXJ0eShjb250ZXh0RWxlbWVudCwgaXQtPmtleSwg
KnZlY3Rvckl0KTsKICAgICB9IAogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3Jr
ZXJzL1dvcmtlckNvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250
ZXh0LmNwcAppbmRleCBkN2VhZjVkYjQ2ZWU4Y2E3ODBlYjc2MWM4ZjQyYjQ3NmM5MDU1NzQ4Li5h
NjlmYjcyNDZmYmNmYWY2YmU2Zjg4ODc3MjM3Y2JlMWE2ZmI0MWNhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAKQEAgLTE4NCw3ICsxODQsNyBAQCBib29sIFdvcmtl
ckNvbnRleHQ6Omhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0CiAgICAgQWN0aXZlRE9NT2JqZWN0
c01hcCYgYWN0aXZlT2JqZWN0cyA9IGFjdGl2ZURPTU9iamVjdHMoKTsKICAgICBBY3RpdmVET01P
YmplY3RzTWFwOjpjb25zdF9pdGVyYXRvciBhY3RpdmVPYmplY3RzRW5kID0gYWN0aXZlT2JqZWN0
cy5lbmQoKTsKICAgICBmb3IgKEFjdGl2ZURPTU9iamVjdHNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ZXIgPSBhY3RpdmVPYmplY3RzLmJlZ2luKCk7IGl0ZXIgIT0gYWN0aXZlT2JqZWN0c0VuZDsgKytp
dGVyKSB7Ci0gICAgICAgIGlmIChpdGVyLT5maXJzdC0+aGFzUGVuZGluZ0FjdGl2aXR5KCkpCisg
ICAgICAgIGlmIChpdGVyLT5rZXktPmhhc1BlbmRpbmdBY3Rpdml0eSgpKQogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJz
L1dvcmtlckV2ZW50UXVldWUuY3BwIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJFdmVu
dFF1ZXVlLmNwcAppbmRleCA1OWE5MzA3ZWFjMTc4NGI2OTljM2ZlZDIwYTQ1NWE3OWYwODkxMDdl
Li4yMzU1MjlmMWZlYjk3MTI4YzMxZDk2YTMwZGEwY2RmZmJiZTlkMGViIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckV2ZW50UXVldWUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3dvcmtlcnMvV29ya2VyRXZlbnRRdWV1ZS5jcHAKQEAgLTEyNyw3ICsxMjcsNyBAQCB2
b2lkIFdvcmtlckV2ZW50UXVldWU6OmNsb3NlKCkKIHsKICAgICBtX2lzQ2xvc2VkID0gdHJ1ZTsK
ICAgICBmb3IgKEV2ZW50VGFza01hcDo6aXRlcmF0b3IgaXQgPSBtX2V2ZW50VGFza01hcC5iZWdp
bigpOyBpdCAhPSBtX2V2ZW50VGFza01hcC5lbmQoKTsgKytpdCkgewotICAgICAgICBFdmVudERp
c3BhdGNoZXJUYXNrKiB0YXNrID0gaXQtPnNlY29uZDsKKyAgICAgICAgRXZlbnREaXNwYXRjaGVy
VGFzayogdGFzayA9IGl0LT52YWx1ZTsKICAgICAgICAgdGFzay0+Y2FuY2VsKCk7CiAgICAgfQog
ICAgIG1fZXZlbnRUYXNrTWFwLmNsZWFyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94
bWwvWE1MSHR0cFJlcXVlc3QuY3BwIGIvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0
LmNwcAppbmRleCAxMTFhNjQ5YTEzZTc2YWVmODM3MGIxODJjOTUxY2E5ZTc1Y2ZiMjJlLi40NWYz
ZmNkYmU2MmM3MGFhMDEwNDVmYmRhZDE5NjYyNzdiNjMyOWRlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9Y
TUxIdHRwUmVxdWVzdC5jcHAKQEAgLTkyMCw3ICs5MjAsNyBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0
OjpzZXRSZXF1ZXN0SGVhZGVySW50ZXJuYWwoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBjb25z
dCBTdAogewogICAgIEhUVFBIZWFkZXJNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX3JlcXVlc3RI
ZWFkZXJzLmFkZChuYW1lLCB2YWx1ZSk7CiAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAg
ICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgKz0gIiwgIiArIHZhbHVlOworICAgICAgICBy
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlICs9ICIsICIgKyB2YWx1ZTsKIH0KIAogU3RyaW5nIFhNTEh0
dHBSZXF1ZXN0OjpnZXRSZXF1ZXN0SGVhZGVyKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkgY29u
c3QKQEAgLTk0NywxNiArOTQ3LDE2IEBAIFN0cmluZyBYTUxIdHRwUmVxdWVzdDo6Z2V0QWxsUmVz
cG9uc2VIZWFkZXJzKEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAogICAgICAgICAvLyAgICAgMikg
VGhlcmUncyBubyBrbm93biBoYXJtIGluIGhpZGluZyBTZXQtQ29va2llIGhlYWRlciBmaWVsZHMg
ZW50aXJlbHk7IHdlIGRvbid0CiAgICAgICAgIC8vICAgICAgICBrbm93IGFueSB3aWRlbHkgdXNl
ZCB0ZWNobmlxdWUgdGhhdCByZXF1aXJlcyBhY2Nlc3MgdG8gdGhlbS4KICAgICAgICAgLy8gICAg
IDMpIEZpcmVmb3ggaGFzIGltcGxlbWVudGVkIHRoaXMgcG9saWN5LgotICAgICAgICBpZiAoaXNT
ZXRDb29raWVIZWFkZXIoaXQtPmZpcnN0KSAmJiAhc2VjdXJpdHlPcmlnaW4oKS0+Y2FuTG9hZExv
Y2FsUmVzb3VyY2VzKCkpCisgICAgICAgIGlmIChpc1NldENvb2tpZUhlYWRlcihpdC0+a2V5KSAm
JiAhc2VjdXJpdHlPcmlnaW4oKS0+Y2FuTG9hZExvY2FsUmVzb3VyY2VzKCkpCiAgICAgICAgICAg
ICBjb250aW51ZTsKIAotICAgICAgICBpZiAoIW1fc2FtZU9yaWdpblJlcXVlc3QgJiYgIWlzT25B
Y2Nlc3NDb250cm9sUmVzcG9uc2VIZWFkZXJXaGl0ZWxpc3QoaXQtPmZpcnN0KSAmJiAhYWNjZXNz
Q29udHJvbEV4cG9zZUhlYWRlclNldC5jb250YWlucyhpdC0+Zmlyc3QpKQorICAgICAgICBpZiAo
IW1fc2FtZU9yaWdpblJlcXVlc3QgJiYgIWlzT25BY2Nlc3NDb250cm9sUmVzcG9uc2VIZWFkZXJX
aGl0ZWxpc3QoaXQtPmtleSkgJiYgIWFjY2Vzc0NvbnRyb2xFeHBvc2VIZWFkZXJTZXQuY29udGFp
bnMoaXQtPmtleSkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZChpdC0+Zmlyc3QpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+
a2V5KTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJzonKTsKICAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQoJyAnKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPnNl
Y29uZCk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT52YWx1ZSk7CiAgICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdccicpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZCgnXG4nKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhGdW5j
dGlvbnMuY3BwIGIvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoRnVuY3Rpb25zLmNwcAppbmRleCAz
YzkwZTNiNTE3MTg1OWE1NmU4NzJiYjc2NTJmNTk1OThhNjM3ZDJhLi4wMDE5YmM0MzY1MDRiYTJi
MjFkZWZlZmYzMGY2NDgwYzFlZjk4MWUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwv
WFBhdGhGdW5jdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aEZ1bmN0aW9u
cy5jcHAKQEAgLTcyMyw3ICs3MjMsNyBAQCBGdW5jdGlvbiogY3JlYXRlRnVuY3Rpb24oY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBWZWN0b3I8RXhwcmVzc2lvbio+JiBhcmdzKQogICAgIEhhc2hN
YXA8U3RyaW5nLCBGdW5jdGlvblJlYz46Oml0ZXJhdG9yIGZ1bmN0aW9uTWFwSXRlciA9IGZ1bmN0
aW9uTWFwLT5maW5kKG5hbWUpOwogICAgIEZ1bmN0aW9uUmVjKiBmdW5jdGlvblJlYyA9IDA7CiAK
LSAgICBpZiAoZnVuY3Rpb25NYXBJdGVyID09IGZ1bmN0aW9uTWFwLT5lbmQoKSB8fCAhKGZ1bmN0
aW9uUmVjID0gJmZ1bmN0aW9uTWFwSXRlci0+c2Vjb25kKS0+YXJncy5jb250YWlucyhhcmdzLnNp
emUoKSkpCisgICAgaWYgKGZ1bmN0aW9uTWFwSXRlciA9PSBmdW5jdGlvbk1hcC0+ZW5kKCkgfHwg
IShmdW5jdGlvblJlYyA9ICZmdW5jdGlvbk1hcEl0ZXItPnZhbHVlKS0+YXJncy5jb250YWlucyhh
cmdzLnNpemUoKSkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgRnVuY3Rpb24qIGZ1bmN0aW9u
ID0gZnVuY3Rpb25SZWMtPmZhY3RvcnlGbigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
eG1sL1hQYXRoUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aFBhcnNlci5jcHAK
aW5kZXggYjVlNmE5MjM3NTkzYjRhYWEyYTI0M2YyZmY5ZDg2ZTU3ZjkzMGE5Ny4uNzQ5MTgwZGJl
NWVlOGY5YjEyMmZjZGExZTY5ODE2OWMwMDlmOGY4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUveG1sL1hQYXRoUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhQYXJz
ZXIuY3BwCkBAIC0xMDMsNyArMTAzLDcgQEAgc3RhdGljIGJvb2wgaXNBeGlzTmFtZShjb25zdCBT
dHJpbmcmIG5hbWUsIFN0ZXA6OkF4aXMmIHR5cGUpCiAgICAgQXhpc05hbWVzTWFwOjppdGVyYXRv
ciBpdCA9IGF4aXNOYW1lcy5maW5kKG5hbWUpOwogICAgIGlmIChpdCA9PSBheGlzTmFtZXMuZW5k
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB0eXBlID0gaXQtPnNlY29uZDsKKyAgICB0
eXBlID0gaXQtPnZhbHVlOwogICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwIGIvU291cmNlL1dlYkNvcmUv
eG1sL1hTTFRQcm9jZXNzb3JMaWJ4c2x0LmNwcAppbmRleCBlMjFjODI3YzI1ZGJjNWVmZDMxYmU3
MDVmOWYzNmY1MmRlNTQ4MjQxLi5hOTEyOTg4ZGE2MzhjY2Y4NDJlN2IxN2FmNWU0MzQ0NmU4YTMy
ZDI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yTGlieHNsdC5jcHAKQEAg
LTIyNSw4ICsyMjUsOCBAQCBzdGF0aWMgY29uc3QgY2hhcioqIHhzbHRQYXJhbUFycmF5RnJvbVBh
cmFtZXRlck1hcChYU0xUUHJvY2Vzc29yOjpQYXJhbWV0ZXJNYXAmCiAgICAgWFNMVFByb2Nlc3Nv
cjo6UGFyYW1ldGVyTWFwOjppdGVyYXRvciBlbmQgPSBwYXJhbWV0ZXJzLmVuZCgpOwogICAgIHVu
c2lnbmVkIGluZGV4ID0gMDsKICAgICBmb3IgKFhTTFRQcm9jZXNzb3I6OlBhcmFtZXRlck1hcDo6
aXRlcmF0b3IgaXQgPSBwYXJhbWV0ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAg
ICAgICBwYXJhbWV0ZXJBcnJheVtpbmRleCsrXSA9IGZhc3RTdHJEdXAoaXQtPmZpcnN0LnV0Zjgo
KS5kYXRhKCkpOwotICAgICAgICBwYXJhbWV0ZXJBcnJheVtpbmRleCsrXSA9IGZhc3RTdHJEdXAo
aXQtPnNlY29uZC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgcGFyYW1ldGVyQXJyYXlbaW5kZXgr
K10gPSBmYXN0U3RyRHVwKGl0LT5rZXkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHBhcmFtZXRl
ckFycmF5W2luZGV4KytdID0gZmFzdFN0ckR1cChpdC0+dmFsdWUudXRmOCgpLmRhdGEoKSk7CiAg
ICAgfQogICAgIHBhcmFtZXRlckFycmF5W2luZGV4XSA9IDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yUXQuY3BwIGIvU291cmNlL1dlYkNvcmUveG1sL1hT
TFRQcm9jZXNzb3JRdC5jcHAKaW5kZXggYTY3YzVmZGU3NmZjYzU2OGNlM2M0YzY4YzYxMDYwZDQw
YmI5MzEwYy4uMGM0MTQwYThkNzllZGVmYTUwMjMzNWZlMDE4MzEyZjQ3NWYxNzBmNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JRdC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JRdC5jcHAKQEAgLTE0Miw3ICsxNDIsNyBAQCBib29s
IFhTTFRQcm9jZXNzb3I6OnRyYW5zZm9ybVRvU3RyaW5nKE5vZGUqIHNvdXJjZU5vZGUsIFN0cmlu
ZyYsIFN0cmluZyYgcmVzdWx0UwogCiAgICAgWFNMVFByb2Nlc3Nvcjo6UGFyYW1ldGVyTWFwOjpp
dGVyYXRvciBlbmQgPSBtX3BhcmFtZXRlcnMuZW5kKCk7CiAgICAgZm9yIChYU0xUUHJvY2Vzc29y
OjpQYXJhbWV0ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wYXJhbWV0ZXJzLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkKLSAgICAgICAgcXVlcnkuYmluZFZhcmlhYmxlKFFTdHJpbmcoaXQtPmZpcnN0
KSwgUVhtbEl0ZW0oUVZhcmlhbnQoUVN0cmluZyhpdC0+c2Vjb25kKSkpKTsKKyAgICAgICAgcXVl
cnkuYmluZFZhcmlhYmxlKFFTdHJpbmcoaXQtPmtleSksIFFYbWxJdGVtKFFWYXJpYW50KFFTdHJp
bmcoaXQtPnZhbHVlKSkpKTsKIAogICAgIFFTdHJpbmcgc291cmNlOwogICAgIGlmIChzb3VyY2VJ
c0RvY3VtZW50ICYmIG93bmVyRG9jdW1lbnQtPnRyYW5zZm9ybVNvdXJjZSgpKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9CYWNraW5nU3RvcmUuY3BwIGIvU291cmNl
L1dlYktpdC9ibGFja2JlcnJ5L0FwaS9CYWNraW5nU3RvcmUuY3BwCmluZGV4IGQzYzJjZTkzYTYy
NWI2ZGNjMWZiMTMxNDU5OGRlODgwMTA2NDFmY2EuLjk2NzE1NDg4YTc5Nzc1NzU3YzczMDZiNWU0
NmY5Mzg3YzBjYWYzNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkv
QmFja2luZ1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL0JhY2tp
bmdTdG9yZS5jcHAKQEAgLTcxMSw4ICs3MTEsOCBAQCB2b2lkIEJhY2tpbmdTdG9yZVByaXZhdGU6
OnNldEJhY2tpbmdTdG9yZVJlY3QoY29uc3QgUGxhdGZvcm06OkludFJlY3QmIGJhY2tpbmdTdAog
ICAgIC8vIG91ciBuZXcgYmFja2luZyBzdG9yZSByZWN0LgogICAgIFRpbGVNYXA6OmNvbnN0X2l0
ZXJhdG9yIHRpbGVNYXBFbmQgPSBjdXJyZW50TWFwLmVuZCgpOwogICAgIGZvciAoVGlsZU1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBjdXJyZW50TWFwLmJlZ2luKCk7IGl0ICE9IHRpbGVNYXBFbmQ7
ICsraXQpIHsKLSAgICAgICAgVGlsZUluZGV4IG9sZEluZGV4ID0gaXQtPmZpcnN0OwotICAgICAg
ICBCYWNraW5nU3RvcmVUaWxlKiB0aWxlID0gaXQtPnNlY29uZDsKKyAgICAgICAgVGlsZUluZGV4
IG9sZEluZGV4ID0gaXQtPmtleTsKKyAgICAgICAgQmFja2luZ1N0b3JlVGlsZSogdGlsZSA9IGl0
LT52YWx1ZTsKIAogICAgICAgICAvLyBSZXNldCB0aGUgb2xkIGluZGV4LgogICAgICAgICByZXNl
dFRpbGUob2xkSW5kZXgsIHRpbGUsIGZhbHNlIC8qcmVzZXRCYWNrZ3JvdW5kKi8pOwpAQCAtNzY4
LDggKzc2OCw4IEBAIHZvaWQgQmFja2luZ1N0b3JlUHJpdmF0ZTo6c2V0QmFja2luZ1N0b3JlUmVj
dChjb25zdCBQbGF0Zm9ybTo6SW50UmVjdCYgYmFja2luZ1N0CiAgICAgc2l6ZV90IGkgPSAwOwog
ICAgIFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGxlZnRPdmVyRW5kID0gbGVmdE92ZXJUaWxlcy5l
bmQoKTsKICAgICBmb3IgKFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGVmdE92ZXJUaWxl
cy5iZWdpbigpOyBpdCAhPSBsZWZ0T3ZlckVuZDsgKytpdCkgewotICAgICAgICBUaWxlSW5kZXgg
b2xkSW5kZXggPSBpdC0+Zmlyc3Q7Ci0gICAgICAgIEJhY2tpbmdTdG9yZVRpbGUqIHRpbGUgPSBp
dC0+c2Vjb25kOworICAgICAgICBUaWxlSW5kZXggb2xkSW5kZXggPSBpdC0+a2V5OworICAgICAg
ICBCYWNraW5nU3RvcmVUaWxlKiB0aWxlID0gaXQtPnZhbHVlOwogICAgICAgICBpZiAoaSA+PSBp
bmRleGVzVG9GaWxsLnNpemUoKSkgewogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgICAgICBicmVhazsKQEAgLTE3NDQsNyArMTc0NCw3IEBAIFBsYXRmb3JtOjpJbnRS
ZWN0IEJhY2tpbmdTdG9yZVByaXZhdGU6OnZpc2libGVUaWxlc1JlY3QoKSBjb25zdAogICAgIFRp
bGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGN1cnJlbnRNYXAuZW5kKCk7CiAgICAgZm9yIChU
aWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGN1cnJlbnRNYXAuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7CiAgICAgICAgIFRpbGVSZWN0IHRpbGVSZWN0OwotICAgICAgICB0aWxlUmVjdC5m
aXJzdCA9IGl0LT5maXJzdDsKKyAgICAgICAgdGlsZVJlY3QuZmlyc3QgPSBpdC0+a2V5OwogICAg
ICAgICB0aWxlUmVjdC5zZWNvbmQgPSB0aGlzLT50aWxlUmVjdCgpOwogICAgICAgICBQbGF0Zm9y
bTo6SW50UmVjdCB0aWxlID0gbWFwRnJvbVRpbGVzVG9UcmFuc2Zvcm1lZENvbnRlbnRzKHRpbGVS
ZWN0KTsKICAgICAgICAgaWYgKHRpbGUuaW50ZXJzZWN0cyh2aXNpYmxlQ29udGVudHNSZWN0KCkp
KQpAQCAtMTgwNSw3ICsxODA1LDcgQEAgdm9pZCBCYWNraW5nU3RvcmVQcml2YXRlOjpyZXNldFRp
bGVzKGJvb2wgcmVzZXRCYWNrZ3JvdW5kKQogCiAgICAgVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gY3VycmVudE1hcC5lbmQoKTsKICAgICBmb3IgKFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gY3VycmVudE1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHJlc2V0
VGlsZShpdC0+Zmlyc3QsIGl0LT5zZWNvbmQsIHJlc2V0QmFja2dyb3VuZCk7CisgICAgICAgIHJl
c2V0VGlsZShpdC0+a2V5LCBpdC0+dmFsdWUsIHJlc2V0QmFja2dyb3VuZCk7CiB9CiAKIHZvaWQg
QmFja2luZ1N0b3JlUHJpdmF0ZTo6dXBkYXRlVGlsZXMoYm9vbCB1cGRhdGVWaXNpYmxlLCBib29s
IGltbWVkaWF0ZSkKQEAgLTE4MTgsMTAgKzE4MTgsMTAgQEAgdm9pZCBCYWNraW5nU3RvcmVQcml2
YXRlOjp1cGRhdGVUaWxlcyhib29sIHVwZGF0ZVZpc2libGUsIGJvb2wgaW1tZWRpYXRlKQogCiAg
ICAgVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY3VycmVudE1hcC5lbmQoKTsKICAgICBm
b3IgKFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY3VycmVudE1hcC5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKLSAgICAgICAgYm9vbCBpc1Zpc2libGUgPSBpc1RpbGVWaXNpYmxlKGl0
LT5maXJzdCk7CisgICAgICAgIGJvb2wgaXNWaXNpYmxlID0gaXNUaWxlVmlzaWJsZShpdC0+a2V5
KTsKICAgICAgICAgaWYgKCF1cGRhdGVWaXNpYmxlICYmIGlzVmlzaWJsZSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICB1cGRhdGVUaWxlKGl0LT5maXJzdCwgaW1tZWRpYXRlKTsKKyAg
ICAgICAgdXBkYXRlVGlsZShpdC0+a2V5LCBpbW1lZGlhdGUpOwogICAgIH0KIH0KIApAQCAtMTg0
Miw4ICsxODQyLDggQEAgdm9pZCBCYWNraW5nU3RvcmVQcml2YXRlOjp1cGRhdGVUaWxlc0ZvclNj
cm9sbE9yTm90UmVuZGVyZWRSZWdpb24oYm9vbCBjaGVja0xvYWQKIAogICAgIFRpbGVNYXA6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IGN1cnJlbnRNYXAuZW5kKCk7CiAgICAgZm9yIChUaWxlTWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IGN1cnJlbnRNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7
Ci0gICAgICAgIFRpbGVJbmRleCBpbmRleCA9IGl0LT5maXJzdDsKLSAgICAgICAgQmFja2luZ1N0
b3JlVGlsZSogdGlsZSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFRpbGVJbmRleCBpbmRleCA9IGl0
LT5rZXk7CisgICAgICAgIEJhY2tpbmdTdG9yZVRpbGUqIHRpbGUgPSBpdC0+dmFsdWU7CiAgICAg
ICAgIGJvb2wgaXNWaXNpYmxlID0gaXNUaWxlVmlzaWJsZShpbmRleCk7CiAgICAgICAgIC8vIFRo
ZSByZWN0IGluIHRyYW5zZm9ybWVkIGNvbnRlbnRzIGNvb3JkaW5hdGVzLgogICAgICAgICBQbGF0
Zm9ybTo6SW50UmVjdCByZWN0KG9yaWdpbk9mVGlsZShpbmRleCksIHRpbGVTaXplKCkpOwpAQCAt
MTk4Niw4ICsxOTg2LDggQEAgQmFja2luZ1N0b3JlUHJpdmF0ZTo6VGlsZVJlY3RMaXN0IEJhY2tp
bmdTdG9yZVByaXZhdGU6Om1hcEZyb21UcmFuc2Zvcm1lZENvbnRlbnQKICAgICBUaWxlUmVjdExp
c3QgdGlsZVJlY3RMaXN0OwogICAgIFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHRpbGVN
YXAuZW5kKCk7CiAgICAgZm9yIChUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHRpbGVNYXAu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFRpbGVJbmRleCBpbmRleCA9IGl0
LT5maXJzdDsKLSAgICAgICAgQmFja2luZ1N0b3JlVGlsZSogdGlsZSA9IGl0LT5zZWNvbmQ7Cisg
ICAgICAgIFRpbGVJbmRleCBpbmRleCA9IGl0LT5rZXk7CisgICAgICAgIEJhY2tpbmdTdG9yZVRp
bGUqIHRpbGUgPSBpdC0+dmFsdWU7CiAKICAgICAgICAgLy8gTmVlZCB0byBtYXAgdGhlIHJlY3Qg
dG8gdGlsZSBjb29yZGluYXRlcy4KICAgICAgICAgUGxhdGZvcm06OkludFJlY3QgciA9IHJlY3Q7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvTm90
aWZpY2F0aW9uUHJlc2VudGVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2Vi
Q29yZVN1cHBvcnQvTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbC5jcHAKaW5kZXggNmIyOTIxMDI5
NDYyNzdkYTI4ZTc5OGQ3ZWVkZjhiOTM5YzUzMTljNy4uMmNkN2MxNzQ1MjdkZjEwZjM5MGExNjVi
YWE3YmQ5NmY0ZjUzZmQ4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dl
YkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlckltcGwuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJJbXBs
LmNwcApAQCAtODEsNyArODEsNyBAQCB2b2lkIE5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6OmNh
bmNlbChOb3RpZmljYXRpb24qIG5vdGlmaWNhdGlvbikKICAgICBpZiAoaXQgPT0gbV9ub3RpZmlj
YXRpb25zLmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3BsYXRmb3JtUHJlc2VudGVy
LT5jYW5jZWwoc3RkOjpzdHJpbmcoaXQtPnNlY29uZC51dGY4KCkuZGF0YSgpKSk7CisgICAgbV9w
bGF0Zm9ybVByZXNlbnRlci0+Y2FuY2VsKHN0ZDo6c3RyaW5nKGl0LT52YWx1ZS51dGY4KCkuZGF0
YSgpKSk7CiAgICAgbV9ub3RpZmljYXRpb25zLnJlbW92ZShpdCk7CiB9CiAKQEAgLTEwOCwxMiAr
MTA4LDEyIEBAIHZvaWQgTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6b25QZXJtaXNzaW9uKGNv
bnN0IHN0ZDo6c3RyaW5nJiBkb21haW4sIGJvb2wgaXNBCiAgICAgU3RyaW5nIGRvbWFpblN0cmlu
ZyA9IFN0cmluZzo6ZnJvbVVURjgoZG9tYWluLmNfc3RyKCkpOwogICAgIFBlcm1pc3Npb25SZXF1
ZXN0TWFwOjppdGVyYXRvciBpdCA9IG1fcGVybWlzc2lvblJlcXVlc3RzLmJlZ2luKCk7CiAgICAg
Zm9yICg7IGl0ICE9IG1fcGVybWlzc2lvblJlcXVlc3RzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAg
IGlmIChpdC0+Zmlyc3QtPnVybCgpLmhvc3QoKSAhPSBkb21haW5TdHJpbmcpCisgICAgICAgIGlm
IChpdC0+a2V5LT51cmwoKS5ob3N0KCkgIT0gZG9tYWluU3RyaW5nKQogICAgICAgICAgICAgY29u
dGludWU7CiAKICAgICAgICAgaWYgKGlzQWxsb3dlZCkgewogICAgICAgICAgICAgbV9hbGxvd2Vk
RG9tYWlucy5hZGQoZG9tYWluU3RyaW5nKTsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPmhhbmRs
ZUV2ZW50KCk7CisgICAgICAgICAgICBpdC0+dmFsdWUtPmhhbmRsZUV2ZW50KCk7CiAgICAgICAg
IH0gZWxzZQogICAgICAgICAgICAgbV9hbGxvd2VkRG9tYWlucy5yZW1vdmUoZG9tYWluU3RyaW5n
KTsKIApAQCAtMTQ0LDkgKzE0NCw5IEBAIHZvaWQgTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6
bm90aWZpY2F0aW9uQ2xpY2tlZChjb25zdCBzdGQ6OnN0cmluZyYgaWQpCiAgICAgU3RyaW5nIGlk
U3RyaW5nID0gU3RyaW5nOjpmcm9tVVRGOChpZC5jX3N0cigpKTsKICAgICBOb3RpZmljYXRpb25N
YXA6Oml0ZXJhdG9yIGl0ID0gbV9ub3RpZmljYXRpb25zLmJlZ2luKCk7CiAgICAgZm9yICg7IGl0
ICE9IG1fbm90aWZpY2F0aW9ucy5lbmQoKTsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnNlY29u
ZCA9PSBpZFN0cmluZyAmJiBpdC0+Zmlyc3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkgewot
ICAgICAgICAgICAgUmVmUHRyPE5vdGlmaWNhdGlvbj4gbm90aWZpY2F0aW9uID0gaXQtPmZpcnN0
OwotICAgICAgICAgICAgaXQtPmZpcnN0LT5kaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZl
bnROYW1lcygpLmNsaWNrRXZlbnQsIGZhbHNlLCB0cnVlKSk7CisgICAgICAgIGlmIChpdC0+dmFs
dWUgPT0gaWRTdHJpbmcgJiYgaXQtPmZpcnN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpIHsK
KyAgICAgICAgICAgIFJlZlB0cjxOb3RpZmljYXRpb24+IG5vdGlmaWNhdGlvbiA9IGl0LT5rZXk7
CisgICAgICAgICAgICBpdC0+a2V5LT5kaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnRO
YW1lcygpLmNsaWNrRXZlbnQsIGZhbHNlLCB0cnVlKSk7CiAgICAgICAgICAgICBtX25vdGlmaWNh
dGlvbnMucmVtb3ZlKG5vdGlmaWNhdGlvbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0Fi
b3V0RGF0YS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9BYm91
dERhdGEuY3BwCmluZGV4IDdiN2ExZDU5YWI4NTc4MWMyOWViOTIxOWViMzU3MmNiNjg3MDkzZTQu
LjVlMWI3N2UzYjNmOWYzNjM2MjNjNGZiNmYxYTZkMDg5MTNhYTAxMmIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0Fib3V0RGF0YS5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvQWJvdXREYXRhLmNwcApAQCAt
MjA1LDcgKzIwNSw3IEBAIHN0YXRpYyB2b2lkIGR1bXBKU0NUeXBlQ291bnRTZXRUb1RhYmxlSFRN
TChTdHJpbmcmIHRhYmxlSFRNTCwgSlNDOjpUeXBlQ291bnRTZXQqCiAgICAgICAgIHJldHVybjsK
IAogICAgIGZvciAoSlNDOjpUeXBlQ291bnRTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSB0eXBl
Q291bnRTZXQtPmJlZ2luKCk7IGl0ZXIgIT0gdHlwZUNvdW50U2V0LT5lbmQoKTsgKytpdGVyKQot
ICAgICAgICB0YWJsZUhUTUwgKz0gbnVtYmVyVG9IVE1MVHIoaXRlci0+Zmlyc3QsIGl0ZXItPnNl
Y29uZCk7CisgICAgICAgIHRhYmxlSFRNTCArPSBudW1iZXJUb0hUTUxUcihpdGVyLT5rZXksIGl0
ZXItPnZhbHVlKTsKIH0KIAogc3RhdGljIFN0cmluZyBtZW1vcnlQYWdlKCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0ZyYW1lTGF5ZXJzLmNwcCBi
L1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0ZyYW1lTGF5ZXJzLmNwcApp
bmRleCBhNDlmNTk0ZjJjMjBjMmMzMTc5MzIzOTJkNzFhNTQ1Njg5YjVjNDY3Li4yN2M2MmI2MDAw
ZDU3NjJkMzllZDExNjJmZWJkNDM2YjQzMzhkNTVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9GcmFtZUxheWVycy5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvRnJhbWVMYXllcnMuY3BwCkBAIC05MSw3ICs5
MSw3IEBAIHZvaWQgRnJhbWVMYXllcnM6OnJlbW92ZUxheWVyQnlGcmFtZShGcmFtZSogZnJhbWUp
CiAgICAgQVNTRVJUKGZyYW1lKTsKICAgICBGcmFtZUxheWVyTWFwOjppdGVyYXRvciBpdCA9IG1f
ZnJhbWVMYXllcnMuZmluZChmcmFtZSk7CiAgICAgaWYgKGl0ICE9IG1fZnJhbWVMYXllcnMuZW5k
KCkpIHsKLSAgICAgICAgTGF5ZXJXZWJLaXRUaHJlYWQqIGxheWVyID0gaXQtPnNlY29uZDsKKyAg
ICAgICAgTGF5ZXJXZWJLaXRUaHJlYWQqIGxheWVyID0gaXQtPnZhbHVlOwogICAgICAgICBpZiAo
bGF5ZXItPnN1cGVybGF5ZXIoKSkKICAgICAgICAgICAgIGxheWVyLT5yZW1vdmVGcm9tU3VwZXJs
YXllcigpOwogICAgICAgICBtX2ZyYW1lTGF5ZXJzLnJlbW92ZShpdCk7CkBAIC0xMDQsNyArMTA0
LDcgQEAgdm9pZCBGcmFtZUxheWVyczo6Y29tbWl0T25XZWJLaXRUaHJlYWQoZG91YmxlIHNjYWxl
KQogICAgIEFTU0VSVChtX3Jvb3RMYXllcik7CiAgICAgaWYgKCFpc1Jvb3RMYXllck1haW5GcmFt
ZUxheWVyKCkpIHsKICAgICAgICAgZm9yIChGcmFtZUxheWVyTWFwOjppdGVyYXRvciBpdCA9IG1f
ZnJhbWVMYXllcnMuYmVnaW4oKTsgaXQgIT0gbV9mcmFtZUxheWVycy5lbmQoKTsgKytpdCkKLSAg
ICAgICAgICAgIGl0LT5zZWNvbmQtPnNldEFic29sdXRlT2Zmc2V0KGZyYW1lTGF5ZXJBYnNvbHV0
ZU9mZnNldChpdC0+Zmlyc3QpKTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+c2V0QWJzb2x1dGVP
ZmZzZXQoZnJhbWVMYXllckFic29sdXRlT2Zmc2V0KGl0LT5rZXkpKTsKICAgICB9CiAgICAgbV9y
b290TGF5ZXItPmNvbW1pdE9uV2ViS2l0VGhyZWFkKHNjYWxlKTsKIH0KQEAgLTExMiw3ICsxMTIs
NyBAQCB2b2lkIEZyYW1lTGF5ZXJzOjpjb21taXRPbldlYktpdFRocmVhZChkb3VibGUgc2NhbGUp
CiB2b2lkIEZyYW1lTGF5ZXJzOjpjYWxjdWxhdGVSb290TGF5ZXIoKQogewogICAgIGlmIChtX2Zy
YW1lTGF5ZXJzLnNpemUoKSA9PSAxICYmIG1fZnJhbWVMYXllcnMuYmVnaW4oKS0+Zmlyc3QgPT0g
bV9wYWdlUHJpdmF0ZS0+bV9tYWluRnJhbWUpCi0gICAgICAgIG1fcm9vdExheWVyID0gbV9mcmFt
ZUxheWVycy5iZWdpbigpLT5zZWNvbmQ7CisgICAgICAgIG1fcm9vdExheWVyID0gbV9mcmFtZUxh
eWVycy5iZWdpbigpLT52YWx1ZTsKICAgICBlbHNlIGlmIChtX3Jvb3RHcmFwaGljc0xheWVyKQog
ICAgICAgICBtX3Jvb3RMYXllciA9IG1fcm9vdEdyYXBoaWNzTGF5ZXItPnBsYXRmb3JtTGF5ZXIo
KTsKICAgICBlbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJH
ZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5jcHAKaW5k
ZXggNGMwZWQ5Y2Q3MTdiNmY0ZDVhYTZhZmFmOTcwYmViNjk2Nzk2ODlkMy4uMWVlYWM2NjdiZGY2
NmIzZjE5M2ZiMzM1YTM4NzEyOGZiYzkxMjY3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdlb2xvY2F0aW9uUGVybWlzc2lvblJl
cXVlc3RNYW5hZ2VyLmNwcApAQCAtNjQsNyArNjQsNyBAQCBib29sIFdlYkdlb2xvY2F0aW9uUGVy
bWlzc2lvblJlcXVlc3RNYW5hZ2VyOjpyZW1vdmUoY29uc3QgV2ViS2l0OjpXZWJHZW9sb2NhdGlv
bgogICAgIEdlb2xvY2F0aW9uSWRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wcml2YXRlLT5tX2dlb2xv
Y2F0aW9uSWRNYXAuZmluZChnZW9sb2NhdGlvbik7CiAgICAgaWYgKGl0ID09IG1fcHJpdmF0ZS0+
bV9nZW9sb2NhdGlvbklkTWFwLmVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWQg
PSBpdC0+c2Vjb25kOworICAgIGlkID0gaXQtPnZhbHVlOwogICAgIG1fcHJpdmF0ZS0+bV9nZW9s
b2NhdGlvbklkTWFwLnJlbW92ZShpdCk7CiAgICAgbV9wcml2YXRlLT5tX2lkR2VvbG9jYXRpb25N
YXAucmVtb3ZlKGlkKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTc1LDcgKzc1LDcgQEAgYm9vbCBX
ZWJHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlcjo6cmVtb3ZlKGludCBpZCwgV2Vi
S2l0OjpXZWJHZW9sb2NhdGkKICAgICBJZEdlb2xvY2F0aW9uTWFwOjppdGVyYXRvciBpdCA9IG1f
cHJpdmF0ZS0+bV9pZEdlb2xvY2F0aW9uTWFwLmZpbmQoaWQpOwogICAgIGlmIChpdCA9PSBtX3By
aXZhdGUtPm1faWRHZW9sb2NhdGlvbk1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIEdlb2xvY2F0aW9uKiBnZW9sb2NhdGlvbiA9IGl0LT5zZWNvbmQ7CisgICAgR2VvbG9jYXRp
b24qIGdlb2xvY2F0aW9uID0gaXQtPnZhbHVlOwogICAgIHBlcm1pc3Npb25SZXF1ZXN0ID0gV2Vi
R2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdChnZW9sb2NhdGlvbik7CiAgICAgbV9wcml2YXRl
LT5tX2lkR2VvbG9jYXRpb25NYXAucmVtb3ZlKGl0KTsKICAgICBtX3ByaXZhdGUtPm1fZ2VvbG9j
YXRpb25JZE1hcC5yZW1vdmUoZ2VvbG9jYXRpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViSURCTWV0YWRhdGEuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViSURCTWV0YWRhdGEuY3BwCmluZGV4IDAxZDg3OGEwYTlmMmMxYzg5MTQ5MTkxYmM4
Yzg3MWQ4Y2RjZjY1MzcuLmYyZmMyODU5NDQ0YzQ4YTcyZGQ5NGFkYzExZDE4ODE3ZjVlYjQ1ZDgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQk1ldGFkYXRhLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJNZXRhZGF0YS5jcHAKQEAg
LTQ2LDcgKzQ2LDcgQEAgV2ViSURCTWV0YWRhdGE6OldlYklEQk1ldGFkYXRhKGNvbnN0IFdlYkNv
cmU6OklEQkRhdGFiYXNlTWV0YWRhdGEmIG1ldGFkYXRhKQogCiAgICAgc2l6ZV90IGkgPSAwOwog
ICAgIGZvciAoSURCRGF0YWJhc2VNZXRhZGF0YTo6T2JqZWN0U3RvcmVNYXA6OmNvbnN0X2l0ZXJh
dG9yIHN0b3JlSXRlcmF0b3IgPSBtZXRhZGF0YS5vYmplY3RTdG9yZXMuYmVnaW4oKTsgc3RvcmVJ
dGVyYXRvciAhPSBtZXRhZGF0YS5vYmplY3RTdG9yZXMuZW5kKCk7ICsrc3RvcmVJdGVyYXRvcikg
ewotICAgICAgICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZSA9IHN0
b3JlSXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0
YSYgb2JqZWN0U3RvcmUgPSBzdG9yZUl0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgT2JqZWN0U3Rv
cmUgd2ViT2JqZWN0U3RvcmU7CiAgICAgICAgIHdlYk9iamVjdFN0b3JlLm5hbWUgPSBvYmplY3RT
dG9yZS5uYW1lOwogICAgICAgICB3ZWJPYmplY3RTdG9yZS5rZXlQYXRoID0gb2JqZWN0U3RvcmUu
a2V5UGF0aDsKQEAgLTU1LDcgKzU1LDcgQEAgV2ViSURCTWV0YWRhdGE6OldlYklEQk1ldGFkYXRh
KGNvbnN0IFdlYkNvcmU6OklEQkRhdGFiYXNlTWV0YWRhdGEmIG1ldGFkYXRhKQogCiAgICAgICAg
IHNpemVfdCBqID0gMDsKICAgICAgICAgZm9yIChJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbmRl
eE1hcDo6Y29uc3RfaXRlcmF0b3IgaW5kZXhJdGVyYXRvciA9IG9iamVjdFN0b3JlLmluZGV4ZXMu
YmVnaW4oKTsgaW5kZXhJdGVyYXRvciAhPSBvYmplY3RTdG9yZS5pbmRleGVzLmVuZCgpOyArK2lu
ZGV4SXRlcmF0b3IpIHsKLSAgICAgICAgICAgIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4
ID0gaW5kZXhJdGVyYXRvci0+c2Vjb25kOworICAgICAgICAgICAgY29uc3QgSURCSW5kZXhNZXRh
ZGF0YSYgaW5kZXggPSBpbmRleEl0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgICAgIEluZGV4IHdl
YkluZGV4OwogICAgICAgICAgICAgd2ViSW5kZXgubmFtZSA9IGluZGV4Lm5hbWU7CiAgICAgICAg
ICAgICB3ZWJJbmRleC5rZXlQYXRoID0gaW5kZXgua2V5UGF0aDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkludGVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJJbnRlbnQuY3BwCmluZGV4IDU1Nzc1ZWNmY2RjMTYyMDRlNTg0MDZhMTU3OGFl
OGViNjY4N2VkOGMuLjA0MWM3ZjJlOWM1MDM1NzU5YmQ4ZTNlYmIzNDNmYzRjZmZkYjdkMGQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkludGVudC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW50ZW50LmNwcApAQCAtMTg4LDcgKzE4OCw3
IEBAIFdlYlN0cmluZyBXZWJJbnRlbnQ6OmV4dHJhc1ZhbHVlKGNvbnN0IFdlYlN0cmluZyYgbmFt
ZSkgY29uc3QKICAgICBXVEY6Okhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRv
ciB2YWwgPSBtX3ByaXZhdGUtPmV4dHJhcygpLmZpbmQobmFtZSk7CiAgICAgaWYgKHZhbCA9PSBt
X3ByaXZhdGUtPmV4dHJhcygpLmVuZCgpKQogICAgICAgICByZXR1cm4gV2ViU3RyaW5nKCk7Ci0g
ICAgcmV0dXJuIHZhbC0+c2Vjb25kOworICAgIHJldHVybiB2YWwtPnZhbHVlOwogI2Vsc2UKICAg
ICByZXR1cm4gV2ViU3RyaW5nKCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvV2ViU29ja2V0RXh0ZW5zaW9uRGlzcGF0Y2hlclRlc3QuY3BwIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyVGVz
dC5jcHAKaW5kZXggMzU4OTgzYjgzOTkzMTRjZGEwMzdjOGMwMzI0OWVlOWI2NzJlOTY3Yi4uMjQ1
MTRjZDU4ZmJmZDAwYWFhODg3MjQyYTFhYzM2MzMxY2FlYjc4MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyVGVzdC5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJTb2NrZXRFeHRlbnNpb25E
aXNwYXRjaGVyVGVzdC5jcHAKQEAgLTEwMywxMCArMTAzLDEwIEBAIFRFU1RfRihXZWJTb2NrZXRF
eHRlbnNpb25EaXNwYXRjaGVyVGVzdCwgVGVzdFBhcmFtZXRlcnMpCiAgICAgRVhQRUNUX0VRKDIs
IG1fcGFyc2VkUGFyYW1ldGVyc1swXS5zaXplKCkpOwogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJp
bmc+OjppdGVyYXRvciBwYXJhbWV0ZXIgPSBtX3BhcnNlZFBhcmFtZXRlcnNbMF0uZmluZCgibWF4
LWNoYW5uZWxzIik7CiAgICAgRVhQRUNUX1RSVUUocGFyYW1ldGVyICE9IG1fcGFyc2VkUGFyYW1l
dGVyc1swXS5lbmQoKSk7Ci0gICAgRVhQRUNUX0VRKCI0IiwgcGFyYW1ldGVyLT5zZWNvbmQpOwor
ICAgIEVYUEVDVF9FUSgiNCIsIHBhcmFtZXRlci0+dmFsdWUpOwogICAgIHBhcmFtZXRlciA9IG1f
cGFyc2VkUGFyYW1ldGVyc1swXS5maW5kKCJmbG93LWNvbnRyb2wiKTsKICAgICBFWFBFQ1RfVFJV
RShwYXJhbWV0ZXIgIT0gbV9wYXJzZWRQYXJhbWV0ZXJzWzBdLmVuZCgpKTsKLSAgICBFWFBFQ1Rf
VFJVRShwYXJhbWV0ZXItPnNlY29uZC5pc051bGwoKSk7CisgICAgRVhQRUNUX1RSVUUocGFyYW1l
dGVyLT52YWx1ZS5pc051bGwoKSk7CiB9CiAKIFRFU1RfRihXZWJTb2NrZXRFeHRlbnNpb25EaXNw
YXRjaGVyVGVzdCwgVGVzdE11bHRpcGxlKQpAQCAtMTMxLDEyICsxMzEsMTIgQEAgVEVTVF9GKFdl
YlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXJUZXN0LCBUZXN0TXVsdGlwbGUpCiAgICAgICAgIGNv
bnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBwYXJzZWRQYXJhbWV0ZXJzID0gbV9wYXJzZWRQ
YXJhbWV0ZXJzW2ldOwogICAgICAgICBFWFBFQ1RfRVEoZXhwZWN0ZWRbaV0ucGFyYW1ldGVycy5z
aXplKCksIG1fcGFyc2VkUGFyYW1ldGVyc1tpXS5zaXplKCkpOwogICAgICAgICBmb3IgKEhhc2hN
YXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdGVyYXRvciA9IGV4cGVjdGVkUGFy
YW1ldGVycy5iZWdpbigpOyBpdGVyYXRvciAhPSBleHBlY3RlZFBhcmFtZXRlcnMuZW5kKCk7ICsr
aXRlcmF0b3IpIHsKLSAgICAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9p
dGVyYXRvciBwYXJzZWQgPSBwYXJzZWRQYXJhbWV0ZXJzLmZpbmQoaXRlcmF0b3ItPmZpcnN0KTsK
KyAgICAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBwYXJz
ZWQgPSBwYXJzZWRQYXJhbWV0ZXJzLmZpbmQoaXRlcmF0b3ItPmtleSk7CiAgICAgICAgICAgICBF
WFBFQ1RfVFJVRShwYXJzZWQgIT0gcGFyc2VkUGFyYW1ldGVycy5lbmQoKSk7Ci0gICAgICAgICAg
ICBpZiAoaXRlcmF0b3ItPnNlY29uZC5pc051bGwoKSkKLSAgICAgICAgICAgICAgICBFWFBFQ1Rf
VFJVRShwYXJzZWQtPnNlY29uZC5pc051bGwoKSk7CisgICAgICAgICAgICBpZiAoaXRlcmF0b3It
PnZhbHVlLmlzTnVsbCgpKQorICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVFKHBhcnNlZC0+dmFs
dWUuaXNOdWxsKCkpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIEVYUEVDVF9F
UShpdGVyYXRvci0+c2Vjb25kLCBwYXJzZWQtPnNlY29uZCk7CisgICAgICAgICAgICAgICAgRVhQ
RUNUX0VRKGl0ZXJhdG9yLT52YWx1ZSwgcGFyc2VkLT52YWx1ZSk7CiAgICAgICAgIH0KICAgICB9
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVu
ZGVyVHJlZVN1cHBvcnRFZmwuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQv
RHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsLmNwcAppbmRleCA5NmE1NzkxZWUyYTlmMDY1NDExZDI5
ODRhYjBhNGY4MmExZmE4ZGJhLi42NmU5N2ZmOTZjNjMzMjVjNzEzMmNjZmQ3NjQ2MGYxOGIzYmYw
OTA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVu
ZGVyVHJlZVN1cHBvcnRFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBw
b3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbC5jcHAKQEAgLTU0OCw3ICs1NDgsNyBAQCB2b2lk
IER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQo
Y29uc3QgRXZhc19PYmplY3QqCiAgICAgZWxzZSB7CiAgICAgICAgIFdURjo6SGFzaE1hcDxpbnQs
IFJlZlB0cjxXZWJDb3JlOjpET01XcmFwcGVyV29ybGQgPiA+Ojpjb25zdF9pdGVyYXRvciBpdCA9
IHdvcmxkTWFwLmZpbmQod29ybGRJRCk7CiAgICAgICAgIGlmIChpdCAhPSB3b3JsZE1hcC5lbmQo
KSkKLSAgICAgICAgICAgIHNjcmlwdFdvcmxkID0gKCppdCkuc2Vjb25kOworICAgICAgICAgICAg
c2NyaXB0V29ybGQgPSAoKml0KS52YWx1ZTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBz
Y3JpcHRXb3JsZCA9IFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmNyZWF0ZVdvcmxkKCk7CiAg
ICAgICAgICAgICB3b3JsZE1hcC5zZXQod29ybGRJRCwgc2NyaXB0V29ybGQpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzRWZs
LmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2ll
c0VmbC5jcHAKaW5kZXggNWI0MDMwOGEyMTkwNzVjMDRmZTE2ZjA1M2FhOWMyN2QzM2FkNGQ2Zi4u
MDk4ZDMwM2E0YWM1OTVjNDY3NmI5NTU4ZjI0MjU2Mjk1YzVhN2U4NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzRWZsLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNF
ZmwuY3BwCkBAIC05OSw4ICs5OSw4IEBAIHZvaWQgUGxhdGZvcm1TdHJhdGVnaWVzRWZsOjpnZXRQ
bHVnaW5JbmZvKGNvbnN0IFBhZ2UqIHBhZ2UsIFZlY3RvcjxQbHVnaW5JbmZvPiYKICAgICAgICAg
Zm9yIChNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWltZVRvRGVz
Y3JpcHRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgTWltZUNs
YXNzSW5mbyBtaW1lOwogCi0gICAgICAgICAgICBtaW1lLnR5cGUgPSBpdC0+Zmlyc3Q7Ci0gICAg
ICAgICAgICBtaW1lLmRlc2MgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgbWltZS50eXBlID0g
aXQtPmtleTsKKyAgICAgICAgICAgIG1pbWUuZGVzYyA9IGl0LT52YWx1ZTsKICAgICAgICAgICAg
IG1pbWUuZXh0ZW5zaW9ucyA9IHBhY2thZ2UtPm1pbWVUb0V4dGVuc2lvbnMoKS5nZXQobWltZS50
eXBlKTsKICAgICAgICAgICAgIHBsdWdpbkluZm8ubWltZXMuYXBwZW5kKG1pbWUpOwogICAgICAg
ICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2ludGVudC5jcHAgYi9T
b3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2ludGVudC5jcHAKaW5kZXggNzZjMmQ2OGRhYTcyMTI0
ZWE1YjYxYjdlMjRmMDM0YzJjMGNkYjgxZS4uODNiY2U4NzY0YWY2YWQ3OTc0NDM2OTJmNTM5NmUz
YmFhYjM1NTg4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19pbnRlbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfaW50ZW50LmNwcApAQCAtMTIwLDcg
KzEyMCw3IEBAIGNvbnN0IGNoYXIqIGV3a19pbnRlbnRfZXh0cmFfZ2V0KGNvbnN0IEV3a19JbnRl
bnQqIGludGVudCwgY29uc3QgY2hhcioga2V5KQogICAgIFdURjo6SGFzaE1hcDxTdHJpbmcsIFN0
cmluZz46OmNvbnN0X2l0ZXJhdG9yIHZhbCA9IGNvcmUtPmV4dHJhcygpLmZpbmQoU3RyaW5nOjpm
cm9tVVRGOChrZXkpKTsKICAgICBpZiAodmFsID09IGNvcmUtPmV4dHJhcygpLmVuZCgpKQogICAg
ICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gZWluYV9zdHJpbmdzaGFyZV9hZGQodmFsLT5zZWNv
bmQudXRmOCgpLmRhdGEoKSk7CisgICAgcmV0dXJuIGVpbmFfc3RyaW5nc2hhcmVfYWRkKHZhbC0+
dmFsdWUudXRmOCgpLmRhdGEoKSk7CiAjZWxzZQogICAgIHJldHVybiAwOwogI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdp
ZXNHdGsuY3BwIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJh
dGVnaWVzR3RrLmNwcAppbmRleCAyOTIxNzNhZTI5MmY1MTIxMTg3ZThiZTUwNTAzOTNkN2MzMzg0
YzVhLi45MTAzYzg0NjA5NGQ1MWY4ZjViOTQ4NzRjZDY3YWYwNDc5OTA5YWUwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNHdGsu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRl
Z2llc0d0ay5jcHAKQEAgLTg4LDggKzg4LDggQEAgdm9pZCBQbGF0Zm9ybVN0cmF0ZWdpZXNHdGs6
OmdldFBsdWdpbkluZm8oY29uc3QgUGFnZSogcGFnZSwgVmVjdG9yPFBsdWdpbkluZm8+JgogICAg
ICAgICBNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1pbWVUb0Rl
c2NyaXB0aW9ucy5lbmQoKTsKICAgICAgICAgZm9yIChNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbWltZVRvRGVzY3JpcHRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgewogICAgICAgICAgICAgTWltZUNsYXNzSW5mbyBtaW1lOwotICAgICAgICAgICAgbWlt
ZS50eXBlID0gaXQtPmZpcnN0OwotICAgICAgICAgICAgbWltZS5kZXNjID0gaXQtPnNlY29uZDsK
KyAgICAgICAgICAgIG1pbWUudHlwZSA9IGl0LT5rZXk7CisgICAgICAgICAgICBtaW1lLmRlc2Mg
PSBpdC0+dmFsdWU7CiAgICAgICAgICAgICBtaW1lLmV4dGVuc2lvbnMgPSBwYWNrYWdlLT5taW1l
VG9FeHRlbnNpb25zKCkuZ2V0KG1pbWUudHlwZSk7CiAgICAgICAgICAgICBwbHVnaW5JbmZvLm1p
bWVzLmFwcGVuZChtaW1lKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdGZhdmljb25kYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0ZmF2aWNvbmRhdGFiYXNlLmNwcAppbmRleCA2YmFiZmU0ZGQ5MmU1MTQyY2Uw
YzRmNzJjMzlhNmNiNmMzZGRlMWZmLi5iM2ExZDc1Y2ExMmI2YWUwZjY0NWJmOTJiMTI4YTU4MDBh
MjBlY2NmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZmF2aWNv
bmRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZmF2aWNv
bmRhdGFiYXNlLmNwcApAQCAtNjE0LDE4ICs2MTQsMTggQEAgc3RhdGljIHZvaWQgd2Via2l0RmF2
aWNvbkRhdGFiYXNlSW1wb3J0RmluaXNoZWQoV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFz
ZSkKICAgICBWZWN0b3I8U3RyaW5nPiB0b0RlbGV0ZVVSTHM7CiAgICAgUGVuZGluZ0ljb25SZXF1
ZXN0TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBkYXRhYmFzZS0+cHJpdi0+cGVuZGluZ0ljb25S
ZXF1ZXN0cy5lbmQoKTsKICAgICBmb3IgKFBlbmRpbmdJY29uUmVxdWVzdE1hcDo6Y29uc3RfaXRl
cmF0b3IgaXRlciA9IGRhdGFiYXNlLT5wcml2LT5wZW5kaW5nSWNvblJlcXVlc3RzLmJlZ2luKCk7
IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKLSAgICAgICAgU3RyaW5nIGljb25VUkwgPSBpY29uRGF0
YWJhc2UoKS5zeW5jaHJvbm91c0ljb25VUkxGb3JQYWdlVVJMKGl0ZXItPmZpcnN0KTsKKyAgICAg
ICAgU3RyaW5nIGljb25VUkwgPSBpY29uRGF0YWJhc2UoKS5zeW5jaHJvbm91c0ljb25VUkxGb3JQ
YWdlVVJMKGl0ZXItPmtleSk7CiAgICAgICAgIGlmICghaWNvblVSTC5pc0VtcHR5KCkpCiAgICAg
ICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBQZW5kaW5nSWNvblJlcXVlc3RWZWN0b3IqIGlj
b25zID0gaXRlci0+c2Vjb25kOworICAgICAgICBQZW5kaW5nSWNvblJlcXVlc3RWZWN0b3IqIGlj
b25zID0gaXRlci0+dmFsdWU7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaWNvbnMt
PnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBQZW5kaW5nSWNvblJlcXVlc3QqIHJlcXVlc3Qg
PSBpY29ucy0+YXQoaSkuZ2V0KCk7CiAgICAgICAgICAgICBpZiAocmVxdWVzdC0+YXN5bmNSZXN1
bHQoKSkKICAgICAgICAgICAgICAgICByZXF1ZXN0LT5hc3luY1Jlc3VsdENvbXBsZXRlKDApOwog
ICAgICAgICB9CiAKLSAgICAgICAgdG9EZWxldGVVUkxzLmFwcGVuZChpdGVyLT5maXJzdCk7Cisg
ICAgICAgIHRvRGVsZXRlVVJMcy5hcHBlbmQoaXRlci0+a2V5KTsKICAgICB9CiAKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHRvRGVsZXRlVVJMcy5zaXplKCk7ICsraSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJwbHVnaW4uY3BwIGIvU291cmNlL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnBsdWdpbi5jcHAKaW5kZXggZTAzYjFlYTZkYTMzYjdl
MmYwMDIyNTVjZTg3Nzc4NjI0Y2RhNzA4Yy4uMDFkMGJiNWYyYmZkNzAwZjZiM2M5ZmM0ZjhlNDIw
YzU3MjQ4NmVjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdl
YnBsdWdpbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnBsdWdp
bi5jcHAKQEAgLTIzNywxMCArMjM3LDEwIEBAIEdTTGlzdCogd2Via2l0X3dlYl9wbHVnaW5fZ2V0
X21pbWV0eXBlcyhXZWJLaXRXZWJQbHVnaW4qIHBsdWdpbikKIAogICAgIGZvciAoTUlNRVRvRGVz
Y3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgV2ViS2l0V2ViUGx1Z2luTUlNRVR5cGUq
IG1pbWVUeXBlID0gZ19zbGljZV9uZXcwKFdlYktpdFdlYlBsdWdpbk1JTUVUeXBlKTsKLSAgICAg
ICAgbWltZVR5cGUtPm5hbWUgPSBnX3N0cmR1cChpdC0+Zmlyc3QudXRmOCgpLmRhdGEoKSk7Ci0g
ICAgICAgIG1pbWVUeXBlLT5kZXNjcmlwdGlvbiA9IGdfc3RyZHVwKGl0LT5zZWNvbmQudXRmOCgp
LmRhdGEoKSk7CisgICAgICAgIG1pbWVUeXBlLT5uYW1lID0gZ19zdHJkdXAoaXQtPmtleS51dGY4
KCkuZGF0YSgpKTsKKyAgICAgICAgbWltZVR5cGUtPmRlc2NyaXB0aW9uID0gZ19zdHJkdXAoaXQt
PnZhbHVlLnV0ZjgoKS5kYXRhKCkpOwogCi0gICAgICAgIFZlY3RvcjxTdHJpbmc+IGV4dGVuc2lv
bnMgPSBwcml2LT5jb3JlUGx1Z2luLT5taW1lVG9FeHRlbnNpb25zKCkuZ2V0KGl0LT5maXJzdCk7
CisgICAgICAgIFZlY3RvcjxTdHJpbmc+IGV4dGVuc2lvbnMgPSBwcml2LT5jb3JlUGx1Z2luLT5t
aW1lVG9FeHRlbnNpb25zKCkuZ2V0KGl0LT5rZXkpOwogICAgICAgICBtaW1lVHlwZS0+ZXh0ZW5z
aW9ucyA9IHN0YXRpY19jYXN0PGdjaGFyKio+KGdfbWFsbG9jMChzaXplb2YoY2hhciopICogKGV4
dGVuc2lvbnMuc2l6ZSgpICsgMSkpKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGV4dGVuc2lvbnMuc2l6ZSgpOyBpKyspCiAgICAgICAgICAgICBtaW1lVHlwZS0+ZXh0ZW5zaW9u
c1tpXSA9IGdfc3RyZHVwKGV4dGVuc2lvbnNbaV0udXRmOCgpLmRhdGEoKSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L21hYy9IaXN0b3J5L1dlYkhpc3RvcnkubW0gYi9Tb3VyY2UvV2ViS2l0
L21hYy9IaXN0b3J5L1dlYkhpc3RvcnkubW0KaW5kZXggNjk2NGZjOTQ5YjUxMjE3M2E2YmRjNWU3
MGI1NjE4ZDMxY2I2NzdhMy4uZTc4MWQzMmZkMWRlOTUwZDkxNGFmNDgzNDk3NjQyMGRmNTg3ZGFm
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvSGlzdG9yeS9XZWJIaXN0b3J5Lm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQvbWFjL0hpc3RvcnkvV2ViSGlzdG9yeS5tbQpAQCAtMjM4LDcgKzIz
OCw3IEBAIHN0YXRpYyBpbmxpbmUgV2ViSGlzdG9yeURhdGVLZXkgZGF0ZUtleShOU1RpbWVJbnRl
cnZhbCBkYXRlKQogICAgICAgICByZXR1cm4gTk87CiAKICAgICBEYXRlVG9FbnRyaWVzTWFwOjpp
dGVyYXRvciBpdCA9IF9lbnRyaWVzQnlEYXRlLT5maW5kKGRhdGVLZXkpOwotICAgIE5TTXV0YWJs
ZUFycmF5ICplbnRyaWVzRm9yRGF0ZSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgTlNNdXRhYmxl
QXJyYXkgKmVudHJpZXNGb3JEYXRlID0gaXQtPnZhbHVlLmdldCgpOwogICAgIFtlbnRyaWVzRm9y
RGF0ZSByZW1vdmVPYmplY3RJZGVudGljYWxUbzplbnRyeV07CiAgICAgCiAgICAgLy8gcmVtb3Zl
IHRoaXMgZGF0ZSBlbnRpcmVseSBpZiB0aGVyZSBhcmUgbm8gb3RoZXIgZW50cmllcyBvbiBpdApA
QCAtNDQwLDcgKzQ0MCw3IEBAIHN0YXRpYyBpbmxpbmUgV2ViSGlzdG9yeURhdGVLZXkgZGF0ZUtl
eShOU1RpbWVJbnRlcnZhbCBkYXRlKQogICAgICAgICBkYXlzQXNUaW1lSW50ZXJ2YWxzLnJlc2Vy
dmVDYXBhY2l0eShfZW50cmllc0J5RGF0ZS0+c2l6ZSgpKTsKICAgICAgICAgRGF0ZVRvRW50cmll
c01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gX2VudHJpZXNCeURhdGUtPmVuZCgpOwogICAgICAg
ICBmb3IgKERhdGVUb0VudHJpZXNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gX2VudHJpZXNCeURh
dGUtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIGRheXNBc1RpbWVJbnRl
cnZhbHMuYXBwZW5kKGl0LT5maXJzdCk7CisgICAgICAgICAgICBkYXlzQXNUaW1lSW50ZXJ2YWxz
LmFwcGVuZChpdC0+a2V5KTsKIAogICAgICAgICBzb3J0KGRheXNBc1RpbWVJbnRlcnZhbHMuYmVn
aW4oKSwgZGF5c0FzVGltZUludGVydmFscy5lbmQoKSk7CiAgICAgICAgIHNpemVfdCBjb3VudCA9
IGRheXNBc1RpbWVJbnRlcnZhbHMuc2l6ZSgpOwpAQCAtODk3LDcgKzg5Nyw3IEBAIFdlYkhpc3Rv
cnlXcml0ZXI6OldlYkhpc3RvcnlXcml0ZXIoRGF0ZVRvRW50cmllc01hcCogZW50cmllc0J5RGF0
ZSkKICAgICBtX2RhdGVLZXlzLnJlc2VydmVDYXBhY2l0eShtX2VudHJpZXNCeURhdGUtPnNpemUo
KSk7CiAgICAgRGF0ZVRvRW50cmllc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9lbnRyaWVz
QnlEYXRlLT5lbmQoKTsKICAgICBmb3IgKERhdGVUb0VudHJpZXNNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbV9lbnRyaWVzQnlEYXRlLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAg
IG1fZGF0ZUtleXMuYXBwZW5kKGl0LT5maXJzdCk7CisgICAgICAgIG1fZGF0ZUtleXMuYXBwZW5k
KGl0LT5rZXkpOwogICAgIHNvcnQobV9kYXRlS2V5cy5iZWdpbigpLCBtX2RhdGVLZXlzLmVuZCgp
KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJDb3JlU3RhdGlz
dGljcy5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW0KaW5k
ZXggMjk2ZGQ2YjI1YmQ4YmRiNzdhM2M2ODBlMTMyNGU1YjM5N2QyNjZjMy4uOGRlNjMxMzliNzc0
Mzc2YmJkMWY3YzExMDZmNmVlZGJkZDNlNWIyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9t
YWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9NaXNj
L1dlYkNvcmVTdGF0aXN0aWNzLm1tCkBAIC04OSw4ICs4OSw4IEBAIHVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwogICAgIE93blB0cjxUeXBlQ291bnRTZXQ+IGNvdW50cyhKU0RPTVdpbmRvdzo6Y29t
bW9uSlNHbG9iYWxEYXRhKCktPmhlYXAucHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50cygpKTsKICAg
ICBIYXNoQ291bnRlZFNldDxjb25zdCBjaGFyKj46Oml0ZXJhdG9yIGVuZCA9IGNvdW50cy0+ZW5k
KCk7CiAgICAgZm9yIChIYXNoQ291bnRlZFNldDxjb25zdCBjaGFyKj46Oml0ZXJhdG9yIGl0ID0g
Y291bnRzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBpdC0+c2Vjb25kOyArK2kpCi0gICAgICAgICAgICBbcmVzdWx0IGFkZE9iamVj
dDpbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6aXQtPmZpcnN0XV07CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdC0+dmFsdWU7ICsraSkKKyAgICAgICAgICAgIFtyZXN1
bHQgYWRkT2JqZWN0OltOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzppdC0+a2V5XV07CiAg
ICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTEwNCw4ICsxMDQsOCBAQCB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKICAgICBPd25QdHI8VHlwZUNvdW50U2V0PiBjb3VudHMoSlNET01XaW5k
b3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLm9iamVjdFR5cGVDb3VudHMoKSk7CiAgICAg
SGFzaENvdW50ZWRTZXQ8Y29uc3QgY2hhcio+OjppdGVyYXRvciBlbmQgPSBjb3VudHMtPmVuZCgp
OwogICAgIGZvciAoSGFzaENvdW50ZWRTZXQ8Y29uc3QgY2hhcio+OjppdGVyYXRvciBpdCA9IGNv
dW50cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgaXQtPnNlY29uZDsgKytpKQotICAgICAgICAgICAgW3Jlc3VsdCBhZGRPYmplY3Q6
W05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOml0LT5maXJzdF1dOworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgaXQtPnZhbHVlOyArK2kpCisgICAgICAgICAgICBbcmVzdWx0
IGFkZE9iamVjdDpbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6aXQtPmtleV1dOwogICAg
IAogICAgIHJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9Q
bHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyLm1tIGIvU291cmNlL1dlYktp
dC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlci5tbQppbmRleCBl
NDlkNTBmNGJjYmQ1YzFjYmNiODM3YzhmMjk0NjNkNGRjMmY0OWY2Li4zY2UwODliZWQyN2E0YzIz
YWYyM2M3NTA5MjRhOWQ4OWFjMGM3MTFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9Q
bHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyLm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXIubW0KQEAg
LTczLDcgKzczLDcgQEAgTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkqIE5ldHNjYXBlUGx1Z2luSG9z
dE1hbmFnZXI6Omhvc3RGb3JQbHVnaW4oY29uc3QgV1RGOjpTdHIKICAgICAKICAgICAvLyBUaGUg
cGFja2FnZSB3YXMgYWxyZWFkeSBpbiB0aGUgbWFwLCBqdXN0IHJldHVybiBpdC4KICAgICBpZiAo
IXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT5zZWNv
bmQ7CisgICAgICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogICAgICAgICAKICAg
ICBtYWNoX3BvcnRfdCBjbGllbnRQb3J0OwogICAgIGlmIChtYWNoX3BvcnRfYWxsb2NhdGUobWFj
aF90YXNrX3NlbGYoKSwgTUFDSF9QT1JUX1JJR0hUX1JFQ0VJVkUsICZjbGllbnRQb3J0KSAhPSBL
RVJOX1NVQ0NFU1MpIHsKQEAgLTk1LDcgKzk1LDcgQEAgTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkq
IE5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXI6Omhvc3RGb3JQbHVnaW4oY29uc3QgV1RGOjpTdHIK
ICAgICAKICAgICBOZXRzY2FwZVBsdWdpbkhvc3RQcm94eSogaG9zdFByb3h5ID0gbmV3IE5ldHNj
YXBlUGx1Z2luSG9zdFByb3h5KGNsaWVudFBvcnQsIHBsdWdpbkhvc3RQb3J0LCBwbHVnaW5Ib3N0
UFNOLCBzaG91bGRDYWNoZU1pc3NpbmdQcm9wZXJ0aWVzQW5kTWV0aG9kcyk7CiAgICAgCi0gICAg
cmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBob3N0UHJveHk7CisgICAgcmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZSA9IGhvc3RQcm94eTsKICAgICAKICAgICByZXR1cm4gaG9zdFByb3h5OwogfQpAQCAt
MjA0LDcgKzIwNCw3IEBAIHZvaWQgTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlcjo6cGx1Z2luSG9z
dERpZWQoTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkqIHBsdWdpbkhvCiAKICAgICAvLyBUaGlzIGhh
cyBPKG4pIGNvbXBsZXhpdHkgYnV0IHRoZSBudW1iZXIgb2YgYWN0aXZlIHBsdWctaW4gaG9zdHMg
aXMgdmVyeSBzbWFsbCBzbyBpdCBzaG91bGRuJ3QgbWF0dGVyLgogICAgIGZvciAoUGx1Z2luSG9z
dE1hcDo6aXRlcmF0b3IgaXQgPSBtX3BsdWdpbkhvc3RzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgewotICAgICAgICBpZiAoaXQtPnNlY29uZCA9PSBwbHVnaW5Ib3N0KSB7CisgICAgICAgIGlm
IChpdC0+dmFsdWUgPT0gcGx1Z2luSG9zdCkgewogICAgICAgICAgICAgbV9wbHVnaW5Ib3N0cy5y
ZW1vdmUoaXQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0yODYsNyArMjg2
LDcgQEAgdm9pZCBOZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyOjpkaWRDcmVhdGVXaW5kb3coKQog
ICAgIC8vIFNlZSBpZiBhbnkgb2Ygb3VyIGhvc3RzIGFyZSBpbiBmdWxsLXNjcmVlbiBtb2RlLgog
ICAgIFBsdWdpbkhvc3RNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fcGx1Z2luSG9zdHMuZW5kKCk7CiAg
ICAgZm9yIChQbHVnaW5Ib3N0TWFwOjppdGVyYXRvciBpdCA9IG1fcGx1Z2luSG9zdHMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5KiBo
b3N0UHJveHkgPSBpdC0+c2Vjb25kOworICAgICAgICBOZXRzY2FwZVBsdWdpbkhvc3RQcm94eSog
aG9zdFByb3h5ID0gaXQtPnZhbHVlOwogICAgICAgICAKICAgICAgICAgaWYgKCFob3N0UHJveHkt
PmlzTWVudUJhclZpc2libGUoKSkgewogICAgICAgICAgICAgLy8gTWFrZSBvdXJzZWx2ZXMgdGhl
IGZyb250IHByb2Nlc3MuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hv
c3RlZC9OZXRzY2FwZVBsdWdpbkhvc3RQcm94eS5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdp
bnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdFByb3h5Lm1tCmluZGV4IGFmNmYyYmU5OTY5Y2Ix
MWNiMzNhNTYzMTdmZGRhOGMyY2Y2MWNmNWUuLjBmYjI2ZDBhOWI4NDc1MjI2YmVmY2MzNDk2OGI5
ZjUwNmViOTE1YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVk
L05ldHNjYXBlUGx1Z2luSG9zdFByb3h5Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdp
bnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdFByb3h5Lm1tCkBAIC0xNDQsNyArMTQ0LDcgQEAg
dm9pZCBOZXRzY2FwZVBsdWdpbkhvc3RQcm94eTo6cGx1Z2luSG9zdERpZWQoKQogICAKICAgICBQ
bHVnaW5JbnN0YW5jZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaW5zdGFuY2VzLmVuZCgpOwog
ICAgIGZvciAoUGx1Z2luSW5zdGFuY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaW5zdGFuY2Vz
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+cGx1Z2luSG9z
dERpZWQoKTsKKyAgICAgICAgaXQtPnZhbHVlLT5wbHVnaW5Ib3N0RGllZCgpOwogICAgIAogICAg
IE5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXI6OnNoYXJlZCgpLnBsdWdpbkhvc3REaWVkKHRoaXMp
OwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0
c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tIGIvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9I
b3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tCmluZGV4IDkxMDQ0MzA1ZmJhNmIy
M2FiMjU1NTA2YzExN2ExMjRhYzQ5MzFjYjUuLjAxZTQ4ODIwNDk4ZTIzMWY1ZTE1MDllM2M2MmIx
ZGY5MmZjNzA3ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVk
L05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9Q
bHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW0KQEAgLTE0NSw3ICsx
NDUsNyBAQCB1aW50MzJfdCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OkxvY2FsT2JqZWN0
TWFwOjppZEZvck9iamVjdChKU0dsb2JhbERhdGEmCiAgICAgCiAgICAgSGFzaE1hcDxKU0M6OkpT
T2JqZWN0KiwgcGFpcjx1aW50MzJfdCwgdWludDMyX3Q+ID46Oml0ZXJhdG9yIGl0ZXIgPSBtX2pz
T2JqZWN0VG9JRE1hcC5maW5kKG9iamVjdCk7CiAgICAgaWYgKGl0ZXIgIT0gbV9qc09iamVjdFRv
SURNYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdGVyLT5zZWNvbmQuZmlyc3Q7CisgICAgICAg
IHJldHVybiBpdGVyLT52YWx1ZS5maXJzdDsKICAgICAKICAgICBkbyB7CiAgICAgICAgIG9iamVj
dElEID0gKyttX29iamVjdElEQ291bnRlcjsKQEAgLTE2Miw3ICsxNjIsNyBAQCB2b2lkIE5ldHNj
YXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6TG9jYWxPYmplY3RNYXA6OnJldGFpbihKU0M6OkpTT2Jq
ZWN0KiBvYmplY3QpCiAgICAgSGFzaE1hcDxKU0M6OkpTT2JqZWN0KiwgcGFpcjx1aW50MzJfdCwg
dWludDMyX3Q+ID46Oml0ZXJhdG9yIGl0ZXIgPSBtX2pzT2JqZWN0VG9JRE1hcC5maW5kKG9iamVj
dCk7CiAgICAgQVNTRVJUKGl0ZXIgIT0gbV9qc09iamVjdFRvSURNYXAuZW5kKCkpOwogCi0gICAg
aXRlci0+c2Vjb25kLnNlY29uZCA9IGl0ZXItPnNlY29uZC5zZWNvbmQgKyAxOworICAgIGl0ZXIt
PnZhbHVlLnNlY29uZCA9IGl0ZXItPnZhbHVlLnNlY29uZCArIDE7CiB9CiAKIHZvaWQgTmV0c2Nh
cGVQbHVnaW5JbnN0YW5jZVByb3h5OjpMb2NhbE9iamVjdE1hcDo6cmVsZWFzZShKU0M6OkpTT2Jq
ZWN0KiBvYmplY3QpCkBAIC0xNzAsMTAgKzE3MCwxMCBAQCB2b2lkIE5ldHNjYXBlUGx1Z2luSW5z
dGFuY2VQcm94eTo6TG9jYWxPYmplY3RNYXA6OnJlbGVhc2UoSlNDOjpKU09iamVjdCogb2JqZWN0
KQogICAgIEhhc2hNYXA8SlNDOjpKU09iamVjdCosIHBhaXI8dWludDMyX3QsIHVpbnQzMl90PiA+
OjppdGVyYXRvciBpdGVyID0gbV9qc09iamVjdFRvSURNYXAuZmluZChvYmplY3QpOwogICAgIEFT
U0VSVChpdGVyICE9IG1fanNPYmplY3RUb0lETWFwLmVuZCgpKTsKIAotICAgIEFTU0VSVChpdGVy
LT5zZWNvbmQuc2Vjb25kID4gMCk7Ci0gICAgaXRlci0+c2Vjb25kLnNlY29uZCA9IGl0ZXItPnNl
Y29uZC5zZWNvbmQgLSAxOwotICAgIGlmICghaXRlci0+c2Vjb25kLnNlY29uZCkgewotICAgICAg
ICBtX2lkVG9KU09iamVjdE1hcC5yZW1vdmUoaXRlci0+c2Vjb25kLmZpcnN0KTsKKyAgICBBU1NF
UlQoaXRlci0+dmFsdWUuc2Vjb25kID4gMCk7CisgICAgaXRlci0+dmFsdWUuc2Vjb25kID0gaXRl
ci0+dmFsdWUuc2Vjb25kIC0gMTsKKyAgICBpZiAoIWl0ZXItPnZhbHVlLnNlY29uZCkgeworICAg
ICAgICBtX2lkVG9KU09iamVjdE1hcC5yZW1vdmUoaXRlci0+dmFsdWUuZmlyc3QpOwogICAgICAg
ICBtX2pzT2JqZWN0VG9JRE1hcC5yZW1vdmUoaXRlcik7CiAgICAgfQogfQpAQCAtMTk3LDEwICsx
OTcsMTAgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OkxvY2FsT2JqZWN0TWFw
Ojpmb3JnZXQodWludDMyX3Qgb2JqZWN0SUQpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
IAotICAgIEhhc2hNYXA8SlNDOjpKU09iamVjdCosIHBhaXI8dWludDMyX3QsIHVpbnQzMl90PiA+
OjppdGVyYXRvciBySXRlciA9IG1fanNPYmplY3RUb0lETWFwLmZpbmQoaXRlci0+c2Vjb25kLmdl
dCgpKTsKKyAgICBIYXNoTWFwPEpTQzo6SlNPYmplY3QqLCBwYWlyPHVpbnQzMl90LCB1aW50MzJf
dD4gPjo6aXRlcmF0b3Igckl0ZXIgPSBtX2pzT2JqZWN0VG9JRE1hcC5maW5kKGl0ZXItPnZhbHVl
LmdldCgpKTsKIAogICAgIC8vIElmIHRoZSBvYmplY3QgaXMgYmVpbmcgc2VudCB0byBwbHVnLWlu
IHJpZ2h0IG5vdywgdGhlbiBpdCdzIG5vdCB0aGUgdGltZSB0byBmb3JnZXQuCi0gICAgaWYgKHJJ
dGVyLT5zZWNvbmQuc2Vjb25kICE9IDEpCisgICAgaWYgKHJJdGVyLT52YWx1ZS5zZWNvbmQgIT0g
MSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgbV9qc09iamVjdFRvSURNYXAucmVtb3Zl
KHJJdGVyKTsKQEAgLTMzMCw3ICszMzAsNyBAQCB2b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQ
cm94eTo6ZGVzdHJveSgpCiAgICAgCiAgICAgRnJhbWVMb2FkTWFwOjppdGVyYXRvciBlbmQgPSBt
X3BlbmRpbmdGcmFtZUxvYWRzLmVuZCgpOwogICAgIGZvciAoRnJhbWVMb2FkTWFwOjppdGVyYXRv
ciBpdCA9IG1fcGVuZGluZ0ZyYW1lTG9hZHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAg
ICAgICBbKGl0LT5maXJzdCkgX3NldEludGVybmFsTG9hZERlbGVnYXRlOm5pbF07CisgICAgICAg
IFsoaXQtPmtleSkgX3NldEludGVybmFsTG9hZERlbGVnYXRlOm5pbF07CiAKICAgICBfV0tQSERl
c3Ryb3lQbHVnaW5JbnN0YW5jZShtX3BsdWdpbkhvc3RQcm94eS0+cG9ydCgpLCBtX3BsdWdpbklE
LCByZXF1ZXN0SUQpOwogIApAQCAtNjc4LDcgKzY3OCw3IEBAIHZvaWQgTmV0c2NhcGVQbHVnaW5J
bnN0YW5jZVByb3h5Ojp3ZWJGcmFtZURpZEZpbmlzaExvYWRXaXRoUmVhc29uKFdlYkZyYW1lKiB3
ZWJGCiAgICAgRnJhbWVMb2FkTWFwOjppdGVyYXRvciBpdCA9IG1fcGVuZGluZ0ZyYW1lTG9hZHMu
ZmluZCh3ZWJGcmFtZSk7CiAgICAgQVNTRVJUKGl0ICE9IG1fcGVuZGluZ0ZyYW1lTG9hZHMuZW5k
KCkpOwogICAgICAgICAKLSAgICBQbHVnaW5SZXF1ZXN0KiBwbHVnaW5SZXF1ZXN0ID0gaXQtPnNl
Y29uZC5nZXQoKTsKKyAgICBQbHVnaW5SZXF1ZXN0KiBwbHVnaW5SZXF1ZXN0ID0gaXQtPnZhbHVl
LmdldCgpOwogICAgIF9XS1BITG9hZFVSTE5vdGlmeShtX3BsdWdpbkhvc3RQcm94eS0+cG9ydCgp
LCBtX3BsdWdpbklELCBwbHVnaW5SZXF1ZXN0LT5yZXF1ZXN0SUQoKSwgcmVhc29uKTsKICAKICAg
ICBtX3BlbmRpbmdGcmFtZUxvYWRzLnJlbW92ZShpdCk7CkBAIC0xNjI4LDcgKzE2MjgsNyBAQCB2
b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6Y2FuY2VsQ2hlY2tJZkFsbG93ZWRUb0xv
YWRVUkwodWludDMyX3QgY2hlY2tJRAogICAgIGlmIChpdCA9PSBtX3VybENoZWNrcy5lbmQoKSkK
ICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIFdlYlBsdWdpbkNvbnRhaW5lckNoZWNrICpjaGVj
ayA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgV2ViUGx1Z2luQ29udGFpbmVyQ2hlY2sgKmNoZWNr
ID0gaXQtPnZhbHVlLmdldCgpOwogICAgIFtjaGVjayBjYW5jZWxdOwogICAgIG1fdXJsQ2hlY2tz
LnJlbW92ZShpdCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hv
c3RlZC9Qcm94eUluc3RhbmNlLm1tIGIvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQv
UHJveHlJbnN0YW5jZS5tbQppbmRleCA4OThjNWUyMTQwNjlmYzliYmZkMzQ5YzViNGM2YmE4Zjcz
NTVlMjcwLi41OThlZThmMzdiMDEwMWE1NjNkYTljNDZkNWJkNWE0NWQ1NWI3NzFhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9Qcm94eUluc3RhbmNlLm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL1Byb3h5SW5zdGFuY2UubW0KQEAg
LTM1OSw4ICszNTksOCBAQCBNZXRob2RMaXN0IFByb3h5SW5zdGFuY2U6Om1ldGhvZHNOYW1lZChQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogICAgIE1ldGhvZE1hcDo6aXRlcmF0b3IgZXhpc3Rp
bmdNYXBFbnRyeSA9IG1fbWV0aG9kcy5maW5kKG5hbWUuaW1wbCgpKTsKICAgICBpZiAoZXhpc3Rp
bmdNYXBFbnRyeSAhPSBtX21ldGhvZHMuZW5kKCkpIHsKICAgICAgICAgTWV0aG9kTGlzdCBtZXRo
b2RMaXN0OwotICAgICAgICBpZiAoZXhpc3RpbmdNYXBFbnRyeS0+c2Vjb25kKQotICAgICAgICAg
ICAgbWV0aG9kTGlzdC5hcHBlbmQoZXhpc3RpbmdNYXBFbnRyeS0+c2Vjb25kKTsKKyAgICAgICAg
aWYgKGV4aXN0aW5nTWFwRW50cnktPnZhbHVlKQorICAgICAgICAgICAgbWV0aG9kTGlzdC5hcHBl
bmQoZXhpc3RpbmdNYXBFbnRyeS0+dmFsdWUpOwogICAgICAgICByZXR1cm4gbWV0aG9kTGlzdDsK
ICAgICB9CiAgICAgCkBAIC0zODIsMTEgKzM4MiwxMSBAQCBNZXRob2RMaXN0IFByb3h5SW5zdGFu
Y2U6Om1ldGhvZHNOYW1lZChQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogICAgIC8vIEFkZCBh
IG5ldyBlbnRyeSB0byB0aGUgbWFwIHVubGVzcyBhbiBlbnRyeSB3YXMgYWRkZWQgd2hpbGUgd2Ug
d2VyZSBpbiB3YWl0Rm9yUmVwbHkuCiAgICAgTWV0aG9kTWFwOjpBZGRSZXN1bHQgbWFwQWRkUmVz
dWx0ID0gbV9tZXRob2RzLmFkZChuYW1lLmltcGwoKSwgMCk7CiAgICAgaWYgKG1hcEFkZFJlc3Vs
dC5pc05ld0VudHJ5ICYmIHJlcGx5LT5tX3Jlc3VsdCkKLSAgICAgICAgbWFwQWRkUmVzdWx0Lml0
ZXJhdG9yLT5zZWNvbmQgPSBuZXcgUHJveHlNZXRob2QobWV0aG9kTmFtZSk7CisgICAgICAgIG1h
cEFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBuZXcgUHJveHlNZXRob2QobWV0aG9kTmFtZSk7
CiAKICAgICBNZXRob2RMaXN0IG1ldGhvZExpc3Q7Ci0gICAgaWYgKG1hcEFkZFJlc3VsdC5pdGVy
YXRvci0+c2Vjb25kKQotICAgICAgICBtZXRob2RMaXN0LmFwcGVuZChtYXBBZGRSZXN1bHQuaXRl
cmF0b3ItPnNlY29uZCk7CisgICAgaWYgKG1hcEFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUpCisg
ICAgICAgIG1ldGhvZExpc3QuYXBwZW5kKG1hcEFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwog
ICAgIHJldHVybiBtZXRob2RMaXN0OwogfQogCkBAIC00MDIsNyArNDAyLDcgQEAgRmllbGQqIFBy
b3h5SW5zdGFuY2U6OmZpZWxkTmFtZWQoUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKICAgICAv
LyBJZiB3ZSBhbHJlYWR5IGhhdmUgYW4gZW50cnkgaW4gdGhlIG1hcCwgdXNlIGl0LgogICAgIEZp
ZWxkTWFwOjppdGVyYXRvciBleGlzdGluZ01hcEVudHJ5ID0gbV9maWVsZHMuZmluZChuYW1lLmlt
cGwoKSk7CiAgICAgaWYgKGV4aXN0aW5nTWFwRW50cnkgIT0gbV9maWVsZHMuZW5kKCkpCi0gICAg
ICAgIHJldHVybiBleGlzdGluZ01hcEVudHJ5LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBleGlz
dGluZ01hcEVudHJ5LT52YWx1ZTsKICAgICAKICAgICB1aW50NjRfdCBpZGVudGlmaWVyID0gcmVp
bnRlcnByZXRfY2FzdDx1aW50NjRfdD4oX05QTl9HZXRTdHJpbmdJZGVudGlmaWVyKG5hbWUuYXNj
aWkoKS5kYXRhKCkpKTsKICAgICB1aW50MzJfdCByZXF1ZXN0SUQgPSBtX2luc3RhbmNlUHJveHkt
Pm5leHRSZXF1ZXN0SUQoKTsKQEAgLTQyMiw4ICs0MjIsOCBAQCBGaWVsZCogUHJveHlJbnN0YW5j
ZTo6ZmllbGROYW1lZChQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogICAgIC8vIEFkZCBhIG5l
dyBlbnRyeSB0byB0aGUgbWFwIHVubGVzcyBhbiBlbnRyeSB3YXMgYWRkZWQgd2hpbGUgd2Ugd2Vy
ZSBpbiB3YWl0Rm9yUmVwbHkuCiAgICAgRmllbGRNYXA6OkFkZFJlc3VsdCBtYXBBZGRSZXN1bHQg
PSBtX2ZpZWxkcy5hZGQobmFtZS5pbXBsKCksIDApOwogICAgIGlmIChtYXBBZGRSZXN1bHQuaXNO
ZXdFbnRyeSAmJiByZXBseS0+bV9yZXN1bHQpCi0gICAgICAgIG1hcEFkZFJlc3VsdC5pdGVyYXRv
ci0+c2Vjb25kID0gbmV3IFByb3h5RmllbGQoaWRlbnRpZmllcik7Ci0gICAgcmV0dXJuIG1hcEFk
ZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICBtYXBBZGRSZXN1bHQuaXRlcmF0b3It
PnZhbHVlID0gbmV3IFByb3h5RmllbGQoaWRlbnRpZmllcik7CisgICAgcmV0dXJuIG1hcEFkZFJl
c3VsdC5pdGVyYXRvci0+dmFsdWU7CiB9CiAKIEpTQzo6SlNWYWx1ZSBQcm94eUluc3RhbmNlOjpm
aWVsZFZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgRmllbGQqIGZpZWxkKSBjb25zdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblZpZXcu
bW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5tbQpp
bmRleCA0ZTFhYWQ0OTUyOGNkN2QwODFkNDEzNTI0NTRiOWM4NTdmYmMyNWI3Li42YTFlYjY0MGEw
ZGFjZjBjY2UwMWVlZDM4MTkyMzUwYjVkYzg1MmYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5tbQpAQCAtNzEwLDcgKzcxMCw3IEBA
IHN0YXRpYyBpbmxpbmUgdm9pZCBnZXROUFJlY3QoY29uc3QgTlNSZWN0JiBuciwgTlBSZWN0JiBu
cHIpCiAKICAgICBIYXNoTWFwPHVpbnQzMl90LCBQbHVnaW5UaW1lcio+Ojpjb25zdF9pdGVyYXRv
ciBlbmQgPSB0aW1lcnMtPmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDx1aW50MzJfdCwgUGx1Z2lu
VGltZXIqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSB0aW1lcnMtPmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgewotICAgICAgICBQbHVnaW5UaW1lciogdGltZXIgPSBpdC0+c2Vjb25kOworICAgICAg
ICBQbHVnaW5UaW1lciogdGltZXIgPSBpdC0+dmFsdWU7CiAgICAgICAgIHRpbWVyLT5zdG9wKCk7
CiAgICAgfSAgICAKIH0KQEAgLTcyOCw3ICs3MjgsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZ2V0
TlBSZWN0KGNvbnN0IE5TUmVjdCYgbnIsIE5QUmVjdCYgbnByKQogICAgIAogICAgIEhhc2hNYXA8
dWludDMyX3QsIFBsdWdpblRpbWVyKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHRpbWVycy0+ZW5k
KCk7CiAgICAgZm9yIChIYXNoTWFwPHVpbnQzMl90LCBQbHVnaW5UaW1lcio+Ojpjb25zdF9pdGVy
YXRvciBpdCA9IHRpbWVycy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFBs
dWdpblRpbWVyKiB0aW1lciA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFBsdWdpblRpbWVyKiB0aW1l
ciA9IGl0LT52YWx1ZTsKICAgICAgICAgQVNTRVJUKCF0aW1lci0+aXNBY3RpdmUoKSk7CiAgICAg
ICAgIHRpbWVyLT5zdGFydChfaXNDb21wbGV0ZWx5T2JzY3VyZWQpOwogICAgIH0gICAgCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJOb3RpZmljYXRpb25D
bGllbnQubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJOb3RpZmljYXRp
b25DbGllbnQubW0KaW5kZXggZTJhMDVjNmE4YmFjMjYxZGU1ZmY1YWQwMDNjYzhmYzFhYWVmODJj
Zi4uZjBjNDlhNmNjYzQ1MGU2NDFlYzEyNjUyNzQzYmM2YzkwOGZiZDI2YiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViTm90aWZpY2F0aW9uQ2xpZW50Lm1t
CisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYk5vdGlmaWNhdGlvbkNs
aWVudC5tbQpAQCAtOTAsNyArOTAsNyBAQCBib29sIFdlYk5vdGlmaWNhdGlvbkNsaWVudDo6c2hv
dyhOb3RpZmljYXRpb24qIG5vdGlmaWNhdGlvbikKICAgICBtX25vdGlmaWNhdGlvbk1hcC5zZXQo
bm90aWZpY2F0aW9uLCB3ZWJOb3RpZmljYXRpb24pOwogCiAgICAgTm90aWZpY2F0aW9uQ29udGV4
dE1hcDo6aXRlcmF0b3IgaXQgPSBtX25vdGlmaWNhdGlvbkNvbnRleHRNYXAuYWRkKG5vdGlmaWNh
dGlvbi0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBWZWN0b3I8UmV0YWluUHRyPFdlYk5vdGlm
aWNhdGlvbj4gPigpKS5pdGVyYXRvcjsKLSAgICBpdC0+c2Vjb25kLmFwcGVuZCh3ZWJOb3RpZmlj
YXRpb24pOworICAgIGl0LT52YWx1ZS5hcHBlbmQod2ViTm90aWZpY2F0aW9uKTsKIAogICAgIFtb
bV93ZWJWaWV3IF9ub3RpZmljYXRpb25Qcm92aWRlcl0gc2hvd05vdGlmaWNhdGlvbjp3ZWJOb3Rp
ZmljYXRpb24uZ2V0KCkgZnJvbVdlYlZpZXc6bV93ZWJWaWV3XTsKICAgICByZXR1cm4gdHJ1ZTsK
QEAgLTEyMCw3ICsxMjAsNyBAQCB2b2lkIFdlYk5vdGlmaWNhdGlvbkNsaWVudDo6Y2xlYXJOb3Rp
ZmljYXRpb25zKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCiAgICAgaWYgKGl0ID09
IG1fbm90aWZpY2F0aW9uQ29udGV4dE1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAot
ICAgIFZlY3RvcjxSZXRhaW5QdHI8V2ViTm90aWZpY2F0aW9uPiA+JiB3ZWJOb3RpZmljYXRpb25z
ID0gaXQtPnNlY29uZDsKKyAgICBWZWN0b3I8UmV0YWluUHRyPFdlYk5vdGlmaWNhdGlvbj4gPiYg
d2ViTm90aWZpY2F0aW9ucyA9IGl0LT52YWx1ZTsKICAgICBOU011dGFibGVBcnJheSAqbnNJRHMg
PSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOwogICAgIHNpemVfdCBjb3VudCA9IHdlYk5vdGlmaWNh
dGlvbnMuc2l6ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewpA
QCAtMTQ2LDEwICsxNDYsMTAgQEAgdm9pZCBXZWJOb3RpZmljYXRpb25DbGllbnQ6Om5vdGlmaWNh
dGlvbk9iamVjdERlc3Ryb3llZChOb3RpZmljYXRpb24qIG5vdGlmaWNhdGkKIAogICAgIE5vdGlm
aWNhdGlvbkNvbnRleHRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9ub3RpZmljYXRpb25Db250ZXh0TWFw
LmZpbmQobm90aWZpY2F0aW9uLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwogICAgIEFTU0VS
VChpdCAhPSBtX25vdGlmaWNhdGlvbkNvbnRleHRNYXAuZW5kKCkpOwotICAgIHNpemVfdCBpbmRl
eCA9IGl0LT5zZWNvbmQuZmluZCh3ZWJOb3RpZmljYXRpb24pOworICAgIHNpemVfdCBpbmRleCA9
IGl0LT52YWx1ZS5maW5kKHdlYk5vdGlmaWNhdGlvbik7CiAgICAgQVNTRVJUKGluZGV4ICE9IG5v
dEZvdW5kKTsKLSAgICBpdC0+c2Vjb25kLnJlbW92ZShpbmRleCk7Ci0gICAgaWYgKGl0LT5zZWNv
bmQuaXNFbXB0eSgpKQorICAgIGl0LT52YWx1ZS5yZW1vdmUoaW5kZXgpOworICAgIGlmIChpdC0+
dmFsdWUuaXNFbXB0eSgpKQogICAgICAgICBtX25vdGlmaWNhdGlvbkNvbnRleHRNYXAucmVtb3Zl
KGl0KTsKIAogICAgIFtbbV93ZWJWaWV3IF9ub3RpZmljYXRpb25Qcm92aWRlcl0gbm90aWZpY2F0
aW9uRGVzdHJveWVkOndlYk5vdGlmaWNhdGlvbi5nZXQoKV07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tIGIvU291cmNlL1dlYktpdC9tYWMvV2Vi
Vmlldy9XZWJIVE1MVmlldy5tbQppbmRleCA1MDVkYjUzMDIxMDRlYTg0OGZiODIwMTI3ZmEyOTRi
MzE2YmUwOTIxLi5iOWEwMDA2ZDc5YTM0MzYwZjI5OWMzYzg0MWJiNzk2MmYzNzJkNThiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0KQEAgLTIzNzYsNyArMjM3Niw3
IEBAIHN0YXRpYyBTdHJpbmcgY29tbWFuZE5hbWVGb3JTZWxlY3RvcihTRUwgc2VsZWN0b3IpCiAg
ICAgc3RhdGljIGNvbnN0IFNlbGVjdG9yTmFtZU1hcCogZXhjZXB0aW9uTWFwID0gY3JlYXRlU2Vs
ZWN0b3JFeGNlcHRpb25NYXAoKTsKICAgICBTZWxlY3Rvck5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gZXhjZXB0aW9uTWFwLT5maW5kKHNlbGVjdG9yKTsKICAgICBpZiAoaXQgIT0gZXhjZXB0
aW9uTWFwLT5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgIHJldHVy
biBpdC0+dmFsdWU7CiAKICAgICAvLyBSZW1vdmUgdGhlIHRyYWlsaW5nIGNvbG9uLgogICAgIC8v
IE5vIG5lZWQgdG8gY2FwaXRhbGl6ZSB0aGUgY29tbWFuZCBuYW1lIHNpbmNlIEVkaXRvciBjb21t
YW5kIG5hbWVzIGFyZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2Uu
Y3BwIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCmluZGV4IDA4ZTg2MTgzYTZi
NmVhNDQwODdlZjI0NzFmZDkwMDJkNGI2MDQwZjQuLjNkYjY5NzY5OGMzN2MxMjdmMTY3MTVmZDRl
MmRiMjVmM2UwMTcyMDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdl
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAKQEAgLTIyNTgsNyAr
MjI1OCw3IEBAIHN0YXRpYyB2b2lkIGV4dHJhY3RDb250ZW50VHlwZUZyb21QbHVnaW5WZWN0b3Io
Y29uc3QgVmVjdG9yPFBsdWdpblBhY2thZ2UqPiYgcGx1CiAgICAgICAgIE1JTUVUb0Rlc2NyaXB0
aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWFwX2l0ID0gcGx1Z2luc1tpXS0+bWltZVRvRGVzY3Jp
cHRpb25zKCkuYmVnaW4oKTsKICAgICAgICAgTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9p
dGVyYXRvciBtYXBfZW5kID0gcGx1Z2luc1tpXS0+bWltZVRvRGVzY3JpcHRpb25zKCkuZW5kKCk7
CiAgICAgICAgIGZvciAoOyBtYXBfaXQgIT0gbWFwX2VuZDsgKyttYXBfaXQpCi0gICAgICAgICAg
ICAqbGlzdCA8PCBtYXBfaXQtPmZpcnN0OworICAgICAgICAgICAgKmxpc3QgPDwgbWFwX2l0LT5r
ZXk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGx1
Z2luZGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBsdWdpbmRhdGFiYXNl
LmNwcAppbmRleCBhN2EzYjVmMmMxZTg5ZjQ3NDM3YzA4YTk3ZmNiMjk2Nzg2YmY4ZTU4Li5jNTMy
OGM4ZjY3NWYyYzY2ZjdiOWI0MjBkNjUxMzdmZDlmODZiODk2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L3F0L0FwaS9xd2VicGx1Z2luZGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
cXQvQXBpL3F3ZWJwbHVnaW5kYXRhYmFzZS5jcHAKQEAgLTEyMiw4ICsxMjIsOCBAQCBRTGlzdDxR
V2ViUGx1Z2luSW5mbzo6TWltZVR5cGU+IFFXZWJQbHVnaW5JbmZvOjptaW1lVHlwZXMoKSBjb25z
dAogCiAgICAgICAgIGZvciAoTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAg
ICAgICAgIE1pbWVUeXBlIG1pbWVUeXBlOwotICAgICAgICAgICAgbWltZVR5cGUubmFtZSA9IGl0
LT5maXJzdDsKLSAgICAgICAgICAgIG1pbWVUeXBlLmRlc2NyaXB0aW9uID0gaXQtPnNlY29uZDsK
KyAgICAgICAgICAgIG1pbWVUeXBlLm5hbWUgPSBpdC0+a2V5OworICAgICAgICAgICAgbWltZVR5
cGUuZGVzY3JpcHRpb24gPSBpdC0+dmFsdWU7CiAKICAgICAgICAgICAgIFFTdHJpbmdMaXN0IGZp
bGVFeHRlbnNpb25zOwogICAgICAgICAgICAgVmVjdG9yPFN0cmluZz4gZXh0ZW5zaW9ucyA9IG1f
cGFja2FnZS0+bWltZVRvRXh0ZW5zaW9ucygpLmdldChtaW1lVHlwZS5uYW1lKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzUXQu
Y3BwIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNR
dC5jcHAKaW5kZXggY2Q0YWIwZDcyZDg2ODEyNWRjODZlZTk4N2JjY2U2ZWYzYWIxYWQ4OS4uN2Q0
YjBiNzVmOWQyYzRlNzY3OWRiM2QwN2I1NjE3YTQyMTQwNGM1NiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNRdC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNRdC5jcHAK
QEAgLTEzMyw4ICsxMzMsOCBAQCB2b2lkIFBsYXRmb3JtU3RyYXRlZ2llc1F0OjpnZXRQbHVnaW5J
bmZvKGNvbnN0IFdlYkNvcmU6OlBhZ2UqIHBhZ2UsIFZlY3RvcjxXZWJDbwogICAgICAgICBmb3Ig
KE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtaW1lVG9EZXNjcmlw
dGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBNaW1lQ2xhc3NJ
bmZvIG1pbWU7CiAKLSAgICAgICAgICAgIG1pbWUudHlwZSA9IGl0LT5maXJzdDsKLSAgICAgICAg
ICAgIG1pbWUuZGVzYyA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICBtaW1lLnR5cGUgPSBpdC0+
a2V5OworICAgICAgICAgICAgbWltZS5kZXNjID0gaXQtPnZhbHVlOwogICAgICAgICAgICAgbWlt
ZS5leHRlbnNpb25zID0gcGFja2FnZS0+bWltZVRvRXh0ZW5zaW9ucygpLmdldChtaW1lLnR5cGUp
OwogCiAgICAgICAgICAgICBpbmZvLm1pbWVzLmFwcGVuZChtaW1lKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvd2luL0NPTVByb3BlcnR5QmFnLmggYi9Tb3VyY2UvV2ViS2l0L3dpbi9DT01Q
cm9wZXJ0eUJhZy5oCmluZGV4IGM3Njg2M2YxNTAxMmYyZWFkZTBkY2UxNWZkZGI3MzliZmJjMjc5
YzMuLjhlODRlNDc0MGFhM2E5ODYzNTk0YmVkY2VjZThlMzcxMmFkNGEyZmYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvd2luL0NPTVByb3BlcnR5QmFnLmgKKysrIGIvU291cmNlL1dlYktpdC93
aW4vQ09NUHJvcGVydHlCYWcuaApAQCAtMTQ3LDkgKzE0Nyw5IEBAIEhSRVNVTFQgU1RETUVUSE9E
Q0FMTFRZUEUgQ09NUHJvcGVydHlCYWc8VmFsdWVUeXBlLCBLZXlUeXBlLCBIYXNoVHlwZT46OlJl
YWQoTFBDCiAKICAgICBWQVJUWVBFIHJlcXVlc3RlZFR5cGUgPSBWX1ZUKHBWYXIpOwogICAgIFZf
VlQocFZhcikgPSBWVF9FTVBUWTsKLSAgICBDT01WYXJpYW50U2V0dGVyPFZhbHVlVHlwZT46OnNl
dFZhcmlhbnQocFZhciwgaXQtPnNlY29uZCk7CisgICAgQ09NVmFyaWFudFNldHRlcjxWYWx1ZVR5
cGU+OjpzZXRWYXJpYW50KHBWYXIsIGl0LT52YWx1ZSk7CiAKLSAgICBpZiAocmVxdWVzdGVkVHlw
ZSAhPSBDT01WYXJpYW50U2V0dGVyPFZhbHVlVHlwZT46OnZhcmlhbnRUeXBlKGl0LT5zZWNvbmQp
ICYmIHJlcXVlc3RlZFR5cGUgIT0gVlRfRU1QVFkpCisgICAgaWYgKHJlcXVlc3RlZFR5cGUgIT0g
Q09NVmFyaWFudFNldHRlcjxWYWx1ZVR5cGU+Ojp2YXJpYW50VHlwZShpdC0+dmFsdWUpICYmIHJl
cXVlc3RlZFR5cGUgIT0gVlRfRU1QVFkpCiAgICAgICAgIHJldHVybiA6OlZhcmlhbnRDaGFuZ2VU
eXBlKHBWYXIsIHBWYXIsIFZBUklBTlRfTk9VU0VST1ZFUlJJREUgfCBWQVJJQU5UX0FMUEhBQk9P
TCwgcmVxdWVzdGVkVHlwZSk7CiAKICAgICByZXR1cm4gU19PSzsKQEAgLTIxNywxMiArMjE3LDEy
IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgQ09NUHJvcGVydHlCYWc8VmFsdWVUeXBlLCBL
ZXlUeXBlLCBIYXNoVHlwZT46OkdldFByb3BlCiAgICAgICAgIC8vcFByb3BCYWdbal0uY2xzaWQ7
ICAgIC8vIChDTFNJRCkgQ0xTSUQgb2YgdGhlIG9iamVjdC4gVGhpcyBtZW1iZXIgaXMgdmFsaWQg
b25seSBpZiBkd1R5cGUgaXMgUFJPUEJBRzJfVFlQRV9PQkpFQ1QuCiAKICAgICAgICAgcFByb3BC
YWdbal0uZHdUeXBlID0gUFJPUEJBRzJfVFlQRV9EQVRBOwotICAgICAgICBwUHJvcEJhZ1tqXS52
dCA9IENPTVZhcmlhbnRTZXR0ZXI8VmFsdWVUeXBlPjo6dmFyaWFudFR5cGUoY3VycmVudC0+c2Vj
b25kKTsKKyAgICAgICAgcFByb3BCYWdbal0udnQgPSBDT01WYXJpYW50U2V0dGVyPFZhbHVlVHlw
ZT46OnZhcmlhbnRUeXBlKGN1cnJlbnQtPnZhbHVlKTsKICAgICAgICAgcFByb3BCYWdbal0uZHdI
aW50ID0gaVByb3BlcnR5ICsgajsKLSAgICAgICAgcFByb3BCYWdbal0ucHN0ck5hbWUgPSAoTFBP
TEVTVFIpQ29UYXNrTWVtQWxsb2Moc2l6ZW9mKHdjaGFyX3QpKihjdXJyZW50LT5maXJzdC5sZW5n
dGgoKSsxKSk7CisgICAgICAgIHBQcm9wQmFnW2pdLnBzdHJOYW1lID0gKExQT0xFU1RSKUNvVGFz
a01lbUFsbG9jKHNpemVvZih3Y2hhcl90KSooY3VycmVudC0+a2V5Lmxlbmd0aCgpKzEpKTsKICAg
ICAgICAgaWYgKCFwUHJvcEJhZ1tqXS5wc3RyTmFtZSkKICAgICAgICAgICAgIHJldHVybiBFX09V
VE9GTUVNT1JZOwotICAgICAgICB3Y3NjcHlfcyhwUHJvcEJhZ1tqXS5wc3RyTmFtZSwgY3VycmVu
dC0+Zmlyc3QubGVuZ3RoKCkrMSwgc3RhdGljX2Nhc3Q8U3RyaW5nPihjdXJyZW50LT5maXJzdCku
Y2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSk7CisgICAgICAgIHdjc2NweV9zKHBQcm9w
QmFnW2pdLnBzdHJOYW1lLCBjdXJyZW50LT5rZXkubGVuZ3RoKCkrMSwgc3RhdGljX2Nhc3Q8U3Ry
aW5nPihjdXJyZW50LT5rZXkpLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkpOwogICAg
ICAgICArKypwY1Byb3BlcnRpZXM7CiAgICAgfQogICAgIHJldHVybiBTX09LOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN0YXRpc3RpY3MuY3BwIGIvU291cmNlL1dlYktp
dC93aW4vV2ViQ29yZVN0YXRpc3RpY3MuY3BwCmluZGV4IGMxY2E5ZjIxNGYyNDljMGE0OWYxZmNi
MTIyZjA2YWQzNDkzYjRiMTkuLjJmMjJiMDNjNjIyNTAwMmFlMjE5Y2EwZjQ1YmE0N2QyOTgwYzM3
YTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdGF0aXN0aWNzLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3RhdGlzdGljcy5jcHAKQEAgLTE0NSw3ICsx
NDUsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkNvcmVTdGF0aXN0aWNzOjpqYXZh
U2NyaXB0UHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50cwogICAgIEl0ZXJhdG9yIGVuZCA9IGpzT2Jq
ZWN0VHlwZU5hbWVzLT5lbmQoKTsKICAgICBIYXNoTWFwPFN0cmluZywgaW50PiB0eXBlQ291bnRN
YXA7CiAgICAgZm9yIChJdGVyYXRvciBjdXJyZW50ID0ganNPYmplY3RUeXBlTmFtZXMtPmJlZ2lu
KCk7IGN1cnJlbnQgIT0gZW5kOyArK2N1cnJlbnQpCi0gICAgICAgIHR5cGVDb3VudE1hcC5zZXQo
Y3VycmVudC0+Zmlyc3QsIGN1cnJlbnQtPnNlY29uZCk7CisgICAgICAgIHR5cGVDb3VudE1hcC5z
ZXQoY3VycmVudC0+a2V5LCBjdXJyZW50LT52YWx1ZSk7CiAKICAgICBDT01QdHI8SVByb3BlcnR5
QmFnMj4gcmVzdWx0cyhBZG9wdENPTSwgQ09NUHJvcGVydHlCYWc8aW50Pjo6Y3JlYXRlSW5zdGFu
Y2UodHlwZUNvdW50TWFwKSk7CiAgICAgcmVzdWx0cy5jb3B5UmVmVG8odHlwZU5hbWVzQW5kQ291
bnRzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYlBs
YXRmb3JtU3RyYXRlZ2llcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9X
ZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCmluZGV4IDIzMGYzMzIzZjU0MjkxZDAxZTE0MTk4MTc4
ZmEyMTZhNDhjMGNmNWIuLmYxMzBmNzZiZDJhNjc2OTdhZGU3YTM2Nzg4NDUyNDNhOWY2YTcxYTUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3Jt
U3RyYXRlZ2llcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2Vi
UGxhdGZvcm1TdHJhdGVnaWVzLmNwcApAQCAtOTMsOCArOTMsOCBAQCB2b2lkIFdlYlBsYXRmb3Jt
U3RyYXRlZ2llczo6Z2V0UGx1Z2luSW5mbyhjb25zdCBXZWJDb3JlOjpQYWdlKiwgVmVjdG9yPFdl
YkNvcmU6OgogICAgICAgICBmb3IgKE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAg
ICAgICAgICAgICBNaW1lQ2xhc3NJbmZvIG1pbWU7CiAKLSAgICAgICAgICAgIG1pbWUudHlwZSA9
IGl0LT5maXJzdDsKLSAgICAgICAgICAgIG1pbWUuZGVzYyA9IGl0LT5zZWNvbmQ7CisgICAgICAg
ICAgICBtaW1lLnR5cGUgPSBpdC0+a2V5OworICAgICAgICAgICAgbWltZS5kZXNjID0gaXQtPnZh
bHVlOwogICAgICAgICAgICAgbWltZS5leHRlbnNpb25zID0gcGFja2FnZS0+bWltZVRvRXh0ZW5z
aW9ucygpLmdldChtaW1lLnR5cGUpOwogCiAgICAgICAgICAgICBpbmZvLm1pbWVzLmFwcGVuZCht
aW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYkhpc3RvcnkuY3BwIGIvU291
cmNlL1dlYktpdC93aW4vV2ViSGlzdG9yeS5jcHAKaW5kZXggZTg0MmMxNDA3MzVjNzE5OTFhNWQx
MWU4YjlkM2I1N2Y3ZDVjZDI3Yi4uODIzMzVhNzhhNzVmOGM4MjJkZDk5NmU1ZDY4OThjMzljMDRl
M2IzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vV2ViSGlzdG9yeS5jcHAKKysrIGIv
U291cmNlL1dlYktpdC93aW4vV2ViSGlzdG9yeS5jcHAKQEAgLTgzNCw3ICs4MzQsNyBAQCBIUkVT
VUxUIFdlYkhpc3Rvcnk6OnJlbW92ZUl0ZW1Gcm9tRGF0ZUNhY2hlcyhJV2ViSGlzdG9yeUl0ZW0q
IGVudHJ5KQogCiAgICAgRGF0ZVRvRW50cmllc01hcDo6aXRlcmF0b3IgZm91bmQgPSBtX2VudHJp
ZXNCeURhdGUuZmluZChkYXRlS2V5KTsKICAgICBBU1NFUlQoZm91bmQgIT0gbV9lbnRyaWVzQnlE
YXRlLmVuZCgpKTsKLSAgICBDRk11dGFibGVBcnJheVJlZiBlbnRyaWVzRm9yRGF0ZSA9IGZvdW5k
LT5zZWNvbmQuZ2V0KCk7CisgICAgQ0ZNdXRhYmxlQXJyYXlSZWYgZW50cmllc0ZvckRhdGUgPSBm
b3VuZC0+dmFsdWUuZ2V0KCk7CiAKICAgICBDRkluZGV4IGNvdW50ID0gQ0ZBcnJheUdldENvdW50
KGVudHJpZXNGb3JEYXRlKTsKICAgICBmb3IgKGludCBpID0gY291bnQgLSAxOyBpID49IDA7IC0t
aSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vV2ViS2l0Q09NQVBJLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvd2luL1dlYktpdENPTUFQSS5jcHAKaW5kZXggOWM5Y2MwMjZiNDdiNGZlYTk2
MGM2Mzk4NDZlMGViYTUxYzQ2NTNjMi4uNGQ4ZmYwOTViZGE5NjA3ZDI5YTE0NWI4NTdjNzhkZGZm
OGUzNWU3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vV2ViS2l0Q09NQVBJLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJLaXRDT01BUEkuY3BwCkBAIC01Miw3ICs1Miw3IEBA
IHN0YXRpYyBDT01QdHI8SUNsYXNzRmFjdG9yeT4gY2xhc3NGYWN0b3J5KGNvbnN0IENMU0lEJiBj
bHNpZCkKICAgICBzdGF0aWMgRmFjdG9yeU1hcCYgZmFjdG9yaWVzID0gKm5ldyBGYWN0b3J5TWFw
OwogCiAgICAgRmFjdG9yeU1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IGZhY3Rvcmllcy5hZGQoY2xz
aWQsIDApOwotICAgIENPTVB0cjxJQ2xhc3NGYWN0b3J5PiYgZmFjdG9yeSA9IHJlc3VsdC5pdGVy
YXRvci0+c2Vjb25kOworICAgIENPTVB0cjxJQ2xhc3NGYWN0b3J5PiYgZmFjdG9yeSA9IHJlc3Vs
dC5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5ICYmIEZBSUxFRChE
bGxHZXRDbGFzc09iamVjdChjbHNpZCwgX191dWlkb2YoZmFjdG9yeSksIHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCoqPigmZmFjdG9yeSkpKSkKICAgICAgICAgZmFjdG9yeSA9IDA7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYktpdFN0YXRpc3RpY3MuY3BwIGIvU291cmNlL1dlYktp
dC93aW4vV2ViS2l0U3RhdGlzdGljcy5jcHAKaW5kZXggOWNkOTVjN2FjOTM1OTUzMDA3ZTE1N2Rj
YTc0ZTgwN2M0NWFlZTA2ZS4uYzdiOGVkMWFjNzdjZTZlMTkyNmFhNWRiMjI0MjRmMmVlZTFhMzUw
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vV2ViS2l0U3RhdGlzdGljcy5jcHAKKysr
IGIvU291cmNlL1dlYktpdC93aW4vV2ViS2l0U3RhdGlzdGljcy5jcHAKQEAgLTE0NCw5ICsxNDQs
OSBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYktpdFN0YXRpc3RpY3M6OmNvbUNsYXNz
TmFtZUNvdW50cygKICAgICBJdGVyYXRvciBlbmQgPSBnQ2xhc3NOYW1lQ291bnQuZW5kKCk7CiAg
ICAgVmVjdG9yPFVDaGFyPiB2ZWN0b3I7CiAgICAgZm9yIChJdGVyYXRvciBjdXJyZW50ID0gZ0Ns
YXNzTmFtZUNvdW50LmJlZ2luKCk7IGN1cnJlbnQgIT0gZW5kOyArK2N1cnJlbnQpIHsKLSAgICAg
ICAgYXBwZW5kKHZlY3RvciwgU3RyaW5nOjpmb3JtYXQoIiU0dSIsIGN1cnJlbnQtPnNlY29uZCkp
OworICAgICAgICBhcHBlbmQodmVjdG9yLCBTdHJpbmc6OmZvcm1hdCgiJTR1IiwgY3VycmVudC0+
dmFsdWUpKTsKICAgICAgICAgdmVjdG9yLmFwcGVuZCgnXHQnKTsKLSAgICAgICAgYXBwZW5kKHZl
Y3Rvciwgc3RhdGljX2Nhc3Q8U3RyaW5nPihjdXJyZW50LT5maXJzdCkpOworICAgICAgICBhcHBl
bmQodmVjdG9yLCBzdGF0aWNfY2FzdDxTdHJpbmc+KGN1cnJlbnQtPmtleSkpOwogICAgICAgICB2
ZWN0b3IuYXBwZW5kKCdcbicpOwogICAgIH0KICAgICAqb3V0cHV0ID0gQlN0cmluZyhTdHJpbmc6
OmFkb3B0KHZlY3RvcikpLnJlbGVhc2UoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2lu
L1dlYk5vdGlmaWNhdGlvbkNlbnRlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJOb3RpZmlj
YXRpb25DZW50ZXIuY3BwCmluZGV4IGM3MTkyZDhkM2NkYjJjZGFlMmJhYTcxYWU2MGY3YmE5ZDgx
ZWQ3ZWEuLjMxYzgxMTlhNTAyYjljZWU2NWU0MjBiZjUxN2VlNzlhYTEyODQxYjAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYk5vdGlmaWNhdGlvbkNlbnRlci5jcHAKKysrIGIvU291
cmNlL1dlYktpdC93aW4vV2ViTm90aWZpY2F0aW9uQ2VudGVyLmNwcApAQCAtMTIwLDcgKzEyMCw3
IEBAIHZvaWQgV2ViTm90aWZpY2F0aW9uQ2VudGVyOjpwb3N0Tm90aWZpY2F0aW9uSW50ZXJuYWwo
SVdlYk5vdGlmaWNhdGlvbiogbm90aWZpY2F0CiAKICAgICAvLyBJbnRlbnRpb25hbGx5IG1ha2Ug
YSBjb3B5IG9mIHRoZSBsaXN0IHRvIGF2b2lkIHRoZSBwb3NzaWJpbGl0eSBvZiBlcnJvcnMKICAg
ICAvLyBmcm9tIGEgbXV0YXRpb24gb2YgdGhlIGxpc3QgaW4gdGhlIG9uTm90aWZ5IGNhbGxiYWNr
LgotICAgIE9iamVjdE9ic2VydmVyTGlzdCBsaXN0ID0gaXQtPnNlY29uZDsKKyAgICBPYmplY3RP
YnNlcnZlckxpc3QgbGlzdCA9IGl0LT52YWx1ZTsKIAogICAgIE9ic2VydmVyTGlzdEl0ZXJhdG9y
IGVuZCA9IGxpc3QuZW5kKCk7CiAgICAgZm9yIChPYnNlcnZlckxpc3RJdGVyYXRvciBpdDIgPSBs
aXN0LmJlZ2luKCk7IGl0MiAhPSBlbmQ7ICsraXQyKSB7CkBAIC0xNDksNyArMTQ5LDcgQEAgSFJF
U1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJOb3RpZmljYXRpb25DZW50ZXI6OmFkZE9ic2VydmVy
KAogICAgIFN0cmluZyBuYW1lKG5vdGlmaWNhdGlvbk5hbWUsIFN5c1N0cmluZ0xlbihub3RpZmlj
YXRpb25OYW1lKSk7CiAgICAgTWFwcGVkT2JzZXJ2ZXJzOjppdGVyYXRvciBpdCA9IGQtPm1fbWFw
cGVkT2JzZXJ2ZXJzLmZpbmQobmFtZSk7CiAgICAgaWYgKGl0ICE9IGQtPm1fbWFwcGVkT2JzZXJ2
ZXJzLmVuZCgpKQotICAgICAgICBpdC0+c2Vjb25kLmFwcGVuZChPYmplY3RPYnNlcnZlclBhaXIo
YW5PYmplY3QsIG9ic2VydmVyKSk7CisgICAgICAgIGl0LT52YWx1ZS5hcHBlbmQoT2JqZWN0T2Jz
ZXJ2ZXJQYWlyKGFuT2JqZWN0LCBvYnNlcnZlcikpOwogICAgIGVsc2UgewogICAgICAgICBPYmpl
Y3RPYnNlcnZlckxpc3QgbGlzdDsKICAgICAgICAgbGlzdC5hcHBlbmQoT2JqZWN0T2JzZXJ2ZXJQ
YWlyKGFuT2JqZWN0LCBvYnNlcnZlcikpOwpAQCAtMTk4LDcgKzE5OCw3IEBAIEhSRVNVTFQgU1RE
TUVUSE9EQ0FMTFRZUEUgV2ViTm90aWZpY2F0aW9uQ2VudGVyOjpyZW1vdmVPYnNlcnZlcigKICAg
ICBpZiAoaXQgPT0gZC0+bV9tYXBwZWRPYnNlcnZlcnMuZW5kKCkpCiAgICAgICAgIHJldHVybiBF
X0ZBSUw7CiAKLSAgICBPYmplY3RPYnNlcnZlckxpc3QmIG9ic2VydmVyTGlzdCA9IGl0LT5zZWNv
bmQ7CisgICAgT2JqZWN0T2JzZXJ2ZXJMaXN0JiBvYnNlcnZlckxpc3QgPSBpdC0+dmFsdWU7CiAg
ICAgT2JzZXJ2ZXJMaXN0SXRlcmF0b3IgZW5kID0gb2JzZXJ2ZXJMaXN0LmVuZCgpOwogCiAgICAg
aW50IGkgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW5jZS9XZWJDb3JlU3VwcG9y
dC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNv
cmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmNwcAppbmRleCAzZjhjOTA3YzczOWYw
OGNkYjk5MTZlODM2ZjliMDhkZTY3ODQ1MWNmLi5kNTU3OTcyMzExNjE1OTFkNWZkYjE3MTU4MDQ0
NThkYjc4MmM5MWYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBw
b3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3dpbmNl
L1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmNwcApAQCAtOTQsOCArOTQs
OCBAQCB2b2lkIFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjpnZXRQbHVnaW5JbmZvKGNvbnN0IFBh
Z2UqLCBWZWN0b3I8UGx1Z2luSW5mbz4mIG91dAogICAgICAgICBmb3IgKE1JTUVUb0Rlc2NyaXB0
aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBNaW1lQ2xhc3NJbmZvIG1pbWU7CiAKLSAg
ICAgICAgICAgIG1pbWUudHlwZSA9IGl0LT5maXJzdDsKLSAgICAgICAgICAgIG1pbWUuZGVzYyA9
IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICBtaW1lLnR5cGUgPSBpdC0+a2V5OworICAgICAgICAg
ICAgbWltZS5kZXNjID0gaXQtPnZhbHVlOwogICAgICAgICAgICAgbWltZS5leHRlbnNpb25zID0g
cGFja2FnZS0+bWltZVRvRXh0ZW5zaW9ucygpLmdldChtaW1lLnR5cGUpOwogCiAgICAgICAgICAg
ICBpbmZvLm1pbWVzLmFwcGVuZChtaW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1Bs
YXRmb3JtL0NvcmVJUEMvQXJndW1lbnRDb2RlcnMuaCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3Jt
L0NvcmVJUEMvQXJndW1lbnRDb2RlcnMuaAppbmRleCBkZDU0ZGZlZWY5MWE3ZGUzMTE5MTVlOTNk
OWFmYmViMTNhMWNiZTc3Li5hZjE2M2JlNmQ5YjY0YzMwOWQ5MTlhZDFiNzM2NTg4ZWIyNjMxY2Jh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50Q29k
ZXJzLmgKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVudENvZGVy
cy5oCkBAIC03NSw4ICs3NSw4IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IHN0
cnVjdCBBcmd1bWVudENvZGVyPHN0ZDo6cGFpcjxULCBVPiA+IHsKIHRlbXBsYXRlPHR5cGVuYW1l
IEtleVR5cGUsIHR5cGVuYW1lIFZhbHVlVHlwZT4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V1RGOjpL
ZXlWYWx1ZVBhaXI8S2V5VHlwZSwgVmFsdWVUeXBlPiA+IHsKICAgICBzdGF0aWMgdm9pZCBlbmNv
ZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBXVEY6OktleVZhbHVlUGFpcjxLZXlU
eXBlLCBWYWx1ZVR5cGU+JiBwYWlyKQogICAgIHsKLSAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKHBh
aXIuZmlyc3QpOwotICAgICAgICBlbmNvZGVyLT5lbmNvZGUocGFpci5zZWNvbmQpOworICAgICAg
ICBlbmNvZGVyLT5lbmNvZGUocGFpci5rZXkpOworICAgICAgICBlbmNvZGVyLT5lbmNvZGUocGFp
ci52YWx1ZSk7CiAgICAgfQogCiAgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2Rl
ciogZGVjb2RlciwgV1RGOjpLZXlWYWx1ZVBhaXI8S2V5VHlwZSwgVmFsdWVUeXBlPiYgcGFpcikK
QEAgLTg5LDggKzg5LDggQEAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5VHlwZSwgdHlwZW5hbWUgVmFs
dWVUeXBlPiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXVEY6OktleVZhbHUKICAgICAgICAgaWYgKCFk
ZWNvZGVyLT5kZWNvZGUodmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
ICAgIHBhaXIuZmlyc3QgPSBrZXk7Ci0gICAgICAgIHBhaXIuc2Vjb25kID0gdmFsdWU7CisgICAg
ICAgIHBhaXIua2V5ID0ga2V5OworICAgICAgICBwYWlyLnZhbHVlID0gdmFsdWU7CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uY3BwIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29y
ZUlQQy9Db25uZWN0aW9uLmNwcAppbmRleCBkMjJiOGI0YzFiOGM1MjhjZWNiOGIyMWM3MDU0MGYz
MDZjYjNlZTM0Li4zNDQ5ZTM1MmUxMGNlY2IwNDdiZTA5ZmFiODhlMGFmOTA2OTMyYWQyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5jcHAKQEAgLTEw
MiwxMiArMTAyLDEyIEBAIFBhc3NSZWZQdHI8Q29ubmVjdGlvbjo6U3luY01lc3NhZ2VTdGF0ZT4g
Q29ubmVjdGlvbjo6U3luY01lc3NhZ2VTdGF0ZTo6Z2V0T3JDcmVhCiAgICAgU3luY01lc3NhZ2VT
dGF0ZU1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IHN5bmNNZXNzYWdlU3RhdGVNYXAoKS5hZGQocnVu
TG9vcCwgMCk7CiAKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIEFTU0VS
VChyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQuaXRlcmF0
b3ItPnNlY29uZDsKKyAgICAgICAgQVNTRVJUKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOworICAg
ICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAgICB9CiAKICAgICBSZWZQdHI8
U3luY01lc3NhZ2VTdGF0ZT4gc3luY01lc3NhZ2VTdGF0ZSA9IGFkb3B0UmVmKG5ldyBTeW5jTWVz
c2FnZVN0YXRlKHJ1bkxvb3ApKTsKLSAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IHN5bmNN
ZXNzYWdlU3RhdGUuZ2V0KCk7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IHN5bmNNZXNz
YWdlU3RhdGUuZ2V0KCk7CiAKICAgICByZXR1cm4gc3luY01lc3NhZ2VTdGF0ZS5yZWxlYXNlKCk7
CiB9CkBAIC0zNjIsMTAgKzM2MiwxMCBAQCBQYXNzT3duUHRyPEFyZ3VtZW50RGVjb2Rlcj4gQ29u
bmVjdGlvbjo6d2FpdEZvck1lc3NhZ2UoTWVzc2FnZUlEIG1lc3NhZ2VJRCwgdWludAogICAgICAg
ICBNdXRleExvY2tlciBsb2NrZXIobV93YWl0Rm9yTWVzc2FnZU11dGV4KTsKIAogICAgICAgICBI
YXNoTWFwPHN0ZDo6cGFpcjx1bnNpZ25lZCwgdWludDY0X3Q+LCBBcmd1bWVudERlY29kZXIqPjo6
aXRlcmF0b3IgaXQgPSBtX3dhaXRGb3JNZXNzYWdlTWFwLmZpbmQobWVzc2FnZUFuZERlc3RpbmF0
aW9uKTsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQpIHsKKyAgICAgICAgaWYgKGl0LT52YWx1ZSkg
ewogICAgICAgICAgICAgLy8gRklYTUU6IG1fd2FpdEZvck1lc3NhZ2VNYXAgc2hvdWxkIHJlYWxs
eSBob2xkIE93blB0cnMgdG8KICAgICAgICAgICAgIC8vIEFyZ3VtZW50RGVjb2RlcnMsIGJ1dCBI
YXNoTWFwIGRvZXNuJ3QgY3VycmVudGx5IHN1cHBvcnQgT3duUHRycy4KLSAgICAgICAgICAgIE93
blB0cjxBcmd1bWVudERlY29kZXI+IGFyZ3VtZW50cyA9IGFkb3B0UHRyKGl0LT5zZWNvbmQpOwor
ICAgICAgICAgICAgT3duUHRyPEFyZ3VtZW50RGVjb2Rlcj4gYXJndW1lbnRzID0gYWRvcHRQdHIo
aXQtPnZhbHVlKTsKICAgICAgICAgICAgIG1fd2FpdEZvck1lc3NhZ2VNYXAucmVtb3ZlKGl0KTsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50cy5yZWxlYXNlKCk7CkBA
IC01MzksOCArNTM5LDggQEAgdm9pZCBDb25uZWN0aW9uOjpwcm9jZXNzSW5jb21pbmdNZXNzYWdl
KE1lc3NhZ2VJRCBtZXNzYWdlSUQsIFBhc3NPd25QdHI8QXJndW1lbnQKICAgICAgICAgCiAgICAg
ICAgIEhhc2hNYXA8c3RkOjpwYWlyPHVuc2lnbmVkLCB1aW50NjRfdD4sIEFyZ3VtZW50RGVjb2Rl
cio+OjppdGVyYXRvciBpdCA9IG1fd2FpdEZvck1lc3NhZ2VNYXAuZmluZChzdGQ6Om1ha2VfcGFp
cihtZXNzYWdlSUQudG9JbnQoKSwgaW5jb21pbmdNZXNzYWdlLmRlc3RpbmF0aW9uSUQoKSkpOwog
ICAgICAgICBpZiAoaXQgIT0gbV93YWl0Rm9yTWVzc2FnZU1hcC5lbmQoKSkgewotICAgICAgICAg
ICAgaXQtPnNlY29uZCA9IGluY29taW5nTWVzc2FnZS5yZWxlYXNlQXJndW1lbnRzKCkubGVha1B0
cigpOwotICAgICAgICAgICAgQVNTRVJUKGl0LT5zZWNvbmQpOworICAgICAgICAgICAgaXQtPnZh
bHVlID0gaW5jb21pbmdNZXNzYWdlLnJlbGVhc2VBcmd1bWVudHMoKS5sZWFrUHRyKCk7CisgICAg
ICAgICAgICBBU1NFUlQoaXQtPnZhbHVlKTsKICAgICAgICAgCiAgICAgICAgICAgICBtX3dhaXRG
b3JNZXNzYWdlQ29uZGl0aW9uLnNpZ25hbCgpOwogICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vZ3RrL1dvcmtRdWV1ZUd0ay5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybS9ndGsvV29ya1F1ZXVlR3RrLmNwcAppbmRleCAxZGZhYjgzY2Nm
YjI0YzlmMDBlZTQwZDJkYWExYzk1YjE2MzgyYTQzLi42ODg1ZDQ4NWJkMTE2ZDMyOGRlY2QwMmFh
ZjU0YzkxODc4MmIyZjE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9ndGsv
V29ya1F1ZXVlR3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9ndGsvV29ya1F1
ZXVlR3RrLmNwcApAQCAtMTY2LDcgKzE2Niw3IEBAIHZvaWQgV29ya1F1ZXVlOjpyZWdpc3RlckV2
ZW50U291cmNlSGFuZGxlcihpbnQgZmlsZURlc2NyaXB0b3IsIGludCBjb25kaXRpb24sIGNvCiAg
ICAgICAgIFZlY3RvcjxFdmVudFNvdXJjZSo+IHNvdXJjZXM7CiAgICAgICAgIEV2ZW50U291cmNl
SXRlcmF0b3IgaXQgPSBtX2V2ZW50U291cmNlcy5maW5kKGZpbGVEZXNjcmlwdG9yKTsKICAgICAg
ICAgaWYgKGl0ICE9IG1fZXZlbnRTb3VyY2VzLmVuZCgpKSAKLSAgICAgICAgICAgIHNvdXJjZXMg
PSBpdC0+c2Vjb25kOworICAgICAgICAgICAgc291cmNlcyA9IGl0LT52YWx1ZTsKIAogICAgICAg
ICBzb3VyY2VzLmFwcGVuZChldmVudFNvdXJjZSk7CiAgICAgICAgIG1fZXZlbnRTb3VyY2VzLnNl
dChmaWxlRGVzY3JpcHRvciwgc291cmNlcyk7CkBAIC0xODYsNyArMTg2LDcgQEAgdm9pZCBXb3Jr
UXVldWU6OnVucmVnaXN0ZXJFdmVudFNvdXJjZUhhbmRsZXIoaW50IGZpbGVEZXNjcmlwdG9yKQog
ICAgIEFTU0VSVChtX2V2ZW50U291cmNlcy5jb250YWlucyhmaWxlRGVzY3JpcHRvcikpOwogCiAg
ICAgaWYgKGl0ICE9IG1fZXZlbnRTb3VyY2VzLmVuZCgpKSB7Ci0gICAgICAgIFZlY3RvcjxFdmVu
dFNvdXJjZSo+IHNvdXJjZXMgPSBpdC0+c2Vjb25kOworICAgICAgICBWZWN0b3I8RXZlbnRTb3Vy
Y2UqPiBzb3VyY2VzID0gaXQtPnZhbHVlOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgc291cmNlcy5zaXplKCk7IGkrKykKICAgICAgICAgICAgIHNvdXJjZXNbaV0tPmNhbmNlbCgp
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9tYWMvV29ya1F1ZXVlTWFj
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL21hYy9Xb3JrUXVldWVNYWMuY3BwCmluZGV4
IGFlNDczZWU1Y2M4NGU1ODQyOWIwNDM5Y2NkOTIxYWMyYzQ5MmZmYWEuLjZlNTRjZWUwYjcwOTg0
MGE1NGY3NmNkYWE0MjRmZWViNDYyOTA5YjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1Bs
YXRmb3JtL21hYy9Xb3JrUXVldWVNYWMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3Jt
L21hYy9Xb3JrUXVldWVNYWMuY3BwCkBAIC0xNTMsNyArMTUzLDcgQEAgdm9pZCBXb3JrUXVldWU6
OnVucmVnaXN0ZXJNYWNoUG9ydEV2ZW50SGFuZGxlcihtYWNoX3BvcnRfdCBtYWNoUG9ydCkKICAg
ICAKICAgICBBU1NFUlQobV9ldmVudFNvdXJjZXMuY29udGFpbnMobWFjaFBvcnQpKTsKIAotICAg
IEV2ZW50U291cmNlKiBldmVudFNvdXJjZSA9IGl0LT5zZWNvbmQ7CisgICAgRXZlbnRTb3VyY2Uq
IGV2ZW50U291cmNlID0gaXQtPnZhbHVlOwogICAgIC8vIENhbmNlbCBhbmQgcmVsZWFzZSB0aGUg
c291cmNlLiBJdCB3aWxsIGJlIGRlbGV0ZWQgaW4gaXRzIGZpbmFsaXplIGhhbmRsZXIuCiAgICAg
ZGlzcGF0Y2hfc291cmNlX2NhbmNlbChldmVudFNvdXJjZS0+ZGlzcGF0Y2hTb3VyY2UoKSk7CiAg
ICAgZGlzcGF0Y2hfcmVsZWFzZShldmVudFNvdXJjZS0+ZGlzcGF0Y2hTb3VyY2UoKSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvUGx1Z2lucy9OUFJlbW90ZU9iamVjdE1hcC5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvUGx1Z2lucy9OUFJlbW90ZU9iamVjdE1hcC5jcHAK
aW5kZXggNzY0MWFmNWU4Yzg5MmQxZDM3ZWU5NmRhOWI3ZTYwNTg5OTczZTg4YS4uYjVlYzJkOWRh
MzlmMjZkY2I0MzIwZDk1ZTAzZjJmY2FlNGU3ZDdkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvU2hhcmVkL1BsdWdpbnMvTlBSZW1vdGVPYmplY3RNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9QbHVnaW5zL05QUmVtb3RlT2JqZWN0TWFwLmNwcApAQCAtMjAwLDcgKzIwMCw3
IEBAIHZvaWQgTlBSZW1vdGVPYmplY3RNYXA6OnBsdWdpbkRlc3Ryb3llZChQbHVnaW4qIHBsdWdp
bikKIAogICAgIC8vIEdhdGhlciB0aGUgcmVjZWl2ZXJzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHBs
dWctaW4uCiAgICAgZm9yIChIYXNoTWFwPHVpbnQ2NF90LCBOUE9iamVjdE1lc3NhZ2VSZWNlaXZl
cio+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcmVnaXN0ZXJlZE5QT2JqZWN0cy5iZWdpbigpLCBl
bmQgPSBtX3JlZ2lzdGVyZWROUE9iamVjdHMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAg
ICAgICBOUE9iamVjdE1lc3NhZ2VSZWNlaXZlciogbnBPYmplY3RNZXNzYWdlUmVjZWl2ZXIgPSBp
dC0+c2Vjb25kOworICAgICAgICBOUE9iamVjdE1lc3NhZ2VSZWNlaXZlciogbnBPYmplY3RNZXNz
YWdlUmVjZWl2ZXIgPSBpdC0+dmFsdWU7CiAgICAgICAgIGlmIChucE9iamVjdE1lc3NhZ2VSZWNl
aXZlci0+cGx1Z2luKCkgPT0gcGx1Z2luKQogICAgICAgICAgICAgbWVzc2FnZVJlY2VpdmVycy5h
cHBlbmQobnBPYmplY3RNZXNzYWdlUmVjZWl2ZXIpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9Vc2VyTWVzc2FnZUNvZGVycy5oIGIvU291cmNlL1dlYktpdDIvU2hh
cmVkL1VzZXJNZXNzYWdlQ29kZXJzLmgKaW5kZXggZWU0YWI2NGZmYTViNjNiOTJjMDk5OTU1NDg1
ZjIwZTIxNTU1ZTZjZi4uMmVjNWJiNGQ1MmIyMDc1MWZkYjU3ZWQ2NjI4MGVhOTA3YmQzOWI1MCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1VzZXJNZXNzYWdlQ29kZXJzLmgKKysr
IGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1VzZXJNZXNzYWdlQ29kZXJzLmgKQEAgLTkzLDggKzkz
LDggQEAgcHVibGljOgogICAgICAgICAgICAgSW1tdXRhYmxlRGljdGlvbmFyeTo6TWFwVHlwZTo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAuYmVnaW4oKTsKICAgICAgICAgICAgIEltbXV0YWJsZURp
Y3Rpb25hcnk6Ok1hcFR5cGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC5lbmQoKTsKICAgICAg
ICAgICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgICAgICBlbmNvZGVy
LT5lbmNvZGUoaXQtPmZpcnN0KTsKLSAgICAgICAgICAgICAgICBlbmNvZGVyLT5lbmNvZGUoT3du
ZXIoaXQtPnNlY29uZC5nZXQoKSkpOworICAgICAgICAgICAgICAgIGVuY29kZXItPmVuY29kZShp
dC0+a2V5KTsKKyAgICAgICAgICAgICAgICBlbmNvZGVyLT5lbmNvZGUoT3duZXIoaXQtPnZhbHVl
LmdldCgpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByZWZlcmVuY2VzU3Rv
cmUuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByZWZlcmVuY2VzU3RvcmUuY3BwCmlu
ZGV4IDg5NzM0YmYwZWZiMDgwMzgwZWRjNjQ1ZTNlYzcxZGNkZjM2N2M2ZjkuLjNiYTI3ZWRjMDYw
Njc5ZWJkNWRjZWUwYTU3ZmZkN2E1YjlkMGI5ZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9XZWJQcmVmZXJlbmNlc1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5jcHAKQEAgLTE1MSw3ICsxNTEsNyBAQCBzdGF0aWMgdHlw
ZW5hbWUgTWFwVHlwZTo6TWFwcGVkVHlwZSB2YWx1ZUZvcktleShjb25zdCBNYXBUeXBlJiBtYXAs
IGNvbnN0IHR5cGVuYQogewogICAgIHR5cGVuYW1lIE1hcFR5cGU6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbWFwLmZpbmQoa2V5KTsKICAgICBpZiAoaXQgIT0gbWFwLmVuZCgpKQotICAgICAgICByZXR1
cm4gaXQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKIAogICAgIHJldHVybiBk
ZWZhdWx0VmFsdWVGb3JLZXk8dHlwZW5hbWUgTWFwVHlwZTo6TWFwcGVkVHlwZT4oa2V5KTsKIH0K
QEAgLTE4Nyw3ICsxODcsNyBAQCBib29sIFdlYlByZWZlcmVuY2VzU3RvcmU6OmdldEJvb2xWYWx1
ZUZvcktleShjb25zdCBTdHJpbmcmIGtleSkgY29uc3QKICAgICAvLyBGSVhNRTogRXh0ZW5kIG92
ZXJyaWRpbmcgdG8gb3RoZXIga2V5IHR5cGVzIHVzZWQgZnJvbSBUZXN0UnVubmVyLgogICAgIEJv
b2xPdmVycmlkZXNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYm9vbFRlc3RSdW5uZXJPdmVycmlk
ZXNNYXAoKS5maW5kKGtleSk7CiAgICAgaWYgKGl0ICE9IGJvb2xUZXN0UnVubmVyT3ZlcnJpZGVz
TWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgICAgICByZXR1cm4g
aXQtPnZhbHVlOwogICAgIHJldHVybiB2YWx1ZUZvcktleShtX2Jvb2xWYWx1ZXMsIGtleSk7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvV2ViQ29yZUFyZ3VtZW50
Q29kZXJzTWFjLm1tIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9XZWJDb3JlQXJndW1lbnRD
b2RlcnNNYWMubW0KaW5kZXggMTk2YWIxMWM3YTc0MzEwN2QzODAwZTFmZjhmYTViZTFmMmIzYjgx
OC4uMGY5ZDNkOGEzYmZiNzM3NDNiMzkzMzUzMzVkYzVmNThjMWQxNDc4MCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9XZWJDb3JlQXJndW1lbnRDb2RlcnNNYWMubW0KKysr
IGIvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9XZWJDb3JlQXJndW1lbnRDb2RlcnNNYWMubW0K
QEAgLTE4Myw3ICsxODMsNyBAQCBib29sIEFyZ3VtZW50Q29kZXI8UmVzb3VyY2VFcnJvcj46OmRl
Y29kZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIFJlc291cmNlRXJybwogICAgIEhhc2hNYXA8
U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHN0cmluZ1VzZXJJbmZvTWFwLmJl
Z2luKCk7CiAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IHN0cmluZ1VzZXJJbmZvTWFwLmVuZCgpOwogICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpCi0g
ICAgICAgIFt1c2VySW5mbyBzZXRPYmplY3Q6bnNTdHJpbmcoaXQtPnNlY29uZCkgZm9yS2V5Om5z
U3RyaW5nKGl0LT5maXJzdCldOworICAgICAgICBbdXNlckluZm8gc2V0T2JqZWN0Om5zU3RyaW5n
KGl0LT52YWx1ZSkgZm9yS2V5Om5zU3RyaW5nKGl0LT5rZXkpXTsKIAogICAgIGlmIChjZXJ0aWZp
Y2F0ZS5jZXJ0aWZpY2F0ZUNoYWluKCkpCiAgICAgICAgIFt1c2VySW5mbyBzZXRPYmplY3Q6KE5T
QXJyYXkgKiljZXJ0aWZpY2F0ZS5jZXJ0aWZpY2F0ZUNoYWluKCkgZm9yS2V5OkAiTlNFcnJvclBl
ZXJDZXJ0aWZpY2F0ZUNoYWluS2V5Il07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvcXQvQXJndW1lbnRDb2RlcnNRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvQXJn
dW1lbnRDb2RlcnNRdC5jcHAKaW5kZXggYzg5YmY0NGYxNzE5MGIwMmM0MTEyYmNiZWQ2ZTBjNDFm
YTNjNjc1Zi4uYTQzOWNhZmYxZTQ4OGUxMDJjNTUwYWQwNGYzNDZkNTk5NmRkMTg5MiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL3F0L0FyZ3VtZW50Q29kZXJzUXQuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9Bcmd1bWVudENvZGVyc1F0LmNwcApAQCAtODYsOCAr
ODYsOCBAQCBib29sIEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6RHJhZ0RhdGE+OjpkZWNvZGUoQXJn
dW1lbnREZWNvZGVyKiBkZWNvZGVyLCBEcmFnRGF0YQogICAgICAgICBNSU1FRGF0YUhhc2hNYXA6
Oml0ZXJhdG9yIGl0ID0gbWFwLmJlZ2luKCk7CiAgICAgICAgIE1JTUVEYXRhSGFzaE1hcDo6aXRl
cmF0b3IgZW5kID0gbWFwLmVuZCgpOwogICAgICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7
Ci0gICAgICAgICAgICBRQnl0ZUFycmF5IGJ5dGVzKChjaGFyKilpdC0+c2Vjb25kLmRhdGEoKSwg
aXQtPnNlY29uZC5zaXplKCkpOwotICAgICAgICAgICAgbWltZURhdGEtPnNldERhdGEoaXQtPmZp
cnN0LCBieXRlcyk7CisgICAgICAgICAgICBRQnl0ZUFycmF5IGJ5dGVzKChjaGFyKilpdC0+dmFs
dWUuZGF0YSgpLCBpdC0+dmFsdWUuc2l6ZSgpKTsKKyAgICAgICAgICAgIG1pbWVEYXRhLT5zZXRE
YXRhKGl0LT5rZXksIGJ5dGVzKTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvU2hhcmVkL3NvdXAvV2ViQ29yZUFyZ3VtZW50Q29kZXJzU291cC5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvc291cC9XZWJDb3JlQXJndW1lbnRDb2RlcnNTb3VwLmNwcApp
bmRleCBkYmUyYzUxY2RjZmI3OThhZmFjZDJmZDFkYmZhNDkyYjFhMWVmYjFiLi4zM2Q5YmQzZmYy
MGU2MTkwY2MzY2U0ZmY4NTk5MzhiMDM5NGVkNmMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvc291cC9XZWJDb3JlQXJndW1lbnRDb2RlcnNTb3VwLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvc291cC9XZWJDb3JlQXJndW1lbnRDb2RlcnNTb3VwLmNwcApAQCAtMTQ0
LDcgKzE0NCw3IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxSZXNvdXJjZVJlc3BvbnNlPjo6ZGVjb2Rl
KEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgUmVzb3VyY2VSCiAgICAgaWYgKCFkZWNvZGVyLT5k
ZWNvZGUoaGVhZGVycykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBmb3IgKEhUVFBIZWFk
ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaGVhZGVycy5iZWdpbigpLCBlbmQgPSBoZWFkZXJz
LmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHJlc3BvbnNlLnNldEhUVFBIZWFkZXJG
aWVsZChpdC0+Zmlyc3QsIGl0LT5zZWNvbmQpOworICAgICAgICByZXNwb25zZS5zZXRIVFRQSGVh
ZGVyRmllbGQoaXQtPmtleSwgaXQtPnZhbHVlKTsKIAogICAgIHVpbnQzMl90IHNvdXBNZXNzYWdl
RmxhZ3M7CiAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoc291cE1lc3NhZ2VGbGFncykpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJk
X2xpc3QuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9y
d2FyZF9saXN0LmNwcAppbmRleCBmNmJkMGE3NjBlNmZlYWVkZjNmZTAzM2M4MWYzYTFhMDlkMWE4
NDVlLi4zMWVmNWFmYWZlNmQzNTk5NDJkNDJlNWU3ZDVkNGNmMmZlMjI5MTY5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNrX2Zvcndh
cmRfbGlzdC5jcHAKQEAgLTU0LDcgKzU0LDcgQEAgc3RydWN0IF9Fd2tfQmFja19Gb3J3YXJkX0xp
c3QgewogICAgICAgICBJdGVtc01hcDo6aXRlcmF0b3IgaXQgPSB3cmFwcGVyQ2FjaGUuYmVnaW4o
KTsKICAgICAgICAgSXRlbXNNYXA6Oml0ZXJhdG9yIGVuZCA9IHdyYXBwZXJDYWNoZS5lbmQoKTsK
ICAgICAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIGV3a19iYWNrX2Zv
cndhcmRfbGlzdF9pdGVtX3VucmVmKGl0LT5zZWNvbmQpOworICAgICAgICAgICAgZXdrX2JhY2tf
Zm9yd2FyZF9saXN0X2l0ZW1fdW5yZWYoaXQtPnZhbHVlKTsKICAgICB9CiB9OwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAKaW5kZXggNzE1
MDRmNjQxZDIwNjVkZjJiZjY4OGRhNDVlOTVkNWE1MWRiNThiNC4uY2YyZmNjM2Y5MjE4YWRmMDJj
NDQ1YmEzMjUwZjJkMGIzZjBiYmRlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcApAQCAtOTcsNyArOTcsNyBAQCBzdHJ1Y3QgX0V3a19D
b250ZXh0IHsKICAgICAgICAgSGFzaE1hcDx1aW50NjRfdCwgRXdrX0Rvd25sb2FkX0pvYio+Ojpp
dGVyYXRvciBpdCA9IGRvd25sb2FkSm9icy5iZWdpbigpOwogICAgICAgICBIYXNoTWFwPHVpbnQ2
NF90LCBFd2tfRG93bmxvYWRfSm9iKj46Oml0ZXJhdG9yIGVuZCA9IGRvd25sb2FkSm9icy5lbmQo
KTsKICAgICAgICAgZm9yICggOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBld2tfZG93
bmxvYWRfam9iX3VucmVmKGl0LT5zZWNvbmQpOworICAgICAgICAgICAgZXdrX2Rvd25sb2FkX2pv
Yl91bnJlZihpdC0+dmFsdWUpOwogICAgIH0KIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcAppbmRleCBjZTdmN2I0NTQ5NDYzYzEwZmJhY2NiNzU3
M2EzYmVhYWRlMjUzYjBkLi43MTQzODAyNzEwMzdmMGEzZjVlYzNlZjU5YzQ1NzFhM2JkZjA0OTk3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwCkBA
IC0zNDQsNyArMzQ0LDcgQEAgc3RhdGljIHZvaWQgX2V3a192aWV3X3ByaXZfbG9hZGluZ19yZXNv
dXJjZXNfY2xlYXIoTG9hZGluZ1Jlc291cmNlc01hcCYgbG9hZGluZ1IKICAgICBMb2FkaW5nUmVz
b3VyY2VzTWFwOjppdGVyYXRvciBpdCA9IGxvYWRpbmdSZXNvdXJjZXNNYXAuYmVnaW4oKTsKICAg
ICBMb2FkaW5nUmVzb3VyY2VzTWFwOjppdGVyYXRvciBlbmQgPSBsb2FkaW5nUmVzb3VyY2VzTWFw
LmVuZCgpOwogICAgIGZvciAoIDsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBld2tfd2ViX3Jl
c291cmNlX3VucmVmKGl0LT5zZWNvbmQpOworICAgICAgICBld2tfd2ViX3Jlc291cmNlX3VucmVm
KGl0LT52YWx1ZSk7CiAKICAgICBsb2FkaW5nUmVzb3VyY2VzTWFwLmNsZWFyKCk7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCmlu
ZGV4IGVlODZkNDQ4YTg4MmE4YTY3YjUxY2M2OGNkNDUzYmU1YWFiMDdjYzguLjFmMDFiNDg1NTU1
NTdmOWUwZWRkZTg0OGJkNDY2YTYxMWJhYmUxYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCkBAIC0yMzAwLDcgKzIzMDAsNyBA
QCBHTGlzdCogd2Via2l0X3dlYl92aWV3X2dldF9zdWJyZXNvdXJjZXMoV2ViS2l0V2ViVmlldyog
d2ViVmlldykKICAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogcHJpdiA9IHdlYlZpZXctPnByaXY7
CiAgICAgUmVzb3VyY2VzTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBwcml2LT5zdWJyZXNvdXJj
ZXNNYXAuZW5kKCk7CiAgICAgZm9yIChSZXNvdXJjZXNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
cHJpdi0+c3VicmVzb3VyY2VzTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAg
c3VicmVzb3VyY2VzID0gZ19saXN0X3ByZXBlbmQoc3VicmVzb3VyY2VzLCBpdC0+c2Vjb25kLmdl
dCgpKTsKKyAgICAgICAgc3VicmVzb3VyY2VzID0gZ19saXN0X3ByZXBlbmQoc3VicmVzb3VyY2Vz
LCBpdC0+dmFsdWUuZ2V0KCkpOwogCiAgICAgcmV0dXJuIGdfbGlzdF9yZXZlcnNlKHN1YnJlc291
cmNlcyk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRXZWJWaWV3QmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRXZWJWaWV3QmFzZS5jcHAKaW5kZXggNDkyNWI1YTdjMWNlZTljODRmZTU4NDJiY2QwYzFh
OTEyMjZlNTk0YS4uMTkwOTExNzMxNjdmZjYzYzcwY2RhZjFmYjkwMTRmOWQ2MTMzZjNiNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jh
c2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZp
ZXdCYXNlLmNwcApAQCAtMjI0LDcgKzIyNCw3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdC
YXNlQ29udGFpbmVyRm9yYWxsKEd0a0NvbnRhaW5lciogY29udGFpbmVyLCBnYm9vbGVhbiBpCiAg
ICAgV2ViS2l0V2ViVmlld0NoaWxkcmVuTWFwIGNoaWxkcmVuID0gcHJpdi0+Y2hpbGRyZW47CiAg
ICAgV2ViS2l0V2ViVmlld0NoaWxkcmVuTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBjaGlsZHJl
bi5lbmQoKTsKICAgICBmb3IgKFdlYktpdFdlYlZpZXdDaGlsZHJlbk1hcDo6Y29uc3RfaXRlcmF0
b3IgY3VycmVudCA9IGNoaWxkcmVuLmJlZ2luKCk7IGN1cnJlbnQgIT0gZW5kOyArK2N1cnJlbnQp
Ci0gICAgICAgICgqY2FsbGJhY2spKGN1cnJlbnQtPmZpcnN0LCBjYWxsYmFja0RhdGEpOworICAg
ICAgICAoKmNhbGxiYWNrKShjdXJyZW50LT5rZXksIGNhbGxiYWNrRGF0YSk7CiAKICAgICBpZiAo
aW5jbHVkZUludGVybmFscyAmJiBwcml2LT5pbnNwZWN0b3JWaWV3KQogICAgICAgICAoKmNhbGxi
YWNrKShwcml2LT5pbnNwZWN0b3JWaWV3LCBjYWxsYmFja0RhdGEpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tQcmludGluZ1ZpZXcubW0gYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ByaW50aW5nVmlldy5tbQppbmRleCA2M2M1ODg5
NWY3MTI5M2IxYjU0NThkOWViNjg0MWQwYTA2NDgxNDlkLi5jYTFjYWQ1ODI1OTlmZDBjNjBiMjUy
NGM2YmM3NzI3NjlkMmZkMzlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL21hYy9XS1ByaW50aW5nVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL21hYy9XS1ByaW50aW5nVmlldy5tbQpAQCAtMTk0LDggKzE5NCw4IEBAIHN0YXRpYyBCT09M
IGlzRm9yY2luZ1ByZXZpZXdVcGRhdGU7CiAtICh1aW50NjRfdClfZXhwZWN0ZWRQcmV2aWV3Q2Fs
bGJhY2tGb3JSZWN0Oihjb25zdCBJbnRSZWN0JilyZWN0CiB7CiAgICAgZm9yIChIYXNoTWFwPHVp
bnQ2NF90LCBXZWJDb3JlOjpJbnRSZWN0Pjo6aXRlcmF0b3IgaXRlciA9IF9leHBlY3RlZFByZXZp
ZXdDYWxsYmFja3MuYmVnaW4oKTsgaXRlciAhPSBfZXhwZWN0ZWRQcmV2aWV3Q2FsbGJhY2tzLmVu
ZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgaWYgKGl0ZXItPnNlY29uZCAgPT0gcmVjdCkKLSAgICAg
ICAgICAgIHJldHVybiBpdGVyLT5maXJzdDsKKyAgICAgICAgaWYgKGl0ZXItPnZhbHVlICA9PSBy
ZWN0KQorICAgICAgICAgICAgcmV0dXJuIGl0ZXItPmtleTsKICAgICB9CiAgICAgcmV0dXJuIDA7
CiB9CkBAIC0yMjksOCArMjI5LDggQEAgc3RhdGljIHZvaWQgcGFnZURpZERyYXdUb1BERihXS0Rh
dGFSZWYgZGF0YVJlZiwgV0tFcnJvclJlZiwgdm9pZCogdW50eXBlZENvbnRleHQKICAgICAgICAg
ICAgIEFTU0VSVChbdmlldyBfaXNQcmludGluZ1ByZXZpZXddKTsKIAogICAgICAgICAgICAgaWYg
KGRhdGEpIHsKLSAgICAgICAgICAgICAgICBIYXNoTWFwPFdlYkNvcmU6OkludFJlY3QsIFZlY3Rv
cjx1aW50OF90PiA+OjpBZGRSZXN1bHQgZW50cnkgPSB2aWV3LT5fcGFnZVByZXZpZXdzLmFkZChp
dGVyLT5zZWNvbmQsIFZlY3Rvcjx1aW50OF90PigpKTsKLSAgICAgICAgICAgICAgICBlbnRyeS5p
dGVyYXRvci0+c2Vjb25kLmFwcGVuZChkYXRhLT5ieXRlcygpLCBkYXRhLT5zaXplKCkpOworICAg
ICAgICAgICAgICAgIEhhc2hNYXA8V2ViQ29yZTo6SW50UmVjdCwgVmVjdG9yPHVpbnQ4X3Q+ID46
OkFkZFJlc3VsdCBlbnRyeSA9IHZpZXctPl9wYWdlUHJldmlld3MuYWRkKGl0ZXItPnZhbHVlLCBW
ZWN0b3I8dWludDhfdD4oKSk7CisgICAgICAgICAgICAgICAgZW50cnkuaXRlcmF0b3ItPnZhbHVl
LmFwcGVuZChkYXRhLT5ieXRlcygpLCBkYXRhLT5zaXplKCkpOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgdmlldy0+X2V4cGVjdGVkUHJldmlld0NhbGxiYWNrcy5yZW1vdmUoY29udGV4dC0+
Y2FsbGJhY2tJRCk7CiAgICAgICAgICAgICBib29sIHJlY2VpdmVkUmVzcG9uc2VUb0xhdGVzdFJl
cXVlc3QgPSB2aWV3LT5fbGF0ZXN0RXhwZWN0ZWRQcmV2aWV3Q2FsbGJhY2sgPT0gY29udGV4dC0+
Y2FsbGJhY2tJRDsKQEAgLTQ5NCw3ICs0OTQsNyBAQCBzdGF0aWMgdm9pZCBwcmVwYXJlRGF0YUZv
clByaW50aW5nT25TZWNvbmRhcnlUaHJlYWQodm9pZCogdW50eXBlZENvbnRleHQpCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBjb25zdCBWZWN0b3I8dWludDhfdD4mIHBkZkRhdGFCeXRl
cyA9IHBhZ2VQcmV2aWV3SXRlcmF0b3ItPnNlY29uZDsKKyAgICBjb25zdCBWZWN0b3I8dWludDhf
dD4mIHBkZkRhdGFCeXRlcyA9IHBhZ2VQcmV2aWV3SXRlcmF0b3ItPnZhbHVlOwogICAgIFJldGFp
blB0cjxOU0RhdGE+IHBkZkRhdGEoQWRvcHROUywgW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0
ZXM6cGRmRGF0YUJ5dGVzLmRhdGEoKSBsZW5ndGg6cGRmRGF0YUJ5dGVzLnNpemUoKV0pOwogICAg
IFJldGFpblB0cjxQREZEb2N1bWVudD4gcGRmRG9jdW1lbnQoQWRvcHROUywgW1twZGZEb2N1bWVu
dENsYXNzKCkgYWxsb2NdIGluaXRXaXRoRGF0YTpwZGZEYXRhLmdldCgpXSk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbSBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQppbmRleCBlYjZiODE5YzVkNDA1NjM5
ODE1ZWU3YjE4OTU2ZWM3MTA4YTVkYTdmLi4xOTNhMWQwNTJjZTI5YzMxMWU0ODBkYTNmODU1NWI5
M2QxMjA4NTRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9X
S1ZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1t
CkBAIC00MjMsNyArNDIzLDcgQEAgc3RhdGljIFN0cmluZyBjb21tYW5kTmFtZUZvclNlbGVjdG9y
KFNFTCBzZWxlY3RvcikKICAgICBzdGF0aWMgY29uc3QgU2VsZWN0b3JOYW1lTWFwKiBleGNlcHRp
b25NYXAgPSBjcmVhdGVTZWxlY3RvckV4Y2VwdGlvbk1hcCgpOwogICAgIFNlbGVjdG9yTmFtZU1h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBleGNlcHRpb25NYXAtPmZpbmQoc2VsZWN0b3IpOwogICAg
IGlmIChpdCAhPSBleGNlcHRpb25NYXAtPmVuZCgpKQotICAgICAgICByZXR1cm4gaXQtPnNlY29u
ZDsKKyAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKICAgICAKICAgICAvLyBSZW1vdmUgdGhlIHRy
YWlsaW5nIGNvbG9uLgogICAgIC8vIE5vIG5lZWQgdG8gY2FwaXRhbGl6ZSB0aGUgY29tbWFuZCBu
YW1lIHNpbmNlIEVkaXRvciBjb21tYW5kIG5hbWVzIGFyZQpAQCAtNzM3LDcgKzczNyw3IEBAIHN0
YXRpYyB2b2lkIHZhbGlkYXRlQ29tbWFuZENhbGxiYWNrKFdLU3RyaW5nUmVmIGNvbW1hbmROYW1l
LCBib29sIGlzRW5hYmxlZCwgaW50CiAKICAgICAvLyBBZGQgdGhpcyBpdGVtIHRvIHRoZSB2ZWN0
b3Igb2YgaXRlbXMgZm9yIGEgZ2l2ZW4gY29tbWFuZCB0aGF0IGFyZSBhd2FpdGluZyB2YWxpZGF0
aW9uLgogICAgIFZhbGlkYXRpb25NYXA6OkFkZFJlc3VsdCBhZGRSZXN1bHQgPSBfZGF0YS0+X3Zh
bGlkYXRpb25NYXAuYWRkKGNvbW1hbmROYW1lLCBWYWxpZGF0aW9uVmVjdG9yKCkpOwotICAgIGFk
ZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLmFwcGVuZChpdGVtKTsKKyAgICBhZGRSZXN1bHQuaXRl
cmF0b3ItPnZhbHVlLmFwcGVuZChpdGVtKTsKICAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkp
IHsKICAgICAgICAgLy8gSWYgd2UgYXJlIG5vdCBhbHJlYWR5IGF3YWl0aW5nIHZhbGlkYXRpb24g
Zm9yIHRoaXMgY29tbWFuZCwgc3RhcnQgdGhlIGFzeW5jaHJvbm91cyB2YWxpZGF0aW9uIHByb2Nl
c3MuCiAgICAgICAgIC8vIEZJWE1FOiBUaGVvcmV0aWNhbGx5LCB0aGVyZSBpcyBhIHJhY2UgaGVy
ZTsgd2hlbiB3ZSBnZXQgdGhlIGFuc3dlciBpdCBtaWdodCBiZSBvbGQsIGZyb20gYSBwcmV2aW91
cyB0aW1lCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRH
cmFwaGljcy9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5jcHAKaW5k
ZXggODRmNmViZDJmMTY1OGU2OTk2NWU0NzFiYTM2MjVhOTIyODlmYWE3Mi4uNzdmZGMwYTI2Zjg4
ZDQzMDdhN2I2MDA3ZGFiZDUzZjI5MDZkNTQ3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3Jk
aW5hdGVkQmFja2luZ1N0b3JlLmNwcApAQCAtODAsMTUgKzgwLDE1IEBAIHZvaWQgQ29vcmRpbmF0
ZWRCYWNraW5nU3RvcmU6OnVwZGF0ZVRpbGUoaW50IGlkLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VS
ZWN0LCBjb25zCiB7CiAgICAgSGFzaE1hcDxpbnQsIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGls
ZT46Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5maW5kKGlkKTsKICAgICBBU1NFUlQoaXQgIT0gbV90
aWxlcy5lbmQoKSk7Ci0gICAgaXQtPnNlY29uZC5pbmNyZW1lbnRSZXBhaW50Q291bnQoKTsKLSAg
ICBpdC0+c2Vjb25kLnNldEJhY2tCdWZmZXIodGFyZ2V0UmVjdCwgc291cmNlUmVjdCwgYmFja0J1
ZmZlciwgb2Zmc2V0KTsKKyAgICBpdC0+dmFsdWUuaW5jcmVtZW50UmVwYWludENvdW50KCk7Cisg
ICAgaXQtPnZhbHVlLnNldEJhY2tCdWZmZXIodGFyZ2V0UmVjdCwgc291cmNlUmVjdCwgYmFja0J1
ZmZlciwgb2Zmc2V0KTsKIH0KIAogUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBDb29yZGluYXRl
ZEJhY2tpbmdTdG9yZTo6dGV4dHVyZSgpIGNvbnN0CiB7CiAgICAgSGFzaE1hcDxpbnQsIENvb3Jk
aW5hdGVkQmFja2luZ1N0b3JlVGlsZT46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fdGlsZXMuZW5k
KCk7CiAgICAgZm9yIChIYXNoTWFwPGludCwgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlPjo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewot
ICAgICAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gdGV4dHVyZSA9IGl0LT5zZWNvbmQudGV4dHVy
ZSgpOworICAgICAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gdGV4dHVyZSA9IGl0LT52YWx1ZS50
ZXh0dXJlKCk7CiAgICAgICAgIGlmICh0ZXh0dXJlKQogICAgICAgICAgICAgcmV0dXJuIHRleHR1
cmU7CiAgICAgfQpAQCAtMTEyLDcgKzExMiw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRCYWNraW5nU3Rv
cmU6OnBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsCiAg
ICAgSGFzaE1hcDxpbnQsIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZT46Oml0ZXJhdG9yIGVu
ZCA9IG1fdGlsZXMuZW5kKCk7CiAgICAgRmxvYXRSZWN0IGNvdmVyZWRSZWN0OwogICAgIGZvciAo
SGFzaE1hcDxpbnQsIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZT46Oml0ZXJhdG9yIGl0ID0g
bV90aWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgQ29vcmRpbmF0ZWRC
YWNraW5nU3RvcmVUaWxlJiB0aWxlID0gaXQtPnNlY29uZDsKKyAgICAgICAgQ29vcmRpbmF0ZWRC
YWNraW5nU3RvcmVUaWxlJiB0aWxlID0gaXQtPnZhbHVlOwogICAgICAgICBpZiAoIXRpbGUudGV4
dHVyZSgpKQogICAgICAgICAgICAgY29udGludWU7CiAKQEAgLTE1Niw3ICsxNTYsNyBAQCB2b2lk
IENvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjpjb21taXRUaWxlT3BlcmF0aW9ucyhUZXh0dXJlTWFw
cGVyKiB0ZXh0dXJlTWFwcGVyKQogCiAgICAgSGFzaE1hcDxpbnQsIENvb3JkaW5hdGVkQmFja2lu
Z1N0b3JlVGlsZT46Oml0ZXJhdG9yIHRpbGVzRW5kID0gbV90aWxlcy5lbmQoKTsKICAgICBmb3Ig
KEhhc2hNYXA8aW50LCBDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGU+OjppdGVyYXRvciBpdCA9
IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0gdGlsZXNFbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNv
bmQuc3dhcEJ1ZmZlcnModGV4dHVyZU1hcHBlcik7CisgICAgICAgIGl0LT52YWx1ZS5zd2FwQnVm
ZmVycyh0ZXh0dXJlTWFwcGVyKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRy
ZWVDb29yZGluYXRvclByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGlu
YXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwCmluZGV4IDZiMGRlN2Yy
NTRiMTgwM2QwMzY5YTZjZjRmODgzOTg5YjgzODkxYzAuLmZjYzFmNjc1NjViNjhhOGEwNzg4YTAx
YTRkMzhhOTg3OWY3NjQxOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9D
b29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3Jk
aW5hdG9yUHJveHkuY3BwCkBAIC03Myw3ICs3Myw3IEBAIHZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0
b3JQcm94eTo6dXBkYXRlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlELCBjb25z
CiAgICAgICAgICAgICBzdXJmYWNlID0gU2hhcmVhYmxlU3VyZmFjZTo6Y3JlYXRlKHVwZGF0ZUlu
Zm8uc3VyZmFjZUhhbmRsZSk7CiAgICAgICAgICAgICBtX3N1cmZhY2VzLmFkZCh0b2tlbiwgc3Vy
ZmFjZSk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgc3VyZmFjZSA9IGl0LT5zZWNvbmQ7
CisgICAgICAgICAgICBzdXJmYWNlID0gaXQtPnZhbHVlOwogICAgIH0gZWxzZQogICAgICAgICBz
dXJmYWNlID0gU2hhcmVhYmxlU3VyZmFjZTo6Y3JlYXRlKHVwZGF0ZUluZm8uc3VyZmFjZUhhbmRs
ZSk7CiAjZWxzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuY3BwCmluZGV4IDQ4MWI5
Zjc0Yjg5ODYxMTk0NmNiNjg3NGRkYmFlMjk1MjIwNzlkYmIuLjVlMGNlMmY4ZDE1MTM1ODY2YjJm
Y2Q3YmRmOWU0YTdjNzhlODVmMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVSZW5kZXJlci5j
cHAKQEAgLTE4Myw3ICsxODMsNyBAQCB2b2lkIExheWVyVHJlZVJlbmRlcmVyOjphZGp1c3RQb3Np
dGlvbkZvckZpeGVkTGF5ZXJzKCkKIAogICAgIExheWVyTWFwOjppdGVyYXRvciBlbmQgPSBtX2Zp
eGVkTGF5ZXJzLmVuZCgpOwogICAgIGZvciAoTGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9maXhl
ZExheWVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHRvVGV4dHVyZU1hcHBl
ckxheWVyKGl0LT5zZWNvbmQpLT5zZXRTY3JvbGxQb3NpdGlvbkRlbHRhSWZOZWVkZWQoZGVsdGEp
OworICAgICAgICB0b1RleHR1cmVNYXBwZXJMYXllcihpdC0+dmFsdWUpLT5zZXRTY3JvbGxQb3Np
dGlvbkRlbHRhSWZOZWVkZWQoZGVsdGEpOwogfQogCiB2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpk
aWRDaGFuZ2VTY3JvbGxQb3NpdGlvbihjb25zdCBJbnRQb2ludCYgcG9zaXRpb24pCkBAIC0yMDYs
NyArMjA2LDcgQEAgdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6c3luY0NhbnZhcyhXZWJMYXllcklE
IGlkLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBjYW52YXMKICAgICAgICAgY2FudmFzQmFja2lu
Z1N0b3JlID0gVGV4dHVyZU1hcHBlclN1cmZhY2VCYWNraW5nU3RvcmU6OmNyZWF0ZSgpOwogICAg
ICAgICBtX3N1cmZhY2VCYWNraW5nU3RvcmVzLnNldChpZCwgY2FudmFzQmFja2luZ1N0b3JlKTsK
ICAgICB9IGVsc2UKLSAgICAgICAgY2FudmFzQmFja2luZ1N0b3JlID0gaXQtPnNlY29uZDsKKyAg
ICAgICAgY2FudmFzQmFja2luZ1N0b3JlID0gaXQtPnZhbHVlOwogCiAgICAgY2FudmFzQmFja2lu
Z1N0b3JlLT5zZXRHcmFwaGljc1N1cmZhY2UoZ3JhcGhpY3NTdXJmYWNlVG9rZW4sIGNhbnZhc1Np
emUsIGZyb250QnVmZmVyKTsKICAgICBsYXllci0+c2V0Q29udGVudHNUb01lZGlhKGNhbnZhc0Jh
Y2tpbmdTdG9yZS5nZXQoKSk7CkBAIC0yMTcsNyArMjE3LDcgQEAgdm9pZCBMYXllclRyZWVSZW5k
ZXJlcjo6c2V0TGF5ZXJDaGlsZHJlbihXZWJMYXllcklEIGlkLCBjb25zdCBWZWN0b3I8V2ViTGF5
ZXJJRD4KIHsKICAgICBlbnN1cmVMYXllcihpZCk7CiAgICAgTGF5ZXJNYXA6Oml0ZXJhdG9yIGl0
ID0gbV9sYXllcnMuZmluZChpZCk7Ci0gICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBpdC0+c2Vj
b25kOworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gaXQtPnZhbHVlOwogICAgIFZlY3RvcjxH
cmFwaGljc0xheWVyKj4gY2hpbGRyZW47CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNo
aWxkSURzLnNpemUoKTsgKytpKSB7CkBAIC0yMzksNyArMjM5LDcgQEAgdm9pZCBMYXllclRyZWVS
ZW5kZXJlcjo6c2V0TGF5ZXJGaWx0ZXJzKFdlYkxheWVySUQgaWQsIGNvbnN0IEZpbHRlck9wZXJh
dGlvbnMmIGYKICAgICBMYXllck1hcDo6aXRlcmF0b3IgaXQgPSBtX2xheWVycy5maW5kKGlkKTsK
ICAgICBBU1NFUlQoaXQgIT0gbV9sYXllcnMuZW5kKCkpOwogCi0gICAgR3JhcGhpY3NMYXllciog
bGF5ZXIgPSBpdC0+c2Vjb25kOworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gaXQtPnZhbHVl
OwogICAgIGxheWVyLT5zZXRGaWx0ZXJzKGZpbHRlcnMpOwogfQogI2VuZGlmCkBAIC0yNTAsNyAr
MjUwLDcgQEAgdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6c2V0TGF5ZXJTdGF0ZShXZWJMYXllcklE
IGlkLCBjb25zdCBXZWJMYXllckluZm8mIGxheWVySW4KICAgICBMYXllck1hcDo6aXRlcmF0b3Ig
aXQgPSBtX2xheWVycy5maW5kKGlkKTsKICAgICBBU1NFUlQoaXQgIT0gbV9sYXllcnMuZW5kKCkp
OwogCi0gICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBpdC0+c2Vjb25kOworICAgIEdyYXBoaWNz
TGF5ZXIqIGxheWVyID0gaXQtPnZhbHVlOwogCiAgICAgbGF5ZXItPnNldFJlcGxpY2F0ZWRCeUxh
eWVyKGxheWVyQnlJRChsYXllckluZm8ucmVwbGljYSkpOwogICAgIGxheWVyLT5zZXRNYXNrTGF5
ZXIobGF5ZXJCeUlEKGxheWVySW5mby5tYXNrKSk7CkBAIC0zNzcsNyArMzc3LDcgQEAgdm9pZCBM
YXllclRyZWVSZW5kZXJlcjo6YXNzaWduSW1hZ2VUb0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVy
LCBpbnQ2NF90IGltYWdlSUQKIAogICAgIEhhc2hNYXA8aW50NjRfdCwgUmVmUHRyPFRleHR1cmVN
YXBwZXJCYWNraW5nU3RvcmU+ID46Oml0ZXJhdG9yIGl0ID0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJ
bWFnZXMuZmluZChpbWFnZUlEKTsKICAgICBBU1NFUlQoaXQgIT0gbV9kaXJlY3RseUNvbXBvc2l0
ZWRJbWFnZXMuZW5kKCkpOwotICAgIGxheWVyLT5zZXRDb250ZW50c1RvTWVkaWEoaXQtPnNlY29u
ZC5nZXQoKSk7CisgICAgbGF5ZXItPnNldENvbnRlbnRzVG9NZWRpYShpdC0+dmFsdWUuZ2V0KCkp
OwogfQogCiB2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpjb21taXRUaWxlT3BlcmF0aW9ucygpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvR2VvbG9jYXRpb25QZXJtaXNzaW9u
UmVxdWVzdE1hbmFnZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvR2VvbG9j
YXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5jcHAKaW5kZXggNzFiZWFmNWE1YzMx
ZDQ1NWNhOGQyYjFhMjg4MWNhMmE3MjcxNDdiMi4uMGQ0MTYzNTU0NjVmZjkwZGE2YmNmMDhlYzM1
Yjg0YzE3MWE1Mzk5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0dlb2xv
Y2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9HZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmNw
cApAQCAtNDIsNyArNDIsNyBAQCB2b2lkIEdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5h
Z2VyUHJveHk6OmludmFsaWRhdGVSZXF1ZXN0cygpCiAgICAgUGVuZGluZ1JlcXVlc3RNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbV9wZW5kaW5nUmVxdWVzdHMuYmVnaW4oKTsKICAgICBQZW5kaW5n
UmVxdWVzdE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wZW5kaW5nUmVxdWVzdHMuZW5kKCk7
CiAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+aW52YWxp
ZGF0ZSgpOworICAgICAgICBpdC0+dmFsdWUtPmludmFsaWRhdGUoKTsKIAogICAgIG1fcGVuZGlu
Z1JlcXVlc3RzLmNsZWFyKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvSW5zcGVjdG9yU2VydmVyL1dlYkluc3BlY3RvclNlcnZlci5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL1dlYkluc3BlY3RvclNlcnZlci5jcHAKaW5kZXgg
ZWNiMTcxYmI0NzJiNmJhZWYzZWZjMjkyN2Y3MThhNjFhZjQ0Y2UwYy4uM2E5ZTIzZWVkZjk3YjY0
ZGI4MTZlM2FiYmRiYzI5ZDZiYjg3ZjJiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0luc3BlY3RvclNlcnZlci9XZWJJbnNwZWN0b3JTZXJ2ZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvV2ViSW5zcGVjdG9yU2VydmVyLmNw
cApAQCAtNjcsNyArNjcsNyBAQCBXZWJJbnNwZWN0b3JTZXJ2ZXI6On5XZWJJbnNwZWN0b3JTZXJ2
ZXIoKQogICAgIC8vIENsb3NlIGFueSByZW1haW5pbmcgb3BlbiBjb25uZWN0aW9ucy4KICAgICBI
YXNoTWFwPHVuc2lnbmVkLCBXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uKj46Oml0ZXJhdG9yIGVu
ZCA9IG1fY29ubmVjdGlvbk1hcC5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8dW5zaWduZWQsIFdl
YlNvY2tldFNlcnZlckNvbm5lY3Rpb24qPjo6aXRlcmF0b3IgaXQgPSBtX2Nvbm5lY3Rpb25NYXAu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFdlYlNvY2tldFNlcnZlckNvbm5l
Y3Rpb24qIGNvbm5lY3Rpb24gPSBpdC0+c2Vjb25kOworICAgICAgICBXZWJTb2NrZXRTZXJ2ZXJD
b25uZWN0aW9uKiBjb25uZWN0aW9uID0gaXQtPnZhbHVlOwogICAgICAgICBXZWJJbnNwZWN0b3JQ
cm94eSogY2xpZW50ID0gbV9jbGllbnRNYXAuZ2V0KGNvbm5lY3Rpb24tPmlkZW50aWZpZXIoKSk7
CiAgICAgICAgIGNsb3NlQ29ubmVjdGlvbihjbGllbnQsIGNvbm5lY3Rpb24pOwogICAgIH0KQEAg
LTc4LDcgKzc4LDcgQEAgaW50IFdlYkluc3BlY3RvclNlcnZlcjo6cmVnaXN0ZXJQYWdlKFdlYklu
c3BlY3RvclByb3h5KiBjbGllbnQpCiAjaWZuZGVmIEFTU0VSVF9ESVNBQkxFRAogICAgIENsaWVu
dE1hcDo6aXRlcmF0b3IgZW5kID0gbV9jbGllbnRNYXAuZW5kKCk7CiAgICAgZm9yIChDbGllbnRN
YXA6Oml0ZXJhdG9yIGl0ID0gbV9jbGllbnRNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQot
ICAgICAgICBBU1NFUlQoaXQtPnNlY29uZCAhPSBjbGllbnQpOworICAgICAgICBBU1NFUlQoaXQt
PnZhbHVlICE9IGNsaWVudCk7CiAjZW5kaWYKIAogICAgIGludCBwYWdlSWQgPSBtX25leHRBdmFp
bGFibGVQYWdlSWQrKzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNw
ZWN0b3JTZXJ2ZXIvV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL1dlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24uY3Bw
CmluZGV4IDU3MjA2ZWI3YmI1MmE4ZDhhODQ4ZGY1OTY3YTEwYzRiNzBlMDc3YTUuLmJlZGE1M2Ri
N2M0YTY1MzY2NThmYmRiZTg5YWUwOGJjZWNlNTAwZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbi5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9XZWJTb2Nr
ZXRTZXJ2ZXJDb25uZWN0aW9uLmNwcApAQCAtMTA2LDkgKzEwNiw5IEBAIHZvaWQgV2ViU29ja2V0
U2VydmVyQ29ubmVjdGlvbjo6c2VuZEhUVFBSZXNwb25zZUhlYWRlcihpbnQgc3RhdHVzQ29kZSwg
Y29uc3QgU3RyCiAgICAgYnVpbGRlci5hcHBlbmQoIlxyXG4iKTsKICAgICBIVFRQSGVhZGVyTWFw
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBoZWFkZXJGaWVsZHMuZW5kKCk7CiAgICAgZm9yIChIVFRQ
SGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGhlYWRlckZpZWxkcy5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAg
ICAgYnVpbGRlci5hcHBlbmQoaXQtPmtleSk7CiAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCI6ICIp
OwotICAgICAgICBidWlsZGVyLmFwcGVuZChpdC0+c2Vjb25kICsgIlxyXG4iKTsKKyAgICAgICAg
YnVpbGRlci5hcHBlbmQoaXQtPnZhbHVlICsgIlxyXG4iKTsKICAgICB9CiAgICAgYnVpbGRlci5h
cHBlbmQoIlxyXG4iKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0lu
c3BlY3RvclNlcnZlci9xdC9XZWJJbnNwZWN0b3JTZXJ2ZXJRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL3F0L1dlYkluc3BlY3RvclNlcnZlclF0LmNwcApp
bmRleCA4ZGUwZjkzMmRiMjYwM2FlODk4OGRlYmIzMDI3MTI2MGMwYzZhYzU2Li5hOTNlYTkxNjJi
YzljYWY0MTAxZmUzM2QxMWU2MTBiMGMyZDVlZjg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL3F0L1dlYkluc3BlY3RvclNlcnZlclF0LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL3F0L1dlYkluc3Bl
Y3RvclNlcnZlclF0LmNwcApAQCAtODMsMTYgKzgzLDE2IEBAIHZvaWQgV2ViSW5zcGVjdG9yU2Vy
dmVyOjpidWlsZFBhZ2VMaXN0KFZlY3RvcjxjaGFyPiYgZGF0YSwgU3RyaW5nJiBjb250ZW50VHlw
ZSkKICAgICBidWlsZGVyLmFwcGVuZCgiWyAiKTsKICAgICBDbGllbnRNYXA6Oml0ZXJhdG9yIGVu
ZCA9IG1fY2xpZW50TWFwLmVuZCgpOwogICAgIGZvciAoQ2xpZW50TWFwOjppdGVyYXRvciBpdCA9
IG1fY2xpZW50TWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBXZWJQYWdl
UHJveHkqIHdlYlBhZ2UgPSBpdC0+c2Vjb25kLT5wYWdlKCk7CisgICAgICAgIFdlYlBhZ2VQcm94
eSogd2ViUGFnZSA9IGl0LT52YWx1ZS0+cGFnZSgpOwogICAgICAgICBpZiAoaXQgIT0gbV9jbGll
bnRNYXAuYmVnaW4oKSkKICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIsICIpOwotICAgICAg
ICBidWlsZGVyLmFwcGVuZCgieyBcImlkXCI6ICIgKyBTdHJpbmc6Om51bWJlcihpdC0+Zmlyc3Qp
KTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoInsgXCJpZFwiOiAiICsgU3RyaW5nOjpudW1iZXIo
aXQtPmtleSkpOwogICAgICAgICBidWlsZGVyLmFwcGVuZCgiLCBcInRpdGxlXCI6IFwiIik7CiAg
ICAgICAgIGJ1aWxkZXIuYXBwZW5kKHdlYlBhZ2UtPnBhZ2VUaXRsZSgpKTsKICAgICAgICAgYnVp
bGRlci5hcHBlbmQoIlwiLCBcInVybFwiOiBcIiIpOwogICAgICAgICBidWlsZGVyLmFwcGVuZCh3
ZWJQYWdlLT5hY3RpdmVVUkwoKSk7CiAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCJcIiwgXCJpbnNw
ZWN0b3JVcmxcIjogXCIiKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQocmVtb3RlSW5zcGVjdG9y
UGFnZVBhdGgoKSArIFN0cmluZzo6bnVtYmVyKGl0LT5maXJzdCkpOworICAgICAgICBidWlsZGVy
LmFwcGVuZChyZW1vdGVJbnNwZWN0b3JQYWdlUGF0aCgpICsgU3RyaW5nOjpudW1iZXIoaXQtPmtl
eSkpOwogICAgICAgICBidWlsZGVyLmFwcGVuZCgiXCIgfSIpOwogICAgIH0KICAgICBidWlsZGVy
LmFwcGVuZCgiIF0iKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Ob3Rp
ZmljYXRpb25zL05vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Ob3RpZmljYXRpb25zL05vdGlmaWNhdGlvblBlcm1p
c3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcAppbmRleCAwNzkyMjk4NWU0NTY1ZjNjNzNjYWRj
M2EwY2Y0NTUyMTdjNjE5OTY5Li40YTBjNDc1MjkzN2I4NzJkNWRlMjY5YzkxNjk0ZTIyMThkMzIw
ZTFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTm90aWZpY2F0aW9ucy9O
b3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL05vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uUGVybWlzc2lvblJl
cXVlc3RNYW5hZ2VyUHJveHkuY3BwCkBAIC00Myw3ICs0Myw3IEBAIHZvaWQgTm90aWZpY2F0aW9u
UGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHk6OmludmFsaWRhdGVSZXF1ZXN0cygpCiAgICAg
UGVuZGluZ1JlcXVlc3RNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wZW5kaW5nUmVxdWVzdHMu
YmVnaW4oKTsKICAgICBQZW5kaW5nUmVxdWVzdE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9w
ZW5kaW5nUmVxdWVzdHMuZW5kKCk7CiAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAg
ICAgaXQtPnNlY29uZC0+aW52YWxpZGF0ZSgpOworICAgICAgICBpdC0+dmFsdWUtPmludmFsaWRh
dGUoKTsKICAgICAKICAgICBtX3BlbmRpbmdSZXF1ZXN0cy5jbGVhcigpOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc1Byb3h5LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NQcm94eS5j
cHAKaW5kZXggMTJhYmY2ZGMyZTRmMmEwY2ExNjJiNGYxOWIzMmVhMDU2ZmFlODIyZi4uNDlkZGFj
OGU1MTFmNjhiOTliZWI4NDA5NmIzNDQ3Y2IzNzVlOWY1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc1Byb3h5LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzUHJveHkuY3BwCkBAIC0x
NDksMTAgKzE0OSwxMCBAQCB2b2lkIFBsdWdpblByb2Nlc3NQcm94eTo6cGx1Z2luUHJvY2Vzc0Ny
YXNoZWRPckZhaWxlZFRvTGF1bmNoKCkKICAgICB9CiAKICAgICB3aGlsZSAoIW1fcGVuZGluZ0dl
dFNpdGVzUmVwbGllcy5pc0VtcHR5KCkpCi0gICAgICAgIGRpZEdldFNpdGVzV2l0aERhdGEoVmVj
dG9yPFN0cmluZz4oKSwgbV9wZW5kaW5nR2V0U2l0ZXNSZXBsaWVzLmJlZ2luKCktPmZpcnN0KTsK
KyAgICAgICAgZGlkR2V0U2l0ZXNXaXRoRGF0YShWZWN0b3I8U3RyaW5nPigpLCBtX3BlbmRpbmdH
ZXRTaXRlc1JlcGxpZXMuYmVnaW4oKS0+a2V5KTsKIAogICAgIHdoaWxlICghbV9wZW5kaW5nQ2xl
YXJTaXRlRGF0YVJlcGxpZXMuaXNFbXB0eSgpKQotICAgICAgICBkaWRDbGVhclNpdGVEYXRhKG1f
cGVuZGluZ0NsZWFyU2l0ZURhdGFSZXBsaWVzLmJlZ2luKCktPmZpcnN0KTsKKyAgICAgICAgZGlk
Q2xlYXJTaXRlRGF0YShtX3BlbmRpbmdDbGVhclNpdGVEYXRhUmVwbGllcy5iZWdpbigpLT5rZXkp
OwogCiAgICAgLy8gVGVsbCB0aGUgcGx1Zy1pbiBwcm9jZXNzIG1hbmFnZXIgdG8gZm9yZ2V0IGFi
b3V0IHRoaXMgcGx1Zy1pbiBwcm9jZXNzIHByb3h5LiBUaGlzIG1heSBjYXVzZSB1cyB0byBiZSBk
ZWxldGVkLgogICAgIG1fcGx1Z2luUHJvY2Vzc01hbmFnZXItPnJlbW92ZVBsdWdpblByb2Nlc3NQ
cm94eSh0aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250
ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmNwcAppbmRleCAx
YjUzYjA0ODYyZjRkODQ1MjcyYTkzZjM4OWJiYzJhZTAzMGVhNmRhLi45NDUxMTkxMzNmY2UyYThh
ZTk5MzI4OGU5NjE4NjkwZmI1ODk2MWRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNv
bnRleHQuY3BwCkBAIC05MDYsNyArOTA2LDcgQEAgc3RhdGljIFBhc3NSZWZQdHI8TXV0YWJsZURp
Y3Rpb25hcnk+IGNyZWF0ZURpY3Rpb25hcnlGcm9tSGFzaE1hcChjb25zdCBIYXNoTWFwPFMKICAg
ICBSZWZQdHI8TXV0YWJsZURpY3Rpb25hcnk+IHJlc3VsdCA9IE11dGFibGVEaWN0aW9uYXJ5Ojpj
cmVhdGUoKTsKICAgICBIYXNoTWFwPFN0cmluZywgdWludDY0X3Q+Ojpjb25zdF9pdGVyYXRvciBl
bmQgPSBtYXAuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPFN0cmluZywgdWludDY0X3Q+Ojpjb25z
dF9pdGVyYXRvciBpdCA9IG1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHJl
c3VsdC0+c2V0KGl0LT5maXJzdCwgUmVmUHRyPFdlYlVJbnQ2ND4oV2ViVUludDY0OjpjcmVhdGUo
aXQtPnNlY29uZCkpLmdldCgpKTsKKyAgICAgICAgcmVzdWx0LT5zZXQoaXQtPmtleSwgUmVmUHRy
PFdlYlVJbnQ2ND4oV2ViVUludDY0OjpjcmVhdGUoaXQtPnZhbHVlKSkuZ2V0KCkpOwogICAgIAog
ICAgIHJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViSWNvbkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJY29u
RGF0YWJhc2UuY3BwCmluZGV4IGMwYzcwNjE3YmUyN2FkNGQyMGM0MjBmMWRlNDM2OTE4M2Q1Mjkz
MjMuLmQyYTEwNmZlMDZlY2MyOTFlNGZkODVlNWU5YzEwZDMyYmU5MjAzMDUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJY29uRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJY29uRGF0YWJhc2UuY3BwCkBAIC0yNjMsMTQgKzI2Mywx
NCBAQCB2b2lkIFdlYkljb25EYXRhYmFzZTo6ZGlkRmluaXNoVVJMSW1wb3J0KCkKICAgICBIYXNo
TWFwPHVpbnQ2NF90LCBTdHJpbmc+OjppdGVyYXRvciBlbmQgPSBtX3BlbmRpbmdMb2FkRGVjaXNp
b25VUkxNYXAuZW5kKCk7CiAgICAgCiAgICAgZm9yICg7IGkgIT0gZW5kOyArK2kpIHsKLSAgICAg
ICAgTE9HKEljb25EYXRhYmFzZSwgIldLMiBVSVByb2Nlc3MgcGVyZm9ybWluZyBkZWxheWVkIGNh
bGxiYWNrIG9uIGNhbGxiYWNrIElEICVpIGZvciBwYWdlIHVybCAlcyIsIChpbnQpaS0+Zmlyc3Qs
IGktPnNlY29uZC5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIEljb25Mb2FkRGVjaXNpb24gZGVj
aXNpb24gPSBtX2ljb25EYXRhYmFzZUltcGwtPnN5bmNocm9ub3VzTG9hZERlY2lzaW9uRm9ySWNv
blVSTChpLT5zZWNvbmQsIDApOworICAgICAgICBMT0coSWNvbkRhdGFiYXNlLCAiV0syIFVJUHJv
Y2VzcyBwZXJmb3JtaW5nIGRlbGF5ZWQgY2FsbGJhY2sgb24gY2FsbGJhY2sgSUQgJWkgZm9yIHBh
Z2UgdXJsICVzIiwgKGludClpLT5rZXksIGktPnZhbHVlLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAg
ICAgSWNvbkxvYWREZWNpc2lvbiBkZWNpc2lvbiA9IG1faWNvbkRhdGFiYXNlSW1wbC0+c3luY2hy
b25vdXNMb2FkRGVjaXNpb25Gb3JJY29uVVJMKGktPnZhbHVlLCAwKTsKIAogICAgICAgICAvLyBE
ZWNpc2lvbnMgc2hvdWxkIG5ldmVyIGJlIHVua25vd24gYWZ0ZXIgdGhlIGluaXRhbCBpbXBvcnQg
aXMgY29tcGxldGUKICAgICAgICAgQVNTRVJUKGRlY2lzaW9uICE9IEljb25Mb2FkVW5rbm93bik7
CiAKICAgICAgICAgLy8gRklYTUUgKE11bHRpLVdlYlByb2Nlc3MpOiBXZSBuZWVkIHRvIGtub3cg
d2hpY2ggY29ubmVjdGlvbiB0byBzZW5kIHRoaXMgbWVzc2FnZSB0by4KLSAgICAgICAgbV93ZWJD
b250ZXh0LT5zZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYkljb25EYXRhYmFzZVByb3h5
OjpSZWNlaXZlZEljb25Mb2FkRGVjaXNpb24oc3RhdGljX2Nhc3Q8aW50PihkZWNpc2lvbiksIGkt
PmZpcnN0KSk7CisgICAgICAgIG1fd2ViQ29udGV4dC0+c2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3Nh
Z2VzOjpXZWJJY29uRGF0YWJhc2VQcm94eTo6UmVjZWl2ZWRJY29uTG9hZERlY2lzaW9uKHN0YXRp
Y19jYXN0PGludD4oZGVjaXNpb24pLCBpLT5rZXkpKTsKICAgICB9CiAgICAgCiAgICAgbV9wZW5k
aW5nTG9hZERlY2lzaW9uVVJMTWFwLmNsZWFyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViSW50ZW50RGF0YS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViSW50ZW50RGF0YS5jcHAKaW5kZXggNjMyYWEzYjc1NTRkYjI0M2JkMzc1ZGQ3OTIxMzk1MzFl
NjlhZTFmZC4uYzZkOGM2NGJhODU5NjI1MWQ1ZDM2Y2ZlOTE5YTI5NjM4MjcxMTk0YyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkludGVudERhdGEuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJbnRlbnREYXRhLmNwcApAQCAtNzgsNyArNzgsNyBA
QCBQYXNzUmVmUHRyPEltbXV0YWJsZURpY3Rpb25hcnk+IFdlYkludGVudERhdGE6OmV4dHJhcygp
IGNvbnN0CiAgICAgSW1tdXRhYmxlRGljdGlvbmFyeTo6TWFwVHlwZSB3a0V4dHJhczsKICAgICBI
YXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9zdG9yZS5leHRy
YXMuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtX3N0b3JlLmV4dHJhcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAg
IHdrRXh0cmFzLnNldChpdC0+Zmlyc3QsIFdlYlN0cmluZzo6Y3JlYXRlKGl0LT5zZWNvbmQpKTsK
KyAgICAgICAgd2tFeHRyYXMuc2V0KGl0LT5rZXksIFdlYlN0cmluZzo6Y3JlYXRlKGl0LT52YWx1
ZSkpOwogCiAgICAgcmV0dXJuIEltbXV0YWJsZURpY3Rpb25hcnk6OmFkb3B0KHdrRXh0cmFzKTsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHku
Y3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAKaW5kZXgg
MjJhMmI3ZjJjN2EyNDFjZWRlOTZiOTc0YmUzNGFiNDQ2MGI3MTdkZC4uYTIwZTQ2N2ZlNzY3ZDY0
NDQ4OTJlYzYxNTIyM2M4ZjYyOGZiYjJhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYlByb2Nlc3NQcm94eS5jcHAKQEAgLTI2Niw5ICsyNjYsOSBAQCBib29sIFdlYlByb2Nlc3NQ
cm94eTo6Y2hlY2tVUkxSZWNlaXZlZEZyb21XZWJQcm9jZXNzKGNvbnN0IEtVUkwmIHVybCkKICAg
ICAvLyBJdGVtcyBpbiBiYWNrL2ZvcndhcmQgbGlzdCBoYXZlIGJlZW4gYWxyZWFkeSBjaGVja2Vk
LgogICAgIC8vIE9uZSBjYXNlIHdoZXJlIHdlIGRvbid0IGhhdmUgc2FuZGJveCBleHRlbnNpb25z
IGZvciBmaWxlIFVSTHMgaW4gYi9mIGxpc3QgaXMgaWYgdGhlIGxpc3QgaGFzIGJlZW4gcmVpbnN0
YXRlZCBhZnRlciBhIGNyYXNoIG9yIGEgYnJvd3NlciByZXN0YXJ0LgogICAgIGZvciAoV2ViQmFj
a0ZvcndhcmRMaXN0SXRlbU1hcDo6aXRlcmF0b3IgaXRlciA9IG1fYmFja0ZvcndhcmRMaXN0SXRl
bU1hcC5iZWdpbigpLCBlbmQgPSBtX2JhY2tGb3J3YXJkTGlzdEl0ZW1NYXAuZW5kKCk7IGl0ZXIg
IT0gZW5kOyArK2l0ZXIpIHsKLSAgICAgICAgaWYgKEtVUkwoS1VSTCgpLCBpdGVyLT5zZWNvbmQt
PnVybCgpKS5maWxlU3lzdGVtUGF0aCgpID09IHBhdGgpCisgICAgICAgIGlmIChLVVJMKEtVUkwo
KSwgaXRlci0+dmFsdWUtPnVybCgpKS5maWxlU3lzdGVtUGF0aCgpID09IHBhdGgpCiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKEtVUkwoS1VSTCgpLCBpdGVyLT5zZWNvbmQt
Pm9yaWdpbmFsVVJMKCkpLmZpbGVTeXN0ZW1QYXRoKCkgPT0gcGF0aCkKKyAgICAgICAgaWYgKEtV
UkwoS1VSTCgpLCBpdGVyLT52YWx1ZS0+b3JpZ2luYWxVUkwoKSkuZmlsZVN5c3RlbVBhdGgoKSA9
PSBwYXRoKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0yOTEsMTUgKzI5
MSwxNSBAQCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6YWRkQmFja0ZvcndhcmRJdGVtKHVpbnQ2NF90
IGl0ZW1JRCwgY29uc3QgU3RyaW5nJiBvcmlnaW5hbAogCiAgICAgV2ViQmFja0ZvcndhcmRMaXN0
SXRlbU1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fYmFja0ZvcndhcmRMaXN0SXRlbU1hcC5hZGQo
aXRlbUlELCAwKTsKICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgcmVzdWx0
Lml0ZXJhdG9yLT5zZWNvbmQgPSBXZWJCYWNrRm9yd2FyZExpc3RJdGVtOjpjcmVhdGUob3JpZ2lu
YWxVUkwsIHVybCwgdGl0bGUsIGJhY2tGb3J3YXJkRGF0YS5kYXRhKCksIGJhY2tGb3J3YXJkRGF0
YS5zaXplKCksIGl0ZW1JRCk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBXZWJC
YWNrRm9yd2FyZExpc3RJdGVtOjpjcmVhdGUob3JpZ2luYWxVUkwsIHVybCwgdGl0bGUsIGJhY2tG
b3J3YXJkRGF0YS5kYXRhKCksIGJhY2tGb3J3YXJkRGF0YS5zaXplKCksIGl0ZW1JRCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKICAgICAvLyBVcGRhdGUgZXhpc3RpbmcgaXRlbS4KLSAgICBy
ZXN1bHQuaXRlcmF0b3ItPnNlY29uZC0+c2V0T3JpZ2luYWxVUkwob3JpZ2luYWxVUkwpOwotICAg
IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLT5zZXRVUkwodXJsKTsKLSAgICByZXN1bHQuaXRlcmF0
b3ItPnNlY29uZC0+c2V0VGl0bGUodGl0bGUpOwotICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25k
LT5zZXRCYWNrRm9yd2FyZERhdGEoYmFja0ZvcndhcmREYXRhLmRhdGEoKSwgYmFja0ZvcndhcmRE
YXRhLnNpemUoKSk7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+c2V0T3JpZ2luYWxVUkwo
b3JpZ2luYWxVUkwpOworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPnNldFVSTCh1cmwpOwor
ICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPnNldFRpdGxlKHRpdGxlKTsKKyAgICByZXN1bHQu
aXRlcmF0b3ItPnZhbHVlLT5zZXRCYWNrRm9yd2FyZERhdGEoYmFja0ZvcndhcmREYXRhLmRhdGEo
KSwgYmFja0ZvcndhcmREYXRhLnNpemUoKSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Byb3h5Ojpz
ZW5kRGlkR2V0UGx1Z2lucyh1aW50NjRfdCByZXF1ZXN0SUQsIFBhc3NPd25QdHI8VmVjdG9yPFBs
dWdpbkluZm8+ID4gcGx1Z2luSW5mb3MpCkBAIC01NzgsNyArNTc4LDcgQEAgc2l6ZV90IFdlYlBy
b2Nlc3NQcm94eTo6ZnJhbWVDb3VudEluUGFnZShXZWJQYWdlUHJveHkqIHBhZ2UpIGNvbnN0CiB7
CiAgICAgc2l6ZV90IHJlc3VsdCA9IDA7CiAgICAgZm9yIChIYXNoTWFwPHVpbnQ2NF90LCBSZWZQ
dHI8V2ViRnJhbWVQcm94eT4gPjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1fZnJhbWVNYXAuYmVn
aW4oKTsgaXRlciAhPSBtX2ZyYW1lTWFwLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgaWYgKGl0
ZXItPnNlY29uZC0+cGFnZSgpID09IHBhZ2UpCisgICAgICAgIGlmIChpdGVyLT52YWx1ZS0+cGFn
ZSgpID09IHBhZ2UpCiAgICAgICAgICAgICArK3Jlc3VsdDsKICAgICB9CiAgICAgcmV0dXJuIHJl
c3VsdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvR2VvbG9jYXRpb24v
R2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9HZW9sb2NhdGlvbi9HZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdl
ci5jcHAKaW5kZXggZDZiZGI4ZTE1MzE0NTBiMTJhYmM4MmQ4NmIyZmMwMTNmMTM1NDNiNy4uZmNh
NzFhMWQwOTVmZWVmYWJhMDVhNmE3MjVmZGI0MzYzNTgxNGI2NiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9HZW9sb2NhdGlvbi9HZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1
ZXN0TWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9HZW9sb2NhdGlv
bi9HZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5jcHAKQEAgLTc0LDcgKzc0LDcg
QEAgdm9pZCBHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlcjo6Y2FuY2VsUmVxdWVz
dEZvckdlb2xvY2F0aW9uKEdlb2xvY2F0aW8KICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9nZW9s
b2NhdGlvblRvSURNYXAucmVtb3ZlKGl0KTsKLSAgICBtX2lkVG9HZW9sb2NhdGlvbk1hcC5yZW1v
dmUoaXQtPnNlY29uZCk7CisgICAgbV9pZFRvR2VvbG9jYXRpb25NYXAucmVtb3ZlKGl0LT52YWx1
ZSk7CiB9CiAKIHZvaWQgR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXI6OmRpZFJl
Y2VpdmVHZW9sb2NhdGlvblBlcm1pc3Npb25EZWNpc2lvbih1aW50NjRfdCBnZW9sb2NhdGlvbklE
LCBib29sIGFsbG93ZWQpCkBAIC04Myw3ICs4Myw3IEBAIHZvaWQgR2VvbG9jYXRpb25QZXJtaXNz
aW9uUmVxdWVzdE1hbmFnZXI6OmRpZFJlY2VpdmVHZW9sb2NhdGlvblBlcm1pc3Npb25EZWNpc2lv
CiAgICAgaWYgKGl0ID09IG1faWRUb0dlb2xvY2F0aW9uTWFwLmVuZCgpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBHZW9sb2NhdGlvbiogZ2VvbG9jYXRpb24gPSBpdC0+c2Vjb25kOworICAgIEdl
b2xvY2F0aW9uKiBnZW9sb2NhdGlvbiA9IGl0LT52YWx1ZTsKICAgICBnZW9sb2NhdGlvbi0+c2V0
SXNBbGxvd2VkKGFsbG93ZWQpOwogCiAgICAgbV9pZFRvR2VvbG9jYXRpb25NYXAucmVtb3ZlKGl0
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
RE9NL0luamVjdGVkQnVuZGxlTm9kZUhhbmRsZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGUuY3BwCmluZGV4
IDBjNDI5NWU2MTJjZGQ3NmYwM2E1MzEzZDQ1ZTZjZWMxZmIxZTg1OTYuLjc3ZTAzMDkzZDVmZDBk
OTY0MjRkMzE1NGY3N2M5NGQ0MTk0YjE2ZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxlTm9kZUhhbmRsZS5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0
ZWRCdW5kbGVOb2RlSGFuZGxlLmNwcApAQCAtNjksMTAgKzY5LDEwIEBAIFBhc3NSZWZQdHI8SW5q
ZWN0ZWRCdW5kbGVOb2RlSGFuZGxlPiBJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU6OmdldE9yQ3Jl
YXRlKE5vZGUqCiAKICAgICBET01IYW5kbGVDYWNoZTo6QWRkUmVzdWx0IHJlc3VsdCA9IGRvbUhh
bmRsZUNhY2hlKCkuYWRkKG5vZGUsIDApOwogICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0g
ICAgICAgIHJldHVybiBQYXNzUmVmUHRyPEluamVjdGVkQnVuZGxlTm9kZUhhbmRsZT4ocmVzdWx0
Lml0ZXJhdG9yLT5zZWNvbmQpOworICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxJbmplY3RlZEJ1
bmRsZU5vZGVIYW5kbGU+KHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwogCiAgICAgUmVmUHRyPElu
amVjdGVkQnVuZGxlTm9kZUhhbmRsZT4gbm9kZUhhbmRsZSA9IEluamVjdGVkQnVuZGxlTm9kZUhh
bmRsZTo6Y3JlYXRlKG5vZGUpOwotICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gbm9kZUhh
bmRsZS5nZXQoKTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gbm9kZUhhbmRsZS5nZXQo
KTsKICAgICByZXR1cm4gbm9kZUhhbmRsZS5yZWxlYXNlKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxl
UmFuZ2VIYW5kbGUuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9ET00vSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5jcHAKaW5kZXggMWI3NGYwMTI0MDA4ZGIz
YzA3ODI4ZWE2ZjZkMmMwNWFjMDU5YzMwNi4uZDYwMDBhYjkxMzMyOWNkNTdkYWIzZTNmZDY0MDE0
Yzc2ZTk1MmRjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVSYW5nZUhh
bmRsZS5jcHAKQEAgLTQ4LDEwICs0OCwxMCBAQCBQYXNzUmVmUHRyPEluamVjdGVkQnVuZGxlUmFu
Z2VIYW5kbGU+IEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OmdldE9yQ3JlYXRlKFJhbgogCiAg
ICAgRE9NSGFuZGxlQ2FjaGU6OkFkZFJlc3VsdCByZXN1bHQgPSBkb21IYW5kbGVDYWNoZSgpLmFk
ZChyYW5nZSwgMCk7CiAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgcmV0dXJu
IFBhc3NSZWZQdHI8SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZT4ocmVzdWx0Lml0ZXJhdG9yLT5z
ZWNvbmQpOworICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxJbmplY3RlZEJ1bmRsZVJhbmdlSGFu
ZGxlPihyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKIAogICAgIFJlZlB0cjxJbmplY3RlZEJ1bmRs
ZVJhbmdlSGFuZGxlPiByYW5nZUhhbmRsZSA9IEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OmNy
ZWF0ZShyYW5nZSk7Ci0gICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSByYW5nZUhhbmRsZS5n
ZXQoKTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gcmFuZ2VIYW5kbGUuZ2V0KCk7CiAg
ICAgcmV0dXJuIHJhbmdlSGFuZGxlLnJlbGVhc2UoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZUludGVudC5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVu
ZGxlSW50ZW50LmNwcAppbmRleCA5MmRlNjFjNmMyYmQ2ZTllNDJjNDc1ZGFhMDdjMDE3NzliMTc1
N2NlLi5kOGFjM2EyNWRmMzViNGEwNWYwMjJjMTBhMzM4NDdmNjZmZjk2ZThjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxl
SW50ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0luamVjdGVkQnVuZGxlSW50ZW50LmNwcApAQCAtNzksNyArNzksNyBAQCBQYXNzUmVmUHRyPElt
bXV0YWJsZURpY3Rpb25hcnk+IEluamVjdGVkQnVuZGxlSW50ZW50OjpleHRyYXMoKSBjb25zdAog
ICAgIEltbXV0YWJsZURpY3Rpb25hcnk6Ok1hcFR5cGUgd2tFeHRyYXM7CiAgICAgSGFzaE1hcDxT
dHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGV4dHJhcy5lbmQoKTsKICAgICBm
b3IgKEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGV4dHJhcy5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHdrRXh0cmFzLnNldChpdC0+Zmlyc3Qs
IFdlYlN0cmluZzo6Y3JlYXRlKGl0LT5zZWNvbmQpKTsKKyAgICAgICAgd2tFeHRyYXMuc2V0KGl0
LT5rZXksIFdlYlN0cmluZzo6Y3JlYXRlKGl0LT52YWx1ZSkpOwogCiAgICAgcmV0dXJuIEltbXV0
YWJsZURpY3Rpb25hcnk6OmFkb3B0KHdrRXh0cmFzKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvTm90aWZpY2F0aW9ucy9XZWJOb3RpZmljYXRpb25NYW5hZ2VyLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTm90aWZpY2F0aW9ucy9XZWJOb3RpZmljYXRp
b25NYW5hZ2VyLmNwcAppbmRleCAyZDY2N2VmNWUxNzJiMWQ4Y2NkODYzZTQxNzFjNmY0YjQzNGQx
ODk3Li4yNTFjNDEyNDU0YzU1MzdlYWQyZWI0ODU1ZTM2YzFlMzg3YmE0YzE1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05vdGlmaWNhdGlvbnMvV2ViTm90aWZpY2F0aW9u
TWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Ob3RpZmljYXRpb25z
L1dlYk5vdGlmaWNhdGlvbk1hbmFnZXIuY3BwCkBAIC05OSw3ICs5OSw3IEBAIE5vdGlmaWNhdGlv
bkNsaWVudDo6UGVybWlzc2lvbiBXZWJOb3RpZmljYXRpb25NYW5hZ2VyOjpwb2xpY3lGb3JPcmln
aW4oV2ViQ29yZTo6CiAgICAgQVNTRVJUKCFvcmlnaW4tPmlzVW5pcXVlKCkpOwogICAgIEhhc2hN
YXA8U3RyaW5nLCBib29sPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Blcm1pc3Npb25zTWFwLmZp
bmQob3JpZ2luLT50b1Jhd1N0cmluZygpKTsKICAgICBpZiAoaXQgIT0gbV9wZXJtaXNzaW9uc01h
cC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQgPyBOb3RpZmljYXRpb25DbGllbnQ6
OlBlcm1pc3Npb25BbGxvd2VkIDogTm90aWZpY2F0aW9uQ2xpZW50OjpQZXJtaXNzaW9uRGVuaWVk
OworICAgICAgICByZXR1cm4gaXQtPnZhbHVlID8gTm90aWZpY2F0aW9uQ2xpZW50OjpQZXJtaXNz
aW9uQWxsb3dlZCA6IE5vdGlmaWNhdGlvbkNsaWVudDo6UGVybWlzc2lvbkRlbmllZDsKICNlbmRp
ZgogICAgIAogICAgIHJldHVybiBOb3RpZmljYXRpb25DbGllbnQ6OlBlcm1pc3Npb25Ob3RBbGxv
d2VkOwpAQCAtMTE2LDcgKzExNiw3IEBAIGJvb2wgV2ViTm90aWZpY2F0aW9uTWFuYWdlcjo6c2hv
dyhOb3RpZmljYXRpb24qIG5vdGlmaWNhdGlvbiwgV2ViUGFnZSogcGFnZSkKICAgICBtX25vdGlm
aWNhdGlvbklETWFwLnNldChub3RpZmljYXRpb25JRCwgbm90aWZpY2F0aW9uKTsKICAgICAKICAg
ICBOb3RpZmljYXRpb25Db250ZXh0TWFwOjppdGVyYXRvciBpdCA9IG1fbm90aWZpY2F0aW9uQ29u
dGV4dE1hcC5hZGQobm90aWZpY2F0aW9uLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIFZlY3Rv
cjx1aW50NjRfdD4oKSkuaXRlcmF0b3I7Ci0gICAgaXQtPnNlY29uZC5hcHBlbmQobm90aWZpY2F0
aW9uSUQpOworICAgIGl0LT52YWx1ZS5hcHBlbmQobm90aWZpY2F0aW9uSUQpOwogCiAjaWYgRU5B
QkxFKE5PVElGSUNBVElPTlMpCiAgICAgbV9wcm9jZXNzLT5jb25uZWN0aW9uKCktPnNlbmQoTWVz
c2FnZXM6OldlYlBhZ2VQcm94eTo6U2hvd05vdGlmaWNhdGlvbihub3RpZmljYXRpb24tPnRpdGxl
KCksIG5vdGlmaWNhdGlvbi0+Ym9keSgpLCBub3RpZmljYXRpb24tPmljb25VUkwoKS5zdHJpbmco
KSwgbm90aWZpY2F0aW9uLT50YWcoKSwgbm90aWZpY2F0aW9uLT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCktPnNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCksIG5vdGlmaWNhdGlvbklEKSwgcGFn
ZS0+cGFnZUlEKCkpOwpAQCAtMTUwLDcgKzE1MCw3IEBAIHZvaWQgV2ViTm90aWZpY2F0aW9uTWFu
YWdlcjo6Y2xlYXJOb3RpZmljYXRpb25zKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
CiAgICAgaWYgKGl0ID09IG1fbm90aWZpY2F0aW9uQ29udGV4dE1hcC5lbmQoKSkKICAgICAgICAg
cmV0dXJuOwogICAgIAotICAgIFZlY3Rvcjx1aW50NjRfdD4mIG5vdGlmaWNhdGlvbklEcyA9IGl0
LT5zZWNvbmQ7CisgICAgVmVjdG9yPHVpbnQ2NF90PiYgbm90aWZpY2F0aW9uSURzID0gaXQtPnZh
bHVlOwogICAgIG1fcHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJOb3Rp
ZmljYXRpb25NYW5hZ2VyUHJveHk6OkNsZWFyTm90aWZpY2F0aW9ucyhub3RpZmljYXRpb25JRHMp
LCBwYWdlLT5wYWdlSUQoKSk7CiAgICAgc2l6ZV90IGNvdW50ID0gbm90aWZpY2F0aW9uSURzLnNp
emUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKQEAgLTIzMywx
MCArMjMzLDEwIEBAIHZvaWQgV2ViTm90aWZpY2F0aW9uTWFuYWdlcjo6cmVtb3ZlTm90aWZpY2F0
aW9uRnJvbUNvbnRleHRNYXAodWludDY0X3Qgbm90aWZpY2F0CiAgICAgLy8gVGhpcyBpcyBhIGhl
bHBlciBmdW5jdGlvbiBmb3IgbWFuYWdpbmcgdGhlIGhhc2ggbWFwcy4KICAgICBOb3RpZmljYXRp
b25Db250ZXh0TWFwOjppdGVyYXRvciBpdCA9IG1fbm90aWZpY2F0aW9uQ29udGV4dE1hcC5maW5k
KG5vdGlmaWNhdGlvbi0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKICAgICBBU1NFUlQoaXQg
IT0gbV9ub3RpZmljYXRpb25Db250ZXh0TWFwLmVuZCgpKTsKLSAgICBzaXplX3QgaW5kZXggPSBp
dC0+c2Vjb25kLmZpbmQobm90aWZpY2F0aW9uSUQpOworICAgIHNpemVfdCBpbmRleCA9IGl0LT52
YWx1ZS5maW5kKG5vdGlmaWNhdGlvbklEKTsKICAgICBBU1NFUlQoaW5kZXggIT0gbm90Rm91bmQp
OwotICAgIGl0LT5zZWNvbmQucmVtb3ZlKGluZGV4KTsKLSAgICBpZiAoaXQtPnNlY29uZC5pc0Vt
cHR5KCkpCisgICAgaXQtPnZhbHVlLnJlbW92ZShpbmRleCk7CisgICAgaWYgKGl0LT52YWx1ZS5p
c0VtcHR5KCkpCiAgICAgICAgIG1fbm90aWZpY2F0aW9uQ29udGV4dE1hcC5yZW1vdmUoaXQpOwog
fQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMv
TmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0TWFwLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3BwCmluZGV4IDM1ODUzM2Zl
YmZjODYyN2I5YzNhY2FmNjYwNjgxNGViOGRkMjcxYWEuLjBjZTcwM2MwYWQ4ODAzY2EyOGRkNTQz
MThlNzE4OTQzNjM2ZDY5NjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
UGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3BwCkBA
IC0yMTIsNyArMjEyLDcgQEAgdm9pZCBOUFJ1bnRpbWVPYmplY3RNYXA6OmludmFsaWRhdGUoKQog
ICAgIFZlY3RvcjxOUE9iamVjdCo+IG9iamVjdHM7CiAKICAgICBmb3IgKEhhc2hNYXA8TlBPYmpl
Y3QqLCBKU0M6OldlYWs8SlNOUE9iamVjdD4gPjo6aXRlcmF0b3IgcHRyID0gbV9qc05QT2JqZWN0
cy5iZWdpbigpLCBlbmQgPSBtX2pzTlBPYmplY3RzLmVuZCgpOyBwdHIgIT0gZW5kOyArK3B0cikg
ewotICAgICAgICBKU05QT2JqZWN0KiBqc05QT2JqZWN0ID0gcHRyLT5zZWNvbmQuZ2V0KCk7Cisg
ICAgICAgIEpTTlBPYmplY3QqIGpzTlBPYmplY3QgPSBwdHItPnZhbHVlLmdldCgpOwogICAgICAg
ICBpZiAoIWpzTlBPYmplY3QpIC8vIFNraXAgem9tYmllcy4KICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICBvYmplY3RzLmFwcGVuZChqc05QT2JqZWN0LT5sZWFrTlBPYmplY3QoKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0
c2NhcGVQbHVnaW4uY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNj
YXBlL05ldHNjYXBlUGx1Z2luLmNwcAppbmRleCBiMjA3NDMyMTNiYzVlYTQxM2MyZjA5NjNkMzlj
NmEyMjMzNGZkMTRjLi5mMWU3OWU0NWQ4MTZkMjcwY2I0NWMxMDMwODM1ZjQ2ZjkzMjNhMDU2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0
c2NhcGVQbHVnaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9O
ZXRzY2FwZS9OZXRzY2FwZVBsdWdpbi5jcHAKQEAgLTE5OSw4ICsxOTksOCBAQCBOUEVycm9yIE5l
dHNjYXBlUGx1Z2luOjpkZXN0cm95U3RyZWFtKE5QU3RyZWFtKiBzdHJlYW0sIE5QUmVhc29uIHJl
YXNvbikKICAgICBOZXRzY2FwZVBsdWdpblN0cmVhbSogcGx1Z2luU3RyZWFtID0gMDsKIAogICAg
IGZvciAoU3RyZWFtc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3N0cmVhbXMuYmVnaW4oKSwg
ZW5kID0gbV9zdHJlYW1zLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0
LT5zZWNvbmQtPm5wU3RyZWFtKCkgPT0gc3RyZWFtKSB7Ci0gICAgICAgICAgICBwbHVnaW5TdHJl
YW0gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICBpZiAoaXQtPnZhbHVlLT5ucFN0cmVhbSgp
ID09IHN0cmVhbSkgeworICAgICAgICAgICAgcGx1Z2luU3RyZWFtID0gaXQtPnZhbHVlLmdldCgp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CkBAIC0zODcsNyArMzg3LDcg
QEAgdm9pZCBOZXRzY2FwZVBsdWdpbjo6dW5zY2hlZHVsZVRpbWVyKHVuc2lnbmVkIHRpbWVySUQp
CiAgICAgaWYgKGl0ID09IG1fdGltZXJzLmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBP
d25QdHI8VGltZXI+IHRpbWVyID0gYWRvcHRQdHIoaXQtPnNlY29uZCk7CisgICAgT3duUHRyPFRp
bWVyPiB0aW1lciA9IGFkb3B0UHRyKGl0LT52YWx1ZSk7CiAgICAgbV90aW1lcnMucmVtb3ZlKGl0
KTsKIAogICAgIHRpbWVyLT5zdG9wKCk7CkBAIC03NjIsOCArNzYyLDggQEAgdm9pZCBOZXRzY2Fw
ZVBsdWdpbjo6ZnJhbWVEaWRGaW5pc2hMb2FkaW5nKHVpbnQ2NF90IHJlcXVlc3RJRCkKICAgICBp
ZiAoaXQgPT0gbV9wZW5kaW5nVVJMTm90aWZpY2F0aW9ucy5lbmQoKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgU3RyaW5nIHVybCA9IGl0LT5zZWNvbmQuZmlyc3Q7Ci0gICAgdm9pZCogbm90aWZp
Y2F0aW9uRGF0YSA9IGl0LT5zZWNvbmQuc2Vjb25kOworICAgIFN0cmluZyB1cmwgPSBpdC0+dmFs
dWUuZmlyc3Q7CisgICAgdm9pZCogbm90aWZpY2F0aW9uRGF0YSA9IGl0LT52YWx1ZS5zZWNvbmQ7
CiAKICAgICBtX3BlbmRpbmdVUkxOb3RpZmljYXRpb25zLnJlbW92ZShpdCk7CiAgICAgCkBAIC03
NzgsOCArNzc4LDggQEAgdm9pZCBOZXRzY2FwZVBsdWdpbjo6ZnJhbWVEaWRGYWlsKHVpbnQ2NF90
IHJlcXVlc3RJRCwgYm9vbCB3YXNDYW5jZWxsZWQpCiAgICAgaWYgKGl0ID09IG1fcGVuZGluZ1VS
TE5vdGlmaWNhdGlvbnMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFN0cmluZyB1cmwg
PSBpdC0+c2Vjb25kLmZpcnN0OwotICAgIHZvaWQqIG5vdGlmaWNhdGlvbkRhdGEgPSBpdC0+c2Vj
b25kLnNlY29uZDsKKyAgICBTdHJpbmcgdXJsID0gaXQtPnZhbHVlLmZpcnN0OworICAgIHZvaWQq
IG5vdGlmaWNhdGlvbkRhdGEgPSBpdC0+dmFsdWUuc2Vjb25kOwogCiAgICAgbV9wZW5kaW5nVVJM
Tm90aWZpY2F0aW9ucy5yZW1vdmUoaXQpOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCmluZGV4IGQwN2Y4Yjc5ZDZhODAyYWY3OTQw
N2JhOTU2NjAxNTY5MmJlNWY1ZjUuLjY0YWUxYTRlNGIyOGQzOGFiYzY3NzlmYmNiZjA2ZWFlYjEz
NmQ5ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVn
aW5WaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2lu
Vmlldy5jcHAKQEAgLTE3MCw5ICsxNzAsOSBAQCBzdGF0aWMgU3RyaW5nIGJ1aWxkSFRUUEhlYWRl
cnMoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIGxvbmcgbG9uZyYgZXhwZQogICAg
IAogICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHJlc3BvbnNlLmh0dHBI
ZWFkZXJGaWVsZHMoKS5lbmQoKTsKICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkcygpLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgewotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+Zmlyc3QuY2hhcmFjdGVy
cygpLCBpdC0+Zmlyc3QubGVuZ3RoKCkpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChp
dC0+a2V5LmNoYXJhY3RlcnMoKSwgaXQtPmtleS5sZW5ndGgoKSk7CiAgICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKHNlcGFyYXRvci5jaGFyYWN0ZXJzKCksIHNlcGFyYXRvci5sZW5ndGgoKSk7
Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5zZWNvbmQuY2hhcmFjdGVycygpLCBp
dC0+c2Vjb25kLmxlbmd0aCgpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPnZh
bHVlLmNoYXJhY3RlcnMoKSwgaXQtPnZhbHVlLmxlbmd0aCgpKTsKICAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQoJ1xuJyk7CiAgICAgfQogICAgIApAQCAtMjg0LDcgKzI4NCw3IEBAIFBsdWdp
blZpZXc6On5QbHVnaW5WaWV3KCkKIAogICAgIC8vIENhbmNlbCBhbGwgcGVuZGluZyBmcmFtZSBs
b2Fkcy4KICAgICBmb3IgKEZyYW1lTG9hZE1hcDo6aXRlcmF0b3IgaXQgPSBtX3BlbmRpbmdGcmFt
ZUxvYWRzLmJlZ2luKCksIGVuZCA9IG1fcGVuZGluZ0ZyYW1lTG9hZHMuZW5kKCk7IGl0ICE9IGVu
ZDsgKytpdCkKLSAgICAgICAgaXQtPmZpcnN0LT5zZXRMb2FkTGlzdGVuZXIoMCk7CisgICAgICAg
IGl0LT5rZXktPnNldExvYWRMaXN0ZW5lcigwKTsKIAogICAgIGlmIChtX3BsdWdpbikgewogICAg
ICAgICBtX2lzQmVpbmdEZXN0cm95ZWQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAKaW5kZXggNGYxNzZkZDg2
YTQ1NWIzNzUwOTMxZjJjYzk0ZmI5Y2U3ODE1YWI0NS4uNzM1NjA5NGRlODYxODlhMGU1ODQzNmE3
YWQ3NzIxNzJiOGRiOTFkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCkBAIC01Myw3ICs1Myw3IEBAIENvb3JkaW5h
dGVkR3JhcGhpY3NMYXllciogQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpsYXllckJ5SUQoV2Vi
S2l0OjpXZWJMYXllcklECiAgICAgSGFzaE1hcDxXZWJMYXllcklELCBDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXIqPjo6aXRlcmF0b3IgaXQgPSB0YWJsZS5maW5kKGlkKTsKICAgICBpZiAoaXQgPT0g
dGFibGUuZW5kKCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBpdC0+c2Vjb25kOwor
ICAgIHJldHVybiBpdC0+dmFsdWU7CiB9CiAKIHN0YXRpYyBXZWJMYXllcklEIHRvV2ViTGF5ZXJJ
RChHcmFwaGljc0xheWVyKiBsYXllcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNz
L0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcAppbmRleCBhM2E1NzI5MDczYmRlOWZmNzMzNWU3YzJh
N2E4NGNlYTNlZDU4M2M1Li41NzRjMDc5ZGNmNGI0ZWU3NDRjNjRhZWE3MDlkMDUyMDNmYjFlMjYy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0
ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0
b3IuY3BwCkBAIC00NTQsNyArNDU0LDcgQEAgaW50NjRfdCBMYXllclRyZWVDb29yZGluYXRvcjo6
YWRvcHRJbWFnZUJhY2tpbmdTdG9yZShJbWFnZSogaW1hZ2UpCiAgICAgSGFzaE1hcDxpbnQ2NF90
LCBpbnQ+OjppdGVyYXRvciBpdCA9IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMu
ZmluZChrZXkpOwogCiAgICAgaWYgKGl0ICE9IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZD
b3VudHMuZW5kKCkpIHsKLSAgICAgICAgKysoaXQtPnNlY29uZCk7CisgICAgICAgICsrKGl0LT52
YWx1ZSk7CiAgICAgICAgIHJldHVybiBrZXk7CiAgICAgfQogCkBAIC00NzksOSArNDc5LDkgQEAg
dm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6cmVsZWFzZUltYWdlQmFja2luZ1N0b3JlKGludDY0
X3Qga2V5KQogICAgIGlmIChpdCA9PSBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRz
LmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpdC0+c2Vjb25kLS07CisgICAgaXQtPnZh
bHVlLS07CiAKLSAgICBpZiAoaXQtPnNlY29uZCkKKyAgICBpZiAoaXQtPnZhbHVlKQogICAgICAg
ICByZXR1cm47CiAKICAgICBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLnJlbW92
ZShpdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
QmFja0ZvcndhcmRMaXN0UHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYkJhY2tGb3J3YXJkTGlzdFByb3h5LmNwcAppbmRleCA0Y2E0ZTVmZGI3MmNmY2VhYzY5
NTQ1ZGQxN2Q5ZjdhMmNjODQ2ODM4Li5iZTgyYTE5N2E3MzZkNjIzMmE1NDM3ZGE5YzI5MDJlYjA1
Y2EzYTBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
QmFja0ZvcndhcmRMaXN0UHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJCYWNrRm9yd2FyZExpc3RQcm94eS5jcHAKQEAgLTEzMCw5ICsxMzAsOSBAQCB2
b2lkIFdlYkJhY2tGb3J3YXJkTGlzdFByb3h5OjpyZW1vdmVJdGVtKHVpbnQ2NF90IGl0ZW1JRCkK
ICAgICBpZiAoaXQgPT0gaWRUb0hpc3RvcnlJdGVtTWFwKCkuZW5kKCkpCiAgICAgICAgIHJldHVy
bjsKICAgICAgICAgCi0gICAgV2ViQ29yZTo6cGFnZUNhY2hlKCktPnJlbW92ZShpdC0+c2Vjb25k
LmdldCgpKTsKKyAgICBXZWJDb3JlOjpwYWdlQ2FjaGUoKS0+cmVtb3ZlKGl0LT52YWx1ZS5nZXQo
KSk7CiAKLSAgICBoaXN0b3J5SXRlbVRvSURNYXAoKS5yZW1vdmUoaXQtPnNlY29uZCk7CisgICAg
aGlzdG9yeUl0ZW1Ub0lETWFwKCkucmVtb3ZlKGl0LT52YWx1ZSk7CiAgICAgaWRUb0hpc3RvcnlJ
dGVtTWFwKCkucmVtb3ZlKGl0KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCmluZGV4IGMyZjAxNjUzNzU5NTNiNTNjYzNj
ZDFiOWViNDMxZGI1ZWNlYjkzYWQuLjIyMjczYzFmNjQ2MjFkOWZmMDI4MGU3NWNlNjEzNWJhNWQy
NWFiNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMv
V2ViUGFnZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFj
L1dlYlBhZ2VNYWMubW0KQEAgLTEyMSw3ICsxMjEsNyBAQCBzdGF0aWMgU3RyaW5nIGNvbW1hbmRO
YW1lRm9yU2VsZWN0b3JOYW1lKGNvbnN0IFN0cmluZyYgc2VsZWN0b3JOYW1lKQogICAgIHN0YXRp
YyBjb25zdCBTZWxlY3Rvck5hbWVNYXAqIGV4Y2VwdGlvbk1hcCA9IGNyZWF0ZVNlbGVjdG9yRXhj
ZXB0aW9uTWFwKCk7CiAgICAgU2VsZWN0b3JOYW1lTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGV4
Y2VwdGlvbk1hcC0+ZmluZChzZWxlY3Rvck5hbWUpOwogICAgIGlmIChpdCAhPSBleGNlcHRpb25N
YXAtPmVuZCgpKQotICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGl0
LT52YWx1ZTsKIAogICAgIC8vIFJlbW92ZSB0aGUgdHJhaWxpbmcgY29sb24uCiAgICAgLy8gTm8g
bmVlZCB0byBjYXBpdGFsaXplIHRoZSBjb21tYW5kIG5hbWUgc2luY2UgRWRpdG9yIGNvbW1hbmQg
bmFtZXMgYXJlIG5vdCBjYXNlIHNlbnNpdGl2ZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlByb2Nlc3MuY3BwCmluZGV4IDE0OTBmZjNjYWY3NDM3M2NjNmJkNjAzMWY0YmJjNWFkNzg5OTg4
ZjIuLjZhYTkyMDQxNTk2YzkzOWZhOWYyMTQ4MWE5YzdlYmE0ZDU4YjY5ZDggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcApAQCAtMzM5LDcgKzMzOSw3IEBAIHZvaWQg
V2ViUHJvY2Vzczo6dmlzaXRlZExpbmtTdGF0ZUNoYW5nZWQoY29uc3QgVmVjdG9yPFdlYkNvcmU6
OkxpbmtIYXNoPiYgbGlua0hhCiAgICAgICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxXZWJQ
YWdlR3JvdXBQcm94eT4gPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BhZ2VHcm91cE1hcC5iZWdp
bigpOwogICAgICAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8V2ViUGFnZUdyb3VwUHJveHk+
ID46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGFnZUdyb3VwTWFwLmVuZCgpOwogICAgICAgICBm
b3IgKDsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgUGFnZTo6dmlzaXRlZFN0YXRlQ2hh
bmdlZChQYWdlR3JvdXA6OnBhZ2VHcm91cChpdC0+c2Vjb25kLT5pZGVudGlmaWVyKCkpLCBsaW5r
SGFzaGVzW2ldKTsKKyAgICAgICAgICAgIFBhZ2U6OnZpc2l0ZWRTdGF0ZUNoYW5nZWQoUGFnZUdy
b3VwOjpwYWdlR3JvdXAoaXQtPnZhbHVlLT5pZGVudGlmaWVyKCkpLCBsaW5rSGFzaGVzW2ldKTsK
ICAgICB9CiAKICAgICBwYWdlQ2FjaGUoKS0+bWFya1BhZ2VzRm9yVmlzdGVkTGlua1N0eWxlUmVj
YWxjKCk7CkBAIC0zNTEsNyArMzUxLDcgQEAgdm9pZCBXZWJQcm9jZXNzOjphbGxWaXNpdGVkTGlu
a1N0YXRlQ2hhbmdlZCgpCiAgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPFdlYlBhZ2VHcm91
cFByb3h5PiA+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGFnZUdyb3VwTWFwLmJlZ2luKCk7CiAg
ICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPFdlYlBhZ2VHcm91cFByb3h5PiA+Ojpjb25zdF9p
dGVyYXRvciBlbmQgPSBtX3BhZ2VHcm91cE1hcC5lbmQoKTsKICAgICBmb3IgKDsgaXQgIT0gZW5k
OyArK2l0KQotICAgICAgICBQYWdlOjphbGxWaXNpdGVkU3RhdGVDaGFuZ2VkKFBhZ2VHcm91cDo6
cGFnZUdyb3VwKGl0LT5zZWNvbmQtPmlkZW50aWZpZXIoKSkpOworICAgICAgICBQYWdlOjphbGxW
aXNpdGVkU3RhdGVDaGFuZ2VkKFBhZ2VHcm91cDo6cGFnZUdyb3VwKGl0LT52YWx1ZS0+aWRlbnRp
ZmllcigpKSk7CiAKICAgICBwYWdlQ2FjaGUoKS0+bWFya1BhZ2VzRm9yVmlzdGVkTGlua1N0eWxl
UmVjYWxjKCk7CiB9CkBAIC01MjcsNyArNTI3LDcgQEAgV2ViUGFnZSogV2ViUHJvY2Vzczo6Zm9j
dXNlZFdlYlBhZ2UoKSBjb25zdAogeyAgICAKICAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8
V2ViUGFnZT4gPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wYWdlTWFwLmVuZCgpOwogICAgIGZv
ciAoSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPFdlYlBhZ2U+ID46OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV9wYWdlTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBXZWJQYWdl
KiBwYWdlID0gKCppdCkuc2Vjb25kLmdldCgpOworICAgICAgICBXZWJQYWdlKiBwYWdlID0gKCpp
dCkudmFsdWUuZ2V0KCk7CiAgICAgICAgIGlmIChwYWdlLT53aW5kb3dBbmRXZWJQYWdlQXJlRm9j
dXNlZCgpKQogICAgICAgICAgICAgcmV0dXJuIHBhZ2U7CiAgICAgfQpAQCAtNTQ1LDE0ICs1NDUs
MTQgQEAgdm9pZCBXZWJQcm9jZXNzOjpjcmVhdGVXZWJQYWdlKHVpbnQ2NF90IHBhZ2VJRCwgY29u
c3QgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycyYKICAgICAvLyBsaW5rKSB0aGUgV2ViUGFnZSBn
ZXRzIGNyZWF0ZWQgYm90aCBpbiB0aGUgc3luY2hyb25vdXMgaGFuZGxlciBhbmQgdGhyb3VnaCB0
aGUgbm9ybWFsIHdheS4gCiAgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPFdlYlBhZ2U+ID46
OkFkZFJlc3VsdCByZXN1bHQgPSBtX3BhZ2VNYXAuYWRkKHBhZ2VJRCwgMCk7CiAgICAgaWYgKHJl
c3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIEFTU0VSVCghcmVzdWx0Lml0ZXJhdG9yLT5zZWNv
bmQpOwotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IFdlYlBhZ2U6OmNyZWF0ZShw
YWdlSUQsIHBhcmFtZXRlcnMpOworICAgICAgICBBU1NFUlQoIXJlc3VsdC5pdGVyYXRvci0+dmFs
dWUpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gV2ViUGFnZTo6Y3JlYXRlKHBh
Z2VJRCwgcGFyYW1ldGVycyk7CiAKICAgICAgICAgLy8gQmFsYW5jZWQgYnkgYW4gZW5hYmxlVGVy
bWluYXRpb24gaW4gcmVtb3ZlV2ViUGFnZS4KICAgICAgICAgZGlzYWJsZVRlcm1pbmF0aW9uKCk7
CiAgICAgfQogCi0gICAgQVNTRVJUKHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKKyAgICBBU1NF
UlQocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzczo6cmVtb3Zl
V2ViUGFnZSh1aW50NjRfdCBwYWdlSUQpCkBAIC03ODksMTEgKzc4OSwxMSBAQCBXZWJQYWdlR3Jv
dXBQcm94eSogV2ViUHJvY2Vzczo6d2ViUGFnZUdyb3VwKGNvbnN0IFdlYlBhZ2VHcm91cERhdGEm
IHBhZ2VHcm91cERhdAogewogICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxXZWJQYWdlR3Jv
dXBQcm94eT4gPjo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fcGFnZUdyb3VwTWFwLmFkZChwYWdlR3Jv
dXBEYXRhLnBhZ2VHcm91cElELCAwKTsKICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpIHsKLSAg
ICAgICAgQVNTRVJUKCFyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7Ci0gICAgICAgIHJlc3VsdC5p
dGVyYXRvci0+c2Vjb25kID0gV2ViUGFnZUdyb3VwUHJveHk6OmNyZWF0ZShwYWdlR3JvdXBEYXRh
KTsKKyAgICAgICAgQVNTRVJUKCFyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKKyAgICAgICAgcmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZSA9IFdlYlBhZ2VHcm91cFByb3h5OjpjcmVhdGUocGFnZUdyb3Vw
RGF0YSk7CiAgICAgfQogCi0gICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLmdldCgp
OworICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpOwogfQogCiAjaWYgRU5B
QkxFKFdFQl9JTlRFTlRTKQpAQCAtOTEyLDcgKzkxMiw3IEBAIHN0YXRpYyB2b2lkIGZyb21Db3Vu
dGVkU2V0VG9IYXNoTWFwKFR5cGVDb3VudFNldCogY291bnRlZFNldCwgSGFzaE1hcDxTdHJpbmcs
IHVpCiB7CiAgICAgVHlwZUNvdW50U2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBjb3VudGVkU2V0
LT5lbmQoKTsKICAgICBmb3IgKFR5cGVDb3VudFNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjb3Vu
dGVkU2V0LT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIG1hcC5zZXQoaXQtPmZp
cnN0LCBpdC0+c2Vjb25kKTsKKyAgICAgICAgbWFwLnNldChpdC0+a2V5LCBpdC0+dmFsdWUpOwog
fQogCiBzdGF0aWMgdm9pZCBnZXRXZWJDb3JlTWVtb3J5Q2FjaGVTdGF0aXN0aWNzKFZlY3RvcjxI
YXNoTWFwPFN0cmluZywgdWludDY0X3Q+ID4mIHJlc3VsdCkKQEAgLTEwODUsNyArMTA4NSw3IEBA
IHZvaWQgV2ViUHJvY2Vzczo6c2V0VGV4dENoZWNrZXJTdGF0ZShjb25zdCBUZXh0Q2hlY2tlclN0
YXRlJiB0ZXh0Q2hlY2tlclN0YXRlKQogCiAgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPFdl
YlBhZ2U+ID46Oml0ZXJhdG9yIGVuZCA9IG1fcGFnZU1hcC5lbmQoKTsKICAgICBmb3IgKEhhc2hN
YXA8dWludDY0X3QsIFJlZlB0cjxXZWJQYWdlPiA+OjppdGVyYXRvciBpdCA9IG1fcGFnZU1hcC5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgV2ViUGFnZSogcGFnZSA9ICgqaXQp
LnNlY29uZC5nZXQoKTsKKyAgICAgICAgV2ViUGFnZSogcGFnZSA9ICgqaXQpLnZhbHVlLmdldCgp
OwogICAgICAgICBpZiAoY29udGludW91c1NwZWxsQ2hlY2tpbmdUdXJuZWRPZmYpCiAgICAgICAg
ICAgICBwYWdlLT51bm1hcmtBbGxNaXNzcGVsbGluZ3MoKTsKICAgICAgICAgaWYgKGdyYW1tYXJD
aGVja2luZ1R1cm5lZE9mZikKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0No
YW5nZUxvZwppbmRleCBkNWJiNDczYzg5ZmMxZDYwMjY1ODdhMGRhNzZkMjcxM2Q5OWY3NGM2Li43
YjdjZDA4YmMwZjUwOGUwNTVmZTY0ZDM5NTBmNWM3NTFmOWIyYTU3IDEwMDY0NAotLS0gYS9Ub29s
cy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDIgQEAKKzIwMTIt
MDgtMjcgIENhaW8gTWFyY2VsbyBkZSBPbGl2ZWlyYSBGaWxobyAgPGNhaW8ub2xpdmVpcmFAb3Bl
bmJvc3NhLm9yZz4KKworICAgICAgICBSZW5hbWUgZmlyc3Qvc2Vjb25kIHRvIGtleS92YWx1ZSBp
biBIYXNoTWFwIGl0ZXJhdG9ycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9ODI3ODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL01vY2tXZWJTcGVlY2hJbnB1dENv
bnRyb2xsZXIuY3BwOgorICAgICAgICAoTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcjo6YWRk
TW9ja1JlY29nbml0aW9uUmVzdWx0KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9Ob3RpZmljYXRpb25QcmVzZW50ZXIuY3BwOgorICAgICAgICAoTm90aWZpY2F0aW9uUHJlc2Vu
dGVyOjpzaW11bGF0ZUNsaWNrKToKKyAgICAgICAgKE5vdGlmaWNhdGlvblByZXNlbnRlcjo6c2hv
dyk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9DcHBCb3Vu
ZENsYXNzLmNwcDoKKyAgICAgICAgKENwcEJvdW5kQ2xhc3M6On5DcHBCb3VuZENsYXNzKToKKyAg
ICAgICAgKENwcEJvdW5kQ2xhc3M6Omludm9rZSk6CisgICAgICAgIChDcHBCb3VuZENsYXNzOjpn
ZXRQcm9wZXJ0eSk6CisgICAgICAgIChDcHBCb3VuZENsYXNzOjpzZXRQcm9wZXJ0eSk6CisgICAg
ICAgIChDcHBCb3VuZENsYXNzOjpiaW5kQ2FsbGJhY2spOgorICAgICAgICAoQ3BwQm91bmRDbGFz
czo6YmluZFByb3BlcnR5KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQ
cmVmZXJlbmNlcy5jcHA6CisgICAgICAgIChhcHBseUZvbnRNYXApOgorICAgICAgICAqIER1bXBS
ZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcDoKKyAgICAgICAgKFdlYlZpZXdIb3N0
OjpwcmludFJlc291cmNlRGVzY3JpcHRpb24pOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dp
bi9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlcldpbi5jcHA6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5
Q29udHJvbGxlcjo6fkFjY2Vzc2liaWxpdHlDb250cm9sbGVyKToKKyAgICAgICAgKEFjY2Vzc2li
aWxpdHlDb250cm9sbGVyOjp3aW5Ob3RpZmljYXRpb25SZWNlaXZlZCk6CisgICAgICAgICogRHVt
cFJlbmRlclRyZWUvd2luL1Jlc291cmNlTG9hZERlbGVnYXRlLmNwcDoKKyAgICAgICAgKFJlc291
cmNlTG9hZERlbGVnYXRlOjpkZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdCk6CisgICAg
ICAgICogRHVtcFJlbmRlclRyZWUvd2luL1Rlc3RSdW5uZXJXaW4uY3BwOgorICAgICAgICAod29y
bGRJREZvcldvcmxkKToKKyAgICAgICAgKFRlc3RSdW5uZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29s
YXRlZFdvcmxkKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvRE9NV2lu
ZG93RXh0ZW5zaW9uQmFzaWNfQnVuZGxlLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkRP
TVdpbmRvd0V4dGVuc2lvbkJhc2ljOjp3aWxsRGVzdHJveVBhZ2UpOgorICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9ET01XaW5kb3dFeHRlbnNpb25Ob0NhY2hlX0J1bmRsZS5j
cHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpET01XaW5kb3dFeHRlbnNpb25Ob0NhY2hlOjp3
aWxsRGVzdHJveVBhZ2UpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvVGVzdFJ1bm5lci5jcHA6CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OndvcmxkSURGb3JX
b3JsZCk6CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRl
ZFdvcmxkKToKKwogMjAxMi0wOC0yNCAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFdlYkdMIHNob3VsZCBub3QgZmxpcCB0ZXh0dXJlcyBvbiBwcmVzZW50
YXRpb24gaWYgY29udGVudHMgYXJlIHVuY2hhbmdlZApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlci5jcHAgYi9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9Nb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyLmNw
cAppbmRleCA3MTYyMjJmOWFjY2ZlOGZmYmUzNTk5Nzg1MzgzNzY0NzA2YzY0ZTFlLi4xM2M4ZmYx
ZWM0YzFjZGU1NTA3NjY5OGRmY2ZlNWU4NzEyNmE4MmViIDEwMDY0NAotLS0gYS9Ub29scy9EdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9Nb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyLmNwcAorKysg
Yi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9Nb2NrV2ViU3BlZWNoSW5wdXRDb250cm9s
bGVyLmNwcApAQCAtNTIsNyArNTIsNyBAQCB2b2lkIE1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xs
ZXI6OmFkZE1vY2tSZWNvZ25pdGlvblJlc3VsdChjb25zdCBXZWJTdHJpbmcmIHJlcwogICAgICAg
ICBTdHJpbmcgbGFuZ1N0cmluZyA9IFN0cmluZzo6ZnJvbVVURjgobGFuZ3VhZ2UudXRmOCgpLmRh
dGEoKSk7CiAgICAgICAgIGlmICghbV9yZWNvZ25pdGlvblJlc3VsdHMuY29udGFpbnMobGFuZ1N0
cmluZykpCiAgICAgICAgICAgICBtX3JlY29nbml0aW9uUmVzdWx0cy5zZXQobGFuZ1N0cmluZywg
VmVjdG9yPFdlYlNwZWVjaElucHV0UmVzdWx0PigpKTsKLSAgICAgICAgbV9yZWNvZ25pdGlvblJl
c3VsdHMuZmluZChsYW5nU3RyaW5nKS0+c2Vjb25kLmFwcGVuZChyZXMpOworICAgICAgICBtX3Jl
Y29nbml0aW9uUmVzdWx0cy5maW5kKGxhbmdTdHJpbmcpLT52YWx1ZS5hcHBlbmQocmVzKTsKICAg
ICB9CiB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL05vdGlm
aWNhdGlvblByZXNlbnRlci5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9Ob3Rp
ZmljYXRpb25QcmVzZW50ZXIuY3BwCmluZGV4IDBjNTQwMGY1ZTllOGY3MTcwZWNmNTk5YTgxYmQ0
MjZmYmQ3NzI5MWQuLmEyMTU4OGY3NDRlNWMzZjVhYjcwZGJkYjAzYzI3NWM1MDcwOGYwM2EgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL05vdGlmaWNhdGlvblByZXNl
bnRlci5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTm90aWZpY2F0aW9u
UHJlc2VudGVyLmNwcApAQCAtNzUsNyArNzUsNyBAQCBib29sIE5vdGlmaWNhdGlvblByZXNlbnRl
cjo6c2ltdWxhdGVDbGljayhjb25zdCBXZWJTdHJpbmcmIHRpdGxlKQogICAgIGlmIChtX2FjdGl2
ZU5vdGlmaWNhdGlvbnMuZmluZChpZCkgPT0gbV9hY3RpdmVOb3RpZmljYXRpb25zLmVuZCgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgY29uc3QgV2ViTm90aWZpY2F0aW9uJiBu
b3RpZmljYXRpb24gPSBtX2FjdGl2ZU5vdGlmaWNhdGlvbnMuZmluZChpZCktPnNlY29uZDsKKyAg
ICBjb25zdCBXZWJOb3RpZmljYXRpb24mIG5vdGlmaWNhdGlvbiA9IG1fYWN0aXZlTm90aWZpY2F0
aW9ucy5maW5kKGlkKS0+dmFsdWU7CiAgICAgV2ViTm90aWZpY2F0aW9uIGV2ZW50VGFyZ2V0KG5v
dGlmaWNhdGlvbik7CiAgICAgZXZlbnRUYXJnZXQuZGlzcGF0Y2hDbGlja0V2ZW50KCk7CiAgICAg
cmV0dXJuIHRydWU7CkBAIC04OSw3ICs4OSw3IEBAIGJvb2wgTm90aWZpY2F0aW9uUHJlc2VudGVy
OjpzaG93KGNvbnN0IFdlYk5vdGlmaWNhdGlvbiYgbm90aWZpY2F0aW9uKQogICAgICAgICBXVEY6
OlN0cmluZyByZXBsYWNlSWQobm90aWZpY2F0aW9uLnJlcGxhY2VJZCgpLmRhdGEoKSwgbm90aWZp
Y2F0aW9uLnJlcGxhY2VJZCgpLmxlbmd0aCgpKTsKICAgICAgICAgaWYgKG1fcmVwbGFjZW1lbnRz
LmZpbmQocmVwbGFjZUlkKSAhPSBtX3JlcGxhY2VtZW50cy5lbmQoKSkKICAgICAgICAgICAgIHBy
aW50ZigiUkVQTEFDSU5HIE5PVElGSUNBVElPTiAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICBt
X3JlcGxhY2VtZW50cy5maW5kKHJlcGxhY2VJZCktPnNlY29uZC51dGY4KCkuZGF0YSgpKTsKKyAg
ICAgICAgICAgICAgICAgICBtX3JlcGxhY2VtZW50cy5maW5kKHJlcGxhY2VJZCktPnZhbHVlLnV0
ZjgoKS5kYXRhKCkpOwogCiAgICAgICAgIG1fcmVwbGFjZW1lbnRzLnNldChyZXBsYWNlSWQsIFdU
Rjo6U3RyaW5nKGlkZW50aWZpZXIuZGF0YSgpLCBpZGVudGlmaWVyLmxlbmd0aCgpKSk7CiAgICAg
fQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9D
cHBCb3VuZENsYXNzLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5u
ZXIvQ3BwQm91bmRDbGFzcy5jcHAKaW5kZXggOWI0YTNiNjQ2NDVkMDU3YjQxNzJlMWM3ZGZhMDdj
N2E2MmU3N2NmOC4uMWIyOWQyYjBmNTVkMDFmNzM4NzE0NTc4NzdmOWRiZGYwNmYxYjQ5MSAxMDA2
NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9DcHBCb3Vu
ZENsYXNzLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVy
L0NwcEJvdW5kQ2xhc3MuY3BwCkBAIC0yMDMsMTAgKzIwMywxMCBAQCBib29sIENwcE5QT2JqZWN0
OjpzZXRQcm9wZXJ0eShOUE9iamVjdCogbnBPYmosIE5QSWRlbnRpZmllciBpZGVudCwgY29uc3Qg
TlBWYXJpYQogQ3BwQm91bmRDbGFzczo6fkNwcEJvdW5kQ2xhc3MoKQogewogICAgIGZvciAoTWV0
aG9kTGlzdDo6aXRlcmF0b3IgaSA9IG1fbWV0aG9kcy5iZWdpbigpOyBpICE9IG1fbWV0aG9kcy5l
bmQoKTsgKytpKQotICAgICAgICBkZWxldGUgaS0+c2Vjb25kOworICAgICAgICBkZWxldGUgaS0+
dmFsdWU7CiAKICAgICBmb3IgKFByb3BlcnR5TGlzdDo6aXRlcmF0b3IgaSA9IG1fcHJvcGVydGll
cy5iZWdpbigpOyBpICE9IG1fcHJvcGVydGllcy5lbmQoKTsgKytpKQotICAgICAgICBkZWxldGUg
aS0+c2Vjb25kOworICAgICAgICBkZWxldGUgaS0+dmFsdWU7CiAKICAgICAvLyBVbnJlZ2lzdGVy
IG91cnNlbHZlcyBpZiB3ZSB3ZXJlIGJvdW5kIHRvIGEgZnJhbWUuCiAgICAgaWYgKG1fYm91bmRU
b0ZyYW1lKQpAQCAtMjM3LDcgKzIzNyw3IEBAIGJvb2wgQ3BwQm91bmRDbGFzczo6aW52b2tlKE5Q
SWRlbnRpZmllciBpZGVudCwKICAgICAgICAgfQogICAgICAgICBjYWxsYmFjayA9IG1fZmFsbGJh
Y2tDYWxsYmFjay5nZXQoKTsKICAgICB9IGVsc2UKLSAgICAgICAgY2FsbGJhY2sgPSAoKm1ldGhv
ZCkuc2Vjb25kOworICAgICAgICBjYWxsYmFjayA9ICgqbWV0aG9kKS52YWx1ZTsKIAogICAgIC8v
IEJ1aWxkIGEgQ3BwQXJndW1lbnRMaXN0IGFyZ3VtZW50IHZlY3RvciBmcm9tIHRoZSBOUFZhcmlh
bnRzIGNvbWluZyBpbi4KICAgICBDcHBBcmd1bWVudExpc3QgY3BwQXJndW1lbnRzKGFyZ3VtZW50
Q291bnQpOwpAQCAtMjYwLDcgKzI2MCw3IEBAIGJvb2wgQ3BwQm91bmRDbGFzczo6Z2V0UHJvcGVy
dHkoTlBJZGVudGlmaWVyIGlkZW50LCBOUFZhcmlhbnQqIHJlc3VsdCkgY29uc3QKICAgICB9CiAK
ICAgICBDcHBWYXJpYW50IGNwcFZhbHVlOwotICAgIGlmICghY2FsbGJhY2stPnNlY29uZC0+Z2V0
VmFsdWUoJmNwcFZhbHVlKSkKKyAgICBpZiAoIWNhbGxiYWNrLT52YWx1ZS0+Z2V0VmFsdWUoJmNw
cFZhbHVlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGNwcFZhbHVlLmNvcHlUb05QVmFy
aWFudChyZXN1bHQpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMjc0LDcgKzI3NCw3IEBAIGJvb2wg
Q3BwQm91bmRDbGFzczo6c2V0UHJvcGVydHkoTlBJZGVudGlmaWVyIGlkZW50LCBjb25zdCBOUFZh
cmlhbnQqIHZhbHVlKQogCiAgICAgQ3BwVmFyaWFudCBjcHBWYWx1ZTsKICAgICBjcHBWYWx1ZS5z
ZXQoKnZhbHVlKTsKLSAgICByZXR1cm4gKCpjYWxsYmFjaykuc2Vjb25kLT5zZXRWYWx1ZShjcHBW
YWx1ZSk7CisgICAgcmV0dXJuICgqY2FsbGJhY2spLnZhbHVlLT5zZXRWYWx1ZShjcHBWYWx1ZSk7
CiB9CiAKIHZvaWQgQ3BwQm91bmRDbGFzczo6YmluZENhbGxiYWNrKGNvbnN0IHN0cmluZyYgbmFt
ZSwgQ2FsbGJhY2sqIGNhbGxiYWNrKQpAQCAtMjgyLDcgKzI4Miw3IEBAIHZvaWQgQ3BwQm91bmRD
bGFzczo6YmluZENhbGxiYWNrKGNvbnN0IHN0cmluZyYgbmFtZSwgQ2FsbGJhY2sqIGNhbGxiYWNr
KQogICAgIE5QSWRlbnRpZmllciBpZGVudCA9IFdlYkJpbmRpbmdzOjpnZXRTdHJpbmdJZGVudGlm
aWVyKG5hbWUuY19zdHIoKSk7CiAgICAgTWV0aG9kTGlzdDo6aXRlcmF0b3Igb2xkQ2FsbGJhY2sg
PSBtX21ldGhvZHMuZmluZChpZGVudCk7CiAgICAgaWYgKG9sZENhbGxiYWNrICE9IG1fbWV0aG9k
cy5lbmQoKSkgewotICAgICAgICBkZWxldGUgb2xkQ2FsbGJhY2stPnNlY29uZDsKKyAgICAgICAg
ZGVsZXRlIG9sZENhbGxiYWNrLT52YWx1ZTsKICAgICAgICAgaWYgKCFjYWxsYmFjaykgewogICAg
ICAgICAgICAgbV9tZXRob2RzLnJlbW92ZShvbGRDYWxsYmFjayk7CiAgICAgICAgICAgICByZXR1
cm47CkBAIC0zMDksNyArMzA5LDcgQEAgdm9pZCBDcHBCb3VuZENsYXNzOjpiaW5kUHJvcGVydHko
Y29uc3Qgc3RyaW5nJiBuYW1lLCBQcm9wZXJ0eUNhbGxiYWNrKiBjYWxsYmFjaykKICAgICBOUElk
ZW50aWZpZXIgaWRlbnQgPSBXZWJCaW5kaW5nczo6Z2V0U3RyaW5nSWRlbnRpZmllcihuYW1lLmNf
c3RyKCkpOwogICAgIFByb3BlcnR5TGlzdDo6aXRlcmF0b3Igb2xkQ2FsbGJhY2sgPSBtX3Byb3Bl
cnRpZXMuZmluZChpZGVudCk7CiAgICAgaWYgKG9sZENhbGxiYWNrICE9IG1fcHJvcGVydGllcy5l
bmQoKSkgewotICAgICAgICBkZWxldGUgb2xkQ2FsbGJhY2stPnNlY29uZDsKKyAgICAgICAgZGVs
ZXRlIG9sZENhbGxiYWNrLT52YWx1ZTsKICAgICAgICAgaWYgKCFjYWxsYmFjaykgewogICAgICAg
ICAgICAgbV9wcm9wZXJ0aWVzLnJlbW92ZShvbGRDYWxsYmFjayk7CiAgICAgICAgICAgICByZXR1
cm47CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJl
bmNlcy5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5j
cHAKaW5kZXggYzRkZTBhYmMxNDQ1MGExMDlhYWNhN2Y5NzdhMjllODkzOWIyNmNlNC4uNmVjMGU0
MzRkZGY0ZTFmZjRiYzgzZDdlZTk3NjIxZjJmODYwNDUxOCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vV2ViUHJlZmVyZW5jZXMuY3BwCisrKyBiL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZlcmVuY2VzLmNwcApAQCAtMTU2LDkgKzE1Niw5IEBA
IHR5cGVkZWYgdm9pZCAoKlNldEZvbnRGYW1pbHlXcmFwcGVyKShXZWJTZXR0aW5ncyosIGNvbnN0
IFdlYlN0cmluZyYsIFVTY3JpcHRDb2RlCiBzdGF0aWMgdm9pZCBhcHBseUZvbnRNYXAoV2ViU2V0
dGluZ3MqIHNldHRpbmdzLCBjb25zdCBXZWJQcmVmZXJlbmNlczo6U2NyaXB0Rm9udEZhbWlseU1h
cCYgbWFwLCBTZXRGb250RmFtaWx5V3JhcHBlciBzZXR0ZXIpCiB7CiAgICAgZm9yIChXZWJQcmVm
ZXJlbmNlczo6U2NyaXB0Rm9udEZhbWlseU1hcDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1hcC5i
ZWdpbigpOyBpdGVyICE9IG1hcC5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIGNvbnN0IFdlYlN0
cmluZyYgZm9udCA9IGl0ZXItPnNlY29uZDsKKyAgICAgICAgY29uc3QgV2ViU3RyaW5nJiBmb250
ID0gaXRlci0+dmFsdWU7CiAgICAgICAgIGlmICghZm9udC5pc051bGwoKSAmJiAhZm9udC5pc0Vt
cHR5KCkpCi0gICAgICAgICAgICAoKnNldHRlcikoc2V0dGluZ3MsIGZvbnQsIHN0YXRpY19jYXN0
PFVTY3JpcHRDb2RlPihpdGVyLT5maXJzdCkpOworICAgICAgICAgICAgKCpzZXR0ZXIpKHNldHRp
bmdzLCBmb250LCBzdGF0aWNfY2FzdDxVU2NyaXB0Q29kZT4oaXRlci0+a2V5KSk7CiAgICAgfQog
fQogCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9z
dC5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5jcHAKaW5k
ZXggZGIwZWE1ZWVmZjI5ZmFmZGJjMTAyYTExZjU2ZDBmODI2YTgyYTZmNi4uNGUzZTU5MmY0Yjlh
ZDhlYzZlMGViN2Y1MmY1NzBiYmVhYjMxMDMxZSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcApAQCAtMTc2Myw3ICsxNzYzLDcgQEAgdm9pZCBXZWJW
aWV3SG9zdDo6cHJpbnRGcmFtZVVzZXJHZXN0dXJlU3RhdHVzKFdlYkZyYW1lKiB3ZWJmcmFtZSwg
Y29uc3QgY2hhciogbXMKIHZvaWQgV2ViVmlld0hvc3Q6OnByaW50UmVzb3VyY2VEZXNjcmlwdGlv
bih1bnNpZ25lZCBpZGVudGlmaWVyKQogewogICAgIFJlc291cmNlTWFwOjppdGVyYXRvciBpdCA9
IG1fcmVzb3VyY2VJZGVudGlmaWVyTWFwLmZpbmQoaWRlbnRpZmllcik7Ci0gICAgcHJpbnRmKCIl
cyIsIGl0ICE9IG1fcmVzb3VyY2VJZGVudGlmaWVyTWFwLmVuZCgpID8gaXQtPnNlY29uZC5jX3N0
cigpIDogIjx1bmtub3duPiIpOworICAgIHByaW50ZigiJXMiLCBpdCAhPSBtX3Jlc291cmNlSWRl
bnRpZmllck1hcC5lbmQoKSA/IGl0LT52YWx1ZS5jX3N0cigpIDogIjx1bmtub3duPiIpOwogfQog
CiB2b2lkIFdlYlZpZXdIb3N0OjpzZXRQZW5kaW5nRXh0cmFEYXRhKFBhc3NPd25QdHI8VGVzdFNo
ZWxsRXh0cmFEYXRhPiBleHRyYURhdGEpCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJl
ZS93aW4vQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJXaW4uY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvd2luL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyV2luLmNwcAppbmRleCA3ZjlhYTZjYzJlZTky
OWIyYmY4ZWE0MTZmNWQ2NWJiMDU2ZTNlYWQxLi5lYjM4YjU0MzVjMTY5ZDJiZGZiMDU2OGM2M2Vh
MjAzYjVjNmZhM2RjIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vQWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXJXaW4uY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9B
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlcldpbi5jcHAKQEAgLTU4LDcgKzU4LDcgQEAgQWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXI6On5BY2Nlc3NpYmlsaXR5Q29udHJvbGxlcigpCiAgICAgICAgIFVuaG9v
a1dpbkV2ZW50KG1fbm90aWZpY2F0aW9uc0V2ZW50SG9vayk7CiAKICAgICBmb3IgKEhhc2hNYXA8
UGxhdGZvcm1VSUVsZW1lbnQsIEpTT2JqZWN0UmVmPjo6aXRlcmF0b3IgaXQgPSBtX25vdGlmaWNh
dGlvbkxpc3RlbmVycy5iZWdpbigpOyBpdCAhPSBtX25vdGlmaWNhdGlvbkxpc3RlbmVycy5lbmQo
KTsgKytpdCkKLSAgICAgICAgSlNWYWx1ZVVucHJvdGVjdChmcmFtZS0+Z2xvYmFsQ29udGV4dCgp
LCBpdC0+c2Vjb25kKTsKKyAgICAgICAgSlNWYWx1ZVVucHJvdGVjdChmcmFtZS0+Z2xvYmFsQ29u
dGV4dCgpLCBpdC0+dmFsdWUpOwogfQogCiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2li
aWxpdHlDb250cm9sbGVyOjplbGVtZW50QXRQb2ludChpbnQgeCwgaW50IHkpCkBAIC0yOTMsNyAr
MjkzLDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cmVtb3ZlTm90aWZpY2F0aW9u
TGlzdGVuZXIoKQogdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6d2luTm90aWZpY2F0aW9u
UmVjZWl2ZWQoUGxhdGZvcm1VSUVsZW1lbnQgZWxlbWVudCwgY29uc3Qgc3RyaW5nJiBldmVudE5h
bWUpCiB7CiAgICAgZm9yIChIYXNoTWFwPFBsYXRmb3JtVUlFbGVtZW50LCBKU09iamVjdFJlZj46
Oml0ZXJhdG9yIGl0ID0gbV9ub3RpZmljYXRpb25MaXN0ZW5lcnMuYmVnaW4oKTsgaXQgIT0gbV9u
b3RpZmljYXRpb25MaXN0ZW5lcnMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgQ09NUHRyPElTZXJ2
aWNlUHJvdmlkZXI+IHRoaXNTZXJ2aWNlUHJvdmlkZXIoUXVlcnksIGl0LT5maXJzdCk7CisgICAg
ICAgIENPTVB0cjxJU2VydmljZVByb3ZpZGVyPiB0aGlzU2VydmljZVByb3ZpZGVyKFF1ZXJ5LCBp
dC0+a2V5KTsKICAgICAgICAgaWYgKCF0aGlzU2VydmljZVByb3ZpZGVyKQogICAgICAgICAgICAg
Y29udGludWU7CiAKQEAgLTMxNiw3ICszMTYsNyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9s
bGVyOjp3aW5Ob3RpZmljYXRpb25SZWNlaXZlZChQbGF0Zm9ybVVJRWxlbWVudCBlbGVtZW50LAog
CiAgICAgICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBqc05vdGlmaWNhdGlvbihBZG9wdCwg
SlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoZXZlbnROYW1lLmNfc3RyKCkpKTsKICAgICAg
ICAgSlNWYWx1ZVJlZiBhcmd1bWVudCA9IEpTVmFsdWVNYWtlU3RyaW5nKGZyYW1lLT5nbG9iYWxD
b250ZXh0KCksIGpzTm90aWZpY2F0aW9uLmdldCgpKTsKLSAgICAgICAgSlNPYmplY3RDYWxsQXNG
dW5jdGlvbihmcmFtZS0+Z2xvYmFsQ29udGV4dCgpLCBpdC0+c2Vjb25kLCBOVUxMLCAxLCAmYXJn
dW1lbnQsIE5VTEwpOworICAgICAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9uKGZyYW1lLT5nbG9i
YWxDb250ZXh0KCksIGl0LT52YWx1ZSwgMCwgMSwgJmFyZ3VtZW50LCAwKTsKICAgICB9CiB9CiAK
ZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9SZXNvdXJjZUxvYWREZWxlZ2F0
ZS5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vUmVzb3VyY2VMb2FkRGVsZWdhdGUuY3Bw
CmluZGV4IDkwYjlhZTBmY2MzZjYxN2Y0ZmY2NzU1NjJkYTI5NmVlNWUyYmJjMzMuLjY4NTk3ODBm
MzkyZjE4ZTMwNjYxYjA0OTI3YjRjY2NiZjNjNDcxYTIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL3dpbi9SZXNvdXJjZUxvYWREZWxlZ2F0ZS5jcHAKKysrIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvd2luL1Jlc291cmNlTG9hZERlbGVnYXRlLmNwcApAQCAtNjYsNyArNjYsNyBAQCB3
c3RyaW5nIFJlc291cmNlTG9hZERlbGVnYXRlOjpkZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJl
c3VsdCh1bnNpZ25lZCBsb25nIGlkZQogICAgIGlmIChpdCA9PSBtX3VybE1hcC5lbmQoKSkKICAg
ICAgICAgcmV0dXJuIEwiPHVua25vd24+IjsKIAotICAgIHJldHVybiB1cmxTdWl0YWJsZUZvclRl
c3RSZXN1bHQoaXQtPnNlY29uZCk7CisgICAgcmV0dXJuIHVybFN1aXRhYmxlRm9yVGVzdFJlc3Vs
dChpdC0+dmFsdWUpOwogfQogCiB3c3RyaW5nIFJlc291cmNlTG9hZERlbGVnYXRlOjpkZXNjcmlw
dGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChJV2ViVVJMUmVxdWVzdCogcmVxdWVzdCkKZGlmZiAt
LWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9UZXN0UnVubmVyV2luLmNwcCBiL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL3dpbi9UZXN0UnVubmVyV2luLmNwcAppbmRleCBhMmMxNWUzMGRjMWUw
NjBiZjU4NTM1YWRiNzRiODRiOTA3ODhlNGMxLi45Njg2MDI2MmVlYWQwOGZmYzg5ZjkwOWM5Mzk3
NDg1OTQ5MzQzYTc5IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vVGVzdFJ1
bm5lcldpbi5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1Rlc3RSdW5uZXJXaW4u
Y3BwCkBAIC0xMjQ2LDggKzEyNDYsOCBAQCB1bnNpZ25lZCB3b3JsZElERm9yV29ybGQoSVdlYlNj
cmlwdFdvcmxkKiB3b3JsZCkKIHsKICAgICBXb3JsZE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
d29ybGRNYXAoKS5lbmQoKTsKICAgICBmb3IgKFdvcmxkTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9
IHdvcmxkTWFwKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+
c2Vjb25kID09IHdvcmxkKQotICAgICAgICAgICAgcmV0dXJuIGl0LT5maXJzdDsKKyAgICAgICAg
aWYgKGl0LT52YWx1ZSA9PSB3b3JsZCkKKyAgICAgICAgICAgIHJldHVybiBpdC0+a2V5OwogICAg
IH0KIAogICAgIHJldHVybiAwOwpAQCAtMTI3MSw3ICsxMjcxLDcgQEAgdm9pZCBUZXN0UnVubmVy
OjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCh1bnNpZ25lZCB3b3JsZElELCBKU09iamVj
dFJlZiBnbG8KICAgICAgICAgaWYgKEZBSUxFRChXZWJLaXRDcmVhdGVJbnN0YW5jZShfX3V1aWRv
ZihXZWJTY3JpcHRXb3JsZCksIDAsIF9fdXVpZG9mKHdvcmxkKSwgcmVpbnRlcnByZXRfY2FzdDx2
b2lkKio+KCZ3b3JsZCkpKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9IGVsc2UgewotICAg
ICAgICBDT01QdHI8SVdlYlNjcmlwdFdvcmxkPiYgd29ybGRTbG90ID0gd29ybGRNYXAoKS5hZGQo
d29ybGRJRCwgMCkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgQ09NUHRyPElXZWJTY3JpcHRX
b3JsZD4mIHdvcmxkU2xvdCA9IHdvcmxkTWFwKCkuYWRkKHdvcmxkSUQsIDApLml0ZXJhdG9yLT52
YWx1ZTsKICAgICAgICAgaWYgKCF3b3JsZFNsb3QgJiYgRkFJTEVEKFdlYktpdENyZWF0ZUluc3Rh
bmNlKF9fdXVpZG9mKFdlYlNjcmlwdFdvcmxkKSwgMCwgX191dWlkb2Yod29ybGRTbG90KSwgcmVp
bnRlcnByZXRfY2FzdDx2b2lkKio+KCZ3b3JsZFNsb3QpKSkpCiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIHdvcmxkID0gd29ybGRTbG90OwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXQyL0RPTVdpbmRvd0V4dGVuc2lvbkJhc2ljX0J1bmRsZS5jcHAgYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvRE9NV2luZG93RXh0ZW5zaW9uQmFzaWNf
QnVuZGxlLmNwcAppbmRleCA5OGJmYWIzNWFmNDZjZjQ5YzYyYmNjOWIwYTg1OTQ1N2Y0OGNjMWMx
Li41YjEyOTZmNDdkMTlkMjhiOWRlN2ZjZThkMTMxYWE0MDU0NzZiZGQxIDEwMDY0NAotLS0gYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvRE9NV2luZG93RXh0ZW5zaW9uQmFzaWNf
QnVuZGxlLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvRE9NV2lu
ZG93RXh0ZW5zaW9uQmFzaWNfQnVuZGxlLmNwcApAQCAtMTcxLDggKzE3MSw4IEBAIHZvaWQgRE9N
V2luZG93RXh0ZW5zaW9uQmFzaWM6OndpbGxEZXN0cm95UGFnZShXS0J1bmRsZVJlZiwgV0tCdW5k
bGVQYWdlUmVmKQogICAgIEhhc2hNYXA8V0tCdW5kbGVET01XaW5kb3dFeHRlbnNpb25SZWYsIGlu
dD46Oml0ZXJhdG9yIGl0ID0gbV9leHRlbnNpb25Ub1JlY29yZE1hcC5iZWdpbigpOwogICAgIEhh
c2hNYXA8V0tCdW5kbGVET01XaW5kb3dFeHRlbnNpb25SZWYsIGludD46Oml0ZXJhdG9yIGVuZCA9
IG1fZXh0ZW5zaW9uVG9SZWNvcmRNYXAuZW5kKCk7CiAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytp
dCkgewotICAgICAgICB1cGRhdGVFeHRlbnNpb25TdGF0ZVJlY29yZChpdC0+Zmlyc3QsIFJlbW92
ZWQpOwotICAgICAgICBXS1JlbGVhc2UoaXQtPmZpcnN0KTsKKyAgICAgICAgdXBkYXRlRXh0ZW5z
aW9uU3RhdGVSZWNvcmQoaXQtPmtleSwgUmVtb3ZlZCk7CisgICAgICAgIFdLUmVsZWFzZShpdC0+
a2V5KTsKICAgICB9CiAKICAgICBtX2V4dGVuc2lvblRvUmVjb3JkTWFwLmNsZWFyKCk7CmRpZmYg
LS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvRE9NV2luZG93RXh0ZW5z
aW9uTm9DYWNoZV9CdW5kbGUuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQy
L0RPTVdpbmRvd0V4dGVuc2lvbk5vQ2FjaGVfQnVuZGxlLmNwcAppbmRleCA4ZjZjZDdiMzczNWI1
YWUyNzlkMGFkYjc3MTg1YzVkMjgwNzExY2FlLi40MTFlMTE1ZWE0NGZiZTQ4NzBlN2YxZjMxZDkw
NWU4NTc3ZjA3ZTIyIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dDIvRE9NV2luZG93RXh0ZW5zaW9uTm9DYWNoZV9CdW5kbGUuY3BwCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9ET01XaW5kb3dFeHRlbnNpb25Ob0NhY2hlX0J1bmRsZS5j
cHAKQEAgLTE3OCw4ICsxNzgsOCBAQCB2b2lkIERPTVdpbmRvd0V4dGVuc2lvbk5vQ2FjaGU6Ondp
bGxEZXN0cm95UGFnZShXS0J1bmRsZVJlZiwgV0tCdW5kbGVQYWdlUmVmKQogICAgIEhhc2hNYXA8
V0tCdW5kbGVET01XaW5kb3dFeHRlbnNpb25SZWYsIGludD46Oml0ZXJhdG9yIGl0ID0gbV9leHRl
bnNpb25Ub1JlY29yZE1hcC5iZWdpbigpOwogICAgIEhhc2hNYXA8V0tCdW5kbGVET01XaW5kb3dF
eHRlbnNpb25SZWYsIGludD46Oml0ZXJhdG9yIGVuZCA9IG1fZXh0ZW5zaW9uVG9SZWNvcmRNYXAu
ZW5kKCk7CiAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICB1cGRhdGVFeHRl
bnNpb25TdGF0ZVJlY29yZChpdC0+Zmlyc3QsIFJlbW92ZWQpOwotICAgICAgICBXS1JlbGVhc2Uo
aXQtPmZpcnN0KTsKKyAgICAgICAgdXBkYXRlRXh0ZW5zaW9uU3RhdGVSZWNvcmQoaXQtPmtleSwg
UmVtb3ZlZCk7CisgICAgICAgIFdLUmVsZWFzZShpdC0+a2V5KTsKICAgICB9CiAKICAgICBtX2V4
dGVuc2lvblRvUmVjb3JkTWFwLmNsZWFyKCk7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcAppbmRleCBiOTRlNWQ0NzYzYTExOGM0
ZWQ2ZDg1MmQ0MTc4NDJhMDVlMTRiNDRkLi5mODQyOTc4NDFmZjc0MjE0ZGJhYWEyZDJmMTlkY2Q3
MmU0YTcwNTk0IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL1Rlc3RSdW5uZXIuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvVGVzdFJ1bm5lci5jcHAKQEAgLTQ1NSw4ICs0NTUsOCBAQCB1bnNpZ25lZCBUZXN0UnVu
bmVyOjp3b3JsZElERm9yV29ybGQoV0tCdW5kbGVTY3JpcHRXb3JsZFJlZiB3b3JsZCkKIHsKICAg
ICBXb3JsZE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gd29ybGRNYXAoKS5lbmQoKTsKICAgICBm
b3IgKFdvcmxkTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHdvcmxkTWFwKCkuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kID09IHdvcmxkKQotICAgICAg
ICAgICAgcmV0dXJuIGl0LT5maXJzdDsKKyAgICAgICAgaWYgKGl0LT52YWx1ZSA9PSB3b3JsZCkK
KyAgICAgICAgICAgIHJldHVybiBpdC0+a2V5OwogICAgIH0KIAogICAgIHJldHVybiAwOwpAQCAt
NDcwLDcgKzQ3MCw3IEBAIHZvaWQgVGVzdFJ1bm5lcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVk
V29ybGQoSlNDb250ZXh0UmVmIGNvbnRleHQsIHVuc2lnbmVkIHdvCiAgICAgaWYgKCF3b3JsZElE
KQogICAgICAgICB3b3JsZC5hZG9wdChXS0J1bmRsZVNjcmlwdFdvcmxkQ3JlYXRlV29ybGQoKSk7
CiAgICAgZWxzZSB7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLQnVuZGxlU2NyaXB0V29ybGRSZWY+
JiB3b3JsZFNsb3QgPSB3b3JsZE1hcCgpLmFkZCh3b3JsZElELCAwKS5pdGVyYXRvci0+c2Vjb25k
OworICAgICAgICBXS1JldGFpblB0cjxXS0J1bmRsZVNjcmlwdFdvcmxkUmVmPiYgd29ybGRTbG90
ID0gd29ybGRNYXAoKS5hZGQod29ybGRJRCwgMCkuaXRlcmF0b3ItPnZhbHVlOwogICAgICAgICBp
ZiAoIXdvcmxkU2xvdCkKICAgICAgICAgICAgIHdvcmxkU2xvdC5hZG9wdChXS0J1bmRsZVNjcmlw
dFdvcmxkQ3JlYXRlV29ybGQoKSk7CiAgICAgICAgIHdvcmxkID0gd29ybGRTbG90Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160852</attachid>
            <date>2012-08-27 16:23:32 -0700</date>
            <delta_ts>2012-09-14 14:09:32 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-82784-20120827202322.patch</filename>
            <type>text/plain</type>
            <size>702251</size>
            <attacher name="Caio Marcelo de Oliveira Filho">cmarcelo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI2ODE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
OTdkM2U4OWQzYWQzNjEzNGY3OTQ5ZmUxMTA5OTFhZGM5ZWU0NzYwLi5mMTkwOWI2ZTZlN2I0NTAz
ZmY3M2NiNTg3MTYxMDNkNDgxOTZhOGEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMTggQEAKKzIwMTItMDgtMjcgIENhaW8gTWFyY2VsbyBkZSBPbGl2ZWlyYSBGaWxobyAg
PGNhaW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KKworICAgICAgICBSZW5hbWUgZmlyc3Qvc2Vj
b25kIHRvIGtleS92YWx1ZSBpbiBIYXNoTWFwIGl0ZXJhdG9ycworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI3ODQKKworICAgICAgICBSZXZpZXdlZCBi
eSBFcmljIFNlaWRlbC4KKworICAgICAgICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0Lmg6CisgICAg
ICAgIChKU0M6OkpTQ2FsbGJhY2tPYmplY3REYXRhOjpKU1ByaXZhdGVQcm9wZXJ0eU1hcDo6Z2V0
UHJpdmF0ZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNDYWxsYmFja09iamVjdERhdGE6OkpT
UHJpdmF0ZVByb3BlcnR5TWFwOjpzZXRQcml2YXRlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpK
U0NhbGxiYWNrT2JqZWN0RGF0YTo6SlNQcml2YXRlUHJvcGVydHlNYXA6OnZpc2l0Q2hpbGRyZW4p
OgorICAgICAgICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmg6CisgICAgICAgIChK
U0M6Ojo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgICogQVBJL0pTQ2xhc3NSZWYuY3Bw
OgorICAgICAgICAoT3BhcXVlSlNDbGFzczo6fk9wYXF1ZUpTQ2xhc3MpOgorICAgICAgICAoT3Bh
cXVlSlNDbGFzc0NvbnRleHREYXRhOjpPcGFxdWVKU0NsYXNzQ29udGV4dERhdGEpOgorICAgICAg
ICAoT3BhcXVlSlNDbGFzczo6Y29udGV4dERhdGEpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVC
bG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcCk6CisgICAgICAgIChKU0M6
OkV2YWxDb2RlQ2FjaGU6OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpuYW1lRm9yUmVnaXN0ZXIpOgorICAgICAgICAqIGJ5dGVjb2RlL0p1bXBUYWJsZS5oOgorICAg
ICAgICAoSlNDOjpTdHJpbmdKdW1wVGFibGU6Om9mZnNldEZvclZhbHVlKToKKyAgICAgICAgKEpT
Qzo6U3RyaW5nSnVtcFRhYmxlOjpjdGlGb3JWYWx1ZSk6CisgICAgICAgICogYnl0ZWNvZGUvTGF6
eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3BwOgorICAgICAgICAoSlNDOjpMYXp5T3BlcmFuZFZhbHVl
UHJvZmlsZVBhcnNlcjo6Z2V0SWZQcmVzZW50KToKKyAgICAgICAgKiBieXRlY29kZS9TYW1wbGlu
Z1Rvb2wuY3BwOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1Rvb2w6OmR1bXApOgorICAgICAgICAq
IGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVj
b2RlR2VuZXJhdG9yOjphZGRWYXIpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6
YWRkR2xvYmFsVmFyKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmFkZENvbnN0
YW50KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmFkZENvbnN0YW50VmFsdWUp
OgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdExvYWQpOgorICAgICAgICAo
SlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6YWRkU3RyaW5nQ29uc3RhbnQpOgorICAgICAgICAoSlND
OjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdExhenlOZXdGdW5jdGlvbik6CisgICAgICAgICogYnl0
ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHA6CisgICAgICAgIChKU0M6OlByb3BlcnR5TGlzdE5v
ZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgICogZGVidWdnZXIvRGVidWdnZXIuY3BwOgorICAg
ICAgICAqIGRmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlOjpydW4pOgorICAgICAgICAo
SlNDOjpERkc6OkFyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2U6Om9ic2VydmVCYWRBcmd1bWVu
dHNVc2UpOgorICAgICAgICAoSlNDOjpERkc6OkFyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2U6
Om9ic2VydmVQcm9wZXJBcmd1bWVudHNVc2UpOgorICAgICAgICAoSlNDOjpERkc6OkFyZ3VtZW50
c1NpbXBsaWZpY2F0aW9uUGhhc2U6OmlzT0tUb09wdGltaXplKToKKyAgICAgICAgKEpTQzo6REZH
OjpBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlOjpyZW1vdmVBcmd1bWVudHNSZWZlcmVuY2lu
Z1BoYW50b21DaGlsZCk6CisgICAgICAgICogZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6QXNzZW1ibHlIZWxwZXJzOjpkZWNvZGVkQ29kZU1hcEZvcik6Cisg
ICAgICAgICogZGZnL0RGR0J5dGVDb2RlQ2FjaGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZUNhY2hlOjp+Qnl0ZUNvZGVDYWNoZSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVD
YWNoZTo6Z2V0KToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpjZWxsQ29uc3RhbnQpOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmVTdGFja0VudHJ5
KToKKyAgICAgICAgKiBkZmcvREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2U6OnJ1bik6CisgICAg
ICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlOjpub3RpY2VTdHJ1Y3R1
cmVDaGVjayk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNl
Ojpub3RpY2VDbG9iYmVyKToKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlND
OjpIZWFwOjptYXJrUHJvdGVjdGVkT2JqZWN0cyk6CisgICAgICAgICogaGVhcC9IZWFwLmg6Cisg
ICAgICAgIChKU0M6OkhlYXA6OmZvckVhY2hQcm90ZWN0ZWRDZWxsKToKKyAgICAgICAgKiBoZWFw
L0pJVFN0dWJSb3V0aW5lU2V0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUU3R1YlJvdXRpbmVTZXQ6
Om1hcmtTbG93KToKKyAgICAgICAgKEpTQzo6SklUU3R1YlJvdXRpbmVTZXQ6OmRlbGV0ZVVubWFy
a2VkSmV0dGlzb25lZFN0dWJSb3V0aW5lcyk6CisgICAgICAgICogaGVhcC9NYXJrU3RhY2suY3Bw
OgorICAgICAgICAoSlNDOjpNYXJrU3RhY2s6OmludGVybmFsQXBwZW5kKToKKyAgICAgICAgKiBo
ZWFwL1dlYWsuaDoKKyAgICAgICAgKEpTQzo6d2Vha1JlbW92ZSk6CisgICAgICAgICogaml0L0pJ
VC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGUpOgorICAgICAgICAqIGpp
dC9KSVRTdHVicy5jcHA6CisgICAgICAgIChKU0M6OkpJVFRodW5rczo6Y3RpU3R1Yik6CisgICAg
ICAgICogcGFyc2VyL1BhcnNlci5jcHA6CisgICAgICAgIChKU0M6Ojo6cGFyc2VTdHJpY3RPYmpl
Y3RMaXRlcmFsKToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlLmNwcDoKKyAgICAgICAgKEpT
Qzo6ZnVuY3Rpb25OYW1lQ291bnRQYWlyQ29tcGFyYXRvcik6CisgICAgICAgIChKU0M6OlByb2Zp
bGU6OmRlYnVnUHJpbnREYXRhU2FtcGxlU3R5bGUpOgorICAgICAgICAqIHJ1bnRpbWUvSWRlbnRp
Zmllci5jcHA6CisgICAgICAgIChKU0M6OklkZW50aWZpZXI6OmFkZCk6CisgICAgICAgICogcnVu
dGltZS9KU0FjdGl2YXRpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0FjdGl2YXRpb246OmdldE93
blByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpKU0FjdGl2YXRpb246OnN5bWJvbFRhYmxl
UHV0V2l0aEF0dHJpYnV0ZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5jcHA6CisgICAg
ICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OnB1dCk6CisgICAgICAgIChKU0M6OlNwYXJz
ZUFycmF5VmFsdWVNYXA6OnB1dERpcmVjdCk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFs
dWVNYXA6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU0FycmF5OjplbnRlckRpY3Rp
b25hcnlNb2RlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6ZGVmaW5lT3duTnVtZXJpY1Byb3Bl
cnR5KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk6
CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcik6CisgICAg
ICAgIChKU0M6OkpTQXJyYXk6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgpOgorICAgICAg
ICAoSlNDOjpKU0FycmF5OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aCk6CisgICAg
ICAgIChKU0M6OkpTQXJyYXk6OmRlbGV0ZVByb3BlcnR5QnlJbmRleCk6CisgICAgICAgIChKU0M6
OkpTQXJyYXk6OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpz
ZXRMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpzb3J0KToKKyAgICAgICAgKEpTQzo6
SlNBcnJheTo6Y29tcGFjdEZvclNvcnRpbmcpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpjaGVj
a0NvbnNpc3RlbmN5KToKKyAgICAgICAgKiBydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3Bw
OgorICAgICAgICAoSlNDOjpKU1N5bWJvbFRhYmxlT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVz
KToKKyAgICAgICAgKiBydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaDoKKyAgICAgICAgKEpT
Qzo6c3ltYm9sVGFibGVHZXQpOgorICAgICAgICAoSlNDOjpzeW1ib2xUYWJsZVB1dCk6CisgICAg
ICAgIChKU0M6OnN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMpOgorICAgICAgICAqIHJ1bnRp
bWUvUmVnRXhwQ2FjaGUuY3BwOgorICAgICAgICAoSlNDOjpSZWdFeHBDYWNoZTo6aW52YWxpZGF0
ZUNvZGUpOgorICAgICAgICAqIHJ1bnRpbWUvV2Vha0dDTWFwLmg6CisgICAgICAgIChKU0M6Oldl
YWtHQ01hcDo6Y2xlYXIpOgorICAgICAgICAoSlNDOjpXZWFrR0NNYXA6OnNldCk6CisgICAgICAg
ICogdG9vbHMvUHJvZmlsZVRyZWVOb2RlLmg6CisgICAgICAgIChKU0M6OlByb2ZpbGVUcmVlTm9k
ZTo6c2FtcGxlQ2hpbGQpOgorICAgICAgICAoSlNDOjpQcm9maWxlVHJlZU5vZGU6OmNoaWxkQ291
bnQpOgorICAgICAgICAoSlNDOjpQcm9maWxlVHJlZU5vZGU6OmR1bXBJbnRlcm5hbCk6CisgICAg
ICAgIChKU0M6OlByb2ZpbGVUcmVlTm9kZTo6Y29tcGFyZUVudHJpZXMpOgorCiAyMDEyLTA4LTI3
ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CiAKICAgICAgICAgUmVt
b3ZlIHVzZSBvZiBDbGFzc0luZm8gZnJvbSBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFs
T25Bcmd1bWVudHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dU
Ri9DaGFuZ2VMb2cKaW5kZXggMjYwMmIzOTk2MDYyZjM4ZGNlOTQ0ZWM2MWQ3M2YyZTdmMDc4YzQ0
OC4uMjY4ODMyNmM3NTZlZDBlYzRiZDU4MjRkZGU4YjU2Y2JkMDRhMmE5NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSw1NyBAQAorMjAxMi0wOC0yNyAgQ2FpbyBNYXJjZWxvIGRlIE9saXZlaXJhIEZpbGhvICA8Y2Fp
by5vbGl2ZWlyYUBvcGVuYm9zc2Eub3JnPgorCisgICAgICAgIFJlbmFtZSBmaXJzdC9zZWNvbmQg
dG8ga2V5L3ZhbHVlIGluIEhhc2hNYXAgaXRlcmF0b3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Mjc4NAorCisgICAgICAgIFJldmlld2VkIGJ5IEVy
aWMgU2VpZGVsLgorCisgICAgICAgICogd3RmL0hhc2hDb3VudGVkU2V0Lmg6CisgICAgICAgIChX
VEY6Ojo6YWRkKToKKyAgICAgICAgKFdURjo6OjpyZW1vdmUpOgorICAgICAgICAoV1RGOjpjb3B5
VG9WZWN0b3IpOgorICAgICAgICAqIHd0Zi9IYXNoSXRlcmF0b3JzLmg6CisgICAgICAgIChXVEY6
Okhhc2hUYWJsZUNvbnN0S2V5c0l0ZXJhdG9yOjpnZXQpOgorICAgICAgICAoV1RGOjpIYXNoVGFi
bGVDb25zdFZhbHVlc0l0ZXJhdG9yOjpnZXQpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGVWYWx1
ZXNJdGVyYXRvcjo6Z2V0KToKKyAgICAgICAgKiB3dGYvSGFzaE1hcC5oOgorICAgICAgICAoV1RG
OjpLZXlWYWx1ZVBhaXJLZXlFeHRyYWN0b3I6OmV4dHJhY3QpOgorICAgICAgICAoV1RGOjpIYXNo
TWFwVmFsdWVUcmFpdHM6OmlzRW1wdHlWYWx1ZSk6CisgICAgICAgIChXVEY6Okhhc2hNYXBUcmFu
c2xhdG9yOjp0cmFuc2xhdGUpOgorICAgICAgICAoV1RGOjpIYXNoTWFwVHJhbnNsYXRvckFkYXB0
ZXI6OnRyYW5zbGF0ZSk6CisgICAgICAgIChXVEY6Ojo6c2V0KToKKyAgICAgICAgKFdURjo6Ojpn
ZXQpOgorICAgICAgICAoV1RGOjo6OnRha2UpOgorICAgICAgICAoV1RGOjpvcGVyYXRvcj09KToK
KyAgICAgICAgKFdURjo6ZGVsZXRlQWxsVmFsdWVzKToKKyAgICAgICAgKFdURjo6ZGVsZXRlQWxs
S2V5cyk6CisgICAgICAgIFJlbW92ZSBkZWxldGVBbGxQYWlyRmlyc3RzL1NlY29uZHMuCisKKyAg
ICAgICAgKiB3dGYvSGFzaFRhYmxlLmg6CisgICAgICAgIChXVEY6Omhhc2hUYWJsZVN3YXApOgor
ICAgICAgICAoV1RGOjo6OmNoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUpOgorICAgICAg
ICAqIHd0Zi9IYXNoVHJhaXRzLmg6CisgICAgICAgIChXVEY6OktleVZhbHVlUGFpcjo6S2V5VmFs
dWVQYWlyKToKKyAgICAgICAgKEtleVZhbHVlUGFpcik6CisgICAgICAgIChXVEY6OktleVZhbHVl
UGFpckhhc2hUcmFpdHM6OmNvbnN0cnVjdERlbGV0ZWRWYWx1ZSk6CisgICAgICAgIChXVEY6Oktl
eVZhbHVlUGFpckhhc2hUcmFpdHM6OmlzRGVsZXRlZFZhbHVlKToKKyAgICAgICAgKiB3dGYvTWV0
YUFsbG9jYXRvci5jcHA6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmFkZEZyZWVTcGFj
ZSk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmluY3JlbWVudFBhZ2VPY2N1cGFuY3kp
OgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjpkZWNyZW1lbnRQYWdlT2NjdXBhbmN5KToK
KyAgICAgICAgKiB3dGYvUmVmQ291bnRlZExlYWtDb3VudGVyLmNwcDoKKyAgICAgICAgKFdURjo6
UmVmQ291bnRlZExlYWtDb3VudGVyOjp+UmVmQ291bnRlZExlYWtDb3VudGVyKToKKyAgICAgICAg
KiB3dGYvUmVmUHRySGFzaE1hcC5oOgorICAgICAgICAoV1RGOjo6OnNldCk6CisgICAgICAgIChX
VEY6Ojo6Z2V0KToKKyAgICAgICAgKFdURjo6OjppbmxpbmVHZXQpOgorICAgICAgICAoV1RGOjo6
OnRha2UpOgorICAgICAgICAqIHd0Zi9TcGVjdHJ1bS5oOgorICAgICAgICAoV1RGOjpTcGVjdHJ1
bTo6YWRkKToKKyAgICAgICAgKFdURjo6U3BlY3RydW06OmdldCk6CisgICAgICAgIChXVEY6OlNw
ZWN0cnVtOjpidWlsZExpc3QpOgorICAgICAgICAqIHd0Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHA6
CisgICAgICAgIChXVEY6OmlkZW50aWZpZXJCeVB0aHJlYWRIYW5kbGUpOgorCiAyMDEyLTA4LTI3
ICBCZW5qYW1pbiBQb3VsYWluICA8YmVuamFtaW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBBZGQg
RUNNQVNjcmlwdCBOdW1iZXIgdG8gU3RyaW5nIGNvbnZlcnNpb24gdG8gV1RGOjpTdHJpbmcKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwppbmRleCBmNTFjNTRlNTFlNDdlMDdiMmRhNTg3ZjVkMjMxNDc3MzA3YjhhZDk2Li41ZDQw
YzkwNmU2NzAwY2M5NjMzM2YzNjc0YzQ4YTZkMDYyZTAwN2E4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsODY3IEBACisyMDEyLTA4LTI3ICBDYWlvIE1hcmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gIDxj
YWlvLm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+CisKKyAgICAgICAgUmVuYW1lIGZpcnN0L3NlY29u
ZCB0byBrZXkvdmFsdWUgaW4gSGFzaE1hcCBpdGVyYXRvcnMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyNzg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
RXJpYyBTZWlkZWwuCisKKyAgICAgICAgKiBNb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9u
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uOjpXYXRjaGVyczo6ZmluZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvbjo6V2F0Y2hlcnM6OnJlbW92ZSk6CisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SURCRGF0YWJhc2U6Om9iamVjdFN0b3JlTmFtZXMpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0
YWJhc2VCYWNrZW5kSW1wbDo6bWV0YWRhdGEpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJGYWN0b3J5
QmFja2VuZEltcGw6OmRlbGV0ZURhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkZhY3Rv
cnlCYWNrZW5kSW1wbDo6b3BlbkJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJG
YWN0b3J5QmFja2VuZEltcGw6Om9wZW4pOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lE
Qk9iamVjdFN0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjppbmRl
eE5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpwdXQpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklE
Qk9iamVjdFN0b3JlOjpkZWxldGVJbmRleCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjptZXRhZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjptYWtlSW5k
ZXhXcml0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6
OmRlbGV0ZUludGVybmFsKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2Fj
dGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6b2JqZWN0U3RvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246Om9iamVjdFN0b3JlRGVsZXRlZCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6b25BYm9ydCk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6ZGlzcGF0Y2hFdmVudCk6CisgICAgICAgICogTW9kdWxl
cy93ZWJkYXRhYmFzZS9BYnN0cmFjdERhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFi
c3RyYWN0RGF0YWJhc2U6OnBlcmZvcm1PcGVuQW5kVmVyaWZ5KToKKyAgICAgICAgKiBNb2R1bGVz
L3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRh
YmFzZVRyYWNrZXI6OmludGVycnVwdEFsbERhdGFiYXNlc0ZvckNvbnRleHQpOgorICAgICAgICAq
IE1vZHVsZXMvd2ViZGF0YWJhc2UvT3JpZ2luVXNhZ2VSZWNvcmQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6T3JpZ2luVXNhZ2VSZWNvcmQ6OmRpc2tVc2FnZSk6CisgICAgICAgICogTW9kdWxlcy93
ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OmFjcXVpcmVMb2NrKToKKyAgICAgICAgKFdl
YkNvcmU6OlNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OnJlbGVhc2VMb2NrKToKKyAgICAgICAg
KFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OnNodXRkb3duKToKKyAgICAgICAg
KiBNb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL0RhdGFiYXNlVHJhY2tlckNocm9taXVtLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6aW50ZXJydXB0QWxsRGF0YWJh
c2VzRm9yQ29udGV4dCk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9jaHJvbWl1bS9R
dW90YVRyYWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UXVvdGFUcmFja2VyOjpnZXREYXRh
YmFzZVNpemVBbmRTcGFjZUF2YWlsYWJsZVRvT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OlF1
b3RhVHJhY2tlcjo6dXBkYXRlRGF0YWJhc2VTaXplKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYnNv
Y2tldHMvV2ViU29ja2V0RGVmbGF0ZUZyYW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJT
b2NrZXRFeHRlbnNpb25EZWZsYXRlRnJhbWU6OnByb2Nlc3NSZXNwb25zZSk6CisgICAgICAgICog
TW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViU29ja2V0RXh0ZW5zaW9uRGlzcGF0Y2hlcjo6YXBwZW5kQWNjZXB0
ZWRFeHRlbnNpb24pOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjp+QVhPYmplY3RDYWNoZSk6CisgICAg
ICAgICogYmluZGluZ3MvZ29iamVjdC9ET01PYmplY3RDYWNoZS5jcHA6CisgICAgICAgIChXZWJL
aXQ6OkRPTU9iamVjdENhY2hlOjpjbGVhckJ5RnJhbWUpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0RPTU9iamVjdEhhc2hUYWJsZU1hcC5oOgorICAgICAgICAoV2ViQ29yZTo6RE9NT2JqZWN0SGFz
aFRhYmxlTWFwOjp+RE9NT2JqZWN0SGFzaFRhYmxlTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkRP
TU9iamVjdEhhc2hUYWJsZU1hcDo6Z2V0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUJp
bmRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2FjaGVET01TdHJ1Y3R1cmUpOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkpTRE9NR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0RPTUdsb2JhbE9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6Z2V0RE9NQ29uc3RydWN0
b3IpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpQYWdlU2NyaXB0RGVidWdTZXJ2ZXI6OmFkZExpc3RlbmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBhZ2VTY3JpcHREZWJ1Z1NlcnZlcjo6cmVtb3ZlTGlzdGVuZXIpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdENhY2hlZEZyYW1lRGF0YS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTY3JpcHRDYWNoZWRGcmFtZURhdGE6OlNjcmlwdENhY2hlZEZyYW1lRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDYWNoZWRGcmFtZURhdGE6OnJlc3RvcmUpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U2NyaXB0Q29udHJvbGxlcjo6flNjcmlwdENvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6U2NyaXB0Q29udHJvbGxlcjo6Y2xlYXJXaW5kb3dTaGVsbCk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JpcHRDb250cm9sbGVyOjphdHRhY2hEZWJ1Z2dlcik6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JpcHRDb250cm9sbGVyOjp1cGRhdGVEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jp
cHRDb250cm9sbGVyOjpjcmVhdGVSb290T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlw
dENvbnRyb2xsZXI6OmNvbGxlY3RJc29sYXRlZENvbnRleHRzKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcmlwdENvbnRyb2xsZXI6OmNsZWFudXBTY3JpcHRPYmplY3RzRm9yUGx1Z2luKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmNsZWFyU2NyaXB0T2JqZWN0cyk6CisgICAg
ICAgICogYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5oOgorICAgICAgICAoV2ViQ29yZTo6
U2NyaXB0Q29udHJvbGxlcjo6d2luZG93U2hlbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0
Q29udHJvbGxlcjo6ZXhpc3RpbmdXaW5kb3dTaGVsbCk6CisgICAgICAgICogYmluZGluZ3MvanMv
U2NyaXB0RGVidWdTZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2
ZXI6OnNldEJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6
OnJlbW92ZUJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6
Omhhc0JyZWFrcG9pbnQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRW
YWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZVNlcmlhbGl6ZXI6OmNoZWNrRm9yRHVw
bGljYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lU2VyaWFsaXplcjo6ZHVtcElmVGVybWlu
YWwpOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVTZXJpYWxpemVyOjp3cml0ZSk6CisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06CisgICAgICAgIChHZW5lcmF0
ZUltcGxlbWVudGF0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhG
bG9hdDY0QXJyYXkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhGbG9hdDY0QXJyYXk6OkdldFJh
d1RlbXBsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RmxvYXQ2NEFycmF5OjpHZXRUZW1wbGF0
ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEFjdGl2ZURPTU9i
amVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RBY3RpdmVET01PYmplY3Q6OkdldFJh
d1RlbXBsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdEFjdGl2ZURPTU9iamVjdDo6R2V0
VGVtcGxhdGUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RDdXN0
b21OYW1lZEdldHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RDdXN0b21OYW1lZEdl
dHRlcjo6R2V0UmF3VGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0Q3VzdG9tTmFt
ZWRHZXR0ZXI6OkdldFRlbXBsYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VjgvVjhUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RF
dmVudENvbnN0cnVjdG9yOjpHZXRSYXdUZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOFRl
c3RFdmVudENvbnN0cnVjdG9yOjpHZXRUZW1wbGF0ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50VGFyZ2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4
VGVzdEV2ZW50VGFyZ2V0OjpHZXRSYXdUZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOFRl
c3RFdmVudFRhcmdldDo6R2V0VGVtcGxhdGUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOFRlc3RFeGNlcHRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0RXhj
ZXB0aW9uOjpHZXRSYXdUZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RFeGNlcHRp
b246OkdldFRlbXBsYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhU
ZXN0SW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdEludGVyZmFjZTo6R2V0
UmF3VGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0SW50ZXJmYWNlOjpHZXRUZW1w
bGF0ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE1lZGlhUXVl
cnlMaXN0TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lcjo6R2V0UmF3VGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0TWVk
aWFRdWVyeUxpc3RMaXN0ZW5lcjo6R2V0VGVtcGxhdGUpOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9WOC9WOFRlc3ROYW1lZENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlY4VGVzdE5hbWVkQ29uc3RydWN0b3I6OkdldFJhd1RlbXBsYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OlY4VGVzdE5hbWVkQ29uc3RydWN0b3I6OkdldFRlbXBsYXRlKToKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Tm9kZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpWOFRlc3ROb2RlOjpHZXRSYXdUZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RO
b2RlOjpHZXRUZW1wbGF0ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4
VGVzdE9iai5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RPYmo6OkdldFJhd1RlbXBsYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdE9iajo6R2V0VGVtcGxhdGUpOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlOjpHZXRSYXdUZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OkdldFRlbXBsYXRlKToKKyAgICAgICAgKiBiaW5k
aW5ncy92OC9ET01XcmFwcGVyV29ybGQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NV3JhcHBl
cldvcmxkOjpkZWFsbG9jYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVdyYXBwZXJXb3JsZDo6
Z2V0T3JDcmVhdGVJc29sYXRlZFdvcmxkKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9OUFY4T2Jq
ZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZyZWVWOE5QT2JqZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6Om5wQ3JlYXRlVjhTY3JpcHRPYmplY3QpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Nj
cmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6
Y2xlYXJTY3JpcHRPYmplY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6
OnJlc2V0SXNvbGF0ZWRXb3JsZHMpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxl
cjo6ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29u
dHJvbGxlcjo6c2V0SXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2luKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdENvbnRyb2xsZXI6OmNsZWFudXBTY3JpcHRPYmplY3RzRm9yUGx1Z2luKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmNvbGxlY3RJc29sYXRlZENvbnRleHRz
KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L1Y4RE9NTWFwLmg6CisgICAgICAgIChXZWJDb3JlOjpXZWFrUmVm
ZXJlbmNlTWFwOjpyZW1vdmVJZlByZXNlbnQpOgorICAgICAgICAoV2ViQ29yZTo6V2Vha1JlZmVy
ZW5jZU1hcDo6dmlzaXQpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmVudW1lcmF0ZUdsb2JhbEhhbmRsZXMpOgorICAgICAgICAq
IGJpbmRpbmdzL3Y4L1Y4UGVyQ29udGV4dERhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhQ
ZXJDb250ZXh0RGF0YTo6ZGlzcG9zZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvbnBydW50aW1l
LmNwcDoKKyAgICAgICAgKiBicmlkZ2UvSWRlbnRpZmllclJlcC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJZGVudGlmaWVyUmVwOjpnZXQpOgorICAgICAgICAqIGJyaWRnZS9OUF9qc29iamVjdC5j
cHA6CisgICAgICAgIChPYmplY3RNYXA6OmFkZCk6CisgICAgICAgIChPYmplY3RNYXA6OnJlbW92
ZSk6CisgICAgICAgICogYnJpZGdlL2puaS9qc2MvSmF2YUNsYXNzSlNDLmNwcDoKKyAgICAgICAg
KEphdmFDbGFzczo6fkphdmFDbGFzcyk6CisgICAgICAgICogYnJpZGdlL3F0L3F0X2luc3RhbmNl
LmNwcDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OldlYWtNYXA6OnNldCk6CisgICAgICAgICog
YnJpZGdlL3J1bnRpbWVfcm9vdC5jcHA6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpSb290T2Jq
ZWN0OjppbnZhbGlkYXRlKToKKyAgICAgICAgKiBjc3MvQ1NTQ2FudmFzVmFsdWUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTQ2FudmFzVmFsdWU6OmNhbnZhc0NoYW5nZWQpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTQ2FudmFzVmFsdWU6OmNhbnZhc1Jlc2l6ZWQpOgorICAgICAgICAqIGNzcy9D
U1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y291bnRl
clRvQ1NTVmFsdWUpOgorICAgICAgICAqIGNzcy9DU1NDcm9zc2ZhZGVWYWx1ZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NDcm9zc2ZhZGVWYWx1ZTo6Y3Jvc3NmYWRlQ2hhbmdlZCk6CisgICAg
ICAgICogY3NzL0NTU0ZvbnRGYWNlU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0Zv
bnRGYWNlU291cmNlOjpnZXRGb250RGF0YSk6CisgICAgICAgICogY3NzL0NTU0ZvbnRTZWxlY3Rv
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250U2VsZWN0b3I6OmFkZEZvbnRGYWNlUnVs
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250U2VsZWN0b3I6OmdldEZvbnREYXRhKToKKyAg
ICAgICAgKiBjc3MvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjphZGRDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6cmVtb3ZlQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU0ltYWdlR2VuZXJhdG9yVmFsdWU6OmdldEltYWdlKToKKyAgICAgICAgKiBjc3MvQ1NTU2Vn
bWVudGVkRm9udEZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU2VnbWVudGVkRm9udEZh
Y2U6OmdldEZvbnREYXRhKToKKyAgICAgICAgKiBjc3MvQ1NTU2VsZWN0b3IuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTU2VsZWN0b3I6OnBhcnNlUHNldWRvVHlwZSk6CisgICAgICAgICogY3Nz
L0NTU1ZhbHVlUG9vbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NWYWx1ZVBvb2w6OmNyZWF0
ZUNvbG9yVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVmFsdWVQb29sOjpjcmVhdGVGb250
RmFtaWx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVmFsdWVQb29sOjpjcmVhdGVGb250
RmFjZVZhbHVlKToKKyAgICAgICAgKiBjc3MvUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9u
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6
Y2xvbmVBbmRDYWNoZUZvckNTU09NKToKKyAgICAgICAgKiBjc3MvU3R5bGVCdWlsZGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlDb3VudGVyOjphcHBseUluaGVyaXRWYWx1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Q291bnRlcjo6YXBwbHlWYWx1ZSk6
CisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSZXNvbHZlcjo6Y29sbGVjdEZlYXR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVz
b2x2ZXI6OnJ1bGVTZXRGb3JTY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
OjphcHBlbmRBdXRob3JTdHlsZXNoZWV0cyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjpzd2VlcE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KToKKyAgICAgICAgKiBjc3Mv
U3R5bGVTaGVldENvbnRlbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRDb250
ZW50czo6cGFyc2VyQWRkTmFtZXNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRD
b250ZW50czo6ZGV0ZXJtaW5lTmFtZXNwYWNlKToKKyAgICAgICAgKiBkb20vQ2hlY2tlZFJhZGlv
QnV0dG9ucy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaGVja2VkUmFkaW9CdXR0b25zOjphZGRC
dXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6Q2hlY2tlZFJhZGlvQnV0dG9uczo6cmVtb3ZlQnV0
dG9uKToKKyAgICAgICAgKiBkb20vQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdGlvblJv
dXRlcjo6Y2hpbGRBZGRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RNdXRhdGlvblNj
b3BlOjpNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlcjo6d2lsbFJlbW92ZUNoaWxkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0aW9u
Um91dGVyOjppbmNyZW1lbnRTY29waW5nTGV2ZWwpOgorICAgICAgICAoV2ViQ29yZTo6Q2hpbGRM
aXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXI6OmRlY3JlbWVudFNj
b3BpbmdMZXZlbCk6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50OjpwYWdlR3JvdXBVc2VyU2hlZXRzKToKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50Ojp3aW5kb3dOYW1lZEl0ZW1zKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpk
b2N1bWVudE5hbWVkSXRlbXMpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmdldENTU0Nh
bnZhc0VsZW1lbnQpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjptYXJrZXJDb250
YWluaW5nUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
OjpyZW5kZXJlZFJlY3RzRm9yTWFya2Vycyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1h
cmtlckNvbnRyb2xsZXI6OnJlbW92ZU1hcmtlcnMpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyOjpyZXBhaW50TWFya2Vycyk6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmludmFsaWRhdGVSZW5kZXJlZFJlY3RzRm9yTWFya2Vy
c0luUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnNo
b3dNYXJrZXJzKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnRPcmRlcmVkTWFwLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRvY3VtZW50T3JkZXJlZE1hcDo6cmVtb3ZlKToKKyAgICAgICAgKiBkb20v
RWxlbWVudEF0dHJpYnV0ZURhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZW5zdXJlQXR0ckxp
c3RGb3JFbGVtZW50KToKKyAgICAgICAgKiBkb20vRXZlbnREaXNwYXRjaGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50UmVsYXRlZFRhcmdldEFkanVzdGVyOjpmaW5kUmVsYXRlZFRhcmdl
dCk6CisgICAgICAgICogZG9tL0V2ZW50TGlzdGVuZXJNYXAuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RXZlbnRMaXN0ZW5lck1hcDo6ZXZlbnRUeXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpFdmVu
dExpc3RlbmVyTWFwOjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRMaXN0ZW5lck1hcDo6
cmVtb3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50TGlzdGVuZXJNYXA6OmZpbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6RXZlbnRMaXN0ZW5lck1hcDo6cmVtb3ZlRmlyc3RFdmVudExpc3RlbmVy
Q3JlYXRlZEZyb21NYXJrdXApOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRMaXN0ZW5lck1hcDo6
Y29weUV2ZW50TGlzdGVuZXJzTm90Q3JlYXRlZEZyb21NYXJrdXBUb1RhcmdldCk6CisgICAgICAg
IChXZWJDb3JlOjpFdmVudExpc3RlbmVySXRlcmF0b3I6Om5leHRMaXN0ZW5lcik6CisgICAgICAg
ICogZG9tL0lkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
ZFRhcmdldE9ic2VydmVyUmVnaXN0cnk6OmFkZE9ic2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OklkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeTo6cmVtb3ZlT2JzZXJ2ZXIpOgorICAgICAgICAqIGRv
bS9NZW1vcnlJbnN0cnVtZW50YXRpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lbW9yeUluc3Ry
dW1lbnRhdGlvbjo6YWRkSW5zdHJ1bWVudGVkTWFwRW50cmllcyk6CisgICAgICAgIChXZWJDb3Jl
OjpNZW1vcnlJbnN0cnVtZW50YXRpb246OmFkZEluc3RydW1lbnRlZE1hcFZhbHVlcyk6CisgICAg
ICAgICogZG9tL011dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3VwLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Ok11dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3VwOjppc09sZFZhbHVlUmVxdWVzdGVk
KToKKyAgICAgICAgKFdlYkNvcmU6Ok11dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3VwOjplbnF1
ZXVlTXV0YXRpb25SZWNvcmQpOgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Ok5vZGU6OmR1bXBTdGF0aXN0aWNzKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmNs
ZWFyUmFyZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZUxpc3RzTm9kZURhdGE6OmludmFs
aWRhdGVDYWNoZXMpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Y29sbGVjdE1hdGNoaW5nT2Jz
ZXJ2ZXJzRm9yTXV0YXRpb24pOgorICAgICAgICAqIGRvbS9Ob2RlUmFyZURhdGEuaDoKKyAgICAg
ICAgKFdlYkNvcmU6Ok5vZGVMaXN0c05vZGVEYXRhOjphZGRDYWNoZVdpdGhBdG9taWNOYW1lKToK
KyAgICAgICAgKFdlYkNvcmU6Ok5vZGVMaXN0c05vZGVEYXRhOjphZGRDYWNoZVdpdGhOYW1lKToK
KyAgICAgICAgKFdlYkNvcmU6Ok5vZGVMaXN0c05vZGVEYXRhOjphZGRDYWNoZVdpdGhRdWFsaWZp
ZWROYW1lKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVMaXN0c05vZGVEYXRhOjphZG9wdFRyZWVT
Y29wZSk6CisgICAgICAgICogZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246OmNoZWNrU3R5bGVTaGVldCk6CisgICAg
ICAgICogZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6Y2FuU3VzcGVuZEFjdGl2ZURPTU9iamVjdHMpOgorICAg
ICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6c3VzcGVuZEFjdGl2ZURPTU9i
amVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6cmVzdW1l
QWN0aXZlRE9NT2JqZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250
ZXh0OjpzdG9wQWN0aXZlRE9NT2JqZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFeGVj
dXRpb25Db250ZXh0OjphZGp1c3RNaW5pbXVtVGltZXJJbnRlcnZhbCk6CisgICAgICAgICogZG9t
L1NlbGVjdG9yUXVlcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JRdWVyeUNhY2hl
OjphZGQpOgorICAgICAgICAqIGRvbS9TcGFjZVNwbGl0U3RyaW5nLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNwYWNlU3BsaXRTdHJpbmdEYXRhOjpjcmVhdGUpOgorICAgICAgICAqIGRvbS9TdHls
ZWRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlZEVsZW1lbnQ6OnVwZGF0ZUF0
dHJpYnV0ZVN0eWxlKToKKyAgICAgICAgKiBlZGl0aW5nL21hYy9BbHRlcm5hdGl2ZVRleHRVSUNv
bnRyb2xsZXIubW06CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xs
ZXI6OkFsZXJuYXRpdmVUZXh0Q29udGV4dENvbnRyb2xsZXI6OmFsdGVybmF0aXZlc0ZvckNvbnRl
eHQpOgorICAgICAgICAqIGh0bWwvRm9ybUNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U2F2ZWRGb3JtU3RhdGU6OnNlcmlhbGl6ZVRvKToKKyAgICAgICAgKFdlYkNvcmU6OlNhdmVk
Rm9ybVN0YXRlOjphcHBlbmRDb250cm9sU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2F2ZWRG
b3JtU3RhdGU6OnRha2VDb250cm9sU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2F2ZWRGb3Jt
U3RhdGU6OmdldFJlZmVyZW5jZWRGaWxlUGF0aHMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUtl
eUdlbmVyYXRvcjo6Zm9ybUtleSk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtQ29udHJvbGxlcjo6
Y3JlYXRlU2F2ZWRGb3JtU3RhdGVNYXApOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUNvbnRyb2xs
ZXI6OmZvcm1FbGVtZW50c1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1Db250cm9sbGVy
Ojp0YWtlU3RhdGVGb3JGb3JtRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtQ29udHJv
bGxlcjo6Z2V0UmVmZXJlbmNlZEZpbGVQYXRocyk6CisgICAgICAgICogaHRtbC9IVE1MQ29sbGVj
dGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbkNhY2hlQmFzZTo6YXBw
ZW5kKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMRnJhbWVidWZmZXI6OmdldEF0dGFjaG1lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6cmVtb3ZlQXR0YWNobWVudEZyb21Cb3VuZEZyYW1l
YnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRnJhbWVidWZmZXI6OmNoZWNrU3RhdHVz
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRnJhbWVidWZmZXI6OmRlbGV0ZU9iamVjdEltcGwp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6aW5pdGlhbGl6ZUF0dGFjaG1l
bnRzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkRPTVBhdGNoU3VwcG9ydDo6ZGlmZik6CisgICAgICAgIChXZWJDb3JlOjpET01QYXRjaFN1cHBv
cnQ6OmlubmVyUGF0Y2hDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpET01QYXRjaFN1cHBv
cnQ6OnJlbW92ZUNoaWxkQW5kTW92ZVRvTmV3KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5qZWN0
ZWRTY3JpcHRNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0TWFu
YWdlcjo6aW5qZWN0ZWRTY3JpcHRGb3JJZCk6CisgICAgICAgIChXZWJDb3JlOjpJbmplY3RlZFNj
cmlwdE1hbmFnZXI6OmluamVjdGVkU2NyaXB0SWRGb3IpOgorICAgICAgICAoV2ViQ29yZTo6SW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyOjpkaXNjYXJkSW5qZWN0ZWRTY3JpcHRzRm9yKToKKyAgICAgICAg
KFdlYkNvcmU6OkluamVjdGVkU2NyaXB0TWFuYWdlcjo6cmVsZWFzZU9iamVjdEdyb3VwKToKKyAg
ICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0TWFuYWdlcjo6aW5qZWN0ZWRTY3JpcHRGb3Ip
OgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTZWxlY3RvclByb2ZpbGU6OmNvbW1pdFNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OlNlbGVjdG9yUHJvZmlsZTo6Y29tbWl0U2VsZWN0b3JUaW1lKToKKyAgICAgICAgKFdlYkNv
cmU6OlNlbGVjdG9yUHJvZmlsZTo6dG9JbnNwZWN0b3JPYmplY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OmZvcmNlUHNldWRvU3RhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OmFzSW5zcGVjdG9yU3R5bGVTaGVldCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6YXNzZXJ0U3R5bGVTaGVldEZvcklkKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpkaWRSZW1vdmVET01Ob2RlKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpkaWRNb2RpZnlET01BdHRyKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpyZXNldFBzZXVkb1N0YXRlcyk6CisgICAg
ICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnNvbGVBZ2VudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OnN0b3BUaW1pbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yQ29uc29sZUFnZW50Ojpjb3VudCk6CisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3RvckRPTUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50
Ojpub2RlRm9ySWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OnBlcmZv
cm1TZWFyY2gpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmdldFNlYXJj
aFJlc3VsdHMpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OndpbGxT
ZW5kWE1MSHR0cFJlcXVlc3QpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01TdG9y
YWdlQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50
OjpjbGVhckZyb250ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTVN0b3JhZ2VB
Z2VudDo6ZW5hYmxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTVN0b3JhZ2VBZ2Vu
dDo6c3RvcmFnZUlkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTVN0b3JhZ2VBZ2Vu
dDo6Z2V0RE9NU3RvcmFnZVJlc291cmNlRm9ySWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yRE9NU3RvcmFnZUFnZW50OjpkaWRVc2VET01TdG9yYWdlKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6bWVtb3J5Qnl0ZXNVc2VkQnlTdG9yYWdlQ2FjaGUp
OgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmVuYWJsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjpkYXRhYmFzZUlkKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmZpbmRCeUZpbGVOYW1lKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmRhdGFiYXNlRm9ySWQpOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnRCeVVybCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZW1vdmVCcmVha3BvaW50KToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnJlc29sdmVCcmVha3BvaW50
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNlYXJjaEluQ29u
dGVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpnZXRTY3Jp
cHRTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlk
UGFyc2VTb3VyY2UpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2Vu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9y
TWVtb3J5QWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogaW5zcGVjdG9y
L0luc3BlY3RvclBhZ2VBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjYWNoZWRSZXNvdXJj
ZXNGb3JGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6OmRpZENs
ZWFyV2luZG93T2JqZWN0SW5Xb3JsZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdl
QWdlbnQ6OmZyYW1lRGV0YWNoZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JQcm9m
aWxlckFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclByb2ZpbGVyQWdlbnQ6
OmdldFByb2ZpbGVIZWFkZXJzKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6Z2V0UHJvZmlsZSk6CisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRP
YmplY3RGb3JIZWFkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlc291cmNlQWdl
bnQ6OndpbGxTZW5kUmVxdWVzdCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclN0YXRl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0YXRlOjpnZXRCb29sZWFuKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0YXRlOjpnZXRTdHJpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yU3RhdGU6OmdldExvbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yU3RhdGU6OmdldERvdWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdGF0ZTo6
Z2V0T2JqZWN0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZTo6c3R5bGVXaXRoUHJvcGVydGllcyk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjppbnNwZWN0b3JTdHlsZUZv
cklkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3Rvck9iamVjdEJhc2U6OmdldCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JPYmplY3RCYXNlOjp3cml0ZUpTT04pOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JXb3JrZXJBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JXb3JrZXJB
Z2VudDo6d29ya2VyQ29udGV4dFRlcm1pbmF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yV29ya2VyQWdlbnQ6OmNyZWF0ZVdvcmtlckZyb250ZW5kQ2hhbm5lbHNGb3JFeGlzdGluZ1dv
cmtlcnMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yV29ya2VyQWdlbnQ6OmRlc3Ryb3lX
b3JrZXJGcm9udGVuZENoYW5uZWxzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvTmV0d29ya1Jlc291
cmNlc0RhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1Jlc291cmNlc0RhdGE6OnJl
bW92ZUNhY2hlZFJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtSZXNvdXJjZXNE
YXRhOjpjbGVhcik6CisgICAgICAgICogbG9hZGVyL0Nyb3NzT3JpZ2luQWNjZXNzQ29udHJvbC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjppc1NpbXBsZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVzdCk6
CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVBY2Nlc3NDb250cm9sUHJlZmxpZ2h0UmVxdWVzdCk6
CisgICAgICAgICogbG9hZGVyL0Nyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZUl0ZW06OmFs
bG93c0Nyb3NzT3JpZ2luSGVhZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpDcm9zc09yaWdpblBy
ZWZsaWdodFJlc3VsdENhY2hlOjpjYW5Ta2lwUHJlZmxpZ2h0KToKKyAgICAgICAgKiBsb2FkZXIv
RG9jdW1lbnRMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI6Omdl
dFN1YnJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6c3Vic3Rp
dHV0ZVJlc291cmNlRGVsaXZlcnlUaW1lckZpcmVkKToKKyAgICAgICAgKiBsb2FkZXIvTWFpblJl
c291cmNlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1haW5SZXNvdXJjZUxvYWRlcjo6
ZGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1
bGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2VydmVQ
ZW5kaW5nUmVxdWVzdHMpOgorICAgICAgICAqIGxvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNh
Y2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGU6OnJlbW92ZVJlc291
cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGU6OmNsZWFyU3RvcmFnZUlE
KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGU6OmR1bXApOgorICAgICAgICAq
IGxvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwbGljYXRpb25DYWNoZUdyb3VwOjpkaWRGaW5pc2hMb2FkaW5nTWFuaWZlc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUdyb3VwOjpzdGFydExvYWRpbmdFbnRy
eSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmFkZEVudHJ5KToK
KyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUhvc3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUhvc3Q6OmZpbGxSZXNvdXJjZUxpc3QpOgor
ICAgICAgICAqIGxvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVJlc291cmNlOjplc3RpbWF0ZWRTaXpl
SW5TdG9yYWdlKToKKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0
b3JhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmZp
bmRPckNyZWF0ZUNhY2hlR3JvdXApOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNo
ZVN0b3JhZ2U6OmNhY2hlR3JvdXBGb3JVUkwpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRp
b25DYWNoZVN0b3JhZ2U6OmZhbGxiYWNrQ2FjaGVHcm91cEZvclVSTCk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmVtcHR5KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxp
Y2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZUNvcHlPZkNhY2hlKToKKyAgICAgICAgKiBsb2FkZXIv
YXJjaGl2ZS9BcmNoaXZlRmFjdG9yeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcmNoaXZlRmFj
dG9yeTo6cmVnaXN0ZXJLbm93bkFyY2hpdmVNSU1FVHlwZXMpOgorICAgICAgICAqIGxvYWRlci9j
YWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSYXdS
ZXNvdXJjZTo6Y2FuUmV1c2UpOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJj
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZTo6c3dpdGNoQ2xpZW50c1Rv
UmV2YWxpZGF0ZWRSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZTo6
dXBkYXRlUmVzcG9uc2VBZnRlclJldmFsaWRhdGlvbik6CisgICAgICAgICogbG9hZGVyL2NhY2hl
L0NhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRS
ZXNvdXJjZUNsaWVudFdhbGtlcjo6Q2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIpOgorICAgICAg
ICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDYWNoZWRSZXNvdXJjZUxvYWRlcjo6fkNhY2hlZFJlc291cmNlTG9hZGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0UmVzb3VyY2UpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OnNldEF1dG9Mb2FkSW1hZ2VzKToK
KyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlTG9hZGVyOjpyZW1vdmVDYWNoZWRSZXNv
dXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZUxvYWRlcjo6Z2FyYmFnZUNv
bGxlY3REb2N1bWVudFJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJj
ZUxvYWRlcjo6cmVwb3J0TWVtb3J5VXNhZ2UpOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9NZW1v
cnlDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlDYWNoZTo6cmVtb3ZlUmVzb3Vy
Y2VzV2l0aE9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlDYWNoZTo6Z2V0T3JpZ2lu
c1dpdGhDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlDYWNoZTo6Z2V0U3RhdGlzdGlj
cyk6CisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlDYWNoZTo6cmVwb3J0TWVtb3J5VXNhZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVtb3J5Q2FjaGU6OnNldERpc2FibGVkKToKKyAgICAgICAgKiBs
b2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SWNvbkRhdGFi
YXNlOjpyZW1vdmVBbGxJY29ucyk6CisgICAgICAgIChXZWJDb3JlOjpJY29uRGF0YWJhc2U6Omlj
b25SZWNvcmRDb3VudFdpdGhEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Okljb25EYXRhYmFzZTo6
cGVyZm9ybVBlbmRpbmdSZXRhaW5BbmRSZWxlYXNlT3BlcmF0aW9ucyk6CisgICAgICAgICogcGFn
ZS9ET01XaW5kb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93OjpkaXNwYXRjaEFs
bFBlbmRpbmdCZWZvcmVVbmxvYWRFdmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93
OjpkaXNwYXRjaEFsbFBlbmRpbmdVbmxvYWRFdmVudHMpOgorICAgICAgICAqIHBhZ2UvRXZlbnRI
YW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlVG91Y2hF
dmVudCk6CisgICAgICAgICogcGFnZS9GcmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZTo6aW5qZWN0VXNlclNjcmlwdHMpOgorICAgICAgICAqIHBhZ2UvUGFnZUdyb3VwLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlBhZ2VHcm91cDo6cGFnZUdyb3VwKToKKyAgICAgICAgKFdlYkNvcmU6
OlBhZ2VHcm91cDo6Y2xvc2VMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUdy
b3VwOjpjbGVhckxvY2FsU3RvcmFnZUZvckFsbE9yaWdpbnMpOgorICAgICAgICAoV2ViQ29yZTo6
UGFnZUdyb3VwOjpjbGVhckxvY2FsU3RvcmFnZUZvck9yaWdpbik6CisgICAgICAgIChXZWJDb3Jl
OjpQYWdlR3JvdXA6OnN5bmNMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUdy
b3VwOjphZGRVc2VyU2NyaXB0VG9Xb3JsZCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlR3JvdXA6
OmFkZFVzZXJTdHlsZVNoZWV0VG9Xb3JsZCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlR3JvdXA6
OnJlbW92ZVVzZXJTY3JpcHRGcm9tV29ybGQpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUdyb3Vw
OjpyZW1vdmVVc2VyU3R5bGVTaGVldEZyb21Xb3JsZCk6CisgICAgICAgICogcGFnZS9QYWdlU2Vy
aWFsaXplci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlU2VyaWFsaXplcjo6dXJsRm9yQmxh
bmtGcmFtZSk6CisgICAgICAgICogcGFnZS9TZWN1cml0eVBvbGljeS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTZWN1cml0eVBvbGljeTo6YWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkpOgor
ICAgICAgICAoV2ViQ29yZTo6U2VjdXJpdHlQb2xpY3k6OnJlbW92ZU9yaWdpbkFjY2Vzc1doaXRl
bGlzdEVudHJ5KToKKyAgICAgICAgKiBwYWdlL1NldHRpbmdzLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OnNldEdlbmVyaWNGb250RmFtaWx5TWFwKToKKyAgICAgICAgKFdlYkNvcmU6OmdldEdlbmVy
aWNGb250RmFtaWx5Rm9yU2NyaXB0KToKKyAgICAgICAgKiBwYWdlL1NwZWVjaElucHV0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNwZWVjaElucHV0OjpyZWdpc3Rlckxpc3RlbmVyKToKKyAgICAg
ICAgKiBwYWdlL1dpbmRvd0ZlYXR1cmVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldpbmRvd0Zl
YXR1cmVzOjpib29sRmVhdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpXaW5kb3dGZWF0dXJlczo6
ZmxvYXRGZWF0dXJlKToKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9s
bGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjp1
cGRhdGVBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkNvbnRyb2xsZXJQ
cml2YXRlOjpzdXNwZW5kQW5pbWF0aW9uc0ZvckRvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpyZXN1bWVBbmltYXRpb25zRm9yRG9jdW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6Om51bWJlck9m
QWN0aXZlQW5pbWF0aW9ucyk6CisgICAgICAgICogcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5p
bWF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlvbjo6Y2xlYXJS
ZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb246OnVwZGF0ZVRy
YW5zaXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRl
S2V5ZnJhbWVBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlv
bjo6YW5pbWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb246OmdldEFu
aW1hdGVkU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjpzZXRB
bmltYXRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjp0aW1lVG9O
ZXh0U2VydmljZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb246OmdldEFu
aW1hdGlvbkZvclByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlv
bjo6c3VzcGVuZEFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0
aW9uOjpyZXN1bWVBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1h
dGlvbjo6b3ZlcnJpZGVJbXBsaWNpdEFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29t
cG9zaXRlQW5pbWF0aW9uOjpyZXN1bWVPdmVycmlkZGVuSW1wbGljaXRBbmltYXRpb25zKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlvbjo6aXNBbmltYXRpbmdQcm9wZXJ0eSk6
CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb246Om51bWJlck9mQWN0aXZlQW5p
bWF0aW9ucyk6CisgICAgICAgICogcGxhdGZvcm0vTGFuZ3VhZ2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6bGFuZ3VhZ2VEaWRDaGFuZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL01JTUVUeXBlUmVn
aXN0cnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TUlNRVR5cGVSZWdpc3RyeTo6Z2V0Tm9ybWFs
aXplZE1JTUVUeXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9IUlRGRWxldmF0aW9uLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmdldENvbmNhdGVuYXRlZEltcHVsc2VSZXNwb25zZXNGb3JT
dWJqZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ibGFja2JlcnJ5L0Nvb2tpZU1hbmFnZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q29va2llTWFuYWdlcjo6Z2VuZXJhdGVIdG1sRnJhZ21lbnRG
b3JDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZU1hbmFnZXI6OnJlbW92ZUFsbENv
b2tpZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2JsYWNrYmVycnkvQ29va2llTWFwLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb2tpZU1hcDo6cmVtb3ZlT2xkZXN0Q29va2llKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb2tpZU1hcDo6Z2V0QWxsQ2hpbGRDb29raWVzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9jZi9CaW5hcnlQcm9wZXJ0eUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmluYXJ5
UHJvcGVydHlMaXN0UGxhbjo6d3JpdGVJbnRlZ2VyQXJyYXkpOgorICAgICAgICAqIHBsYXRmb3Jt
L2Nocm9taXVtL3N1cHBvcnQvV2ViSFRUUExvYWRJbmZvLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
YWRkSGVhZGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlVSTFJl
cXVlc3QuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxSZXF1ZXN0Ojp2aXNpdEhUVFBIZWFk
ZXJGaWVsZHMpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVVJMUmVz
cG9uc2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxSZXNwb25zZTo6YWRkSFRUUEhlYWRl
ckZpZWxkKToKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMUmVzcG9uc2U6OnZpc2l0SFRUUEhlYWRl
ckZpZWxkcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25p
dG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlSZWZyZXNoTW9uaXRvck1hbmFnZXI6
OmVuc3VyZU1vbml0b3JGb3JDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheVJlZnJl
c2hNb25pdG9yTWFuYWdlcjo6dW5yZWdpc3RlckNsaWVudCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0
Q2FjaGVkRm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6Omdl
dENhY2hlZEZvbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6cmVsZWFzZUZv
bnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnRE
YXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2VUcmVlTm9kZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpHbHlwaFBhZ2VUcmVlTm9kZTo6dHJlZUdseXBoUGFnZUNvdW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoUGFnZVRyZWVOb2RlOjpwYWdlQ291bnQpOgorICAg
ICAgICAoV2ViQ29yZTo6R2x5cGhQYWdlVHJlZU5vZGU6OnBydW5lVHJlZUN1c3RvbUZvbnREYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoUGFnZVRyZWVOb2RlOjpwcnVuZVRyZWVGb250RGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaFBhZ2VUcmVlTm9kZTo6cHJ1bmVDdXN0b21Gb250
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaFBhZ2VUcmVlTm9kZTo6cHJ1bmVGb250RGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaFBhZ2VUcmVlTm9kZTo6c2hvd1N1YnRyZWUpOgor
ICAgICAgICAoc2hvd0dseXBoUGFnZVRyZWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9UaWxlZEJhY2tpbmdTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZEJhY2tpbmdT
dG9yZTo6dXBkYXRlVGlsZUJ1ZmZlcnMpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRCYWNraW5n
U3RvcmU6OnJlc2l6ZUVkZ2VUaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZEJhY2tpbmdT
dG9yZTo6c2V0S2VlcFJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRh
dGlvbi9jZi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25DRi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpBVkZXcmFwcGVyOjphdmZXcmFwcGVyRm9yQ2FsbGJhY2tDb250ZXh0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyVGlsZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJUaWxlcjo6bGF5ZXJWaXNpYmlsaXR5Q2hhbmdlZCk6CisgICAgICAg
IChXZWJDb3JlOjpMYXllclRpbGVyOjp1cGxvYWRUZXh0dXJlc0lmTmVlZGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyVGlsZXI6OmFkZFRpbGVKb2IpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJUaWxlcjo6ZGVsZXRlVGV4dHVyZXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlcjo6
cHJ1bmVUZXh0dXJlcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyOjpiaW5kQ29udGVu
dHNUZXh0dXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L1RleHR1
cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVD
YWNoZUNvbXBvc2l0aW5nVGhyZWFkOjp0ZXh0dXJlRm9yVGlsZWRDb250ZW50cyk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZDo6dGV4dHVyZUZvckNvbG9y
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjptb3ZlT3JDb3B5QW5pbWF0aW9ucyk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnBhdXNlQW5pbWF0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6bGF5ZXJEaWREaXNwbGF5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlR2VvbWV0cnkpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjp1cGRhdGVUcmFuc2Zvcm0pOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NMYXllckNBOjp1cGRhdGVDaGlsZHJlblRyYW5zZm9ybSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZU1hc2tzVG9Cb3VuZHMpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjp1cGRhdGVDb250ZW50c1Zpc2liaWxpdHkpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjp1cGRhdGVDb250ZW50c09wYXF1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUJhY2tmYWNlVmlzaWJp
bGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUZpbHRlcnMp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjplbnN1cmVTdHJ1Y3R1cmFsTGF5
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjp1cGRhdGVMYXllckRyYXdz
Q29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUNvbnRl
bnRzSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjp1cGRhdGVDb250
ZW50c1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjp1cGRhdGVNYXNr
TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjp1cGRhdGVMYXllckFu
aW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjpzZXRBbmltYXRp
b25PbkxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6cmVtb3ZlQ0FB
bmltYXRpb25Gcm9tTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjpw
YXVzZUNBQW5pbWF0aW9uT25MYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVy
Q0E6OnN1c3BlbmRBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJD
QTo6cmVzdW1lQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6
OmZpbmRPck1ha2VDbG9uZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnNl
dE9wYWNpdHlJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnVw
ZGF0ZU9wYWNpdHlPbkxheWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMv
VGlsZUNhY2hlLm1tOgorICAgICAgICAoV2ViQ29yZTo6VGlsZUNhY2hlOjpzZXROZWVkc0Rpc3Bs
YXkpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZUNhY2hlOjpzZXRTY2FsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpUaWxlQ2FjaGU6OnNldEFjY2VsZXJhdGVzRHJhd2luZyk6CisgICAgICAgIChXZWJD
b3JlOjpUaWxlQ2FjaGU6OnNldFRpbGVEZWJ1Z0JvcmRlcldpZHRoKToKKyAgICAgICAgKFdlYkNv
cmU6OlRpbGVDYWNoZTo6c2V0VGlsZURlYnVnQm9yZGVyQ29sb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6VGlsZUNhY2hlOjpyZXZhbGlkYXRlVGlsZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwOgorICAgICAgICAoUGxhdGZvcm1DQUxh
eWVyOjphbmltYXRpb25TdGFydGVkKToKKyAgICAgICAgKHJlc3VibWl0QWxsQW5pbWF0aW9ucyk6
CisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXI6OmFuaW1hdGlvbkZvcktleSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENhY2hlQ2hyb21pdW1XaW4uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TG9va3VwQWx0TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpmb250Q29u
dGFpbnNDaGFyYWN0ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Zv
bnRVdGlsc0Nocm9taXVtV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldERlcml2ZWRGb250
RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNo
cm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6cHVzaFBy
b3BlcnRpZXNUbyk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnNldExh
eWVyVHJlZUhvc3QpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjppbnZh
bGlkYXRlQ29udGVudFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVt
OjpzZXRUZXh0dXJlUHJpb3JpdGllcyk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hy
b21pdW06OnJlc2V0VXBkYXRlU3RhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDRGFtYWdlVHJhY2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0RhbWFn
ZVRyYWNrZXI6OnRyYWNrRGFtYWdlRnJvbUxlZnRvdmVyUmVjdHMpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGlyZWN0UmVuZGVyZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q0NEaXJlY3RSZW5kZXJlcjo6ZGVjaWRlUmVuZGVyUGFzc0FsbG9jYXRpb25zRm9y
RnJhbWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
aWxpbmdEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUaWxpbmdEYXRhOjpzZXRC
b3VuZHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6On5DQ0xheWVy
VHJlZUhvc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpzdGFydFJhdGVM
aW1pdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6c3RvcFJhdGVMaW1p
dGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRSZW5kZXJQYXNzQnlJZCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZXNvdXJjZVByb3ZpZGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVzb3VyY2VQcm92aWRlcjo6aW5Vc2VCeUNvbnN1
bWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVzb3VyY2VQcm92aWRlcjo6ZGVsZXRlUmVzb3Vy
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZXNvdXJjZVByb3ZpZGVyOjpkZWxldGVPd25lZFJl
c291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Jlc291cmNlUHJvdmlkZXI6OnJlc291cmNl
VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Jlc291cmNlUHJvdmlkZXI6OnVwbG9hZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ1Jlc291cmNlUHJvdmlkZXI6OmxvY2tGb3JSZWFkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDUmVzb3VyY2VQcm92aWRlcjo6dW5sb2NrRm9yUmVhZCk6CisgICAgICAg
IChXZWJDb3JlOjpDQ1Jlc291cmNlUHJvdmlkZXI6OmxvY2tGb3JXcml0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1Jlc291cmNlUHJvdmlkZXI6OnVubG9ja0ZvcldyaXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDUmVzb3VyY2VQcm92aWRlcjo6ZGVzdHJveUNoaWxkKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDUmVzb3VyY2VQcm92aWRlcjo6Z2V0Q2hpbGRUb1BhcmVudE1hcCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1Jlc291cmNlUHJvdmlkZXI6OnByZXBhcmVTZW5kVG9QYXJlbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NSZXNvdXJjZVByb3ZpZGVyOjpwcmVwYXJlU2VuZFRvQ2hpbGQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NSZXNvdXJjZVByb3ZpZGVyOjpyZWNlaXZlRnJvbUNoaWxkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDUmVzb3VyY2VQcm92aWRlcjo6cmVjZWl2ZUZyb21QYXJlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NSZXNvdXJjZVByb3ZpZGVyOjp0cmFuc2ZlclJlc291cmNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDUmVzb3VyY2VQcm92aWRlcjo6dHJpbU1haWxib3hEZXF1ZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJHbG9iYWxD
b250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUZpbHRlckdsb2JhbENvbnRleHQ6
On5DdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUZp
bHRlckdsb2JhbENvbnRleHQ6OmdldENvbXBpbGVkUHJvZ3JhbSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJQcm9ncmFtLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkN1c3RvbUZpbHRlclByb2dyYW06Om5vdGlmeUNsaWVudHMpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2tpYS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpnZXRDYWNoZWRIYXJmYnV6ekZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6cmVsZWFzZUNh
Y2hlZEhhcmZidXp6RmFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enov
bmcvSGFyZkJ1enpOR0ZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpOR0ZhY2U6
OkhhcmZCdXp6TkdGYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6TkdGYWNlOjp+SGFy
ZkJ1enpOR0ZhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250
RGF0YUNvcmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpnZXRD
RlN0cmluZ0F0dHJpYnV0ZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1w
bGVGb250RGF0YU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpjYW5S
ZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpFeHRlbnNpb25zM0RPcGVuR0xDb21tb246OmdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VB
TkdMRSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4
dDNET3BlbkdMQ29tbW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
Ojpjb21waWxlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRTaGFkZXJpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hh
ZGVySW5mb0xvZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hh
ZGVyU291cmNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvRUdMRGlzcGxh
eU9wZW5WRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFR0xEaXNwbGF5T3BlblZHOjp+RUdMRGlz
cGxheU9wZW5WRyk6CisgICAgICAgIChXZWJDb3JlOjpFR0xEaXNwbGF5T3BlblZHOjpkZXN0cm95
U3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpFR0xEaXNwbGF5T3BlblZHOjpjb250ZXh0Rm9y
U3VyZmFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJHTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFyZWRH
TERhdGE6OmN1cnJlbnRTaGFyZWRHTERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlckdMRGF0YTo6U2hhcmVkR0xEYXRhOjp+U2hhcmVkR0xEYXRhKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OmdldFNoYWRlclByb2dy
YW0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OmdldFNo
YWRlckZvckZpbHRlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udFBs
YXRmb3JtRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaXhlZFNpemVGb250RGF0YTo6Y3Jl
YXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvRGF0YU9iamVjdEd0ay5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpEYXRhT2JqZWN0R3RrOjpmb3JDbGlwYm9hcmQpOgorICAgICAgICAqIHBsYXRm
b3JtL2d0ay9HdGtEcmFnQW5kRHJvcEhlbHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHdGtE
cmFnQW5kRHJvcEhlbHBlcjo6aGFuZGxlR2V0RHJhZ0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
R3RrRHJhZ0FuZERyb3BIZWxwZXI6OmhhbmRsZURyYWdMZWF2ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHdGtEcmFnQW5kRHJvcEhlbHBlcjo6aGFuZGxlRHJhZ01vdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpHdGtEcmFnQW5kRHJvcEhlbHBlcjo6aGFuZGxlRHJhZ0RhdGFSZWNlaXZlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpHdGtEcmFnQW5kRHJvcEhlbHBlcjo6aGFuZGxlRHJhZ0Ryb3ApOgorICAg
ICAgICAqIHBsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0azMuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Z3RrU3R5bGVDaGFuZ2VkQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6Z2V0U3R5bGVD
b250ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMubW06Cisg
ICAgICAgICgrW1dlYlNjcm9sbGJhclByZWZzT2JzZXJ2ZXIgYXBwZWFyYW5jZVByZWZzQ2hhbmdl
ZDpdKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWxTdG9yYWdlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNyZWRlbnRpYWxTdG9yYWdlOjpzZXQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q3JlZGVudGlhbFN0b3JhZ2U6OmdldCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29y
ay9IVFRQSGVhZGVyTWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUVFBIZWFkZXJNYXA6OmNv
cHlEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkhUVFBIZWFkZXJNYXA6OmdldCk6CisgICAgICAg
ICogcGxhdGZvcm0vbmV0d29yay9NSU1FSGVhZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1J
TUVIZWFkZXI6OnBhcnNlSGVhZGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291
cmNlSGFuZGxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpjcmVhdGUp
OgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjphZGRIVFRQSGVhZGVyRmllbGQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6YWRkSFRUUEhlYWRlckZp
ZWxkcyk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlUmVx
dWVzdEJsYWNrQmVycnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Ojp0
YXJnZXRUeXBlRnJvbU1pbWVUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dDo6aW5pdGlhbGl6ZVBsYXRmb3JtUmVxdWVzdCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29y
ay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VGaW5h
bFJlcXVlc3QpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0
Q0ZOZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2V0SGVhZGVyRmllbGRzKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlTWFuYWdlcjo6aW5pdGlhbGl6ZUhhbmRsZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VSZXF1ZXN0TWFjLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Ojpkb1VwZGF0ZVBsYXRmb3JtUmVxdWVzdCk6
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9xdC9SZXNvdXJjZVJlcXVlc3RRdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q6OnRvTmV0d29ya1JlcXVlc3QpOgorICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6c2VuZFJlcXVlc3RDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpS
ZXNvdXJjZUhhbmRsZTo6c2V0Q2xpZW50Q2VydGlmaWNhdGUpOgorICAgICAgICAqIHBsYXRmb3Jt
L25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdDo6dXBkYXRlU291cE1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0Ojp0b1NvdXBNZXNzYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3
b3JrL3NvdXAvUmVzb3VyY2VSZXNwb25zZVNvdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVz
b3VyY2VSZXNwb25zZTo6dG9Tb3VwTWVzc2FnZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29y
ay93aW4vUmVzb3VyY2VIYW5kbGVXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VI
YW5kbGU6OnN0YXJ0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9SdW5Mb29wUXQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UnVuTG9vcDo6VGltZXJCYXNlOjp0aW1lckZpcmVkKToKKyAgICAgICAg
KiBwbGF0Zm9ybS90ZXh0L0xvY2FsZVRvU2NyaXB0TWFwcGluZ0RlZmF1bHQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6c2NyaXB0TmFtZVRvQ29kZSk6CisgICAgICAgIChXZWJDb3JlOjpsb2NhbGVU
b1NjcmlwdENvZGVGb3JGb250U2VsZWN0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1Rl
eHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBydW5lQmxhY2tsaXN0
ZWRDb2RlY3MpOgorICAgICAgICAoV2ViQ29yZTo6ZHVtcFRleHRFbmNvZGluZ05hbWVNYXApOgor
ICAgICAgICAqIHBsYXRmb3JtL3RleHQvdHJhbnNjb2Rlci9Gb250VHJhbnNjb2Rlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGb250VHJhbnNjb2Rlcjo6Y29udmVydGVyVHlwZSk6CisgICAgICAg
ICogcGxhdGZvcm0vdGV4dC93aW4vVGV4dENvZGVjV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Okxhbmd1YWdlTWFuYWdlcjo6TGFuZ3VhZ2VNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6Omdl
dENvZGVQYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY1dpbjo6cmVnaXN0ZXJFeHRl
bmRlZEVuY29kaW5nTmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjV2luOjpyZWdp
c3RlckV4dGVuZGVkQ29kZWNzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY1dpbjo6ZW51
bWVyYXRlU3VwcG9ydGVkRW5jb2RpbmdzKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vQ2xpcGJv
YXJkVXRpbGl0aWVzV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldERhdGFNYXBJdGVtKToK
KyAgICAgICAgKFdlYkNvcmU6OmdldENsaXBib2FyZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
c2V0Q2xpcGJvYXJkRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vd2luL0NsaXBib2FyZFdpbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRXaW46OnR5cGVzKToKKyAgICAgICAgKiBw
bGF0Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjYWNoZWRT
dG9yYWdlRGlyZWN0b3J5KToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vUnVuTG9vcFdpbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSdW5Mb29wOjpUaW1lckJhc2U6OnRpbWVyRmlyZWQpOgorICAg
ICAgICAqIHBsYXRmb3JtL3dpbi9XQ0RhdGFPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
V0NEYXRhT2JqZWN0OjpjcmVhdGVJbnN0YW5jZSk6CisgICAgICAgICogcGxhdGZvcm0vd2luY2Uv
TUlNRVR5cGVSZWdpc3RyeVdpbkNFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1JTUVUeXBlUmVn
aXN0cnk6OmdldFByZWZlcnJlZEV4dGVuc2lvbkZvck1JTUVUeXBlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS93eC9Db250ZXh0TWVudVd4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51
OjphcHBlbmRJdGVtKToKKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNlOjpyZWZyZXNoKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpbkRhdGFiYXNlOjpNSU1FVHlwZUZvckV4dGVuc2lvbik6CisgICAgICAgIChXZWJD
b3JlOjpQbHVnaW5EYXRhYmFzZTo6cmVtb3ZlKToKKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpbk1h
aW5UaHJlYWRTY2hlZHVsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luTWFpblRocmVh
ZFNjaGVkdWxlcjo6c2NoZWR1bGVDYWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbk1haW5U
aHJlYWRTY2hlZHVsZXI6OmRpc3BhdGNoQ2FsbHMpOgorICAgICAgICAqIHBsdWdpbnMvUGx1Z2lu
U3RyZWFtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblN0cmVhbTo6c3RhcnRTdHJlYW0p
OgorICAgICAgICAqIHBsdWdpbnMvYmxhY2tiZXJyeS9QbHVnaW5EYXRhQmxhY2tCZXJyeS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhOjppbml0UGx1Z2lucyk6CisgICAgICAgICog
cGx1Z2lucy93eC9QbHVnaW5EYXRhV3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0
YTo6aW5pdFBsdWdpbnMpOgorICAgICAgICAqIHJlbmRlcmluZy9GbG93VGhyZWFkQ29udHJvbGxl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGbG93VGhyZWFkQ29udHJvbGxlcjo6dW5yZWdpc3Rl
ck5hbWVkRmxvd0NvbnRlbnROb2RlKToKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lRmxvd0Jv
eC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVGbG93Qm94OjpyZXF1aXJlc0lkZW9ncmFw
aGljQmFzZWxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6YWRkVGV4dEJv
eFZpc3VhbE92ZXJmbG93KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmNsZWFyRmxvYXRzKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNl
dExvZ2ljYWxXaWR0aEZvclRleHRSdW4pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3hN
b2RlbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVF1YWxpdHlDb250cm9sbGVy
OjpoaWdoUXVhbGl0eVJlcGFpbnRUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
UXVhbGl0eUNvbnRyb2xsZXI6OnNob3VsZFBhaW50QXRMb3dRdWFsaXR5KToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyQ291bnRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJDb3Vu
dGVyOjpkZXN0cm95Q291bnRlck5vZGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckNvdW50
ZXI6OmRlc3Ryb3lDb3VudGVyTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjp1cGRhdGVDb3VudGVy
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJDb3VudGVyOjpyZW5kZXJlclN0eWxlQ2hhbmdl
ZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6c2V0UmVnaW9uUmFuZ2VGb3JCb3gpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6Z2V0UmVnaW9uUmFuZ2VGb3JCb3gpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6cGVyZm9ybU92ZXJsYXBUZXN0cyk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVySW5mby5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlckluZm86OmZpbHRlckluZm9Gb3JSZW5kZXJMYXll
cik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlckluZm86OmNyZWF0ZUZpbHRl
ckluZm9Gb3JSZW5kZXJMYXllcklmTmVlZGVkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
TmFtZWRGbG93VGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck5hbWVkRmxvd1Ro
cmVhZDo6ZGVwZW5kc09uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck5hbWVkRmxvd1RocmVh
ZDo6cHVzaERlcGVuZGVuY2llcyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZWdpb246OnNldFJlbmRlckJveFJlZ2lvbklu
Zm8pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVnaW9uOjpzZXRSZWdpb25PYmplY3RzUmVn
aW9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVnaW9uOjpyZXN0b3JlUmVnaW9u
T2JqZWN0c09yaWdpbmFsU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVnaW9uOjpj
b21wdXRlQ2hpbGRyZW5TdHlsZUluUmVnaW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
VGFibGVTZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6
Y2FjaGVkQ29sbGFwc2VkQm9yZGVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVN
YWMubW06CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6c3lzdGVtQ29sb3IpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclZpZXc6OnNlbGVjdGlvbkJvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3
OjpzZXRTZWxlY3Rpb24pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyV2lkZ2V0OjpyZXN1bWVXaWRnZXRIaWVyYXJjaHlVcGRh
dGVzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSb290SW5saW5lQm94Ojphc2NlbnRBbmREZXNjZW50Rm9yQm94KToKKyAgICAgICAg
KiByZW5kZXJpbmcvVmVydGljYWxQb3NpdGlvbkNhY2hlLmg6CisgICAgICAgIChXZWJDb3JlOjpW
ZXJ0aWNhbFBvc2l0aW9uQ2FjaGU6OmdldCk6CisgICAgICAgICogcmVuZGVyaW5nL1dyYXBTaGFw
ZUluZm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6V3JhcFNoYXBlSW5mbzo6ZW5zdXJlV3JhcFNo
YXBlSW5mb0ZvclJlbmRlckJsb2NrKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R0lubGluZVRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHSW5saW5lVGV4dDo6
Y2hhcmFjdGVyU3RhcnRzTmV3VGV4dENodW5rKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jl
c291cmNlRmlsdGVyOjpwcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudDo6YXBwbHlSZXNvdXJjZSk6CisgICAgICAgICog
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuOjphcHBseVJlc291cmNlKToKKyAgICAgICAg
KiByZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlc0NhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1Jlc291cmNlc0NhY2hlOjpyZXNvdXJjZURlc3Ryb3llZCk6CisgICAgICAgICogcmVuZGVy
aW5nL3N2Zy9TVkdSb290SW5saW5lQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnN3YXBJdGVt
c0luTGF5b3V0QXR0cmlidXRlcyk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5
b3V0QXR0cmlidXRlcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0TGF5b3V0QXR0cmli
dXRlczo6ZHVtcCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmli
dXRlc0J1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dExheW91dEF0dHJpYnV0
ZXNCdWlsZGVyOjpidWlsZENoYXJhY3RlckRhdGFNYXApOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
VGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyOjpmaWxsQ2hhcmFjdGVyRGF0YU1hcCk6CisgICAg
ICAgICogcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1RleHRMYXlvdXRFbmdpbmU6OmxheW91dFRleHRPbkxpbmVPclBhdGgpOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3NCdWlsZGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1RleHRNZXRyaWNzQnVpbGRlcjo6bWVhc3VyZVRleHRSZW5kZXJlcik6Cisg
ICAgICAgICogc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U3RvcmFnZUFyZWFTeW5jOjpzeW5jVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpTdG9y
YWdlQXJlYVN5bmM6OnBlcmZvcm1JbXBvcnQpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFy
ZWFTeW5jOjpzeW5jKToKKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VNYXAuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U3RvcmFnZU1hcDo6a2V5KToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VN
YXA6OnNldEl0ZW0pOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU5hbWVzcGFjZUltcGw6OmxvY2FsU3RvcmFnZU5h
bWVzcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNlSW1wbDo6Y29weSk6
CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNlSW1wbDo6Y2xvc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6U3RvcmFnZU5hbWVzcGFjZUltcGw6OmNsZWFyQWxsT3JpZ2luc0ZvckRlbGV0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpzeW5jKToKKyAg
ICAgICAgKiBzdmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlQW5pbWF0aW9uRWxlbWVudEZyb21UYXJnZXQp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZW1vdmVBbGxBbmlt
YXRpb25FbGVtZW50c0Zyb21UYXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRG9jdW1lbnRF
eHRlbnNpb25zOjphZGRQZW5kaW5nUmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRG9j
dW1lbnRFeHRlbnNpb25zOjppc0VsZW1lbnRQZW5kaW5nUmVzb3VyY2VzKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlRWxlbWVudEZyb21QZW5kaW5nUmVz
b3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0RvY3VtZW50RXh0ZW5zaW9uczo6c2V0T2ZF
bGVtZW50c1JlZmVyZW5jaW5nVGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0RvY3VtZW50
RXh0ZW5zaW9uczo6cmVtb3ZlQWxsVGFyZ2V0UmVmZXJlbmNlc0ZvckVsZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZW1vdmVBbGxFbGVtZW50UmVmZXJl
bmNlc0ZvclRhcmdldCk6CisgICAgICAgICogc3ZnL1NWR0VsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRWxlbWVudDo6flNWR0VsZW1lbnQpOgorICAgICAgICAqIHN2Zy9hbmltYXRp
b24vU01JTFRpbWVDb250YWluZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWVDb250
YWluZXI6OnVwZGF0ZUFuaW1hdGlvbnMpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFn
ZUNhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlQ2FjaGU6On5TVkdJbWFnZUNh
Y2hlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlQ2FjaGU6OnJlbW92ZUNsaWVudEZyb21D
YWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZUNhY2hlOjpyZXF1ZXN0ZWRTaXplQW5k
U2NhbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlQ2FjaGU6OmltYWdlQ29udGVudENo
YW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2VDYWNoZTo6cmVkcmF3KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0ltYWdlQ2FjaGU6Omxvb2t1cE9yQ3JlYXRlQml0bWFwSW1hZ2VGb3JS
ZW5kZXJlcik6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRl
ci5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6ZWZmZWN0UmVmZXJlbmNl
cyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjphZGRCdWlsdGluRWZmZWN0
cyk6CisgICAgICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eS5oOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRQcm9wZXJ0eTo6flNWR0FuaW1hdGVkUHJvcGVydHkp
OgorICAgICAgICAqIHN2Zy9wcm9wZXJ0aWVzL1NWR0F0dHJpYnV0ZVRvUHJvcGVydHlNYXAuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHQXR0cmlidXRlVG9Qcm9wZXJ0eU1hcDo6YWRkUHJvcGVy
dGllcyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBdHRyaWJ1dGVUb1Byb3BlcnR5TWFwOjpzeW5j
aHJvbml6ZVByb3BlcnRpZXMpOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyQ29udGV4dC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0OjpoYXNQZW5kaW5nQWN0aXZpdHkpOgor
ICAgICAgICAqIHdvcmtlcnMvV29ya2VyRXZlbnRRdWV1ZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpXb3JrZXJFdmVudFF1ZXVlOjpjbG9zZSk6CisgICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpzZXRSZXF1ZXN0SGVhZGVy
SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OmdldEFsbFJlc3Bv
bnNlSGVhZGVycyk6CisgICAgICAgICogeG1sL1hQYXRoRnVuY3Rpb25zLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlhQYXRoOjpjcmVhdGVGdW5jdGlvbik6CisgICAgICAgICogeG1sL1hQYXRoUGFy
c2VyLmNwcDoKKyAgICAgICAgKGlzQXhpc05hbWUpOgorICAgICAgICAqIHhtbC9YU0xUUHJvY2Vz
c29yTGlieHNsdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp4c2x0UGFyYW1BcnJheUZyb21QYXJh
bWV0ZXJNYXApOgorICAgICAgICAqIHhtbC9YU0xUUHJvY2Vzc29yUXQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6WFNMVFByb2Nlc3Nvcjo6dHJhbnNmb3JtVG9TdHJpbmcpOgorCiAyMDEyLTA4LTI3
ICBOaWtoaWwgQmhhcmdhdmEgIDxuYmhhcmdhdmFAZ29vZ2xlLmNvbT4KIAogICAgICAgICBTcGxp
dCBMYXlvdXRUeXBlcy5oIHRvIGltcHJvdmUgY29tcGlsZSB0aW1lCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2JsYWNrYmVycnkvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5
L0NoYW5nZUxvZwppbmRleCBmZmRmZGNhYjA5ZTdlNjAwZjRkMTBjNGRkOGNjN2IxZWI3MDQ2ZjFh
Li41MGVjOGIzYjBjODZmMDJhZjUwNDU0YjQ5MzZmY2M2NDU5NWYyZmYzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOCBAQAorMjAxMi0wOC0yNyAgQ2FpbyBNYXJj
ZWxvIGRlIE9saXZlaXJhIEZpbGhvICA8Y2Fpby5vbGl2ZWlyYUBvcGVuYm9zc2Eub3JnPgorCisg
ICAgICAgIFJlbmFtZSBmaXJzdC9zZWNvbmQgdG8ga2V5L3ZhbHVlIGluIEhhc2hNYXAgaXRlcmF0
b3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Mjc4
NAorCisgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgorCisgICAgICAgICogQXBpL0Jh
Y2tpbmdTdG9yZS5jcHA6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkJhY2tpbmdTdG9y
ZVByaXZhdGU6OnNldEJhY2tpbmdTdG9yZVJlY3QpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2Vi
S2l0OjpCYWNraW5nU3RvcmVQcml2YXRlOjp2aXNpYmxlVGlsZXNSZWN0KToKKyAgICAgICAgKEJs
YWNrQmVycnk6OldlYktpdDo6QmFja2luZ1N0b3JlUHJpdmF0ZTo6cmVzZXRUaWxlcyk6CisgICAg
ICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkJhY2tpbmdTdG9yZVByaXZhdGU6OnVwZGF0ZVRpbGVz
KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6QmFja2luZ1N0b3JlUHJpdmF0ZTo6dXBk
YXRlVGlsZXNGb3JTY3JvbGxPck5vdFJlbmRlcmVkUmVnaW9uKToKKyAgICAgICAgKEJsYWNrQmVy
cnk6OldlYktpdDo6QmFja2luZ1N0b3JlUHJpdmF0ZTo6bWFwRnJvbVRyYW5zZm9ybWVkQ29udGVu
dHNUb1RpbGVzKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50
ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6
OmNhbmNlbCk6CisgICAgICAgIChXZWJDb3JlOjpOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpv
blBlcm1pc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6Tm90aWZpY2F0aW9uUHJlc2VudGVySW1w
bDo6bm90aWZpY2F0aW9uQ2xpY2tlZCk6CisgICAgICAgICogV2ViS2l0U3VwcG9ydC9BYm91dERh
dGEuY3BwOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpkdW1wSlNDVHlwZUNvdW50U2V0
VG9UYWJsZUhUTUwpOgorICAgICAgICAqIFdlYktpdFN1cHBvcnQvRnJhbWVMYXllcnMuY3BwOgor
ICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpGcmFtZUxheWVyczo6cmVtb3ZlTGF5ZXJCeUZy
YW1lKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6RnJhbWVMYXllcnM6OmNvbW1pdE9u
V2ViS2l0VGhyZWFkKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6RnJhbWVMYXllcnM6
OmNhbGN1bGF0ZVJvb3RMYXllcik6CisKIDIwMTItMDgtMjcgIFNoZXJpZmYgQm90ICA8d2Via2l0
LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0
IHIxMjY3NzIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDM4OGIyMjIwOWM5NDk2NTFm
Y2EwY2E4YTY3NDliOGRlZTdiZDM4OWUuLmEwNjcyYzliMWUyZWFkODhiNGUxNzQ1MWQyZmU4ZTll
YWMzY2Q0NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIw
MTItMDgtMjcgIENhaW8gTWFyY2VsbyBkZSBPbGl2ZWlyYSBGaWxobyAgPGNhaW8ub2xpdmVpcmFA
b3BlbmJvc3NhLm9yZz4KKworICAgICAgICBSZW5hbWUgZmlyc3Qvc2Vjb25kIHRvIGtleS92YWx1
ZSBpbiBIYXNoTWFwIGl0ZXJhdG9ycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9ODI3ODQKKworICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4K
KworICAgICAgICAqIHNyYy9XZWJHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5j
cHA6CisgICAgICAgIChXZWJHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlcjo6cmVt
b3ZlKToKKyAgICAgICAgKiBzcmMvV2ViSURCTWV0YWRhdGEuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJJREJNZXRhZGF0YTo6V2ViSURCTWV0YWRhdGEpOgorICAgICAgICAqIHNyYy9XZWJJbnRl
bnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnRlbnQ6OmV4dHJhc1ZhbHVlKToKKyAgICAg
ICAgKiB0ZXN0cy9XZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyVGVzdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpURVNUX0YpOgorCiAyMDEyLTA4LTI0ICBKYW1lcyBSb2JpbnNvbiAgPGphbWVz
ckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBDbGVhbiB1cCBkZXBlbmRlbmNp
ZXMgb2YgV2ViU2Nyb2xsYmFyIGFuZCBXZWJTY3JvbGxiYXJMYXllcgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCmlu
ZGV4IDRhOGJiYjgwZDBiNjNlODEzMjgwZmY0MzkzNGQ1MzVjZjY1NTUxYzAuLjQ4ZWJlM2NkNTFi
ZjI4MjM2NDE4MDEzMmZiYTg1OWQ1Y2YxMmY4YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
ZWZsL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxNyBAQAorMjAxMi0wOC0yNyAgQ2FpbyBNYXJjZWxvIGRlIE9saXZlaXJhIEZpbGhvICA8Y2Fp
by5vbGl2ZWlyYUBvcGVuYm9zc2Eub3JnPgorCisgICAgICAgIFJlbmFtZSBmaXJzdC9zZWNvbmQg
dG8ga2V5L3ZhbHVlIGluIEhhc2hNYXAgaXRlcmF0b3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Mjc4NAorCisgICAgICAgIFJldmlld2VkIGJ5IEVy
aWMgU2VpZGVsLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBw
b3J0RWZsLmNwcDoKKyAgICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6ZXZhbHVhdGVT
Y3JpcHRJbklzb2xhdGVkV29ybGQpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRmb3Jt
U3RyYXRlZ2llc0VmbC5jcHA6CisgICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNFZmw6OmdldFBs
dWdpbkluZm8pOgorICAgICAgICAqIGV3ay9ld2tfaW50ZW50LmNwcDoKKyAgICAgICAgKGV3a19p
bnRlbnRfZXh0cmFfZ2V0KToKKwogMjAxMi0wOC0yNyAgTWlraGFpbCBQb3pkbnlha292ICA8bWlr
aGFpbC5wb3pkbnlha292QGludGVsLmNvbT4KIAogICAgICAgICBSZW5hbWUgUmVnaXN0ZXJQcm90
b2NvbEhhbmRsZXIgQVBJIHRvIE5hdmlnYXRvckNvbnRlbnRVdGlscwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCmlu
ZGV4IDA4MTMwYmNhN2M4YjI1YTgyYzU5NmIwYzMzZGU4NGQ1OTMxZWE1NDMuLjk2MGZhOWU1MmZk
OWU0NWFiNDA0OTI5YzliN2QxYjg2YjM0NDgwOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Z3RrL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxNyBAQAorMjAxMi0wOC0yNyAgQ2FpbyBNYXJjZWxvIGRlIE9saXZlaXJhIEZpbGhvICA8Y2Fp
by5vbGl2ZWlyYUBvcGVuYm9zc2Eub3JnPgorCisgICAgICAgIFJlbmFtZSBmaXJzdC9zZWNvbmQg
dG8ga2V5L3ZhbHVlIGluIEhhc2hNYXAgaXRlcmF0b3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Mjc4NAorCisgICAgICAgIFJldmlld2VkIGJ5IEVy
aWMgU2VpZGVsLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVz
R3RrLmNwcDoKKyAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc0d0azo6Z2V0UGx1Z2luSW5mbyk6
CisgICAgICAgICogd2Via2l0L3dlYmtpdGZhdmljb25kYXRhYmFzZS5jcHA6CisgICAgICAgICh3
ZWJraXRGYXZpY29uRGF0YWJhc2VJbXBvcnRGaW5pc2hlZCk6CisgICAgICAgICogd2Via2l0L3dl
YmtpdHdlYnBsdWdpbi5jcHA6CisgICAgICAgICh3ZWJraXRfd2ViX3BsdWdpbl9nZXRfbWltZXR5
cGVzKToKKwogMjAxMi0wOC0yNyAgTWlraGFpbCBQb3pkbnlha292ICA8bWlraGFpbC5wb3pkbnlh
a292QGludGVsLmNvbT4KIAogICAgICAgICBSZW5hbWUgUmVnaXN0ZXJQcm90b2NvbEhhbmRsZXIg
QVBJIHRvIE5hdmlnYXRvckNvbnRlbnRVdGlscwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9t
YWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCmluZGV4IGI0NjAxZDNk
Yzc2MDA4OTMzMGUzY2FiNjUyNTJlMGJlNTIxOGVkMzkuLjkwMDMwNzViZWZjMWJjMDhjYThjNGMw
NTQ0OTNkZGVhYTlkNmI3ODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NCBAQAorMjAx
Mi0wOC0yNyAgQ2FpbyBNYXJjZWxvIGRlIE9saXZlaXJhIEZpbGhvICA8Y2Fpby5vbGl2ZWlyYUBv
cGVuYm9zc2Eub3JnPgorCisgICAgICAgIFJlbmFtZSBmaXJzdC9zZWNvbmQgdG8ga2V5L3ZhbHVl
IGluIEhhc2hNYXAgaXRlcmF0b3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD04Mjc4NAorCisgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgor
CisgICAgICAgICogSGlzdG9yeS9XZWJIaXN0b3J5Lm1tOgorICAgICAgICAoLVtXZWJIaXN0b3J5
UHJpdmF0ZSByZW1vdmVJdGVtRnJvbURhdGVDYWNoZXM6XSk6CisgICAgICAgICgtW1dlYkhpc3Rv
cnlQcml2YXRlIG9yZGVyZWRMYXN0VmlzaXRlZERheXNdKToKKyAgICAgICAgKFdlYkhpc3RvcnlX
cml0ZXI6OldlYkhpc3RvcnlXcml0ZXIpOgorICAgICAgICAqIE1pc2MvV2ViQ29yZVN0YXRpc3Rp
Y3MubW06CisgICAgICAgICgrW1dlYkNvcmVTdGF0aXN0aWNzIGphdmFTY3JpcHRQcm90ZWN0ZWRP
YmplY3RUeXBlQ291bnRzXSk6CisgICAgICAgICgrW1dlYkNvcmVTdGF0aXN0aWNzIGphdmFTY3Jp
cHRPYmplY3RUeXBlQ291bnRzXSk6CisgICAgICAgICogUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQ
bHVnaW5Ib3N0TWFuYWdlci5tbToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5Ib3N0
TWFuYWdlcjo6aG9zdEZvclBsdWdpbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2lu
SG9zdE1hbmFnZXI6OnBsdWdpbkhvc3REaWVkKToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQ
bHVnaW5Ib3N0TWFuYWdlcjo6ZGlkQ3JlYXRlV2luZG93KToKKyAgICAgICAgKiBQbHVnaW5zL0hv
c3RlZC9OZXRzY2FwZVBsdWdpbkhvc3RQcm94eS5tbToKKyAgICAgICAgKFdlYktpdDo6TmV0c2Nh
cGVQbHVnaW5Ib3N0UHJveHk6OnBsdWdpbkhvc3REaWVkKToKKyAgICAgICAgKiBQbHVnaW5zL0hv
c3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW06CisgICAgICAgIChXZWJLaXQ6Ok5l
dHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6TG9jYWxPYmplY3RNYXA6OmlkRm9yT2JqZWN0KToK
KyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpMb2NhbE9iamVj
dE1hcDo6cmV0YWluKToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVBy
b3h5OjpMb2NhbE9iamVjdE1hcDo6cmVsZWFzZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBl
UGx1Z2luSW5zdGFuY2VQcm94eTo6TG9jYWxPYmplY3RNYXA6OmZvcmdldCk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6ZGVzdHJveSk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6d2ViRnJhbWVEaWRGaW5pc2hMb2Fk
V2l0aFJlYXNvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94
eTo6Y2FuY2VsQ2hlY2tJZkFsbG93ZWRUb0xvYWRVUkwpOgorICAgICAgICAqIFBsdWdpbnMvSG9z
dGVkL1Byb3h5SW5zdGFuY2UubW06CisgICAgICAgIChXZWJLaXQ6OlByb3h5SW5zdGFuY2U6Om1l
dGhvZHNOYW1lZCk6CisgICAgICAgIChXZWJLaXQ6OlByb3h5SW5zdGFuY2U6OmZpZWxkTmFtZWQp
OgorICAgICAgICAqIFBsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5WaWV3Lm1tOgorICAgICAgICAo
LVtXZWJOZXRzY2FwZVBsdWdpblZpZXcgc3RvcFRpbWVyc10pOgorICAgICAgICAoLVtXZWJOZXRz
Y2FwZVBsdWdpblZpZXcgc3RhcnRUaW1lcnNdKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9X
ZWJOb3RpZmljYXRpb25DbGllbnQubW06CisgICAgICAgIChXZWJOb3RpZmljYXRpb25DbGllbnQ6
OnNob3cpOgorICAgICAgICAoV2ViTm90aWZpY2F0aW9uQ2xpZW50OjpjbGVhck5vdGlmaWNhdGlv
bnMpOgorICAgICAgICAoV2ViTm90aWZpY2F0aW9uQ2xpZW50Ojpub3RpZmljYXRpb25PYmplY3RE
ZXN0cm95ZWQpOgorICAgICAgICAqIFdlYlZpZXcvV2ViSFRNTFZpZXcubW06CisgICAgICAgIChj
b21tYW5kTmFtZUZvclNlbGVjdG9yKToKKwogMjAxMi0wOC0yNyAgTWlraGFpbCBQb3pkbnlha292
ICA8bWlraGFpbC5wb3pkbnlha292QGludGVsLmNvbT4KIAogICAgICAgICBSZW5hbWUgUmVnaXN0
ZXJQcm90b2NvbEhhbmRsZXIgQVBJIHRvIE5hdmlnYXRvckNvbnRlbnRVdGlscwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxv
ZwppbmRleCA4YzEzMDY2YjEzNzA2YWZiYjgzMmEwMTEyYzI0NGY0MDExODFmYmM2Li5hOTZmZWFl
NzQ4YzQ2MzY5MzU5OWYxYTRmYjM3ZmRlMDBiMmQ3ZjNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L3F0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE3IEBACisyMDEyLTA4LTI3ICBDYWlvIE1hcmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gIDxj
YWlvLm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+CisKKyAgICAgICAgUmVuYW1lIGZpcnN0L3NlY29u
ZCB0byBrZXkvdmFsdWUgaW4gSGFzaE1hcCBpdGVyYXRvcnMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyNzg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
RXJpYyBTZWlkZWwuCisKKyAgICAgICAgKiBBcGkvcXdlYnBhZ2UuY3BwOgorICAgICAgICAoZXh0
cmFjdENvbnRlbnRUeXBlRnJvbVBsdWdpblZlY3Rvcik6CisgICAgICAgICogQXBpL3F3ZWJwbHVn
aW5kYXRhYmFzZS5jcHA6CisgICAgICAgIChRV2ViUGx1Z2luSW5mbzo6bWltZVR5cGVzKToKKyAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNRdC5jcHA6CisgICAgICAg
IChQbGF0Zm9ybVN0cmF0ZWdpZXNRdDo6Z2V0UGx1Z2luSW5mbyk6CisKIDIwMTItMDgtMjIgIFNo
ZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2
aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMjYyODcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dp
bi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKaW5kZXggMzE5YTc1Y2Vi
YTM2Mzk4NGZlMTE0NDVkNzk0OTM4NjM0ZTM5MDE4NS4uYzg2NzFmODBiNmYxYjkwNTI0Njc3NGQx
NTQyYzAzZjU1MWY0MzAyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDEy
LTA4LTI3ICBDYWlvIE1hcmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gIDxjYWlvLm9saXZlaXJhQG9w
ZW5ib3NzYS5vcmc+CisKKyAgICAgICAgUmVuYW1lIGZpcnN0L3NlY29uZCB0byBrZXkvdmFsdWUg
aW4gSGFzaE1hcCBpdGVyYXRvcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTgyNzg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCisK
KyAgICAgICAgKiBDT01Qcm9wZXJ0eUJhZy5oOgorICAgICAgICAoOjpSZWFkKToKKyAgICAgICAg
KDo6R2V0UHJvcGVydHlJbmZvKToKKyAgICAgICAgKiBXZWJDb3JlU3RhdGlzdGljcy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlU3RhdGlzdGljczo6amF2YVNjcmlwdFByb3RlY3RlZE9iamVjdFR5cGVD
b3VudHMpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5j
cHA6CisgICAgICAgIChXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmdldFBsdWdpbkluZm8pOgorICAg
ICAgICAqIFdlYkhpc3RvcnkuY3BwOgorICAgICAgICAoV2ViSGlzdG9yeTo6cmVtb3ZlSXRlbUZy
b21EYXRlQ2FjaGVzKToKKyAgICAgICAgKiBXZWJLaXRDT01BUEkuY3BwOgorICAgICAgICAoY2xh
c3NGYWN0b3J5KToKKyAgICAgICAgKiBXZWJLaXRTdGF0aXN0aWNzLmNwcDoKKyAgICAgICAgKFdl
YktpdFN0YXRpc3RpY3M6OmNvbUNsYXNzTmFtZUNvdW50cyk6CisgICAgICAgICogV2ViTm90aWZp
Y2F0aW9uQ2VudGVyLmNwcDoKKyAgICAgICAgKFdlYk5vdGlmaWNhdGlvbkNlbnRlcjo6cG9zdE5v
dGlmaWNhdGlvbkludGVybmFsKToKKyAgICAgICAgKFdlYk5vdGlmaWNhdGlvbkNlbnRlcjo6YWRk
T2JzZXJ2ZXIpOgorICAgICAgICAoV2ViTm90aWZpY2F0aW9uQ2VudGVyOjpyZW1vdmVPYnNlcnZl
cik6CisKIDIwMTItMDgtMjMgIEFkcmllbm5lIFdhbGtlciAgPGVubmVAZ29vZ2xlLmNvbT4KIAog
ICAgICAgICBDb252ZXJ0IFNjcm9sbGFibGVBcmVhIEFTU0VSVF9OT1RfUkVBQ0hFRCB2aXJ0dWFs
cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW5jZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0L3dpbmNlL0NoYW5nZUxvZwppbmRleCAzMWY1MjE3NDYwYzkxZDc4NjJhODg5ZTE0NTZlZGM4
YWYxZmRhNjEwLi4xY2Y2YWUxZjYyYzgxN2ZlZTRlZjRjNzhjYjkzYmNjMGEzYjhlY2IxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbmNlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L3dpbmNlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDEyLTA4LTI3ICBDYWlvIE1hcmNl
bG8gZGUgT2xpdmVpcmEgRmlsaG8gIDxjYWlvLm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+CisKKyAg
ICAgICAgUmVuYW1lIGZpcnN0L3NlY29uZCB0byBrZXkvdmFsdWUgaW4gSGFzaE1hcCBpdGVyYXRv
cnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyNzg0
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCisKKyAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5jcHA6CisgICAgICAgIChQbGF0Zm9ybVN0
cmF0ZWdpZXNXaW5DRTo6Z2V0UGx1Z2luSW5mbyk6CisKIDIwMTItMDgtMTMgIFRvbSBTZXBleiAg
PHRzZXBlekBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSByZWxlYXNlIEZyYW1l
TG9hZGVyQ2xpZW50SW1wbDo6bV9wbHVnaW5XaWRnZXQgcmVmcHRyIHVwb24gUGx1Z2luIERvY3Vt
ZW50IGRldGFjaC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCBlZGQ1Njg5ZWQzYjQ0YzY2ZTExOGUzNTIyZWMxNTNi
ZGJmNjQyMDY3Li4zYWNjNjllZjFmYjNiNGRjNjg5ZjJjYjk0NjRkOGY3ZTFmNzMwZmU4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTI5IEBACisyMDEyLTA4LTI3ICBDYWlvIE1hcmNlbG8gZGUgT2xp
dmVpcmEgRmlsaG8gIDxjYWlvLm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+CisKKyAgICAgICAgUmVu
YW1lIGZpcnN0L3NlY29uZCB0byBrZXkvdmFsdWUgaW4gSGFzaE1hcCBpdGVyYXRvcnMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyNzg0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCisKKyAgICAgICAgKiBQbGF0Zm9ybS9Db3JlSVBD
L0FyZ3VtZW50Q29kZXJzLmg6CisgICAgICAgICogUGxhdGZvcm0vQ29yZUlQQy9Db25uZWN0aW9u
LmNwcDoKKyAgICAgICAgKENvcmVJUEM6OkNvbm5lY3Rpb246OlN5bmNNZXNzYWdlU3RhdGU6Omdl
dE9yQ3JlYXRlKToKKyAgICAgICAgKENvcmVJUEM6OkNvbm5lY3Rpb246OndhaXRGb3JNZXNzYWdl
KToKKyAgICAgICAgKENvcmVJUEM6OkNvbm5lY3Rpb246OnByb2Nlc3NJbmNvbWluZ01lc3NhZ2Up
OgorICAgICAgICAqIFBsYXRmb3JtL2d0ay9Xb3JrUXVldWVHdGsuY3BwOgorICAgICAgICAoV29y
a1F1ZXVlOjpyZWdpc3RlckV2ZW50U291cmNlSGFuZGxlcik6CisgICAgICAgIChXb3JrUXVldWU6
OnVucmVnaXN0ZXJFdmVudFNvdXJjZUhhbmRsZXIpOgorICAgICAgICAqIFBsYXRmb3JtL21hYy9X
b3JrUXVldWVNYWMuY3BwOgorICAgICAgICAoV29ya1F1ZXVlOjp1bnJlZ2lzdGVyTWFjaFBvcnRF
dmVudEhhbmRsZXIpOgorICAgICAgICAqIFNoYXJlZC9QbHVnaW5zL05QUmVtb3RlT2JqZWN0TWFw
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TlBSZW1vdGVPYmplY3RNYXA6OnBsdWdpbkRlc3Ryb3ll
ZCk6CisgICAgICAgICogU2hhcmVkL1VzZXJNZXNzYWdlQ29kZXJzLmg6CisgICAgICAgIChXZWJL
aXQ6OlVzZXJNZXNzYWdlRW5jb2Rlcjo6YmFzZUVuY29kZSk6CisgICAgICAgICogU2hhcmVkL1dl
YlByZWZlcmVuY2VzU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0Ojp2YWx1ZUZvcktleSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByZWZlcmVuY2VzU3RvcmU6OmdldEJvb2xWYWx1ZUZvcktleSk6
CisgICAgICAgICogU2hhcmVkL21hYy9XZWJDb3JlQXJndW1lbnRDb2RlcnNNYWMubW06CisgICAg
ICAgIChDb3JlSVBDOjo6OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL3F0L0FyZ3VtZW50Q29k
ZXJzUXQuY3BwOgorICAgICAgICAoQ29yZUlQQzo6OjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJl
ZC9zb3VwL1dlYkNvcmVBcmd1bWVudENvZGVyc1NvdXAuY3BwOgorICAgICAgICAoQ29yZUlQQzo6
OjpkZWNvZGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNrX2ZvcndhcmRf
bGlzdC5jcHA6CisgICAgICAgIChfRXdrX0JhY2tfRm9yd2FyZF9MaXN0Ojp+X0V3a19CYWNrX0Zv
cndhcmRfTGlzdCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3Bw
OgorICAgICAgICAoX0V3a19Db250ZXh0Ojp+X0V3a19Db250ZXh0KToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHA6CisgICAgICAgIChfZXdrX3ZpZXdfcHJpdl9sb2Fk
aW5nX3Jlc291cmNlc19jbGVhcik6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
V2ViVmlldy5jcHA6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3N1YnJlc291cmNlcyk6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwOgorICAg
ICAgICAod2Via2l0V2ViVmlld0Jhc2VDb250YWluZXJGb3JhbGwpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvbWFjL1dLUHJpbnRpbmdWaWV3Lm1tOgorICAgICAgICAoLVtXS1ByaW50aW5nVmll
dyBfZXhwZWN0ZWRQcmV2aWV3Q2FsbGJhY2tGb3JSZWN0Ol0pOgorICAgICAgICAocGFnZURpZERy
YXdUb1BERik6CisgICAgICAgICgtW1dLUHJpbnRpbmdWaWV3IF9kcmF3UHJldmlldzpdKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW06CisgICAgICAgIChjb21tYW5kTmFt
ZUZvclNlbGVjdG9yKToKKyAgICAgICAgKC1bV0tWaWV3IHZhbGlkYXRlVXNlckludGVyZmFjZUl0
ZW06XSk6CisgICAgICAgICogVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0
ZWRCYWNraW5nU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZEJhY2tpbmdT
dG9yZTo6dXBkYXRlVGlsZSk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkQmFja2luZ1N0
b3JlOjp0ZXh0dXJlKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6
OnBhaW50VG9UZXh0dXJlTWFwcGVyKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRCYWNr
aW5nU3RvcmU6OmNvbW1pdFRpbGVPcGVyYXRpb25zKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29v
cmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5LmNwcDoKKyAgICAgICAg
KFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6dXBkYXRlVGlsZUZvckxheWVyKToK
KyAgICAgICAgKiBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVSZW5kZXJl
ci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZVJlbmRlcmVyOjphZGp1c3RQb3NpdGlv
bkZvckZpeGVkTGF5ZXJzKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlUmVuZGVyZXI6OnN5
bmNDYW52YXMpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVSZW5kZXJlcjo6c2V0TGF5ZXJD
aGlsZHJlbik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZVJlbmRlcmVyOjpzZXRMYXllckZp
bHRlcnMpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVSZW5kZXJlcjo6c2V0TGF5ZXJTdGF0
ZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZVJlbmRlcmVyOjphc3NpZ25JbWFnZVRvTGF5
ZXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9HZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFu
YWdlclByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6R2VvbG9jYXRpb25QZXJtaXNzaW9uUmVx
dWVzdE1hbmFnZXJQcm94eTo6aW52YWxpZGF0ZVJlcXVlc3RzKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvSW5zcGVjdG9yU2VydmVyL1dlYkluc3BlY3RvclNlcnZlci5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYkluc3BlY3RvclNlcnZlcjo6fldlYkluc3BlY3RvclNlcnZlcik6CisgICAgICAgIChX
ZWJLaXQ6OldlYkluc3BlY3RvclNlcnZlcjo6cmVnaXN0ZXJQYWdlKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvSW5zcGVjdG9yU2VydmVyL1dlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24uY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uOjpzZW5kSFRUUFJlc3BvbnNl
SGVhZGVyKToKKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL3F0L1dlYkluc3Bl
Y3RvclNlcnZlclF0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yU2VydmVyOjpi
dWlsZFBhZ2VMaXN0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvTm90aWZpY2F0aW9ucy9Ob3RpZmlj
YXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6
Ok5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5OjppbnZhbGlkYXRlUmVx
dWVzdHMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NQcm94eS5j
cHA6CisgICAgICAgIChXZWJLaXQ6OlBsdWdpblByb2Nlc3NQcm94eTo6cGx1Z2luUHJvY2Vzc0Ny
YXNoZWRPckZhaWxlZFRvTGF1bmNoKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQ29udGV4dC5j
cHA6CisgICAgICAgIChXZWJLaXQ6OmNyZWF0ZURpY3Rpb25hcnlGcm9tSGFzaE1hcCk6CisgICAg
ICAgICogVUlQcm9jZXNzL1dlYkljb25EYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
Ykljb25EYXRhYmFzZTo6ZGlkRmluaXNoVVJMSW1wb3J0KToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
V2ViSW50ZW50RGF0YS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkludGVudERhdGE6OmV4dHJh
cyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6Y2hlY2tVUkxSZWNlaXZlZEZyb21XZWJQcm9jZXNzKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjphZGRCYWNrRm9yd2FyZEl0ZW0pOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OmZyYW1lQ291bnRJblBhZ2UpOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvR2VvbG9jYXRpb24vR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVz
dE1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1
ZXN0TWFuYWdlcjo6Y2FuY2VsUmVxdWVzdEZvckdlb2xvY2F0aW9uKToKKyAgICAgICAgKFdlYktp
dDo6R2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXI6OmRpZFJlY2VpdmVHZW9sb2Nh
dGlvblBlcm1pc3Npb25EZWNpc2lvbik6CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
SW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlOjpnZXRPckNyZWF0ZSk6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OkluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OmdldE9yQ3JlYXRlKToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlSW50ZW50
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVJbnRlbnQ6OmV4dHJhcyk6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9Ob3RpZmljYXRpb25zL1dlYk5vdGlmaWNhdGlvbk1hbmFnZXIu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJOb3RpZmljYXRpb25NYW5hZ2VyOjpwb2xpY3lGb3JP
cmlnaW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJOb3RpZmljYXRpb25NYW5hZ2VyOjpzaG93KToK
KyAgICAgICAgKFdlYktpdDo6V2ViTm90aWZpY2F0aW9uTWFuYWdlcjo6Y2xlYXJOb3RpZmljYXRp
b25zKToKKyAgICAgICAgKFdlYktpdDo6V2ViTm90aWZpY2F0aW9uTWFuYWdlcjo6cmVtb3ZlTm90
aWZpY2F0aW9uRnJvbUNvbnRleHRNYXApOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9O
ZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpOUFJ1bnRp
bWVPYmplY3RNYXA6OmludmFsaWRhdGUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9O
ZXRzY2FwZS9OZXRzY2FwZVBsdWdpbi5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1
Z2luOjpkZXN0cm95U3RyZWFtKToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW46OnVu
c2NoZWR1bGVUaW1lcik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luOjpmcmFtZURp
ZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbjo6ZnJhbWVE
aWRGYWlsKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OmJ1aWxkSFRUUEhlYWRlcnMpOgorICAgICAgICAoV2ViS2l0OjpQbHVn
aW5WaWV3Ojp+UGx1Z2luVmlldyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6bGF5ZXJCeUlEKToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRv
ci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjphZG9wdEltYWdl
QmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnJl
bGVhc2VJbWFnZUJhY2tpbmdTdG9yZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YkJhY2tGb3J3YXJkTGlzdFByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQmFja0Zvcndh
cmRMaXN0UHJveHk6OnJlbW92ZUl0ZW0pOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9t
YWMvV2ViUGFnZU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6Y29tbWFuZE5hbWVGb3JTZWxlY3Rv
ck5hbWUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3M6OnZpc2l0ZWRMaW5rU3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzczo6YWxsVmlzaXRlZExpbmtTdGF0ZUNoYW5nZWQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQcm9jZXNzOjpmb2N1c2VkV2ViUGFnZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlByb2Nlc3M6OmNyZWF0ZVdlYlBhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjp3
ZWJQYWdlR3JvdXApOgorICAgICAgICAoV2ViS2l0Ojpmcm9tQ291bnRlZFNldFRvSGFzaE1hcCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OnNldFRleHRDaGVja2VyU3RhdGUpOgorCiAy
MDEyLTA4LTI3ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAg
ICAgIE1ha2UgRm9yY2UgUmVwYWludCB3b3JrIHdpdGggdGlsZWQgYmFja2luZyBzdG9yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAppbmRleCAyYzNlMGU4
NTlmMTZlODk1ODFhMmZhMzU2Yjg0OTJmMjAzNzkyMDdkLi44ODg2ZjExMTUwNGVkZGYyNzJjYzg4
NzZmMDRmYzA1YTRjODI4MGM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQ2FsbGJhY2tPYmplY3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2Fs
bGJhY2tPYmplY3QuaApAQCAtODMsMTMgKzgzLDEzIEBAIHN0cnVjdCBKU0NhbGxiYWNrT2JqZWN0
RGF0YSA6IFdlYWtIYW5kbGVPd25lciB7CiAgICAgICAgICAgICBQcml2YXRlUHJvcGVydHlNYXA6
OmNvbnN0X2l0ZXJhdG9yIGxvY2F0aW9uID0gbV9wcm9wZXJ0eU1hcC5maW5kKHByb3BlcnR5TmFt
ZS5pbXBsKCkpOwogICAgICAgICAgICAgaWYgKGxvY2F0aW9uID09IG1fcHJvcGVydHlNYXAuZW5k
KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKLSAgICAgICAgICAgIHJldHVy
biBsb2NhdGlvbi0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgcmV0dXJuIGxvY2F0aW9uLT52
YWx1ZS5nZXQoKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgdm9pZCBzZXRQcml2YXRl
UHJvcGVydHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0NlbGwqIG93bmVyLCBjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBlbXB0eTsKLSAgICAgICAgICAgIG1fcHJvcGVy
dHlNYXAuYWRkKHByb3BlcnR5TmFtZS5pbXBsKCksIGVtcHR5KS5pdGVyYXRvci0+c2Vjb25kLnNl
dChnbG9iYWxEYXRhLCBvd25lciwgdmFsdWUpOworICAgICAgICAgICAgbV9wcm9wZXJ0eU1hcC5h
ZGQocHJvcGVydHlOYW1lLmltcGwoKSwgZW1wdHkpLml0ZXJhdG9yLT52YWx1ZS5zZXQoZ2xvYmFs
RGF0YSwgb3duZXIsIHZhbHVlKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgdm9pZCBk
ZWxldGVQcml2YXRlUHJvcGVydHkoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQpAQCAt
MTAwLDggKzEwMCw4IEBAIHN0cnVjdCBKU0NhbGxiYWNrT2JqZWN0RGF0YSA6IFdlYWtIYW5kbGVP
d25lciB7CiAgICAgICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikK
ICAgICAgICAgewogICAgICAgICAgICAgZm9yIChQcml2YXRlUHJvcGVydHlNYXA6Oml0ZXJhdG9y
IHB0ciA9IG1fcHJvcGVydHlNYXAuYmVnaW4oKTsgcHRyICE9IG1fcHJvcGVydHlNYXAuZW5kKCk7
ICsrcHRyKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHB0ci0+c2Vjb25kKQotICAgICAgICAgICAg
ICAgICAgICB2aXNpdG9yLmFwcGVuZCgmcHRyLT5zZWNvbmQpOworICAgICAgICAgICAgICAgIGlm
IChwdHItPnZhbHVlKQorICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgmcHRyLT52
YWx1ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAppbmRleCAxNjBmNDg4
ODdiODcyYzI5YmMzZTJhZGJlZGM5MWVmYWZjZDRkOTM5Li4yY2FlMjFjNTJhODhhOGIyMmY1YzNm
MzYwMzQ1YmRmMDJlYjc5NWYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaApAQCAtNDY1LDggKzQ2NSw4IEBAIHZvaWQg
SlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBv
YmplY3QsIEV4ZWNTdGF0ZSoKICAgICAgICAgICAgIHR5cGVkZWYgT3BhcXVlSlNDbGFzc1N0YXRp
Y1ZhbHVlc1RhYmxlOjpjb25zdF9pdGVyYXRvciBpdGVyYXRvcjsKICAgICAgICAgICAgIGl0ZXJh
dG9yIGVuZCA9IHN0YXRpY1ZhbHVlcy0+ZW5kKCk7CiAgICAgICAgICAgICBmb3IgKGl0ZXJhdG9y
IGl0ID0gc3RhdGljVmFsdWVzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAg
ICAgICAgICBTdHJpbmdJbXBsKiBuYW1lID0gaXQtPmZpcnN0LmdldCgpOwotICAgICAgICAgICAg
ICAgIFN0YXRpY1ZhbHVlRW50cnkqIGVudHJ5ID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAg
ICAgICAgICBTdHJpbmdJbXBsKiBuYW1lID0gaXQtPmtleS5nZXQoKTsKKyAgICAgICAgICAgICAg
ICBTdGF0aWNWYWx1ZUVudHJ5KiBlbnRyeSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAg
ICAgICBpZiAoZW50cnktPmdldFByb3BlcnR5ICYmICghKGVudHJ5LT5hdHRyaWJ1dGVzICYga0pT
UHJvcGVydHlBdHRyaWJ1dGVEb250RW51bSkgfHwgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJv
cGVydGllcykpKQogICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlm
aWVyKGV4ZWMsIG5hbWUpKTsKICAgICAgICAgICAgIH0KQEAgLTQ3Niw4ICs0NzYsOCBAQCB2b2lk
IEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCog
b2JqZWN0LCBFeGVjU3RhdGUqCiAgICAgICAgICAgICB0eXBlZGVmIE9wYXF1ZUpTQ2xhc3NTdGF0
aWNGdW5jdGlvbnNUYWJsZTo6Y29uc3RfaXRlcmF0b3IgaXRlcmF0b3I7CiAgICAgICAgICAgICBp
dGVyYXRvciBlbmQgPSBzdGF0aWNGdW5jdGlvbnMtPmVuZCgpOwogICAgICAgICAgICAgZm9yIChp
dGVyYXRvciBpdCA9IHN0YXRpY0Z1bmN0aW9ucy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7
Ci0gICAgICAgICAgICAgICAgU3RyaW5nSW1wbCogbmFtZSA9IGl0LT5maXJzdC5nZXQoKTsKLSAg
ICAgICAgICAgICAgICBTdGF0aWNGdW5jdGlvbkVudHJ5KiBlbnRyeSA9IGl0LT5zZWNvbmQuZ2V0
KCk7CisgICAgICAgICAgICAgICAgU3RyaW5nSW1wbCogbmFtZSA9IGl0LT5rZXkuZ2V0KCk7Cisg
ICAgICAgICAgICAgICAgU3RhdGljRnVuY3Rpb25FbnRyeSogZW50cnkgPSBpdC0+dmFsdWUuZ2V0
KCk7CiAgICAgICAgICAgICAgICAgaWYgKCEoZW50cnktPmF0dHJpYnV0ZXMgJiBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZURvbnRFbnVtKSB8fCAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVz
KSkKICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihleGVj
LCBuYW1lKSk7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTQ2xhc3NSZWYuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NsYXNz
UmVmLmNwcAppbmRleCAxMzQ0MzE2NTQ3ODkxNWY4YTEzYTRkYmQzODA0NDFlZDI0YmM0ZDJkLi45
NjVlZWRkNGYxYjg2ZGFkYjM0ZTY0YmViMDM4N2FkYzMwMTIwYzZkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2xhc3NSZWYuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNDbGFzc1JlZi5jcHAKQEAgLTEwNywxMyArMTA3LDEzIEBAIE9wYXF1ZUpT
Q2xhc3M6On5PcGFxdWVKU0NsYXNzKCkKICAgICBpZiAobV9zdGF0aWNWYWx1ZXMpIHsKICAgICAg
ICAgT3BhcXVlSlNDbGFzc1N0YXRpY1ZhbHVlc1RhYmxlOjpjb25zdF9pdGVyYXRvciBlbmQgPSBt
X3N0YXRpY1ZhbHVlcy0+ZW5kKCk7CiAgICAgICAgIGZvciAoT3BhcXVlSlNDbGFzc1N0YXRpY1Zh
bHVlc1RhYmxlOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fc3RhdGljVmFsdWVzLT5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBBU1NFUlQoIWl0LT5maXJzdC0+aXNJZGVudGlm
aWVyKCkpOworICAgICAgICAgICAgQVNTRVJUKCFpdC0+a2V5LT5pc0lkZW50aWZpZXIoKSk7CiAg
ICAgfQogCiAgICAgaWYgKG1fc3RhdGljRnVuY3Rpb25zKSB7CiAgICAgICAgIE9wYXF1ZUpTQ2xh
c3NTdGF0aWNGdW5jdGlvbnNUYWJsZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9zdGF0aWNGdW5j
dGlvbnMtPmVuZCgpOwogICAgICAgICBmb3IgKE9wYXF1ZUpTQ2xhc3NTdGF0aWNGdW5jdGlvbnNU
YWJsZTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3N0YXRpY0Z1bmN0aW9ucy0+YmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KQotICAgICAgICAgICAgQVNTRVJUKCFpdC0+Zmlyc3QtPmlzSWRlbnRpZmll
cigpKTsKKyAgICAgICAgICAgIEFTU0VSVCghaXQtPmtleS0+aXNJZGVudGlmaWVyKCkpOwogICAg
IH0KICNlbmRpZgogICAgIApAQCAtMTQ3LDggKzE0Nyw4IEBAIE9wYXF1ZUpTQ2xhc3NDb250ZXh0
RGF0YTo6T3BhcXVlSlNDbGFzc0NvbnRleHREYXRhKEpTQzo6SlNHbG9iYWxEYXRhJiwgT3BhcXVl
SlNDCiAgICAgICAgIHN0YXRpY1ZhbHVlcyA9IGFkb3B0UHRyKG5ldyBPcGFxdWVKU0NsYXNzU3Rh
dGljVmFsdWVzVGFibGUpOwogICAgICAgICBPcGFxdWVKU0NsYXNzU3RhdGljVmFsdWVzVGFibGU6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGpzQ2xhc3MtPm1fc3RhdGljVmFsdWVzLT5lbmQoKTsKICAg
ICAgICAgZm9yIChPcGFxdWVKU0NsYXNzU3RhdGljVmFsdWVzVGFibGU6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0ganNDbGFzcy0+bV9zdGF0aWNWYWx1ZXMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewotICAgICAgICAgICAgQVNTRVJUKCFpdC0+Zmlyc3QtPmlzSWRlbnRpZmllcigpKTsKLSAgICAg
ICAgICAgIHN0YXRpY1ZhbHVlcy0+YWRkKFN0cmluZ0ltcGw6OmNyZWF0ZShpdC0+Zmlyc3QtPmNo
YXJhY3RlcnMoKSwgaXQtPmZpcnN0LT5sZW5ndGgoKSksIGFkb3B0UHRyKG5ldyBTdGF0aWNWYWx1
ZUVudHJ5KGl0LT5zZWNvbmQtPmdldFByb3BlcnR5LCBpdC0+c2Vjb25kLT5zZXRQcm9wZXJ0eSwg
aXQtPnNlY29uZC0+YXR0cmlidXRlcykpKTsKKyAgICAgICAgICAgIEFTU0VSVCghaXQtPmtleS0+
aXNJZGVudGlmaWVyKCkpOworICAgICAgICAgICAgc3RhdGljVmFsdWVzLT5hZGQoU3RyaW5nSW1w
bDo6Y3JlYXRlKGl0LT5rZXktPmNoYXJhY3RlcnMoKSwgaXQtPmtleS0+bGVuZ3RoKCkpLCBhZG9w
dFB0cihuZXcgU3RhdGljVmFsdWVFbnRyeShpdC0+dmFsdWUtPmdldFByb3BlcnR5LCBpdC0+dmFs
dWUtPnNldFByb3BlcnR5LCBpdC0+dmFsdWUtPmF0dHJpYnV0ZXMpKSk7CiAgICAgICAgIH0KICAg
ICB9CiAKQEAgLTE1NiwxNSArMTU2LDE1IEBAIE9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YTo6T3Bh
cXVlSlNDbGFzc0NvbnRleHREYXRhKEpTQzo6SlNHbG9iYWxEYXRhJiwgT3BhcXVlSlNDCiAgICAg
ICAgIHN0YXRpY0Z1bmN0aW9ucyA9IGFkb3B0UHRyKG5ldyBPcGFxdWVKU0NsYXNzU3RhdGljRnVu
Y3Rpb25zVGFibGUpOwogICAgICAgICBPcGFxdWVKU0NsYXNzU3RhdGljRnVuY3Rpb25zVGFibGU6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGpzQ2xhc3MtPm1fc3RhdGljRnVuY3Rpb25zLT5lbmQoKTsK
ICAgICAgICAgZm9yIChPcGFxdWVKU0NsYXNzU3RhdGljRnVuY3Rpb25zVGFibGU6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0ganNDbGFzcy0+bV9zdGF0aWNGdW5jdGlvbnMtPmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewotICAgICAgICAgICAgQVNTRVJUKCFpdC0+Zmlyc3QtPmlzSWRlbnRpZmllcigp
KTsKLSAgICAgICAgICAgIHN0YXRpY0Z1bmN0aW9ucy0+YWRkKFN0cmluZ0ltcGw6OmNyZWF0ZShp
dC0+Zmlyc3QtPmNoYXJhY3RlcnMoKSwgaXQtPmZpcnN0LT5sZW5ndGgoKSksIGFkb3B0UHRyKG5l
dyBTdGF0aWNGdW5jdGlvbkVudHJ5KGl0LT5zZWNvbmQtPmNhbGxBc0Z1bmN0aW9uLCBpdC0+c2Vj
b25kLT5hdHRyaWJ1dGVzKSkpOworICAgICAgICAgICAgQVNTRVJUKCFpdC0+a2V5LT5pc0lkZW50
aWZpZXIoKSk7CisgICAgICAgICAgICBzdGF0aWNGdW5jdGlvbnMtPmFkZChTdHJpbmdJbXBsOjpj
cmVhdGUoaXQtPmtleS0+Y2hhcmFjdGVycygpLCBpdC0+a2V5LT5sZW5ndGgoKSksIGFkb3B0UHRy
KG5ldyBTdGF0aWNGdW5jdGlvbkVudHJ5KGl0LT52YWx1ZS0+Y2FsbEFzRnVuY3Rpb24sIGl0LT52
YWx1ZS0+YXR0cmlidXRlcykpKTsKICAgICAgICAgfQogICAgIH0KIH0KIAogT3BhcXVlSlNDbGFz
c0NvbnRleHREYXRhJiBPcGFxdWVKU0NsYXNzOjpjb250ZXh0RGF0YShFeGVjU3RhdGUqIGV4ZWMp
CiB7Ci0gICAgT3duUHRyPE9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YT4mIGNvbnRleHREYXRhID0g
ZXhlYy0+Z2xvYmFsRGF0YSgpLm9wYXF1ZUpTQ2xhc3NEYXRhLmFkZCh0aGlzLCBudWxscHRyKS5p
dGVyYXRvci0+c2Vjb25kOworICAgIE93blB0cjxPcGFxdWVKU0NsYXNzQ29udGV4dERhdGE+JiBj
b250ZXh0RGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKS5vcGFxdWVKU0NsYXNzRGF0YS5hZGQodGhp
cywgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghY29udGV4dERhdGEpCiAgICAg
ICAgIGNvbnRleHREYXRhID0gYWRvcHRQdHIobmV3IE9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YShl
eGVjLT5nbG9iYWxEYXRhKCksIHRoaXMpKTsKICAgICByZXR1cm4gKmNvbnRleHREYXRhOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAppbmRleCBkNDUyYmQ0
NDYyYTZlYWRlNjRkOTVlN2Y3NWVjNjg4NDYxYmJlNmFkLi41ZmFkOWU3MjVlMzc2OTMwN2Q3OThh
YTg3NjZiODZjN2M5OTA5OWVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcApAQCAtNjU2LDcgKzY1Niw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wKEV4
ZWNTdGF0ZSogZXhlYykKICAgICAgICAgICAgIGRhdGFMb2coIiAgJTFkID0ge1xuIiwgaSk7CiAg
ICAgICAgICAgICBTdHJpbmdKdW1wVGFibGU6OlN0cmluZ09mZnNldFRhYmxlOjpjb25zdF9pdGVy
YXRvciBlbmQgPSBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbaV0ub2Zmc2V0
VGFibGUuZW5kKCk7CiAgICAgICAgICAgICBmb3IgKFN0cmluZ0p1bXBUYWJsZTo6U3RyaW5nT2Zm
c2V0VGFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRj
aEp1bXBUYWJsZXNbaV0ub2Zmc2V0VGFibGUuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikK
LSAgICAgICAgICAgICAgICBkYXRhTG9nKCJcdFx0XCIlc1wiID0+ICUwNGRcbiIsIFVTdHJpbmco
aXRlci0+Zmlyc3QpLnV0ZjgoKS5kYXRhKCksIGl0ZXItPnNlY29uZC5icmFuY2hPZmZzZXQpOwor
ICAgICAgICAgICAgICAgIGRhdGFMb2coIlx0XHRcIiVzXCIgPT4gJTA0ZFxuIiwgVVN0cmluZyhp
dGVyLT5rZXkpLnV0ZjgoKS5kYXRhKCksIGl0ZXItPnZhbHVlLmJyYW5jaE9mZnNldCk7CiAgICAg
ICAgICAgICBkYXRhTG9nKCIgICAgICB9XG4iKTsKICAgICAgICAgICAgICsraTsKICAgICAgICAg
fSB3aGlsZSAoaSA8IG1fcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5zaXplKCkp
OwpAQCAtMTg5Myw3ICsxODkzLDcgQEAgdm9pZCBFdmFsQ29kZUNhY2hlOjp2aXNpdEFnZ3JlZ2F0
ZShTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBFdmFsQ2FjaGVNYXA6Oml0ZXJhdG9yIGVu
ZCA9IG1fY2FjaGVNYXAuZW5kKCk7CiAgICAgZm9yIChFdmFsQ2FjaGVNYXA6Oml0ZXJhdG9yIHB0
ciA9IG1fY2FjaGVNYXAuYmVnaW4oKTsgcHRyICE9IGVuZDsgKytwdHIpCi0gICAgICAgIHZpc2l0
b3IuYXBwZW5kKCZwdHItPnNlY29uZCk7CisgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZwdHItPnZh
bHVlKTsKIH0KIAogdm9pZCBDb2RlQmxvY2s6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQpAQCAtMzAwOCw4ICszMDA4LDggQEAgVVN0cmluZyBDb2RlQmxvY2s6Om5hbWVGb3JS
ZWdpc3RlcihpbnQgcmVnaXN0ZXJOdW1iZXIpCiB7CiAgICAgU3ltYm9sVGFibGU6Oml0ZXJhdG9y
IGVuZCA9IG1fc3ltYm9sVGFibGUtPmVuZCgpOwogICAgIGZvciAoU3ltYm9sVGFibGU6Oml0ZXJh
dG9yIHB0ciA9IG1fc3ltYm9sVGFibGUtPmJlZ2luKCk7IHB0ciAhPSBlbmQ7ICsrcHRyKSB7Ci0g
ICAgICAgIGlmIChwdHItPnNlY29uZC5nZXRJbmRleCgpID09IHJlZ2lzdGVyTnVtYmVyKQotICAg
ICAgICAgICAgcmV0dXJuIFVTdHJpbmcocHRyLT5maXJzdCk7CisgICAgICAgIGlmIChwdHItPnZh
bHVlLmdldEluZGV4KCkgPT0gcmVnaXN0ZXJOdW1iZXIpCisgICAgICAgICAgICByZXR1cm4gVVN0
cmluZyhwdHItPmtleSk7CiAgICAgfQogICAgIGlmIChuZWVkc0FjdGl2YXRpb24oKSAmJiByZWdp
c3Rlck51bWJlciA9PSBhY3RpdmF0aW9uUmVnaXN0ZXIoKSkKICAgICAgICAgcmV0dXJuICJhY3Rp
dmF0aW9uIjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9KdW1w
VGFibGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9KdW1wVGFibGUuaAppbmRl
eCA1YmJlMDQ3MTA3ZjViMDFjMDI4OWJlYTMzMTg2ZTFmODRhM2FhZmM3Li42MDM2Y2RhNTFkNWJj
ZjU2NWVhZTk3ZThkYjI2NTUxYzkwMjU1YzczIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvSnVtcFRhYmxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0p1bXBUYWJsZS5oCkBAIC01Nyw3ICs1Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICAgICAgU3RyaW5nT2Zmc2V0VGFibGU6OmNvbnN0X2l0ZXJhdG9yIGxvYyA9IG9mZnNldFRh
YmxlLmZpbmQodmFsdWUpOwogICAgICAgICAgICAgaWYgKGxvYyA9PSBlbmQpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGRlZmF1bHRPZmZzZXQ7Ci0gICAgICAgICAgICByZXR1cm4gbG9jLT5zZWNv
bmQuYnJhbmNoT2Zmc2V0OworICAgICAgICAgICAgcmV0dXJuIGxvYy0+dmFsdWUuYnJhbmNoT2Zm
c2V0OwogICAgICAgICB9CiAKICNpZiBFTkFCTEUoSklUKQpAQCAtNjcsNyArNjcsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgICAgIFN0cmluZ09mZnNldFRhYmxlOjpjb25zdF9pdGVyYXRv
ciBsb2MgPSBvZmZzZXRUYWJsZS5maW5kKHZhbHVlKTsKICAgICAgICAgICAgIGlmIChsb2MgPT0g
ZW5kKQogICAgICAgICAgICAgICAgIHJldHVybiBjdGlEZWZhdWx0OwotICAgICAgICAgICAgcmV0
dXJuIGxvYy0+c2Vjb25kLmN0aU9mZnNldDsKKyAgICAgICAgICAgIHJldHVybiBsb2MtPnZhbHVl
LmN0aU9mZnNldDsKICAgICAgICAgfQogI2VuZGlmCiAgICAgfTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3Bw
CmluZGV4IDU5ZjBkMDIzNDM0MTdhNzQxYmM4MjU3MzdkMjYxMTNjZGM3YTMyOTUuLmY5MjNlNGEy
OGJiY2IwMDM5YTUzNzNlOTZmODQ1MjNlNzljZWUwODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcApA
QCAtODEsNyArODEsNyBAQCBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZSogTGF6eU9wZXJhbmRWYWx1
ZVByb2ZpbGVQYXJzZXI6OmdldElmUHJlc2VudCgKICAgICBpZiAoaXRlciA9PSBtX21hcC5lbmQo
KSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCi0gICAgcmV0dXJuIGl0ZXItPnNlY29uZDsKKyAg
ICByZXR1cm4gaXRlci0+dmFsdWU7CiB9CiAKIFNwZWN1bGF0ZWRUeXBlIExhenlPcGVyYW5kVmFs
dWVQcm9maWxlUGFyc2VyOjpwcmVkaWN0aW9uKApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1NhbXBsaW5nVG9vbC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvU2FtcGxpbmdUb29sLmNwcAppbmRleCBmMDdkYzc5ZmI3ODI1OGQ4NjFkNGY0ODUx
N2YxYjU1YjI5NjM5NTNkLi5mOWI4MjQ1ZTU0NzdhOGYzMGVkNTIxYzMxMjZiZjAxOWQ1Y2IyZTY3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2FtcGxpbmdUb29s
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2FtcGxpbmdUb29sLmNw
cApAQCAtNDEwLDcgKzQxMCw3IEBAIHZvaWQgU2FtcGxpbmdUb29sOjpkdW1wKEV4ZWNTdGF0ZSog
ZXhlYykKICAgICBWZWN0b3I8U2NyaXB0U2FtcGxlUmVjb3JkKj4gY29kZUJsb2NrU2FtcGxlcyhz
Y29wZUNvdW50KTsKICAgICBTY3JpcHRTYW1wbGVSZWNvcmRNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBt
X3Njb3BlU2FtcGxlTWFwLT5iZWdpbigpOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2NvcGVD
b3VudDsgKytpLCArK2l0ZXIpCi0gICAgICAgIGNvZGVCbG9ja1NhbXBsZXNbaV0gPSBpdGVyLT5z
ZWNvbmQuZ2V0KCk7CisgICAgICAgIGNvZGVCbG9ja1NhbXBsZXNbaV0gPSBpdGVyLT52YWx1ZS5n
ZXQoKTsKIAogICAgIHFzb3J0KGNvZGVCbG9ja1NhbXBsZXMuYmVnaW4oKSwgc2NvcGVDb3VudCwg
c2l6ZW9mKFNjcmlwdFNhbXBsZVJlY29yZCopLCBjb21wYXJlU2NyaXB0U2FtcGxlUmVjb3Jkcyk7
CiAKQEAgLTQ0Niw4ICs0NDYsOCBAQCB2b2lkIFNhbXBsaW5nVG9vbDo6ZHVtcChFeGVjU3RhdGUq
IGV4ZWMpCiAgICAgICAgICAgICAgICAgVmVjdG9yPExpbmVDb3VudEluZm8+IGxpbmVDb3VudElu
Zm8obGluZXNDb3VudCk7CiAgICAgICAgICAgICAgICAgaW50IGxpbmVubyA9IDA7CiAgICAgICAg
ICAgICAgICAgZm9yIChIYXNoTWFwPHVuc2lnbmVkLHVuc2lnbmVkPjo6aXRlcmF0b3IgaXRlciA9
IGxpbmVDb3VudHMuYmVnaW4oKTsgaXRlciAhPSBsaW5lQ291bnRzLmVuZCgpOyArK2l0ZXIsICsr
bGluZW5vKSB7Ci0gICAgICAgICAgICAgICAgICAgIGxpbmVDb3VudEluZm9bbGluZW5vXS5saW5l
ID0gaXRlci0+Zmlyc3Q7Ci0gICAgICAgICAgICAgICAgICAgIGxpbmVDb3VudEluZm9bbGluZW5v
XS5jb3VudCA9IGl0ZXItPnNlY29uZDsKKyAgICAgICAgICAgICAgICAgICAgbGluZUNvdW50SW5m
b1tsaW5lbm9dLmxpbmUgPSBpdGVyLT5rZXk7CisgICAgICAgICAgICAgICAgICAgIGxpbmVDb3Vu
dEluZm9bbGluZW5vXS5jb3VudCA9IGl0ZXItPnZhbHVlOwogICAgICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgICAgIHFzb3J0KGxpbmVDb3VudEluZm8uYmVnaW4oKSwgbGluZXNDb3VudCwg
c2l6ZW9mKExpbmVDb3VudEluZm8pLCBjb21wYXJlTGluZUNvdW50SW5mb1NhbXBsaW5nKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5jcHAKaW5kZXggMDVkZjljYWZiYzMzNDExN2NjMzM3ZGEyNDg3MWQ4Y2UzYmJkYWRj
NC4uNjhiZmM4NGVmMjI5Y2MyYTFkZTg1N2YwNjdiOTdhMTZhM2U4NWRiMCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5jcHAKQEAgLTIzMCw3ICsyMzAsNyBAQCBib29sIEJ5dGVjb2RlR2VuZXJhdG9yOjphZGRWYXIo
Y29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGJvb2wgaXNDb25zdGFudCwgUmVnaXN0ZQogICAgIFN5
bWJvbFRhYmxlOjpBZGRSZXN1bHQgcmVzdWx0ID0gc3ltYm9sVGFibGUoKS5hZGQoaWRlbnQuaW1w
bCgpLCBuZXdFbnRyeSk7CiAKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAg
IHIwID0gJnJlZ2lzdGVyRm9yKHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLmdldEluZGV4KCkpOwor
ICAgICAgICByMCA9ICZyZWdpc3RlckZvcihyZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldEluZGV4
KCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0yNDgsOCArMjQ4LDggQEAg
aW50IEJ5dGVjb2RlR2VuZXJhdG9yOjphZGRHbG9iYWxWYXIoCiAgICAgICAgIG5ld0VudHJ5LmF0
dGVtcHRUb1dhdGNoKCk7CiAgICAgU3ltYm9sVGFibGU6OkFkZFJlc3VsdCByZXN1bHQgPSBzeW1i
b2xUYWJsZSgpLmFkZChpZGVudC5pbXBsKCksIG5ld0VudHJ5KTsKICAgICBpZiAoIXJlc3VsdC5p
c05ld0VudHJ5KSB7Ci0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLm5vdGlmeVdyaXRl
KCk7Ci0gICAgICAgIGluZGV4ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQuZ2V0SW5kZXgoKTsK
KyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5ub3RpZnlXcml0ZSgpOworICAgICAgICBp
bmRleCA9IHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0SW5kZXgoKTsKICAgICB9CiAgICAgcmV0
dXJuIGluZGV4OwogfQpAQCAtMTA2Myw3ICsxMDYzLDcgQEAgdW5zaWduZWQgQnl0ZWNvZGVHZW5l
cmF0b3I6OmFkZENvbnN0YW50KGNvbnN0IElkZW50aWZpZXImIGlkZW50KQogICAgIGlmIChyZXN1
bHQuaXNOZXdFbnRyeSkKICAgICAgICAgbV9jb2RlQmxvY2stPmFkZElkZW50aWZpZXIoSWRlbnRp
ZmllcihtX2dsb2JhbERhdGEsIHJlcCkpOwogCi0gICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+
c2Vjb25kOworICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogfQogCiBSZWdpc3Rl
cklEKiBCeXRlY29kZUdlbmVyYXRvcjo6YWRkQ29uc3RhbnRWYWx1ZShKU1ZhbHVlIHYpCkBAIC0x
MDc2LDcgKzEwNzYsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6YWRkQ29uc3Rh
bnRWYWx1ZShKU1ZhbHVlIHYpCiAgICAgICAgICsrbV9uZXh0Q29uc3RhbnRPZmZzZXQ7CiAgICAg
ICAgIG1fY29kZUJsb2NrLT5hZGRDb25zdGFudChKU1ZhbHVlKHYpKTsKICAgICB9IGVsc2UKLSAg
ICAgICAgaW5kZXggPSByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgaW5kZXggPSBy
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogCiAgICAgcmV0dXJuICZtX2NvbnN0YW50UG9vbFJlZ2lz
dGVyc1tpbmRleF07CiB9CkBAIC0xMjIzLDcgKzEyMjMsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29k
ZUdlbmVyYXRvcjo6ZW1pdExvYWQoUmVnaXN0ZXJJRCogZHN0LCBkb3VibGUgbnVtYmVyKQogICAg
IC8vIHdvcmsgY29ycmVjdGx5IHdpdGggTmFOIGFzIGEga2V5LgogICAgIGlmIChpc25hbihudW1i
ZXIpIHx8IG51bWJlciA9PSBIYXNoVHJhaXRzPGRvdWJsZT46OmVtcHR5VmFsdWUoKSB8fCBIYXNo
VHJhaXRzPGRvdWJsZT46OmlzRGVsZXRlZFZhbHVlKG51bWJlcikpCiAgICAgICAgIHJldHVybiBl
bWl0TG9hZChkc3QsIGpzTnVtYmVyKG51bWJlcikpOwotICAgIEpTVmFsdWUmIHZhbHVlSW5NYXAg
PSBtX251bWJlck1hcC5hZGQobnVtYmVyLCBKU1ZhbHVlKCkpLml0ZXJhdG9yLT5zZWNvbmQ7Cisg
ICAgSlNWYWx1ZSYgdmFsdWVJbk1hcCA9IG1fbnVtYmVyTWFwLmFkZChudW1iZXIsIEpTVmFsdWUo
KSkuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghdmFsdWVJbk1hcCkKICAgICAgICAgdmFsdWVJ
bk1hcCA9IGpzTnVtYmVyKG51bWJlcik7CiAgICAgcmV0dXJuIGVtaXRMb2FkKGRzdCwgdmFsdWVJ
bk1hcCk7CkBAIC0xMjMxLDcgKzEyMzEsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdExvYWQoUmVnaXN0ZXJJRCogZHN0LCBkb3VibGUgbnVtYmVyKQogCiBSZWdpc3RlcklE
KiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdExvYWQoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBJZGVu
dGlmaWVyJiBpZGVudGlmaWVyKQogewotICAgIEpTU3RyaW5nKiYgc3RyaW5nSW5NYXAgPSBtX3N0
cmluZ01hcC5hZGQoaWRlbnRpZmllci5pbXBsKCksIDApLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAg
SlNTdHJpbmcqJiBzdHJpbmdJbk1hcCA9IG1fc3RyaW5nTWFwLmFkZChpZGVudGlmaWVyLmltcGwo
KSwgMCkuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghc3RyaW5nSW5NYXApCiAgICAgICAgIHN0
cmluZ0luTWFwID0ganNPd25lZFN0cmluZyhnbG9iYWxEYXRhKCksIGlkZW50aWZpZXIudXN0cmlu
ZygpKTsKICAgICByZXR1cm4gZW1pdExvYWQoZHN0LCBKU1ZhbHVlKHN0cmluZ0luTWFwKSk7CkBA
IC0xNzczLDcgKzE3NzMsNyBAQCB1bnNpZ25lZCBCeXRlY29kZUdlbmVyYXRvcjo6YWRkQ29uc3Rh
bnRCdWZmZXIodW5zaWduZWQgbGVuZ3RoKQogCiBKU1N0cmluZyogQnl0ZWNvZGVHZW5lcmF0b3I6
OmFkZFN0cmluZ0NvbnN0YW50KGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIpCiB7Ci0gICAg
SlNTdHJpbmcqJiBzdHJpbmdJbk1hcCA9IG1fc3RyaW5nTWFwLmFkZChpZGVudGlmaWVyLmltcGwo
KSwgMCkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBKU1N0cmluZyomIHN0cmluZ0luTWFwID0gbV9z
dHJpbmdNYXAuYWRkKGlkZW50aWZpZXIuaW1wbCgpLCAwKS5pdGVyYXRvci0+dmFsdWU7CiAgICAg
aWYgKCFzdHJpbmdJbk1hcCkgewogICAgICAgICBzdHJpbmdJbk1hcCA9IGpzU3RyaW5nKGdsb2Jh
bERhdGEoKSwgaWRlbnRpZmllci51c3RyaW5nKCkpOwogICAgICAgICBhZGRDb25zdGFudFZhbHVl
KHN0cmluZ0luTWFwKTsKQEAgLTE4NDUsOCArMTg0NSw4IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2Rl
R2VuZXJhdG9yOjplbWl0TGF6eU5ld0Z1bmN0aW9uKFJlZ2lzdGVySUQqIGRzdCwgRnVuY3Rpb25C
b2R5CiB7CiAgICAgRnVuY3Rpb25PZmZzZXRNYXA6OkFkZFJlc3VsdCBwdHIgPSBtX2Z1bmN0aW9u
T2Zmc2V0cy5hZGQoZnVuY3Rpb24sIDApOwogICAgIGlmIChwdHIuaXNOZXdFbnRyeSkKLSAgICAg
ICAgcHRyLml0ZXJhdG9yLT5zZWNvbmQgPSBtX2NvZGVCbG9jay0+YWRkRnVuY3Rpb25EZWNsKG1h
a2VGdW5jdGlvbihtX2dsb2JhbERhdGEsIGZ1bmN0aW9uKSk7Ci0gICAgcmV0dXJuIGVtaXROZXdG
dW5jdGlvbkludGVybmFsKGRzdCwgcHRyLml0ZXJhdG9yLT5zZWNvbmQsIHRydWUpOworICAgICAg
ICBwdHIuaXRlcmF0b3ItPnZhbHVlID0gbV9jb2RlQmxvY2stPmFkZEZ1bmN0aW9uRGVjbChtYWtl
RnVuY3Rpb24obV9nbG9iYWxEYXRhLCBmdW5jdGlvbikpOworICAgIHJldHVybiBlbWl0TmV3RnVu
Y3Rpb25JbnRlcm5hbChkc3QsIHB0ci5pdGVyYXRvci0+dmFsdWUsIHRydWUpOwogfQogCiBSZWdp
c3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5ld0Z1bmN0aW9uSW50ZXJuYWwoUmVnaXN0
ZXJJRCogZHN0LCB1bnNpZ25lZCBpbmRleCwgYm9vbCBkb051bGxDaGVjaykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAppbmRleCA5
ZGE1OWEwMDliOGJjMjE4YjE0MmFlODRhY2IxZWE2ZmJlMDU5NDIyLi4wY2FiMzk2YTRjMDZiYjM3
ZDk0YTE5MzAyZTI0NjJmY2M5ZmM1M2FmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCkBAIC0yNjEsNyArMjYxLDcgQEAgUmVn
aXN0ZXJJRCogUHJvcGVydHlMaXN0Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9y
JiBnZW5lcmF0b3IsIFJlZ2lzdGUKICAgICAgICAgICAgIEdldHRlclNldHRlclBhaXIgcGFpcihu
b2RlLCBzdGF0aWNfY2FzdDxQcm9wZXJ0eU5vZGUqPigwKSk7CiAgICAgICAgICAgICBHZXR0ZXJT
ZXR0ZXJNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtYXAuYWRkKG5vZGUtPm5hbWUoKS5pbXBsKCks
IHBhaXIpOwogICAgICAgICAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgICAg
ICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZC5zZWNvbmQgPSBub2RlOworICAgICAgICAgICAg
ICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuc2Vjb25kID0gbm9kZTsKICAgICAgICAgfQogCiAg
ICAgICAgIC8vIEl0ZXJhdGUgb3ZlciB0aGUgcmVtYWluaW5nIHByb3BlcnRpZXMgaW4gdGhlIGxp
c3QuCkBAIC0yNzksNyArMjc5LDcgQEAgUmVnaXN0ZXJJRCogUHJvcGVydHlMaXN0Tm9kZTo6ZW1p
dEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGUKICAgICAgICAg
ICAgIEFTU0VSVChub2RlLT5tX3R5cGUgPT0gUHJvcGVydHlOb2RlOjpHZXR0ZXIgfHwgbm9kZS0+
bV90eXBlID09IFByb3BlcnR5Tm9kZTo6U2V0dGVyKTsKICAgICAgICAgICAgIEdldHRlclNldHRl
ck1hcDo6aXRlcmF0b3IgaXQgPSBtYXAuZmluZChub2RlLT5uYW1lKCkuaW1wbCgpKTsKICAgICAg
ICAgICAgIEFTU0VSVChpdCAhPSBtYXAuZW5kKCkpOwotICAgICAgICAgICAgR2V0dGVyU2V0dGVy
UGFpciYgcGFpciA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICBHZXR0ZXJTZXR0ZXJQYWlyJiBw
YWlyID0gaXQtPnZhbHVlOwogCiAgICAgICAgICAgICAvLyBXYXMgdGhpcyBhbHJlYWR5IGdlbmVy
YXRlZCBhcyBhIHBhcnQgb2YgaXRzIHBhcnRuZXI/CiAgICAgICAgICAgICBpZiAocGFpci5zZWNv
bmQgPT0gbm9kZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9E
ZWJ1Z2dlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3Bw
CmluZGV4IDBhNjZkNmYzNGU2ZjRiYzljYzZkMDQ3YmY5ODZkZmI0MWI3MGViZDAuLjU0ODNkMmUw
ZTc0YTc0NmJmNmJkZDVmMjYzMTkxYjE5YzAzYWY5YTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcApAQCAtNTksNyArNTksNyBAQCBpbmxpbmUgUmVjb21w
aWxlcjo6flJlY29tcGlsZXIoKQogICAgIC8vIEphdmFTY3JpcHQgaW4gdGhlIGluc3BlY3Rvci4K
ICAgICBTb3VyY2VQcm92aWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9zb3VyY2VQcm92
aWRlcnMuZW5kKCk7CiAgICAgZm9yIChTb3VyY2VQcm92aWRlck1hcDo6Y29uc3RfaXRlcmF0b3Ig
aXRlciA9IG1fc291cmNlUHJvdmlkZXJzLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCi0g
ICAgICAgIG1fZGVidWdnZXItPnNvdXJjZVBhcnNlZChpdGVyLT5zZWNvbmQsIGl0ZXItPmZpcnN0
LCAtMSwgVVN0cmluZygpKTsKKyAgICAgICAgbV9kZWJ1Z2dlci0+c291cmNlUGFyc2VkKGl0ZXIt
PnZhbHVlLCBpdGVyLT5rZXksIC0xLCBVU3RyaW5nKCkpOwogfQogCiBpbmxpbmUgdm9pZCBSZWNv
bXBpbGVyOjpvcGVyYXRvcigpKEpTQ2VsbCogY2VsbCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3Bw
CmluZGV4IDY0MGEwYTk2NjViMTZlYjU0NWRiNTM1YjBhNzg0YmNlYzM5MzhlMzEuLmFlZTI1Mjcw
MjI3OWZlMTg2YmU2MTZjM2MzNjMxYjI4MGQ1NTAyNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNl
LmNwcApAQCAtMjE0LDcgKzIxNCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIE1ha2Ugc3VyZSB0aGF0IGlmIGl0J3MgYSB2YXJpYWJsZSB0aGF0IHdlIHRoaW5rIGlzIGFs
aWFzZWQgdG8KICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBhcmd1bWVudHMsIHRoYXQg
d2Uga25vdyB0aGF0IGl0IG1pZ2h0IGFjdHVhbGx5IG5vdCBiZS4KICAgICAgICAgICAgICAgICAg
ICAgICAgIEFyZ3VtZW50c0FsaWFzaW5nRGF0YSYgZGF0YSA9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbV9hcmd1bWVudHNBbGlhc2luZy5maW5kKHZhcmlhYmxlQWNjZXNzRGF0YSktPnNl
Y29uZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2FyZ3VtZW50c0FsaWFzaW5nLmZp
bmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+dmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhLm1lcmdlTm9uQXJndW1lbnRzQXNzaWdubWVudCgpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgZGF0YS5tZXJnZUNhbGxDb250ZXh0KG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUp
OwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yMzIsNyArMjMyLDcgQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgQXJndW1lbnRzQWxpYXNpbmdEYXRhJiBkYXRhID0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIG1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFj
Y2Vzc0RhdGEpLT5zZWNvbmQ7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2FyZ3VtZW50c0Fs
aWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+dmFsdWU7CiAgICAgICAgICAgICAgICAg
ICAgIGRhdGEubWVyZ2VBcmd1bWVudHNBc3NpZ25tZW50KCk7CiAgICAgICAgICAgICAgICAgICAg
IC8vIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSB2YXJpYWJsZSdzIHVzZXMgYXJlIGluIHRoZSBzYW1l
IGNvbnRleHQgYXMKICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGFyZ3VtZW50cyBpdCBpcyBh
bGlhc2luZy4KQEAgLTI0Nyw3ICsyNDcsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAg
IGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKSkKICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBBcmd1bWVudHNBbGlhc2luZ0RhdGEm
IGRhdGEgPQotICAgICAgICAgICAgICAgICAgICAgICAgbV9hcmd1bWVudHNBbGlhc2luZy5maW5k
KHZhcmlhYmxlQWNjZXNzRGF0YSktPnNlY29uZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1f
YXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT52YWx1ZTsKICAgICAg
ICAgICAgICAgICAgICAgZGF0YS5tZXJnZUNhbGxDb250ZXh0KG5vZGUuY29kZU9yaWdpbi5pbmxp
bmVDYWxsRnJhbWUpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICB9CkBAIC0yNTcsNyArMjU3LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBpZiAo
dmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgQXJndW1lbnRzQWxpYXNpbmdEYXRhJiBkYXRh
ID0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJp
YWJsZUFjY2Vzc0RhdGEpLT5zZWNvbmQ7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2FyZ3Vt
ZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+dmFsdWU7CiAgICAgICAgICAg
ICAgICAgICAgIGRhdGEubWVyZ2VDYWxsQ29udGV4dChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2Fs
bEZyYW1lKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIC8vIElm
IGEgdmFyaWFibGUgaXMgdXNlZCBpbiBhIGZsdXNoIHRoZW4gYnkgZGVmaW5pdGlvbiBpdCBlc2Nh
cGVzLgpAQCAtMjcwLDcgKzI3MCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgaWYg
KHZhcmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgpKQogICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIEFyZ3VtZW50c0FsaWFzaW5nRGF0YSYgZGF0
YSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFy
aWFibGVBY2Nlc3NEYXRhKS0+c2Vjb25kOworICAgICAgICAgICAgICAgICAgICAgICAgbV9hcmd1
bWVudHNBbGlhc2luZy5maW5kKHZhcmlhYmxlQWNjZXNzRGF0YSktPnZhbHVlOwogICAgICAgICAg
ICAgICAgICAgICBkYXRhLm1lcmdlTm9uQXJndW1lbnRzQXNzaWdubWVudCgpOwogICAgICAgICAg
ICAgICAgICAgICBkYXRhLm1lcmdlQ2FsbENvbnRleHQobm9kZS5jb2RlT3JpZ2luLmlubGluZUNh
bGxGcmFtZSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzU0LDcgKzM1NCw3IEBA
IHB1YmxpYzoKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgQXJndW1lbnRzQWxpYXNpbmdEYXRhJiBkYXRhID0KLSAgICAgICAgICAgICAgICAgICAg
bV9hcmd1bWVudHNBbGlhc2luZy5maW5kKHZhcmlhYmxlQWNjZXNzRGF0YSktPnNlY29uZDsKKyAg
ICAgICAgICAgICAgICAgICAgbV9hcmd1bWVudHNBbGlhc2luZy5maW5kKHZhcmlhYmxlQWNjZXNz
RGF0YSktPnZhbHVlOwogICAgICAgICAgICAgICAgIGlmIChkYXRhLmlzVmFsaWQoKSkKICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgCkBAIC0zNzMsNyArMzcz
LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGRhdGFMb2coIkNhcHR1cmVkIik7CiAgICAg
ICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBBcmd1bWVudHNBbGlhc2luZ0RhdGEmIGRh
dGEgPQotICAgICAgICAgICAgICAgICAgICBtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFi
bGVBY2Nlc3NEYXRhKS0+c2Vjb25kOworICAgICAgICAgICAgICAgICAgICBtX2FyZ3VtZW50c0Fs
aWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+dmFsdWU7CiAgICAgICAgICAgICAgICAg
Ym9vbCBmaXJzdCA9IHRydWU7CiAgICAgICAgICAgICAgICAgaWYgKGRhdGEuY2FsbENvbnRleHRJ
c1ZhbGlkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFmaXJzdCkKQEAgLTQ1NCw3ICs0
NTQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIC8vIHRoaW5ncy4gTm90ZSBhbHNv
IHRoYXQgdGhlIFNldExvY2FsIHNob3VsZCBiZWNvbWUgZGVhZCBhcyBzb29uIGFzCiAgICAgICAg
ICAgICAgICAgICAgIC8vIHdlIHJlcGxhY2UgYWxsIHVzZXMgb2YgdGhpcyB2YXJpYWJsZSB3aXRo
IEdldE15QXJndW1lbnRzTGVuZ3RoIGFuZAogICAgICAgICAgICAgICAgICAgICAvLyBHZXRNeUFy
Z3VtZW50QnlWYWwuCi0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChtX2FyZ3VtZW50c0FsaWFz
aW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+c2Vjb25kLmlzVmFsaWQoKSk7CisgICAgICAg
ICAgICAgICAgICAgIEFTU0VSVChtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nl
c3NEYXRhKS0+dmFsdWUuaXNWYWxpZCgpKTsKICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8
PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPm1lcmdlSXNBcmd1bWVudHNBbGlhcyh0cnVlKTsKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQpAQCAtNzE0LDcgKzcxNCw3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1
cmVkKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKLSAgICAgICAgICAg
IEFyZ3VtZW50c0FsaWFzaW5nRGF0YSYgZGF0YSA9IG1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2
YXJpYWJsZUFjY2Vzc0RhdGEpLT5zZWNvbmQ7CisgICAgICAgICAgICBBcmd1bWVudHNBbGlhc2lu
Z0RhdGEmIGRhdGEgPSBtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRh
KS0+dmFsdWU7CiAgICAgICAgICAgICBkYXRhLmVzY2FwZXMgPSB0cnVlOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KQEAgLTc2MSw3ICs3NjEsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBBcmd1bWVudHNBbGlhc2lu
Z0RhdGEmIGRhdGEgPSBtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRh
KS0+c2Vjb25kOworICAgICAgICBBcmd1bWVudHNBbGlhc2luZ0RhdGEmIGRhdGEgPSBtX2FyZ3Vt
ZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+dmFsdWU7CiAgICAgICAgIGRh
dGEubWVyZ2VDYWxsQ29udGV4dChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAg
ICB9CiAgICAgCkBAIC03ODQsNyArNzg0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIEFyZ3VtZW50c0FsaWFzaW5nRGF0YSYg
ZGF0YSA9Ci0gICAgICAgICAgICAgICAgbV9hcmd1bWVudHNBbGlhc2luZy5maW5kKHZhcmlhYmxl
QWNjZXNzRGF0YSktPnNlY29uZDsKKyAgICAgICAgICAgICAgICBtX2FyZ3VtZW50c0FsaWFzaW5n
LmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+dmFsdWU7CiAgICAgICAgICAgICBpZiAoIWRhdGEu
aXNWYWxpZCgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIApAQCAtODIwLDcgKzgyMCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgJiYg
IW1fY3JlYXRlc0FyZ3VtZW50cy5jb250YWlucyhjaGlsZC5jb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZSk7CiAgICAgICAgICAgICBib29sIGlzQWxpYXNlZEFyZ3VtZW50c1JlZ2lzdGVyID0KICAg
ICAgICAgICAgICAgICAhdmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkKLSAgICAgICAg
ICAgICAgICAmJiBtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+
c2Vjb25kLmlzVmFsaWQoKQorICAgICAgICAgICAgICAgICYmIG1fYXJndW1lbnRzQWxpYXNpbmcu
ZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT52YWx1ZS5pc1ZhbGlkKCkKICAgICAgICAgICAgICAg
ICAmJiAhbV9jcmVhdGVzQXJndW1lbnRzLmNvbnRhaW5zKGNoaWxkLmNvZGVPcmlnaW4uaW5saW5l
Q2FsbEZyYW1lKTsKICAgICAgICAgICAgIGlmICghaXNEZWFkQXJndW1lbnRzUmVnaXN0ZXIgJiYg
IWlzQWxpYXNlZEFyZ3VtZW50c1JlZ2lzdGVyKQogICAgICAgICAgICAgICAgIGJyZWFrOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBc3NlbWJseUhlbHBlcnMuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBc3NlbWJseUhlbHBlcnMuY3BwCmluZGV4
IDc3OTllZTUwNTkzNWFkNGUxM2JjM2NlMThkMGI3MzJhM2FhNDI5NmUuLmI1YjY2ODQxOGE2M2E3
Yzk0NGRmNWRjNDdhNjA0YjFlNTM1NzQxZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQXNzZW1ibHlIZWxwZXJzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5jcHAKQEAgLTQ5LDkgKzQ5LDkgQEAgVmVjdG9yPEJ5
dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIEFzc2VtYmx5SGVscGVyczo6ZGVjb2RlZENvZGVNYXBG
b3IoQ29kZUJsb2NrKgogICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgVmVjdG9yPEJ5dGVjb2RlQW5k
TWFjaGluZU9mZnNldD4gPjo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fZGVjb2RlZENvZGVNYXBzLmFk
ZChjb2RlQmxvY2ssIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+KCkpOwogICAgIAog
ICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgY29kZUJsb2NrLT5qaXRDb2RlTWFw
KCktPmRlY29kZShyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7CisgICAgICAgIGNvZGVCbG9jay0+
aml0Q29kZU1hcCgpLT5kZWNvZGUocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CiAgICAgCi0gICAg
cmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgIHJldHVybiByZXN1bHQuaXRlcmF0
b3ItPnZhbHVlOwogfQogCiAjaWYgRU5BQkxFKFNBTVBMSU5HX0ZMQUdTKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZUNhY2hlLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlQ2FjaGUuaAppbmRleCBmNmE3NDVjNjY1ODcxMzNi
MTJjYmQ0NGZmM2E5MjlhOTNjMWJhMTA3Li44ZWQxNTc4ZjI2ZDNhNGU3NWUyM2E5ZDhlZWZmMDlh
YjRhYjYwMDljIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVD
b2RlQ2FjaGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlQ2Fj
aGUuaApAQCAtMTMyLDEwICsxMzIsMTAgQEAgcHVibGljOgogICAgICAgICBNYXA6Oml0ZXJhdG9y
IGJlZ2luID0gbV9tYXAuYmVnaW4oKTsKICAgICAgICAgTWFwOjppdGVyYXRvciBlbmQgPSBtX21h
cC5lbmQoKTsKICAgICAgICAgZm9yIChNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBiZWdpbjsgaXRlciAh
PSBlbmQ7ICsraXRlcikgewotICAgICAgICAgICAgaWYgKCFpdGVyLT5zZWNvbmQuY29kZUJsb2Nr
KQorICAgICAgICAgICAgaWYgKCFpdGVyLT52YWx1ZS5jb2RlQmxvY2spCiAgICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoaXRlci0+c2Vjb25kLm93bmVkKSB7Ci0gICAg
ICAgICAgICAgICAgZGVsZXRlIGl0ZXItPnNlY29uZC5jb2RlQmxvY2s7CisgICAgICAgICAgICBp
ZiAoaXRlci0+dmFsdWUub3duZWQpIHsKKyAgICAgICAgICAgICAgICBkZWxldGUgaXRlci0+dmFs
dWUuY29kZUJsb2NrOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CkBAIC0xNDUsNyArMTQ1LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgTWFw
OjppdGVyYXRvciBpdGVyID0gbV9tYXAuZmluZChrZXkpOwogICAgICAgICBpZiAoaXRlciAhPSBt
X21hcC5lbmQoKSkKLSAgICAgICAgICAgIHJldHVybiBpdGVyLT5zZWNvbmQuY29kZUJsb2NrOwor
ICAgICAgICAgICAgcmV0dXJuIGl0ZXItPnZhbHVlLmNvZGVCbG9jazsKICAgICAgICAgCiAgICAg
ICAgIEJ5dGVDb2RlQ2FjaGVWYWx1ZSB2YWx1ZTsKICAgICAgICAgCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCmluZGV4IGRmMTljMzA4MmQ3YzVi
YTJjNjU4ZDU5MjEyNDBlZjA2ZGMzODgzYTUuLjNlZTNiZDJiZTRmOWQxODdmOTczYWU1YmQ5MTZl
YmM0ODk2ZDhmODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0
ZUNvZGVQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwCkBAIC02NjAsOSArNjYwLDkgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAg
IEhhc2hNYXA8SlNDZWxsKiwgTm9kZUluZGV4Pjo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fY2VsbENv
bnN0YW50Tm9kZXMuYWRkKGNlbGwsIE5vTm9kZSk7CiAgICAgICAgIGlmIChyZXN1bHQuaXNOZXdF
bnRyeSkKLSAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gYWRkVG9HcmFwaChX
ZWFrSlNDb25zdGFudCwgT3BJbmZvKGNlbGwpKTsKKyAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRv
ci0+dmFsdWUgPSBhZGRUb0dyYXBoKFdlYWtKU0NvbnN0YW50LCBPcEluZm8oY2VsbCkpOwogICAg
ICAgICAKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICBy
ZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAgICB9CiAgICAgCiAgICAgQ29kZU9yaWdp
biBjdXJyZW50Q29kZU9yaWdpbigpCkBAIC0zMjA5LDcgKzMyMDksNyBAQCBCeXRlQ29kZVBhcnNl
cjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lU3RhY2tFbnRyeSgKICAgICAgICAgICAgIElkZW50
aWZpZXJNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBieXRlQ29kZVBhcnNlci0+bV9pZGVudGlmaWVy
TWFwLmFkZChyZXAsIGJ5dGVDb2RlUGFyc2VyLT5tX2NvZGVCbG9jay0+bnVtYmVyT2ZJZGVudGlm
aWVycygpKTsKICAgICAgICAgICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKICAgICAgICAgICAg
ICAgICBieXRlQ29kZVBhcnNlci0+bV9jb2RlQmxvY2stPmFkZElkZW50aWZpZXIoSWRlbnRpZmll
cihieXRlQ29kZVBhcnNlci0+bV9nbG9iYWxEYXRhLCByZXApKTsKLSAgICAgICAgICAgIG1faWRl
bnRpZmllclJlbWFwW2ldID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgICAgICBt
X2lkZW50aWZpZXJSZW1hcFtpXSA9IHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgIH0K
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb2RlQmxvY2stPm51bWJlck9mQ29uc3Rh
bnRSZWdpc3RlcnMoKTsgKytpKSB7CiAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gY29kZUJs
b2NrLT5nZXRDb25zdGFudChpICsgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOwpAQCAtMzIy
Nyw3ICszMjI3LDcgQEAgQnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZVN0
YWNrRW50cnkoCiAgICAgICAgICAgICAgICAgYnl0ZUNvZGVQYXJzZXItPm1fY29kZUJsb2NrLT5h
ZGRDb25zdGFudCh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgYnl0ZUNvZGVQYXJzZXItPm1fY29u
c3RhbnRzLmFwcGVuZChDb25zdGFudFJlY29yZCgpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIG1fY29uc3RhbnRSZW1hcFtpXSA9IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgICAg
ICAgICAgbV9jb25zdGFudFJlbWFwW2ldID0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAgICAg
ICAgfQogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY29kZUJsb2NrLT5udW1iZXJP
Zkdsb2JhbFJlc29sdmVJbmZvcygpOyArK2kpCiAgICAgICAgICAgICBieXRlQ29kZVBhcnNlci0+
bV9jb2RlQmxvY2stPmFkZEdsb2JhbFJlc29sdmVJbmZvKHN0ZDo6bnVtZXJpY19saW1pdHM8dW5z
aWduZWQ+OjptYXgoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAKaW5kZXggZWU3ZGQwYTM3YTQy
NmQ0ZjhkOTk2OGNmOGZmZjk5ZTQ1ZjE5NTljZC4uOGNhNzY0ZGQxNjg3NzdjNzY2OTc4ZmVhNTYx
OGFkM2NkZDkzMjg2YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
dHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcApAQCAtMTI4LDcgKzEyOCw3
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGRhdGFMb2coIlplcm9pbmcgdGhlIHN0cnVjdHVyZSB0
byBob2lzdCBmb3IgJXMgYmVjYXVzZSB0aGUgcmF0aW8gaXMgJWxmLlxuIiwKICAgICAgICAgICAg
ICAgICAgICAgbV9ncmFwaC5uYW1lT2ZWYXJpYWJsZUFjY2Vzc0RhdGEodmFyaWFibGUpLCB2YXJp
YWJsZS0+dm90ZVJhdGlvKCkpOwogI2VuZGlmCi0gICAgICAgICAgICBpdGVyLT5zZWNvbmQubV9z
dHJ1Y3R1cmUgPSAwOworICAgICAgICAgICAgaXRlci0+dmFsdWUubV9zdHJ1Y3R1cmUgPSAwOwog
ICAgICAgICB9CiAKICAgICAgICAgLy8gSWRlbnRpZnkgdGhlIHNldCBvZiB2YXJpYWJsZXMgdGhh
dCBhcmUgbGl2ZSBhY3Jvc3MgYSBzdHJ1Y3R1cmUgY2xvYmJlci4KQEAgLTI5NSw5ICsyOTUsOSBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIEhhc2hNYXA8VmFyaWFibGVBY2Nlc3NEYXRh
KiwgQ2hlY2tEYXRhPjo6aXRlcmF0b3IgaXRlciA9IG1fbWFwLmZpbmQodmFyaWFibGUpOwogICAg
ICAgICAgICAgICAgICAgICBpZiAoaXRlciA9PSBtX21hcC5lbmQoKSkKICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWl0ZXItPnNlY29uZC5t
X3N0cnVjdHVyZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpdGVyLT52YWx1ZS5tX3N0cnVj
dHVyZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICBpZiAoaXRlci0+c2Vjb25kLm1faXNDbG9iYmVyZWQgJiYgIWl0ZXItPnNlY29uZC5tX3N0cnVj
dHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRJc1N0aWxsVmFsaWQoKSkKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGl0ZXItPnZhbHVlLm1faXNDbG9iYmVyZWQgJiYgIWl0ZXItPnZhbHVlLm1f
c3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldElzU3RpbGxWYWxpZCgpKQogICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgICAgICBub2RlLnJlZigpOwpAQCAtMzExLDcgKzMxMSw3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICAgICAgbV9ncmFwaC5hcHBlbmQoZ2V0TG9jYWwpOwogICAgICAgICAgICAgICAg
ICAgICBpbnNlcnRpb25TZXQuYXBwZW5kKGluZGV4SW5CbG9jayArIDEsIGdldExvY2FsSW5kZXgp
OwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgTm9kZSBjaGVja1N0
cnVjdHVyZShDaGVja1N0cnVjdHVyZSwgY29kZU9yaWdpbiwgT3BJbmZvKG1fZ3JhcGguYWRkU3Ry
dWN0dXJlU2V0KGl0ZXItPnNlY29uZC5tX3N0cnVjdHVyZSkpLCBnZXRMb2NhbEluZGV4KTsKKyAg
ICAgICAgICAgICAgICAgICAgTm9kZSBjaGVja1N0cnVjdHVyZShDaGVja1N0cnVjdHVyZSwgY29k
ZU9yaWdpbiwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KGl0ZXItPnZhbHVlLm1fc3Ry
dWN0dXJlKSksIGdldExvY2FsSW5kZXgpOwogICAgICAgICAgICAgICAgICAgICBjaGVja1N0cnVj
dHVyZS5yZWYoKTsKICAgICAgICAgICAgICAgICAgICAgTm9kZUluZGV4IGNoZWNrU3RydWN0dXJl
SW5kZXggPSBtX2dyYXBoLnNpemUoKTsKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5hcHBl
bmQoY2hlY2tTdHJ1Y3R1cmUpOwpAQCAtMzMxLDkgKzMzMSw5IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICAgICAgSGFzaE1hcDxWYXJpYWJsZUFjY2Vzc0RhdGEqLCBDaGVja0RhdGE+OjppdGVy
YXRvciBpdGVyID0gbV9tYXAuZmluZCh2YXJpYWJsZSk7CiAgICAgICAgICAgICAgICAgICAgIGlm
IChpdGVyID09IG1fbWFwLmVuZCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmICghaXRlci0+c2Vjb25kLm1fc3RydWN0dXJlKQorICAgICAg
ICAgICAgICAgICAgICBpZiAoIWl0ZXItPnZhbHVlLm1fc3RydWN0dXJlKQogICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpdGVyLT5zZWNvbmQu
bV9pc0Nsb2JiZXJlZCAmJiAhaXRlci0+c2Vjb25kLm1fc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0
Y2hwb2ludFNldElzU3RpbGxWYWxpZCgpKQorICAgICAgICAgICAgICAgICAgICBpZiAoaXRlci0+
dmFsdWUubV9pc0Nsb2JiZXJlZCAmJiAhaXRlci0+dmFsdWUubV9zdHJ1Y3R1cmUtPnRyYW5zaXRp
b25XYXRjaHBvaW50U2V0SXNTdGlsbFZhbGlkKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKIAogICAgICAgICAgICAgICAgICAgICAvLyBGaXJzdCBpbnNlcnQgYSBkZWFkIFNldExv
Y2FsIHRvIHRlbGwgT1NSIHRoYXQgdGhlIGNoaWxkJ3MgdmFsdWUgc2hvdWxkCkBAIC0zNTAsNyAr
MzUwLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoW2NoaWxkMV0ucmVm
KCk7CiAgICAgICAgICAgICAgICAgICAgIC8vIFVzZSBhIEZvcndhcmRDaGVja1N0cnVjdHVyZSB0
byBpbmRpY2F0ZSB0aGF0IHdlIHNob3VsZCBleGl0IHRvIHRoZQogICAgICAgICAgICAgICAgICAg
ICAvLyBuZXh0IGJ5dGVjb2RlIGluc3RydWN0aW9uIHJhdGhlciB0aGFuIHJlZXhlY3V0aW5nIHRo
ZSBjdXJyZW50IG9uZS4KLSAgICAgICAgICAgICAgICAgICAgTm9kZSBjaGVja1N0cnVjdHVyZShG
b3J3YXJkQ2hlY2tTdHJ1Y3R1cmUsIGNvZGVPcmlnaW4sIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVj
dHVyZVNldChpdGVyLT5zZWNvbmQubV9zdHJ1Y3R1cmUpKSwgY2hpbGQxKTsKKyAgICAgICAgICAg
ICAgICAgICAgTm9kZSBjaGVja1N0cnVjdHVyZShGb3J3YXJkQ2hlY2tTdHJ1Y3R1cmUsIGNvZGVP
cmlnaW4sIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChpdGVyLT52YWx1ZS5tX3N0cnVj
dHVyZSkpLCBjaGlsZDEpOwogICAgICAgICAgICAgICAgICAgICBjaGVja1N0cnVjdHVyZS5yZWYo
KTsKICAgICAgICAgICAgICAgICAgICAgTm9kZUluZGV4IGNoZWNrU3RydWN0dXJlSW5kZXggPSBt
X2dyYXBoLnNpemUoKTsKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5hcHBlbmQoY2hlY2tT
dHJ1Y3R1cmUpOwpAQCAtMzY2LDE2ICszNjYsMTYgQEAgcHVibGljOgogICAgICAgICAgICAgICAg
ICAgICBIYXNoTWFwPFZhcmlhYmxlQWNjZXNzRGF0YSosIENoZWNrRGF0YT46Oml0ZXJhdG9yIGl0
ZXIgPSBtX21hcC5maW5kKGNoaWxkLnZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKGl0ZXIgPT0gbV9tYXAuZW5kKCkpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpdGVyLT5zZWNvbmQubV9zdHJ1Y3R1
cmUpCisgICAgICAgICAgICAgICAgICAgIGlmICghaXRlci0+dmFsdWUubV9zdHJ1Y3R1cmUpCiAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFp
dGVyLT5zZWNvbmQubV9pc0Nsb2JiZXJlZCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIWl0
ZXItPnZhbHVlLm1faXNDbG9iYmVyZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUu
c2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBB
U1NFUlQobm9kZS5yZWZDb3VudCgpID09IDEpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpdGVy
LT5zZWNvbmQubV9zdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SXNTdGlsbFZhbGlk
KCkpCisgICAgICAgICAgICAgICAgICAgIGlmICghaXRlci0+dmFsdWUubV9zdHJ1Y3R1cmUtPnRy
YW5zaXRpb25XYXRjaHBvaW50U2V0SXNTdGlsbFZhbGlkKCkpCiAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGl0ZXItPnNlY29uZC5tX3N0
cnVjdHVyZSA9PSBub2RlLnN0cnVjdHVyZVNldCgpLnNpbmdsZXRvblN0cnVjdHVyZSgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKGl0ZXItPnZhbHVlLm1fc3RydWN0dXJlID09IG5vZGUu
c3RydWN0dXJlU2V0KCkuc2luZ2xldG9uU3RydWN0dXJlKCkpOwogICAgICAgICAgICAgICAgICAg
ICBub2RlLmNvbnZlcnRUb1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KCk7CiAgICAgICAg
ICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBicmVhazsK
QEAgLTM5OCw5ICszOTgsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9tYXAuYWRkKHZhcmlh
YmxlLCBDaGVja0RhdGEoc3RydWN0dXJlLCBmYWxzZSkpOwogICAgICAgICBpZiAocmVzdWx0Lmlz
TmV3RW50cnkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChyZXN1bHQuaXRlcmF0
b3ItPnNlY29uZC5tX3N0cnVjdHVyZSA9PSBzdHJ1Y3R1cmUpCisgICAgICAgIGlmIChyZXN1bHQu
aXRlcmF0b3ItPnZhbHVlLm1fc3RydWN0dXJlID09IHN0cnVjdHVyZSkKICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQubV9zdHJ1Y3R1cmUgPSAwOwor
ICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLm1fc3RydWN0dXJlID0gMDsKICAgICB9CiAg
ICAgCiAgICAgdm9pZCBub3RpY2VTdHJ1Y3R1cmVDaGVjayhWYXJpYWJsZUFjY2Vzc0RhdGEqIHZh
cmlhYmxlLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCkKQEAgLTQxOCw3ICs0MTgsNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgbV9tYXAuZmluZCh2YXJpYWJsZSk7CiAgICAgICAgIGlmIChpdGVy
ID09IG1fbWFwLmVuZCgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpdGVyLT5zZWNv
bmQubV9pc0Nsb2JiZXJlZCA9IHRydWU7CisgICAgICAgIGl0ZXItPnZhbHVlLm1faXNDbG9iYmVy
ZWQgPSB0cnVlOwogICAgIH0KICAgICAKICAgICB2b2lkIGNsb2JiZXIoY29uc3QgT3BlcmFuZHM8
VmFyaWFibGVBY2Nlc3NEYXRhKj4mIGxpdmUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3Bw
CmluZGV4IDY2OTE3ODgwNGU2M2Y4ZTc1YTczNmVlNGFlYWUzYjJjOGNkMTY5OWIuLjllMWM0N2Nh
YjZmOTJmZDgxNWRkNmRlYmVmODg1NjM3MzBhZGNmZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuY3BwCkBAIC0zNDUsNyArMzQ1LDcgQEAgdm9pZCBIZWFwOjptYXJrUHJvdGVjdGVkT2Jq
ZWN0cyhIZWFwUm9vdFZpc2l0b3ImIGhlYXBSb290VmlzaXRvcikKIHsKICAgICBQcm90ZWN0Q291
bnRTZXQ6Oml0ZXJhdG9yIGVuZCA9IG1fcHJvdGVjdGVkVmFsdWVzLmVuZCgpOwogICAgIGZvciAo
UHJvdGVjdENvdW50U2V0OjppdGVyYXRvciBpdCA9IG1fcHJvdGVjdGVkVmFsdWVzLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaGVhcFJvb3RWaXNpdG9yLnZpc2l0KCZpdC0+Zmly
c3QpOworICAgICAgICBoZWFwUm9vdFZpc2l0b3IudmlzaXQoJml0LT5rZXkpOwogfQogCiB2b2lk
IEhlYXA6OnB1c2hUZW1wU29ydFZlY3RvcihWZWN0b3I8VmFsdWVTdHJpbmdQYWlyPiogdGVtcFZl
Y3RvcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAppbmRleCA2ZjEzYWZiNzI1YTk5OTllNzNl
Y2YwMzg0NzQzNmU1YzNhMzNmMjE0Li5kNzEwMTBiZjIzZDdiMGI1ZWZlZmRlODVhNGE0NzBlNGIy
ZWNjOTViIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCkBAIC0zNDgsNyArMzQ4LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgewogICAgICAgICBQcm90ZWN0Q291bnRTZXQ6Oml0ZXJhdG9y
IGVuZCA9IG1fcHJvdGVjdGVkVmFsdWVzLmVuZCgpOwogICAgICAgICBmb3IgKFByb3RlY3RDb3Vu
dFNldDo6aXRlcmF0b3IgaXQgPSBtX3Byb3RlY3RlZFZhbHVlcy5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpCi0gICAgICAgICAgICBmdW5jdG9yKGl0LT5maXJzdCk7CisgICAgICAgICAgICBmdW5j
dG9yKGl0LT5rZXkpOwogICAgICAgICBtX2hhbmRsZVNldC5mb3JFYWNoU3Ryb25nSGFuZGxlKGZ1
bmN0b3IsIG1fcHJvdGVjdGVkVmFsdWVzKTsKIAogICAgICAgICByZXR1cm4gZnVuY3Rvci5yZXR1
cm5WYWx1ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSklUU3R1
YlJvdXRpbmVTZXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSklUU3R1YlJvdXRp
bmVTZXQuY3BwCmluZGV4IDA1NGJmMDZkZGNmYWE0N2VmN2Y2MmE5MTUwMzM5MzRiMzE4YTFmNDYu
LjhlMjc5MWZjNzE5MDNhYmQyNjY4YzQ4MjZmYjJlYzRmMTc0MDI1MGMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KSVRTdHViUm91dGluZVNldC5jcHAKQEAgLTgyLDcgKzgy
LDcgQEAgdm9pZCBKSVRTdHViUm91dGluZVNldDo6bWFya1Nsb3codWludHB0cl90IGFkZHJlc3Mp
CiAgICAgaWYgKGl0ZXIgPT0gbV9hZGRyZXNzVG9Sb3V0aW5lTWFwLmVuZCgpKQogICAgICAgICBy
ZXR1cm47CiAgICAgCi0gICAgaXRlci0+c2Vjb25kLT5tX21heUJlRXhlY3V0aW5nID0gdHJ1ZTsK
KyAgICBpdGVyLT52YWx1ZS0+bV9tYXlCZUV4ZWN1dGluZyA9IHRydWU7CiB9CiAKIHZvaWQgSklU
U3R1YlJvdXRpbmVTZXQ6OmRlbGV0ZVVubWFya2VkSmV0dGlzb25lZFN0dWJSb3V0aW5lcygpCkBA
IC05Nyw3ICs5Nyw3IEBAIHZvaWQgSklUU3R1YlJvdXRpbmVTZXQ6OmRlbGV0ZVVubWFya2VkSmV0
dGlzb25lZFN0dWJSb3V0aW5lcygpCiAgICAgICAgIHVpbnRwdHJfdCBzdGVwID0gSklUU3R1YlJv
dXRpbmU6OmFkZHJlc3NTdGVwKCk7CiAgICAgICAgIGZvciAodWludHB0cl90IGl0ZXIgPSBzdGFy
dDsgaXRlciA8IGVuZDsgaXRlciArPSBzdGVwKSB7CiAgICAgICAgICAgICBBU1NFUlQobV9hZGRy
ZXNzVG9Sb3V0aW5lTWFwLmZpbmQoaXRlcikgIT0gbV9hZGRyZXNzVG9Sb3V0aW5lTWFwLmVuZCgp
KTsKLSAgICAgICAgICAgIEFTU0VSVChtX2FkZHJlc3NUb1JvdXRpbmVNYXAuZmluZChpdGVyKS0+
c2Vjb25kID09IHJvdXRpbmUpOworICAgICAgICAgICAgQVNTRVJUKG1fYWRkcmVzc1RvUm91dGlu
ZU1hcC5maW5kKGl0ZXIpLT52YWx1ZSA9PSByb3V0aW5lKTsKICAgICAgICAgICAgIG1fYWRkcmVz
c1RvUm91dGluZU1hcC5yZW1vdmUoaXRlcik7CiAgICAgICAgIH0KICAgICAgICAgCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmNwcAppbmRleCBiMzEzNjY0M2I0ZWRiNzhmMWFm
MTE1M2M3OTVlYzIzMTAxNGM5NThlLi5lMzU4YmJmMzdmNGNlZDBkYjIxNGQ0MzVhMTA5YmUxNWVj
NzQ0MmI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2su
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5jcHAKQEAgLTUz
Myw3ICs1MzMsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgTWFya1N0YWNrOjppbnRlcm5hbEFwcGVu
ZChKU1ZhbHVlKiBzbG90KQogICAgICAgICAgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQog
ICAgICAgICAgICAgICAgIHN0cmluZy0+c2V0SGFzaENvbnN0U2luZ2xldG9uKCk7CiAgICAgICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIGV4aXN0aW5nSlNWYWx1ZSA9IGFk
ZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICAgICAgICAgIEpTVmFsdWUgZXhpc3Rp
bmdKU1ZhbHVlID0gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgICAgICAgICBp
ZiAodmFsdWUgIT0gZXhpc3RpbmdKU1ZhbHVlKQogICAgICAgICAgICAgICAgICAgICBqc0Nhc3Q8
SlNTdHJpbmcqPihleGlzdGluZ0pTVmFsdWUuYXNDZWxsKCkpLT5jbGVhckhhc2hDb25zdFNpbmds
ZXRvbigpOwogICAgICAgICAgICAgICAgICpzbG90ID0gZXhpc3RpbmdKU1ZhbHVlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vhay5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvV2Vhay5oCmluZGV4IDA3Njk4ZmQwNmIwNmM3NTAxNGJiNjViZjI1ZmMzMWMy
OGE5YTA2ODQuLjNjM2QxZDBjZWZlMTgxMjY1OWM1ZmE3M2M3NGQxOTk0OGMxOGZmZWIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWsuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9XZWFrLmgKQEAgLTE2NCw4ICsxNjQsOCBAQCB0ZW1wbGF0ZTx0eXBl
bmFtZSBNYXAsIHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWU+IGlubGluZSB2b2lkIHdlYWtS
ZW1vdmUoTWFwJgogICAgIHR5cGVuYW1lIE1hcDo6aXRlcmF0b3IgaXQgPSBtYXAuZmluZChrZXkp
OwogICAgIEFTU0VSVF9VTlVTRUQodmFsdWUsIHZhbHVlKTsKICAgICBBU1NFUlQoaXQgIT0gbWFw
LmVuZCgpKTsKLSAgICBBU1NFUlQoaXQtPnNlY29uZC53YXModmFsdWUpKTsKLSAgICBBU1NFUlQo
IWl0LT5zZWNvbmQpOworICAgIEFTU0VSVChpdC0+dmFsdWUud2FzKHZhbHVlKSk7CisgICAgQVNT
RVJUKCFpdC0+dmFsdWUpOwogICAgIG1hcC5yZW1vdmUoaXQpOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5jcHAKaW5kZXggNTJhNzE1OGU2NjA2YWZkZjc0YWUzMjZkZTgwOTkwMmE0MTkzMzQ0
Ni4uODM3YjhkMjFlM2I1MTJmZGZjMzUyZGZhN2VhMTMzMmI1MWRkNmRlNSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmNwcApAQCAtNzExLDggKzcxMSw4IEBAIEpJVENvZGUgSklUOjpwcml2YXRl
Q29tcGlsZShDb2RlUHRyKiBmdW5jdGlvbkVudHJ5QXJpdHlDaGVjaywgSklUQ29tcGlsYXRpb25F
ZmZvCiAKICAgICAgICAgICAgIFN0cmluZ0p1bXBUYWJsZTo6U3RyaW5nT2Zmc2V0VGFibGU6Oml0
ZXJhdG9yIGVuZCA9IHJlY29yZC5qdW1wVGFibGUuc3RyaW5nSnVtcFRhYmxlLT5vZmZzZXRUYWJs
ZS5lbmQoKTsgICAgICAgICAgICAKICAgICAgICAgICAgIGZvciAoU3RyaW5nSnVtcFRhYmxlOjpT
dHJpbmdPZmZzZXRUYWJsZTo6aXRlcmF0b3IgaXQgPSByZWNvcmQuanVtcFRhYmxlLnN0cmluZ0p1
bXBUYWJsZS0+b2Zmc2V0VGFibGUuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAg
ICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gaXQtPnNlY29uZC5icmFuY2hPZmZzZXQ7Ci0gICAg
ICAgICAgICAgICAgaXQtPnNlY29uZC5jdGlPZmZzZXQgPSBvZmZzZXQgPyBwYXRjaEJ1ZmZlci5s
b2NhdGlvbk9mKG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0ICsgb2Zmc2V0XSkgOiByZWNvcmQuanVt
cFRhYmxlLnN0cmluZ0p1bXBUYWJsZS0+Y3RpRGVmYXVsdDsKKyAgICAgICAgICAgICAgICB1bnNp
Z25lZCBvZmZzZXQgPSBpdC0+dmFsdWUuYnJhbmNoT2Zmc2V0OworICAgICAgICAgICAgICAgIGl0
LT52YWx1ZS5jdGlPZmZzZXQgPSBvZmZzZXQgPyBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKG1fbGFi
ZWxzW2J5dGVjb2RlT2Zmc2V0ICsgb2Zmc2V0XSkgOiByZWNvcmQuanVtcFRhYmxlLnN0cmluZ0p1
bXBUYWJsZS0+Y3RpRGVmYXVsdDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKaW5kZXggY2M4OTk1ODdmMDY5ZmIyZjNm
ZmZiMTE4NzAyOWRhMDk3M2Y2NmJhOS4uOTc1NzlmYjQyZWE1ZTBmOTMzYmQ4MDViNTQ2NzRhOWRj
YTNiOTNlYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKQEAgLTM0NTks
OCArMzQ1OSw4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBKSVRUaHVua3M6OmN0aVN0dWIoSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBUaHVua0dlbmVyYXRvCiB7CiAgICAgQ1RJU3R1Yk1hcDo6
QWRkUmVzdWx0IGVudHJ5ID0gbV9jdGlTdHViTWFwLmFkZChnZW5lcmF0b3IsIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZigpKTsKICAgICBpZiAoZW50cnkuaXNOZXdFbnRyeSkKLSAgICAgICAgZW50cnku
aXRlcmF0b3ItPnNlY29uZCA9IGdlbmVyYXRvcihnbG9iYWxEYXRhKTsKLSAgICByZXR1cm4gZW50
cnkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgZW50cnkuaXRlcmF0b3ItPnZhbHVlID0gZ2Vu
ZXJhdG9yKGdsb2JhbERhdGEpOworICAgIHJldHVybiBlbnRyeS5pdGVyYXRvci0+dmFsdWU7CiB9
CiAKIE5hdGl2ZUV4ZWN1dGFibGUqIEpJVFRodW5rczo6aG9zdEZ1bmN0aW9uU3R1YihKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEsIE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBOYXRpdmVGdW5jdGlv
biBjb25zdHJ1Y3RvcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
UGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAppbmRl
eCA0ZmQ2NzFmYjczNWYxZGQyMTUxMTEyOTMzMDMyMTg0ZjM4YmM3NDA1Li4yOTM2ODFmZjQ5Nzk1
MWYwMzc2ZTdiMTVlNWYyNjVhNjcyMGJjOGIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL1BhcnNlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9QYXJzZXIuY3BwCkBAIC0xMzY0LDEwICsxMzY0LDEwIEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVl
QnVpbGRlcj4gVHJlZUV4cHJlc3Npb24gUGFyc2VyPExleGVyVHlwZT46OnBhcnNlU3RyaWN0T2Jq
ZWN0CiAgICAgICAgIGlmICghbV9zeW50YXhBbHJlYWR5VmFsaWRhdGVkKSB7CiAgICAgICAgICAg
ICBPYmplY3RWYWxpZGF0aW9uTWFwOjpBZGRSZXN1bHQgcHJvcGVydHlFbnRyeSA9IG9iamVjdFZh
bGlkYXRvci5hZGQoY29udGV4dC5nZXROYW1lKHByb3BlcnR5KS5pbXBsKCksIGNvbnRleHQuZ2V0
VHlwZShwcm9wZXJ0eSkpOwogICAgICAgICAgICAgaWYgKCFwcm9wZXJ0eUVudHJ5LmlzTmV3RW50
cnkpIHsKLSAgICAgICAgICAgICAgICBmYWlsSWZUcnVlKHByb3BlcnR5RW50cnkuaXRlcmF0b3It
PnNlY29uZCA9PSBQcm9wZXJ0eU5vZGU6OkNvbnN0YW50KTsKKyAgICAgICAgICAgICAgICBmYWls
SWZUcnVlKHByb3BlcnR5RW50cnkuaXRlcmF0b3ItPnZhbHVlID09IFByb3BlcnR5Tm9kZTo6Q29u
c3RhbnQpOwogICAgICAgICAgICAgICAgIGZhaWxJZlRydWUoY29udGV4dC5nZXRUeXBlKHByb3Bl
cnR5KSA9PSBQcm9wZXJ0eU5vZGU6OkNvbnN0YW50KTsKLSAgICAgICAgICAgICAgICBmYWlsSWZU
cnVlKGNvbnRleHQuZ2V0VHlwZShwcm9wZXJ0eSkgJiBwcm9wZXJ0eUVudHJ5Lml0ZXJhdG9yLT5z
ZWNvbmQpOwotICAgICAgICAgICAgICAgIHByb3BlcnR5RW50cnkuaXRlcmF0b3ItPnNlY29uZCB8
PSBjb250ZXh0LmdldFR5cGUocHJvcGVydHkpOworICAgICAgICAgICAgICAgIGZhaWxJZlRydWUo
Y29udGV4dC5nZXRUeXBlKHByb3BlcnR5KSAmIHByb3BlcnR5RW50cnkuaXRlcmF0b3ItPnZhbHVl
KTsKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eUVudHJ5Lml0ZXJhdG9yLT52YWx1ZSB8PSBjb250
ZXh0LmdldFR5cGUocHJvcGVydHkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAg
IHRhaWwgPSBjb250ZXh0LmNyZWF0ZVByb3BlcnR5TGlzdChwcm9wZXJ0eUxvY2F0aW9uLCBwcm9w
ZXJ0eSwgdGFpbCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIv
UHJvZmlsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZS5jcHAK
aW5kZXggOTJlMzJjNGJhNjY0YTQxZjQxYTg4ZTkyOWNhM2YwY2U4YmY3MDc2Zi4uNDRkZDUyZDI0
MjM4OGYyZjM2NzBiOGRhZTZmNWY2MzM1MjI0OGIyNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wcm9maWxlci9Qcm9maWxlLmNwcApAQCAtMTExLDcgKzExMSw3IEBAIHR5cGVkZWYgV1RGOjpL
ZXlWYWx1ZVBhaXI8RnVuY3Rpb25DYWxsSGFzaENvdW50OjpWYWx1ZVR5cGUsIHVuc2lnbmVkPiBO
YW1lQ291bnRQCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBmdW5jdGlvbk5hbWVDb3VudFBhaXJDb21w
YXJhdG9yKGNvbnN0IE5hbWVDb3VudFBhaXImIGEsIGNvbnN0IE5hbWVDb3VudFBhaXImIGIpCiB7
Ci0gICAgcmV0dXJuIGEuc2Vjb25kID4gYi5zZWNvbmQ7CisgICAgcmV0dXJuIGEudmFsdWUgPiBi
LnZhbHVlOwogfQogCiB2b2lkIFByb2ZpbGU6OmRlYnVnUHJpbnREYXRhU2FtcGxlU3R5bGUoKSBj
b25zdApAQCAtMTI4LDcgKzEyOCw3IEBAIHZvaWQgUHJvZmlsZTo6ZGVidWdQcmludERhdGFTYW1w
bGVTdHlsZSgpIGNvbnN0CiAKICAgICBzdGQ6OnNvcnQoc29ydGVkRnVuY3Rpb25zLmJlZ2luKCks
IHNvcnRlZEZ1bmN0aW9ucy5lbmQoKSwgZnVuY3Rpb25OYW1lQ291bnRQYWlyQ29tcGFyYXRvcik7
CiAgICAgZm9yIChOYW1lQ291bnRQYWlyVmVjdG9yOjppdGVyYXRvciBpdCA9IHNvcnRlZEZ1bmN0
aW9ucy5iZWdpbigpOyBpdCAhPSBzb3J0ZWRGdW5jdGlvbnMuZW5kKCk7ICsraXQpCi0gICAgICAg
IGRhdGFMb2coIiAgICAgICAgJS0xMmQlc1xuIiwgKCppdCkuc2Vjb25kLCBVU3RyaW5nKCgqaXQp
LmZpcnN0KS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgZGF0YUxvZygiICAgICAgICAlLTEyZCVz
XG4iLCAoKml0KS52YWx1ZSwgVVN0cmluZygoKml0KS5rZXkpLnV0ZjgoKS5kYXRhKCkpOwogCiAg
ICAgZGF0YUxvZygiXG5Tb3J0IGJ5IHRvcCBvZiBzdGFjaywgc2FtZSBjb2xsYXBzZWQgKHdoZW4g
Pj0gNSk6XG4iKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0lkZW50aWZpZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmll
ci5jcHAKaW5kZXggMGZjNTRmM2M2ZmQ4NzViMzliMWM1ZjA1MzZmM2ZlYjY4MzE4MjI0MS4uNDhh
N2FkZjBjZjBjNjhjYjdkZDQxNDFjZjJkNmUxZjZlMGUwY2IyYSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5jcHAKQEAgLTEwMiw3ICsxMDIsNyBAQCBQYXNz
UmVmUHRyPFN0cmluZ0ltcGw+IElkZW50aWZpZXI6OmFkZChKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEsIGNvbnN0IGNoYXIqIGMpCiAKICAgICBjb25zdCBMaXRlcmFsSWRlbnRpZmllclRhYmxlOjpp
dGVyYXRvciYgaXRlciA9IGxpdGVyYWxJZGVudGlmaWVyVGFibGUuZmluZChjKTsKICAgICBpZiAo
aXRlciAhPSBsaXRlcmFsSWRlbnRpZmllclRhYmxlLmVuZCgpKQotICAgICAgICByZXR1cm4gaXRl
ci0+c2Vjb25kOworICAgICAgICByZXR1cm4gaXRlci0+dmFsdWU7CiAKICAgICBIYXNoU2V0PFN0
cmluZ0ltcGwqPjo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IGlkZW50aWZpZXJUYWJsZS5hZGQ8Y29u
c3QgTENoYXIqLCBJZGVudGlmaWVyQVNDSUlTdHJpbmdUcmFuc2xhdG9yPihyZWludGVycHJldF9j
YXN0PGNvbnN0IExDaGFyKj4oYykpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FjdGl2YXRpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNBY3RpdmF0aW9uLmNwcAppbmRleCBhMjI2YjQxNmY5MGZkN2I4MmRiNzA3MjQ2NTliYzky
NmExNDcyZGRiLi4xOGMzMDc5MzljMWY4MWM1YzUzZTM1NGIyYTdhOGYzNGEwOGMxNjM4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5jcHAKQEAgLTE0
MCwxMSArMTQwLDExIEBAIHZvaWQgSlNBY3RpdmF0aW9uOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpT
T2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVyCiAKICAgICBTeW1ib2xUYWJs
ZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS0+ZW5kKCk7
CiAgICAgZm9yIChTeW1ib2xUYWJsZTo6Y29uc3RfaXRlcmF0b3IgaXQgPSB0aGlzT2JqZWN0LT5z
eW1ib2xUYWJsZSgpLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0
LT5zZWNvbmQuZ2V0QXR0cmlidXRlcygpICYgRG9udEVudW0gJiYgbW9kZSAhPSBJbmNsdWRlRG9u
dEVudW1Qcm9wZXJ0aWVzKQorICAgICAgICBpZiAoaXQtPnZhbHVlLmdldEF0dHJpYnV0ZXMoKSAm
IERvbnRFbnVtICYmIG1vZGUgIT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykKICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoaXQtPnNlY29uZC5nZXRJbmRleCgpID49IHRoaXNP
YmplY3QtPm1fbnVtQ2FwdHVyZWRWYXJzKQorICAgICAgICBpZiAoaXQtPnZhbHVlLmdldEluZGV4
KCkgPj0gdGhpc09iamVjdC0+bV9udW1DYXB0dXJlZFZhcnMpCiAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihleGVjLCBpdC0+Zmlyc3Qu
Z2V0KCkpKTsKKyAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihleGVjLCBpdC0+
a2V5LmdldCgpKSk7CiAgICAgfQogICAgIC8vIFNraXAgdGhlIEpTVmFyaWFibGVPYmplY3QgaW1w
bGVtZW50YXRpb24gb2YgZ2V0T3duUHJvcGVydHlOYW1lcwogICAgIEpTT2JqZWN0OjpnZXRPd25Q
cm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwpAQCAt
MTU3LDcgKzE1Nyw3IEBAIGlubGluZSBib29sIEpTQWN0aXZhdGlvbjo6c3ltYm9sVGFibGVQdXRX
aXRoQXR0cmlidXRlcyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsCiAgICAgU3ltYm9sVGFibGU6
Oml0ZXJhdG9yIGl0ZXIgPSBzeW1ib2xUYWJsZSgpLT5maW5kKHByb3BlcnR5TmFtZS5wdWJsaWNO
YW1lKCkpOwogICAgIGlmIChpdGVyID09IHN5bWJvbFRhYmxlKCktPmVuZCgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgU3ltYm9sVGFibGVFbnRyeSYgZW50cnkgPSBpdGVyLT5zZWNvbmQ7
CisgICAgU3ltYm9sVGFibGVFbnRyeSYgZW50cnkgPSBpdGVyLT52YWx1ZTsKICAgICBBU1NFUlQo
IWVudHJ5LmlzTnVsbCgpKTsKICAgICBpZiAoZW50cnkuZ2V0SW5kZXgoKSA+PSBtX251bUNhcHR1
cmVkVmFycykKICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5LmNwcAppbmRleCA3MjE4NjA0ZDExMmM3OGI1NzEyYjQ1NDQzOGYyOWIxMGI1
MjA4NDM4Li5mNTg0OGQ5MmY4ZjExNjBmNTg4ZTlkZWY2MGNkOTRkMjcxMzFjYzJhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcApAQCAtMjA0LDcgKzIwNCw3IEBA
IGlubGluZSBTcGFyc2VBcnJheVZhbHVlTWFwOjpBZGRSZXN1bHQgU3BhcnNlQXJyYXlWYWx1ZU1h
cDo6YWRkKEpTQXJyYXkqIGFycmF5LCB1CiBpbmxpbmUgdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFw
OjpwdXQoRXhlY1N0YXRlKiBleGVjLCBKU0FycmF5KiBhcnJheSwgdW5zaWduZWQgaSwgSlNWYWx1
ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKIHsKICAgICBBZGRSZXN1bHQgcmVzdWx0ID0gYWRk
KGFycmF5LCBpKTsKLSAgICBTcGFyc2VBcnJheUVudHJ5JiBlbnRyeSA9IHJlc3VsdC5pdGVyYXRv
ci0+c2Vjb25kOworICAgIFNwYXJzZUFycmF5RW50cnkmIGVudHJ5ID0gcmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZTsKIAogICAgIC8vIFRvIHNhdmUgYSBzZXBhcmF0ZSBmaW5kICYgYWRkLCB3ZSBmaXJz
dCBhbHdheXMgYWRkIHRvIHRoZSBzcGFyc2UgbWFwLgogICAgIC8vIEluIHRoZSB1bmNvbW1vbiBj
YXNlIHRoYXQgdGhpcyBpcyBhIG5ldyBwcm9wZXJ0eSwgYW5kIHRoZSBhcnJheSBpcyBub3QKQEAg
LTI0Nyw3ICsyNDcsNyBAQCBpbmxpbmUgdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjpwdXQoRXhl
Y1N0YXRlKiBleGVjLCBKU0FycmF5KiBhcnJheSwgdW5zaWduZWQgaQogaW5saW5lIGJvb2wgU3Bh
cnNlQXJyYXlWYWx1ZU1hcDo6cHV0RGlyZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJheSogYXJy
YXksIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCiB7CiAgICAg
QWRkUmVzdWx0IHJlc3VsdCA9IGFkZChhcnJheSwgaSk7Ci0gICAgU3BhcnNlQXJyYXlFbnRyeSYg
ZW50cnkgPSByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBTcGFyc2VBcnJheUVudHJ5JiBl
bnRyeSA9IHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAKICAgICAvLyBUbyBzYXZlIGEgc2VwYXJh
dGUgZmluZCAmIGFkZCwgd2UgZmlyc3QgYWx3YXlzIGFkZCB0byB0aGUgc3BhcnNlIG1hcC4KICAg
ICAvLyBJbiB0aGUgdW5jb21tb24gY2FzZSB0aGF0IHRoaXMgaXMgYSBuZXcgcHJvcGVydHksIGFu
ZCB0aGUgYXJyYXkgaXMgbm90CkBAIC0zMTMsNyArMzEzLDcgQEAgaW5saW5lIHZvaWQgU3BhcnNl
QXJyYXlWYWx1ZU1hcDo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBpdGVyYXRvciBlbmQgPSBtX21hcC5lbmQoKTsKICAgICBmb3IgKGl0ZXJhdG9yIGl0ID0gbV9t
YXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICB2aXNpdG9yLmFwcGVuZCgmaXQt
PnNlY29uZCk7CisgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZpdC0+dmFsdWUpOwogfQogCiB2b2lk
IEpTQXJyYXk6OmFsbG9jYXRlU3BhcnNlTWFwKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKQEAg
LTM0OSw3ICszNDksNyBAQCB2b2lkIEpTQXJyYXk6OmVudGVyRGljdGlvbmFyeU1vZGUoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhKQogICAgICAgICAvLyBUaGlzIHdpbGwgYWx3YXlzIGJlIGEgbmV3
IGVudHJ5IGluIHRoZSBtYXAsIHNvIG5vIG5lZWQgdG8gY2hlY2sgd2UgY2FuIHdyaXRlLAogICAg
ICAgICAvLyBhbmQgYXR0cmlidXRlcyBhcmUgZGVmYXVsdCBzbyBubyBuZWVkIHRvIHNldCB0aGVt
LgogICAgICAgICBpZiAodmFsdWUpCi0gICAgICAgICAgICBtYXAtPmFkZCh0aGlzLCBpKS5pdGVy
YXRvci0+c2Vjb25kLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICBt
YXAtPmFkZCh0aGlzLCBpKS5pdGVyYXRvci0+dmFsdWUuc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZh
bHVlKTsKICAgICB9CiAKICAgICB2b2lkKiBuZXdSYXdTdG9yYWdlID0gMDsKQEAgLTQyNSw3ICs0
MjUsNyBAQCBib29sIEpTQXJyYXk6OmRlZmluZU93bk51bWVyaWNQcm9wZXJ0eShFeGVjU3RhdGUq
IGV4ZWMsIHVuc2lnbmVkIGluZGV4LCBQcm9wZXJ0eQogCiAgICAgLy8gMS4gTGV0IGN1cnJlbnQg
YmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldE93blByb3BlcnR5XV0gaW50ZXJuYWwg
bWV0aG9kIG9mIE8gd2l0aCBwcm9wZXJ0eSBuYW1lIFAuCiAgICAgU3BhcnNlQXJyYXlWYWx1ZU1h
cDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1hcC0+YWRkKHRoaXMsIGluZGV4KTsKLSAgICBTcGFyc2VB
cnJheUVudHJ5KiBlbnRyeUluTWFwID0gJnJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgIFNw
YXJzZUFycmF5RW50cnkqIGVudHJ5SW5NYXAgPSAmcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIAog
ICAgIC8vIDIuIExldCBleHRlbnNpYmxlIGJlIHRoZSB2YWx1ZSBvZiB0aGUgW1tFeHRlbnNpYmxl
XV0gaW50ZXJuYWwgcHJvcGVydHkgb2YgTy4KICAgICAvLyAzLiBJZiBjdXJyZW50IGlzIHVuZGVm
aW5lZCBhbmQgZXh0ZW5zaWJsZSBpcyBmYWxzZSwgdGhlbiBSZWplY3QuCkBAIC02NTYsNyArNjU2
LDcgQEAgYm9vbCBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCogY2Vs
bCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZAogICAgIH0gZWxzZSBpZiAoU3BhcnNlQXJyYXlW
YWx1ZU1hcCogbWFwID0gdGhpc09iamVjdC0+bV9zcGFyc2VWYWx1ZU1hcCkgewogICAgICAgICBT
cGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+ZmluZChpKTsKICAgICAgICAg
aWYgKGl0ICE9IG1hcC0+bm90Rm91bmQoKSkgewotICAgICAgICAgICAgaXQtPnNlY29uZC5nZXQo
c2xvdCk7CisgICAgICAgICAgICBpdC0+dmFsdWUuZ2V0KHNsb3QpOwogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CkBAIC03MDIsNyArNzAyLDcgQEAgYm9vbCBKU0Fy
cmF5OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXIKICAgICAgICAgfSBlbHNlIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBt
YXAgPSB0aGlzT2JqZWN0LT5tX3NwYXJzZVZhbHVlTWFwKSB7CiAgICAgICAgICAgICBTcGFyc2VB
cnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+ZmluZChpKTsKICAgICAgICAgICAgIGlm
IChpdCAhPSBtYXAtPm5vdEZvdW5kKCkpIHsKLSAgICAgICAgICAgICAgICBpdC0+c2Vjb25kLmdl
dChkZXNjcmlwdG9yKTsKKyAgICAgICAgICAgICAgICBpdC0+dmFsdWUuZ2V0KGRlc2NyaXB0b3Ip
OwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9
CkBAIC04MzQsNyArODM0LDcgQEAgdm9pZCBKU0FycmF5OjpwdXRCeUluZGV4QmV5b25kVmVjdG9y
TGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZQogICAgIFdyaXRlQmFy
cmllcjxVbmtub3duPiogdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7CiAgICAgU3BhcnNlQXJy
YXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKICAgICBmb3IgKFNw
YXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCi0gICAgICAgIHZlY3RvcltpdC0+Zmlyc3RdLnNldChnbG9iYWxEYXRhLCB0
aGlzLCBpdC0+c2Vjb25kLmdldE5vblNwYXJzZU1vZGUoKSk7CisgICAgICAgIHZlY3RvcltpdC0+
a2V5XS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgaXQtPnZhbHVlLmdldE5vblNwYXJzZU1vZGUoKSk7
CiAgICAgZGVhbGxvY2F0ZVNwYXJzZU1hcCgpOwogCiAgICAgLy8gU3RvcmUgdGhlIG5ldyBwcm9w
ZXJ0eSBpbnRvIHRoZSB2ZWN0b3IuCkBAIC05MDQsNyArOTA0LDcgQEAgYm9vbCBKU0FycmF5Ojpw
dXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVk
IGksIEpTVmEKICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvciA9IHN0b3JhZ2UtPm1f
dmVjdG9yOwogICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1h
cC0+ZW5kKCk7CiAgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICB2ZWN0b3JbaXQtPmZp
cnN0XS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCkp
OworICAgICAgICB2ZWN0b3JbaXQtPmtleV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIGl0LT52YWx1
ZS5nZXROb25TcGFyc2VNb2RlKCkpOwogICAgIGRlYWxsb2NhdGVTcGFyc2VNYXAoKTsKIAogICAg
IC8vIFN0b3JlIHRoZSBuZXcgcHJvcGVydHkgaW50byB0aGUgdmVjdG9yLgpAQCAtOTQ3LDcgKzk0
Nyw3IEBAIGJvb2wgSlNBcnJheTo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCogY2VsbCwg
RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpKQogICAgIH0gZWxzZSBpZiAoU3BhcnNlQXJyYXlW
YWx1ZU1hcCogbWFwID0gdGhpc09iamVjdC0+bV9zcGFyc2VWYWx1ZU1hcCkgewogICAgICAgICBT
cGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+ZmluZChpKTsKICAgICAgICAg
aWYgKGl0ICE9IG1hcC0+bm90Rm91bmQoKSkgewotICAgICAgICAgICAgaWYgKGl0LT5zZWNvbmQu
YXR0cmlidXRlcyAmIERvbnREZWxldGUpCisgICAgICAgICAgICBpZiAoaXQtPnZhbHVlLmF0dHJp
YnV0ZXMgJiBEb250RGVsZXRlKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgICAgIG1hcC0+cmVtb3ZlKGl0KTsKICAgICAgICAgfQpAQCAtOTg1LDggKzk4NSw4IEBAIHZv
aWQgSlNBcnJheTo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtCiAgICAgICAgIAogICAgICAgICBTcGFyc2VBcnJheVZhbHVl
TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwogICAgICAgICBmb3IgKFNwYXJz
ZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3Bl
cnRpZXMgfHwgIShpdC0+c2Vjb25kLmF0dHJpYnV0ZXMgJiBEb250RW51bSkpCi0gICAgICAgICAg
ICAgICAga2V5cy5hcHBlbmQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGl0LT5maXJzdCkpOworICAg
ICAgICAgICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcyB8fCAhKGl0LT52
YWx1ZS5hdHRyaWJ1dGVzICYgRG9udEVudW0pKQorICAgICAgICAgICAgICAgIGtleXMuYXBwZW5k
KHN0YXRpY19jYXN0PHVuc2lnbmVkPihpdC0+a2V5KSk7CiAgICAgICAgIH0KIAogICAgICAgICBx
c29ydChrZXlzLmJlZ2luKCksIGtleXMuc2l6ZSgpLCBzaXplb2YodW5zaWduZWQpLCBjb21wYXJl
S2V5c0ZvclFTb3J0KTsKQEAgLTExNzksNyArMTE3OSw3IEBAIGJvb2wgSlNBcnJheTo6c2V0TGVu
Z3RoKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgbmV3TGVuZ3RoLCBib29sIHRocm93RXhjZXB0
aW9uCiAgICAgICAgICAgICBrZXlzLnJlc2VydmVDYXBhY2l0eShtaW4obWFwLT5zaXplKCksIHN0
YXRpY19jYXN0PHNpemVfdD4obGVuZ3RoIC0gbmV3TGVuZ3RoKSkpOwogICAgICAgICAgICAgU3Bh
cnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKICAgICAg
ICAgICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAt
PmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu
ZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGl0LT5maXJzdCk7CisgICAgICAgICAgICAgICAg
dW5zaWduZWQgaW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaXQtPmtleSk7CiAgICAgICAg
ICAgICAgICAgaWYgKGluZGV4IDwgbGVuZ3RoICYmIGluZGV4ID49IG5ld0xlbmd0aCkKICAgICAg
ICAgICAgICAgICAgICAga2V5cy5hcHBlbmQoaW5kZXgpOwogICAgICAgICAgICAgfQpAQCAtMTE5
NCw3ICsxMTk0LDcgQEAgYm9vbCBKU0FycmF5OjpzZXRMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCB1
bnNpZ25lZCBuZXdMZW5ndGgsIGJvb2wgdGhyb3dFeGNlcHRpb24KICAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgaW5kZXggPSBrZXlzWy0taV07CiAgICAgICAgICAgICAgICAgICAgIFNwYXJz
ZUFycmF5VmFsdWVNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLT5maW5kKGluZGV4KTsKICAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKGl0ICE9IG1hcC0+bm90Rm91bmQoKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChpdC0+c2Vjb25kLmF0dHJpYnV0ZXMgJiBEb250RGVsZXRlKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChpdC0+dmFsdWUuYXR0cmlidXRlcyAmIERvbnREZWxldGUpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UtPm1fbGVuZ3RoID0gaW5kZXggKyAxOwogICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwg
IlVuYWJsZSB0byBkZWxldGUgcHJvcGVydHkuIik7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAg
LTE2NjksNyArMTY2OSw3IEBAIHZvaWQgSlNBcnJheTo6c29ydChFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgY29tcGFyZUZ1bmN0aW9uLCBDYWxsVHlwZSBjYWxsVHlwZSwKIAogICAgICAgICBTcGFy
c2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwogICAgICAg
ICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1f
bm9kZXNbbnVtRGVmaW5lZF0udmFsdWUgPSBpdC0+c2Vjb25kLmdldE5vblNwYXJzZU1vZGUoKTsK
KyAgICAgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbbnVtRGVmaW5lZF0udmFsdWUg
PSBpdC0+dmFsdWUuZ2V0Tm9uU3BhcnNlTW9kZSgpOwogICAgICAgICAgICAgdHJlZS5pbnNlcnQo
bnVtRGVmaW5lZCk7CiAgICAgICAgICAgICArK251bURlZmluZWQ7CiAgICAgICAgIH0KQEAgLTE3
ODQsNyArMTc4NCw3IEBAIHVuc2lnbmVkIEpTQXJyYXk6OmNvbXBhY3RGb3JTb3J0aW5nKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSkKIAogICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25z
dF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwogICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFs
dWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
Ci0gICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltudW1EZWZpbmVkKytdLnNldFdpdGhvdXRX
cml0ZUJhcnJpZXIoaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCkpOworICAgICAgICAgICAg
c3RvcmFnZS0+bV92ZWN0b3JbbnVtRGVmaW5lZCsrXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGl0
LT52YWx1ZS5nZXROb25TcGFyc2VNb2RlKCkpOwogCiAgICAgICAgIGRlYWxsb2NhdGVTcGFyc2VN
YXAoKTsKICAgICB9CkBAIC0xODMxLDEzICsxODMxLDEzIEBAIHZvaWQgSlNBcnJheTo6Y2hlY2tD
b25zaXN0ZW5jeShDb25zaXN0ZW5jeUNoZWNrVHlwZSB0eXBlKQogICAgIGlmIChtX3NwYXJzZVZh
bHVlTWFwKSB7CiAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IG1fc3BhcnNlVmFsdWVNYXAtPmVuZCgpOwogICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFs
dWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zcGFyc2VWYWx1ZU1hcC0+YmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGl0LT5maXJzdDsK
KyAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gaXQtPmtleTsKICAgICAgICAgICAgIEFTU0VS
VChpbmRleCA8IHN0b3JhZ2UtPm1fbGVuZ3RoKTsKICAgICAgICAgICAgIEFTU0VSVChpbmRleCA+
PSBtX3ZlY3Rvckxlbmd0aCk7CiAgICAgICAgICAgICBBU1NFUlQoaW5kZXggPD0gTUFYX0FSUkFZ
X0lOREVYKTsKLSAgICAgICAgICAgIEFTU0VSVChpdC0+c2Vjb25kKTsKKyAgICAgICAgICAgIEFT
U0VSVChpdC0+dmFsdWUpOwogICAgICAgICAgICAgaWYgKHR5cGUgIT0gRGVzdHJ1Y3RvckNvbnNp
c3RlbmN5Q2hlY2spCi0gICAgICAgICAgICAgICAgaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2Rl
KCkuaXNVbmRlZmluZWQoKTsgLy8gTGlrZWx5IHRvIGNyYXNoIGlmIHRoZSBvYmplY3Qgd2FzIGRl
YWxsb2NhdGVkLgorICAgICAgICAgICAgICAgIGl0LT52YWx1ZS5nZXROb25TcGFyc2VNb2RlKCku
aXNVbmRlZmluZWQoKTsgLy8gTGlrZWx5IHRvIGNyYXNoIGlmIHRoZSBvYmplY3Qgd2FzIGRlYWxs
b2NhdGVkLgogICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcAppbmRleCAyMzM0YTA4Y2FlOGFh
Y2VmZjhmNjU1ZDE3OWUxZDY5Y2Y0YzM1NjM4Li4zN2NjMWFlMDQxNmI1ZGM4NzVlNGRhNDkxZjkx
Y2I3NWI2OTYzMGU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1N5bWJvbFRhYmxlT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcApAQCAtNjEsOCArNjEsOCBAQCB2b2lkIEpTU3ltYm9s
VGFibGVPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0
YXRlKiBleGVjLAogICAgIEpTU3ltYm9sVGFibGVPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNTeW1ib2xUYWJsZU9iamVjdCo+KG9iamVjdCk7CiAgICAgU3ltYm9sVGFibGU6OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCktPmVuZCgpOwogICAgIGZvciAo
U3ltYm9sVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdGhpc09iamVjdC0+c3ltYm9sVGFibGUo
KS0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmICghKGl0LT5zZWNvbmQu
Z2V0QXR0cmlidXRlcygpICYgRG9udEVudW0pIHx8IChtb2RlID09IEluY2x1ZGVEb250RW51bVBy
b3BlcnRpZXMpKQotICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihleGVj
LCBpdC0+Zmlyc3QuZ2V0KCkpKTsKKyAgICAgICAgaWYgKCEoaXQtPnZhbHVlLmdldEF0dHJpYnV0
ZXMoKSAmIERvbnRFbnVtKSB8fCAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKSkK
KyAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXIoZXhlYywgaXQtPmtleS5n
ZXQoKSkpOwogICAgIH0KICAgICAKICAgICBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyh0
aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAppbmRleCAxYTk5YjE5
OWZmZTFiNjdhN2NkYmNkZmNjOTY5M2Y0ZjFlMWQ0ZDkyLi41MGE2NDk1NzkzYTFlMGNiOTJhNTdh
NmJjZjY0Zjk4MDk4NWI2NjU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oCkBAIC03Nyw3ICs3Nyw3IEBAIGlubGluZSBib29s
IHN5bWJvbFRhYmxlR2V0KAogICAgIFN5bWJvbFRhYmxlOjppdGVyYXRvciBpdGVyID0gc3ltYm9s
VGFibGUuZmluZChwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpKTsKICAgICBpZiAoaXRlciA9PSBz
eW1ib2xUYWJsZS5lbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFN5bWJvbFRhYmxl
RW50cnk6OkZhc3QgZW50cnkgPSBpdGVyLT5zZWNvbmQ7CisgICAgU3ltYm9sVGFibGVFbnRyeTo6
RmFzdCBlbnRyeSA9IGl0ZXItPnZhbHVlOwogICAgIEFTU0VSVCghZW50cnkuaXNOdWxsKCkpOwog
ICAgIHNsb3Quc2V0VmFsdWUob2JqZWN0LT5yZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpLmdl
dCgpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTkxLDcgKzkxLDcgQEAgaW5saW5lIGJvb2wgc3lt
Ym9sVGFibGVHZXQoCiAgICAgU3ltYm9sVGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSBzeW1ib2xUYWJs
ZS5maW5kKHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCkpOwogICAgIGlmIChpdGVyID09IHN5bWJv
bFRhYmxlLmVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgU3ltYm9sVGFibGVFbnRy
eTo6RmFzdCBlbnRyeSA9IGl0ZXItPnNlY29uZDsKKyAgICBTeW1ib2xUYWJsZUVudHJ5OjpGYXN0
IGVudHJ5ID0gaXRlci0+dmFsdWU7CiAgICAgQVNTRVJUKCFlbnRyeS5pc051bGwoKSk7CiAgICAg
ZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKAogICAgICAgICBvYmplY3QtPnJlZ2lzdGVyQXQoZW50
cnkuZ2V0SW5kZXgoKSkuZ2V0KCksIGVudHJ5LmdldEF0dHJpYnV0ZXMoKSB8IERvbnREZWxldGUp
OwpAQCAtMTA3LDcgKzEwNyw3IEBAIGlubGluZSBib29sIHN5bWJvbFRhYmxlR2V0KAogICAgIFN5
bWJvbFRhYmxlOjppdGVyYXRvciBpdGVyID0gc3ltYm9sVGFibGUuZmluZChwcm9wZXJ0eU5hbWUu
cHVibGljTmFtZSgpKTsKICAgICBpZiAoaXRlciA9PSBzeW1ib2xUYWJsZS5lbmQoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIFN5bWJvbFRhYmxlRW50cnk6OkZhc3QgZW50cnkgPSBpdGVy
LT5zZWNvbmQ7CisgICAgU3ltYm9sVGFibGVFbnRyeTo6RmFzdCBlbnRyeSA9IGl0ZXItPnZhbHVl
OwogICAgIEFTU0VSVCghZW50cnkuaXNOdWxsKCkpOwogICAgIHNsb3Quc2V0VmFsdWUob2JqZWN0
LT5yZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpLmdldCgpKTsKICAgICBzbG90SXNXcml0ZWFi
bGUgPSAhZW50cnkuaXNSZWFkT25seSgpOwpAQCAtMTI3LDcgKzEyNyw3IEBAIGlubGluZSBib29s
IHN5bWJvbFRhYmxlUHV0KAogICAgIGlmIChpdGVyID09IHN5bWJvbFRhYmxlLmVuZCgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgYm9vbCB3YXNGYXQ7Ci0gICAgU3ltYm9sVGFibGVFbnRy
eTo6RmFzdCBmYXN0RW50cnkgPSBpdGVyLT5zZWNvbmQuZ2V0RmFzdCh3YXNGYXQpOworICAgIFN5
bWJvbFRhYmxlRW50cnk6OkZhc3QgZmFzdEVudHJ5ID0gaXRlci0+dmFsdWUuZ2V0RmFzdCh3YXNG
YXQpOwogICAgIEFTU0VSVCghZmFzdEVudHJ5LmlzTnVsbCgpKTsKICAgICBpZiAoZmFzdEVudHJ5
LmlzUmVhZE9ubHkoKSkgewogICAgICAgICBpZiAoc2hvdWxkVGhyb3cpCkBAIC0xMzUsNyArMTM1
LDcgQEAgaW5saW5lIGJvb2wgc3ltYm9sVGFibGVQdXQoCiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KICAgICBpZiAoVU5MSUtFTFkod2FzRmF0KSkKLSAgICAgICAgaXRlci0+c2Vjb25kLm5v
dGlmeVdyaXRlKCk7CisgICAgICAgIGl0ZXItPnZhbHVlLm5vdGlmeVdyaXRlKCk7CiAgICAgb2Jq
ZWN0LT5yZWdpc3RlckF0KGZhc3RFbnRyeS5nZXRJbmRleCgpKS5zZXQoZ2xvYmFsRGF0YSwgb2Jq
ZWN0LCB2YWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0xNTAsNyArMTUwLDcgQEAgaW5s
aW5lIGJvb2wgc3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRlcygKICAgICBTeW1ib2xUYWJsZTo6
aXRlcmF0b3IgaXRlciA9IG9iamVjdC0+c3ltYm9sVGFibGUoKS0+ZmluZChwcm9wZXJ0eU5hbWUu
cHVibGljTmFtZSgpKTsKICAgICBpZiAoaXRlciA9PSBvYmplY3QtPnN5bWJvbFRhYmxlKCktPmVu
ZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgU3ltYm9sVGFibGVFbnRyeSYgZW50cnkg
PSBpdGVyLT5zZWNvbmQ7CisgICAgU3ltYm9sVGFibGVFbnRyeSYgZW50cnkgPSBpdGVyLT52YWx1
ZTsKICAgICBBU1NFUlQoIWVudHJ5LmlzTnVsbCgpKTsKICAgICBlbnRyeS5ub3RpZnlXcml0ZSgp
OwogICAgIGVudHJ5LnNldEF0dHJpYnV0ZXMoYXR0cmlidXRlcyk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZS5jcHAKaW5kZXggNTNhMTNhNGI1OWI3N2U3NmE0
Yjg4MGNmZTc1YjM2MDZjODdlMWZhZC4uYWI0Zjk4NzhhOTk5OGQ0OTg0MDJlNmI0ZGNlNzA5YmQy
OGUyY2VlOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hl
LmNwcApAQCAtODAsNyArODAsNyBAQCB2b2lkIFJlZ0V4cENhY2hlOjppbnZhbGlkYXRlQ29kZSgp
CiAKICAgICBSZWdFeHBDYWNoZU1hcDo6aXRlcmF0b3IgZW5kID0gbV93ZWFrQ2FjaGUuZW5kKCk7
CiAgICAgZm9yIChSZWdFeHBDYWNoZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3dlYWtDYWNoZS5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgUmVnRXhwKiByZWdFeHAgPSBpdC0+c2Vj
b25kLmdldCgpOworICAgICAgICBSZWdFeHAqIHJlZ0V4cCA9IGl0LT52YWx1ZS5nZXQoKTsKICAg
ICAgICAgaWYgKCFyZWdFeHApIC8vIFNraXAgem9tYmllcy4KICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICByZWdFeHAtPmludmFsaWRhdGVDb2RlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrR0NNYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1dlYWtHQ01hcC5oCmluZGV4IDY5MjYxNjVhNzg1YTc2N2RhMzc3YWNlYjI1Mzk3
MGNlYzNiOWE5NDguLjUyZTVlMjk0NmZkMTAzYjdmZWFmNjIxZjZmZDJhNTBkMDUzNDlkMDMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ01hcC5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ01hcC5oCkBAIC02Myw3ICs2Myw3
IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHR5cGVuYW1lIE1hcFR5cGU6Oml0ZXJhdG9yIGVu
ZCA9IG1fbWFwLmVuZCgpOwogICAgICAgICBmb3IgKHR5cGVuYW1lIE1hcFR5cGU6Oml0ZXJhdG9y
IHB0ciA9IG1fbWFwLmJlZ2luKCk7IHB0ciAhPSBlbmQ7ICsrcHRyKQotICAgICAgICAgICAgV2Vh
a1NldDo6ZGVhbGxvY2F0ZShwdHItPnNlY29uZCk7CisgICAgICAgICAgICBXZWFrU2V0OjpkZWFs
bG9jYXRlKHB0ci0+dmFsdWUpOwogICAgICAgICBtX21hcC5jbGVhcigpOwogICAgIH0KIApAQCAt
ODAsOCArODAsOCBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVF9VTlVTRUQoZ2xvYmFsRGF0YSwg
Z2xvYmFsRGF0YS5hcGlMb2NrKCkuY3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSk7CiAgICAg
ICAgIHR5cGVuYW1lIE1hcFR5cGU6OkFkZFJlc3VsdCByZXN1bHQgPSBtX21hcC5hZGQoa2V5LCAw
KTsKICAgICAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgIFdlYWtTZXQ6
OmRlYWxsb2NhdGUocmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOwotICAgICAgICByZXN1bHQuaXRl
cmF0b3ItPnNlY29uZCA9IFdlYWtTZXQ6OmFsbG9jYXRlKHZhbHVlLCB0aGlzLCBGaW5hbGl6ZXJD
YWxsYmFjazo6ZmluYWxpemVyQ29udGV4dEZvcihrZXkpKTsKKyAgICAgICAgICAgIFdlYWtTZXQ6
OmRlYWxsb2NhdGUocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CisgICAgICAgIHJlc3VsdC5pdGVy
YXRvci0+dmFsdWUgPSBXZWFrU2V0OjphbGxvY2F0ZSh2YWx1ZSwgdGhpcywgRmluYWxpemVyQ2Fs
bGJhY2s6OmZpbmFsaXplckNvbnRleHRGb3Ioa2V5KSk7CiAgICAgfQogCiAgICAgdm9pZCByZW1v
dmUoY29uc3QgS2V5VHlwZSYga2V5KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rvb2xzL1Byb2ZpbGVUcmVlTm9kZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1By
b2ZpbGVUcmVlTm9kZS5oCmluZGV4IDdiNTFlZmI4NWRiMzQ0MWEyMjI2M2I0MjQ5N2EzMTc1MmI1
YjUyZmQuLjdiNWE5NWVjNDA0NGI2M2YyMTExMzYxMjJkOTIzY2E4ODk0NjBhMzYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Qcm9maWxlVHJlZU5vZGUuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvUHJvZmlsZVRyZWVOb2RlLmgKQEAgLTUxLDcgKzUx
LDcgQEAgcHVibGljOgogICAgIAogICAgICAgICBQcm9maWxlVHJlZU5vZGUgbmV3RW50cnk7CiAg
ICAgICAgIE1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fY2hpbGRyZW4tPmFkZChTdHJpbmcobmFt
ZSksIG5ld0VudHJ5KTsKLSAgICAgICAgUHJvZmlsZVRyZWVOb2RlKiBjaGlsZEluTWFwID0gJnJl
c3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICBQcm9maWxlVHJlZU5vZGUqIGNoaWxkSW5N
YXAgPSAmcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgKytjaGlsZEluTWFwLT5tX2Nv
dW50OwogICAgICAgICByZXR1cm4gY2hpbGRJbk1hcDsKICAgICB9CkBAIC03Miw3ICs3Miw3IEBA
IHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB1aW50NjRfdCBjaGlsZENv
dW50ID0gMDsKICAgICAgICAgZm9yIChNYXA6Oml0ZXJhdG9yIGl0ID0gbV9jaGlsZHJlbi0+YmVn
aW4oKTsgaXQgIT0gbV9jaGlsZHJlbi0+ZW5kKCk7ICsraXQpCi0gICAgICAgICAgICBjaGlsZENv
dW50ICs9IGl0LT5zZWNvbmQuY291bnQoKTsKKyAgICAgICAgICAgIGNoaWxkQ291bnQgKz0gaXQt
PnZhbHVlLmNvdW50KCk7CiAgICAgICAgIHJldHVybiBjaGlsZENvdW50OwogICAgIH0KICAgICAK
QEAgLTk3LDE5ICs5NywxOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGluZGVudDsgKytpKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAiKTsK
ICAgICAgICAgICAgIGRhdGFMb2coIiUgOGxsZDogJXMgKCVsbGQgc3RhY2sgdG9wKVxuIiwKLSAg
ICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KGVudHJ5LT5zZWNvbmQuY291bnQo
KSksCi0gICAgICAgICAgICAgICAgZW50cnktPmZpcnN0LnV0ZjgoKS5kYXRhKCksCi0gICAgICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihlbnRyeS0+c2Vjb25kLmNvdW50KCkgLSBl
bnRyeS0+c2Vjb25kLmNoaWxkQ291bnQoKSkpOworICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0
PGxvbmcgbG9uZz4oZW50cnktPnZhbHVlLmNvdW50KCkpLAorICAgICAgICAgICAgICAgIGVudHJ5
LT5rZXkudXRmOCgpLmRhdGEoKSwKKyAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxsb25nIGxv
bmc+KGVudHJ5LT52YWx1ZS5jb3VudCgpIC0gZW50cnktPnZhbHVlLmNoaWxkQ291bnQoKSkpOwog
CiAgICAgICAgICAgICAvLyBSZWN1cnNpdmVseSBkdW1wIHRoZSBjaGlsZCBub2Rlcy4KLSAgICAg
ICAgICAgIGVudHJ5LT5zZWNvbmQuZHVtcEludGVybmFsKGluZGVudCArIDEpOworICAgICAgICAg
ICAgZW50cnktPnZhbHVlLmR1bXBJbnRlcm5hbChpbmRlbnQgKyAxKTsKICAgICAgICAgfQogICAg
IH0KIAogICAgIHN0YXRpYyBpbnQgY29tcGFyZUVudHJpZXMoY29uc3Qgdm9pZCogYSwgY29uc3Qg
dm9pZCogYikKICAgICB7Ci0gICAgICAgIHVpbnQ2NF90IGRhID0gKCpzdGF0aWNfY2FzdDxNYXBF
bnRyeSogY29uc3QgKj4oYSkpLT5zZWNvbmQuY291bnQoKTsKLSAgICAgICAgdWludDY0X3QgZGIg
PSAoKnN0YXRpY19jYXN0PE1hcEVudHJ5KiBjb25zdCAqPihiKSktPnNlY29uZC5jb3VudCgpOwor
ICAgICAgICB1aW50NjRfdCBkYSA9ICgqc3RhdGljX2Nhc3Q8TWFwRW50cnkqIGNvbnN0ICo+KGEp
KS0+dmFsdWUuY291bnQoKTsKKyAgICAgICAgdWludDY0X3QgZGIgPSAoKnN0YXRpY19jYXN0PE1h
cEVudHJ5KiBjb25zdCAqPihiKSktPnZhbHVlLmNvdW50KCk7CiAgICAgICAgIHJldHVybiAoZGEg
PCBkYikgLSAoZGEgPiBkYik7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9I
YXNoQ291bnRlZFNldC5oIGIvU291cmNlL1dURi93dGYvSGFzaENvdW50ZWRTZXQuaAppbmRleCBl
Zjg5YmRiYzc1MjYxODVkZTAxNzUzZTAzZTlmNmIwYjc3ZTNlMDFkLi5lZmY0YTI5M2U5YzczOWIx
MmM0M2I2ODkxMjZkMGM4NDUwYmNkMDBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9IYXNo
Q291bnRlZFNldC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0hhc2hDb3VudGVkU2V0LmgKQEAgLTE1
NCw3ICsxNTQsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICBpbmxpbmUgdHlwZW5hbWUgSGFzaENv
dW50ZWRTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OkFkZFJlc3VsdCBIYXNoQ291
bnRlZFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6YWRkKGNvbnN0IFZhbHVlVHlw
ZSAmdmFsdWUpCiAgICAgewogICAgICAgICBBZGRSZXN1bHQgcmVzdWx0ID0gbV9pbXBsLmFkZCh2
YWx1ZSwgMCk7Ci0gICAgICAgICsrcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgICsr
cmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAg
ICAgCkBAIC0xNzAsMTEgKzE3MCwxMSBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgaWYgKGl0
ID09IGVuZCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIHVuc2lnbmVk
IG9sZFZhbCA9IGl0LT5zZWNvbmQ7CisgICAgICAgIHVuc2lnbmVkIG9sZFZhbCA9IGl0LT52YWx1
ZTsKICAgICAgICAgQVNTRVJUKG9sZFZhbCk7CiAgICAgICAgIHVuc2lnbmVkIG5ld1ZhbCA9IG9s
ZFZhbCAtIDE7CiAgICAgICAgIGlmIChuZXdWYWwpIHsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQg
PSBuZXdWYWw7CisgICAgICAgICAgICBpdC0+dmFsdWUgPSBuZXdWYWw7CiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIApAQCAtMjI2LDcgKzIyNiw3IEBAIG5hbWVzcGFjZSBX
VEYgewogICAgICAgICBpdGVyYXRvciBpdCA9IGNvbGxlY3Rpb24uYmVnaW4oKTsKICAgICAgICAg
aXRlcmF0b3IgZW5kID0gY29sbGVjdGlvbi5lbmQoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaXQgIT0gZW5kOyArK2l0LCArK2kpCi0gICAgICAgICAgICB2ZWN0b3JbaV0gPSAoKml0
KS5maXJzdDsKKyAgICAgICAgICAgIHZlY3RvcltpXSA9ICgqaXQpLmtleTsKICAgICB9CiAKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvSGFzaEl0ZXJhdG9ycy5oIGIvU291cmNlL1dURi93
dGYvSGFzaEl0ZXJhdG9ycy5oCmluZGV4IDYzOWZmNzI1MGExZWYwZmIzZjgyNGRjOTE2ODg0OTZi
ODliNjVlMTcuLjNhODQxOGFhZGVmNzgzYjlhYmMwMzRhOWVlMGE0YWU3YWI4YjE2YTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0hhc2hJdGVyYXRvcnMuaAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi9IYXNoSXRlcmF0b3JzLmgKQEAgLTkxLDcgKzkxLDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAg
cHVibGljOgogICAgICAgICBIYXNoVGFibGVDb25zdEtleXNJdGVyYXRvcihjb25zdCBDb25zdEl0
ZXJhdG9yJiBpbXBsKSA6IG1faW1wbChpbXBsKSB7fQogICAgICAgICAKLSAgICAgICAgY29uc3Qg
S2V5VHlwZSogZ2V0KCkgY29uc3QgeyByZXR1cm4gJihtX2ltcGwuZ2V0KCktPmZpcnN0KTsgfQor
ICAgICAgICBjb25zdCBLZXlUeXBlKiBnZXQoKSBjb25zdCB7IHJldHVybiAmKG1faW1wbC5nZXQo
KS0+a2V5KTsgfQogICAgICAgICBjb25zdCBLZXlUeXBlJiBvcGVyYXRvciooKSBjb25zdCB7IHJl
dHVybiAqZ2V0KCk7IH0KICAgICAgICAgY29uc3QgS2V5VHlwZSogb3BlcmF0b3ItPigpIGNvbnN0
IHsgcmV0dXJuIGdldCgpOyB9CiAKQEAgLTEwOCw3ICsxMDgsNyBAQCBuYW1lc3BhY2UgV1RGIHsK
ICAgICBwdWJsaWM6CiAgICAgICAgIEhhc2hUYWJsZUNvbnN0VmFsdWVzSXRlcmF0b3IoY29uc3Qg
Q29uc3RJdGVyYXRvciYgaW1wbCkgOiBtX2ltcGwoaW1wbCkge30KICAgICAgICAgCi0gICAgICAg
IGNvbnN0IE1hcHBlZFR5cGUqIGdldCgpIGNvbnN0IHsgcmV0dXJuICYobV9pbXBsLmdldCgpLT5z
ZWNvbmQpOyB9CisgICAgICAgIGNvbnN0IE1hcHBlZFR5cGUqIGdldCgpIGNvbnN0IHsgcmV0dXJu
ICYobV9pbXBsLmdldCgpLT52YWx1ZSk7IH0KICAgICAgICAgY29uc3QgTWFwcGVkVHlwZSYgb3Bl
cmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKmdldCgpOyB9CiAgICAgICAgIGNvbnN0IE1hcHBlZFR5
cGUqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBnZXQoKTsgfQogCkBAIC0xNDksNyArMTQ5
LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgcHVibGljOgogICAgICAgICBIYXNoVGFibGVWYWx1
ZXNJdGVyYXRvcihjb25zdCBJdGVyYXRvciYgaW1wbCkgOiBtX2ltcGwoaW1wbCkge30KICAgICAg
ICAgCi0gICAgICAgIE1hcHBlZFR5cGUqIGdldCgpIGNvbnN0IHsgcmV0dXJuICYobV9pbXBsLmdl
dCgpLT5zZWNvbmQpOyB9CisgICAgICAgIE1hcHBlZFR5cGUqIGdldCgpIGNvbnN0IHsgcmV0dXJu
ICYobV9pbXBsLmdldCgpLT52YWx1ZSk7IH0KICAgICAgICAgTWFwcGVkVHlwZSYgb3BlcmF0b3Iq
KCkgY29uc3QgeyByZXR1cm4gKmdldCgpOyB9CiAgICAgICAgIE1hcHBlZFR5cGUqIG9wZXJhdG9y
LT4oKSBjb25zdCB7IHJldHVybiBnZXQoKTsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi9IYXNoTWFwLmggYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoTWFwLmgKaW5kZXggOTAxMDQ3NGM4MjU1
NjNlZjg0MWI5Njg3ZmVmZjQ5NGFhNjU1YjRlOC4uMTBlZTQyNWRhOTU5NmJhYWRmMzRlNTc4ZWY1
YWJlNTcwZjlhZTBkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvSGFzaE1hcC5oCisrKyBi
L1NvdXJjZS9XVEYvd3RmL0hhc2hNYXAuaApAQCAtMzUsNyArMzUsNyBAQCBuYW1lc3BhY2UgV1RG
IHsKICAgICB9OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEtleVZhbHVlUGFp
cktleUV4dHJhY3RvciB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCB0eXBlbmFtZSBUOjpLZXlUeXBl
JiBleHRyYWN0KGNvbnN0IFQmIHApIHsgcmV0dXJuIHAuZmlyc3Q7IH0KKyAgICAgICAgc3RhdGlj
IGNvbnN0IHR5cGVuYW1lIFQ6OktleVR5cGUmIGV4dHJhY3QoY29uc3QgVCYgcCkgeyByZXR1cm4g
cC5rZXk7IH0KICAgICB9OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFt
ZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcgPSB0eXBlbmFtZSBEZWZhdWx0SGFzaDxLZXlB
cmc+OjpIYXNoLApAQCAtMjExLDcgKzIxMSw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBz
dGF0aWMgY29uc3QgYm9vbCBoYXNJc0VtcHR5VmFsdWVGdW5jdGlvbiA9IHRydWU7CiAgICAgICAg
IHN0YXRpYyBib29sIGlzRW1wdHlWYWx1ZShjb25zdCB0eXBlbmFtZSBLZXlWYWx1ZVBhaXJIYXNo
VHJhaXRzPEtleVRyYWl0cywgTWFwcGVkVHJhaXRzPjo6VHJhaXRUeXBlJiB2YWx1ZSkKICAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIGlzSGFzaFRyYWl0c0VtcHR5VmFsdWU8S2V5VHJhaXRz
Pih2YWx1ZS5maXJzdCk7CisgICAgICAgICAgICByZXR1cm4gaXNIYXNoVHJhaXRzRW1wdHlWYWx1
ZTxLZXlUcmFpdHM+KHZhbHVlLmtleSk7CiAgICAgICAgIH0KICAgICB9OwogCkBAIC0yMjEsOCAr
MjIxLDggQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFU+IHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFQmIGEsIGNvbnN0IFUmIGIpIHsgcmV0
dXJuIEhhc2hGdW5jdGlvbnM6OmVxdWFsKGEsIGIpOyB9CiAgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+IHN0YXRpYyB2b2lkIHRyYW5zbGF0ZShUJiBs
b2NhdGlvbiwgY29uc3QgVSYga2V5LCBjb25zdCBWJiBtYXBwZWQpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIGxvY2F0aW9uLmZpcnN0ID0ga2V5OwotICAgICAgICAgICAgVmFsdWVUcmFpdHM6OlZh
bHVlVHJhaXRzOjpzdG9yZShtYXBwZWQsIGxvY2F0aW9uLnNlY29uZCk7CisgICAgICAgICAgICBs
b2NhdGlvbi5rZXkgPSBrZXk7CisgICAgICAgICAgICBWYWx1ZVRyYWl0czo6VmFsdWVUcmFpdHM6
OnN0b3JlKG1hcHBlZCwgbG9jYXRpb24udmFsdWUpOwogICAgICAgICB9CiAgICAgfTsKIApAQCAt
MjMyLDggKzIzMiw4IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVPiBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBUJiBhLCBjb25zdCBVJiBi
KSB7IHJldHVybiBUcmFuc2xhdG9yOjplcXVhbChhLCBiKTsgfQogICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPiBzdGF0aWMgdm9pZCB0cmFuc2xhdGUo
VCYgbG9jYXRpb24sIGNvbnN0IFUmIGtleSwgY29uc3QgViYgbWFwcGVkLCB1bnNpZ25lZCBoYXNo
Q29kZSkKICAgICAgICAgewotICAgICAgICAgICAgVHJhbnNsYXRvcjo6dHJhbnNsYXRlKGxvY2F0
aW9uLmZpcnN0LCBrZXksIGhhc2hDb2RlKTsKLSAgICAgICAgICAgIFZhbHVlVHJhaXRzOjpWYWx1
ZVRyYWl0czo6c3RvcmUobWFwcGVkLCBsb2NhdGlvbi5zZWNvbmQpOworICAgICAgICAgICAgVHJh
bnNsYXRvcjo6dHJhbnNsYXRlKGxvY2F0aW9uLmtleSwga2V5LCBoYXNoQ29kZSk7CisgICAgICAg
ICAgICBWYWx1ZVRyYWl0czo6VmFsdWVUcmFpdHM6OnN0b3JlKG1hcHBlZCwgbG9jYXRpb24udmFs
dWUpOwogICAgICAgICB9CiAgICAgfTsKIApAQCAtMzQxLDcgKzM0MSw3IEBAIG5hbWVzcGFjZSBX
VEYgewogICAgICAgICBBZGRSZXN1bHQgcmVzdWx0ID0gaW5saW5lQWRkKGtleSwgbWFwcGVkKTsK
ICAgICAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkgewogICAgICAgICAgICAgLy8gVGhlIGlu
bGluZUFkZCBjYWxsIGFib3ZlIGZvdW5kIGFuIGV4aXN0aW5nIGhhc2ggdGFibGUgZW50cnk7IHdl
IG5lZWQgdG8gc2V0IHRoZSBtYXBwZWQgdmFsdWUuCi0gICAgICAgICAgICBNYXBwZWRUcmFpdHM6
OnN0b3JlKG1hcHBlZCwgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOworICAgICAgICAgICAgTWFw
cGVkVHJhaXRzOjpzdG9yZShtYXBwZWQsIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwogICAgICAg
ICB9CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpAQCAtMzY4LDcgKzM2OCw3IEBAIG5h
bWVzcGFjZSBXVEYgewogICAgICAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gY29uc3RfY2FzdDxIYXNo
VGFibGVUeXBlJj4obV9pbXBsKS5sb29rdXAoa2V5KTsKICAgICAgICAgaWYgKCFlbnRyeSkKICAg
ICAgICAgICAgIHJldHVybiBNYXBwZWRUcmFpdHM6OnBlZWsoTWFwcGVkVHJhaXRzOjplbXB0eVZh
bHVlKCkpOwotICAgICAgICByZXR1cm4gTWFwcGVkVHJhaXRzOjpwZWVrKGVudHJ5LT5zZWNvbmQp
OworICAgICAgICByZXR1cm4gTWFwcGVkVHJhaXRzOjpwZWVrKGVudHJ5LT52YWx1ZSk7CiAgICAg
fQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlw
ZW5hbWUgVywgdHlwZW5hbWUgWD4KQEAgLTM5OSw3ICszOTksNyBAQCBuYW1lc3BhY2UgV1RGIHsK
ICAgICAgICAgaXRlcmF0b3IgaXQgPSBmaW5kKGtleSk7CiAgICAgICAgIGlmIChpdCA9PSBlbmQo
KSkKICAgICAgICAgICAgIHJldHVybiBNYXBwZWRUcmFpdHM6OnBhc3NPdXQoTWFwcGVkVHJhaXRz
OjplbXB0eVZhbHVlKCkpOwotICAgICAgICBNYXBwZWRQYXNzT3V0VHlwZSByZXN1bHQgPSBNYXBw
ZWRUcmFpdHM6OnBhc3NPdXQoaXQtPnNlY29uZCk7CisgICAgICAgIE1hcHBlZFBhc3NPdXRUeXBl
IHJlc3VsdCA9IE1hcHBlZFRyYWl0czo6cGFzc091dChpdC0+dmFsdWUpOwogICAgICAgICByZW1v
dmUoaXQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTQyMSw4ICs0MjEsOCBA
QCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgY29uc3RfaXRlcmF0b3IgZW5kID0gYS5lbmQoKTsK
ICAgICAgICAgY29uc3RfaXRlcmF0b3Igbm90Rm91bmQgPSBiLmVuZCgpOwogICAgICAgICBmb3Ig
KGNvbnN0X2l0ZXJhdG9yIGl0ID0gYS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgICAgIGNvbnN0X2l0ZXJhdG9yIGJQb3MgPSBiLmZpbmQoaXQtPmZpcnN0KTsKLSAgICAgICAg
ICAgIGlmIChiUG9zID09IG5vdEZvdW5kIHx8IGl0LT5zZWNvbmQgIT0gYlBvcy0+c2Vjb25kKQor
ICAgICAgICAgICAgY29uc3RfaXRlcmF0b3IgYlBvcyA9IGIuZmluZChpdC0+a2V5KTsKKyAgICAg
ICAgICAgIGlmIChiUG9zID09IG5vdEZvdW5kIHx8IGl0LT52YWx1ZSAhPSBiUG9zLT52YWx1ZSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIApAQCAtNDM1LDM0ICs0
MzUsMjIgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIHJldHVybiAhKGEgPT0gYik7CiAgICAg
fQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlVHlwZT4KLSAgICB2b2lkIGRlbGV0
ZUFsbFBhaXJTZWNvbmRzKEhhc2hUYWJsZVR5cGUmIGNvbGxlY3Rpb24pCi0gICAgewotICAgICAg
ICB0eXBlZGVmIHR5cGVuYW1lIEhhc2hUYWJsZVR5cGU6OmNvbnN0X2l0ZXJhdG9yIGl0ZXJhdG9y
OwotICAgICAgICBpdGVyYXRvciBlbmQgPSBjb2xsZWN0aW9uLmVuZCgpOwotICAgICAgICBmb3Ig
KGl0ZXJhdG9yIGl0ID0gY29sbGVjdGlvbi5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAg
ICAgICAgICBkZWxldGUgaXQtPnNlY29uZDsKLSAgICB9Ci0KICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgogICAg
IGlubGluZSB2b2lkIGRlbGV0ZUFsbFZhbHVlcyhjb25zdCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+
JiBjb2xsZWN0aW9uKQogICAgIHsKLSAgICAgICAgZGVsZXRlQWxsUGFpclNlY29uZHMoY29sbGVj
dGlvbik7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlVHlwZT4KLSAg
ICB2b2lkIGRlbGV0ZUFsbFBhaXJGaXJzdHMoSGFzaFRhYmxlVHlwZSYgY29sbGVjdGlvbikKLSAg
ICB7Ci0gICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgSGFzaFRhYmxlVHlwZTo6Y29uc3RfaXRlcmF0
b3IgaXRlcmF0b3I7CisgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgSGFzaE1hcDxULCBVLCBWLCBX
LCBYPjo6Y29uc3RfaXRlcmF0b3IgaXRlcmF0b3I7CiAgICAgICAgIGl0ZXJhdG9yIGVuZCA9IGNv
bGxlY3Rpb24uZW5kKCk7CiAgICAgICAgIGZvciAoaXRlcmF0b3IgaXQgPSBjb2xsZWN0aW9uLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIGRlbGV0ZSBpdC0+Zmlyc3Q7Cisg
ICAgICAgICAgICBkZWxldGUgaXQtPnZhbHVlOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+CiAg
ICAgaW5saW5lIHZvaWQgZGVsZXRlQWxsS2V5cyhjb25zdCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+
JiBjb2xsZWN0aW9uKQogICAgIHsKLSAgICAgICAgZGVsZXRlQWxsUGFpckZpcnN0cyhjb2xsZWN0
aW9uKTsKKyAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojpj
b25zdF9pdGVyYXRvciBpdGVyYXRvcjsKKyAgICAgICAgaXRlcmF0b3IgZW5kID0gY29sbGVjdGlv
bi5lbmQoKTsKKyAgICAgICAgZm9yIChpdGVyYXRvciBpdCA9IGNvbGxlY3Rpb24uYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgZGVsZXRlIGl0LT5rZXk7CiAgICAgfQogICAg
IAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVu
YW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi9IYXNoVGFibGUuaCBiL1NvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oCmluZGV4IDFjZTNjNWNm
Njg4ZWYwYTgxZTEwNjFiYzZjZTI2MjBiZTNkOTgwMGUuLjE2ZmRkOWU4MWQyODNiNjllNjFkNDZi
YTZmOTVmZDEyZTI0NjljNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5o
CisrKyBiL1NvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oCkBAIC0yODYsOCArMjg2LDggQEAgbmFt
ZXNwYWNlIFdURiB7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxp
bmUgdm9pZCBoYXNoVGFibGVTd2FwKEtleVZhbHVlUGFpcjxULCBVPiYgYSwgS2V5VmFsdWVQYWly
PFQsIFU+JiBiKQogICAgIHsKLSAgICAgICAgc3dhcChhLmZpcnN0LCBiLmZpcnN0KTsKLSAgICAg
ICAgc3dhcChhLnNlY29uZCwgYi5zZWNvbmQpOworICAgICAgICBzd2FwKGEua2V5LCBiLmtleSk7
CisgICAgICAgIHN3YXAoYS52YWx1ZSwgYi52YWx1ZSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVCwgYm9vbCB1c2VTd2FwPiBzdHJ1Y3QgTW92ZXI7CkBAIC0xMjQ2LDcgKzEyNDYs
NyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgICAgIEFTU0VSVChlbnRyeSA9PSBpdC5tX3Bv
c2l0aW9uKTsKICAgICAgICAgICAgICsrY291bnQ7CiAKLSAgICAgICAgICAgIFZhbHVlQ2hlY2s8
S2V5Pjo6Y2hlY2tDb25zaXN0ZW5jeShpdC0+Zmlyc3QpOworICAgICAgICAgICAgVmFsdWVDaGVj
azxLZXk+OjpjaGVja0NvbnNpc3RlbmN5KGl0LT5rZXkpOwogICAgICAgICB9CiAKICAgICAgICAg
QVNTRVJUKGNvdW50ID09IG1fa2V5Q291bnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
SGFzaFRyYWl0cy5oIGIvU291cmNlL1dURi93dGYvSGFzaFRyYWl0cy5oCmluZGV4IGViZTc5NWVi
MWE4OTllMmM2MWVlNWRjMzY0NzM3YjI5Yjg1NzBhMDkuLjczYmYyYmVhYTJlNWVmNGVmZWQ5ZGIw
YzJkZWFmM2YxMTJlYjRhYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0hhc2hUcmFpdHMu
aAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoVHJhaXRzLmgKQEAgLTE5MywyMSArMTkzLDIwIEBA
IG5hbWVzcGFjZSBXVEYgewogICAgICAgICB9CiAKICAgICAgICAgS2V5VmFsdWVQYWlyKGNvbnN0
IEtleVR5cGVBcmcmIGtleSwgY29uc3QgVmFsdWVUeXBlQXJnJiB2YWx1ZSkKLSAgICAgICAgICAg
IDogZmlyc3Qoa2V5KQotICAgICAgICAgICAgLCBzZWNvbmQodmFsdWUpCisgICAgICAgICAgICA6
IGtleShrZXkpCisgICAgICAgICAgICAsIHZhbHVlKHZhbHVlKQogICAgICAgICB7CiAgICAgICAg
IH0KIAogICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3RoZXJLZXlUeXBlLCB0eXBlbmFtZSBP
dGhlclZhbHVlVHlwZT4KICAgICAgICAgS2V5VmFsdWVQYWlyKGNvbnN0IEtleVZhbHVlUGFpcjxP
dGhlcktleVR5cGUsIE90aGVyVmFsdWVUeXBlPiYgb3RoZXIpCi0gICAgICAgICAgICA6IGZpcnN0
KG90aGVyLmZpcnN0KQotICAgICAgICAgICAgLCBzZWNvbmQob3RoZXIuc2Vjb25kKQorICAgICAg
ICAgICAgOiBrZXkob3RoZXIua2V5KQorICAgICAgICAgICAgLCB2YWx1ZShvdGhlci52YWx1ZSkK
ICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgLy8gVE9ETzogUmVuYW1lIHRoZXNlIHRv
IGtleSBhbmQgdmFsdWUuIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9ODI3ODQuCi0gICAgICAgIEtleVR5cGVBcmcgZmlyc3Q7Ci0gICAgICAgIFZhbHVlVHlwZUFy
ZyBzZWNvbmQ7CisgICAgICAgIEtleVR5cGVBcmcga2V5OworICAgICAgICBWYWx1ZVR5cGVBcmcg
dmFsdWU7CiAgICAgfTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlw
ZW5hbWUgVmFsdWVUcmFpdHNBcmc+CkBAIC0yMjQsOCArMjIzLDggQEAgbmFtZXNwYWNlIFdURiB7
CiAKICAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5pbXVtVGFibGVTaXplID0gS2V5VHJhaXRz
OjptaW5pbXVtVGFibGVTaXplOwogCi0gICAgICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0
ZWRWYWx1ZShUcmFpdFR5cGUmIHNsb3QpIHsgS2V5VHJhaXRzOjpjb25zdHJ1Y3REZWxldGVkVmFs
dWUoc2xvdC5maXJzdCk7IH0KLSAgICAgICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUoY29u
c3QgVHJhaXRUeXBlJiB2YWx1ZSkgeyByZXR1cm4gS2V5VHJhaXRzOjppc0RlbGV0ZWRWYWx1ZSh2
YWx1ZS5maXJzdCk7IH0KKyAgICAgICAgc3RhdGljIHZvaWQgY29uc3RydWN0RGVsZXRlZFZhbHVl
KFRyYWl0VHlwZSYgc2xvdCkgeyBLZXlUcmFpdHM6OmNvbnN0cnVjdERlbGV0ZWRWYWx1ZShzbG90
LmtleSk7IH0KKyAgICAgICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUoY29uc3QgVHJhaXRU
eXBlJiB2YWx1ZSkgeyByZXR1cm4gS2V5VHJhaXRzOjppc0RlbGV0ZWRWYWx1ZSh2YWx1ZS5rZXkp
OyB9CiAgICAgfTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWU+
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9yLmNwcCBiL1NvdXJjZS9X
VEYvd3RmL01ldGFBbGxvY2F0b3IuY3BwCmluZGV4IDllZmNmZjJlYjEzZjcyY2NiNTk3NzUxYzg0
M2JiNDI5NTFmYzc0YTMuLjczYjM2YWE0MjFmOGE5NTUwN2FhZDk2YTNhNGJhZjgyYWUxMWQ1M2Yg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3IuY3BwCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL01ldGFBbGxvY2F0b3IuY3BwCkBAIC0zMDgsOSArMzA4LDkgQEAgdm9pZCBNZXRh
QWxsb2NhdG9yOjphZGRGcmVlU3BhY2Uodm9pZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRlcykK
ICAgICAgICAgLy8gV2UgaGF2ZSBzb21ldGhpbmcgd2UgY2FuIGNvYWxlc2NlIHdpdGggb24gdGhl
IGxlZnQuIFJlbW92ZSBpdCBmcm9tIHRoZSB0cmVlLCBhbmQKICAgICAgICAgLy8gcmVtb3ZlIGl0
cyBlbmQgZnJvbSB0aGUgZW5kIGFkZHJlc3MgbWFwLgogICAgICAgICAKLSAgICAgICAgQVNTRVJU
KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihsZWZ0
TmVpZ2hib3ItPnNlY29uZC0+bV9zdGFydCkgKyBsZWZ0TmVpZ2hib3ItPnNlY29uZC0+bV9zaXpl
SW5CeXRlcykgPT0gbGVmdE5laWdoYm9yLT5maXJzdCk7CisgICAgICAgIEFTU0VSVChyZWludGVy
cHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obGVmdE5laWdoYm9y
LT52YWx1ZS0+bV9zdGFydCkgKyBsZWZ0TmVpZ2hib3ItPnZhbHVlLT5tX3NpemVJbkJ5dGVzKSA9
PSBsZWZ0TmVpZ2hib3ItPmtleSk7CiAgICAgICAgIAotICAgICAgICBGcmVlU3BhY2VOb2RlKiBs
ZWZ0Tm9kZSA9IGxlZnROZWlnaGJvci0+c2Vjb25kOworICAgICAgICBGcmVlU3BhY2VOb2RlKiBs
ZWZ0Tm9kZSA9IGxlZnROZWlnaGJvci0+dmFsdWU7CiAgICAgICAgIAogICAgICAgICB2b2lkKiBs
ZWZ0U3RhcnQgPSBsZWZ0Tm9kZS0+bV9zdGFydDsKICAgICAgICAgc2l6ZV90IGxlZnRTaXplID0g
bGVmdE5vZGUtPm1fc2l6ZUluQnl0ZXM7CkBAIC0zMjYsMTAgKzMyNiwxMCBAQCB2b2lkIE1ldGFB
bGxvY2F0b3I6OmFkZEZyZWVTcGFjZSh2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVzKQog
ICAgICAgICAgICAgLy8gRnJlZWluZyBzb21ldGhpbmcgaW4gdGhlIG1pZGRsZSBvZiBmcmVlIGJs
b2Nrcy4gQ29hbGVzY2UgYm90aCBsZWZ0IGFuZAogICAgICAgICAgICAgLy8gcmlnaHQsIHdoaWxz
dCByZW1vdmluZyB0aGUgcmlnaHQgbmVpZ2hib3IgZnJvbSB0aGUgbWFwcy4KICAgICAgICAgICAg
IAotICAgICAgICAgICAgQVNTRVJUKHJpZ2h0TmVpZ2hib3ItPnNlY29uZC0+bV9zdGFydCA9PSBy
aWdodE5laWdoYm9yLT5maXJzdCk7CisgICAgICAgICAgICBBU1NFUlQocmlnaHROZWlnaGJvci0+
dmFsdWUtPm1fc3RhcnQgPT0gcmlnaHROZWlnaGJvci0+a2V5KTsKICAgICAgICAgICAgIAotICAg
ICAgICAgICAgRnJlZVNwYWNlTm9kZSogcmlnaHROb2RlID0gcmlnaHROZWlnaGJvci0+c2Vjb25k
OwotICAgICAgICAgICAgdm9pZCogcmlnaHRTdGFydCA9IHJpZ2h0TmVpZ2hib3ItPmZpcnN0Owor
ICAgICAgICAgICAgRnJlZVNwYWNlTm9kZSogcmlnaHROb2RlID0gcmlnaHROZWlnaGJvci0+dmFs
dWU7CisgICAgICAgICAgICB2b2lkKiByaWdodFN0YXJ0ID0gcmlnaHROZWlnaGJvci0+a2V5Owog
ICAgICAgICAgICAgc2l6ZV90IHJpZ2h0U2l6ZSA9IHJpZ2h0Tm9kZS0+bV9zaXplSW5CeXRlczsK
ICAgICAgICAgICAgIHZvaWQqIHJpZ2h0RW5kID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVp
bnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHJpZ2h0U3RhcnQpICsgcmlnaHRTaXplKTsKICAgICAg
ICAgICAgIApAQCAtMzU2LDggKzM1Niw4IEBAIHZvaWQgTWV0YUFsbG9jYXRvcjo6YWRkRnJlZVNw
YWNlKHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMpCiAgICAgICAgIC8vIENhbm5vdCBj
b2FsZXNjZSB3aXRoIGxlZnQ7IHRyeSB0byBzZWUgaWYgd2UgY2FuIGNvYWxlc2NlIHdpdGggcmln
aHQuCiAgICAgICAgIAogICAgICAgICBpZiAocmlnaHROZWlnaGJvciAhPSBtX2ZyZWVTcGFjZVN0
YXJ0QWRkcmVzc01hcC5lbmQoKSkgewotICAgICAgICAgICAgRnJlZVNwYWNlTm9kZSogcmlnaHRO
b2RlID0gcmlnaHROZWlnaGJvci0+c2Vjb25kOwotICAgICAgICAgICAgdm9pZCogcmlnaHRTdGFy
dCA9IHJpZ2h0TmVpZ2hib3ItPmZpcnN0OworICAgICAgICAgICAgRnJlZVNwYWNlTm9kZSogcmln
aHROb2RlID0gcmlnaHROZWlnaGJvci0+dmFsdWU7CisgICAgICAgICAgICB2b2lkKiByaWdodFN0
YXJ0ID0gcmlnaHROZWlnaGJvci0+a2V5OwogICAgICAgICAgICAgc2l6ZV90IHJpZ2h0U2l6ZSA9
IHJpZ2h0Tm9kZS0+bV9zaXplSW5CeXRlczsKICAgICAgICAgICAgIHZvaWQqIHJpZ2h0RW5kID0g
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHJpZ2h0
U3RhcnQpICsgcmlnaHRTaXplKTsKICAgICAgICAgICAgIApAQCAtNDAzLDcgKzQwMyw3IEBAIHZv
aWQgTWV0YUFsbG9jYXRvcjo6aW5jcmVtZW50UGFnZU9jY3VwYW5jeSh2b2lkKiBhZGRyZXNzLCBz
aXplX3Qgc2l6ZUluQnl0ZXMpCiAgICAgICAgICAgICBtX2J5dGVzQ29tbWl0dGVkICs9IG1fcGFn
ZVNpemU7CiAgICAgICAgICAgICBub3RpZnlOZWVkUGFnZShyZWludGVycHJldF9jYXN0PHZvaWQq
PihwYWdlIDw8IG1fbG9nUGFnZVNpemUpKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBp
dGVyLT5zZWNvbmQrKzsKKyAgICAgICAgICAgIGl0ZXItPnZhbHVlKys7CiAgICAgfQogfQogCkBA
IC00MTUsNyArNDE1LDcgQEAgdm9pZCBNZXRhQWxsb2NhdG9yOjpkZWNyZW1lbnRQYWdlT2NjdXBh
bmN5KHZvaWQqIGFkZHJlc3MsIHNpemVfdCBzaXplSW5CeXRlcykKICAgICBmb3IgKHVpbnRwdHJf
dCBwYWdlID0gZmlyc3RQYWdlOyBwYWdlIDw9IGxhc3RQYWdlOyArK3BhZ2UpIHsKICAgICAgICAg
SGFzaE1hcDx1aW50cHRyX3QsIHNpemVfdD46Oml0ZXJhdG9yIGl0ZXIgPSBtX3BhZ2VPY2N1cGFu
Y3lNYXAuZmluZChwYWdlKTsKICAgICAgICAgQVNTRVJUKGl0ZXIgIT0gbV9wYWdlT2NjdXBhbmN5
TWFwLmVuZCgpKTsKLSAgICAgICAgaWYgKCEtLShpdGVyLT5zZWNvbmQpKSB7CisgICAgICAgIGlm
ICghLS0oaXRlci0+dmFsdWUpKSB7CiAgICAgICAgICAgICBtX3BhZ2VPY2N1cGFuY3lNYXAucmVt
b3ZlKGl0ZXIpOwogICAgICAgICAgICAgbV9ieXRlc0NvbW1pdHRlZCAtPSBtX3BhZ2VTaXplOwog
ICAgICAgICAgICAgbm90aWZ5UGFnZUlzRnJlZShyZWludGVycHJldF9jYXN0PHZvaWQqPihwYWdl
IDw8IG1fbG9nUGFnZVNpemUpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1JlZkNvdW50
ZWRMZWFrQ291bnRlci5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9SZWZDb3VudGVkTGVha0NvdW50ZXIu
Y3BwCmluZGV4IDY3MGYyYTBjZWM1OTljNmQ0ZjMxNjQ0ZWJlYjU4NzQxNWVmNDMyMWEuLjRhMDQ1
MjgyNDg5ZmU5NWExN2UyMzkxOTc3M2QzN2NiMjQ0MTBiZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
VEYvd3RmL1JlZkNvdW50ZWRMZWFrQ291bnRlci5jcHAKKysrIGIvU291cmNlL1dURi93dGYvUmVm
Q291bnRlZExlYWtDb3VudGVyLmNwcApAQCAtNzEsNyArNzEsNyBAQCBSZWZDb3VudGVkTGVha0Nv
dW50ZXI6On5SZWZDb3VudGVkTGVha0NvdW50ZXIoKQogICAgICAgICAgICAgTE9HKFJlZkNvdW50
ZWRMZWFrcywgIkxFQUs6ICV1ICVzIiwgbV9jb3VudCwgbV9kZXNjcmlwdGlvbik7CiAgICAgICAg
IGVsc2UgaWYgKCFsb2dnZWRTdXBwcmVzc2lvblJlYXNvbikgewogICAgICAgICAgICAgLy8gVGhp
cyBsb2dzIG9ubHkgb25lIHJlYXNvbi4gTGF0ZXIgd2UgY291bGQgY2hhbmdlIGl0IHNvIHdlIGxv
ZyBhbGwgdGhlIHJlYXNvbnMuCi0gICAgICAgICAgICBMT0coUmVmQ291bnRlZExlYWtzLCAiTm8g
bGVhayBjaGVja2luZyBkb25lOiAlcyIsIGxlYWtNZXNzYWdlU3VwcHJlc3Npb25SZWFzb25zLT5i
ZWdpbigpLT5maXJzdCk7CisgICAgICAgICAgICBMT0coUmVmQ291bnRlZExlYWtzLCAiTm8gbGVh
ayBjaGVja2luZyBkb25lOiAlcyIsIGxlYWtNZXNzYWdlU3VwcHJlc3Npb25SZWFzb25zLT5iZWdp
bigpLT5rZXkpOwogICAgICAgICAgICAgbG9nZ2VkU3VwcHJlc3Npb25SZWFzb24gPSB0cnVlOwog
ICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUmVmUHRySGFzaE1h
cC5oIGIvU291cmNlL1dURi93dGYvUmVmUHRySGFzaE1hcC5oCmluZGV4IDVmYWU5MGU4Y2Q0NzEx
MjllODlkY2M4ZTdhZTY2MzhhZGExNTRkMzEuLjk1NDE4MzdlMmE2ZjI5YjlmMDZjM2M5NTYyYTEz
MzQ2YjAxZDRjZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1JlZlB0ckhhc2hNYXAuaAor
KysgYi9Tb3VyY2UvV1RGL3d0Zi9SZWZQdHJIYXNoTWFwLmgKQEAgLTIxNiw3ICsyMTYsNyBAQCBu
YW1lc3BhY2UgV1RGIHsKICAgICAgICAgQWRkUmVzdWx0IHJlc3VsdCA9IGlubGluZUFkZChrZXks
IG1hcHBlZCk7CiAgICAgICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpIHsKICAgICAgICAgICAg
IC8vIFRoZSBpbmxpbmVBZGQgY2FsbCBhYm92ZSBmb3VuZCBhbiBleGlzdGluZyBoYXNoIHRhYmxl
IGVudHJ5OyB3ZSBuZWVkIHRvIHNldCB0aGUgbWFwcGVkIHZhbHVlLgotICAgICAgICAgICAgTWFw
cGVkVHJhaXRzOjpzdG9yZShtYXBwZWQsIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKKyAgICAg
ICAgICAgIE1hcHBlZFRyYWl0czo6c3RvcmUobWFwcGVkLCByZXN1bHQuaXRlcmF0b3ItPnZhbHVl
KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTIyOCw3ICsy
MjgsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgQWRkUmVzdWx0IHJlc3VsdCA9IGlubGlu
ZUFkZChrZXksIG1hcHBlZCk7CiAgICAgICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpIHsKICAg
ICAgICAgICAgIC8vIFRoZSBpbmxpbmVBZGQgY2FsbCBhYm92ZSBmb3VuZCBhbiBleGlzdGluZyBo
YXNoIHRhYmxlIGVudHJ5OyB3ZSBuZWVkIHRvIHNldCB0aGUgbWFwcGVkIHZhbHVlLgotICAgICAg
ICAgICAgTWFwcGVkVHJhaXRzOjpzdG9yZShtYXBwZWQsIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25k
KTsKKyAgICAgICAgICAgIE1hcHBlZFRyYWl0czo6c3RvcmUobWFwcGVkLCByZXN1bHQuaXRlcmF0
b3ItPnZhbHVlKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KQEAg
LTI1NCw3ICsyNTQsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgVmFsdWVUeXBlKiBlbnRy
eSA9IGNvbnN0X2Nhc3Q8SGFzaFRhYmxlVHlwZSY+KG1faW1wbCkubG9va3VwKGtleSk7CiAgICAg
ICAgIGlmICghZW50cnkpCiAgICAgICAgICAgICByZXR1cm4gTWFwcGVkVHJhaXRzOjpwZWVrKE1h
cHBlZFRyYWl0czo6ZW1wdHlWYWx1ZSgpKTsKLSAgICAgICAgcmV0dXJuIE1hcHBlZFRyYWl0czo6
cGVlayhlbnRyeS0+c2Vjb25kKTsKKyAgICAgICAgcmV0dXJuIE1hcHBlZFRyYWl0czo6cGVlayhl
bnRyeS0+dmFsdWUpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0cz4KQEAgLTI2
NCw3ICsyNjQsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgVmFsdWVUeXBlKiBlbnRyeSA9
IGNvbnN0X2Nhc3Q8SGFzaFRhYmxlVHlwZSY+KG1faW1wbCkudGVtcGxhdGUgbG9va3VwPFRyYW5z
bGF0b3I+KGtleSk7CiAgICAgICAgIGlmICghZW50cnkpCiAgICAgICAgICAgICByZXR1cm4gTWFw
cGVkVHJhaXRzOjpwZWVrKE1hcHBlZFRyYWl0czo6ZW1wdHlWYWx1ZSgpKTsKLSAgICAgICAgcmV0
dXJuIE1hcHBlZFRyYWl0czo6cGVlayhlbnRyeS0+c2Vjb25kKTsKKyAgICAgICAgcmV0dXJuIE1h
cHBlZFRyYWl0czo6cGVlayhlbnRyeS0+dmFsdWUpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIE1h
cHBlZFRyYWl0cz4KQEAgLTMwOCw3ICszMDgsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAg
aXRlcmF0b3IgaXQgPSBmaW5kKGtleSk7CiAgICAgICAgIGlmIChpdCA9PSBlbmQoKSkKICAgICAg
ICAgICAgIHJldHVybiBNYXBwZWRUcmFpdHM6OnBhc3NPdXQoTWFwcGVkVHJhaXRzOjplbXB0eVZh
bHVlKCkpOwotICAgICAgICBNYXBwZWRQYXNzT3V0VHlwZSByZXN1bHQgPSBNYXBwZWRUcmFpdHM6
OnBhc3NPdXQoaXQtPnNlY29uZCk7CisgICAgICAgIE1hcHBlZFBhc3NPdXRUeXBlIHJlc3VsdCA9
IE1hcHBlZFRyYWl0czo6cGFzc091dChpdC0+dmFsdWUpOwogICAgICAgICByZW1vdmUoaXQpOwog
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTMyMCw3ICszMjAsNyBAQCBuYW1lc3Bh
Y2UgV1RGIHsKICAgICAgICAgaXRlcmF0b3IgaXQgPSBmaW5kKGtleSk7CiAgICAgICAgIGlmIChp
dCA9PSBlbmQoKSkKICAgICAgICAgICAgIHJldHVybiBNYXBwZWRUcmFpdHM6OnBhc3NPdXQoTWFw
cGVkVHJhaXRzOjplbXB0eVZhbHVlKCkpOwotICAgICAgICBNYXBwZWRQYXNzT3V0VHlwZSByZXN1
bHQgPSBNYXBwZWRUcmFpdHM6OnBhc3NPdXQoaXQtPnNlY29uZCk7CisgICAgICAgIE1hcHBlZFBh
c3NPdXRUeXBlIHJlc3VsdCA9IE1hcHBlZFRyYWl0czo6cGFzc091dChpdC0+dmFsdWUpOwogICAg
ICAgICByZW1vdmUoaXQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL1NwZWN0cnVtLmggYi9Tb3VyY2UvV1RGL3d0Zi9TcGVjdHJ1bS5o
CmluZGV4IDVlN2E0ODRjZDg3NjZiY2FmMjJjYTRjOTNkZGNlOTcwZGQyYmEyMTMuLjNlNmZhNGE2
MzNmYWQ0MmRlYjRkYzQ4MzMyNTkyMzQxZTg0YjNhMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
d3RmL1NwZWN0cnVtLmgKKysrIGIvU291cmNlL1dURi93dGYvU3BlY3RydW0uaApAQCAtNDQsNyAr
NDQsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICB0eXBlbmFtZSBIYXNoTWFwPFQsIHVuc2ln
bmVkIGxvbmc+OjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9tYXAuYWRkKGtleSwgY291bnQpOwogICAg
ICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9y
LT5zZWNvbmQgKz0gY291bnQ7CisgICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlICs9
IGNvdW50OwogICAgIH0KICAgICAKICAgICB1bnNpZ25lZCBsb25nIGdldChjb25zdCBUJiBrZXkp
IGNvbnN0CkBAIC01Miw3ICs1Miw3IEBAIHB1YmxpYzoKICAgICAgICAgY29uc3RfaXRlcmF0b3Ig
aXRlciA9IG1fbWFwLmZpbmQoa2V5KTsKICAgICAgICAgaWYgKGl0ZXIgPT0gbV9tYXAuZW5kKCkp
CiAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuIGl0ZXItPnNlY29uZDsKKyAg
ICAgICAgcmV0dXJuIGl0ZXItPnZhbHVlOwogICAgIH0KICAgICAKICAgICBpdGVyYXRvciBiZWdp
bigpIHsgcmV0dXJuIG1fbWFwLmJlZ2luKCk7IH0KQEAgLTg4LDcgKzg4LDcgQEAgcHVibGljOgog
ICAgIHsKICAgICAgICAgVmVjdG9yPEtleUFuZENvdW50PiBsaXN0OwogICAgICAgICBmb3IgKGNv
bnN0X2l0ZXJhdG9yIGl0ZXIgPSBiZWdpbigpOyBpdGVyICE9IGVuZCgpOyArK2l0ZXIpCi0gICAg
ICAgICAgICBsaXN0LmFwcGVuZChLZXlBbmRDb3VudChpdGVyLT5maXJzdCwgaXRlci0+c2Vjb25k
KSk7CisgICAgICAgICAgICBsaXN0LmFwcGVuZChLZXlBbmRDb3VudChpdGVyLT5rZXksIGl0ZXIt
PnZhbHVlKSk7CiAgICAgICAgIAogICAgICAgICBzdGQ6OnNvcnQobGlzdC5iZWdpbigpLCBsaXN0
LmVuZCgpKTsKICAgICAgICAgcmV0dXJuIGxpc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdQdGhyZWFk
cy5jcHAKaW5kZXggMjI2ZWNiZDQ4YzAyOTg3OWQxMWM5NTIzZDUwNTM0NGU1NjgwZjg1OS4uZGRj
MzNiNGFjZjkyYTVjNjQ3N2ZiMjMzODYyMjhkY2VhMTcwODMyZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVh
ZGluZ1B0aHJlYWRzLmNwcApAQCAtMTUwLDggKzE1MCw4IEBAIHN0YXRpYyBUaHJlYWRJZGVudGlm
aWVyIGlkZW50aWZpZXJCeVB0aHJlYWRIYW5kbGUoY29uc3QgcHRocmVhZF90JiBwdGhyZWFkSGFu
ZGxlCiAKICAgICBUaHJlYWRNYXA6Oml0ZXJhdG9yIGkgPSB0aHJlYWRNYXAoKS5iZWdpbigpOwog
ICAgIGZvciAoOyBpICE9IHRocmVhZE1hcCgpLmVuZCgpOyArK2kpIHsKLSAgICAgICAgaWYgKHB0
aHJlYWRfZXF1YWwoaS0+c2Vjb25kLT5wdGhyZWFkSGFuZGxlKCksIHB0aHJlYWRIYW5kbGUpICYm
ICFpLT5zZWNvbmQtPmhhc0V4aXRlZCgpKQotICAgICAgICAgICAgcmV0dXJuIGktPmZpcnN0Owor
ICAgICAgICBpZiAocHRocmVhZF9lcXVhbChpLT52YWx1ZS0+cHRocmVhZEhhbmRsZSgpLCBwdGhy
ZWFkSGFuZGxlKSAmJiAhaS0+dmFsdWUtPmhhc0V4aXRlZCgpKQorICAgICAgICAgICAgcmV0dXJu
IGktPmtleTsKICAgICB9CiAKICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vR2VvbG9jYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlvbi5jcHAKaW5kZXggNTdjYWYzMTUyYWNjODlk
Njk3YWE4ZjY0NWNjOGYwMTM1OWJjYjE1Mi4uYTNlZjQwMjZkZDA5OWFhYzcxMDY0NjQ5NGJkY2Q1
Yjk2ODU1ZGEzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlv
bi9HZW9sb2NhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlv
bi9HZW9sb2NhdGlvbi5jcHAKQEAgLTE5Miw3ICsxOTIsNyBAQCBHZW9sb2NhdGlvbjo6R2VvTm90
aWZpZXIqIEdlb2xvY2F0aW9uOjpXYXRjaGVyczo6ZmluZChpbnQgaWQpCiAgICAgSWRUb05vdGlm
aWVyTWFwOjppdGVyYXRvciBpdGVyID0gbV9pZFRvTm90aWZpZXJNYXAuZmluZChpZCk7CiAgICAg
aWYgKGl0ZXIgPT0gbV9pZFRvTm90aWZpZXJNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybiAwOwot
ICAgIHJldHVybiBpdGVyLT5zZWNvbmQuZ2V0KCk7CisgICAgcmV0dXJuIGl0ZXItPnZhbHVlLmdl
dCgpOwogfQogCiB2b2lkIEdlb2xvY2F0aW9uOjpXYXRjaGVyczo6cmVtb3ZlKGludCBpZCkKQEAg
LTIwMSw3ICsyMDEsNyBAQCB2b2lkIEdlb2xvY2F0aW9uOjpXYXRjaGVyczo6cmVtb3ZlKGludCBp
ZCkKICAgICBJZFRvTm90aWZpZXJNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2lkVG9Ob3RpZmllck1h
cC5maW5kKGlkKTsKICAgICBpZiAoaXRlciA9PSBtX2lkVG9Ob3RpZmllck1hcC5lbmQoKSkKICAg
ICAgICAgcmV0dXJuOwotICAgIG1fbm90aWZpZXJUb0lkTWFwLnJlbW92ZShpdGVyLT5zZWNvbmQp
OworICAgIG1fbm90aWZpZXJUb0lkTWFwLnJlbW92ZShpdGVyLT52YWx1ZSk7CiAgICAgbV9pZFRv
Tm90aWZpZXJNYXAucmVtb3ZlKGl0ZXIpOwogfQogCkBAIC0yMTAsNyArMjEwLDcgQEAgdm9pZCBH
ZW9sb2NhdGlvbjo6V2F0Y2hlcnM6OnJlbW92ZShHZW9Ob3RpZmllciogbm90aWZpZXIpCiAgICAg
Tm90aWZpZXJUb0lkTWFwOjppdGVyYXRvciBpdGVyID0gbV9ub3RpZmllclRvSWRNYXAuZmluZChu
b3RpZmllcik7CiAgICAgaWYgKGl0ZXIgPT0gbV9ub3RpZmllclRvSWRNYXAuZW5kKCkpCiAgICAg
ICAgIHJldHVybjsKLSAgICBtX2lkVG9Ob3RpZmllck1hcC5yZW1vdmUoaXRlci0+c2Vjb25kKTsK
KyAgICBtX2lkVG9Ob3RpZmllck1hcC5yZW1vdmUoaXRlci0+dmFsdWUpOwogICAgIG1fbm90aWZp
ZXJUb0lkTWFwLnJlbW92ZShpdGVyKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwCmluZGV4IGFhOTNlNmE4MmM3NTQ4Yzk4YjE5OTQy
NWFhMDBiMmNlYzM5ZTg4OTMuLjgxMWNmNGEyZjY5NzdmODMyYWYzMWE4YzIwNzAyNjkxOTcwNmJi
MTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFi
YXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFz
ZS5jcHAKQEAgLTEwOCw3ICsxMDgsNyBAQCBQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IElEQkRh
dGFiYXNlOjpvYmplY3RTdG9yZU5hbWVzKCkgY29uc3QKIHsKICAgICBSZWZQdHI8RE9NU3RyaW5n
TGlzdD4gb2JqZWN0U3RvcmVOYW1lcyA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOwogICAgIGZv
ciAoSURCRGF0YWJhc2VNZXRhZGF0YTo6T2JqZWN0U3RvcmVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuYmVnaW4oKTsgaXQgIT0gbV9tZXRhZGF0YS5vYmpl
Y3RTdG9yZXMuZW5kKCk7ICsraXQpCi0gICAgICAgIG9iamVjdFN0b3JlTmFtZXMtPmFwcGVuZChp
dC0+Zmlyc3QpOworICAgICAgICBvYmplY3RTdG9yZU5hbWVzLT5hcHBlbmQoaXQtPmtleSk7CiAg
ICAgb2JqZWN0U3RvcmVOYW1lcy0+c29ydCgpOwogICAgIHJldHVybiBvYmplY3RTdG9yZU5hbWVz
LnJlbGVhc2UoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAKaW5kZXggODExMGMyNGMxM2IzYzQ2
M2VlMzdiMjBkNGNmZmE3MTI0MjQ0YjYzOS4uNzUzODA3ZmQ4ZTg3ZmY2NDQ1YzU2MTViYTU4NTI1
MWQxZDk4ZDg0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAKQEAgLTE1OSw3ICsxNTksNyBAQCBJ
REJEYXRhYmFzZU1ldGFkYXRhIElEQkRhdGFiYXNlQmFja2VuZEltcGw6Om1ldGFkYXRhKCkgY29u
c3QKIHsKICAgICBJREJEYXRhYmFzZU1ldGFkYXRhIG1ldGFkYXRhKG1fbmFtZSwgbV92ZXJzaW9u
LCBtX2ludFZlcnNpb24pOwogICAgIGZvciAoT2JqZWN0U3RvcmVNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbV9vYmplY3RTdG9yZXMuYmVnaW4oKTsgaXQgIT0gbV9vYmplY3RTdG9yZXMuZW5kKCk7
ICsraXQpCi0gICAgICAgIG1ldGFkYXRhLm9iamVjdFN0b3Jlcy5zZXQoaXQtPmZpcnN0LCBpdC0+
c2Vjb25kLT5tZXRhZGF0YSgpKTsKKyAgICAgICAgbWV0YWRhdGEub2JqZWN0U3RvcmVzLnNldChp
dC0+a2V5LCBpdC0+dmFsdWUtPm1ldGFkYXRhKCkpOwogICAgIHJldHVybiBtZXRhZGF0YTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9y
eUJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZh
Y3RvcnlCYWNrZW5kSW1wbC5jcHAKaW5kZXggOGRhNWMwMmU0MjNmNmY2NGU1Nzk3MzBkYjczZmEy
OWVjMmJlNDYwNi4uMTYwNjY5Y2QyNmE5ODUzMGRjNDgzYzcwOTg1MTRhNDZjMzg3YTI1MSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tl
bmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0
b3J5QmFja2VuZEltcGwuY3BwCkBAIC0xMDcsNyArMTA3LDcgQEAgdm9pZCBJREJGYWN0b3J5QmFj
a2VuZEltcGw6OmRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJ
REJDYWwKICAgICBpZiAoaXQgIT0gbV9kYXRhYmFzZUJhY2tlbmRNYXAuZW5kKCkpIHsKICAgICAg
ICAgLy8gSWYgdGhlcmUgYXJlIGFueSBjb25uZWN0aW9ucyB0byB0aGUgZGF0YWJhc2UsIGRpcmVj
dGx5IGRlbGV0ZSB0aGUKICAgICAgICAgLy8gZGF0YWJhc2UuCi0gICAgICAgIGl0LT5zZWNvbmQt
PmRlbGV0ZURhdGFiYXNlKGNhbGxiYWNrcyk7CisgICAgICAgIGl0LT52YWx1ZS0+ZGVsZXRlRGF0
YWJhc2UoY2FsbGJhY2tzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTM0LDcgKzEz
NCw3IEBAIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBJREJGYWN0b3J5QmFja2VuZEltcGw6
Om9wZW5CYWNraW5nU3RvcmUoUGFzc1JlZlB0cjxTCiAgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9y
ZT4gYmFja2luZ1N0b3JlOwogICAgIElEQkJhY2tpbmdTdG9yZU1hcDo6aXRlcmF0b3IgaXQyID0g
bV9iYWNraW5nU3RvcmVNYXAuZmluZChmaWxlSWRlbnRpZmllcik7CiAgICAgaWYgKGl0MiAhPSBt
X2JhY2tpbmdTdG9yZU1hcC5lbmQoKSkKLSAgICAgICAgYmFja2luZ1N0b3JlID0gaXQyLT5zZWNv
bmQ7CisgICAgICAgIGJhY2tpbmdTdG9yZSA9IGl0Mi0+dmFsdWU7CiAgICAgZWxzZSB7CiAjaWYg
VVNFKExFVkVMREIpCiAgICAgICAgIGJhY2tpbmdTdG9yZSA9IElEQkxldmVsREJCYWNraW5nU3Rv
cmU6Om9wZW4oc2VjdXJpdHlPcmlnaW4uZ2V0KCksIGRhdGFEaXJlY3RvcnksIGZpbGVJZGVudGlm
aWVyLCB0aGlzKTsKQEAgLTE3Miw3ICsxNzIsNyBAQCB2b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1w
bDo6b3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIGludDY0X3QgdmVyc2lvbiwgUGFzc1JlZlB0cgog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfSBlbHNlCi0gICAgICAgIGRhdGFi
YXNlQmFja2VuZCA9IGl0LT5zZWNvbmQ7CisgICAgICAgIGRhdGFiYXNlQmFja2VuZCA9IGl0LT52
YWx1ZTsKIAogICAgIGlmICh2ZXJzaW9uID09IElEQkRhdGFiYXNlTWV0YWRhdGE6Ok5vSW50VmVy
c2lvbikKICAgICAgICAgZGF0YWJhc2VCYWNrZW5kLT5vcGVuQ29ubmVjdGlvbihjYWxsYmFja3Mp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0
U3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3Rv
cmUuY3BwCmluZGV4IGMzMGEyNTNhNDA2NTNlODk2YjI0ZDNmNzU4ZDdjYTU4OTM2MTI4OGMuLjBi
ZmRmOTFlZjAzZDU0NDc2ODQyMzc1M2RhYWEzMmE1ZDBkZTg3YjUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKQEAgLTY2LDcg
KzY2LDcgQEAgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBJREJPYmplY3RTdG9yZTo6aW5kZXhO
YW1lcygpIGNvbnN0CiAgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZTo6aW5kZXhOYW1lcyIp
OwogICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiBpbmRleE5hbWVzID0gRE9NU3RyaW5nTGlzdDo6
Y3JlYXRlKCk7CiAgICAgZm9yIChJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbmRleE1hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtX21ldGFkYXRhLmluZGV4ZXMuYmVnaW4oKTsgaXQgIT0gbV9tZXRh
ZGF0YS5pbmRleGVzLmVuZCgpOyArK2l0KQotICAgICAgICBpbmRleE5hbWVzLT5hcHBlbmQoaXQt
PmZpcnN0KTsKKyAgICAgICAgaW5kZXhOYW1lcy0+YXBwZW5kKGl0LT5rZXkpOwogICAgIGluZGV4
TmFtZXMtPnNvcnQoKTsKICAgICByZXR1cm4gaW5kZXhOYW1lcy5yZWxlYXNlKCk7CiB9CkBAIC0y
MDYsOCArMjA2LDggQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0
KElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6UHV0TW8KICAgICBWZWN0b3I8SW5kZXhL
ZXlzPiBpbmRleEtleXM7CiAgICAgZm9yIChJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbmRleE1h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX21ldGFkYXRhLmluZGV4ZXMuYmVnaW4oKTsgaXQgIT0g
bV9tZXRhZGF0YS5pbmRleGVzLmVuZCgpOyArK2l0KSB7CiAgICAgICAgIEluZGV4S2V5cyBrZXlz
OwotICAgICAgICBnZW5lcmF0ZUluZGV4S2V5c0ZvclZhbHVlKGl0LT5zZWNvbmQsIHZhbHVlLCAm
a2V5cyk7Ci0gICAgICAgIGluZGV4TmFtZXMuYXBwZW5kKGl0LT5maXJzdCk7CisgICAgICAgIGdl
bmVyYXRlSW5kZXhLZXlzRm9yVmFsdWUoaXQtPnZhbHVlLCB2YWx1ZSwgJmtleXMpOworICAgICAg
ICBpbmRleE5hbWVzLmFwcGVuZChpdC0+a2V5KTsKICAgICAgICAgaW5kZXhLZXlzLmFwcGVuZChr
ZXlzKTsKICAgICB9CiAgICAgQVNTRVJUKGluZGV4S2V5cy5zaXplKCkgPT0gaW5kZXhOYW1lcy5z
aXplKCkpOwpAQCAtNDQ4LDcgKzQ0OCw3IEBAIFBhc3NSZWZQdHI8SURCSW5kZXg+IElEQk9iamVj
dFN0b3JlOjppbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjCiAKICAg
ICBJREJJbmRleE1hcDo6aXRlcmF0b3IgaXQgPSBtX2luZGV4TWFwLmZpbmQobmFtZSk7CiAgICAg
aWYgKGl0ICE9IG1faW5kZXhNYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdC0+c2Vjb25kOwor
ICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwogCiAgICAgUmVmUHRyPElEQkluZGV4QmFja2VuZElu
dGVyZmFjZT4gaW5kZXhCYWNrZW5kID0gbV9iYWNrZW5kLT5pbmRleChuYW1lLCBlYyk7CiAgICAg
QVNTRVJUKCFpbmRleEJhY2tlbmQgIT0gIWVjKTsgLy8gSWYgd2UgZGlkbid0IGdldCBhbiBpbmRl
eCwgd2Ugc2hvdWxkIGhhdmUgZ290dGVuIGFuIGV4Y2VwdGlvbiBjb2RlLiBBbmQgdmljZSB2ZXJz
YS4KQEAgLTQ1OCw3ICs0NTgsNyBAQCBQYXNzUmVmUHRyPElEQkluZGV4PiBJREJPYmplY3RTdG9y
ZTo6aW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYwogICAgIElEQk9i
amVjdFN0b3JlTWV0YWRhdGE6OkluZGV4TWFwOjpjb25zdF9pdGVyYXRvciBtZGl0ID0gbV9tZXRh
ZGF0YS5pbmRleGVzLmZpbmQobmFtZSk7CiAgICAgQVNTRVJUKG1kaXQgIT0gbV9tZXRhZGF0YS5p
bmRleGVzLmVuZCgpKTsKIAotICAgIFJlZlB0cjxJREJJbmRleD4gaW5kZXggPSBJREJJbmRleDo6
Y3JlYXRlKG1kaXQtPnNlY29uZCwgaW5kZXhCYWNrZW5kLnJlbGVhc2UoKSwgdGhpcywgbV90cmFu
c2FjdGlvbi5nZXQoKSk7CisgICAgUmVmUHRyPElEQkluZGV4PiBpbmRleCA9IElEQkluZGV4Ojpj
cmVhdGUobWRpdC0+dmFsdWUsIGluZGV4QmFja2VuZC5yZWxlYXNlKCksIHRoaXMsIG1fdHJhbnNh
Y3Rpb24uZ2V0KCkpOwogICAgIG1faW5kZXhNYXAuc2V0KG5hbWUsIGluZGV4KTsKICAgICByZXR1
cm4gaW5kZXgucmVsZWFzZSgpOwogfQpAQCAtNDgyLDcgKzQ4Miw3IEBAIHZvaWQgSURCT2JqZWN0
U3RvcmU6OmRlbGV0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMp
CiAgICAgaWYgKCFlYykgewogICAgICAgICBJREJJbmRleE1hcDo6aXRlcmF0b3IgaXQgPSBtX2lu
ZGV4TWFwLmZpbmQobmFtZSk7CiAgICAgICAgIGlmIChpdCAhPSBtX2luZGV4TWFwLmVuZCgpKSB7
Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLT5tYXJrRGVsZXRlZCgpOworICAgICAgICAgICAgaXQt
PnZhbHVlLT5tYXJrRGVsZXRlZCgpOwogICAgICAgICAgICAgbV9pbmRleE1hcC5yZW1vdmUobmFt
ZSk7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcAppbmRleCBiNmQwZWEw
YTUwZGUyMGRkZWFjNTE1ZjY0ZjZkODU5M2E2NzI0M2ZhLi4wZWI0ODA0ODM4MWZiN2M3YTNkNmVj
N2FhZDgxYTE5NzFiYzQ5MGE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcApAQCAtNzQs
NyArNzQsNyBAQCBJREJPYmplY3RTdG9yZU1ldGFkYXRhIElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6Om1ldGFkYXRhKCkgY29uc3QKIHsKICAgICBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG1ldGFk
YXRhKG1fbmFtZSwgbV9rZXlQYXRoLCBtX2F1dG9JbmNyZW1lbnQpOwogICAgIGZvciAoSW5kZXhN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9pbmRleGVzLmJlZ2luKCk7IGl0ICE9IG1faW5kZXhl
cy5lbmQoKTsgKytpdCkKLSAgICAgICAgbWV0YWRhdGEuaW5kZXhlcy5zZXQoaXQtPmZpcnN0LCBp
dC0+c2Vjb25kLT5tZXRhZGF0YSgpKTsKKyAgICAgICAgbWV0YWRhdGEuaW5kZXhlcy5zZXQoaXQt
PmtleSwgaXQtPnZhbHVlLT5tZXRhZGF0YSgpKTsKICAgICByZXR1cm4gbWV0YWRhdGE7CiB9CiAK
QEAgLTIzMCwxMSArMjMwLDExIEBAIHN0YXRpYyBib29sIG1ha2VJbmRleFdyaXRlcnMoSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbCogb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8CiAKICAgICBmb3Ig
KElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OkluZGV4TWFwOjppdGVyYXRvciBpdCA9IG9iamVj
dFN0b3JlLT5pdGVySW5kZXhlc0JlZ2luKCk7IGl0ICE9IG9iamVjdFN0b3JlLT5pdGVySW5kZXhl
c0VuZCgpOyArK2l0KSB7CiAKLSAgICAgICAgY29uc3QgUmVmUHRyPElEQkluZGV4QmFja2VuZElt
cGw+JiBpbmRleCA9IGl0LT5zZWNvbmQ7CisgICAgICAgIGNvbnN0IFJlZlB0cjxJREJJbmRleEJh
Y2tlbmRJbXBsPiYgaW5kZXggPSBpdC0+dmFsdWU7CiAgICAgICAgIGlmICghaW5kZXgtPmhhc1Zh
bGlkSWQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBUaGUgaW5kZXggb2JqZWN0IGhhcyBi
ZWVuIGNyZWF0ZWQsIGJ1dCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgZGF0YWJhc2UgeWV0LgogCi0g
ICAgICAgIElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlzIGtleXMgPSBp
bmRleEtleU1hcC5nZXQoaXQtPmZpcnN0KTsKKyAgICAgICAgSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW50ZXJmYWNlOjpJbmRleEtleXMga2V5cyA9IGluZGV4S2V5TWFwLmdldChpdC0+a2V5KTsKICAg
ICAgICAgLy8gSWYgdGhlIG9iamVjdFN0b3JlIGlzIHVzaW5nIGF1dG9JbmNyZW1lbnQsIHRoZW4g
YW55IGluZGV4ZXMgd2l0aCBhbiBpZGVudGljYWwga2V5UGF0aCBuZWVkIHRvIGFsc28gdXNlIHRo
ZSBwcmltYXJ5IChnZW5lcmF0ZWQpIGtleSBhcyBhIGtleS4KICAgICAgICAgaWYgKGtleVdhc0dl
bmVyYXRlZCkgewogICAgICAgICAgICAgY29uc3QgSURCS2V5UGF0aCYgaW5kZXhLZXlQYXRoID0g
aW5kZXgtPmtleVBhdGgoKTsKQEAgLTQwNCwxMCArNDA0LDEwIEBAIHZvaWQgSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBh
c3NSZWZQCiAgICAgICAgICAgICByZWNvcmRJZGVudGlmaWVyID0gYmFja2luZ1N0b3JlQ3Vyc29y
LT5vYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIoKTsKIAogICAgICAgICAgICAgZm9yIChJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpJbmRleE1hcDo6aXRlcmF0b3IgaXQgPSBvYmplY3RTdG9y
ZS0+bV9pbmRleGVzLmJlZ2luKCk7IGl0ICE9IG9iamVjdFN0b3JlLT5tX2luZGV4ZXMuZW5kKCk7
ICsraXQpIHsKLSAgICAgICAgICAgICAgICBpZiAoIWl0LT5zZWNvbmQtPmhhc1ZhbGlkSWQoKSkK
KyAgICAgICAgICAgICAgICBpZiAoIWl0LT52YWx1ZS0+aGFzVmFsaWRJZCgpKQogICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsgLy8gVGhlIGluZGV4IG9iamVjdCBoYXMgYmVlbiBjcmVhdGVk
LCBidXQgZG9lcyBub3QgZXhpc3QgaW4gdGhlIGRhdGFiYXNlIHlldC4KIAotICAgICAgICAgICAg
ICAgIGJvb2wgc3VjY2VzcyA9IG9iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+ZGVsZXRlSW5k
ZXhEYXRhRm9yUmVjb3JkKG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0b3JlLT5p
ZCgpLCBpdC0+c2Vjb25kLT5pZCgpLCByZWNvcmRJZGVudGlmaWVyLmdldCgpKTsKKyAgICAgICAg
ICAgICAgICBib29sIHN1Y2Nlc3MgPSBvYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCktPmRlbGV0
ZUluZGV4RGF0YUZvclJlY29yZChvYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9y
ZS0+aWQoKSwgaXQtPnZhbHVlLT5pZCgpLCByZWNvcmRJZGVudGlmaWVyLmdldCgpKTsKICAgICAg
ICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOwogICAgICAgICAgICAg
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFu
c2FjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2Fj
dGlvbi5jcHAKaW5kZXggMjFlNWYzMjhlMzQ1NTM4OWNlMDg1NjYyMDcwZWVlYTE0NjU1ZjYyOC4u
YjUzNDY3NzQxYjQ0MjdmMWQ2Y2QwNDlmOWEwNDYxOWEwNTM2YjFhMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcApAQCAtMTUx
LDcgKzE1MSw3IEBAIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IElEQlRyYW5zYWN0aW9uOjpv
YmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwCiAKICAgICBJREJPYmplY3RTdG9y
ZU1hcDo6aXRlcmF0b3IgaXQgPSBtX29iamVjdFN0b3JlTWFwLmZpbmQobmFtZSk7CiAgICAgaWYg
KGl0ICE9IG1fb2JqZWN0U3RvcmVNYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdC0+c2Vjb25k
OworICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwogCiAgICAgUmVmUHRyPElEQk9iamVjdFN0b3Jl
QmFja2VuZEludGVyZmFjZT4gb2JqZWN0U3RvcmVCYWNrZW5kID0gbV9iYWNrZW5kLT5vYmplY3RT
dG9yZShuYW1lLCBlYyk7CiAgICAgQVNTRVJUKCFvYmplY3RTdG9yZUJhY2tlbmQgIT0gIWVjKTsg
Ly8gSWYgd2UgZGlkbid0IGdldCBhIHN0b3JlLCB3ZSBzaG91bGQgaGF2ZSBnb3R0ZW4gYW4gZXhj
ZXB0aW9uIGNvZGUuIEFuZCB2aWNlIHZlcnNhLgpAQCAtMTYyLDcgKzE2Miw3IEBAIFBhc3NSZWZQ
dHI8SURCT2JqZWN0U3RvcmU+IElEQlRyYW5zYWN0aW9uOjpvYmplY3RTdG9yZShjb25zdCBTdHJp
bmcmIG5hbWUsIEV4Y2VwCiAgICAgSURCRGF0YWJhc2VNZXRhZGF0YTo6T2JqZWN0U3RvcmVNYXA6
OmNvbnN0X2l0ZXJhdG9yIG1kaXQgPSBtZXRhZGF0YS5vYmplY3RTdG9yZXMuZmluZChuYW1lKTsK
ICAgICBBU1NFUlQobWRpdCAhPSBtZXRhZGF0YS5vYmplY3RTdG9yZXMuZW5kKCkpOwogCi0gICAg
UmVmUHRyPElEQk9iamVjdFN0b3JlPiBvYmplY3RTdG9yZSA9IElEQk9iamVjdFN0b3JlOjpjcmVh
dGUobWRpdC0+c2Vjb25kLCBvYmplY3RTdG9yZUJhY2tlbmQsIHRoaXMpOworICAgIFJlZlB0cjxJ
REJPYmplY3RTdG9yZT4gb2JqZWN0U3RvcmUgPSBJREJPYmplY3RTdG9yZTo6Y3JlYXRlKG1kaXQt
PnZhbHVlLCBvYmplY3RTdG9yZUJhY2tlbmQsIHRoaXMpOwogICAgIG9iamVjdFN0b3JlQ3JlYXRl
ZChuYW1lLCBvYmplY3RTdG9yZSk7CiAgICAgcmV0dXJuIG9iamVjdFN0b3JlLnJlbGVhc2UoKTsK
IH0KQEAgLTE4Miw3ICsxODIsNyBAQCB2b2lkIElEQlRyYW5zYWN0aW9uOjpvYmplY3RTdG9yZURl
bGV0ZWQoY29uc3QgU3RyaW5nJiBuYW1lKQogICAgIEFTU0VSVChpc1ZlcnNpb25DaGFuZ2UoKSk7
CiAgICAgSURCT2JqZWN0U3RvcmVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9vYmplY3RTdG9yZU1hcC5m
aW5kKG5hbWUpOwogICAgIGlmIChpdCAhPSBtX29iamVjdFN0b3JlTWFwLmVuZCgpKSB7Ci0gICAg
ICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZT4gb2JqZWN0U3RvcmUgPSBpdC0+c2Vjb25kOworICAg
ICAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmU+IG9iamVjdFN0b3JlID0gaXQtPnZhbHVlOwogICAg
ICAgICBtX29iamVjdFN0b3JlTWFwLnJlbW92ZShuYW1lKTsKICAgICAgICAgb2JqZWN0U3RvcmUt
Pm1hcmtEZWxldGVkKCk7CiAgICAgICAgIG1fb2JqZWN0U3RvcmVDbGVhbnVwTWFwLnNldChvYmpl
Y3RTdG9yZSwgb2JqZWN0U3RvcmUtPm1ldGFkYXRhKCkpOwpAQCAtMjkwLDcgKzI5MCw3IEBAIHZv
aWQgSURCVHJhbnNhY3Rpb246Om9uQWJvcnQoKQogCiAgICAgaWYgKGlzVmVyc2lvbkNoYW5nZSgp
KSB7CiAgICAgICAgIGZvciAoSURCT2JqZWN0U3RvcmVNZXRhZGF0YU1hcDo6aXRlcmF0b3IgaXQg
PSBtX29iamVjdFN0b3JlQ2xlYW51cE1hcC5iZWdpbigpOyBpdCAhPSBtX29iamVjdFN0b3JlQ2xl
YW51cE1hcC5lbmQoKTsgKytpdCkKLSAgICAgICAgICAgIGl0LT5maXJzdC0+c2V0TWV0YWRhdGEo
aXQtPnNlY29uZCk7CisgICAgICAgICAgICBpdC0+a2V5LT5zZXRNZXRhZGF0YShpdC0+dmFsdWUp
OwogICAgIH0KICAgICBtX29iamVjdFN0b3JlQ2xlYW51cE1hcC5jbGVhcigpOwogICAgIGNsb3Nl
T3BlbkN1cnNvcnMoKTsKQEAgLTM3OCw3ICszNzgsNyBAQCBib29sIElEQlRyYW5zYWN0aW9uOjpk
aXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQogCiAgICAgLy8gQnJlYWsgcmVm
ZXJlbmNlIGN5Y2xlcy4KICAgICBmb3IgKElEQk9iamVjdFN0b3JlTWFwOjppdGVyYXRvciBpdCA9
IG1fb2JqZWN0U3RvcmVNYXAuYmVnaW4oKTsgaXQgIT0gbV9vYmplY3RTdG9yZU1hcC5lbmQoKTsg
KytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+dHJhbnNhY3Rpb25GaW5pc2hlZCgpOworICAgICAg
ICBpdC0+dmFsdWUtPnRyYW5zYWN0aW9uRmluaXNoZWQoKTsKICAgICBtX29iamVjdFN0b3JlTWFw
LmNsZWFyKCk7CiAKICAgICBWZWN0b3I8UmVmUHRyPEV2ZW50VGFyZ2V0PiA+IHRhcmdldHM7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Fic3RyYWN0RGF0
YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9BYnN0cmFjdERh
dGFiYXNlLmNwcAppbmRleCBjNzUzOWM2ZTExMmI5ZTFlNmJmMWUyY2QzZjAyYWUwY2JhMmJlYTI2
Li42MjkwN2UzZTFjZTZiMDkxNWMyYjAzNDc2MDllNTA3ZThjMDFjZWI2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Fic3RyYWN0RGF0YWJhc2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvQWJzdHJhY3REYXRhYmFzZS5j
cHAKQEAgLTI4Miw3ICsyODIsNyBAQCBib29sIEFic3RyYWN0RGF0YWJhc2U6OnBlcmZvcm1PcGVu
QW5kVmVyaWZ5KGJvb2wgc2hvdWxkU2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsCiAgICAgICAgIEd1
aWRWZXJzaW9uTWFwOjppdGVyYXRvciBlbnRyeSA9IGd1aWRUb1ZlcnNpb25NYXAoKS5maW5kKG1f
Z3VpZCk7CiAgICAgICAgIGlmIChlbnRyeSAhPSBndWlkVG9WZXJzaW9uTWFwKCkuZW5kKCkpIHsK
ICAgICAgICAgICAgIC8vIE1hcCBudWxsIHN0cmluZyB0byBlbXB0eSBzdHJpbmcgKHNlZSB1cGRh
dGVHdWlkVmVyc2lvbk1hcCgpKS4KLSAgICAgICAgICAgIGN1cnJlbnRWZXJzaW9uID0gZW50cnkt
PnNlY29uZC5pc051bGwoKSA/IGVtcHR5U3RyaW5nKCkgOiBlbnRyeS0+c2Vjb25kLmlzb2xhdGVk
Q29weSgpOworICAgICAgICAgICAgY3VycmVudFZlcnNpb24gPSBlbnRyeS0+dmFsdWUuaXNOdWxs
KCkgPyBlbXB0eVN0cmluZygpIDogZW50cnktPnZhbHVlLmlzb2xhdGVkQ29weSgpOwogICAgICAg
ICAgICAgTE9HKFN0b3JhZ2VBUEksICJDdXJyZW50IGNhY2hlZCB2ZXJzaW9uIGZvciBndWlkICVp
IGlzICVzIiwgbV9ndWlkLCBjdXJyZW50VmVyc2lvbi5hc2NpaSgpLmRhdGEoKSk7CiAKICNpZiBQ
TEFURk9STShDSFJPTUlVTSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNwcAppbmRleCA0NmQyODEyOTJkOWI3ZTQzN2I1ZGUw
ZjMyNWZhZjI0NWM4MTYzYWQ0Li41YmQ1ZTdiM2QyZTFjNDAyMTFiMDFhNjFkMGJmNzgzY2IzNTI2
MjI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFi
YXNlVHJhY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9E
YXRhYmFzZVRyYWNrZXIuY3BwCkBAIC0yNTAsNyArMjUwLDcgQEAgdm9pZCBEYXRhYmFzZVRyYWNr
ZXI6OmludGVycnVwdEFsbERhdGFiYXNlc0ZvckNvbnRleHQoY29uc3QgU2NyaXB0RXhlY3V0aW9u
Q29udGUKIAogICAgICAgICBEYXRhYmFzZU5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGRiTmFtZU1h
cEVuZEl0ID0gbmFtZU1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAoRGF0YWJhc2VOYW1lTWFwOjpj
b25zdF9pdGVyYXRvciBkYk5hbWVNYXBJdCA9IG5hbWVNYXAtPmJlZ2luKCk7IGRiTmFtZU1hcEl0
ICE9IGRiTmFtZU1hcEVuZEl0OyArK2RiTmFtZU1hcEl0KSB7Ci0gICAgICAgICAgICBEYXRhYmFz
ZVNldCogZGF0YWJhc2VTZXQgPSBkYk5hbWVNYXBJdC0+c2Vjb25kOworICAgICAgICAgICAgRGF0
YWJhc2VTZXQqIGRhdGFiYXNlU2V0ID0gZGJOYW1lTWFwSXQtPnZhbHVlOwogICAgICAgICAgICAg
RGF0YWJhc2VTZXQ6OmNvbnN0X2l0ZXJhdG9yIGRiU2V0RW5kSXQgPSBkYXRhYmFzZVNldC0+ZW5k
KCk7CiAgICAgICAgICAgICBmb3IgKERhdGFiYXNlU2V0Ojpjb25zdF9pdGVyYXRvciBkYlNldEl0
ID0gZGF0YWJhc2VTZXQtPmJlZ2luKCk7IGRiU2V0SXQgIT0gZGJTZXRFbmRJdDsgKytkYlNldEl0
KSB7CiAgICAgICAgICAgICAgICAgaWYgKCgqZGJTZXRJdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKSA9PSBjb250ZXh0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9PcmlnaW5Vc2FnZVJlY29yZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmRhdGFiYXNlL09yaWdpblVzYWdlUmVjb3JkLmNwcAppbmRleCA0NDM1NTBhNTczMDlmMzM2M2Yw
ZmNhOThmNTA4YzAyNzZkMGQ5OWRiLi4yYmY4YWY0YWUwMDk5MjgwYWNhMTc1Nzc0OGJhMjFjZjkw
YjcwMmRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL09y
aWdpblVzYWdlUmVjb3JkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFi
YXNlL09yaWdpblVzYWdlUmVjb3JkLmNwcApAQCAtOTMsNyArOTMsNyBAQCB1bnNpZ25lZCBsb25n
IGxvbmcgT3JpZ2luVXNhZ2VSZWNvcmQ6OmRpc2tVc2FnZSgpCiAgICAgSGFzaE1hcDxTdHJpbmcs
IERhdGFiYXNlRW50cnk+OjppdGVyYXRvciBpRGF0YWJhc2UgPSBtX2RhdGFiYXNlTWFwLmJlZ2lu
KCk7CiAgICAgSGFzaE1hcDxTdHJpbmcsIERhdGFiYXNlRW50cnk+OjppdGVyYXRvciBlbmREYXRh
YmFzZSA9IG1fZGF0YWJhc2VNYXAuZW5kKCk7CiAgICAgZm9yICg7IGlEYXRhYmFzZSAhPSBlbmRE
YXRhYmFzZTsgKytpRGF0YWJhc2UpCi0gICAgICAgIG1fY2FjaGVkRGlza1VzYWdlICs9IGlEYXRh
YmFzZS0+c2Vjb25kLnNpemU7CisgICAgICAgIG1fY2FjaGVkRGlza1VzYWdlICs9IGlEYXRhYmFz
ZS0+dmFsdWUuc2l6ZTsKIAogICAgIG1fY2FjaGVkRGlza1VzYWdlSXNWYWxpZCA9IHRydWU7CiAg
ICAgcmV0dXJuIG1fY2FjaGVkRGlza1VzYWdlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5j
cHAKaW5kZXggODM3YjhmYmQyMjA1YWRjOTc0ODZkZDNmMGU4ZjAyMDczODBmOGQ5Yi4uZGEzYTdl
ZTc1YjhjMDEyNTk0NjZlYzRhN2VhZGE5N2JkMWMyM2JmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQ29v
cmRpbmF0b3IuY3BwCkBAIC03OCw3ICs3OCw3IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb25Db29yZGlu
YXRvcjo6YWNxdWlyZUxvY2soU1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQogICAgICAgICBj
b29yZGluYXRpb25JbmZvSXRlcmF0b3IgPSBtX2Nvb3JkaW5hdGlvbkluZm9NYXAuYWRkKGRiSWRl
bnRpZmllciwgQ29vcmRpbmF0aW9uSW5mbygpKS5pdGVyYXRvcjsKICAgICB9CiAKLSAgICBDb29y
ZGluYXRpb25JbmZvJiBpbmZvID0gY29vcmRpbmF0aW9uSW5mb0l0ZXJhdG9yLT5zZWNvbmQ7Cisg
ICAgQ29vcmRpbmF0aW9uSW5mbyYgaW5mbyA9IGNvb3JkaW5hdGlvbkluZm9JdGVyYXRvci0+dmFs
dWU7CiAgICAgaW5mby5wZW5kaW5nVHJhbnNhY3Rpb25zLmFwcGVuZCh0cmFuc2FjdGlvbik7CiAg
ICAgcHJvY2Vzc1BlbmRpbmdUcmFuc2FjdGlvbnMoaW5mbyk7CiB9CkBAIC05Miw3ICs5Miw3IEBA
IHZvaWQgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6cmVsZWFzZUxvY2soU1FMVHJhbnNhY3Rp
b24qIHRyYW5zYWN0aW9uKQogCiAgICAgQ29vcmRpbmF0aW9uSW5mb01hcDo6aXRlcmF0b3IgY29v
cmRpbmF0aW9uSW5mb0l0ZXJhdG9yID0gbV9jb29yZGluYXRpb25JbmZvTWFwLmZpbmQoZGJJZGVu
dGlmaWVyKTsKICAgICBBU1NFUlQoY29vcmRpbmF0aW9uSW5mb0l0ZXJhdG9yICE9IG1fY29vcmRp
bmF0aW9uSW5mb01hcC5lbmQoKSk7Ci0gICAgQ29vcmRpbmF0aW9uSW5mbyYgaW5mbyA9IGNvb3Jk
aW5hdGlvbkluZm9JdGVyYXRvci0+c2Vjb25kOworICAgIENvb3JkaW5hdGlvbkluZm8mIGluZm8g
PSBjb29yZGluYXRpb25JbmZvSXRlcmF0b3ItPnZhbHVlOwogCiAgICAgaWYgKHRyYW5zYWN0aW9u
LT5pc1JlYWRPbmx5KCkpIHsKICAgICAgICAgQVNTRVJUKGluZm8uYWN0aXZlUmVhZFRyYW5zYWN0
aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbikpOwpAQCAtMTEwLDcgKzExMCw3IEBAIHZvaWQgU1FM
VHJhbnNhY3Rpb25Db29yZGluYXRvcjo6c2h1dGRvd24oKQogICAgIC8vIE5vdGlmeSBhbGwgdHJh
bnNhY3Rpb25zIGluIHByb2dyZXNzIHRoYXQgdGhlIGRhdGFiYXNlIHRocmVhZCBpcyBzaHV0dGlu
ZyBkb3duCiAgICAgZm9yIChDb29yZGluYXRpb25JbmZvTWFwOjppdGVyYXRvciBjb29yZGluYXRp
b25JbmZvSXRlcmF0b3IgPSBtX2Nvb3JkaW5hdGlvbkluZm9NYXAuYmVnaW4oKTsKICAgICAgICAg
IGNvb3JkaW5hdGlvbkluZm9JdGVyYXRvciAhPSBtX2Nvb3JkaW5hdGlvbkluZm9NYXAuZW5kKCk7
ICsrY29vcmRpbmF0aW9uSW5mb0l0ZXJhdG9yKSB7Ci0gICAgICAgIENvb3JkaW5hdGlvbkluZm8m
IGluZm8gPSBjb29yZGluYXRpb25JbmZvSXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgQ29vcmRp
bmF0aW9uSW5mbyYgaW5mbyA9IGNvb3JkaW5hdGlvbkluZm9JdGVyYXRvci0+dmFsdWU7CiAgICAg
ICAgIGlmIChpbmZvLmFjdGl2ZVdyaXRlVHJhbnNhY3Rpb24pCiAgICAgICAgICAgICBpbmZvLmFj
dGl2ZVdyaXRlVHJhbnNhY3Rpb24tPm5vdGlmeURhdGFiYXNlVGhyZWFkSXNTaHV0dGluZ0Rvd24o
KTsKICAgICAgICAgZm9yIChIYXNoU2V0PFJlZlB0cjxTUUxUcmFuc2FjdGlvbj4gPjo6aXRlcmF0
b3IgYWN0aXZlUmVhZFRyYW5zYWN0aW9uc0l0ZXJhdG9yID0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvY2hyb21pdW0vRGF0YWJhc2VUcmFja2VyQ2hyb21p
dW0uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9jaHJvbWl1bS9EYXRh
YmFzZVRyYWNrZXJDaHJvbWl1bS5jcHAKaW5kZXggMTE3ZmRiZWVkMzFkNjNiNjRiOTQxODAzYjhl
YWRjZDk5ODVjZWVmYy4uNjBhNzZjYTVjOTU5ODJiZWE5NGNlMDdiYWY2NmVkYTVkODI3YzVhYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9jaHJvbWl1bS9E
YXRhYmFzZVRyYWNrZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJkYXRhYmFzZS9jaHJvbWl1bS9EYXRhYmFzZVRyYWNrZXJDaHJvbWl1bS5jcHAKQEAgLTE4MCw3
ICsxODAsNyBAQCB2b2lkIERhdGFiYXNlVHJhY2tlcjo6aW50ZXJydXB0QWxsRGF0YWJhc2VzRm9y
Q29udGV4dChjb25zdCBTY3JpcHRFeGVjdXRpb25Db250ZQogCiAgICAgRGF0YWJhc2VOYW1lTWFw
Ojpjb25zdF9pdGVyYXRvciBkYk5hbWVNYXBFbmRJdCA9IG5hbWVNYXAtPmVuZCgpOwogICAgIGZv
ciAoRGF0YWJhc2VOYW1lTWFwOjpjb25zdF9pdGVyYXRvciBkYk5hbWVNYXBJdCA9IG5hbWVNYXAt
PmJlZ2luKCk7IGRiTmFtZU1hcEl0ICE9IGRiTmFtZU1hcEVuZEl0OyArK2RiTmFtZU1hcEl0KSB7
Ci0gICAgICAgIERhdGFiYXNlU2V0KiBkYXRhYmFzZVNldCA9IGRiTmFtZU1hcEl0LT5zZWNvbmQ7
CisgICAgICAgIERhdGFiYXNlU2V0KiBkYXRhYmFzZVNldCA9IGRiTmFtZU1hcEl0LT52YWx1ZTsK
ICAgICAgICAgRGF0YWJhc2VTZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGRhdGFiYXNlU2V0LT5l
bmQoKTsKICAgICAgICAgZm9yIChEYXRhYmFzZVNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBkYXRh
YmFzZVNldC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBpZiAoKCpp
dCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSA9PSBjb250ZXh0KQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9jaHJvbWl1bS9RdW90YVRyYWNrZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9jaHJvbWl1bS9RdW90YVRyYWNr
ZXIuY3BwCmluZGV4IDAzNDRjYThmNjU2YTY1ZDM3YjMwNGJiN2UzOTg4OWZjZTM2ZjhmNWQuLjM4
MmEzZmI4YjU3ODYyNTVjZWJhMGU3Zjg1OWIxNDJhZWMxZDk1MTkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvY2hyb21pdW0vUXVvdGFUcmFja2VyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL1F1b3RhVHJh
Y2tlci5jcHAKQEAgLTUzLDggKzUzLDggQEAgdm9pZCBRdW90YVRyYWNrZXI6OmdldERhdGFiYXNl
U2l6ZUFuZFNwYWNlQXZhaWxhYmxlVG9PcmlnaW4oCiAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tE
YXRhKG1fZGF0YUd1YXJkKTsKICAgICAgICAgQVNTRVJUKG1fZGF0YWJhc2VTaXplcy5jb250YWlu
cyhvcmlnaW5JZGVudGlmaWVyKSk7CiAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBTaXplTWFwPjo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2RhdGFiYXNlU2l6ZXMuZmluZChvcmlnaW5JZGVudGlmaWVy
KTsKLSAgICAgICAgQVNTRVJUKGl0LT5zZWNvbmQuY29udGFpbnMoZGF0YWJhc2VOYW1lKSk7Ci0g
ICAgICAgICpkYXRhYmFzZVNpemUgPSBpdC0+c2Vjb25kLmdldChkYXRhYmFzZU5hbWUpOworICAg
ICAgICBBU1NFUlQoaXQtPnZhbHVlLmNvbnRhaW5zKGRhdGFiYXNlTmFtZSkpOworICAgICAgICAq
ZGF0YWJhc2VTaXplID0gaXQtPnZhbHVlLmdldChkYXRhYmFzZU5hbWUpOwogCiAgICAgICAgIGlm
IChtX3NwYWNlQXZhaWxhYmxlVG9PcmlnaW5zLmNvbnRhaW5zKG9yaWdpbklkZW50aWZpZXIpKSB7
CiAgICAgICAgICAgICAqc3BhY2VBdmFpbGFibGUgPSBtX3NwYWNlQXZhaWxhYmxlVG9PcmlnaW5z
LmdldChvcmlnaW5JZGVudGlmaWVyKTsKQEAgLTcyLDcgKzcyLDcgQEAgdm9pZCBRdW90YVRyYWNr
ZXI6OnVwZGF0ZURhdGFiYXNlU2l6ZSgKIHsKICAgICBNdXRleExvY2tlciBsb2NrRGF0YShtX2Rh
dGFHdWFyZCk7CiAgICAgSGFzaE1hcDxTdHJpbmcsIFNpemVNYXA+OjppdGVyYXRvciBpdCA9IG1f
ZGF0YWJhc2VTaXplcy5hZGQob3JpZ2luSWRlbnRpZmllciwgU2l6ZU1hcCgpKS5pdGVyYXRvcjsK
LSAgICBpdC0+c2Vjb25kLnNldChkYXRhYmFzZU5hbWUsIGRhdGFiYXNlU2l6ZSk7CisgICAgaXQt
PnZhbHVlLnNldChkYXRhYmFzZU5hbWUsIGRhdGFiYXNlU2l6ZSk7CiB9CiAKIHZvaWQgUXVvdGFU
cmFja2VyOjp1cGRhdGVTcGFjZUF2YWlsYWJsZVRvT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2lu
SWRlbnRpZmllciwgdW5zaWduZWQgbG9uZyBsb25nIHNwYWNlQXZhaWxhYmxlKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldERlZmxhdGVGcmFt
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldERlZmxh
dGVGcmFtZXIuY3BwCmluZGV4IDc2YzA0MGQxYzkzNzJhYjcwZTIyNjQ2MGE4N2QyYTU1ZjJjODhm
ZjAuLjY3YmIzZGFhMTI5OTg4NDUxMTEwNjkwZTE5MmVhMGRhMDA3NjZjZDkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXREZWZsYXRlRnJhbWVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0RGVm
bGF0ZUZyYW1lci5jcHAKQEAgLTg3LDcgKzg3LDcgQEAgYm9vbCBXZWJTb2NrZXRFeHRlbnNpb25E
ZWZsYXRlRnJhbWU6OnByb2Nlc3NSZXNwb25zZShjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW4K
ICAgICBpbnQgd2luZG93Qml0cyA9IDE1OwogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpj
b25zdF9pdGVyYXRvciBwYXJhbWV0ZXIgPSBzZXJ2ZXJQYXJhbWV0ZXJzLmZpbmQoIm1heF93aW5k
b3dfYml0cyIpOwogICAgIGlmIChwYXJhbWV0ZXIgIT0gc2VydmVyUGFyYW1ldGVycy5lbmQoKSkg
ewotICAgICAgICB3aW5kb3dCaXRzID0gcGFyYW1ldGVyLT5zZWNvbmQudG9JbnQoKTsKKyAgICAg
ICAgd2luZG93Qml0cyA9IHBhcmFtZXRlci0+dmFsdWUudG9JbnQoKTsKICAgICAgICAgaWYgKHdp
bmRvd0JpdHMgPCA4IHx8IHdpbmRvd0JpdHMgPiAxNSkgewogICAgICAgICAgICAgbV9mYWlsdXJl
UmVhc29uID0gIlJlY2VpdmVkIGludmFsaWQgbWF4X3dpbmRvd19iaXRzIHBhcmFtZXRlciI7CiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC05OCw3ICs5OCw3IEBAIGJvb2wgV2ViU29ja2V0
RXh0ZW5zaW9uRGVmbGF0ZUZyYW1lOjpwcm9jZXNzUmVzcG9uc2UoY29uc3QgSGFzaE1hcDxTdHJp
bmcsIFN0cmluCiAgICAgV2ViU29ja2V0RGVmbGF0ZXI6OkNvbnRleHRUYWtlT3Zlck1vZGUgbW9k
ZSA9IFdlYlNvY2tldERlZmxhdGVyOjpUYWtlT3ZlckNvbnRleHQ7CiAgICAgcGFyYW1ldGVyID0g
c2VydmVyUGFyYW1ldGVycy5maW5kKCJub19jb250ZXh0X3Rha2VvdmVyIik7CiAgICAgaWYgKHBh
cmFtZXRlciAhPSBzZXJ2ZXJQYXJhbWV0ZXJzLmVuZCgpKSB7Ci0gICAgICAgIGlmICghcGFyYW1l
dGVyLT5zZWNvbmQuaXNOdWxsKCkpIHsKKyAgICAgICAgaWYgKCFwYXJhbWV0ZXItPnZhbHVlLmlz
TnVsbCgpKSB7CiAgICAgICAgICAgICBtX2ZhaWx1cmVSZWFzb24gPSAiUmVjZWl2ZWQgaW52YWxp
ZCBub19jb250ZXh0X3Rha2VvdmVyIHBhcmFtZXRlciI7CiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29j
a2V0cy9XZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyLmNwcAppbmRleCA3
YzU5MmFkMWJmMjgwNjhjODMwMzM2OWI2MDY1NjczYjZiYTdlOTc0Li41NjA5ZjY1ODFhYWI5NzQy
YjBmZDg1ZmYxNWQxNWZhNTBlZDI5ZjViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0RXh0ZW5zaW9uRGlzcGF0Y2hlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNo
ZXIuY3BwCkBAIC0xODEsMTAgKzE4MSwxMCBAQCB2b2lkIFdlYlNvY2tldEV4dGVuc2lvbkRpc3Bh
dGNoZXI6OmFwcGVuZEFjY2VwdGVkRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZXh0ZW5zaQogICAg
IC8vIEZJWE1FOiBTaG91bGQgdXNlIExpc3RIYXNoU2V0IHRvIGtlZXAgdGhlIG9yZGVyIG9mIHRo
ZSBwYXJhbWV0ZXJzLgogICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0
ZXJhdG9yIGl0ZXJhdG9yID0gZXh0ZW5zaW9uUGFyYW1ldGVycy5iZWdpbigpOyBpdGVyYXRvciAh
PSBleHRlbnNpb25QYXJhbWV0ZXJzLmVuZCgpOyArK2l0ZXJhdG9yKSB7CiAgICAgICAgIG1fYWNj
ZXB0ZWRFeHRlbnNpb25zQnVpbGRlci5hcHBlbmQoIjsgIik7Ci0gICAgICAgIG1fYWNjZXB0ZWRF
eHRlbnNpb25zQnVpbGRlci5hcHBlbmQoaXRlcmF0b3ItPmZpcnN0KTsKLSAgICAgICAgaWYgKCFp
dGVyYXRvci0+c2Vjb25kLmlzTnVsbCgpKSB7CisgICAgICAgIG1fYWNjZXB0ZWRFeHRlbnNpb25z
QnVpbGRlci5hcHBlbmQoaXRlcmF0b3ItPmtleSk7CisgICAgICAgIGlmICghaXRlcmF0b3ItPnZh
bHVlLmlzTnVsbCgpKSB7CiAgICAgICAgICAgICBtX2FjY2VwdGVkRXh0ZW5zaW9uc0J1aWxkZXIu
YXBwZW5kKCI9Iik7Ci0gICAgICAgICAgICBtX2FjY2VwdGVkRXh0ZW5zaW9uc0J1aWxkZXIuYXBw
ZW5kKGl0ZXJhdG9yLT5zZWNvbmQpOworICAgICAgICAgICAgbV9hY2NlcHRlZEV4dGVuc2lvbnNC
dWlsZGVyLmFwcGVuZChpdGVyYXRvci0+dmFsdWUpOwogICAgICAgICB9CiAgICAgfQogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKaW5kZXggNmMw
OGJlMjFmMGUzMTY3MTI3YWIzZjJiNGI5NTdmOWI0ZWJjZjgyMy4uOGUzMmViNTAxMDEzM2Y5ZWU4
NzNlNzk1OGNlNGIzYjZjN2JlYTBlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FYT2JqZWN0Q2FjaGUuY3BwCkBAIC05NCw3ICs5NCw3IEBAIEFYT2JqZWN0Q2FjaGU6On5B
WE9iamVjdENhY2hlKCkKIHsKICAgICBIYXNoTWFwPEFYSUQsIFJlZlB0cjxBY2Nlc3NpYmlsaXR5
T2JqZWN0PiA+OjppdGVyYXRvciBlbmQgPSBtX29iamVjdHMuZW5kKCk7CiAgICAgZm9yIChIYXNo
TWFwPEFYSUQsIFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiA+OjppdGVyYXRvciBpdCA9IG1f
b2JqZWN0cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgQWNjZXNzaWJpbGl0
eU9iamVjdCogb2JqID0gKCppdCkuc2Vjb25kLmdldCgpOworICAgICAgICBBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBvYmogPSAoKml0KS52YWx1ZS5nZXQoKTsKICAgICAgICAgZGV0YWNoV3JhcHBlcihv
YmopOwogICAgICAgICBvYmotPmRldGFjaCgpOwogICAgICAgICByZW1vdmVBWElEKG9iaik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0RPTU9iamVjdENhY2hl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvRE9NT2JqZWN0Q2FjaGUuY3Bw
CmluZGV4IDJlN2YxMDZlNzllMzFjNzMxNTRhYjljZmFhMTlhNTg5ZTlkZTdkZDUuLmRkN2QwNDk3
MThjODEyMmYyNGIzOGRiODgzZTViNmI2NGUyZWMwNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2dvYmplY3QvRE9NT2JqZWN0Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2dvYmplY3QvRE9NT2JqZWN0Q2FjaGUuY3BwCkBAIC03NCw3ICs3NCw3IEBA
IHZvaWQgRE9NT2JqZWN0Q2FjaGU6OmNsZWFyQnlGcmFtZShXZWJDb3JlOjpGcmFtZSogZnJhbWUp
CiAgICAgLy8gaXRlcmF0aW5nIHRoZSBjYWNoZSBpdHNlbGYuCiAgICAgRE9NT2JqZWN0TWFwOjpp
dGVyYXRvciBlbmQgPSBkb21PYmplY3RzKCkuZW5kKCk7CiAgICAgZm9yIChET01PYmplY3RNYXA6
Oml0ZXJhdG9yIGl0ZXIgPSBkb21PYmplY3RzKCkuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRl
cikgewotICAgICAgICBET01PYmplY3RDYWNoZURhdGEqIGRhdGEgPSBpdGVyLT5zZWNvbmQ7Cisg
ICAgICAgIERPTU9iamVjdENhY2hlRGF0YSogZGF0YSA9IGl0ZXItPnZhbHVlOwogICAgICAgICBB
U1NFUlQoZGF0YSk7CiAgICAgICAgIGlmICgoIWZyYW1lIHx8IGRhdGEtPmZyYW1lID09IGZyYW1l
KSAmJiBkYXRhLT50aW1lc1JldHVybmVkKQogICAgICAgICAgICAgdG9VbnJlZi5hcHBlbmQoZGF0
YSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01PYmplY3RIYXNo
VGFibGVNYXAuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTU9iamVjdEhhc2hUYWJs
ZU1hcC5oCmluZGV4IDY0ODI4ZDY5ODhmN2U0M2IzZTlhNDYzNjkwOGNkMjEyNTQ3YTJmZmMuLjc1
M2MwNGQyZmM1NzcyZTA5NTlkY2VmNWFjNjFiYTMwYzk2ZTE3OGYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTU9iamVjdEhhc2hUYWJsZU1hcC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTU9iamVjdEhhc2hUYWJsZU1hcC5oCkBAIC0zOSwxNSAr
MzksMTUgQEAgcHVibGljOgogICAgIH5ET01PYmplY3RIYXNoVGFibGVNYXAoKQogICAgIHsKICAg
ICAgICAgZm9yIChIYXNoTWFwPGNvbnN0IEpTQzo6SGFzaFRhYmxlKiwgSlNDOjpIYXNoVGFibGU+
OjppdGVyYXRvciBpdGVyID0gbV9tYXAuYmVnaW4oKTsgaXRlciAhPSBtX21hcC5lbmQoKTsgKytp
dGVyKQotICAgICAgICAgICAgaXRlci0+c2Vjb25kLmRlbGV0ZVRhYmxlKCk7CisgICAgICAgICAg
ICBpdGVyLT52YWx1ZS5kZWxldGVUYWJsZSgpOwogICAgIH0KIAogICAgIGNvbnN0IEpTQzo6SGFz
aFRhYmxlKiBnZXQoY29uc3QgSlNDOjpIYXNoVGFibGUqIHN0YXRpY1RhYmxlKQogICAgIHsKICAg
ICAgICAgSGFzaE1hcDxjb25zdCBKU0M6Okhhc2hUYWJsZSosIEpTQzo6SGFzaFRhYmxlPjo6aXRl
cmF0b3IgaXRlciA9IG1fbWFwLmZpbmQoc3RhdGljVGFibGUpOwogICAgICAgICBpZiAoaXRlciAh
PSBtX21hcC5lbmQoKSkKLSAgICAgICAgICAgIHJldHVybiAmaXRlci0+c2Vjb25kOwotICAgICAg
ICByZXR1cm4gJm1fbWFwLnNldChzdGF0aWNUYWJsZSwgc3RhdGljVGFibGUtPmNvcHkoKSkuaXRl
cmF0b3ItPnNlY29uZDsKKyAgICAgICAgICAgIHJldHVybiAmaXRlci0+dmFsdWU7CisgICAgICAg
IHJldHVybiAmbV9tYXAuc2V0KHN0YXRpY1RhYmxlLCBzdGF0aWNUYWJsZS0+Y29weSgpKS5pdGVy
YXRvci0+dmFsdWU7CiAgICAgfQogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NQmluZGluZy5jcHAKaW5kZXggNjU1MWQ2Njg3ZGZmODI4ZTk1NGJjMmNmMWY0YWE2
YzhmYTI0NjUyNS4uMTNjOTNmNmE5Yjg0YThhZjVkNjEwZGQ1NDk5NDYxOGVmODQ1NGY2YyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCkBAIC0yNTksNyAr
MjU5LDcgQEAgU3RydWN0dXJlKiBjYWNoZURPTVN0cnVjdHVyZShKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHUKIHsKICAgICBKU0RPTVN0cnVjdHVyZU1h
cCYgc3RydWN0dXJlcyA9IGdsb2JhbE9iamVjdC0+c3RydWN0dXJlcygpOwogICAgIEFTU0VSVCgh
c3RydWN0dXJlcy5jb250YWlucyhjbGFzc0luZm8pKTsKLSAgICByZXR1cm4gc3RydWN0dXJlcy5z
ZXQoY2xhc3NJbmZvLCBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPihnbG9iYWxPYmplY3QtPmdsb2Jh
bERhdGEoKSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpKS5pdGVyYXRvci0+c2Vjb25kLmdldCgp
OworICAgIHJldHVybiBzdHJ1Y3R1cmVzLnNldChjbGFzc0luZm8sIFdyaXRlQmFycmllcjxTdHJ1
Y3R1cmU+KGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVy
ZSkpLml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3Qu
Y3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwCmlu
ZGV4IDM2MTA0ODA4YmI2MDllNTdiMDQ4MTE4NTJlODk1ZGFkNzEzMGE0YWUuLmQzYzQyOWE1MDhk
OTEwZGU3YmQyZWViZWQ2N2Q3NzVjMjVlYzdiMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAKQEAgLTg4LDExICs4OCwxMSBAQCB2b2lk
IEpTRE9NR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCiAKICAgICBKU0RPTVN0cnVjdHVyZU1hcDo6aXRlcmF0b3IgZW5kID0gdGhp
c09iamVjdC0+c3RydWN0dXJlcygpLmVuZCgpOwogICAgIGZvciAoSlNET01TdHJ1Y3R1cmVNYXA6
Oml0ZXJhdG9yIGl0ID0gdGhpc09iamVjdC0+c3RydWN0dXJlcygpLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkKLSAgICAgICAgdmlzaXRvci5hcHBlbmQoJml0LT5zZWNvbmQpOworICAgICAgICB2
aXNpdG9yLmFwcGVuZCgmaXQtPnZhbHVlKTsKIAogICAgIEpTRE9NQ29uc3RydWN0b3JNYXA6Oml0
ZXJhdG9yIGVuZDIgPSB0aGlzT2JqZWN0LT5jb25zdHJ1Y3RvcnMoKS5lbmQoKTsKICAgICBmb3Ig
KEpTRE9NQ29uc3RydWN0b3JNYXA6Oml0ZXJhdG9yIGl0MiA9IHRoaXNPYmplY3QtPmNvbnN0cnVj
dG9ycygpLmJlZ2luKCk7IGl0MiAhPSBlbmQyOyArK2l0MikKLSAgICAgICAgdmlzaXRvci5hcHBl
bmQoJml0Mi0+c2Vjb25kKTsKKyAgICAgICAgdmlzaXRvci5hcHBlbmQoJml0Mi0+dmFsdWUpOwog
fQogCiB2b2lkIEpTRE9NR2xvYmFsT2JqZWN0OjpzZXRDdXJyZW50RXZlbnQoRXZlbnQqIGN1cnJl
bnRFdmVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xv
YmFsT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVj
dC5oCmluZGV4IGJkYWI1NjhmMDI0NTNiMTQ0ZjIzZDQ3Y2E0N2U5ZDQ2OTNmNTVjNjMuLjljYzE3
MWJjMjg4NzRhODM5ZWY4MzNkMjE0ZjZmOGY1MTg5ZjQ3NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuaApAQCAtOTMsNyArOTMsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEpTQzo6SlNPYmplY3QqIGNvbnN0cnVjdG9yID0gQ29u
c3RydWN0b3JDbGFzczo6Y3JlYXRlKGV4ZWMsIENvbnN0cnVjdG9yQ2xhc3M6OmNyZWF0ZVN0cnVj
dHVyZShleGVjLT5nbG9iYWxEYXRhKCksIGNvbnN0X2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihn
bG9iYWxPYmplY3QpLCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSwgY29uc3RfY2Fz
dDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOwogICAgICAgICBBU1NFUlQoIWNv
bnN0X2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpLT5jb25zdHJ1Y3RvcnMo
KS5jb250YWlucygmQ29uc3RydWN0b3JDbGFzczo6c19pbmZvKSk7CiAgICAgICAgIEpTQzo6V3Jp
dGVCYXJyaWVyPEpTQzo6SlNPYmplY3Q+IHRlbXA7Ci0gICAgICAgIGNvbnN0X2Nhc3Q8SlNET01H
bG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpLT5jb25zdHJ1Y3RvcnMoKS5hZGQoJkNvbnN0cnVj
dG9yQ2xhc3M6OnNfaW5mbywgdGVtcCkuaXRlcmF0b3ItPnNlY29uZC5zZXQoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBnbG9iYWxPYmplY3QsIGNvbnN0cnVjdG9yKTsKKyAgICAgICAgY29uc3RfY2FzdDxK
U0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCktPmNvbnN0cnVjdG9ycygpLmFkZCgmQ29u
c3RydWN0b3JDbGFzczo6c19pbmZvLCB0ZW1wKS5pdGVyYXRvci0+dmFsdWUuc2V0KGV4ZWMtPmds
b2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LCBjb25zdHJ1Y3Rvcik7CiAgICAgICAgIHJldHVybiBj
b25zdHJ1Y3RvcjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCmluZGV4IGZmMGFlZWZiNTBhNjA4YzkyMTAzM2Q5
ODc5MzNjZGM2NWZjZmQyYzkuLmVkNzQzY2M5ZTllYzUxYzBkNTMxNjEwOTRmMzNkOWM5MmFkYjEw
ZDYgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1BhZ2VTY3JpcHREZWJ1
Z1NlcnZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUGFnZVNjcmlwdERl
YnVnU2VydmVyLmNwcApAQCAtODIsNyArODIsNyBAQCB2b2lkIFBhZ2VTY3JpcHREZWJ1Z1NlcnZl
cjo6YWRkTGlzdGVuZXIoU2NyaXB0RGVidWdMaXN0ZW5lciogbGlzdGVuZXIsIFBhZ2UqIHBhZwog
ICAgIEFTU0VSVF9BUkcobGlzdGVuZXIsIGxpc3RlbmVyKTsKICAgICBBU1NFUlRfQVJHKHBhZ2Us
IHBhZ2UpOwogCi0gICAgT3duUHRyPExpc3RlbmVyU2V0PiYgbGlzdGVuZXJzID0gbV9wYWdlTGlz
dGVuZXJzTWFwLmFkZChwYWdlLCBudWxscHRyKS5pdGVyYXRvci0+c2Vjb25kOworICAgIE93blB0
cjxMaXN0ZW5lclNldD4mIGxpc3RlbmVycyA9IG1fcGFnZUxpc3RlbmVyc01hcC5hZGQocGFnZSwg
bnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghbGlzdGVuZXJzKQogICAgICAgICBs
aXN0ZW5lcnMgPSBhZG9wdFB0cihuZXcgTGlzdGVuZXJTZXQpOwogICAgIGxpc3RlbmVycy0+YWRk
KGxpc3RlbmVyKTsKQEAgLTEwMCw3ICsxMDAsNyBAQCB2b2lkIFBhZ2VTY3JpcHREZWJ1Z1NlcnZl
cjo6cmVtb3ZlTGlzdGVuZXIoU2NyaXB0RGVidWdMaXN0ZW5lciogbGlzdGVuZXIsIFBhZ2UqCiAg
ICAgaWYgKGl0ID09IG1fcGFnZUxpc3RlbmVyc01hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgTGlzdGVuZXJTZXQqIGxpc3RlbmVycyA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgTGlz
dGVuZXJTZXQqIGxpc3RlbmVycyA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICBsaXN0ZW5lcnMtPnJl
bW92ZShsaXN0ZW5lcik7CiAgICAgaWYgKGxpc3RlbmVycy0+aXNFbXB0eSgpKSB7CiAgICAgICAg
IG1fcGFnZUxpc3RlbmVyc01hcC5yZW1vdmUoaXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1NjcmlwdENhY2hlZEZyYW1lRGF0YS5jcHAKaW5kZXggZGVmNzljZjJjMTZi
YTc2ZTUxYmQ4ZjAxZmYwNzAwOWZlZDIwY2M2ZS4uYzYyNDg3ZTgwNWZkY2MxYjcwMWM1YmJmNWQ5
Njk0Y2JmYmQ3NDRkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2Ny
aXB0Q2FjaGVkRnJhbWVEYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
Y3JpcHRDYWNoZWRGcmFtZURhdGEuY3BwCkBAIC01Myw4ICs1Myw4IEBAIFNjcmlwdENhY2hlZEZy
YW1lRGF0YTo6U2NyaXB0Q2FjaGVkRnJhbWVEYXRhKEZyYW1lKiBmcmFtZSkKIAogICAgIFNjcmlw
dENvbnRyb2xsZXI6OlNoZWxsTWFwOjppdGVyYXRvciB3aW5kb3dTaGVsbHNFbmQgPSB3aW5kb3dT
aGVsbHMuZW5kKCk7CiAgICAgZm9yIChTY3JpcHRDb250cm9sbGVyOjpTaGVsbE1hcDo6aXRlcmF0
b3IgaXRlciA9IHdpbmRvd1NoZWxscy5iZWdpbigpOyBpdGVyICE9IHdpbmRvd1NoZWxsc0VuZDsg
KytpdGVyKSB7Ci0gICAgICAgIEpTRE9NV2luZG93KiB3aW5kb3cgPSBpdGVyLT5zZWNvbmQtPndp
bmRvdygpOwotICAgICAgICBtX3dpbmRvd3MuYWRkKGl0ZXItPmZpcnN0LmdldCgpLCBTdHJvbmc8
SlNET01XaW5kb3c+KHdpbmRvdy0+Z2xvYmFsRGF0YSgpLCB3aW5kb3cpKTsKKyAgICAgICAgSlNE
T01XaW5kb3cqIHdpbmRvdyA9IGl0ZXItPnZhbHVlLT53aW5kb3coKTsKKyAgICAgICAgbV93aW5k
b3dzLmFkZChpdGVyLT5rZXkuZ2V0KCksIFN0cm9uZzxKU0RPTVdpbmRvdz4od2luZG93LT5nbG9i
YWxEYXRhKCksIHdpbmRvdykpOwogICAgIH0KIAogICAgIHNjcmlwdENvbnRyb2xsZXItPmF0dGFj
aERlYnVnZ2VyKDApOwpAQCAtNzQsOCArNzQsOCBAQCB2b2lkIFNjcmlwdENhY2hlZEZyYW1lRGF0
YTo6cmVzdG9yZShGcmFtZSogZnJhbWUpCiAKICAgICBTY3JpcHRDb250cm9sbGVyOjpTaGVsbE1h
cDo6aXRlcmF0b3Igd2luZG93U2hlbGxzRW5kID0gd2luZG93U2hlbGxzLmVuZCgpOwogICAgIGZv
ciAoU2NyaXB0Q29udHJvbGxlcjo6U2hlbGxNYXA6Oml0ZXJhdG9yIGl0ZXIgPSB3aW5kb3dTaGVs
bHMuYmVnaW4oKTsgaXRlciAhPSB3aW5kb3dTaGVsbHNFbmQ7ICsraXRlcikgewotICAgICAgICBE
T01XcmFwcGVyV29ybGQqIHdvcmxkID0gaXRlci0+Zmlyc3QuZ2V0KCk7Ci0gICAgICAgIEpTRE9N
V2luZG93U2hlbGwqIHdpbmRvd1NoZWxsID0gaXRlci0+c2Vjb25kLmdldCgpOworICAgICAgICBE
T01XcmFwcGVyV29ybGQqIHdvcmxkID0gaXRlci0+a2V5LmdldCgpOworICAgICAgICBKU0RPTVdp
bmRvd1NoZWxsKiB3aW5kb3dTaGVsbCA9IGl0ZXItPnZhbHVlLmdldCgpOwogCiAgICAgICAgIGlm
IChKU0RPTVdpbmRvdyogd2luZG93ID0gbV93aW5kb3dzLmdldCh3b3JsZCkuZ2V0KCkpCiAgICAg
ICAgICAgICB3aW5kb3dTaGVsbC0+c2V0V2luZG93KHdpbmRvdy0+Z2xvYmFsRGF0YSgpLCB3aW5k
b3cpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJv
bGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNw
cAppbmRleCBkYTkzOTg0ZWQ3NmMwNDgyMDM1ZDc0OThhZTdmMDI3MWY5Njc5ZjgzLi5iOWVhZjQ3
NzY5YmQ2MjdiNGViMWY5MzY2NjZmZDliOWIzMGZjZjY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcApAQCAtOTYsNyArOTYsNyBAQCBTY3Jp
cHRDb250cm9sbGVyOjp+U2NyaXB0Q29udHJvbGxlcigpCiAgICAgLy8gSXQncyBsaWtlbHkgdGhh
dCBkZXN0cm95aW5nIG1fd2luZG93U2hlbGxzIHdpbGwgY3JlYXRlIGEgbG90IG9mIGdhcmJhZ2Uu
CiAgICAgaWYgKCFtX3dpbmRvd1NoZWxscy5pc0VtcHR5KCkpIHsKICAgICAgICAgd2hpbGUgKCFt
X3dpbmRvd1NoZWxscy5pc0VtcHR5KCkpCi0gICAgICAgICAgICBkZXN0cm95V2luZG93U2hlbGwo
bV93aW5kb3dTaGVsbHMuYmVnaW4oKS0+Zmlyc3QuZ2V0KCkpOworICAgICAgICAgICAgZGVzdHJv
eVdpbmRvd1NoZWxsKG1fd2luZG93U2hlbGxzLmJlZ2luKCktPmtleS5nZXQoKSk7CiAgICAgICAg
IGdjQ29udHJvbGxlcigpLmdhcmJhZ2VDb2xsZWN0U29vbigpOwogICAgIH0KIH0KQEAgLTE4Myw3
ICsxODMsNyBAQCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmNsZWFyV2luZG93U2hlbGwoRE9NV2lu
ZG93KiBuZXdET01XaW5kb3csIGJvb2wgZ29pbmdJbnRvUAogICAgIEpTTG9ja0hvbGRlciBsb2Nr
KEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogCiAgICAgZm9yIChTaGVs
bE1hcDo6aXRlcmF0b3IgaXRlciA9IG1fd2luZG93U2hlbGxzLmJlZ2luKCk7IGl0ZXIgIT0gbV93
aW5kb3dTaGVsbHMuZW5kKCk7ICsraXRlcikgewotICAgICAgICBKU0RPTVdpbmRvd1NoZWxsKiB3
aW5kb3dTaGVsbCA9IGl0ZXItPnNlY29uZC5nZXQoKTsKKyAgICAgICAgSlNET01XaW5kb3dTaGVs
bCogd2luZG93U2hlbGwgPSBpdGVyLT52YWx1ZS5nZXQoKTsKIAogICAgICAgICBpZiAod2luZG93
U2hlbGwtPndpbmRvdygpLT5pbXBsKCkgPT0gbmV3RE9NV2luZG93KQogICAgICAgICAgICAgY29u
dGludWU7CkBAIC0yNzYsNyArMjc2LDcgQEAgYm9vbCBTY3JpcHRDb250cm9sbGVyOjpjYW5BY2Nl
c3NGcm9tQ3VycmVudE9yaWdpbihGcmFtZSAqZnJhbWUpCiB2b2lkIFNjcmlwdENvbnRyb2xsZXI6
OmF0dGFjaERlYnVnZ2VyKEpTQzo6RGVidWdnZXIqIGRlYnVnZ2VyKQogewogICAgIGZvciAoU2hl
bGxNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3dpbmRvd1NoZWxscy5iZWdpbigpOyBpdGVyICE9IG1f
d2luZG93U2hlbGxzLmVuZCgpOyArK2l0ZXIpCi0gICAgICAgIGF0dGFjaERlYnVnZ2VyKGl0ZXIt
PnNlY29uZC5nZXQoKSwgZGVidWdnZXIpOworICAgICAgICBhdHRhY2hEZWJ1Z2dlcihpdGVyLT52
YWx1ZS5nZXQoKSwgZGVidWdnZXIpOwogfQogCiB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmF0dGFj
aERlYnVnZ2VyKEpTRE9NV2luZG93U2hlbGwqIHNoZWxsLCBKU0M6OkRlYnVnZ2VyKiBkZWJ1Z2dl
cikKQEAgLTI5Nyw4ICsyOTcsOCBAQCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OnVwZGF0ZURvY3Vt
ZW50KCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgZm9yIChTaGVsbE1hcDo6aXRlcmF0b3IgaXRl
ciA9IG1fd2luZG93U2hlbGxzLmJlZ2luKCk7IGl0ZXIgIT0gbV93aW5kb3dTaGVsbHMuZW5kKCk7
ICsraXRlcikgewotICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhpdGVyLT5maXJzdC0+Z2xvYmFs
RGF0YSgpKTsKLSAgICAgICAgaXRlci0+c2Vjb25kLT53aW5kb3coKS0+dXBkYXRlRG9jdW1lbnQo
KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soaXRlci0+a2V5LT5nbG9iYWxEYXRhKCkpOwor
ICAgICAgICBpdGVyLT52YWx1ZS0+d2luZG93KCktPnVwZGF0ZURvY3VtZW50KCk7CiAgICAgfQog
fQogCkBAIC0zMzUsNyArMzM1LDcgQEAgUGFzc1JlZlB0cjxCaW5kaW5nczo6Um9vdE9iamVjdD4g
U2NyaXB0Q29udHJvbGxlcjo6Y3JlYXRlUm9vdE9iamVjdCh2b2lkKiBuYXRpdmUKIHsKICAgICBS
b290T2JqZWN0TWFwOjppdGVyYXRvciBpdCA9IG1fcm9vdE9iamVjdHMuZmluZChuYXRpdmVIYW5k
bGUpOwogICAgIGlmIChpdCAhPSBtX3Jvb3RPYmplY3RzLmVuZCgpKQotICAgICAgICByZXR1cm4g
aXQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKIAogICAgIFJlZlB0cjxCaW5k
aW5nczo6Um9vdE9iamVjdD4gcm9vdE9iamVjdCA9IEJpbmRpbmdzOjpSb290T2JqZWN0OjpjcmVh
dGUobmF0aXZlSGFuZGxlLCBnbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSkpOwogCkBAIC0zNTEs
OCArMzUxLDggQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpzZXRDYXB0dXJlQ2FsbFN0YWNrRm9y
VW5jYXVnaHRFeGNlcHRpb25zKGJvb2wpCiB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmNvbGxlY3RJ
c29sYXRlZENvbnRleHRzKFZlY3RvcjxzdGQ6OnBhaXI8SlNDOjpFeGVjU3RhdGUqLCBTZWN1cml0
eU9yaWdpbio+ID4mIHJlc3VsdCkKIHsKICAgICBmb3IgKFNoZWxsTWFwOjppdGVyYXRvciBpdGVy
ID0gbV93aW5kb3dTaGVsbHMuYmVnaW4oKTsgaXRlciAhPSBtX3dpbmRvd1NoZWxscy5lbmQoKTsg
KytpdGVyKSB7Ci0gICAgICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gaXRlci0+c2Vjb25kLT53
aW5kb3coKS0+Z2xvYmFsRXhlYygpOwotICAgICAgICBTZWN1cml0eU9yaWdpbiogb3JpZ2luID0g
aXRlci0+c2Vjb25kLT53aW5kb3coKS0+aW1wbCgpLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdp
bigpOworICAgICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IGl0ZXItPnZhbHVlLT53aW5kb3co
KS0+Z2xvYmFsRXhlYygpOworICAgICAgICBTZWN1cml0eU9yaWdpbiogb3JpZ2luID0gaXRlci0+
dmFsdWUtPndpbmRvdygpLT5pbXBsKCktPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCk7CiAg
ICAgICAgIHJlc3VsdC5hcHBlbmQoc3RkOjpwYWlyPFNjcmlwdFN0YXRlKiwgU2VjdXJpdHlPcmln
aW4qPihleGVjLCBvcmlnaW4pKTsKICAgICB9CiB9CkBAIC00NDAsNyArNDQwLDcgQEAgdm9pZCBT
Y3JpcHRDb250cm9sbGVyOjpjbGVhbnVwU2NyaXB0T2JqZWN0c0ZvclBsdWdpbih2b2lkKiBuYXRp
dmVIYW5kbGUpCiAgICAgaWYgKGl0ID09IG1fcm9vdE9iamVjdHMuZW5kKCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGl0LT5zZWNvbmQtPmludmFsaWRhdGUoKTsKKyAgICBpdC0+dmFsdWUtPmlu
dmFsaWRhdGUoKTsKICAgICBtX3Jvb3RPYmplY3RzLnJlbW92ZShpdCk7CiB9CiAKQEAgLTQ1MCw3
ICs0NTAsNyBAQCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmNsZWFyU2NyaXB0T2JqZWN0cygpCiAK
ICAgICBSb290T2JqZWN0TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3Jvb3RPYmplY3RzLmVu
ZCgpOwogICAgIGZvciAoUm9vdE9iamVjdE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Jvb3RP
YmplY3RzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+aW52
YWxpZGF0ZSgpOworICAgICAgICBpdC0+dmFsdWUtPmludmFsaWRhdGUoKTsKIAogICAgIG1fcm9v
dE9iamVjdHMuY2xlYXIoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2NyaXB0Q29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0
Q29udHJvbGxlci5oCmluZGV4IGY3NmZkZThmYzcyZjY4MDVlZjQ4YzAzYWZjMWQwNmEzYTE1NGNh
ODcuLmYzZGE1M2UwNTNkZjBmNmFmOTY3MTZmYzBjMDJiMmI5NWNjMzU0ZmEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmgKQEAgLTc0LDEyICs3NCwx
MiBAQCBwdWJsaWM6CiAgICAgSlNET01XaW5kb3dTaGVsbCogd2luZG93U2hlbGwoRE9NV3JhcHBl
cldvcmxkKiB3b3JsZCkKICAgICB7CiAgICAgICAgIFNoZWxsTWFwOjppdGVyYXRvciBpdGVyID0g
bV93aW5kb3dTaGVsbHMuZmluZCh3b3JsZCk7Ci0gICAgICAgIHJldHVybiAoaXRlciAhPSBtX3dp
bmRvd1NoZWxscy5lbmQoKSkgPyBpdGVyLT5zZWNvbmQuZ2V0KCkgOiBpbml0U2NyaXB0KHdvcmxk
KTsKKyAgICAgICAgcmV0dXJuIChpdGVyICE9IG1fd2luZG93U2hlbGxzLmVuZCgpKSA/IGl0ZXIt
PnZhbHVlLmdldCgpIDogaW5pdFNjcmlwdCh3b3JsZCk7CiAgICAgfQogICAgIEpTRE9NV2luZG93
U2hlbGwqIGV4aXN0aW5nV2luZG93U2hlbGwoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCkgY29uc3QK
ICAgICB7CiAgICAgICAgIFNoZWxsTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbV93aW5kb3dT
aGVsbHMuZmluZCh3b3JsZCk7Ci0gICAgICAgIHJldHVybiAoaXRlciAhPSBtX3dpbmRvd1NoZWxs
cy5lbmQoKSkgPyBpdGVyLT5zZWNvbmQuZ2V0KCkgOiAwOworICAgICAgICByZXR1cm4gKGl0ZXIg
IT0gbV93aW5kb3dTaGVsbHMuZW5kKCkpID8gaXRlci0+dmFsdWUuZ2V0KCkgOiAwOwogICAgIH0K
ICAgICBKU0RPTVdpbmRvdyogZ2xvYmFsT2JqZWN0KERPTVdyYXBwZXJXb3JsZCogd29ybGQpCiAg
ICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdT
ZXJ2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIu
Y3BwCmluZGV4IGJiY2Q1NDI5OTY1NzBmYTEzNzk5YTRlNWE4Mjk1MDMwZGU1MGEwYTEuLmI0MDEz
OTI0YmU4MTY3MmNjYTE0YzdmODViODFiY2RiMjZhNjJjOTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHAKQEAgLTc1LDExICs3NSwxMSBA
QCBTdHJpbmcgU2NyaXB0RGVidWdTZXJ2ZXI6OnNldEJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBz
b3VyY2VJRCwgY29uc3QgU2NyaXB0QnJlYQogICAgIFNvdXJjZUlkVG9CcmVha3BvaW50c01hcDo6
aXRlcmF0b3IgaXQgPSBtX3NvdXJjZUlkVG9CcmVha3BvaW50cy5maW5kKHNvdXJjZUlEVmFsdWUp
OwogICAgIGlmIChpdCA9PSBtX3NvdXJjZUlkVG9CcmVha3BvaW50cy5lbmQoKSkKICAgICAgICAg
aXQgPSBtX3NvdXJjZUlkVG9CcmVha3BvaW50cy5zZXQoc291cmNlSURWYWx1ZSwgTGluZVRvQnJl
YWtwb2ludE1hcCgpKS5pdGVyYXRvcjsKLSAgICBMaW5lVG9CcmVha3BvaW50TWFwOjppdGVyYXRv
ciBicmVha3NJdCA9IGl0LT5zZWNvbmQuZmluZChzY3JpcHRCcmVha3BvaW50LmxpbmVOdW1iZXIg
KyAxKTsKLSAgICBpZiAoYnJlYWtzSXQgPT0gaXQtPnNlY29uZC5lbmQoKSkKLSAgICAgICAgYnJl
YWtzSXQgPSBpdC0+c2Vjb25kLnNldChzY3JpcHRCcmVha3BvaW50LmxpbmVOdW1iZXIgKyAxLCBC
cmVha3BvaW50c0luTGluZSgpKS5pdGVyYXRvcjsKKyAgICBMaW5lVG9CcmVha3BvaW50TWFwOjpp
dGVyYXRvciBicmVha3NJdCA9IGl0LT52YWx1ZS5maW5kKHNjcmlwdEJyZWFrcG9pbnQubGluZU51
bWJlciArIDEpOworICAgIGlmIChicmVha3NJdCA9PSBpdC0+dmFsdWUuZW5kKCkpCisgICAgICAg
IGJyZWFrc0l0ID0gaXQtPnZhbHVlLnNldChzY3JpcHRCcmVha3BvaW50LmxpbmVOdW1iZXIgKyAx
LCBCcmVha3BvaW50c0luTGluZSgpKS5pdGVyYXRvcjsKIAotICAgIEJyZWFrcG9pbnRzSW5MaW5l
JiBicmVha3NWZWN0b3IgPSBicmVha3NJdC0+c2Vjb25kOworICAgIEJyZWFrcG9pbnRzSW5MaW5l
JiBicmVha3NWZWN0b3IgPSBicmVha3NJdC0+dmFsdWU7CiAgICAgdW5zaWduZWQgYnJlYWtzQ291
bnQgPSBicmVha3NWZWN0b3Iuc2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBi
cmVha3NDb3VudDsgaSsrKSB7CiAgICAgICAgIGlmIChicmVha3NWZWN0b3IuYXQoaSkuY29sdW1u
TnVtYmVyID09IHNjcmlwdEJyZWFrcG9pbnQuY29sdW1uTnVtYmVyKQpAQCAtMTEyLDExICsxMTIs
MTEgQEAgdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6cmVtb3ZlQnJlYWtwb2ludChjb25zdCBTdHJp
bmcmIGJyZWFrcG9pbnRJZCkKICAgICBTb3VyY2VJZFRvQnJlYWtwb2ludHNNYXA6Oml0ZXJhdG9y
IGl0ID0gbV9zb3VyY2VJZFRvQnJlYWtwb2ludHMuZmluZChzb3VyY2VJRFZhbHVlKTsKICAgICBp
ZiAoaXQgPT0gbV9zb3VyY2VJZFRvQnJlYWtwb2ludHMuZW5kKCkpCiAgICAgICAgIHJldHVybjsK
LSAgICBMaW5lVG9CcmVha3BvaW50TWFwOjppdGVyYXRvciBicmVha3NJdCA9IGl0LT5zZWNvbmQu
ZmluZChsaW5lTnVtYmVyICsgMSk7Ci0gICAgaWYgKGJyZWFrc0l0ID09IGl0LT5zZWNvbmQuZW5k
KCkpCisgICAgTGluZVRvQnJlYWtwb2ludE1hcDo6aXRlcmF0b3IgYnJlYWtzSXQgPSBpdC0+dmFs
dWUuZmluZChsaW5lTnVtYmVyICsgMSk7CisgICAgaWYgKGJyZWFrc0l0ID09IGl0LT52YWx1ZS5l
bmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQnJlYWtwb2ludHNJbkxpbmUmIGJyZWFrc1Zl
Y3RvciA9IGJyZWFrc0l0LT5zZWNvbmQ7CisgICAgQnJlYWtwb2ludHNJbkxpbmUmIGJyZWFrc1Zl
Y3RvciA9IGJyZWFrc0l0LT52YWx1ZTsKICAgICB1bnNpZ25lZCBicmVha3NDb3VudCA9IGJyZWFr
c1ZlY3Rvci5zaXplKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJyZWFrc0NvdW50
OyBpKyspIHsKICAgICAgICAgaWYgKGJyZWFrc1ZlY3Rvci5hdChpKS5jb2x1bW5OdW1iZXIgPT0g
c3RhdGljX2Nhc3Q8aW50Pihjb2x1bW5OdW1iZXIpKSB7CkBAIC0xNzgsMTIgKzE3OCwxMiBAQCBi
b29sIFNjcmlwdERlYnVnU2VydmVyOjpoYXNCcmVha3BvaW50KGludHB0cl90IHNvdXJjZUlELCBj
b25zdCBUZXh0UG9zaXRpb24mIHBvcwogICAgIGlmIChsaW5lTnVtYmVyIDwgMCB8fCBjb2x1bW5O
dW1iZXIgPCAwKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBMaW5lVG9CcmVha3BvaW50
TWFwOjpjb25zdF9pdGVyYXRvciBicmVha3NJdCA9IGl0LT5zZWNvbmQuZmluZChsaW5lTnVtYmVy
ICsgMSk7Ci0gICAgaWYgKGJyZWFrc0l0ID09IGl0LT5zZWNvbmQuZW5kKCkpCisgICAgTGluZVRv
QnJlYWtwb2ludE1hcDo6Y29uc3RfaXRlcmF0b3IgYnJlYWtzSXQgPSBpdC0+dmFsdWUuZmluZChs
aW5lTnVtYmVyICsgMSk7CisgICAgaWYgKGJyZWFrc0l0ID09IGl0LT52YWx1ZS5lbmQoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYm9vbCBoaXQgPSBmYWxzZTsKLSAgICBjb25zdCBC
cmVha3BvaW50c0luTGluZSYgYnJlYWtzVmVjdG9yID0gYnJlYWtzSXQtPnNlY29uZDsKKyAgICBj
b25zdCBCcmVha3BvaW50c0luTGluZSYgYnJlYWtzVmVjdG9yID0gYnJlYWtzSXQtPnZhbHVlOwog
ICAgIHVuc2lnbmVkIGJyZWFrc0NvdW50ID0gYnJlYWtzVmVjdG9yLnNpemUoKTsKICAgICB1bnNp
Z25lZCBpOwogICAgIGZvciAoaSA9IDA7IGkgPCBicmVha3NDb3VudDsgaSsrKSB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcApp
bmRleCBlYTcwMjI5NWI3ZTY1MzZlZDQ0NjE5ODMzM2QwODcyZGQxMjQwNTNjLi41NzM0OWVmNjVi
YjhmNzI2OTdhZmU0NTdkNmJlNGNkNTQxMjZkMzc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKQEAgLTQyNSw4ICs0MjUs
OCBAQCBwcml2YXRlOgogICAgICAgICAvLyBIYW5kbGUgZHVwbGljYXRlIHJlZmVyZW5jZXMKICAg
ICAgICAgaWYgKGZvdW5kICE9IG1fb2JqZWN0UG9vbC5lbmQoKSkgewogICAgICAgICAgICAgd3Jp
dGUoT2JqZWN0UmVmZXJlbmNlVGFnKTsKLSAgICAgICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxp
bnQzMl90Pihmb3VuZC0+c2Vjb25kKSA8IG1fb2JqZWN0UG9vbC5zaXplKCkpOwotICAgICAgICAg
ICAgd3JpdGVPYmplY3RJbmRleChmb3VuZC0+c2Vjb25kKTsKKyAgICAgICAgICAgIEFTU0VSVChz
dGF0aWNfY2FzdDxpbnQzMl90Pihmb3VuZC0+dmFsdWUpIDwgbV9vYmplY3RQb29sLnNpemUoKSk7
CisgICAgICAgICAgICB3cml0ZU9iamVjdEluZGV4KGZvdW5kLT52YWx1ZSk7CiAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCkBAIC02ODMsNyArNjgzLDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICBPYmplY3RQb29sOjppdGVyYXRvciBpbmRleCA9IG1fdHJhbnNmZXJy
ZWRNZXNzYWdlUG9ydHMuZmluZChvYmopOwogICAgICAgICAgICAgICAgIGlmIChpbmRleCAhPSBt
X3RyYW5zZmVycmVkTWVzc2FnZVBvcnRzLmVuZCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIHdy
aXRlKE1lc3NhZ2VQb3J0UmVmZXJlbmNlVGFnKTsKLSAgICAgICAgICAgICAgICAgICAgd3JpdGUo
aW5kZXgtPnNlY29uZCk7CisgICAgICAgICAgICAgICAgICAgIHdyaXRlKGluZGV4LT52YWx1ZSk7
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAvLyBNZXNzYWdlUG9ydCBvYmplY3QgY291bGQgbm90IGJlIGZvdW5kIGlu
IHRyYW5zZmVycmVkIG1lc3NhZ2UgcG9ydHMKQEAgLTY5OSw3ICs2OTksNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgIE9iamVjdFBvb2w6Oml0ZXJhdG9yIGluZGV4ID0gbV90cmFuc2ZlcnJl
ZEFycmF5QnVmZmVycy5maW5kKG9iaik7CiAgICAgICAgICAgICAgICAgaWYgKGluZGV4ICE9IG1f
dHJhbnNmZXJyZWRBcnJheUJ1ZmZlcnMuZW5kKCkpIHsKICAgICAgICAgICAgICAgICAgICAgd3Jp
dGUoQXJyYXlCdWZmZXJUcmFuc2ZlclRhZyk7Ci0gICAgICAgICAgICAgICAgICAgIHdyaXRlKGlu
ZGV4LT5zZWNvbmQpOworICAgICAgICAgICAgICAgICAgICB3cml0ZShpbmRleC0+dmFsdWUpOwog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgaWYgKCFzdGFydE9iamVjdEludGVybmFsKG9iaikpIC8vIGhhbmRsZSBkdXBs
aWNhdGVzCkBAIC03OTYsNyArNzk2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgU3RyaW5nQ29uc3Rh
bnRQb29sOjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gbV9jb25zdGFudFBvb2wuYWRkKHN0ci5pbXBs
KCksIG1fY29uc3RhbnRQb29sLnNpemUoKSk7CiAgICAgICAgIGlmICghYWRkUmVzdWx0LmlzTmV3
RW50cnkpIHsKICAgICAgICAgICAgIHdyaXRlKFN0cmluZ1Bvb2xUYWcpOwotICAgICAgICAgICAg
d3JpdGVTdHJpbmdJbmRleChhZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7CisgICAgICAgICAg
ICB3cml0ZVN0cmluZ0luZGV4KGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KaW5kZXggMmQ3OTU3Y2ZiNjJhMGMxN2NlOWJhZDVj
MjA4N2RlYmU0NzUzYzIwYi4uZmZmYzA2ZDcxZjRlZTJhZTQzN2UxY2ZiZTE4YTU4YzE4Yzg1YmY2
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9yVjgucG0KKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9yVjgucG0KQEAgLTI5NzcsNyArMjk3Nyw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlv
blRlbXBsYXRlPiAke2NsYXNzTmFtZX06OkdldFJhd1RlbXBsYXRlKCkKICAgICBWOFBlcklzb2xh
dGVEYXRhKiBkYXRhID0gVjhQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4UGVySXNv
bGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT5yYXdUZW1wbGF0
ZU1hcCgpLmZpbmQoJmluZm8pOwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+cmF3VGVtcGxhdGVN
YXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1
cm4gcmVzdWx0LT52YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAg
ICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPSBjcmVhdGVSYXdU
ZW1wbGF0ZSgpOwpAQCAtMjk5MCw3ICsyOTkwLDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0
aW9uVGVtcGxhdGU+ICR7Y2xhc3NOYW1lfTo6R2V0VGVtcGxhdGUoKQogICAgIFY4UGVySXNvbGF0
ZURhdGEqIGRhdGEgPSBWOFBlcklzb2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhQZXJJc29s
YXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnRlbXBsYXRlTWFw
KCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmVu
ZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1
bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQ
ZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhGbG9hdDY0QXJyYXkuY3BwIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4RmxvYXQ2NEFycmF5LmNw
cAppbmRleCBiZGE0N2E1YWNkZWI5ZWJmN2FlZGJkMWYzZDMzY2Y5ZDE1NGY0NDBkLi4xYmY2ODI0
MmFhNTcxNjYwMDE2YThmZmE5ZWFjOGIxMWJhZDk2NjAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhGbG9hdDY0QXJyYXkuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOEZsb2F0NjRBcnJheS5jcHAK
QEAgLTExOSw3ICsxMTksNyBAQCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4g
VjhGbG9hdDY0QXJyYXk6OkdldFJhd1RlbXBsYXRlKCkKICAgICBWOFBlcklzb2xhdGVEYXRhKiBk
YXRhID0gVjhQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4UGVySXNvbGF0ZURhdGE6
OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmZp
bmQoJmluZm8pOwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5lbmQo
KSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0
LT52YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVy
c2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPSBjcmVhdGVSYXdUZW1wbGF0ZSgp
OwpAQCAtMTMyLDcgKzEzMiw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRl
PiBWOEZsb2F0NjRBcnJheTo6R2V0VGVtcGxhdGUoKQogICAgIFY4UGVySXNvbGF0ZURhdGEqIGRh
dGEgPSBWOFBlcklzb2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhQZXJJc29sYXRlRGF0YTo6
VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZmluZCgm
aW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAg
ICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVl
OwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50
PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RBY3RpdmVET01PYmpl
Y3QuY3BwCmluZGV4IGMyYzk5NDA0NTlhMzFkZWE2MjQ5ZjcxZWVmYWZmNmMyYzEwNjAyYWUuLjVk
MmQ1Y2FiY2NjOGFkNzc3YzkzZGQzNTU3MTY4OWY5N2RlODYzYTkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RBY3RpdmVET01PYmplY3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RB
Y3RpdmVET01PYmplY3QuY3BwCkBAIC0xNDgsNyArMTQ4LDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6
OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdEFjdGl2ZURPTU9iamVjdDo6R2V0UmF3VGVtcGxhdGUo
KQogICAgIFY4UGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOFBlcklzb2xhdGVEYXRhOjpjdXJyZW50
KCk7CiAgICAgVjhQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9
IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBk
YXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNv
bmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3Bl
IGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0
ZW1wbCA9IGNyZWF0ZVJhd1RlbXBsYXRlKCk7CkBAIC0xNjEsNyArMTYxLDcgQEAgdjg6OlBlcnNp
c3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdEFjdGl2ZURPTU9iamVjdDo6R2V0VGVt
cGxhdGUoKQogICAgIFY4UGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOFBlcklzb2xhdGVEYXRhOjpj
dXJyZW50KCk7CiAgICAgVjhQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJl
c3VsdCA9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAh
PSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNv
bmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3Bl
IGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0
ZW1wbCA9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VjgvVjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcAppbmRleCA4OTc1Y2Y2
MzI1ZTIwNmUzNzA4NjI0MzM5YzhlMzJhZGY3ZjEwZGNiLi5lNGQyZjdkNGM0YWM3ZmQwMGRlN2Rk
ZDNmYmYzNjQyZjBiYzY4OTlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVjgvVjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RDdXN0b21OYW1lZEdldHRlci5j
cHAKQEAgLTgyLDcgKzgyLDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+
IFY4VGVzdEN1c3RvbU5hbWVkR2V0dGVyOjpHZXRSYXdUZW1wbGF0ZSgpCiAgICAgVjhQZXJJc29s
YXRlRGF0YSogZGF0YSA9IFY4UGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOFBlcklz
b2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+cmF3VGVtcGxh
dGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnJhd1RlbXBsYXRl
TWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAg
ICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0gY3JlYXRlUmF3
VGVtcGxhdGUoKTsKQEAgLTk1LDcgKzk1LDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9u
VGVtcGxhdGU+IFY4VGVzdEN1c3RvbU5hbWVkR2V0dGVyOjpHZXRUZW1wbGF0ZSgpCiAgICAgVjhQ
ZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4UGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBW
OFBlcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+dGVt
cGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnRlbXBsYXRl
TWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAg
ICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudENv
bnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9W
OFRlc3RFdmVudENvbnN0cnVjdG9yLmNwcAppbmRleCBmZTNlYjRmZmYwNTA2OGY0MGQyYzc1YjUx
MTExMTI1NjQxMDE1ZTEyLi4zMjYzODNjMzk5MjNhNTY2N2Q0Y2VjOTllNTBkNWQ1ZmJlYmQwNzZm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhU
ZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCkBAIC0xMTksNyArMTE5LDcg
QEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdEV2ZW50Q29uc3Ry
dWN0b3I6OkdldFJhd1RlbXBsYXRlKCkKICAgICBWOFBlcklzb2xhdGVEYXRhKiBkYXRhID0gVjhQ
ZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4UGVySXNvbGF0ZURhdGE6OlRlbXBsYXRl
TWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8p
OwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAg
ICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsK
IAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2
ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPSBjcmVhdGVSYXdUZW1wbGF0ZSgpOwpAQCAtMTMy
LDcgKzEzMiw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3RF
dmVudENvbnN0cnVjdG9yOjpHZXRUZW1wbGF0ZSgpCiAgICAgVjhQZXJJc29sYXRlRGF0YSogZGF0
YSA9IFY4UGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOFBlcklzb2xhdGVEYXRhOjpU
ZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+dGVtcGxhdGVNYXAoKS5maW5kKCZp
bmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAg
ICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7
CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8
djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudFRhcmdldC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRUYXJnZXQuY3BwCmlu
ZGV4IDE5NDBkN2RiZGJlYTg0MjJkN2M2M2U4MWM4YWExNGQzOGUyOGU0MGIuLmVkYmVmM2JiYTc0
MGI5YTE2NDJmZTNmZWQxYjM5NTVmNzY1OTY5YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudFRhcmdldC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50VGFyZ2V0LmNw
cApAQCAtMTQzLDcgKzE0Myw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRl
PiBWOFRlc3RFdmVudFRhcmdldDo6R2V0UmF3VGVtcGxhdGUoKQogICAgIFY4UGVySXNvbGF0ZURh
dGEqIGRhdGEgPSBWOFBlcklzb2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhQZXJJc29sYXRl
RGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnJhd1RlbXBsYXRlTWFw
KCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgp
LmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBy
ZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4
OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9IGNyZWF0ZVJhd1RlbXBs
YXRlKCk7CkBAIC0xNTYsNyArMTU2LDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVt
cGxhdGU+IFY4VGVzdEV2ZW50VGFyZ2V0OjpHZXRUZW1wbGF0ZSgpCiAgICAgVjhQZXJJc29sYXRl
RGF0YSogZGF0YSA9IFY4UGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOFBlcklzb2xh
dGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+dGVtcGxhdGVNYXAo
KS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZW5k
KCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBl
cnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFeGNlcHRpb24uY3BwIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV4Y2VwdGlvbi5j
cHAKaW5kZXggOTM3NWNlMzEwNjM5NDQ2NDBjNWIwZjZmNzcxYmExODA5Mzg2OTMwNS4uNTBhODdk
NjY0YjJiODgzNmFmZDdmNTUyMjBmODNkMDQzNmQzNzFkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV4Y2VwdGlvbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV4Y2VwdGlvbi5j
cHAKQEAgLTczLDcgKzczLDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+
IFY4VGVzdEV4Y2VwdGlvbjo6R2V0UmF3VGVtcGxhdGUoKQogICAgIFY4UGVySXNvbGF0ZURhdGEq
IGRhdGEgPSBWOFBlcklzb2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhQZXJJc29sYXRlRGF0
YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCku
ZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmVu
ZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1
bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQ
ZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9IGNyZWF0ZVJhd1RlbXBsYXRl
KCk7CkBAIC04Niw3ICs4Niw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRl
PiBWOFRlc3RFeGNlcHRpb246OkdldFRlbXBsYXRlKCkKICAgICBWOFBlcklzb2xhdGVEYXRhKiBk
YXRhID0gVjhQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4UGVySXNvbGF0ZURhdGE6
OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmZpbmQo
JmluZm8pOwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+dGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1
ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVu
dDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEludGVyZmFjZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0SW50ZXJmYWNlLmNwcAppbmRl
eCAwMDk4ZDVlYjBiODQ4ZDY4MTY2MWIwMzU5ZDlhOGMzMDM1ODI4N2E5Li5jMDJhODg1NjU5ODli
YTU3YjNhMjE0MzRhZTljMmVkZWNlY2U4NDk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0SW50ZXJmYWNlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0SW50ZXJmYWNlLmNwcApAQCAt
MzEyLDcgKzMxMiw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRl
c3RJbnRlcmZhY2U6OkdldFJhd1RlbXBsYXRlKCkKICAgICBWOFBlcklzb2xhdGVEYXRhKiBkYXRh
ID0gVjhQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4UGVySXNvbGF0ZURhdGE6OlRl
bXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmZpbmQo
JmluZm8pOwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5lbmQoKSkK
LSAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52
YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lz
dGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPSBjcmVhdGVSYXdUZW1wbGF0ZSgpOwpA
QCAtMzI1LDcgKzMyNSw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBW
OFRlc3RJbnRlcmZhY2U6OkdldFRlbXBsYXRlKCkKICAgICBWOFBlcklzb2xhdGVEYXRhKiBkYXRh
ID0gVjhQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4UGVySXNvbGF0ZURhdGE6OlRl
bXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmZpbmQoJmlu
Zm8pOwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+dGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAg
ICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsK
IAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2
ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE1lZGlhUXVl
cnlMaXN0TGlzdGVuZXIuY3BwCmluZGV4IGFjMTE2Nzk5OGQwOGM3NWQ0NmY4NzYwMTljNzg5ZTQ3
ZTJjYjdhM2YuLmRkOGM1OTJhYTkwZDc2NGUwMTNkNzg5NzQxY2JhZTYxZjliYWRmMjMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RNZWRp
YVF1ZXJ5TGlzdExpc3RlbmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVjgvVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAKQEAgLTgyLDcgKzgy
LDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdE1lZGlhUXVl
cnlMaXN0TGlzdGVuZXI6OkdldFJhd1RlbXBsYXQKICAgICBWOFBlcklzb2xhdGVEYXRhKiBkYXRh
ID0gVjhQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4UGVySXNvbGF0ZURhdGE6OlRl
bXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmZpbmQo
JmluZm8pOwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5lbmQoKSkK
LSAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52
YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lz
dGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPSBjcmVhdGVSYXdUZW1wbGF0ZSgpOwpA
QCAtOTUsNyArOTUsNyBAQCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhU
ZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6R2V0VGVtcGxhdGUoKQogICAgIFY4UGVySXNvbGF0
ZURhdGEqIGRhdGEgPSBWOFBlcklzb2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhQZXJJc29s
YXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnRlbXBsYXRlTWFw
KCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmVu
ZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1
bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQ
ZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TmFtZWRDb25zdHJ1Y3Rv
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TmFt
ZWRDb25zdHJ1Y3Rvci5jcHAKaW5kZXggN2E3NGY1ODI3OTJhODE2ODFlNDIyZWNkZWFkNDViMTY0
ZmNjODE3OS4uNjc2MzVjZmYzZGNlY2JiM2FmNTkyOWRlM2YyMDc2YTdhZDhmMWMxNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5hbWVk
Q29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9WOC9WOFRlc3ROYW1lZENvbnN0cnVjdG9yLmNwcApAQCAtMTIyLDcgKzEyMiw3IEBAIHY4OjpQ
ZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3ROYW1lZENvbnN0cnVjdG9yOjpH
ZXRSYXdUZW1wbGF0ZSgpCiAgICAgVjhQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4UGVySXNvbGF0
ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOFBlcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRl
cmF0b3IgcmVzdWx0ID0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBp
ZiAocmVzdWx0ICE9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVy
biByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2
ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0
aW9uVGVtcGxhdGU+IHRlbXBsID0gY3JlYXRlUmF3VGVtcGxhdGUoKTsKQEAgLTEzNSw3ICsxMzUs
NyBAQCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0TmFtZWRDb25z
dHJ1Y3Rvcjo6R2V0VGVtcGxhdGUoKQogICAgIFY4UGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOFBl
cklzb2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVN
YXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAg
ICAgaWYgKHJlc3VsdCAhPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1
cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAg
djg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5j
dGlvblRlbXBsYXRlPiB0ZW1wbCA9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Tm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Tm9kZS5jcHAKaW5kZXggY2U0MmY5MmVkOWY2OWY0NDkw
ZDYwYzY3MjFkZGE2OTA5ZDJhYzEzMC4uNDkwZjkxMTdhZGJmNjE3NjZhOTliM2I2MDliNWQwYWRi
ZTNhNWRhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Y4L1Y4VGVzdE5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOFRlc3ROb2RlLmNwcApAQCAtODEsNyArODEsNyBAQCB2ODo6UGVyc2lzdGVudDx2
ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0Tm9kZTo6R2V0UmF3VGVtcGxhdGUoKQogICAgIFY4
UGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOFBlcklzb2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAg
VjhQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnJh
d1RlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT5yYXdU
ZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAg
ICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNj
b3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9IGNy
ZWF0ZVJhd1RlbXBsYXRlKCk7CkBAIC05NCw3ICs5NCw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpG
dW5jdGlvblRlbXBsYXRlPiBWOFRlc3ROb2RlOjpHZXRUZW1wbGF0ZSgpCiAgICAgVjhQZXJJc29s
YXRlRGF0YSogZGF0YSA9IFY4UGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOFBlcklz
b2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+dGVtcGxhdGVN
YXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnRlbXBsYXRlTWFwKCku
ZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6
OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKaW5kZXgg
MzdkNzM5MzkzNDRmYzdhMDA5YjcxNmU3MjNjMjczYzE3N2Y0MmFkYy4uMjg1MmExYzQ5ZjIyMmY2
YzI5MDZmOWNiNDg4YTRhYjhlMGJiODZhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKQEAgLTIyNjcsNyArMjI2Nyw3
IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3RPYmo6OkdldFJh
d1RlbXBsYXRlKCkKICAgICBWOFBlcklzb2xhdGVEYXRhKiBkYXRhID0gVjhQZXJJc29sYXRlRGF0
YTo6Y3VycmVudCgpOwogICAgIFY4UGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRv
ciByZXN1bHQgPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwogICAgIGlmIChy
ZXN1bHQgIT0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHJl
c3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAogICAgIHY4OjpI
YW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25U
ZW1wbGF0ZT4gdGVtcGwgPSBjcmVhdGVSYXdUZW1wbGF0ZSgpOwpAQCAtMjI4MCw3ICsyMjgwLDcg
QEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdE9iajo6R2V0VGVt
cGxhdGUoKQogICAgIFY4UGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOFBlcklzb2xhdGVEYXRhOjpj
dXJyZW50KCk7CiAgICAgVjhQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJl
c3VsdCA9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAh
PSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNv
bmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3Bl
IGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0
ZW1wbCA9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VjgvVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2UuY3BwCmluZGV4IGFlOGQxOGQ0NWNmZGM1YWM0OWEzYWRkYmM0MWY0Y2Y1MmI5YWRl
YWUuLjk4NjNkNzQxYWRlNmY0M2FhNWViMDE2NTcwYjQzZDZiMmY3MDE1ZDUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9WOC9WOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCkBA
IC0yNjUsNyArMjY1LDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6R2V0UmEKICAgICBWOFBlcklzb2xh
dGVEYXRhKiBkYXRhID0gVjhQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4UGVySXNv
bGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT5yYXdUZW1wbGF0
ZU1hcCgpLmZpbmQoJmluZm8pOwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+cmF3VGVtcGxhdGVN
YXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1
cm4gcmVzdWx0LT52YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAg
ICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPSBjcmVhdGVSYXdU
ZW1wbGF0ZSgpOwpAQCAtMjc4LDcgKzI3OCw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlv
blRlbXBsYXRlPiBWOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OkdldFRlCiAg
ICAgVjhQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4UGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsK
ICAgICBWOFBlcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0
YS0+dGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnRl
bXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2Nv
cGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTVdyYXBwZXJXb3JsZC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01XcmFwcGVyV29ybGQuY3BwCmluZGV4IDMx
YTAyODZjNDUxZjc2N2RjZDNlYjQ0MWE3ZmU4YzEzZmNjY2IzMWYuLjUyNzM3OTYzNzRlOWUyOGYw
NDQ4ODA0NjliNzcyMjA2OTNmMjE4Y2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L0RPTVdyYXBwZXJXb3JsZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvRE9NV3JhcHBlcldvcmxkLmNwcApAQCAtODIsNyArODIsNyBAQCB2b2lkIERPTVdyYXBwZXJX
b3JsZDo6ZGVhbGxvY2F0ZShET01XcmFwcGVyV29ybGQqIHdvcmxkKQogICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBBU1NFUlQoaS0+c2Vj
b25kID09IHdvcmxkKTsKKyAgICBBU1NFUlQoaS0+dmFsdWUgPT0gd29ybGQpOwogCiAgICAgbWFw
LnJlbW92ZShpKTsKICAgICBpc29sYXRlZFdvcmxkQ291bnQtLTsKQEAgLTEwMSw5ICsxMDEsOSBA
QCBQYXNzUmVmUHRyPERPTVdyYXBwZXJXb3JsZD4gRE9NV3JhcHBlcldvcmxkOjpnZXRPckNyZWF0
ZUlzb2xhdGVkV29ybGQoaW50IHdvcmxkSQogICAgIGVsc2UgewogICAgICAgICBXb3JsZE1hcDo6
aXRlcmF0b3IgaSA9IG1hcC5maW5kKHdvcmxkSWQpOwogICAgICAgICBpZiAoaSAhPSBtYXAuZW5k
KCkpIHsKLSAgICAgICAgICAgIEFTU0VSVChpLT5zZWNvbmQtPndvcmxkSWQoKSA9PSB3b3JsZElk
KTsKLSAgICAgICAgICAgIEFTU0VSVChpLT5zZWNvbmQtPmV4dGVuc2lvbkdyb3VwKCkgPT0gZXh0
ZW5zaW9uR3JvdXApOwotICAgICAgICAgICAgcmV0dXJuIGktPnNlY29uZDsKKyAgICAgICAgICAg
IEFTU0VSVChpLT52YWx1ZS0+d29ybGRJZCgpID09IHdvcmxkSWQpOworICAgICAgICAgICAgQVNT
RVJUKGktPnZhbHVlLT5leHRlbnNpb25Hcm91cCgpID09IGV4dGVuc2lvbkdyb3VwKTsKKyAgICAg
ICAgICAgIHJldHVybiBpLT52YWx1ZTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvTlBWOE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9OUFY4T2JqZWN0LmNwcAppbmRleCBhMzJiNDRlYTU5NjkwNDM2Yzk0NTE3
MzczNWQzZTk1OTA5NGQ2MGNkLi5iNWYzYzY2YjMzYjdjNTgyM2RmMDU0YWY1NzgyYjUwOTllMDdm
NjAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9OUFY4T2JqZWN0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9OUFY4T2JqZWN0LmNwcApAQCAtODYs
NyArODYsNyBAQCBzdGF0aWMgdm9pZCBmcmVlVjhOUE9iamVjdChOUE9iamVjdCogbnBPYmplY3Qp
CiAgICAgaWYgKGludCB2OE9iamVjdEhhc2ggPSB2OE5wT2JqZWN0LT52OE9iamVjdC0+R2V0SWRl
bnRpdHlIYXNoKCkpIHsKICAgICAgICAgVjhOUE9iamVjdE1hcDo6aXRlcmF0b3IgaXRlciA9IHN0
YXRpY1Y4TlBPYmplY3RNYXAoKS0+ZmluZCh2OE9iamVjdEhhc2gpOwogICAgICAgICBpZiAoaXRl
ciAhPSBzdGF0aWNWOE5QT2JqZWN0TWFwKCktPmVuZCgpKSB7Ci0gICAgICAgICAgICBWOE5QT2Jq
ZWN0VmVjdG9yJiBvYmplY3RzID0gaXRlci0+c2Vjb25kOworICAgICAgICAgICAgVjhOUE9iamVj
dFZlY3RvciYgb2JqZWN0cyA9IGl0ZXItPnZhbHVlOwogICAgICAgICAgICAgZm9yIChzaXplX3Qg
aW5kZXggPSAwOyBpbmRleCA8IG9iamVjdHMuc2l6ZSgpOyArK2luZGV4KSB7CiAgICAgICAgICAg
ICAgICAgaWYgKG9iamVjdHMuYXQoaW5kZXgpID09IHY4TnBPYmplY3QpIHsKICAgICAgICAgICAg
ICAgICAgICAgb2JqZWN0cy5yZW1vdmUoaW5kZXgpOwpAQCAtMTYxLDcgKzE2MSw3IEBAIE5QT2Jq
ZWN0KiBucENyZWF0ZVY4U2NyaXB0T2JqZWN0KE5QUCBucHAsIHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4gb2JqZWN0LCBET01XaW5kCiAgICAgQVNTRVJUKHY4T2JqZWN0SGFzaCk7CiAgICAgVjhOUE9i
amVjdE1hcDo6aXRlcmF0b3IgaXRlciA9IHN0YXRpY1Y4TlBPYmplY3RNYXAoKS0+ZmluZCh2OE9i
amVjdEhhc2gpOwogICAgIGlmIChpdGVyICE9IHN0YXRpY1Y4TlBPYmplY3RNYXAoKS0+ZW5kKCkp
IHsKLSAgICAgICAgVjhOUE9iamVjdFZlY3RvciYgb2JqZWN0cyA9IGl0ZXItPnNlY29uZDsKKyAg
ICAgICAgVjhOUE9iamVjdFZlY3RvciYgb2JqZWN0cyA9IGl0ZXItPnZhbHVlOwogICAgICAgICBm
b3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgb2JqZWN0cy5zaXplKCk7ICsraW5kZXgpIHsK
ICAgICAgICAgICAgIFY4TlBPYmplY3QqIHY4bnBPYmplY3QgPSBvYmplY3RzLmF0KGluZGV4KTsK
ICAgICAgICAgICAgIGlmICh2OG5wT2JqZWN0LT5yb290T2JqZWN0ID09IHJvb3QpIHsKQEAgLTE4
MSw3ICsxODEsNyBAQCBOUE9iamVjdCogbnBDcmVhdGVWOFNjcmlwdE9iamVjdChOUFAgbnBwLCB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCwgRE9NV2luZAogI2VuZGlmCiAgICAgdjhucE9i
amVjdC0+cm9vdE9iamVjdCA9IHJvb3Q7CiAKLSAgICBpdGVyLT5zZWNvbmQuYXBwZW5kKHY4bnBP
YmplY3QpOworICAgIGl0ZXItPnZhbHVlLmFwcGVuZCh2OG5wT2JqZWN0KTsKIAogICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PE5QT2JqZWN0Kj4odjhucE9iamVjdCk7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwCmluZGV4IDZhMTNkZWFh
YzM5ZjhlMGFlYWJiODExNTAyYjk3YTZkNmYwMDQ2MTEuLjM4N2Q5MzFiOWFhZTUwZDkwN2QyMjg2
OGVhYjcwYWI0MTdlNjJiYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1NjcmlwdENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Nj
cmlwdENvbnRyb2xsZXIuY3BwCkBAIC0xMjgsOCArMTI4LDggQEAgdm9pZCBTY3JpcHRDb250cm9s
bGVyOjpjbGVhclNjcmlwdE9iamVjdHMoKQogewogICAgIFBsdWdpbk9iamVjdE1hcDo6aXRlcmF0
b3IgaXQgPSBtX3BsdWdpbk9iamVjdHMuYmVnaW4oKTsKICAgICBmb3IgKDsgaXQgIT0gbV9wbHVn
aW5PYmplY3RzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIF9OUE5fVW5yZWdpc3Rlck9iamVjdChp
dC0+c2Vjb25kKTsKLSAgICAgICAgX05QTl9SZWxlYXNlT2JqZWN0KGl0LT5zZWNvbmQpOworICAg
ICAgICBfTlBOX1VucmVnaXN0ZXJPYmplY3QoaXQtPnZhbHVlKTsKKyAgICAgICAgX05QTl9SZWxl
YXNlT2JqZWN0KGl0LT52YWx1ZSk7CiAgICAgfQogICAgIG1fcGx1Z2luT2JqZWN0cy5jbGVhcigp
OwogCkBAIC0xNTcsNyArMTU3LDcgQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpyZXNldElzb2xh
dGVkV29ybGRzKCkKIHsKICAgICBmb3IgKElzb2xhdGVkV29ybGRNYXA6Oml0ZXJhdG9yIGl0ZXIg
PSBtX2lzb2xhdGVkV29ybGRzLmJlZ2luKCk7CiAgICAgICAgICBpdGVyICE9IG1faXNvbGF0ZWRX
b3JsZHMuZW5kKCk7ICsraXRlcikgewotICAgICAgICBpdGVyLT5zZWNvbmQtPmRlc3Ryb3koKTsK
KyAgICAgICAgaXRlci0+dmFsdWUtPmRlc3Ryb3koKTsKICAgICB9CiAgICAgbV9pc29sYXRlZFdv
cmxkcy5jbGVhcigpOwogICAgIG1faXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2lucy5jbGVhcigp
OwpAQCAtMzQ0LDcgKzM0NCw3IEBAIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbklz
b2xhdGVkV29ybGQodW5zaWduZWQgd29ybGRJRCwgY29uc3QgVmVjdG9yPFNjCiAgICAgICAgIGlm
ICh3b3JsZElEID4gMCkgewogICAgICAgICAgICAgSXNvbGF0ZWRXb3JsZE1hcDo6aXRlcmF0b3Ig
aXRlciA9IG1faXNvbGF0ZWRXb3JsZHMuZmluZCh3b3JsZElEKTsKICAgICAgICAgICAgIGlmIChp
dGVyICE9IG1faXNvbGF0ZWRXb3JsZHMuZW5kKCkpCi0gICAgICAgICAgICAgICAgaXNvbGF0ZWRD
b250ZXh0ID0gaXRlci0+c2Vjb25kOworICAgICAgICAgICAgICAgIGlzb2xhdGVkQ29udGV4dCA9
IGl0ZXItPnZhbHVlOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgaXNvbGF0
ZWRDb250ZXh0ID0gbmV3IFY4SXNvbGF0ZWRDb250ZXh0KG1fZnJhbWUsIERPTVdyYXBwZXJXb3Js
ZDo6Z2V0T3JDcmVhdGVJc29sYXRlZFdvcmxkKHdvcmxkSUQsIGV4dGVuc2lvbkdyb3VwKSk7CiAg
ICAgICAgICAgICAgICAgaWYgKGlzb2xhdGVkQ29udGV4dC0+Y29udGV4dCgpLklzRW1wdHkoKSkg
ewpAQCAtMzU4LDcgKzM1OCw3IEBAIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbklz
b2xhdGVkV29ybGQodW5zaWduZWQgd29ybGRJRCwgY29uc3QgVmVjdG9yPFNjCiAKICAgICAgICAg
ICAgIElzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbk1hcDo6aXRlcmF0b3Igc2VjdXJpdHlPcmln
aW5JdGVyID0gbV9pc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW5zLmZpbmQod29ybGRJRCk7CiAg
ICAgICAgICAgICBpZiAoc2VjdXJpdHlPcmlnaW5JdGVyICE9IG1faXNvbGF0ZWRXb3JsZFNlY3Vy
aXR5T3JpZ2lucy5lbmQoKSkKLSAgICAgICAgICAgICAgICBpc29sYXRlZENvbnRleHQtPnNldFNl
Y3VyaXR5T3JpZ2luKHNlY3VyaXR5T3JpZ2luSXRlci0+c2Vjb25kKTsKKyAgICAgICAgICAgICAg
ICBpc29sYXRlZENvbnRleHQtPnNldFNlY3VyaXR5T3JpZ2luKHNlY3VyaXR5T3JpZ2luSXRlci0+
dmFsdWUpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaXNvbGF0ZWRDb250ZXh0ID0g
bmV3IFY4SXNvbGF0ZWRDb250ZXh0KG1fZnJhbWUsIERPTVdyYXBwZXJXb3JsZDo6Z2V0T3JDcmVh
dGVJc29sYXRlZFdvcmxkKHdvcmxkSUQsIGV4dGVuc2lvbkdyb3VwKSk7CiAgICAgICAgICAgICBp
ZiAoaXNvbGF0ZWRDb250ZXh0LT5jb250ZXh0KCkuSXNFbXB0eSgpKSB7CkBAIC0zOTYsNyArMzk2
LDcgQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpzZXRJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmln
aW4oaW50IHdvcmxkSUQsIFBhc3NSZWZQdHI8U2UKICAgICBtX2lzb2xhdGVkV29ybGRTZWN1cml0
eU9yaWdpbnMuc2V0KHdvcmxkSUQsIHNlY3VyaXR5T3JpZ2luKTsKICAgICBJc29sYXRlZFdvcmxk
TWFwOjppdGVyYXRvciBpdGVyID0gbV9pc29sYXRlZFdvcmxkcy5maW5kKHdvcmxkSUQpOwogICAg
IGlmIChpdGVyICE9IG1faXNvbGF0ZWRXb3JsZHMuZW5kKCkpCi0gICAgICAgIGl0ZXItPnNlY29u
ZC0+c2V0U2VjdXJpdHlPcmlnaW4oc2VjdXJpdHlPcmlnaW4pOworICAgICAgICBpdGVyLT52YWx1
ZS0+c2V0U2VjdXJpdHlPcmlnaW4oc2VjdXJpdHlPcmlnaW4pOwogfQogCiBUZXh0UG9zaXRpb24g
U2NyaXB0Q29udHJvbGxlcjo6ZXZlbnRIYW5kbGVyUG9zaXRpb24oKSBjb25zdApAQCAtNTQ2LDgg
KzU0Niw4IEBAIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6Y2xlYW51cFNjcmlwdE9iamVjdHNGb3JQ
bHVnaW4oV2lkZ2V0KiBuYXRpdmVIYW5kbGUpCiAgICAgUGx1Z2luT2JqZWN0TWFwOjppdGVyYXRv
ciBpdCA9IG1fcGx1Z2luT2JqZWN0cy5maW5kKG5hdGl2ZUhhbmRsZSk7CiAgICAgaWYgKGl0ID09
IG1fcGx1Z2luT2JqZWN0cy5lbmQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIF9OUE5fVW5yZWdp
c3Rlck9iamVjdChpdC0+c2Vjb25kKTsKLSAgICBfTlBOX1JlbGVhc2VPYmplY3QoaXQtPnNlY29u
ZCk7CisgICAgX05QTl9VbnJlZ2lzdGVyT2JqZWN0KGl0LT52YWx1ZSk7CisgICAgX05QTl9SZWxl
YXNlT2JqZWN0KGl0LT52YWx1ZSk7CiAgICAgbV9wbHVnaW5PYmplY3RzLnJlbW92ZShpdCk7CiB9
CiAKQEAgLTY2Myw3ICs2NjMsNyBAQCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmNvbGxlY3RJc29s
YXRlZENvbnRleHRzKFZlY3RvcjxzdGQ6OnBhaXI8U2NyaXB0U3RhdGUqLCBTZQogewogICAgIHY4
OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICBmb3IgKElzb2xhdGVkV29ybGRNYXA6Oml0
ZXJhdG9yIGl0ID0gbV9pc29sYXRlZFdvcmxkcy5iZWdpbigpOyBpdCAhPSBtX2lzb2xhdGVkV29y
bGRzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIFY4SXNvbGF0ZWRDb250ZXh0KiBpc29sYXRlZENv
bnRleHQgPSBpdC0+c2Vjb25kOworICAgICAgICBWOElzb2xhdGVkQ29udGV4dCogaXNvbGF0ZWRD
b250ZXh0ID0gaXQtPnZhbHVlOwogICAgICAgICBpZiAoIWlzb2xhdGVkQ29udGV4dC0+c2VjdXJp
dHlPcmlnaW4oKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB2ODo6SGFuZGxlPHY4
OjpDb250ZXh0PiB2OENvbnRleHQgPSBpc29sYXRlZENvbnRleHQtPmNvbnRleHQoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3Bw
CmluZGV4IGE5YjM5Y2UxMTkzNjUzNTBjYWM4Yzc2MmU4YmFiMDAzZjU0M2Y5NGQuLjY3NmVkNmQy
MDg3NGYzNzliNWNlZWRmZDcyNDI3YWI5YmIzMTNmZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcApAQCAtMTA4LDcgKzEw
OCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHR5cGVuYW1lIEhhbmRsZVRvVDo6aXRlcmF0
b3IgcmVzdWx0ID0gbV9tYXAuZmluZCgqaGFuZGxlKTsKICAgICAgICAgaWYgKHJlc3VsdCAhPSBt
X21hcC5lbmQoKSkgewotICAgICAgICAgICAgKnZhbHVlT3V0ID0gcmVzdWx0LT5zZWNvbmQ7Cisg
ICAgICAgICAgICAqdmFsdWVPdXQgPSByZXN1bHQtPnZhbHVlOwogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01NYXAuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4RE9NTWFwLmgKaW5kZXggY2M3NmZmYTUzMWVhM2EyMDViMGYxMWQ1MTUxYjIwMWUw
ZTIwNzdjNC4uMzhiNTE0Mjc3NzMxOGE0ZDZmZDcwOTczZWRlMTkwYmEzNDRiNzkyYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01NYXAuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTU1hcC5oCkBAIC0xMTAsNyArMTEwLDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICBib29sIHJlbW92ZUlmUHJlc2VudChLZXlUeXBlKiBrZXks
IHY4OjpQZXJzaXN0ZW50PFZhbHVlVHlwZT4gdmFsdWUpCiAgICAgICAgIHsKICAgICAgICAgICAg
IHR5cGVuYW1lIEhhc2hNYXA8S2V5VHlwZSosIFZhbHVlVHlwZSo+OjppdGVyYXRvciBpdCA9IG1f
bWFwLmZpbmQoa2V5KTsKLSAgICAgICAgICAgIGlmIChpdCA9PSBtX21hcC5lbmQoKSB8fCBpdC0+
c2Vjb25kICE9ICp2YWx1ZSkKKyAgICAgICAgICAgIGlmIChpdCA9PSBtX21hcC5lbmQoKSB8fCBp
dC0+dmFsdWUgIT0gKnZhbHVlKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
ICAgICAgICAgbV9tYXAucmVtb3ZlKGl0KTsKQEAgLTEzMCw3ICsxMzAsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgICAgICB2aXNpdG9yLT5zdGFydE1hcCgpOwogICAgICAgICAgICAg
dHlwZW5hbWUgSGFzaE1hcDxLZXlUeXBlKiwgVmFsdWVUeXBlKj46Oml0ZXJhdG9yIGl0ID0gbV9t
YXAuYmVnaW4oKTsKICAgICAgICAgICAgIGZvciAoOyBpdCAhPSBtX21hcC5lbmQoKTsgKytpdCkK
LSAgICAgICAgICAgICAgICB2aXNpdG9yLT52aXNpdERPTVdyYXBwZXIoc3RvcmUsIGl0LT5maXJz
dCwgdjg6OlBlcnNpc3RlbnQ8VmFsdWVUeXBlPihpdC0+c2Vjb25kKSk7CisgICAgICAgICAgICAg
ICAgdmlzaXRvci0+dmlzaXRET01XcmFwcGVyKHN0b3JlLCBpdC0+a2V5LCB2ODo6UGVyc2lzdGVu
dDxWYWx1ZVR5cGU+KGl0LT52YWx1ZSkpOwogICAgICAgICAgICAgdmlzaXRvci0+ZW5kTWFwKCk7
CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhH
Q0NvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xs
ZXIuY3BwCmluZGV4IDJhODgyZGM3NmU0ZWRlM2YxMzI0YzQ5ZjQ2ZmJkOTBkZDM3YjdhODguLmMy
YWI3NGQ3MWNiOGQ2Y2ViNjJlOTQ2Njc1MzI2ZmM0YTM4Mjc4YjYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9WOEdDQ29udHJvbGxlci5jcHAKQEAgLTEwMCw5ICsxMDAsOSBAQCBz
dGF0aWMgdm9pZCBlbnVtZXJhdGVHbG9iYWxIYW5kbGVzKCkKIHsKICAgICBHbG9iYWxIYW5kbGVN
YXAmIGdsb2JhbEhhbmRsZU1hcCA9IGN1cnJlbnRHbG9iYWxIYW5kbGVNYXAoKTsKICAgICBmb3Ig
KEdsb2JhbEhhbmRsZU1hcDo6aXRlcmF0b3IgaXQgPSBnbG9iYWxIYW5kbGVNYXAuYmVnaW4oKSwg
ZW5kID0gZ2xvYmFsSGFuZGxlTWFwLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAg
R2xvYmFsSGFuZGxlSW5mbyogaW5mbyA9IGl0LT5zZWNvbmQ7CisgICAgICAgIEdsb2JhbEhhbmRs
ZUluZm8qIGluZm8gPSBpdC0+dmFsdWU7CiAgICAgICAgIFVOVVNFRF9QQVJBTShpbmZvKTsKLSAg
ICAgICAgdjg6OlZhbHVlKiBoYW5kbGUgPSBpdC0+Zmlyc3Q7CisgICAgICAgIHY4OjpWYWx1ZSog
aGFuZGxlID0gaXQtPmtleTsKICAgICAgICAgVU5VU0VEX1BBUkFNKGhhbmRsZSk7CiAgICAgfQog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQZXJDb250ZXh0RGF0
YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFBlckNvbnRleHREYXRhLmNwcApp
bmRleCBlNTcwMjliZmQ3MjRiODk2NTU2NjVlZDFiNjVkZTIxNDU0NjgyMDE0Li42MzVmZjIzNzFm
Yzk0MTg5ZjAzNGUzM2VmZTcyZTk3NmY5ZmQxYTMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9WOFBlckNvbnRleHREYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9WOFBlckNvbnRleHREYXRhLmNwcApAQCAtNDAsNyArNDAsNyBAQCB2b2lkIFY4
UGVyQ29udGV4dERhdGE6OmRpc3Bvc2UoKQogICAgIHsKICAgICAgICAgV3JhcHBlckJvaWxlcnBs
YXRlTWFwOjppdGVyYXRvciBpdCA9IG1fd3JhcHBlckJvaWxlcnBsYXRlcy5iZWdpbigpOwogICAg
ICAgICBmb3IgKDsgaXQgIT0gbV93cmFwcGVyQm9pbGVycGxhdGVzLmVuZCgpOyArK2l0KSB7Ci0g
ICAgICAgICAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyID0gaXQtPnNlY29u
ZDsKKyAgICAgICAgICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBpdC0+
dmFsdWU7CiAgICAgICAgICAgICB3cmFwcGVyLkRpc3Bvc2UoKTsKICAgICAgICAgfQogICAgICAg
ICBtX3dyYXBwZXJCb2lsZXJwbGF0ZXMuY2xlYXIoKTsKQEAgLTQ5LDcgKzQ5LDcgQEAgdm9pZCBW
OFBlckNvbnRleHREYXRhOjpkaXNwb3NlKCkKICAgICB7CiAgICAgICAgIENvbnN0cnVjdG9yTWFw
OjppdGVyYXRvciBpdCA9IG1fY29uc3RydWN0b3JNYXAuYmVnaW4oKTsKICAgICAgICAgZm9yICg7
IGl0ICE9IG1fY29uc3RydWN0b3JNYXAuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgICAgIHY4OjpQ
ZXJzaXN0ZW50PHY4OjpGdW5jdGlvbj4gd3JhcHBlciA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAg
ICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb24+IHdyYXBwZXIgPSBpdC0+dmFsdWU7CiAgICAg
ICAgICAgICB3cmFwcGVyLkRpc3Bvc2UoKTsKICAgICAgICAgfQogICAgICAgICBtX2NvbnN0cnVj
dG9yTWFwLmNsZWFyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9u
cHJ1bnRpbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvbnBydW50aW1lLmNwcApp
bmRleCA4ZDgwY2Y5MzMxODZlODU0N2MxODUxODNkN2U3NDg0YmNlMWU4NGEzLi4yYjAzNjdjZDE1
ZjJhNGZiMTEzZDRjYzBiZjc2N2VjOGNmMWIwYTVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9ucHJ1bnRpbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L25wcnVudGltZS5jcHAKQEAgLTE2NCw3ICsxNjQsNyBAQCBOUElkZW50aWZpZXIgX05QTl9H
ZXRTdHJpbmdJZGVudGlmaWVyKGNvbnN0IE5QVVRGOCogbmFtZSkKICAgICAgICAgU3RyaW5nSWRl
bnRpZmllck1hcCogaWRlbnRNYXAgPSBnZXRTdHJpbmdJZGVudGlmaWVyTWFwKCk7CiAgICAgICAg
IFN0cmluZ0lkZW50aWZpZXJNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBpZGVudE1hcC0+ZmluZChrZXkp
OwogICAgICAgICBpZiAoaXRlciAhPSBpZGVudE1hcC0+ZW5kKCkpCi0gICAgICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8TlBJZGVudGlmaWVyPihpdGVyLT5zZWNvbmQpOworICAgICAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PE5QSWRlbnRpZmllcj4oaXRlci0+dmFsdWUpOwogCiAgICAgICAg
IHNpemVfdCBuYW1lTGVuID0ga2V5Lm1fbGVuZ3RoOwogCkBAIC0yMTEsNyArMjExLDcgQEAgTlBJ
ZGVudGlmaWVyIF9OUE5fR2V0SW50SWRlbnRpZmllcihpbnQzMl90IGludElkKQogICAgIEludElk
ZW50aWZpZXJNYXAqIGlkZW50TWFwID0gZ2V0SW50SWRlbnRpZmllck1hcCgpOwogICAgIEludElk
ZW50aWZpZXJNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBpZGVudE1hcC0+ZmluZChpbnRJZCk7CiAgICAg
aWYgKGl0ZXIgIT0gaWRlbnRNYXAtPmVuZCgpKQotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
TlBJZGVudGlmaWVyPihpdGVyLT5zZWNvbmQpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
TlBJZGVudGlmaWVyPihpdGVyLT52YWx1ZSk7CiAKICAgICAvLyBXZSBuZXZlciByZWxlYXNlIGlk
ZW50aWZpZXJzLCBzbyB0aGlzIGRpY3Rpb25hcnkgd2lsbCBncm93LgogICAgIFByaXZhdGVJZGVu
dGlmaWVyKiBpZGVudGlmaWVyID0gcmVpbnRlcnByZXRfY2FzdDxQcml2YXRlSWRlbnRpZmllcio+
KG1hbGxvYyhzaXplb2YoUHJpdmF0ZUlkZW50aWZpZXIpKSk7CkBAIC0zODgsNyArMzg4LDcgQEAg
dm9pZCBfTlBOX1JlZ2lzdGVyT2JqZWN0KE5QT2JqZWN0KiBucE9iamVjdCwgTlBPYmplY3QqIG93
bmVyKQogICAgICAgICBOUE9iamVjdE1hcDo6aXRlcmF0b3Igb3duZXJFbnRyeSA9IGxpdmVPYmpl
Y3RNYXAoKS5maW5kKG93bmVyKTsKICAgICAgICAgTlBPYmplY3QqIHBhcmVudCA9IDA7CiAgICAg
ICAgIGlmIChsaXZlT2JqZWN0TWFwKCkuZW5kKCkgIT0gb3duZXJFbnRyeSkKLSAgICAgICAgICAg
IHBhcmVudCA9IG93bmVyRW50cnktPnNlY29uZDsKKyAgICAgICAgICAgIHBhcmVudCA9IG93bmVy
RW50cnktPnZhbHVlOwogCiAgICAgICAgIGlmIChwYXJlbnQpCiAgICAgICAgICAgICBvd25lciA9
IHBhcmVudDsKQEAgLTQwOCw3ICs0MDgsNyBAQCB2b2lkIF9OUE5fVW5yZWdpc3Rlck9iamVjdChO
UE9iamVjdCogbnBPYmplY3QpCiAKICAgICBOUE9iamVjdCogb3duZXIgPSAwOwogICAgIGlmIChs
aXZlT2JqZWN0TWFwKCkuZmluZChucE9iamVjdCkgIT0gbGl2ZU9iamVjdE1hcCgpLmVuZCgpKQot
ICAgICAgICBvd25lciA9IGxpdmVPYmplY3RNYXAoKS5maW5kKG5wT2JqZWN0KS0+c2Vjb25kOwor
ICAgICAgICBvd25lciA9IGxpdmVPYmplY3RNYXAoKS5maW5kKG5wT2JqZWN0KS0+dmFsdWU7CiAK
ICAgICBpZiAoIW93bmVyKSB7CiAgICAgICAgIC8vIFVucmVnaXN0ZXJpbmcgYSBvd25lciBvYmpl
Y3Q7IGFsc28gdW5yZWdpc3RlciBpdCdzIGRlc2NlbmRhbnRzLgpAQCAtNDQzLDcgKzQ0Myw3IEBA
IHZvaWQgX05QTl9VbnJlZ2lzdGVyT2JqZWN0KE5QT2JqZWN0KiBucE9iamVjdCkKICAgICB9IGVs
c2UgewogICAgICAgICBOUFJvb3RPYmplY3RNYXA6Oml0ZXJhdG9yIG93bmVyRW50cnkgPSByb290
T2JqZWN0TWFwKCkuZmluZChvd25lcik7CiAgICAgICAgIGlmIChvd25lckVudHJ5ICE9IHJvb3RP
YmplY3RNYXAoKS5lbmQoKSkgewotICAgICAgICAgICAgTlBPYmplY3RTZXQqIGxpc3QgPSBvd25l
ckVudHJ5LT5zZWNvbmQ7CisgICAgICAgICAgICBOUE9iamVjdFNldCogbGlzdCA9IG93bmVyRW50
cnktPnZhbHVlOwogICAgICAgICAgICAgQVNTRVJUKGxpc3QtPmZpbmQobnBPYmplY3QpICE9IGxp
c3QtPmVuZCgpKTsKICAgICAgICAgICAgIGxpc3QtPnJlbW92ZShucE9iamVjdCk7CiAgICAgICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9JZGVudGlmaWVyUmVwLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9JZGVudGlmaWVyUmVwLmNwcAppbmRleCAyYWNmMTQxNTNk
MWRiOWUxMmI3MjU1OGE1Mzg4ZDk4NmZmOGE1ZTg1Li4xZGY1OGE5ZTQxNTgxYzNiZWMzMTUxZmYy
MWJjZWFhMjQ3MmRjMWY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvSWRlbnRp
ZmllclJlcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL0lkZW50aWZpZXJSZXAuY3Bw
CkBAIC02OSwxMyArNjksMTMgQEAgSWRlbnRpZmllclJlcCogSWRlbnRpZmllclJlcDo6Z2V0KGlu
dCBpbnRJRCkKICAgICAKICAgICBJbnRJZGVudGlmaWVyTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0g
aW50SWRlbnRpZmllck1hcCgpLmFkZChpbnRJRCwgMCk7CiAgICAgaWYgKHJlc3VsdC5pc05ld0Vu
dHJ5KSB7Ci0gICAgICAgIEFTU0VSVCghcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOwotICAgICAg
ICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IG5ldyBJZGVudGlmaWVyUmVwKGludElEKTsKKyAg
ICAgICAgQVNTRVJUKCFyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKKyAgICAgICAgcmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZSA9IG5ldyBJZGVudGlmaWVyUmVwKGludElEKTsKICAgICAgICAgCi0gICAg
ICAgIGlkZW50aWZpZXJTZXQoKS5hZGQocmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOworICAgICAg
ICBpZGVudGlmaWVyU2V0KCkuYWRkKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwogICAgIH0KICAg
ICAKLSAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgcmV0dXJuIHJlc3Vs
dC5pdGVyYXRvci0+dmFsdWU7CiB9CiAKIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8U3RyaW5nSW1w
bD4sIElkZW50aWZpZXJSZXAqPiBTdHJpbmdJZGVudGlmaWVyTWFwOwpAQCAtOTUsMTMgKzk1LDEz
IEBAIElkZW50aWZpZXJSZXAqIElkZW50aWZpZXJSZXA6OmdldChjb25zdCBjaGFyKiBuYW1lKQog
ICAgIFVTdHJpbmcgc3RyaW5nID0gc3RyaW5nVG9VU3RyaW5nKFN0cmluZzo6ZnJvbVVURjhXaXRo
TGF0aW4xRmFsbGJhY2sobmFtZSwgc3RybGVuKG5hbWUpKSk7CiAgICAgU3RyaW5nSWRlbnRpZmll
ck1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IHN0cmluZ0lkZW50aWZpZXJNYXAoKS5hZGQoc3RyaW5n
LmltcGwoKSwgMCk7CiAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIEFTU0VS
VCghcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOwotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNl
Y29uZCA9IG5ldyBJZGVudGlmaWVyUmVwKG5hbWUpOworICAgICAgICBBU1NFUlQoIXJlc3VsdC5p
dGVyYXRvci0+dmFsdWUpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gbmV3IElk
ZW50aWZpZXJSZXAobmFtZSk7CiAgICAgICAgIAotICAgICAgICBpZGVudGlmaWVyU2V0KCkuYWRk
KHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKKyAgICAgICAgaWRlbnRpZmllclNldCgpLmFkZChy
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKICAgICB9CiAgICAgCi0gICAgcmV0dXJuIHJlc3VsdC5p
dGVyYXRvci0+c2Vjb25kOworICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogfQog
CiBib29sIElkZW50aWZpZXJSZXA6OmlzVmFsaWQoSWRlbnRpZmllclJlcCogaWRlbnRpZmllcikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9OUF9qc29iamVjdC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9icmlkZ2UvTlBfanNvYmplY3QuY3BwCmluZGV4IDYxZTM2Nzk1NjFhNjNlNGUz
Y2Y1YmU0ZDA4OTY3MjMxMzdmNjMyYzcuLjYyZWJkMjM3NmVjOTFlY2RlNjUzOTU4NjI2YTA5YWVm
ZDM5NzNiZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9OUF9qc29iamVjdC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL05QX2pzb2JqZWN0LmNwcApAQCAtNjUsOCAr
NjUsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBpdGVyID0gbV9tYXAuYWRkKHJvb3RPYmplY3Qs
IEpTVG9OUE9iamVjdE1hcCgpKS5pdGVyYXRvcjsKICAgICAgICAgfQogCi0gICAgICAgIEFTU0VS
VChpdGVyLT5zZWNvbmQuZmluZChqc09iamVjdCkgPT0gaXRlci0+c2Vjb25kLmVuZCgpKTsKLSAg
ICAgICAgaXRlci0+c2Vjb25kLmFkZChqc09iamVjdCwgbnBPYmplY3QpOworICAgICAgICBBU1NF
UlQoaXRlci0+dmFsdWUuZmluZChqc09iamVjdCkgPT0gaXRlci0+dmFsdWUuZW5kKCkpOworICAg
ICAgICBpdGVyLT52YWx1ZS5hZGQoanNPYmplY3QsIG5wT2JqZWN0KTsKICAgICB9CiAKICAgICB2
b2lkIHJlbW92ZShSb290T2JqZWN0KiByb290T2JqZWN0KQpAQCAtODAsOSArODAsOSBAQCBwdWJs
aWM6CiAgICAgewogICAgICAgICBIYXNoTWFwPFJvb3RPYmplY3QqLCBKU1RvTlBPYmplY3RNYXA+
OjppdGVyYXRvciBpdGVyID0gbV9tYXAuZmluZChyb290T2JqZWN0KTsKICAgICAgICAgQVNTRVJU
KGl0ZXIgIT0gbV9tYXAuZW5kKCkpOwotICAgICAgICBBU1NFUlQoaXRlci0+c2Vjb25kLmZpbmQo
anNPYmplY3QpICE9IGl0ZXItPnNlY29uZC5lbmQoKSk7CisgICAgICAgIEFTU0VSVChpdGVyLT52
YWx1ZS5maW5kKGpzT2JqZWN0KSAhPSBpdGVyLT52YWx1ZS5lbmQoKSk7CiAKLSAgICAgICAgaXRl
ci0+c2Vjb25kLnJlbW92ZShqc09iamVjdCk7CisgICAgICAgIGl0ZXItPnZhbHVlLnJlbW92ZShq
c09iamVjdCk7CiAgICAgfQogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YnJpZGdlL2puaS9qc2MvSmF2YUNsYXNzSlNDLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9q
bmkvanNjL0phdmFDbGFzc0pTQy5jcHAKaW5kZXggYWViNDAyMGJkODRhMjM3YjllYzFjMGFiNzZh
OWY2ZmZiNmU4Yjk3NS4uYTYwODAxZTU2Mjk0YzcyZjhlMmY3NDY2ZTQ0MmI2MWNkZDg0ZWVmZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YUNsYXNzSlNDLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhQ2xhc3NKU0MuY3BwCkBA
IC0xMDcsNyArMTA3LDcgQEAgSmF2YUNsYXNzOjp+SmF2YUNsYXNzKCkKIAogICAgIE1ldGhvZExp
c3RNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fbWV0aG9kcy5lbmQoKTsKICAgICBmb3IgKE1l
dGhvZExpc3RNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9tZXRob2RzLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgewotICAgICAgICBjb25zdCBNZXRob2RMaXN0KiBtZXRob2RMaXN0ID0gaXQt
PnNlY29uZDsKKyAgICAgICAgY29uc3QgTWV0aG9kTGlzdCogbWV0aG9kTGlzdCA9IGl0LT52YWx1
ZTsKICAgICAgICAgZGVsZXRlQWxsVmFsdWVzKCptZXRob2RMaXN0KTsKICAgICAgICAgZGVsZXRl
IG1ldGhvZExpc3Q7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0
L3F0X2luc3RhbmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9pbnN0YW5jZS5j
cHAKaW5kZXggYjlhMzRhYzMwYjdmYzNkNzU0MzZjMWIzODkzMjE2NDAxODI3OGVlNi4uMmViNGEx
MGY1YmY2YTA3MjlhNzAxYjA1ODc3ZWUwZjRmYWNlMmNiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYnJpZGdlL3F0L3F0X2luc3RhbmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9icmlk
Z2UvcXQvcXRfaW5zdGFuY2UuY3BwCkBAIC03OCw4ICs3OCw4IEBAIHZvaWQgV2Vha01hcDo6c2V0
KEpTQ29udGV4dFJlZiBjb250ZXh0LCB2b2lkICprZXksIEpTT2JqZWN0UmVmIG9iamVjdCkKICAg
ICAgICAgSlNDb250ZXh0R3JvdXBSZWYgZ3JvdXAgPSBKU0NvbnRleHRHZXRHcm91cChjb250ZXh0
KTsKICAgICAgICAgV2Vha01hcFNldDo6QWRkUmVzdWx0IGVudHJ5ID0gd2Vha01hcHMuYWRkKGdy
b3VwLCAwKTsKICAgICAgICAgaWYgKGVudHJ5LmlzTmV3RW50cnkpCi0gICAgICAgICAgICBlbnRy
eS5pdGVyYXRvci0+c2Vjb25kID0gYWRvcHRSZWYobmV3IFdlYWtNYXBJbXBsKGdyb3VwKSk7Ci0g
ICAgICAgIG1faW1wbCA9IGVudHJ5Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgICAgICBlbnRy
eS5pdGVyYXRvci0+dmFsdWUgPSBhZG9wdFJlZihuZXcgV2Vha01hcEltcGwoZ3JvdXApKTsKKyAg
ICAgICAgbV9pbXBsID0gZW50cnkuaXRlcmF0b3ItPnZhbHVlOwogICAgIH0KICAgICBKU1dlYWtP
YmplY3RNYXBTZXQobV9pbXBsLT5tX2NvbnRleHQsIG1faW1wbC0+bV9tYXAsIGtleSwgb2JqZWN0
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX3Jvb3QuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfcm9vdC5jcHAKaW5kZXggOWI2MjI0YThi
NTYwZmM1ZTYwZTE1ODllNTc5ZDE0MjU0OTcyOTEzNC4uNzRkODMxOTIxZjIxOWI4YjczMzM2NzU5
MTVlNDFiZGMxN2RkZmRjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRp
bWVfcm9vdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfcm9vdC5jcHAK
QEAgLTEwNSw3ICsxMDUsNyBAQCB2b2lkIFJvb3RPYmplY3Q6OmludmFsaWRhdGUoKQogICAgIHsK
ICAgICAgICAgSGFzaE1hcDxSdW50aW1lT2JqZWN0KiwgSlNDOjpXZWFrPFJ1bnRpbWVPYmplY3Q+
ID46Oml0ZXJhdG9yIGVuZCA9IG1fcnVudGltZU9iamVjdHMuZW5kKCk7CiAgICAgICAgIGZvciAo
SGFzaE1hcDxSdW50aW1lT2JqZWN0KiwgSlNDOjpXZWFrPFJ1bnRpbWVPYmplY3Q+ID46Oml0ZXJh
dG9yIGl0ID0gbV9ydW50aW1lT2JqZWN0cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAg
ICAgICAgICAgIFJ1bnRpbWVPYmplY3QqIHJ1bnRpbWVPYmplY3QgPSBpdC0+c2Vjb25kLmdldCgp
OworICAgICAgICAgICAgUnVudGltZU9iamVjdCogcnVudGltZU9iamVjdCA9IGl0LT52YWx1ZS5n
ZXQoKTsKICAgICAgICAgICAgIGlmICghcnVudGltZU9iamVjdCkgLy8gU2tpcCB6b21iaWVzLgog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgcnVudGltZU9iamVjdC0+aW52
YWxpZGF0ZSgpOwpAQCAtMTI5LDcgKzEyOSw3IEBAIHZvaWQgUm9vdE9iamVjdDo6aW52YWxpZGF0
ZSgpCiAKICAgICBQcm90ZWN0Q291bnRTZXQ6Oml0ZXJhdG9yIGVuZCA9IG1fcHJvdGVjdENvdW50
U2V0LmVuZCgpOwogICAgIGZvciAoUHJvdGVjdENvdW50U2V0OjppdGVyYXRvciBpdCA9IG1fcHJv
dGVjdENvdW50U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgSlNDOjpnY1Vu
cHJvdGVjdChpdC0+Zmlyc3QpOworICAgICAgICBKU0M6OmdjVW5wcm90ZWN0KGl0LT5rZXkpOwog
ICAgIG1fcHJvdGVjdENvdW50U2V0LmNsZWFyKCk7CiAKICAgICByb290T2JqZWN0U2V0KCktPnJl
bW92ZSh0aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYW52YXNWYWx1
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FudmFzVmFsdWUuY3BwCmluZGV4IDYzNzc3
YmI0ZGRkZGEwOTc2MTZmOGZhMGFiYzFiYTVjNzdmYjk0NTUuLmM5MmQxMzM2ZDg2MDYyMDVmYzAz
N2QwZmM1OWZkM2EwNzM1NDIxNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1ND
YW52YXNWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbnZhc1ZhbHVlLmNw
cApAQCAtNTAsMTQgKzUwLDE0IEBAIHZvaWQgQ1NTQ2FudmFzVmFsdWU6OmNhbnZhc0NoYW5nZWQo
SFRNTENhbnZhc0VsZW1lbnQqLCBjb25zdCBGbG9hdFJlY3QmIGNoYW5nZWRSCiAgICAgSW50UmVj
dCBpbWFnZUNoYW5nZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGNoYW5nZWRSZWN0KTsKICAgICBS
ZW5kZXJPYmplY3RTaXplQ291bnRNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGNsaWVudHMoKS5l
bmQoKTsKICAgICBmb3IgKFJlbmRlck9iamVjdFNpemVDb3VudE1hcDo6Y29uc3RfaXRlcmF0b3Ig
Y3VyciA9IGNsaWVudHMoKS5iZWdpbigpOyBjdXJyICE9IGVuZDsgKytjdXJyKQotICAgICAgICBj
b25zdF9jYXN0PFJlbmRlck9iamVjdCo+KGN1cnItPmZpcnN0KS0+aW1hZ2VDaGFuZ2VkKHN0YXRp
Y19jYXN0PFdyYXBwZWRJbWFnZVB0cj4odGhpcyksICZpbWFnZUNoYW5nZVJlY3QpOworICAgICAg
ICBjb25zdF9jYXN0PFJlbmRlck9iamVjdCo+KGN1cnItPmtleSktPmltYWdlQ2hhbmdlZChzdGF0
aWNfY2FzdDxXcmFwcGVkSW1hZ2VQdHI+KHRoaXMpLCAmaW1hZ2VDaGFuZ2VSZWN0KTsKIH0KIAog
dm9pZCBDU1NDYW52YXNWYWx1ZTo6Y2FudmFzUmVzaXplZChIVE1MQ2FudmFzRWxlbWVudCopCiB7
CiAgICAgUmVuZGVyT2JqZWN0U2l6ZUNvdW50TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBjbGll
bnRzKCkuZW5kKCk7CiAgICAgZm9yIChSZW5kZXJPYmplY3RTaXplQ291bnRNYXA6OmNvbnN0X2l0
ZXJhdG9yIGN1cnIgPSBjbGllbnRzKCkuYmVnaW4oKTsgY3VyciAhPSBlbmQ7ICsrY3VycikKLSAg
ICAgICAgY29uc3RfY2FzdDxSZW5kZXJPYmplY3QqPihjdXJyLT5maXJzdCktPmltYWdlQ2hhbmdl
ZChzdGF0aWNfY2FzdDxXcmFwcGVkSW1hZ2VQdHI+KHRoaXMpKTsKKyAgICAgICAgY29uc3RfY2Fz
dDxSZW5kZXJPYmplY3QqPihjdXJyLT5rZXkpLT5pbWFnZUNoYW5nZWQoc3RhdGljX2Nhc3Q8V3Jh
cHBlZEltYWdlUHRyPih0aGlzKSk7CiB9CiAKIHZvaWQgQ1NTQ2FudmFzVmFsdWU6OmNhbnZhc0Rl
c3Ryb3llZChIVE1MQ2FudmFzRWxlbWVudCogZWxlbWVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKaW5kZXggMDcwOGMyM2JhYjhk
NTBhOGJlOTFkYTEzM2Q4NDczMzg4YzgyN2ViOC4uM2QzZmNlOTg5NTJjODViZWViZjVmNjU0OWYw
YmY4MTJlMTI3YTk3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVk
U3R5bGVEZWNsYXJhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVk
U3R5bGVEZWNsYXJhdGlvbi5jcHAKQEAgLTEyNzMsOCArMTI3Myw4IEBAIHN0YXRpYyBQYXNzUmVm
UHRyPENTU1ZhbHVlPiBjb3VudGVyVG9DU1NWYWx1ZShjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUs
IENTU1Byb3BlCiAKICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBsaXN0ID0gQ1NTVmFsdWVMaXN0
OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOwogICAgIGZvciAoQ291bnRlckRpcmVjdGl2ZU1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IG1hcC0+ZW5kKCk7ICsraXQp
IHsKLSAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKGl0LT5m
aXJzdC5nZXQoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpKTsKLSAgICAgICAgc2hv
cnQgbnVtYmVyID0gcHJvcGVydHlJRCA9PSBDU1NQcm9wZXJ0eUNvdW50ZXJJbmNyZW1lbnQgPyBp
dC0+c2Vjb25kLm1faW5jcmVtZW50VmFsdWUgOiBpdC0+c2Vjb25kLm1fcmVzZXRWYWx1ZTsKKyAg
ICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKGl0LT5rZXkuZ2V0
KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKSk7CisgICAgICAgIHNob3J0IG51bWJl
ciA9IHByb3BlcnR5SUQgPT0gQ1NTUHJvcGVydHlDb3VudGVySW5jcmVtZW50ID8gaXQtPnZhbHVl
Lm1faW5jcmVtZW50VmFsdWUgOiBpdC0+dmFsdWUubV9yZXNldFZhbHVlOwogICAgICAgICBsaXN0
LT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoKGRvdWJsZSludW1iZXIsIENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7CiAgICAgfQogICAgIHJldHVybiBsaXN0LnJlbGVh
c2UoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDcm9zc2ZhZGVWYWx1ZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Jvc3NmYWRlVmFsdWUuY3BwCmluZGV4IDVlZDdk
YTE4ZDNjYjllOWFkODBjMmJlNzgxODI2MmVjMzgyYjRlMjkuLjgyNzg4M2IxMzU5ZjljNTg0MDZl
YjRlOGFlZGFmMjM1NTk0ZjIzYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1ND
cm9zc2ZhZGVWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Nyb3NzZmFkZVZh
bHVlLmNwcApAQCAtMTc1LDcgKzE3NSw3IEBAIHZvaWQgQ1NTQ3Jvc3NmYWRlVmFsdWU6OmNyb3Nz
ZmFkZUNoYW5nZWQoY29uc3QgSW50UmVjdCYpCiB7CiAgICAgUmVuZGVyT2JqZWN0U2l6ZUNvdW50
TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBjbGllbnRzKCkuZW5kKCk7CiAgICAgZm9yIChSZW5k
ZXJPYmplY3RTaXplQ291bnRNYXA6OmNvbnN0X2l0ZXJhdG9yIGN1cnIgPSBjbGllbnRzKCkuYmVn
aW4oKTsgY3VyciAhPSBlbmQ7ICsrY3VycikgewotICAgICAgICBSZW5kZXJPYmplY3QqIGNsaWVu
dCA9IGNvbnN0X2Nhc3Q8UmVuZGVyT2JqZWN0Kj4oY3Vyci0+Zmlyc3QpOworICAgICAgICBSZW5k
ZXJPYmplY3QqIGNsaWVudCA9IGNvbnN0X2Nhc3Q8UmVuZGVyT2JqZWN0Kj4oY3Vyci0+a2V5KTsK
ICAgICAgICAgY2xpZW50LT5pbWFnZUNoYW5nZWQoc3RhdGljX2Nhc3Q8V3JhcHBlZEltYWdlUHRy
Pih0aGlzKSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Zv
bnRGYWNlU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5j
cHAKaW5kZXggZGQ5MDRkMzdmYjk1NGU0NGRiYTY1Mzg3NjczNTgzMTE5OGZhZDNkNy4uY2U0NTM2
N2FjMzMyMzcyYTBmYjllYzhjNWE1MmZiOWYwODg5ZWRmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3NzL0NTU0ZvbnRGYWNlU291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTRm9udEZhY2VTb3VyY2UuY3BwCkBAIC0xMTQsNyArMTE0LDcgQEAgU2ltcGxlRm9udERhdGEq
IENTU0ZvbnRGYWNlU291cmNlOjpnZXRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZv
bnREZXNjcmkKICAgICB1bnNpZ25lZCBoYXNoS2V5ID0gKGZvbnREZXNjcmlwdGlvbi5jb21wdXRl
ZFBpeGVsU2l6ZSgpICsgMSkgPDwgNiB8IGZvbnREZXNjcmlwdGlvbi53aWR0aFZhcmlhbnQoKSA8
PCA0CiAgICAgICAgICAgICAgICAgICAgICAgIHwgKGZvbnREZXNjcmlwdGlvbi50ZXh0T3JpZW50
YXRpb24oKSA9PSBUZXh0T3JpZW50YXRpb25VcHJpZ2h0ID8gOCA6IDApIHwgKGZvbnREZXNjcmlw
dGlvbi5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsID8gNCA6IDApIHwgKHN5bnRoZXRpY0JvbGQg
PyAyIDogMCkgfCAoc3ludGhldGljSXRhbGljID8gMSA6IDApOwogCi0gICAgU2ltcGxlRm9udERh
dGEqJiBjYWNoZWREYXRhID0gbV9mb250RGF0YVRhYmxlLmFkZChoYXNoS2V5LCAwKS5pdGVyYXRv
ci0+c2Vjb25kOworICAgIFNpbXBsZUZvbnREYXRhKiYgY2FjaGVkRGF0YSA9IG1fZm9udERhdGFU
YWJsZS5hZGQoaGFzaEtleSwgMCkuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmIChjYWNoZWREYXRh
KQogICAgICAgICByZXR1cm4gY2FjaGVkRGF0YTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNl
bGVjdG9yLmNwcAppbmRleCBjYzVmZmEwNmNkMGU1MDE0NjRjMDcxMDNhYmZkZGExYWY1YTNlYWNj
Li4xNTE3Yjc2Y2FkNWVkYzVlZjBiZmE0NTE5ZTlkYjlmMWU1MmNjMmY2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmNwcApAQCAtMjg1LDcgKzI4NSw3IEBAIHZvaWQgQ1NTRm9u
dFNlbGVjdG9yOjphZGRGb250RmFjZVJ1bGUoY29uc3QgU3R5bGVSdWxlRm9udEZhY2UqIGZvbnRG
YWNlUnVsZSkKICAgICAgICAgaWYgKGZhbWlseU5hbWUuaXNFbXB0eSgpKQogICAgICAgICAgICAg
Y29udGludWU7CiAKLSAgICAgICAgT3duUHRyPFZlY3RvcjxSZWZQdHI8Q1NTRm9udEZhY2U+ID4g
PiYgZmFtaWx5Rm9udEZhY2VzID0gbV9mb250RmFjZXMuYWRkKGZhbWlseU5hbWUsIG51bGxwdHIp
Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgIE93blB0cjxWZWN0b3I8UmVmUHRyPENTU0ZvbnRG
YWNlPiA+ID4mIGZhbWlseUZvbnRGYWNlcyA9IG1fZm9udEZhY2VzLmFkZChmYW1pbHlOYW1lLCBu
dWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgIGlmICghZmFtaWx5Rm9udEZhY2VzKSB7
CiAgICAgICAgICAgICBmYW1pbHlGb250RmFjZXMgPSBhZG9wdFB0cihuZXcgVmVjdG9yPFJlZlB0
cjxDU1NGb250RmFjZT4gPik7CiAKQEAgLTQ4NywxMyArNDg3LDEzIEBAIEZvbnREYXRhKiBDU1NG
b250U2VsZWN0b3I6OmdldEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2Ny
aXB0aW9uLCBjCiAgICAgICAgIHJldHVybiBmb250RGF0YUZvckdlbmVyaWNGYW1pbHkobV9kb2N1
bWVudCwgZm9udERlc2NyaXB0aW9uLCBmYW1pbHlOYW1lKTsKICAgICB9CiAKLSAgICBPd25QdHI8
SGFzaE1hcDx1bnNpZ25lZCwgUmVmUHRyPENTU1NlZ21lbnRlZEZvbnRGYWNlPiA+ID4mIHNlZ21l
bnRlZEZvbnRGYWNlQ2FjaGUgPSBtX2ZvbnRzLmFkZChmYW1pbHksIG51bGxwdHIpLml0ZXJhdG9y
LT5zZWNvbmQ7CisgICAgT3duUHRyPEhhc2hNYXA8dW5zaWduZWQsIFJlZlB0cjxDU1NTZWdtZW50
ZWRGb250RmFjZT4gPiA+JiBzZWdtZW50ZWRGb250RmFjZUNhY2hlID0gbV9mb250cy5hZGQoZmFt
aWx5LCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCFzZWdtZW50ZWRGb250RmFj
ZUNhY2hlKQogICAgICAgICBzZWdtZW50ZWRGb250RmFjZUNhY2hlID0gYWRvcHRQdHIobmV3IEhh
c2hNYXA8dW5zaWduZWQsIFJlZlB0cjxDU1NTZWdtZW50ZWRGb250RmFjZT4gPik7CiAKICAgICBG
b250VHJhaXRzTWFzayB0cmFpdHNNYXNrID0gZm9udERlc2NyaXB0aW9uLnRyYWl0c01hc2soKTsK
IAotICAgIFJlZlB0cjxDU1NTZWdtZW50ZWRGb250RmFjZT4mIGZhY2UgPSBzZWdtZW50ZWRGb250
RmFjZUNhY2hlLT5hZGQodHJhaXRzTWFzaywgMCkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBSZWZQ
dHI8Q1NTU2VnbWVudGVkRm9udEZhY2U+JiBmYWNlID0gc2VnbWVudGVkRm9udEZhY2VDYWNoZS0+
YWRkKHRyYWl0c01hc2ssIDApLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoIWZhY2UpIHsKICAg
ICAgICAgZmFjZSA9IENTU1NlZ21lbnRlZEZvbnRGYWNlOjpjcmVhdGUodGhpcyk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZUdlbmVyYXRvclZhbHVlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZUdlbmVyYXRvclZhbHVlLmNwcAppbmRleCA2MzA0MGYz
YmU2ZTk4ZGYyYzlkOTUyYzVhZDQ2NDE1NjE5NDU0NGIxLi5hZDZjYmE5MjJhY2FjYjRhMjFhMTE3
NGQ5NThkNTZlZTM0MGJmZmRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1h
Z2VHZW5lcmF0b3JWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlR2Vu
ZXJhdG9yVmFsdWUuY3BwCkBAIC01Nyw3ICs1Nyw3IEBAIHZvaWQgQ1NTSW1hZ2VHZW5lcmF0b3JW
YWx1ZTo6YWRkQ2xpZW50KFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IEludFNpemUmIHNp
CiAgICAgaWYgKGl0ID09IG1fY2xpZW50cy5lbmQoKSkKICAgICAgICAgbV9jbGllbnRzLmFkZChy
ZW5kZXJlciwgU2l6ZUFuZENvdW50KHNpemUsIDEpKTsKICAgICBlbHNlIHsKLSAgICAgICAgU2l6
ZUFuZENvdW50JiBzaXplQ291bnQgPSBpdC0+c2Vjb25kOworICAgICAgICBTaXplQW5kQ291bnQm
IHNpemVDb3VudCA9IGl0LT52YWx1ZTsKICAgICAgICAgKytzaXplQ291bnQuY291bnQ7CiAgICAg
fQogfQpAQCAtNjksNyArNjksNyBAQCB2b2lkIENTU0ltYWdlR2VuZXJhdG9yVmFsdWU6OnJlbW92
ZUNsaWVudChSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogICAgIEFTU0VSVChpdCAhPSBtX2NsaWVu
dHMuZW5kKCkpOwogCiAgICAgSW50U2l6ZSByZW1vdmVkSW1hZ2VTaXplOwotICAgIFNpemVBbmRD
b3VudCYgc2l6ZUNvdW50ID0gaXQtPnNlY29uZDsKKyAgICBTaXplQW5kQ291bnQmIHNpemVDb3Vu
dCA9IGl0LT52YWx1ZTsKICAgICBJbnRTaXplIHNpemUgPSBzaXplQ291bnQuc2l6ZTsKICAgICBp
ZiAoIXNpemUuaXNFbXB0eSgpKSB7CiAgICAgICAgIG1fc2l6ZXMucmVtb3ZlKHNpemUpOwpAQCAt
ODcsNyArODcsNyBAQCBJbWFnZSogQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6Z2V0SW1hZ2UoUmVu
ZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgSW50U2l6ZSYgcwogewogICAgIFJlbmRlck9iamVj
dFNpemVDb3VudE1hcDo6aXRlcmF0b3IgaXQgPSBtX2NsaWVudHMuZmluZChyZW5kZXJlcik7CiAg
ICAgaWYgKGl0ICE9IG1fY2xpZW50cy5lbmQoKSkgewotICAgICAgICBTaXplQW5kQ291bnQmIHNp
emVDb3VudCA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFNpemVBbmRDb3VudCYgc2l6ZUNvdW50ID0g
aXQtPnZhbHVlOwogICAgICAgICBJbnRTaXplIG9sZFNpemUgPSBzaXplQ291bnQuc2l6ZTsKICAg
ICAgICAgaWYgKG9sZFNpemUgIT0gc2l6ZSkgewogICAgICAgICAgICAgUmVmUHRyPENTU0ltYWdl
R2VuZXJhdG9yVmFsdWU+IHByb3RlY3QodGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Nl
Z21lbnRlZEZvbnRGYWNlLmNwcAppbmRleCA5ODM0MjU0NjkyNGY4NjQyYmVmNzAyMGJiMGViYzg2
NDQxNzI1Y2JiLi4xYjc1MzRjMTNmOWJjMzljZDBiMTEyNGIwYzY3NmZmODM0ZWU1YmI1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5jcHAKQEAgLTEwNiw3ICsx
MDYsNyBAQCBGb250RGF0YSogQ1NTU2VnbWVudGVkRm9udEZhY2U6OmdldEZvbnREYXRhKGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aQogICAgIEZvbnRUcmFpdHNNYXNrIGRlc2ly
ZWRUcmFpdHNNYXNrID0gZm9udERlc2NyaXB0aW9uLnRyYWl0c01hc2soKTsKICAgICB1bnNpZ25l
ZCBoYXNoS2V5ID0gKChmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSArIDEpIDw8
IChGb250VHJhaXRzTWFza1dpZHRoICsgMSkpIHwgKChmb250RGVzY3JpcHRpb24ub3JpZW50YXRp
b24oKSA9PSBWZXJ0aWNhbCA/IDEgOiAwKSA8PCBGb250VHJhaXRzTWFza1dpZHRoKSB8IGRlc2ly
ZWRUcmFpdHNNYXNrOwogCi0gICAgU2VnbWVudGVkRm9udERhdGEqJiBmb250RGF0YSA9IG1fZm9u
dERhdGFUYWJsZS5hZGQoaGFzaEtleSwgMCkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBTZWdtZW50
ZWRGb250RGF0YSomIGZvbnREYXRhID0gbV9mb250RGF0YVRhYmxlLmFkZChoYXNoS2V5LCAwKS5p
dGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKGZvbnREYXRhKQogICAgICAgICByZXR1cm4gZm9udERh
dGE7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VsZWN0b3IuY3BwCmluZGV4IGVhYmVlNDkzYTQxYWI3ZTQ0
MjdjZjI4ZmQ3MDM0ODFiMGFkMDg3OWEuLjhkZGE1OGQ1N2FhNzU0N2IyMjVmMDU1MGFkZjcwMTI4
N2UxMmNhMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlbGVjdG9yLmNwcApAQCAtMzc2LDcgKzM3Niw3
IEBAIENTU1NlbGVjdG9yOjpQc2V1ZG9UeXBlIENTU1NlbGVjdG9yOjpwYXJzZVBzZXVkb1R5cGUo
Y29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKQogICAgICAgICByZXR1cm4gUHNldWRvVW5rbm93bjsK
ICAgICBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBDU1NTZWxlY3Rvcjo6UHNldWRvVHlwZT4q
IG5hbWVUb1BzZXVkb1R5cGUgPSBuYW1lVG9Qc2V1ZG9UeXBlTWFwKCk7CiAgICAgSGFzaE1hcDxB
dG9taWNTdHJpbmdJbXBsKiwgQ1NTU2VsZWN0b3I6OlBzZXVkb1R5cGU+OjppdGVyYXRvciBzbG90
ID0gbmFtZVRvUHNldWRvVHlwZS0+ZmluZChuYW1lLmltcGwoKSk7Ci0gICAgcmV0dXJuIHNsb3Qg
PT0gbmFtZVRvUHNldWRvVHlwZS0+ZW5kKCkgPyBQc2V1ZG9Vbmtub3duIDogc2xvdC0+c2Vjb25k
OworICAgIHJldHVybiBzbG90ID09IG5hbWVUb1BzZXVkb1R5cGUtPmVuZCgpID8gUHNldWRvVW5r
bm93biA6IHNsb3QtPnZhbHVlOwogfQogCiBib29sIENTU1NlbGVjdG9yOjppc1Vua25vd25Qc2V1
ZG9UeXBlKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NWYWx1ZVBvb2wuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlUG9v
bC5jcHAKaW5kZXggY2U3NTdiOTMzYjNmNGEzMDJlODcxNjU2OGQwM2UwM2RiZjFiMDc2Yy4uYzE2
ODk5MTlkMTZlZTE2ZjBlZTA3MzE5MTk5NmU5N2M1YzhmYzkwYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvY3NzL0NTU1ZhbHVlUG9vbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1ZhbHVlUG9vbC5jcHAKQEAgLTc4LDggKzc4LDggQEAgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gQ1NTVmFsdWVQb29sOjpjcmVhdGVDb2xvclZhbHVlKHVuc2lnbmVkIHJnYlZhbHVlKQog
ICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gZHVtbXlWYWx1ZTsKICAgICBDb2xvclZhbHVl
Q2FjaGU6OkFkZFJlc3VsdCBlbnRyeSA9IG1fY29sb3JWYWx1ZUNhY2hlLmFkZChyZ2JWYWx1ZSwg
ZHVtbXlWYWx1ZSk7CiAgICAgaWYgKGVudHJ5LmlzTmV3RW50cnkpCi0gICAgICAgIGVudHJ5Lml0
ZXJhdG9yLT5zZWNvbmQgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlQ29sb3IocmdiVmFsdWUp
OwotICAgIHJldHVybiBlbnRyeS5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICBlbnRyeS5pdGVy
YXRvci0+dmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlQ29sb3IocmdiVmFsdWUpOwor
ICAgIHJldHVybiBlbnRyeS5pdGVyYXRvci0+dmFsdWU7CiB9CiAKIFBhc3NSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IENTU1ZhbHVlUG9vbDo6Y3JlYXRlVmFsdWUoZG91YmxlIHZhbHVlLCBDU1NQ
cmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzIHR5cGUpCkBAIC0xMTMsNyArMTEzLDcgQEAgUGFzc1Jl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NTVmFsdWVQb29sOjpjcmVhdGVWYWx1ZShkb3VibGUg
dmFsdWUsIENTU1ByaW1pdGkKIAogUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NTVmFs
dWVQb29sOjpjcmVhdGVGb250RmFtaWx5VmFsdWUoY29uc3QgU3RyaW5nJiBmYW1pbHlOYW1lKQog
ewotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mIHZhbHVlID0gbV9mb250RmFtaWx5VmFs
dWVDYWNoZS5hZGQoZmFtaWx5TmFtZSwgMCkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+JiB2YWx1ZSA9IG1fZm9udEZhbWlseVZhbHVlQ2FjaGUuYWRkKGZh
bWlseU5hbWUsIDApLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoIXZhbHVlKQogICAgICAgICB2
YWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoZmFtaWx5TmFtZSwgQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19TVFJJTkcpOwogICAgIHJldHVybiB2YWx1ZTsKQEAgLTEyNiw3ICsxMjYsNyBA
QCBQYXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4gQ1NTVmFsdWVQb29sOjpjcmVhdGVGb250RmFjZVZh
bHVlKGNvbnN0IEF0b21pY1N0cmluZyYgcwogICAgIGlmIChtX2ZvbnRGYWNlVmFsdWVDYWNoZS5z
aXplKCkgPiBtYXhpbXVtRm9udEZhY2VDYWNoZVNpemUpCiAgICAgICAgIG1fZm9udEZhY2VWYWx1
ZUNhY2hlLmNsZWFyKCk7CiAKLSAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiYgdmFsdWUgPSBtX2Zv
bnRGYWNlVmFsdWVDYWNoZS5hZGQoc3RyaW5nLCAwKS5pdGVyYXRvci0+c2Vjb25kOworICAgIFJl
ZlB0cjxDU1NWYWx1ZUxpc3Q+JiB2YWx1ZSA9IG1fZm9udEZhY2VWYWx1ZUNhY2hlLmFkZChzdHJp
bmcsIDApLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoIXZhbHVlKQogICAgICAgICB2YWx1ZSA9
IENTU1BhcnNlcjo6cGFyc2VGb250RmFjZVZhbHVlKHN0cmluZyk7CiAgICAgcmV0dXJuIHZhbHVl
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1Byb3BlcnR5U2V0Q1NTU3R5bGVEZWNs
YXJhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvUHJvcGVydHlTZXRDU1NTdHlsZURlY2xh
cmF0aW9uLmNwcAppbmRleCA1ZmMyZDM4MDM1NWE5MzhlYTBlZWQ3ZDNlNDQwMTg2ZTRiOTE3Yjc4
Li44MTAxZjI4OTcwN2Q4N2I0MDUxZTg3NWM4YjQ5MzRiOGVlNDA1YzRlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uLmNwcApA
QCAtMzQ2LDcgKzM0Niw3IEBAIENTU1ZhbHVlKiBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRp
b246OmNsb25lQW5kQ2FjaGVGb3JDU1NPTShDU1NWYWx1ZSogaW50ZXJuCiAgICAgaWYgKCFtX2Nz
c29tQ1NTVmFsdWVDbG9uZXMpCiAgICAgICAgIG1fY3Nzb21DU1NWYWx1ZUNsb25lcyA9IGFkb3B0
UHRyKG5ldyBIYXNoTWFwPENTU1ZhbHVlKiwgUmVmUHRyPENTU1ZhbHVlPiA+KTsKICAgICAKLSAg
ICBSZWZQdHI8Q1NTVmFsdWU+JiBjbG9uZWRWYWx1ZSA9IG1fY3Nzb21DU1NWYWx1ZUNsb25lcy0+
YWRkKGludGVybmFsVmFsdWUsIFJlZlB0cjxDU1NWYWx1ZT4oKSkuaXRlcmF0b3ItPnNlY29uZDsK
KyAgICBSZWZQdHI8Q1NTVmFsdWU+JiBjbG9uZWRWYWx1ZSA9IG1fY3Nzb21DU1NWYWx1ZUNsb25l
cy0+YWRkKGludGVybmFsVmFsdWUsIFJlZlB0cjxDU1NWYWx1ZT4oKSkuaXRlcmF0b3ItPnZhbHVl
OwogICAgIGlmICghY2xvbmVkVmFsdWUpCiAgICAgICAgIGNsb25lZFZhbHVlID0gaW50ZXJuYWxW
YWx1ZS0+Y2xvbmVGb3JDU1NPTSgpOwogICAgIHJldHVybiBjbG9uZWRWYWx1ZS5nZXQoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvY3NzL1N0eWxlQnVpbGRlci5jcHAKaW5kZXggNDg2YTRkYmI4MWMxYzVkY2Y5OWEzZGFi
MGQ2OTJjNDA4NjAxY2NjMS4uZmUxZGJmNGJhZmQ1NTYyMDUzZDRiM2E4ODMxOThjMWQ1MmE1MTc2
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlci5jcHAKQEAgLTEwMTQsMjEgKzEwMTQsMjEg
QEAgcHVibGljOgogICAgICAgICB0eXBlZGVmIENvdW50ZXJEaXJlY3RpdmVNYXA6Oml0ZXJhdG9y
IEl0ZXJhdG9yOwogICAgICAgICBJdGVyYXRvciBlbmQgPSBwYXJlbnRNYXAuZW5kKCk7CiAgICAg
ICAgIGZvciAoSXRlcmF0b3IgaXQgPSBwYXJlbnRNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7Ci0gICAgICAgICAgICBDb3VudGVyRGlyZWN0aXZlcyYgZGlyZWN0aXZlcyA9IG1hcC5hZGQo
aXQtPmZpcnN0LCBDb3VudGVyRGlyZWN0aXZlcygpKS5pdGVyYXRvci0+c2Vjb25kOworICAgICAg
ICAgICAgQ291bnRlckRpcmVjdGl2ZXMmIGRpcmVjdGl2ZXMgPSBtYXAuYWRkKGl0LT5rZXksIENv
dW50ZXJEaXJlY3RpdmVzKCkpLml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgICAgIGlmIChjb3Vu
dGVyQmVoYXZpb3IgPT0gUmVzZXQpIHsKLSAgICAgICAgICAgICAgICBkaXJlY3RpdmVzLm1fcmVz
ZXQgPSBpdC0+c2Vjb25kLm1fcmVzZXQ7Ci0gICAgICAgICAgICAgICAgZGlyZWN0aXZlcy5tX3Jl
c2V0VmFsdWUgPSBpdC0+c2Vjb25kLm1fcmVzZXRWYWx1ZTsKKyAgICAgICAgICAgICAgICBkaXJl
Y3RpdmVzLm1fcmVzZXQgPSBpdC0+dmFsdWUubV9yZXNldDsKKyAgICAgICAgICAgICAgICBkaXJl
Y3RpdmVzLm1fcmVzZXRWYWx1ZSA9IGl0LT52YWx1ZS5tX3Jlc2V0VmFsdWU7CiAgICAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8vIEluaGVyaXRpbmcgYSBjb3VudGVyLWluY3Jl
bWVudCBtZWFucyB0YWtpbmcgdGhlIHBhcmVudCdzIGN1cnJlbnQgdmFsdWUgZm9yIHRoZSBjb3Vu
dGVyCiAgICAgICAgICAgICAgICAgLy8gYW5kIGFkZGluZyBpdCB0byBpdHNlbGYuCi0gICAgICAg
ICAgICAgICAgZGlyZWN0aXZlcy5tX2luY3JlbWVudCA9IGl0LT5zZWNvbmQubV9pbmNyZW1lbnQ7
CisgICAgICAgICAgICAgICAgZGlyZWN0aXZlcy5tX2luY3JlbWVudCA9IGl0LT52YWx1ZS5tX2lu
Y3JlbWVudDsKICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzLm1faW5jcmVtZW50VmFsdWUgPSAw
OwogICAgICAgICAgICAgICAgIGlmIChkaXJlY3RpdmVzLm1faW5jcmVtZW50KSB7CiAgICAgICAg
ICAgICAgICAgICAgIGZsb2F0IGluY3JlbWVudFZhbHVlID0gZGlyZWN0aXZlcy5tX2luY3JlbWVu
dFZhbHVlOwotICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzLm1faW5jcmVtZW50VmFsdWUg
PSBjbGFtcFRvSW50ZWdlcihpbmNyZW1lbnRWYWx1ZSArIGl0LT5zZWNvbmQubV9pbmNyZW1lbnRW
YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXMubV9pbmNyZW1lbnRWYWx1ZSA9
IGNsYW1wVG9JbnRlZ2VyKGluY3JlbWVudFZhbHVlICsgaXQtPnZhbHVlLm1faW5jcmVtZW50VmFs
dWUpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGRpcmVj
dGl2ZXMubV9pbmNyZW1lbnQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVz
Lm1faW5jcmVtZW50VmFsdWUgPSBpdC0+c2Vjb25kLm1faW5jcmVtZW50VmFsdWU7CisgICAgICAg
ICAgICAgICAgICAgIGRpcmVjdGl2ZXMubV9pbmNyZW1lbnRWYWx1ZSA9IGl0LT52YWx1ZS5tX2lu
Y3JlbWVudFZhbHVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAg
fQpAQCAtMTA0Niw5ICsxMDQ2LDkgQEAgcHVibGljOgogICAgICAgICBJdGVyYXRvciBlbmQgPSBt
YXAuZW5kKCk7CiAgICAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSBtYXAuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KQogICAgICAgICAgICAgaWYgKGNvdW50ZXJCZWhhdmlvciA9PSBSZXNldCkKLSAg
ICAgICAgICAgICAgICBpdC0+c2Vjb25kLm1fcmVzZXQgPSBmYWxzZTsKKyAgICAgICAgICAgICAg
ICBpdC0+dmFsdWUubV9yZXNldCA9IGZhbHNlOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIGl0LT5zZWNvbmQubV9pbmNyZW1lbnQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBp
dC0+dmFsdWUubV9pbmNyZW1lbnQgPSBmYWxzZTsKIAogICAgICAgICBpbnQgbGVuZ3RoID0gbGlz
dCA/IGxpc3QtPmxlbmd0aCgpIDogMDsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5n
dGg7ICsraSkgewpAQCAtMTA2Miw3ICsxMDYyLDcgQEAgcHVibGljOgogCiAgICAgICAgICAgICBB
dG9taWNTdHJpbmcgaWRlbnRpZmllciA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4o
cGFpci0+Zmlyc3QoKSktPmdldFN0cmluZ1ZhbHVlKCk7CiAgICAgICAgICAgICBpbnQgdmFsdWUg
PSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHBhaXItPnNlY29uZCgpKS0+Z2V0SW50
VmFsdWUoKTsKLSAgICAgICAgICAgIENvdW50ZXJEaXJlY3RpdmVzJiBkaXJlY3RpdmVzID0gbWFw
LmFkZChpZGVudGlmaWVyLmltcGwoKSwgQ291bnRlckRpcmVjdGl2ZXMoKSkuaXRlcmF0b3ItPnNl
Y29uZDsKKyAgICAgICAgICAgIENvdW50ZXJEaXJlY3RpdmVzJiBkaXJlY3RpdmVzID0gbWFwLmFk
ZChpZGVudGlmaWVyLmltcGwoKSwgQ291bnRlckRpcmVjdGl2ZXMoKSkuaXRlcmF0b3ItPnZhbHVl
OwogICAgICAgICAgICAgaWYgKGNvdW50ZXJCZWhhdmlvciA9PSBSZXNldCkgewogICAgICAgICAg
ICAgICAgIGRpcmVjdGl2ZXMubV9yZXNldCA9IHRydWU7CiAgICAgICAgICAgICAgICAgZGlyZWN0
aXZlcy5tX3Jlc2V0VmFsdWUgPSB2YWx1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZVJlc29sdmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNw
cAppbmRleCAxNWRlM2E3OThjMDUxNDU2NjQ5NTY4NjM0NTIyY2UyYjE3ZTA0Yzg3Li45NjUxMjc5
YWVmMzBmZWU0ZTMxZTllMTAxZDgxZTQ0MDE2OTcyMjVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
UmVzb2x2ZXIuY3BwCkBAIC00OTgsNyArNDk4LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpjb2xs
ZWN0RmVhdHVyZXMoKQogICAgIG1fZmVhdHVyZXMuYWRkKG1fYXV0aG9yU3R5bGUtPmZlYXR1cmVz
KCkpOwogI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCiAgICAgZm9yIChTY29wZWRSdWxlU2V0TWFw
OjppdGVyYXRvciBpdCA9IG1fc2NvcGVkQXV0aG9yU3R5bGVzLmJlZ2luKCk7IGl0ICE9IG1fc2Nv
cGVkQXV0aG9yU3R5bGVzLmVuZCgpOyArK2l0KQotICAgICAgICBtX2ZlYXR1cmVzLmFkZChpdC0+
c2Vjb25kLT5mZWF0dXJlcygpKTsKKyAgICAgICAgbV9mZWF0dXJlcy5hZGQoaXQtPnZhbHVlLT5m
ZWF0dXJlcygpKTsKICNlbmRpZgogICAgIGlmIChtX3VzZXJTdHlsZSkKICAgICAgICAgbV9mZWF0
dXJlcy5hZGQobV91c2VyU3R5bGUtPmZlYXR1cmVzKCkpOwpAQCAtNTM1LDcgKzUzNSw3IEBAIGlu
bGluZSBSdWxlU2V0KiBTdHlsZVJlc29sdmVyOjpydWxlU2V0Rm9yU2NvcGUoY29uc3QgQ29udGFp
bmVyTm9kZSogc2NvcGUpIGNvbnN0CiAgICAgaWYgKCFzY29wZS0+aGFzU2NvcGVkSFRNTFN0eWxl
Q2hpbGQoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgU2NvcGVkUnVsZVNldE1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX3Njb3BlZEF1dGhvclN0eWxlcy5maW5kKHNjb3BlKTsKLSAgICByZXR1
cm4gaXQgIT0gbV9zY29wZWRBdXRob3JTdHlsZXMuZW5kKCkgPyBpdC0+c2Vjb25kLmdldCgpIDog
MDsgCisgICAgcmV0dXJuIGl0ICE9IG1fc2NvcGVkQXV0aG9yU3R5bGVzLmVuZCgpID8gaXQtPnZh
bHVlLmdldCgpIDogMDsgCiB9CiAjZW5kaWYKIApAQCAtNTU4LDggKzU1OCw4IEBAIHZvaWQgU3R5
bGVSZXNvbHZlcjo6YXBwZW5kQXV0aG9yU3R5bGVzaGVldHModW5zaWduZWQgZmlyc3ROZXcsIGNv
bnN0IFZlY3RvcjxSZWZQCiAgICAgICAgIGlmIChzY29wZSkgewogICAgICAgICAgICAgU2NvcGVk
UnVsZVNldE1hcDo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IG1fc2NvcGVkQXV0aG9yU3R5bGVzLmFk
ZChzY29wZSwgbnVsbHB0cik7CiAgICAgICAgICAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkp
Ci0gICAgICAgICAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBSdWxlU2V0Ojpj
cmVhdGUoKTsKLSAgICAgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLT5hZGRSdWxl
c0Zyb21TaGVldChzaGVldCwgKm1fbWVkaXVtLCB0aGlzLCBzY29wZSk7CisgICAgICAgICAgICAg
ICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IFJ1bGVTZXQ6OmNyZWF0ZSgpOworICAgICAg
ICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+YWRkUnVsZXNGcm9tU2hlZXQoc2hlZXQs
ICptX21lZGl1bSwgdGhpcywgc2NvcGUpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IH0KICNlbmRpZgpAQCAtNjg5LDEwICs2ODksMTAgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpzd2Vl
cE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUoKQogICAgIE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGU6Oml0
ZXJhdG9yIGl0ID0gbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlLmJlZ2luKCk7CiAgICAgTWF0Y2hl
ZFByb3BlcnRpZXNDYWNoZTo6aXRlcmF0b3IgZW5kID0gbV9tYXRjaGVkUHJvcGVydGllc0NhY2hl
LmVuZCgpOwogICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgVmVjdG9yPE1h
dGNoZWRQcm9wZXJ0aWVzPiYgbWF0Y2hlZFByb3BlcnRpZXMgPSBpdC0+c2Vjb25kLm1hdGNoZWRQ
cm9wZXJ0aWVzOworICAgICAgICBWZWN0b3I8TWF0Y2hlZFByb3BlcnRpZXM+JiBtYXRjaGVkUHJv
cGVydGllcyA9IGl0LT52YWx1ZS5tYXRjaGVkUHJvcGVydGllczsKICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtYXRjaGVkUHJvcGVydGllcy5zaXplKCk7ICsraSkgewogICAgICAgICAg
ICAgaWYgKG1hdGNoZWRQcm9wZXJ0aWVzW2ldLnByb3BlcnRpZXMtPmhhc09uZVJlZigpKSB7Ci0g
ICAgICAgICAgICAgICAgdG9SZW1vdmUuYXBwZW5kKGl0LT5maXJzdCk7CisgICAgICAgICAgICAg
ICAgdG9SZW1vdmUuYXBwZW5kKGl0LT5rZXkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CkBAIC0xODcxLDcgKzE4NzEsNyBAQCB2b2lkIFN0eWxlUmVz
b2x2ZXI6OmtleWZyYW1lU3R5bGVzRm9yQW5pbWF0aW9uKEVsZW1lbnQqIGUsIGNvbnN0IFJlbmRl
clN0eWxlKiBlbAogICAgIGlmIChpdCA9PSBtX2tleWZyYW1lc1J1bGVNYXAuZW5kKCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGNvbnN0IFN0eWxlUnVsZUtleWZyYW1lcyoga2V5ZnJhbWVzUnVs
ZSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgY29uc3QgU3R5bGVSdWxlS2V5ZnJhbWVzKiBrZXlm
cmFtZXNSdWxlID0gaXQtPnZhbHVlLmdldCgpOwogCiAgICAgLy8gQ29uc3RydWN0IGFuZCBwb3B1
bGF0ZSB0aGUgc3R5bGUgZm9yIGVhY2gga2V5ZnJhbWUKICAgICBjb25zdCBWZWN0b3I8UmVmUHRy
PFN0eWxlS2V5ZnJhbWU+ID4mIGtleWZyYW1lcyA9IGtleWZyYW1lc1J1bGUtPmtleWZyYW1lcygp
OwpAQCAtMjU2Niw3ICsyNTY2LDcgQEAgc3RhdGljIHZvaWQgcmVwb3J0QXRvbVJ1bGVNYXAoTWVt
b3J5Q2xhc3NJbmZvKiBpbmZvLCBjb25zdCBSdWxlU2V0OjpBdG9tUnVsZU1hcCYKIHsKICAgICBp
bmZvLT5hZGRIYXNoTWFwKGF0b21pY1J1bGVNYXApOwogICAgIGZvciAoUnVsZVNldDo6QXRvbVJ1
bGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYXRvbWljUnVsZU1hcC5iZWdpbigpOyBpdCAhPSBh
dG9taWNSdWxlTWFwLmVuZCgpOyArK2l0KQotICAgICAgICBpbmZvLT5hZGRJbnN0cnVtZW50ZWRW
ZWN0b3IoKml0LT5zZWNvbmQpOworICAgICAgICBpbmZvLT5hZGRJbnN0cnVtZW50ZWRWZWN0b3Io
Kml0LT52YWx1ZSk7CiB9CiAKIHZvaWQgUnVsZVNldDo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5
T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29uc3QKQEAgLTI2MzcsNyArMjYzNyw3IEBA
IHZvaWQgUnVsZVNldDo6YWRkVG9SdWxlU2V0KEF0b21pY1N0cmluZ0ltcGwqIGtleSwgQXRvbVJ1
bGVNYXAmIG1hcCwgY29uc3QgUnVsZURhCiB7CiAgICAgaWYgKCFrZXkpCiAgICAgICAgIHJldHVy
bjsKLSAgICBPd25QdHI8VmVjdG9yPFJ1bGVEYXRhPiA+JiBydWxlcyA9IG1hcC5hZGQoa2V5LCBu
dWxscHRyKS5pdGVyYXRvci0+c2Vjb25kOworICAgIE93blB0cjxWZWN0b3I8UnVsZURhdGE+ID4m
IHJ1bGVzID0gbWFwLmFkZChrZXksIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAo
IXJ1bGVzKQogICAgICAgICBydWxlcyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8UnVsZURhdGE+KTsK
ICAgICBydWxlcy0+YXBwZW5kKHJ1bGVEYXRhKTsKQEAgLTI3OTgsNyArMjc5OCw3IEBAIHN0YXRp
YyBpbmxpbmUgdm9pZCBzaHJpbmtNYXBWZWN0b3JzVG9GaXQoUnVsZVNldDo6QXRvbVJ1bGVNYXAm
IG1hcCkKIHsKICAgICBSdWxlU2V0OjpBdG9tUnVsZU1hcDo6aXRlcmF0b3IgZW5kID0gbWFwLmVu
ZCgpOwogICAgIGZvciAoUnVsZVNldDo6QXRvbVJ1bGVNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+c2hyaW5rVG9GaXQo
KTsKKyAgICAgICAgaXQtPnZhbHVlLT5zaHJpbmtUb0ZpdCgpOwogfQogCiB2b2lkIFJ1bGVTZXQ6
OnNocmlua1RvRml0KCkKQEAgLTI5NDQsNyArMjk0NCw3IEBAIGNvbnN0IFN0eWxlUmVzb2x2ZXI6
Ok1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVJdGVtKiBTdHlsZVJlc29sdmVyOjpmaW5kRnJvbU1hdGNo
ZWRQCiAgICAgTWF0Y2hlZFByb3BlcnRpZXNDYWNoZTo6aXRlcmF0b3IgaXQgPSBtX21hdGNoZWRQ
cm9wZXJ0aWVzQ2FjaGUuZmluZChoYXNoKTsKICAgICBpZiAoaXQgPT0gbV9tYXRjaGVkUHJvcGVy
dGllc0NhY2hlLmVuZCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBNYXRjaGVkUHJvcGVydGll
c0NhY2hlSXRlbSYgY2FjaGVJdGVtID0gaXQtPnNlY29uZDsKKyAgICBNYXRjaGVkUHJvcGVydGll
c0NhY2hlSXRlbSYgY2FjaGVJdGVtID0gaXQtPnZhbHVlOwogCiAgICAgc2l6ZV90IHNpemUgPSBt
YXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCk7CiAgICAgaWYgKHNpemUgIT0gY2Fj
aGVJdGVtLm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZVNoZWV0Q29udGVudHMuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
U2hlZXRDb250ZW50cy5jcHAKaW5kZXggM2VhYTBkYTM2OTEyMGNmZjEwYmI5Y2JjZTUzYjVhNzRj
YWQyYWZhZi4uODIyODgyMzQwYTkyZTRkMTgzODczNmE3ZmRlNjk4MTE5YTAzMTY3NSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHAKQEAgLTIzNSw3ICsyMzUsNyBA
QCB2b2lkIFN0eWxlU2hlZXRDb250ZW50czo6cGFyc2VyQWRkTmFtZXNwYWNlKGNvbnN0IEF0b21p
Y1N0cmluZyYgcHJlZml4LCBjb25zdCBBdAogICAgIFByZWZpeE5hbWVzcGFjZVVSSU1hcDo6QWRk
UmVzdWx0IHJlc3VsdCA9IG1fbmFtZXNwYWNlcy5hZGQocHJlZml4LCB1cmkpOwogICAgIGlmIChy
ZXN1bHQuaXNOZXdFbnRyeSkKICAgICAgICAgcmV0dXJuOwotICAgIHJlc3VsdC5pdGVyYXRvci0+
c2Vjb25kID0gdXJpOworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSB1cmk7CiB9CiAKIGNv
bnN0IEF0b21pY1N0cmluZyYgU3R5bGVTaGVldENvbnRlbnRzOjpkZXRlcm1pbmVOYW1lc3BhY2Uo
Y29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgpCkBAIC0yNDcsNyArMjQ3LDcgQEAgY29uc3QgQXRv
bWljU3RyaW5nJiBTdHlsZVNoZWV0Q29udGVudHM6OmRldGVybWluZU5hbWVzcGFjZShjb25zdCBB
dG9taWNTdHJpbmcmIHAKICAgICBQcmVmaXhOYW1lc3BhY2VVUklNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbV9uYW1lc3BhY2VzLmZpbmQocHJlZml4KTsKICAgICBpZiAoaXQgPT0gbV9uYW1lc3Bh
Y2VzLmVuZCgpKQogICAgICAgICByZXR1cm4gbnVsbEF0b207Ci0gICAgcmV0dXJuIGl0LT5zZWNv
bmQ7CisgICAgcmV0dXJuIGl0LT52YWx1ZTsKIH0KIAogdm9pZCBTdHlsZVNoZWV0Q29udGVudHM6
OnJlcXVlc3RJbXBvcnRlZFN0eWxlU2hlZXRzKENTU1N0eWxlU2hlZXQqIHJvb3RTaGVldCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGVja2VkUmFkaW9CdXR0b25zLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9DaGVja2VkUmFkaW9CdXR0b25zLmNwcAppbmRleCBlNjcyMzI5YWY4
ZGUzNzhiZWZkZmMxNGY4YWNiZDBmMmVjMGM3NDA1Li45ZmE1MDliYjk1MWQzODA5MTQwMDAwMTFl
ZTVjZTY1MTRhOThkNDZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hlY2tlZFJh
ZGlvQnV0dG9ucy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0NoZWNrZWRSYWRpb0J1dHRv
bnMuY3BwCkBAIC0xODUsNyArMTg1LDcgQEAgdm9pZCBDaGVja2VkUmFkaW9CdXR0b25zOjphZGRC
dXR0b24oSFRNTElucHV0RWxlbWVudCogZWxlbWVudCkKICAgICBpZiAoIW1fbmFtZVRvR3JvdXBN
YXApCiAgICAgICAgIG1fbmFtZVRvR3JvdXBNYXAgPSBhZG9wdFB0cihuZXcgTmFtZVRvR3JvdXBN
YXApOwogCi0gICAgT3duUHRyPFJhZGlvQnV0dG9uR3JvdXA+JiBncm91cCA9IG1fbmFtZVRvR3Jv
dXBNYXAtPmFkZChlbGVtZW50LT5uYW1lKCkuaW1wbCgpLCBQYXNzT3duUHRyPFJhZGlvQnV0dG9u
R3JvdXA+KCkpLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgT3duUHRyPFJhZGlvQnV0dG9uR3JvdXA+
JiBncm91cCA9IG1fbmFtZVRvR3JvdXBNYXAtPmFkZChlbGVtZW50LT5uYW1lKCkuaW1wbCgpLCBQ
YXNzT3duUHRyPFJhZGlvQnV0dG9uR3JvdXA+KCkpLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAo
IWdyb3VwKQogICAgICAgICBncm91cCA9IFJhZGlvQnV0dG9uR3JvdXA6OmNyZWF0ZSgpOwogICAg
IGdyb3VwLT5hZGQoZWxlbWVudCk7CkBAIC0yNDYsOCArMjQ2LDggQEAgdm9pZCBDaGVja2VkUmFk
aW9CdXR0b25zOjpyZW1vdmVCdXR0b24oSFRNTElucHV0RWxlbWVudCogZWxlbWVudCkKICAgICBO
YW1lVG9Hcm91cE1hcDo6aXRlcmF0b3IgaXQgPSBtX25hbWVUb0dyb3VwTWFwLT5maW5kKGVsZW1l
bnQtPm5hbWUoKS5pbXBsKCkpOwogICAgIGlmIChpdCA9PSBtX25hbWVUb0dyb3VwTWFwLT5lbmQo
KSkKICAgICAgICAgcmV0dXJuOwotICAgIGl0LT5zZWNvbmQtPnJlbW92ZShlbGVtZW50KTsKLSAg
ICBpZiAoaXQtPnNlY29uZC0+aXNFbXB0eSgpKSB7CisgICAgaXQtPnZhbHVlLT5yZW1vdmUoZWxl
bWVudCk7CisgICAgaWYgKGl0LT52YWx1ZS0+aXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIEZJWE1F
OiBXZSBtYXkgc2tpcCBkZWFsbG9jYXRpbmcgdGhlIGVtcHR5IFJhZGlvQnV0dG9uR3JvdXAgZm9y
CiAgICAgICAgIC8vIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50LiBJZiB3ZSBkbyBzbywgd2UgbmVl
ZCB0byBjaGFuZ2UgdGhlIGtleSB0eXBlCiAgICAgICAgIC8vIG9mIG1fbmFtZVRvR3JvdXBNYXAg
ZnJvbSBBdG9taWNTdHJpbmdJbXBsKiB0byBSZWZQdHI8QXRvbWljU3RyaW5nSW1wbD4uCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9kb20vQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5jcHAKaW5kZXggZjRhMmRh
MDRhYjYxNTgxM2Y4NjRhZTEzNTZmNGVhYTRkYjBiZmU0OS4uYWZkOGRkOWYxYjAwOTg1YzdhMjdi
YmJiZGEzZWJmODA3NzZkNGM3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0NoaWxk
TGlzdE11dGF0aW9uU2NvcGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZExpc3RN
dXRhdGlvblNjb3BlLmNwcApAQCAtMTkyLDI3ICsxOTIsMjcgQEAgdm9pZCBDaGlsZExpc3RNdXRh
dGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlcjo6Y2hpbGRBZGRlZChOb2RlKiB0
YXJnZXQKIHsKICAgICBIYXNoTWFwPE5vZGUqLCBPd25QdHI8Q2hpbGRMaXN0TXV0YXRpb25TY29w
ZTo6TXV0YXRpb25BY2N1bXVsYXRvcj4gPjo6aXRlcmF0b3IgaXRlciA9IG1fYWNjdW11bGF0aW9u
cy5maW5kKHRhcmdldCk7CiAgICAgQVNTRVJUKGl0ZXIgIT0gbV9hY2N1bXVsYXRpb25zLmVuZCgp
KTsKLSAgICBpZiAoaXRlciA9PSBtX2FjY3VtdWxhdGlvbnMuZW5kKCkgfHwgIWl0ZXItPnNlY29u
ZCkKKyAgICBpZiAoaXRlciA9PSBtX2FjY3VtdWxhdGlvbnMuZW5kKCkgfHwgIWl0ZXItPnZhbHVl
KQogICAgICAgICByZXR1cm47CiAKLSAgICBpdGVyLT5zZWNvbmQtPmNoaWxkQWRkZWQoY2hpbGQp
OworICAgIGl0ZXItPnZhbHVlLT5jaGlsZEFkZGVkKGNoaWxkKTsKIH0KIAogdm9pZCBDaGlsZExp
c3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlcjo6d2lsbFJlbW92ZUNo
aWxkKE5vZGUqIHRhcmdldCwgTm9kZSogY2hpbGQpCiB7CiAgICAgSGFzaE1hcDxOb2RlKiwgT3du
UHRyPENoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0b3I+ID46Oml0ZXJh
dG9yIGl0ZXIgPSBtX2FjY3VtdWxhdGlvbnMuZmluZCh0YXJnZXQpOwogICAgIEFTU0VSVChpdGVy
ICE9IG1fYWNjdW11bGF0aW9ucy5lbmQoKSk7Ci0gICAgaWYgKGl0ZXIgPT0gbV9hY2N1bXVsYXRp
b25zLmVuZCgpIHx8ICFpdGVyLT5zZWNvbmQpCisgICAgaWYgKGl0ZXIgPT0gbV9hY2N1bXVsYXRp
b25zLmVuZCgpIHx8ICFpdGVyLT52YWx1ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaXRlci0+
c2Vjb25kLT53aWxsUmVtb3ZlQ2hpbGQoY2hpbGQpOworICAgIGl0ZXItPnZhbHVlLT53aWxsUmVt
b3ZlQ2hpbGQoY2hpbGQpOwogfQogCiB2b2lkIENoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0
aW9uQWNjdW11bGF0aW9uUm91dGVyOjppbmNyZW1lbnRTY29waW5nTGV2ZWwoTm9kZSogdGFyZ2V0
KQogewogICAgIFNjb3BpbmdMZXZlbE1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fc2NvcGluZ0xl
dmVscy5hZGQodGFyZ2V0LCAxKTsKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAg
ICAgICsrKHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKKyAgICAgICAgKysocmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTIyOSw4ICsyMjksOCBA
QCB2b2lkIENoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVy
OjpkZWNyZW1lbnRTY29waW5nTGV2ZWwoTgogICAgIFNjb3BpbmdMZXZlbE1hcDo6aXRlcmF0b3Ig
aXRlciA9IG1fc2NvcGluZ0xldmVscy5maW5kKHRhcmdldCk7CiAgICAgQVNTRVJUKGl0ZXIgIT0g
bV9zY29waW5nTGV2ZWxzLmVuZCgpKTsKIAotICAgIC0tKGl0ZXItPnNlY29uZCk7Ci0gICAgaWYg
KGl0ZXItPnNlY29uZCA+IDApCisgICAgLS0oaXRlci0+dmFsdWUpOworICAgIGlmIChpdGVyLT52
YWx1ZSA+IDApCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fc2NvcGluZ0xldmVscy5yZW1vdmUo
aXRlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCA5MWZhMmU4M2NkYzQwNWU5ZGU0Yjhi
NDgxYjFiOTVkYzQyMTk2NzBmLi5mZDI5MTNjM2E2YjE3NWM2NjU1NzdmZjk1YTQ1ZGQ1MzRlNjRi
YzE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTI5NDcsNyArMjk0Nyw3IEBAIGNvbnN0
IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4gPiogRG9jdW1lbnQ6OnBhZ2VHcm91cFVzZXJT
aGVldHMoKSBjb25zdAogCiAgICAgVXNlclN0eWxlU2hlZXRNYXA6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IHNoZWV0c01hcC0+ZW5kKCk7CiAgICAgZm9yIChVc2VyU3R5bGVTaGVldE1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBzaGVldHNNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAg
ICAgICBjb25zdCBVc2VyU3R5bGVTaGVldFZlY3Rvciogc2hlZXRzID0gaXQtPnNlY29uZC5nZXQo
KTsKKyAgICAgICAgY29uc3QgVXNlclN0eWxlU2hlZXRWZWN0b3IqIHNoZWV0cyA9IGl0LT52YWx1
ZS5nZXQoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNoZWV0cy0+c2l6ZSgp
OyArK2kpIHsKICAgICAgICAgICAgIGNvbnN0IFVzZXJTdHlsZVNoZWV0KiBzaGVldCA9IHNoZWV0
cy0+YXQoaSkuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoc2hlZXQtPmluamVjdGVkRnJhbWVzKCkg
PT0gSW5qZWN0SW5Ub3BGcmFtZU9ubHkgJiYgb3duZXJFbGVtZW50KCkpCkBAIC00ODMwLDEwICs0
ODMwLDEwIEBAIFBhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+IERvY3VtZW50Ojp3aW5kb3dOYW1l
ZEl0ZW1zKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkKIHsKICAgICBOYW1lZENvbGxlY3Rpb25N
YXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX3dpbmRvd05hbWVkSXRlbUNvbGxlY3Rpb25zLmFkZChu
YW1lLCAwKTsKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXR1cm4gcmVz
dWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZh
bHVlOwogCiAgICAgUmVmUHRyPEhUTUxOYW1lQ29sbGVjdGlvbj4gY29sbGVjdGlvbiA9IEhUTUxO
YW1lQ29sbGVjdGlvbjo6Y3JlYXRlKHRoaXMsIFdpbmRvd05hbWVkSXRlbXMsIG5hbWUpOwotICAg
IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gY29sbGVjdGlvbi5nZXQoKTsKKyAgICByZXN1bHQu
aXRlcmF0b3ItPnZhbHVlID0gY29sbGVjdGlvbi5nZXQoKTsKICAgICByZXR1cm4gY29sbGVjdGlv
bi5yZWxlYXNlKCk7CiB9CiAKQEAgLTQ4NDEsMTAgKzQ4NDEsMTAgQEAgUGFzc1JlZlB0cjxIVE1M
Q29sbGVjdGlvbj4gRG9jdW1lbnQ6OmRvY3VtZW50TmFtZWRJdGVtcyhjb25zdCBBdG9taWNTdHJp
bmcmIG5hbWUKIHsKICAgICBOYW1lZENvbGxlY3Rpb25NYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBt
X2RvY3VtZW50TmFtZWRJdGVtQ29sbGVjdGlvbnMuYWRkKG5hbWUsIDApOwogICAgIGlmICghcmVz
dWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAKICAgICBSZWZQdHI8SFRN
TE5hbWVDb2xsZWN0aW9uPiBjb2xsZWN0aW9uID0gSFRNTE5hbWVDb2xsZWN0aW9uOjpjcmVhdGUo
dGhpcywgRG9jdW1lbnROYW1lZEl0ZW1zLCBuYW1lKTsKLSAgICByZXN1bHQuaXRlcmF0b3ItPnNl
Y29uZCA9IGNvbGxlY3Rpb24uZ2V0KCk7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGNv
bGxlY3Rpb24uZ2V0KCk7CiAgICAgcmV0dXJuIGNvbGxlY3Rpb24ucmVsZWFzZSgpOwogfQogCkBA
IC01MTc5LDcgKzUxNzksNyBAQCBDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBEb2N1bWVudDo6Z2V0
Q1NTQ2FudmFzQ29udGV4dChjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0CiAKIEhUTUxDYW52YXNF
bGVtZW50KiBEb2N1bWVudDo6Z2V0Q1NTQ2FudmFzRWxlbWVudChjb25zdCBTdHJpbmcmIG5hbWUp
CiB7Ci0gICAgUmVmUHRyPEhUTUxDYW52YXNFbGVtZW50PiYgZWxlbWVudCA9IG1fY3NzQ2FudmFz
RWxlbWVudHMuYWRkKG5hbWUsIDApLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgUmVmUHRyPEhUTUxD
YW52YXNFbGVtZW50PiYgZWxlbWVudCA9IG1fY3NzQ2FudmFzRWxlbWVudHMuYWRkKG5hbWUsIDAp
Lml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoIWVsZW1lbnQpCiAgICAgICAgIGVsZW1lbnQgPSBI
VE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlKHRoaXMpOwogICAgIHJldHVybiBlbGVtZW50LmdldCgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcApp
bmRleCBhM2ViYzkzNjkzMjVhNDdiMmU2MjkyODY5NjBiNGQ2ZmViYzJmMGFlLi5iMmYwMDg5NTRm
ZTdlYTBlNjcwZGI3MTViNjM1M2QyNTNiYTI5NWEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcApAQCAtMzExLDcgKzMxMSw3IEBAIERvY3Vt
ZW50TWFya2VyKiBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Om1hcmtlckNvbnRhaW5pbmdQb2lu
dChjb25zdCBMYXlvdXRQb2luCiAgICAgTWFya2VyTWFwOjppdGVyYXRvciBlbmQgPSBtX21hcmtl
cnMuZW5kKCk7CiAgICAgZm9yIChNYXJrZXJNYXA6Oml0ZXJhdG9yIG5vZGVJdGVyYXRvciA9IG1f
bWFya2Vycy5iZWdpbigpOyBub2RlSXRlcmF0b3IgIT0gZW5kOyArK25vZGVJdGVyYXRvcikgewog
ICAgICAgICAvLyBpbm5lciBsb29wOyBwcm9jZXNzIGVhY2ggbWFya2VyIGluIHRoaXMgbm9kZQot
ICAgICAgICBNYXJrZXJMaXN0KiBsaXN0ID0gbm9kZUl0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAg
IE1hcmtlckxpc3QqIGxpc3QgPSBub2RlSXRlcmF0b3ItPnZhbHVlOwogICAgICAgICB1bnNpZ25l
ZCBtYXJrZXJDb3VudCA9IGxpc3QtPnNpemUoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBtYXJr
ZXJJbmRleCA9IDA7IG1hcmtlckluZGV4IDwgbWFya2VyQ291bnQ7ICsrbWFya2VySW5kZXgpIHsK
ICAgICAgICAgICAgIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXImIG1hcmtlciA9IGxpc3QtPmF0KG1h
cmtlckluZGV4KTsKQEAgLTM5OSw3ICszOTksNyBAQCBWZWN0b3I8SW50UmVjdD4gRG9jdW1lbnRN
YXJrZXJDb250cm9sbGVyOjpyZW5kZXJlZFJlY3RzRm9yTWFya2VycyhEb2N1bWVudE1hcmtlcgog
ICAgIE1hcmtlck1hcDo6aXRlcmF0b3IgZW5kID0gbV9tYXJrZXJzLmVuZCgpOwogICAgIGZvciAo
TWFya2VyTWFwOjppdGVyYXRvciBub2RlSXRlcmF0b3IgPSBtX21hcmtlcnMuYmVnaW4oKTsgbm9k
ZUl0ZXJhdG9yICE9IGVuZDsgKytub2RlSXRlcmF0b3IpIHsKICAgICAgICAgLy8gaW5uZXIgbG9v
cDsgcHJvY2VzcyBlYWNoIG1hcmtlciBpbiB0aGlzIG5vZGUKLSAgICAgICAgTWFya2VyTGlzdCog
bGlzdCA9IG5vZGVJdGVyYXRvci0+c2Vjb25kOworICAgICAgICBNYXJrZXJMaXN0KiBsaXN0ID0g
bm9kZUl0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgdW5zaWduZWQgbWFya2VyQ291bnQgPSBsaXN0
LT5zaXplKCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgbWFya2VySW5kZXggPSAwOyBtYXJrZXJJ
bmRleCA8IG1hcmtlckNvdW50OyArK21hcmtlckluZGV4KSB7CiAgICAgICAgICAgICBjb25zdCBS
ZW5kZXJlZERvY3VtZW50TWFya2VyJiBtYXJrZXIgPSBsaXN0LT5hdChtYXJrZXJJbmRleCk7CkBA
IC00MjYsNyArNDI2LDcgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbW92ZU1h
cmtlcnMoTm9kZSogbm9kZSwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclQKICAgICAKICAgICBNYXJr
ZXJNYXA6Oml0ZXJhdG9yIGl0ZXJhdG9yID0gbV9tYXJrZXJzLmZpbmQobm9kZSk7CiAgICAgaWYg
KGl0ZXJhdG9yICE9IG1fbWFya2Vycy5lbmQoKSkKLSAgICAgICAgcmVtb3ZlTWFya2Vyc0Zyb21M
aXN0KG5vZGUsIGl0ZXJhdG9yLT5zZWNvbmQsIG1hcmtlclR5cGVzKTsKKyAgICAgICAgcmVtb3Zl
TWFya2Vyc0Zyb21MaXN0KG5vZGUsIGl0ZXJhdG9yLT52YWx1ZSwgbWFya2VyVHlwZXMpOwogfQog
CiB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVtb3ZlTWFya2VycyhEb2N1bWVudE1h
cmtlcjo6TWFya2VyVHlwZXMgbWFya2VyVHlwZXMpCkBAIC00MzksNyArNDM5LDcgQEAgdm9pZCBE
b2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbW92ZU1hcmtlcnMoRG9jdW1lbnRNYXJrZXI6Ok1h
cmtlclR5cGVzIG1hcmtlclQKICAgICBNYXJrZXJNYXAgbWFya2VyTWFwQ29weSA9IG1fbWFya2Vy
czsKICAgICBNYXJrZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IG1hcmtlck1hcENvcHkuZW5kKCk7CiAg
ICAgZm9yIChNYXJrZXJNYXA6Oml0ZXJhdG9yIGkgPSBtYXJrZXJNYXBDb3B5LmJlZ2luKCk7IGkg
IT0gZW5kOyArK2kpCi0gICAgICAgIHJlbW92ZU1hcmtlcnNGcm9tTGlzdChpLT5maXJzdC5nZXQo
KSwgaS0+c2Vjb25kLCBtYXJrZXJUeXBlcyk7CisgICAgICAgIHJlbW92ZU1hcmtlcnNGcm9tTGlz
dChpLT5rZXkuZ2V0KCksIGktPnZhbHVlLCBtYXJrZXJUeXBlcyk7CiAgICAgbV9wb3NzaWJseUV4
aXN0aW5nTWFya2VyVHlwZXMucmVtb3ZlKG1hcmtlclR5cGVzKTsKIH0KIApAQCAtNDk1LDEwICs0
OTUsMTAgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlcGFpbnRNYXJrZXJzKERv
Y3VtZW50TWFya2VyOjpNYXJrZXJUeXBlcyBtYXJrZXIKICAgICAvLyBvdXRlciBsb29wOiBwcm9j
ZXNzIGVhY2ggbWFya2VyZWQgbm9kZSBpbiB0aGUgZG9jdW1lbnQKICAgICBNYXJrZXJNYXA6Oml0
ZXJhdG9yIGVuZCA9IG1fbWFya2Vycy5lbmQoKTsKICAgICBmb3IgKE1hcmtlck1hcDo6aXRlcmF0
b3IgaSA9IG1fbWFya2Vycy5iZWdpbigpOyBpICE9IGVuZDsgKytpKSB7Ci0gICAgICAgIE5vZGUq
IG5vZGUgPSBpLT5maXJzdC5nZXQoKTsKKyAgICAgICAgTm9kZSogbm9kZSA9IGktPmtleS5nZXQo
KTsKIAogICAgICAgICAvLyBpbm5lciBsb29wOiBwcm9jZXNzIGVhY2ggbWFya2VyIGluIHRoZSBj
dXJyZW50IG5vZGUKLSAgICAgICAgTWFya2VyTGlzdCogbGlzdCA9IGktPnNlY29uZDsKKyAgICAg
ICAgTWFya2VyTGlzdCogbGlzdCA9IGktPnZhbHVlOwogICAgICAgICBib29sIG5vZGVOZWVkc1Jl
cGFpbnQgPSBmYWxzZTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgIT0gbGlzdC0+c2l6
ZSgpOyArK2kpIHsKICAgICAgICAgICAgIERvY3VtZW50TWFya2VyIG1hcmtlciA9IGxpc3QtPmF0
KGkpOwpAQCAtNTI2LDcgKzUyNiw3IEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpp
bnZhbGlkYXRlUmVuZGVyZWRSZWN0c0Zvck1hcmtlcnNJblJlY3QoY29uc3QgTGF5CiAgICAgZm9y
IChNYXJrZXJNYXA6Oml0ZXJhdG9yIGkgPSBtX21hcmtlcnMuYmVnaW4oKTsgaSAhPSBlbmQ7ICsr
aSkgewogCiAgICAgICAgIC8vIGlubmVyIGxvb3A6IHByb2Nlc3MgZWFjaCByZWN0IGluIHRoZSBj
dXJyZW50IG5vZGUKLSAgICAgICAgTWFya2VyTGlzdCogbGlzdCA9IGktPnNlY29uZDsKKyAgICAg
ICAgTWFya2VyTGlzdCogbGlzdCA9IGktPnZhbHVlOwogICAgICAgICBmb3IgKHNpemVfdCBsaXN0
SW5kZXggPSAwOyBsaXN0SW5kZXggPCBsaXN0LT5zaXplKCk7ICsrbGlzdEluZGV4KQogICAgICAg
ICAgICAgbGlzdC0+YXQobGlzdEluZGV4KS5pbnZhbGlkYXRlKHIpOwogICAgIH0KQEAgLTY3NSw5
ICs2NzUsOSBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6c2hvd01hcmtlcnMoKSBj
b25zdAogICAgIGZwcmludGYoc3RkZXJyLCAiJWQgbm9kZXMgaGF2ZSBtYXJrZXJzOlxuIiwgbV9t
YXJrZXJzLnNpemUoKSk7CiAgICAgTWFya2VyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX21h
cmtlcnMuZW5kKCk7CiAgICAgZm9yIChNYXJrZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIG5vZGVJdGVy
YXRvciA9IG1fbWFya2Vycy5iZWdpbigpOyBub2RlSXRlcmF0b3IgIT0gZW5kOyArK25vZGVJdGVy
YXRvcikgewotICAgICAgICBOb2RlKiBub2RlID0gbm9kZUl0ZXJhdG9yLT5maXJzdC5nZXQoKTsK
KyAgICAgICAgTm9kZSogbm9kZSA9IG5vZGVJdGVyYXRvci0+a2V5LmdldCgpOwogICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgIiVwIiwgbm9kZSk7Ci0gICAgICAgIE1hcmtlckxpc3QqIGxpc3QgPSBu
b2RlSXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgTWFya2VyTGlzdCogbGlzdCA9IG5vZGVJdGVy
YXRvci0+dmFsdWU7CiAgICAgICAgIGZvciAodW5zaWduZWQgbWFya2VySW5kZXggPSAwOyBtYXJr
ZXJJbmRleCA8IGxpc3QtPnNpemUoKTsgKyttYXJrZXJJbmRleCkgewogICAgICAgICAgICAgY29u
c3QgRG9jdW1lbnRNYXJrZXImIG1hcmtlciA9IGxpc3QtPmF0KG1hcmtlckluZGV4KTsKICAgICAg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiICVkOlslZDolZF0oJWQpIiwgbWFya2VyLnR5cGUoKSwg
bWFya2VyLnN0YXJ0T2Zmc2V0KCksIG1hcmtlci5lbmRPZmZzZXQoKSwgbWFya2VyLmFjdGl2ZU1h
dGNoKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50T3JkZXJlZE1h
cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRPcmRlcmVkTWFwLmNwcAppbmRleCAw
ODJhYTA3NDBhNzFjY2RmNTBlMWQ0MmQyM2QzMTdlNjNhZjJmNGRhLi4xMjk3ZTUxMDJmYjRlNzlj
ZTNkYjExMjM1NzAyMWUzZGQwNTU0YTUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnRPcmRlcmVkTWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRP
cmRlcmVkTWFwLmNwcApAQCAtOTgsNyArOTgsNyBAQCB2b2lkIERvY3VtZW50T3JkZXJlZE1hcDo6
cmVtb3ZlKEF0b21pY1N0cmluZ0ltcGwqIGtleSwgRWxlbWVudCogZWxlbWVudCkKIAogICAgIG1f
bWFwLmNoZWNrQ29uc2lzdGVuY3koKTsKICAgICBNYXA6Oml0ZXJhdG9yIGNhY2hlZEl0ZW0gPSBt
X21hcC5maW5kKGtleSk7Ci0gICAgaWYgKGNhY2hlZEl0ZW0gIT0gbV9tYXAuZW5kKCkgJiYgY2Fj
aGVkSXRlbS0+c2Vjb25kID09IGVsZW1lbnQpCisgICAgaWYgKGNhY2hlZEl0ZW0gIT0gbV9tYXAu
ZW5kKCkgJiYgY2FjaGVkSXRlbS0+dmFsdWUgPT0gZWxlbWVudCkKICAgICAgICAgbV9tYXAucmVt
b3ZlKGNhY2hlZEl0ZW0pOwogICAgIGVsc2UKICAgICAgICAgbV9kdXBsaWNhdGVDb3VudHMucmVt
b3ZlKGtleSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0dHJpYnV0
ZURhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmNwcApp
bmRleCA0NzFlNTE5ZTBmYmNiODZkNGVkMjU4NmVhYzlhZmY0NDI1YzQ1NzMxLi4wZWFmYmM0ZTUz
NzZjYTk3MjJjMmVlZjljMDZhMzc2ODg5M2EwYWE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRWxlbWVudEF0dHJpYnV0ZURhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9F
bGVtZW50QXR0cmlidXRlRGF0YS5jcHAKQEAgLTExOCw3ICsxMTgsNyBAQCBzdGF0aWMgQXR0ckxp
c3QqIGVuc3VyZUF0dHJMaXN0Rm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50KQogICAgIEFTU0VS
VCghYXR0ckxpc3RNYXAoKS5jb250YWlucyhlbGVtZW50KSk7CiAgICAgZWxlbWVudC0+c2V0SGFz
QXR0ckxpc3QoKTsKICAgICBBdHRyTGlzdE1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IGF0dHJMaXN0
TWFwKCkuYWRkKGVsZW1lbnQsIGFkb3B0UHRyKG5ldyBBdHRyTGlzdCkpOwotICAgIHJldHVybiBy
ZXN1bHQuaXRlcmF0b3ItPnNlY29uZC5nZXQoKTsKKyAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZS5nZXQoKTsKIH0KIAogc3RhdGljIHZvaWQgcmVtb3ZlQXR0ckxpc3RGb3JFbGVtZW50
KEVsZW1lbnQqIGVsZW1lbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRE
aXNwYXRjaGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwCmlu
ZGV4IGU1ODM5MGM1ZTRhZDlkODgwZWNlZmRkNTFkOGYwZGQ4MDg3NjExOWUuLjg5YjljYzcwYjc4
MGM4YzgwYmI3NDRkMWQ4YzFlZmYxNzU4MGM1MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FdmVudERpc3BhdGNoZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERp
c3BhdGNoZXIuY3BwCkBAIC0xMTEsNyArMTExLDcgQEAgRXZlbnRUYXJnZXQqIEV2ZW50UmVsYXRl
ZFRhcmdldEFkanVzdGVyOjpmaW5kUmVsYXRlZFRhcmdldChUcmVlU2NvcGUqIHNjb3BlKQogICAg
ICAgICBwYXJlbnRUcmVlU2NvcGVzLmFwcGVuZChzY29wZSk7CiAgICAgICAgIFJlbGF0ZWRUYXJn
ZXRNYXA6OmNvbnN0X2l0ZXJhdG9yIGZvdW5kID0gbV9yZWxhdGVkVGFyZ2V0TWFwLmZpbmQoc2Nv
cGUpOwogICAgICAgICBpZiAoZm91bmQgIT0gbV9yZWxhdGVkVGFyZ2V0TWFwLmVuZCgpKSB7Ci0g
ICAgICAgICAgICByZWxhdGVkVGFyZ2V0ID0gZm91bmQtPnNlY29uZDsKKyAgICAgICAgICAgIHJl
bGF0ZWRUYXJnZXQgPSBmb3VuZC0+dmFsdWU7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICBzY29wZSA9IHNjb3BlLT5wYXJlbnRUcmVlU2NvcGUoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudExpc3RlbmVyTWFwLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FdmVudExpc3RlbmVyTWFwLmNwcAppbmRleCBjMWZkNGQ3Yzk1N2E2NGJmZjc4OGY5MDFl
NjFkZTAxY2EwOTIyNzdlLi5hZjhjNDhhZWRlNTUxMzZmNzRmZTE4NDc4MWQwNTI4YjQxZDdjY2Fj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRMaXN0ZW5lck1hcC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TGlzdGVuZXJNYXAuY3BwCkBAIC0xMDIsNyArMTAy
LDcgQEAgVmVjdG9yPEF0b21pY1N0cmluZz4gRXZlbnRMaXN0ZW5lck1hcDo6ZXZlbnRUeXBlcygp
IGNvbnN0CiAgICAgICAgIEV2ZW50TGlzdGVuZXJIYXNoTWFwOjppdGVyYXRvciBpdCA9IG1faGFz
aE1hcC0+YmVnaW4oKTsKICAgICAgICAgRXZlbnRMaXN0ZW5lckhhc2hNYXA6Oml0ZXJhdG9yIGVu
ZCA9IG1faGFzaE1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpCi0g
ICAgICAgICAgICB0eXBlcy5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgICAgIHR5cGVzLmFw
cGVuZChpdC0+a2V5KTsKICAgICB9IGVsc2UgaWYgKG1fc2luZ2xlRXZlbnRMaXN0ZW5lclZlY3Rv
cikKICAgICAgICAgdHlwZXMuYXBwZW5kKG1fc2luZ2xlRXZlbnRMaXN0ZW5lclR5cGUpOwogCkBA
IC0xMzYsOSArMTM2LDkgQEAgYm9vbCBFdmVudExpc3RlbmVyTWFwOjphZGQoY29uc3QgQXRvbWlj
U3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW4KICAgICBpZiAobV9oYXNo
TWFwKSB7CiAgICAgICAgIEV2ZW50TGlzdGVuZXJIYXNoTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0g
bV9oYXNoTWFwLT5hZGQoZXZlbnRUeXBlLCBudWxscHRyKTsKICAgICAgICAgaWYgKHJlc3VsdC5p
c05ld0VudHJ5KQotICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBhZG9wdFB0
cihuZXcgRXZlbnRMaXN0ZW5lclZlY3Rvcik7CisgICAgICAgICAgICByZXN1bHQuaXRlcmF0b3It
PnZhbHVlID0gYWRvcHRQdHIobmV3IEV2ZW50TGlzdGVuZXJWZWN0b3IpOwogCi0gICAgICAgIHJl
dHVybiBhZGRMaXN0ZW5lclRvVmVjdG9yKHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLmdldCgpLCBs
aXN0ZW5lciwgdXNlQ2FwdHVyZSk7CisgICAgICAgIHJldHVybiBhZGRMaXN0ZW5lclRvVmVjdG9y
KHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0KCksIGxpc3RlbmVyLCB1c2VDYXB0dXJlKTsKICAg
ICB9CiAKICAgICBpZiAoIW1fc2luZ2xlRXZlbnRMaXN0ZW5lclZlY3RvcikgewpAQCAtMTc5LDgg
KzE3OSw4IEBAIGJvb2wgRXZlbnRMaXN0ZW5lck1hcDo6cmVtb3ZlKGNvbnN0IEF0b21pY1N0cmlu
ZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyKiBsaXN0CiAgICAgaWYgKGl0ID09IG1faGFzaE1h
cC0+ZW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGJvb2wgd2FzUmVtb3ZlZCA9
IHJlbW92ZUxpc3RlbmVyRnJvbVZlY3RvcihpdC0+c2Vjb25kLmdldCgpLCBsaXN0ZW5lciwgdXNl
Q2FwdHVyZSwgaW5kZXhPZlJlbW92ZWRMaXN0ZW5lcik7Ci0gICAgaWYgKGl0LT5zZWNvbmQtPmlz
RW1wdHkoKSkKKyAgICBib29sIHdhc1JlbW92ZWQgPSByZW1vdmVMaXN0ZW5lckZyb21WZWN0b3Io
aXQtPnZhbHVlLmdldCgpLCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSwgaW5kZXhPZlJlbW92ZWRMaXN0
ZW5lcik7CisgICAgaWYgKGl0LT52YWx1ZS0+aXNFbXB0eSgpKQogICAgICAgICBtX2hhc2hNYXAt
PnJlbW92ZShpdCk7CiAgICAgcmV0dXJuIHdhc1JlbW92ZWQ7CiB9CkBAIC0xOTMsNyArMTkzLDcg
QEAgRXZlbnRMaXN0ZW5lclZlY3RvciogRXZlbnRMaXN0ZW5lck1hcDo6ZmluZChjb25zdCBBdG9t
aWNTdHJpbmcmIGV2ZW50VHlwZSkKICAgICAgICAgRXZlbnRMaXN0ZW5lckhhc2hNYXA6Oml0ZXJh
dG9yIGl0ID0gbV9oYXNoTWFwLT5maW5kKGV2ZW50VHlwZSk7CiAgICAgICAgIGlmIChpdCA9PSBt
X2hhc2hNYXAtPmVuZCgpKQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiBp
dC0+c2Vjb25kLmdldCgpOworICAgICAgICByZXR1cm4gaXQtPnZhbHVlLmdldCgpOwogICAgIH0K
IAogICAgIGlmIChtX3NpbmdsZUV2ZW50TGlzdGVuZXJUeXBlID09IGV2ZW50VHlwZSkKQEAgLTIy
Nyw3ICsyMjcsNyBAQCB2b2lkIEV2ZW50TGlzdGVuZXJNYXA6OnJlbW92ZUZpcnN0RXZlbnRMaXN0
ZW5lckNyZWF0ZWRGcm9tTWFya3VwKGNvbnN0IEF0b21pY1N0cgogICAgICAgICBFdmVudExpc3Rl
bmVySGFzaE1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gbV9oYXNoTWFwLT5maW5kKGV2ZW50VHlwZSk7
CiAgICAgICAgIEFTU0VSVChyZXN1bHQgIT0gbV9oYXNoTWFwLT5lbmQoKSk7CiAKLSAgICAgICAg
RXZlbnRMaXN0ZW5lclZlY3RvciogbGlzdGVuZXJWZWN0b3IgPSByZXN1bHQtPnNlY29uZC5nZXQo
KTsKKyAgICAgICAgRXZlbnRMaXN0ZW5lclZlY3RvciogbGlzdGVuZXJWZWN0b3IgPSByZXN1bHQt
PnZhbHVlLmdldCgpOwogICAgICAgICBBU1NFUlQobGlzdGVuZXJWZWN0b3IpOwogCiAgICAgICAg
IHJlbW92ZUZpcnN0TGlzdGVuZXJDcmVhdGVkRnJvbU1hcmt1cChsaXN0ZW5lclZlY3Rvcik7CkBA
IC0yNjUsNyArMjY1LDcgQEAgdm9pZCBFdmVudExpc3RlbmVyTWFwOjpjb3B5RXZlbnRMaXN0ZW5l
cnNOb3RDcmVhdGVkRnJvbU1hcmt1cFRvVGFyZ2V0KEV2ZW50VGFyZ2UKICAgICBpZiAobV9oYXNo
TWFwKSB7CiAgICAgICAgIEV2ZW50TGlzdGVuZXJIYXNoTWFwOjppdGVyYXRvciBlbmQgPSBtX2hh
c2hNYXAtPmVuZCgpOwogICAgICAgICBmb3IgKEV2ZW50TGlzdGVuZXJIYXNoTWFwOjppdGVyYXRv
ciBpdCA9IG1faGFzaE1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAg
Y29weUxpc3RlbmVyc05vdENyZWF0ZWRGcm9tTWFya3VwVG9UYXJnZXQoaXQtPmZpcnN0LCBpdC0+
c2Vjb25kLmdldCgpLCB0YXJnZXQpOworICAgICAgICAgICAgY29weUxpc3RlbmVyc05vdENyZWF0
ZWRGcm9tTWFya3VwVG9UYXJnZXQoaXQtPmtleSwgaXQtPnZhbHVlLmdldCgpLCB0YXJnZXQpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0zMjUsNyArMzI1LDcgQEAgRXZlbnRMaXN0ZW5l
ciogRXZlbnRMaXN0ZW5lckl0ZXJhdG9yOjpuZXh0TGlzdGVuZXIoKQogCiAgICAgaWYgKG1fbWFw
LT5tX2hhc2hNYXApIHsKICAgICAgICAgZm9yICg7IG1fbWFwSXRlcmF0b3IgIT0gbV9tYXBFbmQ7
ICsrbV9tYXBJdGVyYXRvcikgewotICAgICAgICAgICAgRXZlbnRMaXN0ZW5lclZlY3RvciYgbGlz
dGVuZXJzID0gKm1fbWFwSXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgICAgIEV2ZW50TGlzdGVu
ZXJWZWN0b3ImIGxpc3RlbmVycyA9ICptX21hcEl0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgICAg
IGlmIChtX2luZGV4IDwgbGlzdGVuZXJzLnNpemUoKSkKICAgICAgICAgICAgICAgICByZXR1cm4g
bGlzdGVuZXJzW21faW5kZXgrK10ubGlzdGVuZXIuZ2V0KCk7CiAgICAgICAgICAgICBtX2luZGV4
ID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9JZFRhcmdldE9ic2VydmVyUmVn
aXN0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0lkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeS5j
cHAKaW5kZXggNWZjMjZhY2ZlZTMzMmViN2QyZDYxOWJhNTkyMGM3MzNmNWJiMGY3MC4uYWFmYThh
MmQxYjUzMGI3ZDBmM2UzNjcwNTU4ZThjOTZiOTQ4YWZiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL0lkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL0lkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeS5jcHAKQEAgLTQyLDkgKzQyLDkgQEAgdm9p
ZCBJZFRhcmdldE9ic2VydmVyUmVnaXN0cnk6OmFkZE9ic2VydmVyKGNvbnN0IEF0b21pY1N0cmlu
ZyYgaWQsIElkVGFyZ2V0T2JzZXIKICAgICAKICAgICBJZFRvT2JzZXJ2ZXJTZXRNYXA6OkFkZFJl
c3VsdCByZXN1bHQgPSBtX3JlZ2lzdHJ5LmFkZChpZC5pbXBsKCksIG51bGxwdHIpOwogICAgIGlm
IChyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBh
ZG9wdFB0cihuZXcgT2JzZXJ2ZXJTZXQoKSk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFs
dWUgPSBhZG9wdFB0cihuZXcgT2JzZXJ2ZXJTZXQoKSk7CiAKLSAgICByZXN1bHQuaXRlcmF0b3It
PnNlY29uZC0+YWRkKG9ic2VydmVyKTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5hZGQo
b2JzZXJ2ZXIpOwogfQogCiB2b2lkIElkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeTo6cmVtb3ZlT2Jz
ZXJ2ZXIoY29uc3QgQXRvbWljU3RyaW5nJiBpZCwgSWRUYXJnZXRPYnNlcnZlciogb2JzZXJ2ZXIp
CkBAIC01NCw3ICs1NCw3IEBAIHZvaWQgSWRUYXJnZXRPYnNlcnZlclJlZ2lzdHJ5OjpyZW1vdmVP
YnNlcnZlcihjb25zdCBBdG9taWNTdHJpbmcmIGlkLCBJZFRhcmdldE9iCiAKICAgICBJZFRvT2Jz
ZXJ2ZXJTZXRNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3JlZ2lzdHJ5LmZpbmQoaWQuaW1wbCgpKTsK
IAotICAgIE9ic2VydmVyU2V0KiBzZXQgPSBpdGVyLT5zZWNvbmQuZ2V0KCk7CisgICAgT2JzZXJ2
ZXJTZXQqIHNldCA9IGl0ZXItPnZhbHVlLmdldCgpOwogICAgIHNldC0+cmVtb3ZlKG9ic2VydmVy
KTsKICAgICBpZiAoc2V0LT5pc0VtcHR5KCkgJiYgc2V0ICE9IG1fbm90aWZ5aW5nT2JzZXJ2ZXJz
SW5TZXQpCiAgICAgICAgIG1fcmVnaXN0cnkucmVtb3ZlKGl0ZXIpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL01lbW9yeUluc3RydW1lbnRhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUv
ZG9tL01lbW9yeUluc3RydW1lbnRhdGlvbi5oCmluZGV4IDM1Y2I2Y2I3YWYwNWMzZTE4MGJlZDY5
MzdlYzIwMDhmMmVkNzE1MzMuLjJiOTVmOTY1Njg2YTE2ODY5Mzc2ZWJmNDY4M2UyZWU3ZWQyOWVl
MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9NZW1vcnlJbnN0cnVtZW50YXRpb24u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTWVtb3J5SW5zdHJ1bWVudGF0aW9uLmgKQEAgLTMy
Myw4ICszMjMsOCBAQCB2b2lkIE1lbW9yeUluc3RydW1lbnRhdGlvbjo6YWRkSW5zdHJ1bWVudGVk
TWFwRW50cmllcyhjb25zdCBNYXBUeXBlJiBtYXAsIE9iamVjdAogewogICAgIHR5cGVuYW1lIE1h
cFR5cGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC5lbmQoKTsKICAgICBmb3IgKHR5cGVuYW1l
IE1hcFR5cGU6OmNvbnN0X2l0ZXJhdG9yIGkgPSBtYXAuYmVnaW4oKTsgaSAhPSBlbmQ7ICsraSkg
ewotICAgICAgICBhZGRJbnN0cnVtZW50ZWRPYmplY3QoaS0+Zmlyc3QsIG93bmVyT2JqZWN0VHlw
ZSk7Ci0gICAgICAgIGFkZEluc3RydW1lbnRlZE9iamVjdChpLT5zZWNvbmQsIG93bmVyT2JqZWN0
VHlwZSk7CisgICAgICAgIGFkZEluc3RydW1lbnRlZE9iamVjdChpLT5rZXksIG93bmVyT2JqZWN0
VHlwZSk7CisgICAgICAgIGFkZEluc3RydW1lbnRlZE9iamVjdChpLT52YWx1ZSwgb3duZXJPYmpl
Y3RUeXBlKTsKICAgICB9CiB9CiAKQEAgLTMzMyw3ICszMzMsNyBAQCB2b2lkIE1lbW9yeUluc3Ry
dW1lbnRhdGlvbjo6YWRkSW5zdHJ1bWVudGVkTWFwVmFsdWVzKGNvbnN0IE1hcFR5cGUmIG1hcCwg
T2JqZWN0VAogewogICAgIHR5cGVuYW1lIE1hcFR5cGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1h
cC5lbmQoKTsKICAgICBmb3IgKHR5cGVuYW1lIE1hcFR5cGU6OmNvbnN0X2l0ZXJhdG9yIGkgPSBt
YXAuYmVnaW4oKTsgaSAhPSBlbmQ7ICsraSkKLSAgICAgICAgYWRkSW5zdHJ1bWVudGVkT2JqZWN0
KGktPnNlY29uZCwgb3duZXJPYmplY3RUeXBlKTsKKyAgICAgICAgYWRkSW5zdHJ1bWVudGVkT2Jq
ZWN0KGktPnZhbHVlLCBvd25lck9iamVjdFR5cGUpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBM
aXN0SGFzaFNldFR5cGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25P
YnNlcnZlckludGVyZXN0R3JvdXAuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uT2Jz
ZXJ2ZXJJbnRlcmVzdEdyb3VwLmNwcAppbmRleCAyNGMwY2I1ODY1MTdlMDhiYzdhOGI0MDkzZjIx
ZDMxZTBkYjJkNjRlLi40ZmFkMjIwODE4NTNjZDgxNTM0ZDMwMGQxNjFkODhiMWFhNWU5NGM4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25PYnNlcnZlckludGVyZXN0R3Jv
dXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvbk9ic2VydmVySW50ZXJlc3RH
cm91cC5jcHAKQEAgLTYyLDcgKzYyLDcgQEAgTXV0YXRpb25PYnNlcnZlckludGVyZXN0R3JvdXA6
Ok11dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3VwKEhhc2hNYXA8TXV0YXRpb25PYnMKIGJvb2wg
TXV0YXRpb25PYnNlcnZlckludGVyZXN0R3JvdXA6OmlzT2xkVmFsdWVSZXF1ZXN0ZWQoKQogewog
ICAgIGZvciAoSGFzaE1hcDxNdXRhdGlvbk9ic2VydmVyKiwgTXV0YXRpb25SZWNvcmREZWxpdmVy
eU9wdGlvbnM+OjppdGVyYXRvciBpdGVyID0gbV9vYnNlcnZlcnMuYmVnaW4oKTsgaXRlciAhPSBt
X29ic2VydmVycy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIGlmIChoYXNPbGRWYWx1ZShpdGVy
LT5zZWNvbmQpKQorICAgICAgICBpZiAoaGFzT2xkVmFsdWUoaXRlci0+dmFsdWUpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKQEAgLTczLDggKzcz
LDggQEAgdm9pZCBNdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cDo6ZW5xdWV1ZU11dGF0aW9u
UmVjb3JkKFBhc3NSZWZQdHI8TXV0YXRpb25SZWMKICAgICBSZWZQdHI8TXV0YXRpb25SZWNvcmQ+
IG11dGF0aW9uID0gcHJwTXV0YXRpb247CiAgICAgUmVmUHRyPE11dGF0aW9uUmVjb3JkPiBtdXRh
dGlvbldpdGhOdWxsT2xkVmFsdWU7CiAgICAgZm9yIChIYXNoTWFwPE11dGF0aW9uT2JzZXJ2ZXIq
LCBNdXRhdGlvblJlY29yZERlbGl2ZXJ5T3B0aW9ucz46Oml0ZXJhdG9yIGl0ZXIgPSBtX29ic2Vy
dmVycy5iZWdpbigpOyBpdGVyICE9IG1fb2JzZXJ2ZXJzLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAg
ICAgTXV0YXRpb25PYnNlcnZlciogb2JzZXJ2ZXIgPSBpdGVyLT5maXJzdDsKLSAgICAgICAgaWYg
KGhhc09sZFZhbHVlKGl0ZXItPnNlY29uZCkpIHsKKyAgICAgICAgTXV0YXRpb25PYnNlcnZlciog
b2JzZXJ2ZXIgPSBpdGVyLT5rZXk7CisgICAgICAgIGlmIChoYXNPbGRWYWx1ZShpdGVyLT52YWx1
ZSkpIHsKICAgICAgICAgICAgIG9ic2VydmVyLT5lbnF1ZXVlTXV0YXRpb25SZWNvcmQobXV0YXRp
b24pOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAppbmRl
eCBhM2ExYzIyZjI1NTQ5ZjdmY2FiZjQwNzAxNjFhYjY5OGVkMjFjNzliLi5kZDUxN2E4ZGQ1NmRl
NmMyNzYwZjJlMWFlYWYwNGM1MGVlMWQ4M2JhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCkBAIC0xOTAsNyAr
MTkwLDcgQEAgdm9pZCBOb2RlOjpkdW1wU3RhdGlzdGljcygpCiAgICAgICAgICAgICAgICAgRWxl
bWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKTsKICAgICAgICAgICAg
ICAgICBIYXNoTWFwPFN0cmluZywgc2l6ZV90Pjo6QWRkUmVzdWx0IHJlc3VsdCA9IHBlclRhZ0Nv
dW50LmFkZChlbGVtZW50LT50YWdOYW1lKCksIDEpOwogICAgICAgICAgICAgICAgIGlmICghcmVz
dWx0LmlzTmV3RW50cnkpCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vj
b25kKys7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUrKzsKIAog
ICAgICAgICAgICAgICAgIGlmIChFbGVtZW50QXR0cmlidXRlRGF0YSogYXR0cmlidXRlRGF0YSA9
IGVsZW1lbnQtPmF0dHJpYnV0ZURhdGEoKSkgewogICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1
dGVzICs9IGF0dHJpYnV0ZURhdGEtPmxlbmd0aCgpOwpAQCAtMjc4LDcgKzI3OCw3IEBAIHZvaWQg
Tm9kZTo6ZHVtcFN0YXRpc3RpY3MoKQogCiAgICAgcHJpbnRmKCJFbGVtZW50IHRhZyBuYW1lIGRp
c3RpYnV0aW9uOlxuIik7CiAgICAgZm9yIChIYXNoTWFwPFN0cmluZywgc2l6ZV90Pjo6aXRlcmF0
b3IgaXQgPSBwZXJUYWdDb3VudC5iZWdpbigpOyBpdCAhPSBwZXJUYWdDb3VudC5lbmQoKTsgKytp
dCkKLSAgICAgICAgcHJpbnRmKCIgIE51bWJlciBvZiA8JXM+IHRhZ3M6ICV6dVxuIiwgaXQtPmZp
cnN0LnV0ZjgoKS5kYXRhKCksIGl0LT5zZWNvbmQpOworICAgICAgICBwcmludGYoIiAgTnVtYmVy
IG9mIDwlcz4gdGFnczogJXp1XG4iLCBpdC0+a2V5LnV0ZjgoKS5kYXRhKCksIGl0LT52YWx1ZSk7
CiAKICAgICBwcmludGYoIkF0dHJpYnV0ZXM6XG4iKTsKICAgICBwcmludGYoIiAgTnVtYmVyIG9m
IEF0dHJpYnV0ZXMgKG5vbi1Ob2RlIGFuZCBOb2RlKTogJXp1IFslenVdXG4iLCBhdHRyaWJ1dGVz
LCBzaXplb2YoQXR0cmlidXRlKSk7CkBAIC01MTEsNyArNTExLDcgQEAgdm9pZCBOb2RlOjpjbGVh
clJhcmVEYXRhKCkKICAgICAgICAgTm9kZVJhcmVEYXRhOjpOb2RlUmFyZURhdGFNYXAmIGRhdGFN
YXAgPSBOb2RlUmFyZURhdGE6OnJhcmVEYXRhTWFwKCk7CiAgICAgICAgIE5vZGVSYXJlRGF0YTo6
Tm9kZVJhcmVEYXRhTWFwOjppdGVyYXRvciBpdCA9IGRhdGFNYXAuZmluZCh0aGlzKTsKICAgICAg
ICAgQVNTRVJUKGl0ICE9IGRhdGFNYXAuZW5kKCkpOwotICAgICAgICBkZWxldGUgaXQtPnNlY29u
ZDsKKyAgICAgICAgZGVsZXRlIGl0LT52YWx1ZTsKICAgICAgICAgZGF0YU1hcC5yZW1vdmUoaXQp
OwogICAgIH0KICAgICBjbGVhckZsYWcoSGFzUmFyZURhdGFGbGFnKTsKQEAgLTIyNjUsMTggKzIy
NjUsMTggQEAgdm9pZCBOb2RlTGlzdHNOb2RlRGF0YTo6aW52YWxpZGF0ZUNhY2hlcyhjb25zdCBR
dWFsaWZpZWROYW1lKiBhdHRyTmFtZSkKIHsKICAgICBOb2RlTGlzdEF0b21pY05hbWVDYWNoZU1h
cDo6Y29uc3RfaXRlcmF0b3IgYXRvbWljTmFtZUNhY2hlRW5kID0gbV9hdG9taWNOYW1lQ2FjaGVz
LmVuZCgpOwogICAgIGZvciAoTm9kZUxpc3RBdG9taWNOYW1lQ2FjaGVNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV9hdG9taWNOYW1lQ2FjaGVzLmJlZ2luKCk7IGl0ICE9IGF0b21pY05hbWVDYWNo
ZUVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+aW52YWxpZGF0ZUNhY2hlKGF0dHJOYW1l
KTsKKyAgICAgICAgaXQtPnZhbHVlLT5pbnZhbGlkYXRlQ2FjaGUoYXR0ck5hbWUpOwogCiAgICAg
Tm9kZUxpc3ROYW1lQ2FjaGVNYXA6OmNvbnN0X2l0ZXJhdG9yIG5hbWVDYWNoZUVuZCA9IG1fbmFt
ZUNhY2hlcy5lbmQoKTsKICAgICBmb3IgKE5vZGVMaXN0TmFtZUNhY2hlTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IG1fbmFtZUNhY2hlcy5iZWdpbigpOyBpdCAhPSBuYW1lQ2FjaGVFbmQ7ICsraXQp
Ci0gICAgICAgIGl0LT5zZWNvbmQtPmludmFsaWRhdGVDYWNoZShhdHRyTmFtZSk7CisgICAgICAg
IGl0LT52YWx1ZS0+aW52YWxpZGF0ZUNhY2hlKGF0dHJOYW1lKTsKIAogICAgIGlmIChhdHRyTmFt
ZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgVGFnTm9kZUxpc3RDYWNoZU5TOjppdGVyYXRvciB0
YWdDYWNoZUVuZCA9IG1fdGFnTm9kZUxpc3RDYWNoZU5TLmVuZCgpOwogICAgIGZvciAoVGFnTm9k
ZUxpc3RDYWNoZU5TOjppdGVyYXRvciBpdCA9IG1fdGFnTm9kZUxpc3RDYWNoZU5TLmJlZ2luKCk7
IGl0ICE9IHRhZ0NhY2hlRW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5pbnZhbGlkYXRl
Q2FjaGUoKTsKKyAgICAgICAgaXQtPnZhbHVlLT5pbnZhbGlkYXRlQ2FjaGUoKTsKIH0KIAogdm9p
ZCBOb2RlOjpnZXRTdWJyZXNvdXJjZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mIHVybHMpIGNvbnN0
CkBAIC0yNDMzLDcgKzI0MzMsNyBAQCB2b2lkIE5vZGU6OmNvbGxlY3RNYXRjaGluZ09ic2VydmVy
c0Zvck11dGF0aW9uKEhhc2hNYXA8TXV0YXRpb25PYnNlcnZlciosIE11dGF0aQogICAgICAgICAg
ICAgICAgIE11dGF0aW9uUmVjb3JkRGVsaXZlcnlPcHRpb25zIGRlbGl2ZXJ5T3B0aW9ucyA9IHJl
Z2lzdHJhdGlvbi0+ZGVsaXZlcnlPcHRpb25zKCk7CiAgICAgICAgICAgICAgICAgSGFzaE1hcDxN
dXRhdGlvbk9ic2VydmVyKiwgTXV0YXRpb25SZWNvcmREZWxpdmVyeU9wdGlvbnM+OjpBZGRSZXN1
bHQgcmVzdWx0ID0gb2JzZXJ2ZXJzLmFkZChyZWdpc3RyYXRpb24tPm9ic2VydmVyKCksIGRlbGl2
ZXJ5T3B0aW9ucyk7CiAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgfD0gZGVsaXZlcnlPcHRp
b25zOworICAgICAgICAgICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlIHw9IGRlbGl2
ZXJ5T3B0aW9uczsKIAogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0yNDQ2LDcgKzI0NDYs
NyBAQCB2b2lkIE5vZGU6OmNvbGxlY3RNYXRjaGluZ09ic2VydmVyc0Zvck11dGF0aW9uKEhhc2hN
YXA8TXV0YXRpb25PYnNlcnZlciosIE11dGF0aQogICAgICAgICAgICAgICAgIE11dGF0aW9uUmVj
b3JkRGVsaXZlcnlPcHRpb25zIGRlbGl2ZXJ5T3B0aW9ucyA9IHJlZ2lzdHJhdGlvbi0+ZGVsaXZl
cnlPcHRpb25zKCk7CiAgICAgICAgICAgICAgICAgSGFzaE1hcDxNdXRhdGlvbk9ic2VydmVyKiwg
TXV0YXRpb25SZWNvcmREZWxpdmVyeU9wdGlvbnM+OjpBZGRSZXN1bHQgcmVzdWx0ID0gb2JzZXJ2
ZXJzLmFkZChyZWdpc3RyYXRpb24tPm9ic2VydmVyKCksIGRlbGl2ZXJ5T3B0aW9ucyk7CiAgICAg
ICAgICAgICAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgICAgICAgICAg
cmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgfD0gZGVsaXZlcnlPcHRpb25zOworICAgICAgICAgICAg
ICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlIHw9IGRlbGl2ZXJ5T3B0aW9uczsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlUmFyZURhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaAppbmRl
eCAxZmRlYmI2ZDIxODczNDg1NDRjODMyMGUyYzU1ZDZiZDg3MDk3N2Y0Li5mNDMxN2JkYmE1YmVk
ZGFkZjI0MTJiZWYyMzRjNTYyMDYxMzQ1MjgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vTm9kZVJhcmVEYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGVSYXJlRGF0YS5o
CkBAIC02OCwxMCArNjgsMTAgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgTm9kZUxpc3RBdG9t
aWNOYW1lQ2FjaGVNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX2F0b21pY05hbWVDYWNoZXMuYWRk
KG5hbWVkTm9kZUxpc3RLZXkobGlzdFR5cGUsIG5hbWUpLCAwKTsKICAgICAgICAgaWYgKCFyZXN1
bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUKj4ocmVzdWx0
Lml0ZXJhdG9yLT5zZWNvbmQpOworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQqPihy
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKIAogICAgICAgICBSZWZQdHI8VD4gbGlzdCA9IFQ6OmNy
ZWF0ZShub2RlLCBuYW1lKTsKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBsaXN0
LmdldCgpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gbGlzdC5nZXQoKTsKICAg
ICAgICAgcmV0dXJuIGxpc3QucmVsZWFzZSgpOwogICAgIH0KIApAQCAtODAsMTAgKzgwLDEwIEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIE5vZGVMaXN0TmFtZUNhY2hlTWFwOjpBZGRSZXN1bHQg
cmVzdWx0ID0gbV9uYW1lQ2FjaGVzLmFkZChuYW1lZE5vZGVMaXN0S2V5KGxpc3RUeXBlLCBuYW1l
KSwgMCk7CiAgICAgICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8VCo+KHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKKyAgICAgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxUKj4ocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CiAKICAgICAg
ICAgUmVmUHRyPFQ+IGxpc3QgPSBUOjpjcmVhdGUobm9kZSwgbmFtZSk7Ci0gICAgICAgIHJlc3Vs
dC5pdGVyYXRvci0+c2Vjb25kID0gbGlzdC5nZXQoKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZSA9IGxpc3QuZ2V0KCk7CiAgICAgICAgIHJldHVybiBsaXN0LnJlbGVhc2UoKTsKICAg
ICB9CiAKQEAgLTkyLDEwICs5MiwxMCBAQCBwdWJsaWM6CiAgICAgICAgIFF1YWxpZmllZE5hbWUg
bmFtZShudWxsQXRvbSwgbG9jYWxOYW1lLCBuYW1lc3BhY2VVUkkpOwogICAgICAgICBUYWdOb2Rl
TGlzdENhY2hlTlM6OkFkZFJlc3VsdCByZXN1bHQgPSBtX3RhZ05vZGVMaXN0Q2FjaGVOUy5hZGQo
bmFtZSwgMCk7CiAgICAgICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZTsKIAogICAgICAgICBSZWZQdHI8VGFnTm9kZUxpc3Q+IGxpc3QgPSBU
YWdOb2RlTGlzdDo6Y3JlYXRlKG5vZGUsIG5hbWVzcGFjZVVSSSwgbG9jYWxOYW1lKTsKLSAgICAg
ICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBsaXN0LmdldCgpOworICAgICAgICByZXN1bHQu
aXRlcmF0b3ItPnZhbHVlID0gbGlzdC5nZXQoKTsKICAgICAgICAgcmV0dXJuIGxpc3QucmVsZWFz
ZSgpOwogICAgIH0KIApAQCAtMTM2LDIxICsxMzYsMjEgQEAgcHVibGljOgogICAgICAgICBpZiAo
b2xkRG9jdW1lbnQgIT0gbmV3RG9jdW1lbnQpIHsKICAgICAgICAgICAgIE5vZGVMaXN0QXRvbWlj
TmFtZUNhY2hlTWFwOjpjb25zdF9pdGVyYXRvciBhdG9taWNOYW1lQ2FjaGVFbmQgPSBtX2F0b21p
Y05hbWVDYWNoZXMuZW5kKCk7CiAgICAgICAgICAgICBmb3IgKE5vZGVMaXN0QXRvbWljTmFtZUNh
Y2hlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fYXRvbWljTmFtZUNhY2hlcy5iZWdpbigpOyBp
dCAhPSBhdG9taWNOYW1lQ2FjaGVFbmQ7ICsraXQpIHsKLSAgICAgICAgICAgICAgICBEeW5hbWlj
U3VidHJlZU5vZGVMaXN0KiBsaXN0ID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgICAgICBEeW5h
bWljU3VidHJlZU5vZGVMaXN0KiBsaXN0ID0gaXQtPnZhbHVlOwogICAgICAgICAgICAgICAgIG9s
ZERvY3VtZW50LT51bnJlZ2lzdGVyTm9kZUxpc3RDYWNoZShsaXN0KTsKICAgICAgICAgICAgICAg
ICBuZXdEb2N1bWVudC0+cmVnaXN0ZXJOb2RlTGlzdENhY2hlKGxpc3QpOwogICAgICAgICAgICAg
fQogCiAgICAgICAgICAgICBOb2RlTGlzdE5hbWVDYWNoZU1hcDo6Y29uc3RfaXRlcmF0b3IgbmFt
ZUNhY2hlRW5kID0gbV9uYW1lQ2FjaGVzLmVuZCgpOwogICAgICAgICAgICAgZm9yIChOb2RlTGlz
dE5hbWVDYWNoZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX25hbWVDYWNoZXMuYmVnaW4oKTsg
aXQgIT0gbmFtZUNhY2hlRW5kOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAgRHluYW1pY1N1YnRy
ZWVOb2RlTGlzdCogbGlzdCA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICAgICAgRHluYW1pY1N1
YnRyZWVOb2RlTGlzdCogbGlzdCA9IGl0LT52YWx1ZTsKICAgICAgICAgICAgICAgICBvbGREb2N1
bWVudC0+dW5yZWdpc3Rlck5vZGVMaXN0Q2FjaGUobGlzdCk7CiAgICAgICAgICAgICAgICAgbmV3
RG9jdW1lbnQtPnJlZ2lzdGVyTm9kZUxpc3RDYWNoZShsaXN0KTsKICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgVGFnTm9kZUxpc3RDYWNoZU5TOjpjb25zdF9pdGVyYXRvciB0YWdFbmQgPSBt
X3RhZ05vZGVMaXN0Q2FjaGVOUy5lbmQoKTsKICAgICAgICAgICAgIGZvciAoVGFnTm9kZUxpc3RD
YWNoZU5TOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGFnTm9kZUxpc3RDYWNoZU5TLmJlZ2luKCk7
IGl0ICE9IHRhZ0VuZDsgKytpdCkgewotICAgICAgICAgICAgICAgIER5bmFtaWNTdWJ0cmVlTm9k
ZUxpc3QqIGxpc3QgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgICAgIER5bmFtaWNTdWJ0cmVl
Tm9kZUxpc3QqIGxpc3QgPSBpdC0+dmFsdWU7CiAgICAgICAgICAgICAgICAgQVNTRVJUKCFsaXN0
LT5pc1Jvb3RlZEF0RG9jdW1lbnQoKSk7CiAgICAgICAgICAgICAgICAgb2xkRG9jdW1lbnQtPnVu
cmVnaXN0ZXJOb2RlTGlzdENhY2hlKGxpc3QpOwogICAgICAgICAgICAgICAgIG5ld0RvY3VtZW50
LT5yZWdpc3Rlck5vZGVMaXN0Q2FjaGUobGlzdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Qcm9j
ZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwCmluZGV4IGU1OTQwOWJjZjQyYzViODBlMjk3NmJmNzhiZGU4
MTg1MzhjYjY3NGUuLjJmNDNhNTNmZGU2ZjYyOTkwODU0ZmQwYzY0N2RmZjMwYWQ3ZThiMWEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwCkBAIC0xMTcs
NyArMTE3LDcgQEAgdm9pZCBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246OmNoZWNrU3R5bGVTaGVldCgp
CiAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpID0gYXR0
cnMuZmluZCgidHlwZSIpOwogICAgICAgICBTdHJpbmcgdHlwZTsKICAgICAgICAgaWYgKGkgIT0g
YXR0cnMuZW5kKCkpCi0gICAgICAgICAgICB0eXBlID0gaS0+c2Vjb25kOworICAgICAgICAgICAg
dHlwZSA9IGktPnZhbHVlOwogCiAgICAgICAgIG1faXNDU1MgPSB0eXBlLmlzRW1wdHkoKSB8fCB0
eXBlID09ICJ0ZXh0L2NzcyI7CiAjaWYgRU5BQkxFKFhTTFQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAKaW5kZXggOTI0NDVjYTgwZGFmNjMzMjM5ZDJm
NzljZWU5OGRkOWRkNDQxYjMyMy4uNTM1YjU3MGI1ZDdkZTlmNGFmOTM1ODNlN2M3MWQxMmIyZDc1
MzVhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNw
cApAQCAtMTczLDkgKzE3Myw5IEBAIGJvb2wgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6Y2FuU3Vz
cGVuZEFjdGl2ZURPTU9iamVjdHMoKQogICAgIG1faXRlcmF0aW5nQWN0aXZlRE9NT2JqZWN0cyA9
IHRydWU7CiAgICAgSGFzaE1hcDxBY3RpdmVET01PYmplY3QqLCB2b2lkKj46Oml0ZXJhdG9yIGFj
dGl2ZU9iamVjdHNFbmQgPSBtX2FjdGl2ZURPTU9iamVjdHMuZW5kKCk7CiAgICAgZm9yIChIYXNo
TWFwPEFjdGl2ZURPTU9iamVjdCosIHZvaWQqPjo6aXRlcmF0b3IgaXRlciA9IG1fYWN0aXZlRE9N
T2JqZWN0cy5iZWdpbigpOyBpdGVyICE9IGFjdGl2ZU9iamVjdHNFbmQ7ICsraXRlcikgewotICAg
ICAgICBBU1NFUlQoaXRlci0+Zmlyc3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSA9PSB0aGlz
KTsKLSAgICAgICAgQVNTRVJUKGl0ZXItPmZpcnN0LT5zdXNwZW5kSWZOZWVkZWRDYWxsZWQoKSk7
Ci0gICAgICAgIGlmICghaXRlci0+Zmlyc3QtPmNhblN1c3BlbmQoKSkgeworICAgICAgICBBU1NF
UlQoaXRlci0+a2V5LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgPT0gdGhpcyk7CisgICAgICAg
IEFTU0VSVChpdGVyLT5rZXktPnN1c3BlbmRJZk5lZWRlZENhbGxlZCgpKTsKKyAgICAgICAgaWYg
KCFpdGVyLT5rZXktPmNhblN1c3BlbmQoKSkgewogICAgICAgICAgICAgbV9pdGVyYXRpbmdBY3Rp
dmVET01PYmplY3RzID0gZmFsc2U7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IH0KQEAgLTE5MCw5ICsxOTAsOSBAQCB2b2lkIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnN1c3Bl
bmRBY3RpdmVET01PYmplY3RzKEFjdGl2ZURPTU9iamVjdDo6UmVhc29uRm9yUwogICAgIG1faXRl
cmF0aW5nQWN0aXZlRE9NT2JqZWN0cyA9IHRydWU7CiAgICAgSGFzaE1hcDxBY3RpdmVET01PYmpl
Y3QqLCB2b2lkKj46Oml0ZXJhdG9yIGFjdGl2ZU9iamVjdHNFbmQgPSBtX2FjdGl2ZURPTU9iamVj
dHMuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPEFjdGl2ZURPTU9iamVjdCosIHZvaWQqPjo6aXRl
cmF0b3IgaXRlciA9IG1fYWN0aXZlRE9NT2JqZWN0cy5iZWdpbigpOyBpdGVyICE9IGFjdGl2ZU9i
amVjdHNFbmQ7ICsraXRlcikgewotICAgICAgICBBU1NFUlQoaXRlci0+Zmlyc3QtPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSA9PSB0aGlzKTsKLSAgICAgICAgQVNTRVJUKGl0ZXItPmZpcnN0LT5z
dXNwZW5kSWZOZWVkZWRDYWxsZWQoKSk7Ci0gICAgICAgIGl0ZXItPmZpcnN0LT5zdXNwZW5kKHdo
eSk7CisgICAgICAgIEFTU0VSVChpdGVyLT5rZXktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSA9
PSB0aGlzKTsKKyAgICAgICAgQVNTRVJUKGl0ZXItPmtleS0+c3VzcGVuZElmTmVlZGVkQ2FsbGVk
KCkpOworICAgICAgICBpdGVyLT5rZXktPnN1c3BlbmQod2h5KTsKICAgICB9CiAgICAgbV9pdGVy
YXRpbmdBY3RpdmVET01PYmplY3RzID0gZmFsc2U7CiAgICAgbV9hY3RpdmVET01PYmplY3RzQXJl
U3VzcGVuZGVkID0gdHJ1ZTsKQEAgLTIwNiw5ICsyMDYsOSBAQCB2b2lkIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQ6OnJlc3VtZUFjdGl2ZURPTU9iamVjdHMoKQogICAgIG1faXRlcmF0aW5nQWN0aXZl
RE9NT2JqZWN0cyA9IHRydWU7CiAgICAgSGFzaE1hcDxBY3RpdmVET01PYmplY3QqLCB2b2lkKj46
Oml0ZXJhdG9yIGFjdGl2ZU9iamVjdHNFbmQgPSBtX2FjdGl2ZURPTU9iamVjdHMuZW5kKCk7CiAg
ICAgZm9yIChIYXNoTWFwPEFjdGl2ZURPTU9iamVjdCosIHZvaWQqPjo6aXRlcmF0b3IgaXRlciA9
IG1fYWN0aXZlRE9NT2JqZWN0cy5iZWdpbigpOyBpdGVyICE9IGFjdGl2ZU9iamVjdHNFbmQ7ICsr
aXRlcikgewotICAgICAgICBBU1NFUlQoaXRlci0+Zmlyc3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKSA9PSB0aGlzKTsKLSAgICAgICAgQVNTRVJUKGl0ZXItPmZpcnN0LT5zdXNwZW5kSWZOZWVk
ZWRDYWxsZWQoKSk7Ci0gICAgICAgIGl0ZXItPmZpcnN0LT5yZXN1bWUoKTsKKyAgICAgICAgQVNT
RVJUKGl0ZXItPmtleS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpID09IHRoaXMpOworICAgICAg
ICBBU1NFUlQoaXRlci0+a2V5LT5zdXNwZW5kSWZOZWVkZWRDYWxsZWQoKSk7CisgICAgICAgIGl0
ZXItPmtleS0+cmVzdW1lKCk7CiAgICAgfQogICAgIG1faXRlcmF0aW5nQWN0aXZlRE9NT2JqZWN0
cyA9IGZhbHNlOwogfQpAQCAtMjIwLDkgKzIyMCw5IEBAIHZvaWQgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dDo6c3RvcEFjdGl2ZURPTU9iamVjdHMoKQogICAgIG1faXRlcmF0aW5nQWN0aXZlRE9NT2Jq
ZWN0cyA9IHRydWU7CiAgICAgSGFzaE1hcDxBY3RpdmVET01PYmplY3QqLCB2b2lkKj46Oml0ZXJh
dG9yIGFjdGl2ZU9iamVjdHNFbmQgPSBtX2FjdGl2ZURPTU9iamVjdHMuZW5kKCk7CiAgICAgZm9y
IChIYXNoTWFwPEFjdGl2ZURPTU9iamVjdCosIHZvaWQqPjo6aXRlcmF0b3IgaXRlciA9IG1fYWN0
aXZlRE9NT2JqZWN0cy5iZWdpbigpOyBpdGVyICE9IGFjdGl2ZU9iamVjdHNFbmQ7ICsraXRlcikg
ewotICAgICAgICBBU1NFUlQoaXRlci0+Zmlyc3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSA9
PSB0aGlzKTsKLSAgICAgICAgQVNTRVJUKGl0ZXItPmZpcnN0LT5zdXNwZW5kSWZOZWVkZWRDYWxs
ZWQoKSk7Ci0gICAgICAgIGl0ZXItPmZpcnN0LT5zdG9wKCk7CisgICAgICAgIEFTU0VSVChpdGVy
LT5rZXktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSA9PSB0aGlzKTsKKyAgICAgICAgQVNTRVJU
KGl0ZXItPmtleS0+c3VzcGVuZElmTmVlZGVkQ2FsbGVkKCkpOworICAgICAgICBpdGVyLT5rZXkt
PnN0b3AoKTsKICAgICB9CiAgICAgbV9pdGVyYXRpbmdBY3RpdmVET01PYmplY3RzID0gZmFsc2U7
CiAKQEAgLTM4MCw3ICszODAsNyBAQCB2b2lkIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OmFkanVz
dE1pbmltdW1UaW1lckludGVydmFsKGRvdWJsZSBvbGRNaW5pbXVtVGltZXJJbgogewogICAgIGlm
IChtaW5pbXVtVGltZXJJbnRlcnZhbCgpICE9IG9sZE1pbmltdW1UaW1lckludGVydmFsKSB7CiAg
ICAgICAgIGZvciAoVGltZW91dE1hcDo6aXRlcmF0b3IgaXRlciA9IG1fdGltZW91dHMuYmVnaW4o
KTsgaXRlciAhPSBtX3RpbWVvdXRzLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgICAgIERPTVRp
bWVyKiB0aW1lciA9IGl0ZXItPnNlY29uZDsKKyAgICAgICAgICAgIERPTVRpbWVyKiB0aW1lciA9
IGl0ZXItPnZhbHVlOwogICAgICAgICAgICAgdGltZXItPmFkanVzdE1pbmltdW1UaW1lckludGVy
dmFsKG9sZE1pbmltdW1UaW1lckludGVydmFsKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TZWxlY3RvclF1ZXJ5LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9TZWxlY3RvclF1ZXJ5LmNwcAppbmRleCA3ODYyYWVmY2MzYWJhOGU0YjkyYzg0MzMyYjc0
YTk2MDNjYWU3MjI1Li5lY2I1YTE2MGZiMjZmYWM0YTdkMjcxODFhMGMyNDRlYmQwNGNlNDUzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2VsZWN0b3JRdWVyeS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL1NlbGVjdG9yUXVlcnkuY3BwCkBAIC0xNjksNyArMTY5LDcgQEAgU2Vs
ZWN0b3JRdWVyeSogU2VsZWN0b3JRdWVyeUNhY2hlOjphZGQoY29uc3QgQXRvbWljU3RyaW5nJiBz
ZWxlY3RvcnMsIERvY3VtZW50KgogewogICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBPd25QdHI8
U2VsZWN0b3JRdWVyeT4gPjo6aXRlcmF0b3IgaXQgPSBtX2VudHJpZXMuZmluZChzZWxlY3RvcnMp
OwogICAgIGlmIChpdCAhPSBtX2VudHJpZXMuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdC0+c2Vj
b25kLmdldCgpOworICAgICAgICByZXR1cm4gaXQtPnZhbHVlLmdldCgpOwogCiAgICAgQ1NTUGFy
c2VyIHBhcnNlcihkb2N1bWVudCk7CiAgICAgQ1NTU2VsZWN0b3JMaXN0IHNlbGVjdG9yTGlzdDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TcGFjZVNwbGl0U3RyaW5nLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9TcGFjZVNwbGl0U3RyaW5nLmNwcAppbmRleCA5Y2NlN2Q5NWI1ZTEw
NDQzYzAzZWRhNWI3MmYxMTJjNTcwNTJlNTEyLi4xZGMxZmIwZGRlMWYwMjNmM2Y4YTY1M2IyM2Fj
M2Q4NzM4ZThjMzQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU3BhY2VTcGxpdFN0
cmluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NwYWNlU3BsaXRTdHJpbmcuY3BwCkBA
IC0xNTAsNyArMTUwLDcgQEAgU3BhY2VTcGxpdFN0cmluZ0RhdGE6On5TcGFjZVNwbGl0U3RyaW5n
RGF0YSgpCiAKIFBhc3NSZWZQdHI8U3BhY2VTcGxpdFN0cmluZ0RhdGE+IFNwYWNlU3BsaXRTdHJp
bmdEYXRhOjpjcmVhdGUoY29uc3QgQXRvbWljU3RyaW5nJiBzdHJpbmcpCiB7Ci0gICAgU3BhY2VT
cGxpdFN0cmluZ0RhdGEqJiBkYXRhID0gc2hhcmVkRGF0YU1hcCgpLmFkZChzdHJpbmcsIDApLml0
ZXJhdG9yLT5zZWNvbmQ7CisgICAgU3BhY2VTcGxpdFN0cmluZ0RhdGEqJiBkYXRhID0gc2hhcmVk
RGF0YU1hcCgpLmFkZChzdHJpbmcsIDApLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoIWRhdGEp
IHsKICAgICAgICAgZGF0YSA9IG5ldyBTcGFjZVNwbGl0U3RyaW5nRGF0YShzdHJpbmcpOwogICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoZGF0YSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vU3R5bGVkRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5j
cHAKaW5kZXggZTc1Y2Q1MzFkMTZmOGQ4ZTIwMjM2OTI3OTZmMWZlNDlhYzhmNzUyMi4uMTU1M2Vi
NGI2MTcxZmFkNGU5YjZmNGIyMjhlNGM1MmZiNTAxZjI4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TdHls
ZWRFbGVtZW50LmNwcApAQCAtMjc3LDE0ICsyNzcsMTQgQEAgdm9pZCBTdHlsZWRFbGVtZW50Ojp1
cGRhdGVBdHRyaWJ1dGVTdHlsZSgpCiAgICAgUHJlc2VudGF0aW9uQXR0cmlidXRlQ2FjaGU6Oml0
ZXJhdG9yIGNhY2hlSXRlcmF0b3I7CiAgICAgaWYgKGNhY2hlSGFzaCkgewogICAgICAgICBjYWNo
ZUl0ZXJhdG9yID0gcHJlc2VudGF0aW9uQXR0cmlidXRlQ2FjaGUoKS5hZGQoY2FjaGVIYXNoLCBu
dWxscHRyKS5pdGVyYXRvcjsKLSAgICAgICAgaWYgKGNhY2hlSXRlcmF0b3ItPnNlY29uZCAmJiBj
YWNoZUl0ZXJhdG9yLT5zZWNvbmQtPmtleSAhPSBjYWNoZUtleSkKKyAgICAgICAgaWYgKGNhY2hl
SXRlcmF0b3ItPnZhbHVlICYmIGNhY2hlSXRlcmF0b3ItPnZhbHVlLT5rZXkgIT0gY2FjaGVLZXkp
CiAgICAgICAgICAgICBjYWNoZUhhc2ggPSAwOwogICAgIH0gZWxzZQogICAgICAgICBjYWNoZUl0
ZXJhdG9yID0gcHJlc2VudGF0aW9uQXR0cmlidXRlQ2FjaGUoKS5lbmQoKTsKIAogICAgIFJlZlB0
cjxTdHlsZVByb3BlcnR5U2V0PiBzdHlsZTsKLSAgICBpZiAoY2FjaGVIYXNoICYmIGNhY2hlSXRl
cmF0b3ItPnNlY29uZCkgewotICAgICAgICBzdHlsZSA9IGNhY2hlSXRlcmF0b3ItPnNlY29uZC0+
dmFsdWU7CisgICAgaWYgKGNhY2hlSGFzaCAmJiBjYWNoZUl0ZXJhdG9yLT52YWx1ZSkgeworICAg
ICAgICBzdHlsZSA9IGNhY2hlSXRlcmF0b3ItPnZhbHVlLT52YWx1ZTsKICAgICAgICAgcHJlc2Vu
dGF0aW9uQXR0cmlidXRlQ2FjaGVDbGVhbmVyKCkuZGlkSGl0UHJlc2VudGF0aW9uQXR0cmlidXRl
Q2FjaGUoKTsKICAgICB9IGVsc2UgewogICAgICAgICBzdHlsZSA9IFN0eWxlUHJvcGVydHlTZXQ6
OmNyZWF0ZShpc1NWR0VsZW1lbnQoKSA/IFNWR0F0dHJpYnV0ZU1vZGUgOiBDU1NRdWlya3NNb2Rl
KTsKQEAgLTI5OCw3ICsyOTgsNyBAQCB2b2lkIFN0eWxlZEVsZW1lbnQ6OnVwZGF0ZUF0dHJpYnV0
ZVN0eWxlKCkKIAogICAgIGF0dHJpYnV0ZURhdGEoKS0+c2V0QXR0cmlidXRlU3R5bGUoc3R5bGUt
PmlzRW1wdHkoKSA/IDAgOiBzdHlsZSk7CiAKLSAgICBpZiAoIWNhY2hlSGFzaCB8fCBjYWNoZUl0
ZXJhdG9yLT5zZWNvbmQpCisgICAgaWYgKCFjYWNoZUhhc2ggfHwgY2FjaGVJdGVyYXRvci0+dmFs
dWUpCiAgICAgICAgIHJldHVybjsKIAogICAgIE93blB0cjxQcmVzZW50YXRpb25BdHRyaWJ1dGVD
YWNoZUVudHJ5PiBuZXdFbnRyeSA9IGFkb3B0UHRyKG5ldyBQcmVzZW50YXRpb25BdHRyaWJ1dGVD
YWNoZUVudHJ5KTsKQEAgLTMxMSw3ICszMTEsNyBAQCB2b2lkIFN0eWxlZEVsZW1lbnQ6OnVwZGF0
ZUF0dHJpYnV0ZVN0eWxlKCkKICAgICAgICAgcHJlc2VudGF0aW9uQXR0cmlidXRlQ2FjaGUoKS5j
bGVhcigpOwogICAgICAgICBwcmVzZW50YXRpb25BdHRyaWJ1dGVDYWNoZSgpLnNldChjYWNoZUhh
c2gsIG5ld0VudHJ5LnJlbGVhc2UoKSk7CiAgICAgfSBlbHNlCi0gICAgICAgIGNhY2hlSXRlcmF0
b3ItPnNlY29uZCA9IG5ld0VudHJ5LnJlbGVhc2UoKTsKKyAgICAgICAgY2FjaGVJdGVyYXRvci0+
dmFsdWUgPSBuZXdFbnRyeS5yZWxlYXNlKCk7CiB9CiAKIHZvaWQgU3R5bGVkRWxlbWVudDo6YWRk
UHJvcGVydHlUb0F0dHJpYnV0ZVN0eWxlKFN0eWxlUHJvcGVydHlTZXQqIHN0eWxlLCBDU1NQcm9w
ZXJ0eUlEIHByb3BlcnR5SUQsIGludCBpZGVudGlmaWVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9tYWMvQWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyLm1tIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9tYWMvQWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyLm1tCmluZGV4
IDk5OTE2YzFlMDBmNDQ5MjJhYTdlYmM2Y2ZiMDBmYzQ5NzY4ZDQ0M2IuLjZjYTVkNWYwMjljOTkx
NjkzM2I4Mjg5ZDE0NWYwZDEyMWM2ZDU2NDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvbWFjL0FsdGVybmF0aXZlVGV4dFVJQ29udHJvbGxlci5tbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL21hYy9BbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xsZXIubW0KQEAgLTUwLDcg
KzUwLDcgQEAgTlNUZXh0QWx0ZXJuYXRpdmVzKiBBbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xsZXI6
OkFsZXJuYXRpdmVUZXh0Q29udGV4dENvbnRyb2xsZXIKICAgICBIYXNoTWFwVHlwZTo6Y29uc3Rf
aXRlcmF0b3IgaXRyID0gbV9hbHRlcm5hdGl2ZXNPYmplY3RNYXAuZmluZChjb250ZXh0KTsKICAg
ICBpZiAoaXRyID09IG1fYWx0ZXJuYXRpdmVzT2JqZWN0TWFwLmVuZCgpKQogICAgICAgICByZXR1
cm4gTlVMTDsKLSAgICByZXR1cm4gaXRyLT5zZWNvbmQuZ2V0KCk7CisgICAgcmV0dXJuIGl0ci0+
dmFsdWUuZ2V0KCk7CiB9CiAKIHZvaWQgQWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyOjpBbGVy
bmF0aXZlVGV4dENvbnRleHRDb250cm9sbGVyOjpyZW1vdmVBbHRlcm5hdGl2ZXNGb3JDb250ZXh0
KHVpbnQ2NF90IGNvbnRleHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0Zvcm1D
b250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUNvbnRyb2xsZXIuY3BwCmlu
ZGV4IGUzNWVmZjE5ZTE5YmE5YzVlNWQxNWM4MDJiNmJiOWZlNDU0MWE0NmEuLjBhMDhjMWVjYTdj
NTI4N2M0ODU3YmI3NDU0ZTQzMTUwZmNjMmMwNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvRm9ybUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUNv
bnRyb2xsZXIuY3BwCkBAIC0yMjgsOCArMjI4LDggQEAgdm9pZCBTYXZlZEZvcm1TdGF0ZTo6c2Vy
aWFsaXplVG8oVmVjdG9yPFN0cmluZz4mIHN0YXRlVmVjdG9yKSBjb25zdAogewogICAgIHN0YXRl
VmVjdG9yLmFwcGVuZChTdHJpbmc6Om51bWJlcihtX2NvbnRyb2xTdGF0ZUNvdW50KSk7CiAgICAg
Zm9yIChGb3JtRWxlbWVudFN0YXRlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fc3RhdGVGb3JO
ZXdGb3JtRWxlbWVudHMuYmVnaW4oKTsgaXQgIT0gbV9zdGF0ZUZvck5ld0Zvcm1FbGVtZW50cy5l
bmQoKTsgKytpdCkgewotICAgICAgICBjb25zdCBGb3JtRWxlbWVudEtleSYga2V5ID0gaXQtPmZp
cnN0OwotICAgICAgICBjb25zdCBEZXF1ZTxGb3JtQ29udHJvbFN0YXRlPiYgcXVldWUgPSBpdC0+
c2Vjb25kOworICAgICAgICBjb25zdCBGb3JtRWxlbWVudEtleSYga2V5ID0gaXQtPmtleTsKKyAg
ICAgICAgY29uc3QgRGVxdWU8Rm9ybUNvbnRyb2xTdGF0ZT4mIHF1ZXVlID0gaXQtPnZhbHVlOwog
ICAgICAgICBmb3IgKERlcXVlPEZvcm1Db250cm9sU3RhdGU+Ojpjb25zdF9pdGVyYXRvciBxdWVJ
dGVyYXRvciA9IHF1ZXVlLmJlZ2luKCk7IHF1ZUl0ZXJhdG9yICE9IHF1ZXVlLmVuZCgpOyArK3F1
ZUl0ZXJhdG9yKSB7CiAgICAgICAgICAgICBzdGF0ZVZlY3Rvci5hcHBlbmQoa2V5Lm5hbWUoKSk7
CiAgICAgICAgICAgICBzdGF0ZVZlY3Rvci5hcHBlbmQoa2V5LnR5cGUoKSk7CkBAIC0yNDMsNyAr
MjQzLDcgQEAgdm9pZCBTYXZlZEZvcm1TdGF0ZTo6YXBwZW5kQ29udHJvbFN0YXRlKGNvbnN0IEF0
b21pY1N0cmluZyYgbmFtZSwgY29uc3QgQXRvbWljU3QKICAgICBGb3JtRWxlbWVudEtleSBrZXko
bmFtZS5pbXBsKCksIHR5cGUuaW1wbCgpKTsKICAgICBGb3JtRWxlbWVudFN0YXRlTWFwOjppdGVy
YXRvciBpdCA9IG1fc3RhdGVGb3JOZXdGb3JtRWxlbWVudHMuZmluZChrZXkpOwogICAgIGlmIChp
dCAhPSBtX3N0YXRlRm9yTmV3Rm9ybUVsZW1lbnRzLmVuZCgpKQotICAgICAgICBpdC0+c2Vjb25k
LmFwcGVuZChzdGF0ZSk7CisgICAgICAgIGl0LT52YWx1ZS5hcHBlbmQoc3RhdGUpOwogICAgIGVs
c2UgewogICAgICAgICBEZXF1ZTxGb3JtQ29udHJvbFN0YXRlPiBzdGF0ZUxpc3Q7CiAgICAgICAg
IHN0YXRlTGlzdC5hcHBlbmQoc3RhdGUpOwpAQCAtMjU5LDEwICsyNTksMTAgQEAgRm9ybUNvbnRy
b2xTdGF0ZSBTYXZlZEZvcm1TdGF0ZTo6dGFrZUNvbnRyb2xTdGF0ZShjb25zdCBBdG9taWNTdHJp
bmcmIG5hbWUsIGNvbnMKICAgICBGb3JtRWxlbWVudFN0YXRlTWFwOjppdGVyYXRvciBpdCA9IG1f
c3RhdGVGb3JOZXdGb3JtRWxlbWVudHMuZmluZChGb3JtRWxlbWVudEtleShuYW1lLmltcGwoKSwg
dHlwZS5pbXBsKCkpKTsKICAgICBpZiAoaXQgPT0gbV9zdGF0ZUZvck5ld0Zvcm1FbGVtZW50cy5l
bmQoKSkKICAgICAgICAgcmV0dXJuIEZvcm1Db250cm9sU3RhdGUoKTsKLSAgICBBU1NFUlQoaXQt
PnNlY29uZC5zaXplKCkpOwotICAgIEZvcm1Db250cm9sU3RhdGUgc3RhdGUgPSBpdC0+c2Vjb25k
LnRha2VGaXJzdCgpOworICAgIEFTU0VSVChpdC0+dmFsdWUuc2l6ZSgpKTsKKyAgICBGb3JtQ29u
dHJvbFN0YXRlIHN0YXRlID0gaXQtPnZhbHVlLnRha2VGaXJzdCgpOwogICAgIG1fY29udHJvbFN0
YXRlQ291bnQtLTsKLSAgICBpZiAoIWl0LT5zZWNvbmQuc2l6ZSgpKQorICAgIGlmICghaXQtPnZh
bHVlLnNpemUoKSkKICAgICAgICAgbV9zdGF0ZUZvck5ld0Zvcm1FbGVtZW50cy5yZW1vdmUoaXQp
OwogICAgIHJldHVybiBzdGF0ZTsKIH0KQEAgLTI3MSwxMCArMjcxLDEwIEBAIFZlY3RvcjxTdHJp
bmc+IFNhdmVkRm9ybVN0YXRlOjpnZXRSZWZlcmVuY2VkRmlsZVBhdGhzKCkgY29uc3QKIHsKICAg
ICBWZWN0b3I8U3RyaW5nPiB0b1JldHVybjsKICAgICBmb3IgKEZvcm1FbGVtZW50U3RhdGVNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zdGF0ZUZvck5ld0Zvcm1FbGVtZW50cy5iZWdpbigpOyBp
dCAhPSBtX3N0YXRlRm9yTmV3Rm9ybUVsZW1lbnRzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGNv
bnN0IEZvcm1FbGVtZW50S2V5JiBrZXkgPSBpdC0+Zmlyc3Q7CisgICAgICAgIGNvbnN0IEZvcm1F
bGVtZW50S2V5JiBrZXkgPSBpdC0+a2V5OwogICAgICAgICBpZiAoQXRvbWljU3RyaW5nKGtleS50
eXBlKCkpICE9IEF0b21pY1N0cmluZygiZmlsZSIpKQogICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIGNvbnN0IERlcXVlPEZvcm1Db250cm9sU3RhdGU+JiBxdWV1ZSA9IGl0LT5zZWNvbmQ7
CisgICAgICAgIGNvbnN0IERlcXVlPEZvcm1Db250cm9sU3RhdGU+JiBxdWV1ZSA9IGl0LT52YWx1
ZTsKICAgICAgICAgZm9yIChEZXF1ZTxGb3JtQ29udHJvbFN0YXRlPjo6Y29uc3RfaXRlcmF0b3Ig
cXVlSXRlcmF0b3IgPSBxdWV1ZS5iZWdpbigpOyBxdWVJdGVyYXRvciAhPSBxdWV1ZS5lbmQoKTsg
KytxdWVJdGVyYXRvcikgewogICAgICAgICAgICAgY29uc3QgVmVjdG9yPEZpbGVDaG9vc2VyRmls
ZUluZm8+JiBzZWxlY3RlZEZpbGVzID0gSFRNTElucHV0RWxlbWVudDo6ZmlsZXNGcm9tRmlsZUlu
cHV0Rm9ybUNvbnRyb2xTdGF0ZSgqcXVlSXRlcmF0b3IpOwogICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBzZWxlY3RlZEZpbGVzLnNpemUoKTsgKytpKQpAQCAtMzQ5LDEyICszNDks
MTIgQEAgQXRvbWljU3RyaW5nIEZvcm1LZXlHZW5lcmF0b3I6OmZvcm1LZXkoY29uc3QgSFRNTEZv
cm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZSYgY28KICAgICB9CiAgICAgRm9ybVRvS2V5TWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IG1fZm9ybVRvS2V5TWFwLmZpbmQoZm9ybSk7CiAgICAgaWYgKGl0
ICE9IG1fZm9ybVRvS2V5TWFwLmVuZCgpKQotICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAg
ICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKIAogICAgIFN0cmluZyBzaWduYXR1cmUgPSBmb3JtU2ln
bmF0dXJlKCpmb3JtKTsKICAgICBBU1NFUlQoIXNpZ25hdHVyZS5pc051bGwoKSk7CiAgICAgRm9y
bVNpZ25hdHVyZVRvTmV4dEluZGV4TWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9mb3JtU2lnbmF0
dXJlVG9OZXh0SW5kZXhNYXAuYWRkKHNpZ25hdHVyZSwgMCk7Ci0gICAgdW5zaWduZWQgbmV4dElu
ZGV4ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQrKzsKKyAgICB1bnNpZ25lZCBuZXh0SW5kZXgg
PSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlKys7CiAKICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7
CiAgICAgYnVpbGRlci5hcHBlbmQoc2lnbmF0dXJlKTsKQEAgLTQwNSw4ICs0MDUsOCBAQCBQYXNz
T3duUHRyPEZvcm1Db250cm9sbGVyOjpTYXZlZEZvcm1TdGF0ZU1hcD4gRm9ybUNvbnRyb2xsZXI6
OmNyZWF0ZVNhdmVkRm9ybVN0YQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIFNhdmVk
Rm9ybVN0YXRlTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gc3RhdGVNYXAtPmFkZChrZXlHZW5lcmF0
b3ItPmZvcm1LZXkoKmNvbnRyb2wpLmltcGwoKSwgbnVsbHB0cik7CiAgICAgICAgIGlmIChyZXN1
bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gU2F2
ZWRGb3JtU3RhdGU6OmNyZWF0ZSgpOwotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZC0+
YXBwZW5kQ29udHJvbFN0YXRlKGNvbnRyb2wtPm5hbWUoKSwgY29udHJvbC0+dHlwZSgpLCBjb250
cm9sLT5zYXZlRm9ybUNvbnRyb2xTdGF0ZSgpKTsKKyAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRv
ci0+dmFsdWUgPSBTYXZlZEZvcm1TdGF0ZTo6Y3JlYXRlKCk7CisgICAgICAgIHJlc3VsdC5pdGVy
YXRvci0+dmFsdWUtPmFwcGVuZENvbnRyb2xTdGF0ZShjb250cm9sLT5uYW1lKCksIGNvbnRyb2wt
PnR5cGUoKSwgY29udHJvbC0+c2F2ZUZvcm1Db250cm9sU3RhdGUoKSk7CiAgICAgfQogICAgIHJl
dHVybiBzdGF0ZU1hcC5yZWxlYXNlKCk7CiB9CkBAIC00MTgsOCArNDE4LDggQEAgVmVjdG9yPFN0
cmluZz4gRm9ybUNvbnRyb2xsZXI6OmZvcm1FbGVtZW50c1N0YXRlKCkgY29uc3QKICAgICBzdGF0
ZVZlY3Rvci5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fZm9ybUVsZW1lbnRzV2l0aFN0YXRlLnNp
emUoKSAqIDQpOwogICAgIHN0YXRlVmVjdG9yLmFwcGVuZChmb3JtU3RhdGVTaWduYXR1cmUoKSk7
CiAgICAgZm9yIChTYXZlZEZvcm1TdGF0ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBzdGF0ZU1h
cC0+YmVnaW4oKTsgaXQgIT0gc3RhdGVNYXAtPmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIHN0YXRl
VmVjdG9yLmFwcGVuZChpdC0+Zmlyc3QuZ2V0KCkpOwotICAgICAgICBpdC0+c2Vjb25kLT5zZXJp
YWxpemVUbyhzdGF0ZVZlY3Rvcik7CisgICAgICAgIHN0YXRlVmVjdG9yLmFwcGVuZChpdC0+a2V5
LmdldCgpKTsKKyAgICAgICAgaXQtPnZhbHVlLT5zZXJpYWxpemVUbyhzdGF0ZVZlY3Rvcik7CiAg
ICAgfQogICAgIGJvb2wgaGFzT25seVNpZ25hdHVyZSA9IHN0YXRlVmVjdG9yLnNpemUoKSA9PSAx
OwogICAgIGlmIChoYXNPbmx5U2lnbmF0dXJlKQpAQCAtNDQxLDggKzQ0MSw4IEBAIEZvcm1Db250
cm9sU3RhdGUgRm9ybUNvbnRyb2xsZXI6OnRha2VTdGF0ZUZvckZvcm1FbGVtZW50KGNvbnN0IEhU
TUxGb3JtQ29udHJvbEVsCiAgICAgU2F2ZWRGb3JtU3RhdGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9z
YXZlZEZvcm1TdGF0ZU1hcC5maW5kKG1fZm9ybUtleUdlbmVyYXRvci0+Zm9ybUtleShjb250cm9s
KS5pbXBsKCkpOwogICAgIGlmIChpdCA9PSBtX3NhdmVkRm9ybVN0YXRlTWFwLmVuZCgpKQogICAg
ICAgICByZXR1cm4gRm9ybUNvbnRyb2xTdGF0ZSgpOwotICAgIEZvcm1Db250cm9sU3RhdGUgc3Rh
dGUgPSBpdC0+c2Vjb25kLT50YWtlQ29udHJvbFN0YXRlKGNvbnRyb2wubmFtZSgpLCBjb250cm9s
LnR5cGUoKSk7Ci0gICAgaWYgKGl0LT5zZWNvbmQtPmlzRW1wdHkoKSkKKyAgICBGb3JtQ29udHJv
bFN0YXRlIHN0YXRlID0gaXQtPnZhbHVlLT50YWtlQ29udHJvbFN0YXRlKGNvbnRyb2wubmFtZSgp
LCBjb250cm9sLnR5cGUoKSk7CisgICAgaWYgKGl0LT52YWx1ZS0+aXNFbXB0eSgpKQogICAgICAg
ICBtX3NhdmVkRm9ybVN0YXRlTWFwLnJlbW92ZShpdCk7CiAgICAgcmV0dXJuIHN0YXRlOwogfQpA
QCAtNTExLDcgKzUxMSw3IEBAIFZlY3RvcjxTdHJpbmc+IEZvcm1Db250cm9sbGVyOjpnZXRSZWZl
cmVuY2VkRmlsZVBhdGhzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBzdGF0CiAgICAgU2F2ZWRGb3Jt
U3RhdGVNYXAgbWFwOwogICAgIGZvcm1TdGF0ZXNGcm9tU3RhdGVWZWN0b3Ioc3RhdGVWZWN0b3Is
IG1hcCk7CiAgICAgZm9yIChTYXZlZEZvcm1TdGF0ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
YXAuYmVnaW4oKTsgaXQgIT0gbWFwLmVuZCgpOyArK2l0KQotICAgICAgICB0b1JldHVybi5hcHBl
bmQoaXQtPnNlY29uZC0+Z2V0UmVmZXJlbmNlZEZpbGVQYXRocygpKTsKKyAgICAgICAgdG9SZXR1
cm4uYXBwZW5kKGl0LT52YWx1ZS0+Z2V0UmVmZXJlbmNlZEZpbGVQYXRocygpKTsKICAgICByZXR1
cm4gdG9SZXR1cm47CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENv
bGxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5jcHAKaW5k
ZXggOTFlMThhM2ZiZGYyZDg3YTZlMDc5NGU3Y2IyYjcxYjY0ZjhhYjljNS4uMWVjYjY0NGNhMWI2
MzA4MDdhZDY2YTk3NDRlM2RmMzMxNGZlYWY0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MQ29sbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29s
bGVjdGlvbi5jcHAKQEAgLTU1OSw3ICs1NTksNyBAQCBQYXNzUmVmUHRyPE5vZGVMaXN0PiBIVE1M
Q29sbGVjdGlvbjo6dGFncyhjb25zdCBTdHJpbmcmIG5hbWUpCiAKIHZvaWQgSFRNTENvbGxlY3Rp
b25DYWNoZUJhc2U6OmFwcGVuZChOb2RlQ2FjaGVNYXAmIG1hcCwgY29uc3QgQXRvbWljU3RyaW5n
JiBrZXksIEVsZW1lbnQqIGVsZW1lbnQpCiB7Ci0gICAgT3duUHRyPFZlY3RvcjxFbGVtZW50Kj4g
PiYgdmVjdG9yID0gbWFwLmFkZChrZXkuaW1wbCgpLCBudWxscHRyKS5pdGVyYXRvci0+c2Vjb25k
OworICAgIE93blB0cjxWZWN0b3I8RWxlbWVudCo+ID4mIHZlY3RvciA9IG1hcC5hZGQoa2V5Lmlt
cGwoKSwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghdmVjdG9yKQogICAgICAg
ICB2ZWN0b3IgPSBhZG9wdFB0cihuZXcgVmVjdG9yPEVsZW1lbnQqPik7CiAgICAgdmVjdG9yLT5h
cHBlbmQoZWxlbWVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTEZyYW1lYnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJh
bWVidWZmZXIuY3BwCmluZGV4IGI5MWFlNTA2ZWNmNzllM2Q2MmZlMTdlNDM3Nzk5M2ZkM2MxNDZj
MWQuLmQwODFlMjQ5MDVhMGFkNTllNzRlNWRjMDVjNzQ1MTA4NmE2ODRmNGEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwCkBAIC0zMjcsNyAr
MzI3LDcgQEAgV2ViR0xTaGFyZWRPYmplY3QqIFdlYkdMRnJhbWVidWZmZXI6OmdldEF0dGFjaG1l
bnRPYmplY3QoR0MzRGVudW0gYXR0YWNobWVudCkgY28KIFdlYkdMRnJhbWVidWZmZXI6OldlYkdM
QXR0YWNobWVudCogV2ViR0xGcmFtZWJ1ZmZlcjo6Z2V0QXR0YWNobWVudChHQzNEZW51bSBhdHRh
Y2htZW50KSBjb25zdAogewogICAgIGNvbnN0IEF0dGFjaG1lbnRNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbV9hdHRhY2htZW50cy5maW5kKGF0dGFjaG1lbnQpOwotICAgIHJldHVybiAoaXQgIT0g
bV9hdHRhY2htZW50cy5lbmQoKSkgPyBpdC0+c2Vjb25kLmdldCgpIDogMDsKKyAgICByZXR1cm4g
KGl0ICE9IG1fYXR0YWNobWVudHMuZW5kKCkpID8gaXQtPnZhbHVlLmdldCgpIDogMDsKIH0KIAog
dm9pZCBXZWJHTEZyYW1lYnVmZmVyOjpyZW1vdmVBdHRhY2htZW50RnJvbUJvdW5kRnJhbWVidWZm
ZXIoR0MzRGVudW0gYXR0YWNobWVudCkKQEAgLTM2Nyw5ICszNjcsOSBAQCB2b2lkIFdlYkdMRnJh
bWVidWZmZXI6OnJlbW92ZUF0dGFjaG1lbnRGcm9tQm91bmRGcmFtZWJ1ZmZlcihXZWJHTFNoYXJl
ZE9iamVjdCogYQogICAgIHdoaWxlIChjaGVja01vcmUpIHsKICAgICAgICAgY2hlY2tNb3JlID0g
ZmFsc2U7CiAgICAgICAgIGZvciAoQXR0YWNobWVudE1hcDo6aXRlcmF0b3IgaXQgPSBtX2F0dGFj
aG1lbnRzLmJlZ2luKCk7IGl0ICE9IG1fYXR0YWNobWVudHMuZW5kKCk7ICsraXQpIHsKLSAgICAg
ICAgICAgIFdlYkdMQXR0YWNobWVudCogYXR0YWNobWVudE9iamVjdCA9IGl0LT5zZWNvbmQuZ2V0
KCk7CisgICAgICAgICAgICBXZWJHTEF0dGFjaG1lbnQqIGF0dGFjaG1lbnRPYmplY3QgPSBpdC0+
dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoYXR0YWNobWVudE9iamVjdC0+aXNTaGFyZWRP
YmplY3QoYXR0YWNobWVudCkpIHsKLSAgICAgICAgICAgICAgICBHQzNEZW51bSBhdHRhY2htZW50
VHlwZSA9IGl0LT5maXJzdDsKKyAgICAgICAgICAgICAgICBHQzNEZW51bSBhdHRhY2htZW50VHlw
ZSA9IGl0LT5rZXk7CiAgICAgICAgICAgICAgICAgYXR0YWNobWVudE9iamVjdC0+dW5hdHRhY2go
Y29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgpLCBhdHRhY2htZW50VHlwZSk7CiAgICAgICAg
ICAgICAgICAgcmVtb3ZlQXR0YWNobWVudEZyb21Cb3VuZEZyYW1lYnVmZmVyKGF0dGFjaG1lbnRU
eXBlKTsKICAgICAgICAgICAgICAgICBjaGVja01vcmUgPSB0cnVlOwpAQCAtNDE5LDggKzQxOSw4
IEBAIEdDM0RlbnVtIFdlYkdMRnJhbWVidWZmZXI6OmNoZWNrU3RhdHVzKGNvbnN0IGNoYXIqKiBy
ZWFzb24pIGNvbnN0CiAgICAgYm9vbCBoYXZlU3RlbmNpbCA9IGZhbHNlOwogICAgIGJvb2wgaGF2
ZURlcHRoU3RlbmNpbCA9IGZhbHNlOwogICAgIGZvciAoQXR0YWNobWVudE1hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX2F0dGFjaG1lbnRzLmJlZ2luKCk7IGl0ICE9IG1fYXR0YWNobWVudHMuZW5k
KCk7ICsraXQpIHsKLSAgICAgICAgV2ViR0xBdHRhY2htZW50KiBhdHRhY2htZW50ID0gaXQtPnNl
Y29uZC5nZXQoKTsKLSAgICAgICAgaWYgKCFpc0F0dGFjaG1lbnRDb21wbGV0ZShhdHRhY2htZW50
LCBpdC0+Zmlyc3QsIHJlYXNvbikpCisgICAgICAgIFdlYkdMQXR0YWNobWVudCogYXR0YWNobWVu
dCA9IGl0LT52YWx1ZS5nZXQoKTsKKyAgICAgICAgaWYgKCFpc0F0dGFjaG1lbnRDb21wbGV0ZShh
dHRhY2htZW50LCBpdC0+a2V5LCByZWFzb24pKQogICAgICAgICAgICAgcmV0dXJuIEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAgICAgIGlm
ICghYXR0YWNobWVudC0+aXNWYWxpZCgpKSB7CiAgICAgICAgICAgICAqcmVhc29uID0gImF0dGFj
aG1lbnQgaXMgbm90IHZhbGlkIjsKQEAgLTQzMCw3ICs0MzAsNyBAQCBHQzNEZW51bSBXZWJHTEZy
YW1lYnVmZmVyOjpjaGVja1N0YXR1cyhjb25zdCBjaGFyKiogcmVhc29uKSBjb25zdAogICAgICAg
ICAgICAgKnJlYXNvbiA9ICJhdHRhY2htZW50IGlzIGFuIHVuc3VwcG9ydGVkIGZvcm1hdCI7CiAg
ICAgICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0lOQ09NUExF
VEVfQVRUQUNITUVOVDsKICAgICAgICAgfQotICAgICAgICBzd2l0Y2ggKGl0LT5maXJzdCkgewor
ICAgICAgICBzd2l0Y2ggKGl0LT5rZXkpIHsKICAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6REVQVEhfQVRUQUNITUVOVDoKICAgICAgICAgICAgIGhhdmVEZXB0aCA9IHRydWU7CiAgICAg
ICAgICAgICBicmVhazsKQEAgLTQ4OCw3ICs0ODgsNyBAQCBib29sIFdlYkdMRnJhbWVidWZmZXI6
Omhhc1N0ZW5jaWxCdWZmZXIoKSBjb25zdAogdm9pZCBXZWJHTEZyYW1lYnVmZmVyOjpkZWxldGVP
YmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M2QsIFBsYXRmb3JtM0RPYmplY3Qg
b2JqZWN0KQogewogICAgIGZvciAoQXR0YWNobWVudE1hcDo6aXRlcmF0b3IgaXQgPSBtX2F0dGFj
aG1lbnRzLmJlZ2luKCk7IGl0ICE9IG1fYXR0YWNobWVudHMuZW5kKCk7ICsraXQpCi0gICAgICAg
IGl0LT5zZWNvbmQtPm9uRGV0YWNoZWQoY29udGV4dDNkKTsKKyAgICAgICAgaXQtPnZhbHVlLT5v
bkRldGFjaGVkKGNvbnRleHQzZCk7CiAKICAgICBjb250ZXh0M2QtPmRlbGV0ZUZyYW1lYnVmZmVy
KG9iamVjdCk7CiB9CkBAIC00OTksOCArNDk5LDggQEAgYm9vbCBXZWJHTEZyYW1lYnVmZmVyOjpp
bml0aWFsaXplQXR0YWNobWVudHMoR3JhcGhpY3NDb250ZXh0M0QqIGczZCwgY29uc3QgY2hhcioK
ICAgICBHQzNEYml0ZmllbGQgbWFzayA9IDA7CiAKICAgICBmb3IgKEF0dGFjaG1lbnRNYXA6Oml0
ZXJhdG9yIGl0ID0gbV9hdHRhY2htZW50cy5iZWdpbigpOyBpdCAhPSBtX2F0dGFjaG1lbnRzLmVu
ZCgpOyArK2l0KSB7Ci0gICAgICAgIEdDM0RlbnVtIGF0dGFjaG1lbnRUeXBlID0gaXQtPmZpcnN0
OwotICAgICAgICBXZWJHTEF0dGFjaG1lbnQqIGF0dGFjaG1lbnQgPSBpdC0+c2Vjb25kLmdldCgp
OworICAgICAgICBHQzNEZW51bSBhdHRhY2htZW50VHlwZSA9IGl0LT5rZXk7CisgICAgICAgIFdl
YkdMQXR0YWNobWVudCogYXR0YWNobWVudCA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgaWYg
KCFhdHRhY2htZW50LT5pc0luaXRpYWxpemVkKCkpCiAgICAgICAgICAgIG1hc2sgfD0gR3JhcGhp
Y3NDb250ZXh0M0Q6OmdldENsZWFyQml0c0J5QXR0YWNobWVudFR5cGUoYXR0YWNobWVudFR5cGUp
OwogICAgIH0KQEAgLTU3MSw4ICs1NzEsOCBAQCBib29sIFdlYkdMRnJhbWVidWZmZXI6OmluaXRp
YWxpemVBdHRhY2htZW50cyhHcmFwaGljc0NvbnRleHQzRCogZzNkLCBjb25zdCBjaGFyKgogICAg
ICAgICBnM2QtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkRJVEhFUik7CiAKICAgICBmb3Ig
KEF0dGFjaG1lbnRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9hdHRhY2htZW50cy5iZWdpbigpOyBpdCAh
PSBtX2F0dGFjaG1lbnRzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIEdDM0RlbnVtIGF0dGFjaG1l
bnRUeXBlID0gaXQtPmZpcnN0OwotICAgICAgICBXZWJHTEF0dGFjaG1lbnQqIGF0dGFjaG1lbnQg
PSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICBHQzNEZW51bSBhdHRhY2htZW50VHlwZSA9IGl0
LT5rZXk7CisgICAgICAgIFdlYkdMQXR0YWNobWVudCogYXR0YWNobWVudCA9IGl0LT52YWx1ZS5n
ZXQoKTsKICAgICAgICAgR0MzRGJpdGZpZWxkIGJpdHMgPSBHcmFwaGljc0NvbnRleHQzRDo6Z2V0
Q2xlYXJCaXRzQnlBdHRhY2htZW50VHlwZShhdHRhY2htZW50VHlwZSk7CiAgICAgICAgIGlmIChi
aXRzICYgbWFzaykKICAgICAgICAgICAgIGF0dGFjaG1lbnQtPnNldEluaXRpYWxpemVkKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rv
ci5weSBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5
CmluZGV4IDg1MjIyNTM4YjRkM2Q3ZTk2ZmQzY2U5ZTNiZDBjOTFhZjMxOThjNzguLmY0NzA4ZmMz
ODdkY2U0ZWQyNDZmNmVhYTQyODBlOWE4OWUyNjVlMTEgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CkBAIC0xMzE3LDcgKzEzMTcs
NyBAQCBjbGFzcyBUeXBlQmluZGluZ3M6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgICAgIEluc3BlY3Rvck9iamVj
dDo6aXRlcmF0b3IgJXM7XG4iICUgaXRfbmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgJXMgPSBvYmpl
Y3QtPmZpbmQoXCIlc1wiKTtcbiIgJSAoaXRfbmFtZSwgcHJvcF9kYXRhLnBbIm5hbWUiXSkpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5u
ZXdsaW5lKCIgICAgICAgIEFTU0VSVCglcyAhPSBvYmplY3QtPmVuZCgpKTtcbiIgJSBpdF9uYW1l
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0
ZXIubmV3bGluZSgiICAgICAgICAlcyglcy0+c2Vjb25kLmdldCgpKTtcbiIgJSAocHJvcF9kYXRh
LnBhcmFtX3R5cGVfYmluZGluZy5nZXRfdmFsaWRhdG9yX2NhbGxfdGV4dCgpLCBpdF9uYW1lKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVy
Lm5ld2xpbmUoIiAgICAgICAgJXMoJXMtPnZhbHVlLmdldCgpKTtcbiIgJSAocHJvcF9kYXRhLnBh
cmFtX3R5cGVfYmluZGluZy5nZXRfdmFsaWRhdG9yX2NhbGxfdGV4dCgpLCBpdF9uYW1lKSkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5l
d2xpbmUoIiAgICB9XG4iKQogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiBjbG9zZWRfZmllbGRfc2V0OgpAQCAtMTMyOSw3ICsxMzI5LDcgQEAgY2xhc3MgVHlwZUJpbmRp
bmdzOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93
cml0ZXIubmV3bGluZSgiICAgICAgICBJbnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9yICVzO1xuIiAl
IGl0X25hbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRh
dG9yX3dyaXRlci5uZXdsaW5lKCIgICAgICAgICVzID0gb2JqZWN0LT5maW5kKFwiJXNcIik7XG4i
ICUgKGl0X25hbWUsIHByb3BfZGF0YS5wWyJuYW1lIl0pKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgICAgICBpZiAo
JXMgIT0gb2JqZWN0LT5lbmQoKSkge1xuIiAlIGl0X25hbWUpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgICAgICAg
ICAlcyglcy0+c2Vjb25kLmdldCgpKTtcbiIgJSAocHJvcF9kYXRhLnBhcmFtX3R5cGVfYmluZGlu
Zy5nZXRfdmFsaWRhdG9yX2NhbGxfdGV4dCgpLCBpdF9uYW1lKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICAgICAg
ICAgICVzKCVzLT52YWx1ZS5nZXQoKSk7XG4iICUgKHByb3BfZGF0YS5wYXJhbV90eXBlX2JpbmRp
bmcuZ2V0X3ZhbGlkYXRvcl9jYWxsX3RleHQoKSwgaXRfbmFtZSkpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgY2xvc2VkX2ZpZWxkX3NldDoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5l
KCIgICAgICAgICAgICArK2ZvdW5kUHJvcGVydGllc0NvdW50O1xuIikKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICAg
ICAgfVxuIikKQEAgLTIwMDcsNyArMjAwNyw3IEBAICRtZXNzYWdlSGFuZGxlcnMKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgICgoKnRoaXMpLippdC0+c2Vjb25kKShjYWxsSWQsIG1lc3Nh
Z2VPYmplY3QuZ2V0KCkpOworICAgICgoKnRoaXMpLippdC0+dmFsdWUpKGNhbGxJZCwgbWVzc2Fn
ZU9iamVjdC5nZXQoKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBs
OjpzZW5kUmVzcG9uc2UobG9uZyBjYWxsSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBy
ZXN1bHQsIGNvbnN0IGNoYXIqIGNvbW1hbmROYW1lLCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5
PiBwcm90b2NvbEVycm9ycywgRXJyb3JTdHJpbmcgaW52b2NhdGlvbkVycm9yKQpAQCAtMjA5MSw3
ICsyMDkxLDcgQEAgUiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OmdldFByb3BlcnR5
VmFsdWVJbXBsKEluc3BlY3Rvck9iamVjdCogb2JqZWN0LAogICAgICAgICByZXR1cm4gdmFsdWU7
CiAgICAgfQogCi0gICAgaWYgKCFhc19tZXRob2QodmFsdWVJdGVyYXRvci0+c2Vjb25kLmdldCgp
LCAmdmFsdWUpKQorICAgIGlmICghYXNfbWV0aG9kKHZhbHVlSXRlcmF0b3ItPnZhbHVlLmdldCgp
LCAmdmFsdWUpKQogICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZv
cm1hdCgiUGFyYW1ldGVyICclcycgaGFzIHdyb25nIHR5cGUuIEl0IG11c3QgYmUgJyVzJy4iLCBu
YW1lLnV0ZjgoKS5kYXRhKCksIHR5cGVfbmFtZSkpOwogICAgIGVsc2UKICAgICAgICAgaWYgKHZh
bHVlRm91bmQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NUGF0Y2hT
dXBwb3J0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01QYXRjaFN1cHBvcnQuY3Bw
CmluZGV4IGMwM2RjZTQ3MTRkZjEyY2E1NWQ1OGViYWIyYjg5OWEyZGM3MTFjZTUuLjhlNmMxODAw
ZDM1MjgyNjRlNTMxMzRlZDhkYzYxYjgzZWY4OGI5NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9ET01QYXRjaFN1cHBvcnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9ET01QYXRjaFN1cHBvcnQuY3BwCkBAIC0yMzcsMjQgKzIzNywyNCBAQCBET01QYXRj
aFN1cHBvcnQ6OmRpZmYoY29uc3QgVmVjdG9yPE93blB0cjxEaWdlc3Q+ID4mIG9sZExpc3QsIGNv
bnN0IFZlY3RvcjxPd25QdAogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuZXdMaXN0LnNp
emUoKTsgKytpKSB7CiAgICAgICAgIERpZmZUYWJsZTo6aXRlcmF0b3IgaXQgPSBuZXdUYWJsZS5h
ZGQobmV3TGlzdFtpXS0+bV9zaGExLCBWZWN0b3I8c2l6ZV90PigpKS5pdGVyYXRvcjsKLSAgICAg
ICAgaXQtPnNlY29uZC5hcHBlbmQoaSk7CisgICAgICAgIGl0LT52YWx1ZS5hcHBlbmQoaSk7CiAg
ICAgfQogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvbGRMaXN0LnNpemUoKTsgKytpKSB7
CiAgICAgICAgIERpZmZUYWJsZTo6aXRlcmF0b3IgaXQgPSBvbGRUYWJsZS5hZGQob2xkTGlzdFtp
XS0+bV9zaGExLCBWZWN0b3I8c2l6ZV90PigpKS5pdGVyYXRvcjsKLSAgICAgICAgaXQtPnNlY29u
ZC5hcHBlbmQoaSk7CisgICAgICAgIGl0LT52YWx1ZS5hcHBlbmQoaSk7CiAgICAgfQogCiAgICAg
Zm9yIChEaWZmVGFibGU6Oml0ZXJhdG9yIG5ld0l0ID0gbmV3VGFibGUuYmVnaW4oKTsgbmV3SXQg
IT0gbmV3VGFibGUuZW5kKCk7ICsrbmV3SXQpIHsKLSAgICAgICAgaWYgKG5ld0l0LT5zZWNvbmQu
c2l6ZSgpICE9IDEpCisgICAgICAgIGlmIChuZXdJdC0+dmFsdWUuc2l6ZSgpICE9IDEpCiAgICAg
ICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBEaWZmVGFibGU6Oml0ZXJhdG9yIG9sZEl0ID0g
b2xkVGFibGUuZmluZChuZXdJdC0+Zmlyc3QpOwotICAgICAgICBpZiAob2xkSXQgPT0gb2xkVGFi
bGUuZW5kKCkgfHwgb2xkSXQtPnNlY29uZC5zaXplKCkgIT0gMSkKKyAgICAgICAgRGlmZlRhYmxl
OjppdGVyYXRvciBvbGRJdCA9IG9sZFRhYmxlLmZpbmQobmV3SXQtPmtleSk7CisgICAgICAgIGlm
IChvbGRJdCA9PSBvbGRUYWJsZS5lbmQoKSB8fCBvbGRJdC0+dmFsdWUuc2l6ZSgpICE9IDEpCiAg
ICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBuZXdNYXBbbmV3SXQtPnNlY29uZFswXV0g
PSBtYWtlX3BhaXIobmV3TGlzdFtuZXdJdC0+c2Vjb25kWzBdXS5nZXQoKSwgb2xkSXQtPnNlY29u
ZFswXSk7Ci0gICAgICAgIG9sZE1hcFtvbGRJdC0+c2Vjb25kWzBdXSA9IG1ha2VfcGFpcihvbGRM
aXN0W29sZEl0LT5zZWNvbmRbMF1dLmdldCgpLCBuZXdJdC0+c2Vjb25kWzBdKTsKKyAgICAgICAg
bmV3TWFwW25ld0l0LT52YWx1ZVswXV0gPSBtYWtlX3BhaXIobmV3TGlzdFtuZXdJdC0+dmFsdWVb
MF1dLmdldCgpLCBvbGRJdC0+dmFsdWVbMF0pOworICAgICAgICBvbGRNYXBbb2xkSXQtPnZhbHVl
WzBdXSA9IG1ha2VfcGFpcihvbGRMaXN0W29sZEl0LT52YWx1ZVswXV0uZ2V0KCksIG5ld0l0LT52
YWx1ZVswXSk7CiAgICAgfQogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IG5ld0xpc3Quc2l6ZSgp
ID4gMCAmJiBpIDwgbmV3TGlzdC5zaXplKCkgLSAxOyArK2kpIHsKQEAgLTM2NCw3ICszNjQsNyBA
QCBib29sIERPTVBhdGNoU3VwcG9ydDo6aW5uZXJQYXRjaENoaWxkcmVuKENvbnRhaW5lck5vZGUq
IHBhcmVudE5vZGUsIGNvbnN0IFZlY3RvcgogCiAgICAgLy8gMi4gUGF0Y2ggbm9kZXMgbWFya2Vk
IGZvciBtZXJnZS4KICAgICBmb3IgKEhhc2hNYXA8RGlnZXN0KiwgRGlnZXN0Kj46Oml0ZXJhdG9y
IGl0ID0gbWVyZ2VzLmJlZ2luKCk7IGl0ICE9IG1lcmdlcy5lbmQoKTsgKytpdCkgewotICAgICAg
ICBpZiAoIWlubmVyUGF0Y2hOb2RlKGl0LT5zZWNvbmQsIGl0LT5maXJzdCwgZWMpKQorICAgICAg
ICBpZiAoIWlubmVyUGF0Y2hOb2RlKGl0LT52YWx1ZSwgaXQtPmtleSwgZWMpKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtNDYzLDcgKzQ2Myw3IEBAIGJvb2wgRE9NUGF0
Y2hTdXBwb3J0OjpyZW1vdmVDaGlsZEFuZE1vdmVUb05ldyhEaWdlc3QqIG9sZERpZ2VzdCwgRXhj
ZXB0aW9uQ29kZSYKICAgICAvLyBoaWdoIHRoYXQgaXQgd2lsbCBnZXQgbWVyZ2VkIGJhY2sgaW50
byB0aGUgb3JpZ2luYWwgRE9NIGR1cmluZyB0aGUgZnVydGhlciBwYXRjaGluZy4KICAgICBVbnVz
ZWROb2Rlc01hcDo6aXRlcmF0b3IgaXQgPSBtX3VudXNlZE5vZGVzTWFwLmZpbmQob2xkRGlnZXN0
LT5tX3NoYTEpOwogICAgIGlmIChpdCAhPSBtX3VudXNlZE5vZGVzTWFwLmVuZCgpKSB7Ci0gICAg
ICAgIERpZ2VzdCogbmV3RGlnZXN0ID0gaXQtPnNlY29uZDsKKyAgICAgICAgRGlnZXN0KiBuZXdE
aWdlc3QgPSBpdC0+dmFsdWU7CiAgICAgICAgIE5vZGUqIG5ld05vZGUgPSBuZXdEaWdlc3QtPm1f
bm9kZTsKICAgICAgICAgaWYgKCFtX2RvbUVkaXRvci0+cmVwbGFjZUNoaWxkKG5ld05vZGUtPnBh
cmVudE5vZGUoKSwgb2xkTm9kZSwgbmV3Tm9kZSwgZWMpKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0
TWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5h
Z2VyLmNwcAppbmRleCA1MmVjNzQ5MGEwNzdiNWNmZDRmM2IwODVkMjg3N2JjODcwY2MwN2NmLi4x
ZDVlMzE3NTdjZDg2YjNiMjJiOGZlZGIzMWFiY2Q1ZTAyZWZmNDc0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcApAQCAtODIsMTAg
KzgyLDEwIEBAIEluamVjdGVkU2NyaXB0IEluamVjdGVkU2NyaXB0TWFuYWdlcjo6aW5qZWN0ZWRT
Y3JpcHRGb3JJZChpbnQgaWQpCiB7CiAgICAgSWRUb0luamVjdGVkU2NyaXB0TWFwOjppdGVyYXRv
ciBpdCA9IG1faWRUb0luamVjdGVkU2NyaXB0LmZpbmQoaWQpOwogICAgIGlmIChpdCAhPSBtX2lk
VG9JbmplY3RlZFNjcmlwdC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAg
ICAgIHJldHVybiBpdC0+dmFsdWU7CiAgICAgZm9yIChTY3JpcHRTdGF0ZVRvSWQ6Oml0ZXJhdG9y
IGl0ID0gbV9zY3JpcHRTdGF0ZVRvSWQuYmVnaW4oKTsgaXQgIT0gbV9zY3JpcHRTdGF0ZVRvSWQu
ZW5kKCk7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQgPT0gaWQpCi0gICAgICAgICAg
ICByZXR1cm4gaW5qZWN0ZWRTY3JpcHRGb3IoaXQtPmZpcnN0KTsKKyAgICAgICAgaWYgKGl0LT52
YWx1ZSA9PSBpZCkKKyAgICAgICAgICAgIHJldHVybiBpbmplY3RlZFNjcmlwdEZvcihpdC0+a2V5
KTsKICAgICB9CiAgICAgcmV0dXJuIEluamVjdGVkU2NyaXB0KCk7CiB9CkBAIC05NCw3ICs5NCw3
IEBAIGludCBJbmplY3RlZFNjcmlwdE1hbmFnZXI6OmluamVjdGVkU2NyaXB0SWRGb3IoU2NyaXB0
U3RhdGUqIHNjcmlwdFN0YXRlKQogewogICAgIFNjcmlwdFN0YXRlVG9JZDo6aXRlcmF0b3IgaXQg
PSBtX3NjcmlwdFN0YXRlVG9JZC5maW5kKHNjcmlwdFN0YXRlKTsKICAgICBpZiAoaXQgIT0gbV9z
Y3JpcHRTdGF0ZVRvSWQuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgICAg
ICByZXR1cm4gaXQtPnZhbHVlOwogICAgIGludCBpZCA9IG1fbmV4dEluamVjdGVkU2NyaXB0SWQr
KzsKICAgICBtX3NjcmlwdFN0YXRlVG9JZC5zZXQoc2NyaXB0U3RhdGUsIGlkKTsKICAgICByZXR1
cm4gaWQ7CkBAIC0xMjYsMTEgKzEyNiwxMSBAQCB2b2lkIEluamVjdGVkU2NyaXB0TWFuYWdlcjo6
ZGlzY2FyZEluamVjdGVkU2NyaXB0c0ZvcihET01XaW5kb3cqIHdpbmRvdykKICAgICBWZWN0b3I8
bG9uZz4gaWRzVG9SZW1vdmU7CiAgICAgSWRUb0luamVjdGVkU2NyaXB0TWFwOjppdGVyYXRvciBl
bmQgPSBtX2lkVG9JbmplY3RlZFNjcmlwdC5lbmQoKTsKICAgICBmb3IgKElkVG9JbmplY3RlZFNj
cmlwdE1hcDo6aXRlcmF0b3IgaXQgPSBtX2lkVG9JbmplY3RlZFNjcmlwdC5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKLSAgICAgICAgU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlID0gaXQtPnNl
Y29uZC5zY3JpcHRTdGF0ZSgpOworICAgICAgICBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUgPSBp
dC0+dmFsdWUuc2NyaXB0U3RhdGUoKTsKICAgICAgICAgaWYgKHdpbmRvdyAhPSBkb21XaW5kb3dG
cm9tU2NyaXB0U3RhdGUoc2NyaXB0U3RhdGUpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIG1fc2NyaXB0U3RhdGVUb0lkLnJlbW92ZShzY3JpcHRTdGF0ZSk7Ci0gICAgICAgIGlkc1Rv
UmVtb3ZlLmFwcGVuZChpdC0+Zmlyc3QpOworICAgICAgICBpZHNUb1JlbW92ZS5hcHBlbmQoaXQt
PmtleSk7CiAgICAgfQogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpZHNUb1JlbW92ZS5z
aXplKCk7IGkrKykKQEAgLTEzOSw3ICsxMzksNyBAQCB2b2lkIEluamVjdGVkU2NyaXB0TWFuYWdl
cjo6ZGlzY2FyZEluamVjdGVkU2NyaXB0c0ZvcihET01XaW5kb3cqIHdpbmRvdykKICAgICAvLyBO
b3cgcmVtb3ZlIHNjcmlwdCBzdGF0ZXMgdGhhdCBoYXZlIGlkIGJ1dCBubyBpbmplY3RlZCBzY3Jp
cHQuCiAgICAgVmVjdG9yPFNjcmlwdFN0YXRlKj4gc2NyaXB0U3RhdGVzVG9SZW1vdmU7CiAgICAg
Zm9yIChTY3JpcHRTdGF0ZVRvSWQ6Oml0ZXJhdG9yIGl0ID0gbV9zY3JpcHRTdGF0ZVRvSWQuYmVn
aW4oKTsgaXQgIT0gbV9zY3JpcHRTdGF0ZVRvSWQuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgU2Ny
aXB0U3RhdGUqIHNjcmlwdFN0YXRlID0gaXQtPmZpcnN0OworICAgICAgICBTY3JpcHRTdGF0ZSog
c2NyaXB0U3RhdGUgPSBpdC0+a2V5OwogICAgICAgICBpZiAod2luZG93ID09IGRvbVdpbmRvd0Zy
b21TY3JpcHRTdGF0ZShzY3JpcHRTdGF0ZSkpCiAgICAgICAgICAgICBzY3JpcHRTdGF0ZXNUb1Jl
bW92ZS5hcHBlbmQoc2NyaXB0U3RhdGUpOwogICAgIH0KQEAgLTE1NSw3ICsxNTUsNyBAQCBib29s
IEluamVjdGVkU2NyaXB0TWFuYWdlcjo6Y2FuQWNjZXNzSW5zcGVjdGVkV29ya2VyQ29udGV4dChT
Y3JpcHRTdGF0ZSopCiB2b2lkIEluamVjdGVkU2NyaXB0TWFuYWdlcjo6cmVsZWFzZU9iamVjdEdy
b3VwKGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXApCiB7CiAgICAgZm9yIChJZFRvSW5qZWN0ZWRT
Y3JpcHRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pZFRvSW5qZWN0ZWRTY3JpcHQuYmVnaW4oKTsgaXQg
IT0gbV9pZFRvSW5qZWN0ZWRTY3JpcHQuZW5kKCk7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQu
cmVsZWFzZU9iamVjdEdyb3VwKG9iamVjdEdyb3VwKTsKKyAgICAgICAgaXQtPnZhbHVlLnJlbGVh
c2VPYmplY3RHcm91cChvYmplY3RHcm91cCk7CiB9CiAKIFN0cmluZyBJbmplY3RlZFNjcmlwdE1h
bmFnZXI6OmluamVjdGVkU2NyaXB0U291cmNlKCkKQEAgLTE3Myw5ICsxNzMsOSBAQCBJbmplY3Rl
ZFNjcmlwdCBJbmplY3RlZFNjcmlwdE1hbmFnZXI6OmluamVjdGVkU2NyaXB0Rm9yKFNjcmlwdFN0
YXRlKiBpbnNwZWN0ZWRTYwogewogICAgIFNjcmlwdFN0YXRlVG9JZDo6aXRlcmF0b3IgaXQgPSBt
X3NjcmlwdFN0YXRlVG9JZC5maW5kKGluc3BlY3RlZFNjcmlwdFN0YXRlKTsKICAgICBpZiAoaXQg
IT0gbV9zY3JpcHRTdGF0ZVRvSWQuZW5kKCkpIHsKLSAgICAgICAgSWRUb0luamVjdGVkU2NyaXB0
TWFwOjppdGVyYXRvciBpdDEgPSBtX2lkVG9JbmplY3RlZFNjcmlwdC5maW5kKGl0LT5zZWNvbmQp
OworICAgICAgICBJZFRvSW5qZWN0ZWRTY3JpcHRNYXA6Oml0ZXJhdG9yIGl0MSA9IG1faWRUb0lu
amVjdGVkU2NyaXB0LmZpbmQoaXQtPnZhbHVlKTsKICAgICAgICAgaWYgKGl0MSAhPSBtX2lkVG9J
bmplY3RlZFNjcmlwdC5lbmQoKSkKLSAgICAgICAgICAgIHJldHVybiBpdDEtPnNlY29uZDsKKyAg
ICAgICAgICAgIHJldHVybiBpdDEtPnZhbHVlOwogICAgIH0KIAogICAgIGlmICghbV9pbnNwZWN0
ZWRTdGF0ZUFjY2Vzc0NoZWNrKGluc3BlY3RlZFNjcmlwdFN0YXRlKSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCmluZGV4IDUzYTM1M2Y5MGQ4MmQx
YTVmNjU3MDAxNjBlNDBiZjZjNWFlZmVkZjAuLmY4NWJjNGE0MjQ5NTIzNjFiNDFhOWYwZjBlMTQy
ZWZlYWVmMGQzZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JDU1NBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNT
U0FnZW50LmNwcApAQCAtMTg3LDEwICsxODcsMTAgQEAgaW5saW5lIHZvaWQgU2VsZWN0b3JQcm9m
aWxlOjpjb21taXRTZWxlY3Rvcihib29sIG1hdGNoZWQpCiAKICAgICBSdWxlTWF0Y2hpbmdTdGF0
c01hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fcnVsZU1hdGNoaW5nU3RhdHMuYWRkKG1ha2VLZXko
KSwgUnVsZU1hdGNoaW5nU3RhdHMobV9jdXJyZW50TWF0Y2hEYXRhLCBtYXRjaFRpbWVNcywgMSwg
bWF0Y2hlZCA/IDEgOiAwKSk7CiAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAg
ICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZC50b3RhbFRpbWUgKz0gbWF0Y2hUaW1lTXM7Ci0gICAg
ICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLmhpdHMgKz0gMTsKKyAgICAgICAgcmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZS50b3RhbFRpbWUgKz0gbWF0Y2hUaW1lTXM7CisgICAgICAgIHJlc3VsdC5p
dGVyYXRvci0+dmFsdWUuaGl0cyArPSAxOwogICAgICAgICBpZiAobWF0Y2hlZCkKLSAgICAgICAg
ICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLm1hdGNoZXMgKz0gMTsKKyAgICAgICAgICAgIHJl
c3VsdC5pdGVyYXRvci0+dmFsdWUubWF0Y2hlcyArPSAxOwogICAgIH0KIH0KIApAQCAtMjAzLDcg
KzIwMyw3IEBAIGlubGluZSB2b2lkIFNlbGVjdG9yUHJvZmlsZTo6Y29tbWl0U2VsZWN0b3JUaW1l
KCkKICAgICBpZiAoaXQgPT0gbV9ydWxlTWF0Y2hpbmdTdGF0cy5lbmQoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgaXQtPnNlY29uZC50b3RhbFRpbWUgKz0gcHJvY2Vzc2luZ1RpbWVNczsKKyAg
ICBpdC0+dmFsdWUudG90YWxUaW1lICs9IHByb2Nlc3NpbmdUaW1lTXM7CiB9CiAKIFBhc3NSZWZQ
dHI8VHlwZUJ1aWxkZXI6OkNTUzo6U2VsZWN0b3JQcm9maWxlPiBTZWxlY3RvclByb2ZpbGU6OnRv
SW5zcGVjdG9yT2JqZWN0KCkgY29uc3QKQEAgLTIxMSwxMiArMjExLDEyIEBAIFBhc3NSZWZQdHI8
VHlwZUJ1aWxkZXI6OkNTUzo6U2VsZWN0b3JQcm9maWxlPiBTZWxlY3RvclByb2ZpbGU6OnRvSW5z
cGVjdG9yT2JqZWN0CiAgICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6
Q1NTOjpTZWxlY3RvclByb2ZpbGVFbnRyeT4gPiBzZWxlY3RvclByb2ZpbGVEYXRhID0gVHlwZUJ1
aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpDU1M6OlNlbGVjdG9yUHJvZmlsZUVudHJ5Pjo6Y3Jl
YXRlKCk7CiAgICAgZm9yIChSdWxlTWF0Y2hpbmdTdGF0c01hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtX3J1bGVNYXRjaGluZ1N0YXRzLmJlZ2luKCk7IGl0ICE9IG1fcnVsZU1hdGNoaW5nU3RhdHMu
ZW5kKCk7ICsraXQpIHsKICAgICAgICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OlNlbGVjdG9y
UHJvZmlsZUVudHJ5PiBlbnRyeSA9IFR5cGVCdWlsZGVyOjpDU1M6OlNlbGVjdG9yUHJvZmlsZUVu
dHJ5OjpjcmVhdGUoKQotICAgICAgICAgICAgLnNldFNlbGVjdG9yKGl0LT5zZWNvbmQuc2VsZWN0
b3IpCi0gICAgICAgICAgICAuc2V0VXJsKGl0LT5zZWNvbmQudXJsKQotICAgICAgICAgICAgLnNl
dExpbmVOdW1iZXIoaXQtPnNlY29uZC5saW5lTnVtYmVyKQotICAgICAgICAgICAgLnNldFRpbWUo
aXQtPnNlY29uZC50b3RhbFRpbWUpCi0gICAgICAgICAgICAuc2V0SGl0Q291bnQoaXQtPnNlY29u
ZC5oaXRzKQotICAgICAgICAgICAgLnNldE1hdGNoQ291bnQoaXQtPnNlY29uZC5tYXRjaGVzKTsK
KyAgICAgICAgICAgIC5zZXRTZWxlY3RvcihpdC0+dmFsdWUuc2VsZWN0b3IpCisgICAgICAgICAg
ICAuc2V0VXJsKGl0LT52YWx1ZS51cmwpCisgICAgICAgICAgICAuc2V0TGluZU51bWJlcihpdC0+
dmFsdWUubGluZU51bWJlcikKKyAgICAgICAgICAgIC5zZXRUaW1lKGl0LT52YWx1ZS50b3RhbFRp
bWUpCisgICAgICAgICAgICAuc2V0SGl0Q291bnQoaXQtPnZhbHVlLmhpdHMpCisgICAgICAgICAg
ICAuc2V0TWF0Y2hDb3VudChpdC0+dmFsdWUubWF0Y2hlcyk7CiAgICAgICAgIHNlbGVjdG9yUHJv
ZmlsZURhdGEtPmFkZEl0ZW0oZW50cnkucmVsZWFzZSgpKTsKICAgICB9CiAKQEAgLTU2OCw3ICs1
NjgsNyBAQCBib29sIEluc3BlY3RvckNTU0FnZW50Ojpmb3JjZVBzZXVkb1N0YXRlKEVsZW1lbnQq
IGVsZW1lbnQsIENTU1NlbGVjdG9yOjpQc2V1ZG9UeQogICAgIGlmIChpdCA9PSBtX25vZGVJZFRv
Rm9yY2VkUHNldWRvU3RhdGUuZW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHVu
c2lnbmVkIGZvcmNlZFBzZXVkb1N0YXRlID0gaXQtPnNlY29uZDsKKyAgICB1bnNpZ25lZCBmb3Jj
ZWRQc2V1ZG9TdGF0ZSA9IGl0LT52YWx1ZTsKICAgICBzd2l0Y2ggKHBzZXVkb1R5cGUpIHsKICAg
ICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9BY3RpdmU6CiAgICAgICAgIHJldHVybiBmb3JjZWRQ
c2V1ZG9TdGF0ZSAmIFBzZXVkb0FjdGl2ZTsKQEAgLTgwOSw3ICs4MDksNyBAQCB2b2lkIEluc3Bl
Y3RvckNTU0FnZW50Ojpmb3JjZVBzZXVkb1N0YXRlKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywg
aW50IG5vZGVJZCwgYwogCiAgICAgdW5zaWduZWQgZm9yY2VkUHNldWRvU3RhdGUgPSBjb21wdXRl
UHNldWRvQ2xhc3NNYXNrKGZvcmNlZFBzZXVkb0NsYXNzZXMuZ2V0KCkpOwogICAgIE5vZGVJZFRv
Rm9yY2VkUHNldWRvU3RhdGU6Oml0ZXJhdG9yIGl0ID0gbV9ub2RlSWRUb0ZvcmNlZFBzZXVkb1N0
YXRlLmZpbmQobm9kZUlkKTsKLSAgICB1bnNpZ25lZCBjdXJyZW50Rm9yY2VkUHNldWRvU3RhdGUg
PSBpdCA9PSBtX25vZGVJZFRvRm9yY2VkUHNldWRvU3RhdGUuZW5kKCkgPyAwIDogaXQtPnNlY29u
ZDsKKyAgICB1bnNpZ25lZCBjdXJyZW50Rm9yY2VkUHNldWRvU3RhdGUgPSBpdCA9PSBtX25vZGVJ
ZFRvRm9yY2VkUHNldWRvU3RhdGUuZW5kKCkgPyAwIDogaXQtPnZhbHVlOwogICAgIGJvb2wgbmVl
ZFN0eWxlUmVjYWxjID0gZm9yY2VkUHNldWRvU3RhdGUgIT0gY3VycmVudEZvcmNlZFBzZXVkb1N0
YXRlOwogICAgIGlmICghbmVlZFN0eWxlUmVjYWxjKQogICAgICAgICByZXR1cm47CkBAIC05MTYs
NyArOTE2LDcgQEAgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlKiBJbnNwZWN0b3JD
U1NBZ2VudDo6YXNJbnNwZWN0b3JTdHlsZVNoZWV0KEVsZW0KICAgICAgICAgcmV0dXJuIGluc3Bl
Y3RvclN0eWxlU2hlZXQuZ2V0KCk7CiAgICAgfQogCi0gICAgcmV0dXJuIGl0LT5zZWNvbmQuZ2V0
KCk7CisgICAgcmV0dXJuIGl0LT52YWx1ZS5nZXQoKTsKIH0KIAogRWxlbWVudCogSW5zcGVjdG9y
Q1NTQWdlbnQ6OmVsZW1lbnRGb3JJZChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGludCBub2Rl
SWQpCkBAIC0xMDEwLDcgKzEwMTAsNyBAQCBJbnNwZWN0b3JTdHlsZVNoZWV0KiBJbnNwZWN0b3JD
U1NBZ2VudDo6YXNzZXJ0U3R5bGVTaGVldEZvcklkKEVycm9yU3RyaW5nKiBlcnJvcgogICAgICAg
ICAqZXJyb3JTdHJpbmcgPSAiTm8gc3R5bGUgc2hlZXQgd2l0aCBnaXZlbiBpZCBmb3VuZCI7CiAg
ICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICByZXR1cm4gaXQtPnNlY29uZC5nZXQoKTsKKyAg
ICByZXR1cm4gaXQtPnZhbHVlLmdldCgpOwogfQogCiBUeXBlQnVpbGRlcjo6Q1NTOjpTdHlsZVNo
ZWV0T3JpZ2luOjpFbnVtIEluc3BlY3RvckNTU0FnZW50OjpkZXRlY3RPcmlnaW4oQ1NTU3R5bGVT
aGVldCogcGFnZVN0eWxlU2hlZXQsIERvY3VtZW50KiBvd25lckRvY3VtZW50KQpAQCAtMTE0MSw3
ICsxMTQxLDcgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6ZGlkUmVtb3ZlRE9NTm9kZShOb2Rl
KiBub2RlKQogICAgIGlmIChpdCA9PSBtX25vZGVUb0luc3BlY3RvclN0eWxlU2hlZXQuZW5kKCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIG1faWRUb0luc3BlY3RvclN0eWxlU2hlZXQucmVtb3Zl
KGl0LT5zZWNvbmQtPmlkKCkpOworICAgIG1faWRUb0luc3BlY3RvclN0eWxlU2hlZXQucmVtb3Zl
KGl0LT52YWx1ZS0+aWQoKSk7CiAgICAgbV9ub2RlVG9JbnNwZWN0b3JTdHlsZVNoZWV0LnJlbW92
ZShub2RlKTsKIH0KIApAQCAtMTE1NCw3ICsxMTU0LDcgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2Vu
dDo6ZGlkTW9kaWZ5RE9NQXR0cihFbGVtZW50KiBlbGVtZW50KQogICAgIGlmIChpdCA9PSBtX25v
ZGVUb0luc3BlY3RvclN0eWxlU2hlZXQuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGl0
LT5zZWNvbmQtPmRpZE1vZGlmeUVsZW1lbnRBdHRyaWJ1dGUoKTsKKyAgICBpdC0+dmFsdWUtPmRp
ZE1vZGlmeUVsZW1lbnRBdHRyaWJ1dGUoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6
c3R5bGVTaGVldENoYW5nZWQoSW5zcGVjdG9yU3R5bGVTaGVldCogc3R5bGVTaGVldCkKQEAgLTEx
NjcsNyArMTE2Nyw3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnJlc2V0UHNldWRvU3RhdGVz
KCkKIHsKICAgICBIYXNoU2V0PERvY3VtZW50Kj4gZG9jdW1lbnRzVG9DaGFuZ2U7CiAgICAgZm9y
IChOb2RlSWRUb0ZvcmNlZFBzZXVkb1N0YXRlOjppdGVyYXRvciBpdCA9IG1fbm9kZUlkVG9Gb3Jj
ZWRQc2V1ZG9TdGF0ZS5iZWdpbigpLCBlbmQgPSBtX25vZGVJZFRvRm9yY2VkUHNldWRvU3RhdGUu
ZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gdG9F
bGVtZW50KG1fZG9tQWdlbnQtPm5vZGVGb3JJZChpdC0+Zmlyc3QpKTsKKyAgICAgICAgRWxlbWVu
dCogZWxlbWVudCA9IHRvRWxlbWVudChtX2RvbUFnZW50LT5ub2RlRm9ySWQoaXQtPmtleSkpOwog
ICAgICAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50LT5vd25lckRvY3VtZW50KCkpCiAgICAgICAg
ICAgICBkb2N1bWVudHNUb0NoYW5nZS5hZGQoZWxlbWVudC0+b3duZXJEb2N1bWVudCgpKTsKICAg
ICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29uc29s
ZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb25zb2xlQWdl
bnQuY3BwCmluZGV4IGMxMmE1NmIwZDBmMjFkMGM0OGE3OGFlZDU4MGRkMWRiZTk3ZGFmMTQuLmM2
NGQ4NzFiNDIyMjMwNDk2YTQ0NDllNzc5ZDVhZDA1MjkyZDkzZWYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb25zb2xlQWdlbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb25zb2xlQWdlbnQuY3BwCkBAIC0xNzcsNyAr
MTc3LDcgQEAgdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OnN0b3BUaW1pbmcoY29uc3QgU3Ry
aW5nJiB0aXRsZSwgUGFzc1JlZlB0cjxTY3JpcHRDYWwKICAgICBpZiAoaXQgPT0gbV90aW1lcy5l
bmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZG91YmxlIHN0YXJ0VGltZSA9IGl0LT5zZWNv
bmQ7CisgICAgZG91YmxlIHN0YXJ0VGltZSA9IGl0LT52YWx1ZTsKICAgICBtX3RpbWVzLnJlbW92
ZShpdCk7CiAKICAgICBkb3VibGUgZWxhcHNlZCA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGlt
ZSgpIC0gc3RhcnRUaW1lOwpAQCAtMjAwLDcgKzIwMCw3IEBAIHZvaWQgSW5zcGVjdG9yQ29uc29s
ZUFnZW50Ojpjb3VudChQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gYXJndW1lbnRzLCBQYXNz
UmVmCiAgICAgaWYgKGl0ID09IG1fY291bnRzLmVuZCgpKQogICAgICAgICBjb3VudCA9IDE7CiAg
ICAgZWxzZSB7Ci0gICAgICAgIGNvdW50ID0gaXQtPnNlY29uZCArIDE7CisgICAgICAgIGNvdW50
ID0gaXQtPnZhbHVlICsgMTsKICAgICAgICAgbV9jb3VudHMucmVtb3ZlKGl0KTsKICAgICB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCmluZGV4
IGVkNDdiNWQwYTE3MzkwMjU1OTYzNDNhMDI3M2RiZGExZjBlMjQzNjcuLjIyMDg4M2FlMTZmM2Iz
Yzc5NTg3NWFjNmMxMmExYjJiZWMzMzM4MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckRPTUFnZW50LmNwcApAQCAtNDY5LDcgKzQ2OSw3IEBAIE5vZGUqIEluc3Bl
Y3RvckRPTUFnZW50Ojpub2RlRm9ySWQoaW50IGlkKQogCiAgICAgSGFzaE1hcDxpbnQsIE5vZGUq
Pjo6aXRlcmF0b3IgaXQgPSBtX2lkVG9Ob2RlLmZpbmQoaWQpOwogICAgIGlmIChpdCAhPSBtX2lk
VG9Ob2RlLmVuZCgpKQotICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJu
IGl0LT52YWx1ZTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtOTE1LDkgKzkxNSw5IEBAIHZvaWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OnBlcmZvcm1TZWFyY2goRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJp
bmcmIHdoaXRlc3BhY2VUcmltCiAgICAgU2VhcmNoUmVzdWx0czo6aXRlcmF0b3IgcmVzdWx0c0l0
ID0gbV9zZWFyY2hSZXN1bHRzLmFkZCgqc2VhcmNoSWQsIFZlY3RvcjxSZWZQdHI8Tm9kZT4gPigp
KS5pdGVyYXRvcjsKIAogICAgIGZvciAoTGlzdEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRvciBpdCA9
IHJlc3VsdENvbGxlY3Rvci5iZWdpbigpOyBpdCAhPSByZXN1bHRDb2xsZWN0b3IuZW5kKCk7ICsr
aXQpCi0gICAgICAgIHJlc3VsdHNJdC0+c2Vjb25kLmFwcGVuZCgqaXQpOworICAgICAgICByZXN1
bHRzSXQtPnZhbHVlLmFwcGVuZCgqaXQpOwogCi0gICAgKnJlc3VsdENvdW50ID0gcmVzdWx0c0l0
LT5zZWNvbmQuc2l6ZSgpOworICAgICpyZXN1bHRDb3VudCA9IHJlc3VsdHNJdC0+dmFsdWUuc2l6
ZSgpOwogfQogCiB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRTZWFyY2hSZXN1bHRzKEVycm9y
U3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBzZWFyY2hJZCwgaW50IGZyb21JbmRl
eCwgaW50IHRvSW5kZXgsIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8aW50PiA+JiBub2RlSWRz
KQpAQCAtOTI4LDcgKzkyOCw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldFNlYXJjaFJl
c3VsdHMoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBpbnQgc2l6ZSA9IGl0LT5zZWNvbmQuc2l6ZSgpOworICAgIGlu
dCBzaXplID0gaXQtPnZhbHVlLnNpemUoKTsKICAgICBpZiAoZnJvbUluZGV4IDwgMCB8fCB0b0lu
ZGV4ID4gc2l6ZSB8fCBmcm9tSW5kZXggPj0gdG9JbmRleCkgewogICAgICAgICAqZXJyb3JTdHJp
bmcgPSAiSW52YWxpZCBzZWFyY2ggcmVzdWx0IHJhbmdlIjsKICAgICAgICAgcmV0dXJuOwpAQCAt
OTM2LDcgKzkzNiw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldFNlYXJjaFJlc3VsdHMo
RXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmCiAKICAgICBub2RlSWRzID0g
VHlwZUJ1aWxkZXI6OkFycmF5PGludD46OmNyZWF0ZSgpOwogICAgIGZvciAoaW50IGkgPSBmcm9t
SW5kZXg7IGkgPCB0b0luZGV4OyArK2kpCi0gICAgICAgIG5vZGVJZHMtPmFkZEl0ZW0ocHVzaE5v
ZGVQYXRoVG9Gcm9udGVuZCgoaXQtPnNlY29uZClbaV0uZ2V0KCkpKTsKKyAgICAgICAgbm9kZUlk
cy0+YWRkSXRlbShwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKChpdC0+dmFsdWUpW2ldLmdldCgpKSk7
CiB9CiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpc2NhcmRTZWFyY2hSZXN1bHRzKEVycm9y
U3RyaW5nKiwgY29uc3QgU3RyaW5nJiBzZWFyY2hJZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50LmNwcAppbmRleCA4MDMyMjk1
ZDg5NWU5ZDIyYTJmODBjNTk4ZDllNDRkMjc0NzRhMDU2Li5jNGZjYjgyYjdiNmZhMGUyYjlhNTNi
ZDRmYWFjNjIzNjI5ZDBiZTVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQuY3BwCkBAIC00MDIsOCArNDAyLDggQEAgdm9p
ZCBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50Ojp3aWxsU2VuZFhNTEh0dHBSZXF1ZXN0KGNvbnN0
IFN0cmluZyYgdXJsKQogICAgIGVsc2UgewogICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiB4aHJCcmVha3BvaW50cyA9IG1fc3RhdGUtPmdldE9iamVjdChET01EZWJ1Z2dlckFnZW50U3Rh
dGU6OnhockJyZWFrcG9pbnRzKTsKICAgICAgICAgZm9yIChJbnNwZWN0b3JPYmplY3Q6Oml0ZXJh
dG9yIGl0ID0geGhyQnJlYWtwb2ludHMtPmJlZ2luKCk7IGl0ICE9IHhockJyZWFrcG9pbnRzLT5l
bmQoKTsgKytpdCkgewotICAgICAgICAgICAgaWYgKHVybC5jb250YWlucyhpdC0+Zmlyc3QpKSB7
Ci0gICAgICAgICAgICAgICAgYnJlYWtwb2ludFVSTCA9IGl0LT5maXJzdDsKKyAgICAgICAgICAg
IGlmICh1cmwuY29udGFpbnMoaXQtPmtleSkpIHsKKyAgICAgICAgICAgICAgICBicmVha3BvaW50
VVJMID0gaXQtPmtleTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRP
TVN0b3JhZ2VBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9N
U3RvcmFnZUFnZW50LmNwcAppbmRleCA5MGEwYTllNjA5MGUwYzJjMzlkNzg2OWY0MDJkNDMyYjNh
MmJmNmYwLi5jMzJlYTI5ODc2ZGQ5ZWUxN2JjMmU2MWUwZDdlNjg3MDZhMTI1Mzc3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50
LmNwcApAQCAtNzcsNyArNzcsNyBAQCB2b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6Y2xl
YXJGcm9udGVuZCgpCiB7CiAgICAgRE9NU3RvcmFnZVJlc291cmNlc01hcDo6aXRlcmF0b3IgZG9t
U3RvcmFnZUVuZCA9IG1fcmVzb3VyY2VzLmVuZCgpOwogICAgIGZvciAoRE9NU3RvcmFnZVJlc291
cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSBkb21TdG9y
YWdlRW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT51bmJpbmQoKTsKKyAgICAgICAgaXQt
PnZhbHVlLT51bmJpbmQoKTsKICAgICBtX2Zyb250ZW5kID0gMDsKICAgICBkaXNhYmxlKDApOwog
fQpAQCAtOTYsNyArOTYsNyBAQCB2b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6ZW5hYmxl
KEVycm9yU3RyaW5nKikKIAogICAgIERPTVN0b3JhZ2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIHJl
c291cmNlc0VuZCA9IG1fcmVzb3VyY2VzLmVuZCgpOwogICAgIGZvciAoRE9NU3RvcmFnZVJlc291
cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSByZXNvdXJj
ZXNFbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPmJpbmQobV9mcm9udGVuZCk7CisgICAg
ICAgIGl0LT52YWx1ZS0+YmluZChtX2Zyb250ZW5kKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JET01T
dG9yYWdlQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcqKQpAQCAtMTY1LDggKzE2NSw4IEBAIFN0
cmluZyBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OnN0b3JhZ2VJZChTZWN1cml0eU9yaWdpbiog
c2VjdXJpdHlPcmlnaW4sIGJvb2wKICAgICBBU1NFUlQoc2VjdXJpdHlPcmlnaW4pOwogICAgIERP
TVN0b3JhZ2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGRvbVN0b3JhZ2VFbmQgPSBtX3Jlc291cmNl
cy5lbmQoKTsKICAgICBmb3IgKERPTVN0b3JhZ2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGl0ID0g
bV9yZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZG9tU3RvcmFnZUVuZDsgKytpdCkgewotICAgICAg
ICBpZiAoaXQtPnNlY29uZC0+aXNTYW1lT3JpZ2luQW5kVHlwZShzZWN1cml0eU9yaWdpbiwgaXNM
b2NhbFN0b3JhZ2UpKQotICAgICAgICAgICAgcmV0dXJuIGl0LT5maXJzdDsKKyAgICAgICAgaWYg
KGl0LT52YWx1ZS0+aXNTYW1lT3JpZ2luQW5kVHlwZShzZWN1cml0eU9yaWdpbiwgaXNMb2NhbFN0
b3JhZ2UpKQorICAgICAgICAgICAgcmV0dXJuIGl0LT5rZXk7CiAgICAgfQogICAgIHJldHVybiBT
dHJpbmcoKTsKIH0KQEAgLTE3NiwxNCArMTc2LDE0IEBAIEluc3BlY3RvckRPTVN0b3JhZ2VSZXNv
dXJjZSogSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpnZXRET01TdG9yYWdlUmVzb3VyY2VGb3JJ
CiAgICAgRE9NU3RvcmFnZVJlc291cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5m
aW5kKHN0b3JhZ2VJZCk7CiAgICAgaWYgKGl0ID09IG1fcmVzb3VyY2VzLmVuZCgpKQogICAgICAg
ICByZXR1cm4gMDsKLSAgICByZXR1cm4gaXQtPnNlY29uZC5nZXQoKTsKKyAgICByZXR1cm4gaXQt
PnZhbHVlLmdldCgpOwogfQogCiB2b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6ZGlkVXNl
RE9NU3RvcmFnZShTdG9yYWdlQXJlYSogc3RvcmFnZUFyZWEsIGJvb2wgaXNMb2NhbFN0b3JhZ2Us
IEZyYW1lKiBmcmFtZSkKIHsKICAgICBET01TdG9yYWdlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBk
b21TdG9yYWdlRW5kID0gbV9yZXNvdXJjZXMuZW5kKCk7CiAgICAgZm9yIChET01TdG9yYWdlUmVz
b3VyY2VzTWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGRvbVN0
b3JhZ2VFbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQtPmlzU2FtZU9yaWdpbkFu
ZFR5cGUoZnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCksIGlzTG9jYWxTdG9yYWdl
KSkKKyAgICAgICAgaWYgKGl0LT52YWx1ZS0+aXNTYW1lT3JpZ2luQW5kVHlwZShmcmFtZS0+ZG9j
dW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKSwgaXNMb2NhbFN0b3JhZ2UpKQogICAgICAgICAgICAg
cmV0dXJuOwogICAgIH0KIApAQCAtMjE4LDcgKzIxOCw3IEBAIHNpemVfdCBJbnNwZWN0b3JET01T
dG9yYWdlQWdlbnQ6Om1lbW9yeUJ5dGVzVXNlZEJ5U3RvcmFnZUNhY2hlKCkgY29uc3QKIHsKICAg
ICBzaXplX3Qgc2l6ZSA9IDA7CiAgICAgZm9yIChET01TdG9yYWdlUmVzb3VyY2VzTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IG1fcmVzb3VyY2VzLmVu
ZCgpOyArK2l0KQotICAgICAgICBzaXplICs9IGl0LT5zZWNvbmQtPnN0b3JhZ2VBcmVhKCktPm1l
bW9yeUJ5dGVzVXNlZEJ5Q2FjaGUoKTsKKyAgICAgICAgc2l6ZSArPSBpdC0+dmFsdWUtPnN0b3Jh
Z2VBcmVhKCktPm1lbW9yeUJ5dGVzVXNlZEJ5Q2FjaGUoKTsKICAgICByZXR1cm4gc2l6ZTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNl
QWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlQWdl
bnQuY3BwCmluZGV4IDk4YzkzNjNhZTY5N2Q0NjgzNGVjM2I2MWQ0M2EzZWVkNDQ4MDllYWMuLjdi
OGZjYTRkNGFhNjU3YjI4OWMyNTAzZDgyYWFiNGE5Y2EwYTY3NTIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5jcHAKQEAgLTI3NSw3
ICsyNzUsNyBAQCB2b2lkIEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmVuYWJsZShFcnJvclN0cmlu
ZyopCiAKICAgICBEYXRhYmFzZVJlc291cmNlc01hcDo6aXRlcmF0b3IgZGF0YWJhc2VzRW5kID0g
bV9yZXNvdXJjZXMuZW5kKCk7CiAgICAgZm9yIChEYXRhYmFzZVJlc291cmNlc01hcDo6aXRlcmF0
b3IgaXQgPSBtX3Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSBkYXRhYmFzZXNFbmQ7ICsraXQpCi0g
ICAgICAgIGl0LT5zZWNvbmQtPmJpbmQobV9mcm9udGVuZFByb3ZpZGVyLT5mcm9udGVuZCgpKTsK
KyAgICAgICAgaXQtPnZhbHVlLT5iaW5kKG1fZnJvbnRlbmRQcm92aWRlci0+ZnJvbnRlbmQoKSk7
CiB9CiAKIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyop
CkBAIC0zMzMsOCArMzMzLDggQEAgdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjpleGVjdXRl
U1FMKEVycm9yU3RyaW5nKiBlcnJvciwgY29uc3QgU3RyaW5nJiBkYXRhYmEKIFN0cmluZyBJbnNw
ZWN0b3JEYXRhYmFzZUFnZW50OjpkYXRhYmFzZUlkKERhdGFiYXNlKiBkYXRhYmFzZSkKIHsKICAg
ICBmb3IgKERhdGFiYXNlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmJl
Z2luKCk7IGl0ICE9IG1fcmVzb3VyY2VzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+
c2Vjb25kLT5kYXRhYmFzZSgpID09IGRhdGFiYXNlKQotICAgICAgICAgICAgcmV0dXJuIGl0LT5m
aXJzdDsKKyAgICAgICAgaWYgKGl0LT52YWx1ZS0+ZGF0YWJhc2UoKSA9PSBkYXRhYmFzZSkKKyAg
ICAgICAgICAgIHJldHVybiBpdC0+a2V5OwogICAgIH0KICAgICByZXR1cm4gU3RyaW5nKCk7CiB9
CkBAIC0zNDIsOCArMzQyLDggQEAgU3RyaW5nIEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmRhdGFi
YXNlSWQoRGF0YWJhc2UqIGRhdGFiYXNlKQogSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZSogSW5z
cGVjdG9yRGF0YWJhc2VBZ2VudDo6ZmluZEJ5RmlsZU5hbWUoY29uc3QgU3RyaW5nJiBmaWxlTmFt
ZSkKIHsKICAgICBmb3IgKERhdGFiYXNlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBpdCA9IG1fcmVz
b3VyY2VzLmJlZ2luKCk7IGl0ICE9IG1fcmVzb3VyY2VzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAg
IGlmIChpdC0+c2Vjb25kLT5kYXRhYmFzZSgpLT5maWxlTmFtZSgpID09IGZpbGVOYW1lKQotICAg
ICAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIGlmIChpdC0+dmFsdWUt
PmRhdGFiYXNlKCktPmZpbGVOYW1lKCkgPT0gZmlsZU5hbWUpCisgICAgICAgICAgICByZXR1cm4g
aXQtPnZhbHVlLmdldCgpOwogICAgIH0KICAgICByZXR1cm4gMDsKIH0KQEAgLTM1Myw3ICszNTMs
NyBAQCBEYXRhYmFzZSogSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6ZGF0YWJhc2VGb3JJZChjb25z
dCBTdHJpbmcmIGRhdGFiYXNlSWQpCiAgICAgRGF0YWJhc2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9y
IGl0ID0gbV9yZXNvdXJjZXMuZmluZChkYXRhYmFzZUlkKTsKICAgICBpZiAoaXQgPT0gbV9yZXNv
dXJjZXMuZW5kKCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBpdC0+c2Vjb25kLT5k
YXRhYmFzZSgpOworICAgIHJldHVybiBpdC0+dmFsdWUtPmRhdGFiYXNlKCk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAppbmRleCAxYmMxNmYyMGYzYzViMWVlNjA5YjVjM2YxOWM0
MjJlNDk2Yzg4ZjU0Li41Yjg3NjRjZTQ5MDZiZGUwNzFlY2YyZTFjZDU5YWMzMzkxODM3Y2EzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdl
bnQuY3BwCkBAIC0yNDgsOSArMjQ4LDkgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpz
ZXRCcmVha3BvaW50QnlVcmwoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBpbnQgbGkKIAogICAg
IFNjcmlwdEJyZWFrcG9pbnQgYnJlYWtwb2ludChsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIGNv
bmRpdGlvbik7CiAgICAgZm9yIChTY3JpcHRzTWFwOjppdGVyYXRvciBpdCA9IG1fc2NyaXB0cy5i
ZWdpbigpOyBpdCAhPSBtX3NjcmlwdHMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgaWYgKCFtYXRj
aGVzKGl0LT5zZWNvbmQudXJsLCB1cmwsIGlzUmVnZXgpKQorICAgICAgICBpZiAoIW1hdGNoZXMo
aXQtPnZhbHVlLnVybCwgdXJsLCBpc1JlZ2V4KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj4gbG9jYXRpb24gPSBy
ZXNvbHZlQnJlYWtwb2ludChicmVha3BvaW50SWQsIGl0LT5maXJzdCwgYnJlYWtwb2ludCk7Cisg
ICAgICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uPiBsb2NhdGlvbiA9
IHJlc29sdmVCcmVha3BvaW50KGJyZWFrcG9pbnRJZCwgaXQtPmtleSwgYnJlYWtwb2ludCk7CiAg
ICAgICAgIGlmIChsb2NhdGlvbikKICAgICAgICAgICAgIGxvY2F0aW9ucy0+YWRkSXRlbShsb2Nh
dGlvbik7CiAgICAgfQpAQCAtMzAyLDggKzMwMiw4IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6cmVtb3ZlQnJlYWtwb2ludChFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgYnJlYWtw
CiAgICAgQnJlYWtwb2ludElkVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNNYXA6Oml0ZXJhdG9y
IGRlYnVnU2VydmVyQnJlYWtwb2ludElkc0l0ZXJhdG9yID0gbV9icmVha3BvaW50SWRUb0RlYnVn
U2VydmVyQnJlYWtwb2ludElkcy5maW5kKGJyZWFrcG9pbnRJZCk7CiAgICAgaWYgKGRlYnVnU2Vy
dmVyQnJlYWtwb2ludElkc0l0ZXJhdG9yID09IG1fYnJlYWtwb2ludElkVG9EZWJ1Z1NlcnZlckJy
ZWFrcG9pbnRJZHMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGRlYnVnU2VydmVyQnJlYWtwb2ludElkc0l0ZXJhdG9yLT5zZWNvbmQuc2l6ZSgpOyAr
K2kpCi0gICAgICAgIHNjcmlwdERlYnVnU2VydmVyKCkucmVtb3ZlQnJlYWtwb2ludChkZWJ1Z1Nl
cnZlckJyZWFrcG9pbnRJZHNJdGVyYXRvci0+c2Vjb25kW2ldKTsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGRlYnVnU2VydmVyQnJlYWtwb2ludElkc0l0ZXJhdG9yLT52YWx1ZS5zaXplKCk7
ICsraSkKKyAgICAgICAgc2NyaXB0RGVidWdTZXJ2ZXIoKS5yZW1vdmVCcmVha3BvaW50KGRlYnVn
U2VydmVyQnJlYWtwb2ludElkc0l0ZXJhdG9yLT52YWx1ZVtpXSk7CiAgICAgbV9icmVha3BvaW50
SWRUb0RlYnVnU2VydmVyQnJlYWtwb2ludElkcy5yZW1vdmUoZGVidWdTZXJ2ZXJCcmVha3BvaW50
SWRzSXRlcmF0b3IpOwogfQogCkBAIC0zMzEsNyArMzMxLDcgQEAgUGFzc1JlZlB0cjxUeXBlQnVp
bGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uPiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZXNvbHZl
QnJlYWsKICAgICBTY3JpcHRzTWFwOjppdGVyYXRvciBzY3JpcHRJdGVyYXRvciA9IG1fc2NyaXB0
cy5maW5kKHNjcmlwdElkKTsKICAgICBpZiAoc2NyaXB0SXRlcmF0b3IgPT0gbV9zY3JpcHRzLmVu
ZCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBTY3JpcHQmIHNjcmlwdCA9IHNjcmlwdEl0ZXJh
dG9yLT5zZWNvbmQ7CisgICAgU2NyaXB0JiBzY3JpcHQgPSBzY3JpcHRJdGVyYXRvci0+dmFsdWU7
CiAgICAgaWYgKGJyZWFrcG9pbnQubGluZU51bWJlciA8IHNjcmlwdC5zdGFydExpbmUgfHwgc2Ny
aXB0LmVuZExpbmUgPCBicmVha3BvaW50LmxpbmVOdW1iZXIpCiAgICAgICAgIHJldHVybiAwOwog
CkBAIC0zNDQsNyArMzQ0LDcgQEAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6RGVidWdnZXI6Okxv
Y2F0aW9uPiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZXNvbHZlQnJlYWsKICAgICBCcmVha3Bv
aW50SWRUb0RlYnVnU2VydmVyQnJlYWtwb2ludElkc01hcDo6aXRlcmF0b3IgZGVidWdTZXJ2ZXJC
cmVha3BvaW50SWRzSXRlcmF0b3IgPSBtX2JyZWFrcG9pbnRJZFRvRGVidWdTZXJ2ZXJCcmVha3Bv
aW50SWRzLmZpbmQoYnJlYWtwb2ludElkKTsKICAgICBpZiAoZGVidWdTZXJ2ZXJCcmVha3BvaW50
SWRzSXRlcmF0b3IgPT0gbV9icmVha3BvaW50SWRUb0RlYnVnU2VydmVyQnJlYWtwb2ludElkcy5l
bmQoKSkKICAgICAgICAgZGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzSXRlcmF0b3IgPSBtX2JyZWFr
cG9pbnRJZFRvRGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzLnNldChicmVha3BvaW50SWQsIFZlY3Rv
cjxTdHJpbmc+KCkpLml0ZXJhdG9yOwotICAgIGRlYnVnU2VydmVyQnJlYWtwb2ludElkc0l0ZXJh
dG9yLT5zZWNvbmQuYXBwZW5kKGRlYnVnU2VydmVyQnJlYWtwb2ludElkKTsKKyAgICBkZWJ1Z1Nl
cnZlckJyZWFrcG9pbnRJZHNJdGVyYXRvci0+dmFsdWUuYXBwZW5kKGRlYnVnU2VydmVyQnJlYWtw
b2ludElkKTsKIAogICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uPiBs
b2NhdGlvbiA9IFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRpb246OmNyZWF0ZSgpCiAgICAg
ICAgIC5zZXRTY3JpcHRJZChzY3JpcHRJZCkKQEAgLTM3MCw3ICszNzAsNyBAQCB2b2lkIEluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQ6OnNlYXJjaEluQ29udGVudChFcnJvclN0cmluZyogZXJyb3IsIGNv
bnN0IFN0cmluZyYgcwogCiAgICAgU2NyaXB0c01hcDo6aXRlcmF0b3IgaXQgPSBtX3NjcmlwdHMu
ZmluZChzY3JpcHRJZCk7CiAgICAgaWYgKGl0ICE9IG1fc2NyaXB0cy5lbmQoKSkKLSAgICAgICAg
cmVzdWx0cyA9IENvbnRlbnRTZWFyY2hVdGlsczo6c2VhcmNoSW5UZXh0QnlMaW5lcyhpdC0+c2Vj
b25kLnNvdXJjZSwgcXVlcnksIGNhc2VTZW5zaXRpdmUsIGlzUmVnZXgpOworICAgICAgICByZXN1
bHRzID0gQ29udGVudFNlYXJjaFV0aWxzOjpzZWFyY2hJblRleHRCeUxpbmVzKGl0LT52YWx1ZS5z
b3VyY2UsIHF1ZXJ5LCBjYXNlU2Vuc2l0aXZlLCBpc1JlZ2V4KTsKICAgICBlbHNlCiAgICAgICAg
ICplcnJvciA9ICJObyBzY3JpcHQgZm9yIGlkOiAiICsgc2NyaXB0SWQ7CiB9CkBAIC00MDMsNyAr
NDAzLDcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpnZXRTY3JpcHRTb3VyY2UoRXJy
b3JTdHJpbmcqIGVycm9yLCBjb25zdCBTdHJpbmcmIHMKIHsKICAgICBTY3JpcHRzTWFwOjppdGVy
YXRvciBpdCA9IG1fc2NyaXB0cy5maW5kKHNjcmlwdElkKTsKICAgICBpZiAoaXQgIT0gbV9zY3Jp
cHRzLmVuZCgpKQotICAgICAgICAqc2NyaXB0U291cmNlID0gaXQtPnNlY29uZC5zb3VyY2U7Cisg
ICAgICAgICpzY3JpcHRTb3VyY2UgPSBpdC0+dmFsdWUuc291cmNlOwogICAgIGVsc2UKICAgICAg
ICAgKmVycm9yID0gIk5vIHNjcmlwdCBmb3IgaWQ6ICIgKyBzY3JpcHRJZDsKIH0KQEAgLTYzMCw3
ICs2MzAsNyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBhcnNlU291cmNlKGNv
bnN0IFN0cmluZyYgc2NyaXB0SWQsIGNvbnN0IFNjcmlwdAogCiAgICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gYnJlYWtwb2ludHNDb29raWUgPSBtX3N0YXRlLT5nZXRPYmplY3QoRGVidWdnZXJB
Z2VudFN0YXRlOjpqYXZhU2NyaXB0QnJlYWtwb2ludHMpOwogICAgIGZvciAoSW5zcGVjdG9yT2Jq
ZWN0OjppdGVyYXRvciBpdCA9IGJyZWFrcG9pbnRzQ29va2llLT5iZWdpbigpOyBpdCAhPSBicmVh
a3BvaW50c0Nvb2tpZS0+ZW5kKCk7ICsraXQpIHsKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gYnJlYWtwb2ludE9iamVjdCA9IGl0LT5zZWNvbmQtPmFzT2JqZWN0KCk7CisgICAgICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJyZWFrcG9pbnRPYmplY3QgPSBpdC0+dmFsdWUtPmFz
T2JqZWN0KCk7CiAgICAgICAgIGJvb2wgaXNSZWdleDsKICAgICAgICAgYnJlYWtwb2ludE9iamVj
dC0+Z2V0Qm9vbGVhbigiaXNSZWdleCIsICZpc1JlZ2V4KTsKICAgICAgICAgU3RyaW5nIHVybDsK
QEAgLTY0MSw5ICs2NDEsOSBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBhcnNl
U291cmNlKGNvbnN0IFN0cmluZyYgc2NyaXB0SWQsIGNvbnN0IFNjcmlwdAogICAgICAgICBicmVh
a3BvaW50T2JqZWN0LT5nZXROdW1iZXIoImxpbmVOdW1iZXIiLCAmYnJlYWtwb2ludC5saW5lTnVt
YmVyKTsKICAgICAgICAgYnJlYWtwb2ludE9iamVjdC0+Z2V0TnVtYmVyKCJjb2x1bW5OdW1iZXIi
LCAmYnJlYWtwb2ludC5jb2x1bW5OdW1iZXIpOwogICAgICAgICBicmVha3BvaW50T2JqZWN0LT5n
ZXRTdHJpbmcoImNvbmRpdGlvbiIsICZicmVha3BvaW50LmNvbmRpdGlvbik7Ci0gICAgICAgIFJl
ZlB0cjxUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uPiBsb2NhdGlvbiA9IHJlc29sdmVC
cmVha3BvaW50KGl0LT5maXJzdCwgc2NyaXB0SWQsIGJyZWFrcG9pbnQpOworICAgICAgICBSZWZQ
dHI8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj4gbG9jYXRpb24gPSByZXNvbHZlQnJl
YWtwb2ludChpdC0+a2V5LCBzY3JpcHRJZCwgYnJlYWtwb2ludCk7CiAgICAgICAgIGlmIChsb2Nh
dGlvbikKLSAgICAgICAgICAgIG1fZnJvbnRlbmQtPmJyZWFrcG9pbnRSZXNvbHZlZChpdC0+Zmly
c3QsIGxvY2F0aW9uKTsKKyAgICAgICAgICAgIG1fZnJvbnRlbmQtPmJyZWFrcG9pbnRSZXNvbHZl
ZChpdC0+a2V5LCBsb2NhdGlvbik7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcAppbmRleCAzM2IyMWI0ZmRk
MTJjMTk5MjVmNDVjMzMzYWVhNzA0NzM3ZWM2ZjgxLi5lYTMzOTllZjczMmVhMWJjNDkyYmE5ZGVl
MDQ4OTE2MzJlNTM5ODM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHAKQEAgLTMxOSwxMiArMzE5LDEyIEBAIHB1YmxpYzoK
ICAgICAgICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6SW5kZXhlZERC
OjpPYmplY3RTdG9yZT4gPiBvYmplY3RTdG9yZXMgPSBUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1
aWxkZXI6OkluZGV4ZWREQjo6T2JqZWN0U3RvcmU+OjpjcmVhdGUoKTsKIAogICAgICAgICBmb3Ig
KElEQkRhdGFiYXNlTWV0YWRhdGE6Ok9iamVjdFN0b3JlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9
IGRhdGFiYXNlTWV0YWRhdGEub2JqZWN0U3RvcmVzLmJlZ2luKCk7IGl0ICE9IGRhdGFiYXNlTWV0
YWRhdGEub2JqZWN0U3RvcmVzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgICAgICBjb25zdCBJREJP
YmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhID0gaXQtPnNlY29uZDsKKyAg
ICAgICAgICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlTWV0YWRh
dGEgPSBpdC0+dmFsdWU7CiAKICAgICAgICAgICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8
VHlwZUJ1aWxkZXI6OkluZGV4ZWREQjo6T2JqZWN0U3RvcmVJbmRleD4gPiBpbmRleGVzID0gVHlw
ZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpJbmRleGVkREI6Ok9iamVjdFN0b3JlSW5kZXg+
OjpjcmVhdGUoKTsKIAogICAgICAgICAgICAgZm9yIChJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJ
bmRleE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBvYmplY3RTdG9yZU1ldGFkYXRhLmluZGV4ZXMu
YmVnaW4oKTsgaXQgIT0gb2JqZWN0U3RvcmVNZXRhZGF0YS5pbmRleGVzLmVuZCgpOyArK2l0KSB7
Ci0gICAgICAgICAgICAgICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSA9
IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICAgICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5k
ZXhNZXRhZGF0YSA9IGl0LT52YWx1ZTsKIAogICAgICAgICAgICAgICAgIFJlZlB0cjxPYmplY3RT
dG9yZUluZGV4PiBvYmplY3RTdG9yZUluZGV4ID0gT2JqZWN0U3RvcmVJbmRleDo6Y3JlYXRlKCkK
ICAgICAgICAgICAgICAgICAgICAgLnNldE5hbWUoaW5kZXhNZXRhZGF0YS5uYW1lKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck1lbW9yeUFnZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JNZW1vcnlBZ2VudC5jcHAKaW5kZXgg
ZWE1MjU0YWFiNTllMzI0YmFjYmE5Nzc3YjY2ZGYzODBhMjViNGM3YS4uMDg0MjVjYzg3NDIwNTgy
MTAyMGRhYTA5ZjZmMjc3NTcxNGQ0YzJlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3Rvck1lbW9yeUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yTWVtb3J5QWdlbnQuY3BwCkBAIC0xNjMsOCArMTYzLDggQEAgcHVibGlj
OgogICAgIHsKICAgICAgICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6
TWVtb3J5OjpOb2RlQ291bnQ+ID4gY2hpbGRyZW5TdGF0cyA9IFR5cGVCdWlsZGVyOjpBcnJheTxU
eXBlQnVpbGRlcjo6TWVtb3J5OjpOb2RlQ291bnQ+OjpjcmVhdGUoKTsKICAgICAgICAgZm9yIChI
YXNoTWFwPFN0cmluZywgaW50Pjo6aXRlcmF0b3IgaXQgPSBtX25vZGVOYW1lVG9Db3VudC5iZWdp
bigpOyBpdCAhPSBtX25vZGVOYW1lVG9Db3VudC5lbmQoKTsgKytpdCkgewotICAgICAgICAgICAg
UmVmUHRyPE5vZGVDb3VudD4gbm9kZUNvdW50ID0gTm9kZUNvdW50OjpjcmVhdGUoKS5zZXROb2Rl
TmFtZShpdC0+Zmlyc3QpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLnNldENvdW50KGl0LT5zZWNvbmQpOworICAgICAgICAgICAg
UmVmUHRyPE5vZGVDb3VudD4gbm9kZUNvdW50ID0gTm9kZUNvdW50OjpjcmVhdGUoKS5zZXROb2Rl
TmFtZShpdC0+a2V5KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC5zZXRDb3VudChpdC0+dmFsdWUpOwogICAgICAgICAgICAgY2hp
bGRyZW5TdGF0cy0+YWRkSXRlbShub2RlQ291bnQpOwogICAgICAgICB9CiAgICAgICAgIHJldHVy
biBjaGlsZHJlblN0YXRzLnJlbGVhc2UoKTsKQEAgLTE3NCw4ICsxNzQsOCBAQCBwdWJsaWM6CiAg
ICAgewogICAgICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpNZW1v
cnk6Okxpc3RlbmVyQ291bnQ+ID4gbGlzdGVuZXJTdGF0cyA9IFR5cGVCdWlsZGVyOjpBcnJheTxU
eXBlQnVpbGRlcjo6TWVtb3J5OjpMaXN0ZW5lckNvdW50Pjo6Y3JlYXRlKCk7CiAgICAgICAgIGZv
ciAoSGFzaE1hcDxBdG9taWNTdHJpbmcsIGludD46Oml0ZXJhdG9yIGl0ID0gbV9ldmVudFR5cGVU
b0NvdW50LmJlZ2luKCk7IGl0ICE9IG1fZXZlbnRUeXBlVG9Db3VudC5lbmQoKTsgKytpdCkgewot
ICAgICAgICAgICAgUmVmUHRyPExpc3RlbmVyQ291bnQ+IGxpc3RlbmVyQ291bnQgPSBMaXN0ZW5l
ckNvdW50OjpjcmVhdGUoKS5zZXRUeXBlKGl0LT5maXJzdCkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0
Q291bnQoaXQtPnNlY29uZCk7CisgICAgICAgICAgICBSZWZQdHI8TGlzdGVuZXJDb3VudD4gbGlz
dGVuZXJDb3VudCA9IExpc3RlbmVyQ291bnQ6OmNyZWF0ZSgpLnNldFR5cGUoaXQtPmtleSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAuc2V0Q291bnQoaXQtPnZhbHVlKTsKICAgICAgICAgICAgIGxpc3RlbmVy
U3RhdHMtPmFkZEl0ZW0obGlzdGVuZXJDb3VudCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJu
IGxpc3RlbmVyU3RhdHMucmVsZWFzZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yUGFnZUFnZW50LmNwcAppbmRleCBjNmIwNmJmYTY0ZTA4ZjVlODIzM2NmZTBhOTA4
ZDk0MzQ2ZWM5ZWFjLi4xM2FjN2U5ZTQ4ZjJjNGMwZDA0ZjYwNzRhMWQxOWRkOGQxZDM0YmVjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcApA
QCAtNDYwLDcgKzQ2MCw3IEBAIHN0YXRpYyBWZWN0b3I8Q2FjaGVkUmVzb3VyY2UqPiBjYWNoZWRS
ZXNvdXJjZXNGb3JGcmFtZShGcmFtZSogZnJhbWUpCiAgICAgY29uc3QgQ2FjaGVkUmVzb3VyY2VM
b2FkZXI6OkRvY3VtZW50UmVzb3VyY2VNYXAmIGFsbFJlc291cmNlcyA9IGZyYW1lLT5kb2N1bWVu
dCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLT5hbGxDYWNoZWRSZXNvdXJjZXMoKTsKICAgICBD
YWNoZWRSZXNvdXJjZUxvYWRlcjo6RG9jdW1lbnRSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gYWxsUmVzb3VyY2VzLmVuZCgpOwogICAgIGZvciAoQ2FjaGVkUmVzb3VyY2VMb2FkZXI6
OkRvY3VtZW50UmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYWxsUmVzb3VyY2VzLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBDYWNoZWRSZXNvdXJjZSogY2FjaGVk
UmVzb3VyY2UgPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICBDYWNoZWRSZXNvdXJjZSogY2Fj
aGVkUmVzb3VyY2UgPSBpdC0+dmFsdWUuZ2V0KCk7CiAKICAgICAgICAgc3dpdGNoIChjYWNoZWRS
ZXNvdXJjZS0+dHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVz
b3VyY2U6CkBAIC03NjQsNyArNzY0LDcgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRpZENs
ZWFyV2luZG93T2JqZWN0SW5Xb3JsZChGcmFtZSogZnJhbWUsIERPTVdyYXBwZXJXb3IKICAgICAg
ICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBzY3JpcHRzLT5lbmQoKTsK
ICAgICAgICAgZm9yIChJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gc2NyaXB0
cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBTdHJpbmcgc2NyaXB0
VGV4dDsKLSAgICAgICAgICAgIGlmIChpdC0+c2Vjb25kLT5hc1N0cmluZygmc2NyaXB0VGV4dCkp
CisgICAgICAgICAgICBpZiAoaXQtPnZhbHVlLT5hc1N0cmluZygmc2NyaXB0VGV4dCkpCiAgICAg
ICAgICAgICAgICAgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXItPmluamVjdFNjcmlwdChzY3JpcHRU
ZXh0LCBtYWluV29ybGRTY3JpcHRTdGF0ZShmcmFtZSkpOwogICAgICAgICB9CiAgICAgfQpAQCAt
Nzk2LDggKzc5Niw4IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpmcmFtZURldGFjaGVkKEZy
YW1lKiBmcmFtZSkKIHsKICAgICBIYXNoTWFwPEZyYW1lKiwgU3RyaW5nPjo6aXRlcmF0b3IgaXRl
cmF0b3IgPSBtX2ZyYW1lVG9JZGVudGlmaWVyLmZpbmQoZnJhbWUpOwogICAgIGlmIChpdGVyYXRv
ciAhPSBtX2ZyYW1lVG9JZGVudGlmaWVyLmVuZCgpKSB7Ci0gICAgICAgIG1fZnJvbnRlbmQtPmZy
YW1lRGV0YWNoZWQoaXRlcmF0b3ItPnNlY29uZCk7Ci0gICAgICAgIG1faWRlbnRpZmllclRvRnJh
bWUucmVtb3ZlKGl0ZXJhdG9yLT5zZWNvbmQpOworICAgICAgICBtX2Zyb250ZW5kLT5mcmFtZURl
dGFjaGVkKGl0ZXJhdG9yLT52YWx1ZSk7CisgICAgICAgIG1faWRlbnRpZmllclRvRnJhbWUucmVt
b3ZlKGl0ZXJhdG9yLT52YWx1ZSk7CiAgICAgICAgIG1fZnJhbWVUb0lkZW50aWZpZXIucmVtb3Zl
KGl0ZXJhdG9yKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAKaW5kZXggNDJjZGU4NWJiYWMxYTZhMmQ2ZDdlOTBl
ODExN2RiMGU4YmUxMjJhNS4uOTk3YTU4ZTk5M2YyMzIyNzE1NDYxMjBkN2Q0MjI5ODUxOWRmNGNi
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVy
QWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxl
ckFnZW50LmNwcApAQCAtMjQ5LDEwICsyNDksMTAgQEAgdm9pZCBJbnNwZWN0b3JQcm9maWxlckFn
ZW50OjpnZXRQcm9maWxlSGVhZGVycyhFcnJvclN0cmluZyosIFJlZlB0cjxUeXBlQnVpbGRlcjoK
IAogICAgIFByb2ZpbGVzTWFwOjppdGVyYXRvciBwcm9maWxlc0VuZCA9IG1fcHJvZmlsZXMuZW5k
KCk7CiAgICAgZm9yIChQcm9maWxlc01hcDo6aXRlcmF0b3IgaXQgPSBtX3Byb2ZpbGVzLmJlZ2lu
KCk7IGl0ICE9IHByb2ZpbGVzRW5kOyArK2l0KQotICAgICAgICBoZWFkZXJzLT5hZGRJdGVtKGNy
ZWF0ZVByb2ZpbGVIZWFkZXIoKml0LT5zZWNvbmQpKTsKKyAgICAgICAgaGVhZGVycy0+YWRkSXRl
bShjcmVhdGVQcm9maWxlSGVhZGVyKCppdC0+dmFsdWUpKTsKICAgICBIZWFwU25hcHNob3RzTWFw
OjppdGVyYXRvciBzbmFwc2hvdHNFbmQgPSBtX3NuYXBzaG90cy5lbmQoKTsKICAgICBmb3IgKEhl
YXBTbmFwc2hvdHNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zbmFwc2hvdHMuYmVnaW4oKTsgaXQgIT0g
c25hcHNob3RzRW5kOyArK2l0KQotICAgICAgICBoZWFkZXJzLT5hZGRJdGVtKGNyZWF0ZVNuYXBz
aG90SGVhZGVyKCppdC0+c2Vjb25kKSk7CisgICAgICAgIGhlYWRlcnMtPmFkZEl0ZW0oY3JlYXRl
U25hcHNob3RIZWFkZXIoKml0LT52YWx1ZSkpOwogfQogCiBuYW1lc3BhY2UgewpAQCAtMjgwLDE2
ICsyODAsMTYgQEAgdm9pZCBJbnNwZWN0b3JQcm9maWxlckFnZW50OjpnZXRQcm9maWxlKEVycm9y
U3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJgogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAgICAgICAgIHByb2ZpbGVPYmplY3QgPSBUeXBlQnVpbGRlcjo6UHJvZmlsZXI6
OlByb2ZpbGU6OmNyZWF0ZSgpOwotICAgICAgICBwcm9maWxlT2JqZWN0LT5zZXRIZWFkKGl0LT5z
ZWNvbmQtPmJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9ySGVhZCgpKTsKLSAgICAgICAgaWYgKGl0LT5z
ZWNvbmQtPmJvdHRvbVVwSGVhZCgpKQotICAgICAgICAgICAgcHJvZmlsZU9iamVjdC0+c2V0Qm90
dG9tVXBIZWFkKGl0LT5zZWNvbmQtPmJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9yQm90dG9tVXBIZWFk
KCkpOworICAgICAgICBwcm9maWxlT2JqZWN0LT5zZXRIZWFkKGl0LT52YWx1ZS0+YnVpbGRJbnNw
ZWN0b3JPYmplY3RGb3JIZWFkKCkpOworICAgICAgICBpZiAoaXQtPnZhbHVlLT5ib3R0b21VcEhl
YWQoKSkKKyAgICAgICAgICAgIHByb2ZpbGVPYmplY3QtPnNldEJvdHRvbVVwSGVhZChpdC0+dmFs
dWUtPmJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9yQm90dG9tVXBIZWFkKCkpOwogICAgIH0gZWxzZSBp
ZiAodHlwZSA9PSBIZWFwUHJvZmlsZVR5cGUpIHsKICAgICAgICAgSGVhcFNuYXBzaG90c01hcDo6
aXRlcmF0b3IgaXQgPSBtX3NuYXBzaG90cy5maW5kKHVpZCk7CiAgICAgICAgIGlmIChpdCA9PSBt
X3NuYXBzaG90cy5lbmQoKSkgewogICAgICAgICAgICAgKmVycm9yU3RyaW5nID0gIlByb2ZpbGUg
d2Fzbid0IGZvdW5kIjsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBS
ZWZQdHI8U2NyaXB0SGVhcFNuYXBzaG90PiBzbmFwc2hvdCA9IGl0LT5zZWNvbmQ7CisgICAgICAg
IFJlZlB0cjxTY3JpcHRIZWFwU25hcHNob3Q+IHNuYXBzaG90ID0gaXQtPnZhbHVlOwogICAgICAg
ICBwcm9maWxlT2JqZWN0ID0gVHlwZUJ1aWxkZXI6OlByb2ZpbGVyOjpQcm9maWxlOjpjcmVhdGUo
KTsKICAgICAgICAgaWYgKG1fZnJvbnRlbmQpIHsKICAgICAgICAgICAgIE91dHB1dFN0cmVhbSBz
dHJlYW0obV9mcm9udGVuZCwgdWlkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmNwcAppbmRleCA5ZDkyOWM5YTEwYmVkMzRjMjljMjg5
NDgxYWIwYTRhNWE2Mjg2OTE0Li45NjA4MTEyMWI1NDAzNjI5NjE2ZTdiNWQ0ZGI2NWIyNTlkOTVi
NTIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3Vy
Y2VBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291
cmNlQWdlbnQuY3BwCkBAIC0xMDMsNyArMTAzLDcgQEAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBidWlsZE9iamVjdEZvckhlYWRlcnMoY29uc3QgSFRUUEhlYWRlck1hcCYgaGUK
ICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBoZWFkZXJzT2JqZWN0ID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBo
ZWFkZXJzLmVuZCgpOwogICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBoZWFkZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaGVhZGVyc09iamVj
dC0+c2V0U3RyaW5nKGl0LT5maXJzdC5zdHJpbmcoKSwgaXQtPnNlY29uZCk7CisgICAgICAgIGhl
YWRlcnNPYmplY3QtPnNldFN0cmluZyhpdC0+a2V5LnN0cmluZygpLCBpdC0+dmFsdWUpOwogICAg
IHJldHVybiBoZWFkZXJzT2JqZWN0OwogfQogCkBAIC0yMTQsOCArMjE0LDggQEAgdm9pZCBJbnNw
ZWN0b3JSZXNvdXJjZUFnZW50Ojp3aWxsU2VuZFJlcXVlc3QodW5zaWduZWQgbG9uZyBpZGVudGlm
aWVyLCBEb2N1bWVudEwKICAgICAgICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciBl
bmQgPSBoZWFkZXJzLT5lbmQoKTsKICAgICAgICAgZm9yIChJbnNwZWN0b3JPYmplY3Q6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gaGVhZGVycy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAg
ICAgICAgICBTdHJpbmcgdmFsdWU7Ci0gICAgICAgICAgICBpZiAoaXQtPnNlY29uZC0+YXNTdHJp
bmcoJnZhbHVlKSkKLSAgICAgICAgICAgICAgICByZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZChp
dC0+Zmlyc3QsIHZhbHVlKTsKKyAgICAgICAgICAgIGlmIChpdC0+dmFsdWUtPmFzU3RyaW5nKCZ2
YWx1ZSkpCisgICAgICAgICAgICAgICAgcmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoaXQtPmtl
eSwgdmFsdWUpOwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvclN0YXRlLmNwcAppbmRleCA3MGEyNDM5ODQ3YzQ1N2MzOGEzOTBhMzMwMDRhM2Q5
ZTFiMWRiNDFkLi5iYWYxMGM5NzFlMTE5NTMyNTc2YmY0OTQ1NTIyZjM3YjA4MzI1YWZiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5jcHAKQEAgLTgwLDcgKzgw
LDcgQEAgYm9vbCBJbnNwZWN0b3JTdGF0ZTo6Z2V0Qm9vbGVhbihjb25zdCBTdHJpbmcmIHByb3Bl
cnR5TmFtZSkKICAgICBJbnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9yIGl0ID0gbV9wcm9wZXJ0aWVz
LT5maW5kKHByb3BlcnR5TmFtZSk7CiAgICAgYm9vbCB2YWx1ZSA9IGZhbHNlOwogICAgIGlmIChp
dCAhPSBtX3Byb3BlcnRpZXMtPmVuZCgpKQotICAgICAgICBpdC0+c2Vjb25kLT5hc0Jvb2xlYW4o
JnZhbHVlKTsKKyAgICAgICAgaXQtPnZhbHVlLT5hc0Jvb2xlYW4oJnZhbHVlKTsKICAgICByZXR1
cm4gdmFsdWU7CiB9CiAKQEAgLTg5LDcgKzg5LDcgQEAgU3RyaW5nIEluc3BlY3RvclN0YXRlOjpn
ZXRTdHJpbmcoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCiAgICAgSW5zcGVjdG9yT2JqZWN0
OjppdGVyYXRvciBpdCA9IG1fcHJvcGVydGllcy0+ZmluZChwcm9wZXJ0eU5hbWUpOwogICAgIFN0
cmluZyB2YWx1ZTsKICAgICBpZiAoaXQgIT0gbV9wcm9wZXJ0aWVzLT5lbmQoKSkKLSAgICAgICAg
aXQtPnNlY29uZC0+YXNTdHJpbmcoJnZhbHVlKTsKKyAgICAgICAgaXQtPnZhbHVlLT5hc1N0cmlu
ZygmdmFsdWUpOwogICAgIHJldHVybiB2YWx1ZTsKIH0KIApAQCAtOTgsNyArOTgsNyBAQCBsb25n
IEluc3BlY3RvclN0YXRlOjpnZXRMb25nKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKQogICAg
IEluc3BlY3Rvck9iamVjdDo6aXRlcmF0b3IgaXQgPSBtX3Byb3BlcnRpZXMtPmZpbmQocHJvcGVy
dHlOYW1lKTsKICAgICBsb25nIHZhbHVlID0gMDsKICAgICBpZiAoaXQgIT0gbV9wcm9wZXJ0aWVz
LT5lbmQoKSkKLSAgICAgICAgaXQtPnNlY29uZC0+YXNOdW1iZXIoJnZhbHVlKTsKKyAgICAgICAg
aXQtPnZhbHVlLT5hc051bWJlcigmdmFsdWUpOwogICAgIHJldHVybiB2YWx1ZTsKIH0KIApAQCAt
MTA3LDcgKzEwNyw3IEBAIGRvdWJsZSBJbnNwZWN0b3JTdGF0ZTo6Z2V0RG91YmxlKGNvbnN0IFN0
cmluZyYgcHJvcGVydHlOYW1lKQogICAgIEluc3BlY3Rvck9iamVjdDo6aXRlcmF0b3IgaXQgPSBt
X3Byb3BlcnRpZXMtPmZpbmQocHJvcGVydHlOYW1lKTsKICAgICBkb3VibGUgdmFsdWUgPSAwOwog
ICAgIGlmIChpdCAhPSBtX3Byb3BlcnRpZXMtPmVuZCgpKQotICAgICAgICBpdC0+c2Vjb25kLT5h
c051bWJlcigmdmFsdWUpOworICAgICAgICBpdC0+dmFsdWUtPmFzTnVtYmVyKCZ2YWx1ZSk7CiAg
ICAgcmV0dXJuIHZhbHVlOwogfQogCkBAIC0xMTgsNyArMTE4LDcgQEAgUGFzc1JlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IEluc3BlY3RvclN0YXRlOjpnZXRPYmplY3QoY29uc3QgU3RyaW5nJiBwcm9w
ZXJ0eU5hbWUKICAgICAgICAgbV9wcm9wZXJ0aWVzLT5zZXRPYmplY3QocHJvcGVydHlOYW1lLCBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKICAgICAgICAgaXQgPSBtX3Byb3BlcnRpZXMtPmZp
bmQocHJvcGVydHlOYW1lKTsKICAgICB9Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQtPmFzT2JqZWN0
KCk7CisgICAgcmV0dXJuIGl0LT52YWx1ZS0+YXNPYmplY3QoKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
clN0eWxlU2hlZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxl
U2hlZXQuY3BwCmluZGV4IDgzYjQwMmQ2ZWE5MzlmNGYzZTVlN2ViNDlkODBlMzBkYTc0NzFmZjcu
LjIzNDBjMWRiNTM1OGQ2YWE5YzMxMGNlN2Y3ZmQ4YjYzYTQ0OTM4MjUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKQEAgLTUzNSw3ICs1
MzUsNyBAQCBQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JT
dHlsZTo6c3R5bGVXaXRoUHJvcGVydGllcygpIGNvbgogICAgICAgICAgICAgICAgICAgICAgICAg
c2hvdWxkSW5hY3RpdmF0ZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmV2aW91c1BhcnNlZE9rOwotICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gYWN0aXZlSXQtPnNlY29uZC0+Z2V0Qm9vbGVhbihU
eXBlQnVpbGRlcjo6Q1NTOjpDU1NQcm9wZXJ0eTo6UGFyc2VkT2ssICZwcmV2aW91c1BhcnNlZE9r
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc3VjY2VzcyA9IGFjdGl2ZUl0LT52YWx1
ZS0+Z2V0Qm9vbGVhbihUeXBlQnVpbGRlcjo6Q1NTOjpDU1NQcm9wZXJ0eTo6UGFyc2VkT2ssICZw
cmV2aW91c1BhcnNlZE9rKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWNjZXNzICYm
ICFwcmV2aW91c1BhcnNlZE9rKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZElu
YWN0aXZhdGUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC01NDMsNyArNTQzLDcg
QEAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yU3R5bGU6
OnN0eWxlV2l0aFByb3BlcnRpZXMoKSBjb24KICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlO
YW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5LnNldChjYW5vbmljYWxQcm9wZXJ0eU5hbWUsIHBy
b3BlcnR5KTsKIAogICAgICAgICAgICAgICAgIGlmIChzaG91bGRJbmFjdGl2YXRlKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGFjdGl2ZUl0LT5zZWNvbmQtPnNldFN0YXR1cyhUeXBlQnVpbGRlcjo6
Q1NTOjpDU1NQcm9wZXJ0eTo6U3RhdHVzOjpJbmFjdGl2ZSk7CisgICAgICAgICAgICAgICAgICAg
IGFjdGl2ZUl0LT52YWx1ZS0+c2V0U3RhdHVzKFR5cGVCdWlsZGVyOjpDU1M6OkNTU1Byb3BlcnR5
OjpTdGF0dXM6OkluYWN0aXZlKTsKICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lVG9Q
cmV2aW91c0FjdGl2ZVByb3BlcnR5LnNldChjYW5vbmljYWxQcm9wZXJ0eU5hbWUsIHByb3BlcnR5
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtMTAzNSw3ICsx
MDM1LDcgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3JTdHlsZT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6
aW5zcGVjdG9yU3R5bGVGb3JJZChjb25zdCBJbnNwZWMKICAgICAgICAgUmVmUHRyPEluc3BlY3Rv
clN0eWxlPiBpbnNwZWN0b3JTdHlsZSA9IEluc3BlY3RvclN0eWxlOjpjcmVhdGUoaWQsIHN0eWxl
LCB0aGlzKTsKICAgICAgICAgcmV0dXJuIGluc3BlY3RvclN0eWxlLnJlbGVhc2UoKTsKICAgICB9
Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgcmV0dXJuIGl0LT52YWx1ZTsKIH0KIAogdm9p
ZCBJbnNwZWN0b3JTdHlsZVNoZWV0OjpyZW1lbWJlckluc3BlY3RvclN0eWxlKFJlZlB0cjxJbnNw
ZWN0b3JTdHlsZT4gaW5zcGVjdG9yU3R5bGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JWYWx1ZXMuY3BwCmluZGV4IGU0ZWFkMTdlNTI4NjY4ZDllNTA1YmZkY2IxMDMwZTdi
NTBmYjc3NzcuLmFkYTI2MTdjYzBjNGJlYTBhOWYxOTlmMjU5NzcxNGQyNjkwYjA2ZTggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwCkBAIC03MTcsNyAr
NzE3LDcgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gSW5zcGVjdG9yT2JqZWN0QmFzZTo6
Z2V0KGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKICAgICBEaWN0aW9uYXJ5Ojpjb25zdF9pdGVy
YXRvciBpdCA9IG1fZGF0YS5maW5kKG5hbWUpOwogICAgIGlmIChpdCA9PSBtX2RhdGEuZW5kKCkp
CiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgIHJldHVybiBp
dC0+dmFsdWU7CiB9CiAKIHZvaWQgSW5zcGVjdG9yT2JqZWN0QmFzZTo6cmVtb3ZlKGNvbnN0IFN0
cmluZyYgbmFtZSkKQEAgLTczOSw5ICs3MzksOSBAQCB2b2lkIEluc3BlY3Rvck9iamVjdEJhc2U6
OndyaXRlSlNPTihTdHJpbmdCdWlsZGVyKiBvdXRwdXQpIGNvbnN0CiAgICAgICAgIEFTU0VSVChp
dCAhPSBtX2RhdGEuZW5kKCkpOwogICAgICAgICBpZiAoaSkKICAgICAgICAgICAgIG91dHB1dC0+
YXBwZW5kKCcsJyk7Ci0gICAgICAgIGRvdWJsZVF1b3RlU3RyaW5nKGl0LT5maXJzdCwgb3V0cHV0
KTsKKyAgICAgICAgZG91YmxlUXVvdGVTdHJpbmcoaXQtPmtleSwgb3V0cHV0KTsKICAgICAgICAg
b3V0cHV0LT5hcHBlbmQoJzonKTsKLSAgICAgICAgaXQtPnNlY29uZC0+d3JpdGVKU09OKG91dHB1
dCk7CisgICAgICAgIGl0LT52YWx1ZS0+d3JpdGVKU09OKG91dHB1dCk7CiAgICAgfQogICAgIG91
dHB1dC0+YXBwZW5kKCd9Jyk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yV29ya2VyQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvcldvcmtlckFnZW50LmNwcAppbmRleCAyNGJlZWI1N2QwNzdmMzIwOTcyNjA0NzgzMTc4
MjU0MGJiYzEzMjcwLi45ZmM2MWRiN2E3OWRiYTI0MGQ2NzNmMTg0NzlhYzRkNmQ0Mzc2MmQ3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yV29ya2VyQWdlbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JXb3JrZXJBZ2VudC5j
cHAKQEAgLTIwNCw5ICsyMDQsOSBAQCB2b2lkIEluc3BlY3RvcldvcmtlckFnZW50Ojp3b3JrZXJD
b250ZXh0VGVybWluYXRlZChXb3JrZXJDb250ZXh0UHJveHkqIHByb3h5KQogewogICAgIG1fZGVk
aWNhdGVkV29ya2Vycy5yZW1vdmUocHJveHkpOwogICAgIGZvciAoV29ya2VyQ2hhbm5lbHM6Oml0
ZXJhdG9yIGl0ID0gbV9pZFRvQ2hhbm5lbC5iZWdpbigpOyBpdCAhPSBtX2lkVG9DaGFubmVsLmVu
ZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmIChwcm94eSA9PSBpdC0+c2Vjb25kLT5wcm94eSgpKSB7
Ci0gICAgICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kLT53b3JrZXIoKS0+d29ya2VyVGVybWlu
YXRlZChpdC0+Zmlyc3QpOwotICAgICAgICAgICAgZGVsZXRlIGl0LT5zZWNvbmQ7CisgICAgICAg
IGlmIChwcm94eSA9PSBpdC0+dmFsdWUtPnByb3h5KCkpIHsKKyAgICAgICAgICAgIG1faW5zcGVj
dG9yRnJvbnRlbmQtPndvcmtlcigpLT53b3JrZXJUZXJtaW5hdGVkKGl0LT5rZXkpOworICAgICAg
ICAgICAgZGVsZXRlIGl0LT52YWx1ZTsKICAgICAgICAgICAgIG1faWRUb0NoYW5uZWwucmVtb3Zl
KGl0KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMjE2LDE0ICsyMTYsMTQg
QEAgdm9pZCBJbnNwZWN0b3JXb3JrZXJBZ2VudDo6d29ya2VyQ29udGV4dFRlcm1pbmF0ZWQoV29y
a2VyQ29udGV4dFByb3h5KiBwcm94eSkKIHZvaWQgSW5zcGVjdG9yV29ya2VyQWdlbnQ6OmNyZWF0
ZVdvcmtlckZyb250ZW5kQ2hhbm5lbHNGb3JFeGlzdGluZ1dvcmtlcnMoKQogewogICAgIGZvciAo
RGVkaWNhdGVkV29ya2Vyczo6aXRlcmF0b3IgaXQgPSBtX2RlZGljYXRlZFdvcmtlcnMuYmVnaW4o
KTsgaXQgIT0gbV9kZWRpY2F0ZWRXb3JrZXJzLmVuZCgpOyArK2l0KQotICAgICAgICBjcmVhdGVX
b3JrZXJGcm9udGVuZENoYW5uZWwoaXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsKKyAgICAgICAgY3Jl
YXRlV29ya2VyRnJvbnRlbmRDaGFubmVsKGl0LT5rZXksIGl0LT52YWx1ZSk7CiB9CiAKIHZvaWQg
SW5zcGVjdG9yV29ya2VyQWdlbnQ6OmRlc3Ryb3lXb3JrZXJGcm9udGVuZENoYW5uZWxzKCkKIHsK
ICAgICBmb3IgKFdvcmtlckNoYW5uZWxzOjppdGVyYXRvciBpdCA9IG1faWRUb0NoYW5uZWwuYmVn
aW4oKTsgaXQgIT0gbV9pZFRvQ2hhbm5lbC5lbmQoKTsgKytpdCkgewotICAgICAgICBpdC0+c2Vj
b25kLT5kaXNjb25uZWN0RnJvbVdvcmtlckNvbnRleHQoKTsKLSAgICAgICAgZGVsZXRlIGl0LT5z
ZWNvbmQ7CisgICAgICAgIGl0LT52YWx1ZS0+ZGlzY29ubmVjdEZyb21Xb3JrZXJDb250ZXh0KCk7
CisgICAgICAgIGRlbGV0ZSBpdC0+dmFsdWU7CiAgICAgfQogICAgIG1faWRUb0NoYW5uZWwuY2xl
YXIoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9OZXR3b3JrUmVz
b3VyY2VzRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvTmV0d29ya1Jlc291cmNl
c0RhdGEuY3BwCmluZGV4IGUwNWQxM2RlY2IzODE4ZmNmMWJiODMzMjgzNTlkZWFmYjI5NWRmYWMu
LjU5MjMzMDIzMTcxNjU2NTNkOWM1OTk2NTkzYTBjNWIxYWUxOTczZjUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0YS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL05ldHdvcmtSZXNvdXJjZXNEYXRhLmNwcApAQCAtMjU5LDEw
ICsyNTksMTAgQEAgVmVjdG9yPFN0cmluZz4gTmV0d29ya1Jlc291cmNlc0RhdGE6OnJlbW92ZUNh
Y2hlZFJlc291cmNlKENhY2hlZFJlc291cmNlKiBjYWNoZWQKICAgICBSZXNvdXJjZURhdGFNYXA6
Oml0ZXJhdG9yIGl0OwogICAgIFJlc291cmNlRGF0YU1hcDo6aXRlcmF0b3IgZW5kID0gbV9yZXF1
ZXN0SWRUb1Jlc291cmNlRGF0YU1hcC5lbmQoKTsKICAgICBmb3IgKGl0ID0gbV9yZXF1ZXN0SWRU
b1Jlc291cmNlRGF0YU1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgUmVz
b3VyY2VEYXRhKiByZXNvdXJjZURhdGEgPSBpdC0+c2Vjb25kOworICAgICAgICBSZXNvdXJjZURh
dGEqIHJlc291cmNlRGF0YSA9IGl0LT52YWx1ZTsKICAgICAgICAgaWYgKHJlc291cmNlRGF0YS0+
Y2FjaGVkUmVzb3VyY2UoKSA9PSBjYWNoZWRSZXNvdXJjZSkgewogICAgICAgICAgICAgcmVzb3Vy
Y2VEYXRhLT5zZXRDYWNoZWRSZXNvdXJjZSgwKTsKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQo
aXQtPmZpcnN0KTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoaXQtPmtleSk7CiAgICAgICAg
IH0KICAgICB9CiAKQEAgLTI3OSw5ICsyNzksOSBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZXNEYXRh
OjpjbGVhcihjb25zdCBTdHJpbmcmIHByZXNlcnZlZExvYWRlcklkKQogICAgIFJlc291cmNlRGF0
YU1hcDo6aXRlcmF0b3IgaXQ7CiAgICAgUmVzb3VyY2VEYXRhTWFwOjppdGVyYXRvciBlbmQgPSBt
X3JlcXVlc3RJZFRvUmVzb3VyY2VEYXRhTWFwLmVuZCgpOwogICAgIGZvciAoaXQgPSBtX3JlcXVl
c3RJZFRvUmVzb3VyY2VEYXRhTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAg
ICBSZXNvdXJjZURhdGEqIHJlc291cmNlRGF0YSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFJlc291
cmNlRGF0YSogcmVzb3VyY2VEYXRhID0gaXQtPnZhbHVlOwogICAgICAgICBpZiAoIXByZXNlcnZl
ZExvYWRlcklkLmlzTnVsbCgpICYmIHJlc291cmNlRGF0YS0+bG9hZGVySWQoKSA9PSBwcmVzZXJ2
ZWRMb2FkZXJJZCkKLSAgICAgICAgICAgIHByZXNlcnZlZE1hcC5zZXQoaXQtPmZpcnN0LCBpdC0+
c2Vjb25kKTsKKyAgICAgICAgICAgIHByZXNlcnZlZE1hcC5zZXQoaXQtPmtleSwgaXQtPnZhbHVl
KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgZGVsZXRlIHJlc291cmNlRGF0YTsKICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5BY2Nlc3NDb250
cm9sLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wu
Y3BwCmluZGV4IGFiYTJiYTA2M2U1OTMwOGZhZWM0NGJmYzc4ZGZhZjhkOWI4NDVhMGIuLjliMjZm
Yzg2YzkwNDM5Mzk1MTVmMTBhZTY5ZWJiNjU1MzBjMGI0MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuY3BwCkBAIC02OCw3ICs2OCw3
IEBAIGJvb2wgaXNTaW1wbGVDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3QoY29uc3QgU3RyaW5nJiBt
ZXRob2QsIGNvbnN0IEhUVFBIZWFkZXJNYXAmCiAKICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9p
dGVyYXRvciBlbmQgPSBoZWFkZXJNYXAuZW5kKCk7CiAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IGhlYWRlck1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
LSAgICAgICAgaWYgKCFpc09uQWNjZXNzQ29udHJvbFNpbXBsZVJlcXVlc3RIZWFkZXJXaGl0ZWxp
c3QoaXQtPmZpcnN0LCBpdC0+c2Vjb25kKSkKKyAgICAgICAgaWYgKCFpc09uQWNjZXNzQ29udHJv
bFNpbXBsZVJlcXVlc3RIZWFkZXJXaGl0ZWxpc3QoaXQtPmtleSwgaXQtPnZhbHVlKSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTExNiwxNCArMTE2LDE0IEBAIFJlc291
cmNlUmVxdWVzdCBjcmVhdGVBY2Nlc3NDb250cm9sUHJlZmxpZ2h0UmVxdWVzdChjb25zdCBSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlCiAgICAgaWYgKHJlcXVlc3RIZWFkZXJGaWVsZHMuc2l6ZSgpID4g
MCkgewogICAgICAgICBTdHJpbmdCdWlsZGVyIGhlYWRlckJ1ZmZlcjsKICAgICAgICAgSFRUUEhl
YWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSByZXF1ZXN0SGVhZGVyRmllbGRzLmJlZ2luKCk7
Ci0gICAgICAgIGhlYWRlckJ1ZmZlci5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgaGVhZGVy
QnVmZmVyLmFwcGVuZChpdC0+a2V5KTsKICAgICAgICAgKytpdDsKIAogICAgICAgICBIVFRQSGVh
ZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSByZXF1ZXN0SGVhZGVyRmllbGRzLmVuZCgpOwog
ICAgICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBoZWFkZXJCdWZm
ZXIuYXBwZW5kKCcsJyk7CiAgICAgICAgICAgICBoZWFkZXJCdWZmZXIuYXBwZW5kKCcgJyk7Ci0g
ICAgICAgICAgICBoZWFkZXJCdWZmZXIuYXBwZW5kKGl0LT5maXJzdCk7CisgICAgICAgICAgICBo
ZWFkZXJCdWZmZXIuYXBwZW5kKGl0LT5rZXkpOwogICAgICAgICB9CiAKICAgICAgICAgcHJlZmxp
Z2h0UmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoIkFjY2Vzcy1Db250cm9sLVJlcXVlc3QtSGVh
ZGVycyIsIGhlYWRlckJ1ZmZlci50b1N0cmluZygpLmxvd2VyKCkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUuY3BwIGIv
U291cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUuY3Bw
CmluZGV4IDA0ZDU4ODE1NWNlNTUzM2JkZGQzZjAyYjNiZDgxNWVkOWVlMzk5ZWIuLjlkNTFjODdm
ZTZjNGU3ZDQzOTMzZTQ1ZWVmN2Q1YzE5YmQ1ZTIwODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9Dcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5jcHAKQEAg
LTEyNSw4ICsxMjUsOCBAQCBib29sIENyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGVJdGVt
OjphbGxvd3NDcm9zc09yaWdpbkhlYWRlcnMoY29uc3QgSFRUUEhlYQogewogICAgIEhUVFBIZWFk
ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHJlcXVlc3RIZWFkZXJzLmVuZCgpOwogICAgIGZv
ciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSByZXF1ZXN0SGVhZGVycy5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKCFtX2hlYWRlcnMuY29udGFpbnMo
aXQtPmZpcnN0KSAmJiAhaXNPbkFjY2Vzc0NvbnRyb2xTaW1wbGVSZXF1ZXN0SGVhZGVyV2hpdGVs
aXN0KGl0LT5maXJzdCwgaXQtPnNlY29uZCkpIHsKLSAgICAgICAgICAgIGVycm9yRGVzY3JpcHRp
b24gPSAiUmVxdWVzdCBoZWFkZXIgZmllbGQgIiArIGl0LT5maXJzdC5zdHJpbmcoKSArICIgaXMg
bm90IGFsbG93ZWQgYnkgQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVycy4iOworICAgICAgICBp
ZiAoIW1faGVhZGVycy5jb250YWlucyhpdC0+a2V5KSAmJiAhaXNPbkFjY2Vzc0NvbnRyb2xTaW1w
bGVSZXF1ZXN0SGVhZGVyV2hpdGVsaXN0KGl0LT5rZXksIGl0LT52YWx1ZSkpIHsKKyAgICAgICAg
ICAgIGVycm9yRGVzY3JpcHRpb24gPSAiUmVxdWVzdCBoZWFkZXIgZmllbGQgIiArIGl0LT5rZXku
c3RyaW5nKCkgKyAiIGlzIG5vdCBhbGxvd2VkIGJ5IEFjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRl
cnMuIjsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KQEAgLTE2
Nyw3ICsxNjcsNyBAQCBib29sIENyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGU6OmNhblNr
aXBQcmVmbGlnaHQoY29uc3QgU3RyaW5nJiBvcmlnaW4sIGNvbgogICAgIGlmIChjYWNoZUl0ID09
IG1fcHJlZmxpZ2h0SGFzaE1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
aWYgKGNhY2hlSXQtPnNlY29uZC0+YWxsb3dzUmVxdWVzdChpbmNsdWRlQ3JlZGVudGlhbHMsIG1l
dGhvZCwgcmVxdWVzdEhlYWRlcnMpKQorICAgIGlmIChjYWNoZUl0LT52YWx1ZS0+YWxsb3dzUmVx
dWVzdChpbmNsdWRlQ3JlZGVudGlhbHMsIG1ldGhvZCwgcmVxdWVzdEhlYWRlcnMpKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKIAogICAgIG1fcHJlZmxpZ2h0SGFzaE1hcC5yZW1vdmUoY2FjaGVJdCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAppbmRleCBlYTY5YmY1MmY4
ODMzNzU5ZmI5ODgyY2M2NzhjMjAyOTc0ZDk5MzQ4Li4xMzkyYTI1MDY4YWVhNGI1NDVjM2I2OWMz
OGNhOGJjNjQyMTUzZTg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1l
bnRMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5j
cHAKQEAgLTYxNSw3ICs2MTUsNyBAQCB2b2lkIERvY3VtZW50TG9hZGVyOjpnZXRTdWJyZXNvdXJj
ZXMoVmVjdG9yPFBhc3NSZWZQdHI8QXJjaGl2ZVJlc291cmNlPiA+JiBzdWJyZQogICAgIGNvbnN0
IENhY2hlZFJlc291cmNlTG9hZGVyOjpEb2N1bWVudFJlc291cmNlTWFwJiBhbGxSZXNvdXJjZXMg
PSBkb2N1bWVudC0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS0+YWxsQ2FjaGVkUmVzb3VyY2VzKCk7
CiAgICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OkRvY3VtZW50UmVzb3VyY2VNYXA6OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IGFsbFJlc291cmNlcy5lbmQoKTsKICAgICBmb3IgKENhY2hlZFJlc291cmNl
TG9hZGVyOjpEb2N1bWVudFJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGFsbFJlc291
cmNlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgUmVmUHRyPEFyY2hpdmVS
ZXNvdXJjZT4gc3VicmVzb3VyY2UgPSB0aGlzLT5zdWJyZXNvdXJjZShLVVJMKFBhcnNlZFVSTFN0
cmluZywgaXQtPnNlY29uZC0+dXJsKCkpKTsKKyAgICAgICAgUmVmUHRyPEFyY2hpdmVSZXNvdXJj
ZT4gc3VicmVzb3VyY2UgPSB0aGlzLT5zdWJyZXNvdXJjZShLVVJMKFBhcnNlZFVSTFN0cmluZywg
aXQtPnZhbHVlLT51cmwoKSkpOwogICAgICAgICBpZiAoc3VicmVzb3VyY2UpCiAgICAgICAgICAg
ICBzdWJyZXNvdXJjZXMuYXBwZW5kKHN1YnJlc291cmNlLnJlbGVhc2UoKSk7CiAgICAgfQpAQCAt
NjQ3LDggKzY0Nyw4IEBAIHZvaWQgRG9jdW1lbnRMb2FkZXI6OnN1YnN0aXR1dGVSZXNvdXJjZURl
bGl2ZXJ5VGltZXJGaXJlZChUaW1lcjxEb2N1bWVudExvYWRlcj4qCiAKICAgICBTdWJzdGl0dXRl
UmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGNvcHkuZW5kKCk7CiAgICAgZm9yIChT
dWJzdGl0dXRlUmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY29weS5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgUmVmUHRyPFJlc291cmNlTG9hZGVyPiBsb2FkZXIg
PSBpdC0+Zmlyc3Q7Ci0gICAgICAgIFN1YnN0aXR1dGVSZXNvdXJjZSogcmVzb3VyY2UgPSBpdC0+
c2Vjb25kLmdldCgpOworICAgICAgICBSZWZQdHI8UmVzb3VyY2VMb2FkZXI+IGxvYWRlciA9IGl0
LT5rZXk7CisgICAgICAgIFN1YnN0aXR1dGVSZXNvdXJjZSogcmVzb3VyY2UgPSBpdC0+dmFsdWUu
Z2V0KCk7CiAgICAgICAgIAogICAgICAgICBpZiAocmVzb3VyY2UpIHsKICAgICAgICAgICAgIFNo
YXJlZEJ1ZmZlciogZGF0YSA9IHJlc291cmNlLT5kYXRhKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvTWFpblJlc291cmNlTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9NYWluUmVzb3VyY2VMb2FkZXIuY3BwCmluZGV4IDA4MzZkOGNjMDBlODkwNThlOTgzMjNi
YjZkNjA2NDUzZmNlOWM1MzcuLjMzNTJlNjQzNmE2YTVmNjFjOTZhOTgyMGYxOTM3MjY2YmUxNjFk
NjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9NYWluUmVzb3VyY2VMb2FkZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9NYWluUmVzb3VyY2VMb2FkZXIuY3BwCkBA
IC0zNjgsNyArMzY4LDcgQEAgdm9pZCBNYWluUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVSZXNw
b25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByKQogCiAgICAgSFRUUEhlYWRlck1hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSByLmh0dHBIZWFkZXJGaWVsZHMoKS5maW5kKEF0b21pY1N0cmluZygi
eC1mcmFtZS1vcHRpb25zIikpOwogICAgIGlmIChpdCAhPSByLmh0dHBIZWFkZXJGaWVsZHMoKS5l
bmQoKSkgewotICAgICAgICBTdHJpbmcgY29udGVudCA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFN0
cmluZyBjb250ZW50ID0gaXQtPnZhbHVlOwogICAgICAgICBpZiAobV9mcmFtZS0+bG9hZGVyKCkt
PnNob3VsZEludGVycnVwdExvYWRGb3JYRnJhbWVPcHRpb25zKGNvbnRlbnQsIHIudXJsKCkpKSB7
CiAgICAgICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnRpbnVlQWZ0ZXJYRnJh
bWVPcHRpb25zRGVuaWVkKG1fZnJhbWUuZ2V0KCksIGRvY3VtZW50TG9hZGVyKCksIGlkZW50aWZp
ZXIoKSwgcik7CiAgICAgICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgY29uc29s
ZU1lc3NhZ2UsICgiUmVmdXNlZCB0byBkaXNwbGF5IGRvY3VtZW50IGJlY2F1c2UgZGlzcGxheSBm
b3JiaWRkZW4gYnkgWC1GcmFtZS1PcHRpb25zLlxuIikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFNjaGVkdWxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcAppbmRleCA4MDA0ZDhmMmViMmQ4YmMzNjA2
YTA2OWZjN2VlYTM1MWFmY2ZjZGFhLi44ZWI0NGQ0OWQyOWE2ODQ2NjRkODMyNWNhMjYxZjU3NWM2
NDEwYjYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU2No
ZWR1bGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1
bGVyLmNwcApAQCAtMTc0LDcgKzE3NCw3IEBAIHZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpz
ZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhSZXNvdXJjZUxvYWRQcmlvcml0eSBtaW5pbXVtUHJpCiAgICAg
bV9ob3N0cy5jaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgSG9zdE1hcDo6aXRlcmF0b3IgZW5kID0g
bV9ob3N0cy5lbmQoKTsKICAgICBmb3IgKEhvc3RNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2hvc3Rz
LmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCi0gICAgICAgIGhvc3RzVG9TZXJ2ZS5hcHBl
bmQoaXRlci0+c2Vjb25kKTsKKyAgICAgICAgaG9zdHNUb1NlcnZlLmFwcGVuZChpdGVyLT52YWx1
ZSk7CiAKICAgICBpbnQgc2l6ZSA9IGhvc3RzVG9TZXJ2ZS5zaXplKCk7CiAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBzaXplOyArK2kpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9h
cHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlLmNwcAppbmRleCA2M2NkN2JiYmZhODc4OWY0YWRiM2Rm
NTJjYjRlOWMxN2RkNzE1OTQ0Li5iN2VhNjUyNGM0MDM5NzVmZjBkZjk0NmEyZjBkMDExY2IxNzAw
YTZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRp
b25DYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0
aW9uQ2FjaGUuY3BwCkBAIC0xMDAsMTEgKzEwMCwxMSBAQCB1bnNpZ25lZCBBcHBsaWNhdGlvbkNh
Y2hlOjpyZW1vdmVSZXNvdXJjZShjb25zdCBTdHJpbmcmIHVybCkKICAgICAgICAgcmV0dXJuIDA7
CiAKICAgICAvLyBUaGUgcmVzb3VyY2UgZXhpc3RzLCBnZXQgaXRzIHR5cGUgc28gd2UgY2FuIHJl
dHVybiBpdC4KLSAgICB1bnNpZ25lZCB0eXBlID0gaXQtPnNlY29uZC0+dHlwZSgpOworICAgIHVu
c2lnbmVkIHR5cGUgPSBpdC0+dmFsdWUtPnR5cGUoKTsKIAogICAgIG1fcmVzb3VyY2VzLnJlbW92
ZShpdCk7CiAKLSAgICBtX2VzdGltYXRlZFNpemVJblN0b3JhZ2UgLT0gaXQtPnNlY29uZC0+ZXN0
aW1hdGVkU2l6ZUluU3RvcmFnZSgpOworICAgIG1fZXN0aW1hdGVkU2l6ZUluU3RvcmFnZSAtPSBp
dC0+dmFsdWUtPmVzdGltYXRlZFNpemVJblN0b3JhZ2UoKTsKIAogICAgIHJldHVybiB0eXBlOwog
fSAgICAKQEAgLTE4MCw3ICsxODAsNyBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGU6OmNsZWFyU3Rv
cmFnZUlEKCkKICAgICAKICAgICBSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9y
ZXNvdXJjZXMuZW5kKCk7CiAgICAgZm9yIChSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtX3Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNv
bmQtPmNsZWFyU3RvcmFnZUlEKCk7CisgICAgICAgIGl0LT52YWx1ZS0+Y2xlYXJTdG9yYWdlSUQo
KTsKIH0KICAgICAKIHZvaWQgQXBwbGljYXRpb25DYWNoZTo6ZGVsZXRlQ2FjaGVGb3JPcmlnaW4o
U2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKQEAgLTIxOCw4ICsyMTgsOCBAQCB2b2lkIEFwcGxpY2F0
aW9uQ2FjaGU6OmR1bXAoKQogICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8QXBwbGljYXRpb25D
YWNoZVJlc291cmNlPiA+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3Jlc291cmNlcy5lbmQoKTsK
ICAgICAKICAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8QXBwbGljYXRpb25DYWNoZVJl
c291cmNlPiA+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgewotICAgICAgICBwcmludGYoIiVzICIsIGl0LT5maXJzdC5hc2NpaSgpLmRh
dGEoKSk7Ci0gICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6ZHVtcFR5cGUoaXQtPnNl
Y29uZC0+dHlwZSgpKTsKKyAgICAgICAgcHJpbnRmKCIlcyAiLCBpdC0+a2V5LmFzY2lpKCkuZGF0
YSgpKTsKKyAgICAgICAgQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpkdW1wVHlwZShpdC0+dmFs
dWUtPnR5cGUoKSk7CiAgICAgfQogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuY3BwCmluZGV4IDkyMDgy
YzU2YmUxMWM5ZGMyNTg1MGY3YTk0YmMyNzkzYjc3ZjVmNWYuLjI3M2E2MDEwZDgyNTVmYjk0YWE2
MDUxYjkyZjY5MmI0ODgzN2M5OTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9h
cHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuY3BwCkBAIC03NzcsOSArNzc3LDkg
QEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmRpZEZpbmlzaExvYWRpbmdNYW5pZmVzdCgp
CiAgICAgaWYgKGlzVXBncmFkZUF0dGVtcHQpIHsKICAgICAgICAgQXBwbGljYXRpb25DYWNoZTo6
UmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fbmV3ZXN0Q2FjaGUtPmVuZCgpOwog
ICAgICAgICBmb3IgKEFwcGxpY2F0aW9uQ2FjaGU6OlJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fbmV3ZXN0Q2FjaGUtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAg
ICAgICAgdW5zaWduZWQgdHlwZSA9IGl0LT5zZWNvbmQtPnR5cGUoKTsKKyAgICAgICAgICAgIHVu
c2lnbmVkIHR5cGUgPSBpdC0+dmFsdWUtPnR5cGUoKTsKICAgICAgICAgICAgIGlmICh0eXBlICYg
QXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpNYXN0ZXIpCi0gICAgICAgICAgICAgICAgYWRkRW50
cnkoaXQtPmZpcnN0LCB0eXBlKTsKKyAgICAgICAgICAgICAgICBhZGRFbnRyeShpdC0+a2V5LCB0
eXBlKTsKICAgICAgICAgfQogICAgIH0KICAgICAKQEAgLTEwMTgsNyArMTAxOCw3IEBAIHZvaWQg
QXBwbGljYXRpb25DYWNoZUdyb3VwOjpzdGFydExvYWRpbmdFbnRyeSgpCiAKICAgICBBU1NFUlQo
IW1fY3VycmVudEhhbmRsZSk7CiAgICAgCi0gICAgbV9jdXJyZW50SGFuZGxlID0gY3JlYXRlUmVz
b3VyY2VIYW5kbGUoS1VSTChQYXJzZWRVUkxTdHJpbmcsIGl0LT5maXJzdCksIG1fbmV3ZXN0Q2Fj
aGUgPyBtX25ld2VzdENhY2hlLT5yZXNvdXJjZUZvclVSTChpdC0+Zmlyc3QpIDogMCk7CisgICAg
bV9jdXJyZW50SGFuZGxlID0gY3JlYXRlUmVzb3VyY2VIYW5kbGUoS1VSTChQYXJzZWRVUkxTdHJp
bmcsIGl0LT5rZXkpLCBtX25ld2VzdENhY2hlID8gbV9uZXdlc3RDYWNoZS0+cmVzb3VyY2VGb3JV
UkwoaXQtPmtleSkgOiAwKTsKIH0KIAogdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmRlbGl2
ZXJEZWxheWVkTWFpblJlc291cmNlcygpCkBAIC0xMDY3LDcgKzEwNjcsNyBAQCB2b2lkIEFwcGxp
Y2F0aW9uQ2FjaGVHcm91cDo6YWRkRW50cnkoY29uc3QgU3RyaW5nJiB1cmwsIHVuc2lnbmVkIHR5
cGUpCiAgICAgRW50cnlNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX3BlbmRpbmdFbnRyaWVzLmFk
ZCh1cmwsIHR5cGUpOwogICAgIAogICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAg
IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kIHw9IHR5cGU7CisgICAgICAgIHJlc3VsdC5pdGVyYXRv
ci0+dmFsdWUgfD0gdHlwZTsKIH0KIAogdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmFzc29j
aWF0ZURvY3VtZW50TG9hZGVyV2l0aENhY2hlKERvY3VtZW50TG9hZGVyKiBsb2FkZXIsIEFwcGxp
Y2F0aW9uQ2FjaGUqIGNhY2hlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2Fw
cGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9h
cHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlSG9zdC5jcHAKaW5kZXggODAxYzFiMzY3MDMxYTMzOWRi
NDQ3MDdhOTJkMWJjODBkNDFkOGM3OS4uZmU5ZjAxMGEwZmU2NTAzZDBiYzVlNWI5Mjc3MGEzZjdi
NjQzNDRmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxp
Y2F0aW9uQ2FjaGVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUv
QXBwbGljYXRpb25DYWNoZUhvc3QuY3BwCkBAIC0yODIsNyArMjgyLDcgQEAgdm9pZCBBcHBsaWNh
dGlvbkNhY2hlSG9zdDo6ZmlsbFJlc291cmNlTGlzdChSZXNvdXJjZUluZm9MaXN0KiByZXNvdXJj
ZXMpCiAgICAgIAogICAgIEFwcGxpY2F0aW9uQ2FjaGU6OlJlc291cmNlTWFwOjpjb25zdF9pdGVy
YXRvciBlbmQgPSBjYWNoZS0+ZW5kKCk7CiAgICAgZm9yIChBcHBsaWNhdGlvbkNhY2hlOjpSZXNv
dXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjYWNoZS0+YmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7Ci0gICAgICAgIFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+IHJlc291cmNl
ID0gaXQtPnNlY29uZDsKKyAgICAgICAgUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4g
cmVzb3VyY2UgPSBpdC0+dmFsdWU7CiAgICAgICAgIHVuc2lnbmVkIHR5cGUgPSByZXNvdXJjZS0+
dHlwZSgpOwogICAgICAgICBib29sIGlzTWFzdGVyICAgPSB0eXBlICYgQXBwbGljYXRpb25DYWNo
ZVJlc291cmNlOjpNYXN0ZXI7CiAgICAgICAgIGJvb2wgaXNNYW5pZmVzdCA9IHR5cGUgJiBBcHBs
aWNhdGlvbkNhY2hlUmVzb3VyY2U6Ok1hbmlmZXN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVJlc291cmNlLmNwcAppbmRl
eCBkODMxNzg0YjQxOTZhZGYzODJjZjM1NWUwZWVmMDJkNmE3YTgwNzkwLi45OTc2NmUzYTY2YmQz
NmViNDJmZWQyYTkyNjlkMzRiMDY2MTk0ZDdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVJlc291cmNlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVJlc291cmNlLmNwcApAQCAt
NTQsNyArNTQsNyBAQCBpbnQ2NF90IEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6ZXN0aW1hdGVk
U2l6ZUluU3RvcmFnZSgpCiAKICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQg
PSByZXNwb25zZSgpLmh0dHBIZWFkZXJGaWVsZHMoKS5lbmQoKTsKICAgICBmb3IgKEhUVFBIZWFk
ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcmVzcG9uc2UoKS5odHRwSGVhZGVyRmllbGRzKCku
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBtX2VzdGltYXRlZFNpemVJblN0b3Jh
Z2UgKz0gKGl0LT5maXJzdC5sZW5ndGgoKSArIGl0LT5zZWNvbmQubGVuZ3RoKCkgKyAyKSAqIHNp
emVvZihVQ2hhcik7CisgICAgICAgIG1fZXN0aW1hdGVkU2l6ZUluU3RvcmFnZSArPSAoaXQtPmtl
eS5sZW5ndGgoKSArIGl0LT52YWx1ZS5sZW5ndGgoKSArIDIpICogc2l6ZW9mKFVDaGFyKTsKIAog
ICAgIG1fZXN0aW1hdGVkU2l6ZUluU3RvcmFnZSArPSB1cmwoKS5zdHJpbmcoKS5sZW5ndGgoKSAq
IHNpemVvZihVQ2hhcik7CiAgICAgbV9lc3RpbWF0ZWRTaXplSW5TdG9yYWdlICs9IHNpemVvZihp
bnQpOyAvLyByZXNwb25zZSgpLm1faHR0cFN0YXR1c0NvZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwCmlu
ZGV4IDc3OGU0ZTM4ODg5MWQzMzQ3MjBjZDIxNTI1NmQ0ZGFkMzliMjJmMWQuLmQxYzk3ZTRiMmFh
MTYwOGZjOTQ4ZWE2MzJjMmJhNmVkMmE3ZTUxM2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcApAQCAt
MTM3LDggKzEzNyw4IEBAIEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogQXBwbGljYXRpb25DYWNoZVN0
b3JhZ2U6OmZpbmRPckNyZWF0ZUNhY2hlR3JvdXAoY29uc3QgS1VSCiAgICAgQ2FjaGVHcm91cE1h
cDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fY2FjaGVzSW5NZW1vcnkuYWRkKG1hbmlmZXN0VVJMLCAw
KTsKICAgICAKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIEFTU0VSVChy
ZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3It
PnNlY29uZDsKKyAgICAgICAgQVNTRVJUKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOworICAgICAg
ICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAgICB9CiAKICAgICAvLyBMb29rIHVw
IHRoZSBncm91cCBpbiB0aGUgZGF0YWJhc2UKQEAgLTE1MCw3ICsxNTAsNyBAQCBBcHBsaWNhdGlv
bkNhY2hlR3JvdXAqIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpmaW5kT3JDcmVhdGVDYWNoZUdy
b3VwKGNvbnN0IEtVUgogICAgICAgICBtX2NhY2hlSG9zdFNldC5hZGQodXJsSG9zdEhhc2gobWFu
aWZlc3RVUkwpKTsKICAgICB9CiAgICAgCi0gICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBn
cm91cDsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gZ3JvdXA7CiAgICAgCiAgICAgcmV0
dXJuIGdyb3VwOwogfQpAQCAtMTk3LDcgKzE5Nyw3IEBAIEFwcGxpY2F0aW9uQ2FjaGVHcm91cCog
QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmNhY2hlR3JvdXBGb3JVUkwoY29uc3QgS1VSTCYgdXJs
CiAgICAgLy8gQ2hlY2sgaWYgYSBjYWNoZSBhbHJlYWR5IGV4aXN0cyBpbiBtZW1vcnkuCiAgICAg
Q2FjaGVHcm91cE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9jYWNoZXNJbk1lbW9yeS5lbmQo
KTsKICAgICBmb3IgKENhY2hlR3JvdXBNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9jYWNoZXNJ
bk1lbW9yeS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgQXBwbGljYXRpb25D
YWNoZUdyb3VwKiBncm91cCA9IGl0LT5zZWNvbmQ7CisgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVH
cm91cCogZ3JvdXAgPSBpdC0+dmFsdWU7CiAKICAgICAgICAgQVNTRVJUKCFncm91cC0+aXNPYnNv
bGV0ZSgpKTsKIApAQCAtMjY4LDcgKzI2OCw3IEBAIEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogQXBw
bGljYXRpb25DYWNoZVN0b3JhZ2U6OmZhbGxiYWNrQ2FjaGVHcm91cEZvclVSTChjb25zdCBLCiAg
ICAgLy8gQ2hlY2sgaWYgYW4gYXBwcm9wcmlhdGUgY2FjaGUgYWxyZWFkeSBleGlzdHMgaW4gbWVt
b3J5LgogICAgIENhY2hlR3JvdXBNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fY2FjaGVzSW5N
ZW1vcnkuZW5kKCk7CiAgICAgZm9yIChDYWNoZUdyb3VwTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9
IG1fY2FjaGVzSW5NZW1vcnkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIEFw
cGxpY2F0aW9uQ2FjaGVHcm91cCogZ3JvdXAgPSBpdC0+c2Vjb25kOworICAgICAgICBBcHBsaWNh
dGlvbkNhY2hlR3JvdXAqIGdyb3VwID0gaXQtPnZhbHVlOwogICAgICAgICAKICAgICAgICAgQVNT
RVJUKCFncm91cC0+aXNPYnNvbGV0ZSgpKTsKIApAQCAtNzEzLDEzICs3MTMsMTMgQEAgYm9vbCBB
cHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmUoQXBwbGljYXRpb25DYWNoZSogY2FjaGUsIFJl
c291cmNlU3RvcmFnZUlESm8KICAgICB7CiAgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGU6OlJlc291
cmNlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBjYWNoZS0+ZW5kKCk7CiAgICAgICAgIGZvciAo
QXBwbGljYXRpb25DYWNoZTo6UmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY2FjaGUt
PmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgdW5zaWduZWQgb2xkU3Rv
cmFnZUlEID0gaXQtPnNlY29uZC0+c3RvcmFnZUlEKCk7Ci0gICAgICAgICAgICBpZiAoIXN0b3Jl
KGl0LT5zZWNvbmQuZ2V0KCksIGNhY2hlU3RvcmFnZUlEKSkKKyAgICAgICAgICAgIHVuc2lnbmVk
IG9sZFN0b3JhZ2VJRCA9IGl0LT52YWx1ZS0+c3RvcmFnZUlEKCk7CisgICAgICAgICAgICBpZiAo
IXN0b3JlKGl0LT52YWx1ZS5nZXQoKSwgY2FjaGVTdG9yYWdlSUQpKQogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAgLy8gU3RvcmluZyB0aGUgcmVzb3VyY2Ugc3Vj
Y2VlZGVkLiBMb2cgaXRzIG9sZCBzdG9yYWdlSUQgaW4gY2FzZQogICAgICAgICAgICAgLy8gaXQg
bmVlZHMgdG8gYmUgcmVzdG9yZWQgbGF0ZXIuCi0gICAgICAgICAgICBzdG9yYWdlSURKb3VybmFs
LT5hZGQoaXQtPnNlY29uZC5nZXQoKSwgb2xkU3RvcmFnZUlEKTsKKyAgICAgICAgICAgIHN0b3Jh
Z2VJREpvdXJuYWwtPmFkZChpdC0+dmFsdWUuZ2V0KCksIG9sZFN0b3JhZ2VJRCk7CiAgICAgICAg
IH0KICAgICB9CiAgICAgCkBAIC04MzksOSArODM5LDkgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hl
U3RvcmFnZTo6c3RvcmUoQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJjZSwgdW5zaWdu
ZWQKICAgICAKICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSByZXNvdXJj
ZS0+cmVzcG9uc2UoKS5odHRwSGVhZGVyRmllbGRzKCkuZW5kKCk7CiAgICAgZm9yIChIVFRQSGVh
ZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHJlc291cmNlLT5yZXNwb25zZSgpLmh0dHBIZWFk
ZXJGaWVsZHMoKS5iZWdpbigpOyBpdCE9IGVuZDsgKytpdCkgewotICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZChpdC0+Zmlyc3QpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+
a2V5KTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoKFVDaGFyKSc6Jyk7Ci0gICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5zZWNvbmQpOworICAgICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZChpdC0+dmFsdWUpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgoVUNoYXIp
J1xuJyk7CiAgICAgfQogICAgIApAQCAtMTI0MSw3ICsxMjQxLDcgQEAgdm9pZCBBcHBsaWNhdGlv
bkNhY2hlU3RvcmFnZTo6ZW1wdHkoKQogICAgIC8vIHVudGlsIGEgY2FjaGUgdXBkYXRlIHByb2Nl
c3MgaGFzIGJlZW4gaW5pdGlhdGVkLgogICAgIENhY2hlR3JvdXBNYXA6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IG1fY2FjaGVzSW5NZW1vcnkuZW5kKCk7CiAgICAgZm9yIChDYWNoZUdyb3VwTWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IG1fY2FjaGVzSW5NZW1vcnkuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5jbGVhclN0b3JhZ2VJRCgpOworICAgICAgICBpdC0+
dmFsdWUtPmNsZWFyU3RvcmFnZUlEKCk7CiAgICAgCiAgICAgY2hlY2tGb3JEZWxldGVkUmVzb3Vy
Y2VzKCk7CiB9CkBAIC0xMzAzLDcgKzEzMDMsNyBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9y
YWdlOjpzdG9yZUNvcHlPZkNhY2hlKGNvbnN0IFN0cmluZyYgY2FjaGVEaXJlY3RvcnksIEFwcAog
ICAgIC8vIFRyYXZlcnNlIHRoZSBjYWNoZSBhbmQgYWRkIGNvcGllcyBvZiBhbGwgcmVzb3VyY2Vz
LgogICAgIEFwcGxpY2F0aW9uQ2FjaGU6OlJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQg
PSBjYWNoZS0+ZW5kKCk7CiAgICAgZm9yIChBcHBsaWNhdGlvbkNhY2hlOjpSZXNvdXJjZU1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBjYWNoZS0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0g
ICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2UgPSBpdC0+c2Vjb25kLmdl
dCgpOworICAgICAgICBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqIHJlc291cmNlID0gaXQtPnZh
bHVlLmdldCgpOwogICAgICAgICAKICAgICAgICAgUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGVSZXNv
dXJjZT4gcmVzb3VyY2VDb3B5ID0gQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpjcmVhdGUocmVz
b3VyY2UtPnVybCgpLCByZXNvdXJjZS0+cmVzcG9uc2UoKSwgcmVzb3VyY2UtPnR5cGUoKSwgcmVz
b3VyY2UtPmRhdGEoKSwgcmVzb3VyY2UtPnBhdGgoKSk7CiAgICAgICAgIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvQXJjaGl2ZUZhY3RvcnkuY3BwIGIvU291cmNl
L1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvQXJjaGl2ZUZhY3RvcnkuY3BwCmluZGV4IGY2OTcwYWE1
MzFiNWU1YTY1YzVhNjA1MjliMTVlMDU0Mzg2YzQ2NWYuLmNkMzg3NmFhZWZhYzkwNGNiNGNkNDkw
YzcyODg5MWUwMzg3NTY0ZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNo
aXZlL0FyY2hpdmVGYWN0b3J5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2
ZS9BcmNoaXZlRmFjdG9yeS5jcHAKQEAgLTk1LDcgKzk1LDcgQEAgdm9pZCBBcmNoaXZlRmFjdG9y
eTo6cmVnaXN0ZXJLbm93bkFyY2hpdmVNSU1FVHlwZXMoKQogICAgIEFyY2hpdmVNSU1FVHlwZXNN
YXA6Oml0ZXJhdG9yIGVuZCA9IGFyY2hpdmVNSU1FVHlwZXMoKS5lbmQoKTsKIAogICAgIGZvciAo
OyBpICE9IGVuZDsgKytpKQotICAgICAgICBtaW1lVHlwZXMuYWRkKGktPmZpcnN0KTsKKyAgICAg
ICAgbWltZVR5cGVzLmFkZChpLT5rZXkpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
bG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNlLmNwcAppbmRleCA0ZTQzMTMxYjFkMjU0ODM3
MWY3MTU3NGY1MTU2NTdlM2Q0MmQwODU0Li4xMjg4ZmUxN2NmMDkzZmI0NGQxYmM0MGM2ODY5NTJh
MDJhNGY0MDI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVk
UmF3UmVzb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRS
YXdSZXNvdXJjZS5jcHAKQEAgLTE1Myw4ICsxNTMsOCBAQCBib29sIENhY2hlZFJhd1Jlc291cmNl
OjpjYW5SZXVzZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIG5ld1JlcXVlc3QpIGNvbnN0CiAKICAg
ICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBuZXdIZWFkZXJzLmVuZCgpOwog
ICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaSA9IG5ld0hlYWRlcnMuYmVn
aW4oKTsgaSAhPSBlbmQ7ICsraSkgewotICAgICAgICBBdG9taWNTdHJpbmcgaGVhZGVyTmFtZSA9
IGktPmZpcnN0OwotICAgICAgICBpZiAoaS0+c2Vjb25kICE9IG9sZEhlYWRlcnMuZ2V0KGhlYWRl
ck5hbWUpKQorICAgICAgICBBdG9taWNTdHJpbmcgaGVhZGVyTmFtZSA9IGktPmtleTsKKyAgICAg
ICAgaWYgKGktPnZhbHVlICE9IG9sZEhlYWRlcnMuZ2V0KGhlYWRlck5hbWUpKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwCmluZGV4IGQ3YWJjYWU4NDBjNzk2
ZDYxYWI2MzYwNDVmZDVhZjVkZDcyYzc5MTYuLmFkZTk4M2U4NjVlNjRiODdjZTFjMTFjODM1ZWY0
NzVlZDZiNzEzN2IgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZWRSZXNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJl
c291cmNlLmNwcApAQCAtNjEyLDggKzYxMiw4IEBAIHZvaWQgQ2FjaGVkUmVzb3VyY2U6OnN3aXRj
aENsaWVudHNUb1JldmFsaWRhdGVkUmVzb3VyY2UoKQogICAgIFZlY3RvcjxDYWNoZWRSZXNvdXJj
ZUNsaWVudCo+IGNsaWVudHNUb01vdmU7CiAgICAgSGFzaENvdW50ZWRTZXQ8Q2FjaGVkUmVzb3Vy
Y2VDbGllbnQqPjo6aXRlcmF0b3IgZW5kMiA9IG1fY2xpZW50cy5lbmQoKTsKICAgICBmb3IgKEhh
c2hDb3VudGVkU2V0PENhY2hlZFJlc291cmNlQ2xpZW50Kj46Oml0ZXJhdG9yIGl0ID0gbV9jbGll
bnRzLmJlZ2luKCk7IGl0ICE9IGVuZDI7ICsraXQpIHsKLSAgICAgICAgQ2FjaGVkUmVzb3VyY2VD
bGllbnQqIGNsaWVudCA9IGl0LT5maXJzdDsKLSAgICAgICAgdW5zaWduZWQgY291bnQgPSBpdC0+
c2Vjb25kOworICAgICAgICBDYWNoZWRSZXNvdXJjZUNsaWVudCogY2xpZW50ID0gaXQtPmtleTsK
KyAgICAgICAgdW5zaWduZWQgY291bnQgPSBpdC0+dmFsdWU7CiAgICAgICAgIHdoaWxlIChjb3Vu
dCkgewogICAgICAgICAgICAgY2xpZW50c1RvTW92ZS5hcHBlbmQoY2xpZW50KTsKICAgICAgICAg
ICAgIC0tY291bnQ7CkBAIC02NDcsOSArNjQ3LDkgQEAgdm9pZCBDYWNoZWRSZXNvdXJjZTo6dXBk
YXRlUmVzcG9uc2VBZnRlclJldmFsaWRhdGlvbihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiB2YWwK
ICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBuZXdIZWFkZXJzLmVuZCgp
OwogICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBuZXdIZWFkZXJz
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAvLyBEb24ndCBhbGxvdyAzMDQg
cmVzcG9uc2UgdG8gdXBkYXRlIGNvbnRlbnQgaGVhZGVycywgdGhlc2UgY2FuJ3QgY2hhbmdlIGJ1
dCBzb21lIHNlcnZlcnMgc2VuZCB3cm9uZyB2YWx1ZXMuCi0gICAgICAgIGlmIChpdC0+Zmlyc3Qu
c3RhcnRzV2l0aChjb250ZW50SGVhZGVyUHJlZml4LCBmYWxzZSkpCisgICAgICAgIGlmIChpdC0+
a2V5LnN0YXJ0c1dpdGgoY29udGVudEhlYWRlclByZWZpeCwgZmFsc2UpKQogICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIG1fcmVzcG9uc2Uuc2V0SFRUUEhlYWRlckZpZWxkKGl0LT5maXJz
dCwgaXQtPnNlY29uZCk7CisgICAgICAgIG1fcmVzcG9uc2Uuc2V0SFRUUEhlYWRlckZpZWxkKGl0
LT5rZXksIGl0LT52YWx1ZSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlci5oCmluZGV4IDhiMzc4
MGI1ZTY0YjIxNDM0NjI4OTZiZGEyYTZhMjY1YTVhOGEwNzQuLjc5MzNiMGI4MTRjNTIxMjU2ZTA3
NjBmODYxYjQzMTA5N2I4OWI1OWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9j
YWNoZS9DYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlci5oCkBAIC00Miw3ICs0Miw3IEBA
IHB1YmxpYzoKICAgICAgICAgSXRlcmF0b3IgZW5kID0gc2V0LmVuZCgpOwogICAgICAgICBzaXpl
X3QgY2xpZW50SW5kZXggPSAwOwogICAgICAgICBmb3IgKEl0ZXJhdG9yIGN1cnJlbnQgPSBzZXQu
YmVnaW4oKTsgY3VycmVudCAhPSBlbmQ7ICsrY3VycmVudCkKLSAgICAgICAgICAgIG1fY2xpZW50
VmVjdG9yW2NsaWVudEluZGV4KytdID0gY3VycmVudC0+Zmlyc3Q7CisgICAgICAgICAgICBtX2Ns
aWVudFZlY3RvcltjbGllbnRJbmRleCsrXSA9IGN1cnJlbnQtPmtleTsKICAgICB9CiAKICAgICBU
KiBuZXh0KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRS
ZXNvdXJjZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVz
b3VyY2VMb2FkZXIuY3BwCmluZGV4IGIyNThjMDU3ZmYzYWYxMTE5NTgwZGUxYWY2MDg0MDUzMmY2
YTBhNzUuLjU1YzIxNDJiOWQxMGUwOGRlOGVkMGVhZWY3NTc5NDUxYmFkYzZlNjkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmNw
cApAQCAtMTI2LDcgKzEyNiw3IEBAIENhY2hlZFJlc291cmNlTG9hZGVyOjp+Q2FjaGVkUmVzb3Vy
Y2VMb2FkZXIoKQogICAgIGNsZWFyUHJlbG9hZHMoKTsKICAgICBEb2N1bWVudFJlc291cmNlTWFw
OjppdGVyYXRvciBlbmQgPSBtX2RvY3VtZW50UmVzb3VyY2VzLmVuZCgpOwogICAgIGZvciAoRG9j
dW1lbnRSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX2RvY3VtZW50UmVzb3VyY2VzLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+c2V0T3duaW5nQ2FjaGVk
UmVzb3VyY2VMb2FkZXIoMCk7CisgICAgICAgIGl0LT52YWx1ZS0+c2V0T3duaW5nQ2FjaGVkUmVz
b3VyY2VMb2FkZXIoMCk7CiAKICAgICAvLyBNYWtlIHN1cmUgbm8gcmVxdWVzdHMgc3RpbGwgcG9p
bnQgdG8gdGhpcyBDYWNoZWRSZXNvdXJjZUxvYWRlcgogICAgIEFTU0VSVChtX3JlcXVlc3RDb3Vu
dCA9PSAwKTsKQEAgLTQxOSw3ICs0MTksNyBAQCBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRS
ZXNvdXJjZT4gQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RSZXNvdXJjZShDYWNoZQogICAg
IGlmIChtZW1vcnlDYWNoZSgpLT5kaXNhYmxlZCgpKSB7CiAgICAgICAgIERvY3VtZW50UmVzb3Vy
Y2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9kb2N1bWVudFJlc291cmNlcy5maW5kKHVybC5zdHJpbmco
KSk7CiAgICAgICAgIGlmIChpdCAhPSBtX2RvY3VtZW50UmVzb3VyY2VzLmVuZCgpKSB7Ci0gICAg
ICAgICAgICBpdC0+c2Vjb25kLT5zZXRPd25pbmdDYWNoZWRSZXNvdXJjZUxvYWRlcigwKTsKKyAg
ICAgICAgICAgIGl0LT52YWx1ZS0+c2V0T3duaW5nQ2FjaGVkUmVzb3VyY2VMb2FkZXIoMCk7CiAg
ICAgICAgICAgICBtX2RvY3VtZW50UmVzb3VyY2VzLnJlbW92ZShpdCk7CiAgICAgICAgIH0KICAg
ICB9CkBAIC02MzEsNyArNjMxLDcgQEAgdm9pZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6c2V0QXV0
b0xvYWRJbWFnZXMoYm9vbCBlbmFibGUpCiAKICAgICBEb2N1bWVudFJlc291cmNlTWFwOjppdGVy
YXRvciBlbmQgPSBtX2RvY3VtZW50UmVzb3VyY2VzLmVuZCgpOwogICAgIGZvciAoRG9jdW1lbnRS
ZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX2RvY3VtZW50UmVzb3VyY2VzLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgewotICAgICAgICBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UgPSBpdC0+
c2Vjb25kLmdldCgpOworICAgICAgICBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UgPSBpdC0+dmFs
dWUuZ2V0KCk7CiAgICAgICAgIGlmIChyZXNvdXJjZS0+dHlwZSgpID09IENhY2hlZFJlc291cmNl
OjpJbWFnZVJlc291cmNlKSB7CiAgICAgICAgICAgICBDYWNoZWRJbWFnZSogaW1hZ2UgPSBjb25z
dF9jYXN0PENhY2hlZEltYWdlKj4oc3RhdGljX2Nhc3Q8Y29uc3QgQ2FjaGVkSW1hZ2UqPihyZXNv
dXJjZSkpOwogCkBAIC02NTEsNyArNjUxLDcgQEAgdm9pZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6
cmVtb3ZlQ2FjaGVkUmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlKSBjb25zdAogI2lm
bmRlZiBOREVCVUcKICAgICBEb2N1bWVudFJlc291cmNlTWFwOjppdGVyYXRvciBpdCA9IG1fZG9j
dW1lbnRSZXNvdXJjZXMuZmluZChyZXNvdXJjZS0+dXJsKCkpOwogICAgIGlmIChpdCAhPSBtX2Rv
Y3VtZW50UmVzb3VyY2VzLmVuZCgpKQotICAgICAgICBBU1NFUlQoaXQtPnNlY29uZC5nZXQoKSA9
PSByZXNvdXJjZSk7CisgICAgICAgIEFTU0VSVChpdC0+dmFsdWUuZ2V0KCkgPT0gcmVzb3VyY2Up
OwogI2VuZGlmCiAgICAgbV9kb2N1bWVudFJlc291cmNlcy5yZW1vdmUocmVzb3VyY2UtPnVybCgp
KTsKIH0KQEAgLTY4NSw5ICs2ODUsOSBAQCB2b2lkIENhY2hlZFJlc291cmNlTG9hZGVyOjpnYXJi
YWdlQ29sbGVjdERvY3VtZW50UmVzb3VyY2VzKCkKICAgICBTdHJpbmdWZWN0b3IgcmVzb3VyY2Vz
VG9EZWxldGU7CiAKICAgICBmb3IgKERvY3VtZW50UmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGl0ID0g
bV9kb2N1bWVudFJlc291cmNlcy5iZWdpbigpOyBpdCAhPSBtX2RvY3VtZW50UmVzb3VyY2VzLmVu
ZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kLT5oYXNPbmVIYW5kbGUoKSkgewot
ICAgICAgICAgICAgcmVzb3VyY2VzVG9EZWxldGUuYXBwZW5kKGl0LT5maXJzdCk7Ci0gICAgICAg
ICAgICBpdC0+c2Vjb25kLT5zZXRPd25pbmdDYWNoZWRSZXNvdXJjZUxvYWRlcigwKTsKKyAgICAg
ICAgaWYgKGl0LT52YWx1ZS0+aGFzT25lSGFuZGxlKCkpIHsKKyAgICAgICAgICAgIHJlc291cmNl
c1RvRGVsZXRlLmFwcGVuZChpdC0+a2V5KTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+c2V0T3du
aW5nQ2FjaGVkUmVzb3VyY2VMb2FkZXIoMCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTg4Myw4
ICs4ODMsOCBAQCB2b2lkIENhY2hlZFJlc291cmNlTG9hZGVyOjpyZXBvcnRNZW1vcnlVc2FnZShN
ZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKQogICAgIE1lbW9yeUNsYXNzSW5mbyBp
bmZvKG1lbW9yeU9iamVjdEluZm8sIHRoaXMsIE1lbW9yeUluc3RydW1lbnRhdGlvbjo6TG9hZGVy
KTsKICAgICBpbmZvLmFkZEhhc2hNYXAobV9kb2N1bWVudFJlc291cmNlcyk7CiAgICAgZm9yIChE
b2N1bWVudFJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBpID0gbV9kb2N1bWVudFJlc291cmNl
cy5iZWdpbigpOyBpICE9IG1fZG9jdW1lbnRSZXNvdXJjZXMuZW5kKCk7ICsraSkgewotICAgICAg
ICBpbmZvLmFkZEluc3RydW1lbnRlZE1lbWJlcihpLT5maXJzdCk7Ci0gICAgICAgIGluZm8uYWRk
SW5zdHJ1bWVudGVkTWVtYmVyKGktPnNlY29uZCk7CisgICAgICAgIGluZm8uYWRkSW5zdHJ1bWVu
dGVkTWVtYmVyKGktPmtleSk7CisgICAgICAgIGluZm8uYWRkSW5zdHJ1bWVudGVkTWVtYmVyKGkt
PnZhbHVlKTsKICAgICB9CiAgICAgaW5mby5hZGRIYXNoU2V0KG1fdmFsaWRhdGVkVVJMcyk7CiAg
ICAgaWYgKG1fcHJlbG9hZHMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2Fj
aGUvTWVtb3J5Q2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL01lbW9yeUNh
Y2hlLmNwcAppbmRleCA2NjExMWQ3M2Y3ZDFmYjAxMjE5NTZhZWFmZDEwMzdhZGJkMjhiMDExLi5j
Mzg4NmE0MGU4YTZlZWNlOTE5ZWU1OTU1MjIyZDlhNDg5NjViMjQ1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5jcHAKQEAgLTU0MCw3ICs1NDAsNyBAQCB2b2lk
IE1lbW9yeUNhY2hlOjpyZW1vdmVSZXNvdXJjZXNXaXRoT3JpZ2luKFNlY3VyaXR5T3JpZ2luKiBv
cmlnaW4pCiAKICAgICBDYWNoZWRSZXNvdXJjZU1hcDo6aXRlcmF0b3IgZSA9IG1fcmVzb3VyY2Vz
LmVuZCgpOwogICAgIGZvciAoQ2FjaGVkUmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNv
dXJjZXMuYmVnaW4oKTsgaXQgIT0gZTsgKytpdCkgewotICAgICAgICBDYWNoZWRSZXNvdXJjZSog
cmVzb3VyY2UgPSBpdC0+c2Vjb25kOworICAgICAgICBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2Ug
PSBpdC0+dmFsdWU7CiAgICAgICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gcmVzb3VyY2VPcmln
aW4gPSBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlRnJvbVN0cmluZyhyZXNvdXJjZS0+dXJsKCkpOwog
ICAgICAgICBpZiAoIXJlc291cmNlT3JpZ2luKQogICAgICAgICAgICAgY29udGludWU7CkBAIC01
NTYsNyArNTU2LDcgQEAgdm9pZCBNZW1vcnlDYWNoZTo6Z2V0T3JpZ2luc1dpdGhDYWNoZShTZWN1
cml0eU9yaWdpblNldCYgb3JpZ2lucykKIHsKICAgICBDYWNoZWRSZXNvdXJjZU1hcDo6aXRlcmF0
b3IgZSA9IG1fcmVzb3VyY2VzLmVuZCgpOwogICAgIGZvciAoQ2FjaGVkUmVzb3VyY2VNYXA6Oml0
ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZTsgKytpdCkKLSAgICAgICAg
b3JpZ2lucy5hZGQoU2VjdXJpdHlPcmlnaW46OmNyZWF0ZUZyb21TdHJpbmcoaXQtPnNlY29uZC0+
dXJsKCkpKTsKKyAgICAgICAgb3JpZ2lucy5hZGQoU2VjdXJpdHlPcmlnaW46OmNyZWF0ZUZyb21T
dHJpbmcoaXQtPnZhbHVlLT51cmwoKSkpOwogfQogCiB2b2lkIE1lbW9yeUNhY2hlOjpyZW1vdmVG
cm9tTGl2ZURlY29kZWRSZXNvdXJjZXNMaXN0KENhY2hlZFJlc291cmNlKiByZXNvdXJjZSkKQEAg
LTY4OSw3ICs2ODksNyBAQCBNZW1vcnlDYWNoZTo6U3RhdGlzdGljcyBNZW1vcnlDYWNoZTo6Z2V0
U3RhdGlzdGljcygpCiAgICAgU3RhdGlzdGljcyBzdGF0czsKICAgICBDYWNoZWRSZXNvdXJjZU1h
cDo6aXRlcmF0b3IgZSA9IG1fcmVzb3VyY2VzLmVuZCgpOwogICAgIGZvciAoQ2FjaGVkUmVzb3Vy
Y2VNYXA6Oml0ZXJhdG9yIGkgPSBtX3Jlc291cmNlcy5iZWdpbigpOyBpICE9IGU7ICsraSkgewot
ICAgICAgICBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UgPSBpLT5zZWNvbmQ7CisgICAgICAgIENh
Y2hlZFJlc291cmNlKiByZXNvdXJjZSA9IGktPnZhbHVlOwogICAgICAgICBzd2l0Y2ggKHJlc291
cmNlLT50eXBlKCkpIHsKICAgICAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJj
ZToKICAgICAgICAgICAgIHN0YXRzLmltYWdlcy5hZGRSZXNvdXJjZShyZXNvdXJjZSk7CkBAIC03
MjEsOCArNzIxLDggQEAgdm9pZCBNZW1vcnlDYWNoZTo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5
T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29uc3QKICAgICBpbmZvLmFkZEhhc2hNYXAo
bV9yZXNvdXJjZXMpOwogICAgIENhY2hlZFJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBlID0g
bV9yZXNvdXJjZXMuZW5kKCk7CiAgICAgZm9yIChDYWNoZWRSZXNvdXJjZU1hcDo6Y29uc3RfaXRl
cmF0b3IgaSA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7IGkgIT0gZTsgKytpKSB7Ci0gICAgICAgIGlu
Zm8uYWRkSW5zdHJ1bWVudGVkTWVtYmVyKGktPmZpcnN0KTsKLSAgICAgICAgaW5mby5hZGRJbnN0
cnVtZW50ZWRNZW1iZXIoaS0+c2Vjb25kKTsKKyAgICAgICAgaW5mby5hZGRJbnN0cnVtZW50ZWRN
ZW1iZXIoaS0+a2V5KTsKKyAgICAgICAgaW5mby5hZGRJbnN0cnVtZW50ZWRNZW1iZXIoaS0+dmFs
dWUpOwogICAgIH0KICAgICBpbmZvLmFkZFZlY3RvcihtX2FsbFJlc291cmNlcyk7CiAgICAgaW5m
by5hZGRNZW1iZXIobV9saXZlRGVjb2RlZFJlc291cmNlcyk7CkBAIC03MzgsNyArNzM4LDcgQEAg
dm9pZCBNZW1vcnlDYWNoZTo6c2V0RGlzYWJsZWQoYm9vbCBkaXNhYmxlZCkKICAgICAgICAgQ2Fj
aGVkUmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGkgPSBtX3Jlc291cmNlcy5iZWdpbigpOwogICAgICAg
ICBpZiAoaSA9PSBtX3Jlc291cmNlcy5lbmQoKSkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBldmljdChpLT5zZWNvbmQpOworICAgICAgICBldmljdChpLT52YWx1ZSk7CiAgICAgfQogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmNwcAppbmRleCA3MTA2
NDhmOTRhZGUxZmQ2MjBkZGRlYWRiNjA3NmViZTVlNTEwYjIyLi5kYjA4MzNlMWVjNDc4M2Q2Mzlm
OGI1NTVlMjlkMDRjZDllZGZlZTU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
aWNvbi9JY29uRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0lj
b25EYXRhYmFzZS5jcHAKQEAgLTE5Miw3ICsxOTIsNyBAQCB2b2lkIEljb25EYXRhYmFzZTo6cmVt
b3ZlQWxsSWNvbnMoKQogICAgICAgICBIYXNoTWFwPFN0cmluZywgUGFnZVVSTFJlY29yZCo+Ojpp
dGVyYXRvciBpdGVyID0gbV9wYWdlVVJMVG9SZWNvcmRNYXAuYmVnaW4oKTsKICAgICAgICAgSGFz
aE1hcDxTdHJpbmcsIFBhZ2VVUkxSZWNvcmQqPjo6aXRlcmF0b3IgZW5kID0gbV9wYWdlVVJMVG9S
ZWNvcmRNYXAuZW5kKCk7CiAgICAgICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKQotICAg
ICAgICAgICAgKCppdGVyKS5zZWNvbmQtPnNldEljb25SZWNvcmQoMCk7CisgICAgICAgICAgICAo
Kml0ZXIpLnZhbHVlLT5zZXRJY29uUmVjb3JkKDApOwogICAgICAgICAgICAgCiAgICAgICAgIC8v
IENsZWFyIHRoZSBpY29uVVJMIC0+IEljb25SZWNvcmQgbWFwCiAgICAgICAgIG1faWNvblVSTFRv
UmVjb3JkTWFwLmNsZWFyKCk7CkBAIC03ODUsNyArNzg1LDcgQEAgc2l6ZV90IEljb25EYXRhYmFz
ZTo6aWNvblJlY29yZENvdW50V2l0aERhdGEoKQogICAgIEhhc2hNYXA8U3RyaW5nLCBJY29uUmVj
b3JkKj46Oml0ZXJhdG9yIGVuZCA9IG1faWNvblVSTFRvUmVjb3JkTWFwLmVuZCgpOwogICAgIAog
ICAgIGZvciAoOyBpICE9IGVuZDsgKytpKQotICAgICAgICByZXN1bHQgKz0gKCgqaSkuc2Vjb25k
LT5pbWFnZURhdGFTdGF0dXMoKSA9PSBJbWFnZURhdGFTdGF0dXNQcmVzZW50KTsKKyAgICAgICAg
cmVzdWx0ICs9ICgoKmkpLnZhbHVlLT5pbWFnZURhdGFTdGF0dXMoKSA9PSBJbWFnZURhdGFTdGF0
dXNQcmVzZW50KTsKICAgICAgICAgICAgIAogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0xNTU2
LDEzICsxNTU2LDEzIEBAIHZvaWQgSWNvbkRhdGFiYXNlOjpwZXJmb3JtUGVuZGluZ1JldGFpbkFu
ZFJlbGVhc2VPcGVyYXRpb25zKCkKICAgICB9CiAKICAgICBmb3IgKEhhc2hDb3VudGVkU2V0PFN0
cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdG9SZXRhaW4uYmVnaW4oKSwgZW5kID0gdG9SZXRh
aW4uZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBBU1NFUlQoIWl0LT5maXJzdC5p
bXBsKCkgfHwgaXQtPmZpcnN0LmltcGwoKS0+aGFzT25lUmVmKCkpOwotICAgICAgICBwZXJmb3Jt
UmV0YWluSWNvbkZvclBhZ2VVUkwoaXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsKKyAgICAgICAgQVNT
RVJUKCFpdC0+a2V5LmltcGwoKSB8fCBpdC0+a2V5LmltcGwoKS0+aGFzT25lUmVmKCkpOworICAg
ICAgICBwZXJmb3JtUmV0YWluSWNvbkZvclBhZ2VVUkwoaXQtPmtleSwgaXQtPnZhbHVlKTsKICAg
ICB9CiAKICAgICBmb3IgKEhhc2hDb3VudGVkU2V0PFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gdG9SZWxlYXNlLmJlZ2luKCksIGVuZCA9IHRvUmVsZWFzZS5lbmQoKTsgaXQgIT0gZW5kOyAr
K2l0KSB7Ci0gICAgICAgIEFTU0VSVCghaXQtPmZpcnN0LmltcGwoKSB8fCBpdC0+Zmlyc3QuaW1w
bCgpLT5oYXNPbmVSZWYoKSk7Ci0gICAgICAgIHBlcmZvcm1SZWxlYXNlSWNvbkZvclBhZ2VVUkwo
aXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsKKyAgICAgICAgQVNTRVJUKCFpdC0+a2V5LmltcGwoKSB8
fCBpdC0+a2V5LmltcGwoKS0+aGFzT25lUmVmKCkpOworICAgICAgICBwZXJmb3JtUmVsZWFzZUlj
b25Gb3JQYWdlVVJMKGl0LT5rZXksIGl0LT52YWx1ZSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0RPTVdpbmRvdy5jcHAKaW5kZXggZDc4N2E2NWJkNmQ4MGM1NTBmOGQxMmEwZDRmMTMxZjc4NjFk
MTdhZC4uNmM4ODlmYWEzODMzNzZiZTVkYTcyNzQzMWY3N2M0MzM1MjBiYzliOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRE9NV2luZG93LmNwcApAQCAtMjQ4LDcgKzI0OCw3IEBAIGJvb2wgRE9NV2luZG93Ojpk
aXNwYXRjaEFsbFBlbmRpbmdCZWZvcmVVbmxvYWRFdmVudHMoKQogICAgIFZlY3RvcjxSZWZQdHI8
RE9NV2luZG93PiA+IHdpbmRvd3M7CiAgICAgRE9NV2luZG93U2V0OjppdGVyYXRvciBlbmQgPSBz
ZXQuZW5kKCk7CiAgICAgZm9yIChET01XaW5kb3dTZXQ6Oml0ZXJhdG9yIGl0ID0gc2V0LmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgd2luZG93cy5hcHBlbmQoaXQtPmZpcnN0KTsK
KyAgICAgICAgd2luZG93cy5hcHBlbmQoaXQtPmtleSk7CiAKICAgICBzaXplX3Qgc2l6ZSA9IHdp
bmRvd3Muc2l6ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CkBA
IC0yOTAsNyArMjkwLDcgQEAgdm9pZCBET01XaW5kb3c6OmRpc3BhdGNoQWxsUGVuZGluZ1VubG9h
ZEV2ZW50cygpCiAgICAgVmVjdG9yPFJlZlB0cjxET01XaW5kb3c+ID4gd2luZG93czsKICAgICBE
T01XaW5kb3dTZXQ6Oml0ZXJhdG9yIGVuZCA9IHNldC5lbmQoKTsKICAgICBmb3IgKERPTVdpbmRv
d1NldDo6aXRlcmF0b3IgaXQgPSBzZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAg
ICB3aW5kb3dzLmFwcGVuZChpdC0+Zmlyc3QpOworICAgICAgICB3aW5kb3dzLmFwcGVuZChpdC0+
a2V5KTsKIAogICAgIHNpemVfdCBzaXplID0gd2luZG93cy5zaXplKCk7CiAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNw
cAppbmRleCA5NTdhZGEzNDAxNDA1ZTI2MzMwZGQ0MmQ1YjQ1NzVlZjI5ZDY2NWFkLi43ZTVkZTUw
NzE5NGQ0ZWIyYTU5MzczNmRlOTZjZjk1NDY3MzgxYmQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVu
dEhhbmRsZXIuY3BwCkBAIC0zNjM3LDcgKzM2MzcsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFu
ZGxlVG91Y2hFdmVudChjb25zdCBQbGF0Zm9ybVRvdWNoRXZlbnQmIGV2ZW50KQogICAgICAgICAv
LyByZWxlYXNlZCBvciBjYW5jZWxsZWQgaXQgd2lsbCBvbmx5IGFwcGVhciBpbiB0aGUgY2hhbmdl
ZFRvdWNoZXMgbGlzdC4KICAgICAgICAgaWYgKHBvaW50U3RhdGUgIT0gUGxhdGZvcm1Ub3VjaFBv
aW50OjpUb3VjaFJlbGVhc2VkICYmIHBvaW50U3RhdGUgIT0gUGxhdGZvcm1Ub3VjaFBvaW50OjpU
b3VjaENhbmNlbGxlZCkgewogICAgICAgICAgICAgdG91Y2hlcy0+YXBwZW5kKHRvdWNoKTsKLSAg
ICAgICAgICAgIHRhcmdldFRvdWNoZXNJdGVyYXRvci0+c2Vjb25kLT5hcHBlbmQodG91Y2gpOwor
ICAgICAgICAgICAgdGFyZ2V0VG91Y2hlc0l0ZXJhdG9yLT52YWx1ZS0+YXBwZW5kKHRvdWNoKTsK
ICAgICAgICAgfQogCiAgICAgICAgIC8vIE5vdyBidWlsZCB1cCB0aGUgY29ycmVjdCBsaXN0IGZv
ciBjaGFuZ2VkVG91Y2hlcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKaW5kZXggMTg3NGRkZWYyZTFkMTY0
NDY4NWZhMjBmMTk5MDQxNzU0MmVmMzk4Mi4uZThhODU5ZTg2ZDgyNTRhNTA1YjA5NjllZTQ2Mzhh
ZGQ0YzE4ODk0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKQEAgLTU4MCw3ICs1ODAsNyBAQCB2b2lk
IEZyYW1lOjppbmplY3RVc2VyU2NyaXB0cyhVc2VyU2NyaXB0SW5qZWN0aW9uVGltZSBpbmplY3Rp
b25UaW1lKQogICAgICAgICByZXR1cm47CiAgICAgVXNlclNjcmlwdE1hcDo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gdXNlclNjcmlwdHMtPmVuZCgpOwogICAgIGZvciAoVXNlclNjcmlwdE1hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSB1c2VyU2NyaXB0cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQot
ICAgICAgICBpbmplY3RVc2VyU2NyaXB0c0ZvcldvcmxkKGl0LT5maXJzdC5nZXQoKSwgKml0LT5z
ZWNvbmQsIGluamVjdGlvblRpbWUpOworICAgICAgICBpbmplY3RVc2VyU2NyaXB0c0Zvcldvcmxk
KGl0LT5rZXkuZ2V0KCksICppdC0+dmFsdWUsIGluamVjdGlvblRpbWUpOwogfQogCiB2b2lkIEZy
YW1lOjppbmplY3RVc2VyU2NyaXB0c0ZvcldvcmxkKERPTVdyYXBwZXJXb3JsZCogd29ybGQsIGNv
bnN0IFVzZXJTY3JpcHRWZWN0b3ImIHVzZXJTY3JpcHRzLCBVc2VyU2NyaXB0SW5qZWN0aW9uVGlt
ZSBpbmplY3Rpb25UaW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlR3Jv
dXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlR3JvdXAuY3BwCmluZGV4IDQ1ZDI1ZjU1
MjE0ZDc0NDE5NGU5MzdmYTMxZTZlNjQ2MGVhY2FmOTIuLjAzMjdiYjBiNmM3ZWViODNjMmMzZTlk
MDI2MjdiODBkYzcxOWMxZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUdy
b3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5jcHAKQEAgLTkzLDEy
ICs5MywxMiBAQCBQYWdlR3JvdXAqIFBhZ2VHcm91cDo6cGFnZUdyb3VwKGNvbnN0IFN0cmluZyYg
Z3JvdXBOYW1lKQogICAgIFBhZ2VHcm91cE1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IHBhZ2VHcm91
cHMtPmFkZChncm91cE5hbWUsIDApOwogCiAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7Ci0g
ICAgICAgIEFTU0VSVCghcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOwotICAgICAgICByZXN1bHQu
aXRlcmF0b3ItPnNlY29uZCA9IG5ldyBQYWdlR3JvdXAoZ3JvdXBOYW1lKTsKKyAgICAgICAgQVNT
RVJUKCFyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZSA9IG5ldyBQYWdlR3JvdXAoZ3JvdXBOYW1lKTsKICAgICB9CiAKLSAgICBBU1NFUlQocmVz
dWx0Lml0ZXJhdG9yLT5zZWNvbmQpOwotICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnNlY29u
ZDsKKyAgICBBU1NFUlQocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CisgICAgcmV0dXJuIHJlc3Vs
dC5pdGVyYXRvci0+dmFsdWU7CiB9CiAKIHZvaWQgUGFnZUdyb3VwOjpjbG9zZUxvY2FsU3RvcmFn
ZSgpCkBAIC0xMDksOCArMTA5LDggQEAgdm9pZCBQYWdlR3JvdXA6OmNsb3NlTG9jYWxTdG9yYWdl
KCkKICAgICBQYWdlR3JvdXBNYXA6Oml0ZXJhdG9yIGVuZCA9IHBhZ2VHcm91cHMtPmVuZCgpOwog
CiAgICAgZm9yIChQYWdlR3JvdXBNYXA6Oml0ZXJhdG9yIGl0ID0gcGFnZUdyb3Vwcy0+YmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kLT5oYXNMb2NhbFN0
b3JhZ2UoKSkKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPmxvY2FsU3RvcmFnZSgpLT5jbG9zZSgp
OworICAgICAgICBpZiAoaXQtPnZhbHVlLT5oYXNMb2NhbFN0b3JhZ2UoKSkKKyAgICAgICAgICAg
IGl0LT52YWx1ZS0+bG9jYWxTdG9yYWdlKCktPmNsb3NlKCk7CiAgICAgfQogfQogCkBAIC0xMjEs
OCArMTIxLDggQEAgdm9pZCBQYWdlR3JvdXA6OmNsZWFyTG9jYWxTdG9yYWdlRm9yQWxsT3JpZ2lu
cygpCiAKICAgICBQYWdlR3JvdXBNYXA6Oml0ZXJhdG9yIGVuZCA9IHBhZ2VHcm91cHMtPmVuZCgp
OwogICAgIGZvciAoUGFnZUdyb3VwTWFwOjppdGVyYXRvciBpdCA9IHBhZ2VHcm91cHMtPmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnNlY29uZC0+aGFzTG9jYWxT
dG9yYWdlKCkpCi0gICAgICAgICAgICBpdC0+c2Vjb25kLT5sb2NhbFN0b3JhZ2UoKS0+Y2xlYXJB
bGxPcmlnaW5zRm9yRGVsZXRpb24oKTsKKyAgICAgICAgaWYgKGl0LT52YWx1ZS0+aGFzTG9jYWxT
dG9yYWdlKCkpCisgICAgICAgICAgICBpdC0+dmFsdWUtPmxvY2FsU3RvcmFnZSgpLT5jbGVhckFs
bE9yaWdpbnNGb3JEZWxldGlvbigpOwogICAgIH0KIH0KIApAQCAtMTMzLDggKzEzMyw4IEBAIHZv
aWQgUGFnZUdyb3VwOjpjbGVhckxvY2FsU3RvcmFnZUZvck9yaWdpbihTZWN1cml0eU9yaWdpbiog
b3JpZ2luKQogCiAgICAgUGFnZUdyb3VwTWFwOjppdGVyYXRvciBlbmQgPSBwYWdlR3JvdXBzLT5l
bmQoKTsKICAgICBmb3IgKFBhZ2VHcm91cE1hcDo6aXRlcmF0b3IgaXQgPSBwYWdlR3JvdXBzLT5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQtPmhhc0xv
Y2FsU3RvcmFnZSgpKQotICAgICAgICAgICAgaXQtPnNlY29uZC0+bG9jYWxTdG9yYWdlKCktPmNs
ZWFyT3JpZ2luRm9yRGVsZXRpb24ob3JpZ2luKTsKKyAgICAgICAgaWYgKGl0LT52YWx1ZS0+aGFz
TG9jYWxTdG9yYWdlKCkpCisgICAgICAgICAgICBpdC0+dmFsdWUtPmxvY2FsU3RvcmFnZSgpLT5j
bGVhck9yaWdpbkZvckRlbGV0aW9uKG9yaWdpbik7CiAgICAgfSAgICAKIH0KICAgICAKQEAgLTE0
NSw4ICsxNDUsOCBAQCB2b2lkIFBhZ2VHcm91cDo6c3luY0xvY2FsU3RvcmFnZSgpCiAKICAgICBQ
YWdlR3JvdXBNYXA6Oml0ZXJhdG9yIGVuZCA9IHBhZ2VHcm91cHMtPmVuZCgpOwogICAgIGZvciAo
UGFnZUdyb3VwTWFwOjppdGVyYXRvciBpdCA9IHBhZ2VHcm91cHMtPmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnNlY29uZC0+aGFzTG9jYWxTdG9yYWdlKCkpCi0g
ICAgICAgICAgICBpdC0+c2Vjb25kLT5sb2NhbFN0b3JhZ2UoKS0+c3luYygpOworICAgICAgICBp
ZiAoaXQtPnZhbHVlLT5oYXNMb2NhbFN0b3JhZ2UoKSkKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+
bG9jYWxTdG9yYWdlKCktPnN5bmMoKTsKICAgICB9CiB9CiAKQEAgLTI2OSw3ICsyNjksNyBAQCB2
b2lkIFBhZ2VHcm91cDo6YWRkVXNlclNjcmlwdFRvV29ybGQoRE9NV3JhcHBlcldvcmxkKiB3b3Js
ZCwgY29uc3QgU3RyaW5nJiBzb3VyYwogICAgIE93blB0cjxVc2VyU2NyaXB0PiB1c2VyU2NyaXB0
ID0gYWRvcHRQdHIobmV3IFVzZXJTY3JpcHQoc291cmNlLCB1cmwsIHdoaXRlbGlzdCwgYmxhY2ts
aXN0LCBpbmplY3Rpb25UaW1lLCBpbmplY3RlZEZyYW1lcykpOwogICAgIGlmICghbV91c2VyU2Ny
aXB0cykKICAgICAgICAgbV91c2VyU2NyaXB0cyA9IGFkb3B0UHRyKG5ldyBVc2VyU2NyaXB0TWFw
KTsKLSAgICBPd25QdHI8VXNlclNjcmlwdFZlY3Rvcj4mIHNjcmlwdHNJbldvcmxkID0gbV91c2Vy
U2NyaXB0cy0+YWRkKHdvcmxkLCBudWxscHRyKS5pdGVyYXRvci0+c2Vjb25kOworICAgIE93blB0
cjxVc2VyU2NyaXB0VmVjdG9yPiYgc2NyaXB0c0luV29ybGQgPSBtX3VzZXJTY3JpcHRzLT5hZGQo
d29ybGQsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoIXNjcmlwdHNJbldvcmxk
KQogICAgICAgICBzY3JpcHRzSW5Xb3JsZCA9IGFkb3B0UHRyKG5ldyBVc2VyU2NyaXB0VmVjdG9y
KTsKICAgICBzY3JpcHRzSW5Xb3JsZC0+YXBwZW5kKHVzZXJTY3JpcHQucmVsZWFzZSgpKTsKQEAg
LTI4Niw3ICsyODYsNyBAQCB2b2lkIFBhZ2VHcm91cDo6YWRkVXNlclN0eWxlU2hlZXRUb1dvcmxk
KERPTVdyYXBwZXJXb3JsZCogd29ybGQsIGNvbnN0IFN0cmluZyYgcwogICAgIE93blB0cjxVc2Vy
U3R5bGVTaGVldD4gdXNlclN0eWxlU2hlZXQgPSBhZG9wdFB0cihuZXcgVXNlclN0eWxlU2hlZXQo
c291cmNlLCB1cmwsIHdoaXRlbGlzdCwgYmxhY2tsaXN0LCBpbmplY3RlZEZyYW1lcywgbGV2ZWwp
KTsKICAgICBpZiAoIW1fdXNlclN0eWxlU2hlZXRzKQogICAgICAgICBtX3VzZXJTdHlsZVNoZWV0
cyA9IGFkb3B0UHRyKG5ldyBVc2VyU3R5bGVTaGVldE1hcCk7Ci0gICAgT3duUHRyPFVzZXJTdHls
ZVNoZWV0VmVjdG9yPiYgc3R5bGVTaGVldHNJbldvcmxkID0gbV91c2VyU3R5bGVTaGVldHMtPmFk
ZCh3b3JsZCwgbnVsbHB0cikuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBPd25QdHI8VXNlclN0eWxl
U2hlZXRWZWN0b3I+JiBzdHlsZVNoZWV0c0luV29ybGQgPSBtX3VzZXJTdHlsZVNoZWV0cy0+YWRk
KHdvcmxkLCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCFzdHlsZVNoZWV0c0lu
V29ybGQpCiAgICAgICAgIHN0eWxlU2hlZXRzSW5Xb3JsZCA9IGFkb3B0UHRyKG5ldyBVc2VyU3R5
bGVTaGVldFZlY3Rvcik7CiAgICAgc3R5bGVTaGVldHNJbldvcmxkLT5hcHBlbmQodXNlclN0eWxl
U2hlZXQucmVsZWFzZSgpKTsKQEAgLTMwNiw3ICszMDYsNyBAQCB2b2lkIFBhZ2VHcm91cDo6cmVt
b3ZlVXNlclNjcmlwdEZyb21Xb3JsZChET01XcmFwcGVyV29ybGQqIHdvcmxkLCBjb25zdCBLVVJM
JiB1cgogICAgIGlmIChpdCA9PSBtX3VzZXJTY3JpcHRzLT5lbmQoKSkKICAgICAgICAgcmV0dXJu
OwogICAgIAotICAgIFVzZXJTY3JpcHRWZWN0b3IqIHNjcmlwdHMgPSBpdC0+c2Vjb25kLmdldCgp
OworICAgIFVzZXJTY3JpcHRWZWN0b3IqIHNjcmlwdHMgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAg
Zm9yIChpbnQgaSA9IHNjcmlwdHMtPnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7CiAgICAgICAg
IGlmIChzY3JpcHRzLT5hdChpKS0+dXJsKCkgPT0gdXJsKQogICAgICAgICAgICAgc2NyaXB0cy0+
cmVtb3ZlKGkpOwpAQCAtMzI4LDcgKzMyOCw3IEBAIHZvaWQgUGFnZUdyb3VwOjpyZW1vdmVVc2Vy
U3R5bGVTaGVldEZyb21Xb3JsZChET01XcmFwcGVyV29ybGQqIHdvcmxkLCBjb25zdCBLVVJMCiAg
ICAgaWYgKGl0ID09IG1fdXNlclN0eWxlU2hlZXRzLT5lbmQoKSkKICAgICAgICAgcmV0dXJuOwog
ICAgIAotICAgIFVzZXJTdHlsZVNoZWV0VmVjdG9yKiBzdHlsZXNoZWV0cyA9IGl0LT5zZWNvbmQu
Z2V0KCk7CisgICAgVXNlclN0eWxlU2hlZXRWZWN0b3IqIHN0eWxlc2hlZXRzID0gaXQtPnZhbHVl
LmdldCgpOwogICAgIGZvciAoaW50IGkgPSBzdHlsZXNoZWV0cy0+c2l6ZSgpIC0gMTsgaSA+PSAw
OyAtLWkpIHsKICAgICAgICAgaWYgKHN0eWxlc2hlZXRzLT5hdChpKS0+dXJsKCkgPT0gdXJsKSB7
CiAgICAgICAgICAgICBzdHlsZXNoZWV0cy0+cmVtb3ZlKGkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Bh
Z2VTZXJpYWxpemVyLmNwcAppbmRleCBjOTExZDU0YTkyNTQ2YTdjZTE0ZjE4NjZlY2JjZWQ4YjU2
ZTU2NjNiLi5hMTYxNDkyNTVjN2UzZTQyNjAzOWM0YTEzMmZiMTYyYmM3YTE3ZmU1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcApAQCAtMzM5LDcgKzMzOSw3IEBAIEtVUkwg
UGFnZVNlcmlhbGl6ZXI6OnVybEZvckJsYW5rRnJhbWUoRnJhbWUqIGZyYW1lKQogewogICAgIEhh
c2hNYXA8RnJhbWUqLCBLVVJMPjo6aXRlcmF0b3IgaXRlciA9IG1fYmxhbmtGcmFtZVVSTHMuZmlu
ZChmcmFtZSk7CiAgICAgaWYgKGl0ZXIgIT0gbV9ibGFua0ZyYW1lVVJMcy5lbmQoKSkKLSAgICAg
ICAgcmV0dXJuIGl0ZXItPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGl0ZXItPnZhbHVlOwogICAg
IFN0cmluZyB1cmwgPSAid3ljaXd5ZzovL2ZyYW1lLyIgKyBTdHJpbmc6Om51bWJlcihtX2JsYW5r
RnJhbWVDb3VudGVyKyspOwogICAgIEtVUkwgZmFrZVVSTChQYXJzZWRVUkxTdHJpbmcsIHVybCk7
CiAgICAgbV9ibGFua0ZyYW1lVVJMcy5hZGQoZnJhbWUsIGZha2VVUkwpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eVBvbGljeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1NlY3VyaXR5UG9saWN5LmNwcAppbmRleCBjMmE1YWIxMTQzNWVmNmRiMDU3NjhjNzZjYTAz
NTdiNTYyNTgzMzEyLi41YjM2ZjRmNzE2YzQ0YmZiMDlmMjBlNjMyY2MwZDAzODZmM2NjYTNjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5UG9saWN5LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5UG9saWN5LmNwcApAQCAtMTMzLDkgKzEzMyw5IEBA
IHZvaWQgU2VjdXJpdHlQb2xpY3k6OmFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KGNvbnN0
IFNlY3VyaXR5T3JpZ2luJiBzb3VyY2VPCiAgICAgU3RyaW5nIHNvdXJjZVN0cmluZyA9IHNvdXJj
ZU9yaWdpbi50b1N0cmluZygpOwogICAgIE9yaWdpbkFjY2Vzc01hcDo6QWRkUmVzdWx0IHJlc3Vs
dCA9IG9yaWdpbkFjY2Vzc01hcCgpLmFkZChzb3VyY2VTdHJpbmcsIG51bGxwdHIpOwogICAgIGlm
IChyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBh
ZG9wdFB0cihuZXcgT3JpZ2luQWNjZXNzV2hpdGVMaXN0KTsKKyAgICAgICAgcmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZSA9IGFkb3B0UHRyKG5ldyBPcmlnaW5BY2Nlc3NXaGl0ZUxpc3QpOwogCi0gICAg
T3JpZ2luQWNjZXNzV2hpdGVMaXN0KiBsaXN0ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQuZ2V0
KCk7CisgICAgT3JpZ2luQWNjZXNzV2hpdGVMaXN0KiBsaXN0ID0gcmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZS5nZXQoKTsKICAgICBsaXN0LT5hcHBlbmQoT3JpZ2luQWNjZXNzRW50cnkoZGVzdGluYXRp
b25Qcm90b2NvbCwgZGVzdGluYXRpb25Eb21haW4sIGFsbG93RGVzdGluYXRpb25TdWJkb21haW5z
ID8gT3JpZ2luQWNjZXNzRW50cnk6OkFsbG93U3ViZG9tYWlucyA6IE9yaWdpbkFjY2Vzc0VudHJ5
OjpEaXNhbGxvd1N1YmRvbWFpbnMpKTsKIH0KIApAQCAtMTUyLDcgKzE1Miw3IEBAIHZvaWQgU2Vj
dXJpdHlQb2xpY3k6OnJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KGNvbnN0IFNlY3Vy
aXR5T3JpZ2luJiBzb3VyCiAgICAgaWYgKGl0ID09IG1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgT3JpZ2luQWNjZXNzV2hpdGVMaXN0KiBsaXN0ID0gaXQtPnNlY29uZC5nZXQoKTsK
KyAgICBPcmlnaW5BY2Nlc3NXaGl0ZUxpc3QqIGxpc3QgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAg
c2l6ZV90IGluZGV4ID0gbGlzdC0+ZmluZChPcmlnaW5BY2Nlc3NFbnRyeShkZXN0aW5hdGlvblBy
b3RvY29sLCBkZXN0aW5hdGlvbkRvbWFpbiwgYWxsb3dEZXN0aW5hdGlvblN1YmRvbWFpbnMgPyBP
cmlnaW5BY2Nlc3NFbnRyeTo6QWxsb3dTdWJkb21haW5zIDogT3JpZ2luQWNjZXNzRW50cnk6OkRp
c2FsbG93U3ViZG9tYWlucykpOwogICAgIGlmIChpbmRleCA9PSBub3RGb3VuZCkKICAgICAgICAg
cmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcAppbmRleCBlOTdjNjRmNzNkY2IwZTI3YWU0
OTY0ZDQ3NWU2MmFiODI5YjNmYzU0Li5hNTRlZDNiNWRmMmU0OGU4Nzg5OTRmYjQ1MWUwMTJlNTU2
ZTkyMzMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcApAQCAtNjAsNyArNjAsNyBAQCBzdGF0
aWMgaW5saW5lIHZvaWQgc2V0R2VuZXJpY0ZvbnRGYW1pbHlNYXAoU2NyaXB0Rm9udEZhbWlseU1h
cCYgZm9udE1hcCwgY29uc3QgQQogICAgICAgICBpZiAoaXQgPT0gZm9udE1hcC5lbmQoKSkKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgZm9udE1hcC5yZW1vdmUoaXQpOwotICAgIH0gZWxz
ZSBpZiAoaXQgIT0gZm9udE1hcC5lbmQoKSAmJiBpdC0+c2Vjb25kID09IGZhbWlseSkKKyAgICB9
IGVsc2UgaWYgKGl0ICE9IGZvbnRNYXAuZW5kKCkgJiYgaXQtPnZhbHVlID09IGZhbWlseSkKICAg
ICAgICAgcmV0dXJuOwogICAgIGVsc2UKICAgICAgICAgZm9udE1hcC5zZXQoc3RhdGljX2Nhc3Q8
aW50PihzY3JpcHQpLCBmYW1pbHkpOwpAQCAtNzMsNyArNzMsNyBAQCBzdGF0aWMgaW5saW5lIGNv
bnN0IEF0b21pY1N0cmluZyYgZ2V0R2VuZXJpY0ZvbnRGYW1pbHlGb3JTY3JpcHQoY29uc3QgU2Ny
aXB0Rm9udAogewogICAgIFNjcmlwdEZvbnRGYW1pbHlNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
Zm9udE1hcC5maW5kKHN0YXRpY19jYXN0PGludD4oc2NyaXB0KSk7CiAgICAgaWYgKGl0ICE9IGZv
bnRNYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgICAgICByZXR1cm4g
aXQtPnZhbHVlOwogICAgIGlmIChzY3JpcHQgIT0gVVNDUklQVF9DT01NT04pCiAgICAgICAgIHJl
dHVybiBnZXRHZW5lcmljRm9udEZhbWlseUZvclNjcmlwdChmb250TWFwLCBVU0NSSVBUX0NPTU1P
Tik7CiAgICAgcmV0dXJuIGVtcHR5QXRvbTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvU3BlZWNoSW5wdXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TcGVlY2hJbnB1dC5jcHAK
aW5kZXggMDEyOGVmOGE0MGE0MjQzNTRhYjVmOGU1MGJhOGVjYzYyMjU3YjNjOS4uODMyOGM1ZDRk
ZjMyOTk0MmI1OWYzZWNjMjI1MzU2OGNlMmE4YTExZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9TcGVlY2hJbnB1dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TcGVlY2hJ
bnB1dC5jcHAKQEAgLTYyLDcgKzYyLDcgQEAgaW50IFNwZWVjaElucHV0OjpyZWdpc3Rlckxpc3Rl
bmVyKFNwZWVjaElucHV0TGlzdGVuZXIqIGxpc3RlbmVyKQogI2lmIGRlZmluZWQoREVCVUcpCiAg
ICAgLy8gQ2hlY2sgaWYgYWxyZWFkeSBwcmVzZW50LgogICAgIGZvciAoSGFzaE1hcDxpbnQsIFNw
ZWVjaElucHV0TGlzdGVuZXIqPjo6aXRlcmF0b3IgaXQgPSBtX2xpc3RlbmVycy5iZWdpbigpOyBp
dCAhPSBtX2xpc3RlbmVycy5lbmQoKTsgKytpdCkKLSAgICAgIEFTU0VSVChpdC0+c2Vjb25kICE9
IGxpc3RlbmVyKTsKKyAgICAgIEFTU0VSVChpdC0+dmFsdWUgIT0gbGlzdGVuZXIpOwogI2VuZGlm
CiAKICAgICBtX2xpc3RlbmVycy5hZGQobV9uZXh0TGlzdGVuZXJJZCwgbGlzdGVuZXIpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9XaW5kb3dGZWF0dXJlcy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1dpbmRvd0ZlYXR1cmVzLmNwcAppbmRleCA3NTY0MTUyOGRmZWMyZjRiZWM3
ZWVhMzNkMDc0MGEwZGM3ZDdiYWM0Li4xYjZiMWQwYjE2MzJlODJhOTRlZjA0Njc5ZDBhN2Q0N2Fk
MzFjYjUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1dpbmRvd0ZlYXR1cmVzLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1dpbmRvd0ZlYXR1cmVzLmNwcApAQCAtMjEyLDcg
KzIxMiw3IEBAIGJvb2wgV2luZG93RmVhdHVyZXM6OmJvb2xGZWF0dXJlKGNvbnN0IERpYWxvZ0Zl
YXR1cmVzTWFwJiBmZWF0dXJlcywgY29uc3QgY2hhcioKICAgICBEaWFsb2dGZWF0dXJlc01hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBmZWF0dXJlcy5maW5kKGtleSk7CiAgICAgaWYgKGl0ID09IGZl
YXR1cmVzLmVuZCgpKQogICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlOwotICAgIGNvbnN0IFN0
cmluZyYgdmFsdWUgPSBpdC0+c2Vjb25kOworICAgIGNvbnN0IFN0cmluZyYgdmFsdWUgPSBpdC0+
dmFsdWU7CiAgICAgcmV0dXJuIHZhbHVlLmlzTnVsbCgpIHx8IHZhbHVlID09ICIxIiB8fCB2YWx1
ZSA9PSAieWVzIiB8fCB2YWx1ZSA9PSAib24iOwogfQogCkBAIC0yMjQsNyArMjI0LDcgQEAgZmxv
YXQgV2luZG93RmVhdHVyZXM6OmZsb2F0RmVhdHVyZShjb25zdCBEaWFsb2dGZWF0dXJlc01hcCYg
ZmVhdHVyZXMsIGNvbnN0IGNoYXIKICAgICAvLyBGSVhNRTogVGhlIHRvRG91YmxlIGZ1bmN0aW9u
IGRvZXMgbm90IG9mZmVyIGEgd2F5IHRvIHRlbGwgIjBxIiBmcm9tIHN0cmluZyB3aXRoIG5vIGRp
Z2l0cyBpbiBpdDogQm90aAogICAgIC8vIHJldHVybiB0aGUgbnVtYmVyIDAgYW5kIGZhbHNlIGZv
ciBvay4gQnV0ICIwcSIgc2hvdWxkIHlpZWxkIHRoZSBtaW5pbXVtIHJhdGhlciB0aGFuIHRoZSBk
ZWZhdWx0LgogICAgIGJvb2wgb2s7Ci0gICAgZG91YmxlIHBhcnNlZE51bWJlciA9IGl0LT5zZWNv
bmQudG9Eb3VibGUoJm9rKTsKKyAgICBkb3VibGUgcGFyc2VkTnVtYmVyID0gaXQtPnZhbHVlLnRv
RG91YmxlKCZvayk7CiAgICAgaWYgKChwYXJzZWROdW1iZXIgPT0gMCAmJiAhb2spIHx8IGlzbmFu
KHBhcnNlZE51bWJlcikpCiAgICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7CiAgICAgaWYgKHBh
cnNlZE51bWJlciA8IG1pbiB8fCBtYXggPD0gbWluKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmNwcAppbmRleCBjNDkxMTllNmEx
M2MwMTRjOGYyNThlMjk0NjEzODExY2RmYTBkNTFiLi41ZTA3MTdlMGE5Y2ZiYTMyODk4Mjk1NjIx
Nzc5MTJjMDZmNzhjOGJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlv
bi9BbmltYXRpb25Db250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1h
dGlvbi9BbmltYXRpb25Db250cm9sbGVyLmNwcApAQCAtOTMsMTQgKzkzLDE0IEBAIGRvdWJsZSBB
bmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6dXBkYXRlQW5pbWF0aW9ucyhTZXRDaGFuZ2VkIGNh
bGxTZXRDaGFuZ2VkLyoKIAogICAgIFJlbmRlck9iamVjdEFuaW1hdGlvbk1hcDo6Y29uc3RfaXRl
cmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5lbmQoKTsKICAgICBm
b3IgKFJlbmRlck9iamVjdEFuaW1hdGlvbk1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2NvbXBv
c2l0ZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gYW5pbWF0aW9uc0VuZDsgKytpdCkgewotICAg
ICAgICBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBBbmltID0gaXQtPnNlY29uZC5nZXQoKTsKKyAg
ICAgICAgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wQW5pbSA9IGl0LT52YWx1ZS5nZXQoKTsKICAg
ICAgICAgaWYgKCFjb21wQW5pbS0+c3VzcGVuZGVkKCkgJiYgY29tcEFuaW0tPmhhc0FuaW1hdGlv
bnMoKSkgewogICAgICAgICAgICAgZG91YmxlIHQgPSBjb21wQW5pbS0+dGltZVRvTmV4dFNlcnZp
Y2UoKTsKICAgICAgICAgICAgIGlmICh0ICE9IC0xICYmICh0IDwgdGltZVRvTmV4dFNlcnZpY2Ug
fHwgdGltZVRvTmV4dFNlcnZpY2UgPT0gLTEpKQogICAgICAgICAgICAgICAgIHRpbWVUb05leHRT
ZXJ2aWNlID0gdDsKICAgICAgICAgICAgIGlmICghdGltZVRvTmV4dFNlcnZpY2UpIHsKICAgICAg
ICAgICAgICAgICBpZiAoY2FsbFNldENoYW5nZWQgPT0gQ2FsbFNldENoYW5nZWQpIHsKLSAgICAg
ICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGl0LT5maXJzdC0+bm9kZSgpOworICAgICAgICAg
ICAgICAgICAgICBOb2RlKiBub2RlID0gaXQtPmtleS0+bm9kZSgpOwogICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQoIW5vZGUgfHwgKG5vZGUtPmRvY3VtZW50KCkgJiYgIW5vZGUtPmRvY3VtZW50
KCktPmluUGFnZUNhY2hlKCkpKTsKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0TmVlZHNT
dHlsZVJlY2FsYyhTeW50aGV0aWNTdHlsZUNoYW5nZSk7CiAgICAgICAgICAgICAgICAgICAgIGNh
bGxlZFNldENoYW5nZWQgPSB0cnVlOwpAQCAtMjkyLDkgKzI5Miw5IEBAIHZvaWQgQW5pbWF0aW9u
Q29udHJvbGxlclByaXZhdGU6OnN1c3BlbmRBbmltYXRpb25zRm9yRG9jdW1lbnQoRG9jdW1lbnQq
IGRvY3VtZW50CiAgICAgCiAgICAgUmVuZGVyT2JqZWN0QW5pbWF0aW9uTWFwOjpjb25zdF9pdGVy
YXRvciBhbmltYXRpb25zRW5kID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmVuZCgpOwogICAgIGZv
ciAoUmVuZGVyT2JqZWN0QW5pbWF0aW9uTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fY29tcG9z
aXRlQW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBhbmltYXRpb25zRW5kOyArK2l0KSB7Ci0gICAg
ICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBpdC0+Zmlyc3Q7CisgICAgICAgIFJlbmRlck9i
amVjdCogcmVuZGVyZXIgPSBpdC0+a2V5OwogICAgICAgICBpZiAocmVuZGVyZXItPmRvY3VtZW50
KCkgPT0gZG9jdW1lbnQpIHsKLSAgICAgICAgICAgIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcEFu
aW0gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgQ29tcG9zaXRlQW5pbWF0aW9uKiBj
b21wQW5pbSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGNvbXBBbmltLT5zdXNwZW5k
QW5pbWF0aW9ucygpOwogICAgICAgICB9CiAgICAgfQpAQCAtMzA4LDkgKzMwOCw5IEBAIHZvaWQg
QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnJlc3VtZUFuaW1hdGlvbnNGb3JEb2N1bWVudChE
b2N1bWVudCogZG9jdW1lbnQpCiAgICAgCiAgICAgUmVuZGVyT2JqZWN0QW5pbWF0aW9uTWFwOjpj
b25zdF9pdGVyYXRvciBhbmltYXRpb25zRW5kID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmVuZCgp
OwogICAgIGZvciAoUmVuZGVyT2JqZWN0QW5pbWF0aW9uTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9
IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBhbmltYXRpb25zRW5kOyArK2l0
KSB7Ci0gICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBpdC0+Zmlyc3Q7CisgICAgICAg
IFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBpdC0+a2V5OwogICAgICAgICBpZiAocmVuZGVyZXIt
PmRvY3VtZW50KCkgPT0gZG9jdW1lbnQpIHsKLSAgICAgICAgICAgIENvbXBvc2l0ZUFuaW1hdGlv
biogY29tcEFuaW0gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgQ29tcG9zaXRlQW5p
bWF0aW9uKiBjb21wQW5pbSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGNvbXBBbmlt
LT5yZXN1bWVBbmltYXRpb25zKCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0zOTYsOCArMzk2LDgg
QEAgdW5zaWduZWQgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6Om51bWJlck9mQWN0aXZlQW5p
bWF0aW9ucyhEb2N1bWVudCogZG9jdW1lbnQKICAgICAKICAgICBSZW5kZXJPYmplY3RBbmltYXRp
b25NYXA6OmNvbnN0X2l0ZXJhdG9yIGFuaW1hdGlvbnNFbmQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlv
bnMuZW5kKCk7CiAgICAgZm9yIChSZW5kZXJPYmplY3RBbmltYXRpb25NYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGFuaW1hdGlvbnNF
bmQ7ICsraXQpIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGl0LT5maXJzdDsK
LSAgICAgICAgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wQW5pbSA9IGl0LT5zZWNvbmQuZ2V0KCk7
CisgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBpdC0+a2V5OworICAgICAgICBDb21w
b3NpdGVBbmltYXRpb24qIGNvbXBBbmltID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICBpZiAo
cmVuZGVyZXItPmRvY3VtZW50KCkgPT0gZG9jdW1lbnQpCiAgICAgICAgICAgICBjb3VudCArPSBj
b21wQW5pbS0+bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHAKaW5kZXgg
ZjM1Nzc4MTg5NzQwZWUzNmU4YTMzYTUwYWY2Y2FkNTY5MjkwZjk2Yi4uMGIwZjM3OWQ1NmFiZDg1
YzYzYmFlMTRjZTVlYTJiNDlhYjEzZWU4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uY3BwCkBAIC01OCw3ICs1OCw3IEBAIHZv
aWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpjbGVhclJlbmRlcmVyKCkKICAgICAgICAgLy8gYW4gYW5p
bWF0aW9uIGNhbGxiYWNrIChzZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIyMDUyKQogICAgICAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVy
YXRvciB0cmFuc2l0aW9uc0VuZCA9IG1fdHJhbnNpdGlvbnMuZW5kKCk7CiAgICAgICAgIGZvciAo
Q1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRp
b25zLmJlZ2luKCk7IGl0ICE9IHRyYW5zaXRpb25zRW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBJ
bXBsaWNpdEFuaW1hdGlvbiogdHJhbnNpdGlvbiA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAg
ICAgICBJbXBsaWNpdEFuaW1hdGlvbiogdHJhbnNpdGlvbiA9IGl0LT52YWx1ZS5nZXQoKTsKICAg
ICAgICAgICAgIGFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+YW5pbWF0aW9uV2lsbEJlUmVtb3ZlZCh0
cmFuc2l0aW9uKTsKICAgICAgICAgICAgIHRyYW5zaXRpb24tPmNsZWFyKCk7CiAgICAgICAgIH0K
QEAgLTY3LDcgKzY3LDcgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OmNsZWFyUmVuZGVyZXIo
KQogICAgICAgICBtX2tleWZyYW1lQW5pbWF0aW9ucy5jaGVja0NvbnNpc3RlbmN5KCk7CiAgICAg
ICAgIEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGFuaW1hdGlvbnNFbmQgPSBtX2tl
eWZyYW1lQW5pbWF0aW9ucy5lbmQoKTsKICAgICAgICAgZm9yIChBbmltYXRpb25OYW1lTWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGFu
aW1hdGlvbnNFbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIEtleWZyYW1lQW5pbWF0aW9uKiBhbmlt
ID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgIEtleWZyYW1lQW5pbWF0aW9uKiBhbmlt
ID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAgICAgYW5pbWF0aW9uQ29udHJvbGxlcigpLT5h
bmltYXRpb25XaWxsQmVSZW1vdmVkKGFuaW0pOwogICAgICAgICAgICAgYW5pbS0+Y2xlYXIoKTsK
ICAgICAgICAgfQpAQCAtODQsNyArODQsNyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBk
YXRlVHJhbnNpdGlvbnMoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgUmVuZGVyU3R5bGUqCiAgICAg
Ly8gaW4gdGhlIG5leHQgbG9vcCBhbmQgdGhlbiB0b3NzIHRoZSBvbmVzIHRoYXQgZGlkbid0IGdl
dCBtYXJrZWQuCiAgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKICAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlv
bnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPnNldEFjdGl2ZShmYWxzZSk7CisgICAgICAg
IGl0LT52YWx1ZS0+c2V0QWN0aXZlKGZhbHNlKTsKICAgICAgICAgCiAgICAgUmVmUHRyPFJlbmRl
clN0eWxlPiBtb2RpZmllZEN1cnJlbnRTdHlsZTsKICAgICAKQEAgLTE4MSw3ICsxODEsNyBAQCB2
b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlVHJhbnNpdGlvbnMoUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlciwgUmVuZGVyU3R5bGUqCiAgICAgVmVjdG9yPGludD4gdG9CZVJlbW92ZWQ7CiAgICAg
ZW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKICAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlv
bnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKLSAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25k
LmdldCgpOworICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT52YWx1ZS5nZXQo
KTsKICAgICAgICAgaWYgKCFhbmltLT5hY3RpdmUoKSkgewogICAgICAgICAgICAgYW5pbWF0aW9u
Q29udHJvbGxlcigpLT5hbmltYXRpb25XaWxsQmVSZW1vdmVkKGFuaW0pOwogICAgICAgICAgICAg
dG9CZVJlbW92ZWQuYXBwZW5kKGFuaW0tPmFuaW1hdGluZ1Byb3BlcnR5KCkpOwpAQCAtMjA3LDEz
ICsyMDcsMTMgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnVwZGF0ZUtleWZyYW1lQW5pbWF0
aW9ucyhSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBSZW5kZXIKICAgICAgICAgLy8gVGhlIGN1cnJl
bnQgYW5kIHRhcmdldCBhbmltYXRpb25zIGFyZSB0aGUgc2FtZSBzbyB3ZSBqdXN0IG5lZWQgdG8g
dG9zcyBhbnkgCiAgICAgICAgIC8vIGFuaW1hdGlvbiB3aGljaCBpcyBmaW5pc2hlZCAocG9zdEFj
dGl2ZSkuCiAgICAgICAgIGZvciAoQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtX2tleWZyYW1lQW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBrZmVuZDsgKytpdCkgewotICAg
ICAgICAgICAgaWYgKGl0LT5zZWNvbmQtPnBvc3RBY3RpdmUoKSkKLSAgICAgICAgICAgICAgICBp
dC0+c2Vjb25kLT5zZXRJbmRleCgtMSk7CisgICAgICAgICAgICBpZiAoaXQtPnZhbHVlLT5wb3N0
QWN0aXZlKCkpCisgICAgICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRJbmRleCgtMSk7CiAgICAg
ICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICAvLyBNYXJrIGFsbCBleGlzdGluZyBhbmltYXRp
b25zIGFzIG5vIGxvbmdlciBhY3RpdmUuCiAgICAgICAgIGZvciAoQW5pbWF0aW9uTmFtZU1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBr
ZmVuZDsgKytpdCkKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNldEluZGV4KC0xKTsKKyAgICAg
ICAgICAgIGl0LT52YWx1ZS0+c2V0SW5kZXgoLTEpOwogICAgICAgICAgICAgCiAgICAgICAgIC8v
IFRvc3MgdGhlIGFuaW1hdGlvbiBvcmRlciBtYXAuCiAgICAgICAgIG1fa2V5ZnJhbWVBbmltYXRp
b25PcmRlck1hcC5jbGVhcigpOwpAQCAtMjYyLDcgKzI2Miw3IEBAIHZvaWQgQ29tcG9zaXRlQW5p
bWF0aW9uOjp1cGRhdGVLZXlmcmFtZUFuaW1hdGlvbnMoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwg
UmVuZGVyCiAgICAgVmVjdG9yPEF0b21pY1N0cmluZ0ltcGwqPiBhbmltc1RvQmVSZW1vdmVkOwog
ICAgIGtmZW5kID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuZW5kKCk7CiAgICAgZm9yIChBbmltYXRp
b25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmJlZ2lu
KCk7IGl0ICE9IGtmZW5kOyArK2l0KSB7Ci0gICAgICAgIEtleWZyYW1lQW5pbWF0aW9uKiBrZXlm
cmFtZUFuaW0gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICBLZXlmcmFtZUFuaW1hdGlvbiog
a2V5ZnJhbWVBbmltID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICBpZiAoa2V5ZnJhbWVBbmlt
LT5pbmRleCgpIDwgMCkgewogICAgICAgICAgICAgYW5pbXNUb0JlUmVtb3ZlZC5hcHBlbmQoa2V5
ZnJhbWVBbmltLT5uYW1lKCkuaW1wbCgpKTsKICAgICAgICAgICAgIGFuaW1hdGlvbkNvbnRyb2xs
ZXIoKS0+YW5pbWF0aW9uV2lsbEJlUmVtb3ZlZChrZXlmcmFtZUFuaW0pOwpAQCAtMjkwLDcgKzI5
MCw3IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IENvbXBvc2l0ZUFuaW1hdGlvbjo6YW5pbWF0
ZShSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBSZW5kCiAgICAgICAgIGlmICghbV90cmFuc2l0aW9u
cy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IG1fdHJhbnNpdGlvbnMuZW5kKCk7CiAgICAgICAgICAgICBmb3Ig
KENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0
aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgICAgICBpZiAoSW1w
bGljaXRBbmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kLmdldCgpKQorICAgICAgICAgICAgICAg
IGlmIChJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT52YWx1ZS5nZXQoKSkKICAgICAgICAg
ICAgICAgICAgICAgYW5pbS0+YW5pbWF0ZSh0aGlzLCByZW5kZXJlciwgY3VycmVudFN0eWxlLCB0
YXJnZXRTdHlsZSwgcmVzdWx0U3R5bGUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0z
MTIsNyArMzEyLDcgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gQ29tcG9zaXRlQW5pbWF0aW9u
OjpnZXRBbmltYXRlZFN0eWxlKCkgY29uc3QKICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHJlc3Vs
dFN0eWxlOwogICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IG1fdHJhbnNpdGlvbnMuZW5kKCk7CiAgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25z
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7Ci0gICAgICAgIGlmIChJbXBsaWNpdEFuaW1hdGlvbiogaW1wbGljaXRBbmltYXRp
b24gPSBpdC0+c2Vjb25kLmdldCgpKQorICAgICAgICBpZiAoSW1wbGljaXRBbmltYXRpb24qIGlt
cGxpY2l0QW5pbWF0aW9uID0gaXQtPnZhbHVlLmdldCgpKQogICAgICAgICAgICAgaW1wbGljaXRB
bmltYXRpb24tPmdldEFuaW1hdGVkU3R5bGUocmVzdWx0U3R5bGUpOwogICAgIH0KIApAQCAtMzMz
LDcgKzMzMyw3IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpzZXRBbmltYXRpbmcoYm9vbCBh
bmltYXRpbmcpCiAgICAgaWYgKCFtX3RyYW5zaXRpb25zLmlzRW1wdHkoKSkgewogICAgICAgICBD
U1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciB0cmFuc2l0aW9uc0VuZCA9
IG1fdHJhbnNpdGlvbnMuZW5kKCk7CiAgICAgICAgIGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9u
c01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IHRy
YW5zaXRpb25zRW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogdHJh
bnNpdGlvbiA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlv
biogdHJhbnNpdGlvbiA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIHRyYW5zaXRpb24t
PnNldEFuaW1hdGluZyhhbmltYXRpbmcpOwogICAgICAgICB9CiAgICAgfQpAQCAtMzQxLDcgKzM0
MSw3IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpzZXRBbmltYXRpbmcoYm9vbCBhbmltYXRp
bmcpCiAgICAgICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsKICAg
ICAgICAgQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1f
a2V5ZnJhbWVBbmltYXRpb25zLmVuZCgpOwogICAgICAgICBmb3IgKEFuaW1hdGlvbk5hbWVNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0g
YW5pbWF0aW9uc0VuZDsgKytpdCkgewotICAgICAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24qIGFu
aW0gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24qIGFu
aW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBhbmltLT5zZXRBbmltYXRpbmcoYW5p
bWF0aW5nKTsKICAgICAgICAgfQogICAgIH0KQEAgLTM1Niw3ICszNTYsNyBAQCBkb3VibGUgQ29t
cG9zaXRlQW5pbWF0aW9uOjp0aW1lVG9OZXh0U2VydmljZSgpIGNvbnN0CiAgICAgaWYgKCFtX3Ry
YW5zaXRpb25zLmlzRW1wdHkoKSkgewogICAgICAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFw
Ojpjb25zdF9pdGVyYXRvciB0cmFuc2l0aW9uc0VuZCA9IG1fdHJhbnNpdGlvbnMuZW5kKCk7CiAg
ICAgICAgIGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IHRyYW5zaXRpb25zRW5kOyArK2l0KSB7Ci0g
ICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogdHJhbnNpdGlvbiA9IGl0LT5zZWNvbmQuZ2V0
KCk7CisgICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogdHJhbnNpdGlvbiA9IGl0LT52YWx1
ZS5nZXQoKTsKICAgICAgICAgICAgIGRvdWJsZSB0ID0gdHJhbnNpdGlvbiA/IHRyYW5zaXRpb24t
PnRpbWVUb05leHRTZXJ2aWNlKCkgOiAtMTsKICAgICAgICAgICAgIGlmICh0IDwgbWluVCB8fCBt
aW5UID09IC0xKQogICAgICAgICAgICAgICAgIG1pblQgPSB0OwpAQCAtMzY4LDcgKzM2OCw3IEBA
IGRvdWJsZSBDb21wb3NpdGVBbmltYXRpb246OnRpbWVUb05leHRTZXJ2aWNlKCkgY29uc3QKICAg
ICAgICAgbV9rZXlmcmFtZUFuaW1hdGlvbnMuY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgICAgICBB
bmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBhbmltYXRpb25zRW5kID0gbV9rZXlmcmFt
ZUFuaW1hdGlvbnMuZW5kKCk7CiAgICAgICAgIGZvciAoQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBhbmltYXRp
b25zRW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBLZXlmcmFtZUFuaW1hdGlvbiogYW5pbWF0aW9u
ID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgIEtleWZyYW1lQW5pbWF0aW9uKiBhbmlt
YXRpb24gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBkb3VibGUgdCA9IGFuaW1hdGlv
biA/IGFuaW1hdGlvbi0+dGltZVRvTmV4dFNlcnZpY2UoKSA6IC0xOwogICAgICAgICAgICAgaWYg
KHQgPCBtaW5UIHx8IG1pblQgPT0gLTEpCiAgICAgICAgICAgICAgICAgbWluVCA9IHQ7CkBAIC0z
OTAsNyArMzkwLDcgQEAgUGFzc1JlZlB0cjxLZXlmcmFtZUFuaW1hdGlvbj4gQ29tcG9zaXRlQW5p
bWF0aW9uOjpnZXRBbmltYXRpb25Gb3JQcm9wZXJ0eShDU1NQcm8KICAgICAgICAgbV9rZXlmcmFt
ZUFuaW1hdGlvbnMuY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgICAgICBBbmltYXRpb25OYW1lTWFw
Ojpjb25zdF9pdGVyYXRvciBhbmltYXRpb25zRW5kID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuZW5k
KCk7CiAgICAgICAgIGZvciAoQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
X2tleWZyYW1lQW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBhbmltYXRpb25zRW5kOyArK2l0KSB7
Ci0gICAgICAgICAgICBSZWZQdHI8S2V5ZnJhbWVBbmltYXRpb24+IGFuaW0gPSBpdC0+c2Vjb25k
OworICAgICAgICAgICAgUmVmUHRyPEtleWZyYW1lQW5pbWF0aW9uPiBhbmltID0gaXQtPnZhbHVl
OwogICAgICAgICAgICAgaWYgKGFuaW0tPmhhc0FuaW1hdGlvbkZvclByb3BlcnR5KHByb3BlcnR5
KSkKICAgICAgICAgICAgICAgICByZXR2YWwgPSBhbmltOwogICAgICAgICB9CkBAIC00MTAsMTQg
KzQxMCwxNCBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6c3VzcGVuZEFuaW1hdGlvbnMoKQog
ICAgICAgICBtX2tleWZyYW1lQW5pbWF0aW9ucy5jaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgICAg
IEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGFuaW1hdGlvbnNFbmQgPSBtX2tleWZy
YW1lQW5pbWF0aW9ucy5lbmQoKTsKICAgICAgICAgZm9yIChBbmltYXRpb25OYW1lTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGFuaW1h
dGlvbnNFbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGlmIChLZXlmcmFtZUFuaW1hdGlvbiogYW5p
bSA9IGl0LT5zZWNvbmQuZ2V0KCkpCisgICAgICAgICAgICBpZiAoS2V5ZnJhbWVBbmltYXRpb24q
IGFuaW0gPSBpdC0+dmFsdWUuZ2V0KCkpCiAgICAgICAgICAgICAgICAgYW5pbS0+dXBkYXRlUGxh
eVN0YXRlKEFuaW1QbGF5U3RhdGVQYXVzZWQpOwogICAgICAgICB9CiAgICAgfQogICAgIGlmICgh
bV90cmFuc2l0aW9ucy5pc0VtcHR5KCkpIHsKICAgICAgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9u
c01hcDo6Y29uc3RfaXRlcmF0b3IgdHJhbnNpdGlvbnNFbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgp
OwogICAgICAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSB0cmFuc2l0aW9uc0VuZDsgKytpdCkg
ewotICAgICAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kLmdldCgp
OworICAgICAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7
CiAgICAgICAgICAgICBpZiAoYW5pbSAmJiBhbmltLT5oYXNTdHlsZSgpKQogICAgICAgICAgICAg
ICAgIGFuaW0tPnVwZGF0ZVBsYXlTdGF0ZShBbmltUGxheVN0YXRlUGF1c2VkKTsKICAgICAgICAg
fQpAQCAtNDM1LDcgKzQzNSw3IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpyZXN1bWVBbmlt
YXRpb25zKCkKICAgICAgICAgbV9rZXlmcmFtZUFuaW1hdGlvbnMuY2hlY2tDb25zaXN0ZW5jeSgp
OwogICAgICAgICBBbmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBhbmltYXRpb25zRW5k
ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuZW5kKCk7CiAgICAgICAgIGZvciAoQW5pbWF0aW9uTmFt
ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5iZWdpbigpOyBp
dCAhPSBhbmltYXRpb25zRW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBLZXlmcmFtZUFuaW1hdGlv
biogYW5pbSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBLZXlmcmFtZUFuaW1hdGlv
biogYW5pbSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGlmIChhbmltICYmIGFuaW0t
PnBsYXlTdGF0ZVBsYXlpbmcoKSkKICAgICAgICAgICAgICAgICBhbmltLT51cGRhdGVQbGF5U3Rh
dGUoQW5pbVBsYXlTdGF0ZVBsYXlpbmcpOwogICAgICAgICB9CkBAIC00NDQsNyArNDQ0LDcgQEAg
dm9pZCBDb21wb3NpdGVBbmltYXRpb246OnJlc3VtZUFuaW1hdGlvbnMoKQogICAgIGlmICghbV90
cmFuc2l0aW9ucy5pc0VtcHR5KCkpIHsKICAgICAgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01h
cDo6Y29uc3RfaXRlcmF0b3IgdHJhbnNpdGlvbnNFbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOwog
ICAgICAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSB0cmFuc2l0aW9uc0VuZDsgKytpdCkgewot
ICAgICAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kLmdldCgpOwor
ICAgICAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAg
ICAgICAgICAgICBpZiAoYW5pbSAmJiBhbmltLT5oYXNTdHlsZSgpKQogICAgICAgICAgICAgICAg
IGFuaW0tPnVwZGF0ZVBsYXlTdGF0ZShBbmltUGxheVN0YXRlUGxheWluZyk7CiAgICAgICAgIH0K
QEAgLTQ1Niw3ICs0NTYsNyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6b3ZlcnJpZGVJbXBs
aWNpdEFuaW1hdGlvbnMoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSkKICAgICBDU1NQcm9wZXJ0eVRy
YW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOwog
ICAgIGlmICghbV90cmFuc2l0aW9ucy5pc0VtcHR5KCkpIHsKICAgICAgICAgZm9yIChDU1NQcm9w
ZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiog
YW5pbSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiog
YW5pbSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGlmIChhbmltICYmIGFuaW0tPmFu
aW1hdGluZ1Byb3BlcnR5KCkgPT0gcHJvcGVydHkpCiAgICAgICAgICAgICAgICAgYW5pbS0+c2V0
T3ZlcnJpZGRlbih0cnVlKTsKICAgICAgICAgfQpAQCAtNDY4LDcgKzQ2OCw3IEBAIHZvaWQgQ29t
cG9zaXRlQW5pbWF0aW9uOjpyZXN1bWVPdmVycmlkZGVuSW1wbGljaXRBbmltYXRpb25zKENTU1By
b3BlcnR5SUQgcHJvcGVyCiAgICAgaWYgKCFtX3RyYW5zaXRpb25zLmlzRW1wdHkoKSkgewogICAg
ICAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3Ry
YW5zaXRpb25zLmVuZCgpOwogICAgICAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKLSAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZC5n
ZXQoKTsKKyAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnZhbHVlLmdl
dCgpOwogICAgICAgICAgICAgaWYgKGFuaW0gJiYgYW5pbS0+YW5pbWF0aW5nUHJvcGVydHkoKSA9
PSBwcm9wZXJ0eSkKICAgICAgICAgICAgICAgICBhbmltLT5zZXRPdmVycmlkZGVuKGZhbHNlKTsK
ICAgICAgICAgfQpAQCAtNDgxLDcgKzQ4MSw3IEBAIGJvb2wgQ29tcG9zaXRlQW5pbWF0aW9uOjpp
c0FuaW1hdGluZ1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHksIGJvb2wgYWNjZWxlCiAg
ICAgICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsKICAgICAgICAg
QW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fa2V5ZnJh
bWVBbmltYXRpb25zLmVuZCgpOwogICAgICAgICBmb3IgKEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gYW5pbWF0
aW9uc0VuZDsgKytpdCkgewotICAgICAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24qIGFuaW0gPSBp
dC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24qIGFuaW0gPSBp
dC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoYW5pbSAmJiBhbmltLT5pc0FuaW1hdGlu
Z1Byb3BlcnR5KHByb3BlcnR5LCBhY2NlbGVyYXRlZE9ubHksIGlzUnVubmluZ05vdykpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTQ5MCw3ICs0OTAsNyBAQCBi
b29sIENvbXBvc2l0ZUFuaW1hdGlvbjo6aXNBbmltYXRpbmdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlE
IHByb3BlcnR5LCBib29sIGFjY2VsZQogICAgIGlmICghbV90cmFuc2l0aW9ucy5pc0VtcHR5KCkp
IHsKICAgICAgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgdHJh
bnNpdGlvbnNFbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOwogICAgICAgICBmb3IgKENTU1Byb3Bl
cnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdp
bigpOyBpdCAhPSB0cmFuc2l0aW9uc0VuZDsgKytpdCkgewotICAgICAgICAgICAgSW1wbGljaXRB
bmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgSW1wbGljaXRB
bmltYXRpb24qIGFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoYW5pbSAm
JiBhbmltLT5pc0FuaW1hdGluZ1Byb3BlcnR5KHByb3BlcnR5LCBhY2NlbGVyYXRlZE9ubHksIGlz
UnVubmluZ05vdykpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAg
LTU1Niw3ICs1NTYsNyBAQCB1bnNpZ25lZCBDb21wb3NpdGVBbmltYXRpb246Om51bWJlck9mQWN0
aXZlQW5pbWF0aW9ucygpIGNvbnN0CiAgICAgICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zLmNoZWNr
Q29uc2lzdGVuY3koKTsKICAgICAgICAgQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3Ig
YW5pbWF0aW9uc0VuZCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmVuZCgpOwogICAgICAgICBmb3Ig
KEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlv
bnMuYmVnaW4oKTsgaXQgIT0gYW5pbWF0aW9uc0VuZDsgKytpdCkgewotICAgICAgICAgICAgS2V5
ZnJhbWVBbmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgS2V5
ZnJhbWVBbmltYXRpb24qIGFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBpZiAo
YW5pbS0+cnVubmluZygpKQogICAgICAgICAgICAgICAgICsrY291bnQ7CiAgICAgICAgIH0KQEAg
LTU2NSw3ICs1NjUsNyBAQCB1bnNpZ25lZCBDb21wb3NpdGVBbmltYXRpb246Om51bWJlck9mQWN0
aXZlQW5pbWF0aW9ucygpIGNvbnN0CiAgICAgaWYgKCFtX3RyYW5zaXRpb25zLmlzRW1wdHkoKSkg
ewogICAgICAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciB0cmFu
c2l0aW9uc0VuZCA9IG1fdHJhbnNpdGlvbnMuZW5kKCk7CiAgICAgICAgIGZvciAoQ1NTUHJvcGVy
dHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2lu
KCk7IGl0ICE9IHRyYW5zaXRpb25zRW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBJbXBsaWNpdEFu
aW1hdGlvbiogYW5pbSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBJbXBsaWNpdEFu
aW1hdGlvbiogYW5pbSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGlmIChhbmltLT5y
dW5uaW5nKCkpCiAgICAgICAgICAgICAgICAgKytjb3VudDsKICAgICAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGFuZ3VhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vTGFuZ3VhZ2UuY3BwCmluZGV4IDQ3ZjA5ZjYwOTI5OTcxZTMxNzM1NmU0OWZiY2I2
M2I1ZGI0MTdmMzcuLmIzZjk3YmVjOTcyMTViODA5YjM0MWVhYzAxYTYxN2U4MWFhN2EwNmUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xhbmd1YWdlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9MYW5ndWFnZS5jcHAKQEAgLTUzLDcgKzUzLDcgQEAgdm9pZCBs
YW5ndWFnZURpZENoYW5nZSgpCiB7CiAgICAgT2JzZXJ2ZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IG9i
c2VydmVyTWFwKCkuZW5kKCk7CiAgICAgZm9yIChPYnNlcnZlck1hcDo6aXRlcmF0b3IgaXRlciA9
IG9ic2VydmVyTWFwKCkuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikKLSAgICAgICAgaXRl
ci0+c2Vjb25kKGl0ZXItPmZpcnN0KTsKKyAgICAgICAgaXRlci0+dmFsdWUoaXRlci0+a2V5KTsK
IH0KIAogU3RyaW5nIGRlZmF1bHRMYW5ndWFnZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L01JTUVUeXBlUmVnaXN0cnkuY3BwCmluZGV4IDI4OWM2Njk5YjA1ZjQ5ZmI3MTdjMGM0MDNjMmI1
NzFiYmM5YzI4YjguLjhmNTIxMDNjMmU5Y2FlOTdkYTQ0ZDM0YzNiMjI4Mjk1Zjk2OGFkY2EgMTAw
NzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuY3BwCkBAIC02OTIs
NyArNjkyLDcgQEAgU3RyaW5nIE1JTUVUeXBlUmVnaXN0cnk6OmdldE5vcm1hbGl6ZWRNSU1FVHlw
ZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQogICAgIE1JTUVUeXBlQXNzb2NpYXRpb25NYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbWltZVR5cGVBc3NvY2lhdGlvbk1hcCgpLmZpbmQobWltZVR5cGUp
OwogCiAgICAgaWYgKGl0ICE9IG1pbWVUeXBlQXNzb2NpYXRpb25NYXAoKS5lbmQoKSkKLSAgICAg
ICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBpdC0+dmFsdWU7CiAjZW5kaWYK
ICAgICByZXR1cm4gbWltZVR5cGU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9IUlRGRWxldmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1
ZGlvL0hSVEZFbGV2YXRpb24uY3BwCmluZGV4IDI1ZTQ1ODk2MjVkY2NmZDdmNGQzYjU0YWY3NTMy
ZDhlODNmMjYyNzguLmNmZTEzZWQ4NTMwNmI1MTcxMmFhMzA3NGI5YzhkYzM5MmNkNDY1MmQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0hSVEZFbGV2YXRpb24uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0hSVEZFbGV2YXRpb24uY3BwCkBA
IC03OSw3ICs3OSw3IEBAIHN0YXRpYyBBdWRpb0J1cyogZ2V0Q29uY2F0ZW5hdGVkSW1wdWxzZVJl
c3BvbnNlc0ZvclN1YmplY3QoY29uc3QgU3RyaW5nJiBzdWJqZWN0CiAgICAgICAgIGJ1cyA9IGNv
bmNhdGVuYXRlZEltcHVsc2VSZXNwb25zZXMubGVha1B0cigpOwogICAgICAgICBhdWRpb0J1c01h
cC5zZXQoc3ViamVjdE5hbWUsIGJ1cyk7CiAgICAgfSBlbHNlCi0gICAgICAgIGJ1cyA9IGl0ZXJh
dG9yLT5zZWNvbmQ7CisgICAgICAgIGJ1cyA9IGl0ZXJhdG9yLT52YWx1ZTsKIAogICAgIHNpemVf
dCByZXNwb25zZUxlbmd0aCA9IGJ1cy0+bGVuZ3RoKCk7CiAgICAgc2l6ZV90IGV4cGVjdGVkTGVu
Z3RoID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihUb3RhbE51bWJlck9mUmVzcG9uc2VzICogUmVzcG9u
c2VGcmFtZVNpemUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2ti
ZXJyeS9Db29raWVNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVy
cnkvQ29va2llTWFuYWdlci5jcHAKaW5kZXggZGQ5MzcwMjIzMTQzNTAwNjRhMmIxOGE5ZWU5YzY1
ZjI4NDllMmFiOC4uNmRiZjkxNjJiZjYxYTE3MWI0NzlhNjIxZGQ0NzA5YTZiYmFjYWNiZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9Db29raWVNYW5hZ2Vy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0Nvb2tpZU1hbmFn
ZXIuY3BwCkBAIC0xNjcsNyArMTY3LDcgQEAgU3RyaW5nIENvb2tpZU1hbmFnZXI6OmdlbmVyYXRl
SHRtbEZyYWdtZW50Rm9yQ29va2llcygpCiAKICAgICBWZWN0b3I8UGFyc2VkQ29va2llKj4gY29v
a2llQ2FuZGlkYXRlczsKICAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBDb29raWVNYXAqPjo6aXRl
cmF0b3IgaXQgPSBtX21hbmFnZXJNYXAuYmVnaW4oKTsgaXQgIT0gbV9tYW5hZ2VyTWFwLmVuZCgp
OyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5nZXRBbGxDaGlsZENvb2tpZXMoJmNvb2tpZUNh
bmRpZGF0ZXMpOworICAgICAgICBpdC0+dmFsdWUtPmdldEFsbENoaWxkQ29va2llcygmY29va2ll
Q2FuZGlkYXRlcyk7CiAKICAgICBTdHJpbmcgcmVzdWx0OwogICAgIFBhcnNlZENvb2tpZSogY29v
a2llID0gMDsKQEAgLTI4Niw3ICsyODYsNyBAQCB2b2lkIENvb2tpZU1hbmFnZXI6OnJlbW92ZUFs
bENvb2tpZXMoQmFja2luZ1N0b3JlUmVtb3ZhbFBvbGljeSBiYWNraW5nU3RvcmVSZW1vdgogICAg
IEhhc2hNYXA8U3RyaW5nLCBDb29raWVNYXAqPjo6aXRlcmF0b3IgZmlyc3QgPSBtX21hbmFnZXJN
YXAuYmVnaW4oKTsKICAgICBIYXNoTWFwPFN0cmluZywgQ29va2llTWFwKj46Oml0ZXJhdG9yIGVu
ZCA9IG1fbWFuYWdlck1hcC5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBDb29raWVN
YXAqPjo6aXRlcmF0b3IgaXQgPSBmaXJzdDsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+
c2Vjb25kLT5kZWxldGVBbGxDb29raWVzQW5kRG9tYWlucygpOworICAgICAgICBpdC0+dmFsdWUt
PmRlbGV0ZUFsbENvb2tpZXNBbmREb21haW5zKCk7CiAKICAgICBpZiAoYmFja2luZ1N0b3JlUmVt
b3ZhbCA9PSBSZW1vdmVGcm9tQmFja2luZ1N0b3JlKQogICAgICAgICBtX2Nvb2tpZUJhY2tpbmdT
dG9yZS0+cmVtb3ZlQWxsKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9i
bGFja2JlcnJ5L0Nvb2tpZU1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2Jl
cnJ5L0Nvb2tpZU1hcC5jcHAKaW5kZXggYmJlOWE3Y2VkZjczZjcwZDUwYzRkZDA3MjRmNGE1ZDZh
MDE1YzdhOC4uYWY0ODViNTRjMjBlY2NmY2EwYWE0ZDk5NWZiNzIwYTQ1MzRkNzhhNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9Db29raWVNYXAuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvQ29va2llTWFwLmNwcApAQCAt
MTcyLDcgKzE3Miw3IEBAIFBhcnNlZENvb2tpZSogQ29va2llTWFwOjpyZW1vdmVPbGRlc3RDb29r
aWUoKQogICAgICAgICBDb29raWVMb2coIkNvb2tpZU1hcCAtIGxvb2tpbmcgaW50byBzdWJkb21h
aW5zIik7CiAKICAgICAgICAgZm9yIChIYXNoTWFwPFN0cmluZywgQ29va2llTWFwKj46Oml0ZXJh
dG9yIGl0ID0gbV9zdWJkb21haW5zLmJlZ2luKCk7IGl0ICE9IG1fc3ViZG9tYWlucy5lbmQoKTsg
KytpdCkgewotICAgICAgICAgICAgb2xkZXN0Q29va2llID0gaXQtPnNlY29uZC0+cmVtb3ZlT2xk
ZXN0Q29va2llKCk7CisgICAgICAgICAgICBvbGRlc3RDb29raWUgPSBpdC0+dmFsdWUtPnJlbW92
ZU9sZGVzdENvb2tpZSgpOwogICAgICAgICAgICAgaWYgKG9sZGVzdENvb2tpZSkKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMjE0LDcgKzIxNCw3IEBAIHZvaWQgQ29va2ll
TWFwOjpnZXRBbGxDaGlsZENvb2tpZXMoVmVjdG9yPFBhcnNlZENvb2tpZSo+KiBzdGFja09mQ29v
a2llcykKICAgICBDb29raWVMb2coIkNvb2tpZU1hcCAtIGdldEFsbENoaWxkQ29va2llcyBpbiBN
YXAgLSAlcyIsIGdldE5hbWUoKS51dGY4KCkuZGF0YSgpKTsKICAgICBnZXRBbGxDb29raWVzKHN0
YWNrT2ZDb29raWVzKTsKICAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBDb29raWVNYXAqPjo6aXRl
cmF0b3IgaXQgPSBtX3N1YmRvbWFpbnMuYmVnaW4oKTsgaXQgIT0gbV9zdWJkb21haW5zLmVuZCgp
OyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5nZXRBbGxDaGlsZENvb2tpZXMoc3RhY2tPZkNv
b2tpZXMpOworICAgICAgICBpdC0+dmFsdWUtPmdldEFsbENoaWxkQ29va2llcyhzdGFja09mQ29v
a2llcyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2NmL0JpbmFyeVByb3BlcnR5TGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jZi9CaW5hcnlQcm9wZXJ0eUxpc3QuY3BwCmluZGV4IGJlYzJlYzk1MDY0NGM5
OTNiZTg5YWIzNWUwYjg2N2E4YjYxMjYwODguLmIyN2Q3ZDdjZDNjMTQzODYwZWM2NThiZWViMmQ2
ZTc3MmU5NDJjNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL0JpbmFy
eVByb3BlcnR5TGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2YvQmluYXJ5
UHJvcGVydHlMaXN0LmNwcApAQCAtMjI5LDcgKzIyOSw3IEBAIHZvaWQgQmluYXJ5UHJvcGVydHlM
aXN0UGxhbjo6d3JpdGVJbnRlZ2VyQXJyYXkoY29uc3QgaW50KiBpbnRlZ2Vycywgc2l6ZV90IHNp
emUpCiAgICAgICAgIHJldHVybjsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsr
aSkKICAgICAgICAgd3JpdGVJbnRlZ2VyKGludGVnZXJzW2ldKTsKLSAgICBhZGRSZXN1bHQuaXRl
cmF0b3ItPnNlY29uZCA9IG1fY3VycmVudE9iamVjdFJlZmVyZW5jZSsrOworICAgIGFkZFJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUgPSBtX2N1cnJlbnRPYmplY3RSZWZlcmVuY2UrKzsKICAgICB3cml0
ZUFycmF5T2JqZWN0KHNpemUpOwogICAgIG1fY3VycmVudEFnZ3JlZ2F0ZVNpemUgPSBzYXZlZEFn
Z3JlZ2F0ZVNpemU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9zdXBwb3J0L1dlYkhUVFBMb2FkSW5mby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jaHJvbWl1bS9zdXBwb3J0L1dlYkhUVFBMb2FkSW5mby5jcHAKaW5kZXggNzc2MmZkOGM0OWZk
YTI0MmEzNzAyNmM2ZGZlNjc3ZjIzMDUwZTI5ZC4uNjYzNzFiNGFiMWQyZGQyNTRmYmJkZDdhOWRl
NzJlZDQxMTlkNTY2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vc3VwcG9ydC9XZWJIVFRQTG9hZEluZm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViSFRUUExvYWRJbmZvLmNwcApAQCAtMTA2LDcgKzEwNiw3
IEBAIHN0YXRpYyB2b2lkIGFkZEhlYWRlcihIVFRQSGVhZGVyTWFwKiBtYXAsIGNvbnN0IFdlYlN0
cmluZyYgbmFtZSwgY29uc3QgV2ViU3RyaW5nCiAgICAgSFRUUEhlYWRlck1hcDo6QWRkUmVzdWx0
IHJlc3VsdCA9IG1hcC0+YWRkKG5hbWUsIHZhbHVlKTsKICAgICAvLyBJdCBpcyBpbXBvcnRhbnQg
dGhhdCB2YWx1ZXMgYXJlIHNlcGFyYXRlZCBieSAnXG4nLCBub3QgY29tbWEsIG90aGVyd2lzZSBT
ZXQtQ29va2llIGhlYWRlciBpcyBub3QgcGFyc2VhYmxlLgogICAgIGlmICghcmVzdWx0LmlzTmV3
RW50cnkpCi0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kICs9ICJcbiIgKyBTdHJpbmco
dmFsdWUpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlICs9ICJcbiIgKyBTdHJpbmco
dmFsdWUpOwogfQogCiB2b2lkIFdlYkhUVFBMb2FkSW5mbzo6YWRkUmVxdWVzdEhlYWRlcihjb25z
dCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYlN0cmluZyYgdmFsdWUpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlVSTFJlcXVlc3QuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJVUkxSZXF1ZXN0
LmNwcAppbmRleCBmNDM3YjUxNjQzYjIzNGI2MDlmNzcyNWZiOGQ3NmQ3MzFmNTYxN2VhLi5lMzg1
MTAxNGZjZGQ0NWJmYWNiNDhiOTdiYmE3NmUzMWQ4YjRhMDE1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlVSTFJlcXVlc3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVVJMUmVxdWVzdC5j
cHAKQEAgLTE5NSw3ICsxOTUsNyBAQCB2b2lkIFdlYlVSTFJlcXVlc3Q6OnZpc2l0SFRUUEhlYWRl
ckZpZWxkcyhXZWJIVFRQSGVhZGVyVmlzaXRvciogdmlzaXRvcikgY29uc3QKIHsKICAgICBjb25z
dCBIVFRQSGVhZGVyTWFwJiBtYXAgPSBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXF1ZXN0LT5odHRw
SGVhZGVyRmllbGRzKCk7CiAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IG1hcC5iZWdpbigpOyBpdCAhPSBtYXAuZW5kKCk7ICsraXQpCi0gICAgICAgIHZpc2l0b3It
PnZpc2l0SGVhZGVyKGl0LT5maXJzdCwgaXQtPnNlY29uZCk7CisgICAgICAgIHZpc2l0b3ItPnZp
c2l0SGVhZGVyKGl0LT5rZXksIGl0LT52YWx1ZSk7CiB9CiAKIFdlYkhUVFBCb2R5IFdlYlVSTFJl
cXVlc3Q6Omh0dHBCb2R5KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVVJMUmVzcG9uc2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJVUkxSZXNwb25zZS5jcHAKaW5kZXggMWY5Yjk2
ODYwZTBiYTJlOTM4NWJlNTU1OTVkYTZlMDlmNTE1MTNkNC4uODA1NjY2NDkxYjM1NDhjNmI0OTE0
OWIxZmE3NTI1YWNiZDMyZDhkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y2hyb21pdW0vc3VwcG9ydC9XZWJVUkxSZXNwb25zZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJVUkxSZXNwb25zZS5jcHAKQEAgLTI2MSw3ICsy
NjEsNyBAQCB2b2lkIFdlYlVSTFJlc3BvbnNlOjphZGRIVFRQSGVhZGVyRmllbGQoY29uc3QgV2Vi
U3RyaW5nJiBuYW1lLCBjb25zdCBXZWJTdHJpbmcmCiAgICAgSFRUUEhlYWRlck1hcDo6QWRkUmVz
dWx0IHJlc3VsdCA9CiAgICAgICAgIGNvbnN0X2Nhc3Q8SFRUUEhlYWRlck1hcCo+KCZtYXApLT5h
ZGQobmFtZSwgdmFsdWVTdHIpOwogICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAg
IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kICs9ICIsICIgKyB2YWx1ZVN0cjsKKyAgICAgICAgcmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZSArPSAiLCAiICsgdmFsdWVTdHI7CiB9CiAKIHZvaWQgV2ViVVJM
UmVzcG9uc2U6OmNsZWFySFRUUEhlYWRlckZpZWxkKGNvbnN0IFdlYlN0cmluZyYgbmFtZSkKQEAg
LTI3NSw3ICsyNzUsNyBAQCB2b2lkIFdlYlVSTFJlc3BvbnNlOjp2aXNpdEhUVFBIZWFkZXJGaWVs
ZHMoV2ViSFRUUEhlYWRlclZpc2l0b3IqIHZpc2l0b3IpIGNvbnN0CiB7CiAgICAgY29uc3QgSFRU
UEhlYWRlck1hcCYgbWFwID0gbV9wcml2YXRlLT5tX3Jlc291cmNlUmVzcG9uc2UtPmh0dHBIZWFk
ZXJGaWVsZHMoKTsKICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bWFwLmJlZ2luKCk7IGl0ICE9IG1hcC5lbmQoKTsgKytpdCkKLSAgICAgICAgdmlzaXRvci0+dmlz
aXRIZWFkZXIoaXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsKKyAgICAgICAgdmlzaXRvci0+dmlzaXRI
ZWFkZXIoaXQtPmtleSwgaXQtPnZhbHVlKTsKIH0KIAogZG91YmxlIFdlYlVSTFJlc3BvbnNlOjps
YXN0TW9kaWZpZWREYXRlKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5UmVmcmVzaE1vbml0b3IuY3BwCmluZGV4IDMwZDhkM2Q0
MWUyMmJkZGExMDc2NGQ4ZjZhMWVmNDAzM2E2MjlkYWEuLmY4OTEwM2Y5YmUyYjVlZWRkMDdmYTc0
MTFmZTI3OTFhNjIxODFlZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9yLmNwcApAQCAtMTM3LDcgKzEzNyw3
IEBAIERpc3BsYXlSZWZyZXNoTW9uaXRvciogRGlzcGxheVJlZnJlc2hNb25pdG9yTWFuYWdlcjo6
ZW5zdXJlTW9uaXRvckZvckNsaWVudChEaXNwCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAg
fQogCi0gICAgcmV0dXJuIGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgcmV0dXJuIGl0LT52YWx1ZS5n
ZXQoKTsKIH0KIAogdm9pZCBEaXNwbGF5UmVmcmVzaE1vbml0b3JNYW5hZ2VyOjpyZWdpc3RlckNs
aWVudChEaXNwbGF5UmVmcmVzaE1vbml0b3JDbGllbnQqIGNsaWVudCkKQEAgLTE1Nyw3ICsxNTcs
NyBAQCB2b2lkIERpc3BsYXlSZWZyZXNoTW9uaXRvck1hbmFnZXI6OnVucmVnaXN0ZXJDbGllbnQo
RGlzcGxheVJlZnJlc2hNb25pdG9yQ2xpZW50KgogICAgIGlmIChpdCA9PSBtX21vbml0b3JzLmVu
ZCgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgRGlzcGxheVJlZnJlc2hNb25pdG9yKiBt
b25pdG9yID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICBEaXNwbGF5UmVmcmVzaE1vbml0b3IqIG1v
bml0b3IgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgaWYgKG1vbml0b3ItPnJlbW92ZUNsaWVudChj
bGllbnQpKSB7CiAgICAgICAgIGlmICghbW9uaXRvci0+aGFzQ2xpZW50cygpKQogICAgICAgICAg
ICAgbV9tb25pdG9ycy5yZW1vdmUoaXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRDYWNoZS5jcHAKaW5kZXggYjQ2MjYzYTk2NjMyMzlkMmZjZmFkOGJiYmYzMjlj
ZDU3ZDI2YjRlZC4uMGJjMTY0ZTM1MWQ1ZjE4MWE1YmZiNDQ5MWZmMGE1YWIwMWFiZWFhYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCkBAIC0y
MTEsNyArMjExLDcgQEAgRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpnZXRDYWNoZWRGb250
UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm8KICAgICAgICAgZ0ZvbnRQbGF0
Zm9ybURhdGFDYWNoZS0+c2V0KGtleSwgcmVzdWx0KTsKICAgICAgICAgZm91bmRSZXN1bHQgPSBy
ZXN1bHQ7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgcmVzdWx0ID0gaXQtPnNlY29uZDsKKyAgICAg
ICAgcmVzdWx0ID0gaXQtPnZhbHVlOwogICAgICAgICBmb3VuZFJlc3VsdCA9IHRydWU7CiAgICAg
fQogCkBAIC0zMzIsMjAgKzMzMiwyMCBAQCBTaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRD
YWNoZWRGb250RGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhKiBwbGF0Zm9ybURhdAogICAgICAg
ICByZXR1cm4gbmV3VmFsdWUuZmlyc3Q7CiAgICAgfQogCi0gICAgaWYgKCFyZXN1bHQuZ2V0KCkt
PnNlY29uZC5zZWNvbmQpIHsKLSAgICAgICAgQVNTRVJUKGdJbmFjdGl2ZUZvbnREYXRhLT5jb250
YWlucyhyZXN1bHQuZ2V0KCktPnNlY29uZC5maXJzdCkpOwotICAgICAgICBnSW5hY3RpdmVGb250
RGF0YS0+cmVtb3ZlKHJlc3VsdC5nZXQoKS0+c2Vjb25kLmZpcnN0KTsKKyAgICBpZiAoIXJlc3Vs
dC5nZXQoKS0+dmFsdWUuc2Vjb25kKSB7CisgICAgICAgIEFTU0VSVChnSW5hY3RpdmVGb250RGF0
YS0+Y29udGFpbnMocmVzdWx0LmdldCgpLT52YWx1ZS5maXJzdCkpOworICAgICAgICBnSW5hY3Rp
dmVGb250RGF0YS0+cmVtb3ZlKHJlc3VsdC5nZXQoKS0+dmFsdWUuZmlyc3QpOwogICAgIH0KIAog
ICAgIGlmIChzaG91bGRSZXRhaW4gPT0gUmV0YWluKQotICAgICAgICByZXN1bHQuZ2V0KCktPnNl
Y29uZC5zZWNvbmQrKzsKLSAgICBlbHNlIGlmICghcmVzdWx0LmdldCgpLT5zZWNvbmQuc2Vjb25k
KSB7CisgICAgICAgIHJlc3VsdC5nZXQoKS0+dmFsdWUuc2Vjb25kKys7CisgICAgZWxzZSBpZiAo
IXJlc3VsdC5nZXQoKS0+dmFsdWUuc2Vjb25kKSB7CiAgICAgICAgIC8vIElmIHNob3VsZFJldGFp
biBpcyBEb05vdFJldGFpbiBhbmQgY291bnQgaXMgMCwgd2Ugd2FudCB0byByZW1vdmUgdGhlIGZv
bnREYXRhIGZyb20gCiAgICAgICAgIC8vIGdJbmFjdGl2ZUZvbnREYXRhIChhYm92ZSkgYW5kIHJl
LWFkZCBoZXJlIHRvIHVwZGF0ZSBMUlUgcG9zaXRpb24uCi0gICAgICAgIGdJbmFjdGl2ZUZvbnRE
YXRhLT5hZGQocmVzdWx0LmdldCgpLT5zZWNvbmQuZmlyc3QpOworICAgICAgICBnSW5hY3RpdmVG
b250RGF0YS0+YWRkKHJlc3VsdC5nZXQoKS0+dmFsdWUuZmlyc3QpOwogICAgIH0KIAotICAgIHJl
dHVybiByZXN1bHQuZ2V0KCktPnNlY29uZC5maXJzdDsKKyAgICByZXR1cm4gcmVzdWx0LmdldCgp
LT52YWx1ZS5maXJzdDsKIH0KIAogU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Tm9uUmV0
YWluZWRMYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERl
c2NyaXB0aW9uKQpAQCAtMzYxLDggKzM2MSw4IEBAIHZvaWQgRm9udENhY2hlOjpyZWxlYXNlRm9u
dERhdGEoY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKQogICAgIEZvbnREYXRhQ2FjaGU6
Oml0ZXJhdG9yIGl0ID0gZ0ZvbnREYXRhQ2FjaGUtPmZpbmQoZm9udERhdGEtPnBsYXRmb3JtRGF0
YSgpKTsKICAgICBBU1NFUlQoaXQgIT0gZ0ZvbnREYXRhQ2FjaGUtPmVuZCgpKTsKIAotICAgIEFT
U0VSVChpdC0+c2Vjb25kLnNlY29uZCk7Ci0gICAgaWYgKCEtLWl0LT5zZWNvbmQuc2Vjb25kKQor
ICAgIEFTU0VSVChpdC0+dmFsdWUuc2Vjb25kKTsKKyAgICBpZiAoIS0taXQtPnZhbHVlLnNlY29u
ZCkKICAgICAgICAgZ0luYWN0aXZlRm9udERhdGEtPmFkZChmb250RGF0YSk7CiB9CiAKQEAgLTQx
MCw4ICs0MTAsOCBAQCB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhKGludCBj
b3VudCkKICAgICAgICAga2V5c1RvUmVtb3ZlLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZ0ZvbnRQ
bGF0Zm9ybURhdGFDYWNoZS0+c2l6ZSgpKTsKICAgICAgICAgRm9udFBsYXRmb3JtRGF0YUNhY2hl
OjppdGVyYXRvciBwbGF0Zm9ybURhdGFFbmQgPSBnRm9udFBsYXRmb3JtRGF0YUNhY2hlLT5lbmQo
KTsKICAgICAgICAgZm9yIChGb250UGxhdGZvcm1EYXRhQ2FjaGU6Oml0ZXJhdG9yIHBsYXRmb3Jt
RGF0YSA9IGdGb250UGxhdGZvcm1EYXRhQ2FjaGUtPmJlZ2luKCk7IHBsYXRmb3JtRGF0YSAhPSBw
bGF0Zm9ybURhdGFFbmQ7ICsrcGxhdGZvcm1EYXRhKSB7Ci0gICAgICAgICAgICBpZiAocGxhdGZv
cm1EYXRhLT5zZWNvbmQgJiYgIWdGb250RGF0YUNhY2hlLT5jb250YWlucygqcGxhdGZvcm1EYXRh
LT5zZWNvbmQpKQotICAgICAgICAgICAgICAgIGtleXNUb1JlbW92ZS5hcHBlbmQocGxhdGZvcm1E
YXRhLT5maXJzdCk7CisgICAgICAgICAgICBpZiAocGxhdGZvcm1EYXRhLT52YWx1ZSAmJiAhZ0Zv
bnREYXRhQ2FjaGUtPmNvbnRhaW5zKCpwbGF0Zm9ybURhdGEtPnZhbHVlKSkKKyAgICAgICAgICAg
ICAgICBrZXlzVG9SZW1vdmUuYXBwZW5kKHBsYXRmb3JtRGF0YS0+a2V5KTsKICAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgc2l6ZV90IGtleXNUb1JlbW92ZUNvdW50ID0ga2V5c1RvUmVtb3Zl
LnNpemUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ds
eXBoUGFnZVRyZWVOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ds
eXBoUGFnZVRyZWVOb2RlLmNwcAppbmRleCA4N2U5M2ZkOThmZjhkZWYwOTQ4MTZhNTI0MzRlOTAw
NWU4OTk5NTlkLi42MzVlYzdiMjI5YWI0Y2E5OTE4YjU1ZmVkZDdmYTk4N2I0MTkyNjUxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2VUcmVlTm9k
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlVHJl
ZU5vZGUuY3BwCkBAIC03NCw3ICs3NCw3IEBAIHNpemVfdCBHbHlwaFBhZ2VUcmVlTm9kZTo6dHJl
ZUdseXBoUGFnZUNvdW50KCkKICAgICBpZiAocm9vdHMpIHsKICAgICAgICAgSGFzaE1hcDxpbnQs
IEdseXBoUGFnZVRyZWVOb2RlKj46Oml0ZXJhdG9yIGVuZCA9IHJvb3RzLT5lbmQoKTsKICAgICAg
ICAgZm9yIChIYXNoTWFwPGludCwgR2x5cGhQYWdlVHJlZU5vZGUqPjo6aXRlcmF0b3IgaXQgPSBy
b290cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgY291bnQgKz0gaXQt
PnNlY29uZC0+cGFnZUNvdW50KCk7CisgICAgICAgICAgICBjb3VudCArPSBpdC0+dmFsdWUtPnBh
Z2VDb3VudCgpOwogICAgIH0KICAgICAKICAgICBpZiAocGFnZVplcm9Sb290KQpAQCAtODgsNyAr
ODgsNyBAQCBzaXplX3QgR2x5cGhQYWdlVHJlZU5vZGU6OnBhZ2VDb3VudCgpIGNvbnN0CiAgICAg
c2l6ZV90IGNvdW50ID0gbV9wYWdlICYmIG1fcGFnZS0+b3duZXIoKSA9PSB0aGlzID8gMSA6IDA7
CiAgICAgSGFzaE1hcDxjb25zdCBGb250RGF0YSosIEdseXBoUGFnZVRyZWVOb2RlKj46OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IG1fY2hpbGRyZW4uZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPGNvbnN0
IEZvbnREYXRhKiwgR2x5cGhQYWdlVHJlZU5vZGUqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2No
aWxkcmVuLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgY291bnQgKz0gaXQtPnNl
Y29uZC0+cGFnZUNvdW50KCk7CisgICAgICAgIGNvdW50ICs9IGl0LT52YWx1ZS0+cGFnZUNvdW50
KCk7CiAKICAgICByZXR1cm4gY291bnQ7CiB9CkBAIC05OSw3ICs5OSw3IEBAIHZvaWQgR2x5cGhQ
YWdlVHJlZU5vZGU6OnBydW5lVHJlZUN1c3RvbUZvbnREYXRhKGNvbnN0IEZvbnREYXRhKiBmb250
RGF0YSkKICAgICBpZiAocm9vdHMpIHsKICAgICAgICAgSGFzaE1hcDxpbnQsIEdseXBoUGFnZVRy
ZWVOb2RlKj46Oml0ZXJhdG9yIGVuZCA9IHJvb3RzLT5lbmQoKTsKICAgICAgICAgZm9yIChIYXNo
TWFwPGludCwgR2x5cGhQYWdlVHJlZU5vZGUqPjo6aXRlcmF0b3IgaXQgPSByb290cy0+YmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgaXQtPnNlY29uZC0+cHJ1bmVDdXN0b21G
b250RGF0YShmb250RGF0YSk7CisgICAgICAgICAgICBpdC0+dmFsdWUtPnBydW5lQ3VzdG9tRm9u
dERhdGEoZm9udERhdGEpOwogICAgIH0KICAgICAKICAgICBpZiAocGFnZVplcm9Sb290KQpAQCAt
MTExLDcgKzExMSw3IEBAIHZvaWQgR2x5cGhQYWdlVHJlZU5vZGU6OnBydW5lVHJlZUZvbnREYXRh
KGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSkKICAgICBpZiAocm9vdHMpIHsKICAgICAg
ICAgSGFzaE1hcDxpbnQsIEdseXBoUGFnZVRyZWVOb2RlKj46Oml0ZXJhdG9yIGVuZCA9IHJvb3Rz
LT5lbmQoKTsKICAgICAgICAgZm9yIChIYXNoTWFwPGludCwgR2x5cGhQYWdlVHJlZU5vZGUqPjo6
aXRlcmF0b3IgaXQgPSByb290cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAg
ICAgaXQtPnNlY29uZC0+cHJ1bmVGb250RGF0YShmb250RGF0YSk7CisgICAgICAgICAgICBpdC0+
dmFsdWUtPnBydW5lRm9udERhdGEoZm9udERhdGEpOwogICAgIH0KICAgICAKICAgICBpZiAocGFn
ZVplcm9Sb290KQpAQCAtMzYyLDcgKzM2Miw3IEBAIHZvaWQgR2x5cGhQYWdlVHJlZU5vZGU6OnBy
dW5lQ3VzdG9tRm9udERhdGEoY29uc3QgRm9udERhdGEqIGZvbnREYXRhKQogICAgICAgICByZXR1
cm47CiAgICAgSGFzaE1hcDxjb25zdCBGb250RGF0YSosIEdseXBoUGFnZVRyZWVOb2RlKj46Oml0
ZXJhdG9yIGVuZCA9IG1fY2hpbGRyZW4uZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPGNvbnN0IEZv
bnREYXRhKiwgR2x5cGhQYWdlVHJlZU5vZGUqPjo6aXRlcmF0b3IgaXQgPSBtX2NoaWxkcmVuLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+cHJ1bmVDdXN0b21G
b250RGF0YShmb250RGF0YSk7CisgICAgICAgIGl0LT52YWx1ZS0+cHJ1bmVDdXN0b21Gb250RGF0
YShmb250RGF0YSk7CiB9CiAKIHZvaWQgR2x5cGhQYWdlVHJlZU5vZGU6OnBydW5lRm9udERhdGEo
Y29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhLCB1bnNpZ25lZCBsZXZlbCkKQEAgLTM3OCw3
ICszNzgsNyBAQCB2b2lkIEdseXBoUGFnZVRyZWVOb2RlOjpwcnVuZUZvbnREYXRhKGNvbnN0IFNp
bXBsZUZvbnREYXRhKiBmb250RGF0YSwgdW5zaWduZWQgbAogICAgIC8vIFBydW5lIGFueSBicmFu
Y2ggdGhhdCBjb250YWlucyB0aGlzIEZvbnREYXRhLgogICAgIEhhc2hNYXA8Y29uc3QgRm9udERh
dGEqLCBHbHlwaFBhZ2VUcmVlTm9kZSo+OjppdGVyYXRvciBjaGlsZCA9IG1fY2hpbGRyZW4uZmlu
ZChmb250RGF0YSk7CiAgICAgaWYgKGNoaWxkICE9IG1fY2hpbGRyZW4uZW5kKCkpIHsKLSAgICAg
ICAgR2x5cGhQYWdlVHJlZU5vZGUqIG5vZGUgPSBjaGlsZC0+c2Vjb25kOworICAgICAgICBHbHlw
aFBhZ2VUcmVlTm9kZSogbm9kZSA9IGNoaWxkLT52YWx1ZTsKICAgICAgICAgbV9jaGlsZHJlbi5y
ZW1vdmUoZm9udERhdGEpOwogICAgICAgICB1bnNpZ25lZCBjdXN0b21Gb250Q291bnQgPSBub2Rl
LT5tX2N1c3RvbUZvbnRDb3VudDsKICAgICAgICAgZGVsZXRlIG5vZGU7CkBAIC0zOTQsNyArMzk0
LDcgQEAgdm9pZCBHbHlwaFBhZ2VUcmVlTm9kZTo6cHJ1bmVGb250RGF0YShjb25zdCBTaW1wbGVG
b250RGF0YSogZm9udERhdGEsIHVuc2lnbmVkIGwKIAogICAgIEhhc2hNYXA8Y29uc3QgRm9udERh
dGEqLCBHbHlwaFBhZ2VUcmVlTm9kZSo+OjppdGVyYXRvciBlbmQgPSBtX2NoaWxkcmVuLmVuZCgp
OwogICAgIGZvciAoSGFzaE1hcDxjb25zdCBGb250RGF0YSosIEdseXBoUGFnZVRyZWVOb2RlKj46
Oml0ZXJhdG9yIGl0ID0gbV9jaGlsZHJlbi5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAg
ICAgIGl0LT5zZWNvbmQtPnBydW5lRm9udERhdGEoZm9udERhdGEsIGxldmVsKTsKKyAgICAgICAg
aXQtPnZhbHVlLT5wcnVuZUZvbnREYXRhKGZvbnREYXRhLCBsZXZlbCk7CiB9CiAKICNpZm5kZWYg
TkRFQlVHCkBAIC00MDYsOCArNDA2LDggQEAgdm9pZCBHbHlwaFBhZ2VUcmVlTm9kZTo6cHJ1bmVG
b250RGF0YShjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEsIHVuc2lnbmVkIGwKIAogICAg
ICAgICBIYXNoTWFwPGNvbnN0IEZvbnREYXRhKiwgR2x5cGhQYWdlVHJlZU5vZGUqPjo6aXRlcmF0
b3IgZW5kID0gbV9jaGlsZHJlbi5lbmQoKTsKICAgICAgICAgZm9yIChIYXNoTWFwPGNvbnN0IEZv
bnREYXRhKiwgR2x5cGhQYWdlVHJlZU5vZGUqPjo6aXRlcmF0b3IgaXQgPSBtX2NoaWxkcmVuLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgcHJpbnRmKCIlc1x0JXAgJXNc
biIsIGluZGVudC5kYXRhKCksIGl0LT5maXJzdCwgaXQtPmZpcnN0LT5kZXNjcmlwdGlvbigpLnV0
ZjgoKS5kYXRhKCkpOwotICAgICAgICAgICAgaXQtPnNlY29uZC0+c2hvd1N1YnRyZWUoKTsKKyAg
ICAgICAgICAgIHByaW50ZigiJXNcdCVwICVzXG4iLCBpbmRlbnQuZGF0YSgpLCBpdC0+a2V5LCBp
dC0+a2V5LT5kZXNjcmlwdGlvbigpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgaXQtPnZh
bHVlLT5zaG93U3VidHJlZSgpOwogICAgICAgICB9CiAgICAgICAgIGlmIChtX3N5c3RlbUZhbGxi
YWNrQ2hpbGQpIHsKICAgICAgICAgICAgIHByaW50ZigiJXNcdCogZmFsbGJhY2tcbiIsIGluZGVu
dC5kYXRhKCkpOwpAQCAtNDI1LDggKzQyNSw4IEBAIHZvaWQgc2hvd0dseXBoUGFnZVRyZWVzKCkK
ICAgICBzaG93R2x5cGhQYWdlVHJlZSgwKTsKICAgICBIYXNoTWFwPGludCwgV2ViQ29yZTo6R2x5
cGhQYWdlVHJlZU5vZGUqPjo6aXRlcmF0b3IgZW5kID0gV2ViQ29yZTo6R2x5cGhQYWdlVHJlZU5v
ZGU6OnJvb3RzLT5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8aW50LCBXZWJDb3JlOjpHbHlwaFBh
Z2VUcmVlTm9kZSo+OjppdGVyYXRvciBpdCA9IFdlYkNvcmU6OkdseXBoUGFnZVRyZWVOb2RlOjpy
b290cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIHByaW50ZigiXG5QYWdl
ICVkOlxuIiwgaXQtPmZpcnN0KTsKLSAgICAgICAgc2hvd0dseXBoUGFnZVRyZWUoaXQtPmZpcnN0
KTsKKyAgICAgICAgcHJpbnRmKCJcblBhZ2UgJWQ6XG4iLCBpdC0+a2V5KTsKKyAgICAgICAgc2hv
d0dseXBoUGFnZVRyZWUoaXQtPmtleSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZS5jcHAKaW5kZXggYjQ4
NWRjZjE3ZjVlYmVmMjlhOTY2ZWNjNjNkNmExOTA4MzJkNzMwNC4uZGY3ZmE3ZGNiM2I5OWFmYWYy
YWJlNmRjZTFlMmZkMWE3ZTU3OWRjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlLmNwcApAQCAtMTE2LDkgKzExNiw5IEBA
IHZvaWQgVGlsZWRCYWNraW5nU3RvcmU6OnVwZGF0ZVRpbGVCdWZmZXJzKCkKICAgICBWZWN0b3I8
UmVmUHRyPFRpbGU+ID4gZGlydHlUaWxlczsKICAgICBUaWxlTWFwOjppdGVyYXRvciBlbmQgPSBt
X3RpbGVzLmVuZCgpOwogICAgIGZvciAoVGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoIWl0LT5zZWNvbmQtPmlzRGly
dHkoKSkKKyAgICAgICAgaWYgKCFpdC0+dmFsdWUtPmlzRGlydHkoKSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICBkaXJ0eVRpbGVzLmFwcGVuZChpdC0+c2Vjb25kKTsKKyAgICAgICAg
ZGlydHlUaWxlcy5hcHBlbmQoaXQtPnZhbHVlKTsKICAgICB9CiAKICAgICBpZiAoZGlydHlUaWxl
cy5pc0VtcHR5KCkpIHsKQEAgLTQwMSwxMyArNDAxLDEzIEBAIGJvb2wgVGlsZWRCYWNraW5nU3Rv
cmU6OnJlc2l6ZUVkZ2VUaWxlcygpCiAgICAgVmVjdG9yPFRpbGU6OkNvb3JkaW5hdGU+IHRpbGVz
VG9SZW1vdmU7CiAgICAgVGlsZU1hcDo6aXRlcmF0b3IgZW5kID0gbV90aWxlcy5lbmQoKTsKICAg
ICBmb3IgKFRpbGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKLSAgICAgICAgVGlsZTo6Q29vcmRpbmF0ZSB0aWxlQ29vcmRpbmF0ZSA9IGl0LT5z
ZWNvbmQtPmNvb3JkaW5hdGUoKTsKLSAgICAgICAgSW50UmVjdCB0aWxlUmVjdCA9IGl0LT5zZWNv
bmQtPnJlY3QoKTsKKyAgICAgICAgVGlsZTo6Q29vcmRpbmF0ZSB0aWxlQ29vcmRpbmF0ZSA9IGl0
LT52YWx1ZS0+Y29vcmRpbmF0ZSgpOworICAgICAgICBJbnRSZWN0IHRpbGVSZWN0ID0gaXQtPnZh
bHVlLT5yZWN0KCk7CiAgICAgICAgIEludFJlY3QgZXhwZWN0ZWRUaWxlUmVjdCA9IHRpbGVSZWN0
Rm9yQ29vcmRpbmF0ZSh0aWxlQ29vcmRpbmF0ZSk7CiAgICAgICAgIGlmIChleHBlY3RlZFRpbGVS
ZWN0LmlzRW1wdHkoKSkKICAgICAgICAgICAgIHRpbGVzVG9SZW1vdmUuYXBwZW5kKHRpbGVDb29y
ZGluYXRlKTsKICAgICAgICAgZWxzZSBpZiAoZXhwZWN0ZWRUaWxlUmVjdCAhPSB0aWxlUmVjdCkg
ewotICAgICAgICAgICAgaXQtPnNlY29uZC0+cmVzaXplKGV4cGVjdGVkVGlsZVJlY3Quc2l6ZSgp
KTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+cmVzaXplKGV4cGVjdGVkVGlsZVJlY3Quc2l6ZSgp
KTsKICAgICAgICAgICAgIHdhc1Jlc2l6ZWQgPSB0cnVlOwogICAgICAgICB9CiAgICAgfQpAQCAt
NDI2LDggKzQyNiw4IEBAIHZvaWQgVGlsZWRCYWNraW5nU3RvcmU6OnNldEtlZXBSZWN0KGNvbnN0
IEludFJlY3QmIGtlZXBSZWN0KQogICAgIFZlY3RvcjxUaWxlOjpDb29yZGluYXRlPiB0b1JlbW92
ZTsKICAgICBUaWxlTWFwOjppdGVyYXRvciBlbmQgPSBtX3RpbGVzLmVuZCgpOwogICAgIGZvciAo
VGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewotICAgICAgICBUaWxlOjpDb29yZGluYXRlIGNvb3JkaW5hdGUgPSBpdC0+c2Vjb25kLT5jb29y
ZGluYXRlKCk7Ci0gICAgICAgIEZsb2F0UmVjdCB0aWxlUmVjdCA9IGl0LT5zZWNvbmQtPnJlY3Qo
KTsKKyAgICAgICAgVGlsZTo6Q29vcmRpbmF0ZSBjb29yZGluYXRlID0gaXQtPnZhbHVlLT5jb29y
ZGluYXRlKCk7CisgICAgICAgIEZsb2F0UmVjdCB0aWxlUmVjdCA9IGl0LT52YWx1ZS0+cmVjdCgp
OwogICAgICAgICBpZiAoIXRpbGVSZWN0LmludGVyc2VjdHMoa2VlcFJlY3RGKSkKICAgICAgICAg
ICAgIHRvUmVtb3ZlLmFwcGVuZChjb29yZGluYXRlKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vY2YvTWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uQ0YuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL2NmL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGLmNwcApp
bmRleCA4MWQ4NjI5ODE1MjlkY2I1ZTRhYjJkMGMwMDY2NzJkZTc2YTg4MmYxLi43OGNhYzY3MmU0
MThjMTU5MDMzYzBhMWZmODhkZmYyZDZhMTE5NTc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vY2YvTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uQ0YuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9jZi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25DRi5jcHAKQEAgLTkx
NSw3ICs5MTUsNyBAQCBBVkZXcmFwcGVyKiBBVkZXcmFwcGVyOjphdmZXcmFwcGVyRm9yQ2FsbGJh
Y2tDb250ZXh0KHZvaWQqIGNvbnRleHQpCiAgICAgaWYgKGl0ID09IG1hcCgpLmVuZCgpKQogICAg
ICAgICByZXR1cm4gMDsKIAotICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgIHJldHVybiBpdC0+
dmFsdWU7CiB9CiAKIHZvaWQgQVZGV3JhcHBlcjo6c2NoZWR1bGVEaXNjb25uZWN0QW5kRGVsZXRl
KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVy
cnkvTGF5ZXJUaWxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFj
a2JlcnJ5L0xheWVyVGlsZXIuY3BwCmluZGV4IDlmNWM2YWYzZTg1MDYxYTk3MmQwNDMxMWJlOTAz
MTVlOTViNWUwZGEuLjZkZjFkYTNiN2M4MDA0Y2EyMTgyMTVhYmQ0ZmJiMjcxOWM1ZTg2MDcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5
ZXJUaWxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2ti
ZXJyeS9MYXllclRpbGVyLmNwcApAQCAtMzY5LDggKzM2OSw4IEBAIHZvaWQgTGF5ZXJUaWxlcjo6
bGF5ZXJWaXNpYmlsaXR5Q2hhbmdlZChMYXllckNvbXBvc2l0aW5nVGhyZWFkKiwgYm9vbCB2aXNp
YmxlKQogICAgIH0KIAogICAgIGZvciAoVGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJl
Z2luKCk7IGl0ICE9IG1fdGlsZXMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgVGlsZUluZGV4IGlu
ZGV4ID0gKCppdCkuZmlyc3Q7Ci0gICAgICAgIExheWVyVGlsZSogdGlsZSA9ICgqaXQpLnNlY29u
ZDsKKyAgICAgICAgVGlsZUluZGV4IGluZGV4ID0gKCppdCkua2V5OworICAgICAgICBMYXllclRp
bGUqIHRpbGUgPSAoKml0KS52YWx1ZTsKICAgICAgICAgdGlsZS0+c2V0VmlzaWJsZShmYWxzZSk7
CiAgICAgfQogfQpAQCAtMzg0LDIxICszODQsMjEgQEAgdm9pZCBMYXllclRpbGVyOjp1cGxvYWRU
ZXh0dXJlc0lmTmVlZGVkKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqKQogCiAgICAgVGlsZUpvYnNN
YXA6OmNvbnN0X2l0ZXJhdG9yIHRpbGVKb2JzSXRlckVuZCA9IHRpbGVKb2JzTWFwLmVuZCgpOwog
ICAgIGZvciAoVGlsZUpvYnNNYXA6OmNvbnN0X2l0ZXJhdG9yIHRpbGVKb2JzSXRlciA9IHRpbGVK
b2JzTWFwLmJlZ2luKCk7IHRpbGVKb2JzSXRlciAhPSB0aWxlSm9ic0l0ZXJFbmQ7ICsrdGlsZUpv
YnNJdGVyKSB7Ci0gICAgICAgIEludFBvaW50IG9yaWdpbiA9IG9yaWdpbk9mVGlsZSh0aWxlSm9i
c0l0ZXItPmZpcnN0KTsKKyAgICAgICAgSW50UG9pbnQgb3JpZ2luID0gb3JpZ2luT2ZUaWxlKHRp
bGVKb2JzSXRlci0+a2V5KTsKIAotICAgICAgICBMYXllclRpbGUqIHRpbGUgPSBtX3RpbGVzLmdl
dCh0aWxlSm9ic0l0ZXItPmZpcnN0KTsKKyAgICAgICAgTGF5ZXJUaWxlKiB0aWxlID0gbV90aWxl
cy5nZXQodGlsZUpvYnNJdGVyLT5rZXkpOwogICAgICAgICBpZiAoIXRpbGUpIHsKICAgICAgICAg
ICAgIGlmIChvcmlnaW4ueCgpID49IG1fcmVxdWlyZWRUZXh0dXJlU2l6ZS53aWR0aCgpIHx8IG9y
aWdpbi55KCkgPj0gbV9yZXF1aXJlZFRleHR1cmVTaXplLmhlaWdodCgpKQogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgdGlsZSA9IG5ldyBMYXllclRpbGUoKTsKLSAgICAg
ICAgICAgIG1fdGlsZXMuYWRkKHRpbGVKb2JzSXRlci0+Zmlyc3QsIHRpbGUpOworICAgICAgICAg
ICAgbV90aWxlcy5hZGQodGlsZUpvYnNJdGVyLT5rZXksIHRpbGUpOwogICAgICAgICB9CiAKICAg
ICAgICAgSW50UmVjdCB0aWxlUmVjdChvcmlnaW4sIHRpbGVTaXplKCkpOwogICAgICAgICB0aWxl
UmVjdC5zZXRXaWR0aChtaW4obV9yZXF1aXJlZFRleHR1cmVTaXplLndpZHRoKCkgLSB0aWxlUmVj
dC54KCksIHRpbGVSZWN0LndpZHRoKCkpKTsKICAgICAgICAgdGlsZVJlY3Quc2V0SGVpZ2h0KG1p
bihtX3JlcXVpcmVkVGV4dHVyZVNpemUuaGVpZ2h0KCkgLSB0aWxlUmVjdC55KCksIHRpbGVSZWN0
LmhlaWdodCgpKSk7CiAKLSAgICAgICAgcGVyZm9ybVRpbGVKb2IodGlsZSwgKnRpbGVKb2JzSXRl
ci0+c2Vjb25kLCB0aWxlUmVjdCk7CisgICAgICAgIHBlcmZvcm1UaWxlSm9iKHRpbGUsICp0aWxl
Sm9ic0l0ZXItPnZhbHVlLCB0aWxlUmVjdCk7CiAgICAgfQogCiAgICAgbV90ZXh0dXJlSm9icy5j
bGVhcigpOwpAQCAtNDQxLDExICs0NDEsMTEgQEAgdm9pZCBMYXllclRpbGVyOjphZGRUaWxlSm9i
KGNvbnN0IFRpbGVJbmRleCYgaW5kZXgsIGNvbnN0IFRleHR1cmVKb2ImIGpvYiwgVGlsZUoKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgLy8gSW4gdGhpcyBjYXNlIHdlIGxlYXZlIHRoZSBwcmV2aW91
cyBqb2IuCi0gICAgaWYgKGpvYi5tX3R5cGUgPT0gVGV4dHVyZUpvYjo6RGlydHlDb250ZW50cyAm
JiByZXN1bHQuaXRlcmF0b3ItPnNlY29uZC0+bV90eXBlID09IFRleHR1cmVKb2I6OkRpc2NhcmRD
b250ZW50cykKKyAgICBpZiAoam9iLm1fdHlwZSA9PSBUZXh0dXJlSm9iOjpEaXJ0eUNvbnRlbnRz
ICYmIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPm1fdHlwZSA9PSBUZXh0dXJlSm9iOjpEaXNjYXJk
Q29udGVudHMpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIE92ZXJyaWRlIHRoZSBwcmV2aW91
cyBqb2IuCi0gICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSAmam9iOworICAgIHJlc3VsdC5p
dGVyYXRvci0+dmFsdWUgPSAmam9iOwogfQogCiB2b2lkIExheWVyVGlsZXI6OnBlcmZvcm1UaWxl
Sm9iKExheWVyVGlsZSogdGlsZSwgY29uc3QgVGV4dHVyZUpvYiYgam9iLCBjb25zdCBJbnRSZWN0
JiB0aWxlUmVjdCkKQEAgLTYzMCw3ICs2MzAsNyBAQCB2b2lkIExheWVyVGlsZXI6OmRlbGV0ZVRl
eHR1cmVzKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqKQogICAgIC8vIHRvdWNoaW5nIHNvbWUgV2Vi
S2l0IHRocmVhZCBzdGF0ZS4KICAgICBpZiAobV90aWxlcy5zaXplKCkpIHsKICAgICAgICAgZm9y
IChUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0gbV90aWxlcy5l
bmQoKTsgKytpdCkKLSAgICAgICAgICAgICgqaXQpLnNlY29uZC0+ZGlzY2FyZENvbnRlbnRzKCk7
CisgICAgICAgICAgICAoKml0KS52YWx1ZS0+ZGlzY2FyZENvbnRlbnRzKCk7CiAgICAgICAgIG1f
dGlsZXMuY2xlYXIoKTsKIAogICAgICAgICBtX2NvbnRlbnRzRGlydHkgPSB0cnVlOwpAQCAtNjQ3
LDcgKzY0Nyw3IEBAIHZvaWQgTGF5ZXJUaWxlcjo6cHJ1bmVUZXh0dXJlcygpCiAgICAgLy8gUHJ1
bmUgdGlsZXMgdGhhdCBhcmUgbm8gbG9uZ2VyIG5lZWRlZC4KICAgICBWZWN0b3I8VGlsZUluZGV4
PiB0aWxlc1RvRGVsZXRlOwogICAgIGZvciAoVGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVz
LmJlZ2luKCk7IGl0ICE9IG1fdGlsZXMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgVGlsZUluZGV4
IGluZGV4ID0gKCppdCkuZmlyc3Q7CisgICAgICAgIFRpbGVJbmRleCBpbmRleCA9ICgqaXQpLmtl
eTsKIAogICAgICAgICBJbnRQb2ludCBvcmlnaW4gPSBvcmlnaW5PZlRpbGUoaW5kZXgpOwogICAg
ICAgICBpZiAob3JpZ2luLngoKSA+PSBtX3JlcXVpcmVkVGV4dHVyZVNpemUud2lkdGgoKSB8fCBv
cmlnaW4ueSgpID49IG1fcmVxdWlyZWRUZXh0dXJlU2l6ZS5oZWlnaHQoKSkKQEAgLTczOSw3ICs3
MzksNyBAQCB2b2lkIExheWVyVGlsZXI6OmJpbmRDb250ZW50c1RleHR1cmUoTGF5ZXJDb21wb3Np
dGluZ1RocmVhZCopCiAgICAgaWYgKG1fdGlsZXMuc2l6ZSgpICE9IDEpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGNvbnN0IExheWVyVGlsZSogdGlsZSA9IG1fdGlsZXMuYmVnaW4oKS0+c2Vjb25k
OworICAgIGNvbnN0IExheWVyVGlsZSogdGlsZSA9IG1fdGlsZXMuYmVnaW4oKS0+dmFsdWU7CiAK
ICAgICBBU1NFUlQodGlsZS0+aGFzVGV4dHVyZSgpKTsKICAgICBpZiAoIXRpbGUtPmhhc1RleHR1
cmUoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNr
YmVycnkvVGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9UZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVh
ZC5jcHAKaW5kZXggNWI2YmI4NzM2NDlmOWE4OGJjYjc4ZTIwYjE3YTE4ZWMzNTRjYjc1MS4uZDY1
YzRkYWRkYmJiMjU5OGViMGZhMjQxNzFjNGU2YWYxNGRkNzRjOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9UZXh0dXJlQ2FjaGVDb21wb3Np
dGluZ1RocmVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxh
Y2tiZXJyeS9UZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZC5jcHAKQEAgLTIwMiwxMCArMjAy
LDEwIEBAIHZvaWQgVGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQ6OnNldE1lbW9yeVVzYWdl
KHNpemVfdCBtZW1vcnlVc2FnZSkKIFBhc3NSZWZQdHI8VGV4dHVyZT4gVGV4dHVyZUNhY2hlQ29t
cG9zaXRpbmdUaHJlYWQ6OnRleHR1cmVGb3JUaWxlZENvbnRlbnRzKGNvbnN0IFNrQml0bWFwJiBj
b250ZW50cywgY29uc3QgSW50UmVjdCYgdGlsZVJlY3QsIGNvbnN0IFRpbGVJbmRleCYgaW5kZXgs
IGJvb2wgaXNPcGFxdWUpCiB7CiAgICAgSGFzaE1hcDxDb250ZW50c0tleSwgVGV4dHVyZU1hcD46
Oml0ZXJhdG9yIGl0ID0gbV9jYWNoZS5hZGQoa2V5KGNvbnRlbnRzKSwgVGV4dHVyZU1hcCgpKS5p
dGVyYXRvcjsKLSAgICBUZXh0dXJlTWFwJiBtYXAgPSAoKml0KS5zZWNvbmQ7CisgICAgVGV4dHVy
ZU1hcCYgbWFwID0gKCppdCkudmFsdWU7CiAKICAgICBUZXh0dXJlTWFwOjppdGVyYXRvciBqdCA9
IG1hcC5hZGQoaW5kZXgsIFJlZlB0cjxUZXh0dXJlPigpKS5pdGVyYXRvcjsKLSAgICBSZWZQdHI8
VGV4dHVyZT4gdGV4dHVyZSA9ICgqanQpLnNlY29uZDsKKyAgICBSZWZQdHI8VGV4dHVyZT4gdGV4
dHVyZSA9ICgqanQpLnZhbHVlOwogICAgIGlmICghdGV4dHVyZSkgewogICAgICAgICB0ZXh0dXJl
ID0gY3JlYXRlVGV4dHVyZSgpOwogI2lmIERFQlVHX1RFWFRVUkVfTUVNT1JZX1VTQUdFCkBAIC0y
NDQsNyArMjQ0LDcgQEAgUGFzc1JlZlB0cjxUZXh0dXJlPiBUZXh0dXJlQ2FjaGVDb21wb3NpdGlu
Z1RocmVhZDo6dGV4dHVyZUZvckNvbG9yKGNvbnN0IENvbG9yJgogI2VuZGlmCiAgICAgICAgIG1f
Y29sb3JzLnNldChjb2xvciwgdGV4dHVyZSk7CiAgICAgfSBlbHNlCi0gICAgICAgIHRleHR1cmUg
PSAoKml0KS5zZWNvbmQ7CisgICAgICAgIHRleHR1cmUgPSAoKml0KS52YWx1ZTsKIAogICAgIC8v
IENvbG9yIHRleHR1cmVzIGNhbid0IGJlIGV2aWN0ZWQsIHNvIG5vIG5lZWQgZm9yIFRleHR1cmVQ
cm90ZWN0b3IuCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCmluZGV4IGRjZGI1ODZkMGNiZmIzMjkzNjFkNmVkYjU5
ZmNjYWMwZWIzMGIyMjYuLjUwZDMzYTA3OWEyYmZkNWRmOWI4ZDZmYjY2YmQ5MTFhNzBkMmZkZGMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNz
TGF5ZXJDQS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3Jh
cGhpY3NMYXllckNBLmNwcApAQCAtNDc3LDcgKzQ3Nyw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNB
Ojptb3ZlT3JDb3B5QW5pbWF0aW9ucyhNb3ZlT3JDb3B5IG9wZXJhdGlvbiwgUGxhdGZvcm1DQUxh
eWVyCiAgICAgLy8gTG9vayBmb3IgcnVubmluZyBhbmltYXRpb25zIGFmZmVjdGluZyB0aGlzIHBy
b3BlcnR5LgogICAgIEFuaW1hdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcnVubmlu
Z0FuaW1hdGlvbnMuZW5kKCk7CiAgICAgZm9yIChBbmltYXRpb25zTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fcnVubmluZ0FuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0g
ICAgICAgIGNvbnN0IFZlY3RvcjxMYXllclByb3BlcnR5QW5pbWF0aW9uPiYgcHJvcGVydHlBbmlt
YXRpb25zID0gaXQtPnNlY29uZDsKKyAgICAgICAgY29uc3QgVmVjdG9yPExheWVyUHJvcGVydHlB
bmltYXRpb24+JiBwcm9wZXJ0eUFuaW1hdGlvbnMgPSBpdC0+dmFsdWU7CiAgICAgICAgIHNpemVf
dCBudW1BbmltYXRpb25zID0gcHJvcGVydHlBbmltYXRpb25zLnNpemUoKTsKICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBudW1BbmltYXRpb25zOyArK2kpIHsKICAgICAgICAgICAgIGNv
bnN0IExheWVyUHJvcGVydHlBbmltYXRpb24mIGN1cnJBbmltYXRpb24gPSBwcm9wZXJ0eUFuaW1h
dGlvbnNbaV07CkBAIC03MTksNyArNzE5LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnBhdXNl
QW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWVPZmYKIAog
ICAgIEFuaW1hdGlvbnNUb1Byb2Nlc3NNYXA6Oml0ZXJhdG9yIGl0ID0gbV9hbmltYXRpb25zVG9Q
cm9jZXNzLmZpbmQoYW5pbWF0aW9uTmFtZSk7CiAgICAgaWYgKGl0ICE9IG1fYW5pbWF0aW9uc1Rv
UHJvY2Vzcy5lbmQoKSkgewotICAgICAgICBBbmltYXRpb25Qcm9jZXNzaW5nQWN0aW9uJiBwcm9j
ZXNzaW5nSW5mbyA9IGl0LT5zZWNvbmQ7CisgICAgICAgIEFuaW1hdGlvblByb2Nlc3NpbmdBY3Rp
b24mIHByb2Nlc3NpbmdJbmZvID0gaXQtPnZhbHVlOwogICAgICAgICAvLyBJZiBhbiBhbmltYXRp
b24gaXMgc2NoZWR1bGVkIHRvIGJlIHJlbW92ZWQsIGRvbid0IGNoYW5nZSB0aGUgcmVtb3ZlIHRv
IGEgcGF1c2UuCiAgICAgICAgIGlmIChwcm9jZXNzaW5nSW5mby5hY3Rpb24gIT0gUmVtb3ZlKQog
ICAgICAgICAgICAgcHJvY2Vzc2luZ0luZm8uYWN0aW9uID0gUGF1c2U7CkBAIC04NTQsNyArODU0
LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OmxheWVyRGlkRGlzcGxheShQbGF0Zm9ybUxheWVy
KiBsYXllcikKICAgICBpZiAobGF5ZXJDbG9uZU1hcCkgewogICAgICAgICBMYXllck1hcDo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAoTGF5
ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBQbGF0Zm9ybUNBTGF5ZXIqIGN1cnJDbG9uZSA9IGl0
LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBQbGF0Zm9ybUNBTGF5ZXIqIGN1cnJDbG9uZSA9
IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGlmICghY3VyckNsb25lKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCkBAIC0xMTk2LDEwICsxMTk2LDEwIEBAIHZvaWQgR3JhcGhpY3NM
YXllckNBOjp1cGRhdGVHZW9tZXRyeShmbG9hdCBwYWdlU2NhbGVGYWN0b3IsIGNvbnN0IEZsb2F0
UG9pbnQmIHBvCiAgICAgICAgIGlmIChMYXllck1hcCogbGF5ZXJDbG9uZU1hcCA9IG1fc3RydWN0
dXJhbExheWVyQ2xvbmVzLmdldCgpKSB7CiAgICAgICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAgICAgICAgICBmb3IgKExheWVy
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGxheWVyQ2xvbmVNYXAtPmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewotICAgICAgICAgICAgICAgIFBsYXRmb3JtQ0FMYXllciogY2xvbmUgPSBpdC0+
c2Vjb25kLmdldCgpOworICAgICAgICAgICAgICAgIFBsYXRmb3JtQ0FMYXllciogY2xvbmUgPSBp
dC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICAgICAgRmxvYXRQb2ludCBjbG9uZVBvc2l0aW9u
ID0gbGF5ZXJQb3NpdGlvbjsKIAotICAgICAgICAgICAgICAgIGlmIChtX3JlcGxpY2FMYXllciAm
JiBpc1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQtPmZpcnN0KSkgeworICAgICAgICAgICAgICAgIGlm
IChtX3JlcGxpY2FMYXllciAmJiBpc1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQtPmtleSkpIHsKICAg
ICAgICAgICAgICAgICAgICAgLy8gTWFpbnRhaW4gdGhlIHNwZWNpYWwtY2FzZSBwb3NpdGlvbiBm
b3IgdGhlIHJvb3Qgb2YgYSBjbG9uZSBzdWJ0cmVlLAogICAgICAgICAgICAgICAgICAgICAvLyB3
aGljaCB3ZSBzZXQgdXAgaW4gcmVwbGljYXRlZExheWVyUm9vdCgpLgogICAgICAgICAgICAgICAg
ICAgICBjbG9uZVBvc2l0aW9uID0gcG9zaXRpb25Gb3JDbG9uZVJvb3RMYXllcigpOwpAQCAtMTIy
MywxMCArMTIyMywxMCBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlR2VvbWV0cnkoZmxv
YXQgcGFnZVNjYWxlRmFjdG9yLCBjb25zdCBGbG9hdFBvaW50JiBwbwogICAgIGlmIChMYXllck1h
cCogbGF5ZXJDbG9uZU1hcCA9IG1fbGF5ZXJDbG9uZXMuZ2V0KCkpIHsKICAgICAgICAgTGF5ZXJN
YXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxheWVyQ2xvbmVNYXAtPmVuZCgpOwogICAgICAgICBm
b3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGxheWVyQ2xvbmVNYXAtPmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgUGxhdGZvcm1DQUxheWVyKiBjbG9uZSA9
IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBQbGF0Zm9ybUNBTGF5ZXIqIGNsb25lID0g
aXQtPnZhbHVlLmdldCgpOwogICAgICAgICAgICAgRmxvYXRQb2ludCBjbG9uZVBvc2l0aW9uID0g
YWRqdXN0ZWRQb3NpdGlvbjsKIAotICAgICAgICAgICAgaWYgKCFtX3N0cnVjdHVyYWxMYXllciAm
JiBtX3JlcGxpY2FMYXllciAmJiBpc1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQtPmZpcnN0KSkgewor
ICAgICAgICAgICAgaWYgKCFtX3N0cnVjdHVyYWxMYXllciAmJiBtX3JlcGxpY2FMYXllciAmJiBp
c1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQtPmtleSkpIHsKICAgICAgICAgICAgICAgICAvLyBNYWlu
dGFpbiB0aGUgc3BlY2lhbC1jYXNlIHBvc2l0aW9uIGZvciB0aGUgcm9vdCBvZiBhIGNsb25lIHN1
YnRyZWUsCiAgICAgICAgICAgICAgICAgLy8gd2hpY2ggd2Ugc2V0IHVwIGluIHJlcGxpY2F0ZWRM
YXllclJvb3QoKS4KICAgICAgICAgICAgICAgICBjbG9uZVBvc2l0aW9uID0gcG9zaXRpb25Gb3JD
bG9uZVJvb3RMYXllcigpOwpAQCAtMTI0Niw4ICsxMjQ2LDggQEAgdm9pZCBHcmFwaGljc0xheWVy
Q0E6OnVwZGF0ZVRyYW5zZm9ybSgpCiAgICAgaWYgKExheWVyTWFwKiBsYXllckNsb25lTWFwID0g
cHJpbWFyeUxheWVyQ2xvbmVzKCkpIHsKICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IGxheWVyQ2xvbmVNYXAtPmVuZCgpOwogICAgICAgICBmb3IgKExheWVyTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IGxheWVyQ2xvbmVNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewotICAgICAgICAgICAgUGxhdGZvcm1DQUxheWVyKiBjdXJyTGF5ZXIgPSBpdC0+c2Vjb25kLmdl
dCgpOwotICAgICAgICAgICAgaWYgKG1fcmVwbGljYUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RD
bG9uZShpdC0+Zmlyc3QpKSB7CisgICAgICAgICAgICBQbGF0Zm9ybUNBTGF5ZXIqIGN1cnJMYXll
ciA9IGl0LT52YWx1ZS5nZXQoKTsKKyAgICAgICAgICAgIGlmIChtX3JlcGxpY2FMYXllciAmJiBp
c1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQtPmtleSkpIHsKICAgICAgICAgICAgICAgICAvLyBNYWlu
dGFpbiB0aGUgc3BlY2lhbC1jYXNlIHRyYW5zZm9ybSBmb3IgdGhlIHJvb3Qgb2YgYSBjbG9uZSBz
dWJ0cmVlLAogICAgICAgICAgICAgICAgIC8vIHdoaWNoIHdlIHNldCB1cCBpbiByZXBsaWNhdGVk
TGF5ZXJSb290KCkuCiAgICAgICAgICAgICAgICAgY3VyckxheWVyLT5zZXRUcmFuc2Zvcm0oVHJh
bnNmb3JtYXRpb25NYXRyaXgoKSk7CkBAIC0xMjY0LDcgKzEyNjQsNyBAQCB2b2lkIEdyYXBoaWNz
TGF5ZXJDQTo6dXBkYXRlQ2hpbGRyZW5UcmFuc2Zvcm0oKQogICAgIGlmIChMYXllck1hcCogbGF5
ZXJDbG9uZU1hcCA9IHByaW1hcnlMYXllckNsb25lcygpKSB7CiAgICAgICAgIExheWVyTWFwOjpj
b25zdF9pdGVyYXRvciBlbmQgPSBsYXllckNsb25lTWFwLT5lbmQoKTsKICAgICAgICAgZm9yIChM
YXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXllckNsb25lTWFwLT5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRTdWJsYXllclRyYW5zZm9y
bShtX2NoaWxkcmVuVHJhbnNmb3JtKTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+c2V0U3VibGF5
ZXJUcmFuc2Zvcm0obV9jaGlsZHJlblRyYW5zZm9ybSk7CiAgICAgfQogfQogCkBAIC0xMjc1LDcg
KzEyNzUsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlTWFza3NUb0JvdW5kcygpCiAg
ICAgaWYgKExheWVyTWFwKiBsYXllckNsb25lTWFwID0gbV9sYXllckNsb25lcy5nZXQoKSkgewog
ICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5k
KCk7CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9u
ZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgaXQtPnNlY29uZC0+
c2V0TWFza3NUb0JvdW5kcyhtX21hc2tzVG9Cb3VuZHMpOworICAgICAgICAgICAgaXQtPnZhbHVl
LT5zZXRNYXNrc1RvQm91bmRzKG1fbWFza3NUb0JvdW5kcyk7CiAgICAgfQogCiAgICAgdXBkYXRl
RGVidWdJbmRpY2F0b3JzKCk7CkBAIC0xMjkzLDcgKzEyOTMsNyBAQCB2b2lkIEdyYXBoaWNzTGF5
ZXJDQTo6dXBkYXRlQ29udGVudHNWaXNpYmlsaXR5KCkKICAgICAgICAgaWYgKExheWVyTWFwKiBs
YXllckNsb25lTWFwID0gbV9sYXllckNsb25lcy5nZXQoKSkgewogICAgICAgICAgICAgTGF5ZXJN
YXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxheWVyQ2xvbmVNYXAtPmVuZCgpOwogICAgICAgICAg
ICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXllckNsb25lTWFwLT5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0Q29u
dGVudHMoMCk7CisgICAgICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRDb250ZW50cygwKTsKICAg
ICAgICAgfQogICAgIH0KIH0KQEAgLTEzMDUsNyArMTMwNSw3IEBAIHZvaWQgR3JhcGhpY3NMYXll
ckNBOjp1cGRhdGVDb250ZW50c09wYXF1ZSgpCiAgICAgaWYgKExheWVyTWFwKiBsYXllckNsb25l
TWFwID0gbV9sYXllckNsb25lcy5nZXQoKSkgewogICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KQotICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0T3BhcXVlKG1fY29udGVudHNPcGFxdWUp
OworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRPcGFxdWUobV9jb250ZW50c09wYXF1ZSk7CiAg
ICAgfQogfQogCkBAIC0xMzE3LDcgKzEzMTcsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBk
YXRlQmFja2ZhY2VWaXNpYmlsaXR5KCkKICAgICAgICAgaWYgKExheWVyTWFwKiBsYXllckNsb25l
TWFwID0gbV9zdHJ1Y3R1cmFsTGF5ZXJDbG9uZXMuZ2V0KCkpIHsKICAgICAgICAgICAgIExheWVy
TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBsYXllckNsb25lTWFwLT5lbmQoKTsKICAgICAgICAg
ICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNldERv
dWJsZVNpZGVkKG1fYmFja2ZhY2VWaXNpYmlsaXR5KTsKKyAgICAgICAgICAgICAgICBpdC0+dmFs
dWUtPnNldERvdWJsZVNpZGVkKG1fYmFja2ZhY2VWaXNpYmlsaXR5KTsKICAgICAgICAgfQogICAg
IH0KIApAQCAtMTMyNiw3ICsxMzI2LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUJh
Y2tmYWNlVmlzaWJpbGl0eSgpCiAgICAgaWYgKExheWVyTWFwKiBsYXllckNsb25lTWFwID0gbV9s
YXllckNsb25lcy5nZXQoKSkgewogICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAg
ICAgICAgICAgaXQtPnNlY29uZC0+c2V0RG91YmxlU2lkZWQobV9iYWNrZmFjZVZpc2liaWxpdHkp
OworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXREb3VibGVTaWRlZChtX2JhY2tmYWNlVmlzaWJp
bGl0eSk7CiAgICAgfQogfQogCkBAIC0xMzM4LDEwICsxMzM4LDEwIEBAIHZvaWQgR3JhcGhpY3NM
YXllckNBOjp1cGRhdGVGaWx0ZXJzKCkKICAgICBpZiAoTGF5ZXJNYXAqIGxheWVyQ2xvbmVNYXAg
PSBwcmltYXJ5TGF5ZXJDbG9uZXMoKSkgewogICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7Ci0gICAgICAgICAgICBpZiAobV9yZXBsaWNhTGF5ZXIgJiYgaXNSZXBsaWNhdGVkUm9vdENs
b25lKGl0LT5maXJzdCkpCisgICAgICAgICAgICBpZiAobV9yZXBsaWNhTGF5ZXIgJiYgaXNSZXBs
aWNhdGVkUm9vdENsb25lKGl0LT5rZXkpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0g
ICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRGaWx0ZXJzKG1fZmlsdGVycyk7CisgICAgICAgICAg
ICBpdC0+dmFsdWUtPnNldEZpbHRlcnMobV9maWx0ZXJzKTsKICAgICAgICAgfQogICAgIH0KIH0K
QEAgLTE0MzAsNyArMTQzMCw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjplbnN1cmVTdHJ1Y3R1
cmFsTGF5ZXIoU3RydWN0dXJhbExheWVyUHVycG9zZSBwdXJwb3NlLCBmbG9hCiAgICAgaWYgKG1f
bGF5ZXJDbG9uZXMpIHsKICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1f
bGF5ZXJDbG9uZXMtPmVuZCgpOwogICAgICAgICBmb3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fbGF5ZXJDbG9uZXMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAg
ICAgICAgUGxhdGZvcm1DQUxheWVyKiBjdXJyTGF5ZXIgPSBpdC0+c2Vjb25kLmdldCgpOworICAg
ICAgICAgICAgUGxhdGZvcm1DQUxheWVyKiBjdXJyTGF5ZXIgPSBpdC0+dmFsdWUuZ2V0KCk7CiAg
ICAgICAgICAgICBjdXJyTGF5ZXItPnNldFBvc2l0aW9uKHBvaW50KTsKICAgICAgICAgICAgIGN1
cnJMYXllci0+c2V0QW5jaG9yUG9pbnQoYW5jaG9yUG9pbnQpOwogICAgICAgICAgICAgY3Vyckxh
eWVyLT5zZXRUcmFuc2Zvcm0oVHJhbnNmb3JtYXRpb25NYXRyaXgoKSk7CkBAIC0xNDc1LDcgKzE0
NzUsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlTGF5ZXJEcmF3c0NvbnRlbnQoZmxv
YXQgcGFnZVNjYWxlRmFjdG9yLCBjb25zdCBGbG9hdAogICAgICAgICBpZiAobV9sYXllckNsb25l
cykgewogICAgICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fbGF5ZXJD
bG9uZXMtPmVuZCgpOwogICAgICAgICAgICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtX2xheWVyQ2xvbmVzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAg
ICAgICAgaXQtPnNlY29uZC0+c2V0Q29udGVudHMoMCk7CisgICAgICAgICAgICAgICAgaXQtPnZh
bHVlLT5zZXRDb250ZW50cygwKTsKICAgICAgICAgfQogICAgIH0KICAgICB1cGRhdGVEZWJ1Z0lu
ZGljYXRvcnMoKTsKQEAgLTE1MjYsNyArMTUyNiw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1
cGRhdGVDb250ZW50c0ltYWdlKCkKICAgICAgICAgaWYgKG1fY29udGVudHNMYXllckNsb25lcykg
ewogICAgICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fY29udGVudHNM
YXllckNsb25lcy0+ZW5kKCk7CiAgICAgICAgICAgICBmb3IgKExheWVyTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IG1fY29udGVudHNMYXllckNsb25lcy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KQotICAgICAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNldENvbnRlbnRzKG1fY29udGVudHNMYXll
ci0+Y29udGVudHMoKSk7CisgICAgICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRDb250ZW50cyht
X2NvbnRlbnRzTGF5ZXItPmNvbnRlbnRzKCkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAg
ICB1cGRhdGVDb250ZW50c1JlY3QoKTsKQEAgLTE1NzAsOCArMTU3MCw4IEBAIHZvaWQgR3JhcGhp
Y3NMYXllckNBOjp1cGRhdGVDb250ZW50c1JlY3QoKQogICAgIGlmIChtX2NvbnRlbnRzTGF5ZXJD
bG9uZXMpIHsKICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fY29udGVu
dHNMYXllckNsb25lcy0+ZW5kKCk7CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV9jb250ZW50c0xheWVyQ2xvbmVzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNldFBvc2l0aW9uKHBvaW50KTsKLSAgICAgICAg
ICAgIGl0LT5zZWNvbmQtPnNldEJvdW5kcyhyZWN0KTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+
c2V0UG9zaXRpb24ocG9pbnQpOworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRCb3VuZHMocmVj
dCk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0xNTg2LDggKzE1ODYsOCBAQCB2b2lkIEdyYXBo
aWNzTGF5ZXJDQTo6dXBkYXRlTWFza0xheWVyKCkKICAgICBpZiAoTGF5ZXJNYXAqIGxheWVyQ2xv
bmVNYXAgPSBtX2xheWVyQ2xvbmVzLmdldCgpKSB7CiAgICAgICAgIExheWVyTWFwOjpjb25zdF9p
dGVyYXRvciBlbmQgPSBsYXllckNsb25lTWFwLT5lbmQoKTsKICAgICAgICAgZm9yIChMYXllck1h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXllckNsb25lTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsgICAgICAgICAgICAKLSAgICAgICAgICAgIFBsYXRmb3JtQ0FMYXllciogbWFza0Ns
b25lID0gbWFza0xheWVyQ2xvbmVNYXAgPyBtYXNrTGF5ZXJDbG9uZU1hcC0+Z2V0KGl0LT5maXJz
dCkuZ2V0KCkgOiAwOwotICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0TWFzayhtYXNrQ2xvbmUp
OworICAgICAgICAgICAgUGxhdGZvcm1DQUxheWVyKiBtYXNrQ2xvbmUgPSBtYXNrTGF5ZXJDbG9u
ZU1hcCA/IG1hc2tMYXllckNsb25lTWFwLT5nZXQoaXQtPmtleSkuZ2V0KCkgOiAwOworICAgICAg
ICAgICAgaXQtPnZhbHVlLT5zZXRNYXNrKG1hc2tDbG9uZSk7CiAgICAgICAgIH0KICAgICB9CiB9
CkBAIC0xNjUxLDEzICsxNjUxLDEzIEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVMYXll
ckFuaW1hdGlvbnMoKQogICAgIGlmIChtX2FuaW1hdGlvbnNUb1Byb2Nlc3Muc2l6ZSgpKSB7CiAg
ICAgICAgIEFuaW1hdGlvbnNUb1Byb2Nlc3NNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fYW5p
bWF0aW9uc1RvUHJvY2Vzcy5lbmQoKTsKICAgICAgICAgZm9yIChBbmltYXRpb25zVG9Qcm9jZXNz
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fYW5pbWF0aW9uc1RvUHJvY2Vzcy5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgY3VyckFuaW1hdGlv
bk5hbWUgPSBpdC0+Zmlyc3Q7CisgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGN1cnJBbmltYXRp
b25OYW1lID0gaXQtPmtleTsKICAgICAgICAgICAgIEFuaW1hdGlvbnNNYXA6Oml0ZXJhdG9yIGFu
aW1hdGlvbkl0ID0gbV9ydW5uaW5nQW5pbWF0aW9ucy5maW5kKGN1cnJBbmltYXRpb25OYW1lKTsK
ICAgICAgICAgICAgIGlmIChhbmltYXRpb25JdCA9PSBtX3J1bm5pbmdBbmltYXRpb25zLmVuZCgp
KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBjb25zdCBBbmltYXRp
b25Qcm9jZXNzaW5nQWN0aW9uJiBwcm9jZXNzaW5nSW5mbyA9IGl0LT5zZWNvbmQ7Ci0gICAgICAg
ICAgICBjb25zdCBWZWN0b3I8TGF5ZXJQcm9wZXJ0eUFuaW1hdGlvbj4mIGFuaW1hdGlvbnMgPSBh
bmltYXRpb25JdC0+c2Vjb25kOworICAgICAgICAgICAgY29uc3QgQW5pbWF0aW9uUHJvY2Vzc2lu
Z0FjdGlvbiYgcHJvY2Vzc2luZ0luZm8gPSBpdC0+dmFsdWU7CisgICAgICAgICAgICBjb25zdCBW
ZWN0b3I8TGF5ZXJQcm9wZXJ0eUFuaW1hdGlvbj4mIGFuaW1hdGlvbnMgPSBhbmltYXRpb25JdC0+
dmFsdWU7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFuaW1hdGlvbnMuc2l6
ZSgpOyArK2kpIHsKICAgICAgICAgICAgICAgICBjb25zdCBMYXllclByb3BlcnR5QW5pbWF0aW9u
JiBjdXJyQW5pbWF0aW9uID0gYW5pbWF0aW9uc1tpXTsKICAgICAgICAgICAgICAgICBzd2l0Y2gg
KHByb2Nlc3NpbmdJbmZvLmFjdGlvbikgewpAQCAtMTY4OSw3ICsxNjg5LDcgQEAgdm9pZCBHcmFw
aGljc0xheWVyQ0E6OnVwZGF0ZUxheWVyQW5pbWF0aW9ucygpCiAgICAgICAgICAgICAgICAgYW5p
bWF0aW9ucy5hcHBlbmQocGVuZGluZ0FuaW1hdGlvbik7CiAgICAgICAgICAgICAgICAgbV9ydW5u
aW5nQW5pbWF0aW9ucy5hZGQocGVuZGluZ0FuaW1hdGlvbi5tX25hbWUsIGFuaW1hdGlvbnMpOwog
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBWZWN0b3I8TGF5ZXJQcm9wZXJ0
eUFuaW1hdGlvbj4mIGFuaW1hdGlvbnMgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgICAgIFZl
Y3RvcjxMYXllclByb3BlcnR5QW5pbWF0aW9uPiYgYW5pbWF0aW9ucyA9IGl0LT52YWx1ZTsKICAg
ICAgICAgICAgICAgICBhbmltYXRpb25zLmFwcGVuZChwZW5kaW5nQW5pbWF0aW9uKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQpAQCAtMTcxNCwxMSArMTcxNCwxMSBAQCB2b2lkIEdyYXBoaWNz
TGF5ZXJDQTo6c2V0QW5pbWF0aW9uT25MYXllcihQbGF0Zm9ybUNBQW5pbWF0aW9uKiBjYUFuaW0s
IEFuaW1hdGVkUAogICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJD
bG9uZU1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAg
ICAvLyBTa2lwIGltbWVkaWF0ZSByZXBsaWNhcywgc2luY2UgdGhleSBtb3ZlIHdpdGggdGhlIG9y
aWdpbmFsLgotICAgICAgICAgICAgaWYgKG1fcmVwbGljYUxheWVyICYmIGlzUmVwbGljYXRlZFJv
b3RDbG9uZShpdC0+Zmlyc3QpKQorICAgICAgICAgICAgaWYgKG1fcmVwbGljYUxheWVyICYmIGlz
UmVwbGljYXRlZFJvb3RDbG9uZShpdC0+a2V5KSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
IAotICAgICAgICAgICAgaXQtPnNlY29uZC0+cmVtb3ZlQW5pbWF0aW9uRm9yS2V5KGFuaW1hdGlv
bklEKTsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPmFkZEFuaW1hdGlvbkZvcktleShhbmltYXRp
b25JRCwgY2FBbmltKTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+cmVtb3ZlQW5pbWF0aW9uRm9y
S2V5KGFuaW1hdGlvbklEKTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+YWRkQW5pbWF0aW9uRm9y
S2V5KGFuaW1hdGlvbklELCBjYUFuaW0pOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMTc1Mywx
MCArMTc1MywxMCBAQCBib29sIEdyYXBoaWNzTGF5ZXJDQTo6cmVtb3ZlQ0FBbmltYXRpb25Gcm9t
TGF5ZXIoQW5pbWF0ZWRQcm9wZXJ0eUlEIHByb3BlcnR5LCBjbwogICAgICAgICBMYXllck1hcDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAo
TGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICAvLyBTa2lwIGltbWVkaWF0ZSByZXBsaWNhcywg
c2luY2UgdGhleSBtb3ZlIHdpdGggdGhlIG9yaWdpbmFsLgotICAgICAgICAgICAgaWYgKG1fcmVw
bGljYUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9uZShpdC0+Zmlyc3QpKQorICAgICAgICAg
ICAgaWYgKG1fcmVwbGljYUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9uZShpdC0+a2V5KSkK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgaXQtPnNlY29uZCAtPnJl
bW92ZUFuaW1hdGlvbkZvcktleShhbmltYXRpb25JRCk7CisgICAgICAgICAgICBpdC0+dmFsdWUt
PnJlbW92ZUFuaW1hdGlvbkZvcktleShhbmltYXRpb25JRCk7CiAgICAgICAgIH0KICAgICB9CiAg
ICAgcmV0dXJuIHRydWU7CkBAIC0xNzg1LDkgKzE3ODUsOSBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJD
QTo6cGF1c2VDQUFuaW1hdGlvbk9uTGF5ZXIoQW5pbWF0ZWRQcm9wZXJ0eUlEIHByb3BlcnR5LCBj
b25zdAogICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1h
cC0+ZW5kKCk7CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5
ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICAvLyBT
a2lwIGltbWVkaWF0ZSByZXBsaWNhcywgc2luY2UgdGhleSBtb3ZlIHdpdGggdGhlIG9yaWdpbmFs
LgotICAgICAgICAgICAgaWYgKG1fcmVwbGljYUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9u
ZShpdC0+Zmlyc3QpKQorICAgICAgICAgICAgaWYgKG1fcmVwbGljYUxheWVyICYmIGlzUmVwbGlj
YXRlZFJvb3RDbG9uZShpdC0+a2V5KSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgIGl0LT5zZWNvbmQtPmFkZEFuaW1hdGlvbkZvcktleShhbmltYXRpb25JRCwgbmV3QW5p
bS5nZXQoKSk7CisgICAgICAgICAgICBpdC0+dmFsdWUtPmFkZEFuaW1hdGlvbkZvcktleShhbmlt
YXRpb25JRCwgbmV3QW5pbS5nZXQoKSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0yMzExLDgg
KzIzMTEsOCBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c3VzcGVuZEFuaW1hdGlvbnMoZG91Ymxl
IHRpbWUpCiAgICAgaWYgKExheWVyTWFwKiBsYXllckNsb25lTWFwID0gcHJpbWFyeUxheWVyQ2xv
bmVzKCkpIHsKICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxheWVyQ2xv
bmVNYXAtPmVuZCgpOwogICAgICAgICBmb3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9
IGxheWVyQ2xvbmVNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAg
aXQtPnNlY29uZC0+c2V0U3BlZWQoMCk7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRUaW1l
T2Zmc2V0KHQpOworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRTcGVlZCgwKTsKKyAgICAgICAg
ICAgIGl0LT52YWx1ZS0+c2V0VGltZU9mZnNldCh0KTsKICAgICAgICAgfQogICAgIH0KIH0KQEAg
LTIzMjYsOCArMjMyNiw4IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpyZXN1bWVBbmltYXRpb25z
KCkKICAgICBpZiAoTGF5ZXJNYXAqIGxheWVyQ2xvbmVNYXAgPSBwcmltYXJ5TGF5ZXJDbG9uZXMo
KSkgewogICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1h
cC0+ZW5kKCk7CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5
ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBpdC0+
c2Vjb25kLT5zZXRTcGVlZCgxKTsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNldFRpbWVPZmZz
ZXQoMCk7CisgICAgICAgICAgICBpdC0+dmFsdWUtPnNldFNwZWVkKDEpOworICAgICAgICAgICAg
aXQtPnZhbHVlLT5zZXRUaW1lT2Zmc2V0KDApOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMjUz
NywxMyArMjUzNywxMyBAQCBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gR3JhcGhpY3NMYXll
ckNBOjpmaW5kT3JNYWtlQ2xvbmUoQ2xvbmVJRCBjbG9uZUlELCBQbAogICAgIExheWVyTWFwOjpB
ZGRSZXN1bHQgYWRkUmVzdWx0ID0gY2xvbmVzLT5hZGQoY2xvbmVJRCwgZHVtbXkpOwogICAgIGlm
ICghYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKICAgICAgICAgLy8gVmFsdWUgd2FzIG5vdCBhZGRl
ZCwgc28gaXQgZXhpc3RzIGFscmVhZHkuCi0gICAgICAgIHJlc3VsdExheWVyID0gYWRkUmVzdWx0
Lml0ZXJhdG9yLT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIHJlc3VsdExheWVyID0gYWRkUmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKICAgICB9IGVsc2UgewogICAgICAgICByZXN1bHRMYXll
ciA9IGNsb25lTGF5ZXIoc291cmNlTGF5ZXIsIGNsb25lTGV2ZWwpOwogI2lmbmRlZiBOREVCVUcK
ICAgICAgICAgcmVzdWx0TGF5ZXItPnNldE5hbWUoU3RyaW5nOjpmb3JtYXQoIkNsb25lICVkIG9m
IGxheWVyICVwIiwgY2xvbmVJRFswVV0sIHNvdXJjZUxheWVyLT5wbGF0Zm9ybUxheWVyKCkpKTsK
ICNlbmRpZgotICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IHJlc3VsdExheWVy
OworICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gcmVzdWx0TGF5ZXI7CiAgICAg
fQogCiAgICAgcmV0dXJuIHJlc3VsdExheWVyOwpAQCAtMjczNSw5ICsyNzM1LDkgQEAgdm9pZCBH
cmFwaGljc0xheWVyQ0E6OnNldE9wYWNpdHlJbnRlcm5hbChmbG9hdCBhY2N1bXVsYXRlZE9wYWNp
dHkpCiAgICAgaWYgKGxheWVyQ2xvbmVNYXApIHsKICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IGxheWVyQ2xvbmVNYXAtPmVuZCgpOwogICAgICAgICBmb3IgKExheWVyTWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IGxheWVyQ2xvbmVNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgewotICAgICAgICAgICAgaWYgKG1fcmVwbGljYUxheWVyICYmIGlzUmVwbGljYXRlZFJv
b3RDbG9uZShpdC0+Zmlyc3QpKQorICAgICAgICAgICAgaWYgKG1fcmVwbGljYUxheWVyICYmIGlz
UmVwbGljYXRlZFJvb3RDbG9uZShpdC0+a2V5KSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNldE9wYWNpdHkobV9vcGFjaXR5KTsKKyAgICAgICAg
ICAgIGl0LT52YWx1ZS0+c2V0T3BhY2l0eShtX29wYWNpdHkpOwogICAgICAgICB9CiAgICAgfQog
fQpAQCAtMjc0OSwxMCArMjc0OSwxMCBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlT3Bh
Y2l0eU9uTGF5ZXIoKQogICAgIGlmIChMYXllck1hcCogbGF5ZXJDbG9uZU1hcCA9IHByaW1hcnlM
YXllckNsb25lcygpKSB7CiAgICAgICAgIExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBs
YXllckNsb25lTWFwLT5lbmQoKTsKICAgICAgICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBsYXllckNsb25lTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgICAgIGlmIChtX3JlcGxpY2FMYXllciAmJiBpc1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQtPmZp
cnN0KSkKKyAgICAgICAgICAgIGlmIChtX3JlcGxpY2FMYXllciAmJiBpc1JlcGxpY2F0ZWRSb290
Q2xvbmUoaXQtPmtleSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAg
IGl0LT5zZWNvbmQtPnNldE9wYWNpdHkobV9vcGFjaXR5KTsKKyAgICAgICAgICAgIGl0LT52YWx1
ZS0+c2V0T3BhY2l0eShtX29wYWNpdHkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9UaWxlQ2Fj
aGUubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvVGlsZUNhY2hl
Lm1tCmluZGV4IGE4ZWQ0YWFjYTBiMDY4ZTRlNzYwMzY4NDYyYWMxYWQ1MjJmZGVmOTYuLjcwNzIy
MDQyMGU3OGIwNTMwMmNjMDM2MmYxMjI1MjU1NTQyOGE4ODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9UaWxlQ2FjaGUubW0KKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1RpbGVDYWNoZS5tbQpAQCAtOTYsNyAr
OTYsNyBAQCB2b2lkIFRpbGVDYWNoZTo6dGlsZUNhY2hlTGF5ZXJCb3VuZHNDaGFuZ2VkKCkKIHZv
aWQgVGlsZUNhY2hlOjpzZXROZWVkc0Rpc3BsYXkoKQogewogICAgIGZvciAoVGlsZU1hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCksIGVuZCA9IG1fdGlsZXMuZW5kKCk7IGl0
ICE9IGVuZDsgKytpdCkKLSAgICAgICAgW2l0LT5zZWNvbmQuZ2V0KCkgc2V0TmVlZHNEaXNwbGF5
XTsKKyAgICAgICAgW2l0LT52YWx1ZS5nZXQoKSBzZXROZWVkc0Rpc3BsYXldOwogfQogCiB2b2lk
IFRpbGVDYWNoZTo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCkBA
IC0xNzMsOSArMTczLDkgQEAgdm9pZCBUaWxlQ2FjaGU6OnNldFNjYWxlKENHRmxvYXQgc2NhbGUp
CiAgICAgcmV2YWxpZGF0ZVRpbGVzKCk7CiAKICAgICBmb3IgKFRpbGVNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV90aWxlcy5iZWdpbigpLCBlbmQgPSBtX3RpbGVzLmVuZCgpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKLSAgICAgICAgW2l0LT5zZWNvbmQuZ2V0KCkgc2V0Q29udGVudHNTY2FsZTpkZXZp
Y2VTY2FsZUZhY3Rvcl07CisgICAgICAgIFtpdC0+dmFsdWUuZ2V0KCkgc2V0Q29udGVudHNTY2Fs
ZTpkZXZpY2VTY2FsZUZhY3Rvcl07CiAKLSAgICAgICAgSW50UmVjdCB0aWxlUmVjdCA9IHJlY3RG
b3JUaWxlSW5kZXgoaXQtPmZpcnN0KTsKKyAgICAgICAgSW50UmVjdCB0aWxlUmVjdCA9IHJlY3RG
b3JUaWxlSW5kZXgoaXQtPmtleSk7CiAgICAgICAgIEZsb2F0UmVjdCBzY2FsZWRUaWxlUmVjdCA9
IHRpbGVSZWN0OwogCiAgICAgICAgIHNjYWxlZFRpbGVSZWN0LnNjYWxlKDEgLyBtX3NjYWxlKTsK
QEAgLTE5NSw3ICsxOTUsNyBAQCB2b2lkIFRpbGVDYWNoZTo6c2V0QWNjZWxlcmF0ZXNEcmF3aW5n
KGJvb2wgYWNjZWxlcmF0ZXNEcmF3aW5nKQogICAgIG1fYWNjZWxlcmF0ZXNEcmF3aW5nID0gYWNj
ZWxlcmF0ZXNEcmF3aW5nOwogCiAgICAgZm9yIChUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9
IG1fdGlsZXMuYmVnaW4oKSwgZW5kID0gbV90aWxlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQot
ICAgICAgICBbaXQtPnNlY29uZC5nZXQoKSBzZXRBY2NlbGVyYXRlc0RyYXdpbmc6bV9hY2NlbGVy
YXRlc0RyYXdpbmddOworICAgICAgICBbaXQtPnZhbHVlLmdldCgpIHNldEFjY2VsZXJhdGVzRHJh
d2luZzptX2FjY2VsZXJhdGVzRHJhd2luZ107CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShhY2Nl
bGVyYXRlc0RyYXdpbmcpOwogI2VuZGlmCkBAIC0yNDUsNyArMjQ1LDcgQEAgdm9pZCBUaWxlQ2Fj
aGU6OnNldFRpbGVEZWJ1Z0JvcmRlcldpZHRoKGZsb2F0IGJvcmRlcldpZHRoKQogCiAgICAgbV90
aWxlRGVidWdCb3JkZXJXaWR0aCA9IGJvcmRlcldpZHRoOwogICAgIGZvciAoVGlsZU1hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCksIGVuZCA9IG1fdGlsZXMuZW5kKCk7IGl0
ICE9IGVuZDsgKytpdCkKLSAgICAgICAgW2l0LT5zZWNvbmQuZ2V0KCkgc2V0Qm9yZGVyV2lkdGg6
bV90aWxlRGVidWdCb3JkZXJXaWR0aF07CisgICAgICAgIFtpdC0+dmFsdWUuZ2V0KCkgc2V0Qm9y
ZGVyV2lkdGg6bV90aWxlRGVidWdCb3JkZXJXaWR0aF07CiB9CiAKIHZvaWQgVGlsZUNhY2hlOjpz
ZXRUaWxlRGVidWdCb3JkZXJDb2xvcihDR0NvbG9yUmVmIGJvcmRlckNvbG9yKQpAQCAtMjU1LDcg
KzI1NSw3IEBAIHZvaWQgVGlsZUNhY2hlOjpzZXRUaWxlRGVidWdCb3JkZXJDb2xvcihDR0NvbG9y
UmVmIGJvcmRlckNvbG9yKQogCiAgICAgbV90aWxlRGVidWdCb3JkZXJDb2xvciA9IGJvcmRlckNv
bG9yOwogICAgIGZvciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2lu
KCksIGVuZCA9IG1fdGlsZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgW2l0LT5z
ZWNvbmQuZ2V0KCkgc2V0Qm9yZGVyQ29sb3I6bV90aWxlRGVidWdCb3JkZXJDb2xvci5nZXQoKV07
CisgICAgICAgIFtpdC0+dmFsdWUuZ2V0KCkgc2V0Qm9yZGVyQ29sb3I6bV90aWxlRGVidWdCb3Jk
ZXJDb2xvci5nZXQoKV07CiB9CiAKIEludFJlY3QgVGlsZUNhY2hlOjpib3VuZHMoKSBjb25zdApA
QCAtMzYxLDkgKzM2MSw5IEBAIHZvaWQgVGlsZUNhY2hlOjpyZXZhbGlkYXRlVGlsZXMoKQogICAg
IFZlY3RvcjxUaWxlSW5kZXg+IHRpbGVzVG9SZW1vdmU7CiAKICAgICBmb3IgKFRpbGVNYXA6Oml0
ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpLCBlbmQgPSBtX3RpbGVzLmVuZCgpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKLSAgICAgICAgY29uc3QgVGlsZUluZGV4JiB0aWxlSW5kZXggPSBpdC0+Zmly
c3Q7CisgICAgICAgIGNvbnN0IFRpbGVJbmRleCYgdGlsZUluZGV4ID0gaXQtPmtleTsKIAotICAg
ICAgICBXZWJUaWxlTGF5ZXIqIHRpbGVMYXllciA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAg
IFdlYlRpbGVMYXllciogdGlsZUxheWVyID0gaXQtPnZhbHVlLmdldCgpOwogCiAgICAgICAgIGlm
ICghcmVjdEZvclRpbGVJbmRleCh0aWxlSW5kZXgpLmludGVyc2VjdHModGlsZUNvdmVyYWdlUmVj
dCkpIHsKICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGlzIGxheWVyLgpAQCAtMzkxLDcgKzM5MSw3
IEBAIHZvaWQgVGlsZUNhY2hlOjpyZXZhbGlkYXRlVGlsZXMoKQogICAgICAgICAgICAgVGlsZUlu
ZGV4IHRpbGVJbmRleCh4LCB5KTsKIAogICAgICAgICAgICAgSW50UmVjdCB0aWxlUmVjdCA9IHJl
Y3RGb3JUaWxlSW5kZXgodGlsZUluZGV4KTsKLSAgICAgICAgICAgIFJldGFpblB0cjxXZWJUaWxl
TGF5ZXI+JiB0aWxlTGF5ZXIgPSBtX3RpbGVzLmFkZCh0aWxlSW5kZXgsIDApLml0ZXJhdG9yLT5z
ZWNvbmQ7CisgICAgICAgICAgICBSZXRhaW5QdHI8V2ViVGlsZUxheWVyPiYgdGlsZUxheWVyID0g
bV90aWxlcy5hZGQodGlsZUluZGV4LCAwKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgICAgICBp
ZiAoIXRpbGVMYXllcikgewogICAgICAgICAgICAgICAgIHRpbGVMYXllciA9IGNyZWF0ZVRpbGVM
YXllcih0aWxlUmVjdCk7CiAgICAgICAgICAgICAgICAgW21fdGlsZUNvbnRhaW5lckxheWVyLmdl
dCgpIGFkZFN1YmxheWVyOnRpbGVMYXllci5nZXQoKV07CkBAIC00MTEsNyArNDExLDcgQEAgdm9p
ZCBUaWxlQ2FjaGU6OnJldmFsaWRhdGVUaWxlcygpCiAKICAgICBtX3RpbGVDb3ZlcmFnZVJlY3Qg
PSBJbnRSZWN0KCk7CiAgICAgZm9yIChUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVn
aW4oKSwgZW5kID0gbV90aWxlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGNv
bnN0IFRpbGVJbmRleCYgdGlsZUluZGV4ID0gaXQtPmZpcnN0OworICAgICAgICBjb25zdCBUaWxl
SW5kZXgmIHRpbGVJbmRleCA9IGl0LT5rZXk7CiAKICAgICAgICAgbV90aWxlQ292ZXJhZ2VSZWN0
LnVuaXRlKHJlY3RGb3JUaWxlSW5kZXgodGlsZUluZGV4KSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldp
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1D
QUxheWVyV2luLmNwcAppbmRleCA0OGIyMGQwYjhiZDI0MmFiNTQ5YjhmZTQ0MmRmNDRhYjM2NzJl
Yjg1Li43MDE2OGIyMTA0ZGIzNjlkYTA3NTdhMTE0NDYyMjExMWJjMzA2MWYwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVy
V2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxh
dGZvcm1DQUxheWVyV2luLmNwcApAQCAtMTY3LDcgKzE2Nyw3IEBAIHZvaWQgUGxhdGZvcm1DQUxh
eWVyOjphbmltYXRpb25TdGFydGVkKENGVGltZUludGVydmFsIGJlZ2luVGltZSkKIAogICAgIEhh
c2hNYXA8U3RyaW5nLCBSZWZQdHI8UGxhdGZvcm1DQUFuaW1hdGlvbj4gPjo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gbV9hbmltYXRpb25zLmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIFJl
ZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiA+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fYW5pbWF0
aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPnNldEFj
dHVhbFN0YXJ0VGltZUlmTmVlZGVkKGNhY2ZCZWdpblRpbWUpOworICAgICAgICBpdC0+dmFsdWUt
PnNldEFjdHVhbFN0YXJ0VGltZUlmTmVlZGVkKGNhY2ZCZWdpblRpbWUpOwogCiAgICAgaWYgKG1f
b3duZXIpCiAgICAgICAgIG1fb3duZXItPnBsYXRmb3JtQ0FMYXllckFuaW1hdGlvblN0YXJ0ZWQo
YmVnaW5UaW1lKTsKQEAgLTE3Nyw4ICsxNzcsOCBAQCBzdGF0aWMgdm9pZCByZXN1Ym1pdEFsbEFu
aW1hdGlvbnMoUGxhdGZvcm1DQUxheWVyKiBsYXllcikKIHsKICAgICBIYXNoTWFwPFN0cmluZywg
UmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+ID46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxheWVy
LT5hbmltYXRpb25zKCkuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPFN0cmluZywgUmVmUHRyPFBs
YXRmb3JtQ0FBbmltYXRpb24+ID46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXItPmFuaW1hdGlv
bnMoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgUmV0YWluUHRyPENGU3Ry
aW5nUmVmPiBzKEFkb3B0Q0YsIGl0LT5maXJzdC5jcmVhdGVDRlN0cmluZygpKTsKLSAgICAgICAg
Q0FDRkxheWVyQWRkQW5pbWF0aW9uKGxheWVyLT5wbGF0Zm9ybUxheWVyKCksIHMuZ2V0KCksIGl0
LT5zZWNvbmQtPnBsYXRmb3JtQW5pbWF0aW9uKCkpOworICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJp
bmdSZWY+IHMoQWRvcHRDRiwgaXQtPmtleS5jcmVhdGVDRlN0cmluZygpKTsKKyAgICAgICAgQ0FD
RkxheWVyQWRkQW5pbWF0aW9uKGxheWVyLT5wbGF0Zm9ybUxheWVyKCksIHMuZ2V0KCksIGl0LT52
YWx1ZS0+cGxhdGZvcm1BbmltYXRpb24oKSk7CiAgICAgfQogfQogCkBAIC0zMjgsNyArMzI4LDcg
QEAgUGFzc1JlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBQbGF0Zm9ybUNBTGF5ZXI6OmFuaW1h
dGlvbkZvcktleShjb25zdCBTdHJpbmcmIGsKICAgICBpZiAoaXQgPT0gbV9hbmltYXRpb25zLmVu
ZCgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgIHJl
dHVybiBpdC0+dmFsdWU7CiB9CiAKIFBsYXRmb3JtQ0FMYXllciogUGxhdGZvcm1DQUxheWVyOjpt
YXNrKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0ZvbnRDYWNoZUNocm9taXVtV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUNocm9taXVtV2luLmNwcAppbmRleCA5Zjg5
OThjZGFmZDgxMmUxODllNjVhMjg1ZmI2YzQ3NTMwYTQ2ZTBjLi4wYzg2NTUwMGRlODhjM2Q4ZGM2
MWZiNWM4MzFkOWVjMzRlNDEwZjcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2FjaGVDaHJvbWl1bVdpbi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENhY2hlQ2hyb21pdW1XaW4u
Y3BwCkBAIC0yMjMsMTAgKzIyMywxMCBAQCBzdGF0aWMgYm9vbCBMb29rdXBBbHROYW1lKGNvbnN0
IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBhbHROYW1lKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICBzdGF0aWMgaW50IHN5c3RlbUNwID0gOjpHZXRBQ1AoKTsKLSAgICBpbnQgZm9udENwID0g
aXRlci0+c2Vjb25kLT5jb2RlUGFnZTsKKyAgICBpbnQgZm9udENwID0gaXRlci0+dmFsdWUtPmNv
ZGVQYWdlOwogCiAgICAgaWYgKChpc0FzY2lpICYmIHN5c3RlbUNwID09IGZvbnRDcCkgfHwgKCFp
c0FzY2lpICYmIHN5c3RlbUNwICE9IGZvbnRDcCkpIHsKLSAgICAgICAgYWx0TmFtZSA9IFN0cmlu
ZyhpdGVyLT5zZWNvbmQtPm5hbWUpOworICAgICAgICBhbHROYW1lID0gU3RyaW5nKGl0ZXItPnZh
bHVlLT5uYW1lKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0yNzcsNyArMjc3
LDcgQEAgc3RhdGljIGJvb2wgZm9udENvbnRhaW5zQ2hhcmFjdGVyKGNvbnN0IEZvbnRQbGF0Zm9y
bURhdGEqIGZvbnREYXRhLAogCiAgICAgSGFzaE1hcDxjb25zdCB3Y2hhcl90KiwgaWN1OjpVbmlj
b2RlU2V0Kj46Oml0ZXJhdG9yIGl0ID0gZm9udENtYXBDYWNoZS0+ZmluZChmYW1pbHkpOwogICAg
IGlmIChpdCAhPSBmb250Q21hcENhY2hlLT5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNv
bmQtPmNvbnRhaW5zKGNoYXJhY3Rlcik7CisgICAgICAgIHJldHVybiBpdC0+dmFsdWUtPmNvbnRh
aW5zKGNoYXJhY3Rlcik7CiAKICAgICBIRk9OVCBoZm9udCA9IGZvbnREYXRhLT5oZm9udCgpOwog
ICAgIEhXbmREQyBoZGMoMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9Gb250VXRpbHNDaHJvbWl1bVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250VXRpbHNDaHJvbWl1bVdpbi5jcHAKaW5k
ZXggY2M1MmM1MmViNzA1NzgyZGUxZjk2OGRjODAzYzQ1ZTRmMmFlMjI5Mi4uMmZmYWJiYjc2ODJk
ZWE4YTBlMWZjOWZkYWVlOWM3MTgwNWE0MmEwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFV0aWxzQ2hyb21pdW1XaW4uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRVdGlsc0Nocm9t
aXVtV2luLmNwcApAQCAtNDE1LDcgKzQxNSw3IEBAIGJvb2wgZ2V0RGVyaXZlZEZvbnREYXRhKGNv
bnN0IFVDaGFyKiBmYW1pbHksCiAgICAgICAgIC8vIGNoZWNrIGl0IGFnYWluc3Qgd2hhdCB3ZSBh
Y3R1YWxseSB3YW50IChhcyBpcyBkb25lIGluCiAgICAgICAgIC8vIEZvbnRDYWNoZVdpbi5jcHAp
CiAgICAgICAgIEZvbnREYXRhQ2FjaGU6OkFkZFJlc3VsdCBlbnRyeSA9IGZvbnREYXRhQ2FjaGUu
YWRkKGZvbnRLZXksIEZvbnREYXRhKCkpOwotICAgICAgICBkZXJpdmVkID0gJmVudHJ5Lml0ZXJh
dG9yLT5zZWNvbmQ7CisgICAgICAgIGRlcml2ZWQgPSAmZW50cnkuaXRlcmF0b3ItPnZhbHVlOwog
ICAgICAgICBkZXJpdmVkLT5oZm9udCA9IENyZWF0ZUZvbnRJbmRpcmVjdChsb2dmb250KTsKICAg
ICAgICAgLy8gR2V0QXNjZW50IG1heSByZXR1cm4ga1VuZGVmaW5lZEFzY2VudCwgYnV0IHdlIHN0
aWxsIHdhbnQgdG8KICAgICAgICAgLy8gY2FjaGUgaXQgc28gdGhhdCB3ZSB3b24ndCBoYXZlIHRv
IGNhbGwgQ3JlYXRlRm9udEluZGlyZWN0IG9uY2UKQEAgLTQyMyw3ICs0MjMsNyBAQCBib29sIGdl
dERlcml2ZWRGb250RGF0YShjb25zdCBVQ2hhciogZmFtaWx5LAogICAgICAgICBkZXJpdmVkLT5h
c2NlbnQgPSBnZXRBc2NlbnQoZGVyaXZlZC0+aGZvbnQpOwogICAgICAgICBkZXJpdmVkLT5zcGFj
ZUdseXBoID0gZ2V0U3BhY2VHbHlwaChkZXJpdmVkLT5oZm9udCk7CiAgICAgfSBlbHNlIHsKLSAg
ICAgICAgZGVyaXZlZCA9ICZpdGVyLT5zZWNvbmQ7CisgICAgICAgIGRlcml2ZWQgPSAmaXRlci0+
dmFsdWU7CiAgICAgICAgIC8vIExhc3QgdGltZSwgR2V0QXNjZW50IGZhaWxlZCBzbyB0aGF0IG9u
bHkgSEZPTlQgd2FzCiAgICAgICAgIC8vIGNhY2hlZC4gVHJ5IG9uY2UgbW9yZSBhc3N1bWluZyB0
aGF0IFRyeVByZWxvYWRGb250CiAgICAgICAgIC8vIHdhcyBjYWxsZWQgYnkgYSBjYWxsZXIgYmV0
d2VlbiBjYWxscy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCmluZGV4IDVkYzY1ZWM1
YTIwODFhYWQ0NDc3ZDMyODI5Mzk0YTM2MmQwMzc0ZWIuLjJjM2QwY2Q0ZWRjMmNhODEzODcyYjNi
Yjk5MjMzYWY4MTM2YTA1YWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcApAQCAt
MjI1LDkgKzIyNSw5IEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1Rv
KENDTGF5ZXJJbXBsKiBsYXllcikKICAgICBWZWN0b3I8VXBkYXRhYmxlVGlsZSo+IGludmFsaWRU
aWxlczsKIAogICAgIGZvciAoQ0NMYXllclRpbGluZ0RhdGE6OlRpbGVNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ZXIgPSBtX3RpbGVyLT50aWxlcygpLmJlZ2luKCk7IGl0ZXIgIT0gbV90aWxlci0+dGls
ZXMoKS5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIGludCBpID0gaXRlci0+Zmlyc3QuZmlyc3Q7
Ci0gICAgICAgIGludCBqID0gaXRlci0+Zmlyc3Quc2Vjb25kOwotICAgICAgICBVcGRhdGFibGVU
aWxlKiB0aWxlID0gc3RhdGljX2Nhc3Q8VXBkYXRhYmxlVGlsZSo+KGl0ZXItPnNlY29uZC5nZXQo
KSk7CisgICAgICAgIGludCBpID0gaXRlci0+a2V5LmZpcnN0OworICAgICAgICBpbnQgaiA9IGl0
ZXItPmtleS5zZWNvbmQ7CisgICAgICAgIFVwZGF0YWJsZVRpbGUqIHRpbGUgPSBzdGF0aWNfY2Fz
dDxVcGRhdGFibGVUaWxlKj4oaXRlci0+dmFsdWUuZ2V0KCkpOwogICAgICAgICAvLyBGSVhNRTog
VGhpcyBzaG91bGQgbm90IGV2ZXIgYmUgbnVsbC4KICAgICAgICAgaWYgKCF0aWxlKQogICAgICAg
ICAgICAgY29udGludWU7CkBAIC0yNTcsNyArMjU3LDcgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21p
dW06OnNldExheWVyVHJlZUhvc3QoQ0NMYXllclRyZWVIb3N0KiBob3N0KQogewogICAgIGlmICho
b3N0ICYmIGhvc3QgIT0gbGF5ZXJUcmVlSG9zdCgpKSB7CiAgICAgICAgIGZvciAoQ0NMYXllclRp
bGluZ0RhdGE6OlRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX3RpbGVyLT50aWxlcygp
LmJlZ2luKCk7IGl0ZXIgIT0gbV90aWxlci0+dGlsZXMoKS5lbmQoKTsgKytpdGVyKSB7Ci0gICAg
ICAgICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gc3RhdGljX2Nhc3Q8VXBkYXRhYmxlVGlsZSo+
KGl0ZXItPnNlY29uZC5nZXQoKSk7CisgICAgICAgICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0g
c3RhdGljX2Nhc3Q8VXBkYXRhYmxlVGlsZSo+KGl0ZXItPnZhbHVlLmdldCgpKTsKICAgICAgICAg
ICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBub3QgZXZlciBiZSBudWxsLgogICAgICAgICAgICAg
aWYgKCF0aWxlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMzI1LDcgKzMyNSw3IEBA
IHZvaWQgVGlsZWRMYXllckNocm9taXVtOjppbnZhbGlkYXRlQ29udGVudFJlY3QoY29uc3QgSW50
UmVjdCYgY29udGVudFJlY3QpCiAgICAgICAgIHJldHVybjsKIAogICAgIGZvciAoQ0NMYXllclRp
bGluZ0RhdGE6OlRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX3RpbGVyLT50aWxlcygp
LmJlZ2luKCk7IGl0ZXIgIT0gbV90aWxlci0+dGlsZXMoKS5lbmQoKTsgKytpdGVyKSB7Ci0gICAg
ICAgIFVwZGF0YWJsZVRpbGUqIHRpbGUgPSBzdGF0aWNfY2FzdDxVcGRhdGFibGVUaWxlKj4oaXRl
ci0+c2Vjb25kLmdldCgpKTsKKyAgICAgICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHN0YXRpY19j
YXN0PFVwZGF0YWJsZVRpbGUqPihpdGVyLT52YWx1ZS5nZXQoKSk7CiAgICAgICAgIEFTU0VSVCh0
aWxlKTsKICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIG5vdCBldmVyIGJlIG51bGwuCiAg
ICAgICAgIGlmICghdGlsZSkKQEAgLTY1NSw3ICs2NTUsNyBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJv
bWl1bTo6c2V0VGV4dHVyZVByaW9yaXRpZXMoY29uc3QgQ0NQcmlvcml0eUNhbGN1bGF0b3ImIHBy
aW9yaQogCiAgICAgLy8gTm93IHVwZGF0ZSBwcmlvcml0aWVzIG9uIGFsbCB0aWxlcyB3ZSBoYXZl
IGluIHRoZSBsYXllciwgbm8gbWF0dGVyIHdoZXJlIHRoZXkgYXJlLgogICAgIGZvciAoQ0NMYXll
clRpbGluZ0RhdGE6OlRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX3RpbGVyLT50aWxl
cygpLmJlZ2luKCk7IGl0ZXIgIT0gbV90aWxlci0+dGlsZXMoKS5lbmQoKTsgKytpdGVyKSB7Ci0g
ICAgICAgIFVwZGF0YWJsZVRpbGUqIHRpbGUgPSBzdGF0aWNfY2FzdDxVcGRhdGFibGVUaWxlKj4o
aXRlci0+c2Vjb25kLmdldCgpKTsKKyAgICAgICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHN0YXRp
Y19jYXN0PFVwZGF0YWJsZVRpbGUqPihpdGVyLT52YWx1ZS5nZXQoKSk7CiAgICAgICAgIC8vIEZJ
WE1FOiBUaGlzIHNob3VsZCBub3QgZXZlciBiZSBudWxsLgogICAgICAgICBpZiAoIXRpbGUpCiAg
ICAgICAgICAgICBjb250aW51ZTsKQEAgLTY4MCw3ICs2ODAsNyBAQCB2b2lkIFRpbGVkTGF5ZXJD
aHJvbWl1bTo6cmVzZXRVcGRhdGVTdGF0ZSgpCiAKICAgICBDQ0xheWVyVGlsaW5nRGF0YTo6VGls
ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV90aWxlci0+dGlsZXMoKS5lbmQoKTsKICAgICBm
b3IgKENDTGF5ZXJUaWxpbmdEYXRhOjpUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbV90
aWxlci0+dGlsZXMoKS5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0gICAgICAgIFVw
ZGF0YWJsZVRpbGUqIHRpbGUgPSBzdGF0aWNfY2FzdDxVcGRhdGFibGVUaWxlKj4oaXRlci0+c2Vj
b25kLmdldCgpKTsKKyAgICAgICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHN0YXRpY19jYXN0PFVw
ZGF0YWJsZVRpbGUqPihpdGVyLT52YWx1ZS5nZXQoKSk7CiAgICAgICAgIC8vIEZJWE1FOiBUaGlz
IHNob3VsZCBub3QgZXZlciBiZSBudWxsLgogICAgICAgICBpZiAoIXRpbGUpCiAgICAgICAgICAg
ICBjb250aW51ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDRGFtYWdlVHJhY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RhbWFnZVRyYWNrZXIuY3BwCmluZGV4IDExNDQ5OWJh
MTdlZDRmZjE1ZGUwOGUwY2Q0MGZhMzM2NzFhNjE0ODYuLjc1YTE1NjQ4MWUzZTIxNzc5ZmY5N2U3
ZjY0ZTdkMDk5MjI0OWQ1M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDRGFtYWdlVHJhY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1hZ2VUcmFja2VyLmNwcApAQCAt
MjMzLDcgKzIzMyw3IEBAIEZsb2F0UmVjdCBDQ0RhbWFnZVRyYWNrZXI6OnRyYWNrRGFtYWdlRnJv
bUxlZnRvdmVyUmVjdHMoKQogICAgIEZsb2F0UmVjdCBkYW1hZ2VSZWN0ID0gRmxvYXRSZWN0KCk7
CiAKICAgICBmb3IgKFJlY3RNYXA6Oml0ZXJhdG9yIGl0ID0gbV9jdXJyZW50UmVjdEhpc3Rvcnkt
PmJlZ2luKCk7IGl0ICE9IG1fY3VycmVudFJlY3RIaXN0b3J5LT5lbmQoKTsgKytpdCkKLSAgICAg
ICAgZGFtYWdlUmVjdC51bml0ZShpdC0+c2Vjb25kKTsKKyAgICAgICAgZGFtYWdlUmVjdC51bml0
ZShpdC0+dmFsdWUpOwogCiAgICAgbV9jdXJyZW50UmVjdEhpc3RvcnktPmNsZWFyKCk7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
RGlyZWN0UmVuZGVyZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NEaXJlY3RSZW5kZXJlci5jcHAKaW5kZXggNDY4OGJlZDE5YmZjNGU4MzViYWRm
Mzc5MjZkOTAzZDI2YTBlZDM0Zi4uZmI4YWMxZDIxMzYyNzNhMGI2ODg2MTg5ZGIyNjZiMGZlMmE0
NjA2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NEaXJlY3RSZW5kZXJlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEaXJlY3RSZW5kZXJlci5jcHAKQEAgLTExOSwxNSArMTE5
LDE1IEBAIHZvaWQgQ0NEaXJlY3RSZW5kZXJlcjo6ZGVjaWRlUmVuZGVyUGFzc0FsbG9jYXRpb25z
Rm9yRnJhbWUoY29uc3QgQ0NSZW5kZXJQYXNzTGlzCiAgICAgVmVjdG9yPGludD4gcGFzc2VzVG9E
ZWxldGU7CiAgICAgSGFzaE1hcDxpbnQsIE93blB0cjxDYWNoZWRUZXh0dXJlPiA+Ojpjb25zdF9p
dGVyYXRvciBwYXNzSXRlcmF0b3I7CiAgICAgZm9yIChwYXNzSXRlcmF0b3IgPSBtX3JlbmRlclBh
c3NUZXh0dXJlcy5iZWdpbigpOyBwYXNzSXRlcmF0b3IgIT0gbV9yZW5kZXJQYXNzVGV4dHVyZXMu
ZW5kKCk7ICsrcGFzc0l0ZXJhdG9yKSB7Ci0gICAgICAgIGNvbnN0IENDUmVuZGVyUGFzcyogcmVu
ZGVyUGFzc0luRnJhbWUgPSByZW5kZXJQYXNzZXNJbkZyYW1lLmdldChwYXNzSXRlcmF0b3ItPmZp
cnN0KTsKKyAgICAgICAgY29uc3QgQ0NSZW5kZXJQYXNzKiByZW5kZXJQYXNzSW5GcmFtZSA9IHJl
bmRlclBhc3Nlc0luRnJhbWUuZ2V0KHBhc3NJdGVyYXRvci0+a2V5KTsKICAgICAgICAgaWYgKCFy
ZW5kZXJQYXNzSW5GcmFtZSkgewotICAgICAgICAgICAgcGFzc2VzVG9EZWxldGUuYXBwZW5kKHBh
c3NJdGVyYXRvci0+Zmlyc3QpOworICAgICAgICAgICAgcGFzc2VzVG9EZWxldGUuYXBwZW5kKHBh
c3NJdGVyYXRvci0+a2V5KTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKICAg
ICAgICAgY29uc3QgSW50U2l6ZSYgcmVxdWlyZWRTaXplID0gcmVuZGVyUGFzc1RleHR1cmVTaXpl
KHJlbmRlclBhc3NJbkZyYW1lKTsKICAgICAgICAgR0MzRGVudW0gcmVxdWlyZWRGb3JtYXQgPSBy
ZW5kZXJQYXNzVGV4dHVyZUZvcm1hdChyZW5kZXJQYXNzSW5GcmFtZSk7Ci0gICAgICAgIENhY2hl
ZFRleHR1cmUqIHRleHR1cmUgPSBwYXNzSXRlcmF0b3ItPnNlY29uZC5nZXQoKTsKKyAgICAgICAg
Q2FjaGVkVGV4dHVyZSogdGV4dHVyZSA9IHBhc3NJdGVyYXRvci0+dmFsdWUuZ2V0KCk7CiAgICAg
ICAgIEFTU0VSVCh0ZXh0dXJlKTsKIAogICAgICAgICBpZiAodGV4dHVyZS0+aWQoKSAmJiAodGV4
dHVyZS0+c2l6ZSgpICE9IHJlcXVpcmVkU2l6ZSB8fCB0ZXh0dXJlLT5mb3JtYXQoKSAhPSByZXF1
aXJlZEZvcm1hdCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVGlsaW5nRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVGlsaW5nRGF0YS5jcHAKaW5kZXggOWI1
NTE1NmQ5NWJhMzQzM2ZmNmMxNmM2ZWI1NTA5YWI3MTAyOWQxOS4uYTgxZTA2YzA1MDkyYjEzZjlh
NmJmMDA0NjkyNWRmM2Q1NGEyN2YzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRpbGluZ0RhdGEuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUaWxpbmdEYXRh
LmNwcApAQCAtMTUzLDggKzE1Myw4IEBAIHZvaWQgQ0NMYXllclRpbGluZ0RhdGE6OnNldEJvdW5k
cyhjb25zdCBJbnRTaXplJiBzaXplKQogICAgIGNvbnRlbnRSZWN0VG9UaWxlSW5kaWNlcyhJbnRS
ZWN0KEludFBvaW50KCksIHNpemUpLCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOwogICAgIFZl
Y3RvcjxUaWxlTWFwS2V5PiBpbnZhbGlkVGlsZUtleXM7CiAgICAgZm9yIChUaWxlTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0gbV90aWxlcy5lbmQoKTsgKytp
dCkgewotICAgICAgICBpZiAoaXQtPmZpcnN0LmZpcnN0ID4gcmlnaHQgfHwgaXQtPmZpcnN0LnNl
Y29uZCA+IGJvdHRvbSkKLSAgICAgICAgICAgIGludmFsaWRUaWxlS2V5cy5hcHBlbmQoaXQtPmZp
cnN0KTsKKyAgICAgICAgaWYgKGl0LT5rZXkuZmlyc3QgPiByaWdodCB8fCBpdC0+a2V5LnNlY29u
ZCA+IGJvdHRvbSkKKyAgICAgICAgICAgIGludmFsaWRUaWxlS2V5cy5hcHBlbmQoaXQtPmtleSk7
CiAgICAgfQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW52YWxpZFRpbGVLZXlzLnNpemUo
KTsgKytpKQogICAgICAgICBtX3RpbGVzLnJlbW92ZShpbnZhbGlkVGlsZUtleXNbaV0pOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggMjRhMzM0YzNmYzcxMjQ3YWYxYzIzYjMy
Y2ZjMjJlOThhZjIyN2I0Yy4uNDhkYmI2Y2U5NGUwMTYzMTkxZGNmMjJkZGJmM2NkNjlkOWVmMzVh
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCkBAIC0xMjMsNyArMTIzLDcgQEAg
Q0NMYXllclRyZWVIb3N0Ojp+Q0NMYXllclRyZWVIb3N0KCkKICAgICBudW1MYXllclRyZWVJbnN0
YW5jZXMtLTsKICAgICBSYXRlTGltaXRlck1hcDo6aXRlcmF0b3IgaXQgPSBtX3JhdGVMaW1pdGVy
cy5iZWdpbigpOwogICAgIGlmIChpdCAhPSBtX3JhdGVMaW1pdGVycy5lbmQoKSkKLSAgICAgICAg
aXQtPnNlY29uZC0+c3RvcCgpOworICAgICAgICBpdC0+dmFsdWUtPnN0b3AoKTsKIH0KIAogdm9p
ZCBDQ0xheWVyVHJlZUhvc3Q6OnNldFN1cmZhY2VSZWFkeSgpCkBAIC02NjksNyArNjY5LDcgQEAg
dm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnN0YXJ0UmF0ZUxpbWl0ZXIoV2ViS2l0OjpXZWJHcmFwaGlj
c0NvbnRleHQzRCogY29udGV4dCkKICAgICBBU1NFUlQoY29udGV4dCk7CiAgICAgUmF0ZUxpbWl0
ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yYXRlTGltaXRlcnMuZmluZChjb250ZXh0KTsKICAgICBp
ZiAoaXQgIT0gbV9yYXRlTGltaXRlcnMuZW5kKCkpCi0gICAgICAgIGl0LT5zZWNvbmQtPnN0YXJ0
KCk7CisgICAgICAgIGl0LT52YWx1ZS0+c3RhcnQoKTsKICAgICBlbHNlIHsKICAgICAgICAgUmVm
UHRyPFJhdGVMaW1pdGVyPiByYXRlTGltaXRlciA9IFJhdGVMaW1pdGVyOjpjcmVhdGUoY29udGV4
dCwgdGhpcyk7CiAgICAgICAgIG1fcmF0ZUxpbWl0ZXJzLnNldChjb250ZXh0LCByYXRlTGltaXRl
cik7CkBAIC02ODEsNyArNjgxLDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnN0b3BSYXRlTGlt
aXRlcihXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQogewogICAgIFJhdGVM
aW1pdGVyTWFwOjppdGVyYXRvciBpdCA9IG1fcmF0ZUxpbWl0ZXJzLmZpbmQoY29udGV4dCk7CiAg
ICAgaWYgKGl0ICE9IG1fcmF0ZUxpbWl0ZXJzLmVuZCgpKSB7Ci0gICAgICAgIGl0LT5zZWNvbmQt
PnN0b3AoKTsKKyAgICAgICAgaXQtPnZhbHVlLT5zdG9wKCk7CiAgICAgICAgIG1fcmF0ZUxpbWl0
ZXJzLnJlbW92ZShpdCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJ
bXBsLmNwcAppbmRleCBlZDA3OWY3ODI5YWMxMDRmNjc4YjY3OTU1MjdjNDIxYTc0ZWIxNTI5Li5i
YTQ3MDUzN2M4MzQ0MGM5YmM0ZTdlMjcyMjJmNDA1Mzg2MTFiYWVmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJ
bXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcApAQCAtNDA4LDcgKzQwOCw3IEBAIHN0YXRpYyBpbmxp
bmUgQ0NSZW5kZXJQYXNzKiBmaW5kUmVuZGVyUGFzc0J5SWQoaW50IHJlbmRlclBhc3NJZCwgY29u
c3QgQ0NMYXllclRyCiB7CiAgICAgQ0NSZW5kZXJQYXNzSWRIYXNoTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IGZyYW1lLnJlbmRlclBhc3Nlc0J5SWQuZmluZChyZW5kZXJQYXNzSWQpOwogICAgIEFT
U0VSVChpdCAhPSBmcmFtZS5yZW5kZXJQYXNzZXNCeUlkLmVuZCgpKTsKLSAgICByZXR1cm4gaXQt
PnNlY29uZC5nZXQoKTsKKyAgICByZXR1cm4gaXQtPnZhbHVlLmdldCgpOwogfQogCiBzdGF0aWMg
dm9pZCByZW1vdmVSZW5kZXJQYXNzZXNSZWN1cnNpdmUoaW50IHJlbW92ZVJlbmRlclBhc3NJZCwg
Q0NMYXllclRyZWVIb3N0SW1wbDo6RnJhbWVEYXRhJiBmcmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVzb3VyY2VQcm92aWRl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Jl
c291cmNlUHJvdmlkZXIuY3BwCmluZGV4IDNhYWQxNDdjYTY0NDczN2Q0ZTJmY2ZkOTNhZWM3ODEy
ZTJlMjAxZjguLjZhYTE4MzMxYWM1NjNlNzJiYjFiNzkxMDdjOTY0NDdlYTdhNDNiZjYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVz
b3VyY2VQcm92aWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NSZXNvdXJjZVByb3ZpZGVyLmNwcApAQCAtODQsNyArODQsNyBAQCBib29s
IENDUmVzb3VyY2VQcm92aWRlcjo6aW5Vc2VCeUNvbnN1bWVyKFJlc291cmNlSWQgaWQpCiAgICAg
QVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKICAgICBSZXNvdXJjZU1hcDo6aXRlcmF0
b3IgaXQgPSBtX3Jlc291cmNlcy5maW5kKGlkKTsKICAgICBBU1NFUlQoaXQgIT0gbV9yZXNvdXJj
ZXMuZW5kKCkpOwotICAgIHJldHVybiAhIWl0LT5zZWNvbmQubG9ja0ZvclJlYWRDb3VudCB8fCBp
dC0+c2Vjb25kLmV4cG9ydGVkOworICAgIHJldHVybiAhIWl0LT52YWx1ZS5sb2NrRm9yUmVhZENv
dW50IHx8IGl0LT52YWx1ZS5leHBvcnRlZDsKIH0KIAogQ0NSZXNvdXJjZVByb3ZpZGVyOjpSZXNv
dXJjZUlkIENDUmVzb3VyY2VQcm92aWRlcjo6Y3JlYXRlUmVzb3VyY2UoaW50IHBvb2wsIGNvbnN0
IEludFNpemUmIHNpemUsIEdDM0RlbnVtIGZvcm1hdCwgVGV4dHVyZVVzYWdlSGludCBoaW50KQpA
QCAtMTU0LDE1ICsxNTQsMTUgQEAgdm9pZCBDQ1Jlc291cmNlUHJvdmlkZXI6OmRlbGV0ZVJlc291
cmNlKFJlc291cmNlSWQgaWQpCiB7CiAgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgp
KTsKICAgICBSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5maW5kKGlkKTsK
LSAgICBBU1NFUlQoaXQgIT0gbV9yZXNvdXJjZXMuZW5kKCkgJiYgIWl0LT5zZWNvbmQubG9ja2Vk
Rm9yV3JpdGUgJiYgIWl0LT5zZWNvbmQubG9ja0ZvclJlYWRDb3VudCk7CisgICAgQVNTRVJUKGl0
ICE9IG1fcmVzb3VyY2VzLmVuZCgpICYmICFpdC0+dmFsdWUubG9ja2VkRm9yV3JpdGUgJiYgIWl0
LT52YWx1ZS5sb2NrRm9yUmVhZENvdW50KTsKIAotICAgIGlmIChpdC0+c2Vjb25kLmdsSWQgJiYg
IWl0LT5zZWNvbmQuZXh0ZXJuYWwpIHsKKyAgICBpZiAoaXQtPnZhbHVlLmdsSWQgJiYgIWl0LT52
YWx1ZS5leHRlcm5hbCkgewogICAgICAgICBXZWJHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNk
ID0gbV9jb250ZXh0LT5jb250ZXh0M0QoKTsKICAgICAgICAgQVNTRVJUKGNvbnRleHQzZCk7Ci0g
ICAgICAgIEdMQyhjb250ZXh0M2QsIGNvbnRleHQzZC0+ZGVsZXRlVGV4dHVyZShpdC0+c2Vjb25k
LmdsSWQpKTsKKyAgICAgICAgR0xDKGNvbnRleHQzZCwgY29udGV4dDNkLT5kZWxldGVUZXh0dXJl
KGl0LT52YWx1ZS5nbElkKSk7CiAgICAgfQotICAgIGlmIChpdC0+c2Vjb25kLnBpeGVscykKLSAg
ICAgICAgZGVsZXRlIGl0LT5zZWNvbmQucGl4ZWxzOworICAgIGlmIChpdC0+dmFsdWUucGl4ZWxz
KQorICAgICAgICBkZWxldGUgaXQtPnZhbHVlLnBpeGVsczsKIAogICAgIG1fcmVzb3VyY2VzLnJl
bW92ZShpdCk7CiB9CkBAIC0xNzIsOCArMTcyLDggQEAgdm9pZCBDQ1Jlc291cmNlUHJvdmlkZXI6
OmRlbGV0ZU93bmVkUmVzb3VyY2VzKGludCBwb29sKQogICAgIEFTU0VSVChDQ1Byb3h5Ojppc0lt
cGxUaHJlYWQoKSk7CiAgICAgUmVzb3VyY2VJZEFycmF5IHRvRGVsZXRlOwogICAgIGZvciAoUmVz
b3VyY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gbV9yZXNv
dXJjZXMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQucG9vbCA9PSBwb29s
ICYmICFpdC0+c2Vjb25kLmV4dGVybmFsKQotICAgICAgICAgICAgdG9EZWxldGUuYXBwZW5kKGl0
LT5maXJzdCk7CisgICAgICAgIGlmIChpdC0+dmFsdWUucG9vbCA9PSBwb29sICYmICFpdC0+dmFs
dWUuZXh0ZXJuYWwpCisgICAgICAgICAgICB0b0RlbGV0ZS5hcHBlbmQoaXQtPmtleSk7CiAgICAg
fQogICAgIGZvciAoUmVzb3VyY2VJZEFycmF5OjppdGVyYXRvciBpdCA9IHRvRGVsZXRlLmJlZ2lu
KCk7IGl0ICE9IHRvRGVsZXRlLmVuZCgpOyArK2l0KQogICAgICAgICBkZWxldGVSZXNvdXJjZSgq
aXQpOwpAQCAtMTgzLDI0ICsxODMsMjQgQEAgQ0NSZXNvdXJjZVByb3ZpZGVyOjpSZXNvdXJjZVR5
cGUgQ0NSZXNvdXJjZVByb3ZpZGVyOjpyZXNvdXJjZVR5cGUoUmVzb3VyY2VJZCBpZCkKIHsKICAg
ICBSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5maW5kKGlkKTsKICAgICBB
U1NFUlQoaXQgIT0gbV9yZXNvdXJjZXMuZW5kKCkpOwotICAgIHJldHVybiBpdC0+c2Vjb25kLnR5
cGU7CisgICAgcmV0dXJuIGl0LT52YWx1ZS50eXBlOwogfQogCiB2b2lkIENDUmVzb3VyY2VQcm92
aWRlcjo6dXBsb2FkKFJlc291cmNlSWQgaWQsIGNvbnN0IHVpbnQ4X3QqIGltYWdlLCBjb25zdCBJ
bnRSZWN0JiBpbWFnZVJlY3QsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFNp
emUmIGRlc3RPZmZzZXQpCiB7CiAgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsK
ICAgICBSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5maW5kKGlkKTsKLSAg
ICBBU1NFUlQoaXQgIT0gbV9yZXNvdXJjZXMuZW5kKCkgJiYgIWl0LT5zZWNvbmQubG9ja2VkRm9y
V3JpdGUgJiYgIWl0LT5zZWNvbmQubG9ja0ZvclJlYWRDb3VudCAmJiAhaXQtPnNlY29uZC5leHRl
cm5hbCk7CisgICAgQVNTRVJUKGl0ICE9IG1fcmVzb3VyY2VzLmVuZCgpICYmICFpdC0+dmFsdWUu
bG9ja2VkRm9yV3JpdGUgJiYgIWl0LT52YWx1ZS5sb2NrRm9yUmVhZENvdW50ICYmICFpdC0+dmFs
dWUuZXh0ZXJuYWwpOwogCi0gICAgaWYgKGl0LT5zZWNvbmQuZ2xJZCkgeworICAgIGlmIChpdC0+
dmFsdWUuZ2xJZCkgewogICAgICAgICBXZWJHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNkID0g
bV9jb250ZXh0LT5jb250ZXh0M0QoKTsKICAgICAgICAgQVNTRVJUKGNvbnRleHQzZCk7CiAgICAg
ICAgIEFTU0VSVChtX3RleFN1YkltYWdlLmdldCgpKTsKLSAgICAgICAgY29udGV4dDNkLT5iaW5k
VGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgaXQtPnNlY29uZC5nbElkKTsK
LSAgICAgICAgbV90ZXhTdWJJbWFnZS0+dXBsb2FkKGltYWdlLCBpbWFnZVJlY3QsIHNvdXJjZVJl
Y3QsIGRlc3RPZmZzZXQsIGl0LT5zZWNvbmQuZm9ybWF0LCBjb250ZXh0M2QpOworICAgICAgICBj
b250ZXh0M2QtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBpdC0+
dmFsdWUuZ2xJZCk7CisgICAgICAgIG1fdGV4U3ViSW1hZ2UtPnVwbG9hZChpbWFnZSwgaW1hZ2VS
ZWN0LCBzb3VyY2VSZWN0LCBkZXN0T2Zmc2V0LCBpdC0+dmFsdWUuZm9ybWF0LCBjb250ZXh0M2Qp
OwogICAgIH0KIAotICAgIGlmIChpdC0+c2Vjb25kLnBpeGVscykgeworICAgIGlmIChpdC0+dmFs
dWUucGl4ZWxzKSB7CiAgICAgICAgIFNrQml0bWFwIHNyY0Z1bGw7CiAgICAgICAgIHNyY0Z1bGwu
c2V0Q29uZmlnKFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZywgaW1hZ2VSZWN0LndpZHRoKCks
IGltYWdlUmVjdC5oZWlnaHQoKSk7CiAgICAgICAgIHNyY0Z1bGwuc2V0UGl4ZWxzKGNvbnN0X2Nh
c3Q8dWludDhfdCo+KGltYWdlKSk7CkBAIC0yMzgsMTcgKzIzOCwxNyBAQCBjb25zdCBDQ1Jlc291
cmNlUHJvdmlkZXI6OlJlc291cmNlKiBDQ1Jlc291cmNlUHJvdmlkZXI6OmxvY2tGb3JSZWFkKFJl
c291cmNlSWQgaQogewogICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CiAgICAg
UmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMuZmluZChpZCk7Ci0gICAgQVNT
RVJUKGl0ICE9IG1fcmVzb3VyY2VzLmVuZCgpICYmICFpdC0+c2Vjb25kLmxvY2tlZEZvcldyaXRl
KTsKLSAgICBpdC0+c2Vjb25kLmxvY2tGb3JSZWFkQ291bnQrKzsKLSAgICByZXR1cm4gJml0LT5z
ZWNvbmQ7CisgICAgQVNTRVJUKGl0ICE9IG1fcmVzb3VyY2VzLmVuZCgpICYmICFpdC0+dmFsdWUu
bG9ja2VkRm9yV3JpdGUpOworICAgIGl0LT52YWx1ZS5sb2NrRm9yUmVhZENvdW50Kys7CisgICAg
cmV0dXJuICZpdC0+dmFsdWU7CiB9CiAKIHZvaWQgQ0NSZXNvdXJjZVByb3ZpZGVyOjp1bmxvY2tG
b3JSZWFkKFJlc291cmNlSWQgaWQpCiB7CiAgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVh
ZCgpKTsKICAgICBSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5maW5kKGlk
KTsKLSAgICBBU1NFUlQoaXQgIT0gbV9yZXNvdXJjZXMuZW5kKCkgJiYgaXQtPnNlY29uZC5sb2Nr
Rm9yUmVhZENvdW50ID4gMCk7Ci0gICAgaXQtPnNlY29uZC5sb2NrRm9yUmVhZENvdW50LS07Cisg
ICAgQVNTRVJUKGl0ICE9IG1fcmVzb3VyY2VzLmVuZCgpICYmIGl0LT52YWx1ZS5sb2NrRm9yUmVh
ZENvdW50ID4gMCk7CisgICAgaXQtPnZhbHVlLmxvY2tGb3JSZWFkQ291bnQtLTsKIH0KIAogY29u
c3QgQ0NSZXNvdXJjZVByb3ZpZGVyOjpSZXNvdXJjZSogQ0NSZXNvdXJjZVByb3ZpZGVyOjpsb2Nr
Rm9yV3JpdGUoUmVzb3VyY2VJZCBpZCkKQEAgLTI1Niw4ICsyNTYsOCBAQCBjb25zdCBDQ1Jlc291
cmNlUHJvdmlkZXI6OlJlc291cmNlKiBDQ1Jlc291cmNlUHJvdmlkZXI6OmxvY2tGb3JXcml0ZShS
ZXNvdXJjZUlkCiAgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKICAgICBSZXNv
dXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5maW5kKGlkKTsKICAgICBBU1NFUlQo
aXQgIT0gbV9yZXNvdXJjZXMuZW5kKCkgJiYgIWl0LT5zZWNvbmQubG9ja2VkRm9yV3JpdGUgJiYg
IWl0LT5zZWNvbmQubG9ja0ZvclJlYWRDb3VudCAmJiAhaXQtPnNlY29uZC5leHRlcm5hbCk7Ci0g
ICAgaXQtPnNlY29uZC5sb2NrZWRGb3JXcml0ZSA9IHRydWU7Ci0gICAgcmV0dXJuICZpdC0+c2Vj
b25kOworICAgIGl0LT52YWx1ZS5sb2NrZWRGb3JXcml0ZSA9IHRydWU7CisgICAgcmV0dXJuICZp
dC0+dmFsdWU7CiB9CiAKIHZvaWQgQ0NSZXNvdXJjZVByb3ZpZGVyOjp1bmxvY2tGb3JXcml0ZShS
ZXNvdXJjZUlkIGlkKQpAQCAtMjY1LDcgKzI2NSw3IEBAIHZvaWQgQ0NSZXNvdXJjZVByb3ZpZGVy
Ojp1bmxvY2tGb3JXcml0ZShSZXNvdXJjZUlkIGlkKQogICAgIEFTU0VSVChDQ1Byb3h5Ojppc0lt
cGxUaHJlYWQoKSk7CiAgICAgUmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMu
ZmluZChpZCk7CiAgICAgQVNTRVJUKGl0ICE9IG1fcmVzb3VyY2VzLmVuZCgpICYmIGl0LT5zZWNv
bmQubG9ja2VkRm9yV3JpdGUgJiYgIWl0LT5zZWNvbmQuZXh0ZXJuYWwpOwotICAgIGl0LT5zZWNv
bmQubG9ja2VkRm9yV3JpdGUgPSBmYWxzZTsKKyAgICBpdC0+dmFsdWUubG9ja2VkRm9yV3JpdGUg
PSBmYWxzZTsKIH0KIAogQ0NSZXNvdXJjZVByb3ZpZGVyOjpTY29wZWRSZWFkTG9ja0dMOjpTY29w
ZWRSZWFkTG9ja0dMKENDUmVzb3VyY2VQcm92aWRlciogcmVzb3VyY2VQcm92aWRlciwgQ0NSZXNv
dXJjZVByb3ZpZGVyOjpSZXNvdXJjZUlkIHJlc291cmNlSWQpCkBAIC0zODgsNyArMzg4LDcgQEAg
dm9pZCBDQ1Jlc291cmNlUHJvdmlkZXI6OmRlc3Ryb3lDaGlsZChpbnQgY2hpbGQpCiAgICAgQVNT
RVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKICAgICBDaGlsZE1hcDo6aXRlcmF0b3IgaXQg
PSBtX2NoaWxkcmVuLmZpbmQoY2hpbGQpOwogICAgIEFTU0VSVChpdCAhPSBtX2NoaWxkcmVuLmVu
ZCgpKTsKLSAgICBkZWxldGVPd25lZFJlc291cmNlcyhpdC0+c2Vjb25kLnBvb2wpOworICAgIGRl
bGV0ZU93bmVkUmVzb3VyY2VzKGl0LT52YWx1ZS5wb29sKTsKICAgICBtX2NoaWxkcmVuLnJlbW92
ZShpdCk7CiAgICAgdHJpbU1haWxib3hEZXF1ZSgpOwogfQpAQCAtMzk4LDcgKzM5OCw3IEBAIGNv
bnN0IENDUmVzb3VyY2VQcm92aWRlcjo6UmVzb3VyY2VJZE1hcCYgQ0NSZXNvdXJjZVByb3ZpZGVy
OjpnZXRDaGlsZFRvUGFyZW50TWFwCiAgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgp
KTsKICAgICBDaGlsZE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2NoaWxkcmVuLmZpbmQoY2hp
bGQpOwogICAgIEFTU0VSVChpdCAhPSBtX2NoaWxkcmVuLmVuZCgpKTsKLSAgICByZXR1cm4gaXQt
PnNlY29uZC5jaGlsZFRvUGFyZW50TWFwOworICAgIHJldHVybiBpdC0+dmFsdWUuY2hpbGRUb1Bh
cmVudE1hcDsKIH0KIAogQ0NSZXNvdXJjZVByb3ZpZGVyOjpUcmFuc2ZlcmFibGVSZXNvdXJjZUxp
c3QgQ0NSZXNvdXJjZVByb3ZpZGVyOjpwcmVwYXJlU2VuZFRvUGFyZW50KGNvbnN0IFJlc291cmNl
SWRBcnJheSYgcmVzb3VyY2VzKQpAQCAtNDE0LDcgKzQxNCw3IEBAIENDUmVzb3VyY2VQcm92aWRl
cjo6VHJhbnNmZXJhYmxlUmVzb3VyY2VMaXN0IENDUmVzb3VyY2VQcm92aWRlcjo6cHJlcGFyZVNl
bmRUb1BhCiAgICAgZm9yIChSZXNvdXJjZUlkQXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcmVz
b3VyY2VzLmJlZ2luKCk7IGl0ICE9IHJlc291cmNlcy5lbmQoKTsgKytpdCkgewogICAgICAgICBU
cmFuc2ZlcmFibGVSZXNvdXJjZSByZXNvdXJjZTsKICAgICAgICAgaWYgKHRyYW5zZmVyUmVzb3Vy
Y2UoY29udGV4dDNkLCAqaXQsICZyZXNvdXJjZSkpIHsKLSAgICAgICAgICAgIG1fcmVzb3VyY2Vz
LmZpbmQoKml0KS0+c2Vjb25kLmV4cG9ydGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIG1fcmVzb3Vy
Y2VzLmZpbmQoKml0KS0+dmFsdWUuZXhwb3J0ZWQgPSB0cnVlOwogICAgICAgICAgICAgbGlzdC5y
ZXNvdXJjZXMuYXBwZW5kKHJlc291cmNlKTsKICAgICAgICAgfQogICAgIH0KQEAgLTQzMyw3ICs0
MzMsNyBAQCBDQ1Jlc291cmNlUHJvdmlkZXI6OlRyYW5zZmVyYWJsZVJlc291cmNlTGlzdCBDQ1Jl
c291cmNlUHJvdmlkZXI6OnByZXBhcmVTZW5kVG9DaAogICAgICAgICAvLyBGSVhNRTogSW1wbGVt
ZW50IHRoaXMgcGF0aCBmb3Igc29mdHdhcmUgY29tcG9zaXRpbmcuCiAgICAgICAgIHJldHVybiBs
aXN0OwogICAgIH0KLSAgICBDaGlsZCYgY2hpbGRJbmZvID0gbV9jaGlsZHJlbi5maW5kKGNoaWxk
KS0+c2Vjb25kOworICAgIENoaWxkJiBjaGlsZEluZm8gPSBtX2NoaWxkcmVuLmZpbmQoY2hpbGQp
LT52YWx1ZTsKICAgICBmb3IgKFJlc291cmNlSWRBcnJheTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBy
ZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gcmVzb3VyY2VzLmVuZCgpOyArK2l0KSB7CiAgICAgICAg
IFRyYW5zZmVyYWJsZVJlc291cmNlIHJlc291cmNlOwogICAgICAgICBpZiAoIXRyYW5zZmVyUmVz
b3VyY2UoY29udGV4dDNkLCAqaXQsICZyZXNvdXJjZSkpCkBAIC00NjYsNyArNDY2LDcgQEAgdm9p
ZCBDQ1Jlc291cmNlUHJvdmlkZXI6OnJlY2VpdmVGcm9tQ2hpbGQoaW50IGNoaWxkLCBjb25zdCBU
cmFuc2ZlcmFibGVSZXNvdXJjZUwKICAgICAgICAgLy8gKGFuZCBpcyBzaW1wbGVyKSB0byB3YWl0
LgogICAgICAgICBHTEMoY29udGV4dDNkLCBjb250ZXh0M2QtPndhaXRTeW5jUG9pbnQocmVzb3Vy
Y2VzLnN5bmNQb2ludCkpOwogICAgIH0KLSAgICBDaGlsZCYgY2hpbGRJbmZvID0gbV9jaGlsZHJl
bi5maW5kKGNoaWxkKS0+c2Vjb25kOworICAgIENoaWxkJiBjaGlsZEluZm8gPSBtX2NoaWxkcmVu
LmZpbmQoY2hpbGQpLT52YWx1ZTsKICAgICBmb3IgKFZlY3RvcjxUcmFuc2ZlcmFibGVSZXNvdXJj
ZT46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcmVzb3VyY2VzLnJlc291cmNlcy5iZWdpbigpOyBpdCAh
PSByZXNvdXJjZXMucmVzb3VyY2VzLmVuZCgpOyArK2l0KSB7CiAgICAgICAgIHVuc2lnbmVkIHRl
eHR1cmVJZDsKICAgICAgICAgR0xDKGNvbnRleHQzZCwgdGV4dHVyZUlkID0gY29udGV4dDNkLT5j
cmVhdGVUZXh0dXJlKCkpOwpAQCAtNDkyLDcgKzQ5Miw3IEBAIHZvaWQgQ0NSZXNvdXJjZVByb3Zp
ZGVyOjpyZWNlaXZlRnJvbVBhcmVudChjb25zdCBUcmFuc2ZlcmFibGVSZXNvdXJjZUxpc3QmIHJl
c291CiAgICAgaWYgKHJlc291cmNlcy5zeW5jUG9pbnQpCiAgICAgICAgIEdMQyhjb250ZXh0M2Qs
IGNvbnRleHQzZC0+d2FpdFN5bmNQb2ludChyZXNvdXJjZXMuc3luY1BvaW50KSk7CiAgICAgZm9y
IChWZWN0b3I8VHJhbnNmZXJhYmxlUmVzb3VyY2U+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHJlc291
cmNlcy5yZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gcmVzb3VyY2VzLnJlc291cmNlcy5lbmQoKTsg
KytpdCkgewotICAgICAgICBSZXNvdXJjZSYgcmVzb3VyY2UgPSBtX3Jlc291cmNlcy5maW5kKGl0
LT5pZCktPnNlY29uZDsKKyAgICAgICAgUmVzb3VyY2UmIHJlc291cmNlID0gbV9yZXNvdXJjZXMu
ZmluZChpdC0+aWQpLT52YWx1ZTsKICAgICAgICAgQVNTRVJUKHJlc291cmNlLmV4cG9ydGVkKTsK
ICAgICAgICAgcmVzb3VyY2UuZXhwb3J0ZWQgPSBmYWxzZTsKICAgICAgICAgR0xDKGNvbnRleHQz
ZCwgY29udGV4dDNkLT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
cmVzb3VyY2UuZ2xJZCkpOwpAQCAtNTA2LDE2ICs1MDYsMTYgQEAgYm9vbCBDQ1Jlc291cmNlUHJv
dmlkZXI6OnRyYW5zZmVyUmVzb3VyY2UoV2ViR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFJl
c291cmMKICAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwogICAgIFJlc291cmNl
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmZpbmQoaWQpOwogICAgIEFTU0VS
VChpdCAhPSBtX3Jlc291cmNlcy5lbmQoKSAmJiAhaXQtPnNlY29uZC5sb2NrZWRGb3JXcml0ZSAm
JiAhaXQtPnNlY29uZC5sb2NrRm9yUmVhZENvdW50ICYmICFpdC0+c2Vjb25kLmV4dGVybmFsKTsK
LSAgICBpZiAoaXQtPnNlY29uZC5leHBvcnRlZCkKKyAgICBpZiAoaXQtPnZhbHVlLmV4cG9ydGVk
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmVzb3VyY2UtPmlkID0gaWQ7Ci0gICAgcmVz
b3VyY2UtPmZvcm1hdCA9IGl0LT5zZWNvbmQuZm9ybWF0OwotICAgIHJlc291cmNlLT5zaXplID0g
aXQtPnNlY29uZC5zaXplOworICAgIHJlc291cmNlLT5mb3JtYXQgPSBpdC0+dmFsdWUuZm9ybWF0
OworICAgIHJlc291cmNlLT5zaXplID0gaXQtPnZhbHVlLnNpemU7CiAgICAgaWYgKCFtX21haWxi
b3hlcy5pc0VtcHR5KCkpCiAgICAgICAgIHJlc291cmNlLT5tYWlsYm94ID0gbV9tYWlsYm94ZXMu
dGFrZUZpcnN0KCk7CiAgICAgZWxzZQogICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+Z2Vu
TWFpbGJveENIUk9NSVVNKHJlc291cmNlLT5tYWlsYm94Lm5hbWUpKTsKLSAgICBHTEMoY29udGV4
dCwgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGl0
LT5zZWNvbmQuZ2xJZCkpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5iaW5kVGV4dHVyZShH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgaXQtPnZhbHVlLmdsSWQpKTsKICAgICBHTEMo
Y29udGV4dCwgY29udGV4dC0+cHJvZHVjZVRleHR1cmVDSFJPTUlVTShHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV8yRCwgcmVzb3VyY2UtPm1haWxib3gubmFtZSkpOwogICAgIHJldHVybiB0cnVl
OwogfQpAQCAtNTMwLDE1ICs1MzAsMTUgQEAgdm9pZCBDQ1Jlc291cmNlUHJvdmlkZXI6OnRyaW1N
YWlsYm94RGVxdWUoKQogICAgIHNpemVfdCBtYXhNYWlsYm94Q291bnQgPSAwOwogICAgIGlmICht
X2NvbnRleHQtPmNhcGFiaWxpdGllcygpLmhhc1BhcmVudENvbXBvc2l0b3IpIHsKICAgICAgICAg
Zm9yIChSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5iZWdpbigpOyBpdCAh
PSBtX3Jlc291cmNlcy5lbmQoKTsgKytpdCkgewotICAgICAgICAgICAgaWYgKCFpdC0+c2Vjb25k
LmV4cG9ydGVkICYmICFpdC0+c2Vjb25kLmV4dGVybmFsKQorICAgICAgICAgICAgaWYgKCFpdC0+
dmFsdWUuZXhwb3J0ZWQgJiYgIWl0LT52YWx1ZS5leHRlcm5hbCkKICAgICAgICAgICAgICAgICAr
K21heE1haWxib3hDb3VudDsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIEhhc2hT
ZXQ8aW50PiBjaGlsZFBvb2xTZXQ7CiAgICAgICAgIGZvciAoQ2hpbGRNYXA6Oml0ZXJhdG9yIGl0
ID0gbV9jaGlsZHJlbi5iZWdpbigpOyBpdCAhPSBtX2NoaWxkcmVuLmVuZCgpOyArK2l0KQotICAg
ICAgICAgICAgY2hpbGRQb29sU2V0LmFkZChpdC0+c2Vjb25kLnBvb2wpOworICAgICAgICAgICAg
Y2hpbGRQb29sU2V0LmFkZChpdC0+dmFsdWUucG9vbCk7CiAgICAgICAgIGZvciAoUmVzb3VyY2VN
YXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gbV9yZXNvdXJjZXMu
ZW5kKCk7ICsraXQpIHsKLSAgICAgICAgICAgIGlmIChjaGlsZFBvb2xTZXQuY29udGFpbnMoaXQt
PnNlY29uZC5wb29sKSkKKyAgICAgICAgICAgIGlmIChjaGlsZFBvb2xTZXQuY29udGFpbnMoaXQt
PnZhbHVlLnBvb2wpKQogICAgICAgICAgICAgICAgICsrbWF4TWFpbGJveENvdW50OwogICAgICAg
ICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9DdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dC5jcHAKaW5k
ZXggMzgyYzI3OGVhMjFkMTM1ZjA5Yzc3NmM4M2YwNTIxNmJhNmU4ZWQ3My4uMGFlZjZjZDQ2MGQ0
ZTM5OGE1YWE0ZDU2OGU4NjUyZTZmMzI5YjUwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRl
ckdsb2JhbENvbnRleHQuY3BwCkBAIC00NCw3ICs0NCw3IEBAIEN1c3RvbUZpbHRlckdsb2JhbENv
bnRleHQ6OkN1c3RvbUZpbHRlckdsb2JhbENvbnRleHQoKQogQ3VzdG9tRmlsdGVyR2xvYmFsQ29u
dGV4dDo6fkN1c3RvbUZpbHRlckdsb2JhbENvbnRleHQoKQogewogICAgIGZvciAoQ3VzdG9tRmls
dGVyQ29tcGlsZWRQcm9ncmFtc01hcDo6aXRlcmF0b3IgaXRlciA9IG1fcHJvZ3JhbXMuYmVnaW4o
KTsgaXRlciAhPSBtX3Byb2dyYW1zLmVuZCgpOyArK2l0ZXIpCi0gICAgICAgIGl0ZXItPnNlY29u
ZC0+ZGV0YWNoRnJvbUdsb2JhbENvbnRleHQoKTsKKyAgICAgICAgaXRlci0+dmFsdWUtPmRldGFj
aEZyb21HbG9iYWxDb250ZXh0KCk7CiB9CiAKIHZvaWQgQ3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4
dDo6cHJlcGFyZUNvbnRleHRJZk5lZWRlZChIb3N0V2luZG93KiBob3N0V2luZG93KQpAQCAtNjks
NyArNjksNyBAQCBQYXNzUmVmUHRyPEN1c3RvbUZpbHRlckNvbXBpbGVkUHJvZ3JhbT4gQ3VzdG9t
RmlsdGVyR2xvYmFsQ29udGV4dDo6Z2V0Q29tcGlsZWRQcgogCiAgICAgQ3VzdG9tRmlsdGVyQ29t
cGlsZWRQcm9ncmFtc01hcDo6aXRlcmF0b3IgaXRlciA9IG1fcHJvZ3JhbXMuZmluZChwcm9ncmFt
SW5mbyk7CiAgICAgaWYgKGl0ZXIgIT0gbV9wcm9ncmFtcy5lbmQoKSkKLSAgICAgICAgcmV0dXJu
IGl0ZXItPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGl0ZXItPnZhbHVlOwogCiAgICAgUmVmUHRy
PEN1c3RvbUZpbHRlckNvbXBpbGVkUHJvZ3JhbT4gY29tcGlsZWRQcm9ncmFtID0gQ3VzdG9tRmls
dGVyQ29tcGlsZWRQcm9ncmFtOjpjcmVhdGUodGhpcywgcHJvZ3JhbUluZm8pOwogICAgIG1fcHJv
Z3JhbXMuc2V0KHByb2dyYW1JbmZvLCBjb21waWxlZFByb2dyYW0uZ2V0KCkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJQ
cm9ncmFtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3Vz
dG9tRmlsdGVyUHJvZ3JhbS5jcHAKaW5kZXggZDFjZjYxMzRmNzBhZThhYmY1MmZjNjIzYTdkNjk2
NTM0ODc5ZjYxMi4uOTRlODNkZjliODNiMmI1YjU0ZmU3NDdhN2UyYWZjYjQyMjVlOWNmZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21G
aWx0ZXJQcm9ncmFtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0N1c3RvbUZpbHRlclByb2dyYW0uY3BwCkBAIC03NSw3ICs3NSw3IEBAIHZvaWQgQ3Vz
dG9tRmlsdGVyUHJvZ3JhbTo6cmVtb3ZlQ2xpZW50KEN1c3RvbUZpbHRlclByb2dyYW1DbGllbnQq
IGNsaWVudCkKIHZvaWQgQ3VzdG9tRmlsdGVyUHJvZ3JhbTo6bm90aWZ5Q2xpZW50cygpCiB7CiAg
ICAgZm9yIChDdXN0b21GaWx0ZXJQcm9ncmFtQ2xpZW50TGlzdDo6aXRlcmF0b3IgaXRlciA9IG1f
Y2xpZW50cy5iZWdpbigpLCBlbmQgPSBtX2NsaWVudHMuZW5kKCk7IGl0ZXIgIT0gZW5kOyArK2l0
ZXIpCi0gICAgICAgIGl0ZXItPmZpcnN0LT5ub3RpZnlDdXN0b21GaWx0ZXJQcm9ncmFtTG9hZGVk
KHRoaXMpOworICAgICAgICBpdGVyLT5rZXktPm5vdGlmeUN1c3RvbUZpbHRlclByb2dyYW1Mb2Fk
ZWQodGhpcyk7CiB9CiAKIEN1c3RvbUZpbHRlclByb2dyYW1JbmZvIEN1c3RvbUZpbHRlclByb2dy
YW06OnByb2dyYW1JbmZvKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNraWEuY3BwCmluZGV4IGY2OGVhNjE5
MjQ1Zjg2NmU1YmQwZDU3OGQwMTA0ODQ0NTI1ODRjMmIuLjFlODg2N2JiNzU3ZjIyNDJlOGY0OTYy
Zjg3NWIxYmRmN2FlOTkxMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2tpYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTa2lhLmNwcApAQCAtMjQ0LDE4ICsyNDQs
MTggQEAgc3RhdGljIEhCX0ZhY2VSZWNfKiBnZXRDYWNoZWRIYXJmYnV6ekZhY2UoRm9udFBsYXRm
b3JtRGF0YSogcGxhdGZvcm1EYXRhKQogICAgICAgICBnSGFyZmJ1enpGYWNlQ2FjaGUtPnNldCh1
bmlxdWVJRCwgZW50cnkpOwogICAgICAgICByZXR1cm4gZW50cnkuZmlyc3Q7CiAgICAgfQotICAg
ICsrKHJlc3VsdC5nZXQoKS0+c2Vjb25kLnNlY29uZCk7Ci0gICAgcmV0dXJuIHJlc3VsdC5nZXQo
KS0+c2Vjb25kLmZpcnN0OworICAgICsrKHJlc3VsdC5nZXQoKS0+dmFsdWUuc2Vjb25kKTsKKyAg
ICByZXR1cm4gcmVzdWx0LmdldCgpLT52YWx1ZS5maXJzdDsKIH0KIAogc3RhdGljIHZvaWQgcmVs
ZWFzZUNhY2hlZEhhcmZidXp6RmFjZShTa0ZvbnRJRCB1bmlxdWVJRCkKIHsKICAgICBIYXJmYnV6
ekZhY2VDYWNoZTo6aXRlcmF0b3IgcmVzdWx0ID0gZ0hhcmZidXp6RmFjZUNhY2hlLT5maW5kKHVu
aXF1ZUlEKTsKICAgICBBU1NFUlQocmVzdWx0ICE9IGdIYXJmYnV6ekZhY2VDYWNoZS0+ZW5kKCkp
OwotICAgIEFTU0VSVChyZXN1bHQuZ2V0KCktPnNlY29uZC5zZWNvbmQgPiAwKTsKLSAgICAtLShy
ZXN1bHQuZ2V0KCktPnNlY29uZC5zZWNvbmQpOwotICAgIGlmICghKHJlc3VsdC5nZXQoKS0+c2Vj
b25kLnNlY29uZCkpIHsKLSAgICAgICAgSEJfRnJlZUZhY2UocmVzdWx0LmdldCgpLT5zZWNvbmQu
Zmlyc3QpOworICAgIEFTU0VSVChyZXN1bHQuZ2V0KCktPnZhbHVlLnNlY29uZCA+IDApOworICAg
IC0tKHJlc3VsdC5nZXQoKS0+dmFsdWUuc2Vjb25kKTsKKyAgICBpZiAoIShyZXN1bHQuZ2V0KCkt
PnZhbHVlLnNlY29uZCkpIHsKKyAgICAgICAgSEJfRnJlZUZhY2UocmVzdWx0LmdldCgpLT52YWx1
ZS5maXJzdCk7CiAgICAgICAgIGdIYXJmYnV6ekZhY2VDYWNoZS0+cmVtb3ZlKHVuaXF1ZUlEKTsK
ICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9o
YXJmYnV6ei9uZy9IYXJmQnV6ek5HRmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ek5HRmFjZS5jcHAKaW5kZXggN2RkMDQ4YjNiNDNm
ZjU5Mzg4ZWFmNGU3MjEwZWUyY2NiZDU1NDIyMy4uNjA0NzU5YjhjYmRlZDNjOGI4NDFkYzY2ODc3
ZTNkZWEzNDYxZjc2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFyZmJ1enovbmcvSGFyZkJ1enpOR0ZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6TkdGYWNlLmNwcApAQCAtNjAsOCAr
NjAsOCBAQCBIYXJmQnV6ek5HRmFjZTo6SGFyZkJ1enpOR0ZhY2UoRm9udFBsYXRmb3JtRGF0YSog
cGxhdGZvcm1EYXRhLCB1aW50NjRfdCB1bmlxdWVJRAogICAgICAgICBBU1NFUlQobV9mYWNlKTsK
ICAgICAgICAgaGFyZmJ1enpGYWNlQ2FjaGUoKS0+c2V0KG1fdW5pcXVlSUQsIEZhY2VDYWNoZUVu
dHJ5KG1fZmFjZSwgMSkpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgICsrKHJlc3VsdC5nZXQoKS0+
c2Vjb25kLnNlY29uZCk7Ci0gICAgICAgIG1fZmFjZSA9IHJlc3VsdC5nZXQoKS0+c2Vjb25kLmZp
cnN0OworICAgICAgICArKyhyZXN1bHQuZ2V0KCktPnZhbHVlLnNlY29uZCk7CisgICAgICAgIG1f
ZmFjZSA9IHJlc3VsdC5nZXQoKS0+dmFsdWUuZmlyc3Q7CiAgICAgfQogfQogCkBAIC02OSwxMCAr
NjksMTAgQEAgSGFyZkJ1enpOR0ZhY2U6On5IYXJmQnV6ek5HRmFjZSgpCiB7CiAgICAgSGFyZkJ1
enpOR0ZhY2VDYWNoZTo6aXRlcmF0b3IgcmVzdWx0ID0gaGFyZmJ1enpGYWNlQ2FjaGUoKS0+Zmlu
ZChtX3VuaXF1ZUlEKTsKICAgICBBU1NFUlQocmVzdWx0ICE9IGhhcmZidXp6RmFjZUNhY2hlKCkt
PmVuZCgpKTsKLSAgICBBU1NFUlQocmVzdWx0LmdldCgpLT5zZWNvbmQuc2Vjb25kID4gMCk7Ci0g
ICAgLS0ocmVzdWx0LmdldCgpLT5zZWNvbmQuc2Vjb25kKTsKLSAgICBpZiAoIShyZXN1bHQuZ2V0
KCktPnNlY29uZC5zZWNvbmQpKSB7Ci0gICAgICAgIGhiX2ZhY2VfZGVzdHJveShyZXN1bHQuZ2V0
KCktPnNlY29uZC5maXJzdCk7CisgICAgQVNTRVJUKHJlc3VsdC5nZXQoKS0+dmFsdWUuc2Vjb25k
ID4gMCk7CisgICAgLS0ocmVzdWx0LmdldCgpLT52YWx1ZS5zZWNvbmQpOworICAgIGlmICghKHJl
c3VsdC5nZXQoKS0+dmFsdWUuc2Vjb25kKSkgeworICAgICAgICBoYl9mYWNlX2Rlc3Ryb3kocmVz
dWx0LmdldCgpLT52YWx1ZS5maXJzdCk7CiAgICAgICAgIGhhcmZidXp6RmFjZUNhY2hlKCktPnJl
bW92ZShtX3VuaXF1ZUlEKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFDb3JlVGV4dC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFDb3JlVGV4dC5jcHAK
aW5kZXggMDUxOTM3NDJjNTg1MmRiZTljOWNlZDY0YjlhMDdhYWQyYzFlYTQ3Ny4uMGI3MTMzNDdm
NjA0NjM1NTQ5ZTUwZDU2MzY1MjE4YjIzNDQyNmFjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhQ29yZVRleHQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YUNvcmVU
ZXh0LmNwcApAQCAtNDMsNyArNDMsNyBAQCBDRkRpY3Rpb25hcnlSZWYgU2ltcGxlRm9udERhdGE6
OmdldENGU3RyaW5nQXR0cmlidXRlcyhUeXBlc2V0dGluZ0ZlYXR1cmVzIHR5cGVzZQogewogICAg
IHVuc2lnbmVkIGtleSA9IHR5cGVzZXR0aW5nRmVhdHVyZXMgKyAxOwogICAgIEhhc2hNYXA8dW5z
aWduZWQsIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+ID46OkFkZFJlc3VsdCBhZGRSZXN1bHQg
PSBtX0NGU3RyaW5nQXR0cmlidXRlcy5hZGQoa2V5LCBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVm
PigpKTsKLSAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiYgYXR0cmlidXRlc0RpY3Rpb25h
cnkgPSBhZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9u
YXJ5UmVmPiYgYXR0cmlidXRlc0RpY3Rpb25hcnkgPSBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVl
OwogICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkpCiAgICAgICAgIHJldHVybiBhdHRyaWJ1
dGVzRGljdGlvbmFyeS5nZXQoKTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YU1hYy5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YU1hYy5tbQppbmRleCA2NmZlOTBh
NTkzOTBlNGNkMjJmNjE4MzhmOGM2YTlkYmZiNTJhYzZjLi45N2ViYmY5OWMzZDJlNWU3MWNhNjBk
YWNiM2RlODI1YTQxYjY3MTdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhTWFjLm1tCkBAIC00NjEsNyArNDYxLDcg
QEAgYm9vbCBTaW1wbGVGb250RGF0YTo6Y2FuUmVuZGVyQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVu
Y2UoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMKIAogICAgIFdURjo6SGFzaE1hcDxTdHJpbmcsIGJv
b2w+OjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gbV9jb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZVN1
cHBvcnQtPmFkZChTdHJpbmcoY2hhcmFjdGVycywgbGVuZ3RoKSwgZmFsc2UpOwogICAgIGlmICgh
YWRkUmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJldHVybiBhZGRSZXN1bHQuaXRlcmF0b3It
PnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAKICAg
ICBSZXRhaW5QdHI8Q0dGb250UmVmPiBjZ0ZvbnQoQWRvcHRDRiwgQ1RGb250Q29weUdyYXBoaWNz
Rm9udChwbGF0Zm9ybURhdGEoKS5jdEZvbnQoKSwgMCkpOwogCkBAIC00ODEsNyArNDgxLDcgQEAg
Ym9vbCBTaW1wbGVGb250RGF0YTo6Y2FuUmVuZGVyQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2Uo
Y29uc3QgVUNoYXIqIGNoYXJhY3RlcnMKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAKLSAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IHRydWU7CisgICAgYWRkUmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZSA9IHRydWU7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RP
cGVuR0xDb21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAKaW5kZXggYTNjMDU2NTkxMjBmYWQ4MmNkMTJi
NGE1NWE4ZjQ3NGIyM2MyYmVjOS4uOGJlOTM4NjI1YjQwZTUzY2VkNjZkYjU2ZmEwZjk5YTRhMDA0
ZTZmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAKQEAgLTExNyw3
ICsxMTcsNyBAQCBTdHJpbmcgRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uOjpnZXRUcmFuc2xhdGVk
U2hhZGVyU291cmNlQU5HTEUoUGxhdGZvcm0zRE9iamVjdAogICAgIGlmIChyZXN1bHQgPT0gbV9j
b250ZXh0LT5tX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuICIiOwogCi0g
ICAgR3JhcGhpY3NDb250ZXh0M0Q6OlNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3VsdC0+
c2Vjb25kOworICAgIEdyYXBoaWNzQ29udGV4dDNEOjpTaGFkZXJTb3VyY2VFbnRyeSYgZW50cnkg
PSByZXN1bHQtPnZhbHVlOwogCiAgICAgU3RyaW5nIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2U7CiAg
ICAgU3RyaW5nIHNoYWRlckluZm9Mb2c7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNE
T3BlbkdMQ29tbW9uLmNwcAppbmRleCA3NzJjYTgxYTBhMTU4M2YzYTI4ZGQ4ZDY5MWViMDM5Y2Mw
YzUxODYyLi5kZjljY2I1NzQzMjI2MGJmYTViYjM1Nzk2MjNhOGYyMmIyMGEwYmQ1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250
ZXh0M0RPcGVuR0xDb21tb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAKQEAgLTQ3Myw3ICs0
NzMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb21waWxlU2hhZGVyKFBsYXRmb3JtM0RP
YmplY3Qgc2hhZGVyKQogCiAgICAgaWYgKGxlbmd0aCkgewogICAgICAgICBIYXNoTWFwPFBsYXRm
b3JtM0RPYmplY3QsIEdyYXBoaWNzQ29udGV4dDNEOjpTaGFkZXJTb3VyY2VFbnRyeT46Oml0ZXJh
dG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKLSAgICAgICAgR3Jh
cGhpY3NDb250ZXh0M0Q6OlNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3VsdC0+c2Vjb25k
OworICAgICAgICBHcmFwaGljc0NvbnRleHQzRDo6U2hhZGVyU291cmNlRW50cnkmIGVudHJ5ID0g
cmVzdWx0LT52YWx1ZTsKIAogICAgICAgICBHTHNpemVpIHNpemUgPSAwOwogICAgICAgICBPd25B
cnJheVB0cjxHTGNoYXI+IGluZm8gPSBhZG9wdEFycmF5UHRyKG5ldyBHTGNoYXJbbGVuZ3RoXSk7
CkBAIC0xMTQ1LDcgKzExNDUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJp
dihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlciwgR0MzRGVudW0gcG5hbWUsIEdDMwogICAgICAgICAg
ICAgKnZhbHVlID0gc3RhdGljX2Nhc3Q8aW50PihmYWxzZSk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KLSAgICAgICAgKnZhbHVlID0gc3RhdGljX2Nhc3Q8aW50PihyZXN1bHQtPnNl
Y29uZC5pc1ZhbGlkKTsKKyAgICAgICAgKnZhbHVlID0gc3RhdGljX2Nhc3Q8aW50PihyZXN1bHQt
PnZhbHVlLmlzVmFsaWQpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIElORk9fTE9HX0xFTkdU
SDoKICAgICAgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkgewpAQCAt
MTE3Miw3ICsxMTcyLDcgQEAgU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJJbmZv
TG9nKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQogICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJT
b3VyY2VNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsgCiAKLSAgICBTaGFkZXJT
b3VyY2VFbnRyeSBlbnRyeSA9IHJlc3VsdC0+c2Vjb25kOworICAgIFNoYWRlclNvdXJjZUVudHJ5
IGVudHJ5ID0gcmVzdWx0LT52YWx1ZTsKICAgICBpZiAoIWVudHJ5LmlzVmFsaWQpCiAgICAgICAg
IHJldHVybiBlbnRyeS5sb2c7CiAKQEAgLTExOTgsNyArMTE5OCw3IEBAIFN0cmluZyBHcmFwaGlj
c0NvbnRleHQzRDo6Z2V0U2hhZGVyU291cmNlKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQogICAg
IGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybiBT
dHJpbmcoKTsgCiAKLSAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQuc291cmNlOworICAgIHJldHVy
biByZXN1bHQtPnZhbHVlLnNvdXJjZTsKIH0KIAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvRUdMRGlzcGxheU9wZW5WRy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvRUdMRGlzcGxheU9wZW5WRy5jcHAKaW5k
ZXggZDY4MWQ3NTgxZmIzZmJmMjlkODhlMTI2ZTUzODM4NzgyMzBiNTIyMC4uMWE2OGFlZmY4Y2M4
YzlmNTQ3NmI0ZjA1MzU2NjIwZmUxOTE0MWM0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL0VHTERpc3BsYXlPcGVuVkcuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW52Zy9FR0xEaXNwbGF5T3BlblZHLmNwcApA
QCAtMTIxLDcgKzEyMSw3IEBAIEVHTERpc3BsYXlPcGVuVkc6On5FR0xEaXNwbGF5T3BlblZHKCkK
IAogICAgIEhhc2hNYXA8RUdMU3VyZmFjZSwgRUdMaW50Pjo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
bV9zdXJmYWNlQ29uZmlnSWRzLmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDxFR0xTdXJmYWNlLCBF
R0xpbnQ+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fc3VyZmFjZUNvbmZpZ0lkcy5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGRlc3Ryb3lTdXJmYWNlKCgqaXQpLmZpcnN0KTsKKyAg
ICAgICAgZGVzdHJveVN1cmZhY2UoKCppdCkua2V5KTsKIAogICAgIGVnbFRlcm1pbmF0ZShtX2Rp
c3BsYXkpOwogICAgIEFTU0VSVF9FR0xfTk9fRVJST1IoKTsKQEAgLTMzOCw3ICszMzgsNyBAQCB2
b2lkIEVHTERpc3BsYXlPcGVuVkc6OmRlc3Ryb3lTdXJmYWNlKGNvbnN0IEVHTFN1cmZhY2UmIHN1
cmZhY2UpCiAKICAgICAgICAgLy8gLi4uYnV0IG9ubHkgaWYgdGhlcmUncyBubyBvdGhlciBzdXJm
YWNlcyBhc3NvY2lhdGVkIHRvIHRoYXQgY29udGV4dC4KICAgICAgICAgZm9yIChIYXNoTWFwPEVH
TFN1cmZhY2UsIEVHTGludD46Oml0ZXJhdG9yIGl0ID0gbV9zdXJmYWNlQ29uZmlnSWRzLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgaWYgKCgqaXQpLnNlY29uZCA9PSBz
dXJmYWNlQ29uZmlnSWQpIHsKKyAgICAgICAgICAgIGlmICgoKml0KS52YWx1ZSA9PSBzdXJmYWNl
Q29uZmlnSWQpIHsKICAgICAgICAgICAgICAgICBpc0NvbnRleHRSZWZlcmVuY2VkID0gdHJ1ZTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTM1NCw3ICszNTQsNyBA
QCB2b2lkIEVHTERpc3BsYXlPcGVuVkc6OmRlc3Ryb3lTdXJmYWNlKGNvbnN0IEVHTFN1cmZhY2Um
IHN1cmZhY2UpCiAKICAgICBIYXNoTWFwPEVHTE5hdGl2ZVdpbmRvd1R5cGUsIEVHTFN1cmZhY2U+
OjppdGVyYXRvciBlbmQgPSBtX3dpbmRvd1N1cmZhY2VzLmVuZCgpOwogICAgIGZvciAoSGFzaE1h
cDxFR0xOYXRpdmVXaW5kb3dUeXBlLCBFR0xTdXJmYWNlPjo6aXRlcmF0b3IgaXQgPSBtX3dpbmRv
d1N1cmZhY2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoKCppdCku
c2Vjb25kID09IHN1cmZhY2UpIHsKKyAgICAgICAgaWYgKCgqaXQpLnZhbHVlID09IHN1cmZhY2Up
IHsKICAgICAgICAgICAgIG1fd2luZG93U3VyZmFjZXMucmVtb3ZlKGl0KTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CkBAIC00MDksNyArNDA5LDcgQEAgRUdMQ29udGV4dCBFR0xEaXNw
bGF5T3BlblZHOjpjb250ZXh0Rm9yU3VyZmFjZShjb25zdCBFR0xTdXJmYWNlJiBzdXJmYWNlKQog
ICAgIEhhc2hNYXA8RUdMaW50LCBFR0xDb250ZXh0Pjo6aXRlcmF0b3IgZW5kID0gbV9jb250ZXh0
cy5lbmQoKTsKIAogICAgIGZvciAoSGFzaE1hcDxFR0xpbnQsIEVHTENvbnRleHQ+OjppdGVyYXRv
ciBpdCA9IG1fY29udGV4dHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGVn
bE1ha2VDdXJyZW50KG1fZGlzcGxheSwgc3VyZmFjZSwgc3VyZmFjZSwgKCppdCkuc2Vjb25kKTsK
KyAgICAgICAgZWdsTWFrZUN1cnJlbnQobV9kaXNwbGF5LCBzdXJmYWNlLCBzdXJmYWNlLCAoKml0
KS52YWx1ZSk7CiAgICAgICAgIGlmIChlZ2xHZXRFcnJvcigpID09IEVHTF9TVUNDRVNTKSB7CiAg
ICAgICAgICAgICAvLyBSZXN0b3JlIHByZXZpb3VzIHN1cmZhY2UvY29udGV4dC4KICAgICAgICAg
ICAgIGlmIChjdXJyZW50Q29udGV4dCAhPSBFR0xfTk9fQ09OVEVYVCkgewpAQCAtNDE3LDggKzQx
Nyw4IEBAIEVHTENvbnRleHQgRUdMRGlzcGxheU9wZW5WRzo6Y29udGV4dEZvclN1cmZhY2UoY29u
c3QgRUdMU3VyZmFjZSYgc3VyZmFjZSkKICAgICAgICAgICAgICAgICBBU1NFUlRfRUdMX05PX0VS
Uk9SKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyBDb29sLCBzdXJmYWNlIGlzIGNv
bXBhdGlibGUgdG8gb25lIG9mIG91ciBleGlzdGluZyBjb250ZXh0cy4KLSAgICAgICAgICAgIG1f
Y29tcGF0aWJsZUNvbmZpZ0lkcy5zZXQoc3VyZmFjZUNvbmZpZ0lkLCAoKml0KS5maXJzdCk7Ci0g
ICAgICAgICAgICByZXR1cm4gKCppdCkuc2Vjb25kOworICAgICAgICAgICAgbV9jb21wYXRpYmxl
Q29uZmlnSWRzLnNldChzdXJmYWNlQ29uZmlnSWQsICgqaXQpLmtleSk7CisgICAgICAgICAgICBy
ZXR1cm4gKCppdCkudmFsdWU7CiAgICAgICAgIH0KICAgICB9CiAgICAgLy8gUmVzdG9yZSBwcmV2
aW91cyBzdXJmYWNlL2NvbnRleHQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCmluZGV4IGEyMmU3MjBl
MTY1MGEwZjNiY2Y4MWU0ZjNjZGZmNzgxNzBkOGFhZDAuLjAxNjIxNGE4YTdkMTk0ZTQ2N2VjMTgx
OGNjYzEyN2QxNjIyZWU0ODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCkBAIC0xMDUsNyArMTA1
LDcgQEAgc3RydWN0IFRleHR1cmVNYXBwZXJHTERhdGEgewogICAgICAgICAgICAgR0xDb250ZXh0
IGN1cnJlbnRHTENvbmV4dCA9IGdldEN1cnJlbnRHTENvbnRleHQoKTsKICAgICAgICAgICAgIEdM
Q29udGV4dERhdGFNYXA6Oml0ZXJhdG9yIGl0ID0gZ2xDb250ZXh0RGF0YU1hcCgpLmZpbmQoY3Vy
cmVudEdMQ29uZXh0KTsKICAgICAgICAgICAgIGlmIChpdCAhPSBnbENvbnRleHREYXRhTWFwKCku
ZW5kKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGl0LT52YWx1ZTsKIAogICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBT
aGFyZWRHTERhdGEoZ2V0Q3VycmVudEdMQ29udGV4dCgpKSk7CiAgICAgICAgIH0KQEAgLTEyNCw3
ICsxMjQsNyBAQCBzdHJ1Y3QgVGV4dHVyZU1hcHBlckdMRGF0YSB7CiAgICAgICAgICAgICBHTENv
bnRleHREYXRhTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBnbENvbnRleHREYXRhTWFwKCkuZW5k
KCk7CiAgICAgICAgICAgICBHTENvbnRleHREYXRhTWFwOjppdGVyYXRvciBpdDsKICAgICAgICAg
ICAgIGZvciAoaXQgPSBnbENvbnRleHREYXRhTWFwKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGl0LT5zZWNvbmQgPT0gdGhpcykKKyAgICAgICAgICAg
ICAgICBpZiAoaXQtPnZhbHVlID09IHRoaXMpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNw
cAppbmRleCAwZmJkYmU5NWNhZjE2NDcwZGQwNjMyZjA0YzE0NGI4MjBiNmU4YmIzLi40NjQ5ZjRi
NjJkOGUxOWFhM2M1M2JhYWM5Zjc1MjJjZjEzOWYzMjM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyU2hhZGVyTWFuYWdlci5jcHAKQEAgLTIwOCw3ICsyMDgsNyBAQCBQYXNzUmVmUHRyPFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6Z2V0
U2hhZGVyUHJvZwogCiAgICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1NYXA6Oml0ZXJhdG9y
IGl0ID0gbV90ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU1hcC5maW5kKHNoYWRlclR5cGUpOwog
ICAgIGlmIChpdCAhPSBtX3RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtTWFwLmVuZCgpKQotICAg
ICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKIAogICAg
IHN3aXRjaCAoc2hhZGVyVHlwZSkgewogICAgIGNhc2UgU2ltcGxlOgpAQCAtNzY1LDcgKzc2NSw3
IEBAIFBhc3NSZWZQdHI8U3RhbmRhcmRGaWx0ZXJQcm9ncmFtPiBUZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlcjo6Z2V0U2hhZGVyRm9yRmlsdGVyCiAKICAgICAgICAgbV9maWx0ZXJNYXAuYWRkKGtl
eSwgcHJvZ3JhbSk7CiAgICAgfSBlbHNlCi0gICAgICAgIHByb2dyYW0gPSBpdGVyYXRvci0+c2Vj
b25kOworICAgICAgICBwcm9ncmFtID0gaXRlcmF0b3ItPnZhbHVlOwogCiAgICAgcmV0dXJuIHBy
b2dyYW07CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW5jZS9Gb250UGxhdGZvcm1EYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbmNlL0ZvbnRQbGF0Zm9ybURhdGEuY3BwCmluZGV4IDE5NzkwYWQ0OWIzMzAzZGQ3YjYy
YzdlN2EwYTgyMzY3N2I0Y2ZmNTEuLjE5ZjUyNDU1ZDExYjM1NGNjNGQ0M2U2ODM5OWNlNzlhYzk5
YmMwYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNl
L0ZvbnRQbGF0Zm9ybURhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbmNlL0ZvbnRQbGF0Zm9ybURhdGEuY3BwCkBAIC0yODcsOSArMjg3LDkgQEAgc3RhdGlj
IFBhc3NSZWZQdHI8Rml4ZWRTaXplRm9udERhdGE+IGNyZWF0ZUZpeGVkU2l6ZUZvbnREYXRhKGNv
bnN0IEF0b21pY1N0cmluZyYKICAgICBGaXhlZFNpemVGb250RGF0YUtleSBrZXkoZmFtaWx5LCB3
ZWlnaHQsIGl0YWxpYyk7CiAgICAgRml4ZWRTaXplRm9udENhY2hlOjpBZGRSZXN1bHQgcmVzdWx0
ID0gZ19maXhlZFNpemVGb250Q2FjaGUuYWRkKGtleSwgUmVmUHRyPEZpeGVkU2l6ZUZvbnREYXRh
PigpKTsKICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJlc3VsdC5pdGVyYXRv
ci0+c2Vjb25kID0gRml4ZWRTaXplRm9udERhdGE6OmNyZWF0ZShmYW1pbHksIHdlaWdodCwgaXRh
bGljKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IEZpeGVkU2l6ZUZvbnREYXRh
OjpjcmVhdGUoZmFtaWx5LCB3ZWlnaHQsIGl0YWxpYyk7CiAKLSAgICByZXR1cm4gcmVzdWx0Lml0
ZXJhdG9yLT5zZWNvbmQ7CisgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiB9CiAK
IHN0YXRpYyBMT05HIHRvR0RJRm9udFdlaWdodChGb250V2VpZ2h0IGZvbnRXZWlnaHQpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRGF0YU9iamVjdEd0ay5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRGF0YU9iamVjdEd0ay5jcHAKaW5kZXggMWE4NGY4
YmQzMTk1MmIyOGUyNjgyNzFkZDJhNWY1N2Y0NGQ4MjdkNy4uYWRmYzY2ZTAxNWU1MDIyNjc4OGMy
MTQ3NjhhMTViMjkxMzY4NDNiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL0RhdGFPYmplY3RHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9E
YXRhT2JqZWN0R3RrLmNwcApAQCAtMTcxLDcgKzE3MSw3IEBAIERhdGFPYmplY3RHdGsqIERhdGFP
YmplY3RHdGs6OmZvckNsaXBib2FyZChHdGtDbGlwYm9hcmQqIGNsaXBib2FyZCkKICAgICB9CiAK
ICAgICBIYXNoTWFwPEd0a0NsaXBib2FyZCosIFJlZlB0cjxEYXRhT2JqZWN0R3RrPiA+OjppdGVy
YXRvciBpdCA9IG9iamVjdE1hcC5maW5kKGNsaXBib2FyZCk7Ci0gICAgcmV0dXJuIGl0LT5zZWNv
bmQuZ2V0KCk7CisgICAgcmV0dXJuIGl0LT52YWx1ZS5nZXQoKTsKIH0KIAogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0RyYWdBbmREcm9wSGVscGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtEcmFnQW5kRHJvcEhlbHBlci5jcHAKaW5k
ZXggNzYzZDEyMGQwOTQxNjIyNzI2NjBjNjA2MzJhMTkyOTg2ZjU0MmVhNC4uZmMyZjU2ZTYxNjZl
YjFhYWNkYmFkYThmNTJmZWYzYzZkZDg4NjRjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL0d0a0RyYWdBbmREcm9wSGVscGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvR3RrRHJhZ0FuZERyb3BIZWxwZXIuY3BwCkBAIC03MCw3ICs3MCw3IEBA
IHZvaWQgR3RrRHJhZ0FuZERyb3BIZWxwZXI6OmhhbmRsZUdldERyYWdEYXRhKEdka0RyYWdDb250
ZXh0KiBjb250ZXh0LCBHdGtTZWxlY3RpCiAgICAgRHJhZ2dpbmdEYXRhT2JqZWN0c01hcDo6aXRl
cmF0b3IgaXRlcmF0b3IgPSBtX2RyYWdnaW5nRGF0YU9iamVjdHMuZmluZChjb250ZXh0KTsKICAg
ICBpZiAoaXRlcmF0b3IgPT0gbV9kcmFnZ2luZ0RhdGFPYmplY3RzLmVuZCgpKQogICAgICAgICBy
ZXR1cm47Ci0gICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+
ZmlsbFNlbGVjdGlvbkRhdGEoc2VsZWN0aW9uRGF0YSwgaW5mbywgaXRlcmF0b3ItPnNlY29uZC5n
ZXQoKSk7CisgICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+
ZmlsbFNlbGVjdGlvbkRhdGEoc2VsZWN0aW9uRGF0YSwgaW5mbywgaXRlcmF0b3ItPnZhbHVlLmdl
dCgpKTsKIH0KIAogc3RydWN0IEhhbmRsZURyYWdMYXRlckRhdGEgewpAQCAtMTE2LDcgKzExNiw3
IEBAIHZvaWQgR3RrRHJhZ0FuZERyb3BIZWxwZXI6OmhhbmRsZURyYWdMZWF2ZShHZGtEcmFnQ29u
dGV4dCogZ2RrQ29udGV4dCwgRHJhZ0V4aXRlCiAgICAgLy8gdGhlIGRyYWctZHJvcCBzaWduYWwu
IFdlIHdhbnQgdGhlIGFjdGlvbnMgZm9yIGRyYWctbGVhdmUgdG8gaGFwcGVuIGFmdGVyCiAgICAg
Ly8gdGhvc2UgZm9yIGRyYWctZHJvcCwgc28gc2NoZWR1bGUgdGhlbSB0byBoYXBwZW4gYXN5bmNo
cm9ub3VzbHkgaGVyZS4KICAgICBIYW5kbGVEcmFnTGF0ZXJEYXRhKiBkYXRhID0gbmV3IEhhbmRs
ZURyYWdMYXRlckRhdGE7Ci0gICAgZGF0YS0+Y29udGV4dCA9IGl0ZXJhdG9yLT5zZWNvbmQ7Cisg
ICAgZGF0YS0+Y29udGV4dCA9IGl0ZXJhdG9yLT52YWx1ZTsKICAgICBkYXRhLT5jb250ZXh0LT5l
eGl0ZWRDYWxsYmFjayA9IGV4aXRlZENhbGxiYWNrOwogICAgIGRhdGEtPmdsdWUgPSB0aGlzOwog
ICAgIGdfdGltZW91dF9hZGQoMCwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oaGFuZGxl
RHJhZ0xlYXZlTGF0ZXJDYWxsYmFjayksIGRhdGEpOwpAQCAtMTQwLDcgKzE0MCw3IEBAIFBhc3NP
d25QdHI8RHJhZ0RhdGE+IEd0a0RyYWdBbmREcm9wSGVscGVyOjpoYW5kbGVEcmFnTW90aW9uKEdk
a0RyYWdDb250ZXh0KiBjb250CiAgICAgICAgIG1fZHJvcHBpbmdDb250ZXh0cy5zZXQoY29udGV4
dCwgZHJvcHBpbmdDb250ZXh0KTsKICAgICAgICAgcXVlcnlOZXdEcm9wQ29udGV4dERhdGEoZHJv
cHBpbmdDb250ZXh0LCBtX3dpZGdldCwgdGltZSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZHJv
cHBpbmdDb250ZXh0ID0gaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgZHJvcHBpbmdDb250ZXh0
ID0gaXRlcmF0b3ItPnZhbHVlOwogICAgICAgICBkcm9wcGluZ0NvbnRleHQtPmxhc3RNb3Rpb25Q
b3NpdGlvbiA9IHBvc2l0aW9uOwogICAgIH0KIApAQCAtMTYyLDcgKzE2Miw3IEBAIFBhc3NPd25Q
dHI8RHJhZ0RhdGE+IEd0a0RyYWdBbmREcm9wSGVscGVyOjpoYW5kbGVEcmFnRGF0YVJlY2VpdmVk
KEdka0RyYWdDb250ZXh0CiAgICAgaWYgKGl0ZXJhdG9yID09IG1fZHJvcHBpbmdDb250ZXh0cy5l
bmQoKSkKICAgICAgICAgcmV0dXJuIGFkb3B0UHRyKHN0YXRpY19jYXN0PERyYWdEYXRhKj4oMCkp
OwogCi0gICAgRHJvcHBpbmdDb250ZXh0KiBkcm9wcGluZ0NvbnRleHQgPSBpdGVyYXRvci0+c2Vj
b25kOworICAgIERyb3BwaW5nQ29udGV4dCogZHJvcHBpbmdDb250ZXh0ID0gaXRlcmF0b3ItPnZh
bHVlOwogICAgIGRyb3BwaW5nQ29udGV4dC0+cGVuZGluZ0RhdGFSZXF1ZXN0cy0tOwogICAgIFBh
c3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPmZpbGxEYXRhT2JqZWN0
RnJvbURyb3BEYXRhKHNlbGVjdGlvbkRhdGEsIGluZm8sIGRyb3BwaW5nQ29udGV4dC0+ZGF0YU9i
amVjdC5nZXQoKSk7CiAKQEAgLTE4NSw3ICsxODUsNyBAQCBQYXNzT3duUHRyPERyYWdEYXRhPiBH
dGtEcmFnQW5kRHJvcEhlbHBlcjo6aGFuZGxlRHJhZ0Ryb3AoR2RrRHJhZ0NvbnRleHQqIGNvbnRl
eAogICAgIGlmIChpdGVyYXRvciA9PSBtX2Ryb3BwaW5nQ29udGV4dHMuZW5kKCkpCiAgICAgICAg
IHJldHVybiBhZG9wdFB0cihzdGF0aWNfY2FzdDxEcmFnRGF0YSo+KDApKTsKIAotICAgIERyb3Bw
aW5nQ29udGV4dCogZHJvcHBpbmdDb250ZXh0ID0gaXRlcmF0b3ItPnNlY29uZDsKKyAgICBEcm9w
cGluZ0NvbnRleHQqIGRyb3BwaW5nQ29udGV4dCA9IGl0ZXJhdG9yLT52YWx1ZTsKICAgICBkcm9w
cGluZ0NvbnRleHQtPmRyb3BIYXBwZW5lZCA9IHRydWU7CiAKICAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IERyYWdEYXRhKGRyb3BwaW5nQ29udGV4dC0+ZGF0YU9iamVjdC5nZXQoKSwgcG9zaXRpb24s
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3Rr
My5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGszLmNwcApp
bmRleCA3NzQ5MzkxNTE3MTNkZjAxMTM0ZDZjZWE0ZWQ5ZDcwNGI0ZGNmYzBiLi4wYTgzODI3Yzdm
ZWJjYmU0MDU0OGZhZDU2MmI1NDExNzFlYzE2OWY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGszLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGszLmNwcApAQCAtNTYsNyArNTYsNyBAQCBzdGF0aWMg
dm9pZCBndGtTdHlsZUNoYW5nZWRDYWxsYmFjayhHT2JqZWN0KiwgR1BhcmFtU3BlYyopCiB7CiAg
ICAgU3R5bGVDb250ZXh0TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBzdHlsZUNvbnRleHRNYXAo
KS5lbmQoKTsKICAgICBmb3IgKFN0eWxlQ29udGV4dE1hcDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9
IHN0eWxlQ29udGV4dE1hcCgpLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCi0gICAgICAg
IGd0a19zdHlsZV9jb250ZXh0X2ludmFsaWRhdGUoaXRlci0+c2Vjb25kLmdldCgpKTsKKyAgICAg
ICAgZ3RrX3N0eWxlX2NvbnRleHRfaW52YWxpZGF0ZShpdGVyLT52YWx1ZS5nZXQoKSk7CiAKICAg
ICBQYWdlOjpzY2hlZHVsZUZvcmNlZFN0eWxlUmVjYWxjRm9yQWxsUGFnZXMoKTsKIH0KQEAgLTc5
LDcgKzc5LDcgQEAgc3RhdGljIEd0a1N0eWxlQ29udGV4dCogZ2V0U3R5bGVDb250ZXh0KEdUeXBl
IHdpZGdldFR5cGUpCiB7CiAgICAgU3R5bGVDb250ZXh0TWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0g
c3R5bGVDb250ZXh0TWFwKCkuYWRkKHdpZGdldFR5cGUsIDApOwogICAgIGlmICghcmVzdWx0Lmlz
TmV3RW50cnkpCi0gICAgICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnNlY29uZC5nZXQoKTsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7CiAKICAgICBHdGtX
aWRnZXRQYXRoKiBwYXRoID0gZ3RrX3dpZGdldF9wYXRoX25ldygpOwogICAgIGd0a193aWRnZXRf
cGF0aF9hcHBlbmRfdHlwZShwYXRoLCB3aWRnZXRUeXBlKTsKQEAgLTExMSw3ICsxMTEsNyBAQCBz
dGF0aWMgR3RrU3R5bGVDb250ZXh0KiBnZXRTdHlsZUNvbnRleHQoR1R5cGUgd2lkZ2V0VHlwZSkK
ICAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfcGF0aChjb250ZXh0LmdldCgpLCBwYXRoKTsKICAg
ICBndGtfd2lkZ2V0X3BhdGhfZnJlZShwYXRoKTsKIAotICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vj
b25kID0gY29udGV4dDsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gY29udGV4dDsKICAg
ICByZXR1cm4gY29udGV4dC5nZXQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL1Njcm9sbGJhclRoZW1lTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWFjL1Njcm9sbGJhclRoZW1lTWFjLm1tCmluZGV4IDk2YWExMmEyNjkxNDdmNzY4ZWUzZjY0
NTFkZmViNTI3M2Y5NGVjNDkuLmZkOWI3MjRhNGQ5YzRiNDcxMTRlZGY3ZGJiYzg4ZmM1ODUyZjE2
ZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxiYXJUaGVt
ZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVN
YWMubW0KQEAgLTg2LDggKzg2LDggQEAgc3RhdGljIFNjcm9sbGJhclBhaW50ZXJNYXAqIHNjcm9s
bGJhck1hcCgpCiAgICAgICAgIHJldHVybjsKICAgICBTY3JvbGxiYXJQYWludGVyTWFwOjppdGVy
YXRvciBlbmQgPSBzY3JvbGxiYXJNYXAoKS0+ZW5kKCk7CiAgICAgZm9yIChTY3JvbGxiYXJQYWlu
dGVyTWFwOjppdGVyYXRvciBpdCA9IHNjcm9sbGJhck1hcCgpLT5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKLSAgICAgICAgaXQtPmZpcnN0LT5zdHlsZUNoYW5nZWQoKTsKLSAgICAgICAgaXQt
PmZpcnN0LT5pbnZhbGlkYXRlKCk7CisgICAgICAgIGl0LT5rZXktPnN0eWxlQ2hhbmdlZCgpOwor
ICAgICAgICBpdC0+a2V5LT5pbnZhbGlkYXRlKCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWxTdG9yYWdlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbFN0b3JhZ2UuY3BwCmluZGV4
IGY2MjRkNGZjYjI5MmNjNDBjNWI2OWVlZGYzZTVjODc1MTUyZjAxZjkuLjhiNWFjNDc4YjIxMzUw
NmNkOWNlYWNhOWJhNTg1MWJjZDI5M2E1YzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbFN0b3JhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbFN0b3JhZ2UuY3BwCkBAIC0xNDcsNyArMTQ3LDcg
QEAgYm9vbCBDcmVkZW50aWFsU3RvcmFnZTo6c2V0KGNvbnN0IENyZWRlbnRpYWwmIGNyZWRlbnRp
YWwsIGNvbnN0IEtVUkwmIHVybCkKICAgICBpZiAoaXRlciA9PSBwYXRoVG9EZWZhdWx0UHJvdGVj
dGlvblNwYWNlTWFwKCkuZW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBBU1NFUlQo
b3JpZ2luc1dpdGhDcmVkZW50aWFscygpLmNvbnRhaW5zKG9yaWdpblN0cmluZ0Zyb21VUkwodXJs
KSkpOwotICAgIHByb3RlY3Rpb25TcGFjZVRvQ3JlZGVudGlhbE1hcCgpLnNldChpdGVyLT5zZWNv
bmQsIGNyZWRlbnRpYWwpOworICAgIHByb3RlY3Rpb25TcGFjZVRvQ3JlZGVudGlhbE1hcCgpLnNl
dChpdGVyLT52YWx1ZSwgY3JlZGVudGlhbCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE1
Niw3ICsxNTYsNyBAQCBDcmVkZW50aWFsIENyZWRlbnRpYWxTdG9yYWdlOjpnZXQoY29uc3QgS1VS
TCYgdXJsKQogICAgIFBhdGhUb0RlZmF1bHRQcm90ZWN0aW9uU3BhY2VNYXA6Oml0ZXJhdG9yIGl0
ZXIgPSBmaW5kRGVmYXVsdFByb3RlY3Rpb25TcGFjZUZvclVSTCh1cmwpOwogICAgIGlmIChpdGVy
ID09IHBhdGhUb0RlZmF1bHRQcm90ZWN0aW9uU3BhY2VNYXAoKS5lbmQoKSkKICAgICAgICAgcmV0
dXJuIENyZWRlbnRpYWwoKTsKLSAgICByZXR1cm4gcHJvdGVjdGlvblNwYWNlVG9DcmVkZW50aWFs
TWFwKCkuZ2V0KGl0ZXItPnNlY29uZCk7CisgICAgcmV0dXJuIHByb3RlY3Rpb25TcGFjZVRvQ3Jl
ZGVudGlhbE1hcCgpLmdldChpdGVyLT52YWx1ZSk7CiB9CiAKIHZvaWQgQ3JlZGVudGlhbFN0b3Jh
Z2U6OnNldFByaXZhdGVNb2RlKGJvb2wgbW9kZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvSFRUUEhlYWRlck1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL0hUVFBIZWFkZXJNYXAuY3BwCmluZGV4IDUwMDkxZTE5ZDNhZjU2ZmY0YThk
ZjE3NWJmODk3ODcwMDc2MTQyODAuLmRlZmUxYWU4NGJmMGFkZjA3Nzk0OTU1YjExYTVkYzczZWEw
MjNlMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUEhl
YWRlck1hcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQSGVh
ZGVyTWFwLmNwcApAQCAtNTIsNyArNTIsNyBAQCBQYXNzT3duUHRyPENyb3NzVGhyZWFkSFRUUEhl
YWRlck1hcERhdGE+IEhUVFBIZWFkZXJNYXA6OmNvcHlEYXRhKCkgY29uc3QKIAogICAgIEhUVFBI
ZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZF9pdCA9IGVuZCgpOwogICAgIGZvciAoSFRUUEhl
YWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBiZWdpbigpOyBpdCAhPSBlbmRfaXQ7ICsraXQp
IHsKLSAgICAgICAgZGF0YS0+YXBwZW5kKG1ha2VfcGFpcihpdC0+Zmlyc3Quc3RyaW5nKCkuaXNv
bGF0ZWRDb3B5KCksIGl0LT5zZWNvbmQuaXNvbGF0ZWRDb3B5KCkpKTsKKyAgICAgICAgZGF0YS0+
YXBwZW5kKG1ha2VfcGFpcihpdC0+a2V5LnN0cmluZygpLmlzb2xhdGVkQ29weSgpLCBpdC0+dmFs
dWUuaXNvbGF0ZWRDb3B5KCkpKTsKICAgICB9CiAgICAgcmV0dXJuIGRhdGEucmVsZWFzZSgpOwog
fQpAQCAtMTAwLDcgKzEwMCw3IEBAIFN0cmluZyBIVFRQSGVhZGVyTWFwOjpnZXQoY29uc3QgY2hh
ciogbmFtZSkgY29uc3QKICAgICBjb25zdF9pdGVyYXRvciBpID0gZmluZDxjb25zdCBjaGFyKiwg
Q2FzZUZvbGRpbmdDU3RyaW5nVHJhbnNsYXRvcj4obmFtZSk7CiAgICAgaWYgKGkgPT0gZW5kKCkp
CiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICByZXR1cm4gaS0+c2Vjb25kOworICAgIHJl
dHVybiBpLT52YWx1ZTsKIH0KICAgICAKIGJvb2wgSFRUUEhlYWRlck1hcDo6Y29udGFpbnMoY29u
c3QgY2hhciogbmFtZSkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvTUlNRUhlYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L01JTUVIZWFkZXIuY3BwCmluZGV4IDVkNmI4NThmNDZlNDM4M2ZjYjJmZWE2Mjg1OGFmNzUzMmQ0
M2E1YWYuLmY0ZTNlYmY2NzRkZTZiZDFkMjRhOTU5MGE0ODE4YmViNmZkOGRlNjMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvTUlNRUhlYWRlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9NSU1FSGVhZGVyLmNwcApAQCAtODYsNyAr
ODYsNyBAQCBQYXNzUmVmUHRyPE1JTUVIZWFkZXI+IE1JTUVIZWFkZXI6OnBhcnNlSGVhZGVyKFNo
YXJlZEJ1ZmZlckNodW5rUmVhZGVyKiBidWZmZXIpCiAgICAgS2V5VmFsdWVNYXA6Oml0ZXJhdG9y
IG1pbWVQYXJhbWV0ZXJzSXRlcmF0b3IgPSBrZXlWYWx1ZVBhaXJzLmZpbmQoImNvbnRlbnQtdHlw
ZSIpOwogICAgIGlmIChtaW1lUGFyYW1ldGVyc0l0ZXJhdG9yICE9IGtleVZhbHVlUGFpcnMuZW5k
KCkpIHsKICAgICAgICAgLy8gRklYTUU6IG1ha2UgQ29udGVudFR5cGVQYXJzZXIgbW9yZSBmbGV4
aWJsZSBzbyB3ZSBkb24ndCBoYXZlIHRvIHN5bnRoZXNpemUgdGhlICJDb250ZW50LVR5cGU6Ii4K
LSAgICAgICAgQ29udGVudFR5cGVQYXJzZXIgY29udGVudFR5cGVQYXJzZXIobWFrZVN0cmluZygi
Q29udGVudC1UeXBlOiIsIG1pbWVQYXJhbWV0ZXJzSXRlcmF0b3ItPnNlY29uZCkpOworICAgICAg
ICBDb250ZW50VHlwZVBhcnNlciBjb250ZW50VHlwZVBhcnNlcihtYWtlU3RyaW5nKCJDb250ZW50
LVR5cGU6IiwgbWltZVBhcmFtZXRlcnNJdGVyYXRvci0+dmFsdWUpKTsKICAgICAgICAgbWltZUhl
YWRlci0+bV9jb250ZW50VHlwZSA9IGNvbnRlbnRUeXBlUGFyc2VyLm1pbWVUeXBlKCk7CiAgICAg
ICAgIGlmICghbWltZUhlYWRlci0+aXNNdWx0aXBhcnQoKSkKICAgICAgICAgICAgIG1pbWVIZWFk
ZXItPm1fY2hhcnNldCA9IGNvbnRlbnRUeXBlUGFyc2VyLmNoYXJzZXQoKS5zdHJpcFdoaXRlU3Bh
Y2UoKTsKQEAgLTEwNSwxMSArMTA1LDExIEBAIFBhc3NSZWZQdHI8TUlNRUhlYWRlcj4gTUlNRUhl
YWRlcjo6cGFyc2VIZWFkZXIoU2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXIqIGJ1ZmZlcikKIAogICAg
IG1pbWVQYXJhbWV0ZXJzSXRlcmF0b3IgPSBrZXlWYWx1ZVBhaXJzLmZpbmQoImNvbnRlbnQtdHJh
bnNmZXItZW5jb2RpbmciKTsKICAgICBpZiAobWltZVBhcmFtZXRlcnNJdGVyYXRvciAhPSBrZXlW
YWx1ZVBhaXJzLmVuZCgpKQotICAgICAgICBtaW1lSGVhZGVyLT5tX2NvbnRlbnRUcmFuc2ZlckVu
Y29kaW5nID0gcGFyc2VDb250ZW50VHJhbnNmZXJFbmNvZGluZyhtaW1lUGFyYW1ldGVyc0l0ZXJh
dG9yLT5zZWNvbmQpOworICAgICAgICBtaW1lSGVhZGVyLT5tX2NvbnRlbnRUcmFuc2ZlckVuY29k
aW5nID0gcGFyc2VDb250ZW50VHJhbnNmZXJFbmNvZGluZyhtaW1lUGFyYW1ldGVyc0l0ZXJhdG9y
LT52YWx1ZSk7CiAKICAgICBtaW1lUGFyYW1ldGVyc0l0ZXJhdG9yID0ga2V5VmFsdWVQYWlycy5m
aW5kKCJjb250ZW50LWxvY2F0aW9uIik7CiAgICAgaWYgKG1pbWVQYXJhbWV0ZXJzSXRlcmF0b3Ig
IT0ga2V5VmFsdWVQYWlycy5lbmQoKSkKLSAgICAgICAgbWltZUhlYWRlci0+bV9jb250ZW50TG9j
YXRpb24gPSBtaW1lUGFyYW1ldGVyc0l0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgIG1pbWVIZWFk
ZXItPm1fY29udGVudExvY2F0aW9uID0gbWltZVBhcmFtZXRlcnNJdGVyYXRvci0+dmFsdWU7CiAK
ICAgICByZXR1cm4gbWltZUhlYWRlci5yZWxlYXNlKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwCmluZGV4IDdkZGM0N2U0ZWE3
OTlhNDZkZWU2ZjMyY2ZkMDc4ZWY3NTE1NGYxZWUuLjZkMTJmOWQ4OWIwMjQ3NzQ2YTU3ZTFiYmNh
ZmIyYzIxN2Q1OTEwMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvUmVzb3VyY2VIYW5kbGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvUmVzb3VyY2VIYW5kbGUuY3BwCkBAIC03MSw3ICs3MSw3IEBAIFBhc3NSZWZQdHI8UmVzb3Vy
Y2VIYW5kbGU+IFJlc291cmNlSGFuZGxlOjpjcmVhdGUoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRl
eHQsIGNvCiAgICAgQnVpbHRpblJlc291cmNlSGFuZGxlQ29uc3RydWN0b3JNYXA6Oml0ZXJhdG9y
IHByb3RvY29sTWFwSXRlbSA9IGJ1aWx0aW5SZXNvdXJjZUhhbmRsZUNvbnN0cnVjdG9yTWFwKCku
ZmluZChyZXF1ZXN0LnVybCgpLnByb3RvY29sKCkpOwogCiAgICAgaWYgKHByb3RvY29sTWFwSXRl
bSAhPSBidWlsdGluUmVzb3VyY2VIYW5kbGVDb25zdHJ1Y3Rvck1hcCgpLmVuZCgpKQotICAgICAg
ICByZXR1cm4gcHJvdG9jb2xNYXBJdGVtLT5zZWNvbmQocmVxdWVzdCwgY2xpZW50KTsKKyAgICAg
ICAgcmV0dXJuIHByb3RvY29sTWFwSXRlbS0+dmFsdWUocmVxdWVzdCwgY2xpZW50KTsKIAogICAg
IFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4gbmV3SGFuZGxlKGFkb3B0UmVmKG5ldyBSZXNvdXJjZUhh
bmRsZShyZXF1ZXN0LCBjbGllbnQsIGRlZmVyc0xvYWRpbmcsIHNob3VsZENvbnRlbnRTbmlmZikp
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJj
ZVJlcXVlc3RCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3Vy
Y2VSZXF1ZXN0QmFzZS5jcHAKaW5kZXggNjRlYmMxOGM4YTc0NTBkZjY0YTYyMGE2NmQzZTM2ODMx
N2UxYzk2OS4uZjZjMGUxM2U3OWNmMTQ3OWY4ZmViYTY1N2MwYWZiZDI1NjY3ZGJmOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVz
dEJhc2UuY3BwCkBAIC0zNzQsNyArMzc0LDcgQEAgdm9pZCBSZXNvdXJjZVJlcXVlc3RCYXNlOjph
ZGRIVFRQSGVhZGVyRmllbGQoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBjb25zdCBTdHIKICAg
ICB1cGRhdGVSZXNvdXJjZVJlcXVlc3QoKTsKICAgICBIVFRQSGVhZGVyTWFwOjpBZGRSZXN1bHQg
cmVzdWx0ID0gbV9odHRwSGVhZGVyRmllbGRzLmFkZChuYW1lLCB2YWx1ZSk7CiAgICAgaWYgKCFy
ZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgKz0gIiwi
ICsgdmFsdWU7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgKz0gIiwiICsgdmFsdWU7
CiAKICAgICBpZiAodXJsKCkucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpKQogICAgICAgICBtX3Bs
YXRmb3JtUmVxdWVzdFVwZGF0ZWQgPSBmYWxzZTsKQEAgLTM4NCw3ICszODQsNyBAQCB2b2lkIFJl
c291cmNlUmVxdWVzdEJhc2U6OmFkZEhUVFBIZWFkZXJGaWVsZHMoY29uc3QgSFRUUEhlYWRlck1h
cCYgaGVhZGVyRmllbGRzKQogewogICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IGhlYWRlckZpZWxkcy5lbmQoKTsKICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gaGVhZGVyRmllbGRzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAg
ICAgYWRkSFRUUEhlYWRlckZpZWxkKGl0LT5maXJzdCwgaXQtPnNlY29uZCk7CisgICAgICAgIGFk
ZEhUVFBIZWFkZXJGaWVsZChpdC0+a2V5LCBpdC0+dmFsdWUpOwogfQogCiBib29sIGVxdWFsSWdu
b3JpbmdIZWFkZXJGaWVsZHMoY29uc3QgUmVzb3VyY2VSZXF1ZXN0QmFzZSYgYSwgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0QmFzZSYgYikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJjZVJlcXVlc3RCbGFja0JlcnJ5LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJjZVJlcXVlc3RCbGFj
a0JlcnJ5LmNwcAppbmRleCA5ZjZmZmFiYTU1NmQyMzAzZjZmYTlkMWFiOTRiYzZlYWM4ZGNhYWM2
Li4wYzgxMjczOGQ1YzU1ZDg3ZDI1NzViM2Y3ODZiMDA0ODZiOTE4NTI0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvUmVzb3VyY2VSZXF1ZXN0
QmxhY2tCZXJyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFj
a2JlcnJ5L1Jlc291cmNlUmVxdWVzdEJsYWNrQmVycnkuY3BwCkBAIC0xNDAsNyArMTQwLDcgQEAg
UmVzb3VyY2VSZXF1ZXN0OjpUYXJnZXRUeXBlIFJlc291cmNlUmVxdWVzdDo6dGFyZ2V0VHlwZUZy
b21NaW1lVHlwZShjb25zdCBTdHJpbmcKICAgICBpZiAoaXRlciA9PSBtYXAuZW5kKCkpCiAgICAg
ICAgIHJldHVybiBSZXNvdXJjZVJlcXVlc3Q6OlRhcmdldElzVW5zcGVjaWZpZWQ7CiAKLSAgICBy
ZXR1cm4gaXRlci0+c2Vjb25kOworICAgIHJldHVybiBpdGVyLT52YWx1ZTsKIH0KIAogdm9pZCBS
ZXNvdXJjZVJlcXVlc3Q6OmluaXRpYWxpemVQbGF0Zm9ybVJlcXVlc3QoTmV0d29ya1JlcXVlc3Qm
IHBsYXRmb3JtUmVxdWVzdCwgYm9vbCBjb29raWVzRW5hYmxlZCwgYm9vbCBpc0luaXRpYWwsIGJv
b2wgaXNSZWRpcmVjdCkgY29uc3QKQEAgLTE5OCw4ICsxOTgsOCBAQCB2b2lkIFJlc291cmNlUmVx
dWVzdDo6aW5pdGlhbGl6ZVBsYXRmb3JtUmVxdWVzdChOZXR3b3JrUmVxdWVzdCYgcGxhdGZvcm1S
ZXF1ZXN0LAogICAgICAgICBib29sIGNvb2tpZUhlYWRlck1heUJlRGlydHkgPSBpc1JlZGlyZWN0
IHx8IGNhY2hlUG9saWN5KCkgPT0gV2ViQ29yZTo6UmVsb2FkSWdub3JpbmdDYWNoZURhdGEgfHwg
Y2FjaGVQb2xpY3koKSA9PSBXZWJDb3JlOjpSZXR1cm5DYWNoZURhdGFFbHNlTG9hZDsKIAogICAg
ICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaHR0cEhlYWRlckZp
ZWxkcygpLmJlZ2luKCk7IGl0ICE9IGh0dHBIZWFkZXJGaWVsZHMoKS5lbmQoKTsgKytpdCkgewot
ICAgICAgICAgICAgU3RyaW5nIGtleSA9IGl0LT5maXJzdDsKLSAgICAgICAgICAgIFN0cmluZyB2
YWx1ZSA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICBTdHJpbmcga2V5ID0gaXQtPmtleTsKKyAg
ICAgICAgICAgIFN0cmluZyB2YWx1ZSA9IGl0LT52YWx1ZTsKICAgICAgICAgICAgIGlmICgha2V5
LmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShrZXks
ICJDb29raWUiKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBXZSB3b24ndCB1c2UgdGhlIG9s
ZCBjb29raWVzIG9mIHJlc291cmNlUmVxdWVzdCBmb3IgbmV3IGxvY2F0aW9uIGJlY2F1c2UgdGhl
c2UgY29va2llcyBtYXkgYmUgY2hhbmdlZCBieSByZWRpcmVjdGlvbi4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRk5ldC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZOZXQu
Y3BwCmluZGV4IGY2ZDFmMzgyMTI2MmYxOTUwNDE1NTlhMjU2YzAyYmQ2YmQ3ODI5ZTUuLjAxZThi
OGFlNWMwZDFjNmE2YThmMDMzMDg1ZTkwZjAxMGJjMWY3YzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRk5ldC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNw
cApAQCAtNDI4LDcgKzQyOCw3IEBAIHN0YXRpYyBDRlVSTFJlcXVlc3RSZWYgbWFrZUZpbmFsUmVx
dWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGJvb2wgc2hvCiAgICAgICAgIGlm
ICghc3NsUHJvcHMpCiAgICAgICAgICAgICBzc2xQcm9wcy5hZG9wdENGKENGRGljdGlvbmFyeUNy
ZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5
Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOwogI2lmIFBMQVRG
T1JNKFdJTikKLSAgICAgICAgd2tTZXRDbGllbnRDZXJ0aWZpY2F0ZUluU1NMUHJvcGVydGllcyhz
c2xQcm9wcy5nZXQoKSwgKGNsaWVudENlcnQtPnNlY29uZCkuZ2V0KCkpOworICAgICAgICB3a1Nl
dENsaWVudENlcnRpZmljYXRlSW5TU0xQcm9wZXJ0aWVzKHNzbFByb3BzLmdldCgpLCAoY2xpZW50
Q2VydC0+dmFsdWUpLmdldCgpKTsKICNlbmRpZgogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZVJlcXVlc3RDRk5ldC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlUmVxdWVzdENGTmV0LmNw
cAppbmRleCA1N2E2ZmIyYzhhNGMwOGY3OWZiZDRiOWJjNTViODVhOTM0MjY3YTM3Li44Y2ZmODdj
YTBkNThlYTJlNTIzZjM3MzBkNmI0YTc3MzBiMDZiZTRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlUmVxdWVzdENGTmV0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlUmVxdWVzdENGTmV0LmNw
cApAQCAtMTIwLDggKzEyMCw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRIZWFkZXJGaWVsZHMo
Q0ZNdXRhYmxlVVJMUmVxdWVzdFJlZiByZXF1ZXN0LCBjb25zdCBIVFRQSGVhCiAKICAgICBIVFRQ
SGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSByZXF1ZXN0SGVhZGVycy5lbmQoKTsKICAg
ICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcmVxdWVzdEhlYWRlcnMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIENGU3RyaW5nUmVmIGtleSA9IGl0
LT5maXJzdC5jcmVhdGVDRlN0cmluZygpOwotICAgICAgICBDRlN0cmluZ1JlZiB2YWx1ZSA9IGl0
LT5zZWNvbmQuY3JlYXRlQ0ZTdHJpbmcoKTsKKyAgICAgICAgQ0ZTdHJpbmdSZWYga2V5ID0gaXQt
PmtleS5jcmVhdGVDRlN0cmluZygpOworICAgICAgICBDRlN0cmluZ1JlZiB2YWx1ZSA9IGl0LT52
YWx1ZS5jcmVhdGVDRlN0cmluZygpOwogICAgICAgICBDRlVSTFJlcXVlc3RTZXRIVFRQSGVhZGVy
RmllbGRWYWx1ZShyZXF1ZXN0LCBrZXksIHZhbHVlKTsKICAgICAgICAgQ0ZSZWxlYXNlKGtleSk7
CiAgICAgICAgIENGUmVsZWFzZSh2YWx1ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1hbmFnZXIuY3BwCmlu
ZGV4IGFmMDc1ZWY5ZTMyMTg4ZTc3MTQ5N2ViZjdjNzRkYzFhYTE1ZTIxN2EuLjY1YmNjMTBhZDNk
MjAwNWQ2ODlkNzNlOGRkNjc5ODhiOWM1Y2I1ZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1hbmFnZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1hbmFnZXIu
Y3BwCkBAIC03MDMsOCArNzAzLDggQEAgdm9pZCBSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OmluaXRp
YWxpemVIYW5kbGUoUmVzb3VyY2VIYW5kbGUqIGpvYikKICAgICAgICAgSFRUUEhlYWRlck1hcCBj
dXN0b21IZWFkZXJzID0gam9iLT5maXJzdFJlcXVlc3QoKS5odHRwSGVhZGVyRmllbGRzKCk7CiAg
ICAgICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGN1c3RvbUhlYWRlcnMu
ZW5kKCk7CiAgICAgICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBj
dXN0b21IZWFkZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgU3Ry
aW5nIGtleSA9IGl0LT5maXJzdDsKLSAgICAgICAgICAgIFN0cmluZyB2YWx1ZSA9IGl0LT5zZWNv
bmQ7CisgICAgICAgICAgICBTdHJpbmcga2V5ID0gaXQtPmtleTsKKyAgICAgICAgICAgIFN0cmlu
ZyB2YWx1ZSA9IGl0LT52YWx1ZTsKICAgICAgICAgICAgIFN0cmluZyBoZWFkZXJTdHJpbmcoa2V5
KTsKICAgICAgICAgICAgIGhlYWRlclN0cmluZy5hcHBlbmQoIjogIik7CiAgICAgICAgICAgICBo
ZWFkZXJTdHJpbmcuYXBwZW5kKHZhbHVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlUmVxdWVzdE1hYy5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlUmVxdWVzdE1hYy5tbQppbmRleCA5NmM0OTdk
NTAzYjU0N2UzYjAxYTlhMjUyYTU4ZmMyZWVmM2Y5NDQ0Li45MzIxNmNiNTVlODU3NzMxMzZmM2U4
YzNhMDdjZTZmYjU1NmUwNmQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL21hYy9SZXNvdXJjZVJlcXVlc3RNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VSZXF1ZXN0TWFjLm1tCkBAIC0xNTUsNyArMTU1LDcg
QEAgdm9pZCBSZXNvdXJjZVJlcXVlc3Q6OmRvVXBkYXRlUGxhdGZvcm1SZXF1ZXN0KCkKICAgICAg
ICAgW25zUmVxdWVzdCBzZXRWYWx1ZTpuaWwgZm9ySFRUUEhlYWRlckZpZWxkOltvbGRIZWFkZXJG
aWVsZE5hbWVzIG9iamVjdEF0SW5kZXg6aSAtIDFdXTsKICAgICBIVFRQSGVhZGVyTWFwOjpjb25z
dF9pdGVyYXRvciBlbmQgPSBodHRwSGVhZGVyRmllbGRzKCkuZW5kKCk7CiAgICAgZm9yIChIVFRQ
SGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGh0dHBIZWFkZXJGaWVsZHMoKS5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIFtuc1JlcXVlc3Qgc2V0VmFsdWU6aXQtPnNlY29u
ZCBmb3JIVFRQSGVhZGVyRmllbGQ6aXQtPmZpcnN0XTsKKyAgICAgICAgW25zUmVxdWVzdCBzZXRW
YWx1ZTppdC0+dmFsdWUgZm9ySFRUUEhlYWRlckZpZWxkOml0LT5rZXldOwogCiAgICAgLy8gVGhl
IGJlbG93IGNoZWNrIGNhbiBiZSByZW1vdmVkIG9uY2Ugd2UgcmVxdWlyZSBhIHZlcnNpb24gb2Yg
Rm91bmRhdGlvbiB3aXRoIC1bTlNNdXRhYmxlVVJMUmVxdWVzdCBzZXRDb250ZW50RGlzcG9zaXRp
b25FbmNvZGluZ0ZhbGxiYWNrQXJyYXk6XSBtZXRob2QuCiAgICAgc3RhdGljIGJvb2wgc3VwcG9y
dHNDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXkgPSBbTlNNdXRhYmxlVVJM
UmVxdWVzdCBpbnN0YW5jZXNSZXNwb25kVG9TZWxlY3RvcjpAc2VsZWN0b3Ioc2V0Q29udGVudERp
c3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5OildOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9xdC9SZXNvdXJjZVJlcXVlc3RRdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3F0L1Jlc291cmNlUmVxdWVzdFF0LmNwcAppbmRleCBk
YmI3Yjc0ZGQ1OWM0ZjRkMGYyZWNlY2ZkYmUwODEzZDI4Yjc0YTNlLi5lODRlNjc3YTVmNzJjNzFl
ODljNjAwZmQ3NzcwMGJiNjgyMjE0YzJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3F0L1Jlc291cmNlUmVxdWVzdFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3F0L1Jlc291cmNlUmVxdWVzdFF0LmNwcApAQCAtNDksOCArNDks
OCBAQCBRTmV0d29ya1JlcXVlc3QgUmVzb3VyY2VSZXF1ZXN0Ojp0b05ldHdvcmtSZXF1ZXN0KE5l
dHdvcmtpbmdDb250ZXh0ICpjb250ZXh0KSBjbwogICAgIGNvbnN0IEhUVFBIZWFkZXJNYXAgJmhl
YWRlcnMgPSBodHRwSGVhZGVyRmllbGRzKCk7CiAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IGhlYWRlcnMuYmVnaW4oKSwgZW5kID0gaGVhZGVycy5lbmQoKTsKICAg
ICAgICAgIGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBRQnl0ZUFycmF5IG5hbWUgPSBRU3Ry
aW5nKGl0LT5maXJzdCkudG9MYXRpbjEoKTsKLSAgICAgICAgUUJ5dGVBcnJheSB2YWx1ZSA9IFFT
dHJpbmcoaXQtPnNlY29uZCkudG9MYXRpbjEoKTsKKyAgICAgICAgUUJ5dGVBcnJheSBuYW1lID0g
UVN0cmluZyhpdC0+a2V5KS50b0xhdGluMSgpOworICAgICAgICBRQnl0ZUFycmF5IHZhbHVlID0g
UVN0cmluZyhpdC0+dmFsdWUpLnRvTGF0aW4xKCk7CiAgICAgICAgIC8vIFFOZXR3b3JrUmVxdWVz
dDo6c2V0UmF3SGVhZGVyKCkgd291bGQgcmVtb3ZlIHRoZSBoZWFkZXIgaWYgdGhlIHZhbHVlIGlz
IG51bGwKICAgICAgICAgLy8gTWFrZSBzdXJlIHRvIHNldCBhbiBlbXB0eSBoZWFkZXIgaW5zdGVh
ZCBvZiBudWxsIGhlYWRlci4KICAgICAgICAgaWYgKCF2YWx1ZS5pc051bGwoKSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNv
dXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFu
ZGxlU291cC5jcHAKaW5kZXggMzBhMmRlNDU1ZTQyZGJjM2JhYWZhYjM0OWE1NGQwOGM1YjljOWMy
NS4uZGMzYjJlMmM1ZmVlMDg0MDY1OThhNGY5ZjkxZmE3NDZlZTY4NjBmOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFu
ZGxlU291cC5jcHAKQEAgLTQ0OCw3ICs0NDgsNyBAQCBzdGF0aWMgdm9pZCBzZW5kUmVxdWVzdENh
bGxiYWNrKEdPYmplY3QqIHNvdXJjZSwgR0FzeW5jUmVzdWx0KiByZXMsIGdwb2ludGVyIGRhdAog
CiAgICAgICAgIGlmIChoYXNVbmlnbm9yZWRUTFNFcnJvcnMoaGFuZGxlLmdldCgpKSkgewogICAg
ICAgICAgICAgQ2VydGlmaWNhdGVzTWFwOjppdGVyYXRvciBpdGVyID0gY2xpZW50Q2VydGlmaWNh
dGVzKCkuZmluZChoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVybCgpLmhvc3QoKS5sb3dlcigpKTsK
LSAgICAgICAgICAgIGlmIChpdGVyID09IGNsaWVudENlcnRpZmljYXRlcygpLmVuZCgpIHx8ICFp
dGVyLT5zZWNvbmQuY29udGFpbnMoZC0+bV9yZXNwb25zZS5zb3VwTWVzc2FnZUNlcnRpZmljYXRl
KCkpKSB7CisgICAgICAgICAgICBpZiAoaXRlciA9PSBjbGllbnRDZXJ0aWZpY2F0ZXMoKS5lbmQo
KSB8fCAhaXRlci0+dmFsdWUuY29udGFpbnMoZC0+bV9yZXNwb25zZS5zb3VwTWVzc2FnZUNlcnRp
ZmljYXRlKCkpKSB7CiAgICAgICAgICAgICAgICAgR093blB0cjxjaGFyPiB1cmkoc291cF91cmlf
dG9fc3RyaW5nKHNvdXBfcmVxdWVzdF9nZXRfdXJpKGQtPm1fc291cFJlcXVlc3QuZ2V0KCkpLCBG
QUxTRSkpOwogICAgICAgICAgICAgICAgIGNsaWVudC0+ZGlkRmFpbChoYW5kbGUuZ2V0KCksIFJl
c291cmNlRXJyb3IoZ19xdWFya190b19zdHJpbmcoU09VUF9IVFRQX0VSUk9SKSwgU09VUF9TVEFU
VVNfU1NMX0ZBSUxFRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVyaS5nZXQoKSwgdW5hY2NlcHRhYmxlVExTQ2VydGlmaWNhdGUo
KSwKQEAgLTgxOSw3ICs4MTksNyBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpzZXRIb3N0QWxsb3dz
QW55SFRUUFNDZXJ0aWZpY2F0ZShjb25zdCBTdHJpbmcmIGhvc3QpCiAKIHZvaWQgUmVzb3VyY2VI
YW5kbGU6OnNldENsaWVudENlcnRpZmljYXRlKGNvbnN0IFN0cmluZyYgaG9zdCwgR1Rsc0NlcnRp
ZmljYXRlKiBjZXJ0aWZpY2F0ZSkKIHsKLSAgICBjbGllbnRDZXJ0aWZpY2F0ZXMoKS5hZGQoaG9z
dC5sb3dlcigpLCBIb3N0VExTQ2VydGlmaWNhdGVTZXQoKSkuaXRlcmF0b3ItPnNlY29uZC5hZGQo
Y2VydGlmaWNhdGUpOworICAgIGNsaWVudENlcnRpZmljYXRlcygpLmFkZChob3N0Lmxvd2VyKCks
IEhvc3RUTFNDZXJ0aWZpY2F0ZVNldCgpKS5pdGVyYXRvci0+dmFsdWUuYWRkKGNlcnRpZmljYXRl
KTsKIH0KIAogdm9pZCBSZXNvdXJjZUhhbmRsZTo6c2V0SWdub3JlU1NMRXJyb3JzKGJvb2wgaWdu
b3JlU1NMRXJyb3JzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9zb3VwL1Jlc291cmNlUmVxdWVzdFNvdXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVzdFNvdXAuY3BwCmluZGV4IGQ3MTI3YjRiNWI4ZTQ1
OWE0Y2FlYzU1YTU1MjdiYmNmM2M4Mzc3ODUuLjU3YWI0ZDY0N2IzYmZmYzI1YmE5MjM3NzhjNzFk
NGY0YmVlMTVjYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
c291cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0U291cC5jcHAKQEAgLTQzLDcgKzQzLDcgQEAg
dm9pZCBSZXNvdXJjZVJlcXVlc3Q6OnVwZGF0ZVNvdXBNZXNzYWdlKFNvdXBNZXNzYWdlKiBzb3Vw
TWVzc2FnZSkgY29uc3QKICAgICBpZiAoIWhlYWRlcnMuaXNFbXB0eSgpKSB7CiAgICAgICAgIEhU
VFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGhlYWRlcnMuZW5kKCk7CiAgICAgICAg
IGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBoZWFkZXJzLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVu
ZChzb3VwSGVhZGVycywgaXQtPmZpcnN0LnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGl0LT5zZWNv
bmQudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBl
bmQoc291cEhlYWRlcnMsIGl0LT5rZXkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgaXQtPnZhbHVl
LnV0ZjgoKS5kYXRhKCkpOwogICAgIH0KIAogICAgIFN0cmluZyBmaXJzdFBhcnR5U3RyaW5nID0g
Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKS5zdHJpbmcoKTsKQEAgLTY2LDcgKzY2LDcgQEAgU291cE1l
c3NhZ2UqIFJlc291cmNlUmVxdWVzdDo6dG9Tb3VwTWVzc2FnZSgpIGNvbnN0CiAgICAgaWYgKCFo
ZWFkZXJzLmlzRW1wdHkoKSkgewogICAgICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRv
ciBlbmQgPSBoZWFkZXJzLmVuZCgpOwogICAgICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gaGVhZGVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAg
ICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQoc291cEhlYWRlcnMsIGl0LT5maXJzdC5z
dHJpbmcoKS51dGY4KCkuZGF0YSgpLCBpdC0+c2Vjb25kLnV0ZjgoKS5kYXRhKCkpOworICAgICAg
ICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKHNvdXBIZWFkZXJzLCBpdC0+a2V5LnN0
cmluZygpLnV0ZjgoKS5kYXRhKCksIGl0LT52YWx1ZS51dGY4KCkuZGF0YSgpKTsKICAgICB9CiAK
ICAgICBTdHJpbmcgZmlyc3RQYXJ0eVN0cmluZyA9IGZpcnN0UGFydHlGb3JDb29raWVzKCkuc3Ry
aW5nKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
UmVzb3VyY2VSZXNwb25zZVNvdXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9zb3VwL1Jlc291cmNlUmVzcG9uc2VTb3VwLmNwcAppbmRleCBkZGFhODkzYjYzYTlmM2YxMDM1
M2YwZGVkNWVmNjNiYTRlMGZhY2VhLi43MzlkNDRiMjg1ZDNkOWQyOTFlOGQ1YjI3YWFiZTdlNjlk
ZTY1YTFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
UmVzb3VyY2VSZXNwb25zZVNvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvc291cC9SZXNvdXJjZVJlc3BvbnNlU291cC5jcHAKQEAgLTQ2LDcgKzQ2LDcgQEAgU291
cE1lc3NhZ2UqIFJlc291cmNlUmVzcG9uc2U6OnRvU291cE1lc3NhZ2UoKSBjb25zdAogICAgIGlm
ICghaGVhZGVycy5pc0VtcHR5KCkpIHsKICAgICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gaGVhZGVycy5lbmQoKTsKICAgICAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IGhlYWRlcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAg
ICAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKHNvdXBIZWFkZXJzLCBpdC0+Zmly
c3Quc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgaXQtPnNlY29uZC51dGY4KCkuZGF0YSgpKTsKKyAg
ICAgICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChzb3VwSGVhZGVycywgaXQtPmtl
eS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBpdC0+dmFsdWUudXRmOCgpLmRhdGEoKSk7CiAgICAg
fQogCiAgICAgc291cF9tZXNzYWdlX3NldF9mbGFncyhzb3VwTWVzc2FnZSwgbV9zb3VwRmxhZ3Mp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay93aW4vUmVzb3Vy
Y2VIYW5kbGVXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay93aW4vUmVz
b3VyY2VIYW5kbGVXaW4uY3BwCmluZGV4IDAyMTJkMGNkYTk4YzlmMTM3OTI4ZTYxMmZkZjk1MDM2
NWEwMWQwZDYuLmYyNTA1Mjc3NWIwZGVkZmUyMWM3NTVkM2Y4Mzk5ODUzZTdhMGYzOTcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvd2luL1Jlc291cmNlSGFuZGxl
V2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3dpbi9SZXNvdXJj
ZUhhbmRsZVdpbi5jcHAKQEAgLTMyMywxNSArMzIzLDE1IEBAIGJvb2wgUmVzb3VyY2VIYW5kbGU6
OnN0YXJ0KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0KQogICAgIGNvbnN0IEhUVFBIZWFkZXJN
YXAmIGh0dHBIZWFkZXJGaWVsZHMgPSBmaXJzdFJlcXVlc3QoKS5odHRwSGVhZGVyRmllbGRzKCk7
CiAKICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaHR0cEhlYWRl
ckZpZWxkcy5iZWdpbigpOyBpdCAhPSBodHRwSGVhZGVyRmllbGRzLmVuZCgpOyArK2l0KSB7Ci0g
ICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShpdC0+Zmlyc3QsICJBY2NlcHQiKSB8fCBlcXVh
bElnbm9yaW5nQ2FzZShpdC0+Zmlyc3QsICJSZWZlcmVyIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2Uo
aXQtPmZpcnN0LCAiVXNlci1BZ2VudCIpKQorICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2Uo
aXQtPmtleSwgIkFjY2VwdCIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKGl0LT5rZXksICJSZWZlcmVy
IikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UoaXQtPmtleSwgIlVzZXItQWdlbnQiKSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogCiAgICAgICAgIGlmICghaHR0cEhlYWRlcnMuaXNFbXB0eSgpKQogICAg
ICAgICAgICAgaHR0cEhlYWRlcnMuYXBwZW5kKCdcbicpOwogCi0gICAgICAgIGh0dHBIZWFkZXJz
LmFwcGVuZChpdC0+Zmlyc3QuY2hhcmFjdGVycygpLCBpdC0+Zmlyc3QubGVuZ3RoKCkpOworICAg
ICAgICBodHRwSGVhZGVycy5hcHBlbmQoaXQtPmtleS5jaGFyYWN0ZXJzKCksIGl0LT5rZXkubGVu
Z3RoKCkpOwogICAgICAgICBodHRwSGVhZGVycy5hcHBlbmQoJzonKTsKLSAgICAgICAgaHR0cEhl
YWRlcnMuYXBwZW5kKGl0LT5zZWNvbmQuY2hhcmFjdGVycygpLCBpdC0+c2Vjb25kLmxlbmd0aCgp
KTsKKyAgICAgICAgaHR0cEhlYWRlcnMuYXBwZW5kKGl0LT52YWx1ZS5jaGFyYWN0ZXJzKCksIGl0
LT52YWx1ZS5sZW5ndGgoKSk7CiAgICAgfQogCiAgICAgSU5URVJORVRfQlVGRkVSU1cgaW50ZXJu
ZXRCdWZmZXJzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUnVuTG9v
cFF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1J1bkxvb3BRdC5jcHAKaW5kZXgg
MmE4N2UyZmM4ZjY2Nzc3NjlmNzMxNDNlNTcxZTA5YzVhNTRjNmViYS4uNTAxYmQ1YzEyM2IwZjAz
Y2U5YTBjZjkwZTE3MjY5MWY1MDZkOWExYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vcXQvUnVuTG9vcFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9S
dW5Mb29wUXQuY3BwCkBAIC0xMDksNyArMTA5LDcgQEAgdm9pZCBSdW5Mb29wOjpUaW1lckJhc2U6
OnRpbWVyRmlyZWQoUnVuTG9vcCogcnVuTG9vcCwgaW50IElEKQogewogICAgIFRpbWVyTWFwOjpp
dGVyYXRvciBpdCA9IHJ1bkxvb3AtPm1fYWN0aXZlVGltZXJzLmZpbmQoSUQpOwogICAgIEFTU0VS
VChpdCAhPSBydW5Mb29wLT5tX2FjdGl2ZVRpbWVycy5lbmQoKSk7Ci0gICAgVGltZXJCYXNlKiB0
aW1lciA9IGl0LT5zZWNvbmQ7CisgICAgVGltZXJCYXNlKiB0aW1lciA9IGl0LT52YWx1ZTsKIAog
ICAgIGlmICghdGltZXItPm1faXNSZXBlYXRpbmcpIHsKICAgICAgICAgLy8gU3RvcCB0aGUgdGlt
ZXIgKGNhbGxpbmcgc3RvcCB3b3VsZCBuZWVkIGFub3RoZXIgaGFzaCB0YWJsZSBsb29rdXApLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Mb2NhbGVUb1NjcmlwdE1h
cHBpbmdEZWZhdWx0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9jYWxlVG9T
Y3JpcHRNYXBwaW5nRGVmYXVsdC5jcHAKaW5kZXggOTA5NDczODQ5Njk2YjRjMjkyZDZiOWFjMjg1
YmM3ZDlmNGFjMjg0MS4uNTgyNjQ5MDdkNWU0MGEwMDliNDBmZDY5OTE4MGYzM2VmN2Q1MTdjMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Mb2NhbGVUb1NjcmlwdE1h
cHBpbmdEZWZhdWx0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0xvY2Fs
ZVRvU2NyaXB0TWFwcGluZ0RlZmF1bHQuY3BwCkBAIC0xNjYsNyArMTY2LDcgQEAgVVNjcmlwdENv
ZGUgc2NyaXB0TmFtZVRvQ29kZShjb25zdCBTdHJpbmcmIHNjcmlwdE5hbWUpCiAKICAgICBIYXNo
TWFwPFN0cmluZywgVVNjcmlwdENvZGU+OjppdGVyYXRvciBpdCA9IHNjcmlwdE5hbWVDb2RlTWFw
LmZpbmQoc2NyaXB0TmFtZS5sb3dlcigpKTsKICAgICBpZiAoaXQgIT0gc2NyaXB0TmFtZUNvZGVN
YXAuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gaXQt
PnZhbHVlOwogICAgIHJldHVybiBVU0NSSVBUX0lOVkFMSURfQ09ERTsKIH0KIApAQCAtMzg5LDcg
KzM4OSw3IEBAIFVTY3JpcHRDb2RlIGxvY2FsZVRvU2NyaXB0Q29kZUZvckZvbnRTZWxlY3Rpb24o
Y29uc3QgU3RyaW5nJiBsb2NhbGUpCiAgICAgd2hpbGUgKCFjYW5vbmljYWxMb2NhbGUuaXNFbXB0
eSgpKSB7CiAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBVU2NyaXB0Q29kZT46Oml0ZXJhdG9yIGl0
ID0gbG9jYWxlU2NyaXB0TWFwLmZpbmQoY2Fub25pY2FsTG9jYWxlKTsKICAgICAgICAgaWYgKGl0
ICE9IGxvY2FsZVNjcmlwdE1hcC5lbmQoKSkKLSAgICAgICAgICAgIHJldHVybiBpdC0+c2Vjb25k
OworICAgICAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKICAgICAgICAgc2l6ZV90IHBvcyA9IGNh
bm9uaWNhbExvY2FsZS5yZXZlcnNlRmluZCgnXycpOwogICAgICAgICBpZiAocG9zID09IG5vdEZv
dW5kKQogICAgICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnkuY3BwCmluZGV4IDQ3NjNiZjgzNGMwZTAxZTYx
ODY3N2I4YTExNDE0ODAzNjE1MjlhNGUuLmQyMjkyZTRlZDVmMWYwMmQ0NDQxM2M3OWY4MzU5YWFj
Y2M4MDY3MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVu
Y29kaW5nUmVnaXN0cnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4
dEVuY29kaW5nUmVnaXN0cnkuY3BwCkBAIC0xOTYsOCArMTk2LDggQEAgc3RhdGljIHZvaWQgcHJ1
bmVCbGFja2xpc3RlZENvZGVjcygpCiAgICAgICAgIFRleHRFbmNvZGluZ05hbWVNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gdGV4dEVuY29kaW5nTmFtZU1hcC0+YmVnaW4oKTsKICAgICAgICAgVGV4
dEVuY29kaW5nTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gdGV4dEVuY29kaW5nTmFtZU1h
cC0+ZW5kKCk7CiAgICAgICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAg
IGlmIChpdC0+c2Vjb25kID09IGF0b21pY05hbWUpCi0gICAgICAgICAgICAgICAgbmFtZXMuYXBw
ZW5kKGl0LT5maXJzdCk7CisgICAgICAgICAgICBpZiAoaXQtPnZhbHVlID09IGF0b21pY05hbWUp
CisgICAgICAgICAgICAgICAgbmFtZXMuYXBwZW5kKGl0LT5rZXkpOwogICAgICAgICB9CiAKICAg
ICAgICAgc2l6ZV90IGxlbmd0aCA9IG5hbWVzLnNpemUoKTsKQEAgLTM3OSw3ICszNzksNyBAQCB2
b2lkIGR1bXBUZXh0RW5jb2RpbmdOYW1lTWFwKCkKICAgICBUZXh0RW5jb2RpbmdOYW1lTWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IHRleHRFbmNvZGluZ05hbWVNYXAtPmJlZ2luKCk7CiAgICAgVGV4
dEVuY29kaW5nTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gdGV4dEVuY29kaW5nTmFtZU1h
cC0+ZW5kKCk7CiAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgZnByaW50Zihz
dGRlcnIsICInJXMnID0+ICclcydcbiIsIGl0LT5maXJzdCwgaXQtPnNlY29uZCk7CisgICAgICAg
IGZwcmludGYoc3RkZXJyLCAiJyVzJyA9PiAnJXMnXG4iLCBpdC0+a2V5LCBpdC0+dmFsdWUpOwog
fQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvdHJh
bnNjb2Rlci9Gb250VHJhbnNjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L3RyYW5zY29kZXIvRm9udFRyYW5zY29kZXIuY3BwCmluZGV4IDRlMDdmNTBmYmRiMGM1N2MzZWVj
YTZmOGJlNzFmNzUwNWRiNTNiYzAuLjQ4NDIyOGNhYThlNzYwNzFiMzdhOWQyMGE5OTJkNTBhMWQ0
MWY0MGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvdHJhbnNjb2Rl
ci9Gb250VHJhbnNjb2Rlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC90
cmFuc2NvZGVyL0ZvbnRUcmFuc2NvZGVyLmNwcApAQCAtNjYsNyArNjYsNyBAQCBGb250VHJhbnNj
b2Rlcjo6Q29udmVydGVyVHlwZSBGb250VHJhbnNjb2Rlcjo6Y29udmVydGVyVHlwZShjb25zdCBG
b250RGVzY3JpcHRpbwogICAgIGlmICghZm9udEZhbWlseS5pc051bGwoKSkgewogICAgICAgICBI
YXNoTWFwPEF0b21pY1N0cmluZywgQ29udmVydGVyVHlwZT46OmNvbnN0X2l0ZXJhdG9yIGZvdW5k
ID0gbV9jb252ZXJ0ZXJUeXBlcy5maW5kKGZvbnRGYW1pbHkpOwogICAgICAgICBpZiAoZm91bmQg
IT0gbV9jb252ZXJ0ZXJUeXBlcy5lbmQoKSkKLSAgICAgICAgICAgIHJldHVybiBmb3VuZC0+c2Vj
b25kOworICAgICAgICAgICAgcmV0dXJuIGZvdW5kLT52YWx1ZTsKICAgICB9CiAKICAgICAvLyBJ
RSdzIGRlZmF1bHQgZm9udHMgZm9yIEphcGFuZXNlIGVuY29kaW5ncyBjaGFuZ2UgYmFja3NsYXNo
ZXMgaW50byB5ZW4gc2lnbnMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L3dpbi9UZXh0Q29kZWNXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC93
aW4vVGV4dENvZGVjV2luLmNwcAppbmRleCBlMTkyMzdkNjhkOTBkZjJmNTAzYWY0MjM5YWEzNjdi
NmYxNGYyNGI1Li44NzlhZjc2OTc3MmZmNTE1ZjM1NGFhOGIxOTcxNjk5YjYyYWJhNjYzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3dpbi9UZXh0Q29kZWNXaW4uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvd2luL1RleHRDb2RlY1dpbi5jcHAK
QEAgLTEwNSwxNyArMTA1LDE3IEBAIExhbmd1YWdlTWFuYWdlcjo6TGFuZ3VhZ2VNYW5hZ2VyKCkK
ICAgICAgICAgICAgIGkgPSBjb2RlUGFnZUNoYXJzZXRzKCkuc2V0KGNwSW5mby51aUNvZGVQYWdl
LCBuYW1lKS5pdGVyYXRvcjsKICAgICAgICAgfQogICAgICAgICBpZiAoaSAhPSBjb2RlUGFnZUNo
YXJzZXRzKCkuZW5kKCkpIHsKLSAgICAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBDaGFyc2V0SW5m
bz46Oml0ZXJhdG9yIGogPSBrbm93bkNoYXJzZXRzKCkuZmluZChTdHJpbmcoaS0+c2Vjb25kLmRh
dGEoKSwgaS0+c2Vjb25kLmxlbmd0aCgpKSk7CisgICAgICAgICAgICBIYXNoTWFwPFN0cmluZywg
Q2hhcnNldEluZm8+OjppdGVyYXRvciBqID0ga25vd25DaGFyc2V0cygpLmZpbmQoU3RyaW5nKGkt
PnZhbHVlLmRhdGEoKSwgaS0+dmFsdWUubGVuZ3RoKCkpKTsKICAgICAgICAgICAgIEFTU0VSVChq
ICE9IGtub3duQ2hhcnNldHMoKS5lbmQoKSk7Ci0gICAgICAgICAgICBDaGFyc2V0SW5mbyYgaW5m
byA9IGotPnNlY29uZDsKLSAgICAgICAgICAgIGluZm8ubV9uYW1lID0gaS0+c2Vjb25kLmRhdGEo
KTsKKyAgICAgICAgICAgIENoYXJzZXRJbmZvJiBpbmZvID0gai0+dmFsdWU7CisgICAgICAgICAg
ICBpbmZvLm1fbmFtZSA9IGktPnZhbHVlLmRhdGEoKTsKICAgICAgICAgICAgIGluZm8ubV9mcmll
bmRseU5hbWUgPSBjcEluZm8ud3N6RGVzY3JpcHRpb247CiAgICAgICAgICAgICBpbmZvLm1fYWxp
YXNlcy5hcHBlbmQobmFtZSk7CiAgICAgICAgICAgICBpbmZvLm1fYWxpYXNlcy5hcHBlbmQoU3Ry
aW5nKGNwSW5mby53c3pIZWFkZXJDaGFyc2V0KS5sYXRpbjEoKSk7CiAgICAgICAgICAgICBpbmZv
Lm1fYWxpYXNlcy5hcHBlbmQoU3RyaW5nKGNwSW5mby53c3pCb2R5Q2hhcnNldCkubGF0aW4xKCkp
OwogICAgICAgICAgICAgU3RyaW5nIGNwTmFtZSA9ICJjcCIgKyBTdHJpbmc6Om51bWJlcihjcElu
Zm8udWlDb2RlUGFnZSk7CiAgICAgICAgICAgICBpbmZvLm1fYWxpYXNlcy5hcHBlbmQoY3BOYW1l
LmxhdGluMSgpKTsKLSAgICAgICAgICAgIHN1cHBvcnRlZENoYXJzZXRzKCkuYWRkKGktPnNlY29u
ZC5kYXRhKCkpOworICAgICAgICAgICAgc3VwcG9ydGVkQ2hhcnNldHMoKS5hZGQoaS0+dmFsdWUu
ZGF0YSgpKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTEyNiw3ICsxMjYsNyBAQCBzdGF0aWMg
VUlOVCBnZXRDb2RlUGFnZShjb25zdCBjaGFyKiBuYW1lKQogICAgIC8vIHNheWluZyAiPT0iIGlz
IG5vdCBmb3VuZCBmb3IgY29uc3RfaXRlcmF0b3IgYW5kIGl0ZXJhdG9yCiAgICAgY29uc3QgSGFz
aE1hcDxTdHJpbmcsIENoYXJzZXRJbmZvPiYgY2hhcnNldHMgPSBrbm93bkNoYXJzZXRzKCk7CiAg
ICAgSGFzaE1hcDxTdHJpbmcsIENoYXJzZXRJbmZvPjo6Y29uc3RfaXRlcmF0b3IgaSA9IGNoYXJz
ZXRzLmZpbmQobmFtZSk7Ci0gICAgcmV0dXJuIGkgPT0gY2hhcnNldHMuZW5kKCkgPyBDUF9BQ1Ag
OiBpLT5zZWNvbmQubV9jb2RlUGFnZTsKKyAgICByZXR1cm4gaSA9PSBjaGFyc2V0cy5lbmQoKSA/
IENQX0FDUCA6IGktPnZhbHVlLm1fY29kZVBhZ2U7CiB9CiAKIHN0YXRpYyBQYXNzT3duUHRyPFRl
eHRDb2RlYz4gbmV3VGV4dENvZGVjV2luKGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcsIGNv
bnN0IHZvaWQqKQpAQCAtMTQ5LDkgKzE0OSw5IEBAIHZvaWQgVGV4dENvZGVjV2luOjpyZWdpc3Rl
ckV4dGVuZGVkRW5jb2RpbmdOYW1lcyhFbmNvZGluZ05hbWVSZWdpc3RyYXIgcmVnaXN0cmFyCiAg
ICAgZm9yIChDaGFyc2V0U2V0OjppdGVyYXRvciBpID0gc3VwcG9ydGVkQ2hhcnNldHMoKS5iZWdp
bigpOyBpICE9IHN1cHBvcnRlZENoYXJzZXRzKCkuZW5kKCk7ICsraSkgewogICAgICAgICBIYXNo
TWFwPFN0cmluZywgQ2hhcnNldEluZm8+OjppdGVyYXRvciBqID0ga25vd25DaGFyc2V0cygpLmZp
bmQoKmkpOwogICAgICAgICBpZiAoaiAhPSBrbm93bkNoYXJzZXRzKCkuZW5kKCkpIHsKLSAgICAg
ICAgICAgIHJlZ2lzdHJhcihqLT5zZWNvbmQubV9uYW1lLmRhdGEoKSwgai0+c2Vjb25kLm1fbmFt
ZS5kYXRhKCkpOwotICAgICAgICAgICAgZm9yIChWZWN0b3I8Q1N0cmluZz46OmNvbnN0X2l0ZXJh
dG9yIGFsaWFzID0gai0+c2Vjb25kLm1fYWxpYXNlcy5iZWdpbigpOyBhbGlhcyAhPSBqLT5zZWNv
bmQubV9hbGlhc2VzLmVuZCgpOyArK2FsaWFzKQotICAgICAgICAgICAgICAgIHJlZ2lzdHJhcihh
bGlhcy0+ZGF0YSgpLCBqLT5zZWNvbmQubV9uYW1lLmRhdGEoKSk7CisgICAgICAgICAgICByZWdp
c3RyYXIoai0+dmFsdWUubV9uYW1lLmRhdGEoKSwgai0+dmFsdWUubV9uYW1lLmRhdGEoKSk7Cisg
ICAgICAgICAgICBmb3IgKFZlY3RvcjxDU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgYWxpYXMgPSBq
LT52YWx1ZS5tX2FsaWFzZXMuYmVnaW4oKTsgYWxpYXMgIT0gai0+dmFsdWUubV9hbGlhc2VzLmVu
ZCgpOyArK2FsaWFzKQorICAgICAgICAgICAgICAgIHJlZ2lzdHJhcihhbGlhcy0+ZGF0YSgpLCBq
LT52YWx1ZS5tX25hbWUuZGF0YSgpKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTE2Miw3ICsx
NjIsNyBAQCB2b2lkIFRleHRDb2RlY1dpbjo6cmVnaXN0ZXJFeHRlbmRlZENvZGVjcyhUZXh0Q29k
ZWNSZWdpc3RyYXIgcmVnaXN0cmFyKQogICAgIGZvciAoQ2hhcnNldFNldDo6aXRlcmF0b3IgaSA9
IHN1cHBvcnRlZENoYXJzZXRzKCkuYmVnaW4oKTsgaSAhPSBzdXBwb3J0ZWRDaGFyc2V0cygpLmVu
ZCgpOyArK2kpIHsKICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIENoYXJzZXRJbmZvPjo6aXRlcmF0
b3IgaiA9IGtub3duQ2hhcnNldHMoKS5maW5kKCppKTsKICAgICAgICAgaWYgKGogIT0ga25vd25D
aGFyc2V0cygpLmVuZCgpKQotICAgICAgICAgICAgcmVnaXN0cmFyKGotPnNlY29uZC5tX25hbWUu
ZGF0YSgpLCBuZXdUZXh0Q29kZWNXaW4sIDApOworICAgICAgICAgICAgcmVnaXN0cmFyKGotPnZh
bHVlLm1fbmFtZS5kYXRhKCksIG5ld1RleHRDb2RlY1dpbiwgMCk7CiAgICAgfQogfQogCkBAIC0z
MDEsNyArMzAxLDcgQEAgdm9pZCBUZXh0Q29kZWNXaW46OmVudW1lcmF0ZVN1cHBvcnRlZEVuY29k
aW5ncyhFbmNvZGluZ1JlY2VpdmVyJiByZWNlaXZlcikKICAgICBsYW5ndWFnZU1hbmFnZXIoKTsK
ICAgICBmb3IgKENoYXJzZXRTZXQ6Oml0ZXJhdG9yIGkgPSBzdXBwb3J0ZWRDaGFyc2V0cygpLmJl
Z2luKCk7IGkgIT0gc3VwcG9ydGVkQ2hhcnNldHMoKS5lbmQoKTsgKytpKSB7CiAgICAgICAgIEhh
c2hNYXA8U3RyaW5nLCBDaGFyc2V0SW5mbz46Oml0ZXJhdG9yIGogPSBrbm93bkNoYXJzZXRzKCku
ZmluZCgqaSk7Ci0gICAgICAgIGlmIChqICE9IGtub3duQ2hhcnNldHMoKS5lbmQoKSAmJiAhcmVj
ZWl2ZXIucmVjZWl2ZShqLT5zZWNvbmQubV9uYW1lLmRhdGEoKSwgai0+c2Vjb25kLm1fZnJpZW5k
bHlOYW1lLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCksIGotPnNlY29uZC5tX2NvZGVQ
YWdlKSkKKyAgICAgICAgaWYgKGogIT0ga25vd25DaGFyc2V0cygpLmVuZCgpICYmICFyZWNlaXZl
ci5yZWNlaXZlKGotPnZhbHVlLm1fbmFtZS5kYXRhKCksIGotPnZhbHVlLm1fZnJpZW5kbHlOYW1l
LmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCksIGotPnZhbHVlLm1fY29kZVBhZ2UpKQog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vd2luL0NsaXBib2FyZFV0aWxpdGllc1dpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS93aW4vQ2xpcGJvYXJkVXRpbGl0aWVzV2luLmNwcAppbmRleCA2MWUzNjIxYjUzZGM0
OTU4NjUxM2FiNzQxNDRkZjVlNjJiYTFjMTYwLi43NWZmOWRlN2JlMTAyM2Y3ZTEyZmI5OWRkMTZj
ZTc0NmZiOGVkZjI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xp
cGJvYXJkVXRpbGl0aWVzV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4v
Q2xpcGJvYXJkVXRpbGl0aWVzV2luLmNwcApAQCAtNzYsNyArNzYsNyBAQCBzdGF0aWMgYm9vbCBn
ZXREYXRhTWFwSXRlbShjb25zdCBEcmFnRGF0YU1hcCogZGF0YU9iamVjdCwgRk9STUFURVRDKiBm
b3JtYXQsIFN0cgogICAgIERyYWdEYXRhTWFwOjpjb25zdF9pdGVyYXRvciBmb3VuZCA9IGRhdGFP
YmplY3QtPmZpbmQoZm9ybWF0LT5jZkZvcm1hdCk7CiAgICAgaWYgKGZvdW5kID09IGRhdGFPYmpl
Y3QtPmVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaXRlbSA9IGZvdW5kLT5zZWNv
bmRbMF07CisgICAgaXRlbSA9IGZvdW5kLT52YWx1ZVswXTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IApAQCAtODI2LDcgKzgyNiw3IEBAIHZvaWQgZ2V0Q2xpcGJvYXJkRGF0YShJRGF0YU9iamVjdCog
ZGF0YU9iamVjdCwgRk9STUFURVRDKiBmb3JtYXQsIFZlY3RvcjxTdHJpbmc+CiAgICAgQ2xpcGJv
YXJkRm9ybWF0TWFwOjpjb25zdF9pdGVyYXRvciBmb3VuZCA9IGZvcm1hdE1hcC5maW5kKGZvcm1h
dC0+Y2ZGb3JtYXQpOwogICAgIGlmIChmb3VuZCA9PSBmb3JtYXRNYXAuZW5kKCkpCiAgICAgICAg
IHJldHVybjsKLSAgICBmb3VuZC0+c2Vjb25kLT5nZXRTdHJpbmcoZGF0YU9iamVjdCwgZm91bmQt
PnNlY29uZC0+Zm9ybWF0LCBkYXRhU3RyaW5ncyk7CisgICAgZm91bmQtPnZhbHVlLT5nZXRTdHJp
bmcoZGF0YU9iamVjdCwgZm91bmQtPnZhbHVlLT5mb3JtYXQsIGRhdGFTdHJpbmdzKTsKIH0KIAog
dm9pZCBzZXRDbGlwYm9hcmREYXRhKElEYXRhT2JqZWN0KiBkYXRhT2JqZWN0LCBVSU5UIGZvcm1h
dCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGRhdGFTdHJpbmdzKQpAQCAtODM1LDcgKzgzNSw3IEBA
IHZvaWQgc2V0Q2xpcGJvYXJkRGF0YShJRGF0YU9iamVjdCogZGF0YU9iamVjdCwgVUlOVCBmb3Jt
YXQsIGNvbnN0IFZlY3RvcjxTdHJpbmc+CiAgICAgQ2xpcGJvYXJkRm9ybWF0TWFwOjpjb25zdF9p
dGVyYXRvciBmb3VuZCA9IGZvcm1hdE1hcC5maW5kKGZvcm1hdCk7CiAgICAgaWYgKGZvdW5kID09
IGZvcm1hdE1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGZvdW5kLT5zZWNvbmQtPnNl
dFN0cmluZyhkYXRhT2JqZWN0LCBmb3VuZC0+c2Vjb25kLT5mb3JtYXQsIGRhdGFTdHJpbmdzKTsK
KyAgICBmb3VuZC0+dmFsdWUtPnNldFN0cmluZyhkYXRhT2JqZWN0LCBmb3VuZC0+dmFsdWUtPmZv
cm1hdCwgZGF0YVN0cmluZ3MpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xpcGJvYXJkV2luLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRXaW4uY3BwCmluZGV4IGQxYzEzODZhMTQ1
MjA0YzM4ZTE4MWJkNzVhMjhiMjhjOTA1Mzc1ZDAuLmY5NTBiMDhjZWZiZjZkMGJlMDFiNWU0MGFj
ZDBkYjY4M2E0MmEzYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9D
bGlwYm9hcmRXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9h
cmRXaW4uY3BwCkBAIC01MjUsNyArNTI1LDcgQEAgSGFzaFNldDxTdHJpbmc+IENsaXBib2FyZFdp
bjo6dHlwZXMoKSBjb25zdAogICAgIH0gZWxzZSB7CiAgICAgICAgIGZvciAoRHJhZ0RhdGFNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9kcmFnRGF0YU1hcC5iZWdpbigpOyBpdCAhPSBtX2RyYWdE
YXRhTWFwLmVuZCgpOyArK2l0KSB7CiAgICAgICAgICAgICBGT1JNQVRFVEMgZGF0YTsKLSAgICAg
ICAgICAgIGRhdGEuY2ZGb3JtYXQgPSAoKml0KS5maXJzdDsKKyAgICAgICAgICAgIGRhdGEuY2ZG
b3JtYXQgPSAoKml0KS5rZXk7CiAgICAgICAgICAgICBhZGRNaW1lVHlwZXNGb3JGb3JtYXQocmVz
dWx0cywgZGF0YSk7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS93aW4vRmlsZVN5c3RlbVdpbi5jcHAKaW5kZXggZWUwMjU1ZTEyODU4ZWEzOWIxYmM5NDY2NTEy
OTA3M2M0ZGNhMTk0ZC4uMDc5ZjhkNmU4ZDY0NWIwMGZhMjlhMWI0YjVlMTYyYmVmZjYwNWU5NCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0ZpbGVTeXN0ZW1XaW4uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9GaWxlU3lzdGVtV2luLmNwcApAQCAt
MjM4LDcgKzIzOCw3IEBAIHN0YXRpYyBTdHJpbmcgY2FjaGVkU3RvcmFnZURpcmVjdG9yeShEV09S
RCBwYXRoSWRlbnRpZmllcikKIAogICAgIEhhc2hNYXA8RFdPUkQsIFN0cmluZz46Oml0ZXJhdG9y
IGl0ID0gZGlyZWN0b3JpZXMuZmluZChwYXRoSWRlbnRpZmllcik7CiAgICAgaWYgKGl0ICE9IGRp
cmVjdG9yaWVzLmVuZCgpKQotICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICAgICAgcmV0
dXJuIGl0LT52YWx1ZTsKIAogICAgIFN0cmluZyBkaXJlY3RvcnkgPSBzdG9yYWdlRGlyZWN0b3J5
KHBhdGhJZGVudGlmaWVyKTsKICAgICBkaXJlY3Rvcmllcy5hZGQocGF0aElkZW50aWZpZXIsIGRp
cmVjdG9yeSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUnVuTG9v
cFdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUnVuTG9vcFdpbi5jcHAKaW5k
ZXggMTY2M2I2NjEzM2FiYzJjYjNmZDAwNTdkMTk2NzEyMzdkMGU3OTlkYS4uMTdkNjg0NWU5ZmZk
YzM5MjhjMDY3YzdjMTU4ODNhYWI5MGQyOWE2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vd2luL1J1bkxvb3BXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3dpbi9SdW5Mb29wV2luLmNwcApAQCAtMTI2LDcgKzEyNiw3IEBAIHZvaWQgUnVuTG9vcDo6VGlt
ZXJCYXNlOjp0aW1lckZpcmVkKFJ1bkxvb3AqIHJ1bkxvb3AsIHVpbnQ2NF90IElEKQogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgVGltZXJCYXNlKiB0aW1lciA9IGl0LT5zZWNvbmQ7Cisg
ICAgVGltZXJCYXNlKiB0aW1lciA9IGl0LT52YWx1ZTsKIAogICAgIGlmICghdGltZXItPm1faXNS
ZXBlYXRpbmcpIHsKICAgICAgICAgcnVuTG9vcC0+bV9hY3RpdmVUaW1lcnMucmVtb3ZlKGl0KTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9XQ0RhdGFPYmplY3QuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1dDRGF0YU9iamVjdC5jcHAKaW5kZXggMGMw
M2NlMDBmMjIxYWUwYWM4MWI4ZWU3MmNmZTBkMDU0YTA1NjY1NC4uZGZiZDAwNWZjNDM2ZjhkNzIx
NmEyMTc0NjY5OWI3ZGY4MWI1ODA0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vd2luL1dDRGF0YU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2lu
L1dDRGF0YU9iamVjdC5jcHAKQEAgLTE2OSw3ICsxNjksNyBAQCBIUkVTVUxUIFdDRGF0YU9iamVj
dDo6Y3JlYXRlSW5zdGFuY2UoV0NEYXRhT2JqZWN0KiogcmVzdWx0LCBjb25zdCBEcmFnRGF0YU1h
cCYgZAogICAgICpyZXN1bHQgPSBuZXcgV0NEYXRhT2JqZWN0OwogCiAgICAgZm9yIChEcmFnRGF0
YU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBkYXRhTWFwLmJlZ2luKCk7IGl0ICE9IGRhdGFNYXAu
ZW5kKCk7ICsraXQpCi0gICAgICAgIHNldENsaXBib2FyZERhdGEoKnJlc3VsdCwgaXQtPmZpcnN0
LCBpdC0+c2Vjb25kKTsKKyAgICAgICAgc2V0Q2xpcGJvYXJkRGF0YSgqcmVzdWx0LCBpdC0+a2V5
LCBpdC0+dmFsdWUpOwogICAgIHJldHVybiBTX09LOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS93aW5jZS9NSU1FVHlwZVJlZ2lzdHJ5V2luQ0UuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vd2luY2UvTUlNRVR5cGVSZWdpc3RyeVdpbkNFLmNwcAppbmRleCA4
YTBkM2QyYjYxNjJiNDZkYmI3ZDYyZjIyY2EwMzI2ZGM3ZmNlZGM1Li44ODg4NDcxYTk0MWI2NzI3
ZDY1N2Y0NjQyOTdlZGM4YTY1NDIyZWQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93aW5jZS9NSU1FVHlwZVJlZ2lzdHJ5V2luQ0UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3dpbmNlL01JTUVUeXBlUmVnaXN0cnlXaW5DRS5jcHAKQEAgLTEwMSw3ICsxMDEs
NyBAQCBTdHJpbmcgTUlNRVR5cGVSZWdpc3RyeTo6Z2V0UHJlZmVycmVkRXh0ZW5zaW9uRm9yTUlN
RVR5cGUoY29uc3QgU3RyaW5nJiB0eXBlKQogICAgIGluaXRNSU1FVHlwZUVudGVuc2lvbk1hcCgp
OwogCiAgICAgZm9yIChIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6aXRlcmF0b3IgaSA9IG1pbWV0
eXBlTWFwLmJlZ2luKCk7IGkgIT0gbWltZXR5cGVNYXAuZW5kKCk7ICsraSkgewotICAgICAgICBp
ZiAoZXF1YWxJZ25vcmluZ0Nhc2UoaS0+c2Vjb25kLCB0eXBlKSkKKyAgICAgICAgaWYgKGVxdWFs
SWdub3JpbmdDYXNlKGktPnZhbHVlLCB0eXBlKSkKICAgICAgICAgICAgIHJldHVybiBpLT5maXJz
dDsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L0NvbnRl
eHRNZW51V3guY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvQ29udGV4dE1lbnVXeC5j
cHAKaW5kZXggNDE4OWFhOTUyZmZlYjRiY2EyM2RiNzBhOTgwNjFlZWRmZjRmMWRmNC4uZGYyZWU1
MjdkOTQ4ZTE2MmFiYjg5NDIzOGJiMmIzODRkODY5ZjYyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vd3gvQ29udGV4dE1lbnVXeC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vd3gvQ29udGV4dE1lbnVXeC5jcHAKQEAgLTY3LDggKzY3LDggQEAgdm9pZCBDb250
ZXh0TWVudTo6YXBwZW5kSXRlbShDb250ZXh0TWVudUl0ZW0mIGl0ZW0pCiAKICAgICBJdGVtQWN0
aW9uTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBzX2l0ZW1BY3Rpb25zLmVuZCgpOwogICAgIGZv
ciAoSXRlbUFjdGlvbk1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBzX2l0ZW1BY3Rpb25zLmJlZ2lu
KCk7ICBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQgPT0gaXRlbURl
c2NyaXB0aW9uLmFjdGlvbikKLSAgICAgICAgICAgIGlkV3ggPSBpdC0+Zmlyc3Q7CisgICAgICAg
IGlmIChpdC0+dmFsdWUgPT0gaXRlbURlc2NyaXB0aW9uLmFjdGlvbikKKyAgICAgICAgICAgIGlk
V3ggPSBpdC0+a2V5OwogICAgIH0KIAogICAgIGlmIChpdGVtRGVzY3JpcHRpb24uc3ViTWVudSkg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmNwcAppbmRleCA5NjFjNDU0
ODViZjJkODc3NGFhMzAwYzc4NjUwZWFjOWRhYTA1ZmM4Li40NDUyYWZlMWU0YjYzOGI1ZjdkZGEw
ZWM3YjE3OWQ3YWUzZDlkNmUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1Bs
dWdpbkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFi
YXNlLmNwcApAQCAtMTY2LDcgKzE2Niw3IEBAIGJvb2wgUGx1Z2luRGF0YWJhc2U6OnJlZnJlc2go
KQogICAgICAgICBNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIG1hcF9pdCA9
ICgqaXQpLT5taW1lVG9EZXNjcmlwdGlvbnMoKS5iZWdpbigpOwogICAgICAgICBNSU1FVG9EZXNj
cmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIG1hcF9lbmQgPSAoKml0KS0+bWltZVRvRGVzY3Jp
cHRpb25zKCkuZW5kKCk7CiAgICAgICAgIGZvciAoOyBtYXBfaXQgIT0gbWFwX2VuZDsgKyttYXBf
aXQpCi0gICAgICAgICAgICBtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuYWRkKG1hcF9pdC0+Zmlyc3Qp
OworICAgICAgICAgICAgbV9yZWdpc3RlcmVkTUlNRVR5cGVzLmFkZChtYXBfaXQtPmtleSk7CiAg
ICAgfQogCiAgICAgcmV0dXJuIHRydWU7CkBAIC0yNDcsOSArMjQ3LDkgQEAgU3RyaW5nIFBsdWdp
bkRhdGFiYXNlOjpNSU1FVHlwZUZvckV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGV4dGVuc2lvbikg
Y29uc3QKICAgICAgICAgTUlNRVRvRXh0ZW5zaW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWltZV9l
bmQgPSAoKml0KS0+bWltZVRvRXh0ZW5zaW9ucygpLmVuZCgpOwogCiAgICAgICAgIGZvciAoTUlN
RVRvRXh0ZW5zaW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWltZV9pdCA9ICgqaXQpLT5taW1lVG9F
eHRlbnNpb25zKCkuYmVnaW4oKTsgbWltZV9pdCAhPSBtaW1lX2VuZDsgKyttaW1lX2l0KSB7Ci0g
ICAgICAgICAgICBtaW1lVHlwZSA9IG1pbWVfaXQtPmZpcnN0OworICAgICAgICAgICAgbWltZVR5
cGUgPSBtaW1lX2l0LT5rZXk7CiAgICAgICAgICAgICBQbHVnaW5QYWNrYWdlKiBwcmVmZXJyZWRQ
bHVnaW4gPSBtX3ByZWZlcnJlZFBsdWdpbnMuZ2V0KG1pbWVUeXBlKS5nZXQoKTsKLSAgICAgICAg
ICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBleHRlbnNpb25zID0gbWltZV9pdC0+c2Vjb25kOwor
ICAgICAgICAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGV4dGVuc2lvbnMgPSBtaW1lX2l0LT52
YWx1ZTsKICAgICAgICAgICAgIGJvb2wgZm91bmRNYXBwaW5nID0gZmFsc2U7CiAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXh0ZW5zaW9ucy5zaXplKCk7IGkrKykgewogICAg
ICAgICAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShleHRlbnNpb25zW2ldLCBleHRlbnNp
b24pKSB7CkBAIC0zMzksOCArMzM5LDggQEAgdm9pZCBQbHVnaW5EYXRhYmFzZTo6cmVtb3ZlKFBs
dWdpblBhY2thZ2UqIHBhY2thZ2UpCiAgICAgTUlNRVRvRXh0ZW5zaW9uc01hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBwYWNrYWdlLT5taW1lVG9FeHRlbnNpb25zKCkuYmVnaW4oKTsKICAgICBNSU1F
VG9FeHRlbnNpb25zTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBwYWNrYWdlLT5taW1lVG9FeHRl
bnNpb25zKCkuZW5kKCk7CiAgICAgZm9yICggOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAg
UGx1Z2luUGFja2FnZUJ5TmFtZU1hcDo6aXRlcmF0b3IgcGFja2FnZUluTWFwID0gbV9wcmVmZXJy
ZWRQbHVnaW5zLmZpbmQoaXQtPmZpcnN0KTsKLSAgICAgICAgaWYgKHBhY2thZ2VJbk1hcCAhPSBt
X3ByZWZlcnJlZFBsdWdpbnMuZW5kKCkgJiYgcGFja2FnZUluTWFwLT5zZWNvbmQgPT0gcGFja2Fn
ZSkKKyAgICAgICAgUGx1Z2luUGFja2FnZUJ5TmFtZU1hcDo6aXRlcmF0b3IgcGFja2FnZUluTWFw
ID0gbV9wcmVmZXJyZWRQbHVnaW5zLmZpbmQoaXQtPmtleSk7CisgICAgICAgIGlmIChwYWNrYWdl
SW5NYXAgIT0gbV9wcmVmZXJyZWRQbHVnaW5zLmVuZCgpICYmIHBhY2thZ2VJbk1hcC0+dmFsdWUg
PT0gcGFja2FnZSkKICAgICAgICAgICAgIG1fcHJlZmVycmVkUGx1Z2lucy5yZW1vdmUocGFja2Fn
ZUluTWFwKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1
Z2luTWFpblRocmVhZFNjaGVkdWxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdp
bk1haW5UaHJlYWRTY2hlZHVsZXIuY3BwCmluZGV4IDc1Mjg2NzZiMTJhYThiZGE4ZjMzYjMyZWY0
MGNjODc2NTc2NmQzMWEuLjM5YWU3OTRlMmZiMDk3MjE5YTUyMjNlYmZiZWVkZjY5YjZlMjg2MmMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luTWFpblRocmVhZFNjaGVk
dWxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5NYWluVGhyZWFkU2No
ZWR1bGVyLmNwcApAQCAtNDksNyArNDksNyBAQCB2b2lkIFBsdWdpbk1haW5UaHJlYWRTY2hlZHVs
ZXI6OnNjaGVkdWxlQ2FsbChOUFAgbnBwLCBNYWluVGhyZWFkRnVuY3Rpb24gZnVuY3RpbwogICAg
IGlmIChpdCA9PSBtX2NhbGxRdWV1ZU1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
aXQtPnNlY29uZC5hcHBlbmQoQ2FsbChmdW5jdGlvbiwgdXNlckRhdGEpKTsKKyAgICBpdC0+dmFs
dWUuYXBwZW5kKENhbGwoZnVuY3Rpb24sIHVzZXJEYXRhKSk7CiAKICAgICBpZiAoIW1fY2FsbFBl
bmRpbmcpIHsKICAgICAgICAgY2FsbE9uTWFpblRocmVhZChtYWluVGhyZWFkQ2FsbGJhY2ssIHRo
aXMpOwpAQCAtOTcsNyArOTcsNyBAQCB2b2lkIFBsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXI6OmRp
c3BhdGNoQ2FsbHMoKQogICAgICAgICAvLyBFbXB0eSBhbGwgdGhlIHF1ZXVlcyBpbiB0aGUgb3Jp
Z2luYWwgbWFwCiAgICAgICAgIENhbGxRdWV1ZU1hcDo6aXRlcmF0b3IgZW5kID0gbV9jYWxsUXVl
dWVNYXAuZW5kKCk7CiAgICAgICAgIGZvciAoQ2FsbFF1ZXVlTWFwOjppdGVyYXRvciBpdCA9IG1f
Y2FsbFF1ZXVlTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIGl0LT5z
ZWNvbmQuY2xlYXIoKTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS5jbGVhcigpOwogICAgIH0KIAog
ICAgIG1fY2FsbFBlbmRpbmcgPSBmYWxzZTsKQEAgLTEwNSw3ICsxMDUsNyBAQCB2b2lkIFBsdWdp
bk1haW5UaHJlYWRTY2hlZHVsZXI6OmRpc3BhdGNoQ2FsbHMoKQogCiAgICAgQ2FsbFF1ZXVlTWFw
OjppdGVyYXRvciBlbmQgPSBjb3B5LmVuZCgpOwogICAgIGZvciAoQ2FsbFF1ZXVlTWFwOjppdGVy
YXRvciBpdCA9IGNvcHkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBkaXNwYXRj
aENhbGxzRm9yUGx1Z2luKGl0LT5maXJzdCwgaXQtPnNlY29uZCk7CisgICAgICAgIGRpc3BhdGNo
Q2FsbHNGb3JQbHVnaW4oaXQtPmtleSwgaXQtPnZhbHVlKTsKIH0KIAogdm9pZCBQbHVnaW5NYWlu
VGhyZWFkU2NoZWR1bGVyOjptYWluVGhyZWFkQ2FsbGJhY2sodm9pZCogY29udGV4dCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luU3RyZWFtLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsdWdpbnMvUGx1Z2luU3RyZWFtLmNwcAppbmRleCAwMDIzODBmNWY5NTNmOWJlZTJj
NTY1ZTljYTVjMTMyYWQ0YzBhZjRhLi5mZGI3ODYwMzViMGQxNjU0ODIxZmNiNDYwYWQ0ZTJkM2E3
MWE1YTM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblN0cmVhbS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5TdHJlYW0uY3BwCkBAIC0xNDcs
OSArMTQ3LDkgQEAgdm9pZCBQbHVnaW5TdHJlYW06OnN0YXJ0U3RyZWFtKCkKIAogICAgICAgICBI
VFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3Jlc291cmNlUmVzcG9uc2UuaHR0
cEhlYWRlckZpZWxkcygpLmVuZCgpOwogICAgICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZVJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMoKS5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KGl0LT5maXJzdCk7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+a2V5KTsK
ICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHNlcGFyYXRvcik7Ci0gICAgICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+c2Vjb25kKTsKKyAgICAgICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKGl0LT52YWx1ZSk7CiAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZCgnXG4nKTsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5z
L2JsYWNrYmVycnkvUGx1Z2luRGF0YUJsYWNrQmVycnkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGx1
Z2lucy9ibGFja2JlcnJ5L1BsdWdpbkRhdGFCbGFja0JlcnJ5LmNwcAppbmRleCBkOTIwZDFmYmQ1
YTExMjQ2MDNhOGNkOThmYTEzNDM1NmU3MzA2YjU5Li40NzQ2NjE2ZGUzMzVmYTgzY2VjOTZkOTMw
ZTIwZDhjMjhlOTRjM2I3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2JsYWNr
YmVycnkvUGx1Z2luRGF0YUJsYWNrQmVycnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsdWdp
bnMvYmxhY2tiZXJyeS9QbHVnaW5EYXRhQmxhY2tCZXJyeS5jcHAKQEAgLTQxLDggKzQxLDggQEAg
dm9pZCBQbHVnaW5EYXRhOjppbml0UGx1Z2lucyhjb25zdCBQYWdlKikKICAgICAgICAgTUlNRVRv
RGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtaW1lVG9EZXNjcmlwdGlvbnMu
ZW5kKCk7CiAgICAgICAgIGZvciAoTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAg
ICAgICAgICAgIE1pbWVDbGFzc0luZm8gbWltZTsKLSAgICAgICAgICAgIG1pbWUudHlwZSA9IGl0
LT5maXJzdDsKLSAgICAgICAgICAgIG1pbWUuZGVzYyA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAg
ICBtaW1lLnR5cGUgPSBpdC0+a2V5OworICAgICAgICAgICAgbWltZS5kZXNjID0gaXQtPnZhbHVl
OwogICAgICAgICAgICAgbWltZS5leHRlbnNpb25zID0gcGFja2FnZS0+bWltZVRvRXh0ZW5zaW9u
cygpLmdldChtaW1lLnR5cGUpOwogICAgICAgICAgICAgaW5mby5taW1lcy5hcHBlbmQobWltZSk7
CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd3gvUGx1Z2lu
RGF0YVd4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd3gvUGx1Z2luRGF0YVd4LmNwcApp
bmRleCAwZWI4OTBmZWYwNWExMTVlYWNlNDI2Mzc2ODBhM2Q2YTEyZjU3NzI5Li4yNzk1MmM0YWU4
YmZhNDllOThiMTFhZTk5NTlmYzc1NGU0ZGIyM2JlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbHVnaW5zL3d4L1BsdWdpbkRhdGFXeC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lu
cy93eC9QbHVnaW5EYXRhV3guY3BwCkBAIC01MSw4ICs1MSw4IEBAIHZvaWQgUGx1Z2luRGF0YTo6
aW5pdFBsdWdpbnMoY29uc3QgUGFnZSopCiAgICAgICAgIGZvciAoTUlNRVRvRGVzY3JpcHRpb25z
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIE1pbWVDbGFzc0luZm8gbWltZTsKIAotICAgICAg
ICAgICAgbWltZS50eXBlID0gaXQtPmZpcnN0OwotICAgICAgICAgICAgbWltZS5kZXNjID0gaXQt
PnNlY29uZDsKKyAgICAgICAgICAgIG1pbWUudHlwZSA9IGl0LT5rZXk7CisgICAgICAgICAgICBt
aW1lLmRlc2MgPSBpdC0+dmFsdWU7CiAgICAgICAgICAgICBtaW1lLmV4dGVuc2lvbnMgPSBwYWNr
YWdlLT5taW1lVG9FeHRlbnNpb25zKCkuZ2V0KG1pbWUudHlwZSk7CiAKICAgICAgICAgICAgIGlu
Zm8ubWltZXMuYXBwZW5kKG1pbWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0Zsb3dUaHJlYWRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9G
bG93VGhyZWFkQ29udHJvbGxlci5jcHAKaW5kZXggMDEzZTRhMjBmNWY4ZjE4NWEyZTQwMGFhMDg5
ZDJmNjE2NjJmNzJiYS4uYWE4YzhkZDE1YTE1ZWVmYjQyMTEzZmQxMjYxZjhmMjVlYzBlODI1NiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0Zsb3dUaHJlYWRDb250cm9sbGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmxvd1RocmVhZENvbnRyb2xsZXIu
Y3BwCkBAIC0xNDAsOSArMTQwLDkgQEAgdm9pZCBGbG93VGhyZWFkQ29udHJvbGxlcjo6dW5yZWdp
c3Rlck5hbWVkRmxvd0NvbnRlbnROb2RlKE5vZGUqIGNvbnRlbnROb2RlKQogICAgIEFTU0VSVChj
b250ZW50Tm9kZSAmJiBjb250ZW50Tm9kZS0+aXNFbGVtZW50Tm9kZSgpKTsKICAgICBIYXNoTWFw
PE5vZGUqLCBSZW5kZXJOYW1lZEZsb3dUaHJlYWQqPjo6aXRlcmF0b3IgaXQgPSBtX21hcE5hbWVk
Rmxvd0NvbnRlbnROb2Rlcy5maW5kKGNvbnRlbnROb2RlKTsKICAgICBBU1NFUlQoaXQgIT0gbV9t
YXBOYW1lZEZsb3dDb250ZW50Tm9kZXMuZW5kKCkpOwotICAgIEFTU0VSVChpdC0+c2Vjb25kKTsK
LSAgICBBU1NFUlQoaXQtPnNlY29uZC0+aGFzQ29udGVudE5vZGUoY29udGVudE5vZGUpKTsKLSAg
ICBpdC0+c2Vjb25kLT51bnJlZ2lzdGVyTmFtZWRGbG93Q29udGVudE5vZGUoY29udGVudE5vZGUp
OworICAgIEFTU0VSVChpdC0+dmFsdWUpOworICAgIEFTU0VSVChpdC0+dmFsdWUtPmhhc0NvbnRl
bnROb2RlKGNvbnRlbnROb2RlKSk7CisgICAgaXQtPnZhbHVlLT51bnJlZ2lzdGVyTmFtZWRGbG93
Q29udGVudE5vZGUoY29udGVudE5vZGUpOwogICAgIG1fbWFwTmFtZWRGbG93Q29udGVudE5vZGVz
LnJlbW92ZShjb250ZW50Tm9kZSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Jbmxp
bmVGbG93Qm94LmNwcAppbmRleCAxMjZkYjI3Zjk4MTFkMTViNzllM2E4MDdjYmZmMWFlMWMzYTc0
YjIzLi5lN2Q4MTk4MmQ2OTAyMmFkNjJmMDg3OWFlNjU3OGI4N2NjMTY3NjBkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCkBAIC00NTksNyArNDU5LDcgQEAg
Ym9vbCBJbmxpbmVGbG93Qm94OjpyZXF1aXJlc0lkZW9ncmFwaGljQmFzZWxpbmUoY29uc3QgR2x5
cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm8KICAgICAgICAgICAgIGNvbnN0IFZlY3Rvcjxjb25zdCBT
aW1wbGVGb250RGF0YSo+KiB1c2VkRm9udHMgPSAwOwogICAgICAgICAgICAgaWYgKGN1cnItPmlz
SW5saW5lVGV4dEJveCgpKSB7CiAgICAgICAgICAgICAgICAgR2x5cGhPdmVyZmxvd0FuZEZhbGxi
YWNrRm9udHNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdGV4dEJveERhdGFNYXAuZmluZCh0b0lu
bGluZVRleHRCb3goY3VycikpOwotICAgICAgICAgICAgICAgIHVzZWRGb250cyA9IGl0ID09IHRl
eHRCb3hEYXRhTWFwLmVuZCgpID8gMCA6ICZpdC0+c2Vjb25kLmZpcnN0OworICAgICAgICAgICAg
ICAgIHVzZWRGb250cyA9IGl0ID09IHRleHRCb3hEYXRhTWFwLmVuZCgpID8gMCA6ICZpdC0+dmFs
dWUuZmlyc3Q7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmICh1c2VkRm9udHMpIHsK
QEAgLTgyMyw3ICs4MjMsNyBAQCBpbmxpbmUgdm9pZCBJbmxpbmVGbG93Qm94OjphZGRUZXh0Qm94
VmlzdWFsT3ZlcmZsb3coSW5saW5lVGV4dEJveCogdGV4dEJveCwgR2x5cAogICAgIFJlbmRlclN0
eWxlKiBzdHlsZSA9IHRleHRCb3gtPnJlbmRlcmVyKCktPnN0eWxlKGlzRmlyc3RMaW5lU3R5bGUo
KSk7CiAgICAgCiAgICAgR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXA6Oml0ZXJhdG9y
IGl0ID0gdGV4dEJveERhdGFNYXAuZmluZCh0ZXh0Qm94KTsKLSAgICBHbHlwaE92ZXJmbG93KiBn
bHlwaE92ZXJmbG93ID0gaXQgPT0gdGV4dEJveERhdGFNYXAuZW5kKCkgPyAwIDogJml0LT5zZWNv
bmQuc2Vjb25kOworICAgIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cgPSBpdCA9PSB0ZXh0
Qm94RGF0YU1hcC5lbmQoKSA/IDAgOiAmaXQtPnZhbHVlLnNlY29uZDsKICAgICBib29sIGlzRmxp
cHBlZExpbmUgPSBzdHlsZS0+aXNGbGlwcGVkTGluZXNXcml0aW5nTW9kZSgpOwogCiAgICAgaW50
IHRvcEdseXBoRWRnZSA9IGdseXBoT3ZlcmZsb3cgPyAoaXNGbGlwcGVkTGluZSA/IGdseXBoT3Zl
cmZsb3ctPmJvdHRvbSA6IGdseXBoT3ZlcmZsb3ctPnRvcCkgOiAwOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9jay5jcHAKaW5kZXggODI3NzA3NzZmYmRjZjBlYWRhYzEzNDkxZmE5
YjRlOGJiNTBkNTk3YS4uZWE3ODAzODdkZjliYTNmOWEzYTljMzIwMmY2N2Y1NmFiYzdkYjE3OSAx
MDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCkBAIC00NDAzLDcgKzQ0
MDMsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpjbGVhckZsb2F0cygpCiAKICAgICAgICAgUmVuZGVy
ZXJUb0Zsb2F0SW5mb01hcDo6aXRlcmF0b3IgZW5kID0gZmxvYXRNYXAuZW5kKCk7CiAgICAgICAg
IGZvciAoUmVuZGVyZXJUb0Zsb2F0SW5mb01hcDo6aXRlcmF0b3IgaXQgPSBmbG9hdE1hcC5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmbG9h
dGluZ09iamVjdCA9ICgqaXQpLnNlY29uZDsKKyAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBm
bG9hdGluZ09iamVjdCA9ICgqaXQpLnZhbHVlOwogICAgICAgICAgICAgaWYgKCFmbG9hdGluZ09i
amVjdC0+aXNEZXNjZW5kYW50KCkpIHsKICAgICAgICAgICAgICAgICBjaGFuZ2VMb2dpY2FsVG9w
ID0gMDsKICAgICAgICAgICAgICAgICBjaGFuZ2VMb2dpY2FsQm90dG9tID0gbWF4KGNoYW5nZUxv
Z2ljYWxCb3R0b20sIGxvZ2ljYWxCb3R0b21Gb3JGbG9hdChmbG9hdGluZ09iamVjdCkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcApp
bmRleCBiNjRjMWQzMTU2YWQxMTdhMjcwOTNiNzUwODIyZjBmODg1Njc5MDk1Li4xOTUzZGQxNTFh
M2JlYWE1M2U2OTcxNGRkY2Q3NmI4NWU1NTZhM2YwIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcApAQCAtNzA3LDE0ICs3MDcsMTQg
QEAgc3RhdGljIGlubGluZSB2b2lkIHNldExvZ2ljYWxXaWR0aEZvclRleHRSdW4oUm9vdElubGlu
ZUJveCogbGluZUJveCwgQmlkaVJ1biogcnUKICAgICBpZiAoIWZhbGxiYWNrRm9udHMuaXNFbXB0
eSgpKSB7CiAgICAgICAgIEFTU0VSVChydW4tPm1fYm94LT5pc1RleHQoKSk7CiAgICAgICAgIEds
eXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFwOjppdGVyYXRvciBpdCA9IHRleHRCb3hEYXRh
TWFwLmFkZCh0b0lubGluZVRleHRCb3gocnVuLT5tX2JveCksIG1ha2VfcGFpcihWZWN0b3I8Y29u
c3QgU2ltcGxlRm9udERhdGEqPigpLCBHbHlwaE92ZXJmbG93KCkpKS5pdGVyYXRvcjsKLSAgICAg
ICAgQVNTRVJUKGl0LT5zZWNvbmQuZmlyc3QuaXNFbXB0eSgpKTsKLSAgICAgICAgY29weVRvVmVj
dG9yKGZhbGxiYWNrRm9udHMsIGl0LT5zZWNvbmQuZmlyc3QpOworICAgICAgICBBU1NFUlQoaXQt
PnZhbHVlLmZpcnN0LmlzRW1wdHkoKSk7CisgICAgICAgIGNvcHlUb1ZlY3RvcihmYWxsYmFja0Zv
bnRzLCBpdC0+dmFsdWUuZmlyc3QpOwogICAgICAgICBydW4tPm1fYm94LT5wYXJlbnQoKS0+Y2xl
YXJEZXNjZW5kYW50c0hhdmVTYW1lTGluZUhlaWdodEFuZEJhc2VsaW5lKCk7CiAgICAgfQogICAg
IGlmICgoZ2x5cGhPdmVyZmxvdy50b3AgfHwgZ2x5cGhPdmVyZmxvdy5ib3R0b20gfHwgZ2x5cGhP
dmVyZmxvdy5sZWZ0IHx8IGdseXBoT3ZlcmZsb3cucmlnaHQpKSB7CiAgICAgICAgIEFTU0VSVChy
dW4tPm1fYm94LT5pc1RleHQoKSk7CiAgICAgICAgIEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0Zv
bnRzTWFwOjppdGVyYXRvciBpdCA9IHRleHRCb3hEYXRhTWFwLmFkZCh0b0lubGluZVRleHRCb3go
cnVuLT5tX2JveCksIG1ha2VfcGFpcihWZWN0b3I8Y29uc3QgU2ltcGxlRm9udERhdGEqPigpLCBH
bHlwaE92ZXJmbG93KCkpKS5pdGVyYXRvcjsKLSAgICAgICAgaXQtPnNlY29uZC5zZWNvbmQgPSBn
bHlwaE92ZXJmbG93OworICAgICAgICBpdC0+dmFsdWUuc2Vjb25kID0gZ2x5cGhPdmVyZmxvdzsK
ICAgICAgICAgcnVuLT5tX2JveC0+Y2xlYXJLbm93blRvSGF2ZU5vT3ZlcmZsb3coKTsKICAgICB9
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxP
YmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0
LmNwcAppbmRleCA5OTg5M2ZjZDQ2NjNiNTY3OTM3ZTk2YmM1OGZhZDY4MDA2YjI1ZTVmLi4zM2Y5
M2JkYjE0NmJkMTU3YWZjNmZiMTcwNzQxY2E3YzEyZmZjNjg4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKQEAgLTEzNyw3ICsxMzcs
NyBAQCB2b2lkIEltYWdlUXVhbGl0eUNvbnRyb2xsZXI6OmhpZ2hRdWFsaXR5UmVwYWludFRpbWVy
RmlyZWQoVGltZXI8SW1hZ2VRdWFsaXR5Q29udAogICAgIGlmIChtX2FuaW1hdGVkUmVzaXplSXNB
Y3RpdmUpIHsKICAgICAgICAgbV9hbmltYXRlZFJlc2l6ZUlzQWN0aXZlID0gZmFsc2U7CiAgICAg
ICAgIGZvciAoT2JqZWN0TGF5ZXJTaXplTWFwOjppdGVyYXRvciBpdCA9IG1fb2JqZWN0TGF5ZXJT
aXplTWFwLmJlZ2luKCk7IGl0ICE9IG1fb2JqZWN0TGF5ZXJTaXplTWFwLmVuZCgpOyArK2l0KQot
ICAgICAgICAgICAgaXQtPmZpcnN0LT5yZXBhaW50KCk7CisgICAgICAgICAgICBpdC0+a2V5LT5y
ZXBhaW50KCk7CiAgICAgfQogfQogCkBAIC0xNjIsMTQgKzE2MiwxNCBAQCBib29sIEltYWdlUXVh
bGl0eUNvbnRyb2xsZXI6OnNob3VsZFBhaW50QXRMb3dRdWFsaXR5KEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwgUgogCiAgICAgLy8gTG9vayBvdXJzZWx2ZXMgdXAgaW4gdGhlIGhhc2h0YWJsZXMu
CiAgICAgT2JqZWN0TGF5ZXJTaXplTWFwOjppdGVyYXRvciBpID0gbV9vYmplY3RMYXllclNpemVN
YXAuZmluZChvYmplY3QpOwotICAgIExheWVyU2l6ZU1hcCogaW5uZXJNYXAgPSBpICE9IG1fb2Jq
ZWN0TGF5ZXJTaXplTWFwLmVuZCgpID8gJmktPnNlY29uZCA6IDA7CisgICAgTGF5ZXJTaXplTWFw
KiBpbm5lck1hcCA9IGkgIT0gbV9vYmplY3RMYXllclNpemVNYXAuZW5kKCkgPyAmaS0+dmFsdWUg
OiAwOwogICAgIExheW91dFNpemUgb2xkU2l6ZTsKICAgICBib29sIGlzRmlyc3RSZXNpemUgPSB0
cnVlOwogICAgIGlmIChpbm5lck1hcCkgewogICAgICAgICBMYXllclNpemVNYXA6Oml0ZXJhdG9y
IGogPSBpbm5lck1hcC0+ZmluZChsYXllcik7CiAgICAgICAgIGlmIChqICE9IGlubmVyTWFwLT5l
bmQoKSkgewogICAgICAgICAgICAgaXNGaXJzdFJlc2l6ZSA9IGZhbHNlOwotICAgICAgICAgICAg
b2xkU2l6ZSA9IGotPnNlY29uZDsKKyAgICAgICAgICAgIG9sZFNpemUgPSBqLT52YWx1ZTsKICAg
ICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckNvdW50ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIu
Y3BwCmluZGV4IGRlNDVkODk1ZTE3ZTA5YTcxYjYzOTFkZDk4ZTgyMzA3N2IyMWQxMDcuLjU0NTdh
M2ExZGQxNjhiODZlZDNiYWRhNzA3MGJhNDYzNDRiMzgwMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb3VudGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQ291bnRlci5jcHAKQEAgLTU3MSwxMSArNTcxLDExIEBAIHZvaWQgUmVu
ZGVyQ291bnRlcjo6ZGVzdHJveUNvdW50ZXJOb2RlcyhSZW5kZXJPYmplY3QqIG93bmVyKQogICAg
IENvdW50ZXJNYXBzOjppdGVyYXRvciBtYXBzSXRlcmF0b3IgPSBtYXBzLmZpbmQob3duZXIpOwog
ICAgIGlmIChtYXBzSXRlcmF0b3IgPT0gbWFwcy5lbmQoKSkKICAgICAgICAgcmV0dXJuOwotICAg
IENvdW50ZXJNYXAqIG1hcCA9IG1hcHNJdGVyYXRvci0+c2Vjb25kLmdldCgpOworICAgIENvdW50
ZXJNYXAqIG1hcCA9IG1hcHNJdGVyYXRvci0+dmFsdWUuZ2V0KCk7CiAgICAgQ291bnRlck1hcDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKICAgICBmb3IgKENvdW50ZXJNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgQXRvbWljU3RyaW5nIGlkZW50aWZpZXIoaXQtPmZpcnN0LmdldCgpKTsKLSAgICAgICAgZGVz
dHJveUNvdW50ZXJOb2RlV2l0aG91dE1hcFJlbW92YWwoaWRlbnRpZmllciwgaXQtPnNlY29uZC5n
ZXQoKSk7CisgICAgICAgIEF0b21pY1N0cmluZyBpZGVudGlmaWVyKGl0LT5rZXkuZ2V0KCkpOwor
ICAgICAgICBkZXN0cm95Q291bnRlck5vZGVXaXRob3V0TWFwUmVtb3ZhbChpZGVudGlmaWVyLCBp
dC0+dmFsdWUuZ2V0KCkpOwogICAgIH0KICAgICBtYXBzLnJlbW92ZShtYXBzSXRlcmF0b3IpOwog
ICAgIG93bmVyLT5zZXRIYXNDb3VudGVyTm9kZU1hcChmYWxzZSk7CkBAIC01ODksNyArNTg5LDcg
QEAgdm9pZCBSZW5kZXJDb3VudGVyOjpkZXN0cm95Q291bnRlck5vZGUoUmVuZGVyT2JqZWN0KiBv
d25lciwgY29uc3QgQXRvbWljU3RyaW5nJgogICAgIENvdW50ZXJNYXA6Oml0ZXJhdG9yIG1hcEl0
ZXJhdG9yID0gbWFwLT5maW5kKGlkZW50aWZpZXIuaW1wbCgpKTsKICAgICBpZiAobWFwSXRlcmF0
b3IgPT0gbWFwLT5lbmQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGRlc3Ryb3lDb3VudGVyTm9k
ZVdpdGhvdXRNYXBSZW1vdmFsKGlkZW50aWZpZXIsIG1hcEl0ZXJhdG9yLT5zZWNvbmQuZ2V0KCkp
OworICAgIGRlc3Ryb3lDb3VudGVyTm9kZVdpdGhvdXRNYXBSZW1vdmFsKGlkZW50aWZpZXIsIG1h
cEl0ZXJhdG9yLT52YWx1ZS5nZXQoKSk7CiAgICAgbWFwLT5yZW1vdmUobWFwSXRlcmF0b3IpOwog
ICAgIC8vIFdlIGRvIG5vdCBkZWxldGUgIm1hcCIgaGVyZSBldmVuIGlmIGVtcHR5IGJlY2F1c2Ug
d2UgZXhwZWN0IHRvIHJldXNlCiAgICAgLy8gaXQgc29vbi4gSW4gb3JkZXIgZm9yIGEgcmVuZGVy
ZXIgdG8gbG9zZSBhbGwgaXRzIGNvdW50ZXJzIHBlcm1hbmVudGx5LApAQCAtNjI5LDIyICs2Mjks
MjIgQEAgc3RhdGljIHZvaWQgdXBkYXRlQ291bnRlcnMoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikK
ICAgICBDb3VudGVyRGlyZWN0aXZlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBkaXJlY3RpdmVN
YXAtPmVuZCgpOwogICAgIGlmICghcmVuZGVyZXItPmhhc0NvdW50ZXJOb2RlTWFwKCkpIHsKICAg
ICAgICAgZm9yIChDb3VudGVyRGlyZWN0aXZlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGRpcmVj
dGl2ZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgbWFrZUNvdW50
ZXJOb2RlKHJlbmRlcmVyLCBBdG9taWNTdHJpbmcoaXQtPmZpcnN0LmdldCgpKSwgZmFsc2UpOwor
ICAgICAgICAgICAgbWFrZUNvdW50ZXJOb2RlKHJlbmRlcmVyLCBBdG9taWNTdHJpbmcoaXQtPmtl
eS5nZXQoKSksIGZhbHNlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBDb3VudGVyTWFw
KiBjb3VudGVyTWFwID0gY291bnRlck1hcHMoKS5nZXQocmVuZGVyZXIpOwogICAgIEFTU0VSVChj
b3VudGVyTWFwKTsKICAgICBmb3IgKENvdW50ZXJEaXJlY3RpdmVNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gZGlyZWN0aXZlTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAg
UmVmUHRyPENvdW50ZXJOb2RlPiBub2RlID0gY291bnRlck1hcC0+Z2V0KGl0LT5maXJzdC5nZXQo
KSk7CisgICAgICAgIFJlZlB0cjxDb3VudGVyTm9kZT4gbm9kZSA9IGNvdW50ZXJNYXAtPmdldChp
dC0+a2V5LmdldCgpKTsKICAgICAgICAgaWYgKCFub2RlKSB7Ci0gICAgICAgICAgICBtYWtlQ291
bnRlck5vZGUocmVuZGVyZXIsIEF0b21pY1N0cmluZyhpdC0+Zmlyc3QuZ2V0KCkpLCBmYWxzZSk7
CisgICAgICAgICAgICBtYWtlQ291bnRlck5vZGUocmVuZGVyZXIsIEF0b21pY1N0cmluZyhpdC0+
a2V5LmdldCgpKSwgZmFsc2UpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAg
ICAgICAgUmVmUHRyPENvdW50ZXJOb2RlPiBuZXdQYXJlbnQgPSAwOwogICAgICAgICBSZWZQdHI8
Q291bnRlck5vZGU+IG5ld1ByZXZpb3VzU2libGluZyA9IDA7CiAgICAgICAgIAotICAgICAgICBm
aW5kUGxhY2VGb3JDb3VudGVyKHJlbmRlcmVyLCBBdG9taWNTdHJpbmcoaXQtPmZpcnN0LmdldCgp
KSwgbm9kZS0+aGFzUmVzZXRUeXBlKCksIG5ld1BhcmVudCwgbmV3UHJldmlvdXNTaWJsaW5nKTsK
LSAgICAgICAgaWYgKG5vZGUgIT0gY291bnRlck1hcC0+Z2V0KGl0LT5maXJzdC5nZXQoKSkpCisg
ICAgICAgIGZpbmRQbGFjZUZvckNvdW50ZXIocmVuZGVyZXIsIEF0b21pY1N0cmluZyhpdC0+a2V5
LmdldCgpKSwgbm9kZS0+aGFzUmVzZXRUeXBlKCksIG5ld1BhcmVudCwgbmV3UHJldmlvdXNTaWJs
aW5nKTsKKyAgICAgICAgaWYgKG5vZGUgIT0gY291bnRlck1hcC0+Z2V0KGl0LT5rZXkuZ2V0KCkp
KQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIENvdW50ZXJOb2RlKiBwYXJlbnQgPSBu
b2RlLT5wYXJlbnQoKTsKICAgICAgICAgaWYgKG5ld1BhcmVudCA9PSBwYXJlbnQgJiYgbmV3UHJl
dmlvdXNTaWJsaW5nID09IG5vZGUtPnByZXZpb3VzU2libGluZygpKQpAQCAtNjUyLDcgKzY1Miw3
IEBAIHN0YXRpYyB2b2lkIHVwZGF0ZUNvdW50ZXJzKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiAg
ICAgICAgIGlmIChwYXJlbnQpCiAgICAgICAgICAgICBwYXJlbnQtPnJlbW92ZUNoaWxkKG5vZGUu
Z2V0KCkpOwogICAgICAgICBpZiAobmV3UGFyZW50KQotICAgICAgICAgICAgbmV3UGFyZW50LT5p
bnNlcnRBZnRlcihub2RlLmdldCgpLCBuZXdQcmV2aW91c1NpYmxpbmcuZ2V0KCksIGl0LT5maXJz
dC5nZXQoKSk7CisgICAgICAgICAgICBuZXdQYXJlbnQtPmluc2VydEFmdGVyKG5vZGUuZ2V0KCks
IG5ld1ByZXZpb3VzU2libGluZy5nZXQoKSwgaXQtPmtleS5nZXQoKSk7CiAgICAgfQogfQogCkBA
IC02ODQsMjEgKzY4NCwyMSBAQCB2b2lkIFJlbmRlckNvdW50ZXI6OnJlbmRlcmVyU3R5bGVDaGFu
Z2VkKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eQogICAgICAgICAgICAg
Q291bnRlckRpcmVjdGl2ZU1hcDo6Y29uc3RfaXRlcmF0b3IgbmV3TWFwRW5kID0gbmV3Q291bnRl
ckRpcmVjdGl2ZXMtPmVuZCgpOwogICAgICAgICAgICAgQ291bnRlckRpcmVjdGl2ZU1hcDo6Y29u
c3RfaXRlcmF0b3Igb2xkTWFwRW5kID0gb2xkQ291bnRlckRpcmVjdGl2ZXMtPmVuZCgpOwogICAg
ICAgICAgICAgZm9yIChDb3VudGVyRGlyZWN0aXZlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG5l
d0NvdW50ZXJEaXJlY3RpdmVzLT5iZWdpbigpOyBpdCAhPSBuZXdNYXBFbmQ7ICsraXQpIHsKLSAg
ICAgICAgICAgICAgICBDb3VudGVyRGlyZWN0aXZlTWFwOjpjb25zdF9pdGVyYXRvciBvbGRNYXBJ
dCA9IG9sZENvdW50ZXJEaXJlY3RpdmVzLT5maW5kKGl0LT5maXJzdCk7CisgICAgICAgICAgICAg
ICAgQ291bnRlckRpcmVjdGl2ZU1hcDo6Y29uc3RfaXRlcmF0b3Igb2xkTWFwSXQgPSBvbGRDb3Vu
dGVyRGlyZWN0aXZlcy0+ZmluZChpdC0+a2V5KTsKICAgICAgICAgICAgICAgICBpZiAob2xkTWFw
SXQgIT0gb2xkTWFwRW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChvbGRNYXBJdC0+c2Vj
b25kID09IGl0LT5zZWNvbmQpCisgICAgICAgICAgICAgICAgICAgIGlmIChvbGRNYXBJdC0+dmFs
dWUgPT0gaXQtPnZhbHVlKQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICAgICAgICAgIFJlbmRlckNvdW50ZXI6OmRlc3Ryb3lDb3VudGVyTm9kZShyZW5kZXJl
ciwgaXQtPmZpcnN0LmdldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgUmVuZGVyQ291bnRlcjo6
ZGVzdHJveUNvdW50ZXJOb2RlKHJlbmRlcmVyLCBpdC0+a2V5LmdldCgpKTsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgLy8gV2UgbXVzdCBjcmVhdGUgdGhpcyBub2RlIGhlcmUs
IGJlY2F1c2UgdGhlIGNoYW5nZWQgbm9kZSBtYXkgYmUgYSBub2RlIHdpdGggbm8gZGlzcGxheSBz
dWNoIGFzCiAgICAgICAgICAgICAgICAgLy8gYXMgdGhvc2UgY3JlYXRlZCBieSB0aGUgaW5jcmVt
ZW50IG9yIHJlc2V0IGRpcmVjdGl2ZXMgYW5kIHRoZSByZS1sYXlvdXQgdGhhdCB3aWxsIGhhcHBl
biB3aWxsCiAgICAgICAgICAgICAgICAgLy8gbm90IGNhdGNoIHRoZSBjaGFuZ2UgaWYgdGhlIG5v
ZGUgaGFkIG5vIGNoaWxkcmVuLgotICAgICAgICAgICAgICAgIG1ha2VDb3VudGVyTm9kZShyZW5k
ZXJlciwgaXQtPmZpcnN0LmdldCgpLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgbWFrZUNvdW50
ZXJOb2RlKHJlbmRlcmVyLCBpdC0+a2V5LmdldCgpLCBmYWxzZSk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAvLyBEZXN0cm95aW5nIG9sZCBjb3VudGVycyB0aGF0IGRvIG5vdCBleGlzdCBp
biB0aGUgbmV3IGNvdW50ZXJEaXJlY3RpdmUgbWFwLgogICAgICAgICAgICAgZm9yIChDb3VudGVy
RGlyZWN0aXZlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG9sZENvdW50ZXJEaXJlY3RpdmVzLT5i
ZWdpbigpOyBpdCAhPW9sZE1hcEVuZDsgKytpdCkgewotICAgICAgICAgICAgICAgIGlmICghbmV3
Q291bnRlckRpcmVjdGl2ZXMtPmNvbnRhaW5zKGl0LT5maXJzdCkpCi0gICAgICAgICAgICAgICAg
ICAgIFJlbmRlckNvdW50ZXI6OmRlc3Ryb3lDb3VudGVyTm9kZShyZW5kZXJlciwgaXQtPmZpcnN0
LmdldCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoIW5ld0NvdW50ZXJEaXJlY3RpdmVzLT5jb250
YWlucyhpdC0+a2V5KSkKKyAgICAgICAgICAgICAgICAgICAgUmVuZGVyQ291bnRlcjo6ZGVzdHJv
eUNvdW50ZXJOb2RlKHJlbmRlcmVyLCBpdC0+a2V5LmdldCgpKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChyZW5kZXJlci0+aGFzQ291bnRlck5vZGVN
YXAoKSkKQEAgLTcxMCw3ICs3MTAsNyBAQCB2b2lkIFJlbmRlckNvdW50ZXI6OnJlbmRlcmVyU3R5
bGVDaGFuZ2VkKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eQogICAgICAg
ICAgICAgLy8gV2UgbXVzdCBjcmVhdGUgdGhpcyBub2RlIGhlcmUsIGJlY2F1c2UgdGhlIGFkZGVk
IG5vZGUgbWF5IGJlIGEgbm9kZSB3aXRoIG5vIGRpc3BsYXkgc3VjaCBhcwogICAgICAgICAgICAg
Ly8gYXMgdGhvc2UgY3JlYXRlZCBieSB0aGUgaW5jcmVtZW50IG9yIHJlc2V0IGRpcmVjdGl2ZXMg
YW5kIHRoZSByZS1sYXlvdXQgdGhhdCB3aWxsIGhhcHBlbiB3aWxsCiAgICAgICAgICAgICAvLyBu
b3QgY2F0Y2ggdGhlIGNoYW5nZSBpZiB0aGUgbm9kZSBoYWQgbm8gY2hpbGRyZW4uCi0gICAgICAg
ICAgICBtYWtlQ291bnRlck5vZGUocmVuZGVyZXIsIGl0LT5maXJzdC5nZXQoKSwgZmFsc2UpOwor
ICAgICAgICAgICAgbWFrZUNvdW50ZXJOb2RlKHJlbmRlcmVyLCBpdC0+a2V5LmdldCgpLCBmYWxz
ZSk7CiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRmxvd1RocmVhZC5jcHAKaW5kZXggZDMwNTlkZjEzNTA0MTllMGUxZGJjYTJhYjU1MThlNmIx
ZjQ4ZmY1MS4uNzdmMmVmNzI4NWJlYTI3OTE1MWUyNzcxMTUxNDc2YWE3ZGJjYTNhMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcApAQCAtNjIwLDcg
KzYyMCw3IEBAIHZvaWQgUmVuZGVyRmxvd1RocmVhZDo6c2V0UmVnaW9uUmFuZ2VGb3JCb3goY29u
c3QgUmVuZGVyQm94KiBib3gsIExheW91dFVuaXQgb2ZmCiAgICAgfQogCiAgICAgLy8gSWYgbm90
aGluZyBjaGFuZ2VkLCBqdXN0IGJhaWwuCi0gICAgUmVuZGVyUmVnaW9uUmFuZ2UmIHJhbmdlID0g
aXQtPnNlY29uZDsKKyAgICBSZW5kZXJSZWdpb25SYW5nZSYgcmFuZ2UgPSBpdC0+dmFsdWU7CiAg
ICAgaWYgKHJhbmdlLnN0YXJ0UmVnaW9uKCkgPT0gc3RhcnRSZWdpb24gJiYgcmFuZ2UuZW5kUmVn
aW9uKCkgPT0gZW5kUmVnaW9uKQogICAgICAgICByZXR1cm47CiAKQEAgLTY1MCw3ICs2NTAsNyBA
QCB2b2lkIFJlbmRlckZsb3dUaHJlYWQ6OmdldFJlZ2lvblJhbmdlRm9yQm94KGNvbnN0IFJlbmRl
ckJveCogYm94LCBSZW5kZXJSZWdpb24qJgogICAgIGlmIChpdCA9PSBtX3JlZ2lvblJhbmdlTWFw
LmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBjb25zdCBSZW5kZXJSZWdpb25SYW5nZSYg
cmFuZ2UgPSBpdC0+c2Vjb25kOworICAgIGNvbnN0IFJlbmRlclJlZ2lvblJhbmdlJiByYW5nZSA9
IGl0LT52YWx1ZTsKICAgICBzdGFydFJlZ2lvbiA9IHJhbmdlLnN0YXJ0UmVnaW9uKCk7CiAgICAg
ZW5kUmVnaW9uID0gcmFuZ2UuZW5kUmVnaW9uKCk7CiAgICAgQVNTRVJUKG1fcmVnaW9uTGlzdC5j
b250YWlucyhzdGFydFJlZ2lvbikgJiYgbV9yZWdpb25MaXN0LmNvbnRhaW5zKGVuZFJlZ2lvbikp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKaW5kZXggMmQ5MWZkOGIy
ZWUxZmEzMzFmNjU2ZDhjNjc0Y2YzOGNjZDZhYjEyMi4uNTViNzYxNTcyMzBmZTY0M2YzZDhmMGU1
YzhhM2ZiOWU0NjU4YzMyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
Y3BwCkBAIC0yODcxLDcgKzI4NzEsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludChHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QsCiAgICAgcGFp
bnRMYXllcih0aGlzLCBjb250ZXh0LCBlbmNsb3NpbmdJbnRSZWN0KGRhbWFnZVJlY3QpLCBMYXlv
dXRTaXplKCksIHBhaW50QmVoYXZpb3IsIHBhaW50aW5nUm9vdCwgcmVnaW9uLCAmb3ZlcmxhcFRl
c3RSZXF1ZXN0cywgcGFpbnRGbGFncyk7CiAgICAgT3ZlcmxhcFRlc3RSZXF1ZXN0TWFwOjppdGVy
YXRvciBlbmQgPSBvdmVybGFwVGVzdFJlcXVlc3RzLmVuZCgpOwogICAgIGZvciAoT3ZlcmxhcFRl
c3RSZXF1ZXN0TWFwOjppdGVyYXRvciBpdCA9IG92ZXJsYXBUZXN0UmVxdWVzdHMuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+Zmlyc3QtPnNldE92ZXJsYXBUZXN0UmVzdWx0
KGZhbHNlKTsKKyAgICAgICAgaXQtPmtleS0+c2V0T3ZlcmxhcFRlc3RSZXN1bHQoZmFsc2UpOwog
fQogCiB2b2lkIFJlbmRlckxheWVyOjpwYWludE92ZXJsYXlTY3JvbGxiYXJzKEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwgUGFpbnRCZWhhdmlv
ciBwYWludEJlaGF2aW9yLCBSZW5kZXJPYmplY3QqIHBhaW50aW5nUm9vdCkKQEAgLTI5NDAsMTEg
KzI5NDAsMTEgQEAgc3RhdGljIHZvaWQgcGVyZm9ybU92ZXJsYXBUZXN0cyhPdmVybGFwVGVzdFJl
cXVlc3RNYXAmIG92ZXJsYXBUZXN0UmVxdWVzdHMsIGNvbnMKICAgICBPdmVybGFwVGVzdFJlcXVl
c3RNYXA6Oml0ZXJhdG9yIGVuZCA9IG92ZXJsYXBUZXN0UmVxdWVzdHMuZW5kKCk7CiAgICAgTGF5
b3V0UmVjdCBib3VuZGluZ0JveCA9IGxheWVyLT5ib3VuZGluZ0JveChyb290TGF5ZXIpOwogICAg
IGZvciAoT3ZlcmxhcFRlc3RSZXF1ZXN0TWFwOjppdGVyYXRvciBpdCA9IG92ZXJsYXBUZXN0UmVx
dWVzdHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmICghYm91bmRpbmdC
b3guaW50ZXJzZWN0cyhpdC0+c2Vjb25kKSkKKyAgICAgICAgaWYgKCFib3VuZGluZ0JveC5pbnRl
cnNlY3RzKGl0LT52YWx1ZSkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBpdC0+
Zmlyc3QtPnNldE92ZXJsYXBUZXN0UmVzdWx0KHRydWUpOwotICAgICAgICBvdmVybGFwcGVkUmVx
dWVzdENsaWVudHMuYXBwZW5kKGl0LT5maXJzdCk7CisgICAgICAgIGl0LT5rZXktPnNldE92ZXJs
YXBUZXN0UmVzdWx0KHRydWUpOworICAgICAgICBvdmVybGFwcGVkUmVxdWVzdENsaWVudHMuYXBw
ZW5kKGl0LT5rZXkpOwogICAgIH0KICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG92ZXJsYXBw
ZWRSZXF1ZXN0Q2xpZW50cy5zaXplKCk7ICsraSkKICAgICAgICAgb3ZlcmxhcFRlc3RSZXF1ZXN0
cy5yZW1vdmUob3ZlcmxhcHBlZFJlcXVlc3RDbGllbnRzW2ldKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlckluZm8uY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVySW5mby5jcHAKaW5kZXggYWNiZjA3ZDlk
MWJmZDIwMjFjNTU0MTUyNjZkZDQ0MzA1MDU1NWE3ZC4uY2I0YzVkNjYxMTBjOTI0MTJmMzUwZWE4
OTkzMjcyY2U2MmNkN2UwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyRmlsdGVySW5mby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyRmlsdGVySW5mby5jcHAKQEAgLTU2LDcgKzU2LDcgQEAgUmVuZGVyTGF5ZXJGaWx0
ZXJJbmZvKiBSZW5kZXJMYXllckZpbHRlckluZm86OmZpbHRlckluZm9Gb3JSZW5kZXJMYXllcihj
b25zdCBSZW4KICAgICBpZiAoIXNfZmlsdGVyTWFwKQogICAgICAgICByZXR1cm4gMDsKICAgICBS
ZW5kZXJMYXllckZpbHRlckluZm9NYXA6Oml0ZXJhdG9yIGl0ZXIgPSBzX2ZpbHRlck1hcC0+Zmlu
ZChsYXllcik7Ci0gICAgcmV0dXJuIChpdGVyICE9IHNfZmlsdGVyTWFwLT5lbmQoKSkgPyBpdGVy
LT5zZWNvbmQgOiAwOworICAgIHJldHVybiAoaXRlciAhPSBzX2ZpbHRlck1hcC0+ZW5kKCkpID8g
aXRlci0+dmFsdWUgOiAwOwogfQogCiBSZW5kZXJMYXllckZpbHRlckluZm8qIFJlbmRlckxheWVy
RmlsdGVySW5mbzo6Y3JlYXRlRmlsdGVySW5mb0ZvclJlbmRlckxheWVySWZOZWVkZWQoUmVuZGVy
TGF5ZXIqIGxheWVyKQpAQCAtNjcsNyArNjcsNyBAQCBSZW5kZXJMYXllckZpbHRlckluZm8qIFJl
bmRlckxheWVyRmlsdGVySW5mbzo6Y3JlYXRlRmlsdGVySW5mb0ZvclJlbmRlckxheWVySWZOZQog
ICAgIFJlbmRlckxheWVyRmlsdGVySW5mb01hcDo6aXRlcmF0b3IgaXRlciA9IHNfZmlsdGVyTWFw
LT5maW5kKGxheWVyKTsKICAgICBpZiAoaXRlciAhPSBzX2ZpbHRlck1hcC0+ZW5kKCkpIHsKICAg
ICAgICAgQVNTRVJUKGxheWVyLT5oYXNGaWx0ZXJJbmZvKCkpOwotICAgICAgICByZXR1cm4gaXRl
ci0+c2Vjb25kOworICAgICAgICByZXR1cm4gaXRlci0+dmFsdWU7CiAgICAgfQogICAgIAogICAg
IFJlbmRlckxheWVyRmlsdGVySW5mbyogZmlsdGVyID0gbmV3IFJlbmRlckxheWVyRmlsdGVySW5m
byhsYXllcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFt
ZWRGbG93VGhyZWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZs
b3dUaHJlYWQuY3BwCmluZGV4IDViMDI0NTNlNGM2YzNkYmFlZDYzZGRhNTBlYTMzOTRjYmU0N2Nm
MjQuLmMxMmZjZjczZmQ2ZGYyNjQxYWYyMjVjOTE5MmM3YTcyOTUyODk3OWIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3BwCkBAIC0x
MTcsNyArMTE3LDcgQEAgYm9vbCBSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OmRlcGVuZHNPbihSZW5k
ZXJOYW1lZEZsb3dUaHJlYWQqIG90aGVyUmVuZGVyRmxvd1RocmUKICAgICBSZW5kZXJOYW1lZEZs
b3dUaHJlYWRDb3VudGVkU2V0Ojpjb25zdF9pdGVyYXRvciBpdGVyYXRvciA9IG1fbGF5b3V0QmVm
b3JlVGhyZWFkc1NldC5iZWdpbigpOwogICAgIFJlbmRlck5hbWVkRmxvd1RocmVhZENvdW50ZWRT
ZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fbGF5b3V0QmVmb3JlVGhyZWFkc1NldC5lbmQoKTsK
ICAgICBmb3IgKDsgaXRlcmF0b3IgIT0gZW5kOyArK2l0ZXJhdG9yKSB7Ci0gICAgICAgIGNvbnN0
IFJlbmRlck5hbWVkRmxvd1RocmVhZCogYmVmb3JlRmxvd1RocmVhZCA9ICgqaXRlcmF0b3IpLmZp
cnN0OworICAgICAgICBjb25zdCBSZW5kZXJOYW1lZEZsb3dUaHJlYWQqIGJlZm9yZUZsb3dUaHJl
YWQgPSAoKml0ZXJhdG9yKS5rZXk7CiAgICAgICAgIGlmIChiZWZvcmVGbG93VGhyZWFkLT5kZXBl
bmRzT24ob3RoZXJSZW5kZXJGbG93VGhyZWFkKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KQEAgLTI1MSw3ICsyNTEsNyBAQCB2b2lkIFJlbmRlck5hbWVkRmxvd1RocmVhZDo6cmVt
b3ZlRGVwZW5kZW5jeU9uRmxvd1RocmVhZChSZW5kZXJOYW1lZEZsb3dUaHJlYWQqCiB2b2lkIFJl
bmRlck5hbWVkRmxvd1RocmVhZDo6cHVzaERlcGVuZGVuY2llcyhSZW5kZXJOYW1lZEZsb3dUaHJl
YWRMaXN0JiBsaXN0KQogewogICAgIGZvciAoUmVuZGVyTmFtZWRGbG93VGhyZWFkQ291bnRlZFNl
dDo6aXRlcmF0b3IgaXRlciA9IG1fbGF5b3V0QmVmb3JlVGhyZWFkc1NldC5iZWdpbigpOyBpdGVy
ICE9IG1fbGF5b3V0QmVmb3JlVGhyZWFkc1NldC5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIFJl
bmRlck5hbWVkRmxvd1RocmVhZCogZmxvd1RocmVhZCA9ICgqaXRlcikuZmlyc3Q7CisgICAgICAg
IFJlbmRlck5hbWVkRmxvd1RocmVhZCogZmxvd1RocmVhZCA9ICgqaXRlcikua2V5OwogICAgICAg
ICBpZiAobGlzdC5jb250YWlucyhmbG93VGhyZWFkKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICBmbG93VGhyZWFkLT5wdXNoRGVwZW5kZW5jaWVzKGxpc3QpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcAppbmRleCBkYmRiZTgzZjdiNWM1ODMxZjhmOTQ0
MWJmMDEwNTg0MzYxOWExMzZmLi5kNzkyYjgwMTkwM2IxMTBjZDI4ZjUwMzVjYzdiMmVmNWU5Y2Fk
NDM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcApAQCAtMjU4
LDcgKzI1OCw3IEBAIFJlbmRlckJveFJlZ2lvbkluZm8qIFJlbmRlclJlZ2lvbjo6c2V0UmVuZGVy
Qm94UmVnaW9uSW5mbyhjb25zdCBSZW5kZXJCb3gqIGJveCwKICAgICBpZiAoIW1faXNWYWxpZCB8
fCAhbV9mbG93VGhyZWFkKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIE93blB0cjxSZW5kZXJC
b3hSZWdpb25JbmZvPiYgYm94SW5mbyA9IG1fcmVuZGVyQm94UmVnaW9uSW5mby5hZGQoYm94LCBu
dWxscHRyKS5pdGVyYXRvci0+c2Vjb25kOworICAgIE93blB0cjxSZW5kZXJCb3hSZWdpb25JbmZv
PiYgYm94SW5mbyA9IG1fcmVuZGVyQm94UmVnaW9uSW5mby5hZGQoYm94LCBudWxscHRyKS5pdGVy
YXRvci0+dmFsdWU7CiAgICAgaWYgKGJveEluZm8pCiAgICAgICAgICpib3hJbmZvID0gUmVuZGVy
Qm94UmVnaW9uSW5mbyhsb2dpY2FsTGVmdEluc2V0LCBsb2dpY2FsUmlnaHRJbnNldCwgY29udGFp
bmluZ0Jsb2NrQ2hhaW5Jc0luc2V0KTsKICAgICBlbHNlCkBAIC0zMTgsOCArMzE4LDggQEAgdm9p
ZCBSZW5kZXJSZWdpb246OnNldFJlZ2lvbk9iamVjdHNSZWdpb25TdHlsZSgpCiAgICAgICAgIFJl
ZlB0cjxSZW5kZXJTdHlsZT4gb2JqZWN0U3R5bGVJblJlZ2lvbjsKICAgICAgICAgYm9vbCBvYmpl
Y3RSZWdpb25TdHlsZUNhY2hlZCA9IGZhbHNlOwogICAgICAgICBpZiAoaXQgIT0gbV9yZW5kZXJP
YmplY3RSZWdpb25TdHlsZS5lbmQoKSkgewotICAgICAgICAgICAgb2JqZWN0U3R5bGVJblJlZ2lv
biA9IGl0LT5zZWNvbmQuc3R5bGU7Ci0gICAgICAgICAgICBBU1NFUlQoaXQtPnNlY29uZC5jYWNo
ZWQpOworICAgICAgICAgICAgb2JqZWN0U3R5bGVJblJlZ2lvbiA9IGl0LT52YWx1ZS5zdHlsZTsK
KyAgICAgICAgICAgIEFTU0VSVChpdC0+dmFsdWUuY2FjaGVkKTsKICAgICAgICAgICAgIG9iamVj
dFJlZ2lvblN0eWxlQ2FjaGVkID0gdHJ1ZTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBv
YmplY3RTdHlsZUluUmVnaW9uID0gY29tcHV0ZVN0eWxlSW5SZWdpb24ob2JqZWN0KTsKQEAgLTMz
NywxMiArMzM3LDEyIEBAIHZvaWQgUmVuZGVyUmVnaW9uOjpyZXN0b3JlUmVnaW9uT2JqZWN0c09y
aWdpbmFsU3R5bGUoKQogCiAgICAgUmVuZGVyT2JqZWN0UmVnaW9uU3R5bGVNYXAgdGVtcDsKICAg
ICBmb3IgKFJlbmRlck9iamVjdFJlZ2lvblN0eWxlTWFwOjppdGVyYXRvciBpdGVyID0gbV9yZW5k
ZXJPYmplY3RSZWdpb25TdHlsZS5iZWdpbigpLCBlbmQgPSBtX3JlbmRlck9iamVjdFJlZ2lvblN0
eWxlLmVuZCgpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0gICAgICAgIFJlbmRlck9iamVjdCog
b2JqZWN0ID0gY29uc3RfY2FzdDxSZW5kZXJPYmplY3QqPihpdGVyLT5maXJzdCk7CisgICAgICAg
IFJlbmRlck9iamVjdCogb2JqZWN0ID0gY29uc3RfY2FzdDxSZW5kZXJPYmplY3QqPihpdGVyLT5r
ZXkpOwogICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG9iamVjdFJlZ2lvblN0eWxlID0gb2Jq
ZWN0LT5zdHlsZSgpOwotICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG9iamVjdE9yaWdpbmFs
U3R5bGUgPSBpdGVyLT5zZWNvbmQuc3R5bGU7CisgICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4g
b2JqZWN0T3JpZ2luYWxTdHlsZSA9IGl0ZXItPnZhbHVlLnN0eWxlOwogICAgICAgICBvYmplY3Qt
PnNldFN0eWxlSW50ZXJuYWwob2JqZWN0T3JpZ2luYWxTdHlsZSk7CiAKLSAgICAgICAgYm9vbCBz
aG91bGRDYWNoZVJlZ2lvblN0eWxlID0gaXRlci0+c2Vjb25kLmNhY2hlZDsKKyAgICAgICAgYm9v
bCBzaG91bGRDYWNoZVJlZ2lvblN0eWxlID0gaXRlci0+dmFsdWUuY2FjaGVkOwogICAgICAgICBp
ZiAoIXNob3VsZENhY2hlUmVnaW9uU3R5bGUpIHsKICAgICAgICAgICAgIC8vIENoZWNrIHdoZXRo
ZXIgd2Ugc2hvdWxkIGNhY2hlIHRoZSBjb21wdXRlZCBzdHlsZSBpbiByZWdpb24uCiAgICAgICAg
ICAgICB1bnNpZ25lZCBjaGFuZ2VkQ29udGV4dFNlbnNpdGl2ZVByb3BlcnRpZXMgPSBDb250ZXh0
U2Vuc2l0aXZlUHJvcGVydHlOb25lOwpAQCAtMzk4LDcgKzM5OCw3IEBAIHZvaWQgUmVuZGVyUmVn
aW9uOjpjb21wdXRlQ2hpbGRyZW5TdHlsZUluUmVnaW9uKGNvbnN0IFJlbmRlck9iamVjdCogb2Jq
ZWN0KQogICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IGNoaWxkU3R5bGVJblJlZ2lvbjsKICAg
ICAgICAgYm9vbCBvYmplY3RSZWdpb25TdHlsZUNhY2hlZCA9IGZhbHNlOwogICAgICAgICBpZiAo
aXQgIT0gbV9yZW5kZXJPYmplY3RSZWdpb25TdHlsZS5lbmQoKSkgewotICAgICAgICAgICAgY2hp
bGRTdHlsZUluUmVnaW9uID0gaXQtPnNlY29uZC5zdHlsZTsKKyAgICAgICAgICAgIGNoaWxkU3R5
bGVJblJlZ2lvbiA9IGl0LT52YWx1ZS5zdHlsZTsKICAgICAgICAgICAgIG9iamVjdFJlZ2lvblN0
eWxlQ2FjaGVkID0gdHJ1ZTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChjaGls
ZC0+aXNBbm9ueW1vdXMoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUYWJsZVNlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRh
YmxlU2VjdGlvbi5jcHAKaW5kZXggNWMwOGU3YTFjZTQwMDQ2ZmNlZGU5MTQ0NTcyMmM5YTJmY2M1
MTllZC4uYmM0ZDkwNDRmNmU4ZDNhN2M2M2IzMjk2ZjVlZjM3MmU1MzkxMTJlMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKQEAgLTE0NTAs
NyArMTQ1MCw3IEBAIENvbGxhcHNlZEJvcmRlclZhbHVlJiBSZW5kZXJUYWJsZVNlY3Rpb246OmNh
Y2hlZENvbGxhcHNlZEJvcmRlcihjb25zdCBSZW5kZXJUYWJsCiAgICAgQVNTRVJUKHRhYmxlKCkt
PmNvbGxhcHNlQm9yZGVycygpKTsKICAgICBIYXNoTWFwPHBhaXI8Y29uc3QgUmVuZGVyVGFibGVD
ZWxsKiwgaW50PiwgQ29sbGFwc2VkQm9yZGVyVmFsdWU+OjppdGVyYXRvciBpdCA9IG1fY2VsbHND
b2xsYXBzZWRCb3JkZXJzLmZpbmQobWFrZV9wYWlyKGNlbGwsIHNpZGUpKTsKICAgICBBU1NFUlQo
aXQgIT0gbV9jZWxsc0NvbGxhcHNlZEJvcmRlcnMuZW5kKCkpOwotICAgIHJldHVybiBpdC0+c2Vj
b25kOworICAgIHJldHVybiBpdC0+dmFsdWU7CiB9CiAKIFJlbmRlclRhYmxlU2VjdGlvbiogUmVu
ZGVyVGFibGVTZWN0aW9uOjpjcmVhdGVBbm9ueW1vdXNXaXRoUGFyZW50UmVuZGVyZXIoY29uc3Qg
UmVuZGVyT2JqZWN0KiBwYXJlbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWVNYWMubW0KaW5kZXggMGJjOTgwNGZiNzU5YjExZWQ5NmE0MDkxMDZhMDExNjc5OGMyMDRiZS4u
NjQwNGQyYWZjMTQ2ZTgxNTU4MDViOWVhZTgwODRiMmE0MGI4MWYzNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQpAQCAtMzgwLDcgKzM4MCw3IEBAIENvbG9y
IFJlbmRlclRoZW1lTWFjOjpzeXN0ZW1Db2xvcihpbnQgY3NzVmFsdWVJZCkgY29uc3QKICAgICB7
CiAgICAgICAgIEhhc2hNYXA8aW50LCBSR0JBMzI+OjppdGVyYXRvciBpdCA9IG1fc3lzdGVtQ29s
b3JDYWNoZS5maW5kKGNzc1ZhbHVlSWQpOwogICAgICAgICBpZiAoaXQgIT0gbV9zeXN0ZW1Db2xv
ckNhY2hlLmVuZCgpKQotICAgICAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgICAg
ICByZXR1cm4gaXQtPnZhbHVlOwogICAgIH0KIAogICAgIENvbG9yIGNvbG9yOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCmluZGV4IDhjYzM0YTMzMGRjODgyNTZkNTUxODBl
MGI1NWIzNDQ4N2Y3OGVjYjUuLjhmZGM5NGJmY2Q0NjM3Zjk0NzljOWNlZWRhMzA3MjU3MzEwMGYz
MzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKQEAgLTQzOCw3ICs0
MzgsNyBAQCBJbnRSZWN0IFJlbmRlclZpZXc6OnNlbGVjdGlvbkJvdW5kcyhib29sIGNsaXBUb1Zp
c2libGVDb250ZW50KSBjb25zdAogICAgICAgICAgICAgc2VsZWN0ZWRPYmplY3RzLnNldChvcywg
YWRvcHRQdHIobmV3IFJlbmRlclNlbGVjdGlvbkluZm8ob3MsIGNsaXBUb1Zpc2libGVDb250ZW50
KSkpOwogICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGNiID0gb3MtPmNvbnRhaW5pbmdCbG9jaygp
OwogICAgICAgICAgICAgd2hpbGUgKGNiICYmICFjYi0+aXNSZW5kZXJWaWV3KCkpIHsKLSAgICAg
ICAgICAgICAgICBPd25QdHI8UmVuZGVyU2VsZWN0aW9uSW5mbz4mIGJsb2NrSW5mbyA9IHNlbGVj
dGVkT2JqZWN0cy5hZGQoY2IsIG51bGxwdHIpLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgICAg
ICAgICAgT3duUHRyPFJlbmRlclNlbGVjdGlvbkluZm8+JiBibG9ja0luZm8gPSBzZWxlY3RlZE9i
amVjdHMuYWRkKGNiLCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgICAgICAgICAg
aWYgKGJsb2NrSW5mbykKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgYmxvY2tJbmZvID0gYWRvcHRQdHIobmV3IFJlbmRlclNlbGVjdGlvbkluZm8oY2IsIGNsaXBU
b1Zpc2libGVDb250ZW50KSk7CkBAIC00NTMsNyArNDUzLDcgQEAgSW50UmVjdCBSZW5kZXJWaWV3
OjpzZWxlY3Rpb25Cb3VuZHMoYm9vbCBjbGlwVG9WaXNpYmxlQ29udGVudCkgY29uc3QKICAgICBM
YXlvdXRSZWN0IHNlbFJlY3Q7CiAgICAgU2VsZWN0aW9uTWFwOjppdGVyYXRvciBlbmQgPSBzZWxl
Y3RlZE9iamVjdHMuZW5kKCk7CiAgICAgZm9yIChTZWxlY3Rpb25NYXA6Oml0ZXJhdG9yIGkgPSBz
ZWxlY3RlZE9iamVjdHMuYmVnaW4oKTsgaSAhPSBlbmQ7ICsraSkgewotICAgICAgICBSZW5kZXJT
ZWxlY3Rpb25JbmZvKiBpbmZvID0gaS0+c2Vjb25kLmdldCgpOworICAgICAgICBSZW5kZXJTZWxl
Y3Rpb25JbmZvKiBpbmZvID0gaS0+dmFsdWUuZ2V0KCk7CiAgICAgICAgIC8vIFJlbmRlclNlbGVj
dGlvbkluZm86OnJlY3QoKSBpcyBpbiB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIHJlcGFpbnRDb250
YWluZXIsIHNvIG1hcCB0byBwYWdlIGNvb3JkaW5hdGVzLgogICAgICAgICBMYXlvdXRSZWN0IGN1
cnJSZWN0ID0gaW5mby0+cmVjdCgpOwogICAgICAgICBpZiAoUmVuZGVyQm94TW9kZWxPYmplY3Qq
IHJlcGFpbnRDb250YWluZXIgPSBpbmZvLT5yZXBhaW50Q29udGFpbmVyKCkpIHsKQEAgLTUxOCw3
ICs1MTgsNyBAQCB2b2lkIFJlbmRlclZpZXc6OnNldFNlbGVjdGlvbihSZW5kZXJPYmplY3QqIHN0
YXJ0LCBpbnQgc3RhcnRQb3MsIFJlbmRlck9iamVjdCogZQogICAgICAgICAgICAgaWYgKGJsb2Nr
UmVwYWludE1vZGUgPT0gUmVwYWludE5ld1hPUk9sZCkgewogICAgICAgICAgICAgICAgIFJlbmRl
ckJsb2NrKiBjYiA9IG9zLT5jb250YWluaW5nQmxvY2soKTsKICAgICAgICAgICAgICAgICB3aGls
ZSAoY2IgJiYgIWNiLT5pc1JlbmRlclZpZXcoKSkgewotICAgICAgICAgICAgICAgICAgICBPd25Q
dHI8UmVuZGVyQmxvY2tTZWxlY3Rpb25JbmZvPiYgYmxvY2tJbmZvID0gb2xkU2VsZWN0ZWRCbG9j
a3MuYWRkKGNiLCBudWxscHRyKS5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICAgICAgICAgICAg
ICBPd25QdHI8UmVuZGVyQmxvY2tTZWxlY3Rpb25JbmZvPiYgYmxvY2tJbmZvID0gb2xkU2VsZWN0
ZWRCbG9ja3MuYWRkKGNiLCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgICAgICAg
ICAgICAgIGlmIChibG9ja0luZm8pCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICAgICAgYmxvY2tJbmZvID0gYWRvcHRQdHIobmV3IFJlbmRlckJsb2NrU2Vs
ZWN0aW9uSW5mbyhjYikpOwpAQCAtNTMzLDcgKzUzMyw3IEBAIHZvaWQgUmVuZGVyVmlldzo6c2V0
U2VsZWN0aW9uKFJlbmRlck9iamVjdCogc3RhcnQsIGludCBzdGFydFBvcywgUmVuZGVyT2JqZWN0
KiBlCiAgICAgLy8gTm93IGNsZWFyIHRoZSBzZWxlY3Rpb24uCiAgICAgU2VsZWN0ZWRPYmplY3RN
YXA6Oml0ZXJhdG9yIG9sZE9iamVjdHNFbmQgPSBvbGRTZWxlY3RlZE9iamVjdHMuZW5kKCk7CiAg
ICAgZm9yIChTZWxlY3RlZE9iamVjdE1hcDo6aXRlcmF0b3IgaSA9IG9sZFNlbGVjdGVkT2JqZWN0
cy5iZWdpbigpOyBpICE9IG9sZE9iamVjdHNFbmQ7ICsraSkKLSAgICAgICAgaS0+Zmlyc3QtPnNl
dFNlbGVjdGlvblN0YXRlSWZOZWVkZWQoU2VsZWN0aW9uTm9uZSk7CisgICAgICAgIGktPmtleS0+
c2V0U2VsZWN0aW9uU3RhdGVJZk5lZWRlZChTZWxlY3Rpb25Ob25lKTsKIAogICAgIC8vIHNldCBz
ZWxlY3Rpb24gc3RhcnQgYW5kIGVuZAogICAgIG1fc2VsZWN0aW9uU3RhcnQgPSBzdGFydDsKQEAg
LTU3MSw3ICs1NzEsNyBAQCB2b2lkIFJlbmRlclZpZXc6OnNldFNlbGVjdGlvbihSZW5kZXJPYmpl
Y3QqIHN0YXJ0LCBpbnQgc3RhcnRQb3MsIFJlbmRlck9iamVjdCogZQogICAgICAgICAgICAgbmV3
U2VsZWN0ZWRPYmplY3RzLnNldChvLCBhZG9wdFB0cihuZXcgUmVuZGVyU2VsZWN0aW9uSW5mbyhv
LCB0cnVlKSkpOwogICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGNiID0gby0+Y29udGFpbmluZ0Js
b2NrKCk7CiAgICAgICAgICAgICB3aGlsZSAoY2IgJiYgIWNiLT5pc1JlbmRlclZpZXcoKSkgewot
ICAgICAgICAgICAgICAgIE93blB0cjxSZW5kZXJCbG9ja1NlbGVjdGlvbkluZm8+JiBibG9ja0lu
Zm8gPSBuZXdTZWxlY3RlZEJsb2Nrcy5hZGQoY2IsIG51bGxwdHIpLml0ZXJhdG9yLT5zZWNvbmQ7
CisgICAgICAgICAgICAgICAgT3duUHRyPFJlbmRlckJsb2NrU2VsZWN0aW9uSW5mbz4mIGJsb2Nr
SW5mbyA9IG5ld1NlbGVjdGVkQmxvY2tzLmFkZChjYiwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVl
OwogICAgICAgICAgICAgICAgIGlmIChibG9ja0luZm8pCiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIGJsb2NrSW5mbyA9IGFkb3B0UHRyKG5ldyBSZW5kZXJCbG9j
a1NlbGVjdGlvbkluZm8oY2IpKTsKQEAgLTU4OSw5ICs1ODksOSBAQCB2b2lkIFJlbmRlclZpZXc6
OnNldFNlbGVjdGlvbihSZW5kZXJPYmplY3QqIHN0YXJ0LCBpbnQgc3RhcnRQb3MsIFJlbmRlck9i
amVjdCogZQogCiAgICAgLy8gSGF2ZSBhbnkgb2YgdGhlIG9sZCBzZWxlY3RlZCBvYmplY3RzIGNo
YW5nZWQgY29tcGFyZWQgdG8gdGhlIG5ldyBzZWxlY3Rpb24/CiAgICAgZm9yIChTZWxlY3RlZE9i
amVjdE1hcDo6aXRlcmF0b3IgaSA9IG9sZFNlbGVjdGVkT2JqZWN0cy5iZWdpbigpOyBpICE9IG9s
ZE9iamVjdHNFbmQ7ICsraSkgewotICAgICAgICBSZW5kZXJPYmplY3QqIG9iaiA9IGktPmZpcnN0
OworICAgICAgICBSZW5kZXJPYmplY3QqIG9iaiA9IGktPmtleTsKICAgICAgICAgUmVuZGVyU2Vs
ZWN0aW9uSW5mbyogbmV3SW5mbyA9IG5ld1NlbGVjdGVkT2JqZWN0cy5nZXQob2JqKTsKLSAgICAg
ICAgUmVuZGVyU2VsZWN0aW9uSW5mbyogb2xkSW5mbyA9IGktPnNlY29uZC5nZXQoKTsKKyAgICAg
ICAgUmVuZGVyU2VsZWN0aW9uSW5mbyogb2xkSW5mbyA9IGktPnZhbHVlLmdldCgpOwogICAgICAg
ICBpZiAoIW5ld0luZm8gfHwgb2xkSW5mby0+cmVjdCgpICE9IG5ld0luZm8tPnJlY3QoKSB8fCBv
bGRJbmZvLT5zdGF0ZSgpICE9IG5ld0luZm8tPnN0YXRlKCkgfHwKICAgICAgICAgICAgIChtX3Nl
bGVjdGlvblN0YXJ0ID09IG9iaiAmJiBvbGRTdGFydFBvcyAhPSBtX3NlbGVjdGlvblN0YXJ0UG9z
KSB8fAogICAgICAgICAgICAgKG1fc2VsZWN0aW9uRW5kID09IG9iaiAmJiBvbGRFbmRQb3MgIT0g
bV9zZWxlY3Rpb25FbmRQb3MpKSB7CkBAIC02MDYsMTQgKzYwNiwxNCBAQCB2b2lkIFJlbmRlclZp
ZXc6OnNldFNlbGVjdGlvbihSZW5kZXJPYmplY3QqIHN0YXJ0LCBpbnQgc3RhcnRQb3MsIFJlbmRl
ck9iamVjdCogZQogICAgIC8vIEFueSBuZXcgb2JqZWN0cyB0aGF0IHJlbWFpbiB3ZXJlIG5vdCBm
b3VuZCBpbiB0aGUgb2xkIG9iamVjdHMgZGljdCwgYW5kIHNvIHRoZXkgbmVlZCB0byBiZSB1cGRh
dGVkLgogICAgIFNlbGVjdGVkT2JqZWN0TWFwOjppdGVyYXRvciBuZXdPYmplY3RzRW5kID0gbmV3
U2VsZWN0ZWRPYmplY3RzLmVuZCgpOwogICAgIGZvciAoU2VsZWN0ZWRPYmplY3RNYXA6Oml0ZXJh
dG9yIGkgPSBuZXdTZWxlY3RlZE9iamVjdHMuYmVnaW4oKTsgaSAhPSBuZXdPYmplY3RzRW5kOyAr
K2kpCi0gICAgICAgIGktPnNlY29uZC0+cmVwYWludCgpOworICAgICAgICBpLT52YWx1ZS0+cmVw
YWludCgpOwogCiAgICAgLy8gSGF2ZSBhbnkgb2YgdGhlIG9sZCBibG9ja3MgY2hhbmdlZD8KICAg
ICBTZWxlY3RlZEJsb2NrTWFwOjppdGVyYXRvciBvbGRCbG9ja3NFbmQgPSBvbGRTZWxlY3RlZEJs
b2Nrcy5lbmQoKTsKICAgICBmb3IgKFNlbGVjdGVkQmxvY2tNYXA6Oml0ZXJhdG9yIGkgPSBvbGRT
ZWxlY3RlZEJsb2Nrcy5iZWdpbigpOyBpICE9IG9sZEJsb2Nrc0VuZDsgKytpKSB7Ci0gICAgICAg
IFJlbmRlckJsb2NrKiBibG9jayA9IGktPmZpcnN0OworICAgICAgICBSZW5kZXJCbG9jayogYmxv
Y2sgPSBpLT5rZXk7CiAgICAgICAgIFJlbmRlckJsb2NrU2VsZWN0aW9uSW5mbyogbmV3SW5mbyA9
IG5ld1NlbGVjdGVkQmxvY2tzLmdldChibG9jayk7Ci0gICAgICAgIFJlbmRlckJsb2NrU2VsZWN0
aW9uSW5mbyogb2xkSW5mbyA9IGktPnNlY29uZC5nZXQoKTsKKyAgICAgICAgUmVuZGVyQmxvY2tT
ZWxlY3Rpb25JbmZvKiBvbGRJbmZvID0gaS0+dmFsdWUuZ2V0KCk7CiAgICAgICAgIGlmICghbmV3
SW5mbyB8fCBvbGRJbmZvLT5yZWN0cygpICE9IG5ld0luZm8tPnJlY3RzKCkgfHwgb2xkSW5mby0+
c3RhdGUoKSAhPSBuZXdJbmZvLT5zdGF0ZSgpKSB7CiAgICAgICAgICAgICBvbGRJbmZvLT5yZXBh
aW50KCk7CiAgICAgICAgICAgICBpZiAobmV3SW5mbykgewpAQCAtNjI2LDcgKzYyNiw3IEBAIHZv
aWQgUmVuZGVyVmlldzo6c2V0U2VsZWN0aW9uKFJlbmRlck9iamVjdCogc3RhcnQsIGludCBzdGFy
dFBvcywgUmVuZGVyT2JqZWN0KiBlCiAgICAgLy8gQW55IG5ldyBibG9ja3MgdGhhdCByZW1haW4g
d2VyZSBub3QgZm91bmQgaW4gdGhlIG9sZCBibG9ja3MgZGljdCwgYW5kIHNvIHRoZXkgbmVlZCB0
byBiZSB1cGRhdGVkLgogICAgIFNlbGVjdGVkQmxvY2tNYXA6Oml0ZXJhdG9yIG5ld0Jsb2Nrc0Vu
ZCA9IG5ld1NlbGVjdGVkQmxvY2tzLmVuZCgpOwogICAgIGZvciAoU2VsZWN0ZWRCbG9ja01hcDo6
aXRlcmF0b3IgaSA9IG5ld1NlbGVjdGVkQmxvY2tzLmJlZ2luKCk7IGkgIT0gbmV3QmxvY2tzRW5k
OyArK2kpCi0gICAgICAgIGktPnNlY29uZC0+cmVwYWludCgpOworICAgICAgICBpLT52YWx1ZS0+
cmVwYWludCgpOwogCiAgICAgbV9mcmFtZVZpZXctPmVuZERlZmVycmVkUmVwYWludHMoKTsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKaW5kZXggZmM0ZjJmMzVh
M2U3NzBkMDRhYzRjNmNiMjBhMzMxMjQ4MTNmZDhiNy4uNWJiZmZlNGJlYTc2NmI3ZDYyM2NiODZj
MTFmOTNhOGVjYTM3MmU4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlcldpZGdldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdl
dC5jcHAKQEAgLTcwLDkgKzcwLDkgQEAgdm9pZCBSZW5kZXJXaWRnZXQ6OnJlc3VtZVdpZGdldEhp
ZXJhcmNoeVVwZGF0ZXMoKQogICAgICAgICB3aWRnZXROZXdQYXJlbnRNYXAoKS5jbGVhcigpOwog
ICAgICAgICBXaWRnZXRUb1BhcmVudE1hcDo6aXRlcmF0b3IgZW5kID0gbWFwLmVuZCgpOwogICAg
ICAgICBmb3IgKFdpZGdldFRvUGFyZW50TWFwOjppdGVyYXRvciBpdCA9IG1hcC5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIFdpZGdldCogY2hpbGQgPSBpdC0+Zmlyc3Qu
Z2V0KCk7CisgICAgICAgICAgICBXaWRnZXQqIGNoaWxkID0gaXQtPmtleS5nZXQoKTsKICAgICAg
ICAgICAgIFNjcm9sbFZpZXcqIGN1cnJlbnRQYXJlbnQgPSBjaGlsZC0+cGFyZW50KCk7Ci0gICAg
ICAgICAgICBGcmFtZVZpZXcqIG5ld1BhcmVudCA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICBG
cmFtZVZpZXcqIG5ld1BhcmVudCA9IGl0LT52YWx1ZTsKICAgICAgICAgICAgIGlmIChuZXdQYXJl
bnQgIT0gY3VycmVudFBhcmVudCkgewogICAgICAgICAgICAgICAgIGlmIChjdXJyZW50UGFyZW50
KQogICAgICAgICAgICAgICAgICAgICBjdXJyZW50UGFyZW50LT5yZW1vdmVDaGlsZChjaGlsZCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAKaW5kZXggNDMxM2Zh
NzM1YTE2YWM2OWI5MTVjMTJlMGEzM2UyZWE1OWE2NDQyZC4uMmMxODJlMWQ3ZmE4ZWVhMzY3NmJl
YmJkODFiZTExYjVjMzRiMzZhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1Jvb3RJbmxpbmVCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5s
aW5lQm94LmNwcApAQCAtNzU1LDggKzc1NSw4IEBAIHZvaWQgUm9vdElubGluZUJveDo6YXNjZW50
QW5kRGVzY2VudEZvckJveChJbmxpbmVCb3gqIGJveCwgR2x5cGhPdmVyZmxvd0FuZEZhbGxiCiAg
ICAgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdyA9IDA7CiAgICAgaWYgKGJveC0+aXNUZXh0
KCkpIHsKICAgICAgICAgR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXA6Oml0ZXJhdG9y
IGl0ID0gdGV4dEJveERhdGFNYXAuZmluZCh0b0lubGluZVRleHRCb3goYm94KSk7Ci0gICAgICAg
IHVzZWRGb250cyA9IGl0ID09IHRleHRCb3hEYXRhTWFwLmVuZCgpID8gMCA6ICZpdC0+c2Vjb25k
LmZpcnN0OwotICAgICAgICBnbHlwaE92ZXJmbG93ID0gaXQgPT0gdGV4dEJveERhdGFNYXAuZW5k
KCkgPyAwIDogJml0LT5zZWNvbmQuc2Vjb25kOworICAgICAgICB1c2VkRm9udHMgPSBpdCA9PSB0
ZXh0Qm94RGF0YU1hcC5lbmQoKSA/IDAgOiAmaXQtPnZhbHVlLmZpcnN0OworICAgICAgICBnbHlw
aE92ZXJmbG93ID0gaXQgPT0gdGV4dEJveERhdGFNYXAuZW5kKCkgPyAwIDogJml0LT52YWx1ZS5z
ZWNvbmQ7CiAgICAgfQogICAgICAgICAKICAgICBib29sIGluY2x1ZGVMZWFkaW5nID0gaW5jbHVk
ZUxlYWRpbmdGb3JCb3goYm94KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9WZXJ0aWNhbFBvc2l0aW9uQ2FjaGUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9WZXJ0
aWNhbFBvc2l0aW9uQ2FjaGUuaAppbmRleCBiYjM5ODc3NzIxZGE3MDVjMzdiZDNiODgxOTAyNGNk
MjdlMzZlNWNlLi5iN2NkN2UwODVlN2Y5YmVkYjUyOGY2MmRlZWY1N2E3YmI4YWE1YmUxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVmVydGljYWxQb3NpdGlvbkNhY2hlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1ZlcnRpY2FsUG9zaXRpb25DYWNoZS5oCkBA
IC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKICAgICAgICAgY29uc3QgSGFzaE1hcDxSZW5kZXJPYmpl
Y3QqLCBpbnQ+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1hcFRvQ2hlY2suZmluZChyZW5kZXJlcik7
CiAgICAgICAgIGlmIChpdCA9PSBtYXBUb0NoZWNrLmVuZCgpKQogICAgICAgICAgICAgcmV0dXJu
IFBvc2l0aW9uVW5kZWZpbmVkOwotICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICAgICAg
cmV0dXJuIGl0LT52YWx1ZTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBzZXQoUmVuZGVyT2JqZWN0
KiByZW5kZXJlciwgRm9udEJhc2VsaW5lIGJhc2VsaW5lVHlwZSwgaW50IHBvc2l0aW9uKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1dyYXBTaGFwZUluZm8uY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1dyYXBTaGFwZUluZm8uY3BwCmluZGV4IDE1NDcwNjZiMjlk
ZDRhNzNkOThmYWIzMzE2YzZkMDIzZTg2ZTA1MTAuLmFiZDM1NWViNDE5MDI1OWYwNmJhYjc5Zjll
YzEwYWQzN2E5ZjI3YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9XcmFw
U2hhcGVJbmZvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvV3JhcFNoYXBlSW5m
by5jcHAKQEAgLTYwLDcgKzYwLDcgQEAgV3JhcFNoYXBlSW5mbzo6fldyYXBTaGFwZUluZm8oKQog
V3JhcFNoYXBlSW5mbyogV3JhcFNoYXBlSW5mbzo6ZW5zdXJlV3JhcFNoYXBlSW5mb0ZvclJlbmRl
ckJsb2NrKFJlbmRlckJsb2NrKiBibG9jaykKIHsKICAgICBXcmFwU2hhcGVJbmZvTWFwOjpBZGRS
ZXN1bHQgcmVzdWx0ID0gd3JhcFNoYXBlSW5mb01hcCgpLmFkZChibG9jaywgY3JlYXRlKGJsb2Nr
KSk7Ci0gICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLmdldCgpOworICAgIHJldHVy
biByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpOwogfQogCiBXcmFwU2hhcGVJbmZvKiBXcmFw
U2hhcGVJbmZvOjp3cmFwU2hhcGVJbmZvRm9yUmVuZGVyQmxvY2soY29uc3QgUmVuZGVyQmxvY2sq
IGJsb2NrKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdJbmxpbmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
SW5saW5lVGV4dC5jcHAKaW5kZXggNDU0ZjdhYTZkMDdiNmJkMzEyMzIzNmJlZmNhNDk5ZWNmZTVh
MDdhMC4uMjM3MWQxYWJmOWM5NmJhNGE0NjI4YjkzY2E0OTQyYWY3YTA3Yjk1ZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3Bw
CkBAIC0xNTgsNyArMTU4LDcgQEAgYm9vbCBSZW5kZXJTVkdJbmxpbmVUZXh0OjpjaGFyYWN0ZXJT
dGFydHNOZXdUZXh0Q2h1bmsoaW50IHBvc2l0aW9uKSBjb25zdAogICAgIGlmIChpdCA9PSBtX2xh
eW91dEF0dHJpYnV0ZXMuY2hhcmFjdGVyRGF0YU1hcCgpLmVuZCgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICByZXR1cm4gaXQtPnNlY29uZC54ICE9IFNWR1RleHRMYXlvdXRBdHRyaWJ1
dGVzOjplbXB0eVZhbHVlKCkgfHwgaXQtPnNlY29uZC55ICE9IFNWR1RleHRMYXlvdXRBdHRyaWJ1
dGVzOjplbXB0eVZhbHVlKCk7CisgICAgcmV0dXJuIGl0LT52YWx1ZS54ICE9IFNWR1RleHRMYXlv
dXRBdHRyaWJ1dGVzOjplbXB0eVZhbHVlKCkgfHwgaXQtPnZhbHVlLnkgIT0gU1ZHVGV4dExheW91
dEF0dHJpYnV0ZXM6OmVtcHR5VmFsdWUoKTsKIH0KIAogVmlzaWJsZVBvc2l0aW9uIFJlbmRlclNW
R0lubGluZVRleHQ6OnBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50KQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlRmlsdGVyLmNwcAppbmRleCBlZTZhNDlkYjg4YTlmZDZjNzcwNWZhMThiNmVlY2E4ODE2ZTFh
MmViLi4zODMyYjJiMDFlMzA1MGE1Zjg0M2M2NWYxY2RkY2IwZWMxNTNhOTY1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmls
dGVyLmNwcApAQCAtMzM4LDcgKzMzOCw3IEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6
OnByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQoUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvCiAgICAg
U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKiBwcmltaXR2ZSA9IHN0YXRpY19j
YXN0PFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyo+KG9iamVjdC0+bm9kZSgp
KTsKIAogICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgRmlsdGVyRGF0YSog
ZmlsdGVyRGF0YSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIEZpbHRlckRhdGEqIGZpbHRlckRhdGEg
PSBpdC0+dmFsdWU7CiAgICAgICAgIGlmICghZmlsdGVyRGF0YS0+YnVpbGRlZCkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogCkBAIC0zNTMsNyArMzUzLDcgQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlcjo6cHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZChSZW5kZXJPYmplY3QqIG9iamVjdCwg
Y28KICAgICAgICAgYnVpbGRlci0+Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKGVmZmVjdCk7CiAKICAg
ICAgICAgLy8gUmVwYWludCB0aGUgaW1hZ2Ugb24gdGhlIHNjcmVlbi4KLSAgICAgICAgbWFya0Ns
aWVudEZvckludmFsaWRhdGlvbihpdC0+Zmlyc3QsIFJlcGFpbnRJbnZhbGlkYXRpb24pOworICAg
ICAgICBtYXJrQ2xpZW50Rm9ySW52YWxpZGF0aW9uKGl0LT5rZXksIFJlcGFpbnRJbnZhbGlkYXRp
b24pOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAKaW5kZXggNThlMDA3OWIyMmNiMmM1
YzE3ZDhmMmQ0ZDczY2JiYTIxMGFhOWE1ZS4uMzBjZTFiOGNiNGY5NzhjMDBkY2JkYTE3ZGZiNTU3
MjNjZmM1ODA4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwCkBAIC0xNDAsNyArMTQwLDcgQEAgYm9v
bCBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50OjphcHBseVJlc291cmNlKFJlbmRlck9iamVjdCog
b2JqZWN0LCBSZW5kZXJTdHlsZSoKICAgICBpZiAoZ3JhZGllbnRVbml0cygpID09IFNWR1VuaXRU
eXBlczo6U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCAmJiBvYmplY3RCb3VuZGluZ0Jv
eC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIE93blB0cjxHcmFkaWVu
dERhdGE+JiBncmFkaWVudERhdGEgPSBtX2dyYWRpZW50TWFwLmFkZChvYmplY3QsIG51bGxwdHIp
Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgT3duUHRyPEdyYWRpZW50RGF0YT4mIGdyYWRpZW50RGF0
YSA9IG1fZ3JhZGllbnRNYXAuYWRkKG9iamVjdCwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwog
ICAgIGlmICghZ3JhZGllbnREYXRhKQogICAgICAgICBncmFkaWVudERhdGEgPSBhZG9wdFB0cihu
ZXcgR3JhZGllbnREYXRhKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwCmluZGV4IGI0YWY5OTkxODU1MmEx
NTQ4NTJiYjJhNGI0N2IwMzBlZGE2YTUzMTYuLjNhMTg4MmFjZjgyMTcyMjg2YjIzYmI1NDJiZTQw
NjZhM2JhY2NjYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAKQEAgLTg0LDcgKzg0LDcgQEAgYm9vbCBS
ZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46OmFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiBvYmpl
Y3QsIFJlbmRlclN0eWxlKgogICAgIGlmIChtX2F0dHJpYnV0ZXMucGF0dGVyblVuaXRzKCkgPT0g
U1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YICYmIG9iamVjdEJv
dW5kaW5nQm94LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgT3duUHRy
PFBhdHRlcm5EYXRhPiYgcGF0dGVybkRhdGEgPSBtX3BhdHRlcm5NYXAuYWRkKG9iamVjdCwgbnVs
bHB0cikuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBPd25QdHI8UGF0dGVybkRhdGE+JiBwYXR0ZXJu
RGF0YSA9IG1fcGF0dGVybk1hcC5hZGQob2JqZWN0LCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7
CiAgICAgaWYgKCFwYXR0ZXJuRGF0YSkKICAgICAgICAgcGF0dGVybkRhdGEgPSBhZG9wdFB0cihu
ZXcgUGF0dGVybkRhdGEpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR1Jlc291cmNlc0NhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHUmVzb3VyY2VzQ2FjaGUuY3BwCmluZGV4IDI5N2MwN2I2YWQ0MDlhMjdlNjM1ODU2MDAwYzlh
ZDRiOTA1YjQzNTQuLjhiNDhjZjUzZTc5OWEwYjdkZTJiNTRhNGM3MTUyZTA5Mjc1MzljMDIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzQ2FjaGUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzQ2FjaGUu
Y3BwCkBAIC0xOTgsMTEgKzE5OCwxMSBAQCB2b2lkIFNWR1Jlc291cmNlc0NhY2hlOjpyZXNvdXJj
ZURlc3Ryb3llZChSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciogcmVzb3VyY2UpCiAKICAgICBI
YXNoTWFwPGNvbnN0IFJlbmRlck9iamVjdCosIFNWR1Jlc291cmNlcyo+OjppdGVyYXRvciBlbmQg
PSBjYWNoZS0+bV9jYWNoZS5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8Y29uc3QgUmVuZGVyT2Jq
ZWN0KiwgU1ZHUmVzb3VyY2VzKj46Oml0ZXJhdG9yIGl0ID0gY2FjaGUtPm1fY2FjaGUuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGl0LT5zZWNvbmQtPnJlc291cmNlRGVzdHJv
eWVkKHJlc291cmNlKTsKKyAgICAgICAgaXQtPnZhbHVlLT5yZXNvdXJjZURlc3Ryb3llZChyZXNv
dXJjZSk7CiAKICAgICAgICAgLy8gTWFyayB1c2VycyBvZiBkZXN0cm95ZWQgcmVzb3VyY2VzIGFz
IHBlbmRpbmcgcmVzb2x1dGlvbiBiYXNlZCBvbiB0aGUgaWQgb2YgdGhlIG9sZCByZXNvdXJjZS4K
ICAgICAgICAgRWxlbWVudCogcmVzb3VyY2VFbGVtZW50ID0gdG9FbGVtZW50KHJlc291cmNlLT5u
b2RlKCkpOwotICAgICAgICBTVkdTdHlsZWRFbGVtZW50KiBjbGllbnRFbGVtZW50ID0gdG9TVkdT
dHlsZWRFbGVtZW50KGl0LT5maXJzdC0+bm9kZSgpKTsKKyAgICAgICAgU1ZHU3R5bGVkRWxlbWVu
dCogY2xpZW50RWxlbWVudCA9IHRvU1ZHU3R5bGVkRWxlbWVudChpdC0+a2V5LT5ub2RlKCkpOwog
ICAgICAgICBTVkdEb2N1bWVudEV4dGVuc2lvbnMqIGV4dGVuc2lvbnMgPSBjbGllbnRFbGVtZW50
LT5kb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCk7CiAKICAgICAgICAgZXh0ZW5zaW9u
cy0+YWRkUGVuZGluZ1Jlc291cmNlKHJlc291cmNlRWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShI
VE1MTmFtZXM6OmlkQXR0ciksIGNsaWVudEVsZW1lbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSb290SW5saW5lQm94LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHUm9vdElubGluZUJveC5jcHAKaW5kZXggMzRlOTNhMDJlZjc0MzJl
M2MyNmVmMjM2MGQxY2YzZmQ0MzdlNDE2ZS4uNTQ2ZmVjMjZjZTY5ODFhY2QxZmNkN2FiZTBhMGE5
ODM4YzcwYjQzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdS
b290SW5saW5lQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jv
b3RJbmxpbmVCb3guY3BwCkBAIC0yMjYsMTcgKzIyNiwxNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQg
c3dhcEl0ZW1zSW5MYXlvdXRBdHRyaWJ1dGVzKFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzKiBmaXJz
dEF0dAogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoZmlyc3RQcmVzZW50ICYmIGxhc3RQcmVz
ZW50KSB7Ci0gICAgICAgIHN0ZDo6c3dhcChpdEZpcnN0LT5zZWNvbmQsIGl0TGFzdC0+c2Vjb25k
KTsKKyAgICAgICAgc3RkOjpzd2FwKGl0Rmlyc3QtPnZhbHVlLCBpdExhc3QtPnZhbHVlKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChmaXJzdFByZXNlbnQgJiYgIWxhc3RQcmVz
ZW50KSB7Ci0gICAgICAgIGxhc3RBdHRyaWJ1dGVzLT5jaGFyYWN0ZXJEYXRhTWFwKCkuc2V0KGxh
c3RQb3NpdGlvbiArIDEsIGl0Rmlyc3QtPnNlY29uZCk7CisgICAgICAgIGxhc3RBdHRyaWJ1dGVz
LT5jaGFyYWN0ZXJEYXRhTWFwKCkuc2V0KGxhc3RQb3NpdGlvbiArIDEsIGl0Rmlyc3QtPnZhbHVl
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8vICFmaXJzdFByZXNlbnQgJiYgbGFz
dFByZXNlbnQKLSAgICBmaXJzdEF0dHJpYnV0ZXMtPmNoYXJhY3RlckRhdGFNYXAoKS5zZXQoZmly
c3RQb3NpdGlvbiArIDEsIGl0TGFzdC0+c2Vjb25kKTsKKyAgICBmaXJzdEF0dHJpYnV0ZXMtPmNo
YXJhY3RlckRhdGFNYXAoKS5zZXQoZmlyc3RQb3NpdGlvbiArIDEsIGl0TGFzdC0+dmFsdWUpOwog
fQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZmluZEZpcnN0QW5kTGFzdEF0dHJpYnV0ZXNJblZlY3Rv
cihWZWN0b3I8U1ZHVGV4dExheW91dEF0dHJpYnV0ZXMqPiYgYXR0cmlidXRlcywgUmVuZGVyU1ZH
SW5saW5lVGV4dCogZmlyc3RDb250ZXh0LCBSZW5kZXJTVkdJbmxpbmVUZXh0KiBsYXN0Q29udGV4
dCwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91
dEF0dHJpYnV0ZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5
b3V0QXR0cmlidXRlcy5jcHAKaW5kZXggYTkyNTk2Y2VlZWRiZTI1YWY3NzdkZjRhNGM4M2NkM2Vm
OTdiOWNlOC4uNjdmYTBmYTk4MmFkNjBiYTcyNjUxYTg0NTQ5NTgxZjdlYjUwY2QwYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRl
cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0
cmlidXRlcy5jcHAKQEAgLTYyLDggKzYyLDggQEAgdm9pZCBTVkdUZXh0TGF5b3V0QXR0cmlidXRl
czo6ZHVtcCgpIGNvbnN0CiAgICAgZnByaW50ZihzdGRlcnIsICJjb250ZXh0OiAlcFxuIiwgbV9j
b250ZXh0KTsKICAgICBjb25zdCBTVkdDaGFyYWN0ZXJEYXRhTWFwOjpjb25zdF9pdGVyYXRvciBl
bmQgPSBtX2NoYXJhY3RlckRhdGFNYXAuZW5kKCk7CiAgICAgZm9yIChTVkdDaGFyYWN0ZXJEYXRh
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fY2hhcmFjdGVyRGF0YU1hcC5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKLSAgICAgICAgY29uc3QgU1ZHQ2hhcmFjdGVyRGF0YSYgZGF0YSA9IGl0
LT5zZWNvbmQ7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiIC0tLT4gcG9zPSVpLCBkYXRhPXsi
LCBpdC0+Zmlyc3QpOworICAgICAgICBjb25zdCBTVkdDaGFyYWN0ZXJEYXRhJiBkYXRhID0gaXQt
PnZhbHVlOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAtLS0+IHBvcz0laSwgZGF0YT17Iiwg
aXQtPmtleSk7CiAgICAgICAgIGR1bXBTVkdDaGFyYWN0ZXJEYXRhTWFwVmFsdWUoIngiLCBkYXRh
LngpOwogICAgICAgICBkdW1wU1ZHQ2hhcmFjdGVyRGF0YU1hcFZhbHVlKCJ5IiwgZGF0YS55KTsK
ICAgICAgICAgZHVtcFNWR0NoYXJhY3RlckRhdGFNYXBWYWx1ZSgiZHgiLCBkYXRhLmR4KTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEF0dHJp
YnV0ZXNCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExh
eW91dEF0dHJpYnV0ZXNCdWlsZGVyLmNwcAppbmRleCBiZTJhMTJmZTk2MGI3OTI0ODMxM2RmMzY5
OTE0NTAzZmVlOWEyOTFiLi5iOTY5YTUzMTllODBhYzc4NzJhNWU0MWQ4ZGU3NzQzMDQ4YmRjNDNi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRB
dHRyaWJ1dGVzQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXIuY3BwCkBAIC0xNDksNyArMTQ5LDcgQEAgdm9p
ZCBTVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXI6OmJ1aWxkQ2hhcmFjdGVyRGF0YU1hcChS
ZW5kZXJTVkdUZXh0KiB0ZXh0Um8KICAgICAgICAgZGF0YS55ID0gMDsKICAgICAgICAgbV9jaGFy
YWN0ZXJEYXRhTWFwLnNldCgxLCBkYXRhKTsKICAgICB9IGVsc2UgewotICAgICAgICBTVkdDaGFy
YWN0ZXJEYXRhJiBkYXRhID0gaXQtPnNlY29uZDsKKyAgICAgICAgU1ZHQ2hhcmFjdGVyRGF0YSYg
ZGF0YSA9IGl0LT52YWx1ZTsKICAgICAgICAgaWYgKGRhdGEueCA9PSBTVkdUZXh0TGF5b3V0QXR0
cmlidXRlczo6ZW1wdHlWYWx1ZSgpKQogICAgICAgICAgICAgZGF0YS54ID0gMDsKICAgICAgICAg
aWYgKGRhdGEueSA9PSBTVkdUZXh0TGF5b3V0QXR0cmlidXRlczo6ZW1wdHlWYWx1ZSgpKQpAQCAt
MjEzLDcgKzIxMyw3IEBAIHZvaWQgU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyOjpmaWxs
Q2hhcmFjdGVyRGF0YU1hcChjb25zdCBUZXh0UG9zaXRpb24mIHBvCiAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIHVwZGF0ZUNoYXJhY3RlckRhdGEoaSwgbGFzdFJv
dGF0aW9uLCBpdC0+c2Vjb25kLCBsZW5ndGhDb250ZXh0LCB4TGlzdFB0ciwgeUxpc3RQdHIsIGR4
TGlzdFB0ciwgZHlMaXN0UHRyLCByb3RhdGVMaXN0UHRyKTsKKyAgICAgICAgdXBkYXRlQ2hhcmFj
dGVyRGF0YShpLCBsYXN0Um90YXRpb24sIGl0LT52YWx1ZSwgbGVuZ3RoQ29udGV4dCwgeExpc3RQ
dHIsIHlMaXN0UHRyLCBkeExpc3RQdHIsIGR5TGlzdFB0ciwgcm90YXRlTGlzdFB0cik7CiAgICAg
fQogCiAgICAgLy8gVGhlIGxhc3Qgcm90YXRpb24gdmFsdWUgYWx3YXlzIHNwYW5zIHRoZSB3aG9s
ZSBzY29wZS4KQEAgLTIyOSw3ICsyMjksNyBAQCB2b2lkIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVz
QnVpbGRlcjo6ZmlsbENoYXJhY3RlckRhdGFNYXAoY29uc3QgVGV4dFBvc2l0aW9uJiBwbwogICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBpdC0+c2Vjb25kLnJvdGF0
ZSA9IGxhc3RSb3RhdGlvbjsKKyAgICAgICAgaXQtPnZhbHVlLnJvdGF0ZSA9IGxhc3RSb3RhdGlv
bjsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHVGV4dExheW91dEVuZ2luZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1RleHRMYXlvdXRFbmdpbmUuY3BwCmluZGV4IDVjNTQ5YjIxYzg3NTIwODQ3MjQ2YWYyNTRmZDA1
OWYyZTNiOWI1ZTguLmJhMmI3NjM5ZDNmOTViNzM4OTQ3NWZhMmRjMDBjOWE2YWE4NWIzMTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2lu
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5n
aW5lLmNwcApAQCAtNDc1LDcgKzQ3NSw3IEBAIHZvaWQgU1ZHVGV4dExheW91dEVuZ2luZTo6bGF5
b3V0VGV4dE9uTGluZU9yUGF0aChTVkdJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94LCBSZW5kCiAgICAg
ICAgIFNWR0NoYXJhY3RlckRhdGEgZGF0YTsKICAgICAgICAgU1ZHQ2hhcmFjdGVyRGF0YU1hcDo6
aXRlcmF0b3IgaXQgPSBjaGFyYWN0ZXJEYXRhTWFwLmZpbmQobV9sb2dpY2FsQ2hhcmFjdGVyT2Zm
c2V0ICsgMSk7CiAgICAgICAgIGlmIChpdCAhPSBjaGFyYWN0ZXJEYXRhTWFwLmVuZCgpKQotICAg
ICAgICAgICAgZGF0YSA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICBkYXRhID0gaXQtPnZhbHVl
OwogCiAgICAgICAgIGZsb2F0IHggPSBkYXRhLng7CiAgICAgICAgIGZsb2F0IHkgPSBkYXRhLnk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNz
QnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNz
QnVpbGRlci5jcHAKaW5kZXggNWFjODVjYmJlODQ3NzEwZmQ1YWUxZTIyZmYzZjMzNjIxMTZhODVj
Mi4uMDVkODA1Zjc3ZjJmOWQyOTAwMjYxYjBiNjBjYTY4NmUxZWEwY2JhMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljc0J1aWxkZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3NCdWlsZGVyLmNw
cApAQCAtMTYxLDcgKzE2MSw3IEBAIHZvaWQgU1ZHVGV4dE1ldHJpY3NCdWlsZGVyOjptZWFzdXJl
VGV4dFJlbmRlcmVyKFJlbmRlclNWR0lubGluZVRleHQqIHRleHQsIE1lYXN1CiAgICAgICAgICAg
ICBpZiAoZGF0YS0+YWxsQ2hhcmFjdGVyc01hcCkgewogICAgICAgICAgICAgICAgIGNvbnN0IFNW
R0NoYXJhY3RlckRhdGFNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZGF0YS0+YWxsQ2hhcmFjdGVy
c01hcC0+ZmluZChkYXRhLT52YWx1ZUxpc3RQb3NpdGlvbiArIG1fdGV4dFBvc2l0aW9uIC0gZGF0
YS0+c2tpcHBlZENoYXJhY3RlcnMgLSBzdXJyb2dhdGVQYWlyQ2hhcmFjdGVycyArIDEpOwogICAg
ICAgICAgICAgICAgIGlmIChpdCAhPSBkYXRhLT5hbGxDaGFyYWN0ZXJzTWFwLT5lbmQoKSkKLSAg
ICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcy0+Y2hhcmFjdGVyRGF0YU1hcCgpLnNldChtX3Rl
eHRQb3NpdGlvbiArIDEsIGl0LT5zZWNvbmQpOworICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1
dGVzLT5jaGFyYWN0ZXJEYXRhTWFwKCkuc2V0KG1fdGV4dFBvc2l0aW9uICsgMSwgaXQtPnZhbHVl
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHRleHRNZXRyaWNzVmFsdWVzLT5hcHBlbmQo
bV9jdXJyZW50TWV0cmljcyk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3Rv
cmFnZUFyZWFTeW5jLmNwcAppbmRleCA0NDIwOWM2ZjU5ZDBkMmExZDdmMzNiMmYxMTI5YTg3ZTkw
NDVlN2NkLi5mY2IxMjZhMWQ1NmQ1YWZjYzlhYmViYTYyMWZiMDc3OGUzMmI3ZmUyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCkBAIC0xODgsNyArMTg4LDcg
QEAgdm9pZCBTdG9yYWdlQXJlYVN5bmM6OnN5bmNUaW1lckZpcmVkKFRpbWVyPFN0b3JhZ2VBcmVh
U3luYz4qKQogICAgICAgICAgICAgICAgIHBhcnRpYWxTeW5jID0gdHJ1ZTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1faXRlbXNQZW5kaW5nU3lu
Yy5zZXQoY2hhbmdlZF9pdC0+Zmlyc3QuaXNvbGF0ZWRDb3B5KCksIGNoYW5nZWRfaXQtPnNlY29u
ZC5pc29sYXRlZENvcHkoKSk7CisgICAgICAgICAgICBtX2l0ZW1zUGVuZGluZ1N5bmMuc2V0KGNo
YW5nZWRfaXQtPmtleS5pc29sYXRlZENvcHkoKSwgY2hhbmdlZF9pdC0+dmFsdWUuaXNvbGF0ZWRD
b3B5KCkpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKHBhcnRpYWxTeW5jKSB7CkBAIC0xOTgs
NyArMTk4LDcgQEAgdm9pZCBTdG9yYWdlQXJlYVN5bmM6OnN5bmNUaW1lckZpcmVkKFRpbWVyPFN0
b3JhZ2VBcmVhU3luYz4qKQogICAgICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46Oml0
ZXJhdG9yIHBlbmRpbmdfaXQgPSBtX2l0ZW1zUGVuZGluZ1N5bmMuYmVnaW4oKTsKICAgICAgICAg
ICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+OjppdGVyYXRvciBwZW5kaW5nX2VuZCA9IG1faXRl
bXNQZW5kaW5nU3luYy5lbmQoKTsKICAgICAgICAgICAgIGZvciAoOyBwZW5kaW5nX2l0ICE9IHBl
bmRpbmdfZW5kOyArK3BlbmRpbmdfaXQpCi0gICAgICAgICAgICAgICAgbV9jaGFuZ2VkSXRlbXMu
cmVtb3ZlKHBlbmRpbmdfaXQtPmZpcnN0KTsKKyAgICAgICAgICAgICAgICBtX2NoYW5nZWRJdGVt
cy5yZW1vdmUocGVuZGluZ19pdC0+a2V5KTsKICAgICAgICAgfQogCiAgICAgICAgIGlmICghbV9z
eW5jU2NoZWR1bGVkKSB7CkBAIC0zNDUsNyArMzQ1LDcgQEAgdm9pZCBTdG9yYWdlQXJlYVN5bmM6
OnBlcmZvcm1JbXBvcnQoKQogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+OjppdGVyYXRvciBl
bmQgPSBpdGVtTWFwLmVuZCgpOwogCiAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAg
ICAgbV9zdG9yYWdlQXJlYS0+aW1wb3J0SXRlbShpdC0+Zmlyc3QsIGl0LT5zZWNvbmQpOworICAg
ICAgICBtX3N0b3JhZ2VBcmVhLT5pbXBvcnRJdGVtKGl0LT5rZXksIGl0LT52YWx1ZSk7CiAKICAg
ICBtYXJrSW1wb3J0ZWQoKTsKIH0KQEAgLTQzOSwxMyArNDM5LDEzIEBAIHZvaWQgU3RvcmFnZUFy
ZWFTeW5jOjpzeW5jKGJvb2wgY2xlYXJJdGVtcywgY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmlu
Zz4mIGl0ZW1zCiAgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKICAgICBmb3IgKEhhc2hNYXA8U3Ry
aW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGl0ZW1zLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewogICAgICAgICAvLyBCYXNlZCBvbiB0aGUgbnVsbC1uZXNzIG9mIHRoZSBzZWNv
bmQgYXJndW1lbnQsIGRlY2lkZSB3aGV0aGVyIHRoaXMgaXMgYW4gaW5zZXJ0IG9yIGEgZGVsZXRl
LgotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQmIHF1ZXJ5ID0gaXQtPnNlY29uZC5pc051bGwoKSA/
IHJlbW92ZSA6IGluc2VydDsKKyAgICAgICAgU1FMaXRlU3RhdGVtZW50JiBxdWVyeSA9IGl0LT52
YWx1ZS5pc051bGwoKSA/IHJlbW92ZSA6IGluc2VydDsKIAotICAgICAgICBxdWVyeS5iaW5kVGV4
dCgxLCBpdC0+Zmlyc3QpOworICAgICAgICBxdWVyeS5iaW5kVGV4dCgxLCBpdC0+a2V5KTsKIAog
ICAgICAgICAvLyBJZiB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIG5vbi1udWxsLCB3ZSdyZSBkb2lu
ZyBhbiBpbnNlcnQsIHNvIGJpbmQgaXQgYXMgdGhlIHZhbHVlLgotICAgICAgICBpZiAoIWl0LT5z
ZWNvbmQuaXNOdWxsKCkpCi0gICAgICAgICAgICBxdWVyeS5iaW5kQmxvYigyLCBpdC0+c2Vjb25k
KTsKKyAgICAgICAgaWYgKCFpdC0+dmFsdWUuaXNOdWxsKCkpCisgICAgICAgICAgICBxdWVyeS5i
aW5kQmxvYigyLCBpdC0+dmFsdWUpOwogCiAgICAgICAgIGludCByZXN1bHQgPSBxdWVyeS5zdGVw
KCk7CiAgICAgICAgIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0RG9uZSkgewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvU3RvcmFnZU1hcC5jcHAKaW5kZXggOGU0MmQyZjE3NmRkM2IxMTEyYTAxYTUxZDhkYjYy
ZjRiMzhiYmEzNS4uNDBlMWEzOGYxY2E0YTc5ZjBjZTI0NzAxMTUzNDdhZGI5MjlmNDk4MyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTWFwLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VNYXAuY3BwCkBAIC04OSw3ICs4OSw3IEBAIFN0cmlu
ZyBTdG9yYWdlTWFwOjprZXkodW5zaWduZWQgaW5kZXgpCiAgICAgICAgIHJldHVybiBTdHJpbmco
KTsKIAogICAgIHNldEl0ZXJhdG9yVG9JbmRleChpbmRleCk7Ci0gICAgcmV0dXJuIG1faXRlcmF0
b3ItPmZpcnN0OworICAgIHJldHVybiBtX2l0ZXJhdG9yLT5rZXk7CiB9CiAKIFN0cmluZyBTdG9y
YWdlTWFwOjpnZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5KSBjb25zdApAQCAtMTMzLDcgKzEzMyw3
IEBAIFBhc3NSZWZQdHI8U3RvcmFnZU1hcD4gU3RvcmFnZU1hcDo6c2V0SXRlbShjb25zdCBTdHJp
bmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1CiAKICAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5n
Pjo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IG1fbWFwLmFkZChrZXksIHZhbHVlKTsKICAgICBpZiAo
IWFkZFJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29u
ZCA9IHZhbHVlOworICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gdmFsdWU7CiAK
ICAgICBpbnZhbGlkYXRlSXRlcmF0b3IoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcAppbmRleCA5ZDFhYzUxN2EwZTJlN2IzZjI2YjgyM2Iy
ODlhNTkzOTU4YmRjOGEwLi40NTAxYjExZmJjMTVjZjQyMzlkMDdmYzM3NDc2NDE2ZGJiNzVlZmNm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBs
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNw
cApAQCAtNTUsNyArNTUsNyBAQCBQYXNzUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IFN0b3JhZ2VO
YW1lc3BhY2VJbXBsOjpsb2NhbFN0b3JhZ2VOYW1lc3BhY2UoY29uc3QgUwogICAgICAgICByZXR1
cm4gc3RvcmFnZU5hbWVzcGFjZS5yZWxlYXNlKCk7CiAgICAgfQogCi0gICAgcmV0dXJuIGl0LT5z
ZWNvbmQ7CisgICAgcmV0dXJuIGl0LT52YWx1ZTsKIH0KIAogUGFzc1JlZlB0cjxTdG9yYWdlTmFt
ZXNwYWNlPiBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6c2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UodW5z
aWduZWQgcXVvdGEpCkBAIC05Nyw3ICs5Nyw3IEBAIFBhc3NSZWZQdHI8U3RvcmFnZU5hbWVzcGFj
ZT4gU3RvcmFnZU5hbWVzcGFjZUltcGw6OmNvcHkoKQogCiAgICAgU3RvcmFnZUFyZWFNYXA6Oml0
ZXJhdG9yIGVuZCA9IG1fc3RvcmFnZUFyZWFNYXAuZW5kKCk7CiAgICAgZm9yIChTdG9yYWdlQXJl
YU1hcDo6aXRlcmF0b3IgaSA9IG1fc3RvcmFnZUFyZWFNYXAuYmVnaW4oKTsgaSAhPSBlbmQ7ICsr
aSkKLSAgICAgICAgbmV3TmFtZXNwYWNlLT5tX3N0b3JhZ2VBcmVhTWFwLnNldChpLT5maXJzdCwg
aS0+c2Vjb25kLT5jb3B5KCkpOworICAgICAgICBuZXdOYW1lc3BhY2UtPm1fc3RvcmFnZUFyZWFN
YXAuc2V0KGktPmtleSwgaS0+dmFsdWUtPmNvcHkoKSk7CiAgICAgcmV0dXJuIG5ld05hbWVzcGFj
ZS5yZWxlYXNlKCk7CiB9CiAKQEAgLTEzMSw3ICsxMzEsNyBAQCB2b2lkIFN0b3JhZ2VOYW1lc3Bh
Y2VJbXBsOjpjbG9zZSgpCiAKICAgICBTdG9yYWdlQXJlYU1hcDo6aXRlcmF0b3IgZW5kID0gbV9z
dG9yYWdlQXJlYU1hcC5lbmQoKTsKICAgICBmb3IgKFN0b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBp
dCA9IG1fc3RvcmFnZUFyZWFNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBp
dC0+c2Vjb25kLT5jbG9zZSgpOworICAgICAgICBpdC0+dmFsdWUtPmNsb3NlKCk7CiAKICAgICBp
ZiAobV9zeW5jTWFuYWdlcikKICAgICAgICAgbV9zeW5jTWFuYWdlci0+Y2xvc2UoKTsKQEAgLTE1
NCw3ICsxNTQsNyBAQCB2b2lkIFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpjbGVhckFsbE9yaWdpbnNG
b3JEZWxldGlvbigpCiAKICAgICBTdG9yYWdlQXJlYU1hcDo6aXRlcmF0b3IgZW5kID0gbV9zdG9y
YWdlQXJlYU1hcC5lbmQoKTsKICAgICBmb3IgKFN0b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBpdCA9
IG1fc3RvcmFnZUFyZWFNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+
c2Vjb25kLT5jbGVhckZvck9yaWdpbkRlbGV0aW9uKCk7CisgICAgICAgIGl0LT52YWx1ZS0+Y2xl
YXJGb3JPcmlnaW5EZWxldGlvbigpOwogfQogICAgIAogdm9pZCBTdG9yYWdlTmFtZXNwYWNlSW1w
bDo6c3luYygpCkBAIC0xNjIsNyArMTYyLDcgQEAgdm9pZCBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6
c3luYygpCiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBTdG9yYWdlQXJlYU1hcDo6
aXRlcmF0b3IgZW5kID0gbV9zdG9yYWdlQXJlYU1hcC5lbmQoKTsKICAgICBmb3IgKFN0b3JhZ2VB
cmVhTWFwOjppdGVyYXRvciBpdCA9IG1fc3RvcmFnZUFyZWFNYXAuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5zeW5jKCk7CisgICAgICAgIGl0LT52YWx1ZS0+
c3luYygpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwCmluZGV4IGNhYzFhZWEwN2UwOTBkNzRlMjVlYTM0
NjAwOWYyNWM3ZDQ2ODBlMzkuLmNjYjYzMjNlNDdkYTg0MWE3NjFjYjkzYTFlYzhlYWQxNTc1MDk2
ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwCkBA
IC0xNTYsNyArMTU2LDcgQEAgdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlbW92ZUFuaW1h
dGlvbkVsZW1lbnRGcm9tVGFyZ2V0KFNWR1NNSUxFbGVtZW50KiBhbmkKICAgICBIYXNoTWFwPFNW
R0VsZW1lbnQqLCBIYXNoU2V0PFNWR1NNSUxFbGVtZW50Kj4qID46Oml0ZXJhdG9yIGl0ID0gbV9h
bmltYXRlZEVsZW1lbnRzLmZpbmQodGFyZ2V0RWxlbWVudCk7CiAgICAgQVNTRVJUKGl0ICE9IG1f
YW5pbWF0ZWRFbGVtZW50cy5lbmQoKSk7CiAgICAgCi0gICAgSGFzaFNldDxTVkdTTUlMRWxlbWVu
dCo+KiBhbmltYXRpb25FbGVtZW50c0ZvclRhcmdldCA9IGl0LT5zZWNvbmQ7CisgICAgSGFzaFNl
dDxTVkdTTUlMRWxlbWVudCo+KiBhbmltYXRpb25FbGVtZW50c0ZvclRhcmdldCA9IGl0LT52YWx1
ZTsKICAgICBBU1NFUlQoIWFuaW1hdGlvbkVsZW1lbnRzRm9yVGFyZ2V0LT5pc0VtcHR5KCkpOwog
CiAgICAgYW5pbWF0aW9uRWxlbWVudHNGb3JUYXJnZXQtPnJlbW92ZShhbmltYXRpb25FbGVtZW50
KTsKQEAgLTE3Myw3ICsxNzMsNyBAQCB2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3Zl
QWxsQW5pbWF0aW9uRWxlbWVudHNGcm9tVGFyZ2V0KFNWR0VsZW1lbnQqIHRhcgogICAgIGlmIChp
dCA9PSBtX2FuaW1hdGVkRWxlbWVudHMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEhh
c2hTZXQ8U1ZHU01JTEVsZW1lbnQqPiogYW5pbWF0aW9uRWxlbWVudHNGb3JUYXJnZXQgPSBpdC0+
c2Vjb25kOworICAgIEhhc2hTZXQ8U1ZHU01JTEVsZW1lbnQqPiogYW5pbWF0aW9uRWxlbWVudHNG
b3JUYXJnZXQgPSBpdC0+dmFsdWU7CiAgICAgVmVjdG9yPFNWR1NNSUxFbGVtZW50Kj4gdG9CZVJl
c2V0OwogCiAgICAgSGFzaFNldDxTVkdTTUlMRWxlbWVudCo+OjppdGVyYXRvciBlbmQgPSBhbmlt
YXRpb25FbGVtZW50c0ZvclRhcmdldC0+ZW5kKCk7CkBAIC0yMTksOSArMjE5LDkgQEAgdm9pZCBT
VkdEb2N1bWVudEV4dGVuc2lvbnM6OmFkZFBlbmRpbmdSZXNvdXJjZShjb25zdCBBdG9taWNTdHJp
bmcmIGlkLCBTVkdTdHlsZWQKIAogICAgIC8vIFRoZSBIYXNoTWFwIGFkZCBmdW5jdGlvbiBsZWF2
ZXMgdGhlIG1hcCBhbG9uZSBhbmQgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGVsZW1lbnQgaW4g
dGhlCiAgICAgLy8gbWFwIGlmIHRoZSBlbGVtZW50IGFscmVhZHkgZXhpc3RzLiBTbyB3ZSBhZGQg
d2l0aCBhIHZhbHVlIG9mIDAsIGFuZCBpdCBlaXRoZXIgZmluZHMgdGhlCi0gICAgLy8gZXhpc3Rp
bmcgZWxlbWVudCBvciBhZGRzIGEgbmV3IG9uZSBpbiBhIHNpbmdsZSBvcGVyYXRpb24uIFRoZSAi
Lml0ZXJhdG9yLT5zZWNvbmQiIGlkaW9tIGdldHMKKyAgICAvLyBleGlzdGluZyBlbGVtZW50IG9y
IGFkZHMgYSBuZXcgb25lIGluIGEgc2luZ2xlIG9wZXJhdGlvbi4gVGhlICIuaXRlcmF0b3ItPnZh
bHVlIiBpZGlvbSBnZXRzCiAgICAgLy8gdXMgdG8gdGhlIGl0ZXJhdG9yIGZyb20gYWRkJ3MgcmVz
dWx0LCBhbmQgdGhlbiB0byB0aGUgdmFsdWUgaW5zaWRlIHRoZSBoYXNoIHRhYmxlLgotICAgIFNW
R1BlbmRpbmdFbGVtZW50cyomIHNldCA9IG1fcGVuZGluZ1Jlc291cmNlcy5hZGQoaWQsIDApLml0
ZXJhdG9yLT5zZWNvbmQ7CisgICAgU1ZHUGVuZGluZ0VsZW1lbnRzKiYgc2V0ID0gbV9wZW5kaW5n
UmVzb3VyY2VzLmFkZChpZCwgMCkuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghc2V0KQogICAg
ICAgICBzZXQgPSBuZXcgU1ZHUGVuZGluZ0VsZW1lbnRzOwogICAgIHNldC0+YWRkKGVsZW1lbnQp
OwpAQCAtMjQ2LDcgKzI0Niw3IEBAIGJvb2wgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjppc0VsZW1l
bnRQZW5kaW5nUmVzb3VyY2VzKFNWR1N0eWxlZEVsZW1lbnQqIGVsZW1lbnQpCiAKICAgICBIYXNo
TWFwPEF0b21pY1N0cmluZywgU1ZHUGVuZGluZ0VsZW1lbnRzKj46OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IG1fcGVuZGluZ1Jlc291cmNlcy5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8QXRvbWljU3Ry
aW5nLCBTVkdQZW5kaW5nRWxlbWVudHMqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BlbmRpbmdS
ZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFNWR1BlbmRpbmdF
bGVtZW50cyogZWxlbWVudHMgPSBpdC0+c2Vjb25kOworICAgICAgICBTVkdQZW5kaW5nRWxlbWVu
dHMqIGVsZW1lbnRzID0gaXQtPnZhbHVlOwogICAgICAgICBBU1NFUlQoZWxlbWVudHMpOwogCiAg
ICAgICAgIGlmIChlbGVtZW50cy0+Y29udGFpbnMoZWxlbWVudCkpCkBAIC0yNzQsMTMgKzI3NCwx
MyBAQCB2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlRWxlbWVudEZyb21QZW5kaW5n
UmVzb3VyY2VzKFNWR1N0eWxlZEVsZW1lbnQqCiAgICAgICAgIFZlY3RvcjxBdG9taWNTdHJpbmc+
IHRvQmVSZW1vdmVkOwogICAgICAgICBIYXNoTWFwPEF0b21pY1N0cmluZywgU1ZHUGVuZGluZ0Vs
ZW1lbnRzKj46Oml0ZXJhdG9yIGVuZCA9IG1fcGVuZGluZ1Jlc291cmNlcy5lbmQoKTsKICAgICAg
ICAgZm9yIChIYXNoTWFwPEF0b21pY1N0cmluZywgU1ZHUGVuZGluZ0VsZW1lbnRzKj46Oml0ZXJh
dG9yIGl0ID0gbV9wZW5kaW5nUmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewot
ICAgICAgICAgICAgU1ZHUGVuZGluZ0VsZW1lbnRzKiBlbGVtZW50cyA9IGl0LT5zZWNvbmQ7Cisg
ICAgICAgICAgICBTVkdQZW5kaW5nRWxlbWVudHMqIGVsZW1lbnRzID0gaXQtPnZhbHVlOwogICAg
ICAgICAgICAgQVNTRVJUKGVsZW1lbnRzKTsKICAgICAgICAgICAgIEFTU0VSVCghZWxlbWVudHMt
PmlzRW1wdHkoKSk7CiAKICAgICAgICAgICAgIGVsZW1lbnRzLT5yZW1vdmUoZWxlbWVudCk7CiAg
ICAgICAgICAgICBpZiAoZWxlbWVudHMtPmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICB0b0Jl
UmVtb3ZlZC5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgICAgICAgICB0b0JlUmVtb3ZlZC5h
cHBlbmQoaXQtPmtleSk7CiAgICAgICAgIH0KIAogICAgICAgICBlbGVtZW50LT5jbGVhckhhc1Bl
bmRpbmdSZXNvdXJjZXNJZlBvc3NpYmxlKCk7CkBAIC0yOTYsMTMgKzI5NiwxMyBAQCB2b2lkIFNW
R0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlRWxlbWVudEZyb21QZW5kaW5nUmVzb3VyY2VzKFNW
R1N0eWxlZEVsZW1lbnQqCiAgICAgICAgIFZlY3RvcjxBdG9taWNTdHJpbmc+IHRvQmVSZW1vdmVk
OwogICAgICAgICBIYXNoTWFwPEF0b21pY1N0cmluZywgU1ZHUGVuZGluZ0VsZW1lbnRzKj46Oml0
ZXJhdG9yIGVuZCA9IG1fcGVuZGluZ1Jlc291cmNlc0ZvclJlbW92YWwuZW5kKCk7CiAgICAgICAg
IGZvciAoSGFzaE1hcDxBdG9taWNTdHJpbmcsIFNWR1BlbmRpbmdFbGVtZW50cyo+OjppdGVyYXRv
ciBpdCA9IG1fcGVuZGluZ1Jlc291cmNlc0ZvclJlbW92YWwuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7Ci0gICAgICAgICAgICBTVkdQZW5kaW5nRWxlbWVudHMqIGVsZW1lbnRzID0gaXQtPnNl
Y29uZDsKKyAgICAgICAgICAgIFNWR1BlbmRpbmdFbGVtZW50cyogZWxlbWVudHMgPSBpdC0+dmFs
dWU7CiAgICAgICAgICAgICBBU1NFUlQoZWxlbWVudHMpOwogICAgICAgICAgICAgQVNTRVJUKCFl
bGVtZW50cy0+aXNFbXB0eSgpKTsKIAogICAgICAgICAgICAgZWxlbWVudHMtPnJlbW92ZShlbGVt
ZW50KTsKICAgICAgICAgICAgIGlmIChlbGVtZW50cy0+aXNFbXB0eSgpKQotICAgICAgICAgICAg
ICAgIHRvQmVSZW1vdmVkLmFwcGVuZChpdC0+Zmlyc3QpOworICAgICAgICAgICAgICAgIHRvQmVS
ZW1vdmVkLmFwcGVuZChpdC0+a2V5KTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIFdlIHVzZSB0
aGUgcmVtb3ZlUGVuZGluZ1Jlc291cmNlRm9yUmVtb3ZhbCBmdW5jdGlvbiBoZXJlIGJlY2F1c2Ug
aXQgZGVhbHMgd2l0aCBzZXQgbGlmZXRpbWUgY29ycmVjdGx5LgpAQCAtMzYyLDcgKzM2Miw3IEBA
IEhhc2hTZXQ8U1ZHRWxlbWVudCo+KiBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnNldE9mRWxlbWVu
dHNSZWZlcmVuY2luZ1RhcmdldChTVkdFCiAgICAgY29uc3QgSGFzaE1hcDxTVkdFbGVtZW50Kiwg
T3duUHRyPEhhc2hTZXQ8U1ZHRWxlbWVudCo+ID4gPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2Vs
ZW1lbnREZXBlbmRlbmNpZXMuZmluZChyZWZlcmVuY2VkRWxlbWVudCk7CiAgICAgaWYgKGl0ID09
IG1fZWxlbWVudERlcGVuZGVuY2llcy5lbmQoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0
dXJuIGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgcmV0dXJuIGl0LT52YWx1ZS5nZXQoKTsKIH0KIAog
dm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OmFkZEVsZW1lbnRSZWZlcmVuY2luZ1RhcmdldChT
VkdFbGVtZW50KiByZWZlcmVuY2luZ0VsZW1lbnQsIFNWR0VsZW1lbnQqIHJlZmVyZW5jZWRFbGVt
ZW50KQpAQCAtMzg2LDggKzM4Niw4IEBAIHZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZW1v
dmVBbGxUYXJnZXRSZWZlcmVuY2VzRm9yRWxlbWVudChTVkdFbGVtZW50KiByZWZlCiAKICAgICBI
YXNoTWFwPFNWR0VsZW1lbnQqLCBPd25QdHI8SGFzaFNldDxTVkdFbGVtZW50Kj4gPiA+OjppdGVy
YXRvciBlbmQgPSBtX2VsZW1lbnREZXBlbmRlbmNpZXMuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFw
PFNWR0VsZW1lbnQqLCBPd25QdHI8SGFzaFNldDxTVkdFbGVtZW50Kj4gPiA+OjppdGVyYXRvciBp
dCA9IG1fZWxlbWVudERlcGVuZGVuY2llcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAg
ICAgICAgU1ZHRWxlbWVudCogcmVmZXJlbmNlZEVsZW1lbnQgPSBpdC0+Zmlyc3Q7Ci0gICAgICAg
IEhhc2hTZXQ8U1ZHRWxlbWVudCo+KiByZWZlcmVuY2luZ0VsZW1lbnRzID0gaXQtPnNlY29uZC5n
ZXQoKTsKKyAgICAgICAgU1ZHRWxlbWVudCogcmVmZXJlbmNlZEVsZW1lbnQgPSBpdC0+a2V5Owor
ICAgICAgICBIYXNoU2V0PFNWR0VsZW1lbnQqPiogcmVmZXJlbmNpbmdFbGVtZW50cyA9IGl0LT52
YWx1ZS5nZXQoKTsKICAgICAgICAgSGFzaFNldDxTVkdFbGVtZW50Kj46Oml0ZXJhdG9yIHNldEl0
ID0gcmVmZXJlbmNpbmdFbGVtZW50cy0+ZmluZChyZWZlcmVuY2luZ0VsZW1lbnQpOwogICAgICAg
ICBpZiAoc2V0SXQgPT0gcmVmZXJlbmNpbmdFbGVtZW50cy0+ZW5kKCkpCiAgICAgICAgICAgICBj
b250aW51ZTsKQEAgLTQwOCwxMCArNDA4LDEwIEBAIHZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25z
OjpyZW1vdmVBbGxFbGVtZW50UmVmZXJlbmNlc0ZvclRhcmdldChTVkdFbGVtZW50KiByZWZlCiAg
ICAgSGFzaE1hcDxTVkdFbGVtZW50KiwgT3duUHRyPEhhc2hTZXQ8U1ZHRWxlbWVudCo+ID4gPjo6
aXRlcmF0b3IgaXQgPSBtX2VsZW1lbnREZXBlbmRlbmNpZXMuZmluZChyZWZlcmVuY2VkRWxlbWVu
dCk7CiAgICAgaWYgKGl0ID09IG1fZWxlbWVudERlcGVuZGVuY2llcy5lbmQoKSkKICAgICAgICAg
cmV0dXJuOwotICAgIEFTU0VSVChpdC0+Zmlyc3QgPT0gcmVmZXJlbmNlZEVsZW1lbnQpOworICAg
IEFTU0VSVChpdC0+a2V5ID09IHJlZmVyZW5jZWRFbGVtZW50KTsKICAgICBWZWN0b3I8U1ZHRWxl
bWVudCo+IHRvQmVOb3RpZmllZDsKIAotICAgIEhhc2hTZXQ8U1ZHRWxlbWVudCo+KiByZWZlcmVu
Y2luZ0VsZW1lbnRzID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICBIYXNoU2V0PFNWR0VsZW1lbnQq
PiogcmVmZXJlbmNpbmdFbGVtZW50cyA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICBIYXNoU2V0PFNW
R0VsZW1lbnQqPjo6aXRlcmF0b3Igc2V0RW5kID0gcmVmZXJlbmNpbmdFbGVtZW50cy0+ZW5kKCk7
CiAgICAgZm9yIChIYXNoU2V0PFNWR0VsZW1lbnQqPjo6aXRlcmF0b3Igc2V0SXQgPSByZWZlcmVu
Y2luZ0VsZW1lbnRzLT5iZWdpbigpOyBzZXRJdCAhPSBzZXRFbmQ7ICsrc2V0SXQpCiAgICAgICAg
IHRvQmVOb3RpZmllZC5hcHBlbmQoKnNldEl0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcApp
bmRleCAxYzA5YzYxOWI2MWZkODJlNDg4ZWIwZDUxNjI0MjhkOGU0YTFmMjMwLi5iMDIxMmQ3YmM0
NTNlYTQ3YjJjZWY5MTc3MTIxMjRjNzgzYjJjOGI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQu
Y3BwCkBAIC02OCw3ICs2OCw3IEBAIFNWR0VsZW1lbnQ6On5TVkdFbGVtZW50KCkKICAgICAgICAg
U1ZHRWxlbWVudFJhcmVEYXRhOjpTVkdFbGVtZW50UmFyZURhdGFNYXA6Oml0ZXJhdG9yIGl0ID0g
cmFyZURhdGFNYXAuZmluZCh0aGlzKTsKICAgICAgICAgQVNTRVJUKGl0ICE9IHJhcmVEYXRhTWFw
LmVuZCgpKTsKIAotICAgICAgICBTVkdFbGVtZW50UmFyZURhdGEqIHJhcmVEYXRhID0gaXQtPnNl
Y29uZDsKKyAgICAgICAgU1ZHRWxlbWVudFJhcmVEYXRhKiByYXJlRGF0YSA9IGl0LT52YWx1ZTsK
ICAgICAgICAgcmFyZURhdGEtPmRlc3Ryb3lBbmltYXRlZFNNSUxTdHlsZVByb3BlcnRpZXMoKTsK
ICAgICAgICAgaWYgKFNWR0N1cnNvckVsZW1lbnQqIGN1cnNvckVsZW1lbnQgPSByYXJlRGF0YS0+
Y3Vyc29yRWxlbWVudCgpKQogICAgICAgICAgICAgY3Vyc29yRWxlbWVudC0+cmVtb3ZlQ2xpZW50
KHRoaXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TTUlMVGlt
ZUNvbnRhaW5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29u
dGFpbmVyLmNwcAppbmRleCBiMDMyZjMxNTgyNTZlNWUzY2M4OTA0NTBjYmE4NjgwYjA3ZTRmZjlj
Li4wZWZhNmE0MmJiMDkzNWNiZTk0MjUyZTYxMTk4MzlkY2RhZjJjZmQwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmNwcApAQCAtMjcy
LDcgKzI3Miw3IEBAIHZvaWQgU01JTFRpbWVDb250YWluZXI6OnVwZGF0ZUFuaW1hdGlvbnMoU01J
TFRpbWUgZWxhcHNlZCwgYm9vbCBzZWVrVG9UaW1lKQogICAgIFZlY3RvcjxTVkdTTUlMRWxlbWVu
dCo+IGFuaW1hdGlvbnNUb0FwcGx5OwogICAgIFJlc3VsdEVsZW1lbnRNYXA6Oml0ZXJhdG9yIGVu
ZCA9IHJlc3VsdHNFbGVtZW50cy5lbmQoKTsKICAgICBmb3IgKFJlc3VsdEVsZW1lbnRNYXA6Oml0
ZXJhdG9yIGl0ID0gcmVzdWx0c0VsZW1lbnRzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewot
ICAgICAgICBTVkdTTUlMRWxlbWVudCogYW5pbWF0aW9uID0gaXQtPnNlY29uZC5nZXQoKTsKKyAg
ICAgICAgU1ZHU01JTEVsZW1lbnQqIGFuaW1hdGlvbiA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAg
ICAgaWYgKGNvbnRyaWJ1dGluZ0VsZW1lbnRzLmNvbnRhaW5zKGFuaW1hdGlvbikpCiAgICAgICAg
ICAgICBhbmltYXRpb25zVG9BcHBseS5hcHBlbmQoYW5pbWF0aW9uKTsKICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VDYWNoZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VDYWNoZS5jcHAKaW5kZXggNjkzZWUyYThm
ZmY1YzdmMzcyMmZiNDZjOWZkMGI1NWI1Y2QzYWUxYy4uMjVmY2M3Nzk3ZjA0YzFmZTg1OTJiNjA0
MTM4YTg2ZDI4ZGQ0M2U2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNz
L1NWR0ltYWdlQ2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJ
bWFnZUNhY2hlLmNwcApAQCAtNDcsOCArNDcsOCBAQCBTVkdJbWFnZUNhY2hlOjp+U1ZHSW1hZ2VD
YWNoZSgpCiAgICAgICAgIC8vIENoZWNrcyBpZiB0aGUgY2xpZW50IChpdC0+Zmlyc3QpIGlzIHN0
aWxsIHZhbGlkLiBUaGUgY2xpZW50IHNob3VsZCByZW1vdmUgaXRzZWxmIGZyb20gdGhpcwogICAg
ICAgICAvLyBjYWNoZSBiZWZvcmUgaXRzIGVuZCBvZiBsaWZlLCBvdGhlcndpc2UgdGhlIGZvbGxv
d2luZyBBU1NFUlQgd2lsbCBjcmFzaCBvbiBwdXJlIHZpcnR1YWwKICAgICAgICAgLy8gZnVuY3Rp
b24gY2FsbCBvciBhIGdlbmVyYWwgY3Jhc2guCi0gICAgICAgIEFTU0VSVChpdC0+Zmlyc3QtPnJl
c291cmNlQ2xpZW50VHlwZSgpID09IENhY2hlZEltYWdlQ2xpZW50OjpleHBlY3RlZFR5cGUoKSk7
Ci0gICAgICAgIGRlbGV0ZSBpdC0+c2Vjb25kLmJ1ZmZlcjsKKyAgICAgICAgQVNTRVJUKGl0LT5r
ZXktPnJlc291cmNlQ2xpZW50VHlwZSgpID09IENhY2hlZEltYWdlQ2xpZW50OjpleHBlY3RlZFR5
cGUoKSk7CisgICAgICAgIGRlbGV0ZSBpdC0+dmFsdWUuYnVmZmVyOwogICAgIH0KIAogICAgIG1f
aW1hZ2VEYXRhTWFwLmNsZWFyKCk7CkBAIC02Myw3ICs2Myw3IEBAIHZvaWQgU1ZHSW1hZ2VDYWNo
ZTo6cmVtb3ZlQ2xpZW50RnJvbUNhY2hlKGNvbnN0IENhY2hlZEltYWdlQ2xpZW50KiBjbGllbnQp
CiAgICAgaWYgKGl0ID09IG1faW1hZ2VEYXRhTWFwLmVuZCgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBkZWxldGUgaXQtPnNlY29uZC5idWZmZXI7CisgICAgZGVsZXRlIGl0LT52YWx1ZS5idWZm
ZXI7CiAgICAgbV9pbWFnZURhdGFNYXAucmVtb3ZlKGl0KTsKIH0KIApAQCAtODAsMTQgKzgwLDE0
IEBAIFNWR0ltYWdlQ2FjaGU6OlNpemVBbmRTY2FsZXMgU1ZHSW1hZ2VDYWNoZTo6cmVxdWVzdGVk
U2l6ZUFuZFNjYWxlcyhjb25zdCBDYWNoZWRJCiAgICAgU2l6ZUFuZFNjYWxlc01hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX3NpemVBbmRTY2FsZXNNYXAuZmluZChjbGllbnQpOwogICAgIGlmIChp
dCA9PSBtX3NpemVBbmRTY2FsZXNNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybiBTaXplQW5kU2Nh
bGVzKCk7Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgcmV0dXJuIGl0LT52YWx1ZTsKIH0K
IAogdm9pZCBTVkdJbWFnZUNhY2hlOjppbWFnZUNvbnRlbnRDaGFuZ2VkKCkKIHsKICAgICBJbWFn
ZURhdGFNYXA6Oml0ZXJhdG9yIGVuZCA9IG1faW1hZ2VEYXRhTWFwLmVuZCgpOwogICAgIGZvciAo
SW1hZ2VEYXRhTWFwOjppdGVyYXRvciBpdCA9IG1faW1hZ2VEYXRhTWFwLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC5pbWFnZU5lZWRzVXBkYXRlID0gdHJ1ZTsK
KyAgICAgICAgaXQtPnZhbHVlLmltYWdlTmVlZHNVcGRhdGUgPSB0cnVlOwogCiAgICAgLy8gSWYg
d2UncmUgaW4gdGhlIG1pZGRsZSBvZiBsYXlvdXQsIHN0YXJ0IHJlZHJhd2luZyBkaXJ0eQogICAg
IC8vIGltYWdlcyBvbiBhIHRpbWVyOyBvdGhlcndpc2UgaXQncyBzYWZlIHRvIGRyYXcgaW1tZWRp
YXRlbHkuCkBAIC0xMDMsNyArMTAzLDcgQEAgdm9pZCBTVkdJbWFnZUNhY2hlOjpyZWRyYXcoKQog
ewogICAgIEltYWdlRGF0YU1hcDo6aXRlcmF0b3IgZW5kID0gbV9pbWFnZURhdGFNYXAuZW5kKCk7
CiAgICAgZm9yIChJbWFnZURhdGFNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pbWFnZURhdGFNYXAuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIEltYWdlRGF0YSYgZGF0YSA9IGl0LT5z
ZWNvbmQ7CisgICAgICAgIEltYWdlRGF0YSYgZGF0YSA9IGl0LT52YWx1ZTsKICAgICAgICAgaWYg
KCFkYXRhLmltYWdlTmVlZHNVcGRhdGUpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
Ly8gSWYgdGhlIGNvbnRlbnQgY2hhbmdlZCB3ZSByZWRyYXcgdXNpbmcgb3VyIGV4aXN0aW5nIElt
YWdlQnVmZmVyLgpAQCAtMTM5LDkgKzEzOSw5IEBAIEltYWdlKiBTVkdJbWFnZUNhY2hlOjpsb29r
dXBPckNyZWF0ZUJpdG1hcEltYWdlRm9yUmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0KiByCiAg
ICAgaWYgKHNpemVJdCA9PSBtX3NpemVBbmRTY2FsZXNNYXAuZW5kKCkpCiAgICAgICAgIHJldHVy
biBJbWFnZTo6bnVsbEltYWdlKCk7CiAKLSAgICBJbnRTaXplIHNpemUgPSBzaXplSXQtPnNlY29u
ZC5zaXplOwotICAgIGZsb2F0IHpvb20gPSBzaXplSXQtPnNlY29uZC56b29tOwotICAgIGZsb2F0
IHNjYWxlID0gc2l6ZUl0LT5zZWNvbmQuc2NhbGU7CisgICAgSW50U2l6ZSBzaXplID0gc2l6ZUl0
LT52YWx1ZS5zaXplOworICAgIGZsb2F0IHpvb20gPSBzaXplSXQtPnZhbHVlLnpvb207CisgICAg
ZmxvYXQgc2NhbGUgPSBzaXplSXQtPnZhbHVlLnNjYWxlOwogCiAgICAgLy8gRklYTUUgKDg1MzM1
KTogVGhpcyBuZWVkcyB0byB0YWtlIENTUyB0cmFuc2Zvcm0gc2NhbGUgaW50byBhY2NvdW50IGFz
IHdlbGwuCiAgICAgUGFnZSogcGFnZSA9IHJlbmRlcmVyLT5kb2N1bWVudCgpLT5wYWdlKCk7CkBA
IC0xNTMsNyArMTUzLDcgQEAgSW1hZ2UqIFNWR0ltYWdlQ2FjaGU6Omxvb2t1cE9yQ3JlYXRlQml0
bWFwSW1hZ2VGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QqIHIKICAgICAvLyBMb29rdXAg
aW1hZ2UgZm9yIGNsaWVudCBpbiBjYWNoZSBhbmQgZXZlbnR1YWxseSB1cGRhdGUgaXQuCiAgICAg
SW1hZ2VEYXRhTWFwOjppdGVyYXRvciBpdCA9IG1faW1hZ2VEYXRhTWFwLmZpbmQoY2xpZW50KTsK
ICAgICBpZiAoaXQgIT0gbV9pbWFnZURhdGFNYXAuZW5kKCkpIHsKLSAgICAgICAgSW1hZ2VEYXRh
JiBkYXRhID0gaXQtPnNlY29uZDsKKyAgICAgICAgSW1hZ2VEYXRhJiBkYXRhID0gaXQtPnZhbHVl
OwogCiAgICAgICAgIC8vIENvbW1vbiBjYXNlOiBpbWFnZSBzaXplICYgem9vbSByZW1haW5lZCB0
aGUgc2FtZS4KICAgICAgICAgaWYgKGRhdGEuc2l6ZUFuZFNjYWxlcy5zaXplID09IHNpemUgJiYg
ZGF0YS5zaXplQW5kU2NhbGVzLnpvb20gPT0gem9vbSAmJiBkYXRhLnNpemVBbmRTY2FsZXMuc2Nh
bGUgPT0gc2NhbGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGaWx0ZXJCdWlsZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGaWx0ZXJCdWlsZGVyLmgKaW5kZXggNDRkMzIyN2I4M2U5Yjg3MThlNzlkOGMxNGM5
ZTNiZTNhNmFmNjM4NS4uMTkxNTgwZGQ4YWJlNTlmNTE3OTg0Nzg5ZmVmM2RmOWQxYWJjNmMyMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVy
QnVpbGRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0Zp
bHRlckJ1aWxkZXIuaApAQCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICAv
LyBPbmx5IGFsbG93ZWQgZm9yIGVmZmVjdHMgYmVsb25ncyB0byB0aGlzIGJ1aWxkZXIuCiAgICAg
ICAgIEFTU0VSVChtX2VmZmVjdFJlZmVyZW5jZXMuY29udGFpbnMoZWZmZWN0KSk7Ci0gICAgICAg
IHJldHVybiBtX2VmZmVjdFJlZmVyZW5jZXMuZmluZChlZmZlY3QpLT5zZWNvbmQ7CisgICAgICAg
IHJldHVybiBtX2VmZmVjdFJlZmVyZW5jZXMuZmluZChlZmZlY3QpLT52YWx1ZTsKICAgICB9CiAK
ICAgICAvLyBSZXF1aXJlZCB0byBjaGFuZ2UgdGhlIGF0dHJpYnV0ZXMgb2YgYSBmaWx0ZXIgZHVy
aW5nIGFuIHN2Z0F0dHJpYnV0ZUNoYW5nZWQuCkBAIC02Niw3ICs2Niw3IEBAIHByaXZhdGU6CiAg
ICAgewogICAgICAgICBIYXNoTWFwPEF0b21pY1N0cmluZywgUmVmUHRyPEZpbHRlckVmZmVjdD4g
Pjo6aXRlcmF0b3IgZW5kID0gbV9idWlsdGluRWZmZWN0cy5lbmQoKTsKICAgICAgICAgZm9yIChI
YXNoTWFwPEF0b21pY1N0cmluZywgUmVmUHRyPEZpbHRlckVmZmVjdD4gPjo6aXRlcmF0b3IgaXRl
cmF0b3IgPSBtX2J1aWx0aW5FZmZlY3RzLmJlZ2luKCk7IGl0ZXJhdG9yICE9IGVuZDsgKytpdGVy
YXRvcikKLSAgICAgICAgICAgICBtX2VmZmVjdFJlZmVyZW5jZXMuYWRkKGl0ZXJhdG9yLT5zZWNv
bmQsIEZpbHRlckVmZmVjdFNldCgpKTsKKyAgICAgICAgICAgICBtX2VmZmVjdFJlZmVyZW5jZXMu
YWRkKGl0ZXJhdG9yLT52YWx1ZSwgRmlsdGVyRWZmZWN0U2V0KCkpOwogICAgIH0KIAogICAgIEhh
c2hNYXA8QXRvbWljU3RyaW5nLCBSZWZQdHI8RmlsdGVyRWZmZWN0PiA+IG1fYnVpbHRpbkVmZmVj
dHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRl
ZFByb3BlcnR5LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFBy
b3BlcnR5LmgKaW5kZXggNmRmZGFjNmRkNTc4YWYzMGY2ZGVhYjdjZDI2NTgzNjA0NDJmM2FkZi4u
NmExZjAwOTdiNjFiYzBiNWRiMDk4MDE1NTA5MDNjMTkwNDQ5NjdiYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHkuaApAQCAtNTgs
OCArNTgsOCBAQCBwdWJsaWM6CiAgICAgICAgIENhY2hlKiBjYWNoZSA9IGFuaW1hdGVkUHJvcGVy
dHlDYWNoZSgpOwogICAgICAgICBjb25zdCBDYWNoZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY2Fj
aGUtPmVuZCgpOwogICAgICAgICBmb3IgKENhY2hlOjpjb25zdF9pdGVyYXRvciBpdCA9IGNhY2hl
LT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGlmIChpdC0+c2Vjb25k
ID09IHRoaXMpIHsKLSAgICAgICAgICAgICAgICBjYWNoZS0+cmVtb3ZlKGl0LT5maXJzdCk7Cisg
ICAgICAgICAgICBpZiAoaXQtPnZhbHVlID09IHRoaXMpIHsKKyAgICAgICAgICAgICAgICBjYWNo
ZS0+cmVtb3ZlKGl0LT5rZXkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9T
VkdBdHRyaWJ1dGVUb1Byb3BlcnR5TWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0
aWVzL1NWR0F0dHJpYnV0ZVRvUHJvcGVydHlNYXAuY3BwCmluZGV4IGJlMzFjYzNjN2RhMmY1MGY1
MWY2OWI1NTQ0MDI2NWRiMTM1YjUyOGMuLmNjNDZjY2ZhMDgxZmZjODgzMDliN2VmMjJkNjNmMGYz
NGVmZDgxN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0F0
dHJpYnV0ZVRvUHJvcGVydHlNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0
aWVzL1NWR0F0dHJpYnV0ZVRvUHJvcGVydHlNYXAuY3BwCkBAIC0zMSw3ICszMSw3IEBAIHZvaWQg
U1ZHQXR0cmlidXRlVG9Qcm9wZXJ0eU1hcDo6YWRkUHJvcGVydGllcyhTVkdBdHRyaWJ1dGVUb1By
b3BlcnR5TWFwJiBtYXApCiB7CiAgICAgQXR0cmlidXRlVG9Qcm9wZXJ0aWVzTWFwOjppdGVyYXRv
ciBlbmQgPSBtYXAubV9tYXAuZW5kKCk7CiAgICAgZm9yIChBdHRyaWJ1dGVUb1Byb3BlcnRpZXNN
YXA6Oml0ZXJhdG9yIGl0ID0gbWFwLm1fbWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewot
ICAgICAgICBQcm9wZXJ0aWVzVmVjdG9yKiB2ZWN0b3IgPSBpdC0+c2Vjb25kOworICAgICAgICBQ
cm9wZXJ0aWVzVmVjdG9yKiB2ZWN0b3IgPSBpdC0+dmFsdWU7CiAgICAgICAgIEFTU0VSVCh2ZWN0
b3IpOwogCiAgICAgICAgIFByb3BlcnRpZXNWZWN0b3I6Oml0ZXJhdG9yIHZlY3RvckVuZCA9IHZl
Y3Rvci0+ZW5kKCk7CkBAIC04MSwxMiArODEsMTIgQEAgdm9pZCBTVkdBdHRyaWJ1dGVUb1Byb3Bl
cnR5TWFwOjpzeW5jaHJvbml6ZVByb3BlcnRpZXMoU1ZHRWxlbWVudCogY29udGV4dEVsZW1lbnQK
ICAgICBBU1NFUlQoY29udGV4dEVsZW1lbnQpOwogICAgIEF0dHJpYnV0ZVRvUHJvcGVydGllc01h
cDo6aXRlcmF0b3IgZW5kID0gbV9tYXAuZW5kKCk7CiAgICAgZm9yIChBdHRyaWJ1dGVUb1Byb3Bl
cnRpZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9tYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7
Ci0gICAgICAgIFByb3BlcnRpZXNWZWN0b3IqIHZlY3RvciA9IGl0LT5zZWNvbmQ7CisgICAgICAg
IFByb3BlcnRpZXNWZWN0b3IqIHZlY3RvciA9IGl0LT52YWx1ZTsKICAgICAgICAgQVNTRVJUKHZl
Y3Rvcik7CiAKICAgICAgICAgUHJvcGVydGllc1ZlY3Rvcjo6aXRlcmF0b3IgdmVjdG9yRW5kID0g
dmVjdG9yLT5lbmQoKTsKICAgICAgICAgZm9yIChQcm9wZXJ0aWVzVmVjdG9yOjppdGVyYXRvciB2
ZWN0b3JJdCA9IHZlY3Rvci0+YmVnaW4oKTsgdmVjdG9ySXQgIT0gdmVjdG9yRW5kOyArK3ZlY3Rv
ckl0KQotICAgICAgICAgICAgc3luY2hyb25pemVQcm9wZXJ0eShjb250ZXh0RWxlbWVudCwgaXQt
PmZpcnN0LCAqdmVjdG9ySXQpOworICAgICAgICAgICAgc3luY2hyb25pemVQcm9wZXJ0eShjb250
ZXh0RWxlbWVudCwgaXQtPmtleSwgKnZlY3Rvckl0KTsKICAgICB9IAogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuY3BwIGIvU291cmNlL1dlYkNv
cmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcAppbmRleCBkN2VhZjVkYjQ2ZWU4Y2E3ODBlYjc2
MWM4ZjQyYjQ3NmM5MDU1NzQ4Li5hNjlmYjcyNDZmYmNmYWY2YmU2Zjg4ODc3MjM3Y2JlMWE2ZmI0
MWNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAKQEAgLTE4NCw3
ICsxODQsNyBAQCBib29sIFdvcmtlckNvbnRleHQ6Omhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0
CiAgICAgQWN0aXZlRE9NT2JqZWN0c01hcCYgYWN0aXZlT2JqZWN0cyA9IGFjdGl2ZURPTU9iamVj
dHMoKTsKICAgICBBY3RpdmVET01PYmplY3RzTWFwOjpjb25zdF9pdGVyYXRvciBhY3RpdmVPYmpl
Y3RzRW5kID0gYWN0aXZlT2JqZWN0cy5lbmQoKTsKICAgICBmb3IgKEFjdGl2ZURPTU9iamVjdHNN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBhY3RpdmVPYmplY3RzLmJlZ2luKCk7IGl0ZXIgIT0g
YWN0aXZlT2JqZWN0c0VuZDsgKytpdGVyKSB7Ci0gICAgICAgIGlmIChpdGVyLT5maXJzdC0+aGFz
UGVuZGluZ0FjdGl2aXR5KCkpCisgICAgICAgIGlmIChpdGVyLT5rZXktPmhhc1BlbmRpbmdBY3Rp
dml0eSgpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckV2ZW50UXVldWUuY3BwIGIvU291cmNlL1dlYkNv
cmUvd29ya2Vycy9Xb3JrZXJFdmVudFF1ZXVlLmNwcAppbmRleCA1OWE5MzA3ZWFjMTc4NGI2OTlj
M2ZlZDIwYTQ1NWE3OWYwODkxMDdlLi4yMzU1MjlmMWZlYjk3MTI4YzMxZDk2YTMwZGEwY2RmZmJi
ZTlkMGViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckV2ZW50UXVl
dWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyRXZlbnRRdWV1ZS5jcHAK
QEAgLTEyNyw3ICsxMjcsNyBAQCB2b2lkIFdvcmtlckV2ZW50UXVldWU6OmNsb3NlKCkKIHsKICAg
ICBtX2lzQ2xvc2VkID0gdHJ1ZTsKICAgICBmb3IgKEV2ZW50VGFza01hcDo6aXRlcmF0b3IgaXQg
PSBtX2V2ZW50VGFza01hcC5iZWdpbigpOyBpdCAhPSBtX2V2ZW50VGFza01hcC5lbmQoKTsgKytp
dCkgewotICAgICAgICBFdmVudERpc3BhdGNoZXJUYXNrKiB0YXNrID0gaXQtPnNlY29uZDsKKyAg
ICAgICAgRXZlbnREaXNwYXRjaGVyVGFzayogdGFzayA9IGl0LT52YWx1ZTsKICAgICAgICAgdGFz
ay0+Y2FuY2VsKCk7CiAgICAgfQogICAgIG1fZXZlbnRUYXNrTWFwLmNsZWFyKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwIGIvU291cmNlL1dlYkNv
cmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAppbmRleCAxMTFhNjQ5YTEzZTc2YWVmODM3MGIxODJj
OTUxY2E5ZTc1Y2ZiMjJlLi40NWYzZmNkYmU2MmM3MGFhMDEwNDVmYmRhZDE5NjYyNzdiNjMyOWRl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKQEAgLTkyMCw3ICs5MjAsNyBA
QCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpzZXRSZXF1ZXN0SGVhZGVySW50ZXJuYWwoY29uc3QgQXRv
bWljU3RyaW5nJiBuYW1lLCBjb25zdCBTdAogewogICAgIEhUVFBIZWFkZXJNYXA6OkFkZFJlc3Vs
dCByZXN1bHQgPSBtX3JlcXVlc3RIZWFkZXJzLmFkZChuYW1lLCB2YWx1ZSk7CiAgICAgaWYgKCFy
ZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgKz0gIiwg
IiArIHZhbHVlOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlICs9ICIsICIgKyB2YWx1
ZTsKIH0KIAogU3RyaW5nIFhNTEh0dHBSZXF1ZXN0OjpnZXRSZXF1ZXN0SGVhZGVyKGNvbnN0IEF0
b21pY1N0cmluZyYgbmFtZSkgY29uc3QKQEAgLTk0NywxNiArOTQ3LDE2IEBAIFN0cmluZyBYTUxI
dHRwUmVxdWVzdDo6Z2V0QWxsUmVzcG9uc2VIZWFkZXJzKEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25z
dAogICAgICAgICAvLyAgICAgMikgVGhlcmUncyBubyBrbm93biBoYXJtIGluIGhpZGluZyBTZXQt
Q29va2llIGhlYWRlciBmaWVsZHMgZW50aXJlbHk7IHdlIGRvbid0CiAgICAgICAgIC8vICAgICAg
ICBrbm93IGFueSB3aWRlbHkgdXNlZCB0ZWNobmlxdWUgdGhhdCByZXF1aXJlcyBhY2Nlc3MgdG8g
dGhlbS4KICAgICAgICAgLy8gICAgIDMpIEZpcmVmb3ggaGFzIGltcGxlbWVudGVkIHRoaXMgcG9s
aWN5LgotICAgICAgICBpZiAoaXNTZXRDb29raWVIZWFkZXIoaXQtPmZpcnN0KSAmJiAhc2VjdXJp
dHlPcmlnaW4oKS0+Y2FuTG9hZExvY2FsUmVzb3VyY2VzKCkpCisgICAgICAgIGlmIChpc1NldENv
b2tpZUhlYWRlcihpdC0+a2V5KSAmJiAhc2VjdXJpdHlPcmlnaW4oKS0+Y2FuTG9hZExvY2FsUmVz
b3VyY2VzKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBpZiAoIW1fc2FtZU9y
aWdpblJlcXVlc3QgJiYgIWlzT25BY2Nlc3NDb250cm9sUmVzcG9uc2VIZWFkZXJXaGl0ZWxpc3Qo
aXQtPmZpcnN0KSAmJiAhYWNjZXNzQ29udHJvbEV4cG9zZUhlYWRlclNldC5jb250YWlucyhpdC0+
Zmlyc3QpKQorICAgICAgICBpZiAoIW1fc2FtZU9yaWdpblJlcXVlc3QgJiYgIWlzT25BY2Nlc3ND
b250cm9sUmVzcG9uc2VIZWFkZXJXaGl0ZWxpc3QoaXQtPmtleSkgJiYgIWFjY2Vzc0NvbnRyb2xF
eHBvc2VIZWFkZXJTZXQuY29udGFpbnMoaXQtPmtleSkpCiAgICAgICAgICAgICBjb250aW51ZTsK
IAotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+Zmlyc3QpOworICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZChpdC0+a2V5KTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
JzonKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJyAnKTsKLSAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQoaXQtPnNlY29uZCk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KGl0LT52YWx1ZSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdccicpOwogICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS94bWwvWFBhdGhGdW5jdGlvbnMuY3BwIGIvU291cmNlL1dlYkNvcmUveG1sL1hQYXRo
RnVuY3Rpb25zLmNwcAppbmRleCAzYzkwZTNiNTE3MTg1OWE1NmU4NzJiYjc2NTJmNTk1OThhNjM3
ZDJhLi4wMDE5YmM0MzY1MDRiYTJiMjFkZWZlZmYzMGY2NDgwYzFlZjk4MWUzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhGdW5jdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3htbC9YUGF0aEZ1bmN0aW9ucy5jcHAKQEAgLTcyMyw3ICs3MjMsNyBAQCBGdW5jdGlvbiog
Y3JlYXRlRnVuY3Rpb24oY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBWZWN0b3I8RXhwcmVzc2lv
bio+JiBhcmdzKQogICAgIEhhc2hNYXA8U3RyaW5nLCBGdW5jdGlvblJlYz46Oml0ZXJhdG9yIGZ1
bmN0aW9uTWFwSXRlciA9IGZ1bmN0aW9uTWFwLT5maW5kKG5hbWUpOwogICAgIEZ1bmN0aW9uUmVj
KiBmdW5jdGlvblJlYyA9IDA7CiAKLSAgICBpZiAoZnVuY3Rpb25NYXBJdGVyID09IGZ1bmN0aW9u
TWFwLT5lbmQoKSB8fCAhKGZ1bmN0aW9uUmVjID0gJmZ1bmN0aW9uTWFwSXRlci0+c2Vjb25kKS0+
YXJncy5jb250YWlucyhhcmdzLnNpemUoKSkpCisgICAgaWYgKGZ1bmN0aW9uTWFwSXRlciA9PSBm
dW5jdGlvbk1hcC0+ZW5kKCkgfHwgIShmdW5jdGlvblJlYyA9ICZmdW5jdGlvbk1hcEl0ZXItPnZh
bHVlKS0+YXJncy5jb250YWlucyhhcmdzLnNpemUoKSkpCiAgICAgICAgIHJldHVybiAwOwogCiAg
ICAgRnVuY3Rpb24qIGZ1bmN0aW9uID0gZnVuY3Rpb25SZWMtPmZhY3RvcnlGbigpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3htbC9YUGF0aFBhcnNlci5jcHAKaW5kZXggYjVlNmE5MjM3NTkzYjRhYWEyYTI0M2YyZmY5ZDg2
ZTU3ZjkzMGE5Ny4uNzQ5MTgwZGJlNWVlOGY5YjEyMmZjZGExZTY5ODE2OWMwMDlmOGY4MCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoUGFyc2VyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS94bWwvWFBhdGhQYXJzZXIuY3BwCkBAIC0xMDMsNyArMTAzLDcgQEAgc3RhdGljIGJv
b2wgaXNBeGlzTmFtZShjb25zdCBTdHJpbmcmIG5hbWUsIFN0ZXA6OkF4aXMmIHR5cGUpCiAgICAg
QXhpc05hbWVzTWFwOjppdGVyYXRvciBpdCA9IGF4aXNOYW1lcy5maW5kKG5hbWUpOwogICAgIGlm
IChpdCA9PSBheGlzTmFtZXMuZW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB0eXBl
ID0gaXQtPnNlY29uZDsKKyAgICB0eXBlID0gaXQtPnZhbHVlOwogICAgIHJldHVybiB0cnVlOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQu
Y3BwIGIvU291cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JMaWJ4c2x0LmNwcAppbmRleCBl
MjFjODI3YzI1ZGJjNWVmZDMxYmU3MDVmOWYzNmY1MmRlNTQ4MjQxLi5hOTEyOTg4ZGE2MzhjY2Y4
NDJlN2IxN2FmNWU0MzQ0NmU4YTMyZDI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwv
WFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9YU0xUUHJv
Y2Vzc29yTGlieHNsdC5jcHAKQEAgLTIyNSw4ICsyMjUsOCBAQCBzdGF0aWMgY29uc3QgY2hhcioq
IHhzbHRQYXJhbUFycmF5RnJvbVBhcmFtZXRlck1hcChYU0xUUHJvY2Vzc29yOjpQYXJhbWV0ZXJN
YXAmCiAgICAgWFNMVFByb2Nlc3Nvcjo6UGFyYW1ldGVyTWFwOjppdGVyYXRvciBlbmQgPSBwYXJh
bWV0ZXJzLmVuZCgpOwogICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKICAgICBmb3IgKFhTTFRQcm9j
ZXNzb3I6OlBhcmFtZXRlck1hcDo6aXRlcmF0b3IgaXQgPSBwYXJhbWV0ZXJzLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgewotICAgICAgICBwYXJhbWV0ZXJBcnJheVtpbmRleCsrXSA9IGZhc3RT
dHJEdXAoaXQtPmZpcnN0LnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICBwYXJhbWV0ZXJBcnJheVtp
bmRleCsrXSA9IGZhc3RTdHJEdXAoaXQtPnNlY29uZC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAg
cGFyYW1ldGVyQXJyYXlbaW5kZXgrK10gPSBmYXN0U3RyRHVwKGl0LT5rZXkudXRmOCgpLmRhdGEo
KSk7CisgICAgICAgIHBhcmFtZXRlckFycmF5W2luZGV4KytdID0gZmFzdFN0ckR1cChpdC0+dmFs
dWUudXRmOCgpLmRhdGEoKSk7CiAgICAgfQogICAgIHBhcmFtZXRlckFycmF5W2luZGV4XSA9IDA7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yUXQuY3BwIGIv
U291cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JRdC5jcHAKaW5kZXggYTY3YzVmZGU3NmZj
YzU2OGNlM2M0YzY4YzYxMDYwZDQwYmI5MzEwYy4uMGM0MTQwYThkNzllZGVmYTUwMjMzNWZlMDE4
MzEyZjQ3NWYxNzBmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNz
b3JRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JRdC5jcHAKQEAg
LTE0Miw3ICsxNDIsNyBAQCBib29sIFhTTFRQcm9jZXNzb3I6OnRyYW5zZm9ybVRvU3RyaW5nKE5v
ZGUqIHNvdXJjZU5vZGUsIFN0cmluZyYsIFN0cmluZyYgcmVzdWx0UwogCiAgICAgWFNMVFByb2Nl
c3Nvcjo6UGFyYW1ldGVyTWFwOjppdGVyYXRvciBlbmQgPSBtX3BhcmFtZXRlcnMuZW5kKCk7CiAg
ICAgZm9yIChYU0xUUHJvY2Vzc29yOjpQYXJhbWV0ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wYXJh
bWV0ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgcXVlcnkuYmluZFZhcmlh
YmxlKFFTdHJpbmcoaXQtPmZpcnN0KSwgUVhtbEl0ZW0oUVZhcmlhbnQoUVN0cmluZyhpdC0+c2Vj
b25kKSkpKTsKKyAgICAgICAgcXVlcnkuYmluZFZhcmlhYmxlKFFTdHJpbmcoaXQtPmtleSksIFFY
bWxJdGVtKFFWYXJpYW50KFFTdHJpbmcoaXQtPnZhbHVlKSkpKTsKIAogICAgIFFTdHJpbmcgc291
cmNlOwogICAgIGlmIChzb3VyY2VJc0RvY3VtZW50ICYmIG93bmVyRG9jdW1lbnQtPnRyYW5zZm9y
bVNvdXJjZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9CYWNr
aW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9CYWNraW5nU3RvcmUu
Y3BwCmluZGV4IGQzYzJjZTkzYTYyNWI2ZGNjMWZiMTMxNDU5OGRlODgwMTA2NDFmY2EuLjk2NzE1
NDg4YTc5Nzc1NzU3YzczMDZiNWU0NmY5Mzg3YzBjYWYzNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvYmxhY2tiZXJyeS9BcGkvQmFja2luZ1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L2JsYWNrYmVycnkvQXBpL0JhY2tpbmdTdG9yZS5jcHAKQEAgLTcxMSw4ICs3MTEsOCBAQCB2b2lk
IEJhY2tpbmdTdG9yZVByaXZhdGU6OnNldEJhY2tpbmdTdG9yZVJlY3QoY29uc3QgUGxhdGZvcm06
OkludFJlY3QmIGJhY2tpbmdTdAogICAgIC8vIG91ciBuZXcgYmFja2luZyBzdG9yZSByZWN0Lgog
ICAgIFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIHRpbGVNYXBFbmQgPSBjdXJyZW50TWFwLmVuZCgp
OwogICAgIGZvciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjdXJyZW50TWFwLmJlZ2lu
KCk7IGl0ICE9IHRpbGVNYXBFbmQ7ICsraXQpIHsKLSAgICAgICAgVGlsZUluZGV4IG9sZEluZGV4
ID0gaXQtPmZpcnN0OwotICAgICAgICBCYWNraW5nU3RvcmVUaWxlKiB0aWxlID0gaXQtPnNlY29u
ZDsKKyAgICAgICAgVGlsZUluZGV4IG9sZEluZGV4ID0gaXQtPmtleTsKKyAgICAgICAgQmFja2lu
Z1N0b3JlVGlsZSogdGlsZSA9IGl0LT52YWx1ZTsKIAogICAgICAgICAvLyBSZXNldCB0aGUgb2xk
IGluZGV4LgogICAgICAgICByZXNldFRpbGUob2xkSW5kZXgsIHRpbGUsIGZhbHNlIC8qcmVzZXRC
YWNrZ3JvdW5kKi8pOwpAQCAtNzY4LDggKzc2OCw4IEBAIHZvaWQgQmFja2luZ1N0b3JlUHJpdmF0
ZTo6c2V0QmFja2luZ1N0b3JlUmVjdChjb25zdCBQbGF0Zm9ybTo6SW50UmVjdCYgYmFja2luZ1N0
CiAgICAgc2l6ZV90IGkgPSAwOwogICAgIFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGxlZnRPdmVy
RW5kID0gbGVmdE92ZXJUaWxlcy5lbmQoKTsKICAgICBmb3IgKFRpbGVNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbGVmdE92ZXJUaWxlcy5iZWdpbigpOyBpdCAhPSBsZWZ0T3ZlckVuZDsgKytpdCkg
ewotICAgICAgICBUaWxlSW5kZXggb2xkSW5kZXggPSBpdC0+Zmlyc3Q7Ci0gICAgICAgIEJhY2tp
bmdTdG9yZVRpbGUqIHRpbGUgPSBpdC0+c2Vjb25kOworICAgICAgICBUaWxlSW5kZXggb2xkSW5k
ZXggPSBpdC0+a2V5OworICAgICAgICBCYWNraW5nU3RvcmVUaWxlKiB0aWxlID0gaXQtPnZhbHVl
OwogICAgICAgICBpZiAoaSA+PSBpbmRleGVzVG9GaWxsLnNpemUoKSkgewogICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTE3NDQsNyArMTc0
NCw3IEBAIFBsYXRmb3JtOjpJbnRSZWN0IEJhY2tpbmdTdG9yZVByaXZhdGU6OnZpc2libGVUaWxl
c1JlY3QoKSBjb25zdAogICAgIFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGN1cnJlbnRN
YXAuZW5kKCk7CiAgICAgZm9yIChUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGN1cnJlbnRN
YXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIFRpbGVSZWN0IHRpbGVSZWN0
OwotICAgICAgICB0aWxlUmVjdC5maXJzdCA9IGl0LT5maXJzdDsKKyAgICAgICAgdGlsZVJlY3Qu
Zmlyc3QgPSBpdC0+a2V5OwogICAgICAgICB0aWxlUmVjdC5zZWNvbmQgPSB0aGlzLT50aWxlUmVj
dCgpOwogICAgICAgICBQbGF0Zm9ybTo6SW50UmVjdCB0aWxlID0gbWFwRnJvbVRpbGVzVG9UcmFu
c2Zvcm1lZENvbnRlbnRzKHRpbGVSZWN0KTsKICAgICAgICAgaWYgKHRpbGUuaW50ZXJzZWN0cyh2
aXNpYmxlQ29udGVudHNSZWN0KCkpKQpAQCAtMTgwNSw3ICsxODA1LDcgQEAgdm9pZCBCYWNraW5n
U3RvcmVQcml2YXRlOjpyZXNldFRpbGVzKGJvb2wgcmVzZXRCYWNrZ3JvdW5kKQogCiAgICAgVGls
ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY3VycmVudE1hcC5lbmQoKTsKICAgICBmb3IgKFRp
bGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY3VycmVudE1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpCi0gICAgICAgIHJlc2V0VGlsZShpdC0+Zmlyc3QsIGl0LT5zZWNvbmQsIHJlc2V0QmFj
a2dyb3VuZCk7CisgICAgICAgIHJlc2V0VGlsZShpdC0+a2V5LCBpdC0+dmFsdWUsIHJlc2V0QmFj
a2dyb3VuZCk7CiB9CiAKIHZvaWQgQmFja2luZ1N0b3JlUHJpdmF0ZTo6dXBkYXRlVGlsZXMoYm9v
bCB1cGRhdGVWaXNpYmxlLCBib29sIGltbWVkaWF0ZSkKQEAgLTE4MTgsMTAgKzE4MTgsMTAgQEAg
dm9pZCBCYWNraW5nU3RvcmVQcml2YXRlOjp1cGRhdGVUaWxlcyhib29sIHVwZGF0ZVZpc2libGUs
IGJvb2wgaW1tZWRpYXRlKQogCiAgICAgVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY3Vy
cmVudE1hcC5lbmQoKTsKICAgICBmb3IgKFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY3Vy
cmVudE1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgYm9vbCBpc1Zpc2li
bGUgPSBpc1RpbGVWaXNpYmxlKGl0LT5maXJzdCk7CisgICAgICAgIGJvb2wgaXNWaXNpYmxlID0g
aXNUaWxlVmlzaWJsZShpdC0+a2V5KTsKICAgICAgICAgaWYgKCF1cGRhdGVWaXNpYmxlICYmIGlz
VmlzaWJsZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB1cGRhdGVUaWxlKGl0LT5m
aXJzdCwgaW1tZWRpYXRlKTsKKyAgICAgICAgdXBkYXRlVGlsZShpdC0+a2V5LCBpbW1lZGlhdGUp
OwogICAgIH0KIH0KIApAQCAtMTg0Miw4ICsxODQyLDggQEAgdm9pZCBCYWNraW5nU3RvcmVQcml2
YXRlOjp1cGRhdGVUaWxlc0ZvclNjcm9sbE9yTm90UmVuZGVyZWRSZWdpb24oYm9vbCBjaGVja0xv
YWQKIAogICAgIFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGN1cnJlbnRNYXAuZW5kKCk7
CiAgICAgZm9yIChUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGN1cnJlbnRNYXAuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFRpbGVJbmRleCBpbmRleCA9IGl0LT5maXJz
dDsKLSAgICAgICAgQmFja2luZ1N0b3JlVGlsZSogdGlsZSA9IGl0LT5zZWNvbmQ7CisgICAgICAg
IFRpbGVJbmRleCBpbmRleCA9IGl0LT5rZXk7CisgICAgICAgIEJhY2tpbmdTdG9yZVRpbGUqIHRp
bGUgPSBpdC0+dmFsdWU7CiAgICAgICAgIGJvb2wgaXNWaXNpYmxlID0gaXNUaWxlVmlzaWJsZShp
bmRleCk7CiAgICAgICAgIC8vIFRoZSByZWN0IGluIHRyYW5zZm9ybWVkIGNvbnRlbnRzIGNvb3Jk
aW5hdGVzLgogICAgICAgICBQbGF0Zm9ybTo6SW50UmVjdCByZWN0KG9yaWdpbk9mVGlsZShpbmRl
eCksIHRpbGVTaXplKCkpOwpAQCAtMTk4Niw4ICsxOTg2LDggQEAgQmFja2luZ1N0b3JlUHJpdmF0
ZTo6VGlsZVJlY3RMaXN0IEJhY2tpbmdTdG9yZVByaXZhdGU6Om1hcEZyb21UcmFuc2Zvcm1lZENv
bnRlbnQKICAgICBUaWxlUmVjdExpc3QgdGlsZVJlY3RMaXN0OwogICAgIFRpbGVNYXA6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IHRpbGVNYXAuZW5kKCk7CiAgICAgZm9yIChUaWxlTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IHRpbGVNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAg
IFRpbGVJbmRleCBpbmRleCA9IGl0LT5maXJzdDsKLSAgICAgICAgQmFja2luZ1N0b3JlVGlsZSog
dGlsZSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFRpbGVJbmRleCBpbmRleCA9IGl0LT5rZXk7Cisg
ICAgICAgIEJhY2tpbmdTdG9yZVRpbGUqIHRpbGUgPSBpdC0+dmFsdWU7CiAKICAgICAgICAgLy8g
TmVlZCB0byBtYXAgdGhlIHJlY3QgdG8gdGlsZSBjb29yZGluYXRlcy4KICAgICAgICAgUGxhdGZv
cm06OkludFJlY3QgciA9IHJlY3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVy
cnkvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uUHJlc2VudGVySW1w
bC5jcHAKaW5kZXggNmIyOTIxMDI5NDYyNzdkYTI4ZTc5OGQ3ZWVkZjhiOTM5YzUzMTljNy4uMmNk
N2MxNzQ1MjdkZjEwZjM5MGExNjViYWE3YmQ5NmY0ZjUzZmQ4ZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlcklt
cGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9Ob3Rp
ZmljYXRpb25QcmVzZW50ZXJJbXBsLmNwcApAQCAtODEsNyArODEsNyBAQCB2b2lkIE5vdGlmaWNh
dGlvblByZXNlbnRlckltcGw6OmNhbmNlbChOb3RpZmljYXRpb24qIG5vdGlmaWNhdGlvbikKICAg
ICBpZiAoaXQgPT0gbV9ub3RpZmljYXRpb25zLmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBtX3BsYXRmb3JtUHJlc2VudGVyLT5jYW5jZWwoc3RkOjpzdHJpbmcoaXQtPnNlY29uZC51dGY4
KCkuZGF0YSgpKSk7CisgICAgbV9wbGF0Zm9ybVByZXNlbnRlci0+Y2FuY2VsKHN0ZDo6c3RyaW5n
KGl0LT52YWx1ZS51dGY4KCkuZGF0YSgpKSk7CiAgICAgbV9ub3RpZmljYXRpb25zLnJlbW92ZShp
dCk7CiB9CiAKQEAgLTEwOCwxMiArMTA4LDEyIEBAIHZvaWQgTm90aWZpY2F0aW9uUHJlc2VudGVy
SW1wbDo6b25QZXJtaXNzaW9uKGNvbnN0IHN0ZDo6c3RyaW5nJiBkb21haW4sIGJvb2wgaXNBCiAg
ICAgU3RyaW5nIGRvbWFpblN0cmluZyA9IFN0cmluZzo6ZnJvbVVURjgoZG9tYWluLmNfc3RyKCkp
OwogICAgIFBlcm1pc3Npb25SZXF1ZXN0TWFwOjppdGVyYXRvciBpdCA9IG1fcGVybWlzc2lvblJl
cXVlc3RzLmJlZ2luKCk7CiAgICAgZm9yICg7IGl0ICE9IG1fcGVybWlzc2lvblJlcXVlc3RzLmVu
ZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+Zmlyc3QtPnVybCgpLmhvc3QoKSAhPSBkb21h
aW5TdHJpbmcpCisgICAgICAgIGlmIChpdC0+a2V5LT51cmwoKS5ob3N0KCkgIT0gZG9tYWluU3Ry
aW5nKQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgaWYgKGlzQWxsb3dlZCkgewog
ICAgICAgICAgICAgbV9hbGxvd2VkRG9tYWlucy5hZGQoZG9tYWluU3RyaW5nKTsKLSAgICAgICAg
ICAgIGl0LT5zZWNvbmQtPmhhbmRsZUV2ZW50KCk7CisgICAgICAgICAgICBpdC0+dmFsdWUtPmhh
bmRsZUV2ZW50KCk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbV9hbGxvd2VkRG9tYWlu
cy5yZW1vdmUoZG9tYWluU3RyaW5nKTsKIApAQCAtMTQ0LDkgKzE0NCw5IEBAIHZvaWQgTm90aWZp
Y2F0aW9uUHJlc2VudGVySW1wbDo6bm90aWZpY2F0aW9uQ2xpY2tlZChjb25zdCBzdGQ6OnN0cmlu
ZyYgaWQpCiAgICAgU3RyaW5nIGlkU3RyaW5nID0gU3RyaW5nOjpmcm9tVVRGOChpZC5jX3N0cigp
KTsKICAgICBOb3RpZmljYXRpb25NYXA6Oml0ZXJhdG9yIGl0ID0gbV9ub3RpZmljYXRpb25zLmJl
Z2luKCk7CiAgICAgZm9yICg7IGl0ICE9IG1fbm90aWZpY2F0aW9ucy5lbmQoKTsgKytpdCkgewot
ICAgICAgICBpZiAoaXQtPnNlY29uZCA9PSBpZFN0cmluZyAmJiBpdC0+Zmlyc3QtPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSkgewotICAgICAgICAgICAgUmVmUHRyPE5vdGlmaWNhdGlvbj4gbm90
aWZpY2F0aW9uID0gaXQtPmZpcnN0OwotICAgICAgICAgICAgaXQtPmZpcnN0LT5kaXNwYXRjaEV2
ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmNsaWNrRXZlbnQsIGZhbHNlLCB0cnVlKSk7
CisgICAgICAgIGlmIChpdC0+dmFsdWUgPT0gaWRTdHJpbmcgJiYgaXQtPmZpcnN0LT5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCkpIHsKKyAgICAgICAgICAgIFJlZlB0cjxOb3RpZmljYXRpb24+IG5v
dGlmaWNhdGlvbiA9IGl0LT5rZXk7CisgICAgICAgICAgICBpdC0+a2V5LT5kaXNwYXRjaEV2ZW50
KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmNsaWNrRXZlbnQsIGZhbHNlLCB0cnVlKSk7CiAg
ICAgICAgICAgICBtX25vdGlmaWNhdGlvbnMucmVtb3ZlKG5vdGlmaWNhdGlvbik7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2ti
ZXJyeS9XZWJLaXRTdXBwb3J0L0Fib3V0RGF0YS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVy
cnkvV2ViS2l0U3VwcG9ydC9BYm91dERhdGEuY3BwCmluZGV4IDdiN2ExZDU5YWI4NTc4MWMyOWVi
OTIxOWViMzU3MmNiNjg3MDkzZTQuLjVlMWI3N2UzYjNmOWYzNjM2MjNjNGZiNmYxYTZkMDg5MTNh
YTAxMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0
L0Fib3V0RGF0YS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBv
cnQvQWJvdXREYXRhLmNwcApAQCAtMjA1LDcgKzIwNSw3IEBAIHN0YXRpYyB2b2lkIGR1bXBKU0NU
eXBlQ291bnRTZXRUb1RhYmxlSFRNTChTdHJpbmcmIHRhYmxlSFRNTCwgSlNDOjpUeXBlQ291bnRT
ZXQqCiAgICAgICAgIHJldHVybjsKIAogICAgIGZvciAoSlNDOjpUeXBlQ291bnRTZXQ6OmNvbnN0
X2l0ZXJhdG9yIGl0ZXIgPSB0eXBlQ291bnRTZXQtPmJlZ2luKCk7IGl0ZXIgIT0gdHlwZUNvdW50
U2V0LT5lbmQoKTsgKytpdGVyKQotICAgICAgICB0YWJsZUhUTUwgKz0gbnVtYmVyVG9IVE1MVHIo
aXRlci0+Zmlyc3QsIGl0ZXItPnNlY29uZCk7CisgICAgICAgIHRhYmxlSFRNTCArPSBudW1iZXJU
b0hUTUxUcihpdGVyLT5rZXksIGl0ZXItPnZhbHVlKTsKIH0KIAogc3RhdGljIFN0cmluZyBtZW1v
cnlQYWdlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBw
b3J0L0ZyYW1lTGF5ZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBw
b3J0L0ZyYW1lTGF5ZXJzLmNwcAppbmRleCBhNDlmNTk0ZjJjMjBjMmMzMTc5MzIzOTJkNzFhNTQ1
Njg5YjVjNDY3Li4yN2M2MmI2MDAwZDU3NjJkMzllZDExNjJmZWJkNDM2YjQzMzhkNTVlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9GcmFtZUxheWVy
cy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvRnJhbWVM
YXllcnMuY3BwCkBAIC05MSw3ICs5MSw3IEBAIHZvaWQgRnJhbWVMYXllcnM6OnJlbW92ZUxheWVy
QnlGcmFtZShGcmFtZSogZnJhbWUpCiAgICAgQVNTRVJUKGZyYW1lKTsKICAgICBGcmFtZUxheWVy
TWFwOjppdGVyYXRvciBpdCA9IG1fZnJhbWVMYXllcnMuZmluZChmcmFtZSk7CiAgICAgaWYgKGl0
ICE9IG1fZnJhbWVMYXllcnMuZW5kKCkpIHsKLSAgICAgICAgTGF5ZXJXZWJLaXRUaHJlYWQqIGxh
eWVyID0gaXQtPnNlY29uZDsKKyAgICAgICAgTGF5ZXJXZWJLaXRUaHJlYWQqIGxheWVyID0gaXQt
PnZhbHVlOwogICAgICAgICBpZiAobGF5ZXItPnN1cGVybGF5ZXIoKSkKICAgICAgICAgICAgIGxh
eWVyLT5yZW1vdmVGcm9tU3VwZXJsYXllcigpOwogICAgICAgICBtX2ZyYW1lTGF5ZXJzLnJlbW92
ZShpdCk7CkBAIC0xMDQsNyArMTA0LDcgQEAgdm9pZCBGcmFtZUxheWVyczo6Y29tbWl0T25XZWJL
aXRUaHJlYWQoZG91YmxlIHNjYWxlKQogICAgIEFTU0VSVChtX3Jvb3RMYXllcik7CiAgICAgaWYg
KCFpc1Jvb3RMYXllck1haW5GcmFtZUxheWVyKCkpIHsKICAgICAgICAgZm9yIChGcmFtZUxheWVy
TWFwOjppdGVyYXRvciBpdCA9IG1fZnJhbWVMYXllcnMuYmVnaW4oKTsgaXQgIT0gbV9mcmFtZUxh
eWVycy5lbmQoKTsgKytpdCkKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNldEFic29sdXRlT2Zm
c2V0KGZyYW1lTGF5ZXJBYnNvbHV0ZU9mZnNldChpdC0+Zmlyc3QpKTsKKyAgICAgICAgICAgIGl0
LT52YWx1ZS0+c2V0QWJzb2x1dGVPZmZzZXQoZnJhbWVMYXllckFic29sdXRlT2Zmc2V0KGl0LT5r
ZXkpKTsKICAgICB9CiAgICAgbV9yb290TGF5ZXItPmNvbW1pdE9uV2ViS2l0VGhyZWFkKHNjYWxl
KTsKIH0KQEAgLTExMiw3ICsxMTIsNyBAQCB2b2lkIEZyYW1lTGF5ZXJzOjpjb21taXRPbldlYktp
dFRocmVhZChkb3VibGUgc2NhbGUpCiB2b2lkIEZyYW1lTGF5ZXJzOjpjYWxjdWxhdGVSb290TGF5
ZXIoKQogewogICAgIGlmIChtX2ZyYW1lTGF5ZXJzLnNpemUoKSA9PSAxICYmIG1fZnJhbWVMYXll
cnMuYmVnaW4oKS0+Zmlyc3QgPT0gbV9wYWdlUHJpdmF0ZS0+bV9tYWluRnJhbWUpCi0gICAgICAg
IG1fcm9vdExheWVyID0gbV9mcmFtZUxheWVycy5iZWdpbigpLT5zZWNvbmQ7CisgICAgICAgIG1f
cm9vdExheWVyID0gbV9mcmFtZUxheWVycy5iZWdpbigpLT52YWx1ZTsKICAgICBlbHNlIGlmICht
X3Jvb3RHcmFwaGljc0xheWVyKQogICAgICAgICBtX3Jvb3RMYXllciA9IG1fcm9vdEdyYXBoaWNz
TGF5ZXItPnBsYXRmb3JtTGF5ZXIoKTsKICAgICBlbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5j
cHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHZW9sb2NhdGlvblBlcm1pc3Npb25S
ZXF1ZXN0TWFuYWdlci5jcHAKaW5kZXggNGMwZWQ5Y2Q3MTdiNmY0ZDVhYTZhZmFmOTcwYmViNjk2
Nzk2ODlkMy4uMWVlYWM2NjdiZGY2NmIzZjE5M2ZiMzM1YTM4NzEyOGZiYzkxMjY3NCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViR2VvbG9jYXRpb25QZXJtaXNzaW9u
UmVxdWVzdE1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdl
b2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyLmNwcApAQCAtNjQsNyArNjQsNyBAQCBi
b29sIFdlYkdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyOjpyZW1vdmUoY29uc3Qg
V2ViS2l0OjpXZWJHZW9sb2NhdGlvbgogICAgIEdlb2xvY2F0aW9uSWRNYXA6Oml0ZXJhdG9yIGl0
ID0gbV9wcml2YXRlLT5tX2dlb2xvY2F0aW9uSWRNYXAuZmluZChnZW9sb2NhdGlvbik7CiAgICAg
aWYgKGl0ID09IG1fcHJpdmF0ZS0+bV9nZW9sb2NhdGlvbklkTWFwLmVuZCgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgaWQgPSBpdC0+c2Vjb25kOworICAgIGlkID0gaXQtPnZhbHVlOwog
ICAgIG1fcHJpdmF0ZS0+bV9nZW9sb2NhdGlvbklkTWFwLnJlbW92ZShpdCk7CiAgICAgbV9wcml2
YXRlLT5tX2lkR2VvbG9jYXRpb25NYXAucmVtb3ZlKGlkKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTc1LDcgKzc1LDcgQEAgYm9vbCBXZWJHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdl
cjo6cmVtb3ZlKGludCBpZCwgV2ViS2l0OjpXZWJHZW9sb2NhdGkKICAgICBJZEdlb2xvY2F0aW9u
TWFwOjppdGVyYXRvciBpdCA9IG1fcHJpdmF0ZS0+bV9pZEdlb2xvY2F0aW9uTWFwLmZpbmQoaWQp
OwogICAgIGlmIChpdCA9PSBtX3ByaXZhdGUtPm1faWRHZW9sb2NhdGlvbk1hcC5lbmQoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEdlb2xvY2F0aW9uKiBnZW9sb2NhdGlvbiA9IGl0LT5z
ZWNvbmQ7CisgICAgR2VvbG9jYXRpb24qIGdlb2xvY2F0aW9uID0gaXQtPnZhbHVlOwogICAgIHBl
cm1pc3Npb25SZXF1ZXN0ID0gV2ViR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdChnZW9sb2Nh
dGlvbik7CiAgICAgbV9wcml2YXRlLT5tX2lkR2VvbG9jYXRpb25NYXAucmVtb3ZlKGl0KTsKICAg
ICBtX3ByaXZhdGUtPm1fZ2VvbG9jYXRpb25JZE1hcC5yZW1vdmUoZ2VvbG9jYXRpb24pOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCTWV0YWRhdGEuY3BwIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCTWV0YWRhdGEuY3BwCmluZGV4IDAxZDg3
OGEwYTlmMmMxYzg5MTQ5MTkxYmM4Yzg3MWQ4Y2RjZjY1MzcuLmYyZmMyODU5NDQ0YzQ4YTcyZGQ5
NGFkYzExZDE4ODE3ZjVlYjQ1ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYklEQk1ldGFkYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJJREJNZXRhZGF0YS5jcHAKQEAgLTQ2LDcgKzQ2LDcgQEAgV2ViSURCTWV0YWRhdGE6OldlYklE
Qk1ldGFkYXRhKGNvbnN0IFdlYkNvcmU6OklEQkRhdGFiYXNlTWV0YWRhdGEmIG1ldGFkYXRhKQog
CiAgICAgc2l6ZV90IGkgPSAwOwogICAgIGZvciAoSURCRGF0YWJhc2VNZXRhZGF0YTo6T2JqZWN0
U3RvcmVNYXA6OmNvbnN0X2l0ZXJhdG9yIHN0b3JlSXRlcmF0b3IgPSBtZXRhZGF0YS5vYmplY3RT
dG9yZXMuYmVnaW4oKTsgc3RvcmVJdGVyYXRvciAhPSBtZXRhZGF0YS5vYmplY3RTdG9yZXMuZW5k
KCk7ICsrc3RvcmVJdGVyYXRvcikgewotICAgICAgICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFk
YXRhJiBvYmplY3RTdG9yZSA9IHN0b3JlSXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgY29uc3Qg
SURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmUgPSBzdG9yZUl0ZXJhdG9yLT52YWx1
ZTsKICAgICAgICAgT2JqZWN0U3RvcmUgd2ViT2JqZWN0U3RvcmU7CiAgICAgICAgIHdlYk9iamVj
dFN0b3JlLm5hbWUgPSBvYmplY3RTdG9yZS5uYW1lOwogICAgICAgICB3ZWJPYmplY3RTdG9yZS5r
ZXlQYXRoID0gb2JqZWN0U3RvcmUua2V5UGF0aDsKQEAgLTU1LDcgKzU1LDcgQEAgV2ViSURCTWV0
YWRhdGE6OldlYklEQk1ldGFkYXRhKGNvbnN0IFdlYkNvcmU6OklEQkRhdGFiYXNlTWV0YWRhdGEm
IG1ldGFkYXRhKQogCiAgICAgICAgIHNpemVfdCBqID0gMDsKICAgICAgICAgZm9yIChJREJPYmpl
Y3RTdG9yZU1ldGFkYXRhOjpJbmRleE1hcDo6Y29uc3RfaXRlcmF0b3IgaW5kZXhJdGVyYXRvciA9
IG9iamVjdFN0b3JlLmluZGV4ZXMuYmVnaW4oKTsgaW5kZXhJdGVyYXRvciAhPSBvYmplY3RTdG9y
ZS5pbmRleGVzLmVuZCgpOyArK2luZGV4SXRlcmF0b3IpIHsKLSAgICAgICAgICAgIGNvbnN0IElE
QkluZGV4TWV0YWRhdGEmIGluZGV4ID0gaW5kZXhJdGVyYXRvci0+c2Vjb25kOworICAgICAgICAg
ICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXggPSBpbmRleEl0ZXJhdG9yLT52YWx1ZTsK
ICAgICAgICAgICAgIEluZGV4IHdlYkluZGV4OwogICAgICAgICAgICAgd2ViSW5kZXgubmFtZSA9
IGluZGV4Lm5hbWU7CiAgICAgICAgICAgICB3ZWJJbmRleC5rZXlQYXRoID0gaW5kZXgua2V5UGF0
aDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkludGVudC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJbnRlbnQuY3BwCmluZGV4IDU1Nzc1ZWNm
Y2RjMTYyMDRlNTg0MDZhMTU3OGFlOGViNjY4N2VkOGMuLjA0MWM3ZjJlOWM1MDM1NzU5YmQ4ZTNl
YmIzNDNmYzRjZmZkYjdkMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkludGVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW50ZW50
LmNwcApAQCAtMTg4LDcgKzE4OCw3IEBAIFdlYlN0cmluZyBXZWJJbnRlbnQ6OmV4dHJhc1ZhbHVl
KGNvbnN0IFdlYlN0cmluZyYgbmFtZSkgY29uc3QKICAgICBXVEY6Okhhc2hNYXA8U3RyaW5nLCBT
dHJpbmc+Ojpjb25zdF9pdGVyYXRvciB2YWwgPSBtX3ByaXZhdGUtPmV4dHJhcygpLmZpbmQobmFt
ZSk7CiAgICAgaWYgKHZhbCA9PSBtX3ByaXZhdGUtPmV4dHJhcygpLmVuZCgpKQogICAgICAgICBy
ZXR1cm4gV2ViU3RyaW5nKCk7Ci0gICAgcmV0dXJuIHZhbC0+c2Vjb25kOworICAgIHJldHVybiB2
YWwtPnZhbHVlOwogI2Vsc2UKICAgICByZXR1cm4gV2ViU3RyaW5nKCk7CiAjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViU29ja2V0RXh0ZW5zaW9uRGlz
cGF0Y2hlclRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJTb2NrZXRF
eHRlbnNpb25EaXNwYXRjaGVyVGVzdC5jcHAKaW5kZXggMzU4OTgzYjgzOTkzMTRjZGEwMzdjOGMw
MzI0OWVlOWI2NzJlOTY3Yi4uMjQ1MTRjZDU4ZmJmZDAwYWFhODg3MjQyYTFhYzM2MzMxY2FlYjc4
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJTb2NrZXRFeHRl
bnNpb25EaXNwYXRjaGVyVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9XZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyVGVzdC5jcHAKQEAgLTEwMywxMCArMTAzLDEw
IEBAIFRFU1RfRihXZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyVGVzdCwgVGVzdFBhcmFtZXRl
cnMpCiAgICAgRVhQRUNUX0VRKDIsIG1fcGFyc2VkUGFyYW1ldGVyc1swXS5zaXplKCkpOwogICAg
IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+OjppdGVyYXRvciBwYXJhbWV0ZXIgPSBtX3BhcnNlZFBh
cmFtZXRlcnNbMF0uZmluZCgibWF4LWNoYW5uZWxzIik7CiAgICAgRVhQRUNUX1RSVUUocGFyYW1l
dGVyICE9IG1fcGFyc2VkUGFyYW1ldGVyc1swXS5lbmQoKSk7Ci0gICAgRVhQRUNUX0VRKCI0Iiwg
cGFyYW1ldGVyLT5zZWNvbmQpOworICAgIEVYUEVDVF9FUSgiNCIsIHBhcmFtZXRlci0+dmFsdWUp
OwogICAgIHBhcmFtZXRlciA9IG1fcGFyc2VkUGFyYW1ldGVyc1swXS5maW5kKCJmbG93LWNvbnRy
b2wiKTsKICAgICBFWFBFQ1RfVFJVRShwYXJhbWV0ZXIgIT0gbV9wYXJzZWRQYXJhbWV0ZXJzWzBd
LmVuZCgpKTsKLSAgICBFWFBFQ1RfVFJVRShwYXJhbWV0ZXItPnNlY29uZC5pc051bGwoKSk7Cisg
ICAgRVhQRUNUX1RSVUUocGFyYW1ldGVyLT52YWx1ZS5pc051bGwoKSk7CiB9CiAKIFRFU1RfRihX
ZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyVGVzdCwgVGVzdE11bHRpcGxlKQpAQCAtMTMxLDEy
ICsxMzEsMTIgQEAgVEVTVF9GKFdlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXJUZXN0LCBUZXN0
TXVsdGlwbGUpCiAgICAgICAgIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBwYXJzZWRQ
YXJhbWV0ZXJzID0gbV9wYXJzZWRQYXJhbWV0ZXJzW2ldOwogICAgICAgICBFWFBFQ1RfRVEoZXhw
ZWN0ZWRbaV0ucGFyYW1ldGVycy5zaXplKCksIG1fcGFyc2VkUGFyYW1ldGVyc1tpXS5zaXplKCkp
OwogICAgICAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBp
dGVyYXRvciA9IGV4cGVjdGVkUGFyYW1ldGVycy5iZWdpbigpOyBpdGVyYXRvciAhPSBleHBlY3Rl
ZFBhcmFtZXRlcnMuZW5kKCk7ICsraXRlcmF0b3IpIHsKLSAgICAgICAgICAgIEhhc2hNYXA8U3Ry
aW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBwYXJzZWQgPSBwYXJzZWRQYXJhbWV0ZXJzLmZp
bmQoaXRlcmF0b3ItPmZpcnN0KTsKKyAgICAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+
Ojpjb25zdF9pdGVyYXRvciBwYXJzZWQgPSBwYXJzZWRQYXJhbWV0ZXJzLmZpbmQoaXRlcmF0b3It
PmtleSk7CiAgICAgICAgICAgICBFWFBFQ1RfVFJVRShwYXJzZWQgIT0gcGFyc2VkUGFyYW1ldGVy
cy5lbmQoKSk7Ci0gICAgICAgICAgICBpZiAoaXRlcmF0b3ItPnNlY29uZC5pc051bGwoKSkKLSAg
ICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShwYXJzZWQtPnNlY29uZC5pc051bGwoKSk7CisgICAg
ICAgICAgICBpZiAoaXRlcmF0b3ItPnZhbHVlLmlzTnVsbCgpKQorICAgICAgICAgICAgICAgIEVY
UEVDVF9UUlVFKHBhcnNlZC0+dmFsdWUuaXNOdWxsKCkpOwogICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIEVYUEVDVF9FUShpdGVyYXRvci0+c2Vjb25kLCBwYXJzZWQtPnNlY29uZCk7
CisgICAgICAgICAgICAgICAgRVhQRUNUX0VRKGl0ZXJhdG9yLT52YWx1ZSwgcGFyc2VkLT52YWx1
ZSk7CiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9X
ZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmwuY3BwIGIvU291cmNlL1dlYktp
dC9lZmwvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsLmNwcAppbmRleCA5
NmE1NzkxZWUyYTlmMDY1NDExZDI5ODRhYjBhNGY4MmExZmE4ZGJhLi42NmU5N2ZmOTZjNjMzMjVj
NzEzMmNjZmQ3NjQ2MGYxOGIzYmYwOTA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9X
ZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmwuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbC5jcHAKQEAg
LTU0OCw3ICs1NDgsNyBAQCB2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6ZXZhbHVhdGVT
Y3JpcHRJbklzb2xhdGVkV29ybGQoY29uc3QgRXZhc19PYmplY3QqCiAgICAgZWxzZSB7CiAgICAg
ICAgIFdURjo6SGFzaE1hcDxpbnQsIFJlZlB0cjxXZWJDb3JlOjpET01XcmFwcGVyV29ybGQgPiA+
Ojpjb25zdF9pdGVyYXRvciBpdCA9IHdvcmxkTWFwLmZpbmQod29ybGRJRCk7CiAgICAgICAgIGlm
IChpdCAhPSB3b3JsZE1hcC5lbmQoKSkKLSAgICAgICAgICAgIHNjcmlwdFdvcmxkID0gKCppdCku
c2Vjb25kOworICAgICAgICAgICAgc2NyaXB0V29ybGQgPSAoKml0KS52YWx1ZTsKICAgICAgICAg
ZWxzZSB7CiAgICAgICAgICAgICBzY3JpcHRXb3JsZCA9IFdlYkNvcmU6OlNjcmlwdENvbnRyb2xs
ZXI6OmNyZWF0ZVdvcmxkKCk7CiAgICAgICAgICAgICB3b3JsZE1hcC5zZXQod29ybGRJRCwgc2Ny
aXB0V29ybGQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQv
UGxhdGZvcm1TdHJhdGVnaWVzRWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBw
b3J0L1BsYXRmb3JtU3RyYXRlZ2llc0VmbC5jcHAKaW5kZXggNWI0MDMwOGEyMTkwNzVjMDRmZTE2
ZjA1M2FhOWMyN2QzM2FkNGQ2Zi4uMDk4ZDMwM2E0YWM1OTVjNDY3NmI5NTU4ZjI0MjU2Mjk1YzVh
N2U4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvUGxhdGZv
cm1TdHJhdGVnaWVzRWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9y
dC9QbGF0Zm9ybVN0cmF0ZWdpZXNFZmwuY3BwCkBAIC05OSw4ICs5OSw4IEBAIHZvaWQgUGxhdGZv
cm1TdHJhdGVnaWVzRWZsOjpnZXRQbHVnaW5JbmZvKGNvbnN0IFBhZ2UqIHBhZ2UsIFZlY3RvcjxQ
bHVnaW5JbmZvPiYKICAgICAgICAgZm9yIChNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbWltZVRvRGVzY3JpcHRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewogICAgICAgICAgICAgTWltZUNsYXNzSW5mbyBtaW1lOwogCi0gICAgICAgICAgICBtaW1lLnR5
cGUgPSBpdC0+Zmlyc3Q7Ci0gICAgICAgICAgICBtaW1lLmRlc2MgPSBpdC0+c2Vjb25kOworICAg
ICAgICAgICAgbWltZS50eXBlID0gaXQtPmtleTsKKyAgICAgICAgICAgIG1pbWUuZGVzYyA9IGl0
LT52YWx1ZTsKICAgICAgICAgICAgIG1pbWUuZXh0ZW5zaW9ucyA9IHBhY2thZ2UtPm1pbWVUb0V4
dGVuc2lvbnMoKS5nZXQobWltZS50eXBlKTsKICAgICAgICAgICAgIHBsdWdpbkluZm8ubWltZXMu
YXBwZW5kKG1pbWUpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9l
d2svZXdrX2ludGVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2ludGVudC5jcHAK
aW5kZXggNzZjMmQ2OGRhYTcyMTI0ZWE1YjYxYjdlMjRmMDM0YzJjMGNkYjgxZS4uODNiY2U4NzY0
YWY2YWQ3OTc0NDM2OTJmNTM5NmUzYmFhYjM1NTg4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9lZmwvZXdrL2V3a19pbnRlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tf
aW50ZW50LmNwcApAQCAtMTIwLDcgKzEyMCw3IEBAIGNvbnN0IGNoYXIqIGV3a19pbnRlbnRfZXh0
cmFfZ2V0KGNvbnN0IEV3a19JbnRlbnQqIGludGVudCwgY29uc3QgY2hhcioga2V5KQogICAgIFdU
Rjo6SGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIHZhbCA9IGNvcmUtPmV4
dHJhcygpLmZpbmQoU3RyaW5nOjpmcm9tVVRGOChrZXkpKTsKICAgICBpZiAodmFsID09IGNvcmUt
PmV4dHJhcygpLmVuZCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gZWluYV9zdHJp
bmdzaGFyZV9hZGQodmFsLT5zZWNvbmQudXRmOCgpLmRhdGEoKSk7CisgICAgcmV0dXJuIGVpbmFf
c3RyaW5nc2hhcmVfYWRkKHZhbC0+dmFsdWUudXRmOCgpLmRhdGEoKSk7CiAjZWxzZQogICAgIHJl
dHVybiAwOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3Vw
cG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNHdGsuY3BwIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29y
ZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzR3RrLmNwcAppbmRleCAyOTIxNzNhZTI5MmY1MTIx
MTg3ZThiZTUwNTAzOTNkN2MzMzg0YzVhLi45MTAzYzg0NjA5NGQ1MWY4ZjViOTQ4NzRjZDY3YWYw
NDc5OTA5YWUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9Q
bGF0Zm9ybVN0cmF0ZWdpZXNHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVT
dXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc0d0ay5jcHAKQEAgLTg4LDggKzg4LDggQEAgdm9pZCBQ
bGF0Zm9ybVN0cmF0ZWdpZXNHdGs6OmdldFBsdWdpbkluZm8oY29uc3QgUGFnZSogcGFnZSwgVmVj
dG9yPFBsdWdpbkluZm8+JgogICAgICAgICBNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5lbmQoKTsKICAgICAgICAgZm9yIChNSU1F
VG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWltZVRvRGVzY3JpcHRpb25z
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgTWltZUNsYXNzSW5mbyBt
aW1lOwotICAgICAgICAgICAgbWltZS50eXBlID0gaXQtPmZpcnN0OwotICAgICAgICAgICAgbWlt
ZS5kZXNjID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIG1pbWUudHlwZSA9IGl0LT5rZXk7Cisg
ICAgICAgICAgICBtaW1lLmRlc2MgPSBpdC0+dmFsdWU7CiAgICAgICAgICAgICBtaW1lLmV4dGVu
c2lvbnMgPSBwYWNrYWdlLT5taW1lVG9FeHRlbnNpb25zKCkuZ2V0KG1pbWUudHlwZSk7CiAgICAg
ICAgICAgICBwbHVnaW5JbmZvLm1pbWVzLmFwcGVuZChtaW1lKTsKICAgICAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGZhdmljb25kYXRhYmFzZS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZmF2aWNvbmRhdGFiYXNlLmNwcAppbmRl
eCA2YmFiZmU0ZGQ5MmU1MTQyY2UwYzRmNzJjMzlhNmNiNmMzZGRlMWZmLi5iM2ExZDc1Y2ExMmI2
YWUwZjY0NWJmOTJiMTI4YTU4MDBhMjBlY2NmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0ZmF2aWNvbmRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0ZmF2aWNvbmRhdGFiYXNlLmNwcApAQCAtNjE0LDE4ICs2MTQsMTggQEAg
c3RhdGljIHZvaWQgd2Via2l0RmF2aWNvbkRhdGFiYXNlSW1wb3J0RmluaXNoZWQoV2ViS2l0RmF2
aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSkKICAgICBWZWN0b3I8U3RyaW5nPiB0b0RlbGV0ZVVSTHM7
CiAgICAgUGVuZGluZ0ljb25SZXF1ZXN0TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBkYXRhYmFz
ZS0+cHJpdi0+cGVuZGluZ0ljb25SZXF1ZXN0cy5lbmQoKTsKICAgICBmb3IgKFBlbmRpbmdJY29u
UmVxdWVzdE1hcDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGRhdGFiYXNlLT5wcml2LT5wZW5kaW5n
SWNvblJlcXVlc3RzLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKLSAgICAgICAgU3Ry
aW5nIGljb25VUkwgPSBpY29uRGF0YWJhc2UoKS5zeW5jaHJvbm91c0ljb25VUkxGb3JQYWdlVVJM
KGl0ZXItPmZpcnN0KTsKKyAgICAgICAgU3RyaW5nIGljb25VUkwgPSBpY29uRGF0YWJhc2UoKS5z
eW5jaHJvbm91c0ljb25VUkxGb3JQYWdlVVJMKGl0ZXItPmtleSk7CiAgICAgICAgIGlmICghaWNv
blVSTC5pc0VtcHR5KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBQZW5kaW5n
SWNvblJlcXVlc3RWZWN0b3IqIGljb25zID0gaXRlci0+c2Vjb25kOworICAgICAgICBQZW5kaW5n
SWNvblJlcXVlc3RWZWN0b3IqIGljb25zID0gaXRlci0+dmFsdWU7CiAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgaWNvbnMtPnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBQZW5kaW5n
SWNvblJlcXVlc3QqIHJlcXVlc3QgPSBpY29ucy0+YXQoaSkuZ2V0KCk7CiAgICAgICAgICAgICBp
ZiAocmVxdWVzdC0+YXN5bmNSZXN1bHQoKSkKICAgICAgICAgICAgICAgICByZXF1ZXN0LT5hc3lu
Y1Jlc3VsdENvbXBsZXRlKDApOwogICAgICAgICB9CiAKLSAgICAgICAgdG9EZWxldGVVUkxzLmFw
cGVuZChpdGVyLT5maXJzdCk7CisgICAgICAgIHRvRGVsZXRlVVJMcy5hcHBlbmQoaXRlci0+a2V5
KTsKICAgICB9CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRvRGVsZXRlVVJMcy5zaXpl
KCk7ICsraSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJw
bHVnaW4uY3BwIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnBsdWdpbi5jcHAK
aW5kZXggZTAzYjFlYTZkYTMzYjdlMmYwMDIyNTVjZTg3Nzc4NjI0Y2RhNzA4Yy4uMDFkMGJiNWYy
YmZkNzAwZjZiM2M5ZmM0ZjhlNDIwYzU3MjQ4NmVjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9ndGsvd2Via2l0L3dlYmtpdHdlYnBsdWdpbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdHdlYnBsdWdpbi5jcHAKQEAgLTIzNywxMCArMjM3LDEwIEBAIEdTTGlzdCog
d2Via2l0X3dlYl9wbHVnaW5fZ2V0X21pbWV0eXBlcyhXZWJLaXRXZWJQbHVnaW4qIHBsdWdpbikK
IAogICAgIGZvciAoTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1p
bWVUb0Rlc2NyaXB0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgV2Vi
S2l0V2ViUGx1Z2luTUlNRVR5cGUqIG1pbWVUeXBlID0gZ19zbGljZV9uZXcwKFdlYktpdFdlYlBs
dWdpbk1JTUVUeXBlKTsKLSAgICAgICAgbWltZVR5cGUtPm5hbWUgPSBnX3N0cmR1cChpdC0+Zmly
c3QudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIG1pbWVUeXBlLT5kZXNjcmlwdGlvbiA9IGdfc3Ry
ZHVwKGl0LT5zZWNvbmQudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIG1pbWVUeXBlLT5uYW1lID0g
Z19zdHJkdXAoaXQtPmtleS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgbWltZVR5cGUtPmRlc2Ny
aXB0aW9uID0gZ19zdHJkdXAoaXQtPnZhbHVlLnV0ZjgoKS5kYXRhKCkpOwogCi0gICAgICAgIFZl
Y3RvcjxTdHJpbmc+IGV4dGVuc2lvbnMgPSBwcml2LT5jb3JlUGx1Z2luLT5taW1lVG9FeHRlbnNp
b25zKCkuZ2V0KGl0LT5maXJzdCk7CisgICAgICAgIFZlY3RvcjxTdHJpbmc+IGV4dGVuc2lvbnMg
PSBwcml2LT5jb3JlUGx1Z2luLT5taW1lVG9FeHRlbnNpb25zKCkuZ2V0KGl0LT5rZXkpOwogICAg
ICAgICBtaW1lVHlwZS0+ZXh0ZW5zaW9ucyA9IHN0YXRpY19jYXN0PGdjaGFyKio+KGdfbWFsbG9j
MChzaXplb2YoY2hhciopICogKGV4dGVuc2lvbnMuc2l6ZSgpICsgMSkpKTsKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4dGVuc2lvbnMuc2l6ZSgpOyBpKyspCiAgICAgICAgICAg
ICBtaW1lVHlwZS0+ZXh0ZW5zaW9uc1tpXSA9IGdfc3RyZHVwKGV4dGVuc2lvbnNbaV0udXRmOCgp
LmRhdGEoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9IaXN0b3J5L1dlYkhpc3Rv
cnkubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9IaXN0b3J5L1dlYkhpc3RvcnkubW0KaW5kZXggNjk2
NGZjOTQ5YjUxMjE3M2E2YmRjNWU3MGI1NjE4ZDMxY2I2NzdhMy4uZTc4MWQzMmZkMWRlOTUwZDkx
NGFmNDgzNDk3NjQyMGRmNTg3ZGFmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvSGlz
dG9yeS9XZWJIaXN0b3J5Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL0hpc3RvcnkvV2ViSGlz
dG9yeS5tbQpAQCAtMjM4LDcgKzIzOCw3IEBAIHN0YXRpYyBpbmxpbmUgV2ViSGlzdG9yeURhdGVL
ZXkgZGF0ZUtleShOU1RpbWVJbnRlcnZhbCBkYXRlKQogICAgICAgICByZXR1cm4gTk87CiAKICAg
ICBEYXRlVG9FbnRyaWVzTWFwOjppdGVyYXRvciBpdCA9IF9lbnRyaWVzQnlEYXRlLT5maW5kKGRh
dGVLZXkpOwotICAgIE5TTXV0YWJsZUFycmF5ICplbnRyaWVzRm9yRGF0ZSA9IGl0LT5zZWNvbmQu
Z2V0KCk7CisgICAgTlNNdXRhYmxlQXJyYXkgKmVudHJpZXNGb3JEYXRlID0gaXQtPnZhbHVlLmdl
dCgpOwogICAgIFtlbnRyaWVzRm9yRGF0ZSByZW1vdmVPYmplY3RJZGVudGljYWxUbzplbnRyeV07
CiAgICAgCiAgICAgLy8gcmVtb3ZlIHRoaXMgZGF0ZSBlbnRpcmVseSBpZiB0aGVyZSBhcmUgbm8g
b3RoZXIgZW50cmllcyBvbiBpdApAQCAtNDQwLDcgKzQ0MCw3IEBAIHN0YXRpYyBpbmxpbmUgV2Vi
SGlzdG9yeURhdGVLZXkgZGF0ZUtleShOU1RpbWVJbnRlcnZhbCBkYXRlKQogICAgICAgICBkYXlz
QXNUaW1lSW50ZXJ2YWxzLnJlc2VydmVDYXBhY2l0eShfZW50cmllc0J5RGF0ZS0+c2l6ZSgpKTsK
ICAgICAgICAgRGF0ZVRvRW50cmllc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gX2VudHJpZXNC
eURhdGUtPmVuZCgpOwogICAgICAgICBmb3IgKERhdGVUb0VudHJpZXNNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gX2VudHJpZXNCeURhdGUtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAg
ICAgICAgIGRheXNBc1RpbWVJbnRlcnZhbHMuYXBwZW5kKGl0LT5maXJzdCk7CisgICAgICAgICAg
ICBkYXlzQXNUaW1lSW50ZXJ2YWxzLmFwcGVuZChpdC0+a2V5KTsKIAogICAgICAgICBzb3J0KGRh
eXNBc1RpbWVJbnRlcnZhbHMuYmVnaW4oKSwgZGF5c0FzVGltZUludGVydmFscy5lbmQoKSk7CiAg
ICAgICAgIHNpemVfdCBjb3VudCA9IGRheXNBc1RpbWVJbnRlcnZhbHMuc2l6ZSgpOwpAQCAtODk3
LDcgKzg5Nyw3IEBAIFdlYkhpc3RvcnlXcml0ZXI6OldlYkhpc3RvcnlXcml0ZXIoRGF0ZVRvRW50
cmllc01hcCogZW50cmllc0J5RGF0ZSkKICAgICBtX2RhdGVLZXlzLnJlc2VydmVDYXBhY2l0eSht
X2VudHJpZXNCeURhdGUtPnNpemUoKSk7CiAgICAgRGF0ZVRvRW50cmllc01hcDo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gbV9lbnRyaWVzQnlEYXRlLT5lbmQoKTsKICAgICBmb3IgKERhdGVUb0VudHJp
ZXNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9lbnRyaWVzQnlEYXRlLT5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCi0gICAgICAgIG1fZGF0ZUtleXMuYXBwZW5kKGl0LT5maXJzdCk7CisgICAg
ICAgIG1fZGF0ZUtleXMuYXBwZW5kKGl0LT5rZXkpOwogICAgIHNvcnQobV9kYXRlS2V5cy5iZWdp
bigpLCBtX2RhdGVLZXlzLmVuZCgpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9t
YWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2Vi
Q29yZVN0YXRpc3RpY3MubW0KaW5kZXggMjk2ZGQ2YjI1YmQ4YmRiNzdhM2M2ODBlMTMyNGU1YjM5
N2QyNjZjMy4uOGRlNjMxMzliNzc0Mzc2YmJkMWY3YzExMDZmNmVlZGJkZDNlNWIyNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbQorKysgYi9T
b3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tCkBAIC04OSw4ICs4OSw4
IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogICAgIE93blB0cjxUeXBlQ291bnRTZXQ+IGNv
dW50cyhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAucHJvdGVjdGVkT2Jq
ZWN0VHlwZUNvdW50cygpKTsKICAgICBIYXNoQ291bnRlZFNldDxjb25zdCBjaGFyKj46Oml0ZXJh
dG9yIGVuZCA9IGNvdW50cy0+ZW5kKCk7CiAgICAgZm9yIChIYXNoQ291bnRlZFNldDxjb25zdCBj
aGFyKj46Oml0ZXJhdG9yIGl0ID0gY291bnRzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdC0+c2Vjb25kOyArK2kpCi0gICAgICAg
ICAgICBbcmVzdWx0IGFkZE9iamVjdDpbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6aXQt
PmZpcnN0XV07CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdC0+dmFsdWU7ICsr
aSkKKyAgICAgICAgICAgIFtyZXN1bHQgYWRkT2JqZWN0OltOU1N0cmluZyBzdHJpbmdXaXRoVVRG
OFN0cmluZzppdC0+a2V5XV07CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTEwNCw4
ICsxMDQsOCBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKICAgICBPd25QdHI8VHlwZUNvdW50
U2V0PiBjb3VudHMoSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLm9iamVj
dFR5cGVDb3VudHMoKSk7CiAgICAgSGFzaENvdW50ZWRTZXQ8Y29uc3QgY2hhcio+OjppdGVyYXRv
ciBlbmQgPSBjb3VudHMtPmVuZCgpOwogICAgIGZvciAoSGFzaENvdW50ZWRTZXQ8Y29uc3QgY2hh
cio+OjppdGVyYXRvciBpdCA9IGNvdW50cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXQtPnNlY29uZDsgKytpKQotICAgICAgICAg
ICAgW3Jlc3VsdCBhZGRPYmplY3Q6W05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOml0LT5m
aXJzdF1dOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXQtPnZhbHVlOyArK2kp
CisgICAgICAgICAgICBbcmVzdWx0IGFkZE9iamVjdDpbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhT
dHJpbmc6aXQtPmtleV1dOwogICAgIAogICAgIHJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkhvc3RNYW5h
Z2VyLm1tIGIvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5I
b3N0TWFuYWdlci5tbQppbmRleCBlNDlkNTBmNGJjYmQ1YzFjYmNiODM3YzhmMjk0NjNkNGRjMmY0
OWY2Li4zY2UwODliZWQyN2E0YzIzYWYyM2M3NTA5MjRhOWQ4OWFjMGM3MTFjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkhvc3RNYW5h
Z2VyLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1
Z2luSG9zdE1hbmFnZXIubW0KQEAgLTczLDcgKzczLDcgQEAgTmV0c2NhcGVQbHVnaW5Ib3N0UHJv
eHkqIE5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXI6Omhvc3RGb3JQbHVnaW4oY29uc3QgV1RGOjpT
dHIKICAgICAKICAgICAvLyBUaGUgcGFja2FnZSB3YXMgYWxyZWFkeSBpbiB0aGUgbWFwLCBqdXN0
IHJldHVybiBpdC4KICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXR1cm4g
cmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3It
PnZhbHVlOwogICAgICAgICAKICAgICBtYWNoX3BvcnRfdCBjbGllbnRQb3J0OwogICAgIGlmICht
YWNoX3BvcnRfYWxsb2NhdGUobWFjaF90YXNrX3NlbGYoKSwgTUFDSF9QT1JUX1JJR0hUX1JFQ0VJ
VkUsICZjbGllbnRQb3J0KSAhPSBLRVJOX1NVQ0NFU1MpIHsKQEAgLTk1LDcgKzk1LDcgQEAgTmV0
c2NhcGVQbHVnaW5Ib3N0UHJveHkqIE5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXI6Omhvc3RGb3JQ
bHVnaW4oY29uc3QgV1RGOjpTdHIKICAgICAKICAgICBOZXRzY2FwZVBsdWdpbkhvc3RQcm94eSog
aG9zdFByb3h5ID0gbmV3IE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5KGNsaWVudFBvcnQsIHBsdWdp
bkhvc3RQb3J0LCBwbHVnaW5Ib3N0UFNOLCBzaG91bGRDYWNoZU1pc3NpbmdQcm9wZXJ0aWVzQW5k
TWV0aG9kcyk7CiAgICAgCi0gICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBob3N0UHJveHk7
CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGhvc3RQcm94eTsKICAgICAKICAgICByZXR1
cm4gaG9zdFByb3h5OwogfQpAQCAtMjA0LDcgKzIwNCw3IEBAIHZvaWQgTmV0c2NhcGVQbHVnaW5I
b3N0TWFuYWdlcjo6cGx1Z2luSG9zdERpZWQoTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkqIHBsdWdp
bkhvCiAKICAgICAvLyBUaGlzIGhhcyBPKG4pIGNvbXBsZXhpdHkgYnV0IHRoZSBudW1iZXIgb2Yg
YWN0aXZlIHBsdWctaW4gaG9zdHMgaXMgdmVyeSBzbWFsbCBzbyBpdCBzaG91bGRuJ3QgbWF0dGVy
LgogICAgIGZvciAoUGx1Z2luSG9zdE1hcDo6aXRlcmF0b3IgaXQgPSBtX3BsdWdpbkhvc3RzLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnNlY29uZCA9PSBwbHVn
aW5Ib3N0KSB7CisgICAgICAgIGlmIChpdC0+dmFsdWUgPT0gcGx1Z2luSG9zdCkgewogICAgICAg
ICAgICAgbV9wbHVnaW5Ib3N0cy5yZW1vdmUoaXQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CkBAIC0yODYsNyArMjg2LDcgQEAgdm9pZCBOZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2Vy
OjpkaWRDcmVhdGVXaW5kb3coKQogICAgIC8vIFNlZSBpZiBhbnkgb2Ygb3VyIGhvc3RzIGFyZSBp
biBmdWxsLXNjcmVlbiBtb2RlLgogICAgIFBsdWdpbkhvc3RNYXA6Oml0ZXJhdG9yIGVuZCA9IG1f
cGx1Z2luSG9zdHMuZW5kKCk7CiAgICAgZm9yIChQbHVnaW5Ib3N0TWFwOjppdGVyYXRvciBpdCA9
IG1fcGx1Z2luSG9zdHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIE5ldHNj
YXBlUGx1Z2luSG9zdFByb3h5KiBob3N0UHJveHkgPSBpdC0+c2Vjb25kOworICAgICAgICBOZXRz
Y2FwZVBsdWdpbkhvc3RQcm94eSogaG9zdFByb3h5ID0gaXQtPnZhbHVlOwogICAgICAgICAKICAg
ICAgICAgaWYgKCFob3N0UHJveHktPmlzTWVudUJhclZpc2libGUoKSkgewogICAgICAgICAgICAg
Ly8gTWFrZSBvdXJzZWx2ZXMgdGhlIGZyb250IHByb2Nlc3MuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkhvc3RQcm94eS5tbSBiL1Nv
dXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdFByb3h5Lm1t
CmluZGV4IGFmNmYyYmU5OTY5Y2IxMWNiMzNhNTYzMTdmZGRhOGMyY2Y2MWNmNWUuLjBmYjI2ZDBh
OWI4NDc1MjI2YmVmY2MzNDk2OGI5ZjUwNmViOTE1YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdFByb3h5Lm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdFByb3h5Lm1t
CkBAIC0xNDQsNyArMTQ0LDcgQEAgdm9pZCBOZXRzY2FwZVBsdWdpbkhvc3RQcm94eTo6cGx1Z2lu
SG9zdERpZWQoKQogICAKICAgICBQbHVnaW5JbnN0YW5jZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gaW5zdGFuY2VzLmVuZCgpOwogICAgIGZvciAoUGx1Z2luSW5zdGFuY2VNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gaW5zdGFuY2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAg
aXQtPnNlY29uZC0+cGx1Z2luSG9zdERpZWQoKTsKKyAgICAgICAgaXQtPnZhbHVlLT5wbHVnaW5I
b3N0RGllZCgpOwogICAgIAogICAgIE5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXI6OnNoYXJlZCgp
LnBsdWdpbkhvc3REaWVkKHRoaXMpOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9t
YWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tIGIvU291cmNl
L1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1t
CmluZGV4IDkxMDQ0MzA1ZmJhNmIyM2FiMjU1NTA2YzExN2ExMjRhYzQ5MzFjYjUuLjAxZTQ4ODIw
NDk4ZTIzMWY1ZTE1MDllM2M2MmIxZGY5MmZjNzA3ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNl
UHJveHkubW0KQEAgLTE0NSw3ICsxNDUsNyBAQCB1aW50MzJfdCBOZXRzY2FwZVBsdWdpbkluc3Rh
bmNlUHJveHk6OkxvY2FsT2JqZWN0TWFwOjppZEZvck9iamVjdChKU0dsb2JhbERhdGEmCiAgICAg
CiAgICAgSGFzaE1hcDxKU0M6OkpTT2JqZWN0KiwgcGFpcjx1aW50MzJfdCwgdWludDMyX3Q+ID46
Oml0ZXJhdG9yIGl0ZXIgPSBtX2pzT2JqZWN0VG9JRE1hcC5maW5kKG9iamVjdCk7CiAgICAgaWYg
KGl0ZXIgIT0gbV9qc09iamVjdFRvSURNYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdGVyLT5z
ZWNvbmQuZmlyc3Q7CisgICAgICAgIHJldHVybiBpdGVyLT52YWx1ZS5maXJzdDsKICAgICAKICAg
ICBkbyB7CiAgICAgICAgIG9iamVjdElEID0gKyttX29iamVjdElEQ291bnRlcjsKQEAgLTE2Miw3
ICsxNjIsNyBAQCB2b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6TG9jYWxPYmplY3RN
YXA6OnJldGFpbihKU0M6OkpTT2JqZWN0KiBvYmplY3QpCiAgICAgSGFzaE1hcDxKU0M6OkpTT2Jq
ZWN0KiwgcGFpcjx1aW50MzJfdCwgdWludDMyX3Q+ID46Oml0ZXJhdG9yIGl0ZXIgPSBtX2pzT2Jq
ZWN0VG9JRE1hcC5maW5kKG9iamVjdCk7CiAgICAgQVNTRVJUKGl0ZXIgIT0gbV9qc09iamVjdFRv
SURNYXAuZW5kKCkpOwogCi0gICAgaXRlci0+c2Vjb25kLnNlY29uZCA9IGl0ZXItPnNlY29uZC5z
ZWNvbmQgKyAxOworICAgIGl0ZXItPnZhbHVlLnNlY29uZCA9IGl0ZXItPnZhbHVlLnNlY29uZCAr
IDE7CiB9CiAKIHZvaWQgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpMb2NhbE9iamVjdE1h
cDo6cmVsZWFzZShKU0M6OkpTT2JqZWN0KiBvYmplY3QpCkBAIC0xNzAsMTAgKzE3MCwxMCBAQCB2
b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6TG9jYWxPYmplY3RNYXA6OnJlbGVhc2Uo
SlNDOjpKU09iamVjdCogb2JqZWN0KQogICAgIEhhc2hNYXA8SlNDOjpKU09iamVjdCosIHBhaXI8
dWludDMyX3QsIHVpbnQzMl90PiA+OjppdGVyYXRvciBpdGVyID0gbV9qc09iamVjdFRvSURNYXAu
ZmluZChvYmplY3QpOwogICAgIEFTU0VSVChpdGVyICE9IG1fanNPYmplY3RUb0lETWFwLmVuZCgp
KTsKIAotICAgIEFTU0VSVChpdGVyLT5zZWNvbmQuc2Vjb25kID4gMCk7Ci0gICAgaXRlci0+c2Vj
b25kLnNlY29uZCA9IGl0ZXItPnNlY29uZC5zZWNvbmQgLSAxOwotICAgIGlmICghaXRlci0+c2Vj
b25kLnNlY29uZCkgewotICAgICAgICBtX2lkVG9KU09iamVjdE1hcC5yZW1vdmUoaXRlci0+c2Vj
b25kLmZpcnN0KTsKKyAgICBBU1NFUlQoaXRlci0+dmFsdWUuc2Vjb25kID4gMCk7CisgICAgaXRl
ci0+dmFsdWUuc2Vjb25kID0gaXRlci0+dmFsdWUuc2Vjb25kIC0gMTsKKyAgICBpZiAoIWl0ZXIt
PnZhbHVlLnNlY29uZCkgeworICAgICAgICBtX2lkVG9KU09iamVjdE1hcC5yZW1vdmUoaXRlci0+
dmFsdWUuZmlyc3QpOwogICAgICAgICBtX2pzT2JqZWN0VG9JRE1hcC5yZW1vdmUoaXRlcik7CiAg
ICAgfQogfQpAQCAtMTk3LDEwICsxOTcsMTAgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNl
UHJveHk6OkxvY2FsT2JqZWN0TWFwOjpmb3JnZXQodWludDMyX3Qgb2JqZWN0SUQpCiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIEhhc2hNYXA8SlNDOjpKU09iamVjdCosIHBhaXI8
dWludDMyX3QsIHVpbnQzMl90PiA+OjppdGVyYXRvciBySXRlciA9IG1fanNPYmplY3RUb0lETWFw
LmZpbmQoaXRlci0+c2Vjb25kLmdldCgpKTsKKyAgICBIYXNoTWFwPEpTQzo6SlNPYmplY3QqLCBw
YWlyPHVpbnQzMl90LCB1aW50MzJfdD4gPjo6aXRlcmF0b3Igckl0ZXIgPSBtX2pzT2JqZWN0VG9J
RE1hcC5maW5kKGl0ZXItPnZhbHVlLmdldCgpKTsKIAogICAgIC8vIElmIHRoZSBvYmplY3QgaXMg
YmVpbmcgc2VudCB0byBwbHVnLWluIHJpZ2h0IG5vdywgdGhlbiBpdCdzIG5vdCB0aGUgdGltZSB0
byBmb3JnZXQuCi0gICAgaWYgKHJJdGVyLT5zZWNvbmQuc2Vjb25kICE9IDEpCisgICAgaWYgKHJJ
dGVyLT52YWx1ZS5zZWNvbmQgIT0gMSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgbV9q
c09iamVjdFRvSURNYXAucmVtb3ZlKHJJdGVyKTsKQEAgLTMzMCw3ICszMzAsNyBAQCB2b2lkIE5l
dHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6ZGVzdHJveSgpCiAgICAgCiAgICAgRnJhbWVMb2Fk
TWFwOjppdGVyYXRvciBlbmQgPSBtX3BlbmRpbmdGcmFtZUxvYWRzLmVuZCgpOwogICAgIGZvciAo
RnJhbWVMb2FkTWFwOjppdGVyYXRvciBpdCA9IG1fcGVuZGluZ0ZyYW1lTG9hZHMuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KQotICAgICAgICBbKGl0LT5maXJzdCkgX3NldEludGVybmFsTG9hZERl
bGVnYXRlOm5pbF07CisgICAgICAgIFsoaXQtPmtleSkgX3NldEludGVybmFsTG9hZERlbGVnYXRl
Om5pbF07CiAKICAgICBfV0tQSERlc3Ryb3lQbHVnaW5JbnN0YW5jZShtX3BsdWdpbkhvc3RQcm94
eS0+cG9ydCgpLCBtX3BsdWdpbklELCByZXF1ZXN0SUQpOwogIApAQCAtNjc4LDcgKzY3OCw3IEBA
IHZvaWQgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Ojp3ZWJGcmFtZURpZEZpbmlzaExvYWRX
aXRoUmVhc29uKFdlYkZyYW1lKiB3ZWJGCiAgICAgRnJhbWVMb2FkTWFwOjppdGVyYXRvciBpdCA9
IG1fcGVuZGluZ0ZyYW1lTG9hZHMuZmluZCh3ZWJGcmFtZSk7CiAgICAgQVNTRVJUKGl0ICE9IG1f
cGVuZGluZ0ZyYW1lTG9hZHMuZW5kKCkpOwogICAgICAgICAKLSAgICBQbHVnaW5SZXF1ZXN0KiBw
bHVnaW5SZXF1ZXN0ID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICBQbHVnaW5SZXF1ZXN0KiBwbHVn
aW5SZXF1ZXN0ID0gaXQtPnZhbHVlLmdldCgpOwogICAgIF9XS1BITG9hZFVSTE5vdGlmeShtX3Bs
dWdpbkhvc3RQcm94eS0+cG9ydCgpLCBtX3BsdWdpbklELCBwbHVnaW5SZXF1ZXN0LT5yZXF1ZXN0
SUQoKSwgcmVhc29uKTsKICAKICAgICBtX3BlbmRpbmdGcmFtZUxvYWRzLnJlbW92ZShpdCk7CkBA
IC0xNjI4LDcgKzE2MjgsNyBAQCB2b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6Y2Fu
Y2VsQ2hlY2tJZkFsbG93ZWRUb0xvYWRVUkwodWludDMyX3QgY2hlY2tJRAogICAgIGlmIChpdCA9
PSBtX3VybENoZWNrcy5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIFdlYlBsdWdp
bkNvbnRhaW5lckNoZWNrICpjaGVjayA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgV2ViUGx1Z2lu
Q29udGFpbmVyQ2hlY2sgKmNoZWNrID0gaXQtPnZhbHVlLmdldCgpOwogICAgIFtjaGVjayBjYW5j
ZWxdOwogICAgIG1fdXJsQ2hlY2tzLnJlbW92ZShpdCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9Qcm94eUluc3RhbmNlLm1tIGIvU291cmNlL1dlYktp
dC9tYWMvUGx1Z2lucy9Ib3N0ZWQvUHJveHlJbnN0YW5jZS5tbQppbmRleCA4OThjNWUyMTQwNjlm
YzliYmZkMzQ5YzViNGM2YmE4ZjczNTVlMjcwLi41OThlZThmMzdiMDEwMWE1NjNkYTljNDZkNWJk
NWE0NWQ1NWI3NzFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3Rl
ZC9Qcm94eUluc3RhbmNlLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVk
L1Byb3h5SW5zdGFuY2UubW0KQEAgLTM1OSw4ICszNTksOCBAQCBNZXRob2RMaXN0IFByb3h5SW5z
dGFuY2U6Om1ldGhvZHNOYW1lZChQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogICAgIE1ldGhv
ZE1hcDo6aXRlcmF0b3IgZXhpc3RpbmdNYXBFbnRyeSA9IG1fbWV0aG9kcy5maW5kKG5hbWUuaW1w
bCgpKTsKICAgICBpZiAoZXhpc3RpbmdNYXBFbnRyeSAhPSBtX21ldGhvZHMuZW5kKCkpIHsKICAg
ICAgICAgTWV0aG9kTGlzdCBtZXRob2RMaXN0OwotICAgICAgICBpZiAoZXhpc3RpbmdNYXBFbnRy
eS0+c2Vjb25kKQotICAgICAgICAgICAgbWV0aG9kTGlzdC5hcHBlbmQoZXhpc3RpbmdNYXBFbnRy
eS0+c2Vjb25kKTsKKyAgICAgICAgaWYgKGV4aXN0aW5nTWFwRW50cnktPnZhbHVlKQorICAgICAg
ICAgICAgbWV0aG9kTGlzdC5hcHBlbmQoZXhpc3RpbmdNYXBFbnRyeS0+dmFsdWUpOwogICAgICAg
ICByZXR1cm4gbWV0aG9kTGlzdDsKICAgICB9CiAgICAgCkBAIC0zODIsMTEgKzM4MiwxMSBAQCBN
ZXRob2RMaXN0IFByb3h5SW5zdGFuY2U6Om1ldGhvZHNOYW1lZChQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lKQogICAgIC8vIEFkZCBhIG5ldyBlbnRyeSB0byB0aGUgbWFwIHVubGVzcyBhbiBlbnRy
eSB3YXMgYWRkZWQgd2hpbGUgd2Ugd2VyZSBpbiB3YWl0Rm9yUmVwbHkuCiAgICAgTWV0aG9kTWFw
OjpBZGRSZXN1bHQgbWFwQWRkUmVzdWx0ID0gbV9tZXRob2RzLmFkZChuYW1lLmltcGwoKSwgMCk7
CiAgICAgaWYgKG1hcEFkZFJlc3VsdC5pc05ld0VudHJ5ICYmIHJlcGx5LT5tX3Jlc3VsdCkKLSAg
ICAgICAgbWFwQWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBuZXcgUHJveHlNZXRob2QobWV0
aG9kTmFtZSk7CisgICAgICAgIG1hcEFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBuZXcgUHJv
eHlNZXRob2QobWV0aG9kTmFtZSk7CiAKICAgICBNZXRob2RMaXN0IG1ldGhvZExpc3Q7Ci0gICAg
aWYgKG1hcEFkZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKQotICAgICAgICBtZXRob2RMaXN0LmFw
cGVuZChtYXBBZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7CisgICAgaWYgKG1hcEFkZFJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUpCisgICAgICAgIG1ldGhvZExpc3QuYXBwZW5kKG1hcEFkZFJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUpOwogICAgIHJldHVybiBtZXRob2RMaXN0OwogfQogCkBAIC00MDIs
NyArNDAyLDcgQEAgRmllbGQqIFByb3h5SW5zdGFuY2U6OmZpZWxkTmFtZWQoUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSkKICAgICAvLyBJZiB3ZSBhbHJlYWR5IGhhdmUgYW4gZW50cnkgaW4gdGhl
IG1hcCwgdXNlIGl0LgogICAgIEZpZWxkTWFwOjppdGVyYXRvciBleGlzdGluZ01hcEVudHJ5ID0g
bV9maWVsZHMuZmluZChuYW1lLmltcGwoKSk7CiAgICAgaWYgKGV4aXN0aW5nTWFwRW50cnkgIT0g
bV9maWVsZHMuZW5kKCkpCi0gICAgICAgIHJldHVybiBleGlzdGluZ01hcEVudHJ5LT5zZWNvbmQ7
CisgICAgICAgIHJldHVybiBleGlzdGluZ01hcEVudHJ5LT52YWx1ZTsKICAgICAKICAgICB1aW50
NjRfdCBpZGVudGlmaWVyID0gcmVpbnRlcnByZXRfY2FzdDx1aW50NjRfdD4oX05QTl9HZXRTdHJp
bmdJZGVudGlmaWVyKG5hbWUuYXNjaWkoKS5kYXRhKCkpKTsKICAgICB1aW50MzJfdCByZXF1ZXN0
SUQgPSBtX2luc3RhbmNlUHJveHktPm5leHRSZXF1ZXN0SUQoKTsKQEAgLTQyMiw4ICs0MjIsOCBA
QCBGaWVsZCogUHJveHlJbnN0YW5jZTo6ZmllbGROYW1lZChQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lKQogICAgIC8vIEFkZCBhIG5ldyBlbnRyeSB0byB0aGUgbWFwIHVubGVzcyBhbiBlbnRyeSB3
YXMgYWRkZWQgd2hpbGUgd2Ugd2VyZSBpbiB3YWl0Rm9yUmVwbHkuCiAgICAgRmllbGRNYXA6OkFk
ZFJlc3VsdCBtYXBBZGRSZXN1bHQgPSBtX2ZpZWxkcy5hZGQobmFtZS5pbXBsKCksIDApOwogICAg
IGlmIChtYXBBZGRSZXN1bHQuaXNOZXdFbnRyeSAmJiByZXBseS0+bV9yZXN1bHQpCi0gICAgICAg
IG1hcEFkZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gbmV3IFByb3h5RmllbGQoaWRlbnRpZmll
cik7Ci0gICAgcmV0dXJuIG1hcEFkZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICBt
YXBBZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gbmV3IFByb3h5RmllbGQoaWRlbnRpZmllcik7
CisgICAgcmV0dXJuIG1hcEFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiB9CiAKIEpTQzo6SlNW
YWx1ZSBQcm94eUluc3RhbmNlOjpmaWVsZFZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgRmll
bGQqIGZpZWxkKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9X
ZWJOZXRzY2FwZVBsdWdpblZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5l
dHNjYXBlUGx1Z2luVmlldy5tbQppbmRleCA0ZTFhYWQ0OTUyOGNkN2QwODFkNDEzNTI0NTRiOWM4
NTdmYmMyNWI3Li42YTFlYjY0MGEwZGFjZjBjY2UwMWVlZDM4MTkyMzUwYjVkYzg1MmYzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5t
bQpAQCAtNzEwLDcgKzcxMCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBnZXROUFJlY3QoY29uc3Qg
TlNSZWN0JiBuciwgTlBSZWN0JiBucHIpCiAKICAgICBIYXNoTWFwPHVpbnQzMl90LCBQbHVnaW5U
aW1lcio+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSB0aW1lcnMtPmVuZCgpOwogICAgIGZvciAoSGFz
aE1hcDx1aW50MzJfdCwgUGx1Z2luVGltZXIqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSB0aW1lcnMt
PmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBQbHVnaW5UaW1lciogdGltZXIg
PSBpdC0+c2Vjb25kOworICAgICAgICBQbHVnaW5UaW1lciogdGltZXIgPSBpdC0+dmFsdWU7CiAg
ICAgICAgIHRpbWVyLT5zdG9wKCk7CiAgICAgfSAgICAKIH0KQEAgLTcyOCw3ICs3MjgsNyBAQCBz
dGF0aWMgaW5saW5lIHZvaWQgZ2V0TlBSZWN0KGNvbnN0IE5TUmVjdCYgbnIsIE5QUmVjdCYgbnBy
KQogICAgIAogICAgIEhhc2hNYXA8dWludDMyX3QsIFBsdWdpblRpbWVyKj46OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IHRpbWVycy0+ZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPHVpbnQzMl90LCBQbHVn
aW5UaW1lcio+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHRpbWVycy0+YmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7Ci0gICAgICAgIFBsdWdpblRpbWVyKiB0aW1lciA9IGl0LT5zZWNvbmQ7CisgICAg
ICAgIFBsdWdpblRpbWVyKiB0aW1lciA9IGl0LT52YWx1ZTsKICAgICAgICAgQVNTRVJUKCF0aW1l
ci0+aXNBY3RpdmUoKSk7CiAgICAgICAgIHRpbWVyLT5zdGFydChfaXNDb21wbGV0ZWx5T2JzY3Vy
ZWQpOwogICAgIH0gICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3Vw
cG9ydC9XZWJOb3RpZmljYXRpb25DbGllbnQubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3Jl
U3VwcG9ydC9XZWJOb3RpZmljYXRpb25DbGllbnQubW0KaW5kZXggZTJhMDVjNmE4YmFjMjYxZGU1
ZmY1YWQwMDNjYzhmYzFhYWVmODJjZi4uZjBjNDlhNmNjYzQ1MGU2NDFlYzEyNjUyNzQzYmM2Yzkw
OGZiZDI2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2Vi
Tm90aWZpY2F0aW9uQ2xpZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBw
b3J0L1dlYk5vdGlmaWNhdGlvbkNsaWVudC5tbQpAQCAtOTAsNyArOTAsNyBAQCBib29sIFdlYk5v
dGlmaWNhdGlvbkNsaWVudDo6c2hvdyhOb3RpZmljYXRpb24qIG5vdGlmaWNhdGlvbikKICAgICBt
X25vdGlmaWNhdGlvbk1hcC5zZXQobm90aWZpY2F0aW9uLCB3ZWJOb3RpZmljYXRpb24pOwogCiAg
ICAgTm90aWZpY2F0aW9uQ29udGV4dE1hcDo6aXRlcmF0b3IgaXQgPSBtX25vdGlmaWNhdGlvbkNv
bnRleHRNYXAuYWRkKG5vdGlmaWNhdGlvbi0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBWZWN0
b3I8UmV0YWluUHRyPFdlYk5vdGlmaWNhdGlvbj4gPigpKS5pdGVyYXRvcjsKLSAgICBpdC0+c2Vj
b25kLmFwcGVuZCh3ZWJOb3RpZmljYXRpb24pOworICAgIGl0LT52YWx1ZS5hcHBlbmQod2ViTm90
aWZpY2F0aW9uKTsKIAogICAgIFtbbV93ZWJWaWV3IF9ub3RpZmljYXRpb25Qcm92aWRlcl0gc2hv
d05vdGlmaWNhdGlvbjp3ZWJOb3RpZmljYXRpb24uZ2V0KCkgZnJvbVdlYlZpZXc6bV93ZWJWaWV3
XTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEyMCw3ICsxMjAsNyBAQCB2b2lkIFdlYk5vdGlmaWNh
dGlvbkNsaWVudDo6Y2xlYXJOb3RpZmljYXRpb25zKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQpCiAgICAgaWYgKGl0ID09IG1fbm90aWZpY2F0aW9uQ29udGV4dE1hcC5lbmQoKSkKICAg
ICAgICAgcmV0dXJuOwogICAgIAotICAgIFZlY3RvcjxSZXRhaW5QdHI8V2ViTm90aWZpY2F0aW9u
PiA+JiB3ZWJOb3RpZmljYXRpb25zID0gaXQtPnNlY29uZDsKKyAgICBWZWN0b3I8UmV0YWluUHRy
PFdlYk5vdGlmaWNhdGlvbj4gPiYgd2ViTm90aWZpY2F0aW9ucyA9IGl0LT52YWx1ZTsKICAgICBO
U011dGFibGVBcnJheSAqbnNJRHMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOwogICAgIHNpemVf
dCBjb3VudCA9IHdlYk5vdGlmaWNhdGlvbnMuc2l6ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgY291bnQ7ICsraSkgewpAQCAtMTQ2LDEwICsxNDYsMTAgQEAgdm9pZCBXZWJOb3RpZmlj
YXRpb25DbGllbnQ6Om5vdGlmaWNhdGlvbk9iamVjdERlc3Ryb3llZChOb3RpZmljYXRpb24qIG5v
dGlmaWNhdGkKIAogICAgIE5vdGlmaWNhdGlvbkNvbnRleHRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9u
b3RpZmljYXRpb25Db250ZXh0TWFwLmZpbmQobm90aWZpY2F0aW9uLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkpOwogICAgIEFTU0VSVChpdCAhPSBtX25vdGlmaWNhdGlvbkNvbnRleHRNYXAuZW5k
KCkpOwotICAgIHNpemVfdCBpbmRleCA9IGl0LT5zZWNvbmQuZmluZCh3ZWJOb3RpZmljYXRpb24p
OworICAgIHNpemVfdCBpbmRleCA9IGl0LT52YWx1ZS5maW5kKHdlYk5vdGlmaWNhdGlvbik7CiAg
ICAgQVNTRVJUKGluZGV4ICE9IG5vdEZvdW5kKTsKLSAgICBpdC0+c2Vjb25kLnJlbW92ZShpbmRl
eCk7Ci0gICAgaWYgKGl0LT5zZWNvbmQuaXNFbXB0eSgpKQorICAgIGl0LT52YWx1ZS5yZW1vdmUo
aW5kZXgpOworICAgIGlmIChpdC0+dmFsdWUuaXNFbXB0eSgpKQogICAgICAgICBtX25vdGlmaWNh
dGlvbkNvbnRleHRNYXAucmVtb3ZlKGl0KTsKIAogICAgIFtbbV93ZWJWaWV3IF9ub3RpZmljYXRp
b25Qcm92aWRlcl0gbm90aWZpY2F0aW9uRGVzdHJveWVkOndlYk5vdGlmaWNhdGlvbi5nZXQoKV07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tIGIv
U291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQppbmRleCA1MDVkYjUzMDIx
MDRlYTg0OGZiODIwMTI3ZmEyOTRiMzE2YmUwOTIxLi5iOWEwMDA2ZDc5YTM0MzYwZjI5OWMzYzg0
MWJiNzk2MmYzNzJkNThiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dl
YkhUTUxWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcu
bW0KQEAgLTIzNzYsNyArMjM3Niw3IEBAIHN0YXRpYyBTdHJpbmcgY29tbWFuZE5hbWVGb3JTZWxl
Y3RvcihTRUwgc2VsZWN0b3IpCiAgICAgc3RhdGljIGNvbnN0IFNlbGVjdG9yTmFtZU1hcCogZXhj
ZXB0aW9uTWFwID0gY3JlYXRlU2VsZWN0b3JFeGNlcHRpb25NYXAoKTsKICAgICBTZWxlY3Rvck5h
bWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZXhjZXB0aW9uTWFwLT5maW5kKHNlbGVjdG9yKTsK
ICAgICBpZiAoaXQgIT0gZXhjZXB0aW9uTWFwLT5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5z
ZWNvbmQ7CisgICAgICAgIHJldHVybiBpdC0+dmFsdWU7CiAKICAgICAvLyBSZW1vdmUgdGhlIHRy
YWlsaW5nIGNvbG9uLgogICAgIC8vIE5vIG5lZWQgdG8gY2FwaXRhbGl6ZSB0aGUgY29tbWFuZCBu
YW1lIHNpbmNlIEVkaXRvciBjb21tYW5kIG5hbWVzIGFyZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2Uu
Y3BwCmluZGV4IDA4ZTg2MTgzYTZiNmVhNDQwODdlZjI0NzFmZDkwMDJkNGI2MDQwZjQuLjNkYjY5
NzY5OGMzN2MxMjdmMTY3MTVmZDRlMmRiMjVmM2UwMTcyMDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Vi
cGFnZS5jcHAKQEAgLTIyNTgsNyArMjI1OCw3IEBAIHN0YXRpYyB2b2lkIGV4dHJhY3RDb250ZW50
VHlwZUZyb21QbHVnaW5WZWN0b3IoY29uc3QgVmVjdG9yPFBsdWdpblBhY2thZ2UqPiYgcGx1CiAg
ICAgICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWFwX2l0ID0gcGx1
Z2luc1tpXS0+bWltZVRvRGVzY3JpcHRpb25zKCkuYmVnaW4oKTsKICAgICAgICAgTUlNRVRvRGVz
Y3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBtYXBfZW5kID0gcGx1Z2luc1tpXS0+bWltZVRv
RGVzY3JpcHRpb25zKCkuZW5kKCk7CiAgICAgICAgIGZvciAoOyBtYXBfaXQgIT0gbWFwX2VuZDsg
KyttYXBfaXQpCi0gICAgICAgICAgICAqbGlzdCA8PCBtYXBfaXQtPmZpcnN0OworICAgICAgICAg
ICAgKmxpc3QgPDwgbWFwX2l0LT5rZXk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L3F0L0FwaS9xd2VicGx1Z2luZGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYktpdC9xdC9B
cGkvcXdlYnBsdWdpbmRhdGFiYXNlLmNwcAppbmRleCBhN2EzYjVmMmMxZTg5ZjQ3NDM3YzA4YTk3
ZmNiMjk2Nzg2YmY4ZTU4Li5jNTMyOGM4ZjY3NWYyYzY2ZjdiOWI0MjBkNjUxMzdmZDlmODZiODk2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGx1Z2luZGF0YWJhc2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwbHVnaW5kYXRhYmFzZS5jcHAKQEAgLTEy
Miw4ICsxMjIsOCBAQCBRTGlzdDxRV2ViUGx1Z2luSW5mbzo6TWltZVR5cGU+IFFXZWJQbHVnaW5J
bmZvOjptaW1lVHlwZXMoKSBjb25zdAogCiAgICAgICAgIGZvciAoTUlNRVRvRGVzY3JpcHRpb25z
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIE1pbWVUeXBlIG1pbWVUeXBlOwotICAgICAgICAg
ICAgbWltZVR5cGUubmFtZSA9IGl0LT5maXJzdDsKLSAgICAgICAgICAgIG1pbWVUeXBlLmRlc2Ny
aXB0aW9uID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIG1pbWVUeXBlLm5hbWUgPSBpdC0+a2V5
OworICAgICAgICAgICAgbWltZVR5cGUuZGVzY3JpcHRpb24gPSBpdC0+dmFsdWU7CiAKICAgICAg
ICAgICAgIFFTdHJpbmdMaXN0IGZpbGVFeHRlbnNpb25zOwogICAgICAgICAgICAgVmVjdG9yPFN0
cmluZz4gZXh0ZW5zaW9ucyA9IG1fcGFja2FnZS0+bWltZVRvRXh0ZW5zaW9ucygpLmdldChtaW1l
VHlwZS5uYW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
UGxhdGZvcm1TdHJhdGVnaWVzUXQuY3BwIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9QbGF0Zm9ybVN0cmF0ZWdpZXNRdC5jcHAKaW5kZXggY2Q0YWIwZDcyZDg2ODEyNWRjODZlZTk4
N2JjY2U2ZWYzYWIxYWQ4OS4uN2Q0YjBiNzVmOWQyYzRlNzY3OWRiM2QwN2I1NjE3YTQyMTQwNGM1
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0
cmF0ZWdpZXNRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QbGF0
Zm9ybVN0cmF0ZWdpZXNRdC5jcHAKQEAgLTEzMyw4ICsxMzMsOCBAQCB2b2lkIFBsYXRmb3JtU3Ry
YXRlZ2llc1F0OjpnZXRQbHVnaW5JbmZvKGNvbnN0IFdlYkNvcmU6OlBhZ2UqIHBhZ2UsIFZlY3Rv
cjxXZWJDbwogICAgICAgICBmb3IgKE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAg
ICAgICAgICAgICBNaW1lQ2xhc3NJbmZvIG1pbWU7CiAKLSAgICAgICAgICAgIG1pbWUudHlwZSA9
IGl0LT5maXJzdDsKLSAgICAgICAgICAgIG1pbWUuZGVzYyA9IGl0LT5zZWNvbmQ7CisgICAgICAg
ICAgICBtaW1lLnR5cGUgPSBpdC0+a2V5OworICAgICAgICAgICAgbWltZS5kZXNjID0gaXQtPnZh
bHVlOwogICAgICAgICAgICAgbWltZS5leHRlbnNpb25zID0gcGFja2FnZS0+bWltZVRvRXh0ZW5z
aW9ucygpLmdldChtaW1lLnR5cGUpOwogCiAgICAgICAgICAgICBpbmZvLm1pbWVzLmFwcGVuZCht
aW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL0NPTVByb3BlcnR5QmFnLmggYi9T
b3VyY2UvV2ViS2l0L3dpbi9DT01Qcm9wZXJ0eUJhZy5oCmluZGV4IGM3Njg2M2YxNTAxMmYyZWFk
ZTBkY2UxNWZkZGI3MzliZmJjMjc5YzMuLjhlODRlNDc0MGFhM2E5ODYzNTk0YmVkY2VjZThlMzcx
MmFkNGEyZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL0NPTVByb3BlcnR5QmFnLmgK
KysrIGIvU291cmNlL1dlYktpdC93aW4vQ09NUHJvcGVydHlCYWcuaApAQCAtMTQ3LDkgKzE0Nyw5
IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgQ09NUHJvcGVydHlCYWc8VmFsdWVUeXBlLCBL
ZXlUeXBlLCBIYXNoVHlwZT46OlJlYWQoTFBDCiAKICAgICBWQVJUWVBFIHJlcXVlc3RlZFR5cGUg
PSBWX1ZUKHBWYXIpOwogICAgIFZfVlQocFZhcikgPSBWVF9FTVBUWTsKLSAgICBDT01WYXJpYW50
U2V0dGVyPFZhbHVlVHlwZT46OnNldFZhcmlhbnQocFZhciwgaXQtPnNlY29uZCk7CisgICAgQ09N
VmFyaWFudFNldHRlcjxWYWx1ZVR5cGU+OjpzZXRWYXJpYW50KHBWYXIsIGl0LT52YWx1ZSk7CiAK
LSAgICBpZiAocmVxdWVzdGVkVHlwZSAhPSBDT01WYXJpYW50U2V0dGVyPFZhbHVlVHlwZT46OnZh
cmlhbnRUeXBlKGl0LT5zZWNvbmQpICYmIHJlcXVlc3RlZFR5cGUgIT0gVlRfRU1QVFkpCisgICAg
aWYgKHJlcXVlc3RlZFR5cGUgIT0gQ09NVmFyaWFudFNldHRlcjxWYWx1ZVR5cGU+Ojp2YXJpYW50
VHlwZShpdC0+dmFsdWUpICYmIHJlcXVlc3RlZFR5cGUgIT0gVlRfRU1QVFkpCiAgICAgICAgIHJl
dHVybiA6OlZhcmlhbnRDaGFuZ2VUeXBlKHBWYXIsIHBWYXIsIFZBUklBTlRfTk9VU0VST1ZFUlJJ
REUgfCBWQVJJQU5UX0FMUEhBQk9PTCwgcmVxdWVzdGVkVHlwZSk7CiAKICAgICByZXR1cm4gU19P
SzsKQEAgLTIxNywxMiArMjE3LDEyIEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgQ09NUHJv
cGVydHlCYWc8VmFsdWVUeXBlLCBLZXlUeXBlLCBIYXNoVHlwZT46OkdldFByb3BlCiAgICAgICAg
IC8vcFByb3BCYWdbal0uY2xzaWQ7ICAgIC8vIChDTFNJRCkgQ0xTSUQgb2YgdGhlIG9iamVjdC4g
VGhpcyBtZW1iZXIgaXMgdmFsaWQgb25seSBpZiBkd1R5cGUgaXMgUFJPUEJBRzJfVFlQRV9PQkpF
Q1QuCiAKICAgICAgICAgcFByb3BCYWdbal0uZHdUeXBlID0gUFJPUEJBRzJfVFlQRV9EQVRBOwot
ICAgICAgICBwUHJvcEJhZ1tqXS52dCA9IENPTVZhcmlhbnRTZXR0ZXI8VmFsdWVUeXBlPjo6dmFy
aWFudFR5cGUoY3VycmVudC0+c2Vjb25kKTsKKyAgICAgICAgcFByb3BCYWdbal0udnQgPSBDT01W
YXJpYW50U2V0dGVyPFZhbHVlVHlwZT46OnZhcmlhbnRUeXBlKGN1cnJlbnQtPnZhbHVlKTsKICAg
ICAgICAgcFByb3BCYWdbal0uZHdIaW50ID0gaVByb3BlcnR5ICsgajsKLSAgICAgICAgcFByb3BC
YWdbal0ucHN0ck5hbWUgPSAoTFBPTEVTVFIpQ29UYXNrTWVtQWxsb2Moc2l6ZW9mKHdjaGFyX3Qp
KihjdXJyZW50LT5maXJzdC5sZW5ndGgoKSsxKSk7CisgICAgICAgIHBQcm9wQmFnW2pdLnBzdHJO
YW1lID0gKExQT0xFU1RSKUNvVGFza01lbUFsbG9jKHNpemVvZih3Y2hhcl90KSooY3VycmVudC0+
a2V5Lmxlbmd0aCgpKzEpKTsKICAgICAgICAgaWYgKCFwUHJvcEJhZ1tqXS5wc3RyTmFtZSkKICAg
ICAgICAgICAgIHJldHVybiBFX09VVE9GTUVNT1JZOwotICAgICAgICB3Y3NjcHlfcyhwUHJvcEJh
Z1tqXS5wc3RyTmFtZSwgY3VycmVudC0+Zmlyc3QubGVuZ3RoKCkrMSwgc3RhdGljX2Nhc3Q8U3Ry
aW5nPihjdXJyZW50LT5maXJzdCkuY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSk7Cisg
ICAgICAgIHdjc2NweV9zKHBQcm9wQmFnW2pdLnBzdHJOYW1lLCBjdXJyZW50LT5rZXkubGVuZ3Ro
KCkrMSwgc3RhdGljX2Nhc3Q8U3RyaW5nPihjdXJyZW50LT5rZXkpLmNoYXJhY3RlcnNXaXRoTnVs
bFRlcm1pbmF0aW9uKCkpOwogICAgICAgICArKypwY1Byb3BlcnRpZXM7CiAgICAgfQogICAgIHJl
dHVybiBTX09LOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN0YXRpc3Rp
Y3MuY3BwIGIvU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN0YXRpc3RpY3MuY3BwCmluZGV4IGMx
Y2E5ZjIxNGYyNDljMGE0OWYxZmNiMTIyZjA2YWQzNDkzYjRiMTkuLjJmMjJiMDNjNjIyNTAwMmFl
MjE5Y2EwZjQ1YmE0N2QyOTgwYzM3YTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL1dl
YkNvcmVTdGF0aXN0aWNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3RhdGlz
dGljcy5jcHAKQEAgLTE0NSw3ICsxNDUsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdl
YkNvcmVTdGF0aXN0aWNzOjpqYXZhU2NyaXB0UHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50cwogICAg
IEl0ZXJhdG9yIGVuZCA9IGpzT2JqZWN0VHlwZU5hbWVzLT5lbmQoKTsKICAgICBIYXNoTWFwPFN0
cmluZywgaW50PiB0eXBlQ291bnRNYXA7CiAgICAgZm9yIChJdGVyYXRvciBjdXJyZW50ID0ganNP
YmplY3RUeXBlTmFtZXMtPmJlZ2luKCk7IGN1cnJlbnQgIT0gZW5kOyArK2N1cnJlbnQpCi0gICAg
ICAgIHR5cGVDb3VudE1hcC5zZXQoY3VycmVudC0+Zmlyc3QsIGN1cnJlbnQtPnNlY29uZCk7Cisg
ICAgICAgIHR5cGVDb3VudE1hcC5zZXQoY3VycmVudC0+a2V5LCBjdXJyZW50LT52YWx1ZSk7CiAK
ICAgICBDT01QdHI8SVByb3BlcnR5QmFnMj4gcmVzdWx0cyhBZG9wdENPTSwgQ09NUHJvcGVydHlC
YWc8aW50Pjo6Y3JlYXRlSW5zdGFuY2UodHlwZUNvdW50TWFwKSk7CiAgICAgcmVzdWx0cy5jb3B5
UmVmVG8odHlwZU5hbWVzQW5kQ291bnRzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2lu
L1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAgYi9Tb3VyY2UvV2ViS2l0
L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCmluZGV4IDIzMGYz
MzIzZjU0MjkxZDAxZTE0MTk4MTc4ZmEyMTZhNDhjMGNmNWIuLmYxMzBmNzZiZDJhNjc2OTdhZGU3
YTM2Nzg4NDUyNDNhOWY2YTcxYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYkNv
cmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC93
aW4vV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcApAQCAtOTMsOCArOTMs
OCBAQCB2b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Z2V0UGx1Z2luSW5mbyhjb25zdCBXZWJD
b3JlOjpQYWdlKiwgVmVjdG9yPFdlYkNvcmU6OgogICAgICAgICBmb3IgKE1JTUVUb0Rlc2NyaXB0
aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBNaW1lQ2xhc3NJbmZvIG1pbWU7CiAKLSAg
ICAgICAgICAgIG1pbWUudHlwZSA9IGl0LT5maXJzdDsKLSAgICAgICAgICAgIG1pbWUuZGVzYyA9
IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICBtaW1lLnR5cGUgPSBpdC0+a2V5OworICAgICAgICAg
ICAgbWltZS5kZXNjID0gaXQtPnZhbHVlOwogICAgICAgICAgICAgbWltZS5leHRlbnNpb25zID0g
cGFja2FnZS0+bWltZVRvRXh0ZW5zaW9ucygpLmdldChtaW1lLnR5cGUpOwogCiAgICAgICAgICAg
ICBpbmZvLm1pbWVzLmFwcGVuZChtaW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2lu
L1dlYkhpc3RvcnkuY3BwIGIvU291cmNlL1dlYktpdC93aW4vV2ViSGlzdG9yeS5jcHAKaW5kZXgg
ZTg0MmMxNDA3MzVjNzE5OTFhNWQxMWU4YjlkM2I1N2Y3ZDVjZDI3Yi4uODIzMzVhNzhhNzVmOGM4
MjJkZDk5NmU1ZDY4OThjMzljMDRlM2IzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4v
V2ViSGlzdG9yeS5jcHAKKysrIGIvU291cmNlL1dlYktpdC93aW4vV2ViSGlzdG9yeS5jcHAKQEAg
LTgzNCw3ICs4MzQsNyBAQCBIUkVTVUxUIFdlYkhpc3Rvcnk6OnJlbW92ZUl0ZW1Gcm9tRGF0ZUNh
Y2hlcyhJV2ViSGlzdG9yeUl0ZW0qIGVudHJ5KQogCiAgICAgRGF0ZVRvRW50cmllc01hcDo6aXRl
cmF0b3IgZm91bmQgPSBtX2VudHJpZXNCeURhdGUuZmluZChkYXRlS2V5KTsKICAgICBBU1NFUlQo
Zm91bmQgIT0gbV9lbnRyaWVzQnlEYXRlLmVuZCgpKTsKLSAgICBDRk11dGFibGVBcnJheVJlZiBl
bnRyaWVzRm9yRGF0ZSA9IGZvdW5kLT5zZWNvbmQuZ2V0KCk7CisgICAgQ0ZNdXRhYmxlQXJyYXlS
ZWYgZW50cmllc0ZvckRhdGUgPSBmb3VuZC0+dmFsdWUuZ2V0KCk7CiAKICAgICBDRkluZGV4IGNv
dW50ID0gQ0ZBcnJheUdldENvdW50KGVudHJpZXNGb3JEYXRlKTsKICAgICBmb3IgKGludCBpID0g
Y291bnQgLSAxOyBpID49IDA7IC0taSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4v
V2ViS2l0Q09NQVBJLmNwcCBiL1NvdXJjZS9XZWJLaXQvd2luL1dlYktpdENPTUFQSS5jcHAKaW5k
ZXggOWM5Y2MwMjZiNDdiNGZlYTk2MGM2Mzk4NDZlMGViYTUxYzQ2NTNjMi4uNGQ4ZmYwOTViZGE5
NjA3ZDI5YTE0NWI4NTdjNzhkZGZmOGUzNWU3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93
aW4vV2ViS2l0Q09NQVBJLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJLaXRDT01BUEku
Y3BwCkBAIC01Miw3ICs1Miw3IEBAIHN0YXRpYyBDT01QdHI8SUNsYXNzRmFjdG9yeT4gY2xhc3NG
YWN0b3J5KGNvbnN0IENMU0lEJiBjbHNpZCkKICAgICBzdGF0aWMgRmFjdG9yeU1hcCYgZmFjdG9y
aWVzID0gKm5ldyBGYWN0b3J5TWFwOwogCiAgICAgRmFjdG9yeU1hcDo6QWRkUmVzdWx0IHJlc3Vs
dCA9IGZhY3Rvcmllcy5hZGQoY2xzaWQsIDApOwotICAgIENPTVB0cjxJQ2xhc3NGYWN0b3J5PiYg
ZmFjdG9yeSA9IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgIENPTVB0cjxJQ2xhc3NGYWN0
b3J5PiYgZmFjdG9yeSA9IHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKHJlc3VsdC5p
c05ld0VudHJ5ICYmIEZBSUxFRChEbGxHZXRDbGFzc09iamVjdChjbHNpZCwgX191dWlkb2YoZmFj
dG9yeSksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmZmFjdG9yeSkpKSkKICAgICAgICAgZmFj
dG9yeSA9IDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYktpdFN0YXRpc3Rp
Y3MuY3BwIGIvU291cmNlL1dlYktpdC93aW4vV2ViS2l0U3RhdGlzdGljcy5jcHAKaW5kZXggOWNk
OTVjN2FjOTM1OTUzMDA3ZTE1N2RjYTc0ZTgwN2M0NWFlZTA2ZS4uYzdiOGVkMWFjNzdjZTZlMTky
NmFhNWRiMjI0MjRmMmVlZTFhMzUwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vV2Vi
S2l0U3RhdGlzdGljcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC93aW4vV2ViS2l0U3RhdGlzdGlj
cy5jcHAKQEAgLTE0NCw5ICsxNDQsOSBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYktp
dFN0YXRpc3RpY3M6OmNvbUNsYXNzTmFtZUNvdW50cygKICAgICBJdGVyYXRvciBlbmQgPSBnQ2xh
c3NOYW1lQ291bnQuZW5kKCk7CiAgICAgVmVjdG9yPFVDaGFyPiB2ZWN0b3I7CiAgICAgZm9yIChJ
dGVyYXRvciBjdXJyZW50ID0gZ0NsYXNzTmFtZUNvdW50LmJlZ2luKCk7IGN1cnJlbnQgIT0gZW5k
OyArK2N1cnJlbnQpIHsKLSAgICAgICAgYXBwZW5kKHZlY3RvciwgU3RyaW5nOjpmb3JtYXQoIiU0
dSIsIGN1cnJlbnQtPnNlY29uZCkpOworICAgICAgICBhcHBlbmQodmVjdG9yLCBTdHJpbmc6OmZv
cm1hdCgiJTR1IiwgY3VycmVudC0+dmFsdWUpKTsKICAgICAgICAgdmVjdG9yLmFwcGVuZCgnXHQn
KTsKLSAgICAgICAgYXBwZW5kKHZlY3Rvciwgc3RhdGljX2Nhc3Q8U3RyaW5nPihjdXJyZW50LT5m
aXJzdCkpOworICAgICAgICBhcHBlbmQodmVjdG9yLCBzdGF0aWNfY2FzdDxTdHJpbmc+KGN1cnJl
bnQtPmtleSkpOwogICAgICAgICB2ZWN0b3IuYXBwZW5kKCdcbicpOwogICAgIH0KICAgICAqb3V0
cHV0ID0gQlN0cmluZyhTdHJpbmc6OmFkb3B0KHZlY3RvcikpLnJlbGVhc2UoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYk5vdGlmaWNhdGlvbkNlbnRlci5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L3dpbi9XZWJOb3RpZmljYXRpb25DZW50ZXIuY3BwCmluZGV4IGM3MTkyZDhkM2NkYjJj
ZGFlMmJhYTcxYWU2MGY3YmE5ZDgxZWQ3ZWEuLjMxYzgxMTlhNTAyYjljZWU2NWU0MjBiZjUxN2Vl
NzlhYTEyODQxYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYk5vdGlmaWNhdGlv
bkNlbnRlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC93aW4vV2ViTm90aWZpY2F0aW9uQ2VudGVy
LmNwcApAQCAtMTIwLDcgKzEyMCw3IEBAIHZvaWQgV2ViTm90aWZpY2F0aW9uQ2VudGVyOjpwb3N0
Tm90aWZpY2F0aW9uSW50ZXJuYWwoSVdlYk5vdGlmaWNhdGlvbiogbm90aWZpY2F0CiAKICAgICAv
LyBJbnRlbnRpb25hbGx5IG1ha2UgYSBjb3B5IG9mIHRoZSBsaXN0IHRvIGF2b2lkIHRoZSBwb3Nz
aWJpbGl0eSBvZiBlcnJvcnMKICAgICAvLyBmcm9tIGEgbXV0YXRpb24gb2YgdGhlIGxpc3QgaW4g
dGhlIG9uTm90aWZ5IGNhbGxiYWNrLgotICAgIE9iamVjdE9ic2VydmVyTGlzdCBsaXN0ID0gaXQt
PnNlY29uZDsKKyAgICBPYmplY3RPYnNlcnZlckxpc3QgbGlzdCA9IGl0LT52YWx1ZTsKIAogICAg
IE9ic2VydmVyTGlzdEl0ZXJhdG9yIGVuZCA9IGxpc3QuZW5kKCk7CiAgICAgZm9yIChPYnNlcnZl
ckxpc3RJdGVyYXRvciBpdDIgPSBsaXN0LmJlZ2luKCk7IGl0MiAhPSBlbmQ7ICsraXQyKSB7CkBA
IC0xNDksNyArMTQ5LDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJOb3RpZmljYXRp
b25DZW50ZXI6OmFkZE9ic2VydmVyKAogICAgIFN0cmluZyBuYW1lKG5vdGlmaWNhdGlvbk5hbWUs
IFN5c1N0cmluZ0xlbihub3RpZmljYXRpb25OYW1lKSk7CiAgICAgTWFwcGVkT2JzZXJ2ZXJzOjpp
dGVyYXRvciBpdCA9IGQtPm1fbWFwcGVkT2JzZXJ2ZXJzLmZpbmQobmFtZSk7CiAgICAgaWYgKGl0
ICE9IGQtPm1fbWFwcGVkT2JzZXJ2ZXJzLmVuZCgpKQotICAgICAgICBpdC0+c2Vjb25kLmFwcGVu
ZChPYmplY3RPYnNlcnZlclBhaXIoYW5PYmplY3QsIG9ic2VydmVyKSk7CisgICAgICAgIGl0LT52
YWx1ZS5hcHBlbmQoT2JqZWN0T2JzZXJ2ZXJQYWlyKGFuT2JqZWN0LCBvYnNlcnZlcikpOwogICAg
IGVsc2UgewogICAgICAgICBPYmplY3RPYnNlcnZlckxpc3QgbGlzdDsKICAgICAgICAgbGlzdC5h
cHBlbmQoT2JqZWN0T2JzZXJ2ZXJQYWlyKGFuT2JqZWN0LCBvYnNlcnZlcikpOwpAQCAtMTk4LDcg
KzE5OCw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViTm90aWZpY2F0aW9uQ2VudGVy
OjpyZW1vdmVPYnNlcnZlcigKICAgICBpZiAoaXQgPT0gZC0+bV9tYXBwZWRPYnNlcnZlcnMuZW5k
KCkpCiAgICAgICAgIHJldHVybiBFX0ZBSUw7CiAKLSAgICBPYmplY3RPYnNlcnZlckxpc3QmIG9i
c2VydmVyTGlzdCA9IGl0LT5zZWNvbmQ7CisgICAgT2JqZWN0T2JzZXJ2ZXJMaXN0JiBvYnNlcnZl
ckxpc3QgPSBpdC0+dmFsdWU7CiAgICAgT2JzZXJ2ZXJMaXN0SXRlcmF0b3IgZW5kID0gb2JzZXJ2
ZXJMaXN0LmVuZCgpOwogCiAgICAgaW50IGkgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC93aW5jZS9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmNw
cAppbmRleCAzZjhjOTA3YzczOWYwOGNkYjk5MTZlODM2ZjliMDhkZTY3ODQ1MWNmLi5kNTU3OTcy
MzExNjE1OTFkNWZkYjE3MTU4MDQ0NThkYjc4MmM5MWYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dp
bkNFLmNwcApAQCAtOTQsOCArOTQsOCBAQCB2b2lkIFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjpn
ZXRQbHVnaW5JbmZvKGNvbnN0IFBhZ2UqLCBWZWN0b3I8UGx1Z2luSW5mbz4mIG91dAogICAgICAg
ICBmb3IgKE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtaW1lVG9E
ZXNjcmlwdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBNaW1l
Q2xhc3NJbmZvIG1pbWU7CiAKLSAgICAgICAgICAgIG1pbWUudHlwZSA9IGl0LT5maXJzdDsKLSAg
ICAgICAgICAgIG1pbWUuZGVzYyA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICBtaW1lLnR5cGUg
PSBpdC0+a2V5OworICAgICAgICAgICAgbWltZS5kZXNjID0gaXQtPnZhbHVlOwogICAgICAgICAg
ICAgbWltZS5leHRlbnNpb25zID0gcGFja2FnZS0+bWltZVRvRXh0ZW5zaW9ucygpLmdldChtaW1l
LnR5cGUpOwogCiAgICAgICAgICAgICBpbmZvLm1pbWVzLmFwcGVuZChtaW1lKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQXJndW1lbnRDb2RlcnMuaCBiL1Nv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQXJndW1lbnRDb2RlcnMuaAppbmRleCBkZDU0
ZGZlZWY5MWE3ZGUzMTE5MTVlOTNkOWFmYmViMTNhMWNiZTc3Li5hZjE2M2JlNmQ5YjY0YzMwOWQ5
MTlhZDFiNzM2NTg4ZWIyNjMxY2JhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9y
bS9Db3JlSVBDL0FyZ3VtZW50Q29kZXJzLmgKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0v
Q29yZUlQQy9Bcmd1bWVudENvZGVycy5oCkBAIC03NSw4ICs3NSw4IEBAIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFU+IHN0cnVjdCBBcmd1bWVudENvZGVyPHN0ZDo6cGFpcjxULCBVPiA+
IHsKIHRlbXBsYXRlPHR5cGVuYW1lIEtleVR5cGUsIHR5cGVuYW1lIFZhbHVlVHlwZT4gc3RydWN0
IEFyZ3VtZW50Q29kZXI8V1RGOjpLZXlWYWx1ZVBhaXI8S2V5VHlwZSwgVmFsdWVUeXBlPiA+IHsK
ICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBX
VEY6OktleVZhbHVlUGFpcjxLZXlUeXBlLCBWYWx1ZVR5cGU+JiBwYWlyKQogICAgIHsKLSAgICAg
ICAgZW5jb2Rlci0+ZW5jb2RlKHBhaXIuZmlyc3QpOwotICAgICAgICBlbmNvZGVyLT5lbmNvZGUo
cGFpci5zZWNvbmQpOworICAgICAgICBlbmNvZGVyLT5lbmNvZGUocGFpci5rZXkpOworICAgICAg
ICBlbmNvZGVyLT5lbmNvZGUocGFpci52YWx1ZSk7CiAgICAgfQogCiAgICAgc3RhdGljIGJvb2wg
ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgV1RGOjpLZXlWYWx1ZVBhaXI8S2V5VHlw
ZSwgVmFsdWVUeXBlPiYgcGFpcikKQEAgLTg5LDggKzg5LDggQEAgdGVtcGxhdGU8dHlwZW5hbWUg
S2V5VHlwZSwgdHlwZW5hbWUgVmFsdWVUeXBlPiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXVEY6Oktl
eVZhbHUKICAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUodmFsdWUpKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgICAgIHBhaXIuZmlyc3QgPSBrZXk7Ci0gICAgICAgIHBhaXIu
c2Vjb25kID0gdmFsdWU7CisgICAgICAgIHBhaXIua2V5ID0ga2V5OworICAgICAgICBwYWlyLnZh
bHVlID0gdmFsdWU7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uY3BwIGIvU291cmNl
L1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Db25uZWN0aW9uLmNwcAppbmRleCBkMjJiOGI0YzFi
OGM1MjhjZWNiOGIyMWM3MDU0MGYzMDZjYjNlZTM0Li4zNDQ5ZTM1MmUxMGNlY2IwNDdiZTA5ZmFi
ODhlMGFmOTA2OTMyYWQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3Jl
SVBDL0Nvbm5lY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMv
Q29ubmVjdGlvbi5jcHAKQEAgLTEwMiwxMiArMTAyLDEyIEBAIFBhc3NSZWZQdHI8Q29ubmVjdGlv
bjo6U3luY01lc3NhZ2VTdGF0ZT4gQ29ubmVjdGlvbjo6U3luY01lc3NhZ2VTdGF0ZTo6Z2V0T3JD
cmVhCiAgICAgU3luY01lc3NhZ2VTdGF0ZU1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IHN5bmNNZXNz
YWdlU3RhdGVNYXAoKS5hZGQocnVuTG9vcCwgMCk7CiAKICAgICBpZiAoIXJlc3VsdC5pc05ld0Vu
dHJ5KSB7Ci0gICAgICAgIEFTU0VSVChyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7Ci0gICAgICAg
IHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgQVNTRVJUKHJlc3VsdC5p
dGVyYXRvci0+dmFsdWUpOworICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsK
ICAgICB9CiAKICAgICBSZWZQdHI8U3luY01lc3NhZ2VTdGF0ZT4gc3luY01lc3NhZ2VTdGF0ZSA9
IGFkb3B0UmVmKG5ldyBTeW5jTWVzc2FnZVN0YXRlKHJ1bkxvb3ApKTsKLSAgICByZXN1bHQuaXRl
cmF0b3ItPnNlY29uZCA9IHN5bmNNZXNzYWdlU3RhdGUuZ2V0KCk7CisgICAgcmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZSA9IHN5bmNNZXNzYWdlU3RhdGUuZ2V0KCk7CiAKICAgICByZXR1cm4gc3luY01l
c3NhZ2VTdGF0ZS5yZWxlYXNlKCk7CiB9CkBAIC0zNjIsMTAgKzM2MiwxMCBAQCBQYXNzT3duUHRy
PEFyZ3VtZW50RGVjb2Rlcj4gQ29ubmVjdGlvbjo6d2FpdEZvck1lc3NhZ2UoTWVzc2FnZUlEIG1l
c3NhZ2VJRCwgdWludAogICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV93YWl0Rm9yTWVzc2Fn
ZU11dGV4KTsKIAogICAgICAgICBIYXNoTWFwPHN0ZDo6cGFpcjx1bnNpZ25lZCwgdWludDY0X3Q+
LCBBcmd1bWVudERlY29kZXIqPjo6aXRlcmF0b3IgaXQgPSBtX3dhaXRGb3JNZXNzYWdlTWFwLmZp
bmQobWVzc2FnZUFuZERlc3RpbmF0aW9uKTsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQpIHsKKyAg
ICAgICAgaWYgKGl0LT52YWx1ZSkgewogICAgICAgICAgICAgLy8gRklYTUU6IG1fd2FpdEZvck1l
c3NhZ2VNYXAgc2hvdWxkIHJlYWxseSBob2xkIE93blB0cnMgdG8KICAgICAgICAgICAgIC8vIEFy
Z3VtZW50RGVjb2RlcnMsIGJ1dCBIYXNoTWFwIGRvZXNuJ3QgY3VycmVudGx5IHN1cHBvcnQgT3du
UHRycy4KLSAgICAgICAgICAgIE93blB0cjxBcmd1bWVudERlY29kZXI+IGFyZ3VtZW50cyA9IGFk
b3B0UHRyKGl0LT5zZWNvbmQpOworICAgICAgICAgICAgT3duUHRyPEFyZ3VtZW50RGVjb2Rlcj4g
YXJndW1lbnRzID0gYWRvcHRQdHIoaXQtPnZhbHVlKTsKICAgICAgICAgICAgIG1fd2FpdEZvck1l
c3NhZ2VNYXAucmVtb3ZlKGl0KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgcmV0dXJuIGFy
Z3VtZW50cy5yZWxlYXNlKCk7CkBAIC01MzksOCArNTM5LDggQEAgdm9pZCBDb25uZWN0aW9uOjpw
cm9jZXNzSW5jb21pbmdNZXNzYWdlKE1lc3NhZ2VJRCBtZXNzYWdlSUQsIFBhc3NPd25QdHI8QXJn
dW1lbnQKICAgICAgICAgCiAgICAgICAgIEhhc2hNYXA8c3RkOjpwYWlyPHVuc2lnbmVkLCB1aW50
NjRfdD4sIEFyZ3VtZW50RGVjb2Rlcio+OjppdGVyYXRvciBpdCA9IG1fd2FpdEZvck1lc3NhZ2VN
YXAuZmluZChzdGQ6Om1ha2VfcGFpcihtZXNzYWdlSUQudG9JbnQoKSwgaW5jb21pbmdNZXNzYWdl
LmRlc3RpbmF0aW9uSUQoKSkpOwogICAgICAgICBpZiAoaXQgIT0gbV93YWl0Rm9yTWVzc2FnZU1h
cC5lbmQoKSkgewotICAgICAgICAgICAgaXQtPnNlY29uZCA9IGluY29taW5nTWVzc2FnZS5yZWxl
YXNlQXJndW1lbnRzKCkubGVha1B0cigpOwotICAgICAgICAgICAgQVNTRVJUKGl0LT5zZWNvbmQp
OworICAgICAgICAgICAgaXQtPnZhbHVlID0gaW5jb21pbmdNZXNzYWdlLnJlbGVhc2VBcmd1bWVu
dHMoKS5sZWFrUHRyKCk7CisgICAgICAgICAgICBBU1NFUlQoaXQtPnZhbHVlKTsKICAgICAgICAg
CiAgICAgICAgICAgICBtX3dhaXRGb3JNZXNzYWdlQ29uZGl0aW9uLnNpZ25hbCgpOwogICAgICAg
ICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vZ3RrL1dv
cmtRdWV1ZUd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9ndGsvV29ya1F1ZXVlR3Rr
LmNwcAppbmRleCAxZGZhYjgzY2NmYjI0YzlmMDBlZTQwZDJkYWExYzk1YjE2MzgyYTQzLi42ODg1
ZDQ4NWJkMTE2ZDMyOGRlY2QwMmFhZjU0YzkxODc4MmIyZjE2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybS9ndGsvV29ya1F1ZXVlR3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9QbGF0Zm9ybS9ndGsvV29ya1F1ZXVlR3RrLmNwcApAQCAtMTY2LDcgKzE2Niw3IEBAIHZvaWQg
V29ya1F1ZXVlOjpyZWdpc3RlckV2ZW50U291cmNlSGFuZGxlcihpbnQgZmlsZURlc2NyaXB0b3Is
IGludCBjb25kaXRpb24sIGNvCiAgICAgICAgIFZlY3RvcjxFdmVudFNvdXJjZSo+IHNvdXJjZXM7
CiAgICAgICAgIEV2ZW50U291cmNlSXRlcmF0b3IgaXQgPSBtX2V2ZW50U291cmNlcy5maW5kKGZp
bGVEZXNjcmlwdG9yKTsKICAgICAgICAgaWYgKGl0ICE9IG1fZXZlbnRTb3VyY2VzLmVuZCgpKSAK
LSAgICAgICAgICAgIHNvdXJjZXMgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgc291cmNlcyA9
IGl0LT52YWx1ZTsKIAogICAgICAgICBzb3VyY2VzLmFwcGVuZChldmVudFNvdXJjZSk7CiAgICAg
ICAgIG1fZXZlbnRTb3VyY2VzLnNldChmaWxlRGVzY3JpcHRvciwgc291cmNlcyk7CkBAIC0xODYs
NyArMTg2LDcgQEAgdm9pZCBXb3JrUXVldWU6OnVucmVnaXN0ZXJFdmVudFNvdXJjZUhhbmRsZXIo
aW50IGZpbGVEZXNjcmlwdG9yKQogICAgIEFTU0VSVChtX2V2ZW50U291cmNlcy5jb250YWlucyhm
aWxlRGVzY3JpcHRvcikpOwogCiAgICAgaWYgKGl0ICE9IG1fZXZlbnRTb3VyY2VzLmVuZCgpKSB7
Ci0gICAgICAgIFZlY3RvcjxFdmVudFNvdXJjZSo+IHNvdXJjZXMgPSBpdC0+c2Vjb25kOworICAg
ICAgICBWZWN0b3I8RXZlbnRTb3VyY2UqPiBzb3VyY2VzID0gaXQtPnZhbHVlOwogICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc291cmNlcy5zaXplKCk7IGkrKykKICAgICAgICAgICAg
IHNvdXJjZXNbaV0tPmNhbmNlbCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybS9tYWMvV29ya1F1ZXVlTWFjLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL21hYy9X
b3JrUXVldWVNYWMuY3BwCmluZGV4IGFlNDczZWU1Y2M4NGU1ODQyOWIwNDM5Y2NkOTIxYWMyYzQ5
MmZmYWEuLjZlNTRjZWUwYjcwOTg0MGE1NGY3NmNkYWE0MjRmZWViNDYyOTA5YjEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL21hYy9Xb3JrUXVldWVNYWMuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtL21hYy9Xb3JrUXVldWVNYWMuY3BwCkBAIC0xNTMsNyArMTUz
LDcgQEAgdm9pZCBXb3JrUXVldWU6OnVucmVnaXN0ZXJNYWNoUG9ydEV2ZW50SGFuZGxlcihtYWNo
X3BvcnRfdCBtYWNoUG9ydCkKICAgICAKICAgICBBU1NFUlQobV9ldmVudFNvdXJjZXMuY29udGFp
bnMobWFjaFBvcnQpKTsKIAotICAgIEV2ZW50U291cmNlKiBldmVudFNvdXJjZSA9IGl0LT5zZWNv
bmQ7CisgICAgRXZlbnRTb3VyY2UqIGV2ZW50U291cmNlID0gaXQtPnZhbHVlOwogICAgIC8vIENh
bmNlbCBhbmQgcmVsZWFzZSB0aGUgc291cmNlLiBJdCB3aWxsIGJlIGRlbGV0ZWQgaW4gaXRzIGZp
bmFsaXplIGhhbmRsZXIuCiAgICAgZGlzcGF0Y2hfc291cmNlX2NhbmNlbChldmVudFNvdXJjZS0+
ZGlzcGF0Y2hTb3VyY2UoKSk7CiAgICAgZGlzcGF0Y2hfcmVsZWFzZShldmVudFNvdXJjZS0+ZGlz
cGF0Y2hTb3VyY2UoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvUGx1Z2lu
cy9OUFJlbW90ZU9iamVjdE1hcC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvUGx1Z2lucy9O
UFJlbW90ZU9iamVjdE1hcC5jcHAKaW5kZXggNzY0MWFmNWU4Yzg5MmQxZDM3ZWU5NmRhOWI3ZTYw
NTg5OTczZTg4YS4uYjVlYzJkOWRhMzlmMjZkY2I0MzIwZDk1ZTAzZjJmY2FlNGU3ZDdkZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1BsdWdpbnMvTlBSZW1vdGVPYmplY3RNYXAu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9QbHVnaW5zL05QUmVtb3RlT2JqZWN0TWFw
LmNwcApAQCAtMjAwLDcgKzIwMCw3IEBAIHZvaWQgTlBSZW1vdGVPYmplY3RNYXA6OnBsdWdpbkRl
c3Ryb3llZChQbHVnaW4qIHBsdWdpbikKIAogICAgIC8vIEdhdGhlciB0aGUgcmVjZWl2ZXJzIGFz
c29jaWF0ZWQgd2l0aCB0aGlzIHBsdWctaW4uCiAgICAgZm9yIChIYXNoTWFwPHVpbnQ2NF90LCBO
UE9iamVjdE1lc3NhZ2VSZWNlaXZlcio+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcmVnaXN0ZXJl
ZE5QT2JqZWN0cy5iZWdpbigpLCBlbmQgPSBtX3JlZ2lzdGVyZWROUE9iamVjdHMuZW5kKCk7IGl0
ICE9IGVuZDsgKytpdCkgewotICAgICAgICBOUE9iamVjdE1lc3NhZ2VSZWNlaXZlciogbnBPYmpl
Y3RNZXNzYWdlUmVjZWl2ZXIgPSBpdC0+c2Vjb25kOworICAgICAgICBOUE9iamVjdE1lc3NhZ2VS
ZWNlaXZlciogbnBPYmplY3RNZXNzYWdlUmVjZWl2ZXIgPSBpdC0+dmFsdWU7CiAgICAgICAgIGlm
IChucE9iamVjdE1lc3NhZ2VSZWNlaXZlci0+cGx1Z2luKCkgPT0gcGx1Z2luKQogICAgICAgICAg
ICAgbWVzc2FnZVJlY2VpdmVycy5hcHBlbmQobnBPYmplY3RNZXNzYWdlUmVjZWl2ZXIpOwogICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Vc2VyTWVzc2FnZUNvZGVycy5o
IGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1VzZXJNZXNzYWdlQ29kZXJzLmgKaW5kZXggZWU0YWI2
NGZmYTViNjNiOTJjMDk5OTU1NDg1ZjIwZTIxNTU1ZTZjZi4uMmVjNWJiNGQ1MmIyMDc1MWZkYjU3
ZWQ2NjI4MGVhOTA3YmQzOWI1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1Vz
ZXJNZXNzYWdlQ29kZXJzLmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1VzZXJNZXNzYWdl
Q29kZXJzLmgKQEAgLTkzLDggKzkzLDggQEAgcHVibGljOgogICAgICAgICAgICAgSW1tdXRhYmxl
RGljdGlvbmFyeTo6TWFwVHlwZTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAuYmVnaW4oKTsKICAg
ICAgICAgICAgIEltbXV0YWJsZURpY3Rpb25hcnk6Ok1hcFR5cGU6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IG1hcC5lbmQoKTsKICAgICAgICAgICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAg
ICAgICAgICAgICAgICBlbmNvZGVyLT5lbmNvZGUoaXQtPmZpcnN0KTsKLSAgICAgICAgICAgICAg
ICBlbmNvZGVyLT5lbmNvZGUoT3duZXIoaXQtPnNlY29uZC5nZXQoKSkpOworICAgICAgICAgICAg
ICAgIGVuY29kZXItPmVuY29kZShpdC0+a2V5KTsKKyAgICAgICAgICAgICAgICBlbmNvZGVyLT5l
bmNvZGUoT3duZXIoaXQtPnZhbHVlLmdldCgpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hh
cmVkL1dlYlByZWZlcmVuY2VzU3RvcmUuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlBy
ZWZlcmVuY2VzU3RvcmUuY3BwCmluZGV4IDg5NzM0YmYwZWZiMDgwMzgwZWRjNjQ1ZTNlYzcxZGNk
ZjM2N2M2ZjkuLjNiYTI3ZWRjMDYwNjc5ZWJkNWRjZWUwYTU3ZmZkN2E1YjlkMGI5ZmQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcmVmZXJlbmNlc1N0b3JlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5jcHAKQEAgLTE1MSw3
ICsxNTEsNyBAQCBzdGF0aWMgdHlwZW5hbWUgTWFwVHlwZTo6TWFwcGVkVHlwZSB2YWx1ZUZvcktl
eShjb25zdCBNYXBUeXBlJiBtYXAsIGNvbnN0IHR5cGVuYQogewogICAgIHR5cGVuYW1lIE1hcFR5
cGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLmZpbmQoa2V5KTsKICAgICBpZiAoaXQgIT0gbWFw
LmVuZCgpKQotICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGl0LT52
YWx1ZTsKIAogICAgIHJldHVybiBkZWZhdWx0VmFsdWVGb3JLZXk8dHlwZW5hbWUgTWFwVHlwZTo6
TWFwcGVkVHlwZT4oa2V5KTsKIH0KQEAgLTE4Nyw3ICsxODcsNyBAQCBib29sIFdlYlByZWZlcmVu
Y2VzU3RvcmU6OmdldEJvb2xWYWx1ZUZvcktleShjb25zdCBTdHJpbmcmIGtleSkgY29uc3QKICAg
ICAvLyBGSVhNRTogRXh0ZW5kIG92ZXJyaWRpbmcgdG8gb3RoZXIga2V5IHR5cGVzIHVzZWQgZnJv
bSBUZXN0UnVubmVyLgogICAgIEJvb2xPdmVycmlkZXNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
Ym9vbFRlc3RSdW5uZXJPdmVycmlkZXNNYXAoKS5maW5kKGtleSk7CiAgICAgaWYgKGl0ICE9IGJv
b2xUZXN0UnVubmVyT3ZlcnJpZGVzTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdC0+c2Vj
b25kOworICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwogICAgIHJldHVybiB2YWx1ZUZvcktleSht
X2Jvb2xWYWx1ZXMsIGtleSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9tYWMvV2ViQ29yZUFyZ3VtZW50Q29kZXJzTWFjLm1tIGIvU291cmNlL1dlYktpdDIvU2hhcmVk
L21hYy9XZWJDb3JlQXJndW1lbnRDb2RlcnNNYWMubW0KaW5kZXggMTk2YWIxMWM3YTc0MzEwN2Qz
ODAwZTFmZjhmYTViZTFmMmIzYjgxOC4uMGY5ZDNkOGEzYmZiNzM3NDNiMzkzMzUzMzVkYzVmNThj
MWQxNDc4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9XZWJDb3JlQXJn
dW1lbnRDb2RlcnNNYWMubW0KKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9XZWJDb3Jl
QXJndW1lbnRDb2RlcnNNYWMubW0KQEAgLTE4Myw3ICsxODMsNyBAQCBib29sIEFyZ3VtZW50Q29k
ZXI8UmVzb3VyY2VFcnJvcj46OmRlY29kZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIFJlc291
cmNlRXJybwogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9
IHN0cmluZ1VzZXJJbmZvTWFwLmJlZ2luKCk7CiAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHN0cmluZ1VzZXJJbmZvTWFwLmVuZCgpOwogICAgIGZvciAo
OyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIFt1c2VySW5mbyBzZXRPYmplY3Q6bnNTdHJpbmco
aXQtPnNlY29uZCkgZm9yS2V5Om5zU3RyaW5nKGl0LT5maXJzdCldOworICAgICAgICBbdXNlcklu
Zm8gc2V0T2JqZWN0Om5zU3RyaW5nKGl0LT52YWx1ZSkgZm9yS2V5Om5zU3RyaW5nKGl0LT5rZXkp
XTsKIAogICAgIGlmIChjZXJ0aWZpY2F0ZS5jZXJ0aWZpY2F0ZUNoYWluKCkpCiAgICAgICAgIFt1
c2VySW5mbyBzZXRPYmplY3Q6KE5TQXJyYXkgKiljZXJ0aWZpY2F0ZS5jZXJ0aWZpY2F0ZUNoYWlu
KCkgZm9yS2V5OkAiTlNFcnJvclBlZXJDZXJ0aWZpY2F0ZUNoYWluS2V5Il07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvQXJndW1lbnRDb2RlcnNRdC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvcXQvQXJndW1lbnRDb2RlcnNRdC5jcHAKaW5kZXggYzg5YmY0NGYxNzE5
MGIwMmM0MTEyYmNiZWQ2ZTBjNDFmYTNjNjc1Zi4uYTQzOWNhZmYxZTQ4OGUxMDJjNTUwYWQwNGYz
NDZkNTk5NmRkMTg5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL3F0L0FyZ3Vt
ZW50Q29kZXJzUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9Bcmd1bWVudENv
ZGVyc1F0LmNwcApAQCAtODYsOCArODYsOCBAQCBib29sIEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6
RHJhZ0RhdGE+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBEcmFnRGF0YQogICAg
ICAgICBNSU1FRGF0YUhhc2hNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLmJlZ2luKCk7CiAgICAgICAg
IE1JTUVEYXRhSGFzaE1hcDo6aXRlcmF0b3IgZW5kID0gbWFwLmVuZCgpOwogICAgICAgICBmb3Ig
KDsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBRQnl0ZUFycmF5IGJ5dGVzKChjaGFy
KilpdC0+c2Vjb25kLmRhdGEoKSwgaXQtPnNlY29uZC5zaXplKCkpOwotICAgICAgICAgICAgbWlt
ZURhdGEtPnNldERhdGEoaXQtPmZpcnN0LCBieXRlcyk7CisgICAgICAgICAgICBRQnl0ZUFycmF5
IGJ5dGVzKChjaGFyKilpdC0+dmFsdWUuZGF0YSgpLCBpdC0+dmFsdWUuc2l6ZSgpKTsKKyAgICAg
ICAgICAgIG1pbWVEYXRhLT5zZXREYXRhKGl0LT5rZXksIGJ5dGVzKTsKICAgICAgICAgfQogICAg
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL3NvdXAvV2ViQ29yZUFyZ3Vt
ZW50Q29kZXJzU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvc291cC9XZWJDb3JlQXJn
dW1lbnRDb2RlcnNTb3VwLmNwcAppbmRleCBkYmUyYzUxY2RjZmI3OThhZmFjZDJmZDFkYmZhNDky
YjFhMWVmYjFiLi4zM2Q5YmQzZmYyMGU2MTkwY2MzY2U0ZmY4NTk5MzhiMDM5NGVkNmMxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvc291cC9XZWJDb3JlQXJndW1lbnRDb2RlcnNT
b3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvc291cC9XZWJDb3JlQXJndW1lbnRD
b2RlcnNTb3VwLmNwcApAQCAtMTQ0LDcgKzE0NCw3IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxSZXNv
dXJjZVJlc3BvbnNlPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgUmVzb3VyY2VS
CiAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoaGVhZGVycykpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaGVhZGVycy5i
ZWdpbigpLCBlbmQgPSBoZWFkZXJzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHJl
c3BvbnNlLnNldEhUVFBIZWFkZXJGaWVsZChpdC0+Zmlyc3QsIGl0LT5zZWNvbmQpOworICAgICAg
ICByZXNwb25zZS5zZXRIVFRQSGVhZGVyRmllbGQoaXQtPmtleSwgaXQtPnZhbHVlKTsKIAogICAg
IHVpbnQzMl90IHNvdXBNZXNzYWdlRmxhZ3M7CiAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoc291
cE1lc3NhZ2VGbGFncykpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3QuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0LmNwcAppbmRleCBmNmJkMGE3NjBlNmZlYWVk
ZjNmZTAzM2M4MWYzYTFhMDlkMWE4NDVlLi4zMWVmNWFmYWZlNmQzNTk5NDJkNDJlNWU3ZDVkNGNm
MmZlMjI5MTY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9l
d2tfYmFja19mb3J3YXJkX2xpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdC5jcHAKQEAgLTU0LDcgKzU0LDcgQEAgc3RydWN0
IF9Fd2tfQmFja19Gb3J3YXJkX0xpc3QgewogICAgICAgICBJdGVtc01hcDo6aXRlcmF0b3IgaXQg
PSB3cmFwcGVyQ2FjaGUuYmVnaW4oKTsKICAgICAgICAgSXRlbXNNYXA6Oml0ZXJhdG9yIGVuZCA9
IHdyYXBwZXJDYWNoZS5lbmQoKTsKICAgICAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkKLSAg
ICAgICAgICAgIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX3VucmVmKGl0LT5zZWNvbmQpOwor
ICAgICAgICAgICAgZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fdW5yZWYoaXQtPnZhbHVlKTsK
ICAgICB9CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfY29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
Y29udGV4dC5jcHAKaW5kZXggNzE1MDRmNjQxZDIwNjVkZjJiZjY4OGRhNDVlOTVkNWE1MWRiNThi
NC4uY2YyZmNjM2Y5MjE4YWRmMDJjNDQ1YmEzMjUwZjJkMGIzZjBiYmRlMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcApAQCAtOTcsNyAr
OTcsNyBAQCBzdHJ1Y3QgX0V3a19Db250ZXh0IHsKICAgICAgICAgSGFzaE1hcDx1aW50NjRfdCwg
RXdrX0Rvd25sb2FkX0pvYio+OjppdGVyYXRvciBpdCA9IGRvd25sb2FkSm9icy5iZWdpbigpOwog
ICAgICAgICBIYXNoTWFwPHVpbnQ2NF90LCBFd2tfRG93bmxvYWRfSm9iKj46Oml0ZXJhdG9yIGVu
ZCA9IGRvd25sb2FkSm9icy5lbmQoKTsKICAgICAgICAgZm9yICggOyBpdCAhPSBlbmQ7ICsraXQp
Ci0gICAgICAgICAgICBld2tfZG93bmxvYWRfam9iX3VucmVmKGl0LT5zZWNvbmQpOworICAgICAg
ICAgICAgZXdrX2Rvd25sb2FkX2pvYl91bnJlZihpdC0+dmFsdWUpOwogICAgIH0KIH07CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcAppbmRleCBjZTdm
N2I0NTQ5NDYzYzEwZmJhY2NiNzU3M2EzYmVhYWRlMjUzYjBkLi43MTQzODAyNzEwMzdmMGEzZjVl
YzNlZjU5YzQ1NzFhM2JkZjA0OTk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfdmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX3ZpZXcuY3BwCkBAIC0zNDQsNyArMzQ0LDcgQEAgc3RhdGljIHZvaWQgX2V3a192
aWV3X3ByaXZfbG9hZGluZ19yZXNvdXJjZXNfY2xlYXIoTG9hZGluZ1Jlc291cmNlc01hcCYgbG9h
ZGluZ1IKICAgICBMb2FkaW5nUmVzb3VyY2VzTWFwOjppdGVyYXRvciBpdCA9IGxvYWRpbmdSZXNv
dXJjZXNNYXAuYmVnaW4oKTsKICAgICBMb2FkaW5nUmVzb3VyY2VzTWFwOjppdGVyYXRvciBlbmQg
PSBsb2FkaW5nUmVzb3VyY2VzTWFwLmVuZCgpOwogICAgIGZvciAoIDsgaXQgIT0gZW5kOyArK2l0
KQotICAgICAgICBld2tfd2ViX3Jlc291cmNlX3VucmVmKGl0LT5zZWNvbmQpOworICAgICAgICBl
d2tfd2ViX3Jlc291cmNlX3VucmVmKGl0LT52YWx1ZSk7CiAKICAgICBsb2FkaW5nUmVzb3VyY2Vz
TWFwLmNsZWFyKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRXZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFdlYlZpZXcuY3BwCmluZGV4IGVlODZkNDQ4YTg4MmE4YTY3YjUxY2M2OGNkNDUzYmU1
YWFiMDdjYzguLjFmMDFiNDg1NTU1NTdmOWUwZWRkZTg0OGJkNDY2YTYxMWJhYmUxYTkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3Bw
CkBAIC0yMzAwLDcgKzIzMDAsNyBAQCBHTGlzdCogd2Via2l0X3dlYl92aWV3X2dldF9zdWJyZXNv
dXJjZXMoV2ViS2l0V2ViVmlldyogd2ViVmlldykKICAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSog
cHJpdiA9IHdlYlZpZXctPnByaXY7CiAgICAgUmVzb3VyY2VzTWFwOjpjb25zdF9pdGVyYXRvciBl
bmQgPSBwcml2LT5zdWJyZXNvdXJjZXNNYXAuZW5kKCk7CiAgICAgZm9yIChSZXNvdXJjZXNNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcHJpdi0+c3VicmVzb3VyY2VzTWFwLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkKLSAgICAgICAgc3VicmVzb3VyY2VzID0gZ19saXN0X3ByZXBlbmQoc3VicmVz
b3VyY2VzLCBpdC0+c2Vjb25kLmdldCgpKTsKKyAgICAgICAgc3VicmVzb3VyY2VzID0gZ19saXN0
X3ByZXBlbmQoc3VicmVzb3VyY2VzLCBpdC0+dmFsdWUuZ2V0KCkpOwogCiAgICAgcmV0dXJuIGdf
bGlzdF9yZXZlcnNlKHN1YnJlc291cmNlcyk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAKaW5kZXggNDkyNWI1YTdj
MWNlZTljODRmZTU4NDJiY2QwYzFhOTEyMjZlNTk0YS4uMTkwOTExNzMxNjdmZjYzYzcwY2RhZjFm
YjkwMTRmOWQ2MTMzZjNiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcApAQCAtMjI0LDcgKzIyNCw3IEBAIHN0YXRp
YyB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlQ29udGFpbmVyRm9yYWxsKEd0a0NvbnRhaW5lciogY29u
dGFpbmVyLCBnYm9vbGVhbiBpCiAgICAgV2ViS2l0V2ViVmlld0NoaWxkcmVuTWFwIGNoaWxkcmVu
ID0gcHJpdi0+Y2hpbGRyZW47CiAgICAgV2ViS2l0V2ViVmlld0NoaWxkcmVuTWFwOjpjb25zdF9p
dGVyYXRvciBlbmQgPSBjaGlsZHJlbi5lbmQoKTsKICAgICBmb3IgKFdlYktpdFdlYlZpZXdDaGls
ZHJlbk1hcDo6Y29uc3RfaXRlcmF0b3IgY3VycmVudCA9IGNoaWxkcmVuLmJlZ2luKCk7IGN1cnJl
bnQgIT0gZW5kOyArK2N1cnJlbnQpCi0gICAgICAgICgqY2FsbGJhY2spKGN1cnJlbnQtPmZpcnN0
LCBjYWxsYmFja0RhdGEpOworICAgICAgICAoKmNhbGxiYWNrKShjdXJyZW50LT5rZXksIGNhbGxi
YWNrRGF0YSk7CiAKICAgICBpZiAoaW5jbHVkZUludGVybmFscyAmJiBwcml2LT5pbnNwZWN0b3JW
aWV3KQogICAgICAgICAoKmNhbGxiYWNrKShwcml2LT5pbnNwZWN0b3JWaWV3LCBjYWxsYmFja0Rh
dGEpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tQcmlu
dGluZ1ZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ByaW50aW5n
Vmlldy5tbQppbmRleCA2M2M1ODg5NWY3MTI5M2IxYjU0NThkOWViNjg0MWQwYTA2NDgxNDlkLi5j
YTFjYWQ1ODI1OTlmZDBjNjBiMjUyNGM2YmM3NzI3NjlkMmZkMzlhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ByaW50aW5nVmlldy5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ByaW50aW5nVmlldy5tbQpAQCAtMTk0LDgg
KzE5NCw4IEBAIHN0YXRpYyBCT09MIGlzRm9yY2luZ1ByZXZpZXdVcGRhdGU7CiAtICh1aW50NjRf
dClfZXhwZWN0ZWRQcmV2aWV3Q2FsbGJhY2tGb3JSZWN0Oihjb25zdCBJbnRSZWN0JilyZWN0CiB7
CiAgICAgZm9yIChIYXNoTWFwPHVpbnQ2NF90LCBXZWJDb3JlOjpJbnRSZWN0Pjo6aXRlcmF0b3Ig
aXRlciA9IF9leHBlY3RlZFByZXZpZXdDYWxsYmFja3MuYmVnaW4oKTsgaXRlciAhPSBfZXhwZWN0
ZWRQcmV2aWV3Q2FsbGJhY2tzLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgaWYgKGl0ZXItPnNl
Y29uZCAgPT0gcmVjdCkKLSAgICAgICAgICAgIHJldHVybiBpdGVyLT5maXJzdDsKKyAgICAgICAg
aWYgKGl0ZXItPnZhbHVlICA9PSByZWN0KQorICAgICAgICAgICAgcmV0dXJuIGl0ZXItPmtleTsK
ICAgICB9CiAgICAgcmV0dXJuIDA7CiB9CkBAIC0yMjksOCArMjI5LDggQEAgc3RhdGljIHZvaWQg
cGFnZURpZERyYXdUb1BERihXS0RhdGFSZWYgZGF0YVJlZiwgV0tFcnJvclJlZiwgdm9pZCogdW50
eXBlZENvbnRleHQKICAgICAgICAgICAgIEFTU0VSVChbdmlldyBfaXNQcmludGluZ1ByZXZpZXdd
KTsKIAogICAgICAgICAgICAgaWYgKGRhdGEpIHsKLSAgICAgICAgICAgICAgICBIYXNoTWFwPFdl
YkNvcmU6OkludFJlY3QsIFZlY3Rvcjx1aW50OF90PiA+OjpBZGRSZXN1bHQgZW50cnkgPSB2aWV3
LT5fcGFnZVByZXZpZXdzLmFkZChpdGVyLT5zZWNvbmQsIFZlY3Rvcjx1aW50OF90PigpKTsKLSAg
ICAgICAgICAgICAgICBlbnRyeS5pdGVyYXRvci0+c2Vjb25kLmFwcGVuZChkYXRhLT5ieXRlcygp
LCBkYXRhLT5zaXplKCkpOworICAgICAgICAgICAgICAgIEhhc2hNYXA8V2ViQ29yZTo6SW50UmVj
dCwgVmVjdG9yPHVpbnQ4X3Q+ID46OkFkZFJlc3VsdCBlbnRyeSA9IHZpZXctPl9wYWdlUHJldmll
d3MuYWRkKGl0ZXItPnZhbHVlLCBWZWN0b3I8dWludDhfdD4oKSk7CisgICAgICAgICAgICAgICAg
ZW50cnkuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChkYXRhLT5ieXRlcygpLCBkYXRhLT5zaXplKCkp
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgdmlldy0+X2V4cGVjdGVkUHJldmlld0NhbGxi
YWNrcy5yZW1vdmUoY29udGV4dC0+Y2FsbGJhY2tJRCk7CiAgICAgICAgICAgICBib29sIHJlY2Vp
dmVkUmVzcG9uc2VUb0xhdGVzdFJlcXVlc3QgPSB2aWV3LT5fbGF0ZXN0RXhwZWN0ZWRQcmV2aWV3
Q2FsbGJhY2sgPT0gY29udGV4dC0+Y2FsbGJhY2tJRDsKQEAgLTQ5NCw3ICs0OTQsNyBAQCBzdGF0
aWMgdm9pZCBwcmVwYXJlRGF0YUZvclByaW50aW5nT25TZWNvbmRhcnlUaHJlYWQodm9pZCogdW50
eXBlZENvbnRleHQpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBjb25zdCBWZWN0b3I8
dWludDhfdD4mIHBkZkRhdGFCeXRlcyA9IHBhZ2VQcmV2aWV3SXRlcmF0b3ItPnNlY29uZDsKKyAg
ICBjb25zdCBWZWN0b3I8dWludDhfdD4mIHBkZkRhdGFCeXRlcyA9IHBhZ2VQcmV2aWV3SXRlcmF0
b3ItPnZhbHVlOwogICAgIFJldGFpblB0cjxOU0RhdGE+IHBkZkRhdGEoQWRvcHROUywgW1tOU0Rh
dGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6cGRmRGF0YUJ5dGVzLmRhdGEoKSBsZW5ndGg6cGRmRGF0
YUJ5dGVzLnNpemUoKV0pOwogICAgIFJldGFpblB0cjxQREZEb2N1bWVudD4gcGRmRG9jdW1lbnQo
QWRvcHROUywgW1twZGZEb2N1bWVudENsYXNzKCkgYWxsb2NdIGluaXRXaXRoRGF0YTpwZGZEYXRh
LmdldCgpXSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFj
L1dLVmlldy5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQpp
bmRleCBlYjZiODE5YzVkNDA1NjM5ODE1ZWU3YjE4OTU2ZWM3MTA4YTVkYTdmLi4xOTNhMWQwNTJj
ZTI5YzMxMWU0ODBkYTNmODU1NWI5M2QxMjA4NTRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCkBAIC00MjMsNyArNDIzLDcgQEAgc3RhdGljIFN0cmluZyBj
b21tYW5kTmFtZUZvclNlbGVjdG9yKFNFTCBzZWxlY3RvcikKICAgICBzdGF0aWMgY29uc3QgU2Vs
ZWN0b3JOYW1lTWFwKiBleGNlcHRpb25NYXAgPSBjcmVhdGVTZWxlY3RvckV4Y2VwdGlvbk1hcCgp
OwogICAgIFNlbGVjdG9yTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBleGNlcHRpb25NYXAt
PmZpbmQoc2VsZWN0b3IpOwogICAgIGlmIChpdCAhPSBleGNlcHRpb25NYXAtPmVuZCgpKQotICAg
ICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKICAgICAK
ICAgICAvLyBSZW1vdmUgdGhlIHRyYWlsaW5nIGNvbG9uLgogICAgIC8vIE5vIG5lZWQgdG8gY2Fw
aXRhbGl6ZSB0aGUgY29tbWFuZCBuYW1lIHNpbmNlIEVkaXRvciBjb21tYW5kIG5hbWVzIGFyZQpA
QCAtNzM3LDcgKzczNyw3IEBAIHN0YXRpYyB2b2lkIHZhbGlkYXRlQ29tbWFuZENhbGxiYWNrKFdL
U3RyaW5nUmVmIGNvbW1hbmROYW1lLCBib29sIGlzRW5hYmxlZCwgaW50CiAKICAgICAvLyBBZGQg
dGhpcyBpdGVtIHRvIHRoZSB2ZWN0b3Igb2YgaXRlbXMgZm9yIGEgZ2l2ZW4gY29tbWFuZCB0aGF0
IGFyZSBhd2FpdGluZyB2YWxpZGF0aW9uLgogICAgIFZhbGlkYXRpb25NYXA6OkFkZFJlc3VsdCBh
ZGRSZXN1bHQgPSBfZGF0YS0+X3ZhbGlkYXRpb25NYXAuYWRkKGNvbW1hbmROYW1lLCBWYWxpZGF0
aW9uVmVjdG9yKCkpOwotICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLmFwcGVuZChpdGVt
KTsKKyAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChpdGVtKTsKICAgICBpZiAo
YWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKICAgICAgICAgLy8gSWYgd2UgYXJlIG5vdCBhbHJlYWR5
IGF3YWl0aW5nIHZhbGlkYXRpb24gZm9yIHRoaXMgY29tbWFuZCwgc3RhcnQgdGhlIGFzeW5jaHJv
bm91cyB2YWxpZGF0aW9uIHByb2Nlc3MuCiAgICAgICAgIC8vIEZJWE1FOiBUaGVvcmV0aWNhbGx5
LCB0aGVyZSBpcyBhIHJhY2UgaGVyZTsgd2hlbiB3ZSBnZXQgdGhlIGFuc3dlciBpdCBtaWdodCBi
ZSBvbGQsIGZyb20gYSBwcmV2aW91cyB0aW1lCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRl
ZEJhY2tpbmdTdG9yZS5jcHAKaW5kZXggODRmNmViZDJmMTY1OGU2OTk2NWU0NzFiYTM2MjVhOTIy
ODlmYWE3Mi4uNzdmZGMwYTI2Zjg4ZDQzMDdhN2I2MDA3ZGFiZDUzZjI5MDZkNTQ3ZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRp
bmF0ZWRCYWNraW5nU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29y
ZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmNwcApAQCAtODAsMTUgKzgw
LDE1IEBAIHZvaWQgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OnVwZGF0ZVRpbGUoaW50IGlkLCBj
b25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zCiB7CiAgICAgSGFzaE1hcDxpbnQsIENvb3Jk
aW5hdGVkQmFja2luZ1N0b3JlVGlsZT46Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5maW5kKGlkKTsK
ICAgICBBU1NFUlQoaXQgIT0gbV90aWxlcy5lbmQoKSk7Ci0gICAgaXQtPnNlY29uZC5pbmNyZW1l
bnRSZXBhaW50Q291bnQoKTsKLSAgICBpdC0+c2Vjb25kLnNldEJhY2tCdWZmZXIodGFyZ2V0UmVj
dCwgc291cmNlUmVjdCwgYmFja0J1ZmZlciwgb2Zmc2V0KTsKKyAgICBpdC0+dmFsdWUuaW5jcmVt
ZW50UmVwYWludENvdW50KCk7CisgICAgaXQtPnZhbHVlLnNldEJhY2tCdWZmZXIodGFyZ2V0UmVj
dCwgc291cmNlUmVjdCwgYmFja0J1ZmZlciwgb2Zmc2V0KTsKIH0KIAogUGFzc1JlZlB0cjxCaXRt
YXBUZXh0dXJlPiBDb29yZGluYXRlZEJhY2tpbmdTdG9yZTo6dGV4dHVyZSgpIGNvbnN0CiB7CiAg
ICAgSGFzaE1hcDxpbnQsIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZT46OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IG1fdGlsZXMuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPGludCwgQ29vcmRpbmF0
ZWRCYWNraW5nU3RvcmVUaWxlPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gdGV4dHVy
ZSA9IGl0LT5zZWNvbmQudGV4dHVyZSgpOworICAgICAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4g
dGV4dHVyZSA9IGl0LT52YWx1ZS50ZXh0dXJlKCk7CiAgICAgICAgIGlmICh0ZXh0dXJlKQogICAg
ICAgICAgICAgcmV0dXJuIHRleHR1cmU7CiAgICAgfQpAQCAtMTEyLDcgKzExMiw3IEBAIHZvaWQg
Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OnBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBw
ZXIqIHRleHR1cmVNYXBwZXIsCiAgICAgSGFzaE1hcDxpbnQsIENvb3JkaW5hdGVkQmFja2luZ1N0
b3JlVGlsZT46Oml0ZXJhdG9yIGVuZCA9IG1fdGlsZXMuZW5kKCk7CiAgICAgRmxvYXRSZWN0IGNv
dmVyZWRSZWN0OwogICAgIGZvciAoSGFzaE1hcDxpbnQsIENvb3JkaW5hdGVkQmFja2luZ1N0b3Jl
VGlsZT46Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
LSAgICAgICAgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlJiB0aWxlID0gaXQtPnNlY29uZDsK
KyAgICAgICAgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlJiB0aWxlID0gaXQtPnZhbHVlOwog
ICAgICAgICBpZiAoIXRpbGUudGV4dHVyZSgpKQogICAgICAgICAgICAgY29udGludWU7CiAKQEAg
LTE1Niw3ICsxNTYsNyBAQCB2b2lkIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjpjb21taXRUaWxl
T3BlcmF0aW9ucyhUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyKQogCiAgICAgSGFzaE1hcDxp
bnQsIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZT46Oml0ZXJhdG9yIHRpbGVzRW5kID0gbV90
aWxlcy5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8aW50LCBDb29yZGluYXRlZEJhY2tpbmdTdG9y
ZVRpbGU+OjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0gdGlsZXNFbmQ7ICsr
aXQpCi0gICAgICAgIGl0LT5zZWNvbmQuc3dhcEJ1ZmZlcnModGV4dHVyZU1hcHBlcik7CisgICAg
ICAgIGl0LT52YWx1ZS5zd2FwQnVmZmVycyh0ZXh0dXJlTWFwcGVyKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRp
bmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5LmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJv
eHkuY3BwCmluZGV4IDZiMGRlN2YyNTRiMTgwM2QwMzY5YTZjZjRmODgzOTg5YjgzODkxYzAuLmZj
YzFmNjc1NjViNjhhOGEwNzg4YTAxYTRkMzhhOTg3OWY3NjQxOWMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5h
dG9yUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdy
YXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwCkBAIC03Myw3ICs3Myw3IEBAIHZv
aWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6dXBkYXRlVGlsZUZvckxheWVyKGludCBsYXll
cklELCBpbnQgdGlsZUlELCBjb25zCiAgICAgICAgICAgICBzdXJmYWNlID0gU2hhcmVhYmxlU3Vy
ZmFjZTo6Y3JlYXRlKHVwZGF0ZUluZm8uc3VyZmFjZUhhbmRsZSk7CiAgICAgICAgICAgICBtX3N1
cmZhY2VzLmFkZCh0b2tlbiwgc3VyZmFjZSk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
c3VyZmFjZSA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICBzdXJmYWNlID0gaXQtPnZhbHVlOwog
ICAgIH0gZWxzZQogICAgICAgICBzdXJmYWNlID0gU2hhcmVhYmxlU3VyZmFjZTo6Y3JlYXRlKHVw
ZGF0ZUluZm8uc3VyZmFjZUhhbmRsZSk7CiAjZWxzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuY3BwIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVu
ZGVyZXIuY3BwCmluZGV4IDQ4MWI5Zjc0Yjg5ODYxMTk0NmNiNjg3NGRkYmFlMjk1MjIwNzlkYmIu
LjVlMGNlMmY4ZDE1MTM1ODY2YjJmY2Q3YmRmOWU0YTdjNzhlODVmMmYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRl
cmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9MYXllclRyZWVSZW5kZXJlci5jcHAKQEAgLTE4Myw3ICsxODMsNyBAQCB2b2lkIExheWVyVHJl
ZVJlbmRlcmVyOjphZGp1c3RQb3NpdGlvbkZvckZpeGVkTGF5ZXJzKCkKIAogICAgIExheWVyTWFw
OjppdGVyYXRvciBlbmQgPSBtX2ZpeGVkTGF5ZXJzLmVuZCgpOwogICAgIGZvciAoTGF5ZXJNYXA6
Oml0ZXJhdG9yIGl0ID0gbV9maXhlZExheWVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0g
ICAgICAgIHRvVGV4dHVyZU1hcHBlckxheWVyKGl0LT5zZWNvbmQpLT5zZXRTY3JvbGxQb3NpdGlv
bkRlbHRhSWZOZWVkZWQoZGVsdGEpOworICAgICAgICB0b1RleHR1cmVNYXBwZXJMYXllcihpdC0+
dmFsdWUpLT5zZXRTY3JvbGxQb3NpdGlvbkRlbHRhSWZOZWVkZWQoZGVsdGEpOwogfQogCiB2b2lk
IExheWVyVHJlZVJlbmRlcmVyOjpkaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbihjb25zdCBJbnRQb2lu
dCYgcG9zaXRpb24pCkBAIC0yMDYsNyArMjA2LDcgQEAgdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6
c3luY0NhbnZhcyhXZWJMYXllcklEIGlkLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBjYW52YXMK
ICAgICAgICAgY2FudmFzQmFja2luZ1N0b3JlID0gVGV4dHVyZU1hcHBlclN1cmZhY2VCYWNraW5n
U3RvcmU6OmNyZWF0ZSgpOwogICAgICAgICBtX3N1cmZhY2VCYWNraW5nU3RvcmVzLnNldChpZCwg
Y2FudmFzQmFja2luZ1N0b3JlKTsKICAgICB9IGVsc2UKLSAgICAgICAgY2FudmFzQmFja2luZ1N0
b3JlID0gaXQtPnNlY29uZDsKKyAgICAgICAgY2FudmFzQmFja2luZ1N0b3JlID0gaXQtPnZhbHVl
OwogCiAgICAgY2FudmFzQmFja2luZ1N0b3JlLT5zZXRHcmFwaGljc1N1cmZhY2UoZ3JhcGhpY3NT
dXJmYWNlVG9rZW4sIGNhbnZhc1NpemUsIGZyb250QnVmZmVyKTsKICAgICBsYXllci0+c2V0Q29u
dGVudHNUb01lZGlhKGNhbnZhc0JhY2tpbmdTdG9yZS5nZXQoKSk7CkBAIC0yMTcsNyArMjE3LDcg
QEAgdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6c2V0TGF5ZXJDaGlsZHJlbihXZWJMYXllcklEIGlk
LCBjb25zdCBWZWN0b3I8V2ViTGF5ZXJJRD4KIHsKICAgICBlbnN1cmVMYXllcihpZCk7CiAgICAg
TGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9sYXllcnMuZmluZChpZCk7Ci0gICAgR3JhcGhpY3NM
YXllciogbGF5ZXIgPSBpdC0+c2Vjb25kOworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gaXQt
PnZhbHVlOwogICAgIFZlY3RvcjxHcmFwaGljc0xheWVyKj4gY2hpbGRyZW47CiAKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGNoaWxkSURzLnNpemUoKTsgKytpKSB7CkBAIC0yMzksNyArMjM5
LDcgQEAgdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6c2V0TGF5ZXJGaWx0ZXJzKFdlYkxheWVySUQg
aWQsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGYKICAgICBMYXllck1hcDo6aXRlcmF0b3IgaXQg
PSBtX2xheWVycy5maW5kKGlkKTsKICAgICBBU1NFUlQoaXQgIT0gbV9sYXllcnMuZW5kKCkpOwog
Ci0gICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBpdC0+c2Vjb25kOworICAgIEdyYXBoaWNzTGF5
ZXIqIGxheWVyID0gaXQtPnZhbHVlOwogICAgIGxheWVyLT5zZXRGaWx0ZXJzKGZpbHRlcnMpOwog
fQogI2VuZGlmCkBAIC0yNTAsNyArMjUwLDcgQEAgdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6c2V0
TGF5ZXJTdGF0ZShXZWJMYXllcklEIGlkLCBjb25zdCBXZWJMYXllckluZm8mIGxheWVySW4KICAg
ICBMYXllck1hcDo6aXRlcmF0b3IgaXQgPSBtX2xheWVycy5maW5kKGlkKTsKICAgICBBU1NFUlQo
aXQgIT0gbV9sYXllcnMuZW5kKCkpOwogCi0gICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBpdC0+
c2Vjb25kOworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gaXQtPnZhbHVlOwogCiAgICAgbGF5
ZXItPnNldFJlcGxpY2F0ZWRCeUxheWVyKGxheWVyQnlJRChsYXllckluZm8ucmVwbGljYSkpOwog
ICAgIGxheWVyLT5zZXRNYXNrTGF5ZXIobGF5ZXJCeUlEKGxheWVySW5mby5tYXNrKSk7CkBAIC0z
NzcsNyArMzc3LDcgQEAgdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6YXNzaWduSW1hZ2VUb0xheWVy
KEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBpbnQ2NF90IGltYWdlSUQKIAogICAgIEhhc2hNYXA8aW50
NjRfdCwgUmVmUHRyPFRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmU+ID46Oml0ZXJhdG9yIGl0ID0g
bV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuZmluZChpbWFnZUlEKTsKICAgICBBU1NFUlQoaXQg
IT0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuZW5kKCkpOwotICAgIGxheWVyLT5zZXRDb250
ZW50c1RvTWVkaWEoaXQtPnNlY29uZC5nZXQoKSk7CisgICAgbGF5ZXItPnNldENvbnRlbnRzVG9N
ZWRpYShpdC0+dmFsdWUuZ2V0KCkpOwogfQogCiB2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpjb21t
aXRUaWxlT3BlcmF0aW9ucygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
R2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5j
cHAKaW5kZXggNzFiZWFmNWE1YzMxZDQ1NWNhOGQyYjFhMjg4MWNhMmE3MjcxNDdiMi4uMGQ0MTYz
NTU0NjVmZjkwZGE2YmNmMDhlYzM1Yjg0YzE3MWE1Mzk5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHku
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9HZW9sb2NhdGlvblBlcm1pc3Npb25S
ZXF1ZXN0TWFuYWdlclByb3h5LmNwcApAQCAtNDIsNyArNDIsNyBAQCB2b2lkIEdlb2xvY2F0aW9u
UGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHk6OmludmFsaWRhdGVSZXF1ZXN0cygpCiAgICAg
UGVuZGluZ1JlcXVlc3RNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wZW5kaW5nUmVxdWVzdHMu
YmVnaW4oKTsKICAgICBQZW5kaW5nUmVxdWVzdE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9w
ZW5kaW5nUmVxdWVzdHMuZW5kKCk7CiAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAg
ICAgaXQtPnNlY29uZC0+aW52YWxpZGF0ZSgpOworICAgICAgICBpdC0+dmFsdWUtPmludmFsaWRh
dGUoKTsKIAogICAgIG1fcGVuZGluZ1JlcXVlc3RzLmNsZWFyKCk7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL1dlYkluc3BlY3RvclNlcnZl
ci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL1dlYkluc3Bl
Y3RvclNlcnZlci5jcHAKaW5kZXggZWNiMTcxYmI0NzJiNmJhZWYzZWZjMjkyN2Y3MThhNjFhZjQ0
Y2UwYy4uM2E5ZTIzZWVkZjk3YjY0ZGI4MTZlM2FiYmRiYzI5ZDZiYjg3ZjJiOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9XZWJJbnNwZWN0b3JT
ZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIv
V2ViSW5zcGVjdG9yU2VydmVyLmNwcApAQCAtNjcsNyArNjcsNyBAQCBXZWJJbnNwZWN0b3JTZXJ2
ZXI6On5XZWJJbnNwZWN0b3JTZXJ2ZXIoKQogICAgIC8vIENsb3NlIGFueSByZW1haW5pbmcgb3Bl
biBjb25uZWN0aW9ucy4KICAgICBIYXNoTWFwPHVuc2lnbmVkLCBXZWJTb2NrZXRTZXJ2ZXJDb25u
ZWN0aW9uKj46Oml0ZXJhdG9yIGVuZCA9IG1fY29ubmVjdGlvbk1hcC5lbmQoKTsKICAgICBmb3Ig
KEhhc2hNYXA8dW5zaWduZWQsIFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24qPjo6aXRlcmF0b3Ig
aXQgPSBtX2Nvbm5lY3Rpb25NYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAg
IFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24qIGNvbm5lY3Rpb24gPSBpdC0+c2Vjb25kOworICAg
ICAgICBXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uKiBjb25uZWN0aW9uID0gaXQtPnZhbHVlOwog
ICAgICAgICBXZWJJbnNwZWN0b3JQcm94eSogY2xpZW50ID0gbV9jbGllbnRNYXAuZ2V0KGNvbm5l
Y3Rpb24tPmlkZW50aWZpZXIoKSk7CiAgICAgICAgIGNsb3NlQ29ubmVjdGlvbihjbGllbnQsIGNv
bm5lY3Rpb24pOwogICAgIH0KQEAgLTc4LDcgKzc4LDcgQEAgaW50IFdlYkluc3BlY3RvclNlcnZl
cjo6cmVnaXN0ZXJQYWdlKFdlYkluc3BlY3RvclByb3h5KiBjbGllbnQpCiAjaWZuZGVmIEFTU0VS
VF9ESVNBQkxFRAogICAgIENsaWVudE1hcDo6aXRlcmF0b3IgZW5kID0gbV9jbGllbnRNYXAuZW5k
KCk7CiAgICAgZm9yIChDbGllbnRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9jbGllbnRNYXAuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBBU1NFUlQoaXQtPnNlY29uZCAhPSBjbGllbnQp
OworICAgICAgICBBU1NFUlQoaXQtPnZhbHVlICE9IGNsaWVudCk7CiAjZW5kaWYKIAogICAgIGlu
dCBwYWdlSWQgPSBtX25leHRBdmFpbGFibGVQYWdlSWQrKzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvV2ViU29ja2V0U2VydmVyQ29ubmVjdGlv
bi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL1dlYlNvY2tl
dFNlcnZlckNvbm5lY3Rpb24uY3BwCmluZGV4IDU3MjA2ZWI3YmI1MmE4ZDhhODQ4ZGY1OTY3YTEw
YzRiNzBlMDc3YTUuLmJlZGE1M2RiN2M0YTY1MzY2NThmYmRiZTg5YWUwOGJjZWNlNTAwZjQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvV2ViU29j
a2V0U2VydmVyQ29ubmVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0lu
c3BlY3RvclNlcnZlci9XZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uLmNwcApAQCAtMTA2LDkgKzEw
Niw5IEBAIHZvaWQgV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbjo6c2VuZEhUVFBSZXNwb25zZUhl
YWRlcihpbnQgc3RhdHVzQ29kZSwgY29uc3QgU3RyCiAgICAgYnVpbGRlci5hcHBlbmQoIlxyXG4i
KTsKICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBoZWFkZXJGaWVsZHMu
ZW5kKCk7CiAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGhlYWRl
ckZpZWxkcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgYnVpbGRlci5hcHBl
bmQoaXQtPmZpcnN0KTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoaXQtPmtleSk7CiAgICAgICAg
IGJ1aWxkZXIuYXBwZW5kKCI6ICIpOwotICAgICAgICBidWlsZGVyLmFwcGVuZChpdC0+c2Vjb25k
ICsgIlxyXG4iKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoaXQtPnZhbHVlICsgIlxyXG4iKTsK
ICAgICB9CiAgICAgYnVpbGRlci5hcHBlbmQoIlxyXG4iKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9xdC9XZWJJbnNwZWN0b3JTZXJ2ZXJR
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL3F0L1dlYklu
c3BlY3RvclNlcnZlclF0LmNwcAppbmRleCA4ZGUwZjkzMmRiMjYwM2FlODk4OGRlYmIzMDI3MTI2
MGMwYzZhYzU2Li5hOTNlYTkxNjJiYzljYWY0MTAxZmUzM2QxMWU2MTBiMGMyZDVlZjg3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL3F0L1dlYklu
c3BlY3RvclNlcnZlclF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvSW5zcGVj
dG9yU2VydmVyL3F0L1dlYkluc3BlY3RvclNlcnZlclF0LmNwcApAQCAtODMsMTYgKzgzLDE2IEBA
IHZvaWQgV2ViSW5zcGVjdG9yU2VydmVyOjpidWlsZFBhZ2VMaXN0KFZlY3RvcjxjaGFyPiYgZGF0
YSwgU3RyaW5nJiBjb250ZW50VHlwZSkKICAgICBidWlsZGVyLmFwcGVuZCgiWyAiKTsKICAgICBD
bGllbnRNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fY2xpZW50TWFwLmVuZCgpOwogICAgIGZvciAoQ2xp
ZW50TWFwOjppdGVyYXRvciBpdCA9IG1fY2xpZW50TWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgewotICAgICAgICBXZWJQYWdlUHJveHkqIHdlYlBhZ2UgPSBpdC0+c2Vjb25kLT5wYWdlKCk7
CisgICAgICAgIFdlYlBhZ2VQcm94eSogd2ViUGFnZSA9IGl0LT52YWx1ZS0+cGFnZSgpOwogICAg
ICAgICBpZiAoaXQgIT0gbV9jbGllbnRNYXAuYmVnaW4oKSkKICAgICAgICAgICAgIGJ1aWxkZXIu
YXBwZW5kKCIsICIpOwotICAgICAgICBidWlsZGVyLmFwcGVuZCgieyBcImlkXCI6ICIgKyBTdHJp
bmc6Om51bWJlcihpdC0+Zmlyc3QpKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoInsgXCJpZFwi
OiAiICsgU3RyaW5nOjpudW1iZXIoaXQtPmtleSkpOwogICAgICAgICBidWlsZGVyLmFwcGVuZCgi
LCBcInRpdGxlXCI6IFwiIik7CiAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHdlYlBhZ2UtPnBhZ2VU
aXRsZSgpKTsKICAgICAgICAgYnVpbGRlci5hcHBlbmQoIlwiLCBcInVybFwiOiBcIiIpOwogICAg
ICAgICBidWlsZGVyLmFwcGVuZCh3ZWJQYWdlLT5hY3RpdmVVUkwoKSk7CiAgICAgICAgIGJ1aWxk
ZXIuYXBwZW5kKCJcIiwgXCJpbnNwZWN0b3JVcmxcIjogXCIiKTsKLSAgICAgICAgYnVpbGRlci5h
cHBlbmQocmVtb3RlSW5zcGVjdG9yUGFnZVBhdGgoKSArIFN0cmluZzo6bnVtYmVyKGl0LT5maXJz
dCkpOworICAgICAgICBidWlsZGVyLmFwcGVuZChyZW1vdGVJbnNwZWN0b3JQYWdlUGF0aCgpICsg
U3RyaW5nOjpudW1iZXIoaXQtPmtleSkpOwogICAgICAgICBidWlsZGVyLmFwcGVuZCgiXCIgfSIp
OwogICAgIH0KICAgICBidWlsZGVyLmFwcGVuZCgiIF0iKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9Ob3RpZmljYXRpb25zL05vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1
ZXN0TWFuYWdlclByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Ob3RpZmljYXRp
b25zL05vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcAppbmRleCAw
NzkyMjk4NWU0NTY1ZjNjNzNjYWRjM2EwY2Y0NTUyMTdjNjE5OTY5Li40YTBjNDc1MjkzN2I4NzJk
NWRlMjY5YzkxNjk0ZTIyMThkMzIwZTFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvTm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQ
cm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL05vdGlmaWNhdGlvbnMvTm90
aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuY3BwCkBAIC00Myw3ICs0Myw3
IEBAIHZvaWQgTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHk6OmludmFs
aWRhdGVSZXF1ZXN0cygpCiAgICAgUGVuZGluZ1JlcXVlc3RNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV9wZW5kaW5nUmVxdWVzdHMuYmVnaW4oKTsKICAgICBQZW5kaW5nUmVxdWVzdE1hcDo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gbV9wZW5kaW5nUmVxdWVzdHMuZW5kKCk7CiAgICAgZm9yICg7IGl0
ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+aW52YWxpZGF0ZSgpOworICAgICAg
ICBpdC0+dmFsdWUtPmludmFsaWRhdGUoKTsKICAgICAKICAgICBtX3BlbmRpbmdSZXF1ZXN0cy5j
bGVhcigpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMv
UGx1Z2luUHJvY2Vzc1Byb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5z
L1BsdWdpblByb2Nlc3NQcm94eS5jcHAKaW5kZXggMTJhYmY2ZGMyZTRmMmEwY2ExNjJiNGYxOWIz
MmVhMDU2ZmFlODIyZi4uNDlkZGFjOGU1MTFmNjhiOTliZWI4NDA5NmIzNDQ3Y2IzNzVlOWY1ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vz
c1Byb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Q
cm9jZXNzUHJveHkuY3BwCkBAIC0xNDksMTAgKzE0OSwxMCBAQCB2b2lkIFBsdWdpblByb2Nlc3NQ
cm94eTo6cGx1Z2luUHJvY2Vzc0NyYXNoZWRPckZhaWxlZFRvTGF1bmNoKCkKICAgICB9CiAKICAg
ICB3aGlsZSAoIW1fcGVuZGluZ0dldFNpdGVzUmVwbGllcy5pc0VtcHR5KCkpCi0gICAgICAgIGRp
ZEdldFNpdGVzV2l0aERhdGEoVmVjdG9yPFN0cmluZz4oKSwgbV9wZW5kaW5nR2V0U2l0ZXNSZXBs
aWVzLmJlZ2luKCktPmZpcnN0KTsKKyAgICAgICAgZGlkR2V0U2l0ZXNXaXRoRGF0YShWZWN0b3I8
U3RyaW5nPigpLCBtX3BlbmRpbmdHZXRTaXRlc1JlcGxpZXMuYmVnaW4oKS0+a2V5KTsKIAogICAg
IHdoaWxlICghbV9wZW5kaW5nQ2xlYXJTaXRlRGF0YVJlcGxpZXMuaXNFbXB0eSgpKQotICAgICAg
ICBkaWRDbGVhclNpdGVEYXRhKG1fcGVuZGluZ0NsZWFyU2l0ZURhdGFSZXBsaWVzLmJlZ2luKCkt
PmZpcnN0KTsKKyAgICAgICAgZGlkQ2xlYXJTaXRlRGF0YShtX3BlbmRpbmdDbGVhclNpdGVEYXRh
UmVwbGllcy5iZWdpbigpLT5rZXkpOwogCiAgICAgLy8gVGVsbCB0aGUgcGx1Zy1pbiBwcm9jZXNz
IG1hbmFnZXIgdG8gZm9yZ2V0IGFib3V0IHRoaXMgcGx1Zy1pbiBwcm9jZXNzIHByb3h5LiBUaGlz
IG1heSBjYXVzZSB1cyB0byBiZSBkZWxldGVkLgogICAgIG1fcGx1Z2luUHJvY2Vzc01hbmFnZXIt
PnJlbW92ZVBsdWdpblByb2Nlc3NQcm94eSh0aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJDb250ZXh0LmNwcAppbmRleCAxYjUzYjA0ODYyZjRkODQ1MjcyYTkzZjM4OWJiYzJhZTAzMGVh
NmRhLi45NDUxMTkxMzNmY2UyYThhZTk5MzI4OGU5NjE4NjkwZmI1ODk2MWRhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHQuY3BwCkBAIC05MDYsNyArOTA2LDcgQEAgc3RhdGlj
IFBhc3NSZWZQdHI8TXV0YWJsZURpY3Rpb25hcnk+IGNyZWF0ZURpY3Rpb25hcnlGcm9tSGFzaE1h
cChjb25zdCBIYXNoTWFwPFMKICAgICBSZWZQdHI8TXV0YWJsZURpY3Rpb25hcnk+IHJlc3VsdCA9
IE11dGFibGVEaWN0aW9uYXJ5OjpjcmVhdGUoKTsKICAgICBIYXNoTWFwPFN0cmluZywgdWludDY0
X3Q+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPFN0
cmluZywgdWludDY0X3Q+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpCi0gICAgICAgIHJlc3VsdC0+c2V0KGl0LT5maXJzdCwgUmVmUHRyPFdlYlVJbnQ2
ND4oV2ViVUludDY0OjpjcmVhdGUoaXQtPnNlY29uZCkpLmdldCgpKTsKKyAgICAgICAgcmVzdWx0
LT5zZXQoaXQtPmtleSwgUmVmUHRyPFdlYlVJbnQ2ND4oV2ViVUludDY0OjpjcmVhdGUoaXQtPnZh
bHVlKSkuZ2V0KCkpOwogICAgIAogICAgIHJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViSWNvbkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJJY29uRGF0YWJhc2UuY3BwCmluZGV4IGMwYzcwNjE3YmUyN2FkNGQy
MGM0MjBmMWRlNDM2OTE4M2Q1MjkzMjMuLmQyYTEwNmZlMDZlY2MyOTFlNGZkODVlNWU5YzEwZDMy
YmU5MjAzMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJY29uRGF0
YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJY29uRGF0YWJhc2Uu
Y3BwCkBAIC0yNjMsMTQgKzI2MywxNCBAQCB2b2lkIFdlYkljb25EYXRhYmFzZTo6ZGlkRmluaXNo
VVJMSW1wb3J0KCkKICAgICBIYXNoTWFwPHVpbnQ2NF90LCBTdHJpbmc+OjppdGVyYXRvciBlbmQg
PSBtX3BlbmRpbmdMb2FkRGVjaXNpb25VUkxNYXAuZW5kKCk7CiAgICAgCiAgICAgZm9yICg7IGkg
IT0gZW5kOyArK2kpIHsKLSAgICAgICAgTE9HKEljb25EYXRhYmFzZSwgIldLMiBVSVByb2Nlc3Mg
cGVyZm9ybWluZyBkZWxheWVkIGNhbGxiYWNrIG9uIGNhbGxiYWNrIElEICVpIGZvciBwYWdlIHVy
bCAlcyIsIChpbnQpaS0+Zmlyc3QsIGktPnNlY29uZC5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAg
IEljb25Mb2FkRGVjaXNpb24gZGVjaXNpb24gPSBtX2ljb25EYXRhYmFzZUltcGwtPnN5bmNocm9u
b3VzTG9hZERlY2lzaW9uRm9ySWNvblVSTChpLT5zZWNvbmQsIDApOworICAgICAgICBMT0coSWNv
bkRhdGFiYXNlLCAiV0syIFVJUHJvY2VzcyBwZXJmb3JtaW5nIGRlbGF5ZWQgY2FsbGJhY2sgb24g
Y2FsbGJhY2sgSUQgJWkgZm9yIHBhZ2UgdXJsICVzIiwgKGludClpLT5rZXksIGktPnZhbHVlLmFz
Y2lpKCkuZGF0YSgpKTsKKyAgICAgICAgSWNvbkxvYWREZWNpc2lvbiBkZWNpc2lvbiA9IG1faWNv
bkRhdGFiYXNlSW1wbC0+c3luY2hyb25vdXNMb2FkRGVjaXNpb25Gb3JJY29uVVJMKGktPnZhbHVl
LCAwKTsKIAogICAgICAgICAvLyBEZWNpc2lvbnMgc2hvdWxkIG5ldmVyIGJlIHVua25vd24gYWZ0
ZXIgdGhlIGluaXRhbCBpbXBvcnQgaXMgY29tcGxldGUKICAgICAgICAgQVNTRVJUKGRlY2lzaW9u
ICE9IEljb25Mb2FkVW5rbm93bik7CiAKICAgICAgICAgLy8gRklYTUUgKE11bHRpLVdlYlByb2Nl
c3MpOiBXZSBuZWVkIHRvIGtub3cgd2hpY2ggY29ubmVjdGlvbiB0byBzZW5kIHRoaXMgbWVzc2Fn
ZSB0by4KLSAgICAgICAgbV93ZWJDb250ZXh0LT5zZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6
OldlYkljb25EYXRhYmFzZVByb3h5OjpSZWNlaXZlZEljb25Mb2FkRGVjaXNpb24oc3RhdGljX2Nh
c3Q8aW50PihkZWNpc2lvbiksIGktPmZpcnN0KSk7CisgICAgICAgIG1fd2ViQ29udGV4dC0+c2Vu
ZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJJY29uRGF0YWJhc2VQcm94eTo6UmVjZWl2ZWRJ
Y29uTG9hZERlY2lzaW9uKHN0YXRpY19jYXN0PGludD4oZGVjaXNpb24pLCBpLT5rZXkpKTsKICAg
ICB9CiAgICAgCiAgICAgbV9wZW5kaW5nTG9hZERlY2lzaW9uVVJMTWFwLmNsZWFyKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViSW50ZW50RGF0YS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViSW50ZW50RGF0YS5jcHAKaW5kZXggNjMyYWEzYjc1NTRk
YjI0M2JkMzc1ZGQ3OTIxMzk1MzFlNjlhZTFmZC4uYzZkOGM2NGJhODU5NjI1MWQ1ZDM2Y2ZlOTE5
YTI5NjM4MjcxMTk0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYklu
dGVudERhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJbnRlbnREYXRh
LmNwcApAQCAtNzgsNyArNzgsNyBAQCBQYXNzUmVmUHRyPEltbXV0YWJsZURpY3Rpb25hcnk+IFdl
YkludGVudERhdGE6OmV4dHJhcygpIGNvbnN0CiAgICAgSW1tdXRhYmxlRGljdGlvbmFyeTo6TWFw
VHlwZSB3a0V4dHJhczsKICAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gbV9zdG9yZS5leHRyYXMuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPFN0cmluZywg
U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3N0b3JlLmV4dHJhcy5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCi0gICAgICAgIHdrRXh0cmFzLnNldChpdC0+Zmlyc3QsIFdlYlN0cmluZzo6
Y3JlYXRlKGl0LT5zZWNvbmQpKTsKKyAgICAgICAgd2tFeHRyYXMuc2V0KGl0LT5rZXksIFdlYlN0
cmluZzo6Y3JlYXRlKGl0LT52YWx1ZSkpOwogCiAgICAgcmV0dXJuIEltbXV0YWJsZURpY3Rpb25h
cnk6OmFkb3B0KHdrRXh0cmFzKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBy
b2Nlc3NQcm94eS5jcHAKaW5kZXggMjJhMmI3ZjJjN2EyNDFjZWRlOTZiOTc0YmUzNGFiNDQ2MGI3
MTdkZC4uYTIwZTQ2N2ZlNzY3ZDY0NDQ4OTJlYzYxNTIyM2M4ZjYyOGZiYjJhOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAKQEAgLTI2Niw5ICsyNjYs
OSBAQCBib29sIFdlYlByb2Nlc3NQcm94eTo6Y2hlY2tVUkxSZWNlaXZlZEZyb21XZWJQcm9jZXNz
KGNvbnN0IEtVUkwmIHVybCkKICAgICAvLyBJdGVtcyBpbiBiYWNrL2ZvcndhcmQgbGlzdCBoYXZl
IGJlZW4gYWxyZWFkeSBjaGVja2VkLgogICAgIC8vIE9uZSBjYXNlIHdoZXJlIHdlIGRvbid0IGhh
dmUgc2FuZGJveCBleHRlbnNpb25zIGZvciBmaWxlIFVSTHMgaW4gYi9mIGxpc3QgaXMgaWYgdGhl
IGxpc3QgaGFzIGJlZW4gcmVpbnN0YXRlZCBhZnRlciBhIGNyYXNoIG9yIGEgYnJvd3NlciByZXN0
YXJ0LgogICAgIGZvciAoV2ViQmFja0ZvcndhcmRMaXN0SXRlbU1hcDo6aXRlcmF0b3IgaXRlciA9
IG1fYmFja0ZvcndhcmRMaXN0SXRlbU1hcC5iZWdpbigpLCBlbmQgPSBtX2JhY2tGb3J3YXJkTGlz
dEl0ZW1NYXAuZW5kKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKLSAgICAgICAgaWYgKEtVUkwo
S1VSTCgpLCBpdGVyLT5zZWNvbmQtPnVybCgpKS5maWxlU3lzdGVtUGF0aCgpID09IHBhdGgpCisg
ICAgICAgIGlmIChLVVJMKEtVUkwoKSwgaXRlci0+dmFsdWUtPnVybCgpKS5maWxlU3lzdGVtUGF0
aCgpID09IHBhdGgpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKEtVUkwo
S1VSTCgpLCBpdGVyLT5zZWNvbmQtPm9yaWdpbmFsVVJMKCkpLmZpbGVTeXN0ZW1QYXRoKCkgPT0g
cGF0aCkKKyAgICAgICAgaWYgKEtVUkwoS1VSTCgpLCBpdGVyLT52YWx1ZS0+b3JpZ2luYWxVUkwo
KSkuZmlsZVN5c3RlbVBhdGgoKSA9PSBwYXRoKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogCkBAIC0yOTEsMTUgKzI5MSwxNSBAQCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6YWRkQmFj
a0ZvcndhcmRJdGVtKHVpbnQ2NF90IGl0ZW1JRCwgY29uc3QgU3RyaW5nJiBvcmlnaW5hbAogCiAg
ICAgV2ViQmFja0ZvcndhcmRMaXN0SXRlbU1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fYmFja0Zv
cndhcmRMaXN0SXRlbU1hcC5hZGQoaXRlbUlELCAwKTsKICAgICBpZiAocmVzdWx0LmlzTmV3RW50
cnkpIHsKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBXZWJCYWNrRm9yd2FyZExp
c3RJdGVtOjpjcmVhdGUob3JpZ2luYWxVUkwsIHVybCwgdGl0bGUsIGJhY2tGb3J3YXJkRGF0YS5k
YXRhKCksIGJhY2tGb3J3YXJkRGF0YS5zaXplKCksIGl0ZW1JRCk7CisgICAgICAgIHJlc3VsdC5p
dGVyYXRvci0+dmFsdWUgPSBXZWJCYWNrRm9yd2FyZExpc3RJdGVtOjpjcmVhdGUob3JpZ2luYWxV
UkwsIHVybCwgdGl0bGUsIGJhY2tGb3J3YXJkRGF0YS5kYXRhKCksIGJhY2tGb3J3YXJkRGF0YS5z
aXplKCksIGl0ZW1JRCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICAvLyBVcGRhdGUg
ZXhpc3RpbmcgaXRlbS4KLSAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZC0+c2V0T3JpZ2luYWxV
Ukwob3JpZ2luYWxVUkwpOwotICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLT5zZXRVUkwodXJs
KTsKLSAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZC0+c2V0VGl0bGUodGl0bGUpOwotICAgIHJl
c3VsdC5pdGVyYXRvci0+c2Vjb25kLT5zZXRCYWNrRm9yd2FyZERhdGEoYmFja0ZvcndhcmREYXRh
LmRhdGEoKSwgYmFja0ZvcndhcmREYXRhLnNpemUoKSk7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZS0+c2V0T3JpZ2luYWxVUkwob3JpZ2luYWxVUkwpOworICAgIHJlc3VsdC5pdGVyYXRvci0+
dmFsdWUtPnNldFVSTCh1cmwpOworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPnNldFRpdGxl
KHRpdGxlKTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5zZXRCYWNrRm9yd2FyZERhdGEo
YmFja0ZvcndhcmREYXRhLmRhdGEoKSwgYmFja0ZvcndhcmREYXRhLnNpemUoKSk7CiB9CiAKIHZv
aWQgV2ViUHJvY2Vzc1Byb3h5OjpzZW5kRGlkR2V0UGx1Z2lucyh1aW50NjRfdCByZXF1ZXN0SUQs
IFBhc3NPd25QdHI8VmVjdG9yPFBsdWdpbkluZm8+ID4gcGx1Z2luSW5mb3MpCkBAIC01NzgsNyAr
NTc4LDcgQEAgc2l6ZV90IFdlYlByb2Nlc3NQcm94eTo6ZnJhbWVDb3VudEluUGFnZShXZWJQYWdl
UHJveHkqIHBhZ2UpIGNvbnN0CiB7CiAgICAgc2l6ZV90IHJlc3VsdCA9IDA7CiAgICAgZm9yIChI
YXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8V2ViRnJhbWVQcm94eT4gPjo6Y29uc3RfaXRlcmF0b3Ig
aXRlciA9IG1fZnJhbWVNYXAuYmVnaW4oKTsgaXRlciAhPSBtX2ZyYW1lTWFwLmVuZCgpOyArK2l0
ZXIpIHsKLSAgICAgICAgaWYgKGl0ZXItPnNlY29uZC0+cGFnZSgpID09IHBhZ2UpCisgICAgICAg
IGlmIChpdGVyLT52YWx1ZS0+cGFnZSgpID09IHBhZ2UpCiAgICAgICAgICAgICArK3Jlc3VsdDsK
ICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvR2VvbG9jYXRpb24vR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIu
Y3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9HZW9sb2NhdGlvbi9HZW9sb2NhdGlvblBl
cm1pc3Npb25SZXF1ZXN0TWFuYWdlci5jcHAKaW5kZXggZDZiZGI4ZTE1MzE0NTBiMTJhYmM4MmQ4
NmIyZmMwMTNmMTM1NDNiNy4uZmNhNzFhMWQwOTVmZWVmYWJhMDVhNmE3MjVmZGI0MzYzNTgxNGI2
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9HZW9sb2NhdGlvbi9HZW9s
b2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9HZW9sb2NhdGlvbi9HZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdl
ci5jcHAKQEAgLTc0LDcgKzc0LDcgQEAgdm9pZCBHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0
TWFuYWdlcjo6Y2FuY2VsUmVxdWVzdEZvckdlb2xvY2F0aW9uKEdlb2xvY2F0aW8KICAgICAgICAg
cmV0dXJuOwogCiAgICAgbV9nZW9sb2NhdGlvblRvSURNYXAucmVtb3ZlKGl0KTsKLSAgICBtX2lk
VG9HZW9sb2NhdGlvbk1hcC5yZW1vdmUoaXQtPnNlY29uZCk7CisgICAgbV9pZFRvR2VvbG9jYXRp
b25NYXAucmVtb3ZlKGl0LT52YWx1ZSk7CiB9CiAKIHZvaWQgR2VvbG9jYXRpb25QZXJtaXNzaW9u
UmVxdWVzdE1hbmFnZXI6OmRpZFJlY2VpdmVHZW9sb2NhdGlvblBlcm1pc3Npb25EZWNpc2lvbih1
aW50NjRfdCBnZW9sb2NhdGlvbklELCBib29sIGFsbG93ZWQpCkBAIC04Myw3ICs4Myw3IEBAIHZv
aWQgR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXI6OmRpZFJlY2VpdmVHZW9sb2Nh
dGlvblBlcm1pc3Npb25EZWNpc2lvCiAgICAgaWYgKGl0ID09IG1faWRUb0dlb2xvY2F0aW9uTWFw
LmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBHZW9sb2NhdGlvbiogZ2VvbG9jYXRpb24g
PSBpdC0+c2Vjb25kOworICAgIEdlb2xvY2F0aW9uKiBnZW9sb2NhdGlvbiA9IGl0LT52YWx1ZTsK
ICAgICBnZW9sb2NhdGlvbi0+c2V0SXNBbGxvd2VkKGFsbG93ZWQpOwogCiAgICAgbV9pZFRvR2Vv
bG9jYXRpb25NYXAucmVtb3ZlKGl0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxlTm9kZUhhbmRsZS5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRs
ZU5vZGVIYW5kbGUuY3BwCmluZGV4IDBjNDI5NWU2MTJjZGQ3NmYwM2E1MzEzZDQ1ZTZjZWMxZmIx
ZTg1OTYuLjc3ZTAzMDkzZDVmZDBkOTY0MjRkMzE1NGY3N2M5NGQ0MTk0YjE2ZWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVk
QnVuZGxlTm9kZUhhbmRsZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlLmNwcApAQCAtNjksMTAgKzY5
LDEwIEBAIFBhc3NSZWZQdHI8SW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlPiBJbmplY3RlZEJ1bmRs
ZU5vZGVIYW5kbGU6OmdldE9yQ3JlYXRlKE5vZGUqCiAKICAgICBET01IYW5kbGVDYWNoZTo6QWRk
UmVzdWx0IHJlc3VsdCA9IGRvbUhhbmRsZUNhY2hlKCkuYWRkKG5vZGUsIDApOwogICAgIGlmICgh
cmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJldHVybiBQYXNzUmVmUHRyPEluamVjdGVkQnVu
ZGxlTm9kZUhhbmRsZT4ocmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOworICAgICAgICByZXR1cm4g
UGFzc1JlZlB0cjxJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU+KHJlc3VsdC5pdGVyYXRvci0+dmFs
dWUpOwogCiAgICAgUmVmUHRyPEluamVjdGVkQnVuZGxlTm9kZUhhbmRsZT4gbm9kZUhhbmRsZSA9
IEluamVjdGVkQnVuZGxlTm9kZUhhbmRsZTo6Y3JlYXRlKG5vZGUpOwotICAgIHJlc3VsdC5pdGVy
YXRvci0+c2Vjb25kID0gbm9kZUhhbmRsZS5nZXQoKTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZh
bHVlID0gbm9kZUhhbmRsZS5nZXQoKTsKICAgICByZXR1cm4gbm9kZUhhbmRsZS5yZWxlYXNlKCk7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvRE9NL0luamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGUuY3BwIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5jcHAK
aW5kZXggMWI3NGYwMTI0MDA4ZGIzYzA3ODI4ZWE2ZjZkMmMwNWFjMDU5YzMwNi4uZDYwMDBhYjkx
MzMyOWNkNTdkYWIzZTNmZDY0MDE0Yzc2ZTk1MmRjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRs
ZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00v
SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5jcHAKQEAgLTQ4LDEwICs0OCwxMCBAQCBQYXNzUmVm
UHRyPEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU+IEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6
OmdldE9yQ3JlYXRlKFJhbgogCiAgICAgRE9NSGFuZGxlQ2FjaGU6OkFkZFJlc3VsdCByZXN1bHQg
PSBkb21IYW5kbGVDYWNoZSgpLmFkZChyYW5nZSwgMCk7CiAgICAgaWYgKCFyZXN1bHQuaXNOZXdF
bnRyeSkKLSAgICAgICAgcmV0dXJuIFBhc3NSZWZQdHI8SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRs
ZT4ocmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOworICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxJ
bmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlPihyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKIAogICAg
IFJlZlB0cjxJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlPiByYW5nZUhhbmRsZSA9IEluamVjdGVk
QnVuZGxlUmFuZ2VIYW5kbGU6OmNyZWF0ZShyYW5nZSk7Ci0gICAgcmVzdWx0Lml0ZXJhdG9yLT5z
ZWNvbmQgPSByYW5nZUhhbmRsZS5nZXQoKTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0g
cmFuZ2VIYW5kbGUuZ2V0KCk7CiAgICAgcmV0dXJuIHJhbmdlSGFuZGxlLnJlbGVhc2UoKTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9J
bmplY3RlZEJ1bmRsZUludGVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0luamVjdGVkQnVuZGxlSW50ZW50LmNwcAppbmRleCA5MmRlNjFjNmMyYmQ2ZTll
NDJjNDc1ZGFhMDdjMDE3NzliMTc1N2NlLi5kOGFjM2EyNWRmMzViNGEwNWYwMjJjMTBhMzM4NDdm
NjZmZjk2ZThjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0luamVjdGVkQnVuZGxlSW50ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlSW50ZW50LmNwcApAQCAtNzksNyAr
NzksNyBAQCBQYXNzUmVmUHRyPEltbXV0YWJsZURpY3Rpb25hcnk+IEluamVjdGVkQnVuZGxlSW50
ZW50OjpleHRyYXMoKSBjb25zdAogICAgIEltbXV0YWJsZURpY3Rpb25hcnk6Ok1hcFR5cGUgd2tF
eHRyYXM7CiAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IGV4dHJhcy5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9p
dGVyYXRvciBpdCA9IGV4dHJhcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHdr
RXh0cmFzLnNldChpdC0+Zmlyc3QsIFdlYlN0cmluZzo6Y3JlYXRlKGl0LT5zZWNvbmQpKTsKKyAg
ICAgICAgd2tFeHRyYXMuc2V0KGl0LT5rZXksIFdlYlN0cmluZzo6Y3JlYXRlKGl0LT52YWx1ZSkp
OwogCiAgICAgcmV0dXJuIEltbXV0YWJsZURpY3Rpb25hcnk6OmFkb3B0KHdrRXh0cmFzKTsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTm90aWZpY2F0aW9ucy9XZWJO
b3RpZmljYXRpb25NYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTm90aWZp
Y2F0aW9ucy9XZWJOb3RpZmljYXRpb25NYW5hZ2VyLmNwcAppbmRleCAyZDY2N2VmNWUxNzJiMWQ4
Y2NkODYzZTQxNzFjNmY0YjQzNGQxODk3Li4yNTFjNDEyNDU0YzU1MzdlYWQyZWI0ODU1ZTM2YzFl
Mzg3YmE0YzE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05vdGlmaWNh
dGlvbnMvV2ViTm90aWZpY2F0aW9uTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9Ob3RpZmljYXRpb25zL1dlYk5vdGlmaWNhdGlvbk1hbmFnZXIuY3BwCkBAIC05OSw3
ICs5OSw3IEBAIE5vdGlmaWNhdGlvbkNsaWVudDo6UGVybWlzc2lvbiBXZWJOb3RpZmljYXRpb25N
YW5hZ2VyOjpwb2xpY3lGb3JPcmlnaW4oV2ViQ29yZTo6CiAgICAgQVNTRVJUKCFvcmlnaW4tPmlz
VW5pcXVlKCkpOwogICAgIEhhc2hNYXA8U3RyaW5nLCBib29sPjo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtX3Blcm1pc3Npb25zTWFwLmZpbmQob3JpZ2luLT50b1Jhd1N0cmluZygpKTsKICAgICBpZiAo
aXQgIT0gbV9wZXJtaXNzaW9uc01hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQg
PyBOb3RpZmljYXRpb25DbGllbnQ6OlBlcm1pc3Npb25BbGxvd2VkIDogTm90aWZpY2F0aW9uQ2xp
ZW50OjpQZXJtaXNzaW9uRGVuaWVkOworICAgICAgICByZXR1cm4gaXQtPnZhbHVlID8gTm90aWZp
Y2F0aW9uQ2xpZW50OjpQZXJtaXNzaW9uQWxsb3dlZCA6IE5vdGlmaWNhdGlvbkNsaWVudDo6UGVy
bWlzc2lvbkRlbmllZDsKICNlbmRpZgogICAgIAogICAgIHJldHVybiBOb3RpZmljYXRpb25DbGll
bnQ6OlBlcm1pc3Npb25Ob3RBbGxvd2VkOwpAQCAtMTE2LDcgKzExNiw3IEBAIGJvb2wgV2ViTm90
aWZpY2F0aW9uTWFuYWdlcjo6c2hvdyhOb3RpZmljYXRpb24qIG5vdGlmaWNhdGlvbiwgV2ViUGFn
ZSogcGFnZSkKICAgICBtX25vdGlmaWNhdGlvbklETWFwLnNldChub3RpZmljYXRpb25JRCwgbm90
aWZpY2F0aW9uKTsKICAgICAKICAgICBOb3RpZmljYXRpb25Db250ZXh0TWFwOjppdGVyYXRvciBp
dCA9IG1fbm90aWZpY2F0aW9uQ29udGV4dE1hcC5hZGQobm90aWZpY2F0aW9uLT5zY3JpcHRFeGVj
dXRpb25Db250ZXh0KCksIFZlY3Rvcjx1aW50NjRfdD4oKSkuaXRlcmF0b3I7Ci0gICAgaXQtPnNl
Y29uZC5hcHBlbmQobm90aWZpY2F0aW9uSUQpOworICAgIGl0LT52YWx1ZS5hcHBlbmQobm90aWZp
Y2F0aW9uSUQpOwogCiAjaWYgRU5BQkxFKE5PVElGSUNBVElPTlMpCiAgICAgbV9wcm9jZXNzLT5j
b25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2hvd05vdGlmaWNhdGlv
bihub3RpZmljYXRpb24tPnRpdGxlKCksIG5vdGlmaWNhdGlvbi0+Ym9keSgpLCBub3RpZmljYXRp
b24tPmljb25VUkwoKS5zdHJpbmcoKSwgbm90aWZpY2F0aW9uLT50YWcoKSwgbm90aWZpY2F0aW9u
LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCks
IG5vdGlmaWNhdGlvbklEKSwgcGFnZS0+cGFnZUlEKCkpOwpAQCAtMTUwLDcgKzE1MCw3IEBAIHZv
aWQgV2ViTm90aWZpY2F0aW9uTWFuYWdlcjo6Y2xlYXJOb3RpZmljYXRpb25zKFdlYkNvcmU6OlNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqCiAgICAgaWYgKGl0ID09IG1fbm90aWZpY2F0aW9uQ29udGV4
dE1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIFZlY3Rvcjx1aW50NjRfdD4m
IG5vdGlmaWNhdGlvbklEcyA9IGl0LT5zZWNvbmQ7CisgICAgVmVjdG9yPHVpbnQ2NF90PiYgbm90
aWZpY2F0aW9uSURzID0gaXQtPnZhbHVlOwogICAgIG1fcHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJOb3RpZmljYXRpb25NYW5hZ2VyUHJveHk6OkNsZWFyTm90aWZpY2F0
aW9ucyhub3RpZmljYXRpb25JRHMpLCBwYWdlLT5wYWdlSUQoKSk7CiAgICAgc2l6ZV90IGNvdW50
ID0gbm90aWZpY2F0aW9uSURzLnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNv
dW50OyArK2kpIHsKQEAgLTIzMywxMCArMjMzLDEwIEBAIHZvaWQgV2ViTm90aWZpY2F0aW9uTWFu
YWdlcjo6cmVtb3ZlTm90aWZpY2F0aW9uRnJvbUNvbnRleHRNYXAodWludDY0X3Qgbm90aWZpY2F0
CiAgICAgLy8gVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiBmb3IgbWFuYWdpbmcgdGhlIGhhc2gg
bWFwcy4KICAgICBOb3RpZmljYXRpb25Db250ZXh0TWFwOjppdGVyYXRvciBpdCA9IG1fbm90aWZp
Y2F0aW9uQ29udGV4dE1hcC5maW5kKG5vdGlmaWNhdGlvbi0+c2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpKTsKICAgICBBU1NFUlQoaXQgIT0gbV9ub3RpZmljYXRpb25Db250ZXh0TWFwLmVuZCgpKTsK
LSAgICBzaXplX3QgaW5kZXggPSBpdC0+c2Vjb25kLmZpbmQobm90aWZpY2F0aW9uSUQpOworICAg
IHNpemVfdCBpbmRleCA9IGl0LT52YWx1ZS5maW5kKG5vdGlmaWNhdGlvbklEKTsKICAgICBBU1NF
UlQoaW5kZXggIT0gbm90Rm91bmQpOwotICAgIGl0LT5zZWNvbmQucmVtb3ZlKGluZGV4KTsKLSAg
ICBpZiAoaXQtPnNlY29uZC5pc0VtcHR5KCkpCisgICAgaXQtPnZhbHVlLnJlbW92ZShpbmRleCk7
CisgICAgaWYgKGl0LT52YWx1ZS5pc0VtcHR5KCkpCiAgICAgICAgIG1fbm90aWZpY2F0aW9uQ29u
dGV4dE1hcC5yZW1vdmUoaXQpOwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0TWFwLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RN
YXAuY3BwCmluZGV4IDM1ODUzM2ZlYmZjODYyN2I5YzNhY2FmNjYwNjgxNGViOGRkMjcxYWEuLjBj
ZTcwM2MwYWQ4ODAzY2EyOGRkNTQzMThlNzE4OTQzNjM2ZDY5NjIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1
bnRpbWVPYmplY3RNYXAuY3BwCkBAIC0yMTIsNyArMjEyLDcgQEAgdm9pZCBOUFJ1bnRpbWVPYmpl
Y3RNYXA6OmludmFsaWRhdGUoKQogICAgIFZlY3RvcjxOUE9iamVjdCo+IG9iamVjdHM7CiAKICAg
ICBmb3IgKEhhc2hNYXA8TlBPYmplY3QqLCBKU0M6OldlYWs8SlNOUE9iamVjdD4gPjo6aXRlcmF0
b3IgcHRyID0gbV9qc05QT2JqZWN0cy5iZWdpbigpLCBlbmQgPSBtX2pzTlBPYmplY3RzLmVuZCgp
OyBwdHIgIT0gZW5kOyArK3B0cikgewotICAgICAgICBKU05QT2JqZWN0KiBqc05QT2JqZWN0ID0g
cHRyLT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIEpTTlBPYmplY3QqIGpzTlBPYmplY3QgPSBwdHIt
PnZhbHVlLmdldCgpOwogICAgICAgICBpZiAoIWpzTlBPYmplY3QpIC8vIFNraXAgem9tYmllcy4K
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBvYmplY3RzLmFwcGVuZChqc05QT2JqZWN0
LT5sZWFrTlBPYmplY3QoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW4uY3BwIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luLmNwcAppbmRleCBiMjA3NDMy
MTNiYzVlYTQxM2MyZjA5NjNkMzljNmEyMjMzNGZkMTRjLi5mMWU3OWU0NWQ4MTZkMjcwY2I0NWMx
MDMwODM1ZjQ2ZjkzMjNhMDU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbi5jcHAKQEAgLTE5OSw4
ICsxOTksOCBAQCBOUEVycm9yIE5ldHNjYXBlUGx1Z2luOjpkZXN0cm95U3RyZWFtKE5QU3RyZWFt
KiBzdHJlYW0sIE5QUmVhc29uIHJlYXNvbikKICAgICBOZXRzY2FwZVBsdWdpblN0cmVhbSogcGx1
Z2luU3RyZWFtID0gMDsKIAogICAgIGZvciAoU3RyZWFtc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtX3N0cmVhbXMuYmVnaW4oKSwgZW5kID0gbV9zdHJlYW1zLmVuZCgpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQtPm5wU3RyZWFtKCkgPT0gc3RyZWFtKSB7Ci0g
ICAgICAgICAgICBwbHVnaW5TdHJlYW0gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICBpZiAo
aXQtPnZhbHVlLT5ucFN0cmVhbSgpID09IHN0cmVhbSkgeworICAgICAgICAgICAgcGx1Z2luU3Ry
ZWFtID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICB9CkBAIC0zODcsNyArMzg3LDcgQEAgdm9pZCBOZXRzY2FwZVBsdWdpbjo6dW5zY2hlZHVsZVRp
bWVyKHVuc2lnbmVkIHRpbWVySUQpCiAgICAgaWYgKGl0ID09IG1fdGltZXJzLmVuZCgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBPd25QdHI8VGltZXI+IHRpbWVyID0gYWRvcHRQdHIoaXQtPnNl
Y29uZCk7CisgICAgT3duUHRyPFRpbWVyPiB0aW1lciA9IGFkb3B0UHRyKGl0LT52YWx1ZSk7CiAg
ICAgbV90aW1lcnMucmVtb3ZlKGl0KTsKIAogICAgIHRpbWVyLT5zdG9wKCk7CkBAIC03NjIsOCAr
NzYyLDggQEAgdm9pZCBOZXRzY2FwZVBsdWdpbjo6ZnJhbWVEaWRGaW5pc2hMb2FkaW5nKHVpbnQ2
NF90IHJlcXVlc3RJRCkKICAgICBpZiAoaXQgPT0gbV9wZW5kaW5nVVJMTm90aWZpY2F0aW9ucy5l
bmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU3RyaW5nIHVybCA9IGl0LT5zZWNvbmQuZmly
c3Q7Ci0gICAgdm9pZCogbm90aWZpY2F0aW9uRGF0YSA9IGl0LT5zZWNvbmQuc2Vjb25kOworICAg
IFN0cmluZyB1cmwgPSBpdC0+dmFsdWUuZmlyc3Q7CisgICAgdm9pZCogbm90aWZpY2F0aW9uRGF0
YSA9IGl0LT52YWx1ZS5zZWNvbmQ7CiAKICAgICBtX3BlbmRpbmdVUkxOb3RpZmljYXRpb25zLnJl
bW92ZShpdCk7CiAgICAgCkBAIC03NzgsOCArNzc4LDggQEAgdm9pZCBOZXRzY2FwZVBsdWdpbjo6
ZnJhbWVEaWRGYWlsKHVpbnQ2NF90IHJlcXVlc3RJRCwgYm9vbCB3YXNDYW5jZWxsZWQpCiAgICAg
aWYgKGl0ID09IG1fcGVuZGluZ1VSTE5vdGlmaWNhdGlvbnMuZW5kKCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIFN0cmluZyB1cmwgPSBpdC0+c2Vjb25kLmZpcnN0OwotICAgIHZvaWQqIG5vdGlm
aWNhdGlvbkRhdGEgPSBpdC0+c2Vjb25kLnNlY29uZDsKKyAgICBTdHJpbmcgdXJsID0gaXQtPnZh
bHVlLmZpcnN0OworICAgIHZvaWQqIG5vdGlmaWNhdGlvbkRhdGEgPSBpdC0+dmFsdWUuc2Vjb25k
OwogCiAgICAgbV9wZW5kaW5nVVJMTm90aWZpY2F0aW9ucy5yZW1vdmUoaXQpOwogICAgIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3Bw
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCmluZGV4
IGQwN2Y4Yjc5ZDZhODAyYWY3OTQwN2JhOTU2NjAxNTY5MmJlNWY1ZjUuLjY0YWUxYTRlNGIyOGQz
OGFiYzY3NzlmYmNiZjA2ZWFlYjEzNmQ5ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKQEAgLTE3MCw5ICsxNzAsOSBAQCBzdGF0aWMg
U3RyaW5nIGJ1aWxkSFRUUEhlYWRlcnMoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2Us
IGxvbmcgbG9uZyYgZXhwZQogICAgIAogICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMoKS5lbmQoKTsKICAgICBmb3IgKEhUVFBI
ZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkcygp
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZChpdC0+Zmlyc3QuY2hhcmFjdGVycygpLCBpdC0+Zmlyc3QubGVuZ3RoKCkpOworICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+a2V5LmNoYXJhY3RlcnMoKSwgaXQtPmtleS5sZW5ndGgo
KSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHNlcGFyYXRvci5jaGFyYWN0ZXJzKCks
IHNlcGFyYXRvci5sZW5ndGgoKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5z
ZWNvbmQuY2hhcmFjdGVycygpLCBpdC0+c2Vjb25kLmxlbmd0aCgpKTsKKyAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQoaXQtPnZhbHVlLmNoYXJhY3RlcnMoKSwgaXQtPnZhbHVlLmxlbmd0aCgp
KTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7CiAgICAgfQogICAgIApAQCAt
Mjg0LDcgKzI4NCw3IEBAIFBsdWdpblZpZXc6On5QbHVnaW5WaWV3KCkKIAogICAgIC8vIENhbmNl
bCBhbGwgcGVuZGluZyBmcmFtZSBsb2Fkcy4KICAgICBmb3IgKEZyYW1lTG9hZE1hcDo6aXRlcmF0
b3IgaXQgPSBtX3BlbmRpbmdGcmFtZUxvYWRzLmJlZ2luKCksIGVuZCA9IG1fcGVuZGluZ0ZyYW1l
TG9hZHMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPmZpcnN0LT5zZXRMb2Fk
TGlzdGVuZXIoMCk7CisgICAgICAgIGl0LT5rZXktPnNldExvYWRMaXN0ZW5lcigwKTsKIAogICAg
IGlmIChtX3BsdWdpbikgewogICAgICAgICBtX2lzQmVpbmdEZXN0cm95ZWQgPSB0cnVlOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXll
ci5jcHAKaW5kZXggNGYxNzZkZDg2YTQ1NWIzNzUwOTMxZjJjYzk0ZmI5Y2U3ODE1YWI0NS4uNzM1
NjA5NGRlODYxODlhMGU1ODQzNmE3YWQ3NzIxNzJiOGRiOTFkMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCkBAIC01
Myw3ICs1Myw3IEBAIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyOjpsYXllckJ5SUQoV2ViS2l0OjpXZWJMYXllcklECiAgICAgSGFzaE1hcDxXZWJMYXll
cklELCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqPjo6aXRlcmF0b3IgaXQgPSB0YWJsZS5maW5k
KGlkKTsKICAgICBpZiAoaXQgPT0gdGFibGUuZW5kKCkpCiAgICAgICAgIHJldHVybiAwOwotICAg
IHJldHVybiBpdC0+c2Vjb25kOworICAgIHJldHVybiBpdC0+dmFsdWU7CiB9CiAKIHN0YXRpYyBX
ZWJMYXllcklEIHRvV2ViTGF5ZXJJRChHcmFwaGljc0xheWVyKiBsYXllcikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xh
eWVyVHJlZUNvb3JkaW5hdG9yLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcAppbmRleCBhM2E1
NzI5MDczYmRlOWZmNzMzNWU3YzJhN2E4NGNlYTNlZDU4M2M1Li41NzRjMDc5ZGNmNGI0ZWU3NDRj
NjRhZWE3MDlkMDUyMDNmYjFlMjYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3BwCkBAIC00NTQsNyArNDU0LDcgQEAgaW50NjRfdCBM
YXllclRyZWVDb29yZGluYXRvcjo6YWRvcHRJbWFnZUJhY2tpbmdTdG9yZShJbWFnZSogaW1hZ2Up
CiAgICAgSGFzaE1hcDxpbnQ2NF90LCBpbnQ+OjppdGVyYXRvciBpdCA9IG1fZGlyZWN0bHlDb21w
b3NpdGVkSW1hZ2VSZWZDb3VudHMuZmluZChrZXkpOwogCiAgICAgaWYgKGl0ICE9IG1fZGlyZWN0
bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMuZW5kKCkpIHsKLSAgICAgICAgKysoaXQtPnNlY29u
ZCk7CisgICAgICAgICsrKGl0LT52YWx1ZSk7CiAgICAgICAgIHJldHVybiBrZXk7CiAgICAgfQog
CkBAIC00NzksOSArNDc5LDkgQEAgdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6cmVsZWFzZUlt
YWdlQmFja2luZ1N0b3JlKGludDY0X3Qga2V5KQogICAgIGlmIChpdCA9PSBtX2RpcmVjdGx5Q29t
cG9zaXRlZEltYWdlUmVmQ291bnRzLmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpdC0+
c2Vjb25kLS07CisgICAgaXQtPnZhbHVlLS07CiAKLSAgICBpZiAoaXQtPnNlY29uZCkKKyAgICBp
ZiAoaXQtPnZhbHVlKQogICAgICAgICByZXR1cm47CiAKICAgICBtX2RpcmVjdGx5Q29tcG9zaXRl
ZEltYWdlUmVmQ291bnRzLnJlbW92ZShpdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFja0ZvcndhcmRMaXN0UHJveHkuY3BwIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFByb3h5LmNwcAppbmRl
eCA0Y2E0ZTVmZGI3MmNmY2VhYzY5NTQ1ZGQxN2Q5ZjdhMmNjODQ2ODM4Li5iZTgyYTE5N2E3MzZk
NjIzMmE1NDM3ZGE5YzI5MDJlYjA1Y2EzYTBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFja0ZvcndhcmRMaXN0UHJveHkuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9yd2FyZExpc3RQcm94eS5jcHAK
QEAgLTEzMCw5ICsxMzAsOSBAQCB2b2lkIFdlYkJhY2tGb3J3YXJkTGlzdFByb3h5OjpyZW1vdmVJ
dGVtKHVpbnQ2NF90IGl0ZW1JRCkKICAgICBpZiAoaXQgPT0gaWRUb0hpc3RvcnlJdGVtTWFwKCku
ZW5kKCkpCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgV2ViQ29yZTo6cGFnZUNhY2hl
KCktPnJlbW92ZShpdC0+c2Vjb25kLmdldCgpKTsKKyAgICBXZWJDb3JlOjpwYWdlQ2FjaGUoKS0+
cmVtb3ZlKGl0LT52YWx1ZS5nZXQoKSk7CiAKLSAgICBoaXN0b3J5SXRlbVRvSURNYXAoKS5yZW1v
dmUoaXQtPnNlY29uZCk7CisgICAgaGlzdG9yeUl0ZW1Ub0lETWFwKCkucmVtb3ZlKGl0LT52YWx1
ZSk7CiAgICAgaWRUb0hpc3RvcnlJdGVtTWFwKCkucmVtb3ZlKGl0KTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCmluZGV4
IGMyZjAxNjUzNzU5NTNiNTNjYzNjZDFiOWViNDMxZGI1ZWNlYjkzYWQuLjIyMjczYzFmNjQ2MjFk
OWZmMDI4MGU3NWNlNjEzNWJhNWQyNWFiNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KQEAgLTEyMSw3ICsxMjEsNyBAQCBz
dGF0aWMgU3RyaW5nIGNvbW1hbmROYW1lRm9yU2VsZWN0b3JOYW1lKGNvbnN0IFN0cmluZyYgc2Vs
ZWN0b3JOYW1lKQogICAgIHN0YXRpYyBjb25zdCBTZWxlY3Rvck5hbWVNYXAqIGV4Y2VwdGlvbk1h
cCA9IGNyZWF0ZVNlbGVjdG9yRXhjZXB0aW9uTWFwKCk7CiAgICAgU2VsZWN0b3JOYW1lTWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IGV4Y2VwdGlvbk1hcC0+ZmluZChzZWxlY3Rvck5hbWUpOwogICAg
IGlmIChpdCAhPSBleGNlcHRpb25NYXAtPmVuZCgpKQotICAgICAgICByZXR1cm4gaXQtPnNlY29u
ZDsKKyAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKIAogICAgIC8vIFJlbW92ZSB0aGUgdHJhaWxp
bmcgY29sb24uCiAgICAgLy8gTm8gbmVlZCB0byBjYXBpdGFsaXplIHRoZSBjb21tYW5kIG5hbWUg
c2luY2UgRWRpdG9yIGNvbW1hbmQgbmFtZXMgYXJlIG5vdCBjYXNlIHNlbnNpdGl2ZS4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCmluZGV4IDE0OTBmZjNjYWY3NDM3M2Nj
NmJkNjAzMWY0YmJjNWFkNzg5OTg4ZjIuLjZhYTkyMDQxNTk2YzkzOWZhOWYyMTQ4MWE5YzdlYmE0
ZDU4YjY5ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vz
cy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcApAQCAt
MzM5LDcgKzMzOSw3IEBAIHZvaWQgV2ViUHJvY2Vzczo6dmlzaXRlZExpbmtTdGF0ZUNoYW5nZWQo
Y29uc3QgVmVjdG9yPFdlYkNvcmU6OkxpbmtIYXNoPiYgbGlua0hhCiAgICAgICAgIEhhc2hNYXA8
dWludDY0X3QsIFJlZlB0cjxXZWJQYWdlR3JvdXBQcm94eT4gPjo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtX3BhZ2VHcm91cE1hcC5iZWdpbigpOwogICAgICAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQ
dHI8V2ViUGFnZUdyb3VwUHJveHk+ID46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGFnZUdyb3Vw
TWFwLmVuZCgpOwogICAgICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAg
UGFnZTo6dmlzaXRlZFN0YXRlQ2hhbmdlZChQYWdlR3JvdXA6OnBhZ2VHcm91cChpdC0+c2Vjb25k
LT5pZGVudGlmaWVyKCkpLCBsaW5rSGFzaGVzW2ldKTsKKyAgICAgICAgICAgIFBhZ2U6OnZpc2l0
ZWRTdGF0ZUNoYW5nZWQoUGFnZUdyb3VwOjpwYWdlR3JvdXAoaXQtPnZhbHVlLT5pZGVudGlmaWVy
KCkpLCBsaW5rSGFzaGVzW2ldKTsKICAgICB9CiAKICAgICBwYWdlQ2FjaGUoKS0+bWFya1BhZ2Vz
Rm9yVmlzdGVkTGlua1N0eWxlUmVjYWxjKCk7CkBAIC0zNTEsNyArMzUxLDcgQEAgdm9pZCBXZWJQ
cm9jZXNzOjphbGxWaXNpdGVkTGlua1N0YXRlQ2hhbmdlZCgpCiAgICAgSGFzaE1hcDx1aW50NjRf
dCwgUmVmUHRyPFdlYlBhZ2VHcm91cFByb3h5PiA+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGFn
ZUdyb3VwTWFwLmJlZ2luKCk7CiAgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPFdlYlBhZ2VH
cm91cFByb3h5PiA+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BhZ2VHcm91cE1hcC5lbmQoKTsK
ICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBQYWdlOjphbGxWaXNpdGVkU3Rh
dGVDaGFuZ2VkKFBhZ2VHcm91cDo6cGFnZUdyb3VwKGl0LT5zZWNvbmQtPmlkZW50aWZpZXIoKSkp
OworICAgICAgICBQYWdlOjphbGxWaXNpdGVkU3RhdGVDaGFuZ2VkKFBhZ2VHcm91cDo6cGFnZUdy
b3VwKGl0LT52YWx1ZS0+aWRlbnRpZmllcigpKSk7CiAKICAgICBwYWdlQ2FjaGUoKS0+bWFya1Bh
Z2VzRm9yVmlzdGVkTGlua1N0eWxlUmVjYWxjKCk7CiB9CkBAIC01MjcsNyArNTI3LDcgQEAgV2Vi
UGFnZSogV2ViUHJvY2Vzczo6Zm9jdXNlZFdlYlBhZ2UoKSBjb25zdAogeyAgICAKICAgICBIYXNo
TWFwPHVpbnQ2NF90LCBSZWZQdHI8V2ViUGFnZT4gPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9w
YWdlTWFwLmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPFdlYlBhZ2U+
ID46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wYWdlTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgewotICAgICAgICBXZWJQYWdlKiBwYWdlID0gKCppdCkuc2Vjb25kLmdldCgpOworICAgICAg
ICBXZWJQYWdlKiBwYWdlID0gKCppdCkudmFsdWUuZ2V0KCk7CiAgICAgICAgIGlmIChwYWdlLT53
aW5kb3dBbmRXZWJQYWdlQXJlRm9jdXNlZCgpKQogICAgICAgICAgICAgcmV0dXJuIHBhZ2U7CiAg
ICAgfQpAQCAtNTQ1LDE0ICs1NDUsMTQgQEAgdm9pZCBXZWJQcm9jZXNzOjpjcmVhdGVXZWJQYWdl
KHVpbnQ2NF90IHBhZ2VJRCwgY29uc3QgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycyYKICAgICAv
LyBsaW5rKSB0aGUgV2ViUGFnZSBnZXRzIGNyZWF0ZWQgYm90aCBpbiB0aGUgc3luY2hyb25vdXMg
aGFuZGxlciBhbmQgdGhyb3VnaCB0aGUgbm9ybWFsIHdheS4gCiAgICAgSGFzaE1hcDx1aW50NjRf
dCwgUmVmUHRyPFdlYlBhZ2U+ID46OkFkZFJlc3VsdCByZXN1bHQgPSBtX3BhZ2VNYXAuYWRkKHBh
Z2VJRCwgMCk7CiAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIEFTU0VSVCgh
cmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOwotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29u
ZCA9IFdlYlBhZ2U6OmNyZWF0ZShwYWdlSUQsIHBhcmFtZXRlcnMpOworICAgICAgICBBU1NFUlQo
IXJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVl
ID0gV2ViUGFnZTo6Y3JlYXRlKHBhZ2VJRCwgcGFyYW1ldGVycyk7CiAKICAgICAgICAgLy8gQmFs
YW5jZWQgYnkgYW4gZW5hYmxlVGVybWluYXRpb24gaW4gcmVtb3ZlV2ViUGFnZS4KICAgICAgICAg
ZGlzYWJsZVRlcm1pbmF0aW9uKCk7CiAgICAgfQogCi0gICAgQVNTRVJUKHJlc3VsdC5pdGVyYXRv
ci0+c2Vjb25kKTsKKyAgICBBU1NFUlQocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CiB9CiAKIHZv
aWQgV2ViUHJvY2Vzczo6cmVtb3ZlV2ViUGFnZSh1aW50NjRfdCBwYWdlSUQpCkBAIC03ODksMTEg
Kzc4OSwxMSBAQCBXZWJQYWdlR3JvdXBQcm94eSogV2ViUHJvY2Vzczo6d2ViUGFnZUdyb3VwKGNv
bnN0IFdlYlBhZ2VHcm91cERhdGEmIHBhZ2VHcm91cERhdAogewogICAgIEhhc2hNYXA8dWludDY0
X3QsIFJlZlB0cjxXZWJQYWdlR3JvdXBQcm94eT4gPjo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fcGFn
ZUdyb3VwTWFwLmFkZChwYWdlR3JvdXBEYXRhLnBhZ2VHcm91cElELCAwKTsKICAgICBpZiAocmVz
dWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgQVNTRVJUKCFyZXN1bHQuaXRlcmF0b3ItPnNlY29u
ZCk7Ci0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gV2ViUGFnZUdyb3VwUHJveHk6
OmNyZWF0ZShwYWdlR3JvdXBEYXRhKTsKKyAgICAgICAgQVNTRVJUKCFyZXN1bHQuaXRlcmF0b3It
PnZhbHVlKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IFdlYlBhZ2VHcm91cFBy
b3h5OjpjcmVhdGUocGFnZUdyb3VwRGF0YSk7CiAgICAgfQogCi0gICAgcmV0dXJuIHJlc3VsdC5p
dGVyYXRvci0+c2Vjb25kLmdldCgpOworICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVl
LmdldCgpOwogfQogCiAjaWYgRU5BQkxFKFdFQl9JTlRFTlRTKQpAQCAtOTEyLDcgKzkxMiw3IEBA
IHN0YXRpYyB2b2lkIGZyb21Db3VudGVkU2V0VG9IYXNoTWFwKFR5cGVDb3VudFNldCogY291bnRl
ZFNldCwgSGFzaE1hcDxTdHJpbmcsIHVpCiB7CiAgICAgVHlwZUNvdW50U2V0Ojpjb25zdF9pdGVy
YXRvciBlbmQgPSBjb3VudGVkU2V0LT5lbmQoKTsKICAgICBmb3IgKFR5cGVDb3VudFNldDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBjb3VudGVkU2V0LT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0g
ICAgICAgIG1hcC5zZXQoaXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsKKyAgICAgICAgbWFwLnNldChp
dC0+a2V5LCBpdC0+dmFsdWUpOwogfQogCiBzdGF0aWMgdm9pZCBnZXRXZWJDb3JlTWVtb3J5Q2Fj
aGVTdGF0aXN0aWNzKFZlY3RvcjxIYXNoTWFwPFN0cmluZywgdWludDY0X3Q+ID4mIHJlc3VsdCkK
QEAgLTEwODUsNyArMTA4NSw3IEBAIHZvaWQgV2ViUHJvY2Vzczo6c2V0VGV4dENoZWNrZXJTdGF0
ZShjb25zdCBUZXh0Q2hlY2tlclN0YXRlJiB0ZXh0Q2hlY2tlclN0YXRlKQogCiAgICAgSGFzaE1h
cDx1aW50NjRfdCwgUmVmUHRyPFdlYlBhZ2U+ID46Oml0ZXJhdG9yIGVuZCA9IG1fcGFnZU1hcC5l
bmQoKTsKICAgICBmb3IgKEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxXZWJQYWdlPiA+OjppdGVy
YXRvciBpdCA9IG1fcGFnZU1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAg
V2ViUGFnZSogcGFnZSA9ICgqaXQpLnNlY29uZC5nZXQoKTsKKyAgICAgICAgV2ViUGFnZSogcGFn
ZSA9ICgqaXQpLnZhbHVlLmdldCgpOwogICAgICAgICBpZiAoY29udGludW91c1NwZWxsQ2hlY2tp
bmdUdXJuZWRPZmYpCiAgICAgICAgICAgICBwYWdlLT51bm1hcmtBbGxNaXNzcGVsbGluZ3MoKTsK
ICAgICAgICAgaWYgKGdyYW1tYXJDaGVja2luZ1R1cm5lZE9mZikKZGlmZiAtLWdpdCBhL1Rvb2xz
L0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBkNWJiNDczYzg5ZmMxZDYwMjY1ODdh
MGRhNzZkMjcxM2Q5OWY3NGM2Li5jNTBkOWJjMDQzNzM3N2U2ZDgwYzBkMTUzMGQ1MTQ5OTIxYzFj
MGI2IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsNDIgQEAKKzIwMTItMDgtMjcgIENhaW8gTWFyY2VsbyBkZSBPbGl2ZWlyYSBGaWxo
byAgPGNhaW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KKworICAgICAgICBSZW5hbWUgZmlyc3Qv
c2Vjb25kIHRvIGtleS92YWx1ZSBpbiBIYXNoTWFwIGl0ZXJhdG9ycworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI3ODQKKworICAgICAgICBSZXZpZXdl
ZCBieSBFcmljIFNlaWRlbC4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL01v
Y2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoTW9ja1dlYlNwZWVjaElu
cHV0Q29udHJvbGxlcjo6YWRkTW9ja1JlY29nbml0aW9uUmVzdWx0KToKKyAgICAgICAgKiBEdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9Ob3RpZmljYXRpb25QcmVzZW50ZXIuY3BwOgorICAgICAgICAo
Tm90aWZpY2F0aW9uUHJlc2VudGVyOjpzaW11bGF0ZUNsaWNrKToKKyAgICAgICAgKE5vdGlmaWNh
dGlvblByZXNlbnRlcjo6c2hvdyk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
VGVzdFJ1bm5lci9DcHBCb3VuZENsYXNzLmNwcDoKKyAgICAgICAgKENwcEJvdW5kQ2xhc3M6On5D
cHBCb3VuZENsYXNzKToKKyAgICAgICAgKENwcEJvdW5kQ2xhc3M6Omludm9rZSk6CisgICAgICAg
IChDcHBCb3VuZENsYXNzOjpnZXRQcm9wZXJ0eSk6CisgICAgICAgIChDcHBCb3VuZENsYXNzOjpz
ZXRQcm9wZXJ0eSk6CisgICAgICAgIChDcHBCb3VuZENsYXNzOjpiaW5kQ2FsbGJhY2spOgorICAg
ICAgICAoQ3BwQm91bmRDbGFzczo6YmluZFByb3BlcnR5KToKKyAgICAgICAgKiBEdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5jcHA6CisgICAgICAgIChhcHBseUZvbnRNYXAp
OgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcDoKKyAg
ICAgICAgKFdlYlZpZXdIb3N0OjpwcmludFJlc291cmNlRGVzY3JpcHRpb24pOgorICAgICAgICAq
IER1bXBSZW5kZXJUcmVlL3dpbi9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlcldpbi5jcHA6CisgICAg
ICAgIChBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6fkFjY2Vzc2liaWxpdHlDb250cm9sbGVyKToK
KyAgICAgICAgKEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjp3aW5Ob3RpZmljYXRpb25SZWNlaXZl
ZCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL1Jlc291cmNlTG9hZERlbGVnYXRlLmNw
cDoKKyAgICAgICAgKFJlc291cmNlTG9hZERlbGVnYXRlOjpkZXNjcmlwdGlvblN1aXRhYmxlRm9y
VGVzdFJlc3VsdCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL1Rlc3RSdW5uZXJXaW4u
Y3BwOgorICAgICAgICAod29ybGRJREZvcldvcmxkKToKKyAgICAgICAgKFRlc3RSdW5uZXI6OmV2
YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdDIvRE9NV2luZG93RXh0ZW5zaW9uQmFzaWNfQnVuZGxlLmNwcDoKKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OkRPTVdpbmRvd0V4dGVuc2lvbkJhc2ljOjp3aWxsRGVzdHJveVBhZ2Up
OgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9ET01XaW5kb3dFeHRlbnNp
b25Ob0NhY2hlX0J1bmRsZS5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpET01XaW5kb3dF
eHRlbnNpb25Ob0NhY2hlOjp3aWxsRGVzdHJveVBhZ2UpOgorICAgICAgICAqIFdlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHA6CisgICAgICAgIChXVFI6OlRlc3RS
dW5uZXI6OndvcmxkSURGb3JXb3JsZCk6CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmV2YWx1
YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKToKKwogMjAxMi0wOC0yNCAgSmFtZXMgUm9iaW5zb24g
IDxqYW1lc3JAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYkdMIHNob3VsZCBub3QgZmxpcCB0
ZXh0dXJlcyBvbiBwcmVzZW50YXRpb24gaWYgY29udGVudHMgYXJlIHVuY2hhbmdlZApkaWZmIC0t
Z2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTW9ja1dlYlNwZWVjaElucHV0Q29u
dHJvbGxlci5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9Nb2NrV2ViU3BlZWNo
SW5wdXRDb250cm9sbGVyLmNwcAppbmRleCA3MTYyMjJmOWFjY2ZlOGZmYmUzNTk5Nzg1MzgzNzY0
NzA2YzY0ZTFlLi4xM2M4ZmYxZWM0YzFjZGU1NTA3NjY5OGRmY2ZlNWU4NzEyNmE4MmViIDEwMDY0
NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9Nb2NrV2ViU3BlZWNoSW5wdXRD
b250cm9sbGVyLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9Nb2NrV2Vi
U3BlZWNoSW5wdXRDb250cm9sbGVyLmNwcApAQCAtNTIsNyArNTIsNyBAQCB2b2lkIE1vY2tXZWJT
cGVlY2hJbnB1dENvbnRyb2xsZXI6OmFkZE1vY2tSZWNvZ25pdGlvblJlc3VsdChjb25zdCBXZWJT
dHJpbmcmIHJlcwogICAgICAgICBTdHJpbmcgbGFuZ1N0cmluZyA9IFN0cmluZzo6ZnJvbVVURjgo
bGFuZ3VhZ2UudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIGlmICghbV9yZWNvZ25pdGlvblJlc3Vs
dHMuY29udGFpbnMobGFuZ1N0cmluZykpCiAgICAgICAgICAgICBtX3JlY29nbml0aW9uUmVzdWx0
cy5zZXQobGFuZ1N0cmluZywgVmVjdG9yPFdlYlNwZWVjaElucHV0UmVzdWx0PigpKTsKLSAgICAg
ICAgbV9yZWNvZ25pdGlvblJlc3VsdHMuZmluZChsYW5nU3RyaW5nKS0+c2Vjb25kLmFwcGVuZChy
ZXMpOworICAgICAgICBtX3JlY29nbml0aW9uUmVzdWx0cy5maW5kKGxhbmdTdHJpbmcpLT52YWx1
ZS5hcHBlbmQocmVzKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL05vdGlmaWNhdGlvblByZXNlbnRlci5jcHAgYi9Ub29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9Ob3RpZmljYXRpb25QcmVzZW50ZXIuY3BwCmluZGV4IDBjNTQwMGY1ZTll
OGY3MTcwZWNmNTk5YTgxYmQ0MjZmYmQ3NzI5MWQuLmEyMTU4OGY3NDRlNWMzZjVhYjcwZGJkYjAz
YzI3NWM1MDcwOGYwM2EgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L05vdGlmaWNhdGlvblByZXNlbnRlci5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vTm90aWZpY2F0aW9uUHJlc2VudGVyLmNwcApAQCAtNzUsNyArNzUsNyBAQCBib29sIE5v
dGlmaWNhdGlvblByZXNlbnRlcjo6c2ltdWxhdGVDbGljayhjb25zdCBXZWJTdHJpbmcmIHRpdGxl
KQogICAgIGlmIChtX2FjdGl2ZU5vdGlmaWNhdGlvbnMuZmluZChpZCkgPT0gbV9hY3RpdmVOb3Rp
ZmljYXRpb25zLmVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgY29uc3Qg
V2ViTm90aWZpY2F0aW9uJiBub3RpZmljYXRpb24gPSBtX2FjdGl2ZU5vdGlmaWNhdGlvbnMuZmlu
ZChpZCktPnNlY29uZDsKKyAgICBjb25zdCBXZWJOb3RpZmljYXRpb24mIG5vdGlmaWNhdGlvbiA9
IG1fYWN0aXZlTm90aWZpY2F0aW9ucy5maW5kKGlkKS0+dmFsdWU7CiAgICAgV2ViTm90aWZpY2F0
aW9uIGV2ZW50VGFyZ2V0KG5vdGlmaWNhdGlvbik7CiAgICAgZXZlbnRUYXJnZXQuZGlzcGF0Y2hD
bGlja0V2ZW50KCk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC04OSw3ICs4OSw3IEBAIGJvb2wgTm90
aWZpY2F0aW9uUHJlc2VudGVyOjpzaG93KGNvbnN0IFdlYk5vdGlmaWNhdGlvbiYgbm90aWZpY2F0
aW9uKQogICAgICAgICBXVEY6OlN0cmluZyByZXBsYWNlSWQobm90aWZpY2F0aW9uLnJlcGxhY2VJ
ZCgpLmRhdGEoKSwgbm90aWZpY2F0aW9uLnJlcGxhY2VJZCgpLmxlbmd0aCgpKTsKICAgICAgICAg
aWYgKG1fcmVwbGFjZW1lbnRzLmZpbmQocmVwbGFjZUlkKSAhPSBtX3JlcGxhY2VtZW50cy5lbmQo
KSkKICAgICAgICAgICAgIHByaW50ZigiUkVQTEFDSU5HIE5PVElGSUNBVElPTiAlc1xuIiwKLSAg
ICAgICAgICAgICAgICAgICBtX3JlcGxhY2VtZW50cy5maW5kKHJlcGxhY2VJZCktPnNlY29uZC51
dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICBtX3JlcGxhY2VtZW50cy5maW5kKHJl
cGxhY2VJZCktPnZhbHVlLnV0ZjgoKS5kYXRhKCkpOwogCiAgICAgICAgIG1fcmVwbGFjZW1lbnRz
LnNldChyZXBsYWNlSWQsIFdURjo6U3RyaW5nKGlkZW50aWZpZXIuZGF0YSgpLCBpZGVudGlmaWVy
Lmxlbmd0aCgpKSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vVGVzdFJ1bm5lci9DcHBCb3VuZENsYXNzLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1Rlc3RSdW5uZXIvQ3BwQm91bmRDbGFzcy5jcHAKaW5kZXggOWI0YTNiNjQ2NDVk
MDU3YjQxNzJlMWM3ZGZhMDdjN2E2MmU3N2NmOC4uMWIyOWQyYjBmNTVkMDFmNzM4NzE0NTc4Nzdm
OWRiZGYwNmYxYjQ5MSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
VGVzdFJ1bm5lci9DcHBCb3VuZENsYXNzLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9UZXN0UnVubmVyL0NwcEJvdW5kQ2xhc3MuY3BwCkBAIC0yMDMsMTAgKzIwMywxMCBA
QCBib29sIENwcE5QT2JqZWN0OjpzZXRQcm9wZXJ0eShOUE9iamVjdCogbnBPYmosIE5QSWRlbnRp
ZmllciBpZGVudCwgY29uc3QgTlBWYXJpYQogQ3BwQm91bmRDbGFzczo6fkNwcEJvdW5kQ2xhc3Mo
KQogewogICAgIGZvciAoTWV0aG9kTGlzdDo6aXRlcmF0b3IgaSA9IG1fbWV0aG9kcy5iZWdpbigp
OyBpICE9IG1fbWV0aG9kcy5lbmQoKTsgKytpKQotICAgICAgICBkZWxldGUgaS0+c2Vjb25kOwor
ICAgICAgICBkZWxldGUgaS0+dmFsdWU7CiAKICAgICBmb3IgKFByb3BlcnR5TGlzdDo6aXRlcmF0
b3IgaSA9IG1fcHJvcGVydGllcy5iZWdpbigpOyBpICE9IG1fcHJvcGVydGllcy5lbmQoKTsgKytp
KQotICAgICAgICBkZWxldGUgaS0+c2Vjb25kOworICAgICAgICBkZWxldGUgaS0+dmFsdWU7CiAK
ICAgICAvLyBVbnJlZ2lzdGVyIG91cnNlbHZlcyBpZiB3ZSB3ZXJlIGJvdW5kIHRvIGEgZnJhbWUu
CiAgICAgaWYgKG1fYm91bmRUb0ZyYW1lKQpAQCAtMjM3LDcgKzIzNyw3IEBAIGJvb2wgQ3BwQm91
bmRDbGFzczo6aW52b2tlKE5QSWRlbnRpZmllciBpZGVudCwKICAgICAgICAgfQogICAgICAgICBj
YWxsYmFjayA9IG1fZmFsbGJhY2tDYWxsYmFjay5nZXQoKTsKICAgICB9IGVsc2UKLSAgICAgICAg
Y2FsbGJhY2sgPSAoKm1ldGhvZCkuc2Vjb25kOworICAgICAgICBjYWxsYmFjayA9ICgqbWV0aG9k
KS52YWx1ZTsKIAogICAgIC8vIEJ1aWxkIGEgQ3BwQXJndW1lbnRMaXN0IGFyZ3VtZW50IHZlY3Rv
ciBmcm9tIHRoZSBOUFZhcmlhbnRzIGNvbWluZyBpbi4KICAgICBDcHBBcmd1bWVudExpc3QgY3Bw
QXJndW1lbnRzKGFyZ3VtZW50Q291bnQpOwpAQCAtMjYwLDcgKzI2MCw3IEBAIGJvb2wgQ3BwQm91
bmRDbGFzczo6Z2V0UHJvcGVydHkoTlBJZGVudGlmaWVyIGlkZW50LCBOUFZhcmlhbnQqIHJlc3Vs
dCkgY29uc3QKICAgICB9CiAKICAgICBDcHBWYXJpYW50IGNwcFZhbHVlOwotICAgIGlmICghY2Fs
bGJhY2stPnNlY29uZC0+Z2V0VmFsdWUoJmNwcFZhbHVlKSkKKyAgICBpZiAoIWNhbGxiYWNrLT52
YWx1ZS0+Z2V0VmFsdWUoJmNwcFZhbHVlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGNw
cFZhbHVlLmNvcHlUb05QVmFyaWFudChyZXN1bHQpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMjc0
LDcgKzI3NCw3IEBAIGJvb2wgQ3BwQm91bmRDbGFzczo6c2V0UHJvcGVydHkoTlBJZGVudGlmaWVy
IGlkZW50LCBjb25zdCBOUFZhcmlhbnQqIHZhbHVlKQogCiAgICAgQ3BwVmFyaWFudCBjcHBWYWx1
ZTsKICAgICBjcHBWYWx1ZS5zZXQoKnZhbHVlKTsKLSAgICByZXR1cm4gKCpjYWxsYmFjaykuc2Vj
b25kLT5zZXRWYWx1ZShjcHBWYWx1ZSk7CisgICAgcmV0dXJuICgqY2FsbGJhY2spLnZhbHVlLT5z
ZXRWYWx1ZShjcHBWYWx1ZSk7CiB9CiAKIHZvaWQgQ3BwQm91bmRDbGFzczo6YmluZENhbGxiYWNr
KGNvbnN0IHN0cmluZyYgbmFtZSwgQ2FsbGJhY2sqIGNhbGxiYWNrKQpAQCAtMjgyLDcgKzI4Miw3
IEBAIHZvaWQgQ3BwQm91bmRDbGFzczo6YmluZENhbGxiYWNrKGNvbnN0IHN0cmluZyYgbmFtZSwg
Q2FsbGJhY2sqIGNhbGxiYWNrKQogICAgIE5QSWRlbnRpZmllciBpZGVudCA9IFdlYkJpbmRpbmdz
OjpnZXRTdHJpbmdJZGVudGlmaWVyKG5hbWUuY19zdHIoKSk7CiAgICAgTWV0aG9kTGlzdDo6aXRl
cmF0b3Igb2xkQ2FsbGJhY2sgPSBtX21ldGhvZHMuZmluZChpZGVudCk7CiAgICAgaWYgKG9sZENh
bGxiYWNrICE9IG1fbWV0aG9kcy5lbmQoKSkgewotICAgICAgICBkZWxldGUgb2xkQ2FsbGJhY2st
PnNlY29uZDsKKyAgICAgICAgZGVsZXRlIG9sZENhbGxiYWNrLT52YWx1ZTsKICAgICAgICAgaWYg
KCFjYWxsYmFjaykgewogICAgICAgICAgICAgbV9tZXRob2RzLnJlbW92ZShvbGRDYWxsYmFjayk7
CiAgICAgICAgICAgICByZXR1cm47CkBAIC0zMDksNyArMzA5LDcgQEAgdm9pZCBDcHBCb3VuZENs
YXNzOjpiaW5kUHJvcGVydHkoY29uc3Qgc3RyaW5nJiBuYW1lLCBQcm9wZXJ0eUNhbGxiYWNrKiBj
YWxsYmFjaykKICAgICBOUElkZW50aWZpZXIgaWRlbnQgPSBXZWJCaW5kaW5nczo6Z2V0U3RyaW5n
SWRlbnRpZmllcihuYW1lLmNfc3RyKCkpOwogICAgIFByb3BlcnR5TGlzdDo6aXRlcmF0b3Igb2xk
Q2FsbGJhY2sgPSBtX3Byb3BlcnRpZXMuZmluZChpZGVudCk7CiAgICAgaWYgKG9sZENhbGxiYWNr
ICE9IG1fcHJvcGVydGllcy5lbmQoKSkgewotICAgICAgICBkZWxldGUgb2xkQ2FsbGJhY2stPnNl
Y29uZDsKKyAgICAgICAgZGVsZXRlIG9sZENhbGxiYWNrLT52YWx1ZTsKICAgICAgICAgaWYgKCFj
YWxsYmFjaykgewogICAgICAgICAgICAgbV9wcm9wZXJ0aWVzLnJlbW92ZShvbGRDYWxsYmFjayk7
CiAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9XZWJQcmVmZXJlbmNlcy5jcHAKaW5kZXggYzRkZTBhYmMxNDQ1MGExMDlhYWNhN2Y5NzdhMjll
ODkzOWIyNmNlNC4uNmVjMGU0MzRkZGY0ZTFmZjRiYzgzZDdlZTk3NjIxZjJmODYwNDUxOCAxMDA2
NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViUHJlZmVyZW5jZXMuY3Bw
CisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZlcmVuY2VzLmNwcApA
QCAtMTU2LDkgKzE1Niw5IEBAIHR5cGVkZWYgdm9pZCAoKlNldEZvbnRGYW1pbHlXcmFwcGVyKShX
ZWJTZXR0aW5ncyosIGNvbnN0IFdlYlN0cmluZyYsIFVTY3JpcHRDb2RlCiBzdGF0aWMgdm9pZCBh
cHBseUZvbnRNYXAoV2ViU2V0dGluZ3MqIHNldHRpbmdzLCBjb25zdCBXZWJQcmVmZXJlbmNlczo6
U2NyaXB0Rm9udEZhbWlseU1hcCYgbWFwLCBTZXRGb250RmFtaWx5V3JhcHBlciBzZXR0ZXIpCiB7
CiAgICAgZm9yIChXZWJQcmVmZXJlbmNlczo6U2NyaXB0Rm9udEZhbWlseU1hcDo6Y29uc3RfaXRl
cmF0b3IgaXRlciA9IG1hcC5iZWdpbigpOyBpdGVyICE9IG1hcC5lbmQoKTsgKytpdGVyKSB7Ci0g
ICAgICAgIGNvbnN0IFdlYlN0cmluZyYgZm9udCA9IGl0ZXItPnNlY29uZDsKKyAgICAgICAgY29u
c3QgV2ViU3RyaW5nJiBmb250ID0gaXRlci0+dmFsdWU7CiAgICAgICAgIGlmICghZm9udC5pc051
bGwoKSAmJiAhZm9udC5pc0VtcHR5KCkpCi0gICAgICAgICAgICAoKnNldHRlcikoc2V0dGluZ3Ms
IGZvbnQsIHN0YXRpY19jYXN0PFVTY3JpcHRDb2RlPihpdGVyLT5maXJzdCkpOworICAgICAgICAg
ICAgKCpzZXR0ZXIpKHNldHRpbmdzLCBmb250LCBzdGF0aWNfY2FzdDxVU2NyaXB0Q29kZT4oaXRl
ci0+a2V5KSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9XZWJWaWV3SG9zdC5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9X
ZWJWaWV3SG9zdC5jcHAKaW5kZXggZGIwZWE1ZWVmZjI5ZmFmZGJjMTAyYTExZjU2ZDBmODI2YTgy
YTZmNi4uNGUzZTU5MmY0YjlhZDhlYzZlMGViN2Y1MmY1NzBiYmVhYjMxMDMxZSAxMDA2NDQKLS0t
IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuY3BwCisrKyBiL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcApAQCAtMTc2Myw3ICsx
NzYzLDcgQEAgdm9pZCBXZWJWaWV3SG9zdDo6cHJpbnRGcmFtZVVzZXJHZXN0dXJlU3RhdHVzKFdl
YkZyYW1lKiB3ZWJmcmFtZSwgY29uc3QgY2hhciogbXMKIHZvaWQgV2ViVmlld0hvc3Q6OnByaW50
UmVzb3VyY2VEZXNjcmlwdGlvbih1bnNpZ25lZCBpZGVudGlmaWVyKQogewogICAgIFJlc291cmNl
TWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VJZGVudGlmaWVyTWFwLmZpbmQoaWRlbnRpZmll
cik7Ci0gICAgcHJpbnRmKCIlcyIsIGl0ICE9IG1fcmVzb3VyY2VJZGVudGlmaWVyTWFwLmVuZCgp
ID8gaXQtPnNlY29uZC5jX3N0cigpIDogIjx1bmtub3duPiIpOworICAgIHByaW50ZigiJXMiLCBp
dCAhPSBtX3Jlc291cmNlSWRlbnRpZmllck1hcC5lbmQoKSA/IGl0LT52YWx1ZS5jX3N0cigpIDog
Ijx1bmtub3duPiIpOwogfQogCiB2b2lkIFdlYlZpZXdIb3N0OjpzZXRQZW5kaW5nRXh0cmFEYXRh
KFBhc3NPd25QdHI8VGVzdFNoZWxsRXh0cmFEYXRhPiBleHRyYURhdGEpCmRpZmYgLS1naXQgYS9U
b29scy9EdW1wUmVuZGVyVHJlZS93aW4vQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJXaW4uY3BwIGIv
VG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyV2luLmNwcApp
bmRleCA3ZjlhYTZjYzJlZTkyOWIyYmY4ZWE0MTZmNWQ2NWJiMDU2ZTNlYWQxLi5lYjM4YjU0MzVj
MTY5ZDJiZGZiMDU2OGM2M2VhMjAzYjVjNmZhM2RjIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS93aW4vQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJXaW4uY3BwCisrKyBiL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL3dpbi9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlcldpbi5jcHAKQEAgLTU4LDcg
KzU4LDcgQEAgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6On5BY2Nlc3NpYmlsaXR5Q29udHJvbGxl
cigpCiAgICAgICAgIFVuaG9va1dpbkV2ZW50KG1fbm90aWZpY2F0aW9uc0V2ZW50SG9vayk7CiAK
ICAgICBmb3IgKEhhc2hNYXA8UGxhdGZvcm1VSUVsZW1lbnQsIEpTT2JqZWN0UmVmPjo6aXRlcmF0
b3IgaXQgPSBtX25vdGlmaWNhdGlvbkxpc3RlbmVycy5iZWdpbigpOyBpdCAhPSBtX25vdGlmaWNh
dGlvbkxpc3RlbmVycy5lbmQoKTsgKytpdCkKLSAgICAgICAgSlNWYWx1ZVVucHJvdGVjdChmcmFt
ZS0+Z2xvYmFsQ29udGV4dCgpLCBpdC0+c2Vjb25kKTsKKyAgICAgICAgSlNWYWx1ZVVucHJvdGVj
dChmcmFtZS0+Z2xvYmFsQ29udGV4dCgpLCBpdC0+dmFsdWUpOwogfQogCiBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjplbGVtZW50QXRQb2ludChpbnQgeCwg
aW50IHkpCkBAIC0yOTMsNyArMjkzLDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6
cmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIoKQogdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxl
cjo6d2luTm90aWZpY2F0aW9uUmVjZWl2ZWQoUGxhdGZvcm1VSUVsZW1lbnQgZWxlbWVudCwgY29u
c3Qgc3RyaW5nJiBldmVudE5hbWUpCiB7CiAgICAgZm9yIChIYXNoTWFwPFBsYXRmb3JtVUlFbGVt
ZW50LCBKU09iamVjdFJlZj46Oml0ZXJhdG9yIGl0ID0gbV9ub3RpZmljYXRpb25MaXN0ZW5lcnMu
YmVnaW4oKTsgaXQgIT0gbV9ub3RpZmljYXRpb25MaXN0ZW5lcnMuZW5kKCk7ICsraXQpIHsKLSAg
ICAgICAgQ09NUHRyPElTZXJ2aWNlUHJvdmlkZXI+IHRoaXNTZXJ2aWNlUHJvdmlkZXIoUXVlcnks
IGl0LT5maXJzdCk7CisgICAgICAgIENPTVB0cjxJU2VydmljZVByb3ZpZGVyPiB0aGlzU2Vydmlj
ZVByb3ZpZGVyKFF1ZXJ5LCBpdC0+a2V5KTsKICAgICAgICAgaWYgKCF0aGlzU2VydmljZVByb3Zp
ZGVyKQogICAgICAgICAgICAgY29udGludWU7CiAKQEAgLTMxNiw3ICszMTYsNyBAQCB2b2lkIEFj
Y2Vzc2liaWxpdHlDb250cm9sbGVyOjp3aW5Ob3RpZmljYXRpb25SZWNlaXZlZChQbGF0Zm9ybVVJ
RWxlbWVudCBlbGVtZW50LAogCiAgICAgICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBqc05v
dGlmaWNhdGlvbihBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoZXZlbnROYW1l
LmNfc3RyKCkpKTsKICAgICAgICAgSlNWYWx1ZVJlZiBhcmd1bWVudCA9IEpTVmFsdWVNYWtlU3Ry
aW5nKGZyYW1lLT5nbG9iYWxDb250ZXh0KCksIGpzTm90aWZpY2F0aW9uLmdldCgpKTsKLSAgICAg
ICAgSlNPYmplY3RDYWxsQXNGdW5jdGlvbihmcmFtZS0+Z2xvYmFsQ29udGV4dCgpLCBpdC0+c2Vj
b25kLCBOVUxMLCAxLCAmYXJndW1lbnQsIE5VTEwpOworICAgICAgICBKU09iamVjdENhbGxBc0Z1
bmN0aW9uKGZyYW1lLT5nbG9iYWxDb250ZXh0KCksIGl0LT52YWx1ZSwgMCwgMSwgJmFyZ3VtZW50
LCAwKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9S
ZXNvdXJjZUxvYWREZWxlZ2F0ZS5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vUmVzb3Vy
Y2VMb2FkRGVsZWdhdGUuY3BwCmluZGV4IDkwYjlhZTBmY2MzZjYxN2Y0ZmY2NzU1NjJkYTI5NmVl
NWUyYmJjMzMuLjY4NTk3ODBmMzkyZjE4ZTMwNjYxYjA0OTI3YjRjY2NiZjNjNDcxYTIgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9SZXNvdXJjZUxvYWREZWxlZ2F0ZS5jcHAK
KysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1Jlc291cmNlTG9hZERlbGVnYXRlLmNwcApA
QCAtNjYsNyArNjYsNyBAQCB3c3RyaW5nIFJlc291cmNlTG9hZERlbGVnYXRlOjpkZXNjcmlwdGlv
blN1aXRhYmxlRm9yVGVzdFJlc3VsdCh1bnNpZ25lZCBsb25nIGlkZQogICAgIGlmIChpdCA9PSBt
X3VybE1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuIEwiPHVua25vd24+IjsKIAotICAgIHJldHVy
biB1cmxTdWl0YWJsZUZvclRlc3RSZXN1bHQoaXQtPnNlY29uZCk7CisgICAgcmV0dXJuIHVybFN1
aXRhYmxlRm9yVGVzdFJlc3VsdChpdC0+dmFsdWUpOwogfQogCiB3c3RyaW5nIFJlc291cmNlTG9h
ZERlbGVnYXRlOjpkZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChJV2ViVVJMUmVxdWVz
dCogcmVxdWVzdCkKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9UZXN0UnVu
bmVyV2luLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9UZXN0UnVubmVyV2luLmNwcApp
bmRleCBhMmMxNWUzMGRjMWUwNjBiZjU4NTM1YWRiNzRiODRiOTA3ODhlNGMxLi45Njg2MDI2MmVl
YWQwOGZmYzg5ZjkwOWM5Mzk3NDg1OTQ5MzQzYTc5IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS93aW4vVGVzdFJ1bm5lcldpbi5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUv
d2luL1Rlc3RSdW5uZXJXaW4uY3BwCkBAIC0xMjQ2LDggKzEyNDYsOCBAQCB1bnNpZ25lZCB3b3Js
ZElERm9yV29ybGQoSVdlYlNjcmlwdFdvcmxkKiB3b3JsZCkKIHsKICAgICBXb3JsZE1hcDo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gd29ybGRNYXAoKS5lbmQoKTsKICAgICBmb3IgKFdvcmxkTWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IHdvcmxkTWFwKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7
Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kID09IHdvcmxkKQotICAgICAgICAgICAgcmV0dXJuIGl0
LT5maXJzdDsKKyAgICAgICAgaWYgKGl0LT52YWx1ZSA9PSB3b3JsZCkKKyAgICAgICAgICAgIHJl
dHVybiBpdC0+a2V5OwogICAgIH0KIAogICAgIHJldHVybiAwOwpAQCAtMTI3MSw3ICsxMjcxLDcg
QEAgdm9pZCBUZXN0UnVubmVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCh1bnNpZ25l
ZCB3b3JsZElELCBKU09iamVjdFJlZiBnbG8KICAgICAgICAgaWYgKEZBSUxFRChXZWJLaXRDcmVh
dGVJbnN0YW5jZShfX3V1aWRvZihXZWJTY3JpcHRXb3JsZCksIDAsIF9fdXVpZG9mKHdvcmxkKSwg
cmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZ3b3JsZCkpKSkKICAgICAgICAgICAgIHJldHVybjsK
ICAgICB9IGVsc2UgewotICAgICAgICBDT01QdHI8SVdlYlNjcmlwdFdvcmxkPiYgd29ybGRTbG90
ID0gd29ybGRNYXAoKS5hZGQod29ybGRJRCwgMCkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAg
Q09NUHRyPElXZWJTY3JpcHRXb3JsZD4mIHdvcmxkU2xvdCA9IHdvcmxkTWFwKCkuYWRkKHdvcmxk
SUQsIDApLml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgaWYgKCF3b3JsZFNsb3QgJiYgRkFJTEVE
KFdlYktpdENyZWF0ZUluc3RhbmNlKF9fdXVpZG9mKFdlYlNjcmlwdFdvcmxkKSwgMCwgX191dWlk
b2Yod29ybGRTbG90KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZ3b3JsZFNsb3QpKSkpCiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIHdvcmxkID0gd29ybGRTbG90OwpkaWZmIC0tZ2l0
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL0RPTVdpbmRvd0V4dGVuc2lvbkJh
c2ljX0J1bmRsZS5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvRE9NV2lu
ZG93RXh0ZW5zaW9uQmFzaWNfQnVuZGxlLmNwcAppbmRleCA5OGJmYWIzNWFmNDZjZjQ5YzYyYmNj
OWIwYTg1OTQ1N2Y0OGNjMWMxLi41YjEyOTZmNDdkMTlkMjhiOWRlN2ZjZThkMTMxYWE0MDU0NzZi
ZGQxIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvRE9NV2lu
ZG93RXh0ZW5zaW9uQmFzaWNfQnVuZGxlLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdDIvRE9NV2luZG93RXh0ZW5zaW9uQmFzaWNfQnVuZGxlLmNwcApAQCAtMTcxLDgg
KzE3MSw4IEBAIHZvaWQgRE9NV2luZG93RXh0ZW5zaW9uQmFzaWM6OndpbGxEZXN0cm95UGFnZShX
S0J1bmRsZVJlZiwgV0tCdW5kbGVQYWdlUmVmKQogICAgIEhhc2hNYXA8V0tCdW5kbGVET01XaW5k
b3dFeHRlbnNpb25SZWYsIGludD46Oml0ZXJhdG9yIGl0ID0gbV9leHRlbnNpb25Ub1JlY29yZE1h
cC5iZWdpbigpOwogICAgIEhhc2hNYXA8V0tCdW5kbGVET01XaW5kb3dFeHRlbnNpb25SZWYsIGlu
dD46Oml0ZXJhdG9yIGVuZCA9IG1fZXh0ZW5zaW9uVG9SZWNvcmRNYXAuZW5kKCk7CiAgICAgZm9y
ICg7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICB1cGRhdGVFeHRlbnNpb25TdGF0ZVJlY29y
ZChpdC0+Zmlyc3QsIFJlbW92ZWQpOwotICAgICAgICBXS1JlbGVhc2UoaXQtPmZpcnN0KTsKKyAg
ICAgICAgdXBkYXRlRXh0ZW5zaW9uU3RhdGVSZWNvcmQoaXQtPmtleSwgUmVtb3ZlZCk7CisgICAg
ICAgIFdLUmVsZWFzZShpdC0+a2V5KTsKICAgICB9CiAKICAgICBtX2V4dGVuc2lvblRvUmVjb3Jk
TWFwLmNsZWFyKCk7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dDIvRE9NV2luZG93RXh0ZW5zaW9uTm9DYWNoZV9CdW5kbGUuY3BwIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXQyL0RPTVdpbmRvd0V4dGVuc2lvbk5vQ2FjaGVfQnVuZGxlLmNwcApp
bmRleCA4ZjZjZDdiMzczNWI1YWUyNzlkMGFkYjc3MTg1YzVkMjgwNzExY2FlLi40MTFlMTE1ZWE0
NGZiZTQ4NzBlN2YxZjMxZDkwNWU4NTc3ZjA3ZTIyIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdDIvRE9NV2luZG93RXh0ZW5zaW9uTm9DYWNoZV9CdW5kbGUuY3Bw
CisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9ET01XaW5kb3dFeHRlbnNp
b25Ob0NhY2hlX0J1bmRsZS5jcHAKQEAgLTE3OCw4ICsxNzgsOCBAQCB2b2lkIERPTVdpbmRvd0V4
dGVuc2lvbk5vQ2FjaGU6OndpbGxEZXN0cm95UGFnZShXS0J1bmRsZVJlZiwgV0tCdW5kbGVQYWdl
UmVmKQogICAgIEhhc2hNYXA8V0tCdW5kbGVET01XaW5kb3dFeHRlbnNpb25SZWYsIGludD46Oml0
ZXJhdG9yIGl0ID0gbV9leHRlbnNpb25Ub1JlY29yZE1hcC5iZWdpbigpOwogICAgIEhhc2hNYXA8
V0tCdW5kbGVET01XaW5kb3dFeHRlbnNpb25SZWYsIGludD46Oml0ZXJhdG9yIGVuZCA9IG1fZXh0
ZW5zaW9uVG9SZWNvcmRNYXAuZW5kKCk7CiAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgewot
ICAgICAgICB1cGRhdGVFeHRlbnNpb25TdGF0ZVJlY29yZChpdC0+Zmlyc3QsIFJlbW92ZWQpOwot
ICAgICAgICBXS1JlbGVhc2UoaXQtPmZpcnN0KTsKKyAgICAgICAgdXBkYXRlRXh0ZW5zaW9uU3Rh
dGVSZWNvcmQoaXQtPmtleSwgUmVtb3ZlZCk7CisgICAgICAgIFdLUmVsZWFzZShpdC0+a2V5KTsK
ICAgICB9CiAKICAgICBtX2V4dGVuc2lvblRvUmVjb3JkTWFwLmNsZWFyKCk7CmRpZmYgLS1naXQg
YS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwIGIv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcAppbmRl
eCBiOTRlNWQ0NzYzYTExOGM0ZWQ2ZDg1MmQ0MTc4NDJhMDVlMTRiNDRkLi5mODQyOTc4NDFmZjc0
MjE0ZGJhYWEyZDJmMTlkY2Q3MmU0YTcwNTk0IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHAKQEAgLTQ1NSw4ICs0NTUsOCBA
QCB1bnNpZ25lZCBUZXN0UnVubmVyOjp3b3JsZElERm9yV29ybGQoV0tCdW5kbGVTY3JpcHRXb3Js
ZFJlZiB3b3JsZCkKIHsKICAgICBXb3JsZE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gd29ybGRN
YXAoKS5lbmQoKTsKICAgICBmb3IgKFdvcmxkTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHdvcmxk
TWFwKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25k
ID09IHdvcmxkKQotICAgICAgICAgICAgcmV0dXJuIGl0LT5maXJzdDsKKyAgICAgICAgaWYgKGl0
LT52YWx1ZSA9PSB3b3JsZCkKKyAgICAgICAgICAgIHJldHVybiBpdC0+a2V5OwogICAgIH0KIAog
ICAgIHJldHVybiAwOwpAQCAtNDcwLDcgKzQ3MCw3IEBAIHZvaWQgVGVzdFJ1bm5lcjo6ZXZhbHVh
dGVTY3JpcHRJbklzb2xhdGVkV29ybGQoSlNDb250ZXh0UmVmIGNvbnRleHQsIHVuc2lnbmVkIHdv
CiAgICAgaWYgKCF3b3JsZElEKQogICAgICAgICB3b3JsZC5hZG9wdChXS0J1bmRsZVNjcmlwdFdv
cmxkQ3JlYXRlV29ybGQoKSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLQnVu
ZGxlU2NyaXB0V29ybGRSZWY+JiB3b3JsZFNsb3QgPSB3b3JsZE1hcCgpLmFkZCh3b3JsZElELCAw
KS5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICBXS1JldGFpblB0cjxXS0J1bmRsZVNjcmlwdFdv
cmxkUmVmPiYgd29ybGRTbG90ID0gd29ybGRNYXAoKS5hZGQod29ybGRJRCwgMCkuaXRlcmF0b3It
PnZhbHVlOwogICAgICAgICBpZiAoIXdvcmxkU2xvdCkKICAgICAgICAgICAgIHdvcmxkU2xvdC5h
ZG9wdChXS0J1bmRsZVNjcmlwdFdvcmxkQ3JlYXRlV29ybGQoKSk7CiAgICAgICAgIHdvcmxkID0g
d29ybGRTbG90Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>164222</attachid>
            <date>2012-09-14 14:09:41 -0700</date>
            <delta_ts>2012-09-20 12:18:37 -0700</delta_ts>
            <desc>For EWS consumption</desc>
            <filename>bug-82784-20120914180910.patch</filename>
            <type>text/plain</type>
            <size>717173</size>
            <attacher name="Caio Marcelo de Oliveira Filho">cmarcelo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI4NjQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
NGU3MmI1NTMxYTZjZjlhNjZiNGZhY2QzNzc3NWQwNzc3YmMzMTU2Li5mMzI2NDRjNjBlMGZkZDJl
NzY4YjA2OGU3MmM4ZGYzOGMzYWQxYjhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMjAgQEAKKzIwMTItMDktMTQgIENhaW8gTWFyY2VsbyBkZSBPbGl2ZWlyYSBGaWxobyAg
PGNhaW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KKworICAgICAgICBSZW5hbWUgZmlyc3Qvc2Vj
b25kIHRvIGtleS92YWx1ZSBpbiBIYXNoTWFwIGl0ZXJhdG9ycworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI3ODQKKworICAgICAgICBSZXZpZXdlZCBi
eSBFcmljIFNlaWRlbC4KKworICAgICAgICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0Lmg6CisgICAg
ICAgIChKU0M6OkpTQ2FsbGJhY2tPYmplY3REYXRhOjpKU1ByaXZhdGVQcm9wZXJ0eU1hcDo6Z2V0
UHJpdmF0ZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNDYWxsYmFja09iamVjdERhdGE6OkpT
UHJpdmF0ZVByb3BlcnR5TWFwOjpzZXRQcml2YXRlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpK
U0NhbGxiYWNrT2JqZWN0RGF0YTo6SlNQcml2YXRlUHJvcGVydHlNYXA6OnZpc2l0Q2hpbGRyZW4p
OgorICAgICAgICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmg6CisgICAgICAgIChK
U0M6Ojo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBBUEkvSlNDbGFz
c1JlZi5jcHA6CisgICAgICAgIChPcGFxdWVKU0NsYXNzOjp+T3BhcXVlSlNDbGFzcyk6CisgICAg
ICAgIChPcGFxdWVKU0NsYXNzQ29udGV4dERhdGE6Ok9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YSk6
CisgICAgICAgIChPcGFxdWVKU0NsYXNzOjpjb250ZXh0RGF0YSk6CisgICAgICAgICogYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkdW1wKToKKyAgICAg
ICAgKEpTQzo6RXZhbENvZGVDYWNoZTo6dmlzaXRBZ2dyZWdhdGUpOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6Om5hbWVGb3JSZWdpc3Rlcik6CisgICAgICAgICogYnl0ZWNvZGUvSnVtcFRhYmxl
Lmg6CisgICAgICAgIChKU0M6OlN0cmluZ0p1bXBUYWJsZTo6b2Zmc2V0Rm9yVmFsdWUpOgorICAg
ICAgICAoSlNDOjpTdHJpbmdKdW1wVGFibGU6OmN0aUZvclZhbHVlKToKKyAgICAgICAgKiBieXRl
Y29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5jcHA6CisgICAgICAgIChKU0M6OkxhenlPcGVy
YW5kVmFsdWVQcm9maWxlUGFyc2VyOjpnZXRJZlByZXNlbnQpOgorICAgICAgICAqIGJ5dGVjb2Rl
L1NhbXBsaW5nVG9vbC5jcHA6CisgICAgICAgIChKU0M6OlNhbXBsaW5nVG9vbDo6ZHVtcCk6Cisg
ICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpT
Qzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmFkZFZhcik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2Vu
ZXJhdG9yOjphZGRHbG9iYWxWYXIpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6
YWRkQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6YWRkQ29uc3Rh
bnRWYWx1ZSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TG9hZCk6Cisg
ICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjphZGRTdHJpbmdDb25zdGFudCk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TGF6eU5ld0Z1bmN0aW9uKToKKyAgICAg
ICAgKiBieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcDoKKyAgICAgICAgKEpTQzo6UHJvcGVy
dHlMaXN0Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKiBkZWJ1Z2dlci9EZWJ1Z2dlci5j
cHA6CisgICAgICAgICogZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkFyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2U6OnJ1bik6Cisg
ICAgICAgIChKU0M6OkRGRzo6QXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZTo6b2JzZXJ2ZUJh
ZEFyZ3VtZW50c1VzZSk6CisgICAgICAgIChKU0M6OkRGRzo6QXJndW1lbnRzU2ltcGxpZmljYXRp
b25QaGFzZTo6b2JzZXJ2ZVByb3BlckFyZ3VtZW50c1VzZSk6CisgICAgICAgIChKU0M6OkRGRzo6
QXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZTo6aXNPS1RvT3B0aW1pemUpOgorICAgICAgICAo
SlNDOjpERkc6OkFyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2U6OnJlbW92ZUFyZ3VtZW50c1Jl
ZmVyZW5jaW5nUGhhbnRvbUNoaWxkKToKKyAgICAgICAgKiBkZmcvREZHQXNzZW1ibHlIZWxwZXJz
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBc3NlbWJseUhlbHBlcnM6OmRlY29kZWRDb2RlTWFw
Rm9yKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVDYWNoZS5oOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlQ2FjaGU6On5CeXRlQ29kZUNhY2hlKToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZUNhY2hlOjpnZXQpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmNlbGxDb25zdGFudCk6CisgICAg
ICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZVN0
YWNrRW50cnkpOgorICAgICAgICAqIGRmZy9ERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2Uu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZTo6cnVu
KToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2U6Om5vdGlj
ZVN0cnVjdHVyZUNoZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVDaGVja0hvaXN0
aW5nUGhhc2U6Om5vdGljZUNsb2JiZXIpOgorICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAg
ICAgIChKU0M6OkhlYXA6Om1hcmtQcm90ZWN0ZWRPYmplY3RzKToKKyAgICAgICAgKiBoZWFwL0hl
YXAuaDoKKyAgICAgICAgKEpTQzo6SGVhcDo6Zm9yRWFjaFByb3RlY3RlZENlbGwpOgorICAgICAg
ICAqIGhlYXAvSklUU3R1YlJvdXRpbmVTZXQuY3BwOgorICAgICAgICAoSlNDOjpKSVRTdHViUm91
dGluZVNldDo6bWFya1Nsb3cpOgorICAgICAgICAoSlNDOjpKSVRTdHViUm91dGluZVNldDo6ZGVs
ZXRlVW5tYXJrZWRKZXR0aXNvbmVkU3R1YlJvdXRpbmVzKToKKyAgICAgICAgKiBoZWFwL1Nsb3RW
aXNpdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmludGVybmFsQXBwZW5kKToK
KyAgICAgICAgKiBoZWFwL1dlYWsuaDoKKyAgICAgICAgKEpTQzo6d2Vha1JlbW92ZSk6CisgICAg
ICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGUpOgor
ICAgICAgICAqIGppdC9KSVRTdHVicy5jcHA6CisgICAgICAgIChKU0M6OkpJVFRodW5rczo6Y3Rp
U3R1Yik6CisgICAgICAgICogcGFyc2VyL1BhcnNlci5jcHA6CisgICAgICAgIChKU0M6Ojo6cGFy
c2VTdHJpY3RPYmplY3RMaXRlcmFsKToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlLmNwcDoK
KyAgICAgICAgKEpTQzo6ZnVuY3Rpb25OYW1lQ291bnRQYWlyQ29tcGFyYXRvcik6CisgICAgICAg
IChKU0M6OlByb2ZpbGU6OmRlYnVnUHJpbnREYXRhU2FtcGxlU3R5bGUpOgorICAgICAgICAqIHJ1
bnRpbWUvSWRlbnRpZmllci5jcHA6CisgICAgICAgIChKU0M6OklkZW50aWZpZXI6OmFkZCk6Cisg
ICAgICAgICogcnVudGltZS9KU0FjdGl2YXRpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0FjdGl2
YXRpb246OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6OkpTQWN0
aXZhdGlvbjo6c3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRlcyk6CisgICAgICAgICogcnVudGlt
ZS9KU0FycmF5LmNwcDoKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c2V0TGVuZ3RoKToKKyAgICAg
ICAgKEpTQzo6SlNBcnJheTo6c29ydCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmNvbXBhY3RG
b3JTb3J0aW5nKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6ZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVh
ZHlFeGlzdHMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6ZGVmaW5lT3duSW5kZXhlZFByb3BlcnR5KToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdl
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVu
Z3RoV2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjaGVja0luZGV4
aW5nQ29uc2lzdGVuY3kpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKToKKyAgICAgICAgKiBydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3BwOgor
ICAgICAgICAoSlNDOjpKU1N5bWJvbFRhYmxlT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5
TmFtZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oOgorICAgICAg
ICAoSlNDOjpzeW1ib2xUYWJsZUdldCk6CisgICAgICAgIChKU0M6OnN5bWJvbFRhYmxlUHV0KToK
KyAgICAgICAgKEpTQzo6c3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRlcyk6CisgICAgICAgICog
cnVudGltZS9SZWdFeHBDYWNoZS5jcHA6CisgICAgICAgIChKU0M6OlJlZ0V4cENhY2hlOjppbnZh
bGlkYXRlQ29kZSk6CisgICAgICAgICogcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwSW5saW5l
TWV0aG9kcy5oOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpwdXRFbnRyeSk6
CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OnB1dERpcmVjdCk6CisgICAgICAg
IChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIHJ1
bnRpbWUvV2Vha0dDTWFwLmg6CisgICAgICAgIChKU0M6OldlYWtHQ01hcDo6Y2xlYXIpOgorICAg
ICAgICAoSlNDOjpXZWFrR0NNYXA6OnNldCk6CisgICAgICAgICogdG9vbHMvUHJvZmlsZVRyZWVO
b2RlLmg6CisgICAgICAgIChKU0M6OlByb2ZpbGVUcmVlTm9kZTo6c2FtcGxlQ2hpbGQpOgorICAg
ICAgICAoSlNDOjpQcm9maWxlVHJlZU5vZGU6OmNoaWxkQ291bnQpOgorICAgICAgICAoSlNDOjpQ
cm9maWxlVHJlZU5vZGU6OmR1bXBJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OlByb2ZpbGVUcmVl
Tm9kZTo6Y29tcGFyZUVudHJpZXMpOgorCiAyMDEyLTA5LTE0ICBUb3IgQXJuZSBWZXN0YsO4ICA8
dG9yLmFybmUudmVzdGJvQG5va2lhLmNvbT4KIAogICAgICAgICBbUXRdIE1ha2UgZm9yY2Vfc3Rh
dGljX2xpYnNfYXNfc2hhcmVkIHdvcmsgb24gTWFjIE9TCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDA0YmY2ZmQ1MzVhZTk0ZmUx
ODg1NjBkNDc2ZDA4OTZjY2RhOTdjMzAuLmE0OWNiNDc4MzIwY2ZmYTg5ZWU2NzVhZWMzZjU2ODc3
MTQ4MGNhNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
VEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzEgQEAKKzIwMTItMDktMTQgIENhaW8gTWFyY2VsbyBk
ZSBPbGl2ZWlyYSBGaWxobyAgPGNhaW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KKworICAgICAg
ICBSZW5hbWUgZmlyc3Qvc2Vjb25kIHRvIGtleS92YWx1ZSBpbiBIYXNoTWFwIGl0ZXJhdG9ycwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI3ODQKKwor
ICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KKworICAgICAgICBDdXJyZW50bHkgSGFz
aE1hcCBpdGVyYXRvcnMgZm9sbG93IHRoZSBzYW1lIGludGVyZmFjZSBpbiBzdGQ6Om1hcDogZ2l2
ZW4gYW4KKyAgICAgICAgaXRlcmF0b3IgaXQsIHdlIHVzZSBpdC0+Zmlyc3QgdG8gYWNjZXNzIHRo
ZSBrZXkgYW5kIGl0LT5zZWNvbmQgdG8gYWNjZXNzIHRoZQorICAgICAgICB2YWx1ZS4gVGhpcyBw
YXRjaCBjaGFuZ2VzIHRoZXNlIGFjY2Vzc2VzIHRvIGl0LT5rZXkgYW5kIGl0LT52YWx1ZSwgaW1w
cm92aW5nIHRoZQorICAgICAgICByZWFkYWJpbGl0eSBhdCBjYWxsIHNpdGVzLgorCisgICAgICAg
IE9uZSBwb3RlbnRpYWwgZG93bnNpZGUgb2YgdGhpcyBjaGFuZ2Ugd291bGQgYmUgdGhlIGNvbmZ1
c2lvbiBiZXR3ZWVuIHN0ZDo6bWFwIGFuZAorICAgICAgICBIYXNoTWFwIGludGVyZmFjZXMuIEhv
d2V2ZXIsIHRoZXkgYXJlIGFscmVhZHkgZGlmZmVyZW50IGluIG90aGVyIGFzcGVjdHMgYW5kIHRo
ZQorICAgICAgICB1c2FnZSBvZiBzdGQ6Om1hcCBpcyBtb3JlIGFuIGV4Y2VwdGlvbiB0aGFuIGEg
cnVsZSBpbiBXZWJLaXQgY29kZSwgc28gd2UgY29uc2lkZXIKKyAgICAgICAgdGhlIGNvbmZ1c2lv
biB3aWxsIGJlIGxlc3MgbGlrZWx5IHRvIGhhcHBlbi4KKworICAgICAgICAqIHd0Zi9IYXNoQ291
bnRlZFNldC5oOgorICAgICAgICAoV1RGOjo6OmFkZCk6CisgICAgICAgIChXVEY6Ojo6cmVtb3Zl
KToKKyAgICAgICAgKFdURjo6Y29weVRvVmVjdG9yKToKKyAgICAgICAgKiB3dGYvSGFzaEl0ZXJh
dG9ycy5oOgorICAgICAgICAoV1RGOjpIYXNoVGFibGVDb25zdEtleXNJdGVyYXRvcjo6Z2V0KToK
KyAgICAgICAgKFdURjo6SGFzaFRhYmxlQ29uc3RWYWx1ZXNJdGVyYXRvcjo6Z2V0KToKKyAgICAg
ICAgKFdURjo6SGFzaFRhYmxlS2V5c0l0ZXJhdG9yOjpnZXQpOgorICAgICAgICAoV1RGOjpIYXNo
VGFibGVWYWx1ZXNJdGVyYXRvcjo6Z2V0KToKKyAgICAgICAgKiB3dGYvSGFzaE1hcC5oOgorICAg
ICAgICAoV1RGOjpLZXlWYWx1ZVBhaXJLZXlFeHRyYWN0b3I6OmV4dHJhY3QpOgorICAgICAgICAo
V1RGOjpIYXNoTWFwVmFsdWVUcmFpdHM6OmlzRW1wdHlWYWx1ZSk6CisgICAgICAgIChXVEY6Okhh
c2hNYXBUcmFuc2xhdG9yOjp0cmFuc2xhdGUpOgorICAgICAgICAoV1RGOjpIYXNoTWFwVHJhbnNs
YXRvckFkYXB0ZXI6OnRyYW5zbGF0ZSk6CisgICAgICAgIChXVEY6Ojo6c2V0KToKKyAgICAgICAg
KFdURjo6OjpnZXQpOgorICAgICAgICAoV1RGOjo6OnRha2UpOgorICAgICAgICAoV1RGOjpvcGVy
YXRvcj09KToKKyAgICAgICAgKFdURjo6ZGVsZXRlQWxsVmFsdWVzKToKKyAgICAgICAgKFdURjo6
ZGVsZXRlQWxsS2V5cyk6CisgICAgICAgIFJlbW92ZWQgZGVsZXRlQWxsUGFpckZpcnN0cygpIGFu
ZCBkZWxldGVBbGxQYWlyU2Vjb25kcygpIHNpbmNlIHRoZXkgYXJlIG5vdyB1bnVzZWQuCisKKyAg
ICAgICAgKiB3dGYvSGFzaFRhYmxlLmg6CisgICAgICAgIChXVEY6Omhhc2hUYWJsZVN3YXApOgor
ICAgICAgICAoV1RGOjo6OmNoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUpOgorICAgICAg
ICAqIHd0Zi9IYXNoVHJhaXRzLmg6CisgICAgICAgIChXVEY6OktleVZhbHVlUGFpcjo6S2V5VmFs
dWVQYWlyKToKKyAgICAgICAgKEtleVZhbHVlUGFpcik6CisgICAgICAgIChXVEY6OktleVZhbHVl
UGFpckhhc2hUcmFpdHM6OmNvbnN0cnVjdERlbGV0ZWRWYWx1ZSk6CisgICAgICAgIChXVEY6Oktl
eVZhbHVlUGFpckhhc2hUcmFpdHM6OmlzRGVsZXRlZFZhbHVlKToKKyAgICAgICAgKiB3dGYvTWVt
b3J5SW5zdHJ1bWVudGF0aW9uLmg6CisgICAgICAgIChXVEY6Ok1lbW9yeUluc3RydW1lbnRhdGlv
bjo6YWRkSW5zdHJ1bWVudGVkTWFwRW50cmllcyk6CisgICAgICAgIChXVEY6Ok1lbW9yeUluc3Ry
dW1lbnRhdGlvbjo6YWRkSW5zdHJ1bWVudGVkTWFwVmFsdWVzKToKKyAgICAgICAgKiB3dGYvTWV0
YUFsbG9jYXRvci5jcHA6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmFkZEZyZWVTcGFj
ZSk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmluY3JlbWVudFBhZ2VPY2N1cGFuY3kp
OgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjpkZWNyZW1lbnRQYWdlT2NjdXBhbmN5KToK
KyAgICAgICAgKiB3dGYvUmVmQ291bnRlZExlYWtDb3VudGVyLmNwcDoKKyAgICAgICAgKFdURjo6
UmVmQ291bnRlZExlYWtDb3VudGVyOjp+UmVmQ291bnRlZExlYWtDb3VudGVyKToKKyAgICAgICAg
KiB3dGYvUmVmUHRySGFzaE1hcC5oOgorICAgICAgICAoV1RGOjo6OnNldCk6CisgICAgICAgIChX
VEY6Ojo6Z2V0KToKKyAgICAgICAgKFdURjo6OjppbmxpbmVHZXQpOgorICAgICAgICAoV1RGOjo6
OnRha2UpOgorICAgICAgICAqIHd0Zi9TcGVjdHJ1bS5oOgorICAgICAgICAoV1RGOjpTcGVjdHJ1
bTo6YWRkKToKKyAgICAgICAgKFdURjo6U3BlY3RydW06OmdldCk6CisgICAgICAgIChXVEY6OlNw
ZWN0cnVtOjpidWlsZExpc3QpOgorICAgICAgICAqIHd0Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHA6
CisgICAgICAgIChXVEY6OmlkZW50aWZpZXJCeVB0aHJlYWRIYW5kbGUpOgorCiAyMDEyLTA5LTE0
ICBUb3IgQXJuZSBWZXN0YsO4ICA8dG9yLmFybmUudmVzdGJvQG5va2lhLmNvbT4KIAogICAgICAg
ICBbUXRdIE1ha2UgZm9yY2Vfc3RhdGljX2xpYnNfYXNfc2hhcmVkIHdvcmsgb24gTWFjIE9TCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKaW5kZXggOWU4OGY4YzhlNDY0Mjk0YWY1OTNmZGQ4MjBiNTRhNDMyYTI4NzI5Yy4uZmQ5
NzA5NDc4NTA0MjY1ODIzMDI0M2I1NzczNTI3ZGMxOGJlNWRhMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDg3MyBAQAorMjAxMi0wOS0xNCAgQ2FpbyBNYXJjZWxvIGRlIE9saXZlaXJhIEZpbGhvICA8
Y2Fpby5vbGl2ZWlyYUBvcGVuYm9zc2Eub3JnPgorCisgICAgICAgIFJlbmFtZSBmaXJzdC9zZWNv
bmQgdG8ga2V5L3ZhbHVlIGluIEhhc2hNYXAgaXRlcmF0b3JzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Mjc4NAorCisgICAgICAgIFJldmlld2VkIGJ5
IEVyaWMgU2VpZGVsLgorCisgICAgICAgICogTW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlv
bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvbjo6V2F0Y2hlcnM6OmZpbmQpOgor
ICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb246OldhdGNoZXJzOjpyZW1vdmUpOgorICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OklEQkRhdGFiYXNlOjpvYmplY3RTdG9yZU5hbWVzKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkRh
dGFiYXNlQmFja2VuZEltcGw6Om1ldGFkYXRhKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRmFjdG9y
eUJhY2tlbmRJbXBsOjpkZWxldGVEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJGYWN0
b3J5QmFja2VuZEltcGw6Om9wZW5CYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURC
RmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9J
REJPYmplY3RTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6aW5k
ZXhOYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6cHV0KToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjppbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJPYmplY3RTdG9yZTo6ZGVsZXRlSW5kZXgpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6bWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6bWFrZUlu
ZGV4V3JpdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
OjpkZWxldGVJbnRlcm5hbCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNh
Y3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246Om9iamVjdFN0b3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpvYmplY3RTdG9yZURlbGV0ZWQp
OgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246Om9uQWJvcnQpOgorICAgICAgICAo
V2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmRpc3BhdGNoRXZlbnQpOgorICAgICAgICAqIE1vZHVs
ZXMvbWVkaWFzdHJlYW0vTWVkaWFDb25zdHJhaW50c0ltcGwuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFDb25zdHJhaW50c0ltcGw6OmdldE1hbmRhdG9yeUNvbnN0cmFpbnROYW1lcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnN0cmFpbnRzSW1wbDo6Z2V0TWFuZGF0b3J5Q29uc3Ry
YWludFZhbHVlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0Fic3RyYWN0RGF0YWJh
c2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6cGVyZm9ybU9wZW5B
bmRWZXJpZnkpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2Vy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6aW50ZXJydXB0QWxsRGF0
YWJhc2VzRm9yQ29udGV4dCk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9PcmlnaW5V
c2FnZVJlY29yZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpPcmlnaW5Vc2FnZVJlY29yZDo6ZGlz
a1VzYWdlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQ29v
cmRpbmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25Db29yZGluYXRv
cjo6YWNxdWlyZUxvY2spOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25Db29yZGlu
YXRvcjo6cmVsZWFzZUxvY2spOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25Db29y
ZGluYXRvcjo6c2h1dGRvd24pOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvY2hyb21p
dW0vRGF0YWJhc2VUcmFja2VyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJh
c2VUcmFja2VyOjppbnRlcnJ1cHRBbGxEYXRhYmFzZXNGb3JDb250ZXh0KToKKyAgICAgICAgKiBN
b2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL1F1b3RhVHJhY2tlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpRdW90YVRyYWNrZXI6OmdldERhdGFiYXNlU2l6ZUFuZFNwYWNlQXZhaWxhYmxlVG9P
cmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6UXVvdGFUcmFja2VyOjp1cGRhdGVEYXRhYmFzZVNp
emUpOgorICAgICAgICAqIE1vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXREZWZsYXRlRnJhbWVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldEV4dGVuc2lvbkRlZmxhdGVGcmFtZTo6
cHJvY2Vzc1Jlc3BvbnNlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0
RXh0ZW5zaW9uRGlzcGF0Y2hlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRFeHRl
bnNpb25EaXNwYXRjaGVyOjphcHBlbmRBY2NlcHRlZEV4dGVuc2lvbik6CisgICAgICAgICogYWNj
ZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0
Q2FjaGU6On5BWE9iamVjdENhY2hlKToKKyAgICAgICAgKiBiaW5kaW5ncy9nb2JqZWN0L0RPTU9i
amVjdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmNsZWFyQnlG
cmFtZSk6CisgICAgICAgICogYmluZGluZ3MvanMvRE9NT2JqZWN0SGFzaFRhYmxlTWFwLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpET01PYmplY3RIYXNoVGFibGVNYXA6On5ET01PYmplY3RIYXNoVGFi
bGVNYXApOgorICAgICAgICAoV2ViQ29yZTo6RE9NT2JqZWN0SGFzaFRhYmxlTWFwOjpnZXQpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpjYWNoZURPTVN0cnVjdHVyZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01HbG9iYWxP
YmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNET01HbG9iYWxPYmplY3Q6OnZpc2l0Q2hp
bGRyZW4pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpnZXRET01Db25zdHJ1Y3Rvcik6CisgICAgICAgICogYmluZGluZ3MvanMv
UGFnZVNjcmlwdERlYnVnU2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VTY3JpcHRE
ZWJ1Z1NlcnZlcjo6YWRkTGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZVNjcmlwdERl
YnVnU2VydmVyOjpyZW1vdmVMaXN0ZW5lcik6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0
Q2FjaGVkRnJhbWVEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENhY2hlZEZyYW1l
RGF0YTo6U2NyaXB0Q2FjaGVkRnJhbWVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENh
Y2hlZEZyYW1lRGF0YTo6cmVzdG9yZSk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0Q29u
dHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjp+U2NyaXB0
Q29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpjbGVhcldp
bmRvd1NoZWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmF0dGFjaERl
YnVnZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OnVwZGF0ZURvY3Vt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmNyZWF0ZVJvb3RPYmpl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6Y29sbGVjdElzb2xhdGVk
Q29udGV4dHMpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6Y2xlYW51cFNj
cmlwdE9iamVjdHNGb3JQbHVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxl
cjo6Y2xlYXJTY3JpcHRPYmplY3RzKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDb250
cm9sbGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjp3aW5kb3dTaGVs
bCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpleGlzdGluZ1dpbmRvd1No
ZWxsKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0QnJlYWtwb2ludCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6cmVtb3ZlQnJlYWtwb2ludCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6aGFzQnJlYWtwb2ludCk6CisgICAgICAgICog
YmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNsb25lU2VyaWFsaXplcjo6Y2hlY2tGb3JEdXBsaWNhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
Q2xvbmVTZXJpYWxpemVyOjpkdW1wSWZUZXJtaW5hbCk6CisgICAgICAgIChXZWJDb3JlOjpDbG9u
ZVNlcmlhbGl6ZXI6OndyaXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JWOC5wbToKKyAgICAgICAgKEdlbmVyYXRlSW1wbGVtZW50YXRpb24pOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOEZsb2F0NjRBcnJheS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpWOEZsb2F0NjRBcnJheTo6R2V0UmF3VGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6VjhGbG9hdDY0QXJyYXk6OkdldFRlbXBsYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVjgvVjhUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlY4VGVzdEFjdGl2ZURPTU9iamVjdDo6R2V0UmF3VGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6VjhUZXN0QWN0aXZlRE9NT2JqZWN0OjpHZXRUZW1wbGF0ZSk6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlY4VGVzdEN1c3RvbU5hbWVkR2V0dGVyOjpHZXRSYXdUZW1wbGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpWOFRlc3RDdXN0b21OYW1lZEdldHRlcjo6R2V0VGVtcGxhdGUpOgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudENvbnN0cnVjdG9yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdEV2ZW50Q29uc3RydWN0b3I6OkdldFJhd1RlbXBs
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdEV2ZW50Q29uc3RydWN0b3I6OkdldFRlbXBs
YXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRUYXJn
ZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0RXZlbnRUYXJnZXQ6OkdldFJhd1RlbXBs
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdEV2ZW50VGFyZ2V0OjpHZXRUZW1wbGF0ZSk6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV4Y2VwdGlvbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RFeGNlcHRpb246OkdldFJhd1RlbXBsYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlY4VGVzdEV4Y2VwdGlvbjo6R2V0VGVtcGxhdGUpOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RJbnRlcmZhY2UuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6VjhUZXN0SW50ZXJmYWNlOjpHZXRSYXdUZW1wbGF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpWOFRlc3RJbnRlcmZhY2U6OkdldFRlbXBsYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVjgvVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpWOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjpHZXRSYXdUZW1wbGF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjpHZXRUZW1w
bGF0ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5hbWVkQ29u
c3RydWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6
R2V0UmF3VGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0TmFtZWRDb25zdHJ1Y3Rv
cjo6R2V0VGVtcGxhdGUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3ROb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdE5vZGU6OkdldFJhd1RlbXBsYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdE5vZGU6OkdldFRlbXBsYXRlKToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlY4VGVzdE9iajo6R2V0UmF3VGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0
T2JqOjpHZXRUZW1wbGF0ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpWOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OkdldFJhd1RlbXBsYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6
R2V0VGVtcGxhdGUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L0RPTVdyYXBwZXJXb3JsZC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpET01XcmFwcGVyV29ybGQ6OmRlYWxsb2NhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6RE9NV3JhcHBlcldvcmxkOjplbnN1cmVJc29sYXRlZFdvcmxkKToKKyAgICAg
ICAgKiBiaW5kaW5ncy92OC9OUFY4T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZyZWVW
OE5QT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Om5wQ3JlYXRlVjhTY3JpcHRPYmplY3QpOgor
ICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U2NyaXB0Q29udHJvbGxlcjo6Y2xlYXJTY3JpcHRPYmplY3RzKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OnJlc2V0SXNvbGF0ZWRXb3JsZHMpOgorICAgICAgICAo
V2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6ZW5zdXJlSXNvbGF0ZWRXb3JsZENvbnRleHQpOgor
ICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6ZXhpc3RpbmdXaW5kb3dTaGVsbElu
dGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5J
c29sYXRlZFdvcmxkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OnNldElz
b2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250
cm9sbGVyOjpjbGVhbnVwU2NyaXB0T2JqZWN0c0ZvclBsdWdpbik6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JpcHRDb250cm9sbGVyOjpjb2xsZWN0SXNvbGF0ZWRDb250ZXh0cyk6CisgICAgICAgICog
YmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKiBiaW5kaW5n
cy92OC9WOERPTU1hcC5oOgorICAgICAgICAoV2ViQ29yZTo6V2Vha1JlZmVyZW5jZU1hcDo6cmVt
b3ZlSWZQcmVzZW50KToKKyAgICAgICAgKFdlYkNvcmU6OldlYWtSZWZlcmVuY2VNYXA6OnZpc2l0
KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOFBlckNvbnRleHREYXRhLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlY4UGVyQ29udGV4dERhdGE6OmRpc3Bvc2UpOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L25wcnVudGltZS5jcHA6CisgICAgICAgICogYnJpZGdlL0lkZW50aWZpZXJSZXAuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SWRlbnRpZmllclJlcDo6Z2V0KToKKyAgICAgICAgKiBicmlkZ2Uv
TlBfanNvYmplY3QuY3BwOgorICAgICAgICAoT2JqZWN0TWFwOjphZGQpOgorICAgICAgICAoT2Jq
ZWN0TWFwOjpyZW1vdmUpOgorICAgICAgICAqIGJyaWRnZS9qbmkvanNjL0phdmFDbGFzc0pTQy5j
cHA6CisgICAgICAgIChKYXZhQ2xhc3M6On5KYXZhQ2xhc3MpOgorICAgICAgICAqIGJyaWRnZS9y
dW50aW1lX3Jvb3QuY3BwOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Um9vdE9iamVjdDo6aW52
YWxpZGF0ZSk6CisgICAgICAgICogY3NzL0NTU0NhbnZhc1ZhbHVlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0NhbnZhc1ZhbHVlOjpjYW52YXNDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU0NhbnZhc1ZhbHVlOjpjYW52YXNSZXNpemVkKToKKyAgICAgICAgKiBjc3MvQ1NTQ29tcHV0
ZWRTdHlsZURlY2xhcmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvdW50ZXJUb0NTU1Zh
bHVlKToKKyAgICAgICAgKiBjc3MvQ1NTQ3Jvc3NmYWRlVmFsdWUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTQ3Jvc3NmYWRlVmFsdWU6OmNyb3NzZmFkZUNoYW5nZWQpOgorICAgICAgICAqIGNz
cy9DU1NGb250RmFjZVNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZVNv
dXJjZTo6Z2V0Rm9udERhdGEpOgorICAgICAgICAqIGNzcy9DU1NGb250U2VsZWN0b3IuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9yOjphZGRGb250RmFjZVJ1bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9yOjpnZXRGb250RGF0YSk6CisgICAgICAgICog
Y3NzL0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTSW1h
Z2VHZW5lcmF0b3JWYWx1ZTo6YWRkQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ltYWdl
R2VuZXJhdG9yVmFsdWU6OnJlbW92ZUNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NJbWFn
ZUdlbmVyYXRvclZhbHVlOjpnZXRJbWFnZSk6CisgICAgICAgICogY3NzL0NTU1NlZ21lbnRlZEZv
bnRGYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1NlZ21lbnRlZEZvbnRGYWNlOjpnZXRG
b250RGF0YSk6CisgICAgICAgICogY3NzL0NTU1NlbGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1NlbGVjdG9yOjpwYXJzZVBzZXVkb1R5cGUpOgorICAgICAgICAqIGNzcy9DU1NWYWx1
ZVBvb2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVmFsdWVQb29sOjpjcmVhdGVDb2xvclZh
bHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ZhbHVlUG9vbDo6Y3JlYXRlRm9udEZhbWlseVZh
bHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ZhbHVlUG9vbDo6Y3JlYXRlRm9udEZhY2VWYWx1
ZSk6CisgICAgICAgICogY3NzL1Byb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OmNsb25lQW5k
Q2FjaGVGb3JDU1NPTSk6CisgICAgICAgICogY3NzL1N0eWxlQnVpbGRlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpBcHBseVByb3BlcnR5Q291bnRlcjo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUNvdW50ZXI6OmFwcGx5VmFsdWUpOgorICAgICAg
ICAqIGNzcy9TdHlsZVJlc29sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6OmNvbGxlY3RGZWF0dXJlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpy
dWxlU2V0Rm9yU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwZW5k
QXV0aG9yU3R5bGVzaGVldHMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3dl
ZXBNYXRjaGVkUHJvcGVydGllc0NhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdCk6CisgICAgICAgICogY3NzL1N0eWxlU2hl
ZXRDb250ZW50cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0Q29udGVudHM6OnBh
cnNlckFkZE5hbWVzcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0Q29udGVudHM6
OmRldGVybWluZU5hbWVzcGFjZSk6CisgICAgICAgICogZG9tL0NoZWNrZWRSYWRpb0J1dHRvbnMu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hlY2tlZFJhZGlvQnV0dG9uczo6YWRkQnV0dG9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkNoZWNrZWRSYWRpb0J1dHRvbnM6OnJlbW92ZUJ1dHRvbik6Cisg
ICAgICAgICogZG9tL0NoaWxkTGlzdE11dGF0aW9uU2NvcGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXI6OmNo
aWxkQWRkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0
YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXI6OndpbGxSZW1vdmVDaGlsZCk6CisgICAgICAgIChXZWJD
b3JlOjpDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlcjo6
aW5jcmVtZW50U2NvcGluZ0xldmVsKToKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdE11dGF0
aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVyOjpkZWNyZW1lbnRTY29waW5nTGV2
ZWwpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1
bWVudDo6cGFnZUdyb3VwVXNlclNoZWV0cyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6
d2luZG93TmFtZWRJdGVtcyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6ZG9jdW1lbnRO
YW1lZEl0ZW1zKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpnZXRDU1NDYW52YXNFbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpjYWNoZWRJbW11dGFibGVBdHRyaWJ1
dGVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpnZXRMb2NhbGl6ZXIpOgorICAg
ICAgICAqIGRvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjptYXJrZXJDb250YWluaW5nUG9pbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW5kZXJlZFJlY3RzRm9y
TWFya2Vycyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJl
bW92ZU1hcmtlcnMpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
OjpyZXBhaW50TWFya2Vycyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRy
b2xsZXI6OmludmFsaWRhdGVSZW5kZXJlZFJlY3RzRm9yTWFya2Vyc0luUmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnNob3dNYXJrZXJzKToKKyAgICAg
ICAgKiBkb20vRG9jdW1lbnRPcmRlcmVkTWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50T3JkZXJlZE1hcDo6cmVtb3ZlKToKKyAgICAgICAgKiBkb20vRWxlbWVudEF0dHJpYnV0ZURh
dGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZW5zdXJlQXR0ckxpc3RGb3JFbGVtZW50KToKKyAg
ICAgICAgKiBkb20vRXZlbnREaXNwYXRjaGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
UmVsYXRlZFRhcmdldEFkanVzdGVyOjpmaW5kUmVsYXRlZFRhcmdldCk6CisgICAgICAgICogZG9t
L0lkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJZFRhcmdl
dE9ic2VydmVyUmVnaXN0cnk6OmFkZE9ic2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklkVGFy
Z2V0T2JzZXJ2ZXJSZWdpc3RyeTo6cmVtb3ZlT2JzZXJ2ZXIpOgorICAgICAgICAqIGRvbS9NdXRh
dGlvbk9ic2VydmVySW50ZXJlc3RHcm91cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNdXRhdGlv
bk9ic2VydmVySW50ZXJlc3RHcm91cDo6aXNPbGRWYWx1ZVJlcXVlc3RlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpNdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cDo6ZW5xdWV1ZU11dGF0aW9uUmVj
b3JkKToKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpk
dW1wU3RhdGlzdGljcyk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpjbGVhclJhcmVEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6Ok5vZGVMaXN0c05vZGVEYXRhOjppbnZhbGlkYXRlQ2FjaGVzKToK
KyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmNvbGxlY3RNYXRjaGluZ09ic2VydmVyc0Zvck11dGF0
aW9uKToKKyAgICAgICAgKiBkb20vTm9kZVJhcmVEYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpO
b2RlTGlzdHNOb2RlRGF0YTo6YWRkQ2FjaGVXaXRoQXRvbWljTmFtZSk6CisgICAgICAgIChXZWJD
b3JlOjpOb2RlTGlzdHNOb2RlRGF0YTo6YWRkQ2FjaGVXaXRoTmFtZSk6CisgICAgICAgIChXZWJD
b3JlOjpOb2RlTGlzdHNOb2RlRGF0YTo6YWRkQ2FjaGVXaXRoUXVhbGlmaWVkTmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpOb2RlTGlzdHNOb2RlRGF0YTo6YWRvcHRUcmVlU2NvcGUpOgorICAgICAg
ICAqIGRvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UHJv
Y2Vzc2luZ0luc3RydWN0aW9uOjpjaGVja1N0eWxlU2hlZXQpOgorICAgICAgICAqIGRvbS9TY3Jp
cHRFeGVjdXRpb25Db250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQ6OmNhblN1c3BlbmRBY3RpdmVET01PYmplY3RzKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnN1c3BlbmRBY3RpdmVET01PYmplY3RzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnJlc3VtZUFjdGl2ZURPTU9iamVj
dHMpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6c3RvcEFjdGl2
ZURPTU9iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6
YWRqdXN0TWluaW11bVRpbWVySW50ZXJ2YWwpOgorICAgICAgICAqIGRvbS9TZWxlY3RvclF1ZXJ5
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yUXVlcnlDYWNoZTo6YWRkKToKKyAgICAg
ICAgKiBkb20vU3BhY2VTcGxpdFN0cmluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTcGFjZVNw
bGl0U3RyaW5nRGF0YTo6Y3JlYXRlKToKKyAgICAgICAgKiBkb20vU3R5bGVkRWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRFbGVtZW50Ojp1cGRhdGVBdHRyaWJ1dGVTdHlsZSk6
CisgICAgICAgICogZWRpdGluZy9tYWMvQWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyLm1tOgor
ICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyOjpBbGVybmF0aXZl
VGV4dENvbnRleHRDb250cm9sbGVyOjphbHRlcm5hdGl2ZXNGb3JDb250ZXh0KToKKyAgICAgICAg
KiBodG1sL0Zvcm1Db250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNhdmVkRm9ybVN0
YXRlOjpzZXJpYWxpemVUbyk6CisgICAgICAgIChXZWJDb3JlOjpTYXZlZEZvcm1TdGF0ZTo6YXBw
ZW5kQ29udHJvbFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNhdmVkRm9ybVN0YXRlOjp0YWtl
Q29udHJvbFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNhdmVkRm9ybVN0YXRlOjpnZXRSZWZl
cmVuY2VkRmlsZVBhdGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1LZXlHZW5lcmF0b3I6OmZv
cm1LZXkpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUNvbnRyb2xsZXI6OmNyZWF0ZVNhdmVkRm9y
bVN0YXRlTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1Db250cm9sbGVyOjpmb3JtRWxlbWVu
dHNTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtQ29udHJvbGxlcjo6dGFrZVN0YXRlRm9y
Rm9ybUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUNvbnRyb2xsZXI6OmdldFJlZmVy
ZW5jZWRGaWxlUGF0aHMpOgorICAgICAgICAqIGh0bWwvSFRNTENvbGxlY3Rpb24uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTENvbGxlY3Rpb25DYWNoZUJhc2U6OmFwcGVuZCk6CisgICAgICAg
ICogaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTEZyYW1lYnVmZmVyOjpnZXRBdHRhY2htZW50KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
RnJhbWVidWZmZXI6OnJlbW92ZUF0dGFjaG1lbnRGcm9tQm91bmRGcmFtZWJ1ZmZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTEZyYW1lYnVmZmVyOjpjaGVja1N0YXR1cyk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTEZyYW1lYnVmZmVyOjpkZWxldGVPYmplY3RJbXBsKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMRnJhbWVidWZmZXI6OmluaXRpYWxpemVBdHRhY2htZW50cyk6CisgICAgICAg
ICogaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHk6CisgICAgICAgICogaW5zcGVj
dG9yL0RPTVBhdGNoU3VwcG9ydC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01QYXRjaFN1cHBv
cnQ6OmRpZmYpOgorICAgICAgICAoV2ViQ29yZTo6RE9NUGF0Y2hTdXBwb3J0Ojppbm5lclBhdGNo
Q2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6RE9NUGF0Y2hTdXBwb3J0OjpyZW1vdmVDaGls
ZEFuZE1vdmVUb05ldyk6CisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0TWFuYWdl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmplY3RlZFNjcmlwdE1hbmFnZXI6OmluamVjdGVk
U2NyaXB0Rm9ySWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjpp
bmplY3RlZFNjcmlwdElkRm9yKToKKyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0TWFu
YWdlcjo6ZGlzY2FyZEluamVjdGVkU2NyaXB0c0Zvcik6CisgICAgICAgIChXZWJDb3JlOjpJbmpl
Y3RlZFNjcmlwdE1hbmFnZXI6OnJlbGVhc2VPYmplY3RHcm91cCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbmplY3RlZFNjcmlwdE1hbmFnZXI6OmluamVjdGVkU2NyaXB0Rm9yKToKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0
b3JQcm9maWxlOjpjb21taXRTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvclBy
b2ZpbGU6OmNvbW1pdFNlbGVjdG9yVGltZSk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvclBy
b2ZpbGU6OnRvSW5zcGVjdG9yT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlVwZGF0ZVJlZ2lv
bkxheW91dFRhc2s6Om9uVGltZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdl
bnQ6OmZvcmNlUHNldWRvU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdl
bnQ6OmFzSW5zcGVjdG9yU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JD
U1NBZ2VudDo6YXNzZXJ0U3R5bGVTaGVldEZvcklkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckNTU0FnZW50OjpkaWRSZW1vdmVET01Ob2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckNTU0FnZW50OjpkaWRNb2RpZnlET01BdHRyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckNTU0FnZW50OjpyZXNldFBzZXVkb1N0YXRlcyk6CisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnNvbGVBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb25z
b2xlQWdlbnQ6OnN0b3BUaW1pbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29uc29s
ZUFnZW50Ojpjb3VudCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50Ojpub2RlRm9ySWQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OnBlcmZvcm1TZWFyY2gpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmdldFNlYXJjaFJlc3VsdHMpOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OndpbGxTZW5kWE1MSHR0cFJlcXVlc3Qp
OgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpjbGVhckZyb250ZW5kKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6ZW5hYmxlKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6c3RvcmFnZUlkKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6Z2V0RE9NU3RvcmFnZVJl
c291cmNlRm9ySWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50
OjpkaWRVc2VET01TdG9yYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTVN0b3Jh
Z2VBZ2VudDo6bWVtb3J5Qnl0ZXNVc2VkQnlTdG9yYWdlQ2FjaGUpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckRhdGFiYXNlQWdlbnQ6OmVuYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JE
YXRhYmFzZUFnZW50OjpkYXRhYmFzZUlkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRh
dGFiYXNlQWdlbnQ6OmZpbmRCeUZpbGVOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckRhdGFiYXNlQWdlbnQ6OmRhdGFiYXNlRm9ySWQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVn
Z2VyQWdlbnQ6OnNldEJyZWFrcG9pbnRCeVVybCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpyZW1vdmVCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnJlc29sdmVCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNlYXJjaEluQ29udGVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpnZXRTY3JpcHRTb3VyY2UpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkUGFyc2VTb3VyY2UpOgorICAg
ICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yTWVtb3J5QWdlbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2Vu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjYWNoZWRSZXNvdXJjZXNGb3JGcmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6OmRpZENsZWFyV2luZG93T2JqZWN0SW5X
b3JsZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6OmZyYW1lRGV0YWNo
ZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmdldFByb2ZpbGVIZWFkZXJz
KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUHJvZmls
ZXJBZ2VudDo6Z2V0UHJvZmlsZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclJlc291
cmNlQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRPYmplY3RGb3JIZWFkZXJzKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlc291cmNlQWdlbnQ6OndpbGxTZW5kUmVxdWVz
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXNvdXJjZUFnZW50Ojpkb2N1bWVudFRo
cmVhZGFibGVMb2FkZXJTdGFydGVkTG9hZGluZ0ZvckNsaWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JSZXNvdXJjZUFnZW50Ojp3aWxsTG9hZFhIUik6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpyZXBsYXlYSFIpOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JTdGF0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdGF0ZTo6
Z2V0Qm9vbGVhbik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdGF0ZTo6Z2V0U3RyaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0YXRlOjpnZXRMb25nKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvclN0YXRlOjpnZXREb3VibGUpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yU3RhdGU6OmdldE9iamVjdCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
clN0eWxlU2hlZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGU6OnN0eWxl
V2l0aFByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6
aW5zcGVjdG9yU3R5bGVGb3JJZCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclZhbHVl
cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPYmplY3RCYXNlOjpnZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT2JqZWN0QmFzZTo6d3JpdGVKU09OKToKKyAgICAgICAg
KiBpbnNwZWN0b3IvSW5zcGVjdG9yV29ya2VyQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yV29ya2VyQWdlbnQ6OndvcmtlckNvbnRleHRUZXJtaW5hdGVkKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvcldvcmtlckFnZW50OjpjcmVhdGVXb3JrZXJGcm9udGVuZENoYW5u
ZWxzRm9yRXhpc3RpbmdXb3JrZXJzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvcldvcmtl
ckFnZW50OjpkZXN0cm95V29ya2VyRnJvbnRlbmRDaGFubmVscyk6CisgICAgICAgICogaW5zcGVj
dG9yL01lbW9yeUluc3RydW1lbnRhdGlvbkltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVt
b3J5SW5zdHJ1bWVudGF0aW9uSW1wbDo6Y291bnRPYmplY3RTaXplKToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6TWVt
b3J5SW5zdHJ1bWVudGF0aW9uSW1wbDo6dG90YWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
bW9yeUluc3RydW1lbnRhdGlvbkltcGw6OnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvTmV0d29ya1Jlc291cmNlc0RhdGEuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TmV0d29ya1Jlc291cmNlc0RhdGE6OnNldFhIUlJlcGxheURhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6TmV0d29ya1Jlc291cmNlc0RhdGE6OnJlbW92ZUNhY2hlZFJlc291cmNlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok5ldHdvcmtSZXNvdXJjZXNEYXRhOjpjbGVhcik6CisgICAgICAgICogbG9h
ZGVyL0Nyb3NzT3JpZ2luQWNjZXNzQ29udHJvbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc1Np
bXBsZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVB
Y2Nlc3NDb250cm9sUHJlZmxpZ2h0UmVxdWVzdCk6CisgICAgICAgICogbG9hZGVyL0Nyb3NzT3Jp
Z2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3Jvc3NPcmln
aW5QcmVmbGlnaHRSZXN1bHRDYWNoZUl0ZW06OmFsbG93c0Nyb3NzT3JpZ2luSGVhZGVycyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlOjpjYW5Ta2lw
UHJlZmxpZ2h0KToKKyAgICAgICAgKiBsb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI6OmdldFN1YnJlc291cmNlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6c3Vic3RpdHV0ZVJlc291cmNlRGVsaXZlcnlUaW1lckZp
cmVkKToKKyAgICAgICAgKiBsb2FkZXIvTWFpblJlc291cmNlTG9hZGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Ok1haW5SZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAg
ICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2VydmVQZW5kaW5nUmVxdWVzdHMpOgorICAgICAgICAq
IGxvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGxpY2F0aW9uQ2FjaGU6OnJlbW92ZVJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGxpY2F0aW9uQ2FjaGU6OmNsZWFyU3RvcmFnZUlEKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxp
Y2F0aW9uQ2FjaGU6OmR1bXApOgorICAgICAgICAqIGxvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlv
bkNhY2hlR3JvdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUdyb3Vw
OjpkaWRGaW5pc2hMb2FkaW5nTWFuaWZlc3QpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRp
b25DYWNoZUdyb3VwOjpzdGFydExvYWRpbmdFbnRyeSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBs
aWNhdGlvbkNhY2hlR3JvdXA6OmFkZEVudHJ5KToKKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUv
QXBwbGljYXRpb25DYWNoZUhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25D
YWNoZUhvc3Q6OmZpbGxSZXNvdXJjZUxpc3QpOgorICAgICAgICAqIGxvYWRlci9hcHBjYWNoZS9B
cHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRp
b25DYWNoZVJlc291cmNlOjplc3RpbWF0ZWRTaXplSW5TdG9yYWdlKToKKyAgICAgICAgKiBsb2Fk
ZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmZpbmRPckNyZWF0ZUNhY2hlR3JvdXApOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmNhY2hlR3JvdXBGb3JVUkwp
OgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmZhbGxiYWNrQ2Fj
aGVHcm91cEZvclVSTCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFn
ZTo6c3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmVt
cHR5KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZUNv
cHlPZkNhY2hlKToKKyAgICAgICAgKiBsb2FkZXIvYXJjaGl2ZS9BcmNoaXZlRmFjdG9yeS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpBcmNoaXZlRmFjdG9yeTo6cmVnaXN0ZXJLbm93bkFyY2hpdmVN
SU1FVHlwZXMpOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSYXdSZXNvdXJjZTo6Y2FuUmV1c2UpOgorICAgICAg
ICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
YWNoZWRSZXNvdXJjZTo6c3dpdGNoQ2xpZW50c1RvUmV2YWxpZGF0ZWRSZXNvdXJjZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZTo6dXBkYXRlUmVzcG9uc2VBZnRlclJldmFsaWRh
dGlvbik6CisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2Vy
Lmg6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlcjo6Q2FjaGVk
UmVzb3VyY2VDbGllbnRXYWxrZXIpOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNv
dXJjZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZUxvYWRlcjo6
fkNhY2hlZFJlc291cmNlTG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNl
TG9hZGVyOjpyZXF1ZXN0UmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3Vy
Y2VMb2FkZXI6OnNldEF1dG9Mb2FkSW1hZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJl
c291cmNlTG9hZGVyOjpyZW1vdmVDYWNoZWRSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpD
YWNoZWRSZXNvdXJjZUxvYWRlcjo6Z2FyYmFnZUNvbGxlY3REb2N1bWVudFJlc291cmNlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVwb3J0TWVtb3J5VXNhZ2Up
OgorICAgICAgICAqIGxvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpNZW1vcnlDYWNoZTo6cmVtb3ZlUmVzb3VyY2VzV2l0aE9yaWdpbik6CisgICAgICAgIChX
ZWJDb3JlOjpNZW1vcnlDYWNoZTo6Z2V0T3JpZ2luc1dpdGhDYWNoZSk6CisgICAgICAgIChXZWJD
b3JlOjpNZW1vcnlDYWNoZTo6Z2V0U3RhdGlzdGljcyk6CisgICAgICAgIChXZWJDb3JlOjpNZW1v
cnlDYWNoZTo6cmVwb3J0TWVtb3J5VXNhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVtb3J5Q2Fj
aGU6OnNldERpc2FibGVkKToKKyAgICAgICAgKiBsb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SWNvbkRhdGFiYXNlOjpyZW1vdmVBbGxJY29ucyk6CisgICAg
ICAgIChXZWJDb3JlOjpJY29uRGF0YWJhc2U6Omljb25SZWNvcmRDb3VudFdpdGhEYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6Okljb25EYXRhYmFzZTo6cGVyZm9ybVBlbmRpbmdSZXRhaW5BbmRSZWxl
YXNlT3BlcmF0aW9ucyk6CisgICAgICAgICogcGFnZS9ET01XaW5kb3cuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RE9NV2luZG93OjpkaXNwYXRjaEFsbFBlbmRpbmdCZWZvcmVVbmxvYWRFdmVudHMp
OgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93OjpkaXNwYXRjaEFsbFBlbmRpbmdVbmxvYWRF
dmVudHMpOgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlVG91Y2hFdmVudCk6CisgICAgICAgICogcGFnZS9GcmFt
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6aW5qZWN0VXNlclNjcmlwdHMpOgorICAg
ICAgICAqIHBhZ2UvUGFnZUdyb3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VHcm91cDo6
cGFnZUdyb3VwKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VHcm91cDo6Y2xvc2VMb2NhbFN0b3Jh
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUdyb3VwOjpjbGVhckxvY2FsU3RvcmFnZUZvckFs
bE9yaWdpbnMpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUdyb3VwOjpjbGVhckxvY2FsU3RvcmFn
ZUZvck9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpQYWdlR3JvdXA6OnN5bmNMb2NhbFN0b3Jh
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUdyb3VwOjphZGRVc2VyU2NyaXB0VG9Xb3JsZCk6
CisgICAgICAgIChXZWJDb3JlOjpQYWdlR3JvdXA6OmFkZFVzZXJTdHlsZVNoZWV0VG9Xb3JsZCk6
CisgICAgICAgIChXZWJDb3JlOjpQYWdlR3JvdXA6OnJlbW92ZVVzZXJTY3JpcHRGcm9tV29ybGQp
OgorICAgICAgICAoV2ViQ29yZTo6UGFnZUdyb3VwOjpyZW1vdmVVc2VyU3R5bGVTaGVldEZyb21X
b3JsZCk6CisgICAgICAgICogcGFnZS9QYWdlU2VyaWFsaXplci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpQYWdlU2VyaWFsaXplcjo6dXJsRm9yQmxhbmtGcmFtZSk6CisgICAgICAgICogcGFnZS9T
ZWN1cml0eVBvbGljeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWN1cml0eVBvbGljeTo6YWRk
T3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkpOgorICAgICAgICAoV2ViQ29yZTo6U2VjdXJpdHlQ
b2xpY3k6OnJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KToKKyAgICAgICAgKiBwYWdl
L1NldHRpbmdzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldEdlbmVyaWNGb250RmFtaWx5TWFw
KToKKyAgICAgICAgKFdlYkNvcmU6OmdldEdlbmVyaWNGb250RmFtaWx5Rm9yU2NyaXB0KToKKyAg
ICAgICAgKiBwYWdlL1NwZWVjaElucHV0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNwZWVjaElu
cHV0OjpyZWdpc3Rlckxpc3RlbmVyKToKKyAgICAgICAgKiBwYWdlL1RvdWNoRGlzYW1iaWd1YXRp
b24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZmluZEdvb2RUb3VjaFRhcmdldHMpOgorICAgICAg
ICAqIHBhZ2UvV2luZG93RmVhdHVyZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2luZG93RmVh
dHVyZXM6OmJvb2xGZWF0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OldpbmRvd0ZlYXR1cmVzOjpm
bG9hdEZlYXR1cmUpOgorICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xs
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnVw
ZGF0ZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQ29udHJvbGxlclBy
aXZhdGU6OnN1c3BlbmRBbmltYXRpb25zRm9yRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnJlc3VtZUFuaW1hdGlvbnNGb3JEb2N1bWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6bnVtYmVyT2ZB
Y3RpdmVBbmltYXRpb25zKToKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmlt
YXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjpjbGVhclJl
bmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlVHJh
bnNpdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVL
ZXlmcmFtZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9u
OjphbmltYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlvbjo6Z2V0QW5p
bWF0ZWRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb246OnNldEFu
aW1hdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb246OnRpbWVUb05l
eHRTZXJ2aWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlvbjo6Z2V0QW5p
bWF0aW9uRm9yUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9u
OjpzdXNwZW5kQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRp
b246OnJlc3VtZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0
aW9uOjpvdmVycmlkZUltcGxpY2l0QW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpDb21w
b3NpdGVBbmltYXRpb246OnJlc3VtZU92ZXJyaWRkZW5JbXBsaWNpdEFuaW1hdGlvbnMpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjppc0FuaW1hdGluZ1Byb3BlcnR5KToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlvbjo6bnVtYmVyT2ZBY3RpdmVBbmlt
YXRpb25zKToKKyAgICAgICAgKiBwbGF0Zm9ybS9MYW5ndWFnZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpsYW5ndWFnZURpZENoYW5nZSk6CisgICAgICAgICogcGxhdGZvcm0vTUlNRVR5cGVSZWdp
c3RyeS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vSFJURkVsZXZhdGlvbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpnZXRDb25jYXRlbmF0ZWRJbXB1bHNlUmVzcG9uc2VzRm9yU3ViamVj
dCk6CisgICAgICAgICogcGxhdGZvcm0vYmxhY2tiZXJyeS9Db29raWVNYW5hZ2VyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb2tpZU1hbmFnZXI6OmdlbmVyYXRlSHRtbEZyYWdtZW50Rm9yQ29v
a2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVNYW5hZ2VyOjpyZW1vdmVBbGxDb29raWVz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ibGFja2JlcnJ5L0Nvb2tpZU1hcC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDb29raWVNYXA6OnJlbW92ZU9sZGVzdENvb2tpZSk6CisgICAgICAgIChXZWJD
b3JlOjpDb29raWVNYXA6OmdldEFsbENoaWxkQ29va2llcyk6CisgICAgICAgICogcGxhdGZvcm0v
Y2YvQmluYXJ5UHJvcGVydHlMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpbmFyeVByb3Bl
cnR5TGlzdFBsYW46OndyaXRlSW50ZWdlckFycmF5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJv
bWl1bS9zdXBwb3J0L1dlYkhUVFBMb2FkSW5mby5jcHA6CisgICAgICAgIChXZWJLaXQ6OmFkZEhl
YWRlcik6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJVUkxSZXF1ZXN0
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMUmVxdWVzdDo6dmlzaXRIVFRQSGVhZGVyRmll
bGRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlVSTFJlc3BvbnNl
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMUmVzcG9uc2U6OmFkZEhUVFBIZWFkZXJGaWVs
ZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFJlc3BvbnNlOjp2aXNpdEhUVFBIZWFkZXJGaWVs
ZHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5UmVmcmVzaE1vbml0b3JNYW5hZ2VyOjplbnN1
cmVNb25pdG9yRm9yQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlSZWZyZXNoTW9u
aXRvck1hbmFnZXI6OnVucmVnaXN0ZXJDbGllbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldENhY2hl
ZEZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRWZXJ0
aWNhbERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRDYWNoZWRGb250RGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnJlbGVhc2VGb250RGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlVHJlZU5vZGUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6R2x5cGhQYWdlVHJlZU5vZGU6OnRyZWVHbHlwaFBhZ2VDb3VudCk6CisgICAgICAgIChX
ZWJDb3JlOjpHbHlwaFBhZ2VUcmVlTm9kZTo6cGFnZUNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkdseXBoUGFnZVRyZWVOb2RlOjpwcnVuZVRyZWVDdXN0b21Gb250RGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpHbHlwaFBhZ2VUcmVlTm9kZTo6cHJ1bmVUcmVlRm9udERhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6R2x5cGhQYWdlVHJlZU5vZGU6OnBydW5lQ3VzdG9tRm9udERhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6R2x5cGhQYWdlVHJlZU5vZGU6OnBydW5lRm9udERhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6R2x5cGhQYWdlVHJlZU5vZGU6OnNob3dTdWJ0cmVlKToKKyAgICAgICAgKHNob3dH
bHlwaFBhZ2VUcmVlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5n
U3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRCYWNraW5nU3RvcmU6OnVwZGF0ZVRp
bGVCdWZmZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkQmFja2luZ1N0b3JlOjpyZXNpemVF
ZGdlVGlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRCYWNraW5nU3RvcmU6OnNldEtlZXBS
ZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vY2YvTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0YuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QVZGV3Jh
cHBlcjo6YXZmV3JhcHBlckZvckNhbGxiYWNrQ29udGV4dCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclRpbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyVGlsZXI6OmxheWVyVmlzaWJpbGl0eUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJUaWxlcjo6dXBsb2FkVGV4dHVyZXNJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clRpbGVyOjphZGRUaWxlSm9iKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXI6OmRlbGV0
ZVRleHR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXI6OnBydW5lVGV4dHVyZXMp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlcjo6YmluZENvbnRlbnRzVGV4dHVyZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9UZXh0dXJlQ2FjaGVDb21wb3Np
dGluZ1RocmVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlQ2FjaGVDb21wb3NpdGlu
Z1RocmVhZDo6dGV4dHVyZUZvclRpbGVkQ29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQ6OnRleHR1cmVGb3JDb2xvcik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXJDQTo6bW92ZU9yQ29weUFuaW1hdGlvbnMpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NMYXllckNBOjpwYXVzZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0xheWVyQ0E6OmxheWVyRGlkRGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0xheWVyQ0E6OnVwZGF0ZUdlb21ldHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXJDQTo6dXBkYXRlVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXJDQTo6dXBkYXRlQ2hpbGRyZW5UcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllckNBOjp1cGRhdGVNYXNrc1RvQm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXJDQTo6dXBkYXRlQ29udGVudHNWaXNpYmlsaXR5KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlQ29udGVudHNPcGFxdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NMYXllckNBOjp1cGRhdGVCYWNrZmFjZVZpc2liaWxpdHkpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjp1cGRhdGVGaWx0ZXJzKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6ZW5zdXJlU3RydWN0dXJhbExheWVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlTGF5ZXJEcmF3c0NvbnRlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjp1cGRhdGVDb250ZW50c0ltYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlQ29udGVudHNSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlTWFza0xheWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlTGF5ZXJBbmltYXRpb25zKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6c2V0QW5pbWF0aW9uT25MYXllcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnJlbW92ZUNBQW5pbWF0aW9uRnJvbUxh
eWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6cGF1c2VDQUFuaW1hdGlv
bk9uTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjpzdXNwZW5kQW5p
bWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnJlc3VtZUFuaW1h
dGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjpmaW5kT3JNYWtlQ2xv
bmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjpzZXRPcGFjaXR5SW50ZXJu
YWwpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjp1cGRhdGVPcGFjaXR5T25M
YXllcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1RpbGVDYWNoZS5tbToK
KyAgICAgICAgKFdlYkNvcmU6OlRpbGVDYWNoZTo6flRpbGVDYWNoZSk6CisgICAgICAgIChXZWJD
b3JlOjpUaWxlQ2FjaGU6OnNldE5lZWRzRGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpUaWxl
Q2FjaGU6OnNldFNjYWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVDYWNoZTo6c2V0QWNjZWxl
cmF0ZXNEcmF3aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVDYWNoZTo6c2V0VGlsZURlYnVn
Qm9yZGVyV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZUNhY2hlOjpzZXRUaWxlRGVidWdC
b3JkZXJDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpUaWxlQ2FjaGU6OnJldmFsaWRhdGVUaWxl
cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldp
bi5jcHA6CisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXI6OmFuaW1hdGlvblN0YXJ0ZWQpOgorICAg
ICAgICAocmVzdWJtaXRBbGxBbmltYXRpb25zKToKKyAgICAgICAgKFBsYXRmb3JtQ0FMYXllcjo6
YW5pbWF0aW9uRm9yS2V5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9G
b250Q2FjaGVDaHJvbWl1bVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMb29rdXBBbHROYW1l
KToKKyAgICAgICAgKFdlYkNvcmU6OmZvbnRDb250YWluc0NoYXJhY3Rlcik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFV0aWxzQ2hyb21pdW1XaW4uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Z2V0RGVyaXZlZEZvbnREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6VGlsZWRMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKToKKyAgICAgICAgKFdlYkNv
cmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJUcmVlSG9zdCk6CisgICAgICAgIChXZWJD
b3JlOjpUaWxlZExheWVyQ2hyb21pdW06OmludmFsaWRhdGVDb250ZW50UmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnNldFRleHR1cmVQcmlvcml0aWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6cmVzZXRVcGRhdGVTdGF0ZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1hZ2VUcmFja2VyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNDRGFtYWdlVHJhY2tlcjo6dHJhY2tEYW1hZ2VGcm9tTGVm
dG92ZXJSZWN0cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NE
aXJlY3RSZW5kZXJlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0RpcmVjdFJlbmRlcmVyOjpk
ZWNpZGVSZW5kZXJQYXNzQWxsb2NhdGlvbnNGb3JGcmFtZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRpbGluZ0RhdGEuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRpbGluZ0RhdGE6OnNldEJvdW5kcyk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJUcmVlSG9zdDo6fkNDTGF5ZXJUcmVlSG9zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0xheWVyVHJlZUhvc3Q6OnN0YXJ0UmF0ZUxpbWl0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0OjpzdG9wUmF0ZUxpbWl0ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6ZmluZFJlbmRlclBhc3NCeUlkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1Jlc291cmNlUHJvdmlkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NS
ZXNvdXJjZVByb3ZpZGVyOjppblVzZUJ5Q29uc3VtZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NS
ZXNvdXJjZVByb3ZpZGVyOjpkZWxldGVSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Jl
c291cmNlUHJvdmlkZXI6OmRlbGV0ZU93bmVkUmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDUmVzb3VyY2VQcm92aWRlcjo6cmVzb3VyY2VUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkND
UmVzb3VyY2VQcm92aWRlcjo6dXBsb2FkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVzb3VyY2VQ
cm92aWRlcjo6bG9ja0ZvclJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZXNvdXJjZVByb3Zp
ZGVyOjp1bmxvY2tGb3JSZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVzb3VyY2VQcm92aWRl
cjo6bG9ja0ZvcldyaXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVzb3VyY2VQcm92aWRlcjo6
dW5sb2NrRm9yV3JpdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZXNvdXJjZVByb3ZpZGVyOjpk
ZXN0cm95Q2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZXNvdXJjZVByb3ZpZGVyOjpnZXRD
aGlsZFRvUGFyZW50TWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVzb3VyY2VQcm92aWRlcjo6
cHJlcGFyZVNlbmRUb1BhcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Jlc291cmNlUHJvdmlk
ZXI6OnByZXBhcmVTZW5kVG9DaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Jlc291cmNlUHJv
dmlkZXI6OnJlY2VpdmVGcm9tQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZXNvdXJjZVBy
b3ZpZGVyOjpyZWNlaXZlRnJvbVBhcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Jlc291cmNl
UHJvdmlkZXI6OnRyYW5zZmVyUmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZXNvdXJj
ZVByb3ZpZGVyOjp0cmltTWFpbGJveERlcXVlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0N1c3RvbUZpbHRlckdsb2JhbENvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dDo6fkN1c3RvbUZpbHRlckdsb2JhbENvbnRleHQp
OgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dDo6Z2V0VmFsaWRh
dGVkUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0
OjpyZW1vdmVWYWxpZGF0ZWRQcm9ncmFtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0N1c3RvbUZpbHRlclByb2dyYW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9t
RmlsdGVyUHJvZ3JhbTo6bm90aWZ5Q2xpZW50cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFyZmJ1enovSGFyZkJ1enpTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldENhY2hl
ZEhhcmZidXp6RmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpyZWxlYXNlQ2FjaGVkSGFyZmJ1enpG
YWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ek5H
RmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6ek5HRmFjZTo6SGFyZkJ1enpOR0Zh
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpOR0ZhY2U6On5IYXJmQnV6ek5HRmFjZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhQ29yZVRleHQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OmdldENGU3RyaW5nQXR0cmli
dXRlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhTWFj
Lm1tOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OmNhblJlbmRlckNvbWJpbmlu
Z0NoYXJhY3RlclNlcXVlbmNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
RXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lv
bnMzRE9wZW5HTENvbW1vbjo6Z2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFOR0xFKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21t
b24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNvbXBpbGVTaGFk
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlcml2KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJJbmZvTG9nKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJTb3VyY2UpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW52Zy9FR0xEaXNwbGF5T3BlblZHLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkVHTERpc3BsYXlPcGVuVkc6On5FR0xEaXNwbGF5T3BlblZHKToK
KyAgICAgICAgKFdlYkNvcmU6OkVHTERpc3BsYXlPcGVuVkc6OmRlc3Ryb3lTdXJmYWNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVHTERpc3BsYXlPcGVuVkc6OmNvbnRleHRGb3JTdXJmYWNlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTERhdGE6OlNoYXJlZEdMRGF0YTo6Y3VycmVu
dFNoYXJlZEdMRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0xEYXRhOjpT
aGFyZWRHTERhdGE6On5TaGFyZWRHTERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6Z2V0U2hhZGVyUHJvZ3JhbSk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6Z2V0U2hhZGVyRm9yRmlsdGVy
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250UGxhdGZvcm1EYXRhLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZpeGVkU2l6ZUZvbnREYXRhOjpjcmVhdGUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGFPYmplY3RHdGs6OmZvckNsaXBib2FyZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL0d0a0Ry
YWdBbmREcm9wSGVscGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okd0a0RyYWdBbmREcm9wSGVs
cGVyOjpoYW5kbGVHZXREcmFnRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHdGtEcmFnQW5kRHJv
cEhlbHBlcjo6aGFuZGxlRHJhZ0xlYXZlKToKKyAgICAgICAgKFdlYkNvcmU6Okd0a0RyYWdBbmRE
cm9wSGVscGVyOjpoYW5kbGVEcmFnTW90aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Okd0a0RyYWdB
bmREcm9wSGVscGVyOjpoYW5kbGVEcmFnRGF0YVJlY2VpdmVkKToKKyAgICAgICAgKFdlYkNvcmU6
Okd0a0RyYWdBbmREcm9wSGVscGVyOjpoYW5kbGVEcmFnRHJvcCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3RrL1JlbmRlclRoZW1lR3RrMy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpndGtTdHlsZUNo
YW5nZWRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpnZXRTdHlsZUNvbnRleHQpOgorICAg
ICAgICAqIHBsYXRmb3JtL21hYy9TY3JvbGxiYXJUaGVtZU1hYy5tbToKKyAgICAgICAgKCtbV2Vi
U2Nyb2xsYmFyUHJlZnNPYnNlcnZlciBhcHBlYXJhbmNlUHJlZnNDaGFuZ2VkOl0pOgorICAgICAg
ICAqIHBsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbFN0b3JhZ2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q3JlZGVudGlhbFN0b3JhZ2U6OnNldCk6CisgICAgICAgIChXZWJDb3JlOjpDcmVkZW50
aWFsU3RvcmFnZTo6Z2V0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0hUVFBIZWFkZXJN
YXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRUUEhlYWRlck1hcDo6Y29weURhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRUUEhlYWRlck1hcDo6Z2V0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9u
ZXR3b3JrL01JTUVIZWFkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TUlNRUhlYWRlcjo6cGFy
c2VIZWFkZXIpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmNyZWF0ZSk6CisgICAgICAgICog
cGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OmFkZEhUVFBIZWFkZXJGaWVsZCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjphZGRIVFRQSGVhZGVyRmllbGRzKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvUmVzb3VyY2VSZXF1ZXN0QmxhY2tCZXJy
eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q6OnRhcmdldFR5cGVGcm9t
TWltZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Ojppbml0aWFsaXpl
UGxhdGZvcm1SZXF1ZXN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNl
SGFuZGxlQ0ZOZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bWFrZUZpbmFsUmVxdWVzdCk6Cisg
ICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZVJlcXVlc3RDRk5ldC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpzZXRIZWFkZXJGaWVsZHMpOgorICAgICAgICAqIHBsYXRmb3JtL25l
dHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjppbml0aWFsaXplSGFuZGxlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZVJlcXVlc3RNYWMubW06CisgICAgICAgIChXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3Q6OmRvVXBkYXRlUGxhdGZvcm1SZXF1ZXN0KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL3F0L1Jlc291cmNlUmVxdWVzdFF0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdDo6dG9OZXR3b3JrUmVxdWVzdCk6CisgICAgICAgICogcGxhdGZv
cm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpzZW5kUmVxdWVzdENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxl
OjpzZXRDbGllbnRDZXJ0aWZpY2F0ZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3Vw
L1Jlc291cmNlUmVxdWVzdFNvdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0Ojp1cGRhdGVTb3VwTWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3Q6OnRvU291cE1lc3NhZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9SZXNv
dXJjZVJlc3BvbnNlU291cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNl
Ojp0b1NvdXBNZXNzYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3dpbi9SZXNvdXJj
ZUhhbmRsZVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6c3RhcnQp
OgorICAgICAgICAqIHBsYXRmb3JtL3F0L1J1bkxvb3BRdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSdW5Mb29wOjpUaW1lckJhc2U6OnRpbWVyRmlyZWQpOgorICAgICAgICAqIHBsYXRmb3JtL3Rl
eHQvTG9jYWxlVG9TY3JpcHRNYXBwaW5nRGVmYXVsdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpz
Y3JpcHROYW1lVG9Db2RlKToKKyAgICAgICAgKFdlYkNvcmU6OmxvY2FsZVRvU2NyaXB0Q29kZUZv
ckZvbnRTZWxlY3Rpb24pOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVn
aXN0cnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cHJ1bmVCbGFja2xpc3RlZENvZGVjcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpkdW1wVGV4dEVuY29kaW5nTmFtZU1hcCk6CisgICAgICAgICogcGxh
dGZvcm0vdGV4dC90cmFuc2NvZGVyL0ZvbnRUcmFuc2NvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRUcmFuc2NvZGVyOjpjb252ZXJ0ZXJUeXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS90
ZXh0L3dpbi9UZXh0Q29kZWNXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGFuZ3VhZ2VNYW5h
Z2VyOjpMYW5ndWFnZU1hbmFnZXIpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0Q29kZVBhZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjV2luOjpyZWdpc3RlckV4dGVuZGVkRW5jb2RpbmdO
YW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNXaW46OnJlZ2lzdGVyRXh0ZW5kZWRD
b2RlY3MpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjV2luOjplbnVtZXJhdGVTdXBwb3J0
ZWRFbmNvZGluZ3MpOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9DbGlwYm9hcmRVdGlsaXRpZXNX
aW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0RGF0YU1hcEl0ZW0pOgorICAgICAgICAoV2Vi
Q29yZTo6Z2V0Q2xpcGJvYXJkRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRDbGlwYm9hcmRE
YXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vQ2xpcGJvYXJkV2luLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNsaXBib2FyZFdpbjo6dHlwZXMpOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9G
aWxlU3lzdGVtV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNhY2hlZFN0b3JhZ2VEaXJlY3Rv
cnkpOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9SdW5Mb29wV2luLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJ1bkxvb3A6OlRpbWVyQmFzZTo6dGltZXJGaXJlZCk6CisgICAgICAgICogcGxhdGZv
cm0vd2luL1dDRGF0YU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXQ0RhdGFPYmplY3Q6
OmNyZWF0ZUluc3RhbmNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW5jZS9NSU1FVHlwZVJlZ2lz
dHJ5V2luQ0UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TUlNRVR5cGVSZWdpc3RyeTo6Z2V0UHJl
ZmVycmVkRXh0ZW5zaW9uRm9yTUlNRVR5cGUpOgorICAgICAgICAqIHBsYXRmb3JtL3d4L0NvbnRl
eHRNZW51V3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnU6OmFwcGVuZEl0ZW0p
OgorICAgICAgICAqIHBsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luRGF0YWJhc2U6OnJlZnJlc2gpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0
YWJhc2U6Ok1JTUVUeXBlRm9yRXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRh
dGFiYXNlOjpyZW1vdmUpOgorICAgICAgICAqIHBsdWdpbnMvUGx1Z2luTWFpblRocmVhZFNjaGVk
dWxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyOjpz
Y2hlZHVsZUNhbGwpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luTWFpblRocmVhZFNjaGVkdWxl
cjo6ZGlzcGF0Y2hDYWxscyk6CisgICAgICAgICogcGx1Z2lucy9QbHVnaW5TdHJlYW0uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UGx1Z2luU3RyZWFtOjpzdGFydFN0cmVhbSk6CisgICAgICAgICog
cGx1Z2lucy9ibGFja2JlcnJ5L1BsdWdpbkRhdGFCbGFja0JlcnJ5LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpbkRhdGE6OmluaXRQbHVnaW5zKToKKyAgICAgICAgKiBwbHVnaW5zL3d4L1Bs
dWdpbkRhdGFXeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhOjppbml0UGx1Z2lu
cyk6CisgICAgICAgICogcmVuZGVyaW5nL0Zsb3dUaHJlYWRDb250cm9sbGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZsb3dUaHJlYWRDb250cm9sbGVyOjp1bnJlZ2lzdGVyTmFtZWRGbG93Q29u
dGVudE5vZGUpOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OklubGluZUZsb3dCb3g6OnJlcXVpcmVzSWRlb2dyYXBoaWNCYXNlbGluZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVGbG93Qm94OjphZGRUZXh0Qm94VmlzdWFsT3ZlcmZs
b3cpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCbG9jazo6Y2xlYXJGbG9hdHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJCbG9ja0xpbmVMYXlvdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2V0TG9naWNhbFdpZHRo
Rm9yVGV4dFJ1bik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlUXVhbGl0eUNvbnRyb2xsZXI6OmhpZ2hRdWFsaXR5
UmVwYWludFRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VRdWFsaXR5Q29udHJv
bGxlcjo6c2hvdWxkUGFpbnRBdExvd1F1YWxpdHkpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJDb3VudGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckNvdW50ZXI6OmRlc3Ryb3lD
b3VudGVyTm9kZXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQ291bnRlcjo6ZGVzdHJveUNv
dW50ZXJOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OnVwZGF0ZUNvdW50ZXJzKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckNvdW50ZXI6OnJlbmRlcmVyU3R5bGVDaGFuZ2VkKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJGbG93VGhyZWFkOjpzZXRSZWdpb25SYW5nZUZvckJveCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJGbG93VGhyZWFkOjpnZXRSZWdpb25SYW5nZUZvckJveCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwYWlu
dCk6CisgICAgICAgIChXZWJDb3JlOjpwZXJmb3JtT3ZlcmxhcFRlc3RzKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyRmlsdGVySW5mbzo6ZmlsdGVySW5mb0ZvclJlbmRlckxheWVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyRmlsdGVySW5mbzo6Y3JlYXRlRmlsdGVySW5mb0ZvclJlbmRl
ckxheWVySWZOZWVkZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJl
YWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTmFtZWRGbG93VGhyZWFkOjpkZXBlbmRz
T24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTmFtZWRGbG93VGhyZWFkOjpwdXNoRGVwZW5k
ZW5jaWVzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclJlZ2lvbjo6c2V0UmVuZGVyQm94UmVnaW9uSW5mbyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJSZWdpb246OnNldFJlZ2lvbk9iamVjdHNSZWdpb25TdHlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZWdpb246OnJlc3RvcmVSZWdpb25PYmplY3RzT3JpZ2lu
YWxTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZWdpb246OmNvbXB1dGVDaGlsZHJl
blN0eWxlSW5SZWdpb24pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpjYWNoZWRDb2xsYXBz
ZWRCb3JkZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpzeXN0ZW1Db2xvcik6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6c2Vs
ZWN0aW9uQm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OnNldFNlbGVjdGlv
bik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJXaWRnZXQ6OnJlc3VtZVdpZGdldEhpZXJhcmNoeVVwZGF0ZXMpOgorICAgICAg
ICAqIHJlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJvb3RJ
bmxpbmVCb3g6OmFzY2VudEFuZERlc2NlbnRGb3JCb3gpOgorICAgICAgICAqIHJlbmRlcmluZy9W
ZXJ0aWNhbFBvc2l0aW9uQ2FjaGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlZlcnRpY2FsUG9zaXRp
b25DYWNoZTo6Z2V0KToKKyAgICAgICAgKiByZW5kZXJpbmcvV3JhcFNoYXBlSW5mby5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpXcmFwU2hhcGVJbmZvOjplbnN1cmVXcmFwU2hhcGVJbmZvRm9yUmVu
ZGVyQmxvY2spOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdJbmxpbmVUZXh0OjpjaGFyYWN0ZXJTdGFy
dHNOZXdUZXh0Q2h1bmspOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6
OnByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdS
ZXNvdXJjZUdyYWRpZW50OjphcHBseVJlc291cmNlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdSZXNvdXJjZVBhdHRlcm46OmFwcGx5UmVzb3VyY2UpOgorICAgICAgICAqIHJlbmRlcmluZy9z
dmcvU1ZHUmVzb3VyY2VzQ2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVzb3VyY2Vz
Q2FjaGU6OnJlc291cmNlRGVzdHJveWVkKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1Jv
b3RJbmxpbmVCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6c3dhcEl0ZW1zSW5MYXlvdXRBdHRy
aWJ1dGVzKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1dGVz
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzOjpkdW1wKToK
KyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXI6OmJ1
aWxkQ2hhcmFjdGVyRGF0YU1hcCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0TGF5b3V0QXR0
cmlidXRlc0J1aWxkZXI6OmZpbGxDaGFyYWN0ZXJEYXRhTWFwKToKKyAgICAgICAgKiByZW5kZXJp
bmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4
dExheW91dEVuZ2luZTo6bGF5b3V0VGV4dE9uTGluZU9yUGF0aCk6CisgICAgICAgICogcmVuZGVy
aW5nL3N2Zy9TVkdUZXh0TWV0cmljc0J1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
VGV4dE1ldHJpY3NCdWlsZGVyOjptZWFzdXJlVGV4dFJlbmRlcmVyKToKKyAgICAgICAgKiBzdG9y
YWdlL1N0b3JhZ2VBcmVhU3luYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYVN5
bmM6OnN5bmNUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhU3luYzo6
cGVyZm9ybUltcG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYVN5bmM6OnN5bmMp
OgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZU1hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
dG9yYWdlTWFwOjprZXkpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU1hcDo6c2V0SXRlbSk6
CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNlSW1wbDo6bG9jYWxTdG9yYWdlTmFtZXNwYWNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpjb3B5KToKKyAgICAgICAgKFdl
YkNvcmU6OlN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpjbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dG9yYWdlTmFtZXNwYWNlSW1wbDo6Y2xlYXJBbGxPcmlnaW5zRm9yRGVsZXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6U3RvcmFnZU5hbWVzcGFjZUltcGw6OnN5bmMpOgorICAgICAgICAqIHN2Zy9T
VkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRG9jdW1lbnRF
eHRlbnNpb25zOjpyZW1vdmVBbmltYXRpb25FbGVtZW50RnJvbVRhcmdldCk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlbW92ZUFsbEFuaW1hdGlvbkVsZW1lbnRz
RnJvbVRhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdEb2N1bWVudEV4dGVuc2lvbnM6OmFk
ZFBlbmRpbmdSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdEb2N1bWVudEV4dGVuc2lv
bnM6OmlzRWxlbWVudFBlbmRpbmdSZXNvdXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRG9j
dW1lbnRFeHRlbnNpb25zOjpyZW1vdmVFbGVtZW50RnJvbVBlbmRpbmdSZXNvdXJjZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpzZXRPZkVsZW1lbnRzUmVmZXJl
bmNpbmdUYXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpy
ZW1vdmVBbGxUYXJnZXRSZWZlcmVuY2VzRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlbW92ZUFsbEVsZW1lbnRSZWZlcmVuY2VzRm9yVGFyZ2V0
KToKKyAgICAgICAgKiBzdmcvU1ZHRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdF
bGVtZW50Ojp+U1ZHRWxlbWVudCk6CisgICAgICAgICogc3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNv
bnRhaW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTTUlMVGltZUNvbnRhaW5lcjo6dXBkYXRl
QW5pbWF0aW9ucyk6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR0ltYWdlQ2FjaGUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2VDYWNoZTo6flNWR0ltYWdlQ2FjaGUpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHSW1hZ2VDYWNoZTo6cmVtb3ZlQ2xpZW50RnJvbUNhY2hlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0ltYWdlQ2FjaGU6OnJlcXVlc3RlZFNpemVBbmRTY2FsZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2VDYWNoZTo6aW1hZ2VDb250ZW50Q2hhbmdlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdJbWFnZUNhY2hlOjpyZWRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHSW1hZ2VDYWNoZTo6bG9va3VwT3JDcmVhdGVCaXRtYXBJbWFnZUZvclJlbmRlcmVyKToKKyAg
ICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmg6CisgICAgICAg
IChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjplZmZlY3RSZWZlcmVuY2VzKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmFkZEJ1aWx0aW5FZmZlY3RzKToKKyAgICAgICAg
KiBzdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5Lmg6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdBbmltYXRlZFByb3BlcnR5Ojp+U1ZHQW5pbWF0ZWRQcm9wZXJ0eSk6CisgICAgICAgICog
c3ZnL3Byb3BlcnRpZXMvU1ZHQXR0cmlidXRlVG9Qcm9wZXJ0eU1hcC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdBdHRyaWJ1dGVUb1Byb3BlcnR5TWFwOjphZGRQcm9wZXJ0aWVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0F0dHJpYnV0ZVRvUHJvcGVydHlNYXA6OnN5bmNocm9uaXplUHJvcGVy
dGllcyk6CisgICAgICAgICogd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OldvcmtlckNvbnRleHQ6Omhhc1BlbmRpbmdBY3Rpdml0eSk6CisgICAgICAgICogd29y
a2Vycy9Xb3JrZXJFdmVudFF1ZXVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckV2ZW50
UXVldWU6OmNsb3NlKToKKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OnNldFJlcXVlc3RIZWFkZXJJbnRlcm5hbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6Z2V0QWxsUmVzcG9uc2VIZWFkZXJzKToK
KyAgICAgICAgKiB4bWwvWFBhdGhGdW5jdGlvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WFBh
dGg6OmNyZWF0ZUZ1bmN0aW9uKToKKyAgICAgICAgKiB4bWwvWFBhdGhQYXJzZXIuY3BwOgorICAg
ICAgICAoaXNBeGlzTmFtZSk6CisgICAgICAgICogeG1sL1hTTFRQcm9jZXNzb3JMaWJ4c2x0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OnhzbHRQYXJhbUFycmF5RnJvbVBhcmFtZXRlck1hcCk6Cisg
ICAgICAgICogeG1sL1hTTFRQcm9jZXNzb3JRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYU0xU
UHJvY2Vzc29yOjp0cmFuc2Zvcm1Ub1N0cmluZyk6CisKIDIwMTItMDktMTQgIFJvYiBCdWlzICA8
cmJ1aXNAcmltLmNvbT4KIAogICAgICAgICBbQmxhY2tCZXJyeV0gVXNlIFN0cmluZ0J1aWxkZXIg
bW9yZSBpbiBCbGFja0JlcnJ5IFJTUyBjbGFzc2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2JsYWNrYmVycnkvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5nZUxv
ZwppbmRleCBhNmIxOWU5ODY3ODllMGY3NTg0YTIzZGY2NmY5ODdmMjQ3ZWQxZTE3Li40YTQyNjgz
NmU0MmNjNjMyZjZkZmYzMWE4NGNjYjM1NWM4ZDNhMjUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2JsYWNrYmVycnkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwzMCBAQAorMjAxMi0wOS0xNCAgQ2FpbyBNYXJjZWxvIGRlIE9s
aXZlaXJhIEZpbGhvICA8Y2Fpby5vbGl2ZWlyYUBvcGVuYm9zc2Eub3JnPgorCisgICAgICAgIFJl
bmFtZSBmaXJzdC9zZWNvbmQgdG8ga2V5L3ZhbHVlIGluIEhhc2hNYXAgaXRlcmF0b3JzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Mjc4NAorCisgICAg
ICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgorCisgICAgICAgICogQXBpL0JhY2tpbmdTdG9y
ZS5jcHA6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkJhY2tpbmdTdG9yZVByaXZhdGU6
OnNldEJhY2tpbmdTdG9yZVJlY3QpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpCYWNr
aW5nU3RvcmVQcml2YXRlOjp2aXNpYmxlVGlsZXNSZWN0KToKKyAgICAgICAgKEJsYWNrQmVycnk6
OldlYktpdDo6QmFja2luZ1N0b3JlUHJpdmF0ZTo6cmVzZXRUaWxlcyk6CisgICAgICAgIChCbGFj
a0JlcnJ5OjpXZWJLaXQ6OkJhY2tpbmdTdG9yZVByaXZhdGU6OnVwZGF0ZVRpbGVzKToKKyAgICAg
ICAgKEJsYWNrQmVycnk6OldlYktpdDo6QmFja2luZ1N0b3JlUHJpdmF0ZTo6dXBkYXRlVGlsZXNG
b3JTY3JvbGxPck5vdFJlbmRlcmVkUmVnaW9uKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktp
dDo6QmFja2luZ1N0b3JlUHJpdmF0ZTo6bWFwRnJvbVRyYW5zZm9ybWVkQ29udGVudHNUb1RpbGVz
KToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6OmNhbmNlbCk6
CisgICAgICAgIChXZWJDb3JlOjpOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpvblBlcm1pc3Np
b24pOgorICAgICAgICAoV2ViQ29yZTo6Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6bm90aWZp
Y2F0aW9uQ2xpY2tlZCk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvVXNlck1lZGlhQ2xpZW50
SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpVc2VyTWVkaWFDbGllbnRJbXBsOjpjYW5jZWxV
c2VyTWVkaWFSZXF1ZXN0KToKKyAgICAgICAgKiBXZWJLaXRTdXBwb3J0L0Fib3V0RGF0YS5jcHA6
CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OmR1bXBKU0NUeXBlQ291bnRTZXRUb1RhYmxl
SFRNTCk6CisgICAgICAgICogV2ViS2l0U3VwcG9ydC9GcmFtZUxheWVycy5jcHA6CisgICAgICAg
IChCbGFja0JlcnJ5OjpXZWJLaXQ6OkZyYW1lTGF5ZXJzOjpyZW1vdmVMYXllckJ5RnJhbWUpOgor
ICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpGcmFtZUxheWVyczo6Y29tbWl0T25XZWJLaXRU
aHJlYWQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpGcmFtZUxheWVyczo6Y2FsY3Vs
YXRlUm9vdExheWVyKToKKwogMjAxMi0wOS0xNCAgR2VuZXZpZXZlIE1hayAgPGdtYWtAcmltLmNv
bT4KIAogICAgICAgICBBbHdheXMgc2VuZCBtb3VzZSBldmVudHMgb24gcGFnZXMgdGhhdCBkb24n
dCBzY3JvbGwgZXZlbiBpZiB0aGVyZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA3NDY1
YjQyOWNjZmUzZDJlMDQzMjQ5YjY4ZTE5NTEwZDM0MWIxZmExLi43NTVkODgxYjU3Y2VlZTRiYmVm
NzY2NzZkYTBmYzM3Mjc2Mzk5Mjg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE5IEBACisyMDEyLTA5LTE0ICBDYWlvIE1hcmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gIDxj
YWlvLm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+CisKKyAgICAgICAgUmVuYW1lIGZpcnN0L3NlY29u
ZCB0byBrZXkvdmFsdWUgaW4gSGFzaE1hcCBpdGVyYXRvcnMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyNzg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
RXJpYyBTZWlkZWwuCisKKyAgICAgICAgKiBzcmMvV2ViR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVx
dWVzdE1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVz
dE1hbmFnZXI6OnJlbW92ZSk6CisgICAgICAgICogc3JjL1dlYklEQk1ldGFkYXRhLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViSURCTWV0YWRhdGE6OldlYklEQk1ldGFkYXRhKToKKyAgICAgICAg
KiBzcmMvV2ViSW50ZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViSW50ZW50OjpleHRyYXNW
YWx1ZSk6CisgICAgICAgICogdGVzdHMvV2ViU29ja2V0RXh0ZW5zaW9uRGlzcGF0Y2hlclRlc3Qu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6VEVTVF9GKToKKwogMjAxMi0wOS0xNCAgU2hlcmlmZiBC
b3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZC4g
IFJvbGxlZCBERVBTLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCmluZGV4IDVkZWUzMTc2Y2NjMjFjY2I2NTI3YzE0
OWY0NmNkNGRlOGViMzMyODEuLjBhOWU3NWIzYzdjMzU4MGM1N2NjOWYxYTQ1MTU3OWQ0MDhkNzdi
NTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0L2VmbC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxMi0wOS0xNCAgQ2FpbyBN
YXJjZWxvIGRlIE9saXZlaXJhIEZpbGhvICA8Y2Fpby5vbGl2ZWlyYUBvcGVuYm9zc2Eub3JnPgor
CisgICAgICAgIFJlbmFtZSBmaXJzdC9zZWNvbmQgdG8ga2V5L3ZhbHVlIGluIEhhc2hNYXAgaXRl
cmF0b3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04
Mjc4NAorCisgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgorCisgICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsLmNwcDoKKyAgICAgICAgKER1bXBS
ZW5kZXJUcmVlU3VwcG9ydEVmbDo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQpOgorICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc0VmbC5jcHA6CisgICAgICAg
IChQbGF0Zm9ybVN0cmF0ZWdpZXNFZmw6OmdldFBsdWdpbkluZm8pOgorICAgICAgICAqIGV3ay9l
d2tfaW50ZW50LmNwcDoKKyAgICAgICAgKGV3a19pbnRlbnRfZXh0cmFfZ2V0KToKKwogMjAxMi0w
OS0xMyAgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4gIDxrZW5uZXRoQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgRXZhc19PYmplY3QqIGlzIGEgcmVmJ2VkIHN0cnVjdHVyZSwgc28gdHJlYWQgaXQg
YXMgc3VjaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdC9ndGsvQ2hhbmdlTG9nCmluZGV4IDU3Y2I5NGFiYmQ0NDNmYjc4NzMwNDE5YzI5Y2Zh
ZTM4ODIxMjRhMGYuLjNmMjZhY2NlNmU4Y2NjOGYxZjQ1N2M3OGRjMzU1NjE1YmUyYmU0OTMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L2d0ay9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxMi0wOS0xNCAgQ2FpbyBNYXJjZWxv
IGRlIE9saXZlaXJhIEZpbGhvICA8Y2Fpby5vbGl2ZWlyYUBvcGVuYm9zc2Eub3JnPgorCisgICAg
ICAgIFJlbmFtZSBmaXJzdC9zZWNvbmQgdG8ga2V5L3ZhbHVlIGluIEhhc2hNYXAgaXRlcmF0b3Jz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Mjc4NAor
CisgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgorCisgICAgICAgICogV2ViQ29yZVN1
cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzR3RrLmNwcDoKKyAgICAgICAgKFBsYXRmb3JtU3RyYXRl
Z2llc0d0azo6Z2V0UGx1Z2luSW5mbyk6CisgICAgICAgICogd2Via2l0L3dlYmtpdGZhdmljb25k
YXRhYmFzZS5jcHA6CisgICAgICAgICh3ZWJraXRGYXZpY29uRGF0YWJhc2VJbXBvcnRGaW5pc2hl
ZCk6CisgICAgICAgICogd2Via2l0L3dlYmtpdHdlYnBsdWdpbi5jcHA6CisgICAgICAgICh3ZWJr
aXRfd2ViX3BsdWdpbl9nZXRfbWltZXR5cGVzKToKKwogMjAxMi0wOS0xNCAgWmFuIERvYmVyc2Vr
ICA8emFuZG9iZXJzZWtAZ21haWwuY29tPgogCiAgICAgICAgIFtHVEtdIENsZWFyIGFwcGxpY2F0
aW9uIGNhY2hlIGJldHdlZW4gdGVzdHMgaW4gRHVtcFJlbmRlclRyZWUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwpp
bmRleCA3ZDI4OWMwNjlhMmU2YTRjNmZmMDJmYzY4MWEwOTI3OWVkOTI1ZWE2Li45ZTc0M2MyNjFj
Y2QzODBkZmU1YTM5NTAxZGUwNGMxZDFlM2U2YjQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsNDQgQEAKKzIwMTItMDktMTQgIENhaW8gTWFyY2VsbyBkZSBPbGl2ZWlyYSBGaWxobyAgPGNh
aW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KKworICAgICAgICBSZW5hbWUgZmlyc3Qvc2Vjb25k
IHRvIGtleS92YWx1ZSBpbiBIYXNoTWFwIGl0ZXJhdG9ycworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI3ODQKKworICAgICAgICBSZXZpZXdlZCBieSBF
cmljIFNlaWRlbC4KKworICAgICAgICAqIEhpc3RvcnkvV2ViSGlzdG9yeS5tbToKKyAgICAgICAg
KC1bV2ViSGlzdG9yeVByaXZhdGUgcmVtb3ZlSXRlbUZyb21EYXRlQ2FjaGVzOl0pOgorICAgICAg
ICAoLVtXZWJIaXN0b3J5UHJpdmF0ZSBvcmRlcmVkTGFzdFZpc2l0ZWREYXlzXSk6CisgICAgICAg
IChXZWJIaXN0b3J5V3JpdGVyOjpXZWJIaXN0b3J5V3JpdGVyKToKKyAgICAgICAgKiBNaXNjL1dl
YkNvcmVTdGF0aXN0aWNzLm1tOgorICAgICAgICAoK1tXZWJDb3JlU3RhdGlzdGljcyBqYXZhU2Ny
aXB0UHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50c10pOgorICAgICAgICAoK1tXZWJDb3JlU3RhdGlz
dGljcyBqYXZhU2NyaXB0T2JqZWN0VHlwZUNvdW50c10pOgorICAgICAgICAqIFBsdWdpbnMvSG9z
dGVkL05ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXIubW06CisgICAgICAgIChXZWJLaXQ6Ok5ldHNj
YXBlUGx1Z2luSG9zdE1hbmFnZXI6Omhvc3RGb3JQbHVnaW4pOgorICAgICAgICAoV2ViS2l0OjpO
ZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyOjpwbHVnaW5Ib3N0RGllZCk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXI6OmRpZENyZWF0ZVdpbmRvdyk6CisgICAgICAg
ICogUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkubW06CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSG9zdFByb3h5OjpwbHVnaW5Ib3N0RGllZCk6CisgICAgICAg
ICogUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tOgorICAgICAg
ICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OkxvY2FsT2JqZWN0TWFwOjpp
ZEZvck9iamVjdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94
eTo6TG9jYWxPYmplY3RNYXA6OnJldGFpbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1
Z2luSW5zdGFuY2VQcm94eTo6TG9jYWxPYmplY3RNYXA6OnJlbGVhc2UpOgorICAgICAgICAoV2Vi
S2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OkxvY2FsT2JqZWN0TWFwOjpmb3JnZXQp
OgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmRlc3Ryb3kp
OgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OndlYkZyYW1l
RGlkRmluaXNoTG9hZFdpdGhSZWFzb24pOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdp
bkluc3RhbmNlUHJveHk6OmNhbmNlbENoZWNrSWZBbGxvd2VkVG9Mb2FkVVJMKToKKyAgICAgICAg
KiBQbHVnaW5zL0hvc3RlZC9Qcm94eUluc3RhbmNlLm1tOgorICAgICAgICAoV2ViS2l0OjpQcm94
eUluc3RhbmNlOjptZXRob2RzTmFtZWQpOgorICAgICAgICAoV2ViS2l0OjpQcm94eUluc3RhbmNl
OjpmaWVsZE5hbWVkKToKKyAgICAgICAgKiBQbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5t
bToKKyAgICAgICAgKC1bV2ViTmV0c2NhcGVQbHVnaW5WaWV3IHN0b3BUaW1lcnNdKToKKyAgICAg
ICAgKC1bV2ViTmV0c2NhcGVQbHVnaW5WaWV3IHN0YXJ0VGltZXJzXSk6CisgICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvV2ViTm90aWZpY2F0aW9uQ2xpZW50Lm1tOgorICAgICAgICAoV2ViTm90aWZp
Y2F0aW9uQ2xpZW50OjpzaG93KToKKyAgICAgICAgKFdlYk5vdGlmaWNhdGlvbkNsaWVudDo6Y2xl
YXJOb3RpZmljYXRpb25zKToKKyAgICAgICAgKFdlYk5vdGlmaWNhdGlvbkNsaWVudDo6bm90aWZp
Y2F0aW9uT2JqZWN0RGVzdHJveWVkKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYkhUTUxWaWV3Lm1t
OgorICAgICAgICAoY29tbWFuZE5hbWVGb3JTZWxlY3Rvcik6CisKIDIwMTItMDktMTMgIFNoZXJp
ZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3
ZWQsIHJvbGxpbmcgb3V0IHIxMjg1NTIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCmluZGV4IDUzYTA5MmI4NTYzYWVm
NjVmZmMwY2NiZjE0ZTQ1ZDcyNDg4ZTNhNGMuLjRhYjE5NzVjM2I5OTllNzA5N2U0YjE3Y2U3Yjg1
OWMxMTY5MmIzZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTItMDktMTQg
IENhaW8gTWFyY2VsbyBkZSBPbGl2ZWlyYSBGaWxobyAgPGNhaW8ub2xpdmVpcmFAb3BlbmJvc3Nh
Lm9yZz4KKworICAgICAgICBSZW5hbWUgZmlyc3Qvc2Vjb25kIHRvIGtleS92YWx1ZSBpbiBIYXNo
TWFwIGl0ZXJhdG9ycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9ODI3ODQKKworICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KKworICAgICAg
ICAqIEFwaS9xd2VicGFnZS5jcHA6CisgICAgICAgIChleHRyYWN0Q29udGVudFR5cGVGcm9tUGx1
Z2luVmVjdG9yKToKKyAgICAgICAgKiBBcGkvcXdlYnBsdWdpbmRhdGFiYXNlLmNwcDoKKyAgICAg
ICAgKFFXZWJQbHVnaW5JbmZvOjptaW1lVHlwZXMpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0
L1BsYXRmb3JtU3RyYXRlZ2llc1F0LmNwcDoKKyAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc1F0
OjpnZXRQbHVnaW5JbmZvKToKKwogMjAxMi0wOS0xMyAgTGF1cm8gTmV0byAgPGxhdXJvLm5ldG9A
b3BlbmJvc3NhLm9yZz4KIAogICAgICAgICBbUXRdW1dLMl0gZmFzdC9mb3Jtcy9hY2Nlc3Mta2V5
LWZvci1hbGwtZWxlbWVudHMuaHRtbCBmYWlscwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93
aW4vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCmluZGV4IDE0YTkzOTZk
NGQwY2ZjODUwMjQxOGRiOWIxNmQwOTQ5ZmYzZTMzN2QuLjBlZmUyNmViZGQ0ZDI4ODU4MjAyMWFl
YzQyYzIyNTRjMTEyZWViOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOCBAQAorMjAx
Mi0wOS0xNCAgQ2FpbyBNYXJjZWxvIGRlIE9saXZlaXJhIEZpbGhvICA8Y2Fpby5vbGl2ZWlyYUBv
cGVuYm9zc2Eub3JnPgorCisgICAgICAgIFJlbmFtZSBmaXJzdC9zZWNvbmQgdG8ga2V5L3ZhbHVl
IGluIEhhc2hNYXAgaXRlcmF0b3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD04Mjc4NAorCisgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgor
CisgICAgICAgICogQ09NUHJvcGVydHlCYWcuaDoKKyAgICAgICAgKDo6UmVhZCk6CisgICAgICAg
ICg6OkdldFByb3BlcnR5SW5mbyk6CisgICAgICAgICogV2ViQ29yZVN0YXRpc3RpY3MuY3BwOgor
ICAgICAgICAoV2ViQ29yZVN0YXRpc3RpY3M6OmphdmFTY3JpcHRQcm90ZWN0ZWRPYmplY3RUeXBl
Q291bnRzKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMu
Y3BwOgorICAgICAgICAoV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpnZXRQbHVnaW5JbmZvKToKKyAg
ICAgICAgKiBXZWJIaXN0b3J5LmNwcDoKKyAgICAgICAgKFdlYkhpc3Rvcnk6OnJlbW92ZUl0ZW1G
cm9tRGF0ZUNhY2hlcyk6CisgICAgICAgICogV2ViS2l0Q09NQVBJLmNwcDoKKyAgICAgICAgKGNs
YXNzRmFjdG9yeSk6CisgICAgICAgICogV2ViS2l0U3RhdGlzdGljcy5jcHA6CisgICAgICAgIChX
ZWJLaXRTdGF0aXN0aWNzOjpjb21DbGFzc05hbWVDb3VudHMpOgorICAgICAgICAqIFdlYk5vdGlm
aWNhdGlvbkNlbnRlci5jcHA6CisgICAgICAgIChXZWJOb3RpZmljYXRpb25DZW50ZXI6OnBvc3RO
b3RpZmljYXRpb25JbnRlcm5hbCk6CisgICAgICAgIChXZWJOb3RpZmljYXRpb25DZW50ZXI6OmFk
ZE9ic2VydmVyKToKKyAgICAgICAgKFdlYk5vdGlmaWNhdGlvbkNlbnRlcjo6cmVtb3ZlT2JzZXJ2
ZXIpOgorCiAyMDEyLTA5LTEzICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1Ad2Via2l0Lm9yZz4K
IAogICAgICAgICBbV2luQ2Fpcm9dIFVucmV2aWV3ZWQgYnVpbGQgZml4LgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC93aW5jZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L3dpbmNlL0NoYW5n
ZUxvZwppbmRleCBkNjZmYTU5MjM4OWEyZDhiZTA0OWQwZTFhMzdhODc1NzA3Y2IxYjM1Li44ODJi
ODU5MTNhMWRiYzI0Y2VmMmMxNzJmNzFlMmFiNjMwYjgwMWNhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L3dpbmNlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L3dpbmNlL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDEzIEBACisyMDEyLTA5LTE0ICBDYWlvIE1hcmNlbG8gZGUgT2xpdmVpcmEg
RmlsaG8gIDxjYWlvLm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+CisKKyAgICAgICAgUmVuYW1lIGZp
cnN0L3NlY29uZCB0byBrZXkvdmFsdWUgaW4gSGFzaE1hcCBpdGVyYXRvcnMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyNzg0CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QbGF0Zm9y
bVN0cmF0ZWdpZXNXaW5DRS5jcHA6CisgICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6
Z2V0UGx1Z2luSW5mbyk6CisKIDIwMTItMDgtMjggIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmll
dy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMjY5
MTQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKaW5kZXggMzM0M2RiYzJmZTVhNTI1NzBiYTM2NDFlNDBlZjI0YjFiOTU4YWI5
MS4uYjdhNzA3NTY4ZGEwNDExYmI4NWZjYjJjM2ZkNTliMmQ0NzNhNzE4YyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDEyOCBAQAorMjAxMi0wOS0xNCAgQ2FpbyBNYXJjZWxvIGRlIE9saXZlaXJhIEZp
bGhvICA8Y2Fpby5vbGl2ZWlyYUBvcGVuYm9zc2Eub3JnPgorCisgICAgICAgIFJlbmFtZSBmaXJz
dC9zZWNvbmQgdG8ga2V5L3ZhbHVlIGluIEhhc2hNYXAgaXRlcmF0b3JzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Mjc4NAorCisgICAgICAgIFJldmll
d2VkIGJ5IEVyaWMgU2VpZGVsLgorCisgICAgICAgICogUGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVu
dENvZGVycy5oOgorICAgICAgICAqIFBsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5jcHA6Cisg
ICAgICAgIChDb3JlSVBDOjpDb25uZWN0aW9uOjpTeW5jTWVzc2FnZVN0YXRlOjpnZXRPckNyZWF0
ZSk6CisgICAgICAgIChDb3JlSVBDOjpDb25uZWN0aW9uOjp3YWl0Rm9yTWVzc2FnZSk6CisgICAg
ICAgIChDb3JlSVBDOjpDb25uZWN0aW9uOjpwcm9jZXNzSW5jb21pbmdNZXNzYWdlKToKKyAgICAg
ICAgKiBQbGF0Zm9ybS9ndGsvV29ya1F1ZXVlR3RrLmNwcDoKKyAgICAgICAgKFdvcmtRdWV1ZTo6
cmVnaXN0ZXJFdmVudFNvdXJjZUhhbmRsZXIpOgorICAgICAgICAoV29ya1F1ZXVlOjp1bnJlZ2lz
dGVyRXZlbnRTb3VyY2VIYW5kbGVyKToKKyAgICAgICAgKiBQbGF0Zm9ybS9tYWMvV29ya1F1ZXVl
TWFjLmNwcDoKKyAgICAgICAgKFdvcmtRdWV1ZTo6dW5yZWdpc3Rlck1hY2hQb3J0RXZlbnRIYW5k
bGVyKToKKyAgICAgICAgKiBTaGFyZWQvUGx1Z2lucy9OUFJlbW90ZU9iamVjdE1hcC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6Ok5QUmVtb3RlT2JqZWN0TWFwOjpwbHVnaW5EZXN0cm95ZWQpOgorICAg
ICAgICAqIFNoYXJlZC9Vc2VyTWVzc2FnZUNvZGVycy5oOgorICAgICAgICAoV2ViS2l0OjpVc2Vy
TWVzc2FnZUVuY29kZXI6OmJhc2VFbmNvZGUpOgorICAgICAgICAqIFNoYXJlZC9XZWJQcmVmZXJl
bmNlc1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6dmFsdWVGb3JLZXkpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQcmVmZXJlbmNlc1N0b3JlOjpnZXRCb29sVmFsdWVGb3JLZXkpOgorICAgICAg
ICAqIFNoYXJlZC9tYWMvV2ViQ29yZUFyZ3VtZW50Q29kZXJzTWFjLm1tOgorICAgICAgICAoQ29y
ZUlQQzo6OjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9xdC9Bcmd1bWVudENvZGVyc1F0LmNw
cDoKKyAgICAgICAgKENvcmVJUEM6Ojo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvc291cC9X
ZWJDb3JlQXJndW1lbnRDb2RlcnNTb3VwLmNwcDoKKyAgICAgICAgKENvcmVJUEM6Ojo6ZGVjb2Rl
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3QuY3Bw
OgorICAgICAgICAoX0V3a19CYWNrX0ZvcndhcmRfTGlzdDo6fl9Fd2tfQmFja19Gb3J3YXJkX0xp
c3QpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcDoKKyAgICAg
ICAgKF9Fd2tfQ29udGV4dDo6fl9Fd2tfQ29udGV4dCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX3ZpZXcuY3BwOgorICAgICAgICAoX2V3a192aWV3X3ByaXZfbG9hZGluZ19yZXNv
dXJjZXNfY2xlYXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcu
Y3BwOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2dldF9zdWJyZXNvdXJjZXMpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcDoKKyAgICAgICAgKHdl
YmtpdFdlYlZpZXdCYXNlQ29udGFpbmVyRm9yYWxsKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L21hYy9XS1ByaW50aW5nVmlldy5tbToKKyAgICAgICAgKC1bV0tQcmludGluZ1ZpZXcgX2V4cGVj
dGVkUHJldmlld0NhbGxiYWNrRm9yUmVjdDpdKToKKyAgICAgICAgKHBhZ2VEaWREcmF3VG9QREYp
OgorICAgICAgICAoLVtXS1ByaW50aW5nVmlldyBfZHJhd1ByZXZpZXc6XSk6CisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tOgorICAgICAgICAoY29tbWFuZE5hbWVGb3JTZWxl
Y3Rvcik6CisgICAgICAgICgtW1dLVmlldyB2YWxpZGF0ZVVzZXJJbnRlcmZhY2VJdGVtOl0pOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQmFja2lu
Z1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OnVw
ZGF0ZVRpbGUpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZEJhY2tpbmdTdG9yZTo6dGV4
dHVyZSk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjpwYWludFRv
VGV4dHVyZU1hcHBlcik6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkQmFja2luZ1N0b3Jl
Ojpjb21taXRUaWxlT3BlcmF0aW9ucyk6CisgICAgICAgICogVUlQcm9jZXNzL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6
OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnVwZGF0ZVRpbGVGb3JMYXllcik6CisgICAgICAg
ICogVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVSZW5kZXJlcjo6YWRqdXN0UG9zaXRpb25Gb3JGaXhl
ZExheWVycyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZVJlbmRlcmVyOjpzeW5jQ2FudmFz
KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlUmVuZGVyZXI6OnNldExheWVyQ2hpbGRyZW4p
OgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVSZW5kZXJlcjo6c2V0TGF5ZXJGaWx0ZXJzKToK
KyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlUmVuZGVyZXI6OnNldExheWVyU3RhdGUpOgorICAg
ICAgICAoV2ViS2l0OjpMYXllclRyZWVSZW5kZXJlcjo6YXNzaWduSW1hZ2VUb0xheWVyKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94
eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Okdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5h
Z2VyUHJveHk6OmludmFsaWRhdGVSZXF1ZXN0cyk6CisgICAgICAgICogVUlQcm9jZXNzL0luc3Bl
Y3RvclNlcnZlci9XZWJJbnNwZWN0b3JTZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJJ
bnNwZWN0b3JTZXJ2ZXI6On5XZWJJbnNwZWN0b3JTZXJ2ZXIpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJJbnNwZWN0b3JTZXJ2ZXI6OnJlZ2lzdGVyUGFnZSk6CisgICAgICAgICogVUlQcm9jZXNzL0lu
c3BlY3RvclNlcnZlci9XZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbjo6c2VuZEhUVFBSZXNwb25zZUhlYWRlcik6
CisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9xdC9XZWJJbnNwZWN0b3JTZXJ2
ZXJRdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclNlcnZlcjo6YnVpbGRQYWdl
TGlzdCk6CisgICAgICAgICogVUlQcm9jZXNzL05vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uUGVy
bWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpOb3RpZmlj
YXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eTo6aW52YWxpZGF0ZVJlcXVlc3RzKToK
KyAgICAgICAgKiBVSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzUHJveHkuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpQbHVnaW5Qcm9jZXNzUHJveHk6OnBsdWdpblByb2Nlc3NDcmFzaGVkT3JG
YWlsZWRUb0xhdW5jaCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkNvbnRleHQuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpjcmVhdGVEaWN0aW9uYXJ5RnJvbUhhc2hNYXApOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJJY29uRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJJY29uRGF0
YWJhc2U6OmRpZEZpbmlzaFVSTEltcG9ydCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkludGVu
dERhdGEuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnRlbnREYXRhOjpleHRyYXMpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzUHJveHk6OmNoZWNrVVJMUmVjZWl2ZWRGcm9tV2ViUHJvY2Vzcyk6CisgICAgICAg
IChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6YWRkQmFja0ZvcndhcmRJdGVtKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpmcmFtZUNvdW50SW5QYWdlKToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL0dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2Vy
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6R2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFn
ZXI6OmNhbmNlbFJlcXVlc3RGb3JHZW9sb2NhdGlvbik6CisgICAgICAgIChXZWJLaXQ6Okdlb2xv
Y2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyOjpkaWRSZWNlaXZlR2VvbG9jYXRpb25QZXJt
aXNzaW9uRGVjaXNpb24pOgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9N
L0luamVjdGVkQnVuZGxlTm9kZUhhbmRsZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkluamVjdGVk
QnVuZGxlTm9kZUhhbmRsZTo6Z2V0T3JDcmVhdGUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGUuY3BwOgorICAgICAgICAo
V2ViS2l0OjpJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpnZXRPckNyZWF0ZSk6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZUludGVudC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OkluamVjdGVkQnVuZGxlSW50ZW50OjpleHRyYXMpOgorICAgICAgICAq
IFdlYlByb2Nlc3MvTm90aWZpY2F0aW9ucy9XZWJOb3RpZmljYXRpb25NYW5hZ2VyLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViTm90aWZpY2F0aW9uTWFuYWdlcjo6cG9saWN5Rm9yT3JpZ2luKToK
KyAgICAgICAgKFdlYktpdDo6V2ViTm90aWZpY2F0aW9uTWFuYWdlcjo6c2hvdyk6CisgICAgICAg
IChXZWJLaXQ6OldlYk5vdGlmaWNhdGlvbk1hbmFnZXI6OmNsZWFyTm90aWZpY2F0aW9ucyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYk5vdGlmaWNhdGlvbk1hbmFnZXI6OnJlbW92ZU5vdGlmaWNhdGlv
bkZyb21Db250ZXh0TWFwKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUv
TlBSdW50aW1lT2JqZWN0TWFwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TlBSdW50aW1lT2JqZWN0
TWFwOjppbnZhbGlkYXRlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUv
TmV0c2NhcGVQbHVnaW4uY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbjo6ZGVz
dHJveVN0cmVhbSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luOjpmcmFtZURpZEZp
bmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbjo6ZnJhbWVEaWRG
YWlsKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OmJ1aWxkSFRUUEhlYWRlcnMpOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5W
aWV3Ojp+UGx1Z2luVmlldyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6bGF5ZXJCeUlEKToKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5j
cHA6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjphZG9wdEltYWdlQmFj
a2luZ1N0b3JlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnJlbGVh
c2VJbWFnZUJhY2tpbmdTdG9yZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJh
Y2tGb3J3YXJkTGlzdFByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQmFja0ZvcndhcmRM
aXN0UHJveHk6OnJlbW92ZUl0ZW0pOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMv
V2ViUGFnZU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6Y29tbWFuZE5hbWVGb3JTZWxlY3Rvck5h
bWUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3M6OnZpc2l0ZWRMaW5rU3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzczo6YWxsVmlzaXRlZExpbmtTdGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQcm9jZXNzOjpmb2N1c2VkV2ViUGFnZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3M6OmNyZWF0ZVdlYlBhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjp3ZWJQ
YWdlR3JvdXApOgorICAgICAgICAoV2ViS2l0Ojpmcm9tQ291bnRlZFNldFRvSGFzaE1hcCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OnNldFRleHRDaGVja2VyU3RhdGUpOgorCiAyMDEy
LTA5LTE0ICBCbyBMaXUgIDxib2xpdUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQWRkIGluLXBs
YWNlIHJlbG9hZCBiZWhhdmlvciB0byBJbWFnZXNFbmFibGVkIHNldHRpbmcKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgKaW5kZXggOGQ3YWVkZDNlMjc2MDQ4
MWMxOGJkYmM5OGNhYjI3YmRiMmExYjQyMy4uNDVhNmNiNzlkYjZiZjljYWNkZmY1NzYwNjg5NjBh
NzVlM2E0ODcwZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxi
YWNrT2JqZWN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2Jq
ZWN0LmgKQEAgLTgzLDEzICs4MywxMyBAQCBzdHJ1Y3QgSlNDYWxsYmFja09iamVjdERhdGEgOiBX
ZWFrSGFuZGxlT3duZXIgewogICAgICAgICAgICAgUHJpdmF0ZVByb3BlcnR5TWFwOjpjb25zdF9p
dGVyYXRvciBsb2NhdGlvbiA9IG1fcHJvcGVydHlNYXAuZmluZChwcm9wZXJ0eU5hbWUuaW1wbCgp
KTsKICAgICAgICAgICAgIGlmIChsb2NhdGlvbiA9PSBtX3Byb3BlcnR5TWFwLmVuZCgpKQogICAg
ICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7Ci0gICAgICAgICAgICByZXR1cm4gbG9jYXRp
b24tPnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgIHJldHVybiBsb2NhdGlvbi0+dmFsdWUuZ2V0
KCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHZvaWQgc2V0UHJpdmF0ZVByb3BlcnR5
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlKQogICAgICAgICB7CiAgICAgICAgICAgICBX
cml0ZUJhcnJpZXI8VW5rbm93bj4gZW1wdHk7Ci0gICAgICAgICAgICBtX3Byb3BlcnR5TWFwLmFk
ZChwcm9wZXJ0eU5hbWUuaW1wbCgpLCBlbXB0eSkuaXRlcmF0b3ItPnNlY29uZC5zZXQoZ2xvYmFs
RGF0YSwgb3duZXIsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcHJvcGVydHlNYXAuYWRkKHByb3Bl
cnR5TmFtZS5pbXBsKCksIGVtcHR5KS5pdGVyYXRvci0+dmFsdWUuc2V0KGdsb2JhbERhdGEsIG93
bmVyLCB2YWx1ZSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHZvaWQgZGVsZXRlUHJp
dmF0ZVByb3BlcnR5KGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKQEAgLTEwMCw4ICsx
MDAsOCBAQCBzdHJ1Y3QgSlNDYWxsYmFja09iamVjdERhdGEgOiBXZWFrSGFuZGxlT3duZXIgewog
ICAgICAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgICAg
IHsKICAgICAgICAgICAgIGZvciAoUHJpdmF0ZVByb3BlcnR5TWFwOjppdGVyYXRvciBwdHIgPSBt
X3Byb3BlcnR5TWFwLmJlZ2luKCk7IHB0ciAhPSBtX3Byb3BlcnR5TWFwLmVuZCgpOyArK3B0cikg
ewotICAgICAgICAgICAgICAgIGlmIChwdHItPnNlY29uZCkKLSAgICAgICAgICAgICAgICAgICAg
dmlzaXRvci5hcHBlbmQoJnB0ci0+c2Vjb25kKTsKKyAgICAgICAgICAgICAgICBpZiAocHRyLT52
YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJnB0ci0+dmFsdWUpOwog
ICAgICAgICAgICAgfQogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgKaW5kZXggMzlkMDc4MjM5YjRkOTA2
NDAyODFlNGRmOTIzMzJhMTk0ZTdkN2VkMy4uYTNhZmFlYzQyMzI5YjdhOTExZDk1N2FlNGQ1MGM2
ODA4ZWM5YzUxZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxi
YWNrT2JqZWN0RnVuY3Rpb25zLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Nh
bGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgKQEAgLTQ3MSw4ICs0NzEsOCBAQCB2b2lkIEpTQ2FsbGJh
Y2tPYmplY3Q8UGFyZW50Pjo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBv
YmplY3QsIEV4ZQogICAgICAgICAgICAgdHlwZWRlZiBPcGFxdWVKU0NsYXNzU3RhdGljVmFsdWVz
VGFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0ZXJhdG9yOwogICAgICAgICAgICAgaXRlcmF0b3IgZW5k
ID0gc3RhdGljVmFsdWVzLT5lbmQoKTsKICAgICAgICAgICAgIGZvciAoaXRlcmF0b3IgaXQgPSBz
dGF0aWNWYWx1ZXMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgICAg
IFN0cmluZ0ltcGwqIG5hbWUgPSBpdC0+Zmlyc3QuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgU3Rh
dGljVmFsdWVFbnRyeSogZW50cnkgPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgICAg
IFN0cmluZ0ltcGwqIG5hbWUgPSBpdC0+a2V5LmdldCgpOworICAgICAgICAgICAgICAgIFN0YXRp
Y1ZhbHVlRW50cnkqIGVudHJ5ID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAgICAgICAgIGlm
IChlbnRyeS0+Z2V0UHJvcGVydHkgJiYgKCEoZW50cnktPmF0dHJpYnV0ZXMgJiBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZURvbnRFbnVtKSB8fCAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVz
KSkpCiAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXIoZXhl
YywgbmFtZSkpOwogICAgICAgICAgICAgfQpAQCAtNDgyLDggKzQ4Miw4IEBAIHZvaWQgSlNDYWxs
YmFja09iamVjdDxQYXJlbnQ+OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3Qq
IG9iamVjdCwgRXhlCiAgICAgICAgICAgICB0eXBlZGVmIE9wYXF1ZUpTQ2xhc3NTdGF0aWNGdW5j
dGlvbnNUYWJsZTo6Y29uc3RfaXRlcmF0b3IgaXRlcmF0b3I7CiAgICAgICAgICAgICBpdGVyYXRv
ciBlbmQgPSBzdGF0aWNGdW5jdGlvbnMtPmVuZCgpOwogICAgICAgICAgICAgZm9yIChpdGVyYXRv
ciBpdCA9IHN0YXRpY0Z1bmN0aW9ucy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAg
ICAgICAgICAgICAgU3RyaW5nSW1wbCogbmFtZSA9IGl0LT5maXJzdC5nZXQoKTsKLSAgICAgICAg
ICAgICAgICBTdGF0aWNGdW5jdGlvbkVudHJ5KiBlbnRyeSA9IGl0LT5zZWNvbmQuZ2V0KCk7Cisg
ICAgICAgICAgICAgICAgU3RyaW5nSW1wbCogbmFtZSA9IGl0LT5rZXkuZ2V0KCk7CisgICAgICAg
ICAgICAgICAgU3RhdGljRnVuY3Rpb25FbnRyeSogZW50cnkgPSBpdC0+dmFsdWUuZ2V0KCk7CiAg
ICAgICAgICAgICAgICAgaWYgKCEoZW50cnktPmF0dHJpYnV0ZXMgJiBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZURvbnRFbnVtKSB8fCAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKSkKICAg
ICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihleGVjLCBuYW1l
KSk7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQ2xhc3NSZWYuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NsYXNzUmVmLmNw
cAppbmRleCBhOTVkNDJlMzllZDEzMzkyNzI5NjkxZTE5MDMwMjg2MTc2NjBlMzQzLi42NWM4M2Jj
YWJmZTZhNDExOTgzZGRkODQ3NDViMTY0ZTUxOTU1MDJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTQ2xhc3NSZWYuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNDbGFzc1JlZi5jcHAKQEAgLTkzLDEzICs5MywxMyBAQCBPcGFxdWVKU0NsYXNzOjp+
T3BhcXVlSlNDbGFzcygpCiAgICAgaWYgKG1fc3RhdGljVmFsdWVzKSB7CiAgICAgICAgIE9wYXF1
ZUpTQ2xhc3NTdGF0aWNWYWx1ZXNUYWJsZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9zdGF0aWNW
YWx1ZXMtPmVuZCgpOwogICAgICAgICBmb3IgKE9wYXF1ZUpTQ2xhc3NTdGF0aWNWYWx1ZXNUYWJs
ZTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3N0YXRpY1ZhbHVlcy0+YmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KQotICAgICAgICAgICAgQVNTRVJUKCFpdC0+Zmlyc3QtPmlzSWRlbnRpZmllcigpKTsK
KyAgICAgICAgICAgIEFTU0VSVCghaXQtPmtleS0+aXNJZGVudGlmaWVyKCkpOwogICAgIH0KIAog
ICAgIGlmIChtX3N0YXRpY0Z1bmN0aW9ucykgewogICAgICAgICBPcGFxdWVKU0NsYXNzU3RhdGlj
RnVuY3Rpb25zVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fc3RhdGljRnVuY3Rpb25zLT5l
bmQoKTsKICAgICAgICAgZm9yIChPcGFxdWVKU0NsYXNzU3RhdGljRnVuY3Rpb25zVGFibGU6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbV9zdGF0aWNGdW5jdGlvbnMtPmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkKLSAgICAgICAgICAgIEFTU0VSVCghaXQtPmZpcnN0LT5pc0lkZW50aWZpZXIoKSk7Cisg
ICAgICAgICAgICBBU1NFUlQoIWl0LT5rZXktPmlzSWRlbnRpZmllcigpKTsKICAgICB9CiAjZW5k
aWYKICAgICAKQEAgLTEzMyw4ICsxMzMsOCBAQCBPcGFxdWVKU0NsYXNzQ29udGV4dERhdGE6Ok9w
YXF1ZUpTQ2xhc3NDb250ZXh0RGF0YShKU0M6OkpTR2xvYmFsRGF0YSYsIE9wYXF1ZUpTQwogICAg
ICAgICBzdGF0aWNWYWx1ZXMgPSBhZG9wdFB0cihuZXcgT3BhcXVlSlNDbGFzc1N0YXRpY1ZhbHVl
c1RhYmxlKTsKICAgICAgICAgT3BhcXVlSlNDbGFzc1N0YXRpY1ZhbHVlc1RhYmxlOjpjb25zdF9p
dGVyYXRvciBlbmQgPSBqc0NsYXNzLT5tX3N0YXRpY1ZhbHVlcy0+ZW5kKCk7CiAgICAgICAgIGZv
ciAoT3BhcXVlSlNDbGFzc1N0YXRpY1ZhbHVlc1RhYmxlOjpjb25zdF9pdGVyYXRvciBpdCA9IGpz
Q2xhc3MtPm1fc3RhdGljVmFsdWVzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgICAgIEFTU0VSVCghaXQtPmZpcnN0LT5pc0lkZW50aWZpZXIoKSk7Ci0gICAgICAgICAgICBz
dGF0aWNWYWx1ZXMtPmFkZChTdHJpbmdJbXBsOjpjcmVhdGUoaXQtPmZpcnN0LT5jaGFyYWN0ZXJz
KCksIGl0LT5maXJzdC0+bGVuZ3RoKCkpLCBhZG9wdFB0cihuZXcgU3RhdGljVmFsdWVFbnRyeShp
dC0+c2Vjb25kLT5nZXRQcm9wZXJ0eSwgaXQtPnNlY29uZC0+c2V0UHJvcGVydHksIGl0LT5zZWNv
bmQtPmF0dHJpYnV0ZXMpKSk7CisgICAgICAgICAgICBBU1NFUlQoIWl0LT5rZXktPmlzSWRlbnRp
ZmllcigpKTsKKyAgICAgICAgICAgIHN0YXRpY1ZhbHVlcy0+YWRkKFN0cmluZ0ltcGw6OmNyZWF0
ZShpdC0+a2V5LT5jaGFyYWN0ZXJzKCksIGl0LT5rZXktPmxlbmd0aCgpKSwgYWRvcHRQdHIobmV3
IFN0YXRpY1ZhbHVlRW50cnkoaXQtPnZhbHVlLT5nZXRQcm9wZXJ0eSwgaXQtPnZhbHVlLT5zZXRQ
cm9wZXJ0eSwgaXQtPnZhbHVlLT5hdHRyaWJ1dGVzKSkpOwogICAgICAgICB9CiAgICAgfQogCkBA
IC0xNDIsMTUgKzE0MiwxNSBAQCBPcGFxdWVKU0NsYXNzQ29udGV4dERhdGE6Ok9wYXF1ZUpTQ2xh
c3NDb250ZXh0RGF0YShKU0M6OkpTR2xvYmFsRGF0YSYsIE9wYXF1ZUpTQwogICAgICAgICBzdGF0
aWNGdW5jdGlvbnMgPSBhZG9wdFB0cihuZXcgT3BhcXVlSlNDbGFzc1N0YXRpY0Z1bmN0aW9uc1Rh
YmxlKTsKICAgICAgICAgT3BhcXVlSlNDbGFzc1N0YXRpY0Z1bmN0aW9uc1RhYmxlOjpjb25zdF9p
dGVyYXRvciBlbmQgPSBqc0NsYXNzLT5tX3N0YXRpY0Z1bmN0aW9ucy0+ZW5kKCk7CiAgICAgICAg
IGZvciAoT3BhcXVlSlNDbGFzc1N0YXRpY0Z1bmN0aW9uc1RhYmxlOjpjb25zdF9pdGVyYXRvciBp
dCA9IGpzQ2xhc3MtPm1fc3RhdGljRnVuY3Rpb25zLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKLSAgICAgICAgICAgIEFTU0VSVCghaXQtPmZpcnN0LT5pc0lkZW50aWZpZXIoKSk7Ci0gICAg
ICAgICAgICBzdGF0aWNGdW5jdGlvbnMtPmFkZChTdHJpbmdJbXBsOjpjcmVhdGUoaXQtPmZpcnN0
LT5jaGFyYWN0ZXJzKCksIGl0LT5maXJzdC0+bGVuZ3RoKCkpLCBhZG9wdFB0cihuZXcgU3RhdGlj
RnVuY3Rpb25FbnRyeShpdC0+c2Vjb25kLT5jYWxsQXNGdW5jdGlvbiwgaXQtPnNlY29uZC0+YXR0
cmlidXRlcykpKTsKKyAgICAgICAgICAgIEFTU0VSVCghaXQtPmtleS0+aXNJZGVudGlmaWVyKCkp
OworICAgICAgICAgICAgc3RhdGljRnVuY3Rpb25zLT5hZGQoU3RyaW5nSW1wbDo6Y3JlYXRlKGl0
LT5rZXktPmNoYXJhY3RlcnMoKSwgaXQtPmtleS0+bGVuZ3RoKCkpLCBhZG9wdFB0cihuZXcgU3Rh
dGljRnVuY3Rpb25FbnRyeShpdC0+dmFsdWUtPmNhbGxBc0Z1bmN0aW9uLCBpdC0+dmFsdWUtPmF0
dHJpYnV0ZXMpKSk7CiAgICAgICAgIH0KICAgICB9CiB9CiAKIE9wYXF1ZUpTQ2xhc3NDb250ZXh0
RGF0YSYgT3BhcXVlSlNDbGFzczo6Y29udGV4dERhdGEoRXhlY1N0YXRlKiBleGVjKQogewotICAg
IE93blB0cjxPcGFxdWVKU0NsYXNzQ29udGV4dERhdGE+JiBjb250ZXh0RGF0YSA9IGV4ZWMtPmds
b2JhbERhdGEoKS5vcGFxdWVKU0NsYXNzRGF0YS5hZGQodGhpcywgbnVsbHB0cikuaXRlcmF0b3It
PnNlY29uZDsKKyAgICBPd25QdHI8T3BhcXVlSlNDbGFzc0NvbnRleHREYXRhPiYgY29udGV4dERh
dGEgPSBleGVjLT5nbG9iYWxEYXRhKCkub3BhcXVlSlNDbGFzc0RhdGEuYWRkKHRoaXMsIG51bGxw
dHIpLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoIWNvbnRleHREYXRhKQogICAgICAgICBjb250
ZXh0RGF0YSA9IGFkb3B0UHRyKG5ldyBPcGFxdWVKU0NsYXNzQ29udGV4dERhdGEoZXhlYy0+Z2xv
YmFsRGF0YSgpLCB0aGlzKSk7CiAgICAgcmV0dXJuICpjb250ZXh0RGF0YTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKaW5kZXggNmIzMWJlMjIxYjYxODdj
YTcwMzQ3NTc0NWMzMzZjYzEzZjMzZjg2ZC4uNmUxNzRjMmZkOTUwYzUwNjIxNDEyMGFmYTYxOTRi
N2VmY2JlN2JlNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5jcHAKQEAgLTY2MCw3ICs2NjAsNyBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcChFeGVjU3RhdGUq
IGV4ZWMpCiAgICAgICAgICAgICBkYXRhTG9nKCIgICUxZCA9IHtcbiIsIGkpOwogICAgICAgICAg
ICAgU3RyaW5nSnVtcFRhYmxlOjpTdHJpbmdPZmZzZXRUYWJsZTo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gbV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW2ldLm9mZnNldFRhYmxlLmVu
ZCgpOwogICAgICAgICAgICAgZm9yIChTdHJpbmdKdW1wVGFibGU6OlN0cmluZ09mZnNldFRhYmxl
Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gbV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFi
bGVzW2ldLm9mZnNldFRhYmxlLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCi0gICAgICAg
ICAgICAgICAgZGF0YUxvZygiXHRcdFwiJXNcIiA9PiAlMDRkXG4iLCBTdHJpbmcoaXRlci0+Zmly
c3QpLnV0ZjgoKS5kYXRhKCksIGl0ZXItPnNlY29uZC5icmFuY2hPZmZzZXQpOworICAgICAgICAg
ICAgICAgIGRhdGFMb2coIlx0XHRcIiVzXCIgPT4gJTA0ZFxuIiwgU3RyaW5nKGl0ZXItPmtleSku
dXRmOCgpLmRhdGEoKSwgaXRlci0+dmFsdWUuYnJhbmNoT2Zmc2V0KTsKICAgICAgICAgICAgIGRh
dGFMb2coIiAgICAgIH1cbiIpOwogICAgICAgICAgICAgKytpOwogICAgICAgICB9IHdoaWxlIChp
IDwgbV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLnNpemUoKSk7CkBAIC0xOTE4
LDcgKzE5MTgsNyBAQCB2b2lkIEV2YWxDb2RlQ2FjaGU6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIEV2YWxDYWNoZU1hcDo6aXRlcmF0b3IgZW5kID0gbV9jYWNo
ZU1hcC5lbmQoKTsKICAgICBmb3IgKEV2YWxDYWNoZU1hcDo6aXRlcmF0b3IgcHRyID0gbV9jYWNo
ZU1hcC5iZWdpbigpOyBwdHIgIT0gZW5kOyArK3B0cikKLSAgICAgICAgdmlzaXRvci5hcHBlbmQo
JnB0ci0+c2Vjb25kKTsKKyAgICAgICAgdmlzaXRvci5hcHBlbmQoJnB0ci0+dmFsdWUpOwogfQog
CiB2b2lkIENvZGVCbG9jazo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkBA
IC0zMDUyLDggKzMwNTIsOCBAQCBTdHJpbmcgQ29kZUJsb2NrOjpuYW1lRm9yUmVnaXN0ZXIoaW50
IHJlZ2lzdGVyTnVtYmVyKQogewogICAgIFN5bWJvbFRhYmxlOjppdGVyYXRvciBlbmQgPSBtX3N5
bWJvbFRhYmxlLT5lbmQoKTsKICAgICBmb3IgKFN5bWJvbFRhYmxlOjppdGVyYXRvciBwdHIgPSBt
X3N5bWJvbFRhYmxlLT5iZWdpbigpOyBwdHIgIT0gZW5kOyArK3B0cikgewotICAgICAgICBpZiAo
cHRyLT5zZWNvbmQuZ2V0SW5kZXgoKSA9PSByZWdpc3Rlck51bWJlcikKLSAgICAgICAgICAgIHJl
dHVybiBTdHJpbmcocHRyLT5maXJzdCk7CisgICAgICAgIGlmIChwdHItPnZhbHVlLmdldEluZGV4
KCkgPT0gcmVnaXN0ZXJOdW1iZXIpCisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHB0ci0+a2V5
KTsKICAgICB9CiAgICAgaWYgKG5lZWRzQWN0aXZhdGlvbigpICYmIHJlZ2lzdGVyTnVtYmVyID09
IGFjdGl2YXRpb25SZWdpc3RlcigpKQogICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJhY3Rp
dmF0aW9uIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSnVt
cFRhYmxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSnVtcFRhYmxlLmgKaW5k
ZXggYTAxZjkwY2IwZWUzOTJhNGJiYjBkOTIwODdlMTEyZDVmYTk1MTc4ZS4uZjU0YTM3MThmMDYz
YjEyYTU1ZGI3YWQ2MjA5MjEzYjQyZDFhNGZjZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0p1bXBUYWJsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9KdW1wVGFibGUuaApAQCAtNTcsNyArNTcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgICAgIFN0cmluZ09mZnNldFRhYmxlOjpjb25zdF9pdGVyYXRvciBsb2MgPSBvZmZzZXRU
YWJsZS5maW5kKHZhbHVlKTsKICAgICAgICAgICAgIGlmIChsb2MgPT0gZW5kKQogICAgICAgICAg
ICAgICAgIHJldHVybiBkZWZhdWx0T2Zmc2V0OwotICAgICAgICAgICAgcmV0dXJuIGxvYy0+c2Vj
b25kLmJyYW5jaE9mZnNldDsKKyAgICAgICAgICAgIHJldHVybiBsb2MtPnZhbHVlLmJyYW5jaE9m
ZnNldDsKICAgICAgICAgfQogCiAjaWYgRU5BQkxFKEpJVCkKQEAgLTY3LDcgKzY3LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBTdHJpbmdPZmZzZXRUYWJsZTo6Y29uc3RfaXRlcmF0
b3IgbG9jID0gb2Zmc2V0VGFibGUuZmluZCh2YWx1ZSk7CiAgICAgICAgICAgICBpZiAobG9jID09
IGVuZCkKICAgICAgICAgICAgICAgICByZXR1cm4gY3RpRGVmYXVsdDsKLSAgICAgICAgICAgIHJl
dHVybiBsb2MtPnNlY29uZC5jdGlPZmZzZXQ7CisgICAgICAgICAgICByZXR1cm4gbG9jLT52YWx1
ZS5jdGlPZmZzZXQ7CiAgICAgICAgIH0KICNlbmRpZgogICAgIH07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNw
cAppbmRleCA1OWYwZDAyMzQzNDE3YTc0MWJjODI1NzM3ZDI2MTEzY2RjN2EzMjk1Li5mOTIzZTRh
MjhiYmNiMDAzOWE1MzczZTk2Zjg0NTIzZTc5Y2VlMDg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5jcHAK
QEAgLTgxLDcgKzgxLDcgQEAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUqIExhenlPcGVyYW5kVmFs
dWVQcm9maWxlUGFyc2VyOjpnZXRJZlByZXNlbnQoCiAgICAgaWYgKGl0ZXIgPT0gbV9tYXAuZW5k
KCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIAotICAgIHJldHVybiBpdGVyLT5zZWNvbmQ7Cisg
ICAgcmV0dXJuIGl0ZXItPnZhbHVlOwogfQogCiBTcGVjdWxhdGVkVHlwZSBMYXp5T3BlcmFuZFZh
bHVlUHJvZmlsZVBhcnNlcjo6cHJlZGljdGlvbigKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9TYW1wbGluZ1Rvb2wuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1NhbXBsaW5nVG9vbC5jcHAKaW5kZXggZjA3ZGM3OWZiNzgyNThkODYxZDRmNDg1
MTdmMWI1NWIyOTYzOTUzZC4uZjliODI0NWU1NDc3YThmMzBlZDUyMWMzMTI2YmYwMTlkNWNiMmU2
NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NhbXBsaW5nVG9v
bC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NhbXBsaW5nVG9vbC5j
cHAKQEAgLTQxMCw3ICs0MTAsNyBAQCB2b2lkIFNhbXBsaW5nVG9vbDo6ZHVtcChFeGVjU3RhdGUq
IGV4ZWMpCiAgICAgVmVjdG9yPFNjcmlwdFNhbXBsZVJlY29yZCo+IGNvZGVCbG9ja1NhbXBsZXMo
c2NvcGVDb3VudCk7CiAgICAgU2NyaXB0U2FtcGxlUmVjb3JkTWFwOjppdGVyYXRvciBpdGVyID0g
bV9zY29wZVNhbXBsZU1hcC0+YmVnaW4oKTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNjb3Bl
Q291bnQ7ICsraSwgKytpdGVyKQotICAgICAgICBjb2RlQmxvY2tTYW1wbGVzW2ldID0gaXRlci0+
c2Vjb25kLmdldCgpOworICAgICAgICBjb2RlQmxvY2tTYW1wbGVzW2ldID0gaXRlci0+dmFsdWUu
Z2V0KCk7CiAKICAgICBxc29ydChjb2RlQmxvY2tTYW1wbGVzLmJlZ2luKCksIHNjb3BlQ291bnQs
IHNpemVvZihTY3JpcHRTYW1wbGVSZWNvcmQqKSwgY29tcGFyZVNjcmlwdFNhbXBsZVJlY29yZHMp
OwogCkBAIC00NDYsOCArNDQ2LDggQEAgdm9pZCBTYW1wbGluZ1Rvb2w6OmR1bXAoRXhlY1N0YXRl
KiBleGVjKQogICAgICAgICAgICAgICAgIFZlY3RvcjxMaW5lQ291bnRJbmZvPiBsaW5lQ291bnRJ
bmZvKGxpbmVzQ291bnQpOwogICAgICAgICAgICAgICAgIGludCBsaW5lbm8gPSAwOwogICAgICAg
ICAgICAgICAgIGZvciAoSGFzaE1hcDx1bnNpZ25lZCx1bnNpZ25lZD46Oml0ZXJhdG9yIGl0ZXIg
PSBsaW5lQ291bnRzLmJlZ2luKCk7IGl0ZXIgIT0gbGluZUNvdW50cy5lbmQoKTsgKytpdGVyLCAr
K2xpbmVubykgewotICAgICAgICAgICAgICAgICAgICBsaW5lQ291bnRJbmZvW2xpbmVub10ubGlu
ZSA9IGl0ZXItPmZpcnN0OwotICAgICAgICAgICAgICAgICAgICBsaW5lQ291bnRJbmZvW2xpbmVu
b10uY291bnQgPSBpdGVyLT5zZWNvbmQ7CisgICAgICAgICAgICAgICAgICAgIGxpbmVDb3VudElu
Zm9bbGluZW5vXS5saW5lID0gaXRlci0+a2V5OworICAgICAgICAgICAgICAgICAgICBsaW5lQ291
bnRJbmZvW2xpbmVub10uY291bnQgPSBpdGVyLT52YWx1ZTsKICAgICAgICAgICAgICAgICB9CiAK
ICAgICAgICAgICAgICAgICBxc29ydChsaW5lQ291bnRJbmZvLmJlZ2luKCksIGxpbmVzQ291bnQs
IHNpemVvZihMaW5lQ291bnRJbmZvKSwgY29tcGFyZUxpbmVDb3VudEluZm9TYW1wbGluZyk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuY3BwCmluZGV4IDA1NWY2MDVkMjVmZmQ4NzQxZmY4NTA1ZTQwYzc5ZWU1OTA4ZjAz
M2YuLjliNGMyNmI4YjY2ZGM1MzBmYWIwZWU4MzkzN2Q2ODU0NTk3ZmUxZTUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuY3BwCkBAIC0yMzAsNyArMjMwLDcgQEAgYm9vbCBCeXRlY29kZUdlbmVyYXRvcjo6YWRkVmFy
KGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBib29sIGlzQ29uc3RhbnQsIFJlZ2lzdGUKICAgICBT
eW1ib2xUYWJsZTo6QWRkUmVzdWx0IHJlc3VsdCA9IHN5bWJvbFRhYmxlKCkuYWRkKGlkZW50Lmlt
cGwoKSwgbmV3RW50cnkpOwogCiAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAg
ICByMCA9ICZyZWdpc3RlckZvcihyZXN1bHQuaXRlcmF0b3ItPnNlY29uZC5nZXRJbmRleCgpKTsK
KyAgICAgICAgcjAgPSAmcmVnaXN0ZXJGb3IocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXRJbmRl
eCgpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtMjQ4LDggKzI0OCw4IEBA
IGludCBCeXRlY29kZUdlbmVyYXRvcjo6YWRkR2xvYmFsVmFyKAogICAgICAgICBuZXdFbnRyeS5h
dHRlbXB0VG9XYXRjaCgpOwogICAgIFN5bWJvbFRhYmxlOjpBZGRSZXN1bHQgcmVzdWx0ID0gc3lt
Ym9sVGFibGUoKS5hZGQoaWRlbnQuaW1wbCgpLCBuZXdFbnRyeSk7CiAgICAgaWYgKCFyZXN1bHQu
aXNOZXdFbnRyeSkgewotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZC5ub3RpZnlXcml0
ZSgpOwotICAgICAgICBpbmRleCA9IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLmdldEluZGV4KCk7
CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUubm90aWZ5V3JpdGUoKTsKKyAgICAgICAg
aW5kZXggPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldEluZGV4KCk7CiAgICAgfQogICAgIHJl
dHVybiBpbmRleDsKIH0KQEAgLTExMzYsNyArMTEzNiw3IEBAIHVuc2lnbmVkIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjphZGRDb25zdGFudChjb25zdCBJZGVudGlmaWVyJiBpZGVudCkKICAgICBpZiAocmVz
dWx0LmlzTmV3RW50cnkpCiAgICAgICAgIG1fY29kZUJsb2NrLT5hZGRJZGVudGlmaWVyKElkZW50
aWZpZXIobV9nbG9iYWxEYXRhLCByZXApKTsKIAotICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3It
PnNlY29uZDsKKyAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIAogLy8gV2Ug
Y2FuJ3QgaGFzaCBKU1ZhbHVlKCksIHNvIHdlIHVzZSBhIGRlZGljYXRlZCBkYXRhIG1lbWJlciB0
byBjYWNoZSBpdC4KQEAgLTExNjUsNyArMTE2NSw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjphZGRDb25zdGFudFZhbHVlKEpTVmFsdWUgdikKICAgICAgICAgKyttX25leHRDb25z
dGFudE9mZnNldDsKICAgICAgICAgbV9jb2RlQmxvY2stPmFkZENvbnN0YW50KHYpOwogICAgIH0g
ZWxzZQotICAgICAgICBpbmRleCA9IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICBp
bmRleCA9IHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAgICAgcmV0dXJuICZtX2NvbnN0YW50UG9v
bFJlZ2lzdGVyc1tpbmRleF07CiB9CiAKQEAgLTEzMTEsNyArMTMxMSw3IEBAIFJlZ2lzdGVySUQq
IEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TG9hZChSZWdpc3RlcklEKiBkc3QsIGRvdWJsZSBudW1i
ZXIpCiAgICAgLy8gd29yayBjb3JyZWN0bHkgd2l0aCBOYU4gYXMgYSBrZXkuCiAgICAgaWYgKGlz
bmFuKG51bWJlcikgfHwgbnVtYmVyID09IEhhc2hUcmFpdHM8ZG91YmxlPjo6ZW1wdHlWYWx1ZSgp
IHx8IEhhc2hUcmFpdHM8ZG91YmxlPjo6aXNEZWxldGVkVmFsdWUobnVtYmVyKSkKICAgICAgICAg
cmV0dXJuIGVtaXRMb2FkKGRzdCwganNOdW1iZXIobnVtYmVyKSk7Ci0gICAgSlNWYWx1ZSYgdmFs
dWVJbk1hcCA9IG1fbnVtYmVyTWFwLmFkZChudW1iZXIsIEpTVmFsdWUoKSkuaXRlcmF0b3ItPnNl
Y29uZDsKKyAgICBKU1ZhbHVlJiB2YWx1ZUluTWFwID0gbV9udW1iZXJNYXAuYWRkKG51bWJlciwg
SlNWYWx1ZSgpKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCF2YWx1ZUluTWFwKQogICAgICAg
ICB2YWx1ZUluTWFwID0ganNOdW1iZXIobnVtYmVyKTsKICAgICByZXR1cm4gZW1pdExvYWQoZHN0
LCB2YWx1ZUluTWFwKTsKQEAgLTEzMTksNyArMTMxOSw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2Rl
R2VuZXJhdG9yOjplbWl0TG9hZChSZWdpc3RlcklEKiBkc3QsIGRvdWJsZSBudW1iZXIpCiAKIFJl
Z2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TG9hZChSZWdpc3RlcklEKiBkc3QsIGNv
bnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIpCiB7Ci0gICAgSlNTdHJpbmcqJiBzdHJpbmdJbk1h
cCA9IG1fc3RyaW5nTWFwLmFkZChpZGVudGlmaWVyLmltcGwoKSwgMCkuaXRlcmF0b3ItPnNlY29u
ZDsKKyAgICBKU1N0cmluZyomIHN0cmluZ0luTWFwID0gbV9zdHJpbmdNYXAuYWRkKGlkZW50aWZp
ZXIuaW1wbCgpLCAwKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCFzdHJpbmdJbk1hcCkKICAg
ICAgICAgc3RyaW5nSW5NYXAgPSBqc093bmVkU3RyaW5nKGdsb2JhbERhdGEoKSwgaWRlbnRpZmll
ci5zdHJpbmcoKSk7CiAgICAgcmV0dXJuIGVtaXRMb2FkKGRzdCwgSlNWYWx1ZShzdHJpbmdJbk1h
cCkpOwpAQCAtMTg4OCw3ICsxODg4LDcgQEAgdW5zaWduZWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmFk
ZENvbnN0YW50QnVmZmVyKHVuc2lnbmVkIGxlbmd0aCkKIAogSlNTdHJpbmcqIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjphZGRTdHJpbmdDb25zdGFudChjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKQog
ewotICAgIEpTU3RyaW5nKiYgc3RyaW5nSW5NYXAgPSBtX3N0cmluZ01hcC5hZGQoaWRlbnRpZmll
ci5pbXBsKCksIDApLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgSlNTdHJpbmcqJiBzdHJpbmdJbk1h
cCA9IG1fc3RyaW5nTWFwLmFkZChpZGVudGlmaWVyLmltcGwoKSwgMCkuaXRlcmF0b3ItPnZhbHVl
OwogICAgIGlmICghc3RyaW5nSW5NYXApIHsKICAgICAgICAgc3RyaW5nSW5NYXAgPSBqc1N0cmlu
ZyhnbG9iYWxEYXRhKCksIGlkZW50aWZpZXIuc3RyaW5nKCkpOwogICAgICAgICBhZGRDb25zdGFu
dFZhbHVlKHN0cmluZ0luTWFwKTsKQEAgLTE5NjAsOCArMTk2MCw4IEBAIFJlZ2lzdGVySUQqIEJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0TGF6eU5ld0Z1bmN0aW9uKFJlZ2lzdGVySUQqIGRzdCwgRnVu
Y3Rpb25Cb2R5CiB7CiAgICAgRnVuY3Rpb25PZmZzZXRNYXA6OkFkZFJlc3VsdCBwdHIgPSBtX2Z1
bmN0aW9uT2Zmc2V0cy5hZGQoZnVuY3Rpb24sIDApOwogICAgIGlmIChwdHIuaXNOZXdFbnRyeSkK
LSAgICAgICAgcHRyLml0ZXJhdG9yLT5zZWNvbmQgPSBtX2NvZGVCbG9jay0+YWRkRnVuY3Rpb25E
ZWNsKEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRlKCptX2dsb2JhbERhdGEsIGZ1bmN0aW9uKSk7
Ci0gICAgcmV0dXJuIGVtaXROZXdGdW5jdGlvbkludGVybmFsKGRzdCwgcHRyLml0ZXJhdG9yLT5z
ZWNvbmQsIHRydWUpOworICAgICAgICBwdHIuaXRlcmF0b3ItPnZhbHVlID0gbV9jb2RlQmxvY2st
PmFkZEZ1bmN0aW9uRGVjbChGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZSgqbV9nbG9iYWxEYXRh
LCBmdW5jdGlvbikpOworICAgIHJldHVybiBlbWl0TmV3RnVuY3Rpb25JbnRlcm5hbChkc3QsIHB0
ci5pdGVyYXRvci0+dmFsdWUsIHRydWUpOwogfQogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdE5ld0Z1bmN0aW9uSW50ZXJuYWwoUmVnaXN0ZXJJRCogZHN0LCB1bnNpZ25lZCBp
bmRleCwgYm9vbCBkb051bGxDaGVjaykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAppbmRleCBlNGQzNTQ3MWZhZWUyNzNiODNhMmVm
MTBhNTU3N2FjMjE2ZGY1M2Y0Li41ODEwMmI5YmQyNTVmZmM3ZDgwYjIzODYzMjFlODgxYTFkZmJk
YjUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVz
Q29kZWdlbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rl
c0NvZGVnZW4uY3BwCkBAIC0yNjAsNyArMjYwLDcgQEAgUmVnaXN0ZXJJRCogUHJvcGVydHlMaXN0
Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGUK
ICAgICAgICAgICAgIEdldHRlclNldHRlclBhaXIgcGFpcihub2RlLCBzdGF0aWNfY2FzdDxQcm9w
ZXJ0eU5vZGUqPigwKSk7CiAgICAgICAgICAgICBHZXR0ZXJTZXR0ZXJNYXA6OkFkZFJlc3VsdCBy
ZXN1bHQgPSBtYXAuYWRkKG5vZGUtPm5hbWUoKS5pbXBsKCksIHBhaXIpOwogICAgICAgICAgICAg
aWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgICAgICByZXN1bHQuaXRlcmF0b3It
PnNlY29uZC5zZWNvbmQgPSBub2RlOworICAgICAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+
dmFsdWUuc2Vjb25kID0gbm9kZTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIEl0ZXJhdGUgb3Zl
ciB0aGUgcmVtYWluaW5nIHByb3BlcnRpZXMgaW4gdGhlIGxpc3QuCkBAIC0yNzgsNyArMjc4LDcg
QEAgUmVnaXN0ZXJJRCogUHJvcGVydHlMaXN0Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2Vu
ZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGUKICAgICAgICAgICAgIEFTU0VSVChub2RlLT5tX3R5
cGUgPT0gUHJvcGVydHlOb2RlOjpHZXR0ZXIgfHwgbm9kZS0+bV90eXBlID09IFByb3BlcnR5Tm9k
ZTo6U2V0dGVyKTsKICAgICAgICAgICAgIEdldHRlclNldHRlck1hcDo6aXRlcmF0b3IgaXQgPSBt
YXAuZmluZChub2RlLT5uYW1lKCkuaW1wbCgpKTsKICAgICAgICAgICAgIEFTU0VSVChpdCAhPSBt
YXAuZW5kKCkpOwotICAgICAgICAgICAgR2V0dGVyU2V0dGVyUGFpciYgcGFpciA9IGl0LT5zZWNv
bmQ7CisgICAgICAgICAgICBHZXR0ZXJTZXR0ZXJQYWlyJiBwYWlyID0gaXQtPnZhbHVlOwogCiAg
ICAgICAgICAgICAvLyBXYXMgdGhpcyBhbHJlYWR5IGdlbmVyYXRlZCBhcyBhIHBhcnQgb2YgaXRz
IHBhcnRuZXI/CiAgICAgICAgICAgICBpZiAocGFpci5zZWNvbmQgPT0gbm9kZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3BwCmluZGV4IDhkMzYwZWZjMjY1ODcw
OWUwYTYwM2U1YTA5ZjI3MzVlNDY5MWY2ZjIuLjM3MzFiMDQ3MzAyZGEzOTEyZTU3ODhhNjBhZGQx
MmNiNjRjOGI0ZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9E
ZWJ1Z2dlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2Vy
LmNwcApAQCAtNTksNyArNTksNyBAQCBpbmxpbmUgUmVjb21waWxlcjo6flJlY29tcGlsZXIoKQog
ICAgIC8vIEphdmFTY3JpcHQgaW4gdGhlIGluc3BlY3Rvci4KICAgICBTb3VyY2VQcm92aWRlck1h
cDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9zb3VyY2VQcm92aWRlcnMuZW5kKCk7CiAgICAgZm9y
IChTb3VyY2VQcm92aWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1fc291cmNlUHJvdmlk
ZXJzLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCi0gICAgICAgIG1fZGVidWdnZXItPnNv
dXJjZVBhcnNlZChpdGVyLT5zZWNvbmQsIGl0ZXItPmZpcnN0LCAtMSwgU3RyaW5nKCkpOworICAg
ICAgICBtX2RlYnVnZ2VyLT5zb3VyY2VQYXJzZWQoaXRlci0+dmFsdWUsIGl0ZXItPmtleSwgLTEs
IFN0cmluZygpKTsKIH0KIAogaW5saW5lIHZvaWQgUmVjb21waWxlcjo6b3BlcmF0b3IoKShKU0Nl
bGwqIGNlbGwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3Vt
ZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAppbmRleCBmZTgzOWQ1NGYwNDE1ZDY5
MDY3NWUyMzhkOTk1ZGEyMTdiZjg1NTM2Li42MDA1ZTA5NDE0YzFhZGZhNDQ5MmFiMmJmZWZmOGRk
MmQyMTdkNjM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3Vt
ZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKQEAgLTIxNiw3ICsyMTYsNyBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBpZiBp
dCdzIGEgdmFyaWFibGUgdGhhdCB3ZSB0aGluayBpcyBhbGlhc2VkIHRvCiAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyB0aGUgYXJndW1lbnRzLCB0aGF0IHdlIGtub3cgdGhhdCBpdCBtaWdodCBh
Y3R1YWxseSBub3QgYmUuCiAgICAgICAgICAgICAgICAgICAgICAgICBBcmd1bWVudHNBbGlhc2lu
Z0RhdGEmIGRhdGEgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fYXJndW1lbnRzQWxp
YXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT5zZWNvbmQ7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9hcmd1bWVudHNBbGlhc2luZy5maW5kKHZhcmlhYmxlQWNjZXNzRGF0YSkt
PnZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXJnZU5vbkFyZ3VtZW50c0Fz
c2lnbm1lbnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEubWVyZ2VDYWxsQ29udGV4
dChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwpAQCAtMjM0LDcgKzIzNCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
IEFyZ3VtZW50c0FsaWFzaW5nRGF0YSYgZGF0YSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICBt
X2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+c2Vjb25kOworICAg
ICAgICAgICAgICAgICAgICAgICAgbV9hcmd1bWVudHNBbGlhc2luZy5maW5kKHZhcmlhYmxlQWNj
ZXNzRGF0YSktPnZhbHVlOwogICAgICAgICAgICAgICAgICAgICBkYXRhLm1lcmdlQXJndW1lbnRz
QXNzaWdubWVudCgpOwogICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGVuc3VyZXMgdGhhdCB0
aGUgdmFyaWFibGUncyB1c2VzIGFyZSBpbiB0aGUgc2FtZSBjb250ZXh0IGFzCiAgICAgICAgICAg
ICAgICAgICAgIC8vIHRoZSBhcmd1bWVudHMgaXQgaXMgYWxpYXNpbmcuCkBAIC0yNDksNyArMjQ5
LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRh
LT5pc0NhcHR1cmVkKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICAgICAgQXJndW1lbnRzQWxpYXNpbmdEYXRhJiBkYXRhID0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIG1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT5z
ZWNvbmQ7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQo
dmFyaWFibGVBY2Nlc3NEYXRhKS0+dmFsdWU7CiAgICAgICAgICAgICAgICAgICAgIGRhdGEubWVy
Z2VDYWxsQ29udGV4dChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQpAQCAtMjU5LDcgKzI1OSw3IEBA
IHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+aXND
YXB0dXJlZCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgICAgIEFyZ3VtZW50c0FsaWFzaW5nRGF0YSYgZGF0YSA9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+c2Vjb25k
OworICAgICAgICAgICAgICAgICAgICAgICAgbV9hcmd1bWVudHNBbGlhc2luZy5maW5kKHZhcmlh
YmxlQWNjZXNzRGF0YSktPnZhbHVlOwogICAgICAgICAgICAgICAgICAgICBkYXRhLm1lcmdlQ2Fs
bENvbnRleHQobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CiAgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgICAgICAvLyBJZiBhIHZhcmlhYmxlIGlzIHVzZWQgaW4g
YSBmbHVzaCB0aGVuIGJ5IGRlZmluaXRpb24gaXQgZXNjYXBlcy4KQEAgLTI3Miw3ICsyNzIsNyBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmlz
Q2FwdHVyZWQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgICAgICBBcmd1bWVudHNBbGlhc2luZ0RhdGEmIGRhdGEgPQotICAgICAgICAgICAgICAgICAg
ICAgICAgbV9hcmd1bWVudHNBbGlhc2luZy5maW5kKHZhcmlhYmxlQWNjZXNzRGF0YSktPnNlY29u
ZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJp
YWJsZUFjY2Vzc0RhdGEpLT52YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXJnZU5v
bkFyZ3VtZW50c0Fzc2lnbm1lbnQoKTsKICAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXJnZUNh
bGxDb250ZXh0KG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKQEAgLTM1Niw3ICszNTYsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIEFyZ3VtZW50c0FsaWFzaW5n
RGF0YSYgZGF0YSA9Ci0gICAgICAgICAgICAgICAgICAgIG1fYXJndW1lbnRzQWxpYXNpbmcuZmlu
ZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT5zZWNvbmQ7CisgICAgICAgICAgICAgICAgICAgIG1fYXJn
dW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT52YWx1ZTsKICAgICAgICAg
ICAgICAgICBpZiAoZGF0YS5pc1ZhbGlkKCkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgICAgIApAQCAtMzc1LDcgKzM3NSw3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICBkYXRhTG9nKCJDYXB0dXJlZCIpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAg
ICAgICAgICAgQXJndW1lbnRzQWxpYXNpbmdEYXRhJiBkYXRhID0KLSAgICAgICAgICAgICAgICAg
ICAgbV9hcmd1bWVudHNBbGlhc2luZy5maW5kKHZhcmlhYmxlQWNjZXNzRGF0YSktPnNlY29uZDsK
KyAgICAgICAgICAgICAgICAgICAgbV9hcmd1bWVudHNBbGlhc2luZy5maW5kKHZhcmlhYmxlQWNj
ZXNzRGF0YSktPnZhbHVlOwogICAgICAgICAgICAgICAgIGJvb2wgZmlyc3QgPSB0cnVlOwogICAg
ICAgICAgICAgICAgIGlmIChkYXRhLmNhbGxDb250ZXh0SXNWYWxpZCgpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIGlmICghZmlyc3QpCkBAIC00NTYsNyArNDU2LDcgQEAgcHVibGljOgogICAgICAg
ICAgICAgICAgICAgICAvLyB0aGluZ3MuIE5vdGUgYWxzbyB0aGF0IHRoZSBTZXRMb2NhbCBzaG91
bGQgYmVjb21lIGRlYWQgYXMgc29vbiBhcwogICAgICAgICAgICAgICAgICAgICAvLyB3ZSByZXBs
YWNlIGFsbCB1c2VzIG9mIHRoaXMgdmFyaWFibGUgd2l0aCBHZXRNeUFyZ3VtZW50c0xlbmd0aCBh
bmQKICAgICAgICAgICAgICAgICAgICAgLy8gR2V0TXlBcmd1bWVudEJ5VmFsLgotICAgICAgICAg
ICAgICAgICAgICBBU1NFUlQobV9hcmd1bWVudHNBbGlhc2luZy5maW5kKHZhcmlhYmxlQWNjZXNz
RGF0YSktPnNlY29uZC5pc1ZhbGlkKCkpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQobV9h
cmd1bWVudHNBbGlhc2luZy5maW5kKHZhcmlhYmxlQWNjZXNzRGF0YSktPnZhbHVlLmlzVmFsaWQo
KSk7CiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gdmFyaWFibGVBY2Nlc3NEYXRhLT5t
ZXJnZUlzQXJndW1lbnRzQWxpYXModHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgIH0KQEAgLTcxNyw3ICs3MTcsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgpKQogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBBcmd1bWVudHNBbGlhc2luZ0RhdGEm
IGRhdGEgPSBtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+c2Vj
b25kOworICAgICAgICAgICAgQXJndW1lbnRzQWxpYXNpbmdEYXRhJiBkYXRhID0gbV9hcmd1bWVu
dHNBbGlhc2luZy5maW5kKHZhcmlhYmxlQWNjZXNzRGF0YSktPnZhbHVlOwogICAgICAgICAgICAg
ZGF0YS5lc2NhcGVzID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC03
NjYsNyArNzY2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+
aXNDYXB0dXJlZCgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICAgICAgQXJn
dW1lbnRzQWxpYXNpbmdEYXRhJiBkYXRhID0gbV9hcmd1bWVudHNBbGlhc2luZy5maW5kKHZhcmlh
YmxlQWNjZXNzRGF0YSktPnNlY29uZDsKKyAgICAgICAgQXJndW1lbnRzQWxpYXNpbmdEYXRhJiBk
YXRhID0gbV9hcmd1bWVudHNBbGlhc2luZy5maW5kKHZhcmlhYmxlQWNjZXNzRGF0YSktPnZhbHVl
OwogICAgICAgICBkYXRhLm1lcmdlQ2FsbENvbnRleHQobm9kZS5jb2RlT3JpZ2luLmlubGluZUNh
bGxGcmFtZSk7CiAgICAgfQogICAgIApAQCAtNzg4LDcgKzc4OCw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkpCiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICBBcmd1bWVudHNBbGlhc2luZ0RhdGEmIGRhdGEgPQot
ICAgICAgICAgICAgICAgIG1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0Rh
dGEpLT5zZWNvbmQ7CisgICAgICAgICAgICAgICAgbV9hcmd1bWVudHNBbGlhc2luZy5maW5kKHZh
cmlhYmxlQWNjZXNzRGF0YSktPnZhbHVlOwogICAgICAgICAgICAgaWYgKCFkYXRhLmlzVmFsaWQo
KSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK
QEAgLTgyNCw3ICs4MjQsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICYmICFtX2NyZWF0
ZXNBcmd1bWVudHMuY29udGFpbnMoY2hpbGQuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwog
ICAgICAgICAgICAgYm9vbCBpc0FsaWFzZWRBcmd1bWVudHNSZWdpc3RlciA9CiAgICAgICAgICAg
ICAgICAgIXZhcmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgpCi0gICAgICAgICAgICAgICAg
JiYgbV9hcmd1bWVudHNBbGlhc2luZy5maW5kKHZhcmlhYmxlQWNjZXNzRGF0YSktPnNlY29uZC5p
c1ZhbGlkKCkKKyAgICAgICAgICAgICAgICAmJiBtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFy
aWFibGVBY2Nlc3NEYXRhKS0+dmFsdWUuaXNWYWxpZCgpCiAgICAgICAgICAgICAgICAgJiYgIW1f
Y3JlYXRlc0FyZ3VtZW50cy5jb250YWlucyhjaGlsZC5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFt
ZSk7CiAgICAgICAgICAgICBpZiAoIWlzRGVhZEFyZ3VtZW50c1JlZ2lzdGVyICYmICFpc0FsaWFz
ZWRBcmd1bWVudHNSZWdpc3RlcikKICAgICAgICAgICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXNzZW1ibHlIZWxwZXJzLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXNzZW1ibHlIZWxwZXJzLmNwcAppbmRleCA3Nzk5ZWU1
MDU5MzVhZDRlMTNiYzNjZTE4ZDBiNzMyYTNhYTQyOTZlLi5iNWI2Njg0MThhNjNhN2M5NDRkZjVk
YzQ3YTYwNGIxZTUzNTc0MWQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fzc2VtYmx5SGVscGVycy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBc3NlbWJseUhlbHBlcnMuY3BwCkBAIC00OSw5ICs0OSw5IEBAIFZlY3RvcjxCeXRlY29kZUFu
ZE1hY2hpbmVPZmZzZXQ+JiBBc3NlbWJseUhlbHBlcnM6OmRlY29kZWRDb2RlTWFwRm9yKENvZGVC
bG9jayoKICAgICBIYXNoTWFwPENvZGVCbG9jayosIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVP
ZmZzZXQ+ID46OkFkZFJlc3VsdCByZXN1bHQgPSBtX2RlY29kZWRDb2RlTWFwcy5hZGQoY29kZUJs
b2NrLCBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PigpKTsKICAgICAKICAgICBpZiAo
cmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIGNvZGVCbG9jay0+aml0Q29kZU1hcCgpLT5kZWNv
ZGUocmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOworICAgICAgICBjb2RlQmxvY2stPmppdENvZGVN
YXAoKS0+ZGVjb2RlKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwogICAgIAotICAgIHJldHVybiBy
ZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZTsKIH0KIAogI2lmIEVOQUJMRShTQU1QTElOR19GTEFHUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVDYWNoZS5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCeXRlQ29kZUNhY2hlLmgKaW5kZXggYWI4OGU5OWU1YjdhMGExYWM1NDUyYzVj
OTYzNWZlZWYwMjFlZDAwZi4uNmI5MDU2ZTU0YTE4YzZiZmQwMDEzMDNiOGY0ZTRlZTY1YWQwNjRj
NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZUNhY2hl
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZUNhY2hlLmgKQEAg
LTEzMiwxMCArMTMyLDEwIEBAIHB1YmxpYzoKICAgICAgICAgTWFwOjppdGVyYXRvciBiZWdpbiA9
IG1fbWFwLmJlZ2luKCk7CiAgICAgICAgIE1hcDo6aXRlcmF0b3IgZW5kID0gbV9tYXAuZW5kKCk7
CiAgICAgICAgIGZvciAoTWFwOjppdGVyYXRvciBpdGVyID0gYmVnaW47IGl0ZXIgIT0gZW5kOyAr
K2l0ZXIpIHsKLSAgICAgICAgICAgIGlmICghaXRlci0+c2Vjb25kLmNvZGVCbG9jaykKKyAgICAg
ICAgICAgIGlmICghaXRlci0+dmFsdWUuY29kZUJsb2NrKQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgaWYgKGl0ZXItPnNlY29uZC5vd25lZCkgewotICAgICAgICAgICAg
ICAgIGRlbGV0ZSBpdGVyLT5zZWNvbmQuY29kZUJsb2NrOworICAgICAgICAgICAgaWYgKGl0ZXIt
PnZhbHVlLm93bmVkKSB7CisgICAgICAgICAgICAgICAgZGVsZXRlIGl0ZXItPnZhbHVlLmNvZGVC
bG9jazsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQpAQCAtMTQ1LDcgKzE0NSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIE1hcDo6aXRlcmF0
b3IgaXRlciA9IG1fbWFwLmZpbmQoa2V5KTsKICAgICAgICAgaWYgKGl0ZXIgIT0gbV9tYXAuZW5k
KCkpCi0gICAgICAgICAgICByZXR1cm4gaXRlci0+c2Vjb25kLmNvZGVCbG9jazsKKyAgICAgICAg
ICAgIHJldHVybiBpdGVyLT52YWx1ZS5jb2RlQmxvY2s7CiAgICAgICAgIAogICAgICAgICBCeXRl
Q29kZUNhY2hlVmFsdWUgdmFsdWU7CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAppbmRleCBmOGVmMzdiMDM0ZGY5MDIxMWY0NjYx
MmUzMGIzNGZkZDg0ZDE4MDc0Li40MGFhNDJlYWQ0ZTRjOWM0YzY3OTBiNWMzOWZhYjIyNGVhYjM0
NGRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFy
c2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcApAQCAtNjY2LDkgKzY2Niw5IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBIYXNoTWFw
PEpTQ2VsbCosIE5vZGVJbmRleD46OkFkZFJlc3VsdCByZXN1bHQgPSBtX2NlbGxDb25zdGFudE5v
ZGVzLmFkZChjZWxsLCBOb05vZGUpOwogICAgICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpCi0g
ICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IGFkZFRvR3JhcGgoV2Vha0pTQ29u
c3RhbnQsIE9wSW5mbyhjZWxsKSk7CisgICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVl
ID0gYWRkVG9HcmFwaChXZWFrSlNDb25zdGFudCwgT3BJbmZvKGNlbGwpKTsKICAgICAgICAgCi0g
ICAgICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdC5pdGVyYXRvci0+dmFsdWU7CiAgICAgfQogICAgIAogICAgIENvZGVPcmlnaW4gY3VycmVu
dENvZGVPcmlnaW4oKQpAQCAtMzIyMiw3ICszMjIyLDcgQEAgQnl0ZUNvZGVQYXJzZXI6OklubGlu
ZVN0YWNrRW50cnk6OklubGluZVN0YWNrRW50cnkoCiAgICAgICAgICAgICBJZGVudGlmaWVyTWFw
OjpBZGRSZXN1bHQgcmVzdWx0ID0gYnl0ZUNvZGVQYXJzZXItPm1faWRlbnRpZmllck1hcC5hZGQo
cmVwLCBieXRlQ29kZVBhcnNlci0+bV9jb2RlQmxvY2stPm51bWJlck9mSWRlbnRpZmllcnMoKSk7
CiAgICAgICAgICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpCiAgICAgICAgICAgICAgICAgYnl0
ZUNvZGVQYXJzZXItPm1fY29kZUJsb2NrLT5hZGRJZGVudGlmaWVyKElkZW50aWZpZXIoYnl0ZUNv
ZGVQYXJzZXItPm1fZ2xvYmFsRGF0YSwgcmVwKSk7Ci0gICAgICAgICAgICBtX2lkZW50aWZpZXJS
ZW1hcFtpXSA9IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICAgICAgbV9pZGVudGlm
aWVyUmVtYXBbaV0gPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogICAgICAgICB9CiAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29kZUJsb2NrLT5udW1iZXJPZkNvbnN0YW50UmVnaXN0
ZXJzKCk7ICsraSkgewogICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGNvZGVCbG9jay0+Z2V0
Q29uc3RhbnQoaSArIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKQEAgLTMyNDAsNyArMzI0
MCw3IEBAIEJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmVTdGFja0VudHJ5
KAogICAgICAgICAgICAgICAgIGJ5dGVDb2RlUGFyc2VyLT5tX2NvZGVCbG9jay0+YWRkQ29uc3Rh
bnQodmFsdWUpOwogICAgICAgICAgICAgICAgIGJ5dGVDb2RlUGFyc2VyLT5tX2NvbnN0YW50cy5h
cHBlbmQoQ29uc3RhbnRSZWNvcmQoKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX2Nv
bnN0YW50UmVtYXBbaV0gPSByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgICAgIG1f
Y29uc3RhbnRSZW1hcFtpXSA9IHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgIH0KICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvZGVCbG9jay0+bnVtYmVyT2ZHbG9iYWxS
ZXNvbHZlSW5mb3MoKTsgKytpKQogICAgICAgICAgICAgYnl0ZUNvZGVQYXJzZXItPm1fY29kZUJs
b2NrLT5hZGRHbG9iYWxSZXNvbHZlSW5mbyhzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6
bWF4KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1
cmVDaGVja0hvaXN0aW5nUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
dHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCmluZGV4IGY2ZmUxMjdhMzBjMjQ1MzU2ODJi
MTdkOGFiYjY1ZGUyYzEzZWY2OTkuLmQ1NzFjMTU2Njg3ZGEzZWY4M2M0MWU3OWMxYmNjNmY2ZDcx
ODEwOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJl
Q2hlY2tIb2lzdGluZ1BoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAKQEAgLTEyOCw3ICsxMjgsNyBAQCBwdWJs
aWM6CiAgICAgICAgICAgICBkYXRhTG9nKCJaZXJvaW5nIHRoZSBzdHJ1Y3R1cmUgdG8gaG9pc3Qg
Zm9yICVzIGJlY2F1c2UgdGhlIHJhdGlvIGlzICVsZi5cbiIsCiAgICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGgubmFtZU9mVmFyaWFibGVBY2Nlc3NEYXRhKHZhcmlhYmxlKSwgdmFyaWFibGUtPnZv
dGVSYXRpbygpKTsKICNlbmRpZgotICAgICAgICAgICAgaXRlci0+c2Vjb25kLm1fc3RydWN0dXJl
ID0gMDsKKyAgICAgICAgICAgIGl0ZXItPnZhbHVlLm1fc3RydWN0dXJlID0gMDsKICAgICAgICAg
fQogICAgICAgICAKICAgICAgICAgLy8gRGlzYWJsZSBzdHJ1Y3R1cmUgY2hlY2sgaG9pc3Rpbmcg
Zm9yIHZhcmlhYmxlcyB0aGF0IGNyb3NzIHRoZSBPU1IgZW50cnkgdGhhdApAQCAtMTUzLDcgKzE1
Myw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBIYXNoTWFwPFZhcmlhYmxlQWNjZXNzRGF0
YSosIENoZWNrRGF0YT46Oml0ZXJhdG9yIGl0ZXIgPSBtX21hcC5maW5kKHZhcmlhYmxlKTsKICAg
ICAgICAgICAgICAgICBpZiAoaXRlciA9PSBtX21hcC5lbmQoKSkKICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgaWYgKCFpdGVyLT5zZWNvbmQubV9zdHJ1Y3R1
cmUpCisgICAgICAgICAgICAgICAgaWYgKCFpdGVyLT52YWx1ZS5tX3N0cnVjdHVyZSkKICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9
IG1fZ3JhcGgubV9tdXN0SGFuZGxlVmFsdWVzW2ldOwogICAgICAgICAgICAgICAgIGlmICghdmFs
dWUgfHwgIXZhbHVlLmlzQ2VsbCgpKSB7CkBAIC0xNjEsMTUgKzE2MSwxNSBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIlplcm9pbmcgdGhlIHN0cnVjdHVyZSB0byBob2lz
dCBmb3IgJXMgYmVjYXVzZSB0aGUgT1NSIGVudHJ5IHZhbHVlIGlzIG5vdCBhIGNlbGw6ICVzLlxu
IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm5hbWVPZlZhcmlhYmxlQWNj
ZXNzRGF0YSh2YXJpYWJsZSksIHZhbHVlLmRlc2NyaXB0aW9uKCkpOwogI2VuZGlmCi0gICAgICAg
ICAgICAgICAgICAgIGl0ZXItPnNlY29uZC5tX3N0cnVjdHVyZSA9IDA7CisgICAgICAgICAgICAg
ICAgICAgIGl0ZXItPnZhbHVlLm1fc3RydWN0dXJlID0gMDsKICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5h
c0NlbGwoKS0+c3RydWN0dXJlKCkgIT0gaXRlci0+c2Vjb25kLm1fc3RydWN0dXJlKSB7CisgICAg
ICAgICAgICAgICAgaWYgKHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKSAhPSBpdGVyLT52YWx1
ZS5tX3N0cnVjdHVyZSkgewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9T
RSkKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiWmVyb2luZyB0aGUgc3RydWN0dXJlIHRv
IGhvaXN0IGZvciAlcyBiZWNhdXNlIHRoZSBPU1IgZW50cnkgdmFsdWUgaGFzIHN0cnVjdHVyZSAl
cCBhbmQgd2Ugd2FudGVkICVwLlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dy
YXBoLm5hbWVPZlZhcmlhYmxlQWNjZXNzRGF0YSh2YXJpYWJsZSksIHZhbHVlLmFzQ2VsbCgpLT5z
dHJ1Y3R1cmUoKSwgaXRlci0+c2Vjb25kLm1fc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX2dyYXBoLm5hbWVPZlZhcmlhYmxlQWNjZXNzRGF0YSh2YXJpYWJsZSksIHZh
bHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKSwgaXRlci0+dmFsdWUubV9zdHJ1Y3R1cmUpOwogI2Vu
ZGlmCi0gICAgICAgICAgICAgICAgICAgIGl0ZXItPnNlY29uZC5tX3N0cnVjdHVyZSA9IDA7Cisg
ICAgICAgICAgICAgICAgICAgIGl0ZXItPnZhbHVlLm1fc3RydWN0dXJlID0gMDsKICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpA
QCAtMjk2LDE1ICsyOTYsMTUgQEAgcHVibGljOgogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFH
QVRJT05fVkVSQk9TRSkKICAgICAgICAgZm9yIChIYXNoTWFwPFZhcmlhYmxlQWNjZXNzRGF0YSos
IENoZWNrRGF0YT46Oml0ZXJhdG9yIGl0ID0gbV9tYXAuYmVnaW4oKTsKICAgICAgICAgICAgICBp
dCAhPSBtX21hcC5lbmQoKTsgKytpdCkgewotICAgICAgICAgICAgaWYgKCFpdC0+c2Vjb25kLm1f
c3RydWN0dXJlKSB7Ci0gICAgICAgICAgICAgICAgZGF0YUxvZygiTm90IGhvaXN0aW5nIGNoZWNr
cyBmb3IgJXMgYmVjYXVzZSBvZiBoZXVyaXN0aWNzLlxuIiwgbV9ncmFwaC5uYW1lT2ZWYXJpYWJs
ZUFjY2Vzc0RhdGEoaXQtPmZpcnN0KSk7CisgICAgICAgICAgICBpZiAoIWl0LT52YWx1ZS5tX3N0
cnVjdHVyZSkgeworICAgICAgICAgICAgICAgIGRhdGFMb2coIk5vdCBob2lzdGluZyBjaGVja3Mg
Zm9yICVzIGJlY2F1c2Ugb2YgaGV1cmlzdGljcy5cbiIsIG1fZ3JhcGgubmFtZU9mVmFyaWFibGVB
Y2Nlc3NEYXRhKGl0LT5rZXkpKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGlmIChpdC0+c2Vjb25kLm1faXNDbG9iYmVyZWQgJiYgIWl0LT5z
ZWNvbmQubV9zdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SXNTdGlsbFZhbGlkKCkp
IHsKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCJOb3QgaG9pc3RpbmcgY2hlY2tzIGZvciAlcyBi
ZWNhdXNlIHRoZSBzdHJ1Y3R1cmUgaXMgY2xvYmJlcmVkIGFuZCBoYXMgYW4gaW52YWxpZCB3YXRj
aHBvaW50IHNldC5cbiIsIG1fZ3JhcGgubmFtZU9mVmFyaWFibGVBY2Nlc3NEYXRhKGl0LT5maXJz
dCkpOworICAgICAgICAgICAgaWYgKGl0LT52YWx1ZS5tX2lzQ2xvYmJlcmVkICYmICFpdC0+dmFs
dWUubV9zdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SXNTdGlsbFZhbGlkKCkpIHsK
KyAgICAgICAgICAgICAgICBkYXRhTG9nKCJOb3QgaG9pc3RpbmcgY2hlY2tzIGZvciAlcyBiZWNh
dXNlIHRoZSBzdHJ1Y3R1cmUgaXMgY2xvYmJlcmVkIGFuZCBoYXMgYW4gaW52YWxpZCB3YXRjaHBv
aW50IHNldC5cbiIsIG1fZ3JhcGgubmFtZU9mVmFyaWFibGVBY2Nlc3NEYXRhKGl0LT5rZXkpKTsK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRh
dGFMb2coIkhvaXN0aW5nIGNoZWNrcyBmb3IgJXNcbiIsIG1fZ3JhcGgubmFtZU9mVmFyaWFibGVB
Y2Nlc3NEYXRhKGl0LT5maXJzdCkpOworICAgICAgICAgICAgZGF0YUxvZygiSG9pc3RpbmcgY2hl
Y2tzIGZvciAlc1xuIiwgbV9ncmFwaC5uYW1lT2ZWYXJpYWJsZUFjY2Vzc0RhdGEoaXQtPmtleSkp
OwogICAgICAgICB9CiAjZW5kaWYgLy8gREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJC
T1NFKQogICAgICAgICAKQEAgLTMzOSw5ICszMzksOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgICAgIEhhc2hNYXA8VmFyaWFibGVBY2Nlc3NEYXRhKiwgQ2hlY2tEYXRhPjo6aXRlcmF0b3Ig
aXRlciA9IG1fbWFwLmZpbmQodmFyaWFibGUpOwogICAgICAgICAgICAgICAgICAgICBpZiAoaXRl
ciA9PSBtX21hcC5lbmQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICBpZiAoIWl0ZXItPnNlY29uZC5tX3N0cnVjdHVyZSkKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCFpdGVyLT52YWx1ZS5tX3N0cnVjdHVyZSkKICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBpZiAoaXRlci0+c2Vjb25kLm1faXND
bG9iYmVyZWQgJiYgIWl0ZXItPnNlY29uZC5tX3N0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9p
bnRTZXRJc1N0aWxsVmFsaWQoKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZXItPnZhbHVl
Lm1faXNDbG9iYmVyZWQgJiYgIWl0ZXItPnZhbHVlLm1fc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0
Y2hwb2ludFNldElzU3RpbGxWYWxpZCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBub2RlLnJlZigpOwpA
QCAtMzU1LDcgKzM1NSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5h
cHBlbmQoZ2V0TG9jYWwpOwogICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuYXBwZW5k
KGluZGV4SW5CbG9jayArIDEsIGdldExvY2FsSW5kZXgpOwogICAgICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICAgICAgTm9kZSBjaGVja1N0cnVjdHVyZShDaGVja1N0cnVjdHVyZSwg
Y29kZU9yaWdpbiwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KGl0ZXItPnNlY29uZC5t
X3N0cnVjdHVyZSkpLCBnZXRMb2NhbEluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSBj
aGVja1N0cnVjdHVyZShDaGVja1N0cnVjdHVyZSwgY29kZU9yaWdpbiwgT3BJbmZvKG1fZ3JhcGgu
YWRkU3RydWN0dXJlU2V0KGl0ZXItPnZhbHVlLm1fc3RydWN0dXJlKSksIGdldExvY2FsSW5kZXgp
OwogICAgICAgICAgICAgICAgICAgICBjaGVja1N0cnVjdHVyZS5yZWYoKTsKICAgICAgICAgICAg
ICAgICAgICAgTm9kZUluZGV4IGNoZWNrU3RydWN0dXJlSW5kZXggPSBtX2dyYXBoLnNpemUoKTsK
ICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5hcHBlbmQoY2hlY2tTdHJ1Y3R1cmUpOwpAQCAt
Mzc1LDkgKzM3NSw5IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgSGFzaE1hcDxWYXJp
YWJsZUFjY2Vzc0RhdGEqLCBDaGVja0RhdGE+OjppdGVyYXRvciBpdGVyID0gbV9tYXAuZmluZCh2
YXJpYWJsZSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVyID09IG1fbWFwLmVuZCgpKQog
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgh
aXRlci0+c2Vjb25kLm1fc3RydWN0dXJlKQorICAgICAgICAgICAgICAgICAgICBpZiAoIWl0ZXIt
PnZhbHVlLm1fc3RydWN0dXJlKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChpdGVyLT5zZWNvbmQubV9pc0Nsb2JiZXJlZCAmJiAhaXRlci0+
c2Vjb25kLm1fc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldElzU3RpbGxWYWxpZCgp
KQorICAgICAgICAgICAgICAgICAgICBpZiAoaXRlci0+dmFsdWUubV9pc0Nsb2JiZXJlZCAmJiAh
aXRlci0+dmFsdWUubV9zdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SXNTdGlsbFZh
bGlkKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgICAg
ICAgICAvLyBGaXJzdCBpbnNlcnQgYSBkZWFkIFNldExvY2FsIHRvIHRlbGwgT1NSIHRoYXQgdGhl
IGNoaWxkJ3MgdmFsdWUgc2hvdWxkCkBAIC0zOTQsNyArMzk0LDcgQEAgcHVibGljOgogICAgICAg
ICAgICAgICAgICAgICBtX2dyYXBoW2NoaWxkMV0ucmVmKCk7CiAgICAgICAgICAgICAgICAgICAg
IC8vIFVzZSBhIEZvcndhcmRDaGVja1N0cnVjdHVyZSB0byBpbmRpY2F0ZSB0aGF0IHdlIHNob3Vs
ZCBleGl0IHRvIHRoZQogICAgICAgICAgICAgICAgICAgICAvLyBuZXh0IGJ5dGVjb2RlIGluc3Ry
dWN0aW9uIHJhdGhlciB0aGFuIHJlZXhlY3V0aW5nIHRoZSBjdXJyZW50IG9uZS4KLSAgICAgICAg
ICAgICAgICAgICAgTm9kZSBjaGVja1N0cnVjdHVyZShGb3J3YXJkQ2hlY2tTdHJ1Y3R1cmUsIGNv
ZGVPcmlnaW4sIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChpdGVyLT5zZWNvbmQubV9z
dHJ1Y3R1cmUpKSwgY2hpbGQxKTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSBjaGVja1N0cnVj
dHVyZShGb3J3YXJkQ2hlY2tTdHJ1Y3R1cmUsIGNvZGVPcmlnaW4sIE9wSW5mbyhtX2dyYXBoLmFk
ZFN0cnVjdHVyZVNldChpdGVyLT52YWx1ZS5tX3N0cnVjdHVyZSkpLCBjaGlsZDEpOwogICAgICAg
ICAgICAgICAgICAgICBjaGVja1N0cnVjdHVyZS5yZWYoKTsKICAgICAgICAgICAgICAgICAgICAg
Tm9kZUluZGV4IGNoZWNrU3RydWN0dXJlSW5kZXggPSBtX2dyYXBoLnNpemUoKTsKICAgICAgICAg
ICAgICAgICAgICAgbV9ncmFwaC5hcHBlbmQoY2hlY2tTdHJ1Y3R1cmUpOwpAQCAtNDEwLDE2ICs0
MTAsMTYgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBIYXNoTWFwPFZhcmlhYmxlQWNj
ZXNzRGF0YSosIENoZWNrRGF0YT46Oml0ZXJhdG9yIGl0ZXIgPSBtX21hcC5maW5kKGNoaWxkLnZh
cmlhYmxlQWNjZXNzRGF0YSgpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZXIgPT0gbV9t
YXAuZW5kKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKCFpdGVyLT5zZWNvbmQubV9zdHJ1Y3R1cmUpCisgICAgICAgICAgICAgICAgICAg
IGlmICghaXRlci0+dmFsdWUubV9zdHJ1Y3R1cmUpCiAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpdGVyLT5zZWNvbmQubV9pc0Nsb2JiZXJl
ZCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIWl0ZXItPnZhbHVlLm1faXNDbG9iYmVyZWQp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhh
bnRvbSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS5yZWZDb3VudCgpID09
IDEpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpdGVyLT5zZWNvbmQubV9zdHJ1Y3R1cmUtPnRy
YW5zaXRpb25XYXRjaHBvaW50U2V0SXNTdGlsbFZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAg
IGlmICghaXRlci0+dmFsdWUubV9zdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SXNT
dGlsbFZhbGlkKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKGl0ZXItPnNlY29uZC5tX3N0cnVjdHVyZSA9PSBub2RlLnN0cnVjdHVy
ZVNldCgpLnNpbmdsZXRvblN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KGl0ZXItPnZhbHVlLm1fc3RydWN0dXJlID09IG5vZGUuc3RydWN0dXJlU2V0KCkuc2luZ2xldG9u
U3RydWN0dXJlKCkpOwogICAgICAgICAgICAgICAgICAgICBub2RlLmNvbnZlcnRUb1N0cnVjdHVy
ZVRyYW5zaXRpb25XYXRjaHBvaW50KCk7CiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0
cnVlOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTQ0Miw5ICs0NDIsOSBAQCBwcml2
YXRlOgogICAgICAgICAgICAgbV9tYXAuYWRkKHZhcmlhYmxlLCBDaGVja0RhdGEoc3RydWN0dXJl
LCBmYWxzZSkpOwogICAgICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpCiAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIGlmIChyZXN1bHQuaXRlcmF0b3ItPnNlY29uZC5tX3N0cnVjdHVyZSA9
PSBzdHJ1Y3R1cmUpCisgICAgICAgIGlmIChyZXN1bHQuaXRlcmF0b3ItPnZhbHVlLm1fc3RydWN0
dXJlID09IHN0cnVjdHVyZSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgcmVzdWx0Lml0
ZXJhdG9yLT5zZWNvbmQubV9zdHJ1Y3R1cmUgPSAwOworICAgICAgICByZXN1bHQuaXRlcmF0b3It
PnZhbHVlLm1fc3RydWN0dXJlID0gMDsKICAgICB9CiAgICAgCiAgICAgdm9pZCBub3RpY2VTdHJ1
Y3R1cmVDaGVjayhWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlLCBjb25zdCBTdHJ1Y3R1cmVT
ZXQmIHNldCkKQEAgLTQ2Miw3ICs0NjIsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9tYXAu
ZmluZCh2YXJpYWJsZSk7CiAgICAgICAgIGlmIChpdGVyID09IG1fbWFwLmVuZCgpKQogICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBpdGVyLT5zZWNvbmQubV9pc0Nsb2JiZXJlZCA9IHRydWU7
CisgICAgICAgIGl0ZXItPnZhbHVlLm1faXNDbG9iYmVyZWQgPSB0cnVlOwogICAgIH0KICAgICAK
ICAgICB2b2lkIGNsb2JiZXIoY29uc3QgT3BlcmFuZHM8VmFyaWFibGVBY2Nlc3NEYXRhKj4mIGxp
dmUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCmluZGV4IGM3ZmI4YzAxNWUxY2RkMDQz
M2VlMTUzODE0ZDhlMzc3YmY4ZmIyZGQuLjE4YzdiNTA0MTU1ZWFmODRiOWRmYmQ5MGQ2MzFjNmQy
YTFkMmExNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCkBAIC0zNDUsNyArMzQ1
LDcgQEAgdm9pZCBIZWFwOjptYXJrUHJvdGVjdGVkT2JqZWN0cyhIZWFwUm9vdFZpc2l0b3ImIGhl
YXBSb290VmlzaXRvcikKIHsKICAgICBQcm90ZWN0Q291bnRTZXQ6Oml0ZXJhdG9yIGVuZCA9IG1f
cHJvdGVjdGVkVmFsdWVzLmVuZCgpOwogICAgIGZvciAoUHJvdGVjdENvdW50U2V0OjppdGVyYXRv
ciBpdCA9IG1fcHJvdGVjdGVkVmFsdWVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAg
ICAgaGVhcFJvb3RWaXNpdG9yLnZpc2l0KCZpdC0+Zmlyc3QpOworICAgICAgICBoZWFwUm9vdFZp
c2l0b3IudmlzaXQoJml0LT5rZXkpOwogfQogCiB2b2lkIEhlYXA6OnB1c2hUZW1wU29ydFZlY3Rv
cihWZWN0b3I8VmFsdWVTdHJpbmdQYWlyPiogdGVtcFZlY3RvcikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuaAppbmRleCBjOWJiZWMxZjZjODE3NzAwZDRlOGI1YmNmZmVjNzUyZTNkNWNhMDE5Li43
YmY2YTI1NDA1ZjVkNThkMGY5OGE3NzYzOGNiMTZhNjgyZjMyZjYxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcC5oCkBAIC0zNDksNyArMzQ5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgewog
ICAgICAgICBQcm90ZWN0Q291bnRTZXQ6Oml0ZXJhdG9yIGVuZCA9IG1fcHJvdGVjdGVkVmFsdWVz
LmVuZCgpOwogICAgICAgICBmb3IgKFByb3RlY3RDb3VudFNldDo6aXRlcmF0b3IgaXQgPSBtX3By
b3RlY3RlZFZhbHVlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBmdW5j
dG9yKGl0LT5maXJzdCk7CisgICAgICAgICAgICBmdW5jdG9yKGl0LT5rZXkpOwogICAgICAgICBt
X2hhbmRsZVNldC5mb3JFYWNoU3Ryb25nSGFuZGxlKGZ1bmN0b3IsIG1fcHJvdGVjdGVkVmFsdWVz
KTsKIAogICAgICAgICByZXR1cm4gZnVuY3Rvci5yZXR1cm5WYWx1ZSgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSklUU3R1YlJvdXRpbmVTZXQuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSklUU3R1YlJvdXRpbmVTZXQuY3BwCmluZGV4IDVlNGNhMzZl
MDM3OGQxYzhjNzA0MTBlNzg3NzViZmQyOWVkN2RlYjQuLmEzN2RjNmY1Y2U0NGFhNDE1YTU3MTFk
YjdhZjM4NGI5MzNlZDYxNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0pJVFN0dWJSb3V0aW5lU2V0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9K
SVRTdHViUm91dGluZVNldC5jcHAKQEAgLTgyLDcgKzgyLDcgQEAgdm9pZCBKSVRTdHViUm91dGlu
ZVNldDo6bWFya1Nsb3codWludHB0cl90IGFkZHJlc3MpCiAgICAgaWYgKGl0ZXIgPT0gbV9hZGRy
ZXNzVG9Sb3V0aW5lTWFwLmVuZCgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgaXRlci0+
c2Vjb25kLT5tX21heUJlRXhlY3V0aW5nID0gdHJ1ZTsKKyAgICBpdGVyLT52YWx1ZS0+bV9tYXlC
ZUV4ZWN1dGluZyA9IHRydWU7CiB9CiAKIHZvaWQgSklUU3R1YlJvdXRpbmVTZXQ6OmRlbGV0ZVVu
bWFya2VkSmV0dGlzb25lZFN0dWJSb3V0aW5lcygpCkBAIC05Nyw3ICs5Nyw3IEBAIHZvaWQgSklU
U3R1YlJvdXRpbmVTZXQ6OmRlbGV0ZVVubWFya2VkSmV0dGlzb25lZFN0dWJSb3V0aW5lcygpCiAg
ICAgICAgIHVpbnRwdHJfdCBzdGVwID0gSklUU3R1YlJvdXRpbmU6OmFkZHJlc3NTdGVwKCk7CiAg
ICAgICAgIGZvciAodWludHB0cl90IGl0ZXIgPSBzdGFydDsgaXRlciA8IGVuZDsgaXRlciArPSBz
dGVwKSB7CiAgICAgICAgICAgICBBU1NFUlQobV9hZGRyZXNzVG9Sb3V0aW5lTWFwLmZpbmQoaXRl
cikgIT0gbV9hZGRyZXNzVG9Sb3V0aW5lTWFwLmVuZCgpKTsKLSAgICAgICAgICAgIEFTU0VSVCht
X2FkZHJlc3NUb1JvdXRpbmVNYXAuZmluZChpdGVyKS0+c2Vjb25kID09IHJvdXRpbmUpOworICAg
ICAgICAgICAgQVNTRVJUKG1fYWRkcmVzc1RvUm91dGluZU1hcC5maW5kKGl0ZXIpLT52YWx1ZSA9
PSByb3V0aW5lKTsKICAgICAgICAgICAgIG1fYWRkcmVzc1RvUm91dGluZU1hcC5yZW1vdmUoaXRl
cik7CiAgICAgICAgIH0KICAgICAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9TbG90VmlzaXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90
VmlzaXRvci5jcHAKaW5kZXggMGYwMDNlNzlkNmFiOTA4MDYxMTgxN2ViYzU4NGQ2ZTBhNTlhZGRm
NC4uNDlmZjhkNzE2MDkxODM0ZTBhMjJkODBmMWEzZTEwNDAyMzZjYTUzNyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcApAQCAtMzIwLDcgKzMyMCw3IEBAIEFM
V0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6aW50ZXJuYWxBcHBlbmQoSlNWYWx1ZSogc2xv
dCkKICAgICAgICAgICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKICAgICAgICAgICAgICAg
ICBzdHJpbmctPnNldEhhc2hDb25zdFNpbmdsZXRvbigpOwogICAgICAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgSlNWYWx1ZSBleGlzdGluZ0pTVmFsdWUgPSBhZGRSZXN1bHQuaXRlcmF0
b3ItPnNlY29uZDsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIGV4aXN0aW5nSlNWYWx1ZSA9IGFk
ZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgICAgICAgICAgaWYgKHZhbHVlICE9IGV4
aXN0aW5nSlNWYWx1ZSkKICAgICAgICAgICAgICAgICAgICAganNDYXN0PEpTU3RyaW5nKj4oZXhp
c3RpbmdKU1ZhbHVlLmFzQ2VsbCgpKS0+Y2xlYXJIYXNoQ29uc3RTaW5nbGV0b24oKTsKICAgICAg
ICAgICAgICAgICAqc2xvdCA9IGV4aXN0aW5nSlNWYWx1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1dlYWsuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dl
YWsuaAppbmRleCAwNzY5OGZkMDZiMDZjNzUwMTRiYjY1YmYyNWZjMzFjMjhhOWEwNjg0Li4zYzNk
MWQwY2VmZTE4MTI2NTljNWZhNzNjNzRkMTk5NDhjMThmZmViIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvV2Vhay5oCkBAIC0xNjQsOCArMTY0LDggQEAgdGVtcGxhdGU8dHlwZW5hbWUgTWFwLCB0eXBl
bmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlPiBpbmxpbmUgdm9pZCB3ZWFrUmVtb3ZlKE1hcCYKICAg
ICB0eXBlbmFtZSBNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLmZpbmQoa2V5KTsKICAgICBBU1NFUlRf
VU5VU0VEKHZhbHVlLCB2YWx1ZSk7CiAgICAgQVNTRVJUKGl0ICE9IG1hcC5lbmQoKSk7Ci0gICAg
QVNTRVJUKGl0LT5zZWNvbmQud2FzKHZhbHVlKSk7Ci0gICAgQVNTRVJUKCFpdC0+c2Vjb25kKTsK
KyAgICBBU1NFUlQoaXQtPnZhbHVlLndhcyh2YWx1ZSkpOworICAgIEFTU0VSVCghaXQtPnZhbHVl
KTsKICAgICBtYXAucmVtb3ZlKGl0KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCmlu
ZGV4IGJmNWFjODhkZDljM2Y0NjYyNzk0OGM1Mzc0ZTRmMTQ0ODNmYzNlNjYuLjM5ODQ1Mjc3NDg2
ODE2MTRmMzI0YmQ5ZDBkZjBhNTY3YmI3YWRkNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5j
cHAKQEAgLTcxNSw4ICs3MTUsOCBAQCBKSVRDb2RlIEpJVDo6cHJpdmF0ZUNvbXBpbGUoQ29kZVB0
ciogZnVuY3Rpb25FbnRyeUFyaXR5Q2hlY2ssIEpJVENvbXBpbGF0aW9uRWZmbwogCiAgICAgICAg
ICAgICBTdHJpbmdKdW1wVGFibGU6OlN0cmluZ09mZnNldFRhYmxlOjppdGVyYXRvciBlbmQgPSBy
ZWNvcmQuanVtcFRhYmxlLnN0cmluZ0p1bXBUYWJsZS0+b2Zmc2V0VGFibGUuZW5kKCk7ICAgICAg
ICAgICAgCiAgICAgICAgICAgICBmb3IgKFN0cmluZ0p1bXBUYWJsZTo6U3RyaW5nT2Zmc2V0VGFi
bGU6Oml0ZXJhdG9yIGl0ID0gcmVjb3JkLmp1bXBUYWJsZS5zdHJpbmdKdW1wVGFibGUtPm9mZnNl
dFRhYmxlLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgICAgIHVuc2ln
bmVkIG9mZnNldCA9IGl0LT5zZWNvbmQuYnJhbmNoT2Zmc2V0OwotICAgICAgICAgICAgICAgIGl0
LT5zZWNvbmQuY3RpT2Zmc2V0ID0gb2Zmc2V0ID8gcGF0Y2hCdWZmZXIubG9jYXRpb25PZihtX2xh
YmVsc1tieXRlY29kZU9mZnNldCArIG9mZnNldF0pIDogcmVjb3JkLmp1bXBUYWJsZS5zdHJpbmdK
dW1wVGFibGUtPmN0aURlZmF1bHQ7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0g
aXQtPnZhbHVlLmJyYW5jaE9mZnNldDsKKyAgICAgICAgICAgICAgICBpdC0+dmFsdWUuY3RpT2Zm
c2V0ID0gb2Zmc2V0ID8gcGF0Y2hCdWZmZXIubG9jYXRpb25PZihtX2xhYmVsc1tieXRlY29kZU9m
ZnNldCArIG9mZnNldF0pIDogcmVjb3JkLmp1bXBUYWJsZS5zdHJpbmdKdW1wVGFibGUtPmN0aURl
ZmF1bHQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUU3R1YnMuY3BwCmluZGV4IDQwZDY1M2I1ZGQwZjhjZDliMGQ3NTg1ZGIzYzQ2ODI4
MjgwYzk3N2UuLjhkY2I1MzNiZTdkZjM4YTg3NTk4MGI0ODkyYmNkMmI5MDYzOTljZjUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCkBAIC0zNDE2LDggKzM0MTYsOCBAQCBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgSklUVGh1bmtzOjpjdGlTdHViKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSwgVGh1bmtHZW5lcmF0bwogewogICAgIENUSVN0dWJNYXA6OkFkZFJlc3VsdCBlbnRy
eSA9IG1fY3RpU3R1Yk1hcC5hZGQoZ2VuZXJhdG9yLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoKSk7
CiAgICAgaWYgKGVudHJ5LmlzTmV3RW50cnkpCi0gICAgICAgIGVudHJ5Lml0ZXJhdG9yLT5zZWNv
bmQgPSBnZW5lcmF0b3IoZ2xvYmFsRGF0YSk7Ci0gICAgcmV0dXJuIGVudHJ5Lml0ZXJhdG9yLT5z
ZWNvbmQ7CisgICAgICAgIGVudHJ5Lml0ZXJhdG9yLT52YWx1ZSA9IGdlbmVyYXRvcihnbG9iYWxE
YXRhKTsKKyAgICByZXR1cm4gZW50cnkuaXRlcmF0b3ItPnZhbHVlOwogfQogCiBOYXRpdmVFeGVj
dXRhYmxlKiBKSVRUaHVua3M6Omhvc3RGdW5jdGlvblN0dWIoSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhLCBOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0b3Ip
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAKaW5kZXggMzU1NWYwN2NkOTJi
YTk2YzZiODk2Njc0MWMzNGUzNGIzMzM0M2Q2MC4uMTQxZmFlN2NjZjM5NWEyNGVmNDZmY2Y3MzYx
ZmJkYTYwMDlkZjc2MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Q
YXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcApA
QCAtMTM2NiwxMCArMTM2NiwxMCBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVF
eHByZXNzaW9uIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZVN0cmljdE9iamVjdAogICAgICAgICBp
ZiAoIW1fc3ludGF4QWxyZWFkeVZhbGlkYXRlZCkgewogICAgICAgICAgICAgT2JqZWN0VmFsaWRh
dGlvbk1hcDo6QWRkUmVzdWx0IHByb3BlcnR5RW50cnkgPSBvYmplY3RWYWxpZGF0b3IuYWRkKGNv
bnRleHQuZ2V0TmFtZShwcm9wZXJ0eSkuaW1wbCgpLCBjb250ZXh0LmdldFR5cGUocHJvcGVydHkp
KTsKICAgICAgICAgICAgIGlmICghcHJvcGVydHlFbnRyeS5pc05ld0VudHJ5KSB7Ci0gICAgICAg
ICAgICAgICAgZmFpbElmVHJ1ZShwcm9wZXJ0eUVudHJ5Lml0ZXJhdG9yLT5zZWNvbmQgPT0gUHJv
cGVydHlOb2RlOjpDb25zdGFudCk7CisgICAgICAgICAgICAgICAgZmFpbElmVHJ1ZShwcm9wZXJ0
eUVudHJ5Lml0ZXJhdG9yLT52YWx1ZSA9PSBQcm9wZXJ0eU5vZGU6OkNvbnN0YW50KTsKICAgICAg
ICAgICAgICAgICBmYWlsSWZUcnVlKGNvbnRleHQuZ2V0VHlwZShwcm9wZXJ0eSkgPT0gUHJvcGVy
dHlOb2RlOjpDb25zdGFudCk7Ci0gICAgICAgICAgICAgICAgZmFpbElmVHJ1ZShjb250ZXh0Lmdl
dFR5cGUocHJvcGVydHkpICYgcHJvcGVydHlFbnRyeS5pdGVyYXRvci0+c2Vjb25kKTsKLSAgICAg
ICAgICAgICAgICBwcm9wZXJ0eUVudHJ5Lml0ZXJhdG9yLT5zZWNvbmQgfD0gY29udGV4dC5nZXRU
eXBlKHByb3BlcnR5KTsKKyAgICAgICAgICAgICAgICBmYWlsSWZUcnVlKGNvbnRleHQuZ2V0VHlw
ZShwcm9wZXJ0eSkgJiBwcm9wZXJ0eUVudHJ5Lml0ZXJhdG9yLT52YWx1ZSk7CisgICAgICAgICAg
ICAgICAgcHJvcGVydHlFbnRyeS5pdGVyYXRvci0+dmFsdWUgfD0gY29udGV4dC5nZXRUeXBlKHBy
b3BlcnR5KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICB0YWlsID0gY29udGV4
dC5jcmVhdGVQcm9wZXJ0eUxpc3QocHJvcGVydHlMb2NhdGlvbiwgcHJvcGVydHksIHRhaWwpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGUuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGUuY3BwCmluZGV4IDUxZjg3MTg5
ODM4YzQ5Yjc0MGUyMWIwNmRkZjFiODc0ZjY0NWYwMzUuLmE2NDE1ODBlYzI0NjQ1Njg1NTcxNzMw
MGFkZWMwMWQ5MWJlMmEyMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9m
aWxlci9Qcm9maWxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJv
ZmlsZS5jcHAKQEAgLTExMSw3ICsxMTEsNyBAQCB0eXBlZGVmIFdURjo6S2V5VmFsdWVQYWlyPEZ1
bmN0aW9uQ2FsbEhhc2hDb3VudDo6VmFsdWVUeXBlLCB1bnNpZ25lZD4gTmFtZUNvdW50UAogCiBz
dGF0aWMgaW5saW5lIGJvb2wgZnVuY3Rpb25OYW1lQ291bnRQYWlyQ29tcGFyYXRvcihjb25zdCBO
YW1lQ291bnRQYWlyJiBhLCBjb25zdCBOYW1lQ291bnRQYWlyJiBiKQogewotICAgIHJldHVybiBh
LnNlY29uZCA+IGIuc2Vjb25kOworICAgIHJldHVybiBhLnZhbHVlID4gYi52YWx1ZTsKIH0KIAog
dm9pZCBQcm9maWxlOjpkZWJ1Z1ByaW50RGF0YVNhbXBsZVN0eWxlKCkgY29uc3QKQEAgLTEyOCw3
ICsxMjgsNyBAQCB2b2lkIFByb2ZpbGU6OmRlYnVnUHJpbnREYXRhU2FtcGxlU3R5bGUoKSBjb25z
dAogCiAgICAgc3RkOjpzb3J0KHNvcnRlZEZ1bmN0aW9ucy5iZWdpbigpLCBzb3J0ZWRGdW5jdGlv
bnMuZW5kKCksIGZ1bmN0aW9uTmFtZUNvdW50UGFpckNvbXBhcmF0b3IpOwogICAgIGZvciAoTmFt
ZUNvdW50UGFpclZlY3Rvcjo6aXRlcmF0b3IgaXQgPSBzb3J0ZWRGdW5jdGlvbnMuYmVnaW4oKTsg
aXQgIT0gc29ydGVkRnVuY3Rpb25zLmVuZCgpOyArK2l0KQotICAgICAgICBkYXRhTG9nKCIgICAg
ICAgICUtMTJkJXNcbiIsICgqaXQpLnNlY29uZCwgU3RyaW5nKCgqaXQpLmZpcnN0KS51dGY4KCku
ZGF0YSgpKTsKKyAgICAgICAgZGF0YUxvZygiICAgICAgICAlLTEyZCVzXG4iLCAoKml0KS52YWx1
ZSwgU3RyaW5nKCgqaXQpLmtleSkudXRmOCgpLmRhdGEoKSk7CiAKICAgICBkYXRhTG9nKCJcblNv
cnQgYnkgdG9wIG9mIHN0YWNrLCBzYW1lIGNvbGxhcHNlZCAod2hlbiA+PSA1KTpcbiIpOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmNwcAppbmRleCBhOWEy
YTY2YmY4MDM4MTA5Y2VkZWU0ODk1N2U1MTc5MmMzOTRiZWQxLi5iNDM1NjcxYjhhM2E5OWUwODBh
MWNkMWM1NDU3NjA5MmJiNzU3Y2RiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JZGVudGlmaWVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JZGVudGlmaWVyLmNwcApAQCAtMTAyLDcgKzEwMiw3IEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1w
bD4gSWRlbnRpZmllcjo6YWRkKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgY2hhciog
YykKIAogICAgIGNvbnN0IExpdGVyYWxJZGVudGlmaWVyVGFibGU6Oml0ZXJhdG9yJiBpdGVyID0g
bGl0ZXJhbElkZW50aWZpZXJUYWJsZS5maW5kKGMpOwogICAgIGlmIChpdGVyICE9IGxpdGVyYWxJ
ZGVudGlmaWVyVGFibGUuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdGVyLT5zZWNvbmQ7CisgICAg
ICAgIHJldHVybiBpdGVyLT52YWx1ZTsKIAogICAgIEhhc2hTZXQ8U3RyaW5nSW1wbCo+OjpBZGRS
ZXN1bHQgYWRkUmVzdWx0ID0gaWRlbnRpZmllclRhYmxlLmFkZDxjb25zdCBMQ2hhciosIElkZW50
aWZpZXJBU0NJSVN0cmluZ1RyYW5zbGF0b3I+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIq
PihjKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0
aXZhdGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24u
Y3BwCmluZGV4IGRjMDYxYmM1NzY1NzNkZTY1ZTc3NTU1MjFhMTBkNWVjOWFlNzk1MjEuLjgwZjY5
ZDk4Y2RmYjVjMjg0Nzg3MWQ4NzljNmZkNTM0ZWNhNjAxNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmNwcApAQCAtMTE2LDExICsxMTYsMTEgQEAg
dm9pZCBKU0FjdGl2YXRpb246OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCog
b2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMKIAogICAgIFN5bWJvbFRhYmxlOjpjb25zdF9pdGVyYXRv
ciBlbmQgPSB0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5lbmQoKTsKICAgICBmb3IgKFN5bWJv
bFRhYmxlOjpjb25zdF9pdGVyYXRvciBpdCA9IHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCktPmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnNlY29uZC5nZXRBdHRy
aWJ1dGVzKCkgJiBEb250RW51bSAmJiBtb2RlICE9IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMp
CisgICAgICAgIGlmIChpdC0+dmFsdWUuZ2V0QXR0cmlidXRlcygpICYgRG9udEVudW0gJiYgbW9k
ZSAhPSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKQogICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIGlmICghdGhpc09iamVjdC0+aXNWYWxpZChpdC0+c2Vjb25kKSkKKyAgICAgICAgaWYg
KCF0aGlzT2JqZWN0LT5pc1ZhbGlkKGl0LT52YWx1ZSkpCiAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihleGVjLCBpdC0+Zmlyc3QuZ2V0
KCkpKTsKKyAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihleGVjLCBpdC0+a2V5
LmdldCgpKSk7CiAgICAgfQogICAgIC8vIFNraXAgdGhlIEpTVmFyaWFibGVPYmplY3QgaW1wbGVt
ZW50YXRpb24gb2YgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzCiAgICAgSlNPYmplY3Q6Omdl
dE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVz
LCBtb2RlKTsKQEAgLTEzMyw3ICsxMzMsNyBAQCBpbmxpbmUgYm9vbCBKU0FjdGl2YXRpb246OnN5
bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLAogICAg
IFN5bWJvbFRhYmxlOjppdGVyYXRvciBpdGVyID0gc3ltYm9sVGFibGUoKS0+ZmluZChwcm9wZXJ0
eU5hbWUucHVibGljTmFtZSgpKTsKICAgICBpZiAoaXRlciA9PSBzeW1ib2xUYWJsZSgpLT5lbmQo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFN5bWJvbFRhYmxlRW50cnkmIGVudHJ5ID0g
aXRlci0+c2Vjb25kOworICAgIFN5bWJvbFRhYmxlRW50cnkmIGVudHJ5ID0gaXRlci0+dmFsdWU7
CiAgICAgQVNTRVJUKCFlbnRyeS5pc051bGwoKSk7CiAgICAgaWYgKCFpc1ZhbGlkKGVudHJ5KSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5LmNwcAppbmRleCAyNDEwNDlkY2U1NTVjNmI0M2Q3MjU4ZDk1NDU1ZGJjYmJkMTlhYTAyLi44
MDdkMDBhNzQ5YzI2YjIzZmIwOTVhZTJhYmNlNTdiNWIwMWY0ZTViIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcApAQCAtMzUwLDcgKzM1MCw3IEBAIGJvb2wgSlNB
cnJheTo6c2V0TGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgbmV3TGVuZ3RoLCBib29s
IHRocm93RXhjZXB0aW9uCiAgICAgICAgICAgICBrZXlzLnJlc2VydmVDYXBhY2l0eShtaW4obWFw
LT5zaXplKCksIHN0YXRpY19jYXN0PHNpemVfdD4obGVuZ3RoIC0gbmV3TGVuZ3RoKSkpOwogICAg
ICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5l
bmQoKTsKICAgICAgICAgICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGl0LT5maXJzdCk7CisgICAg
ICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaXQtPmtl
eSk7CiAgICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgbGVuZ3RoICYmIGluZGV4ID49IG5ld0xl
bmd0aCkKICAgICAgICAgICAgICAgICAgICAga2V5cy5hcHBlbmQoaW5kZXgpOwogICAgICAgICAg
ICAgfQpAQCAtMzY1LDcgKzM2NSw3IEBAIGJvb2wgSlNBcnJheTo6c2V0TGVuZ3RoKEV4ZWNTdGF0
ZSogZXhlYywgdW5zaWduZWQgbmV3TGVuZ3RoLCBib29sIHRocm93RXhjZXB0aW9uCiAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0ga2V5c1stLWldOwogICAgICAgICAgICAgICAg
ICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+ZmluZChpbmRleCk7
CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChpdCAhPSBtYXAtPm5vdEZvdW5kKCkpOwotICAg
ICAgICAgICAgICAgICAgICBpZiAoaXQtPnNlY29uZC5hdHRyaWJ1dGVzICYgRG9udERlbGV0ZSkg
eworICAgICAgICAgICAgICAgICAgICBpZiAoaXQtPnZhbHVlLmF0dHJpYnV0ZXMgJiBEb250RGVs
ZXRlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlLT5zZXRMZW5ndGgoaW5kZXgg
KyAxKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dF
eGNlcHRpb24sICJVbmFibGUgdG8gZGVsZXRlIHByb3BlcnR5LiIpOwogICAgICAgICAgICAgICAg
ICAgICB9CkBAIC04NjksNyArODY5LDcgQEAgdm9pZCBKU0FycmF5Ojpzb3J0KEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSBjb21wYXJlRnVuY3Rpb24sIENhbGxUeXBlIGNhbGxUeXBlLAogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBl
bmQgPSBtYXAtPmVuZCgpOwogICAgICAgICAgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAg
ICAgICAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1tudW1EZWZpbmVkXS52YWx1ZSA9
IGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpOworICAgICAgICAgICAgICAgIHRyZWUuYWJz
dHJhY3RvcigpLm1fbm9kZXNbbnVtRGVmaW5lZF0udmFsdWUgPSBpdC0+dmFsdWUuZ2V0Tm9uU3Bh
cnNlTW9kZSgpOwogICAgICAgICAgICAgICAgIHRyZWUuaW5zZXJ0KG51bURlZmluZWQpOwogICAg
ICAgICAgICAgICAgICsrbnVtRGVmaW5lZDsKICAgICAgICAgICAgIH0KQEAgLTEwMTcsNyArMTAx
Nyw3IEBAIHVuc2lnbmVkIEpTQXJyYXk6OmNvbXBhY3RGb3JTb3J0aW5nKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSkKICAgICAgICAgICAgIAogICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1h
cDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKICAgICAgICAgICAgIGZvciAoU3Bh
cnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkKLSAgICAgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltudW1EZWZpbmVk
KytdLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCkp
OworICAgICAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW251bURlZmluZWQrK10uc2V0V2l0
aG91dFdyaXRlQmFycmllcihpdC0+dmFsdWUuZ2V0Tm9uU3BhcnNlTW9kZSgpKTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgZGVhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKCk7CiAgICAgICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAppbmRleCA2ZWFjMGQx
Y2JkZDEwZTA3YTI4YTdmNjRmMTFlYThiYjg1OGQ1MWQyLi45MjZlY2UyOTU3MDFmMDQyM2VmNDdj
MjM2NzliYzU0MzQ3ZGQwNDRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU09iamVjdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNP
YmplY3QuY3BwCkBAIC0yNTMsNyArMjUzLDcgQEAgYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQKICAg
ICAgICAgfSBlbHNlIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5tX3Nw
YXJzZU1hcC5nZXQoKSkgewogICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRlcmF0
b3IgaXQgPSBtYXAtPmZpbmQoaSk7CiAgICAgICAgICAgICBpZiAoaXQgIT0gbWFwLT5ub3RGb3Vu
ZCgpKSB7Ci0gICAgICAgICAgICAgICAgaXQtPnNlY29uZC5nZXQoc2xvdCk7CisgICAgICAgICAg
ICAgICAgaXQtPnZhbHVlLmdldChzbG90KTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNDA3LDcgKzQwNyw3IEBAIEFycmF5U3RvcmFn
ZSogSlNPYmplY3Q6OmVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VB
bHJlYWR5RXhpc3RzCiAgICAgICAgIC8vIFRoaXMgd2lsbCBhbHdheXMgYmUgYSBuZXcgZW50cnkg
aW4gdGhlIG1hcCwgc28gbm8gbmVlZCB0byBjaGVjayB3ZSBjYW4gd3JpdGUsCiAgICAgICAgIC8v
IGFuZCBhdHRyaWJ1dGVzIGFyZSBkZWZhdWx0IHNvIG5vIG5lZWQgdG8gc2V0IHRoZW0uCiAgICAg
ICAgIGlmICh2YWx1ZSkKLSAgICAgICAgICAgIG1hcC0+YWRkKHRoaXMsIGkpLml0ZXJhdG9yLT5z
ZWNvbmQuc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgIG1hcC0+YWRk
KHRoaXMsIGkpLml0ZXJhdG9yLT52YWx1ZS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOwog
ICAgIH0KIAogICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gc3RvcmFnZS0+YnV0dGVyZmx5
KCktPnJlc2l6ZUFycmF5KGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCAwLCBBcnJheVN0b3JhZ2U6
OnNpemVGb3IoMCkpOwpAQCAtNjE0LDcgKzYxNCw3IEBAIGJvb2wgSlNPYmplY3Q6OmRlbGV0ZVBy
b3BlcnR5QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSkK
ICAgICAgICAgfSBlbHNlIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5t
X3NwYXJzZU1hcC5nZXQoKSkgewogICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRl
cmF0b3IgaXQgPSBtYXAtPmZpbmQoaSk7CiAgICAgICAgICAgICBpZiAoaXQgIT0gbWFwLT5ub3RG
b3VuZCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGl0LT5zZWNvbmQuYXR0cmlidXRlcyAmIERv
bnREZWxldGUpCisgICAgICAgICAgICAgICAgaWYgKGl0LT52YWx1ZS5hdHRyaWJ1dGVzICYgRG9u
dERlbGV0ZSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAg
ICAgIG1hcC0+cmVtb3ZlKGl0KTsKICAgICAgICAgICAgIH0KQEAgLTc4Miw4ICs3ODIsOCBAQCB2
b2lkIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYQogICAgICAgICAgICAgCiAgICAgICAgICAgICBTcGFyc2VB
cnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwogICAgICAgICAg
ICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1vZGUgPT0gSW5j
bHVkZURvbnRFbnVtUHJvcGVydGllcyB8fCAhKGl0LT5zZWNvbmQuYXR0cmlidXRlcyAmIERvbnRF
bnVtKSkKLSAgICAgICAgICAgICAgICAgICAga2V5cy5hcHBlbmQoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KGl0LT5maXJzdCkpOworICAgICAgICAgICAgICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250
RW51bVByb3BlcnRpZXMgfHwgIShpdC0+dmFsdWUuYXR0cmlidXRlcyAmIERvbnRFbnVtKSkKKyAg
ICAgICAgICAgICAgICAgICAga2V5cy5hcHBlbmQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGl0LT5r
ZXkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgc3RkOjpzb3J0
KGtleXMuYmVnaW4oKSwga2V5cy5lbmQoKSk7CkBAIC0xMDAwLDcgKzEwMDAsNyBAQCBib29sIEpT
T2JqZWN0OjpkZWZpbmVPd25JbmRleGVkUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25l
ZCBpbmRleCwgUHJvcGVydAogCiAgICAgLy8gMS4gTGV0IGN1cnJlbnQgYmUgdGhlIHJlc3VsdCBv
ZiBjYWxsaW5nIHRoZSBbW0dldE93blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0
aCBwcm9wZXJ0eSBuYW1lIFAuCiAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6QWRkUmVzdWx0IHJl
c3VsdCA9IG1hcC0+YWRkKHRoaXMsIGluZGV4KTsKLSAgICBTcGFyc2VBcnJheUVudHJ5KiBlbnRy
eUluTWFwID0gJnJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgIFNwYXJzZUFycmF5RW50cnkq
IGVudHJ5SW5NYXAgPSAmcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIAogICAgIC8vIDIuIExldCBl
eHRlbnNpYmxlIGJlIHRoZSB2YWx1ZSBvZiB0aGUgW1tFeHRlbnNpYmxlXV0gaW50ZXJuYWwgcHJv
cGVydHkgb2YgTy4KICAgICAvLyAzLiBJZiBjdXJyZW50IGlzIHVuZGVmaW5lZCBhbmQgZXh0ZW5z
aWJsZSBpcyBmYWxzZSwgdGhlbiBSZWplY3QuCkBAIC0xMTcxLDcgKzExNzEsNyBAQCB2b2lkIEpT
T2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShFeGVj
U3RhdGUqIGV4ZWMsIHVucwogICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0gc3Rv
cmFnZS0+bV92ZWN0b3I7CiAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gbWFwLT5lbmQoKTsKICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHZlY3Rv
cltpdC0+Zmlyc3RdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBpdC0+c2Vjb25kLmdldE5vblNwYXJz
ZU1vZGUoKSk7CisgICAgICAgIHZlY3RvcltpdC0+a2V5XS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywg
aXQtPnZhbHVlLmdldE5vblNwYXJzZU1vZGUoKSk7CiAgICAgZGVhbGxvY2F0ZVNwYXJzZUluZGV4
TWFwKCk7CiAKICAgICAvLyBTdG9yZSB0aGUgbmV3IHByb3BlcnR5IGludG8gdGhlIHZlY3Rvci4K
QEAgLTEyNzksNyArMTI3OSw3IEBAIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEluZGV4QmV5b25k
VmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsCiAgICAgV3JpdGVC
YXJyaWVyPFVua25vd24+KiB2ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsKICAgICBTcGFyc2VB
cnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwogICAgIGZvciAo
U3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkKLSAgICAgICAgdmVjdG9yW2l0LT5maXJzdF0uc2V0KGdsb2JhbERhdGEs
IHRoaXMsIGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpKTsKKyAgICAgICAgdmVjdG9yW2l0
LT5rZXldLnNldChnbG9iYWxEYXRhLCB0aGlzLCBpdC0+dmFsdWUuZ2V0Tm9uU3BhcnNlTW9kZSgp
KTsKICAgICBkZWFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoKTsKIAogICAgIC8vIFN0b3JlIHRoZSBu
ZXcgcHJvcGVydHkgaW50byB0aGUgdmVjdG9yLgpAQCAtMTQ0MSwxMyArMTQ0MSwxMyBAQCB2b2lk
IEpTT2JqZWN0OjpjaGVja0luZGV4aW5nQ29uc2lzdGVuY3koQ29uc2lzdGVuY3lDaGVja1R5cGUg
dHlwZSkKICAgICBpZiAobV9zcGFyc2VWYWx1ZU1hcCkgewogICAgICAgICBTcGFyc2VBcnJheVZh
bHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3NwYXJzZVZhbHVlTWFwLT5lbmQoKTsKICAg
ICAgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fc3Bh
cnNlVmFsdWVNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgdW5z
aWduZWQgaW5kZXggPSBpdC0+Zmlyc3Q7CisgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGl0
LT5rZXk7CiAgICAgICAgICAgICBBU1NFUlQoaW5kZXggPCBzdG9yYWdlLT5sZW5ndGgoKSk7CiAg
ICAgICAgICAgICBBU1NFUlQoaW5kZXggPj0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOwogICAg
ICAgICAgICAgQVNTRVJUKGluZGV4IDw9IE1BWF9BUlJBWV9JTkRFWCk7Ci0gICAgICAgICAgICBB
U1NFUlQoaXQtPnNlY29uZCk7CisgICAgICAgICAgICBBU1NFUlQoaXQtPnZhbHVlKTsKICAgICAg
ICAgICAgIGlmICh0eXBlICE9IERlc3RydWN0b3JDb25zaXN0ZW5jeUNoZWNrKQotICAgICAgICAg
ICAgICAgIGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpLmlzVW5kZWZpbmVkKCk7IC8vIExp
a2VseSB0byBjcmFzaCBpZiB0aGUgb2JqZWN0IHdhcyBkZWFsbG9jYXRlZC4KKyAgICAgICAgICAg
ICAgICBpdC0+dmFsdWUuZ2V0Tm9uU3BhcnNlTW9kZSgpLmlzVW5kZWZpbmVkKCk7IC8vIExpa2Vs
eSB0byBjcmFzaCBpZiB0aGUgb2JqZWN0IHdhcyBkZWFsbG9jYXRlZC4KICAgICAgICAgfQogICAg
IH0KIH0KQEAgLTE0OTgsNyArMTQ5OCw3IEBAIGJvb2wgSlNPYmplY3Q6OmdldE93blByb3BlcnR5
RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlCiAgICAg
ICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+ZmluZChpKTsK
ICAgICAgICAgICAgIGlmIChpdCA9PSBtYXAtPm5vdEZvdW5kKCkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaXQtPnNlY29uZC5nZXQoZGVzY3JpcHRvcik7Cisg
ICAgICAgICAgICBpdC0+dmFsdWUuZ2V0KGRlc2NyaXB0b3IpOwogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcAppbmRleCA3
NjVlMWQzZDQ0ZDY5YWI4MTMzZDc2Y2ZjYzdlMjI3MzVkODY2NGZiLi43ZGNkZTQ3MDA0NmM4ZjI3
MjBmMDdiNzRjNWFkNzI3NDdhMTQwNGQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcApAQCAtNjEsOCArNjEsOCBAQCB2
b2lkIEpTU3ltYm9sVGFibGVPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09i
amVjdCogb2JqZWN0LCBFeGVjU3RhdAogICAgIEpTU3ltYm9sVGFibGVPYmplY3QqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNTeW1ib2xUYWJsZU9iamVjdCo+KG9iamVjdCk7CiAgICAgU3ltYm9sVGFi
bGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCktPmVuZCgp
OwogICAgIGZvciAoU3ltYm9sVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdGhpc09iamVjdC0+
c3ltYm9sVGFibGUoKS0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmICgh
KGl0LT5zZWNvbmQuZ2V0QXR0cmlidXRlcygpICYgRG9udEVudW0pIHx8IChtb2RlID09IEluY2x1
ZGVEb250RW51bVByb3BlcnRpZXMpKQotICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRl
bnRpZmllcihleGVjLCBpdC0+Zmlyc3QuZ2V0KCkpKTsKKyAgICAgICAgaWYgKCEoaXQtPnZhbHVl
LmdldEF0dHJpYnV0ZXMoKSAmIERvbnRFbnVtKSB8fCAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Q
cm9wZXJ0aWVzKSkKKyAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXIoZXhl
YywgaXQtPmtleS5nZXQoKSkpOwogICAgIH0KICAgICAKICAgICBKU09iamVjdDo6Z2V0T3duTm9u
SW5kZXhQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJs
ZU9iamVjdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9i
amVjdC5oCmluZGV4IGI0ZDMxM2MxOTE5ODBmZGI4OTdlY2RmNDQ1ZmExNDFkZWUxMmYzZmQuLjkx
MzY3OWY4MGM3MmJjY2QxYzg4NjE3M2NkMTJmODkzM2VhZGQ3MGIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgKQEAgLTc2LDcg
Kzc2LDcgQEAgaW5saW5lIGJvb2wgc3ltYm9sVGFibGVHZXQoCiAgICAgU3ltYm9sVGFibGU6Oml0
ZXJhdG9yIGl0ZXIgPSBzeW1ib2xUYWJsZS5maW5kKHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCkp
OwogICAgIGlmIChpdGVyID09IHN5bWJvbFRhYmxlLmVuZCgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgU3ltYm9sVGFibGVFbnRyeTo6RmFzdCBlbnRyeSA9IGl0ZXItPnNlY29uZDsKKyAg
ICBTeW1ib2xUYWJsZUVudHJ5OjpGYXN0IGVudHJ5ID0gaXRlci0+dmFsdWU7CiAgICAgQVNTRVJU
KCFlbnRyeS5pc051bGwoKSk7CiAgICAgc2xvdC5zZXRWYWx1ZShvYmplY3QtPnJlZ2lzdGVyQXQo
ZW50cnkuZ2V0SW5kZXgoKSkuZ2V0KCkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtOTAsNyArOTAs
NyBAQCBpbmxpbmUgYm9vbCBzeW1ib2xUYWJsZUdldCgKICAgICBTeW1ib2xUYWJsZTo6aXRlcmF0
b3IgaXRlciA9IHN5bWJvbFRhYmxlLmZpbmQocHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSk7CiAg
ICAgaWYgKGl0ZXIgPT0gc3ltYm9sVGFibGUuZW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBTeW1ib2xUYWJsZUVudHJ5OjpGYXN0IGVudHJ5ID0gaXRlci0+c2Vjb25kOworICAgIFN5
bWJvbFRhYmxlRW50cnk6OkZhc3QgZW50cnkgPSBpdGVyLT52YWx1ZTsKICAgICBBU1NFUlQoIWVu
dHJ5LmlzTnVsbCgpKTsKICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoCiAgICAgICAgIG9i
amVjdC0+cmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKS5nZXQoKSwgZW50cnkuZ2V0QXR0cmli
dXRlcygpIHwgRG9udERlbGV0ZSk7CkBAIC0xMDYsNyArMTA2LDcgQEAgaW5saW5lIGJvb2wgc3lt
Ym9sVGFibGVHZXQoCiAgICAgU3ltYm9sVGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSBzeW1ib2xUYWJs
ZS5maW5kKHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCkpOwogICAgIGlmIChpdGVyID09IHN5bWJv
bFRhYmxlLmVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgU3ltYm9sVGFibGVFbnRy
eTo6RmFzdCBlbnRyeSA9IGl0ZXItPnNlY29uZDsKKyAgICBTeW1ib2xUYWJsZUVudHJ5OjpGYXN0
IGVudHJ5ID0gaXRlci0+dmFsdWU7CiAgICAgQVNTRVJUKCFlbnRyeS5pc051bGwoKSk7CiAgICAg
c2xvdC5zZXRWYWx1ZShvYmplY3QtPnJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuZ2V0KCkp
OwogICAgIHNsb3RJc1dyaXRlYWJsZSA9ICFlbnRyeS5pc1JlYWRPbmx5KCk7CkBAIC0xMjYsNyAr
MTI2LDcgQEAgaW5saW5lIGJvb2wgc3ltYm9sVGFibGVQdXQoCiAgICAgaWYgKGl0ZXIgPT0gc3lt
Ym9sVGFibGUuZW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBib29sIHdhc0ZhdDsK
LSAgICBTeW1ib2xUYWJsZUVudHJ5OjpGYXN0IGZhc3RFbnRyeSA9IGl0ZXItPnNlY29uZC5nZXRG
YXN0KHdhc0ZhdCk7CisgICAgU3ltYm9sVGFibGVFbnRyeTo6RmFzdCBmYXN0RW50cnkgPSBpdGVy
LT52YWx1ZS5nZXRGYXN0KHdhc0ZhdCk7CiAgICAgQVNTRVJUKCFmYXN0RW50cnkuaXNOdWxsKCkp
OwogICAgIGlmIChmYXN0RW50cnkuaXNSZWFkT25seSgpKSB7CiAgICAgICAgIGlmIChzaG91bGRU
aHJvdykKQEAgLTEzNCw3ICsxMzQsNyBAQCBpbmxpbmUgYm9vbCBzeW1ib2xUYWJsZVB1dCgKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGlmIChVTkxJS0VMWSh3YXNGYXQpKQotICAg
ICAgICBpdGVyLT5zZWNvbmQubm90aWZ5V3JpdGUoKTsKKyAgICAgICAgaXRlci0+dmFsdWUubm90
aWZ5V3JpdGUoKTsKICAgICBvYmplY3QtPnJlZ2lzdGVyQXQoZmFzdEVudHJ5LmdldEluZGV4KCkp
LnNldChnbG9iYWxEYXRhLCBvYmplY3QsIHZhbHVlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAg
LTE0OSw3ICsxNDksNyBAQCBpbmxpbmUgYm9vbCBzeW1ib2xUYWJsZVB1dFdpdGhBdHRyaWJ1dGVz
KAogICAgIFN5bWJvbFRhYmxlOjppdGVyYXRvciBpdGVyID0gb2JqZWN0LT5zeW1ib2xUYWJsZSgp
LT5maW5kKHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCkpOwogICAgIGlmIChpdGVyID09IG9iamVj
dC0+c3ltYm9sVGFibGUoKS0+ZW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBTeW1i
b2xUYWJsZUVudHJ5JiBlbnRyeSA9IGl0ZXItPnNlY29uZDsKKyAgICBTeW1ib2xUYWJsZUVudHJ5
JiBlbnRyeSA9IGl0ZXItPnZhbHVlOwogICAgIEFTU0VSVCghZW50cnkuaXNOdWxsKCkpOwogICAg
IGVudHJ5Lm5vdGlmeVdyaXRlKCk7CiAgICAgZW50cnkuc2V0QXR0cmlidXRlcyhhdHRyaWJ1dGVz
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hl
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlLmNwcAppbmRl
eCBjNjdkYWI4ZTYxZWUwMmExNjkxYWY0Nzk2N2IwZGJkMzhlOWU2NDU0Li44YWNhZmJhMjNhNjA0
NGRjZTg3YjhhZjY2Mzk5MmExN2VmNTdiZjg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWdFeHBDYWNoZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUmVnRXhwQ2FjaGUuY3BwCkBAIC04MCw3ICs4MCw3IEBAIHZvaWQgUmVnRXhwQ2Fj
aGU6OmludmFsaWRhdGVDb2RlKCkKIAogICAgIFJlZ0V4cENhY2hlTWFwOjppdGVyYXRvciBlbmQg
PSBtX3dlYWtDYWNoZS5lbmQoKTsKICAgICBmb3IgKFJlZ0V4cENhY2hlTWFwOjppdGVyYXRvciBp
dCA9IG1fd2Vha0NhY2hlLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBSZWdF
eHAqIHJlZ0V4cCA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIFJlZ0V4cCogcmVnRXhwID0g
aXQtPnZhbHVlLmdldCgpOwogICAgICAgICBpZiAoIXJlZ0V4cCkgLy8gU2tpcCB6b21iaWVzLgog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIHJlZ0V4cC0+aW52YWxpZGF0ZUNvZGUoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFs
dWVNYXBJbmxpbmVNZXRob2RzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFy
c2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9kcy5oCmluZGV4IGYzZWYzMmY0NmQzYmJmMzJiMzcy
NzAwYjExMmI5NWRkNWY1ZTg5NWUuLjEyZTkyY2YwYWE0MzBkZGFhNmNmODhjNGQ2MDUwYmU3N2U2
NzQyY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFy
cmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhvZHMuaApAQCAtODIsNyArODIsNyBA
QCBpbmxpbmUgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6QWRkUmVzdWx0IFNwYXJzZUFycmF5VmFsdWVN
YXA6OmFkZChKU09iamVjdCogYXJyYXksCiBpbmxpbmUgdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFw
OjpwdXRFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBhcnJheSwgdW5zaWduZWQgaSwg
SlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKIHsKICAgICBBZGRSZXN1bHQgcmVzdWx0
ID0gYWRkKGFycmF5LCBpKTsKLSAgICBTcGFyc2VBcnJheUVudHJ5JiBlbnRyeSA9IHJlc3VsdC5p
dGVyYXRvci0+c2Vjb25kOworICAgIFNwYXJzZUFycmF5RW50cnkmIGVudHJ5ID0gcmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZTsKIAogICAgIC8vIFRvIHNhdmUgYSBzZXBhcmF0ZSBmaW5kICYgYWRkLCB3
ZSBmaXJzdCBhbHdheXMgYWRkIHRvIHRoZSBzcGFyc2UgbWFwLgogICAgIC8vIEluIHRoZSB1bmNv
bW1vbiBjYXNlIHRoYXQgdGhpcyBpcyBhIG5ldyBwcm9wZXJ0eSwgYW5kIHRoZSBhcnJheSBpcyBu
b3QKQEAgLTEyNSw3ICsxMjUsNyBAQCBpbmxpbmUgdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjpw
dXRFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBhcnJheSwgdW5zaQogaW5saW5lIGJv
b2wgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6cHV0RGlyZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqIGFycmF5LCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVz
LCBQdXREaXJlY3RJbmRleE1vZGUgbW9kZSkKIHsKICAgICBBZGRSZXN1bHQgcmVzdWx0ID0gYWRk
KGFycmF5LCBpKTsKLSAgICBTcGFyc2VBcnJheUVudHJ5JiBlbnRyeSA9IHJlc3VsdC5pdGVyYXRv
ci0+c2Vjb25kOworICAgIFNwYXJzZUFycmF5RW50cnkmIGVudHJ5ID0gcmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZTsKIAogICAgIC8vIFRvIHNhdmUgYSBzZXBhcmF0ZSBmaW5kICYgYWRkLCB3ZSBmaXJz
dCBhbHdheXMgYWRkIHRvIHRoZSBzcGFyc2UgbWFwLgogICAgIC8vIEluIHRoZSB1bmNvbW1vbiBj
YXNlIHRoYXQgdGhpcyBpcyBhIG5ldyBwcm9wZXJ0eSwgYW5kIHRoZSBhcnJheSBpcyBub3QKQEAg
LTE5NCw3ICsxOTQsNyBAQCBpbmxpbmUgdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogdGhpc09iamVjdCwgU2xvdFZpc2l0b3ImCiAgICAgU3BhcnNlQXJyYXlW
YWx1ZU1hcCogdGhpc01hcCA9IGpzQ2FzdDxTcGFyc2VBcnJheVZhbHVlTWFwKj4odGhpc09iamVj
dCk7CiAgICAgaXRlcmF0b3IgZW5kID0gdGhpc01hcC0+bV9tYXAuZW5kKCk7CiAgICAgZm9yIChp
dGVyYXRvciBpdCA9IHRoaXNNYXAtPm1fbWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAg
ICAgICAgdmlzaXRvci5hcHBlbmQoJml0LT5zZWNvbmQpOworICAgICAgICB2aXNpdG9yLmFwcGVu
ZCgmaXQtPnZhbHVlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrR0NNYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1dlYWtHQ01hcC5oCmluZGV4IDY5MjYxNjVhNzg1YTc2N2RhMzc3YWNlYjI1
Mzk3MGNlYzNiOWE5NDguLjUyZTVlMjk0NmZkMTAzYjdmZWFmNjIxZjZmZDJhNTBkMDUzNDlkMDMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ01hcC5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ01hcC5oCkBAIC02Myw3ICs2
Myw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHR5cGVuYW1lIE1hcFR5cGU6Oml0ZXJhdG9y
IGVuZCA9IG1fbWFwLmVuZCgpOwogICAgICAgICBmb3IgKHR5cGVuYW1lIE1hcFR5cGU6Oml0ZXJh
dG9yIHB0ciA9IG1fbWFwLmJlZ2luKCk7IHB0ciAhPSBlbmQ7ICsrcHRyKQotICAgICAgICAgICAg
V2Vha1NldDo6ZGVhbGxvY2F0ZShwdHItPnNlY29uZCk7CisgICAgICAgICAgICBXZWFrU2V0Ojpk
ZWFsbG9jYXRlKHB0ci0+dmFsdWUpOwogICAgICAgICBtX21hcC5jbGVhcigpOwogICAgIH0KIApA
QCAtODAsOCArODAsOCBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVF9VTlVTRUQoZ2xvYmFsRGF0
YSwgZ2xvYmFsRGF0YS5hcGlMb2NrKCkuY3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSk7CiAg
ICAgICAgIHR5cGVuYW1lIE1hcFR5cGU6OkFkZFJlc3VsdCByZXN1bHQgPSBtX21hcC5hZGQoa2V5
LCAwKTsKICAgICAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgIFdlYWtT
ZXQ6OmRlYWxsb2NhdGUocmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOwotICAgICAgICByZXN1bHQu
aXRlcmF0b3ItPnNlY29uZCA9IFdlYWtTZXQ6OmFsbG9jYXRlKHZhbHVlLCB0aGlzLCBGaW5hbGl6
ZXJDYWxsYmFjazo6ZmluYWxpemVyQ29udGV4dEZvcihrZXkpKTsKKyAgICAgICAgICAgIFdlYWtT
ZXQ6OmRlYWxsb2NhdGUocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CisgICAgICAgIHJlc3VsdC5p
dGVyYXRvci0+dmFsdWUgPSBXZWFrU2V0OjphbGxvY2F0ZSh2YWx1ZSwgdGhpcywgRmluYWxpemVy
Q2FsbGJhY2s6OmZpbmFsaXplckNvbnRleHRGb3Ioa2V5KSk7CiAgICAgfQogCiAgICAgdm9pZCBy
ZW1vdmUoY29uc3QgS2V5VHlwZSYga2V5KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rvb2xzL1Byb2ZpbGVUcmVlTm9kZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xz
L1Byb2ZpbGVUcmVlTm9kZS5oCmluZGV4IDdiNTFlZmI4NWRiMzQ0MWEyMjI2M2I0MjQ5N2EzMTc1
MmI1YjUyZmQuLjdiNWE5NWVjNDA0NGI2M2YyMTExMzYxMjJkOTIzY2E4ODk0NjBhMzYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Qcm9maWxlVHJlZU5vZGUuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvUHJvZmlsZVRyZWVOb2RlLmgKQEAgLTUxLDcg
KzUxLDcgQEAgcHVibGljOgogICAgIAogICAgICAgICBQcm9maWxlVHJlZU5vZGUgbmV3RW50cnk7
CiAgICAgICAgIE1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fY2hpbGRyZW4tPmFkZChTdHJpbmco
bmFtZSksIG5ld0VudHJ5KTsKLSAgICAgICAgUHJvZmlsZVRyZWVOb2RlKiBjaGlsZEluTWFwID0g
JnJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICBQcm9maWxlVHJlZU5vZGUqIGNoaWxk
SW5NYXAgPSAmcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgKytjaGlsZEluTWFwLT5t
X2NvdW50OwogICAgICAgICByZXR1cm4gY2hpbGRJbk1hcDsKICAgICB9CkBAIC03Miw3ICs3Miw3
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB1aW50NjRfdCBjaGls
ZENvdW50ID0gMDsKICAgICAgICAgZm9yIChNYXA6Oml0ZXJhdG9yIGl0ID0gbV9jaGlsZHJlbi0+
YmVnaW4oKTsgaXQgIT0gbV9jaGlsZHJlbi0+ZW5kKCk7ICsraXQpCi0gICAgICAgICAgICBjaGls
ZENvdW50ICs9IGl0LT5zZWNvbmQuY291bnQoKTsKKyAgICAgICAgICAgIGNoaWxkQ291bnQgKz0g
aXQtPnZhbHVlLmNvdW50KCk7CiAgICAgICAgIHJldHVybiBjaGlsZENvdW50OwogICAgIH0KICAg
ICAKQEAgLTk3LDE5ICs5NywxOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGluZGVudDsgKytpKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAi
KTsKICAgICAgICAgICAgIGRhdGFMb2coIiUgOGxsZDogJXMgKCVsbGQgc3RhY2sgdG9wKVxuIiwK
LSAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KGVudHJ5LT5zZWNvbmQuY291
bnQoKSksCi0gICAgICAgICAgICAgICAgZW50cnktPmZpcnN0LnV0ZjgoKS5kYXRhKCksCi0gICAg
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihlbnRyeS0+c2Vjb25kLmNvdW50KCkg
LSBlbnRyeS0+c2Vjb25kLmNoaWxkQ291bnQoKSkpOworICAgICAgICAgICAgICAgIHN0YXRpY19j
YXN0PGxvbmcgbG9uZz4oZW50cnktPnZhbHVlLmNvdW50KCkpLAorICAgICAgICAgICAgICAgIGVu
dHJ5LT5rZXkudXRmOCgpLmRhdGEoKSwKKyAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxsb25n
IGxvbmc+KGVudHJ5LT52YWx1ZS5jb3VudCgpIC0gZW50cnktPnZhbHVlLmNoaWxkQ291bnQoKSkp
OwogCiAgICAgICAgICAgICAvLyBSZWN1cnNpdmVseSBkdW1wIHRoZSBjaGlsZCBub2Rlcy4KLSAg
ICAgICAgICAgIGVudHJ5LT5zZWNvbmQuZHVtcEludGVybmFsKGluZGVudCArIDEpOworICAgICAg
ICAgICAgZW50cnktPnZhbHVlLmR1bXBJbnRlcm5hbChpbmRlbnQgKyAxKTsKICAgICAgICAgfQog
ICAgIH0KIAogICAgIHN0YXRpYyBpbnQgY29tcGFyZUVudHJpZXMoY29uc3Qgdm9pZCogYSwgY29u
c3Qgdm9pZCogYikKICAgICB7Ci0gICAgICAgIHVpbnQ2NF90IGRhID0gKCpzdGF0aWNfY2FzdDxN
YXBFbnRyeSogY29uc3QgKj4oYSkpLT5zZWNvbmQuY291bnQoKTsKLSAgICAgICAgdWludDY0X3Qg
ZGIgPSAoKnN0YXRpY19jYXN0PE1hcEVudHJ5KiBjb25zdCAqPihiKSktPnNlY29uZC5jb3VudCgp
OworICAgICAgICB1aW50NjRfdCBkYSA9ICgqc3RhdGljX2Nhc3Q8TWFwRW50cnkqIGNvbnN0ICo+
KGEpKS0+dmFsdWUuY291bnQoKTsKKyAgICAgICAgdWludDY0X3QgZGIgPSAoKnN0YXRpY19jYXN0
PE1hcEVudHJ5KiBjb25zdCAqPihiKSktPnZhbHVlLmNvdW50KCk7CiAgICAgICAgIHJldHVybiAo
ZGEgPCBkYikgLSAoZGEgPiBkYik7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi9IYXNoQ291bnRlZFNldC5oIGIvU291cmNlL1dURi93dGYvSGFzaENvdW50ZWRTZXQuaAppbmRl
eCBlZjg5YmRiYzc1MjYxODVkZTAxNzUzZTAzZTlmNmIwYjc3ZTNlMDFkLi5lZmY0YTI5M2U5Yzcz
OWIxMmM0M2I2ODkxMjZkMGM4NDUwYmNkMDBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9I
YXNoQ291bnRlZFNldC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0hhc2hDb3VudGVkU2V0LmgKQEAg
LTE1NCw3ICsxNTQsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICBpbmxpbmUgdHlwZW5hbWUgSGFz
aENvdW50ZWRTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OkFkZFJlc3VsdCBIYXNo
Q291bnRlZFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6YWRkKGNvbnN0IFZhbHVl
VHlwZSAmdmFsdWUpCiAgICAgewogICAgICAgICBBZGRSZXN1bHQgcmVzdWx0ID0gbV9pbXBsLmFk
ZCh2YWx1ZSwgMCk7Ci0gICAgICAgICsrcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAg
ICsrcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9
CiAgICAgCkBAIC0xNzAsMTEgKzE3MCwxMSBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgaWYg
KGl0ID09IGVuZCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIHVuc2ln
bmVkIG9sZFZhbCA9IGl0LT5zZWNvbmQ7CisgICAgICAgIHVuc2lnbmVkIG9sZFZhbCA9IGl0LT52
YWx1ZTsKICAgICAgICAgQVNTRVJUKG9sZFZhbCk7CiAgICAgICAgIHVuc2lnbmVkIG5ld1ZhbCA9
IG9sZFZhbCAtIDE7CiAgICAgICAgIGlmIChuZXdWYWwpIHsKLSAgICAgICAgICAgIGl0LT5zZWNv
bmQgPSBuZXdWYWw7CisgICAgICAgICAgICBpdC0+dmFsdWUgPSBuZXdWYWw7CiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIApAQCAtMjI2LDcgKzIyNiw3IEBAIG5hbWVzcGFj
ZSBXVEYgewogICAgICAgICBpdGVyYXRvciBpdCA9IGNvbGxlY3Rpb24uYmVnaW4oKTsKICAgICAg
ICAgaXRlcmF0b3IgZW5kID0gY29sbGVjdGlvbi5lbmQoKTsKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaXQgIT0gZW5kOyArK2l0LCArK2kpCi0gICAgICAgICAgICB2ZWN0b3JbaV0gPSAo
Kml0KS5maXJzdDsKKyAgICAgICAgICAgIHZlY3RvcltpXSA9ICgqaXQpLmtleTsKICAgICB9CiAK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvSGFzaEl0ZXJhdG9ycy5oIGIvU291cmNlL1dU
Ri93dGYvSGFzaEl0ZXJhdG9ycy5oCmluZGV4IDYzOWZmNzI1MGExZWYwZmIzZjgyNGRjOTE2ODg0
OTZiODliNjVlMTcuLjliZTRkZTMyM2M1NjU4YjMzZjk1YjJmOTc3NmVjNWFlZTUyNzRiMmMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0hhc2hJdGVyYXRvcnMuaAorKysgYi9Tb3VyY2UvV1RG
L3d0Zi9IYXNoSXRlcmF0b3JzLmgKQEAgLTkxLDcgKzkxLDcgQEAgbmFtZXNwYWNlIFdURiB7CiAg
ICAgcHVibGljOgogICAgICAgICBIYXNoVGFibGVDb25zdEtleXNJdGVyYXRvcihjb25zdCBDb25z
dEl0ZXJhdG9yJiBpbXBsKSA6IG1faW1wbChpbXBsKSB7fQogICAgICAgICAKLSAgICAgICAgY29u
c3QgS2V5VHlwZSogZ2V0KCkgY29uc3QgeyByZXR1cm4gJihtX2ltcGwuZ2V0KCktPmZpcnN0KTsg
fQorICAgICAgICBjb25zdCBLZXlUeXBlKiBnZXQoKSBjb25zdCB7IHJldHVybiAmKG1faW1wbC5n
ZXQoKS0+a2V5KTsgfQogICAgICAgICBjb25zdCBLZXlUeXBlJiBvcGVyYXRvciooKSBjb25zdCB7
IHJldHVybiAqZ2V0KCk7IH0KICAgICAgICAgY29uc3QgS2V5VHlwZSogb3BlcmF0b3ItPigpIGNv
bnN0IHsgcmV0dXJuIGdldCgpOyB9CiAKQEAgLTEwOCw3ICsxMDgsNyBAQCBuYW1lc3BhY2UgV1RG
IHsKICAgICBwdWJsaWM6CiAgICAgICAgIEhhc2hUYWJsZUNvbnN0VmFsdWVzSXRlcmF0b3IoY29u
c3QgQ29uc3RJdGVyYXRvciYgaW1wbCkgOiBtX2ltcGwoaW1wbCkge30KICAgICAgICAgCi0gICAg
ICAgIGNvbnN0IE1hcHBlZFR5cGUqIGdldCgpIGNvbnN0IHsgcmV0dXJuICYobV9pbXBsLmdldCgp
LT5zZWNvbmQpOyB9CisgICAgICAgIGNvbnN0IE1hcHBlZFR5cGUqIGdldCgpIGNvbnN0IHsgcmV0
dXJuICYobV9pbXBsLmdldCgpLT52YWx1ZSk7IH0KICAgICAgICAgY29uc3QgTWFwcGVkVHlwZSYg
b3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKmdldCgpOyB9CiAgICAgICAgIGNvbnN0IE1hcHBl
ZFR5cGUqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBnZXQoKTsgfQogCkBAIC0xMjYsNyAr
MTI2LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgcHVibGljOgogICAgICAgICBIYXNoVGFibGVL
ZXlzSXRlcmF0b3IoY29uc3QgSXRlcmF0b3ImIGltcGwpIDogbV9pbXBsKGltcGwpIHt9CiAgICAg
ICAgIAotICAgICAgICBLZXlUeXBlKiBnZXQoKSBjb25zdCB7IHJldHVybiAmKG1faW1wbC5nZXQo
KS0+Zmlyc3QpOyB9CisgICAgICAgIEtleVR5cGUqIGdldCgpIGNvbnN0IHsgcmV0dXJuICYobV9p
bXBsLmdldCgpLT5rZXkpOyB9CiAgICAgICAgIEtleVR5cGUmIG9wZXJhdG9yKigpIGNvbnN0IHsg
cmV0dXJuICpnZXQoKTsgfQogICAgICAgICBLZXlUeXBlKiBvcGVyYXRvci0+KCkgY29uc3QgeyBy
ZXR1cm4gZ2V0KCk7IH0KIApAQCAtMTQ5LDcgKzE0OSw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAg
IHB1YmxpYzoKICAgICAgICAgSGFzaFRhYmxlVmFsdWVzSXRlcmF0b3IoY29uc3QgSXRlcmF0b3Im
IGltcGwpIDogbV9pbXBsKGltcGwpIHt9CiAgICAgICAgIAotICAgICAgICBNYXBwZWRUeXBlKiBn
ZXQoKSBjb25zdCB7IHJldHVybiAmKG1faW1wbC5nZXQoKS0+c2Vjb25kKTsgfQorICAgICAgICBN
YXBwZWRUeXBlKiBnZXQoKSBjb25zdCB7IHJldHVybiAmKG1faW1wbC5nZXQoKS0+dmFsdWUpOyB9
CiAgICAgICAgIE1hcHBlZFR5cGUmIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICpnZXQoKTsg
fQogICAgICAgICBNYXBwZWRUeXBlKiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gZ2V0KCk7
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvSGFzaE1hcC5oIGIvU291cmNlL1dURi93
dGYvSGFzaE1hcC5oCmluZGV4IDkwMTA0NzRjODI1NTYzZWY4NDFiOTY4N2ZlZmY0OTRhYTY1NWI0
ZTguLjEwZWU0MjVkYTk1OTZiYWFkZjM0ZTU3OGVmNWFiZTU3MGY5YWUwZDYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvd3RmL0hhc2hNYXAuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoTWFwLmgK
QEAgLTM1LDcgKzM1LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgfTsKIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBLZXlWYWx1ZVBhaXJLZXlFeHRyYWN0b3IgewotICAgICAgICBz
dGF0aWMgY29uc3QgdHlwZW5hbWUgVDo6S2V5VHlwZSYgZXh0cmFjdChjb25zdCBUJiBwKSB7IHJl
dHVybiBwLmZpcnN0OyB9CisgICAgICAgIHN0YXRpYyBjb25zdCB0eXBlbmFtZSBUOjpLZXlUeXBl
JiBleHRyYWN0KGNvbnN0IFQmIHApIHsgcmV0dXJuIHAua2V5OyB9CiAgICAgfTsKIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNo
QXJnID0gdHlwZW5hbWUgRGVmYXVsdEhhc2g8S2V5QXJnPjo6SGFzaCwKQEAgLTIxMSw3ICsyMTEs
NyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzSXNFbXB0
eVZhbHVlRnVuY3Rpb24gPSB0cnVlOwogICAgICAgICBzdGF0aWMgYm9vbCBpc0VtcHR5VmFsdWUo
Y29uc3QgdHlwZW5hbWUgS2V5VmFsdWVQYWlySGFzaFRyYWl0czxLZXlUcmFpdHMsIE1hcHBlZFRy
YWl0cz46OlRyYWl0VHlwZSYgdmFsdWUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBp
c0hhc2hUcmFpdHNFbXB0eVZhbHVlPEtleVRyYWl0cz4odmFsdWUuZmlyc3QpOworICAgICAgICAg
ICAgcmV0dXJuIGlzSGFzaFRyYWl0c0VtcHR5VmFsdWU8S2V5VHJhaXRzPih2YWx1ZS5rZXkpOwog
ICAgICAgICB9CiAgICAgfTsKIApAQCAtMjIxLDggKzIyMSw4IEBAIG5hbWVzcGFjZSBXVEYgewog
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBzdGF0aWMgYm9vbCBlcXVh
bChjb25zdCBUJiBhLCBjb25zdCBVJiBiKSB7IHJldHVybiBIYXNoRnVuY3Rpb25zOjplcXVhbChh
LCBiKTsgfQogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFt
ZSBWPiBzdGF0aWMgdm9pZCB0cmFuc2xhdGUoVCYgbG9jYXRpb24sIGNvbnN0IFUmIGtleSwgY29u
c3QgViYgbWFwcGVkKQogICAgICAgICB7Ci0gICAgICAgICAgICBsb2NhdGlvbi5maXJzdCA9IGtl
eTsKLSAgICAgICAgICAgIFZhbHVlVHJhaXRzOjpWYWx1ZVRyYWl0czo6c3RvcmUobWFwcGVkLCBs
b2NhdGlvbi5zZWNvbmQpOworICAgICAgICAgICAgbG9jYXRpb24ua2V5ID0ga2V5OworICAgICAg
ICAgICAgVmFsdWVUcmFpdHM6OlZhbHVlVHJhaXRzOjpzdG9yZShtYXBwZWQsIGxvY2F0aW9uLnZh
bHVlKTsKICAgICAgICAgfQogICAgIH07CiAKQEAgLTIzMiw4ICsyMzIsOCBAQCBuYW1lc3BhY2Ug
V1RGIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gc3RhdGljIGJv
b2wgZXF1YWwoY29uc3QgVCYgYSwgY29uc3QgVSYgYikgeyByZXR1cm4gVHJhbnNsYXRvcjo6ZXF1
YWwoYSwgYik7IH0KICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlw
ZW5hbWUgVj4gc3RhdGljIHZvaWQgdHJhbnNsYXRlKFQmIGxvY2F0aW9uLCBjb25zdCBVJiBrZXks
IGNvbnN0IFYmIG1hcHBlZCwgdW5zaWduZWQgaGFzaENvZGUpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIFRyYW5zbGF0b3I6OnRyYW5zbGF0ZShsb2NhdGlvbi5maXJzdCwga2V5LCBoYXNoQ29kZSk7
Ci0gICAgICAgICAgICBWYWx1ZVRyYWl0czo6VmFsdWVUcmFpdHM6OnN0b3JlKG1hcHBlZCwgbG9j
YXRpb24uc2Vjb25kKTsKKyAgICAgICAgICAgIFRyYW5zbGF0b3I6OnRyYW5zbGF0ZShsb2NhdGlv
bi5rZXksIGtleSwgaGFzaENvZGUpOworICAgICAgICAgICAgVmFsdWVUcmFpdHM6OlZhbHVlVHJh
aXRzOjpzdG9yZShtYXBwZWQsIGxvY2F0aW9uLnZhbHVlKTsKICAgICAgICAgfQogICAgIH07CiAK
QEAgLTM0MSw3ICszNDEsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgQWRkUmVzdWx0IHJl
c3VsdCA9IGlubGluZUFkZChrZXksIG1hcHBlZCk7CiAgICAgICAgIGlmICghcmVzdWx0LmlzTmV3
RW50cnkpIHsKICAgICAgICAgICAgIC8vIFRoZSBpbmxpbmVBZGQgY2FsbCBhYm92ZSBmb3VuZCBh
biBleGlzdGluZyBoYXNoIHRhYmxlIGVudHJ5OyB3ZSBuZWVkIHRvIHNldCB0aGUgbWFwcGVkIHZh
bHVlLgotICAgICAgICAgICAgTWFwcGVkVHJhaXRzOjpzdG9yZShtYXBwZWQsIHJlc3VsdC5pdGVy
YXRvci0+c2Vjb25kKTsKKyAgICAgICAgICAgIE1hcHBlZFRyYWl0czo6c3RvcmUobWFwcGVkLCBy
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgIH0KQEAgLTM2OCw3ICszNjgsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgVmFs
dWVUeXBlKiBlbnRyeSA9IGNvbnN0X2Nhc3Q8SGFzaFRhYmxlVHlwZSY+KG1faW1wbCkubG9va3Vw
KGtleSk7CiAgICAgICAgIGlmICghZW50cnkpCiAgICAgICAgICAgICByZXR1cm4gTWFwcGVkVHJh
aXRzOjpwZWVrKE1hcHBlZFRyYWl0czo6ZW1wdHlWYWx1ZSgpKTsKLSAgICAgICAgcmV0dXJuIE1h
cHBlZFRyYWl0czo6cGVlayhlbnRyeS0+c2Vjb25kKTsKKyAgICAgICAgcmV0dXJuIE1hcHBlZFRy
YWl0czo6cGVlayhlbnRyeS0+dmFsdWUpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+CkBAIC0z
OTksNyArMzk5LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIGl0ZXJhdG9yIGl0ID0gZmlu
ZChrZXkpOwogICAgICAgICBpZiAoaXQgPT0gZW5kKCkpCiAgICAgICAgICAgICByZXR1cm4gTWFw
cGVkVHJhaXRzOjpwYXNzT3V0KE1hcHBlZFRyYWl0czo6ZW1wdHlWYWx1ZSgpKTsKLSAgICAgICAg
TWFwcGVkUGFzc091dFR5cGUgcmVzdWx0ID0gTWFwcGVkVHJhaXRzOjpwYXNzT3V0KGl0LT5zZWNv
bmQpOworICAgICAgICBNYXBwZWRQYXNzT3V0VHlwZSByZXN1bHQgPSBNYXBwZWRUcmFpdHM6OnBh
c3NPdXQoaXQtPnZhbHVlKTsKICAgICAgICAgcmVtb3ZlKGl0KTsKICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICB9CkBAIC00MjEsOCArNDIxLDggQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAg
IGNvbnN0X2l0ZXJhdG9yIGVuZCA9IGEuZW5kKCk7CiAgICAgICAgIGNvbnN0X2l0ZXJhdG9yIG5v
dEZvdW5kID0gYi5lbmQoKTsKICAgICAgICAgZm9yIChjb25zdF9pdGVyYXRvciBpdCA9IGEuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBjb25zdF9pdGVyYXRvciBiUG9z
ID0gYi5maW5kKGl0LT5maXJzdCk7Ci0gICAgICAgICAgICBpZiAoYlBvcyA9PSBub3RGb3VuZCB8
fCBpdC0+c2Vjb25kICE9IGJQb3MtPnNlY29uZCkKKyAgICAgICAgICAgIGNvbnN0X2l0ZXJhdG9y
IGJQb3MgPSBiLmZpbmQoaXQtPmtleSk7CisgICAgICAgICAgICBpZiAoYlBvcyA9PSBub3RGb3Vu
ZCB8fCBpdC0+dmFsdWUgIT0gYlBvcy0+dmFsdWUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9CiAKQEAgLTQzNSwzNCArNDM1LDIyIEBAIG5hbWVzcGFjZSBXVEYgewog
ICAgICAgICByZXR1cm4gIShhID09IGIpOwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEhhc2hUYWJsZVR5cGU+Ci0gICAgdm9pZCBkZWxldGVBbGxQYWlyU2Vjb25kcyhIYXNoVGFibGVU
eXBlJiBjb2xsZWN0aW9uKQotICAgIHsKLSAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBIYXNoVGFi
bGVUeXBlOjpjb25zdF9pdGVyYXRvciBpdGVyYXRvcjsKLSAgICAgICAgaXRlcmF0b3IgZW5kID0g
Y29sbGVjdGlvbi5lbmQoKTsKLSAgICAgICAgZm9yIChpdGVyYXRvciBpdCA9IGNvbGxlY3Rpb24u
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgZGVsZXRlIGl0LT5zZWNvbmQ7
Ci0gICAgfQotCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUg
ViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KICAgICBpbmxpbmUgdm9pZCBkZWxldGVBbGxWYWx1
ZXMoY29uc3QgSGFzaE1hcDxULCBVLCBWLCBXLCBYPiYgY29sbGVjdGlvbikKICAgICB7Ci0gICAg
ICAgIGRlbGV0ZUFsbFBhaXJTZWNvbmRzKGNvbGxlY3Rpb24pOwotICAgIH0KLQotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEhhc2hUYWJsZVR5cGU+Ci0gICAgdm9pZCBkZWxldGVBbGxQYWlyRmlyc3Rz
KEhhc2hUYWJsZVR5cGUmIGNvbGxlY3Rpb24pCi0gICAgewotICAgICAgICB0eXBlZGVmIHR5cGVu
YW1lIEhhc2hUYWJsZVR5cGU6OmNvbnN0X2l0ZXJhdG9yIGl0ZXJhdG9yOworICAgICAgICB0eXBl
ZGVmIHR5cGVuYW1lIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmNvbnN0X2l0ZXJhdG9yIGl0ZXJh
dG9yOwogICAgICAgICBpdGVyYXRvciBlbmQgPSBjb2xsZWN0aW9uLmVuZCgpOwogICAgICAgICBm
b3IgKGl0ZXJhdG9yIGl0ID0gY29sbGVjdGlvbi5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0g
ICAgICAgICAgICBkZWxldGUgaXQtPmZpcnN0OworICAgICAgICAgICAgZGVsZXRlIGl0LT52YWx1
ZTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFt
ZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgogICAgIGlubGluZSB2b2lkIGRlbGV0ZUFsbEtl
eXMoY29uc3QgSGFzaE1hcDxULCBVLCBWLCBXLCBYPiYgY29sbGVjdGlvbikKICAgICB7Ci0gICAg
ICAgIGRlbGV0ZUFsbFBhaXJGaXJzdHMoY29sbGVjdGlvbik7CisgICAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6Y29uc3RfaXRlcmF0b3IgaXRlcmF0b3I7Cisg
ICAgICAgIGl0ZXJhdG9yIGVuZCA9IGNvbGxlY3Rpb24uZW5kKCk7CisgICAgICAgIGZvciAoaXRl
cmF0b3IgaXQgPSBjb2xsZWN0aW9uLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAg
ICAgIGRlbGV0ZSBpdC0+a2V5OwogICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFt
ZSBZPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmggYi9Tb3VyY2UvV1RG
L3d0Zi9IYXNoVGFibGUuaAppbmRleCAxY2UzYzVjZjY4OGVmMGE4MWUxMDYxYmM2Y2UyNjIwYmUz
ZDk4MDBlLi4xNmZkZDllODFkMjgzYjY5ZTYxZDQ2YmE2Zjk1ZmQxMmUyNDY5YzY2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9IYXNo
VGFibGUuaApAQCAtMjg2LDggKzI4Niw4IEBAIG5hbWVzcGFjZSBXVEYgewogCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIHZvaWQgaGFzaFRhYmxlU3dhcChLZXlW
YWx1ZVBhaXI8VCwgVT4mIGEsIEtleVZhbHVlUGFpcjxULCBVPiYgYikKICAgICB7Ci0gICAgICAg
IHN3YXAoYS5maXJzdCwgYi5maXJzdCk7Ci0gICAgICAgIHN3YXAoYS5zZWNvbmQsIGIuc2Vjb25k
KTsKKyAgICAgICAgc3dhcChhLmtleSwgYi5rZXkpOworICAgICAgICBzd2FwKGEudmFsdWUsIGIu
dmFsdWUpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIGJvb2wgdXNlU3dhcD4g
c3RydWN0IE1vdmVyOwpAQCAtMTI0Niw3ICsxMjQ2LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAg
ICAgICAgICBBU1NFUlQoZW50cnkgPT0gaXQubV9wb3NpdGlvbik7CiAgICAgICAgICAgICArK2Nv
dW50OwogCi0gICAgICAgICAgICBWYWx1ZUNoZWNrPEtleT46OmNoZWNrQ29uc2lzdGVuY3koaXQt
PmZpcnN0KTsKKyAgICAgICAgICAgIFZhbHVlQ2hlY2s8S2V5Pjo6Y2hlY2tDb25zaXN0ZW5jeShp
dC0+a2V5KTsKICAgICAgICAgfQogCiAgICAgICAgIEFTU0VSVChjb3VudCA9PSBtX2tleUNvdW50
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0hhc2hUcmFpdHMuaCBiL1NvdXJjZS9XVEYv
d3RmL0hhc2hUcmFpdHMuaAppbmRleCBlYmU3OTVlYjFhODk5ZTJjNjFlZTVkYzM2NDczN2IyOWI4
NTcwYTA5Li43M2JmMmJlYWEyZTVlZjRlZmVkOWRiMGMyZGVhZjNmMTEyZWI0YWFkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoVHJhaXRzLmgKKysrIGIvU291cmNlL1dURi93dGYvSGFz
aFRyYWl0cy5oCkBAIC0xOTMsMjEgKzE5MywyMCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAg
fQogCiAgICAgICAgIEtleVZhbHVlUGFpcihjb25zdCBLZXlUeXBlQXJnJiBrZXksIGNvbnN0IFZh
bHVlVHlwZUFyZyYgdmFsdWUpCi0gICAgICAgICAgICA6IGZpcnN0KGtleSkKLSAgICAgICAgICAg
ICwgc2Vjb25kKHZhbHVlKQorICAgICAgICAgICAgOiBrZXkoa2V5KQorICAgICAgICAgICAgLCB2
YWx1ZSh2YWx1ZSkKICAgICAgICAgewogICAgICAgICB9CiAKICAgICAgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIE90aGVyS2V5VHlwZSwgdHlwZW5hbWUgT3RoZXJWYWx1ZVR5cGU+CiAgICAgICAgIEtl
eVZhbHVlUGFpcihjb25zdCBLZXlWYWx1ZVBhaXI8T3RoZXJLZXlUeXBlLCBPdGhlclZhbHVlVHlw
ZT4mIG90aGVyKQotICAgICAgICAgICAgOiBmaXJzdChvdGhlci5maXJzdCkKLSAgICAgICAgICAg
ICwgc2Vjb25kKG90aGVyLnNlY29uZCkKKyAgICAgICAgICAgIDoga2V5KG90aGVyLmtleSkKKyAg
ICAgICAgICAgICwgdmFsdWUob3RoZXIudmFsdWUpCiAgICAgICAgIHsKICAgICAgICAgfQogCi0g
ICAgICAgIC8vIFRPRE86IFJlbmFtZSB0aGVzZSB0byBrZXkgYW5kIHZhbHVlLiBTZWUgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyNzg0LgotICAgICAgICBLZXlUeXBl
QXJnIGZpcnN0OwotICAgICAgICBWYWx1ZVR5cGVBcmcgc2Vjb25kOworICAgICAgICBLZXlUeXBl
QXJnIGtleTsKKyAgICAgICAgVmFsdWVUeXBlQXJnIHZhbHVlOwogICAgIH07CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIFZhbHVlVHJhaXRzQXJnPgpAQCAt
MjI0LDggKzIyMyw4IEBAIG5hbWVzcGFjZSBXVEYgewogCiAgICAgICAgIHN0YXRpYyBjb25zdCBp
bnQgbWluaW11bVRhYmxlU2l6ZSA9IEtleVRyYWl0czo6bWluaW11bVRhYmxlU2l6ZTsKIAotICAg
ICAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoVHJhaXRUeXBlJiBzbG90KSB7
IEtleVRyYWl0czo6Y29uc3RydWN0RGVsZXRlZFZhbHVlKHNsb3QuZmlyc3QpOyB9Ci0gICAgICAg
IHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0IFRyYWl0VHlwZSYgdmFsdWUpIHsgcmV0
dXJuIEtleVRyYWl0czo6aXNEZWxldGVkVmFsdWUodmFsdWUuZmlyc3QpOyB9CisgICAgICAgIHN0
YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShUcmFpdFR5cGUmIHNsb3QpIHsgS2V5VHJh
aXRzOjpjb25zdHJ1Y3REZWxldGVkVmFsdWUoc2xvdC5rZXkpOyB9CisgICAgICAgIHN0YXRpYyBi
b29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0IFRyYWl0VHlwZSYgdmFsdWUpIHsgcmV0dXJuIEtleVRy
YWl0czo6aXNEZWxldGVkVmFsdWUodmFsdWUua2V5KTsgfQogICAgIH07CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvTWVtb3J5SW5zdHJ1bWVudGF0aW9uLmggYi9Tb3VyY2UvV1RGL3d0Zi9NZW1vcnlJbnN0cnVt
ZW50YXRpb24uaAppbmRleCAwNGNhOGQyMGUwNmRjZjZjMDllYWUzY2Q2ODM5NzE3YjJmODg4NzA2
Li5iMjcwNzkxMjg3NGE2ZjU1YWVkMTc3NjI4OWQ5NTcyMTY3ZWUwY2Q3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi9NZW1vcnlJbnN0cnVtZW50YXRpb24uaAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi9NZW1vcnlJbnN0cnVtZW50YXRpb24uaApAQCAtMjkzLDggKzI5Myw4IEBAIHZvaWQgTWVtb3J5
SW5zdHJ1bWVudGF0aW9uOjphZGRJbnN0cnVtZW50ZWRNYXBFbnRyaWVzKGNvbnN0IE1hcFR5cGUm
IG1hcCwgTWVtb3J5CiB7CiAgICAgdHlwZW5hbWUgTWFwVHlwZTo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gbWFwLmVuZCgpOwogICAgIGZvciAodHlwZW5hbWUgTWFwVHlwZTo6Y29uc3RfaXRlcmF0b3Ig
aSA9IG1hcC5iZWdpbigpOyBpICE9IGVuZDsgKytpKSB7Ci0gICAgICAgIGFkZEluc3RydW1lbnRl
ZE9iamVjdChpLT5maXJzdCwgb3duZXJPYmplY3RUeXBlKTsKLSAgICAgICAgYWRkSW5zdHJ1bWVu
dGVkT2JqZWN0KGktPnNlY29uZCwgb3duZXJPYmplY3RUeXBlKTsKKyAgICAgICAgYWRkSW5zdHJ1
bWVudGVkT2JqZWN0KGktPmtleSwgb3duZXJPYmplY3RUeXBlKTsKKyAgICAgICAgYWRkSW5zdHJ1
bWVudGVkT2JqZWN0KGktPnZhbHVlLCBvd25lck9iamVjdFR5cGUpOwogICAgIH0KIH0KIApAQCAt
MzAzLDcgKzMwMyw3IEBAIHZvaWQgTWVtb3J5SW5zdHJ1bWVudGF0aW9uOjphZGRJbnN0cnVtZW50
ZWRNYXBWYWx1ZXMoY29uc3QgTWFwVHlwZSYgbWFwLCBNZW1vcnlPCiB7CiAgICAgdHlwZW5hbWUg
TWFwVHlwZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLmVuZCgpOwogICAgIGZvciAodHlwZW5h
bWUgTWFwVHlwZTo6Y29uc3RfaXRlcmF0b3IgaSA9IG1hcC5iZWdpbigpOyBpICE9IGVuZDsgKytp
KQotICAgICAgICBhZGRJbnN0cnVtZW50ZWRPYmplY3QoaS0+c2Vjb25kLCBvd25lck9iamVjdFR5
cGUpOworICAgICAgICBhZGRJbnN0cnVtZW50ZWRPYmplY3QoaS0+dmFsdWUsIG93bmVyT2JqZWN0
VHlwZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIExpc3RIYXNoU2V0VHlwZT4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3IuY3BwIGIvU291cmNlL1dURi93dGYvTWV0
YUFsbG9jYXRvci5jcHAKaW5kZXggOWVmY2ZmMmViMTNmNzJjY2I1OTc3NTFjODQzYmI0Mjk1MWZj
NzRhMy4uNzNiMzZhYTQyMWY4YTk1NTA3YWFkOTZhM2E0YmFmODJhZTExZDUzZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvci5jcHAKKysrIGIvU291cmNlL1dURi93dGYv
TWV0YUFsbG9jYXRvci5jcHAKQEAgLTMwOCw5ICszMDgsOSBAQCB2b2lkIE1ldGFBbGxvY2F0b3I6
OmFkZEZyZWVTcGFjZSh2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVzKQogICAgICAgICAv
LyBXZSBoYXZlIHNvbWV0aGluZyB3ZSBjYW4gY29hbGVzY2Ugd2l0aCBvbiB0aGUgbGVmdC4gUmVt
b3ZlIGl0IGZyb20gdGhlIHRyZWUsIGFuZAogICAgICAgICAvLyByZW1vdmUgaXRzIGVuZCBmcm9t
IHRoZSBlbmQgYWRkcmVzcyBtYXAuCiAgICAgICAgIAotICAgICAgICBBU1NFUlQocmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGxlZnROZWlnaGJvci0+
c2Vjb25kLT5tX3N0YXJ0KSArIGxlZnROZWlnaGJvci0+c2Vjb25kLT5tX3NpemVJbkJ5dGVzKSA9
PSBsZWZ0TmVpZ2hib3ItPmZpcnN0KTsKKyAgICAgICAgQVNTRVJUKHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihsZWZ0TmVpZ2hib3ItPnZhbHVlLT5t
X3N0YXJ0KSArIGxlZnROZWlnaGJvci0+dmFsdWUtPm1fc2l6ZUluQnl0ZXMpID09IGxlZnROZWln
aGJvci0+a2V5KTsKICAgICAgICAgCi0gICAgICAgIEZyZWVTcGFjZU5vZGUqIGxlZnROb2RlID0g
bGVmdE5laWdoYm9yLT5zZWNvbmQ7CisgICAgICAgIEZyZWVTcGFjZU5vZGUqIGxlZnROb2RlID0g
bGVmdE5laWdoYm9yLT52YWx1ZTsKICAgICAgICAgCiAgICAgICAgIHZvaWQqIGxlZnRTdGFydCA9
IGxlZnROb2RlLT5tX3N0YXJ0OwogICAgICAgICBzaXplX3QgbGVmdFNpemUgPSBsZWZ0Tm9kZS0+
bV9zaXplSW5CeXRlczsKQEAgLTMyNiwxMCArMzI2LDEwIEBAIHZvaWQgTWV0YUFsbG9jYXRvcjo6
YWRkRnJlZVNwYWNlKHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMpCiAgICAgICAgICAg
ICAvLyBGcmVlaW5nIHNvbWV0aGluZyBpbiB0aGUgbWlkZGxlIG9mIGZyZWUgYmxvY2tzLiBDb2Fs
ZXNjZSBib3RoIGxlZnQgYW5kCiAgICAgICAgICAgICAvLyByaWdodCwgd2hpbHN0IHJlbW92aW5n
IHRoZSByaWdodCBuZWlnaGJvciBmcm9tIHRoZSBtYXBzLgogICAgICAgICAgICAgCi0gICAgICAg
ICAgICBBU1NFUlQocmlnaHROZWlnaGJvci0+c2Vjb25kLT5tX3N0YXJ0ID09IHJpZ2h0TmVpZ2hi
b3ItPmZpcnN0KTsKKyAgICAgICAgICAgIEFTU0VSVChyaWdodE5laWdoYm9yLT52YWx1ZS0+bV9z
dGFydCA9PSByaWdodE5laWdoYm9yLT5rZXkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBG
cmVlU3BhY2VOb2RlKiByaWdodE5vZGUgPSByaWdodE5laWdoYm9yLT5zZWNvbmQ7Ci0gICAgICAg
ICAgICB2b2lkKiByaWdodFN0YXJ0ID0gcmlnaHROZWlnaGJvci0+Zmlyc3Q7CisgICAgICAgICAg
ICBGcmVlU3BhY2VOb2RlKiByaWdodE5vZGUgPSByaWdodE5laWdoYm9yLT52YWx1ZTsKKyAgICAg
ICAgICAgIHZvaWQqIHJpZ2h0U3RhcnQgPSByaWdodE5laWdoYm9yLT5rZXk7CiAgICAgICAgICAg
ICBzaXplX3QgcmlnaHRTaXplID0gcmlnaHROb2RlLT5tX3NpemVJbkJ5dGVzOwogICAgICAgICAg
ICAgdm9pZCogcmlnaHRFbmQgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9j
YXN0PHVpbnRwdHJfdD4ocmlnaHRTdGFydCkgKyByaWdodFNpemUpOwogICAgICAgICAgICAgCkBA
IC0zNTYsOCArMzU2LDggQEAgdm9pZCBNZXRhQWxsb2NhdG9yOjphZGRGcmVlU3BhY2Uodm9pZCog
c3RhcnQsIHNpemVfdCBzaXplSW5CeXRlcykKICAgICAgICAgLy8gQ2Fubm90IGNvYWxlc2NlIHdp
dGggbGVmdDsgdHJ5IHRvIHNlZSBpZiB3ZSBjYW4gY29hbGVzY2Ugd2l0aCByaWdodC4KICAgICAg
ICAgCiAgICAgICAgIGlmIChyaWdodE5laWdoYm9yICE9IG1fZnJlZVNwYWNlU3RhcnRBZGRyZXNz
TWFwLmVuZCgpKSB7Ci0gICAgICAgICAgICBGcmVlU3BhY2VOb2RlKiByaWdodE5vZGUgPSByaWdo
dE5laWdoYm9yLT5zZWNvbmQ7Ci0gICAgICAgICAgICB2b2lkKiByaWdodFN0YXJ0ID0gcmlnaHRO
ZWlnaGJvci0+Zmlyc3Q7CisgICAgICAgICAgICBGcmVlU3BhY2VOb2RlKiByaWdodE5vZGUgPSBy
aWdodE5laWdoYm9yLT52YWx1ZTsKKyAgICAgICAgICAgIHZvaWQqIHJpZ2h0U3RhcnQgPSByaWdo
dE5laWdoYm9yLT5rZXk7CiAgICAgICAgICAgICBzaXplX3QgcmlnaHRTaXplID0gcmlnaHROb2Rl
LT5tX3NpemVJbkJ5dGVzOwogICAgICAgICAgICAgdm9pZCogcmlnaHRFbmQgPSByZWludGVycHJl
dF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocmlnaHRTdGFydCkgKyBy
aWdodFNpemUpOwogICAgICAgICAgICAgCkBAIC00MDMsNyArNDAzLDcgQEAgdm9pZCBNZXRhQWxs
b2NhdG9yOjppbmNyZW1lbnRQYWdlT2NjdXBhbmN5KHZvaWQqIGFkZHJlc3MsIHNpemVfdCBzaXpl
SW5CeXRlcykKICAgICAgICAgICAgIG1fYnl0ZXNDb21taXR0ZWQgKz0gbV9wYWdlU2l6ZTsKICAg
ICAgICAgICAgIG5vdGlmeU5lZWRQYWdlKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHBhZ2UgPDwg
bV9sb2dQYWdlU2l6ZSkpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGl0ZXItPnNlY29u
ZCsrOworICAgICAgICAgICAgaXRlci0+dmFsdWUrKzsKICAgICB9CiB9CiAKQEAgLTQxNSw3ICs0
MTUsNyBAQCB2b2lkIE1ldGFBbGxvY2F0b3I6OmRlY3JlbWVudFBhZ2VPY2N1cGFuY3kodm9pZCog
YWRkcmVzcywgc2l6ZV90IHNpemVJbkJ5dGVzKQogICAgIGZvciAodWludHB0cl90IHBhZ2UgPSBm
aXJzdFBhZ2U7IHBhZ2UgPD0gbGFzdFBhZ2U7ICsrcGFnZSkgewogICAgICAgICBIYXNoTWFwPHVp
bnRwdHJfdCwgc2l6ZV90Pjo6aXRlcmF0b3IgaXRlciA9IG1fcGFnZU9jY3VwYW5jeU1hcC5maW5k
KHBhZ2UpOwogICAgICAgICBBU1NFUlQoaXRlciAhPSBtX3BhZ2VPY2N1cGFuY3lNYXAuZW5kKCkp
OwotICAgICAgICBpZiAoIS0tKGl0ZXItPnNlY29uZCkpIHsKKyAgICAgICAgaWYgKCEtLShpdGVy
LT52YWx1ZSkpIHsKICAgICAgICAgICAgIG1fcGFnZU9jY3VwYW5jeU1hcC5yZW1vdmUoaXRlcik7
CiAgICAgICAgICAgICBtX2J5dGVzQ29tbWl0dGVkIC09IG1fcGFnZVNpemU7CiAgICAgICAgICAg
ICBub3RpZnlQYWdlSXNGcmVlKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHBhZ2UgPDwgbV9sb2dQ
YWdlU2l6ZSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUmVmQ291bnRlZExlYWtDb3Vu
dGVyLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1JlZkNvdW50ZWRMZWFrQ291bnRlci5jcHAKaW5kZXgg
NjcwZjJhMGNlYzU5OWM2ZDRmMzE2NDRlYmViNTg3NDE1ZWY0MzIxYS4uNGEwNDUyODI0ODlmZTk1
YTE3ZTIzOTE5NzczZDM3Y2IyNDQxMGJlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUmVm
Q291bnRlZExlYWtDb3VudGVyLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9SZWZDb3VudGVkTGVh
a0NvdW50ZXIuY3BwCkBAIC03MSw3ICs3MSw3IEBAIFJlZkNvdW50ZWRMZWFrQ291bnRlcjo6flJl
ZkNvdW50ZWRMZWFrQ291bnRlcigpCiAgICAgICAgICAgICBMT0coUmVmQ291bnRlZExlYWtzLCAi
TEVBSzogJXUgJXMiLCBtX2NvdW50LCBtX2Rlc2NyaXB0aW9uKTsKICAgICAgICAgZWxzZSBpZiAo
IWxvZ2dlZFN1cHByZXNzaW9uUmVhc29uKSB7CiAgICAgICAgICAgICAvLyBUaGlzIGxvZ3Mgb25s
eSBvbmUgcmVhc29uLiBMYXRlciB3ZSBjb3VsZCBjaGFuZ2UgaXQgc28gd2UgbG9nIGFsbCB0aGUg
cmVhc29ucy4KLSAgICAgICAgICAgIExPRyhSZWZDb3VudGVkTGVha3MsICJObyBsZWFrIGNoZWNr
aW5nIGRvbmU6ICVzIiwgbGVha01lc3NhZ2VTdXBwcmVzc2lvblJlYXNvbnMtPmJlZ2luKCktPmZp
cnN0KTsKKyAgICAgICAgICAgIExPRyhSZWZDb3VudGVkTGVha3MsICJObyBsZWFrIGNoZWNraW5n
IGRvbmU6ICVzIiwgbGVha01lc3NhZ2VTdXBwcmVzc2lvblJlYXNvbnMtPmJlZ2luKCktPmtleSk7
CiAgICAgICAgICAgICBsb2dnZWRTdXBwcmVzc2lvblJlYXNvbiA9IHRydWU7CiAgICAgICAgIH0K
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9SZWZQdHJIYXNoTWFwLmggYi9Tb3Vy
Y2UvV1RGL3d0Zi9SZWZQdHJIYXNoTWFwLmgKaW5kZXggNWZhZTkwZThjZDQ3MTEyOWU4OWRjYzhl
N2FlNjYzOGFkYTE1NGQzMS4uOTU0MTgzN2UyYTZmMjliOWYwNmMzYzk1NjJhMTMzNDZiMDFkNGNl
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUmVmUHRySGFzaE1hcC5oCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL1JlZlB0ckhhc2hNYXAuaApAQCAtMjE2LDcgKzIxNiw3IEBAIG5hbWVzcGFjZSBX
VEYgewogICAgICAgICBBZGRSZXN1bHQgcmVzdWx0ID0gaW5saW5lQWRkKGtleSwgbWFwcGVkKTsK
ICAgICAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkgewogICAgICAgICAgICAgLy8gVGhlIGlu
bGluZUFkZCBjYWxsIGFib3ZlIGZvdW5kIGFuIGV4aXN0aW5nIGhhc2ggdGFibGUgZW50cnk7IHdl
IG5lZWQgdG8gc2V0IHRoZSBtYXBwZWQgdmFsdWUuCi0gICAgICAgICAgICBNYXBwZWRUcmFpdHM6
OnN0b3JlKG1hcHBlZCwgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOworICAgICAgICAgICAgTWFw
cGVkVHJhaXRzOjpzdG9yZShtYXBwZWQsIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwogICAgICAg
ICB9CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpAQCAtMjI4LDcgKzIyOCw3IEBAIG5h
bWVzcGFjZSBXVEYgewogICAgICAgICBBZGRSZXN1bHQgcmVzdWx0ID0gaW5saW5lQWRkKGtleSwg
bWFwcGVkKTsKICAgICAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkgewogICAgICAgICAgICAg
Ly8gVGhlIGlubGluZUFkZCBjYWxsIGFib3ZlIGZvdW5kIGFuIGV4aXN0aW5nIGhhc2ggdGFibGUg
ZW50cnk7IHdlIG5lZWQgdG8gc2V0IHRoZSBtYXBwZWQgdmFsdWUuCi0gICAgICAgICAgICBNYXBw
ZWRUcmFpdHM6OnN0b3JlKG1hcHBlZCwgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOworICAgICAg
ICAgICAgTWFwcGVkVHJhaXRzOjpzdG9yZShtYXBwZWQsIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUp
OwogICAgICAgICB9CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpAQCAtMjU0LDcgKzI1
NCw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gY29uc3Rf
Y2FzdDxIYXNoVGFibGVUeXBlJj4obV9pbXBsKS5sb29rdXAoa2V5KTsKICAgICAgICAgaWYgKCFl
bnRyeSkKICAgICAgICAgICAgIHJldHVybiBNYXBwZWRUcmFpdHM6OnBlZWsoTWFwcGVkVHJhaXRz
OjplbXB0eVZhbHVlKCkpOwotICAgICAgICByZXR1cm4gTWFwcGVkVHJhaXRzOjpwZWVrKGVudHJ5
LT5zZWNvbmQpOworICAgICAgICByZXR1cm4gTWFwcGVkVHJhaXRzOjpwZWVrKGVudHJ5LT52YWx1
ZSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5h
bWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzPgpAQCAtMjY0LDcgKzI2NCw3
IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gY29uc3RfY2Fz
dDxIYXNoVGFibGVUeXBlJj4obV9pbXBsKS50ZW1wbGF0ZSBsb29rdXA8VHJhbnNsYXRvcj4oa2V5
KTsKICAgICAgICAgaWYgKCFlbnRyeSkKICAgICAgICAgICAgIHJldHVybiBNYXBwZWRUcmFpdHM6
OnBlZWsoTWFwcGVkVHJhaXRzOjplbXB0eVZhbHVlKCkpOwotICAgICAgICByZXR1cm4gTWFwcGVk
VHJhaXRzOjpwZWVrKGVudHJ5LT5zZWNvbmQpOworICAgICAgICByZXR1cm4gTWFwcGVkVHJhaXRz
OjpwZWVrKGVudHJ5LT52YWx1ZSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgTWFwcGVkVHJhaXRz
PgpAQCAtMzA4LDcgKzMwOCw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBpdGVyYXRvciBp
dCA9IGZpbmQoa2V5KTsKICAgICAgICAgaWYgKGl0ID09IGVuZCgpKQogICAgICAgICAgICAgcmV0
dXJuIE1hcHBlZFRyYWl0czo6cGFzc091dChNYXBwZWRUcmFpdHM6OmVtcHR5VmFsdWUoKSk7Ci0g
ICAgICAgIE1hcHBlZFBhc3NPdXRUeXBlIHJlc3VsdCA9IE1hcHBlZFRyYWl0czo6cGFzc091dChp
dC0+c2Vjb25kKTsKKyAgICAgICAgTWFwcGVkUGFzc091dFR5cGUgcmVzdWx0ID0gTWFwcGVkVHJh
aXRzOjpwYXNzT3V0KGl0LT52YWx1ZSk7CiAgICAgICAgIHJlbW92ZShpdCk7CiAgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAgICAgfQpAQCAtMzIwLDcgKzMyMCw3IEBAIG5hbWVzcGFjZSBXVEYgewog
ICAgICAgICBpdGVyYXRvciBpdCA9IGZpbmQoa2V5KTsKICAgICAgICAgaWYgKGl0ID09IGVuZCgp
KQogICAgICAgICAgICAgcmV0dXJuIE1hcHBlZFRyYWl0czo6cGFzc091dChNYXBwZWRUcmFpdHM6
OmVtcHR5VmFsdWUoKSk7Ci0gICAgICAgIE1hcHBlZFBhc3NPdXRUeXBlIHJlc3VsdCA9IE1hcHBl
ZFRyYWl0czo6cGFzc091dChpdC0+c2Vjb25kKTsKKyAgICAgICAgTWFwcGVkUGFzc091dFR5cGUg
cmVzdWx0ID0gTWFwcGVkVHJhaXRzOjpwYXNzT3V0KGl0LT52YWx1ZSk7CiAgICAgICAgIHJlbW92
ZShpdCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvU3BlY3RydW0uaCBiL1NvdXJjZS9XVEYvd3RmL1NwZWN0cnVtLmgKaW5kZXggNWU3
YTQ4NGNkODc2NmJjYWYyMmNhNGM5M2RkY2U5NzBkZDJiYTIxMy4uM2U2ZmE0YTYzM2ZhZDQyZGVi
NGRjNDgzMzI1OTIzNDFlODRiM2EwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvU3BlY3Ry
dW0uaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9TcGVjdHJ1bS5oCkBAIC00NCw3ICs0NCw3IEBAIHB1
YmxpYzoKICAgICB7CiAgICAgICAgIHR5cGVuYW1lIEhhc2hNYXA8VCwgdW5zaWduZWQgbG9uZz46
OkFkZFJlc3VsdCByZXN1bHQgPSBtX21hcC5hZGQoa2V5LCBjb3VudCk7CiAgICAgICAgIGlmICgh
cmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCAr
PSBjb3VudDsKKyAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgKz0gY291bnQ7CiAg
ICAgfQogICAgIAogICAgIHVuc2lnbmVkIGxvbmcgZ2V0KGNvbnN0IFQmIGtleSkgY29uc3QKQEAg
LTUyLDcgKzUyLDcgQEAgcHVibGljOgogICAgICAgICBjb25zdF9pdGVyYXRvciBpdGVyID0gbV9t
YXAuZmluZChrZXkpOwogICAgICAgICBpZiAoaXRlciA9PSBtX21hcC5lbmQoKSkKICAgICAgICAg
ICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4gaXRlci0+c2Vjb25kOworICAgICAgICByZXR1
cm4gaXRlci0+dmFsdWU7CiAgICAgfQogICAgIAogICAgIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1
cm4gbV9tYXAuYmVnaW4oKTsgfQpAQCAtODgsNyArODgsNyBAQCBwdWJsaWM6CiAgICAgewogICAg
ICAgICBWZWN0b3I8S2V5QW5kQ291bnQ+IGxpc3Q7CiAgICAgICAgIGZvciAoY29uc3RfaXRlcmF0
b3IgaXRlciA9IGJlZ2luKCk7IGl0ZXIgIT0gZW5kKCk7ICsraXRlcikKLSAgICAgICAgICAgIGxp
c3QuYXBwZW5kKEtleUFuZENvdW50KGl0ZXItPmZpcnN0LCBpdGVyLT5zZWNvbmQpKTsKKyAgICAg
ICAgICAgIGxpc3QuYXBwZW5kKEtleUFuZENvdW50KGl0ZXItPmtleSwgaXRlci0+dmFsdWUpKTsK
ICAgICAgICAgCiAgICAgICAgIHN0ZDo6c29ydChsaXN0LmJlZ2luKCksIGxpc3QuZW5kKCkpOwog
ICAgICAgICByZXR1cm4gbGlzdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGlu
Z1B0aHJlYWRzLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcAppbmRl
eCAwYTI1NDhjMWI0YjBiM2M5NTMwODY5NzAyYTljNTc2ZGM4ZmMxYzZhLi43MWI4Y2M1NGVkMjIz
YmI4NWFjNzRiNWZmYzYyODJlYjJhNjA5NWM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9U
aHJlYWRpbmdQdGhyZWFkcy5jcHAKKysrIGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5nUHRocmVh
ZHMuY3BwCkBAIC0xNTEsOCArMTUxLDggQEAgc3RhdGljIFRocmVhZElkZW50aWZpZXIgaWRlbnRp
ZmllckJ5UHRocmVhZEhhbmRsZShjb25zdCBwdGhyZWFkX3QmIHB0aHJlYWRIYW5kbGUKIAogICAg
IFRocmVhZE1hcDo6aXRlcmF0b3IgaSA9IHRocmVhZE1hcCgpLmJlZ2luKCk7CiAgICAgZm9yICg7
IGkgIT0gdGhyZWFkTWFwKCkuZW5kKCk7ICsraSkgewotICAgICAgICBpZiAocHRocmVhZF9lcXVh
bChpLT5zZWNvbmQtPnB0aHJlYWRIYW5kbGUoKSwgcHRocmVhZEhhbmRsZSkgJiYgIWktPnNlY29u
ZC0+aGFzRXhpdGVkKCkpCi0gICAgICAgICAgICByZXR1cm4gaS0+Zmlyc3Q7CisgICAgICAgIGlm
IChwdGhyZWFkX2VxdWFsKGktPnZhbHVlLT5wdGhyZWFkSGFuZGxlKCksIHB0aHJlYWRIYW5kbGUp
ICYmICFpLT52YWx1ZS0+aGFzRXhpdGVkKCkpCisgICAgICAgICAgICByZXR1cm4gaS0+a2V5Owog
ICAgIH0KIAogICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dl
b2xvY2F0aW9uL0dlb2xvY2F0aW9uLmNwcAppbmRleCA1N2NhZjMxNTJhY2M4OWQ2OTdhYThmNjQ1
Y2M4ZjAxMzU5YmNiMTUyLi5hM2VmNDAyNmRkMDk5YWFjNzEwNjQ2NDk0YmRjZDViOTY4NTVkYTNk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0
aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0
aW9uLmNwcApAQCAtMTkyLDcgKzE5Miw3IEBAIEdlb2xvY2F0aW9uOjpHZW9Ob3RpZmllciogR2Vv
bG9jYXRpb246OldhdGNoZXJzOjpmaW5kKGludCBpZCkKICAgICBJZFRvTm90aWZpZXJNYXA6Oml0
ZXJhdG9yIGl0ZXIgPSBtX2lkVG9Ob3RpZmllck1hcC5maW5kKGlkKTsKICAgICBpZiAoaXRlciA9
PSBtX2lkVG9Ob3RpZmllck1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJu
IGl0ZXItPnNlY29uZC5nZXQoKTsKKyAgICByZXR1cm4gaXRlci0+dmFsdWUuZ2V0KCk7CiB9CiAK
IHZvaWQgR2VvbG9jYXRpb246OldhdGNoZXJzOjpyZW1vdmUoaW50IGlkKQpAQCAtMjAxLDcgKzIw
MSw3IEBAIHZvaWQgR2VvbG9jYXRpb246OldhdGNoZXJzOjpyZW1vdmUoaW50IGlkKQogICAgIElk
VG9Ob3RpZmllck1hcDo6aXRlcmF0b3IgaXRlciA9IG1faWRUb05vdGlmaWVyTWFwLmZpbmQoaWQp
OwogICAgIGlmIChpdGVyID09IG1faWRUb05vdGlmaWVyTWFwLmVuZCgpKQogICAgICAgICByZXR1
cm47Ci0gICAgbV9ub3RpZmllclRvSWRNYXAucmVtb3ZlKGl0ZXItPnNlY29uZCk7CisgICAgbV9u
b3RpZmllclRvSWRNYXAucmVtb3ZlKGl0ZXItPnZhbHVlKTsKICAgICBtX2lkVG9Ob3RpZmllck1h
cC5yZW1vdmUoaXRlcik7CiB9CiAKQEAgLTIxMCw3ICsyMTAsNyBAQCB2b2lkIEdlb2xvY2F0aW9u
OjpXYXRjaGVyczo6cmVtb3ZlKEdlb05vdGlmaWVyKiBub3RpZmllcikKICAgICBOb3RpZmllclRv
SWRNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX25vdGlmaWVyVG9JZE1hcC5maW5kKG5vdGlmaWVyKTsK
ICAgICBpZiAoaXRlciA9PSBtX25vdGlmaWVyVG9JZE1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJu
OwotICAgIG1faWRUb05vdGlmaWVyTWFwLnJlbW92ZShpdGVyLT5zZWNvbmQpOworICAgIG1faWRU
b05vdGlmaWVyTWFwLnJlbW92ZShpdGVyLT52YWx1ZSk7CiAgICAgbV9ub3RpZmllclRvSWRNYXAu
cmVtb3ZlKGl0ZXIpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJEYXRhYmFzZS5jcHAKaW5kZXggZDY0MWQwNGE0MzZlMWZmZjVmNjQxODRmZDgzNDJmNDJk
NWMwMzc0OS4uZDBiNmY1NmZjNTg4ZDBmN2M3ZTlmN2NlYjg2MzA1MzA3NTdjOGY3MCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcApAQCAt
MTA3LDcgKzEwNyw3IEBAIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gSURCRGF0YWJhc2U6Om9i
amVjdFN0b3JlTmFtZXMoKSBjb25zdAogewogICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiBvYmpl
Y3RTdG9yZU5hbWVzID0gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7CiAgICAgZm9yIChJREJEYXRh
YmFzZU1ldGFkYXRhOjpPYmplY3RTdG9yZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX21ldGFk
YXRhLm9iamVjdFN0b3Jlcy5iZWdpbigpOyBpdCAhPSBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5l
bmQoKTsgKytpdCkKLSAgICAgICAgb2JqZWN0U3RvcmVOYW1lcy0+YXBwZW5kKGl0LT5maXJzdCk7
CisgICAgICAgIG9iamVjdFN0b3JlTmFtZXMtPmFwcGVuZChpdC0+a2V5KTsKICAgICBvYmplY3RT
dG9yZU5hbWVzLT5zb3J0KCk7CiAgICAgcmV0dXJuIG9iamVjdFN0b3JlTmFtZXMucmVsZWFzZSgp
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0
YWJhc2VCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcAppbmRleCBiZmIyYWUyNjc2MTVkNjM4NTIzYzBkZTJi
ZWVlNDVkYzUyZmEzNDRhLi43N2M1YzFmY2I4M2JjZWZlYTUzOTA5YjRiNTQ3ZjYxNjQ1MTdhYmE3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFz
ZUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcApAQCAtMTY0LDcgKzE2NCw3IEBAIElEQkRhdGFiYXNl
TWV0YWRhdGEgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6bWV0YWRhdGEoKSBjb25zdAogewogICAg
IElEQkRhdGFiYXNlTWV0YWRhdGEgbWV0YWRhdGEobV9uYW1lLCBtX3ZlcnNpb24sIG1faW50VmVy
c2lvbik7CiAgICAgZm9yIChPYmplY3RTdG9yZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX29i
amVjdFN0b3Jlcy5iZWdpbigpOyBpdCAhPSBtX29iamVjdFN0b3Jlcy5lbmQoKTsgKytpdCkKLSAg
ICAgICAgbWV0YWRhdGEub2JqZWN0U3RvcmVzLnNldChpdC0+Zmlyc3QsIGl0LT5zZWNvbmQtPm1l
dGFkYXRhKCkpOworICAgICAgICBtZXRhZGF0YS5vYmplY3RTdG9yZXMuc2V0KGl0LT5rZXksIGl0
LT52YWx1ZS0+bWV0YWRhdGEoKSk7CiAgICAgcmV0dXJuIG1ldGFkYXRhOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZElt
cGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tl
bmRJbXBsLmNwcAppbmRleCBjN2VmODYwZTEzZTJkMTgxNzlhZTVlY2MwYzc1OTcwOWI4ODQzZGU5
Li4yMzc2MGIwZmI0MzM4YWMyYjlmYWVlMTVlZmJmNmE3YzY5ZGFmMTk1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5k
SW1wbC5jcHAKQEAgLTEwNyw3ICsxMDcsNyBAQCB2b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6
ZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbAogICAg
IGlmIChpdCAhPSBtX2RhdGFiYXNlQmFja2VuZE1hcC5lbmQoKSkgewogICAgICAgICAvLyBJZiB0
aGVyZSBhcmUgYW55IGNvbm5lY3Rpb25zIHRvIHRoZSBkYXRhYmFzZSwgZGlyZWN0bHkgZGVsZXRl
IHRoZQogICAgICAgICAvLyBkYXRhYmFzZS4KLSAgICAgICAgaXQtPnNlY29uZC0+ZGVsZXRlRGF0
YWJhc2UoY2FsbGJhY2tzKTsKKyAgICAgICAgaXQtPnZhbHVlLT5kZWxldGVEYXRhYmFzZShjYWxs
YmFja3MpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xMzQsNyArMTM0LDcgQEAgUGFz
c1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6b3BlbkJhY2tp
bmdTdG9yZShQYXNzUmVmUHRyPFMKICAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5n
U3RvcmU7CiAgICAgSURCQmFja2luZ1N0b3JlTWFwOjppdGVyYXRvciBpdDIgPSBtX2JhY2tpbmdT
dG9yZU1hcC5maW5kKGZpbGVJZGVudGlmaWVyKTsKICAgICBpZiAoaXQyICE9IG1fYmFja2luZ1N0
b3JlTWFwLmVuZCgpKQotICAgICAgICBiYWNraW5nU3RvcmUgPSBpdDItPnNlY29uZDsKKyAgICAg
ICAgYmFja2luZ1N0b3JlID0gaXQyLT52YWx1ZTsKICAgICBlbHNlIHsKICNpZiBVU0UoTEVWRUxE
QikKICAgICAgICAgYmFja2luZ1N0b3JlID0gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3Blbihz
ZWN1cml0eU9yaWdpbi5nZXQoKSwgZGF0YURpcmVjdG9yeSwgZmlsZUlkZW50aWZpZXIsIHRoaXMp
OwpAQCAtMTcyLDcgKzE3Miw3IEBAIHZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuKGNv
bnN0IFN0cmluZyYgbmFtZSwgaW50NjRfdCB2ZXJzaW9uLCBQYXNzUmVmUHRyCiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KICAgICB9IGVsc2UKLSAgICAgICAgZGF0YWJhc2VCYWNrZW5k
ID0gaXQtPnNlY29uZDsKKyAgICAgICAgZGF0YWJhc2VCYWNrZW5kID0gaXQtPnZhbHVlOwogCiAg
ICAgaWYgKHZlcnNpb24gPT0gSURCRGF0YWJhc2VNZXRhZGF0YTo6Tm9JbnRWZXJzaW9uKQogICAg
ICAgICBkYXRhYmFzZUJhY2tlbmQtPm9wZW5Db25uZWN0aW9uKGNhbGxiYWNrcywgZGF0YWJhc2VD
YWxsYmFja3MpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCT2JqZWN0U3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
T2JqZWN0U3RvcmUuY3BwCmluZGV4IDVmZmMxY2JhOWUxMGUxMzZhMWI4NzZhMTNjNjg2YzQyYzI2
NjRmM2UuLjE1MzYwZTIwNzk2MzJlNWJkYzBhZDI3NTA3OWE5N2I4MWRhODJhNTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAK
QEAgLTY2LDcgKzY2LDcgQEAgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBJREJPYmplY3RTdG9y
ZTo6aW5kZXhOYW1lcygpIGNvbnN0CiAgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZTo6aW5k
ZXhOYW1lcyIpOwogICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiBpbmRleE5hbWVzID0gRE9NU3Ry
aW5nTGlzdDo6Y3JlYXRlKCk7CiAgICAgZm9yIChJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbmRl
eE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX21ldGFkYXRhLmluZGV4ZXMuYmVnaW4oKTsgaXQg
IT0gbV9tZXRhZGF0YS5pbmRleGVzLmVuZCgpOyArK2l0KQotICAgICAgICBpbmRleE5hbWVzLT5h
cHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgaW5kZXhOYW1lcy0+YXBwZW5kKGl0LT5rZXkpOwog
ICAgIGluZGV4TmFtZXMtPnNvcnQoKTsKICAgICByZXR1cm4gaW5kZXhOYW1lcy5yZWxlYXNlKCk7
CiB9CkBAIC0yMTEsOCArMjExLDggQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RT
dG9yZTo6cHV0KElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6UHV0TW8KICAgICBWZWN0
b3I8SW5kZXhLZXlzPiBpbmRleEtleXM7CiAgICAgZm9yIChJREJPYmplY3RTdG9yZU1ldGFkYXRh
OjpJbmRleE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX21ldGFkYXRhLmluZGV4ZXMuYmVnaW4o
KTsgaXQgIT0gbV9tZXRhZGF0YS5pbmRleGVzLmVuZCgpOyArK2l0KSB7CiAgICAgICAgIEluZGV4
S2V5cyBrZXlzOwotICAgICAgICBnZW5lcmF0ZUluZGV4S2V5c0ZvclZhbHVlKGl0LT5zZWNvbmQs
IHZhbHVlLCAma2V5cyk7Ci0gICAgICAgIGluZGV4TmFtZXMuYXBwZW5kKGl0LT5maXJzdCk7Cisg
ICAgICAgIGdlbmVyYXRlSW5kZXhLZXlzRm9yVmFsdWUoaXQtPnZhbHVlLCB2YWx1ZSwgJmtleXMp
OworICAgICAgICBpbmRleE5hbWVzLmFwcGVuZChpdC0+a2V5KTsKICAgICAgICAgaW5kZXhLZXlz
LmFwcGVuZChrZXlzKTsKICAgICB9CiAgICAgQVNTRVJUKGluZGV4S2V5cy5zaXplKCkgPT0gaW5k
ZXhOYW1lcy5zaXplKCkpOwpAQCAtNDU0LDcgKzQ1NCw3IEBAIFBhc3NSZWZQdHI8SURCSW5kZXg+
IElEQk9iamVjdFN0b3JlOjppbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUm
IGVjCiAKICAgICBJREJJbmRleE1hcDo6aXRlcmF0b3IgaXQgPSBtX2luZGV4TWFwLmZpbmQobmFt
ZSk7CiAgICAgaWYgKGl0ICE9IG1faW5kZXhNYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdC0+
c2Vjb25kOworICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwogCiAgICAgUmVmUHRyPElEQkluZGV4
QmFja2VuZEludGVyZmFjZT4gaW5kZXhCYWNrZW5kID0gbV9iYWNrZW5kLT5pbmRleChuYW1lLCBl
Yyk7CiAgICAgQVNTRVJUKCFpbmRleEJhY2tlbmQgIT0gIWVjKTsgLy8gSWYgd2UgZGlkbid0IGdl
dCBhbiBpbmRleCwgd2Ugc2hvdWxkIGhhdmUgZ290dGVuIGFuIGV4Y2VwdGlvbiBjb2RlLiBBbmQg
dmljZSB2ZXJzYS4KQEAgLTQ2NCw3ICs0NjQsNyBAQCBQYXNzUmVmUHRyPElEQkluZGV4PiBJREJP
YmplY3RTdG9yZTo6aW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYwog
ICAgIElEQk9iamVjdFN0b3JlTWV0YWRhdGE6OkluZGV4TWFwOjpjb25zdF9pdGVyYXRvciBtZGl0
ID0gbV9tZXRhZGF0YS5pbmRleGVzLmZpbmQobmFtZSk7CiAgICAgQVNTRVJUKG1kaXQgIT0gbV9t
ZXRhZGF0YS5pbmRleGVzLmVuZCgpKTsKIAotICAgIFJlZlB0cjxJREJJbmRleD4gaW5kZXggPSBJ
REJJbmRleDo6Y3JlYXRlKG1kaXQtPnNlY29uZCwgaW5kZXhCYWNrZW5kLnJlbGVhc2UoKSwgdGhp
cywgbV90cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgUmVmUHRyPElEQkluZGV4PiBpbmRleCA9IElE
QkluZGV4OjpjcmVhdGUobWRpdC0+dmFsdWUsIGluZGV4QmFja2VuZC5yZWxlYXNlKCksIHRoaXMs
IG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwogICAgIG1faW5kZXhNYXAuc2V0KG5hbWUsIGluZGV4KTsK
ICAgICByZXR1cm4gaW5kZXgucmVsZWFzZSgpOwogfQpAQCAtNDg4LDcgKzQ4OCw3IEBAIHZvaWQg
SURCT2JqZWN0U3RvcmU6OmRlbGV0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9u
Q29kZSYgZWMpCiAgICAgaWYgKCFlYykgewogICAgICAgICBJREJJbmRleE1hcDo6aXRlcmF0b3Ig
aXQgPSBtX2luZGV4TWFwLmZpbmQobmFtZSk7CiAgICAgICAgIGlmIChpdCAhPSBtX2luZGV4TWFw
LmVuZCgpKSB7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLT5tYXJrRGVsZXRlZCgpOworICAgICAg
ICAgICAgaXQtPnZhbHVlLT5tYXJrRGVsZXRlZCgpOwogICAgICAgICAgICAgbV9pbmRleE1hcC5y
ZW1vdmUobmFtZSk7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcAppbmRl
eCAyZmE1YzA4NGM3ZDU2NTM0ODYxZGMxZjg1NzU3ZTI3MTgxNDU3N2Y0Li5lMWEyMTU4ZDVmOTA5
Y2U5NmUwMjMwYWY2ZTQwYzk2NjZmMTdmZTU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNw
cApAQCAtNzQsNyArNzQsNyBAQCBJREJPYmplY3RTdG9yZU1ldGFkYXRhIElEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6Om1ldGFkYXRhKCkgY29uc3QKIHsKICAgICBJREJPYmplY3RTdG9yZU1ldGFk
YXRhIG1ldGFkYXRhKG1fbmFtZSwgbV9rZXlQYXRoLCBtX2F1dG9JbmNyZW1lbnQpOwogICAgIGZv
ciAoSW5kZXhNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9pbmRleGVzLmJlZ2luKCk7IGl0ICE9
IG1faW5kZXhlcy5lbmQoKTsgKytpdCkKLSAgICAgICAgbWV0YWRhdGEuaW5kZXhlcy5zZXQoaXQt
PmZpcnN0LCBpdC0+c2Vjb25kLT5tZXRhZGF0YSgpKTsKKyAgICAgICAgbWV0YWRhdGEuaW5kZXhl
cy5zZXQoaXQtPmtleSwgaXQtPnZhbHVlLT5tZXRhZGF0YSgpKTsKICAgICByZXR1cm4gbWV0YWRh
dGE7CiB9CiAKQEAgLTIxNiwxMSArMjE2LDExIEBAIHN0YXRpYyBib29sIG1ha2VJbmRleFdyaXRl
cnMoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCogb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8CiAK
ICAgICBmb3IgKElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OkluZGV4TWFwOjppdGVyYXRvciBp
dCA9IG9iamVjdFN0b3JlLT5pdGVySW5kZXhlc0JlZ2luKCk7IGl0ICE9IG9iamVjdFN0b3JlLT5p
dGVySW5kZXhlc0VuZCgpOyArK2l0KSB7CiAKLSAgICAgICAgY29uc3QgUmVmUHRyPElEQkluZGV4
QmFja2VuZEltcGw+JiBpbmRleCA9IGl0LT5zZWNvbmQ7CisgICAgICAgIGNvbnN0IFJlZlB0cjxJ
REJJbmRleEJhY2tlbmRJbXBsPiYgaW5kZXggPSBpdC0+dmFsdWU7CiAgICAgICAgIGlmICghaW5k
ZXgtPmhhc1ZhbGlkSWQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBUaGUgaW5kZXggb2Jq
ZWN0IGhhcyBiZWVuIGNyZWF0ZWQsIGJ1dCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgZGF0YWJhc2Ug
eWV0LgogCi0gICAgICAgIElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlz
IGtleXMgPSBpbmRleEtleU1hcC5nZXQoaXQtPmZpcnN0KTsKKyAgICAgICAgSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleXMga2V5cyA9IGluZGV4S2V5TWFwLmdldChpdC0+
a2V5KTsKICAgICAgICAgLy8gSWYgdGhlIG9iamVjdFN0b3JlIGlzIHVzaW5nIGF1dG9JbmNyZW1l
bnQsIHRoZW4gYW55IGluZGV4ZXMgd2l0aCBhbiBpZGVudGljYWwga2V5UGF0aCBuZWVkIHRvIGFs
c28gdXNlIHRoZSBwcmltYXJ5IChnZW5lcmF0ZWQpIGtleSBhcyBhIGtleS4KICAgICAgICAgaWYg
KGtleVdhc0dlbmVyYXRlZCkgewogICAgICAgICAgICAgY29uc3QgSURCS2V5UGF0aCYgaW5kZXhL
ZXlQYXRoID0gaW5kZXgtPmtleVBhdGgoKTsKQEAgLTM5MCwxMCArMzkwLDEwIEBAIHZvaWQgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFBhc3NSZWZQCiAgICAgICAgICAgICByZWNvcmRJZGVudGlmaWVyID0gYmFja2luZ1N0
b3JlQ3Vyc29yLT5vYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIoKTsKIAogICAgICAgICAgICAg
Zm9yIChJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpJbmRleE1hcDo6aXRlcmF0b3IgaXQgPSBv
YmplY3RTdG9yZS0+bV9pbmRleGVzLmJlZ2luKCk7IGl0ICE9IG9iamVjdFN0b3JlLT5tX2luZGV4
ZXMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgICAgICAgICBpZiAoIWl0LT5zZWNvbmQtPmhhc1Zh
bGlkSWQoKSkKKyAgICAgICAgICAgICAgICBpZiAoIWl0LT52YWx1ZS0+aGFzVmFsaWRJZCgpKQog
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgLy8gVGhlIGluZGV4IG9iamVjdCBoYXMgYmVl
biBjcmVhdGVkLCBidXQgZG9lcyBub3QgZXhpc3QgaW4gdGhlIGRhdGFiYXNlIHlldC4KIAotICAg
ICAgICAgICAgICAgIGJvb2wgc3VjY2VzcyA9IG9iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+
ZGVsZXRlSW5kZXhEYXRhRm9yUmVjb3JkKG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG9iamVj
dFN0b3JlLT5pZCgpLCBpdC0+c2Vjb25kLT5pZCgpLCByZWNvcmRJZGVudGlmaWVyLmdldCgpKTsK
KyAgICAgICAgICAgICAgICBib29sIHN1Y2Nlc3MgPSBvYmplY3RTdG9yZS0+YmFja2luZ1N0b3Jl
KCktPmRlbGV0ZUluZGV4RGF0YUZvclJlY29yZChvYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBv
YmplY3RTdG9yZS0+aWQoKSwgaXQtPnZhbHVlLT5pZCgpLCByZWNvcmRJZGVudGlmaWVyLmdldCgp
KTsKICAgICAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOwogICAg
ICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJUcmFuc2FjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJUcmFuc2FjdGlvbi5jcHAKaW5kZXggZTFlMDVmMWYyODg2OGRiMmQyODlmMmVmMDVjZWI0MmY1
MjUwZWNjZC4uMTY2OTRjMWM0OGEwNTk3MzNjMmFmYTc0NDliZGE2N2M5ZGMzOWYzYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNw
cApAQCAtMTUxLDcgKzE1MSw3IEBAIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IElEQlRyYW5z
YWN0aW9uOjpvYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwCiAKICAgICBJREJP
YmplY3RTdG9yZU1hcDo6aXRlcmF0b3IgaXQgPSBtX29iamVjdFN0b3JlTWFwLmZpbmQobmFtZSk7
CiAgICAgaWYgKGl0ICE9IG1fb2JqZWN0U3RvcmVNYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiBp
dC0+c2Vjb25kOworICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwogCiAgICAgUmVmUHRyPElEQk9i
amVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gb2JqZWN0U3RvcmVCYWNrZW5kID0gbV9iYWNrZW5k
LT5vYmplY3RTdG9yZShuYW1lLCBlYyk7CiAgICAgQVNTRVJUKCFvYmplY3RTdG9yZUJhY2tlbmQg
IT0gIWVjKTsgLy8gSWYgd2UgZGlkbid0IGdldCBhIHN0b3JlLCB3ZSBzaG91bGQgaGF2ZSBnb3R0
ZW4gYW4gZXhjZXB0aW9uIGNvZGUuIEFuZCB2aWNlIHZlcnNhLgpAQCAtMTYyLDcgKzE2Miw3IEBA
IFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IElEQlRyYW5zYWN0aW9uOjpvYmplY3RTdG9yZShj
b25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwCiAgICAgSURCRGF0YWJhc2VNZXRhZGF0YTo6T2JqZWN0
U3RvcmVNYXA6OmNvbnN0X2l0ZXJhdG9yIG1kaXQgPSBtZXRhZGF0YS5vYmplY3RTdG9yZXMuZmlu
ZChuYW1lKTsKICAgICBBU1NFUlQobWRpdCAhPSBtZXRhZGF0YS5vYmplY3RTdG9yZXMuZW5kKCkp
OwogCi0gICAgUmVmUHRyPElEQk9iamVjdFN0b3JlPiBvYmplY3RTdG9yZSA9IElEQk9iamVjdFN0
b3JlOjpjcmVhdGUobWRpdC0+c2Vjb25kLCBvYmplY3RTdG9yZUJhY2tlbmQsIHRoaXMpOworICAg
IFJlZlB0cjxJREJPYmplY3RTdG9yZT4gb2JqZWN0U3RvcmUgPSBJREJPYmplY3RTdG9yZTo6Y3Jl
YXRlKG1kaXQtPnZhbHVlLCBvYmplY3RTdG9yZUJhY2tlbmQsIHRoaXMpOwogICAgIG9iamVjdFN0
b3JlQ3JlYXRlZChuYW1lLCBvYmplY3RTdG9yZSk7CiAgICAgcmV0dXJuIG9iamVjdFN0b3JlLnJl
bGVhc2UoKTsKIH0KQEAgLTE4Miw3ICsxODIsNyBAQCB2b2lkIElEQlRyYW5zYWN0aW9uOjpvYmpl
Y3RTdG9yZURlbGV0ZWQoY29uc3QgU3RyaW5nJiBuYW1lKQogICAgIEFTU0VSVChpc1ZlcnNpb25D
aGFuZ2UoKSk7CiAgICAgSURCT2JqZWN0U3RvcmVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9vYmplY3RT
dG9yZU1hcC5maW5kKG5hbWUpOwogICAgIGlmIChpdCAhPSBtX29iamVjdFN0b3JlTWFwLmVuZCgp
KSB7Ci0gICAgICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZT4gb2JqZWN0U3RvcmUgPSBpdC0+c2Vj
b25kOworICAgICAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmU+IG9iamVjdFN0b3JlID0gaXQtPnZh
bHVlOwogICAgICAgICBtX29iamVjdFN0b3JlTWFwLnJlbW92ZShuYW1lKTsKICAgICAgICAgb2Jq
ZWN0U3RvcmUtPm1hcmtEZWxldGVkKCk7CiAgICAgICAgIG1fb2JqZWN0U3RvcmVDbGVhbnVwTWFw
LnNldChvYmplY3RTdG9yZSwgb2JqZWN0U3RvcmUtPm1ldGFkYXRhKCkpOwpAQCAtMjkwLDcgKzI5
MCw3IEBAIHZvaWQgSURCVHJhbnNhY3Rpb246Om9uQWJvcnQoKQogCiAgICAgaWYgKGlzVmVyc2lv
bkNoYW5nZSgpKSB7CiAgICAgICAgIGZvciAoSURCT2JqZWN0U3RvcmVNZXRhZGF0YU1hcDo6aXRl
cmF0b3IgaXQgPSBtX29iamVjdFN0b3JlQ2xlYW51cE1hcC5iZWdpbigpOyBpdCAhPSBtX29iamVj
dFN0b3JlQ2xlYW51cE1hcC5lbmQoKTsgKytpdCkKLSAgICAgICAgICAgIGl0LT5maXJzdC0+c2V0
TWV0YWRhdGEoaXQtPnNlY29uZCk7CisgICAgICAgICAgICBpdC0+a2V5LT5zZXRNZXRhZGF0YShp
dC0+dmFsdWUpOwogICAgIH0KICAgICBtX29iamVjdFN0b3JlQ2xlYW51cE1hcC5jbGVhcigpOwog
ICAgIGNsb3NlT3BlbkN1cnNvcnMoKTsKQEAgLTM3NCw3ICszNzQsNyBAQCBib29sIElEQlRyYW5z
YWN0aW9uOjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQogCiAgICAgLy8g
QnJlYWsgcmVmZXJlbmNlIGN5Y2xlcy4KICAgICBmb3IgKElEQk9iamVjdFN0b3JlTWFwOjppdGVy
YXRvciBpdCA9IG1fb2JqZWN0U3RvcmVNYXAuYmVnaW4oKTsgaXQgIT0gbV9vYmplY3RTdG9yZU1h
cC5lbmQoKTsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+dHJhbnNhY3Rpb25GaW5pc2hlZCgp
OworICAgICAgICBpdC0+dmFsdWUtPnRyYW5zYWN0aW9uRmluaXNoZWQoKTsKICAgICBtX29iamVj
dFN0b3JlTWFwLmNsZWFyKCk7CiAKICAgICBWZWN0b3I8UmVmUHRyPEV2ZW50VGFyZ2V0PiA+IHRh
cmdldHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01l
ZGlhQ29uc3RyYWludHNJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vTWVkaWFDb25zdHJhaW50c0ltcGwuY3BwCmluZGV4IDEzMzZmODI4YTBiN2I0Njg3MTdjZGI0
OTFjODBmYTk2NDRjZDJlZTkuLjhlNGJkOTkxYjljOTEyZjA1MTkxOTc4MTc3MDFkOTZkMDVmMTYy
YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFD
b25zdHJhaW50c0ltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vTWVkaWFDb25zdHJhaW50c0ltcGwuY3BwCkBAIC0xMTQsNyArMTE0LDcgQEAgdm9pZCBNZWRp
YUNvbnN0cmFpbnRzSW1wbDo6Z2V0TWFuZGF0b3J5Q29uc3RyYWludE5hbWVzKFZlY3RvcjxTdHJp
bmc+JiBuYW1lcykgY28KICAgICBuYW1lcy5jbGVhcigpOwogICAgIEhhc2hNYXA8U3RyaW5nLCBT
dHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpID0gbV9tYW5kYXRvcnlDb25zdHJhaW50cy5iZWdpbigp
OwogICAgIGZvciAoOyBpICE9IG1fbWFuZGF0b3J5Q29uc3RyYWludHMuZW5kKCk7ICsraSkKLSAg
ICAgICAgbmFtZXMuYXBwZW5kKGktPmZpcnN0KTsKKyAgICAgICAgbmFtZXMuYXBwZW5kKGktPmtl
eSk7CiB9CiAKIHZvaWQgTWVkaWFDb25zdHJhaW50c0ltcGw6OmdldE9wdGlvbmFsQ29uc3RyYWlu
dE5hbWVzKFZlY3RvcjxTdHJpbmc+JiBuYW1lcykgY29uc3QKQEAgLTEyOSw3ICsxMjksNyBAQCBi
b29sIE1lZGlhQ29uc3RyYWludHNJbXBsOjpnZXRNYW5kYXRvcnlDb25zdHJhaW50VmFsdWUoY29u
c3QgU3RyaW5nJiBuYW1lLCBTdHJpbgogICAgIGlmIChpID09IG1fbWFuZGF0b3J5Q29uc3RyYWlu
dHMuZW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHZhbHVlID0gaS0+c2Vjb25k
OworICAgIHZhbHVlID0gaS0+dmFsdWU7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvQWJzdHJhY3REYXRhYmFzZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Fic3RyYWN0RGF0YWJhc2Uu
Y3BwCmluZGV4IGM3NTM5YzZlMTEyYjllMWU2YmYxZTJjZDNmMDJhZTBjYmEyYmVhMjYuLjYyOTA3
ZTNlMWNlNmIwOTE1YzJiMDM0NzYwOWU1MDdlOGMwMWNlYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvQWJzdHJhY3REYXRhYmFzZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9BYnN0cmFjdERhdGFiYXNlLmNwcApAQCAt
MjgyLDcgKzI4Miw3IEBAIGJvb2wgQWJzdHJhY3REYXRhYmFzZTo6cGVyZm9ybU9wZW5BbmRWZXJp
ZnkoYm9vbCBzaG91bGRTZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwKICAgICAgICAgR3VpZFZlcnNp
b25NYXA6Oml0ZXJhdG9yIGVudHJ5ID0gZ3VpZFRvVmVyc2lvbk1hcCgpLmZpbmQobV9ndWlkKTsK
ICAgICAgICAgaWYgKGVudHJ5ICE9IGd1aWRUb1ZlcnNpb25NYXAoKS5lbmQoKSkgewogICAgICAg
ICAgICAgLy8gTWFwIG51bGwgc3RyaW5nIHRvIGVtcHR5IHN0cmluZyAoc2VlIHVwZGF0ZUd1aWRW
ZXJzaW9uTWFwKCkpLgotICAgICAgICAgICAgY3VycmVudFZlcnNpb24gPSBlbnRyeS0+c2Vjb25k
LmlzTnVsbCgpID8gZW1wdHlTdHJpbmcoKSA6IGVudHJ5LT5zZWNvbmQuaXNvbGF0ZWRDb3B5KCk7
CisgICAgICAgICAgICBjdXJyZW50VmVyc2lvbiA9IGVudHJ5LT52YWx1ZS5pc051bGwoKSA/IGVt
cHR5U3RyaW5nKCkgOiBlbnRyeS0+dmFsdWUuaXNvbGF0ZWRDb3B5KCk7CiAgICAgICAgICAgICBM
T0coU3RvcmFnZUFQSSwgIkN1cnJlbnQgY2FjaGVkIHZlcnNpb24gZm9yIGd1aWQgJWkgaXMgJXMi
LCBtX2d1aWQsIGN1cnJlbnRWZXJzaW9uLmFzY2lpKCkuZGF0YSgpKTsKIAogI2lmIFBMQVRGT1JN
KENIUk9NSVVNKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFz
ZS9EYXRhYmFzZVRyYWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFz
ZS9EYXRhYmFzZVRyYWNrZXIuY3BwCmluZGV4IDQ2ZDI4MTI5MmQ5YjdlNDM3YjVkZTBmMzI1ZmFm
MjQ1YzgxNjNhZDQuLjViZDVlN2IzZDJlMWM0MDIxMWIwMWE2MWQwYmY3ODNjYjM1MjYyMjggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFj
a2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNl
VHJhY2tlci5jcHAKQEAgLTI1MCw3ICsyNTAsNyBAQCB2b2lkIERhdGFiYXNlVHJhY2tlcjo6aW50
ZXJydXB0QWxsRGF0YWJhc2VzRm9yQ29udGV4dChjb25zdCBTY3JpcHRFeGVjdXRpb25Db250ZQog
CiAgICAgICAgIERhdGFiYXNlTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgZGJOYW1lTWFwRW5kSXQg
PSBuYW1lTWFwLT5lbmQoKTsKICAgICAgICAgZm9yIChEYXRhYmFzZU5hbWVNYXA6OmNvbnN0X2l0
ZXJhdG9yIGRiTmFtZU1hcEl0ID0gbmFtZU1hcC0+YmVnaW4oKTsgZGJOYW1lTWFwSXQgIT0gZGJO
YW1lTWFwRW5kSXQ7ICsrZGJOYW1lTWFwSXQpIHsKLSAgICAgICAgICAgIERhdGFiYXNlU2V0KiBk
YXRhYmFzZVNldCA9IGRiTmFtZU1hcEl0LT5zZWNvbmQ7CisgICAgICAgICAgICBEYXRhYmFzZVNl
dCogZGF0YWJhc2VTZXQgPSBkYk5hbWVNYXBJdC0+dmFsdWU7CiAgICAgICAgICAgICBEYXRhYmFz
ZVNldDo6Y29uc3RfaXRlcmF0b3IgZGJTZXRFbmRJdCA9IGRhdGFiYXNlU2V0LT5lbmQoKTsKICAg
ICAgICAgICAgIGZvciAoRGF0YWJhc2VTZXQ6OmNvbnN0X2l0ZXJhdG9yIGRiU2V0SXQgPSBkYXRh
YmFzZVNldC0+YmVnaW4oKTsgZGJTZXRJdCAhPSBkYlNldEVuZEl0OyArK2RiU2V0SXQpIHsKICAg
ICAgICAgICAgICAgICBpZiAoKCpkYlNldEl0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpID09
IGNvbnRleHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNl
L09yaWdpblVzYWdlUmVjb3JkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvT3JpZ2luVXNhZ2VSZWNvcmQuY3BwCmluZGV4IDQ0MzU1MGE1NzMwOWYzMzYzZjBmY2E5OGY1
MDhjMDI3NmQwZDk5ZGIuLjJiZjhhZjRhZTAwOTkyODBhY2ExNzU3NzQ4YmEyMWNmOTBiNzAyZGIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvT3JpZ2luVXNh
Z2VSZWNvcmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvT3Jp
Z2luVXNhZ2VSZWNvcmQuY3BwCkBAIC05Myw3ICs5Myw3IEBAIHVuc2lnbmVkIGxvbmcgbG9uZyBP
cmlnaW5Vc2FnZVJlY29yZDo6ZGlza1VzYWdlKCkKICAgICBIYXNoTWFwPFN0cmluZywgRGF0YWJh
c2VFbnRyeT46Oml0ZXJhdG9yIGlEYXRhYmFzZSA9IG1fZGF0YWJhc2VNYXAuYmVnaW4oKTsKICAg
ICBIYXNoTWFwPFN0cmluZywgRGF0YWJhc2VFbnRyeT46Oml0ZXJhdG9yIGVuZERhdGFiYXNlID0g
bV9kYXRhYmFzZU1hcC5lbmQoKTsKICAgICBmb3IgKDsgaURhdGFiYXNlICE9IGVuZERhdGFiYXNl
OyArK2lEYXRhYmFzZSkKLSAgICAgICAgbV9jYWNoZWREaXNrVXNhZ2UgKz0gaURhdGFiYXNlLT5z
ZWNvbmQuc2l6ZTsKKyAgICAgICAgbV9jYWNoZWREaXNrVXNhZ2UgKz0gaURhdGFiYXNlLT52YWx1
ZS5zaXplOwogCiAgICAgbV9jYWNoZWREaXNrVXNhZ2VJc1ZhbGlkID0gdHJ1ZTsKICAgICByZXR1
cm4gbV9jYWNoZWREaXNrVXNhZ2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcAppbmRl
eCA4MzdiOGZiZDIyMDVhZGM5NzQ4NmRkM2YwZThmMDIwNzM4MGY4ZDliLi5kYTNhN2VlNzViOGMw
MTI1OTQ2NmVjNGE3ZWFkYTk3YmQxYzIzYmY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRv
ci5jcHAKQEAgLTc4LDcgKzc4LDcgQEAgdm9pZCBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjph
Y3F1aXJlTG9jayhTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCiAgICAgICAgIGNvb3JkaW5h
dGlvbkluZm9JdGVyYXRvciA9IG1fY29vcmRpbmF0aW9uSW5mb01hcC5hZGQoZGJJZGVudGlmaWVy
LCBDb29yZGluYXRpb25JbmZvKCkpLml0ZXJhdG9yOwogICAgIH0KIAotICAgIENvb3JkaW5hdGlv
bkluZm8mIGluZm8gPSBjb29yZGluYXRpb25JbmZvSXRlcmF0b3ItPnNlY29uZDsKKyAgICBDb29y
ZGluYXRpb25JbmZvJiBpbmZvID0gY29vcmRpbmF0aW9uSW5mb0l0ZXJhdG9yLT52YWx1ZTsKICAg
ICBpbmZvLnBlbmRpbmdUcmFuc2FjdGlvbnMuYXBwZW5kKHRyYW5zYWN0aW9uKTsKICAgICBwcm9j
ZXNzUGVuZGluZ1RyYW5zYWN0aW9ucyhpbmZvKTsKIH0KQEAgLTkyLDcgKzkyLDcgQEAgdm9pZCBT
UUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpyZWxlYXNlTG9jayhTUUxUcmFuc2FjdGlvbiogdHJh
bnNhY3Rpb24pCiAKICAgICBDb29yZGluYXRpb25JbmZvTWFwOjppdGVyYXRvciBjb29yZGluYXRp
b25JbmZvSXRlcmF0b3IgPSBtX2Nvb3JkaW5hdGlvbkluZm9NYXAuZmluZChkYklkZW50aWZpZXIp
OwogICAgIEFTU0VSVChjb29yZGluYXRpb25JbmZvSXRlcmF0b3IgIT0gbV9jb29yZGluYXRpb25J
bmZvTWFwLmVuZCgpKTsKLSAgICBDb29yZGluYXRpb25JbmZvJiBpbmZvID0gY29vcmRpbmF0aW9u
SW5mb0l0ZXJhdG9yLT5zZWNvbmQ7CisgICAgQ29vcmRpbmF0aW9uSW5mbyYgaW5mbyA9IGNvb3Jk
aW5hdGlvbkluZm9JdGVyYXRvci0+dmFsdWU7CiAKICAgICBpZiAodHJhbnNhY3Rpb24tPmlzUmVh
ZE9ubHkoKSkgewogICAgICAgICBBU1NFUlQoaW5mby5hY3RpdmVSZWFkVHJhbnNhY3Rpb25zLmNv
bnRhaW5zKHRyYW5zYWN0aW9uKSk7CkBAIC0xMTAsNyArMTEwLDcgQEAgdm9pZCBTUUxUcmFuc2Fj
dGlvbkNvb3JkaW5hdG9yOjpzaHV0ZG93bigpCiAgICAgLy8gTm90aWZ5IGFsbCB0cmFuc2FjdGlv
bnMgaW4gcHJvZ3Jlc3MgdGhhdCB0aGUgZGF0YWJhc2UgdGhyZWFkIGlzIHNodXR0aW5nIGRvd24K
ICAgICBmb3IgKENvb3JkaW5hdGlvbkluZm9NYXA6Oml0ZXJhdG9yIGNvb3JkaW5hdGlvbkluZm9J
dGVyYXRvciA9IG1fY29vcmRpbmF0aW9uSW5mb01hcC5iZWdpbigpOwogICAgICAgICAgY29vcmRp
bmF0aW9uSW5mb0l0ZXJhdG9yICE9IG1fY29vcmRpbmF0aW9uSW5mb01hcC5lbmQoKTsgKytjb29y
ZGluYXRpb25JbmZvSXRlcmF0b3IpIHsKLSAgICAgICAgQ29vcmRpbmF0aW9uSW5mbyYgaW5mbyA9
IGNvb3JkaW5hdGlvbkluZm9JdGVyYXRvci0+c2Vjb25kOworICAgICAgICBDb29yZGluYXRpb25J
bmZvJiBpbmZvID0gY29vcmRpbmF0aW9uSW5mb0l0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgaWYg
KGluZm8uYWN0aXZlV3JpdGVUcmFuc2FjdGlvbikKICAgICAgICAgICAgIGluZm8uYWN0aXZlV3Jp
dGVUcmFuc2FjdGlvbi0+bm90aWZ5RGF0YWJhc2VUaHJlYWRJc1NodXR0aW5nRG93bigpOwogICAg
ICAgICBmb3IgKEhhc2hTZXQ8UmVmUHRyPFNRTFRyYW5zYWN0aW9uPiA+OjppdGVyYXRvciBhY3Rp
dmVSZWFkVHJhbnNhY3Rpb25zSXRlcmF0b3IgPQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJkYXRhYmFzZS9jaHJvbWl1bS9EYXRhYmFzZVRyYWNrZXJDaHJvbWl1bS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL0RhdGFiYXNlVHJh
Y2tlckNocm9taXVtLmNwcAppbmRleCA4OGU5YmRhMWE2YWFjNTlhZGMxYjFkM2Y0ZGM4Njc0Y2Ex
YTkyYzFlLi4zMDlkNDZjMGQwODJhZGNlYzQyMmE0ZDJjYmY3YTg3ZThkNjk4OTc4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL0RhdGFiYXNl
VHJhY2tlckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFi
YXNlL2Nocm9taXVtL0RhdGFiYXNlVHJhY2tlckNocm9taXVtLmNwcApAQCAtMTgwLDcgKzE4MCw3
IEBAIHZvaWQgRGF0YWJhc2VUcmFja2VyOjppbnRlcnJ1cHRBbGxEYXRhYmFzZXNGb3JDb250ZXh0
KGNvbnN0IFNjcmlwdEV4ZWN1dGlvbkNvbnRlCiAKICAgICBEYXRhYmFzZU5hbWVNYXA6OmNvbnN0
X2l0ZXJhdG9yIGRiTmFtZU1hcEVuZEl0ID0gbmFtZU1hcC0+ZW5kKCk7CiAgICAgZm9yIChEYXRh
YmFzZU5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGRiTmFtZU1hcEl0ID0gbmFtZU1hcC0+YmVnaW4o
KTsgZGJOYW1lTWFwSXQgIT0gZGJOYW1lTWFwRW5kSXQ7ICsrZGJOYW1lTWFwSXQpIHsKLSAgICAg
ICAgRGF0YWJhc2VTZXQqIGRhdGFiYXNlU2V0ID0gZGJOYW1lTWFwSXQtPnNlY29uZDsKKyAgICAg
ICAgRGF0YWJhc2VTZXQqIGRhdGFiYXNlU2V0ID0gZGJOYW1lTWFwSXQtPnZhbHVlOwogICAgICAg
ICBEYXRhYmFzZVNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gZGF0YWJhc2VTZXQtPmVuZCgpOwog
ICAgICAgICBmb3IgKERhdGFiYXNlU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IGRhdGFiYXNlU2V0
LT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIGlmICgoKml0KS0+c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpID09IGNvbnRleHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL1F1b3RhVHJhY2tlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL1F1b3RhVHJhY2tlci5jcHAK
aW5kZXggMDM0NGNhOGY2NTZhNjVkMzdiMzA0YmI3ZTM5ODg5ZmNlMzZmOGY1ZC4uMzgyYTNmYjhi
NTc4NjI1NWNlYmEwZTdmODU5YjE0MmFlYzFkOTUxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9jaHJvbWl1bS9RdW90YVRyYWNrZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvY2hyb21pdW0vUXVvdGFUcmFja2VyLmNw
cApAQCAtNTMsOCArNTMsOCBAQCB2b2lkIFF1b3RhVHJhY2tlcjo6Z2V0RGF0YWJhc2VTaXplQW5k
U3BhY2VBdmFpbGFibGVUb09yaWdpbigKICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGEobV9k
YXRhR3VhcmQpOwogICAgICAgICBBU1NFUlQobV9kYXRhYmFzZVNpemVzLmNvbnRhaW5zKG9yaWdp
bklkZW50aWZpZXIpKTsKICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFNpemVNYXA+Ojpjb25zdF9p
dGVyYXRvciBpdCA9IG1fZGF0YWJhc2VTaXplcy5maW5kKG9yaWdpbklkZW50aWZpZXIpOwotICAg
ICAgICBBU1NFUlQoaXQtPnNlY29uZC5jb250YWlucyhkYXRhYmFzZU5hbWUpKTsKLSAgICAgICAg
KmRhdGFiYXNlU2l6ZSA9IGl0LT5zZWNvbmQuZ2V0KGRhdGFiYXNlTmFtZSk7CisgICAgICAgIEFT
U0VSVChpdC0+dmFsdWUuY29udGFpbnMoZGF0YWJhc2VOYW1lKSk7CisgICAgICAgICpkYXRhYmFz
ZVNpemUgPSBpdC0+dmFsdWUuZ2V0KGRhdGFiYXNlTmFtZSk7CiAKICAgICAgICAgaWYgKG1fc3Bh
Y2VBdmFpbGFibGVUb09yaWdpbnMuY29udGFpbnMob3JpZ2luSWRlbnRpZmllcikpIHsKICAgICAg
ICAgICAgICpzcGFjZUF2YWlsYWJsZSA9IG1fc3BhY2VBdmFpbGFibGVUb09yaWdpbnMuZ2V0KG9y
aWdpbklkZW50aWZpZXIpOwpAQCAtNzIsNyArNzIsNyBAQCB2b2lkIFF1b3RhVHJhY2tlcjo6dXBk
YXRlRGF0YWJhc2VTaXplKAogewogICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhKG1fZGF0YUd1YXJk
KTsKICAgICBIYXNoTWFwPFN0cmluZywgU2l6ZU1hcD46Oml0ZXJhdG9yIGl0ID0gbV9kYXRhYmFz
ZVNpemVzLmFkZChvcmlnaW5JZGVudGlmaWVyLCBTaXplTWFwKCkpLml0ZXJhdG9yOwotICAgIGl0
LT5zZWNvbmQuc2V0KGRhdGFiYXNlTmFtZSwgZGF0YWJhc2VTaXplKTsKKyAgICBpdC0+dmFsdWUu
c2V0KGRhdGFiYXNlTmFtZSwgZGF0YWJhc2VTaXplKTsKIH0KIAogdm9pZCBRdW90YVRyYWNrZXI6
OnVwZGF0ZVNwYWNlQXZhaWxhYmxlVG9PcmlnaW4oY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlm
aWVyLCB1bnNpZ25lZCBsb25nIGxvbmcgc3BhY2VBdmFpbGFibGUpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0RGVmbGF0ZUZyYW1lci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0RGVmbGF0ZUZyYW1l
ci5jcHAKaW5kZXggYmY3YWZkYmFiMWNiNGRmZDYyZmE4MTkzNTQxNjI0MTBmMGI5ZTc0ZC4uNTkw
MjQ2ZGMyMTBhZWEyYTMyYzY4OWY0ZGViMjU2NjliNzJlNzE0OSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldERlZmxhdGVGcmFtZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXREZWZsYXRlRnJh
bWVyLmNwcApAQCAtODgsNyArODgsNyBAQCBib29sIFdlYlNvY2tldEV4dGVuc2lvbkRlZmxhdGVG
cmFtZTo6cHJvY2Vzc1Jlc3BvbnNlKGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbgogICAgIGlu
dCB3aW5kb3dCaXRzID0gMTU7CiAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0
ZXJhdG9yIHBhcmFtZXRlciA9IHNlcnZlclBhcmFtZXRlcnMuZmluZCgibWF4X3dpbmRvd19iaXRz
Iik7CiAgICAgaWYgKHBhcmFtZXRlciAhPSBzZXJ2ZXJQYXJhbWV0ZXJzLmVuZCgpKSB7Ci0gICAg
ICAgIHdpbmRvd0JpdHMgPSBwYXJhbWV0ZXItPnNlY29uZC50b0ludCgpOworICAgICAgICB3aW5k
b3dCaXRzID0gcGFyYW1ldGVyLT52YWx1ZS50b0ludCgpOwogICAgICAgICBpZiAod2luZG93Qml0
cyA8IDggfHwgd2luZG93Qml0cyA+IDE1KSB7CiAgICAgICAgICAgICBtX2ZhaWx1cmVSZWFzb24g
PSAiUmVjZWl2ZWQgaW52YWxpZCBtYXhfd2luZG93X2JpdHMgcGFyYW1ldGVyIjsKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKQEAgLTk5LDcgKzk5LDcgQEAgYm9vbCBXZWJTb2NrZXRFeHRlbnNp
b25EZWZsYXRlRnJhbWU6OnByb2Nlc3NSZXNwb25zZShjb25zdCBIYXNoTWFwPFN0cmluZywgU3Ry
aW4KICAgICBXZWJTb2NrZXREZWZsYXRlcjo6Q29udGV4dFRha2VPdmVyTW9kZSBtb2RlID0gV2Vi
U29ja2V0RGVmbGF0ZXI6OlRha2VPdmVyQ29udGV4dDsKICAgICBwYXJhbWV0ZXIgPSBzZXJ2ZXJQ
YXJhbWV0ZXJzLmZpbmQoIm5vX2NvbnRleHRfdGFrZW92ZXIiKTsKICAgICBpZiAocGFyYW1ldGVy
ICE9IHNlcnZlclBhcmFtZXRlcnMuZW5kKCkpIHsKLSAgICAgICAgaWYgKCFwYXJhbWV0ZXItPnNl
Y29uZC5pc051bGwoKSkgeworICAgICAgICBpZiAoIXBhcmFtZXRlci0+dmFsdWUuaXNOdWxsKCkp
IHsKICAgICAgICAgICAgIG1fZmFpbHVyZVJlYXNvbiA9ICJSZWNlaXZlZCBpbnZhbGlkIG5vX2Nv
bnRleHRfdGFrZW92ZXIgcGFyYW1ldGVyIjsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dl
YlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJzb2NrZXRzL1dlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXIuY3BwCmluZGV4IDdjNTkyYWQx
YmYyODA2OGM4MzAzMzY5YjYwNjU2NzNiNmJhN2U5NzQuLjU2MDlmNjU4MWFhYjk3NDJiMGZkODVm
ZjE1ZDE1ZmE1MGVkMjlmNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
c29ja2V0cy9XZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0RXh0ZW5zaW9uRGlzcGF0Y2hlci5jcHAK
QEAgLTE4MSwxMCArMTgxLDEwIEBAIHZvaWQgV2ViU29ja2V0RXh0ZW5zaW9uRGlzcGF0Y2hlcjo6
YXBwZW5kQWNjZXB0ZWRFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBleHRlbnNpCiAgICAgLy8gRklY
TUU6IFNob3VsZCB1c2UgTGlzdEhhc2hTZXQgdG8ga2VlcCB0aGUgb3JkZXIgb2YgdGhlIHBhcmFt
ZXRlcnMuCiAgICAgZm9yIChIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3Ig
aXRlcmF0b3IgPSBleHRlbnNpb25QYXJhbWV0ZXJzLmJlZ2luKCk7IGl0ZXJhdG9yICE9IGV4dGVu
c2lvblBhcmFtZXRlcnMuZW5kKCk7ICsraXRlcmF0b3IpIHsKICAgICAgICAgbV9hY2NlcHRlZEV4
dGVuc2lvbnNCdWlsZGVyLmFwcGVuZCgiOyAiKTsKLSAgICAgICAgbV9hY2NlcHRlZEV4dGVuc2lv
bnNCdWlsZGVyLmFwcGVuZChpdGVyYXRvci0+Zmlyc3QpOwotICAgICAgICBpZiAoIWl0ZXJhdG9y
LT5zZWNvbmQuaXNOdWxsKCkpIHsKKyAgICAgICAgbV9hY2NlcHRlZEV4dGVuc2lvbnNCdWlsZGVy
LmFwcGVuZChpdGVyYXRvci0+a2V5KTsKKyAgICAgICAgaWYgKCFpdGVyYXRvci0+dmFsdWUuaXNO
dWxsKCkpIHsKICAgICAgICAgICAgIG1fYWNjZXB0ZWRFeHRlbnNpb25zQnVpbGRlci5hcHBlbmQo
Ij0iKTsKLSAgICAgICAgICAgIG1fYWNjZXB0ZWRFeHRlbnNpb25zQnVpbGRlci5hcHBlbmQoaXRl
cmF0b3ItPnNlY29uZCk7CisgICAgICAgICAgICBtX2FjY2VwdGVkRXh0ZW5zaW9uc0J1aWxkZXIu
YXBwZW5kKGl0ZXJhdG9yLT52YWx1ZSk7CiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAppbmRleCA2YzA4YmUyMWYw
ZTMxNjcxMjdhYjNmMmI0Yjk1N2Y5YjRlYmNmODIzLi44ZTMyZWI1MDEwMTMzZjllZTg3M2U3OTU4
Y2U0YjNiNmM3YmVhMGVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FYT2JqZWN0Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhP
YmplY3RDYWNoZS5jcHAKQEAgLTk0LDcgKzk0LDcgQEAgQVhPYmplY3RDYWNoZTo6fkFYT2JqZWN0
Q2FjaGUoKQogewogICAgIEhhc2hNYXA8QVhJRCwgUmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+
ID46Oml0ZXJhdG9yIGVuZCA9IG1fb2JqZWN0cy5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8QVhJ
RCwgUmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+ID46Oml0ZXJhdG9yIGl0ID0gbV9vYmplY3Rz
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBvYmogPSAoKml0KS5zZWNvbmQuZ2V0KCk7CisgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Qq
IG9iaiA9ICgqaXQpLnZhbHVlLmdldCgpOwogICAgICAgICBkZXRhY2hXcmFwcGVyKG9iaik7CiAg
ICAgICAgIG9iai0+ZGV0YWNoKCk7CiAgICAgICAgIHJlbW92ZUFYSUQob2JqKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvRE9NT2JqZWN0Q2FjaGUuY3BwIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9ET01PYmplY3RDYWNoZS5jcHAKaW5kZXgg
MmU3ZjEwNmU3OWUzMWM3MzE1NGFiOWNmYWExOWE1ODllOWRlN2RkNS4uZGQ3ZDA0OTcxOGM4MTIy
ZjI0YjM4ZGI4ODNlNWI2YjY0ZTJlYzA2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvZ29iamVjdC9ET01PYmplY3RDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvZ29iamVjdC9ET01PYmplY3RDYWNoZS5jcHAKQEAgLTc0LDcgKzc0LDcgQEAgdm9pZCBE
T01PYmplY3RDYWNoZTo6Y2xlYXJCeUZyYW1lKFdlYkNvcmU6OkZyYW1lKiBmcmFtZSkKICAgICAv
LyBpdGVyYXRpbmcgdGhlIGNhY2hlIGl0c2VsZi4KICAgICBET01PYmplY3RNYXA6Oml0ZXJhdG9y
IGVuZCA9IGRvbU9iamVjdHMoKS5lbmQoKTsKICAgICBmb3IgKERPTU9iamVjdE1hcDo6aXRlcmF0
b3IgaXRlciA9IGRvbU9iamVjdHMoKS5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0g
ICAgICAgIERPTU9iamVjdENhY2hlRGF0YSogZGF0YSA9IGl0ZXItPnNlY29uZDsKKyAgICAgICAg
RE9NT2JqZWN0Q2FjaGVEYXRhKiBkYXRhID0gaXRlci0+dmFsdWU7CiAgICAgICAgIEFTU0VSVChk
YXRhKTsKICAgICAgICAgaWYgKCghZnJhbWUgfHwgZGF0YS0+ZnJhbWUgPT0gZnJhbWUpICYmIGRh
dGEtPnRpbWVzUmV0dXJuZWQpCiAgICAgICAgICAgICB0b1VucmVmLmFwcGVuZChkYXRhKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTU9iamVjdEhhc2hUYWJsZU1h
cC5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NT2JqZWN0SGFzaFRhYmxlTWFwLmgK
aW5kZXggNjQ4MjhkNjk4OGY3ZTQzYjNlOWE0NjM2OTA4Y2QyMTI1NDdhMmZmYy4uNzUzYzA0ZDJm
YzU3NzJlMDk1OWRjZWY1YWM2MWJhMzBjOTZlMTc4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvRE9NT2JqZWN0SGFzaFRhYmxlTWFwLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvRE9NT2JqZWN0SGFzaFRhYmxlTWFwLmgKQEAgLTM5LDE1ICszOSwxNSBA
QCBwdWJsaWM6CiAgICAgfkRPTU9iamVjdEhhc2hUYWJsZU1hcCgpCiAgICAgewogICAgICAgICBm
b3IgKEhhc2hNYXA8Y29uc3QgSlNDOjpIYXNoVGFibGUqLCBKU0M6Okhhc2hUYWJsZT46Oml0ZXJh
dG9yIGl0ZXIgPSBtX21hcC5iZWdpbigpOyBpdGVyICE9IG1fbWFwLmVuZCgpOyArK2l0ZXIpCi0g
ICAgICAgICAgICBpdGVyLT5zZWNvbmQuZGVsZXRlVGFibGUoKTsKKyAgICAgICAgICAgIGl0ZXIt
PnZhbHVlLmRlbGV0ZVRhYmxlKCk7CiAgICAgfQogCiAgICAgY29uc3QgSlNDOjpIYXNoVGFibGUq
IGdldChjb25zdCBKU0M6Okhhc2hUYWJsZSogc3RhdGljVGFibGUpCiAgICAgewogICAgICAgICBI
YXNoTWFwPGNvbnN0IEpTQzo6SGFzaFRhYmxlKiwgSlNDOjpIYXNoVGFibGU+OjppdGVyYXRvciBp
dGVyID0gbV9tYXAuZmluZChzdGF0aWNUYWJsZSk7CiAgICAgICAgIGlmIChpdGVyICE9IG1fbWFw
LmVuZCgpKQotICAgICAgICAgICAgcmV0dXJuICZpdGVyLT5zZWNvbmQ7Ci0gICAgICAgIHJldHVy
biAmbV9tYXAuc2V0KHN0YXRpY1RhYmxlLCBzdGF0aWNUYWJsZS0+Y29weSgpKS5pdGVyYXRvci0+
c2Vjb25kOworICAgICAgICAgICAgcmV0dXJuICZpdGVyLT52YWx1ZTsKKyAgICAgICAgcmV0dXJu
ICZtX21hcC5zZXQoc3RhdGljVGFibGUsIHN0YXRpY1RhYmxlLT5jb3B5KCkpLml0ZXJhdG9yLT52
YWx1ZTsKICAgICB9CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01CaW5kaW5nLmNwcAppbmRleCBmZTA4NGVhNGRmYjQwMjI1NjdkMTc2NGM2ODNkN2ZjN2Y4NTkz
ZmZlLi5iZWUxNTA5YTk1ZTA5ZTVlYTRjZTE1NzQ4NWM3YzkxNGU2YTliMDBjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAKQEAgLTI2MSw3ICsyNjEsNyBA
QCBTdHJ1Y3R1cmUqIGNhY2hlRE9NU3RydWN0dXJlKEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFN0cnVjdHVyZSogc3RydWN0dQogewogICAgIEpTRE9NU3RydWN0dXJlTWFwJiBzdHJ1
Y3R1cmVzID0gZ2xvYmFsT2JqZWN0LT5zdHJ1Y3R1cmVzKCk7CiAgICAgQVNTRVJUKCFzdHJ1Y3R1
cmVzLmNvbnRhaW5zKGNsYXNzSW5mbykpOwotICAgIHJldHVybiBzdHJ1Y3R1cmVzLnNldChjbGFz
c0luZm8sIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgp
LCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkpLml0ZXJhdG9yLT5zZWNvbmQuZ2V0KCk7CisgICAg
cmV0dXJuIHN0cnVjdHVyZXMuc2V0KGNsYXNzSW5mbywgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4o
Z2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKSkuaXRl
cmF0b3ItPnZhbHVlLmdldCgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAKaW5kZXggMzYx
MDQ4MDhiYjYwOWU1N2IwNDgxMTg1MmU4OTVkYWQ3MTMwYTRhZS4uZDNjNDI5YTUwOGQ5MTBkZTdi
ZDJlZWJlZDY3ZDc3NWMyNWVjN2IxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcApAQCAtODgsMTEgKzg4LDExIEBAIHZvaWQgSlNET01H
bG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKIAogICAgIEpTRE9NU3RydWN0dXJlTWFwOjppdGVyYXRvciBlbmQgPSB0aGlzT2JqZWN0
LT5zdHJ1Y3R1cmVzKCkuZW5kKCk7CiAgICAgZm9yIChKU0RPTVN0cnVjdHVyZU1hcDo6aXRlcmF0
b3IgaXQgPSB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmVzKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KQotICAgICAgICB2aXNpdG9yLmFwcGVuZCgmaXQtPnNlY29uZCk7CisgICAgICAgIHZpc2l0b3Iu
YXBwZW5kKCZpdC0+dmFsdWUpOwogCiAgICAgSlNET01Db25zdHJ1Y3Rvck1hcDo6aXRlcmF0b3Ig
ZW5kMiA9IHRoaXNPYmplY3QtPmNvbnN0cnVjdG9ycygpLmVuZCgpOwogICAgIGZvciAoSlNET01D
b25zdHJ1Y3Rvck1hcDo6aXRlcmF0b3IgaXQyID0gdGhpc09iamVjdC0+Y29uc3RydWN0b3JzKCku
YmVnaW4oKTsgaXQyICE9IGVuZDI7ICsraXQyKQotICAgICAgICB2aXNpdG9yLmFwcGVuZCgmaXQy
LT5zZWNvbmQpOworICAgICAgICB2aXNpdG9yLmFwcGVuZCgmaXQyLT52YWx1ZSk7CiB9CiAKIHZv
aWQgSlNET01HbG9iYWxPYmplY3Q6OnNldEN1cnJlbnRFdmVudChFdmVudCogY3VycmVudEV2ZW50
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmpl
Y3QuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmgKaW5k
ZXggYmRhYjU2OGYwMjQ1M2IxNDRmMjNkNDdjYTQ3ZTlkNDY5M2Y1NWM2My4uOWNjMTcxYmMyODg3
NGE4MzllZjgzM2QyMTRmNmY4ZjUxODlmNDc2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oCkBAIC05Myw3ICs5Myw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgSlNDOjpKU09iamVjdCogY29uc3RydWN0b3IgPSBDb25zdHJ1Y3Rv
ckNsYXNzOjpjcmVhdGUoZXhlYywgQ29uc3RydWN0b3JDbGFzczo6Y3JlYXRlU3RydWN0dXJlKGV4
ZWMtPmdsb2JhbERhdGEoKSwgY29uc3RfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9i
amVjdCksIGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCkpLCBjb25zdF9jYXN0PEpTRE9N
R2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7CiAgICAgICAgIEFTU0VSVCghY29uc3RfY2Fz
dDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCktPmNvbnN0cnVjdG9ycygpLmNvbnRh
aW5zKCZDb25zdHJ1Y3RvckNsYXNzOjpzX2luZm8pKTsKICAgICAgICAgSlNDOjpXcml0ZUJhcnJp
ZXI8SlNDOjpKU09iamVjdD4gdGVtcDsKLSAgICAgICAgY29uc3RfY2FzdDxKU0RPTUdsb2JhbE9i
amVjdCo+KGdsb2JhbE9iamVjdCktPmNvbnN0cnVjdG9ycygpLmFkZCgmQ29uc3RydWN0b3JDbGFz
czo6c19pbmZvLCB0ZW1wKS5pdGVyYXRvci0+c2Vjb25kLnNldChleGVjLT5nbG9iYWxEYXRhKCks
IGdsb2JhbE9iamVjdCwgY29uc3RydWN0b3IpOworICAgICAgICBjb25zdF9jYXN0PEpTRE9NR2xv
YmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KS0+Y29uc3RydWN0b3JzKCkuYWRkKCZDb25zdHJ1Y3Rv
ckNsYXNzOjpzX2luZm8sIHRlbXApLml0ZXJhdG9yLT52YWx1ZS5zZXQoZXhlYy0+Z2xvYmFsRGF0
YSgpLCBnbG9iYWxPYmplY3QsIGNvbnN0cnVjdG9yKTsKICAgICAgICAgcmV0dXJuIGNvbnN0cnVj
dG9yOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUGFn
ZVNjcmlwdERlYnVnU2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1BhZ2VT
Y3JpcHREZWJ1Z1NlcnZlci5jcHAKaW5kZXggZmYwYWVlZmI1MGE2MDhjOTIxMDMzZDk4NzkzM2Nk
YzY1ZmNmZDJjOS4uZWQ3NDNjYzllOWVjNTFjMGQ1MzE2MTA5NGYzM2Q5YzkyYWRiMTBkNiAxMDA3
NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUGFnZVNjcmlwdERlYnVnU2VydmVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9QYWdlU2NyaXB0RGVidWdTZXJ2
ZXIuY3BwCkBAIC04Miw3ICs4Miw3IEBAIHZvaWQgUGFnZVNjcmlwdERlYnVnU2VydmVyOjphZGRM
aXN0ZW5lcihTY3JpcHREZWJ1Z0xpc3RlbmVyKiBsaXN0ZW5lciwgUGFnZSogcGFnCiAgICAgQVNT
RVJUX0FSRyhsaXN0ZW5lciwgbGlzdGVuZXIpOwogICAgIEFTU0VSVF9BUkcocGFnZSwgcGFnZSk7
CiAKLSAgICBPd25QdHI8TGlzdGVuZXJTZXQ+JiBsaXN0ZW5lcnMgPSBtX3BhZ2VMaXN0ZW5lcnNN
YXAuYWRkKHBhZ2UsIG51bGxwdHIpLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgT3duUHRyPExpc3Rl
bmVyU2V0PiYgbGlzdGVuZXJzID0gbV9wYWdlTGlzdGVuZXJzTWFwLmFkZChwYWdlLCBudWxscHRy
KS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCFsaXN0ZW5lcnMpCiAgICAgICAgIGxpc3RlbmVy
cyA9IGFkb3B0UHRyKG5ldyBMaXN0ZW5lclNldCk7CiAgICAgbGlzdGVuZXJzLT5hZGQobGlzdGVu
ZXIpOwpAQCAtMTAwLDcgKzEwMCw3IEBAIHZvaWQgUGFnZVNjcmlwdERlYnVnU2VydmVyOjpyZW1v
dmVMaXN0ZW5lcihTY3JpcHREZWJ1Z0xpc3RlbmVyKiBsaXN0ZW5lciwgUGFnZSoKICAgICBpZiAo
aXQgPT0gbV9wYWdlTGlzdGVuZXJzTWFwLmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBM
aXN0ZW5lclNldCogbGlzdGVuZXJzID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICBMaXN0ZW5lclNl
dCogbGlzdGVuZXJzID0gaXQtPnZhbHVlLmdldCgpOwogICAgIGxpc3RlbmVycy0+cmVtb3ZlKGxp
c3RlbmVyKTsKICAgICBpZiAobGlzdGVuZXJzLT5pc0VtcHR5KCkpIHsKICAgICAgICAgbV9wYWdl
TGlzdGVuZXJzTWFwLnJlbW92ZShpdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY3JpcHRDYWNoZWRGcmFtZURhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmNwcAppbmRleCBkZWY3OWNmMmMxNmJhNzZlNTFi
ZDhmMDFmZjA3MDA5ZmVkMjBjYzZlLi5jNjI0ODdlODA1ZmRjYzFiNzAxYzViYmY1ZDk2OTRjYmZi
ZDc0NGRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDYWNo
ZWRGcmFtZURhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENh
Y2hlZEZyYW1lRGF0YS5jcHAKQEAgLTUzLDggKzUzLDggQEAgU2NyaXB0Q2FjaGVkRnJhbWVEYXRh
OjpTY3JpcHRDYWNoZWRGcmFtZURhdGEoRnJhbWUqIGZyYW1lKQogCiAgICAgU2NyaXB0Q29udHJv
bGxlcjo6U2hlbGxNYXA6Oml0ZXJhdG9yIHdpbmRvd1NoZWxsc0VuZCA9IHdpbmRvd1NoZWxscy5l
bmQoKTsKICAgICBmb3IgKFNjcmlwdENvbnRyb2xsZXI6OlNoZWxsTWFwOjppdGVyYXRvciBpdGVy
ID0gd2luZG93U2hlbGxzLmJlZ2luKCk7IGl0ZXIgIT0gd2luZG93U2hlbGxzRW5kOyArK2l0ZXIp
IHsKLSAgICAgICAgSlNET01XaW5kb3cqIHdpbmRvdyA9IGl0ZXItPnNlY29uZC0+d2luZG93KCk7
Ci0gICAgICAgIG1fd2luZG93cy5hZGQoaXRlci0+Zmlyc3QuZ2V0KCksIFN0cm9uZzxKU0RPTVdp
bmRvdz4od2luZG93LT5nbG9iYWxEYXRhKCksIHdpbmRvdykpOworICAgICAgICBKU0RPTVdpbmRv
dyogd2luZG93ID0gaXRlci0+dmFsdWUtPndpbmRvdygpOworICAgICAgICBtX3dpbmRvd3MuYWRk
KGl0ZXItPmtleS5nZXQoKSwgU3Ryb25nPEpTRE9NV2luZG93Pih3aW5kb3ctPmdsb2JhbERhdGEo
KSwgd2luZG93KSk7CiAgICAgfQogCiAgICAgc2NyaXB0Q29udHJvbGxlci0+YXR0YWNoRGVidWdn
ZXIoMCk7CkBAIC03NCw4ICs3NCw4IEBAIHZvaWQgU2NyaXB0Q2FjaGVkRnJhbWVEYXRhOjpyZXN0
b3JlKEZyYW1lKiBmcmFtZSkKIAogICAgIFNjcmlwdENvbnRyb2xsZXI6OlNoZWxsTWFwOjppdGVy
YXRvciB3aW5kb3dTaGVsbHNFbmQgPSB3aW5kb3dTaGVsbHMuZW5kKCk7CiAgICAgZm9yIChTY3Jp
cHRDb250cm9sbGVyOjpTaGVsbE1hcDo6aXRlcmF0b3IgaXRlciA9IHdpbmRvd1NoZWxscy5iZWdp
bigpOyBpdGVyICE9IHdpbmRvd1NoZWxsc0VuZDsgKytpdGVyKSB7Ci0gICAgICAgIERPTVdyYXBw
ZXJXb3JsZCogd29ybGQgPSBpdGVyLT5maXJzdC5nZXQoKTsKLSAgICAgICAgSlNET01XaW5kb3dT
aGVsbCogd2luZG93U2hlbGwgPSBpdGVyLT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIERPTVdyYXBw
ZXJXb3JsZCogd29ybGQgPSBpdGVyLT5rZXkuZ2V0KCk7CisgICAgICAgIEpTRE9NV2luZG93U2hl
bGwqIHdpbmRvd1NoZWxsID0gaXRlci0+dmFsdWUuZ2V0KCk7CiAKICAgICAgICAgaWYgKEpTRE9N
V2luZG93KiB3aW5kb3cgPSBtX3dpbmRvd3MuZ2V0KHdvcmxkKS5nZXQoKSkKICAgICAgICAgICAg
IHdpbmRvd1NoZWxsLT5zZXRXaW5kb3cod2luZG93LT5nbG9iYWxEYXRhKCksIHdpbmRvdyk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCmluZGV4
IDFmMmU5ZDM3MjcxOGMzYjYwNDMzMjU0MGQzMmNiYTgxMjUwN2ZmNDguLjM5ODQzMGY3ZGU0OTQw
YWIxZDEwMGY1M2U4Njc5YjA2NjQ2NzA1NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCkBAIC05Niw3ICs5Niw3IEBAIFNjcmlwdENvbnRy
b2xsZXI6On5TY3JpcHRDb250cm9sbGVyKCkKICAgICAvLyBJdCdzIGxpa2VseSB0aGF0IGRlc3Ry
b3lpbmcgbV93aW5kb3dTaGVsbHMgd2lsbCBjcmVhdGUgYSBsb3Qgb2YgZ2FyYmFnZS4KICAgICBp
ZiAoIW1fd2luZG93U2hlbGxzLmlzRW1wdHkoKSkgewogICAgICAgICB3aGlsZSAoIW1fd2luZG93
U2hlbGxzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGRlc3Ryb3lXaW5kb3dTaGVsbChtX3dpbmRv
d1NoZWxscy5iZWdpbigpLT5maXJzdC5nZXQoKSk7CisgICAgICAgICAgICBkZXN0cm95V2luZG93
U2hlbGwobV93aW5kb3dTaGVsbHMuYmVnaW4oKS0+a2V5LmdldCgpKTsKICAgICAgICAgZ2NDb250
cm9sbGVyKCkuZ2FyYmFnZUNvbGxlY3RTb29uKCk7CiAgICAgfQogfQpAQCAtMTgzLDcgKzE4Myw3
IEBAIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6Y2xlYXJXaW5kb3dTaGVsbChET01XaW5kb3cqIG5l
d0RPTVdpbmRvdywgYm9vbCBnb2luZ0ludG9QCiAgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01X
aW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAKICAgICBmb3IgKFNoZWxsTWFwOjpp
dGVyYXRvciBpdGVyID0gbV93aW5kb3dTaGVsbHMuYmVnaW4oKTsgaXRlciAhPSBtX3dpbmRvd1No
ZWxscy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIEpTRE9NV2luZG93U2hlbGwqIHdpbmRvd1No
ZWxsID0gaXRlci0+c2Vjb25kLmdldCgpOworICAgICAgICBKU0RPTVdpbmRvd1NoZWxsKiB3aW5k
b3dTaGVsbCA9IGl0ZXItPnZhbHVlLmdldCgpOwogCiAgICAgICAgIGlmICh3aW5kb3dTaGVsbC0+
d2luZG93KCktPmltcGwoKSA9PSBuZXdET01XaW5kb3cpCiAgICAgICAgICAgICBjb250aW51ZTsK
QEAgLTI3Niw3ICsyNzYsNyBAQCBib29sIFNjcmlwdENvbnRyb2xsZXI6OmNhbkFjY2Vzc0Zyb21D
dXJyZW50T3JpZ2luKEZyYW1lICpmcmFtZSkKIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6YXR0YWNo
RGVidWdnZXIoSlNDOjpEZWJ1Z2dlciogZGVidWdnZXIpCiB7CiAgICAgZm9yIChTaGVsbE1hcDo6
aXRlcmF0b3IgaXRlciA9IG1fd2luZG93U2hlbGxzLmJlZ2luKCk7IGl0ZXIgIT0gbV93aW5kb3dT
aGVsbHMuZW5kKCk7ICsraXRlcikKLSAgICAgICAgYXR0YWNoRGVidWdnZXIoaXRlci0+c2Vjb25k
LmdldCgpLCBkZWJ1Z2dlcik7CisgICAgICAgIGF0dGFjaERlYnVnZ2VyKGl0ZXItPnZhbHVlLmdl
dCgpLCBkZWJ1Z2dlcik7CiB9CiAKIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6YXR0YWNoRGVidWdn
ZXIoSlNET01XaW5kb3dTaGVsbCogc2hlbGwsIEpTQzo6RGVidWdnZXIqIGRlYnVnZ2VyKQpAQCAt
Mjk0LDggKzI5NCw4IEBAIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6YXR0YWNoRGVidWdnZXIoSlNE
T01XaW5kb3dTaGVsbCogc2hlbGwsIEpTQzo6RGVidWdnZXIqIGRlCiB2b2lkIFNjcmlwdENvbnRy
b2xsZXI6OnVwZGF0ZURvY3VtZW50KCkKIHsKICAgICBmb3IgKFNoZWxsTWFwOjppdGVyYXRvciBp
dGVyID0gbV93aW5kb3dTaGVsbHMuYmVnaW4oKTsgaXRlciAhPSBtX3dpbmRvd1NoZWxscy5lbmQo
KTsgKytpdGVyKSB7Ci0gICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGl0ZXItPmZpcnN0LT5nbG9i
YWxEYXRhKCkpOwotICAgICAgICBpdGVyLT5zZWNvbmQtPndpbmRvdygpLT51cGRhdGVEb2N1bWVu
dCgpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhpdGVyLT5rZXktPmdsb2JhbERhdGEoKSk7
CisgICAgICAgIGl0ZXItPnZhbHVlLT53aW5kb3coKS0+dXBkYXRlRG9jdW1lbnQoKTsKICAgICB9
CiB9CiAKQEAgLTMzMiw3ICszMzIsNyBAQCBQYXNzUmVmUHRyPEJpbmRpbmdzOjpSb290T2JqZWN0
PiBTY3JpcHRDb250cm9sbGVyOjpjcmVhdGVSb290T2JqZWN0KHZvaWQqIG5hdGl2ZQogewogICAg
IFJvb3RPYmplY3RNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yb290T2JqZWN0cy5maW5kKG5hdGl2ZUhh
bmRsZSk7CiAgICAgaWYgKGl0ICE9IG1fcm9vdE9iamVjdHMuZW5kKCkpCi0gICAgICAgIHJldHVy
biBpdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwogCiAgICAgUmVmUHRyPEJp
bmRpbmdzOjpSb290T2JqZWN0PiByb290T2JqZWN0ID0gQmluZGluZ3M6OlJvb3RPYmplY3Q6OmNy
ZWF0ZShuYXRpdmVIYW5kbGUsIGdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKSk7CiAKQEAgLTM0
OCw4ICszNDgsOCBAQCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OnNldENhcHR1cmVDYWxsU3RhY2tG
b3JVbmNhdWdodEV4Y2VwdGlvbnMoYm9vbCkKIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6Y29sbGVj
dElzb2xhdGVkQ29udGV4dHMoVmVjdG9yPHN0ZDo6cGFpcjxKU0M6OkV4ZWNTdGF0ZSosIFNlY3Vy
aXR5T3JpZ2luKj4gPiYgcmVzdWx0KQogewogICAgIGZvciAoU2hlbGxNYXA6Oml0ZXJhdG9yIGl0
ZXIgPSBtX3dpbmRvd1NoZWxscy5iZWdpbigpOyBpdGVyICE9IG1fd2luZG93U2hlbGxzLmVuZCgp
OyArK2l0ZXIpIHsKLSAgICAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBpdGVyLT5zZWNvbmQt
PndpbmRvdygpLT5nbG9iYWxFeGVjKCk7Ci0gICAgICAgIFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4g
PSBpdGVyLT5zZWNvbmQtPndpbmRvdygpLT5pbXBsKCktPmRvY3VtZW50KCktPnNlY3VyaXR5T3Jp
Z2luKCk7CisgICAgICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gaXRlci0+dmFsdWUtPndpbmRv
dygpLT5nbG9iYWxFeGVjKCk7CisgICAgICAgIFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4gPSBpdGVy
LT52YWx1ZS0+d2luZG93KCktPmltcGwoKS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKTsK
ICAgICAgICAgcmVzdWx0LmFwcGVuZChzdGQ6OnBhaXI8U2NyaXB0U3RhdGUqLCBTZWN1cml0eU9y
aWdpbio+KGV4ZWMsIG9yaWdpbikpOwogICAgIH0KIH0KQEAgLTQzNyw3ICs0MzcsNyBAQCB2b2lk
IFNjcmlwdENvbnRyb2xsZXI6OmNsZWFudXBTY3JpcHRPYmplY3RzRm9yUGx1Z2luKHZvaWQqIG5h
dGl2ZUhhbmRsZSkKICAgICBpZiAoaXQgPT0gbV9yb290T2JqZWN0cy5lbmQoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgaXQtPnNlY29uZC0+aW52YWxpZGF0ZSgpOworICAgIGl0LT52YWx1ZS0+
aW52YWxpZGF0ZSgpOwogICAgIG1fcm9vdE9iamVjdHMucmVtb3ZlKGl0KTsKIH0KIApAQCAtNDQ3
LDcgKzQ0Nyw3IEBAIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6Y2xlYXJTY3JpcHRPYmplY3RzKCkK
IAogICAgIFJvb3RPYmplY3RNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcm9vdE9iamVjdHMu
ZW5kKCk7CiAgICAgZm9yIChSb290T2JqZWN0TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fcm9v
dE9iamVjdHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5p
bnZhbGlkYXRlKCk7CisgICAgICAgIGl0LT52YWx1ZS0+aW52YWxpZGF0ZSgpOwogCiAgICAgbV9y
b290T2JqZWN0cy5jbGVhcigpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TY3JpcHRDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3Jp
cHRDb250cm9sbGVyLmgKaW5kZXggZjc2ZmRlOGZjNzJmNjgwNWVmNDhjMDNhZmMxZDA2YTNhMTU0
Y2E4Ny4uZjNkYTUzZTA1M2RmMGY2YWY5NjcxNmZjMGMwMmIyYjk1Y2MzNTRmYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuaApAQCAtNzQsMTIgKzc0
LDEyIEBAIHB1YmxpYzoKICAgICBKU0RPTVdpbmRvd1NoZWxsKiB3aW5kb3dTaGVsbChET01XcmFw
cGVyV29ybGQqIHdvcmxkKQogICAgIHsKICAgICAgICAgU2hlbGxNYXA6Oml0ZXJhdG9yIGl0ZXIg
PSBtX3dpbmRvd1NoZWxscy5maW5kKHdvcmxkKTsKLSAgICAgICAgcmV0dXJuIChpdGVyICE9IG1f
d2luZG93U2hlbGxzLmVuZCgpKSA/IGl0ZXItPnNlY29uZC5nZXQoKSA6IGluaXRTY3JpcHQod29y
bGQpOworICAgICAgICByZXR1cm4gKGl0ZXIgIT0gbV93aW5kb3dTaGVsbHMuZW5kKCkpID8gaXRl
ci0+dmFsdWUuZ2V0KCkgOiBpbml0U2NyaXB0KHdvcmxkKTsKICAgICB9CiAgICAgSlNET01XaW5k
b3dTaGVsbCogZXhpc3RpbmdXaW5kb3dTaGVsbChET01XcmFwcGVyV29ybGQqIHdvcmxkKSBjb25z
dAogICAgIHsKICAgICAgICAgU2hlbGxNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX3dpbmRv
d1NoZWxscy5maW5kKHdvcmxkKTsKLSAgICAgICAgcmV0dXJuIChpdGVyICE9IG1fd2luZG93U2hl
bGxzLmVuZCgpKSA/IGl0ZXItPnNlY29uZC5nZXQoKSA6IDA7CisgICAgICAgIHJldHVybiAoaXRl
ciAhPSBtX3dpbmRvd1NoZWxscy5lbmQoKSkgPyBpdGVyLT52YWx1ZS5nZXQoKSA6IDA7CiAgICAg
fQogICAgIEpTRE9NV2luZG93KiBnbG9iYWxPYmplY3QoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCkK
ICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1
Z1NlcnZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZl
ci5jcHAKaW5kZXggYWE2MGEyZGQ4YTM1OGJmYzVkZTExZDNiMGM0NzBlMmViOTE0ZGJhMS4uZmEw
OGMyMDdmOTU4M2E3MzQ1NmQ3YmQ1MGIxMTJiYjdjNDMyN2ZlYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmNwcApAQCAtNzUsMTEgKzc1LDEx
IEBAIFN0cmluZyBTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0QnJlYWtwb2ludChjb25zdCBTdHJpbmcm
IHNvdXJjZUlELCBjb25zdCBTY3JpcHRCcmVhCiAgICAgU291cmNlSWRUb0JyZWFrcG9pbnRzTWFw
OjppdGVyYXRvciBpdCA9IG1fc291cmNlSWRUb0JyZWFrcG9pbnRzLmZpbmQoc291cmNlSURWYWx1
ZSk7CiAgICAgaWYgKGl0ID09IG1fc291cmNlSWRUb0JyZWFrcG9pbnRzLmVuZCgpKQogICAgICAg
ICBpdCA9IG1fc291cmNlSWRUb0JyZWFrcG9pbnRzLnNldChzb3VyY2VJRFZhbHVlLCBMaW5lVG9C
cmVha3BvaW50TWFwKCkpLml0ZXJhdG9yOwotICAgIExpbmVUb0JyZWFrcG9pbnRNYXA6Oml0ZXJh
dG9yIGJyZWFrc0l0ID0gaXQtPnNlY29uZC5maW5kKHNjcmlwdEJyZWFrcG9pbnQubGluZU51bWJl
ciArIDEpOwotICAgIGlmIChicmVha3NJdCA9PSBpdC0+c2Vjb25kLmVuZCgpKQotICAgICAgICBi
cmVha3NJdCA9IGl0LT5zZWNvbmQuc2V0KHNjcmlwdEJyZWFrcG9pbnQubGluZU51bWJlciArIDEs
IEJyZWFrcG9pbnRzSW5MaW5lKCkpLml0ZXJhdG9yOworICAgIExpbmVUb0JyZWFrcG9pbnRNYXA6
Oml0ZXJhdG9yIGJyZWFrc0l0ID0gaXQtPnZhbHVlLmZpbmQoc2NyaXB0QnJlYWtwb2ludC5saW5l
TnVtYmVyICsgMSk7CisgICAgaWYgKGJyZWFrc0l0ID09IGl0LT52YWx1ZS5lbmQoKSkKKyAgICAg
ICAgYnJlYWtzSXQgPSBpdC0+dmFsdWUuc2V0KHNjcmlwdEJyZWFrcG9pbnQubGluZU51bWJlciAr
IDEsIEJyZWFrcG9pbnRzSW5MaW5lKCkpLml0ZXJhdG9yOwogCi0gICAgQnJlYWtwb2ludHNJbkxp
bmUmIGJyZWFrc1ZlY3RvciA9IGJyZWFrc0l0LT5zZWNvbmQ7CisgICAgQnJlYWtwb2ludHNJbkxp
bmUmIGJyZWFrc1ZlY3RvciA9IGJyZWFrc0l0LT52YWx1ZTsKICAgICB1bnNpZ25lZCBicmVha3ND
b3VudCA9IGJyZWFrc1ZlY3Rvci5zaXplKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGJyZWFrc0NvdW50OyBpKyspIHsKICAgICAgICAgaWYgKGJyZWFrc1ZlY3Rvci5hdChpKS5jb2x1
bW5OdW1iZXIgPT0gc2NyaXB0QnJlYWtwb2ludC5jb2x1bW5OdW1iZXIpCkBAIC0xMTIsMTEgKzEx
MiwxMSBAQCB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpyZW1vdmVCcmVha3BvaW50KGNvbnN0IFN0
cmluZyYgYnJlYWtwb2ludElkKQogICAgIFNvdXJjZUlkVG9CcmVha3BvaW50c01hcDo6aXRlcmF0
b3IgaXQgPSBtX3NvdXJjZUlkVG9CcmVha3BvaW50cy5maW5kKHNvdXJjZUlEVmFsdWUpOwogICAg
IGlmIChpdCA9PSBtX3NvdXJjZUlkVG9CcmVha3BvaW50cy5lbmQoKSkKICAgICAgICAgcmV0dXJu
OwotICAgIExpbmVUb0JyZWFrcG9pbnRNYXA6Oml0ZXJhdG9yIGJyZWFrc0l0ID0gaXQtPnNlY29u
ZC5maW5kKGxpbmVOdW1iZXIgKyAxKTsKLSAgICBpZiAoYnJlYWtzSXQgPT0gaXQtPnNlY29uZC5l
bmQoKSkKKyAgICBMaW5lVG9CcmVha3BvaW50TWFwOjppdGVyYXRvciBicmVha3NJdCA9IGl0LT52
YWx1ZS5maW5kKGxpbmVOdW1iZXIgKyAxKTsKKyAgICBpZiAoYnJlYWtzSXQgPT0gaXQtPnZhbHVl
LmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBCcmVha3BvaW50c0luTGluZSYgYnJlYWtz
VmVjdG9yID0gYnJlYWtzSXQtPnNlY29uZDsKKyAgICBCcmVha3BvaW50c0luTGluZSYgYnJlYWtz
VmVjdG9yID0gYnJlYWtzSXQtPnZhbHVlOwogICAgIHVuc2lnbmVkIGJyZWFrc0NvdW50ID0gYnJl
YWtzVmVjdG9yLnNpemUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnJlYWtzQ291
bnQ7IGkrKykgewogICAgICAgICBpZiAoYnJlYWtzVmVjdG9yLmF0KGkpLmNvbHVtbk51bWJlciA9
PSBzdGF0aWNfY2FzdDxpbnQ+KGNvbHVtbk51bWJlcikpIHsKQEAgLTE3OCwxMiArMTc4LDEyIEBA
IGJvb2wgU2NyaXB0RGVidWdTZXJ2ZXI6Omhhc0JyZWFrcG9pbnQoaW50cHRyX3Qgc291cmNlSUQs
IGNvbnN0IFRleHRQb3NpdGlvbiYgcG9zCiAgICAgaWYgKGxpbmVOdW1iZXIgPCAwIHx8IGNvbHVt
bk51bWJlciA8IDApCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIExpbmVUb0JyZWFrcG9p
bnRNYXA6OmNvbnN0X2l0ZXJhdG9yIGJyZWFrc0l0ID0gaXQtPnNlY29uZC5maW5kKGxpbmVOdW1i
ZXIgKyAxKTsKLSAgICBpZiAoYnJlYWtzSXQgPT0gaXQtPnNlY29uZC5lbmQoKSkKKyAgICBMaW5l
VG9CcmVha3BvaW50TWFwOjpjb25zdF9pdGVyYXRvciBicmVha3NJdCA9IGl0LT52YWx1ZS5maW5k
KGxpbmVOdW1iZXIgKyAxKTsKKyAgICBpZiAoYnJlYWtzSXQgPT0gaXQtPnZhbHVlLmVuZCgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBib29sIGhpdCA9IGZhbHNlOwotICAgIGNvbnN0
IEJyZWFrcG9pbnRzSW5MaW5lJiBicmVha3NWZWN0b3IgPSBicmVha3NJdC0+c2Vjb25kOworICAg
IGNvbnN0IEJyZWFrcG9pbnRzSW5MaW5lJiBicmVha3NWZWN0b3IgPSBicmVha3NJdC0+dmFsdWU7
CiAgICAgdW5zaWduZWQgYnJlYWtzQ291bnQgPSBicmVha3NWZWN0b3Iuc2l6ZSgpOwogICAgIHVu
c2lnbmVkIGk7CiAgICAgZm9yIChpID0gMDsgaSA8IGJyZWFrc0NvdW50OyBpKyspIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3Bw
CmluZGV4IDZhZTVlMzgwM2UwYjQzOWMyY2VmNGQyNDJjYTJkYTE3MTRjNjI4NTAuLjI0NmViZjRk
OWZlY2ExODYyYmI0NWZiYTEyZTBhZDE3NzY1Yzg1YzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcApAQCAtNDI1LDggKzQy
NSw4IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIEhhbmRsZSBkdXBsaWNhdGUgcmVmZXJlbmNlcwog
ICAgICAgICBpZiAoZm91bmQgIT0gbV9vYmplY3RQb29sLmVuZCgpKSB7CiAgICAgICAgICAgICB3
cml0ZShPYmplY3RSZWZlcmVuY2VUYWcpOwotICAgICAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0
PGludDMyX3Q+KGZvdW5kLT5zZWNvbmQpIDwgbV9vYmplY3RQb29sLnNpemUoKSk7Ci0gICAgICAg
ICAgICB3cml0ZU9iamVjdEluZGV4KGZvdW5kLT5zZWNvbmQpOworICAgICAgICAgICAgQVNTRVJU
KHN0YXRpY19jYXN0PGludDMyX3Q+KGZvdW5kLT52YWx1ZSkgPCBtX29iamVjdFBvb2wuc2l6ZSgp
KTsKKyAgICAgICAgICAgIHdyaXRlT2JqZWN0SW5kZXgoZm91bmQtPnZhbHVlKTsKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKQEAgLTY4Myw3ICs2ODMsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgIE9iamVjdFBvb2w6Oml0ZXJhdG9yIGluZGV4ID0gbV90cmFuc2Zl
cnJlZE1lc3NhZ2VQb3J0cy5maW5kKG9iaik7CiAgICAgICAgICAgICAgICAgaWYgKGluZGV4ICE9
IG1fdHJhbnNmZXJyZWRNZXNzYWdlUG9ydHMuZW5kKCkpIHsKICAgICAgICAgICAgICAgICAgICAg
d3JpdGUoTWVzc2FnZVBvcnRSZWZlcmVuY2VUYWcpOwotICAgICAgICAgICAgICAgICAgICB3cml0
ZShpbmRleC0+c2Vjb25kKTsKKyAgICAgICAgICAgICAgICAgICAgd3JpdGUoaW5kZXgtPnZhbHVl
KTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIC8vIE1lc3NhZ2VQb3J0IG9iamVjdCBjb3VsZCBub3QgYmUgZm91bmQg
aW4gdHJhbnNmZXJyZWQgbWVzc2FnZSBwb3J0cwpAQCAtNjk5LDcgKzY5OSw3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgT2JqZWN0UG9vbDo6aXRlcmF0b3IgaW5kZXggPSBtX3RyYW5zZmVy
cmVkQXJyYXlCdWZmZXJzLmZpbmQob2JqKTsKICAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT0g
bV90cmFuc2ZlcnJlZEFycmF5QnVmZmVycy5lbmQoKSkgewogICAgICAgICAgICAgICAgICAgICB3
cml0ZShBcnJheUJ1ZmZlclRyYW5zZmVyVGFnKTsKLSAgICAgICAgICAgICAgICAgICAgd3JpdGUo
aW5kZXgtPnNlY29uZCk7CisgICAgICAgICAgICAgICAgICAgIHdyaXRlKGluZGV4LT52YWx1ZSk7
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICBpZiAoIXN0YXJ0T2JqZWN0SW50ZXJuYWwob2JqKSkgLy8gaGFuZGxlIGR1
cGxpY2F0ZXMKQEAgLTc5Niw3ICs3OTYsNyBAQCBwcml2YXRlOgogICAgICAgICBTdHJpbmdDb25z
dGFudFBvb2w6OkFkZFJlc3VsdCBhZGRSZXN1bHQgPSBtX2NvbnN0YW50UG9vbC5hZGQoc3RyLmlt
cGwoKSwgbV9jb25zdGFudFBvb2wuc2l6ZSgpKTsKICAgICAgICAgaWYgKCFhZGRSZXN1bHQuaXNO
ZXdFbnRyeSkgewogICAgICAgICAgICAgd3JpdGUoU3RyaW5nUG9vbFRhZyk7Ci0gICAgICAgICAg
ICB3cml0ZVN0cmluZ0luZGV4KGFkZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKKyAgICAgICAg
ICAgIHdyaXRlU3RyaW5nSW5kZXgoYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQppbmRleCBiOWY0MzY0YmZlMzY3YzQ1YTdhYjZi
ZWM2NDkzYTA0MWJiNjU1MzVlLi5kNWY1ZTcxMGVlNjVlNjE5YWIxMjA4NjM2NzE3ZmNhODQyNThl
OTBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JWOC5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JWOC5wbQpAQCAtMjk0OCw3ICsyOTQ4LDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0
aW9uVGVtcGxhdGU+ICR7Y2xhc3NOYW1lfTo6R2V0UmF3VGVtcGxhdGUoKQogICAgIFY4UGVySXNv
bGF0ZURhdGEqIGRhdGEgPSBWOFBlcklzb2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhQZXJJ
c29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnJhd1RlbXBs
YXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT5yYXdUZW1wbGF0
ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJl
dHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwog
ICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9IGNyZWF0ZVJh
d1RlbXBsYXRlKCk7CkBAIC0yOTYxLDcgKzI5NjEsNyBAQCB2ODo6UGVyc2lzdGVudDx2ODo6RnVu
Y3Rpb25UZW1wbGF0ZT4gJHtjbGFzc05hbWV9OjpHZXRUZW1wbGF0ZSgpCiAgICAgVjhQZXJJc29s
YXRlRGF0YSogZGF0YSA9IFY4UGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOFBlcklz
b2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+dGVtcGxhdGVN
YXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnRlbXBsYXRlTWFwKCku
ZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6
OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOEZsb2F0NjRBcnJheS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhGbG9hdDY0QXJyYXku
Y3BwCmluZGV4IDFhMjdhOWRiODgxMmMxYWY2NGE0YTJkMTk5NTU2NmUxNGM5YzY1M2EuLmRjZjM1
OTBkODRiZDQyNjJmOGNhMmRjZTJmMDVkNmM3MmM5MTY5MDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOEZsb2F0NjRBcnJheS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4RmxvYXQ2NEFycmF5LmNw
cApAQCAtMTE4LDcgKzExOCw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRl
PiBWOEZsb2F0NjRBcnJheTo6R2V0UmF3VGVtcGxhdGUoKQogICAgIFY4UGVySXNvbGF0ZURhdGEq
IGRhdGEgPSBWOFBlcklzb2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhQZXJJc29sYXRlRGF0
YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCku
ZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmVu
ZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1
bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQ
ZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9IGNyZWF0ZVJhd1RlbXBsYXRl
KCk7CkBAIC0xMzEsNyArMTMxLDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxh
dGU+IFY4RmxvYXQ2NEFycmF5OjpHZXRUZW1wbGF0ZSgpCiAgICAgVjhQZXJJc29sYXRlRGF0YSog
ZGF0YSA9IFY4UGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOFBlcklzb2xhdGVEYXRh
OjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+dGVtcGxhdGVNYXAoKS5maW5k
KCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZW5kKCkpCi0g
ICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFs
dWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3Rl
bnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RBY3RpdmVET01PYmplY3QuY3BwIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEFjdGl2ZURPTU9i
amVjdC5jcHAKaW5kZXggNTBlMDA4MmRkZjM0NDdjNmUyNzk2YTE4ZGUxMWJmZDEwZDc2OGE5My4u
M2UyYjFhOTc0NjNkYTM4ODY2Yzg2YjViYjllMzM2ZmY5NmU0ZWFiMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEFjdGl2ZURPTU9iamVj
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVz
dEFjdGl2ZURPTU9iamVjdC5jcHAKQEAgLTE0Nyw3ICsxNDcsNyBAQCB2ODo6UGVyc2lzdGVudDx2
ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0QWN0aXZlRE9NT2JqZWN0OjpHZXRSYXdUZW1wbGF0
ZSgpCiAgICAgVjhQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4UGVySXNvbGF0ZURhdGE6OmN1cnJl
bnQoKTsKICAgICBWOFBlcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0
ID0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9
IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNl
Y29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2Nv
cGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+
IHRlbXBsID0gY3JlYXRlUmF3VGVtcGxhdGUoKTsKQEAgLTE2MCw3ICsxNjAsNyBAQCB2ODo6UGVy
c2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0QWN0aXZlRE9NT2JqZWN0OjpHZXRU
ZW1wbGF0ZSgpCiAgICAgVjhQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4UGVySXNvbGF0ZURhdGE6
OmN1cnJlbnQoKTsKICAgICBWOFBlcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3Ig
cmVzdWx0ID0gZGF0YS0+dGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0
ICE9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNl
Y29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2Nv
cGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+
IHRlbXBsID0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9WOC9WOFRlc3RDdXN0b21OYW1lZEdldHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwCmluZGV4IDk3NWNm
ZWIzN2MwNmM4NjI5OWViZWEzNDJiMjMwNjliMjFjYTQ5Y2QuLmFiNWI1YmI4MTQ0ZTNhYmE3NmU2
NDY5OTI5M2M4MWE1YTc1MjM5ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RDdXN0b21OYW1lZEdldHRlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEN1c3RvbU5hbWVkR2V0dGVy
LmNwcApAQCAtODEsNyArODEsNyBAQCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0
ZT4gVjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI6OkdldFJhd1RlbXBsYXRlKCkKICAgICBWOFBlcklz
b2xhdGVEYXRhKiBkYXRhID0gVjhQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4UGVy
SXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT5yYXdUZW1w
bGF0ZU1hcCgpLmZpbmQoJmluZm8pOwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+cmF3VGVtcGxh
dGVNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICBy
ZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsK
ICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPSBjcmVhdGVS
YXdUZW1wbGF0ZSgpOwpAQCAtOTQsNyArOTQsNyBAQCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rp
b25UZW1wbGF0ZT4gVjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI6OkdldFRlbXBsYXRlKCkKICAgICBW
OFBlcklzb2xhdGVEYXRhKiBkYXRhID0gVjhQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAg
IFY4UGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT50
ZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+dGVtcGxh
dGVNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICBy
ZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsK
ICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50
Q29uc3RydWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4
L1Y4VGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCmluZGV4IDQwNzRlNTczMjQ5YmM1YWQ0OTkyZjIy
MTA2YzkzZjk1NTlhN2JhMjkuLjBiOTVjMTc4OTg0NzkyYjk1YzdiYWU5YmU1ODEwMDA5YTZiYTA1
ZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9W
OFRlc3RFdmVudENvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAKQEAgLTExOCw3ICsxMTgs
NyBAQCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0RXZlbnRDb25z
dHJ1Y3Rvcjo6R2V0UmF3VGVtcGxhdGUoKQogICAgIFY4UGVySXNvbGF0ZURhdGEqIGRhdGEgPSBW
OFBlcklzb2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhQZXJJc29sYXRlRGF0YTo6VGVtcGxh
dGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZmluZCgmaW5m
byk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAg
ICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVl
OwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50
PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9IGNyZWF0ZVJhd1RlbXBsYXRlKCk7CkBAIC0x
MzEsNyArMTMxLDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVz
dEV2ZW50Q29uc3RydWN0b3I6OkdldFRlbXBsYXRlKCkKICAgICBWOFBlcklzb2xhdGVEYXRhKiBk
YXRhID0gVjhQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4UGVySXNvbGF0ZURhdGE6
OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmZpbmQo
JmluZm8pOwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+dGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1
ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVu
dDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50VGFyZ2V0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudFRhcmdldC5jcHAK
aW5kZXggOGNiYWEyZjA2NGRhNmIwZTljNTY4YzdkMTJlODYxODQzODE3NDE5NC4uMWUxMWY0ZDc0
NWNiYWQ3ZTI0NTdkYTg0NzU5MTM2MzY3OGFhMmU1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50VGFyZ2V0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRUYXJnZXQu
Y3BwCkBAIC0xNDIsNyArMTQyLDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxh
dGU+IFY4VGVzdEV2ZW50VGFyZ2V0OjpHZXRSYXdUZW1wbGF0ZSgpCiAgICAgVjhQZXJJc29sYXRl
RGF0YSogZGF0YSA9IFY4UGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOFBlcklzb2xh
dGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+cmF3VGVtcGxhdGVN
YXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnJhd1RlbXBsYXRlTWFw
KCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAg
djg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0gY3JlYXRlUmF3VGVt
cGxhdGUoKTsKQEAgLTE1NSw3ICsxNTUsNyBAQCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25U
ZW1wbGF0ZT4gVjhUZXN0RXZlbnRUYXJnZXQ6OkdldFRlbXBsYXRlKCkKICAgICBWOFBlcklzb2xh
dGVEYXRhKiBkYXRhID0gVjhQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4UGVySXNv
bGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT50ZW1wbGF0ZU1h
cCgpLmZpbmQoJmluZm8pOwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+dGVtcGxhdGVNYXAoKS5l
bmQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVz
dWx0LT52YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6
UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV4Y2VwdGlvbi5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXhjZXB0aW9u
LmNwcAppbmRleCA0NTFjNThkNzhhNzZjNzQ1YTZjN2ViNmRmMzVlYjA3MzYzY2NjZDE2Li41NTg5
NmU4YzhiYzM0OGM4MDkyNTExM2ExMjRjNmE4MTY3YTIyZDNiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXhjZXB0aW9uLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXhjZXB0aW9u
LmNwcApAQCAtNzIsNyArNzIsNyBAQCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0
ZT4gVjhUZXN0RXhjZXB0aW9uOjpHZXRSYXdUZW1wbGF0ZSgpCiAgICAgVjhQZXJJc29sYXRlRGF0
YSogZGF0YSA9IFY4UGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOFBlcklzb2xhdGVE
YXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+cmF3VGVtcGxhdGVNYXAo
KS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCku
ZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6
OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0gY3JlYXRlUmF3VGVtcGxh
dGUoKTsKQEAgLTg1LDcgKzg1LDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxh
dGU+IFY4VGVzdEV4Y2VwdGlvbjo6R2V0VGVtcGxhdGUoKQogICAgIFY4UGVySXNvbGF0ZURhdGEq
IGRhdGEgPSBWOFBlcklzb2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhQZXJJc29sYXRlRGF0
YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZmlu
ZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmVuZCgpKQot
ICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZh
bHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0
ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0SW50ZXJmYWNlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RJbnRlcmZhY2UuY3BwCmlu
ZGV4IGFjODY4YWI5OWYxMjFlNTZhZDg5YjkxNmFiZGFjNDkxNDFlN2U2NjEuLmE3YTk0ZWY4MzQz
ZWEwYWU2NjM5NDYzODJjNGNjNDNhNTIzN2VhYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RJbnRlcmZhY2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RJbnRlcmZhY2UuY3BwCkBA
IC0zMDcsNyArMzA3LDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4
VGVzdEludGVyZmFjZTo6R2V0UmF3VGVtcGxhdGUoKQogICAgIFY4UGVySXNvbGF0ZURhdGEqIGRh
dGEgPSBWOFBlcklzb2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhQZXJJc29sYXRlRGF0YTo6
VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZmlu
ZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmVuZCgp
KQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQt
PnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJz
aXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9IGNyZWF0ZVJhd1RlbXBsYXRlKCk7
CkBAIC0zMjAsNyArMzIwLDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+
IFY4VGVzdEludGVyZmFjZTo6R2V0VGVtcGxhdGUoKQogICAgIFY4UGVySXNvbGF0ZURhdGEqIGRh
dGEgPSBWOFBlcklzb2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhQZXJJc29sYXRlRGF0YTo6
VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZmluZCgm
aW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAg
ICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVl
OwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50
PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TWVkaWFR
dWVyeUxpc3RMaXN0ZW5lci5jcHAKaW5kZXggNGIwOWQwYmQyNmFjZTEwNzRiYzFmZTNmNDZkNzli
MWU5MjQ3OWMyZi4uYWY5NjE3Y2JkMDBiNDRlZmRhNTMwMTU5YmI5NjdkNDUyZTM5MDViZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9WOC9WOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcApAQCAtODEsNyAr
ODEsNyBAQCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0TWVkaWFR
dWVyeUxpc3RMaXN0ZW5lcjo6R2V0UmF3VGVtcGxhdAogICAgIFY4UGVySXNvbGF0ZURhdGEqIGRh
dGEgPSBWOFBlcklzb2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhQZXJJc29sYXRlRGF0YTo6
VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZmlu
ZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmVuZCgp
KQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQt
PnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJz
aXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9IGNyZWF0ZVJhd1RlbXBsYXRlKCk7
CkBAIC05NCw3ICs5NCw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBW
OFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjpHZXRUZW1wbGF0ZSgpCiAgICAgVjhQZXJJc29s
YXRlRGF0YSogZGF0YSA9IFY4UGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOFBlcklz
b2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+dGVtcGxhdGVN
YXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnRlbXBsYXRlTWFwKCku
ZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6
OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROYW1lZENvbnN0cnVj
dG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RO
YW1lZENvbnN0cnVjdG9yLmNwcAppbmRleCA1ZWIwN2VlZjI0YTkxNjcyZmNhZmRjZjY4YTRiMjQx
YTMwNDQyM2Y5Li40YjVjZTAyMzdiYWMwNTNlZTYwMTE2ZjZjYzFlMTBkNmYxN2Q5NTIxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TmFt
ZWRDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Y4L1Y4VGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwCkBAIC0xMTcsNyArMTE3LDcgQEAgdjg6
OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdE5hbWVkQ29uc3RydWN0b3I6
OkdldFJhd1RlbXBsYXRlKCkKICAgICBWOFBlcklzb2xhdGVEYXRhKiBkYXRhID0gVjhQZXJJc29s
YXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4UGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjpp
dGVyYXRvciByZXN1bHQgPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwogICAg
IGlmIChyZXN1bHQgIT0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0
dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAogICAg
IHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVu
Y3Rpb25UZW1wbGF0ZT4gdGVtcGwgPSBjcmVhdGVSYXdUZW1wbGF0ZSgpOwpAQCAtMTMwLDcgKzEz
MCw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3ROYW1lZENv
bnN0cnVjdG9yOjpHZXRUZW1wbGF0ZSgpCiAgICAgVjhQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4
UGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOFBlcklzb2xhdGVEYXRhOjpUZW1wbGF0
ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+dGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsK
ICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJl
dHVybiByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAg
ICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1
bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROb2RlLmNwcAppbmRleCA1NThhNjVhYjY1NTY0ZjIx
ZWFhNmQ1NTkwMzBkMGEwOGM5M2I1MTZhLi5lNDUyMzZhODI3NjEyY2UxMjExZTA0OTBlNGQ3NTBi
Yzc0ZjZjZWQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVjgvVjhUZXN0Tm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Y4L1Y4VGVzdE5vZGUuY3BwCkBAIC04MCw3ICs4MCw3IEBAIHY4OjpQZXJzaXN0ZW50
PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3ROb2RlOjpHZXRSYXdUZW1wbGF0ZSgpCiAgICAg
VjhQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4UGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAg
ICBWOFBlcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+
cmF3VGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnJh
d1RlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxl
U2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0g
Y3JlYXRlUmF3VGVtcGxhdGUoKTsKQEAgLTkzLDcgKzkzLDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6
OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdE5vZGU6OkdldFRlbXBsYXRlKCkKICAgICBWOFBlcklz
b2xhdGVEYXRhKiBkYXRhID0gVjhQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4UGVy
SXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT50ZW1wbGF0
ZU1hcCgpLmZpbmQoJmluZm8pOwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+dGVtcGxhdGVNYXAo
KS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4g
cmVzdWx0LT52YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2
ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcAppbmRl
eCBjNDM0MWIyYWVhMjEzYjBjZDIyNDVhNGIwZjkyNWYyNzVlODUzOTM3Li5kYjc4MTA2MjRiNzgy
OWYxMzA2Mzk0MzFmNDZmNjQwMzlmYjNhYWVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcApAQCAtMjI0NSw3ICsyMjQ1
LDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdE9iajo6R2V0
UmF3VGVtcGxhdGUoKQogICAgIFY4UGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOFBlcklzb2xhdGVE
YXRhOjpjdXJyZW50KCk7CiAgICAgVjhQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJh
dG9yIHJlc3VsdCA9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYg
KHJlc3VsdCAhPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4g
cmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6
OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlv
blRlbXBsYXRlPiB0ZW1wbCA9IGNyZWF0ZVJhd1RlbXBsYXRlKCk7CkBAIC0yMjU4LDcgKzIyNTgs
NyBAQCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0T2JqOjpHZXRU
ZW1wbGF0ZSgpCiAgICAgVjhQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4UGVySXNvbGF0ZURhdGE6
OmN1cnJlbnQoKTsKICAgICBWOFBlcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3Ig
cmVzdWx0ID0gZGF0YS0+dGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0
ICE9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNl
Y29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2Nv
cGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+
IHRlbXBsID0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9WOC9WOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZS5jcHAKaW5kZXggZjJmNGNiYTIxZjhkY2I2ZTI0NTA0ZmExNGVkMTllYmYyODQ0
NGNiMi4uZjQ1NTQ0ZTY2MmExMWIwMTU5MDcxMGMzZTJkYjM5ZDg4MGZjODk3MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAK
QEAgLTI2NCw3ICsyNjQsNyBAQCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4g
VjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpHZXRSYQogICAgIFY4UGVySXNv
bGF0ZURhdGEqIGRhdGEgPSBWOFBlcklzb2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhQZXJJ
c29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnJhd1RlbXBs
YXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT5yYXdUZW1wbGF0
ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJl
dHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwog
ICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9IGNyZWF0ZVJh
d1RlbXBsYXRlKCk7CkBAIC0yNzcsNyArMjc3LDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0
aW9uVGVtcGxhdGU+IFY4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6R2V0VGUK
ICAgICBWOFBlcklzb2xhdGVEYXRhKiBkYXRhID0gVjhQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgp
OwogICAgIFY4UGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBk
YXRhLT50ZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+
dGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAg
ICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVT
Y29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NV3JhcHBlcldvcmxkLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTVdyYXBwZXJXb3JsZC5jcHAKaW5kZXgg
ODU5ZTgzNmYyMzQwNGZkMjhiMDRjZWE1ZDNjN2ZkN2U0OTVhMWMxNC4uYTBhNjBkYmYxOGI5YWNj
M2I3YWRjMTMyNThiYTdjODAzYWRiZjcyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvRE9NV3JhcHBlcldvcmxkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9ET01XcmFwcGVyV29ybGQuY3BwCkBAIC04Miw3ICs4Miw3IEBAIHZvaWQgRE9NV3JhcHBl
cldvcmxkOjpkZWFsbG9jYXRlKERPTVdyYXBwZXJXb3JsZCogd29ybGQpCiAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIEFTU0VSVChpLT5z
ZWNvbmQgPT0gd29ybGQpOworICAgIEFTU0VSVChpLT52YWx1ZSA9PSB3b3JsZCk7CiAKICAgICBt
YXAucmVtb3ZlKGkpOwogICAgIGlzb2xhdGVkV29ybGRDb3VudC0tOwpAQCAtMTAwLDkgKzEwMCw5
IEBAIFBhc3NSZWZQdHI8RE9NV3JhcHBlcldvcmxkPiBET01XcmFwcGVyV29ybGQ6OmVuc3VyZUlz
b2xhdGVkV29ybGQoaW50IHdvcmxkSWQsIGluCiAgICAgZWxzZSB7CiAgICAgICAgIFdvcmxkTWFw
OjppdGVyYXRvciBpID0gbWFwLmZpbmQod29ybGRJZCk7CiAgICAgICAgIGlmIChpICE9IG1hcC5l
bmQoKSkgewotICAgICAgICAgICAgQVNTRVJUKGktPnNlY29uZC0+d29ybGRJZCgpID09IHdvcmxk
SWQpOwotICAgICAgICAgICAgQVNTRVJUKGktPnNlY29uZC0+ZXh0ZW5zaW9uR3JvdXAoKSA9PSBl
eHRlbnNpb25Hcm91cCk7Ci0gICAgICAgICAgICByZXR1cm4gaS0+c2Vjb25kOworICAgICAgICAg
ICAgQVNTRVJUKGktPnZhbHVlLT53b3JsZElkKCkgPT0gd29ybGRJZCk7CisgICAgICAgICAgICBB
U1NFUlQoaS0+dmFsdWUtPmV4dGVuc2lvbkdyb3VwKCkgPT0gZXh0ZW5zaW9uR3JvdXApOworICAg
ICAgICAgICAgcmV0dXJuIGktPnZhbHVlOwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9OUFY4T2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L05QVjhPYmplY3QuY3BwCmluZGV4IGViODU0ZGE5OGZmZDY2YzcyYjE5
ZDhkMmVmMGYyNzIwYjNmOWJjNDguLjhiNTZkYTZiZTFhNjk3NzhlZDkwNzM0MTkyOGFhMGVmMmIw
MjVmNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L05QVjhPYmplY3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L05QVjhPYmplY3QuY3BwCkBAIC04
Niw3ICs4Niw3IEBAIHN0YXRpYyB2b2lkIGZyZWVWOE5QT2JqZWN0KE5QT2JqZWN0KiBucE9iamVj
dCkKICAgICBpZiAoaW50IHY4T2JqZWN0SGFzaCA9IHY4TnBPYmplY3QtPnY4T2JqZWN0LT5HZXRJ
ZGVudGl0eUhhc2goKSkgewogICAgICAgICBWOE5QT2JqZWN0TWFwOjppdGVyYXRvciBpdGVyID0g
c3RhdGljVjhOUE9iamVjdE1hcCgpLT5maW5kKHY4T2JqZWN0SGFzaCk7CiAgICAgICAgIGlmIChp
dGVyICE9IHN0YXRpY1Y4TlBPYmplY3RNYXAoKS0+ZW5kKCkpIHsKLSAgICAgICAgICAgIFY4TlBP
YmplY3RWZWN0b3ImIG9iamVjdHMgPSBpdGVyLT5zZWNvbmQ7CisgICAgICAgICAgICBWOE5QT2Jq
ZWN0VmVjdG9yJiBvYmplY3RzID0gaXRlci0+dmFsdWU7CiAgICAgICAgICAgICBmb3IgKHNpemVf
dCBpbmRleCA9IDA7IGluZGV4IDwgb2JqZWN0cy5zaXplKCk7ICsraW5kZXgpIHsKICAgICAgICAg
ICAgICAgICBpZiAob2JqZWN0cy5hdChpbmRleCkgPT0gdjhOcE9iamVjdCkgewogICAgICAgICAg
ICAgICAgICAgICBvYmplY3RzLnJlbW92ZShpbmRleCk7CkBAIC0xNTgsNyArMTU4LDcgQEAgTlBP
YmplY3QqIG5wQ3JlYXRlVjhTY3JpcHRPYmplY3QoTlBQIG5wcCwgdjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiBvYmplY3QsIERPTVdpbmQKICAgICBBU1NFUlQodjhPYmplY3RIYXNoKTsKICAgICBWOE5Q
T2JqZWN0TWFwOjppdGVyYXRvciBpdGVyID0gc3RhdGljVjhOUE9iamVjdE1hcCgpLT5maW5kKHY4
T2JqZWN0SGFzaCk7CiAgICAgaWYgKGl0ZXIgIT0gc3RhdGljVjhOUE9iamVjdE1hcCgpLT5lbmQo
KSkgewotICAgICAgICBWOE5QT2JqZWN0VmVjdG9yJiBvYmplY3RzID0gaXRlci0+c2Vjb25kOwor
ICAgICAgICBWOE5QT2JqZWN0VmVjdG9yJiBvYmplY3RzID0gaXRlci0+dmFsdWU7CiAgICAgICAg
IGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBvYmplY3RzLnNpemUoKTsgKytpbmRleCkg
ewogICAgICAgICAgICAgVjhOUE9iamVjdCogdjhucE9iamVjdCA9IG9iamVjdHMuYXQoaW5kZXgp
OwogICAgICAgICAgICAgaWYgKHY4bnBPYmplY3QtPnJvb3RPYmplY3QgPT0gcm9vdCkgewpAQCAt
MTc1LDcgKzE3NSw3IEBAIE5QT2JqZWN0KiBucENyZWF0ZVY4U2NyaXB0T2JqZWN0KE5QUCBucHAs
IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0LCBET01XaW5kCiAgICAgdjhucE9iamVjdC0+
djhPYmplY3QgPSB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6TmV3KG9iamVjdCk7CiAgICAg
djhucE9iamVjdC0+cm9vdE9iamVjdCA9IHJvb3Q7CiAKLSAgICBpdGVyLT5zZWNvbmQuYXBwZW5k
KHY4bnBPYmplY3QpOworICAgIGl0ZXItPnZhbHVlLmFwcGVuZCh2OG5wT2JqZWN0KTsKIAogICAg
IHJldHVybiByZWludGVycHJldF9jYXN0PE5QT2JqZWN0Kj4odjhucE9iamVjdCk7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwCmluZGV4IDIx
MWJhOTQ3YTE3MjcxZmE2M2QzOTgxN2ZiNjhlYjlkYzA5NGExODQuLjQ2ZDljYzQzOGRlNmE2N2M1
MmJhNTdhOTA2MDEwMTk4NGJkMGMyNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwCkBAIC0xMTcsOCArMTE3LDggQEAgdm9pZCBTY3JpcHRD
b250cm9sbGVyOjpjbGVhclNjcmlwdE9iamVjdHMoKQogewogICAgIFBsdWdpbk9iamVjdE1hcDo6
aXRlcmF0b3IgaXQgPSBtX3BsdWdpbk9iamVjdHMuYmVnaW4oKTsKICAgICBmb3IgKDsgaXQgIT0g
bV9wbHVnaW5PYmplY3RzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIF9OUE5fVW5yZWdpc3Rlck9i
amVjdChpdC0+c2Vjb25kKTsKLSAgICAgICAgX05QTl9SZWxlYXNlT2JqZWN0KGl0LT5zZWNvbmQp
OworICAgICAgICBfTlBOX1VucmVnaXN0ZXJPYmplY3QoaXQtPnZhbHVlKTsKKyAgICAgICAgX05Q
Tl9SZWxlYXNlT2JqZWN0KGl0LT52YWx1ZSk7CiAgICAgfQogICAgIG1fcGx1Z2luT2JqZWN0cy5j
bGVhcigpOwogCkBAIC0xNDYsNyArMTQ2LDcgQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpyZXNl
dElzb2xhdGVkV29ybGRzKCkKIHsKICAgICBmb3IgKElzb2xhdGVkV29ybGRNYXA6Oml0ZXJhdG9y
IGl0ZXIgPSBtX2lzb2xhdGVkV29ybGRzLmJlZ2luKCk7CiAgICAgICAgICBpdGVyICE9IG1faXNv
bGF0ZWRXb3JsZHMuZW5kKCk7ICsraXRlcikgewotICAgICAgICBpdGVyLT5zZWNvbmQtPmRlc3Ry
b3lJc29sYXRlZFNoZWxsKCk7CisgICAgICAgIGl0ZXItPnZhbHVlLT5kZXN0cm95SXNvbGF0ZWRT
aGVsbCgpOwogICAgIH0KICAgICBtX2lzb2xhdGVkV29ybGRzLmNsZWFyKCk7CiAgICAgbV9pc29s
YXRlZFdvcmxkU2VjdXJpdHlPcmlnaW5zLmNsZWFyKCk7CkBAIC0zMjEsOSArMzIxLDkgQEAgVjhE
T01XaW5kb3dTaGVsbCogU2NyaXB0Q29udHJvbGxlcjo6ZW5zdXJlSXNvbGF0ZWRXb3JsZENvbnRl
eHQoaW50IHdvcmxkSWQsIGludAogICAgIGlmICh3b3JsZElkICE9IERPTVdyYXBwZXJXb3JsZDo6
dW5pbml0aWFsaXplZFdvcmxkSWQpIHsKICAgICAgICAgSXNvbGF0ZWRXb3JsZE1hcDo6aXRlcmF0
b3IgaXRlciA9IG1faXNvbGF0ZWRXb3JsZHMuZmluZCh3b3JsZElkKTsKICAgICAgICAgaWYgKGl0
ZXIgIT0gbV9pc29sYXRlZFdvcmxkcy5lbmQoKSkgewotICAgICAgICAgICAgQVNTRVJUKGl0ZXIt
PnNlY29uZC0+d29ybGQoKS0+d29ybGRJZCgpID09IHdvcmxkSWQpOwotICAgICAgICAgICAgQVNT
RVJUKGl0ZXItPnNlY29uZC0+d29ybGQoKS0+ZXh0ZW5zaW9uR3JvdXAoKSA9PSBleHRlbnNpb25H
cm91cCk7Ci0gICAgICAgICAgICByZXR1cm4gaXRlci0+c2Vjb25kOworICAgICAgICAgICAgQVNT
RVJUKGl0ZXItPnZhbHVlLT53b3JsZCgpLT53b3JsZElkKCkgPT0gd29ybGRJZCk7CisgICAgICAg
ICAgICBBU1NFUlQoaXRlci0+dmFsdWUtPndvcmxkKCktPmV4dGVuc2lvbkdyb3VwKCkgPT0gZXh0
ZW5zaW9uR3JvdXApOworICAgICAgICAgICAgcmV0dXJuIGl0ZXItPnZhbHVlOwogICAgICAgICB9
CiAgICAgfQogCkBAIC0zNDEsNyArMzQxLDcgQEAgVjhET01XaW5kb3dTaGVsbCogU2NyaXB0Q29u
dHJvbGxlcjo6ZXhpc3RpbmdXaW5kb3dTaGVsbEludGVybmFsKERPTVdyYXBwZXJXb3JsZCoKICAg
ICAgICAgcmV0dXJuIG1fd2luZG93U2hlbGwuZ2V0KCk7CiAKICAgICBJc29sYXRlZFdvcmxkTWFw
OjppdGVyYXRvciBpdGVyID0gbV9pc29sYXRlZFdvcmxkcy5maW5kKHdvcmxkLT53b3JsZElkKCkp
OwotICAgIHJldHVybiBpdGVyID09IG1faXNvbGF0ZWRXb3JsZHMuZW5kKCkgPyAwIDogaXRlci0+
c2Vjb25kOworICAgIHJldHVybiBpdGVyID09IG1faXNvbGF0ZWRXb3JsZHMuZW5kKCkgPyAwIDog
aXRlci0+dmFsdWU7CiB9CiAKIFY4RE9NV2luZG93U2hlbGwqIFNjcmlwdENvbnRyb2xsZXI6Ondp
bmRvd1NoZWxsKERPTVdyYXBwZXJXb3JsZCogd29ybGQpCkBAIC0zNzEsNyArMzcxLDcgQEAgdm9p
ZCBTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZChpbnQgd29ybGRJRCwg
Y29uc3QgVmVjdG9yPFNjcmlwdFMKICAgICAgICAgaWYgKHdvcmxkSUQgIT0gRE9NV3JhcHBlcldv
cmxkOjp1bmluaXRpYWxpemVkV29ybGRJZCkgewogICAgICAgICAgICAgSXNvbGF0ZWRXb3JsZFNl
Y3VyaXR5T3JpZ2luTWFwOjppdGVyYXRvciBzZWN1cml0eU9yaWdpbkl0ZXIgPSBtX2lzb2xhdGVk
V29ybGRTZWN1cml0eU9yaWdpbnMuZmluZCh3b3JsZElEKTsKICAgICAgICAgICAgIGlmIChzZWN1
cml0eU9yaWdpbkl0ZXIgIT0gbV9pc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW5zLmVuZCgpKQot
ICAgICAgICAgICAgICAgIGlzb2xhdGVkV29ybGRTaGVsbC0+c2V0SXNvbGF0ZWRXb3JsZFNlY3Vy
aXR5T3JpZ2luKHNlY3VyaXR5T3JpZ2luSXRlci0+c2Vjb25kKTsKKyAgICAgICAgICAgICAgICBp
c29sYXRlZFdvcmxkU2hlbGwtPnNldElzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbihzZWN1cml0
eU9yaWdpbkl0ZXItPnZhbHVlKTsKICAgICAgICAgfQogCiAgICAgICAgIGlzb2xhdGVkV29ybGRT
aGVsbC0+aW5pdGlhbGl6ZUlmTmVlZGVkKCk7CkBAIC00MTEsNyArNDExLDcgQEAgdm9pZCBTY3Jp
cHRDb250cm9sbGVyOjpzZXRJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4oaW50IHdvcmxkSUQs
IFBhc3NSZWZQdHI8U2UKICAgICBtX2lzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbnMuc2V0KHdv
cmxkSUQsIHNlY3VyaXR5T3JpZ2luKTsKICAgICBJc29sYXRlZFdvcmxkTWFwOjppdGVyYXRvciBp
dGVyID0gbV9pc29sYXRlZFdvcmxkcy5maW5kKHdvcmxkSUQpOwogICAgIGlmIChpdGVyICE9IG1f
aXNvbGF0ZWRXb3JsZHMuZW5kKCkpCi0gICAgICAgIGl0ZXItPnNlY29uZC0+c2V0SXNvbGF0ZWRX
b3JsZFNlY3VyaXR5T3JpZ2luKHNlY3VyaXR5T3JpZ2luKTsKKyAgICAgICAgaXRlci0+dmFsdWUt
PnNldElzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbihzZWN1cml0eU9yaWdpbik7CiB9CiAKIFRl
eHRQb3NpdGlvbiBTY3JpcHRDb250cm9sbGVyOjpldmVudEhhbmRsZXJQb3NpdGlvbigpIGNvbnN0
CkBAIC01NDQsOCArNTQ0LDggQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpjbGVhbnVwU2NyaXB0
T2JqZWN0c0ZvclBsdWdpbihXaWRnZXQqIG5hdGl2ZUhhbmRsZSkKICAgICBQbHVnaW5PYmplY3RN
YXA6Oml0ZXJhdG9yIGl0ID0gbV9wbHVnaW5PYmplY3RzLmZpbmQobmF0aXZlSGFuZGxlKTsKICAg
ICBpZiAoaXQgPT0gbV9wbHVnaW5PYmplY3RzLmVuZCgpKQogICAgICAgICByZXR1cm47Ci0gICAg
X05QTl9VbnJlZ2lzdGVyT2JqZWN0KGl0LT5zZWNvbmQpOwotICAgIF9OUE5fUmVsZWFzZU9iamVj
dChpdC0+c2Vjb25kKTsKKyAgICBfTlBOX1VucmVnaXN0ZXJPYmplY3QoaXQtPnZhbHVlKTsKKyAg
ICBfTlBOX1JlbGVhc2VPYmplY3QoaXQtPnZhbHVlKTsKICAgICBtX3BsdWdpbk9iamVjdHMucmVt
b3ZlKGl0KTsKIH0KIApAQCAtNjY0LDcgKzY2NCw3IEBAIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6
Y29sbGVjdElzb2xhdGVkQ29udGV4dHMoVmVjdG9yPHN0ZDo6cGFpcjxTY3JpcHRTdGF0ZSosIFNl
CiB7CiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIGZvciAoSXNvbGF0ZWRX
b3JsZE1hcDo6aXRlcmF0b3IgaXQgPSBtX2lzb2xhdGVkV29ybGRzLmJlZ2luKCk7IGl0ICE9IG1f
aXNvbGF0ZWRXb3JsZHMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgVjhET01XaW5kb3dTaGVsbCog
aXNvbGF0ZWRXb3JsZFNoZWxsID0gaXQtPnNlY29uZDsKKyAgICAgICAgVjhET01XaW5kb3dTaGVs
bCogaXNvbGF0ZWRXb3JsZFNoZWxsID0gaXQtPnZhbHVlOwogICAgICAgICBpZiAoIWlzb2xhdGVk
V29ybGRTaGVsbC0+aXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2luKCkpCiAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gdjhDb250ZXh0ID0gaXNv
bGF0ZWRXb3JsZFNoZWxsLT5jb250ZXh0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAppbmRleCA0M2NlZmY0ZWI2NWZiMDQy
NjNmNjY3ZTYwZGFlZjllYmU3NjJmZmVmLi40MTczMWMxNDJjZDg0ZTQ1NWRjOGI5MmE1NjNlNjgz
MjcyNGVkZGI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxp
emVkU2NyaXB0VmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Nlcmlh
bGl6ZWRTY3JpcHRWYWx1ZS5jcHAKQEAgLTEwOCw3ICsxMDgsNyBAQCBwdWJsaWM6CiAgICAgewog
ICAgICAgICB0eXBlbmFtZSBIYW5kbGVUb1Q6Oml0ZXJhdG9yIHJlc3VsdCA9IG1fbWFwLmZpbmQo
KmhhbmRsZSk7CiAgICAgICAgIGlmIChyZXN1bHQgIT0gbV9tYXAuZW5kKCkpIHsKLSAgICAgICAg
ICAgICp2YWx1ZU91dCA9IHJlc3VsdC0+c2Vjb25kOworICAgICAgICAgICAgKnZhbHVlT3V0ID0g
cmVzdWx0LT52YWx1ZTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1Y4RE9NTWFwLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTU1hcC5oCmluZGV4
IGE3NTk4YzZjNWU4NmNkNWM4YWFkMmI0YzNjNTVkZmJjOTljN2RjMzkuLjdhNjE0M2VkMWI1MjNi
NzU1Y2M2MWFkZjI0M2U0MWUyNmM2OWY3YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1Y4RE9NTWFwLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhE
T01NYXAuaApAQCAtMTEwLDcgKzExMCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
Ym9vbCByZW1vdmVJZlByZXNlbnQoS2V5VHlwZSoga2V5LCB2ODo6UGVyc2lzdGVudDxWYWx1ZVR5
cGU+IHZhbHVlKQogICAgICAgICB7CiAgICAgICAgICAgICB0eXBlbmFtZSBIYXNoTWFwPEtleVR5
cGUqLCBWYWx1ZVR5cGUqPjo6aXRlcmF0b3IgaXQgPSBtX21hcC5maW5kKGtleSk7Ci0gICAgICAg
ICAgICBpZiAoaXQgPT0gbV9tYXAuZW5kKCkgfHwgaXQtPnNlY29uZCAhPSAqdmFsdWUpCisgICAg
ICAgICAgICBpZiAoaXQgPT0gbV9tYXAuZW5kKCkgfHwgaXQtPnZhbHVlICE9ICp2YWx1ZSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgIG1fbWFwLnJlbW92ZShp
dCk7CkBAIC0xMzAsNyArMTMwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAg
dmlzaXRvci0+c3RhcnRNYXAoKTsKICAgICAgICAgICAgIHR5cGVuYW1lIEhhc2hNYXA8S2V5VHlw
ZSosIFZhbHVlVHlwZSo+OjppdGVyYXRvciBpdCA9IG1fbWFwLmJlZ2luKCk7CiAgICAgICAgICAg
ICBmb3IgKDsgaXQgIT0gbV9tYXAuZW5kKCk7ICsraXQpCi0gICAgICAgICAgICAgICAgdmlzaXRv
ci0+dmlzaXRET01XcmFwcGVyKHN0b3JlLCBpdC0+Zmlyc3QsIHY4OjpQZXJzaXN0ZW50PFZhbHVl
VHlwZT4oaXQtPnNlY29uZCkpOworICAgICAgICAgICAgICAgIHZpc2l0b3ItPnZpc2l0RE9NV3Jh
cHBlcihzdG9yZSwgaXQtPmtleSwgdjg6OlBlcnNpc3RlbnQ8VmFsdWVUeXBlPihpdC0+dmFsdWUp
KTsKICAgICAgICAgICAgIHZpc2l0b3ItPmVuZE1hcCgpOwogICAgICAgICB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UGVyQ29udGV4dERhdGEuY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQZXJDb250ZXh0RGF0YS5jcHAKaW5kZXggM2FlOWZj
Zjk2MzRhMjI0OTMwNGQ1ZmExM2U0ZGRkNzVhM2U1NDA1OS4uNjI1NDM5ZGEyM2QwNTIwMjQ1YTRh
OWQxZmQzNmYwNjJlMDkzYWNhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhQZXJDb250ZXh0RGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
VjhQZXJDb250ZXh0RGF0YS5jcHAKQEAgLTUzLDcgKzUzLDcgQEAgdm9pZCBWOFBlckNvbnRleHRE
YXRhOjpkaXNwb3NlKCkKICAgICB7CiAgICAgICAgIFdyYXBwZXJCb2lsZXJwbGF0ZU1hcDo6aXRl
cmF0b3IgaXQgPSBtX3dyYXBwZXJCb2lsZXJwbGF0ZXMuYmVnaW4oKTsKICAgICAgICAgZm9yICg7
IGl0ICE9IG1fd3JhcHBlckJvaWxlcnBsYXRlcy5lbmQoKTsgKytpdCkgewotICAgICAgICAgICAg
djg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlciA9IGl0LT5zZWNvbmQ7CisgICAgICAg
ICAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyID0gaXQtPnZhbHVlOwogICAg
ICAgICAgICAgd3JhcHBlci5EaXNwb3NlKCk7CiAgICAgICAgIH0KICAgICAgICAgbV93cmFwcGVy
Qm9pbGVycGxhdGVzLmNsZWFyKCk7CkBAIC02Miw3ICs2Miw3IEBAIHZvaWQgVjhQZXJDb250ZXh0
RGF0YTo6ZGlzcG9zZSgpCiAgICAgewogICAgICAgICBDb25zdHJ1Y3Rvck1hcDo6aXRlcmF0b3Ig
aXQgPSBtX2NvbnN0cnVjdG9yTWFwLmJlZ2luKCk7CiAgICAgICAgIGZvciAoOyBpdCAhPSBtX2Nv
bnN0cnVjdG9yTWFwLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgICAgICB2ODo6UGVyc2lzdGVudDx2
ODo6RnVuY3Rpb24+IHdyYXBwZXIgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgdjg6OlBlcnNp
c3RlbnQ8djg6OkZ1bmN0aW9uPiB3cmFwcGVyID0gaXQtPnZhbHVlOwogICAgICAgICAgICAgd3Jh
cHBlci5EaXNwb3NlKCk7CiAgICAgICAgIH0KICAgICAgICAgbV9jb25zdHJ1Y3Rvck1hcC5jbGVh
cigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvbnBydW50aW1lLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L25wcnVudGltZS5jcHAKaW5kZXggOGQ4MGNm
OTMzMTg2ZTg1NDdjMTg1MTgzZDdlNzQ4NGJjZTFlODRhMy4uMmIwMzY3Y2QxNWYyYTRmYjExM2Q0
Y2MwYmY3NjdlYzhjZjFiMGE1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvbnBydW50aW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ucHJ1bnRp
bWUuY3BwCkBAIC0xNjQsNyArMTY0LDcgQEAgTlBJZGVudGlmaWVyIF9OUE5fR2V0U3RyaW5nSWRl
bnRpZmllcihjb25zdCBOUFVURjgqIG5hbWUpCiAgICAgICAgIFN0cmluZ0lkZW50aWZpZXJNYXAq
IGlkZW50TWFwID0gZ2V0U3RyaW5nSWRlbnRpZmllck1hcCgpOwogICAgICAgICBTdHJpbmdJZGVu
dGlmaWVyTWFwOjppdGVyYXRvciBpdGVyID0gaWRlbnRNYXAtPmZpbmQoa2V5KTsKICAgICAgICAg
aWYgKGl0ZXIgIT0gaWRlbnRNYXAtPmVuZCgpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PE5QSWRlbnRpZmllcj4oaXRlci0+c2Vjb25kKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxOUElkZW50aWZpZXI+KGl0ZXItPnZhbHVlKTsKIAogICAgICAgICBzaXplX3QgbmFt
ZUxlbiA9IGtleS5tX2xlbmd0aDsKIApAQCAtMjExLDcgKzIxMSw3IEBAIE5QSWRlbnRpZmllciBf
TlBOX0dldEludElkZW50aWZpZXIoaW50MzJfdCBpbnRJZCkKICAgICBJbnRJZGVudGlmaWVyTWFw
KiBpZGVudE1hcCA9IGdldEludElkZW50aWZpZXJNYXAoKTsKICAgICBJbnRJZGVudGlmaWVyTWFw
OjppdGVyYXRvciBpdGVyID0gaWRlbnRNYXAtPmZpbmQoaW50SWQpOwogICAgIGlmIChpdGVyICE9
IGlkZW50TWFwLT5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PE5QSWRlbnRpZmll
cj4oaXRlci0+c2Vjb25kKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PE5QSWRlbnRpZmll
cj4oaXRlci0+dmFsdWUpOwogCiAgICAgLy8gV2UgbmV2ZXIgcmVsZWFzZSBpZGVudGlmaWVycywg
c28gdGhpcyBkaWN0aW9uYXJ5IHdpbGwgZ3Jvdy4KICAgICBQcml2YXRlSWRlbnRpZmllciogaWRl
bnRpZmllciA9IHJlaW50ZXJwcmV0X2Nhc3Q8UHJpdmF0ZUlkZW50aWZpZXIqPihtYWxsb2Moc2l6
ZW9mKFByaXZhdGVJZGVudGlmaWVyKSkpOwpAQCAtMzg4LDcgKzM4OCw3IEBAIHZvaWQgX05QTl9S
ZWdpc3Rlck9iamVjdChOUE9iamVjdCogbnBPYmplY3QsIE5QT2JqZWN0KiBvd25lcikKICAgICAg
ICAgTlBPYmplY3RNYXA6Oml0ZXJhdG9yIG93bmVyRW50cnkgPSBsaXZlT2JqZWN0TWFwKCkuZmlu
ZChvd25lcik7CiAgICAgICAgIE5QT2JqZWN0KiBwYXJlbnQgPSAwOwogICAgICAgICBpZiAobGl2
ZU9iamVjdE1hcCgpLmVuZCgpICE9IG93bmVyRW50cnkpCi0gICAgICAgICAgICBwYXJlbnQgPSBv
d25lckVudHJ5LT5zZWNvbmQ7CisgICAgICAgICAgICBwYXJlbnQgPSBvd25lckVudHJ5LT52YWx1
ZTsKIAogICAgICAgICBpZiAocGFyZW50KQogICAgICAgICAgICAgb3duZXIgPSBwYXJlbnQ7CkBA
IC00MDgsNyArNDA4LDcgQEAgdm9pZCBfTlBOX1VucmVnaXN0ZXJPYmplY3QoTlBPYmplY3QqIG5w
T2JqZWN0KQogCiAgICAgTlBPYmplY3QqIG93bmVyID0gMDsKICAgICBpZiAobGl2ZU9iamVjdE1h
cCgpLmZpbmQobnBPYmplY3QpICE9IGxpdmVPYmplY3RNYXAoKS5lbmQoKSkKLSAgICAgICAgb3du
ZXIgPSBsaXZlT2JqZWN0TWFwKCkuZmluZChucE9iamVjdCktPnNlY29uZDsKKyAgICAgICAgb3du
ZXIgPSBsaXZlT2JqZWN0TWFwKCkuZmluZChucE9iamVjdCktPnZhbHVlOwogCiAgICAgaWYgKCFv
d25lcikgewogICAgICAgICAvLyBVbnJlZ2lzdGVyaW5nIGEgb3duZXIgb2JqZWN0OyBhbHNvIHVu
cmVnaXN0ZXIgaXQncyBkZXNjZW5kYW50cy4KQEAgLTQ0Myw3ICs0NDMsNyBAQCB2b2lkIF9OUE5f
VW5yZWdpc3Rlck9iamVjdChOUE9iamVjdCogbnBPYmplY3QpCiAgICAgfSBlbHNlIHsKICAgICAg
ICAgTlBSb290T2JqZWN0TWFwOjppdGVyYXRvciBvd25lckVudHJ5ID0gcm9vdE9iamVjdE1hcCgp
LmZpbmQob3duZXIpOwogICAgICAgICBpZiAob3duZXJFbnRyeSAhPSByb290T2JqZWN0TWFwKCku
ZW5kKCkpIHsKLSAgICAgICAgICAgIE5QT2JqZWN0U2V0KiBsaXN0ID0gb3duZXJFbnRyeS0+c2Vj
b25kOworICAgICAgICAgICAgTlBPYmplY3RTZXQqIGxpc3QgPSBvd25lckVudHJ5LT52YWx1ZTsK
ICAgICAgICAgICAgIEFTU0VSVChsaXN0LT5maW5kKG5wT2JqZWN0KSAhPSBsaXN0LT5lbmQoKSk7
CiAgICAgICAgICAgICBsaXN0LT5yZW1vdmUobnBPYmplY3QpOwogICAgICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvSWRlbnRpZmllclJlcC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9icmlkZ2UvSWRlbnRpZmllclJlcC5jcHAKaW5kZXggZWJhNWQ1M2E5MWNlYTkzNmE0M2Qz
NTAwYjkyOWUyOGFhZjVjMjM0MS4uNTlhZjU0OWZiOWRkMzQ0MGQyYmQ4NzY2ZDdjMzBhNzc0ZDI4
YmY4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL0lkZW50aWZpZXJSZXAuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9JZGVudGlmaWVyUmVwLmNwcApAQCAtNjgsMTMg
KzY4LDEzIEBAIElkZW50aWZpZXJSZXAqIElkZW50aWZpZXJSZXA6OmdldChpbnQgaW50SUQpCiAg
ICAgCiAgICAgSW50SWRlbnRpZmllck1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IGludElkZW50aWZp
ZXJNYXAoKS5hZGQoaW50SUQsIDApOwogICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkgewotICAg
ICAgICBBU1NFUlQoIXJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKLSAgICAgICAgcmVzdWx0Lml0
ZXJhdG9yLT5zZWNvbmQgPSBuZXcgSWRlbnRpZmllclJlcChpbnRJRCk7CisgICAgICAgIEFTU0VS
VCghcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFs
dWUgPSBuZXcgSWRlbnRpZmllclJlcChpbnRJRCk7CiAgICAgICAgIAotICAgICAgICBpZGVudGlm
aWVyU2V0KCkuYWRkKHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKKyAgICAgICAgaWRlbnRpZmll
clNldCgpLmFkZChyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKICAgICB9CiAgICAgCi0gICAgcmV0
dXJuIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3It
PnZhbHVlOwogfQogCiB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPFN0cmluZ0ltcGw+LCBJZGVudGlm
aWVyUmVwKj4gU3RyaW5nSWRlbnRpZmllck1hcDsKQEAgLTk0LDEzICs5NCwxMyBAQCBJZGVudGlm
aWVyUmVwKiBJZGVudGlmaWVyUmVwOjpnZXQoY29uc3QgY2hhciogbmFtZSkKICAgICBTdHJpbmcg
c3RyaW5nID0gU3RyaW5nOjpmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayhuYW1lLCBzdHJsZW4o
bmFtZSkpOwogICAgIFN0cmluZ0lkZW50aWZpZXJNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBzdHJp
bmdJZGVudGlmaWVyTWFwKCkuYWRkKHN0cmluZy5pbXBsKCksIDApOwogICAgIGlmIChyZXN1bHQu
aXNOZXdFbnRyeSkgewotICAgICAgICBBU1NFUlQoIXJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsK
LSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBuZXcgSWRlbnRpZmllclJlcChuYW1l
KTsKKyAgICAgICAgQVNTRVJUKCFyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKKyAgICAgICAgcmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZSA9IG5ldyBJZGVudGlmaWVyUmVwKG5hbWUpOwogICAgICAgICAK
LSAgICAgICAgaWRlbnRpZmllclNldCgpLmFkZChyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7Cisg
ICAgICAgIGlkZW50aWZpZXJTZXQoKS5hZGQocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CiAgICAg
fQogICAgIAotICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICByZXR1cm4g
cmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIAogYm9vbCBJZGVudGlmaWVyUmVwOjppc1ZhbGlk
KElkZW50aWZpZXJSZXAqIGlkZW50aWZpZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
cmlkZ2UvTlBfanNvYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL05QX2pzb2JqZWN0
LmNwcAppbmRleCBjMDJjZWVlNDZiNzM2ZDgyZDYxZjA3ODAwN2ZhYzJlNGUzODQyY2M2Li4wMmJj
YTgzNTZlODUwN2ExZWNhMmEzZDhhNDkxMjVkYzk0ZWQzNjBkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9icmlkZ2UvTlBfanNvYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JyaWRn
ZS9OUF9qc29iamVjdC5jcHAKQEAgLTY0LDggKzY0LDggQEAgcHVibGljOgogICAgICAgICAgICAg
aXRlciA9IG1fbWFwLmFkZChyb290T2JqZWN0LCBKU1RvTlBPYmplY3RNYXAoKSkuaXRlcmF0b3I7
CiAgICAgICAgIH0KIAotICAgICAgICBBU1NFUlQoaXRlci0+c2Vjb25kLmZpbmQoanNPYmplY3Qp
ID09IGl0ZXItPnNlY29uZC5lbmQoKSk7Ci0gICAgICAgIGl0ZXItPnNlY29uZC5hZGQoanNPYmpl
Y3QsIG5wT2JqZWN0KTsKKyAgICAgICAgQVNTRVJUKGl0ZXItPnZhbHVlLmZpbmQoanNPYmplY3Qp
ID09IGl0ZXItPnZhbHVlLmVuZCgpKTsKKyAgICAgICAgaXRlci0+dmFsdWUuYWRkKGpzT2JqZWN0
LCBucE9iamVjdCk7CiAgICAgfQogCiAgICAgdm9pZCByZW1vdmUoUm9vdE9iamVjdCogcm9vdE9i
amVjdCkKQEAgLTc5LDkgKzc5LDkgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgSGFzaE1hcDxS
b290T2JqZWN0KiwgSlNUb05QT2JqZWN0TWFwPjo6aXRlcmF0b3IgaXRlciA9IG1fbWFwLmZpbmQo
cm9vdE9iamVjdCk7CiAgICAgICAgIEFTU0VSVChpdGVyICE9IG1fbWFwLmVuZCgpKTsKLSAgICAg
ICAgQVNTRVJUKGl0ZXItPnNlY29uZC5maW5kKGpzT2JqZWN0KSAhPSBpdGVyLT5zZWNvbmQuZW5k
KCkpOworICAgICAgICBBU1NFUlQoaXRlci0+dmFsdWUuZmluZChqc09iamVjdCkgIT0gaXRlci0+
dmFsdWUuZW5kKCkpOwogCi0gICAgICAgIGl0ZXItPnNlY29uZC5yZW1vdmUoanNPYmplY3QpOwor
ICAgICAgICBpdGVyLT52YWx1ZS5yZW1vdmUoanNPYmplY3QpOwogICAgIH0KIAogcHJpdmF0ZToK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFDbGFzc0pTQy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhQ2xhc3NKU0MuY3BwCmluZGV4
IGFlYjQwMjBiZDg0YTIzN2I5ZWMxYzBhYjc2YTlmNmZmYjZlOGI5NzUuLmE2MDgwMWU1NjI5NGM3
MmY4ZTJmNzQ2NmU0NDJiNjFjZGQ4NGVlZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jy
aWRnZS9qbmkvanNjL0phdmFDbGFzc0pTQy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYnJpZGdl
L2puaS9qc2MvSmF2YUNsYXNzSlNDLmNwcApAQCAtMTA3LDcgKzEwNyw3IEBAIEphdmFDbGFzczo6
fkphdmFDbGFzcygpCiAKICAgICBNZXRob2RMaXN0TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBt
X21ldGhvZHMuZW5kKCk7CiAgICAgZm9yIChNZXRob2RMaXN0TWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IG1fbWV0aG9kcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgY29uc3Qg
TWV0aG9kTGlzdCogbWV0aG9kTGlzdCA9IGl0LT5zZWNvbmQ7CisgICAgICAgIGNvbnN0IE1ldGhv
ZExpc3QqIG1ldGhvZExpc3QgPSBpdC0+dmFsdWU7CiAgICAgICAgIGRlbGV0ZUFsbFZhbHVlcygq
bWV0aG9kTGlzdCk7CiAgICAgICAgIGRlbGV0ZSBtZXRob2RMaXN0OwogICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX3Jvb3QuY3BwIGIvU291cmNlL1dlYkNv
cmUvYnJpZGdlL3J1bnRpbWVfcm9vdC5jcHAKaW5kZXggOWI2MjI0YThiNTYwZmM1ZTYwZTE1ODll
NTc5ZDE0MjU0OTcyOTEzNC4uNzRkODMxOTIxZjIxOWI4YjczMzM2NzU5MTVlNDFiZGMxN2RkZmRj
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfcm9vdC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfcm9vdC5jcHAKQEAgLTEwNSw3ICsxMDUs
NyBAQCB2b2lkIFJvb3RPYmplY3Q6OmludmFsaWRhdGUoKQogICAgIHsKICAgICAgICAgSGFzaE1h
cDxSdW50aW1lT2JqZWN0KiwgSlNDOjpXZWFrPFJ1bnRpbWVPYmplY3Q+ID46Oml0ZXJhdG9yIGVu
ZCA9IG1fcnVudGltZU9iamVjdHMuZW5kKCk7CiAgICAgICAgIGZvciAoSGFzaE1hcDxSdW50aW1l
T2JqZWN0KiwgSlNDOjpXZWFrPFJ1bnRpbWVPYmplY3Q+ID46Oml0ZXJhdG9yIGl0ID0gbV9ydW50
aW1lT2JqZWN0cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIFJ1bnRp
bWVPYmplY3QqIHJ1bnRpbWVPYmplY3QgPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAg
UnVudGltZU9iamVjdCogcnVudGltZU9iamVjdCA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAg
ICAgIGlmICghcnVudGltZU9iamVjdCkgLy8gU2tpcCB6b21iaWVzLgogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgcnVudGltZU9iamVjdC0+aW52YWxpZGF0ZSgpOwpAQCAt
MTI5LDcgKzEyOSw3IEBAIHZvaWQgUm9vdE9iamVjdDo6aW52YWxpZGF0ZSgpCiAKICAgICBQcm90
ZWN0Q291bnRTZXQ6Oml0ZXJhdG9yIGVuZCA9IG1fcHJvdGVjdENvdW50U2V0LmVuZCgpOwogICAg
IGZvciAoUHJvdGVjdENvdW50U2V0OjppdGVyYXRvciBpdCA9IG1fcHJvdGVjdENvdW50U2V0LmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgSlNDOjpnY1VucHJvdGVjdChpdC0+Zmly
c3QpOworICAgICAgICBKU0M6OmdjVW5wcm90ZWN0KGl0LT5rZXkpOwogICAgIG1fcHJvdGVjdENv
dW50U2V0LmNsZWFyKCk7CiAKICAgICByb290T2JqZWN0U2V0KCktPnJlbW92ZSh0aGlzKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYW52YXNWYWx1ZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTQ2FudmFzVmFsdWUuY3BwCmluZGV4IDhlY2M4MGMwOGU2YjE0MWZiYmEz
MGY5ZjllMzc5NjdiMTNhOTMzNTUuLmE2NzVhMGZjZmFlYzRhYTg4ODg1YWExYTZlMGMxMWZkZGQ3
YTMyNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYW52YXNWYWx1ZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbnZhc1ZhbHVlLmNwcApAQCAtNTMsMTQgKzUz
LDE0IEBAIHZvaWQgQ1NTQ2FudmFzVmFsdWU6OmNhbnZhc0NoYW5nZWQoSFRNTENhbnZhc0VsZW1l
bnQqLCBjb25zdCBGbG9hdFJlY3QmIGNoYW5nZWRSCiAgICAgSW50UmVjdCBpbWFnZUNoYW5nZVJl
Y3QgPSBlbmNsb3NpbmdJbnRSZWN0KGNoYW5nZWRSZWN0KTsKICAgICBSZW5kZXJPYmplY3RTaXpl
Q291bnRNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGNsaWVudHMoKS5lbmQoKTsKICAgICBmb3Ig
KFJlbmRlck9iamVjdFNpemVDb3VudE1hcDo6Y29uc3RfaXRlcmF0b3IgY3VyciA9IGNsaWVudHMo
KS5iZWdpbigpOyBjdXJyICE9IGVuZDsgKytjdXJyKQotICAgICAgICBjb25zdF9jYXN0PFJlbmRl
ck9iamVjdCo+KGN1cnItPmZpcnN0KS0+aW1hZ2VDaGFuZ2VkKHN0YXRpY19jYXN0PFdyYXBwZWRJ
bWFnZVB0cj4odGhpcyksICZpbWFnZUNoYW5nZVJlY3QpOworICAgICAgICBjb25zdF9jYXN0PFJl
bmRlck9iamVjdCo+KGN1cnItPmtleSktPmltYWdlQ2hhbmdlZChzdGF0aWNfY2FzdDxXcmFwcGVk
SW1hZ2VQdHI+KHRoaXMpLCAmaW1hZ2VDaGFuZ2VSZWN0KTsKIH0KIAogdm9pZCBDU1NDYW52YXNW
YWx1ZTo6Y2FudmFzUmVzaXplZChIVE1MQ2FudmFzRWxlbWVudCopCiB7CiAgICAgUmVuZGVyT2Jq
ZWN0U2l6ZUNvdW50TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBjbGllbnRzKCkuZW5kKCk7CiAg
ICAgZm9yIChSZW5kZXJPYmplY3RTaXplQ291bnRNYXA6OmNvbnN0X2l0ZXJhdG9yIGN1cnIgPSBj
bGllbnRzKCkuYmVnaW4oKTsgY3VyciAhPSBlbmQ7ICsrY3VycikKLSAgICAgICAgY29uc3RfY2Fz
dDxSZW5kZXJPYmplY3QqPihjdXJyLT5maXJzdCktPmltYWdlQ2hhbmdlZChzdGF0aWNfY2FzdDxX
cmFwcGVkSW1hZ2VQdHI+KHRoaXMpKTsKKyAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJPYmplY3Qq
PihjdXJyLT5rZXkpLT5pbWFnZUNoYW5nZWQoc3RhdGljX2Nhc3Q8V3JhcHBlZEltYWdlUHRyPih0
aGlzKSk7CiB9CiAKIHZvaWQgQ1NTQ2FudmFzVmFsdWU6OmNhbnZhc0Rlc3Ryb3llZChIVE1MQ2Fu
dmFzRWxlbWVudCogZWxlbWVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1ND
b21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1
dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKaW5kZXggNjhjODQ0OGI4MWVhODdlZmZkZGU5NzY5ODQx
MTg4ZjY4Mjc5MDhmMC4uNGNkMjlmNTYwZTIxNjI5ZGI0ZjZkNTdmMzg5YjM0ZmQ3MGRmYmE1OCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlv
bi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlv
bi5jcHAKQEAgLTEyOTksOCArMTI5OSw4IEBAIHN0YXRpYyBQYXNzUmVmUHRyPENTU1ZhbHVlPiBj
b3VudGVyVG9DU1NWYWx1ZShjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIENTU1Byb3BlCiAKICAg
ICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNl
cGFyYXRlZCgpOwogICAgIGZvciAoQ291bnRlckRpcmVjdGl2ZU1hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IG1hcC0+ZW5kKCk7ICsraXQpIHsKLSAgICAgICAgbGlz
dC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKGl0LT5maXJzdCwgQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19TVFJJTkcpKTsKLSAgICAgICAgc2hvcnQgbnVtYmVyID0gcHJvcGVydHlJ
RCA9PSBDU1NQcm9wZXJ0eUNvdW50ZXJJbmNyZW1lbnQgPyBpdC0+c2Vjb25kLmluY3JlbWVudFZh
bHVlKCkgOiBpdC0+c2Vjb25kLnJlc2V0VmFsdWUoKTsKKyAgICAgICAgbGlzdC0+YXBwZW5kKGNz
c1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKGl0LT5rZXksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
U1RSSU5HKSk7CisgICAgICAgIHNob3J0IG51bWJlciA9IHByb3BlcnR5SUQgPT0gQ1NTUHJvcGVy
dHlDb3VudGVySW5jcmVtZW50ID8gaXQtPnZhbHVlLmluY3JlbWVudFZhbHVlKCkgOiBpdC0+dmFs
dWUucmVzZXRWYWx1ZSgpOwogICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3Jl
YXRlVmFsdWUoKGRvdWJsZSludW1iZXIsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7
CiAgICAgfQogICAgIHJldHVybiBsaXN0LnJlbGVhc2UoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NDcm9zc2ZhZGVWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
Q3Jvc3NmYWRlVmFsdWUuY3BwCmluZGV4IGUzNDdlYmQwOWQzNmM3ZTA4YmYwM2I3YzYxNTE1YTMx
ZGRlNzMzZGUuLjMyMmY3YTg1ZTFjZDJhYmYyNDgyNDlkYjY0ODgwOTkwM2FhNzY2YmIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDcm9zc2ZhZGVWYWx1ZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0Nyb3NzZmFkZVZhbHVlLmNwcApAQCAtMTc5LDcgKzE3OSw3IEBA
IHZvaWQgQ1NTQ3Jvc3NmYWRlVmFsdWU6OmNyb3NzZmFkZUNoYW5nZWQoY29uc3QgSW50UmVjdCYp
CiB7CiAgICAgUmVuZGVyT2JqZWN0U2l6ZUNvdW50TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBj
bGllbnRzKCkuZW5kKCk7CiAgICAgZm9yIChSZW5kZXJPYmplY3RTaXplQ291bnRNYXA6OmNvbnN0
X2l0ZXJhdG9yIGN1cnIgPSBjbGllbnRzKCkuYmVnaW4oKTsgY3VyciAhPSBlbmQ7ICsrY3Vycikg
ewotICAgICAgICBSZW5kZXJPYmplY3QqIGNsaWVudCA9IGNvbnN0X2Nhc3Q8UmVuZGVyT2JqZWN0
Kj4oY3Vyci0+Zmlyc3QpOworICAgICAgICBSZW5kZXJPYmplY3QqIGNsaWVudCA9IGNvbnN0X2Nh
c3Q8UmVuZGVyT2JqZWN0Kj4oY3Vyci0+a2V5KTsKICAgICAgICAgY2xpZW50LT5pbWFnZUNoYW5n
ZWQoc3RhdGljX2Nhc3Q8V3JhcHBlZEltYWdlUHRyPih0aGlzKSk7CiAgICAgfQogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU291cmNlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5jcHAKaW5kZXggZGQ5MDRkMzdmYjk1NGU0NGRi
YTY1Mzg3NjczNTgzMTE5OGZhZDNkNy4uY2U0NTM2N2FjMzMyMzcyYTBmYjllYzhjNWE1MmZiOWYw
ODg5ZWRmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU291cmNl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuY3BwCkBAIC0x
MTQsNyArMTE0LDcgQEAgU2ltcGxlRm9udERhdGEqIENTU0ZvbnRGYWNlU291cmNlOjpnZXRGb250
RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmkKICAgICB1bnNpZ25lZCBoYXNo
S2V5ID0gKGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpICsgMSkgPDwgNiB8IGZv
bnREZXNjcmlwdGlvbi53aWR0aFZhcmlhbnQoKSA8PCA0CiAgICAgICAgICAgICAgICAgICAgICAg
IHwgKGZvbnREZXNjcmlwdGlvbi50ZXh0T3JpZW50YXRpb24oKSA9PSBUZXh0T3JpZW50YXRpb25V
cHJpZ2h0ID8gOCA6IDApIHwgKGZvbnREZXNjcmlwdGlvbi5vcmllbnRhdGlvbigpID09IFZlcnRp
Y2FsID8gNCA6IDApIHwgKHN5bnRoZXRpY0JvbGQgPyAyIDogMCkgfCAoc3ludGhldGljSXRhbGlj
ID8gMSA6IDApOwogCi0gICAgU2ltcGxlRm9udERhdGEqJiBjYWNoZWREYXRhID0gbV9mb250RGF0
YVRhYmxlLmFkZChoYXNoS2V5LCAwKS5pdGVyYXRvci0+c2Vjb25kOworICAgIFNpbXBsZUZvbnRE
YXRhKiYgY2FjaGVkRGF0YSA9IG1fZm9udERhdGFUYWJsZS5hZGQoaGFzaEtleSwgMCkuaXRlcmF0
b3ItPnZhbHVlOwogICAgIGlmIChjYWNoZWREYXRhKQogICAgICAgICByZXR1cm4gY2FjaGVkRGF0
YTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmNwcAppbmRleCBjYzVmZmEwNmNk
MGU1MDE0NjRjMDcxMDNhYmZkZGExYWY1YTNlYWNjLi4xNTE3Yjc2Y2FkNWVkYzVlZjBiZmE0NTE5
ZTlkYjlmMWU1MmNjMmY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNl
bGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmNwcApA
QCAtMjg1LDcgKzI4NSw3IEBAIHZvaWQgQ1NTRm9udFNlbGVjdG9yOjphZGRGb250RmFjZVJ1bGUo
Y29uc3QgU3R5bGVSdWxlRm9udEZhY2UqIGZvbnRGYWNlUnVsZSkKICAgICAgICAgaWYgKGZhbWls
eU5hbWUuaXNFbXB0eSgpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgT3duUHRy
PFZlY3RvcjxSZWZQdHI8Q1NTRm9udEZhY2U+ID4gPiYgZmFtaWx5Rm9udEZhY2VzID0gbV9mb250
RmFjZXMuYWRkKGZhbWlseU5hbWUsIG51bGxwdHIpLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAg
IE93blB0cjxWZWN0b3I8UmVmUHRyPENTU0ZvbnRGYWNlPiA+ID4mIGZhbWlseUZvbnRGYWNlcyA9
IG1fZm9udEZhY2VzLmFkZChmYW1pbHlOYW1lLCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CiAg
ICAgICAgIGlmICghZmFtaWx5Rm9udEZhY2VzKSB7CiAgICAgICAgICAgICBmYW1pbHlGb250RmFj
ZXMgPSBhZG9wdFB0cihuZXcgVmVjdG9yPFJlZlB0cjxDU1NGb250RmFjZT4gPik7CiAKQEAgLTQ4
NywxMyArNDg3LDEzIEBAIEZvbnREYXRhKiBDU1NGb250U2VsZWN0b3I6OmdldEZvbnREYXRhKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjCiAgICAgICAgIHJldHVybiBm
b250RGF0YUZvckdlbmVyaWNGYW1pbHkobV9kb2N1bWVudCwgZm9udERlc2NyaXB0aW9uLCBmYW1p
bHlOYW1lKTsKICAgICB9CiAKLSAgICBPd25QdHI8SGFzaE1hcDx1bnNpZ25lZCwgUmVmUHRyPENT
U1NlZ21lbnRlZEZvbnRGYWNlPiA+ID4mIHNlZ21lbnRlZEZvbnRGYWNlQ2FjaGUgPSBtX2ZvbnRz
LmFkZChmYW1pbHksIG51bGxwdHIpLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgT3duUHRyPEhhc2hN
YXA8dW5zaWduZWQsIFJlZlB0cjxDU1NTZWdtZW50ZWRGb250RmFjZT4gPiA+JiBzZWdtZW50ZWRG
b250RmFjZUNhY2hlID0gbV9mb250cy5hZGQoZmFtaWx5LCBudWxscHRyKS5pdGVyYXRvci0+dmFs
dWU7CiAgICAgaWYgKCFzZWdtZW50ZWRGb250RmFjZUNhY2hlKQogICAgICAgICBzZWdtZW50ZWRG
b250RmFjZUNhY2hlID0gYWRvcHRQdHIobmV3IEhhc2hNYXA8dW5zaWduZWQsIFJlZlB0cjxDU1NT
ZWdtZW50ZWRGb250RmFjZT4gPik7CiAKICAgICBGb250VHJhaXRzTWFzayB0cmFpdHNNYXNrID0g
Zm9udERlc2NyaXB0aW9uLnRyYWl0c01hc2soKTsKIAotICAgIFJlZlB0cjxDU1NTZWdtZW50ZWRG
b250RmFjZT4mIGZhY2UgPSBzZWdtZW50ZWRGb250RmFjZUNhY2hlLT5hZGQodHJhaXRzTWFzaywg
MCkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBSZWZQdHI8Q1NTU2VnbWVudGVkRm9udEZhY2U+JiBm
YWNlID0gc2VnbWVudGVkRm9udEZhY2VDYWNoZS0+YWRkKHRyYWl0c01hc2ssIDApLml0ZXJhdG9y
LT52YWx1ZTsKICAgICBpZiAoIWZhY2UpIHsKICAgICAgICAgZmFjZSA9IENTU1NlZ21lbnRlZEZv
bnRGYWNlOjpjcmVhdGUodGhpcyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NJbWFnZUdlbmVyYXRvclZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZUdl
bmVyYXRvclZhbHVlLmNwcAppbmRleCA2M2NiNDIyYTlmZjczM2Y4YmYwYWRhNjRmNTljNTQ1OTRi
YjYxNjc4Li5mYzJiYTY1ZmFkZmVlZDRlMGI2YmJhYWNjODRiODYwY2ZmMDE3ZThjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUuY3BwCkBAIC01Nyw3ICs1
Nyw3IEBAIHZvaWQgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6YWRkQ2xpZW50KFJlbmRlck9iamVj
dCogcmVuZGVyZXIsIGNvbnN0IEludFNpemUmIHNpCiAgICAgaWYgKGl0ID09IG1fY2xpZW50cy5l
bmQoKSkKICAgICAgICAgbV9jbGllbnRzLmFkZChyZW5kZXJlciwgU2l6ZUFuZENvdW50KHNpemUs
IDEpKTsKICAgICBlbHNlIHsKLSAgICAgICAgU2l6ZUFuZENvdW50JiBzaXplQ291bnQgPSBpdC0+
c2Vjb25kOworICAgICAgICBTaXplQW5kQ291bnQmIHNpemVDb3VudCA9IGl0LT52YWx1ZTsKICAg
ICAgICAgKytzaXplQ291bnQuY291bnQ7CiAgICAgfQogfQpAQCAtNjksNyArNjksNyBAQCB2b2lk
IENTU0ltYWdlR2VuZXJhdG9yVmFsdWU6OnJlbW92ZUNsaWVudChSZW5kZXJPYmplY3QqIHJlbmRl
cmVyKQogICAgIEFTU0VSVChpdCAhPSBtX2NsaWVudHMuZW5kKCkpOwogCiAgICAgSW50U2l6ZSBy
ZW1vdmVkSW1hZ2VTaXplOwotICAgIFNpemVBbmRDb3VudCYgc2l6ZUNvdW50ID0gaXQtPnNlY29u
ZDsKKyAgICBTaXplQW5kQ291bnQmIHNpemVDb3VudCA9IGl0LT52YWx1ZTsKICAgICBJbnRTaXpl
IHNpemUgPSBzaXplQ291bnQuc2l6ZTsKICAgICBpZiAoIXNpemUuaXNFbXB0eSgpKSB7CiAgICAg
ICAgIG1fc2l6ZXMucmVtb3ZlKHNpemUpOwpAQCAtODcsNyArODcsNyBAQCBJbWFnZSogQ1NTSW1h
Z2VHZW5lcmF0b3JWYWx1ZTo6Z2V0SW1hZ2UoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3Qg
SW50U2l6ZSYgcwogewogICAgIFJlbmRlck9iamVjdFNpemVDb3VudE1hcDo6aXRlcmF0b3IgaXQg
PSBtX2NsaWVudHMuZmluZChyZW5kZXJlcik7CiAgICAgaWYgKGl0ICE9IG1fY2xpZW50cy5lbmQo
KSkgewotICAgICAgICBTaXplQW5kQ291bnQmIHNpemVDb3VudCA9IGl0LT5zZWNvbmQ7CisgICAg
ICAgIFNpemVBbmRDb3VudCYgc2l6ZUNvdW50ID0gaXQtPnZhbHVlOwogICAgICAgICBJbnRTaXpl
IG9sZFNpemUgPSBzaXplQ291bnQuc2l6ZTsKICAgICAgICAgaWYgKG9sZFNpemUgIT0gc2l6ZSkg
ewogICAgICAgICAgICAgUmVmUHRyPENTU0ltYWdlR2VuZXJhdG9yVmFsdWU+IHByb3RlY3QodGhp
cyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VnbWVudGVkRm9udEZhY2Uu
Y3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmNwcAppbmRleCA5
ODM0MjU0NjkyNGY4NjQyYmVmNzAyMGJiMGViYzg2NDQxNzI1Y2JiLi4xYjc1MzRjMTNmOWJjMzlj
ZDBiMTEyNGIwYzY3NmZmODM0ZWU1YmI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTU2VnbWVudGVkRm9udEZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWdt
ZW50ZWRGb250RmFjZS5jcHAKQEAgLTEwNiw3ICsxMDYsNyBAQCBGb250RGF0YSogQ1NTU2VnbWVu
dGVkRm9udEZhY2U6OmdldEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2Ny
aXB0aQogICAgIEZvbnRUcmFpdHNNYXNrIGRlc2lyZWRUcmFpdHNNYXNrID0gZm9udERlc2NyaXB0
aW9uLnRyYWl0c01hc2soKTsKICAgICB1bnNpZ25lZCBoYXNoS2V5ID0gKChmb250RGVzY3JpcHRp
b24uY29tcHV0ZWRQaXhlbFNpemUoKSArIDEpIDw8IChGb250VHJhaXRzTWFza1dpZHRoICsgMSkp
IHwgKChmb250RGVzY3JpcHRpb24ub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCA/IDEgOiAwKSA8
PCBGb250VHJhaXRzTWFza1dpZHRoKSB8IGRlc2lyZWRUcmFpdHNNYXNrOwogCi0gICAgU2VnbWVu
dGVkRm9udERhdGEqJiBmb250RGF0YSA9IG1fZm9udERhdGFUYWJsZS5hZGQoaGFzaEtleSwgMCku
aXRlcmF0b3ItPnNlY29uZDsKKyAgICBTZWdtZW50ZWRGb250RGF0YSomIGZvbnREYXRhID0gbV9m
b250RGF0YVRhYmxlLmFkZChoYXNoS2V5LCAwKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKGZv
bnREYXRhKQogICAgICAgICByZXR1cm4gZm9udERhdGE7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VsZWN0
b3IuY3BwCmluZGV4IDVjMjYyNTZhOGE2OGMwNjUzNzA4MzMxMWU2ODRmMTYxMGI0YWEzYjcuLmRh
MjhhNGYyOTlkZTNjYWNjMjllZmU0YmViMmI3OTcxODAxZjFjODQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1NlbGVjdG9yLmNwcApAQCAtMzc3LDcgKzM3Nyw3IEBAIENTU1NlbGVjdG9yOjpQc2V1ZG9UeXBl
IENTU1NlbGVjdG9yOjpwYXJzZVBzZXVkb1R5cGUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKQog
ICAgICAgICByZXR1cm4gUHNldWRvVW5rbm93bjsKICAgICBIYXNoTWFwPEF0b21pY1N0cmluZ0lt
cGwqLCBDU1NTZWxlY3Rvcjo6UHNldWRvVHlwZT4qIG5hbWVUb1BzZXVkb1R5cGUgPSBuYW1lVG9Q
c2V1ZG9UeXBlTWFwKCk7CiAgICAgSGFzaE1hcDxBdG9taWNTdHJpbmdJbXBsKiwgQ1NTU2VsZWN0
b3I6OlBzZXVkb1R5cGU+OjppdGVyYXRvciBzbG90ID0gbmFtZVRvUHNldWRvVHlwZS0+ZmluZChu
YW1lLmltcGwoKSk7Ci0gICAgcmV0dXJuIHNsb3QgPT0gbmFtZVRvUHNldWRvVHlwZS0+ZW5kKCkg
PyBQc2V1ZG9Vbmtub3duIDogc2xvdC0+c2Vjb25kOworICAgIHJldHVybiBzbG90ID09IG5hbWVU
b1BzZXVkb1R5cGUtPmVuZCgpID8gUHNldWRvVW5rbm93biA6IHNsb3QtPnZhbHVlOwogfQogCiBi
b29sIENTU1NlbGVjdG9yOjppc1Vua25vd25Qc2V1ZG9UeXBlKGNvbnN0IEF0b21pY1N0cmluZyYg
bmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZVBvb2wuY3BwIGIv
U291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlUG9vbC5jcHAKaW5kZXggY2U3NTdiOTMzYjNmNGEz
MDJlODcxNjU2OGQwM2UwM2RiZjFiMDc2Yy4uYzE2ODk5MTlkMTZlZTE2ZjBlZTA3MzE5MTk5NmU5
N2M1YzhmYzkwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlUG9vbC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlUG9vbC5jcHAKQEAgLTc4LDggKzc4
LDggQEAgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NTVmFsdWVQb29sOjpjcmVhdGVD
b2xvclZhbHVlKHVuc2lnbmVkIHJnYlZhbHVlKQogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gZHVtbXlWYWx1ZTsKICAgICBDb2xvclZhbHVlQ2FjaGU6OkFkZFJlc3VsdCBlbnRyeSA9IG1f
Y29sb3JWYWx1ZUNhY2hlLmFkZChyZ2JWYWx1ZSwgZHVtbXlWYWx1ZSk7CiAgICAgaWYgKGVudHJ5
LmlzTmV3RW50cnkpCi0gICAgICAgIGVudHJ5Lml0ZXJhdG9yLT5zZWNvbmQgPSBDU1NQcmltaXRp
dmVWYWx1ZTo6Y3JlYXRlQ29sb3IocmdiVmFsdWUpOwotICAgIHJldHVybiBlbnRyeS5pdGVyYXRv
ci0+c2Vjb25kOworICAgICAgICBlbnRyeS5pdGVyYXRvci0+dmFsdWUgPSBDU1NQcmltaXRpdmVW
YWx1ZTo6Y3JlYXRlQ29sb3IocmdiVmFsdWUpOworICAgIHJldHVybiBlbnRyeS5pdGVyYXRvci0+
dmFsdWU7CiB9CiAKIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IENTU1ZhbHVlUG9vbDo6
Y3JlYXRlVmFsdWUoZG91YmxlIHZhbHVlLCBDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzIHR5
cGUpCkBAIC0xMTMsNyArMTEzLDcgQEAgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NT
VmFsdWVQb29sOjpjcmVhdGVWYWx1ZShkb3VibGUgdmFsdWUsIENTU1ByaW1pdGkKIAogUGFzc1Jl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NTVmFsdWVQb29sOjpjcmVhdGVGb250RmFtaWx5VmFs
dWUoY29uc3QgU3RyaW5nJiBmYW1pbHlOYW1lKQogewotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4mIHZhbHVlID0gbV9mb250RmFtaWx5VmFsdWVDYWNoZS5hZGQoZmFtaWx5TmFtZSwgMCku
aXRlcmF0b3ItPnNlY29uZDsKKyAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiB2YWx1ZSA9
IG1fZm9udEZhbWlseVZhbHVlQ2FjaGUuYWRkKGZhbWlseU5hbWUsIDApLml0ZXJhdG9yLT52YWx1
ZTsKICAgICBpZiAoIXZhbHVlKQogICAgICAgICB2YWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpj
cmVhdGUoZmFtaWx5TmFtZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpOwogICAgIHJl
dHVybiB2YWx1ZTsKQEAgLTEyNiw3ICsxMjYsNyBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4g
Q1NTVmFsdWVQb29sOjpjcmVhdGVGb250RmFjZVZhbHVlKGNvbnN0IEF0b21pY1N0cmluZyYgcwog
ICAgIGlmIChtX2ZvbnRGYWNlVmFsdWVDYWNoZS5zaXplKCkgPiBtYXhpbXVtRm9udEZhY2VDYWNo
ZVNpemUpCiAgICAgICAgIG1fZm9udEZhY2VWYWx1ZUNhY2hlLmNsZWFyKCk7CiAKLSAgICBSZWZQ
dHI8Q1NTVmFsdWVMaXN0PiYgdmFsdWUgPSBtX2ZvbnRGYWNlVmFsdWVDYWNoZS5hZGQoc3RyaW5n
LCAwKS5pdGVyYXRvci0+c2Vjb25kOworICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+JiB2YWx1ZSA9
IG1fZm9udEZhY2VWYWx1ZUNhY2hlLmFkZChzdHJpbmcsIDApLml0ZXJhdG9yLT52YWx1ZTsKICAg
ICBpZiAoIXZhbHVlKQogICAgICAgICB2YWx1ZSA9IENTU1BhcnNlcjo6cGFyc2VGb250RmFjZVZh
bHVlKHN0cmluZyk7CiAgICAgcmV0dXJuIHZhbHVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvY3NzL1Byb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uLmNwcAppbmRleCA2MDkzY2Y4MTQx
OWQwN2Q2ZmQyNzI4ZWE0NzI4MDJlYTUzYjNmNThjLi44ZmZmNjUzZmZkMGFjZWQzNzBkYTgwMTM3
ZjNjMWUzZmM5YzdhNWYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvUHJvcGVydHlT
ZXRDU1NTdHlsZURlY2xhcmF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvUHJvcGVy
dHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uLmNwcApAQCAtMzQ2LDcgKzM0Niw3IEBAIENTU1ZhbHVl
KiBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OmNsb25lQW5kQ2FjaGVGb3JDU1NPTShD
U1NWYWx1ZSogaW50ZXJuCiAgICAgaWYgKCFtX2Nzc29tQ1NTVmFsdWVDbG9uZXMpCiAgICAgICAg
IG1fY3Nzb21DU1NWYWx1ZUNsb25lcyA9IGFkb3B0UHRyKG5ldyBIYXNoTWFwPENTU1ZhbHVlKiwg
UmVmUHRyPENTU1ZhbHVlPiA+KTsKICAgICAKLSAgICBSZWZQdHI8Q1NTVmFsdWU+JiBjbG9uZWRW
YWx1ZSA9IG1fY3Nzb21DU1NWYWx1ZUNsb25lcy0+YWRkKGludGVybmFsVmFsdWUsIFJlZlB0cjxD
U1NWYWx1ZT4oKSkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBSZWZQdHI8Q1NTVmFsdWU+JiBjbG9u
ZWRWYWx1ZSA9IG1fY3Nzb21DU1NWYWx1ZUNsb25lcy0+YWRkKGludGVybmFsVmFsdWUsIFJlZlB0
cjxDU1NWYWx1ZT4oKSkuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghY2xvbmVkVmFsdWUpCiAg
ICAgICAgIGNsb25lZFZhbHVlID0gaW50ZXJuYWxWYWx1ZS0+Y2xvbmVGb3JDU1NPTSgpOwogICAg
IHJldHVybiBjbG9uZWRWYWx1ZS5nZXQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZUJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlci5jcHAK
aW5kZXggZWQwYTE1ZmJjM2ZkMGYyYTUxYmI3OTc3MmMwN2I5ZjQ0NjVkZDQ2ZS4uY2Y0YjIwN2Y2
ODJlNTgzYmMyOWYxMjEwM2QzNTUxZDhhZTdjNWYxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVp
bGRlci5jcHAKQEAgLTEwMTEsMTEgKzEwMTEsMTEgQEAgcHVibGljOgogICAgICAgICB0eXBlZGVm
IENvdW50ZXJEaXJlY3RpdmVNYXA6Oml0ZXJhdG9yIEl0ZXJhdG9yOwogICAgICAgICBJdGVyYXRv
ciBlbmQgPSBwYXJlbnRNYXAuZW5kKCk7CiAgICAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSBwYXJl
bnRNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBDb3VudGVyRGly
ZWN0aXZlcyYgZGlyZWN0aXZlcyA9IG1hcC5hZGQoaXQtPmZpcnN0LCBDb3VudGVyRGlyZWN0aXZl
cygpKS5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICAgICAgQ291bnRlckRpcmVjdGl2ZXMmIGRp
cmVjdGl2ZXMgPSBtYXAuYWRkKGl0LT5rZXksIENvdW50ZXJEaXJlY3RpdmVzKCkpLml0ZXJhdG9y
LT52YWx1ZTsKICAgICAgICAgICAgIGlmIChjb3VudGVyQmVoYXZpb3IgPT0gUmVzZXQpIHsKLSAg
ICAgICAgICAgICAgICBkaXJlY3RpdmVzLmluaGVyaXRSZXNldChpdC0+c2Vjb25kKTsKKyAgICAg
ICAgICAgICAgICBkaXJlY3RpdmVzLmluaGVyaXRSZXNldChpdC0+dmFsdWUpOwogICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBkaXJlY3RpdmVzLmluaGVyaXRJbmNyZW1lbnQo
aXQtPnNlY29uZCk7CisgICAgICAgICAgICAgICAgZGlyZWN0aXZlcy5pbmhlcml0SW5jcmVtZW50
KGl0LT52YWx1ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0xMDMyLDkg
KzEwMzIsOSBAQCBwdWJsaWM6CiAgICAgICAgIEl0ZXJhdG9yIGVuZCA9IG1hcC5lbmQoKTsKICAg
ICAgICAgZm9yIChJdGVyYXRvciBpdCA9IG1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCiAg
ICAgICAgICAgICBpZiAoY291bnRlckJlaGF2aW9yID09IFJlc2V0KQotICAgICAgICAgICAgICAg
IGl0LT5zZWNvbmQuY2xlYXJSZXNldCgpOworICAgICAgICAgICAgICAgIGl0LT52YWx1ZS5jbGVh
clJlc2V0KCk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgaXQtPnNlY29uZC5j
bGVhckluY3JlbWVudCgpOworICAgICAgICAgICAgICAgIGl0LT52YWx1ZS5jbGVhckluY3JlbWVu
dCgpOwogCiAgICAgICAgIGludCBsZW5ndGggPSBsaXN0ID8gbGlzdC0+bGVuZ3RoKCkgOiAwOwog
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CkBAIC0xMDQ4LDcgKzEw
NDgsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgICAgIEF0b21pY1N0cmluZyBpZGVudGlmaWVyID0g
c3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihwYWlyLT5maXJzdCgpKS0+Z2V0U3RyaW5n
VmFsdWUoKTsKICAgICAgICAgICAgIGludCB2YWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlKj4ocGFpci0+c2Vjb25kKCkpLT5nZXRJbnRWYWx1ZSgpOwotICAgICAgICAgICAgQ291
bnRlckRpcmVjdGl2ZXMmIGRpcmVjdGl2ZXMgPSBtYXAuYWRkKGlkZW50aWZpZXIsIENvdW50ZXJE
aXJlY3RpdmVzKCkpLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgICAgICBDb3VudGVyRGlyZWN0
aXZlcyYgZGlyZWN0aXZlcyA9IG1hcC5hZGQoaWRlbnRpZmllciwgQ291bnRlckRpcmVjdGl2ZXMo
KSkuaXRlcmF0b3ItPnZhbHVlOwogICAgICAgICAgICAgaWYgKGNvdW50ZXJCZWhhdmlvciA9PSBS
ZXNldCkgewogICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXMuc2V0UmVzZXRWYWx1ZSh2YWx1ZSk7
CiAgICAgICAgICAgICB9IGVsc2UgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0
eWxlUmVzb2x2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCmlu
ZGV4IGU1MzhhNjJiMzY1YjljZTdjNzQyMjA2ZWViOTBjNDgwMmZiZjljYWEuLmUyYjk1NTJiYjlm
Nzc4ODVlNjlkMzk5ZWU3YzY3MWMxZTk0NzdkMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVJlc29sdmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNv
bHZlci5jcHAKQEAgLTUwMiw3ICs1MDIsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RG
ZWF0dXJlcygpCiAgICAgbV9mZWF0dXJlcy5hZGQobV9hdXRob3JTdHlsZS0+ZmVhdHVyZXMoKSk7
CiAjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKICAgICBmb3IgKFNjb3BlZFJ1bGVTZXRNYXA6Oml0
ZXJhdG9yIGl0ID0gbV9zY29wZWRBdXRob3JTdHlsZXMuYmVnaW4oKTsgaXQgIT0gbV9zY29wZWRB
dXRob3JTdHlsZXMuZW5kKCk7ICsraXQpCi0gICAgICAgIG1fZmVhdHVyZXMuYWRkKGl0LT5zZWNv
bmQtPmZlYXR1cmVzKCkpOworICAgICAgICBtX2ZlYXR1cmVzLmFkZChpdC0+dmFsdWUtPmZlYXR1
cmVzKCkpOwogI2VuZGlmCiAgICAgaWYgKG1fdXNlclN0eWxlKQogICAgICAgICBtX2ZlYXR1cmVz
LmFkZChtX3VzZXJTdHlsZS0+ZmVhdHVyZXMoKSk7CkBAIC01MzksNyArNTM5LDcgQEAgaW5saW5l
IFJ1bGVTZXQqIFN0eWxlUmVzb2x2ZXI6OnJ1bGVTZXRGb3JTY29wZShjb25zdCBDb250YWluZXJO
b2RlKiBzY29wZSkgY29uc3QKICAgICBpZiAoIXNjb3BlLT5oYXNTY29wZWRIVE1MU3R5bGVDaGls
ZCgpKQogICAgICAgICByZXR1cm4gMDsKICAgICBTY29wZWRSdWxlU2V0TWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IG1fc2NvcGVkQXV0aG9yU3R5bGVzLmZpbmQoc2NvcGUpOwotICAgIHJldHVybiBp
dCAhPSBtX3Njb3BlZEF1dGhvclN0eWxlcy5lbmQoKSA/IGl0LT5zZWNvbmQuZ2V0KCkgOiAwOyAK
KyAgICByZXR1cm4gaXQgIT0gbV9zY29wZWRBdXRob3JTdHlsZXMuZW5kKCkgPyBpdC0+dmFsdWUu
Z2V0KCkgOiAwOyAKIH0KICNlbmRpZgogCkBAIC01NjIsOCArNTYyLDggQEAgdm9pZCBTdHlsZVJl
c29sdmVyOjphcHBlbmRBdXRob3JTdHlsZXNoZWV0cyh1bnNpZ25lZCBmaXJzdE5ldywgY29uc3Qg
VmVjdG9yPFJlZlAKICAgICAgICAgaWYgKHNjb3BlKSB7CiAgICAgICAgICAgICBTY29wZWRSdWxl
U2V0TWFwOjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gbV9zY29wZWRBdXRob3JTdHlsZXMuYWRkKHNj
b3BlLCBudWxscHRyKTsKICAgICAgICAgICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKLSAg
ICAgICAgICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IFJ1bGVTZXQ6OmNyZWF0
ZSgpOwotICAgICAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQtPmFkZFJ1bGVzRnJv
bVNoZWV0KHNoZWV0LCAqbV9tZWRpdW0sIHRoaXMsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICBh
ZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gUnVsZVNldDo6Y3JlYXRlKCk7CisgICAgICAgICAg
ICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5hZGRSdWxlc0Zyb21TaGVldChzaGVldCwgKm1f
bWVkaXVtLCB0aGlzLCBzY29wZSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQog
I2VuZGlmCkBAIC02OTMsMTAgKzY5MywxMCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OnN3ZWVwTWF0
Y2hlZFByb3BlcnRpZXNDYWNoZSgpCiAgICAgTWF0Y2hlZFByb3BlcnRpZXNDYWNoZTo6aXRlcmF0
b3IgaXQgPSBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUuYmVnaW4oKTsKICAgICBNYXRjaGVkUHJv
cGVydGllc0NhY2hlOjppdGVyYXRvciBlbmQgPSBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUuZW5k
KCk7CiAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBWZWN0b3I8TWF0Y2hl
ZFByb3BlcnRpZXM+JiBtYXRjaGVkUHJvcGVydGllcyA9IGl0LT5zZWNvbmQubWF0Y2hlZFByb3Bl
cnRpZXM7CisgICAgICAgIFZlY3RvcjxNYXRjaGVkUHJvcGVydGllcz4mIG1hdGNoZWRQcm9wZXJ0
aWVzID0gaXQtPnZhbHVlLm1hdGNoZWRQcm9wZXJ0aWVzOwogICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBp
ZiAobWF0Y2hlZFByb3BlcnRpZXNbaV0ucHJvcGVydGllcy0+aGFzT25lUmVmKCkpIHsKLSAgICAg
ICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgICAgICAgICB0
b1JlbW92ZS5hcHBlbmQoaXQtPmtleSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KQEAgLTE4NzcsNyArMTg3Nyw3IEBAIHZvaWQgU3R5bGVSZXNvbHZl
cjo6a2V5ZnJhbWVTdHlsZXNGb3JBbmltYXRpb24oRWxlbWVudCogZSwgY29uc3QgUmVuZGVyU3R5
bGUqIGVsCiAgICAgaWYgKGl0ID09IG1fa2V5ZnJhbWVzUnVsZU1hcC5lbmQoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgY29uc3QgU3R5bGVSdWxlS2V5ZnJhbWVzKiBrZXlmcmFtZXNSdWxlID0g
aXQtPnNlY29uZC5nZXQoKTsKKyAgICBjb25zdCBTdHlsZVJ1bGVLZXlmcmFtZXMqIGtleWZyYW1l
c1J1bGUgPSBpdC0+dmFsdWUuZ2V0KCk7CiAKICAgICAvLyBDb25zdHJ1Y3QgYW5kIHBvcHVsYXRl
IHRoZSBzdHlsZSBmb3IgZWFjaCBrZXlmcmFtZQogICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5
bGVLZXlmcmFtZT4gPiYga2V5ZnJhbWVzID0ga2V5ZnJhbWVzUnVsZS0+a2V5ZnJhbWVzKCk7CkBA
IC0yNTY2LDcgKzI1NjYsNyBAQCBzdGF0aWMgdm9pZCByZXBvcnRBdG9tUnVsZU1hcChNZW1vcnlD
bGFzc0luZm8qIGluZm8sIGNvbnN0IFJ1bGVTZXQ6OkF0b21SdWxlTWFwJgogewogICAgIGluZm8t
PmFkZEhhc2hNYXAoYXRvbWljUnVsZU1hcCk7CiAgICAgZm9yIChSdWxlU2V0OjpBdG9tUnVsZU1h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBhdG9taWNSdWxlTWFwLmJlZ2luKCk7IGl0ICE9IGF0b21p
Y1J1bGVNYXAuZW5kKCk7ICsraXQpCi0gICAgICAgIGluZm8tPmFkZEluc3RydW1lbnRlZFZlY3Rv
cigqaXQtPnNlY29uZCk7CisgICAgICAgIGluZm8tPmFkZEluc3RydW1lbnRlZFZlY3RvcigqaXQt
PnZhbHVlKTsKIH0KIAogdm9pZCBSdWxlU2V0OjpyZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmpl
Y3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdApAQCAtMjYzNyw3ICsyNjM3LDcgQEAgdm9p
ZCBSdWxlU2V0OjphZGRUb1J1bGVTZXQoQXRvbWljU3RyaW5nSW1wbCoga2V5LCBBdG9tUnVsZU1h
cCYgbWFwLCBjb25zdCBSdWxlRGEKIHsKICAgICBpZiAoIWtleSkKICAgICAgICAgcmV0dXJuOwot
ICAgIE93blB0cjxWZWN0b3I8UnVsZURhdGE+ID4mIHJ1bGVzID0gbWFwLmFkZChrZXksIG51bGxw
dHIpLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgT3duUHRyPFZlY3RvcjxSdWxlRGF0YT4gPiYgcnVs
ZXMgPSBtYXAuYWRkKGtleSwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghcnVs
ZXMpCiAgICAgICAgIHJ1bGVzID0gYWRvcHRQdHIobmV3IFZlY3RvcjxSdWxlRGF0YT4pOwogICAg
IHJ1bGVzLT5hcHBlbmQocnVsZURhdGEpOwpAQCAtMjc5OCw3ICsyNzk4LDcgQEAgc3RhdGljIGlu
bGluZSB2b2lkIHNocmlua01hcFZlY3RvcnNUb0ZpdChSdWxlU2V0OjpBdG9tUnVsZU1hcCYgbWFw
KQogewogICAgIFJ1bGVTZXQ6OkF0b21SdWxlTWFwOjppdGVyYXRvciBlbmQgPSBtYXAuZW5kKCk7
CiAgICAgZm9yIChSdWxlU2V0OjpBdG9tUnVsZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5zaHJpbmtUb0ZpdCgpOwor
ICAgICAgICBpdC0+dmFsdWUtPnNocmlua1RvRml0KCk7CiB9CiAKIHZvaWQgUnVsZVNldDo6c2hy
aW5rVG9GaXQoKQpAQCAtMjk0NCw3ICsyOTQ0LDcgQEAgY29uc3QgU3R5bGVSZXNvbHZlcjo6TWF0
Y2hlZFByb3BlcnRpZXNDYWNoZUl0ZW0qIFN0eWxlUmVzb2x2ZXI6OmZpbmRGcm9tTWF0Y2hlZFAK
ICAgICBNYXRjaGVkUHJvcGVydGllc0NhY2hlOjppdGVyYXRvciBpdCA9IG1fbWF0Y2hlZFByb3Bl
cnRpZXNDYWNoZS5maW5kKGhhc2gpOwogICAgIGlmIChpdCA9PSBtX21hdGNoZWRQcm9wZXJ0aWVz
Q2FjaGUuZW5kKCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIE1hdGNoZWRQcm9wZXJ0aWVzQ2Fj
aGVJdGVtJiBjYWNoZUl0ZW0gPSBpdC0+c2Vjb25kOworICAgIE1hdGNoZWRQcm9wZXJ0aWVzQ2Fj
aGVJdGVtJiBjYWNoZUl0ZW0gPSBpdC0+dmFsdWU7CiAKICAgICBzaXplX3Qgc2l6ZSA9IG1hdGNo
UmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKTsKICAgICBpZiAoc2l6ZSAhPSBjYWNoZUl0
ZW0ubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVl
dENvbnRlbnRzLmNwcAppbmRleCA1ZWRmZDg5NjQ4MGNlNWYzZTY5MTEyZmVkOGFjN2ViZTFjMjBm
OTA5Li5iMjA5NTA2YzY0OTllOTUwNWQ4NGY3YjcyODI3YzQ2ODBjNzJhZjg0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldENvbnRlbnRzLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU3R5bGVTaGVldENvbnRlbnRzLmNwcApAQCAtMjUxLDcgKzI1MSw3IEBAIHZv
aWQgU3R5bGVTaGVldENvbnRlbnRzOjpwYXJzZXJBZGROYW1lc3BhY2UoY29uc3QgQXRvbWljU3Ry
aW5nJiBwcmVmaXgsIGNvbnN0IEF0CiAgICAgUHJlZml4TmFtZXNwYWNlVVJJTWFwOjpBZGRSZXN1
bHQgcmVzdWx0ID0gbV9uYW1lc3BhY2VzLmFkZChwcmVmaXgsIHVyaSk7CiAgICAgaWYgKHJlc3Vs
dC5pc05ld0VudHJ5KQogICAgICAgICByZXR1cm47Ci0gICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNv
bmQgPSB1cmk7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IHVyaTsKIH0KIAogY29uc3Qg
QXRvbWljU3RyaW5nJiBTdHlsZVNoZWV0Q29udGVudHM6OmRldGVybWluZU5hbWVzcGFjZShjb25z
dCBBdG9taWNTdHJpbmcmIHByZWZpeCkKQEAgLTI2Myw3ICsyNjMsNyBAQCBjb25zdCBBdG9taWNT
dHJpbmcmIFN0eWxlU2hlZXRDb250ZW50czo6ZGV0ZXJtaW5lTmFtZXNwYWNlKGNvbnN0IEF0b21p
Y1N0cmluZyYgcAogICAgIFByZWZpeE5hbWVzcGFjZVVSSU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtX25hbWVzcGFjZXMuZmluZChwcmVmaXgpOwogICAgIGlmIChpdCA9PSBtX25hbWVzcGFjZXMu
ZW5kKCkpCiAgICAgICAgIHJldHVybiBudWxsQXRvbTsKLSAgICByZXR1cm4gaXQtPnNlY29uZDsK
KyAgICByZXR1cm4gaXQtPnZhbHVlOwogfQogCiB2b2lkIFN0eWxlU2hlZXRDb250ZW50czo6cGFy
c2VBdXRob3JTdHlsZVNoZWV0KGNvbnN0IENhY2hlZENTU1N0eWxlU2hlZXQqIGNhY2hlZFN0eWxl
U2hlZXQsIGNvbnN0IFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9DaGVja2VkUmFkaW9CdXR0b25zLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9DaGVja2VkUmFkaW9CdXR0b25zLmNwcAppbmRleCA2ODk4MmNkMWFkMzMzNTVlY2Q0
MWI5ZjE0ZWJhYmQwZDY5ZjkzMDAxLi43ZGNhZGNkYTkyZjY4OGU3Y2VkZmRiM2I5MTFiY2M2Y2Qz
YWI4NTFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hlY2tlZFJhZGlvQnV0dG9u
cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0NoZWNrZWRSYWRpb0J1dHRvbnMuY3BwCkBA
IC0xODYsNyArMTg2LDcgQEAgdm9pZCBDaGVja2VkUmFkaW9CdXR0b25zOjphZGRCdXR0b24oSFRN
TElucHV0RWxlbWVudCogZWxlbWVudCkKICAgICBpZiAoIW1fbmFtZVRvR3JvdXBNYXApCiAgICAg
ICAgIG1fbmFtZVRvR3JvdXBNYXAgPSBhZG9wdFB0cihuZXcgTmFtZVRvR3JvdXBNYXApOwogCi0g
ICAgT3duUHRyPFJhZGlvQnV0dG9uR3JvdXA+JiBncm91cCA9IG1fbmFtZVRvR3JvdXBNYXAtPmFk
ZChlbGVtZW50LT5uYW1lKCkuaW1wbCgpLCBQYXNzT3duUHRyPFJhZGlvQnV0dG9uR3JvdXA+KCkp
Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgT3duUHRyPFJhZGlvQnV0dG9uR3JvdXA+JiBncm91cCA9
IG1fbmFtZVRvR3JvdXBNYXAtPmFkZChlbGVtZW50LT5uYW1lKCkuaW1wbCgpLCBQYXNzT3duUHRy
PFJhZGlvQnV0dG9uR3JvdXA+KCkpLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoIWdyb3VwKQog
ICAgICAgICBncm91cCA9IFJhZGlvQnV0dG9uR3JvdXA6OmNyZWF0ZSgpOwogICAgIGdyb3VwLT5h
ZGQoZWxlbWVudCk7CkBAIC0yNDcsOCArMjQ3LDggQEAgdm9pZCBDaGVja2VkUmFkaW9CdXR0b25z
OjpyZW1vdmVCdXR0b24oSFRNTElucHV0RWxlbWVudCogZWxlbWVudCkKICAgICBOYW1lVG9Hcm91
cE1hcDo6aXRlcmF0b3IgaXQgPSBtX25hbWVUb0dyb3VwTWFwLT5maW5kKGVsZW1lbnQtPm5hbWUo
KS5pbXBsKCkpOwogICAgIGlmIChpdCA9PSBtX25hbWVUb0dyb3VwTWFwLT5lbmQoKSkKICAgICAg
ICAgcmV0dXJuOwotICAgIGl0LT5zZWNvbmQtPnJlbW92ZShlbGVtZW50KTsKLSAgICBpZiAoaXQt
PnNlY29uZC0+aXNFbXB0eSgpKSB7CisgICAgaXQtPnZhbHVlLT5yZW1vdmUoZWxlbWVudCk7Cisg
ICAgaWYgKGl0LT52YWx1ZS0+aXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBXZSBtYXkg
c2tpcCBkZWFsbG9jYXRpbmcgdGhlIGVtcHR5IFJhZGlvQnV0dG9uR3JvdXAgZm9yCiAgICAgICAg
IC8vIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50LiBJZiB3ZSBkbyBzbywgd2UgbmVlZCB0byBjaGFu
Z2UgdGhlIGtleSB0eXBlCiAgICAgICAgIC8vIG9mIG1fbmFtZVRvR3JvdXBNYXAgZnJvbSBBdG9t
aWNTdHJpbmdJbXBsKiB0byBSZWZQdHI8QXRvbWljU3RyaW5nSW1wbD4uCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5jcHAKaW5kZXggZjRhMmRhMDRhYjYxNTgx
M2Y4NjRhZTEzNTZmNGVhYTRkYjBiZmU0OS4uYWZkOGRkOWYxYjAwOTg1YzdhMjdiYmJiZGEzZWJm
ODA3NzZkNGM3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0NoaWxkTGlzdE11dGF0
aW9uU2NvcGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZExpc3RNdXRhdGlvblNj
b3BlLmNwcApAQCAtMTkyLDI3ICsxOTIsMjcgQEAgdm9pZCBDaGlsZExpc3RNdXRhdGlvblNjb3Bl
OjpNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlcjo6Y2hpbGRBZGRlZChOb2RlKiB0YXJnZXQKIHsK
ICAgICBIYXNoTWFwPE5vZGUqLCBPd25QdHI8Q2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRp
b25BY2N1bXVsYXRvcj4gPjo6aXRlcmF0b3IgaXRlciA9IG1fYWNjdW11bGF0aW9ucy5maW5kKHRh
cmdldCk7CiAgICAgQVNTRVJUKGl0ZXIgIT0gbV9hY2N1bXVsYXRpb25zLmVuZCgpKTsKLSAgICBp
ZiAoaXRlciA9PSBtX2FjY3VtdWxhdGlvbnMuZW5kKCkgfHwgIWl0ZXItPnNlY29uZCkKKyAgICBp
ZiAoaXRlciA9PSBtX2FjY3VtdWxhdGlvbnMuZW5kKCkgfHwgIWl0ZXItPnZhbHVlKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBpdGVyLT5zZWNvbmQtPmNoaWxkQWRkZWQoY2hpbGQpOworICAgIGl0
ZXItPnZhbHVlLT5jaGlsZEFkZGVkKGNoaWxkKTsKIH0KIAogdm9pZCBDaGlsZExpc3RNdXRhdGlv
blNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlcjo6d2lsbFJlbW92ZUNoaWxkKE5vZGUq
IHRhcmdldCwgTm9kZSogY2hpbGQpCiB7CiAgICAgSGFzaE1hcDxOb2RlKiwgT3duUHRyPENoaWxk
TGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0b3I+ID46Oml0ZXJhdG9yIGl0ZXIg
PSBtX2FjY3VtdWxhdGlvbnMuZmluZCh0YXJnZXQpOwogICAgIEFTU0VSVChpdGVyICE9IG1fYWNj
dW11bGF0aW9ucy5lbmQoKSk7Ci0gICAgaWYgKGl0ZXIgPT0gbV9hY2N1bXVsYXRpb25zLmVuZCgp
IHx8ICFpdGVyLT5zZWNvbmQpCisgICAgaWYgKGl0ZXIgPT0gbV9hY2N1bXVsYXRpb25zLmVuZCgp
IHx8ICFpdGVyLT52YWx1ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaXRlci0+c2Vjb25kLT53
aWxsUmVtb3ZlQ2hpbGQoY2hpbGQpOworICAgIGl0ZXItPnZhbHVlLT53aWxsUmVtb3ZlQ2hpbGQo
Y2hpbGQpOwogfQogCiB2b2lkIENoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11
bGF0aW9uUm91dGVyOjppbmNyZW1lbnRTY29waW5nTGV2ZWwoTm9kZSogdGFyZ2V0KQogewogICAg
IFNjb3BpbmdMZXZlbE1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fc2NvcGluZ0xldmVscy5hZGQo
dGFyZ2V0LCAxKTsKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgICsrKHJl
c3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKKyAgICAgICAgKysocmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTIyOSw4ICsyMjksOCBAQCB2b2lkIENo
aWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVyOjpkZWNyZW1l
bnRTY29waW5nTGV2ZWwoTgogICAgIFNjb3BpbmdMZXZlbE1hcDo6aXRlcmF0b3IgaXRlciA9IG1f
c2NvcGluZ0xldmVscy5maW5kKHRhcmdldCk7CiAgICAgQVNTRVJUKGl0ZXIgIT0gbV9zY29waW5n
TGV2ZWxzLmVuZCgpKTsKIAotICAgIC0tKGl0ZXItPnNlY29uZCk7Ci0gICAgaWYgKGl0ZXItPnNl
Y29uZCA+IDApCisgICAgLS0oaXRlci0+dmFsdWUpOworICAgIGlmIChpdGVyLT52YWx1ZSA+IDAp
CiAgICAgICAgIHJldHVybjsKIAogICAgIG1fc2NvcGluZ0xldmVscy5yZW1vdmUoaXRlcik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCAzYWM1ZDllYzAyMzcwNzI5YjVlOTA5NWUwNzg2M2Yy
NWUyYWEzOGVlLi42MWE3MzAxN2UyMWQ3YWRmMjYxMjEyYWQ2NjM5ZjA2MTY3M2IzZjAxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTI5NTIsNyArMjk1Miw3IEBAIGNvbnN0IFZlY3RvcjxS
ZWZQdHI8Q1NTU3R5bGVTaGVldD4gPiogRG9jdW1lbnQ6OnBhZ2VHcm91cFVzZXJTaGVldHMoKSBj
b25zdAogCiAgICAgVXNlclN0eWxlU2hlZXRNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHNoZWV0
c01hcC0+ZW5kKCk7CiAgICAgZm9yIChVc2VyU3R5bGVTaGVldE1hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBzaGVldHNNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBjb25z
dCBVc2VyU3R5bGVTaGVldFZlY3Rvciogc2hlZXRzID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAg
ICAgY29uc3QgVXNlclN0eWxlU2hlZXRWZWN0b3IqIHNoZWV0cyA9IGl0LT52YWx1ZS5nZXQoKTsK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNoZWV0cy0+c2l6ZSgpOyArK2kpIHsK
ICAgICAgICAgICAgIGNvbnN0IFVzZXJTdHlsZVNoZWV0KiBzaGVldCA9IHNoZWV0cy0+YXQoaSku
Z2V0KCk7CiAgICAgICAgICAgICBpZiAoc2hlZXQtPmluamVjdGVkRnJhbWVzKCkgPT0gSW5qZWN0
SW5Ub3BGcmFtZU9ubHkgJiYgb3duZXJFbGVtZW50KCkpCkBAIC00ODM1LDEwICs0ODM1LDEwIEBA
IFBhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+IERvY3VtZW50Ojp3aW5kb3dOYW1lZEl0ZW1zKGNv
bnN0IEF0b21pY1N0cmluZyYgbmFtZSkKIHsKICAgICBOYW1lZENvbGxlY3Rpb25NYXA6OkFkZFJl
c3VsdCByZXN1bHQgPSBtX3dpbmRvd05hbWVkSXRlbUNvbGxlY3Rpb25zLmFkZChuYW1lLCAwKTsK
ICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJh
dG9yLT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogCiAg
ICAgUmVmUHRyPEhUTUxOYW1lQ29sbGVjdGlvbj4gY29sbGVjdGlvbiA9IEhUTUxOYW1lQ29sbGVj
dGlvbjo6Y3JlYXRlKHRoaXMsIFdpbmRvd05hbWVkSXRlbXMsIG5hbWUpOwotICAgIHJlc3VsdC5p
dGVyYXRvci0+c2Vjb25kID0gY29sbGVjdGlvbi5nZXQoKTsKKyAgICByZXN1bHQuaXRlcmF0b3It
PnZhbHVlID0gY29sbGVjdGlvbi5nZXQoKTsKICAgICByZXR1cm4gY29sbGVjdGlvbi5yZWxlYXNl
KCk7CiB9CiAKQEAgLTQ4NDYsMTAgKzQ4NDYsMTAgQEAgUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlv
bj4gRG9jdW1lbnQ6OmRvY3VtZW50TmFtZWRJdGVtcyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUK
IHsKICAgICBOYW1lZENvbGxlY3Rpb25NYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX2RvY3VtZW50
TmFtZWRJdGVtQ29sbGVjdGlvbnMuYWRkKG5hbWUsIDApOwogICAgIGlmICghcmVzdWx0LmlzTmV3
RW50cnkpCi0gICAgICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAKICAgICBSZWZQdHI8SFRNTE5hbWVDb2xs
ZWN0aW9uPiBjb2xsZWN0aW9uID0gSFRNTE5hbWVDb2xsZWN0aW9uOjpjcmVhdGUodGhpcywgRG9j
dW1lbnROYW1lZEl0ZW1zLCBuYW1lKTsKLSAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IGNv
bGxlY3Rpb24uZ2V0KCk7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGNvbGxlY3Rpb24u
Z2V0KCk7CiAgICAgcmV0dXJuIGNvbGxlY3Rpb24ucmVsZWFzZSgpOwogfQogCkBAIC01MTg3LDcg
KzUxODcsNyBAQCBDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBEb2N1bWVudDo6Z2V0Q1NTQ2FudmFz
Q29udGV4dChjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0CiAKIEhUTUxDYW52YXNFbGVtZW50KiBE
b2N1bWVudDo6Z2V0Q1NTQ2FudmFzRWxlbWVudChjb25zdCBTdHJpbmcmIG5hbWUpCiB7Ci0gICAg
UmVmUHRyPEhUTUxDYW52YXNFbGVtZW50PiYgZWxlbWVudCA9IG1fY3NzQ2FudmFzRWxlbWVudHMu
YWRkKG5hbWUsIDApLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgUmVmUHRyPEhUTUxDYW52YXNFbGVt
ZW50PiYgZWxlbWVudCA9IG1fY3NzQ2FudmFzRWxlbWVudHMuYWRkKG5hbWUsIDApLml0ZXJhdG9y
LT52YWx1ZTsKICAgICBpZiAoIWVsZW1lbnQpCiAgICAgICAgIGVsZW1lbnQgPSBIVE1MQ2FudmFz
RWxlbWVudDo6Y3JlYXRlKHRoaXMpOwogICAgIHJldHVybiBlbGVtZW50LmdldCgpOwpAQCAtNjM0
NCwyMyArNjM0NCwyMyBAQCBQYXNzUmVmUHRyPEVsZW1lbnRBdHRyaWJ1dGVEYXRhPiBEb2N1bWVu
dDo6Y2FjaGVkSW1tdXRhYmxlQXR0cmlidXRlRGF0YShjb25zdCBFbAogICAgIHVuc2lnbmVkIGNh
Y2hlSGFzaCA9IGNhY2hlS2V5Lmhhc2goKTsKIAogICAgIEltbXV0YWJsZUF0dHJpYnV0ZURhdGFD
YWNoZTo6aXRlcmF0b3IgY2FjaGVJdGVyYXRvciA9IG1faW1tdXRhYmxlQXR0cmlidXRlRGF0YUNh
Y2hlLmFkZChjYWNoZUhhc2gsIG51bGxwdHIpLml0ZXJhdG9yOwotICAgIGlmIChjYWNoZUl0ZXJh
dG9yLT5zZWNvbmQgJiYgY2FjaGVJdGVyYXRvci0+c2Vjb25kLT5rZXkgIT0gY2FjaGVLZXkpCisg
ICAgaWYgKGNhY2hlSXRlcmF0b3ItPnZhbHVlICYmIGNhY2hlSXRlcmF0b3ItPnZhbHVlLT5rZXkg
IT0gY2FjaGVLZXkpCiAgICAgICAgIGNhY2hlSGFzaCA9IDA7CiAKICAgICBSZWZQdHI8RWxlbWVu
dEF0dHJpYnV0ZURhdGE+IGF0dHJpYnV0ZURhdGE7Ci0gICAgaWYgKGNhY2hlSGFzaCAmJiBjYWNo
ZUl0ZXJhdG9yLT5zZWNvbmQpCi0gICAgICAgIGF0dHJpYnV0ZURhdGEgPSBjYWNoZUl0ZXJhdG9y
LT5zZWNvbmQtPnZhbHVlOworICAgIGlmIChjYWNoZUhhc2ggJiYgY2FjaGVJdGVyYXRvci0+dmFs
dWUpCisgICAgICAgIGF0dHJpYnV0ZURhdGEgPSBjYWNoZUl0ZXJhdG9yLT52YWx1ZS0+dmFsdWU7
CiAgICAgZWxzZQogICAgICAgICBhdHRyaWJ1dGVEYXRhID0gRWxlbWVudEF0dHJpYnV0ZURhdGE6
OmNyZWF0ZUltbXV0YWJsZShhdHRyaWJ1dGVzKTsKIAotICAgIGlmICghY2FjaGVIYXNoIHx8IGNh
Y2hlSXRlcmF0b3ItPnNlY29uZCkKKyAgICBpZiAoIWNhY2hlSGFzaCB8fCBjYWNoZUl0ZXJhdG9y
LT52YWx1ZSkKICAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZURhdGEucmVsZWFzZSgpOwogCiAgICAg
T3duUHRyPEltbXV0YWJsZUF0dHJpYnV0ZURhdGFDYWNoZUVudHJ5PiBuZXdFbnRyeSA9IGFkb3B0
UHRyKG5ldyBJbW11dGFibGVBdHRyaWJ1dGVEYXRhQ2FjaGVFbnRyeSk7CiAgICAgbmV3RW50cnkt
PmtleSA9IEltbXV0YWJsZUF0dHJpYnV0ZURhdGFDYWNoZUtleShlbGVtZW50LT5sb2NhbE5hbWUo
KSwgY29uc3RfY2FzdDxjb25zdCBFbGVtZW50QXR0cmlidXRlRGF0YSo+KGF0dHJpYnV0ZURhdGEu
Z2V0KCkpLT5hdHRyaWJ1dGVJdGVtKDApLCBhdHRyaWJ1dGVEYXRhLT5sZW5ndGgoKSk7CiAgICAg
bmV3RW50cnktPnZhbHVlID0gYXR0cmlidXRlRGF0YTsKIAotICAgIGNhY2hlSXRlcmF0b3ItPnNl
Y29uZCA9IG5ld0VudHJ5LnJlbGVhc2UoKTsKKyAgICBjYWNoZUl0ZXJhdG9yLT52YWx1ZSA9IG5l
d0VudHJ5LnJlbGVhc2UoKTsKIAogICAgIHJldHVybiBhdHRyaWJ1dGVEYXRhLnJlbGVhc2UoKTsK
IH0KQEAgLTYzNzIsOCArNjM3Miw4IEBAIExvY2FsaXplciYgRG9jdW1lbnQ6OmdldExvY2FsaXpl
cihjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZSkKICAgICAgICAgbG9jYWxlS2V5ID0gZGVmYXVs
dExhbmd1YWdlKCk7CiAgICAgTG9jYWxlVG9Mb2NhbGl6ZXJNYXA6OkFkZFJlc3VsdCByZXN1bHQg
PSBtX2xvY2FsaXplckNhY2hlLmFkZChsb2NhbGVLZXksIG51bGxwdHIpOwogICAgIGlmIChyZXN1
bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBMb2NhbGl6
ZXI6OmNyZWF0ZShsb2NhbGVLZXkpOwotICAgIHJldHVybiAqKHJlc3VsdC5pdGVyYXRvci0+c2Vj
b25kKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IExvY2FsaXplcjo6Y3JlYXRl
KGxvY2FsZUtleSk7CisgICAgcmV0dXJuICoocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
TWFya2VyQ29udHJvbGxlci5jcHAKaW5kZXggYTNlYmM5MzY5MzI1YTQ3YjJlNjI5Mjg2OTYwYjRk
NmZlYmMyZjBhZS4uYjJmMDA4OTU0ZmU3ZWEwZTY3MGRiNzE1YjYzNTNkMjUzYmEyOTVhMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAKQEAg
LTMxMSw3ICszMTEsNyBAQCBEb2N1bWVudE1hcmtlciogRG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
OjptYXJrZXJDb250YWluaW5nUG9pbnQoY29uc3QgTGF5b3V0UG9pbgogICAgIE1hcmtlck1hcDo6
aXRlcmF0b3IgZW5kID0gbV9tYXJrZXJzLmVuZCgpOwogICAgIGZvciAoTWFya2VyTWFwOjppdGVy
YXRvciBub2RlSXRlcmF0b3IgPSBtX21hcmtlcnMuYmVnaW4oKTsgbm9kZUl0ZXJhdG9yICE9IGVu
ZDsgKytub2RlSXRlcmF0b3IpIHsKICAgICAgICAgLy8gaW5uZXIgbG9vcDsgcHJvY2VzcyBlYWNo
IG1hcmtlciBpbiB0aGlzIG5vZGUKLSAgICAgICAgTWFya2VyTGlzdCogbGlzdCA9IG5vZGVJdGVy
YXRvci0+c2Vjb25kOworICAgICAgICBNYXJrZXJMaXN0KiBsaXN0ID0gbm9kZUl0ZXJhdG9yLT52
YWx1ZTsKICAgICAgICAgdW5zaWduZWQgbWFya2VyQ291bnQgPSBsaXN0LT5zaXplKCk7CiAgICAg
ICAgIGZvciAodW5zaWduZWQgbWFya2VySW5kZXggPSAwOyBtYXJrZXJJbmRleCA8IG1hcmtlckNv
dW50OyArK21hcmtlckluZGV4KSB7CiAgICAgICAgICAgICBSZW5kZXJlZERvY3VtZW50TWFya2Vy
JiBtYXJrZXIgPSBsaXN0LT5hdChtYXJrZXJJbmRleCk7CkBAIC0zOTksNyArMzk5LDcgQEAgVmVj
dG9yPEludFJlY3Q+IERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVuZGVyZWRSZWN0c0Zvck1h
cmtlcnMoRG9jdW1lbnRNYXJrZXIKICAgICBNYXJrZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fbWFy
a2Vycy5lbmQoKTsKICAgICBmb3IgKE1hcmtlck1hcDo6aXRlcmF0b3Igbm9kZUl0ZXJhdG9yID0g
bV9tYXJrZXJzLmJlZ2luKCk7IG5vZGVJdGVyYXRvciAhPSBlbmQ7ICsrbm9kZUl0ZXJhdG9yKSB7
CiAgICAgICAgIC8vIGlubmVyIGxvb3A7IHByb2Nlc3MgZWFjaCBtYXJrZXIgaW4gdGhpcyBub2Rl
Ci0gICAgICAgIE1hcmtlckxpc3QqIGxpc3QgPSBub2RlSXRlcmF0b3ItPnNlY29uZDsKKyAgICAg
ICAgTWFya2VyTGlzdCogbGlzdCA9IG5vZGVJdGVyYXRvci0+dmFsdWU7CiAgICAgICAgIHVuc2ln
bmVkIG1hcmtlckNvdW50ID0gbGlzdC0+c2l6ZSgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIG1h
cmtlckluZGV4ID0gMDsgbWFya2VySW5kZXggPCBtYXJrZXJDb3VudDsgKyttYXJrZXJJbmRleCkg
ewogICAgICAgICAgICAgY29uc3QgUmVuZGVyZWREb2N1bWVudE1hcmtlciYgbWFya2VyID0gbGlz
dC0+YXQobWFya2VySW5kZXgpOwpAQCAtNDI2LDcgKzQyNiw3IEBAIHZvaWQgRG9jdW1lbnRNYXJr
ZXJDb250cm9sbGVyOjpyZW1vdmVNYXJrZXJzKE5vZGUqIG5vZGUsIERvY3VtZW50TWFya2VyOjpN
YXJrZXJUCiAgICAgCiAgICAgTWFya2VyTWFwOjppdGVyYXRvciBpdGVyYXRvciA9IG1fbWFya2Vy
cy5maW5kKG5vZGUpOwogICAgIGlmIChpdGVyYXRvciAhPSBtX21hcmtlcnMuZW5kKCkpCi0gICAg
ICAgIHJlbW92ZU1hcmtlcnNGcm9tTGlzdChub2RlLCBpdGVyYXRvci0+c2Vjb25kLCBtYXJrZXJU
eXBlcyk7CisgICAgICAgIHJlbW92ZU1hcmtlcnNGcm9tTGlzdChub2RlLCBpdGVyYXRvci0+dmFs
dWUsIG1hcmtlclR5cGVzKTsKIH0KIAogdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJl
bW92ZU1hcmtlcnMoRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGVzIG1hcmtlclR5cGVzKQpAQCAt
NDM5LDcgKzQzOSw3IEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW1vdmVNYXJr
ZXJzKERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlcyBtYXJrZXJUCiAgICAgTWFya2VyTWFwIG1h
cmtlck1hcENvcHkgPSBtX21hcmtlcnM7CiAgICAgTWFya2VyTWFwOjppdGVyYXRvciBlbmQgPSBt
YXJrZXJNYXBDb3B5LmVuZCgpOwogICAgIGZvciAoTWFya2VyTWFwOjppdGVyYXRvciBpID0gbWFy
a2VyTWFwQ29weS5iZWdpbigpOyBpICE9IGVuZDsgKytpKQotICAgICAgICByZW1vdmVNYXJrZXJz
RnJvbUxpc3QoaS0+Zmlyc3QuZ2V0KCksIGktPnNlY29uZCwgbWFya2VyVHlwZXMpOworICAgICAg
ICByZW1vdmVNYXJrZXJzRnJvbUxpc3QoaS0+a2V5LmdldCgpLCBpLT52YWx1ZSwgbWFya2VyVHlw
ZXMpOwogICAgIG1fcG9zc2libHlFeGlzdGluZ01hcmtlclR5cGVzLnJlbW92ZShtYXJrZXJUeXBl
cyk7CiB9CiAKQEAgLTQ5NSwxMCArNDk1LDEwIEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyOjpyZXBhaW50TWFya2VycyhEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZXMgbWFya2VyCiAg
ICAgLy8gb3V0ZXIgbG9vcDogcHJvY2VzcyBlYWNoIG1hcmtlcmVkIG5vZGUgaW4gdGhlIGRvY3Vt
ZW50CiAgICAgTWFya2VyTWFwOjppdGVyYXRvciBlbmQgPSBtX21hcmtlcnMuZW5kKCk7CiAgICAg
Zm9yIChNYXJrZXJNYXA6Oml0ZXJhdG9yIGkgPSBtX21hcmtlcnMuYmVnaW4oKTsgaSAhPSBlbmQ7
ICsraSkgewotICAgICAgICBOb2RlKiBub2RlID0gaS0+Zmlyc3QuZ2V0KCk7CisgICAgICAgIE5v
ZGUqIG5vZGUgPSBpLT5rZXkuZ2V0KCk7CiAKICAgICAgICAgLy8gaW5uZXIgbG9vcDogcHJvY2Vz
cyBlYWNoIG1hcmtlciBpbiB0aGUgY3VycmVudCBub2RlCi0gICAgICAgIE1hcmtlckxpc3QqIGxp
c3QgPSBpLT5zZWNvbmQ7CisgICAgICAgIE1hcmtlckxpc3QqIGxpc3QgPSBpLT52YWx1ZTsKICAg
ICAgICAgYm9vbCBub2RlTmVlZHNSZXBhaW50ID0gZmFsc2U7CiAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpICE9IGxpc3QtPnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBEb2N1bWVudE1h
cmtlciBtYXJrZXIgPSBsaXN0LT5hdChpKTsKQEAgLTUyNiw3ICs1MjYsNyBAQCB2b2lkIERvY3Vt
ZW50TWFya2VyQ29udHJvbGxlcjo6aW52YWxpZGF0ZVJlbmRlcmVkUmVjdHNGb3JNYXJrZXJzSW5S
ZWN0KGNvbnN0IExheQogICAgIGZvciAoTWFya2VyTWFwOjppdGVyYXRvciBpID0gbV9tYXJrZXJz
LmJlZ2luKCk7IGkgIT0gZW5kOyArK2kpIHsKIAogICAgICAgICAvLyBpbm5lciBsb29wOiBwcm9j
ZXNzIGVhY2ggcmVjdCBpbiB0aGUgY3VycmVudCBub2RlCi0gICAgICAgIE1hcmtlckxpc3QqIGxp
c3QgPSBpLT5zZWNvbmQ7CisgICAgICAgIE1hcmtlckxpc3QqIGxpc3QgPSBpLT52YWx1ZTsKICAg
ICAgICAgZm9yIChzaXplX3QgbGlzdEluZGV4ID0gMDsgbGlzdEluZGV4IDwgbGlzdC0+c2l6ZSgp
OyArK2xpc3RJbmRleCkKICAgICAgICAgICAgIGxpc3QtPmF0KGxpc3RJbmRleCkuaW52YWxpZGF0
ZShyKTsKICAgICB9CkBAIC02NzUsOSArNjc1LDkgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRy
b2xsZXI6OnNob3dNYXJrZXJzKCkgY29uc3QKICAgICBmcHJpbnRmKHN0ZGVyciwgIiVkIG5vZGVz
IGhhdmUgbWFya2VyczpcbiIsIG1fbWFya2Vycy5zaXplKCkpOwogICAgIE1hcmtlck1hcDo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gbV9tYXJrZXJzLmVuZCgpOwogICAgIGZvciAoTWFya2VyTWFwOjpj
b25zdF9pdGVyYXRvciBub2RlSXRlcmF0b3IgPSBtX21hcmtlcnMuYmVnaW4oKTsgbm9kZUl0ZXJh
dG9yICE9IGVuZDsgKytub2RlSXRlcmF0b3IpIHsKLSAgICAgICAgTm9kZSogbm9kZSA9IG5vZGVJ
dGVyYXRvci0+Zmlyc3QuZ2V0KCk7CisgICAgICAgIE5vZGUqIG5vZGUgPSBub2RlSXRlcmF0b3It
PmtleS5nZXQoKTsKICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlcCIsIG5vZGUpOwotICAgICAg
ICBNYXJrZXJMaXN0KiBsaXN0ID0gbm9kZUl0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgIE1hcmtl
ckxpc3QqIGxpc3QgPSBub2RlSXRlcmF0b3ItPnZhbHVlOwogICAgICAgICBmb3IgKHVuc2lnbmVk
IG1hcmtlckluZGV4ID0gMDsgbWFya2VySW5kZXggPCBsaXN0LT5zaXplKCk7ICsrbWFya2VySW5k
ZXgpIHsKICAgICAgICAgICAgIGNvbnN0IERvY3VtZW50TWFya2VyJiBtYXJrZXIgPSBsaXN0LT5h
dChtYXJrZXJJbmRleCk7CiAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAlZDpbJWQ6JWRd
KCVkKSIsIG1hcmtlci50eXBlKCksIG1hcmtlci5zdGFydE9mZnNldCgpLCBtYXJrZXIuZW5kT2Zm
c2V0KCksIG1hcmtlci5hY3RpdmVNYXRjaCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudE9yZGVyZWRNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
T3JkZXJlZE1hcC5jcHAKaW5kZXggMDgyYWEwNzQwYTcxY2NkZjUwZTFkNDJkMjNkMzE3ZTYzYWYy
ZjRkYS4uMTI5N2U1MTAyZmI0ZTc5Y2UzZGIxMTIzNTcwMjFlM2RkMDU1NGE1MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50T3JkZXJlZE1hcC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50T3JkZXJlZE1hcC5jcHAKQEAgLTk4LDcgKzk4LDcgQEAgdm9p
ZCBEb2N1bWVudE9yZGVyZWRNYXA6OnJlbW92ZShBdG9taWNTdHJpbmdJbXBsKiBrZXksIEVsZW1l
bnQqIGVsZW1lbnQpCiAKICAgICBtX21hcC5jaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgTWFwOjpp
dGVyYXRvciBjYWNoZWRJdGVtID0gbV9tYXAuZmluZChrZXkpOwotICAgIGlmIChjYWNoZWRJdGVt
ICE9IG1fbWFwLmVuZCgpICYmIGNhY2hlZEl0ZW0tPnNlY29uZCA9PSBlbGVtZW50KQorICAgIGlm
IChjYWNoZWRJdGVtICE9IG1fbWFwLmVuZCgpICYmIGNhY2hlZEl0ZW0tPnZhbHVlID09IGVsZW1l
bnQpCiAgICAgICAgIG1fbWFwLnJlbW92ZShjYWNoZWRJdGVtKTsKICAgICBlbHNlCiAgICAgICAg
IG1fZHVwbGljYXRlQ291bnRzLnJlbW92ZShrZXkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVt
ZW50QXR0cmlidXRlRGF0YS5jcHAKaW5kZXggYTY0NTRkZGUxM2IyMjViZGFjOTIxMDY4YTU4NmUz
NTkzOWViNWM3Zi4uNjM5MWExNDQxNmFiMDNlZDM4YjMxMmMyZDkwN2RmMjgwMmZiMjlmYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0dHJpYnV0ZURhdGEuY3BwCkBAIC0xMTQsNyAr
MTE0LDcgQEAgc3RhdGljIEF0dHJMaXN0KiBlbnN1cmVBdHRyTGlzdEZvckVsZW1lbnQoRWxlbWVu
dCogZWxlbWVudCkKICAgICBBU1NFUlQoIWF0dHJMaXN0TWFwKCkuY29udGFpbnMoZWxlbWVudCkp
OwogICAgIGVsZW1lbnQtPnNldEhhc0F0dHJMaXN0KCk7CiAgICAgQXR0ckxpc3RNYXA6OkFkZFJl
c3VsdCByZXN1bHQgPSBhdHRyTGlzdE1hcCgpLmFkZChlbGVtZW50LCBhZG9wdFB0cihuZXcgQXR0
ckxpc3QpKTsKLSAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQuZ2V0KCk7CisgICAg
cmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7CiB9CiAKIHN0YXRpYyB2b2lkIHJl
bW92ZUF0dHJMaXN0Rm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50KQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RXZlbnREaXNwYXRjaGVyLmNwcAppbmRleCBlNTgzOTBjNWU0YWQ5ZDg4MGVjZWZkZDUxZDhmMGRk
ODA4NzYxMTllLi44OWI5Y2M3MGI3ODBjOGM4MGJiNzQ0ZDFkOGMxZWZmMTc1ODBjNTE3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcApAQCAtMTExLDcgKzExMSw3IEBAIEV2
ZW50VGFyZ2V0KiBFdmVudFJlbGF0ZWRUYXJnZXRBZGp1c3Rlcjo6ZmluZFJlbGF0ZWRUYXJnZXQo
VHJlZVNjb3BlKiBzY29wZSkKICAgICAgICAgcGFyZW50VHJlZVNjb3Blcy5hcHBlbmQoc2NvcGUp
OwogICAgICAgICBSZWxhdGVkVGFyZ2V0TWFwOjpjb25zdF9pdGVyYXRvciBmb3VuZCA9IG1fcmVs
YXRlZFRhcmdldE1hcC5maW5kKHNjb3BlKTsKICAgICAgICAgaWYgKGZvdW5kICE9IG1fcmVsYXRl
ZFRhcmdldE1hcC5lbmQoKSkgewotICAgICAgICAgICAgcmVsYXRlZFRhcmdldCA9IGZvdW5kLT5z
ZWNvbmQ7CisgICAgICAgICAgICByZWxhdGVkVGFyZ2V0ID0gZm91bmQtPnZhbHVlOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgc2NvcGUgPSBzY29wZS0+cGFyZW50VHJl
ZVNjb3BlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vSWRUYXJnZXRPYnNlcnZl
clJlZ2lzdHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9JZFRhcmdldE9ic2VydmVyUmVnaXN0
cnkuY3BwCmluZGV4IDVmYzI2YWNmZWUzMzJlYjdkMmQ2MTliYTU5MjBjNzMzZjViYjBmNzAuLmFh
ZmE4YTJkMWI1MzBiN2QwZjNlMzY3MDU1OGU4Yzk2Yjk0OGFmYjggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9JZFRhcmdldE9ic2VydmVyUmVnaXN0cnkuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9JZFRhcmdldE9ic2VydmVyUmVnaXN0cnkuY3BwCkBAIC00Miw5ICs0Miw5IEBA
IHZvaWQgSWRUYXJnZXRPYnNlcnZlclJlZ2lzdHJ5OjphZGRPYnNlcnZlcihjb25zdCBBdG9taWNT
dHJpbmcmIGlkLCBJZFRhcmdldE9ic2VyCiAgICAgCiAgICAgSWRUb09ic2VydmVyU2V0TWFwOjpB
ZGRSZXN1bHQgcmVzdWx0ID0gbV9yZWdpc3RyeS5hZGQoaWQuaW1wbCgpLCBudWxscHRyKTsKICAg
ICBpZiAocmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25k
ID0gYWRvcHRQdHIobmV3IE9ic2VydmVyU2V0KCkpOworICAgICAgICByZXN1bHQuaXRlcmF0b3It
PnZhbHVlID0gYWRvcHRQdHIobmV3IE9ic2VydmVyU2V0KCkpOwogCi0gICAgcmVzdWx0Lml0ZXJh
dG9yLT5zZWNvbmQtPmFkZChvYnNlcnZlcik7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+
YWRkKG9ic2VydmVyKTsKIH0KIAogdm9pZCBJZFRhcmdldE9ic2VydmVyUmVnaXN0cnk6OnJlbW92
ZU9ic2VydmVyKGNvbnN0IEF0b21pY1N0cmluZyYgaWQsIElkVGFyZ2V0T2JzZXJ2ZXIqIG9ic2Vy
dmVyKQpAQCAtNTQsNyArNTQsNyBAQCB2b2lkIElkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeTo6cmVt
b3ZlT2JzZXJ2ZXIoY29uc3QgQXRvbWljU3RyaW5nJiBpZCwgSWRUYXJnZXRPYgogCiAgICAgSWRU
b09ic2VydmVyU2V0TWFwOjppdGVyYXRvciBpdGVyID0gbV9yZWdpc3RyeS5maW5kKGlkLmltcGwo
KSk7CiAKLSAgICBPYnNlcnZlclNldCogc2V0ID0gaXRlci0+c2Vjb25kLmdldCgpOworICAgIE9i
c2VydmVyU2V0KiBzZXQgPSBpdGVyLT52YWx1ZS5nZXQoKTsKICAgICBzZXQtPnJlbW92ZShvYnNl
cnZlcik7CiAgICAgaWYgKHNldC0+aXNFbXB0eSgpICYmIHNldCAhPSBtX25vdGlmeWluZ09ic2Vy
dmVyc0luU2V0KQogICAgICAgICBtX3JlZ2lzdHJ5LnJlbW92ZShpdGVyKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25PYnNlcnZlckludGVyZXN0R3JvdXAuY3BwCmluZGV4
IDI0YzBjYjU4NjUxN2UwOGJjN2E4YjQwOTNmMjFkMzFlMGRiMmQ2NGUuLjRmYWQyMjA4MTg1M2Nk
ODE1MzRkMzAwZDE2MWQ4OGIxYWE1ZTk0YzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9NdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL011dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3VwLmNwcApAQCAtNjIsNyArNjIsNyBAQCBN
dXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cDo6TXV0YXRpb25PYnNlcnZlckludGVyZXN0R3Jv
dXAoSGFzaE1hcDxNdXRhdGlvbk9icwogYm9vbCBNdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91
cDo6aXNPbGRWYWx1ZVJlcXVlc3RlZCgpCiB7CiAgICAgZm9yIChIYXNoTWFwPE11dGF0aW9uT2Jz
ZXJ2ZXIqLCBNdXRhdGlvblJlY29yZERlbGl2ZXJ5T3B0aW9ucz46Oml0ZXJhdG9yIGl0ZXIgPSBt
X29ic2VydmVycy5iZWdpbigpOyBpdGVyICE9IG1fb2JzZXJ2ZXJzLmVuZCgpOyArK2l0ZXIpIHsK
LSAgICAgICAgaWYgKGhhc09sZFZhbHVlKGl0ZXItPnNlY29uZCkpCisgICAgICAgIGlmIChoYXNP
bGRWYWx1ZShpdGVyLT52YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtNzMsOCArNzMsOCBAQCB2b2lkIE11dGF0aW9uT2JzZXJ2ZXJJ
bnRlcmVzdEdyb3VwOjplbnF1ZXVlTXV0YXRpb25SZWNvcmQoUGFzc1JlZlB0cjxNdXRhdGlvblJl
YwogICAgIFJlZlB0cjxNdXRhdGlvblJlY29yZD4gbXV0YXRpb24gPSBwcnBNdXRhdGlvbjsKICAg
ICBSZWZQdHI8TXV0YXRpb25SZWNvcmQ+IG11dGF0aW9uV2l0aE51bGxPbGRWYWx1ZTsKICAgICBm
b3IgKEhhc2hNYXA8TXV0YXRpb25PYnNlcnZlciosIE11dGF0aW9uUmVjb3JkRGVsaXZlcnlPcHRp
b25zPjo6aXRlcmF0b3IgaXRlciA9IG1fb2JzZXJ2ZXJzLmJlZ2luKCk7IGl0ZXIgIT0gbV9vYnNl
cnZlcnMuZW5kKCk7ICsraXRlcikgewotICAgICAgICBNdXRhdGlvbk9ic2VydmVyKiBvYnNlcnZl
ciA9IGl0ZXItPmZpcnN0OwotICAgICAgICBpZiAoaGFzT2xkVmFsdWUoaXRlci0+c2Vjb25kKSkg
eworICAgICAgICBNdXRhdGlvbk9ic2VydmVyKiBvYnNlcnZlciA9IGl0ZXItPmtleTsKKyAgICAg
ICAgaWYgKGhhc09sZFZhbHVlKGl0ZXItPnZhbHVlKSkgewogICAgICAgICAgICAgb2JzZXJ2ZXIt
PmVucXVldWVNdXRhdGlvblJlY29yZChtdXRhdGlvbik7CiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCmluZGV4IDM1M2QyODNkMDM4ZjFhZDFlNGUxMzlhY2Q0
YThiMzQ2YzUzYTE4Y2MuLmM1NDBhNDRjOWQ2MjIwZGI1YjdjODI4MDg0ZGVhODBlYWZkZTBjNmYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vTm9kZS5jcHAKQEAgLTE5MSw3ICsxOTEsNyBAQCB2b2lkIE5vZGU6OmR1bXBTdGF0
aXN0aWNzKCkKICAgICAgICAgICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8
RWxlbWVudCo+KG5vZGUpOwogICAgICAgICAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBzaXplX3Q+
OjpBZGRSZXN1bHQgcmVzdWx0ID0gcGVyVGFnQ291bnQuYWRkKGVsZW1lbnQtPnRhZ05hbWUoKSwg
MSk7CiAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQrKzsKKyAgICAgICAgICAgICAgICAgICAg
cmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSsrOwogCiAgICAgICAgICAgICAgICAgaWYgKEVsZW1lbnRB
dHRyaWJ1dGVEYXRhKiBhdHRyaWJ1dGVEYXRhID0gZWxlbWVudC0+YXR0cmlidXRlRGF0YSgpKSB7
CiAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMgKz0gYXR0cmlidXRlRGF0YS0+bGVuZ3Ro
KCk7CkBAIC0yNzksNyArMjc5LDcgQEAgdm9pZCBOb2RlOjpkdW1wU3RhdGlzdGljcygpCiAKICAg
ICBwcmludGYoIkVsZW1lbnQgdGFnIG5hbWUgZGlzdGlidXRpb246XG4iKTsKICAgICBmb3IgKEhh
c2hNYXA8U3RyaW5nLCBzaXplX3Q+OjppdGVyYXRvciBpdCA9IHBlclRhZ0NvdW50LmJlZ2luKCk7
IGl0ICE9IHBlclRhZ0NvdW50LmVuZCgpOyArK2l0KQotICAgICAgICBwcmludGYoIiAgTnVtYmVy
IG9mIDwlcz4gdGFnczogJXp1XG4iLCBpdC0+Zmlyc3QudXRmOCgpLmRhdGEoKSwgaXQtPnNlY29u
ZCk7CisgICAgICAgIHByaW50ZigiICBOdW1iZXIgb2YgPCVzPiB0YWdzOiAlenVcbiIsIGl0LT5r
ZXkudXRmOCgpLmRhdGEoKSwgaXQtPnZhbHVlKTsKIAogICAgIHByaW50ZigiQXR0cmlidXRlczpc
biIpOwogICAgIHByaW50ZigiICBOdW1iZXIgb2YgQXR0cmlidXRlcyAobm9uLU5vZGUgYW5kIE5v
ZGUpOiAlenUgWyV6dV1cbiIsIGF0dHJpYnV0ZXMsIHNpemVvZihBdHRyaWJ1dGUpKTsKQEAgLTUx
Miw3ICs1MTIsNyBAQCB2b2lkIE5vZGU6OmNsZWFyUmFyZURhdGEoKQogICAgICAgICBOb2RlUmFy
ZURhdGE6Ok5vZGVSYXJlRGF0YU1hcCYgZGF0YU1hcCA9IE5vZGVSYXJlRGF0YTo6cmFyZURhdGFN
YXAoKTsKICAgICAgICAgTm9kZVJhcmVEYXRhOjpOb2RlUmFyZURhdGFNYXA6Oml0ZXJhdG9yIGl0
ID0gZGF0YU1hcC5maW5kKHRoaXMpOwogICAgICAgICBBU1NFUlQoaXQgIT0gZGF0YU1hcC5lbmQo
KSk7Ci0gICAgICAgIGRlbGV0ZSBpdC0+c2Vjb25kOworICAgICAgICBkZWxldGUgaXQtPnZhbHVl
OwogICAgICAgICBkYXRhTWFwLnJlbW92ZShpdCk7CiAgICAgfQogICAgIGNsZWFyRmxhZyhIYXNS
YXJlRGF0YUZsYWcpOwpAQCAtMjI3NSwxOCArMjI3NSwxOCBAQCB2b2lkIE5vZGVMaXN0c05vZGVE
YXRhOjppbnZhbGlkYXRlQ2FjaGVzKGNvbnN0IFF1YWxpZmllZE5hbWUqIGF0dHJOYW1lKQogewog
ICAgIE5vZGVMaXN0QXRvbWljTmFtZUNhY2hlTWFwOjpjb25zdF9pdGVyYXRvciBhdG9taWNOYW1l
Q2FjaGVFbmQgPSBtX2F0b21pY05hbWVDYWNoZXMuZW5kKCk7CiAgICAgZm9yIChOb2RlTGlzdEF0
b21pY05hbWVDYWNoZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2F0b21pY05hbWVDYWNoZXMu
YmVnaW4oKTsgaXQgIT0gYXRvbWljTmFtZUNhY2hlRW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vj
b25kLT5pbnZhbGlkYXRlQ2FjaGUoYXR0ck5hbWUpOworICAgICAgICBpdC0+dmFsdWUtPmludmFs
aWRhdGVDYWNoZShhdHRyTmFtZSk7CiAKICAgICBOb2RlTGlzdE5hbWVDYWNoZU1hcDo6Y29uc3Rf
aXRlcmF0b3IgbmFtZUNhY2hlRW5kID0gbV9uYW1lQ2FjaGVzLmVuZCgpOwogICAgIGZvciAoTm9k
ZUxpc3ROYW1lQ2FjaGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9uYW1lQ2FjaGVzLmJlZ2lu
KCk7IGl0ICE9IG5hbWVDYWNoZUVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+aW52YWxp
ZGF0ZUNhY2hlKGF0dHJOYW1lKTsKKyAgICAgICAgaXQtPnZhbHVlLT5pbnZhbGlkYXRlQ2FjaGUo
YXR0ck5hbWUpOwogCiAgICAgaWYgKGF0dHJOYW1lKQogICAgICAgICByZXR1cm47CiAKICAgICBU
YWdOb2RlTGlzdENhY2hlTlM6Oml0ZXJhdG9yIHRhZ0NhY2hlRW5kID0gbV90YWdOb2RlTGlzdENh
Y2hlTlMuZW5kKCk7CiAgICAgZm9yIChUYWdOb2RlTGlzdENhY2hlTlM6Oml0ZXJhdG9yIGl0ID0g
bV90YWdOb2RlTGlzdENhY2hlTlMuYmVnaW4oKTsgaXQgIT0gdGFnQ2FjaGVFbmQ7ICsraXQpCi0g
ICAgICAgIGl0LT5zZWNvbmQtPmludmFsaWRhdGVDYWNoZSgpOworICAgICAgICBpdC0+dmFsdWUt
PmludmFsaWRhdGVDYWNoZSgpOwogfQogCiB2b2lkIE5vZGU6OmdldFN1YnJlc291cmNlVVJMcyhM
aXN0SGFzaFNldDxLVVJMPiYgdXJscykgY29uc3QKQEAgLTI0NDMsNyArMjQ0Myw3IEBAIHZvaWQg
Tm9kZTo6Y29sbGVjdE1hdGNoaW5nT2JzZXJ2ZXJzRm9yTXV0YXRpb24oSGFzaE1hcDxNdXRhdGlv
bk9ic2VydmVyKiwgTXV0YXRpCiAgICAgICAgICAgICAgICAgTXV0YXRpb25SZWNvcmREZWxpdmVy
eU9wdGlvbnMgZGVsaXZlcnlPcHRpb25zID0gcmVnaXN0cmF0aW9uLT5kZWxpdmVyeU9wdGlvbnMo
KTsKICAgICAgICAgICAgICAgICBIYXNoTWFwPE11dGF0aW9uT2JzZXJ2ZXIqLCBNdXRhdGlvblJl
Y29yZERlbGl2ZXJ5T3B0aW9ucz46OkFkZFJlc3VsdCByZXN1bHQgPSBvYnNlcnZlcnMuYWRkKHJl
Z2lzdHJhdGlvbi0+b2JzZXJ2ZXIoKSwgZGVsaXZlcnlPcHRpb25zKTsKICAgICAgICAgICAgICAg
ICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICAgICAgICAgICAgICByZXN1bHQuaXRl
cmF0b3ItPnNlY29uZCB8PSBkZWxpdmVyeU9wdGlvbnM7CisgICAgICAgICAgICAgICAgICAgIHJl
c3VsdC5pdGVyYXRvci0+dmFsdWUgfD0gZGVsaXZlcnlPcHRpb25zOwogCiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KQEAgLTI0NTYsNyArMjQ1Niw3IEBAIHZvaWQgTm9kZTo6Y29sbGVjdE1hdGNo
aW5nT2JzZXJ2ZXJzRm9yTXV0YXRpb24oSGFzaE1hcDxNdXRhdGlvbk9ic2VydmVyKiwgTXV0YXRp
CiAgICAgICAgICAgICAgICAgTXV0YXRpb25SZWNvcmREZWxpdmVyeU9wdGlvbnMgZGVsaXZlcnlP
cHRpb25zID0gcmVnaXN0cmF0aW9uLT5kZWxpdmVyeU9wdGlvbnMoKTsKICAgICAgICAgICAgICAg
ICBIYXNoTWFwPE11dGF0aW9uT2JzZXJ2ZXIqLCBNdXRhdGlvblJlY29yZERlbGl2ZXJ5T3B0aW9u
cz46OkFkZFJlc3VsdCByZXN1bHQgPSBvYnNlcnZlcnMuYWRkKHJlZ2lzdHJhdGlvbi0+b2JzZXJ2
ZXIoKSwgZGVsaXZlcnlPcHRpb25zKTsKICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5pc05l
d0VudHJ5KQotICAgICAgICAgICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCB8PSBk
ZWxpdmVyeU9wdGlvbnM7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFs
dWUgfD0gZGVsaXZlcnlPcHRpb25zOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGVSYXJlRGF0YS5oIGIvU291cmNlL1dl
YkNvcmUvZG9tL05vZGVSYXJlRGF0YS5oCmluZGV4IDY3M2ExMTIzMTRmODUxZWM4NmY2NTU5OGU0
YTU3MDIyZTAxNzNlZTEuLmUyOTZkNzE1MDQ0YTY3NDIwZjk0NTBlODJiNjcxZDc1ZmIzMTlkZjMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRhLmgKQEAgLTY4LDEwICs2OCwxMCBAQCBwdWJsaWM6
CiAgICAgewogICAgICAgICBOb2RlTGlzdEF0b21pY05hbWVDYWNoZU1hcDo6QWRkUmVzdWx0IHJl
c3VsdCA9IG1fYXRvbWljTmFtZUNhY2hlcy5hZGQobmFtZWROb2RlTGlzdEtleShsaXN0VHlwZSwg
bmFtZSksIDApOwogICAgICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFQqPihyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7CisgICAgICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VCo+KHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwogCiAg
ICAgICAgIFJlZlB0cjxUPiBsaXN0ID0gVDo6Y3JlYXRlKG5vZGUsIG5hbWUpOwotICAgICAgICBy
ZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IGxpc3QuZ2V0KCk7CisgICAgICAgIHJlc3VsdC5pdGVy
YXRvci0+dmFsdWUgPSBsaXN0LmdldCgpOwogICAgICAgICByZXR1cm4gbGlzdC5yZWxlYXNlKCk7
CiAgICAgfQogCkBAIC04MCwxMCArODAsMTAgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgTm9k
ZUxpc3ROYW1lQ2FjaGVNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX25hbWVDYWNoZXMuYWRkKG5h
bWVkTm9kZUxpc3RLZXkobGlzdFR5cGUsIG5hbWUpLCAwKTsKICAgICAgICAgaWYgKCFyZXN1bHQu
aXNOZXdFbnRyeSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUKj4ocmVzdWx0Lml0
ZXJhdG9yLT5zZWNvbmQpOworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQqPihyZXN1
bHQuaXRlcmF0b3ItPnZhbHVlKTsKIAogICAgICAgICBSZWZQdHI8VD4gbGlzdCA9IFQ6OmNyZWF0
ZShub2RlLCBuYW1lKTsKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBsaXN0Lmdl
dCgpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gbGlzdC5nZXQoKTsKICAgICAg
ICAgcmV0dXJuIGxpc3QucmVsZWFzZSgpOwogICAgIH0KIApAQCAtOTIsMTAgKzkyLDEwIEBAIHB1
YmxpYzoKICAgICAgICAgUXVhbGlmaWVkTmFtZSBuYW1lKG51bGxBdG9tLCBsb2NhbE5hbWUsIG5h
bWVzcGFjZVVSSSk7CiAgICAgICAgIFRhZ05vZGVMaXN0Q2FjaGVOUzo6QWRkUmVzdWx0IHJlc3Vs
dCA9IG1fdGFnTm9kZUxpc3RDYWNoZU5TLmFkZChuYW1lLCAwKTsKICAgICAgICAgaWYgKCFyZXN1
bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnNlY29u
ZDsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogCiAgICAgICAg
IFJlZlB0cjxUYWdOb2RlTGlzdD4gbGlzdCA9IFRhZ05vZGVMaXN0OjpjcmVhdGUobm9kZSwgbmFt
ZXNwYWNlVVJJLCBsb2NhbE5hbWUpOwotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9
IGxpc3QuZ2V0KCk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBsaXN0LmdldCgp
OwogICAgICAgICByZXR1cm4gbGlzdC5yZWxlYXNlKCk7CiAgICAgfQogCkBAIC0xMzYsMjEgKzEz
NiwyMSBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChvbGREb2N1bWVudCAhPSBuZXdEb2N1bWVudCkg
ewogICAgICAgICAgICAgTm9kZUxpc3RBdG9taWNOYW1lQ2FjaGVNYXA6OmNvbnN0X2l0ZXJhdG9y
IGF0b21pY05hbWVDYWNoZUVuZCA9IG1fYXRvbWljTmFtZUNhY2hlcy5lbmQoKTsKICAgICAgICAg
ICAgIGZvciAoTm9kZUxpc3RBdG9taWNOYW1lQ2FjaGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bV9hdG9taWNOYW1lQ2FjaGVzLmJlZ2luKCk7IGl0ICE9IGF0b21pY05hbWVDYWNoZUVuZDsgKytp
dCkgewotICAgICAgICAgICAgICAgIER5bmFtaWNTdWJ0cmVlTm9kZUxpc3QqIGxpc3QgPSBpdC0+
c2Vjb25kOworICAgICAgICAgICAgICAgIER5bmFtaWNTdWJ0cmVlTm9kZUxpc3QqIGxpc3QgPSBp
dC0+dmFsdWU7CiAgICAgICAgICAgICAgICAgb2xkRG9jdW1lbnQtPnVucmVnaXN0ZXJOb2RlTGlz
dENhY2hlKGxpc3QpOwogICAgICAgICAgICAgICAgIG5ld0RvY3VtZW50LT5yZWdpc3Rlck5vZGVM
aXN0Q2FjaGUobGlzdCk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIE5vZGVMaXN0TmFt
ZUNhY2hlTWFwOjpjb25zdF9pdGVyYXRvciBuYW1lQ2FjaGVFbmQgPSBtX25hbWVDYWNoZXMuZW5k
KCk7CiAgICAgICAgICAgICBmb3IgKE5vZGVMaXN0TmFtZUNhY2hlTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fbmFtZUNhY2hlcy5iZWdpbigpOyBpdCAhPSBuYW1lQ2FjaGVFbmQ7ICsraXQpIHsK
LSAgICAgICAgICAgICAgICBEeW5hbWljU3VidHJlZU5vZGVMaXN0KiBsaXN0ID0gaXQtPnNlY29u
ZDsKKyAgICAgICAgICAgICAgICBEeW5hbWljU3VidHJlZU5vZGVMaXN0KiBsaXN0ID0gaXQtPnZh
bHVlOwogICAgICAgICAgICAgICAgIG9sZERvY3VtZW50LT51bnJlZ2lzdGVyTm9kZUxpc3RDYWNo
ZShsaXN0KTsKICAgICAgICAgICAgICAgICBuZXdEb2N1bWVudC0+cmVnaXN0ZXJOb2RlTGlzdENh
Y2hlKGxpc3QpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBUYWdOb2RlTGlzdENhY2hl
TlM6OmNvbnN0X2l0ZXJhdG9yIHRhZ0VuZCA9IG1fdGFnTm9kZUxpc3RDYWNoZU5TLmVuZCgpOwog
ICAgICAgICAgICAgZm9yIChUYWdOb2RlTGlzdENhY2hlTlM6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bV90YWdOb2RlTGlzdENhY2hlTlMuYmVnaW4oKTsgaXQgIT0gdGFnRW5kOyArK2l0KSB7Ci0gICAg
ICAgICAgICAgICAgRHluYW1pY1N1YnRyZWVOb2RlTGlzdCogbGlzdCA9IGl0LT5zZWNvbmQ7Cisg
ICAgICAgICAgICAgICAgRHluYW1pY1N1YnRyZWVOb2RlTGlzdCogbGlzdCA9IGl0LT52YWx1ZTsK
ICAgICAgICAgICAgICAgICBBU1NFUlQoIWxpc3QtPmlzUm9vdGVkQXREb2N1bWVudCgpKTsKICAg
ICAgICAgICAgICAgICBvbGREb2N1bWVudC0+dW5yZWdpc3Rlck5vZGVMaXN0Q2FjaGUobGlzdCk7
CiAgICAgICAgICAgICAgICAgbmV3RG9jdW1lbnQtPnJlZ2lzdGVyTm9kZUxpc3RDYWNoZShsaXN0
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24u
Y3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHAKaW5kZXgg
ZWYxM2I0NjkwYWY3M2JhYmUzNDY4MWI4YzQ2ZjA2ZGI0MDIzYTZmMy4uYjZiNDQ0ODAxNmRmYzA2
YjQyN2U5N2EyZjc4N2E2OTI4NGQ1OTYxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1Byb2Nl
c3NpbmdJbnN0cnVjdGlvbi5jcHAKQEAgLTExNyw3ICsxMTcsNyBAQCB2b2lkIFByb2Nlc3NpbmdJ
bnN0cnVjdGlvbjo6Y2hlY2tTdHlsZVNoZWV0KCkKICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFN0
cmluZz46OmNvbnN0X2l0ZXJhdG9yIGkgPSBhdHRycy5maW5kKCJ0eXBlIik7CiAgICAgICAgIFN0
cmluZyB0eXBlOwogICAgICAgICBpZiAoaSAhPSBhdHRycy5lbmQoKSkKLSAgICAgICAgICAgIHR5
cGUgPSBpLT5zZWNvbmQ7CisgICAgICAgICAgICB0eXBlID0gaS0+dmFsdWU7CiAKICAgICAgICAg
bV9pc0NTUyA9IHR5cGUuaXNFbXB0eSgpIHx8IHR5cGUgPT0gInRleHQvY3NzIjsKICNpZiBFTkFC
TEUoWFNMVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25D
b250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNw
cAppbmRleCA5MjQ0NWNhODBkYWY2MzMyMzlkMmY3OWNlZTk4ZGQ5ZGQ0NDFiMzIzLi41MzViNTcw
YjVkN2RlOWY0YWY5MzU4M2U3YzcxZDEyYjJkNzUzNWE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwCkBAIC0xNzMsOSArMTczLDkgQEAgYm9vbCBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0OjpjYW5TdXNwZW5kQWN0aXZlRE9NT2JqZWN0cygpCiAgICAg
bV9pdGVyYXRpbmdBY3RpdmVET01PYmplY3RzID0gdHJ1ZTsKICAgICBIYXNoTWFwPEFjdGl2ZURP
TU9iamVjdCosIHZvaWQqPjo6aXRlcmF0b3IgYWN0aXZlT2JqZWN0c0VuZCA9IG1fYWN0aXZlRE9N
T2JqZWN0cy5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8QWN0aXZlRE9NT2JqZWN0Kiwgdm9pZCo+
OjppdGVyYXRvciBpdGVyID0gbV9hY3RpdmVET01PYmplY3RzLmJlZ2luKCk7IGl0ZXIgIT0gYWN0
aXZlT2JqZWN0c0VuZDsgKytpdGVyKSB7Ci0gICAgICAgIEFTU0VSVChpdGVyLT5maXJzdC0+c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpID09IHRoaXMpOwotICAgICAgICBBU1NFUlQoaXRlci0+Zmly
c3QtPnN1c3BlbmRJZk5lZWRlZENhbGxlZCgpKTsKLSAgICAgICAgaWYgKCFpdGVyLT5maXJzdC0+
Y2FuU3VzcGVuZCgpKSB7CisgICAgICAgIEFTU0VSVChpdGVyLT5rZXktPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKSA9PSB0aGlzKTsKKyAgICAgICAgQVNTRVJUKGl0ZXItPmtleS0+c3VzcGVuZElm
TmVlZGVkQ2FsbGVkKCkpOworICAgICAgICBpZiAoIWl0ZXItPmtleS0+Y2FuU3VzcGVuZCgpKSB7
CiAgICAgICAgICAgICBtX2l0ZXJhdGluZ0FjdGl2ZURPTU9iamVjdHMgPSBmYWxzZTsKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpAQCAtMTkwLDkgKzE5MCw5IEBAIHZvaWQg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6c3VzcGVuZEFjdGl2ZURPTU9iamVjdHMoQWN0aXZlRE9N
T2JqZWN0OjpSZWFzb25Gb3JTCiAgICAgbV9pdGVyYXRpbmdBY3RpdmVET01PYmplY3RzID0gdHJ1
ZTsKICAgICBIYXNoTWFwPEFjdGl2ZURPTU9iamVjdCosIHZvaWQqPjo6aXRlcmF0b3IgYWN0aXZl
T2JqZWN0c0VuZCA9IG1fYWN0aXZlRE9NT2JqZWN0cy5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8
QWN0aXZlRE9NT2JqZWN0Kiwgdm9pZCo+OjppdGVyYXRvciBpdGVyID0gbV9hY3RpdmVET01PYmpl
Y3RzLmJlZ2luKCk7IGl0ZXIgIT0gYWN0aXZlT2JqZWN0c0VuZDsgKytpdGVyKSB7Ci0gICAgICAg
IEFTU0VSVChpdGVyLT5maXJzdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpID09IHRoaXMpOwot
ICAgICAgICBBU1NFUlQoaXRlci0+Zmlyc3QtPnN1c3BlbmRJZk5lZWRlZENhbGxlZCgpKTsKLSAg
ICAgICAgaXRlci0+Zmlyc3QtPnN1c3BlbmQod2h5KTsKKyAgICAgICAgQVNTRVJUKGl0ZXItPmtl
eS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpID09IHRoaXMpOworICAgICAgICBBU1NFUlQoaXRl
ci0+a2V5LT5zdXNwZW5kSWZOZWVkZWRDYWxsZWQoKSk7CisgICAgICAgIGl0ZXItPmtleS0+c3Vz
cGVuZCh3aHkpOwogICAgIH0KICAgICBtX2l0ZXJhdGluZ0FjdGl2ZURPTU9iamVjdHMgPSBmYWxz
ZTsKICAgICBtX2FjdGl2ZURPTU9iamVjdHNBcmVTdXNwZW5kZWQgPSB0cnVlOwpAQCAtMjA2LDkg
KzIwNiw5IEBAIHZvaWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6cmVzdW1lQWN0aXZlRE9NT2Jq
ZWN0cygpCiAgICAgbV9pdGVyYXRpbmdBY3RpdmVET01PYmplY3RzID0gdHJ1ZTsKICAgICBIYXNo
TWFwPEFjdGl2ZURPTU9iamVjdCosIHZvaWQqPjo6aXRlcmF0b3IgYWN0aXZlT2JqZWN0c0VuZCA9
IG1fYWN0aXZlRE9NT2JqZWN0cy5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8QWN0aXZlRE9NT2Jq
ZWN0Kiwgdm9pZCo+OjppdGVyYXRvciBpdGVyID0gbV9hY3RpdmVET01PYmplY3RzLmJlZ2luKCk7
IGl0ZXIgIT0gYWN0aXZlT2JqZWN0c0VuZDsgKytpdGVyKSB7Ci0gICAgICAgIEFTU0VSVChpdGVy
LT5maXJzdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpID09IHRoaXMpOwotICAgICAgICBBU1NF
UlQoaXRlci0+Zmlyc3QtPnN1c3BlbmRJZk5lZWRlZENhbGxlZCgpKTsKLSAgICAgICAgaXRlci0+
Zmlyc3QtPnJlc3VtZSgpOworICAgICAgICBBU1NFUlQoaXRlci0+a2V5LT5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCkgPT0gdGhpcyk7CisgICAgICAgIEFTU0VSVChpdGVyLT5rZXktPnN1c3BlbmRJ
Zk5lZWRlZENhbGxlZCgpKTsKKyAgICAgICAgaXRlci0+a2V5LT5yZXN1bWUoKTsKICAgICB9CiAg
ICAgbV9pdGVyYXRpbmdBY3RpdmVET01PYmplY3RzID0gZmFsc2U7CiB9CkBAIC0yMjAsOSArMjIw
LDkgQEAgdm9pZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpzdG9wQWN0aXZlRE9NT2JqZWN0cygp
CiAgICAgbV9pdGVyYXRpbmdBY3RpdmVET01PYmplY3RzID0gdHJ1ZTsKICAgICBIYXNoTWFwPEFj
dGl2ZURPTU9iamVjdCosIHZvaWQqPjo6aXRlcmF0b3IgYWN0aXZlT2JqZWN0c0VuZCA9IG1fYWN0
aXZlRE9NT2JqZWN0cy5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8QWN0aXZlRE9NT2JqZWN0Kiwg
dm9pZCo+OjppdGVyYXRvciBpdGVyID0gbV9hY3RpdmVET01PYmplY3RzLmJlZ2luKCk7IGl0ZXIg
IT0gYWN0aXZlT2JqZWN0c0VuZDsgKytpdGVyKSB7Ci0gICAgICAgIEFTU0VSVChpdGVyLT5maXJz
dC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpID09IHRoaXMpOwotICAgICAgICBBU1NFUlQoaXRl
ci0+Zmlyc3QtPnN1c3BlbmRJZk5lZWRlZENhbGxlZCgpKTsKLSAgICAgICAgaXRlci0+Zmlyc3Qt
PnN0b3AoKTsKKyAgICAgICAgQVNTRVJUKGl0ZXItPmtleS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpID09IHRoaXMpOworICAgICAgICBBU1NFUlQoaXRlci0+a2V5LT5zdXNwZW5kSWZOZWVkZWRD
YWxsZWQoKSk7CisgICAgICAgIGl0ZXItPmtleS0+c3RvcCgpOwogICAgIH0KICAgICBtX2l0ZXJh
dGluZ0FjdGl2ZURPTU9iamVjdHMgPSBmYWxzZTsKIApAQCAtMzgwLDcgKzM4MCw3IEBAIHZvaWQg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6YWRqdXN0TWluaW11bVRpbWVySW50ZXJ2YWwoZG91Ymxl
IG9sZE1pbmltdW1UaW1lckluCiB7CiAgICAgaWYgKG1pbmltdW1UaW1lckludGVydmFsKCkgIT0g
b2xkTWluaW11bVRpbWVySW50ZXJ2YWwpIHsKICAgICAgICAgZm9yIChUaW1lb3V0TWFwOjppdGVy
YXRvciBpdGVyID0gbV90aW1lb3V0cy5iZWdpbigpOyBpdGVyICE9IG1fdGltZW91dHMuZW5kKCk7
ICsraXRlcikgewotICAgICAgICAgICAgRE9NVGltZXIqIHRpbWVyID0gaXRlci0+c2Vjb25kOwor
ICAgICAgICAgICAgRE9NVGltZXIqIHRpbWVyID0gaXRlci0+dmFsdWU7CiAgICAgICAgICAgICB0
aW1lci0+YWRqdXN0TWluaW11bVRpbWVySW50ZXJ2YWwob2xkTWluaW11bVRpbWVySW50ZXJ2YWwp
OwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NlbGVj
dG9yUXVlcnkuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1NlbGVjdG9yUXVlcnkuY3BwCmluZGV4
IDc4NjJhZWZjYzNhYmE4ZTRiOTJjODQzMzJiNzRhOTYwM2NhZTcyMjUuLmVjYjVhMTYwZmIyNmZh
YzRhN2QyNzE4MWEwYzI0NGViZDA0Y2U0NTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9TZWxlY3RvclF1ZXJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2VsZWN0b3JRdWVy
eS5jcHAKQEAgLTE2OSw3ICsxNjksNyBAQCBTZWxlY3RvclF1ZXJ5KiBTZWxlY3RvclF1ZXJ5Q2Fj
aGU6OmFkZChjb25zdCBBdG9taWNTdHJpbmcmIHNlbGVjdG9ycywgRG9jdW1lbnQqCiB7CiAgICAg
SGFzaE1hcDxBdG9taWNTdHJpbmcsIE93blB0cjxTZWxlY3RvclF1ZXJ5PiA+OjppdGVyYXRvciBp
dCA9IG1fZW50cmllcy5maW5kKHNlbGVjdG9ycyk7CiAgICAgaWYgKGl0ICE9IG1fZW50cmllcy5l
bmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIHJldHVybiBp
dC0+dmFsdWUuZ2V0KCk7CiAKICAgICBDU1NQYXJzZXIgcGFyc2VyKGRvY3VtZW50KTsKICAgICBD
U1NTZWxlY3Rvckxpc3Qgc2VsZWN0b3JMaXN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL1NwYWNlU3BsaXRTdHJpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1NwYWNlU3BsaXRT
dHJpbmcuY3BwCmluZGV4IDljY2U3ZDk1YjVlMTA0NDNjMDNlZGE1YjcyZjExMmM1NzA1MmU1MTIu
LjFkYzFmYjBkZGUxZjAyM2YzZjhhNjUzYjIzYWMzZDg3MzhlOGMzNDkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9TcGFjZVNwbGl0U3RyaW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vU3BhY2VTcGxpdFN0cmluZy5jcHAKQEAgLTE1MCw3ICsxNTAsNyBAQCBTcGFjZVNwbGl0
U3RyaW5nRGF0YTo6flNwYWNlU3BsaXRTdHJpbmdEYXRhKCkKIAogUGFzc1JlZlB0cjxTcGFjZVNw
bGl0U3RyaW5nRGF0YT4gU3BhY2VTcGxpdFN0cmluZ0RhdGE6OmNyZWF0ZShjb25zdCBBdG9taWNT
dHJpbmcmIHN0cmluZykKIHsKLSAgICBTcGFjZVNwbGl0U3RyaW5nRGF0YSomIGRhdGEgPSBzaGFy
ZWREYXRhTWFwKCkuYWRkKHN0cmluZywgMCkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBTcGFjZVNw
bGl0U3RyaW5nRGF0YSomIGRhdGEgPSBzaGFyZWREYXRhTWFwKCkuYWRkKHN0cmluZywgMCkuaXRl
cmF0b3ItPnZhbHVlOwogICAgIGlmICghZGF0YSkgewogICAgICAgICBkYXRhID0gbmV3IFNwYWNl
U3BsaXRTdHJpbmdEYXRhKHN0cmluZyk7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihkYXRhKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcAppbmRleCAxMmZlYjJhZjQyYWEzZTY5OTgx
NjQxMWUwZTIxMTY5MjUyNzcwMmI1Li5hMDZkMjk4NWEyMzI4NGU5YmI3NWI1M2NmZTk1ZWI2YjM5
MjJiZGRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwCkBAIC0yNzksMTQgKzI3
OSwxNCBAQCB2b2lkIFN0eWxlZEVsZW1lbnQ6OnVwZGF0ZUF0dHJpYnV0ZVN0eWxlKCkKICAgICBQ
cmVzZW50YXRpb25BdHRyaWJ1dGVDYWNoZTo6aXRlcmF0b3IgY2FjaGVJdGVyYXRvcjsKICAgICBp
ZiAoY2FjaGVIYXNoKSB7CiAgICAgICAgIGNhY2hlSXRlcmF0b3IgPSBwcmVzZW50YXRpb25BdHRy
aWJ1dGVDYWNoZSgpLmFkZChjYWNoZUhhc2gsIG51bGxwdHIpLml0ZXJhdG9yOwotICAgICAgICBp
ZiAoY2FjaGVJdGVyYXRvci0+c2Vjb25kICYmIGNhY2hlSXRlcmF0b3ItPnNlY29uZC0+a2V5ICE9
IGNhY2hlS2V5KQorICAgICAgICBpZiAoY2FjaGVJdGVyYXRvci0+dmFsdWUgJiYgY2FjaGVJdGVy
YXRvci0+dmFsdWUtPmtleSAhPSBjYWNoZUtleSkKICAgICAgICAgICAgIGNhY2hlSGFzaCA9IDA7
CiAgICAgfSBlbHNlCiAgICAgICAgIGNhY2hlSXRlcmF0b3IgPSBwcmVzZW50YXRpb25BdHRyaWJ1
dGVDYWNoZSgpLmVuZCgpOwogCiAgICAgUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IHN0eWxlOwot
ICAgIGlmIChjYWNoZUhhc2ggJiYgY2FjaGVJdGVyYXRvci0+c2Vjb25kKSB7Ci0gICAgICAgIHN0
eWxlID0gY2FjaGVJdGVyYXRvci0+c2Vjb25kLT52YWx1ZTsKKyAgICBpZiAoY2FjaGVIYXNoICYm
IGNhY2hlSXRlcmF0b3ItPnZhbHVlKSB7CisgICAgICAgIHN0eWxlID0gY2FjaGVJdGVyYXRvci0+
dmFsdWUtPnZhbHVlOwogICAgICAgICBwcmVzZW50YXRpb25BdHRyaWJ1dGVDYWNoZUNsZWFuZXIo
KS5kaWRIaXRQcmVzZW50YXRpb25BdHRyaWJ1dGVDYWNoZSgpOwogICAgIH0gZWxzZSB7CiAgICAg
ICAgIHN0eWxlID0gU3R5bGVQcm9wZXJ0eVNldDo6Y3JlYXRlKGlzU1ZHRWxlbWVudCgpID8gU1ZH
QXR0cmlidXRlTW9kZSA6IENTU1F1aXJrc01vZGUpOwpAQCAtMzAwLDcgKzMwMCw3IEBAIHZvaWQg
U3R5bGVkRWxlbWVudDo6dXBkYXRlQXR0cmlidXRlU3R5bGUoKQogCiAgICAgYXR0cmlidXRlRGF0
YSgpLT5zZXRBdHRyaWJ1dGVTdHlsZShzdHlsZS0+aXNFbXB0eSgpID8gMCA6IHN0eWxlKTsKIAot
ICAgIGlmICghY2FjaGVIYXNoIHx8IGNhY2hlSXRlcmF0b3ItPnNlY29uZCkKKyAgICBpZiAoIWNh
Y2hlSGFzaCB8fCBjYWNoZUl0ZXJhdG9yLT52YWx1ZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
T3duUHRyPFByZXNlbnRhdGlvbkF0dHJpYnV0ZUNhY2hlRW50cnk+IG5ld0VudHJ5ID0gYWRvcHRQ
dHIobmV3IFByZXNlbnRhdGlvbkF0dHJpYnV0ZUNhY2hlRW50cnkpOwpAQCAtMzEzLDcgKzMxMyw3
IEBAIHZvaWQgU3R5bGVkRWxlbWVudDo6dXBkYXRlQXR0cmlidXRlU3R5bGUoKQogICAgICAgICBw
cmVzZW50YXRpb25BdHRyaWJ1dGVDYWNoZSgpLmNsZWFyKCk7CiAgICAgICAgIHByZXNlbnRhdGlv
bkF0dHJpYnV0ZUNhY2hlKCkuc2V0KGNhY2hlSGFzaCwgbmV3RW50cnkucmVsZWFzZSgpKTsKICAg
ICB9IGVsc2UKLSAgICAgICAgY2FjaGVJdGVyYXRvci0+c2Vjb25kID0gbmV3RW50cnkucmVsZWFz
ZSgpOworICAgICAgICBjYWNoZUl0ZXJhdG9yLT52YWx1ZSA9IG5ld0VudHJ5LnJlbGVhc2UoKTsK
IH0KIAogdm9pZCBTdHlsZWRFbGVtZW50OjphZGRQcm9wZXJ0eVRvQXR0cmlidXRlU3R5bGUoU3R5
bGVQcm9wZXJ0eVNldCogc3R5bGUsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgaW50IGlkZW50
aWZpZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9BbHRlcm5hdGl2
ZVRleHRVSUNvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9BbHRlcm5h
dGl2ZVRleHRVSUNvbnRyb2xsZXIubW0KaW5kZXggOTk5MTZjMWUwMGY0NDkyMmFhN2ViYzZjZmIw
MGZjNDk3NjhkNDQzYi4uNmNhNWQ1ZjAyOWM5OTE2OTMzYjgyODlkMTQ1ZjBkMTIxYzZkNTY0NiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvQWx0ZXJuYXRpdmVUZXh0VUlD
b250cm9sbGVyLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0FsdGVybmF0aXZl
VGV4dFVJQ29udHJvbGxlci5tbQpAQCAtNTAsNyArNTAsNyBAQCBOU1RleHRBbHRlcm5hdGl2ZXMq
IEFsdGVybmF0aXZlVGV4dFVJQ29udHJvbGxlcjo6QWxlcm5hdGl2ZVRleHRDb250ZXh0Q29udHJv
bGxlcgogICAgIEhhc2hNYXBUeXBlOjpjb25zdF9pdGVyYXRvciBpdHIgPSBtX2FsdGVybmF0aXZl
c09iamVjdE1hcC5maW5kKGNvbnRleHQpOwogICAgIGlmIChpdHIgPT0gbV9hbHRlcm5hdGl2ZXNP
YmplY3RNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIHJldHVybiBpdHItPnNl
Y29uZC5nZXQoKTsKKyAgICByZXR1cm4gaXRyLT52YWx1ZS5nZXQoKTsKIH0KIAogdm9pZCBBbHRl
cm5hdGl2ZVRleHRVSUNvbnRyb2xsZXI6OkFsZXJuYXRpdmVUZXh0Q29udGV4dENvbnRyb2xsZXI6
OnJlbW92ZUFsdGVybmF0aXZlc0ZvckNvbnRleHQodWludDY0X3QgY29udGV4dCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9Gb3JtQ29udHJvbGxlci5jcHAKaW5kZXggZmJmZTdiNzE0NGUzMWZlOWU2NjcwZWJk
MTE2YWVjY2FjMzZlMTZlNy4uN2Y4N2I5N2ZmYzg3ZDMzNzZmOTgzYjM2MzkyZjg3NWUwNzc5NTZj
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9Gb3JtQ29udHJvbGxlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9Gb3JtQ29udHJvbGxlci5jcHAKQEAgLTIyOCw4ICsyMjgs
OCBAQCB2b2lkIFNhdmVkRm9ybVN0YXRlOjpzZXJpYWxpemVUbyhWZWN0b3I8U3RyaW5nPiYgc3Rh
dGVWZWN0b3IpIGNvbnN0CiB7CiAgICAgc3RhdGVWZWN0b3IuYXBwZW5kKFN0cmluZzo6bnVtYmVy
KG1fY29udHJvbFN0YXRlQ291bnQpKTsKICAgICBmb3IgKEZvcm1FbGVtZW50U3RhdGVNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbV9zdGF0ZUZvck5ld0Zvcm1FbGVtZW50cy5iZWdpbigpOyBpdCAh
PSBtX3N0YXRlRm9yTmV3Rm9ybUVsZW1lbnRzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0
IEZvcm1FbGVtZW50S2V5JiBrZXkgPSBpdC0+Zmlyc3Q7Ci0gICAgICAgIGNvbnN0IERlcXVlPEZv
cm1Db250cm9sU3RhdGU+JiBxdWV1ZSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIGNvbnN0IEZvcm1F
bGVtZW50S2V5JiBrZXkgPSBpdC0+a2V5OworICAgICAgICBjb25zdCBEZXF1ZTxGb3JtQ29udHJv
bFN0YXRlPiYgcXVldWUgPSBpdC0+dmFsdWU7CiAgICAgICAgIGZvciAoRGVxdWU8Rm9ybUNvbnRy
b2xTdGF0ZT46OmNvbnN0X2l0ZXJhdG9yIHF1ZUl0ZXJhdG9yID0gcXVldWUuYmVnaW4oKTsgcXVl
SXRlcmF0b3IgIT0gcXVldWUuZW5kKCk7ICsrcXVlSXRlcmF0b3IpIHsKICAgICAgICAgICAgIHN0
YXRlVmVjdG9yLmFwcGVuZChrZXkubmFtZSgpKTsKICAgICAgICAgICAgIHN0YXRlVmVjdG9yLmFw
cGVuZChrZXkudHlwZSgpKTsKQEAgLTI0Myw3ICsyNDMsNyBAQCB2b2lkIFNhdmVkRm9ybVN0YXRl
OjphcHBlbmRDb250cm9sU3RhdGUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBjb25zdCBBdG9t
aWNTdAogICAgIEZvcm1FbGVtZW50S2V5IGtleShuYW1lLmltcGwoKSwgdHlwZS5pbXBsKCkpOwog
ICAgIEZvcm1FbGVtZW50U3RhdGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zdGF0ZUZvck5ld0Zvcm1F
bGVtZW50cy5maW5kKGtleSk7CiAgICAgaWYgKGl0ICE9IG1fc3RhdGVGb3JOZXdGb3JtRWxlbWVu
dHMuZW5kKCkpCi0gICAgICAgIGl0LT5zZWNvbmQuYXBwZW5kKHN0YXRlKTsKKyAgICAgICAgaXQt
PnZhbHVlLmFwcGVuZChzdGF0ZSk7CiAgICAgZWxzZSB7CiAgICAgICAgIERlcXVlPEZvcm1Db250
cm9sU3RhdGU+IHN0YXRlTGlzdDsKICAgICAgICAgc3RhdGVMaXN0LmFwcGVuZChzdGF0ZSk7CkBA
IC0yNTksMTAgKzI1OSwxMCBAQCBGb3JtQ29udHJvbFN0YXRlIFNhdmVkRm9ybVN0YXRlOjp0YWtl
Q29udHJvbFN0YXRlKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgY29ucwogICAgIEZvcm1FbGVt
ZW50U3RhdGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zdGF0ZUZvck5ld0Zvcm1FbGVtZW50cy5maW5k
KEZvcm1FbGVtZW50S2V5KG5hbWUuaW1wbCgpLCB0eXBlLmltcGwoKSkpOwogICAgIGlmIChpdCA9
PSBtX3N0YXRlRm9yTmV3Rm9ybUVsZW1lbnRzLmVuZCgpKQogICAgICAgICByZXR1cm4gRm9ybUNv
bnRyb2xTdGF0ZSgpOwotICAgIEFTU0VSVChpdC0+c2Vjb25kLnNpemUoKSk7Ci0gICAgRm9ybUNv
bnRyb2xTdGF0ZSBzdGF0ZSA9IGl0LT5zZWNvbmQudGFrZUZpcnN0KCk7CisgICAgQVNTRVJUKGl0
LT52YWx1ZS5zaXplKCkpOworICAgIEZvcm1Db250cm9sU3RhdGUgc3RhdGUgPSBpdC0+dmFsdWUu
dGFrZUZpcnN0KCk7CiAgICAgbV9jb250cm9sU3RhdGVDb3VudC0tOwotICAgIGlmICghaXQtPnNl
Y29uZC5zaXplKCkpCisgICAgaWYgKCFpdC0+dmFsdWUuc2l6ZSgpKQogICAgICAgICBtX3N0YXRl
Rm9yTmV3Rm9ybUVsZW1lbnRzLnJlbW92ZShpdCk7CiAgICAgcmV0dXJuIHN0YXRlOwogfQpAQCAt
MjcxLDEwICsyNzEsMTAgQEAgVmVjdG9yPFN0cmluZz4gU2F2ZWRGb3JtU3RhdGU6OmdldFJlZmVy
ZW5jZWRGaWxlUGF0aHMoKSBjb25zdAogewogICAgIFZlY3RvcjxTdHJpbmc+IHRvUmV0dXJuOwog
ICAgIGZvciAoRm9ybUVsZW1lbnRTdGF0ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3N0YXRl
Rm9yTmV3Rm9ybUVsZW1lbnRzLmJlZ2luKCk7IGl0ICE9IG1fc3RhdGVGb3JOZXdGb3JtRWxlbWVu
dHMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgY29uc3QgRm9ybUVsZW1lbnRLZXkmIGtleSA9IGl0
LT5maXJzdDsKKyAgICAgICAgY29uc3QgRm9ybUVsZW1lbnRLZXkmIGtleSA9IGl0LT5rZXk7CiAg
ICAgICAgIGlmIChBdG9taWNTdHJpbmcoa2V5LnR5cGUoKSkgIT0gQXRvbWljU3RyaW5nKCJmaWxl
IikpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgY29uc3QgRGVxdWU8Rm9ybUNvbnRy
b2xTdGF0ZT4mIHF1ZXVlID0gaXQtPnNlY29uZDsKKyAgICAgICAgY29uc3QgRGVxdWU8Rm9ybUNv
bnRyb2xTdGF0ZT4mIHF1ZXVlID0gaXQtPnZhbHVlOwogICAgICAgICBmb3IgKERlcXVlPEZvcm1D
b250cm9sU3RhdGU+Ojpjb25zdF9pdGVyYXRvciBxdWVJdGVyYXRvciA9IHF1ZXVlLmJlZ2luKCk7
IHF1ZUl0ZXJhdG9yICE9IHF1ZXVlLmVuZCgpOyArK3F1ZUl0ZXJhdG9yKSB7CiAgICAgICAgICAg
ICBjb25zdCBWZWN0b3I8RmlsZUNob29zZXJGaWxlSW5mbz4mIHNlbGVjdGVkRmlsZXMgPSBIVE1M
SW5wdXRFbGVtZW50OjpmaWxlc0Zyb21GaWxlSW5wdXRGb3JtQ29udHJvbFN0YXRlKCpxdWVJdGVy
YXRvcik7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNlbGVjdGVkRmlsZXMu
c2l6ZSgpOyArK2kpCkBAIC0zNDksMTIgKzM0OSwxMiBAQCBBdG9taWNTdHJpbmcgRm9ybUtleUdl
bmVyYXRvcjo6Zm9ybUtleShjb25zdCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlJiBj
bwogICAgIH0KICAgICBGb3JtVG9LZXlNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9mb3JtVG9L
ZXlNYXAuZmluZChmb3JtKTsKICAgICBpZiAoaXQgIT0gbV9mb3JtVG9LZXlNYXAuZW5kKCkpCi0g
ICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwogCiAg
ICAgU3RyaW5nIHNpZ25hdHVyZSA9IGZvcm1TaWduYXR1cmUoKmZvcm0pOwogICAgIEFTU0VSVCgh
c2lnbmF0dXJlLmlzTnVsbCgpKTsKICAgICBGb3JtU2lnbmF0dXJlVG9OZXh0SW5kZXhNYXA6OkFk
ZFJlc3VsdCByZXN1bHQgPSBtX2Zvcm1TaWduYXR1cmVUb05leHRJbmRleE1hcC5hZGQoc2lnbmF0
dXJlLCAwKTsKLSAgICB1bnNpZ25lZCBuZXh0SW5kZXggPSByZXN1bHQuaXRlcmF0b3ItPnNlY29u
ZCsrOworICAgIHVuc2lnbmVkIG5leHRJbmRleCA9IHJlc3VsdC5pdGVyYXRvci0+dmFsdWUrKzsK
IAogICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKICAgICBidWlsZGVyLmFwcGVuZChzaWduYXR1
cmUpOwpAQCAtNDA1LDggKzQwNSw4IEBAIFBhc3NPd25QdHI8Rm9ybUNvbnRyb2xsZXI6OlNhdmVk
Rm9ybVN0YXRlTWFwPiBGb3JtQ29udHJvbGxlcjo6Y3JlYXRlU2F2ZWRGb3JtU3RhCiAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgU2F2ZWRGb3JtU3RhdGVNYXA6OkFkZFJlc3VsdCByZXN1
bHQgPSBzdGF0ZU1hcC0+YWRkKGtleUdlbmVyYXRvci0+Zm9ybUtleSgqY29udHJvbCkuaW1wbCgp
LCBudWxscHRyKTsKICAgICAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICAgICAg
cmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBTYXZlZEZvcm1TdGF0ZTo6Y3JlYXRlKCk7Ci0gICAg
ICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLT5hcHBlbmRDb250cm9sU3RhdGUoY29udHJvbC0+
bmFtZSgpLCBjb250cm9sLT50eXBlKCksIGNvbnRyb2wtPnNhdmVGb3JtQ29udHJvbFN0YXRlKCkp
OworICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IFNhdmVkRm9ybVN0YXRlOjpj
cmVhdGUoKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+YXBwZW5kQ29udHJvbFN0
YXRlKGNvbnRyb2wtPm5hbWUoKSwgY29udHJvbC0+dHlwZSgpLCBjb250cm9sLT5zYXZlRm9ybUNv
bnRyb2xTdGF0ZSgpKTsKICAgICB9CiAgICAgcmV0dXJuIHN0YXRlTWFwLnJlbGVhc2UoKTsKIH0K
QEAgLTQxOCw4ICs0MTgsOCBAQCBWZWN0b3I8U3RyaW5nPiBGb3JtQ29udHJvbGxlcjo6Zm9ybUVs
ZW1lbnRzU3RhdGUoKSBjb25zdAogICAgIHN0YXRlVmVjdG9yLnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkobV9mb3JtRWxlbWVudHNXaXRoU3RhdGUuc2l6ZSgpICogNCk7CiAgICAgc3RhdGVWZWN0b3Iu
YXBwZW5kKGZvcm1TdGF0ZVNpZ25hdHVyZSgpKTsKICAgICBmb3IgKFNhdmVkRm9ybVN0YXRlTWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IHN0YXRlTWFwLT5iZWdpbigpOyBpdCAhPSBzdGF0ZU1hcC0+
ZW5kKCk7ICsraXQpIHsKLSAgICAgICAgc3RhdGVWZWN0b3IuYXBwZW5kKGl0LT5maXJzdC5nZXQo
KSk7Ci0gICAgICAgIGl0LT5zZWNvbmQtPnNlcmlhbGl6ZVRvKHN0YXRlVmVjdG9yKTsKKyAgICAg
ICAgc3RhdGVWZWN0b3IuYXBwZW5kKGl0LT5rZXkuZ2V0KCkpOworICAgICAgICBpdC0+dmFsdWUt
PnNlcmlhbGl6ZVRvKHN0YXRlVmVjdG9yKTsKICAgICB9CiAgICAgYm9vbCBoYXNPbmx5U2lnbmF0
dXJlID0gc3RhdGVWZWN0b3Iuc2l6ZSgpID09IDE7CiAgICAgaWYgKGhhc09ubHlTaWduYXR1cmUp
CkBAIC00NDEsOCArNDQxLDggQEAgRm9ybUNvbnRyb2xTdGF0ZSBGb3JtQ29udHJvbGxlcjo6dGFr
ZVN0YXRlRm9yRm9ybUVsZW1lbnQoY29uc3QgSFRNTEZvcm1Db250cm9sRWwKICAgICBTYXZlZEZv
cm1TdGF0ZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3NhdmVkRm9ybVN0YXRlTWFwLmZpbmQobV9mb3Jt
S2V5R2VuZXJhdG9yLT5mb3JtS2V5KGNvbnRyb2wpLmltcGwoKSk7CiAgICAgaWYgKGl0ID09IG1f
c2F2ZWRGb3JtU3RhdGVNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybiBGb3JtQ29udHJvbFN0YXRl
KCk7Ci0gICAgRm9ybUNvbnRyb2xTdGF0ZSBzdGF0ZSA9IGl0LT5zZWNvbmQtPnRha2VDb250cm9s
U3RhdGUoY29udHJvbC5uYW1lKCksIGNvbnRyb2wudHlwZSgpKTsKLSAgICBpZiAoaXQtPnNlY29u
ZC0+aXNFbXB0eSgpKQorICAgIEZvcm1Db250cm9sU3RhdGUgc3RhdGUgPSBpdC0+dmFsdWUtPnRh
a2VDb250cm9sU3RhdGUoY29udHJvbC5uYW1lKCksIGNvbnRyb2wudHlwZSgpKTsKKyAgICBpZiAo
aXQtPnZhbHVlLT5pc0VtcHR5KCkpCiAgICAgICAgIG1fc2F2ZWRGb3JtU3RhdGVNYXAucmVtb3Zl
KGl0KTsKICAgICByZXR1cm4gc3RhdGU7CiB9CkBAIC01MTEsNyArNTExLDcgQEAgVmVjdG9yPFN0
cmluZz4gRm9ybUNvbnRyb2xsZXI6OmdldFJlZmVyZW5jZWRGaWxlUGF0aHMoY29uc3QgVmVjdG9y
PFN0cmluZz4mIHN0YXQKICAgICBTYXZlZEZvcm1TdGF0ZU1hcCBtYXA7CiAgICAgZm9ybVN0YXRl
c0Zyb21TdGF0ZVZlY3RvcihzdGF0ZVZlY3RvciwgbWFwKTsKICAgICBmb3IgKFNhdmVkRm9ybVN0
YXRlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC5iZWdpbigpOyBpdCAhPSBtYXAuZW5kKCk7
ICsraXQpCi0gICAgICAgIHRvUmV0dXJuLmFwcGVuZChpdC0+c2Vjb25kLT5nZXRSZWZlcmVuY2Vk
RmlsZVBhdGhzKCkpOworICAgICAgICB0b1JldHVybi5hcHBlbmQoaXQtPnZhbHVlLT5nZXRSZWZl
cmVuY2VkRmlsZVBhdGhzKCkpOwogICAgIHJldHVybiB0b1JldHVybjsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxDb2xsZWN0aW9uLmNwcAppbmRleCA5MWUxOGEzZmJkZjJkODdhNmUwNzk0ZTdj
YjJiNzFiNjRmOGFiOWM1Li4xZWNiNjQ0Y2ExYjYzMDgwN2FkNjZhOTc0NGUzZGYzMzE0ZmVhZjQ2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmNwcApAQCAtNTU5LDcgKzU1OSw3
IEBAIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IEhUTUxDb2xsZWN0aW9uOjp0YWdzKGNvbnN0IFN0cmlu
ZyYgbmFtZSkKIAogdm9pZCBIVE1MQ29sbGVjdGlvbkNhY2hlQmFzZTo6YXBwZW5kKE5vZGVDYWNo
ZU1hcCYgbWFwLCBjb25zdCBBdG9taWNTdHJpbmcmIGtleSwgRWxlbWVudCogZWxlbWVudCkKIHsK
LSAgICBPd25QdHI8VmVjdG9yPEVsZW1lbnQqPiA+JiB2ZWN0b3IgPSBtYXAuYWRkKGtleS5pbXBs
KCksIG51bGxwdHIpLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgT3duUHRyPFZlY3RvcjxFbGVtZW50
Kj4gPiYgdmVjdG9yID0gbWFwLmFkZChrZXkuaW1wbCgpLCBudWxscHRyKS5pdGVyYXRvci0+dmFs
dWU7CiAgICAgaWYgKCF2ZWN0b3IpCiAgICAgICAgIHZlY3RvciA9IGFkb3B0UHRyKG5ldyBWZWN0
b3I8RWxlbWVudCo+KTsKICAgICB2ZWN0b3ItPmFwcGVuZChlbGVtZW50KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHAKaW5kZXggYjkxYWU1MDZl
Y2Y3OWUzZDYyZmUxN2U0Mzc3OTkzZmQzYzE0NmMxZC4uZDA4MWUyNDkwNWEwYWQ1OWU3NGU1ZGMw
NWM3NDUxMDg2YTY4NGY0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xGcmFtZWJ1ZmZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xGcmFtZWJ1ZmZlci5jcHAKQEAgLTMyNyw3ICszMjcsNyBAQCBXZWJHTFNoYXJlZE9iamVjdCog
V2ViR0xGcmFtZWJ1ZmZlcjo6Z2V0QXR0YWNobWVudE9iamVjdChHQzNEZW51bSBhdHRhY2htZW50
KSBjbwogV2ViR0xGcmFtZWJ1ZmZlcjo6V2ViR0xBdHRhY2htZW50KiBXZWJHTEZyYW1lYnVmZmVy
OjpnZXRBdHRhY2htZW50KEdDM0RlbnVtIGF0dGFjaG1lbnQpIGNvbnN0CiB7CiAgICAgY29uc3Qg
QXR0YWNobWVudE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2F0dGFjaG1lbnRzLmZpbmQoYXR0
YWNobWVudCk7Ci0gICAgcmV0dXJuIChpdCAhPSBtX2F0dGFjaG1lbnRzLmVuZCgpKSA/IGl0LT5z
ZWNvbmQuZ2V0KCkgOiAwOworICAgIHJldHVybiAoaXQgIT0gbV9hdHRhY2htZW50cy5lbmQoKSkg
PyBpdC0+dmFsdWUuZ2V0KCkgOiAwOwogfQogCiB2b2lkIFdlYkdMRnJhbWVidWZmZXI6OnJlbW92
ZUF0dGFjaG1lbnRGcm9tQm91bmRGcmFtZWJ1ZmZlcihHQzNEZW51bSBhdHRhY2htZW50KQpAQCAt
MzY3LDkgKzM2Nyw5IEBAIHZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6cmVtb3ZlQXR0YWNobWVudEZy
b21Cb3VuZEZyYW1lYnVmZmVyKFdlYkdMU2hhcmVkT2JqZWN0KiBhCiAgICAgd2hpbGUgKGNoZWNr
TW9yZSkgewogICAgICAgICBjaGVja01vcmUgPSBmYWxzZTsKICAgICAgICAgZm9yIChBdHRhY2ht
ZW50TWFwOjppdGVyYXRvciBpdCA9IG1fYXR0YWNobWVudHMuYmVnaW4oKTsgaXQgIT0gbV9hdHRh
Y2htZW50cy5lbmQoKTsgKytpdCkgewotICAgICAgICAgICAgV2ViR0xBdHRhY2htZW50KiBhdHRh
Y2htZW50T2JqZWN0ID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgIFdlYkdMQXR0YWNo
bWVudCogYXR0YWNobWVudE9iamVjdCA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGlm
IChhdHRhY2htZW50T2JqZWN0LT5pc1NoYXJlZE9iamVjdChhdHRhY2htZW50KSkgewotICAgICAg
ICAgICAgICAgIEdDM0RlbnVtIGF0dGFjaG1lbnRUeXBlID0gaXQtPmZpcnN0OworICAgICAgICAg
ICAgICAgIEdDM0RlbnVtIGF0dGFjaG1lbnRUeXBlID0gaXQtPmtleTsKICAgICAgICAgICAgICAg
ICBhdHRhY2htZW50T2JqZWN0LT51bmF0dGFjaChjb250ZXh0KCktPmdyYXBoaWNzQ29udGV4dDNE
KCksIGF0dGFjaG1lbnRUeXBlKTsKICAgICAgICAgICAgICAgICByZW1vdmVBdHRhY2htZW50RnJv
bUJvdW5kRnJhbWVidWZmZXIoYXR0YWNobWVudFR5cGUpOwogICAgICAgICAgICAgICAgIGNoZWNr
TW9yZSA9IHRydWU7CkBAIC00MTksOCArNDE5LDggQEAgR0MzRGVudW0gV2ViR0xGcmFtZWJ1ZmZl
cjo6Y2hlY2tTdGF0dXMoY29uc3QgY2hhcioqIHJlYXNvbikgY29uc3QKICAgICBib29sIGhhdmVT
dGVuY2lsID0gZmFsc2U7CiAgICAgYm9vbCBoYXZlRGVwdGhTdGVuY2lsID0gZmFsc2U7CiAgICAg
Zm9yIChBdHRhY2htZW50TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fYXR0YWNobWVudHMuYmVn
aW4oKTsgaXQgIT0gbV9hdHRhY2htZW50cy5lbmQoKTsgKytpdCkgewotICAgICAgICBXZWJHTEF0
dGFjaG1lbnQqIGF0dGFjaG1lbnQgPSBpdC0+c2Vjb25kLmdldCgpOwotICAgICAgICBpZiAoIWlz
QXR0YWNobWVudENvbXBsZXRlKGF0dGFjaG1lbnQsIGl0LT5maXJzdCwgcmVhc29uKSkKKyAgICAg
ICAgV2ViR0xBdHRhY2htZW50KiBhdHRhY2htZW50ID0gaXQtPnZhbHVlLmdldCgpOworICAgICAg
ICBpZiAoIWlzQXR0YWNobWVudENvbXBsZXRlKGF0dGFjaG1lbnQsIGl0LT5rZXksIHJlYXNvbikp
CiAgICAgICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0lOQ09N
UExFVEVfQVRUQUNITUVOVDsKICAgICAgICAgaWYgKCFhdHRhY2htZW50LT5pc1ZhbGlkKCkpIHsK
ICAgICAgICAgICAgICpyZWFzb24gPSAiYXR0YWNobWVudCBpcyBub3QgdmFsaWQiOwpAQCAtNDMw
LDcgKzQzMCw3IEBAIEdDM0RlbnVtIFdlYkdMRnJhbWVidWZmZXI6OmNoZWNrU3RhdHVzKGNvbnN0
IGNoYXIqKiByZWFzb24pIGNvbnN0CiAgICAgICAgICAgICAqcmVhc29uID0gImF0dGFjaG1lbnQg
aXMgYW4gdW5zdXBwb3J0ZWQgZm9ybWF0IjsKICAgICAgICAgICAgIHJldHVybiBHcmFwaGljc0Nv
bnRleHQzRDo6RlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOwogICAgICAgICB9Ci0g
ICAgICAgIHN3aXRjaCAoaXQtPmZpcnN0KSB7CisgICAgICAgIHN3aXRjaCAoaXQtPmtleSkgewog
ICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5UOgogICAgICAg
ICAgICAgaGF2ZURlcHRoID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNDg4LDcgKzQ4
OCw3IEBAIGJvb2wgV2ViR0xGcmFtZWJ1ZmZlcjo6aGFzU3RlbmNpbEJ1ZmZlcigpIGNvbnN0CiB2
b2lkIFdlYkdMRnJhbWVidWZmZXI6OmRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0M0Qq
IGNvbnRleHQzZCwgUGxhdGZvcm0zRE9iamVjdCBvYmplY3QpCiB7CiAgICAgZm9yIChBdHRhY2ht
ZW50TWFwOjppdGVyYXRvciBpdCA9IG1fYXR0YWNobWVudHMuYmVnaW4oKTsgaXQgIT0gbV9hdHRh
Y2htZW50cy5lbmQoKTsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+b25EZXRhY2hlZChjb250
ZXh0M2QpOworICAgICAgICBpdC0+dmFsdWUtPm9uRGV0YWNoZWQoY29udGV4dDNkKTsKIAogICAg
IGNvbnRleHQzZC0+ZGVsZXRlRnJhbWVidWZmZXIob2JqZWN0KTsKIH0KQEAgLTQ5OSw4ICs0OTks
OCBAQCBib29sIFdlYkdMRnJhbWVidWZmZXI6OmluaXRpYWxpemVBdHRhY2htZW50cyhHcmFwaGlj
c0NvbnRleHQzRCogZzNkLCBjb25zdCBjaGFyKgogICAgIEdDM0RiaXRmaWVsZCBtYXNrID0gMDsK
IAogICAgIGZvciAoQXR0YWNobWVudE1hcDo6aXRlcmF0b3IgaXQgPSBtX2F0dGFjaG1lbnRzLmJl
Z2luKCk7IGl0ICE9IG1fYXR0YWNobWVudHMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgR0MzRGVu
dW0gYXR0YWNobWVudFR5cGUgPSBpdC0+Zmlyc3Q7Ci0gICAgICAgIFdlYkdMQXR0YWNobWVudCog
YXR0YWNobWVudCA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIEdDM0RlbnVtIGF0dGFjaG1l
bnRUeXBlID0gaXQtPmtleTsKKyAgICAgICAgV2ViR0xBdHRhY2htZW50KiBhdHRhY2htZW50ID0g
aXQtPnZhbHVlLmdldCgpOwogICAgICAgICBpZiAoIWF0dGFjaG1lbnQtPmlzSW5pdGlhbGl6ZWQo
KSkKICAgICAgICAgICAgbWFzayB8PSBHcmFwaGljc0NvbnRleHQzRDo6Z2V0Q2xlYXJCaXRzQnlB
dHRhY2htZW50VHlwZShhdHRhY2htZW50VHlwZSk7CiAgICAgfQpAQCAtNTcxLDggKzU3MSw4IEBA
IGJvb2wgV2ViR0xGcmFtZWJ1ZmZlcjo6aW5pdGlhbGl6ZUF0dGFjaG1lbnRzKEdyYXBoaWNzQ29u
dGV4dDNEKiBnM2QsIGNvbnN0IGNoYXIqCiAgICAgICAgIGczZC0+ZGlzYWJsZShHcmFwaGljc0Nv
bnRleHQzRDo6RElUSEVSKTsKIAogICAgIGZvciAoQXR0YWNobWVudE1hcDo6aXRlcmF0b3IgaXQg
PSBtX2F0dGFjaG1lbnRzLmJlZ2luKCk7IGl0ICE9IG1fYXR0YWNobWVudHMuZW5kKCk7ICsraXQp
IHsKLSAgICAgICAgR0MzRGVudW0gYXR0YWNobWVudFR5cGUgPSBpdC0+Zmlyc3Q7Ci0gICAgICAg
IFdlYkdMQXR0YWNobWVudCogYXR0YWNobWVudCA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAg
IEdDM0RlbnVtIGF0dGFjaG1lbnRUeXBlID0gaXQtPmtleTsKKyAgICAgICAgV2ViR0xBdHRhY2ht
ZW50KiBhdHRhY2htZW50ID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICBHQzNEYml0ZmllbGQg
Yml0cyA9IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRDbGVhckJpdHNCeUF0dGFjaG1lbnRUeXBlKGF0
dGFjaG1lbnRUeXBlKTsKICAgICAgICAgaWYgKGJpdHMgJiBtYXNrKQogICAgICAgICAgICAgYXR0
YWNobWVudC0+c2V0SW5pdGlhbGl6ZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5IGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKaW5kZXggZGQ5Y2IxMWExNjZkM2I3YTgyNTg2
ZmQ0MDIyYTlmMzdkMmU3NTdiNy4uM2FkZWRkMTZjMGMwM2U1ZjA5MmFiM2IxMDc5YTUzM2RjNzA2
MDRkYSAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJ
bnNwZWN0b3IucHkKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJ
bnNwZWN0b3IucHkKQEAgLTEzMjAsNyArMTMyMCw3IEBAIGNsYXNzIFR5cGVCaW5kaW5nczoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5l
d2xpbmUoIiAgICAgICAgSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciAlcztcbiIgJSBpdF9uYW1l
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0
ZXIubmV3bGluZSgiICAgICAgICAlcyA9IG9iamVjdC0+ZmluZChcIiVzXCIpO1xuIiAlIChpdF9u
YW1lLCBwcm9wX2RhdGEucFsibmFtZSJdKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgQVNTRVJUKCVzICE9
IG9iamVjdC0+ZW5kKCkpO1xuIiAlIGl0X25hbWUpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgICAgICVzKCVzLT5z
ZWNvbmQuZ2V0KCkpO1xuIiAlIChwcm9wX2RhdGEucGFyYW1fdHlwZV9iaW5kaW5nLmdldF92YWxp
ZGF0b3JfY2FsbF90ZXh0KCksIGl0X25hbWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgICAgICAlcyglcy0+dmFs
dWUuZ2V0KCkpO1xuIiAlIChwcm9wX2RhdGEucGFyYW1fdHlwZV9iaW5kaW5nLmdldF92YWxpZGF0
b3JfY2FsbF90ZXh0KCksIGl0X25hbWUpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgIH1cbiIpCiAKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNsb3NlZF9maWVsZF9zZXQ6CkBAIC0xMzMy
LDcgKzEzMzIsNyBAQCBjbGFzcyBUeXBlQmluZGluZ3M6CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgICAgIEluc3Bl
Y3Rvck9iamVjdDo6aXRlcmF0b3IgJXM7XG4iICUgaXRfbmFtZSkKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICAgICAg
JXMgPSBvYmplY3QtPmZpbmQoXCIlc1wiKTtcbiIgJSAoaXRfbmFtZSwgcHJvcF9kYXRhLnBbIm5h
bWUiXSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9y
X3dyaXRlci5uZXdsaW5lKCIgICAgICAgIGlmICglcyAhPSBvYmplY3QtPmVuZCgpKSB7XG4iICUg
aXRfbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0
b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgICAgICVzKCVzLT5zZWNvbmQuZ2V0KCkpO1xuIiAl
IChwcm9wX2RhdGEucGFyYW1fdHlwZV9iaW5kaW5nLmdldF92YWxpZGF0b3JfY2FsbF90ZXh0KCks
IGl0X25hbWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlk
YXRvcl93cml0ZXIubmV3bGluZSgiICAgICAgICAgICAgJXMoJXMtPnZhbHVlLmdldCgpKTtcbiIg
JSAocHJvcF9kYXRhLnBhcmFtX3R5cGVfYmluZGluZy5nZXRfdmFsaWRhdG9yX2NhbGxfdGV4dCgp
LCBpdF9uYW1lKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBj
bG9zZWRfZmllbGRfc2V0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgICAgICsrZm91bmRQcm9wZXJ0
aWVzQ291bnQ7XG4iKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
bGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgICAgICB9XG4iKQpAQCAtMjA0NSw3ICsyMDQ1LDcg
QEAgJG1lc3NhZ2VIYW5kbGVycwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgKCgqdGhp
cykuKml0LT5zZWNvbmQpKGNhbGxJZCwgbWVzc2FnZU9iamVjdC5nZXQoKSk7CisgICAgKCgqdGhp
cykuKml0LT52YWx1ZSkoY2FsbElkLCBtZXNzYWdlT2JqZWN0LmdldCgpKTsKIH0KIAogdm9pZCBJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OnNlbmRSZXNwb25zZShsb25nIGNhbGxJZCwg
UGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCwgY29uc3QgY2hhciogY29tbWFuZE5h
bWUsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzLCBFcnJvclN0cmlu
ZyBpbnZvY2F0aW9uRXJyb3IpCkBAIC0yMTM0LDcgKzIxMzQsNyBAQCBSIEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVySW1wbDo6Z2V0UHJvcGVydHlWYWx1ZUltcGwoSW5zcGVjdG9yT2JqZWN0KiBv
YmplY3QsCiAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICB9CiAKLSAgICBpZiAoIWFzX21ldGhv
ZCh2YWx1ZUl0ZXJhdG9yLT5zZWNvbmQuZ2V0KCksICZ2YWx1ZSkpCisgICAgaWYgKCFhc19tZXRo
b2QodmFsdWVJdGVyYXRvci0+dmFsdWUuZ2V0KCksICZ2YWx1ZSkpCiAgICAgICAgIHByb3RvY29s
RXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJQYXJhbWV0ZXIgJyVzJyBoYXMgd3Jv
bmcgdHlwZS4gSXQgbXVzdCBiZSAnJXMnLiIsIG5hbWUudXRmOCgpLmRhdGEoKSwgdHlwZV9uYW1l
KSk7CiAgICAgZWxzZQogICAgICAgICBpZiAodmFsdWVGb3VuZCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9ET01QYXRjaFN1cHBvcnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5jcHAKaW5kZXggYzAzZGNlNDcxNGRmMTJjYTU1ZDU4
ZWJhYjJiODk5YTJkYzcxMWNlNS4uOGU2YzE4MDBkMzUyODI2NGU1MzEzNGVkOGRjNjFiODNlZjg4
Yjk1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9y
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5jcHAK
QEAgLTIzNywyNCArMjM3LDI0IEBAIERPTVBhdGNoU3VwcG9ydDo6ZGlmZihjb25zdCBWZWN0b3I8
T3duUHRyPERpZ2VzdD4gPiYgb2xkTGlzdCwgY29uc3QgVmVjdG9yPE93blB0CiAKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG5ld0xpc3Quc2l6ZSgpOyArK2kpIHsKICAgICAgICAgRGlmZlRh
YmxlOjppdGVyYXRvciBpdCA9IG5ld1RhYmxlLmFkZChuZXdMaXN0W2ldLT5tX3NoYTEsIFZlY3Rv
cjxzaXplX3Q+KCkpLml0ZXJhdG9yOwotICAgICAgICBpdC0+c2Vjb25kLmFwcGVuZChpKTsKKyAg
ICAgICAgaXQtPnZhbHVlLmFwcGVuZChpKTsKICAgICB9CiAKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG9sZExpc3Quc2l6ZSgpOyArK2kpIHsKICAgICAgICAgRGlmZlRhYmxlOjppdGVyYXRv
ciBpdCA9IG9sZFRhYmxlLmFkZChvbGRMaXN0W2ldLT5tX3NoYTEsIFZlY3RvcjxzaXplX3Q+KCkp
Lml0ZXJhdG9yOwotICAgICAgICBpdC0+c2Vjb25kLmFwcGVuZChpKTsKKyAgICAgICAgaXQtPnZh
bHVlLmFwcGVuZChpKTsKICAgICB9CiAKICAgICBmb3IgKERpZmZUYWJsZTo6aXRlcmF0b3IgbmV3
SXQgPSBuZXdUYWJsZS5iZWdpbigpOyBuZXdJdCAhPSBuZXdUYWJsZS5lbmQoKTsgKytuZXdJdCkg
ewotICAgICAgICBpZiAobmV3SXQtPnNlY29uZC5zaXplKCkgIT0gMSkKKyAgICAgICAgaWYgKG5l
d0l0LT52YWx1ZS5zaXplKCkgIT0gMSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAg
IERpZmZUYWJsZTo6aXRlcmF0b3Igb2xkSXQgPSBvbGRUYWJsZS5maW5kKG5ld0l0LT5maXJzdCk7
Ci0gICAgICAgIGlmIChvbGRJdCA9PSBvbGRUYWJsZS5lbmQoKSB8fCBvbGRJdC0+c2Vjb25kLnNp
emUoKSAhPSAxKQorICAgICAgICBEaWZmVGFibGU6Oml0ZXJhdG9yIG9sZEl0ID0gb2xkVGFibGUu
ZmluZChuZXdJdC0+a2V5KTsKKyAgICAgICAgaWYgKG9sZEl0ID09IG9sZFRhYmxlLmVuZCgpIHx8
IG9sZEl0LT52YWx1ZS5zaXplKCkgIT0gMSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAg
ICAgIG5ld01hcFtuZXdJdC0+c2Vjb25kWzBdXSA9IG1ha2VfcGFpcihuZXdMaXN0W25ld0l0LT5z
ZWNvbmRbMF1dLmdldCgpLCBvbGRJdC0+c2Vjb25kWzBdKTsKLSAgICAgICAgb2xkTWFwW29sZEl0
LT5zZWNvbmRbMF1dID0gbWFrZV9wYWlyKG9sZExpc3Rbb2xkSXQtPnNlY29uZFswXV0uZ2V0KCks
IG5ld0l0LT5zZWNvbmRbMF0pOworICAgICAgICBuZXdNYXBbbmV3SXQtPnZhbHVlWzBdXSA9IG1h
a2VfcGFpcihuZXdMaXN0W25ld0l0LT52YWx1ZVswXV0uZ2V0KCksIG9sZEl0LT52YWx1ZVswXSk7
CisgICAgICAgIG9sZE1hcFtvbGRJdC0+dmFsdWVbMF1dID0gbWFrZV9wYWlyKG9sZExpc3Rbb2xk
SXQtPnZhbHVlWzBdXS5nZXQoKSwgbmV3SXQtPnZhbHVlWzBdKTsKICAgICB9CiAKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgbmV3TGlzdC5zaXplKCkgPiAwICYmIGkgPCBuZXdMaXN0LnNpemUoKSAt
IDE7ICsraSkgewpAQCAtMzY0LDcgKzM2NCw3IEBAIGJvb2wgRE9NUGF0Y2hTdXBwb3J0Ojppbm5l
clBhdGNoQ2hpbGRyZW4oQ29udGFpbmVyTm9kZSogcGFyZW50Tm9kZSwgY29uc3QgVmVjdG9yCiAK
ICAgICAvLyAyLiBQYXRjaCBub2RlcyBtYXJrZWQgZm9yIG1lcmdlLgogICAgIGZvciAoSGFzaE1h
cDxEaWdlc3QqLCBEaWdlc3QqPjo6aXRlcmF0b3IgaXQgPSBtZXJnZXMuYmVnaW4oKTsgaXQgIT0g
bWVyZ2VzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmICghaW5uZXJQYXRjaE5vZGUoaXQtPnNl
Y29uZCwgaXQtPmZpcnN0LCBlYykpCisgICAgICAgIGlmICghaW5uZXJQYXRjaE5vZGUoaXQtPnZh
bHVlLCBpdC0+a2V5LCBlYykpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBA
IC00NjMsNyArNDYzLDcgQEAgYm9vbCBET01QYXRjaFN1cHBvcnQ6OnJlbW92ZUNoaWxkQW5kTW92
ZVRvTmV3KERpZ2VzdCogb2xkRGlnZXN0LCBFeGNlcHRpb25Db2RlJgogICAgIC8vIGhpZ2ggdGhh
dCBpdCB3aWxsIGdldCBtZXJnZWQgYmFjayBpbnRvIHRoZSBvcmlnaW5hbCBET00gZHVyaW5nIHRo
ZSBmdXJ0aGVyIHBhdGNoaW5nLgogICAgIFVudXNlZE5vZGVzTWFwOjppdGVyYXRvciBpdCA9IG1f
dW51c2VkTm9kZXNNYXAuZmluZChvbGREaWdlc3QtPm1fc2hhMSk7CiAgICAgaWYgKGl0ICE9IG1f
dW51c2VkTm9kZXNNYXAuZW5kKCkpIHsKLSAgICAgICAgRGlnZXN0KiBuZXdEaWdlc3QgPSBpdC0+
c2Vjb25kOworICAgICAgICBEaWdlc3QqIG5ld0RpZ2VzdCA9IGl0LT52YWx1ZTsKICAgICAgICAg
Tm9kZSogbmV3Tm9kZSA9IG5ld0RpZ2VzdC0+bV9ub2RlOwogICAgICAgICBpZiAoIW1fZG9tRWRp
dG9yLT5yZXBsYWNlQ2hpbGQobmV3Tm9kZS0+cGFyZW50Tm9kZSgpLCBvbGROb2RlLCBuZXdOb2Rl
LCBlYykpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwCmluZGV4IDUyZWM3NDkwYTA3N2I1
Y2ZkNGYzYjA4NWQyODc3YmM4NzBjYzA3Y2YuLjFkNWUzMTc1N2NkODZiM2IyMmI4ZmVkYjMxYWJj
ZDVlMDJlZmY0NzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3Rl
ZFNjcmlwdE1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3Rl
ZFNjcmlwdE1hbmFnZXIuY3BwCkBAIC04MiwxMCArODIsMTAgQEAgSW5qZWN0ZWRTY3JpcHQgSW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyOjppbmplY3RlZFNjcmlwdEZvcklkKGludCBpZCkKIHsKICAgICBJ
ZFRvSW5qZWN0ZWRTY3JpcHRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pZFRvSW5qZWN0ZWRTY3JpcHQu
ZmluZChpZCk7CiAgICAgaWYgKGl0ICE9IG1faWRUb0luamVjdGVkU2NyaXB0LmVuZCgpKQotICAg
ICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKICAgICBm
b3IgKFNjcmlwdFN0YXRlVG9JZDo6aXRlcmF0b3IgaXQgPSBtX3NjcmlwdFN0YXRlVG9JZC5iZWdp
bigpOyBpdCAhPSBtX3NjcmlwdFN0YXRlVG9JZC5lbmQoKTsgKytpdCkgewotICAgICAgICBpZiAo
aXQtPnNlY29uZCA9PSBpZCkKLSAgICAgICAgICAgIHJldHVybiBpbmplY3RlZFNjcmlwdEZvcihp
dC0+Zmlyc3QpOworICAgICAgICBpZiAoaXQtPnZhbHVlID09IGlkKQorICAgICAgICAgICAgcmV0
dXJuIGluamVjdGVkU2NyaXB0Rm9yKGl0LT5rZXkpOwogICAgIH0KICAgICByZXR1cm4gSW5qZWN0
ZWRTY3JpcHQoKTsKIH0KQEAgLTk0LDcgKzk0LDcgQEAgaW50IEluamVjdGVkU2NyaXB0TWFuYWdl
cjo6aW5qZWN0ZWRTY3JpcHRJZEZvcihTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUpCiB7CiAgICAg
U2NyaXB0U3RhdGVUb0lkOjppdGVyYXRvciBpdCA9IG1fc2NyaXB0U3RhdGVUb0lkLmZpbmQoc2Ny
aXB0U3RhdGUpOwogICAgIGlmIChpdCAhPSBtX3NjcmlwdFN0YXRlVG9JZC5lbmQoKSkKLSAgICAg
ICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBpdC0+dmFsdWU7CiAgICAgaW50
IGlkID0gbV9uZXh0SW5qZWN0ZWRTY3JpcHRJZCsrOwogICAgIG1fc2NyaXB0U3RhdGVUb0lkLnNl
dChzY3JpcHRTdGF0ZSwgaWQpOwogICAgIHJldHVybiBpZDsKQEAgLTEyNiwxMSArMTI2LDExIEBA
IHZvaWQgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjpkaXNjYXJkSW5qZWN0ZWRTY3JpcHRzRm9yKERP
TVdpbmRvdyogd2luZG93KQogICAgIFZlY3Rvcjxsb25nPiBpZHNUb1JlbW92ZTsKICAgICBJZFRv
SW5qZWN0ZWRTY3JpcHRNYXA6Oml0ZXJhdG9yIGVuZCA9IG1faWRUb0luamVjdGVkU2NyaXB0LmVu
ZCgpOwogICAgIGZvciAoSWRUb0luamVjdGVkU2NyaXB0TWFwOjppdGVyYXRvciBpdCA9IG1faWRU
b0luamVjdGVkU2NyaXB0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBTY3Jp
cHRTdGF0ZSogc2NyaXB0U3RhdGUgPSBpdC0+c2Vjb25kLnNjcmlwdFN0YXRlKCk7CisgICAgICAg
IFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSA9IGl0LT52YWx1ZS5zY3JpcHRTdGF0ZSgpOwogICAg
ICAgICBpZiAod2luZG93ICE9IGRvbVdpbmRvd0Zyb21TY3JpcHRTdGF0ZShzY3JpcHRTdGF0ZSkp
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgbV9zY3JpcHRTdGF0ZVRvSWQucmVtb3Zl
KHNjcmlwdFN0YXRlKTsKLSAgICAgICAgaWRzVG9SZW1vdmUuYXBwZW5kKGl0LT5maXJzdCk7Cisg
ICAgICAgIGlkc1RvUmVtb3ZlLmFwcGVuZChpdC0+a2V5KTsKICAgICB9CiAKICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGlkc1RvUmVtb3ZlLnNpemUoKTsgaSsrKQpAQCAtMTM5LDcgKzEzOSw3
IEBAIHZvaWQgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjpkaXNjYXJkSW5qZWN0ZWRTY3JpcHRzRm9y
KERPTVdpbmRvdyogd2luZG93KQogICAgIC8vIE5vdyByZW1vdmUgc2NyaXB0IHN0YXRlcyB0aGF0
IGhhdmUgaWQgYnV0IG5vIGluamVjdGVkIHNjcmlwdC4KICAgICBWZWN0b3I8U2NyaXB0U3RhdGUq
PiBzY3JpcHRTdGF0ZXNUb1JlbW92ZTsKICAgICBmb3IgKFNjcmlwdFN0YXRlVG9JZDo6aXRlcmF0
b3IgaXQgPSBtX3NjcmlwdFN0YXRlVG9JZC5iZWdpbigpOyBpdCAhPSBtX3NjcmlwdFN0YXRlVG9J
ZC5lbmQoKTsgKytpdCkgewotICAgICAgICBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUgPSBpdC0+
Zmlyc3Q7CisgICAgICAgIFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSA9IGl0LT5rZXk7CiAgICAg
ICAgIGlmICh3aW5kb3cgPT0gZG9tV2luZG93RnJvbVNjcmlwdFN0YXRlKHNjcmlwdFN0YXRlKSkK
ICAgICAgICAgICAgIHNjcmlwdFN0YXRlc1RvUmVtb3ZlLmFwcGVuZChzY3JpcHRTdGF0ZSk7CiAg
ICAgfQpAQCAtMTU1LDcgKzE1NSw3IEBAIGJvb2wgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjpjYW5B
Y2Nlc3NJbnNwZWN0ZWRXb3JrZXJDb250ZXh0KFNjcmlwdFN0YXRlKikKIHZvaWQgSW5qZWN0ZWRT
Y3JpcHRNYW5hZ2VyOjpyZWxlYXNlT2JqZWN0R3JvdXAoY29uc3QgU3RyaW5nJiBvYmplY3RHcm91
cCkKIHsKICAgICBmb3IgKElkVG9JbmplY3RlZFNjcmlwdE1hcDo6aXRlcmF0b3IgaXQgPSBtX2lk
VG9JbmplY3RlZFNjcmlwdC5iZWdpbigpOyBpdCAhPSBtX2lkVG9JbmplY3RlZFNjcmlwdC5lbmQo
KTsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC5yZWxlYXNlT2JqZWN0R3JvdXAob2JqZWN0R3Jv
dXApOworICAgICAgICBpdC0+dmFsdWUucmVsZWFzZU9iamVjdEdyb3VwKG9iamVjdEdyb3VwKTsK
IH0KIAogU3RyaW5nIEluamVjdGVkU2NyaXB0TWFuYWdlcjo6aW5qZWN0ZWRTY3JpcHRTb3VyY2Uo
KQpAQCAtMTczLDkgKzE3Myw5IEBAIEluamVjdGVkU2NyaXB0IEluamVjdGVkU2NyaXB0TWFuYWdl
cjo6aW5qZWN0ZWRTY3JpcHRGb3IoU2NyaXB0U3RhdGUqIGluc3BlY3RlZFNjCiB7CiAgICAgU2Ny
aXB0U3RhdGVUb0lkOjppdGVyYXRvciBpdCA9IG1fc2NyaXB0U3RhdGVUb0lkLmZpbmQoaW5zcGVj
dGVkU2NyaXB0U3RhdGUpOwogICAgIGlmIChpdCAhPSBtX3NjcmlwdFN0YXRlVG9JZC5lbmQoKSkg
ewotICAgICAgICBJZFRvSW5qZWN0ZWRTY3JpcHRNYXA6Oml0ZXJhdG9yIGl0MSA9IG1faWRUb0lu
amVjdGVkU2NyaXB0LmZpbmQoaXQtPnNlY29uZCk7CisgICAgICAgIElkVG9JbmplY3RlZFNjcmlw
dE1hcDo6aXRlcmF0b3IgaXQxID0gbV9pZFRvSW5qZWN0ZWRTY3JpcHQuZmluZChpdC0+dmFsdWUp
OwogICAgICAgICBpZiAoaXQxICE9IG1faWRUb0luamVjdGVkU2NyaXB0LmVuZCgpKQotICAgICAg
ICAgICAgcmV0dXJuIGl0MS0+c2Vjb25kOworICAgICAgICAgICAgcmV0dXJuIGl0MS0+dmFsdWU7
CiAgICAgfQogCiAgICAgaWYgKCFtX2luc3BlY3RlZFN0YXRlQWNjZXNzQ2hlY2soaW5zcGVjdGVk
U2NyaXB0U3RhdGUpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNTU0FnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NB
Z2VudC5jcHAKaW5kZXggNjBlYmQ5MzEyYjJhNTM4YTQyNmYxNWYzOWM1Y2NhNmQ2ZTQzY2VkZS4u
OWIyMzg3NWFlMDQ1Yjc2Yzg0YTQzOGZjNmE5N2Y3NDg2NmIyYzllYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCkBAIC0xODgsMTAgKzE4OCwx
MCBAQCBpbmxpbmUgdm9pZCBTZWxlY3RvclByb2ZpbGU6OmNvbW1pdFNlbGVjdG9yKGJvb2wgbWF0
Y2hlZCkKIAogICAgIFJ1bGVNYXRjaGluZ1N0YXRzTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9y
dWxlTWF0Y2hpbmdTdGF0cy5hZGQobWFrZUtleSgpLCBSdWxlTWF0Y2hpbmdTdGF0cyhtX2N1cnJl
bnRNYXRjaERhdGEsIG1hdGNoVGltZU1zLCAxLCBtYXRjaGVkID8gMSA6IDApKTsKICAgICBpZiAo
IXJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLnRv
dGFsVGltZSArPSBtYXRjaFRpbWVNczsKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQu
aGl0cyArPSAxOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLnRvdGFsVGltZSArPSBt
YXRjaFRpbWVNczsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5oaXRzICs9IDE7CiAg
ICAgICAgIGlmIChtYXRjaGVkKQotICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQu
bWF0Y2hlcyArPSAxOworICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5tYXRjaGVz
ICs9IDE7CiAgICAgfQogfQogCkBAIC0yMDQsNyArMjA0LDcgQEAgaW5saW5lIHZvaWQgU2VsZWN0
b3JQcm9maWxlOjpjb21taXRTZWxlY3RvclRpbWUoKQogICAgIGlmIChpdCA9PSBtX3J1bGVNYXRj
aGluZ1N0YXRzLmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpdC0+c2Vjb25kLnRvdGFs
VGltZSArPSBwcm9jZXNzaW5nVGltZU1zOworICAgIGl0LT52YWx1ZS50b3RhbFRpbWUgKz0gcHJv
Y2Vzc2luZ1RpbWVNczsKIH0KIAogUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpTZWxlY3Rv
clByb2ZpbGU+IFNlbGVjdG9yUHJvZmlsZTo6dG9JbnNwZWN0b3JPYmplY3QoKSBjb25zdApAQCAt
MjEyLDEyICsyMTIsMTIgQEAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpTZWxlY3RvclBy
b2ZpbGU+IFNlbGVjdG9yUHJvZmlsZTo6dG9JbnNwZWN0b3JPYmplY3QKICAgICBSZWZQdHI8VHlw
ZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpDU1M6OlNlbGVjdG9yUHJvZmlsZUVudHJ5PiA+
IHNlbGVjdG9yUHJvZmlsZURhdGEgPSBUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkNT
Uzo6U2VsZWN0b3JQcm9maWxlRW50cnk+OjpjcmVhdGUoKTsKICAgICBmb3IgKFJ1bGVNYXRjaGlu
Z1N0YXRzTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fcnVsZU1hdGNoaW5nU3RhdHMuYmVnaW4o
KTsgaXQgIT0gbV9ydWxlTWF0Y2hpbmdTdGF0cy5lbmQoKTsgKytpdCkgewogICAgICAgICBSZWZQ
dHI8VHlwZUJ1aWxkZXI6OkNTUzo6U2VsZWN0b3JQcm9maWxlRW50cnk+IGVudHJ5ID0gVHlwZUJ1
aWxkZXI6OkNTUzo6U2VsZWN0b3JQcm9maWxlRW50cnk6OmNyZWF0ZSgpCi0gICAgICAgICAgICAu
c2V0U2VsZWN0b3IoaXQtPnNlY29uZC5zZWxlY3RvcikKLSAgICAgICAgICAgIC5zZXRVcmwoaXQt
PnNlY29uZC51cmwpCi0gICAgICAgICAgICAuc2V0TGluZU51bWJlcihpdC0+c2Vjb25kLmxpbmVO
dW1iZXIpCi0gICAgICAgICAgICAuc2V0VGltZShpdC0+c2Vjb25kLnRvdGFsVGltZSkKLSAgICAg
ICAgICAgIC5zZXRIaXRDb3VudChpdC0+c2Vjb25kLmhpdHMpCi0gICAgICAgICAgICAuc2V0TWF0
Y2hDb3VudChpdC0+c2Vjb25kLm1hdGNoZXMpOworICAgICAgICAgICAgLnNldFNlbGVjdG9yKGl0
LT52YWx1ZS5zZWxlY3RvcikKKyAgICAgICAgICAgIC5zZXRVcmwoaXQtPnZhbHVlLnVybCkKKyAg
ICAgICAgICAgIC5zZXRMaW5lTnVtYmVyKGl0LT52YWx1ZS5saW5lTnVtYmVyKQorICAgICAgICAg
ICAgLnNldFRpbWUoaXQtPnZhbHVlLnRvdGFsVGltZSkKKyAgICAgICAgICAgIC5zZXRIaXRDb3Vu
dChpdC0+dmFsdWUuaGl0cykKKyAgICAgICAgICAgIC5zZXRNYXRjaENvdW50KGl0LT52YWx1ZS5t
YXRjaGVzKTsKICAgICAgICAgc2VsZWN0b3JQcm9maWxlRGF0YS0+YWRkSXRlbShlbnRyeS5yZWxl
YXNlKCkpOwogICAgIH0KIApAQCAtMjcyLDcgKzI3Miw3IEBAIHZvaWQgVXBkYXRlUmVnaW9uTGF5
b3V0VGFzazo6b25UaW1lcihUaW1lcjxVcGRhdGVSZWdpb25MYXlvdXRUYXNrPiopCiAgICAgVmVj
dG9yPHN0ZDo6cGFpcjxXZWJLaXROYW1lZEZsb3cqLCBpbnQ+ID4gbmFtZWRGbG93czsKIAogICAg
IGZvciAoSGFzaE1hcDxXZWJLaXROYW1lZEZsb3cqLCBpbnQ+OjppdGVyYXRvciBpdCA9IG1fbmFt
ZWRGbG93cy5iZWdpbigpLCBlbmQgPSBtX25hbWVkRmxvd3MuZW5kKCk7IGl0ICE9IGVuZDsgKytp
dCkKLSAgICAgICAgbmFtZWRGbG93cy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoaXQtPmZpcnN0LCBp
dC0+c2Vjb25kKSk7CisgICAgICAgIG5hbWVkRmxvd3MuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGl0
LT5rZXksIGl0LT52YWx1ZSkpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMCwgc2l6ZSA9IG5h
bWVkRmxvd3Muc2l6ZSgpOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIFdlYktpdE5hbWVkRmxv
dyogbmFtZWRGbG93ID0gbmFtZWRGbG93cy5hdChpKS5maXJzdDsKQEAgLTY2Myw3ICs2NjMsNyBA
QCBib29sIEluc3BlY3RvckNTU0FnZW50Ojpmb3JjZVBzZXVkb1N0YXRlKEVsZW1lbnQqIGVsZW1l
bnQsIENTU1NlbGVjdG9yOjpQc2V1ZG9UeQogICAgIGlmIChpdCA9PSBtX25vZGVJZFRvRm9yY2Vk
UHNldWRvU3RhdGUuZW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHVuc2lnbmVk
IGZvcmNlZFBzZXVkb1N0YXRlID0gaXQtPnNlY29uZDsKKyAgICB1bnNpZ25lZCBmb3JjZWRQc2V1
ZG9TdGF0ZSA9IGl0LT52YWx1ZTsKICAgICBzd2l0Y2ggKHBzZXVkb1R5cGUpIHsKICAgICBjYXNl
IENTU1NlbGVjdG9yOjpQc2V1ZG9BY3RpdmU6CiAgICAgICAgIHJldHVybiBmb3JjZWRQc2V1ZG9T
dGF0ZSAmIFBzZXVkb0FjdGl2ZTsKQEAgLTkwNCw3ICs5MDQsNyBAQCB2b2lkIEluc3BlY3RvckNT
U0FnZW50Ojpmb3JjZVBzZXVkb1N0YXRlKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgaW50IG5v
ZGVJZCwgYwogCiAgICAgdW5zaWduZWQgZm9yY2VkUHNldWRvU3RhdGUgPSBjb21wdXRlUHNldWRv
Q2xhc3NNYXNrKGZvcmNlZFBzZXVkb0NsYXNzZXMuZ2V0KCkpOwogICAgIE5vZGVJZFRvRm9yY2Vk
UHNldWRvU3RhdGU6Oml0ZXJhdG9yIGl0ID0gbV9ub2RlSWRUb0ZvcmNlZFBzZXVkb1N0YXRlLmZp
bmQobm9kZUlkKTsKLSAgICB1bnNpZ25lZCBjdXJyZW50Rm9yY2VkUHNldWRvU3RhdGUgPSBpdCA9
PSBtX25vZGVJZFRvRm9yY2VkUHNldWRvU3RhdGUuZW5kKCkgPyAwIDogaXQtPnNlY29uZDsKKyAg
ICB1bnNpZ25lZCBjdXJyZW50Rm9yY2VkUHNldWRvU3RhdGUgPSBpdCA9PSBtX25vZGVJZFRvRm9y
Y2VkUHNldWRvU3RhdGUuZW5kKCkgPyAwIDogaXQtPnZhbHVlOwogICAgIGJvb2wgbmVlZFN0eWxl
UmVjYWxjID0gZm9yY2VkUHNldWRvU3RhdGUgIT0gY3VycmVudEZvcmNlZFBzZXVkb1N0YXRlOwog
ICAgIGlmICghbmVlZFN0eWxlUmVjYWxjKQogICAgICAgICByZXR1cm47CkBAIC05OTUsNyArOTk1
LDcgQEAgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlKiBJbnNwZWN0b3JDU1NBZ2Vu
dDo6YXNJbnNwZWN0b3JTdHlsZVNoZWV0KEVsZW0KICAgICAgICAgcmV0dXJuIGluc3BlY3RvclN0
eWxlU2hlZXQuZ2V0KCk7CiAgICAgfQogCi0gICAgcmV0dXJuIGl0LT5zZWNvbmQuZ2V0KCk7Cisg
ICAgcmV0dXJuIGl0LT52YWx1ZS5nZXQoKTsKIH0KIAogRWxlbWVudCogSW5zcGVjdG9yQ1NTQWdl
bnQ6OmVsZW1lbnRGb3JJZChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGludCBub2RlSWQpCkBA
IC0xMDk4LDcgKzEwOTgsNyBAQCBJbnNwZWN0b3JTdHlsZVNoZWV0KiBJbnNwZWN0b3JDU1NBZ2Vu
dDo6YXNzZXJ0U3R5bGVTaGVldEZvcklkKEVycm9yU3RyaW5nKiBlcnJvcgogICAgICAgICAqZXJy
b3JTdHJpbmcgPSAiTm8gc3R5bGUgc2hlZXQgd2l0aCBnaXZlbiBpZCBmb3VuZCI7CiAgICAgICAg
IHJldHVybiAwOwogICAgIH0KLSAgICByZXR1cm4gaXQtPnNlY29uZC5nZXQoKTsKKyAgICByZXR1
cm4gaXQtPnZhbHVlLmdldCgpOwogfQogCiBUeXBlQnVpbGRlcjo6Q1NTOjpTdHlsZVNoZWV0T3Jp
Z2luOjpFbnVtIEluc3BlY3RvckNTU0FnZW50OjpkZXRlY3RPcmlnaW4oQ1NTU3R5bGVTaGVldCog
cGFnZVN0eWxlU2hlZXQsIERvY3VtZW50KiBvd25lckRvY3VtZW50KQpAQCAtMTIyOSw3ICsxMjI5
LDcgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6ZGlkUmVtb3ZlRE9NTm9kZShOb2RlKiBub2Rl
KQogICAgIGlmIChpdCA9PSBtX25vZGVUb0luc3BlY3RvclN0eWxlU2hlZXQuZW5kKCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIG1faWRUb0luc3BlY3RvclN0eWxlU2hlZXQucmVtb3ZlKGl0LT5z
ZWNvbmQtPmlkKCkpOworICAgIG1faWRUb0luc3BlY3RvclN0eWxlU2hlZXQucmVtb3ZlKGl0LT52
YWx1ZS0+aWQoKSk7CiAgICAgbV9ub2RlVG9JbnNwZWN0b3JTdHlsZVNoZWV0LnJlbW92ZShub2Rl
KTsKIH0KIApAQCAtMTI0Miw3ICsxMjQyLDcgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6ZGlk
TW9kaWZ5RE9NQXR0cihFbGVtZW50KiBlbGVtZW50KQogICAgIGlmIChpdCA9PSBtX25vZGVUb0lu
c3BlY3RvclN0eWxlU2hlZXQuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGl0LT5zZWNv
bmQtPmRpZE1vZGlmeUVsZW1lbnRBdHRyaWJ1dGUoKTsKKyAgICBpdC0+dmFsdWUtPmRpZE1vZGlm
eUVsZW1lbnRBdHRyaWJ1dGUoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6c3R5bGVT
aGVldENoYW5nZWQoSW5zcGVjdG9yU3R5bGVTaGVldCogc3R5bGVTaGVldCkKQEAgLTEyNTUsNyAr
MTI1NSw3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnJlc2V0UHNldWRvU3RhdGVzKCkKIHsK
ICAgICBIYXNoU2V0PERvY3VtZW50Kj4gZG9jdW1lbnRzVG9DaGFuZ2U7CiAgICAgZm9yIChOb2Rl
SWRUb0ZvcmNlZFBzZXVkb1N0YXRlOjppdGVyYXRvciBpdCA9IG1fbm9kZUlkVG9Gb3JjZWRQc2V1
ZG9TdGF0ZS5iZWdpbigpLCBlbmQgPSBtX25vZGVJZFRvRm9yY2VkUHNldWRvU3RhdGUuZW5kKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gdG9FbGVtZW50
KG1fZG9tQWdlbnQtPm5vZGVGb3JJZChpdC0+Zmlyc3QpKTsKKyAgICAgICAgRWxlbWVudCogZWxl
bWVudCA9IHRvRWxlbWVudChtX2RvbUFnZW50LT5ub2RlRm9ySWQoaXQtPmtleSkpOwogICAgICAg
ICBpZiAoZWxlbWVudCAmJiBlbGVtZW50LT5vd25lckRvY3VtZW50KCkpCiAgICAgICAgICAgICBk
b2N1bWVudHNUb0NoYW5nZS5hZGQoZWxlbWVudC0+b3duZXJEb2N1bWVudCgpKTsKICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29uc29sZUFnZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb25zb2xlQWdlbnQuY3Bw
CmluZGV4IGFjZWIyZGE0YWY2Zjg1MzUxZjg4ZDk4YzgzZjY5NTgwNTU4MTYyZmIuLmM5NDg5ZTlm
ZmYzYzAxZTk2OGY0Njc4NmM0YTM1MTdhMDAzNmEzZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb25zb2xlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb25zb2xlQWdlbnQuY3BwCkBAIC0xNzgsNyArMTc4LDcg
QEAgdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OnN0b3BUaW1pbmcoY29uc3QgU3RyaW5nJiB0
aXRsZSwgUGFzc1JlZlB0cjxTY3JpcHRDYWwKICAgICBpZiAoaXQgPT0gbV90aW1lcy5lbmQoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgZG91YmxlIHN0YXJ0VGltZSA9IGl0LT5zZWNvbmQ7Cisg
ICAgZG91YmxlIHN0YXJ0VGltZSA9IGl0LT52YWx1ZTsKICAgICBtX3RpbWVzLnJlbW92ZShpdCk7
CiAKICAgICBkb3VibGUgZWxhcHNlZCA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpIC0g
c3RhcnRUaW1lOwpAQCAtMjAxLDcgKzIwMSw3IEBAIHZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50
Ojpjb3VudChQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gYXJndW1lbnRzLCBQYXNzUmVmCiAg
ICAgaWYgKGl0ID09IG1fY291bnRzLmVuZCgpKQogICAgICAgICBjb3VudCA9IDE7CiAgICAgZWxz
ZSB7Ci0gICAgICAgIGNvdW50ID0gaXQtPnNlY29uZCArIDE7CisgICAgICAgIGNvdW50ID0gaXQt
PnZhbHVlICsgMTsKICAgICAgICAgbV9jb3VudHMucmVtb3ZlKGl0KTsKICAgICB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCmluZGV4IDgxN2Yx
ZGYzYjE5NGUwYmMyYWVjZGJhODEwYzk3M2U2Mzg3NmNiMzAuLmQ1YzkwZDg0MmEwZmY4ZmM5MDQy
YzlkMGY4ZjhhZWNiODk2MmNjNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JET01BZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckRPTUFnZW50LmNwcApAQCAtNDcwLDcgKzQ3MCw3IEBAIE5vZGUqIEluc3BlY3RvckRP
TUFnZW50Ojpub2RlRm9ySWQoaW50IGlkKQogCiAgICAgSGFzaE1hcDxpbnQsIE5vZGUqPjo6aXRl
cmF0b3IgaXQgPSBtX2lkVG9Ob2RlLmZpbmQoaWQpOwogICAgIGlmIChpdCAhPSBtX2lkVG9Ob2Rl
LmVuZCgpKQotICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGl0LT52
YWx1ZTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtOTE2LDkgKzkxNiw5IEBAIHZvaWQgSW5zcGVj
dG9yRE9NQWdlbnQ6OnBlcmZvcm1TZWFyY2goRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIHdo
aXRlc3BhY2VUcmltCiAgICAgU2VhcmNoUmVzdWx0czo6aXRlcmF0b3IgcmVzdWx0c0l0ID0gbV9z
ZWFyY2hSZXN1bHRzLmFkZCgqc2VhcmNoSWQsIFZlY3RvcjxSZWZQdHI8Tm9kZT4gPigpKS5pdGVy
YXRvcjsKIAogICAgIGZvciAoTGlzdEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRvciBpdCA9IHJlc3Vs
dENvbGxlY3Rvci5iZWdpbigpOyBpdCAhPSByZXN1bHRDb2xsZWN0b3IuZW5kKCk7ICsraXQpCi0g
ICAgICAgIHJlc3VsdHNJdC0+c2Vjb25kLmFwcGVuZCgqaXQpOworICAgICAgICByZXN1bHRzSXQt
PnZhbHVlLmFwcGVuZCgqaXQpOwogCi0gICAgKnJlc3VsdENvdW50ID0gcmVzdWx0c0l0LT5zZWNv
bmQuc2l6ZSgpOworICAgICpyZXN1bHRDb3VudCA9IHJlc3VsdHNJdC0+dmFsdWUuc2l6ZSgpOwog
fQogCiB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRTZWFyY2hSZXN1bHRzKEVycm9yU3RyaW5n
KiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBzZWFyY2hJZCwgaW50IGZyb21JbmRleCwgaW50
IHRvSW5kZXgsIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8aW50PiA+JiBub2RlSWRzKQpAQCAt
OTI5LDcgKzkyOSw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldFNlYXJjaFJlc3VsdHMo
RXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBpbnQgc2l6ZSA9IGl0LT5zZWNvbmQuc2l6ZSgpOworICAgIGludCBzaXpl
ID0gaXQtPnZhbHVlLnNpemUoKTsKICAgICBpZiAoZnJvbUluZGV4IDwgMCB8fCB0b0luZGV4ID4g
c2l6ZSB8fCBmcm9tSW5kZXggPj0gdG9JbmRleCkgewogICAgICAgICAqZXJyb3JTdHJpbmcgPSAi
SW52YWxpZCBzZWFyY2ggcmVzdWx0IHJhbmdlIjsKICAgICAgICAgcmV0dXJuOwpAQCAtOTM3LDcg
KzkzNyw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldFNlYXJjaFJlc3VsdHMoRXJyb3JT
dHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmCiAKICAgICBub2RlSWRzID0gVHlwZUJ1
aWxkZXI6OkFycmF5PGludD46OmNyZWF0ZSgpOwogICAgIGZvciAoaW50IGkgPSBmcm9tSW5kZXg7
IGkgPCB0b0luZGV4OyArK2kpCi0gICAgICAgIG5vZGVJZHMtPmFkZEl0ZW0ocHVzaE5vZGVQYXRo
VG9Gcm9udGVuZCgoaXQtPnNlY29uZClbaV0uZ2V0KCkpKTsKKyAgICAgICAgbm9kZUlkcy0+YWRk
SXRlbShwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKChpdC0+dmFsdWUpW2ldLmdldCgpKSk7CiB9CiAK
IHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpc2NhcmRTZWFyY2hSZXN1bHRzKEVycm9yU3RyaW5n
KiwgY29uc3QgU3RyaW5nJiBzZWFyY2hJZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50LmNwcAppbmRleCA4MDMyMjk1ZDg5NWU5
ZDIyYTJmODBjNTk4ZDllNDRkMjc0NzRhMDU2Li5jNGZjYjgyYjdiNmZhMGUyYjlhNTNiZDRmYWFj
NjIzNjI5ZDBiZTVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRE9NRGVidWdnZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckRPTURlYnVnZ2VyQWdlbnQuY3BwCkBAIC00MDIsOCArNDAyLDggQEAgdm9pZCBJbnNw
ZWN0b3JET01EZWJ1Z2dlckFnZW50Ojp3aWxsU2VuZFhNTEh0dHBSZXF1ZXN0KGNvbnN0IFN0cmlu
ZyYgdXJsKQogICAgIGVsc2UgewogICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB4aHJC
cmVha3BvaW50cyA9IG1fc3RhdGUtPmdldE9iamVjdChET01EZWJ1Z2dlckFnZW50U3RhdGU6Onho
ckJyZWFrcG9pbnRzKTsKICAgICAgICAgZm9yIChJbnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9yIGl0
ID0geGhyQnJlYWtwb2ludHMtPmJlZ2luKCk7IGl0ICE9IHhockJyZWFrcG9pbnRzLT5lbmQoKTsg
KytpdCkgewotICAgICAgICAgICAgaWYgKHVybC5jb250YWlucyhpdC0+Zmlyc3QpKSB7Ci0gICAg
ICAgICAgICAgICAgYnJlYWtwb2ludFVSTCA9IGl0LT5maXJzdDsKKyAgICAgICAgICAgIGlmICh1
cmwuY29udGFpbnMoaXQtPmtleSkpIHsKKyAgICAgICAgICAgICAgICBicmVha3BvaW50VVJMID0g
aXQtPmtleTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3Jh
Z2VBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFn
ZUFnZW50LmNwcAppbmRleCA5MGEwYTllNjA5MGUwYzJjMzlkNzg2OWY0MDJkNDMyYjNhMmJmNmYw
Li5jMzJlYTI5ODc2ZGQ5ZWUxN2JjMmU2MWUwZDdlNjg3MDZhMTI1Mzc3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcApA
QCAtNzcsNyArNzcsNyBAQCB2b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6Y2xlYXJGcm9u
dGVuZCgpCiB7CiAgICAgRE9NU3RvcmFnZVJlc291cmNlc01hcDo6aXRlcmF0b3IgZG9tU3RvcmFn
ZUVuZCA9IG1fcmVzb3VyY2VzLmVuZCgpOwogICAgIGZvciAoRE9NU3RvcmFnZVJlc291cmNlc01h
cDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSBkb21TdG9yYWdlRW5k
OyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT51bmJpbmQoKTsKKyAgICAgICAgaXQtPnZhbHVl
LT51bmJpbmQoKTsKICAgICBtX2Zyb250ZW5kID0gMDsKICAgICBkaXNhYmxlKDApOwogfQpAQCAt
OTYsNyArOTYsNyBAQCB2b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6ZW5hYmxlKEVycm9y
U3RyaW5nKikKIAogICAgIERPTVN0b3JhZ2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIHJlc291cmNl
c0VuZCA9IG1fcmVzb3VyY2VzLmVuZCgpOwogICAgIGZvciAoRE9NU3RvcmFnZVJlc291cmNlc01h
cDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSByZXNvdXJjZXNFbmQ7
ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPmJpbmQobV9mcm9udGVuZCk7CisgICAgICAgIGl0
LT52YWx1ZS0+YmluZChtX2Zyb250ZW5kKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JET01TdG9yYWdl
QWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcqKQpAQCAtMTY1LDggKzE2NSw4IEBAIFN0cmluZyBJ
bnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OnN0b3JhZ2VJZChTZWN1cml0eU9yaWdpbiogc2VjdXJp
dHlPcmlnaW4sIGJvb2wKICAgICBBU1NFUlQoc2VjdXJpdHlPcmlnaW4pOwogICAgIERPTVN0b3Jh
Z2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGRvbVN0b3JhZ2VFbmQgPSBtX3Jlc291cmNlcy5lbmQo
KTsKICAgICBmb3IgKERPTVN0b3JhZ2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNv
dXJjZXMuYmVnaW4oKTsgaXQgIT0gZG9tU3RvcmFnZUVuZDsgKytpdCkgewotICAgICAgICBpZiAo
aXQtPnNlY29uZC0+aXNTYW1lT3JpZ2luQW5kVHlwZShzZWN1cml0eU9yaWdpbiwgaXNMb2NhbFN0
b3JhZ2UpKQotICAgICAgICAgICAgcmV0dXJuIGl0LT5maXJzdDsKKyAgICAgICAgaWYgKGl0LT52
YWx1ZS0+aXNTYW1lT3JpZ2luQW5kVHlwZShzZWN1cml0eU9yaWdpbiwgaXNMb2NhbFN0b3JhZ2Up
KQorICAgICAgICAgICAgcmV0dXJuIGl0LT5rZXk7CiAgICAgfQogICAgIHJldHVybiBTdHJpbmco
KTsKIH0KQEAgLTE3NiwxNCArMTc2LDE0IEBAIEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZSog
SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpnZXRET01TdG9yYWdlUmVzb3VyY2VGb3JJCiAgICAg
RE9NU3RvcmFnZVJlc291cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5maW5kKHN0
b3JhZ2VJZCk7CiAgICAgaWYgKGl0ID09IG1fcmVzb3VyY2VzLmVuZCgpKQogICAgICAgICByZXR1
cm4gMDsKLSAgICByZXR1cm4gaXQtPnNlY29uZC5nZXQoKTsKKyAgICByZXR1cm4gaXQtPnZhbHVl
LmdldCgpOwogfQogCiB2b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6ZGlkVXNlRE9NU3Rv
cmFnZShTdG9yYWdlQXJlYSogc3RvcmFnZUFyZWEsIGJvb2wgaXNMb2NhbFN0b3JhZ2UsIEZyYW1l
KiBmcmFtZSkKIHsKICAgICBET01TdG9yYWdlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBkb21TdG9y
YWdlRW5kID0gbV9yZXNvdXJjZXMuZW5kKCk7CiAgICAgZm9yIChET01TdG9yYWdlUmVzb3VyY2Vz
TWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGRvbVN0b3JhZ2VF
bmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQtPmlzU2FtZU9yaWdpbkFuZFR5cGUo
ZnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCksIGlzTG9jYWxTdG9yYWdlKSkKKyAg
ICAgICAgaWYgKGl0LT52YWx1ZS0+aXNTYW1lT3JpZ2luQW5kVHlwZShmcmFtZS0+ZG9jdW1lbnQo
KS0+c2VjdXJpdHlPcmlnaW4oKSwgaXNMb2NhbFN0b3JhZ2UpKQogICAgICAgICAgICAgcmV0dXJu
OwogICAgIH0KIApAQCAtMjE4LDcgKzIxOCw3IEBAIHNpemVfdCBJbnNwZWN0b3JET01TdG9yYWdl
QWdlbnQ6Om1lbW9yeUJ5dGVzVXNlZEJ5U3RvcmFnZUNhY2hlKCkgY29uc3QKIHsKICAgICBzaXpl
X3Qgc2l6ZSA9IDA7CiAgICAgZm9yIChET01TdG9yYWdlUmVzb3VyY2VzTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IG1fcmVzb3VyY2VzLmVuZCgpOyAr
K2l0KQotICAgICAgICBzaXplICs9IGl0LT5zZWNvbmQtPnN0b3JhZ2VBcmVhKCktPm1lbW9yeUJ5
dGVzVXNlZEJ5Q2FjaGUoKTsKKyAgICAgICAgc2l6ZSArPSBpdC0+dmFsdWUtPnN0b3JhZ2VBcmVh
KCktPm1lbW9yeUJ5dGVzVXNlZEJ5Q2FjaGUoKTsKICAgICByZXR1cm4gc2l6ZTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlQWdlbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuY3Bw
CmluZGV4IDEwOTljNDA1OWNhM2Q3NDUyMWE2ZTNkMWM2ZjM1MDEzMWI0Y2ZiNmMuLjBjMjBhM2M3
Y2U3YjZlNzEzMTQ1NWE1OTY3ODJhMjNkMWJiYWU0ZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5jcHAKQEAgLTI0NSw3ICsyNDUs
NyBAQCB2b2lkIEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyopCiAK
ICAgICBEYXRhYmFzZVJlc291cmNlc01hcDo6aXRlcmF0b3IgZGF0YWJhc2VzRW5kID0gbV9yZXNv
dXJjZXMuZW5kKCk7CiAgICAgZm9yIChEYXRhYmFzZVJlc291cmNlc01hcDo6aXRlcmF0b3IgaXQg
PSBtX3Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSBkYXRhYmFzZXNFbmQ7ICsraXQpCi0gICAgICAg
IGl0LT5zZWNvbmQtPmJpbmQobV9mcm9udGVuZCk7CisgICAgICAgIGl0LT52YWx1ZS0+YmluZCht
X2Zyb250ZW5kKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjpkaXNhYmxlKEVy
cm9yU3RyaW5nKikKQEAgLTMwMyw4ICszMDMsOCBAQCB2b2lkIEluc3BlY3RvckRhdGFiYXNlQWdl
bnQ6OmV4ZWN1dGVTUUwoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlSWQsCiBT
dHJpbmcgSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6ZGF0YWJhc2VJZChEYXRhYmFzZSogZGF0YWJh
c2UpCiB7CiAgICAgZm9yIChEYXRhYmFzZVJlc291cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBtX3Jl
c291cmNlcy5iZWdpbigpOyBpdCAhPSBtX3Jlc291cmNlcy5lbmQoKTsgKytpdCkgewotICAgICAg
ICBpZiAoaXQtPnNlY29uZC0+ZGF0YWJhc2UoKSA9PSBkYXRhYmFzZSkKLSAgICAgICAgICAgIHJl
dHVybiBpdC0+Zmlyc3Q7CisgICAgICAgIGlmIChpdC0+dmFsdWUtPmRhdGFiYXNlKCkgPT0gZGF0
YWJhc2UpCisgICAgICAgICAgICByZXR1cm4gaXQtPmtleTsKICAgICB9CiAgICAgcmV0dXJuIFN0
cmluZygpOwogfQpAQCAtMzEyLDggKzMxMiw4IEBAIFN0cmluZyBJbnNwZWN0b3JEYXRhYmFzZUFn
ZW50OjpkYXRhYmFzZUlkKERhdGFiYXNlKiBkYXRhYmFzZSkKIEluc3BlY3RvckRhdGFiYXNlUmVz
b3VyY2UqIEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmZpbmRCeUZpbGVOYW1lKGNvbnN0IFN0cmlu
ZyYgZmlsZU5hbWUpCiB7CiAgICAgZm9yIChEYXRhYmFzZVJlc291cmNlc01hcDo6aXRlcmF0b3Ig
aXQgPSBtX3Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSBtX3Jlc291cmNlcy5lbmQoKTsgKytpdCkg
ewotICAgICAgICBpZiAoaXQtPnNlY29uZC0+ZGF0YWJhc2UoKS0+ZmlsZU5hbWUoKSA9PSBmaWxl
TmFtZSkKLSAgICAgICAgICAgIHJldHVybiBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICBpZiAo
aXQtPnZhbHVlLT5kYXRhYmFzZSgpLT5maWxlTmFtZSgpID09IGZpbGVOYW1lKQorICAgICAgICAg
ICAgcmV0dXJuIGl0LT52YWx1ZS5nZXQoKTsKICAgICB9CiAgICAgcmV0dXJuIDA7CiB9CkBAIC0z
MjMsNyArMzIzLDcgQEAgRGF0YWJhc2UqIEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmRhdGFiYXNl
Rm9ySWQoY29uc3QgU3RyaW5nJiBkYXRhYmFzZUlkKQogICAgIERhdGFiYXNlUmVzb3VyY2VzTWFw
OjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmZpbmQoZGF0YWJhc2VJZCk7CiAgICAgaWYgKGl0
ID09IG1fcmVzb3VyY2VzLmVuZCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gaXQt
PnNlY29uZC0+ZGF0YWJhc2UoKTsKKyAgICByZXR1cm4gaXQtPnZhbHVlLT5kYXRhYmFzZSgpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAKaW5kZXggNzZjOWM5NTMwYmE3OTRmYTc1
MTAwMzIyZDcyZWQxODU4M2VhYWQxMy4uYjVjZWEzNzE5NGU2NDkwZjk0M2VlZTQ2OWQ3MzZhNzk2
NzA3NWNjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRl
YnVnZ2VyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50LmNwcApAQCAtMjQ4LDkgKzI0OCw5IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudDo6c2V0QnJlYWtwb2ludEJ5VXJsKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgaW50
IGxpCiAKICAgICBTY3JpcHRCcmVha3BvaW50IGJyZWFrcG9pbnQobGluZU51bWJlciwgY29sdW1u
TnVtYmVyLCBjb25kaXRpb24pOwogICAgIGZvciAoU2NyaXB0c01hcDo6aXRlcmF0b3IgaXQgPSBt
X3NjcmlwdHMuYmVnaW4oKTsgaXQgIT0gbV9zY3JpcHRzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAg
IGlmICghbWF0Y2hlcyhpdC0+c2Vjb25kLnVybCwgdXJsLCBpc1JlZ2V4KSkKKyAgICAgICAgaWYg
KCFtYXRjaGVzKGl0LT52YWx1ZS51cmwsIHVybCwgaXNSZWdleCkpCiAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRpb24+IGxv
Y2F0aW9uID0gcmVzb2x2ZUJyZWFrcG9pbnQoYnJlYWtwb2ludElkLCBpdC0+Zmlyc3QsIGJyZWFr
cG9pbnQpOworICAgICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj4g
bG9jYXRpb24gPSByZXNvbHZlQnJlYWtwb2ludChicmVha3BvaW50SWQsIGl0LT5rZXksIGJyZWFr
cG9pbnQpOwogICAgICAgICBpZiAobG9jYXRpb24pCiAgICAgICAgICAgICBsb2NhdGlvbnMtPmFk
ZEl0ZW0obG9jYXRpb24pOwogICAgIH0KQEAgLTMwMiw4ICszMDIsOCBAQCB2b2lkIEluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQ6OnJlbW92ZUJyZWFrcG9pbnQoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJp
bmcmIGJyZWFrcAogICAgIEJyZWFrcG9pbnRJZFRvRGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzTWFw
OjppdGVyYXRvciBkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNJdGVyYXRvciA9IG1fYnJlYWtwb2lu
dElkVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHMuZmluZChicmVha3BvaW50SWQpOwogICAgIGlm
IChkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNJdGVyYXRvciA9PSBtX2JyZWFrcG9pbnRJZFRvRGVi
dWdTZXJ2ZXJCcmVha3BvaW50SWRzLmVuZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNJdGVyYXRvci0+c2Vjb25k
LnNpemUoKTsgKytpKQotICAgICAgICBzY3JpcHREZWJ1Z1NlcnZlcigpLnJlbW92ZUJyZWFrcG9p
bnQoZGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzSXRlcmF0b3ItPnNlY29uZFtpXSk7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNJdGVyYXRvci0+dmFs
dWUuc2l6ZSgpOyArK2kpCisgICAgICAgIHNjcmlwdERlYnVnU2VydmVyKCkucmVtb3ZlQnJlYWtw
b2ludChkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNJdGVyYXRvci0+dmFsdWVbaV0pOwogICAgIG1f
YnJlYWtwb2ludElkVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHMucmVtb3ZlKGRlYnVnU2VydmVy
QnJlYWtwb2ludElkc0l0ZXJhdG9yKTsKIH0KIApAQCAtMzMxLDcgKzMzMSw3IEBAIFBhc3NSZWZQ
dHI8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj4gSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dDo6cmVzb2x2ZUJyZWFrCiAgICAgU2NyaXB0c01hcDo6aXRlcmF0b3Igc2NyaXB0SXRlcmF0b3Ig
PSBtX3NjcmlwdHMuZmluZChzY3JpcHRJZCk7CiAgICAgaWYgKHNjcmlwdEl0ZXJhdG9yID09IG1f
c2NyaXB0cy5lbmQoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgU2NyaXB0JiBzY3JpcHQgPSBz
Y3JpcHRJdGVyYXRvci0+c2Vjb25kOworICAgIFNjcmlwdCYgc2NyaXB0ID0gc2NyaXB0SXRlcmF0
b3ItPnZhbHVlOwogICAgIGlmIChicmVha3BvaW50LmxpbmVOdW1iZXIgPCBzY3JpcHQuc3RhcnRM
aW5lIHx8IHNjcmlwdC5lbmRMaW5lIDwgYnJlYWtwb2ludC5saW5lTnVtYmVyKQogICAgICAgICBy
ZXR1cm4gMDsKIApAQCAtMzQ0LDcgKzM0NCw3IEBAIFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRl
YnVnZ2VyOjpMb2NhdGlvbj4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6cmVzb2x2ZUJyZWFrCiAg
ICAgQnJlYWtwb2ludElkVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNNYXA6Oml0ZXJhdG9yIGRl
YnVnU2VydmVyQnJlYWtwb2ludElkc0l0ZXJhdG9yID0gbV9icmVha3BvaW50SWRUb0RlYnVnU2Vy
dmVyQnJlYWtwb2ludElkcy5maW5kKGJyZWFrcG9pbnRJZCk7CiAgICAgaWYgKGRlYnVnU2VydmVy
QnJlYWtwb2ludElkc0l0ZXJhdG9yID09IG1fYnJlYWtwb2ludElkVG9EZWJ1Z1NlcnZlckJyZWFr
cG9pbnRJZHMuZW5kKCkpCiAgICAgICAgIGRlYnVnU2VydmVyQnJlYWtwb2ludElkc0l0ZXJhdG9y
ID0gbV9icmVha3BvaW50SWRUb0RlYnVnU2VydmVyQnJlYWtwb2ludElkcy5zZXQoYnJlYWtwb2lu
dElkLCBWZWN0b3I8U3RyaW5nPigpKS5pdGVyYXRvcjsKLSAgICBkZWJ1Z1NlcnZlckJyZWFrcG9p
bnRJZHNJdGVyYXRvci0+c2Vjb25kLmFwcGVuZChkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZCk7Cisg
ICAgZGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzSXRlcmF0b3ItPnZhbHVlLmFwcGVuZChkZWJ1Z1Nl
cnZlckJyZWFrcG9pbnRJZCk7CiAKICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpM
b2NhdGlvbj4gbG9jYXRpb24gPSBUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uOjpjcmVh
dGUoKQogICAgICAgICAuc2V0U2NyaXB0SWQoc2NyaXB0SWQpCkBAIC0zNzAsNyArMzcwLDcgQEAg
dm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZWFyY2hJbkNvbnRlbnQoRXJyb3JTdHJpbmcq
IGVycm9yLCBjb25zdCBTdHJpbmcmIHMKIAogICAgIFNjcmlwdHNNYXA6Oml0ZXJhdG9yIGl0ID0g
bV9zY3JpcHRzLmZpbmQoc2NyaXB0SWQpOwogICAgIGlmIChpdCAhPSBtX3NjcmlwdHMuZW5kKCkp
Ci0gICAgICAgIHJlc3VsdHMgPSBDb250ZW50U2VhcmNoVXRpbHM6OnNlYXJjaEluVGV4dEJ5TGlu
ZXMoaXQtPnNlY29uZC5zb3VyY2UsIHF1ZXJ5LCBjYXNlU2Vuc2l0aXZlLCBpc1JlZ2V4KTsKKyAg
ICAgICAgcmVzdWx0cyA9IENvbnRlbnRTZWFyY2hVdGlsczo6c2VhcmNoSW5UZXh0QnlMaW5lcyhp
dC0+dmFsdWUuc291cmNlLCBxdWVyeSwgY2FzZVNlbnNpdGl2ZSwgaXNSZWdleCk7CiAgICAgZWxz
ZQogICAgICAgICAqZXJyb3IgPSAiTm8gc2NyaXB0IGZvciBpZDogIiArIHNjcmlwdElkOwogfQpA
QCAtNDAzLDcgKzQwMyw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Z2V0U2NyaXB0
U291cmNlKEVycm9yU3RyaW5nKiBlcnJvciwgY29uc3QgU3RyaW5nJiBzCiB7CiAgICAgU2NyaXB0
c01hcDo6aXRlcmF0b3IgaXQgPSBtX3NjcmlwdHMuZmluZChzY3JpcHRJZCk7CiAgICAgaWYgKGl0
ICE9IG1fc2NyaXB0cy5lbmQoKSkKLSAgICAgICAgKnNjcmlwdFNvdXJjZSA9IGl0LT5zZWNvbmQu
c291cmNlOworICAgICAgICAqc2NyaXB0U291cmNlID0gaXQtPnZhbHVlLnNvdXJjZTsKICAgICBl
bHNlCiAgICAgICAgICplcnJvciA9ICJObyBzY3JpcHQgZm9yIGlkOiAiICsgc2NyaXB0SWQ7CiB9
CkBAIC02MzAsNyArNjMwLDcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRQYXJz
ZVNvdXJjZShjb25zdCBTdHJpbmcmIHNjcmlwdElkLCBjb25zdCBTY3JpcHQKIAogICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGJyZWFrcG9pbnRzQ29va2llID0gbV9zdGF0ZS0+Z2V0T2JqZWN0
KERlYnVnZ2VyQWdlbnRTdGF0ZTo6amF2YVNjcmlwdEJyZWFrcG9pbnRzKTsKICAgICBmb3IgKElu
c3BlY3Rvck9iamVjdDo6aXRlcmF0b3IgaXQgPSBicmVha3BvaW50c0Nvb2tpZS0+YmVnaW4oKTsg
aXQgIT0gYnJlYWtwb2ludHNDb29raWUtPmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IGJyZWFrcG9pbnRPYmplY3QgPSBpdC0+c2Vjb25kLT5hc09iamVjdCgp
OworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBicmVha3BvaW50T2JqZWN0ID0gaXQt
PnZhbHVlLT5hc09iamVjdCgpOwogICAgICAgICBib29sIGlzUmVnZXg7CiAgICAgICAgIGJyZWFr
cG9pbnRPYmplY3QtPmdldEJvb2xlYW4oImlzUmVnZXgiLCAmaXNSZWdleCk7CiAgICAgICAgIFN0
cmluZyB1cmw7CkBAIC02NDEsOSArNjQxLDkgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpkaWRQYXJzZVNvdXJjZShjb25zdCBTdHJpbmcmIHNjcmlwdElkLCBjb25zdCBTY3JpcHQKICAg
ICAgICAgYnJlYWtwb2ludE9iamVjdC0+Z2V0TnVtYmVyKCJsaW5lTnVtYmVyIiwgJmJyZWFrcG9p
bnQubGluZU51bWJlcik7CiAgICAgICAgIGJyZWFrcG9pbnRPYmplY3QtPmdldE51bWJlcigiY29s
dW1uTnVtYmVyIiwgJmJyZWFrcG9pbnQuY29sdW1uTnVtYmVyKTsKICAgICAgICAgYnJlYWtwb2lu
dE9iamVjdC0+Z2V0U3RyaW5nKCJjb25kaXRpb24iLCAmYnJlYWtwb2ludC5jb25kaXRpb24pOwot
ICAgICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj4gbG9jYXRpb24g
PSByZXNvbHZlQnJlYWtwb2ludChpdC0+Zmlyc3QsIHNjcmlwdElkLCBicmVha3BvaW50KTsKKyAg
ICAgICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRpb24+IGxvY2F0aW9uID0g
cmVzb2x2ZUJyZWFrcG9pbnQoaXQtPmtleSwgc2NyaXB0SWQsIGJyZWFrcG9pbnQpOwogICAgICAg
ICBpZiAobG9jYXRpb24pCi0gICAgICAgICAgICBtX2Zyb250ZW5kLT5icmVha3BvaW50UmVzb2x2
ZWQoaXQtPmZpcnN0LCBsb2NhdGlvbik7CisgICAgICAgICAgICBtX2Zyb250ZW5kLT5icmVha3Bv
aW50UmVzb2x2ZWQoaXQtPmtleSwgbG9jYXRpb24pOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHAKaW5kZXgg
ZjEyYmQwZGFjZjhlMzBhZmI4ZGYyNTU4NmU1OTE1NWM2ZDhkMmM0My4uNmM0MmU2NjZlMWYyMjcx
OTYzZWExY2E4NmIwZmIzOWYwY2MxZjRmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwCkBAIC0zMDUsMTIgKzMwNSwxMiBA
QCBwdWJsaWM6CiAgICAgICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6
OkluZGV4ZWREQjo6T2JqZWN0U3RvcmU+ID4gb2JqZWN0U3RvcmVzID0gVHlwZUJ1aWxkZXI6OkFy
cmF5PFR5cGVCdWlsZGVyOjpJbmRleGVkREI6Ok9iamVjdFN0b3JlPjo6Y3JlYXRlKCk7CiAKICAg
ICAgICAgZm9yIChJREJEYXRhYmFzZU1ldGFkYXRhOjpPYmplY3RTdG9yZU1hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBkYXRhYmFzZU1ldGFkYXRhLm9iamVjdFN0b3Jlcy5iZWdpbigpOyBpdCAhPSBk
YXRhYmFzZU1ldGFkYXRhLm9iamVjdFN0b3Jlcy5lbmQoKTsgKytpdCkgewotICAgICAgICAgICAg
Y29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSA9IGl0LT5z
ZWNvbmQ7CisgICAgICAgICAgICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RT
dG9yZU1ldGFkYXRhID0gaXQtPnZhbHVlOwogCiAgICAgICAgICAgICBSZWZQdHI8VHlwZUJ1aWxk
ZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpJbmRleGVkREI6Ok9iamVjdFN0b3JlSW5kZXg+ID4gaW5k
ZXhlcyA9IFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6SW5kZXhlZERCOjpPYmplY3RT
dG9yZUluZGV4Pjo6Y3JlYXRlKCk7CiAKICAgICAgICAgICAgIGZvciAoSURCT2JqZWN0U3RvcmVN
ZXRhZGF0YTo6SW5kZXhNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gb2JqZWN0U3RvcmVNZXRhZGF0
YS5pbmRleGVzLmJlZ2luKCk7IGl0ICE9IG9iamVjdFN0b3JlTWV0YWRhdGEuaW5kZXhlcy5lbmQo
KTsgKytpdCkgewotICAgICAgICAgICAgICAgIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4
TWV0YWRhdGEgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgICAgIGNvbnN0IElEQkluZGV4TWV0
YWRhdGEmIGluZGV4TWV0YWRhdGEgPSBpdC0+dmFsdWU7CiAKICAgICAgICAgICAgICAgICBSZWZQ
dHI8T2JqZWN0U3RvcmVJbmRleD4gb2JqZWN0U3RvcmVJbmRleCA9IE9iamVjdFN0b3JlSW5kZXg6
OmNyZWF0ZSgpCiAgICAgICAgICAgICAgICAgICAgIC5zZXROYW1lKGluZGV4TWV0YWRhdGEubmFt
ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JNZW1vcnlB
Z2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTWVtb3J5QWdlbnQu
Y3BwCmluZGV4IDJjZWY5YWQ1NmQxZWZiOTg0ODJhZjljN2QzYzNiOGYxNmMzYjU3NjEuLjIzNTMw
NGMzZmQwNjIxNjJiYTFlYzhjMDNiODYxYzdkMzgzYTgzN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JNZW1vcnlBZ2VudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck1lbW9yeUFnZW50LmNwcApAQCAtMTQ0LDggKzE0NCw4
IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlw
ZUJ1aWxkZXI6Ok1lbW9yeTo6Tm9kZUNvdW50PiA+IGNoaWxkcmVuU3RhdHMgPSBUeXBlQnVpbGRl
cjo6QXJyYXk8VHlwZUJ1aWxkZXI6Ok1lbW9yeTo6Tm9kZUNvdW50Pjo6Y3JlYXRlKCk7CiAgICAg
ICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIGludD46Oml0ZXJhdG9yIGl0ID0gbV9ub2RlTmFtZVRv
Q291bnQuYmVnaW4oKTsgaXQgIT0gbV9ub2RlTmFtZVRvQ291bnQuZW5kKCk7ICsraXQpIHsKLSAg
ICAgICAgICAgIFJlZlB0cjxOb2RlQ291bnQ+IG5vZGVDb3VudCA9IE5vZGVDb3VudDo6Y3JlYXRl
KCkuc2V0Tm9kZU5hbWUoaXQtPmZpcnN0KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRDb3VudChpdC0+c2Vjb25kKTsKKyAg
ICAgICAgICAgIFJlZlB0cjxOb2RlQ291bnQ+IG5vZGVDb3VudCA9IE5vZGVDb3VudDo6Y3JlYXRl
KCkuc2V0Tm9kZU5hbWUoaXQtPmtleSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0Q291bnQoaXQtPnZhbHVlKTsKICAgICAg
ICAgICAgIGNoaWxkcmVuU3RhdHMtPmFkZEl0ZW0obm9kZUNvdW50KTsKICAgICAgICAgfQogICAg
ICAgICByZXR1cm4gY2hpbGRyZW5TdGF0cy5yZWxlYXNlKCk7CkBAIC0xNTUsOCArMTU1LDggQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVp
bGRlcjo6TWVtb3J5OjpMaXN0ZW5lckNvdW50PiA+IGxpc3RlbmVyU3RhdHMgPSBUeXBlQnVpbGRl
cjo6QXJyYXk8VHlwZUJ1aWxkZXI6Ok1lbW9yeTo6TGlzdGVuZXJDb3VudD46OmNyZWF0ZSgpOwog
ICAgICAgICBmb3IgKEhhc2hNYXA8QXRvbWljU3RyaW5nLCBpbnQ+OjppdGVyYXRvciBpdCA9IG1f
ZXZlbnRUeXBlVG9Db3VudC5iZWdpbigpOyBpdCAhPSBtX2V2ZW50VHlwZVRvQ291bnQuZW5kKCk7
ICsraXQpIHsKLSAgICAgICAgICAgIFJlZlB0cjxMaXN0ZW5lckNvdW50PiBsaXN0ZW5lckNvdW50
ID0gTGlzdGVuZXJDb3VudDo6Y3JlYXRlKCkuc2V0VHlwZShpdC0+Zmlyc3QpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLnNldENvdW50KGl0LT5zZWNvbmQpOworICAgICAgICAgICAgUmVmUHRyPExpc3RlbmVy
Q291bnQ+IGxpc3RlbmVyQ291bnQgPSBMaXN0ZW5lckNvdW50OjpjcmVhdGUoKS5zZXRUeXBlKGl0
LT5rZXkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLnNldENvdW50KGl0LT52YWx1ZSk7CiAgICAgICAgICAg
ICBsaXN0ZW5lclN0YXRzLT5hZGRJdGVtKGxpc3RlbmVyQ291bnQpOwogICAgICAgICB9CiAgICAg
ICAgIHJldHVybiBsaXN0ZW5lclN0YXRzLnJlbGVhc2UoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKaW5kZXggZmEyM2FhYWY5YmVkMGY1NDg0
YzE1NzBlYzM2ZjJkM2U5MGZjYzhkYS4uNzljZjI0ZGJhYzY4YWIxZWYzMzVhNjE3NGQ0NWJhOGZi
Mjg5ZGU2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBh
Z2VBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VB
Z2VudC5jcHAKQEAgLTQ1OSw3ICs0NTksNyBAQCBzdGF0aWMgVmVjdG9yPENhY2hlZFJlc291cmNl
Kj4gY2FjaGVkUmVzb3VyY2VzRm9yRnJhbWUoRnJhbWUqIGZyYW1lKQogICAgIGNvbnN0IENhY2hl
ZFJlc291cmNlTG9hZGVyOjpEb2N1bWVudFJlc291cmNlTWFwJiBhbGxSZXNvdXJjZXMgPSBmcmFt
ZS0+ZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS0+YWxsQ2FjaGVkUmVzb3VyY2Vz
KCk7CiAgICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OkRvY3VtZW50UmVzb3VyY2VNYXA6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IGFsbFJlc291cmNlcy5lbmQoKTsKICAgICBmb3IgKENhY2hlZFJlc291
cmNlTG9hZGVyOjpEb2N1bWVudFJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGFsbFJl
c291cmNlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgQ2FjaGVkUmVzb3Vy
Y2UqIGNhY2hlZFJlc291cmNlID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgQ2FjaGVkUmVz
b3VyY2UqIGNhY2hlZFJlc291cmNlID0gaXQtPnZhbHVlLmdldCgpOwogCiAgICAgICAgIHN3aXRj
aCAoY2FjaGVkUmVzb3VyY2UtPnR5cGUoKSkgewogICAgICAgICBjYXNlIENhY2hlZFJlc291cmNl
OjpJbWFnZVJlc291cmNlOgpAQCAtNzYzLDcgKzc2Myw3IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFn
ZW50OjpkaWRDbGVhcldpbmRvd09iamVjdEluV29ybGQoRnJhbWUqIGZyYW1lLCBET01XcmFwcGVy
V29yCiAgICAgICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gc2NyaXB0
cy0+ZW5kKCk7CiAgICAgICAgIGZvciAoSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciBp
dCA9IHNjcmlwdHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgU3Ry
aW5nIHNjcmlwdFRleHQ7Ci0gICAgICAgICAgICBpZiAoaXQtPnNlY29uZC0+YXNTdHJpbmcoJnNj
cmlwdFRleHQpKQorICAgICAgICAgICAgaWYgKGl0LT52YWx1ZS0+YXNTdHJpbmcoJnNjcmlwdFRl
eHQpKQogICAgICAgICAgICAgICAgIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLT5pbmplY3RTY3Jp
cHQoc2NyaXB0VGV4dCwgbWFpbldvcmxkU2NyaXB0U3RhdGUoZnJhbWUpKTsKICAgICAgICAgfQog
ICAgIH0KQEAgLTc5NSw4ICs3OTUsOCBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZnJhbWVE
ZXRhY2hlZChGcmFtZSogZnJhbWUpCiB7CiAgICAgSGFzaE1hcDxGcmFtZSosIFN0cmluZz46Oml0
ZXJhdG9yIGl0ZXJhdG9yID0gbV9mcmFtZVRvSWRlbnRpZmllci5maW5kKGZyYW1lKTsKICAgICBp
ZiAoaXRlcmF0b3IgIT0gbV9mcmFtZVRvSWRlbnRpZmllci5lbmQoKSkgewotICAgICAgICBtX2Zy
b250ZW5kLT5mcmFtZURldGFjaGVkKGl0ZXJhdG9yLT5zZWNvbmQpOwotICAgICAgICBtX2lkZW50
aWZpZXJUb0ZyYW1lLnJlbW92ZShpdGVyYXRvci0+c2Vjb25kKTsKKyAgICAgICAgbV9mcm9udGVu
ZC0+ZnJhbWVEZXRhY2hlZChpdGVyYXRvci0+dmFsdWUpOworICAgICAgICBtX2lkZW50aWZpZXJU
b0ZyYW1lLnJlbW92ZShpdGVyYXRvci0+dmFsdWUpOwogICAgICAgICBtX2ZyYW1lVG9JZGVudGlm
aWVyLnJlbW92ZShpdGVyYXRvcik7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwCmluZGV4IDQ1NDBhYTdjZDgxZTRh
Y2E2MWFmZDRhODg5MjFlNTc2ZWIzYzJjYWEuLmMzMjUxYTNkMTBjNzM3NGQxNDA4OTc0ZjlkOTcw
NjdjZGI5MTU2ZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JQcm9maWxlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yUHJvZmlsZXJBZ2VudC5jcHAKQEAgLTI0OSwxMCArMjQ5LDEwIEBAIHZvaWQgSW5zcGVjdG9y
UHJvZmlsZXJBZ2VudDo6Z2V0UHJvZmlsZUhlYWRlcnMoRXJyb3JTdHJpbmcqLCBSZWZQdHI8VHlw
ZUJ1aWxkZXI6CiAKICAgICBQcm9maWxlc01hcDo6aXRlcmF0b3IgcHJvZmlsZXNFbmQgPSBtX3By
b2ZpbGVzLmVuZCgpOwogICAgIGZvciAoUHJvZmlsZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wcm9m
aWxlcy5iZWdpbigpOyBpdCAhPSBwcm9maWxlc0VuZDsgKytpdCkKLSAgICAgICAgaGVhZGVycy0+
YWRkSXRlbShjcmVhdGVQcm9maWxlSGVhZGVyKCppdC0+c2Vjb25kKSk7CisgICAgICAgIGhlYWRl
cnMtPmFkZEl0ZW0oY3JlYXRlUHJvZmlsZUhlYWRlcigqaXQtPnZhbHVlKSk7CiAgICAgSGVhcFNu
YXBzaG90c01hcDo6aXRlcmF0b3Igc25hcHNob3RzRW5kID0gbV9zbmFwc2hvdHMuZW5kKCk7CiAg
ICAgZm9yIChIZWFwU25hcHNob3RzTWFwOjppdGVyYXRvciBpdCA9IG1fc25hcHNob3RzLmJlZ2lu
KCk7IGl0ICE9IHNuYXBzaG90c0VuZDsgKytpdCkKLSAgICAgICAgaGVhZGVycy0+YWRkSXRlbShj
cmVhdGVTbmFwc2hvdEhlYWRlcigqaXQtPnNlY29uZCkpOworICAgICAgICBoZWFkZXJzLT5hZGRJ
dGVtKGNyZWF0ZVNuYXBzaG90SGVhZGVyKCppdC0+dmFsdWUpKTsKIH0KIAogbmFtZXNwYWNlIHsK
QEAgLTI4MCwxNiArMjgwLDE2IEBAIHZvaWQgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6Z2V0UHJv
ZmlsZShFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogICAgICAgICBwcm9maWxlT2JqZWN0ID0gVHlwZUJ1aWxkZXI6
OlByb2ZpbGVyOjpQcm9maWxlOjpjcmVhdGUoKTsKLSAgICAgICAgcHJvZmlsZU9iamVjdC0+c2V0
SGVhZChpdC0+c2Vjb25kLT5idWlsZEluc3BlY3Rvck9iamVjdEZvckhlYWQoKSk7Ci0gICAgICAg
IGlmIChpdC0+c2Vjb25kLT5ib3R0b21VcEhlYWQoKSkKLSAgICAgICAgICAgIHByb2ZpbGVPYmpl
Y3QtPnNldEJvdHRvbVVwSGVhZChpdC0+c2Vjb25kLT5idWlsZEluc3BlY3Rvck9iamVjdEZvckJv
dHRvbVVwSGVhZCgpKTsKKyAgICAgICAgcHJvZmlsZU9iamVjdC0+c2V0SGVhZChpdC0+dmFsdWUt
PmJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9ySGVhZCgpKTsKKyAgICAgICAgaWYgKGl0LT52YWx1ZS0+
Ym90dG9tVXBIZWFkKCkpCisgICAgICAgICAgICBwcm9maWxlT2JqZWN0LT5zZXRCb3R0b21VcEhl
YWQoaXQtPnZhbHVlLT5idWlsZEluc3BlY3Rvck9iamVjdEZvckJvdHRvbVVwSGVhZCgpKTsKICAg
ICB9IGVsc2UgaWYgKHR5cGUgPT0gSGVhcFByb2ZpbGVUeXBlKSB7CiAgICAgICAgIEhlYXBTbmFw
c2hvdHNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zbmFwc2hvdHMuZmluZCh1aWQpOwogICAgICAgICBp
ZiAoaXQgPT0gbV9zbmFwc2hvdHMuZW5kKCkpIHsKICAgICAgICAgICAgICplcnJvclN0cmluZyA9
ICJQcm9maWxlIHdhc24ndCBmb3VuZCI7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
LSAgICAgICAgUmVmUHRyPFNjcmlwdEhlYXBTbmFwc2hvdD4gc25hcHNob3QgPSBpdC0+c2Vjb25k
OworICAgICAgICBSZWZQdHI8U2NyaXB0SGVhcFNuYXBzaG90PiBzbmFwc2hvdCA9IGl0LT52YWx1
ZTsKICAgICAgICAgcHJvZmlsZU9iamVjdCA9IFR5cGVCdWlsZGVyOjpQcm9maWxlcjo6UHJvZmls
ZTo6Y3JlYXRlKCk7CiAgICAgICAgIGlmIChtX2Zyb250ZW5kKSB7CiAgICAgICAgICAgICBPdXRw
dXRTdHJlYW0gc3RyZWFtKG1fZnJvbnRlbmQsIHVpZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5jcHAKaW5kZXggZDhhMjNlZDEyNzQ2
MmQyZWM0NDkzYWFlMzA2YjRhYzFjY2M3MWRmNS4uOWY5MDk1NjkyZmZmODhkNGEwMjY2ZjI3MWVm
N2NkZTZhMDkzODU0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclJlc291cmNlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JSZXNvdXJjZUFnZW50LmNwcApAQCAtMTA1LDcgKzEwNSw3IEBAIHN0YXRpYyBQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JIZWFkZXJzKGNvbnN0IEhUVFBIZWFk
ZXJNYXAmIGhlCiAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaGVhZGVyc09iamVjdCA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gaGVhZGVycy5lbmQoKTsKICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gaGVhZGVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGhl
YWRlcnNPYmplY3QtPnNldFN0cmluZyhpdC0+Zmlyc3Quc3RyaW5nKCksIGl0LT5zZWNvbmQpOwor
ICAgICAgICBoZWFkZXJzT2JqZWN0LT5zZXRTdHJpbmcoaXQtPmtleS5zdHJpbmcoKSwgaXQtPnZh
bHVlKTsKICAgICByZXR1cm4gaGVhZGVyc09iamVjdDsKIH0KIApAQCAtMjE2LDggKzIxNiw4IEBA
IHZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6d2lsbFNlbmRSZXF1ZXN0KHVuc2lnbmVkIGxv
bmcgaWRlbnRpZmllciwgRG9jdW1lbnRMCiAgICAgICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gaGVhZGVycy0+ZW5kKCk7CiAgICAgICAgIGZvciAoSW5zcGVjdG9yT2Jq
ZWN0Ojpjb25zdF9pdGVyYXRvciBpdCA9IGhlYWRlcnMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgewogICAgICAgICAgICAgU3RyaW5nIHZhbHVlOwotICAgICAgICAgICAgaWYgKGl0LT5zZWNv
bmQtPmFzU3RyaW5nKCZ2YWx1ZSkpCi0gICAgICAgICAgICAgICAgcmVxdWVzdC5zZXRIVFRQSGVh
ZGVyRmllbGQoaXQtPmZpcnN0LCB2YWx1ZSk7CisgICAgICAgICAgICBpZiAoaXQtPnZhbHVlLT5h
c1N0cmluZygmdmFsdWUpKQorICAgICAgICAgICAgICAgIHJlcXVlc3Quc2V0SFRUUEhlYWRlckZp
ZWxkKGl0LT5rZXksIHZhbHVlKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzY1LDcgKzM2NSw3
IEBAIHZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6ZG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVy
U3RhcnRlZExvYWRpbmdGb3JDbGllbnQodW5zCiAgICAgaWYgKGl0ID09IG1fcGVuZGluZ1hIUlJl
cGxheURhdGEuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFhIUlJlcGxheURhdGEqIHho
clJlcGxheURhdGEgPSBpdC0+c2Vjb25kLmdldCgpOworICAgIFhIUlJlcGxheURhdGEqIHhoclJl
cGxheURhdGEgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgU3RyaW5nIHJlcXVlc3RJZCA9IElkZW50
aWZpZXJzRmFjdG9yeTo6cmVxdWVzdElkKGlkZW50aWZpZXIpOwogICAgIG1fcmVzb3VyY2VzRGF0
YS0+c2V0WEhSUmVwbGF5RGF0YShyZXF1ZXN0SWQsIHhoclJlcGxheURhdGEpOwogfQpAQCAtMzc1
LDcgKzM3NSw3IEBAIHZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6d2lsbExvYWRYSFIoVGhy
ZWFkYWJsZUxvYWRlckNsaWVudCogY2xpZW50LCBjb25zdCBTCiAgICAgUmVmUHRyPFhIUlJlcGxh
eURhdGE+IHhoclJlcGxheURhdGEgPSBYSFJSZXBsYXlEYXRhOjpjcmVhdGUobWV0aG9kLCB1cmws
IGFzeW5jLCBmb3JtRGF0YSwgaW5jbHVkZUNyZWRlbnRpYWxzKTsKICAgICBIVFRQSGVhZGVyTWFw
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBoZWFkZXJzLmVuZCgpOwogICAgIGZvciAoSFRUUEhlYWRl
ck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBoZWFkZXJzLmJlZ2luKCk7IGl0IT0gZW5kOyArK2l0
KQotICAgICAgICB4aHJSZXBsYXlEYXRhLT5hZGRIZWFkZXIoaXQtPmZpcnN0LCBpdC0+c2Vjb25k
KTsKKyAgICAgICAgeGhyUmVwbGF5RGF0YS0+YWRkSGVhZGVyKGl0LT5rZXksIGl0LT52YWx1ZSk7
CiAgICAgbV9wZW5kaW5nWEhSUmVwbGF5RGF0YS5zZXQoY2xpZW50LCB4aHJSZXBsYXlEYXRhKTsK
IH0KIApAQCAtNjIwLDcgKzYyMCw3IEBAIHZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6cmVw
bGF5WEhSKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQpCiAgICAgeGhyLT5v
cGVuKHhoclJlcGxheURhdGEtPm1ldGhvZCgpLCB4aHJSZXBsYXlEYXRhLT51cmwoKSwgeGhyUmVw
bGF5RGF0YS0+YXN5bmMoKSwgY29kZSk7CiAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0
b3IgZW5kID0geGhyUmVwbGF5RGF0YS0+aGVhZGVycygpLmVuZCgpOwogICAgIGZvciAoSFRUUEhl
YWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSB4aHJSZXBsYXlEYXRhLT5oZWFkZXJzKCkuYmVn
aW4oKTsgaXQhPSBlbmQ7ICsraXQpCi0gICAgICAgIHhoci0+c2V0UmVxdWVzdEhlYWRlcihpdC0+
Zmlyc3QsIGl0LT5zZWNvbmQsIGNvZGUpOworICAgICAgICB4aHItPnNldFJlcXVlc3RIZWFkZXIo
aXQtPmtleSwgaXQtPnZhbHVlLCBjb2RlKTsKICAgICB4aHItPnNlbmRGcm9tSW5zcGVjdG9yKHho
clJlcGxheURhdGEtPmZvcm1EYXRhKCksIGNvZGUpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclN0YXRlLmNwcAppbmRleCA3MGEyNDM5ODQ3YzQ1N2MzOGEzOTBhMzMw
MDRhM2Q5ZTFiMWRiNDFkLi5iYWYxMGM5NzFlMTE5NTMyNTc2YmY0OTQ1NTIyZjM3YjA4MzI1YWZi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5jcHAKQEAgLTgw
LDcgKzgwLDcgQEAgYm9vbCBJbnNwZWN0b3JTdGF0ZTo6Z2V0Qm9vbGVhbihjb25zdCBTdHJpbmcm
IHByb3BlcnR5TmFtZSkKICAgICBJbnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9yIGl0ID0gbV9wcm9w
ZXJ0aWVzLT5maW5kKHByb3BlcnR5TmFtZSk7CiAgICAgYm9vbCB2YWx1ZSA9IGZhbHNlOwogICAg
IGlmIChpdCAhPSBtX3Byb3BlcnRpZXMtPmVuZCgpKQotICAgICAgICBpdC0+c2Vjb25kLT5hc0Jv
b2xlYW4oJnZhbHVlKTsKKyAgICAgICAgaXQtPnZhbHVlLT5hc0Jvb2xlYW4oJnZhbHVlKTsKICAg
ICByZXR1cm4gdmFsdWU7CiB9CiAKQEAgLTg5LDcgKzg5LDcgQEAgU3RyaW5nIEluc3BlY3RvclN0
YXRlOjpnZXRTdHJpbmcoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCiAgICAgSW5zcGVjdG9y
T2JqZWN0OjppdGVyYXRvciBpdCA9IG1fcHJvcGVydGllcy0+ZmluZChwcm9wZXJ0eU5hbWUpOwog
ICAgIFN0cmluZyB2YWx1ZTsKICAgICBpZiAoaXQgIT0gbV9wcm9wZXJ0aWVzLT5lbmQoKSkKLSAg
ICAgICAgaXQtPnNlY29uZC0+YXNTdHJpbmcoJnZhbHVlKTsKKyAgICAgICAgaXQtPnZhbHVlLT5h
c1N0cmluZygmdmFsdWUpOwogICAgIHJldHVybiB2YWx1ZTsKIH0KIApAQCAtOTgsNyArOTgsNyBA
QCBsb25nIEluc3BlY3RvclN0YXRlOjpnZXRMb25nKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1l
KQogICAgIEluc3BlY3Rvck9iamVjdDo6aXRlcmF0b3IgaXQgPSBtX3Byb3BlcnRpZXMtPmZpbmQo
cHJvcGVydHlOYW1lKTsKICAgICBsb25nIHZhbHVlID0gMDsKICAgICBpZiAoaXQgIT0gbV9wcm9w
ZXJ0aWVzLT5lbmQoKSkKLSAgICAgICAgaXQtPnNlY29uZC0+YXNOdW1iZXIoJnZhbHVlKTsKKyAg
ICAgICAgaXQtPnZhbHVlLT5hc051bWJlcigmdmFsdWUpOwogICAgIHJldHVybiB2YWx1ZTsKIH0K
IApAQCAtMTA3LDcgKzEwNyw3IEBAIGRvdWJsZSBJbnNwZWN0b3JTdGF0ZTo6Z2V0RG91YmxlKGNv
bnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKQogICAgIEluc3BlY3Rvck9iamVjdDo6aXRlcmF0b3Ig
aXQgPSBtX3Byb3BlcnRpZXMtPmZpbmQocHJvcGVydHlOYW1lKTsKICAgICBkb3VibGUgdmFsdWUg
PSAwOwogICAgIGlmIChpdCAhPSBtX3Byb3BlcnRpZXMtPmVuZCgpKQotICAgICAgICBpdC0+c2Vj
b25kLT5hc051bWJlcigmdmFsdWUpOworICAgICAgICBpdC0+dmFsdWUtPmFzTnVtYmVyKCZ2YWx1
ZSk7CiAgICAgcmV0dXJuIHZhbHVlOwogfQogCkBAIC0xMTgsNyArMTE4LDcgQEAgUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvclN0YXRlOjpnZXRPYmplY3QoY29uc3QgU3RyaW5n
JiBwcm9wZXJ0eU5hbWUKICAgICAgICAgbV9wcm9wZXJ0aWVzLT5zZXRPYmplY3QocHJvcGVydHlO
YW1lLCBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKICAgICAgICAgaXQgPSBtX3Byb3BlcnRp
ZXMtPmZpbmQocHJvcGVydHlOYW1lKTsKICAgICB9Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQtPmFz
T2JqZWN0KCk7CisgICAgcmV0dXJuIGl0LT52YWx1ZS0+YXNPYmplY3QoKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclN0eWxlU2hlZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
clN0eWxlU2hlZXQuY3BwCmluZGV4IDJkZThkOWNiYTM5NjcwYTIzYmM1MWY2N2RiMDI4YzhjMjZh
MWM5NzEuLmM5ZWQwNDMzYTc4ZmUxYWY2ZTk4ZDE5YTNjMmQ1M2NkYjQ2MmExMTggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKQEAgLTUz
Niw3ICs1MzYsNyBAQCBQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNTU1N0eWxlPiBJbnNw
ZWN0b3JTdHlsZTo6c3R5bGVXaXRoUHJvcGVydGllcygpIGNvbgogICAgICAgICAgICAgICAgICAg
ICAgICAgc2hvdWxkSW5hY3RpdmF0ZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGVsc2Ug
ewogICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmV2aW91c1BhcnNlZE9rOwotICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gYWN0aXZlSXQtPnNlY29uZC0+Z2V0Qm9v
bGVhbihUeXBlQnVpbGRlcjo6Q1NTOjpDU1NQcm9wZXJ0eTo6UGFyc2VkT2ssICZwcmV2aW91c1Bh
cnNlZE9rKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc3VjY2VzcyA9IGFjdGl2ZUl0
LT52YWx1ZS0+Z2V0Qm9vbGVhbihUeXBlQnVpbGRlcjo6Q1NTOjpDU1NQcm9wZXJ0eTo6UGFyc2Vk
T2ssICZwcmV2aW91c1BhcnNlZE9rKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWNj
ZXNzICYmICFwcmV2aW91c1BhcnNlZE9rKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNo
b3VsZEluYWN0aXZhdGUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC01NDQsNyAr
NTQ0LDcgQEAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9y
U3R5bGU6OnN0eWxlV2l0aFByb3BlcnRpZXMoKSBjb24KICAgICAgICAgICAgICAgICAgICAgcHJv
cGVydHlOYW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5LnNldChjYW5vbmljYWxQcm9wZXJ0eU5h
bWUsIHByb3BlcnR5KTsKIAogICAgICAgICAgICAgICAgIGlmIChzaG91bGRJbmFjdGl2YXRlKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGFjdGl2ZUl0LT5zZWNvbmQtPnNldFN0YXR1cyhUeXBlQnVp
bGRlcjo6Q1NTOjpDU1NQcm9wZXJ0eTo6U3RhdHVzOjpJbmFjdGl2ZSk7CisgICAgICAgICAgICAg
ICAgICAgIGFjdGl2ZUl0LT52YWx1ZS0+c2V0U3RhdHVzKFR5cGVCdWlsZGVyOjpDU1M6OkNTU1By
b3BlcnR5OjpTdGF0dXM6OkluYWN0aXZlKTsKICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlO
YW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5LnNldChjYW5vbmljYWxQcm9wZXJ0eU5hbWUsIHBy
b3BlcnR5KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtMTA0
NCw3ICsxMDQ0LDcgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3JTdHlsZT4gSW5zcGVjdG9yU3R5bGVT
aGVldDo6aW5zcGVjdG9yU3R5bGVGb3JJZChjb25zdCBJbnNwZWMKICAgICAgICAgUmVmUHRyPElu
c3BlY3RvclN0eWxlPiBpbnNwZWN0b3JTdHlsZSA9IEluc3BlY3RvclN0eWxlOjpjcmVhdGUoaWQs
IHN0eWxlLCB0aGlzKTsKICAgICAgICAgcmV0dXJuIGluc3BlY3RvclN0eWxlLnJlbGVhc2UoKTsK
ICAgICB9Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgcmV0dXJuIGl0LT52YWx1ZTsKIH0K
IAogdm9pZCBJbnNwZWN0b3JTdHlsZVNoZWV0OjpyZW1lbWJlckluc3BlY3RvclN0eWxlKFJlZlB0
cjxJbnNwZWN0b3JTdHlsZT4gaW5zcGVjdG9yU3R5bGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwCmluZGV4IGU0ZWFkMTdlNTI4NjY4ZDllNTA1YmZkY2Ix
MDMwZTdiNTBmYjc3NzcuLmFkYTI2MTdjYzBjNGJlYTBhOWYxOTlmMjU5NzcxNGQyNjkwYjA2ZTgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwCkBAIC03
MTcsNyArNzE3LDcgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gSW5zcGVjdG9yT2JqZWN0
QmFzZTo6Z2V0KGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKICAgICBEaWN0aW9uYXJ5Ojpjb25z
dF9pdGVyYXRvciBpdCA9IG1fZGF0YS5maW5kKG5hbWUpOwogICAgIGlmIChpdCA9PSBtX2RhdGEu
ZW5kKCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgIHJl
dHVybiBpdC0+dmFsdWU7CiB9CiAKIHZvaWQgSW5zcGVjdG9yT2JqZWN0QmFzZTo6cmVtb3ZlKGNv
bnN0IFN0cmluZyYgbmFtZSkKQEAgLTczOSw5ICs3MzksOSBAQCB2b2lkIEluc3BlY3Rvck9iamVj
dEJhc2U6OndyaXRlSlNPTihTdHJpbmdCdWlsZGVyKiBvdXRwdXQpIGNvbnN0CiAgICAgICAgIEFT
U0VSVChpdCAhPSBtX2RhdGEuZW5kKCkpOwogICAgICAgICBpZiAoaSkKICAgICAgICAgICAgIG91
dHB1dC0+YXBwZW5kKCcsJyk7Ci0gICAgICAgIGRvdWJsZVF1b3RlU3RyaW5nKGl0LT5maXJzdCwg
b3V0cHV0KTsKKyAgICAgICAgZG91YmxlUXVvdGVTdHJpbmcoaXQtPmtleSwgb3V0cHV0KTsKICAg
ICAgICAgb3V0cHV0LT5hcHBlbmQoJzonKTsKLSAgICAgICAgaXQtPnNlY29uZC0+d3JpdGVKU09O
KG91dHB1dCk7CisgICAgICAgIGl0LT52YWx1ZS0+d3JpdGVKU09OKG91dHB1dCk7CiAgICAgfQog
ICAgIG91dHB1dC0+YXBwZW5kKCd9Jyk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yV29ya2VyQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvcldvcmtlckFnZW50LmNwcAppbmRleCAxYjdjZWRiYzM4MzJlY2Y5MzY3ZmVh
N2Y1YTBiNmEwMTdhZWI4YzE1Li5lOTBmN2NiNGI0OGE0NzkyNjgyMTllODlmZWI5ZGY4MWU1MDMw
YWRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yV29ya2Vy
QWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JXb3JrZXJB
Z2VudC5jcHAKQEAgLTIwNSw5ICsyMDUsOSBAQCB2b2lkIEluc3BlY3RvcldvcmtlckFnZW50Ojp3
b3JrZXJDb250ZXh0VGVybWluYXRlZChXb3JrZXJDb250ZXh0UHJveHkqIHByb3h5KQogewogICAg
IG1fZGVkaWNhdGVkV29ya2Vycy5yZW1vdmUocHJveHkpOwogICAgIGZvciAoV29ya2VyQ2hhbm5l
bHM6Oml0ZXJhdG9yIGl0ID0gbV9pZFRvQ2hhbm5lbC5iZWdpbigpOyBpdCAhPSBtX2lkVG9DaGFu
bmVsLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmIChwcm94eSA9PSBpdC0+c2Vjb25kLT5wcm94
eSgpKSB7Ci0gICAgICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kLT53b3JrZXIoKS0+d29ya2Vy
VGVybWluYXRlZChpdC0+Zmlyc3QpOwotICAgICAgICAgICAgZGVsZXRlIGl0LT5zZWNvbmQ7Cisg
ICAgICAgIGlmIChwcm94eSA9PSBpdC0+dmFsdWUtPnByb3h5KCkpIHsKKyAgICAgICAgICAgIG1f
aW5zcGVjdG9yRnJvbnRlbmQtPndvcmtlcigpLT53b3JrZXJUZXJtaW5hdGVkKGl0LT5rZXkpOwor
ICAgICAgICAgICAgZGVsZXRlIGl0LT52YWx1ZTsKICAgICAgICAgICAgIG1faWRUb0NoYW5uZWwu
cmVtb3ZlKGl0KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMjE3LDE0ICsy
MTcsMTQgQEAgdm9pZCBJbnNwZWN0b3JXb3JrZXJBZ2VudDo6d29ya2VyQ29udGV4dFRlcm1pbmF0
ZWQoV29ya2VyQ29udGV4dFByb3h5KiBwcm94eSkKIHZvaWQgSW5zcGVjdG9yV29ya2VyQWdlbnQ6
OmNyZWF0ZVdvcmtlckZyb250ZW5kQ2hhbm5lbHNGb3JFeGlzdGluZ1dvcmtlcnMoKQogewogICAg
IGZvciAoRGVkaWNhdGVkV29ya2Vyczo6aXRlcmF0b3IgaXQgPSBtX2RlZGljYXRlZFdvcmtlcnMu
YmVnaW4oKTsgaXQgIT0gbV9kZWRpY2F0ZWRXb3JrZXJzLmVuZCgpOyArK2l0KQotICAgICAgICBj
cmVhdGVXb3JrZXJGcm9udGVuZENoYW5uZWwoaXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsKKyAgICAg
ICAgY3JlYXRlV29ya2VyRnJvbnRlbmRDaGFubmVsKGl0LT5rZXksIGl0LT52YWx1ZSk7CiB9CiAK
IHZvaWQgSW5zcGVjdG9yV29ya2VyQWdlbnQ6OmRlc3Ryb3lXb3JrZXJGcm9udGVuZENoYW5uZWxz
KCkKIHsKICAgICBmb3IgKFdvcmtlckNoYW5uZWxzOjppdGVyYXRvciBpdCA9IG1faWRUb0NoYW5u
ZWwuYmVnaW4oKTsgaXQgIT0gbV9pZFRvQ2hhbm5lbC5lbmQoKTsgKytpdCkgewotICAgICAgICBp
dC0+c2Vjb25kLT5kaXNjb25uZWN0RnJvbVdvcmtlckNvbnRleHQoKTsKLSAgICAgICAgZGVsZXRl
IGl0LT5zZWNvbmQ7CisgICAgICAgIGl0LT52YWx1ZS0+ZGlzY29ubmVjdEZyb21Xb3JrZXJDb250
ZXh0KCk7CisgICAgICAgIGRlbGV0ZSBpdC0+dmFsdWU7CiAgICAgfQogICAgIG1faWRUb0NoYW5u
ZWwuY2xlYXIoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9NZW1v
cnlJbnN0cnVtZW50YXRpb25JbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9NZW1v
cnlJbnN0cnVtZW50YXRpb25JbXBsLmNwcAppbmRleCA5NDY4ODhjZTIwZmY4ODcyN2Q2MThkOGNk
ZmZkMzc0YzQ2MjAwOTk3Li4yMWE5ZWYyOTAwZjcwMThhZDUzYWUzZGM2MDA1ODhhYzI2ZjI1MDhj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvTWVtb3J5SW5zdHJ1bWVudGF0
aW9uSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL01lbW9yeUluc3RydW1l
bnRhdGlvbkltcGwuY3BwCkBAIC01NSw3ICs1NSw3IEBAIHZvaWQgTWVtb3J5SW5zdHJ1bWVudGF0
aW9uSW1wbDo6Y291bnRPYmplY3RTaXplKE1lbW9yeU9iamVjdFR5cGUgb2JqZWN0VHlwZSwgc2l6
CiAgICAgQVNTRVJUKG9iamVjdFR5cGUpOwogICAgIFR5cGVUb1NpemVNYXA6OkFkZFJlc3VsdCBy
ZXN1bHQgPSBtX3RvdGFsU2l6ZXMuYWRkKG9iamVjdFR5cGUsIHNpemUpOwogICAgIGlmICghcmVz
dWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kICs9IHNpemU7
CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgKz0gc2l6ZTsKIH0KIAogdm9pZCBNZW1v
cnlJbnN0cnVtZW50YXRpb25JbXBsOjpkZWZlckluc3RydW1lbnRlZFBvaW50ZXIoUGFzc093blB0
cjxJbnN0cnVtZW50ZWRQb2ludGVyQmFzZT4gcG9pbnRlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9NZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsLmggYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbC5oCmluZGV4IDhhMmFlZTVl
MDUxY2U4NjUwYjRkMzExOTFiZDUyOGFkMDc5M2FkOGMuLjFlY2M5ZGRiZjljMjllYjczNmUyZjc1
YmVjMzM0ZGY4YTAxNjgwNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9N
ZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L01lbW9yeUluc3RydW1lbnRhdGlvbkltcGwuaApAQCAtNTIsMTQgKzUyLDE0IEBAIHB1YmxpYzoK
ICAgICBzaXplX3QgdG90YWxTaXplKE1lbW9yeU9iamVjdFR5cGUgb2JqZWN0VHlwZSkgY29uc3QK
ICAgICB7CiAgICAgICAgIFR5cGVUb1NpemVNYXA6OmNvbnN0X2l0ZXJhdG9yIGkgPSBtX3RvdGFs
U2l6ZXMuZmluZChvYmplY3RUeXBlKTsKLSAgICAgICAgcmV0dXJuIGkgPT0gbV90b3RhbFNpemVz
LmVuZCgpID8gMCA6IGktPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGkgPT0gbV90b3RhbFNpemVz
LmVuZCgpID8gMCA6IGktPnZhbHVlOwogICAgIH0KIAogICAgIHNpemVfdCByZXBvcnRlZFNpemVG
b3JBbGxUeXBlcygpIGNvbnN0CiAgICAgewogICAgICAgICBzaXplX3Qgc2l6ZSA9IDA7CiAgICAg
ICAgIGZvciAoVHlwZVRvU2l6ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaSA9IG1fdG90YWxTaXplcy5i
ZWdpbigpOyBpICE9IG1fdG90YWxTaXplcy5lbmQoKTsgKytpKQotICAgICAgICAgICAgc2l6ZSAr
PSBpLT5zZWNvbmQ7CisgICAgICAgICAgICBzaXplICs9IGktPnZhbHVlOwogICAgICAgICByZXR1
cm4gc2l6ZTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9O
ZXR3b3JrUmVzb3VyY2VzRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvTmV0d29y
a1Jlc291cmNlc0RhdGEuY3BwCmluZGV4IDQxOThmYjUxZDY5YWJkMDZkMWQwMjNiNDcyNTcxMjky
NjE1YTEwYTMuLjc4OGViZWE1NWQyNmI5MjU1YjNkMTkzMWY4YTNmOWZiYjBjZjk2OTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0YS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL05ldHdvcmtSZXNvdXJjZXNEYXRhLmNwcApA
QCAtMjkxLDggKzI5MSw4IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlc0RhdGE6OnNldFhIUlJlcGxh
eURhdGEoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIFhIUlJlcGxheURhCiAgICAgICAgIFJldXNl
ZFJlcXVlc3RJZHM6Oml0ZXJhdG9yIGl0OwogICAgICAgICBSZXVzZWRSZXF1ZXN0SWRzOjppdGVy
YXRvciBlbmQgPSBtX3JldXNlZFhIUlJlcGxheURhdGFSZXF1ZXN0SWRzLmVuZCgpOwogICAgICAg
ICBmb3IgKGl0ID0gbV9yZXVzZWRYSFJSZXBsYXlEYXRhUmVxdWVzdElkcy5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGlmIChpdC0+c2Vjb25kID09IHJlcXVlc3RJZCkK
LSAgICAgICAgICAgICAgICBzZXRYSFJSZXBsYXlEYXRhKGl0LT5maXJzdCwgeGhyUmVwbGF5RGF0
YSk7CisgICAgICAgICAgICBpZiAoaXQtPnZhbHVlID09IHJlcXVlc3RJZCkKKyAgICAgICAgICAg
ICAgICBzZXRYSFJSZXBsYXlEYXRhKGl0LT5rZXksIHhoclJlcGxheURhdGEpOwogICAgICAgICB9
CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zMTgsMTAgKzMxOCwxMCBAQCBWZWN0b3I8U3Ry
aW5nPiBOZXR3b3JrUmVzb3VyY2VzRGF0YTo6cmVtb3ZlQ2FjaGVkUmVzb3VyY2UoQ2FjaGVkUmVz
b3VyY2UqIGNhY2hlZAogICAgIFJlc291cmNlRGF0YU1hcDo6aXRlcmF0b3IgaXQ7CiAgICAgUmVz
b3VyY2VEYXRhTWFwOjppdGVyYXRvciBlbmQgPSBtX3JlcXVlc3RJZFRvUmVzb3VyY2VEYXRhTWFw
LmVuZCgpOwogICAgIGZvciAoaXQgPSBtX3JlcXVlc3RJZFRvUmVzb3VyY2VEYXRhTWFwLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBSZXNvdXJjZURhdGEqIHJlc291cmNlRGF0
YSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFJlc291cmNlRGF0YSogcmVzb3VyY2VEYXRhID0gaXQt
PnZhbHVlOwogICAgICAgICBpZiAocmVzb3VyY2VEYXRhLT5jYWNoZWRSZXNvdXJjZSgpID09IGNh
Y2hlZFJlc291cmNlKSB7CiAgICAgICAgICAgICByZXNvdXJjZURhdGEtPnNldENhY2hlZFJlc291
cmNlKDApOwotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChpdC0+Zmlyc3QpOworICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZChpdC0+a2V5KTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzM4LDkg
KzMzOCw5IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlc0RhdGE6OmNsZWFyKGNvbnN0IFN0cmluZyYg
cHJlc2VydmVkTG9hZGVySWQpCiAgICAgUmVzb3VyY2VEYXRhTWFwOjppdGVyYXRvciBpdDsKICAg
ICBSZXNvdXJjZURhdGFNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fcmVxdWVzdElkVG9SZXNvdXJjZURh
dGFNYXAuZW5kKCk7CiAgICAgZm9yIChpdCA9IG1fcmVxdWVzdElkVG9SZXNvdXJjZURhdGFNYXAu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFJlc291cmNlRGF0YSogcmVzb3Vy
Y2VEYXRhID0gaXQtPnNlY29uZDsKKyAgICAgICAgUmVzb3VyY2VEYXRhKiByZXNvdXJjZURhdGEg
PSBpdC0+dmFsdWU7CiAgICAgICAgIGlmICghcHJlc2VydmVkTG9hZGVySWQuaXNOdWxsKCkgJiYg
cmVzb3VyY2VEYXRhLT5sb2FkZXJJZCgpID09IHByZXNlcnZlZExvYWRlcklkKQotICAgICAgICAg
ICAgcHJlc2VydmVkTWFwLnNldChpdC0+Zmlyc3QsIGl0LT5zZWNvbmQpOworICAgICAgICAgICAg
cHJlc2VydmVkTWFwLnNldChpdC0+a2V5LCBpdC0+dmFsdWUpOwogICAgICAgICBlbHNlCiAgICAg
ICAgICAgICBkZWxldGUgcmVzb3VyY2VEYXRhOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuY3BwIGIvU291cmNlL1dlYkNv
cmUvbG9hZGVyL0Nyb3NzT3JpZ2luQWNjZXNzQ29udHJvbC5jcHAKaW5kZXggYWJhMmJhMDYzZTU5
MzA4ZmFlYzQ0YmZjNzhkZmFmOGQ5Yjg0NWEwYi4uOWIyNmZjODZjOTA0MzkzOTUxNWYxMGFlNjll
YmI2NTUzMGMwYjQzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3Jp
Z2luQWNjZXNzQ29udHJvbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3Jp
Z2luQWNjZXNzQ29udHJvbC5jcHAKQEAgLTY4LDcgKzY4LDcgQEAgYm9vbCBpc1NpbXBsZUNyb3Nz
T3JpZ2luQWNjZXNzUmVxdWVzdChjb25zdCBTdHJpbmcmIG1ldGhvZCwgY29uc3QgSFRUUEhlYWRl
ck1hcCYKIAogICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGhlYWRlck1h
cC5lbmQoKTsKICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaGVh
ZGVyTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoIWlzT25BY2Nl
c3NDb250cm9sU2ltcGxlUmVxdWVzdEhlYWRlcldoaXRlbGlzdChpdC0+Zmlyc3QsIGl0LT5zZWNv
bmQpKQorICAgICAgICBpZiAoIWlzT25BY2Nlc3NDb250cm9sU2ltcGxlUmVxdWVzdEhlYWRlcldo
aXRlbGlzdChpdC0+a2V5LCBpdC0+dmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KIApAQCAtMTE2LDE0ICsxMTYsMTQgQEAgUmVzb3VyY2VSZXF1ZXN0IGNyZWF0ZUFjY2Vz
c0NvbnRyb2xQcmVmbGlnaHRSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWUKICAg
ICBpZiAocmVxdWVzdEhlYWRlckZpZWxkcy5zaXplKCkgPiAwKSB7CiAgICAgICAgIFN0cmluZ0J1
aWxkZXIgaGVhZGVyQnVmZmVyOwogICAgICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IHJlcXVlc3RIZWFkZXJGaWVsZHMuYmVnaW4oKTsKLSAgICAgICAgaGVhZGVyQnVmZmVy
LmFwcGVuZChpdC0+Zmlyc3QpOworICAgICAgICBoZWFkZXJCdWZmZXIuYXBwZW5kKGl0LT5rZXkp
OwogICAgICAgICArK2l0OwogCiAgICAgICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IHJlcXVlc3RIZWFkZXJGaWVsZHMuZW5kKCk7CiAgICAgICAgIGZvciAoOyBpdCAhPSBl
bmQ7ICsraXQpIHsKICAgICAgICAgICAgIGhlYWRlckJ1ZmZlci5hcHBlbmQoJywnKTsKICAgICAg
ICAgICAgIGhlYWRlckJ1ZmZlci5hcHBlbmQoJyAnKTsKLSAgICAgICAgICAgIGhlYWRlckJ1ZmZl
ci5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgICAgIGhlYWRlckJ1ZmZlci5hcHBlbmQoaXQt
PmtleSk7CiAgICAgICAgIH0KIAogICAgICAgICBwcmVmbGlnaHRSZXF1ZXN0LnNldEhUVFBIZWFk
ZXJGaWVsZCgiQWNjZXNzLUNvbnRyb2wtUmVxdWVzdC1IZWFkZXJzIiwgaGVhZGVyQnVmZmVyLnRv
U3RyaW5nKCkubG93ZXIoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jv
c3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
Q3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5jcHAKaW5kZXggMDRkNTg4MTU1Y2U1NTMz
YmRkZDNmMDJiM2JkODE1ZWQ5ZWUzOTllYi4uOWQ1MWM4N2ZlNmM0ZTdkNDM5MzNlNDVlZWY3ZDVj
MTliZDVlMjA4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2lu
UHJlZmxpZ2h0UmVzdWx0Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9z
c09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmNwcApAQCAtMTI1LDggKzEyNSw4IEBAIGJvb2wg
Q3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZUl0ZW06OmFsbG93c0Nyb3NzT3JpZ2luSGVh
ZGVycyhjb25zdCBIVFRQSGVhCiB7CiAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gcmVxdWVzdEhlYWRlcnMuZW5kKCk7CiAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IHJlcXVlc3RIZWFkZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewotICAgICAgICBpZiAoIW1faGVhZGVycy5jb250YWlucyhpdC0+Zmlyc3QpICYmICFpc09uQWNj
ZXNzQ29udHJvbFNpbXBsZVJlcXVlc3RIZWFkZXJXaGl0ZWxpc3QoaXQtPmZpcnN0LCBpdC0+c2Vj
b25kKSkgewotICAgICAgICAgICAgZXJyb3JEZXNjcmlwdGlvbiA9ICJSZXF1ZXN0IGhlYWRlciBm
aWVsZCAiICsgaXQtPmZpcnN0LnN0cmluZygpICsgIiBpcyBub3QgYWxsb3dlZCBieSBBY2Nlc3Mt
Q29udHJvbC1BbGxvdy1IZWFkZXJzLiI7CisgICAgICAgIGlmICghbV9oZWFkZXJzLmNvbnRhaW5z
KGl0LT5rZXkpICYmICFpc09uQWNjZXNzQ29udHJvbFNpbXBsZVJlcXVlc3RIZWFkZXJXaGl0ZWxp
c3QoaXQtPmtleSwgaXQtPnZhbHVlKSkgeworICAgICAgICAgICAgZXJyb3JEZXNjcmlwdGlvbiA9
ICJSZXF1ZXN0IGhlYWRlciBmaWVsZCAiICsgaXQtPmtleS5zdHJpbmcoKSArICIgaXMgbm90IGFs
bG93ZWQgYnkgQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVycy4iOwogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQpAQCAtMTY3LDcgKzE2Nyw3IEBAIGJvb2wgQ3Jv
c3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZTo6Y2FuU2tpcFByZWZsaWdodChjb25zdCBTdHJp
bmcmIG9yaWdpbiwgY29uCiAgICAgaWYgKGNhY2hlSXQgPT0gbV9wcmVmbGlnaHRIYXNoTWFwLmVu
ZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoY2FjaGVJdC0+c2Vjb25kLT5h
bGxvd3NSZXF1ZXN0KGluY2x1ZGVDcmVkZW50aWFscywgbWV0aG9kLCByZXF1ZXN0SGVhZGVycykp
CisgICAgaWYgKGNhY2hlSXQtPnZhbHVlLT5hbGxvd3NSZXF1ZXN0KGluY2x1ZGVDcmVkZW50aWFs
cywgbWV0aG9kLCByZXF1ZXN0SGVhZGVycykpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAg
bV9wcmVmbGlnaHRIYXNoTWFwLnJlbW92ZShjYWNoZUl0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
RG9jdW1lbnRMb2FkZXIuY3BwCmluZGV4IDVjYTlkNjgzZDcxYWIzNDNkYTIzY2JjMTlhYWU2Mzg2
YzUxNGZlZTYuLmUzYzhkODc2MmEzZGFlMTUwYTIyNjNmMzQzNmRhZTMwNjg1Njk0ZTQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcApAQCAtNjE3LDcgKzYxNyw3IEBA
IHZvaWQgRG9jdW1lbnRMb2FkZXI6OmdldFN1YnJlc291cmNlcyhWZWN0b3I8UGFzc1JlZlB0cjxB
cmNoaXZlUmVzb3VyY2U+ID4mIHN1YnJlCiAgICAgY29uc3QgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6
OkRvY3VtZW50UmVzb3VyY2VNYXAmIGFsbFJlc291cmNlcyA9IGRvY3VtZW50LT5jYWNoZWRSZXNv
dXJjZUxvYWRlcigpLT5hbGxDYWNoZWRSZXNvdXJjZXMoKTsKICAgICBDYWNoZWRSZXNvdXJjZUxv
YWRlcjo6RG9jdW1lbnRSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gYWxsUmVzb3Vy
Y2VzLmVuZCgpOwogICAgIGZvciAoQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OkRvY3VtZW50UmVzb3Vy
Y2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYWxsUmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewotICAgICAgICBSZWZQdHI8QXJjaGl2ZVJlc291cmNlPiBzdWJyZXNvdXJjZSA9
IHRoaXMtPnN1YnJlc291cmNlKEtVUkwoUGFyc2VkVVJMU3RyaW5nLCBpdC0+c2Vjb25kLT51cmwo
KSkpOworICAgICAgICBSZWZQdHI8QXJjaGl2ZVJlc291cmNlPiBzdWJyZXNvdXJjZSA9IHRoaXMt
PnN1YnJlc291cmNlKEtVUkwoUGFyc2VkVVJMU3RyaW5nLCBpdC0+dmFsdWUtPnVybCgpKSk7CiAg
ICAgICAgIGlmIChzdWJyZXNvdXJjZSkKICAgICAgICAgICAgIHN1YnJlc291cmNlcy5hcHBlbmQo
c3VicmVzb3VyY2UucmVsZWFzZSgpKTsKICAgICB9CkBAIC02NDksOCArNjQ5LDggQEAgdm9pZCBE
b2N1bWVudExvYWRlcjo6c3Vic3RpdHV0ZVJlc291cmNlRGVsaXZlcnlUaW1lckZpcmVkKFRpbWVy
PERvY3VtZW50TG9hZGVyPioKIAogICAgIFN1YnN0aXR1dGVSZXNvdXJjZU1hcDo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gY29weS5lbmQoKTsKICAgICBmb3IgKFN1YnN0aXR1dGVSZXNvdXJjZU1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBjb3B5LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAg
ICAgICBSZWZQdHI8UmVzb3VyY2VMb2FkZXI+IGxvYWRlciA9IGl0LT5maXJzdDsKLSAgICAgICAg
U3Vic3RpdHV0ZVJlc291cmNlKiByZXNvdXJjZSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAg
IFJlZlB0cjxSZXNvdXJjZUxvYWRlcj4gbG9hZGVyID0gaXQtPmtleTsKKyAgICAgICAgU3Vic3Rp
dHV0ZVJlc291cmNlKiByZXNvdXJjZSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgCiAgICAg
ICAgIGlmIChyZXNvdXJjZSkgewogICAgICAgICAgICAgU2hhcmVkQnVmZmVyKiBkYXRhID0gcmVz
b3VyY2UtPmRhdGEoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9NYWluUmVz
b3VyY2VMb2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL01haW5SZXNvdXJjZUxvYWRl
ci5jcHAKaW5kZXggMmQ2ZTQ1YmI4NmE5Mzc0ODAwZmFiZDVhNzhkMmVkMzFlZDE4YjQwZS4uNzgw
OTllMmE5MGVmMmY0NDg0MmI4ZDQ4ZjM4YjY3YjNkOTA0MTA4OSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvbG9hZGVyL01haW5SZXNvdXJjZUxvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvbG9hZGVyL01haW5SZXNvdXJjZUxvYWRlci5jcHAKQEAgLTM2OCw3ICszNjgsNyBAQCB2b2lk
IE1haW5SZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVz
cG9uc2UmIHIpCiAKICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHIuaHR0
cEhlYWRlckZpZWxkcygpLmZpbmQoQXRvbWljU3RyaW5nKCJ4LWZyYW1lLW9wdGlvbnMiKSk7CiAg
ICAgaWYgKGl0ICE9IHIuaHR0cEhlYWRlckZpZWxkcygpLmVuZCgpKSB7Ci0gICAgICAgIFN0cmlu
ZyBjb250ZW50ID0gaXQtPnNlY29uZDsKKyAgICAgICAgU3RyaW5nIGNvbnRlbnQgPSBpdC0+dmFs
dWU7CiAgICAgICAgIGlmIChtX2ZyYW1lLT5sb2FkZXIoKS0+c2hvdWxkSW50ZXJydXB0TG9hZEZv
clhGcmFtZU9wdGlvbnMoY29udGVudCwgci51cmwoKSkpIHsKICAgICAgICAgICAgIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6Y29udGludWVBZnRlclhGcmFtZU9wdGlvbnNEZW5pZWQobV9mcmFt
ZS5nZXQoKSwgZG9jdW1lbnRMb2FkZXIoKSwgaWRlbnRpZmllcigpLCByKTsKICAgICAgICAgICAg
IERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBjb25zb2xlTWVzc2FnZSwgKEFTQ0lJTGl0ZXJh
bCgiUmVmdXNlZCB0byBkaXNwbGF5IGRvY3VtZW50IGJlY2F1c2UgZGlzcGxheSBmb3JiaWRkZW4g
YnkgWC1GcmFtZS1PcHRpb25zLlxuIikpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jl
c291cmNlTG9hZFNjaGVkdWxlci5jcHAKaW5kZXggODAwNGQ4ZjJlYjJkOGJjMzYwNmEwNjlmYzdl
ZWEzNTFhZmNmY2RhYS4uOGViNDRkNDlkMjlhNjg0NjY0ZDgzMjVjYTI2MWY1NzVjNjQxMGI2MyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFNjaGVkdWxlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFNjaGVkdWxlci5jcHAK
QEAgLTE3NCw3ICsxNzQsNyBAQCB2b2lkIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2VydmVQZW5k
aW5nUmVxdWVzdHMoUmVzb3VyY2VMb2FkUHJpb3JpdHkgbWluaW11bVByaQogICAgIG1faG9zdHMu
Y2hlY2tDb25zaXN0ZW5jeSgpOwogICAgIEhvc3RNYXA6Oml0ZXJhdG9yIGVuZCA9IG1faG9zdHMu
ZW5kKCk7CiAgICAgZm9yIChIb3N0TWFwOjppdGVyYXRvciBpdGVyID0gbV9ob3N0cy5iZWdpbigp
OyBpdGVyICE9IGVuZDsgKytpdGVyKQotICAgICAgICBob3N0c1RvU2VydmUuYXBwZW5kKGl0ZXIt
PnNlY29uZCk7CisgICAgICAgIGhvc3RzVG9TZXJ2ZS5hcHBlbmQoaXRlci0+dmFsdWUpOwogCiAg
ICAgaW50IHNpemUgPSBob3N0c1RvU2VydmUuc2l6ZSgpOwogICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgc2l6ZTsgKytpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2Fj
aGUvQXBwbGljYXRpb25DYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUv
QXBwbGljYXRpb25DYWNoZS5jcHAKaW5kZXggYWJiMDAyMzJmZmY2MzJhOTVmZjhmZjllZTM0NjY1
MGI3ZjkwNWMzMC4uNzljYzlkOGJkZDUwOTk4MmRiYmQ1OWQ3YzU4Y2YzZDBhMzk2OTkzNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hl
LmNwcApAQCAtMTA2LDExICsxMDYsMTEgQEAgdW5zaWduZWQgQXBwbGljYXRpb25DYWNoZTo6cmVt
b3ZlUmVzb3VyY2UoY29uc3QgU3RyaW5nJiB1cmwpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAg
Ly8gVGhlIHJlc291cmNlIGV4aXN0cywgZ2V0IGl0cyB0eXBlIHNvIHdlIGNhbiByZXR1cm4gaXQu
Ci0gICAgdW5zaWduZWQgdHlwZSA9IGl0LT5zZWNvbmQtPnR5cGUoKTsKKyAgICB1bnNpZ25lZCB0
eXBlID0gaXQtPnZhbHVlLT50eXBlKCk7CiAKICAgICBtX3Jlc291cmNlcy5yZW1vdmUoaXQpOwog
Ci0gICAgbV9lc3RpbWF0ZWRTaXplSW5TdG9yYWdlIC09IGl0LT5zZWNvbmQtPmVzdGltYXRlZFNp
emVJblN0b3JhZ2UoKTsKKyAgICBtX2VzdGltYXRlZFNpemVJblN0b3JhZ2UgLT0gaXQtPnZhbHVl
LT5lc3RpbWF0ZWRTaXplSW5TdG9yYWdlKCk7CiAKICAgICByZXR1cm4gdHlwZTsKIH0gICAgCkBA
IC0xODgsNyArMTg4LDcgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlOjpjbGVhclN0b3JhZ2VJRCgp
CiAgICAgCiAgICAgUmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcmVzb3VyY2Vz
LmVuZCgpOwogICAgIGZvciAoUmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9yZXNv
dXJjZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5jbGVh
clN0b3JhZ2VJRCgpOworICAgICAgICBpdC0+dmFsdWUtPmNsZWFyU3RvcmFnZUlEKCk7CiB9CiAg
ICAgCiB2b2lkIEFwcGxpY2F0aW9uQ2FjaGU6OmRlbGV0ZUNhY2hlRm9yT3JpZ2luKFNlY3VyaXR5
T3JpZ2luKiBvcmlnaW4pCkBAIC0yMjYsOCArMjI2LDggQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hl
OjpkdW1wKCkKICAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGVSZXNv
dXJjZT4gPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9yZXNvdXJjZXMuZW5kKCk7CiAgICAgCiAg
ICAgZm9yIChIYXNoTWFwPFN0cmluZywgUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4g
Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKLSAgICAgICAgcHJpbnRmKCIlcyAiLCBpdC0+Zmlyc3QuYXNjaWkoKS5kYXRhKCkpOwot
ICAgICAgICBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OmR1bXBUeXBlKGl0LT5zZWNvbmQtPnR5
cGUoKSk7CisgICAgICAgIHByaW50ZigiJXMgIiwgaXQtPmtleS5hc2NpaSgpLmRhdGEoKSk7Cisg
ICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6ZHVtcFR5cGUoaXQtPnZhbHVlLT50eXBl
KCkpOwogICAgIH0KIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVy
L2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVHcm91cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmNwcAppbmRleCA5MjA4MmM1NmJlMTFj
OWRjMjU4NTBmN2E5NGJjMjc5M2I3N2Y1ZjVmLi4yNzNhNjAxMGQ4MjU1ZmI5NGFhNjA1MWI5MmY2
OTJiNDg4MzdjOTk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUv
QXBwbGljYXRpb25DYWNoZUdyb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBw
Y2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmNwcApAQCAtNzc3LDkgKzc3Nyw5IEBAIHZvaWQg
QXBwbGljYXRpb25DYWNoZUdyb3VwOjpkaWRGaW5pc2hMb2FkaW5nTWFuaWZlc3QoKQogICAgIGlm
IChpc1VwZ3JhZGVBdHRlbXB0KSB7CiAgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGU6OlJlc291cmNl
TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX25ld2VzdENhY2hlLT5lbmQoKTsKICAgICAgICAg
Zm9yIChBcHBsaWNhdGlvbkNhY2hlOjpSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
X25ld2VzdENhY2hlLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIHVu
c2lnbmVkIHR5cGUgPSBpdC0+c2Vjb25kLT50eXBlKCk7CisgICAgICAgICAgICB1bnNpZ25lZCB0
eXBlID0gaXQtPnZhbHVlLT50eXBlKCk7CiAgICAgICAgICAgICBpZiAodHlwZSAmIEFwcGxpY2F0
aW9uQ2FjaGVSZXNvdXJjZTo6TWFzdGVyKQotICAgICAgICAgICAgICAgIGFkZEVudHJ5KGl0LT5m
aXJzdCwgdHlwZSk7CisgICAgICAgICAgICAgICAgYWRkRW50cnkoaXQtPmtleSwgdHlwZSk7CiAg
ICAgICAgIH0KICAgICB9CiAgICAgCkBAIC0xMDE4LDcgKzEwMTgsNyBAQCB2b2lkIEFwcGxpY2F0
aW9uQ2FjaGVHcm91cDo6c3RhcnRMb2FkaW5nRW50cnkoKQogCiAgICAgQVNTRVJUKCFtX2N1cnJl
bnRIYW5kbGUpOwogICAgIAotICAgIG1fY3VycmVudEhhbmRsZSA9IGNyZWF0ZVJlc291cmNlSGFu
ZGxlKEtVUkwoUGFyc2VkVVJMU3RyaW5nLCBpdC0+Zmlyc3QpLCBtX25ld2VzdENhY2hlID8gbV9u
ZXdlc3RDYWNoZS0+cmVzb3VyY2VGb3JVUkwoaXQtPmZpcnN0KSA6IDApOworICAgIG1fY3VycmVu
dEhhbmRsZSA9IGNyZWF0ZVJlc291cmNlSGFuZGxlKEtVUkwoUGFyc2VkVVJMU3RyaW5nLCBpdC0+
a2V5KSwgbV9uZXdlc3RDYWNoZSA/IG1fbmV3ZXN0Q2FjaGUtPnJlc291cmNlRm9yVVJMKGl0LT5r
ZXkpIDogMCk7CiB9CiAKIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpkZWxpdmVyRGVsYXll
ZE1haW5SZXNvdXJjZXMoKQpAQCAtMTA2Nyw3ICsxMDY3LDcgQEAgdm9pZCBBcHBsaWNhdGlvbkNh
Y2hlR3JvdXA6OmFkZEVudHJ5KGNvbnN0IFN0cmluZyYgdXJsLCB1bnNpZ25lZCB0eXBlKQogICAg
IEVudHJ5TWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9wZW5kaW5nRW50cmllcy5hZGQodXJsLCB0
eXBlKTsKICAgICAKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXN1bHQu
aXRlcmF0b3ItPnNlY29uZCB8PSB0eXBlOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVl
IHw9IHR5cGU7CiB9CiAKIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjphc3NvY2lhdGVEb2N1
bWVudExvYWRlcldpdGhDYWNoZShEb2N1bWVudExvYWRlciogbG9hZGVyLCBBcHBsaWNhdGlvbkNh
Y2hlKiBjYWNoZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9B
cHBsaWNhdGlvbkNhY2hlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUv
QXBwbGljYXRpb25DYWNoZUhvc3QuY3BwCmluZGV4IDgwMWMxYjM2NzAzMWEzMzlkYjQ0NzA3YTky
ZDFiYzgwZDQxZDhjNzkuLmZlOWYwMTBhMGZlNjUwM2QwYmM1ZTViOTI3NzBhM2Y3YjY0MzQ0ZmQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNh
Y2hlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0
aW9uQ2FjaGVIb3N0LmNwcApAQCAtMjgyLDcgKzI4Miw3IEBAIHZvaWQgQXBwbGljYXRpb25DYWNo
ZUhvc3Q6OmZpbGxSZXNvdXJjZUxpc3QoUmVzb3VyY2VJbmZvTGlzdCogcmVzb3VyY2VzKQogICAg
ICAKICAgICBBcHBsaWNhdGlvbkNhY2hlOjpSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gY2FjaGUtPmVuZCgpOwogICAgIGZvciAoQXBwbGljYXRpb25DYWNoZTo6UmVzb3VyY2VNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY2FjaGUtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewot
ICAgICAgICBSZWZQdHI8QXBwbGljYXRpb25DYWNoZVJlc291cmNlPiByZXNvdXJjZSA9IGl0LT5z
ZWNvbmQ7CisgICAgICAgIFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+IHJlc291cmNl
ID0gaXQtPnZhbHVlOwogICAgICAgICB1bnNpZ25lZCB0eXBlID0gcmVzb3VyY2UtPnR5cGUoKTsK
ICAgICAgICAgYm9vbCBpc01hc3RlciAgID0gdHlwZSAmIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJj
ZTo6TWFzdGVyOwogICAgICAgICBib29sIGlzTWFuaWZlc3QgPSB0eXBlICYgQXBwbGljYXRpb25D
YWNoZVJlc291cmNlOjpNYW5pZmVzdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
bG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5jcHAKaW5kZXggZDgzMTc4
NGI0MTk2YWRmMzgyY2YzNTVlMGVlZjAyZDZhN2E4MDc5MC4uOTk3NjZlM2E2NmJkMzZlYjQyZmVk
MmE5MjY5ZDM0YjA2NjE5NGQ3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2Fw
cGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
bG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5jcHAKQEAgLTU0LDcgKzU0
LDcgQEAgaW50NjRfdCBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OmVzdGltYXRlZFNpemVJblN0
b3JhZ2UoKQogCiAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcmVzcG9u
c2UoKS5odHRwSGVhZGVyRmllbGRzKCkuZW5kKCk7CiAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IHJlc3BvbnNlKCkuaHR0cEhlYWRlckZpZWxkcygpLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgbV9lc3RpbWF0ZWRTaXplSW5TdG9yYWdlICs9IChp
dC0+Zmlyc3QubGVuZ3RoKCkgKyBpdC0+c2Vjb25kLmxlbmd0aCgpICsgMikgKiBzaXplb2YoVUNo
YXIpOworICAgICAgICBtX2VzdGltYXRlZFNpemVJblN0b3JhZ2UgKz0gKGl0LT5rZXkubGVuZ3Ro
KCkgKyBpdC0+dmFsdWUubGVuZ3RoKCkgKyAyKSAqIHNpemVvZihVQ2hhcik7CiAKICAgICBtX2Vz
dGltYXRlZFNpemVJblN0b3JhZ2UgKz0gdXJsKCkuc3RyaW5nKCkubGVuZ3RoKCkgKiBzaXplb2Yo
VUNoYXIpOwogICAgIG1fZXN0aW1hdGVkU2l6ZUluU3RvcmFnZSArPSBzaXplb2YoaW50KTsgLy8g
cmVzcG9uc2UoKS5tX2h0dHBTdGF0dXNDb2RlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwIGIvU291cmNlL1dlYkNv
cmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcAppbmRleCA3Nzhl
NGUzODg4OTFkMzM0NzIwY2QyMTUyNTZkNGRhZDM5YjIyZjFkLi5kMWM5N2U0YjJhYTE2MDhmYzk0
OGVhNjMyYzJiYTZlZDJhN2U1MTNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
YXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAKQEAgLTEzNyw4ICsx
MzcsOCBAQCBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpm
aW5kT3JDcmVhdGVDYWNoZUdyb3VwKGNvbnN0IEtVUgogICAgIENhY2hlR3JvdXBNYXA6OkFkZFJl
c3VsdCByZXN1bHQgPSBtX2NhY2hlc0luTWVtb3J5LmFkZChtYW5pZmVzdFVSTCwgMCk7CiAgICAg
CiAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICBBU1NFUlQocmVzdWx0Lml0
ZXJhdG9yLT5zZWNvbmQpOwotICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7
CisgICAgICAgIEFTU0VSVChyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAgICAgfQogCiAgICAgLy8gTG9vayB1cCB0aGUgZ3Jv
dXAgaW4gdGhlIGRhdGFiYXNlCkBAIC0xNTAsNyArMTUwLDcgQEAgQXBwbGljYXRpb25DYWNoZUdy
b3VwKiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZmluZE9yQ3JlYXRlQ2FjaGVHcm91cChjb25z
dCBLVVIKICAgICAgICAgbV9jYWNoZUhvc3RTZXQuYWRkKHVybEhvc3RIYXNoKG1hbmlmZXN0VVJM
KSk7CiAgICAgfQogICAgIAotICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gZ3JvdXA7Cisg
ICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGdyb3VwOwogICAgIAogICAgIHJldHVybiBncm91
cDsKIH0KQEAgLTE5Nyw3ICsxOTcsNyBAQCBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIEFwcGxpY2F0
aW9uQ2FjaGVTdG9yYWdlOjpjYWNoZUdyb3VwRm9yVVJMKGNvbnN0IEtVUkwmIHVybAogICAgIC8v
IENoZWNrIGlmIGEgY2FjaGUgYWxyZWFkeSBleGlzdHMgaW4gbWVtb3J5LgogICAgIENhY2hlR3Jv
dXBNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fY2FjaGVzSW5NZW1vcnkuZW5kKCk7CiAgICAg
Zm9yIChDYWNoZUdyb3VwTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fY2FjaGVzSW5NZW1vcnku
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVHcm91
cCogZ3JvdXAgPSBpdC0+c2Vjb25kOworICAgICAgICBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIGdy
b3VwID0gaXQtPnZhbHVlOwogCiAgICAgICAgIEFTU0VSVCghZ3JvdXAtPmlzT2Jzb2xldGUoKSk7
CiAKQEAgLTI2OCw3ICsyNjgsNyBAQCBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIEFwcGxpY2F0aW9u
Q2FjaGVTdG9yYWdlOjpmYWxsYmFja0NhY2hlR3JvdXBGb3JVUkwoY29uc3QgSwogICAgIC8vIENo
ZWNrIGlmIGFuIGFwcHJvcHJpYXRlIGNhY2hlIGFscmVhZHkgZXhpc3RzIGluIG1lbW9yeS4KICAg
ICBDYWNoZUdyb3VwTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2NhY2hlc0luTWVtb3J5LmVu
ZCgpOwogICAgIGZvciAoQ2FjaGVHcm91cE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2NhY2hl
c0luTWVtb3J5LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBBcHBsaWNhdGlv
bkNhY2hlR3JvdXAqIGdyb3VwID0gaXQtPnNlY29uZDsKKyAgICAgICAgQXBwbGljYXRpb25DYWNo
ZUdyb3VwKiBncm91cCA9IGl0LT52YWx1ZTsKICAgICAgICAgCiAgICAgICAgIEFTU0VSVCghZ3Jv
dXAtPmlzT2Jzb2xldGUoKSk7CiAKQEAgLTcxMywxMyArNzEzLDEzIEBAIGJvb2wgQXBwbGljYXRp
b25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hlLCBSZXNvdXJjZVN0
b3JhZ2VJREpvCiAgICAgewogICAgICAgICBBcHBsaWNhdGlvbkNhY2hlOjpSZXNvdXJjZU1hcDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gY2FjaGUtPmVuZCgpOwogICAgICAgICBmb3IgKEFwcGxpY2F0
aW9uQ2FjaGU6OlJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGNhY2hlLT5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIG9sZFN0b3JhZ2VJRCA9
IGl0LT5zZWNvbmQtPnN0b3JhZ2VJRCgpOwotICAgICAgICAgICAgaWYgKCFzdG9yZShpdC0+c2Vj
b25kLmdldCgpLCBjYWNoZVN0b3JhZ2VJRCkpCisgICAgICAgICAgICB1bnNpZ25lZCBvbGRTdG9y
YWdlSUQgPSBpdC0+dmFsdWUtPnN0b3JhZ2VJRCgpOworICAgICAgICAgICAgaWYgKCFzdG9yZShp
dC0+dmFsdWUuZ2V0KCksIGNhY2hlU3RvcmFnZUlEKSkKICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICAgICAgICAgIC8vIFN0b3JpbmcgdGhlIHJlc291cmNlIHN1Y2NlZWRlZC4g
TG9nIGl0cyBvbGQgc3RvcmFnZUlEIGluIGNhc2UKICAgICAgICAgICAgIC8vIGl0IG5lZWRzIHRv
IGJlIHJlc3RvcmVkIGxhdGVyLgotICAgICAgICAgICAgc3RvcmFnZUlESm91cm5hbC0+YWRkKGl0
LT5zZWNvbmQuZ2V0KCksIG9sZFN0b3JhZ2VJRCk7CisgICAgICAgICAgICBzdG9yYWdlSURKb3Vy
bmFsLT5hZGQoaXQtPnZhbHVlLmdldCgpLCBvbGRTdG9yYWdlSUQpOwogICAgICAgICB9CiAgICAg
fQogICAgIApAQCAtODM5LDkgKzgzOSw5IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6
OnN0b3JlKEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2UsIHVuc2lnbmVkCiAgICAg
CiAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcmVzb3VyY2UtPnJlc3Bv
bnNlKCkuaHR0cEhlYWRlckZpZWxkcygpLmVuZCgpOwogICAgIGZvciAoSFRUUEhlYWRlck1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSByZXNvdXJjZS0+cmVzcG9uc2UoKS5odHRwSGVhZGVyRmllbGRz
KCkuYmVnaW4oKTsgaXQhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQoaXQtPmZpcnN0KTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPmtleSk7CiAg
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKChVQ2hhciknOicpOwotICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZChpdC0+c2Vjb25kKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
aXQtPnZhbHVlKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoKFVDaGFyKSdcbicpOwog
ICAgIH0KICAgICAKQEAgLTEyNDEsNyArMTI0MSw3IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZVN0
b3JhZ2U6OmVtcHR5KCkKICAgICAvLyB1bnRpbCBhIGNhY2hlIHVwZGF0ZSBwcm9jZXNzIGhhcyBi
ZWVuIGluaXRpYXRlZC4KICAgICBDYWNoZUdyb3VwTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBt
X2NhY2hlc0luTWVtb3J5LmVuZCgpOwogICAgIGZvciAoQ2FjaGVHcm91cE1hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX2NhY2hlc0luTWVtb3J5LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAg
ICAgICAgaXQtPnNlY29uZC0+Y2xlYXJTdG9yYWdlSUQoKTsKKyAgICAgICAgaXQtPnZhbHVlLT5j
bGVhclN0b3JhZ2VJRCgpOwogICAgIAogICAgIGNoZWNrRm9yRGVsZXRlZFJlc291cmNlcygpOwog
fQpAQCAtMTMwMyw3ICsxMzAzLDcgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3Rv
cmVDb3B5T2ZDYWNoZShjb25zdCBTdHJpbmcmIGNhY2hlRGlyZWN0b3J5LCBBcHAKICAgICAvLyBU
cmF2ZXJzZSB0aGUgY2FjaGUgYW5kIGFkZCBjb3BpZXMgb2YgYWxsIHJlc291cmNlcy4KICAgICBB
cHBsaWNhdGlvbkNhY2hlOjpSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY2FjaGUt
PmVuZCgpOwogICAgIGZvciAoQXBwbGljYXRpb25DYWNoZTo6UmVzb3VyY2VNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gY2FjaGUtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBB
cHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqIHJlc291cmNlID0gaXQtPnNlY29uZC5nZXQoKTsKKyAg
ICAgICAgQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJjZSA9IGl0LT52YWx1ZS5nZXQo
KTsKICAgICAgICAgCiAgICAgICAgIFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+IHJl
c291cmNlQ29weSA9IEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6Y3JlYXRlKHJlc291cmNlLT51
cmwoKSwgcmVzb3VyY2UtPnJlc3BvbnNlKCksIHJlc291cmNlLT50eXBlKCksIHJlc291cmNlLT5k
YXRhKCksIHJlc291cmNlLT5wYXRoKCkpOwogICAgICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9hcmNoaXZlL0FyY2hpdmVGYWN0b3J5LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9hcmNoaXZlL0FyY2hpdmVGYWN0b3J5LmNwcAppbmRleCBjMmI2ZGJjZGRlZjM2ZWQ4
Yzc0Mjk1YzhiNWJjOGYxNjdlN2VjNWM5Li4wNGZiNWVkYjU2NzRjNzI0OWVjZTBmYzAxOTAxNTFj
OWMyYTk3OGJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9BcmNo
aXZlRmFjdG9yeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvQXJjaGl2
ZUZhY3RvcnkuY3BwCkBAIC05NSw3ICs5NSw3IEBAIHZvaWQgQXJjaGl2ZUZhY3Rvcnk6OnJlZ2lz
dGVyS25vd25BcmNoaXZlTUlNRVR5cGVzKCkKICAgICBBcmNoaXZlTUlNRVR5cGVzTWFwOjppdGVy
YXRvciBlbmQgPSBhcmNoaXZlTUlNRVR5cGVzKCkuZW5kKCk7CiAKICAgICBmb3IgKDsgaSAhPSBl
bmQ7ICsraSkKLSAgICAgICAgbWltZVR5cGVzLmFkZChpLT5maXJzdCk7CisgICAgICAgIG1pbWVU
eXBlcy5hZGQoaS0+a2V5KTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9j
YWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5jcHAKaW5kZXggNzI5ODg5MzI0OTVjNDc3MTZjNmNlYzkw
ZGI0OGY4NjlmZWZjZjFmOS4uM2NhMjQ2MmI5YWQ2NDE5YmEwZmZlZWFlMjE4N2I3MjA2NDA1MzUy
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291
cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3Vy
Y2UuY3BwCkBAIC0xNTMsOCArMTUzLDggQEAgYm9vbCBDYWNoZWRSYXdSZXNvdXJjZTo6Y2FuUmV1
c2UoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBuZXdSZXF1ZXN0KSBjb25zdAogCiAgICAgSFRUUEhl
YWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbmV3SGVhZGVycy5lbmQoKTsKICAgICBmb3Ig
KEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGkgPSBuZXdIZWFkZXJzLmJlZ2luKCk7IGkg
IT0gZW5kOyArK2kpIHsKLSAgICAgICAgQXRvbWljU3RyaW5nIGhlYWRlck5hbWUgPSBpLT5maXJz
dDsKLSAgICAgICAgaWYgKGktPnNlY29uZCAhPSBvbGRIZWFkZXJzLmdldChoZWFkZXJOYW1lKSkK
KyAgICAgICAgQXRvbWljU3RyaW5nIGhlYWRlck5hbWUgPSBpLT5rZXk7CisgICAgICAgIGlmIChp
LT52YWx1ZSAhPSBvbGRIZWFkZXJzLmdldChoZWFkZXJOYW1lKSkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNwcAppbmRleCBjYmM2NTI1MTA2MDE2NDhmODBmNTZl
YTBhNWRjZTc4NjM0NDRjYzMxLi5mMmMyMjUyNDM4YzQ0ZTkwMjA0ZGZjZDRmYWU4MTVmMzhkNDYw
NzY4IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3Vy
Y2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5j
cHAKQEAgLTYxMiw4ICs2MTIsOCBAQCB2b2lkIENhY2hlZFJlc291cmNlOjpzd2l0Y2hDbGllbnRz
VG9SZXZhbGlkYXRlZFJlc291cmNlKCkKICAgICBWZWN0b3I8Q2FjaGVkUmVzb3VyY2VDbGllbnQq
PiBjbGllbnRzVG9Nb3ZlOwogICAgIEhhc2hDb3VudGVkU2V0PENhY2hlZFJlc291cmNlQ2xpZW50
Kj46Oml0ZXJhdG9yIGVuZDIgPSBtX2NsaWVudHMuZW5kKCk7CiAgICAgZm9yIChIYXNoQ291bnRl
ZFNldDxDYWNoZWRSZXNvdXJjZUNsaWVudCo+OjppdGVyYXRvciBpdCA9IG1fY2xpZW50cy5iZWdp
bigpOyBpdCAhPSBlbmQyOyArK2l0KSB7Ci0gICAgICAgIENhY2hlZFJlc291cmNlQ2xpZW50KiBj
bGllbnQgPSBpdC0+Zmlyc3Q7Ci0gICAgICAgIHVuc2lnbmVkIGNvdW50ID0gaXQtPnNlY29uZDsK
KyAgICAgICAgQ2FjaGVkUmVzb3VyY2VDbGllbnQqIGNsaWVudCA9IGl0LT5rZXk7CisgICAgICAg
IHVuc2lnbmVkIGNvdW50ID0gaXQtPnZhbHVlOwogICAgICAgICB3aGlsZSAoY291bnQpIHsKICAg
ICAgICAgICAgIGNsaWVudHNUb01vdmUuYXBwZW5kKGNsaWVudCk7CiAgICAgICAgICAgICAtLWNv
dW50OwpAQCAtNjQ3LDkgKzY0Nyw5IEBAIHZvaWQgQ2FjaGVkUmVzb3VyY2U6OnVwZGF0ZVJlc3Bv
bnNlQWZ0ZXJSZXZhbGlkYXRpb24oY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgdmFsCiAgICAgSFRU
UEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbmV3SGVhZGVycy5lbmQoKTsKICAgICBm
b3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbmV3SGVhZGVycy5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgLy8gRG9uJ3QgYWxsb3cgMzA0IHJlc3BvbnNl
IHRvIHVwZGF0ZSBjb250ZW50IGhlYWRlcnMsIHRoZXNlIGNhbid0IGNoYW5nZSBidXQgc29tZSBz
ZXJ2ZXJzIHNlbmQgd3JvbmcgdmFsdWVzLgotICAgICAgICBpZiAoaXQtPmZpcnN0LnN0YXJ0c1dp
dGgoY29udGVudEhlYWRlclByZWZpeCwgZmFsc2UpKQorICAgICAgICBpZiAoaXQtPmtleS5zdGFy
dHNXaXRoKGNvbnRlbnRIZWFkZXJQcmVmaXgsIGZhbHNlKSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBtX3Jlc3BvbnNlLnNldEhUVFBIZWFkZXJGaWVsZChpdC0+Zmlyc3QsIGl0LT5z
ZWNvbmQpOworICAgICAgICBtX3Jlc3BvbnNlLnNldEhUVFBIZWFkZXJGaWVsZChpdC0+a2V5LCBp
dC0+dmFsdWUpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVy
L2NhY2hlL0NhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuaAppbmRleCA4YjM3ODBiNWU2NGIy
MTQzNDYyODk2YmRhMmE2YTI2NWE1YThhMDc0Li43OTMzYjBiODE0YzUyMTI1NmUwNzYwZjg2MWI0
MzEwOTdiODliNTljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2Fj
aGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2Fj
aGUvQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuaApAQCAtNDIsNyArNDIsNyBAQCBwdWJsaWM6
CiAgICAgICAgIEl0ZXJhdG9yIGVuZCA9IHNldC5lbmQoKTsKICAgICAgICAgc2l6ZV90IGNsaWVu
dEluZGV4ID0gMDsKICAgICAgICAgZm9yIChJdGVyYXRvciBjdXJyZW50ID0gc2V0LmJlZ2luKCk7
IGN1cnJlbnQgIT0gZW5kOyArK2N1cnJlbnQpCi0gICAgICAgICAgICBtX2NsaWVudFZlY3Rvcltj
bGllbnRJbmRleCsrXSA9IGN1cnJlbnQtPmZpcnN0OworICAgICAgICAgICAgbV9jbGllbnRWZWN0
b3JbY2xpZW50SW5kZXgrK10gPSBjdXJyZW50LT5rZXk7CiAgICAgfQogCiAgICAgVCogbmV4dCgp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VM
b2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9h
ZGVyLmNwcAppbmRleCBhNGEzNjY3ZWYwMDA0Nzc5NzQyMmY1MDdlMWFmYTdiOTNhZmVkMjk0Li5l
OTQwNGExNzkyMjNkODY4MWNhNTRhMDg0N2NiY2Y3MjBlODRmZjEwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAKQEAgLTEy
OCw3ICsxMjgsNyBAQCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6fkNhY2hlZFJlc291cmNlTG9hZGVy
KCkKICAgICBjbGVhclByZWxvYWRzKCk7CiAgICAgRG9jdW1lbnRSZXNvdXJjZU1hcDo6aXRlcmF0
b3IgZW5kID0gbV9kb2N1bWVudFJlc291cmNlcy5lbmQoKTsKICAgICBmb3IgKERvY3VtZW50UmVz
b3VyY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9kb2N1bWVudFJlc291cmNlcy5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPnNldE93bmluZ0NhY2hlZFJlc291cmNl
TG9hZGVyKDApOworICAgICAgICBpdC0+dmFsdWUtPnNldE93bmluZ0NhY2hlZFJlc291cmNlTG9h
ZGVyKDApOwogCiAgICAgLy8gTWFrZSBzdXJlIG5vIHJlcXVlc3RzIHN0aWxsIHBvaW50IHRvIHRo
aXMgQ2FjaGVkUmVzb3VyY2VMb2FkZXIKICAgICBBU1NFUlQobV9yZXF1ZXN0Q291bnQgPT0gMCk7
CkBAIC00MTUsNyArNDE1LDcgQEAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkUmVzb3VyY2U+
IENhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0UmVzb3VyY2UoQ2FjaGUKICAgICBpZiAobWVt
b3J5Q2FjaGUoKS0+ZGlzYWJsZWQoKSkgewogICAgICAgICBEb2N1bWVudFJlc291cmNlTWFwOjpp
dGVyYXRvciBpdCA9IG1fZG9jdW1lbnRSZXNvdXJjZXMuZmluZCh1cmwuc3RyaW5nKCkpOwogICAg
ICAgICBpZiAoaXQgIT0gbV9kb2N1bWVudFJlc291cmNlcy5lbmQoKSkgewotICAgICAgICAgICAg
aXQtPnNlY29uZC0+c2V0T3duaW5nQ2FjaGVkUmVzb3VyY2VMb2FkZXIoMCk7CisgICAgICAgICAg
ICBpdC0+dmFsdWUtPnNldE93bmluZ0NhY2hlZFJlc291cmNlTG9hZGVyKDApOwogICAgICAgICAg
ICAgbV9kb2N1bWVudFJlc291cmNlcy5yZW1vdmUoaXQpOwogICAgICAgICB9CiAgICAgfQpAQCAt
NjU4LDcgKzY1OCw3IEBAIHZvaWQgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlbG9hZEltYWdlc0lm
Tm90RGVmZXJyZWQoKQogewogICAgIERvY3VtZW50UmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGVuZCA9
IG1fZG9jdW1lbnRSZXNvdXJjZXMuZW5kKCk7CiAgICAgZm9yIChEb2N1bWVudFJlc291cmNlTWFw
OjppdGVyYXRvciBpdCA9IG1fZG9jdW1lbnRSZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7Ci0gICAgICAgIENhY2hlZFJlc291cmNlKiByZXNvdXJjZSA9IGl0LT5zZWNvbmQuZ2V0
KCk7CisgICAgICAgIENhY2hlZFJlc291cmNlKiByZXNvdXJjZSA9IGl0LT52YWx1ZS5nZXQoKTsK
ICAgICAgICAgaWYgKHJlc291cmNlLT50eXBlKCkgPT0gQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVz
b3VyY2UpIHsKICAgICAgICAgICAgIENhY2hlZEltYWdlKiBpbWFnZSA9IGNvbnN0X2Nhc3Q8Q2Fj
aGVkSW1hZ2UqPihzdGF0aWNfY2FzdDxjb25zdCBDYWNoZWRJbWFnZSo+KHJlc291cmNlKSk7CiAK
QEAgLTY3OCw3ICs2NzgsNyBAQCB2b2lkIENhY2hlZFJlc291cmNlTG9hZGVyOjpyZW1vdmVDYWNo
ZWRSZXNvdXJjZShDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UpIGNvbnN0CiAjaWZuZGVmIE5ERUJV
RwogICAgIERvY3VtZW50UmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9kb2N1bWVudFJlc291
cmNlcy5maW5kKHJlc291cmNlLT51cmwoKSk7CiAgICAgaWYgKGl0ICE9IG1fZG9jdW1lbnRSZXNv
dXJjZXMuZW5kKCkpCi0gICAgICAgIEFTU0VSVChpdC0+c2Vjb25kLmdldCgpID09IHJlc291cmNl
KTsKKyAgICAgICAgQVNTRVJUKGl0LT52YWx1ZS5nZXQoKSA9PSByZXNvdXJjZSk7CiAjZW5kaWYK
ICAgICBtX2RvY3VtZW50UmVzb3VyY2VzLnJlbW92ZShyZXNvdXJjZS0+dXJsKCkpOwogfQpAQCAt
NzEyLDkgKzcxMiw5IEBAIHZvaWQgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmdhcmJhZ2VDb2xsZWN0
RG9jdW1lbnRSZXNvdXJjZXMoKQogICAgIFN0cmluZ1ZlY3RvciByZXNvdXJjZXNUb0RlbGV0ZTsK
IAogICAgIGZvciAoRG9jdW1lbnRSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX2RvY3VtZW50
UmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IG1fZG9jdW1lbnRSZXNvdXJjZXMuZW5kKCk7ICsraXQp
IHsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQtPmhhc09uZUhhbmRsZSgpKSB7Ci0gICAgICAgICAg
ICByZXNvdXJjZXNUb0RlbGV0ZS5hcHBlbmQoaXQtPmZpcnN0KTsKLSAgICAgICAgICAgIGl0LT5z
ZWNvbmQtPnNldE93bmluZ0NhY2hlZFJlc291cmNlTG9hZGVyKDApOworICAgICAgICBpZiAoaXQt
PnZhbHVlLT5oYXNPbmVIYW5kbGUoKSkgeworICAgICAgICAgICAgcmVzb3VyY2VzVG9EZWxldGUu
YXBwZW5kKGl0LT5rZXkpOworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRPd25pbmdDYWNoZWRS
ZXNvdXJjZUxvYWRlcigwKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtOTEwLDggKzkxMCw4IEBA
IHZvaWQgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVj
dEluZm8qIG1lbW9yeU9iamVjdEluZm8pCiAgICAgTWVtb3J5Q2xhc3NJbmZvIGluZm8obWVtb3J5
T2JqZWN0SW5mbywgdGhpcywgV2ViQ29yZU1lbW9yeVR5cGVzOjpMb2FkZXIpOwogICAgIGluZm8u
YWRkSGFzaE1hcChtX2RvY3VtZW50UmVzb3VyY2VzKTsKICAgICBmb3IgKERvY3VtZW50UmVzb3Vy
Y2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGkgPSBtX2RvY3VtZW50UmVzb3VyY2VzLmJlZ2luKCk7IGkg
IT0gbV9kb2N1bWVudFJlc291cmNlcy5lbmQoKTsgKytpKSB7Ci0gICAgICAgIGluZm8uYWRkSW5z
dHJ1bWVudGVkTWVtYmVyKGktPmZpcnN0KTsKLSAgICAgICAgaW5mby5hZGRJbnN0cnVtZW50ZWRN
ZW1iZXIoaS0+c2Vjb25kKTsKKyAgICAgICAgaW5mby5hZGRJbnN0cnVtZW50ZWRNZW1iZXIoaS0+
a2V5KTsKKyAgICAgICAgaW5mby5hZGRJbnN0cnVtZW50ZWRNZW1iZXIoaS0+dmFsdWUpOwogICAg
IH0KICAgICBpbmZvLmFkZEhhc2hTZXQobV92YWxpZGF0ZWRVUkxzKTsKICAgICBpZiAobV9wcmVs
b2FkcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNo
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuY3BwCmluZGV4
IGFhZjg1MmE5NTE2M2I1ZjRlNTYwOTY4MDU2NjA5Y2Q5ZThiZTZiMTYuLjM1NTBhNjQ4N2UwMTFj
MDQzNzBlM2NhNDkxOTMyNzM0MzcyMGMyZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9jYWNoZS9NZW1vcnlDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2Nh
Y2hlL01lbW9yeUNhY2hlLmNwcApAQCAtNTQwLDcgKzU0MCw3IEBAIHZvaWQgTWVtb3J5Q2FjaGU6
OnJlbW92ZVJlc291cmNlc1dpdGhPcmlnaW4oU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKIAogICAg
IENhY2hlZFJlc291cmNlTWFwOjppdGVyYXRvciBlID0gbV9yZXNvdXJjZXMuZW5kKCk7CiAgICAg
Zm9yIChDYWNoZWRSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5iZWdpbigp
OyBpdCAhPSBlOyArK2l0KSB7Ci0gICAgICAgIENhY2hlZFJlc291cmNlKiByZXNvdXJjZSA9IGl0
LT5zZWNvbmQ7CisgICAgICAgIENhY2hlZFJlc291cmNlKiByZXNvdXJjZSA9IGl0LT52YWx1ZTsK
ICAgICAgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiByZXNvdXJjZU9yaWdpbiA9IFNlY3VyaXR5
T3JpZ2luOjpjcmVhdGVGcm9tU3RyaW5nKHJlc291cmNlLT51cmwoKSk7CiAgICAgICAgIGlmICgh
cmVzb3VyY2VPcmlnaW4pCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTU1Niw3ICs1NTYsNyBA
QCB2b2lkIE1lbW9yeUNhY2hlOjpnZXRPcmlnaW5zV2l0aENhY2hlKFNlY3VyaXR5T3JpZ2luU2V0
JiBvcmlnaW5zKQogewogICAgIENhY2hlZFJlc291cmNlTWFwOjppdGVyYXRvciBlID0gbV9yZXNv
dXJjZXMuZW5kKCk7CiAgICAgZm9yIChDYWNoZWRSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBt
X3Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSBlOyArK2l0KQotICAgICAgICBvcmlnaW5zLmFkZChT
ZWN1cml0eU9yaWdpbjo6Y3JlYXRlRnJvbVN0cmluZyhpdC0+c2Vjb25kLT51cmwoKSkpOworICAg
ICAgICBvcmlnaW5zLmFkZChTZWN1cml0eU9yaWdpbjo6Y3JlYXRlRnJvbVN0cmluZyhpdC0+dmFs
dWUtPnVybCgpKSk7CiB9CiAKIHZvaWQgTWVtb3J5Q2FjaGU6OnJlbW92ZUZyb21MaXZlRGVjb2Rl
ZFJlc291cmNlc0xpc3QoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlKQpAQCAtNjg5LDcgKzY4OSw3
IEBAIE1lbW9yeUNhY2hlOjpTdGF0aXN0aWNzIE1lbW9yeUNhY2hlOjpnZXRTdGF0aXN0aWNzKCkK
ICAgICBTdGF0aXN0aWNzIHN0YXRzOwogICAgIENhY2hlZFJlc291cmNlTWFwOjppdGVyYXRvciBl
ID0gbV9yZXNvdXJjZXMuZW5kKCk7CiAgICAgZm9yIChDYWNoZWRSZXNvdXJjZU1hcDo6aXRlcmF0
b3IgaSA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7IGkgIT0gZTsgKytpKSB7Ci0gICAgICAgIENhY2hl
ZFJlc291cmNlKiByZXNvdXJjZSA9IGktPnNlY29uZDsKKyAgICAgICAgQ2FjaGVkUmVzb3VyY2Uq
IHJlc291cmNlID0gaS0+dmFsdWU7CiAgICAgICAgIHN3aXRjaCAocmVzb3VyY2UtPnR5cGUoKSkg
ewogICAgICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpJbWFnZVJlc291cmNlOgogICAgICAgICAg
ICAgc3RhdHMuaW1hZ2VzLmFkZFJlc291cmNlKHJlc291cmNlKTsKQEAgLTcyMSw4ICs3MjEsOCBA
QCB2b2lkIE1lbW9yeUNhY2hlOjpyZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBt
ZW1vcnlPYmplY3RJbmZvKSBjb25zdAogICAgIGluZm8uYWRkSGFzaE1hcChtX3Jlc291cmNlcyk7
CiAgICAgQ2FjaGVkUmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGUgPSBtX3Jlc291cmNlcy5l
bmQoKTsKICAgICBmb3IgKENhY2hlZFJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBpID0gbV9y
ZXNvdXJjZXMuYmVnaW4oKTsgaSAhPSBlOyArK2kpIHsKLSAgICAgICAgaW5mby5hZGRJbnN0cnVt
ZW50ZWRNZW1iZXIoaS0+Zmlyc3QpOwotICAgICAgICBpbmZvLmFkZEluc3RydW1lbnRlZE1lbWJl
cihpLT5zZWNvbmQpOworICAgICAgICBpbmZvLmFkZEluc3RydW1lbnRlZE1lbWJlcihpLT5rZXkp
OworICAgICAgICBpbmZvLmFkZEluc3RydW1lbnRlZE1lbWJlcihpLT52YWx1ZSk7CiAgICAgfQog
ICAgIGluZm8uYWRkVmVjdG9yKG1fYWxsUmVzb3VyY2VzKTsKICAgICBpbmZvLmFkZE1lbWJlciht
X2xpdmVEZWNvZGVkUmVzb3VyY2VzKTsKQEAgLTczOCw3ICs3MzgsNyBAQCB2b2lkIE1lbW9yeUNh
Y2hlOjpzZXREaXNhYmxlZChib29sIGRpc2FibGVkKQogICAgICAgICBDYWNoZWRSZXNvdXJjZU1h
cDo6aXRlcmF0b3IgaSA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7CiAgICAgICAgIGlmIChpID09IG1f
cmVzb3VyY2VzLmVuZCgpKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGV2aWN0KGktPnNl
Y29uZCk7CisgICAgICAgIGV2aWN0KGktPnZhbHVlKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuY3BwCmluZGV4IGQ3MGVjYjVhYjhiNjgyN2Mx
Y2E0YjExN2M2NjQ5MmEzNmJjMTk1ZDIuLjUzZjEyNjBlN2MxOGFmYzhlNzZhNGMxNmNmMjNhYzgw
NDE4MjY3MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRh
YmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmNw
cApAQCAtMTkzLDcgKzE5Myw3IEBAIHZvaWQgSWNvbkRhdGFiYXNlOjpyZW1vdmVBbGxJY29ucygp
CiAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBQYWdlVVJMUmVjb3JkKj46Oml0ZXJhdG9yIGl0ZXIg
PSBtX3BhZ2VVUkxUb1JlY29yZE1hcC5iZWdpbigpOwogICAgICAgICBIYXNoTWFwPFN0cmluZywg
UGFnZVVSTFJlY29yZCo+OjppdGVyYXRvciBlbmQgPSBtX3BhZ2VVUkxUb1JlY29yZE1hcC5lbmQo
KTsKICAgICAgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCi0gICAgICAgICAgICAoKml0
ZXIpLnNlY29uZC0+c2V0SWNvblJlY29yZCgwKTsKKyAgICAgICAgICAgICgqaXRlcikudmFsdWUt
PnNldEljb25SZWNvcmQoMCk7CiAgICAgICAgICAgICAKICAgICAgICAgLy8gQ2xlYXIgdGhlIGlj
b25VUkwgLT4gSWNvblJlY29yZCBtYXAKICAgICAgICAgbV9pY29uVVJMVG9SZWNvcmRNYXAuY2xl
YXIoKTsKQEAgLTc4Niw3ICs3ODYsNyBAQCBzaXplX3QgSWNvbkRhdGFiYXNlOjppY29uUmVjb3Jk
Q291bnRXaXRoRGF0YSgpCiAgICAgSGFzaE1hcDxTdHJpbmcsIEljb25SZWNvcmQqPjo6aXRlcmF0
b3IgZW5kID0gbV9pY29uVVJMVG9SZWNvcmRNYXAuZW5kKCk7CiAgICAgCiAgICAgZm9yICg7IGkg
IT0gZW5kOyArK2kpCi0gICAgICAgIHJlc3VsdCArPSAoKCppKS5zZWNvbmQtPmltYWdlRGF0YVN0
YXR1cygpID09IEltYWdlRGF0YVN0YXR1c1ByZXNlbnQpOworICAgICAgICByZXN1bHQgKz0gKCgq
aSkudmFsdWUtPmltYWdlRGF0YVN0YXR1cygpID09IEltYWdlRGF0YVN0YXR1c1ByZXNlbnQpOwog
ICAgICAgICAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTE1NTcsMTMgKzE1NTcsMTMg
QEAgdm9pZCBJY29uRGF0YWJhc2U6OnBlcmZvcm1QZW5kaW5nUmV0YWluQW5kUmVsZWFzZU9wZXJh
dGlvbnMoKQogICAgIH0KIAogICAgIGZvciAoSGFzaENvdW50ZWRTZXQ8U3RyaW5nPjo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSB0b1JldGFpbi5iZWdpbigpLCBlbmQgPSB0b1JldGFpbi5lbmQoKTsgaXQg
IT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIEFTU0VSVCghaXQtPmZpcnN0LmltcGwoKSB8fCBpdC0+
Zmlyc3QuaW1wbCgpLT5oYXNPbmVSZWYoKSk7Ci0gICAgICAgIHBlcmZvcm1SZXRhaW5JY29uRm9y
UGFnZVVSTChpdC0+Zmlyc3QsIGl0LT5zZWNvbmQpOworICAgICAgICBBU1NFUlQoIWl0LT5rZXku
aW1wbCgpIHx8IGl0LT5rZXkuaW1wbCgpLT5oYXNPbmVSZWYoKSk7CisgICAgICAgIHBlcmZvcm1S
ZXRhaW5JY29uRm9yUGFnZVVSTChpdC0+a2V5LCBpdC0+dmFsdWUpOwogICAgIH0KIAogICAgIGZv
ciAoSGFzaENvdW50ZWRTZXQ8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSB0b1JlbGVhc2Uu
YmVnaW4oKSwgZW5kID0gdG9SZWxlYXNlLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgQVNTRVJUKCFpdC0+Zmlyc3QuaW1wbCgpIHx8IGl0LT5maXJzdC5pbXBsKCktPmhhc09uZVJl
ZigpKTsKLSAgICAgICAgcGVyZm9ybVJlbGVhc2VJY29uRm9yUGFnZVVSTChpdC0+Zmlyc3QsIGl0
LT5zZWNvbmQpOworICAgICAgICBBU1NFUlQoIWl0LT5rZXkuaW1wbCgpIHx8IGl0LT5rZXkuaW1w
bCgpLT5oYXNPbmVSZWYoKSk7CisgICAgICAgIHBlcmZvcm1SZWxlYXNlSWNvbkZvclBhZ2VVUkwo
aXQtPmtleSwgaXQtPnZhbHVlKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRE9NV2luZG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNw
cAppbmRleCA1MjEwN2M4ODcxMzBlOTRmYmM5Yjk2ZWI0MDk1MWRiNDQzYjA5MGNlLi42OWVlNzUw
MDJmZDQ5MDc3MDg2NGVkM2E4MGQ1YmQ0OGIwNzRjYzM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5k
b3cuY3BwCkBAIC0yNDgsNyArMjQ4LDcgQEAgYm9vbCBET01XaW5kb3c6OmRpc3BhdGNoQWxsUGVu
ZGluZ0JlZm9yZVVubG9hZEV2ZW50cygpCiAgICAgVmVjdG9yPFJlZlB0cjxET01XaW5kb3c+ID4g
d2luZG93czsKICAgICBET01XaW5kb3dTZXQ6Oml0ZXJhdG9yIGVuZCA9IHNldC5lbmQoKTsKICAg
ICBmb3IgKERPTVdpbmRvd1NldDo6aXRlcmF0b3IgaXQgPSBzZXQuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KQotICAgICAgICB3aW5kb3dzLmFwcGVuZChpdC0+Zmlyc3QpOworICAgICAgICB3aW5k
b3dzLmFwcGVuZChpdC0+a2V5KTsKIAogICAgIHNpemVfdCBzaXplID0gd2luZG93cy5zaXplKCk7
CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKQEAgLTI5MCw3ICsyOTAs
NyBAQCB2b2lkIERPTVdpbmRvdzo6ZGlzcGF0Y2hBbGxQZW5kaW5nVW5sb2FkRXZlbnRzKCkKICAg
ICBWZWN0b3I8UmVmUHRyPERPTVdpbmRvdz4gPiB3aW5kb3dzOwogICAgIERPTVdpbmRvd1NldDo6
aXRlcmF0b3IgZW5kID0gc2V0LmVuZCgpOwogICAgIGZvciAoRE9NV2luZG93U2V0OjppdGVyYXRv
ciBpdCA9IHNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHdpbmRvd3MuYXBw
ZW5kKGl0LT5maXJzdCk7CisgICAgICAgIHdpbmRvd3MuYXBwZW5kKGl0LT5rZXkpOwogCiAgICAg
c2l6ZV90IHNpemUgPSB3aW5kb3dzLnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHNpemU7ICsraSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRs
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4IDQ4ZDA3
OWUyMmI3MWM0MWE1ZDkzMDRkOGJlMjFiYTI2YjhiMzg5MjEuLmE2YmJlNzAwY2Y5ZTM4ZGE3NmIx
YWRjNDQ2Y2JhNDliZjA5MDg3MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZl
bnRIYW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAK
QEAgLTM2MTksNyArMzYxOSw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVUb3VjaEV2ZW50
KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYgZXZlbnQpCiAgICAgICAgIC8vIHJlbGVhc2VkIG9y
IGNhbmNlbGxlZCBpdCB3aWxsIG9ubHkgYXBwZWFyIGluIHRoZSBjaGFuZ2VkVG91Y2hlcyBsaXN0
LgogICAgICAgICBpZiAocG9pbnRTdGF0ZSAhPSBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoUmVs
ZWFzZWQgJiYgcG9pbnRTdGF0ZSAhPSBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoQ2FuY2VsbGVk
KSB7CiAgICAgICAgICAgICB0b3VjaGVzLT5hcHBlbmQodG91Y2gpOwotICAgICAgICAgICAgdGFy
Z2V0VG91Y2hlc0l0ZXJhdG9yLT5zZWNvbmQtPmFwcGVuZCh0b3VjaCk7CisgICAgICAgICAgICB0
YXJnZXRUb3VjaGVzSXRlcmF0b3ItPnZhbHVlLT5hcHBlbmQodG91Y2gpOwogICAgICAgICB9CiAK
ICAgICAgICAgLy8gTm93IGJ1aWxkIHVwIHRoZSBjb3JyZWN0IGxpc3QgZm9yIGNoYW5nZWRUb3Vj
aGVzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAppbmRleCBmYjY1ZDU0Y2YxOTkyOGM1ZDQ3ZDE4NDJjNDU2
NTJmNjA2NTkxMjk2Li5iOGQ0ZjdkNjQ0YzkyMWRkMTQxZmRlN2U0ZmJiNTJjYTVhNWU1N2NlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0ZyYW1lLmNwcApAQCAtNTc5LDcgKzU3OSw3IEBAIHZvaWQgRnJhbWU6OmluamVj
dFVzZXJTY3JpcHRzKFVzZXJTY3JpcHRJbmplY3Rpb25UaW1lIGluamVjdGlvblRpbWUpCiAgICAg
ICAgIHJldHVybjsKICAgICBVc2VyU2NyaXB0TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSB1c2Vy
U2NyaXB0cy0+ZW5kKCk7CiAgICAgZm9yIChVc2VyU2NyaXB0TWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IHVzZXJTY3JpcHRzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGluamVj
dFVzZXJTY3JpcHRzRm9yV29ybGQoaXQtPmZpcnN0LmdldCgpLCAqaXQtPnNlY29uZCwgaW5qZWN0
aW9uVGltZSk7CisgICAgICAgIGluamVjdFVzZXJTY3JpcHRzRm9yV29ybGQoaXQtPmtleS5nZXQo
KSwgKml0LT52YWx1ZSwgaW5qZWN0aW9uVGltZSk7CiB9CiAKIHZvaWQgRnJhbWU6OmluamVjdFVz
ZXJTY3JpcHRzRm9yV29ybGQoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCwgY29uc3QgVXNlclNjcmlw
dFZlY3RvciYgdXNlclNjcmlwdHMsIFVzZXJTY3JpcHRJbmplY3Rpb25UaW1lIGluamVjdGlvblRp
bWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5jcHAKaW5kZXggNDVkMjVmNTUyMTRkNzQ0MTk0ZTkz
N2ZhMzFlNmU2NDYwZWFjYWY5Mi4uMDMyN2JiMGI2YzdlZWI4M2MyYzNlOWQwMjYyN2I4MGRjNzE5
YzFmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlR3JvdXAuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmNwcApAQCAtOTMsMTIgKzkzLDEyIEBAIFBh
Z2VHcm91cCogUGFnZUdyb3VwOjpwYWdlR3JvdXAoY29uc3QgU3RyaW5nJiBncm91cE5hbWUpCiAg
ICAgUGFnZUdyb3VwTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gcGFnZUdyb3Vwcy0+YWRkKGdyb3Vw
TmFtZSwgMCk7CiAKICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgQVNTRVJU
KCFyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7Ci0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vj
b25kID0gbmV3IFBhZ2VHcm91cChncm91cE5hbWUpOworICAgICAgICBBU1NFUlQoIXJlc3VsdC5p
dGVyYXRvci0+dmFsdWUpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gbmV3IFBh
Z2VHcm91cChncm91cE5hbWUpOwogICAgIH0KIAotICAgIEFTU0VSVChyZXN1bHQuaXRlcmF0b3It
PnNlY29uZCk7Ci0gICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgIEFTU0VS
VChyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKKyAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZTsKIH0KIAogdm9pZCBQYWdlR3JvdXA6OmNsb3NlTG9jYWxTdG9yYWdlKCkKQEAgLTEwOSw4
ICsxMDksOCBAQCB2b2lkIFBhZ2VHcm91cDo6Y2xvc2VMb2NhbFN0b3JhZ2UoKQogICAgIFBhZ2VH
cm91cE1hcDo6aXRlcmF0b3IgZW5kID0gcGFnZUdyb3Vwcy0+ZW5kKCk7CiAKICAgICBmb3IgKFBh
Z2VHcm91cE1hcDo6aXRlcmF0b3IgaXQgPSBwYWdlR3JvdXBzLT5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQtPmhhc0xvY2FsU3RvcmFnZSgpKQotICAg
ICAgICAgICAgaXQtPnNlY29uZC0+bG9jYWxTdG9yYWdlKCktPmNsb3NlKCk7CisgICAgICAgIGlm
IChpdC0+dmFsdWUtPmhhc0xvY2FsU3RvcmFnZSgpKQorICAgICAgICAgICAgaXQtPnZhbHVlLT5s
b2NhbFN0b3JhZ2UoKS0+Y2xvc2UoKTsKICAgICB9CiB9CiAKQEAgLTEyMSw4ICsxMjEsOCBAQCB2
b2lkIFBhZ2VHcm91cDo6Y2xlYXJMb2NhbFN0b3JhZ2VGb3JBbGxPcmlnaW5zKCkKIAogICAgIFBh
Z2VHcm91cE1hcDo6aXRlcmF0b3IgZW5kID0gcGFnZUdyb3Vwcy0+ZW5kKCk7CiAgICAgZm9yIChQ
YWdlR3JvdXBNYXA6Oml0ZXJhdG9yIGl0ID0gcGFnZUdyb3Vwcy0+YmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kLT5oYXNMb2NhbFN0b3JhZ2UoKSkKLSAg
ICAgICAgICAgIGl0LT5zZWNvbmQtPmxvY2FsU3RvcmFnZSgpLT5jbGVhckFsbE9yaWdpbnNGb3JE
ZWxldGlvbigpOworICAgICAgICBpZiAoaXQtPnZhbHVlLT5oYXNMb2NhbFN0b3JhZ2UoKSkKKyAg
ICAgICAgICAgIGl0LT52YWx1ZS0+bG9jYWxTdG9yYWdlKCktPmNsZWFyQWxsT3JpZ2luc0ZvckRl
bGV0aW9uKCk7CiAgICAgfQogfQogCkBAIC0xMzMsOCArMTMzLDggQEAgdm9pZCBQYWdlR3JvdXA6
OmNsZWFyTG9jYWxTdG9yYWdlRm9yT3JpZ2luKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCiAKICAg
ICBQYWdlR3JvdXBNYXA6Oml0ZXJhdG9yIGVuZCA9IHBhZ2VHcm91cHMtPmVuZCgpOwogICAgIGZv
ciAoUGFnZUdyb3VwTWFwOjppdGVyYXRvciBpdCA9IHBhZ2VHcm91cHMtPmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnNlY29uZC0+aGFzTG9jYWxTdG9yYWdlKCkp
Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLT5sb2NhbFN0b3JhZ2UoKS0+Y2xlYXJPcmlnaW5Gb3JE
ZWxldGlvbihvcmlnaW4pOworICAgICAgICBpZiAoaXQtPnZhbHVlLT5oYXNMb2NhbFN0b3JhZ2Uo
KSkKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+bG9jYWxTdG9yYWdlKCktPmNsZWFyT3JpZ2luRm9y
RGVsZXRpb24ob3JpZ2luKTsKICAgICB9ICAgIAogfQogICAgIApAQCAtMTQ1LDggKzE0NSw4IEBA
IHZvaWQgUGFnZUdyb3VwOjpzeW5jTG9jYWxTdG9yYWdlKCkKIAogICAgIFBhZ2VHcm91cE1hcDo6
aXRlcmF0b3IgZW5kID0gcGFnZUdyb3Vwcy0+ZW5kKCk7CiAgICAgZm9yIChQYWdlR3JvdXBNYXA6
Oml0ZXJhdG9yIGl0ID0gcGFnZUdyb3Vwcy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0g
ICAgICAgIGlmIChpdC0+c2Vjb25kLT5oYXNMb2NhbFN0b3JhZ2UoKSkKLSAgICAgICAgICAgIGl0
LT5zZWNvbmQtPmxvY2FsU3RvcmFnZSgpLT5zeW5jKCk7CisgICAgICAgIGlmIChpdC0+dmFsdWUt
Pmhhc0xvY2FsU3RvcmFnZSgpKQorICAgICAgICAgICAgaXQtPnZhbHVlLT5sb2NhbFN0b3JhZ2Uo
KS0+c3luYygpOwogICAgIH0KIH0KIApAQCAtMjY5LDcgKzI2OSw3IEBAIHZvaWQgUGFnZUdyb3Vw
OjphZGRVc2VyU2NyaXB0VG9Xb3JsZChET01XcmFwcGVyV29ybGQqIHdvcmxkLCBjb25zdCBTdHJp
bmcmIHNvdXJjCiAgICAgT3duUHRyPFVzZXJTY3JpcHQ+IHVzZXJTY3JpcHQgPSBhZG9wdFB0cihu
ZXcgVXNlclNjcmlwdChzb3VyY2UsIHVybCwgd2hpdGVsaXN0LCBibGFja2xpc3QsIGluamVjdGlv
blRpbWUsIGluamVjdGVkRnJhbWVzKSk7CiAgICAgaWYgKCFtX3VzZXJTY3JpcHRzKQogICAgICAg
ICBtX3VzZXJTY3JpcHRzID0gYWRvcHRQdHIobmV3IFVzZXJTY3JpcHRNYXApOwotICAgIE93blB0
cjxVc2VyU2NyaXB0VmVjdG9yPiYgc2NyaXB0c0luV29ybGQgPSBtX3VzZXJTY3JpcHRzLT5hZGQo
d29ybGQsIG51bGxwdHIpLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgT3duUHRyPFVzZXJTY3JpcHRW
ZWN0b3I+JiBzY3JpcHRzSW5Xb3JsZCA9IG1fdXNlclNjcmlwdHMtPmFkZCh3b3JsZCwgbnVsbHB0
cikuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghc2NyaXB0c0luV29ybGQpCiAgICAgICAgIHNj
cmlwdHNJbldvcmxkID0gYWRvcHRQdHIobmV3IFVzZXJTY3JpcHRWZWN0b3IpOwogICAgIHNjcmlw
dHNJbldvcmxkLT5hcHBlbmQodXNlclNjcmlwdC5yZWxlYXNlKCkpOwpAQCAtMjg2LDcgKzI4Niw3
IEBAIHZvaWQgUGFnZUdyb3VwOjphZGRVc2VyU3R5bGVTaGVldFRvV29ybGQoRE9NV3JhcHBlcldv
cmxkKiB3b3JsZCwgY29uc3QgU3RyaW5nJiBzCiAgICAgT3duUHRyPFVzZXJTdHlsZVNoZWV0PiB1
c2VyU3R5bGVTaGVldCA9IGFkb3B0UHRyKG5ldyBVc2VyU3R5bGVTaGVldChzb3VyY2UsIHVybCwg
d2hpdGVsaXN0LCBibGFja2xpc3QsIGluamVjdGVkRnJhbWVzLCBsZXZlbCkpOwogICAgIGlmICgh
bV91c2VyU3R5bGVTaGVldHMpCiAgICAgICAgIG1fdXNlclN0eWxlU2hlZXRzID0gYWRvcHRQdHIo
bmV3IFVzZXJTdHlsZVNoZWV0TWFwKTsKLSAgICBPd25QdHI8VXNlclN0eWxlU2hlZXRWZWN0b3I+
JiBzdHlsZVNoZWV0c0luV29ybGQgPSBtX3VzZXJTdHlsZVNoZWV0cy0+YWRkKHdvcmxkLCBudWxs
cHRyKS5pdGVyYXRvci0+c2Vjb25kOworICAgIE93blB0cjxVc2VyU3R5bGVTaGVldFZlY3Rvcj4m
IHN0eWxlU2hlZXRzSW5Xb3JsZCA9IG1fdXNlclN0eWxlU2hlZXRzLT5hZGQod29ybGQsIG51bGxw
dHIpLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoIXN0eWxlU2hlZXRzSW5Xb3JsZCkKICAgICAg
ICAgc3R5bGVTaGVldHNJbldvcmxkID0gYWRvcHRQdHIobmV3IFVzZXJTdHlsZVNoZWV0VmVjdG9y
KTsKICAgICBzdHlsZVNoZWV0c0luV29ybGQtPmFwcGVuZCh1c2VyU3R5bGVTaGVldC5yZWxlYXNl
KCkpOwpAQCAtMzA2LDcgKzMwNiw3IEBAIHZvaWQgUGFnZUdyb3VwOjpyZW1vdmVVc2VyU2NyaXB0
RnJvbVdvcmxkKERPTVdyYXBwZXJXb3JsZCogd29ybGQsIGNvbnN0IEtVUkwmIHVyCiAgICAgaWYg
KGl0ID09IG1fdXNlclNjcmlwdHMtPmVuZCgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAg
VXNlclNjcmlwdFZlY3Rvciogc2NyaXB0cyA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgVXNlclNj
cmlwdFZlY3Rvciogc2NyaXB0cyA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICBmb3IgKGludCBpID0g
c2NyaXB0cy0+c2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKICAgICAgICAgaWYgKHNjcmlwdHMt
PmF0KGkpLT51cmwoKSA9PSB1cmwpCiAgICAgICAgICAgICBzY3JpcHRzLT5yZW1vdmUoaSk7CkBA
IC0zMjgsNyArMzI4LDcgQEAgdm9pZCBQYWdlR3JvdXA6OnJlbW92ZVVzZXJTdHlsZVNoZWV0RnJv
bVdvcmxkKERPTVdyYXBwZXJXb3JsZCogd29ybGQsIGNvbnN0IEtVUkwKICAgICBpZiAoaXQgPT0g
bV91c2VyU3R5bGVTaGVldHMtPmVuZCgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgVXNl
clN0eWxlU2hlZXRWZWN0b3IqIHN0eWxlc2hlZXRzID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICBV
c2VyU3R5bGVTaGVldFZlY3Rvciogc3R5bGVzaGVldHMgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAg
Zm9yIChpbnQgaSA9IHN0eWxlc2hlZXRzLT5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgewogICAg
ICAgICBpZiAoc3R5bGVzaGVldHMtPmF0KGkpLT51cmwoKSA9PSB1cmwpIHsKICAgICAgICAgICAg
IHN0eWxlc2hlZXRzLT5yZW1vdmUoaSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L1BhZ2VTZXJpYWxpemVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIu
Y3BwCmluZGV4IGM5MTFkNTRhOTI1NDZhN2NlMTRmMTg2NmVjYmNlZDhiNTZlNTY2M2IuLmExNjE0
OTI1NWM3ZTNlNDI2MDM5YzRhMTMyZmIxNjJiYzdhMTdmZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
UGFnZVNlcmlhbGl6ZXIuY3BwCkBAIC0zMzksNyArMzM5LDcgQEAgS1VSTCBQYWdlU2VyaWFsaXpl
cjo6dXJsRm9yQmxhbmtGcmFtZShGcmFtZSogZnJhbWUpCiB7CiAgICAgSGFzaE1hcDxGcmFtZSos
IEtVUkw+OjppdGVyYXRvciBpdGVyID0gbV9ibGFua0ZyYW1lVVJMcy5maW5kKGZyYW1lKTsKICAg
ICBpZiAoaXRlciAhPSBtX2JsYW5rRnJhbWVVUkxzLmVuZCgpKQotICAgICAgICByZXR1cm4gaXRl
ci0+c2Vjb25kOworICAgICAgICByZXR1cm4gaXRlci0+dmFsdWU7CiAgICAgU3RyaW5nIHVybCA9
ICJ3eWNpd3lnOi8vZnJhbWUvIiArIFN0cmluZzo6bnVtYmVyKG1fYmxhbmtGcmFtZUNvdW50ZXIr
Kyk7CiAgICAgS1VSTCBmYWtlVVJMKFBhcnNlZFVSTFN0cmluZywgdXJsKTsKICAgICBtX2JsYW5r
RnJhbWVVUkxzLmFkZChmcmFtZSwgZmFrZVVSTCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1NlY3VyaXR5UG9saWN5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlQ
b2xpY3kuY3BwCmluZGV4IGMyYTVhYjExNDM1ZWY2ZGIwNTc2OGM3NmNhMDM1N2I1NjI1ODMzMTIu
LjViMzZmNGY3MTZjNDRiZmIwOWYyMGU2MzJjYzBkMDM4NmYzY2NhM2MgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlQb2xpY3kuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvU2VjdXJpdHlQb2xpY3kuY3BwCkBAIC0xMzMsOSArMTMzLDkgQEAgdm9pZCBTZWN1cml0
eVBvbGljeTo6YWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoY29uc3QgU2VjdXJpdHlPcmln
aW4mIHNvdXJjZU8KICAgICBTdHJpbmcgc291cmNlU3RyaW5nID0gc291cmNlT3JpZ2luLnRvU3Ry
aW5nKCk7CiAgICAgT3JpZ2luQWNjZXNzTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gb3JpZ2luQWNj
ZXNzTWFwKCkuYWRkKHNvdXJjZVN0cmluZywgbnVsbHB0cik7CiAgICAgaWYgKHJlc3VsdC5pc05l
d0VudHJ5KQotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IGFkb3B0UHRyKG5ldyBP
cmlnaW5BY2Nlc3NXaGl0ZUxpc3QpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0g
YWRvcHRQdHIobmV3IE9yaWdpbkFjY2Vzc1doaXRlTGlzdCk7CiAKLSAgICBPcmlnaW5BY2Nlc3NX
aGl0ZUxpc3QqIGxpc3QgPSByZXN1bHQuaXRlcmF0b3ItPnNlY29uZC5nZXQoKTsKKyAgICBPcmln
aW5BY2Nlc3NXaGl0ZUxpc3QqIGxpc3QgPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpOwog
ICAgIGxpc3QtPmFwcGVuZChPcmlnaW5BY2Nlc3NFbnRyeShkZXN0aW5hdGlvblByb3RvY29sLCBk
ZXN0aW5hdGlvbkRvbWFpbiwgYWxsb3dEZXN0aW5hdGlvblN1YmRvbWFpbnMgPyBPcmlnaW5BY2Nl
c3NFbnRyeTo6QWxsb3dTdWJkb21haW5zIDogT3JpZ2luQWNjZXNzRW50cnk6OkRpc2FsbG93U3Vi
ZG9tYWlucykpOwogfQogCkBAIC0xNTIsNyArMTUyLDcgQEAgdm9pZCBTZWN1cml0eVBvbGljeTo6
cmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoY29uc3QgU2VjdXJpdHlPcmlnaW4mIHNv
dXIKICAgICBpZiAoaXQgPT0gbWFwLmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBPcmln
aW5BY2Nlc3NXaGl0ZUxpc3QqIGxpc3QgPSBpdC0+c2Vjb25kLmdldCgpOworICAgIE9yaWdpbkFj
Y2Vzc1doaXRlTGlzdCogbGlzdCA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICBzaXplX3QgaW5kZXgg
PSBsaXN0LT5maW5kKE9yaWdpbkFjY2Vzc0VudHJ5KGRlc3RpbmF0aW9uUHJvdG9jb2wsIGRlc3Rp
bmF0aW9uRG9tYWluLCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucyA/IE9yaWdpbkFjY2Vzc0Vu
dHJ5OjpBbGxvd1N1YmRvbWFpbnMgOiBPcmlnaW5BY2Nlc3NFbnRyeTo6RGlzYWxsb3dTdWJkb21h
aW5zKSk7CiAgICAgaWYgKGluZGV4ID09IG5vdEZvdW5kKQogICAgICAgICByZXR1cm47CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvU2V0dGluZ3MuY3BwCmluZGV4IDdlMDUzZjFmMWUxYmMxMmQ1Yjc1NTVjMzdhNDQ1NGI5
NTQ2MmY1NzEuLjk5ZDQxZWYxOWU5YzNjZjNjZDY1ZDdlMDc2ZDMxMDM3NWY0OTczMmUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvU2V0dGluZ3MuY3BwCkBAIC02Miw3ICs2Miw3IEBAIHN0YXRpYyBpbmxpbmUgdm9p
ZCBzZXRHZW5lcmljRm9udEZhbWlseU1hcChTY3JpcHRGb250RmFtaWx5TWFwJiBmb250TWFwLCBj
b25zdCBBCiAgICAgICAgIGlmIChpdCA9PSBmb250TWFwLmVuZCgpKQogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICBmb250TWFwLnJlbW92ZShpdCk7Ci0gICAgfSBlbHNlIGlmIChpdCAhPSBm
b250TWFwLmVuZCgpICYmIGl0LT5zZWNvbmQgPT0gZmFtaWx5KQorICAgIH0gZWxzZSBpZiAoaXQg
IT0gZm9udE1hcC5lbmQoKSAmJiBpdC0+dmFsdWUgPT0gZmFtaWx5KQogICAgICAgICByZXR1cm47
CiAgICAgZWxzZQogICAgICAgICBmb250TWFwLnNldChzdGF0aWNfY2FzdDxpbnQ+KHNjcmlwdCks
IGZhbWlseSk7CkBAIC03NSw3ICs3NSw3IEBAIHN0YXRpYyBpbmxpbmUgY29uc3QgQXRvbWljU3Ry
aW5nJiBnZXRHZW5lcmljRm9udEZhbWlseUZvclNjcmlwdChjb25zdCBTY3JpcHRGb250CiB7CiAg
ICAgU2NyaXB0Rm9udEZhbWlseU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBmb250TWFwLmZpbmQo
c3RhdGljX2Nhc3Q8aW50PihzY3JpcHQpKTsKICAgICBpZiAoaXQgIT0gZm9udE1hcC5lbmQoKSkK
LSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBpdC0+dmFsdWU7CiAg
ICAgaWYgKHNjcmlwdCAhPSBVU0NSSVBUX0NPTU1PTikKICAgICAgICAgcmV0dXJuIGdldEdlbmVy
aWNGb250RmFtaWx5Rm9yU2NyaXB0KGZvbnRNYXAsIFVTQ1JJUFRfQ09NTU9OKTsKICAgICByZXR1
cm4gZW1wdHlBdG9tOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9TcGVlY2hJbnB1
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NwZWVjaElucHV0LmNwcAppbmRleCAwMTI4ZWY4
YTQwYTQyNDM1NGFiNWY4ZTUwYmE4ZWNjNjIyNTdiM2M5Li44MzI4YzVkNGRmMzI5OTQyYjU5ZjNl
Y2MyMjUzNTY4Y2UyYThhMTFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NwZWVj
aElucHV0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NwZWVjaElucHV0LmNwcApAQCAt
NjIsNyArNjIsNyBAQCBpbnQgU3BlZWNoSW5wdXQ6OnJlZ2lzdGVyTGlzdGVuZXIoU3BlZWNoSW5w
dXRMaXN0ZW5lciogbGlzdGVuZXIpCiAjaWYgZGVmaW5lZChERUJVRykKICAgICAvLyBDaGVjayBp
ZiBhbHJlYWR5IHByZXNlbnQuCiAgICAgZm9yIChIYXNoTWFwPGludCwgU3BlZWNoSW5wdXRMaXN0
ZW5lcio+OjppdGVyYXRvciBpdCA9IG1fbGlzdGVuZXJzLmJlZ2luKCk7IGl0ICE9IG1fbGlzdGVu
ZXJzLmVuZCgpOyArK2l0KQotICAgICAgQVNTRVJUKGl0LT5zZWNvbmQgIT0gbGlzdGVuZXIpOwor
ICAgICAgQVNTRVJUKGl0LT52YWx1ZSAhPSBsaXN0ZW5lcik7CiAjZW5kaWYKIAogICAgIG1fbGlz
dGVuZXJzLmFkZChtX25leHRMaXN0ZW5lcklkLCBsaXN0ZW5lcik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1RvdWNoRGlzYW1iaWd1YXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9Ub3VjaERpc2FtYmlndWF0aW9uLmNwcAppbmRleCA1NDMxOWE2YTQzMjdkMDRlNDkyZTY2
ZTVlZjVjYjU0ZDRiOTI0MmNmLi5iNTgyMzM4YzIxNzU3NTA1MDU4NTQ1MzBkY2MwOTc0MjdiMzI1
OWE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RvdWNoRGlzYW1iaWd1YXRpb24u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVG91Y2hEaXNhbWJpZ3VhdGlvbi5jcHAKQEAg
LTEwNiw3ICsxMDYsNyBAQCB2b2lkIGZpbmRHb29kVG91Y2hUYXJnZXRzKGNvbnN0IEludFJlY3Qm
IHRvdWNoQm94LCBGcmFtZSogbWFpbkZyYW1lLCBmbG9hdCBwYWdlUwogICAgICAgICAgICAgaWYg
KG5vZGUtPmlzRG9jdW1lbnROb2RlKCkgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omh0
bWxUYWcpIHx8IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpib2R5VGFnKSkKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIGlmIChub2RlLT53aWxsUmVzcG9uZFRvTW91c2VD
bGlja0V2ZW50cygpKSB7Ci0gICAgICAgICAgICAgICAgVG91Y2hUYXJnZXREYXRhJiB0YXJnZXRE
YXRhID0gdG91Y2hUYXJnZXRzLmFkZChub2RlLCBUb3VjaFRhcmdldERhdGEoKSkuaXRlcmF0b3It
PnNlY29uZDsKKyAgICAgICAgICAgICAgICBUb3VjaFRhcmdldERhdGEmIHRhcmdldERhdGEgPSB0
b3VjaFRhcmdldHMuYWRkKG5vZGUsIFRvdWNoVGFyZ2V0RGF0YSgpKS5pdGVyYXRvci0+dmFsdWU7
CiAgICAgICAgICAgICAgICAgdGFyZ2V0RGF0YS53aW5kb3dCb3VuZGluZ0JveCA9IGJvdW5kaW5n
Qm94Rm9yRXZlbnROb2Rlcyhub2RlKTsKICAgICAgICAgICAgICAgICB0YXJnZXREYXRhLnNjb3Jl
ID0gc2NvcmVUb3VjaFRhcmdldCh0b3VjaFBvaW50LCB0b3VjaFBvaW50UGFkZGluZywgdGFyZ2V0
RGF0YS53aW5kb3dCb3VuZGluZ0JveCk7CiAgICAgICAgICAgICAgICAgYmVzdFNjb3JlID0gbWF4
KGJlc3RTY29yZSwgdGFyZ2V0RGF0YS5zY29yZSk7CkBAIC0xMTgsOSArMTE4LDkgQEAgdm9pZCBm
aW5kR29vZFRvdWNoVGFyZ2V0cyhjb25zdCBJbnRSZWN0JiB0b3VjaEJveCwgRnJhbWUqIG1haW5G
cmFtZSwgZmxvYXQgcGFnZVMKICAgICBmb3IgKEhhc2hNYXA8Tm9kZSosIFRvdWNoVGFyZ2V0RGF0
YT46Oml0ZXJhdG9yIGl0ID0gdG91Y2hUYXJnZXRzLmJlZ2luKCk7IGl0ICE9IHRvdWNoVGFyZ2V0
cy5lbmQoKTsgKytpdCkgewogICAgICAgICAvLyBDdXJyZW50bHkgdGhlIHNjb3JpbmcgZnVuY3Rp
b24gdXNlcyB0aGUgb3ZlcmxhcCBhcmVhIHdpdGggdGhlIGZhdCBwb2ludCBhcyB0aGUgc2NvcmUu
CiAgICAgICAgIC8vIFdlIGlnbm9yZSB0aGUgY2FuZGlkYXRlcyB0aGF0IGhhcyBsZXNzIHRoYW4g
MS8yIG92ZXJsYXAgKHdlIGNvbnNpZGVyIG5vdCByZWFsbHkgYW1iaWd1b3VzIGVub3VnaCkgdGhh
biB0aGUgYmVzdCBjYW5kaWRhdGUgdG8gYXZvaWQgZXhjZXNzaXZlIHBvcHVwcy4KLSAgICAgICAg
aWYgKGl0LT5zZWNvbmQuc2NvcmUgPCBiZXN0U2NvcmUgKiAwLjUpCisgICAgICAgIGlmIChpdC0+
dmFsdWUuc2NvcmUgPCBiZXN0U2NvcmUgKiAwLjUpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgZ29vZFRhcmdldHMuYXBwZW5kKGl0LT5zZWNvbmQud2luZG93Qm91bmRpbmdCb3gpOwor
ICAgICAgICBnb29kVGFyZ2V0cy5hcHBlbmQoaXQtPnZhbHVlLndpbmRvd0JvdW5kaW5nQm94KTsK
ICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvV2luZG93RmVhdHVy
ZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9XaW5kb3dGZWF0dXJlcy5jcHAKaW5kZXggNmNk
ZTliNWVmMDYwZWNkZTE1ZGEwMTcyNzg3OWNhNGE0MGM1MmY4My4uNzc2OGEwOWNkODU0YWY2YjVm
MGZmMmQ0OWY5ZTRiZDFlNWZmZGE0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9X
aW5kb3dGZWF0dXJlcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9XaW5kb3dGZWF0dXJl
cy5jcHAKQEAgLTIxMSw3ICsyMTEsNyBAQCBib29sIFdpbmRvd0ZlYXR1cmVzOjpib29sRmVhdHVy
ZShjb25zdCBEaWFsb2dGZWF0dXJlc01hcCYgZmVhdHVyZXMsIGNvbnN0IGNoYXIqCiAgICAgRGlh
bG9nRmVhdHVyZXNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZmVhdHVyZXMuZmluZChrZXkpOwog
ICAgIGlmIChpdCA9PSBmZWF0dXJlcy5lbmQoKSkKICAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1
ZTsKLSAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0gaXQtPnNlY29uZDsKKyAgICBjb25zdCBTdHJp
bmcmIHZhbHVlID0gaXQtPnZhbHVlOwogICAgIHJldHVybiB2YWx1ZS5pc051bGwoKSB8fCB2YWx1
ZSA9PSAiMSIgfHwgdmFsdWUgPT0gInllcyIgfHwgdmFsdWUgPT0gIm9uIjsKIH0KIApAQCAtMjIz
LDcgKzIyMyw3IEBAIGZsb2F0IFdpbmRvd0ZlYXR1cmVzOjpmbG9hdEZlYXR1cmUoY29uc3QgRGlh
bG9nRmVhdHVyZXNNYXAmIGZlYXR1cmVzLCBjb25zdCBjaGFyCiAgICAgLy8gRklYTUU6IFRoZSB0
b0RvdWJsZSBmdW5jdGlvbiBkb2VzIG5vdCBvZmZlciBhIHdheSB0byB0ZWxsICIwcSIgZnJvbSBz
dHJpbmcgd2l0aCBubyBkaWdpdHMgaW4gaXQ6IEJvdGgKICAgICAvLyByZXR1cm4gdGhlIG51bWJl
ciAwIGFuZCBmYWxzZSBmb3Igb2suIEJ1dCAiMHEiIHNob3VsZCB5aWVsZCB0aGUgbWluaW11bSBy
YXRoZXIgdGhhbiB0aGUgZGVmYXVsdC4KICAgICBib29sIG9rOwotICAgIGRvdWJsZSBwYXJzZWRO
dW1iZXIgPSBpdC0+c2Vjb25kLnRvRG91YmxlKCZvayk7CisgICAgZG91YmxlIHBhcnNlZE51bWJl
ciA9IGl0LT52YWx1ZS50b0RvdWJsZSgmb2spOwogICAgIGlmICgocGFyc2VkTnVtYmVyID09IDAg
JiYgIW9rKSB8fCBpc25hbihwYXJzZWROdW1iZXIpKQogICAgICAgICByZXR1cm4gZGVmYXVsdFZh
bHVlOwogICAgIGlmIChwYXJzZWROdW1iZXIgPCBtaW4gfHwgbWF4IDw9IG1pbikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5jcHAK
aW5kZXggYzQ5MTE5ZTZhMTNjMDE0YzhmMjU4ZTI5NDYxMzgxMWNkZmEwZDUxYi4uNWUwNzE3ZTBh
OWNmYmEzMjg5ODI5NTYyMTc3OTEyYzA2Zjc4YzhiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKQEAgLTkzLDE0ICs5
MywxNCBAQCBkb3VibGUgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnVwZGF0ZUFuaW1hdGlv
bnMoU2V0Q2hhbmdlZCBjYWxsU2V0Q2hhbmdlZC8qCiAKICAgICBSZW5kZXJPYmplY3RBbmltYXRp
b25NYXA6OmNvbnN0X2l0ZXJhdG9yIGFuaW1hdGlvbnNFbmQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlv
bnMuZW5kKCk7CiAgICAgZm9yIChSZW5kZXJPYmplY3RBbmltYXRpb25NYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGFuaW1hdGlvbnNF
bmQ7ICsraXQpIHsKLSAgICAgICAgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wQW5pbSA9IGl0LT5z
ZWNvbmQuZ2V0KCk7CisgICAgICAgIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcEFuaW0gPSBpdC0+
dmFsdWUuZ2V0KCk7CiAgICAgICAgIGlmICghY29tcEFuaW0tPnN1c3BlbmRlZCgpICYmIGNvbXBB
bmltLT5oYXNBbmltYXRpb25zKCkpIHsKICAgICAgICAgICAgIGRvdWJsZSB0ID0gY29tcEFuaW0t
PnRpbWVUb05leHRTZXJ2aWNlKCk7CiAgICAgICAgICAgICBpZiAodCAhPSAtMSAmJiAodCA8IHRp
bWVUb05leHRTZXJ2aWNlIHx8IHRpbWVUb05leHRTZXJ2aWNlID09IC0xKSkKICAgICAgICAgICAg
ICAgICB0aW1lVG9OZXh0U2VydmljZSA9IHQ7CiAgICAgICAgICAgICBpZiAoIXRpbWVUb05leHRT
ZXJ2aWNlKSB7CiAgICAgICAgICAgICAgICAgaWYgKGNhbGxTZXRDaGFuZ2VkID09IENhbGxTZXRD
aGFuZ2VkKSB7Ci0gICAgICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBpdC0+Zmlyc3QtPm5v
ZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGl0LT5rZXktPm5vZGUoKTsK
ICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFub2RlIHx8IChub2RlLT5kb2N1bWVudCgpICYm
ICFub2RlLT5kb2N1bWVudCgpLT5pblBhZ2VDYWNoZSgpKSk7CiAgICAgICAgICAgICAgICAgICAg
IG5vZGUtPnNldE5lZWRzU3R5bGVSZWNhbGMoU3ludGhldGljU3R5bGVDaGFuZ2UpOwogICAgICAg
ICAgICAgICAgICAgICBjYWxsZWRTZXRDaGFuZ2VkID0gdHJ1ZTsKQEAgLTI5Miw5ICsyOTIsOSBA
QCB2b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpzdXNwZW5kQW5pbWF0aW9uc0ZvckRv
Y3VtZW50KERvY3VtZW50KiBkb2N1bWVudAogICAgIAogICAgIFJlbmRlck9iamVjdEFuaW1hdGlv
bk1hcDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fY29tcG9zaXRlQW5pbWF0aW9u
cy5lbmQoKTsKICAgICBmb3IgKFJlbmRlck9iamVjdEFuaW1hdGlvbk1hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gYW5pbWF0aW9uc0Vu
ZDsgKytpdCkgewotICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gaXQtPmZpcnN0Owor
ICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gaXQtPmtleTsKICAgICAgICAgaWYgKHJl
bmRlcmVyLT5kb2N1bWVudCgpID09IGRvY3VtZW50KSB7Ci0gICAgICAgICAgICBDb21wb3NpdGVB
bmltYXRpb24qIGNvbXBBbmltID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgIENvbXBv
c2l0ZUFuaW1hdGlvbiogY29tcEFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBj
b21wQW5pbS0+c3VzcGVuZEFuaW1hdGlvbnMoKTsKICAgICAgICAgfQogICAgIH0KQEAgLTMwOCw5
ICszMDgsOSBAQCB2b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpyZXN1bWVBbmltYXRp
b25zRm9yRG9jdW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50KQogICAgIAogICAgIFJlbmRlck9iamVj
dEFuaW1hdGlvbk1hcDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fY29tcG9zaXRl
QW5pbWF0aW9ucy5lbmQoKTsKICAgICBmb3IgKFJlbmRlck9iamVjdEFuaW1hdGlvbk1hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gYW5p
bWF0aW9uc0VuZDsgKytpdCkgewotICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gaXQt
PmZpcnN0OworICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gaXQtPmtleTsKICAgICAg
ICAgaWYgKHJlbmRlcmVyLT5kb2N1bWVudCgpID09IGRvY3VtZW50KSB7Ci0gICAgICAgICAgICBD
b21wb3NpdGVBbmltYXRpb24qIGNvbXBBbmltID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAg
ICAgIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcEFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAg
ICAgICAgICBjb21wQW5pbS0+cmVzdW1lQW5pbWF0aW9ucygpOwogICAgICAgICB9CiAgICAgfQpA
QCAtMzk2LDggKzM5Niw4IEBAIHVuc2lnbmVkIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpu
dW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoRG9jdW1lbnQqIGRvY3VtZW50CiAgICAgCiAgICAgUmVu
ZGVyT2JqZWN0QW5pbWF0aW9uTWFwOjpjb25zdF9pdGVyYXRvciBhbmltYXRpb25zRW5kID0gbV9j
b21wb3NpdGVBbmltYXRpb25zLmVuZCgpOwogICAgIGZvciAoUmVuZGVyT2JqZWN0QW5pbWF0aW9u
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5iZWdpbigpOyBp
dCAhPSBhbmltYXRpb25zRW5kOyArK2l0KSB7Ci0gICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVy
ZXIgPSBpdC0+Zmlyc3Q7Ci0gICAgICAgIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcEFuaW0gPSBp
dC0+c2Vjb25kLmdldCgpOworICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gaXQtPmtl
eTsKKyAgICAgICAgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wQW5pbSA9IGl0LT52YWx1ZS5nZXQo
KTsKICAgICAgICAgaWYgKHJlbmRlcmVyLT5kb2N1bWVudCgpID09IGRvY3VtZW50KQogICAgICAg
ICAgICAgY291bnQgKz0gY29tcEFuaW0tPm51bWJlck9mQWN0aXZlQW5pbWF0aW9ucygpOwogICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFu
aW1hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmlt
YXRpb24uY3BwCmluZGV4IGYzNTc3ODE4OTc0MGVlMzZlOGEzM2E1MGFmNmNhZDU2OTI5MGY5NmIu
LjBiMGYzNzlkNTZhYmQ4NWM2M2JhZTE0Y2U1ZWEyYjQ5YWIxM2VlOGUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmNwcApAQCAt
NTgsNyArNTgsNyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6Y2xlYXJSZW5kZXJlcigpCiAg
ICAgICAgIC8vIGFuIGFuaW1hdGlvbiBjYWxsYmFjayAoc2VlIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMjA1MikKICAgICAgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9u
c01hcDo6Y29uc3RfaXRlcmF0b3IgdHJhbnNpdGlvbnNFbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgp
OwogICAgICAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSB0cmFuc2l0aW9uc0VuZDsgKytpdCkg
ewotICAgICAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIHRyYW5zaXRpb24gPSBpdC0+c2Vjb25k
LmdldCgpOworICAgICAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIHRyYW5zaXRpb24gPSBpdC0+
dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBhbmltYXRpb25Db250cm9sbGVyKCktPmFuaW1hdGlv
bldpbGxCZVJlbW92ZWQodHJhbnNpdGlvbik7CiAgICAgICAgICAgICB0cmFuc2l0aW9uLT5jbGVh
cigpOwogICAgICAgICB9CkBAIC02Nyw3ICs2Nyw3IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9u
OjpjbGVhclJlbmRlcmVyKCkKICAgICAgICAgbV9rZXlmcmFtZUFuaW1hdGlvbnMuY2hlY2tDb25z
aXN0ZW5jeSgpOwogICAgICAgICBBbmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBhbmlt
YXRpb25zRW5kID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuZW5kKCk7CiAgICAgICAgIGZvciAoQW5p
bWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5i
ZWdpbigpOyBpdCAhPSBhbmltYXRpb25zRW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBLZXlmcmFt
ZUFuaW1hdGlvbiogYW5pbSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBLZXlmcmFt
ZUFuaW1hdGlvbiogYW5pbSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGFuaW1hdGlv
bkNvbnRyb2xsZXIoKS0+YW5pbWF0aW9uV2lsbEJlUmVtb3ZlZChhbmltKTsKICAgICAgICAgICAg
IGFuaW0tPmNsZWFyKCk7CiAgICAgICAgIH0KQEAgLTg0LDcgKzg0LDcgQEAgdm9pZCBDb21wb3Np
dGVBbmltYXRpb246OnVwZGF0ZVRyYW5zaXRpb25zKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIFJl
bmRlclN0eWxlKgogICAgIC8vIGluIHRoZSBuZXh0IGxvb3AgYW5kIHRoZW4gdG9zcyB0aGUgb25l
cyB0aGF0IGRpZG4ndCBnZXQgbWFya2VkLgogICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fdHJhbnNpdGlvbnMuZW5kKCk7CiAgICAgZm9yIChDU1NQ
cm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5zZXRBY3RpdmUo
ZmFsc2UpOworICAgICAgICBpdC0+dmFsdWUtPnNldEFjdGl2ZShmYWxzZSk7CiAgICAgICAgIAog
ICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbW9kaWZpZWRDdXJyZW50U3R5bGU7CiAgICAgCkBAIC0x
ODEsNyArMTgxLDcgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnVwZGF0ZVRyYW5zaXRpb25z
KFJlbmRlck9iamVjdCogcmVuZGVyZXIsIFJlbmRlclN0eWxlKgogICAgIFZlY3RvcjxpbnQ+IHRv
QmVSZW1vdmVkOwogICAgIGVuZCA9IG1fdHJhbnNpdGlvbnMuZW5kKCk7CiAgICAgZm9yIChDU1NQ
cm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBh
bmltID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGFuaW0g
PSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgIGlmICghYW5pbS0+YWN0aXZlKCkpIHsKICAgICAg
ICAgICAgIGFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+YW5pbWF0aW9uV2lsbEJlUmVtb3ZlZChhbmlt
KTsKICAgICAgICAgICAgIHRvQmVSZW1vdmVkLmFwcGVuZChhbmltLT5hbmltYXRpbmdQcm9wZXJ0
eSgpKTsKQEAgLTIwNywxMyArMjA3LDEzIEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjp1cGRh
dGVLZXlmcmFtZUFuaW1hdGlvbnMoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgUmVuZGVyCiAgICAg
ICAgIC8vIFRoZSBjdXJyZW50IGFuZCB0YXJnZXQgYW5pbWF0aW9ucyBhcmUgdGhlIHNhbWUgc28g
d2UganVzdCBuZWVkIHRvIHRvc3MgYW55IAogICAgICAgICAvLyBhbmltYXRpb24gd2hpY2ggaXMg
ZmluaXNoZWQgKHBvc3RBY3RpdmUpLgogICAgICAgICBmb3IgKEFuaW1hdGlvbk5hbWVNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0ga2Zl
bmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGlmIChpdC0+c2Vjb25kLT5wb3N0QWN0aXZlKCkpCi0g
ICAgICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0SW5kZXgoLTEpOworICAgICAgICAgICAgaWYg
KGl0LT52YWx1ZS0+cG9zdEFjdGl2ZSgpKQorICAgICAgICAgICAgICAgIGl0LT52YWx1ZS0+c2V0
SW5kZXgoLTEpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gTWFyayBhbGwg
ZXhpc3RpbmcgYW5pbWF0aW9ucyBhcyBubyBsb25nZXIgYWN0aXZlLgogICAgICAgICBmb3IgKEFu
aW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMu
YmVnaW4oKTsgaXQgIT0ga2ZlbmQ7ICsraXQpCi0gICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRJ
bmRleCgtMSk7CisgICAgICAgICAgICBpdC0+dmFsdWUtPnNldEluZGV4KC0xKTsKICAgICAgICAg
ICAgIAogICAgICAgICAvLyBUb3NzIHRoZSBhbmltYXRpb24gb3JkZXIgbWFwLgogICAgICAgICBt
X2tleWZyYW1lQW5pbWF0aW9uT3JkZXJNYXAuY2xlYXIoKTsKQEAgLTI2Miw3ICsyNjIsNyBAQCB2
b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlS2V5ZnJhbWVBbmltYXRpb25zKFJlbmRlck9i
amVjdCogcmVuZGVyZXIsIFJlbmRlcgogICAgIFZlY3RvcjxBdG9taWNTdHJpbmdJbXBsKj4gYW5p
bXNUb0JlUmVtb3ZlZDsKICAgICBrZmVuZCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmVuZCgpOwog
ICAgIGZvciAoQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2tleWZyYW1l
QW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBrZmVuZDsgKytpdCkgewotICAgICAgICBLZXlmcmFt
ZUFuaW1hdGlvbioga2V5ZnJhbWVBbmltID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgS2V5
ZnJhbWVBbmltYXRpb24qIGtleWZyYW1lQW5pbSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAg
aWYgKGtleWZyYW1lQW5pbS0+aW5kZXgoKSA8IDApIHsKICAgICAgICAgICAgIGFuaW1zVG9CZVJl
bW92ZWQuYXBwZW5kKGtleWZyYW1lQW5pbS0+bmFtZSgpLmltcGwoKSk7CiAgICAgICAgICAgICBh
bmltYXRpb25Db250cm9sbGVyKCktPmFuaW1hdGlvbldpbGxCZVJlbW92ZWQoa2V5ZnJhbWVBbmlt
KTsKQEAgLTI5MCw3ICsyOTAsNyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBDb21wb3NpdGVB
bmltYXRpb246OmFuaW1hdGUoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgUmVuZAogICAgICAgICBp
ZiAoIW1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBDU1NQcm9wZXJ0eVRy
YW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOwog
ICAgICAgICAgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZC5nZXQoKSkK
KyAgICAgICAgICAgICAgICBpZiAoSW1wbGljaXRBbmltYXRpb24qIGFuaW0gPSBpdC0+dmFsdWUu
Z2V0KCkpCiAgICAgICAgICAgICAgICAgICAgIGFuaW0tPmFuaW1hdGUodGhpcywgcmVuZGVyZXIs
IGN1cnJlbnRTdHlsZSwgdGFyZ2V0U3R5bGUsIHJlc3VsdFN0eWxlKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQpAQCAtMzEyLDcgKzMxMiw3IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IENv
bXBvc2l0ZUFuaW1hdGlvbjo6Z2V0QW5pbWF0ZWRTdHlsZSgpIGNvbnN0CiAgICAgUmVmUHRyPFJl
bmRlclN0eWxlPiByZXN1bHRTdHlsZTsKICAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpj
b25zdF9pdGVyYXRvciBlbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOwogICAgIGZvciAoQ1NTUHJv
cGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoSW1wbGljaXRBbmltYXRpb24q
IGltcGxpY2l0QW5pbWF0aW9uID0gaXQtPnNlY29uZC5nZXQoKSkKKyAgICAgICAgaWYgKEltcGxp
Y2l0QW5pbWF0aW9uKiBpbXBsaWNpdEFuaW1hdGlvbiA9IGl0LT52YWx1ZS5nZXQoKSkKICAgICAg
ICAgICAgIGltcGxpY2l0QW5pbWF0aW9uLT5nZXRBbmltYXRlZFN0eWxlKHJlc3VsdFN0eWxlKTsK
ICAgICB9CiAKQEAgLTMzMyw3ICszMzMsNyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6c2V0
QW5pbWF0aW5nKGJvb2wgYW5pbWF0aW5nKQogICAgIGlmICghbV90cmFuc2l0aW9ucy5pc0VtcHR5
KCkpIHsKICAgICAgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3Ig
dHJhbnNpdGlvbnNFbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOwogICAgICAgICBmb3IgKENTU1By
b3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5i
ZWdpbigpOyBpdCAhPSB0cmFuc2l0aW9uc0VuZDsgKytpdCkgewotICAgICAgICAgICAgSW1wbGlj
aXRBbmltYXRpb24qIHRyYW5zaXRpb24gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAg
SW1wbGljaXRBbmltYXRpb24qIHRyYW5zaXRpb24gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAg
ICAgICB0cmFuc2l0aW9uLT5zZXRBbmltYXRpbmcoYW5pbWF0aW5nKTsKICAgICAgICAgfQogICAg
IH0KQEAgLTM0MSw3ICszNDEsNyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6c2V0QW5pbWF0
aW5nKGJvb2wgYW5pbWF0aW5nKQogICAgICAgICBtX2tleWZyYW1lQW5pbWF0aW9ucy5jaGVja0Nv
bnNpc3RlbmN5KCk7CiAgICAgICAgIEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGFu
aW1hdGlvbnNFbmQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5lbmQoKTsKICAgICAgICAgZm9yIChB
bmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVBbmltYXRpb25z
LmJlZ2luKCk7IGl0ICE9IGFuaW1hdGlvbnNFbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIEtleWZy
YW1lQW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgIEtleWZy
YW1lQW5pbWF0aW9uKiBhbmltID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAgICAgYW5pbS0+
c2V0QW5pbWF0aW5nKGFuaW1hdGluZyk7CiAgICAgICAgIH0KICAgICB9CkBAIC0zNTYsNyArMzU2
LDcgQEAgZG91YmxlIENvbXBvc2l0ZUFuaW1hdGlvbjo6dGltZVRvTmV4dFNlcnZpY2UoKSBjb25z
dAogICAgIGlmICghbV90cmFuc2l0aW9ucy5pc0VtcHR5KCkpIHsKICAgICAgICAgQ1NTUHJvcGVy
dHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgdHJhbnNpdGlvbnNFbmQgPSBtX3RyYW5z
aXRpb25zLmVuZCgpOwogICAgICAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSB0cmFuc2l0aW9u
c0VuZDsgKytpdCkgewotICAgICAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIHRyYW5zaXRpb24g
PSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIHRyYW5z
aXRpb24gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBkb3VibGUgdCA9IHRyYW5zaXRp
b24gPyB0cmFuc2l0aW9uLT50aW1lVG9OZXh0U2VydmljZSgpIDogLTE7CiAgICAgICAgICAgICBp
ZiAodCA8IG1pblQgfHwgbWluVCA9PSAtMSkKICAgICAgICAgICAgICAgICBtaW5UID0gdDsKQEAg
LTM2OCw3ICszNjgsNyBAQCBkb3VibGUgQ29tcG9zaXRlQW5pbWF0aW9uOjp0aW1lVG9OZXh0U2Vy
dmljZSgpIGNvbnN0CiAgICAgICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zLmNoZWNrQ29uc2lzdGVu
Y3koKTsKICAgICAgICAgQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9u
c0VuZCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmVuZCgpOwogICAgICAgICBmb3IgKEFuaW1hdGlv
bk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVnaW4o
KTsgaXQgIT0gYW5pbWF0aW9uc0VuZDsgKytpdCkgewotICAgICAgICAgICAgS2V5ZnJhbWVBbmlt
YXRpb24qIGFuaW1hdGlvbiA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBLZXlmcmFt
ZUFuaW1hdGlvbiogYW5pbWF0aW9uID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAgICAgZG91
YmxlIHQgPSBhbmltYXRpb24gPyBhbmltYXRpb24tPnRpbWVUb05leHRTZXJ2aWNlKCkgOiAtMTsK
ICAgICAgICAgICAgIGlmICh0IDwgbWluVCB8fCBtaW5UID09IC0xKQogICAgICAgICAgICAgICAg
IG1pblQgPSB0OwpAQCAtMzkwLDcgKzM5MCw3IEBAIFBhc3NSZWZQdHI8S2V5ZnJhbWVBbmltYXRp
b24+IENvbXBvc2l0ZUFuaW1hdGlvbjo6Z2V0QW5pbWF0aW9uRm9yUHJvcGVydHkoQ1NTUHJvCiAg
ICAgICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsKICAgICAgICAg
QW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fa2V5ZnJh
bWVBbmltYXRpb25zLmVuZCgpOwogICAgICAgICBmb3IgKEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gYW5pbWF0
aW9uc0VuZDsgKytpdCkgewotICAgICAgICAgICAgUmVmUHRyPEtleWZyYW1lQW5pbWF0aW9uPiBh
bmltID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIFJlZlB0cjxLZXlmcmFtZUFuaW1hdGlvbj4g
YW5pbSA9IGl0LT52YWx1ZTsKICAgICAgICAgICAgIGlmIChhbmltLT5oYXNBbmltYXRpb25Gb3JQ
cm9wZXJ0eShwcm9wZXJ0eSkpCiAgICAgICAgICAgICAgICAgcmV0dmFsID0gYW5pbTsKICAgICAg
ICAgfQpAQCAtNDEwLDE0ICs0MTAsMTQgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnN1c3Bl
bmRBbmltYXRpb25zKCkKICAgICAgICAgbV9rZXlmcmFtZUFuaW1hdGlvbnMuY2hlY2tDb25zaXN0
ZW5jeSgpOwogICAgICAgICBBbmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBhbmltYXRp
b25zRW5kID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuZW5kKCk7CiAgICAgICAgIGZvciAoQW5pbWF0
aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5iZWdp
bigpOyBpdCAhPSBhbmltYXRpb25zRW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAoS2V5ZnJh
bWVBbmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kLmdldCgpKQorICAgICAgICAgICAgaWYgKEtl
eWZyYW1lQW5pbWF0aW9uKiBhbmltID0gaXQtPnZhbHVlLmdldCgpKQogICAgICAgICAgICAgICAg
IGFuaW0tPnVwZGF0ZVBsYXlTdGF0ZShBbmltUGxheVN0YXRlUGF1c2VkKTsKICAgICAgICAgfQog
ICAgIH0KICAgICBpZiAoIW1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSB7CiAgICAgICAgIENTU1By
b3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIHRyYW5zaXRpb25zRW5kID0gbV90
cmFuc2l0aW9ucy5lbmQoKTsKICAgICAgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gdHJhbnNp
dGlvbnNFbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0g
aXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0g
aXQtPnZhbHVlLmdldCgpOwogICAgICAgICAgICAgaWYgKGFuaW0gJiYgYW5pbS0+aGFzU3R5bGUo
KSkKICAgICAgICAgICAgICAgICBhbmltLT51cGRhdGVQbGF5U3RhdGUoQW5pbVBsYXlTdGF0ZVBh
dXNlZCk7CiAgICAgICAgIH0KQEAgLTQzNSw3ICs0MzUsNyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1h
dGlvbjo6cmVzdW1lQW5pbWF0aW9ucygpCiAgICAgICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zLmNo
ZWNrQ29uc2lzdGVuY3koKTsKICAgICAgICAgQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0
b3IgYW5pbWF0aW9uc0VuZCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmVuZCgpOwogICAgICAgICBm
b3IgKEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1h
dGlvbnMuYmVnaW4oKTsgaXQgIT0gYW5pbWF0aW9uc0VuZDsgKytpdCkgewotICAgICAgICAgICAg
S2V5ZnJhbWVBbmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAg
S2V5ZnJhbWVBbmltYXRpb24qIGFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBp
ZiAoYW5pbSAmJiBhbmltLT5wbGF5U3RhdGVQbGF5aW5nKCkpCiAgICAgICAgICAgICAgICAgYW5p
bS0+dXBkYXRlUGxheVN0YXRlKEFuaW1QbGF5U3RhdGVQbGF5aW5nKTsKICAgICAgICAgfQpAQCAt
NDQ0LDcgKzQ0NCw3IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpyZXN1bWVBbmltYXRpb25z
KCkKICAgICBpZiAoIW1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSB7CiAgICAgICAgIENTU1Byb3Bl
cnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIHRyYW5zaXRpb25zRW5kID0gbV90cmFu
c2l0aW9ucy5lbmQoKTsKICAgICAgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gdHJhbnNpdGlv
bnNFbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQt
PnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQt
PnZhbHVlLmdldCgpOwogICAgICAgICAgICAgaWYgKGFuaW0gJiYgYW5pbS0+aGFzU3R5bGUoKSkK
ICAgICAgICAgICAgICAgICBhbmltLT51cGRhdGVQbGF5U3RhdGUoQW5pbVBsYXlTdGF0ZVBsYXlp
bmcpOwogICAgICAgICB9CkBAIC00NTYsNyArNDU2LDcgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRp
b246Om92ZXJyaWRlSW1wbGljaXRBbmltYXRpb25zKENTU1Byb3BlcnR5SUQgcHJvcGVydHkpCiAg
ICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV90cmFu
c2l0aW9ucy5lbmQoKTsKICAgICBpZiAoIW1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSB7CiAgICAg
ICAgIGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
X3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgSW1w
bGljaXRBbmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgSW1w
bGljaXRBbmltYXRpb24qIGFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBpZiAo
YW5pbSAmJiBhbmltLT5hbmltYXRpbmdQcm9wZXJ0eSgpID09IHByb3BlcnR5KQogICAgICAgICAg
ICAgICAgIGFuaW0tPnNldE92ZXJyaWRkZW4odHJ1ZSk7CiAgICAgICAgIH0KQEAgLTQ2OCw3ICs0
NjgsNyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6cmVzdW1lT3ZlcnJpZGRlbkltcGxpY2l0
QW5pbWF0aW9ucyhDU1NQcm9wZXJ0eUlEIHByb3BlcgogICAgIGlmICghbV90cmFuc2l0aW9ucy5p
c0VtcHR5KCkpIHsKICAgICAgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKICAgICAgICAgZm9yIChDU1NQcm9wZXJ0
eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5p
bSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5p
bSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGlmIChhbmltICYmIGFuaW0tPmFuaW1h
dGluZ1Byb3BlcnR5KCkgPT0gcHJvcGVydHkpCiAgICAgICAgICAgICAgICAgYW5pbS0+c2V0T3Zl
cnJpZGRlbihmYWxzZSk7CiAgICAgICAgIH0KQEAgLTQ4MSw3ICs0ODEsNyBAQCBib29sIENvbXBv
c2l0ZUFuaW1hdGlvbjo6aXNBbmltYXRpbmdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5
LCBib29sIGFjY2VsZQogICAgICAgICBtX2tleWZyYW1lQW5pbWF0aW9ucy5jaGVja0NvbnNpc3Rl
bmN5KCk7CiAgICAgICAgIEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGFuaW1hdGlv
bnNFbmQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5lbmQoKTsKICAgICAgICAgZm9yIChBbmltYXRp
b25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmJlZ2lu
KCk7IGl0ICE9IGFuaW1hdGlvbnNFbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIEtleWZyYW1lQW5p
bWF0aW9uKiBhbmltID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgIEtleWZyYW1lQW5p
bWF0aW9uKiBhbmltID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAgICAgaWYgKGFuaW0gJiYg
YW5pbS0+aXNBbmltYXRpbmdQcm9wZXJ0eShwcm9wZXJ0eSwgYWNjZWxlcmF0ZWRPbmx5LCBpc1J1
bm5pbmdOb3cpKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC00
OTAsNyArNDkwLDcgQEAgYm9vbCBDb21wb3NpdGVBbmltYXRpb246OmlzQW5pbWF0aW5nUHJvcGVy
dHkoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgYm9vbCBhY2NlbGUKICAgICBpZiAoIW1fdHJhbnNp
dGlvbnMuaXNFbXB0eSgpKSB7CiAgICAgICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNv
bnN0X2l0ZXJhdG9yIHRyYW5zaXRpb25zRW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKICAgICAg
ICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1f
dHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gdHJhbnNpdGlvbnNFbmQ7ICsraXQpIHsKLSAgICAg
ICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAg
ICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAg
ICAgICAgaWYgKGFuaW0gJiYgYW5pbS0+aXNBbmltYXRpbmdQcm9wZXJ0eShwcm9wZXJ0eSwgYWNj
ZWxlcmF0ZWRPbmx5LCBpc1J1bm5pbmdOb3cpKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICB9CkBAIC01NTYsNyArNTU2LDcgQEAgdW5zaWduZWQgQ29tcG9zaXRlQW5pbWF0
aW9uOjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoKSBjb25zdAogICAgICAgICBtX2tleWZyYW1l
QW5pbWF0aW9ucy5jaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgICAgIEFuaW1hdGlvbk5hbWVNYXA6
OmNvbnN0X2l0ZXJhdG9yIGFuaW1hdGlvbnNFbmQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5lbmQo
KTsKICAgICAgICAgZm9yIChBbmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1f
a2V5ZnJhbWVBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGFuaW1hdGlvbnNFbmQ7ICsraXQpIHsK
LSAgICAgICAgICAgIEtleWZyYW1lQW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZC5nZXQoKTsK
KyAgICAgICAgICAgIEtleWZyYW1lQW5pbWF0aW9uKiBhbmltID0gaXQtPnZhbHVlLmdldCgpOwog
ICAgICAgICAgICAgaWYgKGFuaW0tPnJ1bm5pbmcoKSkKICAgICAgICAgICAgICAgICArK2NvdW50
OwogICAgICAgICB9CkBAIC01NjUsNyArNTY1LDcgQEAgdW5zaWduZWQgQ29tcG9zaXRlQW5pbWF0
aW9uOjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoKSBjb25zdAogICAgIGlmICghbV90cmFuc2l0
aW9ucy5pc0VtcHR5KCkpIHsKICAgICAgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29u
c3RfaXRlcmF0b3IgdHJhbnNpdGlvbnNFbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOwogICAgICAg
ICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90
cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSB0cmFuc2l0aW9uc0VuZDsgKytpdCkgewotICAgICAg
ICAgICAgSW1wbGljaXRBbmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAg
ICAgICAgSW1wbGljaXRBbmltYXRpb24qIGFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAg
ICAgICBpZiAoYW5pbS0+cnVubmluZygpKQogICAgICAgICAgICAgICAgICsrY291bnQ7CiAgICAg
ICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xhbmd1YWdlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xhbmd1YWdlLmNwcAppbmRleCAyYWYyYTIwNmU1NWUx
N2E5MzI1NzhlMDhmMjg1NTI0MjRlOWU0NGZkLi5kYmEzYTg5ZmJiYzEzN2M1OGZjY2FlOTM4YjRh
ZjFjYTQ4ZTFkNmNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MYW5ndWFn
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGFuZ3VhZ2UuY3BwCkBAIC01Myw3
ICs1Myw3IEBAIHZvaWQgbGFuZ3VhZ2VEaWRDaGFuZ2UoKQogewogICAgIE9ic2VydmVyTWFwOjpp
dGVyYXRvciBlbmQgPSBvYnNlcnZlck1hcCgpLmVuZCgpOwogICAgIGZvciAoT2JzZXJ2ZXJNYXA6
Oml0ZXJhdG9yIGl0ZXIgPSBvYnNlcnZlck1hcCgpLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0
ZXIpCi0gICAgICAgIGl0ZXItPnNlY29uZChpdGVyLT5maXJzdCk7CisgICAgICAgIGl0ZXItPnZh
bHVlKGl0ZXItPmtleSk7CiB9CiAKIFN0cmluZyBkZWZhdWx0TGFuZ3VhZ2UoKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmNwcAppbmRleCAwNjI2MTcwZTBjMmEx
NTBjN2RmN2U0NGFhOGE3ODQ4OGI5MmUzNjM5Li4zNThhMWNlY2EyYjBjNDI1ZjczYzFhMmQ3MzIy
ZDk3ODNmMGNkZjU2IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NSU1FVHlw
ZVJlZ2lzdHJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NSU1FVHlwZVJlZ2lz
dHJ5LmNwcApAQCAtNjkzLDcgKzY5Myw3IEBAIFN0cmluZyBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRO
b3JtYWxpemVkTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKICAgICBNSU1FVHlwZUFz
c29jaWF0aW9uTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1pbWVUeXBlQXNzb2NpYXRpb25NYXAo
KS5maW5kKG1pbWVUeXBlKTsKIAogICAgIGlmIChpdCAhPSBtaW1lVHlwZUFzc29jaWF0aW9uTWFw
KCkuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gaXQt
PnZhbHVlOwogI2VuZGlmCiAgICAgcmV0dXJuIG1pbWVUeXBlOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vSFJURkVsZXZhdGlvbi5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9IUlRGRWxldmF0aW9uLmNwcAppbmRleCAyNWU0NTg5NjI1ZGNj
ZmQ3ZjRkM2I1NGFmNzUzMmQ4ZTgzZjI2Mjc4Li5jZmUxM2VkODUzMDZiNTE3MTJhYTMwNzRiOWM4
ZGMzOTJjZDQ2NTJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9I
UlRGRWxldmF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9IUlRG
RWxldmF0aW9uLmNwcApAQCAtNzksNyArNzksNyBAQCBzdGF0aWMgQXVkaW9CdXMqIGdldENvbmNh
dGVuYXRlZEltcHVsc2VSZXNwb25zZXNGb3JTdWJqZWN0KGNvbnN0IFN0cmluZyYgc3ViamVjdAog
ICAgICAgICBidXMgPSBjb25jYXRlbmF0ZWRJbXB1bHNlUmVzcG9uc2VzLmxlYWtQdHIoKTsKICAg
ICAgICAgYXVkaW9CdXNNYXAuc2V0KHN1YmplY3ROYW1lLCBidXMpOwogICAgIH0gZWxzZQotICAg
ICAgICBidXMgPSBpdGVyYXRvci0+c2Vjb25kOworICAgICAgICBidXMgPSBpdGVyYXRvci0+dmFs
dWU7CiAKICAgICBzaXplX3QgcmVzcG9uc2VMZW5ndGggPSBidXMtPmxlbmd0aCgpOwogICAgIHNp
emVfdCBleHBlY3RlZExlbmd0aCA9IHN0YXRpY19jYXN0PHNpemVfdD4oVG90YWxOdW1iZXJPZlJl
c3BvbnNlcyAqIFJlc3BvbnNlRnJhbWVTaXplKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2JsYWNrYmVycnkvQ29va2llTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ibGFja2JlcnJ5L0Nvb2tpZU1hbmFnZXIuY3BwCmluZGV4IDA5MWQ3NTMxZWRkOWE2
NTdhZTcxMjVjYzlkNTZhNDhjZGMzZDA3NmQuLmY1OTRlYTY1MjcyZjQ0MDc4ZDg4NDc0MTUxMzVl
MWRkNTc3N2U2YTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVy
cnkvQ29va2llTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2ti
ZXJyeS9Db29raWVNYW5hZ2VyLmNwcApAQCAtMTY4LDcgKzE2OCw3IEBAIFN0cmluZyBDb29raWVN
YW5hZ2VyOjpnZW5lcmF0ZUh0bWxGcmFnbWVudEZvckNvb2tpZXMoKQogCiAgICAgVmVjdG9yPFBh
cnNlZENvb2tpZSo+IGNvb2tpZUNhbmRpZGF0ZXM7CiAgICAgZm9yIChIYXNoTWFwPFN0cmluZywg
Q29va2llTWFwKj46Oml0ZXJhdG9yIGl0ID0gbV9tYW5hZ2VyTWFwLmJlZ2luKCk7IGl0ICE9IG1f
bWFuYWdlck1hcC5lbmQoKTsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+Z2V0QWxsQ2hpbGRD
b29raWVzKCZjb29raWVDYW5kaWRhdGVzKTsKKyAgICAgICAgaXQtPnZhbHVlLT5nZXRBbGxDaGls
ZENvb2tpZXMoJmNvb2tpZUNhbmRpZGF0ZXMpOwogCiAgICAgU3RyaW5nIHJlc3VsdDsKICAgICBQ
YXJzZWRDb29raWUqIGNvb2tpZSA9IDA7CkBAIC0zMDYsNyArMzA2LDcgQEAgdm9pZCBDb29raWVN
YW5hZ2VyOjpyZW1vdmVBbGxDb29raWVzKEJhY2tpbmdTdG9yZVJlbW92YWxQb2xpY3kgYmFja2lu
Z1N0b3JlUmVtb3YKICAgICBIYXNoTWFwPFN0cmluZywgQ29va2llTWFwKj46Oml0ZXJhdG9yIGZp
cnN0ID0gbV9tYW5hZ2VyTWFwLmJlZ2luKCk7CiAgICAgSGFzaE1hcDxTdHJpbmcsIENvb2tpZU1h
cCo+OjppdGVyYXRvciBlbmQgPSBtX21hbmFnZXJNYXAuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFw
PFN0cmluZywgQ29va2llTWFwKj46Oml0ZXJhdG9yIGl0ID0gZmlyc3Q7IGl0ICE9IGVuZDsgKytp
dCkKLSAgICAgICAgaXQtPnNlY29uZC0+ZGVsZXRlQWxsQ29va2llc0FuZERvbWFpbnMoKTsKKyAg
ICAgICAgaXQtPnZhbHVlLT5kZWxldGVBbGxDb29raWVzQW5kRG9tYWlucygpOwogCiAgICAgaWYg
KGJhY2tpbmdTdG9yZVJlbW92YWwgPT0gUmVtb3ZlRnJvbUJhY2tpbmdTdG9yZSkKICAgICAgICAg
bV9jb29raWVCYWNraW5nU3RvcmUtPnJlbW92ZUFsbCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9Db29raWVNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYmxhY2tiZXJyeS9Db29raWVNYXAuY3BwCmluZGV4IGJiZTlhN2NlZGY3M2Y3MGQ1
MGM0ZGQwNzI0ZjRhNWQ2YTAxNWM3YTguLmFmNDg1YjU0YzIwZWNjZmNhMGFhNGQ5OTVmYjcyMGE0
NTM0ZDc4YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkv
Q29va2llTWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0Nv
b2tpZU1hcC5jcHAKQEAgLTE3Miw3ICsxNzIsNyBAQCBQYXJzZWRDb29raWUqIENvb2tpZU1hcDo6
cmVtb3ZlT2xkZXN0Q29va2llKCkKICAgICAgICAgQ29va2llTG9nKCJDb29raWVNYXAgLSBsb29r
aW5nIGludG8gc3ViZG9tYWlucyIpOwogCiAgICAgICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIENv
b2tpZU1hcCo+OjppdGVyYXRvciBpdCA9IG1fc3ViZG9tYWlucy5iZWdpbigpOyBpdCAhPSBtX3N1
YmRvbWFpbnMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgICAgIG9sZGVzdENvb2tpZSA9IGl0LT5z
ZWNvbmQtPnJlbW92ZU9sZGVzdENvb2tpZSgpOworICAgICAgICAgICAgb2xkZXN0Q29va2llID0g
aXQtPnZhbHVlLT5yZW1vdmVPbGRlc3RDb29raWUoKTsKICAgICAgICAgICAgIGlmIChvbGRlc3RD
b29raWUpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTIxNCw3ICsyMTQs
NyBAQCB2b2lkIENvb2tpZU1hcDo6Z2V0QWxsQ2hpbGRDb29raWVzKFZlY3RvcjxQYXJzZWRDb29r
aWUqPiogc3RhY2tPZkNvb2tpZXMpCiAgICAgQ29va2llTG9nKCJDb29raWVNYXAgLSBnZXRBbGxD
aGlsZENvb2tpZXMgaW4gTWFwIC0gJXMiLCBnZXROYW1lKCkudXRmOCgpLmRhdGEoKSk7CiAgICAg
Z2V0QWxsQ29va2llcyhzdGFja09mQ29va2llcyk7CiAgICAgZm9yIChIYXNoTWFwPFN0cmluZywg
Q29va2llTWFwKj46Oml0ZXJhdG9yIGl0ID0gbV9zdWJkb21haW5zLmJlZ2luKCk7IGl0ICE9IG1f
c3ViZG9tYWlucy5lbmQoKTsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+Z2V0QWxsQ2hpbGRD
b29raWVzKHN0YWNrT2ZDb29raWVzKTsKKyAgICAgICAgaXQtPnZhbHVlLT5nZXRBbGxDaGlsZENv
b2tpZXMoc3RhY2tPZkNvb2tpZXMpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9CaW5hcnlQcm9wZXJ0eUxpc3QuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2YvQmluYXJ5UHJvcGVydHlMaXN0LmNwcAppbmRl
eCBiZWMyZWM5NTA2NDRjOTkzYmU4OWFiMzVlMGI4NjdhOGI2MTI2MDg4Li5iMjdkN2Q3Y2QzYzE0
Mzg2MGVjNjU4YmVlYjJkNmU3NzJlOTQyYzUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jZi9CaW5hcnlQcm9wZXJ0eUxpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2NmL0JpbmFyeVByb3BlcnR5TGlzdC5jcHAKQEAgLTIyOSw3ICsyMjksNyBAQCB2b2lk
IEJpbmFyeVByb3BlcnR5TGlzdFBsYW46OndyaXRlSW50ZWdlckFycmF5KGNvbnN0IGludCogaW50
ZWdlcnMsIHNpemVfdCBzaXplKQogICAgICAgICByZXR1cm47CiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBzaXplOyArK2kpCiAgICAgICAgIHdyaXRlSW50ZWdlcihpbnRlZ2Vyc1tpXSk7Ci0g
ICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBtX2N1cnJlbnRPYmplY3RSZWZlcmVuY2Ur
KzsKKyAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gbV9jdXJyZW50T2JqZWN0UmVmZXJl
bmNlKys7CiAgICAgd3JpdGVBcnJheU9iamVjdChzaXplKTsKICAgICBtX2N1cnJlbnRBZ2dyZWdh
dGVTaXplID0gc2F2ZWRBZ2dyZWdhdGVTaXplOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJIVFRQTG9hZEluZm8uY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJIVFRQTG9hZEluZm8uY3BwCmlu
ZGV4IDMzZWFjZTFkMmRmMjExYjc2OTUyYjY3NGYwYjk1NzBjOTM0ZTdjYzYuLjVjZDcyNjAxMTBk
NjI3ZjdiYTg0NmQzZDQ3NTZhODJiZGE2ZWM5MzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViSFRUUExvYWRJbmZvLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYkhUVFBMb2FkSW5mby5jcHAK
QEAgLTEwNiw3ICsxMDYsNyBAQCBzdGF0aWMgdm9pZCBhZGRIZWFkZXIoSFRUUEhlYWRlck1hcCog
bWFwLCBjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYlN0cmluZwogICAgIEhUVFBIZWFk
ZXJNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtYXAtPmFkZChuYW1lLCB2YWx1ZSk7CiAgICAgLy8g
SXQgaXMgaW1wb3J0YW50IHRoYXQgdmFsdWVzIGFyZSBzZXBhcmF0ZWQgYnkgJ1xuJywgbm90IGNv
bW1hLCBvdGhlcndpc2UgU2V0LUNvb2tpZSBoZWFkZXIgaXMgbm90IHBhcnNlYWJsZS4KICAgICBp
ZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZC5h
cHBlbmQoIlxuIiArIFN0cmluZyh2YWx1ZSkpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZh
bHVlLmFwcGVuZCgiXG4iICsgU3RyaW5nKHZhbHVlKSk7CiB9CiAKIHZvaWQgV2ViSFRUUExvYWRJ
bmZvOjphZGRSZXF1ZXN0SGVhZGVyKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgY29uc3QgV2ViU3Ry
aW5nJiB2YWx1ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVt
L3N1cHBvcnQvV2ViVVJMUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9zdXBwb3J0L1dlYlVSTFJlcXVlc3QuY3BwCmluZGV4IGY0MzdiNTE2NDNiMjM0YjYwOWY3
NzI1ZmI4ZDc2ZDczMWY1NjE3ZWEuLmUzODUxMDE0ZmNkZDQ1YmZhY2I0OGI5N2JiYTc2ZTMxZDhi
NGEwMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBv
cnQvV2ViVVJMUmVxdWVzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vc3VwcG9ydC9XZWJVUkxSZXF1ZXN0LmNwcApAQCAtMTk1LDcgKzE5NSw3IEBAIHZvaWQgV2Vi
VVJMUmVxdWVzdDo6dmlzaXRIVFRQSGVhZGVyRmllbGRzKFdlYkhUVFBIZWFkZXJWaXNpdG9yKiB2
aXNpdG9yKSBjb25zdAogewogICAgIGNvbnN0IEhUVFBIZWFkZXJNYXAmIG1hcCA9IG1fcHJpdmF0
ZS0+bV9yZXNvdXJjZVJlcXVlc3QtPmh0dHBIZWFkZXJGaWVsZHMoKTsKICAgICBmb3IgKEhUVFBI
ZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLmJlZ2luKCk7IGl0ICE9IG1hcC5lbmQo
KTsgKytpdCkKLSAgICAgICAgdmlzaXRvci0+dmlzaXRIZWFkZXIoaXQtPmZpcnN0LCBpdC0+c2Vj
b25kKTsKKyAgICAgICAgdmlzaXRvci0+dmlzaXRIZWFkZXIoaXQtPmtleSwgaXQtPnZhbHVlKTsK
IH0KIAogV2ViSFRUUEJvZHkgV2ViVVJMUmVxdWVzdDo6aHR0cEJvZHkoKSBjb25zdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJVUkxSZXNw
b25zZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlVS
TFJlc3BvbnNlLmNwcAppbmRleCA5ZGUzYzAxYTBjYTlkNDM4ZGEwYWFhMGM2ODkzM2RlOGYwYjcy
OTEyLi4yODc1OTc4YzhkMThlMDQxMzJkNTVkMmNkMGYwMDkzYTBiNmUwY2EzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlVSTFJlc3BvbnNl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlVS
TFJlc3BvbnNlLmNwcApAQCAtMjYxLDcgKzI2MSw3IEBAIHZvaWQgV2ViVVJMUmVzcG9uc2U6OmFk
ZEhUVFBIZWFkZXJGaWVsZChjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYlN0cmluZyYK
ICAgICBIVFRQSGVhZGVyTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0KICAgICAgICAgY29uc3RfY2Fz
dDxIVFRQSGVhZGVyTWFwKj4oJm1hcCktPmFkZChuYW1lLCB2YWx1ZVN0cik7CiAgICAgaWYgKCFy
ZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQuYXBwZW5k
KCIsICIgKyB2YWx1ZVN0cik7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYXBwZW5k
KCIsICIgKyB2YWx1ZVN0cik7CiB9CiAKIHZvaWQgV2ViVVJMUmVzcG9uc2U6OmNsZWFySFRUUEhl
YWRlckZpZWxkKGNvbnN0IFdlYlN0cmluZyYgbmFtZSkKQEAgLTI3NSw3ICsyNzUsNyBAQCB2b2lk
IFdlYlVSTFJlc3BvbnNlOjp2aXNpdEhUVFBIZWFkZXJGaWVsZHMoV2ViSFRUUEhlYWRlclZpc2l0
b3IqIHZpc2l0b3IpIGNvbnN0CiB7CiAgICAgY29uc3QgSFRUUEhlYWRlck1hcCYgbWFwID0gbV9w
cml2YXRlLT5tX3Jlc291cmNlUmVzcG9uc2UtPmh0dHBIZWFkZXJGaWVsZHMoKTsKICAgICBmb3Ig
KEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLmJlZ2luKCk7IGl0ICE9IG1h
cC5lbmQoKTsgKytpdCkKLSAgICAgICAgdmlzaXRvci0+dmlzaXRIZWFkZXIoaXQtPmZpcnN0LCBp
dC0+c2Vjb25kKTsKKyAgICAgICAgdmlzaXRvci0+dmlzaXRIZWFkZXIoaXQtPmtleSwgaXQtPnZh
bHVlKTsKIH0KIAogZG91YmxlIFdlYlVSTFJlc3BvbnNlOjpsYXN0TW9kaWZpZWREYXRlKCkgY29u
c3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlS
ZWZyZXNoTW9uaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EaXNw
bGF5UmVmcmVzaE1vbml0b3IuY3BwCmluZGV4IDMwZDhkM2Q0MWUyMmJkZGExMDc2NGQ4ZjZhMWVm
NDAzM2E2MjlkYWEuLmY4OTEwM2Y5YmUyYjVlZWRkMDdmYTc0MTFmZTI3OTFhNjIxODFlZTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNo
TW9uaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxh
eVJlZnJlc2hNb25pdG9yLmNwcApAQCAtMTM3LDcgKzEzNyw3IEBAIERpc3BsYXlSZWZyZXNoTW9u
aXRvciogRGlzcGxheVJlZnJlc2hNb25pdG9yTWFuYWdlcjo6ZW5zdXJlTW9uaXRvckZvckNsaWVu
dChEaXNwCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgcmV0dXJuIGl0LT5z
ZWNvbmQuZ2V0KCk7CisgICAgcmV0dXJuIGl0LT52YWx1ZS5nZXQoKTsKIH0KIAogdm9pZCBEaXNw
bGF5UmVmcmVzaE1vbml0b3JNYW5hZ2VyOjpyZWdpc3RlckNsaWVudChEaXNwbGF5UmVmcmVzaE1v
bml0b3JDbGllbnQqIGNsaWVudCkKQEAgLTE1Nyw3ICsxNTcsNyBAQCB2b2lkIERpc3BsYXlSZWZy
ZXNoTW9uaXRvck1hbmFnZXI6OnVucmVnaXN0ZXJDbGllbnQoRGlzcGxheVJlZnJlc2hNb25pdG9y
Q2xpZW50KgogICAgIGlmIChpdCA9PSBtX21vbml0b3JzLmVuZCgpKQogICAgICAgICByZXR1cm47
CiAgICAgCi0gICAgRGlzcGxheVJlZnJlc2hNb25pdG9yKiBtb25pdG9yID0gaXQtPnNlY29uZC5n
ZXQoKTsKKyAgICBEaXNwbGF5UmVmcmVzaE1vbml0b3IqIG1vbml0b3IgPSBpdC0+dmFsdWUuZ2V0
KCk7CiAgICAgaWYgKG1vbml0b3ItPnJlbW92ZUNsaWVudChjbGllbnQpKSB7CiAgICAgICAgIGlm
ICghbW9uaXRvci0+aGFzQ2xpZW50cygpKQogICAgICAgICAgICAgbV9tb25pdG9ycy5yZW1vdmUo
aXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
Y2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAK
aW5kZXggYjQ2MjYzYTk2NjMyMzlkMmZjZmFkOGJiYmYzMjljZDU3ZDI2YjRlZC4uMjE4ZGUyZjE0
N2U5MzFiNTFmMGE2OWJiNjk5MTZlMWFlNDhkZTY4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCkBAIC0yMTEsNyArMjExLDcgQEAgRm9udFBs
YXRmb3JtRGF0YSogRm9udENhY2hlOjpnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZm8KICAgICAgICAgZ0ZvbnRQbGF0Zm9ybURhdGFDYWNoZS0+c2V0KGtl
eSwgcmVzdWx0KTsKICAgICAgICAgZm91bmRSZXN1bHQgPSByZXN1bHQ7CiAgICAgfSBlbHNlIHsK
LSAgICAgICAgcmVzdWx0ID0gaXQtPnNlY29uZDsKKyAgICAgICAgcmVzdWx0ID0gaXQtPnZhbHVl
OwogICAgICAgICBmb3VuZFJlc3VsdCA9IHRydWU7CiAgICAgfQogCkBAIC0yNDIsNyArMjQyLDcg
QEAgT3BlblR5cGVWZXJ0aWNhbERhdGEqIEZvbnRDYWNoZTo6Z2V0VmVydGljYWxEYXRhKGNvbnN0
IEZvbnRGaWxlS2V5JiBrZXksIGNvbnN0IEYKICAgICBGb250VmVydGljYWxEYXRhQ2FjaGUmIGZv
bnRWZXJ0aWNhbERhdGFDYWNoZSA9IGZvbnRWZXJ0aWNhbERhdGFDYWNoZUluc3RhbmNlKCk7CiAg
ICAgRm9udFZlcnRpY2FsRGF0YUNhY2hlOjppdGVyYXRvciByZXN1bHQgPSBmb250VmVydGljYWxE
YXRhQ2FjaGUuZmluZChrZXkpOwogICAgIGlmIChyZXN1bHQgIT0gZm9udFZlcnRpY2FsRGF0YUNh
Y2hlLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LmdldCgpLT5zZWNvbmQuZ2V0KCk7Cisg
ICAgICAgIHJldHVybiByZXN1bHQuZ2V0KCktPnZhbHVlLmdldCgpOwogCiAgICAgT3BlblR5cGVW
ZXJ0aWNhbERhdGEqIHZlcnRpY2FsRGF0YSA9IG5ldyBPcGVuVHlwZVZlcnRpY2FsRGF0YShwbGF0
Zm9ybURhdGEpOwogICAgIGlmICghdmVydGljYWxEYXRhLT5pc09wZW5UeXBlKCkpIHsKQEAgLTMz
MiwyMCArMzMyLDIwIEBAIFNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldENhY2hlZEZvbnRE
YXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEqIHBsYXRmb3JtRGF0CiAgICAgICAgIHJldHVybiBu
ZXdWYWx1ZS5maXJzdDsKICAgICB9CiAKLSAgICBpZiAoIXJlc3VsdC5nZXQoKS0+c2Vjb25kLnNl
Y29uZCkgewotICAgICAgICBBU1NFUlQoZ0luYWN0aXZlRm9udERhdGEtPmNvbnRhaW5zKHJlc3Vs
dC5nZXQoKS0+c2Vjb25kLmZpcnN0KSk7Ci0gICAgICAgIGdJbmFjdGl2ZUZvbnREYXRhLT5yZW1v
dmUocmVzdWx0LmdldCgpLT5zZWNvbmQuZmlyc3QpOworICAgIGlmICghcmVzdWx0LmdldCgpLT52
YWx1ZS5zZWNvbmQpIHsKKyAgICAgICAgQVNTRVJUKGdJbmFjdGl2ZUZvbnREYXRhLT5jb250YWlu
cyhyZXN1bHQuZ2V0KCktPnZhbHVlLmZpcnN0KSk7CisgICAgICAgIGdJbmFjdGl2ZUZvbnREYXRh
LT5yZW1vdmUocmVzdWx0LmdldCgpLT52YWx1ZS5maXJzdCk7CiAgICAgfQogCiAgICAgaWYgKHNo
b3VsZFJldGFpbiA9PSBSZXRhaW4pCi0gICAgICAgIHJlc3VsdC5nZXQoKS0+c2Vjb25kLnNlY29u
ZCsrOwotICAgIGVsc2UgaWYgKCFyZXN1bHQuZ2V0KCktPnNlY29uZC5zZWNvbmQpIHsKKyAgICAg
ICAgcmVzdWx0LmdldCgpLT52YWx1ZS5zZWNvbmQrKzsKKyAgICBlbHNlIGlmICghcmVzdWx0Lmdl
dCgpLT52YWx1ZS5zZWNvbmQpIHsKICAgICAgICAgLy8gSWYgc2hvdWxkUmV0YWluIGlzIERvTm90
UmV0YWluIGFuZCBjb3VudCBpcyAwLCB3ZSB3YW50IHRvIHJlbW92ZSB0aGUgZm9udERhdGEgZnJv
bSAKICAgICAgICAgLy8gZ0luYWN0aXZlRm9udERhdGEgKGFib3ZlKSBhbmQgcmUtYWRkIGhlcmUg
dG8gdXBkYXRlIExSVSBwb3NpdGlvbi4KLSAgICAgICAgZ0luYWN0aXZlRm9udERhdGEtPmFkZChy
ZXN1bHQuZ2V0KCktPnNlY29uZC5maXJzdCk7CisgICAgICAgIGdJbmFjdGl2ZUZvbnREYXRhLT5h
ZGQocmVzdWx0LmdldCgpLT52YWx1ZS5maXJzdCk7CiAgICAgfQogCi0gICAgcmV0dXJuIHJlc3Vs
dC5nZXQoKS0+c2Vjb25kLmZpcnN0OworICAgIHJldHVybiByZXN1bHQuZ2V0KCktPnZhbHVlLmZp
cnN0OwogfQogCiBTaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXROb25SZXRhaW5lZExhc3RS
ZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24p
CkBAIC0zNjEsOCArMzYxLDggQEAgdm9pZCBGb250Q2FjaGU6OnJlbGVhc2VGb250RGF0YShjb25z
dCBTaW1wbGVGb250RGF0YSogZm9udERhdGEpCiAgICAgRm9udERhdGFDYWNoZTo6aXRlcmF0b3Ig
aXQgPSBnRm9udERhdGFDYWNoZS0+ZmluZChmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkpOwogICAg
IEFTU0VSVChpdCAhPSBnRm9udERhdGFDYWNoZS0+ZW5kKCkpOwogCi0gICAgQVNTRVJUKGl0LT5z
ZWNvbmQuc2Vjb25kKTsKLSAgICBpZiAoIS0taXQtPnNlY29uZC5zZWNvbmQpCisgICAgQVNTRVJU
KGl0LT52YWx1ZS5zZWNvbmQpOworICAgIGlmICghLS1pdC0+dmFsdWUuc2Vjb25kKQogICAgICAg
ICBnSW5hY3RpdmVGb250RGF0YS0+YWRkKGZvbnREYXRhKTsKIH0KIApAQCAtNDEwLDggKzQxMCw4
IEBAIHZvaWQgRm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGEoaW50IGNvdW50KQogICAg
ICAgICBrZXlzVG9SZW1vdmUucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShnRm9udFBsYXRmb3JtRGF0
YUNhY2hlLT5zaXplKCkpOwogICAgICAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGU6Oml0ZXJhdG9y
IHBsYXRmb3JtRGF0YUVuZCA9IGdGb250UGxhdGZvcm1EYXRhQ2FjaGUtPmVuZCgpOwogICAgICAg
ICBmb3IgKEZvbnRQbGF0Zm9ybURhdGFDYWNoZTo6aXRlcmF0b3IgcGxhdGZvcm1EYXRhID0gZ0Zv
bnRQbGF0Zm9ybURhdGFDYWNoZS0+YmVnaW4oKTsgcGxhdGZvcm1EYXRhICE9IHBsYXRmb3JtRGF0
YUVuZDsgKytwbGF0Zm9ybURhdGEpIHsKLSAgICAgICAgICAgIGlmIChwbGF0Zm9ybURhdGEtPnNl
Y29uZCAmJiAhZ0ZvbnREYXRhQ2FjaGUtPmNvbnRhaW5zKCpwbGF0Zm9ybURhdGEtPnNlY29uZCkp
Ci0gICAgICAgICAgICAgICAga2V5c1RvUmVtb3ZlLmFwcGVuZChwbGF0Zm9ybURhdGEtPmZpcnN0
KTsKKyAgICAgICAgICAgIGlmIChwbGF0Zm9ybURhdGEtPnZhbHVlICYmICFnRm9udERhdGFDYWNo
ZS0+Y29udGFpbnMoKnBsYXRmb3JtRGF0YS0+dmFsdWUpKQorICAgICAgICAgICAgICAgIGtleXNU
b1JlbW92ZS5hcHBlbmQocGxhdGZvcm1EYXRhLT5rZXkpOwogICAgICAgICB9CiAgICAgICAgIAog
ICAgICAgICBzaXplX3Qga2V5c1RvUmVtb3ZlQ291bnQgPSBrZXlzVG9SZW1vdmUuc2l6ZSgpOwpA
QCAtNDI1LDIwICs0MjUsMjAgQEAgdm9pZCBGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0
YShpbnQgY291bnQpCiAgICAgICAgIC8vIE1hcmsgJiBzd2VlcCB1bnVzZWQgdmVydGljYWxEYXRh
CiAgICAgICAgIEZvbnRWZXJ0aWNhbERhdGFDYWNoZTo6aXRlcmF0b3IgdmVydGljYWxEYXRhRW5k
ID0gZm9udFZlcnRpY2FsRGF0YUNhY2hlLmVuZCgpOwogICAgICAgICBmb3IgKEZvbnRWZXJ0aWNh
bERhdGFDYWNoZTo6aXRlcmF0b3IgdmVydGljYWxEYXRhID0gZm9udFZlcnRpY2FsRGF0YUNhY2hl
LmJlZ2luKCk7IHZlcnRpY2FsRGF0YSAhPSB2ZXJ0aWNhbERhdGFFbmQ7ICsrdmVydGljYWxEYXRh
KSB7Ci0gICAgICAgICAgICBpZiAodmVydGljYWxEYXRhLT5zZWNvbmQpCi0gICAgICAgICAgICAg
ICAgdmVydGljYWxEYXRhLT5zZWNvbmQtPm1faW5Gb250Q2FjaGUgPSBmYWxzZTsKKyAgICAgICAg
ICAgIGlmICh2ZXJ0aWNhbERhdGEtPnZhbHVlKQorICAgICAgICAgICAgICAgIHZlcnRpY2FsRGF0
YS0+dmFsdWUtPm1faW5Gb250Q2FjaGUgPSBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBGb250
RGF0YUNhY2hlOjppdGVyYXRvciBmb250RGF0YUVuZCA9IGdGb250RGF0YUNhY2hlLT5lbmQoKTsK
ICAgICAgICAgZm9yIChGb250RGF0YUNhY2hlOjppdGVyYXRvciBmb250RGF0YSA9IGdGb250RGF0
YUNhY2hlLT5iZWdpbigpOyBmb250RGF0YSAhPSBmb250RGF0YUVuZDsgKytmb250RGF0YSkgewot
ICAgICAgICAgICAgT3BlblR5cGVWZXJ0aWNhbERhdGEqIHZlcnRpY2FsRGF0YSA9IGNvbnN0X2Nh
c3Q8T3BlblR5cGVWZXJ0aWNhbERhdGEqPihmb250RGF0YS0+c2Vjb25kLmZpcnN0LT52ZXJ0aWNh
bERhdGEoKSk7CisgICAgICAgICAgICBPcGVuVHlwZVZlcnRpY2FsRGF0YSogdmVydGljYWxEYXRh
ID0gY29uc3RfY2FzdDxPcGVuVHlwZVZlcnRpY2FsRGF0YSo+KGZvbnREYXRhLT52YWx1ZS5maXJz
dC0+dmVydGljYWxEYXRhKCkpOwogICAgICAgICAgICAgaWYgKHZlcnRpY2FsRGF0YSkKICAgICAg
ICAgICAgICAgICB2ZXJ0aWNhbERhdGEtPm1faW5Gb250Q2FjaGUgPSB0cnVlOwogICAgICAgICB9
CiAgICAgICAgIFZlY3RvcjxGb250RmlsZUtleT4ga2V5c1RvUmVtb3ZlOwogICAgICAgICBrZXlz
VG9SZW1vdmUucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShmb250VmVydGljYWxEYXRhQ2FjaGUuc2l6
ZSgpKTsKICAgICAgICAgZm9yIChGb250VmVydGljYWxEYXRhQ2FjaGU6Oml0ZXJhdG9yIHZlcnRp
Y2FsRGF0YSA9IGZvbnRWZXJ0aWNhbERhdGFDYWNoZS5iZWdpbigpOyB2ZXJ0aWNhbERhdGEgIT0g
dmVydGljYWxEYXRhRW5kOyArK3ZlcnRpY2FsRGF0YSkgewotICAgICAgICAgICAgaWYgKCF2ZXJ0
aWNhbERhdGEtPnNlY29uZCB8fCAhdmVydGljYWxEYXRhLT5zZWNvbmQtPm1faW5Gb250Q2FjaGUp
Ci0gICAgICAgICAgICAgICAga2V5c1RvUmVtb3ZlLmFwcGVuZCh2ZXJ0aWNhbERhdGEtPmZpcnN0
KTsKKyAgICAgICAgICAgIGlmICghdmVydGljYWxEYXRhLT52YWx1ZSB8fCAhdmVydGljYWxEYXRh
LT52YWx1ZS0+bV9pbkZvbnRDYWNoZSkKKyAgICAgICAgICAgICAgICBrZXlzVG9SZW1vdmUuYXBw
ZW5kKHZlcnRpY2FsRGF0YS0+a2V5KTsKICAgICAgICAgfQogICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMCwgY291bnQgPSBrZXlzVG9SZW1vdmUuc2l6ZSgpOyBpIDwgY291bnQ7ICsraSkKICAgICAg
ICAgICAgIGZvbnRWZXJ0aWNhbERhdGFDYWNoZS50YWtlKGtleXNUb1JlbW92ZVtpXSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2VUcmVlTm9k
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2VUcmVlTm9k
ZS5jcHAKaW5kZXggNzcwY2UxMjJkZDU0NDAxYTcxZjRkMTBiZGFkN2EzZGVkYzA4NGNlOC4uOGUz
NTUxYTRiNmVjNTQ1ZTQyYjgyOWFjZGU3OWU3OWRkNDNhYzU2NiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlVHJlZU5vZGUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZVRyZWVOb2RlLmNwcApAQCAt
NzUsNyArNzUsNyBAQCBzaXplX3QgR2x5cGhQYWdlVHJlZU5vZGU6OnRyZWVHbHlwaFBhZ2VDb3Vu
dCgpCiAgICAgaWYgKHJvb3RzKSB7CiAgICAgICAgIEhhc2hNYXA8aW50LCBHbHlwaFBhZ2VUcmVl
Tm9kZSo+OjppdGVyYXRvciBlbmQgPSByb290cy0+ZW5kKCk7CiAgICAgICAgIGZvciAoSGFzaE1h
cDxpbnQsIEdseXBoUGFnZVRyZWVOb2RlKj46Oml0ZXJhdG9yIGl0ID0gcm9vdHMtPmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIGNvdW50ICs9IGl0LT5zZWNvbmQtPnBhZ2VD
b3VudCgpOworICAgICAgICAgICAgY291bnQgKz0gaXQtPnZhbHVlLT5wYWdlQ291bnQoKTsKICAg
ICB9CiAgICAgCiAgICAgaWYgKHBhZ2VaZXJvUm9vdCkKQEAgLTg5LDcgKzg5LDcgQEAgc2l6ZV90
IEdseXBoUGFnZVRyZWVOb2RlOjpwYWdlQ291bnQoKSBjb25zdAogICAgIHNpemVfdCBjb3VudCA9
IG1fcGFnZSAmJiBtX3BhZ2UtPm93bmVyKCkgPT0gdGhpcyA/IDEgOiAwOwogICAgIEhhc2hNYXA8
Y29uc3QgRm9udERhdGEqLCBHbHlwaFBhZ2VUcmVlTm9kZSo+Ojpjb25zdF9pdGVyYXRvciBlbmQg
PSBtX2NoaWxkcmVuLmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDxjb25zdCBGb250RGF0YSosIEds
eXBoUGFnZVRyZWVOb2RlKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9jaGlsZHJlbi5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGNvdW50ICs9IGl0LT5zZWNvbmQtPnBhZ2VDb3Vu
dCgpOworICAgICAgICBjb3VudCArPSBpdC0+dmFsdWUtPnBhZ2VDb3VudCgpOwogCiAgICAgcmV0
dXJuIGNvdW50OwogfQpAQCAtMTAwLDcgKzEwMCw3IEBAIHZvaWQgR2x5cGhQYWdlVHJlZU5vZGU6
OnBydW5lVHJlZUN1c3RvbUZvbnREYXRhKGNvbnN0IEZvbnREYXRhKiBmb250RGF0YSkKICAgICBp
ZiAocm9vdHMpIHsKICAgICAgICAgSGFzaE1hcDxpbnQsIEdseXBoUGFnZVRyZWVOb2RlKj46Oml0
ZXJhdG9yIGVuZCA9IHJvb3RzLT5lbmQoKTsKICAgICAgICAgZm9yIChIYXNoTWFwPGludCwgR2x5
cGhQYWdlVHJlZU5vZGUqPjo6aXRlcmF0b3IgaXQgPSByb290cy0+YmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KQotICAgICAgICAgICAgaXQtPnNlY29uZC0+cHJ1bmVDdXN0b21Gb250RGF0YShmb250
RGF0YSk7CisgICAgICAgICAgICBpdC0+dmFsdWUtPnBydW5lQ3VzdG9tRm9udERhdGEoZm9udERh
dGEpOwogICAgIH0KICAgICAKICAgICBpZiAocGFnZVplcm9Sb290KQpAQCAtMTEyLDcgKzExMiw3
IEBAIHZvaWQgR2x5cGhQYWdlVHJlZU5vZGU6OnBydW5lVHJlZUZvbnREYXRhKGNvbnN0IFNpbXBs
ZUZvbnREYXRhKiBmb250RGF0YSkKICAgICBpZiAocm9vdHMpIHsKICAgICAgICAgSGFzaE1hcDxp
bnQsIEdseXBoUGFnZVRyZWVOb2RlKj46Oml0ZXJhdG9yIGVuZCA9IHJvb3RzLT5lbmQoKTsKICAg
ICAgICAgZm9yIChIYXNoTWFwPGludCwgR2x5cGhQYWdlVHJlZU5vZGUqPjo6aXRlcmF0b3IgaXQg
PSByb290cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgaXQtPnNlY29u
ZC0+cHJ1bmVGb250RGF0YShmb250RGF0YSk7CisgICAgICAgICAgICBpdC0+dmFsdWUtPnBydW5l
Rm9udERhdGEoZm9udERhdGEpOwogICAgIH0KICAgICAKICAgICBpZiAocGFnZVplcm9Sb290KQpA
QCAtMzY4LDcgKzM2OCw3IEBAIHZvaWQgR2x5cGhQYWdlVHJlZU5vZGU6OnBydW5lQ3VzdG9tRm9u
dERhdGEoY29uc3QgRm9udERhdGEqIGZvbnREYXRhKQogICAgICAgICByZXR1cm47CiAgICAgSGFz
aE1hcDxjb25zdCBGb250RGF0YSosIEdseXBoUGFnZVRyZWVOb2RlKj46Oml0ZXJhdG9yIGVuZCA9
IG1fY2hpbGRyZW4uZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPGNvbnN0IEZvbnREYXRhKiwgR2x5
cGhQYWdlVHJlZU5vZGUqPjo6aXRlcmF0b3IgaXQgPSBtX2NoaWxkcmVuLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+cHJ1bmVDdXN0b21Gb250RGF0YShmb250
RGF0YSk7CisgICAgICAgIGl0LT52YWx1ZS0+cHJ1bmVDdXN0b21Gb250RGF0YShmb250RGF0YSk7
CiB9CiAKIHZvaWQgR2x5cGhQYWdlVHJlZU5vZGU6OnBydW5lRm9udERhdGEoY29uc3QgU2ltcGxl
Rm9udERhdGEqIGZvbnREYXRhLCB1bnNpZ25lZCBsZXZlbCkKQEAgLTM4NCw3ICszODQsNyBAQCB2
b2lkIEdseXBoUGFnZVRyZWVOb2RlOjpwcnVuZUZvbnREYXRhKGNvbnN0IFNpbXBsZUZvbnREYXRh
KiBmb250RGF0YSwgdW5zaWduZWQgbAogICAgIC8vIFBydW5lIGFueSBicmFuY2ggdGhhdCBjb250
YWlucyB0aGlzIEZvbnREYXRhLgogICAgIEhhc2hNYXA8Y29uc3QgRm9udERhdGEqLCBHbHlwaFBh
Z2VUcmVlTm9kZSo+OjppdGVyYXRvciBjaGlsZCA9IG1fY2hpbGRyZW4uZmluZChmb250RGF0YSk7
CiAgICAgaWYgKGNoaWxkICE9IG1fY2hpbGRyZW4uZW5kKCkpIHsKLSAgICAgICAgR2x5cGhQYWdl
VHJlZU5vZGUqIG5vZGUgPSBjaGlsZC0+c2Vjb25kOworICAgICAgICBHbHlwaFBhZ2VUcmVlTm9k
ZSogbm9kZSA9IGNoaWxkLT52YWx1ZTsKICAgICAgICAgbV9jaGlsZHJlbi5yZW1vdmUoZm9udERh
dGEpOwogICAgICAgICB1bnNpZ25lZCBjdXN0b21Gb250Q291bnQgPSBub2RlLT5tX2N1c3RvbUZv
bnRDb3VudDsKICAgICAgICAgZGVsZXRlIG5vZGU7CkBAIC00MDAsNyArNDAwLDcgQEAgdm9pZCBH
bHlwaFBhZ2VUcmVlTm9kZTo6cHJ1bmVGb250RGF0YShjb25zdCBTaW1wbGVGb250RGF0YSogZm9u
dERhdGEsIHVuc2lnbmVkIGwKIAogICAgIEhhc2hNYXA8Y29uc3QgRm9udERhdGEqLCBHbHlwaFBh
Z2VUcmVlTm9kZSo+OjppdGVyYXRvciBlbmQgPSBtX2NoaWxkcmVuLmVuZCgpOwogICAgIGZvciAo
SGFzaE1hcDxjb25zdCBGb250RGF0YSosIEdseXBoUGFnZVRyZWVOb2RlKj46Oml0ZXJhdG9yIGl0
ID0gbV9jaGlsZHJlbi5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNv
bmQtPnBydW5lRm9udERhdGEoZm9udERhdGEsIGxldmVsKTsKKyAgICAgICAgaXQtPnZhbHVlLT5w
cnVuZUZvbnREYXRhKGZvbnREYXRhLCBsZXZlbCk7CiB9CiAKICNpZm5kZWYgTkRFQlVHCkBAIC00
MTIsOCArNDEyLDggQEAgdm9pZCBHbHlwaFBhZ2VUcmVlTm9kZTo6cHJ1bmVGb250RGF0YShjb25z
dCBTaW1wbGVGb250RGF0YSogZm9udERhdGEsIHVuc2lnbmVkIGwKIAogICAgICAgICBIYXNoTWFw
PGNvbnN0IEZvbnREYXRhKiwgR2x5cGhQYWdlVHJlZU5vZGUqPjo6aXRlcmF0b3IgZW5kID0gbV9j
aGlsZHJlbi5lbmQoKTsKICAgICAgICAgZm9yIChIYXNoTWFwPGNvbnN0IEZvbnREYXRhKiwgR2x5
cGhQYWdlVHJlZU5vZGUqPjo6aXRlcmF0b3IgaXQgPSBtX2NoaWxkcmVuLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgewotICAgICAgICAgICAgcHJpbnRmKCIlc1x0JXAgJXNcbiIsIGluZGVudC5k
YXRhKCksIGl0LT5maXJzdCwgaXQtPmZpcnN0LT5kZXNjcmlwdGlvbigpLnV0ZjgoKS5kYXRhKCkp
OwotICAgICAgICAgICAgaXQtPnNlY29uZC0+c2hvd1N1YnRyZWUoKTsKKyAgICAgICAgICAgIHBy
aW50ZigiJXNcdCVwICVzXG4iLCBpbmRlbnQuZGF0YSgpLCBpdC0+a2V5LCBpdC0+a2V5LT5kZXNj
cmlwdGlvbigpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgaXQtPnZhbHVlLT5zaG93U3Vi
dHJlZSgpOwogICAgICAgICB9CiAgICAgICAgIGlmIChtX3N5c3RlbUZhbGxiYWNrQ2hpbGQpIHsK
ICAgICAgICAgICAgIHByaW50ZigiJXNcdCogZmFsbGJhY2tcbiIsIGluZGVudC5kYXRhKCkpOwpA
QCAtNDMxLDggKzQzMSw4IEBAIHZvaWQgc2hvd0dseXBoUGFnZVRyZWVzKCkKICAgICBzaG93R2x5
cGhQYWdlVHJlZSgwKTsKICAgICBIYXNoTWFwPGludCwgV2ViQ29yZTo6R2x5cGhQYWdlVHJlZU5v
ZGUqPjo6aXRlcmF0b3IgZW5kID0gV2ViQ29yZTo6R2x5cGhQYWdlVHJlZU5vZGU6OnJvb3RzLT5l
bmQoKTsKICAgICBmb3IgKEhhc2hNYXA8aW50LCBXZWJDb3JlOjpHbHlwaFBhZ2VUcmVlTm9kZSo+
OjppdGVyYXRvciBpdCA9IFdlYkNvcmU6OkdseXBoUGFnZVRyZWVOb2RlOjpyb290cy0+YmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIHByaW50ZigiXG5QYWdlICVkOlxuIiwgaXQt
PmZpcnN0KTsKLSAgICAgICAgc2hvd0dseXBoUGFnZVRyZWUoaXQtPmZpcnN0KTsKKyAgICAgICAg
cHJpbnRmKCJcblBhZ2UgJWQ6XG4iLCBpdC0+a2V5KTsKKyAgICAgICAgc2hvd0dseXBoUGFnZVRy
ZWUoaXQtPmtleSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZS5jcHAKaW5kZXggYTE5ZjZhNjE2NzhkZWVm
OTc5NTQ2OTIwZDhkZGQwMWI0MWI0NmNmNS4uZWY0NWZkOWM0ZjYwM2M5ZjcwYTYyNmNmYWNmYTYw
ZmMwMjlhZDFlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
VGlsZWRCYWNraW5nU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1RpbGVkQmFja2luZ1N0b3JlLmNwcApAQCAtMTE2LDkgKzExNiw5IEBAIHZvaWQgVGlsZWRC
YWNraW5nU3RvcmU6OnVwZGF0ZVRpbGVCdWZmZXJzKCkKICAgICBWZWN0b3I8UmVmUHRyPFRpbGU+
ID4gZGlydHlUaWxlczsKICAgICBUaWxlTWFwOjppdGVyYXRvciBlbmQgPSBtX3RpbGVzLmVuZCgp
OwogICAgIGZvciAoVGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoIWl0LT5zZWNvbmQtPmlzRGlydHkoKSkKKyAgICAg
ICAgaWYgKCFpdC0+dmFsdWUtPmlzRGlydHkoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICBkaXJ0eVRpbGVzLmFwcGVuZChpdC0+c2Vjb25kKTsKKyAgICAgICAgZGlydHlUaWxlcy5h
cHBlbmQoaXQtPnZhbHVlKTsKICAgICB9CiAKICAgICBpZiAoZGlydHlUaWxlcy5pc0VtcHR5KCkp
IHsKQEAgLTQwMSwxMyArNDAxLDEzIEBAIGJvb2wgVGlsZWRCYWNraW5nU3RvcmU6OnJlc2l6ZUVk
Z2VUaWxlcygpCiAgICAgVmVjdG9yPFRpbGU6OkNvb3JkaW5hdGU+IHRpbGVzVG9SZW1vdmU7CiAg
ICAgVGlsZU1hcDo6aXRlcmF0b3IgZW5kID0gbV90aWxlcy5lbmQoKTsKICAgICBmb3IgKFRpbGVN
YXA6Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAg
ICAgICAgVGlsZTo6Q29vcmRpbmF0ZSB0aWxlQ29vcmRpbmF0ZSA9IGl0LT5zZWNvbmQtPmNvb3Jk
aW5hdGUoKTsKLSAgICAgICAgSW50UmVjdCB0aWxlUmVjdCA9IGl0LT5zZWNvbmQtPnJlY3QoKTsK
KyAgICAgICAgVGlsZTo6Q29vcmRpbmF0ZSB0aWxlQ29vcmRpbmF0ZSA9IGl0LT52YWx1ZS0+Y29v
cmRpbmF0ZSgpOworICAgICAgICBJbnRSZWN0IHRpbGVSZWN0ID0gaXQtPnZhbHVlLT5yZWN0KCk7
CiAgICAgICAgIEludFJlY3QgZXhwZWN0ZWRUaWxlUmVjdCA9IHRpbGVSZWN0Rm9yQ29vcmRpbmF0
ZSh0aWxlQ29vcmRpbmF0ZSk7CiAgICAgICAgIGlmIChleHBlY3RlZFRpbGVSZWN0LmlzRW1wdHko
KSkKICAgICAgICAgICAgIHRpbGVzVG9SZW1vdmUuYXBwZW5kKHRpbGVDb29yZGluYXRlKTsKICAg
ICAgICAgZWxzZSBpZiAoZXhwZWN0ZWRUaWxlUmVjdCAhPSB0aWxlUmVjdCkgewotICAgICAgICAg
ICAgaXQtPnNlY29uZC0+cmVzaXplKGV4cGVjdGVkVGlsZVJlY3Quc2l6ZSgpKTsKKyAgICAgICAg
ICAgIGl0LT52YWx1ZS0+cmVzaXplKGV4cGVjdGVkVGlsZVJlY3Quc2l6ZSgpKTsKICAgICAgICAg
ICAgIHdhc1Jlc2l6ZWQgPSB0cnVlOwogICAgICAgICB9CiAgICAgfQpAQCAtNDI2LDggKzQyNiw4
IEBAIHZvaWQgVGlsZWRCYWNraW5nU3RvcmU6OnNldEtlZXBSZWN0KGNvbnN0IEludFJlY3QmIGtl
ZXBSZWN0KQogICAgIFZlY3RvcjxUaWxlOjpDb29yZGluYXRlPiB0b1JlbW92ZTsKICAgICBUaWxl
TWFwOjppdGVyYXRvciBlbmQgPSBtX3RpbGVzLmVuZCgpOwogICAgIGZvciAoVGlsZU1hcDo6aXRl
cmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBU
aWxlOjpDb29yZGluYXRlIGNvb3JkaW5hdGUgPSBpdC0+c2Vjb25kLT5jb29yZGluYXRlKCk7Ci0g
ICAgICAgIEZsb2F0UmVjdCB0aWxlUmVjdCA9IGl0LT5zZWNvbmQtPnJlY3QoKTsKKyAgICAgICAg
VGlsZTo6Q29vcmRpbmF0ZSBjb29yZGluYXRlID0gaXQtPnZhbHVlLT5jb29yZGluYXRlKCk7Cisg
ICAgICAgIEZsb2F0UmVjdCB0aWxlUmVjdCA9IGl0LT52YWx1ZS0+cmVjdCgpOwogICAgICAgICBp
ZiAoIXRpbGVSZWN0LmludGVyc2VjdHMoa2VlcFJlY3RGKSkKICAgICAgICAgICAgIHRvUmVtb3Zl
LmFwcGVuZChjb29yZGluYXRlKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vY2YvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uQ0YuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0
aW9uL2NmL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGLmNwcAppbmRleCA4MWQ4NjI5
ODE1MjlkY2I1ZTRhYjJkMGMwMDY2NzJkZTc2YTg4MmYxLi43OGNhYzY3MmU0MThjMTU5MDMzYzBh
MWZmODhkZmYyZDZhMTE5NTc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9hdmZvdW5kYXRpb24vY2YvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0Yu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9j
Zi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25DRi5jcHAKQEAgLTkxNSw3ICs5MTUsNyBA
QCBBVkZXcmFwcGVyKiBBVkZXcmFwcGVyOjphdmZXcmFwcGVyRm9yQ2FsbGJhY2tDb250ZXh0KHZv
aWQqIGNvbnRleHQpCiAgICAgaWYgKGl0ID09IG1hcCgpLmVuZCgpKQogICAgICAgICByZXR1cm4g
MDsKIAotICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgIHJldHVybiBpdC0+dmFsdWU7CiB9CiAK
IHZvaWQgQVZGV3JhcHBlcjo6c2NoZWR1bGVEaXNjb25uZWN0QW5kRGVsZXRlKCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJUaWxl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVy
VGlsZXIuY3BwCmluZGV4IDgzZWFjYWNjMDhlZmI4MGYzZGY5YmZmNTI4ZjhkYzIzNTQ2ZDJkNmUu
LmNkMjgwMWUyZDVkNTU2YjBiODUxZDQ4YWRjNDRkMGI3YWM1Yjc1MGMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJUaWxlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclRp
bGVyLmNwcApAQCAtMzcwLDggKzM3MCw4IEBAIHZvaWQgTGF5ZXJUaWxlcjo6bGF5ZXJWaXNpYmls
aXR5Q2hhbmdlZChMYXllckNvbXBvc2l0aW5nVGhyZWFkKiwgYm9vbCB2aXNpYmxlKQogICAgIH0K
IAogICAgIGZvciAoVGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9
IG1fdGlsZXMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgVGlsZUluZGV4IGluZGV4ID0gKCppdCku
Zmlyc3Q7Ci0gICAgICAgIExheWVyVGlsZSogdGlsZSA9ICgqaXQpLnNlY29uZDsKKyAgICAgICAg
VGlsZUluZGV4IGluZGV4ID0gKCppdCkua2V5OworICAgICAgICBMYXllclRpbGUqIHRpbGUgPSAo
Kml0KS52YWx1ZTsKICAgICAgICAgdGlsZS0+c2V0VmlzaWJsZShmYWxzZSk7CiAgICAgfQogfQpA
QCAtMzg1LDIxICszODUsMjEgQEAgdm9pZCBMYXllclRpbGVyOjp1cGxvYWRUZXh0dXJlc0lmTmVl
ZGVkKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqKQogCiAgICAgVGlsZUpvYnNNYXA6OmNvbnN0X2l0
ZXJhdG9yIHRpbGVKb2JzSXRlckVuZCA9IHRpbGVKb2JzTWFwLmVuZCgpOwogICAgIGZvciAoVGls
ZUpvYnNNYXA6OmNvbnN0X2l0ZXJhdG9yIHRpbGVKb2JzSXRlciA9IHRpbGVKb2JzTWFwLmJlZ2lu
KCk7IHRpbGVKb2JzSXRlciAhPSB0aWxlSm9ic0l0ZXJFbmQ7ICsrdGlsZUpvYnNJdGVyKSB7Ci0g
ICAgICAgIEludFBvaW50IG9yaWdpbiA9IG9yaWdpbk9mVGlsZSh0aWxlSm9ic0l0ZXItPmZpcnN0
KTsKKyAgICAgICAgSW50UG9pbnQgb3JpZ2luID0gb3JpZ2luT2ZUaWxlKHRpbGVKb2JzSXRlci0+
a2V5KTsKIAotICAgICAgICBMYXllclRpbGUqIHRpbGUgPSBtX3RpbGVzLmdldCh0aWxlSm9ic0l0
ZXItPmZpcnN0KTsKKyAgICAgICAgTGF5ZXJUaWxlKiB0aWxlID0gbV90aWxlcy5nZXQodGlsZUpv
YnNJdGVyLT5rZXkpOwogICAgICAgICBpZiAoIXRpbGUpIHsKICAgICAgICAgICAgIGlmIChvcmln
aW4ueCgpID49IG1fcmVxdWlyZWRUZXh0dXJlU2l6ZS53aWR0aCgpIHx8IG9yaWdpbi55KCkgPj0g
bV9yZXF1aXJlZFRleHR1cmVTaXplLmhlaWdodCgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgdGlsZSA9IG5ldyBMYXllclRpbGUoKTsKLSAgICAgICAgICAgIG1fdGls
ZXMuYWRkKHRpbGVKb2JzSXRlci0+Zmlyc3QsIHRpbGUpOworICAgICAgICAgICAgbV90aWxlcy5h
ZGQodGlsZUpvYnNJdGVyLT5rZXksIHRpbGUpOwogICAgICAgICB9CiAKICAgICAgICAgSW50UmVj
dCB0aWxlUmVjdChvcmlnaW4sIHRpbGVTaXplKCkpOwogICAgICAgICB0aWxlUmVjdC5zZXRXaWR0
aChtaW4obV9yZXF1aXJlZFRleHR1cmVTaXplLndpZHRoKCkgLSB0aWxlUmVjdC54KCksIHRpbGVS
ZWN0LndpZHRoKCkpKTsKICAgICAgICAgdGlsZVJlY3Quc2V0SGVpZ2h0KG1pbihtX3JlcXVpcmVk
VGV4dHVyZVNpemUuaGVpZ2h0KCkgLSB0aWxlUmVjdC55KCksIHRpbGVSZWN0LmhlaWdodCgpKSk7
CiAKLSAgICAgICAgcGVyZm9ybVRpbGVKb2IodGlsZSwgKnRpbGVKb2JzSXRlci0+c2Vjb25kLCB0
aWxlUmVjdCk7CisgICAgICAgIHBlcmZvcm1UaWxlSm9iKHRpbGUsICp0aWxlSm9ic0l0ZXItPnZh
bHVlLCB0aWxlUmVjdCk7CiAgICAgfQogCiAgICAgbV90ZXh0dXJlSm9icy5jbGVhcigpOwpAQCAt
NDQyLDExICs0NDIsMTEgQEAgdm9pZCBMYXllclRpbGVyOjphZGRUaWxlSm9iKGNvbnN0IFRpbGVJ
bmRleCYgaW5kZXgsIGNvbnN0IFRleHR1cmVKb2ImIGpvYiwgVGlsZUoKICAgICAgICAgcmV0dXJu
OwogCiAgICAgLy8gSW4gdGhpcyBjYXNlIHdlIGxlYXZlIHRoZSBwcmV2aW91cyBqb2IuCi0gICAg
aWYgKGpvYi5tX3R5cGUgPT0gVGV4dHVyZUpvYjo6RGlydHlDb250ZW50cyAmJiByZXN1bHQuaXRl
cmF0b3ItPnNlY29uZC0+bV90eXBlID09IFRleHR1cmVKb2I6OkRpc2NhcmRDb250ZW50cykKKyAg
ICBpZiAoam9iLm1fdHlwZSA9PSBUZXh0dXJlSm9iOjpEaXJ0eUNvbnRlbnRzICYmIHJlc3VsdC5p
dGVyYXRvci0+dmFsdWUtPm1fdHlwZSA9PSBUZXh0dXJlSm9iOjpEaXNjYXJkQ29udGVudHMpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIC8vIE92ZXJyaWRlIHRoZSBwcmV2aW91cyBqb2IuCi0gICAg
cmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSAmam9iOworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFs
dWUgPSAmam9iOwogfQogCiB2b2lkIExheWVyVGlsZXI6OnBlcmZvcm1UaWxlSm9iKExheWVyVGls
ZSogdGlsZSwgY29uc3QgVGV4dHVyZUpvYiYgam9iLCBjb25zdCBJbnRSZWN0JiB0aWxlUmVjdCkK
QEAgLTYzMSw3ICs2MzEsNyBAQCB2b2lkIExheWVyVGlsZXI6OmRlbGV0ZVRleHR1cmVzKExheWVy
Q29tcG9zaXRpbmdUaHJlYWQqKQogICAgIC8vIHRvdWNoaW5nIHNvbWUgV2ViS2l0IHRocmVhZCBz
dGF0ZS4KICAgICBpZiAobV90aWxlcy5zaXplKCkpIHsKICAgICAgICAgZm9yIChUaWxlTWFwOjpp
dGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0gbV90aWxlcy5lbmQoKTsgKytpdCkK
LSAgICAgICAgICAgICgqaXQpLnNlY29uZC0+ZGlzY2FyZENvbnRlbnRzKCk7CisgICAgICAgICAg
ICAoKml0KS52YWx1ZS0+ZGlzY2FyZENvbnRlbnRzKCk7CiAgICAgICAgIG1fdGlsZXMuY2xlYXIo
KTsKIAogICAgICAgICBtX2NvbnRlbnRzRGlydHkgPSB0cnVlOwpAQCAtNjQ4LDcgKzY0OCw3IEBA
IHZvaWQgTGF5ZXJUaWxlcjo6cHJ1bmVUZXh0dXJlcygpCiAgICAgLy8gUHJ1bmUgdGlsZXMgdGhh
dCBhcmUgbm8gbG9uZ2VyIG5lZWRlZC4KICAgICBWZWN0b3I8VGlsZUluZGV4PiB0aWxlc1RvRGVs
ZXRlOwogICAgIGZvciAoVGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0
ICE9IG1fdGlsZXMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgVGlsZUluZGV4IGluZGV4ID0gKCpp
dCkuZmlyc3Q7CisgICAgICAgIFRpbGVJbmRleCBpbmRleCA9ICgqaXQpLmtleTsKIAogICAgICAg
ICBJbnRQb2ludCBvcmlnaW4gPSBvcmlnaW5PZlRpbGUoaW5kZXgpOwogICAgICAgICBpZiAob3Jp
Z2luLngoKSA+PSBtX3JlcXVpcmVkVGV4dHVyZVNpemUud2lkdGgoKSB8fCBvcmlnaW4ueSgpID49
IG1fcmVxdWlyZWRUZXh0dXJlU2l6ZS5oZWlnaHQoKSkKQEAgLTczMCw3ICs3MzAsNyBAQCB2b2lk
IExheWVyVGlsZXI6OmJpbmRDb250ZW50c1RleHR1cmUoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCop
CiAgICAgaWYgKG1fdGlsZXMuc2l6ZSgpICE9IDEpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNv
bnN0IExheWVyVGlsZSogdGlsZSA9IG1fdGlsZXMuYmVnaW4oKS0+c2Vjb25kOworICAgIGNvbnN0
IExheWVyVGlsZSogdGlsZSA9IG1fdGlsZXMuYmVnaW4oKS0+dmFsdWU7CiAKICAgICBBU1NFUlQo
dGlsZS0+aGFzVGV4dHVyZSgpKTsKICAgICBpZiAoIXRpbGUtPmhhc1RleHR1cmUoKSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvVGV4dHVy
ZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYmxhY2tiZXJyeS9UZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZC5jcHAKaW5kZXgg
NWI2YmI4NzM2NDlmOWE4OGJjYjc4ZTIwYjE3YTE4ZWMzNTRjYjc1MS4uZDY1YzRkYWRkYmJiMjU5
OGViMGZhMjQxNzFjNGU2YWYxNGRkNzRjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9UZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9UZXh0
dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZC5jcHAKQEAgLTIwMiwxMCArMjAyLDEwIEBAIHZvaWQg
VGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQ6OnNldE1lbW9yeVVzYWdlKHNpemVfdCBtZW1v
cnlVc2FnZSkKIFBhc3NSZWZQdHI8VGV4dHVyZT4gVGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJl
YWQ6OnRleHR1cmVGb3JUaWxlZENvbnRlbnRzKGNvbnN0IFNrQml0bWFwJiBjb250ZW50cywgY29u
c3QgSW50UmVjdCYgdGlsZVJlY3QsIGNvbnN0IFRpbGVJbmRleCYgaW5kZXgsIGJvb2wgaXNPcGFx
dWUpCiB7CiAgICAgSGFzaE1hcDxDb250ZW50c0tleSwgVGV4dHVyZU1hcD46Oml0ZXJhdG9yIGl0
ID0gbV9jYWNoZS5hZGQoa2V5KGNvbnRlbnRzKSwgVGV4dHVyZU1hcCgpKS5pdGVyYXRvcjsKLSAg
ICBUZXh0dXJlTWFwJiBtYXAgPSAoKml0KS5zZWNvbmQ7CisgICAgVGV4dHVyZU1hcCYgbWFwID0g
KCppdCkudmFsdWU7CiAKICAgICBUZXh0dXJlTWFwOjppdGVyYXRvciBqdCA9IG1hcC5hZGQoaW5k
ZXgsIFJlZlB0cjxUZXh0dXJlPigpKS5pdGVyYXRvcjsKLSAgICBSZWZQdHI8VGV4dHVyZT4gdGV4
dHVyZSA9ICgqanQpLnNlY29uZDsKKyAgICBSZWZQdHI8VGV4dHVyZT4gdGV4dHVyZSA9ICgqanQp
LnZhbHVlOwogICAgIGlmICghdGV4dHVyZSkgewogICAgICAgICB0ZXh0dXJlID0gY3JlYXRlVGV4
dHVyZSgpOwogI2lmIERFQlVHX1RFWFRVUkVfTUVNT1JZX1VTQUdFCkBAIC0yNDQsNyArMjQ0LDcg
QEAgUGFzc1JlZlB0cjxUZXh0dXJlPiBUZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZDo6dGV4
dHVyZUZvckNvbG9yKGNvbnN0IENvbG9yJgogI2VuZGlmCiAgICAgICAgIG1fY29sb3JzLnNldChj
b2xvciwgdGV4dHVyZSk7CiAgICAgfSBlbHNlCi0gICAgICAgIHRleHR1cmUgPSAoKml0KS5zZWNv
bmQ7CisgICAgICAgIHRleHR1cmUgPSAoKml0KS52YWx1ZTsKIAogICAgIC8vIENvbG9yIHRleHR1
cmVzIGNhbid0IGJlIGV2aWN0ZWQsIHNvIG5vIG5lZWQgZm9yIFRleHR1cmVQcm90ZWN0b3IuCiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNz
TGF5ZXJDQS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGlj
c0xheWVyQ0EuY3BwCmluZGV4IGRjZGI1ODZkMGNiZmIzMjkzNjFkNmVkYjU5ZmNjYWMwZWIzMGIy
MjYuLjUwZDMzYTA3OWEyYmZkNWRmOWI4ZDZmYjY2YmQ5MTFhNzBkMmZkZGMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNB
LmNwcApAQCAtNDc3LDcgKzQ3Nyw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjptb3ZlT3JDb3B5
QW5pbWF0aW9ucyhNb3ZlT3JDb3B5IG9wZXJhdGlvbiwgUGxhdGZvcm1DQUxheWVyCiAgICAgLy8g
TG9vayBmb3IgcnVubmluZyBhbmltYXRpb25zIGFmZmVjdGluZyB0aGlzIHByb3BlcnR5LgogICAg
IEFuaW1hdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcnVubmluZ0FuaW1hdGlvbnMu
ZW5kKCk7CiAgICAgZm9yIChBbmltYXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fcnVu
bmluZ0FuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0
IFZlY3RvcjxMYXllclByb3BlcnR5QW5pbWF0aW9uPiYgcHJvcGVydHlBbmltYXRpb25zID0gaXQt
PnNlY29uZDsKKyAgICAgICAgY29uc3QgVmVjdG9yPExheWVyUHJvcGVydHlBbmltYXRpb24+JiBw
cm9wZXJ0eUFuaW1hdGlvbnMgPSBpdC0+dmFsdWU7CiAgICAgICAgIHNpemVfdCBudW1BbmltYXRp
b25zID0gcHJvcGVydHlBbmltYXRpb25zLnNpemUoKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBudW1BbmltYXRpb25zOyArK2kpIHsKICAgICAgICAgICAgIGNvbnN0IExheWVyUHJv
cGVydHlBbmltYXRpb24mIGN1cnJBbmltYXRpb24gPSBwcm9wZXJ0eUFuaW1hdGlvbnNbaV07CkBA
IC03MTksNyArNzE5LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnBhdXNlQW5pbWF0aW9uKGNv
bnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWVPZmYKIAogICAgIEFuaW1hdGlv
bnNUb1Byb2Nlc3NNYXA6Oml0ZXJhdG9yIGl0ID0gbV9hbmltYXRpb25zVG9Qcm9jZXNzLmZpbmQo
YW5pbWF0aW9uTmFtZSk7CiAgICAgaWYgKGl0ICE9IG1fYW5pbWF0aW9uc1RvUHJvY2Vzcy5lbmQo
KSkgewotICAgICAgICBBbmltYXRpb25Qcm9jZXNzaW5nQWN0aW9uJiBwcm9jZXNzaW5nSW5mbyA9
IGl0LT5zZWNvbmQ7CisgICAgICAgIEFuaW1hdGlvblByb2Nlc3NpbmdBY3Rpb24mIHByb2Nlc3Np
bmdJbmZvID0gaXQtPnZhbHVlOwogICAgICAgICAvLyBJZiBhbiBhbmltYXRpb24gaXMgc2NoZWR1
bGVkIHRvIGJlIHJlbW92ZWQsIGRvbid0IGNoYW5nZSB0aGUgcmVtb3ZlIHRvIGEgcGF1c2UuCiAg
ICAgICAgIGlmIChwcm9jZXNzaW5nSW5mby5hY3Rpb24gIT0gUmVtb3ZlKQogICAgICAgICAgICAg
cHJvY2Vzc2luZ0luZm8uYWN0aW9uID0gUGF1c2U7CkBAIC04NTQsNyArODU0LDcgQEAgdm9pZCBH
cmFwaGljc0xheWVyQ0E6OmxheWVyRGlkRGlzcGxheShQbGF0Zm9ybUxheWVyKiBsYXllcikKICAg
ICBpZiAobGF5ZXJDbG9uZU1hcCkgewogICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7
Ci0gICAgICAgICAgICBQbGF0Zm9ybUNBTGF5ZXIqIGN1cnJDbG9uZSA9IGl0LT5zZWNvbmQuZ2V0
KCk7CisgICAgICAgICAgICBQbGF0Zm9ybUNBTGF5ZXIqIGN1cnJDbG9uZSA9IGl0LT52YWx1ZS5n
ZXQoKTsKICAgICAgICAgICAgIGlmICghY3VyckNsb25lKQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogCkBAIC0xMTk2LDEwICsxMTk2LDEwIEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRh
dGVHZW9tZXRyeShmbG9hdCBwYWdlU2NhbGVGYWN0b3IsIGNvbnN0IEZsb2F0UG9pbnQmIHBvCiAg
ICAgICAgIGlmIChMYXllck1hcCogbGF5ZXJDbG9uZU1hcCA9IG1fc3RydWN0dXJhbExheWVyQ2xv
bmVzLmdldCgpKSB7CiAgICAgICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
bGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAgICAgICAgICBmb3IgKExheWVyTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IGxheWVyQ2xvbmVNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewot
ICAgICAgICAgICAgICAgIFBsYXRmb3JtQ0FMYXllciogY2xvbmUgPSBpdC0+c2Vjb25kLmdldCgp
OworICAgICAgICAgICAgICAgIFBsYXRmb3JtQ0FMYXllciogY2xvbmUgPSBpdC0+dmFsdWUuZ2V0
KCk7CiAgICAgICAgICAgICAgICAgRmxvYXRQb2ludCBjbG9uZVBvc2l0aW9uID0gbGF5ZXJQb3Np
dGlvbjsKIAotICAgICAgICAgICAgICAgIGlmIChtX3JlcGxpY2FMYXllciAmJiBpc1JlcGxpY2F0
ZWRSb290Q2xvbmUoaXQtPmZpcnN0KSkgeworICAgICAgICAgICAgICAgIGlmIChtX3JlcGxpY2FM
YXllciAmJiBpc1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQtPmtleSkpIHsKICAgICAgICAgICAgICAg
ICAgICAgLy8gTWFpbnRhaW4gdGhlIHNwZWNpYWwtY2FzZSBwb3NpdGlvbiBmb3IgdGhlIHJvb3Qg
b2YgYSBjbG9uZSBzdWJ0cmVlLAogICAgICAgICAgICAgICAgICAgICAvLyB3aGljaCB3ZSBzZXQg
dXAgaW4gcmVwbGljYXRlZExheWVyUm9vdCgpLgogICAgICAgICAgICAgICAgICAgICBjbG9uZVBv
c2l0aW9uID0gcG9zaXRpb25Gb3JDbG9uZVJvb3RMYXllcigpOwpAQCAtMTIyMywxMCArMTIyMywx
MCBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlR2VvbWV0cnkoZmxvYXQgcGFnZVNjYWxl
RmFjdG9yLCBjb25zdCBGbG9hdFBvaW50JiBwbwogICAgIGlmIChMYXllck1hcCogbGF5ZXJDbG9u
ZU1hcCA9IG1fbGF5ZXJDbG9uZXMuZ2V0KCkpIHsKICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IGxheWVyQ2xvbmVNYXAtPmVuZCgpOwogICAgICAgICBmb3IgKExheWVyTWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IGxheWVyQ2xvbmVNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgewotICAgICAgICAgICAgUGxhdGZvcm1DQUxheWVyKiBjbG9uZSA9IGl0LT5zZWNvbmQu
Z2V0KCk7CisgICAgICAgICAgICBQbGF0Zm9ybUNBTGF5ZXIqIGNsb25lID0gaXQtPnZhbHVlLmdl
dCgpOwogICAgICAgICAgICAgRmxvYXRQb2ludCBjbG9uZVBvc2l0aW9uID0gYWRqdXN0ZWRQb3Np
dGlvbjsKIAotICAgICAgICAgICAgaWYgKCFtX3N0cnVjdHVyYWxMYXllciAmJiBtX3JlcGxpY2FM
YXllciAmJiBpc1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQtPmZpcnN0KSkgeworICAgICAgICAgICAg
aWYgKCFtX3N0cnVjdHVyYWxMYXllciAmJiBtX3JlcGxpY2FMYXllciAmJiBpc1JlcGxpY2F0ZWRS
b290Q2xvbmUoaXQtPmtleSkpIHsKICAgICAgICAgICAgICAgICAvLyBNYWludGFpbiB0aGUgc3Bl
Y2lhbC1jYXNlIHBvc2l0aW9uIGZvciB0aGUgcm9vdCBvZiBhIGNsb25lIHN1YnRyZWUsCiAgICAg
ICAgICAgICAgICAgLy8gd2hpY2ggd2Ugc2V0IHVwIGluIHJlcGxpY2F0ZWRMYXllclJvb3QoKS4K
ICAgICAgICAgICAgICAgICBjbG9uZVBvc2l0aW9uID0gcG9zaXRpb25Gb3JDbG9uZVJvb3RMYXll
cigpOwpAQCAtMTI0Niw4ICsxMjQ2LDggQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZVRy
YW5zZm9ybSgpCiAgICAgaWYgKExheWVyTWFwKiBsYXllckNsb25lTWFwID0gcHJpbWFyeUxheWVy
Q2xvbmVzKCkpIHsKICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxheWVy
Q2xvbmVNYXAtPmVuZCgpOwogICAgICAgICBmb3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IGxheWVyQ2xvbmVNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAg
ICAgUGxhdGZvcm1DQUxheWVyKiBjdXJyTGF5ZXIgPSBpdC0+c2Vjb25kLmdldCgpOwotICAgICAg
ICAgICAgaWYgKG1fcmVwbGljYUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9uZShpdC0+Zmly
c3QpKSB7CisgICAgICAgICAgICBQbGF0Zm9ybUNBTGF5ZXIqIGN1cnJMYXllciA9IGl0LT52YWx1
ZS5nZXQoKTsKKyAgICAgICAgICAgIGlmIChtX3JlcGxpY2FMYXllciAmJiBpc1JlcGxpY2F0ZWRS
b290Q2xvbmUoaXQtPmtleSkpIHsKICAgICAgICAgICAgICAgICAvLyBNYWludGFpbiB0aGUgc3Bl
Y2lhbC1jYXNlIHRyYW5zZm9ybSBmb3IgdGhlIHJvb3Qgb2YgYSBjbG9uZSBzdWJ0cmVlLAogICAg
ICAgICAgICAgICAgIC8vIHdoaWNoIHdlIHNldCB1cCBpbiByZXBsaWNhdGVkTGF5ZXJSb290KCku
CiAgICAgICAgICAgICAgICAgY3VyckxheWVyLT5zZXRUcmFuc2Zvcm0oVHJhbnNmb3JtYXRpb25N
YXRyaXgoKSk7CkBAIC0xMjY0LDcgKzEyNjQsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBk
YXRlQ2hpbGRyZW5UcmFuc2Zvcm0oKQogICAgIGlmIChMYXllck1hcCogbGF5ZXJDbG9uZU1hcCA9
IHByaW1hcnlMYXllckNsb25lcygpKSB7CiAgICAgICAgIExheWVyTWFwOjpjb25zdF9pdGVyYXRv
ciBlbmQgPSBsYXllckNsb25lTWFwLT5lbmQoKTsKICAgICAgICAgZm9yIChMYXllck1hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBsYXllckNsb25lTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRTdWJsYXllclRyYW5zZm9ybShtX2NoaWxkcmVu
VHJhbnNmb3JtKTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+c2V0U3VibGF5ZXJUcmFuc2Zvcm0o
bV9jaGlsZHJlblRyYW5zZm9ybSk7CiAgICAgfQogfQogCkBAIC0xMjc1LDcgKzEyNzUsNyBAQCB2
b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlTWFza3NUb0JvdW5kcygpCiAgICAgaWYgKExheWVy
TWFwKiBsYXllckNsb25lTWFwID0gbV9sYXllckNsb25lcy5nZXQoKSkgewogICAgICAgICBMYXll
ck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAgICAg
IGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0TWFza3NUb0Jv
dW5kcyhtX21hc2tzVG9Cb3VuZHMpOworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRNYXNrc1Rv
Qm91bmRzKG1fbWFza3NUb0JvdW5kcyk7CiAgICAgfQogCiAgICAgdXBkYXRlRGVidWdJbmRpY2F0
b3JzKCk7CkBAIC0xMjkzLDcgKzEyOTMsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRl
Q29udGVudHNWaXNpYmlsaXR5KCkKICAgICAgICAgaWYgKExheWVyTWFwKiBsYXllckNsb25lTWFw
ID0gbV9sYXllckNsb25lcy5nZXQoKSkgewogICAgICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IGxheWVyQ2xvbmVNYXAtPmVuZCgpOwogICAgICAgICAgICAgZm9yIChMYXll
ck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXllckNsb25lTWFwLT5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpCi0gICAgICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0Q29udGVudHMoMCk7Cisg
ICAgICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRDb250ZW50cygwKTsKICAgICAgICAgfQogICAg
IH0KIH0KQEAgLTEzMDUsNyArMTMwNSw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVD
b250ZW50c09wYXF1ZSgpCiAgICAgaWYgKExheWVyTWFwKiBsYXllckNsb25lTWFwID0gbV9sYXll
ckNsb25lcy5nZXQoKSkgewogICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
bGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAg
ICAgICAgaXQtPnNlY29uZC0+c2V0T3BhcXVlKG1fY29udGVudHNPcGFxdWUpOworICAgICAgICAg
ICAgaXQtPnZhbHVlLT5zZXRPcGFxdWUobV9jb250ZW50c09wYXF1ZSk7CiAgICAgfQogfQogCkBA
IC0xMzE3LDcgKzEzMTcsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlQmFja2ZhY2VW
aXNpYmlsaXR5KCkKICAgICAgICAgaWYgKExheWVyTWFwKiBsYXllckNsb25lTWFwID0gbV9zdHJ1
Y3R1cmFsTGF5ZXJDbG9uZXMuZ2V0KCkpIHsKICAgICAgICAgICAgIExheWVyTWFwOjpjb25zdF9p
dGVyYXRvciBlbmQgPSBsYXllckNsb25lTWFwLT5lbmQoKTsKICAgICAgICAgICAgIGZvciAoTGF5
ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KQotICAgICAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNldERvdWJsZVNpZGVkKG1f
YmFja2ZhY2VWaXNpYmlsaXR5KTsKKyAgICAgICAgICAgICAgICBpdC0+dmFsdWUtPnNldERvdWJs
ZVNpZGVkKG1fYmFja2ZhY2VWaXNpYmlsaXR5KTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTMy
Niw3ICsxMzI2LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUJhY2tmYWNlVmlzaWJp
bGl0eSgpCiAgICAgaWYgKExheWVyTWFwKiBsYXllckNsb25lTWFwID0gbV9sYXllckNsb25lcy5n
ZXQoKSkgewogICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9u
ZU1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgaXQt
PnNlY29uZC0+c2V0RG91YmxlU2lkZWQobV9iYWNrZmFjZVZpc2liaWxpdHkpOworICAgICAgICAg
ICAgaXQtPnZhbHVlLT5zZXREb3VibGVTaWRlZChtX2JhY2tmYWNlVmlzaWJpbGl0eSk7CiAgICAg
fQogfQogCkBAIC0xMzM4LDEwICsxMzM4LDEwIEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRh
dGVGaWx0ZXJzKCkKICAgICBpZiAoTGF5ZXJNYXAqIGxheWVyQ2xvbmVNYXAgPSBwcmltYXJ5TGF5
ZXJDbG9uZXMoKSkgewogICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5
ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAg
ICAgICBpZiAobV9yZXBsaWNhTGF5ZXIgJiYgaXNSZXBsaWNhdGVkUm9vdENsb25lKGl0LT5maXJz
dCkpCisgICAgICAgICAgICBpZiAobV9yZXBsaWNhTGF5ZXIgJiYgaXNSZXBsaWNhdGVkUm9vdENs
b25lKGl0LT5rZXkpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBp
dC0+c2Vjb25kLT5zZXRGaWx0ZXJzKG1fZmlsdGVycyk7CisgICAgICAgICAgICBpdC0+dmFsdWUt
PnNldEZpbHRlcnMobV9maWx0ZXJzKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTE0MzAsNyAr
MTQzMCw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjplbnN1cmVTdHJ1Y3R1cmFsTGF5ZXIoU3Ry
dWN0dXJhbExheWVyUHVycG9zZSBwdXJwb3NlLCBmbG9hCiAgICAgaWYgKG1fbGF5ZXJDbG9uZXMp
IHsKICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fbGF5ZXJDbG9uZXMt
PmVuZCgpOwogICAgICAgICBmb3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fbGF5
ZXJDbG9uZXMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgUGxhdGZv
cm1DQUxheWVyKiBjdXJyTGF5ZXIgPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgUGxh
dGZvcm1DQUxheWVyKiBjdXJyTGF5ZXIgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBj
dXJyTGF5ZXItPnNldFBvc2l0aW9uKHBvaW50KTsKICAgICAgICAgICAgIGN1cnJMYXllci0+c2V0
QW5jaG9yUG9pbnQoYW5jaG9yUG9pbnQpOwogICAgICAgICAgICAgY3VyckxheWVyLT5zZXRUcmFu
c2Zvcm0oVHJhbnNmb3JtYXRpb25NYXRyaXgoKSk7CkBAIC0xNDc1LDcgKzE0NzUsNyBAQCB2b2lk
IEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlTGF5ZXJEcmF3c0NvbnRlbnQoZmxvYXQgcGFnZVNjYWxl
RmFjdG9yLCBjb25zdCBGbG9hdAogICAgICAgICBpZiAobV9sYXllckNsb25lcykgewogICAgICAg
ICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fbGF5ZXJDbG9uZXMtPmVuZCgp
OwogICAgICAgICAgICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2xheWVy
Q2xvbmVzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICAgICAgaXQtPnNl
Y29uZC0+c2V0Q29udGVudHMoMCk7CisgICAgICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRDb250
ZW50cygwKTsKICAgICAgICAgfQogICAgIH0KICAgICB1cGRhdGVEZWJ1Z0luZGljYXRvcnMoKTsK
QEAgLTE1MjYsNyArMTUyNiw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVDb250ZW50
c0ltYWdlKCkKICAgICAgICAgaWYgKG1fY29udGVudHNMYXllckNsb25lcykgewogICAgICAgICAg
ICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fY29udGVudHNMYXllckNsb25lcy0+
ZW5kKCk7CiAgICAgICAgICAgICBmb3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1f
Y29udGVudHNMYXllckNsb25lcy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAg
ICAgICAgIGl0LT5zZWNvbmQtPnNldENvbnRlbnRzKG1fY29udGVudHNMYXllci0+Y29udGVudHMo
KSk7CisgICAgICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRDb250ZW50cyhtX2NvbnRlbnRzTGF5
ZXItPmNvbnRlbnRzKCkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICB1cGRhdGVDb250
ZW50c1JlY3QoKTsKQEAgLTE1NzAsOCArMTU3MCw4IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1
cGRhdGVDb250ZW50c1JlY3QoKQogICAgIGlmIChtX2NvbnRlbnRzTGF5ZXJDbG9uZXMpIHsKICAg
ICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fY29udGVudHNMYXllckNsb25l
cy0+ZW5kKCk7CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9j
b250ZW50c0xheWVyQ2xvbmVzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAg
ICAgIGl0LT5zZWNvbmQtPnNldFBvc2l0aW9uKHBvaW50KTsKLSAgICAgICAgICAgIGl0LT5zZWNv
bmQtPnNldEJvdW5kcyhyZWN0KTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+c2V0UG9zaXRpb24o
cG9pbnQpOworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRCb3VuZHMocmVjdCk7CiAgICAgICAg
IH0KICAgICB9CiB9CkBAIC0xNTg2LDggKzE1ODYsOCBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6
dXBkYXRlTWFza0xheWVyKCkKICAgICBpZiAoTGF5ZXJNYXAqIGxheWVyQ2xvbmVNYXAgPSBtX2xh
eWVyQ2xvbmVzLmdldCgpKSB7CiAgICAgICAgIExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQg
PSBsYXllckNsb25lTWFwLT5lbmQoKTsKICAgICAgICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBsYXllckNsb25lTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsgICAg
ICAgICAgICAKLSAgICAgICAgICAgIFBsYXRmb3JtQ0FMYXllciogbWFza0Nsb25lID0gbWFza0xh
eWVyQ2xvbmVNYXAgPyBtYXNrTGF5ZXJDbG9uZU1hcC0+Z2V0KGl0LT5maXJzdCkuZ2V0KCkgOiAw
OwotICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0TWFzayhtYXNrQ2xvbmUpOworICAgICAgICAg
ICAgUGxhdGZvcm1DQUxheWVyKiBtYXNrQ2xvbmUgPSBtYXNrTGF5ZXJDbG9uZU1hcCA/IG1hc2tM
YXllckNsb25lTWFwLT5nZXQoaXQtPmtleSkuZ2V0KCkgOiAwOworICAgICAgICAgICAgaXQtPnZh
bHVlLT5zZXRNYXNrKG1hc2tDbG9uZSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0xNjUxLDEz
ICsxNjUxLDEzIEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVMYXllckFuaW1hdGlvbnMo
KQogICAgIGlmIChtX2FuaW1hdGlvbnNUb1Byb2Nlc3Muc2l6ZSgpKSB7CiAgICAgICAgIEFuaW1h
dGlvbnNUb1Byb2Nlc3NNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fYW5pbWF0aW9uc1RvUHJv
Y2Vzcy5lbmQoKTsKICAgICAgICAgZm9yIChBbmltYXRpb25zVG9Qcm9jZXNzTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IG1fYW5pbWF0aW9uc1RvUHJvY2Vzcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKLSAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgY3VyckFuaW1hdGlvbk5hbWUgPSBpdC0+
Zmlyc3Q7CisgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGN1cnJBbmltYXRpb25OYW1lID0gaXQt
PmtleTsKICAgICAgICAgICAgIEFuaW1hdGlvbnNNYXA6Oml0ZXJhdG9yIGFuaW1hdGlvbkl0ID0g
bV9ydW5uaW5nQW5pbWF0aW9ucy5maW5kKGN1cnJBbmltYXRpb25OYW1lKTsKICAgICAgICAgICAg
IGlmIChhbmltYXRpb25JdCA9PSBtX3J1bm5pbmdBbmltYXRpb25zLmVuZCgpKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBjb25zdCBBbmltYXRpb25Qcm9jZXNzaW5n
QWN0aW9uJiBwcm9jZXNzaW5nSW5mbyA9IGl0LT5zZWNvbmQ7Ci0gICAgICAgICAgICBjb25zdCBW
ZWN0b3I8TGF5ZXJQcm9wZXJ0eUFuaW1hdGlvbj4mIGFuaW1hdGlvbnMgPSBhbmltYXRpb25JdC0+
c2Vjb25kOworICAgICAgICAgICAgY29uc3QgQW5pbWF0aW9uUHJvY2Vzc2luZ0FjdGlvbiYgcHJv
Y2Vzc2luZ0luZm8gPSBpdC0+dmFsdWU7CisgICAgICAgICAgICBjb25zdCBWZWN0b3I8TGF5ZXJQ
cm9wZXJ0eUFuaW1hdGlvbj4mIGFuaW1hdGlvbnMgPSBhbmltYXRpb25JdC0+dmFsdWU7CiAgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsK
ICAgICAgICAgICAgICAgICBjb25zdCBMYXllclByb3BlcnR5QW5pbWF0aW9uJiBjdXJyQW5pbWF0
aW9uID0gYW5pbWF0aW9uc1tpXTsKICAgICAgICAgICAgICAgICBzd2l0Y2ggKHByb2Nlc3NpbmdJ
bmZvLmFjdGlvbikgewpAQCAtMTY4OSw3ICsxNjg5LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6
OnVwZGF0ZUxheWVyQW5pbWF0aW9ucygpCiAgICAgICAgICAgICAgICAgYW5pbWF0aW9ucy5hcHBl
bmQocGVuZGluZ0FuaW1hdGlvbik7CiAgICAgICAgICAgICAgICAgbV9ydW5uaW5nQW5pbWF0aW9u
cy5hZGQocGVuZGluZ0FuaW1hdGlvbi5tX25hbWUsIGFuaW1hdGlvbnMpOwogICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICBWZWN0b3I8TGF5ZXJQcm9wZXJ0eUFuaW1hdGlvbj4m
IGFuaW1hdGlvbnMgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgICAgIFZlY3RvcjxMYXllclBy
b3BlcnR5QW5pbWF0aW9uPiYgYW5pbWF0aW9ucyA9IGl0LT52YWx1ZTsKICAgICAgICAgICAgICAg
ICBhbmltYXRpb25zLmFwcGVuZChwZW5kaW5nQW5pbWF0aW9uKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQpAQCAtMTcxNCwxMSArMTcxNCwxMSBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c2V0
QW5pbWF0aW9uT25MYXllcihQbGF0Zm9ybUNBQW5pbWF0aW9uKiBjYUFuaW0sIEFuaW1hdGVkUAog
ICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5k
KCk7CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9u
ZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICAvLyBTa2lwIGlt
bWVkaWF0ZSByZXBsaWNhcywgc2luY2UgdGhleSBtb3ZlIHdpdGggdGhlIG9yaWdpbmFsLgotICAg
ICAgICAgICAgaWYgKG1fcmVwbGljYUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9uZShpdC0+
Zmlyc3QpKQorICAgICAgICAgICAgaWYgKG1fcmVwbGljYUxheWVyICYmIGlzUmVwbGljYXRlZFJv
b3RDbG9uZShpdC0+a2V5KSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAg
ICAgaXQtPnNlY29uZC0+cmVtb3ZlQW5pbWF0aW9uRm9yS2V5KGFuaW1hdGlvbklEKTsKLSAgICAg
ICAgICAgIGl0LT5zZWNvbmQtPmFkZEFuaW1hdGlvbkZvcktleShhbmltYXRpb25JRCwgY2FBbmlt
KTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+cmVtb3ZlQW5pbWF0aW9uRm9yS2V5KGFuaW1hdGlv
bklEKTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+YWRkQW5pbWF0aW9uRm9yS2V5KGFuaW1hdGlv
bklELCBjYUFuaW0pOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMTc1MywxMCArMTc1MywxMCBA
QCBib29sIEdyYXBoaWNzTGF5ZXJDQTo6cmVtb3ZlQ0FBbmltYXRpb25Gcm9tTGF5ZXIoQW5pbWF0
ZWRQcm9wZXJ0eUlEIHByb3BlcnR5LCBjbwogICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7CiAgICAgICAgICAgICAvLyBTa2lwIGltbWVkaWF0ZSByZXBsaWNhcywgc2luY2UgdGhleSBt
b3ZlIHdpdGggdGhlIG9yaWdpbmFsLgotICAgICAgICAgICAgaWYgKG1fcmVwbGljYUxheWVyICYm
IGlzUmVwbGljYXRlZFJvb3RDbG9uZShpdC0+Zmlyc3QpKQorICAgICAgICAgICAgaWYgKG1fcmVw
bGljYUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9uZShpdC0+a2V5KSkKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgaXQtPnNlY29uZCAtPnJlbW92ZUFuaW1hdGlv
bkZvcktleShhbmltYXRpb25JRCk7CisgICAgICAgICAgICBpdC0+dmFsdWUtPnJlbW92ZUFuaW1h
dGlvbkZvcktleShhbmltYXRpb25JRCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIHRy
dWU7CkBAIC0xNzg1LDkgKzE3ODUsOSBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6cGF1c2VDQUFu
aW1hdGlvbk9uTGF5ZXIoQW5pbWF0ZWRQcm9wZXJ0eUlEIHByb3BlcnR5LCBjb25zdAogICAgICAg
ICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAg
ICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICAvLyBTa2lwIGltbWVkaWF0
ZSByZXBsaWNhcywgc2luY2UgdGhleSBtb3ZlIHdpdGggdGhlIG9yaWdpbmFsLgotICAgICAgICAg
ICAgaWYgKG1fcmVwbGljYUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9uZShpdC0+Zmlyc3Qp
KQorICAgICAgICAgICAgaWYgKG1fcmVwbGljYUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9u
ZShpdC0+a2V5KSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGl0LT5z
ZWNvbmQtPmFkZEFuaW1hdGlvbkZvcktleShhbmltYXRpb25JRCwgbmV3QW5pbS5nZXQoKSk7Cisg
ICAgICAgICAgICBpdC0+dmFsdWUtPmFkZEFuaW1hdGlvbkZvcktleShhbmltYXRpb25JRCwgbmV3
QW5pbS5nZXQoKSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0yMzExLDggKzIzMTEsOCBAQCB2
b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c3VzcGVuZEFuaW1hdGlvbnMoZG91YmxlIHRpbWUpCiAgICAg
aWYgKExheWVyTWFwKiBsYXllckNsb25lTWFwID0gcHJpbWFyeUxheWVyQ2xvbmVzKCkpIHsKICAg
ICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxheWVyQ2xvbmVNYXAtPmVuZCgp
OwogICAgICAgICBmb3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGxheWVyQ2xvbmVN
YXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgaXQtPnNlY29uZC0+
c2V0U3BlZWQoMCk7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRUaW1lT2Zmc2V0KHQpOwor
ICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRTcGVlZCgwKTsKKyAgICAgICAgICAgIGl0LT52YWx1
ZS0+c2V0VGltZU9mZnNldCh0KTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTIzMjYsOCArMjMy
Niw4IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpyZXN1bWVBbmltYXRpb25zKCkKICAgICBpZiAo
TGF5ZXJNYXAqIGxheWVyQ2xvbmVNYXAgPSBwcmltYXJ5TGF5ZXJDbG9uZXMoKSkgewogICAgICAg
ICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAg
ICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRT
cGVlZCgxKTsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNldFRpbWVPZmZzZXQoMCk7CisgICAg
ICAgICAgICBpdC0+dmFsdWUtPnNldFNwZWVkKDEpOworICAgICAgICAgICAgaXQtPnZhbHVlLT5z
ZXRUaW1lT2Zmc2V0KDApOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMjUzNywxMyArMjUzNywx
MyBAQCBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gR3JhcGhpY3NMYXllckNBOjpmaW5kT3JN
YWtlQ2xvbmUoQ2xvbmVJRCBjbG9uZUlELCBQbAogICAgIExheWVyTWFwOjpBZGRSZXN1bHQgYWRk
UmVzdWx0ID0gY2xvbmVzLT5hZGQoY2xvbmVJRCwgZHVtbXkpOwogICAgIGlmICghYWRkUmVzdWx0
LmlzTmV3RW50cnkpIHsKICAgICAgICAgLy8gVmFsdWUgd2FzIG5vdCBhZGRlZCwgc28gaXQgZXhp
c3RzIGFscmVhZHkuCi0gICAgICAgIHJlc3VsdExheWVyID0gYWRkUmVzdWx0Lml0ZXJhdG9yLT5z
ZWNvbmQuZ2V0KCk7CisgICAgICAgIHJlc3VsdExheWVyID0gYWRkUmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZS5nZXQoKTsKICAgICB9IGVsc2UgewogICAgICAgICByZXN1bHRMYXllciA9IGNsb25lTGF5
ZXIoc291cmNlTGF5ZXIsIGNsb25lTGV2ZWwpOwogI2lmbmRlZiBOREVCVUcKICAgICAgICAgcmVz
dWx0TGF5ZXItPnNldE5hbWUoU3RyaW5nOjpmb3JtYXQoIkNsb25lICVkIG9mIGxheWVyICVwIiwg
Y2xvbmVJRFswVV0sIHNvdXJjZUxheWVyLT5wbGF0Zm9ybUxheWVyKCkpKTsKICNlbmRpZgotICAg
ICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IHJlc3VsdExheWVyOworICAgICAgICBh
ZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gcmVzdWx0TGF5ZXI7CiAgICAgfQogCiAgICAgcmV0
dXJuIHJlc3VsdExheWVyOwpAQCAtMjczNSw5ICsyNzM1LDkgQEAgdm9pZCBHcmFwaGljc0xheWVy
Q0E6OnNldE9wYWNpdHlJbnRlcm5hbChmbG9hdCBhY2N1bXVsYXRlZE9wYWNpdHkpCiAgICAgaWYg
KGxheWVyQ2xvbmVNYXApIHsKICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IGxheWVyQ2xvbmVNYXAtPmVuZCgpOwogICAgICAgICBmb3IgKExheWVyTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IGxheWVyQ2xvbmVNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAg
ICAgICAgICAgaWYgKG1fcmVwbGljYUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9uZShpdC0+
Zmlyc3QpKQorICAgICAgICAgICAgaWYgKG1fcmVwbGljYUxheWVyICYmIGlzUmVwbGljYXRlZFJv
b3RDbG9uZShpdC0+a2V5KSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
IGl0LT5zZWNvbmQtPnNldE9wYWNpdHkobV9vcGFjaXR5KTsKKyAgICAgICAgICAgIGl0LT52YWx1
ZS0+c2V0T3BhY2l0eShtX29wYWNpdHkpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMjc0OSwx
MCArMjc0OSwxMCBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlT3BhY2l0eU9uTGF5ZXIo
KQogICAgIGlmIChMYXllck1hcCogbGF5ZXJDbG9uZU1hcCA9IHByaW1hcnlMYXllckNsb25lcygp
KSB7CiAgICAgICAgIExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBsYXllckNsb25lTWFw
LT5lbmQoKTsKICAgICAgICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXll
ckNsb25lTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGlmICht
X3JlcGxpY2FMYXllciAmJiBpc1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQtPmZpcnN0KSkKKyAgICAg
ICAgICAgIGlmIChtX3JlcGxpY2FMYXllciAmJiBpc1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQtPmtl
eSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIGl0LT5zZWNvbmQt
PnNldE9wYWNpdHkobV9vcGFjaXR5KTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+c2V0T3BhY2l0
eShtX29wYWNpdHkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9UaWxlQ2FjaGUubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvVGlsZUNhY2hlLm1tCmluZGV4IDZi
YTUyODA4OTI1MWQ0Y2I1ZjZlY2Y4NWZiZjg0ZDZhZGRkYzk1OTMuLjAzOWI2ODc3MjhkMTIxZDQw
YzE4NmJmZDFkMDVmNzAyZDkyYjEyZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL21hYy9UaWxlQ2FjaGUubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1RpbGVDYWNoZS5tbQpAQCAtNzYsNyArNzYsNyBAQCBUaWxl
Q2FjaGU6On5UaWxlQ2FjaGUoKQogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKICAgICBm
b3IgKFRpbGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpLCBlbmQgPSBtX3RpbGVz
LmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgV2ViVGlsZUxheWVyKiB0aWxlTGF5
ZXIgPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICBXZWJUaWxlTGF5ZXIqIHRpbGVMYXllciA9
IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgW3RpbGVMYXllciBzZXRUaWxlQ2FjaGU6MF07CiAg
ICAgfQogfQpAQCAtOTYsNyArOTYsNyBAQCB2b2lkIFRpbGVDYWNoZTo6dGlsZUNhY2hlTGF5ZXJC
b3VuZHNDaGFuZ2VkKCkKIHZvaWQgVGlsZUNhY2hlOjpzZXROZWVkc0Rpc3BsYXkoKQogewogICAg
IGZvciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCksIGVuZCA9
IG1fdGlsZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgW2l0LT5zZWNvbmQuZ2V0
KCkgc2V0TmVlZHNEaXNwbGF5XTsKKyAgICAgICAgW2l0LT52YWx1ZS5nZXQoKSBzZXROZWVkc0Rp
c3BsYXldOwogfQogCiB2b2lkIFRpbGVDYWNoZTo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0
IEludFJlY3QmIHJlY3QpCkBAIC0xNzcsOSArMTc3LDkgQEAgdm9pZCBUaWxlQ2FjaGU6OnNldFNj
YWxlKENHRmxvYXQgc2NhbGUpCiAgICAgcmV2YWxpZGF0ZVRpbGVzKCk7CiAKICAgICBmb3IgKFRp
bGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpLCBlbmQgPSBtX3RpbGVz
LmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgW2l0LT5zZWNvbmQuZ2V0KCkgc2V0
Q29udGVudHNTY2FsZTpkZXZpY2VTY2FsZUZhY3Rvcl07CisgICAgICAgIFtpdC0+dmFsdWUuZ2V0
KCkgc2V0Q29udGVudHNTY2FsZTpkZXZpY2VTY2FsZUZhY3Rvcl07CiAKLSAgICAgICAgSW50UmVj
dCB0aWxlUmVjdCA9IHJlY3RGb3JUaWxlSW5kZXgoaXQtPmZpcnN0KTsKKyAgICAgICAgSW50UmVj
dCB0aWxlUmVjdCA9IHJlY3RGb3JUaWxlSW5kZXgoaXQtPmtleSk7CiAgICAgICAgIEZsb2F0UmVj
dCBzY2FsZWRUaWxlUmVjdCA9IHRpbGVSZWN0OwogCiAgICAgICAgIHNjYWxlZFRpbGVSZWN0LnNj
YWxlKDEgLyBtX3NjYWxlKTsKQEAgLTE5OSw3ICsxOTksNyBAQCB2b2lkIFRpbGVDYWNoZTo6c2V0
QWNjZWxlcmF0ZXNEcmF3aW5nKGJvb2wgYWNjZWxlcmF0ZXNEcmF3aW5nKQogICAgIG1fYWNjZWxl
cmF0ZXNEcmF3aW5nID0gYWNjZWxlcmF0ZXNEcmF3aW5nOwogCiAgICAgZm9yIChUaWxlTWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKSwgZW5kID0gbV90aWxlcy5lbmQoKTsg
aXQgIT0gZW5kOyArK2l0KQotICAgICAgICBbaXQtPnNlY29uZC5nZXQoKSBzZXRBY2NlbGVyYXRl
c0RyYXdpbmc6bV9hY2NlbGVyYXRlc0RyYXdpbmddOworICAgICAgICBbaXQtPnZhbHVlLmdldCgp
IHNldEFjY2VsZXJhdGVzRHJhd2luZzptX2FjY2VsZXJhdGVzRHJhd2luZ107CiAjZWxzZQogICAg
IFVOVVNFRF9QQVJBTShhY2NlbGVyYXRlc0RyYXdpbmcpOwogI2VuZGlmCkBAIC0yNDksNyArMjQ5
LDcgQEAgdm9pZCBUaWxlQ2FjaGU6OnNldFRpbGVEZWJ1Z0JvcmRlcldpZHRoKGZsb2F0IGJvcmRl
cldpZHRoKQogCiAgICAgbV90aWxlRGVidWdCb3JkZXJXaWR0aCA9IGJvcmRlcldpZHRoOwogICAg
IGZvciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCksIGVuZCA9
IG1fdGlsZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgW2l0LT5zZWNvbmQuZ2V0
KCkgc2V0Qm9yZGVyV2lkdGg6bV90aWxlRGVidWdCb3JkZXJXaWR0aF07CisgICAgICAgIFtpdC0+
dmFsdWUuZ2V0KCkgc2V0Qm9yZGVyV2lkdGg6bV90aWxlRGVidWdCb3JkZXJXaWR0aF07CiB9CiAK
IHZvaWQgVGlsZUNhY2hlOjpzZXRUaWxlRGVidWdCb3JkZXJDb2xvcihDR0NvbG9yUmVmIGJvcmRl
ckNvbG9yKQpAQCAtMjU5LDcgKzI1OSw3IEBAIHZvaWQgVGlsZUNhY2hlOjpzZXRUaWxlRGVidWdC
b3JkZXJDb2xvcihDR0NvbG9yUmVmIGJvcmRlckNvbG9yKQogCiAgICAgbV90aWxlRGVidWdCb3Jk
ZXJDb2xvciA9IGJvcmRlckNvbG9yOwogICAgIGZvciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtX3RpbGVzLmJlZ2luKCksIGVuZCA9IG1fdGlsZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytp
dCkKLSAgICAgICAgW2l0LT5zZWNvbmQuZ2V0KCkgc2V0Qm9yZGVyQ29sb3I6bV90aWxlRGVidWdC
b3JkZXJDb2xvci5nZXQoKV07CisgICAgICAgIFtpdC0+dmFsdWUuZ2V0KCkgc2V0Qm9yZGVyQ29s
b3I6bV90aWxlRGVidWdCb3JkZXJDb2xvci5nZXQoKV07CiB9CiAKIEludFJlY3QgVGlsZUNhY2hl
Ojpib3VuZHMoKSBjb25zdApAQCAtMzY1LDkgKzM2NSw5IEBAIHZvaWQgVGlsZUNhY2hlOjpyZXZh
bGlkYXRlVGlsZXMoKQogICAgIFZlY3RvcjxUaWxlSW5kZXg+IHRpbGVzVG9SZW1vdmU7CiAKICAg
ICBmb3IgKFRpbGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpLCBlbmQgPSBtX3Rp
bGVzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgY29uc3QgVGlsZUluZGV4JiB0
aWxlSW5kZXggPSBpdC0+Zmlyc3Q7CisgICAgICAgIGNvbnN0IFRpbGVJbmRleCYgdGlsZUluZGV4
ID0gaXQtPmtleTsKIAotICAgICAgICBXZWJUaWxlTGF5ZXIqIHRpbGVMYXllciA9IGl0LT5zZWNv
bmQuZ2V0KCk7CisgICAgICAgIFdlYlRpbGVMYXllciogdGlsZUxheWVyID0gaXQtPnZhbHVlLmdl
dCgpOwogCiAgICAgICAgIGlmICghcmVjdEZvclRpbGVJbmRleCh0aWxlSW5kZXgpLmludGVyc2Vj
dHModGlsZUNvdmVyYWdlUmVjdCkpIHsKICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGlzIGxheWVy
LgpAQCAtMzk1LDcgKzM5NSw3IEBAIHZvaWQgVGlsZUNhY2hlOjpyZXZhbGlkYXRlVGlsZXMoKQog
ICAgICAgICAgICAgVGlsZUluZGV4IHRpbGVJbmRleCh4LCB5KTsKIAogICAgICAgICAgICAgSW50
UmVjdCB0aWxlUmVjdCA9IHJlY3RGb3JUaWxlSW5kZXgodGlsZUluZGV4KTsKLSAgICAgICAgICAg
IFJldGFpblB0cjxXZWJUaWxlTGF5ZXI+JiB0aWxlTGF5ZXIgPSBtX3RpbGVzLmFkZCh0aWxlSW5k
ZXgsIDApLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgICAgICBSZXRhaW5QdHI8V2ViVGlsZUxh
eWVyPiYgdGlsZUxheWVyID0gbV90aWxlcy5hZGQodGlsZUluZGV4LCAwKS5pdGVyYXRvci0+dmFs
dWU7CiAgICAgICAgICAgICBpZiAoIXRpbGVMYXllcikgewogICAgICAgICAgICAgICAgIHRpbGVM
YXllciA9IGNyZWF0ZVRpbGVMYXllcih0aWxlUmVjdCk7CiAgICAgICAgICAgICAgICAgW21fdGls
ZUNvbnRhaW5lckxheWVyLmdldCgpIGFkZFN1YmxheWVyOnRpbGVMYXllci5nZXQoKV07CkBAIC00
MTUsNyArNDE1LDcgQEAgdm9pZCBUaWxlQ2FjaGU6OnJldmFsaWRhdGVUaWxlcygpCiAKICAgICBt
X3RpbGVDb3ZlcmFnZVJlY3QgPSBJbnRSZWN0KCk7CiAgICAgZm9yIChUaWxlTWFwOjppdGVyYXRv
ciBpdCA9IG1fdGlsZXMuYmVnaW4oKSwgZW5kID0gbV90aWxlcy5lbmQoKTsgaXQgIT0gZW5kOyAr
K2l0KSB7Ci0gICAgICAgIGNvbnN0IFRpbGVJbmRleCYgdGlsZUluZGV4ID0gaXQtPmZpcnN0Owor
ICAgICAgICBjb25zdCBUaWxlSW5kZXgmIHRpbGVJbmRleCA9IGl0LT5rZXk7CiAKICAgICAgICAg
bV90aWxlQ292ZXJhZ2VSZWN0LnVuaXRlKHJlY3RGb3JUaWxlSW5kZXgodGlsZUluZGV4KSk7CiAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2lu
L1BsYXRmb3JtQ0FMYXllcldpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luLmNwcAppbmRleCA0OGIyMGQwYjhiZDI0MmFiNTQ5
YjhmZTQ0MmRmNDRhYjM2NzJlYjg1Li43MDE2OGIyMTA0ZGIzNjlkYTA3NTdhMTE0NDYyMjExMWJj
MzA2MWYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93
aW4vUGxhdGZvcm1DQUxheWVyV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luLmNwcApAQCAtMTY3LDcgKzE2Nyw3IEBA
IHZvaWQgUGxhdGZvcm1DQUxheWVyOjphbmltYXRpb25TdGFydGVkKENGVGltZUludGVydmFsIGJl
Z2luVGltZSkKIAogICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8UGxhdGZvcm1DQUFuaW1hdGlv
bj4gPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9hbmltYXRpb25zLmVuZCgpOwogICAgIGZvciAo
SGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiA+Ojpjb25zdF9pdGVy
YXRvciBpdCA9IG1fYW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAg
IGl0LT5zZWNvbmQtPnNldEFjdHVhbFN0YXJ0VGltZUlmTmVlZGVkKGNhY2ZCZWdpblRpbWUpOwor
ICAgICAgICBpdC0+dmFsdWUtPnNldEFjdHVhbFN0YXJ0VGltZUlmTmVlZGVkKGNhY2ZCZWdpblRp
bWUpOwogCiAgICAgaWYgKG1fb3duZXIpCiAgICAgICAgIG1fb3duZXItPnBsYXRmb3JtQ0FMYXll
ckFuaW1hdGlvblN0YXJ0ZWQoYmVnaW5UaW1lKTsKQEAgLTE3Nyw4ICsxNzcsOCBAQCBzdGF0aWMg
dm9pZCByZXN1Ym1pdEFsbEFuaW1hdGlvbnMoUGxhdGZvcm1DQUxheWVyKiBsYXllcikKIHsKICAg
ICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+ID46OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IGxheWVyLT5hbmltYXRpb25zKCkuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFw
PFN0cmluZywgUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+ID46OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbGF5ZXItPmFuaW1hdGlvbnMoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBzKEFkb3B0Q0YsIGl0LT5maXJzdC5jcmVhdGVDRlN0
cmluZygpKTsKLSAgICAgICAgQ0FDRkxheWVyQWRkQW5pbWF0aW9uKGxheWVyLT5wbGF0Zm9ybUxh
eWVyKCksIHMuZ2V0KCksIGl0LT5zZWNvbmQtPnBsYXRmb3JtQW5pbWF0aW9uKCkpOworICAgICAg
ICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHMoQWRvcHRDRiwgaXQtPmtleS5jcmVhdGVDRlN0cmlu
ZygpKTsKKyAgICAgICAgQ0FDRkxheWVyQWRkQW5pbWF0aW9uKGxheWVyLT5wbGF0Zm9ybUxheWVy
KCksIHMuZ2V0KCksIGl0LT52YWx1ZS0+cGxhdGZvcm1BbmltYXRpb24oKSk7CiAgICAgfQogfQog
CkBAIC0zMjgsNyArMzI4LDcgQEAgUGFzc1JlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBQbGF0
Zm9ybUNBTGF5ZXI6OmFuaW1hdGlvbkZvcktleShjb25zdCBTdHJpbmcmIGsKICAgICBpZiAoaXQg
PT0gbV9hbmltYXRpb25zLmVuZCgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHJldHVybiBp
dC0+c2Vjb25kOworICAgIHJldHVybiBpdC0+dmFsdWU7CiB9CiAKIFBsYXRmb3JtQ0FMYXllciog
UGxhdGZvcm1DQUxheWVyOjptYXNrKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUNocm9taXVtV2luLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUNocm9taXVt
V2luLmNwcAppbmRleCA5Zjg5OThjZGFmZDgxMmUxODllNjVhMjg1ZmI2YzQ3NTMwYTQ2ZTBjLi4w
Yzg2NTUwMGRlODhjM2Q4ZGM2MWZiNWM4MzFkOWVjMzRlNDEwZjcwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2FjaGVDaHJvbWl1bVdp
bi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9u
dENhY2hlQ2hyb21pdW1XaW4uY3BwCkBAIC0yMjMsMTAgKzIyMywxMCBAQCBzdGF0aWMgYm9vbCBM
b29rdXBBbHROYW1lKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBhbHROYW1lKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICBzdGF0aWMgaW50IHN5c3RlbUNwID0gOjpHZXRBQ1AoKTsK
LSAgICBpbnQgZm9udENwID0gaXRlci0+c2Vjb25kLT5jb2RlUGFnZTsKKyAgICBpbnQgZm9udENw
ID0gaXRlci0+dmFsdWUtPmNvZGVQYWdlOwogCiAgICAgaWYgKChpc0FzY2lpICYmIHN5c3RlbUNw
ID09IGZvbnRDcCkgfHwgKCFpc0FzY2lpICYmIHN5c3RlbUNwICE9IGZvbnRDcCkpIHsKLSAgICAg
ICAgYWx0TmFtZSA9IFN0cmluZyhpdGVyLT5zZWNvbmQtPm5hbWUpOworICAgICAgICBhbHROYW1l
ID0gU3RyaW5nKGl0ZXItPnZhbHVlLT5uYW1lKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogCkBAIC0yNzcsNyArMjc3LDcgQEAgc3RhdGljIGJvb2wgZm9udENvbnRhaW5zQ2hhcmFjdGVy
KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEqIGZvbnREYXRhLAogCiAgICAgSGFzaE1hcDxjb25zdCB3
Y2hhcl90KiwgaWN1OjpVbmljb2RlU2V0Kj46Oml0ZXJhdG9yIGl0ID0gZm9udENtYXBDYWNoZS0+
ZmluZChmYW1pbHkpOwogICAgIGlmIChpdCAhPSBmb250Q21hcENhY2hlLT5lbmQoKSkKLSAgICAg
ICAgcmV0dXJuIGl0LT5zZWNvbmQtPmNvbnRhaW5zKGNoYXJhY3Rlcik7CisgICAgICAgIHJldHVy
biBpdC0+dmFsdWUtPmNvbnRhaW5zKGNoYXJhY3Rlcik7CiAKICAgICBIRk9OVCBoZm9udCA9IGZv
bnREYXRhLT5oZm9udCgpOwogICAgIEhXbmREQyBoZGMoMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250VXRpbHNDaHJvbWl1bVdpbi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250VXRpbHND
aHJvbWl1bVdpbi5jcHAKaW5kZXggZGY5NDFjYjkwMzNmZGMwNzYwZjYxZGI5Y2ZhZDFmNGE5MmRk
ZDlhMy4uMTBmMWZkMDc4NmVhNDg4M2E5YjM0MzE2YWUwNmMzYWI4MjY5NWI0NiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFV0aWxzQ2hy
b21pdW1XaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ZvbnRVdGlsc0Nocm9taXVtV2luLmNwcApAQCAtNDE1LDcgKzQxNSw3IEBAIGJvb2wgZ2V0
RGVyaXZlZEZvbnREYXRhKGNvbnN0IFVDaGFyKiBmYW1pbHksCiAgICAgICAgIC8vIGNoZWNrIGl0
IGFnYWluc3Qgd2hhdCB3ZSBhY3R1YWxseSB3YW50IChhcyBpcyBkb25lIGluCiAgICAgICAgIC8v
IEZvbnRDYWNoZVdpbi5jcHApCiAgICAgICAgIEZvbnREYXRhQ2FjaGU6OkFkZFJlc3VsdCBlbnRy
eSA9IGZvbnREYXRhQ2FjaGUuYWRkKGZvbnRLZXksIEZvbnREYXRhKCkpOwotICAgICAgICBkZXJp
dmVkID0gJmVudHJ5Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgIGRlcml2ZWQgPSAmZW50cnku
aXRlcmF0b3ItPnZhbHVlOwogICAgICAgICBkZXJpdmVkLT5oZm9udCA9IENyZWF0ZUZvbnRJbmRp
cmVjdChsb2dmb250KTsKICAgICAgICAgLy8gR2V0QXNjZW50IG1heSByZXR1cm4ga1VuZGVmaW5l
ZEFzY2VudCwgYnV0IHdlIHN0aWxsIHdhbnQgdG8KICAgICAgICAgLy8gY2FjaGUgaXQgc28gdGhh
dCB3ZSB3b24ndCBoYXZlIHRvIGNhbGwgQ3JlYXRlRm9udEluZGlyZWN0IG9uY2UKQEAgLTQyMyw3
ICs0MjMsNyBAQCBib29sIGdldERlcml2ZWRGb250RGF0YShjb25zdCBVQ2hhciogZmFtaWx5LAog
ICAgICAgICBkZXJpdmVkLT5hc2NlbnQgPSBnZXRBc2NlbnQoZGVyaXZlZC0+aGZvbnQpOwogICAg
ICAgICBkZXJpdmVkLT5zcGFjZUdseXBoID0gZ2V0U3BhY2VHbHlwaChkZXJpdmVkLT5oZm9udCk7
CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZGVyaXZlZCA9ICZpdGVyLT5zZWNvbmQ7CisgICAgICAg
IGRlcml2ZWQgPSAmaXRlci0+dmFsdWU7CiAgICAgICAgIC8vIExhc3QgdGltZSwgR2V0QXNjZW50
IGZhaWxlZCBzbyB0aGF0IG9ubHkgSEZPTlQgd2FzCiAgICAgICAgIC8vIGNhY2hlZC4gVHJ5IG9u
Y2UgbW9yZSBhc3N1bWluZyB0aGF0IFRyeVByZWxvYWRGb250CiAgICAgICAgIC8vIHdhcyBjYWxs
ZWQgYnkgYSBjYWxsZXIgYmV0d2VlbiBjYWxscy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0u
Y3BwCmluZGV4IDVkYzY1ZWM1YTIwODFhYWQ0NDc3ZDMyODI5Mzk0YTM2MmQwMzc0ZWIuLjJjM2Qw
Y2Q0ZWRjMmNhODEzODcyYjNiYjk5MjMzYWY4MTM2YTA1YWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXll
ckNocm9taXVtLmNwcApAQCAtMjI1LDkgKzIyNSw5IEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVt
OjpwdXNoUHJvcGVydGllc1RvKENDTGF5ZXJJbXBsKiBsYXllcikKICAgICBWZWN0b3I8VXBkYXRh
YmxlVGlsZSo+IGludmFsaWRUaWxlczsKIAogICAgIGZvciAoQ0NMYXllclRpbGluZ0RhdGE6OlRp
bGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX3RpbGVyLT50aWxlcygpLmJlZ2luKCk7IGl0
ZXIgIT0gbV90aWxlci0+dGlsZXMoKS5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIGludCBpID0g
aXRlci0+Zmlyc3QuZmlyc3Q7Ci0gICAgICAgIGludCBqID0gaXRlci0+Zmlyc3Quc2Vjb25kOwot
ICAgICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gc3RhdGljX2Nhc3Q8VXBkYXRhYmxlVGlsZSo+
KGl0ZXItPnNlY29uZC5nZXQoKSk7CisgICAgICAgIGludCBpID0gaXRlci0+a2V5LmZpcnN0Owor
ICAgICAgICBpbnQgaiA9IGl0ZXItPmtleS5zZWNvbmQ7CisgICAgICAgIFVwZGF0YWJsZVRpbGUq
IHRpbGUgPSBzdGF0aWNfY2FzdDxVcGRhdGFibGVUaWxlKj4oaXRlci0+dmFsdWUuZ2V0KCkpOwog
ICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgbm90IGV2ZXIgYmUgbnVsbC4KICAgICAgICAg
aWYgKCF0aWxlKQogICAgICAgICAgICAgY29udGludWU7CkBAIC0yNTcsNyArMjU3LDcgQEAgdm9p
ZCBUaWxlZExheWVyQ2hyb21pdW06OnNldExheWVyVHJlZUhvc3QoQ0NMYXllclRyZWVIb3N0KiBo
b3N0KQogewogICAgIGlmIChob3N0ICYmIGhvc3QgIT0gbGF5ZXJUcmVlSG9zdCgpKSB7CiAgICAg
ICAgIGZvciAoQ0NMYXllclRpbGluZ0RhdGE6OlRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIg
PSBtX3RpbGVyLT50aWxlcygpLmJlZ2luKCk7IGl0ZXIgIT0gbV90aWxlci0+dGlsZXMoKS5lbmQo
KTsgKytpdGVyKSB7Ci0gICAgICAgICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gc3RhdGljX2Nh
c3Q8VXBkYXRhYmxlVGlsZSo+KGl0ZXItPnNlY29uZC5nZXQoKSk7CisgICAgICAgICAgICBVcGRh
dGFibGVUaWxlKiB0aWxlID0gc3RhdGljX2Nhc3Q8VXBkYXRhYmxlVGlsZSo+KGl0ZXItPnZhbHVl
LmdldCgpKTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBub3QgZXZlciBiZSBu
dWxsLgogICAgICAgICAgICAgaWYgKCF0aWxlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpA
QCAtMzI1LDcgKzMyNSw3IEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjppbnZhbGlkYXRlQ29u
dGVudFJlY3QoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGZvciAoQ0NMYXllclRpbGluZ0RhdGE6OlRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIg
PSBtX3RpbGVyLT50aWxlcygpLmJlZ2luKCk7IGl0ZXIgIT0gbV90aWxlci0+dGlsZXMoKS5lbmQo
KTsgKytpdGVyKSB7Ci0gICAgICAgIFVwZGF0YWJsZVRpbGUqIHRpbGUgPSBzdGF0aWNfY2FzdDxV
cGRhdGFibGVUaWxlKj4oaXRlci0+c2Vjb25kLmdldCgpKTsKKyAgICAgICAgVXBkYXRhYmxlVGls
ZSogdGlsZSA9IHN0YXRpY19jYXN0PFVwZGF0YWJsZVRpbGUqPihpdGVyLT52YWx1ZS5nZXQoKSk7
CiAgICAgICAgIEFTU0VSVCh0aWxlKTsKICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIG5v
dCBldmVyIGJlIG51bGwuCiAgICAgICAgIGlmICghdGlsZSkKQEAgLTY1NSw3ICs2NTUsNyBAQCB2
b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6c2V0VGV4dHVyZVByaW9yaXRpZXMoY29uc3QgQ0NQcmlv
cml0eUNhbGN1bGF0b3ImIHByaW9yaQogCiAgICAgLy8gTm93IHVwZGF0ZSBwcmlvcml0aWVzIG9u
IGFsbCB0aWxlcyB3ZSBoYXZlIGluIHRoZSBsYXllciwgbm8gbWF0dGVyIHdoZXJlIHRoZXkgYXJl
LgogICAgIGZvciAoQ0NMYXllclRpbGluZ0RhdGE6OlRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ZXIgPSBtX3RpbGVyLT50aWxlcygpLmJlZ2luKCk7IGl0ZXIgIT0gbV90aWxlci0+dGlsZXMoKS5l
bmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIFVwZGF0YWJsZVRpbGUqIHRpbGUgPSBzdGF0aWNfY2Fz
dDxVcGRhdGFibGVUaWxlKj4oaXRlci0+c2Vjb25kLmdldCgpKTsKKyAgICAgICAgVXBkYXRhYmxl
VGlsZSogdGlsZSA9IHN0YXRpY19jYXN0PFVwZGF0YWJsZVRpbGUqPihpdGVyLT52YWx1ZS5nZXQo
KSk7CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBub3QgZXZlciBiZSBudWxsLgogICAg
ICAgICBpZiAoIXRpbGUpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTY4MCw3ICs2ODAsNyBA
QCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6cmVzZXRVcGRhdGVTdGF0ZSgpCiAKICAgICBDQ0xh
eWVyVGlsaW5nRGF0YTo6VGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV90aWxlci0+dGls
ZXMoKS5lbmQoKTsKICAgICBmb3IgKENDTGF5ZXJUaWxpbmdEYXRhOjpUaWxlTWFwOjpjb25zdF9p
dGVyYXRvciBpdGVyID0gbV90aWxlci0+dGlsZXMoKS5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytp
dGVyKSB7Ci0gICAgICAgIFVwZGF0YWJsZVRpbGUqIHRpbGUgPSBzdGF0aWNfY2FzdDxVcGRhdGFi
bGVUaWxlKj4oaXRlci0+c2Vjb25kLmdldCgpKTsKKyAgICAgICAgVXBkYXRhYmxlVGlsZSogdGls
ZSA9IHN0YXRpY19jYXN0PFVwZGF0YWJsZVRpbGUqPihpdGVyLT52YWx1ZS5nZXQoKSk7CiAgICAg
ICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBub3QgZXZlciBiZSBudWxsLgogICAgICAgICBpZiAo
IXRpbGUpCiAgICAgICAgICAgICBjb250aW51ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGFtYWdlVHJhY2tlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RhbWFnZVRyYWNrZXIu
Y3BwCmluZGV4IDExNDQ5OWJhMTdlZDRmZjE1ZGUwOGUwY2Q0MGZhMzM2NzFhNjE0ODYuLjc1YTE1
NjQ4MWUzZTIxNzc5ZmY5N2U3ZjY0ZTdkMDk5MjI0OWQ1M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGFtYWdlVHJhY2tlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1h
Z2VUcmFja2VyLmNwcApAQCAtMjMzLDcgKzIzMyw3IEBAIEZsb2F0UmVjdCBDQ0RhbWFnZVRyYWNr
ZXI6OnRyYWNrRGFtYWdlRnJvbUxlZnRvdmVyUmVjdHMoKQogICAgIEZsb2F0UmVjdCBkYW1hZ2VS
ZWN0ID0gRmxvYXRSZWN0KCk7CiAKICAgICBmb3IgKFJlY3RNYXA6Oml0ZXJhdG9yIGl0ID0gbV9j
dXJyZW50UmVjdEhpc3RvcnktPmJlZ2luKCk7IGl0ICE9IG1fY3VycmVudFJlY3RIaXN0b3J5LT5l
bmQoKTsgKytpdCkKLSAgICAgICAgZGFtYWdlUmVjdC51bml0ZShpdC0+c2Vjb25kKTsKKyAgICAg
ICAgZGFtYWdlUmVjdC51bml0ZShpdC0+dmFsdWUpOwogCiAgICAgbV9jdXJyZW50UmVjdEhpc3Rv
cnktPmNsZWFyKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDRGlyZWN0UmVuZGVyZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEaXJlY3RSZW5kZXJlci5jcHAKaW5kZXggNmI1
Mzc4OWY1NTNlYjVkNTA3MzZkMjdlN2Q4OGNlNTEyMjU3Y2E1Yi4uOTY0Yzk0NzQ0NmViZjBkYWQy
ZGM4YzQzYjMyMDI2NzkzZTVjZWQxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEaXJlY3RSZW5kZXJlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEaXJlY3RSZW5kZXJlci5j
cHAKQEAgLTExOSwxNSArMTE5LDE1IEBAIHZvaWQgQ0NEaXJlY3RSZW5kZXJlcjo6ZGVjaWRlUmVu
ZGVyUGFzc0FsbG9jYXRpb25zRm9yRnJhbWUoY29uc3QgQ0NSZW5kZXJQYXNzTGlzCiAgICAgVmVj
dG9yPENDUmVuZGVyUGFzczo6SWQ+IHBhc3Nlc1RvRGVsZXRlOwogICAgIEhhc2hNYXA8Q0NSZW5k
ZXJQYXNzOjpJZCwgT3duUHRyPENhY2hlZFRleHR1cmU+ID46OmNvbnN0X2l0ZXJhdG9yIHBhc3NJ
dGVyYXRvcjsKICAgICBmb3IgKHBhc3NJdGVyYXRvciA9IG1fcmVuZGVyUGFzc1RleHR1cmVzLmJl
Z2luKCk7IHBhc3NJdGVyYXRvciAhPSBtX3JlbmRlclBhc3NUZXh0dXJlcy5lbmQoKTsgKytwYXNz
SXRlcmF0b3IpIHsKLSAgICAgICAgY29uc3QgQ0NSZW5kZXJQYXNzKiByZW5kZXJQYXNzSW5GcmFt
ZSA9IHJlbmRlclBhc3Nlc0luRnJhbWUuZ2V0KHBhc3NJdGVyYXRvci0+Zmlyc3QpOworICAgICAg
ICBjb25zdCBDQ1JlbmRlclBhc3MqIHJlbmRlclBhc3NJbkZyYW1lID0gcmVuZGVyUGFzc2VzSW5G
cmFtZS5nZXQocGFzc0l0ZXJhdG9yLT5rZXkpOwogICAgICAgICBpZiAoIXJlbmRlclBhc3NJbkZy
YW1lKSB7Ci0gICAgICAgICAgICBwYXNzZXNUb0RlbGV0ZS5hcHBlbmQocGFzc0l0ZXJhdG9yLT5m
aXJzdCk7CisgICAgICAgICAgICBwYXNzZXNUb0RlbGV0ZS5hcHBlbmQocGFzc0l0ZXJhdG9yLT5r
ZXkpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAogICAgICAgICBjb25zdCBJ
bnRTaXplJiByZXF1aXJlZFNpemUgPSByZW5kZXJQYXNzVGV4dHVyZVNpemUocmVuZGVyUGFzc0lu
RnJhbWUpOwogICAgICAgICBHQzNEZW51bSByZXF1aXJlZEZvcm1hdCA9IHJlbmRlclBhc3NUZXh0
dXJlRm9ybWF0KHJlbmRlclBhc3NJbkZyYW1lKTsKLSAgICAgICAgQ2FjaGVkVGV4dHVyZSogdGV4
dHVyZSA9IHBhc3NJdGVyYXRvci0+c2Vjb25kLmdldCgpOworICAgICAgICBDYWNoZWRUZXh0dXJl
KiB0ZXh0dXJlID0gcGFzc0l0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKICAgICAgICAgQVNTRVJUKHRl
eHR1cmUpOwogCiAgICAgICAgIGlmICh0ZXh0dXJlLT5pZCgpICYmICh0ZXh0dXJlLT5zaXplKCkg
IT0gcmVxdWlyZWRTaXplIHx8IHRleHR1cmUtPmZvcm1hdCgpICE9IHJlcXVpcmVkRm9ybWF0KSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUaWxpbmdEYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUaWxpbmdEYXRhLmNwcAppbmRleCA5YjU1MTU2ZDk1YmEzNDMz
ZmY2YzE2YzZlYjU1MDlhYjcxMDI5ZDE5Li5hODFlMDZjMDUwOTJiMTNmOWE2YmYwMDQ2OTI1ZGYz
ZDU0YTI3ZjNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVGlsaW5nRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRpbGluZ0RhdGEuY3BwCkBAIC0xNTMs
OCArMTUzLDggQEAgdm9pZCBDQ0xheWVyVGlsaW5nRGF0YTo6c2V0Qm91bmRzKGNvbnN0IEludFNp
emUmIHNpemUpCiAgICAgY29udGVudFJlY3RUb1RpbGVJbmRpY2VzKEludFJlY3QoSW50UG9pbnQo
KSwgc2l6ZSksIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CiAgICAgVmVjdG9yPFRpbGVNYXBL
ZXk+IGludmFsaWRUaWxlS2V5czsKICAgICBmb3IgKFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV90aWxlcy5iZWdpbigpOyBpdCAhPSBtX3RpbGVzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAg
IGlmIChpdC0+Zmlyc3QuZmlyc3QgPiByaWdodCB8fCBpdC0+Zmlyc3Quc2Vjb25kID4gYm90dG9t
KQotICAgICAgICAgICAgaW52YWxpZFRpbGVLZXlzLmFwcGVuZChpdC0+Zmlyc3QpOworICAgICAg
ICBpZiAoaXQtPmtleS5maXJzdCA+IHJpZ2h0IHx8IGl0LT5rZXkuc2Vjb25kID4gYm90dG9tKQor
ICAgICAgICAgICAgaW52YWxpZFRpbGVLZXlzLmFwcGVuZChpdC0+a2V5KTsKICAgICB9CiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbnZhbGlkVGlsZUtleXMuc2l6ZSgpOyArK2kpCiAgICAg
ICAgIG1fdGlsZXMucmVtb3ZlKGludmFsaWRUaWxlS2V5c1tpXSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3Qu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0LmNwcAppbmRleCA5ZmVkNDc5ZjdkNTk2MTU3MTcyZTQyNWZlMzMzNmE4MWU4OWU2
NmY3Li4zNDU0N2UxMzIwODUyMmNlM2E2MzkzNTdhOTFmNmU1M2QzMjU5Y2ZiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTExOSw3ICsxMTksNyBAQCBDQ0xheWVyVHJlZUhv
c3Q6On5DQ0xheWVyVHJlZUhvc3QoKQogICAgIG51bUxheWVyVHJlZUluc3RhbmNlcy0tOwogICAg
IFJhdGVMaW1pdGVyTWFwOjppdGVyYXRvciBpdCA9IG1fcmF0ZUxpbWl0ZXJzLmJlZ2luKCk7CiAg
ICAgaWYgKGl0ICE9IG1fcmF0ZUxpbWl0ZXJzLmVuZCgpKQotICAgICAgICBpdC0+c2Vjb25kLT5z
dG9wKCk7CisgICAgICAgIGl0LT52YWx1ZS0+c3RvcCgpOwogfQogCiB2b2lkIENDTGF5ZXJUcmVl
SG9zdDo6c2V0U3VyZmFjZVJlYWR5KCkKQEAgLTcyMCw3ICs3MjAsNyBAQCB2b2lkIENDTGF5ZXJU
cmVlSG9zdDo6c3RhcnRSYXRlTGltaXRlcihXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEKiBj
b250ZXh0KQogICAgIEFTU0VSVChjb250ZXh0KTsKICAgICBSYXRlTGltaXRlck1hcDo6aXRlcmF0
b3IgaXQgPSBtX3JhdGVMaW1pdGVycy5maW5kKGNvbnRleHQpOwogICAgIGlmIChpdCAhPSBtX3Jh
dGVMaW1pdGVycy5lbmQoKSkKLSAgICAgICAgaXQtPnNlY29uZC0+c3RhcnQoKTsKKyAgICAgICAg
aXQtPnZhbHVlLT5zdGFydCgpOwogICAgIGVsc2UgewogICAgICAgICBSZWZQdHI8UmF0ZUxpbWl0
ZXI+IHJhdGVMaW1pdGVyID0gUmF0ZUxpbWl0ZXI6OmNyZWF0ZShjb250ZXh0LCB0aGlzKTsKICAg
ICAgICAgbV9yYXRlTGltaXRlcnMuc2V0KGNvbnRleHQsIHJhdGVMaW1pdGVyKTsKQEAgLTczMiw3
ICs3MzIsNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c3RvcFJhdGVMaW1pdGVyKFdlYktpdDo6
V2ViR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCiB7CiAgICAgUmF0ZUxpbWl0ZXJNYXA6Oml0
ZXJhdG9yIGl0ID0gbV9yYXRlTGltaXRlcnMuZmluZChjb250ZXh0KTsKICAgICBpZiAoaXQgIT0g
bV9yYXRlTGltaXRlcnMuZW5kKCkpIHsKLSAgICAgICAgaXQtPnNlY29uZC0+c3RvcCgpOworICAg
ICAgICBpdC0+dmFsdWUtPnN0b3AoKTsKICAgICAgICAgbV9yYXRlTGltaXRlcnMucmVtb3ZlKGl0
KTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCmluZGV4
IGNjOTI4MDRjMjI1MTY5OWE2NTcwYTY0ZTI2MGUzMTk3MGJmOGY2MzMuLjMyYWMwZDFiMzFiMzkz
ZGU0ZDY2ZGNmNGI1MmNhZWZlYjNkZTA2MWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdEltcGwuY3BwCkBAIC00MDYsNyArNDA2LDcgQEAgc3RhdGljIGlubGluZSBDQ1JlbmRlclBh
c3MqIGZpbmRSZW5kZXJQYXNzQnlJZChDQ1JlbmRlclBhc3M6OklkIHJlbmRlclBhc3NJZCwgY28K
IHsKICAgICBDQ1JlbmRlclBhc3NJZEhhc2hNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZnJhbWUu
cmVuZGVyUGFzc2VzQnlJZC5maW5kKHJlbmRlclBhc3NJZCk7CiAgICAgQVNTRVJUKGl0ICE9IGZy
YW1lLnJlbmRlclBhc3Nlc0J5SWQuZW5kKCkpOwotICAgIHJldHVybiBpdC0+c2Vjb25kLmdldCgp
OworICAgIHJldHVybiBpdC0+dmFsdWUuZ2V0KCk7CiB9CiAKIHN0YXRpYyB2b2lkIHJlbW92ZVJl
bmRlclBhc3Nlc1JlY3Vyc2l2ZShDQ1JlbmRlclBhc3M6OklkIHJlbW92ZVJlbmRlclBhc3NJZCwg
Q0NMYXllclRyZWVIb3N0SW1wbDo6RnJhbWVEYXRhJiBmcmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVzb3VyY2VQcm92aWRl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Jl
c291cmNlUHJvdmlkZXIuY3BwCmluZGV4IGZjM2JmZTdlMTVmMGE3YmIwM2FmNTdkZTU2OGJmYWNk
NmE5NDUxODguLjAzMDAwOTlmYmU1ODc3MTM2NDZmOWIyNmYzMjc0MDE5MjY3Y2FlOTAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVz
b3VyY2VQcm92aWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NSZXNvdXJjZVByb3ZpZGVyLmNwcApAQCAtODQsNyArODQsNyBAQCBib29s
IENDUmVzb3VyY2VQcm92aWRlcjo6aW5Vc2VCeUNvbnN1bWVyKFJlc291cmNlSWQgaWQpCiAgICAg
QVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKICAgICBSZXNvdXJjZU1hcDo6aXRlcmF0
b3IgaXQgPSBtX3Jlc291cmNlcy5maW5kKGlkKTsKICAgICBBU1NFUlQoaXQgIT0gbV9yZXNvdXJj
ZXMuZW5kKCkpOwotICAgIHJldHVybiAhIWl0LT5zZWNvbmQubG9ja0ZvclJlYWRDb3VudCB8fCBp
dC0+c2Vjb25kLmV4cG9ydGVkOworICAgIHJldHVybiAhIWl0LT52YWx1ZS5sb2NrRm9yUmVhZENv
dW50IHx8IGl0LT52YWx1ZS5leHBvcnRlZDsKIH0KIAogQ0NSZXNvdXJjZVByb3ZpZGVyOjpSZXNv
dXJjZUlkIENDUmVzb3VyY2VQcm92aWRlcjo6Y3JlYXRlUmVzb3VyY2UoaW50IHBvb2wsIGNvbnN0
IEludFNpemUmIHNpemUsIEdDM0RlbnVtIGZvcm1hdCwgVGV4dHVyZVVzYWdlSGludCBoaW50KQpA
QCAtMTU1LDE2ICsxNTUsMTYgQEAgdm9pZCBDQ1Jlc291cmNlUHJvdmlkZXI6OmRlbGV0ZVJlc291
cmNlKFJlc291cmNlSWQgaWQpCiAgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsK
ICAgICBSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5maW5kKGlkKTsKICAg
ICBBU1NFUlQoaXQgIT0gbV9yZXNvdXJjZXMuZW5kKCkpOwotICAgIEFTU0VSVCghaXQtPnNlY29u
ZC5sb2NrZWRGb3JXcml0ZSk7Ci0gICAgQVNTRVJUKCFpdC0+c2Vjb25kLmxvY2tGb3JSZWFkQ291
bnQpOworICAgIEFTU0VSVCghaXQtPnZhbHVlLmxvY2tlZEZvcldyaXRlKTsKKyAgICBBU1NFUlQo
IWl0LT52YWx1ZS5sb2NrRm9yUmVhZENvdW50KTsKIAotICAgIGlmIChpdC0+c2Vjb25kLmdsSWQg
JiYgIWl0LT5zZWNvbmQuZXh0ZXJuYWwpIHsKKyAgICBpZiAoaXQtPnZhbHVlLmdsSWQgJiYgIWl0
LT52YWx1ZS5leHRlcm5hbCkgewogICAgICAgICBXZWJHcmFwaGljc0NvbnRleHQzRCogY29udGV4
dDNkID0gbV9jb250ZXh0LT5jb250ZXh0M0QoKTsKICAgICAgICAgQVNTRVJUKGNvbnRleHQzZCk7
Ci0gICAgICAgIEdMQyhjb250ZXh0M2QsIGNvbnRleHQzZC0+ZGVsZXRlVGV4dHVyZShpdC0+c2Vj
b25kLmdsSWQpKTsKKyAgICAgICAgR0xDKGNvbnRleHQzZCwgY29udGV4dDNkLT5kZWxldGVUZXh0
dXJlKGl0LT52YWx1ZS5nbElkKSk7CiAgICAgfQotICAgIGlmIChpdC0+c2Vjb25kLnBpeGVscykK
LSAgICAgICAgZGVsZXRlIGl0LT5zZWNvbmQucGl4ZWxzOworICAgIGlmIChpdC0+dmFsdWUucGl4
ZWxzKQorICAgICAgICBkZWxldGUgaXQtPnZhbHVlLnBpeGVsczsKIAogICAgIG1fcmVzb3VyY2Vz
LnJlbW92ZShpdCk7CiB9CkBAIC0xNzQsOCArMTc0LDggQEAgdm9pZCBDQ1Jlc291cmNlUHJvdmlk
ZXI6OmRlbGV0ZU93bmVkUmVzb3VyY2VzKGludCBwb29sKQogICAgIEFTU0VSVChDQ1Byb3h5Ojpp
c0ltcGxUaHJlYWQoKSk7CiAgICAgUmVzb3VyY2VJZEFycmF5IHRvRGVsZXRlOwogICAgIGZvciAo
UmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gbV9y
ZXNvdXJjZXMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQucG9vbCA9PSBw
b29sICYmICFpdC0+c2Vjb25kLmV4dGVybmFsKQotICAgICAgICAgICAgdG9EZWxldGUuYXBwZW5k
KGl0LT5maXJzdCk7CisgICAgICAgIGlmIChpdC0+dmFsdWUucG9vbCA9PSBwb29sICYmICFpdC0+
dmFsdWUuZXh0ZXJuYWwpCisgICAgICAgICAgICB0b0RlbGV0ZS5hcHBlbmQoaXQtPmtleSk7CiAg
ICAgfQogICAgIGZvciAoUmVzb3VyY2VJZEFycmF5OjppdGVyYXRvciBpdCA9IHRvRGVsZXRlLmJl
Z2luKCk7IGl0ICE9IHRvRGVsZXRlLmVuZCgpOyArK2l0KQogICAgICAgICBkZWxldGVSZXNvdXJj
ZSgqaXQpOwpAQCAtMTg1LDcgKzE4NSw3IEBAIENDUmVzb3VyY2VQcm92aWRlcjo6UmVzb3VyY2VU
eXBlIENDUmVzb3VyY2VQcm92aWRlcjo6cmVzb3VyY2VUeXBlKFJlc291cmNlSWQgaWQpCiB7CiAg
ICAgUmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMuZmluZChpZCk7CiAgICAg
QVNTRVJUKGl0ICE9IG1fcmVzb3VyY2VzLmVuZCgpKTsKLSAgICByZXR1cm4gaXQtPnNlY29uZC50
eXBlOworICAgIHJldHVybiBpdC0+dmFsdWUudHlwZTsKIH0KIAogdm9pZCBDQ1Jlc291cmNlUHJv
dmlkZXI6OnVwbG9hZChSZXNvdXJjZUlkIGlkLCBjb25zdCB1aW50OF90KiBpbWFnZSwgY29uc3Qg
SW50UmVjdCYgaW1hZ2VSZWN0LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRT
aXplJiBkZXN0T2Zmc2V0KQpAQCAtMTkzLDE5ICsxOTMsMTkgQEAgdm9pZCBDQ1Jlc291cmNlUHJv
dmlkZXI6OnVwbG9hZChSZXNvdXJjZUlkIGlkLCBjb25zdCB1aW50OF90KiBpbWFnZSwgY29uc3Qg
SW50UmUKICAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwogICAgIFJlc291cmNl
TWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmZpbmQoaWQpOwogICAgIEFTU0VSVChpdCAh
PSBtX3Jlc291cmNlcy5lbmQoKSk7Ci0gICAgQVNTRVJUKCFpdC0+c2Vjb25kLmxvY2tlZEZvcldy
aXRlKTsKLSAgICBBU1NFUlQoIWl0LT5zZWNvbmQubG9ja0ZvclJlYWRDb3VudCk7Ci0gICAgQVNT
RVJUKCFpdC0+c2Vjb25kLmV4dGVybmFsKTsKKyAgICBBU1NFUlQoIWl0LT52YWx1ZS5sb2NrZWRG
b3JXcml0ZSk7CisgICAgQVNTRVJUKCFpdC0+dmFsdWUubG9ja0ZvclJlYWRDb3VudCk7CisgICAg
QVNTRVJUKCFpdC0+dmFsdWUuZXh0ZXJuYWwpOwogCi0gICAgaWYgKGl0LT5zZWNvbmQuZ2xJZCkg
eworICAgIGlmIChpdC0+dmFsdWUuZ2xJZCkgewogICAgICAgICBXZWJHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dDNkID0gbV9jb250ZXh0LT5jb250ZXh0M0QoKTsKICAgICAgICAgQVNTRVJUKGNv
bnRleHQzZCk7CiAgICAgICAgIEFTU0VSVChtX3RleFN1YkltYWdlLmdldCgpKTsKLSAgICAgICAg
Y29udGV4dDNkLT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgaXQt
PnNlY29uZC5nbElkKTsKLSAgICAgICAgbV90ZXhTdWJJbWFnZS0+dXBsb2FkKGltYWdlLCBpbWFn
ZVJlY3QsIHNvdXJjZVJlY3QsIGRlc3RPZmZzZXQsIGl0LT5zZWNvbmQuZm9ybWF0LCBjb250ZXh0
M2QpOworICAgICAgICBjb250ZXh0M2QtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJELCBpdC0+dmFsdWUuZ2xJZCk7CisgICAgICAgIG1fdGV4U3ViSW1hZ2UtPnVwbG9h
ZChpbWFnZSwgaW1hZ2VSZWN0LCBzb3VyY2VSZWN0LCBkZXN0T2Zmc2V0LCBpdC0+dmFsdWUuZm9y
bWF0LCBjb250ZXh0M2QpOwogICAgIH0KIAotICAgIGlmIChpdC0+c2Vjb25kLnBpeGVscykgewor
ICAgIGlmIChpdC0+dmFsdWUucGl4ZWxzKSB7CiAgICAgICAgIFNrQml0bWFwIHNyY0Z1bGw7CiAg
ICAgICAgIHNyY0Z1bGwuc2V0Q29uZmlnKFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZywgaW1h
Z2VSZWN0LndpZHRoKCksIGltYWdlUmVjdC5oZWlnaHQoKSk7CiAgICAgICAgIHNyY0Z1bGwuc2V0
UGl4ZWxzKGNvbnN0X2Nhc3Q8dWludDhfdCo+KGltYWdlKSk7CkBAIC0yNDQsOSArMjQ0LDkgQEAg
Y29uc3QgQ0NSZXNvdXJjZVByb3ZpZGVyOjpSZXNvdXJjZSogQ0NSZXNvdXJjZVByb3ZpZGVyOjps
b2NrRm9yUmVhZChSZXNvdXJjZUlkIGkKICAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFk
KCkpOwogICAgIFJlc291cmNlTWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmZpbmQoaWQp
OwogICAgIEFTU0VSVChpdCAhPSBtX3Jlc291cmNlcy5lbmQoKSk7Ci0gICAgQVNTRVJUKCFpdC0+
c2Vjb25kLmxvY2tlZEZvcldyaXRlKTsKLSAgICBpdC0+c2Vjb25kLmxvY2tGb3JSZWFkQ291bnQr
KzsKLSAgICByZXR1cm4gJml0LT5zZWNvbmQ7CisgICAgQVNTRVJUKCFpdC0+dmFsdWUubG9ja2Vk
Rm9yV3JpdGUpOworICAgIGl0LT52YWx1ZS5sb2NrRm9yUmVhZENvdW50Kys7CisgICAgcmV0dXJu
ICZpdC0+dmFsdWU7CiB9CiAKIHZvaWQgQ0NSZXNvdXJjZVByb3ZpZGVyOjp1bmxvY2tGb3JSZWFk
KFJlc291cmNlSWQgaWQpCkBAIC0yNTQsOCArMjU0LDggQEAgdm9pZCBDQ1Jlc291cmNlUHJvdmlk
ZXI6OnVubG9ja0ZvclJlYWQoUmVzb3VyY2VJZCBpZCkKICAgICBBU1NFUlQoQ0NQcm94eTo6aXNJ
bXBsVGhyZWFkKCkpOwogICAgIFJlc291cmNlTWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2Vz
LmZpbmQoaWQpOwogICAgIEFTU0VSVChpdCAhPSBtX3Jlc291cmNlcy5lbmQoKSk7Ci0gICAgQVNT
RVJUKGl0LT5zZWNvbmQubG9ja0ZvclJlYWRDb3VudCA+IDApOwotICAgIGl0LT5zZWNvbmQubG9j
a0ZvclJlYWRDb3VudC0tOworICAgIEFTU0VSVChpdC0+dmFsdWUubG9ja0ZvclJlYWRDb3VudCA+
IDApOworICAgIGl0LT52YWx1ZS5sb2NrRm9yUmVhZENvdW50LS07CiB9CiAKIGNvbnN0IENDUmVz
b3VyY2VQcm92aWRlcjo6UmVzb3VyY2UqIENDUmVzb3VyY2VQcm92aWRlcjo6bG9ja0ZvcldyaXRl
KFJlc291cmNlSWQgaWQpCkBAIC0yNjMsMTEgKzI2MywxMSBAQCBjb25zdCBDQ1Jlc291cmNlUHJv
dmlkZXI6OlJlc291cmNlKiBDQ1Jlc291cmNlUHJvdmlkZXI6OmxvY2tGb3JXcml0ZShSZXNvdXJj
ZUlkCiAgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKICAgICBSZXNvdXJjZU1h
cDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5maW5kKGlkKTsKICAgICBBU1NFUlQoaXQgIT0g
bV9yZXNvdXJjZXMuZW5kKCkpOwotICAgIEFTU0VSVCghaXQtPnNlY29uZC5sb2NrZWRGb3JXcml0
ZSk7Ci0gICAgQVNTRVJUKCFpdC0+c2Vjb25kLmxvY2tGb3JSZWFkQ291bnQpOwotICAgIEFTU0VS
VCghaXQtPnNlY29uZC5leHRlcm5hbCk7Ci0gICAgaXQtPnNlY29uZC5sb2NrZWRGb3JXcml0ZSA9
IHRydWU7Ci0gICAgcmV0dXJuICZpdC0+c2Vjb25kOworICAgIEFTU0VSVCghaXQtPnZhbHVlLmxv
Y2tlZEZvcldyaXRlKTsKKyAgICBBU1NFUlQoIWl0LT52YWx1ZS5sb2NrRm9yUmVhZENvdW50KTsK
KyAgICBBU1NFUlQoIWl0LT52YWx1ZS5leHRlcm5hbCk7CisgICAgaXQtPnZhbHVlLmxvY2tlZEZv
cldyaXRlID0gdHJ1ZTsKKyAgICByZXR1cm4gJml0LT52YWx1ZTsKIH0KIAogdm9pZCBDQ1Jlc291
cmNlUHJvdmlkZXI6OnVubG9ja0ZvcldyaXRlKFJlc291cmNlSWQgaWQpCkBAIC0yNzUsOSArMjc1
LDkgQEAgdm9pZCBDQ1Jlc291cmNlUHJvdmlkZXI6OnVubG9ja0ZvcldyaXRlKFJlc291cmNlSWQg
aWQpCiAgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKICAgICBSZXNvdXJjZU1h
cDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5maW5kKGlkKTsKICAgICBBU1NFUlQoaXQgIT0g
bV9yZXNvdXJjZXMuZW5kKCkpOwotICAgIEFTU0VSVChpdC0+c2Vjb25kLmxvY2tlZEZvcldyaXRl
KTsKLSAgICBBU1NFUlQoIWl0LT5zZWNvbmQuZXh0ZXJuYWwpOwotICAgIGl0LT5zZWNvbmQubG9j
a2VkRm9yV3JpdGUgPSBmYWxzZTsKKyAgICBBU1NFUlQoaXQtPnZhbHVlLmxvY2tlZEZvcldyaXRl
KTsKKyAgICBBU1NFUlQoIWl0LT52YWx1ZS5leHRlcm5hbCk7CisgICAgaXQtPnZhbHVlLmxvY2tl
ZEZvcldyaXRlID0gZmFsc2U7CiB9CiAKIENDUmVzb3VyY2VQcm92aWRlcjo6U2NvcGVkUmVhZExv
Y2tHTDo6U2NvcGVkUmVhZExvY2tHTChDQ1Jlc291cmNlUHJvdmlkZXIqIHJlc291cmNlUHJvdmlk
ZXIsIENDUmVzb3VyY2VQcm92aWRlcjo6UmVzb3VyY2VJZCByZXNvdXJjZUlkKQpAQCAtNDAwLDcg
KzQwMCw3IEBAIHZvaWQgQ0NSZXNvdXJjZVByb3ZpZGVyOjpkZXN0cm95Q2hpbGQoaW50IGNoaWxk
KQogICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CiAgICAgQ2hpbGRNYXA6Oml0
ZXJhdG9yIGl0ID0gbV9jaGlsZHJlbi5maW5kKGNoaWxkKTsKICAgICBBU1NFUlQoaXQgIT0gbV9j
aGlsZHJlbi5lbmQoKSk7Ci0gICAgZGVsZXRlT3duZWRSZXNvdXJjZXMoaXQtPnNlY29uZC5wb29s
KTsKKyAgICBkZWxldGVPd25lZFJlc291cmNlcyhpdC0+dmFsdWUucG9vbCk7CiAgICAgbV9jaGls
ZHJlbi5yZW1vdmUoaXQpOwogICAgIHRyaW1NYWlsYm94RGVxdWUoKTsKIH0KQEAgLTQxMCw3ICs0
MTAsNyBAQCBjb25zdCBDQ1Jlc291cmNlUHJvdmlkZXI6OlJlc291cmNlSWRNYXAmIENDUmVzb3Vy
Y2VQcm92aWRlcjo6Z2V0Q2hpbGRUb1BhcmVudE1hcAogICAgIEFTU0VSVChDQ1Byb3h5Ojppc0lt
cGxUaHJlYWQoKSk7CiAgICAgQ2hpbGRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9jaGlsZHJl
bi5maW5kKGNoaWxkKTsKICAgICBBU1NFUlQoaXQgIT0gbV9jaGlsZHJlbi5lbmQoKSk7Ci0gICAg
cmV0dXJuIGl0LT5zZWNvbmQuY2hpbGRUb1BhcmVudE1hcDsKKyAgICByZXR1cm4gaXQtPnZhbHVl
LmNoaWxkVG9QYXJlbnRNYXA7CiB9CiAKIENDUmVzb3VyY2VQcm92aWRlcjo6VHJhbnNmZXJhYmxl
UmVzb3VyY2VMaXN0IENDUmVzb3VyY2VQcm92aWRlcjo6cHJlcGFyZVNlbmRUb1BhcmVudChjb25z
dCBSZXNvdXJjZUlkQXJyYXkmIHJlc291cmNlcykKQEAgLTQyNiw3ICs0MjYsNyBAQCBDQ1Jlc291
cmNlUHJvdmlkZXI6OlRyYW5zZmVyYWJsZVJlc291cmNlTGlzdCBDQ1Jlc291cmNlUHJvdmlkZXI6
OnByZXBhcmVTZW5kVG9QYQogICAgIGZvciAoUmVzb3VyY2VJZEFycmF5Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IHJlc291cmNlcy5iZWdpbigpOyBpdCAhPSByZXNvdXJjZXMuZW5kKCk7ICsraXQpIHsK
ICAgICAgICAgVHJhbnNmZXJhYmxlUmVzb3VyY2UgcmVzb3VyY2U7CiAgICAgICAgIGlmICh0cmFu
c2ZlclJlc291cmNlKGNvbnRleHQzZCwgKml0LCAmcmVzb3VyY2UpKSB7Ci0gICAgICAgICAgICBt
X3Jlc291cmNlcy5maW5kKCppdCktPnNlY29uZC5leHBvcnRlZCA9IHRydWU7CisgICAgICAgICAg
ICBtX3Jlc291cmNlcy5maW5kKCppdCktPnZhbHVlLmV4cG9ydGVkID0gdHJ1ZTsKICAgICAgICAg
ICAgIGxpc3QucmVzb3VyY2VzLmFwcGVuZChyZXNvdXJjZSk7CiAgICAgICAgIH0KICAgICB9CkBA
IC00NDUsNyArNDQ1LDcgQEAgQ0NSZXNvdXJjZVByb3ZpZGVyOjpUcmFuc2ZlcmFibGVSZXNvdXJj
ZUxpc3QgQ0NSZXNvdXJjZVByb3ZpZGVyOjpwcmVwYXJlU2VuZFRvQ2gKICAgICAgICAgLy8gRklY
TUU6IEltcGxlbWVudCB0aGlzIHBhdGggZm9yIHNvZnR3YXJlIGNvbXBvc2l0aW5nLgogICAgICAg
ICByZXR1cm4gbGlzdDsKICAgICB9Ci0gICAgQ2hpbGQmIGNoaWxkSW5mbyA9IG1fY2hpbGRyZW4u
ZmluZChjaGlsZCktPnNlY29uZDsKKyAgICBDaGlsZCYgY2hpbGRJbmZvID0gbV9jaGlsZHJlbi5m
aW5kKGNoaWxkKS0+dmFsdWU7CiAgICAgZm9yIChSZXNvdXJjZUlkQXJyYXk6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gcmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IHJlc291cmNlcy5lbmQoKTsgKytpdCkg
ewogICAgICAgICBUcmFuc2ZlcmFibGVSZXNvdXJjZSByZXNvdXJjZTsKICAgICAgICAgaWYgKCF0
cmFuc2ZlclJlc291cmNlKGNvbnRleHQzZCwgKml0LCAmcmVzb3VyY2UpKQpAQCAtNDc4LDcgKzQ3
OCw3IEBAIHZvaWQgQ0NSZXNvdXJjZVByb3ZpZGVyOjpyZWNlaXZlRnJvbUNoaWxkKGludCBjaGls
ZCwgY29uc3QgVHJhbnNmZXJhYmxlUmVzb3VyY2VMCiAgICAgICAgIC8vIChhbmQgaXMgc2ltcGxl
cikgdG8gd2FpdC4KICAgICAgICAgR0xDKGNvbnRleHQzZCwgY29udGV4dDNkLT53YWl0U3luY1Bv
aW50KHJlc291cmNlcy5zeW5jUG9pbnQpKTsKICAgICB9Ci0gICAgQ2hpbGQmIGNoaWxkSW5mbyA9
IG1fY2hpbGRyZW4uZmluZChjaGlsZCktPnNlY29uZDsKKyAgICBDaGlsZCYgY2hpbGRJbmZvID0g
bV9jaGlsZHJlbi5maW5kKGNoaWxkKS0+dmFsdWU7CiAgICAgZm9yIChWZWN0b3I8VHJhbnNmZXJh
YmxlUmVzb3VyY2U+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHJlc291cmNlcy5yZXNvdXJjZXMuYmVn
aW4oKTsgaXQgIT0gcmVzb3VyY2VzLnJlc291cmNlcy5lbmQoKTsgKytpdCkgewogICAgICAgICB1
bnNpZ25lZCB0ZXh0dXJlSWQ7CiAgICAgICAgIEdMQyhjb250ZXh0M2QsIHRleHR1cmVJZCA9IGNv
bnRleHQzZC0+Y3JlYXRlVGV4dHVyZSgpKTsKQEAgLTUwNCw3ICs1MDQsNyBAQCB2b2lkIENDUmVz
b3VyY2VQcm92aWRlcjo6cmVjZWl2ZUZyb21QYXJlbnQoY29uc3QgVHJhbnNmZXJhYmxlUmVzb3Vy
Y2VMaXN0JiByZXNvdQogICAgIGlmIChyZXNvdXJjZXMuc3luY1BvaW50KQogICAgICAgICBHTEMo
Y29udGV4dDNkLCBjb250ZXh0M2QtPndhaXRTeW5jUG9pbnQocmVzb3VyY2VzLnN5bmNQb2ludCkp
OwogICAgIGZvciAoVmVjdG9yPFRyYW5zZmVyYWJsZVJlc291cmNlPjo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSByZXNvdXJjZXMucmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IHJlc291cmNlcy5yZXNvdXJj
ZXMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgUmVzb3VyY2UmIHJlc291cmNlID0gbV9yZXNvdXJj
ZXMuZmluZChpdC0+aWQpLT5zZWNvbmQ7CisgICAgICAgIFJlc291cmNlJiByZXNvdXJjZSA9IG1f
cmVzb3VyY2VzLmZpbmQoaXQtPmlkKS0+dmFsdWU7CiAgICAgICAgIEFTU0VSVChyZXNvdXJjZS5l
eHBvcnRlZCk7CiAgICAgICAgIHJlc291cmNlLmV4cG9ydGVkID0gZmFsc2U7CiAgICAgICAgIEdM
Qyhjb250ZXh0M2QsIGNvbnRleHQzZC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIHJlc291cmNlLmdsSWQpKTsKQEAgLTUxOCwxOSArNTE4LDE5IEBAIGJvb2wgQ0NS
ZXNvdXJjZVByb3ZpZGVyOjp0cmFuc2ZlclJlc291cmNlKFdlYkdyYXBoaWNzQ29udGV4dDNEKiBj
b250ZXh0LCBSZXNvdXJjCiAgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKICAg
ICBSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5maW5kKGlkKTsK
ICAgICBBU1NFUlQoaXQgIT0gbV9yZXNvdXJjZXMuZW5kKCkpOwotICAgIEFTU0VSVCghaXQtPnNl
Y29uZC5sb2NrZWRGb3JXcml0ZSk7Ci0gICAgQVNTRVJUKCFpdC0+c2Vjb25kLmxvY2tGb3JSZWFk
Q291bnQpOwotICAgIEFTU0VSVCghaXQtPnNlY29uZC5leHRlcm5hbCk7Ci0gICAgaWYgKGl0LT5z
ZWNvbmQuZXhwb3J0ZWQpCisgICAgQVNTRVJUKCFpdC0+dmFsdWUubG9ja2VkRm9yV3JpdGUpOwor
ICAgIEFTU0VSVCghaXQtPnZhbHVlLmxvY2tGb3JSZWFkQ291bnQpOworICAgIEFTU0VSVCghaXQt
PnZhbHVlLmV4dGVybmFsKTsKKyAgICBpZiAoaXQtPnZhbHVlLmV4cG9ydGVkKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgcmVzb3VyY2UtPmlkID0gaWQ7Ci0gICAgcmVzb3VyY2UtPmZvcm1h
dCA9IGl0LT5zZWNvbmQuZm9ybWF0OwotICAgIHJlc291cmNlLT5zaXplID0gaXQtPnNlY29uZC5z
aXplOworICAgIHJlc291cmNlLT5mb3JtYXQgPSBpdC0+dmFsdWUuZm9ybWF0OworICAgIHJlc291
cmNlLT5zaXplID0gaXQtPnZhbHVlLnNpemU7CiAgICAgaWYgKCFtX21haWxib3hlcy5pc0VtcHR5
KCkpCiAgICAgICAgIHJlc291cmNlLT5tYWlsYm94ID0gbV9tYWlsYm94ZXMudGFrZUZpcnN0KCk7
CiAgICAgZWxzZQogICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+Z2VuTWFpbGJveENIUk9N
SVVNKHJlc291cmNlLT5tYWlsYm94Lm5hbWUpKTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+
YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGl0LT5zZWNvbmQuZ2xJ
ZCkpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgaXQtPnZhbHVlLmdsSWQpKTsKICAgICBHTEMoY29udGV4dCwgY29u
dGV4dC0+cHJvZHVjZVRleHR1cmVDSFJPTUlVTShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgcmVzb3VyY2UtPm1haWxib3gubmFtZSkpOwogICAgIHJldHVybiB0cnVlOwogfQpAQCAtNTQ1
LDE1ICs1NDUsMTUgQEAgdm9pZCBDQ1Jlc291cmNlUHJvdmlkZXI6OnRyaW1NYWlsYm94RGVxdWUo
KQogICAgIHNpemVfdCBtYXhNYWlsYm94Q291bnQgPSAwOwogICAgIGlmIChtX2NvbnRleHQtPmNh
cGFiaWxpdGllcygpLmhhc1BhcmVudENvbXBvc2l0b3IpIHsKICAgICAgICAgZm9yIChSZXNvdXJj
ZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSBtX3Jlc291cmNl
cy5lbmQoKTsgKytpdCkgewotICAgICAgICAgICAgaWYgKCFpdC0+c2Vjb25kLmV4cG9ydGVkICYm
ICFpdC0+c2Vjb25kLmV4dGVybmFsKQorICAgICAgICAgICAgaWYgKCFpdC0+dmFsdWUuZXhwb3J0
ZWQgJiYgIWl0LT52YWx1ZS5leHRlcm5hbCkKICAgICAgICAgICAgICAgICArK21heE1haWxib3hD
b3VudDsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIEhhc2hTZXQ8aW50PiBjaGls
ZFBvb2xTZXQ7CiAgICAgICAgIGZvciAoQ2hpbGRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9jaGlsZHJl
bi5iZWdpbigpOyBpdCAhPSBtX2NoaWxkcmVuLmVuZCgpOyArK2l0KQotICAgICAgICAgICAgY2hp
bGRQb29sU2V0LmFkZChpdC0+c2Vjb25kLnBvb2wpOworICAgICAgICAgICAgY2hpbGRQb29sU2V0
LmFkZChpdC0+dmFsdWUucG9vbCk7CiAgICAgICAgIGZvciAoUmVzb3VyY2VNYXA6Oml0ZXJhdG9y
IGl0ID0gbV9yZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gbV9yZXNvdXJjZXMuZW5kKCk7ICsraXQp
IHsKLSAgICAgICAgICAgIGlmIChjaGlsZFBvb2xTZXQuY29udGFpbnMoaXQtPnNlY29uZC5wb29s
KSkKKyAgICAgICAgICAgIGlmIChjaGlsZFBvb2xTZXQuY29udGFpbnMoaXQtPnZhbHVlLnBvb2wp
KQogICAgICAgICAgICAgICAgICsrbWF4TWFpbGJveENvdW50OwogICAgICAgICB9CiAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0
b21GaWx0ZXJHbG9iYWxDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dC5jcHAKaW5kZXggZGE5NzgyYWY4
MDM1MjIzNWIwYzBmMGIwN2IxNzJiOTQ3MzZmZTZiMC4uMDJhOTZiODY0ZDMyYTQ5NmIxMjA2ODIz
ZjYyODBjODNjOWYxMDkzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlckdsb2JhbENvbnRl
eHQuY3BwCkBAIC00NCw3ICs0NCw3IEBAIEN1c3RvbUZpbHRlckdsb2JhbENvbnRleHQ6OkN1c3Rv
bUZpbHRlckdsb2JhbENvbnRleHQoKQogQ3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dDo6fkN1c3Rv
bUZpbHRlckdsb2JhbENvbnRleHQoKQogewogICAgIGZvciAoQ3VzdG9tRmlsdGVyVmFsaWRhdGVk
UHJvZ3JhbXNNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3Byb2dyYW1zLmJlZ2luKCk7IGl0ZXIgIT0g
bV9wcm9ncmFtcy5lbmQoKTsgKytpdGVyKQotICAgICAgICBpdGVyLT5zZWNvbmQtPmRldGFjaEZy
b21HbG9iYWxDb250ZXh0KCk7CisgICAgICAgIGl0ZXItPnZhbHVlLT5kZXRhY2hGcm9tR2xvYmFs
Q29udGV4dCgpOwogfQogCiBBTkdMRVdlYktpdEJyaWRnZSogQ3VzdG9tRmlsdGVyR2xvYmFsQ29u
dGV4dDo6d2ViZ2xTaGFkZXJWYWxpZGF0b3IoKQpAQCAtOTEsNyArOTEsNyBAQCBQYXNzUmVmUHRy
PEN1c3RvbUZpbHRlclZhbGlkYXRlZFByb2dyYW0+IEN1c3RvbUZpbHRlckdsb2JhbENvbnRleHQ6
OmdldFZhbGlkYXRlZAogewogICAgIEN1c3RvbUZpbHRlclZhbGlkYXRlZFByb2dyYW1zTWFwOjpp
dGVyYXRvciBpdGVyID0gbV9wcm9ncmFtcy5maW5kKHByb2dyYW1JbmZvKTsKICAgICBpZiAoaXRl
ciAhPSBtX3Byb2dyYW1zLmVuZCgpKQotICAgICAgICByZXR1cm4gaXRlci0+c2Vjb25kOworICAg
ICAgICByZXR1cm4gaXRlci0+dmFsdWU7CiAKICAgICBSZWZQdHI8Q3VzdG9tRmlsdGVyVmFsaWRh
dGVkUHJvZ3JhbT4gdmFsaWRhdGVkUHJvZ3JhbSA9IEN1c3RvbUZpbHRlclZhbGlkYXRlZFByb2dy
YW06OmNyZWF0ZSh0aGlzLCBwcm9ncmFtSW5mbyk7CiAgICAgbV9wcm9ncmFtcy5zZXQocHJvZ3Jh
bUluZm8sIHZhbGlkYXRlZFByb2dyYW0uZ2V0KCkpOwpAQCAtMTA3LDcgKzEwNyw3IEBAIHZvaWQg
Q3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dDo6cmVtb3ZlVmFsaWRhdGVkUHJvZ3JhbShjb25zdCBD
dXN0b21GaWx0ZXJWYWxpZGF0CiAjaWZuZGVmIE5ERUJVRwogICAgIC8vIENoZWNrIHRoYXQgdGhl
cmUncyBubyB3YXkgd2UgY291bGQgaGF2ZSB0aGUgc2FtZSBwcm9ncmFtIHVuZGVyIGEgZGlmZmVy
ZW50IGtleS4KICAgICBmb3IgKGl0ZXIgPSBtX3Byb2dyYW1zLmJlZ2luKCk7IGl0ZXIgIT0gbV9w
cm9ncmFtcy5lbmQoKTsgKytpdGVyKQotICAgICAgICBBU1NFUlQoaXRlci0+c2Vjb25kICE9IHBy
b2dyYW0pOworICAgICAgICBBU1NFUlQoaXRlci0+dmFsdWUgIT0gcHJvZ3JhbSk7CiAjZW5kaWYK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9DdXN0b21GaWx0ZXJQcm9ncmFtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyUHJvZ3JhbS5jcHAKaW5kZXggZDFjZjYxMzRmNzBhZThh
YmY1MmZjNjIzYTdkNjk2NTM0ODc5ZjYxMi4uOTRlODNkZjliODNiMmI1YjU0ZmU3NDdhN2UyYWZj
YjQyMjVlOWNmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9DdXN0b21GaWx0ZXJQcm9ncmFtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclByb2dyYW0uY3BwCkBAIC03NSw3ICs3
NSw3IEBAIHZvaWQgQ3VzdG9tRmlsdGVyUHJvZ3JhbTo6cmVtb3ZlQ2xpZW50KEN1c3RvbUZpbHRl
clByb2dyYW1DbGllbnQqIGNsaWVudCkKIHZvaWQgQ3VzdG9tRmlsdGVyUHJvZ3JhbTo6bm90aWZ5
Q2xpZW50cygpCiB7CiAgICAgZm9yIChDdXN0b21GaWx0ZXJQcm9ncmFtQ2xpZW50TGlzdDo6aXRl
cmF0b3IgaXRlciA9IG1fY2xpZW50cy5iZWdpbigpLCBlbmQgPSBtX2NsaWVudHMuZW5kKCk7IGl0
ZXIgIT0gZW5kOyArK2l0ZXIpCi0gICAgICAgIGl0ZXItPmZpcnN0LT5ub3RpZnlDdXN0b21GaWx0
ZXJQcm9ncmFtTG9hZGVkKHRoaXMpOworICAgICAgICBpdGVyLT5rZXktPm5vdGlmeUN1c3RvbUZp
bHRlclByb2dyYW1Mb2FkZWQodGhpcyk7CiB9CiAKIEN1c3RvbUZpbHRlclByb2dyYW1JbmZvIEN1
c3RvbUZpbHRlclByb2dyYW06OnByb2dyYW1JbmZvKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2tpYS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNraWEuY3Bw
CmluZGV4IGY2OGVhNjE5MjQ1Zjg2NmU1YmQwZDU3OGQwMTA0ODQ0NTI1ODRjMmIuLjFlODg2N2Ji
NzU3ZjIyNDJlOGY0OTYyZjg3NWIxYmRmN2FlOTkxMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2tpYS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTa2lhLmNwcApA
QCAtMjQ0LDE4ICsyNDQsMTggQEAgc3RhdGljIEhCX0ZhY2VSZWNfKiBnZXRDYWNoZWRIYXJmYnV6
ekZhY2UoRm9udFBsYXRmb3JtRGF0YSogcGxhdGZvcm1EYXRhKQogICAgICAgICBnSGFyZmJ1enpG
YWNlQ2FjaGUtPnNldCh1bmlxdWVJRCwgZW50cnkpOwogICAgICAgICByZXR1cm4gZW50cnkuZmly
c3Q7CiAgICAgfQotICAgICsrKHJlc3VsdC5nZXQoKS0+c2Vjb25kLnNlY29uZCk7Ci0gICAgcmV0
dXJuIHJlc3VsdC5nZXQoKS0+c2Vjb25kLmZpcnN0OworICAgICsrKHJlc3VsdC5nZXQoKS0+dmFs
dWUuc2Vjb25kKTsKKyAgICByZXR1cm4gcmVzdWx0LmdldCgpLT52YWx1ZS5maXJzdDsKIH0KIAog
c3RhdGljIHZvaWQgcmVsZWFzZUNhY2hlZEhhcmZidXp6RmFjZShTa0ZvbnRJRCB1bmlxdWVJRCkK
IHsKICAgICBIYXJmYnV6ekZhY2VDYWNoZTo6aXRlcmF0b3IgcmVzdWx0ID0gZ0hhcmZidXp6RmFj
ZUNhY2hlLT5maW5kKHVuaXF1ZUlEKTsKICAgICBBU1NFUlQocmVzdWx0ICE9IGdIYXJmYnV6ekZh
Y2VDYWNoZS0+ZW5kKCkpOwotICAgIEFTU0VSVChyZXN1bHQuZ2V0KCktPnNlY29uZC5zZWNvbmQg
PiAwKTsKLSAgICAtLShyZXN1bHQuZ2V0KCktPnNlY29uZC5zZWNvbmQpOwotICAgIGlmICghKHJl
c3VsdC5nZXQoKS0+c2Vjb25kLnNlY29uZCkpIHsKLSAgICAgICAgSEJfRnJlZUZhY2UocmVzdWx0
LmdldCgpLT5zZWNvbmQuZmlyc3QpOworICAgIEFTU0VSVChyZXN1bHQuZ2V0KCktPnZhbHVlLnNl
Y29uZCA+IDApOworICAgIC0tKHJlc3VsdC5nZXQoKS0+dmFsdWUuc2Vjb25kKTsKKyAgICBpZiAo
IShyZXN1bHQuZ2V0KCktPnZhbHVlLnNlY29uZCkpIHsKKyAgICAgICAgSEJfRnJlZUZhY2UocmVz
dWx0LmdldCgpLT52YWx1ZS5maXJzdCk7CiAgICAgICAgIGdIYXJmYnV6ekZhY2VDYWNoZS0+cmVt
b3ZlKHVuaXF1ZUlEKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ek5HRmFjZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ek5HRmFjZS5jcHAKaW5k
ZXggN2RkMDQ4YjNiNDNmZjU5Mzg4ZWFmNGU3MjEwZWUyY2NiZDU1NDIyMy4uNjA0NzU5YjhjYmRl
ZDNjOGI4NDFkYzY2ODc3ZTNkZWEzNDYxZjc2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpOR0ZhY2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6TkdGYWNl
LmNwcApAQCAtNjAsOCArNjAsOCBAQCBIYXJmQnV6ek5HRmFjZTo6SGFyZkJ1enpOR0ZhY2UoRm9u
dFBsYXRmb3JtRGF0YSogcGxhdGZvcm1EYXRhLCB1aW50NjRfdCB1bmlxdWVJRAogICAgICAgICBB
U1NFUlQobV9mYWNlKTsKICAgICAgICAgaGFyZmJ1enpGYWNlQ2FjaGUoKS0+c2V0KG1fdW5pcXVl
SUQsIEZhY2VDYWNoZUVudHJ5KG1fZmFjZSwgMSkpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgICsr
KHJlc3VsdC5nZXQoKS0+c2Vjb25kLnNlY29uZCk7Ci0gICAgICAgIG1fZmFjZSA9IHJlc3VsdC5n
ZXQoKS0+c2Vjb25kLmZpcnN0OworICAgICAgICArKyhyZXN1bHQuZ2V0KCktPnZhbHVlLnNlY29u
ZCk7CisgICAgICAgIG1fZmFjZSA9IHJlc3VsdC5nZXQoKS0+dmFsdWUuZmlyc3Q7CiAgICAgfQog
fQogCkBAIC02OSwxMCArNjksMTAgQEAgSGFyZkJ1enpOR0ZhY2U6On5IYXJmQnV6ek5HRmFjZSgp
CiB7CiAgICAgSGFyZkJ1enpOR0ZhY2VDYWNoZTo6aXRlcmF0b3IgcmVzdWx0ID0gaGFyZmJ1enpG
YWNlQ2FjaGUoKS0+ZmluZChtX3VuaXF1ZUlEKTsKICAgICBBU1NFUlQocmVzdWx0ICE9IGhhcmZi
dXp6RmFjZUNhY2hlKCktPmVuZCgpKTsKLSAgICBBU1NFUlQocmVzdWx0LmdldCgpLT5zZWNvbmQu
c2Vjb25kID4gMCk7Ci0gICAgLS0ocmVzdWx0LmdldCgpLT5zZWNvbmQuc2Vjb25kKTsKLSAgICBp
ZiAoIShyZXN1bHQuZ2V0KCktPnNlY29uZC5zZWNvbmQpKSB7Ci0gICAgICAgIGhiX2ZhY2VfZGVz
dHJveShyZXN1bHQuZ2V0KCktPnNlY29uZC5maXJzdCk7CisgICAgQVNTRVJUKHJlc3VsdC5nZXQo
KS0+dmFsdWUuc2Vjb25kID4gMCk7CisgICAgLS0ocmVzdWx0LmdldCgpLT52YWx1ZS5zZWNvbmQp
OworICAgIGlmICghKHJlc3VsdC5nZXQoKS0+dmFsdWUuc2Vjb25kKSkgeworICAgICAgICBoYl9m
YWNlX2Rlc3Ryb3kocmVzdWx0LmdldCgpLT52YWx1ZS5maXJzdCk7CiAgICAgICAgIGhhcmZidXp6
RmFjZUNhY2hlKCktPnJlbW92ZShtX3VuaXF1ZUlEKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFDb3JlVGV4
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERh
dGFDb3JlVGV4dC5jcHAKaW5kZXggMDUxOTM3NDJjNTg1MmRiZTljOWNlZDY0YjlhMDdhYWQyYzFl
YTQ3Ny4uMGI3MTMzNDdmNjA0NjM1NTQ5ZTUwZDU2MzY1MjE4YjIzNDQyNmFjZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhQ29y
ZVRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1w
bGVGb250RGF0YUNvcmVUZXh0LmNwcApAQCAtNDMsNyArNDMsNyBAQCBDRkRpY3Rpb25hcnlSZWYg
U2ltcGxlRm9udERhdGE6OmdldENGU3RyaW5nQXR0cmlidXRlcyhUeXBlc2V0dGluZ0ZlYXR1cmVz
IHR5cGVzZQogewogICAgIHVuc2lnbmVkIGtleSA9IHR5cGVzZXR0aW5nRmVhdHVyZXMgKyAxOwog
ICAgIEhhc2hNYXA8dW5zaWduZWQsIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+ID46OkFkZFJl
c3VsdCBhZGRSZXN1bHQgPSBtX0NGU3RyaW5nQXR0cmlidXRlcy5hZGQoa2V5LCBSZXRhaW5QdHI8
Q0ZEaWN0aW9uYXJ5UmVmPigpKTsKLSAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiYgYXR0
cmlidXRlc0RpY3Rpb25hcnkgPSBhZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBSZXRh
aW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiYgYXR0cmlidXRlc0RpY3Rpb25hcnkgPSBhZGRSZXN1bHQu
aXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkpCiAgICAgICAg
IHJldHVybiBhdHRyaWJ1dGVzRGljdGlvbmFyeS5nZXQoKTsKICAgICAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YU1hYy5tbSBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YU1hYy5t
bQppbmRleCA2NmZlOTBhNTkzOTBlNGNkMjJmNjE4MzhmOGM2YTlkYmZiNTJhYzZjLi45N2ViYmY5
OWMzZDJlNWU3MWNhNjBkYWNiM2RlODI1YTQxYjY3MTdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhTWFjLm1tCkBA
IC00NjEsNyArNDYxLDcgQEAgYm9vbCBTaW1wbGVGb250RGF0YTo6Y2FuUmVuZGVyQ29tYmluaW5n
Q2hhcmFjdGVyU2VxdWVuY2UoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMKIAogICAgIFdURjo6SGFz
aE1hcDxTdHJpbmcsIGJvb2w+OjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gbV9jb21iaW5pbmdDaGFy
YWN0ZXJTZXF1ZW5jZVN1cHBvcnQtPmFkZChTdHJpbmcoY2hhcmFjdGVycywgbGVuZ3RoKSwgZmFs
c2UpOwogICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJldHVybiBhZGRS
ZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGFkZFJlc3VsdC5pdGVyYXRv
ci0+dmFsdWU7CiAKICAgICBSZXRhaW5QdHI8Q0dGb250UmVmPiBjZ0ZvbnQoQWRvcHRDRiwgQ1RG
b250Q29weUdyYXBoaWNzRm9udChwbGF0Zm9ybURhdGEoKS5jdEZvbnQoKSwgMCkpOwogCkBAIC00
ODEsNyArNDgxLDcgQEAgYm9vbCBTaW1wbGVGb250RGF0YTo6Y2FuUmVuZGVyQ29tYmluaW5nQ2hh
cmFjdGVyU2VxdWVuY2UoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAKLSAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IHRydWU7
CisgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IHRydWU7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAKaW5kZXggYTNjMDU2
NTkxMjBmYWQ4MmNkMTJiNGE1NWE4ZjQ3NGIyM2MyYmVjOS4uOGJlOTM4NjI1YjQwZTUzY2VkNjZk
YjU2ZmEwZjk5YTRhMDA0ZTZmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1v
bi5jcHAKQEAgLTExNyw3ICsxMTcsNyBAQCBTdHJpbmcgRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9u
OjpnZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUoUGxhdGZvcm0zRE9iamVjdAogICAgIGlm
IChyZXN1bHQgPT0gbV9jb250ZXh0LT5tX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKICAgICAgICAg
cmV0dXJuICIiOwogCi0gICAgR3JhcGhpY3NDb250ZXh0M0Q6OlNoYWRlclNvdXJjZUVudHJ5JiBl
bnRyeSA9IHJlc3VsdC0+c2Vjb25kOworICAgIEdyYXBoaWNzQ29udGV4dDNEOjpTaGFkZXJTb3Vy
Y2VFbnRyeSYgZW50cnkgPSByZXN1bHQtPnZhbHVlOwogCiAgICAgU3RyaW5nIHRyYW5zbGF0ZWRT
aGFkZXJTb3VyY2U7CiAgICAgU3RyaW5nIHNoYWRlckluZm9Mb2c7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVu
R0xDb21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dy
YXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcAppbmRleCBkODFlOWU2YWY0NTQ1Mzc2YjAy
ZDg3NmY2Y2E5MTU4MmZmNDY4ODllLi42ZTk4ZTYzODFhODY5Zjc1YzliMTc4NzJmZWVhMGVmYTVh
M2VlNTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5j
cHAKQEAgLTQ3Myw3ICs0NzMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb21waWxlU2hh
ZGVyKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQogCiAgICAgaWYgKGxlbmd0aCkgewogICAgICAg
ICBIYXNoTWFwPFBsYXRmb3JtM0RPYmplY3QsIEdyYXBoaWNzQ29udGV4dDNEOjpTaGFkZXJTb3Vy
Y2VFbnRyeT46Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVy
KTsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OlNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9
IHJlc3VsdC0+c2Vjb25kOworICAgICAgICBHcmFwaGljc0NvbnRleHQzRDo6U2hhZGVyU291cmNl
RW50cnkmIGVudHJ5ID0gcmVzdWx0LT52YWx1ZTsKIAogICAgICAgICBHTHNpemVpIHNpemUgPSAw
OwogICAgICAgICBPd25BcnJheVB0cjxHTGNoYXI+IGluZm8gPSBhZG9wdEFycmF5UHRyKG5ldyBH
TGNoYXJbbGVuZ3RoXSk7CkBAIC0xMTQ1LDcgKzExNDUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpnZXRTaGFkZXJpdihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlciwgR0MzRGVudW0gcG5hbWUs
IEdDMwogICAgICAgICAgICAgKnZhbHVlID0gc3RhdGljX2Nhc3Q8aW50PihmYWxzZSk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgKnZhbHVlID0gc3RhdGljX2Nhc3Q8
aW50PihyZXN1bHQtPnNlY29uZC5pc1ZhbGlkKTsKKyAgICAgICAgKnZhbHVlID0gc3RhdGljX2Nh
c3Q8aW50PihyZXN1bHQtPnZhbHVlLmlzVmFsaWQpOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IElORk9fTE9HX0xFTkdUSDoKICAgICAgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1h
cC5lbmQoKSkgewpAQCAtMTE3Miw3ICsxMTcyLDcgQEAgU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNE
OjpnZXRTaGFkZXJJbmZvTG9nKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQogICAgIGlmIChyZXN1
bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsg
CiAKLSAgICBTaGFkZXJTb3VyY2VFbnRyeSBlbnRyeSA9IHJlc3VsdC0+c2Vjb25kOworICAgIFNo
YWRlclNvdXJjZUVudHJ5IGVudHJ5ID0gcmVzdWx0LT52YWx1ZTsKICAgICBpZiAoIWVudHJ5Lmlz
VmFsaWQpCiAgICAgICAgIHJldHVybiBlbnRyeS5sb2c7CiAKQEAgLTExOTgsNyArMTE5OCw3IEBA
IFN0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVyU291cmNlKFBsYXRmb3JtM0RPYmpl
Y3Qgc2hhZGVyKQogICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCiAg
ICAgICAgIHJldHVybiBTdHJpbmcoKTsgCiAKLSAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQuc291
cmNlOworICAgIHJldHVybiByZXN1bHQtPnZhbHVlLnNvdXJjZTsKIH0KIAogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvRUdMRGlzcGxheU9wZW5W
Ry5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvRUdMRGlzcGxh
eU9wZW5WRy5jcHAKaW5kZXggZDY4MWQ3NTgxZmIzZmJmMjlkODhlMTI2ZTUzODM4NzgyMzBiNTIy
MC4uMWE2OGFlZmY4Y2M4YzlmNTQ3NmI0ZjA1MzU2NjIwZmUxOTE0MWM0YyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL0VHTERpc3BsYXlPcGVuVkcu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW52Zy9FR0xEaXNw
bGF5T3BlblZHLmNwcApAQCAtMTIxLDcgKzEyMSw3IEBAIEVHTERpc3BsYXlPcGVuVkc6On5FR0xE
aXNwbGF5T3BlblZHKCkKIAogICAgIEhhc2hNYXA8RUdMU3VyZmFjZSwgRUdMaW50Pjo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gbV9zdXJmYWNlQ29uZmlnSWRzLmVuZCgpOwogICAgIGZvciAoSGFzaE1h
cDxFR0xTdXJmYWNlLCBFR0xpbnQ+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fc3VyZmFjZUNvbmZp
Z0lkcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGRlc3Ryb3lTdXJmYWNlKCgq
aXQpLmZpcnN0KTsKKyAgICAgICAgZGVzdHJveVN1cmZhY2UoKCppdCkua2V5KTsKIAogICAgIGVn
bFRlcm1pbmF0ZShtX2Rpc3BsYXkpOwogICAgIEFTU0VSVF9FR0xfTk9fRVJST1IoKTsKQEAgLTMz
OCw3ICszMzgsNyBAQCB2b2lkIEVHTERpc3BsYXlPcGVuVkc6OmRlc3Ryb3lTdXJmYWNlKGNvbnN0
IEVHTFN1cmZhY2UmIHN1cmZhY2UpCiAKICAgICAgICAgLy8gLi4uYnV0IG9ubHkgaWYgdGhlcmUn
cyBubyBvdGhlciBzdXJmYWNlcyBhc3NvY2lhdGVkIHRvIHRoYXQgY29udGV4dC4KICAgICAgICAg
Zm9yIChIYXNoTWFwPEVHTFN1cmZhY2UsIEVHTGludD46Oml0ZXJhdG9yIGl0ID0gbV9zdXJmYWNl
Q29uZmlnSWRzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgaWYgKCgq
aXQpLnNlY29uZCA9PSBzdXJmYWNlQ29uZmlnSWQpIHsKKyAgICAgICAgICAgIGlmICgoKml0KS52
YWx1ZSA9PSBzdXJmYWNlQ29uZmlnSWQpIHsKICAgICAgICAgICAgICAgICBpc0NvbnRleHRSZWZl
cmVuY2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAg
LTM1NCw3ICszNTQsNyBAQCB2b2lkIEVHTERpc3BsYXlPcGVuVkc6OmRlc3Ryb3lTdXJmYWNlKGNv
bnN0IEVHTFN1cmZhY2UmIHN1cmZhY2UpCiAKICAgICBIYXNoTWFwPEVHTE5hdGl2ZVdpbmRvd1R5
cGUsIEVHTFN1cmZhY2U+OjppdGVyYXRvciBlbmQgPSBtX3dpbmRvd1N1cmZhY2VzLmVuZCgpOwog
ICAgIGZvciAoSGFzaE1hcDxFR0xOYXRpdmVXaW5kb3dUeXBlLCBFR0xTdXJmYWNlPjo6aXRlcmF0
b3IgaXQgPSBtX3dpbmRvd1N1cmZhY2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAg
ICAgICBpZiAoKCppdCkuc2Vjb25kID09IHN1cmZhY2UpIHsKKyAgICAgICAgaWYgKCgqaXQpLnZh
bHVlID09IHN1cmZhY2UpIHsKICAgICAgICAgICAgIG1fd2luZG93U3VyZmFjZXMucmVtb3ZlKGl0
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC00MDksNyArNDA5LDcgQEAgRUdM
Q29udGV4dCBFR0xEaXNwbGF5T3BlblZHOjpjb250ZXh0Rm9yU3VyZmFjZShjb25zdCBFR0xTdXJm
YWNlJiBzdXJmYWNlKQogICAgIEhhc2hNYXA8RUdMaW50LCBFR0xDb250ZXh0Pjo6aXRlcmF0b3Ig
ZW5kID0gbV9jb250ZXh0cy5lbmQoKTsKIAogICAgIGZvciAoSGFzaE1hcDxFR0xpbnQsIEVHTENv
bnRleHQ+OjppdGVyYXRvciBpdCA9IG1fY29udGV4dHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7Ci0gICAgICAgIGVnbE1ha2VDdXJyZW50KG1fZGlzcGxheSwgc3VyZmFjZSwgc3VyZmFjZSwg
KCppdCkuc2Vjb25kKTsKKyAgICAgICAgZWdsTWFrZUN1cnJlbnQobV9kaXNwbGF5LCBzdXJmYWNl
LCBzdXJmYWNlLCAoKml0KS52YWx1ZSk7CiAgICAgICAgIGlmIChlZ2xHZXRFcnJvcigpID09IEVH
TF9TVUNDRVNTKSB7CiAgICAgICAgICAgICAvLyBSZXN0b3JlIHByZXZpb3VzIHN1cmZhY2UvY29u
dGV4dC4KICAgICAgICAgICAgIGlmIChjdXJyZW50Q29udGV4dCAhPSBFR0xfTk9fQ09OVEVYVCkg
ewpAQCAtNDE3LDggKzQxNyw4IEBAIEVHTENvbnRleHQgRUdMRGlzcGxheU9wZW5WRzo6Y29udGV4
dEZvclN1cmZhY2UoY29uc3QgRUdMU3VyZmFjZSYgc3VyZmFjZSkKICAgICAgICAgICAgICAgICBB
U1NFUlRfRUdMX05PX0VSUk9SKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyBDb29s
LCBzdXJmYWNlIGlzIGNvbXBhdGlibGUgdG8gb25lIG9mIG91ciBleGlzdGluZyBjb250ZXh0cy4K
LSAgICAgICAgICAgIG1fY29tcGF0aWJsZUNvbmZpZ0lkcy5zZXQoc3VyZmFjZUNvbmZpZ0lkLCAo
Kml0KS5maXJzdCk7Ci0gICAgICAgICAgICByZXR1cm4gKCppdCkuc2Vjb25kOworICAgICAgICAg
ICAgbV9jb21wYXRpYmxlQ29uZmlnSWRzLnNldChzdXJmYWNlQ29uZmlnSWQsICgqaXQpLmtleSk7
CisgICAgICAgICAgICByZXR1cm4gKCppdCkudmFsdWU7CiAgICAgICAgIH0KICAgICB9CiAgICAg
Ly8gUmVzdG9yZSBwcmV2aW91cyBzdXJmYWNlL2NvbnRleHQuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3Bw
CmluZGV4IDdmMTBlMzFiYjczOGQwMzYwZTQ0ODIzN2IwOTc5NTBhODVjZjQ4ZGYuLjE3YTU4MWUz
NjY5NmVjMDFjNTIzNjg0MTFhYWFiY2I2OTg0NzQ3YjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3Bw
CkBAIC03Miw3ICs3Miw3IEBAIHB1YmxpYzoKICAgICAgICAgewogICAgICAgICAgICAgR0xDb250
ZXh0RGF0YU1hcDo6aXRlcmF0b3IgaXQgPSBnbENvbnRleHREYXRhTWFwKCkuZmluZChjb250ZXh0
LT5wbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkpOwogICAgICAgICAgICAgaWYgKGl0ICE9IGds
Q29udGV4dERhdGFNYXAoKS5lbmQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gaXQtPnNlY29u
ZDsKKyAgICAgICAgICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwogCiAgICAgICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFNoYXJlZEdMRGF0YShjb250ZXh0KSk7CiAgICAgICAgIH0KQEAgLTky
LDcgKzkyLDcgQEAgcHVibGljOgogICAgICAgICAgICAgR0xDb250ZXh0RGF0YU1hcDo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gZ2xDb250ZXh0RGF0YU1hcCgpLmVuZCgpOwogICAgICAgICAgICAgR0xD
b250ZXh0RGF0YU1hcDo6aXRlcmF0b3IgaXQ7CiAgICAgICAgICAgICBmb3IgKGl0ID0gZ2xDb250
ZXh0RGF0YU1hcCgpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgICAg
IGlmIChpdC0+c2Vjb25kID09IHRoaXMpCisgICAgICAgICAgICAgICAgaWYgKGl0LT52YWx1ZSA9
PSB0aGlzKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJTaGFkZXJNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAKaW5kZXggNzNkNmZlZmJiMWI4
ZjgyY2Q3OGQ1NjdjZDVkNGY2OWY4MTE5YzkyNS4uNWNhOGM5NmJmZTQ1Mjk1MmI0M2I2NDIzODUx
YjFmYzgzNWQ3MzlmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIu
Y3BwCkBAIC0xOTksNyArMTk5LDcgQEAgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbT4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OmdldFNoYWRlclByb2cKIAogICAgIFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtTWFwOjppdGVyYXRvciBpdCA9IG1fdGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1NYXAuZmluZChzaGFkZXJUeXBlKTsKICAgICBpZiAoaXQgIT0gbV90ZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNv
bmQ7CisgICAgICAgIHJldHVybiBpdC0+dmFsdWU7CiAKICAgICBzd2l0Y2ggKHNoYWRlclR5cGUp
IHsKICAgICBjYXNlIFNpbXBsZToKQEAgLTc1OSw3ICs3NTksNyBAQCBQYXNzUmVmUHRyPFN0YW5k
YXJkRmlsdGVyUHJvZ3JhbT4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OmdldFNoYWRlckZv
ckZpbHRlcgogCiAgICAgICAgIG1fZmlsdGVyTWFwLmFkZChrZXksIHByb2dyYW0pOwogICAgIH0g
ZWxzZQotICAgICAgICBwcm9ncmFtID0gaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgcHJvZ3Jh
bSA9IGl0ZXJhdG9yLT52YWx1ZTsKIAogICAgIHJldHVybiBwcm9ncmFtOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udFBsYXRmb3JtRGF0
YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250UGxhdGZv
cm1EYXRhLmNwcAppbmRleCAxMjY2YzVjMWIyMzdhZWM3YmNjMzFkYzJiOTQ5OTYyNzg2YjY0N2Vj
Li43YzE5YjU0NDQ3ZGVlZTFlYjM1YTE5OGM3YmQ0MWIyOTFjOGQwOWU4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250UGxhdGZvcm1EYXRhLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250UGxhdGZv
cm1EYXRhLmNwcApAQCAtMjg3LDkgKzI4Nyw5IEBAIHN0YXRpYyBQYXNzUmVmUHRyPEZpeGVkU2l6
ZUZvbnREYXRhPiBjcmVhdGVGaXhlZFNpemVGb250RGF0YShjb25zdCBBdG9taWNTdHJpbmcmCiAg
ICAgRml4ZWRTaXplRm9udERhdGFLZXkga2V5KGZhbWlseSwgd2VpZ2h0LCBpdGFsaWMpOwogICAg
IEZpeGVkU2l6ZUZvbnRDYWNoZTo6QWRkUmVzdWx0IHJlc3VsdCA9IGdfZml4ZWRTaXplRm9udENh
Y2hlLmFkZChrZXksIFJlZlB0cjxGaXhlZFNpemVGb250RGF0YT4oKSk7CiAgICAgaWYgKHJlc3Vs
dC5pc05ld0VudHJ5KQotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IEZpeGVkU2l6
ZUZvbnREYXRhOjpjcmVhdGUoZmFtaWx5LCB3ZWlnaHQsIGl0YWxpYyk7CisgICAgICAgIHJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUgPSBGaXhlZFNpemVGb250RGF0YTo6Y3JlYXRlKGZhbWlseSwgd2Vp
Z2h0LCBpdGFsaWMpOwogCi0gICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAg
IHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogfQogCiBzdGF0aWMgTE9ORyB0b0dESUZv
bnRXZWlnaHQoRm9udFdlaWdodCBmb250V2VpZ2h0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL0RhdGFPYmplY3RHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL0RhdGFPYmplY3RHdGsuY3BwCmluZGV4IDFhODRmOGJkMzE5NTJiMjhlMjY4MjcxZGQy
YTVmNTdmNDRkODI3ZDcuLmFkZmM2NmUwMTVlNTAyMjY3ODhjMjE0NzY4YTE1YjI5MTM2ODQzYjgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRGF0YU9iamVjdEd0ay5jcHAKQEAg
LTE3MSw3ICsxNzEsNyBAQCBEYXRhT2JqZWN0R3RrKiBEYXRhT2JqZWN0R3RrOjpmb3JDbGlwYm9h
cmQoR3RrQ2xpcGJvYXJkKiBjbGlwYm9hcmQpCiAgICAgfQogCiAgICAgSGFzaE1hcDxHdGtDbGlw
Ym9hcmQqLCBSZWZQdHI8RGF0YU9iamVjdEd0az4gPjo6aXRlcmF0b3IgaXQgPSBvYmplY3RNYXAu
ZmluZChjbGlwYm9hcmQpOwotICAgIHJldHVybiBpdC0+c2Vjb25kLmdldCgpOworICAgIHJldHVy
biBpdC0+dmFsdWUuZ2V0KCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9HdGtEcmFnQW5kRHJvcEhlbHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvR3RrRHJhZ0FuZERyb3BIZWxwZXIuY3BwCmluZGV4IDc2M2QxMjBkMDk0MTYyMjcy
NjYwYzYwNjMyYTE5Mjk4NmY1NDJlYTQuLmZjMmY1NmU2MTY2ZWIxYWFjZGJhZGE4ZjUyZmVmM2M2
ZGQ4ODY0Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtEcmFn
QW5kRHJvcEhlbHBlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0Ry
YWdBbmREcm9wSGVscGVyLmNwcApAQCAtNzAsNyArNzAsNyBAQCB2b2lkIEd0a0RyYWdBbmREcm9w
SGVscGVyOjpoYW5kbGVHZXREcmFnRGF0YShHZGtEcmFnQ29udGV4dCogY29udGV4dCwgR3RrU2Vs
ZWN0aQogICAgIERyYWdnaW5nRGF0YU9iamVjdHNNYXA6Oml0ZXJhdG9yIGl0ZXJhdG9yID0gbV9k
cmFnZ2luZ0RhdGFPYmplY3RzLmZpbmQoY29udGV4dCk7CiAgICAgaWYgKGl0ZXJhdG9yID09IG1f
ZHJhZ2dpbmdEYXRhT2JqZWN0cy5lbmQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIFBhc3RlYm9h
cmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPmZpbGxTZWxlY3Rpb25EYXRhKHNl
bGVjdGlvbkRhdGEsIGluZm8sIGl0ZXJhdG9yLT5zZWNvbmQuZ2V0KCkpOworICAgIFBhc3RlYm9h
cmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPmZpbGxTZWxlY3Rpb25EYXRhKHNl
bGVjdGlvbkRhdGEsIGluZm8sIGl0ZXJhdG9yLT52YWx1ZS5nZXQoKSk7CiB9CiAKIHN0cnVjdCBI
YW5kbGVEcmFnTGF0ZXJEYXRhIHsKQEAgLTExNiw3ICsxMTYsNyBAQCB2b2lkIEd0a0RyYWdBbmRE
cm9wSGVscGVyOjpoYW5kbGVEcmFnTGVhdmUoR2RrRHJhZ0NvbnRleHQqIGdka0NvbnRleHQsIERy
YWdFeGl0ZQogICAgIC8vIHRoZSBkcmFnLWRyb3Agc2lnbmFsLiBXZSB3YW50IHRoZSBhY3Rpb25z
IGZvciBkcmFnLWxlYXZlIHRvIGhhcHBlbiBhZnRlcgogICAgIC8vIHRob3NlIGZvciBkcmFnLWRy
b3AsIHNvIHNjaGVkdWxlIHRoZW0gdG8gaGFwcGVuIGFzeW5jaHJvbm91c2x5IGhlcmUuCiAgICAg
SGFuZGxlRHJhZ0xhdGVyRGF0YSogZGF0YSA9IG5ldyBIYW5kbGVEcmFnTGF0ZXJEYXRhOwotICAg
IGRhdGEtPmNvbnRleHQgPSBpdGVyYXRvci0+c2Vjb25kOworICAgIGRhdGEtPmNvbnRleHQgPSBp
dGVyYXRvci0+dmFsdWU7CiAgICAgZGF0YS0+Y29udGV4dC0+ZXhpdGVkQ2FsbGJhY2sgPSBleGl0
ZWRDYWxsYmFjazsKICAgICBkYXRhLT5nbHVlID0gdGhpczsKICAgICBnX3RpbWVvdXRfYWRkKDAs
IHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KGhhbmRsZURyYWdMZWF2ZUxhdGVyQ2FsbGJh
Y2spLCBkYXRhKTsKQEAgLTE0MCw3ICsxNDAsNyBAQCBQYXNzT3duUHRyPERyYWdEYXRhPiBHdGtE
cmFnQW5kRHJvcEhlbHBlcjo6aGFuZGxlRHJhZ01vdGlvbihHZGtEcmFnQ29udGV4dCogY29udAog
ICAgICAgICBtX2Ryb3BwaW5nQ29udGV4dHMuc2V0KGNvbnRleHQsIGRyb3BwaW5nQ29udGV4dCk7
CiAgICAgICAgIHF1ZXJ5TmV3RHJvcENvbnRleHREYXRhKGRyb3BwaW5nQ29udGV4dCwgbV93aWRn
ZXQsIHRpbWUpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGRyb3BwaW5nQ29udGV4dCA9IGl0ZXJh
dG9yLT5zZWNvbmQ7CisgICAgICAgIGRyb3BwaW5nQ29udGV4dCA9IGl0ZXJhdG9yLT52YWx1ZTsK
ICAgICAgICAgZHJvcHBpbmdDb250ZXh0LT5sYXN0TW90aW9uUG9zaXRpb24gPSBwb3NpdGlvbjsK
ICAgICB9CiAKQEAgLTE2Miw3ICsxNjIsNyBAQCBQYXNzT3duUHRyPERyYWdEYXRhPiBHdGtEcmFn
QW5kRHJvcEhlbHBlcjo6aGFuZGxlRHJhZ0RhdGFSZWNlaXZlZChHZGtEcmFnQ29udGV4dAogICAg
IGlmIChpdGVyYXRvciA9PSBtX2Ryb3BwaW5nQ29udGV4dHMuZW5kKCkpCiAgICAgICAgIHJldHVy
biBhZG9wdFB0cihzdGF0aWNfY2FzdDxEcmFnRGF0YSo+KDApKTsKIAotICAgIERyb3BwaW5nQ29u
dGV4dCogZHJvcHBpbmdDb250ZXh0ID0gaXRlcmF0b3ItPnNlY29uZDsKKyAgICBEcm9wcGluZ0Nv
bnRleHQqIGRyb3BwaW5nQ29udGV4dCA9IGl0ZXJhdG9yLT52YWx1ZTsKICAgICBkcm9wcGluZ0Nv
bnRleHQtPnBlbmRpbmdEYXRhUmVxdWVzdHMtLTsKICAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZh
dWx0UGFzdGVib2FyZEhlbHBlcigpLT5maWxsRGF0YU9iamVjdEZyb21Ecm9wRGF0YShzZWxlY3Rp
b25EYXRhLCBpbmZvLCBkcm9wcGluZ0NvbnRleHQtPmRhdGFPYmplY3QuZ2V0KCkpOwogCkBAIC0x
ODUsNyArMTg1LDcgQEAgUGFzc093blB0cjxEcmFnRGF0YT4gR3RrRHJhZ0FuZERyb3BIZWxwZXI6
OmhhbmRsZURyYWdEcm9wKEdka0RyYWdDb250ZXh0KiBjb250ZXgKICAgICBpZiAoaXRlcmF0b3Ig
PT0gbV9kcm9wcGluZ0NvbnRleHRzLmVuZCgpKQogICAgICAgICByZXR1cm4gYWRvcHRQdHIoc3Rh
dGljX2Nhc3Q8RHJhZ0RhdGEqPigwKSk7CiAKLSAgICBEcm9wcGluZ0NvbnRleHQqIGRyb3BwaW5n
Q29udGV4dCA9IGl0ZXJhdG9yLT5zZWNvbmQ7CisgICAgRHJvcHBpbmdDb250ZXh0KiBkcm9wcGlu
Z0NvbnRleHQgPSBpdGVyYXRvci0+dmFsdWU7CiAgICAgZHJvcHBpbmdDb250ZXh0LT5kcm9wSGFw
cGVuZWQgPSB0cnVlOwogCiAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBEcmFnRGF0YShkcm9wcGlu
Z0NvbnRleHQtPmRhdGFPYmplY3QuZ2V0KCksIHBvc2l0aW9uLCAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0azMuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrMy5jcHAKaW5kZXggNzc0OTM5MTUxNzEzZGYw
MTEzNGQ2Y2VhNGVkOWQ3MDRiNGRjZmMwYi4uMGE4MzgyN2M3ZmViY2JlNDA1NDhmYWQ1NjJiNTQx
MTcxZWMxNjlmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRl
clRoZW1lR3RrMy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRo
ZW1lR3RrMy5jcHAKQEAgLTU2LDcgKzU2LDcgQEAgc3RhdGljIHZvaWQgZ3RrU3R5bGVDaGFuZ2Vk
Q2FsbGJhY2soR09iamVjdCosIEdQYXJhbVNwZWMqKQogewogICAgIFN0eWxlQ29udGV4dE1hcDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gc3R5bGVDb250ZXh0TWFwKCkuZW5kKCk7CiAgICAgZm9yIChT
dHlsZUNvbnRleHRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBzdHlsZUNvbnRleHRNYXAoKS5i
ZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQotICAgICAgICBndGtfc3R5bGVfY29udGV4dF9p
bnZhbGlkYXRlKGl0ZXItPnNlY29uZC5nZXQoKSk7CisgICAgICAgIGd0a19zdHlsZV9jb250ZXh0
X2ludmFsaWRhdGUoaXRlci0+dmFsdWUuZ2V0KCkpOwogCiAgICAgUGFnZTo6c2NoZWR1bGVGb3Jj
ZWRTdHlsZVJlY2FsY0ZvckFsbFBhZ2VzKCk7CiB9CkBAIC03OSw3ICs3OSw3IEBAIHN0YXRpYyBH
dGtTdHlsZUNvbnRleHQqIGdldFN0eWxlQ29udGV4dChHVHlwZSB3aWRnZXRUeXBlKQogewogICAg
IFN0eWxlQ29udGV4dE1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IHN0eWxlQ29udGV4dE1hcCgpLmFk
ZCh3aWRnZXRUeXBlLCAwKTsKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICBy
ZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIHJldHVybiByZXN1
bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpOwogCiAgICAgR3RrV2lkZ2V0UGF0aCogcGF0aCA9IGd0
a193aWRnZXRfcGF0aF9uZXcoKTsKICAgICBndGtfd2lkZ2V0X3BhdGhfYXBwZW5kX3R5cGUocGF0
aCwgd2lkZ2V0VHlwZSk7CkBAIC0xMTEsNyArMTExLDcgQEAgc3RhdGljIEd0a1N0eWxlQ29udGV4
dCogZ2V0U3R5bGVDb250ZXh0KEdUeXBlIHdpZGdldFR5cGUpCiAgICAgZ3RrX3N0eWxlX2NvbnRl
eHRfc2V0X3BhdGgoY29udGV4dC5nZXQoKSwgcGF0aCk7CiAgICAgZ3RrX3dpZGdldF9wYXRoX2Zy
ZWUocGF0aCk7CiAKLSAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IGNvbnRleHQ7CisgICAg
cmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGNvbnRleHQ7CiAgICAgcmV0dXJuIGNvbnRleHQuZ2V0
KCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxi
YXJUaGVtZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxiYXJUaGVt
ZU1hYy5tbQppbmRleCA5NmFhMTJhMjY5MTQ3Zjc2OGVlM2Y2NDUxZGZlYjUyNzNmOTRlYzQ5Li5m
ZDliNzI0YTRkOWM0YjQ3MTE0ZWRmN2RiYmM4OGZjNTg1MmYxNmQ0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMubW0KKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbGJhclRoZW1lTWFjLm1tCkBAIC04Niw4ICs4Niw4
IEBAIHN0YXRpYyBTY3JvbGxiYXJQYWludGVyTWFwKiBzY3JvbGxiYXJNYXAoKQogICAgICAgICBy
ZXR1cm47CiAgICAgU2Nyb2xsYmFyUGFpbnRlck1hcDo6aXRlcmF0b3IgZW5kID0gc2Nyb2xsYmFy
TWFwKCktPmVuZCgpOwogICAgIGZvciAoU2Nyb2xsYmFyUGFpbnRlck1hcDo6aXRlcmF0b3IgaXQg
PSBzY3JvbGxiYXJNYXAoKS0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGl0
LT5maXJzdC0+c3R5bGVDaGFuZ2VkKCk7Ci0gICAgICAgIGl0LT5maXJzdC0+aW52YWxpZGF0ZSgp
OworICAgICAgICBpdC0+a2V5LT5zdHlsZUNoYW5nZWQoKTsKKyAgICAgICAgaXQtPmtleS0+aW52
YWxpZGF0ZSgpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9DcmVkZW50aWFsU3RvcmFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL0NyZWRlbnRpYWxTdG9yYWdlLmNwcAppbmRleCBmNjI0ZDRmY2IyOTJjYzQwYzVi
NjllZWRmM2U1Yzg3NTE1MmYwMWY5Li44YjVhYzQ3OGIyMTM1MDZjZDljZWFjYTliYTU4NTFiY2Qy
OTNhNWM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0NyZWRl
bnRpYWxTdG9yYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Ny
ZWRlbnRpYWxTdG9yYWdlLmNwcApAQCAtMTQ3LDcgKzE0Nyw3IEBAIGJvb2wgQ3JlZGVudGlhbFN0
b3JhZ2U6OnNldChjb25zdCBDcmVkZW50aWFsJiBjcmVkZW50aWFsLCBjb25zdCBLVVJMJiB1cmwp
CiAgICAgaWYgKGl0ZXIgPT0gcGF0aFRvRGVmYXVsdFByb3RlY3Rpb25TcGFjZU1hcCgpLmVuZCgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgQVNTRVJUKG9yaWdpbnNXaXRoQ3JlZGVudGlh
bHMoKS5jb250YWlucyhvcmlnaW5TdHJpbmdGcm9tVVJMKHVybCkpKTsKLSAgICBwcm90ZWN0aW9u
U3BhY2VUb0NyZWRlbnRpYWxNYXAoKS5zZXQoaXRlci0+c2Vjb25kLCBjcmVkZW50aWFsKTsKKyAg
ICBwcm90ZWN0aW9uU3BhY2VUb0NyZWRlbnRpYWxNYXAoKS5zZXQoaXRlci0+dmFsdWUsIGNyZWRl
bnRpYWwpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xNTYsNyArMTU2LDcgQEAgQ3JlZGVu
dGlhbCBDcmVkZW50aWFsU3RvcmFnZTo6Z2V0KGNvbnN0IEtVUkwmIHVybCkKICAgICBQYXRoVG9E
ZWZhdWx0UHJvdGVjdGlvblNwYWNlTWFwOjppdGVyYXRvciBpdGVyID0gZmluZERlZmF1bHRQcm90
ZWN0aW9uU3BhY2VGb3JVUkwodXJsKTsKICAgICBpZiAoaXRlciA9PSBwYXRoVG9EZWZhdWx0UHJv
dGVjdGlvblNwYWNlTWFwKCkuZW5kKCkpCiAgICAgICAgIHJldHVybiBDcmVkZW50aWFsKCk7Ci0g
ICAgcmV0dXJuIHByb3RlY3Rpb25TcGFjZVRvQ3JlZGVudGlhbE1hcCgpLmdldChpdGVyLT5zZWNv
bmQpOworICAgIHJldHVybiBwcm90ZWN0aW9uU3BhY2VUb0NyZWRlbnRpYWxNYXAoKS5nZXQoaXRl
ci0+dmFsdWUpOwogfQogCiB2b2lkIENyZWRlbnRpYWxTdG9yYWdlOjpzZXRQcml2YXRlTW9kZShi
b29sIG1vZGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hU
VFBIZWFkZXJNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQSGVh
ZGVyTWFwLmNwcAppbmRleCA1MDA5MWUxOWQzYWY1NmZmNGE4ZGYxNzViZjg5Nzg3MDA3NjE0Mjgw
Li5kZWZlMWFlODRiZjBhZGYwNzc5NDk1NWIxMWE1ZGM3M2VhMDIzZTI2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBIZWFkZXJNYXAuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUEhlYWRlck1hcC5jcHAKQEAgLTUyLDcg
KzUyLDcgQEAgUGFzc093blB0cjxDcm9zc1RocmVhZEhUVFBIZWFkZXJNYXBEYXRhPiBIVFRQSGVh
ZGVyTWFwOjpjb3B5RGF0YSgpIGNvbnN0CiAKICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVy
YXRvciBlbmRfaXQgPSBlbmQoKTsKICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gYmVnaW4oKTsgaXQgIT0gZW5kX2l0OyArK2l0KSB7Ci0gICAgICAgIGRhdGEtPmFw
cGVuZChtYWtlX3BhaXIoaXQtPmZpcnN0LnN0cmluZygpLmlzb2xhdGVkQ29weSgpLCBpdC0+c2Vj
b25kLmlzb2xhdGVkQ29weSgpKSk7CisgICAgICAgIGRhdGEtPmFwcGVuZChtYWtlX3BhaXIoaXQt
PmtleS5zdHJpbmcoKS5pc29sYXRlZENvcHkoKSwgaXQtPnZhbHVlLmlzb2xhdGVkQ29weSgpKSk7
CiAgICAgfQogICAgIHJldHVybiBkYXRhLnJlbGVhc2UoKTsKIH0KQEAgLTEwMCw3ICsxMDAsNyBA
QCBTdHJpbmcgSFRUUEhlYWRlck1hcDo6Z2V0KGNvbnN0IGNoYXIqIG5hbWUpIGNvbnN0CiAgICAg
Y29uc3RfaXRlcmF0b3IgaSA9IGZpbmQ8Y29uc3QgY2hhciosIENhc2VGb2xkaW5nQ1N0cmluZ1Ry
YW5zbGF0b3I+KG5hbWUpOwogICAgIGlmIChpID09IGVuZCgpKQogICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7Ci0gICAgcmV0dXJuIGktPnNlY29uZDsKKyAgICByZXR1cm4gaS0+dmFsdWU7CiB9CiAg
ICAgCiBib29sIEhUVFBIZWFkZXJNYXA6OmNvbnRhaW5zKGNvbnN0IGNoYXIqIG5hbWUpIGNvbnN0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL01JTUVIZWFkZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9NSU1FSGVhZGVyLmNwcAppbmRl
eCA1ZDZiODU4ZjQ2ZTQzODNmY2IyZmVhNjI4NThhZjc1MzJkNDNhNWFmLi5mNGUzZWJmNjc0ZGU2
YmQxZDI0YTk1OTBhNDgxOGJlYjZmZDhkZTYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL01JTUVIZWFkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvTUlNRUhlYWRlci5jcHAKQEAgLTg2LDcgKzg2LDcgQEAgUGFzc1JlZlB0cjxN
SU1FSGVhZGVyPiBNSU1FSGVhZGVyOjpwYXJzZUhlYWRlcihTaGFyZWRCdWZmZXJDaHVua1JlYWRl
ciogYnVmZmVyKQogICAgIEtleVZhbHVlTWFwOjppdGVyYXRvciBtaW1lUGFyYW1ldGVyc0l0ZXJh
dG9yID0ga2V5VmFsdWVQYWlycy5maW5kKCJjb250ZW50LXR5cGUiKTsKICAgICBpZiAobWltZVBh
cmFtZXRlcnNJdGVyYXRvciAhPSBrZXlWYWx1ZVBhaXJzLmVuZCgpKSB7CiAgICAgICAgIC8vIEZJ
WE1FOiBtYWtlIENvbnRlbnRUeXBlUGFyc2VyIG1vcmUgZmxleGlibGUgc28gd2UgZG9uJ3QgaGF2
ZSB0byBzeW50aGVzaXplIHRoZSAiQ29udGVudC1UeXBlOiIuCi0gICAgICAgIENvbnRlbnRUeXBl
UGFyc2VyIGNvbnRlbnRUeXBlUGFyc2VyKG1ha2VTdHJpbmcoIkNvbnRlbnQtVHlwZToiLCBtaW1l
UGFyYW1ldGVyc0l0ZXJhdG9yLT5zZWNvbmQpKTsKKyAgICAgICAgQ29udGVudFR5cGVQYXJzZXIg
Y29udGVudFR5cGVQYXJzZXIobWFrZVN0cmluZygiQ29udGVudC1UeXBlOiIsIG1pbWVQYXJhbWV0
ZXJzSXRlcmF0b3ItPnZhbHVlKSk7CiAgICAgICAgIG1pbWVIZWFkZXItPm1fY29udGVudFR5cGUg
PSBjb250ZW50VHlwZVBhcnNlci5taW1lVHlwZSgpOwogICAgICAgICBpZiAoIW1pbWVIZWFkZXIt
PmlzTXVsdGlwYXJ0KCkpCiAgICAgICAgICAgICBtaW1lSGVhZGVyLT5tX2NoYXJzZXQgPSBjb250
ZW50VHlwZVBhcnNlci5jaGFyc2V0KCkuc3RyaXBXaGl0ZVNwYWNlKCk7CkBAIC0xMDUsMTEgKzEw
NSwxMSBAQCBQYXNzUmVmUHRyPE1JTUVIZWFkZXI+IE1JTUVIZWFkZXI6OnBhcnNlSGVhZGVyKFNo
YXJlZEJ1ZmZlckNodW5rUmVhZGVyKiBidWZmZXIpCiAKICAgICBtaW1lUGFyYW1ldGVyc0l0ZXJh
dG9yID0ga2V5VmFsdWVQYWlycy5maW5kKCJjb250ZW50LXRyYW5zZmVyLWVuY29kaW5nIik7CiAg
ICAgaWYgKG1pbWVQYXJhbWV0ZXJzSXRlcmF0b3IgIT0ga2V5VmFsdWVQYWlycy5lbmQoKSkKLSAg
ICAgICAgbWltZUhlYWRlci0+bV9jb250ZW50VHJhbnNmZXJFbmNvZGluZyA9IHBhcnNlQ29udGVu
dFRyYW5zZmVyRW5jb2RpbmcobWltZVBhcmFtZXRlcnNJdGVyYXRvci0+c2Vjb25kKTsKKyAgICAg
ICAgbWltZUhlYWRlci0+bV9jb250ZW50VHJhbnNmZXJFbmNvZGluZyA9IHBhcnNlQ29udGVudFRy
YW5zZmVyRW5jb2RpbmcobWltZVBhcmFtZXRlcnNJdGVyYXRvci0+dmFsdWUpOwogCiAgICAgbWlt
ZVBhcmFtZXRlcnNJdGVyYXRvciA9IGtleVZhbHVlUGFpcnMuZmluZCgiY29udGVudC1sb2NhdGlv
biIpOwogICAgIGlmIChtaW1lUGFyYW1ldGVyc0l0ZXJhdG9yICE9IGtleVZhbHVlUGFpcnMuZW5k
KCkpCi0gICAgICAgIG1pbWVIZWFkZXItPm1fY29udGVudExvY2F0aW9uID0gbWltZVBhcmFtZXRl
cnNJdGVyYXRvci0+c2Vjb25kOworICAgICAgICBtaW1lSGVhZGVyLT5tX2NvbnRlbnRMb2NhdGlv
biA9IG1pbWVQYXJhbWV0ZXJzSXRlcmF0b3ItPnZhbHVlOwogCiAgICAgcmV0dXJuIG1pbWVIZWFk
ZXIucmVsZWFzZSgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9SZXNvdXJjZUhhbmRsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L1Jlc291cmNlSGFuZGxlLmNwcAppbmRleCA3ZGRjNDdlNGVhNzk5YTQ2ZGVlNmYzMmNmZDA3OGVm
NzUxNTRmMWVlLi42ZDEyZjlkODliMDI0Nzc0NmE1N2UxYmJjYWZiMmMyMTdkNTkxMDM1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNw
cApAQCAtNzEsNyArNzEsNyBAQCBQYXNzUmVmUHRyPFJlc291cmNlSGFuZGxlPiBSZXNvdXJjZUhh
bmRsZTo6Y3JlYXRlKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjbwogICAgIEJ1aWx0aW5S
ZXNvdXJjZUhhbmRsZUNvbnN0cnVjdG9yTWFwOjppdGVyYXRvciBwcm90b2NvbE1hcEl0ZW0gPSBi
dWlsdGluUmVzb3VyY2VIYW5kbGVDb25zdHJ1Y3Rvck1hcCgpLmZpbmQocmVxdWVzdC51cmwoKS5w
cm90b2NvbCgpKTsKIAogICAgIGlmIChwcm90b2NvbE1hcEl0ZW0gIT0gYnVpbHRpblJlc291cmNl
SGFuZGxlQ29uc3RydWN0b3JNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHByb3RvY29sTWFw
SXRlbS0+c2Vjb25kKHJlcXVlc3QsIGNsaWVudCk7CisgICAgICAgIHJldHVybiBwcm90b2NvbE1h
cEl0ZW0tPnZhbHVlKHJlcXVlc3QsIGNsaWVudCk7CiAKICAgICBSZWZQdHI8UmVzb3VyY2VIYW5k
bGU+IG5ld0hhbmRsZShhZG9wdFJlZihuZXcgUmVzb3VyY2VIYW5kbGUocmVxdWVzdCwgY2xpZW50
LCBkZWZlcnNMb2FkaW5nLCBzaG91bGRDb250ZW50U25pZmYpKSk7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwCmlu
ZGV4IGI4MTkzZjAyZjg1NjNhMTdkNTYxMTg3ODEzMGMzNDY2ZGEyYWFlYzkuLjNkMjY5MzI1YzE3
YzY0OTY3MTJlMjEwMDg4ODAyNjQyZTdjOWQyZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcApAQCAtMzc0LDcg
KzM3NCw3IEBAIHZvaWQgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6YWRkSFRUUEhlYWRlckZpZWxkKGNv
bnN0IEF0b21pY1N0cmluZyYgbmFtZSwgY29uc3QgU3RyCiAgICAgdXBkYXRlUmVzb3VyY2VSZXF1
ZXN0KCk7CiAgICAgSFRUUEhlYWRlck1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1faHR0cEhlYWRl
ckZpZWxkcy5hZGQobmFtZSwgdmFsdWUpOwogICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0g
ICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQg
KyAnLCcgKyB2YWx1ZTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IHJlc3VsdC5p
dGVyYXRvci0+dmFsdWUgKyAnLCcgKyB2YWx1ZTsKIAogICAgIGlmICh1cmwoKS5wcm90b2NvbElz
SW5IVFRQRmFtaWx5KCkpCiAgICAgICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZhbHNl
OwpAQCAtMzg0LDcgKzM4NCw3IEBAIHZvaWQgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6YWRkSFRUUEhl
YWRlckZpZWxkcyhjb25zdCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJGaWVsZHMpCiB7CiAgICAgSFRU
UEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaGVhZGVyRmllbGRzLmVuZCgpOwogICAg
IGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBoZWFkZXJGaWVsZHMuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBhZGRIVFRQSGVhZGVyRmllbGQoaXQtPmZp
cnN0LCBpdC0+c2Vjb25kKTsKKyAgICAgICAgYWRkSFRUUEhlYWRlckZpZWxkKGl0LT5rZXksIGl0
LT52YWx1ZSk7CiB9CiAKIGJvb2wgZXF1YWxJZ25vcmluZ0hlYWRlckZpZWxkcyhjb25zdCBSZXNv
dXJjZVJlcXVlc3RCYXNlJiBhLCBjb25zdCBSZXNvdXJjZVJlcXVlc3RCYXNlJiBiKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNl
UmVxdWVzdEJsYWNrQmVycnkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9i
bGFja2JlcnJ5L1Jlc291cmNlUmVxdWVzdEJsYWNrQmVycnkuY3BwCmluZGV4IGVlZmQ1YTVlNDcz
NjBjNzE4OThjZmQzZWIwNjE2MmFkMWJmNTU3NjYuLjc1N2JkM2UyNDMwNGY3NDNjMWUzOWNjYTc4
NGQ0OGZmODNlYzAzYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvYmxhY2tiZXJyeS9SZXNvdXJjZVJlcXVlc3RCbGFja0JlcnJ5LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvUmVzb3VyY2VSZXF1ZXN0QmxhY2tC
ZXJyeS5jcHAKQEAgLTEzOSw3ICsxMzksNyBAQCBSZXNvdXJjZVJlcXVlc3Q6OlRhcmdldFR5cGUg
UmVzb3VyY2VSZXF1ZXN0Ojp0YXJnZXRUeXBlRnJvbU1pbWVUeXBlKGNvbnN0IFN0cmluZwogICAg
IGlmIChpdGVyID09IG1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuIFJlc291cmNlUmVxdWVzdDo6
VGFyZ2V0SXNVbnNwZWNpZmllZDsKIAotICAgIHJldHVybiBpdGVyLT5zZWNvbmQ7CisgICAgcmV0
dXJuIGl0ZXItPnZhbHVlOwogfQogCiB2b2lkIFJlc291cmNlUmVxdWVzdDo6aW5pdGlhbGl6ZVBs
YXRmb3JtUmVxdWVzdChOZXR3b3JrUmVxdWVzdCYgcGxhdGZvcm1SZXF1ZXN0LCBib29sIGNvb2tp
ZXNFbmFibGVkLCBib29sIGlzSW5pdGlhbCwgYm9vbCBpc1JlZGlyZWN0KSBjb25zdApAQCAtMTk3
LDggKzE5Nyw4IEBAIHZvaWQgUmVzb3VyY2VSZXF1ZXN0Ojppbml0aWFsaXplUGxhdGZvcm1SZXF1
ZXN0KE5ldHdvcmtSZXF1ZXN0JiBwbGF0Zm9ybVJlcXVlc3QsCiAgICAgICAgIGJvb2wgY29va2ll
SGVhZGVyTWF5QmVEaXJ0eSA9IGlzUmVkaXJlY3QgfHwgY2FjaGVQb2xpY3koKSA9PSBXZWJDb3Jl
OjpSZWxvYWRJZ25vcmluZ0NhY2hlRGF0YSB8fCBjYWNoZVBvbGljeSgpID09IFdlYkNvcmU6OlJl
dHVybkNhY2hlRGF0YUVsc2VMb2FkOwogCiAgICAgICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBodHRwSGVhZGVyRmllbGRzKCkuYmVnaW4oKTsgaXQgIT0gaHR0cEhl
YWRlckZpZWxkcygpLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgICAgICBTdHJpbmcga2V5ID0gaXQt
PmZpcnN0OwotICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0gaXQtPnNlY29uZDsKKyAgICAgICAg
ICAgIFN0cmluZyBrZXkgPSBpdC0+a2V5OworICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0gaXQt
PnZhbHVlOwogICAgICAgICAgICAgaWYgKCFrZXkuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAg
ICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGtleSwgIkNvb2tpZSIpKSB7CiAgICAgICAgICAgICAg
ICAgICAgIC8vIFdlIHdvbid0IHVzZSB0aGUgb2xkIGNvb2tpZXMgb2YgcmVzb3VyY2VSZXF1ZXN0
IGZvciBuZXcgbG9jYXRpb24gYmVjYXVzZSB0aGVzZSBjb29raWVzIG1heSBiZSBjaGFuZ2VkIGJ5
IHJlZGlyZWN0aW9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRk5ldC5jcHAKaW5kZXggZjZkMWYzODIxMjYyZjE5NTA0
MTU1OWEyNTZjMDJiZDZiZDc4MjllNS4uMDFlOGI4YWU1YzBkMWM2YTZhOGYwMzMwODVlOTBmMDEw
YmMxZjdjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9S
ZXNvdXJjZUhhbmRsZUNGTmV0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZOZXQuY3BwCkBAIC00MjgsNyArNDI4LDcgQEAgc3RhdGlj
IENGVVJMUmVxdWVzdFJlZiBtYWtlRmluYWxSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCwgYm9vbCBzaG8KICAgICAgICAgaWYgKCFzc2xQcm9wcykKICAgICAgICAgICAgIHNz
bFByb3BzLmFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZh
dWx0LCAwLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFy
eVZhbHVlQ2FsbEJhY2tzKSk7CiAjaWYgUExBVEZPUk0oV0lOKQotICAgICAgICB3a1NldENsaWVu
dENlcnRpZmljYXRlSW5TU0xQcm9wZXJ0aWVzKHNzbFByb3BzLmdldCgpLCAoY2xpZW50Q2VydC0+
c2Vjb25kKS5nZXQoKSk7CisgICAgICAgIHdrU2V0Q2xpZW50Q2VydGlmaWNhdGVJblNTTFByb3Bl
cnRpZXMoc3NsUHJvcHMuZ2V0KCksIChjbGllbnRDZXJ0LT52YWx1ZSkuZ2V0KCkpOwogI2VuZGlm
CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nm
L1Jlc291cmNlUmVxdWVzdENGTmV0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY2YvUmVzb3VyY2VSZXF1ZXN0Q0ZOZXQuY3BwCmluZGV4IDU3YTZmYjJjOGE0YzA4Zjc5ZmJk
NGI5YmM1NWI4NWE5MzQyNjdhMzcuLjhjZmY4N2NhMGQ1OGVhMmU1MjNmMzczMGQ2YjRhNzczMGIw
NmJlNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVz
b3VyY2VSZXF1ZXN0Q0ZOZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY2YvUmVzb3VyY2VSZXF1ZXN0Q0ZOZXQuY3BwCkBAIC0xMjAsOCArMTIwLDggQEAgc3RhdGlj
IGlubGluZSB2b2lkIHNldEhlYWRlckZpZWxkcyhDRk11dGFibGVVUkxSZXF1ZXN0UmVmIHJlcXVl
c3QsIGNvbnN0IEhUVFBIZWEKIAogICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IHJlcXVlc3RIZWFkZXJzLmVuZCgpOwogICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSByZXF1ZXN0SGVhZGVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
LSAgICAgICAgQ0ZTdHJpbmdSZWYga2V5ID0gaXQtPmZpcnN0LmNyZWF0ZUNGU3RyaW5nKCk7Ci0g
ICAgICAgIENGU3RyaW5nUmVmIHZhbHVlID0gaXQtPnNlY29uZC5jcmVhdGVDRlN0cmluZygpOwor
ICAgICAgICBDRlN0cmluZ1JlZiBrZXkgPSBpdC0+a2V5LmNyZWF0ZUNGU3RyaW5nKCk7CisgICAg
ICAgIENGU3RyaW5nUmVmIHZhbHVlID0gaXQtPnZhbHVlLmNyZWF0ZUNGU3RyaW5nKCk7CiAgICAg
ICAgIENGVVJMUmVxdWVzdFNldEhUVFBIZWFkZXJGaWVsZFZhbHVlKHJlcXVlc3QsIGtleSwgdmFs
dWUpOwogICAgICAgICBDRlJlbGVhc2Uoa2V5KTsKICAgICAgICAgQ0ZSZWxlYXNlKHZhbHVlKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJj
ZUhhbmRsZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJs
L1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHAKaW5kZXggYWYwNzVlZjllMzIxODhlNzcxNDk3ZWJm
N2M3NGRjMWFhMTVlMjE3YS4uNjViY2MxMGFkM2QyMDA1ZDY4OWQ3M2U4ZGQ2Nzk4OGI5YzVjYjVk
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291
cmNlSGFuZGxlTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHAKQEAgLTcwMyw4ICs3MDMsOCBAQCB2b2lk
IFJlc291cmNlSGFuZGxlTWFuYWdlcjo6aW5pdGlhbGl6ZUhhbmRsZShSZXNvdXJjZUhhbmRsZSog
am9iKQogICAgICAgICBIVFRQSGVhZGVyTWFwIGN1c3RvbUhlYWRlcnMgPSBqb2ItPmZpcnN0UmVx
dWVzdCgpLmh0dHBIZWFkZXJGaWVsZHMoKTsKICAgICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gY3VzdG9tSGVhZGVycy5lbmQoKTsKICAgICAgICAgZm9yIChIVFRQSGVh
ZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGN1c3RvbUhlYWRlcnMuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBTdHJpbmcga2V5ID0gaXQtPmZpcnN0OwotICAgICAg
ICAgICAgU3RyaW5nIHZhbHVlID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIFN0cmluZyBrZXkg
PSBpdC0+a2V5OworICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0gaXQtPnZhbHVlOwogICAgICAg
ICAgICAgU3RyaW5nIGhlYWRlclN0cmluZyhrZXkpOwogICAgICAgICAgICAgaGVhZGVyU3RyaW5n
LmFwcGVuZCgiOiAiKTsKICAgICAgICAgICAgIGhlYWRlclN0cmluZy5hcHBlbmQodmFsdWUpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VS
ZXF1ZXN0TWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3Vy
Y2VSZXF1ZXN0TWFjLm1tCmluZGV4IDk2YzQ5N2Q1MDNiNTQ3ZTNiMDFhOWEyNTJhNThmYzJlZWYz
Zjk0NDQuLjkzMjE2Y2I1NWU4NTc3MzEzNmYzZThjM2EwN2NlNmZiNTU2ZTA2ZDIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlUmVxdWVzdE1h
Yy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZVJl
cXVlc3RNYWMubW0KQEAgLTE1NSw3ICsxNTUsNyBAQCB2b2lkIFJlc291cmNlUmVxdWVzdDo6ZG9V
cGRhdGVQbGF0Zm9ybVJlcXVlc3QoKQogICAgICAgICBbbnNSZXF1ZXN0IHNldFZhbHVlOm5pbCBm
b3JIVFRQSGVhZGVyRmllbGQ6W29sZEhlYWRlckZpZWxkTmFtZXMgb2JqZWN0QXRJbmRleDppIC0g
MV1dOwogICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGh0dHBIZWFkZXJG
aWVsZHMoKS5lbmQoKTsKICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gaHR0cEhlYWRlckZpZWxkcygpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAg
W25zUmVxdWVzdCBzZXRWYWx1ZTppdC0+c2Vjb25kIGZvckhUVFBIZWFkZXJGaWVsZDppdC0+Zmly
c3RdOworICAgICAgICBbbnNSZXF1ZXN0IHNldFZhbHVlOml0LT52YWx1ZSBmb3JIVFRQSGVhZGVy
RmllbGQ6aXQtPmtleV07CiAKICAgICAvLyBUaGUgYmVsb3cgY2hlY2sgY2FuIGJlIHJlbW92ZWQg
b25jZSB3ZSByZXF1aXJlIGEgdmVyc2lvbiBvZiBGb3VuZGF0aW9uIHdpdGggLVtOU011dGFibGVV
UkxSZXF1ZXN0IHNldENvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheTpdIG1l
dGhvZC4KICAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0NvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5n
RmFsbGJhY2tBcnJheSA9IFtOU011dGFibGVVUkxSZXF1ZXN0IGluc3RhbmNlc1Jlc3BvbmRUb1Nl
bGVjdG9yOkBzZWxlY3RvcihzZXRDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJy
YXk6KV07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3F0L1Jl
c291cmNlUmVxdWVzdFF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvcXQv
UmVzb3VyY2VSZXF1ZXN0UXQuY3BwCmluZGV4IGRiYjdiNzRkZDU5YzRmNGQwZjJlY2VjZmRiZTA4
MTNkMjhiNzRhM2UuLmU4NGU2NzdhNWY3MmM3MWU4OWM2MDBmZDc3NzAwYmI2ODIyMTRjMmMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvcXQvUmVzb3VyY2VSZXF1
ZXN0UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvcXQvUmVzb3Vy
Y2VSZXF1ZXN0UXQuY3BwCkBAIC00OSw4ICs0OSw4IEBAIFFOZXR3b3JrUmVxdWVzdCBSZXNvdXJj
ZVJlcXVlc3Q6OnRvTmV0d29ya1JlcXVlc3QoTmV0d29ya2luZ0NvbnRleHQgKmNvbnRleHQpIGNv
CiAgICAgY29uc3QgSFRUUEhlYWRlck1hcCAmaGVhZGVycyA9IGh0dHBIZWFkZXJGaWVsZHMoKTsK
ICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaGVhZGVycy5iZWdp
bigpLCBlbmQgPSBoZWFkZXJzLmVuZCgpOwogICAgICAgICAgaXQgIT0gZW5kOyArK2l0KSB7Ci0g
ICAgICAgIFFCeXRlQXJyYXkgbmFtZSA9IFFTdHJpbmcoaXQtPmZpcnN0KS50b0xhdGluMSgpOwot
ICAgICAgICBRQnl0ZUFycmF5IHZhbHVlID0gUVN0cmluZyhpdC0+c2Vjb25kKS50b0xhdGluMSgp
OworICAgICAgICBRQnl0ZUFycmF5IG5hbWUgPSBRU3RyaW5nKGl0LT5rZXkpLnRvTGF0aW4xKCk7
CisgICAgICAgIFFCeXRlQXJyYXkgdmFsdWUgPSBRU3RyaW5nKGl0LT52YWx1ZSkudG9MYXRpbjEo
KTsKICAgICAgICAgLy8gUU5ldHdvcmtSZXF1ZXN0OjpzZXRSYXdIZWFkZXIoKSB3b3VsZCByZW1v
dmUgdGhlIGhlYWRlciBpZiB0aGUgdmFsdWUgaXMgbnVsbAogICAgICAgICAvLyBNYWtlIHN1cmUg
dG8gc2V0IGFuIGVtcHR5IGhlYWRlciBpbnN0ZWFkIG9mIG51bGwgaGVhZGVyLgogICAgICAgICBp
ZiAoIXZhbHVlLmlzTnVsbCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcAppbmRleCA1MWM5MThkZjI1
NTg2Njg2ZjQ5MjI5YTdjNTYyMDg4Mjk2ZDBmMmU3Li41ODViYzAxYjdjMTQ4YWY2YzM3MWFkNGMw
NWQ4YjdhZGJhZjMxMGMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcApAQCAtNDQ4LDcgKzQ0OCw3
IEBAIHN0YXRpYyB2b2lkIHNlbmRSZXF1ZXN0Q2FsbGJhY2soR09iamVjdCosIEdBc3luY1Jlc3Vs
dCogcmVzLCBncG9pbnRlciBkYXRhKQogCiAgICAgICAgIGlmIChoYXNVbmlnbm9yZWRUTFNFcnJv
cnMoaGFuZGxlLmdldCgpKSkgewogICAgICAgICAgICAgQ2VydGlmaWNhdGVzTWFwOjppdGVyYXRv
ciBpdGVyID0gY2xpZW50Q2VydGlmaWNhdGVzKCkuZmluZChoYW5kbGUtPmZpcnN0UmVxdWVzdCgp
LnVybCgpLmhvc3QoKS5sb3dlcigpKTsKLSAgICAgICAgICAgIGlmIChpdGVyID09IGNsaWVudENl
cnRpZmljYXRlcygpLmVuZCgpIHx8ICFpdGVyLT5zZWNvbmQuY29udGFpbnMoZC0+bV9yZXNwb25z
ZS5zb3VwTWVzc2FnZUNlcnRpZmljYXRlKCkpKSB7CisgICAgICAgICAgICBpZiAoaXRlciA9PSBj
bGllbnRDZXJ0aWZpY2F0ZXMoKS5lbmQoKSB8fCAhaXRlci0+dmFsdWUuY29udGFpbnMoZC0+bV9y
ZXNwb25zZS5zb3VwTWVzc2FnZUNlcnRpZmljYXRlKCkpKSB7CiAgICAgICAgICAgICAgICAgR093
blB0cjxjaGFyPiB1cmkoc291cF91cmlfdG9fc3RyaW5nKHNvdXBfcmVxdWVzdF9nZXRfdXJpKGQt
Pm1fc291cFJlcXVlc3QuZ2V0KCkpLCBGQUxTRSkpOwogICAgICAgICAgICAgICAgIGNsaWVudC0+
ZGlkRmFpbChoYW5kbGUuZ2V0KCksIFJlc291cmNlRXJyb3IoZ19xdWFya190b19zdHJpbmcoU09V
UF9IVFRQX0VSUk9SKSwgU09VUF9TVEFUVVNfU1NMX0ZBSUxFRCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVyaS5nZXQoKSwgdW5h
Y2NlcHRhYmxlVExTQ2VydGlmaWNhdGUoKSwKQEAgLTgxOSw3ICs4MTksNyBAQCB2b2lkIFJlc291
cmNlSGFuZGxlOjpzZXRIb3N0QWxsb3dzQW55SFRUUFNDZXJ0aWZpY2F0ZShjb25zdCBTdHJpbmcm
IGhvc3QpCiAKIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnNldENsaWVudENlcnRpZmljYXRlKGNvbnN0
IFN0cmluZyYgaG9zdCwgR1Rsc0NlcnRpZmljYXRlKiBjZXJ0aWZpY2F0ZSkKIHsKLSAgICBjbGll
bnRDZXJ0aWZpY2F0ZXMoKS5hZGQoaG9zdC5sb3dlcigpLCBIb3N0VExTQ2VydGlmaWNhdGVTZXQo
KSkuaXRlcmF0b3ItPnNlY29uZC5hZGQoY2VydGlmaWNhdGUpOworICAgIGNsaWVudENlcnRpZmlj
YXRlcygpLmFkZChob3N0Lmxvd2VyKCksIEhvc3RUTFNDZXJ0aWZpY2F0ZVNldCgpKS5pdGVyYXRv
ci0+dmFsdWUuYWRkKGNlcnRpZmljYXRlKTsKIH0KIAogdm9pZCBSZXNvdXJjZUhhbmRsZTo6c2V0
SWdub3JlU1NMRXJyb3JzKGJvb2wgaWdub3JlU1NMRXJyb3JzKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVzdFNvdXAuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVzdFNvdXAu
Y3BwCmluZGV4IGRkZmExYzM4ZGVlNGIzZTk2Mjk4MzFkNmExYjk0ODdjNjNlMDhiNjkuLjI4YTE5
NTk1NzljYjg4NzNmOTNmZTkyYjdmODE3ZTFhYWNkZTRkMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0U291
cC5jcHAKQEAgLTQzLDcgKzQzLDcgQEAgdm9pZCBSZXNvdXJjZVJlcXVlc3Q6OnVwZGF0ZVNvdXBN
ZXNzYWdlKFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSkgY29uc3QKICAgICBpZiAoIWhlYWRlcnMu
aXNFbXB0eSgpKSB7CiAgICAgICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IGhlYWRlcnMuZW5kKCk7CiAgICAgICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBoZWFkZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIHNv
dXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChzb3VwSGVhZGVycywgaXQtPmZpcnN0LnN0cmluZygp
LnV0ZjgoKS5kYXRhKCksIGl0LT5zZWNvbmQudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBz
b3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQoc291cEhlYWRlcnMsIGl0LT5rZXkuc3RyaW5nKCku
dXRmOCgpLmRhdGEoKSwgaXQtPnZhbHVlLnV0ZjgoKS5kYXRhKCkpOwogICAgIH0KIAogICAgIFN0
cmluZyBmaXJzdFBhcnR5U3RyaW5nID0gZmlyc3RQYXJ0eUZvckNvb2tpZXMoKS5zdHJpbmcoKTsK
QEAgLTY2LDcgKzY2LDcgQEAgU291cE1lc3NhZ2UqIFJlc291cmNlUmVxdWVzdDo6dG9Tb3VwTWVz
c2FnZSgpIGNvbnN0CiAgICAgaWYgKCFoZWFkZXJzLmlzRW1wdHkoKSkgewogICAgICAgICBIVFRQ
SGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBoZWFkZXJzLmVuZCgpOwogICAgICAgICBm
b3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaGVhZGVycy5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQo
c291cEhlYWRlcnMsIGl0LT5maXJzdC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBpdC0+c2Vjb25k
LnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5k
KHNvdXBIZWFkZXJzLCBpdC0+a2V5LnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGl0LT52YWx1ZS51
dGY4KCkuZGF0YSgpKTsKICAgICB9CiAKICAgICBTdHJpbmcgZmlyc3RQYXJ0eVN0cmluZyA9IGZp
cnN0UGFydHlGb3JDb29raWVzKCkuc3RyaW5nKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXNwb25zZVNvdXAuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVzcG9uc2VTb3VwLmNwcApp
bmRleCBiN2MwNDhmYTFlYzAwZmU3MDhkN2RjYWU5OWZjNWRiN2VjNzkwODNkLi5jZGVmN2VlOGZj
YzFlNWY0YTllYzlkZjNmYWU1ZGMzODVlMzk0ZTU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXNwb25zZVNvdXAuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlc3BvbnNlU291cC5j
cHAKQEAgLTQ2LDcgKzQ2LDcgQEAgU291cE1lc3NhZ2UqIFJlc291cmNlUmVzcG9uc2U6OnRvU291
cE1lc3NhZ2UoKSBjb25zdAogICAgIGlmICghaGVhZGVycy5pc0VtcHR5KCkpIHsKICAgICAgICAg
SFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaGVhZGVycy5lbmQoKTsKICAgICAg
ICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGhlYWRlcnMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBw
ZW5kKHNvdXBIZWFkZXJzLCBpdC0+Zmlyc3Quc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgaXQtPnNl
Y29uZC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2Fw
cGVuZChzb3VwSGVhZGVycywgaXQtPmtleS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBpdC0+dmFs
dWUudXRmOCgpLmRhdGEoKSk7CiAgICAgfQogCiAgICAgc291cF9tZXNzYWdlX3NldF9mbGFncyhz
b3VwTWVzc2FnZSwgbV9zb3VwRmxhZ3MpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay93aW4vUmVzb3VyY2VIYW5kbGVXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay93aW4vUmVzb3VyY2VIYW5kbGVXaW4uY3BwCmluZGV4IDAyMTJkMGNk
YTk4YzlmMTM3OTI4ZTYxMmZkZjk1MDM2NWEwMWQwZDYuLmYyNTA1Mjc3NWIwZGVkZmUyMWM3NTVk
M2Y4Mzk5ODUzZTdhMGYzOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvd2luL1Jlc291cmNlSGFuZGxlV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3dpbi9SZXNvdXJjZUhhbmRsZVdpbi5jcHAKQEAgLTMyMywxNSArMzIzLDE1
IEBAIGJvb2wgUmVzb3VyY2VIYW5kbGU6OnN0YXJ0KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0
KQogICAgIGNvbnN0IEhUVFBIZWFkZXJNYXAmIGh0dHBIZWFkZXJGaWVsZHMgPSBmaXJzdFJlcXVl
c3QoKS5odHRwSGVhZGVyRmllbGRzKCk7CiAKICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gaHR0cEhlYWRlckZpZWxkcy5iZWdpbigpOyBpdCAhPSBodHRwSGVhZGVy
RmllbGRzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShpdC0+
Zmlyc3QsICJBY2NlcHQiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShpdC0+Zmlyc3QsICJSZWZlcmVy
IikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UoaXQtPmZpcnN0LCAiVXNlci1BZ2VudCIpKQorICAgICAg
ICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoaXQtPmtleSwgIkFjY2VwdCIpIHx8IGVxdWFsSWdub3Jp
bmdDYXNlKGl0LT5rZXksICJSZWZlcmVyIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UoaXQtPmtleSwg
IlVzZXItQWdlbnQiKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIGlmICghaHR0
cEhlYWRlcnMuaXNFbXB0eSgpKQogICAgICAgICAgICAgaHR0cEhlYWRlcnMuYXBwZW5kKCdcbicp
OwogCi0gICAgICAgIGh0dHBIZWFkZXJzLmFwcGVuZChpdC0+Zmlyc3QuY2hhcmFjdGVycygpLCBp
dC0+Zmlyc3QubGVuZ3RoKCkpOworICAgICAgICBodHRwSGVhZGVycy5hcHBlbmQoaXQtPmtleS5j
aGFyYWN0ZXJzKCksIGl0LT5rZXkubGVuZ3RoKCkpOwogICAgICAgICBodHRwSGVhZGVycy5hcHBl
bmQoJzonKTsKLSAgICAgICAgaHR0cEhlYWRlcnMuYXBwZW5kKGl0LT5zZWNvbmQuY2hhcmFjdGVy
cygpLCBpdC0+c2Vjb25kLmxlbmd0aCgpKTsKKyAgICAgICAgaHR0cEhlYWRlcnMuYXBwZW5kKGl0
LT52YWx1ZS5jaGFyYWN0ZXJzKCksIGl0LT52YWx1ZS5sZW5ndGgoKSk7CiAgICAgfQogCiAgICAg
SU5URVJORVRfQlVGRkVSU1cgaW50ZXJuZXRCdWZmZXJzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vcXQvUnVuTG9vcFF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3F0L1J1bkxvb3BRdC5jcHAKaW5kZXggMmE4N2UyZmM4ZjY2Nzc3NjlmNzMxNDNlNTcxZTA5YzVh
NTRjNmViYS4uNTAxYmQ1YzEyM2IwZjAzY2U5YTBjZjkwZTE3MjY5MWY1MDZkOWExYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUnVuTG9vcFF0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SdW5Mb29wUXQuY3BwCkBAIC0xMDksNyArMTA5LDcgQEAg
dm9pZCBSdW5Mb29wOjpUaW1lckJhc2U6OnRpbWVyRmlyZWQoUnVuTG9vcCogcnVuTG9vcCwgaW50
IElEKQogewogICAgIFRpbWVyTWFwOjppdGVyYXRvciBpdCA9IHJ1bkxvb3AtPm1fYWN0aXZlVGlt
ZXJzLmZpbmQoSUQpOwogICAgIEFTU0VSVChpdCAhPSBydW5Mb29wLT5tX2FjdGl2ZVRpbWVycy5l
bmQoKSk7Ci0gICAgVGltZXJCYXNlKiB0aW1lciA9IGl0LT5zZWNvbmQ7CisgICAgVGltZXJCYXNl
KiB0aW1lciA9IGl0LT52YWx1ZTsKIAogICAgIGlmICghdGltZXItPm1faXNSZXBlYXRpbmcpIHsK
ICAgICAgICAgLy8gU3RvcCB0aGUgdGltZXIgKGNhbGxpbmcgc3RvcCB3b3VsZCBuZWVkIGFub3Ro
ZXIgaGFzaCB0YWJsZSBsb29rdXApLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9Mb2NhbGVUb1NjcmlwdE1hcHBpbmdEZWZhdWx0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvTG9jYWxlVG9TY3JpcHRNYXBwaW5nRGVmYXVsdC5jcHAKaW5kZXggOTA5
NDczODQ5Njk2YjRjMjkyZDZiOWFjMjg1YmM3ZDlmNGFjMjg0MS4uNTgyNjQ5MDdkNWU0MGEwMDli
NDBmZDY5OTE4MGYzM2VmN2Q1MTdjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9Mb2NhbGVUb1NjcmlwdE1hcHBpbmdEZWZhdWx0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L0xvY2FsZVRvU2NyaXB0TWFwcGluZ0RlZmF1bHQuY3BwCkBAIC0x
NjYsNyArMTY2LDcgQEAgVVNjcmlwdENvZGUgc2NyaXB0TmFtZVRvQ29kZShjb25zdCBTdHJpbmcm
IHNjcmlwdE5hbWUpCiAKICAgICBIYXNoTWFwPFN0cmluZywgVVNjcmlwdENvZGU+OjppdGVyYXRv
ciBpdCA9IHNjcmlwdE5hbWVDb2RlTWFwLmZpbmQoc2NyaXB0TmFtZS5sb3dlcigpKTsKICAgICBp
ZiAoaXQgIT0gc2NyaXB0TmFtZUNvZGVNYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdC0+c2Vj
b25kOworICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwogICAgIHJldHVybiBVU0NSSVBUX0lOVkFM
SURfQ09ERTsKIH0KIApAQCAtMzg5LDcgKzM4OSw3IEBAIFVTY3JpcHRDb2RlIGxvY2FsZVRvU2Ny
aXB0Q29kZUZvckZvbnRTZWxlY3Rpb24oY29uc3QgU3RyaW5nJiBsb2NhbGUpCiAgICAgd2hpbGUg
KCFjYW5vbmljYWxMb2NhbGUuaXNFbXB0eSgpKSB7CiAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBV
U2NyaXB0Q29kZT46Oml0ZXJhdG9yIGl0ID0gbG9jYWxlU2NyaXB0TWFwLmZpbmQoY2Fub25pY2Fs
TG9jYWxlKTsKICAgICAgICAgaWYgKGl0ICE9IGxvY2FsZVNjcmlwdE1hcC5lbmQoKSkKLSAgICAg
ICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgICAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsK
ICAgICAgICAgc2l6ZV90IHBvcyA9IGNhbm9uaWNhbExvY2FsZS5yZXZlcnNlRmluZCgnXycpOwog
ICAgICAgICBpZiAocG9zID09IG5vdEZvdW5kKQogICAgICAgICAgICAgYnJlYWs7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnkuY3Bw
CmluZGV4IDQxNDBhMzg3MjkyODkwZTVkOGRlM2Q0MmU1MWI2NjVkZDE4ZGZjNjkuLjI3OTAyMjdm
YWU5MTg1MjU4ZDJlMTYwNTJkMTM4ODlkNWRiNmFjOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnkuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnkuY3BwCkBAIC0xOTYsOCAr
MTk2LDggQEAgc3RhdGljIHZvaWQgcHJ1bmVCbGFja2xpc3RlZENvZGVjcygpCiAgICAgICAgIFRl
eHRFbmNvZGluZ05hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdGV4dEVuY29kaW5nTmFtZU1h
cC0+YmVnaW4oKTsKICAgICAgICAgVGV4dEVuY29kaW5nTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gdGV4dEVuY29kaW5nTmFtZU1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAoOyBpdCAhPSBl
bmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGlmIChpdC0+c2Vjb25kID09IGF0b21pY05hbWUpCi0g
ICAgICAgICAgICAgICAgbmFtZXMuYXBwZW5kKGl0LT5maXJzdCk7CisgICAgICAgICAgICBpZiAo
aXQtPnZhbHVlID09IGF0b21pY05hbWUpCisgICAgICAgICAgICAgICAgbmFtZXMuYXBwZW5kKGl0
LT5rZXkpOwogICAgICAgICB9CiAKICAgICAgICAgc2l6ZV90IGxlbmd0aCA9IG5hbWVzLnNpemUo
KTsKQEAgLTM5MSw3ICszOTEsNyBAQCB2b2lkIGR1bXBUZXh0RW5jb2RpbmdOYW1lTWFwKCkKICAg
ICBUZXh0RW5jb2RpbmdOYW1lTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHRleHRFbmNvZGluZ05h
bWVNYXAtPmJlZ2luKCk7CiAgICAgVGV4dEVuY29kaW5nTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gdGV4dEVuY29kaW5nTmFtZU1hcC0+ZW5kKCk7CiAgICAgZm9yICg7IGl0ICE9IGVuZDsg
KytpdCkKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICInJXMnID0+ICclcydcbiIsIGl0LT5maXJz
dCwgaXQtPnNlY29uZCk7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJyVzJyA9PiAnJXMnXG4i
LCBpdC0+a2V5LCBpdC0+dmFsdWUpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvdHJhbnNjb2Rlci9Gb250VHJhbnNjb2Rlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3RyYW5zY29kZXIvRm9udFRyYW5zY29kZXIuY3BwCmlu
ZGV4IDRlMDdmNTBmYmRiMGM1N2MzZWVjYTZmOGJlNzFmNzUwNWRiNTNiYzAuLjQ4NDIyOGNhYThl
NzYwNzFiMzdhOWQyMGE5OTJkNTBhMWQ0MWY0MGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvdHJhbnNjb2Rlci9Gb250VHJhbnNjb2Rlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC90cmFuc2NvZGVyL0ZvbnRUcmFuc2NvZGVyLmNwcApAQCAt
NjYsNyArNjYsNyBAQCBGb250VHJhbnNjb2Rlcjo6Q29udmVydGVyVHlwZSBGb250VHJhbnNjb2Rl
cjo6Y29udmVydGVyVHlwZShjb25zdCBGb250RGVzY3JpcHRpbwogICAgIGlmICghZm9udEZhbWls
eS5pc051bGwoKSkgewogICAgICAgICBIYXNoTWFwPEF0b21pY1N0cmluZywgQ29udmVydGVyVHlw
ZT46OmNvbnN0X2l0ZXJhdG9yIGZvdW5kID0gbV9jb252ZXJ0ZXJUeXBlcy5maW5kKGZvbnRGYW1p
bHkpOwogICAgICAgICBpZiAoZm91bmQgIT0gbV9jb252ZXJ0ZXJUeXBlcy5lbmQoKSkKLSAgICAg
ICAgICAgIHJldHVybiBmb3VuZC0+c2Vjb25kOworICAgICAgICAgICAgcmV0dXJuIGZvdW5kLT52
YWx1ZTsKICAgICB9CiAKICAgICAvLyBJRSdzIGRlZmF1bHQgZm9udHMgZm9yIEphcGFuZXNlIGVu
Y29kaW5ncyBjaGFuZ2UgYmFja3NsYXNoZXMgaW50byB5ZW4gc2lnbnMuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3dpbi9UZXh0Q29kZWNXaW4uY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC93aW4vVGV4dENvZGVjV2luLmNwcAppbmRleCBlMTkyMzdk
NjhkOTBkZjJmNTAzYWY0MjM5YWEzNjdiNmYxNGYyNGI1Li44NzlhZjc2OTc3MmZmNTE1ZjM1NGFh
OGIxOTcxNjk5YjYyYWJhNjYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L3dpbi9UZXh0Q29kZWNXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvd2luL1RleHRDb2RlY1dpbi5jcHAKQEAgLTEwNSwxNyArMTA1LDE3IEBAIExhbmd1YWdlTWFu
YWdlcjo6TGFuZ3VhZ2VNYW5hZ2VyKCkKICAgICAgICAgICAgIGkgPSBjb2RlUGFnZUNoYXJzZXRz
KCkuc2V0KGNwSW5mby51aUNvZGVQYWdlLCBuYW1lKS5pdGVyYXRvcjsKICAgICAgICAgfQogICAg
ICAgICBpZiAoaSAhPSBjb2RlUGFnZUNoYXJzZXRzKCkuZW5kKCkpIHsKLSAgICAgICAgICAgIEhh
c2hNYXA8U3RyaW5nLCBDaGFyc2V0SW5mbz46Oml0ZXJhdG9yIGogPSBrbm93bkNoYXJzZXRzKCku
ZmluZChTdHJpbmcoaS0+c2Vjb25kLmRhdGEoKSwgaS0+c2Vjb25kLmxlbmd0aCgpKSk7CisgICAg
ICAgICAgICBIYXNoTWFwPFN0cmluZywgQ2hhcnNldEluZm8+OjppdGVyYXRvciBqID0ga25vd25D
aGFyc2V0cygpLmZpbmQoU3RyaW5nKGktPnZhbHVlLmRhdGEoKSwgaS0+dmFsdWUubGVuZ3RoKCkp
KTsKICAgICAgICAgICAgIEFTU0VSVChqICE9IGtub3duQ2hhcnNldHMoKS5lbmQoKSk7Ci0gICAg
ICAgICAgICBDaGFyc2V0SW5mbyYgaW5mbyA9IGotPnNlY29uZDsKLSAgICAgICAgICAgIGluZm8u
bV9uYW1lID0gaS0+c2Vjb25kLmRhdGEoKTsKKyAgICAgICAgICAgIENoYXJzZXRJbmZvJiBpbmZv
ID0gai0+dmFsdWU7CisgICAgICAgICAgICBpbmZvLm1fbmFtZSA9IGktPnZhbHVlLmRhdGEoKTsK
ICAgICAgICAgICAgIGluZm8ubV9mcmllbmRseU5hbWUgPSBjcEluZm8ud3N6RGVzY3JpcHRpb247
CiAgICAgICAgICAgICBpbmZvLm1fYWxpYXNlcy5hcHBlbmQobmFtZSk7CiAgICAgICAgICAgICBp
bmZvLm1fYWxpYXNlcy5hcHBlbmQoU3RyaW5nKGNwSW5mby53c3pIZWFkZXJDaGFyc2V0KS5sYXRp
bjEoKSk7CiAgICAgICAgICAgICBpbmZvLm1fYWxpYXNlcy5hcHBlbmQoU3RyaW5nKGNwSW5mby53
c3pCb2R5Q2hhcnNldCkubGF0aW4xKCkpOwogICAgICAgICAgICAgU3RyaW5nIGNwTmFtZSA9ICJj
cCIgKyBTdHJpbmc6Om51bWJlcihjcEluZm8udWlDb2RlUGFnZSk7CiAgICAgICAgICAgICBpbmZv
Lm1fYWxpYXNlcy5hcHBlbmQoY3BOYW1lLmxhdGluMSgpKTsKLSAgICAgICAgICAgIHN1cHBvcnRl
ZENoYXJzZXRzKCkuYWRkKGktPnNlY29uZC5kYXRhKCkpOworICAgICAgICAgICAgc3VwcG9ydGVk
Q2hhcnNldHMoKS5hZGQoaS0+dmFsdWUuZGF0YSgpKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAg
LTEyNiw3ICsxMjYsNyBAQCBzdGF0aWMgVUlOVCBnZXRDb2RlUGFnZShjb25zdCBjaGFyKiBuYW1l
KQogICAgIC8vIHNheWluZyAiPT0iIGlzIG5vdCBmb3VuZCBmb3IgY29uc3RfaXRlcmF0b3IgYW5k
IGl0ZXJhdG9yCiAgICAgY29uc3QgSGFzaE1hcDxTdHJpbmcsIENoYXJzZXRJbmZvPiYgY2hhcnNl
dHMgPSBrbm93bkNoYXJzZXRzKCk7CiAgICAgSGFzaE1hcDxTdHJpbmcsIENoYXJzZXRJbmZvPjo6
Y29uc3RfaXRlcmF0b3IgaSA9IGNoYXJzZXRzLmZpbmQobmFtZSk7Ci0gICAgcmV0dXJuIGkgPT0g
Y2hhcnNldHMuZW5kKCkgPyBDUF9BQ1AgOiBpLT5zZWNvbmQubV9jb2RlUGFnZTsKKyAgICByZXR1
cm4gaSA9PSBjaGFyc2V0cy5lbmQoKSA/IENQX0FDUCA6IGktPnZhbHVlLm1fY29kZVBhZ2U7CiB9
CiAKIHN0YXRpYyBQYXNzT3duUHRyPFRleHRDb2RlYz4gbmV3VGV4dENvZGVjV2luKGNvbnN0IFRl
eHRFbmNvZGluZyYgZW5jb2RpbmcsIGNvbnN0IHZvaWQqKQpAQCAtMTQ5LDkgKzE0OSw5IEBAIHZv
aWQgVGV4dENvZGVjV2luOjpyZWdpc3RlckV4dGVuZGVkRW5jb2RpbmdOYW1lcyhFbmNvZGluZ05h
bWVSZWdpc3RyYXIgcmVnaXN0cmFyCiAgICAgZm9yIChDaGFyc2V0U2V0OjppdGVyYXRvciBpID0g
c3VwcG9ydGVkQ2hhcnNldHMoKS5iZWdpbigpOyBpICE9IHN1cHBvcnRlZENoYXJzZXRzKCkuZW5k
KCk7ICsraSkgewogICAgICAgICBIYXNoTWFwPFN0cmluZywgQ2hhcnNldEluZm8+OjppdGVyYXRv
ciBqID0ga25vd25DaGFyc2V0cygpLmZpbmQoKmkpOwogICAgICAgICBpZiAoaiAhPSBrbm93bkNo
YXJzZXRzKCkuZW5kKCkpIHsKLSAgICAgICAgICAgIHJlZ2lzdHJhcihqLT5zZWNvbmQubV9uYW1l
LmRhdGEoKSwgai0+c2Vjb25kLm1fbmFtZS5kYXRhKCkpOwotICAgICAgICAgICAgZm9yIChWZWN0
b3I8Q1N0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGFsaWFzID0gai0+c2Vjb25kLm1fYWxpYXNlcy5i
ZWdpbigpOyBhbGlhcyAhPSBqLT5zZWNvbmQubV9hbGlhc2VzLmVuZCgpOyArK2FsaWFzKQotICAg
ICAgICAgICAgICAgIHJlZ2lzdHJhcihhbGlhcy0+ZGF0YSgpLCBqLT5zZWNvbmQubV9uYW1lLmRh
dGEoKSk7CisgICAgICAgICAgICByZWdpc3RyYXIoai0+dmFsdWUubV9uYW1lLmRhdGEoKSwgai0+
dmFsdWUubV9uYW1lLmRhdGEoKSk7CisgICAgICAgICAgICBmb3IgKFZlY3RvcjxDU3RyaW5nPjo6
Y29uc3RfaXRlcmF0b3IgYWxpYXMgPSBqLT52YWx1ZS5tX2FsaWFzZXMuYmVnaW4oKTsgYWxpYXMg
IT0gai0+dmFsdWUubV9hbGlhc2VzLmVuZCgpOyArK2FsaWFzKQorICAgICAgICAgICAgICAgIHJl
Z2lzdHJhcihhbGlhcy0+ZGF0YSgpLCBqLT52YWx1ZS5tX25hbWUuZGF0YSgpKTsKICAgICAgICAg
fQogICAgIH0KIH0KQEAgLTE2Miw3ICsxNjIsNyBAQCB2b2lkIFRleHRDb2RlY1dpbjo6cmVnaXN0
ZXJFeHRlbmRlZENvZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIgcmVnaXN0cmFyKQogICAgIGZvciAo
Q2hhcnNldFNldDo6aXRlcmF0b3IgaSA9IHN1cHBvcnRlZENoYXJzZXRzKCkuYmVnaW4oKTsgaSAh
PSBzdXBwb3J0ZWRDaGFyc2V0cygpLmVuZCgpOyArK2kpIHsKICAgICAgICAgSGFzaE1hcDxTdHJp
bmcsIENoYXJzZXRJbmZvPjo6aXRlcmF0b3IgaiA9IGtub3duQ2hhcnNldHMoKS5maW5kKCppKTsK
ICAgICAgICAgaWYgKGogIT0ga25vd25DaGFyc2V0cygpLmVuZCgpKQotICAgICAgICAgICAgcmVn
aXN0cmFyKGotPnNlY29uZC5tX25hbWUuZGF0YSgpLCBuZXdUZXh0Q29kZWNXaW4sIDApOworICAg
ICAgICAgICAgcmVnaXN0cmFyKGotPnZhbHVlLm1fbmFtZS5kYXRhKCksIG5ld1RleHRDb2RlY1dp
biwgMCk7CiAgICAgfQogfQogCkBAIC0zMDEsNyArMzAxLDcgQEAgdm9pZCBUZXh0Q29kZWNXaW46
OmVudW1lcmF0ZVN1cHBvcnRlZEVuY29kaW5ncyhFbmNvZGluZ1JlY2VpdmVyJiByZWNlaXZlcikK
ICAgICBsYW5ndWFnZU1hbmFnZXIoKTsKICAgICBmb3IgKENoYXJzZXRTZXQ6Oml0ZXJhdG9yIGkg
PSBzdXBwb3J0ZWRDaGFyc2V0cygpLmJlZ2luKCk7IGkgIT0gc3VwcG9ydGVkQ2hhcnNldHMoKS5l
bmQoKTsgKytpKSB7CiAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBDaGFyc2V0SW5mbz46Oml0ZXJh
dG9yIGogPSBrbm93bkNoYXJzZXRzKCkuZmluZCgqaSk7Ci0gICAgICAgIGlmIChqICE9IGtub3du
Q2hhcnNldHMoKS5lbmQoKSAmJiAhcmVjZWl2ZXIucmVjZWl2ZShqLT5zZWNvbmQubV9uYW1lLmRh
dGEoKSwgai0+c2Vjb25kLm1fZnJpZW5kbHlOYW1lLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0
aW9uKCksIGotPnNlY29uZC5tX2NvZGVQYWdlKSkKKyAgICAgICAgaWYgKGogIT0ga25vd25DaGFy
c2V0cygpLmVuZCgpICYmICFyZWNlaXZlci5yZWNlaXZlKGotPnZhbHVlLm1fbmFtZS5kYXRhKCks
IGotPnZhbHVlLm1fZnJpZW5kbHlOYW1lLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCks
IGotPnZhbHVlLm1fY29kZVBhZ2UpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFV0aWxpdGllc1dp
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xpcGJvYXJkVXRpbGl0aWVzV2lu
LmNwcAppbmRleCBmMjM3NDQ0YjcyY2YwMzExOTdjM2IwYmVhMTY5N2FjZDM4NTBkYTExLi5mMzM1
NTBlOTQwYTI4NjdjZmE5YTJkZDRmOGUwNTU3M2Y5OTY0ZTFiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xpcGJvYXJkVXRpbGl0aWVzV2luLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xpcGJvYXJkVXRpbGl0aWVzV2luLmNwcApAQCAtNzks
NyArNzksNyBAQCBzdGF0aWMgYm9vbCBnZXREYXRhTWFwSXRlbShjb25zdCBEcmFnRGF0YU1hcCog
ZGF0YU9iamVjdCwgRk9STUFURVRDKiBmb3JtYXQsIFN0cgogICAgIERyYWdEYXRhTWFwOjpjb25z
dF9pdGVyYXRvciBmb3VuZCA9IGRhdGFPYmplY3QtPmZpbmQoZm9ybWF0LT5jZkZvcm1hdCk7CiAg
ICAgaWYgKGZvdW5kID09IGRhdGFPYmplY3QtPmVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgaXRlbSA9IGZvdW5kLT5zZWNvbmRbMF07CisgICAgaXRlbSA9IGZvdW5kLT52YWx1ZVsw
XTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtODI5LDcgKzgyOSw3IEBAIHZvaWQgZ2V0Q2xp
cGJvYXJkRGF0YShJRGF0YU9iamVjdCogZGF0YU9iamVjdCwgRk9STUFURVRDKiBmb3JtYXQsIFZl
Y3RvcjxTdHJpbmc+CiAgICAgQ2xpcGJvYXJkRm9ybWF0TWFwOjpjb25zdF9pdGVyYXRvciBmb3Vu
ZCA9IGZvcm1hdE1hcC5maW5kKGZvcm1hdC0+Y2ZGb3JtYXQpOwogICAgIGlmIChmb3VuZCA9PSBm
b3JtYXRNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBmb3VuZC0+c2Vjb25kLT5nZXRT
dHJpbmcoZGF0YU9iamVjdCwgZm91bmQtPnNlY29uZC0+Zm9ybWF0LCBkYXRhU3RyaW5ncyk7Cisg
ICAgZm91bmQtPnZhbHVlLT5nZXRTdHJpbmcoZGF0YU9iamVjdCwgZm91bmQtPnZhbHVlLT5mb3Jt
YXQsIGRhdGFTdHJpbmdzKTsKIH0KIAogdm9pZCBzZXRDbGlwYm9hcmREYXRhKElEYXRhT2JqZWN0
KiBkYXRhT2JqZWN0LCBVSU5UIGZvcm1hdCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGRhdGFTdHJp
bmdzKQpAQCAtODM4LDcgKzgzOCw3IEBAIHZvaWQgc2V0Q2xpcGJvYXJkRGF0YShJRGF0YU9iamVj
dCogZGF0YU9iamVjdCwgVUlOVCBmb3JtYXQsIGNvbnN0IFZlY3RvcjxTdHJpbmc+CiAgICAgQ2xp
cGJvYXJkRm9ybWF0TWFwOjpjb25zdF9pdGVyYXRvciBmb3VuZCA9IGZvcm1hdE1hcC5maW5kKGZv
cm1hdCk7CiAgICAgaWYgKGZvdW5kID09IGZvcm1hdE1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJu
OwotICAgIGZvdW5kLT5zZWNvbmQtPnNldFN0cmluZyhkYXRhT2JqZWN0LCBmb3VuZC0+c2Vjb25k
LT5mb3JtYXQsIGRhdGFTdHJpbmdzKTsKKyAgICBmb3VuZC0+dmFsdWUtPnNldFN0cmluZyhkYXRh
T2JqZWN0LCBmb3VuZC0+dmFsdWUtPmZvcm1hdCwgZGF0YVN0cmluZ3MpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4v
Q2xpcGJvYXJkV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRX
aW4uY3BwCmluZGV4IGFmNWUzYTI4NmQ2YWRjMjQ0YTZlYjZjNWE0YzY1MmJlYjIwYTE2YmQuLmZi
MTNkM2M0YmVhMGMwZmExYjkzNzA5MjcxNWQ3MWE5M2NkNDlmODYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRXaW4uY3BwCkBAIC01MjMsNyArNTIzLDcgQEAgSGFz
aFNldDxTdHJpbmc+IENsaXBib2FyZFdpbjo6dHlwZXMoKSBjb25zdAogICAgIH0gZWxzZSB7CiAg
ICAgICAgIGZvciAoRHJhZ0RhdGFNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9kcmFnRGF0YU1h
cC5iZWdpbigpOyBpdCAhPSBtX2RyYWdEYXRhTWFwLmVuZCgpOyArK2l0KSB7CiAgICAgICAgICAg
ICBGT1JNQVRFVEMgZGF0YTsKLSAgICAgICAgICAgIGRhdGEuY2ZGb3JtYXQgPSAoKml0KS5maXJz
dDsKKyAgICAgICAgICAgIGRhdGEuY2ZGb3JtYXQgPSAoKml0KS5rZXk7CiAgICAgICAgICAgICBh
ZGRNaW1lVHlwZXNGb3JGb3JtYXQocmVzdWx0cywgZGF0YSk7CiAgICAgICAgIH0KICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5jcHAKaW5kZXggMGFi
MGQ3MjgzMmY0ODZiNzRkZGI5ODBlMWM5YjRkNmVjNjEyZWFhMy4uNTRiNDdlZmRlNTE0ZTQxOGZm
YWU1YTQ4OGY1MTJjMzVlMWZjNTRkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vd2luL0ZpbGVTeXN0ZW1XaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dp
bi9GaWxlU3lzdGVtV2luLmNwcApAQCAtMjM4LDcgKzIzOCw3IEBAIHN0YXRpYyBTdHJpbmcgY2Fj
aGVkU3RvcmFnZURpcmVjdG9yeShEV09SRCBwYXRoSWRlbnRpZmllcikKIAogICAgIEhhc2hNYXA8
RFdPUkQsIFN0cmluZz46Oml0ZXJhdG9yIGl0ID0gZGlyZWN0b3JpZXMuZmluZChwYXRoSWRlbnRp
Zmllcik7CiAgICAgaWYgKGl0ICE9IGRpcmVjdG9yaWVzLmVuZCgpKQotICAgICAgICByZXR1cm4g
aXQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKIAogICAgIFN0cmluZyBkaXJl
Y3RvcnkgPSBzdG9yYWdlRGlyZWN0b3J5KHBhdGhJZGVudGlmaWVyKTsKICAgICBkaXJlY3Rvcmll
cy5hZGQocGF0aElkZW50aWZpZXIsIGRpcmVjdG9yeSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS93aW4vUnVuTG9vcFdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS93aW4vUnVuTG9vcFdpbi5jcHAKaW5kZXggMTY2M2I2NjEzM2FiYzJjYjNmZDAwNTdkMTk2NzEy
MzdkMGU3OTlkYS4uMTdkNjg0NWU5ZmZkYzM5MjhjMDY3YzdjMTU4ODNhYWI5MGQyOWE2OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1J1bkxvb3BXaW4uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9SdW5Mb29wV2luLmNwcApAQCAtMTI2LDcgKzEy
Niw3IEBAIHZvaWQgUnVuTG9vcDo6VGltZXJCYXNlOjp0aW1lckZpcmVkKFJ1bkxvb3AqIHJ1bkxv
b3AsIHVpbnQ2NF90IElEKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgVGltZXJCYXNl
KiB0aW1lciA9IGl0LT5zZWNvbmQ7CisgICAgVGltZXJCYXNlKiB0aW1lciA9IGl0LT52YWx1ZTsK
IAogICAgIGlmICghdGltZXItPm1faXNSZXBlYXRpbmcpIHsKICAgICAgICAgcnVuTG9vcC0+bV9h
Y3RpdmVUaW1lcnMucmVtb3ZlKGl0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3dpbi9XQ0RhdGFPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1dD
RGF0YU9iamVjdC5jcHAKaW5kZXggYzVhYWVmYzdjNDBlNDRlNDY1NzdhNjYxODRiMjEyNmFjM2M4
YzQ0Zi4uNGVlZTRiOTYxMzgzOTgwMmY0Mzk3MTk5MTI4MTc5ZjdjNjg1MjQ4MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1dDRGF0YU9iamVjdC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1dDRGF0YU9iamVjdC5jcHAKQEAgLTE2OSw3ICsxNjks
NyBAQCBIUkVTVUxUIFdDRGF0YU9iamVjdDo6Y3JlYXRlSW5zdGFuY2UoV0NEYXRhT2JqZWN0Kiog
cmVzdWx0LCBjb25zdCBEcmFnRGF0YU1hcCYgZAogICAgICpyZXN1bHQgPSBuZXcgV0NEYXRhT2Jq
ZWN0OwogCiAgICAgZm9yIChEcmFnRGF0YU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBkYXRhTWFw
LmJlZ2luKCk7IGl0ICE9IGRhdGFNYXAuZW5kKCk7ICsraXQpCi0gICAgICAgIHNldENsaXBib2Fy
ZERhdGEoKnJlc3VsdCwgaXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsKKyAgICAgICAgc2V0Q2xpcGJv
YXJkRGF0YSgqcmVzdWx0LCBpdC0+a2V5LCBpdC0+dmFsdWUpOwogICAgIHJldHVybiBTX09LOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW5jZS9NSU1FVHlwZVJl
Z2lzdHJ5V2luQ0UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luY2UvTUlNRVR5cGVS
ZWdpc3RyeVdpbkNFLmNwcAppbmRleCA4YTBkM2QyYjYxNjJiNDZkYmI3ZDYyZjIyY2EwMzI2ZGM3
ZmNlZGM1Li5lOTZmYjJiYTdkOTk5Y2UyZDNhY2IwZDBmOWM0YzI0ODc0N2ZlNWVjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW5jZS9NSU1FVHlwZVJlZ2lzdHJ5V2luQ0Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbmNlL01JTUVUeXBlUmVnaXN0cnlX
aW5DRS5jcHAKQEAgLTEwMSw4ICsxMDEsOCBAQCBTdHJpbmcgTUlNRVR5cGVSZWdpc3RyeTo6Z2V0
UHJlZmVycmVkRXh0ZW5zaW9uRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiB0eXBlKQogICAgIGlu
aXRNSU1FVHlwZUVudGVuc2lvbk1hcCgpOwogCiAgICAgZm9yIChIYXNoTWFwPFN0cmluZywgU3Ry
aW5nPjo6aXRlcmF0b3IgaSA9IG1pbWV0eXBlTWFwLmJlZ2luKCk7IGkgIT0gbWltZXR5cGVNYXAu
ZW5kKCk7ICsraSkgewotICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoaS0+c2Vjb25kLCB0
eXBlKSkKLSAgICAgICAgICAgIHJldHVybiBpLT5maXJzdDsKKyAgICAgICAgaWYgKGVxdWFsSWdu
b3JpbmdDYXNlKGktPnZhbHVlLCB0eXBlKSkKKyAgICAgICAgICAgIHJldHVybiBpLT5rZXk7CiAg
ICAgfQogCiAgICAgcmV0dXJuIFN0cmluZygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vd3gvQ29udGV4dE1lbnVXeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93
eC9Db250ZXh0TWVudVd4LmNwcAppbmRleCA0MTg5YWE5NTJmZmViNGJjYTIzZGI3MGE5ODA2MWVl
ZGZmNGYxZGY0Li5kZjJlZTUyN2Q5NDhlMTYyYWJiODk0MjM4YmIyYjM4NGQ4NjlmNjI0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC9Db250ZXh0TWVudVd4LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC9Db250ZXh0TWVudVd4LmNwcApAQCAtNjcsOCAr
NjcsOCBAQCB2b2lkIENvbnRleHRNZW51OjphcHBlbmRJdGVtKENvbnRleHRNZW51SXRlbSYgaXRl
bSkKIAogICAgIEl0ZW1BY3Rpb25NYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHNfaXRlbUFjdGlv
bnMuZW5kKCk7CiAgICAgZm9yIChJdGVtQWN0aW9uTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHNf
aXRlbUFjdGlvbnMuYmVnaW4oKTsgIGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoaXQt
PnNlY29uZCA9PSBpdGVtRGVzY3JpcHRpb24uYWN0aW9uKQotICAgICAgICAgICAgaWRXeCA9IGl0
LT5maXJzdDsKKyAgICAgICAgaWYgKGl0LT52YWx1ZSA9PSBpdGVtRGVzY3JpcHRpb24uYWN0aW9u
KQorICAgICAgICAgICAgaWRXeCA9IGl0LT5rZXk7CiAgICAgfQogCiAgICAgaWYgKGl0ZW1EZXNj
cmlwdGlvbi5zdWJNZW51KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1Bs
dWdpbkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2Uu
Y3BwCmluZGV4IDk2MWM0NTQ4NWJmMmQ4Nzc0YWEzMDBjNzg2NTBlYWM5ZGFhMDVmYzguLjQ0NTJh
ZmUxZTRiNjM4YjVmN2RkYTBlYzdiMTc5ZDdhZTNkOWQ2ZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
dWdpbnMvUGx1Z2luRGF0YWJhc2UuY3BwCkBAIC0xNjYsNyArMTY2LDcgQEAgYm9vbCBQbHVnaW5E
YXRhYmFzZTo6cmVmcmVzaCgpCiAgICAgICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3Rf
aXRlcmF0b3IgbWFwX2l0ID0gKCppdCktPm1pbWVUb0Rlc2NyaXB0aW9ucygpLmJlZ2luKCk7CiAg
ICAgICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWFwX2VuZCA9ICgq
aXQpLT5taW1lVG9EZXNjcmlwdGlvbnMoKS5lbmQoKTsKICAgICAgICAgZm9yICg7IG1hcF9pdCAh
PSBtYXBfZW5kOyArK21hcF9pdCkKLSAgICAgICAgICAgIG1fcmVnaXN0ZXJlZE1JTUVUeXBlcy5h
ZGQobWFwX2l0LT5maXJzdCk7CisgICAgICAgICAgICBtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuYWRk
KG1hcF9pdC0+a2V5KTsKICAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI0Nyw5ICsyNDcs
OSBAQCBTdHJpbmcgUGx1Z2luRGF0YWJhc2U6Ok1JTUVUeXBlRm9yRXh0ZW5zaW9uKGNvbnN0IFN0
cmluZyYgZXh0ZW5zaW9uKSBjb25zdAogICAgICAgICBNSU1FVG9FeHRlbnNpb25zTWFwOjpjb25z
dF9pdGVyYXRvciBtaW1lX2VuZCA9ICgqaXQpLT5taW1lVG9FeHRlbnNpb25zKCkuZW5kKCk7CiAK
ICAgICAgICAgZm9yIChNSU1FVG9FeHRlbnNpb25zTWFwOjpjb25zdF9pdGVyYXRvciBtaW1lX2l0
ID0gKCppdCktPm1pbWVUb0V4dGVuc2lvbnMoKS5iZWdpbigpOyBtaW1lX2l0ICE9IG1pbWVfZW5k
OyArK21pbWVfaXQpIHsKLSAgICAgICAgICAgIG1pbWVUeXBlID0gbWltZV9pdC0+Zmlyc3Q7Cisg
ICAgICAgICAgICBtaW1lVHlwZSA9IG1pbWVfaXQtPmtleTsKICAgICAgICAgICAgIFBsdWdpblBh
Y2thZ2UqIHByZWZlcnJlZFBsdWdpbiA9IG1fcHJlZmVycmVkUGx1Z2lucy5nZXQobWltZVR5cGUp
LmdldCgpOwotICAgICAgICAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGV4dGVuc2lvbnMgPSBt
aW1lX2l0LT5zZWNvbmQ7CisgICAgICAgICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZXh0ZW5z
aW9ucyA9IG1pbWVfaXQtPnZhbHVlOwogICAgICAgICAgICAgYm9vbCBmb3VuZE1hcHBpbmcgPSBm
YWxzZTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleHRlbnNpb25zLnNp
emUoKTsgaSsrKSB7CiAgICAgICAgICAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGV4dGVu
c2lvbnNbaV0sIGV4dGVuc2lvbikpIHsKQEAgLTMzOSw4ICszMzksOCBAQCB2b2lkIFBsdWdpbkRh
dGFiYXNlOjpyZW1vdmUoUGx1Z2luUGFja2FnZSogcGFja2FnZSkKICAgICBNSU1FVG9FeHRlbnNp
b25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHBhY2thZ2UtPm1pbWVUb0V4dGVuc2lvbnMoKS5i
ZWdpbigpOwogICAgIE1JTUVUb0V4dGVuc2lvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHBh
Y2thZ2UtPm1pbWVUb0V4dGVuc2lvbnMoKS5lbmQoKTsKICAgICBmb3IgKCA7IGl0ICE9IGVuZDsg
KytpdCkgewotICAgICAgICBQbHVnaW5QYWNrYWdlQnlOYW1lTWFwOjppdGVyYXRvciBwYWNrYWdl
SW5NYXAgPSBtX3ByZWZlcnJlZFBsdWdpbnMuZmluZChpdC0+Zmlyc3QpOwotICAgICAgICBpZiAo
cGFja2FnZUluTWFwICE9IG1fcHJlZmVycmVkUGx1Z2lucy5lbmQoKSAmJiBwYWNrYWdlSW5NYXAt
PnNlY29uZCA9PSBwYWNrYWdlKQorICAgICAgICBQbHVnaW5QYWNrYWdlQnlOYW1lTWFwOjppdGVy
YXRvciBwYWNrYWdlSW5NYXAgPSBtX3ByZWZlcnJlZFBsdWdpbnMuZmluZChpdC0+a2V5KTsKKyAg
ICAgICAgaWYgKHBhY2thZ2VJbk1hcCAhPSBtX3ByZWZlcnJlZFBsdWdpbnMuZW5kKCkgJiYgcGFj
a2FnZUluTWFwLT52YWx1ZSA9PSBwYWNrYWdlKQogICAgICAgICAgICAgbV9wcmVmZXJyZWRQbHVn
aW5zLnJlbW92ZShwYWNrYWdlSW5NYXApOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGx1Z2lucy9QbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsdWdpbnMvUGx1Z2luTWFpblRocmVhZFNjaGVkdWxlci5jcHAKaW5kZXggNzUyODY3NmIx
MmFhOGJkYThmMzNiMzJlZjQwY2M4NzY1NzY2ZDMxYS4uMzlhZTc5NGUyZmIwOTcyMTlhNTIyM2Vi
ZmJlZWRmNjliNmUyODYyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVn
aW5NYWluVGhyZWFkU2NoZWR1bGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1Bs
dWdpbk1haW5UaHJlYWRTY2hlZHVsZXIuY3BwCkBAIC00OSw3ICs0OSw3IEBAIHZvaWQgUGx1Z2lu
TWFpblRocmVhZFNjaGVkdWxlcjo6c2NoZWR1bGVDYWxsKE5QUCBucHAsIE1haW5UaHJlYWRGdW5j
dGlvbiBmdW5jdGlvCiAgICAgaWYgKGl0ID09IG1fY2FsbFF1ZXVlTWFwLmVuZCgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBpdC0+c2Vjb25kLmFwcGVuZChDYWxsKGZ1bmN0aW9uLCB1c2VyRGF0
YSkpOworICAgIGl0LT52YWx1ZS5hcHBlbmQoQ2FsbChmdW5jdGlvbiwgdXNlckRhdGEpKTsKIAog
ICAgIGlmICghbV9jYWxsUGVuZGluZykgewogICAgICAgICBjYWxsT25NYWluVGhyZWFkKG1haW5U
aHJlYWRDYWxsYmFjaywgdGhpcyk7CkBAIC05Nyw3ICs5Nyw3IEBAIHZvaWQgUGx1Z2luTWFpblRo
cmVhZFNjaGVkdWxlcjo6ZGlzcGF0Y2hDYWxscygpCiAgICAgICAgIC8vIEVtcHR5IGFsbCB0aGUg
cXVldWVzIGluIHRoZSBvcmlnaW5hbCBtYXAKICAgICAgICAgQ2FsbFF1ZXVlTWFwOjppdGVyYXRv
ciBlbmQgPSBtX2NhbGxRdWV1ZU1hcC5lbmQoKTsKICAgICAgICAgZm9yIChDYWxsUXVldWVNYXA6
Oml0ZXJhdG9yIGl0ID0gbV9jYWxsUXVldWVNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQot
ICAgICAgICAgICAgaXQtPnNlY29uZC5jbGVhcigpOworICAgICAgICAgICAgaXQtPnZhbHVlLmNs
ZWFyKCk7CiAgICAgfQogCiAgICAgbV9jYWxsUGVuZGluZyA9IGZhbHNlOwpAQCAtMTA1LDcgKzEw
NSw3IEBAIHZvaWQgUGx1Z2luTWFpblRocmVhZFNjaGVkdWxlcjo6ZGlzcGF0Y2hDYWxscygpCiAK
ICAgICBDYWxsUXVldWVNYXA6Oml0ZXJhdG9yIGVuZCA9IGNvcHkuZW5kKCk7CiAgICAgZm9yIChD
YWxsUXVldWVNYXA6Oml0ZXJhdG9yIGl0ID0gY29weS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
Ci0gICAgICAgIGRpc3BhdGNoQ2FsbHNGb3JQbHVnaW4oaXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsK
KyAgICAgICAgZGlzcGF0Y2hDYWxsc0ZvclBsdWdpbihpdC0+a2V5LCBpdC0+dmFsdWUpOwogfQog
CiB2b2lkIFBsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXI6Om1haW5UaHJlYWRDYWxsYmFjayh2b2lk
KiBjb250ZXh0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5TdHJl
YW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5TdHJlYW0uY3BwCmluZGV4IDA4
NWEzMThiNDIxYTdhZDhmZGZjNjcwYjYzZDMxYWY4MmUyNjZlNTIuLjUxNjIwYzlkMjQzMTI3MGQ4
YzdjYjY2M2NkMjc1Mzg1ZTZlYTMzNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdp
bnMvUGx1Z2luU3RyZWFtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblN0
cmVhbS5jcHAKQEAgLTE0Nyw5ICsxNDcsOSBAQCB2b2lkIFBsdWdpblN0cmVhbTo6c3RhcnRTdHJl
YW0oKQogCiAgICAgICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcmVz
b3VyY2VSZXNwb25zZS5odHRwSGVhZGVyRmllbGRzKCkuZW5kKCk7CiAgICAgICAgIGZvciAoSFRU
UEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlUmVzcG9uc2UuaHR0cEhl
YWRlckZpZWxkcygpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKGl0LT5rZXkpOwogICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoc2VwYXJh
dG9yKTsKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5zZWNvbmQpOworICAg
ICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPnZhbHVlKTsKICAgICAgICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsdWdpbnMvYmxhY2tiZXJyeS9QbHVnaW5EYXRhQmxhY2tCZXJyeS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbHVnaW5zL2JsYWNrYmVycnkvUGx1Z2luRGF0YUJsYWNrQmVycnkuY3Bw
CmluZGV4IGQ5MjBkMWZiZDVhMTEyNDYwM2E4Y2Q5OGZhMTM0MzU2ZTczMDZiNTkuLjQ3NDY2MTZk
ZTMzNWZhODNjZWM5NmQ5MzBlMjBkOGMyOGU5NGMzYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsdWdpbnMvYmxhY2tiZXJyeS9QbHVnaW5EYXRhQmxhY2tCZXJyeS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGx1Z2lucy9ibGFja2JlcnJ5L1BsdWdpbkRhdGFCbGFja0JlcnJ5LmNwcApA
QCAtNDEsOCArNDEsOCBAQCB2b2lkIFBsdWdpbkRhdGE6OmluaXRQbHVnaW5zKGNvbnN0IFBhZ2Uq
KQogICAgICAgICBNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1p
bWVUb0Rlc2NyaXB0aW9ucy5lbmQoKTsKICAgICAgICAgZm9yIChNSU1FVG9EZXNjcmlwdGlvbnNN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWltZVRvRGVzY3JpcHRpb25zLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgewogICAgICAgICAgICAgTWltZUNsYXNzSW5mbyBtaW1lOwotICAgICAgICAg
ICAgbWltZS50eXBlID0gaXQtPmZpcnN0OwotICAgICAgICAgICAgbWltZS5kZXNjID0gaXQtPnNl
Y29uZDsKKyAgICAgICAgICAgIG1pbWUudHlwZSA9IGl0LT5rZXk7CisgICAgICAgICAgICBtaW1l
LmRlc2MgPSBpdC0+dmFsdWU7CiAgICAgICAgICAgICBtaW1lLmV4dGVuc2lvbnMgPSBwYWNrYWdl
LT5taW1lVG9FeHRlbnNpb25zKCkuZ2V0KG1pbWUudHlwZSk7CiAgICAgICAgICAgICBpbmZvLm1p
bWVzLmFwcGVuZChtaW1lKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGx1Z2lucy93eC9QbHVnaW5EYXRhV3guY3BwIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy93eC9Q
bHVnaW5EYXRhV3guY3BwCmluZGV4IDBlYjg5MGZlZjA1YTExNWVhY2U0MjYzNzY4MGEzZDZhMTJm
NTc3MjkuLjI3OTUyYzRhZThiZmE0OWU5OGIxMWFlOTk1OWZjNzU0ZTRkYjIzYmUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd3gvUGx1Z2luRGF0YVd4LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbHVnaW5zL3d4L1BsdWdpbkRhdGFXeC5jcHAKQEAgLTUxLDggKzUxLDggQEAg
dm9pZCBQbHVnaW5EYXRhOjppbml0UGx1Z2lucyhjb25zdCBQYWdlKikKICAgICAgICAgZm9yIChN
SU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWltZVRvRGVzY3JpcHRp
b25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgTWltZUNsYXNzSW5m
byBtaW1lOwogCi0gICAgICAgICAgICBtaW1lLnR5cGUgPSBpdC0+Zmlyc3Q7Ci0gICAgICAgICAg
ICBtaW1lLmRlc2MgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgbWltZS50eXBlID0gaXQtPmtl
eTsKKyAgICAgICAgICAgIG1pbWUuZGVzYyA9IGl0LT52YWx1ZTsKICAgICAgICAgICAgIG1pbWUu
ZXh0ZW5zaW9ucyA9IHBhY2thZ2UtPm1pbWVUb0V4dGVuc2lvbnMoKS5nZXQobWltZS50eXBlKTsK
IAogICAgICAgICAgICAgaW5mby5taW1lcy5hcHBlbmQobWltZSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvRmxvd1RocmVhZENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0Zsb3dUaHJlYWRDb250cm9sbGVyLmNwcAppbmRleCA5ZWRkMGFhN2U4
ZjgwZTYyZGFlNjMxNmVmYjA3MzdhMWUxMzE3MjE1Li4yZTg5OWMyYWNmN2YzMGY3NjNkZjUyOWQ5
NjgyZjg5YzM1MWZkODBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmxv
d1RocmVhZENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GbG93
VGhyZWFkQ29udHJvbGxlci5jcHAKQEAgLTE1MCw5ICsxNTAsOSBAQCB2b2lkIEZsb3dUaHJlYWRD
b250cm9sbGVyOjp1bnJlZ2lzdGVyTmFtZWRGbG93Q29udGVudE5vZGUoTm9kZSogY29udGVudE5v
ZGUpCiAgICAgQVNTRVJUKGNvbnRlbnROb2RlICYmIGNvbnRlbnROb2RlLT5pc0VsZW1lbnROb2Rl
KCkpOwogICAgIEhhc2hNYXA8Tm9kZSosIFJlbmRlck5hbWVkRmxvd1RocmVhZCo+OjppdGVyYXRv
ciBpdCA9IG1fbWFwTmFtZWRGbG93Q29udGVudE5vZGVzLmZpbmQoY29udGVudE5vZGUpOwogICAg
IEFTU0VSVChpdCAhPSBtX21hcE5hbWVkRmxvd0NvbnRlbnROb2Rlcy5lbmQoKSk7Ci0gICAgQVNT
RVJUKGl0LT5zZWNvbmQpOwotICAgIEFTU0VSVChpdC0+c2Vjb25kLT5oYXNDb250ZW50Tm9kZShj
b250ZW50Tm9kZSkpOwotICAgIGl0LT5zZWNvbmQtPnVucmVnaXN0ZXJOYW1lZEZsb3dDb250ZW50
Tm9kZShjb250ZW50Tm9kZSk7CisgICAgQVNTRVJUKGl0LT52YWx1ZSk7CisgICAgQVNTRVJUKGl0
LT52YWx1ZS0+aGFzQ29udGVudE5vZGUoY29udGVudE5vZGUpKTsKKyAgICBpdC0+dmFsdWUtPnVu
cmVnaXN0ZXJOYW1lZEZsb3dDb250ZW50Tm9kZShjb250ZW50Tm9kZSk7CiAgICAgbV9tYXBOYW1l
ZEZsb3dDb250ZW50Tm9kZXMucmVtb3ZlKGNvbnRlbnROb2RlKTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCmluZGV4IDlhZDBmY2ZhMTJjODMzYjBhMWQz
Yzc3NGM5Zjg3NTQzZjc1ZDRjMTguLjU5MTJjNjhiMTY0OTFhNTU4NzQ1YmI1ODg0MDE4ZDI2NjI1
MjZlOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAKQEAg
LTQ2MCw3ICs0NjAsNyBAQCBib29sIElubGluZUZsb3dCb3g6OnJlcXVpcmVzSWRlb2dyYXBoaWNC
YXNlbGluZShjb25zdCBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGbwogICAgICAgICAgICAgY29u
c3QgVmVjdG9yPGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIHVzZWRGb250cyA9IDA7CiAgICAgICAg
ICAgICBpZiAoY3Vyci0+aXNJbmxpbmVUZXh0Qm94KCkpIHsKICAgICAgICAgICAgICAgICBHbHlw
aE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSB0ZXh0Qm94
RGF0YU1hcC5maW5kKHRvSW5saW5lVGV4dEJveChjdXJyKSk7Ci0gICAgICAgICAgICAgICAgdXNl
ZEZvbnRzID0gaXQgPT0gdGV4dEJveERhdGFNYXAuZW5kKCkgPyAwIDogJml0LT5zZWNvbmQuZmly
c3Q7CisgICAgICAgICAgICAgICAgdXNlZEZvbnRzID0gaXQgPT0gdGV4dEJveERhdGFNYXAuZW5k
KCkgPyAwIDogJml0LT52YWx1ZS5maXJzdDsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
aWYgKHVzZWRGb250cykgewpAQCAtODI0LDcgKzgyNCw3IEBAIGlubGluZSB2b2lkIElubGluZUZs
b3dCb3g6OmFkZFRleHRCb3hWaXN1YWxPdmVyZmxvdyhJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94LCBH
bHlwCiAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gdGV4dEJveC0+cmVuZGVyZXIoKS0+c3R5bGUo
aXNGaXJzdExpbmVTdHlsZSgpKTsKICAgICAKICAgICBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tG
b250c01hcDo6aXRlcmF0b3IgaXQgPSB0ZXh0Qm94RGF0YU1hcC5maW5kKHRleHRCb3gpOwotICAg
IEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cgPSBpdCA9PSB0ZXh0Qm94RGF0YU1hcC5lbmQo
KSA/IDAgOiAmaXQtPnNlY29uZC5zZWNvbmQ7CisgICAgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVy
ZmxvdyA9IGl0ID09IHRleHRCb3hEYXRhTWFwLmVuZCgpID8gMCA6ICZpdC0+dmFsdWUuc2Vjb25k
OwogICAgIGJvb2wgaXNGbGlwcGVkTGluZSA9IHN0eWxlLT5pc0ZsaXBwZWRMaW5lc1dyaXRpbmdN
b2RlKCk7CiAKICAgICBpbnQgdG9wR2x5cGhFZGdlID0gZ2x5cGhPdmVyZmxvdyA/IChpc0ZsaXBw
ZWRMaW5lID8gZ2x5cGhPdmVyZmxvdy0+Ym90dG9tIDogZ2x5cGhPdmVyZmxvdy0+dG9wKSA6IDA7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAppbmRleCAxOThmMzdlOTFl
MzEwMTNkMjMyNTg1MDJmMTc4MmMxYTRhZTBhNzY1Li43MDcyNjJlMmZiMDZkNDVhNjBhODgxOWU3
OTg0NWI3NDA2NmNmZTQ4IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2suY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5j
cHAKQEAgLTQ0MDgsNyArNDQwOCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNsZWFyRmxvYXRzKCkK
IAogICAgICAgICBSZW5kZXJlclRvRmxvYXRJbmZvTWFwOjppdGVyYXRvciBlbmQgPSBmbG9hdE1h
cC5lbmQoKTsKICAgICAgICAgZm9yIChSZW5kZXJlclRvRmxvYXRJbmZvTWFwOjppdGVyYXRvciBp
dCA9IGZsb2F0TWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgRmxv
YXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0ID0gKCppdCkuc2Vjb25kOworICAgICAgICAgICAg
RmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0ID0gKCppdCkudmFsdWU7CiAgICAgICAgICAg
ICBpZiAoIWZsb2F0aW5nT2JqZWN0LT5pc0Rlc2NlbmRhbnQoKSkgewogICAgICAgICAgICAgICAg
IGNoYW5nZUxvZ2ljYWxUb3AgPSAwOwogICAgICAgICAgICAgICAgIGNoYW5nZUxvZ2ljYWxCb3R0
b20gPSBtYXgoY2hhbmdlTG9naWNhbEJvdHRvbSwgbG9naWNhbEJvdHRvbUZvckZsb2F0KGZsb2F0
aW5nT2JqZWN0KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2tMaW5lTGF5b3V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
a0xpbmVMYXlvdXQuY3BwCmluZGV4IDYzOTRhNmRiNDFkMjUxNzk2NDRiMmExNzI0OTZmY2JkYTk5
OGU2NTMuLjFiMmNiZjI3NmFjZTQzZjhkMjM3ZjNlNDgxYzgxMjNiMmYwNTgxZDIgMTAwNzU1Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCkBA
IC03MDcsMTQgKzcwNywxNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0TG9naWNhbFdpZHRoRm9y
VGV4dFJ1bihSb290SW5saW5lQm94KiBsaW5lQm94LCBCaWRpUnVuKiBydQogICAgIGlmICghZmFs
bGJhY2tGb250cy5pc0VtcHR5KCkpIHsKICAgICAgICAgQVNTRVJUKHJ1bi0+bV9ib3gtPmlzVGV4
dCgpKTsKICAgICAgICAgR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXA6Oml0ZXJhdG9y
IGl0ID0gdGV4dEJveERhdGFNYXAuYWRkKHRvSW5saW5lVGV4dEJveChydW4tPm1fYm94KSwgbWFr
ZV9wYWlyKFZlY3Rvcjxjb25zdCBTaW1wbGVGb250RGF0YSo+KCksIEdseXBoT3ZlcmZsb3coKSkp
Lml0ZXJhdG9yOwotICAgICAgICBBU1NFUlQoaXQtPnNlY29uZC5maXJzdC5pc0VtcHR5KCkpOwot
ICAgICAgICBjb3B5VG9WZWN0b3IoZmFsbGJhY2tGb250cywgaXQtPnNlY29uZC5maXJzdCk7Cisg
ICAgICAgIEFTU0VSVChpdC0+dmFsdWUuZmlyc3QuaXNFbXB0eSgpKTsKKyAgICAgICAgY29weVRv
VmVjdG9yKGZhbGxiYWNrRm9udHMsIGl0LT52YWx1ZS5maXJzdCk7CiAgICAgICAgIHJ1bi0+bV9i
b3gtPnBhcmVudCgpLT5jbGVhckRlc2NlbmRhbnRzSGF2ZVNhbWVMaW5lSGVpZ2h0QW5kQmFzZWxp
bmUoKTsKICAgICB9CiAgICAgaWYgKChnbHlwaE92ZXJmbG93LnRvcCB8fCBnbHlwaE92ZXJmbG93
LmJvdHRvbSB8fCBnbHlwaE92ZXJmbG93LmxlZnQgfHwgZ2x5cGhPdmVyZmxvdy5yaWdodCkpIHsK
ICAgICAgICAgQVNTRVJUKHJ1bi0+bV9ib3gtPmlzVGV4dCgpKTsKICAgICAgICAgR2x5cGhPdmVy
Zmxvd0FuZEZhbGxiYWNrRm9udHNNYXA6Oml0ZXJhdG9yIGl0ID0gdGV4dEJveERhdGFNYXAuYWRk
KHRvSW5saW5lVGV4dEJveChydW4tPm1fYm94KSwgbWFrZV9wYWlyKFZlY3Rvcjxjb25zdCBTaW1w
bGVGb250RGF0YSo+KCksIEdseXBoT3ZlcmZsb3coKSkpLml0ZXJhdG9yOwotICAgICAgICBpdC0+
c2Vjb25kLnNlY29uZCA9IGdseXBoT3ZlcmZsb3c7CisgICAgICAgIGl0LT52YWx1ZS5zZWNvbmQg
PSBnbHlwaE92ZXJmbG93OwogICAgICAgICBydW4tPm1fYm94LT5jbGVhcktub3duVG9IYXZlTm9P
dmVyZmxvdygpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94TW9kZWxPYmplY3QuY3BwCmluZGV4IDhkZWVkZGYzOGI2NDI1MDQyODc3YTBmYzkyN2Ri
MGFmNThmZTJhZjkuLjFkMmU4YzM3MTZkYzU3YjIzNjMzZGUzYmM4MWM5YjE2MjNlNjQ2MGQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNw
cApAQCAtMTM4LDcgKzEzOCw3IEBAIHZvaWQgSW1hZ2VRdWFsaXR5Q29udHJvbGxlcjo6aGlnaFF1
YWxpdHlSZXBhaW50VGltZXJGaXJlZChUaW1lcjxJbWFnZVF1YWxpdHlDb250CiAgICAgaWYgKG1f
YW5pbWF0ZWRSZXNpemVJc0FjdGl2ZSkgewogICAgICAgICBtX2FuaW1hdGVkUmVzaXplSXNBY3Rp
dmUgPSBmYWxzZTsKICAgICAgICAgZm9yIChPYmplY3RMYXllclNpemVNYXA6Oml0ZXJhdG9yIGl0
ID0gbV9vYmplY3RMYXllclNpemVNYXAuYmVnaW4oKTsgaXQgIT0gbV9vYmplY3RMYXllclNpemVN
YXAuZW5kKCk7ICsraXQpCi0gICAgICAgICAgICBpdC0+Zmlyc3QtPnJlcGFpbnQoKTsKKyAgICAg
ICAgICAgIGl0LT5rZXktPnJlcGFpbnQoKTsKICAgICB9CiB9CiAKQEAgLTE2MywxNCArMTYzLDE0
IEBAIGJvb2wgSW1hZ2VRdWFsaXR5Q29udHJvbGxlcjo6c2hvdWxkUGFpbnRBdExvd1F1YWxpdHko
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBSCiAKICAgICAvLyBMb29rIG91cnNlbHZlcyB1cCBp
biB0aGUgaGFzaHRhYmxlcy4KICAgICBPYmplY3RMYXllclNpemVNYXA6Oml0ZXJhdG9yIGkgPSBt
X29iamVjdExheWVyU2l6ZU1hcC5maW5kKG9iamVjdCk7Ci0gICAgTGF5ZXJTaXplTWFwKiBpbm5l
ck1hcCA9IGkgIT0gbV9vYmplY3RMYXllclNpemVNYXAuZW5kKCkgPyAmaS0+c2Vjb25kIDogMDsK
KyAgICBMYXllclNpemVNYXAqIGlubmVyTWFwID0gaSAhPSBtX29iamVjdExheWVyU2l6ZU1hcC5l
bmQoKSA/ICZpLT52YWx1ZSA6IDA7CiAgICAgTGF5b3V0U2l6ZSBvbGRTaXplOwogICAgIGJvb2wg
aXNGaXJzdFJlc2l6ZSA9IHRydWU7CiAgICAgaWYgKGlubmVyTWFwKSB7CiAgICAgICAgIExheWVy
U2l6ZU1hcDo6aXRlcmF0b3IgaiA9IGlubmVyTWFwLT5maW5kKGxheWVyKTsKICAgICAgICAgaWYg
KGogIT0gaW5uZXJNYXAtPmVuZCgpKSB7CiAgICAgICAgICAgICBpc0ZpcnN0UmVzaXplID0gZmFs
c2U7Ci0gICAgICAgICAgICBvbGRTaXplID0gai0+c2Vjb25kOworICAgICAgICAgICAgb2xkU2l6
ZSA9IGotPnZhbHVlOwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQ291bnRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQ291bnRlci5jcHAKaW5kZXggZTM0OTZiMTM2NTYyYTFhMWM3YjAyZWUxN2I3YzEw
YzQ0YjFhNGMxMy4uMjRjODYzMzA0MjEyMmE4YzUwZjNiYWQ3MDcxMmM1NDk5MzI5ZTc5YyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb3VudGVyLmNwcApAQCAtNTY4LDEwICs1
NjgsMTAgQEAgdm9pZCBSZW5kZXJDb3VudGVyOjpkZXN0cm95Q291bnRlck5vZGVzKFJlbmRlck9i
amVjdCogb3duZXIpCiAgICAgQ291bnRlck1hcHM6Oml0ZXJhdG9yIG1hcHNJdGVyYXRvciA9IG1h
cHMuZmluZChvd25lcik7CiAgICAgaWYgKG1hcHNJdGVyYXRvciA9PSBtYXBzLmVuZCgpKQogICAg
ICAgICByZXR1cm47Ci0gICAgQ291bnRlck1hcCogbWFwID0gbWFwc0l0ZXJhdG9yLT5zZWNvbmQu
Z2V0KCk7CisgICAgQ291bnRlck1hcCogbWFwID0gbWFwc0l0ZXJhdG9yLT52YWx1ZS5nZXQoKTsK
ICAgICBDb3VudGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwogICAgIGZv
ciAoQ291bnRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewotICAgICAgICBkZXN0cm95Q291bnRlck5vZGVXaXRob3V0TWFwUmVtb3ZhbChp
dC0+Zmlyc3QsIGl0LT5zZWNvbmQuZ2V0KCkpOworICAgICAgICBkZXN0cm95Q291bnRlck5vZGVX
aXRob3V0TWFwUmVtb3ZhbChpdC0+a2V5LCBpdC0+dmFsdWUuZ2V0KCkpOwogICAgIH0KICAgICBt
YXBzLnJlbW92ZShtYXBzSXRlcmF0b3IpOwogICAgIG93bmVyLT5zZXRIYXNDb3VudGVyTm9kZU1h
cChmYWxzZSk7CkBAIC01ODUsNyArNTg1LDcgQEAgdm9pZCBSZW5kZXJDb3VudGVyOjpkZXN0cm95
Q291bnRlck5vZGUoUmVuZGVyT2JqZWN0KiBvd25lciwgY29uc3QgQXRvbWljU3RyaW5nJgogICAg
IENvdW50ZXJNYXA6Oml0ZXJhdG9yIG1hcEl0ZXJhdG9yID0gbWFwLT5maW5kKGlkZW50aWZpZXIp
OwogICAgIGlmIChtYXBJdGVyYXRvciA9PSBtYXAtPmVuZCgpKQogICAgICAgICByZXR1cm47Ci0g
ICAgZGVzdHJveUNvdW50ZXJOb2RlV2l0aG91dE1hcFJlbW92YWwoaWRlbnRpZmllciwgbWFwSXRl
cmF0b3ItPnNlY29uZC5nZXQoKSk7CisgICAgZGVzdHJveUNvdW50ZXJOb2RlV2l0aG91dE1hcFJl
bW92YWwoaWRlbnRpZmllciwgbWFwSXRlcmF0b3ItPnZhbHVlLmdldCgpKTsKICAgICBtYXAtPnJl
bW92ZShtYXBJdGVyYXRvcik7CiAgICAgLy8gV2UgZG8gbm90IGRlbGV0ZSAibWFwIiBoZXJlIGV2
ZW4gaWYgZW1wdHkgYmVjYXVzZSB3ZSBleHBlY3QgdG8gcmV1c2UKICAgICAvLyBpdCBzb29uLiBJ
biBvcmRlciBmb3IgYSByZW5kZXJlciB0byBsb3NlIGFsbCBpdHMgY291bnRlcnMgcGVybWFuZW50
bHksCkBAIC02MjUsMjIgKzYyNSwyMiBAQCBzdGF0aWMgdm9pZCB1cGRhdGVDb3VudGVycyhSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyKQogICAgIENvdW50ZXJEaXJlY3RpdmVNYXA6OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IGRpcmVjdGl2ZU1hcC0+ZW5kKCk7CiAgICAgaWYgKCFyZW5kZXJlci0+aGFzQ291
bnRlck5vZGVNYXAoKSkgewogICAgICAgICBmb3IgKENvdW50ZXJEaXJlY3RpdmVNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gZGlyZWN0aXZlTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0g
ICAgICAgICAgICBtYWtlQ291bnRlck5vZGUocmVuZGVyZXIsIGl0LT5maXJzdCwgZmFsc2UpOwor
ICAgICAgICAgICAgbWFrZUNvdW50ZXJOb2RlKHJlbmRlcmVyLCBpdC0+a2V5LCBmYWxzZSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgQ291bnRlck1hcCogY291bnRlck1hcCA9IGNvdW50
ZXJNYXBzKCkuZ2V0KHJlbmRlcmVyKTsKICAgICBBU1NFUlQoY291bnRlck1hcCk7CiAgICAgZm9y
IChDb3VudGVyRGlyZWN0aXZlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGRpcmVjdGl2ZU1hcC0+
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFJlZlB0cjxDb3VudGVyTm9kZT4g
bm9kZSA9IGNvdW50ZXJNYXAtPmdldChpdC0+Zmlyc3QpOworICAgICAgICBSZWZQdHI8Q291bnRl
ck5vZGU+IG5vZGUgPSBjb3VudGVyTWFwLT5nZXQoaXQtPmtleSk7CiAgICAgICAgIGlmICghbm9k
ZSkgewotICAgICAgICAgICAgbWFrZUNvdW50ZXJOb2RlKHJlbmRlcmVyLCBpdC0+Zmlyc3QsIGZh
bHNlKTsKKyAgICAgICAgICAgIG1ha2VDb3VudGVyTm9kZShyZW5kZXJlciwgaXQtPmtleSwgZmFs
c2UpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgUmVmUHRyPENv
dW50ZXJOb2RlPiBuZXdQYXJlbnQgPSAwOwogICAgICAgICBSZWZQdHI8Q291bnRlck5vZGU+IG5l
d1ByZXZpb3VzU2libGluZyA9IDA7CiAgICAgICAgIAotICAgICAgICBmaW5kUGxhY2VGb3JDb3Vu
dGVyKHJlbmRlcmVyLCBpdC0+Zmlyc3QsIG5vZGUtPmhhc1Jlc2V0VHlwZSgpLCBuZXdQYXJlbnQs
IG5ld1ByZXZpb3VzU2libGluZyk7Ci0gICAgICAgIGlmIChub2RlICE9IGNvdW50ZXJNYXAtPmdl
dChpdC0+Zmlyc3QpKQorICAgICAgICBmaW5kUGxhY2VGb3JDb3VudGVyKHJlbmRlcmVyLCBpdC0+
a2V5LCBub2RlLT5oYXNSZXNldFR5cGUoKSwgbmV3UGFyZW50LCBuZXdQcmV2aW91c1NpYmxpbmcp
OworICAgICAgICBpZiAobm9kZSAhPSBjb3VudGVyTWFwLT5nZXQoaXQtPmtleSkpCiAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgQ291bnRlck5vZGUqIHBhcmVudCA9IG5vZGUtPnBhcmVu
dCgpOwogICAgICAgICBpZiAobmV3UGFyZW50ID09IHBhcmVudCAmJiBuZXdQcmV2aW91c1NpYmxp
bmcgPT0gbm9kZS0+cHJldmlvdXNTaWJsaW5nKCkpCkBAIC02NDgsNyArNjQ4LDcgQEAgc3RhdGlj
IHZvaWQgdXBkYXRlQ291bnRlcnMoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKICAgICAgICAgaWYg
KHBhcmVudCkKICAgICAgICAgICAgIHBhcmVudC0+cmVtb3ZlQ2hpbGQobm9kZS5nZXQoKSk7CiAg
ICAgICAgIGlmIChuZXdQYXJlbnQpCi0gICAgICAgICAgICBuZXdQYXJlbnQtPmluc2VydEFmdGVy
KG5vZGUuZ2V0KCksIG5ld1ByZXZpb3VzU2libGluZy5nZXQoKSwgaXQtPmZpcnN0KTsKKyAgICAg
ICAgICAgIG5ld1BhcmVudC0+aW5zZXJ0QWZ0ZXIobm9kZS5nZXQoKSwgbmV3UHJldmlvdXNTaWJs
aW5nLmdldCgpLCBpdC0+a2V5KTsKICAgICB9CiB9CiAKQEAgLTY4MCwyMSArNjgwLDIxIEBAIHZv
aWQgUmVuZGVyQ291bnRlcjo6cmVuZGVyZXJTdHlsZUNoYW5nZWQoUmVuZGVyT2JqZWN0KiByZW5k
ZXJlciwgY29uc3QgUmVuZGVyU3R5CiAgICAgICAgICAgICBDb3VudGVyRGlyZWN0aXZlTWFwOjpj
b25zdF9pdGVyYXRvciBuZXdNYXBFbmQgPSBuZXdDb3VudGVyRGlyZWN0aXZlcy0+ZW5kKCk7CiAg
ICAgICAgICAgICBDb3VudGVyRGlyZWN0aXZlTWFwOjpjb25zdF9pdGVyYXRvciBvbGRNYXBFbmQg
PSBvbGRDb3VudGVyRGlyZWN0aXZlcy0+ZW5kKCk7CiAgICAgICAgICAgICBmb3IgKENvdW50ZXJE
aXJlY3RpdmVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbmV3Q291bnRlckRpcmVjdGl2ZXMtPmJl
Z2luKCk7IGl0ICE9IG5ld01hcEVuZDsgKytpdCkgewotICAgICAgICAgICAgICAgIENvdW50ZXJE
aXJlY3RpdmVNYXA6OmNvbnN0X2l0ZXJhdG9yIG9sZE1hcEl0ID0gb2xkQ291bnRlckRpcmVjdGl2
ZXMtPmZpbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgICAgICAgICBDb3VudGVyRGlyZWN0aXZlTWFw
Ojpjb25zdF9pdGVyYXRvciBvbGRNYXBJdCA9IG9sZENvdW50ZXJEaXJlY3RpdmVzLT5maW5kKGl0
LT5rZXkpOwogICAgICAgICAgICAgICAgIGlmIChvbGRNYXBJdCAhPSBvbGRNYXBFbmQpIHsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKG9sZE1hcEl0LT5zZWNvbmQgPT0gaXQtPnNlY29uZCkKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKG9sZE1hcEl0LT52YWx1ZSA9PSBpdC0+dmFsdWUpCiAgICAg
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgUmVuZGVy
Q291bnRlcjo6ZGVzdHJveUNvdW50ZXJOb2RlKHJlbmRlcmVyLCBpdC0+Zmlyc3QpOworICAgICAg
ICAgICAgICAgICAgICBSZW5kZXJDb3VudGVyOjpkZXN0cm95Q291bnRlck5vZGUocmVuZGVyZXIs
IGl0LT5rZXkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAvLyBXZSBtdXN0
IGNyZWF0ZSB0aGlzIG5vZGUgaGVyZSwgYmVjYXVzZSB0aGUgY2hhbmdlZCBub2RlIG1heSBiZSBh
IG5vZGUgd2l0aCBubyBkaXNwbGF5IHN1Y2ggYXMKICAgICAgICAgICAgICAgICAvLyBhcyB0aG9z
ZSBjcmVhdGVkIGJ5IHRoZSBpbmNyZW1lbnQgb3IgcmVzZXQgZGlyZWN0aXZlcyBhbmQgdGhlIHJl
LWxheW91dCB0aGF0IHdpbGwgaGFwcGVuIHdpbGwKICAgICAgICAgICAgICAgICAvLyBub3QgY2F0
Y2ggdGhlIGNoYW5nZSBpZiB0aGUgbm9kZSBoYWQgbm8gY2hpbGRyZW4uCi0gICAgICAgICAgICAg
ICAgbWFrZUNvdW50ZXJOb2RlKHJlbmRlcmVyLCBpdC0+Zmlyc3QsIGZhbHNlKTsKKyAgICAgICAg
ICAgICAgICBtYWtlQ291bnRlck5vZGUocmVuZGVyZXIsIGl0LT5rZXksIGZhbHNlKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIC8vIERlc3Ryb3lpbmcgb2xkIGNvdW50ZXJzIHRoYXQgZG8g
bm90IGV4aXN0IGluIHRoZSBuZXcgY291bnRlckRpcmVjdGl2ZSBtYXAuCiAgICAgICAgICAgICBm
b3IgKENvdW50ZXJEaXJlY3RpdmVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gb2xkQ291bnRlckRp
cmVjdGl2ZXMtPmJlZ2luKCk7IGl0ICE9b2xkTWFwRW5kOyArK2l0KSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKCFuZXdDb3VudGVyRGlyZWN0aXZlcy0+Y29udGFpbnMoaXQtPmZpcnN0KSkKLSAgICAg
ICAgICAgICAgICAgICAgUmVuZGVyQ291bnRlcjo6ZGVzdHJveUNvdW50ZXJOb2RlKHJlbmRlcmVy
LCBpdC0+Zmlyc3QpOworICAgICAgICAgICAgICAgIGlmICghbmV3Q291bnRlckRpcmVjdGl2ZXMt
PmNvbnRhaW5zKGl0LT5rZXkpKQorICAgICAgICAgICAgICAgICAgICBSZW5kZXJDb3VudGVyOjpk
ZXN0cm95Q291bnRlck5vZGUocmVuZGVyZXIsIGl0LT5rZXkpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKHJlbmRlcmVyLT5oYXNDb3VudGVyTm9kZU1h
cCgpKQpAQCAtNzA2LDcgKzcwNiw3IEBAIHZvaWQgUmVuZGVyQ291bnRlcjo6cmVuZGVyZXJTdHls
ZUNoYW5nZWQoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5CiAgICAgICAg
ICAgICAvLyBXZSBtdXN0IGNyZWF0ZSB0aGlzIG5vZGUgaGVyZSwgYmVjYXVzZSB0aGUgYWRkZWQg
bm9kZSBtYXkgYmUgYSBub2RlIHdpdGggbm8gZGlzcGxheSBzdWNoIGFzCiAgICAgICAgICAgICAv
LyBhcyB0aG9zZSBjcmVhdGVkIGJ5IHRoZSBpbmNyZW1lbnQgb3IgcmVzZXQgZGlyZWN0aXZlcyBh
bmQgdGhlIHJlLWxheW91dCB0aGF0IHdpbGwgaGFwcGVuIHdpbGwKICAgICAgICAgICAgIC8vIG5v
dCBjYXRjaCB0aGUgY2hhbmdlIGlmIHRoZSBub2RlIGhhZCBubyBjaGlsZHJlbi4KLSAgICAgICAg
ICAgIG1ha2VDb3VudGVyTm9kZShyZW5kZXJlciwgaXQtPmZpcnN0LCBmYWxzZSk7CisgICAgICAg
ICAgICBtYWtlQ291bnRlck5vZGUocmVuZGVyZXIsIGl0LT5rZXksIGZhbHNlKTsKICAgICAgICAg
fQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJG
bG93VGhyZWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFk
LmNwcAppbmRleCA4MjY4NjExN2EzZjZiMGY1MjIzOTFkZTZmZTEzZjk5OWJiYTA4NDM0Li42Nzgz
MzEwYjg4OWQwYzI1NDEyNjAwMTg5M2Y3NTIyY2IxMzNjODI3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwCkBAIC01OTYsNyArNTk2LDcgQEAgdm9p
ZCBSZW5kZXJGbG93VGhyZWFkOjpzZXRSZWdpb25SYW5nZUZvckJveChjb25zdCBSZW5kZXJCb3gq
IGJveCwgTGF5b3V0VW5pdCBvZmYKICAgICB9CiAKICAgICAvLyBJZiBub3RoaW5nIGNoYW5nZWQs
IGp1c3QgYmFpbC4KLSAgICBSZW5kZXJSZWdpb25SYW5nZSYgcmFuZ2UgPSBpdC0+c2Vjb25kOwor
ICAgIFJlbmRlclJlZ2lvblJhbmdlJiByYW5nZSA9IGl0LT52YWx1ZTsKICAgICBpZiAocmFuZ2Uu
c3RhcnRSZWdpb24oKSA9PSBzdGFydFJlZ2lvbiAmJiByYW5nZS5lbmRSZWdpb24oKSA9PSBlbmRS
ZWdpb24pCiAgICAgICAgIHJldHVybjsKIApAQCAtNjI2LDcgKzYyNiw3IEBAIHZvaWQgUmVuZGVy
Rmxvd1RocmVhZDo6Z2V0UmVnaW9uUmFuZ2VGb3JCb3goY29uc3QgUmVuZGVyQm94KiBib3gsIFJl
bmRlclJlZ2lvbiomCiAgICAgaWYgKGl0ID09IG1fcmVnaW9uUmFuZ2VNYXAuZW5kKCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGNvbnN0IFJlbmRlclJlZ2lvblJhbmdlJiByYW5nZSA9IGl0LT5z
ZWNvbmQ7CisgICAgY29uc3QgUmVuZGVyUmVnaW9uUmFuZ2UmIHJhbmdlID0gaXQtPnZhbHVlOwog
ICAgIHN0YXJ0UmVnaW9uID0gcmFuZ2Uuc3RhcnRSZWdpb24oKTsKICAgICBlbmRSZWdpb24gPSBy
YW5nZS5lbmRSZWdpb24oKTsKICAgICBBU1NFUlQobV9yZWdpb25MaXN0LmNvbnRhaW5zKHN0YXJ0
UmVnaW9uKSAmJiBtX3JlZ2lvbkxpc3QuY29udGFpbnMoZW5kUmVnaW9uKSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAppbmRleCA0ZGFlZWNmOTM2YzI5ZWZjYThjY2Zk
ODE2NjcwNzIxYzQ2OTA1NWRiLi5iOWI0YzhjMDhiNzEzZTM5MmY3ODM1YzBkZTMyNDVkMWFmOWZi
MjhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTI4NzQs
NyArMjg3NCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwKICAgICBwYWludExheWVyKHRoaXMs
IGNvbnRleHQsIGVuY2xvc2luZ0ludFJlY3QoZGFtYWdlUmVjdCksIExheW91dFNpemUoKSwgcGFp
bnRCZWhhdmlvciwgcGFpbnRpbmdSb290LCByZWdpb24sICZvdmVybGFwVGVzdFJlcXVlc3RzLCBw
YWludEZsYWdzKTsKICAgICBPdmVybGFwVGVzdFJlcXVlc3RNYXA6Oml0ZXJhdG9yIGVuZCA9IG92
ZXJsYXBUZXN0UmVxdWVzdHMuZW5kKCk7CiAgICAgZm9yIChPdmVybGFwVGVzdFJlcXVlc3RNYXA6
Oml0ZXJhdG9yIGl0ID0gb3ZlcmxhcFRlc3RSZXF1ZXN0cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpCi0gICAgICAgIGl0LT5maXJzdC0+c2V0T3ZlcmxhcFRlc3RSZXN1bHQoZmFsc2UpOworICAg
ICAgICBpdC0+a2V5LT5zZXRPdmVybGFwVGVzdFJlc3VsdChmYWxzZSk7CiB9CiAKIHZvaWQgUmVu
ZGVyTGF5ZXI6OnBhaW50T3ZlcmxheVNjcm9sbGJhcnMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LCBQYWludEJlaGF2aW9yIHBhaW50QmVoYXZp
b3IsIFJlbmRlck9iamVjdCogcGFpbnRpbmdSb290KQpAQCAtMjk0MywxMSArMjk0MywxMSBAQCBz
dGF0aWMgdm9pZCBwZXJmb3JtT3ZlcmxhcFRlc3RzKE92ZXJsYXBUZXN0UmVxdWVzdE1hcCYgb3Zl
cmxhcFRlc3RSZXF1ZXN0cywgY29ucwogICAgIE92ZXJsYXBUZXN0UmVxdWVzdE1hcDo6aXRlcmF0
b3IgZW5kID0gb3ZlcmxhcFRlc3RSZXF1ZXN0cy5lbmQoKTsKICAgICBMYXlvdXRSZWN0IGJvdW5k
aW5nQm94ID0gbGF5ZXItPmJvdW5kaW5nQm94KHJvb3RMYXllcik7CiAgICAgZm9yIChPdmVybGFw
VGVzdFJlcXVlc3RNYXA6Oml0ZXJhdG9yIGl0ID0gb3ZlcmxhcFRlc3RSZXF1ZXN0cy5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKCFib3VuZGluZ0JveC5pbnRlcnNlY3Rz
KGl0LT5zZWNvbmQpKQorICAgICAgICBpZiAoIWJvdW5kaW5nQm94LmludGVyc2VjdHMoaXQtPnZh
bHVlKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGl0LT5maXJzdC0+c2V0T3Zl
cmxhcFRlc3RSZXN1bHQodHJ1ZSk7Ci0gICAgICAgIG92ZXJsYXBwZWRSZXF1ZXN0Q2xpZW50cy5h
cHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgaXQtPmtleS0+c2V0T3ZlcmxhcFRlc3RSZXN1bHQo
dHJ1ZSk7CisgICAgICAgIG92ZXJsYXBwZWRSZXF1ZXN0Q2xpZW50cy5hcHBlbmQoaXQtPmtleSk7
CiAgICAgfQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb3ZlcmxhcHBlZFJlcXVlc3RDbGll
bnRzLnNpemUoKTsgKytpKQogICAgICAgICBvdmVybGFwVGVzdFJlcXVlc3RzLnJlbW92ZShvdmVy
bGFwcGVkUmVxdWVzdENsaWVudHNbaV0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyRmlsdGVySW5mby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvLmNwcAppbmRleCBhY2JmMDdkOWQxYmZkMjAyMWM1NTQx
NTI2NmRkNDQzMDUwNTU1YTdkLi5jYjRjNWQ2NjExMGM5MjQxMmYzNTBlYTg5OTMyNzJjZTYyY2Q3
ZTA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0
ZXJJbmZvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0
ZXJJbmZvLmNwcApAQCAtNTYsNyArNTYsNyBAQCBSZW5kZXJMYXllckZpbHRlckluZm8qIFJlbmRl
ckxheWVyRmlsdGVySW5mbzo6ZmlsdGVySW5mb0ZvclJlbmRlckxheWVyKGNvbnN0IFJlbgogICAg
IGlmICghc19maWx0ZXJNYXApCiAgICAgICAgIHJldHVybiAwOwogICAgIFJlbmRlckxheWVyRmls
dGVySW5mb01hcDo6aXRlcmF0b3IgaXRlciA9IHNfZmlsdGVyTWFwLT5maW5kKGxheWVyKTsKLSAg
ICByZXR1cm4gKGl0ZXIgIT0gc19maWx0ZXJNYXAtPmVuZCgpKSA/IGl0ZXItPnNlY29uZCA6IDA7
CisgICAgcmV0dXJuIChpdGVyICE9IHNfZmlsdGVyTWFwLT5lbmQoKSkgPyBpdGVyLT52YWx1ZSA6
IDA7CiB9CiAKIFJlbmRlckxheWVyRmlsdGVySW5mbyogUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvOjpj
cmVhdGVGaWx0ZXJJbmZvRm9yUmVuZGVyTGF5ZXJJZk5lZWRlZChSZW5kZXJMYXllciogbGF5ZXIp
CkBAIC02Nyw3ICs2Nyw3IEBAIFJlbmRlckxheWVyRmlsdGVySW5mbyogUmVuZGVyTGF5ZXJGaWx0
ZXJJbmZvOjpjcmVhdGVGaWx0ZXJJbmZvRm9yUmVuZGVyTGF5ZXJJZk5lCiAgICAgUmVuZGVyTGF5
ZXJGaWx0ZXJJbmZvTWFwOjppdGVyYXRvciBpdGVyID0gc19maWx0ZXJNYXAtPmZpbmQobGF5ZXIp
OwogICAgIGlmIChpdGVyICE9IHNfZmlsdGVyTWFwLT5lbmQoKSkgewogICAgICAgICBBU1NFUlQo
bGF5ZXItPmhhc0ZpbHRlckluZm8oKSk7Ci0gICAgICAgIHJldHVybiBpdGVyLT5zZWNvbmQ7Cisg
ICAgICAgIHJldHVybiBpdGVyLT52YWx1ZTsKICAgICB9CiAgICAgCiAgICAgUmVuZGVyTGF5ZXJG
aWx0ZXJJbmZvKiBmaWx0ZXIgPSBuZXcgUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvKGxheWVyKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd1RocmVhZC5jcHAK
aW5kZXggMjY0YWViNDk3NzkxOWJiNTRmZjhjMDRlNzE1OTgxNzhkYzRjY2RkNS4uZjVlNjNmNDA2
NDdhOWUxMTNkNTQ1ZjY2Yzk4NTRlYjNhZjE2NzY2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd1RocmVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd1RocmVhZC5jcHAKQEAgLTE0Miw3ICsxNDIsNyBA
QCBib29sIFJlbmRlck5hbWVkRmxvd1RocmVhZDo6ZGVwZW5kc09uKFJlbmRlck5hbWVkRmxvd1Ro
cmVhZCogb3RoZXJSZW5kZXJGbG93VGhyZQogICAgIFJlbmRlck5hbWVkRmxvd1RocmVhZENvdW50
ZWRTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXJhdG9yID0gbV9sYXlvdXRCZWZvcmVUaHJlYWRzU2V0
LmJlZ2luKCk7CiAgICAgUmVuZGVyTmFtZWRGbG93VGhyZWFkQ291bnRlZFNldDo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gbV9sYXlvdXRCZWZvcmVUaHJlYWRzU2V0LmVuZCgpOwogICAgIGZvciAoOyBp
dGVyYXRvciAhPSBlbmQ7ICsraXRlcmF0b3IpIHsKLSAgICAgICAgY29uc3QgUmVuZGVyTmFtZWRG
bG93VGhyZWFkKiBiZWZvcmVGbG93VGhyZWFkID0gKCppdGVyYXRvcikuZmlyc3Q7CisgICAgICAg
IGNvbnN0IFJlbmRlck5hbWVkRmxvd1RocmVhZCogYmVmb3JlRmxvd1RocmVhZCA9ICgqaXRlcmF0
b3IpLmtleTsKICAgICAgICAgaWYgKGJlZm9yZUZsb3dUaHJlYWQtPmRlcGVuZHNPbihvdGhlclJl
bmRlckZsb3dUaHJlYWQpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMzA5
LDcgKzMwOSw3IEBAIHZvaWQgUmVuZGVyTmFtZWRGbG93VGhyZWFkOjpyZW1vdmVEZXBlbmRlbmN5
T25GbG93VGhyZWFkKFJlbmRlck5hbWVkRmxvd1RocmVhZCoKIHZvaWQgUmVuZGVyTmFtZWRGbG93
VGhyZWFkOjpwdXNoRGVwZW5kZW5jaWVzKFJlbmRlck5hbWVkRmxvd1RocmVhZExpc3QmIGxpc3Qp
CiB7CiAgICAgZm9yIChSZW5kZXJOYW1lZEZsb3dUaHJlYWRDb3VudGVkU2V0OjppdGVyYXRvciBp
dGVyID0gbV9sYXlvdXRCZWZvcmVUaHJlYWRzU2V0LmJlZ2luKCk7IGl0ZXIgIT0gbV9sYXlvdXRC
ZWZvcmVUaHJlYWRzU2V0LmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgUmVuZGVyTmFtZWRGbG93
VGhyZWFkKiBmbG93VGhyZWFkID0gKCppdGVyKS5maXJzdDsKKyAgICAgICAgUmVuZGVyTmFtZWRG
bG93VGhyZWFkKiBmbG93VGhyZWFkID0gKCppdGVyKS5rZXk7CiAgICAgICAgIGlmIChsaXN0LmNv
bnRhaW5zKGZsb3dUaHJlYWQpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGZsb3dU
aHJlYWQtPnB1c2hEZXBlbmRlbmNpZXMobGlzdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJSZWdpb24uY3BwCmluZGV4IDJiN2U0MjUyYWIyMzY5NmEwNzBkNDY4MzhjZjUyNTNiYTM1
YjkxZmEuLjE4MWFkY2Y2NmY0Mzc0NmEzMzg4YjhmZjM5N2E2OGMzMzI5OTRlOTUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZWdpb24uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZWdpb24uY3BwCkBAIC0zMDUsNyArMzA1LDcgQEAg
UmVuZGVyQm94UmVnaW9uSW5mbyogUmVuZGVyUmVnaW9uOjpzZXRSZW5kZXJCb3hSZWdpb25JbmZv
KGNvbnN0IFJlbmRlckJveCogYm94LAogICAgIGlmICghbV9pc1ZhbGlkIHx8ICFtX2Zsb3dUaHJl
YWQpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgT3duUHRyPFJlbmRlckJveFJlZ2lvbkluZm8+
JiBib3hJbmZvID0gbV9yZW5kZXJCb3hSZWdpb25JbmZvLmFkZChib3gsIG51bGxwdHIpLml0ZXJh
dG9yLT5zZWNvbmQ7CisgICAgT3duUHRyPFJlbmRlckJveFJlZ2lvbkluZm8+JiBib3hJbmZvID0g
bV9yZW5kZXJCb3hSZWdpb25JbmZvLmFkZChib3gsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsK
ICAgICBpZiAoYm94SW5mbykKICAgICAgICAgKmJveEluZm8gPSBSZW5kZXJCb3hSZWdpb25JbmZv
KGxvZ2ljYWxMZWZ0SW5zZXQsIGxvZ2ljYWxSaWdodEluc2V0LCBjb250YWluaW5nQmxvY2tDaGFp
bklzSW5zZXQpOwogICAgIGVsc2UKQEAgLTM3MCw4ICszNzAsOCBAQCB2b2lkIFJlbmRlclJlZ2lv
bjo6c2V0UmVnaW9uT2JqZWN0c1JlZ2lvblN0eWxlKCkKICAgICAgICAgUmVmUHRyPFJlbmRlclN0
eWxlPiBvYmplY3RTdHlsZUluUmVnaW9uOwogICAgICAgICBib29sIG9iamVjdFJlZ2lvblN0eWxl
Q2FjaGVkID0gZmFsc2U7CiAgICAgICAgIGlmIChpdCAhPSBtX3JlbmRlck9iamVjdFJlZ2lvblN0
eWxlLmVuZCgpKSB7Ci0gICAgICAgICAgICBvYmplY3RTdHlsZUluUmVnaW9uID0gaXQtPnNlY29u
ZC5zdHlsZTsKLSAgICAgICAgICAgIEFTU0VSVChpdC0+c2Vjb25kLmNhY2hlZCk7CisgICAgICAg
ICAgICBvYmplY3RTdHlsZUluUmVnaW9uID0gaXQtPnZhbHVlLnN0eWxlOworICAgICAgICAgICAg
QVNTRVJUKGl0LT52YWx1ZS5jYWNoZWQpOwogICAgICAgICAgICAgb2JqZWN0UmVnaW9uU3R5bGVD
YWNoZWQgPSB0cnVlOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIG9iamVjdFN0eWxlSW5S
ZWdpb24gPSBjb21wdXRlU3R5bGVJblJlZ2lvbihvYmplY3QpOwpAQCAtMzg5LDEyICszODksMTIg
QEAgdm9pZCBSZW5kZXJSZWdpb246OnJlc3RvcmVSZWdpb25PYmplY3RzT3JpZ2luYWxTdHlsZSgp
CiAKICAgICBSZW5kZXJPYmplY3RSZWdpb25TdHlsZU1hcCB0ZW1wOwogICAgIGZvciAoUmVuZGVy
T2JqZWN0UmVnaW9uU3R5bGVNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3JlbmRlck9iamVjdFJlZ2lv
blN0eWxlLmJlZ2luKCksIGVuZCA9IG1fcmVuZGVyT2JqZWN0UmVnaW9uU3R5bGUuZW5kKCk7IGl0
ZXIgIT0gZW5kOyArK2l0ZXIpIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiBvYmplY3QgPSBjb25z
dF9jYXN0PFJlbmRlck9iamVjdCo+KGl0ZXItPmZpcnN0KTsKKyAgICAgICAgUmVuZGVyT2JqZWN0
KiBvYmplY3QgPSBjb25zdF9jYXN0PFJlbmRlck9iamVjdCo+KGl0ZXItPmtleSk7CiAgICAgICAg
IFJlZlB0cjxSZW5kZXJTdHlsZT4gb2JqZWN0UmVnaW9uU3R5bGUgPSBvYmplY3QtPnN0eWxlKCk7
Ci0gICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gb2JqZWN0T3JpZ2luYWxTdHlsZSA9IGl0ZXIt
PnNlY29uZC5zdHlsZTsKKyAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBvYmplY3RPcmlnaW5h
bFN0eWxlID0gaXRlci0+dmFsdWUuc3R5bGU7CiAgICAgICAgIG9iamVjdC0+c2V0U3R5bGVJbnRl
cm5hbChvYmplY3RPcmlnaW5hbFN0eWxlKTsKIAotICAgICAgICBib29sIHNob3VsZENhY2hlUmVn
aW9uU3R5bGUgPSBpdGVyLT5zZWNvbmQuY2FjaGVkOworICAgICAgICBib29sIHNob3VsZENhY2hl
UmVnaW9uU3R5bGUgPSBpdGVyLT52YWx1ZS5jYWNoZWQ7CiAgICAgICAgIGlmICghc2hvdWxkQ2Fj
aGVSZWdpb25TdHlsZSkgewogICAgICAgICAgICAgLy8gQ2hlY2sgd2hldGhlciB3ZSBzaG91bGQg
Y2FjaGUgdGhlIGNvbXB1dGVkIHN0eWxlIGluIHJlZ2lvbi4KICAgICAgICAgICAgIHVuc2lnbmVk
IGNoYW5nZWRDb250ZXh0U2Vuc2l0aXZlUHJvcGVydGllcyA9IENvbnRleHRTZW5zaXRpdmVQcm9w
ZXJ0eU5vbmU7CkBAIC00NTEsNyArNDUxLDcgQEAgdm9pZCBSZW5kZXJSZWdpb246OmNvbXB1dGVD
aGlsZHJlblN0eWxlSW5SZWdpb24oY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCiAgICAgICAg
IFJlZlB0cjxSZW5kZXJTdHlsZT4gY2hpbGRTdHlsZUluUmVnaW9uOwogICAgICAgICBib29sIG9i
amVjdFJlZ2lvblN0eWxlQ2FjaGVkID0gZmFsc2U7CiAgICAgICAgIGlmIChpdCAhPSBtX3JlbmRl
ck9iamVjdFJlZ2lvblN0eWxlLmVuZCgpKSB7Ci0gICAgICAgICAgICBjaGlsZFN0eWxlSW5SZWdp
b24gPSBpdC0+c2Vjb25kLnN0eWxlOworICAgICAgICAgICAgY2hpbGRTdHlsZUluUmVnaW9uID0g
aXQtPnZhbHVlLnN0eWxlOwogICAgICAgICAgICAgb2JqZWN0UmVnaW9uU3R5bGVDYWNoZWQgPSB0
cnVlOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKGNoaWxkLT5pc0Fub255bW91
cygpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2Vj
dGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNw
cAppbmRleCA4ZjA4NDc3OWE5ZDE5ZTRjYTI4Y2NlYzVlZWUyNTc5MWJjM2U0ZGY2Li4zMDg2NTUx
M2U0Njc2OTIyYTNiMzBkZjZhMzg0NDc1Zjc1NDc0ZWUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcApAQCAtMTQ1MCw3ICsxNDUwLDcgQEAg
Q29sbGFwc2VkQm9yZGVyVmFsdWUmIFJlbmRlclRhYmxlU2VjdGlvbjo6Y2FjaGVkQ29sbGFwc2Vk
Qm9yZGVyKGNvbnN0IFJlbmRlclRhYmwKICAgICBBU1NFUlQodGFibGUoKS0+Y29sbGFwc2VCb3Jk
ZXJzKCkpOwogICAgIEhhc2hNYXA8cGFpcjxjb25zdCBSZW5kZXJUYWJsZUNlbGwqLCBpbnQ+LCBD
b2xsYXBzZWRCb3JkZXJWYWx1ZT46Oml0ZXJhdG9yIGl0ID0gbV9jZWxsc0NvbGxhcHNlZEJvcmRl
cnMuZmluZChtYWtlX3BhaXIoY2VsbCwgc2lkZSkpOwogICAgIEFTU0VSVChpdCAhPSBtX2NlbGxz
Q29sbGFwc2VkQm9yZGVycy5lbmQoKSk7Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgcmV0
dXJuIGl0LT52YWx1ZTsKIH0KIAogUmVuZGVyVGFibGVTZWN0aW9uKiBSZW5kZXJUYWJsZVNlY3Rp
b246OmNyZWF0ZUFub255bW91c1dpdGhQYXJlbnRSZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3Qq
IHBhcmVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQppbmRl
eCAwYmM5ODA0ZmI3NTliMTFlZDk2YTQwOTEwNmEwMTE2Nzk4YzIwNGJlLi42NDA0ZDJhZmMxNDZl
ODE1NTgwNWI5ZWFlODA4NGIyYTQwYjgxZjM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lTWFjLm1tCkBAIC0zODAsNyArMzgwLDcgQEAgQ29sb3IgUmVuZGVyVGhlbWVN
YWM6OnN5c3RlbUNvbG9yKGludCBjc3NWYWx1ZUlkKSBjb25zdAogICAgIHsKICAgICAgICAgSGFz
aE1hcDxpbnQsIFJHQkEzMj46Oml0ZXJhdG9yIGl0ID0gbV9zeXN0ZW1Db2xvckNhY2hlLmZpbmQo
Y3NzVmFsdWVJZCk7CiAgICAgICAgIGlmIChpdCAhPSBtX3N5c3RlbUNvbG9yQ2FjaGUuZW5kKCkp
Ci0gICAgICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIHJldHVybiBpdC0+
dmFsdWU7CiAgICAgfQogCiAgICAgQ29sb3IgY29sb3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVmlldy5jcHAKaW5kZXggMjU2MjVlZGFhYzRiZDc5ODEzZWE2NGUyMTk5ZjM3MzY3OWEx
YTE5OS4uYjNiZDg5YzQ0MWY5MzE5YzU3MjY5ZTVhMDljOTYxZGQwODBmNDZkMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcApAQCAtNDUzLDcgKzQ1Myw3IEBAIEludFJl
Y3QgUmVuZGVyVmlldzo6c2VsZWN0aW9uQm91bmRzKGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRlbnQp
IGNvbnN0CiAgICAgICAgICAgICBzZWxlY3RlZE9iamVjdHMuc2V0KG9zLCBhZG9wdFB0cihuZXcg
UmVuZGVyU2VsZWN0aW9uSW5mbyhvcywgY2xpcFRvVmlzaWJsZUNvbnRlbnQpKSk7CiAgICAgICAg
ICAgICBSZW5kZXJCbG9jayogY2IgPSBvcy0+Y29udGFpbmluZ0Jsb2NrKCk7CiAgICAgICAgICAg
ICB3aGlsZSAoY2IgJiYgIWNiLT5pc1JlbmRlclZpZXcoKSkgewotICAgICAgICAgICAgICAgIE93
blB0cjxSZW5kZXJTZWxlY3Rpb25JbmZvPiYgYmxvY2tJbmZvID0gc2VsZWN0ZWRPYmplY3RzLmFk
ZChjYiwgbnVsbHB0cikuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgICAgICAgICBPd25QdHI8
UmVuZGVyU2VsZWN0aW9uSW5mbz4mIGJsb2NrSW5mbyA9IHNlbGVjdGVkT2JqZWN0cy5hZGQoY2Is
IG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgICAgICAgICBpZiAoYmxvY2tJbmZv
KQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBibG9ja0luZm8g
PSBhZG9wdFB0cihuZXcgUmVuZGVyU2VsZWN0aW9uSW5mbyhjYiwgY2xpcFRvVmlzaWJsZUNvbnRl
bnQpKTsKQEAgLTQ2OCw3ICs0NjgsNyBAQCBJbnRSZWN0IFJlbmRlclZpZXc6OnNlbGVjdGlvbkJv
dW5kcyhib29sIGNsaXBUb1Zpc2libGVDb250ZW50KSBjb25zdAogICAgIExheW91dFJlY3Qgc2Vs
UmVjdDsKICAgICBTZWxlY3Rpb25NYXA6Oml0ZXJhdG9yIGVuZCA9IHNlbGVjdGVkT2JqZWN0cy5l
bmQoKTsKICAgICBmb3IgKFNlbGVjdGlvbk1hcDo6aXRlcmF0b3IgaSA9IHNlbGVjdGVkT2JqZWN0
cy5iZWdpbigpOyBpICE9IGVuZDsgKytpKSB7Ci0gICAgICAgIFJlbmRlclNlbGVjdGlvbkluZm8q
IGluZm8gPSBpLT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIFJlbmRlclNlbGVjdGlvbkluZm8qIGlu
Zm8gPSBpLT52YWx1ZS5nZXQoKTsKICAgICAgICAgLy8gUmVuZGVyU2VsZWN0aW9uSW5mbzo6cmVj
dCgpIGlzIGluIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgcmVwYWludENvbnRhaW5lciwgc28gbWFw
IHRvIHBhZ2UgY29vcmRpbmF0ZXMuCiAgICAgICAgIExheW91dFJlY3QgY3VyclJlY3QgPSBpbmZv
LT5yZWN0KCk7CiAgICAgICAgIGlmIChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRh
aW5lciA9IGluZm8tPnJlcGFpbnRDb250YWluZXIoKSkgewpAQCAtNTMzLDcgKzUzMyw3IEBAIHZv
aWQgUmVuZGVyVmlldzo6c2V0U2VsZWN0aW9uKFJlbmRlck9iamVjdCogc3RhcnQsIGludCBzdGFy
dFBvcywgUmVuZGVyT2JqZWN0KiBlCiAgICAgICAgICAgICBpZiAoYmxvY2tSZXBhaW50TW9kZSA9
PSBSZXBhaW50TmV3WE9ST2xkKSB7CiAgICAgICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGNiID0g
b3MtPmNvbnRhaW5pbmdCbG9jaygpOwogICAgICAgICAgICAgICAgIHdoaWxlIChjYiAmJiAhY2It
PmlzUmVuZGVyVmlldygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIE93blB0cjxSZW5kZXJCbG9j
a1NlbGVjdGlvbkluZm8+JiBibG9ja0luZm8gPSBvbGRTZWxlY3RlZEJsb2Nrcy5hZGQoY2IsIG51
bGxwdHIpLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgICAgICAgICAgICAgIE93blB0cjxSZW5k
ZXJCbG9ja1NlbGVjdGlvbkluZm8+JiBibG9ja0luZm8gPSBvbGRTZWxlY3RlZEJsb2Nrcy5hZGQo
Y2IsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGJs
b2NrSW5mbykKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
ICAgICBibG9ja0luZm8gPSBhZG9wdFB0cihuZXcgUmVuZGVyQmxvY2tTZWxlY3Rpb25JbmZvKGNi
KSk7CkBAIC01NDgsNyArNTQ4LDcgQEAgdm9pZCBSZW5kZXJWaWV3OjpzZXRTZWxlY3Rpb24oUmVu
ZGVyT2JqZWN0KiBzdGFydCwgaW50IHN0YXJ0UG9zLCBSZW5kZXJPYmplY3QqIGUKICAgICAvLyBO
b3cgY2xlYXIgdGhlIHNlbGVjdGlvbi4KICAgICBTZWxlY3RlZE9iamVjdE1hcDo6aXRlcmF0b3Ig
b2xkT2JqZWN0c0VuZCA9IG9sZFNlbGVjdGVkT2JqZWN0cy5lbmQoKTsKICAgICBmb3IgKFNlbGVj
dGVkT2JqZWN0TWFwOjppdGVyYXRvciBpID0gb2xkU2VsZWN0ZWRPYmplY3RzLmJlZ2luKCk7IGkg
IT0gb2xkT2JqZWN0c0VuZDsgKytpKQotICAgICAgICBpLT5maXJzdC0+c2V0U2VsZWN0aW9uU3Rh
dGVJZk5lZWRlZChTZWxlY3Rpb25Ob25lKTsKKyAgICAgICAgaS0+a2V5LT5zZXRTZWxlY3Rpb25T
dGF0ZUlmTmVlZGVkKFNlbGVjdGlvbk5vbmUpOwogCiAgICAgLy8gc2V0IHNlbGVjdGlvbiBzdGFy
dCBhbmQgZW5kCiAgICAgbV9zZWxlY3Rpb25TdGFydCA9IHN0YXJ0OwpAQCAtNTg2LDcgKzU4Niw3
IEBAIHZvaWQgUmVuZGVyVmlldzo6c2V0U2VsZWN0aW9uKFJlbmRlck9iamVjdCogc3RhcnQsIGlu
dCBzdGFydFBvcywgUmVuZGVyT2JqZWN0KiBlCiAgICAgICAgICAgICBuZXdTZWxlY3RlZE9iamVj
dHMuc2V0KG8sIGFkb3B0UHRyKG5ldyBSZW5kZXJTZWxlY3Rpb25JbmZvKG8sIHRydWUpKSk7CiAg
ICAgICAgICAgICBSZW5kZXJCbG9jayogY2IgPSBvLT5jb250YWluaW5nQmxvY2soKTsKICAgICAg
ICAgICAgIHdoaWxlIChjYiAmJiAhY2ItPmlzUmVuZGVyVmlldygpKSB7Ci0gICAgICAgICAgICAg
ICAgT3duUHRyPFJlbmRlckJsb2NrU2VsZWN0aW9uSW5mbz4mIGJsb2NrSW5mbyA9IG5ld1NlbGVj
dGVkQmxvY2tzLmFkZChjYiwgbnVsbHB0cikuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgICAg
ICAgICBPd25QdHI8UmVuZGVyQmxvY2tTZWxlY3Rpb25JbmZvPiYgYmxvY2tJbmZvID0gbmV3U2Vs
ZWN0ZWRCbG9ja3MuYWRkKGNiLCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgICAg
ICAgICAgaWYgKGJsb2NrSW5mbykKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgYmxvY2tJbmZvID0gYWRvcHRQdHIobmV3IFJlbmRlckJsb2NrU2VsZWN0aW9uSW5m
byhjYikpOwpAQCAtNjA0LDkgKzYwNCw5IEBAIHZvaWQgUmVuZGVyVmlldzo6c2V0U2VsZWN0aW9u
KFJlbmRlck9iamVjdCogc3RhcnQsIGludCBzdGFydFBvcywgUmVuZGVyT2JqZWN0KiBlCiAKICAg
ICAvLyBIYXZlIGFueSBvZiB0aGUgb2xkIHNlbGVjdGVkIG9iamVjdHMgY2hhbmdlZCBjb21wYXJl
ZCB0byB0aGUgbmV3IHNlbGVjdGlvbj8KICAgICBmb3IgKFNlbGVjdGVkT2JqZWN0TWFwOjppdGVy
YXRvciBpID0gb2xkU2VsZWN0ZWRPYmplY3RzLmJlZ2luKCk7IGkgIT0gb2xkT2JqZWN0c0VuZDsg
KytpKSB7Ci0gICAgICAgIFJlbmRlck9iamVjdCogb2JqID0gaS0+Zmlyc3Q7CisgICAgICAgIFJl
bmRlck9iamVjdCogb2JqID0gaS0+a2V5OwogICAgICAgICBSZW5kZXJTZWxlY3Rpb25JbmZvKiBu
ZXdJbmZvID0gbmV3U2VsZWN0ZWRPYmplY3RzLmdldChvYmopOwotICAgICAgICBSZW5kZXJTZWxl
Y3Rpb25JbmZvKiBvbGRJbmZvID0gaS0+c2Vjb25kLmdldCgpOworICAgICAgICBSZW5kZXJTZWxl
Y3Rpb25JbmZvKiBvbGRJbmZvID0gaS0+dmFsdWUuZ2V0KCk7CiAgICAgICAgIGlmICghbmV3SW5m
byB8fCBvbGRJbmZvLT5yZWN0KCkgIT0gbmV3SW5mby0+cmVjdCgpIHx8IG9sZEluZm8tPnN0YXRl
KCkgIT0gbmV3SW5mby0+c3RhdGUoKSB8fAogICAgICAgICAgICAgKG1fc2VsZWN0aW9uU3RhcnQg
PT0gb2JqICYmIG9sZFN0YXJ0UG9zICE9IG1fc2VsZWN0aW9uU3RhcnRQb3MpIHx8CiAgICAgICAg
ICAgICAobV9zZWxlY3Rpb25FbmQgPT0gb2JqICYmIG9sZEVuZFBvcyAhPSBtX3NlbGVjdGlvbkVu
ZFBvcykpIHsKQEAgLTYyMSwxNCArNjIxLDE0IEBAIHZvaWQgUmVuZGVyVmlldzo6c2V0U2VsZWN0
aW9uKFJlbmRlck9iamVjdCogc3RhcnQsIGludCBzdGFydFBvcywgUmVuZGVyT2JqZWN0KiBlCiAg
ICAgLy8gQW55IG5ldyBvYmplY3RzIHRoYXQgcmVtYWluIHdlcmUgbm90IGZvdW5kIGluIHRoZSBv
bGQgb2JqZWN0cyBkaWN0LCBhbmQgc28gdGhleSBuZWVkIHRvIGJlIHVwZGF0ZWQuCiAgICAgU2Vs
ZWN0ZWRPYmplY3RNYXA6Oml0ZXJhdG9yIG5ld09iamVjdHNFbmQgPSBuZXdTZWxlY3RlZE9iamVj
dHMuZW5kKCk7CiAgICAgZm9yIChTZWxlY3RlZE9iamVjdE1hcDo6aXRlcmF0b3IgaSA9IG5ld1Nl
bGVjdGVkT2JqZWN0cy5iZWdpbigpOyBpICE9IG5ld09iamVjdHNFbmQ7ICsraSkKLSAgICAgICAg
aS0+c2Vjb25kLT5yZXBhaW50KCk7CisgICAgICAgIGktPnZhbHVlLT5yZXBhaW50KCk7CiAKICAg
ICAvLyBIYXZlIGFueSBvZiB0aGUgb2xkIGJsb2NrcyBjaGFuZ2VkPwogICAgIFNlbGVjdGVkQmxv
Y2tNYXA6Oml0ZXJhdG9yIG9sZEJsb2Nrc0VuZCA9IG9sZFNlbGVjdGVkQmxvY2tzLmVuZCgpOwog
ICAgIGZvciAoU2VsZWN0ZWRCbG9ja01hcDo6aXRlcmF0b3IgaSA9IG9sZFNlbGVjdGVkQmxvY2tz
LmJlZ2luKCk7IGkgIT0gb2xkQmxvY2tzRW5kOyArK2kpIHsKLSAgICAgICAgUmVuZGVyQmxvY2sq
IGJsb2NrID0gaS0+Zmlyc3Q7CisgICAgICAgIFJlbmRlckJsb2NrKiBibG9jayA9IGktPmtleTsK
ICAgICAgICAgUmVuZGVyQmxvY2tTZWxlY3Rpb25JbmZvKiBuZXdJbmZvID0gbmV3U2VsZWN0ZWRC
bG9ja3MuZ2V0KGJsb2NrKTsKLSAgICAgICAgUmVuZGVyQmxvY2tTZWxlY3Rpb25JbmZvKiBvbGRJ
bmZvID0gaS0+c2Vjb25kLmdldCgpOworICAgICAgICBSZW5kZXJCbG9ja1NlbGVjdGlvbkluZm8q
IG9sZEluZm8gPSBpLT52YWx1ZS5nZXQoKTsKICAgICAgICAgaWYgKCFuZXdJbmZvIHx8IG9sZElu
Zm8tPnJlY3RzKCkgIT0gbmV3SW5mby0+cmVjdHMoKSB8fCBvbGRJbmZvLT5zdGF0ZSgpICE9IG5l
d0luZm8tPnN0YXRlKCkpIHsKICAgICAgICAgICAgIG9sZEluZm8tPnJlcGFpbnQoKTsKICAgICAg
ICAgICAgIGlmIChuZXdJbmZvKSB7CkBAIC02NDEsNyArNjQxLDcgQEAgdm9pZCBSZW5kZXJWaWV3
OjpzZXRTZWxlY3Rpb24oUmVuZGVyT2JqZWN0KiBzdGFydCwgaW50IHN0YXJ0UG9zLCBSZW5kZXJP
YmplY3QqIGUKICAgICAvLyBBbnkgbmV3IGJsb2NrcyB0aGF0IHJlbWFpbiB3ZXJlIG5vdCBmb3Vu
ZCBpbiB0aGUgb2xkIGJsb2NrcyBkaWN0LCBhbmQgc28gdGhleSBuZWVkIHRvIGJlIHVwZGF0ZWQu
CiAgICAgU2VsZWN0ZWRCbG9ja01hcDo6aXRlcmF0b3IgbmV3QmxvY2tzRW5kID0gbmV3U2VsZWN0
ZWRCbG9ja3MuZW5kKCk7CiAgICAgZm9yIChTZWxlY3RlZEJsb2NrTWFwOjppdGVyYXRvciBpID0g
bmV3U2VsZWN0ZWRCbG9ja3MuYmVnaW4oKTsgaSAhPSBuZXdCbG9ja3NFbmQ7ICsraSkKLSAgICAg
ICAgaS0+c2Vjb25kLT5yZXBhaW50KCk7CisgICAgICAgIGktPnZhbHVlLT5yZXBhaW50KCk7CiAK
ICAgICBtX2ZyYW1lVmlldy0+ZW5kRGVmZXJyZWRSZXBhaW50cygpOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcAppbmRleCA5NTM3ZWRmNWQyMDg3ZDg1YjM1ZDZm
ZWM1ZWFmZDc4NmJiZWYwZTU1Li40ZWNlY2RjOWJkNDk3NmQyM2E4ODNhZDYzMWNlYTMxYTJkMzA2
NDE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcApAQCAtNzAs
OSArNzAsOSBAQCB2b2lkIFJlbmRlcldpZGdldDo6cmVzdW1lV2lkZ2V0SGllcmFyY2h5VXBkYXRl
cygpCiAgICAgICAgIHdpZGdldE5ld1BhcmVudE1hcCgpLmNsZWFyKCk7CiAgICAgICAgIFdpZGdl
dFRvUGFyZW50TWFwOjppdGVyYXRvciBlbmQgPSBtYXAuZW5kKCk7CiAgICAgICAgIGZvciAoV2lk
Z2V0VG9QYXJlbnRNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgewotICAgICAgICAgICAgV2lkZ2V0KiBjaGlsZCA9IGl0LT5maXJzdC5nZXQoKTsKKyAgICAg
ICAgICAgIFdpZGdldCogY2hpbGQgPSBpdC0+a2V5LmdldCgpOwogICAgICAgICAgICAgU2Nyb2xs
VmlldyogY3VycmVudFBhcmVudCA9IGNoaWxkLT5wYXJlbnQoKTsKLSAgICAgICAgICAgIEZyYW1l
VmlldyogbmV3UGFyZW50ID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIEZyYW1lVmlldyogbmV3
UGFyZW50ID0gaXQtPnZhbHVlOwogICAgICAgICAgICAgaWYgKG5ld1BhcmVudCAhPSBjdXJyZW50
UGFyZW50KSB7CiAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRQYXJlbnQpCiAgICAgICAgICAg
ICAgICAgICAgIGN1cnJlbnRQYXJlbnQtPnJlbW92ZUNoaWxkKGNoaWxkKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAppbmRleCA5MjhmZTY2N2U0MzNiMjM3MmZi
NWMwN2E0ZTc5NThlN2U1Y2QzMGY4Li5lMjVlM2ViNDhmMjZjNmI2OGNiZGQ5Nzg5YmQ1N2Q1YjM1
MGYwMzIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJv
eC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCkBA
IC03NTUsOCArNzU1LDggQEAgdm9pZCBSb290SW5saW5lQm94Ojphc2NlbnRBbmREZXNjZW50Rm9y
Qm94KElubGluZUJveCogYm94LCBHbHlwaE92ZXJmbG93QW5kRmFsbGIKICAgICBHbHlwaE92ZXJm
bG93KiBnbHlwaE92ZXJmbG93ID0gMDsKICAgICBpZiAoYm94LT5pc1RleHQoKSkgewogICAgICAg
ICBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcDo6aXRlcmF0b3IgaXQgPSB0ZXh0Qm94
RGF0YU1hcC5maW5kKHRvSW5saW5lVGV4dEJveChib3gpKTsKLSAgICAgICAgdXNlZEZvbnRzID0g
aXQgPT0gdGV4dEJveERhdGFNYXAuZW5kKCkgPyAwIDogJml0LT5zZWNvbmQuZmlyc3Q7Ci0gICAg
ICAgIGdseXBoT3ZlcmZsb3cgPSBpdCA9PSB0ZXh0Qm94RGF0YU1hcC5lbmQoKSA/IDAgOiAmaXQt
PnNlY29uZC5zZWNvbmQ7CisgICAgICAgIHVzZWRGb250cyA9IGl0ID09IHRleHRCb3hEYXRhTWFw
LmVuZCgpID8gMCA6ICZpdC0+dmFsdWUuZmlyc3Q7CisgICAgICAgIGdseXBoT3ZlcmZsb3cgPSBp
dCA9PSB0ZXh0Qm94RGF0YU1hcC5lbmQoKSA/IDAgOiAmaXQtPnZhbHVlLnNlY29uZDsKICAgICB9
CiAgICAgICAgIAogICAgIGJvb2wgaW5jbHVkZUxlYWRpbmcgPSBpbmNsdWRlTGVhZGluZ0ZvckJv
eChib3gpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1ZlcnRpY2FsUG9z
aXRpb25DYWNoZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1ZlcnRpY2FsUG9zaXRpb25D
YWNoZS5oCmluZGV4IGJiMzk4Nzc3MjFkYTcwNWMzN2JkM2I4ODE5MDI0Y2QyN2UzNmU1Y2UuLmI3
Y2Q3ZTA4NWU3ZjliZWRiNTI4ZjYyZGVlZjU3YTdiYjhhYTViZTEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9WZXJ0aWNhbFBvc2l0aW9uQ2FjaGUuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvVmVydGljYWxQb3NpdGlvbkNhY2hlLmgKQEAgLTQ4LDcgKzQ4LDcg
QEAgcHVibGljOgogICAgICAgICBjb25zdCBIYXNoTWFwPFJlbmRlck9iamVjdCosIGludD46OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbWFwVG9DaGVjay5maW5kKHJlbmRlcmVyKTsKICAgICAgICAgaWYg
KGl0ID09IG1hcFRvQ2hlY2suZW5kKCkpCiAgICAgICAgICAgICByZXR1cm4gUG9zaXRpb25VbmRl
ZmluZWQ7Ci0gICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gaXQtPnZh
bHVlOwogICAgIH0KICAgICAKICAgICB2b2lkIHNldChSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBG
b250QmFzZWxpbmUgYmFzZWxpbmVUeXBlLCBpbnQgcG9zaXRpb24pCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvV3JhcFNoYXBlSW5mby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvV3JhcFNoYXBlSW5mby5jcHAKaW5kZXggMGExNmNjNTFmNDljNzQzMmU2OGRjODky
MzQyYjkxZDE2MTg1YTlkZS4uZWIwYjE0ZjUxYzYzYWQ0NGQ1YjFiMDEwOGI5ZmI1YTlkZmEwZjI1
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1dyYXBTaGFwZUluZm8uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9XcmFwU2hhcGVJbmZvLmNwcApAQCAtNjAs
NyArNjAsNyBAQCBXcmFwU2hhcGVJbmZvOjp+V3JhcFNoYXBlSW5mbygpCiBXcmFwU2hhcGVJbmZv
KiBXcmFwU2hhcGVJbmZvOjplbnN1cmVXcmFwU2hhcGVJbmZvRm9yUmVuZGVyQmxvY2soUmVuZGVy
QmxvY2sqIGJsb2NrKQogewogICAgIFdyYXBTaGFwZUluZm9NYXA6OkFkZFJlc3VsdCByZXN1bHQg
PSB3cmFwU2hhcGVJbmZvTWFwKCkuYWRkKGJsb2NrLCBjcmVhdGUoYmxvY2spKTsKLSAgICByZXR1
cm4gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQuZ2V0KCk7CisgICAgcmV0dXJuIHJlc3VsdC5pdGVy
YXRvci0+dmFsdWUuZ2V0KCk7CiB9CiAKIFdyYXBTaGFwZUluZm8qIFdyYXBTaGFwZUluZm86Ondy
YXBTaGFwZUluZm9Gb3JSZW5kZXJCbG9jayhjb25zdCBSZW5kZXJCbG9jayogYmxvY2spCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNw
cAppbmRleCA0NTRmN2FhNmQwN2I2YmQzMTIzMjM2YmVmY2E0OTllY2ZlNWEwN2EwLi4yMzcxZDFh
YmY5Yzk2YmE0YTQ2MjhiOTNjYTQ5NDJhZjdhMDdiOTVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAKQEAgLTE1OCw3ICsx
NTgsNyBAQCBib29sIFJlbmRlclNWR0lubGluZVRleHQ6OmNoYXJhY3RlclN0YXJ0c05ld1RleHRD
aHVuayhpbnQgcG9zaXRpb24pIGNvbnN0CiAgICAgaWYgKGl0ID09IG1fbGF5b3V0QXR0cmlidXRl
cy5jaGFyYWN0ZXJEYXRhTWFwKCkuZW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IHJldHVybiBpdC0+c2Vjb25kLnggIT0gU1ZHVGV4dExheW91dEF0dHJpYnV0ZXM6OmVtcHR5VmFs
dWUoKSB8fCBpdC0+c2Vjb25kLnkgIT0gU1ZHVGV4dExheW91dEF0dHJpYnV0ZXM6OmVtcHR5VmFs
dWUoKTsKKyAgICByZXR1cm4gaXQtPnZhbHVlLnggIT0gU1ZHVGV4dExheW91dEF0dHJpYnV0ZXM6
OmVtcHR5VmFsdWUoKSB8fCBpdC0+dmFsdWUueSAhPSBTVkdUZXh0TGF5b3V0QXR0cmlidXRlczo6
ZW1wdHlWYWx1ZSgpOwogfQogCiBWaXNpYmxlUG9zaXRpb24gUmVuZGVyU1ZHSW5saW5lVGV4dDo6
cG9zaXRpb25Gb3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3Bw
CmluZGV4IGVlNmE0OWRiODhhOWZkNmM3NzA1ZmExOGI2ZWVjYTg4MTZlMWEyZWIuLjM4MzJiMmIw
MWUzMDUwYTVmODQzYzY1ZjFjZGRjYjBlYzE1M2E5NjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCkBAIC0z
MzgsNyArMzM4LDcgQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cHJpbWl0aXZlQXR0
cmlidXRlQ2hhbmdlZChSZW5kZXJPYmplY3QqIG9iamVjdCwgY28KICAgICBTVkdGaWx0ZXJQcmlt
aXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMqIHByaW1pdHZlID0gc3RhdGljX2Nhc3Q8U1ZHRmlsdGVy
UHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKj4ob2JqZWN0LT5ub2RlKCkpOwogCiAgICAgZm9y
ICg7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBGaWx0ZXJEYXRhKiBmaWx0ZXJEYXRhID0g
aXQtPnNlY29uZDsKKyAgICAgICAgRmlsdGVyRGF0YSogZmlsdGVyRGF0YSA9IGl0LT52YWx1ZTsK
ICAgICAgICAgaWYgKCFmaWx0ZXJEYXRhLT5idWlsZGVkKQogICAgICAgICAgICAgY29udGludWU7
CiAKQEAgLTM1Myw3ICszNTMsNyBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwcmlt
aXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKFJlbmRlck9iamVjdCogb2JqZWN0LCBjbwogICAgICAgICBi
dWlsZGVyLT5jbGVhclJlc3VsdHNSZWN1cnNpdmUoZWZmZWN0KTsKIAogICAgICAgICAvLyBSZXBh
aW50IHRoZSBpbWFnZSBvbiB0aGUgc2NyZWVuLgotICAgICAgICBtYXJrQ2xpZW50Rm9ySW52YWxp
ZGF0aW9uKGl0LT5maXJzdCwgUmVwYWludEludmFsaWRhdGlvbik7CisgICAgICAgIG1hcmtDbGll
bnRGb3JJbnZhbGlkYXRpb24oaXQtPmtleSwgUmVwYWludEludmFsaWRhdGlvbik7CiAgICAgfQog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlR3JhZGllbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZUdyYWRpZW50LmNwcAppbmRleCA1OGUwMDc5YjIyY2IyYzVjMTdkOGYyZDRkNzNj
YmJhMjEwYWE5YTVlLi4zMGNlMWI4Y2I0Zjk3OGMwMGRjYmRhMTdkZmI1NTcyM2NmYzU4MDgxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
R3JhZGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VHcmFkaWVudC5jcHAKQEAgLTE0MCw3ICsxNDAsNyBAQCBib29sIFJlbmRlclNWR1Jl
c291cmNlR3JhZGllbnQ6OmFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiBvYmplY3QsIFJlbmRl
clN0eWxlKgogICAgIGlmIChncmFkaWVudFVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5J
VF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YICYmIG9iamVjdEJvdW5kaW5nQm94LmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgT3duUHRyPEdyYWRpZW50RGF0YT4mIGdyYWRp
ZW50RGF0YSA9IG1fZ3JhZGllbnRNYXAuYWRkKG9iamVjdCwgbnVsbHB0cikuaXRlcmF0b3ItPnNl
Y29uZDsKKyAgICBPd25QdHI8R3JhZGllbnREYXRhPiYgZ3JhZGllbnREYXRhID0gbV9ncmFkaWVu
dE1hcC5hZGQob2JqZWN0LCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCFncmFk
aWVudERhdGEpCiAgICAgICAgIGdyYWRpZW50RGF0YSA9IGFkb3B0UHRyKG5ldyBHcmFkaWVudERh
dGEpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlUGF0dGVybi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlUGF0dGVybi5jcHAKaW5kZXggYjRhZjk5OTE4NTUyYTE1NDg1MmJiMmE0YjQ3
YjAzMGVkYTZhNTMxNi4uM2ExODgyYWNmODIxNzIyODZiMjNiYjU0MmJlNDA2NmEzYmFjY2NjNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZVBhdHRlcm4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VQYXR0ZXJuLmNwcApAQCAtODQsNyArODQsNyBAQCBib29sIFJlbmRlclNWR1Jlc291
cmNlUGF0dGVybjo6YXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqIG9iamVjdCwgUmVuZGVyU3R5
bGUqCiAgICAgaWYgKG1fYXR0cmlidXRlcy5wYXR0ZXJuVW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6
OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1ggJiYgb2JqZWN0Qm91bmRpbmdCb3guaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBPd25QdHI8UGF0dGVybkRhdGE+
JiBwYXR0ZXJuRGF0YSA9IG1fcGF0dGVybk1hcC5hZGQob2JqZWN0LCBudWxscHRyKS5pdGVyYXRv
ci0+c2Vjb25kOworICAgIE93blB0cjxQYXR0ZXJuRGF0YT4mIHBhdHRlcm5EYXRhID0gbV9wYXR0
ZXJuTWFwLmFkZChvYmplY3QsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoIXBh
dHRlcm5EYXRhKQogICAgICAgICBwYXR0ZXJuRGF0YSA9IGFkb3B0UHRyKG5ldyBQYXR0ZXJuRGF0
YSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVzb3Vy
Y2VzQ2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXND
YWNoZS5jcHAKaW5kZXggMjk3YzA3YjZhZDQwOWEyN2U2MzU4NTYwMDBjOWFkNGI5MDViNDM1NC4u
OGI0OGNmNTNlNzk5YTBiN2RlMmI1NGE0YzcxNTJlMDkyNzUzOWMwMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXNDYWNoZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXNDYWNoZS5jcHAKQEAgLTE5OCwx
MSArMTk4LDExIEBAIHZvaWQgU1ZHUmVzb3VyY2VzQ2FjaGU6OnJlc291cmNlRGVzdHJveWVkKFJl
bmRlclNWR1Jlc291cmNlQ29udGFpbmVyKiByZXNvdXJjZSkKIAogICAgIEhhc2hNYXA8Y29uc3Qg
UmVuZGVyT2JqZWN0KiwgU1ZHUmVzb3VyY2VzKj46Oml0ZXJhdG9yIGVuZCA9IGNhY2hlLT5tX2Nh
Y2hlLmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDxjb25zdCBSZW5kZXJPYmplY3QqLCBTVkdSZXNv
dXJjZXMqPjo6aXRlcmF0b3IgaXQgPSBjYWNoZS0+bV9jYWNoZS5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKLSAgICAgICAgaXQtPnNlY29uZC0+cmVzb3VyY2VEZXN0cm95ZWQocmVzb3VyY2Up
OworICAgICAgICBpdC0+dmFsdWUtPnJlc291cmNlRGVzdHJveWVkKHJlc291cmNlKTsKIAogICAg
ICAgICAvLyBNYXJrIHVzZXJzIG9mIGRlc3Ryb3llZCByZXNvdXJjZXMgYXMgcGVuZGluZyByZXNv
bHV0aW9uIGJhc2VkIG9uIHRoZSBpZCBvZiB0aGUgb2xkIHJlc291cmNlLgogICAgICAgICBFbGVt
ZW50KiByZXNvdXJjZUVsZW1lbnQgPSB0b0VsZW1lbnQocmVzb3VyY2UtPm5vZGUoKSk7Ci0gICAg
ICAgIFNWR1N0eWxlZEVsZW1lbnQqIGNsaWVudEVsZW1lbnQgPSB0b1NWR1N0eWxlZEVsZW1lbnQo
aXQtPmZpcnN0LT5ub2RlKCkpOworICAgICAgICBTVkdTdHlsZWRFbGVtZW50KiBjbGllbnRFbGVt
ZW50ID0gdG9TVkdTdHlsZWRFbGVtZW50KGl0LT5rZXktPm5vZGUoKSk7CiAgICAgICAgIFNWR0Rv
Y3VtZW50RXh0ZW5zaW9ucyogZXh0ZW5zaW9ucyA9IGNsaWVudEVsZW1lbnQtPmRvY3VtZW50KCkt
PmFjY2Vzc1NWR0V4dGVuc2lvbnMoKTsKIAogICAgICAgICBleHRlbnNpb25zLT5hZGRQZW5kaW5n
UmVzb3VyY2UocmVzb3VyY2VFbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKEhUTUxOYW1lczo6aWRB
dHRyKSwgY2xpZW50RWxlbWVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1Jvb3RJbmxpbmVCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdSb290SW5saW5lQm94LmNwcAppbmRleCAzNGU5M2EwMmVmNzQzMmUzYzI2ZWYyMzYwZDFj
ZjNmZDQzN2U0MTZlLi41NDZmZWMyNmNlNjk4MWFjZDFmY2Q3YWJlMGEwYTk4MzhjNzBiNDNjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jvb3RJbmxpbmVCb3gu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUm9vdElubGluZUJveC5j
cHAKQEAgLTIyNiwxNyArMjI2LDE3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzd2FwSXRlbXNJbkxh
eW91dEF0dHJpYnV0ZXMoU1ZHVGV4dExheW91dEF0dHJpYnV0ZXMqIGZpcnN0QXR0CiAgICAgICAg
IHJldHVybjsKIAogICAgIGlmIChmaXJzdFByZXNlbnQgJiYgbGFzdFByZXNlbnQpIHsKLSAgICAg
ICAgc3RkOjpzd2FwKGl0Rmlyc3QtPnNlY29uZCwgaXRMYXN0LT5zZWNvbmQpOworICAgICAgICBz
dGQ6OnN3YXAoaXRGaXJzdC0+dmFsdWUsIGl0TGFzdC0+dmFsdWUpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCiAgICAgaWYgKGZpcnN0UHJlc2VudCAmJiAhbGFzdFByZXNlbnQpIHsKLSAgICAg
ICAgbGFzdEF0dHJpYnV0ZXMtPmNoYXJhY3RlckRhdGFNYXAoKS5zZXQobGFzdFBvc2l0aW9uICsg
MSwgaXRGaXJzdC0+c2Vjb25kKTsKKyAgICAgICAgbGFzdEF0dHJpYnV0ZXMtPmNoYXJhY3RlckRh
dGFNYXAoKS5zZXQobGFzdFBvc2l0aW9uICsgMSwgaXRGaXJzdC0+dmFsdWUpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCiAgICAgLy8gIWZpcnN0UHJlc2VudCAmJiBsYXN0UHJlc2VudAotICAg
IGZpcnN0QXR0cmlidXRlcy0+Y2hhcmFjdGVyRGF0YU1hcCgpLnNldChmaXJzdFBvc2l0aW9uICsg
MSwgaXRMYXN0LT5zZWNvbmQpOworICAgIGZpcnN0QXR0cmlidXRlcy0+Y2hhcmFjdGVyRGF0YU1h
cCgpLnNldChmaXJzdFBvc2l0aW9uICsgMSwgaXRMYXN0LT52YWx1ZSk7CiB9CiAKIHN0YXRpYyBp
bmxpbmUgdm9pZCBmaW5kRmlyc3RBbmRMYXN0QXR0cmlidXRlc0luVmVjdG9yKFZlY3RvcjxTVkdU
ZXh0TGF5b3V0QXR0cmlidXRlcyo+JiBhdHRyaWJ1dGVzLCBSZW5kZXJTVkdJbmxpbmVUZXh0KiBm
aXJzdENvbnRleHQsIFJlbmRlclNWR0lubGluZVRleHQqIGxhc3RDb250ZXh0LApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRlcy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1dGVz
LmNwcAppbmRleCBhOTI1OTZjZWVlZGJlMjVhZjc3N2RmNGE0YzgzY2QzZWY5N2I5Y2U4Li42N2Zh
MGZhOTgyYWQ2MGJhNzI2NTFhODQ1NDk1ODFmN2ViNTBjZDBhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1dGVzLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1dGVzLmNwcApA
QCAtNjIsOCArNjIsOCBAQCB2b2lkIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzOjpkdW1wKCkgY29u
c3QKICAgICBmcHJpbnRmKHN0ZGVyciwgImNvbnRleHQ6ICVwXG4iLCBtX2NvbnRleHQpOwogICAg
IGNvbnN0IFNWR0NoYXJhY3RlckRhdGFNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fY2hhcmFj
dGVyRGF0YU1hcC5lbmQoKTsKICAgICBmb3IgKFNWR0NoYXJhY3RlckRhdGFNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbV9jaGFyYWN0ZXJEYXRhTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewotICAgICAgICBjb25zdCBTVkdDaGFyYWN0ZXJEYXRhJiBkYXRhID0gaXQtPnNlY29uZDsKLSAg
ICAgICAgZnByaW50ZihzdGRlcnIsICIgLS0tPiBwb3M9JWksIGRhdGE9eyIsIGl0LT5maXJzdCk7
CisgICAgICAgIGNvbnN0IFNWR0NoYXJhY3RlckRhdGEmIGRhdGEgPSBpdC0+dmFsdWU7CisgICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiIC0tLT4gcG9zPSVpLCBkYXRhPXsiLCBpdC0+a2V5KTsKICAg
ICAgICAgZHVtcFNWR0NoYXJhY3RlckRhdGFNYXBWYWx1ZSgieCIsIGRhdGEueCk7CiAgICAgICAg
IGR1bXBTVkdDaGFyYWN0ZXJEYXRhTWFwVmFsdWUoInkiLCBkYXRhLnkpOwogICAgICAgICBkdW1w
U1ZHQ2hhcmFjdGVyRGF0YU1hcFZhbHVlKCJkeCIsIGRhdGEuZHgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRl
c0J1aWxkZXIuY3BwCmluZGV4IGJlMmExMmZlOTYwYjc5MjQ4MzEzZGYzNjk5MTQ1MDNmZWU5YTI5
MWIuLmI5NjlhNTMxOWU4MGFjNzg3MmE1ZTQxZDhkZTc3NDMwNDhiZGM0M2IgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWls
ZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRB
dHRyaWJ1dGVzQnVpbGRlci5jcHAKQEAgLTE0OSw3ICsxNDksNyBAQCB2b2lkIFNWR1RleHRMYXlv
dXRBdHRyaWJ1dGVzQnVpbGRlcjo6YnVpbGRDaGFyYWN0ZXJEYXRhTWFwKFJlbmRlclNWR1RleHQq
IHRleHRSbwogICAgICAgICBkYXRhLnkgPSAwOwogICAgICAgICBtX2NoYXJhY3RlckRhdGFNYXAu
c2V0KDEsIGRhdGEpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIFNWR0NoYXJhY3RlckRhdGEmIGRh
dGEgPSBpdC0+c2Vjb25kOworICAgICAgICBTVkdDaGFyYWN0ZXJEYXRhJiBkYXRhID0gaXQtPnZh
bHVlOwogICAgICAgICBpZiAoZGF0YS54ID09IFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzOjplbXB0
eVZhbHVlKCkpCiAgICAgICAgICAgICBkYXRhLnggPSAwOwogICAgICAgICBpZiAoZGF0YS55ID09
IFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzOjplbXB0eVZhbHVlKCkpCkBAIC0yMTMsNyArMjEzLDcg
QEAgdm9pZCBTVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXI6OmZpbGxDaGFyYWN0ZXJEYXRh
TWFwKGNvbnN0IFRleHRQb3NpdGlvbiYgcG8KICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICB9CiAKLSAgICAgICAgdXBkYXRlQ2hhcmFjdGVyRGF0YShpLCBsYXN0Um90YXRpb24sIGl0LT5z
ZWNvbmQsIGxlbmd0aENvbnRleHQsIHhMaXN0UHRyLCB5TGlzdFB0ciwgZHhMaXN0UHRyLCBkeUxp
c3RQdHIsIHJvdGF0ZUxpc3RQdHIpOworICAgICAgICB1cGRhdGVDaGFyYWN0ZXJEYXRhKGksIGxh
c3RSb3RhdGlvbiwgaXQtPnZhbHVlLCBsZW5ndGhDb250ZXh0LCB4TGlzdFB0ciwgeUxpc3RQdHIs
IGR4TGlzdFB0ciwgZHlMaXN0UHRyLCByb3RhdGVMaXN0UHRyKTsKICAgICB9CiAKICAgICAvLyBU
aGUgbGFzdCByb3RhdGlvbiB2YWx1ZSBhbHdheXMgc3BhbnMgdGhlIHdob2xlIHNjb3BlLgpAQCAt
MjI5LDcgKzIyOSw3IEBAIHZvaWQgU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyOjpmaWxs
Q2hhcmFjdGVyRGF0YU1hcChjb25zdCBUZXh0UG9zaXRpb24mIHBvCiAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIGl0LT5zZWNvbmQucm90YXRlID0gbGFzdFJvdGF0
aW9uOworICAgICAgICBpdC0+dmFsdWUucm90YXRlID0gbGFzdFJvdGF0aW9uOwogICAgIH0KIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0
RW5naW5lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVu
Z2luZS5jcHAKaW5kZXggNWM1NDliMjFjODc1MjA4NDcyNDZhZjI1NGZkMDU5ZjJlM2I5YjVlOC4u
YmEyYjc2MzlkM2Y5NWI3Mzg5NDc1ZmEyZGMwMGM5YTZhYTg1YjMxNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmUuY3BwCkBAIC00
NzUsNyArNDc1LDcgQEAgdm9pZCBTVkdUZXh0TGF5b3V0RW5naW5lOjpsYXlvdXRUZXh0T25MaW5l
T3JQYXRoKFNWR0lubGluZVRleHRCb3gqIHRleHRCb3gsIFJlbmQKICAgICAgICAgU1ZHQ2hhcmFj
dGVyRGF0YSBkYXRhOwogICAgICAgICBTVkdDaGFyYWN0ZXJEYXRhTWFwOjppdGVyYXRvciBpdCA9
IGNoYXJhY3RlckRhdGFNYXAuZmluZChtX2xvZ2ljYWxDaGFyYWN0ZXJPZmZzZXQgKyAxKTsKICAg
ICAgICAgaWYgKGl0ICE9IGNoYXJhY3RlckRhdGFNYXAuZW5kKCkpCi0gICAgICAgICAgICBkYXRh
ID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIGRhdGEgPSBpdC0+dmFsdWU7CiAKICAgICAgICAg
ZmxvYXQgeCA9IGRhdGEueDsKICAgICAgICAgZmxvYXQgeSA9IGRhdGEueTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3NCdWlsZGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3NCdWlsZGVyLmNwcApp
bmRleCBmZjljYTMwNzNmY2ZmODU3MmUyMjcxZjZkMTk3OGE0NGY4ZWE4ZjViLi5jYTc0ODFmMzk4
MDllOTRkOTBjMDE5NDM0MTdmY2Y4Mzc5YjhmN2QyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNzQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljc0J1aWxkZXIuY3BwCkBAIC0xNjEsNyAr
MTYxLDcgQEAgdm9pZCBTVkdUZXh0TWV0cmljc0J1aWxkZXI6Om1lYXN1cmVUZXh0UmVuZGVyZXIo
UmVuZGVyU1ZHSW5saW5lVGV4dCogdGV4dCwgTWVhc3UKICAgICAgICAgICAgIGlmIChkYXRhLT5h
bGxDaGFyYWN0ZXJzTWFwKSB7CiAgICAgICAgICAgICAgICAgY29uc3QgU1ZHQ2hhcmFjdGVyRGF0
YU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBkYXRhLT5hbGxDaGFyYWN0ZXJzTWFwLT5maW5kKGRh
dGEtPnZhbHVlTGlzdFBvc2l0aW9uICsgbV90ZXh0UG9zaXRpb24gLSBkYXRhLT5za2lwcGVkQ2hh
cmFjdGVycyAtIHN1cnJvZ2F0ZVBhaXJDaGFyYWN0ZXJzICsgMSk7CiAgICAgICAgICAgICAgICAg
aWYgKGl0ICE9IGRhdGEtPmFsbENoYXJhY3RlcnNNYXAtPmVuZCgpKQotICAgICAgICAgICAgICAg
ICAgICBhdHRyaWJ1dGVzLT5jaGFyYWN0ZXJEYXRhTWFwKCkuc2V0KG1fdGV4dFBvc2l0aW9uICsg
MSwgaXQtPnNlY29uZCk7CisgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMtPmNoYXJhY3Rl
ckRhdGFNYXAoKS5zZXQobV90ZXh0UG9zaXRpb24gKyAxLCBpdC0+dmFsdWUpOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgdGV4dE1ldHJpY3NWYWx1ZXMtPmFwcGVuZChtX2N1cnJlbnRNZXRy
aWNzKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9y
YWdlQXJlYVN5bmMuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMu
Y3BwCmluZGV4IDQ0MjA5YzZmNTlkMGQyYTFkN2YzM2IyZjExMjlhODdlOTA0NWU3Y2QuLmZjYjEy
NmExZDU2ZDVhZmNjOWFiZWJhNjIxZmIwNzc4ZTMyYjdmZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5jcHAKQEAgLTE4OCw3ICsxODgsNyBAQCB2b2lkIFN0b3Jh
Z2VBcmVhU3luYzo6c3luY1RpbWVyRmlyZWQoVGltZXI8U3RvcmFnZUFyZWFTeW5jPiopCiAgICAg
ICAgICAgICAgICAgcGFydGlhbFN5bmMgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9pdGVtc1BlbmRpbmdTeW5jLnNldChjaGFuZ2Vk
X2l0LT5maXJzdC5pc29sYXRlZENvcHkoKSwgY2hhbmdlZF9pdC0+c2Vjb25kLmlzb2xhdGVkQ29w
eSgpKTsKKyAgICAgICAgICAgIG1faXRlbXNQZW5kaW5nU3luYy5zZXQoY2hhbmdlZF9pdC0+a2V5
Lmlzb2xhdGVkQ29weSgpLCBjaGFuZ2VkX2l0LT52YWx1ZS5pc29sYXRlZENvcHkoKSk7CiAgICAg
ICAgIH0KIAogICAgICAgICBpZiAocGFydGlhbFN5bmMpIHsKQEAgLTE5OCw3ICsxOTgsNyBAQCB2
b2lkIFN0b3JhZ2VBcmVhU3luYzo6c3luY1RpbWVyRmlyZWQoVGltZXI8U3RvcmFnZUFyZWFTeW5j
PiopCiAgICAgICAgICAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6aXRlcmF0b3IgcGVuZGlu
Z19pdCA9IG1faXRlbXNQZW5kaW5nU3luYy5iZWdpbigpOwogICAgICAgICAgICAgSGFzaE1hcDxT
dHJpbmcsIFN0cmluZz46Oml0ZXJhdG9yIHBlbmRpbmdfZW5kID0gbV9pdGVtc1BlbmRpbmdTeW5j
LmVuZCgpOwogICAgICAgICAgICAgZm9yICg7IHBlbmRpbmdfaXQgIT0gcGVuZGluZ19lbmQ7ICsr
cGVuZGluZ19pdCkKLSAgICAgICAgICAgICAgICBtX2NoYW5nZWRJdGVtcy5yZW1vdmUocGVuZGlu
Z19pdC0+Zmlyc3QpOworICAgICAgICAgICAgICAgIG1fY2hhbmdlZEl0ZW1zLnJlbW92ZShwZW5k
aW5nX2l0LT5rZXkpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFtX3N5bmNTY2hlZHVsZWQp
IHsKQEAgLTM0NSw3ICszNDUsNyBAQCB2b2lkIFN0b3JhZ2VBcmVhU3luYzo6cGVyZm9ybUltcG9y
dCgpCiAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46Oml0ZXJhdG9yIGVuZCA9IGl0ZW1NYXAu
ZW5kKCk7CiAKICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBtX3N0b3JhZ2VB
cmVhLT5pbXBvcnRJdGVtKGl0LT5maXJzdCwgaXQtPnNlY29uZCk7CisgICAgICAgIG1fc3RvcmFn
ZUFyZWEtPmltcG9ydEl0ZW0oaXQtPmtleSwgaXQtPnZhbHVlKTsKIAogICAgIG1hcmtJbXBvcnRl
ZCgpOwogfQpAQCAtNDM5LDEzICs0MzksMTMgQEAgdm9pZCBTdG9yYWdlQXJlYVN5bmM6OnN5bmMo
Ym9vbCBjbGVhckl0ZW1zLCBjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgaXRlbXMKICAg
ICB0cmFuc2FjdGlvbi5iZWdpbigpOwogICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaXRlbXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAg
ICAgICAgIC8vIEJhc2VkIG9uIHRoZSBudWxsLW5lc3Mgb2YgdGhlIHNlY29uZCBhcmd1bWVudCwg
ZGVjaWRlIHdoZXRoZXIgdGhpcyBpcyBhbiBpbnNlcnQgb3IgYSBkZWxldGUuCi0gICAgICAgIFNR
TGl0ZVN0YXRlbWVudCYgcXVlcnkgPSBpdC0+c2Vjb25kLmlzTnVsbCgpID8gcmVtb3ZlIDogaW5z
ZXJ0OworICAgICAgICBTUUxpdGVTdGF0ZW1lbnQmIHF1ZXJ5ID0gaXQtPnZhbHVlLmlzTnVsbCgp
ID8gcmVtb3ZlIDogaW5zZXJ0OwogCi0gICAgICAgIHF1ZXJ5LmJpbmRUZXh0KDEsIGl0LT5maXJz
dCk7CisgICAgICAgIHF1ZXJ5LmJpbmRUZXh0KDEsIGl0LT5rZXkpOwogCiAgICAgICAgIC8vIElm
IHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgbm9uLW51bGwsIHdlJ3JlIGRvaW5nIGFuIGluc2VydCwg
c28gYmluZCBpdCBhcyB0aGUgdmFsdWUuCi0gICAgICAgIGlmICghaXQtPnNlY29uZC5pc051bGwo
KSkKLSAgICAgICAgICAgIHF1ZXJ5LmJpbmRCbG9iKDIsIGl0LT5zZWNvbmQpOworICAgICAgICBp
ZiAoIWl0LT52YWx1ZS5pc051bGwoKSkKKyAgICAgICAgICAgIHF1ZXJ5LmJpbmRCbG9iKDIsIGl0
LT52YWx1ZSk7CiAKICAgICAgICAgaW50IHJlc3VsdCA9IHF1ZXJ5LnN0ZXAoKTsKICAgICAgICAg
aWYgKHJlc3VsdCAhPSBTUUxSZXN1bHREb25lKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL1N0b3JhZ2VNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdl
TWFwLmNwcAppbmRleCA4ZTQyZDJmMTc2ZGQzYjExMTJhMDFhNTFkOGRiNjJmNGIzOGJiYTM1Li40
MGUxYTM4ZjFjYTRhNzlmMGNlMjQ3MDExNTM0N2FkYjkyOWY0OTgzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvU3RvcmFnZU1hcC5jcHAKQEAgLTg5LDcgKzg5LDcgQEAgU3RyaW5nIFN0b3JhZ2VNYXA6
OmtleSh1bnNpZ25lZCBpbmRleCkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCiAgICAgc2V0
SXRlcmF0b3JUb0luZGV4KGluZGV4KTsKLSAgICByZXR1cm4gbV9pdGVyYXRvci0+Zmlyc3Q7Cisg
ICAgcmV0dXJuIG1faXRlcmF0b3ItPmtleTsKIH0KIAogU3RyaW5nIFN0b3JhZ2VNYXA6OmdldEl0
ZW0oY29uc3QgU3RyaW5nJiBrZXkpIGNvbnN0CkBAIC0xMzMsNyArMTMzLDcgQEAgUGFzc1JlZlB0
cjxTdG9yYWdlTWFwPiBTdG9yYWdlTWFwOjpzZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBjb25z
dCBTdHJpbmcmIHZhbHUKIAogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+OjpBZGRSZXN1bHQg
YWRkUmVzdWx0ID0gbV9tYXAuYWRkKGtleSwgdmFsdWUpOwogICAgIGlmICghYWRkUmVzdWx0Lmlz
TmV3RW50cnkpCi0gICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gdmFsdWU7Cisg
ICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSB2YWx1ZTsKIAogICAgIGludmFsaWRh
dGVJdGVyYXRvcigpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3Jh
Z2VOYW1lc3BhY2VJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVz
cGFjZUltcGwuY3BwCmluZGV4IDlkMWFjNTE3YTBlMmU3YjNmMjZiODIzYjI4OWE1OTM5NThiZGM4
YTAuLjQ1MDFiMTFmYmMxNWNmNDIzOWQwN2ZjMzc0NzY0MTZkYmI3NWVmY2YgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwCkBAIC01NSw3ICs1
NSw3IEBAIFBhc3NSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gU3RvcmFnZU5hbWVzcGFjZUltcGw6
OmxvY2FsU3RvcmFnZU5hbWVzcGFjZShjb25zdCBTCiAgICAgICAgIHJldHVybiBzdG9yYWdlTmFt
ZXNwYWNlLnJlbGVhc2UoKTsKICAgICB9CiAKLSAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICBy
ZXR1cm4gaXQtPnZhbHVlOwogfQogCiBQYXNzUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IFN0b3Jh
Z2VOYW1lc3BhY2VJbXBsOjpzZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSh1bnNpZ25lZCBxdW90YSkK
QEAgLTk3LDcgKzk3LDcgQEAgUGFzc1JlZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiBTdG9yYWdlTmFt
ZXNwYWNlSW1wbDo6Y29weSgpCiAKICAgICBTdG9yYWdlQXJlYU1hcDo6aXRlcmF0b3IgZW5kID0g
bV9zdG9yYWdlQXJlYU1hcC5lbmQoKTsKICAgICBmb3IgKFN0b3JhZ2VBcmVhTWFwOjppdGVyYXRv
ciBpID0gbV9zdG9yYWdlQXJlYU1hcC5iZWdpbigpOyBpICE9IGVuZDsgKytpKQotICAgICAgICBu
ZXdOYW1lc3BhY2UtPm1fc3RvcmFnZUFyZWFNYXAuc2V0KGktPmZpcnN0LCBpLT5zZWNvbmQtPmNv
cHkoKSk7CisgICAgICAgIG5ld05hbWVzcGFjZS0+bV9zdG9yYWdlQXJlYU1hcC5zZXQoaS0+a2V5
LCBpLT52YWx1ZS0+Y29weSgpKTsKICAgICByZXR1cm4gbmV3TmFtZXNwYWNlLnJlbGVhc2UoKTsK
IH0KIApAQCAtMTMxLDcgKzEzMSw3IEBAIHZvaWQgU3RvcmFnZU5hbWVzcGFjZUltcGw6OmNsb3Nl
KCkKIAogICAgIFN0b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBlbmQgPSBtX3N0b3JhZ2VBcmVhTWFw
LmVuZCgpOwogICAgIGZvciAoU3RvcmFnZUFyZWFNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zdG9yYWdl
QXJlYU1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPmNs
b3NlKCk7CisgICAgICAgIGl0LT52YWx1ZS0+Y2xvc2UoKTsKIAogICAgIGlmIChtX3N5bmNNYW5h
Z2VyKQogICAgICAgICBtX3N5bmNNYW5hZ2VyLT5jbG9zZSgpOwpAQCAtMTU0LDcgKzE1NCw3IEBA
IHZvaWQgU3RvcmFnZU5hbWVzcGFjZUltcGw6OmNsZWFyQWxsT3JpZ2luc0ZvckRlbGV0aW9uKCkK
IAogICAgIFN0b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBlbmQgPSBtX3N0b3JhZ2VBcmVhTWFwLmVu
ZCgpOwogICAgIGZvciAoU3RvcmFnZUFyZWFNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zdG9yYWdlQXJl
YU1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPmNsZWFy
Rm9yT3JpZ2luRGVsZXRpb24oKTsKKyAgICAgICAgaXQtPnZhbHVlLT5jbGVhckZvck9yaWdpbkRl
bGV0aW9uKCk7CiB9CiAgICAgCiB2b2lkIFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpzeW5jKCkKQEAg
LTE2Miw3ICsxNjIsNyBAQCB2b2lkIFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpzeW5jKCkKICAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIFN0b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBlbmQg
PSBtX3N0b3JhZ2VBcmVhTWFwLmVuZCgpOwogICAgIGZvciAoU3RvcmFnZUFyZWFNYXA6Oml0ZXJh
dG9yIGl0ID0gbV9zdG9yYWdlQXJlYU1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAg
ICAgIGl0LT5zZWNvbmQtPnN5bmMoKTsKKyAgICAgICAgaXQtPnZhbHVlLT5zeW5jKCk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0RvY3VtZW50
RXh0ZW5zaW9ucy5jcHAKaW5kZXggY2FjMWFlYTA3ZTA5MGQ3NGUyNWVhMzQ2MDA5ZjI1YzdkNDY4
MGUzOS4uY2NiNjMyM2U0N2RhODQxYTc2MWNiOTNhMWVjOGVhZDE1NzUwOTZlYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5jcHAKQEAgLTE1Niw3ICsxNTYs
NyBAQCB2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlQW5pbWF0aW9uRWxlbWVudEZy
b21UYXJnZXQoU1ZHU01JTEVsZW1lbnQqIGFuaQogICAgIEhhc2hNYXA8U1ZHRWxlbWVudCosIEhh
c2hTZXQ8U1ZHU01JTEVsZW1lbnQqPiogPjo6aXRlcmF0b3IgaXQgPSBtX2FuaW1hdGVkRWxlbWVu
dHMuZmluZCh0YXJnZXRFbGVtZW50KTsKICAgICBBU1NFUlQoaXQgIT0gbV9hbmltYXRlZEVsZW1l
bnRzLmVuZCgpKTsKICAgICAKLSAgICBIYXNoU2V0PFNWR1NNSUxFbGVtZW50Kj4qIGFuaW1hdGlv
bkVsZW1lbnRzRm9yVGFyZ2V0ID0gaXQtPnNlY29uZDsKKyAgICBIYXNoU2V0PFNWR1NNSUxFbGVt
ZW50Kj4qIGFuaW1hdGlvbkVsZW1lbnRzRm9yVGFyZ2V0ID0gaXQtPnZhbHVlOwogICAgIEFTU0VS
VCghYW5pbWF0aW9uRWxlbWVudHNGb3JUYXJnZXQtPmlzRW1wdHkoKSk7CiAKICAgICBhbmltYXRp
b25FbGVtZW50c0ZvclRhcmdldC0+cmVtb3ZlKGFuaW1hdGlvbkVsZW1lbnQpOwpAQCAtMTczLDcg
KzE3Myw3IEBAIHZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZW1vdmVBbGxBbmltYXRpb25F
bGVtZW50c0Zyb21UYXJnZXQoU1ZHRWxlbWVudCogdGFyCiAgICAgaWYgKGl0ID09IG1fYW5pbWF0
ZWRFbGVtZW50cy5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSGFzaFNldDxTVkdTTUlM
RWxlbWVudCo+KiBhbmltYXRpb25FbGVtZW50c0ZvclRhcmdldCA9IGl0LT5zZWNvbmQ7CisgICAg
SGFzaFNldDxTVkdTTUlMRWxlbWVudCo+KiBhbmltYXRpb25FbGVtZW50c0ZvclRhcmdldCA9IGl0
LT52YWx1ZTsKICAgICBWZWN0b3I8U1ZHU01JTEVsZW1lbnQqPiB0b0JlUmVzZXQ7CiAKICAgICBI
YXNoU2V0PFNWR1NNSUxFbGVtZW50Kj46Oml0ZXJhdG9yIGVuZCA9IGFuaW1hdGlvbkVsZW1lbnRz
Rm9yVGFyZ2V0LT5lbmQoKTsKQEAgLTIxOSw5ICsyMTksOSBAQCB2b2lkIFNWR0RvY3VtZW50RXh0
ZW5zaW9uczo6YWRkUGVuZGluZ1Jlc291cmNlKGNvbnN0IEF0b21pY1N0cmluZyYgaWQsIFNWR1N0
eWxlZAogCiAgICAgLy8gVGhlIEhhc2hNYXAgYWRkIGZ1bmN0aW9uIGxlYXZlcyB0aGUgbWFwIGFs
b25lIGFuZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgZWxlbWVudCBpbiB0aGUKICAgICAvLyBt
YXAgaWYgdGhlIGVsZW1lbnQgYWxyZWFkeSBleGlzdHMuIFNvIHdlIGFkZCB3aXRoIGEgdmFsdWUg
b2YgMCwgYW5kIGl0IGVpdGhlciBmaW5kcyB0aGUKLSAgICAvLyBleGlzdGluZyBlbGVtZW50IG9y
IGFkZHMgYSBuZXcgb25lIGluIGEgc2luZ2xlIG9wZXJhdGlvbi4gVGhlICIuaXRlcmF0b3ItPnNl
Y29uZCIgaWRpb20gZ2V0cworICAgIC8vIGV4aXN0aW5nIGVsZW1lbnQgb3IgYWRkcyBhIG5ldyBv
bmUgaW4gYSBzaW5nbGUgb3BlcmF0aW9uLiBUaGUgIi5pdGVyYXRvci0+dmFsdWUiIGlkaW9tIGdl
dHMKICAgICAvLyB1cyB0byB0aGUgaXRlcmF0b3IgZnJvbSBhZGQncyByZXN1bHQsIGFuZCB0aGVu
IHRvIHRoZSB2YWx1ZSBpbnNpZGUgdGhlIGhhc2ggdGFibGUuCi0gICAgU1ZHUGVuZGluZ0VsZW1l
bnRzKiYgc2V0ID0gbV9wZW5kaW5nUmVzb3VyY2VzLmFkZChpZCwgMCkuaXRlcmF0b3ItPnNlY29u
ZDsKKyAgICBTVkdQZW5kaW5nRWxlbWVudHMqJiBzZXQgPSBtX3BlbmRpbmdSZXNvdXJjZXMuYWRk
KGlkLCAwKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCFzZXQpCiAgICAgICAgIHNldCA9IG5l
dyBTVkdQZW5kaW5nRWxlbWVudHM7CiAgICAgc2V0LT5hZGQoZWxlbWVudCk7CkBAIC0yNDYsNyAr
MjQ2LDcgQEAgYm9vbCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OmlzRWxlbWVudFBlbmRpbmdSZXNv
dXJjZXMoU1ZHU3R5bGVkRWxlbWVudCogZWxlbWVudCkKIAogICAgIEhhc2hNYXA8QXRvbWljU3Ry
aW5nLCBTVkdQZW5kaW5nRWxlbWVudHMqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wZW5kaW5n
UmVzb3VyY2VzLmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDxBdG9taWNTdHJpbmcsIFNWR1BlbmRp
bmdFbGVtZW50cyo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGVuZGluZ1Jlc291cmNlcy5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgU1ZHUGVuZGluZ0VsZW1lbnRzKiBlbGVt
ZW50cyA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFNWR1BlbmRpbmdFbGVtZW50cyogZWxlbWVudHMg
PSBpdC0+dmFsdWU7CiAgICAgICAgIEFTU0VSVChlbGVtZW50cyk7CiAKICAgICAgICAgaWYgKGVs
ZW1lbnRzLT5jb250YWlucyhlbGVtZW50KSkKQEAgLTI3NCwxMyArMjc0LDEzIEBAIHZvaWQgU1ZH
RG9jdW1lbnRFeHRlbnNpb25zOjpyZW1vdmVFbGVtZW50RnJvbVBlbmRpbmdSZXNvdXJjZXMoU1ZH
U3R5bGVkRWxlbWVudCoKICAgICAgICAgVmVjdG9yPEF0b21pY1N0cmluZz4gdG9CZVJlbW92ZWQ7
CiAgICAgICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBTVkdQZW5kaW5nRWxlbWVudHMqPjo6aXRl
cmF0b3IgZW5kID0gbV9wZW5kaW5nUmVzb3VyY2VzLmVuZCgpOwogICAgICAgICBmb3IgKEhhc2hN
YXA8QXRvbWljU3RyaW5nLCBTVkdQZW5kaW5nRWxlbWVudHMqPjo6aXRlcmF0b3IgaXQgPSBtX3Bl
bmRpbmdSZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBT
VkdQZW5kaW5nRWxlbWVudHMqIGVsZW1lbnRzID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIFNW
R1BlbmRpbmdFbGVtZW50cyogZWxlbWVudHMgPSBpdC0+dmFsdWU7CiAgICAgICAgICAgICBBU1NF
UlQoZWxlbWVudHMpOwogICAgICAgICAgICAgQVNTRVJUKCFlbGVtZW50cy0+aXNFbXB0eSgpKTsK
IAogICAgICAgICAgICAgZWxlbWVudHMtPnJlbW92ZShlbGVtZW50KTsKICAgICAgICAgICAgIGlm
IChlbGVtZW50cy0+aXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHRvQmVSZW1vdmVkLmFwcGVu
ZChpdC0+Zmlyc3QpOworICAgICAgICAgICAgICAgIHRvQmVSZW1vdmVkLmFwcGVuZChpdC0+a2V5
KTsKICAgICAgICAgfQogCiAgICAgICAgIGVsZW1lbnQtPmNsZWFySGFzUGVuZGluZ1Jlc291cmNl
c0lmUG9zc2libGUoKTsKQEAgLTI5NiwxMyArMjk2LDEzIEBAIHZvaWQgU1ZHRG9jdW1lbnRFeHRl
bnNpb25zOjpyZW1vdmVFbGVtZW50RnJvbVBlbmRpbmdSZXNvdXJjZXMoU1ZHU3R5bGVkRWxlbWVu
dCoKICAgICAgICAgVmVjdG9yPEF0b21pY1N0cmluZz4gdG9CZVJlbW92ZWQ7CiAgICAgICAgIEhh
c2hNYXA8QXRvbWljU3RyaW5nLCBTVkdQZW5kaW5nRWxlbWVudHMqPjo6aXRlcmF0b3IgZW5kID0g
bV9wZW5kaW5nUmVzb3VyY2VzRm9yUmVtb3ZhbC5lbmQoKTsKICAgICAgICAgZm9yIChIYXNoTWFw
PEF0b21pY1N0cmluZywgU1ZHUGVuZGluZ0VsZW1lbnRzKj46Oml0ZXJhdG9yIGl0ID0gbV9wZW5k
aW5nUmVzb3VyY2VzRm9yUmVtb3ZhbC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgICAgIFNWR1BlbmRpbmdFbGVtZW50cyogZWxlbWVudHMgPSBpdC0+c2Vjb25kOworICAgICAg
ICAgICAgU1ZHUGVuZGluZ0VsZW1lbnRzKiBlbGVtZW50cyA9IGl0LT52YWx1ZTsKICAgICAgICAg
ICAgIEFTU0VSVChlbGVtZW50cyk7CiAgICAgICAgICAgICBBU1NFUlQoIWVsZW1lbnRzLT5pc0Vt
cHR5KCkpOwogCiAgICAgICAgICAgICBlbGVtZW50cy0+cmVtb3ZlKGVsZW1lbnQpOwogICAgICAg
ICAgICAgaWYgKGVsZW1lbnRzLT5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgdG9CZVJlbW92
ZWQuYXBwZW5kKGl0LT5maXJzdCk7CisgICAgICAgICAgICAgICAgdG9CZVJlbW92ZWQuYXBwZW5k
KGl0LT5rZXkpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gV2UgdXNlIHRoZSByZW1vdmVQZW5k
aW5nUmVzb3VyY2VGb3JSZW1vdmFsIGZ1bmN0aW9uIGhlcmUgYmVjYXVzZSBpdCBkZWFscyB3aXRo
IHNldCBsaWZldGltZSBjb3JyZWN0bHkuCkBAIC0zNjIsNyArMzYyLDcgQEAgSGFzaFNldDxTVkdF
bGVtZW50Kj4qIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6c2V0T2ZFbGVtZW50c1JlZmVyZW5jaW5n
VGFyZ2V0KFNWR0UKICAgICBjb25zdCBIYXNoTWFwPFNWR0VsZW1lbnQqLCBPd25QdHI8SGFzaFNl
dDxTVkdFbGVtZW50Kj4gPiA+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fZWxlbWVudERlcGVuZGVu
Y2llcy5maW5kKHJlZmVyZW5jZWRFbGVtZW50KTsKICAgICBpZiAoaXQgPT0gbV9lbGVtZW50RGVw
ZW5kZW5jaWVzLmVuZCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gaXQtPnNlY29u
ZC5nZXQoKTsKKyAgICByZXR1cm4gaXQtPnZhbHVlLmdldCgpOwogfQogCiB2b2lkIFNWR0RvY3Vt
ZW50RXh0ZW5zaW9uczo6YWRkRWxlbWVudFJlZmVyZW5jaW5nVGFyZ2V0KFNWR0VsZW1lbnQqIHJl
ZmVyZW5jaW5nRWxlbWVudCwgU1ZHRWxlbWVudCogcmVmZXJlbmNlZEVsZW1lbnQpCkBAIC0zODYs
OCArMzg2LDggQEAgdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlbW92ZUFsbFRhcmdldFJl
ZmVyZW5jZXNGb3JFbGVtZW50KFNWR0VsZW1lbnQqIHJlZmUKIAogICAgIEhhc2hNYXA8U1ZHRWxl
bWVudCosIE93blB0cjxIYXNoU2V0PFNWR0VsZW1lbnQqPiA+ID46Oml0ZXJhdG9yIGVuZCA9IG1f
ZWxlbWVudERlcGVuZGVuY2llcy5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8U1ZHRWxlbWVudCos
IE93blB0cjxIYXNoU2V0PFNWR0VsZW1lbnQqPiA+ID46Oml0ZXJhdG9yIGl0ID0gbV9lbGVtZW50
RGVwZW5kZW5jaWVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBTVkdFbGVt
ZW50KiByZWZlcmVuY2VkRWxlbWVudCA9IGl0LT5maXJzdDsKLSAgICAgICAgSGFzaFNldDxTVkdF
bGVtZW50Kj4qIHJlZmVyZW5jaW5nRWxlbWVudHMgPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAg
ICBTVkdFbGVtZW50KiByZWZlcmVuY2VkRWxlbWVudCA9IGl0LT5rZXk7CisgICAgICAgIEhhc2hT
ZXQ8U1ZHRWxlbWVudCo+KiByZWZlcmVuY2luZ0VsZW1lbnRzID0gaXQtPnZhbHVlLmdldCgpOwog
ICAgICAgICBIYXNoU2V0PFNWR0VsZW1lbnQqPjo6aXRlcmF0b3Igc2V0SXQgPSByZWZlcmVuY2lu
Z0VsZW1lbnRzLT5maW5kKHJlZmVyZW5jaW5nRWxlbWVudCk7CiAgICAgICAgIGlmIChzZXRJdCA9
PSByZWZlcmVuY2luZ0VsZW1lbnRzLT5lbmQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAt
NDA4LDEwICs0MDgsMTAgQEAgdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlbW92ZUFsbEVs
ZW1lbnRSZWZlcmVuY2VzRm9yVGFyZ2V0KFNWR0VsZW1lbnQqIHJlZmUKICAgICBIYXNoTWFwPFNW
R0VsZW1lbnQqLCBPd25QdHI8SGFzaFNldDxTVkdFbGVtZW50Kj4gPiA+OjppdGVyYXRvciBpdCA9
IG1fZWxlbWVudERlcGVuZGVuY2llcy5maW5kKHJlZmVyZW5jZWRFbGVtZW50KTsKICAgICBpZiAo
aXQgPT0gbV9lbGVtZW50RGVwZW5kZW5jaWVzLmVuZCgpKQogICAgICAgICByZXR1cm47Ci0gICAg
QVNTRVJUKGl0LT5maXJzdCA9PSByZWZlcmVuY2VkRWxlbWVudCk7CisgICAgQVNTRVJUKGl0LT5r
ZXkgPT0gcmVmZXJlbmNlZEVsZW1lbnQpOwogICAgIFZlY3RvcjxTVkdFbGVtZW50Kj4gdG9CZU5v
dGlmaWVkOwogCi0gICAgSGFzaFNldDxTVkdFbGVtZW50Kj4qIHJlZmVyZW5jaW5nRWxlbWVudHMg
PSBpdC0+c2Vjb25kLmdldCgpOworICAgIEhhc2hTZXQ8U1ZHRWxlbWVudCo+KiByZWZlcmVuY2lu
Z0VsZW1lbnRzID0gaXQtPnZhbHVlLmdldCgpOwogICAgIEhhc2hTZXQ8U1ZHRWxlbWVudCo+Ojpp
dGVyYXRvciBzZXRFbmQgPSByZWZlcmVuY2luZ0VsZW1lbnRzLT5lbmQoKTsKICAgICBmb3IgKEhh
c2hTZXQ8U1ZHRWxlbWVudCo+OjppdGVyYXRvciBzZXRJdCA9IHJlZmVyZW5jaW5nRWxlbWVudHMt
PmJlZ2luKCk7IHNldEl0ICE9IHNldEVuZDsgKytzZXRJdCkKICAgICAgICAgdG9CZU5vdGlmaWVk
LmFwcGVuZCgqc2V0SXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCmluZGV4IDg2ZWE4MTVl
ZWY2MzEwNzIxNWY0NmIxMGY5ZDhkNWViZTI1YTlkYjcuLmNmOGU0MzM3ODg1ZDZmMDJmMWMzZWZl
MWI3MTE3N2JkZjkyOWY5OGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAKQEAgLTY4LDcg
KzY4LDcgQEAgU1ZHRWxlbWVudDo6flNWR0VsZW1lbnQoKQogICAgICAgICBTVkdFbGVtZW50UmFy
ZURhdGE6OlNWR0VsZW1lbnRSYXJlRGF0YU1hcDo6aXRlcmF0b3IgaXQgPSByYXJlRGF0YU1hcC5m
aW5kKHRoaXMpOwogICAgICAgICBBU1NFUlQoaXQgIT0gcmFyZURhdGFNYXAuZW5kKCkpOwogCi0g
ICAgICAgIFNWR0VsZW1lbnRSYXJlRGF0YSogcmFyZURhdGEgPSBpdC0+c2Vjb25kOworICAgICAg
ICBTVkdFbGVtZW50UmFyZURhdGEqIHJhcmVEYXRhID0gaXQtPnZhbHVlOwogICAgICAgICByYXJl
RGF0YS0+ZGVzdHJveUFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygpOwogICAgICAgICBpZiAo
U1ZHQ3Vyc29yRWxlbWVudCogY3Vyc29yRWxlbWVudCA9IHJhcmVEYXRhLT5jdXJzb3JFbGVtZW50
KCkpCiAgICAgICAgICAgICBjdXJzb3JFbGVtZW50LT5yZW1vdmVDbGllbnQodGhpcyk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuY3BwCmlu
ZGV4IDFlNDYyN2JjMmFkYWViZmE3NTFjMzNhNTc0ODk2NTgzMzIxMGUyM2IuLmRmMGVhNGY5MmUz
MTBjMDk4N2ExMDViNjcyOWM2MDNmNTAzNzJiNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuY3BwCkBAIC0yNjYsNyArMjY2LDcgQEAg
dm9pZCBTTUlMVGltZUNvbnRhaW5lcjo6dXBkYXRlQW5pbWF0aW9ucyhTTUlMVGltZSBlbGFwc2Vk
LCBib29sIHNlZWtUb1RpbWUpCiAgICAgLy8gQXBwbHkgcmVzdWx0cyB0byB0YXJnZXQgZWxlbWVu
dHMuCiAgICAgUmVzdWx0RWxlbWVudE1hcDo6aXRlcmF0b3IgZW5kID0gcmVzdWx0c0VsZW1lbnRz
LmVuZCgpOwogICAgIGZvciAoUmVzdWx0RWxlbWVudE1hcDo6aXRlcmF0b3IgaXQgPSByZXN1bHRz
RWxlbWVudHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5h
cHBseVJlc3VsdHNUb1RhcmdldCgpOworICAgICAgICBpdC0+dmFsdWUtPmFwcGx5UmVzdWx0c1Rv
VGFyZ2V0KCk7CiAKICAgICBzdGFydFRpbWVyKGVhcmxpZXJzRmlyZVRpbWUsIGFuaW1hdGlvbkZy
YW1lRGVsYXkpOwogICAgIERvY3VtZW50Ojp1cGRhdGVTdHlsZUZvckFsbERvY3VtZW50cygpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlQ2FjaGUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlQ2FjaGUuY3BwCmluZGV4IGE1
MTI1MGJmYTQzOTg3NGIyOWZmZDQyMDA3ZjkxYTVmMjcyMTQ4MGEuLjM1OGYyY2FhODdmZGFkMzgz
YWU5ZDcxMTYxY2FhNTIxMDc3NGEyNWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9n
cmFwaGljcy9TVkdJbWFnZUNhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvU1ZHSW1hZ2VDYWNoZS5jcHAKQEAgLTQ0LDExICs0NCwxMSBAQCBTVkdJbWFnZUNhY2hlOjp+
U1ZHSW1hZ2VDYWNoZSgpCiAKICAgICBJbWFnZURhdGFNYXA6Oml0ZXJhdG9yIGVuZCA9IG1faW1h
Z2VEYXRhTWFwLmVuZCgpOwogICAgIGZvciAoSW1hZ2VEYXRhTWFwOjppdGVyYXRvciBpdCA9IG1f
aW1hZ2VEYXRhTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAvLyBDaGVj
a3MgaWYgdGhlIGNsaWVudCAoaXQtPmZpcnN0KSBpcyBzdGlsbCB2YWxpZC4gVGhlIGNsaWVudCBz
aG91bGQgcmVtb3ZlIGl0c2VsZiBmcm9tIHRoaXMKKyAgICAgICAgLy8gQ2hlY2tzIGlmIHRoZSBj
bGllbnQgKGl0LT5rZXkpIGlzIHN0aWxsIHZhbGlkLiBUaGUgY2xpZW50IHNob3VsZCByZW1vdmUg
aXRzZWxmIGZyb20gdGhpcwogICAgICAgICAvLyBjYWNoZSBiZWZvcmUgaXRzIGVuZCBvZiBsaWZl
LCBvdGhlcndpc2UgdGhlIGZvbGxvd2luZyBBU1NFUlQgd2lsbCBjcmFzaCBvbiBwdXJlIHZpcnR1
YWwKICAgICAgICAgLy8gZnVuY3Rpb24gY2FsbCBvciBhIGdlbmVyYWwgY3Jhc2guCi0gICAgICAg
IEFTU0VSVChpdC0+Zmlyc3QtPnJlc291cmNlQ2xpZW50VHlwZSgpID09IENhY2hlZEltYWdlQ2xp
ZW50OjpleHBlY3RlZFR5cGUoKSk7Ci0gICAgICAgIGRlbGV0ZSBpdC0+c2Vjb25kLmJ1ZmZlcjsK
KyAgICAgICAgQVNTRVJUKGl0LT5rZXktPnJlc291cmNlQ2xpZW50VHlwZSgpID09IENhY2hlZElt
YWdlQ2xpZW50OjpleHBlY3RlZFR5cGUoKSk7CisgICAgICAgIGRlbGV0ZSBpdC0+dmFsdWUuYnVm
ZmVyOwogICAgIH0KIAogICAgIG1faW1hZ2VEYXRhTWFwLmNsZWFyKCk7CkBAIC02Myw3ICs2Myw3
IEBAIHZvaWQgU1ZHSW1hZ2VDYWNoZTo6cmVtb3ZlQ2xpZW50RnJvbUNhY2hlKGNvbnN0IENhY2hl
ZEltYWdlQ2xpZW50KiBjbGllbnQpCiAgICAgaWYgKGl0ID09IG1faW1hZ2VEYXRhTWFwLmVuZCgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBkZWxldGUgaXQtPnNlY29uZC5idWZmZXI7CisgICAg
ZGVsZXRlIGl0LT52YWx1ZS5idWZmZXI7CiAgICAgbV9pbWFnZURhdGFNYXAucmVtb3ZlKGl0KTsK
IH0KIApAQCAtODEsMTQgKzgxLDE0IEBAIFNWR0ltYWdlQ2FjaGU6OlNpemVBbmRTY2FsZXMgU1ZH
SW1hZ2VDYWNoZTo6cmVxdWVzdGVkU2l6ZUFuZFNjYWxlcyhjb25zdCBDYWNoZWRJCiAgICAgU2l6
ZUFuZFNjYWxlc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3NpemVBbmRTY2FsZXNNYXAuZmlu
ZChjbGllbnQpOwogICAgIGlmIChpdCA9PSBtX3NpemVBbmRTY2FsZXNNYXAuZW5kKCkpCiAgICAg
ICAgIHJldHVybiBTaXplQW5kU2NhbGVzKCk7Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAg
cmV0dXJuIGl0LT52YWx1ZTsKIH0KIAogdm9pZCBTVkdJbWFnZUNhY2hlOjppbWFnZUNvbnRlbnRD
aGFuZ2VkKCkKIHsKICAgICBJbWFnZURhdGFNYXA6Oml0ZXJhdG9yIGVuZCA9IG1faW1hZ2VEYXRh
TWFwLmVuZCgpOwogICAgIGZvciAoSW1hZ2VEYXRhTWFwOjppdGVyYXRvciBpdCA9IG1faW1hZ2VE
YXRhTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC5pbWFn
ZU5lZWRzVXBkYXRlID0gdHJ1ZTsKKyAgICAgICAgaXQtPnZhbHVlLmltYWdlTmVlZHNVcGRhdGUg
PSB0cnVlOwogCiAgICAgLy8gSWYgd2UncmUgaW4gdGhlIG1pZGRsZSBvZiBsYXlvdXQsIHN0YXJ0
IHJlZHJhd2luZyBkaXJ0eQogICAgIC8vIGltYWdlcyBvbiBhIHRpbWVyOyBvdGhlcndpc2UgaXQn
cyBzYWZlIHRvIGRyYXcgaW1tZWRpYXRlbHkuCkBAIC0xMDQsNyArMTA0LDcgQEAgdm9pZCBTVkdJ
bWFnZUNhY2hlOjpyZWRyYXcoKQogewogICAgIEltYWdlRGF0YU1hcDo6aXRlcmF0b3IgZW5kID0g
bV9pbWFnZURhdGFNYXAuZW5kKCk7CiAgICAgZm9yIChJbWFnZURhdGFNYXA6Oml0ZXJhdG9yIGl0
ID0gbV9pbWFnZURhdGFNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIElt
YWdlRGF0YSYgZGF0YSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIEltYWdlRGF0YSYgZGF0YSA9IGl0
LT52YWx1ZTsKICAgICAgICAgaWYgKCFkYXRhLmltYWdlTmVlZHNVcGRhdGUpCiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgLy8gSWYgdGhlIGNvbnRlbnQgY2hhbmdlZCB3ZSByZWRyYXcg
dXNpbmcgb3VyIGV4aXN0aW5nIEltYWdlQnVmZmVyLgpAQCAtMTQyLDkgKzE0Miw5IEBAIEltYWdl
KiBTVkdJbWFnZUNhY2hlOjpsb29rdXBPckNyZWF0ZUJpdG1hcEltYWdlRm9yUmVuZGVyZXIoY29u
c3QgUmVuZGVyT2JqZWN0KiByCiAgICAgaWYgKHNpemVJdCA9PSBtX3NpemVBbmRTY2FsZXNNYXAu
ZW5kKCkpCiAgICAgICAgIHJldHVybiBJbWFnZTo6bnVsbEltYWdlKCk7CiAKLSAgICBJbnRTaXpl
IHNpemUgPSBzaXplSXQtPnNlY29uZC5zaXplOwotICAgIGZsb2F0IHpvb20gPSBzaXplSXQtPnNl
Y29uZC56b29tOwotICAgIGZsb2F0IHNjYWxlID0gc2l6ZUl0LT5zZWNvbmQuc2NhbGU7CisgICAg
SW50U2l6ZSBzaXplID0gc2l6ZUl0LT52YWx1ZS5zaXplOworICAgIGZsb2F0IHpvb20gPSBzaXpl
SXQtPnZhbHVlLnpvb207CisgICAgZmxvYXQgc2NhbGUgPSBzaXplSXQtPnZhbHVlLnNjYWxlOwog
CiAgICAgLy8gRklYTUUgKDg1MzM1KTogVGhpcyBuZWVkcyB0byB0YWtlIENTUyB0cmFuc2Zvcm0g
c2NhbGUgaW50byBhY2NvdW50IGFzIHdlbGwuCiAgICAgUGFnZSogcGFnZSA9IHJlbmRlcmVyLT5k
b2N1bWVudCgpLT5wYWdlKCk7CkBAIC0xNTYsNyArMTU2LDcgQEAgSW1hZ2UqIFNWR0ltYWdlQ2Fj
aGU6Omxvb2t1cE9yQ3JlYXRlQml0bWFwSW1hZ2VGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJPYmpl
Y3QqIHIKICAgICAvLyBMb29rdXAgaW1hZ2UgZm9yIGNsaWVudCBpbiBjYWNoZSBhbmQgZXZlbnR1
YWxseSB1cGRhdGUgaXQuCiAgICAgSW1hZ2VEYXRhTWFwOjppdGVyYXRvciBpdCA9IG1faW1hZ2VE
YXRhTWFwLmZpbmQoY2xpZW50KTsKICAgICBpZiAoaXQgIT0gbV9pbWFnZURhdGFNYXAuZW5kKCkp
IHsKLSAgICAgICAgSW1hZ2VEYXRhJiBkYXRhID0gaXQtPnNlY29uZDsKKyAgICAgICAgSW1hZ2VE
YXRhJiBkYXRhID0gaXQtPnZhbHVlOwogCiAgICAgICAgIC8vIENvbW1vbiBjYXNlOiBpbWFnZSBz
aXplICYgem9vbSByZW1haW5lZCB0aGUgc2FtZS4KICAgICAgICAgaWYgKGRhdGEuc2l6ZUFuZFNj
YWxlcy5zaXplID09IHNpemUgJiYgZGF0YS5zaXplQW5kU2NhbGVzLnpvb20gPT0gem9vbSAmJiBk
YXRhLnNpemVBbmRTY2FsZXMuc2NhbGUgPT0gc2NhbGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmgKaW5kZXggMjE3ZmQx
ZTM4YWI3OTgwN2JlMzJlMDUyOTkzZWVkNDA4ZWZlM2QyNS4uZjJlYjQ2MGRmNzk5NGNkZDhiNjBm
MGEwODFjNzk3NTFiMDhiOGQwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaApAQCAtNTEsNyArNTEsNyBAQCBwdWJs
aWM6CiAgICAgewogICAgICAgICAvLyBPbmx5IGFsbG93ZWQgZm9yIGVmZmVjdHMgYmVsb25ncyB0
byB0aGlzIGJ1aWxkZXIuCiAgICAgICAgIEFTU0VSVChtX2VmZmVjdFJlZmVyZW5jZXMuY29udGFp
bnMoZWZmZWN0KSk7Ci0gICAgICAgIHJldHVybiBtX2VmZmVjdFJlZmVyZW5jZXMuZmluZChlZmZl
Y3QpLT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBtX2VmZmVjdFJlZmVyZW5jZXMuZmluZChlZmZl
Y3QpLT52YWx1ZTsKICAgICB9CiAKICAgICAvLyBSZXF1aXJlZCB0byBjaGFuZ2UgdGhlIGF0dHJp
YnV0ZXMgb2YgYSBmaWx0ZXIgZHVyaW5nIGFuIHN2Z0F0dHJpYnV0ZUNoYW5nZWQuCkBAIC02Nyw3
ICs2Nyw3IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBIYXNoTWFwPEF0b21pY1N0cmluZywg
UmVmUHRyPEZpbHRlckVmZmVjdD4gPjo6aXRlcmF0b3IgZW5kID0gbV9idWlsdGluRWZmZWN0cy5l
bmQoKTsKICAgICAgICAgZm9yIChIYXNoTWFwPEF0b21pY1N0cmluZywgUmVmUHRyPEZpbHRlckVm
ZmVjdD4gPjo6aXRlcmF0b3IgaXRlcmF0b3IgPSBtX2J1aWx0aW5FZmZlY3RzLmJlZ2luKCk7IGl0
ZXJhdG9yICE9IGVuZDsgKytpdGVyYXRvcikKLSAgICAgICAgICAgICBtX2VmZmVjdFJlZmVyZW5j
ZXMuYWRkKGl0ZXJhdG9yLT5zZWNvbmQsIEZpbHRlckVmZmVjdFNldCgpKTsKKyAgICAgICAgICAg
ICBtX2VmZmVjdFJlZmVyZW5jZXMuYWRkKGl0ZXJhdG9yLT52YWx1ZSwgRmlsdGVyRWZmZWN0U2V0
KCkpOwogICAgIH0KIAogICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBSZWZQdHI8RmlsdGVyRWZm
ZWN0PiA+IG1fYnVpbHRpbkVmZmVjdHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
cHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvcHJv
cGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5LmgKaW5kZXggNmRmZGFjNmRkNTc4YWYzMGY2ZGVh
YjdjZDI2NTgzNjA0NDJmM2FkZi4uNmExZjAwOTdiNjFiYzBiNWRiMDk4MDE1NTA5MDNjMTkwNDQ5
NjdiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0
ZWRQcm9wZXJ0eS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1h
dGVkUHJvcGVydHkuaApAQCAtNTgsOCArNTgsOCBAQCBwdWJsaWM6CiAgICAgICAgIENhY2hlKiBj
YWNoZSA9IGFuaW1hdGVkUHJvcGVydHlDYWNoZSgpOwogICAgICAgICBjb25zdCBDYWNoZTo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gY2FjaGUtPmVuZCgpOwogICAgICAgICBmb3IgKENhY2hlOjpjb25z
dF9pdGVyYXRvciBpdCA9IGNhY2hlLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgICAgIGlmIChpdC0+c2Vjb25kID09IHRoaXMpIHsKLSAgICAgICAgICAgICAgICBjYWNoZS0+
cmVtb3ZlKGl0LT5maXJzdCk7CisgICAgICAgICAgICBpZiAoaXQtPnZhbHVlID09IHRoaXMpIHsK
KyAgICAgICAgICAgICAgICBjYWNoZS0+cmVtb3ZlKGl0LT5rZXkpOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvcHJvcGVydGllcy9TVkdBdHRyaWJ1dGVUb1Byb3BlcnR5TWFwLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0F0dHJpYnV0ZVRvUHJvcGVydHlNYXAuY3BwCmlu
ZGV4IGJlMzFjYzNjN2RhMmY1MGY1MWY2OWI1NTQ0MDI2NWRiMTM1YjUyOGMuLmNjNDZjY2ZhMDgx
ZmZjODgzMDliN2VmMjJkNjNmMGYzNGVmZDgxN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9wcm9wZXJ0aWVzL1NWR0F0dHJpYnV0ZVRvUHJvcGVydHlNYXAuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0F0dHJpYnV0ZVRvUHJvcGVydHlNYXAuY3BwCkBA
IC0zMSw3ICszMSw3IEBAIHZvaWQgU1ZHQXR0cmlidXRlVG9Qcm9wZXJ0eU1hcDo6YWRkUHJvcGVy
dGllcyhTVkdBdHRyaWJ1dGVUb1Byb3BlcnR5TWFwJiBtYXApCiB7CiAgICAgQXR0cmlidXRlVG9Q
cm9wZXJ0aWVzTWFwOjppdGVyYXRvciBlbmQgPSBtYXAubV9tYXAuZW5kKCk7CiAgICAgZm9yIChB
dHRyaWJ1dGVUb1Byb3BlcnRpZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLm1fbWFwLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBQcm9wZXJ0aWVzVmVjdG9yKiB2ZWN0b3IgPSBp
dC0+c2Vjb25kOworICAgICAgICBQcm9wZXJ0aWVzVmVjdG9yKiB2ZWN0b3IgPSBpdC0+dmFsdWU7
CiAgICAgICAgIEFTU0VSVCh2ZWN0b3IpOwogCiAgICAgICAgIFByb3BlcnRpZXNWZWN0b3I6Oml0
ZXJhdG9yIHZlY3RvckVuZCA9IHZlY3Rvci0+ZW5kKCk7CkBAIC04MSwxMiArODEsMTIgQEAgdm9p
ZCBTVkdBdHRyaWJ1dGVUb1Byb3BlcnR5TWFwOjpzeW5jaHJvbml6ZVByb3BlcnRpZXMoU1ZHRWxl
bWVudCogY29udGV4dEVsZW1lbnQKICAgICBBU1NFUlQoY29udGV4dEVsZW1lbnQpOwogICAgIEF0
dHJpYnV0ZVRvUHJvcGVydGllc01hcDo6aXRlcmF0b3IgZW5kID0gbV9tYXAuZW5kKCk7CiAgICAg
Zm9yIChBdHRyaWJ1dGVUb1Byb3BlcnRpZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9tYXAuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFByb3BlcnRpZXNWZWN0b3IqIHZlY3RvciA9
IGl0LT5zZWNvbmQ7CisgICAgICAgIFByb3BlcnRpZXNWZWN0b3IqIHZlY3RvciA9IGl0LT52YWx1
ZTsKICAgICAgICAgQVNTRVJUKHZlY3Rvcik7CiAKICAgICAgICAgUHJvcGVydGllc1ZlY3Rvcjo6
aXRlcmF0b3IgdmVjdG9yRW5kID0gdmVjdG9yLT5lbmQoKTsKICAgICAgICAgZm9yIChQcm9wZXJ0
aWVzVmVjdG9yOjppdGVyYXRvciB2ZWN0b3JJdCA9IHZlY3Rvci0+YmVnaW4oKTsgdmVjdG9ySXQg
IT0gdmVjdG9yRW5kOyArK3ZlY3Rvckl0KQotICAgICAgICAgICAgc3luY2hyb25pemVQcm9wZXJ0
eShjb250ZXh0RWxlbWVudCwgaXQtPmZpcnN0LCAqdmVjdG9ySXQpOworICAgICAgICAgICAgc3lu
Y2hyb25pemVQcm9wZXJ0eShjb250ZXh0RWxlbWVudCwgaXQtPmtleSwgKnZlY3Rvckl0KTsKICAg
ICB9IAogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRl
eHQuY3BwIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcAppbmRleCBk
N2VhZjVkYjQ2ZWU4Y2E3ODBlYjc2MWM4ZjQyYjQ3NmM5MDU1NzQ4Li5hNjlmYjcyNDZmYmNmYWY2
YmU2Zjg4ODc3MjM3Y2JlMWE2ZmI0MWNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3Jr
ZXJzL1dvcmtlckNvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2Vy
Q29udGV4dC5jcHAKQEAgLTE4NCw3ICsxODQsNyBAQCBib29sIFdvcmtlckNvbnRleHQ6Omhhc1Bl
bmRpbmdBY3Rpdml0eSgpIGNvbnN0CiAgICAgQWN0aXZlRE9NT2JqZWN0c01hcCYgYWN0aXZlT2Jq
ZWN0cyA9IGFjdGl2ZURPTU9iamVjdHMoKTsKICAgICBBY3RpdmVET01PYmplY3RzTWFwOjpjb25z
dF9pdGVyYXRvciBhY3RpdmVPYmplY3RzRW5kID0gYWN0aXZlT2JqZWN0cy5lbmQoKTsKICAgICBm
b3IgKEFjdGl2ZURPTU9iamVjdHNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBhY3RpdmVPYmpl
Y3RzLmJlZ2luKCk7IGl0ZXIgIT0gYWN0aXZlT2JqZWN0c0VuZDsgKytpdGVyKSB7Ci0gICAgICAg
IGlmIChpdGVyLT5maXJzdC0+aGFzUGVuZGluZ0FjdGl2aXR5KCkpCisgICAgICAgIGlmIChpdGVy
LT5rZXktPmhhc1BlbmRpbmdBY3Rpdml0eSgpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckV2ZW50UXVl
dWUuY3BwIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJFdmVudFF1ZXVlLmNwcAppbmRl
eCA1OWE5MzA3ZWFjMTc4NGI2OTljM2ZlZDIwYTQ1NWE3OWYwODkxMDdlLi4yMzU1MjlmMWZlYjk3
MTI4YzMxZDk2YTMwZGEwY2RmZmJiZTlkMGViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93
b3JrZXJzL1dvcmtlckV2ZW50UXVldWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
V29ya2VyRXZlbnRRdWV1ZS5jcHAKQEAgLTEyNyw3ICsxMjcsNyBAQCB2b2lkIFdvcmtlckV2ZW50
UXVldWU6OmNsb3NlKCkKIHsKICAgICBtX2lzQ2xvc2VkID0gdHJ1ZTsKICAgICBmb3IgKEV2ZW50
VGFza01hcDo6aXRlcmF0b3IgaXQgPSBtX2V2ZW50VGFza01hcC5iZWdpbigpOyBpdCAhPSBtX2V2
ZW50VGFza01hcC5lbmQoKTsgKytpdCkgewotICAgICAgICBFdmVudERpc3BhdGNoZXJUYXNrKiB0
YXNrID0gaXQtPnNlY29uZDsKKyAgICAgICAgRXZlbnREaXNwYXRjaGVyVGFzayogdGFzayA9IGl0
LT52YWx1ZTsKICAgICAgICAgdGFzay0+Y2FuY2VsKCk7CiAgICAgfQogICAgIG1fZXZlbnRUYXNr
TWFwLmNsZWFyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVl
c3QuY3BwIGIvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAppbmRleCA0YTIz
YWQzNGVhYmMyNjdlZTMwMWU2NDMzOGZlMTM2YjZkZGE5MDkyLi4yOWI3YWIyMzM4NjZjNzA4ODkw
YzY4ZGFkMzI0MTdkYzkwN2NmNzRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWE1M
SHR0cFJlcXVlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5j
cHAKQEAgLTkyOSw3ICs5MjksNyBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpzZXRSZXF1ZXN0SGVh
ZGVySW50ZXJuYWwoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBjb25zdCBTdAogewogICAgIEhU
VFBIZWFkZXJNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX3JlcXVlc3RIZWFkZXJzLmFkZChuYW1l
LCB2YWx1ZSk7CiAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgcmVzdWx0Lml0
ZXJhdG9yLT5zZWNvbmQuYXBwZW5kKCIsICIgKyB2YWx1ZSk7CisgICAgICAgIHJlc3VsdC5pdGVy
YXRvci0+dmFsdWUuYXBwZW5kKCIsICIgKyB2YWx1ZSk7CiB9CiAKIFN0cmluZyBYTUxIdHRwUmVx
dWVzdDo6Z2V0UmVxdWVzdEhlYWRlcihjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpIGNvbnN0CkBA
IC05NTYsMTYgKzk1NiwxNiBAQCBTdHJpbmcgWE1MSHR0cFJlcXVlc3Q6OmdldEFsbFJlc3BvbnNl
SGVhZGVycyhFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKICAgICAgICAgLy8gICAgIDIpIFRoZXJl
J3Mgbm8ga25vd24gaGFybSBpbiBoaWRpbmcgU2V0LUNvb2tpZSBoZWFkZXIgZmllbGRzIGVudGly
ZWx5OyB3ZSBkb24ndAogICAgICAgICAvLyAgICAgICAga25vdyBhbnkgd2lkZWx5IHVzZWQgdGVj
aG5pcXVlIHRoYXQgcmVxdWlyZXMgYWNjZXNzIHRvIHRoZW0uCiAgICAgICAgIC8vICAgICAzKSBG
aXJlZm94IGhhcyBpbXBsZW1lbnRlZCB0aGlzIHBvbGljeS4KLSAgICAgICAgaWYgKGlzU2V0Q29v
a2llSGVhZGVyKGl0LT5maXJzdCkgJiYgIXNlY3VyaXR5T3JpZ2luKCktPmNhbkxvYWRMb2NhbFJl
c291cmNlcygpKQorICAgICAgICBpZiAoaXNTZXRDb29raWVIZWFkZXIoaXQtPmtleSkgJiYgIXNl
Y3VyaXR5T3JpZ2luKCktPmNhbkxvYWRMb2NhbFJlc291cmNlcygpKQogICAgICAgICAgICAgY29u
dGludWU7CiAKLSAgICAgICAgaWYgKCFtX3NhbWVPcmlnaW5SZXF1ZXN0ICYmICFpc09uQWNjZXNz
Q29udHJvbFJlc3BvbnNlSGVhZGVyV2hpdGVsaXN0KGl0LT5maXJzdCkgJiYgIWFjY2Vzc0NvbnRy
b2xFeHBvc2VIZWFkZXJTZXQuY29udGFpbnMoaXQtPmZpcnN0KSkKKyAgICAgICAgaWYgKCFtX3Nh
bWVPcmlnaW5SZXF1ZXN0ICYmICFpc09uQWNjZXNzQ29udHJvbFJlc3BvbnNlSGVhZGVyV2hpdGVs
aXN0KGl0LT5rZXkpICYmICFhY2Nlc3NDb250cm9sRXhwb3NlSGVhZGVyU2V0LmNvbnRhaW5zKGl0
LT5rZXkpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPmtleSk7
CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCc6Jyk7CiAgICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKCcgJyk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5zZWNvbmQp
OworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+dmFsdWUpOwogICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZCgnXHInKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xu
Jyk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoRnVuY3Rpb25z
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aEZ1bmN0aW9ucy5jcHAKaW5kZXggMzkzNGVi
YThlYWFlNGExYjU4OTAyYjg4OTNmNTVjMmU2Y2M0MTNkYy4uOGI3ZWI3Mjk1YWQzMWY1ZDc2NzRh
OTE2MTZlNjg4M2U1YTdmYTUyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL1hQYXRo
RnVuY3Rpb25zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhGdW5jdGlvbnMuY3Bw
CkBAIC03MjAsNyArNzIwLDcgQEAgRnVuY3Rpb24qIGNyZWF0ZUZ1bmN0aW9uKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgVmVjdG9yPEV4cHJlc3Npb24qPiYgYXJncykKICAgICBIYXNoTWFwPFN0
cmluZywgRnVuY3Rpb25SZWM+OjppdGVyYXRvciBmdW5jdGlvbk1hcEl0ZXIgPSBmdW5jdGlvbk1h
cC0+ZmluZChuYW1lKTsKICAgICBGdW5jdGlvblJlYyogZnVuY3Rpb25SZWMgPSAwOwogCi0gICAg
aWYgKGZ1bmN0aW9uTWFwSXRlciA9PSBmdW5jdGlvbk1hcC0+ZW5kKCkgfHwgIShmdW5jdGlvblJl
YyA9ICZmdW5jdGlvbk1hcEl0ZXItPnNlY29uZCktPmFyZ3MuY29udGFpbnMoYXJncy5zaXplKCkp
KQorICAgIGlmIChmdW5jdGlvbk1hcEl0ZXIgPT0gZnVuY3Rpb25NYXAtPmVuZCgpIHx8ICEoZnVu
Y3Rpb25SZWMgPSAmZnVuY3Rpb25NYXBJdGVyLT52YWx1ZSktPmFyZ3MuY29udGFpbnMoYXJncy5z
aXplKCkpKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIEZ1bmN0aW9uKiBmdW5jdGlvbiA9IGZ1
bmN0aW9uUmVjLT5mYWN0b3J5Rm4oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9Y
UGF0aFBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhQYXJzZXIuY3BwCmluZGV4
IGI1ZTZhOTIzNzU5M2I0YWFhMmEyNDNmMmZmOWQ4NmU1N2Y5MzBhOTcuLjc0OTE4MGRiZTVlZThm
OWIxMjJmY2RhMWU2OTgxNjljMDA5ZjhmODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3ht
bC9YUGF0aFBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoUGFyc2VyLmNw
cApAQCAtMTAzLDcgKzEwMyw3IEBAIHN0YXRpYyBib29sIGlzQXhpc05hbWUoY29uc3QgU3RyaW5n
JiBuYW1lLCBTdGVwOjpBeGlzJiB0eXBlKQogICAgIEF4aXNOYW1lc01hcDo6aXRlcmF0b3IgaXQg
PSBheGlzTmFtZXMuZmluZChuYW1lKTsKICAgICBpZiAoaXQgPT0gYXhpc05hbWVzLmVuZCgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgdHlwZSA9IGl0LT5zZWNvbmQ7CisgICAgdHlwZSA9
IGl0LT52YWx1ZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUveG1sL1hTTFRQcm9jZXNzb3JMaWJ4c2x0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3htbC9Y
U0xUUHJvY2Vzc29yTGlieHNsdC5jcHAKaW5kZXggZTIxYzgyN2MyNWRiYzVlZmQzMWJlNzA1Zjlm
MzZmNTJkZTU0ODI0MS4uYTkxMjk4OGRhNjM4Y2NmODQyZTdiMTdhZjVlNDM0NDZlOGEzMmQyOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JMaWJ4c2x0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwCkBAIC0yMjUs
OCArMjI1LDggQEAgc3RhdGljIGNvbnN0IGNoYXIqKiB4c2x0UGFyYW1BcnJheUZyb21QYXJhbWV0
ZXJNYXAoWFNMVFByb2Nlc3Nvcjo6UGFyYW1ldGVyTWFwJgogICAgIFhTTFRQcm9jZXNzb3I6OlBh
cmFtZXRlck1hcDo6aXRlcmF0b3IgZW5kID0gcGFyYW1ldGVycy5lbmQoKTsKICAgICB1bnNpZ25l
ZCBpbmRleCA9IDA7CiAgICAgZm9yIChYU0xUUHJvY2Vzc29yOjpQYXJhbWV0ZXJNYXA6Oml0ZXJh
dG9yIGl0ID0gcGFyYW1ldGVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAg
cGFyYW1ldGVyQXJyYXlbaW5kZXgrK10gPSBmYXN0U3RyRHVwKGl0LT5maXJzdC51dGY4KCkuZGF0
YSgpKTsKLSAgICAgICAgcGFyYW1ldGVyQXJyYXlbaW5kZXgrK10gPSBmYXN0U3RyRHVwKGl0LT5z
ZWNvbmQudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHBhcmFtZXRlckFycmF5W2luZGV4KytdID0g
ZmFzdFN0ckR1cChpdC0+a2V5LnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBwYXJhbWV0ZXJBcnJh
eVtpbmRleCsrXSA9IGZhc3RTdHJEdXAoaXQtPnZhbHVlLnV0ZjgoKS5kYXRhKCkpOwogICAgIH0K
ICAgICBwYXJhbWV0ZXJBcnJheVtpbmRleF0gPSAwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS94bWwvWFNMVFByb2Nlc3NvclF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3htbC9YU0xUUHJv
Y2Vzc29yUXQuY3BwCmluZGV4IGE2N2M1ZmRlNzZmY2M1NjhjZTNjNGM2OGM2MTA2MGQ0MGJiOTMx
MGMuLjBjNDE0MGE4ZDc5ZWRlZmE1MDIzMzVmZTAxODMxMmY0NzVmMTcwZjQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3htbC9YU0xUUHJvY2Vzc29yUXQuY3BwCkBAIC0xNDIsNyArMTQyLDcgQEAgYm9vbCBYU0xU
UHJvY2Vzc29yOjp0cmFuc2Zvcm1Ub1N0cmluZyhOb2RlKiBzb3VyY2VOb2RlLCBTdHJpbmcmLCBT
dHJpbmcmIHJlc3VsdFMKIAogICAgIFhTTFRQcm9jZXNzb3I6OlBhcmFtZXRlck1hcDo6aXRlcmF0
b3IgZW5kID0gbV9wYXJhbWV0ZXJzLmVuZCgpOwogICAgIGZvciAoWFNMVFByb2Nlc3Nvcjo6UGFy
YW1ldGVyTWFwOjppdGVyYXRvciBpdCA9IG1fcGFyYW1ldGVycy5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpCi0gICAgICAgIHF1ZXJ5LmJpbmRWYXJpYWJsZShRU3RyaW5nKGl0LT5maXJzdCksIFFY
bWxJdGVtKFFWYXJpYW50KFFTdHJpbmcoaXQtPnNlY29uZCkpKSk7CisgICAgICAgIHF1ZXJ5LmJp
bmRWYXJpYWJsZShRU3RyaW5nKGl0LT5rZXkpLCBRWG1sSXRlbShRVmFyaWFudChRU3RyaW5nKGl0
LT52YWx1ZSkpKSk7CiAKICAgICBRU3RyaW5nIHNvdXJjZTsKICAgICBpZiAoc291cmNlSXNEb2N1
bWVudCAmJiBvd25lckRvY3VtZW50LT50cmFuc2Zvcm1Tb3VyY2UoKSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJL
aXQvYmxhY2tiZXJyeS9BcGkvQmFja2luZ1N0b3JlLmNwcAppbmRleCBkNjI2ZmVjMzA1YmNhNTdl
YTkwMzIwNjhmNDc4ZjFhZGVkZjM1ZTM4Li4xNjRlNjVlYjA0YzA5ZGM0NjViNTdiZThkZDZmYWZm
ZTkyNThmODYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL0JhY2tp
bmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9CYWNraW5nU3Rv
cmUuY3BwCkBAIC03MDksOCArNzA5LDggQEAgdm9pZCBCYWNraW5nU3RvcmVQcml2YXRlOjpzZXRC
YWNraW5nU3RvcmVSZWN0KGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0JiBiYWNraW5nU3QKICAgICAv
LyBvdXIgbmV3IGJhY2tpbmcgc3RvcmUgcmVjdC4KICAgICBUaWxlTWFwOjpjb25zdF9pdGVyYXRv
ciB0aWxlTWFwRW5kID0gY3VycmVudE1hcC5lbmQoKTsKICAgICBmb3IgKFRpbGVNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gY3VycmVudE1hcC5iZWdpbigpOyBpdCAhPSB0aWxlTWFwRW5kOyArK2l0
KSB7Ci0gICAgICAgIFRpbGVJbmRleCBvbGRJbmRleCA9IGl0LT5maXJzdDsKLSAgICAgICAgQmFj
a2luZ1N0b3JlVGlsZSogdGlsZSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFRpbGVJbmRleCBvbGRJ
bmRleCA9IGl0LT5rZXk7CisgICAgICAgIEJhY2tpbmdTdG9yZVRpbGUqIHRpbGUgPSBpdC0+dmFs
dWU7CiAKICAgICAgICAgLy8gUmVzZXQgdGhlIG9sZCBpbmRleC4KICAgICAgICAgcmVzZXRUaWxl
KG9sZEluZGV4LCB0aWxlLCBmYWxzZSAvKnJlc2V0QmFja2dyb3VuZCovKTsKQEAgLTc2Niw4ICs3
NjYsOCBAQCB2b2lkIEJhY2tpbmdTdG9yZVByaXZhdGU6OnNldEJhY2tpbmdTdG9yZVJlY3QoY29u
c3QgUGxhdGZvcm06OkludFJlY3QmIGJhY2tpbmdTdAogICAgIHNpemVfdCBpID0gMDsKICAgICBU
aWxlTWFwOjpjb25zdF9pdGVyYXRvciBsZWZ0T3ZlckVuZCA9IGxlZnRPdmVyVGlsZXMuZW5kKCk7
CiAgICAgZm9yIChUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGxlZnRPdmVyVGlsZXMuYmVn
aW4oKTsgaXQgIT0gbGVmdE92ZXJFbmQ7ICsraXQpIHsKLSAgICAgICAgVGlsZUluZGV4IG9sZElu
ZGV4ID0gaXQtPmZpcnN0OwotICAgICAgICBCYWNraW5nU3RvcmVUaWxlKiB0aWxlID0gaXQtPnNl
Y29uZDsKKyAgICAgICAgVGlsZUluZGV4IG9sZEluZGV4ID0gaXQtPmtleTsKKyAgICAgICAgQmFj
a2luZ1N0b3JlVGlsZSogdGlsZSA9IGl0LT52YWx1ZTsKICAgICAgICAgaWYgKGkgPj0gaW5kZXhl
c1RvRmlsbC5zaXplKCkpIHsKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgICAgICAgYnJlYWs7CkBAIC0xNzMxLDcgKzE3MzEsNyBAQCBQbGF0Zm9ybTo6SW50UmVjdCBC
YWNraW5nU3RvcmVQcml2YXRlOjp2aXNpYmxlVGlsZXNSZWN0KCkgY29uc3QKICAgICBUaWxlTWFw
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBjdXJyZW50TWFwLmVuZCgpOwogICAgIGZvciAoVGlsZU1h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjdXJyZW50TWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgewogICAgICAgICBUaWxlUmVjdCB0aWxlUmVjdDsKLSAgICAgICAgdGlsZVJlY3QuZmlyc3Qg
PSBpdC0+Zmlyc3Q7CisgICAgICAgIHRpbGVSZWN0LmZpcnN0ID0gaXQtPmtleTsKICAgICAgICAg
dGlsZVJlY3Quc2Vjb25kID0gdGhpcy0+dGlsZVJlY3QoKTsKICAgICAgICAgUGxhdGZvcm06Oklu
dFJlY3QgdGlsZSA9IG1hcEZyb21UaWxlc1RvVHJhbnNmb3JtZWRDb250ZW50cyh0aWxlUmVjdCk7
CiAgICAgICAgIGlmICh0aWxlLmludGVyc2VjdHModmlzaWJsZUNvbnRlbnRzUmVjdCgpKSkKQEAg
LTE3OTIsNyArMTc5Miw3IEBAIHZvaWQgQmFja2luZ1N0b3JlUHJpdmF0ZTo6cmVzZXRUaWxlcyhi
b29sIHJlc2V0QmFja2dyb3VuZCkKIAogICAgIFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IGN1cnJlbnRNYXAuZW5kKCk7CiAgICAgZm9yIChUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9
IGN1cnJlbnRNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICByZXNldFRpbGUo
aXQtPmZpcnN0LCBpdC0+c2Vjb25kLCByZXNldEJhY2tncm91bmQpOworICAgICAgICByZXNldFRp
bGUoaXQtPmtleSwgaXQtPnZhbHVlLCByZXNldEJhY2tncm91bmQpOwogfQogCiB2b2lkIEJhY2tp
bmdTdG9yZVByaXZhdGU6OnVwZGF0ZVRpbGVzKGJvb2wgdXBkYXRlVmlzaWJsZSwgYm9vbCBpbW1l
ZGlhdGUpCkBAIC0xODA1LDEwICsxODA1LDEwIEBAIHZvaWQgQmFja2luZ1N0b3JlUHJpdmF0ZTo6
dXBkYXRlVGlsZXMoYm9vbCB1cGRhdGVWaXNpYmxlLCBib29sIGltbWVkaWF0ZSkKIAogICAgIFRp
bGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGN1cnJlbnRNYXAuZW5kKCk7CiAgICAgZm9yIChU
aWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGN1cnJlbnRNYXAuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7Ci0gICAgICAgIGJvb2wgaXNWaXNpYmxlID0gaXNUaWxlVmlzaWJsZShpdC0+Zmly
c3QpOworICAgICAgICBib29sIGlzVmlzaWJsZSA9IGlzVGlsZVZpc2libGUoaXQtPmtleSk7CiAg
ICAgICAgIGlmICghdXBkYXRlVmlzaWJsZSAmJiBpc1Zpc2libGUpCiAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgdXBkYXRlVGlsZShpdC0+Zmlyc3QsIGltbWVkaWF0ZSk7CisgICAgICAg
IHVwZGF0ZVRpbGUoaXQtPmtleSwgaW1tZWRpYXRlKTsKICAgICB9CiB9CiAKQEAgLTE4MjksOCAr
MTgyOSw4IEBAIHZvaWQgQmFja2luZ1N0b3JlUHJpdmF0ZTo6dXBkYXRlVGlsZXNGb3JTY3JvbGxP
ck5vdFJlbmRlcmVkUmVnaW9uKGJvb2wgY2hlY2tMb2FkCiAKICAgICBUaWxlTWFwOjpjb25zdF9p
dGVyYXRvciBlbmQgPSBjdXJyZW50TWFwLmVuZCgpOwogICAgIGZvciAoVGlsZU1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBjdXJyZW50TWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAg
ICAgICBUaWxlSW5kZXggaW5kZXggPSBpdC0+Zmlyc3Q7Ci0gICAgICAgIEJhY2tpbmdTdG9yZVRp
bGUqIHRpbGUgPSBpdC0+c2Vjb25kOworICAgICAgICBUaWxlSW5kZXggaW5kZXggPSBpdC0+a2V5
OworICAgICAgICBCYWNraW5nU3RvcmVUaWxlKiB0aWxlID0gaXQtPnZhbHVlOwogICAgICAgICBi
b29sIGlzVmlzaWJsZSA9IGlzVGlsZVZpc2libGUoaW5kZXgpOwogICAgICAgICAvLyBUaGUgcmVj
dCBpbiB0cmFuc2Zvcm1lZCBjb250ZW50cyBjb29yZGluYXRlcy4KICAgICAgICAgUGxhdGZvcm06
OkludFJlY3QgcmVjdChvcmlnaW5PZlRpbGUoaW5kZXgpLCB0aWxlU2l6ZSgpKTsKQEAgLTE5NzMs
OCArMTk3Myw4IEBAIEJhY2tpbmdTdG9yZVByaXZhdGU6OlRpbGVSZWN0TGlzdCBCYWNraW5nU3Rv
cmVQcml2YXRlOjptYXBGcm9tVHJhbnNmb3JtZWRDb250ZW50CiAgICAgVGlsZVJlY3RMaXN0IHRp
bGVSZWN0TGlzdDsKICAgICBUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSB0aWxlTWFwLmVu
ZCgpOwogICAgIGZvciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSB0aWxlTWFwLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBUaWxlSW5kZXggaW5kZXggPSBpdC0+Zmly
c3Q7Ci0gICAgICAgIEJhY2tpbmdTdG9yZVRpbGUqIHRpbGUgPSBpdC0+c2Vjb25kOworICAgICAg
ICBUaWxlSW5kZXggaW5kZXggPSBpdC0+a2V5OworICAgICAgICBCYWNraW5nU3RvcmVUaWxlKiB0
aWxlID0gaXQtPnZhbHVlOwogCiAgICAgICAgIC8vIE5lZWQgdG8gbWFwIHRoZSByZWN0IHRvIHRp
bGUgY29vcmRpbmF0ZXMuCiAgICAgICAgIFBsYXRmb3JtOjpJbnRSZWN0IHIgPSByZWN0OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L05vdGlmaWNh
dGlvblByZXNlbnRlckltcGwuY3BwIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVT
dXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlckltcGwuY3BwCmluZGV4IDZiMjkyMTAyOTQ2Mjc3
ZGEyOGU3OThkN2VlZGY4YjkzOWM1MzE5YzcuLjQ4Y2NmM2FjNTFhYmRlMzY1YWIwMjc1OWQxZGFk
YzQxNmZjMDBmNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3Jl
U3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbC5jcHAK
QEAgLTgxLDcgKzgxLDcgQEAgdm9pZCBOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpjYW5jZWwo
Tm90aWZpY2F0aW9uKiBub3RpZmljYXRpb24pCiAgICAgaWYgKGl0ID09IG1fbm90aWZpY2F0aW9u
cy5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wbGF0Zm9ybVByZXNlbnRlci0+Y2Fu
Y2VsKHN0ZDo6c3RyaW5nKGl0LT5zZWNvbmQudXRmOCgpLmRhdGEoKSkpOworICAgIG1fcGxhdGZv
cm1QcmVzZW50ZXItPmNhbmNlbChzdGQ6OnN0cmluZyhpdC0+dmFsdWUudXRmOCgpLmRhdGEoKSkp
OwogICAgIG1fbm90aWZpY2F0aW9ucy5yZW1vdmUoaXQpOwogfQogCkBAIC0xMDgsMTIgKzEwOCwx
MiBAQCB2b2lkIE5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6Om9uUGVybWlzc2lvbihjb25zdCBz
dGQ6OnN0cmluZyYgZG9tYWluLCBib29sIGlzQQogICAgIFN0cmluZyBkb21haW5TdHJpbmcgPSBT
dHJpbmc6OmZyb21VVEY4KGRvbWFpbi5jX3N0cigpKTsKICAgICBQZXJtaXNzaW9uUmVxdWVzdE1h
cDo6aXRlcmF0b3IgaXQgPSBtX3Blcm1pc3Npb25SZXF1ZXN0cy5iZWdpbigpOwogICAgIGZvciAo
OyBpdCAhPSBtX3Blcm1pc3Npb25SZXF1ZXN0cy5lbmQoKTsgKytpdCkgewotICAgICAgICBpZiAo
aXQtPmZpcnN0LT51cmwoKS5ob3N0KCkgIT0gZG9tYWluU3RyaW5nKQorICAgICAgICBpZiAoaXQt
PmtleS0+dXJsKCkuaG9zdCgpICE9IGRvbWFpblN0cmluZykKICAgICAgICAgICAgIGNvbnRpbnVl
OwogCiAgICAgICAgIGlmIChpc0FsbG93ZWQpIHsKICAgICAgICAgICAgIG1fYWxsb3dlZERvbWFp
bnMuYWRkKGRvbWFpblN0cmluZyk7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLT5oYW5kbGVFdmVu
dCgpOworICAgICAgICAgICAgaXQtPnZhbHVlLT5oYW5kbGVFdmVudCgpOwogICAgICAgICB9IGVs
c2UKICAgICAgICAgICAgIG1fYWxsb3dlZERvbWFpbnMucmVtb3ZlKGRvbWFpblN0cmluZyk7CiAK
QEAgLTE0NCw5ICsxNDQsOSBAQCB2b2lkIE5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6Om5vdGlm
aWNhdGlvbkNsaWNrZWQoY29uc3Qgc3RkOjpzdHJpbmcmIGlkKQogICAgIFN0cmluZyBpZFN0cmlu
ZyA9IFN0cmluZzo6ZnJvbVVURjgoaWQuY19zdHIoKSk7CiAgICAgTm90aWZpY2F0aW9uTWFwOjpp
dGVyYXRvciBpdCA9IG1fbm90aWZpY2F0aW9ucy5iZWdpbigpOwogICAgIGZvciAoOyBpdCAhPSBt
X25vdGlmaWNhdGlvbnMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQgPT0g
aWRTdHJpbmcgJiYgaXQtPmZpcnN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpIHsKLSAgICAg
ICAgICAgIFJlZlB0cjxOb3RpZmljYXRpb24+IG5vdGlmaWNhdGlvbiA9IGl0LT5maXJzdDsKLSAg
ICAgICAgICAgIGl0LT5maXJzdC0+ZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFt
ZXMoKS5jbGlja0V2ZW50LCBmYWxzZSwgdHJ1ZSkpOworICAgICAgICBpZiAoaXQtPnZhbHVlID09
IGlkU3RyaW5nICYmIGl0LT5rZXktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkgeworICAgICAg
ICAgICAgUmVmUHRyPE5vdGlmaWNhdGlvbj4gbm90aWZpY2F0aW9uID0gaXQtPmtleTsKKyAgICAg
ICAgICAgIGl0LT5rZXktPmRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCku
Y2xpY2tFdmVudCwgZmFsc2UsIHRydWUpKTsKICAgICAgICAgICAgIG1fbm90aWZpY2F0aW9ucy5y
ZW1vdmUobm90aWZpY2F0aW9uKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L1VzZXJNZWRp
YUNsaWVudEltcGwuY3BwIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0
L1VzZXJNZWRpYUNsaWVudEltcGwuY3BwCmluZGV4IDZiMDlmMmE2NDExM2I5ZDVkZDI0NTUyZmI3
ODM4MjA4YjQwNjRiYjIuLjFhMmU3YjJmZmU0M2MyMTAzNDI0NGQzYTI1ODU3ODhhNjRlOTg2MGQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9Vc2Vy
TWVkaWFDbGllbnRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29y
ZVN1cHBvcnQvVXNlck1lZGlhQ2xpZW50SW1wbC5jcHAKQEAgLTEyOSw3ICsxMjksNyBAQCB2b2lk
IFVzZXJNZWRpYUNsaWVudEltcGw6OmNhbmNlbFVzZXJNZWRpYVJlcXVlc3QoVXNlck1lZGlhUmVx
dWVzdCogcmVxdWVzdCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgU2VjdXJpdHlPcmlnaW4qIG9y
aWdpbiA9IHJlcXVlc3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+c2VjdXJpdHlPcmlnaW4o
KTsKLSAgICBtX3BhZ2UtPmNsaWVudCgpLT5jYW5jZWxVc2VyTWVkaWFSZXF1ZXN0KFdlYlVzZXJN
ZWRpYVJlcXVlc3QocmVxdWVzdC0+YXVkaW8oKSwgcmVxdWVzdC0+dmlkZW8oKSwgb3JpZ2luLT50
b1N0cmluZygpLnV0ZjgoKS5kYXRhKCksIGl0LT5zZWNvbmQuZ2V0KCkpKTsKKyAgICBtX3BhZ2Ut
PmNsaWVudCgpLT5jYW5jZWxVc2VyTWVkaWFSZXF1ZXN0KFdlYlVzZXJNZWRpYVJlcXVlc3QocmVx
dWVzdC0+YXVkaW8oKSwgcmVxdWVzdC0+dmlkZW8oKSwgb3JpZ2luLT50b1N0cmluZygpLnV0Zjgo
KS5kYXRhKCksIGl0LT52YWx1ZS5nZXQoKSkpOwogICAgIHVzZXJNZWRpYVJlcXVlc3RzTWFwKCku
cmVtb3ZlKGl0KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dl
YktpdFN1cHBvcnQvQWJvdXREYXRhLmNwcCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJL
aXRTdXBwb3J0L0Fib3V0RGF0YS5jcHAKaW5kZXggMjQyNjBiMDM5ZjUzYjU2ODU5YTVkNGZiZjZh
Mjc3MDQ2ZDc4ZjdhYS4uYTg1MDdmNmJiOTZlM2YwODRjNWEwZmFjMTE5MDE4MjMyODAxOTc1NCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvQWJvdXRE
YXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9BYm91
dERhdGEuY3BwCkBAIC0yMDQsNyArMjA0LDcgQEAgc3RhdGljIHZvaWQgZHVtcEpTQ1R5cGVDb3Vu
dFNldFRvVGFibGVIVE1MKFN0cmluZyYgdGFibGVIVE1MLCBKU0M6OlR5cGVDb3VudFNldCoKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgZm9yIChKU0M6OlR5cGVDb3VudFNldDo6Y29uc3RfaXRlcmF0
b3IgaXRlciA9IHR5cGVDb3VudFNldC0+YmVnaW4oKTsgaXRlciAhPSB0eXBlQ291bnRTZXQtPmVu
ZCgpOyArK2l0ZXIpCi0gICAgICAgIHRhYmxlSFRNTCArPSBudW1iZXJUb0hUTUxUcihpdGVyLT5m
aXJzdCwgaXRlci0+c2Vjb25kKTsKKyAgICAgICAgdGFibGVIVE1MICs9IG51bWJlclRvSFRNTFRy
KGl0ZXItPmtleSwgaXRlci0+dmFsdWUpOwogfQogCiBzdGF0aWMgU3RyaW5nIG1lbW9yeVBhZ2Uo
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvRnJh
bWVMYXllcnMuY3BwIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvRnJh
bWVMYXllcnMuY3BwCmluZGV4IGE0OWY1OTRmMmMyMGMyYzMxNzkzMjM5MmQ3MWE1NDU2ODliNWM0
NjcuLmM0MDIzZGUzYzlmYjE5ZDE4NzAxZjBjMTcxYjMyNjAxMTVmZGRkNTIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0ZyYW1lTGF5ZXJzLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9GcmFtZUxheWVycy5j
cHAKQEAgLTkxLDcgKzkxLDcgQEAgdm9pZCBGcmFtZUxheWVyczo6cmVtb3ZlTGF5ZXJCeUZyYW1l
KEZyYW1lKiBmcmFtZSkKICAgICBBU1NFUlQoZnJhbWUpOwogICAgIEZyYW1lTGF5ZXJNYXA6Oml0
ZXJhdG9yIGl0ID0gbV9mcmFtZUxheWVycy5maW5kKGZyYW1lKTsKICAgICBpZiAoaXQgIT0gbV9m
cmFtZUxheWVycy5lbmQoKSkgewotICAgICAgICBMYXllcldlYktpdFRocmVhZCogbGF5ZXIgPSBp
dC0+c2Vjb25kOworICAgICAgICBMYXllcldlYktpdFRocmVhZCogbGF5ZXIgPSBpdC0+dmFsdWU7
CiAgICAgICAgIGlmIChsYXllci0+c3VwZXJsYXllcigpKQogICAgICAgICAgICAgbGF5ZXItPnJl
bW92ZUZyb21TdXBlcmxheWVyKCk7CiAgICAgICAgIG1fZnJhbWVMYXllcnMucmVtb3ZlKGl0KTsK
QEAgLTEwNCwxNSArMTA0LDE1IEBAIHZvaWQgRnJhbWVMYXllcnM6OmNvbW1pdE9uV2ViS2l0VGhy
ZWFkKGRvdWJsZSBzY2FsZSkKICAgICBBU1NFUlQobV9yb290TGF5ZXIpOwogICAgIGlmICghaXNS
b290TGF5ZXJNYWluRnJhbWVMYXllcigpKSB7CiAgICAgICAgIGZvciAoRnJhbWVMYXllck1hcDo6
aXRlcmF0b3IgaXQgPSBtX2ZyYW1lTGF5ZXJzLmJlZ2luKCk7IGl0ICE9IG1fZnJhbWVMYXllcnMu
ZW5kKCk7ICsraXQpCi0gICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRBYnNvbHV0ZU9mZnNldChm
cmFtZUxheWVyQWJzb2x1dGVPZmZzZXQoaXQtPmZpcnN0KSk7CisgICAgICAgICAgICBpdC0+dmFs
dWUtPnNldEFic29sdXRlT2Zmc2V0KGZyYW1lTGF5ZXJBYnNvbHV0ZU9mZnNldChpdC0+a2V5KSk7
CiAgICAgfQogICAgIG1fcm9vdExheWVyLT5jb21taXRPbldlYktpdFRocmVhZChzY2FsZSk7CiB9
CiAKIHZvaWQgRnJhbWVMYXllcnM6OmNhbGN1bGF0ZVJvb3RMYXllcigpCiB7Ci0gICAgaWYgKG1f
ZnJhbWVMYXllcnMuc2l6ZSgpID09IDEgJiYgbV9mcmFtZUxheWVycy5iZWdpbigpLT5maXJzdCA9
PSBtX3BhZ2VQcml2YXRlLT5tX21haW5GcmFtZSkKLSAgICAgICAgbV9yb290TGF5ZXIgPSBtX2Zy
YW1lTGF5ZXJzLmJlZ2luKCktPnNlY29uZDsKKyAgICBpZiAobV9mcmFtZUxheWVycy5zaXplKCkg
PT0gMSAmJiBtX2ZyYW1lTGF5ZXJzLmJlZ2luKCktPmtleSA9PSBtX3BhZ2VQcml2YXRlLT5tX21h
aW5GcmFtZSkKKyAgICAgICAgbV9yb290TGF5ZXIgPSBtX2ZyYW1lTGF5ZXJzLmJlZ2luKCktPnZh
bHVlOwogICAgIGVsc2UgaWYgKG1fcm9vdEdyYXBoaWNzTGF5ZXIpCiAgICAgICAgIG1fcm9vdExh
eWVyID0gbV9yb290R3JhcGhpY3NMYXllci0+cGxhdGZvcm1MYXllcigpOwogICAgIGVsc2UKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdlb2xvY2F0aW9uUGVybWlz
c2lvblJlcXVlc3RNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdl
b2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyLmNwcAppbmRleCA0YzBlZDljZDcxN2I2
ZjRkNWFhNmFmYWY5NzBiZWI2OTY3OTY4OWQzLi4xZWVhYzY2N2JkZjY2YjNmMTkzZmIzMzVhMzg3
MTI4ZmJjOTEyNjc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJH
ZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuY3Bw
CkBAIC02NCw3ICs2NCw3IEBAIGJvb2wgV2ViR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1h
bmFnZXI6OnJlbW92ZShjb25zdCBXZWJLaXQ6OldlYkdlb2xvY2F0aW9uCiAgICAgR2VvbG9jYXRp
b25JZE1hcDo6aXRlcmF0b3IgaXQgPSBtX3ByaXZhdGUtPm1fZ2VvbG9jYXRpb25JZE1hcC5maW5k
KGdlb2xvY2F0aW9uKTsKICAgICBpZiAoaXQgPT0gbV9wcml2YXRlLT5tX2dlb2xvY2F0aW9uSWRN
YXAuZW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZCA9IGl0LT5zZWNvbmQ7Cisg
ICAgaWQgPSBpdC0+dmFsdWU7CiAgICAgbV9wcml2YXRlLT5tX2dlb2xvY2F0aW9uSWRNYXAucmVt
b3ZlKGl0KTsKICAgICBtX3ByaXZhdGUtPm1faWRHZW9sb2NhdGlvbk1hcC5yZW1vdmUoaWQpOwog
ICAgIHJldHVybiB0cnVlOwpAQCAtNzUsNyArNzUsNyBAQCBib29sIFdlYkdlb2xvY2F0aW9uUGVy
bWlzc2lvblJlcXVlc3RNYW5hZ2VyOjpyZW1vdmUoaW50IGlkLCBXZWJLaXQ6OldlYkdlb2xvY2F0
aQogICAgIElkR2VvbG9jYXRpb25NYXA6Oml0ZXJhdG9yIGl0ID0gbV9wcml2YXRlLT5tX2lkR2Vv
bG9jYXRpb25NYXAuZmluZChpZCk7CiAgICAgaWYgKGl0ID09IG1fcHJpdmF0ZS0+bV9pZEdlb2xv
Y2F0aW9uTWFwLmVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgR2VvbG9jYXRpb24q
IGdlb2xvY2F0aW9uID0gaXQtPnNlY29uZDsKKyAgICBHZW9sb2NhdGlvbiogZ2VvbG9jYXRpb24g
PSBpdC0+dmFsdWU7CiAgICAgcGVybWlzc2lvblJlcXVlc3QgPSBXZWJHZW9sb2NhdGlvblBlcm1p
c3Npb25SZXF1ZXN0KGdlb2xvY2F0aW9uKTsKICAgICBtX3ByaXZhdGUtPm1faWRHZW9sb2NhdGlv
bk1hcC5yZW1vdmUoaXQpOwogICAgIG1fcHJpdmF0ZS0+bV9nZW9sb2NhdGlvbklkTWFwLnJlbW92
ZShnZW9sb2NhdGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJJREJNZXRhZGF0YS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJNZXRh
ZGF0YS5jcHAKaW5kZXggMDFkODc4YTBhOWYyYzFjODkxNDkxOTFiYzhjODcxZDhjZGNmNjUzNy4u
ZjJmYzI4NTk0NDRjNDhhNzJkZDk0YWRjMTFkMTg4MTdmNWViNDVkOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCTWV0YWRhdGEuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQk1ldGFkYXRhLmNwcApAQCAtNDYsNyArNDYsNyBAQCBX
ZWJJREJNZXRhZGF0YTo6V2ViSURCTWV0YWRhdGEoY29uc3QgV2ViQ29yZTo6SURCRGF0YWJhc2VN
ZXRhZGF0YSYgbWV0YWRhdGEpCiAKICAgICBzaXplX3QgaSA9IDA7CiAgICAgZm9yIChJREJEYXRh
YmFzZU1ldGFkYXRhOjpPYmplY3RTdG9yZU1hcDo6Y29uc3RfaXRlcmF0b3Igc3RvcmVJdGVyYXRv
ciA9IG1ldGFkYXRhLm9iamVjdFN0b3Jlcy5iZWdpbigpOyBzdG9yZUl0ZXJhdG9yICE9IG1ldGFk
YXRhLm9iamVjdFN0b3Jlcy5lbmQoKTsgKytzdG9yZUl0ZXJhdG9yKSB7Ci0gICAgICAgIGNvbnN0
IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlID0gc3RvcmVJdGVyYXRvci0+c2Vj
b25kOworICAgICAgICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZSA9
IHN0b3JlSXRlcmF0b3ItPnZhbHVlOwogICAgICAgICBPYmplY3RTdG9yZSB3ZWJPYmplY3RTdG9y
ZTsKICAgICAgICAgd2ViT2JqZWN0U3RvcmUubmFtZSA9IG9iamVjdFN0b3JlLm5hbWU7CiAgICAg
ICAgIHdlYk9iamVjdFN0b3JlLmtleVBhdGggPSBvYmplY3RTdG9yZS5rZXlQYXRoOwpAQCAtNTUs
NyArNTUsNyBAQCBXZWJJREJNZXRhZGF0YTo6V2ViSURCTWV0YWRhdGEoY29uc3QgV2ViQ29yZTo6
SURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEpCiAKICAgICAgICAgc2l6ZV90IGogPSAwOwog
ICAgICAgICBmb3IgKElEQk9iamVjdFN0b3JlTWV0YWRhdGE6OkluZGV4TWFwOjpjb25zdF9pdGVy
YXRvciBpbmRleEl0ZXJhdG9yID0gb2JqZWN0U3RvcmUuaW5kZXhlcy5iZWdpbigpOyBpbmRleEl0
ZXJhdG9yICE9IG9iamVjdFN0b3JlLmluZGV4ZXMuZW5kKCk7ICsraW5kZXhJdGVyYXRvcikgewot
ICAgICAgICAgICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXggPSBpbmRleEl0ZXJhdG9y
LT5zZWNvbmQ7CisgICAgICAgICAgICBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleCA9IGlu
ZGV4SXRlcmF0b3ItPnZhbHVlOwogICAgICAgICAgICAgSW5kZXggd2ViSW5kZXg7CiAgICAgICAg
ICAgICB3ZWJJbmRleC5uYW1lID0gaW5kZXgubmFtZTsKICAgICAgICAgICAgIHdlYkluZGV4Lmtl
eVBhdGggPSBpbmRleC5rZXlQYXRoOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViSW50ZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkludGVu
dC5jcHAKaW5kZXggNTU3NzVlY2ZjZGMxNjIwNGU1ODQwNmExNTc4YWU4ZWI2Njg3ZWQ4Yy4uMDQx
YzdmMmU5YzUwMzU3NTliZDhlM2ViYjM0M2ZjNGNmZmRiN2QwZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW50ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJJbnRlbnQuY3BwCkBAIC0xODgsNyArMTg4LDcgQEAgV2ViU3RyaW5nIFdl
YkludGVudDo6ZXh0cmFzVmFsdWUoY29uc3QgV2ViU3RyaW5nJiBuYW1lKSBjb25zdAogICAgIFdU
Rjo6SGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIHZhbCA9IG1fcHJpdmF0
ZS0+ZXh0cmFzKCkuZmluZChuYW1lKTsKICAgICBpZiAodmFsID09IG1fcHJpdmF0ZS0+ZXh0cmFz
KCkuZW5kKCkpCiAgICAgICAgIHJldHVybiBXZWJTdHJpbmcoKTsKLSAgICByZXR1cm4gdmFsLT5z
ZWNvbmQ7CisgICAgcmV0dXJuIHZhbC0+dmFsdWU7CiAjZWxzZQogICAgIHJldHVybiBXZWJTdHJp
bmcoKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9X
ZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL1dlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXJUZXN0LmNwcAppbmRleCAzNTg5
ODNiODM5OTMxNGNkYTAzN2M4YzAzMjQ5ZWU5YjY3MmU5NjdiLi4yNDUxNGNkNThmYmZkMDBhYWE4
ODcyNDJhMWFjMzYzMzFjYWViNzgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL1dlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXJUZXN0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXJUZXN0LmNw
cApAQCAtMTAzLDEwICsxMDMsMTAgQEAgVEVTVF9GKFdlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNo
ZXJUZXN0LCBUZXN0UGFyYW1ldGVycykKICAgICBFWFBFQ1RfRVEoMiwgbV9wYXJzZWRQYXJhbWV0
ZXJzWzBdLnNpemUoKSk7CiAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46Oml0ZXJhdG9yIHBh
cmFtZXRlciA9IG1fcGFyc2VkUGFyYW1ldGVyc1swXS5maW5kKCJtYXgtY2hhbm5lbHMiKTsKICAg
ICBFWFBFQ1RfVFJVRShwYXJhbWV0ZXIgIT0gbV9wYXJzZWRQYXJhbWV0ZXJzWzBdLmVuZCgpKTsK
LSAgICBFWFBFQ1RfRVEoIjQiLCBwYXJhbWV0ZXItPnNlY29uZCk7CisgICAgRVhQRUNUX0VRKCI0
IiwgcGFyYW1ldGVyLT52YWx1ZSk7CiAgICAgcGFyYW1ldGVyID0gbV9wYXJzZWRQYXJhbWV0ZXJz
WzBdLmZpbmQoImZsb3ctY29udHJvbCIpOwogICAgIEVYUEVDVF9UUlVFKHBhcmFtZXRlciAhPSBt
X3BhcnNlZFBhcmFtZXRlcnNbMF0uZW5kKCkpOwotICAgIEVYUEVDVF9UUlVFKHBhcmFtZXRlci0+
c2Vjb25kLmlzTnVsbCgpKTsKKyAgICBFWFBFQ1RfVFJVRShwYXJhbWV0ZXItPnZhbHVlLmlzTnVs
bCgpKTsKIH0KIAogVEVTVF9GKFdlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXJUZXN0LCBUZXN0
TXVsdGlwbGUpCkBAIC0xMzEsMTIgKzEzMSwxMiBAQCBURVNUX0YoV2ViU29ja2V0RXh0ZW5zaW9u
RGlzcGF0Y2hlclRlc3QsIFRlc3RNdWx0aXBsZSkKICAgICAgICAgY29uc3QgSGFzaE1hcDxTdHJp
bmcsIFN0cmluZz4mIHBhcnNlZFBhcmFtZXRlcnMgPSBtX3BhcnNlZFBhcmFtZXRlcnNbaV07CiAg
ICAgICAgIEVYUEVDVF9FUShleHBlY3RlZFtpXS5wYXJhbWV0ZXJzLnNpemUoKSwgbV9wYXJzZWRQ
YXJhbWV0ZXJzW2ldLnNpemUoKSk7CiAgICAgICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIFN0cmlu
Zz46OmNvbnN0X2l0ZXJhdG9yIGl0ZXJhdG9yID0gZXhwZWN0ZWRQYXJhbWV0ZXJzLmJlZ2luKCk7
IGl0ZXJhdG9yICE9IGV4cGVjdGVkUGFyYW1ldGVycy5lbmQoKTsgKytpdGVyYXRvcikgewotICAg
ICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIHBhcnNlZCA9
IHBhcnNlZFBhcmFtZXRlcnMuZmluZChpdGVyYXRvci0+Zmlyc3QpOworICAgICAgICAgICAgSGFz
aE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIHBhcnNlZCA9IHBhcnNlZFBhcmFt
ZXRlcnMuZmluZChpdGVyYXRvci0+a2V5KTsKICAgICAgICAgICAgIEVYUEVDVF9UUlVFKHBhcnNl
ZCAhPSBwYXJzZWRQYXJhbWV0ZXJzLmVuZCgpKTsKLSAgICAgICAgICAgIGlmIChpdGVyYXRvci0+
c2Vjb25kLmlzTnVsbCgpKQotICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVFKHBhcnNlZC0+c2Vj
b25kLmlzTnVsbCgpKTsKKyAgICAgICAgICAgIGlmIChpdGVyYXRvci0+dmFsdWUuaXNOdWxsKCkp
CisgICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUocGFyc2VkLT52YWx1ZS5pc051bGwoKSk7CiAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgRVhQRUNUX0VRKGl0ZXJhdG9yLT5zZWNv
bmQsIHBhcnNlZC0+c2Vjb25kKTsKKyAgICAgICAgICAgICAgICBFWFBFQ1RfRVEoaXRlcmF0b3It
PnZhbHVlLCBwYXJzZWQtPnZhbHVlKTsKICAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEVm
bC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1
cHBvcnRFZmwuY3BwCmluZGV4IDMzYmIwODhjNjE3ZDc4ODkyMzVhOTViZDhlNjBiY2VkNmI4OGJl
NGIuLjA3OWFjMWZkZmFmZTQ0ZWQwMjFkNWY3N2MxMTdjNjQ0Njg0YWQ4NzEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEVm
bC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRy
ZWVTdXBwb3J0RWZsLmNwcApAQCAtNDc4LDcgKzQ3OCw3IEBAIHZvaWQgRHVtcFJlbmRlclRyZWVT
dXBwb3J0RWZsOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZChjb25zdCBFdmFzX09iamVj
dCoKICAgICBlbHNlIHsKICAgICAgICAgV1RGOjpIYXNoTWFwPGludCwgUmVmUHRyPFdlYkNvcmU6
OkRPTVdyYXBwZXJXb3JsZCA+ID46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gd29ybGRNYXAuZmluZCh3
b3JsZElEKTsKICAgICAgICAgaWYgKGl0ICE9IHdvcmxkTWFwLmVuZCgpKQotICAgICAgICAgICAg
c2NyaXB0V29ybGQgPSAoKml0KS5zZWNvbmQ7CisgICAgICAgICAgICBzY3JpcHRXb3JsZCA9ICgq
aXQpLnZhbHVlOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIHNjcmlwdFdvcmxkID0gV2Vi
Q29yZTo6U2NyaXB0Q29udHJvbGxlcjo6Y3JlYXRlV29ybGQoKTsKICAgICAgICAgICAgIHdvcmxk
TWFwLnNldCh3b3JsZElELCBzY3JpcHRXb3JsZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2VmbC9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNFZmwuY3BwIGIvU291cmNlL1dl
YktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzRWZsLmNwcAppbmRleCA1
YjQwMzA4YTIxOTA3NWMwNGZlMTZmMDUzYWE5YzI3ZDMzYWQ0ZDZmLi4wOThkMzAzYTRhYzU5NWM0
Njc2Yjk1NThmMjQyNTYyOTVjNWE3ZTg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9X
ZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvZWZsL1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc0VmbC5jcHAKQEAgLTk5LDgg
Kzk5LDggQEAgdm9pZCBQbGF0Zm9ybVN0cmF0ZWdpZXNFZmw6OmdldFBsdWdpbkluZm8oY29uc3Qg
UGFnZSogcGFnZSwgVmVjdG9yPFBsdWdpbkluZm8+JgogICAgICAgICBmb3IgKE1JTUVUb0Rlc2Ny
aXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBNaW1lQ2xhc3NJbmZvIG1pbWU7CiAK
LSAgICAgICAgICAgIG1pbWUudHlwZSA9IGl0LT5maXJzdDsKLSAgICAgICAgICAgIG1pbWUuZGVz
YyA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICBtaW1lLnR5cGUgPSBpdC0+a2V5OworICAgICAg
ICAgICAgbWltZS5kZXNjID0gaXQtPnZhbHVlOwogICAgICAgICAgICAgbWltZS5leHRlbnNpb25z
ID0gcGFja2FnZS0+bWltZVRvRXh0ZW5zaW9ucygpLmdldChtaW1lLnR5cGUpOwogICAgICAgICAg
ICAgcGx1Z2luSW5mby5taW1lcy5hcHBlbmQobWltZSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfaW50ZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZs
L2V3ay9ld2tfaW50ZW50LmNwcAppbmRleCA3NmMyZDY4ZGFhNzIxMjRlYTViNjFiN2UyNGYwMzRj
MmMwY2RiODFlLi44M2JjZTg3NjRhZjZhZDc5NzQ0MzY5MmY1Mzk2ZTNiYWFiMzU1ODhjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2ludGVudC5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9lZmwvZXdrL2V3a19pbnRlbnQuY3BwCkBAIC0xMjAsNyArMTIwLDcgQEAgY29uc3Qg
Y2hhciogZXdrX2ludGVudF9leHRyYV9nZXQoY29uc3QgRXdrX0ludGVudCogaW50ZW50LCBjb25z
dCBjaGFyKiBrZXkpCiAgICAgV1RGOjpIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRl
cmF0b3IgdmFsID0gY29yZS0+ZXh0cmFzKCkuZmluZChTdHJpbmc6OmZyb21VVEY4KGtleSkpOwog
ICAgIGlmICh2YWwgPT0gY29yZS0+ZXh0cmFzKCkuZW5kKCkpCiAgICAgICAgIHJldHVybiAwOwot
ICAgIHJldHVybiBlaW5hX3N0cmluZ3NoYXJlX2FkZCh2YWwtPnNlY29uZC51dGY4KCkuZGF0YSgp
KTsKKyAgICByZXR1cm4gZWluYV9zdHJpbmdzaGFyZV9hZGQodmFsLT52YWx1ZS51dGY4KCkuZGF0
YSgpKTsKICNlbHNlCiAgICAgcmV0dXJuIDA7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc0d0ay5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNHdGsuY3BwCmlu
ZGV4IDI5MjE3M2FlMjkyZjUxMjExODdlOGJlNTA1MDM5M2Q3YzMzODRjNWEuLjkxMDNjODQ2MDk0
ZDUxZjhmNWI5NDg3NGNkNjdhZjA0Nzk5MDlhZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Z3RrL1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc0d0ay5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzR3RrLmNwcApAQCAt
ODgsOCArODgsOCBAQCB2b2lkIFBsYXRmb3JtU3RyYXRlZ2llc0d0azo6Z2V0UGx1Z2luSW5mbyhj
b25zdCBQYWdlKiBwYWdlLCBWZWN0b3I8UGx1Z2luSW5mbz4mCiAgICAgICAgIE1JTUVUb0Rlc2Ny
aXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWltZVRvRGVzY3JpcHRpb25zLmVuZCgp
OwogICAgICAgICBmb3IgKE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtaW1lVG9EZXNjcmlwdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAg
ICAgICBNaW1lQ2xhc3NJbmZvIG1pbWU7Ci0gICAgICAgICAgICBtaW1lLnR5cGUgPSBpdC0+Zmly
c3Q7Ci0gICAgICAgICAgICBtaW1lLmRlc2MgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgbWlt
ZS50eXBlID0gaXQtPmtleTsKKyAgICAgICAgICAgIG1pbWUuZGVzYyA9IGl0LT52YWx1ZTsKICAg
ICAgICAgICAgIG1pbWUuZXh0ZW5zaW9ucyA9IHBhY2thZ2UtPm1pbWVUb0V4dGVuc2lvbnMoKS5n
ZXQobWltZS50eXBlKTsKICAgICAgICAgICAgIHBsdWdpbkluZm8ubWltZXMuYXBwZW5kKG1pbWUp
OwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
ZmF2aWNvbmRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRmYXZp
Y29uZGF0YWJhc2UuY3BwCmluZGV4IDZiYWJmZTRkZDkyZTUxNDJjZTBjNGY3MmMzOWE2Y2I2YzNk
ZGUxZmYuLmIzYTFkNzVjYTEyYjZhZTBmNjQ1YmY5MmIxMjhhNTgwMGEyMGVjY2YgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRmYXZpY29uZGF0YWJhc2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRmYXZpY29uZGF0YWJhc2UuY3BwCkBA
IC02MTQsMTggKzYxNCwxOCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRGYXZpY29uRGF0YWJhc2VJbXBv
cnRGaW5pc2hlZChXZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRhdGFiYXNlKQogICAgIFZlY3RvcjxT
dHJpbmc+IHRvRGVsZXRlVVJMczsKICAgICBQZW5kaW5nSWNvblJlcXVlc3RNYXA6OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IGRhdGFiYXNlLT5wcml2LT5wZW5kaW5nSWNvblJlcXVlc3RzLmVuZCgpOwog
ICAgIGZvciAoUGVuZGluZ0ljb25SZXF1ZXN0TWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gZGF0
YWJhc2UtPnByaXYtPnBlbmRpbmdJY29uUmVxdWVzdHMuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsr
aXRlcikgewotICAgICAgICBTdHJpbmcgaWNvblVSTCA9IGljb25EYXRhYmFzZSgpLnN5bmNocm9u
b3VzSWNvblVSTEZvclBhZ2VVUkwoaXRlci0+Zmlyc3QpOworICAgICAgICBTdHJpbmcgaWNvblVS
TCA9IGljb25EYXRhYmFzZSgpLnN5bmNocm9ub3VzSWNvblVSTEZvclBhZ2VVUkwoaXRlci0+a2V5
KTsKICAgICAgICAgaWYgKCFpY29uVVJMLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogCi0gICAgICAgIFBlbmRpbmdJY29uUmVxdWVzdFZlY3RvciogaWNvbnMgPSBpdGVyLT5zZWNv
bmQ7CisgICAgICAgIFBlbmRpbmdJY29uUmVxdWVzdFZlY3RvciogaWNvbnMgPSBpdGVyLT52YWx1
ZTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpY29ucy0+c2l6ZSgpOyArK2kpIHsK
ICAgICAgICAgICAgIFBlbmRpbmdJY29uUmVxdWVzdCogcmVxdWVzdCA9IGljb25zLT5hdChpKS5n
ZXQoKTsKICAgICAgICAgICAgIGlmIChyZXF1ZXN0LT5hc3luY1Jlc3VsdCgpKQogICAgICAgICAg
ICAgICAgIHJlcXVlc3QtPmFzeW5jUmVzdWx0Q29tcGxldGUoMCk7CiAgICAgICAgIH0KIAotICAg
ICAgICB0b0RlbGV0ZVVSTHMuYXBwZW5kKGl0ZXItPmZpcnN0KTsKKyAgICAgICAgdG9EZWxldGVV
UkxzLmFwcGVuZChpdGVyLT5rZXkpOwogICAgIH0KIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgdG9EZWxldGVVUkxzLnNpemUoKTsgKytpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdHdlYnBsdWdpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0d2VicGx1Z2luLmNwcAppbmRleCBlMDNiMWVhNmRhMzNiN2UyZjAwMjI1NWNlODc3Nzg2
MjRjZGE3MDhjLi4wMWQwYmI1ZjJiZmQ3MDBmNmIzYzlmYzRmOGU0MjBjNTcyNDg2ZWMyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2VicGx1Z2luLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2VicGx1Z2luLmNwcApAQCAtMjM3LDEw
ICsyMzcsMTAgQEAgR1NMaXN0KiB3ZWJraXRfd2ViX3BsdWdpbl9nZXRfbWltZXR5cGVzKFdlYktp
dFdlYlBsdWdpbiogcGx1Z2luKQogCiAgICAgZm9yIChNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbWltZVRvRGVzY3JpcHRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgewogICAgICAgICBXZWJLaXRXZWJQbHVnaW5NSU1FVHlwZSogbWltZVR5cGUgPSBnX3Ns
aWNlX25ldzAoV2ViS2l0V2ViUGx1Z2luTUlNRVR5cGUpOwotICAgICAgICBtaW1lVHlwZS0+bmFt
ZSA9IGdfc3RyZHVwKGl0LT5maXJzdC51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgbWltZVR5cGUt
PmRlc2NyaXB0aW9uID0gZ19zdHJkdXAoaXQtPnNlY29uZC51dGY4KCkuZGF0YSgpKTsKKyAgICAg
ICAgbWltZVR5cGUtPm5hbWUgPSBnX3N0cmR1cChpdC0+a2V5LnV0ZjgoKS5kYXRhKCkpOworICAg
ICAgICBtaW1lVHlwZS0+ZGVzY3JpcHRpb24gPSBnX3N0cmR1cChpdC0+dmFsdWUudXRmOCgpLmRh
dGEoKSk7CiAKLSAgICAgICAgVmVjdG9yPFN0cmluZz4gZXh0ZW5zaW9ucyA9IHByaXYtPmNvcmVQ
bHVnaW4tPm1pbWVUb0V4dGVuc2lvbnMoKS5nZXQoaXQtPmZpcnN0KTsKKyAgICAgICAgVmVjdG9y
PFN0cmluZz4gZXh0ZW5zaW9ucyA9IHByaXYtPmNvcmVQbHVnaW4tPm1pbWVUb0V4dGVuc2lvbnMo
KS5nZXQoaXQtPmtleSk7CiAgICAgICAgIG1pbWVUeXBlLT5leHRlbnNpb25zID0gc3RhdGljX2Nh
c3Q8Z2NoYXIqKj4oZ19tYWxsb2MwKHNpemVvZihjaGFyKikgKiAoZXh0ZW5zaW9ucy5zaXplKCkg
KyAxKSkpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXh0ZW5zaW9ucy5zaXpl
KCk7IGkrKykKICAgICAgICAgICAgIG1pbWVUeXBlLT5leHRlbnNpb25zW2ldID0gZ19zdHJkdXAo
ZXh0ZW5zaW9uc1tpXS51dGY4KCkuZGF0YSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
bWFjL0hpc3RvcnkvV2ViSGlzdG9yeS5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL0hpc3RvcnkvV2Vi
SGlzdG9yeS5tbQppbmRleCA2OTY0ZmM5NDliNTEyMTczYTZiZGM1ZTcwYjU2MThkMzFjYjY3N2Ez
Li5lNzgxZDMyZmQxZGU5NTBkOTE0YWY0ODM0OTc2NDIwZGY1ODdkYWY3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L21hYy9IaXN0b3J5L1dlYkhpc3RvcnkubW0KKysrIGIvU291cmNlL1dlYktp
dC9tYWMvSGlzdG9yeS9XZWJIaXN0b3J5Lm1tCkBAIC0yMzgsNyArMjM4LDcgQEAgc3RhdGljIGlu
bGluZSBXZWJIaXN0b3J5RGF0ZUtleSBkYXRlS2V5KE5TVGltZUludGVydmFsIGRhdGUpCiAgICAg
ICAgIHJldHVybiBOTzsKIAogICAgIERhdGVUb0VudHJpZXNNYXA6Oml0ZXJhdG9yIGl0ID0gX2Vu
dHJpZXNCeURhdGUtPmZpbmQoZGF0ZUtleSk7Ci0gICAgTlNNdXRhYmxlQXJyYXkgKmVudHJpZXNG
b3JEYXRlID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICBOU011dGFibGVBcnJheSAqZW50cmllc0Zv
ckRhdGUgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgW2VudHJpZXNGb3JEYXRlIHJlbW92ZU9iamVj
dElkZW50aWNhbFRvOmVudHJ5XTsKICAgICAKICAgICAvLyByZW1vdmUgdGhpcyBkYXRlIGVudGly
ZWx5IGlmIHRoZXJlIGFyZSBubyBvdGhlciBlbnRyaWVzIG9uIGl0CkBAIC00NDAsNyArNDQwLDcg
QEAgc3RhdGljIGlubGluZSBXZWJIaXN0b3J5RGF0ZUtleSBkYXRlS2V5KE5TVGltZUludGVydmFs
IGRhdGUpCiAgICAgICAgIGRheXNBc1RpbWVJbnRlcnZhbHMucmVzZXJ2ZUNhcGFjaXR5KF9lbnRy
aWVzQnlEYXRlLT5zaXplKCkpOwogICAgICAgICBEYXRlVG9FbnRyaWVzTWFwOjpjb25zdF9pdGVy
YXRvciBlbmQgPSBfZW50cmllc0J5RGF0ZS0+ZW5kKCk7CiAgICAgICAgIGZvciAoRGF0ZVRvRW50
cmllc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBfZW50cmllc0J5RGF0ZS0+YmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KQotICAgICAgICAgICAgZGF5c0FzVGltZUludGVydmFscy5hcHBlbmQoaXQt
PmZpcnN0KTsKKyAgICAgICAgICAgIGRheXNBc1RpbWVJbnRlcnZhbHMuYXBwZW5kKGl0LT5rZXkp
OwogCiAgICAgICAgIHNvcnQoZGF5c0FzVGltZUludGVydmFscy5iZWdpbigpLCBkYXlzQXNUaW1l
SW50ZXJ2YWxzLmVuZCgpKTsKICAgICAgICAgc2l6ZV90IGNvdW50ID0gZGF5c0FzVGltZUludGVy
dmFscy5zaXplKCk7CkBAIC04OTcsNyArODk3LDcgQEAgV2ViSGlzdG9yeVdyaXRlcjo6V2ViSGlz
dG9yeVdyaXRlcihEYXRlVG9FbnRyaWVzTWFwKiBlbnRyaWVzQnlEYXRlKQogICAgIG1fZGF0ZUtl
eXMucmVzZXJ2ZUNhcGFjaXR5KG1fZW50cmllc0J5RGF0ZS0+c2l6ZSgpKTsKICAgICBEYXRlVG9F
bnRyaWVzTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2VudHJpZXNCeURhdGUtPmVuZCgpOwog
ICAgIGZvciAoRGF0ZVRvRW50cmllc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2VudHJpZXNC
eURhdGUtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgbV9kYXRlS2V5cy5hcHBl
bmQoaXQtPmZpcnN0KTsKKyAgICAgICAgbV9kYXRlS2V5cy5hcHBlbmQoaXQtPmtleSk7CiAgICAg
c29ydChtX2RhdGVLZXlzLmJlZ2luKCksIG1fZGF0ZUtleXMuZW5kKCkpOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tIGIvU291cmNl
L1dlYktpdC9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbQppbmRleCAyOTZkZDZiMjViZDhi
ZGI3N2EzYzY4MGUxMzI0ZTViMzk3ZDI2NmMzLi44ZGU2MzEzOWI3NzQzNzZiYmQxZjdjMTEwNmY2
ZWVkYmRkM2U1YjI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYkNvcmVT
dGF0aXN0aWNzLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3Rp
Y3MubW0KQEAgLTg5LDggKzg5LDggQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAgICAgT3du
UHRyPFR5cGVDb3VudFNldD4gY291bnRzKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEo
KS0+aGVhcC5wcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzKCkpOwogICAgIEhhc2hDb3VudGVkU2V0
PGNvbnN0IGNoYXIqPjo6aXRlcmF0b3IgZW5kID0gY291bnRzLT5lbmQoKTsKICAgICBmb3IgKEhh
c2hDb3VudGVkU2V0PGNvbnN0IGNoYXIqPjo6aXRlcmF0b3IgaXQgPSBjb3VudHMtPmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0LT5z
ZWNvbmQ7ICsraSkKLSAgICAgICAgICAgIFtyZXN1bHQgYWRkT2JqZWN0OltOU1N0cmluZyBzdHJp
bmdXaXRoVVRGOFN0cmluZzppdC0+Zmlyc3RdXTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGl0LT52YWx1ZTsgKytpKQorICAgICAgICAgICAgW3Jlc3VsdCBhZGRPYmplY3Q6W05T
U3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOml0LT5rZXldXTsKICAgICAKICAgICByZXR1cm4g
cmVzdWx0OwogfQpAQCAtMTA0LDggKzEwNCw4IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwog
ICAgIE93blB0cjxUeXBlQ291bnRTZXQ+IGNvdW50cyhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9i
YWxEYXRhKCktPmhlYXAub2JqZWN0VHlwZUNvdW50cygpKTsKICAgICBIYXNoQ291bnRlZFNldDxj
b25zdCBjaGFyKj46Oml0ZXJhdG9yIGVuZCA9IGNvdW50cy0+ZW5kKCk7CiAgICAgZm9yIChIYXNo
Q291bnRlZFNldDxjb25zdCBjaGFyKj46Oml0ZXJhdG9yIGl0ID0gY291bnRzLT5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdC0+c2Vj
b25kOyArK2kpCi0gICAgICAgICAgICBbcmVzdWx0IGFkZE9iamVjdDpbTlNTdHJpbmcgc3RyaW5n
V2l0aFVURjhTdHJpbmc6aXQtPmZpcnN0XV07CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBpdC0+dmFsdWU7ICsraSkKKyAgICAgICAgICAgIFtyZXN1bHQgYWRkT2JqZWN0OltOU1N0
cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzppdC0+a2V5XV07CiAgICAgCiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05l
dHNjYXBlUGx1Z2luSG9zdE1hbmFnZXIubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hv
c3RlZC9OZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyLm1tCmluZGV4IGU0OWQ1MGY0YmNiZDVjMWNi
Y2I4MzdjOGYyOTQ2M2Q0ZGMyZjQ5ZjYuLjNjZTA4OWJlZDI3YTRjMjNhZjIzYzc1MDkyNGE5ZDg5
YWMwYzcxMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05l
dHNjYXBlUGx1Z2luSG9zdE1hbmFnZXIubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lu
cy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlci5tbQpAQCAtNzMsNyArNzMsNyBAQCBO
ZXRzY2FwZVBsdWdpbkhvc3RQcm94eSogTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlcjo6aG9zdEZv
clBsdWdpbihjb25zdCBXVEY6OlN0cgogICAgIAogICAgIC8vIFRoZSBwYWNrYWdlIHdhcyBhbHJl
YWR5IGluIHRoZSBtYXAsIGp1c3QgcmV0dXJuIGl0LgogICAgIGlmICghcmVzdWx0LmlzTmV3RW50
cnkpCi0gICAgICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgIAogICAgIG1hY2hfcG9ydF90IGNs
aWVudFBvcnQ7CiAgICAgaWYgKG1hY2hfcG9ydF9hbGxvY2F0ZShtYWNoX3Rhc2tfc2VsZigpLCBN
QUNIX1BPUlRfUklHSFRfUkVDRUlWRSwgJmNsaWVudFBvcnQpICE9IEtFUk5fU1VDQ0VTUykgewpA
QCAtOTUsNyArOTUsNyBAQCBOZXRzY2FwZVBsdWdpbkhvc3RQcm94eSogTmV0c2NhcGVQbHVnaW5I
b3N0TWFuYWdlcjo6aG9zdEZvclBsdWdpbihjb25zdCBXVEY6OlN0cgogICAgIAogICAgIE5ldHNj
YXBlUGx1Z2luSG9zdFByb3h5KiBob3N0UHJveHkgPSBuZXcgTmV0c2NhcGVQbHVnaW5Ib3N0UHJv
eHkoY2xpZW50UG9ydCwgcGx1Z2luSG9zdFBvcnQsIHBsdWdpbkhvc3RQU04sIHNob3VsZENhY2hl
TWlzc2luZ1Byb3BlcnRpZXNBbmRNZXRob2RzKTsKICAgICAKLSAgICByZXN1bHQuaXRlcmF0b3It
PnNlY29uZCA9IGhvc3RQcm94eTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gaG9zdFBy
b3h5OwogICAgIAogICAgIHJldHVybiBob3N0UHJveHk7CiB9CkBAIC0yMDQsNyArMjA0LDcgQEAg
dm9pZCBOZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyOjpwbHVnaW5Ib3N0RGllZChOZXRzY2FwZVBs
dWdpbkhvc3RQcm94eSogcGx1Z2luSG8KIAogICAgIC8vIFRoaXMgaGFzIE8obikgY29tcGxleGl0
eSBidXQgdGhlIG51bWJlciBvZiBhY3RpdmUgcGx1Zy1pbiBob3N0cyBpcyB2ZXJ5IHNtYWxsIHNv
IGl0IHNob3VsZG4ndCBtYXR0ZXIuCiAgICAgZm9yIChQbHVnaW5Ib3N0TWFwOjppdGVyYXRvciBp
dCA9IG1fcGx1Z2luSG9zdHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlm
IChpdC0+c2Vjb25kID09IHBsdWdpbkhvc3QpIHsKKyAgICAgICAgaWYgKGl0LT52YWx1ZSA9PSBw
bHVnaW5Ib3N0KSB7CiAgICAgICAgICAgICBtX3BsdWdpbkhvc3RzLnJlbW92ZShpdCk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTI4Niw3ICsyODYsNyBAQCB2b2lkIE5ldHNj
YXBlUGx1Z2luSG9zdE1hbmFnZXI6OmRpZENyZWF0ZVdpbmRvdygpCiAgICAgLy8gU2VlIGlmIGFu
eSBvZiBvdXIgaG9zdHMgYXJlIGluIGZ1bGwtc2NyZWVuIG1vZGUuCiAgICAgUGx1Z2luSG9zdE1h
cDo6aXRlcmF0b3IgZW5kID0gbV9wbHVnaW5Ib3N0cy5lbmQoKTsKICAgICBmb3IgKFBsdWdpbkhv
c3RNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wbHVnaW5Ib3N0cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKLSAgICAgICAgTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkqIGhvc3RQcm94eSA9IGl0LT5z
ZWNvbmQ7CisgICAgICAgIE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5KiBob3N0UHJveHkgPSBpdC0+
dmFsdWU7CiAgICAgICAgIAogICAgICAgICBpZiAoIWhvc3RQcm94eS0+aXNNZW51QmFyVmlzaWJs
ZSgpKSB7CiAgICAgICAgICAgICAvLyBNYWtlIG91cnNlbHZlcyB0aGUgZnJvbnQgcHJvY2Vzcy4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1
Z2luSG9zdFByb3h5Lm1tIGIvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2Nh
cGVQbHVnaW5Ib3N0UHJveHkubW0KaW5kZXggMGY5ZjA3ZGRiNDQwNzIzZGJhZjVhNzEyYjhhNDBh
MDk4OTQ3NDhiMi4uNzRjODQ1YWRkODc1MDk5MWE4ZDI0ODg4YmEwY2I0NDU4OWVhZjdhYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5I
b3N0UHJveHkubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2Nh
cGVQbHVnaW5Ib3N0UHJveHkubW0KQEAgLTE0NCw3ICsxNDQsNyBAQCB2b2lkIE5ldHNjYXBlUGx1
Z2luSG9zdFByb3h5OjpwbHVnaW5Ib3N0RGllZCgpCiAgIAogICAgIFBsdWdpbkluc3RhbmNlTWFw
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBpbnN0YW5jZXMuZW5kKCk7CiAgICAgZm9yIChQbHVnaW5J
bnN0YW5jZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBpbnN0YW5jZXMuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5wbHVnaW5Ib3N0RGllZCgpOworICAgICAg
ICBpdC0+dmFsdWUtPnBsdWdpbkhvc3REaWVkKCk7CiAgICAgCiAgICAgTmV0c2NhcGVQbHVnaW5I
b3N0TWFuYWdlcjo6c2hhcmVkKCkucGx1Z2luSG9zdERpZWQodGhpcyk7CiAgICAgCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3Rh
bmNlUHJveHkubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBs
dWdpbkluc3RhbmNlUHJveHkubW0KaW5kZXggOTE2NTZkODQ3MGNiYmVkNGQxNzY3NmI2ZWUzYzU5
N2Q0NTcxN2U1MC4uNzdkYjE0ODliM2M5NDRiYWNmNWE2ODBiMWZmZGM4YmQ4MWJiOGUyYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5J
bnN0YW5jZVByb3h5Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05l
dHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5tbQpAQCAtMTQ1LDcgKzE0NSw3IEBAIHVpbnQzMl90
IE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6TG9jYWxPYmplY3RNYXA6OmlkRm9yT2JqZWN0
KEpTR2xvYmFsRGF0YSYKICAgICAKICAgICBIYXNoTWFwPEpTQzo6SlNPYmplY3QqLCBwYWlyPHVp
bnQzMl90LCB1aW50MzJfdD4gPjo6aXRlcmF0b3IgaXRlciA9IG1fanNPYmplY3RUb0lETWFwLmZp
bmQob2JqZWN0KTsKICAgICBpZiAoaXRlciAhPSBtX2pzT2JqZWN0VG9JRE1hcC5lbmQoKSkKLSAg
ICAgICAgcmV0dXJuIGl0ZXItPnNlY29uZC5maXJzdDsKKyAgICAgICAgcmV0dXJuIGl0ZXItPnZh
bHVlLmZpcnN0OwogICAgIAogICAgIGRvIHsKICAgICAgICAgb2JqZWN0SUQgPSArK21fb2JqZWN0
SURDb3VudGVyOwpAQCAtMTYyLDcgKzE2Miw3IEBAIHZvaWQgTmV0c2NhcGVQbHVnaW5JbnN0YW5j
ZVByb3h5OjpMb2NhbE9iamVjdE1hcDo6cmV0YWluKEpTQzo6SlNPYmplY3QqIG9iamVjdCkKICAg
ICBIYXNoTWFwPEpTQzo6SlNPYmplY3QqLCBwYWlyPHVpbnQzMl90LCB1aW50MzJfdD4gPjo6aXRl
cmF0b3IgaXRlciA9IG1fanNPYmplY3RUb0lETWFwLmZpbmQob2JqZWN0KTsKICAgICBBU1NFUlQo
aXRlciAhPSBtX2pzT2JqZWN0VG9JRE1hcC5lbmQoKSk7CiAKLSAgICBpdGVyLT5zZWNvbmQuc2Vj
b25kID0gaXRlci0+c2Vjb25kLnNlY29uZCArIDE7CisgICAgaXRlci0+dmFsdWUuc2Vjb25kID0g
aXRlci0+dmFsdWUuc2Vjb25kICsgMTsKIH0KIAogdm9pZCBOZXRzY2FwZVBsdWdpbkluc3RhbmNl
UHJveHk6OkxvY2FsT2JqZWN0TWFwOjpyZWxlYXNlKEpTQzo6SlNPYmplY3QqIG9iamVjdCkKQEAg
LTE3MCwxMCArMTcwLDEwIEBAIHZvaWQgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpMb2Nh
bE9iamVjdE1hcDo6cmVsZWFzZShKU0M6OkpTT2JqZWN0KiBvYmplY3QpCiAgICAgSGFzaE1hcDxK
U0M6OkpTT2JqZWN0KiwgcGFpcjx1aW50MzJfdCwgdWludDMyX3Q+ID46Oml0ZXJhdG9yIGl0ZXIg
PSBtX2pzT2JqZWN0VG9JRE1hcC5maW5kKG9iamVjdCk7CiAgICAgQVNTRVJUKGl0ZXIgIT0gbV9q
c09iamVjdFRvSURNYXAuZW5kKCkpOwogCi0gICAgQVNTRVJUKGl0ZXItPnNlY29uZC5zZWNvbmQg
PiAwKTsKLSAgICBpdGVyLT5zZWNvbmQuc2Vjb25kID0gaXRlci0+c2Vjb25kLnNlY29uZCAtIDE7
Ci0gICAgaWYgKCFpdGVyLT5zZWNvbmQuc2Vjb25kKSB7Ci0gICAgICAgIG1faWRUb0pTT2JqZWN0
TWFwLnJlbW92ZShpdGVyLT5zZWNvbmQuZmlyc3QpOworICAgIEFTU0VSVChpdGVyLT52YWx1ZS5z
ZWNvbmQgPiAwKTsKKyAgICBpdGVyLT52YWx1ZS5zZWNvbmQgPSBpdGVyLT52YWx1ZS5zZWNvbmQg
LSAxOworICAgIGlmICghaXRlci0+dmFsdWUuc2Vjb25kKSB7CisgICAgICAgIG1faWRUb0pTT2Jq
ZWN0TWFwLnJlbW92ZShpdGVyLT52YWx1ZS5maXJzdCk7CiAgICAgICAgIG1fanNPYmplY3RUb0lE
TWFwLnJlbW92ZShpdGVyKTsKICAgICB9CiB9CkBAIC0xOTcsMTAgKzE5NywxMCBAQCBib29sIE5l
dHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6TG9jYWxPYmplY3RNYXA6OmZvcmdldCh1aW50MzJf
dCBvYmplY3RJRCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgSGFzaE1hcDxK
U0M6OkpTT2JqZWN0KiwgcGFpcjx1aW50MzJfdCwgdWludDMyX3Q+ID46Oml0ZXJhdG9yIHJJdGVy
ID0gbV9qc09iamVjdFRvSURNYXAuZmluZChpdGVyLT5zZWNvbmQuZ2V0KCkpOworICAgIEhhc2hN
YXA8SlNDOjpKU09iamVjdCosIHBhaXI8dWludDMyX3QsIHVpbnQzMl90PiA+OjppdGVyYXRvciBy
SXRlciA9IG1fanNPYmplY3RUb0lETWFwLmZpbmQoaXRlci0+dmFsdWUuZ2V0KCkpOwogCiAgICAg
Ly8gSWYgdGhlIG9iamVjdCBpcyBiZWluZyBzZW50IHRvIHBsdWctaW4gcmlnaHQgbm93LCB0aGVu
IGl0J3Mgbm90IHRoZSB0aW1lIHRvIGZvcmdldC4KLSAgICBpZiAockl0ZXItPnNlY29uZC5zZWNv
bmQgIT0gMSkKKyAgICBpZiAockl0ZXItPnZhbHVlLnNlY29uZCAhPSAxKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICBtX2pzT2JqZWN0VG9JRE1hcC5yZW1vdmUockl0ZXIpOwpAQCAtMzMw
LDcgKzMzMCw3IEBAIHZvaWQgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpkZXN0cm95KCkK
ICAgICAKICAgICBGcmFtZUxvYWRNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fcGVuZGluZ0ZyYW1lTG9h
ZHMuZW5kKCk7CiAgICAgZm9yIChGcmFtZUxvYWRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wZW5kaW5n
RnJhbWVMb2Fkcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIFsoaXQtPmZpcnN0
KSBfc2V0SW50ZXJuYWxMb2FkRGVsZWdhdGU6bmlsXTsKKyAgICAgICAgWyhpdC0+a2V5KSBfc2V0
SW50ZXJuYWxMb2FkRGVsZWdhdGU6bmlsXTsKIAogICAgIF9XS1BIRGVzdHJveVBsdWdpbkluc3Rh
bmNlKG1fcGx1Z2luSG9zdFByb3h5LT5wb3J0KCksIG1fcGx1Z2luSUQsIHJlcXVlc3RJRCk7CiAg
CkBAIC02NzgsNyArNjc4LDcgQEAgdm9pZCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6Ondl
YkZyYW1lRGlkRmluaXNoTG9hZFdpdGhSZWFzb24oV2ViRnJhbWUqIHdlYkYKICAgICBGcmFtZUxv
YWRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wZW5kaW5nRnJhbWVMb2Fkcy5maW5kKHdlYkZyYW1lKTsK
ICAgICBBU1NFUlQoaXQgIT0gbV9wZW5kaW5nRnJhbWVMb2Fkcy5lbmQoKSk7CiAgICAgICAgIAot
ICAgIFBsdWdpblJlcXVlc3QqIHBsdWdpblJlcXVlc3QgPSBpdC0+c2Vjb25kLmdldCgpOworICAg
IFBsdWdpblJlcXVlc3QqIHBsdWdpblJlcXVlc3QgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgX1dL
UEhMb2FkVVJMTm90aWZ5KG1fcGx1Z2luSG9zdFByb3h5LT5wb3J0KCksIG1fcGx1Z2luSUQsIHBs
dWdpblJlcXVlc3QtPnJlcXVlc3RJRCgpLCByZWFzb24pOwogIAogICAgIG1fcGVuZGluZ0ZyYW1l
TG9hZHMucmVtb3ZlKGl0KTsKQEAgLTE2MjgsNyArMTYyOCw3IEBAIHZvaWQgTmV0c2NhcGVQbHVn
aW5JbnN0YW5jZVByb3h5OjpjYW5jZWxDaGVja0lmQWxsb3dlZFRvTG9hZFVSTCh1aW50MzJfdCBj
aGVja0lECiAgICAgaWYgKGl0ID09IG1fdXJsQ2hlY2tzLmVuZCgpKQogICAgICAgICByZXR1cm47
CiAgICAgCi0gICAgV2ViUGx1Z2luQ29udGFpbmVyQ2hlY2sgKmNoZWNrID0gaXQtPnNlY29uZC5n
ZXQoKTsKKyAgICBXZWJQbHVnaW5Db250YWluZXJDaGVjayAqY2hlY2sgPSBpdC0+dmFsdWUuZ2V0
KCk7CiAgICAgW2NoZWNrIGNhbmNlbF07CiAgICAgbV91cmxDaGVja3MucmVtb3ZlKGl0KTsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL1Byb3h5SW5zdGFu
Y2UubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9Qcm94eUluc3RhbmNlLm1t
CmluZGV4IDQ5ZTk4ZmU2ZTIxNDdkMDdlZmUwODA5YjMyM2Y1ZDFiNjJkZjFjNTMuLjE4ZTA0NDYz
MDc3OTE5NzkzMjBhMThmODI1ZWQ2OTViM2Q4MmE1NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvbWFjL1BsdWdpbnMvSG9zdGVkL1Byb3h5SW5zdGFuY2UubW0KKysrIGIvU291cmNlL1dlYktp
dC9tYWMvUGx1Z2lucy9Ib3N0ZWQvUHJveHlJbnN0YW5jZS5tbQpAQCAtMzU5LDggKzM1OSw4IEBA
IE1ldGhvZExpc3QgUHJveHlJbnN0YW5jZTo6bWV0aG9kc05hbWVkKFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUpCiAgICAgTWV0aG9kTWFwOjppdGVyYXRvciBleGlzdGluZ01hcEVudHJ5ID0gbV9t
ZXRob2RzLmZpbmQobmFtZS5pbXBsKCkpOwogICAgIGlmIChleGlzdGluZ01hcEVudHJ5ICE9IG1f
bWV0aG9kcy5lbmQoKSkgewogICAgICAgICBNZXRob2RMaXN0IG1ldGhvZExpc3Q7Ci0gICAgICAg
IGlmIChleGlzdGluZ01hcEVudHJ5LT5zZWNvbmQpCi0gICAgICAgICAgICBtZXRob2RMaXN0LmFw
cGVuZChleGlzdGluZ01hcEVudHJ5LT5zZWNvbmQpOworICAgICAgICBpZiAoZXhpc3RpbmdNYXBF
bnRyeS0+dmFsdWUpCisgICAgICAgICAgICBtZXRob2RMaXN0LmFwcGVuZChleGlzdGluZ01hcEVu
dHJ5LT52YWx1ZSk7CiAgICAgICAgIHJldHVybiBtZXRob2RMaXN0OwogICAgIH0KICAgICAKQEAg
LTM4MiwxMSArMzgyLDExIEBAIE1ldGhvZExpc3QgUHJveHlJbnN0YW5jZTo6bWV0aG9kc05hbWVk
KFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiAgICAgLy8gQWRkIGEgbmV3IGVudHJ5IHRvIHRo
ZSBtYXAgdW5sZXNzIGFuIGVudHJ5IHdhcyBhZGRlZCB3aGlsZSB3ZSB3ZXJlIGluIHdhaXRGb3JS
ZXBseS4KICAgICBNZXRob2RNYXA6OkFkZFJlc3VsdCBtYXBBZGRSZXN1bHQgPSBtX21ldGhvZHMu
YWRkKG5hbWUuaW1wbCgpLCAwKTsKICAgICBpZiAobWFwQWRkUmVzdWx0LmlzTmV3RW50cnkgJiYg
cmVwbHktPm1fcmVzdWx0KQotICAgICAgICBtYXBBZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9
IG5ldyBQcm94eU1ldGhvZChtZXRob2ROYW1lKTsKKyAgICAgICAgbWFwQWRkUmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZSA9IG5ldyBQcm94eU1ldGhvZChtZXRob2ROYW1lKTsKIAogICAgIE1ldGhvZExp
c3QgbWV0aG9kTGlzdDsKLSAgICBpZiAobWFwQWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpCi0g
ICAgICAgIG1ldGhvZExpc3QuYXBwZW5kKG1hcEFkZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsK
KyAgICBpZiAobWFwQWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSkKKyAgICAgICAgbWV0aG9kTGlz
dC5hcHBlbmQobWFwQWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CiAgICAgcmV0dXJuIG1ldGhv
ZExpc3Q7CiB9CiAKQEAgLTQwMiw3ICs0MDIsNyBAQCBGaWVsZCogUHJveHlJbnN0YW5jZTo6Zmll
bGROYW1lZChQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogICAgIC8vIElmIHdlIGFscmVhZHkg
aGF2ZSBhbiBlbnRyeSBpbiB0aGUgbWFwLCB1c2UgaXQuCiAgICAgRmllbGRNYXA6Oml0ZXJhdG9y
IGV4aXN0aW5nTWFwRW50cnkgPSBtX2ZpZWxkcy5maW5kKG5hbWUuaW1wbCgpKTsKICAgICBpZiAo
ZXhpc3RpbmdNYXBFbnRyeSAhPSBtX2ZpZWxkcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGV4aXN0
aW5nTWFwRW50cnktPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGV4aXN0aW5nTWFwRW50cnktPnZh
bHVlOwogICAgIAogICAgIHVpbnQ2NF90IGlkZW50aWZpZXIgPSByZWludGVycHJldF9jYXN0PHVp
bnQ2NF90PihfTlBOX0dldFN0cmluZ0lkZW50aWZpZXIobmFtZS5hc2NpaSgpLmRhdGEoKSkpOwog
ICAgIHVpbnQzMl90IHJlcXVlc3RJRCA9IG1faW5zdGFuY2VQcm94eS0+bmV4dFJlcXVlc3RJRCgp
OwpAQCAtNDIyLDggKzQyMiw4IEBAIEZpZWxkKiBQcm94eUluc3RhbmNlOjpmaWVsZE5hbWVkKFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiAgICAgLy8gQWRkIGEgbmV3IGVudHJ5IHRvIHRoZSBt
YXAgdW5sZXNzIGFuIGVudHJ5IHdhcyBhZGRlZCB3aGlsZSB3ZSB3ZXJlIGluIHdhaXRGb3JSZXBs
eS4KICAgICBGaWVsZE1hcDo6QWRkUmVzdWx0IG1hcEFkZFJlc3VsdCA9IG1fZmllbGRzLmFkZChu
YW1lLmltcGwoKSwgMCk7CiAgICAgaWYgKG1hcEFkZFJlc3VsdC5pc05ld0VudHJ5ICYmIHJlcGx5
LT5tX3Jlc3VsdCkKLSAgICAgICAgbWFwQWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBuZXcg
UHJveHlGaWVsZChpZGVudGlmaWVyKTsKLSAgICByZXR1cm4gbWFwQWRkUmVzdWx0Lml0ZXJhdG9y
LT5zZWNvbmQ7CisgICAgICAgIG1hcEFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBuZXcgUHJv
eHlGaWVsZChpZGVudGlmaWVyKTsKKyAgICByZXR1cm4gbWFwQWRkUmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZTsKIH0KIAogSlNDOjpKU1ZhbHVlIFByb3h5SW5zdGFuY2U6OmZpZWxkVmFsdWUoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBGaWVsZCogZmllbGQpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5tbSBiL1NvdXJjZS9XZWJL
aXQvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5WaWV3Lm1tCmluZGV4IDRlMWFhZDQ5NTI4
Y2Q3ZDA4MWQ0MTM1MjQ1NGI5Yzg1N2ZiYzI1YjcuLjZhMWViNjQwYTBkYWNmMGNjZTAxZWVkMzgx
OTIzNTBiNWRjODUyZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2Vi
TmV0c2NhcGVQbHVnaW5WaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2Vi
TmV0c2NhcGVQbHVnaW5WaWV3Lm1tCkBAIC03MTAsNyArNzEwLDcgQEAgc3RhdGljIGlubGluZSB2
b2lkIGdldE5QUmVjdChjb25zdCBOU1JlY3QmIG5yLCBOUFJlY3QmIG5wcikKIAogICAgIEhhc2hN
YXA8dWludDMyX3QsIFBsdWdpblRpbWVyKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHRpbWVycy0+
ZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPHVpbnQzMl90LCBQbHVnaW5UaW1lcio+Ojpjb25zdF9p
dGVyYXRvciBpdCA9IHRpbWVycy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAg
IFBsdWdpblRpbWVyKiB0aW1lciA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFBsdWdpblRpbWVyKiB0
aW1lciA9IGl0LT52YWx1ZTsKICAgICAgICAgdGltZXItPnN0b3AoKTsKICAgICB9ICAgIAogfQpA
QCAtNzI4LDcgKzcyOCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBnZXROUFJlY3QoY29uc3QgTlNS
ZWN0JiBuciwgTlBSZWN0JiBucHIpCiAgICAgCiAgICAgSGFzaE1hcDx1aW50MzJfdCwgUGx1Z2lu
VGltZXIqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gdGltZXJzLT5lbmQoKTsKICAgICBmb3IgKEhh
c2hNYXA8dWludDMyX3QsIFBsdWdpblRpbWVyKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdGltZXJz
LT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgUGx1Z2luVGltZXIqIHRpbWVy
ID0gaXQtPnNlY29uZDsKKyAgICAgICAgUGx1Z2luVGltZXIqIHRpbWVyID0gaXQtPnZhbHVlOwog
ICAgICAgICBBU1NFUlQoIXRpbWVyLT5pc0FjdGl2ZSgpKTsKICAgICAgICAgdGltZXItPnN0YXJ0
KF9pc0NvbXBsZXRlbHlPYnNjdXJlZCk7CiAgICAgfSAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYk5vdGlmaWNhdGlvbkNsaWVudC5tbSBiL1NvdXJj
ZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYk5vdGlmaWNhdGlvbkNsaWVudC5tbQppbmRl
eCA4NGE5ZDZhY2YwNGZhNzlhZGI0YzExZTM1MzMwMDI3OTEyMmUyZTlhLi43YTg3MWNiNzJlMzE4
NDIxZWM2MDRmM2M4Zjc4NjE5N2UyZGU0MmJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21h
Yy9XZWJDb3JlU3VwcG9ydC9XZWJOb3RpZmljYXRpb25DbGllbnQubW0KKysrIGIvU291cmNlL1dl
YktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViTm90aWZpY2F0aW9uQ2xpZW50Lm1tCkBAIC05MCw3
ICs5MCw3IEBAIGJvb2wgV2ViTm90aWZpY2F0aW9uQ2xpZW50OjpzaG93KE5vdGlmaWNhdGlvbiog
bm90aWZpY2F0aW9uKQogICAgIG1fbm90aWZpY2F0aW9uTWFwLnNldChub3RpZmljYXRpb24sIHdl
Yk5vdGlmaWNhdGlvbik7CiAKICAgICBOb3RpZmljYXRpb25Db250ZXh0TWFwOjppdGVyYXRvciBp
dCA9IG1fbm90aWZpY2F0aW9uQ29udGV4dE1hcC5hZGQobm90aWZpY2F0aW9uLT5zY3JpcHRFeGVj
dXRpb25Db250ZXh0KCksIFZlY3RvcjxSZXRhaW5QdHI8V2ViTm90aWZpY2F0aW9uPiA+KCkpLml0
ZXJhdG9yOwotICAgIGl0LT5zZWNvbmQuYXBwZW5kKHdlYk5vdGlmaWNhdGlvbik7CisgICAgaXQt
PnZhbHVlLmFwcGVuZCh3ZWJOb3RpZmljYXRpb24pOwogCiAgICAgW1ttX3dlYlZpZXcgX25vdGlm
aWNhdGlvblByb3ZpZGVyXSBzaG93Tm90aWZpY2F0aW9uOndlYk5vdGlmaWNhdGlvbi5nZXQoKSBm
cm9tV2ViVmlldzptX3dlYlZpZXddOwogICAgIHJldHVybiB0cnVlOwpAQCAtMTIwLDcgKzEyMCw3
IEBAIHZvaWQgV2ViTm90aWZpY2F0aW9uQ2xpZW50OjpjbGVhck5vdGlmaWNhdGlvbnMoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKICAgICBpZiAoaXQgPT0gbV9ub3RpZmljYXRpb25D
b250ZXh0TWFwLmVuZCgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgVmVjdG9yPFJldGFp
blB0cjxXZWJOb3RpZmljYXRpb24+ID4mIHdlYk5vdGlmaWNhdGlvbnMgPSBpdC0+c2Vjb25kOwor
ICAgIFZlY3RvcjxSZXRhaW5QdHI8V2ViTm90aWZpY2F0aW9uPiA+JiB3ZWJOb3RpZmljYXRpb25z
ID0gaXQtPnZhbHVlOwogICAgIE5TTXV0YWJsZUFycmF5ICpuc0lEcyA9IFtOU011dGFibGVBcnJh
eSBhcnJheV07CiAgICAgc2l6ZV90IGNvdW50ID0gd2ViTm90aWZpY2F0aW9ucy5zaXplKCk7CiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CkBAIC0xNDYsMTAgKzE0Niwx
MCBAQCB2b2lkIFdlYk5vdGlmaWNhdGlvbkNsaWVudDo6bm90aWZpY2F0aW9uT2JqZWN0RGVzdHJv
eWVkKE5vdGlmaWNhdGlvbiogbm90aWZpY2F0aQogCiAgICAgTm90aWZpY2F0aW9uQ29udGV4dE1h
cDo6aXRlcmF0b3IgaXQgPSBtX25vdGlmaWNhdGlvbkNvbnRleHRNYXAuZmluZChub3RpZmljYXRp
b24tPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CiAgICAgQVNTRVJUKGl0ICE9IG1fbm90aWZp
Y2F0aW9uQ29udGV4dE1hcC5lbmQoKSk7Ci0gICAgc2l6ZV90IGluZGV4ID0gaXQtPnNlY29uZC5m
aW5kKHdlYk5vdGlmaWNhdGlvbik7CisgICAgc2l6ZV90IGluZGV4ID0gaXQtPnZhbHVlLmZpbmQo
d2ViTm90aWZpY2F0aW9uKTsKICAgICBBU1NFUlQoaW5kZXggIT0gbm90Rm91bmQpOwotICAgIGl0
LT5zZWNvbmQucmVtb3ZlKGluZGV4KTsKLSAgICBpZiAoaXQtPnNlY29uZC5pc0VtcHR5KCkpCisg
ICAgaXQtPnZhbHVlLnJlbW92ZShpbmRleCk7CisgICAgaWYgKGl0LT52YWx1ZS5pc0VtcHR5KCkp
CiAgICAgICAgIG1fbm90aWZpY2F0aW9uQ29udGV4dE1hcC5yZW1vdmUoaXQpOwogCiAgICAgW1tt
X3dlYlZpZXcgX25vdGlmaWNhdGlvblByb3ZpZGVyXSBub3RpZmljYXRpb25EZXN0cm95ZWQ6d2Vi
Tm90aWZpY2F0aW9uLmdldCgpXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZp
ZXcvV2ViSFRNTFZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3
Lm1tCmluZGV4IGJmZWRlOGRiNmY5ZWZiNjVmZDExNTQxODk4YThjZDEwODRlMmI2M2YuLjM0MGRk
YzZkMzI5MGYzMDdlMTRlZWI1YzBkMmFhMWYyNDAzMmJmMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMv
V2ViVmlldy9XZWJIVE1MVmlldy5tbQpAQCAtMjM3OCw3ICsyMzc4LDcgQEAgc3RhdGljIFN0cmlu
ZyBjb21tYW5kTmFtZUZvclNlbGVjdG9yKFNFTCBzZWxlY3RvcikKICAgICBzdGF0aWMgY29uc3Qg
U2VsZWN0b3JOYW1lTWFwKiBleGNlcHRpb25NYXAgPSBjcmVhdGVTZWxlY3RvckV4Y2VwdGlvbk1h
cCgpOwogICAgIFNlbGVjdG9yTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBleGNlcHRpb25N
YXAtPmZpbmQoc2VsZWN0b3IpOwogICAgIGlmIChpdCAhPSBleGNlcHRpb25NYXAtPmVuZCgpKQot
ICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKIAog
ICAgIC8vIFJlbW92ZSB0aGUgdHJhaWxpbmcgY29sb24uCiAgICAgLy8gTm8gbmVlZCB0byBjYXBp
dGFsaXplIHRoZSBjb21tYW5kIG5hbWUgc2luY2UgRWRpdG9yIGNvbW1hbmQgbmFtZXMgYXJlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L3F0L0FwaS9xd2VicGFnZS5jcHAKaW5kZXggYTMyN2VhZjJlMWRhNDBjMDYwMWI4NjI1NjM0
ZjM0NjBmN2U1ZTExOC4uZjEwOGMwYTdhY2M1YzhhM2ZlYmMyZTE2YWJlZjNjMzlkODA2N2EyNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcApAQCAtMjI1Miw3ICsyMjUyLDcgQEAgc3RhdGlj
IHZvaWQgZXh0cmFjdENvbnRlbnRUeXBlRnJvbVBsdWdpblZlY3Rvcihjb25zdCBWZWN0b3I8UGx1
Z2luUGFja2FnZSo+JiBwbHUKICAgICAgICAgTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9p
dGVyYXRvciBtYXBfaXQgPSBwbHVnaW5zW2ldLT5taW1lVG9EZXNjcmlwdGlvbnMoKS5iZWdpbigp
OwogICAgICAgICBNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIG1hcF9lbmQg
PSBwbHVnaW5zW2ldLT5taW1lVG9EZXNjcmlwdGlvbnMoKS5lbmQoKTsKICAgICAgICAgZm9yICg7
IG1hcF9pdCAhPSBtYXBfZW5kOyArK21hcF9pdCkKLSAgICAgICAgICAgICpsaXN0IDw8IG1hcF9p
dC0+Zmlyc3Q7CisgICAgICAgICAgICAqbGlzdCA8PCBtYXBfaXQtPmtleTsKICAgICB9CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwbHVnaW5kYXRhYmFzZS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGx1Z2luZGF0YWJhc2UuY3BwCmluZGV4IGE3YTNi
NWYyYzFlODlmNDc0MzdjMDhhOTdmY2IyOTY3ODZiZjhlNTguLmM1MzI4YzhmNjc1ZjJjNjZmN2I5
YjQyMGQ2NTEzN2ZkOWY4NmI4OTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3
ZWJwbHVnaW5kYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBsdWdp
bmRhdGFiYXNlLmNwcApAQCAtMTIyLDggKzEyMiw4IEBAIFFMaXN0PFFXZWJQbHVnaW5JbmZvOjpN
aW1lVHlwZT4gUVdlYlBsdWdpbkluZm86Om1pbWVUeXBlcygpIGNvbnN0CiAKICAgICAgICAgZm9y
IChNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWltZVRvRGVzY3Jp
cHRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgTWltZVR5cGUg
bWltZVR5cGU7Ci0gICAgICAgICAgICBtaW1lVHlwZS5uYW1lID0gaXQtPmZpcnN0OwotICAgICAg
ICAgICAgbWltZVR5cGUuZGVzY3JpcHRpb24gPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgbWlt
ZVR5cGUubmFtZSA9IGl0LT5rZXk7CisgICAgICAgICAgICBtaW1lVHlwZS5kZXNjcmlwdGlvbiA9
IGl0LT52YWx1ZTsKIAogICAgICAgICAgICAgUVN0cmluZ0xpc3QgZmlsZUV4dGVuc2lvbnM7CiAg
ICAgICAgICAgICBWZWN0b3I8U3RyaW5nPiBleHRlbnNpb25zID0gbV9wYWNrYWdlLT5taW1lVG9F
eHRlbnNpb25zKCkuZ2V0KG1pbWVUeXBlLm5hbWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9xdC9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNRdC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1F0LmNwcAppbmRleCBjZDRh
YjBkNzJkODY4MTI1ZGM4NmVlOTg3YmNjZTZlZjNhYjFhZDg5Li43ZDRiMGI3NWY5ZDJjNGU3Njc5
ZGIzZDA3YjU2MTdhNDIxNDA0YzU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNv
cmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1F0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0
L1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1F0LmNwcApAQCAtMTMzLDggKzEzMyw4
IEBAIHZvaWQgUGxhdGZvcm1TdHJhdGVnaWVzUXQ6OmdldFBsdWdpbkluZm8oY29uc3QgV2ViQ29y
ZTo6UGFnZSogcGFnZSwgVmVjdG9yPFdlYkNvCiAgICAgICAgIGZvciAoTUlNRVRvRGVzY3JpcHRp
b25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIE1pbWVDbGFzc0luZm8gbWltZTsKIAotICAg
ICAgICAgICAgbWltZS50eXBlID0gaXQtPmZpcnN0OwotICAgICAgICAgICAgbWltZS5kZXNjID0g
aXQtPnNlY29uZDsKKyAgICAgICAgICAgIG1pbWUudHlwZSA9IGl0LT5rZXk7CisgICAgICAgICAg
ICBtaW1lLmRlc2MgPSBpdC0+dmFsdWU7CiAgICAgICAgICAgICBtaW1lLmV4dGVuc2lvbnMgPSBw
YWNrYWdlLT5taW1lVG9FeHRlbnNpb25zKCkuZ2V0KG1pbWUudHlwZSk7CiAKICAgICAgICAgICAg
IGluZm8ubWltZXMuYXBwZW5kKG1pbWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4v
Q09NUHJvcGVydHlCYWcuaCBiL1NvdXJjZS9XZWJLaXQvd2luL0NPTVByb3BlcnR5QmFnLmgKaW5k
ZXggYzc2ODYzZjE1MDEyZjJlYWRlMGRjZTE1ZmRkYjczOWJmYmMyNzljMy4uOGU4NGU0NzQwYWEz
YTk4NjM1OTRiZWRjZWNlOGUzNzEyYWQ0YTJmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93
aW4vQ09NUHJvcGVydHlCYWcuaAorKysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9DT01Qcm9wZXJ0eUJh
Zy5oCkBAIC0xNDcsOSArMTQ3LDkgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBDT01Qcm9w
ZXJ0eUJhZzxWYWx1ZVR5cGUsIEtleVR5cGUsIEhhc2hUeXBlPjo6UmVhZChMUEMKIAogICAgIFZB
UlRZUEUgcmVxdWVzdGVkVHlwZSA9IFZfVlQocFZhcik7CiAgICAgVl9WVChwVmFyKSA9IFZUX0VN
UFRZOwotICAgIENPTVZhcmlhbnRTZXR0ZXI8VmFsdWVUeXBlPjo6c2V0VmFyaWFudChwVmFyLCBp
dC0+c2Vjb25kKTsKKyAgICBDT01WYXJpYW50U2V0dGVyPFZhbHVlVHlwZT46OnNldFZhcmlhbnQo
cFZhciwgaXQtPnZhbHVlKTsKIAotICAgIGlmIChyZXF1ZXN0ZWRUeXBlICE9IENPTVZhcmlhbnRT
ZXR0ZXI8VmFsdWVUeXBlPjo6dmFyaWFudFR5cGUoaXQtPnNlY29uZCkgJiYgcmVxdWVzdGVkVHlw
ZSAhPSBWVF9FTVBUWSkKKyAgICBpZiAocmVxdWVzdGVkVHlwZSAhPSBDT01WYXJpYW50U2V0dGVy
PFZhbHVlVHlwZT46OnZhcmlhbnRUeXBlKGl0LT52YWx1ZSkgJiYgcmVxdWVzdGVkVHlwZSAhPSBW
VF9FTVBUWSkKICAgICAgICAgcmV0dXJuIDo6VmFyaWFudENoYW5nZVR5cGUocFZhciwgcFZhciwg
VkFSSUFOVF9OT1VTRVJPVkVSUklERSB8IFZBUklBTlRfQUxQSEFCT09MLCByZXF1ZXN0ZWRUeXBl
KTsKIAogICAgIHJldHVybiBTX09LOwpAQCAtMjE3LDEyICsyMTcsMTIgQEAgSFJFU1VMVCBTVERN
RVRIT0RDQUxMVFlQRSBDT01Qcm9wZXJ0eUJhZzxWYWx1ZVR5cGUsIEtleVR5cGUsIEhhc2hUeXBl
Pjo6R2V0UHJvcGUKICAgICAgICAgLy9wUHJvcEJhZ1tqXS5jbHNpZDsgICAgLy8gKENMU0lEKSBD
TFNJRCBvZiB0aGUgb2JqZWN0LiBUaGlzIG1lbWJlciBpcyB2YWxpZCBvbmx5IGlmIGR3VHlwZSBp
cyBQUk9QQkFHMl9UWVBFX09CSkVDVC4KIAogICAgICAgICBwUHJvcEJhZ1tqXS5kd1R5cGUgPSBQ
Uk9QQkFHMl9UWVBFX0RBVEE7Ci0gICAgICAgIHBQcm9wQmFnW2pdLnZ0ID0gQ09NVmFyaWFudFNl
dHRlcjxWYWx1ZVR5cGU+Ojp2YXJpYW50VHlwZShjdXJyZW50LT5zZWNvbmQpOworICAgICAgICBw
UHJvcEJhZ1tqXS52dCA9IENPTVZhcmlhbnRTZXR0ZXI8VmFsdWVUeXBlPjo6dmFyaWFudFR5cGUo
Y3VycmVudC0+dmFsdWUpOwogICAgICAgICBwUHJvcEJhZ1tqXS5kd0hpbnQgPSBpUHJvcGVydHkg
KyBqOwotICAgICAgICBwUHJvcEJhZ1tqXS5wc3RyTmFtZSA9IChMUE9MRVNUUilDb1Rhc2tNZW1B
bGxvYyhzaXplb2Yod2NoYXJfdCkqKGN1cnJlbnQtPmZpcnN0Lmxlbmd0aCgpKzEpKTsKKyAgICAg
ICAgcFByb3BCYWdbal0ucHN0ck5hbWUgPSAoTFBPTEVTVFIpQ29UYXNrTWVtQWxsb2Moc2l6ZW9m
KHdjaGFyX3QpKihjdXJyZW50LT5rZXkubGVuZ3RoKCkrMSkpOwogICAgICAgICBpZiAoIXBQcm9w
QmFnW2pdLnBzdHJOYW1lKQogICAgICAgICAgICAgcmV0dXJuIEVfT1VUT0ZNRU1PUlk7Ci0gICAg
ICAgIHdjc2NweV9zKHBQcm9wQmFnW2pdLnBzdHJOYW1lLCBjdXJyZW50LT5maXJzdC5sZW5ndGgo
KSsxLCBzdGF0aWNfY2FzdDxTdHJpbmc+KGN1cnJlbnQtPmZpcnN0KS5jaGFyYWN0ZXJzV2l0aE51
bGxUZXJtaW5hdGlvbigpKTsKKyAgICAgICAgd2NzY3B5X3MocFByb3BCYWdbal0ucHN0ck5hbWUs
IGN1cnJlbnQtPmtleS5sZW5ndGgoKSsxLCBzdGF0aWNfY2FzdDxTdHJpbmc+KGN1cnJlbnQtPmtl
eSkuY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSk7CiAgICAgICAgICsrKnBjUHJvcGVy
dGllczsKICAgICB9CiAgICAgcmV0dXJuIFNfT0s7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L3dpbi9XZWJDb3JlU3RhdGlzdGljcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3Rh
dGlzdGljcy5jcHAKaW5kZXggYzFjYTlmMjE0ZjI0OWMwYTQ5ZjFmY2IxMjJmMDZhZDM0OTNiNGIx
OS4uMmYyMmIwM2M2MjI1MDAyYWUyMTljYTBmNDViYTQ3ZDI5ODBjMzdhMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN0YXRpc3RpY3MuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvd2luL1dlYkNvcmVTdGF0aXN0aWNzLmNwcApAQCAtMTQ1LDcgKzE0NSw3IEBAIEhSRVNVTFQg
U1RETUVUSE9EQ0FMTFRZUEUgV2ViQ29yZVN0YXRpc3RpY3M6OmphdmFTY3JpcHRQcm90ZWN0ZWRP
YmplY3RUeXBlQ291bnRzCiAgICAgSXRlcmF0b3IgZW5kID0ganNPYmplY3RUeXBlTmFtZXMtPmVu
ZCgpOwogICAgIEhhc2hNYXA8U3RyaW5nLCBpbnQ+IHR5cGVDb3VudE1hcDsKICAgICBmb3IgKEl0
ZXJhdG9yIGN1cnJlbnQgPSBqc09iamVjdFR5cGVOYW1lcy0+YmVnaW4oKTsgY3VycmVudCAhPSBl
bmQ7ICsrY3VycmVudCkKLSAgICAgICAgdHlwZUNvdW50TWFwLnNldChjdXJyZW50LT5maXJzdCwg
Y3VycmVudC0+c2Vjb25kKTsKKyAgICAgICAgdHlwZUNvdW50TWFwLnNldChjdXJyZW50LT5rZXks
IGN1cnJlbnQtPnZhbHVlKTsKIAogICAgIENPTVB0cjxJUHJvcGVydHlCYWcyPiByZXN1bHRzKEFk
b3B0Q09NLCBDT01Qcm9wZXJ0eUJhZzxpbnQ+OjpjcmVhdGVJbnN0YW5jZSh0eXBlQ291bnRNYXAp
KTsKICAgICByZXN1bHRzLmNvcHlSZWZUbyh0eXBlTmFtZXNBbmRDb3VudHMpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVz
LmNwcCBiL1NvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRl
Z2llcy5jcHAKaW5kZXggMjMwZjMzMjNmNTQyOTFkMDFlMTQxOTgxNzhmYTIxNmE0OGMwY2Y1Yi4u
ZjEzMGY3NmJkMmE2NzY5N2FkZTdhMzY3ODg0NTI0M2E5ZjZhNzFhNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdp
ZXMuY3BwCkBAIC05Myw4ICs5Myw4IEBAIHZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpnZXRQ
bHVnaW5JbmZvKGNvbnN0IFdlYkNvcmU6OlBhZ2UqLCBWZWN0b3I8V2ViQ29yZTo6CiAgICAgICAg
IGZvciAoTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1pbWVUb0Rl
c2NyaXB0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIE1pbWVD
bGFzc0luZm8gbWltZTsKIAotICAgICAgICAgICAgbWltZS50eXBlID0gaXQtPmZpcnN0OwotICAg
ICAgICAgICAgbWltZS5kZXNjID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIG1pbWUudHlwZSA9
IGl0LT5rZXk7CisgICAgICAgICAgICBtaW1lLmRlc2MgPSBpdC0+dmFsdWU7CiAgICAgICAgICAg
ICBtaW1lLmV4dGVuc2lvbnMgPSBwYWNrYWdlLT5taW1lVG9FeHRlbnNpb25zKCkuZ2V0KG1pbWUu
dHlwZSk7CiAKICAgICAgICAgICAgIGluZm8ubWltZXMuYXBwZW5kKG1pbWUpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC93aW4vV2ViSGlzdG9yeS5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9X
ZWJIaXN0b3J5LmNwcAppbmRleCBlODQyYzE0MDczNWM3MTk5MWE1ZDExZThiOWQzYjU3ZjdkNWNk
MjdiLi44MjMzNWE3OGE3NWY4YzgyMmRkOTk2ZTVkNjg5OGMzOWMwNGUzYjMyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJIaXN0b3J5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3dp
bi9XZWJIaXN0b3J5LmNwcApAQCAtODM0LDcgKzgzNCw3IEBAIEhSRVNVTFQgV2ViSGlzdG9yeTo6
cmVtb3ZlSXRlbUZyb21EYXRlQ2FjaGVzKElXZWJIaXN0b3J5SXRlbSogZW50cnkpCiAKICAgICBE
YXRlVG9FbnRyaWVzTWFwOjppdGVyYXRvciBmb3VuZCA9IG1fZW50cmllc0J5RGF0ZS5maW5kKGRh
dGVLZXkpOwogICAgIEFTU0VSVChmb3VuZCAhPSBtX2VudHJpZXNCeURhdGUuZW5kKCkpOwotICAg
IENGTXV0YWJsZUFycmF5UmVmIGVudHJpZXNGb3JEYXRlID0gZm91bmQtPnNlY29uZC5nZXQoKTsK
KyAgICBDRk11dGFibGVBcnJheVJlZiBlbnRyaWVzRm9yRGF0ZSA9IGZvdW5kLT52YWx1ZS5nZXQo
KTsKIAogICAgIENGSW5kZXggY291bnQgPSBDRkFycmF5R2V0Q291bnQoZW50cmllc0ZvckRhdGUp
OwogICAgIGZvciAoaW50IGkgPSBjb3VudCAtIDE7IGkgPj0gMDsgLS1pKSB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJLaXRDT01BUEkuY3BwIGIvU291cmNlL1dlYktpdC93aW4v
V2ViS2l0Q09NQVBJLmNwcAppbmRleCA5YzljYzAyNmI0N2I0ZmVhOTYwYzYzOTg0NmUwZWJhNTFj
NDY1M2MyLi40ZDhmZjA5NWJkYTk2MDdkMjlhMTQ1Yjg1N2M3OGRkZmY4ZTM1ZTdhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJLaXRDT01BUEkuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvd2luL1dlYktpdENPTUFQSS5jcHAKQEAgLTUyLDcgKzUyLDcgQEAgc3RhdGljIENPTVB0cjxJ
Q2xhc3NGYWN0b3J5PiBjbGFzc0ZhY3RvcnkoY29uc3QgQ0xTSUQmIGNsc2lkKQogICAgIHN0YXRp
YyBGYWN0b3J5TWFwJiBmYWN0b3JpZXMgPSAqbmV3IEZhY3RvcnlNYXA7CiAKICAgICBGYWN0b3J5
TWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gZmFjdG9yaWVzLmFkZChjbHNpZCwgMCk7Ci0gICAgQ09N
UHRyPElDbGFzc0ZhY3Rvcnk+JiBmYWN0b3J5ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7Cisg
ICAgQ09NUHRyPElDbGFzc0ZhY3Rvcnk+JiBmYWN0b3J5ID0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZTsKICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkgJiYgRkFJTEVEKERsbEdldENsYXNzT2JqZWN0
KGNsc2lkLCBfX3V1aWRvZihmYWN0b3J5KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZmYWN0
b3J5KSkpKQogICAgICAgICBmYWN0b3J5ID0gMDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC93aW4vV2ViS2l0U3RhdGlzdGljcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJLaXRTdGF0
aXN0aWNzLmNwcAppbmRleCA5Y2Q5NWM3YWM5MzU5NTMwMDdlMTU3ZGNhNzRlODA3YzQ1YWVlMDZl
Li5jN2I4ZWQxYWM3N2NlNmUxOTI2YWE1ZGIyMjQyNGYyZWVlMWEzNTBjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L3dpbi9XZWJLaXRTdGF0aXN0aWNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L3dpbi9XZWJLaXRTdGF0aXN0aWNzLmNwcApAQCAtMTQ0LDkgKzE0NCw5IEBAIEhSRVNVTFQgU1RE
TUVUSE9EQ0FMTFRZUEUgV2ViS2l0U3RhdGlzdGljczo6Y29tQ2xhc3NOYW1lQ291bnRzKAogICAg
IEl0ZXJhdG9yIGVuZCA9IGdDbGFzc05hbWVDb3VudC5lbmQoKTsKICAgICBWZWN0b3I8VUNoYXI+
IHZlY3RvcjsKICAgICBmb3IgKEl0ZXJhdG9yIGN1cnJlbnQgPSBnQ2xhc3NOYW1lQ291bnQuYmVn
aW4oKTsgY3VycmVudCAhPSBlbmQ7ICsrY3VycmVudCkgewotICAgICAgICBhcHBlbmQodmVjdG9y
LCBTdHJpbmc6OmZvcm1hdCgiJTR1IiwgY3VycmVudC0+c2Vjb25kKSk7CisgICAgICAgIGFwcGVu
ZCh2ZWN0b3IsIFN0cmluZzo6Zm9ybWF0KCIlNHUiLCBjdXJyZW50LT52YWx1ZSkpOwogICAgICAg
ICB2ZWN0b3IuYXBwZW5kKCdcdCcpOwotICAgICAgICBhcHBlbmQodmVjdG9yLCBzdGF0aWNfY2Fz
dDxTdHJpbmc+KGN1cnJlbnQtPmZpcnN0KSk7CisgICAgICAgIGFwcGVuZCh2ZWN0b3IsIHN0YXRp
Y19jYXN0PFN0cmluZz4oY3VycmVudC0+a2V5KSk7CiAgICAgICAgIHZlY3Rvci5hcHBlbmQoJ1xu
Jyk7CiAgICAgfQogICAgICpvdXRwdXQgPSBCU3RyaW5nKFN0cmluZzo6YWRvcHQodmVjdG9yKSku
cmVsZWFzZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vV2ViTm90aWZpY2F0aW9u
Q2VudGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvd2luL1dlYk5vdGlmaWNhdGlvbkNlbnRlci5jcHAK
aW5kZXggMjNkZTFjMWM5YmE2MmViMjg2MjcyZDI2MmIzMWIzMTIwMWQ1YzAxYi4uNTVlOGJlZDgz
NmJmOWY4MGFjM2Q1MzBlZjY0ZTQwY2UyZjczNmM3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC93aW4vV2ViTm90aWZpY2F0aW9uQ2VudGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9X
ZWJOb3RpZmljYXRpb25DZW50ZXIuY3BwCkBAIC0xMTgsNyArMTE4LDcgQEAgdm9pZCBXZWJOb3Rp
ZmljYXRpb25DZW50ZXI6OnBvc3ROb3RpZmljYXRpb25JbnRlcm5hbChJV2ViTm90aWZpY2F0aW9u
KiBub3RpZmljYXQKIAogICAgIC8vIEludGVudGlvbmFsbHkgbWFrZSBhIGNvcHkgb2YgdGhlIGxp
c3QgdG8gYXZvaWQgdGhlIHBvc3NpYmlsaXR5IG9mIGVycm9ycwogICAgIC8vIGZyb20gYSBtdXRh
dGlvbiBvZiB0aGUgbGlzdCBpbiB0aGUgb25Ob3RpZnkgY2FsbGJhY2suCi0gICAgT2JqZWN0T2Jz
ZXJ2ZXJMaXN0IGxpc3QgPSBpdC0+c2Vjb25kOworICAgIE9iamVjdE9ic2VydmVyTGlzdCBsaXN0
ID0gaXQtPnZhbHVlOwogCiAgICAgT2JzZXJ2ZXJMaXN0SXRlcmF0b3IgZW5kID0gbGlzdC5lbmQo
KTsKICAgICBmb3IgKE9ic2VydmVyTGlzdEl0ZXJhdG9yIGl0MiA9IGxpc3QuYmVnaW4oKTsgaXQy
ICE9IGVuZDsgKytpdDIpIHsKQEAgLTE0Nyw3ICsxNDcsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIFdlYk5vdGlmaWNhdGlvbkNlbnRlcjo6YWRkT2JzZXJ2ZXIoCiAgICAgU3RyaW5nIG5h
bWUobm90aWZpY2F0aW9uTmFtZSwgU3lzU3RyaW5nTGVuKG5vdGlmaWNhdGlvbk5hbWUpKTsKICAg
ICBNYXBwZWRPYnNlcnZlcnM6Oml0ZXJhdG9yIGl0ID0gZC0+bV9tYXBwZWRPYnNlcnZlcnMuZmlu
ZChuYW1lKTsKICAgICBpZiAoaXQgIT0gZC0+bV9tYXBwZWRPYnNlcnZlcnMuZW5kKCkpCi0gICAg
ICAgIGl0LT5zZWNvbmQuYXBwZW5kKE9iamVjdE9ic2VydmVyUGFpcihhbk9iamVjdCwgb2JzZXJ2
ZXIpKTsKKyAgICAgICAgaXQtPnZhbHVlLmFwcGVuZChPYmplY3RPYnNlcnZlclBhaXIoYW5PYmpl
Y3QsIG9ic2VydmVyKSk7CiAgICAgZWxzZSB7CiAgICAgICAgIE9iamVjdE9ic2VydmVyTGlzdCBs
aXN0OwogICAgICAgICBsaXN0LmFwcGVuZChPYmplY3RPYnNlcnZlclBhaXIoYW5PYmplY3QsIG9i
c2VydmVyKSk7CkBAIC0xOTYsNyArMTk2LDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBX
ZWJOb3RpZmljYXRpb25DZW50ZXI6OnJlbW92ZU9ic2VydmVyKAogICAgIGlmIChpdCA9PSBkLT5t
X21hcHBlZE9ic2VydmVycy5lbmQoKSkKICAgICAgICAgcmV0dXJuIEVfRkFJTDsKIAotICAgIE9i
amVjdE9ic2VydmVyTGlzdCYgb2JzZXJ2ZXJMaXN0ID0gaXQtPnNlY29uZDsKKyAgICBPYmplY3RP
YnNlcnZlckxpc3QmIG9ic2VydmVyTGlzdCA9IGl0LT52YWx1ZTsKICAgICBPYnNlcnZlckxpc3RJ
dGVyYXRvciBlbmQgPSBvYnNlcnZlckxpc3QuZW5kKCk7CiAKICAgICBpbnQgaSA9IDA7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRl
Z2llc1dpbkNFLmNwcCBiL1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQvUGxhdGZv
cm1TdHJhdGVnaWVzV2luQ0UuY3BwCmluZGV4IDNmOGM5MDdjNzM5ZjA4Y2RiOTkxNmU4MzZmOWIw
OGRlNjc4NDUxY2YuLmQ1NTc5NzIzMTE2MTU5MWQ1ZmRiMTcxNTgwNDQ1OGRiNzgyYzkxZjIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJh
dGVnaWVzV2luQ0UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQv
UGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuY3BwCkBAIC05NCw4ICs5NCw4IEBAIHZvaWQgUGxhdGZv
cm1TdHJhdGVnaWVzV2luQ0U6OmdldFBsdWdpbkluZm8oY29uc3QgUGFnZSosIFZlY3RvcjxQbHVn
aW5JbmZvPiYgb3V0CiAgICAgICAgIGZvciAoTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKICAgICAgICAgICAgIE1pbWVDbGFzc0luZm8gbWltZTsKIAotICAgICAgICAgICAgbWltZS50
eXBlID0gaXQtPmZpcnN0OwotICAgICAgICAgICAgbWltZS5kZXNjID0gaXQtPnNlY29uZDsKKyAg
ICAgICAgICAgIG1pbWUudHlwZSA9IGl0LT5rZXk7CisgICAgICAgICAgICBtaW1lLmRlc2MgPSBp
dC0+dmFsdWU7CiAgICAgICAgICAgICBtaW1lLmV4dGVuc2lvbnMgPSBwYWNrYWdlLT5taW1lVG9F
eHRlbnNpb25zKCkuZ2V0KG1pbWUudHlwZSk7CiAKICAgICAgICAgICAgIGluZm8ubWltZXMuYXBw
ZW5kKG1pbWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9B
cmd1bWVudENvZGVycy5oIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVu
dENvZGVycy5oCmluZGV4IGRkNTRkZmVlZjkxYTdkZTMxMTkxNWU5M2Q5YWZiZWIxM2ExY2JlNzcu
LmFmMTYzYmU2ZDliNjRjMzA5ZDkxOWFkMWI3MzY1ODhlYjI2MzFjYmEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQXJndW1lbnRDb2RlcnMuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50Q29kZXJzLmgKQEAgLTc1LDggKzc1
LDggQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gc3RydWN0IEFyZ3VtZW50Q29k
ZXI8c3RkOjpwYWlyPFQsIFU+ID4gewogdGVtcGxhdGU8dHlwZW5hbWUgS2V5VHlwZSwgdHlwZW5h
bWUgVmFsdWVUeXBlPiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXVEY6OktleVZhbHVlUGFpcjxLZXlU
eXBlLCBWYWx1ZVR5cGU+ID4gewogICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29k
ZXIqIGVuY29kZXIsIGNvbnN0IFdURjo6S2V5VmFsdWVQYWlyPEtleVR5cGUsIFZhbHVlVHlwZT4m
IHBhaXIpCiAgICAgewotICAgICAgICBlbmNvZGVyLT5lbmNvZGUocGFpci5maXJzdCk7Ci0gICAg
ICAgIGVuY29kZXItPmVuY29kZShwYWlyLnNlY29uZCk7CisgICAgICAgIGVuY29kZXItPmVuY29k
ZShwYWlyLmtleSk7CisgICAgICAgIGVuY29kZXItPmVuY29kZShwYWlyLnZhbHVlKTsKICAgICB9
CiAKICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBXVEY6
OktleVZhbHVlUGFpcjxLZXlUeXBlLCBWYWx1ZVR5cGU+JiBwYWlyKQpAQCAtODksOCArODksOCBA
QCB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlUeXBlLCB0eXBlbmFtZSBWYWx1ZVR5cGU+IHN0cnVjdCBB
cmd1bWVudENvZGVyPFdURjo6S2V5VmFsdQogICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZSh2
YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgcGFpci5maXJzdCA9
IGtleTsKLSAgICAgICAgcGFpci5zZWNvbmQgPSB2YWx1ZTsKKyAgICAgICAgcGFpci5rZXkgPSBr
ZXk7CisgICAgICAgIHBhaXIudmFsdWUgPSB2YWx1ZTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQ29u
bmVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24u
Y3BwCmluZGV4IGQyMmI4YjRjMWI4YzUyOGNlY2I4YjIxYzcwNTQwZjMwNmNiM2VlMzQuLjM0NDll
MzUyZTEwY2VjYjA0N2JlMDlmYWI4OGUwYWY5MDY5MzJhZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvUGxhdGZvcm0vQ29yZUlQQy9Db25uZWN0aW9uLmNwcApAQCAtMTAyLDEyICsxMDIsMTIgQEAg
UGFzc1JlZlB0cjxDb25uZWN0aW9uOjpTeW5jTWVzc2FnZVN0YXRlPiBDb25uZWN0aW9uOjpTeW5j
TWVzc2FnZVN0YXRlOjpnZXRPckNyZWEKICAgICBTeW5jTWVzc2FnZVN0YXRlTWFwOjpBZGRSZXN1
bHQgcmVzdWx0ID0gc3luY01lc3NhZ2VTdGF0ZU1hcCgpLmFkZChydW5Mb29wLCAwKTsKIAogICAg
IGlmICghcmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgQVNTRVJUKHJlc3VsdC5pdGVyYXRv
ci0+c2Vjb25kKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAg
ICAgICBBU1NFUlQocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CisgICAgICAgIHJldHVybiByZXN1
bHQuaXRlcmF0b3ItPnZhbHVlOwogICAgIH0KIAogICAgIFJlZlB0cjxTeW5jTWVzc2FnZVN0YXRl
PiBzeW5jTWVzc2FnZVN0YXRlID0gYWRvcHRSZWYobmV3IFN5bmNNZXNzYWdlU3RhdGUocnVuTG9v
cCkpOwotICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gc3luY01lc3NhZ2VTdGF0ZS5nZXQo
KTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gc3luY01lc3NhZ2VTdGF0ZS5nZXQoKTsK
IAogICAgIHJldHVybiBzeW5jTWVzc2FnZVN0YXRlLnJlbGVhc2UoKTsKIH0KQEAgLTM2MiwxMCAr
MzYyLDEwIEBAIFBhc3NPd25QdHI8QXJndW1lbnREZWNvZGVyPiBDb25uZWN0aW9uOjp3YWl0Rm9y
TWVzc2FnZShNZXNzYWdlSUQgbWVzc2FnZUlELCB1aW50CiAgICAgICAgIE11dGV4TG9ja2VyIGxv
Y2tlcihtX3dhaXRGb3JNZXNzYWdlTXV0ZXgpOwogCiAgICAgICAgIEhhc2hNYXA8c3RkOjpwYWly
PHVuc2lnbmVkLCB1aW50NjRfdD4sIEFyZ3VtZW50RGVjb2Rlcio+OjppdGVyYXRvciBpdCA9IG1f
d2FpdEZvck1lc3NhZ2VNYXAuZmluZChtZXNzYWdlQW5kRGVzdGluYXRpb24pOwotICAgICAgICBp
ZiAoaXQtPnNlY29uZCkgeworICAgICAgICBpZiAoaXQtPnZhbHVlKSB7CiAgICAgICAgICAgICAv
LyBGSVhNRTogbV93YWl0Rm9yTWVzc2FnZU1hcCBzaG91bGQgcmVhbGx5IGhvbGQgT3duUHRycyB0
bwogICAgICAgICAgICAgLy8gQXJndW1lbnREZWNvZGVycywgYnV0IEhhc2hNYXAgZG9lc24ndCBj
dXJyZW50bHkgc3VwcG9ydCBPd25QdHJzLgotICAgICAgICAgICAgT3duUHRyPEFyZ3VtZW50RGVj
b2Rlcj4gYXJndW1lbnRzID0gYWRvcHRQdHIoaXQtPnNlY29uZCk7CisgICAgICAgICAgICBPd25Q
dHI8QXJndW1lbnREZWNvZGVyPiBhcmd1bWVudHMgPSBhZG9wdFB0cihpdC0+dmFsdWUpOwogICAg
ICAgICAgICAgbV93YWl0Rm9yTWVzc2FnZU1hcC5yZW1vdmUoaXQpOwogICAgICAgICAgICAgCiAg
ICAgICAgICAgICByZXR1cm4gYXJndW1lbnRzLnJlbGVhc2UoKTsKQEAgLTUzOSw4ICs1MzksOCBA
QCB2b2lkIENvbm5lY3Rpb246OnByb2Nlc3NJbmNvbWluZ01lc3NhZ2UoTWVzc2FnZUlEIG1lc3Nh
Z2VJRCwgUGFzc093blB0cjxBcmd1bWVudAogICAgICAgICAKICAgICAgICAgSGFzaE1hcDxzdGQ6
OnBhaXI8dW5zaWduZWQsIHVpbnQ2NF90PiwgQXJndW1lbnREZWNvZGVyKj46Oml0ZXJhdG9yIGl0
ID0gbV93YWl0Rm9yTWVzc2FnZU1hcC5maW5kKHN0ZDo6bWFrZV9wYWlyKG1lc3NhZ2VJRC50b0lu
dCgpLCBpbmNvbWluZ01lc3NhZ2UuZGVzdGluYXRpb25JRCgpKSk7CiAgICAgICAgIGlmIChpdCAh
PSBtX3dhaXRGb3JNZXNzYWdlTWFwLmVuZCgpKSB7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kID0g
aW5jb21pbmdNZXNzYWdlLnJlbGVhc2VBcmd1bWVudHMoKS5sZWFrUHRyKCk7Ci0gICAgICAgICAg
ICBBU1NFUlQoaXQtPnNlY29uZCk7CisgICAgICAgICAgICBpdC0+dmFsdWUgPSBpbmNvbWluZ01l
c3NhZ2UucmVsZWFzZUFyZ3VtZW50cygpLmxlYWtQdHIoKTsKKyAgICAgICAgICAgIEFTU0VSVChp
dC0+dmFsdWUpOwogICAgICAgICAKICAgICAgICAgICAgIG1fd2FpdEZvck1lc3NhZ2VDb25kaXRp
b24uc2lnbmFsKCk7CiAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybS9ndGsvV29ya1F1ZXVlR3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRm
b3JtL2d0ay9Xb3JrUXVldWVHdGsuY3BwCmluZGV4IDFkZmFiODNjY2ZiMjRjOWYwMGVlNDBkMmRh
YTFjOTViMTYzODJhNDMuLjY4ODVkNDg1YmQxMTZkMzI4ZGVjZDAyYWFmNTRjOTE4NzgyYjJmMTYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2d0ay9Xb3JrUXVldWVHdGsuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2d0ay9Xb3JrUXVldWVHdGsuY3BwCkBAIC0x
NjYsNyArMTY2LDcgQEAgdm9pZCBXb3JrUXVldWU6OnJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVy
KGludCBmaWxlRGVzY3JpcHRvciwgaW50IGNvbmRpdGlvbiwgY28KICAgICAgICAgVmVjdG9yPEV2
ZW50U291cmNlKj4gc291cmNlczsKICAgICAgICAgRXZlbnRTb3VyY2VJdGVyYXRvciBpdCA9IG1f
ZXZlbnRTb3VyY2VzLmZpbmQoZmlsZURlc2NyaXB0b3IpOwogICAgICAgICBpZiAoaXQgIT0gbV9l
dmVudFNvdXJjZXMuZW5kKCkpIAotICAgICAgICAgICAgc291cmNlcyA9IGl0LT5zZWNvbmQ7Cisg
ICAgICAgICAgICBzb3VyY2VzID0gaXQtPnZhbHVlOwogCiAgICAgICAgIHNvdXJjZXMuYXBwZW5k
KGV2ZW50U291cmNlKTsKICAgICAgICAgbV9ldmVudFNvdXJjZXMuc2V0KGZpbGVEZXNjcmlwdG9y
LCBzb3VyY2VzKTsKQEAgLTE4Niw3ICsxODYsNyBAQCB2b2lkIFdvcmtRdWV1ZTo6dW5yZWdpc3Rl
ckV2ZW50U291cmNlSGFuZGxlcihpbnQgZmlsZURlc2NyaXB0b3IpCiAgICAgQVNTRVJUKG1fZXZl
bnRTb3VyY2VzLmNvbnRhaW5zKGZpbGVEZXNjcmlwdG9yKSk7CiAKICAgICBpZiAoaXQgIT0gbV9l
dmVudFNvdXJjZXMuZW5kKCkpIHsKLSAgICAgICAgVmVjdG9yPEV2ZW50U291cmNlKj4gc291cmNl
cyA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFZlY3RvcjxFdmVudFNvdXJjZSo+IHNvdXJjZXMgPSBp
dC0+dmFsdWU7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzb3VyY2VzLnNpemUo
KTsgaSsrKQogICAgICAgICAgICAgc291cmNlc1tpXS0+Y2FuY2VsKCk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL21hYy9Xb3JrUXVldWVNYWMuY3BwIGIvU291cmNlL1dl
YktpdDIvUGxhdGZvcm0vbWFjL1dvcmtRdWV1ZU1hYy5jcHAKaW5kZXggYWU0NzNlZTVjYzg0ZTU4
NDI5YjA0MzljY2Q5MjFhYzJjNDkyZmZhYS4uNmU1NGNlZTBiNzA5ODQwYTU0Zjc2Y2RhYTQyNGZl
ZWI0NjI5MDliMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vbWFjL1dvcmtR
dWV1ZU1hYy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vbWFjL1dvcmtRdWV1ZU1h
Yy5jcHAKQEAgLTE1Myw3ICsxNTMsNyBAQCB2b2lkIFdvcmtRdWV1ZTo6dW5yZWdpc3Rlck1hY2hQ
b3J0RXZlbnRIYW5kbGVyKG1hY2hfcG9ydF90IG1hY2hQb3J0KQogICAgIAogICAgIEFTU0VSVCht
X2V2ZW50U291cmNlcy5jb250YWlucyhtYWNoUG9ydCkpOwogCi0gICAgRXZlbnRTb3VyY2UqIGV2
ZW50U291cmNlID0gaXQtPnNlY29uZDsKKyAgICBFdmVudFNvdXJjZSogZXZlbnRTb3VyY2UgPSBp
dC0+dmFsdWU7CiAgICAgLy8gQ2FuY2VsIGFuZCByZWxlYXNlIHRoZSBzb3VyY2UuIEl0IHdpbGwg
YmUgZGVsZXRlZCBpbiBpdHMgZmluYWxpemUgaGFuZGxlci4KICAgICBkaXNwYXRjaF9zb3VyY2Vf
Y2FuY2VsKGV2ZW50U291cmNlLT5kaXNwYXRjaFNvdXJjZSgpKTsKICAgICBkaXNwYXRjaF9yZWxl
YXNlKGV2ZW50U291cmNlLT5kaXNwYXRjaFNvdXJjZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9QbHVnaW5zL05QUmVtb3RlT2JqZWN0TWFwLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9QbHVnaW5zL05QUmVtb3RlT2JqZWN0TWFwLmNwcAppbmRleCA3NjQxYWY1ZThj
ODkyZDFkMzdlZTk2ZGE5YjdlNjA1ODk5NzNlODhhLi5iNWVjMmQ5ZGEzOWYyNmRjYjQzMjBkOTVl
MDNmMmZjYWU0ZTdkN2RmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvUGx1Z2lu
cy9OUFJlbW90ZU9iamVjdE1hcC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1BsdWdp
bnMvTlBSZW1vdGVPYmplY3RNYXAuY3BwCkBAIC0yMDAsNyArMjAwLDcgQEAgdm9pZCBOUFJlbW90
ZU9iamVjdE1hcDo6cGx1Z2luRGVzdHJveWVkKFBsdWdpbiogcGx1Z2luKQogCiAgICAgLy8gR2F0
aGVyIHRoZSByZWNlaXZlcnMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcGx1Zy1pbi4KICAgICBmb3Ig
KEhhc2hNYXA8dWludDY0X3QsIE5QT2JqZWN0TWVzc2FnZVJlY2VpdmVyKj46OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV9yZWdpc3RlcmVkTlBPYmplY3RzLmJlZ2luKCksIGVuZCA9IG1fcmVnaXN0ZXJl
ZE5QT2JqZWN0cy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIE5QT2JqZWN0TWVz
c2FnZVJlY2VpdmVyKiBucE9iamVjdE1lc3NhZ2VSZWNlaXZlciA9IGl0LT5zZWNvbmQ7CisgICAg
ICAgIE5QT2JqZWN0TWVzc2FnZVJlY2VpdmVyKiBucE9iamVjdE1lc3NhZ2VSZWNlaXZlciA9IGl0
LT52YWx1ZTsKICAgICAgICAgaWYgKG5wT2JqZWN0TWVzc2FnZVJlY2VpdmVyLT5wbHVnaW4oKSA9
PSBwbHVnaW4pCiAgICAgICAgICAgICBtZXNzYWdlUmVjZWl2ZXJzLmFwcGVuZChucE9iamVjdE1l
c3NhZ2VSZWNlaXZlcik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVk
L1VzZXJNZXNzYWdlQ29kZXJzLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvVXNlck1lc3NhZ2VD
b2RlcnMuaAppbmRleCBlZTRhYjY0ZmZhNWI2M2I5MmMwOTk5NTU0ODVmMjBlMjE1NTVlNmNmLi4y
ZWM1YmI0ZDUyYjIwNzUxZmRiNTdlZDY2MjgwZWE5MDdiZDM5YjUwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvVXNlck1lc3NhZ2VDb2RlcnMuaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvVXNlck1lc3NhZ2VDb2RlcnMuaApAQCAtOTMsOCArOTMsOCBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICBJbW11dGFibGVEaWN0aW9uYXJ5OjpNYXBUeXBlOjpjb25zdF9pdGVyYXRvciBp
dCA9IG1hcC5iZWdpbigpOwogICAgICAgICAgICAgSW1tdXRhYmxlRGljdGlvbmFyeTo6TWFwVHlw
ZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLmVuZCgpOwogICAgICAgICAgICAgZm9yICg7IGl0
ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgICAgIGVuY29kZXItPmVuY29kZShpdC0+Zmly
c3QpOwotICAgICAgICAgICAgICAgIGVuY29kZXItPmVuY29kZShPd25lcihpdC0+c2Vjb25kLmdl
dCgpKSk7CisgICAgICAgICAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKGl0LT5rZXkpOworICAgICAg
ICAgICAgICAgIGVuY29kZXItPmVuY29kZShPd25lcihpdC0+dmFsdWUuZ2V0KCkpKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5jcHAKaW5kZXggNzQ2ZGYxMGE0MjM1
MWUyZmE1ZDI0YTFiNDIyMDRlOTVhMGY1MjA4Mi4uNGY0OWJiNzg2OWU3Y2YzNzlmZDJkNTdjMzRi
ZDE1YmNhOWYyZWI1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByZWZl
cmVuY2VzU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcmVmZXJlbmNl
c1N0b3JlLmNwcApAQCAtMTUxLDcgKzE1MSw3IEBAIHN0YXRpYyB0eXBlbmFtZSBNYXBUeXBlOjpN
YXBwZWRUeXBlIHZhbHVlRm9yS2V5KGNvbnN0IE1hcFR5cGUmIG1hcCwgY29uc3QgdHlwZW5hCiB7
CiAgICAgdHlwZW5hbWUgTWFwVHlwZTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAuZmluZChrZXkp
OwogICAgIGlmIChpdCAhPSBtYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdC0+c2Vjb25kOwor
ICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwogCiAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZUZvcktl
eTx0eXBlbmFtZSBNYXBUeXBlOjpNYXBwZWRUeXBlPihrZXkpOwogfQpAQCAtMTg3LDcgKzE4Nyw3
IEBAIGJvb2wgV2ViUHJlZmVyZW5jZXNTdG9yZTo6Z2V0Qm9vbFZhbHVlRm9yS2V5KGNvbnN0IFN0
cmluZyYga2V5KSBjb25zdAogICAgIC8vIEZJWE1FOiBFeHRlbmQgb3ZlcnJpZGluZyB0byBvdGhl
ciBrZXkgdHlwZXMgdXNlZCBmcm9tIFRlc3RSdW5uZXIuCiAgICAgQm9vbE92ZXJyaWRlc01hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBib29sVGVzdFJ1bm5lck92ZXJyaWRlc01hcCgpLmZpbmQoa2V5
KTsKICAgICBpZiAoaXQgIT0gYm9vbFRlc3RSdW5uZXJPdmVycmlkZXNNYXAoKS5lbmQoKSkKLSAg
ICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBpdC0+dmFsdWU7CiAgICAg
cmV0dXJuIHZhbHVlRm9yS2V5KG1fYm9vbFZhbHVlcywga2V5KTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9XZWJDb3JlQXJndW1lbnRDb2RlcnNNYWMubW0gYi9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1dlYkNvcmVBcmd1bWVudENvZGVyc01hYy5tbQppbmRl
eCAxOTZhYjExYzdhNzQzMTA3ZDM4MDBlMWZmOGZhNWJlMWYyYjNiODE4Li4wZjlkM2Q4YTNiZmI3
Mzc0M2IzOTMzNTMzNWRjNWY1OGMxZDE0NzgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvbWFjL1dlYkNvcmVBcmd1bWVudENvZGVyc01hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvbWFjL1dlYkNvcmVBcmd1bWVudENvZGVyc01hYy5tbQpAQCAtMTgzLDcgKzE4Myw3
IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxSZXNvdXJjZUVycm9yPjo6ZGVjb2RlKEFyZ3VtZW50RGVj
b2RlciogZGVjb2RlciwgUmVzb3VyY2VFcnJvCiAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gc3RyaW5nVXNlckluZm9NYXAuYmVnaW4oKTsKICAgICBIYXNo
TWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gc3RyaW5nVXNlckluZm9N
YXAuZW5kKCk7CiAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgW3VzZXJJbmZv
IHNldE9iamVjdDpuc1N0cmluZyhpdC0+c2Vjb25kKSBmb3JLZXk6bnNTdHJpbmcoaXQtPmZpcnN0
KV07CisgICAgICAgIFt1c2VySW5mbyBzZXRPYmplY3Q6bnNTdHJpbmcoaXQtPnZhbHVlKSBmb3JL
ZXk6bnNTdHJpbmcoaXQtPmtleSldOwogCiAgICAgaWYgKGNlcnRpZmljYXRlLmNlcnRpZmljYXRl
Q2hhaW4oKSkKICAgICAgICAgW3VzZXJJbmZvIHNldE9iamVjdDooTlNBcnJheSAqKWNlcnRpZmlj
YXRlLmNlcnRpZmljYXRlQ2hhaW4oKSBmb3JLZXk6QCJOU0Vycm9yUGVlckNlcnRpZmljYXRlQ2hh
aW5LZXkiXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9Bcmd1bWVudENv
ZGVyc1F0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9Bcmd1bWVudENvZGVyc1F0LmNw
cAppbmRleCBjODliZjQ0ZjE3MTkwYjAyYzQxMTJiY2JlZDZlMGM0MWZhM2M2NzVmLi5hNDM5Y2Fm
ZjFlNDg4ZTEwMmM1NTBhZDA0ZjM0NmQ1OTk2ZGQxODkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvcXQvQXJndW1lbnRDb2RlcnNRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
U2hhcmVkL3F0L0FyZ3VtZW50Q29kZXJzUXQuY3BwCkBAIC04Niw4ICs4Niw4IEBAIGJvb2wgQXJn
dW1lbnRDb2RlcjxXZWJDb3JlOjpEcmFnRGF0YT46OmRlY29kZShBcmd1bWVudERlY29kZXIqIGRl
Y29kZXIsIERyYWdEYXRhCiAgICAgICAgIE1JTUVEYXRhSGFzaE1hcDo6aXRlcmF0b3IgaXQgPSBt
YXAuYmVnaW4oKTsKICAgICAgICAgTUlNRURhdGFIYXNoTWFwOjppdGVyYXRvciBlbmQgPSBtYXAu
ZW5kKCk7CiAgICAgICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIFFC
eXRlQXJyYXkgYnl0ZXMoKGNoYXIqKWl0LT5zZWNvbmQuZGF0YSgpLCBpdC0+c2Vjb25kLnNpemUo
KSk7Ci0gICAgICAgICAgICBtaW1lRGF0YS0+c2V0RGF0YShpdC0+Zmlyc3QsIGJ5dGVzKTsKKyAg
ICAgICAgICAgIFFCeXRlQXJyYXkgYnl0ZXMoKGNoYXIqKWl0LT52YWx1ZS5kYXRhKCksIGl0LT52
YWx1ZS5zaXplKCkpOworICAgICAgICAgICAgbWltZURhdGEtPnNldERhdGEoaXQtPmtleSwgYnl0
ZXMpOwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvc291cC9XZWJDb3JlQXJndW1lbnRDb2RlcnNTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9zb3VwL1dlYkNvcmVBcmd1bWVudENvZGVyc1NvdXAuY3BwCmluZGV4IGRiZTJjNTFjZGNm
Yjc5OGFmYWNkMmZkMWRiZmE0OTJiMWExZWZiMWIuLjMzZDliZDNmZjIwZTYxOTBjYzNjZTRmZjg1
OTkzOGIwMzk0ZWQ2YzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9zb3VwL1dl
YkNvcmVBcmd1bWVudENvZGVyc1NvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9z
b3VwL1dlYkNvcmVBcmd1bWVudENvZGVyc1NvdXAuY3BwCkBAIC0xNDQsNyArMTQ0LDcgQEAgYm9v
bCBBcmd1bWVudENvZGVyPFJlc291cmNlUmVzcG9uc2U+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVy
KiBkZWNvZGVyLCBSZXNvdXJjZVIKICAgICBpZiAoIWRlY29kZXItPmRlY29kZShoZWFkZXJzKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBoZWFkZXJzLmJlZ2luKCksIGVuZCA9IGhlYWRlcnMuZW5kKCk7IGl0ICE9IGVu
ZDsgKytpdCkKLSAgICAgICAgcmVzcG9uc2Uuc2V0SFRUUEhlYWRlckZpZWxkKGl0LT5maXJzdCwg
aXQtPnNlY29uZCk7CisgICAgICAgIHJlc3BvbnNlLnNldEhUVFBIZWFkZXJGaWVsZChpdC0+a2V5
LCBpdC0+dmFsdWUpOwogCiAgICAgdWludDMyX3Qgc291cE1lc3NhZ2VGbGFnczsKICAgICBpZiAo
IWRlY29kZXItPmRlY29kZShzb3VwTWVzc2FnZUZsYWdzKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3QuY3BwCmlu
ZGV4IGJlODY2ZmEwYTk2N2FlYTZiNmU0MDUwN2U5MjRjYTc5NTE0NTJmZjYuLjk0ZDAzMDBjMTU3
ZWExNDM3MDU0NDE2YWU2NmM4NzFhZTM5NTY2MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdC5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0LmNwcApAQCAt
NTQsNyArNTQsNyBAQCBzdHJ1Y3QgX0V3a19CYWNrX0ZvcndhcmRfTGlzdCB7CiAgICAgICAgIEl0
ZW1zTWFwOjppdGVyYXRvciBpdCA9IHdyYXBwZXJDYWNoZS5iZWdpbigpOwogICAgICAgICBJdGVt
c01hcDo6aXRlcmF0b3IgZW5kID0gd3JhcHBlckNhY2hlLmVuZCgpOwogICAgICAgICBmb3IgKDsg
aXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1f
dW5yZWYoaXQtPnNlY29uZCk7CisgICAgICAgICAgICBld2tfYmFja19mb3J3YXJkX2xpc3RfaXRl
bV91bnJlZihpdC0+dmFsdWUpOwogICAgIH0KIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcAppbmRleCBlMjNmNmIwMDVmZDdlZTI2Yjkw
YWMwMzFmNWYyM2IyYWE4ZjNiYWY2Li45N2U5YTE3ZGFhMmQyMzI0OTVlZjZhMTcxMGRiODc2Yzc0
YWRlNTVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
Y29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Nv
bnRleHQuY3BwCkBAIC0xMDgsNyArMTA4LDcgQEAgc3RydWN0IF9Fd2tfQ29udGV4dCB7CiAgICAg
ICAgIEhhc2hNYXA8dWludDY0X3QsIEV3a19Eb3dubG9hZF9Kb2IqPjo6aXRlcmF0b3IgaXQgPSBk
b3dubG9hZEpvYnMuYmVnaW4oKTsKICAgICAgICAgSGFzaE1hcDx1aW50NjRfdCwgRXdrX0Rvd25s
b2FkX0pvYio+OjppdGVyYXRvciBlbmQgPSBkb3dubG9hZEpvYnMuZW5kKCk7CiAgICAgICAgIGZv
ciAoIDsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgZXdrX2Rvd25sb2FkX2pvYl91bnJl
ZihpdC0+c2Vjb25kKTsKKyAgICAgICAgICAgIGV3a19kb3dubG9hZF9qb2JfdW5yZWYoaXQtPnZh
bHVlKTsKICAgICB9CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfdmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9l
d2tfdmlldy5jcHAKaW5kZXggZGM3N2ZiMmNjMDJlNDNkYWVjMjk1NzhhODYwMGFkZWE1ODk0M2Jl
YS4uNDA3N2RjMWMwZGFkNDZmMmIxYjU2ZDRmMDBiMzdlZDc2NjRlNDZmNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcApAQCAtMzc0LDcgKzM3NCw3
IEBAIHN0YXRpYyB2b2lkIF9ld2tfdmlld19wcml2X2xvYWRpbmdfcmVzb3VyY2VzX2NsZWFyKExv
YWRpbmdSZXNvdXJjZXNNYXAmIGxvYWRpbmdSCiAgICAgTG9hZGluZ1Jlc291cmNlc01hcDo6aXRl
cmF0b3IgaXQgPSBsb2FkaW5nUmVzb3VyY2VzTWFwLmJlZ2luKCk7CiAgICAgTG9hZGluZ1Jlc291
cmNlc01hcDo6aXRlcmF0b3IgZW5kID0gbG9hZGluZ1Jlc291cmNlc01hcC5lbmQoKTsKICAgICBm
b3IgKCA7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgZXdrX3dlYl9yZXNvdXJjZV91bnJlZihp
dC0+c2Vjb25kKTsKKyAgICAgICAgZXdrX3dlYl9yZXNvdXJjZV91bnJlZihpdC0+dmFsdWUpOwog
CiAgICAgbG9hZGluZ1Jlc291cmNlc01hcC5jbGVhcigpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcAppbmRleCA2ZmVmYjY1MmI3
MTZiODA2Mzg5ZjdiMjM3NTZkNzhhZTlkYzU0NGQ0Li4wMGUzOWU3YWRmNzNkODQxNzA2NTI4OWQ2
OTFmMDBmYzc2NmY2OTIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRXZWJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRXZWJWaWV3LmNwcApAQCAtMjMwMSw3ICsyMzAxLDcgQEAgR0xpc3QqIHdlYmtp
dF93ZWJfdmlld19nZXRfc3VicmVzb3VyY2VzKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiAgICAg
V2ViS2l0V2ViVmlld1ByaXZhdGUqIHByaXYgPSB3ZWJWaWV3LT5wcml2OwogICAgIFJlc291cmNl
c01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcHJpdi0+c3VicmVzb3VyY2VzTWFwLmVuZCgpOwog
ICAgIGZvciAoUmVzb3VyY2VzTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHByaXYtPnN1YnJlc291
cmNlc01hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHN1YnJlc291cmNlcyA9
IGdfbGlzdF9wcmVwZW5kKHN1YnJlc291cmNlcywgaXQtPnNlY29uZC5nZXQoKSk7CisgICAgICAg
IHN1YnJlc291cmNlcyA9IGdfbGlzdF9wcmVwZW5kKHN1YnJlc291cmNlcywgaXQtPnZhbHVlLmdl
dCgpKTsKIAogICAgIHJldHVybiBnX2xpc3RfcmV2ZXJzZShzdWJyZXNvdXJjZXMpOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jh
c2UuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jh
c2UuY3BwCmluZGV4IGY1YmQyZGRjYzk2YTk4YmYxMzJhZDIxNjUyNTgyZmU0Y2E5ZTk4MmMuLjJl
MTc2MjU5ZTExOGIxNTFmZTQ1ZmFlOTFkMDdlODQyZGE0MjM3ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAKQEAg
LTIyNyw3ICsyMjcsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZUNvbnRhaW5lckZv
cmFsbChHdGtDb250YWluZXIqIGNvbnRhaW5lciwgZ2Jvb2xlYW4gaQogICAgIFdlYktpdFdlYlZp
ZXdDaGlsZHJlbk1hcCBjaGlsZHJlbiA9IHByaXYtPmNoaWxkcmVuOwogICAgIFdlYktpdFdlYlZp
ZXdDaGlsZHJlbk1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY2hpbGRyZW4uZW5kKCk7CiAgICAg
Zm9yIChXZWJLaXRXZWJWaWV3Q2hpbGRyZW5NYXA6OmNvbnN0X2l0ZXJhdG9yIGN1cnJlbnQgPSBj
aGlsZHJlbi5iZWdpbigpOyBjdXJyZW50ICE9IGVuZDsgKytjdXJyZW50KQotICAgICAgICAoKmNh
bGxiYWNrKShjdXJyZW50LT5maXJzdCwgY2FsbGJhY2tEYXRhKTsKKyAgICAgICAgKCpjYWxsYmFj
aykoY3VycmVudC0+a2V5LCBjYWxsYmFja0RhdGEpOwogCiAgICAgaWYgKGluY2x1ZGVJbnRlcm5h
bHMgJiYgcHJpdi0+aW5zcGVjdG9yVmlldykKICAgICAgICAgKCpjYWxsYmFjaykocHJpdi0+aW5z
cGVjdG9yVmlldywgY2FsbGJhY2tEYXRhKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvbWFjL1dLUHJpbnRpbmdWaWV3Lm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9tYWMvV0tQcmludGluZ1ZpZXcubW0KaW5kZXggNjNjNTg4OTVmNzEyOTNiMWI1NDU4
ZDllYjY4NDFkMGEwNjQ4MTQ5ZC4uY2ExY2FkNTgyNTk5ZmQwYzYwYjI1MjRjNmJjNzcyNzY5ZDJm
ZDM5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tQcmlu
dGluZ1ZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tQcmlu
dGluZ1ZpZXcubW0KQEAgLTE5NCw4ICsxOTQsOCBAQCBzdGF0aWMgQk9PTCBpc0ZvcmNpbmdQcmV2
aWV3VXBkYXRlOwogLSAodWludDY0X3QpX2V4cGVjdGVkUHJldmlld0NhbGxiYWNrRm9yUmVjdDoo
Y29uc3QgSW50UmVjdCYpcmVjdAogewogICAgIGZvciAoSGFzaE1hcDx1aW50NjRfdCwgV2ViQ29y
ZTo6SW50UmVjdD46Oml0ZXJhdG9yIGl0ZXIgPSBfZXhwZWN0ZWRQcmV2aWV3Q2FsbGJhY2tzLmJl
Z2luKCk7IGl0ZXIgIT0gX2V4cGVjdGVkUHJldmlld0NhbGxiYWNrcy5lbmQoKTsgKytpdGVyKSB7
Ci0gICAgICAgIGlmIChpdGVyLT5zZWNvbmQgID09IHJlY3QpCi0gICAgICAgICAgICByZXR1cm4g
aXRlci0+Zmlyc3Q7CisgICAgICAgIGlmIChpdGVyLT52YWx1ZSAgPT0gcmVjdCkKKyAgICAgICAg
ICAgIHJldHVybiBpdGVyLT5rZXk7CiAgICAgfQogICAgIHJldHVybiAwOwogfQpAQCAtMjI5LDgg
KzIyOSw4IEBAIHN0YXRpYyB2b2lkIHBhZ2VEaWREcmF3VG9QREYoV0tEYXRhUmVmIGRhdGFSZWYs
IFdLRXJyb3JSZWYsIHZvaWQqIHVudHlwZWRDb250ZXh0CiAgICAgICAgICAgICBBU1NFUlQoW3Zp
ZXcgX2lzUHJpbnRpbmdQcmV2aWV3XSk7CiAKICAgICAgICAgICAgIGlmIChkYXRhKSB7Ci0gICAg
ICAgICAgICAgICAgSGFzaE1hcDxXZWJDb3JlOjpJbnRSZWN0LCBWZWN0b3I8dWludDhfdD4gPjo6
QWRkUmVzdWx0IGVudHJ5ID0gdmlldy0+X3BhZ2VQcmV2aWV3cy5hZGQoaXRlci0+c2Vjb25kLCBW
ZWN0b3I8dWludDhfdD4oKSk7Ci0gICAgICAgICAgICAgICAgZW50cnkuaXRlcmF0b3ItPnNlY29u
ZC5hcHBlbmQoZGF0YS0+Ynl0ZXMoKSwgZGF0YS0+c2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBI
YXNoTWFwPFdlYkNvcmU6OkludFJlY3QsIFZlY3Rvcjx1aW50OF90PiA+OjpBZGRSZXN1bHQgZW50
cnkgPSB2aWV3LT5fcGFnZVByZXZpZXdzLmFkZChpdGVyLT52YWx1ZSwgVmVjdG9yPHVpbnQ4X3Q+
KCkpOworICAgICAgICAgICAgICAgIGVudHJ5Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQoZGF0YS0+
Ynl0ZXMoKSwgZGF0YS0+c2l6ZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHZpZXct
Pl9leHBlY3RlZFByZXZpZXdDYWxsYmFja3MucmVtb3ZlKGNvbnRleHQtPmNhbGxiYWNrSUQpOwog
ICAgICAgICAgICAgYm9vbCByZWNlaXZlZFJlc3BvbnNlVG9MYXRlc3RSZXF1ZXN0ID0gdmlldy0+
X2xhdGVzdEV4cGVjdGVkUHJldmlld0NhbGxiYWNrID09IGNvbnRleHQtPmNhbGxiYWNrSUQ7CkBA
IC00OTQsNyArNDk0LDcgQEAgc3RhdGljIHZvaWQgcHJlcGFyZURhdGFGb3JQcmludGluZ09uU2Vj
b25kYXJ5VGhyZWFkKHZvaWQqIHVudHlwZWRDb250ZXh0KQogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBwZGZEYXRhQnl0ZXMgPSBwYWdlUHJldmll
d0l0ZXJhdG9yLT5zZWNvbmQ7CisgICAgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBwZGZEYXRhQnl0
ZXMgPSBwYWdlUHJldmlld0l0ZXJhdG9yLT52YWx1ZTsKICAgICBSZXRhaW5QdHI8TlNEYXRhPiBw
ZGZEYXRhKEFkb3B0TlMsIFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOnBkZkRhdGFCeXRl
cy5kYXRhKCkgbGVuZ3RoOnBkZkRhdGFCeXRlcy5zaXplKCldKTsKICAgICBSZXRhaW5QdHI8UERG
RG9jdW1lbnQ+IHBkZkRvY3VtZW50KEFkb3B0TlMsIFtbcGRmRG9jdW1lbnRDbGFzcygpIGFsbG9j
XSBpbml0V2l0aERhdGE6cGRmRGF0YS5nZXQoKV0pOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL21hYy9XS1ZpZXcubW0KaW5kZXggOWQ2OTM5OWQ0ZWE3NDAzOGU3MTkxYzNmYmZkMjlm
NThhMDRlYjUxZC4uZDRiMzAxMjk4MzY5M2YyNDJkNzJiMzU3NzM0NTMyZWMxMzhiMmQ0YyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQpAQCAtNDI4LDcgKzQy
OCw3IEBAIHN0YXRpYyBTdHJpbmcgY29tbWFuZE5hbWVGb3JTZWxlY3RvcihTRUwgc2VsZWN0b3Ip
CiAgICAgc3RhdGljIGNvbnN0IFNlbGVjdG9yTmFtZU1hcCogZXhjZXB0aW9uTWFwID0gY3JlYXRl
U2VsZWN0b3JFeGNlcHRpb25NYXAoKTsKICAgICBTZWxlY3Rvck5hbWVNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gZXhjZXB0aW9uTWFwLT5maW5kKHNlbGVjdG9yKTsKICAgICBpZiAoaXQgIT0gZXhj
ZXB0aW9uTWFwLT5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgIHJl
dHVybiBpdC0+dmFsdWU7CiAgICAgCiAgICAgLy8gUmVtb3ZlIHRoZSB0cmFpbGluZyBjb2xvbi4K
ICAgICAvLyBObyBuZWVkIHRvIGNhcGl0YWxpemUgdGhlIGNvbW1hbmQgbmFtZSBzaW5jZSBFZGl0
b3IgY29tbWFuZCBuYW1lcyBhcmUKQEAgLTc0Miw3ICs3NDIsNyBAQCBzdGF0aWMgdm9pZCB2YWxp
ZGF0ZUNvbW1hbmRDYWxsYmFjayhXS1N0cmluZ1JlZiBjb21tYW5kTmFtZSwgYm9vbCBpc0VuYWJs
ZWQsIGludAogCiAgICAgLy8gQWRkIHRoaXMgaXRlbSB0byB0aGUgdmVjdG9yIG9mIGl0ZW1zIGZv
ciBhIGdpdmVuIGNvbW1hbmQgdGhhdCBhcmUgYXdhaXRpbmcgdmFsaWRhdGlvbi4KICAgICBWYWxp
ZGF0aW9uTWFwOjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gX2RhdGEtPl92YWxpZGF0aW9uTWFwLmFk
ZChjb21tYW5kTmFtZSwgVmFsaWRhdGlvblZlY3RvcigpKTsKLSAgICBhZGRSZXN1bHQuaXRlcmF0
b3ItPnNlY29uZC5hcHBlbmQoaXRlbSk7CisgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5h
cHBlbmQoaXRlbSk7CiAgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KSB7CiAgICAgICAgIC8v
IElmIHdlIGFyZSBub3QgYWxyZWFkeSBhd2FpdGluZyB2YWxpZGF0aW9uIGZvciB0aGlzIGNvbW1h
bmQsIHN0YXJ0IHRoZSBhc3luY2hyb25vdXMgdmFsaWRhdGlvbiBwcm9jZXNzLgogICAgICAgICAv
LyBGSVhNRTogVGhlb3JldGljYWxseSwgdGhlcmUgaXMgYSByYWNlIGhlcmU7IHdoZW4gd2UgZ2V0
IHRoZSBhbnN3ZXIgaXQgbWlnaHQgYmUgb2xkLCBmcm9tIGEgcHJldmlvdXMgdGltZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRp
bmF0ZWRCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuY3BwCmluZGV4IDg0ZjZlYmQyZjE2
NThlNjk5NjVlNDcxYmEzNjI1YTkyMjg5ZmFhNzIuLjc3ZmRjMGEyNmY4OGQ0MzA3YTdiNjAwN2Rh
YmQ1M2YyOTA2ZDU0N2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29y
ZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEJhY2tpbmdT
dG9yZS5jcHAKQEAgLTgwLDE1ICs4MCwxNSBAQCB2b2lkIENvb3JkaW5hdGVkQmFja2luZ1N0b3Jl
Ojp1cGRhdGVUaWxlKGludCBpZCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29ucwogewog
ICAgIEhhc2hNYXA8aW50LCBDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGU+OjppdGVyYXRvciBp
dCA9IG1fdGlsZXMuZmluZChpZCk7CiAgICAgQVNTRVJUKGl0ICE9IG1fdGlsZXMuZW5kKCkpOwot
ICAgIGl0LT5zZWNvbmQuaW5jcmVtZW50UmVwYWludENvdW50KCk7Ci0gICAgaXQtPnNlY29uZC5z
ZXRCYWNrQnVmZmVyKHRhcmdldFJlY3QsIHNvdXJjZVJlY3QsIGJhY2tCdWZmZXIsIG9mZnNldCk7
CisgICAgaXQtPnZhbHVlLmluY3JlbWVudFJlcGFpbnRDb3VudCgpOworICAgIGl0LT52YWx1ZS5z
ZXRCYWNrQnVmZmVyKHRhcmdldFJlY3QsIHNvdXJjZVJlY3QsIGJhY2tCdWZmZXIsIG9mZnNldCk7
CiB9CiAKIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6
OnRleHR1cmUoKSBjb25zdAogewogICAgIEhhc2hNYXA8aW50LCBDb29yZGluYXRlZEJhY2tpbmdT
dG9yZVRpbGU+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3RpbGVzLmVuZCgpOwogICAgIGZvciAo
SGFzaE1hcDxpbnQsIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZT46OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbV90aWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgUmVmUHRy
PEJpdG1hcFRleHR1cmU+IHRleHR1cmUgPSBpdC0+c2Vjb25kLnRleHR1cmUoKTsKKyAgICAgICAg
UmVmUHRyPEJpdG1hcFRleHR1cmU+IHRleHR1cmUgPSBpdC0+dmFsdWUudGV4dHVyZSgpOwogICAg
ICAgICBpZiAodGV4dHVyZSkKICAgICAgICAgICAgIHJldHVybiB0ZXh0dXJlOwogICAgIH0KQEAg
LTExMiw3ICsxMTIsNyBAQCB2b2lkIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjpwYWludFRvVGV4
dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLAogICAgIEhhc2hNYXA8aW50
LCBDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGU+OjppdGVyYXRvciBlbmQgPSBtX3RpbGVzLmVu
ZCgpOwogICAgIEZsb2F0UmVjdCBjb3ZlcmVkUmVjdDsKICAgICBmb3IgKEhhc2hNYXA8aW50LCBD
b29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGU+OjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGls
ZSYgdGlsZSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGls
ZSYgdGlsZSA9IGl0LT52YWx1ZTsKICAgICAgICAgaWYgKCF0aWxlLnRleHR1cmUoKSkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCkBAIC0xNTYsNyArMTU2LDcgQEAgdm9pZCBDb29yZGluYXRlZEJh
Y2tpbmdTdG9yZTo6Y29tbWl0VGlsZU9wZXJhdGlvbnMoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1h
cHBlcikKIAogICAgIEhhc2hNYXA8aW50LCBDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGU+Ojpp
dGVyYXRvciB0aWxlc0VuZCA9IG1fdGlsZXMuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPGludCwg
Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlPjo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2lu
KCk7IGl0ICE9IHRpbGVzRW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLnN3YXBCdWZmZXJz
KHRleHR1cmVNYXBwZXIpOworICAgICAgICBpdC0+dmFsdWUuc3dhcEJ1ZmZlcnModGV4dHVyZU1h
cHBlcik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQ
cm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9M
YXllclRyZWVDb29yZGluYXRvclByb3h5LmNwcAppbmRleCBlNmY1ODJmMjIwMzQxNjIyMjJjZDRm
NGFhODhjMzRjZTM5ZTA3NjEwLi4wZDA4ZjMxMThlNzU4ZWE1Nzk2MGQ5MjdkZDk2OWUxNDhkMzY2
ODQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFw
aGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5LmNw
cApAQCAtNzMsNyArNzMsNyBAQCB2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnVwZGF0
ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29ucwogICAgICAgICAgICAg
c3VyZmFjZSA9IFNoYXJlYWJsZVN1cmZhY2U6OmNyZWF0ZSh1cGRhdGVJbmZvLnN1cmZhY2VIYW5k
bGUpOwogICAgICAgICAgICAgbV9zdXJmYWNlcy5hZGQodG9rZW4sIHN1cmZhY2UpOwogICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgIHN1cmZhY2UgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAg
c3VyZmFjZSA9IGl0LT52YWx1ZTsKICAgICB9IGVsc2UKICAgICAgICAgc3VyZmFjZSA9IFNoYXJl
YWJsZVN1cmZhY2U6OmNyZWF0ZSh1cGRhdGVJbmZvLnN1cmZhY2VIYW5kbGUpOwogI2Vsc2UKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xh
eWVyVHJlZVJlbmRlcmVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRl
ZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmNwcAppbmRleCBiOTRjNjZiOWQzNjYwMTFiZDg1
Y2FkMzIyN2YwNWRmNzdiYzQ5M2VlLi45MTgzNGU3ZjViOWY0NWI5ODJiNzZlZjdkOGY2Y2RlZWY2
ODI2NDZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRH
cmFwaGljcy9MYXllclRyZWVSZW5kZXJlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuY3BwCkBAIC0xODMsNyAr
MTgzLDcgQEAgdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6YWRqdXN0UG9zaXRpb25Gb3JGaXhlZExh
eWVycygpCiAKICAgICBMYXllck1hcDo6aXRlcmF0b3IgZW5kID0gbV9maXhlZExheWVycy5lbmQo
KTsKICAgICBmb3IgKExheWVyTWFwOjppdGVyYXRvciBpdCA9IG1fZml4ZWRMYXllcnMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICB0b1RleHR1cmVNYXBwZXJMYXllcihpdC0+c2Vj
b25kKS0+c2V0U2Nyb2xsUG9zaXRpb25EZWx0YUlmTmVlZGVkKGRlbHRhKTsKKyAgICAgICAgdG9U
ZXh0dXJlTWFwcGVyTGF5ZXIoaXQtPnZhbHVlKS0+c2V0U2Nyb2xsUG9zaXRpb25EZWx0YUlmTmVl
ZGVkKGRlbHRhKTsKIH0KIAogdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6ZGlkQ2hhbmdlU2Nyb2xs
UG9zaXRpb24oY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uKQpAQCAtMjA2LDcgKzIwNiw3IEBAIHZv
aWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnN5bmNDYW52YXMoV2ViTGF5ZXJJRCBpZCwgY29uc3QgV2Vi
Q29yZTo6SW50U2l6ZSYgY2FudmFzCiAgICAgICAgIGNhbnZhc0JhY2tpbmdTdG9yZSA9IFRleHR1
cmVNYXBwZXJTdXJmYWNlQmFja2luZ1N0b3JlOjpjcmVhdGUoKTsKICAgICAgICAgbV9zdXJmYWNl
QmFja2luZ1N0b3Jlcy5zZXQoaWQsIGNhbnZhc0JhY2tpbmdTdG9yZSk7CiAgICAgfSBlbHNlCi0g
ICAgICAgIGNhbnZhc0JhY2tpbmdTdG9yZSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIGNhbnZhc0Jh
Y2tpbmdTdG9yZSA9IGl0LT52YWx1ZTsKIAogICAgIGNhbnZhc0JhY2tpbmdTdG9yZS0+c2V0R3Jh
cGhpY3NTdXJmYWNlKGdyYXBoaWNzU3VyZmFjZVRva2VuLCBjYW52YXNTaXplLCBmcm9udEJ1ZmZl
cik7CiAgICAgbGF5ZXItPnNldENvbnRlbnRzVG9NZWRpYShjYW52YXNCYWNraW5nU3RvcmUuZ2V0
KCkpOwpAQCAtMjE3LDcgKzIxNyw3IEBAIHZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnNldExheWVy
Q2hpbGRyZW4oV2ViTGF5ZXJJRCBpZCwgY29uc3QgVmVjdG9yPFdlYkxheWVySUQ+CiB7CiAgICAg
ZW5zdXJlTGF5ZXIoaWQpOwogICAgIExheWVyTWFwOjppdGVyYXRvciBpdCA9IG1fbGF5ZXJzLmZp
bmQoaWQpOwotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gaXQtPnNlY29uZDsKKyAgICBHcmFw
aGljc0xheWVyKiBsYXllciA9IGl0LT52YWx1ZTsKICAgICBWZWN0b3I8R3JhcGhpY3NMYXllcio+
IGNoaWxkcmVuOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZElEcy5zaXplKCk7
ICsraSkgewpAQCAtMjM5LDcgKzIzOSw3IEBAIHZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnNldExh
eWVyRmlsdGVycyhXZWJMYXllcklEIGlkLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmCiAgICAg
TGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9sYXllcnMuZmluZChpZCk7CiAgICAgQVNTRVJUKGl0
ICE9IG1fbGF5ZXJzLmVuZCgpKTsKIAotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gaXQtPnNl
Y29uZDsKKyAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IGl0LT52YWx1ZTsKICAgICBsYXllci0+
c2V0RmlsdGVycyhmaWx0ZXJzKTsKIH0KICNlbmRpZgpAQCAtMjUwLDcgKzI1MCw3IEBAIHZvaWQg
TGF5ZXJUcmVlUmVuZGVyZXI6OnNldExheWVyU3RhdGUoV2ViTGF5ZXJJRCBpZCwgY29uc3QgV2Vi
TGF5ZXJJbmZvJiBsYXllckluCiAgICAgTGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9sYXllcnMu
ZmluZChpZCk7CiAgICAgQVNTRVJUKGl0ICE9IG1fbGF5ZXJzLmVuZCgpKTsKIAotICAgIEdyYXBo
aWNzTGF5ZXIqIGxheWVyID0gaXQtPnNlY29uZDsKKyAgICBHcmFwaGljc0xheWVyKiBsYXllciA9
IGl0LT52YWx1ZTsKIAogICAgIGxheWVyLT5zZXRSZXBsaWNhdGVkQnlMYXllcihsYXllckJ5SUQo
bGF5ZXJJbmZvLnJlcGxpY2EpKTsKICAgICBsYXllci0+c2V0TWFza0xheWVyKGxheWVyQnlJRChs
YXllckluZm8ubWFzaykpOwpAQCAtMzc3LDcgKzM3Nyw3IEBAIHZvaWQgTGF5ZXJUcmVlUmVuZGVy
ZXI6OmFzc2lnbkltYWdlVG9MYXllcihHcmFwaGljc0xheWVyKiBsYXllciwgaW50NjRfdCBpbWFn
ZUlECiAKICAgICBIYXNoTWFwPGludDY0X3QsIFJlZlB0cjxUZXh0dXJlTWFwcGVyQmFja2luZ1N0
b3JlPiA+OjppdGVyYXRvciBpdCA9IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmZpbmQoaW1h
Z2VJRCk7CiAgICAgQVNTRVJUKGl0ICE9IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmVuZCgp
KTsKLSAgICBsYXllci0+c2V0Q29udGVudHNUb01lZGlhKGl0LT5zZWNvbmQuZ2V0KCkpOworICAg
IGxheWVyLT5zZXRDb250ZW50c1RvTWVkaWEoaXQtPnZhbHVlLmdldCgpKTsKIH0KIAogdm9pZCBM
YXllclRyZWVSZW5kZXJlcjo6Y29tbWl0VGlsZU9wZXJhdGlvbnMoKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2Vy
UHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0dlb2xvY2F0aW9uUGVybWlzc2lv
blJlcXVlc3RNYW5hZ2VyUHJveHkuY3BwCmluZGV4IDcxYmVhZjVhNWMzMWQ0NTVjYThkMmIxYTI4
ODFjYTJhNzI3MTQ3YjIuLjBkNDE2MzU1NDY1ZmY5MGRhNmJjZjA4ZWMzNWI4NGMxNzFhNTM5OTYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9HZW9sb2NhdGlvblBlcm1pc3Np
b25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
R2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5jcHAKQEAgLTQyLDcgKzQy
LDcgQEAgdm9pZCBHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5OjppbnZh
bGlkYXRlUmVxdWVzdHMoKQogICAgIFBlbmRpbmdSZXF1ZXN0TWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IG1fcGVuZGluZ1JlcXVlc3RzLmJlZ2luKCk7CiAgICAgUGVuZGluZ1JlcXVlc3RNYXA6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGVuZGluZ1JlcXVlc3RzLmVuZCgpOwogICAgIGZvciAoOyBp
dCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPmludmFsaWRhdGUoKTsKKyAgICAg
ICAgaXQtPnZhbHVlLT5pbnZhbGlkYXRlKCk7CiAKICAgICBtX3BlbmRpbmdSZXF1ZXN0cy5jbGVh
cigpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0luc3BlY3RvclNl
cnZlci9XZWJJbnNwZWN0b3JTZXJ2ZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0lu
c3BlY3RvclNlcnZlci9XZWJJbnNwZWN0b3JTZXJ2ZXIuY3BwCmluZGV4IDY2ZDY0NDczNDQ3Yjlk
OTBmNjI5OWI5MjAzY2NkN2M1YWQxM2U4Y2EuLmJjNTg1ZTk0ZGM4NDM3MWU5NTZlZDBjZjVlNjll
YWZiMDI2YjEyNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0
b3JTZXJ2ZXIvV2ViSW5zcGVjdG9yU2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvSW5zcGVjdG9yU2VydmVyL1dlYkluc3BlY3RvclNlcnZlci5jcHAKQEAgLTY3LDcgKzY3
LDcgQEAgV2ViSW5zcGVjdG9yU2VydmVyOjp+V2ViSW5zcGVjdG9yU2VydmVyKCkKICAgICAvLyBD
bG9zZSBhbnkgcmVtYWluaW5nIG9wZW4gY29ubmVjdGlvbnMuCiAgICAgSGFzaE1hcDx1bnNpZ25l
ZCwgV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbio+OjppdGVyYXRvciBlbmQgPSBtX2Nvbm5lY3Rp
b25NYXAuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPHVuc2lnbmVkLCBXZWJTb2NrZXRTZXJ2ZXJD
b25uZWN0aW9uKj46Oml0ZXJhdG9yIGl0ID0gbV9jb25uZWN0aW9uTWFwLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgewotICAgICAgICBXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uKiBjb25uZWN0
aW9uID0gaXQtPnNlY29uZDsKKyAgICAgICAgV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbiogY29u
bmVjdGlvbiA9IGl0LT52YWx1ZTsKICAgICAgICAgV2ViSW5zcGVjdG9yUHJveHkqIGNsaWVudCA9
IG1fY2xpZW50TWFwLmdldChjb25uZWN0aW9uLT5pZGVudGlmaWVyKCkpOwogICAgICAgICBjbG9z
ZUNvbm5lY3Rpb24oY2xpZW50LCBjb25uZWN0aW9uKTsKICAgICB9CkBAIC03OCw3ICs3OCw3IEBA
IGludCBXZWJJbnNwZWN0b3JTZXJ2ZXI6OnJlZ2lzdGVyUGFnZShXZWJJbnNwZWN0b3JQcm94eSog
Y2xpZW50KQogI2lmbmRlZiBBU1NFUlRfRElTQUJMRUQKICAgICBDbGllbnRNYXA6Oml0ZXJhdG9y
IGVuZCA9IG1fY2xpZW50TWFwLmVuZCgpOwogICAgIGZvciAoQ2xpZW50TWFwOjppdGVyYXRvciBp
dCA9IG1fY2xpZW50TWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgQVNTRVJU
KGl0LT5zZWNvbmQgIT0gY2xpZW50KTsKKyAgICAgICAgQVNTRVJUKGl0LT52YWx1ZSAhPSBjbGll
bnQpOwogI2VuZGlmCiAKICAgICBpbnQgcGFnZUlkID0gbV9uZXh0QXZhaWxhYmxlUGFnZUlkKys7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL1dl
YlNvY2tldFNlcnZlckNvbm5lY3Rpb24uY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0lu
c3BlY3RvclNlcnZlci9XZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uLmNwcAppbmRleCBhYmM4MDVm
ZDdjYzdmMWZiNTI1YzBkMmZhNjZlMjFhNDljZGMyYWExLi42MzE3YzYyYzIzOTc1NjZkODlmZjc0
NDZlOTQwMjc0NWZkOGQ3ZmRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
SW5zcGVjdG9yU2VydmVyL1dlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24uY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvV2ViU29ja2V0U2VydmVyQ29ubmVj
dGlvbi5jcHAKQEAgLTEwNiw5ICsxMDYsOSBAQCB2b2lkIFdlYlNvY2tldFNlcnZlckNvbm5lY3Rp
b246OnNlbmRIVFRQUmVzcG9uc2VIZWFkZXIoaW50IHN0YXR1c0NvZGUsIGNvbnN0IFN0cgogICAg
IGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiXHJcbiIpOwogICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IGhlYWRlckZpZWxkcy5lbmQoKTsKICAgICBmb3IgKEhUVFBIZWFkZXJN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaGVhZGVyRmllbGRzLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgewotICAgICAgICBidWlsZGVyLmFwcGVuZChpdC0+Zmlyc3QpOworICAgICAgICBidWls
ZGVyLmFwcGVuZChpdC0+a2V5KTsKICAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCI6ICIp
OwotICAgICAgICBidWlsZGVyLmFwcGVuZChpdC0+c2Vjb25kKTsKKyAgICAgICAgYnVpbGRlci5h
cHBlbmQoaXQtPnZhbHVlKTsKICAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJcclxuIik7
CiAgICAgfQogICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiXHJcbiIpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9xdC9XZWJJbnNwZWN0b3JT
ZXJ2ZXJRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL3F0
L1dlYkluc3BlY3RvclNlcnZlclF0LmNwcAppbmRleCAxODgyNTg2YWYzOWMxNzhmMWI2ZTQ3NjEw
MDg5ZDM5YzllNWMxZjRmLi4xMWU1N2NmZDVlYmM3MTAzZTVmNTBmY2FiZThmNzQ1NzhjYzQ3NThk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL3F0
L1dlYkluc3BlY3RvclNlcnZlclF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
SW5zcGVjdG9yU2VydmVyL3F0L1dlYkluc3BlY3RvclNlcnZlclF0LmNwcApAQCAtODMsMTggKzgz
LDE4IEBAIHZvaWQgV2ViSW5zcGVjdG9yU2VydmVyOjpidWlsZFBhZ2VMaXN0KFZlY3RvcjxjaGFy
PiYgZGF0YSwgU3RyaW5nJiBjb250ZW50VHlwZSkKICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwo
IlsgIik7CiAgICAgQ2xpZW50TWFwOjppdGVyYXRvciBlbmQgPSBtX2NsaWVudE1hcC5lbmQoKTsK
ICAgICBmb3IgKENsaWVudE1hcDo6aXRlcmF0b3IgaXQgPSBtX2NsaWVudE1hcC5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgV2ViUGFnZVByb3h5KiB3ZWJQYWdlID0gaXQtPnNl
Y29uZC0+cGFnZSgpOworICAgICAgICBXZWJQYWdlUHJveHkqIHdlYlBhZ2UgPSBpdC0+dmFsdWUt
PnBhZ2UoKTsKICAgICAgICAgaWYgKGl0ICE9IG1fY2xpZW50TWFwLmJlZ2luKCkpCiAgICAgICAg
ICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiwgIik7CiAgICAgICAgIGJ1aWxkZXIuYXBwZW5k
TGl0ZXJhbCgieyBcImlkXCI6ICIpOwotICAgICAgICBidWlsZGVyLmFwcGVuZE51bWJlcihpdC0+
Zmlyc3QpOworICAgICAgICBidWlsZGVyLmFwcGVuZE51bWJlcihpdC0+a2V5KTsKICAgICAgICAg
YnVpbGRlci5hcHBlbmRMaXRlcmFsKCIsIFwidGl0bGVcIjogXCIiKTsKICAgICAgICAgYnVpbGRl
ci5hcHBlbmQod2ViUGFnZS0+cGFnZVRpdGxlKCkpOwogICAgICAgICBidWlsZGVyLmFwcGVuZExp
dGVyYWwoIlwiLCBcInVybFwiOiBcIiIpOwogICAgICAgICBidWlsZGVyLmFwcGVuZCh3ZWJQYWdl
LT5hY3RpdmVVUkwoKSk7CiAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiXCIsIFwiaW5z
cGVjdG9yVXJsXCI6IFwiIik7CiAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHJlbW90ZUluc3BlY3Rv
clBhZ2VQYXRoKCkpOwotICAgICAgICBidWlsZGVyLmFwcGVuZE51bWJlcihpdC0+Zmlyc3QpOwor
ICAgICAgICBidWlsZGVyLmFwcGVuZE51bWJlcihpdC0+a2V5KTsKICAgICAgICAgYnVpbGRlci5h
cHBlbmRMaXRlcmFsKCJcIiB9Iik7CiAgICAgfQogICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgi
IF0iKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Ob3RpZmljYXRpb25z
L05vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9Ob3RpZmljYXRpb25zL05vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1
ZXN0TWFuYWdlclByb3h5LmNwcAppbmRleCAwNzkyMjk4NWU0NTY1ZjNjNzNjYWRjM2EwY2Y0NTUy
MTdjNjE5OTY5Li40YTBjNDc1MjkzN2I4NzJkNWRlMjY5YzkxNjk0ZTIyMThkMzIwZTFkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTm90aWZpY2F0aW9ucy9Ob3RpZmljYXRp
b25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL05vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5h
Z2VyUHJveHkuY3BwCkBAIC00Myw3ICs0Myw3IEBAIHZvaWQgTm90aWZpY2F0aW9uUGVybWlzc2lv
blJlcXVlc3RNYW5hZ2VyUHJveHk6OmludmFsaWRhdGVSZXF1ZXN0cygpCiAgICAgUGVuZGluZ1Jl
cXVlc3RNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wZW5kaW5nUmVxdWVzdHMuYmVnaW4oKTsK
ICAgICBQZW5kaW5nUmVxdWVzdE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wZW5kaW5nUmVx
dWVzdHMuZW5kKCk7CiAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNl
Y29uZC0+aW52YWxpZGF0ZSgpOworICAgICAgICBpdC0+dmFsdWUtPmludmFsaWRhdGUoKTsKICAg
ICAKICAgICBtX3BlbmRpbmdSZXF1ZXN0cy5jbGVhcigpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc1Byb3h5LmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NQcm94eS5jcHAKaW5kZXgg
Y2ZkZmY5ZWZiMjk2OGEzNGY3N2RjZWE5ZTg2NmYxZDU3NTM3YjdmNi4uNjE4MGIxOTc4OGIwYjJj
MTVkMTQ0NDI4NmE2ZTYwNzljYTVjZTJiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc1Byb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzUHJveHkuY3BwCkBAIC0xNTIsMTAgKzE1
MiwxMCBAQCB2b2lkIFBsdWdpblByb2Nlc3NQcm94eTo6cGx1Z2luUHJvY2Vzc0NyYXNoZWRPckZh
aWxlZFRvTGF1bmNoKCkKICAgICB9CiAKICAgICB3aGlsZSAoIW1fcGVuZGluZ0dldFNpdGVzUmVw
bGllcy5pc0VtcHR5KCkpCi0gICAgICAgIGRpZEdldFNpdGVzV2l0aERhdGEoVmVjdG9yPFN0cmlu
Zz4oKSwgbV9wZW5kaW5nR2V0U2l0ZXNSZXBsaWVzLmJlZ2luKCktPmZpcnN0KTsKKyAgICAgICAg
ZGlkR2V0U2l0ZXNXaXRoRGF0YShWZWN0b3I8U3RyaW5nPigpLCBtX3BlbmRpbmdHZXRTaXRlc1Jl
cGxpZXMuYmVnaW4oKS0+a2V5KTsKIAogICAgIHdoaWxlICghbV9wZW5kaW5nQ2xlYXJTaXRlRGF0
YVJlcGxpZXMuaXNFbXB0eSgpKQotICAgICAgICBkaWRDbGVhclNpdGVEYXRhKG1fcGVuZGluZ0Ns
ZWFyU2l0ZURhdGFSZXBsaWVzLmJlZ2luKCktPmZpcnN0KTsKKyAgICAgICAgZGlkQ2xlYXJTaXRl
RGF0YShtX3BlbmRpbmdDbGVhclNpdGVEYXRhUmVwbGllcy5iZWdpbigpLT5rZXkpOwogCiAgICAg
Ly8gVGVsbCB0aGUgcGx1Zy1pbiBwcm9jZXNzIG1hbmFnZXIgdG8gZm9yZ2V0IGFib3V0IHRoaXMg
cGx1Zy1pbiBwcm9jZXNzIHByb3h5LiBUaGlzIG1heSBjYXVzZSB1cyB0byBiZSBkZWxldGVkLgog
ICAgIG1fcGx1Z2luUHJvY2Vzc01hbmFnZXItPnJlbW92ZVBsdWdpblByb2Nlc3NQcm94eSh0aGlz
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmNwcAppbmRleCAwZGM1MzA2NDc0
M2Y2YmYwOGVjMmE2MWRjNmNjZTcwZTYxNjlhNjZjLi5kM2EzNTFkOTdkMjI2MGNlMzIyYzA4NTMx
MWU4YzY1YmQ1MGZmNjZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
Q29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHQuY3Bw
CkBAIC05NTEsNyArOTUxLDcgQEAgc3RhdGljIFBhc3NSZWZQdHI8TXV0YWJsZURpY3Rpb25hcnk+
IGNyZWF0ZURpY3Rpb25hcnlGcm9tSGFzaE1hcChjb25zdCBIYXNoTWFwPFMKICAgICBSZWZQdHI8
TXV0YWJsZURpY3Rpb25hcnk+IHJlc3VsdCA9IE11dGFibGVEaWN0aW9uYXJ5OjpjcmVhdGUoKTsK
ICAgICBIYXNoTWFwPFN0cmluZywgdWludDY0X3Q+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAu
ZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPFN0cmluZywgdWludDY0X3Q+Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IG1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHJlc3VsdC0+c2V0
KGl0LT5maXJzdCwgUmVmUHRyPFdlYlVJbnQ2ND4oV2ViVUludDY0OjpjcmVhdGUoaXQtPnNlY29u
ZCkpLmdldCgpKTsKKyAgICAgICAgcmVzdWx0LT5zZXQoaXQtPmtleSwgUmVmUHRyPFdlYlVJbnQ2
ND4oV2ViVUludDY0OjpjcmVhdGUoaXQtPnZhbHVlKSkuZ2V0KCkpOwogICAgIAogICAgIHJldHVy
biByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViSWNv
bkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJY29uRGF0YWJhc2Uu
Y3BwCmluZGV4IDQxYzI2MTdiZmIzODU3ZDU5MjcxNDMxZDZmMDY5ZTczNjlmNzY4MTMuLmNiMWYy
MzZmNGJlNDRmZjY5MDBlYzY5ZGJhZjljMzM2NGMwOGU0YWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJJY29uRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJJY29uRGF0YWJhc2UuY3BwCkBAIC0yNjMsMTQgKzI2MywxNCBAQCB2b2lk
IFdlYkljb25EYXRhYmFzZTo6ZGlkRmluaXNoVVJMSW1wb3J0KCkKICAgICBIYXNoTWFwPHVpbnQ2
NF90LCBTdHJpbmc+OjppdGVyYXRvciBlbmQgPSBtX3BlbmRpbmdMb2FkRGVjaXNpb25VUkxNYXAu
ZW5kKCk7CiAgICAgCiAgICAgZm9yICg7IGkgIT0gZW5kOyArK2kpIHsKLSAgICAgICAgTE9HKElj
b25EYXRhYmFzZSwgIldLMiBVSVByb2Nlc3MgcGVyZm9ybWluZyBkZWxheWVkIGNhbGxiYWNrIG9u
IGNhbGxiYWNrIElEICVpIGZvciBwYWdlIHVybCAlcyIsIChpbnQpaS0+Zmlyc3QsIGktPnNlY29u
ZC5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIEljb25Mb2FkRGVjaXNpb24gZGVjaXNpb24gPSBt
X2ljb25EYXRhYmFzZUltcGwtPnN5bmNocm9ub3VzTG9hZERlY2lzaW9uRm9ySWNvblVSTChpLT5z
ZWNvbmQsIDApOworICAgICAgICBMT0coSWNvbkRhdGFiYXNlLCAiV0syIFVJUHJvY2VzcyBwZXJm
b3JtaW5nIGRlbGF5ZWQgY2FsbGJhY2sgb24gY2FsbGJhY2sgSUQgJWkgZm9yIHBhZ2UgdXJsICVz
IiwgKGludClpLT5rZXksIGktPnZhbHVlLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgSWNvbkxv
YWREZWNpc2lvbiBkZWNpc2lvbiA9IG1faWNvbkRhdGFiYXNlSW1wbC0+c3luY2hyb25vdXNMb2Fk
RGVjaXNpb25Gb3JJY29uVVJMKGktPnZhbHVlLCAwKTsKIAogICAgICAgICAvLyBEZWNpc2lvbnMg
c2hvdWxkIG5ldmVyIGJlIHVua25vd24gYWZ0ZXIgdGhlIGluaXRhbCBpbXBvcnQgaXMgY29tcGxl
dGUKICAgICAgICAgQVNTRVJUKGRlY2lzaW9uICE9IEljb25Mb2FkVW5rbm93bik7CiAKICAgICAg
ICAgLy8gRklYTUUgKE11bHRpLVdlYlByb2Nlc3MpOiA8cmRhcjovL3Byb2JsZW0vMTIyNDAyMjM+
IFdlIG5lZWQgdG8ga25vdyB3aGljaCBjb25uZWN0aW9uIHRvIHNlbmQgdGhpcyBtZXNzYWdlIHRv
LgotICAgICAgICBtX3dlYkNvbnRleHQtPnNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2Vi
SWNvbkRhdGFiYXNlUHJveHk6OlJlY2VpdmVkSWNvbkxvYWREZWNpc2lvbihzdGF0aWNfY2FzdDxp
bnQ+KGRlY2lzaW9uKSwgaS0+Zmlyc3QpKTsKKyAgICAgICAgbV93ZWJDb250ZXh0LT5zZW5kVG9B
bGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYkljb25EYXRhYmFzZVByb3h5OjpSZWNlaXZlZEljb25M
b2FkRGVjaXNpb24oc3RhdGljX2Nhc3Q8aW50PihkZWNpc2lvbiksIGktPmtleSkpOwogICAgIH0K
ICAgICAKICAgICBtX3BlbmRpbmdMb2FkRGVjaXNpb25VUkxNYXAuY2xlYXIoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJbnRlbnREYXRhLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJJbnRlbnREYXRhLmNwcAppbmRleCA2MzJhYTNiNzU1NGRiMjQz
YmQzNzVkZDc5MjEzOTUzMWU2OWFlMWZkLi5jNmQ4YzY0YmE4NTk2MjUxZDVkMzZjZmU5MTlhMjk2
MzgyNzExOTRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViSW50ZW50
RGF0YS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkludGVudERhdGEuY3Bw
CkBAIC03OCw3ICs3OCw3IEBAIFBhc3NSZWZQdHI8SW1tdXRhYmxlRGljdGlvbmFyeT4gV2ViSW50
ZW50RGF0YTo6ZXh0cmFzKCkgY29uc3QKICAgICBJbW11dGFibGVEaWN0aW9uYXJ5OjpNYXBUeXBl
IHdrRXh0cmFzOwogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBl
bmQgPSBtX3N0b3JlLmV4dHJhcy5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBTdHJp
bmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fc3RvcmUuZXh0cmFzLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkKLSAgICAgICAgd2tFeHRyYXMuc2V0KGl0LT5maXJzdCwgV2ViU3RyaW5nOjpjcmVh
dGUoaXQtPnNlY29uZCkpOworICAgICAgICB3a0V4dHJhcy5zZXQoaXQtPmtleSwgV2ViU3RyaW5n
OjpjcmVhdGUoaXQtPnZhbHVlKSk7CiAKICAgICByZXR1cm4gSW1tdXRhYmxlRGljdGlvbmFyeTo6
YWRvcHQod2tFeHRyYXMpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYlByb2Nlc3NQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vz
c1Byb3h5LmNwcAppbmRleCAyMmEyYjdmMmM3YTI0MWNlZGU5NmI5NzRiZTM0YWI0NDYwYjcxN2Rk
Li5hMjBlNDY3ZmU3NjdkNjQ0NDg5MmVjNjE1MjIzYzhmNjI4ZmJiMmE4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcApAQCAtMjY2LDkgKzI2Niw5IEBA
IGJvb2wgV2ViUHJvY2Vzc1Byb3h5OjpjaGVja1VSTFJlY2VpdmVkRnJvbVdlYlByb2Nlc3MoY29u
c3QgS1VSTCYgdXJsKQogICAgIC8vIEl0ZW1zIGluIGJhY2svZm9yd2FyZCBsaXN0IGhhdmUgYmVl
biBhbHJlYWR5IGNoZWNrZWQuCiAgICAgLy8gT25lIGNhc2Ugd2hlcmUgd2UgZG9uJ3QgaGF2ZSBz
YW5kYm94IGV4dGVuc2lvbnMgZm9yIGZpbGUgVVJMcyBpbiBiL2YgbGlzdCBpcyBpZiB0aGUgbGlz
dCBoYXMgYmVlbiByZWluc3RhdGVkIGFmdGVyIGEgY3Jhc2ggb3IgYSBicm93c2VyIHJlc3RhcnQu
CiAgICAgZm9yIChXZWJCYWNrRm9yd2FyZExpc3RJdGVtTWFwOjppdGVyYXRvciBpdGVyID0gbV9i
YWNrRm9yd2FyZExpc3RJdGVtTWFwLmJlZ2luKCksIGVuZCA9IG1fYmFja0ZvcndhcmRMaXN0SXRl
bU1hcC5lbmQoKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewotICAgICAgICBpZiAoS1VSTChLVVJM
KCksIGl0ZXItPnNlY29uZC0+dXJsKCkpLmZpbGVTeXN0ZW1QYXRoKCkgPT0gcGF0aCkKKyAgICAg
ICAgaWYgKEtVUkwoS1VSTCgpLCBpdGVyLT52YWx1ZS0+dXJsKCkpLmZpbGVTeXN0ZW1QYXRoKCkg
PT0gcGF0aCkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoS1VSTChLVVJM
KCksIGl0ZXItPnNlY29uZC0+b3JpZ2luYWxVUkwoKSkuZmlsZVN5c3RlbVBhdGgoKSA9PSBwYXRo
KQorICAgICAgICBpZiAoS1VSTChLVVJMKCksIGl0ZXItPnZhbHVlLT5vcmlnaW5hbFVSTCgpKS5m
aWxlU3lzdGVtUGF0aCgpID09IHBhdGgpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAKQEAgLTI5MSwxNSArMjkxLDE1IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5OjphZGRCYWNrRm9y
d2FyZEl0ZW0odWludDY0X3QgaXRlbUlELCBjb25zdCBTdHJpbmcmIG9yaWdpbmFsCiAKICAgICBX
ZWJCYWNrRm9yd2FyZExpc3RJdGVtTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9iYWNrRm9yd2Fy
ZExpc3RJdGVtTWFwLmFkZChpdGVtSUQsIDApOwogICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkg
ewotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IFdlYkJhY2tGb3J3YXJkTGlzdEl0
ZW06OmNyZWF0ZShvcmlnaW5hbFVSTCwgdXJsLCB0aXRsZSwgYmFja0ZvcndhcmREYXRhLmRhdGEo
KSwgYmFja0ZvcndhcmREYXRhLnNpemUoKSwgaXRlbUlEKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZSA9IFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW06OmNyZWF0ZShvcmlnaW5hbFVSTCwg
dXJsLCB0aXRsZSwgYmFja0ZvcndhcmREYXRhLmRhdGEoKSwgYmFja0ZvcndhcmREYXRhLnNpemUo
KSwgaXRlbUlEKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8vIFVwZGF0ZSBleGlz
dGluZyBpdGVtLgotICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLT5zZXRPcmlnaW5hbFVSTChv
cmlnaW5hbFVSTCk7Ci0gICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQtPnNldFVSTCh1cmwpOwot
ICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLT5zZXRUaXRsZSh0aXRsZSk7Ci0gICAgcmVzdWx0
Lml0ZXJhdG9yLT5zZWNvbmQtPnNldEJhY2tGb3J3YXJkRGF0YShiYWNrRm9yd2FyZERhdGEuZGF0
YSgpLCBiYWNrRm9yd2FyZERhdGEuc2l6ZSgpKTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVl
LT5zZXRPcmlnaW5hbFVSTChvcmlnaW5hbFVSTCk7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZS0+c2V0VVJMKHVybCk7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+c2V0VGl0bGUodGl0
bGUpOworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPnNldEJhY2tGb3J3YXJkRGF0YShiYWNr
Rm9yd2FyZERhdGEuZGF0YSgpLCBiYWNrRm9yd2FyZERhdGEuc2l6ZSgpKTsKIH0KIAogdm9pZCBX
ZWJQcm9jZXNzUHJveHk6OnNlbmREaWRHZXRQbHVnaW5zKHVpbnQ2NF90IHJlcXVlc3RJRCwgUGFz
c093blB0cjxWZWN0b3I8UGx1Z2luSW5mbz4gPiBwbHVnaW5JbmZvcykKQEAgLTU3OCw3ICs1Nzgs
NyBAQCBzaXplX3QgV2ViUHJvY2Vzc1Byb3h5OjpmcmFtZUNvdW50SW5QYWdlKFdlYlBhZ2VQcm94
eSogcGFnZSkgY29uc3QKIHsKICAgICBzaXplX3QgcmVzdWx0ID0gMDsKICAgICBmb3IgKEhhc2hN
YXA8dWludDY0X3QsIFJlZlB0cjxXZWJGcmFtZVByb3h5PiA+Ojpjb25zdF9pdGVyYXRvciBpdGVy
ID0gbV9mcmFtZU1hcC5iZWdpbigpOyBpdGVyICE9IG1fZnJhbWVNYXAuZW5kKCk7ICsraXRlcikg
ewotICAgICAgICBpZiAoaXRlci0+c2Vjb25kLT5wYWdlKCkgPT0gcGFnZSkKKyAgICAgICAgaWYg
KGl0ZXItPnZhbHVlLT5wYWdlKCkgPT0gcGFnZSkKICAgICAgICAgICAgICsrcmVzdWx0OwogICAg
IH0KICAgICByZXR1cm4gcmVzdWx0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9HZW9sb2NhdGlvbi9HZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uUGVybWlz
c2lvblJlcXVlc3RNYW5hZ2VyLmNwcAppbmRleCBkNmJkYjhlMTUzMTQ1MGIxMmFiYzgyZDg2YjJm
YzAxM2YxMzU0M2I3Li5mY2E3MWExZDA5NWZlZWZhYmEwNWE2YTcyNWZkYjQzNjM1ODE0YjY2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0dlb2xvY2F0aW9uL0dlb2xvY2F0
aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyLmNw
cApAQCAtNzQsNyArNzQsNyBAQCB2b2lkIEdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5h
Z2VyOjpjYW5jZWxSZXF1ZXN0Rm9yR2VvbG9jYXRpb24oR2VvbG9jYXRpbwogICAgICAgICByZXR1
cm47CiAKICAgICBtX2dlb2xvY2F0aW9uVG9JRE1hcC5yZW1vdmUoaXQpOwotICAgIG1faWRUb0dl
b2xvY2F0aW9uTWFwLnJlbW92ZShpdC0+c2Vjb25kKTsKKyAgICBtX2lkVG9HZW9sb2NhdGlvbk1h
cC5yZW1vdmUoaXQtPnZhbHVlKTsKIH0KIAogdm9pZCBHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1
ZXN0TWFuYWdlcjo6ZGlkUmVjZWl2ZUdlb2xvY2F0aW9uUGVybWlzc2lvbkRlY2lzaW9uKHVpbnQ2
NF90IGdlb2xvY2F0aW9uSUQsIGJvb2wgYWxsb3dlZCkKQEAgLTgzLDcgKzgzLDcgQEAgdm9pZCBH
ZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlcjo6ZGlkUmVjZWl2ZUdlb2xvY2F0aW9u
UGVybWlzc2lvbkRlY2lzaW8KICAgICBpZiAoaXQgPT0gbV9pZFRvR2VvbG9jYXRpb25NYXAuZW5k
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEdlb2xvY2F0aW9uKiBnZW9sb2NhdGlvbiA9IGl0
LT5zZWNvbmQ7CisgICAgR2VvbG9jYXRpb24qIGdlb2xvY2F0aW9uID0gaXQtPnZhbHVlOwogICAg
IGdlb2xvY2F0aW9uLT5zZXRJc0FsbG93ZWQoYWxsb3dlZCk7CiAKICAgICBtX2lkVG9HZW9sb2Nh
dGlvbk1hcC5yZW1vdmUoaXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxlTm9k
ZUhhbmRsZS5jcHAKaW5kZXggMGM0Mjk1ZTYxMmNkZDc2ZjAzYTUzMTNkNDVlNmNlYzFmYjFlODU5
Ni4uNzdlMDMwOTNkNWZkMGQ5NjQyNGQzMTU0Zjc3Yzk0ZDQxOTRiMTZlYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5k
bGVOb2RlSGFuZGxlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGUuY3BwCkBAIC02OSwxMCArNjksMTAg
QEAgUGFzc1JlZlB0cjxJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU+IEluamVjdGVkQnVuZGxlTm9k
ZUhhbmRsZTo6Z2V0T3JDcmVhdGUoTm9kZSoKIAogICAgIERPTUhhbmRsZUNhY2hlOjpBZGRSZXN1
bHQgcmVzdWx0ID0gZG9tSGFuZGxlQ2FjaGUoKS5hZGQobm9kZSwgMCk7CiAgICAgaWYgKCFyZXN1
bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgcmV0dXJuIFBhc3NSZWZQdHI8SW5qZWN0ZWRCdW5kbGVO
b2RlSGFuZGxlPihyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7CisgICAgICAgIHJldHVybiBQYXNz
UmVmUHRyPEluamVjdGVkQnVuZGxlTm9kZUhhbmRsZT4ocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7
CiAKICAgICBSZWZQdHI8SW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlPiBub2RlSGFuZGxlID0gSW5q
ZWN0ZWRCdW5kbGVOb2RlSGFuZGxlOjpjcmVhdGUobm9kZSk7Ci0gICAgcmVzdWx0Lml0ZXJhdG9y
LT5zZWNvbmQgPSBub2RlSGFuZGxlLmdldCgpOworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUg
PSBub2RlSGFuZGxlLmdldCgpOwogICAgIHJldHVybiBub2RlSGFuZGxlLnJlbGVhc2UoKTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9E
T00vSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlLmNwcAppbmRl
eCAxYjc0ZjAxMjQwMDhkYjNjMDc4MjhlYTZmNmQyYzA1YWMwNTljMzA2Li5kNjAwMGFiOTEzMzI5
Y2Q1N2RhYjNlM2ZkNjQwMTRjNzZlOTUyZGMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9Jbmpl
Y3RlZEJ1bmRsZVJhbmdlSGFuZGxlLmNwcApAQCAtNDgsMTAgKzQ4LDEwIEBAIFBhc3NSZWZQdHI8
SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZT4gSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6Z2V0
T3JDcmVhdGUoUmFuCiAKICAgICBET01IYW5kbGVDYWNoZTo6QWRkUmVzdWx0IHJlc3VsdCA9IGRv
bUhhbmRsZUNhY2hlKCkuYWRkKHJhbmdlLCAwKTsKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5
KQotICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlPihy
ZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7CisgICAgICAgIHJldHVybiBQYXNzUmVmUHRyPEluamVj
dGVkQnVuZGxlUmFuZ2VIYW5kbGU+KHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwogCiAgICAgUmVm
UHRyPEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU+IHJhbmdlSGFuZGxlID0gSW5qZWN0ZWRCdW5k
bGVSYW5nZUhhbmRsZTo6Y3JlYXRlKHJhbmdlKTsKLSAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29u
ZCA9IHJhbmdlSGFuZGxlLmdldCgpOworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSByYW5n
ZUhhbmRsZS5nZXQoKTsKICAgICByZXR1cm4gcmFuZ2VIYW5kbGUucmVsZWFzZSgpOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVj
dGVkQnVuZGxlSW50ZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvSW5qZWN0ZWRCdW5kbGVJbnRlbnQuY3BwCmluZGV4IDkyZGU2MWM2YzJiZDZlOWU0MmM0
NzVkYWEwN2MwMTc3OWIxNzU3Y2UuLmQ4YWMzYTI1ZGYzNWI0YTA1ZjAyMmMxMGEzMzg0N2Y2NmZm
OTZlOGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvSW5qZWN0ZWRCdW5kbGVJbnRlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVJbnRlbnQuY3BwCkBAIC03OSw3ICs3OSw3
IEBAIFBhc3NSZWZQdHI8SW1tdXRhYmxlRGljdGlvbmFyeT4gSW5qZWN0ZWRCdW5kbGVJbnRlbnQ6
OmV4dHJhcygpIGNvbnN0CiAgICAgSW1tdXRhYmxlRGljdGlvbmFyeTo6TWFwVHlwZSB3a0V4dHJh
czsKICAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gZXh0
cmFzLmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gZXh0cmFzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgd2tFeHRy
YXMuc2V0KGl0LT5maXJzdCwgV2ViU3RyaW5nOjpjcmVhdGUoaXQtPnNlY29uZCkpOworICAgICAg
ICB3a0V4dHJhcy5zZXQoaXQtPmtleSwgV2ViU3RyaW5nOjpjcmVhdGUoaXQtPnZhbHVlKSk7CiAK
ICAgICByZXR1cm4gSW1tdXRhYmxlRGljdGlvbmFyeTo6YWRvcHQod2tFeHRyYXMpOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Ob3RpZmljYXRpb25zL1dlYk5vdGlm
aWNhdGlvbk1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Ob3RpZmljYXRp
b25zL1dlYk5vdGlmaWNhdGlvbk1hbmFnZXIuY3BwCmluZGV4IGU2ZTJjZDRlMzQ2NjYwMDQ1NDQy
ZmM0NmMzMDdhMWE4ZjI1OGQwMTkuLjRlMDlkOWEzZWJmMmZlMDRkMjdiMTIzZjRkMDY0NjQ4ZjU4
NjY3NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTm90aWZpY2F0aW9u
cy9XZWJOb3RpZmljYXRpb25NYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL05vdGlmaWNhdGlvbnMvV2ViTm90aWZpY2F0aW9uTWFuYWdlci5jcHAKQEAgLTk5LDcgKzk5
LDcgQEAgTm90aWZpY2F0aW9uQ2xpZW50OjpQZXJtaXNzaW9uIFdlYk5vdGlmaWNhdGlvbk1hbmFn
ZXI6OnBvbGljeUZvck9yaWdpbihXZWJDb3JlOjoKICAgICBBU1NFUlQoIW9yaWdpbi0+aXNVbmlx
dWUoKSk7CiAgICAgSGFzaE1hcDxTdHJpbmcsIGJvb2w+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1f
cGVybWlzc2lvbnNNYXAuZmluZChvcmlnaW4tPnRvUmF3U3RyaW5nKCkpOwogICAgIGlmIChpdCAh
PSBtX3Blcm1pc3Npb25zTWFwLmVuZCgpKQotICAgICAgICByZXR1cm4gaXQtPnNlY29uZCA/IE5v
dGlmaWNhdGlvbkNsaWVudDo6UGVybWlzc2lvbkFsbG93ZWQgOiBOb3RpZmljYXRpb25DbGllbnQ6
OlBlcm1pc3Npb25EZW5pZWQ7CisgICAgICAgIHJldHVybiBpdC0+dmFsdWUgPyBOb3RpZmljYXRp
b25DbGllbnQ6OlBlcm1pc3Npb25BbGxvd2VkIDogTm90aWZpY2F0aW9uQ2xpZW50OjpQZXJtaXNz
aW9uRGVuaWVkOwogI2VuZGlmCiAgICAgCiAgICAgcmV0dXJuIE5vdGlmaWNhdGlvbkNsaWVudDo6
UGVybWlzc2lvbk5vdEFsbG93ZWQ7CkBAIC0xMzQsNyArMTM0LDcgQEAgYm9vbCBXZWJOb3RpZmlj
YXRpb25NYW5hZ2VyOjpzaG93KE5vdGlmaWNhdGlvbiogbm90aWZpY2F0aW9uLCBXZWJQYWdlKiBw
YWdlKQogICAgIG1fbm90aWZpY2F0aW9uSURNYXAuc2V0KG5vdGlmaWNhdGlvbklELCBub3RpZmlj
YXRpb24pOwogICAgIAogICAgIE5vdGlmaWNhdGlvbkNvbnRleHRNYXA6Oml0ZXJhdG9yIGl0ID0g
bV9ub3RpZmljYXRpb25Db250ZXh0TWFwLmFkZChub3RpZmljYXRpb24tPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKSwgVmVjdG9yPHVpbnQ2NF90PigpKS5pdGVyYXRvcjsKLSAgICBpdC0+c2Vjb25k
LmFwcGVuZChub3RpZmljYXRpb25JRCk7CisgICAgaXQtPnZhbHVlLmFwcGVuZChub3RpZmljYXRp
b25JRCk7CiAKICNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykKICAgICBtX3Byb2Nlc3MtPmNvbm5l
Y3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTaG93Tm90aWZpY2F0aW9uKG5v
dGlmaWNhdGlvbi0+dGl0bGUoKSwgbm90aWZpY2F0aW9uLT5ib2R5KCksIG5vdGlmaWNhdGlvbi0+
aWNvblVSTCgpLnN0cmluZygpLCBub3RpZmljYXRpb24tPnRhZygpLCBub3RpZmljYXRpb24tPmxh
bmcoKSwgbm90aWZpY2F0aW9uLT5kaXIoKSwgbm90aWZpY2F0aW9uLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCktPnNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCksIG5vdGlmaWNhdGlvbklEKSwg
cGFnZS0+cGFnZUlEKCkpOwpAQCAtMTY4LDcgKzE2OCw3IEBAIHZvaWQgV2ViTm90aWZpY2F0aW9u
TWFuYWdlcjo6Y2xlYXJOb3RpZmljYXRpb25zKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqCiAgICAgaWYgKGl0ID09IG1fbm90aWZpY2F0aW9uQ29udGV4dE1hcC5lbmQoKSkKICAgICAg
ICAgcmV0dXJuOwogICAgIAotICAgIFZlY3Rvcjx1aW50NjRfdD4mIG5vdGlmaWNhdGlvbklEcyA9
IGl0LT5zZWNvbmQ7CisgICAgVmVjdG9yPHVpbnQ2NF90PiYgbm90aWZpY2F0aW9uSURzID0gaXQt
PnZhbHVlOwogICAgIG1fcHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJO
b3RpZmljYXRpb25NYW5hZ2VyUHJveHk6OkNsZWFyTm90aWZpY2F0aW9ucyhub3RpZmljYXRpb25J
RHMpLCBwYWdlLT5wYWdlSUQoKSk7CiAgICAgc2l6ZV90IGNvdW50ID0gbm90aWZpY2F0aW9uSURz
LnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKQEAgLTI1
MSwxMCArMjUxLDEwIEBAIHZvaWQgV2ViTm90aWZpY2F0aW9uTWFuYWdlcjo6cmVtb3ZlTm90aWZp
Y2F0aW9uRnJvbUNvbnRleHRNYXAodWludDY0X3Qgbm90aWZpY2F0CiAgICAgLy8gVGhpcyBpcyBh
IGhlbHBlciBmdW5jdGlvbiBmb3IgbWFuYWdpbmcgdGhlIGhhc2ggbWFwcy4KICAgICBOb3RpZmlj
YXRpb25Db250ZXh0TWFwOjppdGVyYXRvciBpdCA9IG1fbm90aWZpY2F0aW9uQ29udGV4dE1hcC5m
aW5kKG5vdGlmaWNhdGlvbi0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKICAgICBBU1NFUlQo
aXQgIT0gbV9ub3RpZmljYXRpb25Db250ZXh0TWFwLmVuZCgpKTsKLSAgICBzaXplX3QgaW5kZXgg
PSBpdC0+c2Vjb25kLmZpbmQobm90aWZpY2F0aW9uSUQpOworICAgIHNpemVfdCBpbmRleCA9IGl0
LT52YWx1ZS5maW5kKG5vdGlmaWNhdGlvbklEKTsKICAgICBBU1NFUlQoaW5kZXggIT0gbm90Rm91
bmQpOwotICAgIGl0LT5zZWNvbmQucmVtb3ZlKGluZGV4KTsKLSAgICBpZiAoaXQtPnNlY29uZC5p
c0VtcHR5KCkpCisgICAgaXQtPnZhbHVlLnJlbW92ZShpbmRleCk7CisgICAgaWYgKGl0LT52YWx1
ZS5pc0VtcHR5KCkpCiAgICAgICAgIG1fbm90aWZpY2F0aW9uQ29udGV4dE1hcC5yZW1vdmUoaXQp
OwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdp
bnMvTmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0TWFwLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3BwCmluZGV4IDlkY2Q5
MTY2OTg3MzY3OTcxOWI4ZmZkNDJiYjZlNmY4ZmUxNzk4NzcuLmZjYTg5MDlkNjk0NTQ0YjM3Yjc3
NTllNjZlNjMwMjJjZDFhNjQ1NjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3Bw
CkBAIC0yMTIsNyArMjEyLDcgQEAgdm9pZCBOUFJ1bnRpbWVPYmplY3RNYXA6OmludmFsaWRhdGUo
KQogICAgIFZlY3RvcjxOUE9iamVjdCo+IG9iamVjdHM7CiAKICAgICBmb3IgKEhhc2hNYXA8TlBP
YmplY3QqLCBKU0M6OldlYWs8SlNOUE9iamVjdD4gPjo6aXRlcmF0b3IgcHRyID0gbV9qc05QT2Jq
ZWN0cy5iZWdpbigpLCBlbmQgPSBtX2pzTlBPYmplY3RzLmVuZCgpOyBwdHIgIT0gZW5kOyArK3B0
cikgewotICAgICAgICBKU05QT2JqZWN0KiBqc05QT2JqZWN0ID0gcHRyLT5zZWNvbmQuZ2V0KCk7
CisgICAgICAgIEpTTlBPYmplY3QqIGpzTlBPYmplY3QgPSBwdHItPnZhbHVlLmdldCgpOwogICAg
ICAgICBpZiAoIWpzTlBPYmplY3QpIC8vIFNraXAgem9tYmllcy4KICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICBvYmplY3RzLmFwcGVuZChqc05QT2JqZWN0LT5sZWFrTlBPYmplY3QoKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUv
TmV0c2NhcGVQbHVnaW4uY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05l
dHNjYXBlL05ldHNjYXBlUGx1Z2luLmNwcAppbmRleCAwMTIzOGNiYzE0ZDVkMTcwYWM1Y2UyODhm
YzZhNTFjYjk2NjZjZjM0Li5jODEwNjlhZjFiYjk4MjcyMmNkODNjMzQ1OWQ4NmNkYTE5ZTU1YzZh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUv
TmV0c2NhcGVQbHVnaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lu
cy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbi5jcHAKQEAgLTE5OCw4ICsxOTgsOCBAQCBOUEVycm9y
IE5ldHNjYXBlUGx1Z2luOjpkZXN0cm95U3RyZWFtKE5QU3RyZWFtKiBzdHJlYW0sIE5QUmVhc29u
IHJlYXNvbikKICAgICBOZXRzY2FwZVBsdWdpblN0cmVhbSogcGx1Z2luU3RyZWFtID0gMDsKIAog
ICAgIGZvciAoU3RyZWFtc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3N0cmVhbXMuYmVnaW4o
KSwgZW5kID0gbV9zdHJlYW1zLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYg
KGl0LT5zZWNvbmQtPm5wU3RyZWFtKCkgPT0gc3RyZWFtKSB7Ci0gICAgICAgICAgICBwbHVnaW5T
dHJlYW0gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICBpZiAoaXQtPnZhbHVlLT5ucFN0cmVh
bSgpID09IHN0cmVhbSkgeworICAgICAgICAgICAgcGx1Z2luU3RyZWFtID0gaXQtPnZhbHVlLmdl
dCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CkBAIC03NjgsOCArNzY4
LDggQEAgdm9pZCBOZXRzY2FwZVBsdWdpbjo6ZnJhbWVEaWRGaW5pc2hMb2FkaW5nKHVpbnQ2NF90
IHJlcXVlc3RJRCkKICAgICBpZiAoaXQgPT0gbV9wZW5kaW5nVVJMTm90aWZpY2F0aW9ucy5lbmQo
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU3RyaW5nIHVybCA9IGl0LT5zZWNvbmQuZmlyc3Q7
Ci0gICAgdm9pZCogbm90aWZpY2F0aW9uRGF0YSA9IGl0LT5zZWNvbmQuc2Vjb25kOworICAgIFN0
cmluZyB1cmwgPSBpdC0+dmFsdWUuZmlyc3Q7CisgICAgdm9pZCogbm90aWZpY2F0aW9uRGF0YSA9
IGl0LT52YWx1ZS5zZWNvbmQ7CiAKICAgICBtX3BlbmRpbmdVUkxOb3RpZmljYXRpb25zLnJlbW92
ZShpdCk7CiAgICAgCkBAIC03ODQsOCArNzg0LDggQEAgdm9pZCBOZXRzY2FwZVBsdWdpbjo6ZnJh
bWVEaWRGYWlsKHVpbnQ2NF90IHJlcXVlc3RJRCwgYm9vbCB3YXNDYW5jZWxsZWQpCiAgICAgaWYg
KGl0ID09IG1fcGVuZGluZ1VSTE5vdGlmaWNhdGlvbnMuZW5kKCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIFN0cmluZyB1cmwgPSBpdC0+c2Vjb25kLmZpcnN0OwotICAgIHZvaWQqIG5vdGlmaWNh
dGlvbkRhdGEgPSBpdC0+c2Vjb25kLnNlY29uZDsKKyAgICBTdHJpbmcgdXJsID0gaXQtPnZhbHVl
LmZpcnN0OworICAgIHZvaWQqIG5vdGlmaWNhdGlvbkRhdGEgPSBpdC0+dmFsdWUuc2Vjb25kOwog
CiAgICAgbV9wZW5kaW5nVVJMTm90aWZpY2F0aW9ucy5yZW1vdmUoaXQpOwogICAgIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCmluZGV4IDhm
NTBkODcwNmZlOGM0NzE4MGQ0ODU1MzU1MmE5OTY3YjZmN2VlMDAuLjk5NDNiNTI5NTEwNzM2NTE4
MjI4NTkxOWYwZmQ2Y2IyOTZlZGVjN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKQEAgLTE3MCw5ICsxNzAsOSBAQCBzdGF0aWMgU3Ry
aW5nIGJ1aWxkSFRUUEhlYWRlcnMoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIGxv
bmcgbG9uZyYgZXhwZQogICAgIAogICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMoKS5lbmQoKTsKICAgICBmb3IgKEhUVFBIZWFk
ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkcygpLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChp
dC0+Zmlyc3QuY2hhcmFjdGVycygpLCBpdC0+Zmlyc3QubGVuZ3RoKCkpOworICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZChpdC0+a2V5LmNoYXJhY3RlcnMoKSwgaXQtPmtleS5sZW5ndGgoKSk7
CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHNlcGFyYXRvci5jaGFyYWN0ZXJzKCksIHNl
cGFyYXRvci5sZW5ndGgoKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5zZWNv
bmQuY2hhcmFjdGVycygpLCBpdC0+c2Vjb25kLmxlbmd0aCgpKTsKKyAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQoaXQtPnZhbHVlLmNoYXJhY3RlcnMoKSwgaXQtPnZhbHVlLmxlbmd0aCgpKTsK
ICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7CiAgICAgfQogICAgIApAQCAtMjg0
LDcgKzI4NCw3IEBAIFBsdWdpblZpZXc6On5QbHVnaW5WaWV3KCkKIAogICAgIC8vIENhbmNlbCBh
bGwgcGVuZGluZyBmcmFtZSBsb2Fkcy4KICAgICBmb3IgKEZyYW1lTG9hZE1hcDo6aXRlcmF0b3Ig
aXQgPSBtX3BlbmRpbmdGcmFtZUxvYWRzLmJlZ2luKCksIGVuZCA9IG1fcGVuZGluZ0ZyYW1lTG9h
ZHMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPmZpcnN0LT5zZXRMb2FkTGlz
dGVuZXIoMCk7CisgICAgICAgIGl0LT5rZXktPnNldExvYWRMaXN0ZW5lcigwKTsKIAogICAgIGlm
IChtX3BsdWdpbikgewogICAgICAgICBtX2lzQmVpbmdEZXN0cm95ZWQgPSB0cnVlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5j
cHAKaW5kZXggZjJhZmRiNWZiOGFiMzAwZWFlODgwOGU4MzZlZjM2MDExOTZjYTM3OS4uZjUxNTlk
MGZmZTM4ZGM3Zjk3NzdjZGFhMjY1OTY0NmQzYWMwZjc2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
Q29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCkBAIC01Myw3
ICs1Myw3IEBAIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyOjpsYXllckJ5SUQoV2ViS2l0OjpXZWJMYXllcklECiAgICAgSGFzaE1hcDxXZWJMYXllcklE
LCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqPjo6aXRlcmF0b3IgaXQgPSB0YWJsZS5maW5kKGlk
KTsKICAgICBpZiAoaXQgPT0gdGFibGUuZW5kKCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJl
dHVybiBpdC0+c2Vjb25kOworICAgIHJldHVybiBpdC0+dmFsdWU7CiB9CiAKIHN0YXRpYyBXZWJM
YXllcklEIHRvV2ViTGF5ZXJJRChHcmFwaGljc0xheWVyKiBsYXllcikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVy
VHJlZUNvb3JkaW5hdG9yLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcAppbmRleCAwZDJiZDRk
M2Y0Yzc1NDM2OThhYzAxYmQzOGJjYjk5N2EwYTA1YTQ0Li41YjYzMmIyODI0MjYzYTcyYzYwYzJm
ZDkyNWY4YTkzZTYwYjAzYWUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
TGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3BwCkBAIC00NTUsNyArNDU1LDcgQEAgaW50NjRfdCBMYXll
clRyZWVDb29yZGluYXRvcjo6YWRvcHRJbWFnZUJhY2tpbmdTdG9yZShJbWFnZSogaW1hZ2UpCiAg
ICAgSGFzaE1hcDxpbnQ2NF90LCBpbnQ+OjppdGVyYXRvciBpdCA9IG1fZGlyZWN0bHlDb21wb3Np
dGVkSW1hZ2VSZWZDb3VudHMuZmluZChrZXkpOwogCiAgICAgaWYgKGl0ICE9IG1fZGlyZWN0bHlD
b21wb3NpdGVkSW1hZ2VSZWZDb3VudHMuZW5kKCkpIHsKLSAgICAgICAgKysoaXQtPnNlY29uZCk7
CisgICAgICAgICsrKGl0LT52YWx1ZSk7CiAgICAgICAgIHJldHVybiBrZXk7CiAgICAgfQogCkBA
IC00ODAsOSArNDgwLDkgQEAgdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6cmVsZWFzZUltYWdl
QmFja2luZ1N0b3JlKGludDY0X3Qga2V5KQogICAgIGlmIChpdCA9PSBtX2RpcmVjdGx5Q29tcG9z
aXRlZEltYWdlUmVmQ291bnRzLmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpdC0+c2Vj
b25kLS07CisgICAgaXQtPnZhbHVlLS07CiAKLSAgICBpZiAoaXQtPnNlY29uZCkKKyAgICBpZiAo
aXQtPnZhbHVlKQogICAgICAgICByZXR1cm47CiAKICAgICBtX2RpcmVjdGx5Q29tcG9zaXRlZElt
YWdlUmVmQ291bnRzLnJlbW92ZShpdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViQmFja0ZvcndhcmRMaXN0UHJveHkuY3BwIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFByb3h5LmNwcAppbmRleCA0
Y2E0ZTVmZGI3MmNmY2VhYzY5NTQ1ZGQxN2Q5ZjdhMmNjODQ2ODM4Li5iZTgyYTE5N2E3MzZkNjIz
MmE1NDM3ZGE5YzI5MDJlYjA1Y2EzYTBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViQmFja0ZvcndhcmRMaXN0UHJveHkuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9yd2FyZExpc3RQcm94eS5jcHAKQEAg
LTEzMCw5ICsxMzAsOSBAQCB2b2lkIFdlYkJhY2tGb3J3YXJkTGlzdFByb3h5OjpyZW1vdmVJdGVt
KHVpbnQ2NF90IGl0ZW1JRCkKICAgICBpZiAoaXQgPT0gaWRUb0hpc3RvcnlJdGVtTWFwKCkuZW5k
KCkpCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgV2ViQ29yZTo6cGFnZUNhY2hlKCkt
PnJlbW92ZShpdC0+c2Vjb25kLmdldCgpKTsKKyAgICBXZWJDb3JlOjpwYWdlQ2FjaGUoKS0+cmVt
b3ZlKGl0LT52YWx1ZS5nZXQoKSk7CiAKLSAgICBoaXN0b3J5SXRlbVRvSURNYXAoKS5yZW1vdmUo
aXQtPnNlY29uZCk7CisgICAgaGlzdG9yeUl0ZW1Ub0lETWFwKCkucmVtb3ZlKGl0LT52YWx1ZSk7
CiAgICAgaWRUb0hpc3RvcnlJdGVtTWFwKCkucmVtb3ZlKGl0KTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCmluZGV4IGMy
ZjAxNjUzNzU5NTNiNTNjYzNjZDFiOWViNDMxZGI1ZWNlYjkzYWQuLjIyMjczYzFmNjQ2MjFkOWZm
MDI4MGU3NWNlNjEzNWJhNWQyNWFiNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KQEAgLTEyMSw3ICsxMjEsNyBAQCBzdGF0
aWMgU3RyaW5nIGNvbW1hbmROYW1lRm9yU2VsZWN0b3JOYW1lKGNvbnN0IFN0cmluZyYgc2VsZWN0
b3JOYW1lKQogICAgIHN0YXRpYyBjb25zdCBTZWxlY3Rvck5hbWVNYXAqIGV4Y2VwdGlvbk1hcCA9
IGNyZWF0ZVNlbGVjdG9yRXhjZXB0aW9uTWFwKCk7CiAgICAgU2VsZWN0b3JOYW1lTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IGV4Y2VwdGlvbk1hcC0+ZmluZChzZWxlY3Rvck5hbWUpOwogICAgIGlm
IChpdCAhPSBleGNlcHRpb25NYXAtPmVuZCgpKQotICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsK
KyAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKIAogICAgIC8vIFJlbW92ZSB0aGUgdHJhaWxpbmcg
Y29sb24uCiAgICAgLy8gTm8gbmVlZCB0byBjYXBpdGFsaXplIHRoZSBjb21tYW5kIG5hbWUgc2lu
Y2UgRWRpdG9yIGNvbW1hbmQgbmFtZXMgYXJlIG5vdCBjYXNlIHNlbnNpdGl2ZS4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCmluZGV4IGVmODZiZjNkNDJjZTFiNjFiZTdh
ZTU5ZWIxYWZjMWEwOWY5MjEyMjYuLmUzOTJlMTk4MmVlZjJkZWMxOWRiYmFhODI1YjI1ZGM0M2Yy
NDhmY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcApAQCAtMzM0
LDcgKzMzNCw3IEBAIHZvaWQgV2ViUHJvY2Vzczo6dmlzaXRlZExpbmtTdGF0ZUNoYW5nZWQoY29u
c3QgVmVjdG9yPFdlYkNvcmU6OkxpbmtIYXNoPiYgbGlua0hhCiAgICAgICAgIEhhc2hNYXA8dWlu
dDY0X3QsIFJlZlB0cjxXZWJQYWdlR3JvdXBQcm94eT4gPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
X3BhZ2VHcm91cE1hcC5iZWdpbigpOwogICAgICAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8
V2ViUGFnZUdyb3VwUHJveHk+ID46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGFnZUdyb3VwTWFw
LmVuZCgpOwogICAgICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgUGFn
ZTo6dmlzaXRlZFN0YXRlQ2hhbmdlZChQYWdlR3JvdXA6OnBhZ2VHcm91cChpdC0+c2Vjb25kLT5p
ZGVudGlmaWVyKCkpLCBsaW5rSGFzaGVzW2ldKTsKKyAgICAgICAgICAgIFBhZ2U6OnZpc2l0ZWRT
dGF0ZUNoYW5nZWQoUGFnZUdyb3VwOjpwYWdlR3JvdXAoaXQtPnZhbHVlLT5pZGVudGlmaWVyKCkp
LCBsaW5rSGFzaGVzW2ldKTsKICAgICB9CiAKICAgICBwYWdlQ2FjaGUoKS0+bWFya1BhZ2VzRm9y
VmlzdGVkTGlua1N0eWxlUmVjYWxjKCk7CkBAIC0zNDYsNyArMzQ2LDcgQEAgdm9pZCBXZWJQcm9j
ZXNzOjphbGxWaXNpdGVkTGlua1N0YXRlQ2hhbmdlZCgpCiAgICAgSGFzaE1hcDx1aW50NjRfdCwg
UmVmUHRyPFdlYlBhZ2VHcm91cFByb3h5PiA+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGFnZUdy
b3VwTWFwLmJlZ2luKCk7CiAgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPFdlYlBhZ2VHcm91
cFByb3h5PiA+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BhZ2VHcm91cE1hcC5lbmQoKTsKICAg
ICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBQYWdlOjphbGxWaXNpdGVkU3RhdGVD
aGFuZ2VkKFBhZ2VHcm91cDo6cGFnZUdyb3VwKGl0LT5zZWNvbmQtPmlkZW50aWZpZXIoKSkpOwor
ICAgICAgICBQYWdlOjphbGxWaXNpdGVkU3RhdGVDaGFuZ2VkKFBhZ2VHcm91cDo6cGFnZUdyb3Vw
KGl0LT52YWx1ZS0+aWRlbnRpZmllcigpKSk7CiAKICAgICBwYWdlQ2FjaGUoKS0+bWFya1BhZ2Vz
Rm9yVmlzdGVkTGlua1N0eWxlUmVjYWxjKCk7CiB9CkBAIC01MjIsNyArNTIyLDcgQEAgV2ViUGFn
ZSogV2ViUHJvY2Vzczo6Zm9jdXNlZFdlYlBhZ2UoKSBjb25zdAogeyAgICAKICAgICBIYXNoTWFw
PHVpbnQ2NF90LCBSZWZQdHI8V2ViUGFnZT4gPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wYWdl
TWFwLmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPFdlYlBhZ2U+ID46
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wYWdlTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewotICAgICAgICBXZWJQYWdlKiBwYWdlID0gKCppdCkuc2Vjb25kLmdldCgpOworICAgICAgICBX
ZWJQYWdlKiBwYWdlID0gKCppdCkudmFsdWUuZ2V0KCk7CiAgICAgICAgIGlmIChwYWdlLT53aW5k
b3dBbmRXZWJQYWdlQXJlRm9jdXNlZCgpKQogICAgICAgICAgICAgcmV0dXJuIHBhZ2U7CiAgICAg
fQpAQCAtNTQwLDE0ICs1NDAsMTQgQEAgdm9pZCBXZWJQcm9jZXNzOjpjcmVhdGVXZWJQYWdlKHVp
bnQ2NF90IHBhZ2VJRCwgY29uc3QgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycyYKICAgICAvLyBs
aW5rKSB0aGUgV2ViUGFnZSBnZXRzIGNyZWF0ZWQgYm90aCBpbiB0aGUgc3luY2hyb25vdXMgaGFu
ZGxlciBhbmQgdGhyb3VnaCB0aGUgbm9ybWFsIHdheS4gCiAgICAgSGFzaE1hcDx1aW50NjRfdCwg
UmVmUHRyPFdlYlBhZ2U+ID46OkFkZFJlc3VsdCByZXN1bHQgPSBtX3BhZ2VNYXAuYWRkKHBhZ2VJ
RCwgMCk7CiAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIEFTU0VSVCghcmVz
dWx0Lml0ZXJhdG9yLT5zZWNvbmQpOwotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9
IFdlYlBhZ2U6OmNyZWF0ZShwYWdlSUQsIHBhcmFtZXRlcnMpOworICAgICAgICBBU1NFUlQoIXJl
c3VsdC5pdGVyYXRvci0+dmFsdWUpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0g
V2ViUGFnZTo6Y3JlYXRlKHBhZ2VJRCwgcGFyYW1ldGVycyk7CiAKICAgICAgICAgLy8gQmFsYW5j
ZWQgYnkgYW4gZW5hYmxlVGVybWluYXRpb24gaW4gcmVtb3ZlV2ViUGFnZS4KICAgICAgICAgZGlz
YWJsZVRlcm1pbmF0aW9uKCk7CiAgICAgfQogCi0gICAgQVNTRVJUKHJlc3VsdC5pdGVyYXRvci0+
c2Vjb25kKTsKKyAgICBBU1NFUlQocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CiB9CiAKIHZvaWQg
V2ViUHJvY2Vzczo6cmVtb3ZlV2ViUGFnZSh1aW50NjRfdCBwYWdlSUQpCkBAIC03ODQsMTEgKzc4
NCwxMSBAQCBXZWJQYWdlR3JvdXBQcm94eSogV2ViUHJvY2Vzczo6d2ViUGFnZUdyb3VwKGNvbnN0
IFdlYlBhZ2VHcm91cERhdGEmIHBhZ2VHcm91cERhdAogewogICAgIEhhc2hNYXA8dWludDY0X3Qs
IFJlZlB0cjxXZWJQYWdlR3JvdXBQcm94eT4gPjo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fcGFnZUdy
b3VwTWFwLmFkZChwYWdlR3JvdXBEYXRhLnBhZ2VHcm91cElELCAwKTsKICAgICBpZiAocmVzdWx0
LmlzTmV3RW50cnkpIHsKLSAgICAgICAgQVNTRVJUKCFyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7
Ci0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gV2ViUGFnZUdyb3VwUHJveHk6OmNy
ZWF0ZShwYWdlR3JvdXBEYXRhKTsKKyAgICAgICAgQVNTRVJUKCFyZXN1bHQuaXRlcmF0b3ItPnZh
bHVlKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IFdlYlBhZ2VHcm91cFByb3h5
OjpjcmVhdGUocGFnZUdyb3VwRGF0YSk7CiAgICAgfQogCi0gICAgcmV0dXJuIHJlc3VsdC5pdGVy
YXRvci0+c2Vjb25kLmdldCgpOworICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdl
dCgpOwogfQogCiAjaWYgRU5BQkxFKFdFQl9JTlRFTlRTKQpAQCAtOTA3LDcgKzkwNyw3IEBAIHN0
YXRpYyB2b2lkIGZyb21Db3VudGVkU2V0VG9IYXNoTWFwKFR5cGVDb3VudFNldCogY291bnRlZFNl
dCwgSGFzaE1hcDxTdHJpbmcsIHVpCiB7CiAgICAgVHlwZUNvdW50U2V0Ojpjb25zdF9pdGVyYXRv
ciBlbmQgPSBjb3VudGVkU2V0LT5lbmQoKTsKICAgICBmb3IgKFR5cGVDb3VudFNldDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBjb3VudGVkU2V0LT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAg
ICAgIG1hcC5zZXQoaXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsKKyAgICAgICAgbWFwLnNldChpdC0+
a2V5LCBpdC0+dmFsdWUpOwogfQogCiBzdGF0aWMgdm9pZCBnZXRXZWJDb3JlTWVtb3J5Q2FjaGVT
dGF0aXN0aWNzKFZlY3RvcjxIYXNoTWFwPFN0cmluZywgdWludDY0X3Q+ID4mIHJlc3VsdCkKQEAg
LTEwODAsNyArMTA4MCw3IEBAIHZvaWQgV2ViUHJvY2Vzczo6c2V0VGV4dENoZWNrZXJTdGF0ZShj
b25zdCBUZXh0Q2hlY2tlclN0YXRlJiB0ZXh0Q2hlY2tlclN0YXRlKQogCiAgICAgSGFzaE1hcDx1
aW50NjRfdCwgUmVmUHRyPFdlYlBhZ2U+ID46Oml0ZXJhdG9yIGVuZCA9IG1fcGFnZU1hcC5lbmQo
KTsKICAgICBmb3IgKEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxXZWJQYWdlPiA+OjppdGVyYXRv
ciBpdCA9IG1fcGFnZU1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgV2Vi
UGFnZSogcGFnZSA9ICgqaXQpLnNlY29uZC5nZXQoKTsKKyAgICAgICAgV2ViUGFnZSogcGFnZSA9
ICgqaXQpLnZhbHVlLmdldCgpOwogICAgICAgICBpZiAoY29udGludW91c1NwZWxsQ2hlY2tpbmdU
dXJuZWRPZmYpCiAgICAgICAgICAgICBwYWdlLT51bm1hcmtBbGxNaXNzcGVsbGluZ3MoKTsKICAg
ICAgICAgaWYgKGdyYW1tYXJDaGVja2luZ1R1cm5lZE9mZikKZGlmZiAtLWdpdCBhL1Rvb2xzL0No
YW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA2YTI5NThhMjIzOTcyMTVmMGRhYjBhMTg4
ZDMxMzA5MWJjMDVlNjhiLi5iYTRkYmRkMGE3MjdjOTViNWM0ZDc4MjBiMDkyZmY1YWJjZmM1ZmMz
IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNDUgQEAKKzIwMTItMDktMTQgIENhaW8gTWFyY2VsbyBkZSBPbGl2ZWlyYSBGaWxobyAg
PGNhaW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KKworICAgICAgICBSZW5hbWUgZmlyc3Qvc2Vj
b25kIHRvIGtleS92YWx1ZSBpbiBIYXNoTWFwIGl0ZXJhdG9ycworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI3ODQKKworICAgICAgICBSZXZpZXdlZCBi
eSBFcmljIFNlaWRlbC4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL01vY2tX
ZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoTW9ja1dlYlNwZWVjaElucHV0
Q29udHJvbGxlcjo6YWRkTW9ja1JlY29nbml0aW9uUmVzdWx0KToKKyAgICAgICAgKiBEdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9Ob3RpZmljYXRpb25QcmVzZW50ZXIuY3BwOgorICAgICAgICAoTm90
aWZpY2F0aW9uUHJlc2VudGVyOjpzaW11bGF0ZUNsaWNrKToKKyAgICAgICAgKE5vdGlmaWNhdGlv
blByZXNlbnRlcjo6c2hvdyk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVz
dFJ1bm5lci9DcHBCb3VuZENsYXNzLmNwcDoKKyAgICAgICAgKENwcEJvdW5kQ2xhc3M6On5DcHBC
b3VuZENsYXNzKToKKyAgICAgICAgKENwcEJvdW5kQ2xhc3M6Omludm9rZSk6CisgICAgICAgIChD
cHBCb3VuZENsYXNzOjpnZXRQcm9wZXJ0eSk6CisgICAgICAgIChDcHBCb3VuZENsYXNzOjpzZXRQ
cm9wZXJ0eSk6CisgICAgICAgIChDcHBCb3VuZENsYXNzOjpiaW5kQ2FsbGJhY2spOgorICAgICAg
ICAoQ3BwQm91bmRDbGFzczo6YmluZFByb3BlcnR5KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5jcHA6CisgICAgICAgIChhcHBseUZvbnRNYXApOgor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcDoKKyAgICAg
ICAgKFdlYlZpZXdIb3N0OjpwcmludFJlc291cmNlRGVzY3JpcHRpb24pOgorICAgICAgICAqIER1
bXBSZW5kZXJUcmVlL21hYy9UZXN0UnVubmVyTWFjLm1tOgorICAgICAgICAod29ybGRJREZvcldv
cmxkKToKKyAgICAgICAgKFRlc3RSdW5uZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxk
KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJX
aW4uY3BwOgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6On5BY2Nlc3NpYmlsaXR5
Q29udHJvbGxlcik6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6d2luTm90aWZp
Y2F0aW9uUmVjZWl2ZWQpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9SZXNvdXJjZUxv
YWREZWxlZ2F0ZS5jcHA6CisgICAgICAgIChSZXNvdXJjZUxvYWREZWxlZ2F0ZTo6ZGVzY3JpcHRp
b25TdWl0YWJsZUZvclRlc3RSZXN1bHQpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9U
ZXN0UnVubmVyV2luLmNwcDoKKyAgICAgICAgKHdvcmxkSURGb3JXb3JsZCk6CisgICAgICAgIChU
ZXN0UnVubmVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCk6CisgICAgICAgICogVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL0RPTVdpbmRvd0V4dGVuc2lvbkJhc2ljX0J1bmRsZS5j
cHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpET01XaW5kb3dFeHRlbnNpb25CYXNpYzo6d2ls
bERlc3Ryb3lQYWdlKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvRE9N
V2luZG93RXh0ZW5zaW9uTm9DYWNoZV9CdW5kbGUuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQ
STo6RE9NV2luZG93RXh0ZW5zaW9uTm9DYWNoZTo6d2lsbERlc3Ryb3lQYWdlKToKKyAgICAgICAg
KiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwOgorICAgICAg
ICAoV1RSOjpUZXN0UnVubmVyOjp3b3JsZElERm9yV29ybGQpOgorICAgICAgICAoV1RSOjpUZXN0
UnVubmVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCk6CisKIDIwMTItMDktMTQgIEFs
ZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAgICAgICAgW1dLMl0gd2ViYXJj
aGl2ZS9sb2FkaW5nL2phdmFzY3JpcHQtdXJsLWlmcmFtZS1jcmFzaC5odG1sIGZhaWxzCmRpZmYg
LS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9Nb2NrV2ViU3BlZWNoSW5wdXRD
b250cm9sbGVyLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL01vY2tXZWJTcGVl
Y2hJbnB1dENvbnRyb2xsZXIuY3BwCmluZGV4IDcxNjIyMmY5YWNjZmU4ZmZiZTM1OTk3ODUzODM3
NjQ3MDZjNjRlMWUuLjEzYzhmZjFlYzRjMWNkZTU1MDc2Njk4ZGZjZmU1ZTg3MTI2YTgyZWIgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL01vY2tXZWJTcGVlY2hJbnB1
dENvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL01vY2tX
ZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIuY3BwCkBAIC01Miw3ICs1Miw3IEBAIHZvaWQgTW9ja1dl
YlNwZWVjaElucHV0Q29udHJvbGxlcjo6YWRkTW9ja1JlY29nbml0aW9uUmVzdWx0KGNvbnN0IFdl
YlN0cmluZyYgcmVzCiAgICAgICAgIFN0cmluZyBsYW5nU3RyaW5nID0gU3RyaW5nOjpmcm9tVVRG
OChsYW5ndWFnZS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgaWYgKCFtX3JlY29nbml0aW9uUmVz
dWx0cy5jb250YWlucyhsYW5nU3RyaW5nKSkKICAgICAgICAgICAgIG1fcmVjb2duaXRpb25SZXN1
bHRzLnNldChsYW5nU3RyaW5nLCBWZWN0b3I8V2ViU3BlZWNoSW5wdXRSZXN1bHQ+KCkpOwotICAg
ICAgICBtX3JlY29nbml0aW9uUmVzdWx0cy5maW5kKGxhbmdTdHJpbmcpLT5zZWNvbmQuYXBwZW5k
KHJlcyk7CisgICAgICAgIG1fcmVjb2duaXRpb25SZXN1bHRzLmZpbmQobGFuZ1N0cmluZyktPnZh
bHVlLmFwcGVuZChyZXMpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vTm90aWZpY2F0aW9uUHJlc2VudGVyLmNwcCBiL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL05vdGlmaWNhdGlvblByZXNlbnRlci5jcHAKaW5kZXggMGM1NDAwZjVl
OWU4ZjcxNzBlY2Y1OTlhODFiZDQyNmZiZDc3MjkxZC4uYTIxNTg4Zjc0NGU1YzNmNWFiNzBkYmRi
MDNjMjc1YzUwNzA4ZjAzYSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vTm90aWZpY2F0aW9uUHJlc2VudGVyLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9Ob3RpZmljYXRpb25QcmVzZW50ZXIuY3BwCkBAIC03NSw3ICs3NSw3IEBAIGJvb2wg
Tm90aWZpY2F0aW9uUHJlc2VudGVyOjpzaW11bGF0ZUNsaWNrKGNvbnN0IFdlYlN0cmluZyYgdGl0
bGUpCiAgICAgaWYgKG1fYWN0aXZlTm90aWZpY2F0aW9ucy5maW5kKGlkKSA9PSBtX2FjdGl2ZU5v
dGlmaWNhdGlvbnMuZW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBjb25z
dCBXZWJOb3RpZmljYXRpb24mIG5vdGlmaWNhdGlvbiA9IG1fYWN0aXZlTm90aWZpY2F0aW9ucy5m
aW5kKGlkKS0+c2Vjb25kOworICAgIGNvbnN0IFdlYk5vdGlmaWNhdGlvbiYgbm90aWZpY2F0aW9u
ID0gbV9hY3RpdmVOb3RpZmljYXRpb25zLmZpbmQoaWQpLT52YWx1ZTsKICAgICBXZWJOb3RpZmlj
YXRpb24gZXZlbnRUYXJnZXQobm90aWZpY2F0aW9uKTsKICAgICBldmVudFRhcmdldC5kaXNwYXRj
aENsaWNrRXZlbnQoKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTg5LDcgKzg5LDcgQEAgYm9vbCBO
b3RpZmljYXRpb25QcmVzZW50ZXI6OnNob3coY29uc3QgV2ViTm90aWZpY2F0aW9uJiBub3RpZmlj
YXRpb24pCiAgICAgICAgIFdURjo6U3RyaW5nIHJlcGxhY2VJZChub3RpZmljYXRpb24ucmVwbGFj
ZUlkKCkuZGF0YSgpLCBub3RpZmljYXRpb24ucmVwbGFjZUlkKCkubGVuZ3RoKCkpOwogICAgICAg
ICBpZiAobV9yZXBsYWNlbWVudHMuZmluZChyZXBsYWNlSWQpICE9IG1fcmVwbGFjZW1lbnRzLmVu
ZCgpKQogICAgICAgICAgICAgcHJpbnRmKCJSRVBMQUNJTkcgTk9USUZJQ0FUSU9OICVzXG4iLAot
ICAgICAgICAgICAgICAgICAgIG1fcmVwbGFjZW1lbnRzLmZpbmQocmVwbGFjZUlkKS0+c2Vjb25k
LnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgICAgICAgIG1fcmVwbGFjZW1lbnRzLmZpbmQo
cmVwbGFjZUlkKS0+dmFsdWUudXRmOCgpLmRhdGEoKSk7CiAKICAgICAgICAgbV9yZXBsYWNlbWVu
dHMuc2V0KHJlcGxhY2VJZCwgV1RGOjpTdHJpbmcoaWRlbnRpZmllci5kYXRhKCksIGlkZW50aWZp
ZXIubGVuZ3RoKCkpKTsKICAgICB9CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9UZXN0UnVubmVyL0NwcEJvdW5kQ2xhc3MuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9DcHBCb3VuZENsYXNzLmNwcAppbmRleCA5YjRhM2I2NDY0
NWQwNTdiNDE3MmUxYzdkZmEwN2M3YTYyZTc3Y2Y4Li4xYjI5ZDJiMGY1NWQwMWY3Mzg3MTQ1Nzg3
N2Y5ZGJkZjA2ZjFiNDkxIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9UZXN0UnVubmVyL0NwcEJvdW5kQ2xhc3MuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1Rlc3RSdW5uZXIvQ3BwQm91bmRDbGFzcy5jcHAKQEAgLTIwMywxMCArMjAzLDEw
IEBAIGJvb2wgQ3BwTlBPYmplY3Q6OnNldFByb3BlcnR5KE5QT2JqZWN0KiBucE9iaiwgTlBJZGVu
dGlmaWVyIGlkZW50LCBjb25zdCBOUFZhcmlhCiBDcHBCb3VuZENsYXNzOjp+Q3BwQm91bmRDbGFz
cygpCiB7CiAgICAgZm9yIChNZXRob2RMaXN0OjppdGVyYXRvciBpID0gbV9tZXRob2RzLmJlZ2lu
KCk7IGkgIT0gbV9tZXRob2RzLmVuZCgpOyArK2kpCi0gICAgICAgIGRlbGV0ZSBpLT5zZWNvbmQ7
CisgICAgICAgIGRlbGV0ZSBpLT52YWx1ZTsKIAogICAgIGZvciAoUHJvcGVydHlMaXN0OjppdGVy
YXRvciBpID0gbV9wcm9wZXJ0aWVzLmJlZ2luKCk7IGkgIT0gbV9wcm9wZXJ0aWVzLmVuZCgpOyAr
K2kpCi0gICAgICAgIGRlbGV0ZSBpLT5zZWNvbmQ7CisgICAgICAgIGRlbGV0ZSBpLT52YWx1ZTsK
IAogICAgIC8vIFVucmVnaXN0ZXIgb3Vyc2VsdmVzIGlmIHdlIHdlcmUgYm91bmQgdG8gYSBmcmFt
ZS4KICAgICBpZiAobV9ib3VuZFRvRnJhbWUpCkBAIC0yMzcsNyArMjM3LDcgQEAgYm9vbCBDcHBC
b3VuZENsYXNzOjppbnZva2UoTlBJZGVudGlmaWVyIGlkZW50LAogICAgICAgICB9CiAgICAgICAg
IGNhbGxiYWNrID0gbV9mYWxsYmFja0NhbGxiYWNrLmdldCgpOwogICAgIH0gZWxzZQotICAgICAg
ICBjYWxsYmFjayA9ICgqbWV0aG9kKS5zZWNvbmQ7CisgICAgICAgIGNhbGxiYWNrID0gKCptZXRo
b2QpLnZhbHVlOwogCiAgICAgLy8gQnVpbGQgYSBDcHBBcmd1bWVudExpc3QgYXJndW1lbnQgdmVj
dG9yIGZyb20gdGhlIE5QVmFyaWFudHMgY29taW5nIGluLgogICAgIENwcEFyZ3VtZW50TGlzdCBj
cHBBcmd1bWVudHMoYXJndW1lbnRDb3VudCk7CkBAIC0yNjAsNyArMjYwLDcgQEAgYm9vbCBDcHBC
b3VuZENsYXNzOjpnZXRQcm9wZXJ0eShOUElkZW50aWZpZXIgaWRlbnQsIE5QVmFyaWFudCogcmVz
dWx0KSBjb25zdAogICAgIH0KIAogICAgIENwcFZhcmlhbnQgY3BwVmFsdWU7Ci0gICAgaWYgKCFj
YWxsYmFjay0+c2Vjb25kLT5nZXRWYWx1ZSgmY3BwVmFsdWUpKQorICAgIGlmICghY2FsbGJhY2st
PnZhbHVlLT5nZXRWYWx1ZSgmY3BwVmFsdWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
Y3BwVmFsdWUuY29weVRvTlBWYXJpYW50KHJlc3VsdCk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0y
NzQsNyArMjc0LDcgQEAgYm9vbCBDcHBCb3VuZENsYXNzOjpzZXRQcm9wZXJ0eShOUElkZW50aWZp
ZXIgaWRlbnQsIGNvbnN0IE5QVmFyaWFudCogdmFsdWUpCiAKICAgICBDcHBWYXJpYW50IGNwcFZh
bHVlOwogICAgIGNwcFZhbHVlLnNldCgqdmFsdWUpOwotICAgIHJldHVybiAoKmNhbGxiYWNrKS5z
ZWNvbmQtPnNldFZhbHVlKGNwcFZhbHVlKTsKKyAgICByZXR1cm4gKCpjYWxsYmFjaykudmFsdWUt
PnNldFZhbHVlKGNwcFZhbHVlKTsKIH0KIAogdm9pZCBDcHBCb3VuZENsYXNzOjpiaW5kQ2FsbGJh
Y2soY29uc3Qgc3RyaW5nJiBuYW1lLCBDYWxsYmFjayogY2FsbGJhY2spCkBAIC0yODIsNyArMjgy
LDcgQEAgdm9pZCBDcHBCb3VuZENsYXNzOjpiaW5kQ2FsbGJhY2soY29uc3Qgc3RyaW5nJiBuYW1l
LCBDYWxsYmFjayogY2FsbGJhY2spCiAgICAgTlBJZGVudGlmaWVyIGlkZW50ID0gV2ViQmluZGlu
Z3M6OmdldFN0cmluZ0lkZW50aWZpZXIobmFtZS5jX3N0cigpKTsKICAgICBNZXRob2RMaXN0Ojpp
dGVyYXRvciBvbGRDYWxsYmFjayA9IG1fbWV0aG9kcy5maW5kKGlkZW50KTsKICAgICBpZiAob2xk
Q2FsbGJhY2sgIT0gbV9tZXRob2RzLmVuZCgpKSB7Ci0gICAgICAgIGRlbGV0ZSBvbGRDYWxsYmFj
ay0+c2Vjb25kOworICAgICAgICBkZWxldGUgb2xkQ2FsbGJhY2stPnZhbHVlOwogICAgICAgICBp
ZiAoIWNhbGxiYWNrKSB7CiAgICAgICAgICAgICBtX21ldGhvZHMucmVtb3ZlKG9sZENhbGxiYWNr
KTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTMwOSw3ICszMDksNyBAQCB2b2lkIENwcEJvdW5k
Q2xhc3M6OmJpbmRQcm9wZXJ0eShjb25zdCBzdHJpbmcmIG5hbWUsIFByb3BlcnR5Q2FsbGJhY2sq
IGNhbGxiYWNrKQogICAgIE5QSWRlbnRpZmllciBpZGVudCA9IFdlYkJpbmRpbmdzOjpnZXRTdHJp
bmdJZGVudGlmaWVyKG5hbWUuY19zdHIoKSk7CiAgICAgUHJvcGVydHlMaXN0OjppdGVyYXRvciBv
bGRDYWxsYmFjayA9IG1fcHJvcGVydGllcy5maW5kKGlkZW50KTsKICAgICBpZiAob2xkQ2FsbGJh
Y2sgIT0gbV9wcm9wZXJ0aWVzLmVuZCgpKSB7Ci0gICAgICAgIGRlbGV0ZSBvbGRDYWxsYmFjay0+
c2Vjb25kOworICAgICAgICBkZWxldGUgb2xkQ2FsbGJhY2stPnZhbHVlOwogICAgICAgICBpZiAo
IWNhbGxiYWNrKSB7CiAgICAgICAgICAgICBtX3Byb3BlcnRpZXMucmVtb3ZlKG9sZENhbGxiYWNr
KTsKICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1dlYlByZWZlcmVuY2VzLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL1dlYlByZWZlcmVuY2VzLmNwcAppbmRleCA1ZWViZjU5NmQ5NzYyNGQxOWI3ZjdlZGMzZWFj
YWNiNDZkYjc3NTE5Li4zYmMyY2RkOWYyYWU0MTcwYzMzYWQ2NDEwNmQ0YTdmMmQwOTAyMWY1IDEw
MDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5j
cHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViUHJlZmVyZW5jZXMuY3Bw
CkBAIC0xNTYsOSArMTU2LDkgQEAgdHlwZWRlZiB2b2lkICgqU2V0Rm9udEZhbWlseVdyYXBwZXIp
KFdlYlNldHRpbmdzKiwgY29uc3QgV2ViU3RyaW5nJiwgVVNjcmlwdENvZGUKIHN0YXRpYyB2b2lk
IGFwcGx5Rm9udE1hcChXZWJTZXR0aW5ncyogc2V0dGluZ3MsIGNvbnN0IFdlYlByZWZlcmVuY2Vz
OjpTY3JpcHRGb250RmFtaWx5TWFwJiBtYXAsIFNldEZvbnRGYW1pbHlXcmFwcGVyIHNldHRlcikK
IHsKICAgICBmb3IgKFdlYlByZWZlcmVuY2VzOjpTY3JpcHRGb250RmFtaWx5TWFwOjpjb25zdF9p
dGVyYXRvciBpdGVyID0gbWFwLmJlZ2luKCk7IGl0ZXIgIT0gbWFwLmVuZCgpOyArK2l0ZXIpIHsK
LSAgICAgICAgY29uc3QgV2ViU3RyaW5nJiBmb250ID0gaXRlci0+c2Vjb25kOworICAgICAgICBj
b25zdCBXZWJTdHJpbmcmIGZvbnQgPSBpdGVyLT52YWx1ZTsKICAgICAgICAgaWYgKCFmb250Lmlz
TnVsbCgpICYmICFmb250LmlzRW1wdHkoKSkKLSAgICAgICAgICAgICgqc2V0dGVyKShzZXR0aW5n
cywgZm9udCwgc3RhdGljX2Nhc3Q8VVNjcmlwdENvZGU+KGl0ZXItPmZpcnN0KSk7CisgICAgICAg
ICAgICAoKnNldHRlcikoc2V0dGluZ3MsIGZvbnQsIHN0YXRpY19jYXN0PFVTY3JpcHRDb2RlPihp
dGVyLT5rZXkpKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L1dlYlZpZXdIb3N0LmNwcAppbmRleCA4N2E5MTNmYzYwYTM2NGUxYzUyMTlmMTQwNjc5YmZkYjIy
YmE4YzRmLi5kNGU1NThlODk3MGE4NGU0MGZlYTI2ODAxZmIxMjM0OGUzZGI0ZTM1IDEwMDY0NAot
LS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5jcHAKKysrIGIv
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuY3BwCkBAIC0xNzY5LDcg
KzE3NjksNyBAQCB2b2lkIFdlYlZpZXdIb3N0OjpwcmludEZyYW1lVXNlckdlc3R1cmVTdGF0dXMo
V2ViRnJhbWUqIHdlYmZyYW1lLCBjb25zdCBjaGFyKiBtcwogdm9pZCBXZWJWaWV3SG9zdDo6cHJp
bnRSZXNvdXJjZURlc2NyaXB0aW9uKHVuc2lnbmVkIGlkZW50aWZpZXIpCiB7CiAgICAgUmVzb3Vy
Y2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZUlkZW50aWZpZXJNYXAuZmluZChpZGVudGlm
aWVyKTsKLSAgICBwcmludGYoIiVzIiwgaXQgIT0gbV9yZXNvdXJjZUlkZW50aWZpZXJNYXAuZW5k
KCkgPyBpdC0+c2Vjb25kLmNfc3RyKCkgOiAiPHVua25vd24+Iik7CisgICAgcHJpbnRmKCIlcyIs
IGl0ICE9IG1fcmVzb3VyY2VJZGVudGlmaWVyTWFwLmVuZCgpID8gaXQtPnZhbHVlLmNfc3RyKCkg
OiAiPHVua25vd24+Iik7CiB9CiAKIHZvaWQgV2ViVmlld0hvc3Q6OnNldFBlbmRpbmdFeHRyYURh
dGEoUGFzc093blB0cjxUZXN0U2hlbGxFeHRyYURhdGE+IGV4dHJhRGF0YSkKZGlmZiAtLWdpdCBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9UZXN0UnVubmVyTWFjLm1tIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW0KaW5kZXggYTIxZWQ4MGFjMTFiZTYzNzEzMWRm
Y2Q0NmVmZjY0YzZkNTI5MDNmNS4uZmJlNmM0OTAwYzViMDQ5MDZmNTRlNDJlYWY4NWQyN2U2ZmRj
NGZjMCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMu
bW0KKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW0KQEAgLTg5
Myw4ICs4OTMsOCBAQCB1bnNpZ25lZCB3b3JsZElERm9yV29ybGQoV2ViU2NyaXB0V29ybGQgKndv
cmxkKQogewogICAgIFdvcmxkTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSB3b3JsZE1hcCgpLmVu
ZCgpOwogICAgIGZvciAoV29ybGRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gd29ybGRNYXAoKS5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQgPT0gd29y
bGQpCi0gICAgICAgICAgICByZXR1cm4gaXQtPmZpcnN0OworICAgICAgICBpZiAoaXQtPnZhbHVl
ID09IHdvcmxkKQorICAgICAgICAgICAgcmV0dXJuIGl0LT5rZXk7CiAgICAgfQogCiAgICAgcmV0
dXJuIDA7CkBAIC05MTYsNyArOTE2LDcgQEAgdm9pZCBUZXN0UnVubmVyOjpldmFsdWF0ZVNjcmlw
dEluSXNvbGF0ZWRXb3JsZCh1bnNpZ25lZCB3b3JsZElELCBKU09iamVjdFJlZiBnbG8KICAgICBp
ZiAoIXdvcmxkSUQpCiAgICAgICAgIHdvcmxkID0gW1dlYlNjcmlwdFdvcmxkIHdvcmxkXTsKICAg
ICBlbHNlIHsKLSAgICAgICAgUmV0YWluUHRyPFdlYlNjcmlwdFdvcmxkPiYgd29ybGRTbG90ID0g
d29ybGRNYXAoKS5hZGQod29ybGRJRCwgMCkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgUmV0
YWluUHRyPFdlYlNjcmlwdFdvcmxkPiYgd29ybGRTbG90ID0gd29ybGRNYXAoKS5hZGQod29ybGRJ
RCwgMCkuaXRlcmF0b3ItPnZhbHVlOwogICAgICAgICBpZiAoIXdvcmxkU2xvdCkKICAgICAgICAg
ICAgIHdvcmxkU2xvdC5hZG9wdE5TKFtbV2ViU2NyaXB0V29ybGQgYWxsb2NdIGluaXRdKTsKICAg
ICAgICAgd29ybGQgPSB3b3JsZFNsb3QuZ2V0KCk7CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS93aW4vQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJXaW4uY3BwIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvd2luL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyV2luLmNwcAppbmRleCA3ZjlhYTZj
YzJlZTkyOWIyYmY4ZWE0MTZmNWQ2NWJiMDU2ZTNlYWQxLi5lYjM4YjU0MzVjMTY5ZDJiZGZiMDU2
OGM2M2VhMjAzYjVjNmZhM2RjIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4v
QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJXaW4uY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L3dpbi9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlcldpbi5jcHAKQEAgLTU4LDcgKzU4LDcgQEAgQWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXI6On5BY2Nlc3NpYmlsaXR5Q29udHJvbGxlcigpCiAgICAgICAg
IFVuaG9va1dpbkV2ZW50KG1fbm90aWZpY2F0aW9uc0V2ZW50SG9vayk7CiAKICAgICBmb3IgKEhh
c2hNYXA8UGxhdGZvcm1VSUVsZW1lbnQsIEpTT2JqZWN0UmVmPjo6aXRlcmF0b3IgaXQgPSBtX25v
dGlmaWNhdGlvbkxpc3RlbmVycy5iZWdpbigpOyBpdCAhPSBtX25vdGlmaWNhdGlvbkxpc3RlbmVy
cy5lbmQoKTsgKytpdCkKLSAgICAgICAgSlNWYWx1ZVVucHJvdGVjdChmcmFtZS0+Z2xvYmFsQ29u
dGV4dCgpLCBpdC0+c2Vjb25kKTsKKyAgICAgICAgSlNWYWx1ZVVucHJvdGVjdChmcmFtZS0+Z2xv
YmFsQ29udGV4dCgpLCBpdC0+dmFsdWUpOwogfQogCiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFj
Y2Vzc2liaWxpdHlDb250cm9sbGVyOjplbGVtZW50QXRQb2ludChpbnQgeCwgaW50IHkpCkBAIC0y
OTMsNyArMjkzLDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cmVtb3ZlTm90aWZp
Y2F0aW9uTGlzdGVuZXIoKQogdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6d2luTm90aWZp
Y2F0aW9uUmVjZWl2ZWQoUGxhdGZvcm1VSUVsZW1lbnQgZWxlbWVudCwgY29uc3Qgc3RyaW5nJiBl
dmVudE5hbWUpCiB7CiAgICAgZm9yIChIYXNoTWFwPFBsYXRmb3JtVUlFbGVtZW50LCBKU09iamVj
dFJlZj46Oml0ZXJhdG9yIGl0ID0gbV9ub3RpZmljYXRpb25MaXN0ZW5lcnMuYmVnaW4oKTsgaXQg
IT0gbV9ub3RpZmljYXRpb25MaXN0ZW5lcnMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgQ09NUHRy
PElTZXJ2aWNlUHJvdmlkZXI+IHRoaXNTZXJ2aWNlUHJvdmlkZXIoUXVlcnksIGl0LT5maXJzdCk7
CisgICAgICAgIENPTVB0cjxJU2VydmljZVByb3ZpZGVyPiB0aGlzU2VydmljZVByb3ZpZGVyKFF1
ZXJ5LCBpdC0+a2V5KTsKICAgICAgICAgaWYgKCF0aGlzU2VydmljZVByb3ZpZGVyKQogICAgICAg
ICAgICAgY29udGludWU7CiAKQEAgLTMxNiw3ICszMTYsNyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlD
b250cm9sbGVyOjp3aW5Ob3RpZmljYXRpb25SZWNlaXZlZChQbGF0Zm9ybVVJRWxlbWVudCBlbGVt
ZW50LAogCiAgICAgICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBqc05vdGlmaWNhdGlvbihB
ZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoZXZlbnROYW1lLmNfc3RyKCkpKTsK
ICAgICAgICAgSlNWYWx1ZVJlZiBhcmd1bWVudCA9IEpTVmFsdWVNYWtlU3RyaW5nKGZyYW1lLT5n
bG9iYWxDb250ZXh0KCksIGpzTm90aWZpY2F0aW9uLmdldCgpKTsKLSAgICAgICAgSlNPYmplY3RD
YWxsQXNGdW5jdGlvbihmcmFtZS0+Z2xvYmFsQ29udGV4dCgpLCBpdC0+c2Vjb25kLCBOVUxMLCAx
LCAmYXJndW1lbnQsIE5VTEwpOworICAgICAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9uKGZyYW1l
LT5nbG9iYWxDb250ZXh0KCksIGl0LT52YWx1ZSwgMCwgMSwgJmFyZ3VtZW50LCAwKTsKICAgICB9
CiB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9SZXNvdXJjZUxvYWRE
ZWxlZ2F0ZS5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vUmVzb3VyY2VMb2FkRGVsZWdh
dGUuY3BwCmluZGV4IDkwYjlhZTBmY2MzZjYxN2Y0ZmY2NzU1NjJkYTI5NmVlNWUyYmJjMzMuLjY4
NTk3ODBmMzkyZjE4ZTMwNjYxYjA0OTI3YjRjY2NiZjNjNDcxYTIgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL3dpbi9SZXNvdXJjZUxvYWREZWxlZ2F0ZS5jcHAKKysrIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvd2luL1Jlc291cmNlTG9hZERlbGVnYXRlLmNwcApAQCAtNjYsNyArNjYs
NyBAQCB3c3RyaW5nIFJlc291cmNlTG9hZERlbGVnYXRlOjpkZXNjcmlwdGlvblN1aXRhYmxlRm9y
VGVzdFJlc3VsdCh1bnNpZ25lZCBsb25nIGlkZQogICAgIGlmIChpdCA9PSBtX3VybE1hcC5lbmQo
KSkKICAgICAgICAgcmV0dXJuIEwiPHVua25vd24+IjsKIAotICAgIHJldHVybiB1cmxTdWl0YWJs
ZUZvclRlc3RSZXN1bHQoaXQtPnNlY29uZCk7CisgICAgcmV0dXJuIHVybFN1aXRhYmxlRm9yVGVz
dFJlc3VsdChpdC0+dmFsdWUpOwogfQogCiB3c3RyaW5nIFJlc291cmNlTG9hZERlbGVnYXRlOjpk
ZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChJV2ViVVJMUmVxdWVzdCogcmVxdWVzdCkK
ZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9UZXN0UnVubmVyV2luLmNwcCBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9UZXN0UnVubmVyV2luLmNwcAppbmRleCBkMzM2NTFi
N2FmNmU0NWMyYjllNTYxYjRhNzE3MWI0NmM5ZTYzN2YxLi5jZTQ0NjAzM2I0NDkxYmEzY2Q3ZTU0
NDYwZTM0NTc1MGVjNGVhNmQ3IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4v
VGVzdFJ1bm5lcldpbi5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1Rlc3RSdW5u
ZXJXaW4uY3BwCkBAIC0xMjQ2LDggKzEyNDYsOCBAQCB1bnNpZ25lZCB3b3JsZElERm9yV29ybGQo
SVdlYlNjcmlwdFdvcmxkKiB3b3JsZCkKIHsKICAgICBXb3JsZE1hcDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gd29ybGRNYXAoKS5lbmQoKTsKICAgICBmb3IgKFdvcmxkTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IHdvcmxkTWFwKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlm
IChpdC0+c2Vjb25kID09IHdvcmxkKQotICAgICAgICAgICAgcmV0dXJuIGl0LT5maXJzdDsKKyAg
ICAgICAgaWYgKGl0LT52YWx1ZSA9PSB3b3JsZCkKKyAgICAgICAgICAgIHJldHVybiBpdC0+a2V5
OwogICAgIH0KIAogICAgIHJldHVybiAwOwpAQCAtMTI3MSw3ICsxMjcxLDcgQEAgdm9pZCBUZXN0
UnVubmVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCh1bnNpZ25lZCB3b3JsZElELCBK
U09iamVjdFJlZiBnbG8KICAgICAgICAgaWYgKEZBSUxFRChXZWJLaXRDcmVhdGVJbnN0YW5jZShf
X3V1aWRvZihXZWJTY3JpcHRXb3JsZCksIDAsIF9fdXVpZG9mKHdvcmxkKSwgcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKio+KCZ3b3JsZCkpKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9IGVsc2Ug
ewotICAgICAgICBDT01QdHI8SVdlYlNjcmlwdFdvcmxkPiYgd29ybGRTbG90ID0gd29ybGRNYXAo
KS5hZGQod29ybGRJRCwgMCkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgQ09NUHRyPElXZWJT
Y3JpcHRXb3JsZD4mIHdvcmxkU2xvdCA9IHdvcmxkTWFwKCkuYWRkKHdvcmxkSUQsIDApLml0ZXJh
dG9yLT52YWx1ZTsKICAgICAgICAgaWYgKCF3b3JsZFNsb3QgJiYgRkFJTEVEKFdlYktpdENyZWF0
ZUluc3RhbmNlKF9fdXVpZG9mKFdlYlNjcmlwdFdvcmxkKSwgMCwgX191dWlkb2Yod29ybGRTbG90
KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZ3b3JsZFNsb3QpKSkpCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIHdvcmxkID0gd29ybGRTbG90OwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL0RPTVdpbmRvd0V4dGVuc2lvbkJhc2ljX0J1bmRsZS5j
cHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvRE9NV2luZG93RXh0ZW5zaW9u
QmFzaWNfQnVuZGxlLmNwcAppbmRleCA5OGJmYWIzNWFmNDZjZjQ5YzYyYmNjOWIwYTg1OTQ1N2Y0
OGNjMWMxLi41YjEyOTZmNDdkMTlkMjhiOWRlN2ZjZThkMTMxYWE0MDU0NzZiZGQxIDEwMDY0NAot
LS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvRE9NV2luZG93RXh0ZW5zaW9u
QmFzaWNfQnVuZGxlLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIv
RE9NV2luZG93RXh0ZW5zaW9uQmFzaWNfQnVuZGxlLmNwcApAQCAtMTcxLDggKzE3MSw4IEBAIHZv
aWQgRE9NV2luZG93RXh0ZW5zaW9uQmFzaWM6OndpbGxEZXN0cm95UGFnZShXS0J1bmRsZVJlZiwg
V0tCdW5kbGVQYWdlUmVmKQogICAgIEhhc2hNYXA8V0tCdW5kbGVET01XaW5kb3dFeHRlbnNpb25S
ZWYsIGludD46Oml0ZXJhdG9yIGl0ID0gbV9leHRlbnNpb25Ub1JlY29yZE1hcC5iZWdpbigpOwog
ICAgIEhhc2hNYXA8V0tCdW5kbGVET01XaW5kb3dFeHRlbnNpb25SZWYsIGludD46Oml0ZXJhdG9y
IGVuZCA9IG1fZXh0ZW5zaW9uVG9SZWNvcmRNYXAuZW5kKCk7CiAgICAgZm9yICg7IGl0ICE9IGVu
ZDsgKytpdCkgewotICAgICAgICB1cGRhdGVFeHRlbnNpb25TdGF0ZVJlY29yZChpdC0+Zmlyc3Qs
IFJlbW92ZWQpOwotICAgICAgICBXS1JlbGVhc2UoaXQtPmZpcnN0KTsKKyAgICAgICAgdXBkYXRl
RXh0ZW5zaW9uU3RhdGVSZWNvcmQoaXQtPmtleSwgUmVtb3ZlZCk7CisgICAgICAgIFdLUmVsZWFz
ZShpdC0+a2V5KTsKICAgICB9CiAKICAgICBtX2V4dGVuc2lvblRvUmVjb3JkTWFwLmNsZWFyKCk7
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvRE9NV2luZG93
RXh0ZW5zaW9uTm9DYWNoZV9CdW5kbGUuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXQyL0RPTVdpbmRvd0V4dGVuc2lvbk5vQ2FjaGVfQnVuZGxlLmNwcAppbmRleCA4ZjZjZDdi
MzczNWI1YWUyNzlkMGFkYjc3MTg1YzVkMjgwNzExY2FlLi40MTFlMTE1ZWE0NGZiZTQ4NzBlN2Yx
ZjMxZDkwNWU4NTc3ZjA3ZTIyIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdDIvRE9NV2luZG93RXh0ZW5zaW9uTm9DYWNoZV9CdW5kbGUuY3BwCisrKyBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9ET01XaW5kb3dFeHRlbnNpb25Ob0NhY2hlX0J1
bmRsZS5jcHAKQEAgLTE3OCw4ICsxNzgsOCBAQCB2b2lkIERPTVdpbmRvd0V4dGVuc2lvbk5vQ2Fj
aGU6OndpbGxEZXN0cm95UGFnZShXS0J1bmRsZVJlZiwgV0tCdW5kbGVQYWdlUmVmKQogICAgIEhh
c2hNYXA8V0tCdW5kbGVET01XaW5kb3dFeHRlbnNpb25SZWYsIGludD46Oml0ZXJhdG9yIGl0ID0g
bV9leHRlbnNpb25Ub1JlY29yZE1hcC5iZWdpbigpOwogICAgIEhhc2hNYXA8V0tCdW5kbGVET01X
aW5kb3dFeHRlbnNpb25SZWYsIGludD46Oml0ZXJhdG9yIGVuZCA9IG1fZXh0ZW5zaW9uVG9SZWNv
cmRNYXAuZW5kKCk7CiAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICB1cGRh
dGVFeHRlbnNpb25TdGF0ZVJlY29yZChpdC0+Zmlyc3QsIFJlbW92ZWQpOwotICAgICAgICBXS1Jl
bGVhc2UoaXQtPmZpcnN0KTsKKyAgICAgICAgdXBkYXRlRXh0ZW5zaW9uU3RhdGVSZWNvcmQoaXQt
PmtleSwgUmVtb3ZlZCk7CisgICAgICAgIFdLUmVsZWFzZShpdC0+a2V5KTsKICAgICB9CiAKICAg
ICBtX2V4dGVuc2lvblRvUmVjb3JkTWFwLmNsZWFyKCk7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwIGIvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcAppbmRleCA4OTJiYzIxNWQ0
ZGRlNWI0YjRmMGE3NWYwMDg0YzEzY2JiN2QzMmEwLi44NzUzNjk5OGY5MjE5YzUzMTE0ZDE3YTk1
NzY1ZmNhNWY4OTk3YjA2IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHAKQEAgLTQ5Myw4ICs0OTMsOCBAQCB1bnNpZ25lZCBU
ZXN0UnVubmVyOjp3b3JsZElERm9yV29ybGQoV0tCdW5kbGVTY3JpcHRXb3JsZFJlZiB3b3JsZCkK
IHsKICAgICBXb3JsZE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gd29ybGRNYXAoKS5lbmQoKTsK
ICAgICBmb3IgKFdvcmxkTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHdvcmxkTWFwKCkuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kID09IHdvcmxkKQot
ICAgICAgICAgICAgcmV0dXJuIGl0LT5maXJzdDsKKyAgICAgICAgaWYgKGl0LT52YWx1ZSA9PSB3
b3JsZCkKKyAgICAgICAgICAgIHJldHVybiBpdC0+a2V5OwogICAgIH0KIAogICAgIHJldHVybiAw
OwpAQCAtNTA4LDcgKzUwOCw3IEBAIHZvaWQgVGVzdFJ1bm5lcjo6ZXZhbHVhdGVTY3JpcHRJbklz
b2xhdGVkV29ybGQoSlNDb250ZXh0UmVmIGNvbnRleHQsIHVuc2lnbmVkIHdvCiAgICAgaWYgKCF3
b3JsZElEKQogICAgICAgICB3b3JsZC5hZG9wdChXS0J1bmRsZVNjcmlwdFdvcmxkQ3JlYXRlV29y
bGQoKSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLQnVuZGxlU2NyaXB0V29y
bGRSZWY+JiB3b3JsZFNsb3QgPSB3b3JsZE1hcCgpLmFkZCh3b3JsZElELCAwKS5pdGVyYXRvci0+
c2Vjb25kOworICAgICAgICBXS1JldGFpblB0cjxXS0J1bmRsZVNjcmlwdFdvcmxkUmVmPiYgd29y
bGRTbG90ID0gd29ybGRNYXAoKS5hZGQod29ybGRJRCwgMCkuaXRlcmF0b3ItPnZhbHVlOwogICAg
ICAgICBpZiAoIXdvcmxkU2xvdCkKICAgICAgICAgICAgIHdvcmxkU2xvdC5hZG9wdChXS0J1bmRs
ZVNjcmlwdFdvcmxkQ3JlYXRlV29ybGQoKSk7CiAgICAgICAgIHdvcmxkID0gd29ybGRTbG90Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>164965</attachid>
            <date>2012-09-20 12:18:49 -0700</date>
            <delta_ts>2012-10-05 14:37:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-82784-20120920161812.patch</filename>
            <type>text/plain</type>
            <size>718378</size>
            <attacher name="Caio Marcelo de Oliveira Filho">cmarcelo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI5MTQzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
YTcxMDBlMjFjMjM3YzA2NWZjNjUyN2RhMGY3ODkwZGJhYzZlZDU3Li4xMDNjOGU0MzI1NTY5MmFk
MWVhMGIzMDEzYjZhNDBjYjE2NDA0NjMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMjAgQEAKKzIwMTItMDktMTQgIENhaW8gTWFyY2VsbyBkZSBPbGl2ZWlyYSBGaWxobyAg
PGNhaW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KKworICAgICAgICBSZW5hbWUgZmlyc3Qvc2Vj
b25kIHRvIGtleS92YWx1ZSBpbiBIYXNoTWFwIGl0ZXJhdG9ycworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI3ODQKKworICAgICAgICBSZXZpZXdlZCBi
eSBFcmljIFNlaWRlbC4KKworICAgICAgICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0Lmg6CisgICAg
ICAgIChKU0M6OkpTQ2FsbGJhY2tPYmplY3REYXRhOjpKU1ByaXZhdGVQcm9wZXJ0eU1hcDo6Z2V0
UHJpdmF0ZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNDYWxsYmFja09iamVjdERhdGE6OkpT
UHJpdmF0ZVByb3BlcnR5TWFwOjpzZXRQcml2YXRlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpK
U0NhbGxiYWNrT2JqZWN0RGF0YTo6SlNQcml2YXRlUHJvcGVydHlNYXA6OnZpc2l0Q2hpbGRyZW4p
OgorICAgICAgICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmg6CisgICAgICAgIChK
U0M6Ojo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBBUEkvSlNDbGFz
c1JlZi5jcHA6CisgICAgICAgIChPcGFxdWVKU0NsYXNzOjp+T3BhcXVlSlNDbGFzcyk6CisgICAg
ICAgIChPcGFxdWVKU0NsYXNzQ29udGV4dERhdGE6Ok9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YSk6
CisgICAgICAgIChPcGFxdWVKU0NsYXNzOjpjb250ZXh0RGF0YSk6CisgICAgICAgICogYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkdW1wKToKKyAgICAg
ICAgKEpTQzo6RXZhbENvZGVDYWNoZTo6dmlzaXRBZ2dyZWdhdGUpOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6Om5hbWVGb3JSZWdpc3Rlcik6CisgICAgICAgICogYnl0ZWNvZGUvSnVtcFRhYmxl
Lmg6CisgICAgICAgIChKU0M6OlN0cmluZ0p1bXBUYWJsZTo6b2Zmc2V0Rm9yVmFsdWUpOgorICAg
ICAgICAoSlNDOjpTdHJpbmdKdW1wVGFibGU6OmN0aUZvclZhbHVlKToKKyAgICAgICAgKiBieXRl
Y29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5jcHA6CisgICAgICAgIChKU0M6OkxhenlPcGVy
YW5kVmFsdWVQcm9maWxlUGFyc2VyOjpnZXRJZlByZXNlbnQpOgorICAgICAgICAqIGJ5dGVjb2Rl
L1NhbXBsaW5nVG9vbC5jcHA6CisgICAgICAgIChKU0M6OlNhbXBsaW5nVG9vbDo6ZHVtcCk6Cisg
ICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpT
Qzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmFkZFZhcik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2Vu
ZXJhdG9yOjphZGRHbG9iYWxWYXIpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6
YWRkQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6YWRkQ29uc3Rh
bnRWYWx1ZSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TG9hZCk6Cisg
ICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjphZGRTdHJpbmdDb25zdGFudCk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TGF6eU5ld0Z1bmN0aW9uKToKKyAgICAg
ICAgKiBieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcDoKKyAgICAgICAgKEpTQzo6UHJvcGVy
dHlMaXN0Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKiBkZWJ1Z2dlci9EZWJ1Z2dlci5j
cHA6CisgICAgICAgICogZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkFyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2U6OnJ1bik6Cisg
ICAgICAgIChKU0M6OkRGRzo6QXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZTo6b2JzZXJ2ZUJh
ZEFyZ3VtZW50c1VzZSk6CisgICAgICAgIChKU0M6OkRGRzo6QXJndW1lbnRzU2ltcGxpZmljYXRp
b25QaGFzZTo6b2JzZXJ2ZVByb3BlckFyZ3VtZW50c1VzZSk6CisgICAgICAgIChKU0M6OkRGRzo6
QXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZTo6aXNPS1RvT3B0aW1pemUpOgorICAgICAgICAo
SlNDOjpERkc6OkFyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2U6OnJlbW92ZUFyZ3VtZW50c1Jl
ZmVyZW5jaW5nUGhhbnRvbUNoaWxkKToKKyAgICAgICAgKiBkZmcvREZHQXNzZW1ibHlIZWxwZXJz
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBc3NlbWJseUhlbHBlcnM6OmRlY29kZWRDb2RlTWFw
Rm9yKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVDYWNoZS5oOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlQ2FjaGU6On5CeXRlQ29kZUNhY2hlKToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZUNhY2hlOjpnZXQpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmNlbGxDb25zdGFudCk6CisgICAg
ICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZVN0
YWNrRW50cnkpOgorICAgICAgICAqIGRmZy9ERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2Uu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZTo6cnVu
KToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2U6Om5vdGlj
ZVN0cnVjdHVyZUNoZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVDaGVja0hvaXN0
aW5nUGhhc2U6Om5vdGljZUNsb2JiZXIpOgorICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAg
ICAgIChKU0M6OkhlYXA6Om1hcmtQcm90ZWN0ZWRPYmplY3RzKToKKyAgICAgICAgKiBoZWFwL0hl
YXAuaDoKKyAgICAgICAgKEpTQzo6SGVhcDo6Zm9yRWFjaFByb3RlY3RlZENlbGwpOgorICAgICAg
ICAqIGhlYXAvSklUU3R1YlJvdXRpbmVTZXQuY3BwOgorICAgICAgICAoSlNDOjpKSVRTdHViUm91
dGluZVNldDo6bWFya1Nsb3cpOgorICAgICAgICAoSlNDOjpKSVRTdHViUm91dGluZVNldDo6ZGVs
ZXRlVW5tYXJrZWRKZXR0aXNvbmVkU3R1YlJvdXRpbmVzKToKKyAgICAgICAgKiBoZWFwL1Nsb3RW
aXNpdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmludGVybmFsQXBwZW5kKToK
KyAgICAgICAgKiBoZWFwL1dlYWsuaDoKKyAgICAgICAgKEpTQzo6d2Vha1JlbW92ZSk6CisgICAg
ICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGUpOgor
ICAgICAgICAqIGppdC9KSVRTdHVicy5jcHA6CisgICAgICAgIChKU0M6OkpJVFRodW5rczo6Y3Rp
U3R1Yik6CisgICAgICAgICogcGFyc2VyL1BhcnNlci5jcHA6CisgICAgICAgIChKU0M6Ojo6cGFy
c2VTdHJpY3RPYmplY3RMaXRlcmFsKToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlLmNwcDoK
KyAgICAgICAgKEpTQzo6ZnVuY3Rpb25OYW1lQ291bnRQYWlyQ29tcGFyYXRvcik6CisgICAgICAg
IChKU0M6OlByb2ZpbGU6OmRlYnVnUHJpbnREYXRhU2FtcGxlU3R5bGUpOgorICAgICAgICAqIHJ1
bnRpbWUvSWRlbnRpZmllci5jcHA6CisgICAgICAgIChKU0M6OklkZW50aWZpZXI6OmFkZCk6Cisg
ICAgICAgICogcnVudGltZS9KU0FjdGl2YXRpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0FjdGl2
YXRpb246OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6OkpTQWN0
aXZhdGlvbjo6c3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRlcyk6CisgICAgICAgICogcnVudGlt
ZS9KU0FycmF5LmNwcDoKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c2V0TGVuZ3RoKToKKyAgICAg
ICAgKEpTQzo6SlNBcnJheTo6c29ydCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmNvbXBhY3RG
b3JTb3J0aW5nKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6ZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVh
ZHlFeGlzdHMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6ZGVmaW5lT3duSW5kZXhlZFByb3BlcnR5KToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdl
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVu
Z3RoV2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjaGVja0luZGV4
aW5nQ29uc2lzdGVuY3kpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKToKKyAgICAgICAgKiBydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3BwOgor
ICAgICAgICAoSlNDOjpKU1N5bWJvbFRhYmxlT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5
TmFtZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oOgorICAgICAg
ICAoSlNDOjpzeW1ib2xUYWJsZUdldCk6CisgICAgICAgIChKU0M6OnN5bWJvbFRhYmxlUHV0KToK
KyAgICAgICAgKEpTQzo6c3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRlcyk6CisgICAgICAgICog
cnVudGltZS9SZWdFeHBDYWNoZS5jcHA6CisgICAgICAgIChKU0M6OlJlZ0V4cENhY2hlOjppbnZh
bGlkYXRlQ29kZSk6CisgICAgICAgICogcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwSW5saW5l
TWV0aG9kcy5oOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpwdXRFbnRyeSk6
CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OnB1dERpcmVjdCk6CisgICAgICAg
IChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIHJ1
bnRpbWUvV2Vha0dDTWFwLmg6CisgICAgICAgIChKU0M6OldlYWtHQ01hcDo6Y2xlYXIpOgorICAg
ICAgICAoSlNDOjpXZWFrR0NNYXA6OnNldCk6CisgICAgICAgICogdG9vbHMvUHJvZmlsZVRyZWVO
b2RlLmg6CisgICAgICAgIChKU0M6OlByb2ZpbGVUcmVlTm9kZTo6c2FtcGxlQ2hpbGQpOgorICAg
ICAgICAoSlNDOjpQcm9maWxlVHJlZU5vZGU6OmNoaWxkQ291bnQpOgorICAgICAgICAoSlNDOjpQ
cm9maWxlVHJlZU5vZGU6OmR1bXBJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OlByb2ZpbGVUcmVl
Tm9kZTo6Y29tcGFyZUVudHJpZXMpOgorCiAyMDEyLTA5LTIwICBHYWJvciBSYXBjc2FueWkgIDxy
Z2Fib3JAd2Via2l0Lm9yZz4KIAogICAgICAgICBbUXRdIHIxMjkwNDUgYnJva2UgdGhlIEFSTSBi
dWlsZApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZwppbmRleCA3YzMyZTkyMjQ2MTliOGQ0MGU4ZWI3NmU5OWFjMWU3YjM4ODE2ZTc4Li41ZDc0
NDYyZWY4ODI0YzE1MTUwNDEyMGY2ZTQ3OTExMjc3ZmI1MzdiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcxIEBA
CisyMDEyLTA5LTE0ICBDYWlvIE1hcmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gIDxjYWlvLm9saXZl
aXJhQG9wZW5ib3NzYS5vcmc+CisKKyAgICAgICAgUmVuYW1lIGZpcnN0L3NlY29uZCB0byBrZXkv
dmFsdWUgaW4gSGFzaE1hcCBpdGVyYXRvcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTgyNzg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlk
ZWwuCisKKyAgICAgICAgQ3VycmVudGx5IEhhc2hNYXAgaXRlcmF0b3JzIGZvbGxvdyB0aGUgc2Ft
ZSBpbnRlcmZhY2UgaW4gc3RkOjptYXA6IGdpdmVuIGFuCisgICAgICAgIGl0ZXJhdG9yIGl0LCB3
ZSB1c2UgaXQtPmZpcnN0IHRvIGFjY2VzcyB0aGUga2V5IGFuZCBpdC0+c2Vjb25kIHRvIGFjY2Vz
cyB0aGUKKyAgICAgICAgdmFsdWUuIFRoaXMgcGF0Y2ggY2hhbmdlcyB0aGVzZSBhY2Nlc3NlcyB0
byBpdC0+a2V5IGFuZCBpdC0+dmFsdWUsIGltcHJvdmluZyB0aGUKKyAgICAgICAgcmVhZGFiaWxp
dHkgYXQgY2FsbCBzaXRlcy4KKworICAgICAgICBPbmUgcG90ZW50aWFsIGRvd25zaWRlIG9mIHRo
aXMgY2hhbmdlIHdvdWxkIGJlIHRoZSBjb25mdXNpb24gYmV0d2VlbiBzdGQ6Om1hcCBhbmQKKyAg
ICAgICAgSGFzaE1hcCBpbnRlcmZhY2VzLiBIb3dldmVyLCB0aGV5IGFyZSBhbHJlYWR5IGRpZmZl
cmVudCBpbiBvdGhlciBhc3BlY3RzIGFuZCB0aGUKKyAgICAgICAgdXNhZ2Ugb2Ygc3RkOjptYXAg
aXMgbW9yZSBhbiBleGNlcHRpb24gdGhhbiBhIHJ1bGUgaW4gV2ViS2l0IGNvZGUsIHNvIHdlIGNv
bnNpZGVyCisgICAgICAgIHRoZSBjb25mdXNpb24gd2lsbCBiZSBsZXNzIGxpa2VseSB0byBoYXBw
ZW4uCisKKyAgICAgICAgKiB3dGYvSGFzaENvdW50ZWRTZXQuaDoKKyAgICAgICAgKFdURjo6Ojph
ZGQpOgorICAgICAgICAoV1RGOjo6OnJlbW92ZSk6CisgICAgICAgIChXVEY6OmNvcHlUb1ZlY3Rv
cik6CisgICAgICAgICogd3RmL0hhc2hJdGVyYXRvcnMuaDoKKyAgICAgICAgKFdURjo6SGFzaFRh
YmxlQ29uc3RLZXlzSXRlcmF0b3I6OmdldCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZUNvbnN0
VmFsdWVzSXRlcmF0b3I6OmdldCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZUtleXNJdGVyYXRv
cjo6Z2V0KToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlVmFsdWVzSXRlcmF0b3I6OmdldCk6Cisg
ICAgICAgICogd3RmL0hhc2hNYXAuaDoKKyAgICAgICAgKFdURjo6S2V5VmFsdWVQYWlyS2V5RXh0
cmFjdG9yOjpleHRyYWN0KToKKyAgICAgICAgKFdURjo6SGFzaE1hcFZhbHVlVHJhaXRzOjppc0Vt
cHR5VmFsdWUpOgorICAgICAgICAoV1RGOjpIYXNoTWFwVHJhbnNsYXRvcjo6dHJhbnNsYXRlKToK
KyAgICAgICAgKFdURjo6SGFzaE1hcFRyYW5zbGF0b3JBZGFwdGVyOjp0cmFuc2xhdGUpOgorICAg
ICAgICAoV1RGOjo6OnNldCk6CisgICAgICAgIChXVEY6Ojo6Z2V0KToKKyAgICAgICAgKFdURjo6
Ojp0YWtlKToKKyAgICAgICAgKFdURjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXVEY6OmRlbGV0
ZUFsbFZhbHVlcyk6CisgICAgICAgIChXVEY6OmRlbGV0ZUFsbEtleXMpOgorICAgICAgICBSZW1v
dmVkIGRlbGV0ZUFsbFBhaXJGaXJzdHMoKSBhbmQgZGVsZXRlQWxsUGFpclNlY29uZHMoKSBzaW5j
ZSB0aGV5IGFyZSBub3cgdW51c2VkLgorCisgICAgICAgICogd3RmL0hhc2hUYWJsZS5oOgorICAg
ICAgICAoV1RGOjpoYXNoVGFibGVTd2FwKToKKyAgICAgICAgKFdURjo6OjpjaGVja1RhYmxlQ29u
c2lzdGVuY3lFeGNlcHRTaXplKToKKyAgICAgICAgKiB3dGYvSGFzaFRyYWl0cy5oOgorICAgICAg
ICAoV1RGOjpLZXlWYWx1ZVBhaXI6OktleVZhbHVlUGFpcik6CisgICAgICAgIChLZXlWYWx1ZVBh
aXIpOgorICAgICAgICAoV1RGOjpLZXlWYWx1ZVBhaXJIYXNoVHJhaXRzOjpjb25zdHJ1Y3REZWxl
dGVkVmFsdWUpOgorICAgICAgICAoV1RGOjpLZXlWYWx1ZVBhaXJIYXNoVHJhaXRzOjppc0RlbGV0
ZWRWYWx1ZSk6CisgICAgICAgICogd3RmL01lbW9yeUluc3RydW1lbnRhdGlvbi5oOgorICAgICAg
ICAoV1RGOjpNZW1vcnlJbnN0cnVtZW50YXRpb246OmFkZEluc3RydW1lbnRlZE1hcEVudHJpZXMp
OgorICAgICAgICAoV1RGOjpNZW1vcnlJbnN0cnVtZW50YXRpb246OmFkZEluc3RydW1lbnRlZE1h
cFZhbHVlcyk6CisgICAgICAgICogd3RmL01ldGFBbGxvY2F0b3IuY3BwOgorICAgICAgICAoV1RG
OjpNZXRhQWxsb2NhdG9yOjphZGRGcmVlU3BhY2UpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2Nh
dG9yOjppbmNyZW1lbnRQYWdlT2NjdXBhbmN5KToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRv
cjo6ZGVjcmVtZW50UGFnZU9jY3VwYW5jeSk6CisgICAgICAgICogd3RmL1JlZkNvdW50ZWRMZWFr
Q291bnRlci5jcHA6CisgICAgICAgIChXVEY6OlJlZkNvdW50ZWRMZWFrQ291bnRlcjo6flJlZkNv
dW50ZWRMZWFrQ291bnRlcik6CisgICAgICAgICogd3RmL1JlZlB0ckhhc2hNYXAuaDoKKyAgICAg
ICAgKFdURjo6OjpzZXQpOgorICAgICAgICAoV1RGOjo6OmdldCk6CisgICAgICAgIChXVEY6Ojo6
aW5saW5lR2V0KToKKyAgICAgICAgKFdURjo6Ojp0YWtlKToKKyAgICAgICAgKiB3dGYvU3BlY3Ry
dW0uaDoKKyAgICAgICAgKFdURjo6U3BlY3RydW06OmFkZCk6CisgICAgICAgIChXVEY6OlNwZWN0
cnVtOjpnZXQpOgorICAgICAgICAoV1RGOjpTcGVjdHJ1bTo6YnVpbGRMaXN0KToKKyAgICAgICAg
KiB3dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwOgorICAgICAgICAoV1RGOjppZGVudGlmaWVyQnlQ
dGhyZWFkSGFuZGxlKToKKwogMjAxMi0wOS0xOSAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBw
bGUuY29tPgogCiAgICAgICAgIE9TUiBleGl0IHNvbWV0aW1lcyBuZWdsZWN0cyB0byBjcmVhdGUg
dGhlIGFyZ3VtZW50cyBvYmplY3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA2ZGE2ZTgyNDQ5OGY4Y2NjNWM0MjBm
ZDhhODFjNWVjMjNmZTBjYWNlLi5iYzc2OWI3NzI0OGEzZjE5YmE0YTZkZjQxYzc0ZGNkZGVhZmU4
Njg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODczIEBACisyMDEyLTA5LTE0ICBDYWlvIE1hcmNl
bG8gZGUgT2xpdmVpcmEgRmlsaG8gIDxjYWlvLm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+CisKKyAg
ICAgICAgUmVuYW1lIGZpcnN0L3NlY29uZCB0byBrZXkvdmFsdWUgaW4gSGFzaE1hcCBpdGVyYXRv
cnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyNzg0
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCisKKyAgICAgICAgKiBNb2R1bGVz
L2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0
aW9uOjpXYXRjaGVyczo6ZmluZCk6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvbjo6V2F0
Y2hlcnM6OnJlbW92ZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6Om9iamVjdFN0b3JlTmFtZXMpOgor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6bWV0YWRhdGEpOgorICAg
ICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJREJGYWN0b3J5QmFja2VuZEltcGw6OmRlbGV0ZURhdGFiYXNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkZhY3RvcnlCYWNrZW5kSW1wbDo6b3BlbkJhY2tpbmdTdG9yZSk6
CisgICAgICAgIChXZWJDb3JlOjpJREJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW4pOgorICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OklEQk9iamVjdFN0b3JlOjppbmRleE5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9i
amVjdFN0b3JlOjpwdXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmluZGV4
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpkZWxldGVJbmRleCk6CisgICAg
ICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjptZXRhZGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjptYWtlSW5kZXhXcml0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OklE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRlbGV0ZUludGVybmFsKToKKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJU
cmFuc2FjdGlvbjo6b2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rp
b246Om9iamVjdFN0b3JlRGVsZXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlv
bjo6b25BYm9ydCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6ZGlzcGF0Y2hF
dmVudCk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYUNvbnN0cmFpbnRzSW1w
bC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnN0cmFpbnRzSW1wbDo6Z2V0TWFuZGF0
b3J5Q29uc3RyYWludE5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29uc3RyYWludHNJ
bXBsOjpnZXRNYW5kYXRvcnlDb25zdHJhaW50VmFsdWUpOgorICAgICAgICAqIE1vZHVsZXMvd2Vi
ZGF0YWJhc2UvQWJzdHJhY3REYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFj
dERhdGFiYXNlOjpwZXJmb3JtT3BlbkFuZFZlcmlmeSk6CisgICAgICAgICogTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VU
cmFja2VyOjppbnRlcnJ1cHRBbGxEYXRhYmFzZXNGb3JDb250ZXh0KToKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmRhdGFiYXNlL09yaWdpblVzYWdlUmVjb3JkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Ok9yaWdpblVzYWdlUmVjb3JkOjpkaXNrVXNhZ2UpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0
YWJhc2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
UUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjphY3F1aXJlTG9jayk6CisgICAgICAgIChXZWJDb3Jl
OjpTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpyZWxlYXNlTG9jayk6CisgICAgICAgIChXZWJD
b3JlOjpTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpzaHV0ZG93bik6CisgICAgICAgICogTW9k
dWxlcy93ZWJkYXRhYmFzZS9jaHJvbWl1bS9EYXRhYmFzZVRyYWNrZXJDaHJvbWl1bS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmludGVycnVwdEFsbERhdGFiYXNlc0Zv
ckNvbnRleHQpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvY2hyb21pdW0vUXVvdGFU
cmFja2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlF1b3RhVHJhY2tlcjo6Z2V0RGF0YWJhc2VT
aXplQW5kU3BhY2VBdmFpbGFibGVUb09yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpRdW90YVRy
YWNrZXI6OnVwZGF0ZURhdGFiYXNlU2l6ZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRz
L1dlYlNvY2tldERlZmxhdGVGcmFtZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0
RXh0ZW5zaW9uRGVmbGF0ZUZyYW1lOjpwcm9jZXNzUmVzcG9uc2UpOgorICAgICAgICAqIE1vZHVs
ZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OldlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXI6OmFwcGVuZEFjY2VwdGVkRXh0
ZW5zaW9uKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6fkFYT2JqZWN0Q2FjaGUpOgorICAgICAgICAq
IGJpbmRpbmdzL2dvYmplY3QvRE9NT2JqZWN0Q2FjaGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpE
T01PYmplY3RDYWNoZTo6Y2xlYXJCeUZyYW1lKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9ET01P
YmplY3RIYXNoVGFibGVNYXAuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTU9iamVjdEhhc2hUYWJs
ZU1hcDo6fkRPTU9iamVjdEhhc2hUYWJsZU1hcCk6CisgICAgICAgIChXZWJDb3JlOjpET01PYmpl
Y3RIYXNoVGFibGVNYXA6OmdldCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01CaW5kaW5n
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNhY2hlRE9NU3RydWN0dXJlKToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RP
TUdsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNE
T01HbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OmdldERPTUNvbnN0cnVjdG9yKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UGFnZVNjcmlwdERlYnVnU2VydmVyOjphZGRMaXN0ZW5lcik6CisgICAgICAg
IChXZWJDb3JlOjpQYWdlU2NyaXB0RGVidWdTZXJ2ZXI6OnJlbW92ZUxpc3RlbmVyKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDYWNoZWRGcmFtZURhdGEuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U2NyaXB0Q2FjaGVkRnJhbWVEYXRhOjpTY3JpcHRDYWNoZWRGcmFtZURhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FjaGVkRnJhbWVEYXRhOjpyZXN0b3JlKToKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNj
cmlwdENvbnRyb2xsZXI6On5TY3JpcHRDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cmlwdENvbnRyb2xsZXI6OmNsZWFyV2luZG93U2hlbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
aXB0Q29udHJvbGxlcjo6YXR0YWNoRGVidWdnZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0
Q29udHJvbGxlcjo6dXBkYXRlRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29u
dHJvbGxlcjo6Y3JlYXRlUm9vdE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250
cm9sbGVyOjpjb2xsZWN0SXNvbGF0ZWRDb250ZXh0cyk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jp
cHRDb250cm9sbGVyOjpjbGVhbnVwU2NyaXB0T2JqZWN0c0ZvclBsdWdpbik6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpjbGVhclNjcmlwdE9iamVjdHMpOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlw
dENvbnRyb2xsZXI6OndpbmRvd1NoZWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRy
b2xsZXI6OmV4aXN0aW5nV2luZG93U2hlbGwpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1Njcmlw
dERlYnVnU2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpz
ZXRCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpyZW1v
dmVCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpoYXNC
cmVha3BvaW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVTZXJpYWxpemVyOjpjaGVja0ZvckR1cGxpY2F0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZVNlcmlhbGl6ZXI6OmR1bXBJZlRlcm1pbmFsKToK
KyAgICAgICAgKFdlYkNvcmU6OkNsb25lU2VyaWFsaXplcjo6d3JpdGUpOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtOgorICAgICAgICAoR2VuZXJhdGVJbXBs
ZW1lbnRhdGlvbik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4RmxvYXQ2
NEFycmF5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4RmxvYXQ2NEFycmF5OjpHZXRSYXdUZW1w
bGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOEZsb2F0NjRBcnJheTo6R2V0VGVtcGxhdGUpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RBY3RpdmVET01PYmplY3Qu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0QWN0aXZlRE9NT2JqZWN0OjpHZXRSYXdUZW1w
bGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RBY3RpdmVET01PYmplY3Q6OkdldFRlbXBs
YXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Q3VzdG9tTmFt
ZWRHZXR0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI6
OkdldFJhd1RlbXBsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdEN1c3RvbU5hbWVkR2V0
dGVyOjpHZXRUZW1wbGF0ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4
VGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0RXZlbnRD
b25zdHJ1Y3Rvcjo6R2V0UmF3VGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0RXZl
bnRDb25zdHJ1Y3Rvcjo6R2V0VGVtcGxhdGUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOFRlc3RFdmVudFRhcmdldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RF
dmVudFRhcmdldDo6R2V0UmF3VGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0RXZl
bnRUYXJnZXQ6OkdldFRlbXBsYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VjgvVjhUZXN0RXhjZXB0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdEV4Y2VwdGlv
bjo6R2V0UmF3VGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0RXhjZXB0aW9uOjpH
ZXRUZW1wbGF0ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdElu
dGVyZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RJbnRlcmZhY2U6OkdldFJhd1Rl
bXBsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdEludGVyZmFjZTo6R2V0VGVtcGxhdGUp
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RNZWRpYVF1ZXJ5TGlz
dExpc3RlbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdE1lZGlhUXVlcnlMaXN0TGlz
dGVuZXI6OkdldFJhd1RlbXBsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdE1lZGlhUXVl
cnlMaXN0TGlzdGVuZXI6OkdldFRlbXBsYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVjgvVjhUZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpW
OFRlc3ROYW1lZENvbnN0cnVjdG9yOjpHZXRSYXdUZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpWOFRlc3ROYW1lZENvbnN0cnVjdG9yOjpHZXRUZW1wbGF0ZSk6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhU
ZXN0Tm9kZTo6R2V0UmF3VGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0Tm9kZTo6
R2V0VGVtcGxhdGUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RP
YmouY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0T2JqOjpHZXRSYXdUZW1wbGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpWOFRlc3RPYmo6OkdldFRlbXBsYXRlKToKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZTo6R2V0UmF3VGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpHZXRUZW1wbGF0ZSk6CisgICAgICAgICogYmluZGluZ3Mv
djgvRE9NV3JhcHBlcldvcmxkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVdyYXBwZXJXb3Js
ZDo6ZGVhbGxvY2F0ZSk6CisgICAgICAgIChXZWJDb3JlOjpET01XcmFwcGVyV29ybGQ6OmVuc3Vy
ZUlzb2xhdGVkV29ybGQpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L05QVjhPYmplY3QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6ZnJlZVY4TlBPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6bnBD
cmVhdGVWOFNjcmlwdE9iamVjdCk6CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0Q29udHJv
bGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpjbGVhclNjcmlw
dE9iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6cmVzZXRJc29s
YXRlZFdvcmxkcyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjplbnN1cmVJ
c29sYXRlZFdvcmxkQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVy
OjpleGlzdGluZ1dpbmRvd1NoZWxsSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0
Q29udHJvbGxlcjo6ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQpOgorICAgICAgICAoV2ViQ29yZTo6
U2NyaXB0Q29udHJvbGxlcjo6c2V0SXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2luKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmNsZWFudXBTY3JpcHRPYmplY3RzRm9yUGx1
Z2luKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmNvbGxlY3RJc29sYXRl
ZENvbnRleHRzKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUu
Y3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4RE9NTWFwLmg6CisgICAgICAgIChXZWJDb3Jl
OjpXZWFrUmVmZXJlbmNlTWFwOjpyZW1vdmVJZlByZXNlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
V2Vha1JlZmVyZW5jZU1hcDo6dmlzaXQpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4UGVyQ29u
dGV4dERhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhQZXJDb250ZXh0RGF0YTo6ZGlzcG9z
ZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvbnBydW50aW1lLmNwcDoKKyAgICAgICAgKiBicmlk
Z2UvSWRlbnRpZmllclJlcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJZGVudGlmaWVyUmVwOjpn
ZXQpOgorICAgICAgICAqIGJyaWRnZS9OUF9qc29iamVjdC5jcHA6CisgICAgICAgIChPYmplY3RN
YXA6OmFkZCk6CisgICAgICAgIChPYmplY3RNYXA6OnJlbW92ZSk6CisgICAgICAgICogYnJpZGdl
L2puaS9qc2MvSmF2YUNsYXNzSlNDLmNwcDoKKyAgICAgICAgKEphdmFDbGFzczo6fkphdmFDbGFz
cyk6CisgICAgICAgICogYnJpZGdlL3J1bnRpbWVfcm9vdC5jcHA6CisgICAgICAgIChKU0M6OkJp
bmRpbmdzOjpSb290T2JqZWN0OjppbnZhbGlkYXRlKToKKyAgICAgICAgKiBjc3MvQ1NTQ2FudmFz
VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FudmFzVmFsdWU6OmNhbnZhc0NoYW5n
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FudmFzVmFsdWU6OmNhbnZhc1Jlc2l6ZWQpOgor
ICAgICAgICAqIGNzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Y291bnRlclRvQ1NTVmFsdWUpOgorICAgICAgICAqIGNzcy9DU1NDcm9zc2ZhZGVW
YWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NDcm9zc2ZhZGVWYWx1ZTo6Y3Jvc3NmYWRl
Q2hhbmdlZCk6CisgICAgICAgICogY3NzL0NTU0ZvbnRGYWNlU291cmNlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0ZvbnRGYWNlU291cmNlOjpnZXRGb250RGF0YSk6CisgICAgICAgICogY3Nz
L0NTU0ZvbnRTZWxlY3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250U2VsZWN0b3I6
OmFkZEZvbnRGYWNlUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250U2VsZWN0b3I6Omdl
dEZvbnREYXRhKToKKyAgICAgICAgKiBjc3MvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjphZGRDbGllbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6cmVtb3ZlQ2xpZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0ltYWdlR2VuZXJhdG9yVmFsdWU6OmdldEltYWdlKToKKyAgICAg
ICAgKiBjc3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
U2VnbWVudGVkRm9udEZhY2U6OmdldEZvbnREYXRhKToKKyAgICAgICAgKiBjc3MvQ1NTU2VsZWN0
b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU2VsZWN0b3I6OnBhcnNlUHNldWRvVHlwZSk6
CisgICAgICAgICogY3NzL0NTU1ZhbHVlUG9vbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NW
YWx1ZVBvb2w6OmNyZWF0ZUNvbG9yVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVmFsdWVQ
b29sOjpjcmVhdGVGb250RmFtaWx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVmFsdWVQ
b29sOjpjcmVhdGVGb250RmFjZVZhbHVlKToKKyAgICAgICAgKiBjc3MvUHJvcGVydHlTZXRDU1NT
dHlsZURlY2xhcmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlByb3BlcnR5U2V0Q1NTU3R5
bGVEZWNsYXJhdGlvbjo6Y2xvbmVBbmRDYWNoZUZvckNTU09NKToKKyAgICAgICAgKiBjc3MvU3R5
bGVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlDb3VudGVyOjph
cHBseUluaGVyaXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Q291bnRl
cjo6YXBwbHlWYWx1ZSk6CisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y29sbGVjdEZlYXR1cmVzKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnJ1bGVTZXRGb3JTY29wZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjphcHBlbmRBdXRob3JTdHlsZXNoZWV0cyk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJlc29sdmVyOjpzd2VlcE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KToK
KyAgICAgICAgKiBjc3MvU3R5bGVTaGVldENvbnRlbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlU2hlZXRDb250ZW50czo6cGFyc2VyQWRkTmFtZXNwYWNlKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlU2hlZXRDb250ZW50czo6ZGV0ZXJtaW5lTmFtZXNwYWNlKToKKyAgICAgICAgKiBk
b20vQ2hlY2tlZFJhZGlvQnV0dG9ucy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaGVja2VkUmFk
aW9CdXR0b25zOjphZGRCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6Q2hlY2tlZFJhZGlvQnV0
dG9uczo6cmVtb3ZlQnV0dG9uKToKKyAgICAgICAgKiBkb20vQ2hpbGRMaXN0TXV0YXRpb25TY29w
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlv
bkFjY3VtdWxhdGlvblJvdXRlcjo6Y2hpbGRBZGRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDaGls
ZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlcjo6d2lsbFJlbW92
ZUNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0
aW9uQWNjdW11bGF0aW9uUm91dGVyOjppbmNyZW1lbnRTY29waW5nTGV2ZWwpOgorICAgICAgICAo
V2ViQ29yZTo6Q2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0
ZXI6OmRlY3JlbWVudFNjb3BpbmdMZXZlbCk6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpwYWdlR3JvdXBVc2VyU2hlZXRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp3aW5kb3dOYW1lZEl0ZW1zKToKKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50Ojpkb2N1bWVudE5hbWVkSXRlbXMpOgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnQ6OmdldENTU0NhbnZhc0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6
OmNhY2hlZEltbXV0YWJsZUF0dHJpYnV0ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnQ6OmdldExvY2FsaXplcik6CisgICAgICAgICogZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Om1hcmtl
ckNvbnRhaW5pbmdQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRy
b2xsZXI6OnJlbmRlcmVkUmVjdHNGb3JNYXJrZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50TWFya2VyQ29udHJvbGxlcjo6cmVtb3ZlTWFya2Vycyk6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlcGFpbnRNYXJrZXJzKToKKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6aW52YWxpZGF0ZVJlbmRlcmVkUmVjdHNGb3JN
YXJrZXJzSW5SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyQ29udHJvbGxl
cjo6c2hvd01hcmtlcnMpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudE9yZGVyZWRNYXAuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRPcmRlcmVkTWFwOjpyZW1vdmUpOgorICAgICAgICAq
IGRvbS9FbGVtZW50QXR0cmlidXRlRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjplbnN1cmVB
dHRyTGlzdEZvckVsZW1lbnQpOgorICAgICAgICAqIGRvbS9FdmVudERpc3BhdGNoZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RXZlbnRSZWxhdGVkVGFyZ2V0QWRqdXN0ZXI6OmZpbmRSZWxhdGVk
VGFyZ2V0KToKKyAgICAgICAgKiBkb20vSWRUYXJnZXRPYnNlcnZlclJlZ2lzdHJ5LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OklkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeTo6YWRkT2JzZXJ2ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6SWRUYXJnZXRPYnNlcnZlclJlZ2lzdHJ5OjpyZW1vdmVPYnNlcnZl
cik6CisgICAgICAgICogZG9tL011dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3VwLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Ok11dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3VwOjppc09sZFZhbHVl
UmVxdWVzdGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok11dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdy
b3VwOjplbnF1ZXVlTXV0YXRpb25SZWNvcmQpOgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Ok5vZGU6OmR1bXBTdGF0aXN0aWNzKToKKyAgICAgICAgKFdlYkNvcmU6
Ok5vZGU6OmNsZWFyUmFyZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZUxpc3RzTm9kZURh
dGE6OmludmFsaWRhdGVDYWNoZXMpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Y29sbGVjdE1h
dGNoaW5nT2JzZXJ2ZXJzRm9yTXV0YXRpb24pOgorICAgICAgICAqIGRvbS9Ob2RlUmFyZURhdGEu
aDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVMaXN0c05vZGVEYXRhOjphZGRDYWNoZVdpdGhBdG9t
aWNOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVMaXN0c05vZGVEYXRhOjphZGRDYWNoZVdp
dGhOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVMaXN0c05vZGVEYXRhOjphZGRDYWNoZVdp
dGhRdWFsaWZpZWROYW1lKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVMaXN0c05vZGVEYXRhOjph
ZG9wdFRyZWVTY29wZSk6CisgICAgICAgICogZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246OmNoZWNrU3R5bGVTaGVl
dCk6CisgICAgICAgICogZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6Y2FuU3VzcGVuZEFjdGl2ZURPTU9iamVj
dHMpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6c3VzcGVuZEFj
dGl2ZURPTU9iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4
dDo6cmVzdW1lQWN0aXZlRE9NT2JqZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFeGVj
dXRpb25Db250ZXh0OjpzdG9wQWN0aXZlRE9NT2JqZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JpcHRFeGVjdXRpb25Db250ZXh0OjphZGp1c3RNaW5pbXVtVGltZXJJbnRlcnZhbCk6CisgICAg
ICAgICogZG9tL1NlbGVjdG9yUXVlcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JR
dWVyeUNhY2hlOjphZGQpOgorICAgICAgICAqIGRvbS9TcGFjZVNwbGl0U3RyaW5nLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNwYWNlU3BsaXRTdHJpbmdEYXRhOjpjcmVhdGUpOgorICAgICAgICAq
IGRvbS9TdHlsZWRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlZEVsZW1lbnQ6
OnVwZGF0ZUF0dHJpYnV0ZVN0eWxlKToKKyAgICAgICAgKiBlZGl0aW5nL21hYy9BbHRlcm5hdGl2
ZVRleHRVSUNvbnRyb2xsZXIubW06CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRV
SUNvbnRyb2xsZXI6OkFsZXJuYXRpdmVUZXh0Q29udGV4dENvbnRyb2xsZXI6OmFsdGVybmF0aXZl
c0ZvckNvbnRleHQpOgorICAgICAgICAqIGh0bWwvRm9ybUNvbnRyb2xsZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U2F2ZWRGb3JtU3RhdGU6OnNlcmlhbGl6ZVRvKToKKyAgICAgICAgKFdlYkNv
cmU6OlNhdmVkRm9ybVN0YXRlOjphcHBlbmRDb250cm9sU3RhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U2F2ZWRGb3JtU3RhdGU6OnRha2VDb250cm9sU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
U2F2ZWRGb3JtU3RhdGU6OmdldFJlZmVyZW5jZWRGaWxlUGF0aHMpOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9ybUtleUdlbmVyYXRvcjo6Zm9ybUtleSk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtQ29u
dHJvbGxlcjo6Y3JlYXRlU2F2ZWRGb3JtU3RhdGVNYXApOgorICAgICAgICAoV2ViQ29yZTo6Rm9y
bUNvbnRyb2xsZXI6OmZvcm1FbGVtZW50c1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1D
b250cm9sbGVyOjp0YWtlU3RhdGVGb3JGb3JtRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpG
b3JtQ29udHJvbGxlcjo6Z2V0UmVmZXJlbmNlZEZpbGVQYXRocyk6CisgICAgICAgICogaHRtbC9I
VE1MQ29sbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbkNhY2hl
QmFzZTo6YXBwZW5kKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRnJhbWVidWZmZXI6OmdldEF0dGFjaG1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6cmVtb3ZlQXR0YWNobWVudEZyb21C
b3VuZEZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRnJhbWVidWZmZXI6OmNo
ZWNrU3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRnJhbWVidWZmZXI6OmRlbGV0ZU9i
amVjdEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6aW5pdGlhbGl6
ZUF0dGFjaG1lbnRzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rv
ci5weToKKyAgICAgICAgKiBpbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkRPTVBhdGNoU3VwcG9ydDo6ZGlmZik6CisgICAgICAgIChXZWJDb3JlOjpET01Q
YXRjaFN1cHBvcnQ6OmlubmVyUGF0Y2hDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpET01Q
YXRjaFN1cHBvcnQ6OnJlbW92ZUNoaWxkQW5kTW92ZVRvTmV3KToKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVk
U2NyaXB0TWFuYWdlcjo6aW5qZWN0ZWRTY3JpcHRGb3JJZCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bmplY3RlZFNjcmlwdE1hbmFnZXI6OmluamVjdGVkU2NyaXB0SWRGb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjpkaXNjYXJkSW5qZWN0ZWRTY3JpcHRzRm9yKToK
KyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0TWFuYWdlcjo6cmVsZWFzZU9iamVjdEdy
b3VwKToKKyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0TWFuYWdlcjo6aW5qZWN0ZWRT
Y3JpcHRGb3IpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTZWxlY3RvclByb2ZpbGU6OmNvbW1pdFNlbGVjdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNlbGVjdG9yUHJvZmlsZTo6Y29tbWl0U2VsZWN0b3JUaW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNlbGVjdG9yUHJvZmlsZTo6dG9JbnNwZWN0b3JPYmplY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6VXBkYXRlUmVnaW9uTGF5b3V0VGFzazo6b25UaW1lcik6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6Zm9yY2VQc2V1ZG9TdGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6YXNJbnNwZWN0b3JTdHlsZVNoZWV0KToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50Ojphc3NlcnRTdHlsZVNoZWV0Rm9ySWQpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OmRpZFJlbW92ZURPTU5vZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OmRpZE1vZGlmeURPTUF0dHIpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OnJlc2V0UHNldWRvU3RhdGVzKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckNvbnNvbGVBZ2VudDo6c3RvcFRpbWluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmNvdW50KToKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9N
QWdlbnQ6Om5vZGVGb3JJZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6
cGVyZm9ybVNlYXJjaCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6Z2V0
U2VhcmNoUmVzdWx0cyk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTURlYnVnZ2Vy
QWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6
d2lsbFNlbmRYTUxIdHRwUmVxdWVzdCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRP
TVN0b3JhZ2VBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01TdG9yYWdl
QWdlbnQ6OmNsZWFyRnJvbnRlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NU3Rv
cmFnZUFnZW50OjplbmFibGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NU3RvcmFn
ZUFnZW50OjpzdG9yYWdlSWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NU3RvcmFn
ZUFnZW50OjpnZXRET01TdG9yYWdlUmVzb3VyY2VGb3JJZCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmRpZFVzZURPTVN0b3JhZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjptZW1vcnlCeXRlc1VzZWRCeVN0b3JhZ2VD
YWNoZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6ZW5hYmxlKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmRhdGFiYXNlSWQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6ZmluZEJ5RmlsZU5hbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6ZGF0YWJhc2VGb3JJZCk6Cisg
ICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0QnJlYWtwb2ludEJ5VXJsKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnJlbW92ZUJyZWFrcG9pbnQp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6cmVzb2x2ZUJyZWFr
cG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2VhcmNo
SW5Db250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6Omdl
dFNjcmlwdFNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpkaWRQYXJzZVNvdXJjZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckluZGV4ZWRE
QkFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JNZW1vcnlBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNhY2hlZFJl
c291cmNlc0ZvckZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6
ZGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
clBhZ2VBZ2VudDo6ZnJhbWVEZXRhY2hlZCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
clByb2ZpbGVyQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUHJvZmlsZXJB
Z2VudDo6Z2V0UHJvZmlsZUhlYWRlcnMpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JQcm9maWxlckFnZW50OjpnZXRQcm9maWxlKToKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpi
dWlsZE9iamVjdEZvckhlYWRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVzb3Vy
Y2VBZ2VudDo6d2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJl
c291cmNlQWdlbnQ6OmRvY3VtZW50VGhyZWFkYWJsZUxvYWRlclN0YXJ0ZWRMb2FkaW5nRm9yQ2xp
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlc291cmNlQWdlbnQ6OndpbGxMb2Fk
WEhSKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlc291cmNlQWdlbnQ6OnJlcGxheVhI
Uik6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvclN0YXRlOjpnZXRCb29sZWFuKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvclN0YXRlOjpnZXRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3Rh
dGU6OmdldExvbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3RhdGU6OmdldERvdWJs
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdGF0ZTo6Z2V0T2JqZWN0KToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JTdHlsZTo6c3R5bGVXaXRoUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JTdHlsZVNoZWV0OjppbnNwZWN0b3JTdHlsZUZvcklkKToKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ck9iamVjdEJhc2U6OmdldCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPYmplY3RCYXNl
Ojp3cml0ZUpTT04pOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JXb3JrZXJBZ2VudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JXb3JrZXJBZ2VudDo6d29ya2VyQ29udGV4
dFRlcm1pbmF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yV29ya2VyQWdlbnQ6OmNy
ZWF0ZVdvcmtlckZyb250ZW5kQ2hhbm5lbHNGb3JFeGlzdGluZ1dvcmtlcnMpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yV29ya2VyQWdlbnQ6OmRlc3Ryb3lXb3JrZXJGcm9udGVuZENoYW5u
ZWxzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsOjpjb3VudE9iamVj
dFNpemUpOgorICAgICAgICAqIGluc3BlY3Rvci9NZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsLmg6
CisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsOjp0b3RhbFNpemUp
OgorICAgICAgICAoV2ViQ29yZTo6TWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbDo6cmVwb3J0ZWRT
aXplRm9yQWxsVHlwZXMpOgorICAgICAgICAqIGluc3BlY3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0
YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrUmVzb3VyY2VzRGF0YTo6c2V0WEhSUmVw
bGF5RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrUmVzb3VyY2VzRGF0YTo6cmVtb3Zl
Q2FjaGVkUmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1Jlc291cmNlc0RhdGE6
OmNsZWFyKToKKyAgICAgICAgKiBsb2FkZXIvQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmlzU2ltcGxlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OmNyZWF0ZUFjY2Vzc0NvbnRyb2xQcmVmbGlnaHRSZXF1ZXN0KToKKyAg
ICAgICAgKiBsb2FkZXIvQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlSXRlbTo6YWxsb3dz
Q3Jvc3NPcmlnaW5IZWFkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNyb3NzT3JpZ2luUHJlZmxp
Z2h0UmVzdWx0Q2FjaGU6OmNhblNraXBQcmVmbGlnaHQpOgorICAgICAgICAqIGxvYWRlci9Eb2N1
bWVudExvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6Z2V0U3Vi
cmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyOjpzdWJzdGl0dXRl
UmVzb3VyY2VEZWxpdmVyeVRpbWVyRmlyZWQpOgorICAgICAgICAqIGxvYWRlci9NYWluUmVzb3Vy
Y2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWFpblJlc291cmNlTG9hZGVyOjpkaWRS
ZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzZXJ2ZVBlbmRp
bmdSZXF1ZXN0cyk6CisgICAgICAgICogbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZTo6cmVtb3ZlUmVzb3VyY2Up
OgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZTo6Y2xlYXJTdG9yYWdlSUQpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZTo6ZHVtcCk6CisgICAgICAgICogbG9h
ZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVHcm91cC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmRpZEZpbmlzaExvYWRpbmdNYW5pZmVzdCk6CisgICAg
ICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OnN0YXJ0TG9hZGluZ0VudHJ5KToK
KyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6YWRkRW50cnkpOgorICAg
ICAgICAqIGxvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlSG9zdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlSG9zdDo6ZmlsbFJlc291cmNlTGlzdCk6CisgICAg
ICAgICogbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OmVzdGltYXRlZFNpemVJblN0
b3JhZ2UpOgorICAgICAgICAqIGxvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFn
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZmluZE9y
Q3JlYXRlQ2FjaGVHcm91cCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3Rv
cmFnZTo6Y2FjaGVHcm91cEZvclVSTCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNh
Y2hlU3RvcmFnZTo6ZmFsbGJhY2tDYWNoZUdyb3VwRm9yVVJMKToKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBs
aWNhdGlvbkNhY2hlU3RvcmFnZTo6ZW1wdHkpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRp
b25DYWNoZVN0b3JhZ2U6OnN0b3JlQ29weU9mQ2FjaGUpOgorICAgICAgICAqIGxvYWRlci9hcmNo
aXZlL0FyY2hpdmVGYWN0b3J5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFyY2hpdmVGYWN0b3J5
OjpyZWdpc3Rlcktub3duQXJjaGl2ZU1JTUVUeXBlcyk6CisgICAgICAgICogbG9hZGVyL2NhY2hl
L0NhY2hlZFJhd1Jlc291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJhd1Jlc291
cmNlOjpjYW5SZXVzZSk6CisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlOjpzd2l0Y2hDbGllbnRzVG9SZXZh
bGlkYXRlZFJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlOjp1cGRh
dGVSZXNwb25zZUFmdGVyUmV2YWxpZGF0aW9uKToKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2Fj
aGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291
cmNlQ2xpZW50V2Fsa2VyOjpDYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlcik6CisgICAgICAgICog
bG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNhY2hlZFJlc291cmNlTG9hZGVyOjp+Q2FjaGVkUmVzb3VyY2VMb2FkZXIpOgorICAgICAgICAo
V2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RSZXNvdXJjZSk6CisgICAgICAg
IChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZUxvYWRlcjo6c2V0QXV0b0xvYWRJbWFnZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlbW92ZUNhY2hlZFJlc291cmNl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlTG9hZGVyOjpnYXJiYWdlQ29sbGVj
dERvY3VtZW50UmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlTG9h
ZGVyOjpyZXBvcnRNZW1vcnlVc2FnZSk6CisgICAgICAgICogbG9hZGVyL2NhY2hlL01lbW9yeUNh
Y2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lbW9yeUNhY2hlOjpyZW1vdmVSZXNvdXJjZXNX
aXRoT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lbW9yeUNhY2hlOjpnZXRPcmlnaW5zV2l0
aENhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lbW9yeUNhY2hlOjpnZXRTdGF0aXN0aWNzKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lbW9yeUNhY2hlOjpyZXBvcnRNZW1vcnlVc2FnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpNZW1vcnlDYWNoZTo6c2V0RGlzYWJsZWQpOgorICAgICAgICAqIGxvYWRl
ci9pY29uL0ljb25EYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJY29uRGF0YWJhc2U6
OnJlbW92ZUFsbEljb25zKToKKyAgICAgICAgKFdlYkNvcmU6Okljb25EYXRhYmFzZTo6aWNvblJl
Y29yZENvdW50V2l0aERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SWNvbkRhdGFiYXNlOjpwZXJm
b3JtUGVuZGluZ1JldGFpbkFuZFJlbGVhc2VPcGVyYXRpb25zKToKKyAgICAgICAgKiBwYWdlL0RP
TVdpbmRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01XaW5kb3c6OmRpc3BhdGNoQWxsUGVu
ZGluZ0JlZm9yZVVubG9hZEV2ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpET01XaW5kb3c6OmRp
c3BhdGNoQWxsUGVuZGluZ1VubG9hZEV2ZW50cyk6CisgICAgICAgICogcGFnZS9FdmVudEhhbmRs
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpoYW5kbGVUb3VjaEV2ZW50
KToKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpp
bmplY3RVc2VyU2NyaXB0cyk6CisgICAgICAgICogcGFnZS9QYWdlR3JvdXAuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UGFnZUdyb3VwOjpwYWdlR3JvdXApOgorICAgICAgICAoV2ViQ29yZTo6UGFn
ZUdyb3VwOjpjbG9zZUxvY2FsU3RvcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlR3JvdXA6
OmNsZWFyTG9jYWxTdG9yYWdlRm9yQWxsT3JpZ2lucyk6CisgICAgICAgIChXZWJDb3JlOjpQYWdl
R3JvdXA6OmNsZWFyTG9jYWxTdG9yYWdlRm9yT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OlBh
Z2VHcm91cDo6c3luY0xvY2FsU3RvcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlR3JvdXA6
OmFkZFVzZXJTY3JpcHRUb1dvcmxkKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VHcm91cDo6YWRk
VXNlclN0eWxlU2hlZXRUb1dvcmxkKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VHcm91cDo6cmVt
b3ZlVXNlclNjcmlwdEZyb21Xb3JsZCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlR3JvdXA6OnJl
bW92ZVVzZXJTdHlsZVNoZWV0RnJvbVdvcmxkKToKKyAgICAgICAgKiBwYWdlL1BhZ2VTZXJpYWxp
emVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VTZXJpYWxpemVyOjp1cmxGb3JCbGFua0Zy
YW1lKToKKyAgICAgICAgKiBwYWdlL1NlY3VyaXR5UG9saWN5LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNlY3VyaXR5UG9saWN5OjphZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeSk6CisgICAg
ICAgIChXZWJDb3JlOjpTZWN1cml0eVBvbGljeTo6cmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0
RW50cnkpOgorICAgICAgICAqIHBhZ2UvU2V0dGluZ3MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
c2V0R2VuZXJpY0ZvbnRGYW1pbHlNYXApOgorICAgICAgICAoV2ViQ29yZTo6Z2V0R2VuZXJpY0Zv
bnRGYW1pbHlGb3JTY3JpcHQpOgorICAgICAgICAqIHBhZ2UvU3BlZWNoSW5wdXQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U3BlZWNoSW5wdXQ6OnJlZ2lzdGVyTGlzdGVuZXIpOgorICAgICAgICAq
IHBhZ2UvVG91Y2hEaXNhbWJpZ3VhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmaW5kR29v
ZFRvdWNoVGFyZ2V0cyk6CisgICAgICAgICogcGFnZS9XaW5kb3dGZWF0dXJlcy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpXaW5kb3dGZWF0dXJlczo6Ym9vbEZlYXR1cmUpOgorICAgICAgICAoV2Vi
Q29yZTo6V2luZG93RmVhdHVyZXM6OmZsb2F0RmVhdHVyZSk6CisgICAgICAgICogcGFnZS9hbmlt
YXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBbmltYXRp
b25Db250cm9sbGVyUHJpdmF0ZTo6dXBkYXRlQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3Jl
OjpBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6c3VzcGVuZEFuaW1hdGlvbnNGb3JEb2N1bWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6cmVzdW1l
QW5pbWF0aW9uc0ZvckRvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkNvbnRy
b2xsZXJQcml2YXRlOjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMpOgorICAgICAgICAqIHBhZ2Uv
YW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb21w
b3NpdGVBbmltYXRpb246OmNsZWFyUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9z
aXRlQW5pbWF0aW9uOjp1cGRhdGVUcmFuc2l0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpDb21w
b3NpdGVBbmltYXRpb246OnVwZGF0ZUtleWZyYW1lQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJD
b3JlOjpDb21wb3NpdGVBbmltYXRpb246OmFuaW1hdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29t
cG9zaXRlQW5pbWF0aW9uOjpnZXRBbmltYXRlZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bXBvc2l0ZUFuaW1hdGlvbjo6c2V0QW5pbWF0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBv
c2l0ZUFuaW1hdGlvbjo6dGltZVRvTmV4dFNlcnZpY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29t
cG9zaXRlQW5pbWF0aW9uOjpnZXRBbmltYXRpb25Gb3JQcm9wZXJ0eSk6CisgICAgICAgIChXZWJD
b3JlOjpDb21wb3NpdGVBbmltYXRpb246OnN1c3BlbmRBbmltYXRpb25zKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlvbjo6cmVzdW1lQW5pbWF0aW9ucyk6CisgICAgICAgIChX
ZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb246Om92ZXJyaWRlSW1wbGljaXRBbmltYXRpb25zKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlvbjo6cmVzdW1lT3ZlcnJpZGRlbklt
cGxpY2l0QW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb246
OmlzQW5pbWF0aW5nUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0
aW9uOjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMpOgorICAgICAgICAqIHBsYXRmb3JtL0xhbmd1
YWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omxhbmd1YWdlRGlkQ2hhbmdlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRp
by9IUlRGRWxldmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldENvbmNhdGVuYXRlZElt
cHVsc2VSZXNwb25zZXNGb3JTdWJqZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ibGFja2JlcnJ5
L0Nvb2tpZU1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llTWFuYWdlcjo6Z2Vu
ZXJhdGVIdG1sRnJhZ21lbnRGb3JDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZU1h
bmFnZXI6OnJlbW92ZUFsbENvb2tpZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2JsYWNrYmVycnkv
Q29va2llTWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZU1hcDo6cmVtb3ZlT2xkZXN0
Q29va2llKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZU1hcDo6Z2V0QWxsQ2hpbGRDb29raWVz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9jZi9CaW5hcnlQcm9wZXJ0eUxpc3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QmluYXJ5UHJvcGVydHlMaXN0UGxhbjo6d3JpdGVJbnRlZ2VyQXJyYXkpOgor
ICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViSFRUUExvYWRJbmZvLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6YWRkSGVhZGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1
bS9zdXBwb3J0L1dlYlVSTFJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxSZXF1
ZXN0Ojp2aXNpdEhUVFBIZWFkZXJGaWVsZHMpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVt
L3N1cHBvcnQvV2ViVVJMUmVzcG9uc2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxSZXNw
b25zZTo6YWRkSFRUUEhlYWRlckZpZWxkKToKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMUmVzcG9u
c2U6OnZpc2l0SFRUUEhlYWRlckZpZWxkcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
RGlzcGxheVJlZnJlc2hNb25pdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlSZWZy
ZXNoTW9uaXRvck1hbmFnZXI6OmVuc3VyZU1vbml0b3JGb3JDbGllbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheVJlZnJlc2hNb25pdG9yTWFuYWdlcjo6dW5yZWdpc3RlckNsaWVudCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpGb250Q2FjaGU6OmdldFZlcnRpY2FsRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250
Q2FjaGU6OmdldENhY2hlZEZvbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6
cmVsZWFzZUZvbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6cHVyZ2VJbmFj
dGl2ZUZvbnREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2VUcmVl
Tm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaFBhZ2VUcmVlTm9kZTo6dHJlZUdseXBo
UGFnZUNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoUGFnZVRyZWVOb2RlOjpwYWdlQ291
bnQpOgorICAgICAgICAoV2ViQ29yZTo6R2x5cGhQYWdlVHJlZU5vZGU6OnBydW5lVHJlZUN1c3Rv
bUZvbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoUGFnZVRyZWVOb2RlOjpwcnVuZVRy
ZWVGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaFBhZ2VUcmVlTm9kZTo6cHJ1bmVD
dXN0b21Gb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaFBhZ2VUcmVlTm9kZTo6cHJ1
bmVGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaFBhZ2VUcmVlTm9kZTo6c2hvd1N1
YnRyZWUpOgorICAgICAgICAoc2hvd0dseXBoUGFnZVRyZWVzKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUaWxl
ZEJhY2tpbmdTdG9yZTo6dXBkYXRlVGlsZUJ1ZmZlcnMpOgorICAgICAgICAoV2ViQ29yZTo6VGls
ZWRCYWNraW5nU3RvcmU6OnJlc2l6ZUVkZ2VUaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpUaWxl
ZEJhY2tpbmdTdG9yZTo6c2V0S2VlcFJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2F2Zm91bmRhdGlvbi9jZi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25DRi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpBVkZXcmFwcGVyOjphdmZXcmFwcGVyRm9yQ2FsbGJhY2tDb250ZXh0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyVGlsZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlcjo6bGF5ZXJWaXNpYmlsaXR5Q2hhbmdlZCk6
CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyOjp1cGxvYWRUZXh0dXJlc0lmTmVlZGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXI6OmFkZFRpbGVKb2IpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJUaWxlcjo6ZGVsZXRlVGV4dHVyZXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJUaWxlcjo6cHJ1bmVUZXh0dXJlcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyOjpi
aW5kQ29udGVudHNUZXh0dXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2Jl
cnJ5L1RleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkOjp0ZXh0dXJlRm9yVGlsZWRDb250ZW50cyk6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZDo6dGV4dHVy
ZUZvckNvbG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVy
Q0EuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjptb3ZlT3JDb3B5QW5p
bWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnBhdXNlQW5pbWF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6bGF5ZXJEaWREaXNwbGF5
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlR2VvbWV0cnkpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjp1cGRhdGVUcmFuc2Zvcm0pOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjp1cGRhdGVDaGlsZHJlblRyYW5zZm9ybSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZU1hc2tzVG9Cb3VuZHMp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjp1cGRhdGVDb250ZW50c1Zpc2li
aWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjp1cGRhdGVDb250ZW50
c09wYXF1ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUJhY2tm
YWNlVmlzaWJpbGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnVwZGF0
ZUZpbHRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjplbnN1cmVTdHJ1
Y3R1cmFsTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjp1cGRhdGVM
YXllckRyYXdzQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnVw
ZGF0ZUNvbnRlbnRzSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjp1
cGRhdGVDb250ZW50c1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjp1
cGRhdGVNYXNrTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjp1cGRh
dGVMYXllckFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjpz
ZXRBbmltYXRpb25PbkxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6
cmVtb3ZlQ0FBbmltYXRpb25Gcm9tTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NM
YXllckNBOjpwYXVzZUNBQW5pbWF0aW9uT25MYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0xheWVyQ0E6OnN1c3BlbmRBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXJDQTo6cmVzdW1lQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0xheWVyQ0E6OmZpbmRPck1ha2VDbG9uZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xh
eWVyQ0E6OnNldE9wYWNpdHlJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xh
eWVyQ0E6OnVwZGF0ZU9wYWNpdHlPbkxheWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jYS9tYWMvVGlsZUNhY2hlLm1tOgorICAgICAgICAoV2ViQ29yZTo6VGlsZUNhY2hlOjp+VGls
ZUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVDYWNoZTo6c2V0TmVlZHNEaXNwbGF5KToK
KyAgICAgICAgKFdlYkNvcmU6OlRpbGVDYWNoZTo6c2V0U2NhbGUpOgorICAgICAgICAoV2ViQ29y
ZTo6VGlsZUNhY2hlOjpzZXRBY2NlbGVyYXRlc0RyYXdpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
VGlsZUNhY2hlOjpzZXRUaWxlRGVidWdCb3JkZXJXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpU
aWxlQ2FjaGU6OnNldFRpbGVEZWJ1Z0JvcmRlckNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlRp
bGVDYWNoZTo6cmV2YWxpZGF0ZVRpbGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
YS93aW4vUGxhdGZvcm1DQUxheWVyV2luLmNwcDoKKyAgICAgICAgKFBsYXRmb3JtQ0FMYXllcjo6
YW5pbWF0aW9uU3RhcnRlZCk6CisgICAgICAgIChyZXN1Ym1pdEFsbEFuaW1hdGlvbnMpOgorICAg
ICAgICAoUGxhdGZvcm1DQUxheWVyOjphbmltYXRpb25Gb3JLZXkpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUNocm9taXVtV2luLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Okxvb2t1cEFsdE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Zm9udENvbnRhaW5z
Q2hhcmFjdGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250VXRp
bHNDaHJvbWl1bVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXREZXJpdmVkRm9udERhdGEp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0
aWVzVG8pOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjpzZXRMYXllclRy
ZWVIb3N0KToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6aW52YWxpZGF0
ZUNvbnRlbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6c2V0
VGV4dHVyZVByaW9yaXRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVt
OjpyZXNldFVwZGF0ZVN0YXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0RhbWFnZVRyYWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NEYW1hZ2VUcmFj
a2VyOjp0cmFja0RhbWFnZUZyb21MZWZ0b3ZlclJlY3RzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RpcmVjdFJlbmRlcmVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNDRGlyZWN0UmVuZGVyZXI6OmRlY2lkZVJlbmRlclBhc3NBbGxvY2F0aW9uc0ZvckZyYW1l
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVGlsaW5n
RGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVGlsaW5nRGF0YTo6c2V0Qm91bmRz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Ojp+Q0NMYXllclRyZWVI
b3N0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6c3RhcnRSYXRlTGltaXRl
cik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnN0b3BSYXRlTGltaXRlcik6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmaW5kUmVuZGVyUGFzc0J5SWQpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVzb3VyY2VQcm92aWRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDQ1Jlc291cmNlUHJvdmlkZXI6OmluVXNlQnlDb25zdW1lcik6
CisgICAgICAgIChXZWJDb3JlOjpDQ1Jlc291cmNlUHJvdmlkZXI6OmRlbGV0ZVJlc291cmNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDUmVzb3VyY2VQcm92aWRlcjo6ZGVsZXRlT3duZWRSZXNvdXJj
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZXNvdXJjZVByb3ZpZGVyOjpyZXNvdXJjZVR5cGUp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NSZXNvdXJjZVByb3ZpZGVyOjp1cGxvYWQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NSZXNvdXJjZVByb3ZpZGVyOjpsb2NrRm9yUmVhZCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1Jlc291cmNlUHJvdmlkZXI6OnVubG9ja0ZvclJlYWQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NSZXNvdXJjZVByb3ZpZGVyOjpsb2NrRm9yV3JpdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NSZXNvdXJjZVByb3ZpZGVyOjp1bmxvY2tGb3JXcml0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1Jlc291cmNlUHJvdmlkZXI6OmRlc3Ryb3lDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpD
Q1Jlc291cmNlUHJvdmlkZXI6OmdldENoaWxkVG9QYXJlbnRNYXApOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NSZXNvdXJjZVByb3ZpZGVyOjpwcmVwYXJlU2VuZFRvUGFyZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkNDUmVzb3VyY2VQcm92aWRlcjo6cHJlcGFyZVNlbmRUb0NoaWxkKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDUmVzb3VyY2VQcm92aWRlcjo6cmVjZWl2ZUZyb21DaGlsZCk6CisgICAgICAg
IChXZWJDb3JlOjpDQ1Jlc291cmNlUHJvdmlkZXI6OnJlY2VpdmVGcm9tUGFyZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDUmVzb3VyY2VQcm92aWRlcjo6dHJhbnNmZXJSZXNvdXJjZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1Jlc291cmNlUHJvdmlkZXI6OnRyaW1NYWlsYm94RGVxdWUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0Ojp+Q3Vz
dG9tRmlsdGVyR2xvYmFsQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21GaWx0ZXJH
bG9iYWxDb250ZXh0OjpnZXRWYWxpZGF0ZWRQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkN1
c3RvbUZpbHRlckdsb2JhbENvbnRleHQ6OnJlbW92ZVZhbGlkYXRlZFByb2dyYW0pOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyUHJvZ3JhbS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDdXN0b21GaWx0ZXJQcm9ncmFtOjpub3RpZnlDbGllbnRzKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNraWEuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Z2V0Q2FjaGVkSGFyZmJ1enpGYWNlKToKKyAgICAgICAgKFdlYkNvcmU6
OnJlbGVhc2VDYWNoZWRIYXJmYnV6ekZhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2hhcmZidXp6L25nL0hhcmZCdXp6TkdGYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZC
dXp6TkdGYWNlOjpIYXJmQnV6ek5HRmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6ek5H
RmFjZTo6fkhhcmZCdXp6TkdGYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMv
U2ltcGxlRm9udERhdGFDb3JlVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250
RGF0YTo6Z2V0Q0ZTdHJpbmdBdHRyaWJ1dGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250
RGF0YTo6Y2FuUmVuZGVyQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uOjpnZXRUcmFuc2xhdGVkU2hh
ZGVyU291cmNlQU5HTEUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFw
aGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6Y29tcGlsZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0U2hhZGVyaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OmdldFNoYWRlckluZm9Mb2cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OmdldFNoYWRlclNvdXJjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZn
L0VHTERpc3BsYXlPcGVuVkcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RUdMRGlzcGxheU9wZW5W
Rzo6fkVHTERpc3BsYXlPcGVuVkcpOgorICAgICAgICAoV2ViQ29yZTo6RUdMRGlzcGxheU9wZW5W
Rzo6ZGVzdHJveVN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6RUdMRGlzcGxheU9wZW5WRzo6
Y29udGV4dEZvclN1cmZhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyR0wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMRGF0
YTo6U2hhcmVkR0xEYXRhOjpjdXJyZW50U2hhcmVkR0xEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJHTERhdGE6OlNoYXJlZEdMRGF0YTo6flNoYXJlZEdMRGF0YSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2Vy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpnZXRT
aGFkZXJQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyOjpnZXRTaGFkZXJGb3JGaWx0ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bmNlL0ZvbnRQbGF0Zm9ybURhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rml4ZWRTaXplRm9u
dERhdGE6OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL0RhdGFPYmplY3RHdGsuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RGF0YU9iamVjdEd0azo6Zm9yQ2xpcGJvYXJkKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ndGsvR3RrRHJhZ0FuZERyb3BIZWxwZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6R3RrRHJhZ0FuZERyb3BIZWxwZXI6OmhhbmRsZUdldERyYWdEYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6Okd0a0RyYWdBbmREcm9wSGVscGVyOjpoYW5kbGVEcmFnTGVhdmUpOgorICAgICAg
ICAoV2ViQ29yZTo6R3RrRHJhZ0FuZERyb3BIZWxwZXI6OmhhbmRsZURyYWdNb3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6R3RrRHJhZ0FuZERyb3BIZWxwZXI6OmhhbmRsZURyYWdEYXRhUmVjZWl2
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3RrRHJhZ0FuZERyb3BIZWxwZXI6OmhhbmRsZURyYWdE
cm9wKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGszLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Omd0a1N0eWxlQ2hhbmdlZENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6
OmdldFN0eWxlQ29udGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1Njcm9sbGJhclRoZW1l
TWFjLm1tOgorICAgICAgICAoK1tXZWJTY3JvbGxiYXJQcmVmc09ic2VydmVyIGFwcGVhcmFuY2VQ
cmVmc0NoYW5nZWQ6XSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFsU3Rv
cmFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcmVkZW50aWFsU3RvcmFnZTo6c2V0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNyZWRlbnRpYWxTdG9yYWdlOjpnZXQpOgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvSFRUUEhlYWRlck1hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVFRQSGVh
ZGVyTWFwOjpjb3B5RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpIVFRQSGVhZGVyTWFwOjpnZXQp
OgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvTUlNRUhlYWRlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpNSU1FSGVhZGVyOjpwYXJzZUhlYWRlcik6CisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9SZXNvdXJjZUhhbmRsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRs
ZTo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJh
c2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6YWRkSFRUUEhl
YWRlckZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OmFkZEhU
VFBIZWFkZXJGaWVsZHMpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9S
ZXNvdXJjZVJlcXVlc3RCbGFja0JlcnJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdDo6dGFyZ2V0VHlwZUZyb21NaW1lVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3Q6OmluaXRpYWxpemVQbGF0Zm9ybVJlcXVlc3QpOgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRk5ldC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjptYWtlRmluYWxSZXF1ZXN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291
cmNlUmVxdWVzdENGTmV0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldEhlYWRlckZpZWxkcyk6
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OmluaXRpYWxpemVI
YW5kbGUpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlUmVxdWVzdE1h
Yy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdDo6ZG9VcGRhdGVQbGF0Zm9y
bVJlcXVlc3QpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvcXQvUmVzb3VyY2VSZXF1ZXN0
UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Ojp0b05ldHdvcmtSZXF1
ZXN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3Vw
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNlbmRSZXF1ZXN0Q2FsbGJhY2spOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnNldENsaWVudENlcnRpZmljYXRlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0U291cC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q6OnVwZGF0ZVNvdXBNZXNzYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdDo6dG9Tb3VwTWVzc2FnZSk6CisgICAgICAgICogcGxh
dGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVzcG9uc2VTb3VwLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlc291cmNlUmVzcG9uc2U6OnRvU291cE1lc3NhZ2UpOgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvd2luL1Jlc291cmNlSGFuZGxlV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlc291cmNlSGFuZGxlOjpzdGFydCk6CisgICAgICAgICogcGxhdGZvcm0vcXQvUnVuTG9vcFF0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJ1bkxvb3A6OlRpbWVyQmFzZTo6dGltZXJGaXJlZCk6
CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9Mb2NhbGVUb1NjcmlwdE1hcHBpbmdEZWZhdWx0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OnNjcmlwdE5hbWVUb0NvZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6bG9jYWxlVG9TY3JpcHRDb2RlRm9yRm9udFNlbGVjdGlvbik6CisgICAgICAgICogcGxhdGZv
cm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwcnVu
ZUJsYWNrbGlzdGVkQ29kZWNzKToKKyAgICAgICAgKFdlYkNvcmU6OmR1bXBUZXh0RW5jb2RpbmdO
YW1lTWFwKToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L3RyYW5zY29kZXIvRm9udFRyYW5zY29k
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFRyYW5zY29kZXI6OmNvbnZlcnRlclR5cGUp
OgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvd2luL1RleHRDb2RlY1dpbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpMYW5ndWFnZU1hbmFnZXI6Okxhbmd1YWdlTWFuYWdlcik6CisgICAgICAgIChX
ZWJDb3JlOjpnZXRDb2RlUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNXaW46OnJl
Z2lzdGVyRXh0ZW5kZWRFbmNvZGluZ05hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2Rl
Y1dpbjo6cmVnaXN0ZXJFeHRlbmRlZENvZGVjcyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29k
ZWNXaW46OmVudW1lcmF0ZVN1cHBvcnRlZEVuY29kaW5ncyk6CisgICAgICAgICogcGxhdGZvcm0v
d2luL0NsaXBib2FyZFV0aWxpdGllc1dpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXREYXRh
TWFwSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRDbGlwYm9hcmREYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OnNldENsaXBib2FyZERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9DbGlw
Ym9hcmRXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkV2luOjp0eXBlcyk6Cisg
ICAgICAgICogcGxhdGZvcm0vd2luL0ZpbGVTeXN0ZW1XaW4uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Y2FjaGVkU3RvcmFnZURpcmVjdG9yeSk6CisgICAgICAgICogcGxhdGZvcm0vd2luL1J1bkxv
b3BXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UnVuTG9vcDo6VGltZXJCYXNlOjp0aW1lckZp
cmVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vV0NEYXRhT2JqZWN0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OldDRGF0YU9iamVjdDo6Y3JlYXRlSW5zdGFuY2UpOgorICAgICAgICAqIHBsYXRm
b3JtL3dpbmNlL01JTUVUeXBlUmVnaXN0cnlXaW5DRS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpN
SU1FVHlwZVJlZ2lzdHJ5OjpnZXRQcmVmZXJyZWRFeHRlbnNpb25Gb3JNSU1FVHlwZSk6CisgICAg
ICAgICogcGxhdGZvcm0vd3gvQ29udGV4dE1lbnVXeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
b250ZXh0TWVudTo6YXBwZW5kSXRlbSk6CisgICAgICAgICogcGx1Z2lucy9QbHVnaW5EYXRhYmFz
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6cmVmcmVzaCk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6TUlNRVR5cGVGb3JFeHRlbnNpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6OnJlbW92ZSk6CisgICAgICAgICogcGx1Z2lu
cy9QbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
bk1haW5UaHJlYWRTY2hlZHVsZXI6OnNjaGVkdWxlQ2FsbCk6CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyOjpkaXNwYXRjaENhbGxzKToKKyAgICAgICAgKiBwbHVn
aW5zL1BsdWdpblN0cmVhbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5TdHJlYW06OnN0
YXJ0U3RyZWFtKToKKyAgICAgICAgKiBwbHVnaW5zL2JsYWNrYmVycnkvUGx1Z2luRGF0YUJsYWNr
QmVycnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YTo6aW5pdFBsdWdpbnMpOgor
ICAgICAgICAqIHBsdWdpbnMvd3gvUGx1Z2luRGF0YVd4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpbkRhdGE6OmluaXRQbHVnaW5zKToKKyAgICAgICAgKiByZW5kZXJpbmcvRmxvd1RocmVh
ZENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rmxvd1RocmVhZENvbnRyb2xsZXI6
OnVucmVnaXN0ZXJOYW1lZEZsb3dDb250ZW50Tm9kZSk6CisgICAgICAgICogcmVuZGVyaW5nL0lu
bGluZUZsb3dCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6cmVxdWly
ZXNJZGVvZ3JhcGhpY0Jhc2VsaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUZsb3dCb3g6
OmFkZFRleHRCb3hWaXN1YWxPdmVyZmxvdyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJs
b2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpjbGVhckZsb2F0cyk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpzZXRMb2dpY2FsV2lkdGhGb3JUZXh0UnVuKToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyQm94TW9kZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VRdWFsaXR5
Q29udHJvbGxlcjo6aGlnaFF1YWxpdHlSZXBhaW50VGltZXJGaXJlZCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZVF1YWxpdHlDb250cm9sbGVyOjpzaG91bGRQYWludEF0TG93UXVhbGl0eSk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQ291bnRlcjo6ZGVzdHJveUNvdW50ZXJOb2Rlcyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJDb3VudGVyOjpkZXN0cm95Q291bnRlck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6dXBk
YXRlQ291bnRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQ291bnRlcjo6cmVuZGVyZXJT
dHlsZUNoYW5nZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OnNldFJlZ2lvblJhbmdlRm9yQm94
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OmdldFJlZ2lvblJhbmdlRm9y
Qm94KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OnBlcmZvcm1PdmVy
bGFwVGVzdHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlckluZm8uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJGaWx0ZXJJbmZvOjpmaWx0ZXJJbmZvRm9y
UmVuZGVyTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJGaWx0ZXJJbmZvOjpj
cmVhdGVGaWx0ZXJJbmZvRm9yUmVuZGVyTGF5ZXJJZk5lZWRlZCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlck5hbWVkRmxvd1RocmVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJO
YW1lZEZsb3dUaHJlYWQ6OmRlcGVuZHNPbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJOYW1l
ZEZsb3dUaHJlYWQ6OnB1c2hEZXBlbmRlbmNpZXMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJSZWdpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVnaW9uOjpzZXRSZW5kZXJC
b3hSZWdpb25JbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJlZ2lvbjo6c2V0UmVnaW9u
T2JqZWN0c1JlZ2lvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJlZ2lvbjo6cmVz
dG9yZVJlZ2lvbk9iamVjdHNPcmlnaW5hbFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clJlZ2lvbjo6Y29tcHV0ZUNoaWxkcmVuU3R5bGVJblJlZ2lvbik6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJs
ZVNlY3Rpb246OmNhY2hlZENvbGxhcHNlZEJvcmRlcik6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlclRoZW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnN5c3Rl
bUNvbG9yKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVmlldy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJWaWV3OjpzZWxlY3Rpb25Cb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVmlldzo6c2V0U2VsZWN0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyV2lk
Z2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcldpZGdldDo6cmVzdW1lV2lkZ2V0SGll
cmFyY2h5VXBkYXRlcyk6CisgICAgICAgICogcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Um9vdElubGluZUJveDo6YXNjZW50QW5kRGVzY2VudEZvckJveCk6
CisgICAgICAgICogcmVuZGVyaW5nL1ZlcnRpY2FsUG9zaXRpb25DYWNoZS5oOgorICAgICAgICAo
V2ViQ29yZTo6VmVydGljYWxQb3NpdGlvbkNhY2hlOjpnZXQpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9XcmFwU2hhcGVJbmZvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldyYXBTaGFwZUluZm86OmVu
c3VyZVdyYXBTaGFwZUluZm9Gb3JSZW5kZXJCbG9jayk6CisgICAgICAgICogcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0lu
bGluZVRleHQ6OmNoYXJhY3RlclN0YXJ0c05ld1RleHRDaHVuayk6CisgICAgICAgICogcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZCk6CisgICAg
ICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQ6OmFwcGx5UmVzb3VyY2UpOgor
ICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlUGF0dGVybjo6YXBwbHlSZXNvdXJjZSk6
CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXNDYWNoZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdSZXNvdXJjZXNDYWNoZTo6cmVzb3VyY2VEZXN0cm95ZWQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9zdmcvU1ZHUm9vdElubGluZUJveC5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojpzd2FwSXRlbXNJbkxheW91dEF0dHJpYnV0ZXMpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcv
U1ZHVGV4dExheW91dEF0dHJpYnV0ZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dExh
eW91dEF0dHJpYnV0ZXM6OmR1bXApOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHVGV4dExh
eW91dEF0dHJpYnV0ZXNCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRMYXlv
dXRBdHRyaWJ1dGVzQnVpbGRlcjo6YnVpbGRDaGFyYWN0ZXJEYXRhTWFwKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlcjo6ZmlsbENoYXJhY3RlckRhdGFN
YXApOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdUZXh0TGF5b3V0RW5naW5lOjpsYXlvdXRUZXh0T25MaW5lT3JQ
YXRoKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNzQnVpbGRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0TWV0cmljc0J1aWxkZXI6Om1lYXN1cmVUZXh0UmVu
ZGVyZXIpOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlN0b3JhZ2VBcmVhU3luYzo6c3luY1RpbWVyRmlyZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6U3RvcmFnZUFyZWFTeW5jOjpwZXJmb3JtSW1wb3J0KToKKyAgICAgICAgKFdlYkNvcmU6
OlN0b3JhZ2VBcmVhU3luYzo6c3luYyk6CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlTWFwLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VNYXA6OmtleSk6CisgICAgICAgIChXZWJDb3Jl
OjpTdG9yYWdlTWFwOjpzZXRJdGVtKToKKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VOYW1lc3Bh
Y2VJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpsb2Nh
bFN0b3JhZ2VOYW1lc3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU5hbWVzcGFjZUlt
cGw6OmNvcHkpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU5hbWVzcGFjZUltcGw6OmNsb3Nl
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpjbGVhckFsbE9yaWdp
bnNGb3JEZWxldGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNlSW1wbDo6
c3luYyk6CisgICAgICAgICogc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlbW92ZUFuaW1hdGlvbkVsZW1lbnRG
cm9tVGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVt
b3ZlQWxsQW5pbWF0aW9uRWxlbWVudHNGcm9tVGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0RvY3VtZW50RXh0ZW5zaW9uczo6YWRkUGVuZGluZ1Jlc291cmNlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0RvY3VtZW50RXh0ZW5zaW9uczo6aXNFbGVtZW50UGVuZGluZ1Jlc291cmNlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlbW92ZUVsZW1lbnRGcm9t
UGVuZGluZ1Jlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdEb2N1bWVudEV4dGVuc2lv
bnM6OnNldE9mRWxlbWVudHNSZWZlcmVuY2luZ1RhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlbW92ZUFsbFRhcmdldFJlZmVyZW5jZXNGb3JFbGVtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlQWxsRWxl
bWVudFJlZmVyZW5jZXNGb3JUYXJnZXQpOgorICAgICAgICAqIHN2Zy9TVkdFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnQ6On5TVkdFbGVtZW50KToKKyAgICAgICAgKiBz
dmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNN
SUxUaW1lQ29udGFpbmVyOjp1cGRhdGVBbmltYXRpb25zKToKKyAgICAgICAgKiBzdmcvZ3JhcGhp
Y3MvU1ZHSW1hZ2VDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZUNhY2hlOjp+
U1ZHSW1hZ2VDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZUNhY2hlOjpyZW1vdmVD
bGllbnRGcm9tQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2VDYWNoZTo6cmVxdWVz
dGVkU2l6ZUFuZFNjYWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZUNhY2hlOjppbWFn
ZUNvbnRlbnRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlQ2FjaGU6OnJlZHJh
dyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZUNhY2hlOjpsb29rdXBPckNyZWF0ZUJpdG1h
cEltYWdlRm9yUmVuZGVyZXIpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0Zp
bHRlckJ1aWxkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmVmZmVj
dFJlZmVyZW5jZXMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6YWRkQnVp
bHRpbkVmZmVjdHMpOgorICAgICAgICAqIHN2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVy
dHkuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkUHJvcGVydHk6On5TVkdBbmltYXRl
ZFByb3BlcnR5KToKKyAgICAgICAgKiBzdmcvcHJvcGVydGllcy9TVkdBdHRyaWJ1dGVUb1Byb3Bl
cnR5TWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0F0dHJpYnV0ZVRvUHJvcGVydHlNYXA6
OmFkZFByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQXR0cmlidXRlVG9Qcm9wZXJ0
eU1hcDo6c3luY2hyb25pemVQcm9wZXJ0aWVzKToKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlckNv
bnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dDo6aGFzUGVuZGluZ0Fj
dGl2aXR5KToKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlckV2ZW50UXVldWUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6V29ya2VyRXZlbnRRdWV1ZTo6Y2xvc2UpOgorICAgICAgICAqIHhtbC9YTUxI
dHRwUmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6c2V0UmVx
dWVzdEhlYWRlckludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0Ojpn
ZXRBbGxSZXNwb25zZUhlYWRlcnMpOgorICAgICAgICAqIHhtbC9YUGF0aEZ1bmN0aW9ucy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6Y3JlYXRlRnVuY3Rpb24pOgorICAgICAgICAqIHht
bC9YUGF0aFBhcnNlci5jcHA6CisgICAgICAgIChpc0F4aXNOYW1lKToKKyAgICAgICAgKiB4bWwv
WFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6eHNsdFBhcmFtQXJy
YXlGcm9tUGFyYW1ldGVyTWFwKToKKyAgICAgICAgKiB4bWwvWFNMVFByb2Nlc3NvclF0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlhTTFRQcm9jZXNzb3I6OnRyYW5zZm9ybVRvU3RyaW5nKToKKwog
MjAxMi0wOS0yMCAgTWlrZSBXZXN0ICA8bWt3c3RAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFN1
cHBvcnQgcGF0aHMgaW4gQ29udGVudCBTZWN1cml0eSBQb2xpY3kgZGlyZWN0aXZlcy4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
L2JsYWNrYmVycnkvQ2hhbmdlTG9nCmluZGV4IDYzYmMxODI3NjE5MzQxMzY0OTU5MDQ4OGI2NzA3
ZDQ1NjNlMDcyODIuLmJmYjhmMTg2MGQzZWIxYzcwYjY4M2YzNWUwYzNiYTdiYTYxNjg3NTQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdC9ibGFja2JlcnJ5L0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDEyLTA5LTE0
ICBDYWlvIE1hcmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gIDxjYWlvLm9saXZlaXJhQG9wZW5ib3Nz
YS5vcmc+CisKKyAgICAgICAgUmVuYW1lIGZpcnN0L3NlY29uZCB0byBrZXkvdmFsdWUgaW4gSGFz
aE1hcCBpdGVyYXRvcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTgyNzg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCisKKyAgICAg
ICAgKiBBcGkvQmFja2luZ1N0b3JlLmNwcDoKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6
QmFja2luZ1N0b3JlUHJpdmF0ZTo6c2V0QmFja2luZ1N0b3JlUmVjdCk6CisgICAgICAgIChCbGFj
a0JlcnJ5OjpXZWJLaXQ6OkJhY2tpbmdTdG9yZVByaXZhdGU6OnZpc2libGVUaWxlc1JlY3QpOgor
ICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpCYWNraW5nU3RvcmVQcml2YXRlOjpyZXNldFRp
bGVzKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6QmFja2luZ1N0b3JlUHJpdmF0ZTo6
dXBkYXRlVGlsZXMpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpCYWNraW5nU3RvcmVQ
cml2YXRlOjp1cGRhdGVUaWxlc0ZvclNjcm9sbE9yTm90UmVuZGVyZWRSZWdpb24pOgorICAgICAg
ICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpCYWNraW5nU3RvcmVQcml2YXRlOjptYXBGcm9tVHJhbnNm
b3JtZWRDb250ZW50c1RvVGlsZXMpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L05vdGlmaWNh
dGlvblByZXNlbnRlckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm90aWZpY2F0aW9uUHJl
c2VudGVySW1wbDo6Y2FuY2VsKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vdGlmaWNhdGlvblByZXNl
bnRlckltcGw6Om9uUGVybWlzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpOb3RpZmljYXRpb25Q
cmVzZW50ZXJJbXBsOjpub3RpZmljYXRpb25DbGlja2VkKToKKyAgICAgICAgKiBXZWJDb3JlU3Vw
cG9ydC9Vc2VyTWVkaWFDbGllbnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJNZWRp
YUNsaWVudEltcGw6OmNhbmNlbFVzZXJNZWRpYVJlcXVlc3QpOgorICAgICAgICAqIFdlYktpdFN1
cHBvcnQvQWJvdXREYXRhLmNwcDoKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6ZHVtcEpT
Q1R5cGVDb3VudFNldFRvVGFibGVIVE1MKToKKyAgICAgICAgKiBXZWJLaXRTdXBwb3J0L0ZyYW1l
TGF5ZXJzLmNwcDoKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6RnJhbWVMYXllcnM6OnJl
bW92ZUxheWVyQnlGcmFtZSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkZyYW1lTGF5
ZXJzOjpjb21taXRPbldlYktpdFRocmVhZCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6
OkZyYW1lTGF5ZXJzOjpjYWxjdWxhdGVSb290TGF5ZXIpOgorCiAyMDEyLTA5LTIwICBQZXRlciBX
YW5nICA8cGV0ZXIud2FuZ0B0b3JjaG1vYmlsZS5jb20uY24+CiAKICAgICAgICAgW0JsYWNrQmVy
cnldIFRvIHN1cHBvcnQgIkZyYW1lcyBWaWV3IiBvZiAiVGltZUxpbmUiIHBhbmVsICBpbiBJbnNw
ZWN0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggN2Q3MjMzYzdkNTdmOGM2MTMzNDhh
OTFjZWM3MTgzNTc3ZThhYmIyYy4uNDI2YWI2ODY0OTgxMThkODY0Y2RiZTcyNTI3ZmU0YjJjYWNm
Mjg3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAxMi0w
OS0xNCAgQ2FpbyBNYXJjZWxvIGRlIE9saXZlaXJhIEZpbGhvICA8Y2Fpby5vbGl2ZWlyYUBvcGVu
Ym9zc2Eub3JnPgorCisgICAgICAgIFJlbmFtZSBmaXJzdC9zZWNvbmQgdG8ga2V5L3ZhbHVlIGlu
IEhhc2hNYXAgaXRlcmF0b3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD04Mjc4NAorCisgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgorCisg
ICAgICAgICogc3JjL1dlYkdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyLmNwcDoK
KyAgICAgICAgKFdlYkdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyOjpyZW1vdmUp
OgorICAgICAgICAqIHNyYy9XZWJJREJNZXRhZGF0YS5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YklEQk1ldGFkYXRhOjpXZWJJREJNZXRhZGF0YSk6CisgICAgICAgICogc3JjL1dlYkludGVudC5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYkludGVudDo6ZXh0cmFzVmFsdWUpOgorICAgICAgICAq
IHRlc3RzL1dlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXJUZXN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlRFU1RfRik6CisKIDIwMTItMDktMjAgIE1pa2UgV2VzdCAgPG1rd3N0QGdvb2dsZS5j
b20+CiAKICAgICAgICAgW2Nocm9taXVtXSBBZGRpbmcgdGhlICdnb29nbGVfYXBpcycgZGlyZWN0
b3J5IHRvIC5naXRpZ25vcmUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cKaW5kZXggNDYzZWY5ODg0Yzk4MjlhNTVi
YzRjZjI1Yzk4MmMzNjU0NTdhYzgxYi4uZTEyYTI1YTZlNzA5ODc1MzlkYjIyNTMwMWEyNGJkMWFh
ODlhN2QyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDEyLTA5LTE0ICBD
YWlvIE1hcmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gIDxjYWlvLm9saXZlaXJhQG9wZW5ib3NzYS5v
cmc+CisKKyAgICAgICAgUmVuYW1lIGZpcnN0L3NlY29uZCB0byBrZXkvdmFsdWUgaW4gSGFzaE1h
cCBpdGVyYXRvcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTgyNzg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCisKKyAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmwuY3BwOgorICAgICAgICAo
RHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCk6
CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzRWZsLmNwcDoKKyAg
ICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc0VmbDo6Z2V0UGx1Z2luSW5mbyk6CisgICAgICAgICog
ZXdrL2V3a19pbnRlbnQuY3BwOgorICAgICAgICAoZXdrX2ludGVudF9leHRyYV9nZXQpOgorCiAy
MDEyLTA5LTIwICBKaW53b28gU29uZyAgPGppbndvbzcuc29uZ0BzYW1zdW5nLmNvbT4KIAogICAg
ICAgICBbRUZMXSBDaGFuZ2UgdGhlIGxvZyBtYWNybyBuYW1lcyB0byBiZSBtb3JlIGNvbnNpc3Rl
bnQgd2l0aCBFSU5BIExPRwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCmluZGV4IGMxYWZhNTNlZGM5YjUwYjUyMWY5
ZDMwZGEyN2FmYWJmODk0NGE2MmYuLmRkZmRmMmU0YTU5YmEyNTllZTc1OWIwZTI5YTU3NzczNGFk
MjM0Y2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxMi0wOS0xNCAgQ2Fp
byBNYXJjZWxvIGRlIE9saXZlaXJhIEZpbGhvICA8Y2Fpby5vbGl2ZWlyYUBvcGVuYm9zc2Eub3Jn
PgorCisgICAgICAgIFJlbmFtZSBmaXJzdC9zZWNvbmQgdG8ga2V5L3ZhbHVlIGluIEhhc2hNYXAg
aXRlcmF0b3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD04Mjc4NAorCisgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgorCisgICAgICAgICog
V2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzR3RrLmNwcDoKKyAgICAgICAgKFBsYXRm
b3JtU3RyYXRlZ2llc0d0azo6Z2V0UGx1Z2luSW5mbyk6CisgICAgICAgICogd2Via2l0L3dlYmtp
dGZhdmljb25kYXRhYmFzZS5jcHA6CisgICAgICAgICh3ZWJraXRGYXZpY29uRGF0YWJhc2VJbXBv
cnRGaW5pc2hlZCk6CisgICAgICAgICogd2Via2l0L3dlYmtpdHdlYnBsdWdpbi5jcHA6CisgICAg
ICAgICh3ZWJraXRfd2ViX3BsdWdpbl9nZXRfbWltZXR5cGVzKToKKwogMjAxMi0wOS0xOSAgRGFu
aWxvIENlc2FyIExlbWVzIGRlIFBhdWxhICA8ZGFuaWxvLmNlc2FyQGNvbGxhYm9yYS5jby51az4K
IAogICAgICAgICBbZ3RrXSBhZGQgZW5hYmxlLW1lZGlhLXN0cmVhbSB0byB3ZWJzZXR0aW5ncwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9t
YWMvQ2hhbmdlTG9nCmluZGV4IGZjZWM2YzZjYjY5NjY2NzkwOGI5NWJmYTU4ZTAzMjAyZGY4Y2My
YTQuLmM2N2I4NjJkYmVkMjU3M2Y3NWYwMTZhNTJiMDE2MGJhZGVkNDMyZTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw0NCBAQAorMjAxMi0wOS0xNCAgQ2FpbyBNYXJjZWxvIGRlIE9saXZl
aXJhIEZpbGhvICA8Y2Fpby5vbGl2ZWlyYUBvcGVuYm9zc2Eub3JnPgorCisgICAgICAgIFJlbmFt
ZSBmaXJzdC9zZWNvbmQgdG8ga2V5L3ZhbHVlIGluIEhhc2hNYXAgaXRlcmF0b3JzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Mjc4NAorCisgICAgICAg
IFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgorCisgICAgICAgICogSGlzdG9yeS9XZWJIaXN0b3J5
Lm1tOgorICAgICAgICAoLVtXZWJIaXN0b3J5UHJpdmF0ZSByZW1vdmVJdGVtRnJvbURhdGVDYWNo
ZXM6XSk6CisgICAgICAgICgtW1dlYkhpc3RvcnlQcml2YXRlIG9yZGVyZWRMYXN0VmlzaXRlZERh
eXNdKToKKyAgICAgICAgKFdlYkhpc3RvcnlXcml0ZXI6OldlYkhpc3RvcnlXcml0ZXIpOgorICAg
ICAgICAqIE1pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW06CisgICAgICAgICgrW1dlYkNvcmVTdGF0
aXN0aWNzIGphdmFTY3JpcHRQcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzXSk6CisgICAgICAgICgr
W1dlYkNvcmVTdGF0aXN0aWNzIGphdmFTY3JpcHRPYmplY3RUeXBlQ291bnRzXSk6CisgICAgICAg
ICogUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlci5tbToKKyAgICAgICAg
KFdlYktpdDo6TmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlcjo6aG9zdEZvclBsdWdpbik6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXI6OnBsdWdpbkhvc3REaWVkKToK
KyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlcjo6ZGlkQ3JlYXRlV2lu
ZG93KToKKyAgICAgICAgKiBQbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkhvc3RQcm94eS5t
bToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5Ib3N0UHJveHk6OnBsdWdpbkhvc3RE
aWVkKToKKyAgICAgICAgKiBQbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJv
eHkubW06CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6TG9j
YWxPYmplY3RNYXA6OmlkRm9yT2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVn
aW5JbnN0YW5jZVByb3h5OjpMb2NhbE9iamVjdE1hcDo6cmV0YWluKToKKyAgICAgICAgKFdlYktp
dDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpMb2NhbE9iamVjdE1hcDo6cmVsZWFzZSk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6TG9jYWxPYmpl
Y3RNYXA6OmZvcmdldCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQ
cm94eTo6ZGVzdHJveSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQ
cm94eTo6d2ViRnJhbWVEaWRGaW5pc2hMb2FkV2l0aFJlYXNvbik6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6Y2FuY2VsQ2hlY2tJZkFsbG93ZWRUb0xvYWRV
UkwpOgorICAgICAgICAqIFBsdWdpbnMvSG9zdGVkL1Byb3h5SW5zdGFuY2UubW06CisgICAgICAg
IChXZWJLaXQ6OlByb3h5SW5zdGFuY2U6Om1ldGhvZHNOYW1lZCk6CisgICAgICAgIChXZWJLaXQ6
OlByb3h5SW5zdGFuY2U6OmZpZWxkTmFtZWQpOgorICAgICAgICAqIFBsdWdpbnMvV2ViTmV0c2Nh
cGVQbHVnaW5WaWV3Lm1tOgorICAgICAgICAoLVtXZWJOZXRzY2FwZVBsdWdpblZpZXcgc3RvcFRp
bWVyc10pOgorICAgICAgICAoLVtXZWJOZXRzY2FwZVBsdWdpblZpZXcgc3RhcnRUaW1lcnNdKToK
KyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJOb3RpZmljYXRpb25DbGllbnQubW06CisgICAg
ICAgIChXZWJOb3RpZmljYXRpb25DbGllbnQ6OnNob3cpOgorICAgICAgICAoV2ViTm90aWZpY2F0
aW9uQ2xpZW50OjpjbGVhck5vdGlmaWNhdGlvbnMpOgorICAgICAgICAoV2ViTm90aWZpY2F0aW9u
Q2xpZW50Ojpub3RpZmljYXRpb25PYmplY3REZXN0cm95ZWQpOgorICAgICAgICAqIFdlYlZpZXcv
V2ViSFRNTFZpZXcubW06CisgICAgICAgIChjb21tYW5kTmFtZUZvclNlbGVjdG9yKToKKwogMjAx
Mi0wOS0xOSAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFdlYktp
dC9tYWMgcGFydCBvZiBhZGRpbmcgYSBzZXR0aW5nIGFuZCBBUEkgZm9yIGRpc2FibGluZyBzY3Jl
ZW4gZm9udCBzdWJzdGl0dXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdl
TG9nIGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKaW5kZXggNWFhNjJmMTc5MTQwMGU3Mjdj
ZjhhYjA0MGZhMDA3OWRiODI4YmUzZi4uNzBhMGY2MzEyNzA3N2M5YTIxOTExYzdhMDYxZjM2NWY3
ODYwZDlhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxMi0wOS0xNCAgQ2Fp
byBNYXJjZWxvIGRlIE9saXZlaXJhIEZpbGhvICA8Y2Fpby5vbGl2ZWlyYUBvcGVuYm9zc2Eub3Jn
PgorCisgICAgICAgIFJlbmFtZSBmaXJzdC9zZWNvbmQgdG8ga2V5L3ZhbHVlIGluIEhhc2hNYXAg
aXRlcmF0b3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD04Mjc4NAorCisgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgorCisgICAgICAgICog
QXBpL3F3ZWJwYWdlLmNwcDoKKyAgICAgICAgKGV4dHJhY3RDb250ZW50VHlwZUZyb21QbHVnaW5W
ZWN0b3IpOgorICAgICAgICAqIEFwaS9xd2VicGx1Z2luZGF0YWJhc2UuY3BwOgorICAgICAgICAo
UVdlYlBsdWdpbkluZm86Om1pbWVUeXBlcyk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGxh
dGZvcm1TdHJhdGVnaWVzUXQuY3BwOgorICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzUXQ6Omdl
dFBsdWdpbkluZm8pOgorCiAyMDEyLTA5LTIwICBDc2FiYSBPc3p0cm9nb27DoWMgIDxvc3N5QHdl
YmtpdC5vcmc+CiAKICAgICAgICAgW1F0XSBFbmFibGUgQ1NTIHJlZ2lvbnMgYnkgZGVmYXVsdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC93
aW4vQ2hhbmdlTG9nCmluZGV4IDVlN2EyZDRlMjI3NTI0OTZkYmMxMTc4MjZiNDRiYzkwYTFjNTkz
N2YuLmUzZTJkMjkxZDk0NzllZTExYzU4ZTBlOTRmZjNkYmEwMmU0NzljZDAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwyOCBAQAorMjAxMi0wOS0xNCAgQ2FpbyBNYXJjZWxvIGRlIE9saXZl
aXJhIEZpbGhvICA8Y2Fpby5vbGl2ZWlyYUBvcGVuYm9zc2Eub3JnPgorCisgICAgICAgIFJlbmFt
ZSBmaXJzdC9zZWNvbmQgdG8ga2V5L3ZhbHVlIGluIEhhc2hNYXAgaXRlcmF0b3JzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Mjc4NAorCisgICAgICAg
IFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgorCisgICAgICAgICogQ09NUHJvcGVydHlCYWcuaDoK
KyAgICAgICAgKDo6UmVhZCk6CisgICAgICAgICg6OkdldFByb3BlcnR5SW5mbyk6CisgICAgICAg
ICogV2ViQ29yZVN0YXRpc3RpY3MuY3BwOgorICAgICAgICAoV2ViQ29yZVN0YXRpc3RpY3M6Omph
dmFTY3JpcHRQcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzKToKKyAgICAgICAgKiBXZWJDb3JlU3Vw
cG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwOgorICAgICAgICAoV2ViUGxhdGZvcm1TdHJh
dGVnaWVzOjpnZXRQbHVnaW5JbmZvKToKKyAgICAgICAgKiBXZWJIaXN0b3J5LmNwcDoKKyAgICAg
ICAgKFdlYkhpc3Rvcnk6OnJlbW92ZUl0ZW1Gcm9tRGF0ZUNhY2hlcyk6CisgICAgICAgICogV2Vi
S2l0Q09NQVBJLmNwcDoKKyAgICAgICAgKGNsYXNzRmFjdG9yeSk6CisgICAgICAgICogV2ViS2l0
U3RhdGlzdGljcy5jcHA6CisgICAgICAgIChXZWJLaXRTdGF0aXN0aWNzOjpjb21DbGFzc05hbWVD
b3VudHMpOgorICAgICAgICAqIFdlYk5vdGlmaWNhdGlvbkNlbnRlci5jcHA6CisgICAgICAgIChX
ZWJOb3RpZmljYXRpb25DZW50ZXI6OnBvc3ROb3RpZmljYXRpb25JbnRlcm5hbCk6CisgICAgICAg
IChXZWJOb3RpZmljYXRpb25DZW50ZXI6OmFkZE9ic2VydmVyKToKKyAgICAgICAgKFdlYk5vdGlm
aWNhdGlvbkNlbnRlcjo6cmVtb3ZlT2JzZXJ2ZXIpOgorCiAyMDEyLTA5LTE5ICBQYXRyaWNrIEdh
bnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQub3JnPgogCiAgICAgICAgIFtXSU5dIFVzZSBCU3RyaW5n
IGluIGZhdm91ciBvZiBCU1RSIHRvIGltcHJvdmUgbWVtb3J5IG1hbmFnZW1lbnQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvd2luY2UvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC93aW5jZS9D
aGFuZ2VMb2cKaW5kZXggZDY2ZmE1OTIzODlhMmQ4YmUwNDlkMGUxYTM3YTg3NTcwN2NiMWIzNS4u
ODgyYjg1OTEzYTFkYmMyNGNlZjJjMTcyZjcxZTJhYjYzMGI4MDFjYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC93aW5jZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC93aW5jZS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxMi0wOS0xNCAgQ2FpbyBNYXJjZWxvIGRlIE9saXZl
aXJhIEZpbGhvICA8Y2Fpby5vbGl2ZWlyYUBvcGVuYm9zc2Eub3JnPgorCisgICAgICAgIFJlbmFt
ZSBmaXJzdC9zZWNvbmQgdG8ga2V5L3ZhbHVlIGluIEhhc2hNYXAgaXRlcmF0b3JzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Mjc4NAorCisgICAgICAg
IFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGxh
dGZvcm1TdHJhdGVnaWVzV2luQ0UuY3BwOgorICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzV2lu
Q0U6OmdldFBsdWdpbkluZm8pOgorCiAyMDEyLTA4LTI4ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5y
ZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCBy
MTI2OTE0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCmluZGV4IDg4YTUyYTJmYjJhYjBjZTNhNWM5OTQ1OWZmMWI0MzhlMTYw
MWVjNjguLmUzNjU2MjZmNzdjMjBlOGVjZDNiM2EyNjNhNzdlZWE3MjAzMDU0YWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxMjggQEAKKzIwMTItMDktMTQgIENhaW8gTWFyY2VsbyBkZSBPbGl2ZWly
YSBGaWxobyAgPGNhaW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KKworICAgICAgICBSZW5hbWUg
Zmlyc3Qvc2Vjb25kIHRvIGtleS92YWx1ZSBpbiBIYXNoTWFwIGl0ZXJhdG9ycworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI3ODQKKworICAgICAgICBS
ZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KKworICAgICAgICAqIFBsYXRmb3JtL0NvcmVJUEMvQXJn
dW1lbnRDb2RlcnMuaDoKKyAgICAgICAgKiBQbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uY3Bw
OgorICAgICAgICAoQ29yZUlQQzo6Q29ubmVjdGlvbjo6U3luY01lc3NhZ2VTdGF0ZTo6Z2V0T3JD
cmVhdGUpOgorICAgICAgICAoQ29yZUlQQzo6Q29ubmVjdGlvbjo6d2FpdEZvck1lc3NhZ2UpOgor
ICAgICAgICAoQ29yZUlQQzo6Q29ubmVjdGlvbjo6cHJvY2Vzc0luY29taW5nTWVzc2FnZSk6Cisg
ICAgICAgICogUGxhdGZvcm0vZ3RrL1dvcmtRdWV1ZUd0ay5jcHA6CisgICAgICAgIChXb3JrUXVl
dWU6OnJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6dW5y
ZWdpc3RlckV2ZW50U291cmNlSGFuZGxlcik6CisgICAgICAgICogUGxhdGZvcm0vbWFjL1dvcmtR
dWV1ZU1hYy5jcHA6CisgICAgICAgIChXb3JrUXVldWU6OnVucmVnaXN0ZXJNYWNoUG9ydEV2ZW50
SGFuZGxlcik6CisgICAgICAgICogU2hhcmVkL1BsdWdpbnMvTlBSZW1vdGVPYmplY3RNYXAuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpOUFJlbW90ZU9iamVjdE1hcDo6cGx1Z2luRGVzdHJveWVkKToK
KyAgICAgICAgKiBTaGFyZWQvVXNlck1lc3NhZ2VDb2RlcnMuaDoKKyAgICAgICAgKFdlYktpdDo6
VXNlck1lc3NhZ2VFbmNvZGVyOjpiYXNlRW5jb2RlKToKKyAgICAgICAgKiBTaGFyZWQvV2ViUHJl
ZmVyZW5jZXNTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OnZhbHVlRm9yS2V5KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJlZmVyZW5jZXNTdG9yZTo6Z2V0Qm9vbFZhbHVlRm9yS2V5KToKKyAg
ICAgICAgKiBTaGFyZWQvbWFjL1dlYkNvcmVBcmd1bWVudENvZGVyc01hYy5tbToKKyAgICAgICAg
KENvcmVJUEM6Ojo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvcXQvQXJndW1lbnRDb2RlcnNR
dC5jcHA6CisgICAgICAgIChDb3JlSVBDOjo6OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL3Nv
dXAvV2ViQ29yZUFyZ3VtZW50Q29kZXJzU291cC5jcHA6CisgICAgICAgIChDb3JlSVBDOjo6OmRl
Y29kZSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0
LmNwcDoKKyAgICAgICAgKF9Fd2tfQmFja19Gb3J3YXJkX0xpc3Q6On5fRXdrX0JhY2tfRm9yd2Fy
ZF9MaXN0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHA6Cisg
ICAgICAgIChfRXdrX0NvbnRleHQ6On5fRXdrX0NvbnRleHQpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvZWZsL2V3a192aWV3LmNwcDoKKyAgICAgICAgKF9ld2tfdmlld19wcml2X2xvYWRpbmdf
cmVzb3VyY2VzX2NsZWFyKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJW
aWV3LmNwcDoKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19nZXRfc3VicmVzb3VyY2VzKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHA6CisgICAgICAg
ICh3ZWJraXRXZWJWaWV3QmFzZUNvbnRhaW5lckZvcmFsbCk6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9tYWMvV0tQcmludGluZ1ZpZXcubW06CisgICAgICAgICgtW1dLUHJpbnRpbmdWaWV3IF9l
eHBlY3RlZFByZXZpZXdDYWxsYmFja0ZvclJlY3Q6XSk6CisgICAgICAgIChwYWdlRGlkRHJhd1Rv
UERGKToKKyAgICAgICAgKC1bV0tQcmludGluZ1ZpZXcgX2RyYXdQcmV2aWV3Ol0pOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbToKKyAgICAgICAgKGNvbW1hbmROYW1lRm9y
U2VsZWN0b3IpOgorICAgICAgICAoLVtXS1ZpZXcgdmFsaWRhdGVVc2VySW50ZXJmYWNlSXRlbTpd
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEJh
Y2tpbmdTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkQmFja2luZ1N0b3Jl
Ojp1cGRhdGVUaWxlKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6
OnRleHR1cmUpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZEJhY2tpbmdTdG9yZTo6cGFp
bnRUb1RleHR1cmVNYXBwZXIpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZEJhY2tpbmdT
dG9yZTo6Y29tbWl0VGlsZU9wZXJhdGlvbnMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db29yZGlu
YXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpMYXllclRyZWVDb29yZGluYXRvclByb3h5Ojp1cGRhdGVUaWxlRm9yTGF5ZXIpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlUmVuZGVyZXI6OmFkanVzdFBvc2l0aW9uRm9y
Rml4ZWRMYXllcnMpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVSZW5kZXJlcjo6c3luY0Nh
bnZhcyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZVJlbmRlcmVyOjpzZXRMYXllckNoaWxk
cmVuKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlUmVuZGVyZXI6OnNldExheWVyRmlsdGVy
cyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZVJlbmRlcmVyOjpzZXRMYXllclN0YXRlKToK
KyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlUmVuZGVyZXI6OmFzc2lnbkltYWdlVG9MYXllcik6
CisgICAgICAgICogVUlQcm9jZXNzL0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2Vy
UHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0
TWFuYWdlclByb3h5OjppbnZhbGlkYXRlUmVxdWVzdHMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9J
bnNwZWN0b3JTZXJ2ZXIvV2ViSW5zcGVjdG9yU2VydmVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViSW5zcGVjdG9yU2VydmVyOjp+V2ViSW5zcGVjdG9yU2VydmVyKToKKyAgICAgICAgKFdlYktp
dDo6V2ViSW5zcGVjdG9yU2VydmVyOjpyZWdpc3RlclBhZ2UpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9JbnNwZWN0b3JTZXJ2ZXIvV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbi5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYlNvY2tldFNlcnZlckNvbm5lY3Rpb246OnNlbmRIVFRQUmVzcG9uc2VIZWFk
ZXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvcXQvV2ViSW5zcGVjdG9y
U2VydmVyUXQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JTZXJ2ZXI6OmJ1aWxk
UGFnZUxpc3QpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Ob3RpZmljYXRpb25zL05vdGlmaWNhdGlv
blBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6Tm90
aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHk6OmludmFsaWRhdGVSZXF1ZXN0
cyk6CisgICAgICAgICogVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc1Byb3h5LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6UGx1Z2luUHJvY2Vzc1Byb3h5OjpwbHVnaW5Qcm9jZXNzQ3Jhc2hl
ZE9yRmFpbGVkVG9MYXVuY2gpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJDb250ZXh0LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6Y3JlYXRlRGljdGlvbmFyeUZyb21IYXNoTWFwKToKKyAgICAgICAg
KiBVSVByb2Nlc3MvV2ViSWNvbkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViSWNv
bkRhdGFiYXNlOjpkaWRGaW5pc2hVUkxJbXBvcnQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJJ
bnRlbnREYXRhLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViSW50ZW50RGF0YTo6ZXh0cmFzKToK
KyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Byb3h5OjpjaGVja1VSTFJlY2VpdmVkRnJvbVdlYlByb2Nlc3MpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OmFkZEJhY2tGb3J3YXJkSXRlbSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6ZnJhbWVDb3VudEluUGFnZSk6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9HZW9sb2NhdGlvbi9HZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFu
YWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6Okdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RN
YW5hZ2VyOjpjYW5jZWxSZXF1ZXN0Rm9yR2VvbG9jYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpH
ZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlcjo6ZGlkUmVjZWl2ZUdlb2xvY2F0aW9u
UGVybWlzc2lvbkRlY2lzaW9uKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0RPTS9JbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpJbmpl
Y3RlZEJ1bmRsZU5vZGVIYW5kbGU6OmdldE9yQ3JlYXRlKToKKyAgICAgICAgKiBXZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6Z2V0T3JDcmVhdGUpOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVJbnRlbnQuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZUludGVudDo6ZXh0cmFzKToKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL05vdGlmaWNhdGlvbnMvV2ViTm90aWZpY2F0aW9uTWFuYWdlci5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYk5vdGlmaWNhdGlvbk1hbmFnZXI6OnBvbGljeUZvck9yaWdp
bik6CisgICAgICAgIChXZWJLaXQ6OldlYk5vdGlmaWNhdGlvbk1hbmFnZXI6OnNob3cpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJOb3RpZmljYXRpb25NYW5hZ2VyOjpjbGVhck5vdGlmaWNhdGlvbnMp
OgorICAgICAgICAoV2ViS2l0OjpXZWJOb3RpZmljYXRpb25NYW5hZ2VyOjpyZW1vdmVOb3RpZmlj
YXRpb25Gcm9tQ29udGV4dE1hcCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNj
YXBlL05QUnVudGltZU9iamVjdE1hcC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5QUnVudGltZU9i
amVjdE1hcDo6aW52YWxpZGF0ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNj
YXBlL05ldHNjYXBlUGx1Z2luLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW46
OmRlc3Ryb3lTdHJlYW0pOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbjo6ZnJhbWVE
aWRGaW5pc2hMb2FkaW5nKToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW46OmZyYW1l
RGlkRmFpbCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpidWlsZEhUVFBIZWFkZXJzKToKKyAgICAgICAgKFdlYktpdDo6UGx1
Z2luVmlldzo6flBsdWdpblZpZXcpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29y
ZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmxheWVyQnlJRCk6CisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0
b3IuY3BwOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6YWRvcHRJbWFn
ZUJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpy
ZWxlYXNlSW1hZ2VCYWNraW5nU3RvcmUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJCYWNrRm9yd2FyZExpc3RQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkJhY2tGb3J3
YXJkTGlzdFByb3h5OjpyZW1vdmVJdGVtKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
bWFjL1dlYlBhZ2VNYWMubW06CisgICAgICAgIChXZWJLaXQ6OmNvbW1hbmROYW1lRm9yU2VsZWN0
b3JOYW1lKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJQcm9jZXNzOjp2aXNpdGVkTGlua1N0YXRlQ2hhbmdlZCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3M6OmFsbFZpc2l0ZWRMaW5rU3RhdGVDaGFuZ2VkKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzczo6Zm9jdXNlZFdlYlBhZ2UpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzOjpjcmVhdGVXZWJQYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6
d2ViUGFnZUdyb3VwKToKKyAgICAgICAgKFdlYktpdDo6ZnJvbUNvdW50ZWRTZXRUb0hhc2hNYXAp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpzZXRUZXh0Q2hlY2tlclN0YXRlKToKKwog
MjAxMi0wOS0xNyAgSm9uIExlZSAgPGpvbmxlZUBhcHBsZS5jb20+CiAKICAgICAgICAgU2FmYXJp
IDYgbm90aWZpY2F0aW9ucycgb25jbGljayBoYW5kbGVycyBjYW4ndCBjYWxsIHdpbmRvdy5vcGVu
KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVj
dC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgKaW5kZXgg
OGQ3YWVkZDNlMjc2MDQ4MWMxOGJkYmM5OGNhYjI3YmRiMmExYjQyMy4uNDVhNmNiNzlkYjZiZjlj
YWNkZmY1NzYwNjg5NjBhNzVlM2E0ODcwZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU0NhbGxiYWNrT2JqZWN0LmgKQEAgLTgzLDEzICs4MywxMyBAQCBzdHJ1Y3QgSlNDYWxsYmFj
a09iamVjdERhdGEgOiBXZWFrSGFuZGxlT3duZXIgewogICAgICAgICAgICAgUHJpdmF0ZVByb3Bl
cnR5TWFwOjpjb25zdF9pdGVyYXRvciBsb2NhdGlvbiA9IG1fcHJvcGVydHlNYXAuZmluZChwcm9w
ZXJ0eU5hbWUuaW1wbCgpKTsKICAgICAgICAgICAgIGlmIChsb2NhdGlvbiA9PSBtX3Byb3BlcnR5
TWFwLmVuZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7Ci0gICAgICAgICAg
ICByZXR1cm4gbG9jYXRpb24tPnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgIHJldHVybiBsb2Nh
dGlvbi0+dmFsdWUuZ2V0KCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHZvaWQgc2V0
UHJpdmF0ZVByb3BlcnR5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwg
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlKQogICAgICAgICB7
CiAgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gZW1wdHk7Ci0gICAgICAgICAgICBt
X3Byb3BlcnR5TWFwLmFkZChwcm9wZXJ0eU5hbWUuaW1wbCgpLCBlbXB0eSkuaXRlcmF0b3ItPnNl
Y29uZC5zZXQoZ2xvYmFsRGF0YSwgb3duZXIsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcHJvcGVy
dHlNYXAuYWRkKHByb3BlcnR5TmFtZS5pbXBsKCksIGVtcHR5KS5pdGVyYXRvci0+dmFsdWUuc2V0
KGdsb2JhbERhdGEsIG93bmVyLCB2YWx1ZSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAg
IHZvaWQgZGVsZXRlUHJpdmF0ZVByb3BlcnR5KGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSkKQEAgLTEwMCw4ICsxMDAsOCBAQCBzdHJ1Y3QgSlNDYWxsYmFja09iamVjdERhdGEgOiBXZWFr
SGFuZGxlT3duZXIgewogICAgICAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCiAgICAgICAgIHsKICAgICAgICAgICAgIGZvciAoUHJpdmF0ZVByb3BlcnR5TWFwOjpp
dGVyYXRvciBwdHIgPSBtX3Byb3BlcnR5TWFwLmJlZ2luKCk7IHB0ciAhPSBtX3Byb3BlcnR5TWFw
LmVuZCgpOyArK3B0cikgewotICAgICAgICAgICAgICAgIGlmIChwdHItPnNlY29uZCkKLSAgICAg
ICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJnB0ci0+c2Vjb25kKTsKKyAgICAgICAgICAg
ICAgICBpZiAocHRyLT52YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQo
JnB0ci0+dmFsdWUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgKaW5kZXgg
MzlkMDc4MjM5YjRkOTA2NDAyODFlNGRmOTIzMzJhMTk0ZTdkN2VkMy4uYTNhZmFlYzQyMzI5Yjdh
OTExZDk1N2FlNGQ1MGM2ODA4ZWM5YzUxZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgKQEAgLTQ3MSw4ICs0NzEsOCBA
QCB2b2lkIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5h
bWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZQogICAgICAgICAgICAgdHlwZWRlZiBPcGFxdWVKU0Ns
YXNzU3RhdGljVmFsdWVzVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0ZXJhdG9yOwogICAgICAgICAg
ICAgaXRlcmF0b3IgZW5kID0gc3RhdGljVmFsdWVzLT5lbmQoKTsKICAgICAgICAgICAgIGZvciAo
aXRlcmF0b3IgaXQgPSBzdGF0aWNWYWx1ZXMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewot
ICAgICAgICAgICAgICAgIFN0cmluZ0ltcGwqIG5hbWUgPSBpdC0+Zmlyc3QuZ2V0KCk7Ci0gICAg
ICAgICAgICAgICAgU3RhdGljVmFsdWVFbnRyeSogZW50cnkgPSBpdC0+c2Vjb25kLmdldCgpOwor
ICAgICAgICAgICAgICAgIFN0cmluZ0ltcGwqIG5hbWUgPSBpdC0+a2V5LmdldCgpOworICAgICAg
ICAgICAgICAgIFN0YXRpY1ZhbHVlRW50cnkqIGVudHJ5ID0gaXQtPnZhbHVlLmdldCgpOwogICAg
ICAgICAgICAgICAgIGlmIChlbnRyeS0+Z2V0UHJvcGVydHkgJiYgKCEoZW50cnktPmF0dHJpYnV0
ZXMgJiBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRFbnVtKSB8fCAobW9kZSA9PSBJbmNsdWRlRG9u
dEVudW1Qcm9wZXJ0aWVzKSkpCiAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRk
KElkZW50aWZpZXIoZXhlYywgbmFtZSkpOwogICAgICAgICAgICAgfQpAQCAtNDgyLDggKzQ4Miw4
IEBAIHZvaWQgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpnZXRPd25Ob25JbmRleFByb3BlcnR5
TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlCiAgICAgICAgICAgICB0eXBlZGVmIE9wYXF1ZUpT
Q2xhc3NTdGF0aWNGdW5jdGlvbnNUYWJsZTo6Y29uc3RfaXRlcmF0b3IgaXRlcmF0b3I7CiAgICAg
ICAgICAgICBpdGVyYXRvciBlbmQgPSBzdGF0aWNGdW5jdGlvbnMtPmVuZCgpOwogICAgICAgICAg
ICAgZm9yIChpdGVyYXRvciBpdCA9IHN0YXRpY0Z1bmN0aW9ucy0+YmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nSW1wbCogbmFtZSA9IGl0LT5maXJzdC5n
ZXQoKTsKLSAgICAgICAgICAgICAgICBTdGF0aWNGdW5jdGlvbkVudHJ5KiBlbnRyeSA9IGl0LT5z
ZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICAgICAgU3RyaW5nSW1wbCogbmFtZSA9IGl0LT5rZXku
Z2V0KCk7CisgICAgICAgICAgICAgICAgU3RhdGljRnVuY3Rpb25FbnRyeSogZW50cnkgPSBpdC0+
dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICAgICAgaWYgKCEoZW50cnktPmF0dHJpYnV0ZXMgJiBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRFbnVtKSB8fCAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Q
cm9wZXJ0aWVzKSkKICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRp
ZmllcihleGVjLCBuYW1lKSk7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTQ2xhc3NSZWYuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU0NsYXNzUmVmLmNwcAppbmRleCBhOTVkNDJlMzllZDEzMzkyNzI5NjkxZTE5MDMwMjg2MTc2
NjBlMzQzLi42NWM4M2JjYWJmZTZhNDExOTgzZGRkODQ3NDViMTY0ZTUxOTU1MDJmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2xhc3NSZWYuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDbGFzc1JlZi5jcHAKQEAgLTkzLDEzICs5MywxMyBAQCBP
cGFxdWVKU0NsYXNzOjp+T3BhcXVlSlNDbGFzcygpCiAgICAgaWYgKG1fc3RhdGljVmFsdWVzKSB7
CiAgICAgICAgIE9wYXF1ZUpTQ2xhc3NTdGF0aWNWYWx1ZXNUYWJsZTo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gbV9zdGF0aWNWYWx1ZXMtPmVuZCgpOwogICAgICAgICBmb3IgKE9wYXF1ZUpTQ2xhc3NT
dGF0aWNWYWx1ZXNUYWJsZTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3N0YXRpY1ZhbHVlcy0+YmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgQVNTRVJUKCFpdC0+Zmlyc3QtPmlz
SWRlbnRpZmllcigpKTsKKyAgICAgICAgICAgIEFTU0VSVCghaXQtPmtleS0+aXNJZGVudGlmaWVy
KCkpOwogICAgIH0KIAogICAgIGlmIChtX3N0YXRpY0Z1bmN0aW9ucykgewogICAgICAgICBPcGFx
dWVKU0NsYXNzU3RhdGljRnVuY3Rpb25zVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fc3Rh
dGljRnVuY3Rpb25zLT5lbmQoKTsKICAgICAgICAgZm9yIChPcGFxdWVKU0NsYXNzU3RhdGljRnVu
Y3Rpb25zVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zdGF0aWNGdW5jdGlvbnMtPmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIEFTU0VSVCghaXQtPmZpcnN0LT5pc0lk
ZW50aWZpZXIoKSk7CisgICAgICAgICAgICBBU1NFUlQoIWl0LT5rZXktPmlzSWRlbnRpZmllcigp
KTsKICAgICB9CiAjZW5kaWYKICAgICAKQEAgLTEzMyw4ICsxMzMsOCBAQCBPcGFxdWVKU0NsYXNz
Q29udGV4dERhdGE6Ok9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YShKU0M6OkpTR2xvYmFsRGF0YSYs
IE9wYXF1ZUpTQwogICAgICAgICBzdGF0aWNWYWx1ZXMgPSBhZG9wdFB0cihuZXcgT3BhcXVlSlND
bGFzc1N0YXRpY1ZhbHVlc1RhYmxlKTsKICAgICAgICAgT3BhcXVlSlNDbGFzc1N0YXRpY1ZhbHVl
c1RhYmxlOjpjb25zdF9pdGVyYXRvciBlbmQgPSBqc0NsYXNzLT5tX3N0YXRpY1ZhbHVlcy0+ZW5k
KCk7CiAgICAgICAgIGZvciAoT3BhcXVlSlNDbGFzc1N0YXRpY1ZhbHVlc1RhYmxlOjpjb25zdF9p
dGVyYXRvciBpdCA9IGpzQ2xhc3MtPm1fc3RhdGljVmFsdWVzLT5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKLSAgICAgICAgICAgIEFTU0VSVCghaXQtPmZpcnN0LT5pc0lkZW50aWZpZXIoKSk7
Ci0gICAgICAgICAgICBzdGF0aWNWYWx1ZXMtPmFkZChTdHJpbmdJbXBsOjpjcmVhdGUoaXQtPmZp
cnN0LT5jaGFyYWN0ZXJzKCksIGl0LT5maXJzdC0+bGVuZ3RoKCkpLCBhZG9wdFB0cihuZXcgU3Rh
dGljVmFsdWVFbnRyeShpdC0+c2Vjb25kLT5nZXRQcm9wZXJ0eSwgaXQtPnNlY29uZC0+c2V0UHJv
cGVydHksIGl0LT5zZWNvbmQtPmF0dHJpYnV0ZXMpKSk7CisgICAgICAgICAgICBBU1NFUlQoIWl0
LT5rZXktPmlzSWRlbnRpZmllcigpKTsKKyAgICAgICAgICAgIHN0YXRpY1ZhbHVlcy0+YWRkKFN0
cmluZ0ltcGw6OmNyZWF0ZShpdC0+a2V5LT5jaGFyYWN0ZXJzKCksIGl0LT5rZXktPmxlbmd0aCgp
KSwgYWRvcHRQdHIobmV3IFN0YXRpY1ZhbHVlRW50cnkoaXQtPnZhbHVlLT5nZXRQcm9wZXJ0eSwg
aXQtPnZhbHVlLT5zZXRQcm9wZXJ0eSwgaXQtPnZhbHVlLT5hdHRyaWJ1dGVzKSkpOwogICAgICAg
ICB9CiAgICAgfQogCkBAIC0xNDIsMTUgKzE0MiwxNSBAQCBPcGFxdWVKU0NsYXNzQ29udGV4dERh
dGE6Ok9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YShKU0M6OkpTR2xvYmFsRGF0YSYsIE9wYXF1ZUpT
QwogICAgICAgICBzdGF0aWNGdW5jdGlvbnMgPSBhZG9wdFB0cihuZXcgT3BhcXVlSlNDbGFzc1N0
YXRpY0Z1bmN0aW9uc1RhYmxlKTsKICAgICAgICAgT3BhcXVlSlNDbGFzc1N0YXRpY0Z1bmN0aW9u
c1RhYmxlOjpjb25zdF9pdGVyYXRvciBlbmQgPSBqc0NsYXNzLT5tX3N0YXRpY0Z1bmN0aW9ucy0+
ZW5kKCk7CiAgICAgICAgIGZvciAoT3BhcXVlSlNDbGFzc1N0YXRpY0Z1bmN0aW9uc1RhYmxlOjpj
b25zdF9pdGVyYXRvciBpdCA9IGpzQ2xhc3MtPm1fc3RhdGljRnVuY3Rpb25zLT5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIEFTU0VSVCghaXQtPmZpcnN0LT5pc0lkZW50
aWZpZXIoKSk7Ci0gICAgICAgICAgICBzdGF0aWNGdW5jdGlvbnMtPmFkZChTdHJpbmdJbXBsOjpj
cmVhdGUoaXQtPmZpcnN0LT5jaGFyYWN0ZXJzKCksIGl0LT5maXJzdC0+bGVuZ3RoKCkpLCBhZG9w
dFB0cihuZXcgU3RhdGljRnVuY3Rpb25FbnRyeShpdC0+c2Vjb25kLT5jYWxsQXNGdW5jdGlvbiwg
aXQtPnNlY29uZC0+YXR0cmlidXRlcykpKTsKKyAgICAgICAgICAgIEFTU0VSVCghaXQtPmtleS0+
aXNJZGVudGlmaWVyKCkpOworICAgICAgICAgICAgc3RhdGljRnVuY3Rpb25zLT5hZGQoU3RyaW5n
SW1wbDo6Y3JlYXRlKGl0LT5rZXktPmNoYXJhY3RlcnMoKSwgaXQtPmtleS0+bGVuZ3RoKCkpLCBh
ZG9wdFB0cihuZXcgU3RhdGljRnVuY3Rpb25FbnRyeShpdC0+dmFsdWUtPmNhbGxBc0Z1bmN0aW9u
LCBpdC0+dmFsdWUtPmF0dHJpYnV0ZXMpKSk7CiAgICAgICAgIH0KICAgICB9CiB9CiAKIE9wYXF1
ZUpTQ2xhc3NDb250ZXh0RGF0YSYgT3BhcXVlSlNDbGFzczo6Y29udGV4dERhdGEoRXhlY1N0YXRl
KiBleGVjKQogewotICAgIE93blB0cjxPcGFxdWVKU0NsYXNzQ29udGV4dERhdGE+JiBjb250ZXh0
RGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKS5vcGFxdWVKU0NsYXNzRGF0YS5hZGQodGhpcywgbnVs
bHB0cikuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBPd25QdHI8T3BhcXVlSlNDbGFzc0NvbnRleHRE
YXRhPiYgY29udGV4dERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCkub3BhcXVlSlNDbGFzc0RhdGEu
YWRkKHRoaXMsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoIWNvbnRleHREYXRh
KQogICAgICAgICBjb250ZXh0RGF0YSA9IGFkb3B0UHRyKG5ldyBPcGFxdWVKU0NsYXNzQ29udGV4
dERhdGEoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzKSk7CiAgICAgcmV0dXJuICpjb250ZXh0RGF0
YTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKaW5kZXgg
NmIzMWJlMjIxYjYxODdjYTcwMzQ3NTc0NWMzMzZjYzEzZjMzZjg2ZC4uNmUxNzRjMmZkOTUwYzUw
NjIxNDEyMGFmYTYxOTRiN2VmY2JlN2JlNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5jcHAKQEAgLTY2MCw3ICs2NjAsNyBAQCB2b2lkIENvZGVCbG9jazo6
ZHVtcChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgICAgICBkYXRhTG9nKCIgICUxZCA9IHtcbiIs
IGkpOwogICAgICAgICAgICAgU3RyaW5nSnVtcFRhYmxlOjpTdHJpbmdPZmZzZXRUYWJsZTo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gbV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW2ld
Lm9mZnNldFRhYmxlLmVuZCgpOwogICAgICAgICAgICAgZm9yIChTdHJpbmdKdW1wVGFibGU6OlN0
cmluZ09mZnNldFRhYmxlOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbV9yYXJlRGF0YS0+bV9zdHJp
bmdTd2l0Y2hKdW1wVGFibGVzW2ldLm9mZnNldFRhYmxlLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyAr
K2l0ZXIpCi0gICAgICAgICAgICAgICAgZGF0YUxvZygiXHRcdFwiJXNcIiA9PiAlMDRkXG4iLCBT
dHJpbmcoaXRlci0+Zmlyc3QpLnV0ZjgoKS5kYXRhKCksIGl0ZXItPnNlY29uZC5icmFuY2hPZmZz
ZXQpOworICAgICAgICAgICAgICAgIGRhdGFMb2coIlx0XHRcIiVzXCIgPT4gJTA0ZFxuIiwgU3Ry
aW5nKGl0ZXItPmtleSkudXRmOCgpLmRhdGEoKSwgaXRlci0+dmFsdWUuYnJhbmNoT2Zmc2V0KTsK
ICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgIH1cbiIpOwogICAgICAgICAgICAgKytpOwogICAg
ICAgICB9IHdoaWxlIChpIDwgbV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLnNp
emUoKSk7CkBAIC0xOTE4LDcgKzE5MTgsNyBAQCB2b2lkIEV2YWxDb2RlQ2FjaGU6OnZpc2l0QWdn
cmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEV2YWxDYWNoZU1hcDo6aXRlcmF0
b3IgZW5kID0gbV9jYWNoZU1hcC5lbmQoKTsKICAgICBmb3IgKEV2YWxDYWNoZU1hcDo6aXRlcmF0
b3IgcHRyID0gbV9jYWNoZU1hcC5iZWdpbigpOyBwdHIgIT0gZW5kOyArK3B0cikKLSAgICAgICAg
dmlzaXRvci5hcHBlbmQoJnB0ci0+c2Vjb25kKTsKKyAgICAgICAgdmlzaXRvci5hcHBlbmQoJnB0
ci0+dmFsdWUpOwogfQogCiB2b2lkIENvZGVCbG9jazo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCkBAIC0zMDUyLDggKzMwNTIsOCBAQCBTdHJpbmcgQ29kZUJsb2NrOjpuYW1l
Rm9yUmVnaXN0ZXIoaW50IHJlZ2lzdGVyTnVtYmVyKQogewogICAgIFN5bWJvbFRhYmxlOjppdGVy
YXRvciBlbmQgPSBtX3N5bWJvbFRhYmxlLT5lbmQoKTsKICAgICBmb3IgKFN5bWJvbFRhYmxlOjpp
dGVyYXRvciBwdHIgPSBtX3N5bWJvbFRhYmxlLT5iZWdpbigpOyBwdHIgIT0gZW5kOyArK3B0cikg
ewotICAgICAgICBpZiAocHRyLT5zZWNvbmQuZ2V0SW5kZXgoKSA9PSByZWdpc3Rlck51bWJlcikK
LSAgICAgICAgICAgIHJldHVybiBTdHJpbmcocHRyLT5maXJzdCk7CisgICAgICAgIGlmIChwdHIt
PnZhbHVlLmdldEluZGV4KCkgPT0gcmVnaXN0ZXJOdW1iZXIpCisgICAgICAgICAgICByZXR1cm4g
U3RyaW5nKHB0ci0+a2V5KTsKICAgICB9CiAgICAgaWYgKG5lZWRzQWN0aXZhdGlvbigpICYmIHJl
Z2lzdGVyTnVtYmVyID09IGFjdGl2YXRpb25SZWdpc3RlcigpKQogICAgICAgICByZXR1cm4gQVND
SUlMaXRlcmFsKCJhY3RpdmF0aW9uIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvSnVtcFRhYmxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
SnVtcFRhYmxlLmgKaW5kZXggYTAxZjkwY2IwZWUzOTJhNGJiYjBkOTIwODdlMTEyZDVmYTk1MTc4
ZS4uZjU0YTM3MThmMDYzYjEyYTU1ZGI3YWQ2MjA5MjEzYjQyZDFhNGZjZSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0p1bXBUYWJsZS5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9KdW1wVGFibGUuaApAQCAtNTcsNyArNTcsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgICAgIFN0cmluZ09mZnNldFRhYmxlOjpjb25zdF9pdGVyYXRv
ciBsb2MgPSBvZmZzZXRUYWJsZS5maW5kKHZhbHVlKTsKICAgICAgICAgICAgIGlmIChsb2MgPT0g
ZW5kKQogICAgICAgICAgICAgICAgIHJldHVybiBkZWZhdWx0T2Zmc2V0OwotICAgICAgICAgICAg
cmV0dXJuIGxvYy0+c2Vjb25kLmJyYW5jaE9mZnNldDsKKyAgICAgICAgICAgIHJldHVybiBsb2Mt
PnZhbHVlLmJyYW5jaE9mZnNldDsKICAgICAgICAgfQogCiAjaWYgRU5BQkxFKEpJVCkKQEAgLTY3
LDcgKzY3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBTdHJpbmdPZmZzZXRUYWJs
ZTo6Y29uc3RfaXRlcmF0b3IgbG9jID0gb2Zmc2V0VGFibGUuZmluZCh2YWx1ZSk7CiAgICAgICAg
ICAgICBpZiAobG9jID09IGVuZCkKICAgICAgICAgICAgICAgICByZXR1cm4gY3RpRGVmYXVsdDsK
LSAgICAgICAgICAgIHJldHVybiBsb2MtPnNlY29uZC5jdGlPZmZzZXQ7CisgICAgICAgICAgICBy
ZXR1cm4gbG9jLT52YWx1ZS5jdGlPZmZzZXQ7CiAgICAgICAgIH0KICNlbmRpZgogICAgIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1
ZVByb2ZpbGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xhenlPcGVyYW5k
VmFsdWVQcm9maWxlLmNwcAppbmRleCA1OWYwZDAyMzQzNDE3YTc0MWJjODI1NzM3ZDI2MTEzY2Rj
N2EzMjk1Li5mOTIzZTRhMjhiYmNiMDAzOWE1MzczZTk2Zjg0NTIzZTc5Y2VlMDg4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVByb2Zp
bGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MYXp5T3BlcmFuZFZh
bHVlUHJvZmlsZS5jcHAKQEAgLTgxLDcgKzgxLDcgQEAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUq
IExhenlPcGVyYW5kVmFsdWVQcm9maWxlUGFyc2VyOjpnZXRJZlByZXNlbnQoCiAgICAgaWYgKGl0
ZXIgPT0gbV9tYXAuZW5kKCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIAotICAgIHJldHVybiBp
dGVyLT5zZWNvbmQ7CisgICAgcmV0dXJuIGl0ZXItPnZhbHVlOwogfQogCiBTcGVjdWxhdGVkVHlw
ZSBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZVBhcnNlcjo6cHJlZGljdGlvbigKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TYW1wbGluZ1Rvb2wuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NhbXBsaW5nVG9vbC5jcHAKaW5kZXggZjA3ZGM3OWZi
NzgyNThkODYxZDRmNDg1MTdmMWI1NWIyOTYzOTUzZC4uZjliODI0NWU1NDc3YThmMzBlZDUyMWMz
MTI2YmYwMTlkNWNiMmU2NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1NhbXBsaW5nVG9vbC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1NhbXBsaW5nVG9vbC5jcHAKQEAgLTQxMCw3ICs0MTAsNyBAQCB2b2lkIFNhbXBsaW5nVG9vbDo6
ZHVtcChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgVmVjdG9yPFNjcmlwdFNhbXBsZVJlY29yZCo+IGNv
ZGVCbG9ja1NhbXBsZXMoc2NvcGVDb3VudCk7CiAgICAgU2NyaXB0U2FtcGxlUmVjb3JkTWFwOjpp
dGVyYXRvciBpdGVyID0gbV9zY29wZVNhbXBsZU1hcC0+YmVnaW4oKTsKICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IHNjb3BlQ291bnQ7ICsraSwgKytpdGVyKQotICAgICAgICBjb2RlQmxvY2tTYW1w
bGVzW2ldID0gaXRlci0+c2Vjb25kLmdldCgpOworICAgICAgICBjb2RlQmxvY2tTYW1wbGVzW2ld
ID0gaXRlci0+dmFsdWUuZ2V0KCk7CiAKICAgICBxc29ydChjb2RlQmxvY2tTYW1wbGVzLmJlZ2lu
KCksIHNjb3BlQ291bnQsIHNpemVvZihTY3JpcHRTYW1wbGVSZWNvcmQqKSwgY29tcGFyZVNjcmlw
dFNhbXBsZVJlY29yZHMpOwogCkBAIC00NDYsOCArNDQ2LDggQEAgdm9pZCBTYW1wbGluZ1Rvb2w6
OmR1bXAoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICAgICAgICAgIFZlY3RvcjxMaW5lQ291bnRJ
bmZvPiBsaW5lQ291bnRJbmZvKGxpbmVzQ291bnQpOwogICAgICAgICAgICAgICAgIGludCBsaW5l
bm8gPSAwOwogICAgICAgICAgICAgICAgIGZvciAoSGFzaE1hcDx1bnNpZ25lZCx1bnNpZ25lZD46
Oml0ZXJhdG9yIGl0ZXIgPSBsaW5lQ291bnRzLmJlZ2luKCk7IGl0ZXIgIT0gbGluZUNvdW50cy5l
bmQoKTsgKytpdGVyLCArK2xpbmVubykgewotICAgICAgICAgICAgICAgICAgICBsaW5lQ291bnRJ
bmZvW2xpbmVub10ubGluZSA9IGl0ZXItPmZpcnN0OwotICAgICAgICAgICAgICAgICAgICBsaW5l
Q291bnRJbmZvW2xpbmVub10uY291bnQgPSBpdGVyLT5zZWNvbmQ7CisgICAgICAgICAgICAgICAg
ICAgIGxpbmVDb3VudEluZm9bbGluZW5vXS5saW5lID0gaXRlci0+a2V5OworICAgICAgICAgICAg
ICAgICAgICBsaW5lQ291bnRJbmZvW2xpbmVub10uY291bnQgPSBpdGVyLT52YWx1ZTsKICAgICAg
ICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBxc29ydChsaW5lQ291bnRJbmZvLmJlZ2lu
KCksIGxpbmVzQ291bnQsIHNpemVvZihMaW5lQ291bnRJbmZvKSwgY29tcGFyZUxpbmVDb3VudElu
Zm9TYW1wbGluZyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCmluZGV4IGU3YTgwZmUyYzNmZDEyMzFhZTA4OTEw
YmEyMmUxNGY0MjdkODNkZTMuLjg2ZjYyNDRjNzAxNzAyYjkyNzMyZDVlZWU0ZWViYTU0YjBlNjE1
NDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuY3BwCkBAIC0yMzAsNyArMjMwLDcgQEAgYm9vbCBCeXRlY29kZUdl
bmVyYXRvcjo6YWRkVmFyKGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBib29sIGlzQ29uc3RhbnQs
IFJlZ2lzdGUKICAgICBTeW1ib2xUYWJsZTo6QWRkUmVzdWx0IHJlc3VsdCA9IHN5bWJvbFRhYmxl
KCkuYWRkKGlkZW50LmltcGwoKSwgbmV3RW50cnkpOwogCiAgICAgaWYgKCFyZXN1bHQuaXNOZXdF
bnRyeSkgewotICAgICAgICByMCA9ICZyZWdpc3RlckZvcihyZXN1bHQuaXRlcmF0b3ItPnNlY29u
ZC5nZXRJbmRleCgpKTsKKyAgICAgICAgcjAgPSAmcmVnaXN0ZXJGb3IocmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZS5nZXRJbmRleCgpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAt
MjQ4LDggKzI0OCw4IEBAIGludCBCeXRlY29kZUdlbmVyYXRvcjo6YWRkR2xvYmFsVmFyKAogICAg
ICAgICBuZXdFbnRyeS5hdHRlbXB0VG9XYXRjaCgpOwogICAgIFN5bWJvbFRhYmxlOjpBZGRSZXN1
bHQgcmVzdWx0ID0gc3ltYm9sVGFibGUoKS5hZGQoaWRlbnQuaW1wbCgpLCBuZXdFbnRyeSk7CiAg
ICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNl
Y29uZC5ub3RpZnlXcml0ZSgpOwotICAgICAgICBpbmRleCA9IHJlc3VsdC5pdGVyYXRvci0+c2Vj
b25kLmdldEluZGV4KCk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUubm90aWZ5V3Jp
dGUoKTsKKyAgICAgICAgaW5kZXggPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldEluZGV4KCk7
CiAgICAgfQogICAgIHJldHVybiBpbmRleDsKIH0KQEAgLTExNDcsNyArMTE0Nyw3IEBAIHVuc2ln
bmVkIEJ5dGVjb2RlR2VuZXJhdG9yOjphZGRDb25zdGFudChjb25zdCBJZGVudGlmaWVyJiBpZGVu
dCkKICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpCiAgICAgICAgIG1fY29kZUJsb2NrLT5hZGRJ
ZGVudGlmaWVyKElkZW50aWZpZXIobV9nbG9iYWxEYXRhLCByZXApKTsKIAotICAgIHJldHVybiBy
ZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZTsKIH0KIAogLy8gV2UgY2FuJ3QgaGFzaCBKU1ZhbHVlKCksIHNvIHdlIHVzZSBhIGRlZGljYXRl
ZCBkYXRhIG1lbWJlciB0byBjYWNoZSBpdC4KQEAgLTExNzYsNyArMTE3Niw3IEBAIFJlZ2lzdGVy
SUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjphZGRDb25zdGFudFZhbHVlKEpTVmFsdWUgdikKICAgICAg
ICAgKyttX25leHRDb25zdGFudE9mZnNldDsKICAgICAgICAgbV9jb2RlQmxvY2stPmFkZENvbnN0
YW50KHYpOwogICAgIH0gZWxzZQotICAgICAgICBpbmRleCA9IHJlc3VsdC5pdGVyYXRvci0+c2Vj
b25kOworICAgICAgICBpbmRleCA9IHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAgICAgcmV0dXJu
ICZtX2NvbnN0YW50UG9vbFJlZ2lzdGVyc1tpbmRleF07CiB9CiAKQEAgLTEzMjIsNyArMTMyMiw3
IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TG9hZChSZWdpc3RlcklEKiBk
c3QsIGRvdWJsZSBudW1iZXIpCiAgICAgLy8gd29yayBjb3JyZWN0bHkgd2l0aCBOYU4gYXMgYSBr
ZXkuCiAgICAgaWYgKGlzbmFuKG51bWJlcikgfHwgbnVtYmVyID09IEhhc2hUcmFpdHM8ZG91Ymxl
Pjo6ZW1wdHlWYWx1ZSgpIHx8IEhhc2hUcmFpdHM8ZG91YmxlPjo6aXNEZWxldGVkVmFsdWUobnVt
YmVyKSkKICAgICAgICAgcmV0dXJuIGVtaXRMb2FkKGRzdCwganNOdW1iZXIobnVtYmVyKSk7Ci0g
ICAgSlNWYWx1ZSYgdmFsdWVJbk1hcCA9IG1fbnVtYmVyTWFwLmFkZChudW1iZXIsIEpTVmFsdWUo
KSkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBKU1ZhbHVlJiB2YWx1ZUluTWFwID0gbV9udW1iZXJN
YXAuYWRkKG51bWJlciwgSlNWYWx1ZSgpKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCF2YWx1
ZUluTWFwKQogICAgICAgICB2YWx1ZUluTWFwID0ganNOdW1iZXIobnVtYmVyKTsKICAgICByZXR1
cm4gZW1pdExvYWQoZHN0LCB2YWx1ZUluTWFwKTsKQEAgLTEzMzAsNyArMTMzMCw3IEBAIFJlZ2lz
dGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TG9hZChSZWdpc3RlcklEKiBkc3QsIGRvdWJs
ZSBudW1iZXIpCiAKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TG9hZChSZWdp
c3RlcklEKiBkc3QsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIpCiB7Ci0gICAgSlNTdHJp
bmcqJiBzdHJpbmdJbk1hcCA9IG1fc3RyaW5nTWFwLmFkZChpZGVudGlmaWVyLmltcGwoKSwgMCku
aXRlcmF0b3ItPnNlY29uZDsKKyAgICBKU1N0cmluZyomIHN0cmluZ0luTWFwID0gbV9zdHJpbmdN
YXAuYWRkKGlkZW50aWZpZXIuaW1wbCgpLCAwKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCFz
dHJpbmdJbk1hcCkKICAgICAgICAgc3RyaW5nSW5NYXAgPSBqc093bmVkU3RyaW5nKGdsb2JhbERh
dGEoKSwgaWRlbnRpZmllci5zdHJpbmcoKSk7CiAgICAgcmV0dXJuIGVtaXRMb2FkKGRzdCwgSlNW
YWx1ZShzdHJpbmdJbk1hcCkpOwpAQCAtMTg5OSw3ICsxODk5LDcgQEAgdW5zaWduZWQgQnl0ZWNv
ZGVHZW5lcmF0b3I6OmFkZENvbnN0YW50QnVmZmVyKHVuc2lnbmVkIGxlbmd0aCkKIAogSlNTdHJp
bmcqIEJ5dGVjb2RlR2VuZXJhdG9yOjphZGRTdHJpbmdDb25zdGFudChjb25zdCBJZGVudGlmaWVy
JiBpZGVudGlmaWVyKQogewotICAgIEpTU3RyaW5nKiYgc3RyaW5nSW5NYXAgPSBtX3N0cmluZ01h
cC5hZGQoaWRlbnRpZmllci5pbXBsKCksIDApLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgSlNTdHJp
bmcqJiBzdHJpbmdJbk1hcCA9IG1fc3RyaW5nTWFwLmFkZChpZGVudGlmaWVyLmltcGwoKSwgMCku
aXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghc3RyaW5nSW5NYXApIHsKICAgICAgICAgc3RyaW5n
SW5NYXAgPSBqc1N0cmluZyhnbG9iYWxEYXRhKCksIGlkZW50aWZpZXIuc3RyaW5nKCkpOwogICAg
ICAgICBhZGRDb25zdGFudFZhbHVlKHN0cmluZ0luTWFwKTsKQEAgLTE5NzEsOCArMTk3MSw4IEBA
IFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TGF6eU5ld0Z1bmN0aW9uKFJlZ2lz
dGVySUQqIGRzdCwgRnVuY3Rpb25Cb2R5CiB7CiAgICAgRnVuY3Rpb25PZmZzZXRNYXA6OkFkZFJl
c3VsdCBwdHIgPSBtX2Z1bmN0aW9uT2Zmc2V0cy5hZGQoZnVuY3Rpb24sIDApOwogICAgIGlmIChw
dHIuaXNOZXdFbnRyeSkKLSAgICAgICAgcHRyLml0ZXJhdG9yLT5zZWNvbmQgPSBtX2NvZGVCbG9j
ay0+YWRkRnVuY3Rpb25EZWNsKEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRlKCptX2dsb2JhbERh
dGEsIGZ1bmN0aW9uKSk7Ci0gICAgcmV0dXJuIGVtaXROZXdGdW5jdGlvbkludGVybmFsKGRzdCwg
cHRyLml0ZXJhdG9yLT5zZWNvbmQsIHRydWUpOworICAgICAgICBwdHIuaXRlcmF0b3ItPnZhbHVl
ID0gbV9jb2RlQmxvY2stPmFkZEZ1bmN0aW9uRGVjbChGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0
ZSgqbV9nbG9iYWxEYXRhLCBmdW5jdGlvbikpOworICAgIHJldHVybiBlbWl0TmV3RnVuY3Rpb25J
bnRlcm5hbChkc3QsIHB0ci5pdGVyYXRvci0+dmFsdWUsIHRydWUpOwogfQogCiBSZWdpc3RlcklE
KiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5ld0Z1bmN0aW9uSW50ZXJuYWwoUmVnaXN0ZXJJRCog
ZHN0LCB1bnNpZ25lZCBpbmRleCwgYm9vbCBkb051bGxDaGVjaykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAppbmRleCBlNGQzNTQ3
MWZhZWUyNzNiODNhMmVmMTBhNTU3N2FjMjE2ZGY1M2Y0Li41ODEwMmI5YmQyNTVmZmM3ZDgwYjIz
ODYzMjFlODgxYTFkZmJkYjUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCkBAIC0yNjAsNyArMjYwLDcgQEAgUmVnaXN0ZXJJ
RCogUHJvcGVydHlMaXN0Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5l
cmF0b3IsIFJlZ2lzdGUKICAgICAgICAgICAgIEdldHRlclNldHRlclBhaXIgcGFpcihub2RlLCBz
dGF0aWNfY2FzdDxQcm9wZXJ0eU5vZGUqPigwKSk7CiAgICAgICAgICAgICBHZXR0ZXJTZXR0ZXJN
YXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtYXAuYWRkKG5vZGUtPm5hbWUoKS5pbXBsKCksIHBhaXIp
OwogICAgICAgICAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgICAgICBy
ZXN1bHQuaXRlcmF0b3ItPnNlY29uZC5zZWNvbmQgPSBub2RlOworICAgICAgICAgICAgICAgIHJl
c3VsdC5pdGVyYXRvci0+dmFsdWUuc2Vjb25kID0gbm9kZTsKICAgICAgICAgfQogCiAgICAgICAg
IC8vIEl0ZXJhdGUgb3ZlciB0aGUgcmVtYWluaW5nIHByb3BlcnRpZXMgaW4gdGhlIGxpc3QuCkBA
IC0yNzgsNyArMjc4LDcgQEAgUmVnaXN0ZXJJRCogUHJvcGVydHlMaXN0Tm9kZTo6ZW1pdEJ5dGVj
b2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGUKICAgICAgICAgICAgIEFT
U0VSVChub2RlLT5tX3R5cGUgPT0gUHJvcGVydHlOb2RlOjpHZXR0ZXIgfHwgbm9kZS0+bV90eXBl
ID09IFByb3BlcnR5Tm9kZTo6U2V0dGVyKTsKICAgICAgICAgICAgIEdldHRlclNldHRlck1hcDo6
aXRlcmF0b3IgaXQgPSBtYXAuZmluZChub2RlLT5uYW1lKCkuaW1wbCgpKTsKICAgICAgICAgICAg
IEFTU0VSVChpdCAhPSBtYXAuZW5kKCkpOwotICAgICAgICAgICAgR2V0dGVyU2V0dGVyUGFpciYg
cGFpciA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICBHZXR0ZXJTZXR0ZXJQYWlyJiBwYWlyID0g
aXQtPnZhbHVlOwogCiAgICAgICAgICAgICAvLyBXYXMgdGhpcyBhbHJlYWR5IGdlbmVyYXRlZCBh
cyBhIHBhcnQgb2YgaXRzIHBhcnRuZXI/CiAgICAgICAgICAgICBpZiAocGFpci5zZWNvbmQgPT0g
bm9kZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dl
ci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3BwCmluZGV4
IDhkMzYwZWZjMjY1ODcwOWUwYTYwM2U1YTA5ZjI3MzVlNDY5MWY2ZjIuLjM3MzFiMDQ3MzAyZGEz
OTEyZTU3ODhhNjBhZGQxMmNiNjRjOGI0ZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rl
YnVnZ2VyL0RlYnVnZ2VyLmNwcApAQCAtNTksNyArNTksNyBAQCBpbmxpbmUgUmVjb21waWxlcjo6
flJlY29tcGlsZXIoKQogICAgIC8vIEphdmFTY3JpcHQgaW4gdGhlIGluc3BlY3Rvci4KICAgICBT
b3VyY2VQcm92aWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9zb3VyY2VQcm92aWRlcnMu
ZW5kKCk7CiAgICAgZm9yIChTb3VyY2VQcm92aWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9
IG1fc291cmNlUHJvdmlkZXJzLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCi0gICAgICAg
IG1fZGVidWdnZXItPnNvdXJjZVBhcnNlZChpdGVyLT5zZWNvbmQsIGl0ZXItPmZpcnN0LCAtMSwg
U3RyaW5nKCkpOworICAgICAgICBtX2RlYnVnZ2VyLT5zb3VyY2VQYXJzZWQoaXRlci0+dmFsdWUs
IGl0ZXItPmtleSwgLTEsIFN0cmluZygpKTsKIH0KIAogaW5saW5lIHZvaWQgUmVjb21waWxlcjo6
b3BlcmF0b3IoKShKU0NlbGwqIGNlbGwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAppbmRleCBi
YTY2NzM5NjMzODJkZDYwMTkwMjMzZjc2ZWJmMzIwMGNiOTVmODk3Li5hOTU5MmU3YTk4M2JjYWY3
YmI1YTQ0OGRlMjlhYzM1YWY0YTU2MDUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKQEAg
LTIxMCw3ICsyMTAsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNYWtl
IHN1cmUgdGhhdCBpZiBpdCdzIGEgdmFyaWFibGUgdGhhdCB3ZSB0aGluayBpcyBhbGlhc2VkIHRv
CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgYXJndW1lbnRzLCB0aGF0IHdlIGtub3cg
dGhhdCBpdCBtaWdodCBhY3R1YWxseSBub3QgYmUuCiAgICAgICAgICAgICAgICAgICAgICAgICBB
cmd1bWVudHNBbGlhc2luZ0RhdGEmIGRhdGEgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT5zZWNvbmQ7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9hcmd1bWVudHNBbGlhc2luZy5maW5kKHZhcmlh
YmxlQWNjZXNzRGF0YSktPnZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXJn
ZU5vbkFyZ3VtZW50c0Fzc2lnbm1lbnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEu
bWVyZ2VDYWxsQ29udGV4dChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjI4LDcgKzIyOCw3IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgIEFyZ3VtZW50c0FsaWFzaW5nRGF0YSYgZGF0YSA9Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRh
KS0+c2Vjb25kOworICAgICAgICAgICAgICAgICAgICAgICAgbV9hcmd1bWVudHNBbGlhc2luZy5m
aW5kKHZhcmlhYmxlQWNjZXNzRGF0YSktPnZhbHVlOwogICAgICAgICAgICAgICAgICAgICBkYXRh
Lm1lcmdlQXJndW1lbnRzQXNzaWdubWVudCgpOwogICAgICAgICAgICAgICAgICAgICAvLyBUaGlz
IGVuc3VyZXMgdGhhdCB0aGUgdmFyaWFibGUncyB1c2VzIGFyZSBpbiB0aGUgc2FtZSBjb250ZXh0
IGFzCiAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBhcmd1bWVudHMgaXQgaXMgYWxpYXNpbmcu
CkBAIC0yNDMsNyArMjQzLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBpZiAodmFy
aWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAgICAgQXJndW1lbnRzQWxpYXNpbmdEYXRhJiBkYXRhID0K
LSAgICAgICAgICAgICAgICAgICAgICAgIG1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJs
ZUFjY2Vzc0RhdGEpLT5zZWNvbmQ7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2FyZ3VtZW50
c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+dmFsdWU7CiAgICAgICAgICAgICAg
ICAgICAgIGRhdGEubWVyZ2VDYWxsQ29udGV4dChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZy
YW1lKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQpAQCAt
MjUzLDcgKzI1Myw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxl
QWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgICAgIEFyZ3VtZW50c0FsaWFzaW5nRGF0YSYgZGF0YSA9Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nl
c3NEYXRhKS0+c2Vjb25kOworICAgICAgICAgICAgICAgICAgICAgICAgbV9hcmd1bWVudHNBbGlh
c2luZy5maW5kKHZhcmlhYmxlQWNjZXNzRGF0YSktPnZhbHVlOwogICAgICAgICAgICAgICAgICAg
ICBkYXRhLm1lcmdlQ2FsbENvbnRleHQobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7
CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAvLyBJZiBhIHZhcmlh
YmxlIGlzIHVzZWQgaW4gYSBmbHVzaCB0aGVuIGJ5IGRlZmluaXRpb24gaXQgZXNjYXBlcy4KQEAg
LTI2Niw3ICsyNjYsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJs
ZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgICAgICBBcmd1bWVudHNBbGlhc2luZ0RhdGEmIGRhdGEgPQotICAg
ICAgICAgICAgICAgICAgICAgICAgbV9hcmd1bWVudHNBbGlhc2luZy5maW5kKHZhcmlhYmxlQWNj
ZXNzRGF0YSktPnNlY29uZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fYXJndW1lbnRzQWxp
YXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT52YWx1ZTsKICAgICAgICAgICAgICAgICAg
ICAgZGF0YS5tZXJnZU5vbkFyZ3VtZW50c0Fzc2lnbm1lbnQoKTsKICAgICAgICAgICAgICAgICAg
ICAgZGF0YS5tZXJnZUNhbGxDb250ZXh0KG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUp
OwogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTM1MCw3ICszNTAsNyBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIEFy
Z3VtZW50c0FsaWFzaW5nRGF0YSYgZGF0YSA9Ci0gICAgICAgICAgICAgICAgICAgIG1fYXJndW1l
bnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT5zZWNvbmQ7CisgICAgICAgICAg
ICAgICAgICAgIG1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT52
YWx1ZTsKICAgICAgICAgICAgICAgICBpZiAoZGF0YS5pc1ZhbGlkKCkpCiAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIApAQCAtMzY5LDcgKzM2OSw3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICBkYXRhTG9nKCJDYXB0dXJlZCIpOwogICAgICAgICAgICAg
ZWxzZSB7CiAgICAgICAgICAgICAgICAgQXJndW1lbnRzQWxpYXNpbmdEYXRhJiBkYXRhID0KLSAg
ICAgICAgICAgICAgICAgICAgbV9hcmd1bWVudHNBbGlhc2luZy5maW5kKHZhcmlhYmxlQWNjZXNz
RGF0YSktPnNlY29uZDsKKyAgICAgICAgICAgICAgICAgICAgbV9hcmd1bWVudHNBbGlhc2luZy5m
aW5kKHZhcmlhYmxlQWNjZXNzRGF0YSktPnZhbHVlOwogICAgICAgICAgICAgICAgIGJvb2wgZmly
c3QgPSB0cnVlOwogICAgICAgICAgICAgICAgIGlmIChkYXRhLmNhbGxDb250ZXh0SXNWYWxpZCgp
KSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICghZmlyc3QpCkBAIC00NDEsNyArNDQxLDcgQEAg
cHVibGljOgogICAgICAgICAgICAgICAgICAgICAvLyB0aGluZ3MuIE5vdGUgYWxzbyB0aGF0IHRo
ZSBTZXRMb2NhbCBzaG91bGQgYmVjb21lIGRlYWQgYXMgc29vbiBhcwogICAgICAgICAgICAgICAg
ICAgICAvLyB3ZSByZXBsYWNlIGFsbCB1c2VzIG9mIHRoaXMgdmFyaWFibGUgd2l0aCBHZXRNeUFy
Z3VtZW50c0xlbmd0aCBhbmQKICAgICAgICAgICAgICAgICAgICAgLy8gR2V0TXlBcmd1bWVudEJ5
VmFsLgotICAgICAgICAgICAgICAgICAgICBBU1NFUlQobV9hcmd1bWVudHNBbGlhc2luZy5maW5k
KHZhcmlhYmxlQWNjZXNzRGF0YSktPnNlY29uZC5pc1ZhbGlkKCkpOworICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQobV9hcmd1bWVudHNBbGlhc2luZy5maW5kKHZhcmlhYmxlQWNjZXNzRGF0YSkt
PnZhbHVlLmlzVmFsaWQoKSk7CiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gdmFyaWFi
bGVBY2Nlc3NEYXRhLT5tZXJnZUlzQXJndW1lbnRzQWxpYXModHJ1ZSk7CiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KQEAgLTY4NSw3ICs2ODUsNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgpKQog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBBcmd1bWVu
dHNBbGlhc2luZ0RhdGEmIGRhdGEgPSBtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVB
Y2Nlc3NEYXRhKS0+c2Vjb25kOworICAgICAgICAgICAgQXJndW1lbnRzQWxpYXNpbmdEYXRhJiBk
YXRhID0gbV9hcmd1bWVudHNBbGlhc2luZy5maW5kKHZhcmlhYmxlQWNjZXNzRGF0YSktPnZhbHVl
OwogICAgICAgICAgICAgZGF0YS5lc2NhcGVzID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CkBAIC03MzQsNyArNzM0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKHZhcmlh
YmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAKLSAgICAgICAgQXJndW1lbnRzQWxpYXNpbmdEYXRhJiBkYXRhID0gbV9hcmd1bWVudHNBbGlh
c2luZy5maW5kKHZhcmlhYmxlQWNjZXNzRGF0YSktPnNlY29uZDsKKyAgICAgICAgQXJndW1lbnRz
QWxpYXNpbmdEYXRhJiBkYXRhID0gbV9hcmd1bWVudHNBbGlhc2luZy5maW5kKHZhcmlhYmxlQWNj
ZXNzRGF0YSktPnZhbHVlOwogICAgICAgICBkYXRhLm1lcmdlQ2FsbENvbnRleHQobm9kZS5jb2Rl
T3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CiAgICAgfQogICAgIApAQCAtNzU2LDcgKzc1Niw3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVk
KCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBBcmd1bWVudHNBbGlhc2lu
Z0RhdGEmIGRhdGEgPQotICAgICAgICAgICAgICAgIG1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2
YXJpYWJsZUFjY2Vzc0RhdGEpLT5zZWNvbmQ7CisgICAgICAgICAgICAgICAgbV9hcmd1bWVudHNB
bGlhc2luZy5maW5kKHZhcmlhYmxlQWNjZXNzRGF0YSktPnZhbHVlOwogICAgICAgICAgICAgaWYg
KCFkYXRhLmlzVmFsaWQoKSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAKQEAgLTc5Miw3ICs3OTIsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgICYmICFtX2NyZWF0ZXNBcmd1bWVudHMuY29udGFpbnMoY2hpbGQuY29kZU9yaWdpbi5pbmxp
bmVDYWxsRnJhbWUpOwogICAgICAgICAgICAgYm9vbCBpc0FsaWFzZWRBcmd1bWVudHNSZWdpc3Rl
ciA9CiAgICAgICAgICAgICAgICAgIXZhcmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgpCi0g
ICAgICAgICAgICAgICAgJiYgbV9hcmd1bWVudHNBbGlhc2luZy5maW5kKHZhcmlhYmxlQWNjZXNz
RGF0YSktPnNlY29uZC5pc1ZhbGlkKCkKKyAgICAgICAgICAgICAgICAmJiBtX2FyZ3VtZW50c0Fs
aWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+dmFsdWUuaXNWYWxpZCgpCiAgICAgICAg
ICAgICAgICAgJiYgIW1fY3JlYXRlc0FyZ3VtZW50cy5jb250YWlucyhjaGlsZC5jb2RlT3JpZ2lu
LmlubGluZUNhbGxGcmFtZSk7CiAgICAgICAgICAgICBpZiAoIWlzRGVhZEFyZ3VtZW50c1JlZ2lz
dGVyICYmICFpc0FsaWFzZWRBcmd1bWVudHNSZWdpc3RlcikKICAgICAgICAgICAgICAgICBicmVh
azsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXNzZW1ibHlIZWxw
ZXJzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXNzZW1ibHlIZWxwZXJzLmNw
cAppbmRleCA3Nzk5ZWU1MDU5MzVhZDRlMTNiYzNjZTE4ZDBiNzMyYTNhYTQyOTZlLi5iNWI2Njg0
MThhNjNhN2M5NDRkZjVkYzQ3YTYwNGIxZTUzNTc0MWQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBc3NlbWJseUhlbHBlcnMuY3BwCkBAIC00OSw5ICs0OSw5IEBAIFZl
Y3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+JiBBc3NlbWJseUhlbHBlcnM6OmRlY29kZWRD
b2RlTWFwRm9yKENvZGVCbG9jayoKICAgICBIYXNoTWFwPENvZGVCbG9jayosIFZlY3RvcjxCeXRl
Y29kZUFuZE1hY2hpbmVPZmZzZXQ+ID46OkFkZFJlc3VsdCByZXN1bHQgPSBtX2RlY29kZWRDb2Rl
TWFwcy5hZGQoY29kZUJsb2NrLCBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PigpKTsK
ICAgICAKICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIGNvZGVCbG9jay0+aml0
Q29kZU1hcCgpLT5kZWNvZGUocmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOworICAgICAgICBjb2Rl
QmxvY2stPmppdENvZGVNYXAoKS0+ZGVjb2RlKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwogICAg
IAotICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICByZXR1cm4gcmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIAogI2lmIEVOQUJMRShTQU1QTElOR19GTEFHUykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVDYWNoZS5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZUNhY2hlLmgKaW5kZXggYWI4OGU5OWU1
YjdhMGExYWM1NDUyYzVjOTYzNWZlZWYwMjFlZDAwZi4uNmI5MDU2ZTU0YTE4YzZiZmQwMDEzMDNi
OGY0ZTRlZTY1YWQwNjRjNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZUNhY2hlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRl
Q29kZUNhY2hlLmgKQEAgLTEzMiwxMCArMTMyLDEwIEBAIHB1YmxpYzoKICAgICAgICAgTWFwOjpp
dGVyYXRvciBiZWdpbiA9IG1fbWFwLmJlZ2luKCk7CiAgICAgICAgIE1hcDo6aXRlcmF0b3IgZW5k
ID0gbV9tYXAuZW5kKCk7CiAgICAgICAgIGZvciAoTWFwOjppdGVyYXRvciBpdGVyID0gYmVnaW47
IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKLSAgICAgICAgICAgIGlmICghaXRlci0+c2Vjb25kLmNv
ZGVCbG9jaykKKyAgICAgICAgICAgIGlmICghaXRlci0+dmFsdWUuY29kZUJsb2NrKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKGl0ZXItPnNlY29uZC5vd25lZCkg
ewotICAgICAgICAgICAgICAgIGRlbGV0ZSBpdGVyLT5zZWNvbmQuY29kZUJsb2NrOworICAgICAg
ICAgICAgaWYgKGl0ZXItPnZhbHVlLm93bmVkKSB7CisgICAgICAgICAgICAgICAgZGVsZXRlIGl0
ZXItPnZhbHVlLmNvZGVCbG9jazsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQpAQCAtMTQ1LDcgKzE0NSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAg
ICAgIE1hcDo6aXRlcmF0b3IgaXRlciA9IG1fbWFwLmZpbmQoa2V5KTsKICAgICAgICAgaWYgKGl0
ZXIgIT0gbV9tYXAuZW5kKCkpCi0gICAgICAgICAgICByZXR1cm4gaXRlci0+c2Vjb25kLmNvZGVC
bG9jazsKKyAgICAgICAgICAgIHJldHVybiBpdGVyLT52YWx1ZS5jb2RlQmxvY2s7CiAgICAgICAg
IAogICAgICAgICBCeXRlQ29kZUNhY2hlVmFsdWUgdmFsdWU7CiAgICAgICAgIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAppbmRleCBmYjg5N2Zm
NWI5MzhkZTdlZTQwNDFiMDJjNThlZmNhYzk0ODRlNjE2Li4wMzlmY2ZiNTZlYjBhYTkzMDEyOThj
ZTA0Y2U3MTI4ZTdmMGU1Y2ZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcApAQCAtNjY2LDkgKzY2Niw5IEBAIHByaXZhdGU6CiAgICAgewog
ICAgICAgICBIYXNoTWFwPEpTQ2VsbCosIE5vZGVJbmRleD46OkFkZFJlc3VsdCByZXN1bHQgPSBt
X2NlbGxDb25zdGFudE5vZGVzLmFkZChjZWxsLCBOb05vZGUpOwogICAgICAgICBpZiAocmVzdWx0
LmlzTmV3RW50cnkpCi0gICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IGFkZFRv
R3JhcGgoV2Vha0pTQ29uc3RhbnQsIE9wSW5mbyhjZWxsKSk7CisgICAgICAgICAgICByZXN1bHQu
aXRlcmF0b3ItPnZhbHVlID0gYWRkVG9HcmFwaChXZWFrSlNDb25zdGFudCwgT3BJbmZvKGNlbGwp
KTsKICAgICAgICAgCi0gICAgICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAgICAgfQogICAgIAogICAgIENv
ZGVPcmlnaW4gY3VycmVudENvZGVPcmlnaW4oKQpAQCAtMzIyNSw3ICszMjI1LDcgQEAgQnl0ZUNv
ZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZVN0YWNrRW50cnkoCiAgICAgICAgICAg
ICBJZGVudGlmaWVyTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gYnl0ZUNvZGVQYXJzZXItPm1faWRl
bnRpZmllck1hcC5hZGQocmVwLCBieXRlQ29kZVBhcnNlci0+bV9jb2RlQmxvY2stPm51bWJlck9m
SWRlbnRpZmllcnMoKSk7CiAgICAgICAgICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpCiAgICAg
ICAgICAgICAgICAgYnl0ZUNvZGVQYXJzZXItPm1fY29kZUJsb2NrLT5hZGRJZGVudGlmaWVyKElk
ZW50aWZpZXIoYnl0ZUNvZGVQYXJzZXItPm1fZ2xvYmFsRGF0YSwgcmVwKSk7Ci0gICAgICAgICAg
ICBtX2lkZW50aWZpZXJSZW1hcFtpXSA9IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgICAg
ICAgICAgbV9pZGVudGlmaWVyUmVtYXBbaV0gPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogICAg
ICAgICB9CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29kZUJsb2NrLT5udW1iZXJP
ZkNvbnN0YW50UmVnaXN0ZXJzKCk7ICsraSkgewogICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9
IGNvZGVCbG9jay0+Z2V0Q29uc3RhbnQoaSArIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsK
QEAgLTMyNDMsNyArMzI0Myw3IEBAIEJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJ
bmxpbmVTdGFja0VudHJ5KAogICAgICAgICAgICAgICAgIGJ5dGVDb2RlUGFyc2VyLT5tX2NvZGVC
bG9jay0+YWRkQ29uc3RhbnQodmFsdWUpOwogICAgICAgICAgICAgICAgIGJ5dGVDb2RlUGFyc2Vy
LT5tX2NvbnN0YW50cy5hcHBlbmQoQ29uc3RhbnRSZWNvcmQoKSk7CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBtX2NvbnN0YW50UmVtYXBbaV0gPSByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsK
KyAgICAgICAgICAgIG1fY29uc3RhbnRSZW1hcFtpXSA9IHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7
CiAgICAgICAgIH0KICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvZGVCbG9jay0+
bnVtYmVyT2ZHbG9iYWxSZXNvbHZlSW5mb3MoKTsgKytpKQogICAgICAgICAgICAgYnl0ZUNvZGVQ
YXJzZXItPm1fY29kZUJsb2NrLT5hZGRHbG9iYWxSZXNvbHZlSW5mbyhzdGQ6Om51bWVyaWNfbGlt
aXRzPHVuc2lnbmVkPjo6bWF4KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCmluZGV4IDA4Mzhi
YjdlNWVhNTY5MzRmYTk0ZWE1Nzg5YzNiNzMxZWZkMGNlZmMuLjcyYzI1ZTRhYjc4YmM3NjRlY2Rh
MGIxM2I0ZGM1Nzk1OTJmYTNlZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAKQEAgLTE2Miw3
ICsxNjIsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBkYXRhTG9nKCJaZXJvaW5nIHRoZSBzdHJ1
Y3R1cmUgdG8gaG9pc3QgZm9yICVzIGJlY2F1c2UgdGhlIHJhdGlvIGlzICVsZi5cbiIsCiAgICAg
ICAgICAgICAgICAgICAgIG1fZ3JhcGgubmFtZU9mVmFyaWFibGVBY2Nlc3NEYXRhKHZhcmlhYmxl
KSwgdmFyaWFibGUtPnZvdGVSYXRpbygpKTsKICNlbmRpZgotICAgICAgICAgICAgaXRlci0+c2Vj
b25kLm1fc3RydWN0dXJlID0gMDsKKyAgICAgICAgICAgIGl0ZXItPnZhbHVlLm1fc3RydWN0dXJl
ID0gMDsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gRGlzYWJsZSBzdHJ1Y3R1cmUg
Y2hlY2sgaG9pc3RpbmcgZm9yIHZhcmlhYmxlcyB0aGF0IGNyb3NzIHRoZSBPU1IgZW50cnkgdGhh
dApAQCAtMTg3LDcgKzE4Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBIYXNoTWFwPFZh
cmlhYmxlQWNjZXNzRGF0YSosIENoZWNrRGF0YT46Oml0ZXJhdG9yIGl0ZXIgPSBtX21hcC5maW5k
KHZhcmlhYmxlKTsKICAgICAgICAgICAgICAgICBpZiAoaXRlciA9PSBtX21hcC5lbmQoKSkKICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgaWYgKCFpdGVyLT5z
ZWNvbmQubV9zdHJ1Y3R1cmUpCisgICAgICAgICAgICAgICAgaWYgKCFpdGVyLT52YWx1ZS5tX3N0
cnVjdHVyZSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAg
SlNWYWx1ZSB2YWx1ZSA9IG1fZ3JhcGgubV9tdXN0SGFuZGxlVmFsdWVzW2ldOwogICAgICAgICAg
ICAgICAgIGlmICghdmFsdWUgfHwgIXZhbHVlLmlzQ2VsbCgpKSB7CkBAIC0xOTUsMTUgKzE5NSwx
NSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIlplcm9pbmcgdGhlIHN0
cnVjdHVyZSB0byBob2lzdCBmb3IgJXMgYmVjYXVzZSB0aGUgT1NSIGVudHJ5IHZhbHVlIGlzIG5v
dCBhIGNlbGw6ICVzLlxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm5h
bWVPZlZhcmlhYmxlQWNjZXNzRGF0YSh2YXJpYWJsZSksIHZhbHVlLmRlc2NyaXB0aW9uKCkpOwog
I2VuZGlmCi0gICAgICAgICAgICAgICAgICAgIGl0ZXItPnNlY29uZC5tX3N0cnVjdHVyZSA9IDA7
CisgICAgICAgICAgICAgICAgICAgIGl0ZXItPnZhbHVlLm1fc3RydWN0dXJlID0gMDsKICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGlmICh2YWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCkgIT0gaXRlci0+c2Vjb25kLm1fc3Ry
dWN0dXJlKSB7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUo
KSAhPSBpdGVyLT52YWx1ZS5tX3N0cnVjdHVyZSkgewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJP
UEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiWmVyb2luZyB0
aGUgc3RydWN0dXJlIHRvIGhvaXN0IGZvciAlcyBiZWNhdXNlIHRoZSBPU1IgZW50cnkgdmFsdWUg
aGFzIHN0cnVjdHVyZSAlcCBhbmQgd2Ugd2FudGVkICVwLlxuIiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX2dyYXBoLm5hbWVPZlZhcmlhYmxlQWNjZXNzRGF0YSh2YXJpYWJsZSksIHZh
bHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKSwgaXRlci0+c2Vjb25kLm1fc3RydWN0dXJlKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm5hbWVPZlZhcmlhYmxlQWNjZXNzRGF0
YSh2YXJpYWJsZSksIHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKSwgaXRlci0+dmFsdWUubV9z
dHJ1Y3R1cmUpOwogI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgIGl0ZXItPnNlY29uZC5tX3N0
cnVjdHVyZSA9IDA7CisgICAgICAgICAgICAgICAgICAgIGl0ZXItPnZhbHVlLm1fc3RydWN0dXJl
ID0gMDsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQpAQCAtMzMwLDE1ICszMzAsMTUgQEAgcHVibGljOgogI2lmIERGR19FTkFC
TEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgZm9yIChIYXNoTWFwPFZhcmlh
YmxlQWNjZXNzRGF0YSosIENoZWNrRGF0YT46Oml0ZXJhdG9yIGl0ID0gbV9tYXAuYmVnaW4oKTsK
ICAgICAgICAgICAgICBpdCAhPSBtX21hcC5lbmQoKTsgKytpdCkgewotICAgICAgICAgICAgaWYg
KCFpdC0+c2Vjb25kLm1fc3RydWN0dXJlKSB7Ci0gICAgICAgICAgICAgICAgZGF0YUxvZygiTm90
IGhvaXN0aW5nIGNoZWNrcyBmb3IgJXMgYmVjYXVzZSBvZiBoZXVyaXN0aWNzLlxuIiwgbV9ncmFw
aC5uYW1lT2ZWYXJpYWJsZUFjY2Vzc0RhdGEoaXQtPmZpcnN0KSk7CisgICAgICAgICAgICBpZiAo
IWl0LT52YWx1ZS5tX3N0cnVjdHVyZSkgeworICAgICAgICAgICAgICAgIGRhdGFMb2coIk5vdCBo
b2lzdGluZyBjaGVja3MgZm9yICVzIGJlY2F1c2Ugb2YgaGV1cmlzdGljcy5cbiIsIG1fZ3JhcGgu
bmFtZU9mVmFyaWFibGVBY2Nlc3NEYXRhKGl0LT5rZXkpKTsKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpdC0+c2Vjb25kLm1faXNDbG9i
YmVyZWQgJiYgIWl0LT5zZWNvbmQubV9zdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0
SXNTdGlsbFZhbGlkKCkpIHsKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCJOb3QgaG9pc3Rpbmcg
Y2hlY2tzIGZvciAlcyBiZWNhdXNlIHRoZSBzdHJ1Y3R1cmUgaXMgY2xvYmJlcmVkIGFuZCBoYXMg
YW4gaW52YWxpZCB3YXRjaHBvaW50IHNldC5cbiIsIG1fZ3JhcGgubmFtZU9mVmFyaWFibGVBY2Nl
c3NEYXRhKGl0LT5maXJzdCkpOworICAgICAgICAgICAgaWYgKGl0LT52YWx1ZS5tX2lzQ2xvYmJl
cmVkICYmICFpdC0+dmFsdWUubV9zdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SXNT
dGlsbFZhbGlkKCkpIHsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJOb3QgaG9pc3RpbmcgY2hl
Y2tzIGZvciAlcyBiZWNhdXNlIHRoZSBzdHJ1Y3R1cmUgaXMgY2xvYmJlcmVkIGFuZCBoYXMgYW4g
aW52YWxpZCB3YXRjaHBvaW50IHNldC5cbiIsIG1fZ3JhcGgubmFtZU9mVmFyaWFibGVBY2Nlc3NE
YXRhKGl0LT5rZXkpKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGRhdGFMb2coIkhvaXN0aW5nIGNoZWNrcyBmb3IgJXNcbiIsIG1fZ3JhcGgu
bmFtZU9mVmFyaWFibGVBY2Nlc3NEYXRhKGl0LT5maXJzdCkpOworICAgICAgICAgICAgZGF0YUxv
ZygiSG9pc3RpbmcgY2hlY2tzIGZvciAlc1xuIiwgbV9ncmFwaC5uYW1lT2ZWYXJpYWJsZUFjY2Vz
c0RhdGEoaXQtPmtleSkpOwogICAgICAgICB9CiAjZW5kaWYgLy8gREZHX0VOQUJMRShERUJVR19Q
Uk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICAKQEAgLTM3Myw5ICszNzMsOSBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAgICAgICAgIEhhc2hNYXA8VmFyaWFibGVBY2Nlc3NEYXRhKiwgQ2hlY2tE
YXRhPjo6aXRlcmF0b3IgaXRlciA9IG1fbWFwLmZpbmQodmFyaWFibGUpOwogICAgICAgICAgICAg
ICAgICAgICBpZiAoaXRlciA9PSBtX21hcC5lbmQoKSkKICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWl0ZXItPnNlY29uZC5tX3N0cnVjdHVy
ZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpdGVyLT52YWx1ZS5tX3N0cnVjdHVyZSkKICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBpZiAoaXRl
ci0+c2Vjb25kLm1faXNDbG9iYmVyZWQgJiYgIWl0ZXItPnNlY29uZC5tX3N0cnVjdHVyZS0+dHJh
bnNpdGlvbldhdGNocG9pbnRTZXRJc1N0aWxsVmFsaWQoKSkKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGl0ZXItPnZhbHVlLm1faXNDbG9iYmVyZWQgJiYgIWl0ZXItPnZhbHVlLm1fc3RydWN0dXJl
LT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldElzU3RpbGxWYWxpZCgpKQogICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAg
ICBub2RlLnJlZigpOwpAQCAtMzg5LDcgKzM4OSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAg
ICAgICAgbV9ncmFwaC5hcHBlbmQoZ2V0TG9jYWwpOwogICAgICAgICAgICAgICAgICAgICBpbnNl
cnRpb25TZXQuYXBwZW5kKGluZGV4SW5CbG9jayArIDEsIGdldExvY2FsSW5kZXgpOwogICAgICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgTm9kZSBjaGVja1N0cnVjdHVyZShD
aGVja1N0cnVjdHVyZSwgY29kZU9yaWdpbiwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0
KGl0ZXItPnNlY29uZC5tX3N0cnVjdHVyZSkpLCBnZXRMb2NhbEluZGV4KTsKKyAgICAgICAgICAg
ICAgICAgICAgTm9kZSBjaGVja1N0cnVjdHVyZShDaGVja1N0cnVjdHVyZSwgY29kZU9yaWdpbiwg
T3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KGl0ZXItPnZhbHVlLm1fc3RydWN0dXJlKSks
IGdldExvY2FsSW5kZXgpOwogICAgICAgICAgICAgICAgICAgICBjaGVja1N0cnVjdHVyZS5yZWYo
KTsKICAgICAgICAgICAgICAgICAgICAgTm9kZUluZGV4IGNoZWNrU3RydWN0dXJlSW5kZXggPSBt
X2dyYXBoLnNpemUoKTsKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5hcHBlbmQoY2hlY2tT
dHJ1Y3R1cmUpOwpAQCAtNDA5LDkgKzQwOSw5IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAg
ICAgSGFzaE1hcDxWYXJpYWJsZUFjY2Vzc0RhdGEqLCBDaGVja0RhdGE+OjppdGVyYXRvciBpdGVy
ID0gbV9tYXAuZmluZCh2YXJpYWJsZSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVyID09
IG1fbWFwLmVuZCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmICghaXRlci0+c2Vjb25kLm1fc3RydWN0dXJlKQorICAgICAgICAgICAgICAg
ICAgICBpZiAoIWl0ZXItPnZhbHVlLm1fc3RydWN0dXJlKQogICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpdGVyLT5zZWNvbmQubV9pc0Nsb2Ji
ZXJlZCAmJiAhaXRlci0+c2Vjb25kLm1fc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNl
dElzU3RpbGxWYWxpZCgpKQorICAgICAgICAgICAgICAgICAgICBpZiAoaXRlci0+dmFsdWUubV9p
c0Nsb2JiZXJlZCAmJiAhaXRlci0+dmFsdWUubV9zdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBv
aW50U2V0SXNTdGlsbFZhbGlkKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAog
ICAgICAgICAgICAgICAgICAgICAvLyBGaXJzdCBpbnNlcnQgYSBkZWFkIFNldExvY2FsIHRvIHRl
bGwgT1NSIHRoYXQgdGhlIGNoaWxkJ3MgdmFsdWUgc2hvdWxkCkBAIC00MjgsNyArNDI4LDcgQEAg
cHVibGljOgogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoW2NoaWxkMV0ucmVmKCk7CiAgICAg
ICAgICAgICAgICAgICAgIC8vIFVzZSBhIEZvcndhcmRDaGVja1N0cnVjdHVyZSB0byBpbmRpY2F0
ZSB0aGF0IHdlIHNob3VsZCBleGl0IHRvIHRoZQogICAgICAgICAgICAgICAgICAgICAvLyBuZXh0
IGJ5dGVjb2RlIGluc3RydWN0aW9uIHJhdGhlciB0aGFuIHJlZXhlY3V0aW5nIHRoZSBjdXJyZW50
IG9uZS4KLSAgICAgICAgICAgICAgICAgICAgTm9kZSBjaGVja1N0cnVjdHVyZShGb3J3YXJkQ2hl
Y2tTdHJ1Y3R1cmUsIGNvZGVPcmlnaW4sIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChp
dGVyLT5zZWNvbmQubV9zdHJ1Y3R1cmUpKSwgY2hpbGQxKTsKKyAgICAgICAgICAgICAgICAgICAg
Tm9kZSBjaGVja1N0cnVjdHVyZShGb3J3YXJkQ2hlY2tTdHJ1Y3R1cmUsIGNvZGVPcmlnaW4sIE9w
SW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChpdGVyLT52YWx1ZS5tX3N0cnVjdHVyZSkpLCBj
aGlsZDEpOwogICAgICAgICAgICAgICAgICAgICBjaGVja1N0cnVjdHVyZS5yZWYoKTsKICAgICAg
ICAgICAgICAgICAgICAgTm9kZUluZGV4IGNoZWNrU3RydWN0dXJlSW5kZXggPSBtX2dyYXBoLnNp
emUoKTsKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5hcHBlbmQoY2hlY2tTdHJ1Y3R1cmUp
OwpAQCAtNDQ0LDE2ICs0NDQsMTYgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBIYXNo
TWFwPFZhcmlhYmxlQWNjZXNzRGF0YSosIENoZWNrRGF0YT46Oml0ZXJhdG9yIGl0ZXIgPSBtX21h
cC5maW5kKGNoaWxkLnZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKICAgICAgICAgICAgICAgICAgICAg
aWYgKGl0ZXIgPT0gbV9tYXAuZW5kKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKCFpdGVyLT5zZWNvbmQubV9zdHJ1Y3R1cmUpCisgICAg
ICAgICAgICAgICAgICAgIGlmICghaXRlci0+dmFsdWUubV9zdHJ1Y3R1cmUpCiAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpdGVyLT5zZWNv
bmQubV9pc0Nsb2JiZXJlZCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIWl0ZXItPnZhbHVl
Lm1faXNDbG9iYmVyZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0T3BBbmRE
ZWZhdWx0RmxhZ3MoUGhhbnRvbSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQobm9k
ZS5yZWZDb3VudCgpID09IDEpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpdGVyLT5zZWNvbmQu
bV9zdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SXNTdGlsbFZhbGlkKCkpCisgICAg
ICAgICAgICAgICAgICAgIGlmICghaXRlci0+dmFsdWUubV9zdHJ1Y3R1cmUtPnRyYW5zaXRpb25X
YXRjaHBvaW50U2V0SXNTdGlsbFZhbGlkKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGl0ZXItPnNlY29uZC5tX3N0cnVjdHVyZSA9
PSBub2RlLnN0cnVjdHVyZVNldCgpLnNpbmdsZXRvblN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKGl0ZXItPnZhbHVlLm1fc3RydWN0dXJlID09IG5vZGUuc3RydWN0dXJl
U2V0KCkuc2luZ2xldG9uU3RydWN0dXJlKCkpOwogICAgICAgICAgICAgICAgICAgICBub2RlLmNv
bnZlcnRUb1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KCk7CiAgICAgICAgICAgICAgICAg
ICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTQ3Niw5
ICs0NzYsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9tYXAuYWRkKHZhcmlhYmxlLCBDaGVj
a0RhdGEoc3RydWN0dXJlLCBmYWxzZSkpOwogICAgICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkp
CiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChyZXN1bHQuaXRlcmF0b3ItPnNlY29u
ZC5tX3N0cnVjdHVyZSA9PSBzdHJ1Y3R1cmUpCisgICAgICAgIGlmIChyZXN1bHQuaXRlcmF0b3It
PnZhbHVlLm1fc3RydWN0dXJlID09IHN0cnVjdHVyZSkKICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQubV9zdHJ1Y3R1cmUgPSAwOworICAgICAgICBy
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlLm1fc3RydWN0dXJlID0gMDsKICAgICB9CiAgICAgCiAgICAg
dm9pZCBub3RpY2VTdHJ1Y3R1cmVDaGVjayhWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlLCBj
b25zdCBTdHJ1Y3R1cmVTZXQmIHNldCkKQEAgLTQ5Niw3ICs0OTYsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgbV9tYXAuZmluZCh2YXJpYWJsZSk7CiAgICAgICAgIGlmIChpdGVyID09IG1fbWFw
LmVuZCgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpdGVyLT5zZWNvbmQubV9pc0Ns
b2JiZXJlZCA9IHRydWU7CisgICAgICAgIGl0ZXItPnZhbHVlLm1faXNDbG9iYmVyZWQgPSB0cnVl
OwogICAgIH0KICAgICAKICAgICB2b2lkIGNsb2JiZXIoY29uc3QgT3BlcmFuZHM8VmFyaWFibGVB
Y2Nlc3NEYXRhKj4mIGxpdmUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCmluZGV4IGM3
ZmI4YzAxNWUxY2RkMDQzM2VlMTUzODE0ZDhlMzc3YmY4ZmIyZGQuLjE4YzdiNTA0MTU1ZWFmODRi
OWRmYmQ5MGQ2MzFjNmQyYTFkMmExNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXAuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3Bw
CkBAIC0zNDUsNyArMzQ1LDcgQEAgdm9pZCBIZWFwOjptYXJrUHJvdGVjdGVkT2JqZWN0cyhIZWFw
Um9vdFZpc2l0b3ImIGhlYXBSb290VmlzaXRvcikKIHsKICAgICBQcm90ZWN0Q291bnRTZXQ6Oml0
ZXJhdG9yIGVuZCA9IG1fcHJvdGVjdGVkVmFsdWVzLmVuZCgpOwogICAgIGZvciAoUHJvdGVjdENv
dW50U2V0OjppdGVyYXRvciBpdCA9IG1fcHJvdGVjdGVkVmFsdWVzLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkKLSAgICAgICAgaGVhcFJvb3RWaXNpdG9yLnZpc2l0KCZpdC0+Zmlyc3QpOworICAg
ICAgICBoZWFwUm9vdFZpc2l0b3IudmlzaXQoJml0LT5rZXkpOwogfQogCiB2b2lkIEhlYXA6OnB1
c2hUZW1wU29ydFZlY3RvcihWZWN0b3I8VmFsdWVTdHJpbmdQYWlyPiogdGVtcFZlY3RvcikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXAuaAppbmRleCBjOWJiZWMxZjZjODE3NzAwZDRlOGI1YmNmZmVj
NzUyZTNkNWNhMDE5Li43YmY2YTI1NDA1ZjVkNThkMGY5OGE3NzYzOGNiMTZhNjgyZjMyZjYxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCkBAIC0zNDksNyArMzQ5LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgewogICAgICAgICBQcm90ZWN0Q291bnRTZXQ6Oml0ZXJhdG9yIGVuZCA9IG1f
cHJvdGVjdGVkVmFsdWVzLmVuZCgpOwogICAgICAgICBmb3IgKFByb3RlY3RDb3VudFNldDo6aXRl
cmF0b3IgaXQgPSBtX3Byb3RlY3RlZFZhbHVlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0g
ICAgICAgICAgICBmdW5jdG9yKGl0LT5maXJzdCk7CisgICAgICAgICAgICBmdW5jdG9yKGl0LT5r
ZXkpOwogICAgICAgICBtX2hhbmRsZVNldC5mb3JFYWNoU3Ryb25nSGFuZGxlKGZ1bmN0b3IsIG1f
cHJvdGVjdGVkVmFsdWVzKTsKIAogICAgICAgICByZXR1cm4gZnVuY3Rvci5yZXR1cm5WYWx1ZSgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSklUU3R1YlJvdXRpbmVT
ZXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSklUU3R1YlJvdXRpbmVTZXQuY3Bw
CmluZGV4IDVlNGNhMzZlMDM3OGQxYzhjNzA0MTBlNzg3NzViZmQyOWVkN2RlYjQuLmEzN2RjNmY1
Y2U0NGFhNDE1YTU3MTFkYjdhZjM4NGI5MzNlZDYxNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9KSVRTdHViUm91dGluZVNldC5jcHAKQEAgLTgyLDcgKzgyLDcgQEAgdm9p
ZCBKSVRTdHViUm91dGluZVNldDo6bWFya1Nsb3codWludHB0cl90IGFkZHJlc3MpCiAgICAgaWYg
KGl0ZXIgPT0gbV9hZGRyZXNzVG9Sb3V0aW5lTWFwLmVuZCgpKQogICAgICAgICByZXR1cm47CiAg
ICAgCi0gICAgaXRlci0+c2Vjb25kLT5tX21heUJlRXhlY3V0aW5nID0gdHJ1ZTsKKyAgICBpdGVy
LT52YWx1ZS0+bV9tYXlCZUV4ZWN1dGluZyA9IHRydWU7CiB9CiAKIHZvaWQgSklUU3R1YlJvdXRp
bmVTZXQ6OmRlbGV0ZVVubWFya2VkSmV0dGlzb25lZFN0dWJSb3V0aW5lcygpCkBAIC05Nyw3ICs5
Nyw3IEBAIHZvaWQgSklUU3R1YlJvdXRpbmVTZXQ6OmRlbGV0ZVVubWFya2VkSmV0dGlzb25lZFN0
dWJSb3V0aW5lcygpCiAgICAgICAgIHVpbnRwdHJfdCBzdGVwID0gSklUU3R1YlJvdXRpbmU6OmFk
ZHJlc3NTdGVwKCk7CiAgICAgICAgIGZvciAodWludHB0cl90IGl0ZXIgPSBzdGFydDsgaXRlciA8
IGVuZDsgaXRlciArPSBzdGVwKSB7CiAgICAgICAgICAgICBBU1NFUlQobV9hZGRyZXNzVG9Sb3V0
aW5lTWFwLmZpbmQoaXRlcikgIT0gbV9hZGRyZXNzVG9Sb3V0aW5lTWFwLmVuZCgpKTsKLSAgICAg
ICAgICAgIEFTU0VSVChtX2FkZHJlc3NUb1JvdXRpbmVNYXAuZmluZChpdGVyKS0+c2Vjb25kID09
IHJvdXRpbmUpOworICAgICAgICAgICAgQVNTRVJUKG1fYWRkcmVzc1RvUm91dGluZU1hcC5maW5k
KGl0ZXIpLT52YWx1ZSA9PSByb3V0aW5lKTsKICAgICAgICAgICAgIG1fYWRkcmVzc1RvUm91dGlu
ZU1hcC5yZW1vdmUoaXRlcik7CiAgICAgICAgIH0KICAgICAgICAgCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAKaW5kZXggMGYwMDNlNzlkNmFiOTA4MDYxMTgxN2Vi
YzU4NGQ2ZTBhNTlhZGRmNC4uNDlmZjhkNzE2MDkxODM0ZTBhMjJkODBmMWEzZTEwNDAyMzZjYTUz
NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcApAQCAtMzIw
LDcgKzMyMCw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6aW50ZXJuYWxBcHBl
bmQoSlNWYWx1ZSogc2xvdCkKICAgICAgICAgICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkK
ICAgICAgICAgICAgICAgICBzdHJpbmctPnNldEhhc2hDb25zdFNpbmdsZXRvbigpOwogICAgICAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSBleGlzdGluZ0pTVmFsdWUgPSBh
ZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIGV4aXN0
aW5nSlNWYWx1ZSA9IGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgICAgICAgICAg
aWYgKHZhbHVlICE9IGV4aXN0aW5nSlNWYWx1ZSkKICAgICAgICAgICAgICAgICAgICAganNDYXN0
PEpTU3RyaW5nKj4oZXhpc3RpbmdKU1ZhbHVlLmFzQ2VsbCgpKS0+Y2xlYXJIYXNoQ29uc3RTaW5n
bGV0b24oKTsKICAgICAgICAgICAgICAgICAqc2xvdCA9IGV4aXN0aW5nSlNWYWx1ZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWsuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1dlYWsuaAppbmRleCAwNzY5OGZkMDZiMDZjNzUwMTRiYjY1YmYyNWZjMzFj
MjhhOWEwNjg0Li4zYzNkMWQwY2VmZTE4MTI2NTljNWZhNzNjNzRkMTk5NDhjMThmZmViIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvV2Vhay5oCkBAIC0xNjQsOCArMTY0LDggQEAgdGVtcGxhdGU8dHlw
ZW5hbWUgTWFwLCB0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlPiBpbmxpbmUgdm9pZCB3ZWFr
UmVtb3ZlKE1hcCYKICAgICB0eXBlbmFtZSBNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLmZpbmQoa2V5
KTsKICAgICBBU1NFUlRfVU5VU0VEKHZhbHVlLCB2YWx1ZSk7CiAgICAgQVNTRVJUKGl0ICE9IG1h
cC5lbmQoKSk7Ci0gICAgQVNTRVJUKGl0LT5zZWNvbmQud2FzKHZhbHVlKSk7Ci0gICAgQVNTRVJU
KCFpdC0+c2Vjb25kKTsKKyAgICBBU1NFUlQoaXQtPnZhbHVlLndhcyh2YWx1ZSkpOworICAgIEFT
U0VSVCghaXQtPnZhbHVlKTsKICAgICBtYXAucmVtb3ZlKGl0KTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuY3BwCmluZGV4IGJmNWFjODhkZDljM2Y0NjYyNzk0OGM1Mzc0ZTRmMTQ0ODNmYzNl
NjYuLjM5ODQ1Mjc3NDg2ODE2MTRmMzI0YmQ5ZDBkZjBhNTY3YmI3YWRkNGMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVC5jcHAKQEAgLTcxNSw4ICs3MTUsOCBAQCBKSVRDb2RlIEpJVDo6cHJpdmF0
ZUNvbXBpbGUoQ29kZVB0ciogZnVuY3Rpb25FbnRyeUFyaXR5Q2hlY2ssIEpJVENvbXBpbGF0aW9u
RWZmbwogCiAgICAgICAgICAgICBTdHJpbmdKdW1wVGFibGU6OlN0cmluZ09mZnNldFRhYmxlOjpp
dGVyYXRvciBlbmQgPSByZWNvcmQuanVtcFRhYmxlLnN0cmluZ0p1bXBUYWJsZS0+b2Zmc2V0VGFi
bGUuZW5kKCk7ICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKFN0cmluZ0p1bXBUYWJsZTo6
U3RyaW5nT2Zmc2V0VGFibGU6Oml0ZXJhdG9yIGl0ID0gcmVjb3JkLmp1bXBUYWJsZS5zdHJpbmdK
dW1wVGFibGUtPm9mZnNldFRhYmxlLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IGl0LT5zZWNvbmQuYnJhbmNoT2Zmc2V0OwotICAg
ICAgICAgICAgICAgIGl0LT5zZWNvbmQuY3RpT2Zmc2V0ID0gb2Zmc2V0ID8gcGF0Y2hCdWZmZXIu
bG9jYXRpb25PZihtX2xhYmVsc1tieXRlY29kZU9mZnNldCArIG9mZnNldF0pIDogcmVjb3JkLmp1
bXBUYWJsZS5zdHJpbmdKdW1wVGFibGUtPmN0aURlZmF1bHQ7CisgICAgICAgICAgICAgICAgdW5z
aWduZWQgb2Zmc2V0ID0gaXQtPnZhbHVlLmJyYW5jaE9mZnNldDsKKyAgICAgICAgICAgICAgICBp
dC0+dmFsdWUuY3RpT2Zmc2V0ID0gb2Zmc2V0ID8gcGF0Y2hCdWZmZXIubG9jYXRpb25PZihtX2xh
YmVsc1tieXRlY29kZU9mZnNldCArIG9mZnNldF0pIDogcmVjb3JkLmp1bXBUYWJsZS5zdHJpbmdK
dW1wVGFibGUtPmN0aURlZmF1bHQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCmluZGV4IGU2M2YwNmNlZjYyNzVhOWQ3
NTVlYmNhZjJkNzI5YTZkMGEwZmVlNmEuLmEyZmJlNzI5ZTU3OGJiODFlYTFlY2JlMmYxOGJjZTEw
ZDA2ODhkZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCkBAIC0zNDE2
LDggKzM0MTYsOCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgSklUVGh1bmtzOjpjdGlTdHViKEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgVGh1bmtHZW5lcmF0bwogewogICAgIENUSVN0dWJNYXA6
OkFkZFJlc3VsdCBlbnRyeSA9IG1fY3RpU3R1Yk1hcC5hZGQoZ2VuZXJhdG9yLCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYoKSk7CiAgICAgaWYgKGVudHJ5LmlzTmV3RW50cnkpCi0gICAgICAgIGVudHJ5
Lml0ZXJhdG9yLT5zZWNvbmQgPSBnZW5lcmF0b3IoZ2xvYmFsRGF0YSk7Ci0gICAgcmV0dXJuIGVu
dHJ5Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgIGVudHJ5Lml0ZXJhdG9yLT52YWx1ZSA9IGdl
bmVyYXRvcihnbG9iYWxEYXRhKTsKKyAgICByZXR1cm4gZW50cnkuaXRlcmF0b3ItPnZhbHVlOwog
fQogCiBOYXRpdmVFeGVjdXRhYmxlKiBKSVRUaHVua3M6Omhvc3RGdW5jdGlvblN0dWIoSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhLCBOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgTmF0aXZlRnVuY3Rp
b24gY29uc3RydWN0b3IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L1BhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAKaW5k
ZXggMzU1NWYwN2NkOTJiYTk2YzZiODk2Njc0MWMzNGUzNGIzMzM0M2Q2MC4uMTQxZmFlN2NjZjM5
NWEyNGVmNDZmY2Y3MzYxZmJkYTYwMDlkZjc2MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvUGFyc2VyLmNwcApAQCAtMTM2NiwxMCArMTM2NiwxMCBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJl
ZUJ1aWxkZXI+IFRyZWVFeHByZXNzaW9uIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZVN0cmljdE9i
amVjdAogICAgICAgICBpZiAoIW1fc3ludGF4QWxyZWFkeVZhbGlkYXRlZCkgewogICAgICAgICAg
ICAgT2JqZWN0VmFsaWRhdGlvbk1hcDo6QWRkUmVzdWx0IHByb3BlcnR5RW50cnkgPSBvYmplY3RW
YWxpZGF0b3IuYWRkKGNvbnRleHQuZ2V0TmFtZShwcm9wZXJ0eSkuaW1wbCgpLCBjb250ZXh0Lmdl
dFR5cGUocHJvcGVydHkpKTsKICAgICAgICAgICAgIGlmICghcHJvcGVydHlFbnRyeS5pc05ld0Vu
dHJ5KSB7Ci0gICAgICAgICAgICAgICAgZmFpbElmVHJ1ZShwcm9wZXJ0eUVudHJ5Lml0ZXJhdG9y
LT5zZWNvbmQgPT0gUHJvcGVydHlOb2RlOjpDb25zdGFudCk7CisgICAgICAgICAgICAgICAgZmFp
bElmVHJ1ZShwcm9wZXJ0eUVudHJ5Lml0ZXJhdG9yLT52YWx1ZSA9PSBQcm9wZXJ0eU5vZGU6OkNv
bnN0YW50KTsKICAgICAgICAgICAgICAgICBmYWlsSWZUcnVlKGNvbnRleHQuZ2V0VHlwZShwcm9w
ZXJ0eSkgPT0gUHJvcGVydHlOb2RlOjpDb25zdGFudCk7Ci0gICAgICAgICAgICAgICAgZmFpbElm
VHJ1ZShjb250ZXh0LmdldFR5cGUocHJvcGVydHkpICYgcHJvcGVydHlFbnRyeS5pdGVyYXRvci0+
c2Vjb25kKTsKLSAgICAgICAgICAgICAgICBwcm9wZXJ0eUVudHJ5Lml0ZXJhdG9yLT5zZWNvbmQg
fD0gY29udGV4dC5nZXRUeXBlKHByb3BlcnR5KTsKKyAgICAgICAgICAgICAgICBmYWlsSWZUcnVl
KGNvbnRleHQuZ2V0VHlwZShwcm9wZXJ0eSkgJiBwcm9wZXJ0eUVudHJ5Lml0ZXJhdG9yLT52YWx1
ZSk7CisgICAgICAgICAgICAgICAgcHJvcGVydHlFbnRyeS5pdGVyYXRvci0+dmFsdWUgfD0gY29u
dGV4dC5nZXRUeXBlKHByb3BlcnR5KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAg
ICB0YWlsID0gY29udGV4dC5jcmVhdGVQcm9wZXJ0eUxpc3QocHJvcGVydHlMb2NhdGlvbiwgcHJv
cGVydHksIHRhaWwpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVy
L1Byb2ZpbGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGUuY3Bw
CmluZGV4IDUxZjg3MTg5ODM4YzQ5Yjc0MGUyMWIwNmRkZjFiODc0ZjY0NWYwMzUuLmE2NDE1ODBl
YzI0NjQ1Njg1NTcxNzMwMGFkZWMwMWQ5MWJlMmEyMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcHJvZmlsZXIvUHJvZmlsZS5jcHAKQEAgLTExMSw3ICsxMTEsNyBAQCB0eXBlZGVmIFdURjo6
S2V5VmFsdWVQYWlyPEZ1bmN0aW9uQ2FsbEhhc2hDb3VudDo6VmFsdWVUeXBlLCB1bnNpZ25lZD4g
TmFtZUNvdW50UAogCiBzdGF0aWMgaW5saW5lIGJvb2wgZnVuY3Rpb25OYW1lQ291bnRQYWlyQ29t
cGFyYXRvcihjb25zdCBOYW1lQ291bnRQYWlyJiBhLCBjb25zdCBOYW1lQ291bnRQYWlyJiBiKQog
ewotICAgIHJldHVybiBhLnNlY29uZCA+IGIuc2Vjb25kOworICAgIHJldHVybiBhLnZhbHVlID4g
Yi52YWx1ZTsKIH0KIAogdm9pZCBQcm9maWxlOjpkZWJ1Z1ByaW50RGF0YVNhbXBsZVN0eWxlKCkg
Y29uc3QKQEAgLTEyOCw3ICsxMjgsNyBAQCB2b2lkIFByb2ZpbGU6OmRlYnVnUHJpbnREYXRhU2Ft
cGxlU3R5bGUoKSBjb25zdAogCiAgICAgc3RkOjpzb3J0KHNvcnRlZEZ1bmN0aW9ucy5iZWdpbigp
LCBzb3J0ZWRGdW5jdGlvbnMuZW5kKCksIGZ1bmN0aW9uTmFtZUNvdW50UGFpckNvbXBhcmF0b3Ip
OwogICAgIGZvciAoTmFtZUNvdW50UGFpclZlY3Rvcjo6aXRlcmF0b3IgaXQgPSBzb3J0ZWRGdW5j
dGlvbnMuYmVnaW4oKTsgaXQgIT0gc29ydGVkRnVuY3Rpb25zLmVuZCgpOyArK2l0KQotICAgICAg
ICBkYXRhTG9nKCIgICAgICAgICUtMTJkJXNcbiIsICgqaXQpLnNlY29uZCwgU3RyaW5nKCgqaXQp
LmZpcnN0KS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgZGF0YUxvZygiICAgICAgICAlLTEyZCVz
XG4iLCAoKml0KS52YWx1ZSwgU3RyaW5nKCgqaXQpLmtleSkudXRmOCgpLmRhdGEoKSk7CiAKICAg
ICBkYXRhTG9nKCJcblNvcnQgYnkgdG9wIG9mIHN0YWNrLCBzYW1lIGNvbGxhcHNlZCAod2hlbiA+
PSA1KTpcbiIpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SWRlbnRpZmllci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVy
LmNwcAppbmRleCBhOWEyYTY2YmY4MDM4MTA5Y2VkZWU0ODk1N2U1MTc5MmMzOTRiZWQxLi5iNDM1
NjcxYjhhM2E5OWUwODBhMWNkMWM1NDU3NjA5MmJiNzU3Y2RiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmNwcApAQCAtMTAyLDcgKzEwMiw3IEBAIFBhc3NS
ZWZQdHI8U3RyaW5nSW1wbD4gSWRlbnRpZmllcjo6YWRkKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSwgY29uc3QgY2hhciogYykKIAogICAgIGNvbnN0IExpdGVyYWxJZGVudGlmaWVyVGFibGU6Oml0
ZXJhdG9yJiBpdGVyID0gbGl0ZXJhbElkZW50aWZpZXJUYWJsZS5maW5kKGMpOwogICAgIGlmIChp
dGVyICE9IGxpdGVyYWxJZGVudGlmaWVyVGFibGUuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdGVy
LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBpdGVyLT52YWx1ZTsKIAogICAgIEhhc2hTZXQ8U3Ry
aW5nSW1wbCo+OjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gaWRlbnRpZmllclRhYmxlLmFkZDxjb25z
dCBMQ2hhciosIElkZW50aWZpZXJBU0NJSVN0cmluZ1RyYW5zbGF0b3I+KHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgTENoYXIqPihjKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FjdGl2YXRpb24uY3BwCmluZGV4IGRjMDYxYmM1NzY1NzNkZTY1ZTc3NTU1MjFhMTBkNWVj
OWFlNzk1MjEuLjgwZjY5ZDk4Y2RmYjVjMjg0Nzg3MWQ4NzljNmZkNTM0ZWNhNjAxNjEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmNwcApAQCAtMTE2
LDExICsxMTYsMTEgQEAgdm9pZCBKU0FjdGl2YXRpb246OmdldE93bk5vbkluZGV4UHJvcGVydHlO
YW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMKIAogICAgIFN5bWJvbFRhYmxl
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSB0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5lbmQoKTsK
ICAgICBmb3IgKFN5bWJvbFRhYmxlOjpjb25zdF9pdGVyYXRvciBpdCA9IHRoaXNPYmplY3QtPnN5
bWJvbFRhYmxlKCktPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoaXQt
PnNlY29uZC5nZXRBdHRyaWJ1dGVzKCkgJiBEb250RW51bSAmJiBtb2RlICE9IEluY2x1ZGVEb250
RW51bVByb3BlcnRpZXMpCisgICAgICAgIGlmIChpdC0+dmFsdWUuZ2V0QXR0cmlidXRlcygpICYg
RG9udEVudW0gJiYgbW9kZSAhPSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKQogICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgIGlmICghdGhpc09iamVjdC0+aXNWYWxpZChpdC0+c2Vjb25k
KSkKKyAgICAgICAgaWYgKCF0aGlzT2JqZWN0LT5pc1ZhbGlkKGl0LT52YWx1ZSkpCiAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihleGVj
LCBpdC0+Zmlyc3QuZ2V0KCkpKTsKKyAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmll
cihleGVjLCBpdC0+a2V5LmdldCgpKSk7CiAgICAgfQogICAgIC8vIFNraXAgdGhlIEpTVmFyaWFi
bGVPYmplY3QgaW1wbGVtZW50YXRpb24gb2YgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzCiAg
ICAgSlNPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVj
LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKQEAgLTEzMyw3ICsxMzMsNyBAQCBpbmxpbmUgYm9vbCBK
U0FjdGl2YXRpb246OnN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLAogICAgIFN5bWJvbFRhYmxlOjppdGVyYXRvciBpdGVyID0gc3ltYm9sVGFibGUo
KS0+ZmluZChwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpKTsKICAgICBpZiAoaXRlciA9PSBzeW1i
b2xUYWJsZSgpLT5lbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFN5bWJvbFRhYmxl
RW50cnkmIGVudHJ5ID0gaXRlci0+c2Vjb25kOworICAgIFN5bWJvbFRhYmxlRW50cnkmIGVudHJ5
ID0gaXRlci0+dmFsdWU7CiAgICAgQVNTRVJUKCFlbnRyeS5pc051bGwoKSk7CiAgICAgaWYgKCFp
c1ZhbGlkKGVudHJ5KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FycmF5LmNwcAppbmRleCBlYmJiZDQxYWFlOTQ1NDhjYjI5NjUzZDE5Mjk4
ZTJmY2ZiZTUzNDk5Li42MTI1NWUwMDc5NzA5Zjg1ZmFmZmUyZGFhZGVhOGRjY2Y1NTVlZTk1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcApAQCAtMzQ5LDcgKzM0
OSw3IEBAIGJvb2wgSlNBcnJheTo6c2V0TGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQg
bmV3TGVuZ3RoLCBib29sIHRocm93RXhjZXB0aW9uCiAgICAgICAgICAgICBrZXlzLnJlc2VydmVD
YXBhY2l0eShtaW4obWFwLT5zaXplKCksIHN0YXRpY19jYXN0PHNpemVfdD4obGVuZ3RoIC0gbmV3
TGVuZ3RoKSkpOwogICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gbWFwLT5lbmQoKTsKICAgICAgICAgICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewot
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGl0
LT5maXJzdCk7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oaXQtPmtleSk7CiAgICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgbGVuZ3RoICYm
IGluZGV4ID49IG5ld0xlbmd0aCkKICAgICAgICAgICAgICAgICAgICAga2V5cy5hcHBlbmQoaW5k
ZXgpOwogICAgICAgICAgICAgfQpAQCAtMzY0LDcgKzM2NCw3IEBAIGJvb2wgSlNBcnJheTo6c2V0
TGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgbmV3TGVuZ3RoLCBib29sIHRocm93RXhj
ZXB0aW9uCiAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0ga2V5c1stLWldOwog
ICAgICAgICAgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1h
cC0+ZmluZChpbmRleCk7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChpdCAhPSBtYXAtPm5v
dEZvdW5kKCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoaXQtPnNlY29uZC5hdHRyaWJ1dGVz
ICYgRG9udERlbGV0ZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoaXQtPnZhbHVlLmF0dHJp
YnV0ZXMgJiBEb250RGVsZXRlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlLT5z
ZXRMZW5ndGgoaW5kZXggKyAxKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWpl
Y3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJVbmFibGUgdG8gZGVsZXRlIHByb3BlcnR5LiIpOwog
ICAgICAgICAgICAgICAgICAgICB9CkBAIC04ODAsNyArODgwLDcgQEAgdm9pZCBKU0FycmF5Ojpz
b3J0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBjb21wYXJlRnVuY3Rpb24sIENhbGxUeXBlIGNh
bGxUeXBlLAogICAgICAgICAgICAgCiAgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpj
b25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwogICAgICAgICAgICAgZm9yIChTcGFyc2VB
cnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7Ci0gICAgICAgICAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1tudW1E
ZWZpbmVkXS52YWx1ZSA9IGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpOworICAgICAgICAg
ICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbbnVtRGVmaW5lZF0udmFsdWUgPSBpdC0+
dmFsdWUuZ2V0Tm9uU3BhcnNlTW9kZSgpOwogICAgICAgICAgICAgICAgIHRyZWUuaW5zZXJ0KG51
bURlZmluZWQpOwogICAgICAgICAgICAgICAgICsrbnVtRGVmaW5lZDsKICAgICAgICAgICAgIH0K
QEAgLTEwMjgsNyArMTAyOCw3IEBAIHVuc2lnbmVkIEpTQXJyYXk6OmNvbXBhY3RGb3JTb3J0aW5n
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKICAgICAgICAgICAgIAogICAgICAgICAgICAgU3Bh
cnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKICAgICAg
ICAgICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAt
PmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgICAgICBzdG9yYWdlLT5tX3Zl
Y3RvcltudW1EZWZpbmVkKytdLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoaXQtPnNlY29uZC5nZXRO
b25TcGFyc2VNb2RlKCkpOworICAgICAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW251bURl
ZmluZWQrK10uc2V0V2l0aG91dFdyaXRlQmFycmllcihpdC0+dmFsdWUuZ2V0Tm9uU3BhcnNlTW9k
ZSgpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgZGVhbGxvY2F0ZVNwYXJzZUluZGV4TWFw
KCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTT2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNw
cAppbmRleCAyMjlkMWFlYTZhNTFhOTBlOWU3NTc1NzNhZmU4MWM2MTQ0ZTAwNzQ0Li4zMTYwM2Uz
ZGYxOTY4MGNhMDBiMDI1NmM5MGMyZjY3ZTE0ZDE4ZWZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCkBAIC0yNDksNyArMjQ5LDcgQEAgYm9vbCBKU09iamVj
dDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhl
YywgdW5zaWduZWQKICAgICAgICAgfSBlbHNlIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAg
PSBzdG9yYWdlLT5tX3NwYXJzZU1hcC5nZXQoKSkgewogICAgICAgICAgICAgU3BhcnNlQXJyYXlW
YWx1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAtPmZpbmQoaSk7CiAgICAgICAgICAgICBpZiAoaXQg
IT0gbWFwLT5ub3RGb3VuZCgpKSB7Ci0gICAgICAgICAgICAgICAgaXQtPnNlY29uZC5nZXQoc2xv
dCk7CisgICAgICAgICAgICAgICAgaXQtPnZhbHVlLmdldChzbG90KTsKICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNDMwLDcgKzQzMCw3
IEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdo
ZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzCiAgICAgICAgIC8vIFRoaXMgd2lsbCBhbHdheXMg
YmUgYSBuZXcgZW50cnkgaW4gdGhlIG1hcCwgc28gbm8gbmVlZCB0byBjaGVjayB3ZSBjYW4gd3Jp
dGUsCiAgICAgICAgIC8vIGFuZCBhdHRyaWJ1dGVzIGFyZSBkZWZhdWx0IHNvIG5vIG5lZWQgdG8g
c2V0IHRoZW0uCiAgICAgICAgIGlmICh2YWx1ZSkKLSAgICAgICAgICAgIG1hcC0+YWRkKHRoaXMs
IGkpLml0ZXJhdG9yLT5zZWNvbmQuc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICAg
ICAgICAgIG1hcC0+YWRkKHRoaXMsIGkpLml0ZXJhdG9yLT52YWx1ZS5zZXQoZ2xvYmFsRGF0YSwg
dGhpcywgdmFsdWUpOwogICAgIH0KIAogICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gc3Rv
cmFnZS0+YnV0dGVyZmx5KCktPnJlc2l6ZUFycmF5KGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCAw
LCBBcnJheVN0b3JhZ2U6OnNpemVGb3IoMCkpOwpAQCAtNzExLDcgKzcxMSw3IEBAIGJvb2wgSlNP
YmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhl
YywgdW5zaWduZWQgaSkKICAgICAgICAgfSBlbHNlIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBt
YXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1hcC5nZXQoKSkgewogICAgICAgICAgICAgU3BhcnNlQXJy
YXlWYWx1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAtPmZpbmQoaSk7CiAgICAgICAgICAgICBpZiAo
aXQgIT0gbWFwLT5ub3RGb3VuZCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGl0LT5zZWNvbmQu
YXR0cmlidXRlcyAmIERvbnREZWxldGUpCisgICAgICAgICAgICAgICAgaWYgKGl0LT52YWx1ZS5h
dHRyaWJ1dGVzICYgRG9udERlbGV0ZSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICAgICAgICAgIG1hcC0+cmVtb3ZlKGl0KTsKICAgICAgICAgICAgIH0KQEAgLTg3
Nyw4ICs4NzcsOCBAQCB2b2lkIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0
KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYQogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVu
ZCgpOwogICAgICAgICAgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAg
aWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcyB8fCAhKGl0LT5zZWNvbmQuYXR0
cmlidXRlcyAmIERvbnRFbnVtKSkKLSAgICAgICAgICAgICAgICAgICAga2V5cy5hcHBlbmQoc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGl0LT5maXJzdCkpOworICAgICAgICAgICAgICAgIGlmIChtb2Rl
ID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMgfHwgIShpdC0+dmFsdWUuYXR0cmlidXRlcyAm
IERvbnRFbnVtKSkKKyAgICAgICAgICAgICAgICAgICAga2V5cy5hcHBlbmQoc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KGl0LT5rZXkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAg
ICAgICAgc3RkOjpzb3J0KGtleXMuYmVnaW4oKSwga2V5cy5lbmQoKSk7CkBAIC0xMTIyLDcgKzEx
MjIsNyBAQCBib29sIEpTT2JqZWN0OjpkZWZpbmVPd25JbmRleGVkUHJvcGVydHkoRXhlY1N0YXRl
KiBleGVjLCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydAogCiAgICAgLy8gMS4gTGV0IGN1cnJlbnQg
YmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldE93blByb3BlcnR5XV0gaW50ZXJuYWwg
bWV0aG9kIG9mIE8gd2l0aCBwcm9wZXJ0eSBuYW1lIFAuCiAgICAgU3BhcnNlQXJyYXlWYWx1ZU1h
cDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1hcC0+YWRkKHRoaXMsIGluZGV4KTsKLSAgICBTcGFyc2VB
cnJheUVudHJ5KiBlbnRyeUluTWFwID0gJnJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgIFNw
YXJzZUFycmF5RW50cnkqIGVudHJ5SW5NYXAgPSAmcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIAog
ICAgIC8vIDIuIExldCBleHRlbnNpYmxlIGJlIHRoZSB2YWx1ZSBvZiB0aGUgW1tFeHRlbnNpYmxl
XV0gaW50ZXJuYWwgcHJvcGVydHkgb2YgTy4KICAgICAvLyAzLiBJZiBjdXJyZW50IGlzIHVuZGVm
aW5lZCBhbmQgZXh0ZW5zaWJsZSBpcyBmYWxzZSwgdGhlbiBSZWplY3QuCkBAIC0xMjQyLDggKzEy
NDIsOCBAQCBib29sIEpTT2JqZWN0OjphdHRlbXB0VG9JbnRlcmNlcHRQdXRCeUluZGV4T25Ib2xl
Rm9yUHJvdG90eXBlKEV4ZWNTdGF0ZSogZXhlYywgSgogICAgICAgICBBcnJheVN0b3JhZ2UqIHN0
b3JhZ2UgPSBjdXJyZW50LT5hcnJheVN0b3JhZ2VPck51bGwoKTsKICAgICAgICAgaWYgKHN0b3Jh
Z2UgJiYgc3RvcmFnZS0+bV9zcGFyc2VNYXApIHsKICAgICAgICAgICAgIFNwYXJzZUFycmF5VmFs
dWVNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBzdG9yYWdlLT5tX3NwYXJzZU1hcC0+ZmluZChpKTsKLSAg
ICAgICAgICAgIGlmIChpdGVyICE9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwLT5ub3RGb3VuZCgpICYm
IChpdGVyLT5zZWNvbmQuYXR0cmlidXRlcyAmIChBY2Nlc3NvciB8IFJlYWRPbmx5KSkpIHsKLSAg
ICAgICAgICAgICAgICBpdGVyLT5zZWNvbmQucHV0KGV4ZWMsIHRoaXNWYWx1ZSwgc3RvcmFnZS0+
bV9zcGFyc2VNYXAuZ2V0KCksIHZhbHVlLCBzaG91bGRUaHJvdyk7CisgICAgICAgICAgICBpZiAo
aXRlciAhPSBzdG9yYWdlLT5tX3NwYXJzZU1hcC0+bm90Rm91bmQoKSAmJiAoaXRlci0+dmFsdWUu
YXR0cmlidXRlcyAmIChBY2Nlc3NvciB8IFJlYWRPbmx5KSkpIHsKKyAgICAgICAgICAgICAgICBp
dGVyLT52YWx1ZS5wdXQoZXhlYywgdGhpc1ZhbHVlLCBzdG9yYWdlLT5tX3NwYXJzZU1hcC5nZXQo
KSwgdmFsdWUsIHNob3VsZFRocm93KTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTMyNyw3ICsxMzI3LDcgQEAgdm9pZCBKU09iamVj
dDo6cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRl
KiBleGVjLCB1bnMKICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvciA9IHN0b3JhZ2Ut
Pm1fdmVjdG9yOwogICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IG1hcC0+ZW5kKCk7CiAgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICB2ZWN0b3JbaXQt
PmZpcnN0XS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2Rl
KCkpOworICAgICAgICB2ZWN0b3JbaXQtPmtleV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIGl0LT52
YWx1ZS5nZXROb25TcGFyc2VNb2RlKCkpOwogICAgIGRlYWxsb2NhdGVTcGFyc2VJbmRleE1hcCgp
OwogCiAgICAgLy8gU3RvcmUgdGhlIG5ldyBwcm9wZXJ0eSBpbnRvIHRoZSB2ZWN0b3IuCkBAIC0x
NDQwLDcgKzE0NDAsNyBAQCBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rv
ckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLAogICAgIFdyaXRlQmFycmll
cjxVbmtub3duPiogdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7CiAgICAgU3BhcnNlQXJyYXlW
YWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKICAgICBmb3IgKFNwYXJz
ZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpCi0gICAgICAgIHZlY3RvcltpdC0+Zmlyc3RdLnNldChnbG9iYWxEYXRhLCB0aGlz
LCBpdC0+c2Vjb25kLmdldE5vblNwYXJzZU1vZGUoKSk7CisgICAgICAgIHZlY3RvcltpdC0+a2V5
XS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgaXQtPnZhbHVlLmdldE5vblNwYXJzZU1vZGUoKSk7CiAg
ICAgZGVhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKCk7CiAKICAgICAvLyBTdG9yZSB0aGUgbmV3IHBy
b3BlcnR5IGludG8gdGhlIHZlY3Rvci4KQEAgLTE2MDEsMTMgKzE2MDEsMTMgQEAgdm9pZCBKU09i
amVjdDo6Y2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KENvbnNpc3RlbmN5Q2hlY2tUeXBlIHR5cGUp
CiAgICAgaWYgKG1fc3BhcnNlVmFsdWVNYXApIHsKICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1h
cDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9zcGFyc2VWYWx1ZU1hcC0+ZW5kKCk7CiAgICAgICAg
IGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3NwYXJzZVZh
bHVlTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIHVuc2lnbmVk
IGluZGV4ID0gaXQtPmZpcnN0OworICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBpdC0+a2V5
OwogICAgICAgICAgICAgQVNTRVJUKGluZGV4IDwgc3RvcmFnZS0+bGVuZ3RoKCkpOwogICAgICAg
ICAgICAgQVNTRVJUKGluZGV4ID49IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsKICAgICAgICAg
ICAgIEFTU0VSVChpbmRleCA8PSBNQVhfQVJSQVlfSU5ERVgpOwotICAgICAgICAgICAgQVNTRVJU
KGl0LT5zZWNvbmQpOworICAgICAgICAgICAgQVNTRVJUKGl0LT52YWx1ZSk7CiAgICAgICAgICAg
ICBpZiAodHlwZSAhPSBEZXN0cnVjdG9yQ29uc2lzdGVuY3lDaGVjaykKLSAgICAgICAgICAgICAg
ICBpdC0+c2Vjb25kLmdldE5vblNwYXJzZU1vZGUoKS5pc1VuZGVmaW5lZCgpOyAvLyBMaWtlbHkg
dG8gY3Jhc2ggaWYgdGhlIG9iamVjdCB3YXMgZGVhbGxvY2F0ZWQuCisgICAgICAgICAgICAgICAg
aXQtPnZhbHVlLmdldE5vblNwYXJzZU1vZGUoKS5pc1VuZGVmaW5lZCgpOyAvLyBMaWtlbHkgdG8g
Y3Jhc2ggaWYgdGhlIG9iamVjdCB3YXMgZGVhbGxvY2F0ZWQuCiAgICAgICAgIH0KICAgICB9CiB9
CkBAIC0xNjU2LDcgKzE2NTYsNyBAQCBib29sIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZQogICAgICAgICAg
ICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAtPmZpbmQoaSk7CiAgICAg
ICAgICAgICBpZiAoaXQgPT0gbWFwLT5ub3RGb3VuZCgpKQogICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQuZ2V0KGRlc2NyaXB0b3IpOworICAgICAg
ICAgICAgaXQtPnZhbHVlLmdldChkZXNjcmlwdG9yKTsKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAKaW5kZXggNzY1ZTFk
M2Q0NGQ2OWFiODEzM2Q3NmNmY2M3ZTIyNzM1ZDg2NjRmYi4uN2RjZGU0NzAwNDZjOGYyNzIwZjA3
Yjc0YzVhZDcyNzQ3YTE0MDRkMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAKQEAgLTYxLDggKzYxLDggQEAgdm9pZCBK
U1N5bWJvbFRhYmxlT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3Qq
IG9iamVjdCwgRXhlY1N0YXQKICAgICBKU1N5bWJvbFRhYmxlT2JqZWN0KiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTU3ltYm9sVGFibGVPYmplY3QqPihvYmplY3QpOwogICAgIFN5bWJvbFRhYmxlOjpj
b25zdF9pdGVyYXRvciBlbmQgPSB0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5lbmQoKTsKICAg
ICBmb3IgKFN5bWJvbFRhYmxlOjpjb25zdF9pdGVyYXRvciBpdCA9IHRoaXNPYmplY3QtPnN5bWJv
bFRhYmxlKCktPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoIShpdC0+
c2Vjb25kLmdldEF0dHJpYnV0ZXMoKSAmIERvbnRFbnVtKSB8fCAobW9kZSA9PSBJbmNsdWRlRG9u
dEVudW1Qcm9wZXJ0aWVzKSkKLSAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZp
ZXIoZXhlYywgaXQtPmZpcnN0LmdldCgpKSk7CisgICAgICAgIGlmICghKGl0LT52YWx1ZS5nZXRB
dHRyaWJ1dGVzKCkgJiBEb250RW51bSkgfHwgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVy
dGllcykpCisgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyKGV4ZWMsIGl0
LT5rZXkuZ2V0KCkpKTsKICAgICB9CiAgICAgCiAgICAgSlNPYmplY3Q6OmdldE93bk5vbkluZGV4
UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmpl
Y3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3Qu
aAppbmRleCBiNGQzMTNjMTkxOTgwZmRiODk3ZWNkZjQ0NWZhMTQxZGVlMTJmM2ZkLi45MTM2Nzlm
ODBjNzJiY2NkMWM4ODYxNzNjZDEyZjg5MzNlYWRkNzBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oCkBAIC03Niw3ICs3Niw3
IEBAIGlubGluZSBib29sIHN5bWJvbFRhYmxlR2V0KAogICAgIFN5bWJvbFRhYmxlOjppdGVyYXRv
ciBpdGVyID0gc3ltYm9sVGFibGUuZmluZChwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpKTsKICAg
ICBpZiAoaXRlciA9PSBzeW1ib2xUYWJsZS5lbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIFN5bWJvbFRhYmxlRW50cnk6OkZhc3QgZW50cnkgPSBpdGVyLT5zZWNvbmQ7CisgICAgU3lt
Ym9sVGFibGVFbnRyeTo6RmFzdCBlbnRyeSA9IGl0ZXItPnZhbHVlOwogICAgIEFTU0VSVCghZW50
cnkuaXNOdWxsKCkpOwogICAgIHNsb3Quc2V0VmFsdWUob2JqZWN0LT5yZWdpc3RlckF0KGVudHJ5
LmdldEluZGV4KCkpLmdldCgpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTkwLDcgKzkwLDcgQEAg
aW5saW5lIGJvb2wgc3ltYm9sVGFibGVHZXQoCiAgICAgU3ltYm9sVGFibGU6Oml0ZXJhdG9yIGl0
ZXIgPSBzeW1ib2xUYWJsZS5maW5kKHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCkpOwogICAgIGlm
IChpdGVyID09IHN5bWJvbFRhYmxlLmVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
U3ltYm9sVGFibGVFbnRyeTo6RmFzdCBlbnRyeSA9IGl0ZXItPnNlY29uZDsKKyAgICBTeW1ib2xU
YWJsZUVudHJ5OjpGYXN0IGVudHJ5ID0gaXRlci0+dmFsdWU7CiAgICAgQVNTRVJUKCFlbnRyeS5p
c051bGwoKSk7CiAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKAogICAgICAgICBvYmplY3Qt
PnJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuZ2V0KCksIGVudHJ5LmdldEF0dHJpYnV0ZXMo
KSB8IERvbnREZWxldGUpOwpAQCAtMTA2LDcgKzEwNiw3IEBAIGlubGluZSBib29sIHN5bWJvbFRh
YmxlR2V0KAogICAgIFN5bWJvbFRhYmxlOjppdGVyYXRvciBpdGVyID0gc3ltYm9sVGFibGUuZmlu
ZChwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpKTsKICAgICBpZiAoaXRlciA9PSBzeW1ib2xUYWJs
ZS5lbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFN5bWJvbFRhYmxlRW50cnk6OkZh
c3QgZW50cnkgPSBpdGVyLT5zZWNvbmQ7CisgICAgU3ltYm9sVGFibGVFbnRyeTo6RmFzdCBlbnRy
eSA9IGl0ZXItPnZhbHVlOwogICAgIEFTU0VSVCghZW50cnkuaXNOdWxsKCkpOwogICAgIHNsb3Qu
c2V0VmFsdWUob2JqZWN0LT5yZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpLmdldCgpKTsKICAg
ICBzbG90SXNXcml0ZWFibGUgPSAhZW50cnkuaXNSZWFkT25seSgpOwpAQCAtMTI2LDcgKzEyNiw3
IEBAIGlubGluZSBib29sIHN5bWJvbFRhYmxlUHV0KAogICAgIGlmIChpdGVyID09IHN5bWJvbFRh
YmxlLmVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgYm9vbCB3YXNGYXQ7Ci0gICAg
U3ltYm9sVGFibGVFbnRyeTo6RmFzdCBmYXN0RW50cnkgPSBpdGVyLT5zZWNvbmQuZ2V0RmFzdCh3
YXNGYXQpOworICAgIFN5bWJvbFRhYmxlRW50cnk6OkZhc3QgZmFzdEVudHJ5ID0gaXRlci0+dmFs
dWUuZ2V0RmFzdCh3YXNGYXQpOwogICAgIEFTU0VSVCghZmFzdEVudHJ5LmlzTnVsbCgpKTsKICAg
ICBpZiAoZmFzdEVudHJ5LmlzUmVhZE9ubHkoKSkgewogICAgICAgICBpZiAoc2hvdWxkVGhyb3cp
CkBAIC0xMzQsNyArMTM0LDcgQEAgaW5saW5lIGJvb2wgc3ltYm9sVGFibGVQdXQoCiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KICAgICBpZiAoVU5MSUtFTFkod2FzRmF0KSkKLSAgICAgICAg
aXRlci0+c2Vjb25kLm5vdGlmeVdyaXRlKCk7CisgICAgICAgIGl0ZXItPnZhbHVlLm5vdGlmeVdy
aXRlKCk7CiAgICAgb2JqZWN0LT5yZWdpc3RlckF0KGZhc3RFbnRyeS5nZXRJbmRleCgpKS5zZXQo
Z2xvYmFsRGF0YSwgb2JqZWN0LCB2YWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0xNDks
NyArMTQ5LDcgQEAgaW5saW5lIGJvb2wgc3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRlcygKICAg
ICBTeW1ib2xUYWJsZTo6aXRlcmF0b3IgaXRlciA9IG9iamVjdC0+c3ltYm9sVGFibGUoKS0+Zmlu
ZChwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpKTsKICAgICBpZiAoaXRlciA9PSBvYmplY3QtPnN5
bWJvbFRhYmxlKCktPmVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgU3ltYm9sVGFi
bGVFbnRyeSYgZW50cnkgPSBpdGVyLT5zZWNvbmQ7CisgICAgU3ltYm9sVGFibGVFbnRyeSYgZW50
cnkgPSBpdGVyLT52YWx1ZTsKICAgICBBU1NFUlQoIWVudHJ5LmlzTnVsbCgpKTsKICAgICBlbnRy
eS5ub3RpZnlXcml0ZSgpOwogICAgIGVudHJ5LnNldEF0dHJpYnV0ZXMoYXR0cmlidXRlcyk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZS5jcHAKaW5kZXggYzY3
ZGFiOGU2MWVlMDJhMTY5MWFmNDc5NjdiMGRiZDM4ZTllNjQ1NC4uOGFjYWZiYTIzYTYwNDRkY2U4
N2I4YWY2NjM5OTJhMTdlZjU3YmY4NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUmVnRXhwQ2FjaGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1JlZ0V4cENhY2hlLmNwcApAQCAtODAsNyArODAsNyBAQCB2b2lkIFJlZ0V4cENhY2hlOjpp
bnZhbGlkYXRlQ29kZSgpCiAKICAgICBSZWdFeHBDYWNoZU1hcDo6aXRlcmF0b3IgZW5kID0gbV93
ZWFrQ2FjaGUuZW5kKCk7CiAgICAgZm9yIChSZWdFeHBDYWNoZU1hcDo6aXRlcmF0b3IgaXQgPSBt
X3dlYWtDYWNoZS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgUmVnRXhwKiBy
ZWdFeHAgPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICBSZWdFeHAqIHJlZ0V4cCA9IGl0LT52
YWx1ZS5nZXQoKTsKICAgICAgICAgaWYgKCFyZWdFeHApIC8vIFNraXAgem9tYmllcy4KICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICByZWdFeHAtPmludmFsaWRhdGVDb2RlKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFw
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAu
Y3BwCmluZGV4IDNmNzA5YjBhNzY0N2NjZTM5YmI3MWYxYTJjOTRlMDUxOGU4MTMyNmMuLjdjMTkw
MmE4OWYxODBhMzRjZDMyM2NjOWRiNTM5Nzk3YmFmYjA0NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuY3BwCkBAIC04OCw3
ICs4OCw3IEBAIFNwYXJzZUFycmF5VmFsdWVNYXA6OkFkZFJlc3VsdCBTcGFyc2VBcnJheVZhbHVl
TWFwOjphZGQoSlNPYmplY3QqIGFycmF5LCB1bnNpZ25lCiB2b2lkIFNwYXJzZUFycmF5VmFsdWVN
YXA6OnB1dEVudHJ5KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGFycmF5LCB1bnNpZ25lZCBp
LCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQogewogICAgIEFkZFJlc3VsdCByZXN1
bHQgPSBhZGQoYXJyYXksIGkpOwotICAgIFNwYXJzZUFycmF5RW50cnkmIGVudHJ5ID0gcmVzdWx0
Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgU3BhcnNlQXJyYXlFbnRyeSYgZW50cnkgPSByZXN1bHQu
aXRlcmF0b3ItPnZhbHVlOwogCiAgICAgLy8gVG8gc2F2ZSBhIHNlcGFyYXRlIGZpbmQgJiBhZGQs
IHdlIGZpcnN0IGFsd2F5cyBhZGQgdG8gdGhlIHNwYXJzZSBtYXAuCiAgICAgLy8gSW4gdGhlIHVu
Y29tbW9uIGNhc2UgdGhhdCB0aGlzIGlzIGEgbmV3IHByb3BlcnR5LCBhbmQgdGhlIGFycmF5IGlz
IG5vdApAQCAtMTA2LDcgKzEwNiw3IEBAIHZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6cHV0RW50
cnkoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYXJyYXksIHVuc2lnbmVkIGksCiBib29sIFNw
YXJzZUFycmF5VmFsdWVNYXA6OnB1dERpcmVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBh
cnJheSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcywgUHV0
RGlyZWN0SW5kZXhNb2RlIG1vZGUpCiB7CiAgICAgQWRkUmVzdWx0IHJlc3VsdCA9IGFkZChhcnJh
eSwgaSk7Ci0gICAgU3BhcnNlQXJyYXlFbnRyeSYgZW50cnkgPSByZXN1bHQuaXRlcmF0b3ItPnNl
Y29uZDsKKyAgICBTcGFyc2VBcnJheUVudHJ5JiBlbnRyeSA9IHJlc3VsdC5pdGVyYXRvci0+dmFs
dWU7CiAKICAgICAvLyBUbyBzYXZlIGEgc2VwYXJhdGUgZmluZCAmIGFkZCwgd2UgZmlyc3QgYWx3
YXlzIGFkZCB0byB0aGUgc3BhcnNlIG1hcC4KICAgICAvLyBJbiB0aGUgdW5jb21tb24gY2FzZSB0
aGF0IHRoaXMgaXMgYSBuZXcgcHJvcGVydHksIGFuZCB0aGUgYXJyYXkgaXMgbm90CkBAIC0yMDUs
NyArMjA1LDcgQEAgdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogdGhpc09iamVjdCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IKICAgICBTcGFyc2VBcnJheVZhbHVl
TWFwKiB0aGlzTWFwID0ganNDYXN0PFNwYXJzZUFycmF5VmFsdWVNYXAqPih0aGlzT2JqZWN0KTsK
ICAgICBpdGVyYXRvciBlbmQgPSB0aGlzTWFwLT5tX21hcC5lbmQoKTsKICAgICBmb3IgKGl0ZXJh
dG9yIGl0ID0gdGhpc01hcC0+bV9tYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAg
ICB2aXNpdG9yLmFwcGVuZCgmaXQtPnNlY29uZCk7CisgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZp
dC0+dmFsdWUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ01hcC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvV2Vha0dDTWFwLmgKaW5kZXggNjkyNjE2NWE3ODVhNzY3ZGEzNzdhY2ViMjUzOTcw
Y2VjM2I5YTk0OC4uNTJlNWUyOTQ2ZmQxMDNiN2ZlYWY2MjFmNmZkMmE1MGQwNTM0OWQwMyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha0dDTWFwLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha0dDTWFwLmgKQEAgLTYzLDcgKzYzLDcg
QEAgcHVibGljOgogICAgIHsKICAgICAgICAgdHlwZW5hbWUgTWFwVHlwZTo6aXRlcmF0b3IgZW5k
ID0gbV9tYXAuZW5kKCk7CiAgICAgICAgIGZvciAodHlwZW5hbWUgTWFwVHlwZTo6aXRlcmF0b3Ig
cHRyID0gbV9tYXAuYmVnaW4oKTsgcHRyICE9IGVuZDsgKytwdHIpCi0gICAgICAgICAgICBXZWFr
U2V0OjpkZWFsbG9jYXRlKHB0ci0+c2Vjb25kKTsKKyAgICAgICAgICAgIFdlYWtTZXQ6OmRlYWxs
b2NhdGUocHRyLT52YWx1ZSk7CiAgICAgICAgIG1fbWFwLmNsZWFyKCk7CiAgICAgfQogCkBAIC04
MCw4ICs4MCw4IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUX1VOVVNFRChnbG9iYWxEYXRhLCBn
bG9iYWxEYXRhLmFwaUxvY2soKS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpKTsKICAgICAg
ICAgdHlwZW5hbWUgTWFwVHlwZTo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fbWFwLmFkZChrZXksIDAp
OwogICAgICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICAgICAgV2Vha1NldDo6
ZGVhbGxvY2F0ZShyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7Ci0gICAgICAgIHJlc3VsdC5pdGVy
YXRvci0+c2Vjb25kID0gV2Vha1NldDo6YWxsb2NhdGUodmFsdWUsIHRoaXMsIEZpbmFsaXplckNh
bGxiYWNrOjpmaW5hbGl6ZXJDb250ZXh0Rm9yKGtleSkpOworICAgICAgICAgICAgV2Vha1NldDo6
ZGVhbGxvY2F0ZShyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZSA9IFdlYWtTZXQ6OmFsbG9jYXRlKHZhbHVlLCB0aGlzLCBGaW5hbGl6ZXJDYWxs
YmFjazo6ZmluYWxpemVyQ29udGV4dEZvcihrZXkpKTsKICAgICB9CiAKICAgICB2b2lkIHJlbW92
ZShjb25zdCBLZXlUeXBlJiBrZXkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
dG9vbHMvUHJvZmlsZVRyZWVOb2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvUHJv
ZmlsZVRyZWVOb2RlLmgKaW5kZXggN2I1MWVmYjg1ZGIzNDQxYTIyMjYzYjQyNDk3YTMxNzUyYjVi
NTJmZC4uN2I1YTk1ZWM0MDQ0YjYzZjIxMTEzNjEyMmQ5MjNjYTg4OTQ2MGEzNiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1Byb2ZpbGVUcmVlTm9kZS5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Qcm9maWxlVHJlZU5vZGUuaApAQCAtNTEsNyArNTEs
NyBAQCBwdWJsaWM6CiAgICAgCiAgICAgICAgIFByb2ZpbGVUcmVlTm9kZSBuZXdFbnRyeTsKICAg
ICAgICAgTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9jaGlsZHJlbi0+YWRkKFN0cmluZyhuYW1l
KSwgbmV3RW50cnkpOwotICAgICAgICBQcm9maWxlVHJlZU5vZGUqIGNoaWxkSW5NYXAgPSAmcmVz
dWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgIFByb2ZpbGVUcmVlTm9kZSogY2hpbGRJbk1h
cCA9ICZyZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogICAgICAgICArK2NoaWxkSW5NYXAtPm1fY291
bnQ7CiAgICAgICAgIHJldHVybiBjaGlsZEluTWFwOwogICAgIH0KQEAgLTcyLDcgKzcyLDcgQEAg
cHVibGljOgogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIHVpbnQ2NF90IGNoaWxkQ291
bnQgPSAwOwogICAgICAgICBmb3IgKE1hcDo6aXRlcmF0b3IgaXQgPSBtX2NoaWxkcmVuLT5iZWdp
bigpOyBpdCAhPSBtX2NoaWxkcmVuLT5lbmQoKTsgKytpdCkKLSAgICAgICAgICAgIGNoaWxkQ291
bnQgKz0gaXQtPnNlY29uZC5jb3VudCgpOworICAgICAgICAgICAgY2hpbGRDb3VudCArPSBpdC0+
dmFsdWUuY291bnQoKTsKICAgICAgICAgcmV0dXJuIGNoaWxkQ291bnQ7CiAgICAgfQogICAgIApA
QCAtOTcsMTkgKzk3LDE5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgaW5kZW50OyArK2kpCiAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICIpOwog
ICAgICAgICAgICAgZGF0YUxvZygiJSA4bGxkOiAlcyAoJWxsZCBzdGFjayB0b3ApXG4iLAotICAg
ICAgICAgICAgICAgIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oZW50cnktPnNlY29uZC5jb3VudCgp
KSwKLSAgICAgICAgICAgICAgICBlbnRyeS0+Zmlyc3QudXRmOCgpLmRhdGEoKSwKLSAgICAgICAg
ICAgICAgICBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KGVudHJ5LT5zZWNvbmQuY291bnQoKSAtIGVu
dHJ5LT5zZWNvbmQuY2hpbGRDb3VudCgpKSk7CisgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
bG9uZyBsb25nPihlbnRyeS0+dmFsdWUuY291bnQoKSksCisgICAgICAgICAgICAgICAgZW50cnkt
PmtleS51dGY4KCkuZGF0YSgpLAorICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGxvbmcgbG9u
Zz4oZW50cnktPnZhbHVlLmNvdW50KCkgLSBlbnRyeS0+dmFsdWUuY2hpbGRDb3VudCgpKSk7CiAK
ICAgICAgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IGR1bXAgdGhlIGNoaWxkIG5vZGVzLgotICAgICAg
ICAgICAgZW50cnktPnNlY29uZC5kdW1wSW50ZXJuYWwoaW5kZW50ICsgMSk7CisgICAgICAgICAg
ICBlbnRyeS0+dmFsdWUuZHVtcEludGVybmFsKGluZGVudCArIDEpOwogICAgICAgICB9CiAgICAg
fQogCiAgICAgc3RhdGljIGludCBjb21wYXJlRW50cmllcyhjb25zdCB2b2lkKiBhLCBjb25zdCB2
b2lkKiBiKQogICAgIHsKLSAgICAgICAgdWludDY0X3QgZGEgPSAoKnN0YXRpY19jYXN0PE1hcEVu
dHJ5KiBjb25zdCAqPihhKSktPnNlY29uZC5jb3VudCgpOwotICAgICAgICB1aW50NjRfdCBkYiA9
ICgqc3RhdGljX2Nhc3Q8TWFwRW50cnkqIGNvbnN0ICo+KGIpKS0+c2Vjb25kLmNvdW50KCk7Cisg
ICAgICAgIHVpbnQ2NF90IGRhID0gKCpzdGF0aWNfY2FzdDxNYXBFbnRyeSogY29uc3QgKj4oYSkp
LT52YWx1ZS5jb3VudCgpOworICAgICAgICB1aW50NjRfdCBkYiA9ICgqc3RhdGljX2Nhc3Q8TWFw
RW50cnkqIGNvbnN0ICo+KGIpKS0+dmFsdWUuY291bnQoKTsKICAgICAgICAgcmV0dXJuIChkYSA8
IGRiKSAtIChkYSA+IGRiKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0hh
c2hDb3VudGVkU2V0LmggYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoQ291bnRlZFNldC5oCmluZGV4IGVm
ODliZGJjNzUyNjE4NWRlMDE3NTNlMDNlOWY2YjBiNzdlM2UwMWQuLmVmZjRhMjkzZTljNzM5YjEy
YzQzYjY4OTEyNmQwYzg0NTBiY2QwMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0hhc2hD
b3VudGVkU2V0LmgKKysrIGIvU291cmNlL1dURi93dGYvSGFzaENvdW50ZWRTZXQuaApAQCAtMTU0
LDcgKzE1NCw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgIGlubGluZSB0eXBlbmFtZSBIYXNoQ291
bnRlZFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6QWRkUmVzdWx0IEhhc2hDb3Vu
dGVkU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+OjphZGQoY29uc3QgVmFsdWVUeXBl
ICZ2YWx1ZSkKICAgICB7CiAgICAgICAgIEFkZFJlc3VsdCByZXN1bHQgPSBtX2ltcGwuYWRkKHZh
bHVlLCAwKTsKLSAgICAgICAgKytyZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgKyty
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAg
ICAKQEAgLTE3MCwxMSArMTcwLDExIEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBpZiAoaXQg
PT0gZW5kKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgdW5zaWduZWQg
b2xkVmFsID0gaXQtPnNlY29uZDsKKyAgICAgICAgdW5zaWduZWQgb2xkVmFsID0gaXQtPnZhbHVl
OwogICAgICAgICBBU1NFUlQob2xkVmFsKTsKICAgICAgICAgdW5zaWduZWQgbmV3VmFsID0gb2xk
VmFsIC0gMTsKICAgICAgICAgaWYgKG5ld1ZhbCkgewotICAgICAgICAgICAgaXQtPnNlY29uZCA9
IG5ld1ZhbDsKKyAgICAgICAgICAgIGl0LT52YWx1ZSA9IG5ld1ZhbDsKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgfQogCkBAIC0yMjYsNyArMjI2LDcgQEAgbmFtZXNwYWNlIFdU
RiB7CiAgICAgICAgIGl0ZXJhdG9yIGl0ID0gY29sbGVjdGlvbi5iZWdpbigpOwogICAgICAgICBp
dGVyYXRvciBlbmQgPSBjb2xsZWN0aW9uLmVuZCgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpdCAhPSBlbmQ7ICsraXQsICsraSkKLSAgICAgICAgICAgIHZlY3RvcltpXSA9ICgqaXQp
LmZpcnN0OworICAgICAgICAgICAgdmVjdG9yW2ldID0gKCppdCkua2V5OwogICAgIH0KIAogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoSXRlcmF0b3JzLmggYi9Tb3VyY2UvV1RGL3d0
Zi9IYXNoSXRlcmF0b3JzLmgKaW5kZXggNjM5ZmY3MjUwYTFlZjBmYjNmODI0ZGM5MTY4ODQ5NmI4
OWI2NWUxNy4uOWJlNGRlMzIzYzU2NThiMzNmOTViMmY5Nzc2ZWM1YWVlNTI3NGIyYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dURi93dGYvSGFzaEl0ZXJhdG9ycy5oCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L0hhc2hJdGVyYXRvcnMuaApAQCAtOTEsNyArOTEsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICBw
dWJsaWM6CiAgICAgICAgIEhhc2hUYWJsZUNvbnN0S2V5c0l0ZXJhdG9yKGNvbnN0IENvbnN0SXRl
cmF0b3ImIGltcGwpIDogbV9pbXBsKGltcGwpIHt9CiAgICAgICAgIAotICAgICAgICBjb25zdCBL
ZXlUeXBlKiBnZXQoKSBjb25zdCB7IHJldHVybiAmKG1faW1wbC5nZXQoKS0+Zmlyc3QpOyB9Cisg
ICAgICAgIGNvbnN0IEtleVR5cGUqIGdldCgpIGNvbnN0IHsgcmV0dXJuICYobV9pbXBsLmdldCgp
LT5rZXkpOyB9CiAgICAgICAgIGNvbnN0IEtleVR5cGUmIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0
dXJuICpnZXQoKTsgfQogICAgICAgICBjb25zdCBLZXlUeXBlKiBvcGVyYXRvci0+KCkgY29uc3Qg
eyByZXR1cm4gZ2V0KCk7IH0KIApAQCAtMTA4LDcgKzEwOCw3IEBAIG5hbWVzcGFjZSBXVEYgewog
ICAgIHB1YmxpYzoKICAgICAgICAgSGFzaFRhYmxlQ29uc3RWYWx1ZXNJdGVyYXRvcihjb25zdCBD
b25zdEl0ZXJhdG9yJiBpbXBsKSA6IG1faW1wbChpbXBsKSB7fQogICAgICAgICAKLSAgICAgICAg
Y29uc3QgTWFwcGVkVHlwZSogZ2V0KCkgY29uc3QgeyByZXR1cm4gJihtX2ltcGwuZ2V0KCktPnNl
Y29uZCk7IH0KKyAgICAgICAgY29uc3QgTWFwcGVkVHlwZSogZ2V0KCkgY29uc3QgeyByZXR1cm4g
JihtX2ltcGwuZ2V0KCktPnZhbHVlKTsgfQogICAgICAgICBjb25zdCBNYXBwZWRUeXBlJiBvcGVy
YXRvciooKSBjb25zdCB7IHJldHVybiAqZ2V0KCk7IH0KICAgICAgICAgY29uc3QgTWFwcGVkVHlw
ZSogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIGdldCgpOyB9CiAKQEAgLTEyNiw3ICsxMjYs
NyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICBwdWJsaWM6CiAgICAgICAgIEhhc2hUYWJsZUtleXNJ
dGVyYXRvcihjb25zdCBJdGVyYXRvciYgaW1wbCkgOiBtX2ltcGwoaW1wbCkge30KICAgICAgICAg
Ci0gICAgICAgIEtleVR5cGUqIGdldCgpIGNvbnN0IHsgcmV0dXJuICYobV9pbXBsLmdldCgpLT5m
aXJzdCk7IH0KKyAgICAgICAgS2V5VHlwZSogZ2V0KCkgY29uc3QgeyByZXR1cm4gJihtX2ltcGwu
Z2V0KCktPmtleSk7IH0KICAgICAgICAgS2V5VHlwZSYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1
cm4gKmdldCgpOyB9CiAgICAgICAgIEtleVR5cGUqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVy
biBnZXQoKTsgfQogCkBAIC0xNDksNyArMTQ5LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgcHVi
bGljOgogICAgICAgICBIYXNoVGFibGVWYWx1ZXNJdGVyYXRvcihjb25zdCBJdGVyYXRvciYgaW1w
bCkgOiBtX2ltcGwoaW1wbCkge30KICAgICAgICAgCi0gICAgICAgIE1hcHBlZFR5cGUqIGdldCgp
IGNvbnN0IHsgcmV0dXJuICYobV9pbXBsLmdldCgpLT5zZWNvbmQpOyB9CisgICAgICAgIE1hcHBl
ZFR5cGUqIGdldCgpIGNvbnN0IHsgcmV0dXJuICYobV9pbXBsLmdldCgpLT52YWx1ZSk7IH0KICAg
ICAgICAgTWFwcGVkVHlwZSYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKmdldCgpOyB9CiAg
ICAgICAgIE1hcHBlZFR5cGUqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBnZXQoKTsgfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoTWFwLmggYi9Tb3VyY2UvV1RGL3d0Zi9I
YXNoTWFwLmgKaW5kZXggOTAxMDQ3NGM4MjU1NjNlZjg0MWI5Njg3ZmVmZjQ5NGFhNjU1YjRlOC4u
MTBlZTQyNWRhOTU5NmJhYWRmMzRlNTc4ZWY1YWJlNTcwZjlhZTBkNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi93dGYvSGFzaE1hcC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0hhc2hNYXAuaApAQCAt
MzUsNyArMzUsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICB9OwogCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IEtleVZhbHVlUGFpcktleUV4dHJhY3RvciB7Ci0gICAgICAgIHN0YXRp
YyBjb25zdCB0eXBlbmFtZSBUOjpLZXlUeXBlJiBleHRyYWN0KGNvbnN0IFQmIHApIHsgcmV0dXJu
IHAuZmlyc3Q7IH0KKyAgICAgICAgc3RhdGljIGNvbnN0IHR5cGVuYW1lIFQ6OktleVR5cGUmIGV4
dHJhY3QoY29uc3QgVCYgcCkgeyByZXR1cm4gcC5rZXk7IH0KICAgICB9OwogCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcg
PSB0eXBlbmFtZSBEZWZhdWx0SGFzaDxLZXlBcmc+OjpIYXNoLApAQCAtMjExLDcgKzIxMSw3IEBA
IG5hbWVzcGFjZSBXVEYgewogICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNJc0VtcHR5VmFs
dWVGdW5jdGlvbiA9IHRydWU7CiAgICAgICAgIHN0YXRpYyBib29sIGlzRW1wdHlWYWx1ZShjb25z
dCB0eXBlbmFtZSBLZXlWYWx1ZVBhaXJIYXNoVHJhaXRzPEtleVRyYWl0cywgTWFwcGVkVHJhaXRz
Pjo6VHJhaXRUeXBlJiB2YWx1ZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGlzSGFz
aFRyYWl0c0VtcHR5VmFsdWU8S2V5VHJhaXRzPih2YWx1ZS5maXJzdCk7CisgICAgICAgICAgICBy
ZXR1cm4gaXNIYXNoVHJhaXRzRW1wdHlWYWx1ZTxLZXlUcmFpdHM+KHZhbHVlLmtleSk7CiAgICAg
ICAgIH0KICAgICB9OwogCkBAIC0yMjEsOCArMjIxLDggQEAgbmFtZXNwYWNlIFdURiB7CiAgICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IHN0YXRpYyBib29sIGVxdWFsKGNv
bnN0IFQmIGEsIGNvbnN0IFUmIGIpIHsgcmV0dXJuIEhhc2hGdW5jdGlvbnM6OmVxdWFsKGEsIGIp
OyB9CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+
IHN0YXRpYyB2b2lkIHRyYW5zbGF0ZShUJiBsb2NhdGlvbiwgY29uc3QgVSYga2V5LCBjb25zdCBW
JiBtYXBwZWQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGxvY2F0aW9uLmZpcnN0ID0ga2V5Owot
ICAgICAgICAgICAgVmFsdWVUcmFpdHM6OlZhbHVlVHJhaXRzOjpzdG9yZShtYXBwZWQsIGxvY2F0
aW9uLnNlY29uZCk7CisgICAgICAgICAgICBsb2NhdGlvbi5rZXkgPSBrZXk7CisgICAgICAgICAg
ICBWYWx1ZVRyYWl0czo6VmFsdWVUcmFpdHM6OnN0b3JlKG1hcHBlZCwgbG9jYXRpb24udmFsdWUp
OwogICAgICAgICB9CiAgICAgfTsKIApAQCAtMjMyLDggKzIzMiw4IEBAIG5hbWVzcGFjZSBXVEYg
ewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBzdGF0aWMgYm9vbCBl
cXVhbChjb25zdCBUJiBhLCBjb25zdCBVJiBiKSB7IHJldHVybiBUcmFuc2xhdG9yOjplcXVhbChh
LCBiKTsgfQogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFt
ZSBWPiBzdGF0aWMgdm9pZCB0cmFuc2xhdGUoVCYgbG9jYXRpb24sIGNvbnN0IFUmIGtleSwgY29u
c3QgViYgbWFwcGVkLCB1bnNpZ25lZCBoYXNoQ29kZSkKICAgICAgICAgewotICAgICAgICAgICAg
VHJhbnNsYXRvcjo6dHJhbnNsYXRlKGxvY2F0aW9uLmZpcnN0LCBrZXksIGhhc2hDb2RlKTsKLSAg
ICAgICAgICAgIFZhbHVlVHJhaXRzOjpWYWx1ZVRyYWl0czo6c3RvcmUobWFwcGVkLCBsb2NhdGlv
bi5zZWNvbmQpOworICAgICAgICAgICAgVHJhbnNsYXRvcjo6dHJhbnNsYXRlKGxvY2F0aW9uLmtl
eSwga2V5LCBoYXNoQ29kZSk7CisgICAgICAgICAgICBWYWx1ZVRyYWl0czo6VmFsdWVUcmFpdHM6
OnN0b3JlKG1hcHBlZCwgbG9jYXRpb24udmFsdWUpOwogICAgICAgICB9CiAgICAgfTsKIApAQCAt
MzQxLDcgKzM0MSw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBBZGRSZXN1bHQgcmVzdWx0
ID0gaW5saW5lQWRkKGtleSwgbWFwcGVkKTsKICAgICAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRy
eSkgewogICAgICAgICAgICAgLy8gVGhlIGlubGluZUFkZCBjYWxsIGFib3ZlIGZvdW5kIGFuIGV4
aXN0aW5nIGhhc2ggdGFibGUgZW50cnk7IHdlIG5lZWQgdG8gc2V0IHRoZSBtYXBwZWQgdmFsdWUu
Ci0gICAgICAgICAgICBNYXBwZWRUcmFpdHM6OnN0b3JlKG1hcHBlZCwgcmVzdWx0Lml0ZXJhdG9y
LT5zZWNvbmQpOworICAgICAgICAgICAgTWFwcGVkVHJhaXRzOjpzdG9yZShtYXBwZWQsIHJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICAgfQpAQCAtMzY4LDcgKzM2OCw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBWYWx1ZVR5
cGUqIGVudHJ5ID0gY29uc3RfY2FzdDxIYXNoVGFibGVUeXBlJj4obV9pbXBsKS5sb29rdXAoa2V5
KTsKICAgICAgICAgaWYgKCFlbnRyeSkKICAgICAgICAgICAgIHJldHVybiBNYXBwZWRUcmFpdHM6
OnBlZWsoTWFwcGVkVHJhaXRzOjplbXB0eVZhbHVlKCkpOwotICAgICAgICByZXR1cm4gTWFwcGVk
VHJhaXRzOjpwZWVrKGVudHJ5LT5zZWNvbmQpOworICAgICAgICByZXR1cm4gTWFwcGVkVHJhaXRz
OjpwZWVrKGVudHJ5LT52YWx1ZSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KQEAgLTM5OSw3
ICszOTksNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgaXRlcmF0b3IgaXQgPSBmaW5kKGtl
eSk7CiAgICAgICAgIGlmIChpdCA9PSBlbmQoKSkKICAgICAgICAgICAgIHJldHVybiBNYXBwZWRU
cmFpdHM6OnBhc3NPdXQoTWFwcGVkVHJhaXRzOjplbXB0eVZhbHVlKCkpOwotICAgICAgICBNYXBw
ZWRQYXNzT3V0VHlwZSByZXN1bHQgPSBNYXBwZWRUcmFpdHM6OnBhc3NPdXQoaXQtPnNlY29uZCk7
CisgICAgICAgIE1hcHBlZFBhc3NPdXRUeXBlIHJlc3VsdCA9IE1hcHBlZFRyYWl0czo6cGFzc091
dChpdC0+dmFsdWUpOwogICAgICAgICByZW1vdmUoaXQpOwogICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgIH0KQEAgLTQyMSw4ICs0MjEsOCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgY29u
c3RfaXRlcmF0b3IgZW5kID0gYS5lbmQoKTsKICAgICAgICAgY29uc3RfaXRlcmF0b3Igbm90Rm91
bmQgPSBiLmVuZCgpOwogICAgICAgICBmb3IgKGNvbnN0X2l0ZXJhdG9yIGl0ID0gYS5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGNvbnN0X2l0ZXJhdG9yIGJQb3MgPSBi
LmZpbmQoaXQtPmZpcnN0KTsKLSAgICAgICAgICAgIGlmIChiUG9zID09IG5vdEZvdW5kIHx8IGl0
LT5zZWNvbmQgIT0gYlBvcy0+c2Vjb25kKQorICAgICAgICAgICAgY29uc3RfaXRlcmF0b3IgYlBv
cyA9IGIuZmluZChpdC0+a2V5KTsKKyAgICAgICAgICAgIGlmIChiUG9zID09IG5vdEZvdW5kIHx8
IGl0LT52YWx1ZSAhPSBiUG9zLT52YWx1ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIH0KIApAQCAtNDM1LDM0ICs0MzUsMjIgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAg
ICAgIHJldHVybiAhKGEgPT0gYik7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFz
aFRhYmxlVHlwZT4KLSAgICB2b2lkIGRlbGV0ZUFsbFBhaXJTZWNvbmRzKEhhc2hUYWJsZVR5cGUm
IGNvbGxlY3Rpb24pCi0gICAgewotICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIEhhc2hUYWJsZVR5
cGU6OmNvbnN0X2l0ZXJhdG9yIGl0ZXJhdG9yOwotICAgICAgICBpdGVyYXRvciBlbmQgPSBjb2xs
ZWN0aW9uLmVuZCgpOwotICAgICAgICBmb3IgKGl0ZXJhdG9yIGl0ID0gY29sbGVjdGlvbi5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBkZWxldGUgaXQtPnNlY29uZDsKLSAg
ICB9Ci0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0
eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgogICAgIGlubGluZSB2b2lkIGRlbGV0ZUFsbFZhbHVlcyhj
b25zdCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+JiBjb2xsZWN0aW9uKQogICAgIHsKLSAgICAgICAg
ZGVsZXRlQWxsUGFpclNlY29uZHMoY29sbGVjdGlvbik7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgSGFzaFRhYmxlVHlwZT4KLSAgICB2b2lkIGRlbGV0ZUFsbFBhaXJGaXJzdHMoSGFz
aFRhYmxlVHlwZSYgY29sbGVjdGlvbikKLSAgICB7Ci0gICAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
SGFzaFRhYmxlVHlwZTo6Y29uc3RfaXRlcmF0b3IgaXRlcmF0b3I7CisgICAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6Y29uc3RfaXRlcmF0b3IgaXRlcmF0b3I7
CiAgICAgICAgIGl0ZXJhdG9yIGVuZCA9IGNvbGxlY3Rpb24uZW5kKCk7CiAgICAgICAgIGZvciAo
aXRlcmF0b3IgaXQgPSBjb2xsZWN0aW9uLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAg
ICAgICAgIGRlbGV0ZSBpdC0+Zmlyc3Q7CisgICAgICAgICAgICBkZWxldGUgaXQtPnZhbHVlOwog
ICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYs
IHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+CiAgICAgaW5saW5lIHZvaWQgZGVsZXRlQWxsS2V5cyhj
b25zdCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+JiBjb2xsZWN0aW9uKQogICAgIHsKLSAgICAgICAg
ZGVsZXRlQWxsUGFpckZpcnN0cyhjb2xsZWN0aW9uKTsKKyAgICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojpjb25zdF9pdGVyYXRvciBpdGVyYXRvcjsKKyAgICAg
ICAgaXRlcmF0b3IgZW5kID0gY29sbGVjdGlvbi5lbmQoKTsKKyAgICAgICAgZm9yIChpdGVyYXRv
ciBpdCA9IGNvbGxlY3Rpb24uYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAg
ZGVsZXRlIGl0LT5rZXk7CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaCBiL1NvdXJjZS9XVEYvd3Rm
L0hhc2hUYWJsZS5oCmluZGV4IDFjZTNjNWNmNjg4ZWYwYTgxZTEwNjFiYzZjZTI2MjBiZTNkOTgw
MGUuLjE2ZmRkOWU4MWQyODNiNjllNjFkNDZiYTZmOTVmZDEyZTI0NjljNjYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0hhc2hUYWJs
ZS5oCkBAIC0yODYsOCArMjg2LDggQEAgbmFtZXNwYWNlIFdURiB7CiAKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgdm9pZCBoYXNoVGFibGVTd2FwKEtleVZhbHVl
UGFpcjxULCBVPiYgYSwgS2V5VmFsdWVQYWlyPFQsIFU+JiBiKQogICAgIHsKLSAgICAgICAgc3dh
cChhLmZpcnN0LCBiLmZpcnN0KTsKLSAgICAgICAgc3dhcChhLnNlY29uZCwgYi5zZWNvbmQpOwor
ICAgICAgICBzd2FwKGEua2V5LCBiLmtleSk7CisgICAgICAgIHN3YXAoYS52YWx1ZSwgYi52YWx1
ZSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgYm9vbCB1c2VTd2FwPiBzdHJ1
Y3QgTW92ZXI7CkBAIC0xMjQ2LDcgKzEyNDYsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAg
ICAgIEFTU0VSVChlbnRyeSA9PSBpdC5tX3Bvc2l0aW9uKTsKICAgICAgICAgICAgICsrY291bnQ7
CiAKLSAgICAgICAgICAgIFZhbHVlQ2hlY2s8S2V5Pjo6Y2hlY2tDb25zaXN0ZW5jeShpdC0+Zmly
c3QpOworICAgICAgICAgICAgVmFsdWVDaGVjazxLZXk+OjpjaGVja0NvbnNpc3RlbmN5KGl0LT5r
ZXkpOwogICAgICAgICB9CiAKICAgICAgICAgQVNTRVJUKGNvdW50ID09IG1fa2V5Q291bnQpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvSGFzaFRyYWl0cy5oIGIvU291cmNlL1dURi93dGYv
SGFzaFRyYWl0cy5oCmluZGV4IDQzMDU0MzBhMTc3YTQ0YmNjNDlkOGZmODY2ZjgxNzU4MzE5ZDUz
ZGEuLjEyNzk4NzY0ZTgzNGQwNGUwMTc3NzViMTFkNzg0NzA3NTBmYjdmNTQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvd3RmL0hhc2hUcmFpdHMuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoVHJh
aXRzLmgKQEAgLTE2Myw2ICsxNjMsOSBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgcmV0dXJu
IEhhc2hUcmFpdHNFbXB0eVZhbHVlQ2hlY2tlcjxUcmFpdHMsIFRyYWl0czo6aGFzSXNFbXB0eVZh
bHVlRnVuY3Rpb24+Ojppc0VtcHR5VmFsdWUodmFsdWUpOwogICAgIH0KIAorLy8gV29ya2Fyb3Vu
ZCBmcm9tIENocm9taXVtLiBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTgyNzg0LgorI2RlZmluZSBXVEZfTkVXX0hBU0hNQVBfSVRFUkFUT1JTX0lOVEVSRkFDRSAx
CisKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGaXJzdFRyYWl0c0FyZywgdHlwZW5hbWUgU2Vjb25k
VHJhaXRzQXJnPgogICAgIHN0cnVjdCBQYWlySGFzaFRyYWl0cyA6IEdlbmVyaWNIYXNoVHJhaXRz
PHN0ZDo6cGFpcjx0eXBlbmFtZSBGaXJzdFRyYWl0c0FyZzo6VHJhaXRUeXBlLCB0eXBlbmFtZSBT
ZWNvbmRUcmFpdHNBcmc6OlRyYWl0VHlwZT4gPiB7CiAgICAgICAgIHR5cGVkZWYgRmlyc3RUcmFp
dHNBcmcgRmlyc3RUcmFpdHM7CkBAIC0xOTMsMjEgKzE5NiwyMCBAQCBuYW1lc3BhY2UgV1RGIHsK
ICAgICAgICAgfQogCiAgICAgICAgIEtleVZhbHVlUGFpcihjb25zdCBLZXlUeXBlQXJnJiBrZXks
IGNvbnN0IFZhbHVlVHlwZUFyZyYgdmFsdWUpCi0gICAgICAgICAgICA6IGZpcnN0KGtleSkKLSAg
ICAgICAgICAgICwgc2Vjb25kKHZhbHVlKQorICAgICAgICAgICAgOiBrZXkoa2V5KQorICAgICAg
ICAgICAgLCB2YWx1ZSh2YWx1ZSkKICAgICAgICAgewogICAgICAgICB9CiAKICAgICAgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIE90aGVyS2V5VHlwZSwgdHlwZW5hbWUgT3RoZXJWYWx1ZVR5cGU+CiAg
ICAgICAgIEtleVZhbHVlUGFpcihjb25zdCBLZXlWYWx1ZVBhaXI8T3RoZXJLZXlUeXBlLCBPdGhl
clZhbHVlVHlwZT4mIG90aGVyKQotICAgICAgICAgICAgOiBmaXJzdChvdGhlci5maXJzdCkKLSAg
ICAgICAgICAgICwgc2Vjb25kKG90aGVyLnNlY29uZCkKKyAgICAgICAgICAgIDoga2V5KG90aGVy
LmtleSkKKyAgICAgICAgICAgICwgdmFsdWUob3RoZXIudmFsdWUpCiAgICAgICAgIHsKICAgICAg
ICAgfQogCi0gICAgICAgIC8vIFRPRE86IFJlbmFtZSB0aGVzZSB0byBrZXkgYW5kIHZhbHVlLiBT
ZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyNzg0LgotICAgICAg
ICBLZXlUeXBlQXJnIGZpcnN0OwotICAgICAgICBWYWx1ZVR5cGVBcmcgc2Vjb25kOworICAgICAg
ICBLZXlUeXBlQXJnIGtleTsKKyAgICAgICAgVmFsdWVUeXBlQXJnIHZhbHVlOwogICAgIH07CiAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIFZhbHVlVHJhaXRz
QXJnPgpAQCAtMjI0LDggKzIyNiw4IEBAIG5hbWVzcGFjZSBXVEYgewogCiAgICAgICAgIHN0YXRp
YyBjb25zdCBpbnQgbWluaW11bVRhYmxlU2l6ZSA9IEtleVRyYWl0czo6bWluaW11bVRhYmxlU2l6
ZTsKIAotICAgICAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoVHJhaXRUeXBl
JiBzbG90KSB7IEtleVRyYWl0czo6Y29uc3RydWN0RGVsZXRlZFZhbHVlKHNsb3QuZmlyc3QpOyB9
Ci0gICAgICAgIHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0IFRyYWl0VHlwZSYgdmFs
dWUpIHsgcmV0dXJuIEtleVRyYWl0czo6aXNEZWxldGVkVmFsdWUodmFsdWUuZmlyc3QpOyB9Cisg
ICAgICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShUcmFpdFR5cGUmIHNsb3Qp
IHsgS2V5VHJhaXRzOjpjb25zdHJ1Y3REZWxldGVkVmFsdWUoc2xvdC5rZXkpOyB9CisgICAgICAg
IHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0IFRyYWl0VHlwZSYgdmFsdWUpIHsgcmV0
dXJuIEtleVRyYWl0czo6aXNEZWxldGVkVmFsdWUodmFsdWUua2V5KTsgfQogICAgIH07CiAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlPgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvTWVtb3J5SW5zdHJ1bWVudGF0aW9uLmggYi9Tb3VyY2UvV1RGL3d0Zi9NZW1v
cnlJbnN0cnVtZW50YXRpb24uaAppbmRleCAxMzFhZjg0OTdhY2VhZDNhOWI5Y2FjMmRlZTE3NDdj
ODJlOTBiNjEzLi40NjFhMDQ2MjJjMTk2MjRiZTk0YjFjNmViMTY0ODRmZDJjMGQ1N2I2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9NZW1vcnlJbnN0cnVtZW50YXRpb24uaAorKysgYi9Tb3Vy
Y2UvV1RGL3d0Zi9NZW1vcnlJbnN0cnVtZW50YXRpb24uaApAQCAtMjczLDggKzI3Myw4IEBAIHZv
aWQgTWVtb3J5SW5zdHJ1bWVudGF0aW9uOjphZGRJbnN0cnVtZW50ZWRNYXBFbnRyaWVzKGNvbnN0
IE1hcFR5cGUmIG1hcCwgTWVtb3J5CiB7CiAgICAgdHlwZW5hbWUgTWFwVHlwZTo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gbWFwLmVuZCgpOwogICAgIGZvciAodHlwZW5hbWUgTWFwVHlwZTo6Y29uc3Rf
aXRlcmF0b3IgaSA9IG1hcC5iZWdpbigpOyBpICE9IGVuZDsgKytpKSB7Ci0gICAgICAgIGFkZE9i
amVjdChpLT5maXJzdCwgb3duZXJPYmplY3RUeXBlKTsKLSAgICAgICAgYWRkT2JqZWN0KGktPnNl
Y29uZCwgb3duZXJPYmplY3RUeXBlKTsKKyAgICAgICAgYWRkT2JqZWN0KGktPmtleSwgb3duZXJP
YmplY3RUeXBlKTsKKyAgICAgICAgYWRkT2JqZWN0KGktPnZhbHVlLCBvd25lck9iamVjdFR5cGUp
OwogICAgIH0KIH0KIApAQCAtMjgzLDcgKzI4Myw3IEBAIHZvaWQgTWVtb3J5SW5zdHJ1bWVudGF0
aW9uOjphZGRJbnN0cnVtZW50ZWRNYXBWYWx1ZXMoY29uc3QgTWFwVHlwZSYgbWFwLCBNZW1vcnlP
CiB7CiAgICAgdHlwZW5hbWUgTWFwVHlwZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLmVuZCgp
OwogICAgIGZvciAodHlwZW5hbWUgTWFwVHlwZTo6Y29uc3RfaXRlcmF0b3IgaSA9IG1hcC5iZWdp
bigpOyBpICE9IGVuZDsgKytpKQotICAgICAgICBhZGRPYmplY3QoaS0+c2Vjb25kLCBvd25lck9i
amVjdFR5cGUpOworICAgICAgICBhZGRPYmplY3QoaS0+dmFsdWUsIG93bmVyT2JqZWN0VHlwZSk7
CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIExpc3RIYXNoU2V0VHlwZT4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3IuY3BwIGIvU291cmNlL1dURi93dGYvTWV0YUFsbG9j
YXRvci5jcHAKaW5kZXggOWVmY2ZmMmViMTNmNzJjY2I1OTc3NTFjODQzYmI0Mjk1MWZjNzRhMy4u
NzNiMzZhYTQyMWY4YTk1NTA3YWFkOTZhM2E0YmFmODJhZTExZDUzZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvci5jcHAKKysrIGIvU291cmNlL1dURi93dGYvTWV0YUFs
bG9jYXRvci5jcHAKQEAgLTMwOCw5ICszMDgsOSBAQCB2b2lkIE1ldGFBbGxvY2F0b3I6OmFkZEZy
ZWVTcGFjZSh2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVzKQogICAgICAgICAvLyBXZSBo
YXZlIHNvbWV0aGluZyB3ZSBjYW4gY29hbGVzY2Ugd2l0aCBvbiB0aGUgbGVmdC4gUmVtb3ZlIGl0
IGZyb20gdGhlIHRyZWUsIGFuZAogICAgICAgICAvLyByZW1vdmUgaXRzIGVuZCBmcm9tIHRoZSBl
bmQgYWRkcmVzcyBtYXAuCiAgICAgICAgIAotICAgICAgICBBU1NFUlQocmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGxlZnROZWlnaGJvci0+c2Vjb25k
LT5tX3N0YXJ0KSArIGxlZnROZWlnaGJvci0+c2Vjb25kLT5tX3NpemVJbkJ5dGVzKSA9PSBsZWZ0
TmVpZ2hib3ItPmZpcnN0KTsKKyAgICAgICAgQVNTRVJUKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihsZWZ0TmVpZ2hib3ItPnZhbHVlLT5tX3N0YXJ0
KSArIGxlZnROZWlnaGJvci0+dmFsdWUtPm1fc2l6ZUluQnl0ZXMpID09IGxlZnROZWlnaGJvci0+
a2V5KTsKICAgICAgICAgCi0gICAgICAgIEZyZWVTcGFjZU5vZGUqIGxlZnROb2RlID0gbGVmdE5l
aWdoYm9yLT5zZWNvbmQ7CisgICAgICAgIEZyZWVTcGFjZU5vZGUqIGxlZnROb2RlID0gbGVmdE5l
aWdoYm9yLT52YWx1ZTsKICAgICAgICAgCiAgICAgICAgIHZvaWQqIGxlZnRTdGFydCA9IGxlZnRO
b2RlLT5tX3N0YXJ0OwogICAgICAgICBzaXplX3QgbGVmdFNpemUgPSBsZWZ0Tm9kZS0+bV9zaXpl
SW5CeXRlczsKQEAgLTMyNiwxMCArMzI2LDEwIEBAIHZvaWQgTWV0YUFsbG9jYXRvcjo6YWRkRnJl
ZVNwYWNlKHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMpCiAgICAgICAgICAgICAvLyBG
cmVlaW5nIHNvbWV0aGluZyBpbiB0aGUgbWlkZGxlIG9mIGZyZWUgYmxvY2tzLiBDb2FsZXNjZSBi
b3RoIGxlZnQgYW5kCiAgICAgICAgICAgICAvLyByaWdodCwgd2hpbHN0IHJlbW92aW5nIHRoZSBy
aWdodCBuZWlnaGJvciBmcm9tIHRoZSBtYXBzLgogICAgICAgICAgICAgCi0gICAgICAgICAgICBB
U1NFUlQocmlnaHROZWlnaGJvci0+c2Vjb25kLT5tX3N0YXJ0ID09IHJpZ2h0TmVpZ2hib3ItPmZp
cnN0KTsKKyAgICAgICAgICAgIEFTU0VSVChyaWdodE5laWdoYm9yLT52YWx1ZS0+bV9zdGFydCA9
PSByaWdodE5laWdoYm9yLT5rZXkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBGcmVlU3Bh
Y2VOb2RlKiByaWdodE5vZGUgPSByaWdodE5laWdoYm9yLT5zZWNvbmQ7Ci0gICAgICAgICAgICB2
b2lkKiByaWdodFN0YXJ0ID0gcmlnaHROZWlnaGJvci0+Zmlyc3Q7CisgICAgICAgICAgICBGcmVl
U3BhY2VOb2RlKiByaWdodE5vZGUgPSByaWdodE5laWdoYm9yLT52YWx1ZTsKKyAgICAgICAgICAg
IHZvaWQqIHJpZ2h0U3RhcnQgPSByaWdodE5laWdoYm9yLT5rZXk7CiAgICAgICAgICAgICBzaXpl
X3QgcmlnaHRTaXplID0gcmlnaHROb2RlLT5tX3NpemVJbkJ5dGVzOwogICAgICAgICAgICAgdm9p
ZCogcmlnaHRFbmQgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVp
bnRwdHJfdD4ocmlnaHRTdGFydCkgKyByaWdodFNpemUpOwogICAgICAgICAgICAgCkBAIC0zNTYs
OCArMzU2LDggQEAgdm9pZCBNZXRhQWxsb2NhdG9yOjphZGRGcmVlU3BhY2Uodm9pZCogc3RhcnQs
IHNpemVfdCBzaXplSW5CeXRlcykKICAgICAgICAgLy8gQ2Fubm90IGNvYWxlc2NlIHdpdGggbGVm
dDsgdHJ5IHRvIHNlZSBpZiB3ZSBjYW4gY29hbGVzY2Ugd2l0aCByaWdodC4KICAgICAgICAgCiAg
ICAgICAgIGlmIChyaWdodE5laWdoYm9yICE9IG1fZnJlZVNwYWNlU3RhcnRBZGRyZXNzTWFwLmVu
ZCgpKSB7Ci0gICAgICAgICAgICBGcmVlU3BhY2VOb2RlKiByaWdodE5vZGUgPSByaWdodE5laWdo
Ym9yLT5zZWNvbmQ7Ci0gICAgICAgICAgICB2b2lkKiByaWdodFN0YXJ0ID0gcmlnaHROZWlnaGJv
ci0+Zmlyc3Q7CisgICAgICAgICAgICBGcmVlU3BhY2VOb2RlKiByaWdodE5vZGUgPSByaWdodE5l
aWdoYm9yLT52YWx1ZTsKKyAgICAgICAgICAgIHZvaWQqIHJpZ2h0U3RhcnQgPSByaWdodE5laWdo
Ym9yLT5rZXk7CiAgICAgICAgICAgICBzaXplX3QgcmlnaHRTaXplID0gcmlnaHROb2RlLT5tX3Np
emVJbkJ5dGVzOwogICAgICAgICAgICAgdm9pZCogcmlnaHRFbmQgPSByZWludGVycHJldF9jYXN0
PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocmlnaHRTdGFydCkgKyByaWdodFNp
emUpOwogICAgICAgICAgICAgCkBAIC00MDMsNyArNDAzLDcgQEAgdm9pZCBNZXRhQWxsb2NhdG9y
OjppbmNyZW1lbnRQYWdlT2NjdXBhbmN5KHZvaWQqIGFkZHJlc3MsIHNpemVfdCBzaXplSW5CeXRl
cykKICAgICAgICAgICAgIG1fYnl0ZXNDb21taXR0ZWQgKz0gbV9wYWdlU2l6ZTsKICAgICAgICAg
ICAgIG5vdGlmeU5lZWRQYWdlKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHBhZ2UgPDwgbV9sb2dQ
YWdlU2l6ZSkpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGl0ZXItPnNlY29uZCsrOwor
ICAgICAgICAgICAgaXRlci0+dmFsdWUrKzsKICAgICB9CiB9CiAKQEAgLTQxNSw3ICs0MTUsNyBA
QCB2b2lkIE1ldGFBbGxvY2F0b3I6OmRlY3JlbWVudFBhZ2VPY2N1cGFuY3kodm9pZCogYWRkcmVz
cywgc2l6ZV90IHNpemVJbkJ5dGVzKQogICAgIGZvciAodWludHB0cl90IHBhZ2UgPSBmaXJzdFBh
Z2U7IHBhZ2UgPD0gbGFzdFBhZ2U7ICsrcGFnZSkgewogICAgICAgICBIYXNoTWFwPHVpbnRwdHJf
dCwgc2l6ZV90Pjo6aXRlcmF0b3IgaXRlciA9IG1fcGFnZU9jY3VwYW5jeU1hcC5maW5kKHBhZ2Up
OwogICAgICAgICBBU1NFUlQoaXRlciAhPSBtX3BhZ2VPY2N1cGFuY3lNYXAuZW5kKCkpOwotICAg
ICAgICBpZiAoIS0tKGl0ZXItPnNlY29uZCkpIHsKKyAgICAgICAgaWYgKCEtLShpdGVyLT52YWx1
ZSkpIHsKICAgICAgICAgICAgIG1fcGFnZU9jY3VwYW5jeU1hcC5yZW1vdmUoaXRlcik7CiAgICAg
ICAgICAgICBtX2J5dGVzQ29tbWl0dGVkIC09IG1fcGFnZVNpemU7CiAgICAgICAgICAgICBub3Rp
ZnlQYWdlSXNGcmVlKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHBhZ2UgPDwgbV9sb2dQYWdlU2l6
ZSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUmVmQ291bnRlZExlYWtDb3VudGVyLmNw
cCBiL1NvdXJjZS9XVEYvd3RmL1JlZkNvdW50ZWRMZWFrQ291bnRlci5jcHAKaW5kZXggNjcwZjJh
MGNlYzU5OWM2ZDRmMzE2NDRlYmViNTg3NDE1ZWY0MzIxYS4uNGEwNDUyODI0ODlmZTk1YTE3ZTIz
OTE5NzczZDM3Y2IyNDQxMGJlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUmVmQ291bnRl
ZExlYWtDb3VudGVyLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9SZWZDb3VudGVkTGVha0NvdW50
ZXIuY3BwCkBAIC03MSw3ICs3MSw3IEBAIFJlZkNvdW50ZWRMZWFrQ291bnRlcjo6flJlZkNvdW50
ZWRMZWFrQ291bnRlcigpCiAgICAgICAgICAgICBMT0coUmVmQ291bnRlZExlYWtzLCAiTEVBSzog
JXUgJXMiLCBtX2NvdW50LCBtX2Rlc2NyaXB0aW9uKTsKICAgICAgICAgZWxzZSBpZiAoIWxvZ2dl
ZFN1cHByZXNzaW9uUmVhc29uKSB7CiAgICAgICAgICAgICAvLyBUaGlzIGxvZ3Mgb25seSBvbmUg
cmVhc29uLiBMYXRlciB3ZSBjb3VsZCBjaGFuZ2UgaXQgc28gd2UgbG9nIGFsbCB0aGUgcmVhc29u
cy4KLSAgICAgICAgICAgIExPRyhSZWZDb3VudGVkTGVha3MsICJObyBsZWFrIGNoZWNraW5nIGRv
bmU6ICVzIiwgbGVha01lc3NhZ2VTdXBwcmVzc2lvblJlYXNvbnMtPmJlZ2luKCktPmZpcnN0KTsK
KyAgICAgICAgICAgIExPRyhSZWZDb3VudGVkTGVha3MsICJObyBsZWFrIGNoZWNraW5nIGRvbmU6
ICVzIiwgbGVha01lc3NhZ2VTdXBwcmVzc2lvblJlYXNvbnMtPmJlZ2luKCktPmtleSk7CiAgICAg
ICAgICAgICBsb2dnZWRTdXBwcmVzc2lvblJlYXNvbiA9IHRydWU7CiAgICAgICAgIH0KICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9SZWZQdHJIYXNoTWFwLmggYi9Tb3VyY2UvV1RG
L3d0Zi9SZWZQdHJIYXNoTWFwLmgKaW5kZXggNWZhZTkwZThjZDQ3MTEyOWU4OWRjYzhlN2FlNjYz
OGFkYTE1NGQzMS4uOTU0MTgzN2UyYTZmMjliOWYwNmMzYzk1NjJhMTMzNDZiMDFkNGNlMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvUmVmUHRySGFzaE1hcC5oCisrKyBiL1NvdXJjZS9XVEYv
d3RmL1JlZlB0ckhhc2hNYXAuaApAQCAtMjE2LDcgKzIxNiw3IEBAIG5hbWVzcGFjZSBXVEYgewog
ICAgICAgICBBZGRSZXN1bHQgcmVzdWx0ID0gaW5saW5lQWRkKGtleSwgbWFwcGVkKTsKICAgICAg
ICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkgewogICAgICAgICAgICAgLy8gVGhlIGlubGluZUFk
ZCBjYWxsIGFib3ZlIGZvdW5kIGFuIGV4aXN0aW5nIGhhc2ggdGFibGUgZW50cnk7IHdlIG5lZWQg
dG8gc2V0IHRoZSBtYXBwZWQgdmFsdWUuCi0gICAgICAgICAgICBNYXBwZWRUcmFpdHM6OnN0b3Jl
KG1hcHBlZCwgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOworICAgICAgICAgICAgTWFwcGVkVHJh
aXRzOjpzdG9yZShtYXBwZWQsIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwogICAgICAgICB9CiAg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpAQCAtMjI4LDcgKzIyOCw3IEBAIG5hbWVzcGFj
ZSBXVEYgewogICAgICAgICBBZGRSZXN1bHQgcmVzdWx0ID0gaW5saW5lQWRkKGtleSwgbWFwcGVk
KTsKICAgICAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkgewogICAgICAgICAgICAgLy8gVGhl
IGlubGluZUFkZCBjYWxsIGFib3ZlIGZvdW5kIGFuIGV4aXN0aW5nIGhhc2ggdGFibGUgZW50cnk7
IHdlIG5lZWQgdG8gc2V0IHRoZSBtYXBwZWQgdmFsdWUuCi0gICAgICAgICAgICBNYXBwZWRUcmFp
dHM6OnN0b3JlKG1hcHBlZCwgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOworICAgICAgICAgICAg
TWFwcGVkVHJhaXRzOjpzdG9yZShtYXBwZWQsIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwogICAg
ICAgICB9CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpAQCAtMjU0LDcgKzI1NCw3IEBA
IG5hbWVzcGFjZSBXVEYgewogICAgICAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gY29uc3RfY2FzdDxI
YXNoVGFibGVUeXBlJj4obV9pbXBsKS5sb29rdXAoa2V5KTsKICAgICAgICAgaWYgKCFlbnRyeSkK
ICAgICAgICAgICAgIHJldHVybiBNYXBwZWRUcmFpdHM6OnBlZWsoTWFwcGVkVHJhaXRzOjplbXB0
eVZhbHVlKCkpOwotICAgICAgICByZXR1cm4gTWFwcGVkVHJhaXRzOjpwZWVrKGVudHJ5LT5zZWNv
bmQpOworICAgICAgICByZXR1cm4gTWFwcGVkVHJhaXRzOjpwZWVrKGVudHJ5LT52YWx1ZSk7CiAg
ICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwg
dHlwZW5hbWUgVywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzPgpAQCAtMjY0LDcgKzI2NCw3IEBAIG5h
bWVzcGFjZSBXVEYgewogICAgICAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gY29uc3RfY2FzdDxIYXNo
VGFibGVUeXBlJj4obV9pbXBsKS50ZW1wbGF0ZSBsb29rdXA8VHJhbnNsYXRvcj4oa2V5KTsKICAg
ICAgICAgaWYgKCFlbnRyeSkKICAgICAgICAgICAgIHJldHVybiBNYXBwZWRUcmFpdHM6OnBlZWso
TWFwcGVkVHJhaXRzOjplbXB0eVZhbHVlKCkpOwotICAgICAgICByZXR1cm4gTWFwcGVkVHJhaXRz
OjpwZWVrKGVudHJ5LT5zZWNvbmQpOworICAgICAgICByZXR1cm4gTWFwcGVkVHJhaXRzOjpwZWVr
KGVudHJ5LT52YWx1ZSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzPgpAQCAt
MzA4LDcgKzMwOCw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBpdGVyYXRvciBpdCA9IGZp
bmQoa2V5KTsKICAgICAgICAgaWYgKGl0ID09IGVuZCgpKQogICAgICAgICAgICAgcmV0dXJuIE1h
cHBlZFRyYWl0czo6cGFzc091dChNYXBwZWRUcmFpdHM6OmVtcHR5VmFsdWUoKSk7Ci0gICAgICAg
IE1hcHBlZFBhc3NPdXRUeXBlIHJlc3VsdCA9IE1hcHBlZFRyYWl0czo6cGFzc091dChpdC0+c2Vj
b25kKTsKKyAgICAgICAgTWFwcGVkUGFzc091dFR5cGUgcmVzdWx0ID0gTWFwcGVkVHJhaXRzOjpw
YXNzT3V0KGl0LT52YWx1ZSk7CiAgICAgICAgIHJlbW92ZShpdCk7CiAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICAgfQpAQCAtMzIwLDcgKzMyMCw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAg
ICBpdGVyYXRvciBpdCA9IGZpbmQoa2V5KTsKICAgICAgICAgaWYgKGl0ID09IGVuZCgpKQogICAg
ICAgICAgICAgcmV0dXJuIE1hcHBlZFRyYWl0czo6cGFzc091dChNYXBwZWRUcmFpdHM6OmVtcHR5
VmFsdWUoKSk7Ci0gICAgICAgIE1hcHBlZFBhc3NPdXRUeXBlIHJlc3VsdCA9IE1hcHBlZFRyYWl0
czo6cGFzc091dChpdC0+c2Vjb25kKTsKKyAgICAgICAgTWFwcGVkUGFzc091dFR5cGUgcmVzdWx0
ID0gTWFwcGVkVHJhaXRzOjpwYXNzT3V0KGl0LT52YWx1ZSk7CiAgICAgICAgIHJlbW92ZShpdCk7
CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvU3BlY3RydW0uaCBiL1NvdXJjZS9XVEYvd3RmL1NwZWN0cnVtLmgKaW5kZXggNWU3YTQ4NGNk
ODc2NmJjYWYyMmNhNGM5M2RkY2U5NzBkZDJiYTIxMy4uM2U2ZmE0YTYzM2ZhZDQyZGViNGRjNDgz
MzI1OTIzNDFlODRiM2EwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvU3BlY3RydW0uaAor
KysgYi9Tb3VyY2UvV1RGL3d0Zi9TcGVjdHJ1bS5oCkBAIC00NCw3ICs0NCw3IEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgICAgIHR5cGVuYW1lIEhhc2hNYXA8VCwgdW5zaWduZWQgbG9uZz46OkFkZFJl
c3VsdCByZXN1bHQgPSBtX21hcC5hZGQoa2V5LCBjb3VudCk7CiAgICAgICAgIGlmICghcmVzdWx0
LmlzTmV3RW50cnkpCi0gICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCArPSBjb3Vu
dDsKKyAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgKz0gY291bnQ7CiAgICAgfQog
ICAgIAogICAgIHVuc2lnbmVkIGxvbmcgZ2V0KGNvbnN0IFQmIGtleSkgY29uc3QKQEAgLTUyLDcg
KzUyLDcgQEAgcHVibGljOgogICAgICAgICBjb25zdF9pdGVyYXRvciBpdGVyID0gbV9tYXAuZmlu
ZChrZXkpOwogICAgICAgICBpZiAoaXRlciA9PSBtX21hcC5lbmQoKSkKICAgICAgICAgICAgIHJl
dHVybiAwOwotICAgICAgICByZXR1cm4gaXRlci0+c2Vjb25kOworICAgICAgICByZXR1cm4gaXRl
ci0+dmFsdWU7CiAgICAgfQogICAgIAogICAgIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gbV9t
YXAuYmVnaW4oKTsgfQpAQCAtODgsNyArODgsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBW
ZWN0b3I8S2V5QW5kQ291bnQ+IGxpc3Q7CiAgICAgICAgIGZvciAoY29uc3RfaXRlcmF0b3IgaXRl
ciA9IGJlZ2luKCk7IGl0ZXIgIT0gZW5kKCk7ICsraXRlcikKLSAgICAgICAgICAgIGxpc3QuYXBw
ZW5kKEtleUFuZENvdW50KGl0ZXItPmZpcnN0LCBpdGVyLT5zZWNvbmQpKTsKKyAgICAgICAgICAg
IGxpc3QuYXBwZW5kKEtleUFuZENvdW50KGl0ZXItPmtleSwgaXRlci0+dmFsdWUpKTsKICAgICAg
ICAgCiAgICAgICAgIHN0ZDo6c29ydChsaXN0LmJlZ2luKCksIGxpc3QuZW5kKCkpOwogICAgICAg
ICByZXR1cm4gbGlzdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1B0aHJl
YWRzLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcAppbmRleCAwYTI1
NDhjMWI0YjBiM2M5NTMwODY5NzAyYTljNTc2ZGM4ZmMxYzZhLi43MWI4Y2M1NGVkMjIzYmI4NWFj
NzRiNWZmYzYyODJlYjJhNjA5NWM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRp
bmdQdGhyZWFkcy5jcHAKKysrIGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5nUHRocmVhZHMuY3Bw
CkBAIC0xNTEsOCArMTUxLDggQEAgc3RhdGljIFRocmVhZElkZW50aWZpZXIgaWRlbnRpZmllckJ5
UHRocmVhZEhhbmRsZShjb25zdCBwdGhyZWFkX3QmIHB0aHJlYWRIYW5kbGUKIAogICAgIFRocmVh
ZE1hcDo6aXRlcmF0b3IgaSA9IHRocmVhZE1hcCgpLmJlZ2luKCk7CiAgICAgZm9yICg7IGkgIT0g
dGhyZWFkTWFwKCkuZW5kKCk7ICsraSkgewotICAgICAgICBpZiAocHRocmVhZF9lcXVhbChpLT5z
ZWNvbmQtPnB0aHJlYWRIYW5kbGUoKSwgcHRocmVhZEhhbmRsZSkgJiYgIWktPnNlY29uZC0+aGFz
RXhpdGVkKCkpCi0gICAgICAgICAgICByZXR1cm4gaS0+Zmlyc3Q7CisgICAgICAgIGlmIChwdGhy
ZWFkX2VxdWFsKGktPnZhbHVlLT5wdGhyZWFkSGFuZGxlKCksIHB0aHJlYWRIYW5kbGUpICYmICFp
LT52YWx1ZS0+aGFzRXhpdGVkKCkpCisgICAgICAgICAgICByZXR1cm4gaS0+a2V5OwogICAgIH0K
IAogICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9s
b2NhdGlvbi9HZW9sb2NhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0
aW9uL0dlb2xvY2F0aW9uLmNwcAppbmRleCA1N2NhZjMxNTJhY2M4OWQ2OTdhYThmNjQ1Y2M4ZjAx
MzU5YmNiMTUyLi5hM2VmNDAyNmRkMDk5YWFjNzEwNjQ2NDk0YmRjZDViOTY4NTVkYTNkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uLmNw
cApAQCAtMTkyLDcgKzE5Miw3IEBAIEdlb2xvY2F0aW9uOjpHZW9Ob3RpZmllciogR2VvbG9jYXRp
b246OldhdGNoZXJzOjpmaW5kKGludCBpZCkKICAgICBJZFRvTm90aWZpZXJNYXA6Oml0ZXJhdG9y
IGl0ZXIgPSBtX2lkVG9Ob3RpZmllck1hcC5maW5kKGlkKTsKICAgICBpZiAoaXRlciA9PSBtX2lk
VG9Ob3RpZmllck1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGl0ZXIt
PnNlY29uZC5nZXQoKTsKKyAgICByZXR1cm4gaXRlci0+dmFsdWUuZ2V0KCk7CiB9CiAKIHZvaWQg
R2VvbG9jYXRpb246OldhdGNoZXJzOjpyZW1vdmUoaW50IGlkKQpAQCAtMjAxLDcgKzIwMSw3IEBA
IHZvaWQgR2VvbG9jYXRpb246OldhdGNoZXJzOjpyZW1vdmUoaW50IGlkKQogICAgIElkVG9Ob3Rp
Zmllck1hcDo6aXRlcmF0b3IgaXRlciA9IG1faWRUb05vdGlmaWVyTWFwLmZpbmQoaWQpOwogICAg
IGlmIChpdGVyID09IG1faWRUb05vdGlmaWVyTWFwLmVuZCgpKQogICAgICAgICByZXR1cm47Ci0g
ICAgbV9ub3RpZmllclRvSWRNYXAucmVtb3ZlKGl0ZXItPnNlY29uZCk7CisgICAgbV9ub3RpZmll
clRvSWRNYXAucmVtb3ZlKGl0ZXItPnZhbHVlKTsKICAgICBtX2lkVG9Ob3RpZmllck1hcC5yZW1v
dmUoaXRlcik7CiB9CiAKQEAgLTIxMCw3ICsyMTAsNyBAQCB2b2lkIEdlb2xvY2F0aW9uOjpXYXRj
aGVyczo6cmVtb3ZlKEdlb05vdGlmaWVyKiBub3RpZmllcikKICAgICBOb3RpZmllclRvSWRNYXA6
Oml0ZXJhdG9yIGl0ZXIgPSBtX25vdGlmaWVyVG9JZE1hcC5maW5kKG5vdGlmaWVyKTsKICAgICBp
ZiAoaXRlciA9PSBtX25vdGlmaWVyVG9JZE1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuOwotICAg
IG1faWRUb05vdGlmaWVyTWFwLnJlbW92ZShpdGVyLT5zZWNvbmQpOworICAgIG1faWRUb05vdGlm
aWVyTWFwLnJlbW92ZShpdGVyLT52YWx1ZSk7CiAgICAgbV9ub3RpZmllclRvSWRNYXAucmVtb3Zl
KGl0ZXIpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJEYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJE
YXRhYmFzZS5jcHAKaW5kZXggNDNlMGJkZWVlZTgzYzgwN2RlOTZlMjRiNjcyODRkZTg3N2E1YjIx
MS4uNzMwZDgyYmRkNDA3ODkwYTI3YWMzYmNlMWMwOGQ5ZDViZDM1ZmU2ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcApAQCAtMTA4LDcg
KzEwOCw3IEBAIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gSURCRGF0YWJhc2U6Om9iamVjdFN0
b3JlTmFtZXMoKSBjb25zdAogewogICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiBvYmplY3RTdG9y
ZU5hbWVzID0gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7CiAgICAgZm9yIChJREJEYXRhYmFzZU1l
dGFkYXRhOjpPYmplY3RTdG9yZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX21ldGFkYXRhLm9i
amVjdFN0b3Jlcy5iZWdpbigpOyBpdCAhPSBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5lbmQoKTsg
KytpdCkKLSAgICAgICAgb2JqZWN0U3RvcmVOYW1lcy0+YXBwZW5kKGl0LT5maXJzdCk7CisgICAg
ICAgIG9iamVjdFN0b3JlTmFtZXMtPmFwcGVuZChpdC0+a2V5KTsKICAgICBvYmplY3RTdG9yZU5h
bWVzLT5zb3J0KCk7CiAgICAgcmV0dXJuIG9iamVjdFN0b3JlTmFtZXMucmVsZWFzZSgpOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VC
YWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRh
YmFzZUJhY2tlbmRJbXBsLmNwcAppbmRleCBiOTI5NzlmMWM0M2JkNzI3ZmVhZGU5YzgyODQ3NGU0
OTM0NWVhNTkxLi5kNzkzNTBmYTgxOWFkNzFiM2I2MDYyMWVmNDkzNzUwNjhiMTdjMzVjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tl
bmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRh
YmFzZUJhY2tlbmRJbXBsLmNwcApAQCAtMTY4LDcgKzE2OCw3IEBAIElEQkRhdGFiYXNlTWV0YWRh
dGEgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6bWV0YWRhdGEoKSBjb25zdAogewogICAgIElEQkRh
dGFiYXNlTWV0YWRhdGEgbWV0YWRhdGEobV9uYW1lLCBtX3ZlcnNpb24sIG1faW50VmVyc2lvbik7
CiAgICAgZm9yIChPYmplY3RTdG9yZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX29iamVjdFN0
b3Jlcy5iZWdpbigpOyBpdCAhPSBtX29iamVjdFN0b3Jlcy5lbmQoKTsgKytpdCkKLSAgICAgICAg
bWV0YWRhdGEub2JqZWN0U3RvcmVzLnNldChpdC0+Zmlyc3QsIGl0LT5zZWNvbmQtPm1ldGFkYXRh
KCkpOworICAgICAgICBtZXRhZGF0YS5vYmplY3RTdG9yZXMuc2V0KGl0LT5rZXksIGl0LT52YWx1
ZS0+bWV0YWRhdGEoKSk7CiAgICAgcmV0dXJuIG1ldGFkYXRhOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwuY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBs
LmNwcAppbmRleCBjN2VmODYwZTEzZTJkMTgxNzlhZTVlY2MwYzc1OTcwOWI4ODQzZGU5Li4yMzc2
MGIwZmI0MzM4YWMyYjlmYWVlMTVlZmJmNmE3YzY5ZGFmMTk1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5j
cHAKQEAgLTEwNyw3ICsxMDcsNyBAQCB2b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6ZGVsZXRl
RGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbAogICAgIGlmIChp
dCAhPSBtX2RhdGFiYXNlQmFja2VuZE1hcC5lbmQoKSkgewogICAgICAgICAvLyBJZiB0aGVyZSBh
cmUgYW55IGNvbm5lY3Rpb25zIHRvIHRoZSBkYXRhYmFzZSwgZGlyZWN0bHkgZGVsZXRlIHRoZQog
ICAgICAgICAvLyBkYXRhYmFzZS4KLSAgICAgICAgaXQtPnNlY29uZC0+ZGVsZXRlRGF0YWJhc2Uo
Y2FsbGJhY2tzKTsKKyAgICAgICAgaXQtPnZhbHVlLT5kZWxldGVEYXRhYmFzZShjYWxsYmFja3Mp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xMzQsNyArMTM0LDcgQEAgUGFzc1JlZlB0
cjxJREJCYWNraW5nU3RvcmU+IElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6b3BlbkJhY2tpbmdTdG9y
ZShQYXNzUmVmUHRyPFMKICAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmU7
CiAgICAgSURCQmFja2luZ1N0b3JlTWFwOjppdGVyYXRvciBpdDIgPSBtX2JhY2tpbmdTdG9yZU1h
cC5maW5kKGZpbGVJZGVudGlmaWVyKTsKICAgICBpZiAoaXQyICE9IG1fYmFja2luZ1N0b3JlTWFw
LmVuZCgpKQotICAgICAgICBiYWNraW5nU3RvcmUgPSBpdDItPnNlY29uZDsKKyAgICAgICAgYmFj
a2luZ1N0b3JlID0gaXQyLT52YWx1ZTsKICAgICBlbHNlIHsKICNpZiBVU0UoTEVWRUxEQikKICAg
ICAgICAgYmFja2luZ1N0b3JlID0gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbihzZWN1cml0
eU9yaWdpbi5nZXQoKSwgZGF0YURpcmVjdG9yeSwgZmlsZUlkZW50aWZpZXIsIHRoaXMpOwpAQCAt
MTcyLDcgKzE3Miw3IEBAIHZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuKGNvbnN0IFN0
cmluZyYgbmFtZSwgaW50NjRfdCB2ZXJzaW9uLCBQYXNzUmVmUHRyCiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KICAgICB9IGVsc2UKLSAgICAgICAgZGF0YWJhc2VCYWNrZW5kID0gaXQt
PnNlY29uZDsKKyAgICAgICAgZGF0YWJhc2VCYWNrZW5kID0gaXQtPnZhbHVlOwogCiAgICAgaWYg
KHZlcnNpb24gPT0gSURCRGF0YWJhc2VNZXRhZGF0YTo6Tm9JbnRWZXJzaW9uKQogICAgICAgICBk
YXRhYmFzZUJhY2tlbmQtPm9wZW5Db25uZWN0aW9uKGNhbGxiYWNrcywgZGF0YWJhc2VDYWxsYmFj
a3MpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2Jq
ZWN0U3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0
U3RvcmUuY3BwCmluZGV4IGNjNmMyOGVmMjg0ZWZkNzNmYTY1MzFjZjBkNWE5OTBjZTNhOTdjMjIu
LmViMjkyZGVlYjk1YTg4ODk4ZTBjMTQzYmZjZDljNzc3MTZhYmMwYzkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKQEAgLTY2
LDcgKzY2LDcgQEAgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBJREJPYmplY3RTdG9yZTo6aW5k
ZXhOYW1lcygpIGNvbnN0CiAgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZTo6aW5kZXhOYW1l
cyIpOwogICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiBpbmRleE5hbWVzID0gRE9NU3RyaW5nTGlz
dDo6Y3JlYXRlKCk7CiAgICAgZm9yIChJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbmRleE1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtX21ldGFkYXRhLmluZGV4ZXMuYmVnaW4oKTsgaXQgIT0gbV9t
ZXRhZGF0YS5pbmRleGVzLmVuZCgpOyArK2l0KQotICAgICAgICBpbmRleE5hbWVzLT5hcHBlbmQo
aXQtPmZpcnN0KTsKKyAgICAgICAgaW5kZXhOYW1lcy0+YXBwZW5kKGl0LT5rZXkpOwogICAgIGlu
ZGV4TmFtZXMtPnNvcnQoKTsKICAgICByZXR1cm4gaW5kZXhOYW1lcy5yZWxlYXNlKCk7CiB9CkBA
IC0yMTEsOCArMjExLDggQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6
cHV0KElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6UHV0TW8KICAgICBWZWN0b3I8SW5k
ZXhLZXlzPiBpbmRleEtleXM7CiAgICAgZm9yIChJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbmRl
eE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX21ldGFkYXRhLmluZGV4ZXMuYmVnaW4oKTsgaXQg
IT0gbV9tZXRhZGF0YS5pbmRleGVzLmVuZCgpOyArK2l0KSB7CiAgICAgICAgIEluZGV4S2V5cyBr
ZXlzOwotICAgICAgICBnZW5lcmF0ZUluZGV4S2V5c0ZvclZhbHVlKGl0LT5zZWNvbmQsIHZhbHVl
LCAma2V5cyk7Ci0gICAgICAgIGluZGV4TmFtZXMuYXBwZW5kKGl0LT5maXJzdCk7CisgICAgICAg
IGdlbmVyYXRlSW5kZXhLZXlzRm9yVmFsdWUoaXQtPnZhbHVlLCB2YWx1ZSwgJmtleXMpOworICAg
ICAgICBpbmRleE5hbWVzLmFwcGVuZChpdC0+a2V5KTsKICAgICAgICAgaW5kZXhLZXlzLmFwcGVu
ZChrZXlzKTsKICAgICB9CiAgICAgQVNTRVJUKGluZGV4S2V5cy5zaXplKCkgPT0gaW5kZXhOYW1l
cy5zaXplKCkpOwpAQCAtNDUzLDcgKzQ1Myw3IEBAIFBhc3NSZWZQdHI8SURCSW5kZXg+IElEQk9i
amVjdFN0b3JlOjppbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjCiAK
ICAgICBJREJJbmRleE1hcDo6aXRlcmF0b3IgaXQgPSBtX2luZGV4TWFwLmZpbmQobmFtZSk7CiAg
ICAgaWYgKGl0ICE9IG1faW5kZXhNYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdC0+c2Vjb25k
OworICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwogCiAgICAgUmVmUHRyPElEQkluZGV4QmFja2Vu
ZEludGVyZmFjZT4gaW5kZXhCYWNrZW5kID0gbV9iYWNrZW5kLT5pbmRleChuYW1lLCBlYyk7CiAg
ICAgQVNTRVJUKCFpbmRleEJhY2tlbmQgIT0gIWVjKTsgLy8gSWYgd2UgZGlkbid0IGdldCBhbiBp
bmRleCwgd2Ugc2hvdWxkIGhhdmUgZ290dGVuIGFuIGV4Y2VwdGlvbiBjb2RlLiBBbmQgdmljZSB2
ZXJzYS4KQEAgLTQ2Myw3ICs0NjMsNyBAQCBQYXNzUmVmUHRyPElEQkluZGV4PiBJREJPYmplY3RT
dG9yZTo6aW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYwogICAgIElE
Qk9iamVjdFN0b3JlTWV0YWRhdGE6OkluZGV4TWFwOjpjb25zdF9pdGVyYXRvciBtZGl0ID0gbV9t
ZXRhZGF0YS5pbmRleGVzLmZpbmQobmFtZSk7CiAgICAgQVNTRVJUKG1kaXQgIT0gbV9tZXRhZGF0
YS5pbmRleGVzLmVuZCgpKTsKIAotICAgIFJlZlB0cjxJREJJbmRleD4gaW5kZXggPSBJREJJbmRl
eDo6Y3JlYXRlKG1kaXQtPnNlY29uZCwgaW5kZXhCYWNrZW5kLnJlbGVhc2UoKSwgdGhpcywgbV90
cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgUmVmUHRyPElEQkluZGV4PiBpbmRleCA9IElEQkluZGV4
OjpjcmVhdGUobWRpdC0+dmFsdWUsIGluZGV4QmFja2VuZC5yZWxlYXNlKCksIHRoaXMsIG1fdHJh
bnNhY3Rpb24uZ2V0KCkpOwogICAgIG1faW5kZXhNYXAuc2V0KG5hbWUsIGluZGV4KTsKICAgICBy
ZXR1cm4gaW5kZXgucmVsZWFzZSgpOwogfQpAQCAtNDg3LDcgKzQ4Nyw3IEBAIHZvaWQgSURCT2Jq
ZWN0U3RvcmU6OmRlbGV0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCiAgICAgaWYgKCFlYykgewogICAgICAgICBJREJJbmRleE1hcDo6aXRlcmF0b3IgaXQgPSBt
X2luZGV4TWFwLmZpbmQobmFtZSk7CiAgICAgICAgIGlmIChpdCAhPSBtX2luZGV4TWFwLmVuZCgp
KSB7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLT5tYXJrRGVsZXRlZCgpOworICAgICAgICAgICAg
aXQtPnZhbHVlLT5tYXJrRGVsZXRlZCgpOwogICAgICAgICAgICAgbV9pbmRleE1hcC5yZW1vdmUo
bmFtZSk7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcAppbmRleCA4MDVi
NzE1MjQwNjAxOWFmZjgwYzBlMGE5YjgwODI1ZDBlZjA1YWNkLi42MGRhMDRmYjQxMTM0OTg0ODA5
MWM1MjZiZjMxYTc3YTc3OWU0M2JjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcApAQCAt
NzQsNyArNzQsNyBAQCBJREJPYmplY3RTdG9yZU1ldGFkYXRhIElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6Om1ldGFkYXRhKCkgY29uc3QKIHsKICAgICBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG1l
dGFkYXRhKG1fbmFtZSwgbV9rZXlQYXRoLCBtX2F1dG9JbmNyZW1lbnQpOwogICAgIGZvciAoSW5k
ZXhNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9pbmRleGVzLmJlZ2luKCk7IGl0ICE9IG1faW5k
ZXhlcy5lbmQoKTsgKytpdCkKLSAgICAgICAgbWV0YWRhdGEuaW5kZXhlcy5zZXQoaXQtPmZpcnN0
LCBpdC0+c2Vjb25kLT5tZXRhZGF0YSgpKTsKKyAgICAgICAgbWV0YWRhdGEuaW5kZXhlcy5zZXQo
aXQtPmtleSwgaXQtPnZhbHVlLT5tZXRhZGF0YSgpKTsKICAgICByZXR1cm4gbWV0YWRhdGE7CiB9
CiAKQEAgLTIxNiwxMSArMjE2LDExIEBAIHN0YXRpYyBib29sIG1ha2VJbmRleFdyaXRlcnMoUGFz
c1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiwKIAogICAgIGZv
ciAoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6SW5kZXhNYXA6Oml0ZXJhdG9yIGl0ID0gb2Jq
ZWN0U3RvcmUtPml0ZXJJbmRleGVzQmVnaW4oKTsgaXQgIT0gb2JqZWN0U3RvcmUtPml0ZXJJbmRl
eGVzRW5kKCk7ICsraXQpIHsKIAotICAgICAgICBjb25zdCBSZWZQdHI8SURCSW5kZXhCYWNrZW5k
SW1wbD4mIGluZGV4ID0gaXQtPnNlY29uZDsKKyAgICAgICAgY29uc3QgUmVmUHRyPElEQkluZGV4
QmFja2VuZEltcGw+JiBpbmRleCA9IGl0LT52YWx1ZTsKICAgICAgICAgaWYgKCFpbmRleC0+aGFz
VmFsaWRJZCgpKQogICAgICAgICAgICAgY29udGludWU7IC8vIFRoZSBpbmRleCBvYmplY3QgaGFz
IGJlZW4gY3JlYXRlZCwgYnV0IGRvZXMgbm90IGV4aXN0IGluIHRoZSBkYXRhYmFzZSB5ZXQuCiAK
LSAgICAgICAgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleXMga2V5cyA9
IGluZGV4S2V5TWFwLmdldChpdC0+Zmlyc3QpOworICAgICAgICBJREJPYmplY3RTdG9yZUJhY2tl
bmRJbnRlcmZhY2U6OkluZGV4S2V5cyBrZXlzID0gaW5kZXhLZXlNYXAuZ2V0KGl0LT5rZXkpOwog
ICAgICAgICAvLyBJZiB0aGUgb2JqZWN0U3RvcmUgaXMgdXNpbmcgYXV0b0luY3JlbWVudCwgdGhl
biBhbnkgaW5kZXhlcyB3aXRoIGFuIGlkZW50aWNhbCBrZXlQYXRoIG5lZWQgdG8gYWxzbyB1c2Ug
dGhlIHByaW1hcnkgKGdlbmVyYXRlZCkga2V5IGFzIGEga2V5LgogICAgICAgICBpZiAoa2V5V2Fz
R2VuZXJhdGVkKSB7CiAgICAgICAgICAgICBjb25zdCBJREJLZXlQYXRoJiBpbmRleEtleVBhdGgg
PSBpbmRleC0+a2V5UGF0aCgpOwpAQCAtMzk2LDEwICszOTYsMTAgQEAgdm9pZCBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
UGFzc1JlZlAKICAgICAgICAgICAgIHJlY29yZElkZW50aWZpZXIgPSBiYWNraW5nU3RvcmVDdXJz
b3ItPm9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcigpOwogCiAgICAgICAgICAgICBmb3IgKElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6OkluZGV4TWFwOjppdGVyYXRvciBpdCA9IG9iamVjdFN0
b3JlLT5tX2luZGV4ZXMuYmVnaW4oKTsgaXQgIT0gb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5lbmQo
KTsgKytpdCkgewotICAgICAgICAgICAgICAgIGlmICghaXQtPnNlY29uZC0+aGFzVmFsaWRJZCgp
KQorICAgICAgICAgICAgICAgIGlmICghaXQtPnZhbHVlLT5oYXNWYWxpZElkKCkpCiAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBUaGUgaW5kZXggb2JqZWN0IGhhcyBiZWVuIGNyZWF0
ZWQsIGJ1dCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgZGF0YWJhc2UgeWV0LgogCi0gICAgICAgICAg
ICAgICAgYm9vbCBzdWNjZXNzID0gb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5kZWxldGVJ
bmRleERhdGFGb3JSZWNvcmQodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCks
IG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0b3JlLT5pZCgpLCBpdC0+c2Vjb25k
LT5pZCgpLCByZWNvcmRJZGVudGlmaWVyLmdldCgpKTsKKyAgICAgICAgICAgICAgICBib29sIHN1
Y2Nlc3MgPSBvYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCktPmRlbGV0ZUluZGV4RGF0YUZvclJl
Y29yZCh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgb2JqZWN0U3RvcmUt
PmRhdGFiYXNlSWQoKSwgb2JqZWN0U3RvcmUtPmlkKCksIGl0LT52YWx1ZS0+aWQoKSwgcmVjb3Jk
SWRlbnRpZmllci5nZXQoKSk7CiAgICAgICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChzdWNjZXNz
LCBzdWNjZXNzKTsKICAgICAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwCmluZGV4IGE3MWMxYWI2OTU0MDcwNWNl
NWFjMWE0ZDAwOTVkY2ZhMGMyMDk2NDcuLjg3NGNmYzUzOWFiOWMyNjlkNzk5ODBjOWQ2OWZkYWY0
NWYyZjQyZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QlRyYW5zYWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJUcmFuc2FjdGlvbi5jcHAKQEAgLTE1MSw3ICsxNTEsNyBAQCBQYXNzUmVmUHRyPElEQk9iamVj
dFN0b3JlPiBJREJUcmFuc2FjdGlvbjo6b2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBF
eGNlcAogCiAgICAgSURCT2JqZWN0U3RvcmVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9vYmplY3RTdG9y
ZU1hcC5maW5kKG5hbWUpOwogICAgIGlmIChpdCAhPSBtX29iamVjdFN0b3JlTWFwLmVuZCgpKQot
ICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKIAog
ICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IG9iamVjdFN0b3JlQmFj
a2VuZCA9IG1fYmFja2VuZC0+b2JqZWN0U3RvcmUobmFtZSwgZWMpOwogICAgIEFTU0VSVCghb2Jq
ZWN0U3RvcmVCYWNrZW5kICE9ICFlYyk7IC8vIElmIHdlIGRpZG4ndCBnZXQgYSBzdG9yZSwgd2Ug
c2hvdWxkIGhhdmUgZ290dGVuIGFuIGV4Y2VwdGlvbiBjb2RlLiBBbmQgdmljZSB2ZXJzYS4KQEAg
LTE2Miw3ICsxNjIsNyBAQCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBJREJUcmFuc2FjdGlv
bjo6b2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcAogICAgIElEQkRhdGFiYXNl
TWV0YWRhdGE6Ok9iamVjdFN0b3JlTWFwOjpjb25zdF9pdGVyYXRvciBtZGl0ID0gbWV0YWRhdGEu
b2JqZWN0U3RvcmVzLmZpbmQobmFtZSk7CiAgICAgQVNTRVJUKG1kaXQgIT0gbWV0YWRhdGEub2Jq
ZWN0U3RvcmVzLmVuZCgpKTsKIAotICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZT4gb2JqZWN0U3Rv
cmUgPSBJREJPYmplY3RTdG9yZTo6Y3JlYXRlKG1kaXQtPnNlY29uZCwgb2JqZWN0U3RvcmVCYWNr
ZW5kLCB0aGlzKTsKKyAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmU+IG9iamVjdFN0b3JlID0gSURC
T2JqZWN0U3RvcmU6OmNyZWF0ZShtZGl0LT52YWx1ZSwgb2JqZWN0U3RvcmVCYWNrZW5kLCB0aGlz
KTsKICAgICBvYmplY3RTdG9yZUNyZWF0ZWQobmFtZSwgb2JqZWN0U3RvcmUpOwogICAgIHJldHVy
biBvYmplY3RTdG9yZS5yZWxlYXNlKCk7CiB9CkBAIC0xODIsNyArMTgyLDcgQEAgdm9pZCBJREJU
cmFuc2FjdGlvbjo6b2JqZWN0U3RvcmVEZWxldGVkKGNvbnN0IFN0cmluZyYgbmFtZSkKICAgICBB
U1NFUlQoaXNWZXJzaW9uQ2hhbmdlKCkpOwogICAgIElEQk9iamVjdFN0b3JlTWFwOjppdGVyYXRv
ciBpdCA9IG1fb2JqZWN0U3RvcmVNYXAuZmluZChuYW1lKTsKICAgICBpZiAoaXQgIT0gbV9vYmpl
Y3RTdG9yZU1hcC5lbmQoKSkgewotICAgICAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmU+IG9iamVj
dFN0b3JlID0gaXQtPnNlY29uZDsKKyAgICAgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlPiBvYmpl
Y3RTdG9yZSA9IGl0LT52YWx1ZTsKICAgICAgICAgbV9vYmplY3RTdG9yZU1hcC5yZW1vdmUobmFt
ZSk7CiAgICAgICAgIG9iamVjdFN0b3JlLT5tYXJrRGVsZXRlZCgpOwogICAgICAgICBtX29iamVj
dFN0b3JlQ2xlYW51cE1hcC5zZXQob2JqZWN0U3RvcmUsIG9iamVjdFN0b3JlLT5tZXRhZGF0YSgp
KTsKQEAgLTMwMCw3ICszMDAsNyBAQCB2b2lkIElEQlRyYW5zYWN0aW9uOjpvbkFib3J0KCkKIAog
ICAgIGlmIChpc1ZlcnNpb25DaGFuZ2UoKSkgewogICAgICAgICBmb3IgKElEQk9iamVjdFN0b3Jl
TWV0YWRhdGFNYXA6Oml0ZXJhdG9yIGl0ID0gbV9vYmplY3RTdG9yZUNsZWFudXBNYXAuYmVnaW4o
KTsgaXQgIT0gbV9vYmplY3RTdG9yZUNsZWFudXBNYXAuZW5kKCk7ICsraXQpCi0gICAgICAgICAg
ICBpdC0+Zmlyc3QtPnNldE1ldGFkYXRhKGl0LT5zZWNvbmQpOworICAgICAgICAgICAgaXQtPmtl
eS0+c2V0TWV0YWRhdGEoaXQtPnZhbHVlKTsKICAgICB9CiAgICAgbV9vYmplY3RTdG9yZUNsZWFu
dXBNYXAuY2xlYXIoKTsKICAgICBjbG9zZU9wZW5DdXJzb3JzKCk7CkBAIC0zODQsNyArMzg0LDcg
QEAgYm9vbCBJREJUcmFuc2FjdGlvbjo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBl
dmVudCkKIAogICAgIC8vIEJyZWFrIHJlZmVyZW5jZSBjeWNsZXMuCiAgICAgZm9yIChJREJPYmpl
Y3RTdG9yZU1hcDo6aXRlcmF0b3IgaXQgPSBtX29iamVjdFN0b3JlTWFwLmJlZ2luKCk7IGl0ICE9
IG1fb2JqZWN0U3RvcmVNYXAuZW5kKCk7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPnRyYW5z
YWN0aW9uRmluaXNoZWQoKTsKKyAgICAgICAgaXQtPnZhbHVlLT50cmFuc2FjdGlvbkZpbmlzaGVk
KCk7CiAgICAgbV9vYmplY3RTdG9yZU1hcC5jbGVhcigpOwogCiAgICAgVmVjdG9yPFJlZlB0cjxF
dmVudFRhcmdldD4gPiB0YXJnZXRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXN0cmVhbS9NZWRpYUNvbnN0cmFpbnRzSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL01lZGlhQ29uc3RyYWludHNJbXBsLmNwcAppbmRleCAxMzM2Zjgy
OGEwYjdiNDY4NzE3Y2RiNDkxYzgwZmE5NjQ0Y2QyZWU5Li44ZTRiZDk5MWI5YzkxMmYwNTE5MTk3
ODE3NzAxZDk2ZDA1ZjE2MmEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL01lZGlhQ29uc3RyYWludHNJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL01lZGlhQ29uc3RyYWludHNJbXBsLmNwcApAQCAtMTE0LDcgKzEx
NCw3IEBAIHZvaWQgTWVkaWFDb25zdHJhaW50c0ltcGw6OmdldE1hbmRhdG9yeUNvbnN0cmFpbnRO
YW1lcyhWZWN0b3I8U3RyaW5nPiYgbmFtZXMpIGNvCiAgICAgbmFtZXMuY2xlYXIoKTsKICAgICBI
YXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaSA9IG1fbWFuZGF0b3J5Q29u
c3RyYWludHMuYmVnaW4oKTsKICAgICBmb3IgKDsgaSAhPSBtX21hbmRhdG9yeUNvbnN0cmFpbnRz
LmVuZCgpOyArK2kpCi0gICAgICAgIG5hbWVzLmFwcGVuZChpLT5maXJzdCk7CisgICAgICAgIG5h
bWVzLmFwcGVuZChpLT5rZXkpOwogfQogCiB2b2lkIE1lZGlhQ29uc3RyYWludHNJbXBsOjpnZXRP
cHRpb25hbENvbnN0cmFpbnROYW1lcyhWZWN0b3I8U3RyaW5nPiYgbmFtZXMpIGNvbnN0CkBAIC0x
MjksNyArMTI5LDcgQEAgYm9vbCBNZWRpYUNvbnN0cmFpbnRzSW1wbDo6Z2V0TWFuZGF0b3J5Q29u
c3RyYWludFZhbHVlKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW4KICAgICBpZiAoaSA9PSBtX21h
bmRhdG9yeUNvbnN0cmFpbnRzLmVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICB2
YWx1ZSA9IGktPnNlY29uZDsKKyAgICB2YWx1ZSA9IGktPnZhbHVlOwogICAgIHJldHVybiB0cnVl
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Fi
c3RyYWN0RGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9B
YnN0cmFjdERhdGFiYXNlLmNwcAppbmRleCBjNzUzOWM2ZTExMmI5ZTFlNmJmMWUyY2QzZjAyYWUw
Y2JhMmJlYTI2Li42MjkwN2UzZTFjZTZiMDkxNWMyYjAzNDc2MDllNTA3ZThjMDFjZWI2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Fic3RyYWN0RGF0YWJh
c2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvQWJzdHJhY3RE
YXRhYmFzZS5jcHAKQEAgLTI4Miw3ICsyODIsNyBAQCBib29sIEFic3RyYWN0RGF0YWJhc2U6OnBl
cmZvcm1PcGVuQW5kVmVyaWZ5KGJvb2wgc2hvdWxkU2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsCiAg
ICAgICAgIEd1aWRWZXJzaW9uTWFwOjppdGVyYXRvciBlbnRyeSA9IGd1aWRUb1ZlcnNpb25NYXAo
KS5maW5kKG1fZ3VpZCk7CiAgICAgICAgIGlmIChlbnRyeSAhPSBndWlkVG9WZXJzaW9uTWFwKCku
ZW5kKCkpIHsKICAgICAgICAgICAgIC8vIE1hcCBudWxsIHN0cmluZyB0byBlbXB0eSBzdHJpbmcg
KHNlZSB1cGRhdGVHdWlkVmVyc2lvbk1hcCgpKS4KLSAgICAgICAgICAgIGN1cnJlbnRWZXJzaW9u
ID0gZW50cnktPnNlY29uZC5pc051bGwoKSA/IGVtcHR5U3RyaW5nKCkgOiBlbnRyeS0+c2Vjb25k
Lmlzb2xhdGVkQ29weSgpOworICAgICAgICAgICAgY3VycmVudFZlcnNpb24gPSBlbnRyeS0+dmFs
dWUuaXNOdWxsKCkgPyBlbXB0eVN0cmluZygpIDogZW50cnktPnZhbHVlLmlzb2xhdGVkQ29weSgp
OwogICAgICAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJDdXJyZW50IGNhY2hlZCB2ZXJzaW9uIGZv
ciBndWlkICVpIGlzICVzIiwgbV9ndWlkLCBjdXJyZW50VmVyc2lvbi5hc2NpaSgpLmRhdGEoKSk7
CiAKICNpZiBQTEFURk9STShDSFJPTUlVTSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNwcAppbmRleCA0NmQyODEyOTJkOWI3
ZTQzN2I1ZGUwZjMyNWZhZjI0NWM4MTYzYWQ0Li41YmQ1ZTdiM2QyZTFjNDAyMTFiMDFhNjFkMGJm
NzgzY2IzNTI2MjI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFi
YXNlL0RhdGFiYXNlVHJhY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3BwCkBAIC0yNTAsNyArMjUwLDcgQEAgdm9pZCBEYXRh
YmFzZVRyYWNrZXI6OmludGVycnVwdEFsbERhdGFiYXNlc0ZvckNvbnRleHQoY29uc3QgU2NyaXB0
RXhlY3V0aW9uQ29udGUKIAogICAgICAgICBEYXRhYmFzZU5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9y
IGRiTmFtZU1hcEVuZEl0ID0gbmFtZU1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAoRGF0YWJhc2VO
YW1lTWFwOjpjb25zdF9pdGVyYXRvciBkYk5hbWVNYXBJdCA9IG5hbWVNYXAtPmJlZ2luKCk7IGRi
TmFtZU1hcEl0ICE9IGRiTmFtZU1hcEVuZEl0OyArK2RiTmFtZU1hcEl0KSB7Ci0gICAgICAgICAg
ICBEYXRhYmFzZVNldCogZGF0YWJhc2VTZXQgPSBkYk5hbWVNYXBJdC0+c2Vjb25kOworICAgICAg
ICAgICAgRGF0YWJhc2VTZXQqIGRhdGFiYXNlU2V0ID0gZGJOYW1lTWFwSXQtPnZhbHVlOwogICAg
ICAgICAgICAgRGF0YWJhc2VTZXQ6OmNvbnN0X2l0ZXJhdG9yIGRiU2V0RW5kSXQgPSBkYXRhYmFz
ZVNldC0+ZW5kKCk7CiAgICAgICAgICAgICBmb3IgKERhdGFiYXNlU2V0Ojpjb25zdF9pdGVyYXRv
ciBkYlNldEl0ID0gZGF0YWJhc2VTZXQtPmJlZ2luKCk7IGRiU2V0SXQgIT0gZGJTZXRFbmRJdDsg
KytkYlNldEl0KSB7CiAgICAgICAgICAgICAgICAgaWYgKCgqZGJTZXRJdCktPnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKSA9PSBjb250ZXh0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJkYXRhYmFzZS9PcmlnaW5Vc2FnZVJlY29yZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlL09yaWdpblVzYWdlUmVjb3JkLmNwcAppbmRleCA0NDM1NTBhNTcz
MDlmMzM2M2YwZmNhOThmNTA4YzAyNzZkMGQ5OWRiLi4yYmY4YWY0YWUwMDk5MjgwYWNhMTc1Nzc0
OGJhMjFjZjkwYjcwMmRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRh
dGFiYXNlL09yaWdpblVzYWdlUmVjb3JkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmRhdGFiYXNlL09yaWdpblVzYWdlUmVjb3JkLmNwcApAQCAtOTMsNyArOTMsNyBAQCB1bnNp
Z25lZCBsb25nIGxvbmcgT3JpZ2luVXNhZ2VSZWNvcmQ6OmRpc2tVc2FnZSgpCiAgICAgSGFzaE1h
cDxTdHJpbmcsIERhdGFiYXNlRW50cnk+OjppdGVyYXRvciBpRGF0YWJhc2UgPSBtX2RhdGFiYXNl
TWFwLmJlZ2luKCk7CiAgICAgSGFzaE1hcDxTdHJpbmcsIERhdGFiYXNlRW50cnk+OjppdGVyYXRv
ciBlbmREYXRhYmFzZSA9IG1fZGF0YWJhc2VNYXAuZW5kKCk7CiAgICAgZm9yICg7IGlEYXRhYmFz
ZSAhPSBlbmREYXRhYmFzZTsgKytpRGF0YWJhc2UpCi0gICAgICAgIG1fY2FjaGVkRGlza1VzYWdl
ICs9IGlEYXRhYmFzZS0+c2Vjb25kLnNpemU7CisgICAgICAgIG1fY2FjaGVkRGlza1VzYWdlICs9
IGlEYXRhYmFzZS0+dmFsdWUuc2l6ZTsKIAogICAgIG1fY2FjaGVkRGlza1VzYWdlSXNWYWxpZCA9
IHRydWU7CiAgICAgcmV0dXJuIG1fY2FjaGVkRGlza1VzYWdlOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25Db29y
ZGluYXRvci5jcHAKaW5kZXggODM3YjhmYmQyMjA1YWRjOTc0ODZkZDNmMGU4ZjAyMDczODBmOGQ5
Yi4uZGEzYTdlZTc1YjhjMDEyNTk0NjZlYzRhN2VhZGE5N2JkMWMyM2JmNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5h
dG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5z
YWN0aW9uQ29vcmRpbmF0b3IuY3BwCkBAIC03OCw3ICs3OCw3IEBAIHZvaWQgU1FMVHJhbnNhY3Rp
b25Db29yZGluYXRvcjo6YWNxdWlyZUxvY2soU1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQog
ICAgICAgICBjb29yZGluYXRpb25JbmZvSXRlcmF0b3IgPSBtX2Nvb3JkaW5hdGlvbkluZm9NYXAu
YWRkKGRiSWRlbnRpZmllciwgQ29vcmRpbmF0aW9uSW5mbygpKS5pdGVyYXRvcjsKICAgICB9CiAK
LSAgICBDb29yZGluYXRpb25JbmZvJiBpbmZvID0gY29vcmRpbmF0aW9uSW5mb0l0ZXJhdG9yLT5z
ZWNvbmQ7CisgICAgQ29vcmRpbmF0aW9uSW5mbyYgaW5mbyA9IGNvb3JkaW5hdGlvbkluZm9JdGVy
YXRvci0+dmFsdWU7CiAgICAgaW5mby5wZW5kaW5nVHJhbnNhY3Rpb25zLmFwcGVuZCh0cmFuc2Fj
dGlvbik7CiAgICAgcHJvY2Vzc1BlbmRpbmdUcmFuc2FjdGlvbnMoaW5mbyk7CiB9CkBAIC05Miw3
ICs5Miw3IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6cmVsZWFzZUxvY2soU1FM
VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQogCiAgICAgQ29vcmRpbmF0aW9uSW5mb01hcDo6aXRl
cmF0b3IgY29vcmRpbmF0aW9uSW5mb0l0ZXJhdG9yID0gbV9jb29yZGluYXRpb25JbmZvTWFwLmZp
bmQoZGJJZGVudGlmaWVyKTsKICAgICBBU1NFUlQoY29vcmRpbmF0aW9uSW5mb0l0ZXJhdG9yICE9
IG1fY29vcmRpbmF0aW9uSW5mb01hcC5lbmQoKSk7Ci0gICAgQ29vcmRpbmF0aW9uSW5mbyYgaW5m
byA9IGNvb3JkaW5hdGlvbkluZm9JdGVyYXRvci0+c2Vjb25kOworICAgIENvb3JkaW5hdGlvbklu
Zm8mIGluZm8gPSBjb29yZGluYXRpb25JbmZvSXRlcmF0b3ItPnZhbHVlOwogCiAgICAgaWYgKHRy
YW5zYWN0aW9uLT5pc1JlYWRPbmx5KCkpIHsKICAgICAgICAgQVNTRVJUKGluZm8uYWN0aXZlUmVh
ZFRyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbikpOwpAQCAtMTEwLDcgKzExMCw3IEBA
IHZvaWQgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6c2h1dGRvd24oKQogICAgIC8vIE5vdGlm
eSBhbGwgdHJhbnNhY3Rpb25zIGluIHByb2dyZXNzIHRoYXQgdGhlIGRhdGFiYXNlIHRocmVhZCBp
cyBzaHV0dGluZyBkb3duCiAgICAgZm9yIChDb29yZGluYXRpb25JbmZvTWFwOjppdGVyYXRvciBj
b29yZGluYXRpb25JbmZvSXRlcmF0b3IgPSBtX2Nvb3JkaW5hdGlvbkluZm9NYXAuYmVnaW4oKTsK
ICAgICAgICAgIGNvb3JkaW5hdGlvbkluZm9JdGVyYXRvciAhPSBtX2Nvb3JkaW5hdGlvbkluZm9N
YXAuZW5kKCk7ICsrY29vcmRpbmF0aW9uSW5mb0l0ZXJhdG9yKSB7Ci0gICAgICAgIENvb3JkaW5h
dGlvbkluZm8mIGluZm8gPSBjb29yZGluYXRpb25JbmZvSXRlcmF0b3ItPnNlY29uZDsKKyAgICAg
ICAgQ29vcmRpbmF0aW9uSW5mbyYgaW5mbyA9IGNvb3JkaW5hdGlvbkluZm9JdGVyYXRvci0+dmFs
dWU7CiAgICAgICAgIGlmIChpbmZvLmFjdGl2ZVdyaXRlVHJhbnNhY3Rpb24pCiAgICAgICAgICAg
ICBpbmZvLmFjdGl2ZVdyaXRlVHJhbnNhY3Rpb24tPm5vdGlmeURhdGFiYXNlVGhyZWFkSXNTaHV0
dGluZ0Rvd24oKTsKICAgICAgICAgZm9yIChIYXNoU2V0PFJlZlB0cjxTUUxUcmFuc2FjdGlvbj4g
Pjo6aXRlcmF0b3IgYWN0aXZlUmVhZFRyYW5zYWN0aW9uc0l0ZXJhdG9yID0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvY2hyb21pdW0vRGF0YWJhc2VUcmFj
a2VyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9jaHJv
bWl1bS9EYXRhYmFzZVRyYWNrZXJDaHJvbWl1bS5jcHAKaW5kZXggODhlOWJkYTFhNmFhYzU5YWRj
MWIxZDNmNGRjODY3NGNhMWE5MmMxZS4uMzA5ZDQ2YzBkMDgyYWRjZWM0MjJhNGQyY2JmN2E4N2U4
ZDY5ODk3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9j
aHJvbWl1bS9EYXRhYmFzZVRyYWNrZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJkYXRhYmFzZS9jaHJvbWl1bS9EYXRhYmFzZVRyYWNrZXJDaHJvbWl1bS5jcHAK
QEAgLTE4MCw3ICsxODAsNyBAQCB2b2lkIERhdGFiYXNlVHJhY2tlcjo6aW50ZXJydXB0QWxsRGF0
YWJhc2VzRm9yQ29udGV4dChjb25zdCBTY3JpcHRFeGVjdXRpb25Db250ZQogCiAgICAgRGF0YWJh
c2VOYW1lTWFwOjpjb25zdF9pdGVyYXRvciBkYk5hbWVNYXBFbmRJdCA9IG5hbWVNYXAtPmVuZCgp
OwogICAgIGZvciAoRGF0YWJhc2VOYW1lTWFwOjpjb25zdF9pdGVyYXRvciBkYk5hbWVNYXBJdCA9
IG5hbWVNYXAtPmJlZ2luKCk7IGRiTmFtZU1hcEl0ICE9IGRiTmFtZU1hcEVuZEl0OyArK2RiTmFt
ZU1hcEl0KSB7Ci0gICAgICAgIERhdGFiYXNlU2V0KiBkYXRhYmFzZVNldCA9IGRiTmFtZU1hcEl0
LT5zZWNvbmQ7CisgICAgICAgIERhdGFiYXNlU2V0KiBkYXRhYmFzZVNldCA9IGRiTmFtZU1hcEl0
LT52YWx1ZTsKICAgICAgICAgRGF0YWJhc2VTZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGRhdGFi
YXNlU2V0LT5lbmQoKTsKICAgICAgICAgZm9yIChEYXRhYmFzZVNldDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBkYXRhYmFzZVNldC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAg
ICBpZiAoKCppdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSA9PSBjb250ZXh0KQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9jaHJvbWl1bS9RdW90YVRy
YWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9jaHJvbWl1bS9R
dW90YVRyYWNrZXIuY3BwCmluZGV4IDAzNDRjYThmNjU2YTY1ZDM3YjMwNGJiN2UzOTg4OWZjZTM2
ZjhmNWQuLjM4MmEzZmI4YjU3ODYyNTVjZWJhMGU3Zjg1OWIxNDJhZWMxZDk1MTkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvY2hyb21pdW0vUXVvdGFUcmFj
a2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVt
L1F1b3RhVHJhY2tlci5jcHAKQEAgLTUzLDggKzUzLDggQEAgdm9pZCBRdW90YVRyYWNrZXI6Omdl
dERhdGFiYXNlU2l6ZUFuZFNwYWNlQXZhaWxhYmxlVG9PcmlnaW4oCiAgICAgICAgIE11dGV4TG9j
a2VyIGxvY2tEYXRhKG1fZGF0YUd1YXJkKTsKICAgICAgICAgQVNTRVJUKG1fZGF0YWJhc2VTaXpl
cy5jb250YWlucyhvcmlnaW5JZGVudGlmaWVyKSk7CiAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBT
aXplTWFwPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2RhdGFiYXNlU2l6ZXMuZmluZChvcmlnaW5J
ZGVudGlmaWVyKTsKLSAgICAgICAgQVNTRVJUKGl0LT5zZWNvbmQuY29udGFpbnMoZGF0YWJhc2VO
YW1lKSk7Ci0gICAgICAgICpkYXRhYmFzZVNpemUgPSBpdC0+c2Vjb25kLmdldChkYXRhYmFzZU5h
bWUpOworICAgICAgICBBU1NFUlQoaXQtPnZhbHVlLmNvbnRhaW5zKGRhdGFiYXNlTmFtZSkpOwor
ICAgICAgICAqZGF0YWJhc2VTaXplID0gaXQtPnZhbHVlLmdldChkYXRhYmFzZU5hbWUpOwogCiAg
ICAgICAgIGlmIChtX3NwYWNlQXZhaWxhYmxlVG9PcmlnaW5zLmNvbnRhaW5zKG9yaWdpbklkZW50
aWZpZXIpKSB7CiAgICAgICAgICAgICAqc3BhY2VBdmFpbGFibGUgPSBtX3NwYWNlQXZhaWxhYmxl
VG9PcmlnaW5zLmdldChvcmlnaW5JZGVudGlmaWVyKTsKQEAgLTcyLDcgKzcyLDcgQEAgdm9pZCBR
dW90YVRyYWNrZXI6OnVwZGF0ZURhdGFiYXNlU2l6ZSgKIHsKICAgICBNdXRleExvY2tlciBsb2Nr
RGF0YShtX2RhdGFHdWFyZCk7CiAgICAgSGFzaE1hcDxTdHJpbmcsIFNpemVNYXA+OjppdGVyYXRv
ciBpdCA9IG1fZGF0YWJhc2VTaXplcy5hZGQob3JpZ2luSWRlbnRpZmllciwgU2l6ZU1hcCgpKS5p
dGVyYXRvcjsKLSAgICBpdC0+c2Vjb25kLnNldChkYXRhYmFzZU5hbWUsIGRhdGFiYXNlU2l6ZSk7
CisgICAgaXQtPnZhbHVlLnNldChkYXRhYmFzZU5hbWUsIGRhdGFiYXNlU2l6ZSk7CiB9CiAKIHZv
aWQgUXVvdGFUcmFja2VyOjp1cGRhdGVTcGFjZUF2YWlsYWJsZVRvT3JpZ2luKGNvbnN0IFN0cmlu
ZyYgb3JpZ2luSWRlbnRpZmllciwgdW5zaWduZWQgbG9uZyBsb25nIHNwYWNlQXZhaWxhYmxlKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldERl
ZmxhdGVGcmFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNv
Y2tldERlZmxhdGVGcmFtZXIuY3BwCmluZGV4IGJmN2FmZGJhYjFjYjRkZmQ2MmZhODE5MzU0MTYy
NDEwZjBiOWU3NGQuLjU5MDI0NmRjMjEwYWVhMmEzMmM2ODlmNGRlYjI1NjY5YjcyZTcxNDkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXREZWZs
YXRlRnJhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2Vi
U29ja2V0RGVmbGF0ZUZyYW1lci5jcHAKQEAgLTg4LDcgKzg4LDcgQEAgYm9vbCBXZWJTb2NrZXRF
eHRlbnNpb25EZWZsYXRlRnJhbWU6OnByb2Nlc3NSZXNwb25zZShjb25zdCBIYXNoTWFwPFN0cmlu
ZywgU3RyaW4KICAgICBpbnQgd2luZG93Qml0cyA9IDE1OwogICAgIEhhc2hNYXA8U3RyaW5nLCBT
dHJpbmc+Ojpjb25zdF9pdGVyYXRvciBwYXJhbWV0ZXIgPSBzZXJ2ZXJQYXJhbWV0ZXJzLmZpbmQo
Im1heF93aW5kb3dfYml0cyIpOwogICAgIGlmIChwYXJhbWV0ZXIgIT0gc2VydmVyUGFyYW1ldGVy
cy5lbmQoKSkgewotICAgICAgICB3aW5kb3dCaXRzID0gcGFyYW1ldGVyLT5zZWNvbmQudG9JbnQo
KTsKKyAgICAgICAgd2luZG93Qml0cyA9IHBhcmFtZXRlci0+dmFsdWUudG9JbnQoKTsKICAgICAg
ICAgaWYgKHdpbmRvd0JpdHMgPCA4IHx8IHdpbmRvd0JpdHMgPiAxNSkgewogICAgICAgICAgICAg
bV9mYWlsdXJlUmVhc29uID0gIlJlY2VpdmVkIGludmFsaWQgbWF4X3dpbmRvd19iaXRzIHBhcmFt
ZXRlciI7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC05OSw3ICs5OSw3IEBAIGJvb2wg
V2ViU29ja2V0RXh0ZW5zaW9uRGVmbGF0ZUZyYW1lOjpwcm9jZXNzUmVzcG9uc2UoY29uc3QgSGFz
aE1hcDxTdHJpbmcsIFN0cmluCiAgICAgV2ViU29ja2V0RGVmbGF0ZXI6OkNvbnRleHRUYWtlT3Zl
ck1vZGUgbW9kZSA9IFdlYlNvY2tldERlZmxhdGVyOjpUYWtlT3ZlckNvbnRleHQ7CiAgICAgcGFy
YW1ldGVyID0gc2VydmVyUGFyYW1ldGVycy5maW5kKCJub19jb250ZXh0X3Rha2VvdmVyIik7CiAg
ICAgaWYgKHBhcmFtZXRlciAhPSBzZXJ2ZXJQYXJhbWV0ZXJzLmVuZCgpKSB7Ci0gICAgICAgIGlm
ICghcGFyYW1ldGVyLT5zZWNvbmQuaXNOdWxsKCkpIHsKKyAgICAgICAgaWYgKCFwYXJhbWV0ZXIt
PnZhbHVlLmlzTnVsbCgpKSB7CiAgICAgICAgICAgICBtX2ZhaWx1cmVSZWFzb24gPSAiUmVjZWl2
ZWQgaW52YWxpZCBub19jb250ZXh0X3Rha2VvdmVyIHBhcmFtZXRlciI7CiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyLmNw
cAppbmRleCA3YzU5MmFkMWJmMjgwNjhjODMwMzM2OWI2MDY1NjczYjZiYTdlOTc0Li41NjA5ZjY1
ODFhYWI5NzQyYjBmZDg1ZmYxNWQxNWZhNTBlZDI5ZjViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0RXh0ZW5zaW9uRGlzcGF0Y2hlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEV4dGVuc2lv
bkRpc3BhdGNoZXIuY3BwCkBAIC0xODEsMTAgKzE4MSwxMCBAQCB2b2lkIFdlYlNvY2tldEV4dGVu
c2lvbkRpc3BhdGNoZXI6OmFwcGVuZEFjY2VwdGVkRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZXh0
ZW5zaQogICAgIC8vIEZJWE1FOiBTaG91bGQgdXNlIExpc3RIYXNoU2V0IHRvIGtlZXAgdGhlIG9y
ZGVyIG9mIHRoZSBwYXJhbWV0ZXJzLgogICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46
OmNvbnN0X2l0ZXJhdG9yIGl0ZXJhdG9yID0gZXh0ZW5zaW9uUGFyYW1ldGVycy5iZWdpbigpOyBp
dGVyYXRvciAhPSBleHRlbnNpb25QYXJhbWV0ZXJzLmVuZCgpOyArK2l0ZXJhdG9yKSB7CiAgICAg
ICAgIG1fYWNjZXB0ZWRFeHRlbnNpb25zQnVpbGRlci5hcHBlbmQoIjsgIik7Ci0gICAgICAgIG1f
YWNjZXB0ZWRFeHRlbnNpb25zQnVpbGRlci5hcHBlbmQoaXRlcmF0b3ItPmZpcnN0KTsKLSAgICAg
ICAgaWYgKCFpdGVyYXRvci0+c2Vjb25kLmlzTnVsbCgpKSB7CisgICAgICAgIG1fYWNjZXB0ZWRF
eHRlbnNpb25zQnVpbGRlci5hcHBlbmQoaXRlcmF0b3ItPmtleSk7CisgICAgICAgIGlmICghaXRl
cmF0b3ItPnZhbHVlLmlzTnVsbCgpKSB7CiAgICAgICAgICAgICBtX2FjY2VwdGVkRXh0ZW5zaW9u
c0J1aWxkZXIuYXBwZW5kKCI9Iik7Ci0gICAgICAgICAgICBtX2FjY2VwdGVkRXh0ZW5zaW9uc0J1
aWxkZXIuYXBwZW5kKGl0ZXJhdG9yLT5zZWNvbmQpOworICAgICAgICAgICAgbV9hY2NlcHRlZEV4
dGVuc2lvbnNCdWlsZGVyLmFwcGVuZChpdGVyYXRvci0+dmFsdWUpOwogICAgICAgICB9CiAgICAg
fQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENh
Y2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAK
aW5kZXggNmMwOGJlMjFmMGUzMTY3MTI3YWIzZjJiNGI5NTdmOWI0ZWJjZjgyMy4uOGUzMmViNTAx
MDEzM2Y5ZWU4NzNlNzk1OGNlNGIzYjZjN2JlYTBlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCkBAIC05NCw3ICs5NCw3IEBAIEFYT2JqZWN0
Q2FjaGU6On5BWE9iamVjdENhY2hlKCkKIHsKICAgICBIYXNoTWFwPEFYSUQsIFJlZlB0cjxBY2Nl
c3NpYmlsaXR5T2JqZWN0PiA+OjppdGVyYXRvciBlbmQgPSBtX29iamVjdHMuZW5kKCk7CiAgICAg
Zm9yIChIYXNoTWFwPEFYSUQsIFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiA+OjppdGVyYXRv
ciBpdCA9IG1fb2JqZWN0cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgQWNj
ZXNzaWJpbGl0eU9iamVjdCogb2JqID0gKCppdCkuc2Vjb25kLmdldCgpOworICAgICAgICBBY2Nl
c3NpYmlsaXR5T2JqZWN0KiBvYmogPSAoKml0KS52YWx1ZS5nZXQoKTsKICAgICAgICAgZGV0YWNo
V3JhcHBlcihvYmopOwogICAgICAgICBvYmotPmRldGFjaCgpOwogICAgICAgICByZW1vdmVBWElE
KG9iaik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0RPTU9i
amVjdENhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvRE9NT2JqZWN0
Q2FjaGUuY3BwCmluZGV4IDJlN2YxMDZlNzllMzFjNzMxNTRhYjljZmFhMTlhNTg5ZTlkZTdkZDUu
LmRkN2QwNDk3MThjODEyMmYyNGIzOGRiODgzZTViNmI2NGUyZWMwNjYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvRE9NT2JqZWN0Q2FjaGUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvRE9NT2JqZWN0Q2FjaGUuY3BwCkBAIC03NCw3
ICs3NCw3IEBAIHZvaWQgRE9NT2JqZWN0Q2FjaGU6OmNsZWFyQnlGcmFtZShXZWJDb3JlOjpGcmFt
ZSogZnJhbWUpCiAgICAgLy8gaXRlcmF0aW5nIHRoZSBjYWNoZSBpdHNlbGYuCiAgICAgRE9NT2Jq
ZWN0TWFwOjppdGVyYXRvciBlbmQgPSBkb21PYmplY3RzKCkuZW5kKCk7CiAgICAgZm9yIChET01P
YmplY3RNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBkb21PYmplY3RzKCkuYmVnaW4oKTsgaXRlciAhPSBl
bmQ7ICsraXRlcikgewotICAgICAgICBET01PYmplY3RDYWNoZURhdGEqIGRhdGEgPSBpdGVyLT5z
ZWNvbmQ7CisgICAgICAgIERPTU9iamVjdENhY2hlRGF0YSogZGF0YSA9IGl0ZXItPnZhbHVlOwog
ICAgICAgICBBU1NFUlQoZGF0YSk7CiAgICAgICAgIGlmICgoIWZyYW1lIHx8IGRhdGEtPmZyYW1l
ID09IGZyYW1lKSAmJiBkYXRhLT50aW1lc1JldHVybmVkKQogICAgICAgICAgICAgdG9VbnJlZi5h
cHBlbmQoZGF0YSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01P
YmplY3RIYXNoVGFibGVNYXAuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTU9iamVj
dEhhc2hUYWJsZU1hcC5oCmluZGV4IDY0ODI4ZDY5ODhmN2U0M2IzZTlhNDYzNjkwOGNkMjEyNTQ3
YTJmZmMuLjc1M2MwNGQyZmM1NzcyZTA5NTlkY2VmNWFjNjFiYTMwYzk2ZTE3OGYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTU9iamVjdEhhc2hUYWJsZU1hcC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTU9iamVjdEhhc2hUYWJsZU1hcC5oCkBA
IC0zOSwxNSArMzksMTUgQEAgcHVibGljOgogICAgIH5ET01PYmplY3RIYXNoVGFibGVNYXAoKQog
ICAgIHsKICAgICAgICAgZm9yIChIYXNoTWFwPGNvbnN0IEpTQzo6SGFzaFRhYmxlKiwgSlNDOjpI
YXNoVGFibGU+OjppdGVyYXRvciBpdGVyID0gbV9tYXAuYmVnaW4oKTsgaXRlciAhPSBtX21hcC5l
bmQoKTsgKytpdGVyKQotICAgICAgICAgICAgaXRlci0+c2Vjb25kLmRlbGV0ZVRhYmxlKCk7Cisg
ICAgICAgICAgICBpdGVyLT52YWx1ZS5kZWxldGVUYWJsZSgpOwogICAgIH0KIAogICAgIGNvbnN0
IEpTQzo6SGFzaFRhYmxlKiBnZXQoY29uc3QgSlNDOjpIYXNoVGFibGUqIHN0YXRpY1RhYmxlKQog
ICAgIHsKICAgICAgICAgSGFzaE1hcDxjb25zdCBKU0M6Okhhc2hUYWJsZSosIEpTQzo6SGFzaFRh
YmxlPjo6aXRlcmF0b3IgaXRlciA9IG1fbWFwLmZpbmQoc3RhdGljVGFibGUpOwogICAgICAgICBp
ZiAoaXRlciAhPSBtX21hcC5lbmQoKSkKLSAgICAgICAgICAgIHJldHVybiAmaXRlci0+c2Vjb25k
OwotICAgICAgICByZXR1cm4gJm1fbWFwLnNldChzdGF0aWNUYWJsZSwgc3RhdGljVGFibGUtPmNv
cHkoKSkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgICAgIHJldHVybiAmaXRlci0+dmFsdWU7
CisgICAgICAgIHJldHVybiAmbV9tYXAuc2V0KHN0YXRpY1RhYmxlLCBzdGF0aWNUYWJsZS0+Y29w
eSgpKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgfQogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAKaW5kZXggZmUwODRlYTRkZmI0MDIyNTY3ZDE3
NjRjNjgzZDdmYzdmODU5M2ZmZS4uYmVlMTUwOWE5NWUwOWU1ZWE0Y2UxNTc0ODVjN2M5MTRlNmE5
YjAwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5n
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCkBA
IC0yNjEsNyArMjYxLDcgQEAgU3RydWN0dXJlKiBjYWNoZURPTVN0cnVjdHVyZShKU0RPTUdsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHUKIHsKICAgICBKU0RPTVN0
cnVjdHVyZU1hcCYgc3RydWN0dXJlcyA9IGdsb2JhbE9iamVjdC0+c3RydWN0dXJlcygpOwogICAg
IEFTU0VSVCghc3RydWN0dXJlcy5jb250YWlucyhjbGFzc0luZm8pKTsKLSAgICByZXR1cm4gc3Ry
dWN0dXJlcy5zZXQoY2xhc3NJbmZvLCBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPihnbG9iYWxPYmpl
Y3QtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpKS5pdGVyYXRvci0+c2Vj
b25kLmdldCgpOworICAgIHJldHVybiBzdHJ1Y3R1cmVzLnNldChjbGFzc0luZm8sIFdyaXRlQmFy
cmllcjxTdHJ1Y3R1cmU+KGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3Qs
IHN0cnVjdHVyZSkpLml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9i
YWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmpl
Y3QuY3BwCmluZGV4IDM2MTA0ODA4YmI2MDllNTdiMDQ4MTE4NTJlODk1ZGFkNzEzMGE0YWUuLmQz
YzQyOWE1MDhkOTEwZGU3YmQyZWViZWQ2N2Q3NzVjMjVlYzdiMTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAKQEAgLTg4LDExICs4OCwx
MSBAQCB2b2lkIEpTRE9NR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAKICAgICBKU0RPTVN0cnVjdHVyZU1hcDo6aXRlcmF0b3Ig
ZW5kID0gdGhpc09iamVjdC0+c3RydWN0dXJlcygpLmVuZCgpOwogICAgIGZvciAoSlNET01TdHJ1
Y3R1cmVNYXA6Oml0ZXJhdG9yIGl0ID0gdGhpc09iamVjdC0+c3RydWN0dXJlcygpLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgdmlzaXRvci5hcHBlbmQoJml0LT5zZWNvbmQpOwor
ICAgICAgICB2aXNpdG9yLmFwcGVuZCgmaXQtPnZhbHVlKTsKIAogICAgIEpTRE9NQ29uc3RydWN0
b3JNYXA6Oml0ZXJhdG9yIGVuZDIgPSB0aGlzT2JqZWN0LT5jb25zdHJ1Y3RvcnMoKS5lbmQoKTsK
ICAgICBmb3IgKEpTRE9NQ29uc3RydWN0b3JNYXA6Oml0ZXJhdG9yIGl0MiA9IHRoaXNPYmplY3Qt
PmNvbnN0cnVjdG9ycygpLmJlZ2luKCk7IGl0MiAhPSBlbmQyOyArK2l0MikKLSAgICAgICAgdmlz
aXRvci5hcHBlbmQoJml0Mi0+c2Vjb25kKTsKKyAgICAgICAgdmlzaXRvci5hcHBlbmQoJml0Mi0+
dmFsdWUpOwogfQogCiB2b2lkIEpTRE9NR2xvYmFsT2JqZWN0OjpzZXRDdXJyZW50RXZlbnQoRXZl
bnQqIGN1cnJlbnRFdmVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NR2xvYmFsT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUds
b2JhbE9iamVjdC5oCmluZGV4IGJkYWI1NjhmMDI0NTNiMTQ0ZjIzZDQ3Y2E0N2U5ZDQ2OTNmNTVj
NjMuLjljYzE3MWJjMjg4NzRhODM5ZWY4MzNkMjE0ZjZmOGY1MTg5ZjQ3NjggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuaApAQCAtOTMsNyArOTMs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEpTQzo6SlNPYmplY3QqIGNvbnN0cnVj
dG9yID0gQ29uc3RydWN0b3JDbGFzczo6Y3JlYXRlKGV4ZWMsIENvbnN0cnVjdG9yQ2xhc3M6OmNy
ZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIGNvbnN0X2Nhc3Q8SlNET01HbG9iYWxP
YmplY3QqPihnbG9iYWxPYmplY3QpLCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSwg
Y29uc3RfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOwogICAgICAgICBB
U1NFUlQoIWNvbnN0X2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpLT5jb25z
dHJ1Y3RvcnMoKS5jb250YWlucygmQ29uc3RydWN0b3JDbGFzczo6c19pbmZvKSk7CiAgICAgICAg
IEpTQzo6V3JpdGVCYXJyaWVyPEpTQzo6SlNPYmplY3Q+IHRlbXA7Ci0gICAgICAgIGNvbnN0X2Nh
c3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpLT5jb25zdHJ1Y3RvcnMoKS5hZGQo
JkNvbnN0cnVjdG9yQ2xhc3M6OnNfaW5mbywgdGVtcCkuaXRlcmF0b3ItPnNlY29uZC5zZXQoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QsIGNvbnN0cnVjdG9yKTsKKyAgICAgICAgY29u
c3RfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCktPmNvbnN0cnVjdG9ycygp
LmFkZCgmQ29uc3RydWN0b3JDbGFzczo6c19pbmZvLCB0ZW1wKS5pdGVyYXRvci0+dmFsdWUuc2V0
KGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LCBjb25zdHJ1Y3Rvcik7CiAgICAgICAg
IHJldHVybiBjb25zdHJ1Y3RvcjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCmluZGV4IGZmMGFlZWZiNTBhNjA4
YzkyMTAzM2Q5ODc5MzNjZGM2NWZjZmQyYzkuLmVkNzQzY2M5ZTllYzUxYzBkNTMxNjEwOTRmMzNk
OWM5MmFkYjEwZDYgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1BhZ2VT
Y3JpcHREZWJ1Z1NlcnZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUGFn
ZVNjcmlwdERlYnVnU2VydmVyLmNwcApAQCAtODIsNyArODIsNyBAQCB2b2lkIFBhZ2VTY3JpcHRE
ZWJ1Z1NlcnZlcjo6YWRkTGlzdGVuZXIoU2NyaXB0RGVidWdMaXN0ZW5lciogbGlzdGVuZXIsIFBh
Z2UqIHBhZwogICAgIEFTU0VSVF9BUkcobGlzdGVuZXIsIGxpc3RlbmVyKTsKICAgICBBU1NFUlRf
QVJHKHBhZ2UsIHBhZ2UpOwogCi0gICAgT3duUHRyPExpc3RlbmVyU2V0PiYgbGlzdGVuZXJzID0g
bV9wYWdlTGlzdGVuZXJzTWFwLmFkZChwYWdlLCBudWxscHRyKS5pdGVyYXRvci0+c2Vjb25kOwor
ICAgIE93blB0cjxMaXN0ZW5lclNldD4mIGxpc3RlbmVycyA9IG1fcGFnZUxpc3RlbmVyc01hcC5h
ZGQocGFnZSwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghbGlzdGVuZXJzKQog
ICAgICAgICBsaXN0ZW5lcnMgPSBhZG9wdFB0cihuZXcgTGlzdGVuZXJTZXQpOwogICAgIGxpc3Rl
bmVycy0+YWRkKGxpc3RlbmVyKTsKQEAgLTEwMCw3ICsxMDAsNyBAQCB2b2lkIFBhZ2VTY3JpcHRE
ZWJ1Z1NlcnZlcjo6cmVtb3ZlTGlzdGVuZXIoU2NyaXB0RGVidWdMaXN0ZW5lciogbGlzdGVuZXIs
IFBhZ2UqCiAgICAgaWYgKGl0ID09IG1fcGFnZUxpc3RlbmVyc01hcC5lbmQoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgTGlzdGVuZXJTZXQqIGxpc3RlbmVycyA9IGl0LT5zZWNvbmQuZ2V0KCk7
CisgICAgTGlzdGVuZXJTZXQqIGxpc3RlbmVycyA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICBsaXN0
ZW5lcnMtPnJlbW92ZShsaXN0ZW5lcik7CiAgICAgaWYgKGxpc3RlbmVycy0+aXNFbXB0eSgpKSB7
CiAgICAgICAgIG1fcGFnZUxpc3RlbmVyc01hcC5yZW1vdmUoaXQpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENhY2hlZEZyYW1lRGF0YS5jcHAKaW5kZXggZGVm
NzljZjJjMTZiYTc2ZTUxYmQ4ZjAxZmYwNzAwOWZlZDIwY2M2ZS4uYzYyNDg3ZTgwNWZkY2MxYjcw
MWM1YmJmNWQ5Njk0Y2JmYmQ3NDRkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY3JpcHRDYWNoZWRGcmFtZURhdGEuY3BwCkBAIC01Myw4ICs1Myw4IEBAIFNjcmlw
dENhY2hlZEZyYW1lRGF0YTo6U2NyaXB0Q2FjaGVkRnJhbWVEYXRhKEZyYW1lKiBmcmFtZSkKIAog
ICAgIFNjcmlwdENvbnRyb2xsZXI6OlNoZWxsTWFwOjppdGVyYXRvciB3aW5kb3dTaGVsbHNFbmQg
PSB3aW5kb3dTaGVsbHMuZW5kKCk7CiAgICAgZm9yIChTY3JpcHRDb250cm9sbGVyOjpTaGVsbE1h
cDo6aXRlcmF0b3IgaXRlciA9IHdpbmRvd1NoZWxscy5iZWdpbigpOyBpdGVyICE9IHdpbmRvd1No
ZWxsc0VuZDsgKytpdGVyKSB7Ci0gICAgICAgIEpTRE9NV2luZG93KiB3aW5kb3cgPSBpdGVyLT5z
ZWNvbmQtPndpbmRvdygpOwotICAgICAgICBtX3dpbmRvd3MuYWRkKGl0ZXItPmZpcnN0LmdldCgp
LCBTdHJvbmc8SlNET01XaW5kb3c+KHdpbmRvdy0+Z2xvYmFsRGF0YSgpLCB3aW5kb3cpKTsKKyAg
ICAgICAgSlNET01XaW5kb3cqIHdpbmRvdyA9IGl0ZXItPnZhbHVlLT53aW5kb3coKTsKKyAgICAg
ICAgbV93aW5kb3dzLmFkZChpdGVyLT5rZXkuZ2V0KCksIFN0cm9uZzxKU0RPTVdpbmRvdz4od2lu
ZG93LT5nbG9iYWxEYXRhKCksIHdpbmRvdykpOwogICAgIH0KIAogICAgIHNjcmlwdENvbnRyb2xs
ZXItPmF0dGFjaERlYnVnZ2VyKDApOwpAQCAtNzQsOCArNzQsOCBAQCB2b2lkIFNjcmlwdENhY2hl
ZEZyYW1lRGF0YTo6cmVzdG9yZShGcmFtZSogZnJhbWUpCiAKICAgICBTY3JpcHRDb250cm9sbGVy
OjpTaGVsbE1hcDo6aXRlcmF0b3Igd2luZG93U2hlbGxzRW5kID0gd2luZG93U2hlbGxzLmVuZCgp
OwogICAgIGZvciAoU2NyaXB0Q29udHJvbGxlcjo6U2hlbGxNYXA6Oml0ZXJhdG9yIGl0ZXIgPSB3
aW5kb3dTaGVsbHMuYmVnaW4oKTsgaXRlciAhPSB3aW5kb3dTaGVsbHNFbmQ7ICsraXRlcikgewot
ICAgICAgICBET01XcmFwcGVyV29ybGQqIHdvcmxkID0gaXRlci0+Zmlyc3QuZ2V0KCk7Ci0gICAg
ICAgIEpTRE9NV2luZG93U2hlbGwqIHdpbmRvd1NoZWxsID0gaXRlci0+c2Vjb25kLmdldCgpOwor
ICAgICAgICBET01XcmFwcGVyV29ybGQqIHdvcmxkID0gaXRlci0+a2V5LmdldCgpOworICAgICAg
ICBKU0RPTVdpbmRvd1NoZWxsKiB3aW5kb3dTaGVsbCA9IGl0ZXItPnZhbHVlLmdldCgpOwogCiAg
ICAgICAgIGlmIChKU0RPTVdpbmRvdyogd2luZG93ID0gbV93aW5kb3dzLmdldCh3b3JsZCkuZ2V0
KCkpCiAgICAgICAgICAgICB3aW5kb3dTaGVsbC0+c2V0V2luZG93KHdpbmRvdy0+Z2xvYmFsRGF0
YSgpLCB3aW5kb3cpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2Ny
aXB0Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250
cm9sbGVyLmNwcAppbmRleCA0OGY2OGM4YTMyODZmNWQ5YTgyZTBmMWEwN2VmYThjZGQ0ZTI1ZTUy
Li5hMDFlMWI0NGEyMzViNGY0ZjE5NzAyZWZkYTYzNGIxYzFhYjIwMGM4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcApAQCAtOTYsNyArOTYs
NyBAQCBTY3JpcHRDb250cm9sbGVyOjp+U2NyaXB0Q29udHJvbGxlcigpCiAgICAgLy8gSXQncyBs
aWtlbHkgdGhhdCBkZXN0cm95aW5nIG1fd2luZG93U2hlbGxzIHdpbGwgY3JlYXRlIGEgbG90IG9m
IGdhcmJhZ2UuCiAgICAgaWYgKCFtX3dpbmRvd1NoZWxscy5pc0VtcHR5KCkpIHsKICAgICAgICAg
d2hpbGUgKCFtX3dpbmRvd1NoZWxscy5pc0VtcHR5KCkpCi0gICAgICAgICAgICBkZXN0cm95V2lu
ZG93U2hlbGwobV93aW5kb3dTaGVsbHMuYmVnaW4oKS0+Zmlyc3QuZ2V0KCkpOworICAgICAgICAg
ICAgZGVzdHJveVdpbmRvd1NoZWxsKG1fd2luZG93U2hlbGxzLmJlZ2luKCktPmtleS5nZXQoKSk7
CiAgICAgICAgIGdjQ29udHJvbGxlcigpLmdhcmJhZ2VDb2xsZWN0U29vbigpOwogICAgIH0KIH0K
QEAgLTE4Myw3ICsxODMsNyBAQCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmNsZWFyV2luZG93U2hl
bGwoRE9NV2luZG93KiBuZXdET01XaW5kb3csIGJvb2wgZ29pbmdJbnRvUAogICAgIEpTTG9ja0hv
bGRlciBsb2NrKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogCiAgICAg
Zm9yIChTaGVsbE1hcDo6aXRlcmF0b3IgaXRlciA9IG1fd2luZG93U2hlbGxzLmJlZ2luKCk7IGl0
ZXIgIT0gbV93aW5kb3dTaGVsbHMuZW5kKCk7ICsraXRlcikgewotICAgICAgICBKU0RPTVdpbmRv
d1NoZWxsKiB3aW5kb3dTaGVsbCA9IGl0ZXItPnNlY29uZC5nZXQoKTsKKyAgICAgICAgSlNET01X
aW5kb3dTaGVsbCogd2luZG93U2hlbGwgPSBpdGVyLT52YWx1ZS5nZXQoKTsKIAogICAgICAgICBp
ZiAod2luZG93U2hlbGwtPndpbmRvdygpLT5pbXBsKCkgPT0gbmV3RE9NV2luZG93KQogICAgICAg
ICAgICAgY29udGludWU7CkBAIC0yNzYsNyArMjc2LDcgQEAgYm9vbCBTY3JpcHRDb250cm9sbGVy
OjpjYW5BY2Nlc3NGcm9tQ3VycmVudE9yaWdpbihGcmFtZSAqZnJhbWUpCiB2b2lkIFNjcmlwdENv
bnRyb2xsZXI6OmF0dGFjaERlYnVnZ2VyKEpTQzo6RGVidWdnZXIqIGRlYnVnZ2VyKQogewogICAg
IGZvciAoU2hlbGxNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3dpbmRvd1NoZWxscy5iZWdpbigpOyBp
dGVyICE9IG1fd2luZG93U2hlbGxzLmVuZCgpOyArK2l0ZXIpCi0gICAgICAgIGF0dGFjaERlYnVn
Z2VyKGl0ZXItPnNlY29uZC5nZXQoKSwgZGVidWdnZXIpOworICAgICAgICBhdHRhY2hEZWJ1Z2dl
cihpdGVyLT52YWx1ZS5nZXQoKSwgZGVidWdnZXIpOwogfQogCiB2b2lkIFNjcmlwdENvbnRyb2xs
ZXI6OmF0dGFjaERlYnVnZ2VyKEpTRE9NV2luZG93U2hlbGwqIHNoZWxsLCBKU0M6OkRlYnVnZ2Vy
KiBkZWJ1Z2dlcikKQEAgLTI5NCw4ICsyOTQsOCBAQCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmF0
dGFjaERlYnVnZ2VyKEpTRE9NV2luZG93U2hlbGwqIHNoZWxsLCBKU0M6OkRlYnVnZ2VyKiBkZQog
dm9pZCBTY3JpcHRDb250cm9sbGVyOjp1cGRhdGVEb2N1bWVudCgpCiB7CiAgICAgZm9yIChTaGVs
bE1hcDo6aXRlcmF0b3IgaXRlciA9IG1fd2luZG93U2hlbGxzLmJlZ2luKCk7IGl0ZXIgIT0gbV93
aW5kb3dTaGVsbHMuZW5kKCk7ICsraXRlcikgewotICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhp
dGVyLT5maXJzdC0+Z2xvYmFsRGF0YSgpKTsKLSAgICAgICAgaXRlci0+c2Vjb25kLT53aW5kb3co
KS0+dXBkYXRlRG9jdW1lbnQoKTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soaXRlci0+a2V5
LT5nbG9iYWxEYXRhKCkpOworICAgICAgICBpdGVyLT52YWx1ZS0+d2luZG93KCktPnVwZGF0ZURv
Y3VtZW50KCk7CiAgICAgfQogfQogCkBAIC0zMzIsNyArMzMyLDcgQEAgUGFzc1JlZlB0cjxCaW5k
aW5nczo6Um9vdE9iamVjdD4gU2NyaXB0Q29udHJvbGxlcjo6Y3JlYXRlUm9vdE9iamVjdCh2b2lk
KiBuYXRpdmUKIHsKICAgICBSb290T2JqZWN0TWFwOjppdGVyYXRvciBpdCA9IG1fcm9vdE9iamVj
dHMuZmluZChuYXRpdmVIYW5kbGUpOwogICAgIGlmIChpdCAhPSBtX3Jvb3RPYmplY3RzLmVuZCgp
KQotICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsK
IAogICAgIFJlZlB0cjxCaW5kaW5nczo6Um9vdE9iamVjdD4gcm9vdE9iamVjdCA9IEJpbmRpbmdz
OjpSb290T2JqZWN0OjpjcmVhdGUobmF0aXZlSGFuZGxlLCBnbG9iYWxPYmplY3QocGx1Z2luV29y
bGQoKSkpOwogCkBAIC0zNDgsOCArMzQ4LDggQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpzZXRD
YXB0dXJlQ2FsbFN0YWNrRm9yVW5jYXVnaHRFeGNlcHRpb25zKGJvb2wpCiB2b2lkIFNjcmlwdENv
bnRyb2xsZXI6OmNvbGxlY3RJc29sYXRlZENvbnRleHRzKFZlY3RvcjxzdGQ6OnBhaXI8SlNDOjpF
eGVjU3RhdGUqLCBTZWN1cml0eU9yaWdpbio+ID4mIHJlc3VsdCkKIHsKICAgICBmb3IgKFNoZWxs
TWFwOjppdGVyYXRvciBpdGVyID0gbV93aW5kb3dTaGVsbHMuYmVnaW4oKTsgaXRlciAhPSBtX3dp
bmRvd1NoZWxscy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIEpTQzo6RXhlY1N0YXRlKiBleGVj
ID0gaXRlci0+c2Vjb25kLT53aW5kb3coKS0+Z2xvYmFsRXhlYygpOwotICAgICAgICBTZWN1cml0
eU9yaWdpbiogb3JpZ2luID0gaXRlci0+c2Vjb25kLT53aW5kb3coKS0+aW1wbCgpLT5kb2N1bWVu
dCgpLT5zZWN1cml0eU9yaWdpbigpOworICAgICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IGl0
ZXItPnZhbHVlLT53aW5kb3coKS0+Z2xvYmFsRXhlYygpOworICAgICAgICBTZWN1cml0eU9yaWdp
biogb3JpZ2luID0gaXRlci0+dmFsdWUtPndpbmRvdygpLT5pbXBsKCktPmRvY3VtZW50KCktPnNl
Y3VyaXR5T3JpZ2luKCk7CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoc3RkOjpwYWlyPFNjcmlwdFN0
YXRlKiwgU2VjdXJpdHlPcmlnaW4qPihleGVjLCBvcmlnaW4pKTsKICAgICB9CiB9CkBAIC00Mzcs
NyArNDM3LDcgQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpjbGVhbnVwU2NyaXB0T2JqZWN0c0Zv
clBsdWdpbih2b2lkKiBuYXRpdmVIYW5kbGUpCiAgICAgaWYgKGl0ID09IG1fcm9vdE9iamVjdHMu
ZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGl0LT5zZWNvbmQtPmludmFsaWRhdGUoKTsK
KyAgICBpdC0+dmFsdWUtPmludmFsaWRhdGUoKTsKICAgICBtX3Jvb3RPYmplY3RzLnJlbW92ZShp
dCk7CiB9CiAKQEAgLTQ0Nyw3ICs0NDcsNyBAQCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmNsZWFy
U2NyaXB0T2JqZWN0cygpCiAKICAgICBSb290T2JqZWN0TWFwOjpjb25zdF9pdGVyYXRvciBlbmQg
PSBtX3Jvb3RPYmplY3RzLmVuZCgpOwogICAgIGZvciAoUm9vdE9iamVjdE1hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX3Jvb3RPYmplY3RzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAg
ICAgaXQtPnNlY29uZC0+aW52YWxpZGF0ZSgpOworICAgICAgICBpdC0+dmFsdWUtPmludmFsaWRh
dGUoKTsKIAogICAgIG1fcm9vdE9iamVjdHMuY2xlYXIoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5oCmluZGV4IDE4N2ZhYjUyYmVmMGFkMjFjZjU0
ZGU1MDZhNGVmNjUxY2ZmZGJlYmEuLjljNzZjZmU0NjdhZWVmOWMzNzFlODU1NGJjMGI3YjgxZGZl
OGU3NjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRy
b2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVy
LmgKQEAgLTc0LDEyICs3NCwxMiBAQCBwdWJsaWM6CiAgICAgSlNET01XaW5kb3dTaGVsbCogd2lu
ZG93U2hlbGwoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCkKICAgICB7CiAgICAgICAgIFNoZWxsTWFw
OjppdGVyYXRvciBpdGVyID0gbV93aW5kb3dTaGVsbHMuZmluZCh3b3JsZCk7Ci0gICAgICAgIHJl
dHVybiAoaXRlciAhPSBtX3dpbmRvd1NoZWxscy5lbmQoKSkgPyBpdGVyLT5zZWNvbmQuZ2V0KCkg
OiBpbml0U2NyaXB0KHdvcmxkKTsKKyAgICAgICAgcmV0dXJuIChpdGVyICE9IG1fd2luZG93U2hl
bGxzLmVuZCgpKSA/IGl0ZXItPnZhbHVlLmdldCgpIDogaW5pdFNjcmlwdCh3b3JsZCk7CiAgICAg
fQogICAgIEpTRE9NV2luZG93U2hlbGwqIGV4aXN0aW5nV2luZG93U2hlbGwoRE9NV3JhcHBlcldv
cmxkKiB3b3JsZCkgY29uc3QKICAgICB7CiAgICAgICAgIFNoZWxsTWFwOjpjb25zdF9pdGVyYXRv
ciBpdGVyID0gbV93aW5kb3dTaGVsbHMuZmluZCh3b3JsZCk7Ci0gICAgICAgIHJldHVybiAoaXRl
ciAhPSBtX3dpbmRvd1NoZWxscy5lbmQoKSkgPyBpdGVyLT5zZWNvbmQuZ2V0KCkgOiAwOworICAg
ICAgICByZXR1cm4gKGl0ZXIgIT0gbV93aW5kb3dTaGVsbHMuZW5kKCkpID8gaXRlci0+dmFsdWUu
Z2V0KCkgOiAwOwogICAgIH0KICAgICBKU0RPTVdpbmRvdyogZ2xvYmFsT2JqZWN0KERPTVdyYXBw
ZXJXb3JsZCogd29ybGQpCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2NyaXB0RGVidWdTZXJ2ZXIuY3BwCmluZGV4IGFhNjBhMmRkOGEzNThiZmM1ZGUxMWQzYjBjNDcw
ZTJlYjkxNGRiYTEuLmZhMDhjMjA3Zjk1ODNhNzM0NTZkN2JkNTBiMTEyYmI3YzQzMjdmZWIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHAK
QEAgLTc1LDExICs3NSwxMSBAQCBTdHJpbmcgU2NyaXB0RGVidWdTZXJ2ZXI6OnNldEJyZWFrcG9p
bnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgY29uc3QgU2NyaXB0QnJlYQogICAgIFNvdXJjZUlk
VG9CcmVha3BvaW50c01hcDo6aXRlcmF0b3IgaXQgPSBtX3NvdXJjZUlkVG9CcmVha3BvaW50cy5m
aW5kKHNvdXJjZUlEVmFsdWUpOwogICAgIGlmIChpdCA9PSBtX3NvdXJjZUlkVG9CcmVha3BvaW50
cy5lbmQoKSkKICAgICAgICAgaXQgPSBtX3NvdXJjZUlkVG9CcmVha3BvaW50cy5zZXQoc291cmNl
SURWYWx1ZSwgTGluZVRvQnJlYWtwb2ludE1hcCgpKS5pdGVyYXRvcjsKLSAgICBMaW5lVG9CcmVh
a3BvaW50TWFwOjppdGVyYXRvciBicmVha3NJdCA9IGl0LT5zZWNvbmQuZmluZChzY3JpcHRCcmVh
a3BvaW50LmxpbmVOdW1iZXIgKyAxKTsKLSAgICBpZiAoYnJlYWtzSXQgPT0gaXQtPnNlY29uZC5l
bmQoKSkKLSAgICAgICAgYnJlYWtzSXQgPSBpdC0+c2Vjb25kLnNldChzY3JpcHRCcmVha3BvaW50
LmxpbmVOdW1iZXIgKyAxLCBCcmVha3BvaW50c0luTGluZSgpKS5pdGVyYXRvcjsKKyAgICBMaW5l
VG9CcmVha3BvaW50TWFwOjppdGVyYXRvciBicmVha3NJdCA9IGl0LT52YWx1ZS5maW5kKHNjcmlw
dEJyZWFrcG9pbnQubGluZU51bWJlciArIDEpOworICAgIGlmIChicmVha3NJdCA9PSBpdC0+dmFs
dWUuZW5kKCkpCisgICAgICAgIGJyZWFrc0l0ID0gaXQtPnZhbHVlLnNldChzY3JpcHRCcmVha3Bv
aW50LmxpbmVOdW1iZXIgKyAxLCBCcmVha3BvaW50c0luTGluZSgpKS5pdGVyYXRvcjsKIAotICAg
IEJyZWFrcG9pbnRzSW5MaW5lJiBicmVha3NWZWN0b3IgPSBicmVha3NJdC0+c2Vjb25kOworICAg
IEJyZWFrcG9pbnRzSW5MaW5lJiBicmVha3NWZWN0b3IgPSBicmVha3NJdC0+dmFsdWU7CiAgICAg
dW5zaWduZWQgYnJlYWtzQ291bnQgPSBicmVha3NWZWN0b3Iuc2l6ZSgpOwogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBicmVha3NDb3VudDsgaSsrKSB7CiAgICAgICAgIGlmIChicmVha3NW
ZWN0b3IuYXQoaSkuY29sdW1uTnVtYmVyID09IHNjcmlwdEJyZWFrcG9pbnQuY29sdW1uTnVtYmVy
KQpAQCAtMTEyLDExICsxMTIsMTEgQEAgdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6cmVtb3ZlQnJl
YWtwb2ludChjb25zdCBTdHJpbmcmIGJyZWFrcG9pbnRJZCkKICAgICBTb3VyY2VJZFRvQnJlYWtw
b2ludHNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zb3VyY2VJZFRvQnJlYWtwb2ludHMuZmluZChzb3Vy
Y2VJRFZhbHVlKTsKICAgICBpZiAoaXQgPT0gbV9zb3VyY2VJZFRvQnJlYWtwb2ludHMuZW5kKCkp
CiAgICAgICAgIHJldHVybjsKLSAgICBMaW5lVG9CcmVha3BvaW50TWFwOjppdGVyYXRvciBicmVh
a3NJdCA9IGl0LT5zZWNvbmQuZmluZChsaW5lTnVtYmVyICsgMSk7Ci0gICAgaWYgKGJyZWFrc0l0
ID09IGl0LT5zZWNvbmQuZW5kKCkpCisgICAgTGluZVRvQnJlYWtwb2ludE1hcDo6aXRlcmF0b3Ig
YnJlYWtzSXQgPSBpdC0+dmFsdWUuZmluZChsaW5lTnVtYmVyICsgMSk7CisgICAgaWYgKGJyZWFr
c0l0ID09IGl0LT52YWx1ZS5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQnJlYWtwb2lu
dHNJbkxpbmUmIGJyZWFrc1ZlY3RvciA9IGJyZWFrc0l0LT5zZWNvbmQ7CisgICAgQnJlYWtwb2lu
dHNJbkxpbmUmIGJyZWFrc1ZlY3RvciA9IGJyZWFrc0l0LT52YWx1ZTsKICAgICB1bnNpZ25lZCBi
cmVha3NDb3VudCA9IGJyZWFrc1ZlY3Rvci5zaXplKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGJyZWFrc0NvdW50OyBpKyspIHsKICAgICAgICAgaWYgKGJyZWFrc1ZlY3Rvci5hdChp
KS5jb2x1bW5OdW1iZXIgPT0gc3RhdGljX2Nhc3Q8aW50Pihjb2x1bW5OdW1iZXIpKSB7CkBAIC0x
NzgsMTIgKzE3OCwxMiBAQCBib29sIFNjcmlwdERlYnVnU2VydmVyOjpoYXNCcmVha3BvaW50KGlu
dHB0cl90IHNvdXJjZUlELCBjb25zdCBUZXh0UG9zaXRpb24mIHBvcwogICAgIGlmIChsaW5lTnVt
YmVyIDwgMCB8fCBjb2x1bW5OdW1iZXIgPCAwKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBMaW5lVG9CcmVha3BvaW50TWFwOjpjb25zdF9pdGVyYXRvciBicmVha3NJdCA9IGl0LT5zZWNv
bmQuZmluZChsaW5lTnVtYmVyICsgMSk7Ci0gICAgaWYgKGJyZWFrc0l0ID09IGl0LT5zZWNvbmQu
ZW5kKCkpCisgICAgTGluZVRvQnJlYWtwb2ludE1hcDo6Y29uc3RfaXRlcmF0b3IgYnJlYWtzSXQg
PSBpdC0+dmFsdWUuZmluZChsaW5lTnVtYmVyICsgMSk7CisgICAgaWYgKGJyZWFrc0l0ID09IGl0
LT52YWx1ZS5lbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYm9vbCBoaXQgPSBm
YWxzZTsKLSAgICBjb25zdCBCcmVha3BvaW50c0luTGluZSYgYnJlYWtzVmVjdG9yID0gYnJlYWtz
SXQtPnNlY29uZDsKKyAgICBjb25zdCBCcmVha3BvaW50c0luTGluZSYgYnJlYWtzVmVjdG9yID0g
YnJlYWtzSXQtPnZhbHVlOwogICAgIHVuc2lnbmVkIGJyZWFrc0NvdW50ID0gYnJlYWtzVmVjdG9y
LnNpemUoKTsKICAgICB1bnNpZ25lZCBpOwogICAgIGZvciAoaSA9IDA7IGkgPCBicmVha3NDb3Vu
dDsgaSsrKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxp
emVkU2NyaXB0VmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlLmNwcAppbmRleCA2YWU1ZTM4MDNlMGI0MzljMmNlZjRkMjQyY2EyZGExNzE0
YzYyODUwLi4yNDZlYmY0ZDlmZWNhMTg2MmJiNDVmYmExMmUwYWQxNzc2NWM4NWM0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5j
cHAKQEAgLTQyNSw4ICs0MjUsOCBAQCBwcml2YXRlOgogICAgICAgICAvLyBIYW5kbGUgZHVwbGlj
YXRlIHJlZmVyZW5jZXMKICAgICAgICAgaWYgKGZvdW5kICE9IG1fb2JqZWN0UG9vbC5lbmQoKSkg
ewogICAgICAgICAgICAgd3JpdGUoT2JqZWN0UmVmZXJlbmNlVGFnKTsKLSAgICAgICAgICAgIEFT
U0VSVChzdGF0aWNfY2FzdDxpbnQzMl90Pihmb3VuZC0+c2Vjb25kKSA8IG1fb2JqZWN0UG9vbC5z
aXplKCkpOwotICAgICAgICAgICAgd3JpdGVPYmplY3RJbmRleChmb3VuZC0+c2Vjb25kKTsKKyAg
ICAgICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQzMl90Pihmb3VuZC0+dmFsdWUpIDwgbV9v
YmplY3RQb29sLnNpemUoKSk7CisgICAgICAgICAgICB3cml0ZU9iamVjdEluZGV4KGZvdW5kLT52
YWx1ZSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCkBAIC02ODMsNyAr
NjgzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBPYmplY3RQb29sOjppdGVyYXRvciBp
bmRleCA9IG1fdHJhbnNmZXJyZWRNZXNzYWdlUG9ydHMuZmluZChvYmopOwogICAgICAgICAgICAg
ICAgIGlmIChpbmRleCAhPSBtX3RyYW5zZmVycmVkTWVzc2FnZVBvcnRzLmVuZCgpKSB7CiAgICAg
ICAgICAgICAgICAgICAgIHdyaXRlKE1lc3NhZ2VQb3J0UmVmZXJlbmNlVGFnKTsKLSAgICAgICAg
ICAgICAgICAgICAgd3JpdGUoaW5kZXgtPnNlY29uZCk7CisgICAgICAgICAgICAgICAgICAgIHdy
aXRlKGluZGV4LT52YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAvLyBNZXNzYWdlUG9ydCBvYmplY3QgY291
bGQgbm90IGJlIGZvdW5kIGluIHRyYW5zZmVycmVkIG1lc3NhZ2UgcG9ydHMKQEAgLTY5OSw3ICs2
OTksNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIE9iamVjdFBvb2w6Oml0ZXJhdG9yIGlu
ZGV4ID0gbV90cmFuc2ZlcnJlZEFycmF5QnVmZmVycy5maW5kKG9iaik7CiAgICAgICAgICAgICAg
ICAgaWYgKGluZGV4ICE9IG1fdHJhbnNmZXJyZWRBcnJheUJ1ZmZlcnMuZW5kKCkpIHsKICAgICAg
ICAgICAgICAgICAgICAgd3JpdGUoQXJyYXlCdWZmZXJUcmFuc2ZlclRhZyk7Ci0gICAgICAgICAg
ICAgICAgICAgIHdyaXRlKGluZGV4LT5zZWNvbmQpOworICAgICAgICAgICAgICAgICAgICB3cml0
ZShpbmRleC0+dmFsdWUpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKCFzdGFydE9iamVjdEludGVybmFsKG9i
aikpIC8vIGhhbmRsZSBkdXBsaWNhdGVzCkBAIC03OTYsNyArNzk2LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgU3RyaW5nQ29uc3RhbnRQb29sOjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gbV9jb25zdGFu
dFBvb2wuYWRkKHN0ci5pbXBsKCksIG1fY29uc3RhbnRQb29sLnNpemUoKSk7CiAgICAgICAgIGlm
ICghYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKICAgICAgICAgICAgIHdyaXRlKFN0cmluZ1Bvb2xU
YWcpOwotICAgICAgICAgICAgd3JpdGVTdHJpbmdJbmRleChhZGRSZXN1bHQuaXRlcmF0b3ItPnNl
Y29uZCk7CisgICAgICAgICAgICB3cml0ZVN0cmluZ0luZGV4KGFkZFJlc3VsdC5pdGVyYXRvci0+
dmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KaW5kZXggMDY4MTA1
NjAwNjMyMWNiYTIxNzAwMjQ1MzhhYmQwMTc1ZmQyYTBlMi4uNGU5YzUwNGQwOGFmZWE5YmNkZWU2
MzZlN2Y1NzIxNThmYjNkZTNlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KQEAgLTI5NjksNyArMjk2OSw3IEBAIHY4OjpQZXJz
aXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiAke2NsYXNzTmFtZX06OkdldFJhd1RlbXBsYXRl
KCkKICAgICBWOFBlcklzb2xhdGVEYXRhKiBkYXRhID0gVjhQZXJJc29sYXRlRGF0YTo6Y3VycmVu
dCgpOwogICAgIFY4UGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQg
PSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwogICAgIGlmIChyZXN1bHQgIT0g
ZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vj
b25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVTY29w
ZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4g
dGVtcGwgPSBjcmVhdGVSYXdUZW1wbGF0ZSgpOwpAQCAtMjk4Miw3ICsyOTgyLDcgQEAgdjg6OlBl
cnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+ICR7Y2xhc3NOYW1lfTo6R2V0VGVtcGxhdGUo
KQogICAgIFY4UGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOFBlcklzb2xhdGVEYXRhOjpjdXJyZW50
KCk7CiAgICAgVjhQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9
IGRhdGEtPnRlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRh
LT50ZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7Cisg
ICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRs
ZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhG
bG9hdDY0QXJyYXkuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4
L1Y4RmxvYXQ2NEFycmF5LmNwcAppbmRleCAxYTI3YTlkYjg4MTJjMWFmNjRhNGEyZDE5OTU1NjZl
MTRjOWM2NTNhLi5kY2YzNTkwZDg0YmQ0MjYyZjhjYTJkY2UyZjA1ZDZjNzJjOTE2OTA4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhGbG9hdDY0
QXJyYXkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9W
OEZsb2F0NjRBcnJheS5jcHAKQEAgLTExOCw3ICsxMTgsNyBAQCB2ODo6UGVyc2lzdGVudDx2ODo6
RnVuY3Rpb25UZW1wbGF0ZT4gVjhGbG9hdDY0QXJyYXk6OkdldFJhd1RlbXBsYXRlKCkKICAgICBW
OFBlcklzb2xhdGVEYXRhKiBkYXRhID0gVjhQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAg
IFY4UGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT5y
YXdUZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+cmF3
VGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAg
ICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVT
Y29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPSBj
cmVhdGVSYXdUZW1wbGF0ZSgpOwpAQCAtMTMxLDcgKzEzMSw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4
OjpGdW5jdGlvblRlbXBsYXRlPiBWOEZsb2F0NjRBcnJheTo6R2V0VGVtcGxhdGUoKQogICAgIFY4
UGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOFBlcklzb2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAg
VjhQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnRl
bXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT50ZW1wbGF0
ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJl
dHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwog
ICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0QWN0aXZl
RE9NT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9W
OFRlc3RBY3RpdmVET01PYmplY3QuY3BwCmluZGV4IDUwZTAwODJkZGYzNDQ3YzZlMjc5NmExOGRl
MTFiZmQxMGQ3NjhhOTMuLjNlMmIxYTk3NDYzZGEzODg2NmM4NmI1YmI5ZTMzNmZmOTZlNGVhYjMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3RBY3RpdmVET01PYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9WOC9WOFRlc3RBY3RpdmVET01PYmplY3QuY3BwCkBAIC0xNDcsNyArMTQ3LDcgQEAg
djg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdEFjdGl2ZURPTU9iamVj
dDo6R2V0UmF3VGVtcGxhdGUoKQogICAgIFY4UGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOFBlcklz
b2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6
Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAg
ICAgaWYgKHJlc3VsdCAhPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICBy
ZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAg
ICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpG
dW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9IGNyZWF0ZVJhd1RlbXBsYXRlKCk7CkBAIC0xNjAsNyAr
MTYwLDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdEFjdGl2
ZURPTU9iamVjdDo6R2V0VGVtcGxhdGUoKQogICAgIFY4UGVySXNvbGF0ZURhdGEqIGRhdGEgPSBW
OFBlcklzb2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhQZXJJc29sYXRlRGF0YTo6VGVtcGxh
dGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7
CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICBy
ZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAg
ICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpG
dW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEN1c3RvbU5hbWVkR2V0dGVy
LmNwcAppbmRleCA5NzVjZmViMzdjMDZjODYyOTllYmVhMzQyYjIzMDY5YjIxY2E0OWNkLi5hYjVi
NWJiODE0NGUzYWJhNzZlNjQ2OTkyOTNjODFhNWE3NTIzOWQ4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RD
dXN0b21OYW1lZEdldHRlci5jcHAKQEAgLTgxLDcgKzgxLDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6
OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdEN1c3RvbU5hbWVkR2V0dGVyOjpHZXRSYXdUZW1wbGF0
ZSgpCiAgICAgVjhQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4UGVySXNvbGF0ZURhdGE6OmN1cnJl
bnQoKTsKICAgICBWOFBlcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0
ID0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9
IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNl
Y29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2Nv
cGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+
IHRlbXBsID0gY3JlYXRlUmF3VGVtcGxhdGUoKTsKQEAgLTk0LDcgKzk0LDcgQEAgdjg6OlBlcnNp
c3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdEN1c3RvbU5hbWVkR2V0dGVyOjpHZXRU
ZW1wbGF0ZSgpCiAgICAgVjhQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4UGVySXNvbGF0ZURhdGE6
OmN1cnJlbnQoKTsKICAgICBWOFBlcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3Ig
cmVzdWx0ID0gZGF0YS0+dGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0
ICE9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNl
Y29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2Nv
cGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+
IHRlbXBsID0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9WOC9WOFRlc3RFdmVudENvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudENvbnN0cnVjdG9yLmNwcAppbmRleCA0MDc0ZTU3
MzI0OWJjNWFkNDk5MmYyMjEwNmM5M2Y5NTU5YTdiYTI5Li4wYjk1YzE3ODk4NDc5MmI5NWM3YmFl
OWJlNTgxMDAwOWE2YmEwNWUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50Q29uc3RydWN0b3IuY3Bw
CkBAIC0xMTgsNyArMTE4LDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+
IFY4VGVzdEV2ZW50Q29uc3RydWN0b3I6OkdldFJhd1RlbXBsYXRlKCkKICAgICBWOFBlcklzb2xh
dGVEYXRhKiBkYXRhID0gVjhQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4UGVySXNv
bGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT5yYXdUZW1wbGF0
ZU1hcCgpLmZpbmQoJmluZm8pOwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+cmF3VGVtcGxhdGVN
YXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1
cm4gcmVzdWx0LT52YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAg
ICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPSBjcmVhdGVSYXdU
ZW1wbGF0ZSgpOwpAQCAtMTMxLDcgKzEzMSw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlv
blRlbXBsYXRlPiBWOFRlc3RFdmVudENvbnN0cnVjdG9yOjpHZXRUZW1wbGF0ZSgpCiAgICAgVjhQ
ZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4UGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBW
OFBlcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+dGVt
cGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnRlbXBsYXRl
TWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAg
ICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudFRh
cmdldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0
RXZlbnRUYXJnZXQuY3BwCmluZGV4IDhjYmFhMmYwNjRkYTZiMGU5YzU2OGM3ZDEyZTg2MTg0Mzgx
NzQxOTQuLjFlMTFmNGQ3NDVjYmFkN2UyNDU3ZGE4NDc1OTEzNjM2NzhhYTJlNWYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudFRh
cmdldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4
VGVzdEV2ZW50VGFyZ2V0LmNwcApAQCAtMTQyLDcgKzE0Miw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4
OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3RFdmVudFRhcmdldDo6R2V0UmF3VGVtcGxhdGUoKQog
ICAgIFY4UGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOFBlcklzb2xhdGVEYXRhOjpjdXJyZW50KCk7
CiAgICAgVjhQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRh
dGEtPnJhd1RlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRh
LT5yYXdUZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7
CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhh
bmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1w
bCA9IGNyZWF0ZVJhd1RlbXBsYXRlKCk7CkBAIC0xNTUsNyArMTU1LDcgQEAgdjg6OlBlcnNpc3Rl
bnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdEV2ZW50VGFyZ2V0OjpHZXRUZW1wbGF0ZSgp
CiAgICAgVjhQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4UGVySXNvbGF0ZURhdGE6OmN1cnJlbnQo
KTsKICAgICBWOFBlcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0g
ZGF0YS0+dGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEt
PnRlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxl
U2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3RFeGNlcHRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4
L1Y4VGVzdEV4Y2VwdGlvbi5jcHAKaW5kZXggNDUxYzU4ZDc4YTc2Yzc0NWE2YzdlYjZkZjM1ZWIw
NzM2M2NjY2QxNi4uNTU4OTZlOGM4YmMzNDhjODA5MjUxMTNhMTI0YzZhODE2N2EyMmQzYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV4
Y2VwdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4
L1Y4VGVzdEV4Y2VwdGlvbi5jcHAKQEAgLTcyLDcgKzcyLDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6
OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdEV4Y2VwdGlvbjo6R2V0UmF3VGVtcGxhdGUoKQogICAg
IFY4UGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOFBlcklzb2xhdGVEYXRhOjpjdXJyZW50KCk7CiAg
ICAgVjhQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEt
PnJhd1RlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT5y
YXdUZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7Cisg
ICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRs
ZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9
IGNyZWF0ZVJhd1RlbXBsYXRlKCk7CkBAIC04NSw3ICs4NSw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4
OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3RFeGNlcHRpb246OkdldFRlbXBsYXRlKCkKICAgICBW
OFBlcklzb2xhdGVEYXRhKiBkYXRhID0gVjhQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAg
IFY4UGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT50
ZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+dGVtcGxh
dGVNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICBy
ZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsK
ICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEludGVy
ZmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0
SW50ZXJmYWNlLmNwcAppbmRleCA0YTVlYTViYzhlNGJjYjMzOThmZDUxMTdmZjMxMzNjNWM3ZDZj
ZTdlLi4xZjFjNGM5ZDAxZmIxNDY1MzQ5MWFiZjk3Mjg4MTMwN2NmZDEwYzcwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0SW50ZXJmYWNl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0
SW50ZXJmYWNlLmNwcApAQCAtMzA3LDcgKzMwNyw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5j
dGlvblRlbXBsYXRlPiBWOFRlc3RJbnRlcmZhY2U6OkdldFJhd1RlbXBsYXRlKCkKICAgICBWOFBl
cklzb2xhdGVEYXRhKiBkYXRhID0gVjhQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4
UGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT5yYXdU
ZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+cmF3VGVt
cGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAg
ICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29w
ZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPSBjcmVh
dGVSYXdUZW1wbGF0ZSgpOwpAQCAtMzIwLDcgKzMyMCw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpG
dW5jdGlvblRlbXBsYXRlPiBWOFRlc3RJbnRlcmZhY2U6OkdldFRlbXBsYXRlKCkKICAgICBWOFBl
cklzb2xhdGVEYXRhKiBkYXRhID0gVjhQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4
UGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT50ZW1w
bGF0ZU1hcCgpLmZpbmQoJmluZm8pOwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+dGVtcGxhdGVN
YXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1
cm4gcmVzdWx0LT52YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAg
ICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE1lZGlhUXVl
cnlMaXN0TGlzdGVuZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Y4L1Y4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCmluZGV4IDRiMDlkMGJkMjZhY2Ux
MDc0YmMxZmUzZjQ2ZDc5YjFlOTI0NzljMmYuLmFmOTYxN2NiZDAwYjQ0ZWZkYTUzMDE1OWJiOTY3
ZDQ1MmUzOTA1YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5l
ci5jcHAKQEAgLTgxLDcgKzgxLDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxh
dGU+IFY4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI6OkdldFJhd1RlbXBsYXQKICAgICBWOFBl
cklzb2xhdGVEYXRhKiBkYXRhID0gVjhQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4
UGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT5yYXdU
ZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+cmF3VGVt
cGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAg
ICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29w
ZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPSBjcmVh
dGVSYXdUZW1wbGF0ZSgpOwpAQCAtOTQsNyArOTQsNyBAQCB2ODo6UGVyc2lzdGVudDx2ODo6RnVu
Y3Rpb25UZW1wbGF0ZT4gVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6R2V0VGVtcGxhdGUo
KQogICAgIFY4UGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOFBlcklzb2xhdGVEYXRhOjpjdXJyZW50
KCk7CiAgICAgVjhQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9
IGRhdGEtPnRlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRh
LT50ZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7Cisg
ICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRs
ZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhU
ZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVjgvVjhUZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAKaW5kZXggMGE4ZmU0M2ZjNzM1NGU2
YzE5N2RlMTNjYzVmNzlkYjc5YWQzYjg1MC4uZjU5OGQ1ODg3YzM0ZTE2ZTQ5ZmNjMmU2OGZlYmU2
MWM5Y2FlNTlhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Y4L1Y4VGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROYW1lZENvbnN0cnVjdG9yLmNwcApAQCAtMTE3
LDcgKzExNyw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3RO
YW1lZENvbnN0cnVjdG9yOjpHZXRSYXdUZW1wbGF0ZSgpCiAgICAgVjhQZXJJc29sYXRlRGF0YSog
ZGF0YSA9IFY4UGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOFBlcklzb2xhdGVEYXRh
OjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5m
aW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZW5k
KCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBl
cnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0gY3JlYXRlUmF3VGVtcGxhdGUo
KTsKQEAgLTEzMCw3ICsxMzAsNyBAQCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0
ZT4gVjhUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6R2V0VGVtcGxhdGUoKQogICAgIFY4UGVySXNvbGF0
ZURhdGEqIGRhdGEgPSBWOFBlcklzb2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhQZXJJc29s
YXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnRlbXBsYXRlTWFw
KCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmVu
ZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1
bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQ
ZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Tm9kZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Tm9kZS5jcHAKaW5kZXgg
ZjRhNGI0NTJkNjZlMjVjNjlhY2M1MTNlNmFjN2Y0YzQ3NWUwNDU5MS4uYWY3NzJkNDBkYWZkMmJj
OThmM2M1NTVjMTNiZmNmNGM3MTM5NjY5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROb2RlLmNwcApAQCAtODAsNyArODAsNyBA
QCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0Tm9kZTo6R2V0UmF3
VGVtcGxhdGUoKQogICAgIFY4UGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOFBlcklzb2xhdGVEYXRh
OjpjdXJyZW50KCk7CiAgICAgVjhQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9y
IHJlc3VsdCA9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJl
c3VsdCAhPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVz
dWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6Okhh
bmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRl
bXBsYXRlPiB0ZW1wbCA9IGNyZWF0ZVJhd1RlbXBsYXRlKCk7CkBAIC05Myw3ICs5Myw3IEBAIHY4
OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3ROb2RlOjpHZXRUZW1wbGF0
ZSgpCiAgICAgVjhQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4UGVySXNvbGF0ZURhdGE6OmN1cnJl
bnQoKTsKICAgICBWOFBlcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0
ID0gZGF0YS0+dGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRh
dGEtPnRlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFu
ZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBs
ID0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9W
OFRlc3RPYmouY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4
VGVzdE9iai5jcHAKaW5kZXggNTAyNDI4YTcxMDBjNWY3MTY2M2NmNWM2OTE1MTY5ZDk3MjIxNTUz
NS4uZTYyNTk3Y2FmMWZkNzAwOTljZjk5ZGRhZjNlNDgzNDNmOWI4ZDM1NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAK
QEAgLTIyNDksNyArMjI0OSw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRl
PiBWOFRlc3RPYmo6OkdldFJhd1RlbXBsYXRlKCkKICAgICBWOFBlcklzb2xhdGVEYXRhKiBkYXRh
ID0gVjhQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4UGVySXNvbGF0ZURhdGE6OlRl
bXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmZpbmQo
JmluZm8pOwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5lbmQoKSkK
LSAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52
YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lz
dGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPSBjcmVhdGVSYXdUZW1wbGF0ZSgpOwpA
QCAtMjI2Miw3ICsyMjYyLDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+
IFY4VGVzdE9iajo6R2V0VGVtcGxhdGUoKQogICAgIFY4UGVySXNvbGF0ZURhdGEqIGRhdGEgPSBW
OFBlcklzb2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhQZXJJc29sYXRlRGF0YTo6VGVtcGxh
dGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7
CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICBy
ZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAg
ICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpG
dW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCmluZGV4IDM5MzBkNjlmN2QzNTYyNzFjNzEz
MzM3NTY5ODY5ZmJjZDI0ODFmODYuLjc3ODRlNjViNjZkNzA3OTA3NDI2MzRhYTlhYzRiY2NkZGI4
ZTQ3MGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9W
OC9WOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2UuY3BwCkBAIC0yNjQsNyArMjY0LDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1
bmN0aW9uVGVtcGxhdGU+IFY4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6R2V0
UmEKICAgICBWOFBlcklzb2xhdGVEYXRhKiBkYXRhID0gVjhQZXJJc29sYXRlRGF0YTo6Y3VycmVu
dCgpOwogICAgIFY4UGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQg
PSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwogICAgIGlmIChyZXN1bHQgIT0g
ZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vj
b25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVTY29w
ZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4g
dGVtcGwgPSBjcmVhdGVSYXdUZW1wbGF0ZSgpOwpAQCAtMjc3LDcgKzI3Nyw3IEBAIHY4OjpQZXJz
aXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2U6OkdldFRlCiAgICAgVjhQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4UGVySXNvbGF0
ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOFBlcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRl
cmF0b3IgcmVzdWx0ID0gZGF0YS0+dGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAo
cmVzdWx0ICE9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1
bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFu
ZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVt
cGxhdGU+IHRlbXBsID0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RP
TVdyYXBwZXJXb3JsZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01XcmFwcGVy
V29ybGQuY3BwCmluZGV4IDg1OWU4MzZmMjM0MDRmZDI4YjA0Y2VhNWQzYzdmZDdlNDk1YTFjMTQu
LmEwYTYwZGJmMThiOWFjYzNiN2FkYzEzMjU4YmE3YzgwM2FkYmY3MmEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTVdyYXBwZXJXb3JsZC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NV3JhcHBlcldvcmxkLmNwcApAQCAtODIsNyArODIsNyBA
QCB2b2lkIERPTVdyYXBwZXJXb3JsZDo6ZGVhbGxvY2F0ZShET01XcmFwcGVyV29ybGQqIHdvcmxk
KQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
LSAgICBBU1NFUlQoaS0+c2Vjb25kID09IHdvcmxkKTsKKyAgICBBU1NFUlQoaS0+dmFsdWUgPT0g
d29ybGQpOwogCiAgICAgbWFwLnJlbW92ZShpKTsKICAgICBpc29sYXRlZFdvcmxkQ291bnQtLTsK
QEAgLTEwMCw5ICsxMDAsOSBAQCBQYXNzUmVmUHRyPERPTVdyYXBwZXJXb3JsZD4gRE9NV3JhcHBl
cldvcmxkOjplbnN1cmVJc29sYXRlZFdvcmxkKGludCB3b3JsZElkLCBpbgogICAgIGVsc2Ugewog
ICAgICAgICBXb3JsZE1hcDo6aXRlcmF0b3IgaSA9IG1hcC5maW5kKHdvcmxkSWQpOwogICAgICAg
ICBpZiAoaSAhPSBtYXAuZW5kKCkpIHsKLSAgICAgICAgICAgIEFTU0VSVChpLT5zZWNvbmQtPndv
cmxkSWQoKSA9PSB3b3JsZElkKTsKLSAgICAgICAgICAgIEFTU0VSVChpLT5zZWNvbmQtPmV4dGVu
c2lvbkdyb3VwKCkgPT0gZXh0ZW5zaW9uR3JvdXApOwotICAgICAgICAgICAgcmV0dXJuIGktPnNl
Y29uZDsKKyAgICAgICAgICAgIEFTU0VSVChpLT52YWx1ZS0+d29ybGRJZCgpID09IHdvcmxkSWQp
OworICAgICAgICAgICAgQVNTRVJUKGktPnZhbHVlLT5leHRlbnNpb25Hcm91cCgpID09IGV4dGVu
c2lvbkdyb3VwKTsKKyAgICAgICAgICAgIHJldHVybiBpLT52YWx1ZTsKICAgICAgICAgfQogICAg
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvTlBWOE9iamVjdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9OUFY4T2JqZWN0LmNwcAppbmRleCBmODVj
ODQ1M2U3OWI1YTBiNzc4MjQyNTg5NTY1YTBhOTU2OWU3NGZhLi5mMzg0YTQ2MjcyNjhkNmU4NDcz
YjdiZWQ5YjJkZjZmMmI0ZmY1NzM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9OUFY4T2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9OUFY4
T2JqZWN0LmNwcApAQCAtODUsNyArODUsNyBAQCBzdGF0aWMgdm9pZCBmcmVlVjhOUE9iamVjdChO
UE9iamVjdCogbnBPYmplY3QpCiAgICAgaWYgKGludCB2OE9iamVjdEhhc2ggPSB2OE5wT2JqZWN0
LT52OE9iamVjdC0+R2V0SWRlbnRpdHlIYXNoKCkpIHsKICAgICAgICAgVjhOUE9iamVjdE1hcDo6
aXRlcmF0b3IgaXRlciA9IHN0YXRpY1Y4TlBPYmplY3RNYXAoKS0+ZmluZCh2OE9iamVjdEhhc2gp
OwogICAgICAgICBpZiAoaXRlciAhPSBzdGF0aWNWOE5QT2JqZWN0TWFwKCktPmVuZCgpKSB7Ci0g
ICAgICAgICAgICBWOE5QT2JqZWN0VmVjdG9yJiBvYmplY3RzID0gaXRlci0+c2Vjb25kOworICAg
ICAgICAgICAgVjhOUE9iamVjdFZlY3RvciYgb2JqZWN0cyA9IGl0ZXItPnZhbHVlOwogICAgICAg
ICAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG9iamVjdHMuc2l6ZSgpOyArK2lu
ZGV4KSB7CiAgICAgICAgICAgICAgICAgaWYgKG9iamVjdHMuYXQoaW5kZXgpID09IHY4TnBPYmpl
Y3QpIHsKICAgICAgICAgICAgICAgICAgICAgb2JqZWN0cy5yZW1vdmUoaW5kZXgpOwpAQCAtMTU3
LDcgKzE1Nyw3IEBAIE5QT2JqZWN0KiBucENyZWF0ZVY4U2NyaXB0T2JqZWN0KE5QUCBucHAsIHY4
OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0LCBET01XaW5kCiAgICAgQVNTRVJUKHY4T2JqZWN0
SGFzaCk7CiAgICAgVjhOUE9iamVjdE1hcDo6aXRlcmF0b3IgaXRlciA9IHN0YXRpY1Y4TlBPYmpl
Y3RNYXAoKS0+ZmluZCh2OE9iamVjdEhhc2gpOwogICAgIGlmIChpdGVyICE9IHN0YXRpY1Y4TlBP
YmplY3RNYXAoKS0+ZW5kKCkpIHsKLSAgICAgICAgVjhOUE9iamVjdFZlY3RvciYgb2JqZWN0cyA9
IGl0ZXItPnNlY29uZDsKKyAgICAgICAgVjhOUE9iamVjdFZlY3RvciYgb2JqZWN0cyA9IGl0ZXIt
PnZhbHVlOwogICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgb2JqZWN0cy5z
aXplKCk7ICsraW5kZXgpIHsKICAgICAgICAgICAgIFY4TlBPYmplY3QqIHY4bnBPYmplY3QgPSBv
YmplY3RzLmF0KGluZGV4KTsKICAgICAgICAgICAgIGlmICh2OG5wT2JqZWN0LT5yb290T2JqZWN0
ID09IHJvb3QpIHsKQEAgLTE3NCw3ICsxNzQsNyBAQCBOUE9iamVjdCogbnBDcmVhdGVWOFNjcmlw
dE9iamVjdChOUFAgbnBwLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCwgRE9NV2luZAog
ICAgIHY4bnBPYmplY3QtPnY4T2JqZWN0ID0gdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5l
dyhvYmplY3QpOwogICAgIHY4bnBPYmplY3QtPnJvb3RPYmplY3QgPSByb290OwogCi0gICAgaXRl
ci0+c2Vjb25kLmFwcGVuZCh2OG5wT2JqZWN0KTsKKyAgICBpdGVyLT52YWx1ZS5hcHBlbmQodjhu
cE9iamVjdCk7CiAKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxOUE9iamVjdCo+KHY4bnBP
YmplY3QpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0
Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9s
bGVyLmNwcAppbmRleCA0ODAwYWRlOTE0ZTIwMjE4Y2U5YmYzODdhYjFlZDdhZjUyOTk1ZmU5Li43
ZWQ5ODk3OTA5NWU4OWNmYjI3ODc4OGRjMDNjYmNmMTQ2ZDEwY2UyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcApAQCAtMTE3LDggKzExNyw4
IEBAIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6Y2xlYXJTY3JpcHRPYmplY3RzKCkKIHsKICAgICBQ
bHVnaW5PYmplY3RNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wbHVnaW5PYmplY3RzLmJlZ2luKCk7CiAg
ICAgZm9yICg7IGl0ICE9IG1fcGx1Z2luT2JqZWN0cy5lbmQoKTsgKytpdCkgewotICAgICAgICBf
TlBOX1VucmVnaXN0ZXJPYmplY3QoaXQtPnNlY29uZCk7Ci0gICAgICAgIF9OUE5fUmVsZWFzZU9i
amVjdChpdC0+c2Vjb25kKTsKKyAgICAgICAgX05QTl9VbnJlZ2lzdGVyT2JqZWN0KGl0LT52YWx1
ZSk7CisgICAgICAgIF9OUE5fUmVsZWFzZU9iamVjdChpdC0+dmFsdWUpOwogICAgIH0KICAgICBt
X3BsdWdpbk9iamVjdHMuY2xlYXIoKTsKIApAQCAtMTQ2LDcgKzE0Niw3IEBAIHZvaWQgU2NyaXB0
Q29udHJvbGxlcjo6cmVzZXRJc29sYXRlZFdvcmxkcygpCiB7CiAgICAgZm9yIChJc29sYXRlZFdv
cmxkTWFwOjppdGVyYXRvciBpdGVyID0gbV9pc29sYXRlZFdvcmxkcy5iZWdpbigpOwogICAgICAg
ICAgaXRlciAhPSBtX2lzb2xhdGVkV29ybGRzLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgaXRl
ci0+c2Vjb25kLT5kZXN0cm95SXNvbGF0ZWRTaGVsbCgpOworICAgICAgICBpdGVyLT52YWx1ZS0+
ZGVzdHJveUlzb2xhdGVkU2hlbGwoKTsKICAgICB9CiAgICAgbV9pc29sYXRlZFdvcmxkcy5jbGVh
cigpOwogICAgIG1faXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2lucy5jbGVhcigpOwpAQCAtMzIy
LDkgKzMyMiw5IEBAIFY4RE9NV2luZG93U2hlbGwqIFNjcmlwdENvbnRyb2xsZXI6OmVuc3VyZUlz
b2xhdGVkV29ybGRDb250ZXh0KGludCB3b3JsZElkLCBpbnQKICAgICBpZiAod29ybGRJZCAhPSBE
T01XcmFwcGVyV29ybGQ6OnVuaW5pdGlhbGl6ZWRXb3JsZElkKSB7CiAgICAgICAgIElzb2xhdGVk
V29ybGRNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2lzb2xhdGVkV29ybGRzLmZpbmQod29ybGRJZCk7
CiAgICAgICAgIGlmIChpdGVyICE9IG1faXNvbGF0ZWRXb3JsZHMuZW5kKCkpIHsKLSAgICAgICAg
ICAgIEFTU0VSVChpdGVyLT5zZWNvbmQtPndvcmxkKCktPndvcmxkSWQoKSA9PSB3b3JsZElkKTsK
LSAgICAgICAgICAgIEFTU0VSVChpdGVyLT5zZWNvbmQtPndvcmxkKCktPmV4dGVuc2lvbkdyb3Vw
KCkgPT0gZXh0ZW5zaW9uR3JvdXApOwotICAgICAgICAgICAgcmV0dXJuIGl0ZXItPnNlY29uZDsK
KyAgICAgICAgICAgIEFTU0VSVChpdGVyLT52YWx1ZS0+d29ybGQoKS0+d29ybGRJZCgpID09IHdv
cmxkSWQpOworICAgICAgICAgICAgQVNTRVJUKGl0ZXItPnZhbHVlLT53b3JsZCgpLT5leHRlbnNp
b25Hcm91cCgpID09IGV4dGVuc2lvbkdyb3VwKTsKKyAgICAgICAgICAgIHJldHVybiBpdGVyLT52
YWx1ZTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzQyLDcgKzM0Miw3IEBAIFY4RE9NV2luZG93
U2hlbGwqIFNjcmlwdENvbnRyb2xsZXI6OmV4aXN0aW5nV2luZG93U2hlbGxJbnRlcm5hbChET01X
cmFwcGVyV29ybGQqCiAgICAgICAgIHJldHVybiBtX3dpbmRvd1NoZWxsLmdldCgpOwogCiAgICAg
SXNvbGF0ZWRXb3JsZE1hcDo6aXRlcmF0b3IgaXRlciA9IG1faXNvbGF0ZWRXb3JsZHMuZmluZCh3
b3JsZC0+d29ybGRJZCgpKTsKLSAgICByZXR1cm4gaXRlciA9PSBtX2lzb2xhdGVkV29ybGRzLmVu
ZCgpID8gMCA6IGl0ZXItPnNlY29uZDsKKyAgICByZXR1cm4gaXRlciA9PSBtX2lzb2xhdGVkV29y
bGRzLmVuZCgpID8gMCA6IGl0ZXItPnZhbHVlOwogfQogCiBWOERPTVdpbmRvd1NoZWxsKiBTY3Jp
cHRDb250cm9sbGVyOjp3aW5kb3dTaGVsbChET01XcmFwcGVyV29ybGQqIHdvcmxkKQpAQCAtMzcy
LDcgKzM3Miw3IEBAIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbklzb2xhdGVkV29y
bGQoaW50IHdvcmxkSUQsIGNvbnN0IFZlY3RvcjxTY3JpcHRTCiAgICAgICAgIGlmICh3b3JsZElE
ICE9IERPTVdyYXBwZXJXb3JsZDo6dW5pbml0aWFsaXplZFdvcmxkSWQpIHsKICAgICAgICAgICAg
IElzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbk1hcDo6aXRlcmF0b3Igc2VjdXJpdHlPcmlnaW5J
dGVyID0gbV9pc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW5zLmZpbmQod29ybGRJRCk7CiAgICAg
ICAgICAgICBpZiAoc2VjdXJpdHlPcmlnaW5JdGVyICE9IG1faXNvbGF0ZWRXb3JsZFNlY3VyaXR5
T3JpZ2lucy5lbmQoKSkKLSAgICAgICAgICAgICAgICBpc29sYXRlZFdvcmxkU2hlbGwtPnNldElz
b2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbihzZWN1cml0eU9yaWdpbkl0ZXItPnNlY29uZCk7Cisg
ICAgICAgICAgICAgICAgaXNvbGF0ZWRXb3JsZFNoZWxsLT5zZXRJc29sYXRlZFdvcmxkU2VjdXJp
dHlPcmlnaW4oc2VjdXJpdHlPcmlnaW5JdGVyLT52YWx1ZSk7CiAgICAgICAgIH0KIAogICAgICAg
ICBpc29sYXRlZFdvcmxkU2hlbGwtPmluaXRpYWxpemVJZk5lZWRlZCgpOwpAQCAtNDEyLDcgKzQx
Miw3IEBAIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6c2V0SXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3Jp
Z2luKGludCB3b3JsZElELCBQYXNzUmVmUHRyPFNlCiAgICAgbV9pc29sYXRlZFdvcmxkU2VjdXJp
dHlPcmlnaW5zLnNldCh3b3JsZElELCBzZWN1cml0eU9yaWdpbik7CiAgICAgSXNvbGF0ZWRXb3Js
ZE1hcDo6aXRlcmF0b3IgaXRlciA9IG1faXNvbGF0ZWRXb3JsZHMuZmluZCh3b3JsZElEKTsKICAg
ICBpZiAoaXRlciAhPSBtX2lzb2xhdGVkV29ybGRzLmVuZCgpKQotICAgICAgICBpdGVyLT5zZWNv
bmQtPnNldElzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbihzZWN1cml0eU9yaWdpbik7CisgICAg
ICAgIGl0ZXItPnZhbHVlLT5zZXRJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4oc2VjdXJpdHlP
cmlnaW4pOwogfQogCiBUZXh0UG9zaXRpb24gU2NyaXB0Q29udHJvbGxlcjo6ZXZlbnRIYW5kbGVy
UG9zaXRpb24oKSBjb25zdApAQCAtNTQ1LDggKzU0NSw4IEBAIHZvaWQgU2NyaXB0Q29udHJvbGxl
cjo6Y2xlYW51cFNjcmlwdE9iamVjdHNGb3JQbHVnaW4oV2lkZ2V0KiBuYXRpdmVIYW5kbGUpCiAg
ICAgUGx1Z2luT2JqZWN0TWFwOjppdGVyYXRvciBpdCA9IG1fcGx1Z2luT2JqZWN0cy5maW5kKG5h
dGl2ZUhhbmRsZSk7CiAgICAgaWYgKGl0ID09IG1fcGx1Z2luT2JqZWN0cy5lbmQoKSkKICAgICAg
ICAgcmV0dXJuOwotICAgIF9OUE5fVW5yZWdpc3Rlck9iamVjdChpdC0+c2Vjb25kKTsKLSAgICBf
TlBOX1JlbGVhc2VPYmplY3QoaXQtPnNlY29uZCk7CisgICAgX05QTl9VbnJlZ2lzdGVyT2JqZWN0
KGl0LT52YWx1ZSk7CisgICAgX05QTl9SZWxlYXNlT2JqZWN0KGl0LT52YWx1ZSk7CiAgICAgbV9w
bHVnaW5PYmplY3RzLnJlbW92ZShpdCk7CiB9CiAKQEAgLTY2NSw3ICs2NjUsNyBAQCB2b2lkIFNj
cmlwdENvbnRyb2xsZXI6OmNvbGxlY3RJc29sYXRlZENvbnRleHRzKFZlY3RvcjxzdGQ6OnBhaXI8
U2NyaXB0U3RhdGUqLCBTZQogewogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAg
ICBmb3IgKElzb2xhdGVkV29ybGRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pc29sYXRlZFdvcmxkcy5i
ZWdpbigpOyBpdCAhPSBtX2lzb2xhdGVkV29ybGRzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIFY4
RE9NV2luZG93U2hlbGwqIGlzb2xhdGVkV29ybGRTaGVsbCA9IGl0LT5zZWNvbmQ7CisgICAgICAg
IFY4RE9NV2luZG93U2hlbGwqIGlzb2xhdGVkV29ybGRTaGVsbCA9IGl0LT52YWx1ZTsKICAgICAg
ICAgaWYgKCFpc29sYXRlZFdvcmxkU2hlbGwtPmlzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbigp
KQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+
IHY4Q29udGV4dCA9IGlzb2xhdGVkV29ybGRTaGVsbC0+Y29udGV4dCgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKaW5kZXgg
NDNjZWZmNGViNjVmYjA0MjYzZjY2N2U2MGRhZWY5ZWJlNzYyZmZlZi4uNDE3MzFjMTQyY2Q4NGU0
NTVkYzhiOTJhNTYzZTY4MzI3MjRlZGRiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCkBAIC0xMDgsNyArMTA4LDcgQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgdHlwZW5hbWUgSGFuZGxlVG9UOjppdGVyYXRvciByZXN1
bHQgPSBtX21hcC5maW5kKCpoYW5kbGUpOwogICAgICAgICBpZiAocmVzdWx0ICE9IG1fbWFwLmVu
ZCgpKSB7Ci0gICAgICAgICAgICAqdmFsdWVPdXQgPSByZXN1bHQtPnNlY29uZDsKKyAgICAgICAg
ICAgICp2YWx1ZU91dCA9IHJlc3VsdC0+dmFsdWU7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9WOERPTU1hcC5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
VjhET01NYXAuaAppbmRleCBhNzU5OGM2YzVlODZjZDVjOGFhZDJiNGMzYzU1ZGZiYzk5YzdkYzM5
Li43YTYxNDNlZDFiNTIzYjc1NWNjNjFhZGYyNDNlNDFlMjZjNjlmN2IyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTU1hcC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1Y4RE9NTWFwLmgKQEAgLTExMCw3ICsxMTAsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIGJvb2wgcmVtb3ZlSWZQcmVzZW50KEtleVR5cGUqIGtleSwgdjg6OlBl
cnNpc3RlbnQ8VmFsdWVUeXBlPiB2YWx1ZSkKICAgICAgICAgewogICAgICAgICAgICAgdHlwZW5h
bWUgSGFzaE1hcDxLZXlUeXBlKiwgVmFsdWVUeXBlKj46Oml0ZXJhdG9yIGl0ID0gbV9tYXAuZmlu
ZChrZXkpOwotICAgICAgICAgICAgaWYgKGl0ID09IG1fbWFwLmVuZCgpIHx8IGl0LT5zZWNvbmQg
IT0gKnZhbHVlKQorICAgICAgICAgICAgaWYgKGl0ID09IG1fbWFwLmVuZCgpIHx8IGl0LT52YWx1
ZSAhPSAqdmFsdWUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAg
ICBtX21hcC5yZW1vdmUoaXQpOwpAQCAtMTMwLDcgKzEzMCw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgICAgIHZpc2l0b3ItPnN0YXJ0TWFwKCk7CiAgICAgICAgICAgICB0eXBlbmFt
ZSBIYXNoTWFwPEtleVR5cGUqLCBWYWx1ZVR5cGUqPjo6aXRlcmF0b3IgaXQgPSBtX21hcC5iZWdp
bigpOwogICAgICAgICAgICAgZm9yICg7IGl0ICE9IG1fbWFwLmVuZCgpOyArK2l0KQotICAgICAg
ICAgICAgICAgIHZpc2l0b3ItPnZpc2l0RE9NV3JhcHBlcihzdG9yZSwgaXQtPmZpcnN0LCB2ODo6
UGVyc2lzdGVudDxWYWx1ZVR5cGU+KGl0LT5zZWNvbmQpKTsKKyAgICAgICAgICAgICAgICB2aXNp
dG9yLT52aXNpdERPTVdyYXBwZXIoc3RvcmUsIGl0LT5rZXksIHY4OjpQZXJzaXN0ZW50PFZhbHVl
VHlwZT4oaXQtPnZhbHVlKSk7CiAgICAgICAgICAgICB2aXNpdG9yLT5lbmRNYXAoKTsKICAgICAg
ICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFBlckNvbnRl
eHREYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UGVyQ29udGV4dERhdGEu
Y3BwCmluZGV4IDNhZTlmY2Y5NjM0YTIyNDkzMDRkNWZhMTNlNGRkZDc1YTNlNTQwNTkuLjYyNTQz
OWRhMjNkMDUyMDI0NWE0YTlkMWZkMzZmMDYyZTA5M2FjYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UGVyQ29udGV4dERhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4UGVyQ29udGV4dERhdGEuY3BwCkBAIC01Myw3ICs1Myw3IEBAIHZv
aWQgVjhQZXJDb250ZXh0RGF0YTo6ZGlzcG9zZSgpCiAgICAgewogICAgICAgICBXcmFwcGVyQm9p
bGVycGxhdGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV93cmFwcGVyQm9pbGVycGxhdGVzLmJlZ2luKCk7
CiAgICAgICAgIGZvciAoOyBpdCAhPSBtX3dyYXBwZXJCb2lsZXJwbGF0ZXMuZW5kKCk7ICsraXQp
IHsKLSAgICAgICAgICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBpdC0+
c2Vjb25kOworICAgICAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlciA9
IGl0LT52YWx1ZTsKICAgICAgICAgICAgIHdyYXBwZXIuRGlzcG9zZSgpOwogICAgICAgICB9CiAg
ICAgICAgIG1fd3JhcHBlckJvaWxlcnBsYXRlcy5jbGVhcigpOwpAQCAtNjIsNyArNjIsNyBAQCB2
b2lkIFY4UGVyQ29udGV4dERhdGE6OmRpc3Bvc2UoKQogICAgIHsKICAgICAgICAgQ29uc3RydWN0
b3JNYXA6Oml0ZXJhdG9yIGl0ID0gbV9jb25zdHJ1Y3Rvck1hcC5iZWdpbigpOwogICAgICAgICBm
b3IgKDsgaXQgIT0gbV9jb25zdHJ1Y3Rvck1hcC5lbmQoKTsgKytpdCkgewotICAgICAgICAgICAg
djg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uPiB3cmFwcGVyID0gaXQtPnNlY29uZDsKKyAgICAg
ICAgICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvbj4gd3JhcHBlciA9IGl0LT52YWx1ZTsK
ICAgICAgICAgICAgIHdyYXBwZXIuRGlzcG9zZSgpOwogICAgICAgICB9CiAgICAgICAgIG1fY29u
c3RydWN0b3JNYXAuY2xlYXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L25wcnVudGltZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ucHJ1bnRpbWUu
Y3BwCmluZGV4IDhkODBjZjkzMzE4NmU4NTQ3YzE4NTE4M2Q3ZTc0ODRiY2UxZTg0YTMuLjJiMDM2
N2NkMTVmMmE0ZmIxMTNkNGNjMGJmNzY3ZWM4Y2YxYjBhNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L25wcnVudGltZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvbnBydW50aW1lLmNwcApAQCAtMTY0LDcgKzE2NCw3IEBAIE5QSWRlbnRpZmllciBf
TlBOX0dldFN0cmluZ0lkZW50aWZpZXIoY29uc3QgTlBVVEY4KiBuYW1lKQogICAgICAgICBTdHJp
bmdJZGVudGlmaWVyTWFwKiBpZGVudE1hcCA9IGdldFN0cmluZ0lkZW50aWZpZXJNYXAoKTsKICAg
ICAgICAgU3RyaW5nSWRlbnRpZmllck1hcDo6aXRlcmF0b3IgaXRlciA9IGlkZW50TWFwLT5maW5k
KGtleSk7CiAgICAgICAgIGlmIChpdGVyICE9IGlkZW50TWFwLT5lbmQoKSkKLSAgICAgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxOUElkZW50aWZpZXI+KGl0ZXItPnNlY29uZCk7CisgICAgICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TlBJZGVudGlmaWVyPihpdGVyLT52YWx1ZSk7CiAKICAg
ICAgICAgc2l6ZV90IG5hbWVMZW4gPSBrZXkubV9sZW5ndGg7CiAKQEAgLTIxMSw3ICsyMTEsNyBA
QCBOUElkZW50aWZpZXIgX05QTl9HZXRJbnRJZGVudGlmaWVyKGludDMyX3QgaW50SWQpCiAgICAg
SW50SWRlbnRpZmllck1hcCogaWRlbnRNYXAgPSBnZXRJbnRJZGVudGlmaWVyTWFwKCk7CiAgICAg
SW50SWRlbnRpZmllck1hcDo6aXRlcmF0b3IgaXRlciA9IGlkZW50TWFwLT5maW5kKGludElkKTsK
ICAgICBpZiAoaXRlciAhPSBpZGVudE1hcC0+ZW5kKCkpCi0gICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxOUElkZW50aWZpZXI+KGl0ZXItPnNlY29uZCk7CisgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxOUElkZW50aWZpZXI+KGl0ZXItPnZhbHVlKTsKIAogICAgIC8vIFdlIG5ldmVyIHJlbGVh
c2UgaWRlbnRpZmllcnMsIHNvIHRoaXMgZGljdGlvbmFyeSB3aWxsIGdyb3cuCiAgICAgUHJpdmF0
ZUlkZW50aWZpZXIqIGlkZW50aWZpZXIgPSByZWludGVycHJldF9jYXN0PFByaXZhdGVJZGVudGlm
aWVyKj4obWFsbG9jKHNpemVvZihQcml2YXRlSWRlbnRpZmllcikpKTsKQEAgLTM4OCw3ICszODgs
NyBAQCB2b2lkIF9OUE5fUmVnaXN0ZXJPYmplY3QoTlBPYmplY3QqIG5wT2JqZWN0LCBOUE9iamVj
dCogb3duZXIpCiAgICAgICAgIE5QT2JqZWN0TWFwOjppdGVyYXRvciBvd25lckVudHJ5ID0gbGl2
ZU9iamVjdE1hcCgpLmZpbmQob3duZXIpOwogICAgICAgICBOUE9iamVjdCogcGFyZW50ID0gMDsK
ICAgICAgICAgaWYgKGxpdmVPYmplY3RNYXAoKS5lbmQoKSAhPSBvd25lckVudHJ5KQotICAgICAg
ICAgICAgcGFyZW50ID0gb3duZXJFbnRyeS0+c2Vjb25kOworICAgICAgICAgICAgcGFyZW50ID0g
b3duZXJFbnRyeS0+dmFsdWU7CiAKICAgICAgICAgaWYgKHBhcmVudCkKICAgICAgICAgICAgIG93
bmVyID0gcGFyZW50OwpAQCAtNDA4LDcgKzQwOCw3IEBAIHZvaWQgX05QTl9VbnJlZ2lzdGVyT2Jq
ZWN0KE5QT2JqZWN0KiBucE9iamVjdCkKIAogICAgIE5QT2JqZWN0KiBvd25lciA9IDA7CiAgICAg
aWYgKGxpdmVPYmplY3RNYXAoKS5maW5kKG5wT2JqZWN0KSAhPSBsaXZlT2JqZWN0TWFwKCkuZW5k
KCkpCi0gICAgICAgIG93bmVyID0gbGl2ZU9iamVjdE1hcCgpLmZpbmQobnBPYmplY3QpLT5zZWNv
bmQ7CisgICAgICAgIG93bmVyID0gbGl2ZU9iamVjdE1hcCgpLmZpbmQobnBPYmplY3QpLT52YWx1
ZTsKIAogICAgIGlmICghb3duZXIpIHsKICAgICAgICAgLy8gVW5yZWdpc3RlcmluZyBhIG93bmVy
IG9iamVjdDsgYWxzbyB1bnJlZ2lzdGVyIGl0J3MgZGVzY2VuZGFudHMuCkBAIC00NDMsNyArNDQz
LDcgQEAgdm9pZCBfTlBOX1VucmVnaXN0ZXJPYmplY3QoTlBPYmplY3QqIG5wT2JqZWN0KQogICAg
IH0gZWxzZSB7CiAgICAgICAgIE5QUm9vdE9iamVjdE1hcDo6aXRlcmF0b3Igb3duZXJFbnRyeSA9
IHJvb3RPYmplY3RNYXAoKS5maW5kKG93bmVyKTsKICAgICAgICAgaWYgKG93bmVyRW50cnkgIT0g
cm9vdE9iamVjdE1hcCgpLmVuZCgpKSB7Ci0gICAgICAgICAgICBOUE9iamVjdFNldCogbGlzdCA9
IG93bmVyRW50cnktPnNlY29uZDsKKyAgICAgICAgICAgIE5QT2JqZWN0U2V0KiBsaXN0ID0gb3du
ZXJFbnRyeS0+dmFsdWU7CiAgICAgICAgICAgICBBU1NFUlQobGlzdC0+ZmluZChucE9iamVjdCkg
IT0gbGlzdC0+ZW5kKCkpOwogICAgICAgICAgICAgbGlzdC0+cmVtb3ZlKG5wT2JqZWN0KTsKICAg
ICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL0lkZW50aWZpZXJSZXAu
Y3BwIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL0lkZW50aWZpZXJSZXAuY3BwCmluZGV4IGViYTVk
NTNhOTFjZWE5MzZhNDNkMzUwMGI5MjllMjhhYWY1YzIzNDEuLjU5YWY1NDlmYjlkZDM0NDBkMmJk
ODc2NmQ3YzMwYTc3NGQyOGJmODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9J
ZGVudGlmaWVyUmVwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvSWRlbnRpZmllclJl
cC5jcHAKQEAgLTY4LDEzICs2OCwxMyBAQCBJZGVudGlmaWVyUmVwKiBJZGVudGlmaWVyUmVwOjpn
ZXQoaW50IGludElEKQogICAgIAogICAgIEludElkZW50aWZpZXJNYXA6OkFkZFJlc3VsdCByZXN1
bHQgPSBpbnRJZGVudGlmaWVyTWFwKCkuYWRkKGludElELCAwKTsKICAgICBpZiAocmVzdWx0Lmlz
TmV3RW50cnkpIHsKLSAgICAgICAgQVNTRVJUKCFyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7Ci0g
ICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gbmV3IElkZW50aWZpZXJSZXAoaW50SUQp
OworICAgICAgICBBU1NFUlQoIXJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOworICAgICAgICByZXN1
bHQuaXRlcmF0b3ItPnZhbHVlID0gbmV3IElkZW50aWZpZXJSZXAoaW50SUQpOwogICAgICAgICAK
LSAgICAgICAgaWRlbnRpZmllclNldCgpLmFkZChyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7Cisg
ICAgICAgIGlkZW50aWZpZXJTZXQoKS5hZGQocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CiAgICAg
fQogICAgIAotICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICByZXR1cm4g
cmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIAogdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxTdHJp
bmdJbXBsPiwgSWRlbnRpZmllclJlcCo+IFN0cmluZ0lkZW50aWZpZXJNYXA7CkBAIC05NCwxMyAr
OTQsMTMgQEAgSWRlbnRpZmllclJlcCogSWRlbnRpZmllclJlcDo6Z2V0KGNvbnN0IGNoYXIqIG5h
bWUpCiAgICAgU3RyaW5nIHN0cmluZyA9IFN0cmluZzo6ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJh
Y2sobmFtZSwgc3RybGVuKG5hbWUpKTsKICAgICBTdHJpbmdJZGVudGlmaWVyTWFwOjpBZGRSZXN1
bHQgcmVzdWx0ID0gc3RyaW5nSWRlbnRpZmllck1hcCgpLmFkZChzdHJpbmcuaW1wbCgpLCAwKTsK
ICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgQVNTRVJUKCFyZXN1bHQuaXRl
cmF0b3ItPnNlY29uZCk7Ci0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gbmV3IElk
ZW50aWZpZXJSZXAobmFtZSk7CisgICAgICAgIEFTU0VSVCghcmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZSk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBuZXcgSWRlbnRpZmllclJlcChu
YW1lKTsKICAgICAgICAgCi0gICAgICAgIGlkZW50aWZpZXJTZXQoKS5hZGQocmVzdWx0Lml0ZXJh
dG9yLT5zZWNvbmQpOworICAgICAgICBpZGVudGlmaWVyU2V0KCkuYWRkKHJlc3VsdC5pdGVyYXRv
ci0+dmFsdWUpOwogICAgIH0KICAgICAKLSAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT5zZWNv
bmQ7CisgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiB9CiAKIGJvb2wgSWRlbnRp
ZmllclJlcDo6aXNWYWxpZChJZGVudGlmaWVyUmVwKiBpZGVudGlmaWVyKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYnJpZGdlL05QX2pzb2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jy
aWRnZS9OUF9qc29iamVjdC5jcHAKaW5kZXggYzAyY2VlZTQ2YjczNmQ4MmQ2MWYwNzgwMDdmYWMy
ZTRlMzg0MmNjNi4uMDJiY2E4MzU2ZTg1MDdhMWVjYTJhM2Q4YTQ5MTI1ZGM5NGVkMzYwZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL05QX2pzb2JqZWN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9icmlkZ2UvTlBfanNvYmplY3QuY3BwCkBAIC02NCw4ICs2NCw4IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgIGl0ZXIgPSBtX21hcC5hZGQocm9vdE9iamVjdCwgSlNUb05QT2JqZWN0
TWFwKCkpLml0ZXJhdG9yOwogICAgICAgICB9CiAKLSAgICAgICAgQVNTRVJUKGl0ZXItPnNlY29u
ZC5maW5kKGpzT2JqZWN0KSA9PSBpdGVyLT5zZWNvbmQuZW5kKCkpOwotICAgICAgICBpdGVyLT5z
ZWNvbmQuYWRkKGpzT2JqZWN0LCBucE9iamVjdCk7CisgICAgICAgIEFTU0VSVChpdGVyLT52YWx1
ZS5maW5kKGpzT2JqZWN0KSA9PSBpdGVyLT52YWx1ZS5lbmQoKSk7CisgICAgICAgIGl0ZXItPnZh
bHVlLmFkZChqc09iamVjdCwgbnBPYmplY3QpOwogICAgIH0KIAogICAgIHZvaWQgcmVtb3ZlKFJv
b3RPYmplY3QqIHJvb3RPYmplY3QpCkBAIC03OSw5ICs3OSw5IEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgICAgIEhhc2hNYXA8Um9vdE9iamVjdCosIEpTVG9OUE9iamVjdE1hcD46Oml0ZXJhdG9yIGl0
ZXIgPSBtX21hcC5maW5kKHJvb3RPYmplY3QpOwogICAgICAgICBBU1NFUlQoaXRlciAhPSBtX21h
cC5lbmQoKSk7Ci0gICAgICAgIEFTU0VSVChpdGVyLT5zZWNvbmQuZmluZChqc09iamVjdCkgIT0g
aXRlci0+c2Vjb25kLmVuZCgpKTsKKyAgICAgICAgQVNTRVJUKGl0ZXItPnZhbHVlLmZpbmQoanNP
YmplY3QpICE9IGl0ZXItPnZhbHVlLmVuZCgpKTsKIAotICAgICAgICBpdGVyLT5zZWNvbmQucmVt
b3ZlKGpzT2JqZWN0KTsKKyAgICAgICAgaXRlci0+dmFsdWUucmVtb3ZlKGpzT2JqZWN0KTsKICAg
ICB9CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pz
Yy9KYXZhQ2xhc3NKU0MuY3BwIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YUNs
YXNzSlNDLmNwcAppbmRleCBhZWI0MDIwYmQ4NGEyMzdiOWVjMWMwYWI3NmE5ZjZmZmI2ZThiOTc1
Li5hNjA4MDFlNTYyOTRjNzJmOGUyZjc0NjZlNDQyYjYxY2RkODRlZWZlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhQ2xhc3NKU0MuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFDbGFzc0pTQy5jcHAKQEAgLTEwNyw3ICsxMDcs
NyBAQCBKYXZhQ2xhc3M6On5KYXZhQ2xhc3MoKQogCiAgICAgTWV0aG9kTGlzdE1hcDo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gbV9tZXRob2RzLmVuZCgpOwogICAgIGZvciAoTWV0aG9kTGlzdE1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtX21ldGhvZHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7
Ci0gICAgICAgIGNvbnN0IE1ldGhvZExpc3QqIG1ldGhvZExpc3QgPSBpdC0+c2Vjb25kOworICAg
ICAgICBjb25zdCBNZXRob2RMaXN0KiBtZXRob2RMaXN0ID0gaXQtPnZhbHVlOwogICAgICAgICBk
ZWxldGVBbGxWYWx1ZXMoKm1ldGhvZExpc3QpOwogICAgICAgICBkZWxldGUgbWV0aG9kTGlzdDsK
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9yb290LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX3Jvb3QuY3BwCmluZGV4IDliNjIyNGE4
YjU2MGZjNWU2MGUxNTg5ZTU3OWQxNDI1NDk3MjkxMzQuLjc0ZDgzMTkyMWYyMTliOGI3MzMzNjc1
OTE1ZTQxYmRjMTdkZGZkY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50
aW1lX3Jvb3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX3Jvb3QuY3Bw
CkBAIC0xMDUsNyArMTA1LDcgQEAgdm9pZCBSb290T2JqZWN0OjppbnZhbGlkYXRlKCkKICAgICB7
CiAgICAgICAgIEhhc2hNYXA8UnVudGltZU9iamVjdCosIEpTQzo6V2VhazxSdW50aW1lT2JqZWN0
PiA+OjppdGVyYXRvciBlbmQgPSBtX3J1bnRpbWVPYmplY3RzLmVuZCgpOwogICAgICAgICBmb3Ig
KEhhc2hNYXA8UnVudGltZU9iamVjdCosIEpTQzo6V2VhazxSdW50aW1lT2JqZWN0PiA+OjppdGVy
YXRvciBpdCA9IG1fcnVudGltZU9iamVjdHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0g
ICAgICAgICAgICBSdW50aW1lT2JqZWN0KiBydW50aW1lT2JqZWN0ID0gaXQtPnNlY29uZC5nZXQo
KTsKKyAgICAgICAgICAgIFJ1bnRpbWVPYmplY3QqIHJ1bnRpbWVPYmplY3QgPSBpdC0+dmFsdWUu
Z2V0KCk7CiAgICAgICAgICAgICBpZiAoIXJ1bnRpbWVPYmplY3QpIC8vIFNraXAgem9tYmllcy4K
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIHJ1bnRpbWVPYmplY3QtPmlu
dmFsaWRhdGUoKTsKQEAgLTEyOSw3ICsxMjksNyBAQCB2b2lkIFJvb3RPYmplY3Q6OmludmFsaWRh
dGUoKQogCiAgICAgUHJvdGVjdENvdW50U2V0OjppdGVyYXRvciBlbmQgPSBtX3Byb3RlY3RDb3Vu
dFNldC5lbmQoKTsKICAgICBmb3IgKFByb3RlY3RDb3VudFNldDo6aXRlcmF0b3IgaXQgPSBtX3By
b3RlY3RDb3VudFNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIEpTQzo6Z2NV
bnByb3RlY3QoaXQtPmZpcnN0KTsKKyAgICAgICAgSlNDOjpnY1VucHJvdGVjdChpdC0+a2V5KTsK
ICAgICBtX3Byb3RlY3RDb3VudFNldC5jbGVhcigpOwogCiAgICAgcm9vdE9iamVjdFNldCgpLT5y
ZW1vdmUodGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FudmFzVmFs
dWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbnZhc1ZhbHVlLmNwcAppbmRleCA3ODdh
MTc0MmNiMjIzN2ZiNmVmYzdjNTE5YjI3MTFiYmY1Njk4ZDE0Li4zYWVhMTdjNDRlYjUzY2Y4ZmFi
ZGE3NjUzNDAzZjIwOWY0OWIwYTgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
Q2FudmFzVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYW52YXNWYWx1ZS5j
cHAKQEAgLTUzLDE0ICs1MywxNCBAQCB2b2lkIENTU0NhbnZhc1ZhbHVlOjpjYW52YXNDaGFuZ2Vk
KEhUTUxDYW52YXNFbGVtZW50KiwgY29uc3QgRmxvYXRSZWN0JiBjaGFuZ2VkUgogICAgIEludFJl
Y3QgaW1hZ2VDaGFuZ2VSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChjaGFuZ2VkUmVjdCk7CiAgICAg
UmVuZGVyT2JqZWN0U2l6ZUNvdW50TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBjbGllbnRzKCku
ZW5kKCk7CiAgICAgZm9yIChSZW5kZXJPYmplY3RTaXplQ291bnRNYXA6OmNvbnN0X2l0ZXJhdG9y
IGN1cnIgPSBjbGllbnRzKCkuYmVnaW4oKTsgY3VyciAhPSBlbmQ7ICsrY3VycikKLSAgICAgICAg
Y29uc3RfY2FzdDxSZW5kZXJPYmplY3QqPihjdXJyLT5maXJzdCktPmltYWdlQ2hhbmdlZChzdGF0
aWNfY2FzdDxXcmFwcGVkSW1hZ2VQdHI+KHRoaXMpLCAmaW1hZ2VDaGFuZ2VSZWN0KTsKKyAgICAg
ICAgY29uc3RfY2FzdDxSZW5kZXJPYmplY3QqPihjdXJyLT5rZXkpLT5pbWFnZUNoYW5nZWQoc3Rh
dGljX2Nhc3Q8V3JhcHBlZEltYWdlUHRyPih0aGlzKSwgJmltYWdlQ2hhbmdlUmVjdCk7CiB9CiAK
IHZvaWQgQ1NTQ2FudmFzVmFsdWU6OmNhbnZhc1Jlc2l6ZWQoSFRNTENhbnZhc0VsZW1lbnQqKQog
ewogICAgIFJlbmRlck9iamVjdFNpemVDb3VudE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY2xp
ZW50cygpLmVuZCgpOwogICAgIGZvciAoUmVuZGVyT2JqZWN0U2l6ZUNvdW50TWFwOjpjb25zdF9p
dGVyYXRvciBjdXJyID0gY2xpZW50cygpLmJlZ2luKCk7IGN1cnIgIT0gZW5kOyArK2N1cnIpCi0g
ICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyT2JqZWN0Kj4oY3Vyci0+Zmlyc3QpLT5pbWFnZUNoYW5n
ZWQoc3RhdGljX2Nhc3Q8V3JhcHBlZEltYWdlUHRyPih0aGlzKSk7CisgICAgICAgIGNvbnN0X2Nh
c3Q8UmVuZGVyT2JqZWN0Kj4oY3Vyci0+a2V5KS0+aW1hZ2VDaGFuZ2VkKHN0YXRpY19jYXN0PFdy
YXBwZWRJbWFnZVB0cj4odGhpcykpOwogfQogCiB2b2lkIENTU0NhbnZhc1ZhbHVlOjpjYW52YXNE
ZXN0cm95ZWQoSFRNTENhbnZhc0VsZW1lbnQqIGVsZW1lbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCmluZGV4IGQxMGQ3MzhhMzA5
ZjkxYTlhYzg2NDMzM2U3ODUxOGRlOWM2MTU0ZjkuLjBjMjkyZjdkYTRiNjNkNWM1Nzc0ZDdiM2Iz
YTQ2ZmQ3ODEyZjU4NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRl
ZFN0eWxlRGVjbGFyYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRl
ZFN0eWxlRGVjbGFyYXRpb24uY3BwCkBAIC0xMzAwLDggKzEzMDAsOCBAQCBzdGF0aWMgUGFzc1Jl
ZlB0cjxDU1NWYWx1ZT4gY291bnRlclRvQ1NTVmFsdWUoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxl
LCBDU1NQcm9wZQogCiAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdCA9IENTU1ZhbHVlTGlz
dDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKICAgICBmb3IgKENvdW50ZXJEaXJlY3RpdmVNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBtYXAtPmVuZCgpOyArK2l0
KSB7Ci0gICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShpdC0+
Zmlyc3QsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKSk7Ci0gICAgICAgIHNob3J0IG51
bWJlciA9IHByb3BlcnR5SUQgPT0gQ1NTUHJvcGVydHlDb3VudGVySW5jcmVtZW50ID8gaXQtPnNl
Y29uZC5pbmNyZW1lbnRWYWx1ZSgpIDogaXQtPnNlY29uZC5yZXNldFZhbHVlKCk7CisgICAgICAg
IGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShpdC0+a2V5LCBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX1NUUklORykpOworICAgICAgICBzaG9ydCBudW1iZXIgPSBwcm9wZXJ0
eUlEID09IENTU1Byb3BlcnR5Q291bnRlckluY3JlbWVudCA/IGl0LT52YWx1ZS5pbmNyZW1lbnRW
YWx1ZSgpIDogaXQtPnZhbHVlLnJlc2V0VmFsdWUoKTsKICAgICAgICAgbGlzdC0+YXBwZW5kKGNz
c1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKChkb3VibGUpbnVtYmVyLCBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX05VTUJFUikpOwogICAgIH0KICAgICByZXR1cm4gbGlzdC5yZWxlYXNlKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Jvc3NmYWRlVmFsdWUuY3BwIGIvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0Nyb3NzZmFkZVZhbHVlLmNwcAppbmRleCBhMjI0YTM2MTE5Y2RiNzY5
OWI1ODkxZjgzOTlhNTRmZGZjNTlmMTIwLi4xMjY3MzRmZmNiZDY3NDkyMTQ5YTgwYjkxZjRkN2Zm
N2QxYmZjMDIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Jvc3NmYWRlVmFs
dWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDcm9zc2ZhZGVWYWx1ZS5jcHAKQEAg
LTE3OSw3ICsxNzksNyBAQCB2b2lkIENTU0Nyb3NzZmFkZVZhbHVlOjpjcm9zc2ZhZGVDaGFuZ2Vk
KGNvbnN0IEludFJlY3QmKQogewogICAgIFJlbmRlck9iamVjdFNpemVDb3VudE1hcDo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gY2xpZW50cygpLmVuZCgpOwogICAgIGZvciAoUmVuZGVyT2JqZWN0U2l6
ZUNvdW50TWFwOjpjb25zdF9pdGVyYXRvciBjdXJyID0gY2xpZW50cygpLmJlZ2luKCk7IGN1cnIg
IT0gZW5kOyArK2N1cnIpIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiBjbGllbnQgPSBjb25zdF9j
YXN0PFJlbmRlck9iamVjdCo+KGN1cnItPmZpcnN0KTsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBj
bGllbnQgPSBjb25zdF9jYXN0PFJlbmRlck9iamVjdCo+KGN1cnItPmtleSk7CiAgICAgICAgIGNs
aWVudC0+aW1hZ2VDaGFuZ2VkKHN0YXRpY19jYXN0PFdyYXBwZWRJbWFnZVB0cj4odGhpcykpOwog
ICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNvdXJj
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuY3BwCmluZGV4IGRk
OTA0ZDM3ZmI5NTRlNDRkYmE2NTM4NzY3MzU4MzExOThmYWQzZDcuLmNlNDUzNjdhYzMzMjM3MmEw
ZmI5ZWM4YzVhNTJmYjlmMDg4OWVkZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NGb250RmFjZVNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNl
U291cmNlLmNwcApAQCAtMTE0LDcgKzExNCw3IEBAIFNpbXBsZUZvbnREYXRhKiBDU1NGb250RmFj
ZVNvdXJjZTo6Z2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpCiAg
ICAgdW5zaWduZWQgaGFzaEtleSA9IChmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUo
KSArIDEpIDw8IDYgfCBmb250RGVzY3JpcHRpb24ud2lkdGhWYXJpYW50KCkgPDwgNAogICAgICAg
ICAgICAgICAgICAgICAgICB8IChmb250RGVzY3JpcHRpb24udGV4dE9yaWVudGF0aW9uKCkgPT0g
VGV4dE9yaWVudGF0aW9uVXByaWdodCA/IDggOiAwKSB8IChmb250RGVzY3JpcHRpb24ub3JpZW50
YXRpb24oKSA9PSBWZXJ0aWNhbCA/IDQgOiAwKSB8IChzeW50aGV0aWNCb2xkID8gMiA6IDApIHwg
KHN5bnRoZXRpY0l0YWxpYyA/IDEgOiAwKTsKIAotICAgIFNpbXBsZUZvbnREYXRhKiYgY2FjaGVk
RGF0YSA9IG1fZm9udERhdGFUYWJsZS5hZGQoaGFzaEtleSwgMCkuaXRlcmF0b3ItPnNlY29uZDsK
KyAgICBTaW1wbGVGb250RGF0YSomIGNhY2hlZERhdGEgPSBtX2ZvbnREYXRhVGFibGUuYWRkKGhh
c2hLZXksIDApLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoY2FjaGVkRGF0YSkKICAgICAgICAg
cmV0dXJuIGNhY2hlZERhdGE7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NG
b250U2VsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAK
aW5kZXggY2M1ZmZhMDZjZDBlNTAxNDY0YzA3MTAzYWJmZGRhMWFmNWEzZWFjYy4uMTUxN2I3NmNh
ZDVlZGM1ZWYwYmZhNDUxOWU5ZGI5ZjFlNTJjYzJmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Zv
bnRTZWxlY3Rvci5jcHAKQEAgLTI4NSw3ICsyODUsNyBAQCB2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6
YWRkRm9udEZhY2VSdWxlKGNvbnN0IFN0eWxlUnVsZUZvbnRGYWNlKiBmb250RmFjZVJ1bGUpCiAg
ICAgICAgIGlmIChmYW1pbHlOYW1lLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwog
Ci0gICAgICAgIE93blB0cjxWZWN0b3I8UmVmUHRyPENTU0ZvbnRGYWNlPiA+ID4mIGZhbWlseUZv
bnRGYWNlcyA9IG1fZm9udEZhY2VzLmFkZChmYW1pbHlOYW1lLCBudWxscHRyKS5pdGVyYXRvci0+
c2Vjb25kOworICAgICAgICBPd25QdHI8VmVjdG9yPFJlZlB0cjxDU1NGb250RmFjZT4gPiA+JiBm
YW1pbHlGb250RmFjZXMgPSBtX2ZvbnRGYWNlcy5hZGQoZmFtaWx5TmFtZSwgbnVsbHB0cikuaXRl
cmF0b3ItPnZhbHVlOwogICAgICAgICBpZiAoIWZhbWlseUZvbnRGYWNlcykgewogICAgICAgICAg
ICAgZmFtaWx5Rm9udEZhY2VzID0gYWRvcHRQdHIobmV3IFZlY3RvcjxSZWZQdHI8Q1NTRm9udEZh
Y2U+ID4pOwogCkBAIC00ODcsMTMgKzQ4NywxMyBAQCBGb250RGF0YSogQ1NTRm9udFNlbGVjdG9y
OjpnZXRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgYwog
ICAgICAgICByZXR1cm4gZm9udERhdGFGb3JHZW5lcmljRmFtaWx5KG1fZG9jdW1lbnQsIGZvbnRE
ZXNjcmlwdGlvbiwgZmFtaWx5TmFtZSk7CiAgICAgfQogCi0gICAgT3duUHRyPEhhc2hNYXA8dW5z
aWduZWQsIFJlZlB0cjxDU1NTZWdtZW50ZWRGb250RmFjZT4gPiA+JiBzZWdtZW50ZWRGb250RmFj
ZUNhY2hlID0gbV9mb250cy5hZGQoZmFtaWx5LCBudWxscHRyKS5pdGVyYXRvci0+c2Vjb25kOwor
ICAgIE93blB0cjxIYXNoTWFwPHVuc2lnbmVkLCBSZWZQdHI8Q1NTU2VnbWVudGVkRm9udEZhY2U+
ID4gPiYgc2VnbWVudGVkRm9udEZhY2VDYWNoZSA9IG1fZm9udHMuYWRkKGZhbWlseSwgbnVsbHB0
cikuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghc2VnbWVudGVkRm9udEZhY2VDYWNoZSkKICAg
ICAgICAgc2VnbWVudGVkRm9udEZhY2VDYWNoZSA9IGFkb3B0UHRyKG5ldyBIYXNoTWFwPHVuc2ln
bmVkLCBSZWZQdHI8Q1NTU2VnbWVudGVkRm9udEZhY2U+ID4pOwogCiAgICAgRm9udFRyYWl0c01h
c2sgdHJhaXRzTWFzayA9IGZvbnREZXNjcmlwdGlvbi50cmFpdHNNYXNrKCk7CiAKLSAgICBSZWZQ
dHI8Q1NTU2VnbWVudGVkRm9udEZhY2U+JiBmYWNlID0gc2VnbWVudGVkRm9udEZhY2VDYWNoZS0+
YWRkKHRyYWl0c01hc2ssIDApLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgUmVmUHRyPENTU1NlZ21l
bnRlZEZvbnRGYWNlPiYgZmFjZSA9IHNlZ21lbnRlZEZvbnRGYWNlQ2FjaGUtPmFkZCh0cmFpdHNN
YXNrLCAwKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCFmYWNlKSB7CiAgICAgICAgIGZhY2Ug
PSBDU1NTZWdtZW50ZWRGb250RmFjZTo6Y3JlYXRlKHRoaXMpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5jcHAKaW5kZXggNjNjYjQyMmE5ZmY3MzNmOGJm
MGFkYTY0ZjU5YzU0NTk0YmI2MTY3OC4uZmMyYmE2NWZhZGZlZWQ0ZTBiNmJiYWFjYzg0Yjg2MGNm
ZjAxN2U4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlR2VuZXJhdG9y
VmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZUdlbmVyYXRvclZhbHVl
LmNwcApAQCAtNTcsNyArNTcsNyBAQCB2b2lkIENTU0ltYWdlR2VuZXJhdG9yVmFsdWU6OmFkZENs
aWVudChSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBJbnRTaXplJiBzaQogICAgIGlmIChp
dCA9PSBtX2NsaWVudHMuZW5kKCkpCiAgICAgICAgIG1fY2xpZW50cy5hZGQocmVuZGVyZXIsIFNp
emVBbmRDb3VudChzaXplLCAxKSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIFNpemVBbmRDb3VudCYg
c2l6ZUNvdW50ID0gaXQtPnNlY29uZDsKKyAgICAgICAgU2l6ZUFuZENvdW50JiBzaXplQ291bnQg
PSBpdC0+dmFsdWU7CiAgICAgICAgICsrc2l6ZUNvdW50LmNvdW50OwogICAgIH0KIH0KQEAgLTY5
LDcgKzY5LDcgQEAgdm9pZCBDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjpyZW1vdmVDbGllbnQoUmVu
ZGVyT2JqZWN0KiByZW5kZXJlcikKICAgICBBU1NFUlQoaXQgIT0gbV9jbGllbnRzLmVuZCgpKTsK
IAogICAgIEludFNpemUgcmVtb3ZlZEltYWdlU2l6ZTsKLSAgICBTaXplQW5kQ291bnQmIHNpemVD
b3VudCA9IGl0LT5zZWNvbmQ7CisgICAgU2l6ZUFuZENvdW50JiBzaXplQ291bnQgPSBpdC0+dmFs
dWU7CiAgICAgSW50U2l6ZSBzaXplID0gc2l6ZUNvdW50LnNpemU7CiAgICAgaWYgKCFzaXplLmlz
RW1wdHkoKSkgewogICAgICAgICBtX3NpemVzLnJlbW92ZShzaXplKTsKQEAgLTg3LDcgKzg3LDcg
QEAgSW1hZ2UqIENTU0ltYWdlR2VuZXJhdG9yVmFsdWU6OmdldEltYWdlKFJlbmRlck9iamVjdCog
cmVuZGVyZXIsIGNvbnN0IEludFNpemUmIHMKIHsKICAgICBSZW5kZXJPYmplY3RTaXplQ291bnRN
YXA6Oml0ZXJhdG9yIGl0ID0gbV9jbGllbnRzLmZpbmQocmVuZGVyZXIpOwogICAgIGlmIChpdCAh
PSBtX2NsaWVudHMuZW5kKCkpIHsKLSAgICAgICAgU2l6ZUFuZENvdW50JiBzaXplQ291bnQgPSBp
dC0+c2Vjb25kOworICAgICAgICBTaXplQW5kQ291bnQmIHNpemVDb3VudCA9IGl0LT52YWx1ZTsK
ICAgICAgICAgSW50U2l6ZSBvbGRTaXplID0gc2l6ZUNvdW50LnNpemU7CiAgICAgICAgIGlmIChv
bGRTaXplICE9IHNpemUpIHsKICAgICAgICAgICAgIFJlZlB0cjxDU1NJbWFnZUdlbmVyYXRvclZh
bHVlPiBwcm90ZWN0KHRoaXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Nl
Z21lbnRlZEZvbnRGYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWdtZW50ZWRGb250
RmFjZS5jcHAKaW5kZXggOTgzNDI1NDY5MjRmODY0MmJlZjcwMjBiYjBlYmM4NjQ0MTcyNWNiYi4u
MWI3NTM0YzEzZjliYzM5Y2QwYjExMjRiMGM2NzZmZjgzNGVlNWJiNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuY3BwCkBAIC0xMDYsNyArMTA2LDcgQEAgRm9u
dERhdGEqIENTU1NlZ21lbnRlZEZvbnRGYWNlOjpnZXRGb250RGF0YShjb25zdCBGb250RGVzY3Jp
cHRpb24mIGZvbnREZXNjcmlwdGkKICAgICBGb250VHJhaXRzTWFzayBkZXNpcmVkVHJhaXRzTWFz
ayA9IGZvbnREZXNjcmlwdGlvbi50cmFpdHNNYXNrKCk7CiAgICAgdW5zaWduZWQgaGFzaEtleSA9
ICgoZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCkgKyAxKSA8PCAoRm9udFRyYWl0
c01hc2tXaWR0aCArIDEpKSB8ICgoZm9udERlc2NyaXB0aW9uLm9yaWVudGF0aW9uKCkgPT0gVmVy
dGljYWwgPyAxIDogMCkgPDwgRm9udFRyYWl0c01hc2tXaWR0aCkgfCBkZXNpcmVkVHJhaXRzTWFz
azsKIAotICAgIFNlZ21lbnRlZEZvbnREYXRhKiYgZm9udERhdGEgPSBtX2ZvbnREYXRhVGFibGUu
YWRkKGhhc2hLZXksIDApLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgU2VnbWVudGVkRm9udERhdGEq
JiBmb250RGF0YSA9IG1fZm9udERhdGFUYWJsZS5hZGQoaGFzaEtleSwgMCkuaXRlcmF0b3ItPnZh
bHVlOwogICAgIGlmIChmb250RGF0YSkKICAgICAgICAgcmV0dXJuIGZvbnREYXRhOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU1NlbGVjdG9yLmNwcAppbmRleCA1YzI2MjU2YThhNjhjMDY1MzcwODMzMTFlNjg0
ZjE2MTBiNGFhM2I3Li5kYTI4YTRmMjk5ZGUzY2FjYzI5ZWZlNGJlYjJiNzk3MTgwMWYxYzg0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VsZWN0b3IuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvci5jcHAKQEAgLTM3Nyw3ICszNzcsNyBAQCBDU1NTZWxl
Y3Rvcjo6UHNldWRvVHlwZSBDU1NTZWxlY3Rvcjo6cGFyc2VQc2V1ZG9UeXBlKGNvbnN0IEF0b21p
Y1N0cmluZyYgbmFtZSkKICAgICAgICAgcmV0dXJuIFBzZXVkb1Vua25vd247CiAgICAgSGFzaE1h
cDxBdG9taWNTdHJpbmdJbXBsKiwgQ1NTU2VsZWN0b3I6OlBzZXVkb1R5cGU+KiBuYW1lVG9Qc2V1
ZG9UeXBlID0gbmFtZVRvUHNldWRvVHlwZU1hcCgpOwogICAgIEhhc2hNYXA8QXRvbWljU3RyaW5n
SW1wbCosIENTU1NlbGVjdG9yOjpQc2V1ZG9UeXBlPjo6aXRlcmF0b3Igc2xvdCA9IG5hbWVUb1Bz
ZXVkb1R5cGUtPmZpbmQobmFtZS5pbXBsKCkpOwotICAgIHJldHVybiBzbG90ID09IG5hbWVUb1Bz
ZXVkb1R5cGUtPmVuZCgpID8gUHNldWRvVW5rbm93biA6IHNsb3QtPnNlY29uZDsKKyAgICByZXR1
cm4gc2xvdCA9PSBuYW1lVG9Qc2V1ZG9UeXBlLT5lbmQoKSA/IFBzZXVkb1Vua25vd24gOiBzbG90
LT52YWx1ZTsKIH0KIAogYm9vbCBDU1NTZWxlY3Rvcjo6aXNVbmtub3duUHNldWRvVHlwZShjb25z
dCBBdG9taWNTdHJpbmcmIG5hbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
VmFsdWVQb29sLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZVBvb2wuY3BwCmluZGV4
IGNlNzU3YjkzM2IzZjRhMzAyZTg3MTY1NjhkMDNlMDNkYmYxYjA3NmMuLmMxNjg5OTE5ZDE2ZWUx
NmYwZWUwNzMxOTE5OTZlOTdjNWM4ZmM5MGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NWYWx1ZVBvb2wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZVBvb2wu
Y3BwCkBAIC03OCw4ICs3OCw4IEBAIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IENTU1Zh
bHVlUG9vbDo6Y3JlYXRlQ29sb3JWYWx1ZSh1bnNpZ25lZCByZ2JWYWx1ZSkKICAgICBSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IGR1bW15VmFsdWU7CiAgICAgQ29sb3JWYWx1ZUNhY2hlOjpBZGRS
ZXN1bHQgZW50cnkgPSBtX2NvbG9yVmFsdWVDYWNoZS5hZGQocmdiVmFsdWUsIGR1bW15VmFsdWUp
OwogICAgIGlmIChlbnRyeS5pc05ld0VudHJ5KQotICAgICAgICBlbnRyeS5pdGVyYXRvci0+c2Vj
b25kID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUNvbG9yKHJnYlZhbHVlKTsKLSAgICByZXR1
cm4gZW50cnkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgZW50cnkuaXRlcmF0b3ItPnZhbHVl
ID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUNvbG9yKHJnYlZhbHVlKTsKKyAgICByZXR1cm4g
ZW50cnkuaXRlcmF0b3ItPnZhbHVlOwogfQogCiBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiBDU1NWYWx1ZVBvb2w6OmNyZWF0ZVZhbHVlKGRvdWJsZSB2YWx1ZSwgQ1NTUHJpbWl0aXZlVmFs
dWU6OlVuaXRUeXBlcyB0eXBlKQpAQCAtMTEzLDcgKzExMyw3IEBAIFBhc3NSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IENTU1ZhbHVlUG9vbDo6Y3JlYXRlVmFsdWUoZG91YmxlIHZhbHVlLCBDU1NQ
cmltaXRpCiAKIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IENTU1ZhbHVlUG9vbDo6Y3Jl
YXRlRm9udEZhbWlseVZhbHVlKGNvbnN0IFN0cmluZyYgZmFtaWx5TmFtZSkKIHsKLSAgICBSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiB2YWx1ZSA9IG1fZm9udEZhbWlseVZhbHVlQ2FjaGUuYWRk
KGZhbWlseU5hbWUsIDApLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiYgdmFsdWUgPSBtX2ZvbnRGYW1pbHlWYWx1ZUNhY2hlLmFkZChmYW1pbHlOYW1lLCAw
KS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgdmFsdWUgPSBDU1NQ
cmltaXRpdmVWYWx1ZTo6Y3JlYXRlKGZhbWlseU5hbWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
U1RSSU5HKTsKICAgICByZXR1cm4gdmFsdWU7CkBAIC0xMjYsNyArMTI2LDcgQEAgUGFzc1JlZlB0
cjxDU1NWYWx1ZUxpc3Q+IENTU1ZhbHVlUG9vbDo6Y3JlYXRlRm9udEZhY2VWYWx1ZShjb25zdCBB
dG9taWNTdHJpbmcmIHMKICAgICBpZiAobV9mb250RmFjZVZhbHVlQ2FjaGUuc2l6ZSgpID4gbWF4
aW11bUZvbnRGYWNlQ2FjaGVTaXplKQogICAgICAgICBtX2ZvbnRGYWNlVmFsdWVDYWNoZS5jbGVh
cigpOwogCi0gICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4mIHZhbHVlID0gbV9mb250RmFjZVZhbHVl
Q2FjaGUuYWRkKHN0cmluZywgMCkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBSZWZQdHI8Q1NTVmFs
dWVMaXN0PiYgdmFsdWUgPSBtX2ZvbnRGYWNlVmFsdWVDYWNoZS5hZGQoc3RyaW5nLCAwKS5pdGVy
YXRvci0+dmFsdWU7CiAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgdmFsdWUgPSBDU1NQYXJzZXI6
OnBhcnNlRm9udEZhY2VWYWx1ZShzdHJpbmcpOwogICAgIHJldHVybiB2YWx1ZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Qcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24uY3Bw
IGIvU291cmNlL1dlYkNvcmUvY3NzL1Byb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAK
aW5kZXggZjZlM2RiMzliNzU5ODI3MTU5ZjEyYTFjMGZhN2QwMDg0YWQzMTM2NS4uODlkNzA3NGVk
MDIwNDk4ZDFlODhjNWQyMTRlMzEzOThlYjgzMWE2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3NzL1Byb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvY3NzL1Byb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAKQEAgLTM0Niw3ICsz
NDYsNyBAQCBDU1NWYWx1ZSogUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpjbG9uZUFu
ZENhY2hlRm9yQ1NTT00oQ1NTVmFsdWUqIGludGVybgogICAgIGlmICghbV9jc3NvbUNTU1ZhbHVl
Q2xvbmVzKQogICAgICAgICBtX2Nzc29tQ1NTVmFsdWVDbG9uZXMgPSBhZG9wdFB0cihuZXcgSGFz
aE1hcDxDU1NWYWx1ZSosIFJlZlB0cjxDU1NWYWx1ZT4gPik7CiAgICAgCi0gICAgUmVmUHRyPENT
U1ZhbHVlPiYgY2xvbmVkVmFsdWUgPSBtX2Nzc29tQ1NTVmFsdWVDbG9uZXMtPmFkZChpbnRlcm5h
bFZhbHVlLCBSZWZQdHI8Q1NTVmFsdWU+KCkpLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgUmVmUHRy
PENTU1ZhbHVlPiYgY2xvbmVkVmFsdWUgPSBtX2Nzc29tQ1NTVmFsdWVDbG9uZXMtPmFkZChpbnRl
cm5hbFZhbHVlLCBSZWZQdHI8Q1NTVmFsdWU+KCkpLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAo
IWNsb25lZFZhbHVlKQogICAgICAgICBjbG9uZWRWYWx1ZSA9IGludGVybmFsVmFsdWUtPmNsb25l
Rm9yQ1NTT00oKTsKICAgICByZXR1cm4gY2xvbmVkVmFsdWUuZ2V0KCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZUJ1aWxkZXIuY3BwCmluZGV4IDA5YzI3YjcxNzlmYzI0MjQzNGQ1YjQ2MGZkYzhmYzdiYmE0
MTk3ZGEuLjUxMjFmZWQ4NTI5ZDRjOTQ3NGNmNjU2YzBhN2VjYzhlNzQ3ZmIyMmQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZUJ1aWxkZXIuY3BwCkBAIC0xMDEyLDExICsxMDEyLDExIEBAIHB1YmxpYzoK
ICAgICAgICAgdHlwZWRlZiBDb3VudGVyRGlyZWN0aXZlTWFwOjppdGVyYXRvciBJdGVyYXRvcjsK
ICAgICAgICAgSXRlcmF0b3IgZW5kID0gcGFyZW50TWFwLmVuZCgpOwogICAgICAgICBmb3IgKEl0
ZXJhdG9yIGl0ID0gcGFyZW50TWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAg
ICAgICAgQ291bnRlckRpcmVjdGl2ZXMmIGRpcmVjdGl2ZXMgPSBtYXAuYWRkKGl0LT5maXJzdCwg
Q291bnRlckRpcmVjdGl2ZXMoKSkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgICAgIENvdW50
ZXJEaXJlY3RpdmVzJiBkaXJlY3RpdmVzID0gbWFwLmFkZChpdC0+a2V5LCBDb3VudGVyRGlyZWN0
aXZlcygpKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgICAgICBpZiAoY291bnRlckJlaGF2aW9y
ID09IFJlc2V0KSB7Ci0gICAgICAgICAgICAgICAgZGlyZWN0aXZlcy5pbmhlcml0UmVzZXQoaXQt
PnNlY29uZCk7CisgICAgICAgICAgICAgICAgZGlyZWN0aXZlcy5pbmhlcml0UmVzZXQoaXQtPnZh
bHVlKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZGlyZWN0aXZlcy5p
bmhlcml0SW5jcmVtZW50KGl0LT5zZWNvbmQpOworICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXMu
aW5oZXJpdEluY3JlbWVudChpdC0+dmFsdWUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAg
ICAgfQpAQCAtMTAzMyw5ICsxMDMzLDkgQEAgcHVibGljOgogICAgICAgICBJdGVyYXRvciBlbmQg
PSBtYXAuZW5kKCk7CiAgICAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSBtYXAuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KQogICAgICAgICAgICAgaWYgKGNvdW50ZXJCZWhhdmlvciA9PSBSZXNldCkK
LSAgICAgICAgICAgICAgICBpdC0+c2Vjb25kLmNsZWFyUmVzZXQoKTsKKyAgICAgICAgICAgICAg
ICBpdC0+dmFsdWUuY2xlYXJSZXNldCgpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIGl0LT5zZWNvbmQuY2xlYXJJbmNyZW1lbnQoKTsKKyAgICAgICAgICAgICAgICBpdC0+dmFs
dWUuY2xlYXJJbmNyZW1lbnQoKTsKIAogICAgICAgICBpbnQgbGVuZ3RoID0gbGlzdCA/IGxpc3Qt
Pmxlbmd0aCgpIDogMDsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkg
ewpAQCAtMTA0OSw3ICsxMDQ5LDcgQEAgcHVibGljOgogCiAgICAgICAgICAgICBBdG9taWNTdHJp
bmcgaWRlbnRpZmllciA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4ocGFpci0+Zmly
c3QoKSktPmdldFN0cmluZ1ZhbHVlKCk7CiAgICAgICAgICAgICBpbnQgdmFsdWUgPSBzdGF0aWNf
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHBhaXItPnNlY29uZCgpKS0+Z2V0SW50VmFsdWUoKTsK
LSAgICAgICAgICAgIENvdW50ZXJEaXJlY3RpdmVzJiBkaXJlY3RpdmVzID0gbWFwLmFkZChpZGVu
dGlmaWVyLCBDb3VudGVyRGlyZWN0aXZlcygpKS5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICAg
ICAgQ291bnRlckRpcmVjdGl2ZXMmIGRpcmVjdGl2ZXMgPSBtYXAuYWRkKGlkZW50aWZpZXIsIENv
dW50ZXJEaXJlY3RpdmVzKCkpLml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgICAgIGlmIChjb3Vu
dGVyQmVoYXZpb3IgPT0gUmVzZXQpIHsKICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzLnNldFJl
c2V0VmFsdWUodmFsdWUpOwogICAgICAgICAgICAgfSBlbHNlIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHls
ZVJlc29sdmVyLmNwcAppbmRleCBjZjIwNjg3YzgyOGQyMDdjNTgyZDc5OWE3NDVjNjI5MWExNTlm
ZTk5Li4zMmZkNmY5MWQ4NTVmMDU4NDlmNDdmN2E2YzIyNjc1MWVhZWUyNDdlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCkBAIC01MDIsNyArNTAyLDcgQEAgdm9pZCBTdHlsZVJl
c29sdmVyOjpjb2xsZWN0RmVhdHVyZXMoKQogICAgIG1fZmVhdHVyZXMuYWRkKG1fYXV0aG9yU3R5
bGUtPmZlYXR1cmVzKCkpOwogI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCiAgICAgZm9yIChTY29w
ZWRSdWxlU2V0TWFwOjppdGVyYXRvciBpdCA9IG1fc2NvcGVkQXV0aG9yU3R5bGVzLmJlZ2luKCk7
IGl0ICE9IG1fc2NvcGVkQXV0aG9yU3R5bGVzLmVuZCgpOyArK2l0KQotICAgICAgICBtX2ZlYXR1
cmVzLmFkZChpdC0+c2Vjb25kLT5mZWF0dXJlcygpKTsKKyAgICAgICAgbV9mZWF0dXJlcy5hZGQo
aXQtPnZhbHVlLT5mZWF0dXJlcygpKTsKICNlbmRpZgogICAgIGlmIChtX3VzZXJTdHlsZSkKICAg
ICAgICAgbV9mZWF0dXJlcy5hZGQobV91c2VyU3R5bGUtPmZlYXR1cmVzKCkpOwpAQCAtNTM5LDcg
KzUzOSw3IEBAIGlubGluZSBSdWxlU2V0KiBTdHlsZVJlc29sdmVyOjpydWxlU2V0Rm9yU2NvcGUo
Y29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpIGNvbnN0CiAgICAgaWYgKCFzY29wZS0+aGFzU2Nv
cGVkSFRNTFN0eWxlQ2hpbGQoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgU2NvcGVkUnVsZVNl
dE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Njb3BlZEF1dGhvclN0eWxlcy5maW5kKHNjb3Bl
KTsKLSAgICByZXR1cm4gaXQgIT0gbV9zY29wZWRBdXRob3JTdHlsZXMuZW5kKCkgPyBpdC0+c2Vj
b25kLmdldCgpIDogMDsgCisgICAgcmV0dXJuIGl0ICE9IG1fc2NvcGVkQXV0aG9yU3R5bGVzLmVu
ZCgpID8gaXQtPnZhbHVlLmdldCgpIDogMDsgCiB9CiAjZW5kaWYKIApAQCAtNTYyLDggKzU2Miw4
IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwZW5kQXV0aG9yU3R5bGVzaGVldHModW5zaWduZWQg
Zmlyc3ROZXcsIGNvbnN0IFZlY3RvcjxSZWZQCiAgICAgICAgIGlmIChzY29wZSkgewogICAgICAg
ICAgICAgU2NvcGVkUnVsZVNldE1hcDo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IG1fc2NvcGVkQXV0
aG9yU3R5bGVzLmFkZChzY29wZSwgbnVsbHB0cik7CiAgICAgICAgICAgICBpZiAoYWRkUmVzdWx0
LmlzTmV3RW50cnkpCi0gICAgICAgICAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQg
PSBSdWxlU2V0OjpjcmVhdGUoKTsKLSAgICAgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+c2Vj
b25kLT5hZGRSdWxlc0Zyb21TaGVldChzaGVldCwgKm1fbWVkaXVtLCB0aGlzLCBzY29wZSk7Cisg
ICAgICAgICAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IFJ1bGVTZXQ6OmNyZWF0
ZSgpOworICAgICAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+YWRkUnVsZXNGcm9t
U2hlZXQoc2hlZXQsICptX21lZGl1bSwgdGhpcywgc2NvcGUpOwogICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgIH0KICNlbmRpZgpAQCAtNjkzLDEwICs2OTMsMTAgQEAgdm9pZCBTdHlsZVJl
c29sdmVyOjpzd2VlcE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUoKQogICAgIE1hdGNoZWRQcm9wZXJ0
aWVzQ2FjaGU6Oml0ZXJhdG9yIGl0ID0gbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlLmJlZ2luKCk7
CiAgICAgTWF0Y2hlZFByb3BlcnRpZXNDYWNoZTo6aXRlcmF0b3IgZW5kID0gbV9tYXRjaGVkUHJv
cGVydGllc0NhY2hlLmVuZCgpOwogICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgVmVjdG9yPE1hdGNoZWRQcm9wZXJ0aWVzPiYgbWF0Y2hlZFByb3BlcnRpZXMgPSBpdC0+c2Vj
b25kLm1hdGNoZWRQcm9wZXJ0aWVzOworICAgICAgICBWZWN0b3I8TWF0Y2hlZFByb3BlcnRpZXM+
JiBtYXRjaGVkUHJvcGVydGllcyA9IGl0LT52YWx1ZS5tYXRjaGVkUHJvcGVydGllczsKICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXRjaGVkUHJvcGVydGllcy5zaXplKCk7ICsraSkg
ewogICAgICAgICAgICAgaWYgKG1hdGNoZWRQcm9wZXJ0aWVzW2ldLnByb3BlcnRpZXMtPmhhc09u
ZVJlZigpKSB7Ci0gICAgICAgICAgICAgICAgdG9SZW1vdmUuYXBwZW5kKGl0LT5maXJzdCk7Cisg
ICAgICAgICAgICAgICAgdG9SZW1vdmUuYXBwZW5kKGl0LT5rZXkpOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xODc4LDcgKzE4NzgsNyBAQCB2
b2lkIFN0eWxlUmVzb2x2ZXI6OmtleWZyYW1lU3R5bGVzRm9yQW5pbWF0aW9uKEVsZW1lbnQqIGUs
IGNvbnN0IFJlbmRlclN0eWxlKiBlbAogICAgIGlmIChpdCA9PSBtX2tleWZyYW1lc1J1bGVNYXAu
ZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNvbnN0IFN0eWxlUnVsZUtleWZyYW1lcyog
a2V5ZnJhbWVzUnVsZSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgY29uc3QgU3R5bGVSdWxlS2V5
ZnJhbWVzKiBrZXlmcmFtZXNSdWxlID0gaXQtPnZhbHVlLmdldCgpOwogCiAgICAgLy8gQ29uc3Ry
dWN0IGFuZCBwb3B1bGF0ZSB0aGUgc3R5bGUgZm9yIGVhY2gga2V5ZnJhbWUKICAgICBjb25zdCBW
ZWN0b3I8UmVmUHRyPFN0eWxlS2V5ZnJhbWU+ID4mIGtleWZyYW1lcyA9IGtleWZyYW1lc1J1bGUt
PmtleWZyYW1lcygpOwpAQCAtMjU2Nyw3ICsyNTY3LDcgQEAgc3RhdGljIHZvaWQgcmVwb3J0QXRv
bVJ1bGVNYXAoTWVtb3J5Q2xhc3NJbmZvKiBpbmZvLCBjb25zdCBSdWxlU2V0OjpBdG9tUnVsZU1h
cCYKIHsKICAgICBpbmZvLT5hZGRIYXNoTWFwKGF0b21pY1J1bGVNYXApOwogICAgIGZvciAoUnVs
ZVNldDo6QXRvbVJ1bGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYXRvbWljUnVsZU1hcC5iZWdp
bigpOyBpdCAhPSBhdG9taWNSdWxlTWFwLmVuZCgpOyArK2l0KQotICAgICAgICBpbmZvLT5hZGRJ
bnN0cnVtZW50ZWRWZWN0b3IoKml0LT5zZWNvbmQpOworICAgICAgICBpbmZvLT5hZGRJbnN0cnVt
ZW50ZWRWZWN0b3IoKml0LT52YWx1ZSk7CiB9CiAKIHZvaWQgUnVsZVNldDo6cmVwb3J0TWVtb3J5
VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29uc3QKQEAgLTI2Mzgs
NyArMjYzOCw3IEBAIHZvaWQgUnVsZVNldDo6YWRkVG9SdWxlU2V0KEF0b21pY1N0cmluZ0ltcGwq
IGtleSwgQXRvbVJ1bGVNYXAmIG1hcCwgY29uc3QgUnVsZURhCiB7CiAgICAgaWYgKCFrZXkpCiAg
ICAgICAgIHJldHVybjsKLSAgICBPd25QdHI8VmVjdG9yPFJ1bGVEYXRhPiA+JiBydWxlcyA9IG1h
cC5hZGQoa2V5LCBudWxscHRyKS5pdGVyYXRvci0+c2Vjb25kOworICAgIE93blB0cjxWZWN0b3I8
UnVsZURhdGE+ID4mIHJ1bGVzID0gbWFwLmFkZChrZXksIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1
ZTsKICAgICBpZiAoIXJ1bGVzKQogICAgICAgICBydWxlcyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8
UnVsZURhdGE+KTsKICAgICBydWxlcy0+YXBwZW5kKHJ1bGVEYXRhKTsKQEAgLTI3OTksNyArMjc5
OSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzaHJpbmtNYXBWZWN0b3JzVG9GaXQoUnVsZVNldDo6
QXRvbVJ1bGVNYXAmIG1hcCkKIHsKICAgICBSdWxlU2V0OjpBdG9tUnVsZU1hcDo6aXRlcmF0b3Ig
ZW5kID0gbWFwLmVuZCgpOwogICAgIGZvciAoUnVsZVNldDo6QXRvbVJ1bGVNYXA6Oml0ZXJhdG9y
IGl0ID0gbWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+
c2hyaW5rVG9GaXQoKTsKKyAgICAgICAgaXQtPnZhbHVlLT5zaHJpbmtUb0ZpdCgpOwogfQogCiB2
b2lkIFJ1bGVTZXQ6OnNocmlua1RvRml0KCkKQEAgLTI5NDUsNyArMjk0NSw3IEBAIGNvbnN0IFN0
eWxlUmVzb2x2ZXI6Ok1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVJdGVtKiBTdHlsZVJlc29sdmVyOjpm
aW5kRnJvbU1hdGNoZWRQCiAgICAgTWF0Y2hlZFByb3BlcnRpZXNDYWNoZTo6aXRlcmF0b3IgaXQg
PSBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUuZmluZChoYXNoKTsKICAgICBpZiAoaXQgPT0gbV9t
YXRjaGVkUHJvcGVydGllc0NhY2hlLmVuZCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBNYXRj
aGVkUHJvcGVydGllc0NhY2hlSXRlbSYgY2FjaGVJdGVtID0gaXQtPnNlY29uZDsKKyAgICBNYXRj
aGVkUHJvcGVydGllc0NhY2hlSXRlbSYgY2FjaGVJdGVtID0gaXQtPnZhbHVlOwogCiAgICAgc2l6
ZV90IHNpemUgPSBtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCk7CiAgICAgaWYg
KHNpemUgIT0gY2FjaGVJdGVtLm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0Q29udGVudHMuY3BwIGIvU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHAKaW5kZXggMDQ4MjczYmVjMTc4M2RiMjUyNzdi
MjJlMmVmNDNkYzY4OTYxN2FkZC4uN2E3ZWNjZGE1YzU4NzU3OWJhYTFmYzgzYTY1MTQ2ZDZiMmMz
YTNmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHAKQEAgLTI1
MSw3ICsyNTEsNyBAQCB2b2lkIFN0eWxlU2hlZXRDb250ZW50czo6cGFyc2VyQWRkTmFtZXNwYWNl
KGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4LCBjb25zdCBBdAogICAgIFByZWZpeE5hbWVzcGFj
ZVVSSU1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fbmFtZXNwYWNlcy5hZGQocHJlZml4LCB1cmkp
OwogICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKICAgICAgICAgcmV0dXJuOwotICAgIHJlc3Vs
dC5pdGVyYXRvci0+c2Vjb25kID0gdXJpOworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSB1
cmk7CiB9CiAKIGNvbnN0IEF0b21pY1N0cmluZyYgU3R5bGVTaGVldENvbnRlbnRzOjpkZXRlcm1p
bmVOYW1lc3BhY2UoY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgpCkBAIC0yNjMsNyArMjYzLDcg
QEAgY29uc3QgQXRvbWljU3RyaW5nJiBTdHlsZVNoZWV0Q29udGVudHM6OmRldGVybWluZU5hbWVz
cGFjZShjb25zdCBBdG9taWNTdHJpbmcmIHAKICAgICBQcmVmaXhOYW1lc3BhY2VVUklNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbV9uYW1lc3BhY2VzLmZpbmQocHJlZml4KTsKICAgICBpZiAoaXQg
PT0gbV9uYW1lc3BhY2VzLmVuZCgpKQogICAgICAgICByZXR1cm4gbnVsbEF0b207Ci0gICAgcmV0
dXJuIGl0LT5zZWNvbmQ7CisgICAgcmV0dXJuIGl0LT52YWx1ZTsKIH0KIAogdm9pZCBTdHlsZVNo
ZWV0Q29udGVudHM6OnBhcnNlQXV0aG9yU3R5bGVTaGVldChjb25zdCBDYWNoZWRDU1NTdHlsZVNo
ZWV0KiBjYWNoZWRTdHlsZVNoZWV0LCBjb25zdCBTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmln
aW4pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hlY2tlZFJhZGlvQnV0dG9ucy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hlY2tlZFJhZGlvQnV0dG9ucy5jcHAKaW5kZXggNjg5
ODJjZDFhZDMzMzU1ZWNkNDFiOWYxNGViYWJkMGQ2OWY5MzAwMS4uN2RjYWRjZGE5MmY2ODhlN2Nl
ZGZkYjNiOTExYmNjNmNkM2FiODUxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0No
ZWNrZWRSYWRpb0J1dHRvbnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGVja2VkUmFk
aW9CdXR0b25zLmNwcApAQCAtMTg2LDcgKzE4Niw3IEBAIHZvaWQgQ2hlY2tlZFJhZGlvQnV0dG9u
czo6YWRkQnV0dG9uKEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgaWYgKCFtX25hbWVU
b0dyb3VwTWFwKQogICAgICAgICBtX25hbWVUb0dyb3VwTWFwID0gYWRvcHRQdHIobmV3IE5hbWVU
b0dyb3VwTWFwKTsKIAotICAgIE93blB0cjxSYWRpb0J1dHRvbkdyb3VwPiYgZ3JvdXAgPSBtX25h
bWVUb0dyb3VwTWFwLT5hZGQoZWxlbWVudC0+bmFtZSgpLmltcGwoKSwgUGFzc093blB0cjxSYWRp
b0J1dHRvbkdyb3VwPigpKS5pdGVyYXRvci0+c2Vjb25kOworICAgIE93blB0cjxSYWRpb0J1dHRv
bkdyb3VwPiYgZ3JvdXAgPSBtX25hbWVUb0dyb3VwTWFwLT5hZGQoZWxlbWVudC0+bmFtZSgpLmlt
cGwoKSwgUGFzc093blB0cjxSYWRpb0J1dHRvbkdyb3VwPigpKS5pdGVyYXRvci0+dmFsdWU7CiAg
ICAgaWYgKCFncm91cCkKICAgICAgICAgZ3JvdXAgPSBSYWRpb0J1dHRvbkdyb3VwOjpjcmVhdGUo
KTsKICAgICBncm91cC0+YWRkKGVsZW1lbnQpOwpAQCAtMjQ3LDggKzI0Nyw4IEBAIHZvaWQgQ2hl
Y2tlZFJhZGlvQnV0dG9uczo6cmVtb3ZlQnV0dG9uKEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQp
CiAgICAgTmFtZVRvR3JvdXBNYXA6Oml0ZXJhdG9yIGl0ID0gbV9uYW1lVG9Hcm91cE1hcC0+Zmlu
ZChlbGVtZW50LT5uYW1lKCkuaW1wbCgpKTsKICAgICBpZiAoaXQgPT0gbV9uYW1lVG9Hcm91cE1h
cC0+ZW5kKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBpdC0+c2Vjb25kLT5yZW1vdmUoZWxlbWVu
dCk7Ci0gICAgaWYgKGl0LT5zZWNvbmQtPmlzRW1wdHkoKSkgeworICAgIGl0LT52YWx1ZS0+cmVt
b3ZlKGVsZW1lbnQpOworICAgIGlmIChpdC0+dmFsdWUtPmlzRW1wdHkoKSkgewogICAgICAgICAv
LyBGSVhNRTogV2UgbWF5IHNraXAgZGVhbGxvY2F0aW5nIHRoZSBlbXB0eSBSYWRpb0J1dHRvbkdy
b3VwIGZvcgogICAgICAgICAvLyBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudC4gSWYgd2UgZG8gc28s
IHdlIG5lZWQgdG8gY2hhbmdlIHRoZSBrZXkgdHlwZQogICAgICAgICAvLyBvZiBtX25hbWVUb0dy
b3VwTWFwIGZyb20gQXRvbWljU3RyaW5nSW1wbCogdG8gUmVmUHRyPEF0b21pY1N0cmluZ0ltcGw+
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0NoaWxkTGlzdE11dGF0aW9uU2NvcGUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0NoaWxkTGlzdE11dGF0aW9uU2NvcGUuY3BwCmluZGV4
IGY0YTJkYTA0YWI2MTU4MTNmODY0YWUxMzU2ZjRlYWE0ZGIwYmZlNDkuLmFmZDhkZDlmMWIwMDk4
NWM3YTI3YmJiYmRhM2ViZjgwNzc2ZDRjN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9DaGlsZExpc3RNdXRhdGlvblNjb3BlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hp
bGRMaXN0TXV0YXRpb25TY29wZS5jcHAKQEAgLTE5MiwyNyArMTkyLDI3IEBAIHZvaWQgQ2hpbGRM
aXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXI6OmNoaWxkQWRkZWQo
Tm9kZSogdGFyZ2V0CiB7CiAgICAgSGFzaE1hcDxOb2RlKiwgT3duUHRyPENoaWxkTGlzdE11dGF0
aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0b3I+ID46Oml0ZXJhdG9yIGl0ZXIgPSBtX2FjY3Vt
dWxhdGlvbnMuZmluZCh0YXJnZXQpOwogICAgIEFTU0VSVChpdGVyICE9IG1fYWNjdW11bGF0aW9u
cy5lbmQoKSk7Ci0gICAgaWYgKGl0ZXIgPT0gbV9hY2N1bXVsYXRpb25zLmVuZCgpIHx8ICFpdGVy
LT5zZWNvbmQpCisgICAgaWYgKGl0ZXIgPT0gbV9hY2N1bXVsYXRpb25zLmVuZCgpIHx8ICFpdGVy
LT52YWx1ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaXRlci0+c2Vjb25kLT5jaGlsZEFkZGVk
KGNoaWxkKTsKKyAgICBpdGVyLT52YWx1ZS0+Y2hpbGRBZGRlZChjaGlsZCk7CiB9CiAKIHZvaWQg
Q2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXI6OndpbGxS
ZW1vdmVDaGlsZChOb2RlKiB0YXJnZXQsIE5vZGUqIGNoaWxkKQogewogICAgIEhhc2hNYXA8Tm9k
ZSosIE93blB0cjxDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdG9yPiA+
OjppdGVyYXRvciBpdGVyID0gbV9hY2N1bXVsYXRpb25zLmZpbmQodGFyZ2V0KTsKICAgICBBU1NF
UlQoaXRlciAhPSBtX2FjY3VtdWxhdGlvbnMuZW5kKCkpOwotICAgIGlmIChpdGVyID09IG1fYWNj
dW11bGF0aW9ucy5lbmQoKSB8fCAhaXRlci0+c2Vjb25kKQorICAgIGlmIChpdGVyID09IG1fYWNj
dW11bGF0aW9ucy5lbmQoKSB8fCAhaXRlci0+dmFsdWUpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGl0ZXItPnNlY29uZC0+d2lsbFJlbW92ZUNoaWxkKGNoaWxkKTsKKyAgICBpdGVyLT52YWx1ZS0+
d2lsbFJlbW92ZUNoaWxkKGNoaWxkKTsKIH0KIAogdm9pZCBDaGlsZExpc3RNdXRhdGlvblNjb3Bl
OjpNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlcjo6aW5jcmVtZW50U2NvcGluZ0xldmVsKE5vZGUq
IHRhcmdldCkKIHsKICAgICBTY29waW5nTGV2ZWxNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX3Nj
b3BpbmdMZXZlbHMuYWRkKHRhcmdldCwgMSk7CiAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkg
ewotICAgICAgICArKyhyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7CisgICAgICAgICsrKHJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0yMjksOCAr
MjI5LDggQEAgdm9pZCBDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdGlv
blJvdXRlcjo6ZGVjcmVtZW50U2NvcGluZ0xldmVsKE4KICAgICBTY29waW5nTGV2ZWxNYXA6Oml0
ZXJhdG9yIGl0ZXIgPSBtX3Njb3BpbmdMZXZlbHMuZmluZCh0YXJnZXQpOwogICAgIEFTU0VSVChp
dGVyICE9IG1fc2NvcGluZ0xldmVscy5lbmQoKSk7CiAKLSAgICAtLShpdGVyLT5zZWNvbmQpOwot
ICAgIGlmIChpdGVyLT5zZWNvbmQgPiAwKQorICAgIC0tKGl0ZXItPnZhbHVlKTsKKyAgICBpZiAo
aXRlci0+dmFsdWUgPiAwKQogICAgICAgICByZXR1cm47CiAKICAgICBtX3Njb3BpbmdMZXZlbHMu
cmVtb3ZlKGl0ZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggYWI0OGNhMzgyYmIyNTli
NzY5ZmU3YTM1ZmQyYzQzNjU0MTNmN2QxZS4uMzNhMzA1MzQ1NWJkY2FmZTI0OGQwYjBmMmQ5OTNh
NDg4ODJkYzU1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC0yOTU1LDcgKzI5NTUsNyBA
QCBjb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+ID4qIERvY3VtZW50OjpwYWdlR3Jv
dXBVc2VyU2hlZXRzKCkgY29uc3QKIAogICAgIFVzZXJTdHlsZVNoZWV0TWFwOjpjb25zdF9pdGVy
YXRvciBlbmQgPSBzaGVldHNNYXAtPmVuZCgpOwogICAgIGZvciAoVXNlclN0eWxlU2hlZXRNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gc2hlZXRzTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKLSAgICAgICAgY29uc3QgVXNlclN0eWxlU2hlZXRWZWN0b3IqIHNoZWV0cyA9IGl0LT5zZWNv
bmQuZ2V0KCk7CisgICAgICAgIGNvbnN0IFVzZXJTdHlsZVNoZWV0VmVjdG9yKiBzaGVldHMgPSBp
dC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaGVldHMt
PnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBjb25zdCBVc2VyU3R5bGVTaGVldCogc2hlZXQg
PSBzaGVldHMtPmF0KGkpLmdldCgpOwogICAgICAgICAgICAgaWYgKHNoZWV0LT5pbmplY3RlZEZy
YW1lcygpID09IEluamVjdEluVG9wRnJhbWVPbmx5ICYmIG93bmVyRWxlbWVudCgpKQpAQCAtNDg0
NCwxMCArNDg0NCwxMCBAQCBQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBEb2N1bWVudDo6d2lu
ZG93TmFtZWRJdGVtcyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpCiB7CiAgICAgTmFtZWRDb2xs
ZWN0aW9uTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV93aW5kb3dOYW1lZEl0ZW1Db2xsZWN0aW9u
cy5hZGQobmFtZSwgMCk7CiAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgcmV0
dXJuIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZTsKIAogICAgIFJlZlB0cjxIVE1MTmFtZUNvbGxlY3Rpb24+IGNvbGxlY3Rpb24g
PSBIVE1MTmFtZUNvbGxlY3Rpb246OmNyZWF0ZSh0aGlzLCBXaW5kb3dOYW1lZEl0ZW1zLCBuYW1l
KTsKLSAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IGNvbGxlY3Rpb24uZ2V0KCk7CisgICAg
cmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGNvbGxlY3Rpb24uZ2V0KCk7CiAgICAgcmV0dXJuIGNv
bGxlY3Rpb24ucmVsZWFzZSgpOwogfQogCkBAIC00ODU1LDEwICs0ODU1LDEwIEBAIFBhc3NSZWZQ
dHI8SFRNTENvbGxlY3Rpb24+IERvY3VtZW50Ojpkb2N1bWVudE5hbWVkSXRlbXMoY29uc3QgQXRv
bWljU3RyaW5nJiBuYW1lCiB7CiAgICAgTmFtZWRDb2xsZWN0aW9uTWFwOjpBZGRSZXN1bHQgcmVz
dWx0ID0gbV9kb2N1bWVudE5hbWVkSXRlbUNvbGxlY3Rpb25zLmFkZChuYW1lLCAwKTsKICAgICBp
ZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT5z
ZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogCiAgICAgUmVm
UHRyPEhUTUxOYW1lQ29sbGVjdGlvbj4gY29sbGVjdGlvbiA9IEhUTUxOYW1lQ29sbGVjdGlvbjo6
Y3JlYXRlKHRoaXMsIERvY3VtZW50TmFtZWRJdGVtcywgbmFtZSk7Ci0gICAgcmVzdWx0Lml0ZXJh
dG9yLT5zZWNvbmQgPSBjb2xsZWN0aW9uLmdldCgpOworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFs
dWUgPSBjb2xsZWN0aW9uLmdldCgpOwogICAgIHJldHVybiBjb2xsZWN0aW9uLnJlbGVhc2UoKTsK
IH0KIApAQCAtNTE5Niw3ICs1MTk2LDcgQEAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogRG9jdW1l
bnQ6OmdldENTU0NhbnZhc0NvbnRleHQoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdAogCiBIVE1M
Q2FudmFzRWxlbWVudCogRG9jdW1lbnQ6OmdldENTU0NhbnZhc0VsZW1lbnQoY29uc3QgU3RyaW5n
JiBuYW1lKQogewotICAgIFJlZlB0cjxIVE1MQ2FudmFzRWxlbWVudD4mIGVsZW1lbnQgPSBtX2Nz
c0NhbnZhc0VsZW1lbnRzLmFkZChuYW1lLCAwKS5pdGVyYXRvci0+c2Vjb25kOworICAgIFJlZlB0
cjxIVE1MQ2FudmFzRWxlbWVudD4mIGVsZW1lbnQgPSBtX2Nzc0NhbnZhc0VsZW1lbnRzLmFkZChu
YW1lLCAwKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCFlbGVtZW50KQogICAgICAgICBlbGVt
ZW50ID0gSFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZSh0aGlzKTsKICAgICByZXR1cm4gZWxlbWVu
dC5nZXQoKTsKQEAgLTYzNTIsMjMgKzYzNTIsMjMgQEAgUGFzc1JlZlB0cjxFbGVtZW50QXR0cmli
dXRlRGF0YT4gRG9jdW1lbnQ6OmNhY2hlZEltbXV0YWJsZUF0dHJpYnV0ZURhdGEoY29uc3QgRWwK
ICAgICB1bnNpZ25lZCBjYWNoZUhhc2ggPSBjYWNoZUtleS5oYXNoKCk7CiAKICAgICBJbW11dGFi
bGVBdHRyaWJ1dGVEYXRhQ2FjaGU6Oml0ZXJhdG9yIGNhY2hlSXRlcmF0b3IgPSBtX2ltbXV0YWJs
ZUF0dHJpYnV0ZURhdGFDYWNoZS5hZGQoY2FjaGVIYXNoLCBudWxscHRyKS5pdGVyYXRvcjsKLSAg
ICBpZiAoY2FjaGVJdGVyYXRvci0+c2Vjb25kICYmIGNhY2hlSXRlcmF0b3ItPnNlY29uZC0+a2V5
ICE9IGNhY2hlS2V5KQorICAgIGlmIChjYWNoZUl0ZXJhdG9yLT52YWx1ZSAmJiBjYWNoZUl0ZXJh
dG9yLT52YWx1ZS0+a2V5ICE9IGNhY2hlS2V5KQogICAgICAgICBjYWNoZUhhc2ggPSAwOwogCiAg
ICAgUmVmUHRyPEVsZW1lbnRBdHRyaWJ1dGVEYXRhPiBhdHRyaWJ1dGVEYXRhOwotICAgIGlmIChj
YWNoZUhhc2ggJiYgY2FjaGVJdGVyYXRvci0+c2Vjb25kKQotICAgICAgICBhdHRyaWJ1dGVEYXRh
ID0gY2FjaGVJdGVyYXRvci0+c2Vjb25kLT52YWx1ZTsKKyAgICBpZiAoY2FjaGVIYXNoICYmIGNh
Y2hlSXRlcmF0b3ItPnZhbHVlKQorICAgICAgICBhdHRyaWJ1dGVEYXRhID0gY2FjaGVJdGVyYXRv
ci0+dmFsdWUtPnZhbHVlOwogICAgIGVsc2UKICAgICAgICAgYXR0cmlidXRlRGF0YSA9IEVsZW1l
bnRBdHRyaWJ1dGVEYXRhOjpjcmVhdGVJbW11dGFibGUoYXR0cmlidXRlcyk7CiAKLSAgICBpZiAo
IWNhY2hlSGFzaCB8fCBjYWNoZUl0ZXJhdG9yLT5zZWNvbmQpCisgICAgaWYgKCFjYWNoZUhhc2gg
fHwgY2FjaGVJdGVyYXRvci0+dmFsdWUpCiAgICAgICAgIHJldHVybiBhdHRyaWJ1dGVEYXRhLnJl
bGVhc2UoKTsKIAogICAgIE93blB0cjxJbW11dGFibGVBdHRyaWJ1dGVEYXRhQ2FjaGVFbnRyeT4g
bmV3RW50cnkgPSBhZG9wdFB0cihuZXcgSW1tdXRhYmxlQXR0cmlidXRlRGF0YUNhY2hlRW50cnkp
OwogICAgIG5ld0VudHJ5LT5rZXkgPSBJbW11dGFibGVBdHRyaWJ1dGVEYXRhQ2FjaGVLZXkoZWxl
bWVudC0+bG9jYWxOYW1lKCksIGNvbnN0X2Nhc3Q8Y29uc3QgRWxlbWVudEF0dHJpYnV0ZURhdGEq
PihhdHRyaWJ1dGVEYXRhLmdldCgpKS0+YXR0cmlidXRlSXRlbSgwKSwgYXR0cmlidXRlRGF0YS0+
bGVuZ3RoKCkpOwogICAgIG5ld0VudHJ5LT52YWx1ZSA9IGF0dHJpYnV0ZURhdGE7CiAKLSAgICBj
YWNoZUl0ZXJhdG9yLT5zZWNvbmQgPSBuZXdFbnRyeS5yZWxlYXNlKCk7CisgICAgY2FjaGVJdGVy
YXRvci0+dmFsdWUgPSBuZXdFbnRyeS5yZWxlYXNlKCk7CiAKICAgICByZXR1cm4gYXR0cmlidXRl
RGF0YS5yZWxlYXNlKCk7CiB9CkBAIC02MzgwLDggKzYzODAsOCBAQCBMb2NhbGl6ZXImIERvY3Vt
ZW50OjpnZXRMb2NhbGl6ZXIoY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbGUpCiAgICAgICAgIGxv
Y2FsZUtleSA9IGRlZmF1bHRMYW5ndWFnZSgpOwogICAgIExvY2FsZVRvTG9jYWxpemVyTWFwOjpB
ZGRSZXN1bHQgcmVzdWx0ID0gbV9sb2NhbGl6ZXJDYWNoZS5hZGQobG9jYWxlS2V5LCBudWxscHRy
KTsKICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+
c2Vjb25kID0gTG9jYWxpemVyOjpjcmVhdGUobG9jYWxlS2V5KTsKLSAgICByZXR1cm4gKihyZXN1
bHQuaXRlcmF0b3ItPnNlY29uZCk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBM
b2NhbGl6ZXI6OmNyZWF0ZShsb2NhbGVLZXkpOworICAgIHJldHVybiAqKHJlc3VsdC5pdGVyYXRv
ci0+dmFsdWUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwCmluZGV4IGEzZWJjOTM2OTMyNWE0
N2IyZTYyOTI4Njk2MGI0ZDZmZWJjMmYwYWUuLmIyZjAwODk1NGZlN2VhMGU2NzBkYjcxNWI2MzUz
ZDI1M2JhMjk1YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtl
ckNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNv
bnRyb2xsZXIuY3BwCkBAIC0zMTEsNyArMzExLDcgQEAgRG9jdW1lbnRNYXJrZXIqIERvY3VtZW50
TWFya2VyQ29udHJvbGxlcjo6bWFya2VyQ29udGFpbmluZ1BvaW50KGNvbnN0IExheW91dFBvaW4K
ICAgICBNYXJrZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fbWFya2Vycy5lbmQoKTsKICAgICBmb3Ig
KE1hcmtlck1hcDo6aXRlcmF0b3Igbm9kZUl0ZXJhdG9yID0gbV9tYXJrZXJzLmJlZ2luKCk7IG5v
ZGVJdGVyYXRvciAhPSBlbmQ7ICsrbm9kZUl0ZXJhdG9yKSB7CiAgICAgICAgIC8vIGlubmVyIGxv
b3A7IHByb2Nlc3MgZWFjaCBtYXJrZXIgaW4gdGhpcyBub2RlCi0gICAgICAgIE1hcmtlckxpc3Qq
IGxpc3QgPSBub2RlSXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgTWFya2VyTGlzdCogbGlzdCA9
IG5vZGVJdGVyYXRvci0+dmFsdWU7CiAgICAgICAgIHVuc2lnbmVkIG1hcmtlckNvdW50ID0gbGlz
dC0+c2l6ZSgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIG1hcmtlckluZGV4ID0gMDsgbWFya2Vy
SW5kZXggPCBtYXJrZXJDb3VudDsgKyttYXJrZXJJbmRleCkgewogICAgICAgICAgICAgUmVuZGVy
ZWREb2N1bWVudE1hcmtlciYgbWFya2VyID0gbGlzdC0+YXQobWFya2VySW5kZXgpOwpAQCAtMzk5
LDcgKzM5OSw3IEBAIFZlY3RvcjxJbnRSZWN0PiBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJl
bmRlcmVkUmVjdHNGb3JNYXJrZXJzKERvY3VtZW50TWFya2VyCiAgICAgTWFya2VyTWFwOjppdGVy
YXRvciBlbmQgPSBtX21hcmtlcnMuZW5kKCk7CiAgICAgZm9yIChNYXJrZXJNYXA6Oml0ZXJhdG9y
IG5vZGVJdGVyYXRvciA9IG1fbWFya2Vycy5iZWdpbigpOyBub2RlSXRlcmF0b3IgIT0gZW5kOyAr
K25vZGVJdGVyYXRvcikgewogICAgICAgICAvLyBpbm5lciBsb29wOyBwcm9jZXNzIGVhY2ggbWFy
a2VyIGluIHRoaXMgbm9kZQotICAgICAgICBNYXJrZXJMaXN0KiBsaXN0ID0gbm9kZUl0ZXJhdG9y
LT5zZWNvbmQ7CisgICAgICAgIE1hcmtlckxpc3QqIGxpc3QgPSBub2RlSXRlcmF0b3ItPnZhbHVl
OwogICAgICAgICB1bnNpZ25lZCBtYXJrZXJDb3VudCA9IGxpc3QtPnNpemUoKTsKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBtYXJrZXJJbmRleCA9IDA7IG1hcmtlckluZGV4IDwgbWFya2VyQ291bnQ7
ICsrbWFya2VySW5kZXgpIHsKICAgICAgICAgICAgIGNvbnN0IFJlbmRlcmVkRG9jdW1lbnRNYXJr
ZXImIG1hcmtlciA9IGxpc3QtPmF0KG1hcmtlckluZGV4KTsKQEAgLTQyNiw3ICs0MjYsNyBAQCB2
b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVtb3ZlTWFya2VycyhOb2RlKiBub2RlLCBE
b2N1bWVudE1hcmtlcjo6TWFya2VyVAogICAgIAogICAgIE1hcmtlck1hcDo6aXRlcmF0b3IgaXRl
cmF0b3IgPSBtX21hcmtlcnMuZmluZChub2RlKTsKICAgICBpZiAoaXRlcmF0b3IgIT0gbV9tYXJr
ZXJzLmVuZCgpKQotICAgICAgICByZW1vdmVNYXJrZXJzRnJvbUxpc3Qobm9kZSwgaXRlcmF0b3It
PnNlY29uZCwgbWFya2VyVHlwZXMpOworICAgICAgICByZW1vdmVNYXJrZXJzRnJvbUxpc3Qobm9k
ZSwgaXRlcmF0b3ItPnZhbHVlLCBtYXJrZXJUeXBlcyk7CiB9CiAKIHZvaWQgRG9jdW1lbnRNYXJr
ZXJDb250cm9sbGVyOjpyZW1vdmVNYXJrZXJzKERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlcyBt
YXJrZXJUeXBlcykKQEAgLTQzOSw3ICs0MzksNyBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJv
bGxlcjo6cmVtb3ZlTWFya2VycyhEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZXMgbWFya2VyVAog
ICAgIE1hcmtlck1hcCBtYXJrZXJNYXBDb3B5ID0gbV9tYXJrZXJzOwogICAgIE1hcmtlck1hcDo6
aXRlcmF0b3IgZW5kID0gbWFya2VyTWFwQ29weS5lbmQoKTsKICAgICBmb3IgKE1hcmtlck1hcDo6
aXRlcmF0b3IgaSA9IG1hcmtlck1hcENvcHkuYmVnaW4oKTsgaSAhPSBlbmQ7ICsraSkKLSAgICAg
ICAgcmVtb3ZlTWFya2Vyc0Zyb21MaXN0KGktPmZpcnN0LmdldCgpLCBpLT5zZWNvbmQsIG1hcmtl
clR5cGVzKTsKKyAgICAgICAgcmVtb3ZlTWFya2Vyc0Zyb21MaXN0KGktPmtleS5nZXQoKSwgaS0+
dmFsdWUsIG1hcmtlclR5cGVzKTsKICAgICBtX3Bvc3NpYmx5RXhpc3RpbmdNYXJrZXJUeXBlcy5y
ZW1vdmUobWFya2VyVHlwZXMpOwogfQogCkBAIC00OTUsMTAgKzQ5NSwxMCBAQCB2b2lkIERvY3Vt
ZW50TWFya2VyQ29udHJvbGxlcjo6cmVwYWludE1hcmtlcnMoRG9jdW1lbnRNYXJrZXI6Ok1hcmtl
clR5cGVzIG1hcmtlcgogICAgIC8vIG91dGVyIGxvb3A6IHByb2Nlc3MgZWFjaCBtYXJrZXJlZCBu
b2RlIGluIHRoZSBkb2N1bWVudAogICAgIE1hcmtlck1hcDo6aXRlcmF0b3IgZW5kID0gbV9tYXJr
ZXJzLmVuZCgpOwogICAgIGZvciAoTWFya2VyTWFwOjppdGVyYXRvciBpID0gbV9tYXJrZXJzLmJl
Z2luKCk7IGkgIT0gZW5kOyArK2kpIHsKLSAgICAgICAgTm9kZSogbm9kZSA9IGktPmZpcnN0Lmdl
dCgpOworICAgICAgICBOb2RlKiBub2RlID0gaS0+a2V5LmdldCgpOwogCiAgICAgICAgIC8vIGlu
bmVyIGxvb3A6IHByb2Nlc3MgZWFjaCBtYXJrZXIgaW4gdGhlIGN1cnJlbnQgbm9kZQotICAgICAg
ICBNYXJrZXJMaXN0KiBsaXN0ID0gaS0+c2Vjb25kOworICAgICAgICBNYXJrZXJMaXN0KiBsaXN0
ID0gaS0+dmFsdWU7CiAgICAgICAgIGJvb2wgbm9kZU5lZWRzUmVwYWludCA9IGZhbHNlOwogICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSAhPSBsaXN0LT5zaXplKCk7ICsraSkgewogICAgICAg
ICAgICAgRG9jdW1lbnRNYXJrZXIgbWFya2VyID0gbGlzdC0+YXQoaSk7CkBAIC01MjYsNyArNTI2
LDcgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmludmFsaWRhdGVSZW5kZXJlZFJl
Y3RzRm9yTWFya2Vyc0luUmVjdChjb25zdCBMYXkKICAgICBmb3IgKE1hcmtlck1hcDo6aXRlcmF0
b3IgaSA9IG1fbWFya2Vycy5iZWdpbigpOyBpICE9IGVuZDsgKytpKSB7CiAKICAgICAgICAgLy8g
aW5uZXIgbG9vcDogcHJvY2VzcyBlYWNoIHJlY3QgaW4gdGhlIGN1cnJlbnQgbm9kZQotICAgICAg
ICBNYXJrZXJMaXN0KiBsaXN0ID0gaS0+c2Vjb25kOworICAgICAgICBNYXJrZXJMaXN0KiBsaXN0
ID0gaS0+dmFsdWU7CiAgICAgICAgIGZvciAoc2l6ZV90IGxpc3RJbmRleCA9IDA7IGxpc3RJbmRl
eCA8IGxpc3QtPnNpemUoKTsgKytsaXN0SW5kZXgpCiAgICAgICAgICAgICBsaXN0LT5hdChsaXN0
SW5kZXgpLmludmFsaWRhdGUocik7CiAgICAgfQpAQCAtNjc1LDkgKzY3NSw5IEBAIHZvaWQgRG9j
dW1lbnRNYXJrZXJDb250cm9sbGVyOjpzaG93TWFya2VycygpIGNvbnN0CiAgICAgZnByaW50Zihz
dGRlcnIsICIlZCBub2RlcyBoYXZlIG1hcmtlcnM6XG4iLCBtX21hcmtlcnMuc2l6ZSgpKTsKICAg
ICBNYXJrZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fbWFya2Vycy5lbmQoKTsKICAgICBm
b3IgKE1hcmtlck1hcDo6Y29uc3RfaXRlcmF0b3Igbm9kZUl0ZXJhdG9yID0gbV9tYXJrZXJzLmJl
Z2luKCk7IG5vZGVJdGVyYXRvciAhPSBlbmQ7ICsrbm9kZUl0ZXJhdG9yKSB7Ci0gICAgICAgIE5v
ZGUqIG5vZGUgPSBub2RlSXRlcmF0b3ItPmZpcnN0LmdldCgpOworICAgICAgICBOb2RlKiBub2Rl
ID0gbm9kZUl0ZXJhdG9yLT5rZXkuZ2V0KCk7CiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXAi
LCBub2RlKTsKLSAgICAgICAgTWFya2VyTGlzdCogbGlzdCA9IG5vZGVJdGVyYXRvci0+c2Vjb25k
OworICAgICAgICBNYXJrZXJMaXN0KiBsaXN0ID0gbm9kZUl0ZXJhdG9yLT52YWx1ZTsKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBtYXJrZXJJbmRleCA9IDA7IG1hcmtlckluZGV4IDwgbGlzdC0+c2l6
ZSgpOyArK21hcmtlckluZGV4KSB7CiAgICAgICAgICAgICBjb25zdCBEb2N1bWVudE1hcmtlciYg
bWFya2VyID0gbGlzdC0+YXQobWFya2VySW5kZXgpOwogICAgICAgICAgICAgZnByaW50ZihzdGRl
cnIsICIgJWQ6WyVkOiVkXSglZCkiLCBtYXJrZXIudHlwZSgpLCBtYXJrZXIuc3RhcnRPZmZzZXQo
KSwgbWFya2VyLmVuZE9mZnNldCgpLCBtYXJrZXIuYWN0aXZlTWF0Y2goKSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRPcmRlcmVkTWFwLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudE9yZGVyZWRNYXAuY3BwCmluZGV4IDA4MmFhMDc0MGE3MWNjZGY1MGUx
ZDQyZDIzZDMxN2U2M2FmMmY0ZGEuLjEyOTdlNTEwMmZiNGU3OWNlM2RiMTEyMzU3MDIxZTNkZDA1
NTRhNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE9yZGVyZWRNYXAu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE9yZGVyZWRNYXAuY3BwCkBAIC05
OCw3ICs5OCw3IEBAIHZvaWQgRG9jdW1lbnRPcmRlcmVkTWFwOjpyZW1vdmUoQXRvbWljU3RyaW5n
SW1wbCoga2V5LCBFbGVtZW50KiBlbGVtZW50KQogCiAgICAgbV9tYXAuY2hlY2tDb25zaXN0ZW5j
eSgpOwogICAgIE1hcDo6aXRlcmF0b3IgY2FjaGVkSXRlbSA9IG1fbWFwLmZpbmQoa2V5KTsKLSAg
ICBpZiAoY2FjaGVkSXRlbSAhPSBtX21hcC5lbmQoKSAmJiBjYWNoZWRJdGVtLT5zZWNvbmQgPT0g
ZWxlbWVudCkKKyAgICBpZiAoY2FjaGVkSXRlbSAhPSBtX21hcC5lbmQoKSAmJiBjYWNoZWRJdGVt
LT52YWx1ZSA9PSBlbGVtZW50KQogICAgICAgICBtX21hcC5yZW1vdmUoY2FjaGVkSXRlbSk7CiAg
ICAgZWxzZQogICAgICAgICBtX2R1cGxpY2F0ZUNvdW50cy5yZW1vdmUoa2V5KTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50QXR0cmlidXRlRGF0YS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudEF0dHJpYnV0ZURhdGEuY3BwCmluZGV4IDAzZjdiODFmY2Y1YjE2
ODE2ZjMxZWJkM2M1ZmYwZDVhMDJkM2Y3NDEuLjRiZDZiZGJmOTc2ZTFjZmNkOGYyNDY2ZmQyZjY2
ZjM1ZDZjYTY2MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50QXR0cmli
dXRlRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRh
LmNwcApAQCAtMTE0LDcgKzExNCw3IEBAIHN0YXRpYyBBdHRyTGlzdCogZW5zdXJlQXR0ckxpc3RG
b3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgQVNTRVJUKCFhdHRyTGlzdE1hcCgpLmNv
bnRhaW5zKGVsZW1lbnQpKTsKICAgICBlbGVtZW50LT5zZXRIYXNBdHRyTGlzdCgpOwogICAgIEF0
dHJMaXN0TWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gYXR0ckxpc3RNYXAoKS5hZGQoZWxlbWVudCwg
YWRvcHRQdHIobmV3IEF0dHJMaXN0KSk7Ci0gICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+c2Vj
b25kLmdldCgpOworICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpOwogfQog
CiBzdGF0aWMgdm9pZCByZW1vdmVBdHRyTGlzdEZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAKaW5kZXggZTU4MzkwYzVlNGFkOWQ4
ODBlY2VmZGQ1MWQ4ZjBkZDgwODc2MTE5ZS4uODliOWNjNzBiNzgwYzhjODBiYjc0NGQxZDhjMWVm
ZjE3NTgwYzUxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAKQEAgLTEx
MSw3ICsxMTEsNyBAQCBFdmVudFRhcmdldCogRXZlbnRSZWxhdGVkVGFyZ2V0QWRqdXN0ZXI6OmZp
bmRSZWxhdGVkVGFyZ2V0KFRyZWVTY29wZSogc2NvcGUpCiAgICAgICAgIHBhcmVudFRyZWVTY29w
ZXMuYXBwZW5kKHNjb3BlKTsKICAgICAgICAgUmVsYXRlZFRhcmdldE1hcDo6Y29uc3RfaXRlcmF0
b3IgZm91bmQgPSBtX3JlbGF0ZWRUYXJnZXRNYXAuZmluZChzY29wZSk7CiAgICAgICAgIGlmIChm
b3VuZCAhPSBtX3JlbGF0ZWRUYXJnZXRNYXAuZW5kKCkpIHsKLSAgICAgICAgICAgIHJlbGF0ZWRU
YXJnZXQgPSBmb3VuZC0+c2Vjb25kOworICAgICAgICAgICAgcmVsYXRlZFRhcmdldCA9IGZvdW5k
LT52YWx1ZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIHNjb3BlID0g
c2NvcGUtPnBhcmVudFRyZWVTY29wZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L0lkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vSWRUYXJn
ZXRPYnNlcnZlclJlZ2lzdHJ5LmNwcAppbmRleCA1ZmMyNmFjZmVlMzMyZWI3ZDJkNjE5YmE1OTIw
YzczM2Y1YmIwZjcwLi5hYWZhOGEyZDFiNTMwYjdkMGYzZTM2NzA1NThlOGM5NmI5NDhhZmI4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vSWRUYXJnZXRPYnNlcnZlclJlZ2lzdHJ5LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vSWRUYXJnZXRPYnNlcnZlclJlZ2lzdHJ5LmNwcApA
QCAtNDIsOSArNDIsOSBAQCB2b2lkIElkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeTo6YWRkT2JzZXJ2
ZXIoY29uc3QgQXRvbWljU3RyaW5nJiBpZCwgSWRUYXJnZXRPYnNlcgogICAgIAogICAgIElkVG9P
YnNlcnZlclNldE1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fcmVnaXN0cnkuYWRkKGlkLmltcGwo
KSwgbnVsbHB0cik7CiAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXN1bHQu
aXRlcmF0b3ItPnNlY29uZCA9IGFkb3B0UHRyKG5ldyBPYnNlcnZlclNldCgpKTsKKyAgICAgICAg
cmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGFkb3B0UHRyKG5ldyBPYnNlcnZlclNldCgpKTsKIAot
ICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLT5hZGQob2JzZXJ2ZXIpOworICAgIHJlc3VsdC5p
dGVyYXRvci0+dmFsdWUtPmFkZChvYnNlcnZlcik7CiB9CiAKIHZvaWQgSWRUYXJnZXRPYnNlcnZl
clJlZ2lzdHJ5OjpyZW1vdmVPYnNlcnZlcihjb25zdCBBdG9taWNTdHJpbmcmIGlkLCBJZFRhcmdl
dE9ic2VydmVyKiBvYnNlcnZlcikKQEAgLTU0LDcgKzU0LDcgQEAgdm9pZCBJZFRhcmdldE9ic2Vy
dmVyUmVnaXN0cnk6OnJlbW92ZU9ic2VydmVyKGNvbnN0IEF0b21pY1N0cmluZyYgaWQsIElkVGFy
Z2V0T2IKIAogICAgIElkVG9PYnNlcnZlclNldE1hcDo6aXRlcmF0b3IgaXRlciA9IG1fcmVnaXN0
cnkuZmluZChpZC5pbXBsKCkpOwogCi0gICAgT2JzZXJ2ZXJTZXQqIHNldCA9IGl0ZXItPnNlY29u
ZC5nZXQoKTsKKyAgICBPYnNlcnZlclNldCogc2V0ID0gaXRlci0+dmFsdWUuZ2V0KCk7CiAgICAg
c2V0LT5yZW1vdmUob2JzZXJ2ZXIpOwogICAgIGlmIChzZXQtPmlzRW1wdHkoKSAmJiBzZXQgIT0g
bV9ub3RpZnlpbmdPYnNlcnZlcnNJblNldCkKICAgICAgICAgbV9yZWdpc3RyeS5yZW1vdmUoaXRl
cik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25PYnNlcnZlckludGVy
ZXN0R3JvdXAuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uT2JzZXJ2ZXJJbnRlcmVz
dEdyb3VwLmNwcAppbmRleCAyNGMwY2I1ODY1MTdlMDhiYzdhOGI0MDkzZjIxZDMxZTBkYjJkNjRl
Li40ZmFkMjIwODE4NTNjZDgxNTM0ZDMwMGQxNjFkODhiMWFhNWU5NGM4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25PYnNlcnZlckludGVyZXN0R3JvdXAuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cC5jcHAKQEAg
LTYyLDcgKzYyLDcgQEAgTXV0YXRpb25PYnNlcnZlckludGVyZXN0R3JvdXA6Ok11dGF0aW9uT2Jz
ZXJ2ZXJJbnRlcmVzdEdyb3VwKEhhc2hNYXA8TXV0YXRpb25PYnMKIGJvb2wgTXV0YXRpb25PYnNl
cnZlckludGVyZXN0R3JvdXA6OmlzT2xkVmFsdWVSZXF1ZXN0ZWQoKQogewogICAgIGZvciAoSGFz
aE1hcDxNdXRhdGlvbk9ic2VydmVyKiwgTXV0YXRpb25SZWNvcmREZWxpdmVyeU9wdGlvbnM+Ojpp
dGVyYXRvciBpdGVyID0gbV9vYnNlcnZlcnMuYmVnaW4oKTsgaXRlciAhPSBtX29ic2VydmVycy5l
bmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIGlmIChoYXNPbGRWYWx1ZShpdGVyLT5zZWNvbmQpKQor
ICAgICAgICBpZiAoaGFzT2xkVmFsdWUoaXRlci0+dmFsdWUpKQogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKQEAgLTczLDggKzczLDggQEAgdm9pZCBN
dXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cDo6ZW5xdWV1ZU11dGF0aW9uUmVjb3JkKFBhc3NS
ZWZQdHI8TXV0YXRpb25SZWMKICAgICBSZWZQdHI8TXV0YXRpb25SZWNvcmQ+IG11dGF0aW9uID0g
cHJwTXV0YXRpb247CiAgICAgUmVmUHRyPE11dGF0aW9uUmVjb3JkPiBtdXRhdGlvbldpdGhOdWxs
T2xkVmFsdWU7CiAgICAgZm9yIChIYXNoTWFwPE11dGF0aW9uT2JzZXJ2ZXIqLCBNdXRhdGlvblJl
Y29yZERlbGl2ZXJ5T3B0aW9ucz46Oml0ZXJhdG9yIGl0ZXIgPSBtX29ic2VydmVycy5iZWdpbigp
OyBpdGVyICE9IG1fb2JzZXJ2ZXJzLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgTXV0YXRpb25P
YnNlcnZlciogb2JzZXJ2ZXIgPSBpdGVyLT5maXJzdDsKLSAgICAgICAgaWYgKGhhc09sZFZhbHVl
KGl0ZXItPnNlY29uZCkpIHsKKyAgICAgICAgTXV0YXRpb25PYnNlcnZlciogb2JzZXJ2ZXIgPSBp
dGVyLT5rZXk7CisgICAgICAgIGlmIChoYXNPbGRWYWx1ZShpdGVyLT52YWx1ZSkpIHsKICAgICAg
ICAgICAgIG9ic2VydmVyLT5lbnF1ZXVlTXV0YXRpb25SZWNvcmQobXV0YXRpb24pOwogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAppbmRleCBhZWY2NjljNTA2
MTRjNWRkYWQ3NzlkZmRkM2JjNmM5ZWM2M2RlZmI3Li4yYTgyNzc2YzUwZjFhMmMwMzA0N2Q0MmE3
YzhmZTE4NWFjNGFhMDBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCkBAIC0xOTEsNyArMTkxLDcgQEAgdm9p
ZCBOb2RlOjpkdW1wU3RhdGlzdGljcygpCiAgICAgICAgICAgICAgICAgRWxlbWVudCogZWxlbWVu
dCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKTsKICAgICAgICAgICAgICAgICBIYXNoTWFw
PFN0cmluZywgc2l6ZV90Pjo6QWRkUmVzdWx0IHJlc3VsdCA9IHBlclRhZ0NvdW50LmFkZChlbGVt
ZW50LT50YWdOYW1lKCksIDEpOwogICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmlzTmV3RW50
cnkpCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKys7CisgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUrKzsKIAogICAgICAgICAgICAg
ICAgIGlmIChFbGVtZW50QXR0cmlidXRlRGF0YSogYXR0cmlidXRlRGF0YSA9IGVsZW1lbnQtPmF0
dHJpYnV0ZURhdGEoKSkgewogICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzICs9IGF0dHJp
YnV0ZURhdGEtPmxlbmd0aCgpOwpAQCAtMjc5LDcgKzI3OSw3IEBAIHZvaWQgTm9kZTo6ZHVtcFN0
YXRpc3RpY3MoKQogCiAgICAgcHJpbnRmKCJFbGVtZW50IHRhZyBuYW1lIGRpc3RpYnV0aW9uOlxu
Iik7CiAgICAgZm9yIChIYXNoTWFwPFN0cmluZywgc2l6ZV90Pjo6aXRlcmF0b3IgaXQgPSBwZXJU
YWdDb3VudC5iZWdpbigpOyBpdCAhPSBwZXJUYWdDb3VudC5lbmQoKTsgKytpdCkKLSAgICAgICAg
cHJpbnRmKCIgIE51bWJlciBvZiA8JXM+IHRhZ3M6ICV6dVxuIiwgaXQtPmZpcnN0LnV0ZjgoKS5k
YXRhKCksIGl0LT5zZWNvbmQpOworICAgICAgICBwcmludGYoIiAgTnVtYmVyIG9mIDwlcz4gdGFn
czogJXp1XG4iLCBpdC0+a2V5LnV0ZjgoKS5kYXRhKCksIGl0LT52YWx1ZSk7CiAKICAgICBwcmlu
dGYoIkF0dHJpYnV0ZXM6XG4iKTsKICAgICBwcmludGYoIiAgTnVtYmVyIG9mIEF0dHJpYnV0ZXMg
KG5vbi1Ob2RlIGFuZCBOb2RlKTogJXp1IFslenVdXG4iLCBhdHRyaWJ1dGVzLCBzaXplb2YoQXR0
cmlidXRlKSk7CkBAIC01MTIsNyArNTEyLDcgQEAgdm9pZCBOb2RlOjpjbGVhclJhcmVEYXRhKCkK
ICAgICAgICAgTm9kZVJhcmVEYXRhOjpOb2RlUmFyZURhdGFNYXAmIGRhdGFNYXAgPSBOb2RlUmFy
ZURhdGE6OnJhcmVEYXRhTWFwKCk7CiAgICAgICAgIE5vZGVSYXJlRGF0YTo6Tm9kZVJhcmVEYXRh
TWFwOjppdGVyYXRvciBpdCA9IGRhdGFNYXAuZmluZCh0aGlzKTsKICAgICAgICAgQVNTRVJUKGl0
ICE9IGRhdGFNYXAuZW5kKCkpOwotICAgICAgICBkZWxldGUgaXQtPnNlY29uZDsKKyAgICAgICAg
ZGVsZXRlIGl0LT52YWx1ZTsKICAgICAgICAgZGF0YU1hcC5yZW1vdmUoaXQpOwogICAgIH0KICAg
ICBjbGVhckZsYWcoSGFzUmFyZURhdGFGbGFnKTsKQEAgLTIyNzUsMTggKzIyNzUsMTggQEAgdm9p
ZCBOb2RlTGlzdHNOb2RlRGF0YTo6aW52YWxpZGF0ZUNhY2hlcyhjb25zdCBRdWFsaWZpZWROYW1l
KiBhdHRyTmFtZSkKIHsKICAgICBOb2RlTGlzdEF0b21pY05hbWVDYWNoZU1hcDo6Y29uc3RfaXRl
cmF0b3IgYXRvbWljTmFtZUNhY2hlRW5kID0gbV9hdG9taWNOYW1lQ2FjaGVzLmVuZCgpOwogICAg
IGZvciAoTm9kZUxpc3RBdG9taWNOYW1lQ2FjaGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9h
dG9taWNOYW1lQ2FjaGVzLmJlZ2luKCk7IGl0ICE9IGF0b21pY05hbWVDYWNoZUVuZDsgKytpdCkK
LSAgICAgICAgaXQtPnNlY29uZC0+aW52YWxpZGF0ZUNhY2hlKGF0dHJOYW1lKTsKKyAgICAgICAg
aXQtPnZhbHVlLT5pbnZhbGlkYXRlQ2FjaGUoYXR0ck5hbWUpOwogCiAgICAgTm9kZUxpc3ROYW1l
Q2FjaGVNYXA6OmNvbnN0X2l0ZXJhdG9yIG5hbWVDYWNoZUVuZCA9IG1fbmFtZUNhY2hlcy5lbmQo
KTsKICAgICBmb3IgKE5vZGVMaXN0TmFtZUNhY2hlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1f
bmFtZUNhY2hlcy5iZWdpbigpOyBpdCAhPSBuYW1lQ2FjaGVFbmQ7ICsraXQpCi0gICAgICAgIGl0
LT5zZWNvbmQtPmludmFsaWRhdGVDYWNoZShhdHRyTmFtZSk7CisgICAgICAgIGl0LT52YWx1ZS0+
aW52YWxpZGF0ZUNhY2hlKGF0dHJOYW1lKTsKIAogICAgIGlmIChhdHRyTmFtZSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgVGFnTm9kZUxpc3RDYWNoZU5TOjppdGVyYXRvciB0YWdDYWNoZUVuZCA9
IG1fdGFnTm9kZUxpc3RDYWNoZU5TLmVuZCgpOwogICAgIGZvciAoVGFnTm9kZUxpc3RDYWNoZU5T
OjppdGVyYXRvciBpdCA9IG1fdGFnTm9kZUxpc3RDYWNoZU5TLmJlZ2luKCk7IGl0ICE9IHRhZ0Nh
Y2hlRW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5pbnZhbGlkYXRlQ2FjaGUoKTsKKyAg
ICAgICAgaXQtPnZhbHVlLT5pbnZhbGlkYXRlQ2FjaGUoKTsKIH0KIAogdm9pZCBOb2RlOjpnZXRT
dWJyZXNvdXJjZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mIHVybHMpIGNvbnN0CkBAIC0yNDQzLDcg
KzI0NDMsNyBAQCB2b2lkIE5vZGU6OmNvbGxlY3RNYXRjaGluZ09ic2VydmVyc0Zvck11dGF0aW9u
KEhhc2hNYXA8TXV0YXRpb25PYnNlcnZlciosIE11dGF0aQogICAgICAgICAgICAgICAgIE11dGF0
aW9uUmVjb3JkRGVsaXZlcnlPcHRpb25zIGRlbGl2ZXJ5T3B0aW9ucyA9IHJlZ2lzdHJhdGlvbi0+
ZGVsaXZlcnlPcHRpb25zKCk7CiAgICAgICAgICAgICAgICAgSGFzaE1hcDxNdXRhdGlvbk9ic2Vy
dmVyKiwgTXV0YXRpb25SZWNvcmREZWxpdmVyeU9wdGlvbnM+OjpBZGRSZXN1bHQgcmVzdWx0ID0g
b2JzZXJ2ZXJzLmFkZChyZWdpc3RyYXRpb24tPm9ic2VydmVyKCksIGRlbGl2ZXJ5T3B0aW9ucyk7
CiAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgfD0gZGVsaXZlcnlPcHRpb25zOworICAgICAg
ICAgICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlIHw9IGRlbGl2ZXJ5T3B0aW9uczsK
IAogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0yNDU2LDcgKzI0NTYsNyBAQCB2b2lkIE5v
ZGU6OmNvbGxlY3RNYXRjaGluZ09ic2VydmVyc0Zvck11dGF0aW9uKEhhc2hNYXA8TXV0YXRpb25P
YnNlcnZlciosIE11dGF0aQogICAgICAgICAgICAgICAgIE11dGF0aW9uUmVjb3JkRGVsaXZlcnlP
cHRpb25zIGRlbGl2ZXJ5T3B0aW9ucyA9IHJlZ2lzdHJhdGlvbi0+ZGVsaXZlcnlPcHRpb25zKCk7
CiAgICAgICAgICAgICAgICAgSGFzaE1hcDxNdXRhdGlvbk9ic2VydmVyKiwgTXV0YXRpb25SZWNv
cmREZWxpdmVyeU9wdGlvbnM+OjpBZGRSZXN1bHQgcmVzdWx0ID0gb2JzZXJ2ZXJzLmFkZChyZWdp
c3RyYXRpb24tPm9ic2VydmVyKCksIGRlbGl2ZXJ5T3B0aW9ucyk7CiAgICAgICAgICAgICAgICAg
aWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lml0ZXJh
dG9yLT5zZWNvbmQgfD0gZGVsaXZlcnlPcHRpb25zOworICAgICAgICAgICAgICAgICAgICByZXN1
bHQuaXRlcmF0b3ItPnZhbHVlIHw9IGRlbGl2ZXJ5T3B0aW9uczsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURh
dGEuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaAppbmRleCA2NzNhMTEyMzE0
Zjg1MWVjODZmNjU1OThlNGE1NzAyMmUwMTczZWUxLi5lMjk2ZDcxNTA0NGE2NzQyMGY5NDUwZTgy
YjY3MWQ3NWZiMzE5ZGYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVE
YXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGVSYXJlRGF0YS5oCkBAIC02OCwxMCAr
NjgsMTAgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgTm9kZUxpc3RBdG9taWNOYW1lQ2FjaGVN
YXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX2F0b21pY05hbWVDYWNoZXMuYWRkKG5hbWVkTm9kZUxp
c3RLZXkobGlzdFR5cGUsIG5hbWUpLCAwKTsKICAgICAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRy
eSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUKj4ocmVzdWx0Lml0ZXJhdG9yLT5z
ZWNvbmQpOworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQqPihyZXN1bHQuaXRlcmF0
b3ItPnZhbHVlKTsKIAogICAgICAgICBSZWZQdHI8VD4gbGlzdCA9IFQ6OmNyZWF0ZShub2RlLCBu
YW1lKTsKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBsaXN0LmdldCgpOworICAg
ICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gbGlzdC5nZXQoKTsKICAgICAgICAgcmV0dXJu
IGxpc3QucmVsZWFzZSgpOwogICAgIH0KIApAQCAtODAsMTAgKzgwLDEwIEBAIHB1YmxpYzoKICAg
ICB7CiAgICAgICAgIE5vZGVMaXN0TmFtZUNhY2hlTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9u
YW1lQ2FjaGVzLmFkZChuYW1lZE5vZGVMaXN0S2V5KGxpc3RUeXBlLCBuYW1lKSwgMCk7CiAgICAg
ICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8VCo+KHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxUKj4ocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CiAKICAgICAgICAgUmVmUHRyPFQ+
IGxpc3QgPSBUOjpjcmVhdGUobm9kZSwgbmFtZSk7Ci0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+
c2Vjb25kID0gbGlzdC5nZXQoKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGxp
c3QuZ2V0KCk7CiAgICAgICAgIHJldHVybiBsaXN0LnJlbGVhc2UoKTsKICAgICB9CiAKQEAgLTky
LDEwICs5MiwxMCBAQCBwdWJsaWM6CiAgICAgICAgIFF1YWxpZmllZE5hbWUgbmFtZShudWxsQXRv
bSwgbG9jYWxOYW1lLCBuYW1lc3BhY2VVUkkpOwogICAgICAgICBUYWdOb2RlTGlzdENhY2hlTlM6
OkFkZFJlc3VsdCByZXN1bHQgPSBtX3RhZ05vZGVMaXN0Q2FjaGVOUy5hZGQobmFtZSwgMCk7CiAg
ICAgICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0
Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZTsKIAogICAgICAgICBSZWZQdHI8VGFnTm9kZUxpc3Q+IGxpc3QgPSBUYWdOb2RlTGlzdDo6
Y3JlYXRlKG5vZGUsIG5hbWVzcGFjZVVSSSwgbG9jYWxOYW1lKTsKLSAgICAgICAgcmVzdWx0Lml0
ZXJhdG9yLT5zZWNvbmQgPSBsaXN0LmdldCgpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZh
bHVlID0gbGlzdC5nZXQoKTsKICAgICAgICAgcmV0dXJuIGxpc3QucmVsZWFzZSgpOwogICAgIH0K
IApAQCAtMTM2LDIxICsxMzYsMjEgQEAgcHVibGljOgogICAgICAgICBpZiAob2xkRG9jdW1lbnQg
IT0gbmV3RG9jdW1lbnQpIHsKICAgICAgICAgICAgIE5vZGVMaXN0QXRvbWljTmFtZUNhY2hlTWFw
Ojpjb25zdF9pdGVyYXRvciBhdG9taWNOYW1lQ2FjaGVFbmQgPSBtX2F0b21pY05hbWVDYWNoZXMu
ZW5kKCk7CiAgICAgICAgICAgICBmb3IgKE5vZGVMaXN0QXRvbWljTmFtZUNhY2hlTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IG1fYXRvbWljTmFtZUNhY2hlcy5iZWdpbigpOyBpdCAhPSBhdG9taWNO
YW1lQ2FjaGVFbmQ7ICsraXQpIHsKLSAgICAgICAgICAgICAgICBEeW5hbWljU3VidHJlZU5vZGVM
aXN0KiBsaXN0ID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgICAgICBEeW5hbWljU3VidHJlZU5v
ZGVMaXN0KiBsaXN0ID0gaXQtPnZhbHVlOwogICAgICAgICAgICAgICAgIG9sZERvY3VtZW50LT51
bnJlZ2lzdGVyTm9kZUxpc3RDYWNoZShsaXN0KTsKICAgICAgICAgICAgICAgICBuZXdEb2N1bWVu
dC0+cmVnaXN0ZXJOb2RlTGlzdENhY2hlKGxpc3QpOwogICAgICAgICAgICAgfQogCiAgICAgICAg
ICAgICBOb2RlTGlzdE5hbWVDYWNoZU1hcDo6Y29uc3RfaXRlcmF0b3IgbmFtZUNhY2hlRW5kID0g
bV9uYW1lQ2FjaGVzLmVuZCgpOwogICAgICAgICAgICAgZm9yIChOb2RlTGlzdE5hbWVDYWNoZU1h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX25hbWVDYWNoZXMuYmVnaW4oKTsgaXQgIT0gbmFtZUNh
Y2hlRW5kOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAgRHluYW1pY1N1YnRyZWVOb2RlTGlzdCog
bGlzdCA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICAgICAgRHluYW1pY1N1YnRyZWVOb2RlTGlz
dCogbGlzdCA9IGl0LT52YWx1ZTsKICAgICAgICAgICAgICAgICBvbGREb2N1bWVudC0+dW5yZWdp
c3Rlck5vZGVMaXN0Q2FjaGUobGlzdCk7CiAgICAgICAgICAgICAgICAgbmV3RG9jdW1lbnQtPnJl
Z2lzdGVyTm9kZUxpc3RDYWNoZShsaXN0KTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
VGFnTm9kZUxpc3RDYWNoZU5TOjpjb25zdF9pdGVyYXRvciB0YWdFbmQgPSBtX3RhZ05vZGVMaXN0
Q2FjaGVOUy5lbmQoKTsKICAgICAgICAgICAgIGZvciAoVGFnTm9kZUxpc3RDYWNoZU5TOjpjb25z
dF9pdGVyYXRvciBpdCA9IG1fdGFnTm9kZUxpc3RDYWNoZU5TLmJlZ2luKCk7IGl0ICE9IHRhZ0Vu
ZDsgKytpdCkgewotICAgICAgICAgICAgICAgIER5bmFtaWNTdWJ0cmVlTm9kZUxpc3QqIGxpc3Qg
PSBpdC0+c2Vjb25kOworICAgICAgICAgICAgICAgIER5bmFtaWNTdWJ0cmVlTm9kZUxpc3QqIGxp
c3QgPSBpdC0+dmFsdWU7CiAgICAgICAgICAgICAgICAgQVNTRVJUKCFsaXN0LT5pc1Jvb3RlZEF0
RG9jdW1lbnQoKSk7CiAgICAgICAgICAgICAgICAgb2xkRG9jdW1lbnQtPnVucmVnaXN0ZXJOb2Rl
TGlzdENhY2hlKGxpc3QpOwogICAgICAgICAgICAgICAgIG5ld0RvY3VtZW50LT5yZWdpc3Rlck5v
ZGVMaXN0Q2FjaGUobGlzdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUHJvY2Vz
c2luZ0luc3RydWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Qcm9jZXNzaW5nSW5zdHJ1
Y3Rpb24uY3BwCmluZGV4IGVmMTNiNDY5MGFmNzNiYWJlMzQ2ODFiOGM0NmYwNmRiNDAyM2E2ZjMu
LmI2YjQ0NDgwMTZkZmMwNmI0MjdlOTdhMmY3ODdhNjkyODRkNTk2MTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwCkBAIC0xMTcsNyArMTE3LDcgQEAg
dm9pZCBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246OmNoZWNrU3R5bGVTaGVldCgpCiAgICAgICAgIEhh
c2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpID0gYXR0cnMuZmluZCgidHlw
ZSIpOwogICAgICAgICBTdHJpbmcgdHlwZTsKICAgICAgICAgaWYgKGkgIT0gYXR0cnMuZW5kKCkp
Ci0gICAgICAgICAgICB0eXBlID0gaS0+c2Vjb25kOworICAgICAgICAgICAgdHlwZSA9IGktPnZh
bHVlOwogCiAgICAgICAgIG1faXNDU1MgPSB0eXBlLmlzRW1wdHkoKSB8fCB0eXBlID09ICJ0ZXh0
L2NzcyI7CiAjaWYgRU5BQkxFKFhTTFQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
U2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC5jcHAKaW5kZXggOTI0NDVjYTgwZGFmNjMzMjM5ZDJmNzljZWU5OGRkOWRk
NDQxYjMyMy4uNTM1YjU3MGI1ZDdkZTlmNGFmOTM1ODNlN2M3MWQxMmIyZDc1MzVhOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcApAQCAtMTczLDkg
KzE3Myw5IEBAIGJvb2wgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6Y2FuU3VzcGVuZEFjdGl2ZURP
TU9iamVjdHMoKQogICAgIG1faXRlcmF0aW5nQWN0aXZlRE9NT2JqZWN0cyA9IHRydWU7CiAgICAg
SGFzaE1hcDxBY3RpdmVET01PYmplY3QqLCB2b2lkKj46Oml0ZXJhdG9yIGFjdGl2ZU9iamVjdHNF
bmQgPSBtX2FjdGl2ZURPTU9iamVjdHMuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPEFjdGl2ZURP
TU9iamVjdCosIHZvaWQqPjo6aXRlcmF0b3IgaXRlciA9IG1fYWN0aXZlRE9NT2JqZWN0cy5iZWdp
bigpOyBpdGVyICE9IGFjdGl2ZU9iamVjdHNFbmQ7ICsraXRlcikgewotICAgICAgICBBU1NFUlQo
aXRlci0+Zmlyc3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSA9PSB0aGlzKTsKLSAgICAgICAg
QVNTRVJUKGl0ZXItPmZpcnN0LT5zdXNwZW5kSWZOZWVkZWRDYWxsZWQoKSk7Ci0gICAgICAgIGlm
ICghaXRlci0+Zmlyc3QtPmNhblN1c3BlbmQoKSkgeworICAgICAgICBBU1NFUlQoaXRlci0+a2V5
LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgPT0gdGhpcyk7CisgICAgICAgIEFTU0VSVChpdGVy
LT5rZXktPnN1c3BlbmRJZk5lZWRlZENhbGxlZCgpKTsKKyAgICAgICAgaWYgKCFpdGVyLT5rZXkt
PmNhblN1c3BlbmQoKSkgewogICAgICAgICAgICAgbV9pdGVyYXRpbmdBY3RpdmVET01PYmplY3Rz
ID0gZmFsc2U7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KQEAgLTE5MCw5
ICsxOTAsOSBAQCB2b2lkIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnN1c3BlbmRBY3RpdmVET01P
YmplY3RzKEFjdGl2ZURPTU9iamVjdDo6UmVhc29uRm9yUwogICAgIG1faXRlcmF0aW5nQWN0aXZl
RE9NT2JqZWN0cyA9IHRydWU7CiAgICAgSGFzaE1hcDxBY3RpdmVET01PYmplY3QqLCB2b2lkKj46
Oml0ZXJhdG9yIGFjdGl2ZU9iamVjdHNFbmQgPSBtX2FjdGl2ZURPTU9iamVjdHMuZW5kKCk7CiAg
ICAgZm9yIChIYXNoTWFwPEFjdGl2ZURPTU9iamVjdCosIHZvaWQqPjo6aXRlcmF0b3IgaXRlciA9
IG1fYWN0aXZlRE9NT2JqZWN0cy5iZWdpbigpOyBpdGVyICE9IGFjdGl2ZU9iamVjdHNFbmQ7ICsr
aXRlcikgewotICAgICAgICBBU1NFUlQoaXRlci0+Zmlyc3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKSA9PSB0aGlzKTsKLSAgICAgICAgQVNTRVJUKGl0ZXItPmZpcnN0LT5zdXNwZW5kSWZOZWVk
ZWRDYWxsZWQoKSk7Ci0gICAgICAgIGl0ZXItPmZpcnN0LT5zdXNwZW5kKHdoeSk7CisgICAgICAg
IEFTU0VSVChpdGVyLT5rZXktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSA9PSB0aGlzKTsKKyAg
ICAgICAgQVNTRVJUKGl0ZXItPmtleS0+c3VzcGVuZElmTmVlZGVkQ2FsbGVkKCkpOworICAgICAg
ICBpdGVyLT5rZXktPnN1c3BlbmQod2h5KTsKICAgICB9CiAgICAgbV9pdGVyYXRpbmdBY3RpdmVE
T01PYmplY3RzID0gZmFsc2U7CiAgICAgbV9hY3RpdmVET01PYmplY3RzQXJlU3VzcGVuZGVkID0g
dHJ1ZTsKQEAgLTIwNiw5ICsyMDYsOSBAQCB2b2lkIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnJl
c3VtZUFjdGl2ZURPTU9iamVjdHMoKQogICAgIG1faXRlcmF0aW5nQWN0aXZlRE9NT2JqZWN0cyA9
IHRydWU7CiAgICAgSGFzaE1hcDxBY3RpdmVET01PYmplY3QqLCB2b2lkKj46Oml0ZXJhdG9yIGFj
dGl2ZU9iamVjdHNFbmQgPSBtX2FjdGl2ZURPTU9iamVjdHMuZW5kKCk7CiAgICAgZm9yIChIYXNo
TWFwPEFjdGl2ZURPTU9iamVjdCosIHZvaWQqPjo6aXRlcmF0b3IgaXRlciA9IG1fYWN0aXZlRE9N
T2JqZWN0cy5iZWdpbigpOyBpdGVyICE9IGFjdGl2ZU9iamVjdHNFbmQ7ICsraXRlcikgewotICAg
ICAgICBBU1NFUlQoaXRlci0+Zmlyc3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSA9PSB0aGlz
KTsKLSAgICAgICAgQVNTRVJUKGl0ZXItPmZpcnN0LT5zdXNwZW5kSWZOZWVkZWRDYWxsZWQoKSk7
Ci0gICAgICAgIGl0ZXItPmZpcnN0LT5yZXN1bWUoKTsKKyAgICAgICAgQVNTRVJUKGl0ZXItPmtl
eS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpID09IHRoaXMpOworICAgICAgICBBU1NFUlQoaXRl
ci0+a2V5LT5zdXNwZW5kSWZOZWVkZWRDYWxsZWQoKSk7CisgICAgICAgIGl0ZXItPmtleS0+cmVz
dW1lKCk7CiAgICAgfQogICAgIG1faXRlcmF0aW5nQWN0aXZlRE9NT2JqZWN0cyA9IGZhbHNlOwog
fQpAQCAtMjIwLDkgKzIyMCw5IEBAIHZvaWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6c3RvcEFj
dGl2ZURPTU9iamVjdHMoKQogICAgIG1faXRlcmF0aW5nQWN0aXZlRE9NT2JqZWN0cyA9IHRydWU7
CiAgICAgSGFzaE1hcDxBY3RpdmVET01PYmplY3QqLCB2b2lkKj46Oml0ZXJhdG9yIGFjdGl2ZU9i
amVjdHNFbmQgPSBtX2FjdGl2ZURPTU9iamVjdHMuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPEFj
dGl2ZURPTU9iamVjdCosIHZvaWQqPjo6aXRlcmF0b3IgaXRlciA9IG1fYWN0aXZlRE9NT2JqZWN0
cy5iZWdpbigpOyBpdGVyICE9IGFjdGl2ZU9iamVjdHNFbmQ7ICsraXRlcikgewotICAgICAgICBB
U1NFUlQoaXRlci0+Zmlyc3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSA9PSB0aGlzKTsKLSAg
ICAgICAgQVNTRVJUKGl0ZXItPmZpcnN0LT5zdXNwZW5kSWZOZWVkZWRDYWxsZWQoKSk7Ci0gICAg
ICAgIGl0ZXItPmZpcnN0LT5zdG9wKCk7CisgICAgICAgIEFTU0VSVChpdGVyLT5rZXktPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSA9PSB0aGlzKTsKKyAgICAgICAgQVNTRVJUKGl0ZXItPmtleS0+
c3VzcGVuZElmTmVlZGVkQ2FsbGVkKCkpOworICAgICAgICBpdGVyLT5rZXktPnN0b3AoKTsKICAg
ICB9CiAgICAgbV9pdGVyYXRpbmdBY3RpdmVET01PYmplY3RzID0gZmFsc2U7CiAKQEAgLTM4MCw3
ICszODAsNyBAQCB2b2lkIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OmFkanVzdE1pbmltdW1UaW1l
ckludGVydmFsKGRvdWJsZSBvbGRNaW5pbXVtVGltZXJJbgogewogICAgIGlmIChtaW5pbXVtVGlt
ZXJJbnRlcnZhbCgpICE9IG9sZE1pbmltdW1UaW1lckludGVydmFsKSB7CiAgICAgICAgIGZvciAo
VGltZW91dE1hcDo6aXRlcmF0b3IgaXRlciA9IG1fdGltZW91dHMuYmVnaW4oKTsgaXRlciAhPSBt
X3RpbWVvdXRzLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgICAgIERPTVRpbWVyKiB0aW1lciA9
IGl0ZXItPnNlY29uZDsKKyAgICAgICAgICAgIERPTVRpbWVyKiB0aW1lciA9IGl0ZXItPnZhbHVl
OwogICAgICAgICAgICAgdGltZXItPmFkanVzdE1pbmltdW1UaW1lckludGVydmFsKG9sZE1pbmlt
dW1UaW1lckludGVydmFsKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9TZWxlY3RvclF1ZXJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TZWxlY3Rv
clF1ZXJ5LmNwcAppbmRleCA3ODYyYWVmY2MzYWJhOGU0YjkyYzg0MzMyYjc0YTk2MDNjYWU3MjI1
Li5lY2I1YTE2MGZiMjZmYWM0YTdkMjcxODFhMGMyNDRlYmQwNGNlNDUzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vU2VsZWN0b3JRdWVyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL1NlbGVjdG9yUXVlcnkuY3BwCkBAIC0xNjksNyArMTY5LDcgQEAgU2VsZWN0b3JRdWVyeSog
U2VsZWN0b3JRdWVyeUNhY2hlOjphZGQoY29uc3QgQXRvbWljU3RyaW5nJiBzZWxlY3RvcnMsIERv
Y3VtZW50KgogewogICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBPd25QdHI8U2VsZWN0b3JRdWVy
eT4gPjo6aXRlcmF0b3IgaXQgPSBtX2VudHJpZXMuZmluZChzZWxlY3RvcnMpOwogICAgIGlmIChp
dCAhPSBtX2VudHJpZXMuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdC0+c2Vjb25kLmdldCgpOwor
ICAgICAgICByZXR1cm4gaXQtPnZhbHVlLmdldCgpOwogCiAgICAgQ1NTUGFyc2VyIHBhcnNlcihk
b2N1bWVudCk7CiAgICAgQ1NTU2VsZWN0b3JMaXN0IHNlbGVjdG9yTGlzdDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9TcGFjZVNwbGl0U3RyaW5nLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9TcGFjZVNwbGl0U3RyaW5nLmNwcAppbmRleCBjMzAxZjY5ZWRiMzY1MGE5NDcyNjQxZjZj
MTgyZGVhNWJmZDhjMTY1Li45OTViZGI3ZWQzNWFmYTZmZjQxNzZiZjk1NGQ3OGIyYmJkZTczYTNj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU3BhY2VTcGxpdFN0cmluZy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL1NwYWNlU3BsaXRTdHJpbmcuY3BwCkBAIC0xNjksNyArMTY5
LDcgQEAgU3BhY2VTcGxpdFN0cmluZ0RhdGE6On5TcGFjZVNwbGl0U3RyaW5nRGF0YSgpCiAKIFBh
c3NSZWZQdHI8U3BhY2VTcGxpdFN0cmluZ0RhdGE+IFNwYWNlU3BsaXRTdHJpbmdEYXRhOjpjcmVh
dGUoY29uc3QgQXRvbWljU3RyaW5nJiBzdHJpbmcpCiB7Ci0gICAgU3BhY2VTcGxpdFN0cmluZ0Rh
dGEqJiBkYXRhID0gc2hhcmVkRGF0YU1hcCgpLmFkZChzdHJpbmcsIDApLml0ZXJhdG9yLT5zZWNv
bmQ7CisgICAgU3BhY2VTcGxpdFN0cmluZ0RhdGEqJiBkYXRhID0gc2hhcmVkRGF0YU1hcCgpLmFk
ZChzdHJpbmcsIDApLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoIWRhdGEpIHsKICAgICAgICAg
ZGF0YSA9IG5ldyBTcGFjZVNwbGl0U3RyaW5nRGF0YShzdHJpbmcpOwogICAgICAgICByZXR1cm4g
YWRvcHRSZWYoZGF0YSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVkRWxl
bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5jcHAKaW5kZXggZWZm
OWE5ZTcwZDc2NDNkODFlMThmYjEzN2IxYzY5ZjQwMTAzYjEwZi4uZDRjNWU5NGI5Mjk1YmFkMzYx
ZGQxNTlhNWFhMGE0YjdjMGY0YmJlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1N0
eWxlZEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNw
cApAQCAtMjgwLDE0ICsyODAsMTQgQEAgdm9pZCBTdHlsZWRFbGVtZW50Ojp1cGRhdGVBdHRyaWJ1
dGVTdHlsZSgpCiAgICAgUHJlc2VudGF0aW9uQXR0cmlidXRlQ2FjaGU6Oml0ZXJhdG9yIGNhY2hl
SXRlcmF0b3I7CiAgICAgaWYgKGNhY2hlSGFzaCkgewogICAgICAgICBjYWNoZUl0ZXJhdG9yID0g
cHJlc2VudGF0aW9uQXR0cmlidXRlQ2FjaGUoKS5hZGQoY2FjaGVIYXNoLCBudWxscHRyKS5pdGVy
YXRvcjsKLSAgICAgICAgaWYgKGNhY2hlSXRlcmF0b3ItPnNlY29uZCAmJiBjYWNoZUl0ZXJhdG9y
LT5zZWNvbmQtPmtleSAhPSBjYWNoZUtleSkKKyAgICAgICAgaWYgKGNhY2hlSXRlcmF0b3ItPnZh
bHVlICYmIGNhY2hlSXRlcmF0b3ItPnZhbHVlLT5rZXkgIT0gY2FjaGVLZXkpCiAgICAgICAgICAg
ICBjYWNoZUhhc2ggPSAwOwogICAgIH0gZWxzZQogICAgICAgICBjYWNoZUl0ZXJhdG9yID0gcHJl
c2VudGF0aW9uQXR0cmlidXRlQ2FjaGUoKS5lbmQoKTsKIAogICAgIFJlZlB0cjxTdHlsZVByb3Bl
cnR5U2V0PiBzdHlsZTsKLSAgICBpZiAoY2FjaGVIYXNoICYmIGNhY2hlSXRlcmF0b3ItPnNlY29u
ZCkgewotICAgICAgICBzdHlsZSA9IGNhY2hlSXRlcmF0b3ItPnNlY29uZC0+dmFsdWU7CisgICAg
aWYgKGNhY2hlSGFzaCAmJiBjYWNoZUl0ZXJhdG9yLT52YWx1ZSkgeworICAgICAgICBzdHlsZSA9
IGNhY2hlSXRlcmF0b3ItPnZhbHVlLT52YWx1ZTsKICAgICAgICAgcHJlc2VudGF0aW9uQXR0cmli
dXRlQ2FjaGVDbGVhbmVyKCkuZGlkSGl0UHJlc2VudGF0aW9uQXR0cmlidXRlQ2FjaGUoKTsKICAg
ICB9IGVsc2UgewogICAgICAgICBzdHlsZSA9IFN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZShpc1NW
R0VsZW1lbnQoKSA/IFNWR0F0dHJpYnV0ZU1vZGUgOiBDU1NRdWlya3NNb2RlKTsKQEAgLTMwMSw3
ICszMDEsNyBAQCB2b2lkIFN0eWxlZEVsZW1lbnQ6OnVwZGF0ZUF0dHJpYnV0ZVN0eWxlKCkKIAog
ICAgIGF0dHJpYnV0ZURhdGEoKS0+c2V0QXR0cmlidXRlU3R5bGUoc3R5bGUtPmlzRW1wdHkoKSA/
IDAgOiBzdHlsZSk7CiAKLSAgICBpZiAoIWNhY2hlSGFzaCB8fCBjYWNoZUl0ZXJhdG9yLT5zZWNv
bmQpCisgICAgaWYgKCFjYWNoZUhhc2ggfHwgY2FjaGVJdGVyYXRvci0+dmFsdWUpCiAgICAgICAg
IHJldHVybjsKIAogICAgIE93blB0cjxQcmVzZW50YXRpb25BdHRyaWJ1dGVDYWNoZUVudHJ5PiBu
ZXdFbnRyeSA9IGFkb3B0UHRyKG5ldyBQcmVzZW50YXRpb25BdHRyaWJ1dGVDYWNoZUVudHJ5KTsK
QEAgLTMxNCw3ICszMTQsNyBAQCB2b2lkIFN0eWxlZEVsZW1lbnQ6OnVwZGF0ZUF0dHJpYnV0ZVN0
eWxlKCkKICAgICAgICAgcHJlc2VudGF0aW9uQXR0cmlidXRlQ2FjaGUoKS5jbGVhcigpOwogICAg
ICAgICBwcmVzZW50YXRpb25BdHRyaWJ1dGVDYWNoZSgpLnNldChjYWNoZUhhc2gsIG5ld0VudHJ5
LnJlbGVhc2UoKSk7CiAgICAgfSBlbHNlCi0gICAgICAgIGNhY2hlSXRlcmF0b3ItPnNlY29uZCA9
IG5ld0VudHJ5LnJlbGVhc2UoKTsKKyAgICAgICAgY2FjaGVJdGVyYXRvci0+dmFsdWUgPSBuZXdF
bnRyeS5yZWxlYXNlKCk7CiB9CiAKIHZvaWQgU3R5bGVkRWxlbWVudDo6YWRkUHJvcGVydHlUb0F0
dHJpYnV0ZVN0eWxlKFN0eWxlUHJvcGVydHlTZXQqIHN0eWxlLCBDU1NQcm9wZXJ0eUlEIHByb3Bl
cnR5SUQsIGludCBpZGVudGlmaWVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9tYWMvQWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyLm1tIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9tYWMvQWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyLm1tCmluZGV4IDk5OTE2YzFlMDBm
NDQ5MjJhYTdlYmM2Y2ZiMDBmYzQ5NzY4ZDQ0M2IuLjZjYTVkNWYwMjljOTkxNjkzM2I4Mjg5ZDE0
NWYwZDEyMWM2ZDU2NDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0Fs
dGVybmF0aXZlVGV4dFVJQ29udHJvbGxlci5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L21hYy9BbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xsZXIubW0KQEAgLTUwLDcgKzUwLDcgQEAgTlNU
ZXh0QWx0ZXJuYXRpdmVzKiBBbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xsZXI6OkFsZXJuYXRpdmVU
ZXh0Q29udGV4dENvbnRyb2xsZXIKICAgICBIYXNoTWFwVHlwZTo6Y29uc3RfaXRlcmF0b3IgaXRy
ID0gbV9hbHRlcm5hdGl2ZXNPYmplY3RNYXAuZmluZChjb250ZXh0KTsKICAgICBpZiAoaXRyID09
IG1fYWx0ZXJuYXRpdmVzT2JqZWN0TWFwLmVuZCgpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAg
ICByZXR1cm4gaXRyLT5zZWNvbmQuZ2V0KCk7CisgICAgcmV0dXJuIGl0ci0+dmFsdWUuZ2V0KCk7
CiB9CiAKIHZvaWQgQWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyOjpBbGVybmF0aXZlVGV4dENv
bnRleHRDb250cm9sbGVyOjpyZW1vdmVBbHRlcm5hdGl2ZXNGb3JDb250ZXh0KHVpbnQ2NF90IGNv
bnRleHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0Zvcm1Db250cm9sbGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUNvbnRyb2xsZXIuY3BwCmluZGV4IGZiZmU3Yjcx
NDRlMzFmZTllNjY3MGViZDExNmFlY2NhYzM2ZTE2ZTcuLjdmODdiOTdmZmM4N2QzMzc2Zjk4M2Iz
NjM5MmY4NzVlMDc3OTU2Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUNv
bnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUNvbnRyb2xsZXIuY3Bw
CkBAIC0yMjgsOCArMjI4LDggQEAgdm9pZCBTYXZlZEZvcm1TdGF0ZTo6c2VyaWFsaXplVG8oVmVj
dG9yPFN0cmluZz4mIHN0YXRlVmVjdG9yKSBjb25zdAogewogICAgIHN0YXRlVmVjdG9yLmFwcGVu
ZChTdHJpbmc6Om51bWJlcihtX2NvbnRyb2xTdGF0ZUNvdW50KSk7CiAgICAgZm9yIChGb3JtRWxl
bWVudFN0YXRlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fc3RhdGVGb3JOZXdGb3JtRWxlbWVu
dHMuYmVnaW4oKTsgaXQgIT0gbV9zdGF0ZUZvck5ld0Zvcm1FbGVtZW50cy5lbmQoKTsgKytpdCkg
ewotICAgICAgICBjb25zdCBGb3JtRWxlbWVudEtleSYga2V5ID0gaXQtPmZpcnN0OwotICAgICAg
ICBjb25zdCBEZXF1ZTxGb3JtQ29udHJvbFN0YXRlPiYgcXVldWUgPSBpdC0+c2Vjb25kOworICAg
ICAgICBjb25zdCBGb3JtRWxlbWVudEtleSYga2V5ID0gaXQtPmtleTsKKyAgICAgICAgY29uc3Qg
RGVxdWU8Rm9ybUNvbnRyb2xTdGF0ZT4mIHF1ZXVlID0gaXQtPnZhbHVlOwogICAgICAgICBmb3Ig
KERlcXVlPEZvcm1Db250cm9sU3RhdGU+Ojpjb25zdF9pdGVyYXRvciBxdWVJdGVyYXRvciA9IHF1
ZXVlLmJlZ2luKCk7IHF1ZUl0ZXJhdG9yICE9IHF1ZXVlLmVuZCgpOyArK3F1ZUl0ZXJhdG9yKSB7
CiAgICAgICAgICAgICBzdGF0ZVZlY3Rvci5hcHBlbmQoa2V5Lm5hbWUoKSk7CiAgICAgICAgICAg
ICBzdGF0ZVZlY3Rvci5hcHBlbmQoa2V5LnR5cGUoKSk7CkBAIC0yNDMsNyArMjQzLDcgQEAgdm9p
ZCBTYXZlZEZvcm1TdGF0ZTo6YXBwZW5kQ29udHJvbFN0YXRlKGNvbnN0IEF0b21pY1N0cmluZyYg
bmFtZSwgY29uc3QgQXRvbWljU3QKICAgICBGb3JtRWxlbWVudEtleSBrZXkobmFtZS5pbXBsKCks
IHR5cGUuaW1wbCgpKTsKICAgICBGb3JtRWxlbWVudFN0YXRlTWFwOjppdGVyYXRvciBpdCA9IG1f
c3RhdGVGb3JOZXdGb3JtRWxlbWVudHMuZmluZChrZXkpOwogICAgIGlmIChpdCAhPSBtX3N0YXRl
Rm9yTmV3Rm9ybUVsZW1lbnRzLmVuZCgpKQotICAgICAgICBpdC0+c2Vjb25kLmFwcGVuZChzdGF0
ZSk7CisgICAgICAgIGl0LT52YWx1ZS5hcHBlbmQoc3RhdGUpOwogICAgIGVsc2UgewogICAgICAg
ICBEZXF1ZTxGb3JtQ29udHJvbFN0YXRlPiBzdGF0ZUxpc3Q7CiAgICAgICAgIHN0YXRlTGlzdC5h
cHBlbmQoc3RhdGUpOwpAQCAtMjU5LDEwICsyNTksMTAgQEAgRm9ybUNvbnRyb2xTdGF0ZSBTYXZl
ZEZvcm1TdGF0ZTo6dGFrZUNvbnRyb2xTdGF0ZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGNv
bnMKICAgICBGb3JtRWxlbWVudFN0YXRlTWFwOjppdGVyYXRvciBpdCA9IG1fc3RhdGVGb3JOZXdG
b3JtRWxlbWVudHMuZmluZChGb3JtRWxlbWVudEtleShuYW1lLmltcGwoKSwgdHlwZS5pbXBsKCkp
KTsKICAgICBpZiAoaXQgPT0gbV9zdGF0ZUZvck5ld0Zvcm1FbGVtZW50cy5lbmQoKSkKICAgICAg
ICAgcmV0dXJuIEZvcm1Db250cm9sU3RhdGUoKTsKLSAgICBBU1NFUlQoaXQtPnNlY29uZC5zaXpl
KCkpOwotICAgIEZvcm1Db250cm9sU3RhdGUgc3RhdGUgPSBpdC0+c2Vjb25kLnRha2VGaXJzdCgp
OworICAgIEFTU0VSVChpdC0+dmFsdWUuc2l6ZSgpKTsKKyAgICBGb3JtQ29udHJvbFN0YXRlIHN0
YXRlID0gaXQtPnZhbHVlLnRha2VGaXJzdCgpOwogICAgIG1fY29udHJvbFN0YXRlQ291bnQtLTsK
LSAgICBpZiAoIWl0LT5zZWNvbmQuc2l6ZSgpKQorICAgIGlmICghaXQtPnZhbHVlLnNpemUoKSkK
ICAgICAgICAgbV9zdGF0ZUZvck5ld0Zvcm1FbGVtZW50cy5yZW1vdmUoaXQpOwogICAgIHJldHVy
biBzdGF0ZTsKIH0KQEAgLTI3MSwxMCArMjcxLDEwIEBAIFZlY3RvcjxTdHJpbmc+IFNhdmVkRm9y
bVN0YXRlOjpnZXRSZWZlcmVuY2VkRmlsZVBhdGhzKCkgY29uc3QKIHsKICAgICBWZWN0b3I8U3Ry
aW5nPiB0b1JldHVybjsKICAgICBmb3IgKEZvcm1FbGVtZW50U3RhdGVNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV9zdGF0ZUZvck5ld0Zvcm1FbGVtZW50cy5iZWdpbigpOyBpdCAhPSBtX3N0YXRl
Rm9yTmV3Rm9ybUVsZW1lbnRzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IEZvcm1FbGVt
ZW50S2V5JiBrZXkgPSBpdC0+Zmlyc3Q7CisgICAgICAgIGNvbnN0IEZvcm1FbGVtZW50S2V5JiBr
ZXkgPSBpdC0+a2V5OwogICAgICAgICBpZiAoQXRvbWljU3RyaW5nKGtleS50eXBlKCkpICE9IEF0
b21pY1N0cmluZygiZmlsZSIpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGNvbnN0
IERlcXVlPEZvcm1Db250cm9sU3RhdGU+JiBxdWV1ZSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIGNv
bnN0IERlcXVlPEZvcm1Db250cm9sU3RhdGU+JiBxdWV1ZSA9IGl0LT52YWx1ZTsKICAgICAgICAg
Zm9yIChEZXF1ZTxGb3JtQ29udHJvbFN0YXRlPjo6Y29uc3RfaXRlcmF0b3IgcXVlSXRlcmF0b3Ig
PSBxdWV1ZS5iZWdpbigpOyBxdWVJdGVyYXRvciAhPSBxdWV1ZS5lbmQoKTsgKytxdWVJdGVyYXRv
cikgewogICAgICAgICAgICAgY29uc3QgVmVjdG9yPEZpbGVDaG9vc2VyRmlsZUluZm8+JiBzZWxl
Y3RlZEZpbGVzID0gSFRNTElucHV0RWxlbWVudDo6ZmlsZXNGcm9tRmlsZUlucHV0Rm9ybUNvbnRy
b2xTdGF0ZSgqcXVlSXRlcmF0b3IpOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzZWxlY3RlZEZpbGVzLnNpemUoKTsgKytpKQpAQCAtMzQ5LDEyICszNDksMTIgQEAgQXRvbWlj
U3RyaW5nIEZvcm1LZXlHZW5lcmF0b3I6OmZvcm1LZXkoY29uc3QgSFRNTEZvcm1Db250cm9sRWxl
bWVudFdpdGhTdGF0ZSYgY28KICAgICB9CiAgICAgRm9ybVRvS2V5TWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fZm9ybVRvS2V5TWFwLmZpbmQoZm9ybSk7CiAgICAgaWYgKGl0ICE9IG1fZm9ybVRv
S2V5TWFwLmVuZCgpKQotICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJu
IGl0LT52YWx1ZTsKIAogICAgIFN0cmluZyBzaWduYXR1cmUgPSBmb3JtU2lnbmF0dXJlKCpmb3Jt
KTsKICAgICBBU1NFUlQoIXNpZ25hdHVyZS5pc051bGwoKSk7CiAgICAgRm9ybVNpZ25hdHVyZVRv
TmV4dEluZGV4TWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9mb3JtU2lnbmF0dXJlVG9OZXh0SW5k
ZXhNYXAuYWRkKHNpZ25hdHVyZSwgMCk7Ci0gICAgdW5zaWduZWQgbmV4dEluZGV4ID0gcmVzdWx0
Lml0ZXJhdG9yLT5zZWNvbmQrKzsKKyAgICB1bnNpZ25lZCBuZXh0SW5kZXggPSByZXN1bHQuaXRl
cmF0b3ItPnZhbHVlKys7CiAKICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CiAgICAgYnVpbGRl
ci5hcHBlbmQoc2lnbmF0dXJlKTsKQEAgLTQwNSw4ICs0MDUsOCBAQCBQYXNzT3duUHRyPEZvcm1D
b250cm9sbGVyOjpTYXZlZEZvcm1TdGF0ZU1hcD4gRm9ybUNvbnRyb2xsZXI6OmNyZWF0ZVNhdmVk
Rm9ybVN0YQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIFNhdmVkRm9ybVN0YXRlTWFw
OjpBZGRSZXN1bHQgcmVzdWx0ID0gc3RhdGVNYXAtPmFkZChrZXlHZW5lcmF0b3ItPmZvcm1LZXko
KmNvbnRyb2wpLmltcGwoKSwgbnVsbHB0cik7CiAgICAgICAgIGlmIChyZXN1bHQuaXNOZXdFbnRy
eSkKLSAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gU2F2ZWRGb3JtU3RhdGU6
OmNyZWF0ZSgpOwotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZC0+YXBwZW5kQ29udHJv
bFN0YXRlKGNvbnRyb2wtPm5hbWUoKSwgY29udHJvbC0+dHlwZSgpLCBjb250cm9sLT5zYXZlRm9y
bUNvbnRyb2xTdGF0ZSgpKTsKKyAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBT
YXZlZEZvcm1TdGF0ZTo6Y3JlYXRlKCk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUt
PmFwcGVuZENvbnRyb2xTdGF0ZShjb250cm9sLT5uYW1lKCksIGNvbnRyb2wtPnR5cGUoKSwgY29u
dHJvbC0+c2F2ZUZvcm1Db250cm9sU3RhdGUoKSk7CiAgICAgfQogICAgIHJldHVybiBzdGF0ZU1h
cC5yZWxlYXNlKCk7CiB9CkBAIC00MTgsOCArNDE4LDggQEAgVmVjdG9yPFN0cmluZz4gRm9ybUNv
bnRyb2xsZXI6OmZvcm1FbGVtZW50c1N0YXRlKCkgY29uc3QKICAgICBzdGF0ZVZlY3Rvci5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KG1fZm9ybUVsZW1lbnRzV2l0aFN0YXRlLnNpemUoKSAqIDQpOwog
ICAgIHN0YXRlVmVjdG9yLmFwcGVuZChmb3JtU3RhdGVTaWduYXR1cmUoKSk7CiAgICAgZm9yIChT
YXZlZEZvcm1TdGF0ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBzdGF0ZU1hcC0+YmVnaW4oKTsg
aXQgIT0gc3RhdGVNYXAtPmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIHN0YXRlVmVjdG9yLmFwcGVu
ZChpdC0+Zmlyc3QuZ2V0KCkpOwotICAgICAgICBpdC0+c2Vjb25kLT5zZXJpYWxpemVUbyhzdGF0
ZVZlY3Rvcik7CisgICAgICAgIHN0YXRlVmVjdG9yLmFwcGVuZChpdC0+a2V5LmdldCgpKTsKKyAg
ICAgICAgaXQtPnZhbHVlLT5zZXJpYWxpemVUbyhzdGF0ZVZlY3Rvcik7CiAgICAgfQogICAgIGJv
b2wgaGFzT25seVNpZ25hdHVyZSA9IHN0YXRlVmVjdG9yLnNpemUoKSA9PSAxOwogICAgIGlmICho
YXNPbmx5U2lnbmF0dXJlKQpAQCAtNDQxLDggKzQ0MSw4IEBAIEZvcm1Db250cm9sU3RhdGUgRm9y
bUNvbnRyb2xsZXI6OnRha2VTdGF0ZUZvckZvcm1FbGVtZW50KGNvbnN0IEhUTUxGb3JtQ29udHJv
bEVsCiAgICAgU2F2ZWRGb3JtU3RhdGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zYXZlZEZvcm1TdGF0
ZU1hcC5maW5kKG1fZm9ybUtleUdlbmVyYXRvci0+Zm9ybUtleShjb250cm9sKS5pbXBsKCkpOwog
ICAgIGlmIChpdCA9PSBtX3NhdmVkRm9ybVN0YXRlTWFwLmVuZCgpKQogICAgICAgICByZXR1cm4g
Rm9ybUNvbnRyb2xTdGF0ZSgpOwotICAgIEZvcm1Db250cm9sU3RhdGUgc3RhdGUgPSBpdC0+c2Vj
b25kLT50YWtlQ29udHJvbFN0YXRlKGNvbnRyb2wubmFtZSgpLCBjb250cm9sLnR5cGUoKSk7Ci0g
ICAgaWYgKGl0LT5zZWNvbmQtPmlzRW1wdHkoKSkKKyAgICBGb3JtQ29udHJvbFN0YXRlIHN0YXRl
ID0gaXQtPnZhbHVlLT50YWtlQ29udHJvbFN0YXRlKGNvbnRyb2wubmFtZSgpLCBjb250cm9sLnR5
cGUoKSk7CisgICAgaWYgKGl0LT52YWx1ZS0+aXNFbXB0eSgpKQogICAgICAgICBtX3NhdmVkRm9y
bVN0YXRlTWFwLnJlbW92ZShpdCk7CiAgICAgcmV0dXJuIHN0YXRlOwogfQpAQCAtNTExLDcgKzUx
MSw3IEBAIFZlY3RvcjxTdHJpbmc+IEZvcm1Db250cm9sbGVyOjpnZXRSZWZlcmVuY2VkRmlsZVBh
dGhzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBzdGF0CiAgICAgU2F2ZWRGb3JtU3RhdGVNYXAgbWFw
OwogICAgIGZvcm1TdGF0ZXNGcm9tU3RhdGVWZWN0b3Ioc3RhdGVWZWN0b3IsIG1hcCk7CiAgICAg
Zm9yIChTYXZlZEZvcm1TdGF0ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAuYmVnaW4oKTsg
aXQgIT0gbWFwLmVuZCgpOyArK2l0KQotICAgICAgICB0b1JldHVybi5hcHBlbmQoaXQtPnNlY29u
ZC0+Z2V0UmVmZXJlbmNlZEZpbGVQYXRocygpKTsKKyAgICAgICAgdG9SZXR1cm4uYXBwZW5kKGl0
LT52YWx1ZS0+Z2V0UmVmZXJlbmNlZEZpbGVQYXRocygpKTsKICAgICByZXR1cm4gdG9SZXR1cm47
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENvbGxlY3Rpb24uY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5jcHAKaW5kZXggOTFlMThhM2Zi
ZGYyZDg3YTZlMDc5NGU3Y2IyYjcxYjY0ZjhhYjljNS4uMWVjYjY0NGNhMWI2MzA4MDdhZDY2YTk3
NDRlM2RmMzMxNGZlYWY0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29s
bGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5jcHAK
QEAgLTU1OSw3ICs1NTksNyBAQCBQYXNzUmVmUHRyPE5vZGVMaXN0PiBIVE1MQ29sbGVjdGlvbjo6
dGFncyhjb25zdCBTdHJpbmcmIG5hbWUpCiAKIHZvaWQgSFRNTENvbGxlY3Rpb25DYWNoZUJhc2U6
OmFwcGVuZChOb2RlQ2FjaGVNYXAmIG1hcCwgY29uc3QgQXRvbWljU3RyaW5nJiBrZXksIEVsZW1l
bnQqIGVsZW1lbnQpCiB7Ci0gICAgT3duUHRyPFZlY3RvcjxFbGVtZW50Kj4gPiYgdmVjdG9yID0g
bWFwLmFkZChrZXkuaW1wbCgpLCBudWxscHRyKS5pdGVyYXRvci0+c2Vjb25kOworICAgIE93blB0
cjxWZWN0b3I8RWxlbWVudCo+ID4mIHZlY3RvciA9IG1hcC5hZGQoa2V5LmltcGwoKSwgbnVsbHB0
cikuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghdmVjdG9yKQogICAgICAgICB2ZWN0b3IgPSBh
ZG9wdFB0cihuZXcgVmVjdG9yPEVsZW1lbnQqPik7CiAgICAgdmVjdG9yLT5hcHBlbmQoZWxlbWVu
dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVm
ZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3Bw
CmluZGV4IGI5MWFlNTA2ZWNmNzllM2Q2MmZlMTdlNDM3Nzk5M2ZkM2MxNDZjMWQuLmQwODFlMjQ5
MDVhMGFkNTllNzRlNWRjMDVjNzQ1MTA4NmE2ODRmNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwCkBAIC0zMjcsNyArMzI3LDcgQEAgV2Vi
R0xTaGFyZWRPYmplY3QqIFdlYkdMRnJhbWVidWZmZXI6OmdldEF0dGFjaG1lbnRPYmplY3QoR0Mz
RGVudW0gYXR0YWNobWVudCkgY28KIFdlYkdMRnJhbWVidWZmZXI6OldlYkdMQXR0YWNobWVudCog
V2ViR0xGcmFtZWJ1ZmZlcjo6Z2V0QXR0YWNobWVudChHQzNEZW51bSBhdHRhY2htZW50KSBjb25z
dAogewogICAgIGNvbnN0IEF0dGFjaG1lbnRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9hdHRh
Y2htZW50cy5maW5kKGF0dGFjaG1lbnQpOwotICAgIHJldHVybiAoaXQgIT0gbV9hdHRhY2htZW50
cy5lbmQoKSkgPyBpdC0+c2Vjb25kLmdldCgpIDogMDsKKyAgICByZXR1cm4gKGl0ICE9IG1fYXR0
YWNobWVudHMuZW5kKCkpID8gaXQtPnZhbHVlLmdldCgpIDogMDsKIH0KIAogdm9pZCBXZWJHTEZy
YW1lYnVmZmVyOjpyZW1vdmVBdHRhY2htZW50RnJvbUJvdW5kRnJhbWVidWZmZXIoR0MzRGVudW0g
YXR0YWNobWVudCkKQEAgLTM2Nyw5ICszNjcsOSBAQCB2b2lkIFdlYkdMRnJhbWVidWZmZXI6OnJl
bW92ZUF0dGFjaG1lbnRGcm9tQm91bmRGcmFtZWJ1ZmZlcihXZWJHTFNoYXJlZE9iamVjdCogYQog
ICAgIHdoaWxlIChjaGVja01vcmUpIHsKICAgICAgICAgY2hlY2tNb3JlID0gZmFsc2U7CiAgICAg
ICAgIGZvciAoQXR0YWNobWVudE1hcDo6aXRlcmF0b3IgaXQgPSBtX2F0dGFjaG1lbnRzLmJlZ2lu
KCk7IGl0ICE9IG1fYXR0YWNobWVudHMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgICAgIFdlYkdM
QXR0YWNobWVudCogYXR0YWNobWVudE9iamVjdCA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAg
ICAgICBXZWJHTEF0dGFjaG1lbnQqIGF0dGFjaG1lbnRPYmplY3QgPSBpdC0+dmFsdWUuZ2V0KCk7
CiAgICAgICAgICAgICBpZiAoYXR0YWNobWVudE9iamVjdC0+aXNTaGFyZWRPYmplY3QoYXR0YWNo
bWVudCkpIHsKLSAgICAgICAgICAgICAgICBHQzNEZW51bSBhdHRhY2htZW50VHlwZSA9IGl0LT5m
aXJzdDsKKyAgICAgICAgICAgICAgICBHQzNEZW51bSBhdHRhY2htZW50VHlwZSA9IGl0LT5rZXk7
CiAgICAgICAgICAgICAgICAgYXR0YWNobWVudE9iamVjdC0+dW5hdHRhY2goY29udGV4dCgpLT5n
cmFwaGljc0NvbnRleHQzRCgpLCBhdHRhY2htZW50VHlwZSk7CiAgICAgICAgICAgICAgICAgcmVt
b3ZlQXR0YWNobWVudEZyb21Cb3VuZEZyYW1lYnVmZmVyKGF0dGFjaG1lbnRUeXBlKTsKICAgICAg
ICAgICAgICAgICBjaGVja01vcmUgPSB0cnVlOwpAQCAtNDE5LDggKzQxOSw4IEBAIEdDM0RlbnVt
IFdlYkdMRnJhbWVidWZmZXI6OmNoZWNrU3RhdHVzKGNvbnN0IGNoYXIqKiByZWFzb24pIGNvbnN0
CiAgICAgYm9vbCBoYXZlU3RlbmNpbCA9IGZhbHNlOwogICAgIGJvb2wgaGF2ZURlcHRoU3RlbmNp
bCA9IGZhbHNlOwogICAgIGZvciAoQXR0YWNobWVudE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
X2F0dGFjaG1lbnRzLmJlZ2luKCk7IGl0ICE9IG1fYXR0YWNobWVudHMuZW5kKCk7ICsraXQpIHsK
LSAgICAgICAgV2ViR0xBdHRhY2htZW50KiBhdHRhY2htZW50ID0gaXQtPnNlY29uZC5nZXQoKTsK
LSAgICAgICAgaWYgKCFpc0F0dGFjaG1lbnRDb21wbGV0ZShhdHRhY2htZW50LCBpdC0+Zmlyc3Qs
IHJlYXNvbikpCisgICAgICAgIFdlYkdMQXR0YWNobWVudCogYXR0YWNobWVudCA9IGl0LT52YWx1
ZS5nZXQoKTsKKyAgICAgICAgaWYgKCFpc0F0dGFjaG1lbnRDb21wbGV0ZShhdHRhY2htZW50LCBp
dC0+a2V5LCByZWFzb24pKQogICAgICAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpG
UkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAgICAgIGlmICghYXR0YWNobWVu
dC0+aXNWYWxpZCgpKSB7CiAgICAgICAgICAgICAqcmVhc29uID0gImF0dGFjaG1lbnQgaXMgbm90
IHZhbGlkIjsKQEAgLTQzMCw3ICs0MzAsNyBAQCBHQzNEZW51bSBXZWJHTEZyYW1lYnVmZmVyOjpj
aGVja1N0YXR1cyhjb25zdCBjaGFyKiogcmVhc29uKSBjb25zdAogICAgICAgICAgICAgKnJlYXNv
biA9ICJhdHRhY2htZW50IGlzIGFuIHVuc3VwcG9ydGVkIGZvcm1hdCI7CiAgICAgICAgICAgICBy
ZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVO
VDsKICAgICAgICAgfQotICAgICAgICBzd2l0Y2ggKGl0LT5maXJzdCkgeworICAgICAgICBzd2l0
Y2ggKGl0LT5rZXkpIHsKICAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRU
QUNITUVOVDoKICAgICAgICAgICAgIGhhdmVEZXB0aCA9IHRydWU7CiAgICAgICAgICAgICBicmVh
azsKQEAgLTQ4OCw3ICs0ODgsNyBAQCBib29sIFdlYkdMRnJhbWVidWZmZXI6Omhhc1N0ZW5jaWxC
dWZmZXIoKSBjb25zdAogdm9pZCBXZWJHTEZyYW1lYnVmZmVyOjpkZWxldGVPYmplY3RJbXBsKEdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M2QsIFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0KQogewog
ICAgIGZvciAoQXR0YWNobWVudE1hcDo6aXRlcmF0b3IgaXQgPSBtX2F0dGFjaG1lbnRzLmJlZ2lu
KCk7IGl0ICE9IG1fYXR0YWNobWVudHMuZW5kKCk7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQt
Pm9uRGV0YWNoZWQoY29udGV4dDNkKTsKKyAgICAgICAgaXQtPnZhbHVlLT5vbkRldGFjaGVkKGNv
bnRleHQzZCk7CiAKICAgICBjb250ZXh0M2QtPmRlbGV0ZUZyYW1lYnVmZmVyKG9iamVjdCk7CiB9
CkBAIC00OTksOCArNDk5LDggQEAgYm9vbCBXZWJHTEZyYW1lYnVmZmVyOjppbml0aWFsaXplQXR0
YWNobWVudHMoR3JhcGhpY3NDb250ZXh0M0QqIGczZCwgY29uc3QgY2hhcioKICAgICBHQzNEYml0
ZmllbGQgbWFzayA9IDA7CiAKICAgICBmb3IgKEF0dGFjaG1lbnRNYXA6Oml0ZXJhdG9yIGl0ID0g
bV9hdHRhY2htZW50cy5iZWdpbigpOyBpdCAhPSBtX2F0dGFjaG1lbnRzLmVuZCgpOyArK2l0KSB7
Ci0gICAgICAgIEdDM0RlbnVtIGF0dGFjaG1lbnRUeXBlID0gaXQtPmZpcnN0OwotICAgICAgICBX
ZWJHTEF0dGFjaG1lbnQqIGF0dGFjaG1lbnQgPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICBH
QzNEZW51bSBhdHRhY2htZW50VHlwZSA9IGl0LT5rZXk7CisgICAgICAgIFdlYkdMQXR0YWNobWVu
dCogYXR0YWNobWVudCA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgaWYgKCFhdHRhY2htZW50
LT5pc0luaXRpYWxpemVkKCkpCiAgICAgICAgICAgIG1hc2sgfD0gR3JhcGhpY3NDb250ZXh0M0Q6
OmdldENsZWFyQml0c0J5QXR0YWNobWVudFR5cGUoYXR0YWNobWVudFR5cGUpOwogICAgIH0KQEAg
LTU3MSw4ICs1NzEsOCBAQCBib29sIFdlYkdMRnJhbWVidWZmZXI6OmluaXRpYWxpemVBdHRhY2ht
ZW50cyhHcmFwaGljc0NvbnRleHQzRCogZzNkLCBjb25zdCBjaGFyKgogICAgICAgICBnM2QtPmRp
c2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkRJVEhFUik7CiAKICAgICBmb3IgKEF0dGFjaG1lbnRN
YXA6Oml0ZXJhdG9yIGl0ID0gbV9hdHRhY2htZW50cy5iZWdpbigpOyBpdCAhPSBtX2F0dGFjaG1l
bnRzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIEdDM0RlbnVtIGF0dGFjaG1lbnRUeXBlID0gaXQt
PmZpcnN0OwotICAgICAgICBXZWJHTEF0dGFjaG1lbnQqIGF0dGFjaG1lbnQgPSBpdC0+c2Vjb25k
LmdldCgpOworICAgICAgICBHQzNEZW51bSBhdHRhY2htZW50VHlwZSA9IGl0LT5rZXk7CisgICAg
ICAgIFdlYkdMQXR0YWNobWVudCogYXR0YWNobWVudCA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAg
ICAgR0MzRGJpdGZpZWxkIGJpdHMgPSBHcmFwaGljc0NvbnRleHQzRDo6Z2V0Q2xlYXJCaXRzQnlB
dHRhY2htZW50VHlwZShhdHRhY2htZW50VHlwZSk7CiAgICAgICAgIGlmIChiaXRzICYgbWFzaykK
ICAgICAgICAgICAgIGF0dGFjaG1lbnQtPnNldEluaXRpYWxpemVkKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weSBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CmluZGV4IDZmNGQx
ZjcwMTBmYjcxNGFhNGFkMzI3Yjk0MDVkNzIxODJhM2Q2NTMuLjZjNTE1ZDM3NGNlZDIwNjkwNjA0
ZTRkOTFjOWZkYTA0ZmRjNDI4ZTkgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CkBAIC0xMzE5LDcgKzEzMTksNyBAQCBjbGFzcyBU
eXBlQmluZGluZ3M6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFs
aWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgICAgIEluc3BlY3Rvck9iamVjdDo6aXRlcmF0b3Ig
JXM7XG4iICUgaXRfbmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgJXMgPSBvYmplY3QtPmZpbmQoXCIl
c1wiKTtcbiIgJSAoaXRfbmFtZSwgcHJvcF9kYXRhLnBbIm5hbWUiXSkpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAg
ICAgIEFTU0VSVCglcyAhPSBvYmplY3QtPmVuZCgpKTtcbiIgJSBpdF9uYW1lKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgi
ICAgICAgICAlcyglcy0+c2Vjb25kLmdldCgpKTtcbiIgJSAocHJvcF9kYXRhLnBhcmFtX3R5cGVf
YmluZGluZy5nZXRfdmFsaWRhdG9yX2NhbGxfdGV4dCgpLCBpdF9uYW1lKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAg
ICAgICAgJXMoJXMtPnZhbHVlLmdldCgpKTtcbiIgJSAocHJvcF9kYXRhLnBhcmFtX3R5cGVfYmlu
ZGluZy5nZXRfdmFsaWRhdG9yX2NhbGxfdGV4dCgpLCBpdF9uYW1lKSkKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICB9
XG4iKQogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBjbG9zZWRfZmll
bGRfc2V0OgpAQCAtMTMzMSw3ICsxMzMxLDcgQEAgY2xhc3MgVHlwZUJpbmRpbmdzOgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGlu
ZSgiICAgICAgICBJbnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9yICVzO1xuIiAlIGl0X25hbWUpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5u
ZXdsaW5lKCIgICAgICAgICVzID0gb2JqZWN0LT5maW5kKFwiJXNcIik7XG4iICUgKGl0X25hbWUs
IHByb3BfZGF0YS5wWyJuYW1lIl0pKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgICAgICBpZiAoJXMgIT0gb2JqZWN0
LT5lbmQoKSkge1xuIiAlIGl0X25hbWUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgICAgICAgICAlcyglcy0+c2Vj
b25kLmdldCgpKTtcbiIgJSAocHJvcF9kYXRhLnBhcmFtX3R5cGVfYmluZGluZy5nZXRfdmFsaWRh
dG9yX2NhbGxfdGV4dCgpLCBpdF9uYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgICAgICVzKCVzLT52
YWx1ZS5nZXQoKSk7XG4iICUgKHByb3BfZGF0YS5wYXJhbV90eXBlX2JpbmRpbmcuZ2V0X3ZhbGlk
YXRvcl9jYWxsX3RleHQoKSwgaXRfbmFtZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgY2xvc2VkX2ZpZWxkX3NldDoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgICAgICAg
ICArK2ZvdW5kUHJvcGVydGllc0NvdW50O1xuIikKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgfVxuIikKQEAg
LTIwNDQsNyArMjA0NCw3IEBAICRtZXNzYWdlSGFuZGxlcnMKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgICgoKnRoaXMpLippdC0+c2Vjb25kKShjYWxsSWQsIG1lc3NhZ2VPYmplY3QuZ2V0
KCkpOworICAgICgoKnRoaXMpLippdC0+dmFsdWUpKGNhbGxJZCwgbWVzc2FnZU9iamVjdC5nZXQo
KSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpzZW5kUmVzcG9u
c2UobG9uZyBjYWxsSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQsIGNvbnN0
IGNoYXIqIGNvbW1hbmROYW1lLCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVy
cm9ycywgRXJyb3JTdHJpbmcgaW52b2NhdGlvbkVycm9yKQpAQCAtMjEzMyw3ICsyMTMzLDcgQEAg
UiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OmdldFByb3BlcnR5VmFsdWVJbXBsKElu
c3BlY3Rvck9iamVjdCogb2JqZWN0LAogICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgfQogCi0g
ICAgaWYgKCFhc19tZXRob2QodmFsdWVJdGVyYXRvci0+c2Vjb25kLmdldCgpLCAmdmFsdWUpKQor
ICAgIGlmICghYXNfbWV0aG9kKHZhbHVlSXRlcmF0b3ItPnZhbHVlLmdldCgpLCAmdmFsdWUpKQog
ICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiUGFyYW1l
dGVyICclcycgaGFzIHdyb25nIHR5cGUuIEl0IG11c3QgYmUgJyVzJy4iLCBuYW1lLnV0ZjgoKS5k
YXRhKCksIHR5cGVfbmFtZSkpOwogICAgIGVsc2UKICAgICAgICAgaWYgKHZhbHVlRm91bmQpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01QYXRjaFN1cHBvcnQuY3BwCmluZGV4IGMwM2Rj
ZTQ3MTRkZjEyY2E1NWQ1OGViYWIyYjg5OWEyZGM3MTFjZTUuLjhlNmMxODAwZDM1MjgyNjRlNTMx
MzRlZDhkYzYxYjgzZWY4OGI5NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9ET01QYXRjaFN1cHBvcnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01Q
YXRjaFN1cHBvcnQuY3BwCkBAIC0yMzcsMjQgKzIzNywyNCBAQCBET01QYXRjaFN1cHBvcnQ6OmRp
ZmYoY29uc3QgVmVjdG9yPE93blB0cjxEaWdlc3Q+ID4mIG9sZExpc3QsIGNvbnN0IFZlY3RvcjxP
d25QdAogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuZXdMaXN0LnNpemUoKTsgKytpKSB7
CiAgICAgICAgIERpZmZUYWJsZTo6aXRlcmF0b3IgaXQgPSBuZXdUYWJsZS5hZGQobmV3TGlzdFtp
XS0+bV9zaGExLCBWZWN0b3I8c2l6ZV90PigpKS5pdGVyYXRvcjsKLSAgICAgICAgaXQtPnNlY29u
ZC5hcHBlbmQoaSk7CisgICAgICAgIGl0LT52YWx1ZS5hcHBlbmQoaSk7CiAgICAgfQogCiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBvbGRMaXN0LnNpemUoKTsgKytpKSB7CiAgICAgICAgIERp
ZmZUYWJsZTo6aXRlcmF0b3IgaXQgPSBvbGRUYWJsZS5hZGQob2xkTGlzdFtpXS0+bV9zaGExLCBW
ZWN0b3I8c2l6ZV90PigpKS5pdGVyYXRvcjsKLSAgICAgICAgaXQtPnNlY29uZC5hcHBlbmQoaSk7
CisgICAgICAgIGl0LT52YWx1ZS5hcHBlbmQoaSk7CiAgICAgfQogCiAgICAgZm9yIChEaWZmVGFi
bGU6Oml0ZXJhdG9yIG5ld0l0ID0gbmV3VGFibGUuYmVnaW4oKTsgbmV3SXQgIT0gbmV3VGFibGUu
ZW5kKCk7ICsrbmV3SXQpIHsKLSAgICAgICAgaWYgKG5ld0l0LT5zZWNvbmQuc2l6ZSgpICE9IDEp
CisgICAgICAgIGlmIChuZXdJdC0+dmFsdWUuc2l6ZSgpICE9IDEpCiAgICAgICAgICAgICBjb250
aW51ZTsKIAotICAgICAgICBEaWZmVGFibGU6Oml0ZXJhdG9yIG9sZEl0ID0gb2xkVGFibGUuZmlu
ZChuZXdJdC0+Zmlyc3QpOwotICAgICAgICBpZiAob2xkSXQgPT0gb2xkVGFibGUuZW5kKCkgfHwg
b2xkSXQtPnNlY29uZC5zaXplKCkgIT0gMSkKKyAgICAgICAgRGlmZlRhYmxlOjppdGVyYXRvciBv
bGRJdCA9IG9sZFRhYmxlLmZpbmQobmV3SXQtPmtleSk7CisgICAgICAgIGlmIChvbGRJdCA9PSBv
bGRUYWJsZS5lbmQoKSB8fCBvbGRJdC0+dmFsdWUuc2l6ZSgpICE9IDEpCiAgICAgICAgICAgICBj
b250aW51ZTsKIAotICAgICAgICBuZXdNYXBbbmV3SXQtPnNlY29uZFswXV0gPSBtYWtlX3BhaXIo
bmV3TGlzdFtuZXdJdC0+c2Vjb25kWzBdXS5nZXQoKSwgb2xkSXQtPnNlY29uZFswXSk7Ci0gICAg
ICAgIG9sZE1hcFtvbGRJdC0+c2Vjb25kWzBdXSA9IG1ha2VfcGFpcihvbGRMaXN0W29sZEl0LT5z
ZWNvbmRbMF1dLmdldCgpLCBuZXdJdC0+c2Vjb25kWzBdKTsKKyAgICAgICAgbmV3TWFwW25ld0l0
LT52YWx1ZVswXV0gPSBtYWtlX3BhaXIobmV3TGlzdFtuZXdJdC0+dmFsdWVbMF1dLmdldCgpLCBv
bGRJdC0+dmFsdWVbMF0pOworICAgICAgICBvbGRNYXBbb2xkSXQtPnZhbHVlWzBdXSA9IG1ha2Vf
cGFpcihvbGRMaXN0W29sZEl0LT52YWx1ZVswXV0uZ2V0KCksIG5ld0l0LT52YWx1ZVswXSk7CiAg
ICAgfQogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IG5ld0xpc3Quc2l6ZSgpID4gMCAmJiBpIDwg
bmV3TGlzdC5zaXplKCkgLSAxOyArK2kpIHsKQEAgLTM2NCw3ICszNjQsNyBAQCBib29sIERPTVBh
dGNoU3VwcG9ydDo6aW5uZXJQYXRjaENoaWxkcmVuKENvbnRhaW5lck5vZGUqIHBhcmVudE5vZGUs
IGNvbnN0IFZlY3RvcgogCiAgICAgLy8gMi4gUGF0Y2ggbm9kZXMgbWFya2VkIGZvciBtZXJnZS4K
ICAgICBmb3IgKEhhc2hNYXA8RGlnZXN0KiwgRGlnZXN0Kj46Oml0ZXJhdG9yIGl0ID0gbWVyZ2Vz
LmJlZ2luKCk7IGl0ICE9IG1lcmdlcy5lbmQoKTsgKytpdCkgewotICAgICAgICBpZiAoIWlubmVy
UGF0Y2hOb2RlKGl0LT5zZWNvbmQsIGl0LT5maXJzdCwgZWMpKQorICAgICAgICBpZiAoIWlubmVy
UGF0Y2hOb2RlKGl0LT52YWx1ZSwgaXQtPmtleSwgZWMpKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KIApAQCAtNDYzLDcgKzQ2Myw3IEBAIGJvb2wgRE9NUGF0Y2hTdXBwb3J0Ojpy
ZW1vdmVDaGlsZEFuZE1vdmVUb05ldyhEaWdlc3QqIG9sZERpZ2VzdCwgRXhjZXB0aW9uQ29kZSYK
ICAgICAvLyBoaWdoIHRoYXQgaXQgd2lsbCBnZXQgbWVyZ2VkIGJhY2sgaW50byB0aGUgb3JpZ2lu
YWwgRE9NIGR1cmluZyB0aGUgZnVydGhlciBwYXRjaGluZy4KICAgICBVbnVzZWROb2Rlc01hcDo6
aXRlcmF0b3IgaXQgPSBtX3VudXNlZE5vZGVzTWFwLmZpbmQob2xkRGlnZXN0LT5tX3NoYTEpOwog
ICAgIGlmIChpdCAhPSBtX3VudXNlZE5vZGVzTWFwLmVuZCgpKSB7Ci0gICAgICAgIERpZ2VzdCog
bmV3RGlnZXN0ID0gaXQtPnNlY29uZDsKKyAgICAgICAgRGlnZXN0KiBuZXdEaWdlc3QgPSBpdC0+
dmFsdWU7CiAgICAgICAgIE5vZGUqIG5ld05vZGUgPSBuZXdEaWdlc3QtPm1fbm9kZTsKICAgICAg
ICAgaWYgKCFtX2RvbUVkaXRvci0+cmVwbGFjZUNoaWxkKG5ld05vZGUtPnBhcmVudE5vZGUoKSwg
b2xkTm9kZSwgbmV3Tm9kZSwgZWMpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0TWFuYWdlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcAppbmRl
eCA1MmVjNzQ5MGEwNzdiNWNmZDRmM2IwODVkMjg3N2JjODcwY2MwN2NmLi4xZDVlMzE3NTdjZDg2
YjNiMjJiOGZlZGIzMWFiY2Q1ZTAyZWZmNDc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcApAQCAtODIsMTAgKzgyLDEwIEBAIElu
amVjdGVkU2NyaXB0IEluamVjdGVkU2NyaXB0TWFuYWdlcjo6aW5qZWN0ZWRTY3JpcHRGb3JJZChp
bnQgaWQpCiB7CiAgICAgSWRUb0luamVjdGVkU2NyaXB0TWFwOjppdGVyYXRvciBpdCA9IG1faWRU
b0luamVjdGVkU2NyaXB0LmZpbmQoaWQpOwogICAgIGlmIChpdCAhPSBtX2lkVG9JbmplY3RlZFNj
cmlwdC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBp
dC0+dmFsdWU7CiAgICAgZm9yIChTY3JpcHRTdGF0ZVRvSWQ6Oml0ZXJhdG9yIGl0ID0gbV9zY3Jp
cHRTdGF0ZVRvSWQuYmVnaW4oKTsgaXQgIT0gbV9zY3JpcHRTdGF0ZVRvSWQuZW5kKCk7ICsraXQp
IHsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQgPT0gaWQpCi0gICAgICAgICAgICByZXR1cm4gaW5q
ZWN0ZWRTY3JpcHRGb3IoaXQtPmZpcnN0KTsKKyAgICAgICAgaWYgKGl0LT52YWx1ZSA9PSBpZCkK
KyAgICAgICAgICAgIHJldHVybiBpbmplY3RlZFNjcmlwdEZvcihpdC0+a2V5KTsKICAgICB9CiAg
ICAgcmV0dXJuIEluamVjdGVkU2NyaXB0KCk7CiB9CkBAIC05NCw3ICs5NCw3IEBAIGludCBJbmpl
Y3RlZFNjcmlwdE1hbmFnZXI6OmluamVjdGVkU2NyaXB0SWRGb3IoU2NyaXB0U3RhdGUqIHNjcmlw
dFN0YXRlKQogewogICAgIFNjcmlwdFN0YXRlVG9JZDo6aXRlcmF0b3IgaXQgPSBtX3NjcmlwdFN0
YXRlVG9JZC5maW5kKHNjcmlwdFN0YXRlKTsKICAgICBpZiAoaXQgIT0gbV9zY3JpcHRTdGF0ZVRv
SWQuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gaXQt
PnZhbHVlOwogICAgIGludCBpZCA9IG1fbmV4dEluamVjdGVkU2NyaXB0SWQrKzsKICAgICBtX3Nj
cmlwdFN0YXRlVG9JZC5zZXQoc2NyaXB0U3RhdGUsIGlkKTsKICAgICByZXR1cm4gaWQ7CkBAIC0x
MjYsMTEgKzEyNiwxMSBAQCB2b2lkIEluamVjdGVkU2NyaXB0TWFuYWdlcjo6ZGlzY2FyZEluamVj
dGVkU2NyaXB0c0ZvcihET01XaW5kb3cqIHdpbmRvdykKICAgICBWZWN0b3I8bG9uZz4gaWRzVG9S
ZW1vdmU7CiAgICAgSWRUb0luamVjdGVkU2NyaXB0TWFwOjppdGVyYXRvciBlbmQgPSBtX2lkVG9J
bmplY3RlZFNjcmlwdC5lbmQoKTsKICAgICBmb3IgKElkVG9JbmplY3RlZFNjcmlwdE1hcDo6aXRl
cmF0b3IgaXQgPSBtX2lkVG9JbmplY3RlZFNjcmlwdC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKLSAgICAgICAgU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlID0gaXQtPnNlY29uZC5zY3JpcHRT
dGF0ZSgpOworICAgICAgICBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUgPSBpdC0+dmFsdWUuc2Ny
aXB0U3RhdGUoKTsKICAgICAgICAgaWYgKHdpbmRvdyAhPSBkb21XaW5kb3dGcm9tU2NyaXB0U3Rh
dGUoc2NyaXB0U3RhdGUpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIG1fc2NyaXB0
U3RhdGVUb0lkLnJlbW92ZShzY3JpcHRTdGF0ZSk7Ci0gICAgICAgIGlkc1RvUmVtb3ZlLmFwcGVu
ZChpdC0+Zmlyc3QpOworICAgICAgICBpZHNUb1JlbW92ZS5hcHBlbmQoaXQtPmtleSk7CiAgICAg
fQogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpZHNUb1JlbW92ZS5zaXplKCk7IGkrKykK
QEAgLTEzOSw3ICsxMzksNyBAQCB2b2lkIEluamVjdGVkU2NyaXB0TWFuYWdlcjo6ZGlzY2FyZElu
amVjdGVkU2NyaXB0c0ZvcihET01XaW5kb3cqIHdpbmRvdykKICAgICAvLyBOb3cgcmVtb3ZlIHNj
cmlwdCBzdGF0ZXMgdGhhdCBoYXZlIGlkIGJ1dCBubyBpbmplY3RlZCBzY3JpcHQuCiAgICAgVmVj
dG9yPFNjcmlwdFN0YXRlKj4gc2NyaXB0U3RhdGVzVG9SZW1vdmU7CiAgICAgZm9yIChTY3JpcHRT
dGF0ZVRvSWQ6Oml0ZXJhdG9yIGl0ID0gbV9zY3JpcHRTdGF0ZVRvSWQuYmVnaW4oKTsgaXQgIT0g
bV9zY3JpcHRTdGF0ZVRvSWQuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgU2NyaXB0U3RhdGUqIHNj
cmlwdFN0YXRlID0gaXQtPmZpcnN0OworICAgICAgICBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUg
PSBpdC0+a2V5OwogICAgICAgICBpZiAod2luZG93ID09IGRvbVdpbmRvd0Zyb21TY3JpcHRTdGF0
ZShzY3JpcHRTdGF0ZSkpCiAgICAgICAgICAgICBzY3JpcHRTdGF0ZXNUb1JlbW92ZS5hcHBlbmQo
c2NyaXB0U3RhdGUpOwogICAgIH0KQEAgLTE1NSw3ICsxNTUsNyBAQCBib29sIEluamVjdGVkU2Ny
aXB0TWFuYWdlcjo6Y2FuQWNjZXNzSW5zcGVjdGVkV29ya2VyQ29udGV4dChTY3JpcHRTdGF0ZSop
CiB2b2lkIEluamVjdGVkU2NyaXB0TWFuYWdlcjo6cmVsZWFzZU9iamVjdEdyb3VwKGNvbnN0IFN0
cmluZyYgb2JqZWN0R3JvdXApCiB7CiAgICAgZm9yIChJZFRvSW5qZWN0ZWRTY3JpcHRNYXA6Oml0
ZXJhdG9yIGl0ID0gbV9pZFRvSW5qZWN0ZWRTY3JpcHQuYmVnaW4oKTsgaXQgIT0gbV9pZFRvSW5q
ZWN0ZWRTY3JpcHQuZW5kKCk7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQucmVsZWFzZU9iamVj
dEdyb3VwKG9iamVjdEdyb3VwKTsKKyAgICAgICAgaXQtPnZhbHVlLnJlbGVhc2VPYmplY3RHcm91
cChvYmplY3RHcm91cCk7CiB9CiAKIFN0cmluZyBJbmplY3RlZFNjcmlwdE1hbmFnZXI6OmluamVj
dGVkU2NyaXB0U291cmNlKCkKQEAgLTE3Myw5ICsxNzMsOSBAQCBJbmplY3RlZFNjcmlwdCBJbmpl
Y3RlZFNjcmlwdE1hbmFnZXI6OmluamVjdGVkU2NyaXB0Rm9yKFNjcmlwdFN0YXRlKiBpbnNwZWN0
ZWRTYwogewogICAgIFNjcmlwdFN0YXRlVG9JZDo6aXRlcmF0b3IgaXQgPSBtX3NjcmlwdFN0YXRl
VG9JZC5maW5kKGluc3BlY3RlZFNjcmlwdFN0YXRlKTsKICAgICBpZiAoaXQgIT0gbV9zY3JpcHRT
dGF0ZVRvSWQuZW5kKCkpIHsKLSAgICAgICAgSWRUb0luamVjdGVkU2NyaXB0TWFwOjppdGVyYXRv
ciBpdDEgPSBtX2lkVG9JbmplY3RlZFNjcmlwdC5maW5kKGl0LT5zZWNvbmQpOworICAgICAgICBJ
ZFRvSW5qZWN0ZWRTY3JpcHRNYXA6Oml0ZXJhdG9yIGl0MSA9IG1faWRUb0luamVjdGVkU2NyaXB0
LmZpbmQoaXQtPnZhbHVlKTsKICAgICAgICAgaWYgKGl0MSAhPSBtX2lkVG9JbmplY3RlZFNjcmlw
dC5lbmQoKSkKLSAgICAgICAgICAgIHJldHVybiBpdDEtPnNlY29uZDsKKyAgICAgICAgICAgIHJl
dHVybiBpdDEtPnZhbHVlOwogICAgIH0KIAogICAgIGlmICghbV9pbnNwZWN0ZWRTdGF0ZUFjY2Vz
c0NoZWNrKGluc3BlY3RlZFNjcmlwdFN0YXRlKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCmluZGV4IDYwZWJkOTMxMmIyYTUzOGE0MjZmMTVmMzlj
NWNjYTZkNmU0M2NlZGUuLjliMjM4NzVhZTA0NWI3NmM4NGE0MzhmYzZhOTdmNzQ4NjZiMmM5ZWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcApA
QCAtMTg4LDEwICsxODgsMTAgQEAgaW5saW5lIHZvaWQgU2VsZWN0b3JQcm9maWxlOjpjb21taXRT
ZWxlY3Rvcihib29sIG1hdGNoZWQpCiAKICAgICBSdWxlTWF0Y2hpbmdTdGF0c01hcDo6QWRkUmVz
dWx0IHJlc3VsdCA9IG1fcnVsZU1hdGNoaW5nU3RhdHMuYWRkKG1ha2VLZXkoKSwgUnVsZU1hdGNo
aW5nU3RhdHMobV9jdXJyZW50TWF0Y2hEYXRhLCBtYXRjaFRpbWVNcywgMSwgbWF0Y2hlZCA/IDEg
OiAwKSk7CiAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICByZXN1bHQuaXRl
cmF0b3ItPnNlY29uZC50b3RhbFRpbWUgKz0gbWF0Y2hUaW1lTXM7Ci0gICAgICAgIHJlc3VsdC5p
dGVyYXRvci0+c2Vjb25kLmhpdHMgKz0gMTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZS50b3RhbFRpbWUgKz0gbWF0Y2hUaW1lTXM7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFs
dWUuaGl0cyArPSAxOwogICAgICAgICBpZiAobWF0Y2hlZCkKLSAgICAgICAgICAgIHJlc3VsdC5p
dGVyYXRvci0+c2Vjb25kLm1hdGNoZXMgKz0gMTsKKyAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRv
ci0+dmFsdWUubWF0Y2hlcyArPSAxOwogICAgIH0KIH0KIApAQCAtMjA0LDcgKzIwNCw3IEBAIGlu
bGluZSB2b2lkIFNlbGVjdG9yUHJvZmlsZTo6Y29tbWl0U2VsZWN0b3JUaW1lKCkKICAgICBpZiAo
aXQgPT0gbV9ydWxlTWF0Y2hpbmdTdGF0cy5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
aXQtPnNlY29uZC50b3RhbFRpbWUgKz0gcHJvY2Vzc2luZ1RpbWVNczsKKyAgICBpdC0+dmFsdWUu
dG90YWxUaW1lICs9IHByb2Nlc3NpbmdUaW1lTXM7CiB9CiAKIFBhc3NSZWZQdHI8VHlwZUJ1aWxk
ZXI6OkNTUzo6U2VsZWN0b3JQcm9maWxlPiBTZWxlY3RvclByb2ZpbGU6OnRvSW5zcGVjdG9yT2Jq
ZWN0KCkgY29uc3QKQEAgLTIxMiwxMiArMjEyLDEyIEBAIFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6
OkNTUzo6U2VsZWN0b3JQcm9maWxlPiBTZWxlY3RvclByb2ZpbGU6OnRvSW5zcGVjdG9yT2JqZWN0
CiAgICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6Q1NTOjpTZWxlY3Rv
clByb2ZpbGVFbnRyeT4gPiBzZWxlY3RvclByb2ZpbGVEYXRhID0gVHlwZUJ1aWxkZXI6OkFycmF5
PFR5cGVCdWlsZGVyOjpDU1M6OlNlbGVjdG9yUHJvZmlsZUVudHJ5Pjo6Y3JlYXRlKCk7CiAgICAg
Zm9yIChSdWxlTWF0Y2hpbmdTdGF0c01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3J1bGVNYXRj
aGluZ1N0YXRzLmJlZ2luKCk7IGl0ICE9IG1fcnVsZU1hdGNoaW5nU3RhdHMuZW5kKCk7ICsraXQp
IHsKICAgICAgICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OlNlbGVjdG9yUHJvZmlsZUVudHJ5
PiBlbnRyeSA9IFR5cGVCdWlsZGVyOjpDU1M6OlNlbGVjdG9yUHJvZmlsZUVudHJ5OjpjcmVhdGUo
KQotICAgICAgICAgICAgLnNldFNlbGVjdG9yKGl0LT5zZWNvbmQuc2VsZWN0b3IpCi0gICAgICAg
ICAgICAuc2V0VXJsKGl0LT5zZWNvbmQudXJsKQotICAgICAgICAgICAgLnNldExpbmVOdW1iZXIo
aXQtPnNlY29uZC5saW5lTnVtYmVyKQotICAgICAgICAgICAgLnNldFRpbWUoaXQtPnNlY29uZC50
b3RhbFRpbWUpCi0gICAgICAgICAgICAuc2V0SGl0Q291bnQoaXQtPnNlY29uZC5oaXRzKQotICAg
ICAgICAgICAgLnNldE1hdGNoQ291bnQoaXQtPnNlY29uZC5tYXRjaGVzKTsKKyAgICAgICAgICAg
IC5zZXRTZWxlY3RvcihpdC0+dmFsdWUuc2VsZWN0b3IpCisgICAgICAgICAgICAuc2V0VXJsKGl0
LT52YWx1ZS51cmwpCisgICAgICAgICAgICAuc2V0TGluZU51bWJlcihpdC0+dmFsdWUubGluZU51
bWJlcikKKyAgICAgICAgICAgIC5zZXRUaW1lKGl0LT52YWx1ZS50b3RhbFRpbWUpCisgICAgICAg
ICAgICAuc2V0SGl0Q291bnQoaXQtPnZhbHVlLmhpdHMpCisgICAgICAgICAgICAuc2V0TWF0Y2hD
b3VudChpdC0+dmFsdWUubWF0Y2hlcyk7CiAgICAgICAgIHNlbGVjdG9yUHJvZmlsZURhdGEtPmFk
ZEl0ZW0oZW50cnkucmVsZWFzZSgpKTsKICAgICB9CiAKQEAgLTI3Miw3ICsyNzIsNyBAQCB2b2lk
IFVwZGF0ZVJlZ2lvbkxheW91dFRhc2s6Om9uVGltZXIoVGltZXI8VXBkYXRlUmVnaW9uTGF5b3V0
VGFzaz4qKQogICAgIFZlY3RvcjxzdGQ6OnBhaXI8V2ViS2l0TmFtZWRGbG93KiwgaW50PiA+IG5h
bWVkRmxvd3M7CiAKICAgICBmb3IgKEhhc2hNYXA8V2ViS2l0TmFtZWRGbG93KiwgaW50Pjo6aXRl
cmF0b3IgaXQgPSBtX25hbWVkRmxvd3MuYmVnaW4oKSwgZW5kID0gbV9uYW1lZEZsb3dzLmVuZCgp
OyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIG5hbWVkRmxvd3MuYXBwZW5kKHN0ZDo6bWFrZV9w
YWlyKGl0LT5maXJzdCwgaXQtPnNlY29uZCkpOworICAgICAgICBuYW1lZEZsb3dzLmFwcGVuZChz
dGQ6Om1ha2VfcGFpcihpdC0+a2V5LCBpdC0+dmFsdWUpKTsKIAogICAgIGZvciAodW5zaWduZWQg
aSA9IDAsIHNpemUgPSBuYW1lZEZsb3dzLnNpemUoKTsgaSA8IHNpemU7ICsraSkgewogICAgICAg
ICBXZWJLaXROYW1lZEZsb3cqIG5hbWVkRmxvdyA9IG5hbWVkRmxvd3MuYXQoaSkuZmlyc3Q7CkBA
IC02NjMsNyArNjYzLDcgQEAgYm9vbCBJbnNwZWN0b3JDU1NBZ2VudDo6Zm9yY2VQc2V1ZG9TdGF0
ZShFbGVtZW50KiBlbGVtZW50LCBDU1NTZWxlY3Rvcjo6UHNldWRvVHkKICAgICBpZiAoaXQgPT0g
bV9ub2RlSWRUb0ZvcmNlZFBzZXVkb1N0YXRlLmVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICB1bnNpZ25lZCBmb3JjZWRQc2V1ZG9TdGF0ZSA9IGl0LT5zZWNvbmQ7CisgICAgdW5z
aWduZWQgZm9yY2VkUHNldWRvU3RhdGUgPSBpdC0+dmFsdWU7CiAgICAgc3dpdGNoIChwc2V1ZG9U
eXBlKSB7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQWN0aXZlOgogICAgICAgICByZXR1
cm4gZm9yY2VkUHNldWRvU3RhdGUgJiBQc2V1ZG9BY3RpdmU7CkBAIC05MDQsNyArOTA0LDcgQEAg
dm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Zm9yY2VQc2V1ZG9TdGF0ZShFcnJvclN0cmluZyogZXJy
b3JTdHJpbmcsIGludCBub2RlSWQsIGMKIAogICAgIHVuc2lnbmVkIGZvcmNlZFBzZXVkb1N0YXRl
ID0gY29tcHV0ZVBzZXVkb0NsYXNzTWFzayhmb3JjZWRQc2V1ZG9DbGFzc2VzLmdldCgpKTsKICAg
ICBOb2RlSWRUb0ZvcmNlZFBzZXVkb1N0YXRlOjppdGVyYXRvciBpdCA9IG1fbm9kZUlkVG9Gb3Jj
ZWRQc2V1ZG9TdGF0ZS5maW5kKG5vZGVJZCk7Ci0gICAgdW5zaWduZWQgY3VycmVudEZvcmNlZFBz
ZXVkb1N0YXRlID0gaXQgPT0gbV9ub2RlSWRUb0ZvcmNlZFBzZXVkb1N0YXRlLmVuZCgpID8gMCA6
IGl0LT5zZWNvbmQ7CisgICAgdW5zaWduZWQgY3VycmVudEZvcmNlZFBzZXVkb1N0YXRlID0gaXQg
PT0gbV9ub2RlSWRUb0ZvcmNlZFBzZXVkb1N0YXRlLmVuZCgpID8gMCA6IGl0LT52YWx1ZTsKICAg
ICBib29sIG5lZWRTdHlsZVJlY2FsYyA9IGZvcmNlZFBzZXVkb1N0YXRlICE9IGN1cnJlbnRGb3Jj
ZWRQc2V1ZG9TdGF0ZTsKICAgICBpZiAoIW5lZWRTdHlsZVJlY2FsYykKICAgICAgICAgcmV0dXJu
OwpAQCAtOTk1LDcgKzk5NSw3IEBAIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZSog
SW5zcGVjdG9yQ1NTQWdlbnQ6OmFzSW5zcGVjdG9yU3R5bGVTaGVldChFbGVtCiAgICAgICAgIHJl
dHVybiBpbnNwZWN0b3JTdHlsZVNoZWV0LmdldCgpOwogICAgIH0KIAotICAgIHJldHVybiBpdC0+
c2Vjb25kLmdldCgpOworICAgIHJldHVybiBpdC0+dmFsdWUuZ2V0KCk7CiB9CiAKIEVsZW1lbnQq
IEluc3BlY3RvckNTU0FnZW50OjplbGVtZW50Rm9ySWQoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5n
LCBpbnQgbm9kZUlkKQpAQCAtMTA5OCw3ICsxMDk4LDcgQEAgSW5zcGVjdG9yU3R5bGVTaGVldCog
SW5zcGVjdG9yQ1NTQWdlbnQ6OmFzc2VydFN0eWxlU2hlZXRGb3JJZChFcnJvclN0cmluZyogZXJy
b3IKICAgICAgICAgKmVycm9yU3RyaW5nID0gIk5vIHN0eWxlIHNoZWV0IHdpdGggZ2l2ZW4gaWQg
Zm91bmQiOwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQu
Z2V0KCk7CisgICAgcmV0dXJuIGl0LT52YWx1ZS5nZXQoKTsKIH0KIAogVHlwZUJ1aWxkZXI6OkNT
Uzo6U3R5bGVTaGVldE9yaWdpbjo6RW51bSBJbnNwZWN0b3JDU1NBZ2VudDo6ZGV0ZWN0T3JpZ2lu
KENTU1N0eWxlU2hlZXQqIHBhZ2VTdHlsZVNoZWV0LCBEb2N1bWVudCogb3duZXJEb2N1bWVudCkK
QEAgLTEyMjksNyArMTIyOSw3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmRpZFJlbW92ZURP
TU5vZGUoTm9kZSogbm9kZSkKICAgICBpZiAoaXQgPT0gbV9ub2RlVG9JbnNwZWN0b3JTdHlsZVNo
ZWV0LmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2lkVG9JbnNwZWN0b3JTdHlsZVNo
ZWV0LnJlbW92ZShpdC0+c2Vjb25kLT5pZCgpKTsKKyAgICBtX2lkVG9JbnNwZWN0b3JTdHlsZVNo
ZWV0LnJlbW92ZShpdC0+dmFsdWUtPmlkKCkpOwogICAgIG1fbm9kZVRvSW5zcGVjdG9yU3R5bGVT
aGVldC5yZW1vdmUobm9kZSk7CiB9CiAKQEAgLTEyNDIsNyArMTI0Miw3IEBAIHZvaWQgSW5zcGVj
dG9yQ1NTQWdlbnQ6OmRpZE1vZGlmeURPTUF0dHIoRWxlbWVudCogZWxlbWVudCkKICAgICBpZiAo
aXQgPT0gbV9ub2RlVG9JbnNwZWN0b3JTdHlsZVNoZWV0LmVuZCgpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBpdC0+c2Vjb25kLT5kaWRNb2RpZnlFbGVtZW50QXR0cmlidXRlKCk7CisgICAgaXQt
PnZhbHVlLT5kaWRNb2RpZnlFbGVtZW50QXR0cmlidXRlKCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9y
Q1NTQWdlbnQ6OnN0eWxlU2hlZXRDaGFuZ2VkKEluc3BlY3RvclN0eWxlU2hlZXQqIHN0eWxlU2hl
ZXQpCkBAIC0xMjU1LDcgKzEyNTUsNyBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpyZXNldFBz
ZXVkb1N0YXRlcygpCiB7CiAgICAgSGFzaFNldDxEb2N1bWVudCo+IGRvY3VtZW50c1RvQ2hhbmdl
OwogICAgIGZvciAoTm9kZUlkVG9Gb3JjZWRQc2V1ZG9TdGF0ZTo6aXRlcmF0b3IgaXQgPSBtX25v
ZGVJZFRvRm9yY2VkUHNldWRvU3RhdGUuYmVnaW4oKSwgZW5kID0gbV9ub2RlSWRUb0ZvcmNlZFBz
ZXVkb1N0YXRlLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgRWxlbWVudCogZWxl
bWVudCA9IHRvRWxlbWVudChtX2RvbUFnZW50LT5ub2RlRm9ySWQoaXQtPmZpcnN0KSk7CisgICAg
ICAgIEVsZW1lbnQqIGVsZW1lbnQgPSB0b0VsZW1lbnQobV9kb21BZ2VudC0+bm9kZUZvcklkKGl0
LT5rZXkpKTsKICAgICAgICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC0+b3duZXJEb2N1bWVudCgp
KQogICAgICAgICAgICAgZG9jdW1lbnRzVG9DaGFuZ2UuYWRkKGVsZW1lbnQtPm93bmVyRG9jdW1l
bnQoKSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNvbnNvbGVBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Q29uc29sZUFnZW50LmNwcAppbmRleCBhY2ViMmRhNGFmNmY4NTM1MWY4OGQ5OGM4M2Y2OTU4MDU1
ODE2MmZiLi5jOTQ4OWU5ZmZmM2MwMWU5NjhmNDY3ODZjNGEzNTE3YTAwMzZhM2YxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcApA
QCAtMTc4LDcgKzE3OCw3IEBAIHZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50OjpzdG9wVGltaW5n
KGNvbnN0IFN0cmluZyYgdGl0bGUsIFBhc3NSZWZQdHI8U2NyaXB0Q2FsCiAgICAgaWYgKGl0ID09
IG1fdGltZXMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGRvdWJsZSBzdGFydFRpbWUg
PSBpdC0+c2Vjb25kOworICAgIGRvdWJsZSBzdGFydFRpbWUgPSBpdC0+dmFsdWU7CiAgICAgbV90
aW1lcy5yZW1vdmUoaXQpOwogCiAgICAgZG91YmxlIGVsYXBzZWQgPSBtb25vdG9uaWNhbGx5SW5j
cmVhc2luZ1RpbWUoKSAtIHN0YXJ0VGltZTsKQEAgLTIwMSw3ICsyMDEsNyBAQCB2b2lkIEluc3Bl
Y3RvckNvbnNvbGVBZ2VudDo6Y291bnQoUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+IGFyZ3Vt
ZW50cywgUGFzc1JlZgogICAgIGlmIChpdCA9PSBtX2NvdW50cy5lbmQoKSkKICAgICAgICAgY291
bnQgPSAxOwogICAgIGVsc2UgewotICAgICAgICBjb3VudCA9IGl0LT5zZWNvbmQgKyAxOworICAg
ICAgICBjb3VudCA9IGl0LT52YWx1ZSArIDE7CiAgICAgICAgIG1fY291bnRzLnJlbW92ZShpdCk7
CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RE9NQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50
LmNwcAppbmRleCA0NDkxNDg3YjM2Y2YwOWRlOGUzOTZjMjY3YjdiNDRmOGY0NDYyOTk2Li4xYmFl
ZDY0NTQzMjE3Zjg4ZmQwMjlkNWEyYjJmNzQ4MTVkYTRhMDNlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKQEAgLTQ3MCw3ICs0NzAsNyBAQCBO
b2RlKiBJbnNwZWN0b3JET01BZ2VudDo6bm9kZUZvcklkKGludCBpZCkKIAogICAgIEhhc2hNYXA8
aW50LCBOb2RlKj46Oml0ZXJhdG9yIGl0ID0gbV9pZFRvTm9kZS5maW5kKGlkKTsKICAgICBpZiAo
aXQgIT0gbV9pZFRvTm9kZS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAg
ICAgIHJldHVybiBpdC0+dmFsdWU7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTkxNiw5ICs5MTYs
OSBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpwZXJmb3JtU2VhcmNoKEVycm9yU3RyaW5nKiwg
Y29uc3QgU3RyaW5nJiB3aGl0ZXNwYWNlVHJpbQogICAgIFNlYXJjaFJlc3VsdHM6Oml0ZXJhdG9y
IHJlc3VsdHNJdCA9IG1fc2VhcmNoUmVzdWx0cy5hZGQoKnNlYXJjaElkLCBWZWN0b3I8UmVmUHRy
PE5vZGU+ID4oKSkuaXRlcmF0b3I7CiAKICAgICBmb3IgKExpc3RIYXNoU2V0PE5vZGUqPjo6aXRl
cmF0b3IgaXQgPSByZXN1bHRDb2xsZWN0b3IuYmVnaW4oKTsgaXQgIT0gcmVzdWx0Q29sbGVjdG9y
LmVuZCgpOyArK2l0KQotICAgICAgICByZXN1bHRzSXQtPnNlY29uZC5hcHBlbmQoKml0KTsKKyAg
ICAgICAgcmVzdWx0c0l0LT52YWx1ZS5hcHBlbmQoKml0KTsKIAotICAgICpyZXN1bHRDb3VudCA9
IHJlc3VsdHNJdC0+c2Vjb25kLnNpemUoKTsKKyAgICAqcmVzdWx0Q291bnQgPSByZXN1bHRzSXQt
PnZhbHVlLnNpemUoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0U2VhcmNoUmVz
dWx0cyhFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgc2VhcmNoSWQsIGlu
dCBmcm9tSW5kZXgsIGludCB0b0luZGV4LCBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PGludD4g
PiYgbm9kZUlkcykKQEAgLTkyOSw3ICs5MjksNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50Ojpn
ZXRTZWFyY2hSZXN1bHRzKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJgog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaW50IHNpemUgPSBpdC0+c2Vjb25kLnNpemUo
KTsKKyAgICBpbnQgc2l6ZSA9IGl0LT52YWx1ZS5zaXplKCk7CiAgICAgaWYgKGZyb21JbmRleCA8
IDAgfHwgdG9JbmRleCA+IHNpemUgfHwgZnJvbUluZGV4ID49IHRvSW5kZXgpIHsKICAgICAgICAg
KmVycm9yU3RyaW5nID0gIkludmFsaWQgc2VhcmNoIHJlc3VsdCByYW5nZSI7CiAgICAgICAgIHJl
dHVybjsKQEAgLTkzNyw3ICs5MzcsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRTZWFy
Y2hSZXN1bHRzKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJgogCiAgICAg
bm9kZUlkcyA9IFR5cGVCdWlsZGVyOjpBcnJheTxpbnQ+OjpjcmVhdGUoKTsKICAgICBmb3IgKGlu
dCBpID0gZnJvbUluZGV4OyBpIDwgdG9JbmRleDsgKytpKQotICAgICAgICBub2RlSWRzLT5hZGRJ
dGVtKHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoKGl0LT5zZWNvbmQpW2ldLmdldCgpKSk7CisgICAg
ICAgIG5vZGVJZHMtPmFkZEl0ZW0ocHVzaE5vZGVQYXRoVG9Gcm9udGVuZCgoaXQtPnZhbHVlKVtp
XS5nZXQoKSkpOwogfQogCiB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaXNjYXJkU2VhcmNoUmVz
dWx0cyhFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgc2VhcmNoSWQpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudC5jcHAKaW5k
ZXggODAzMjI5NWQ4OTVlOWQyMmEyZjgwYzU5OGQ5ZTQ0ZDI3NDc0YTA1Ni4uYzRmY2I4MmI3YjZm
YTBlMmI5YTUzYmQ0ZmFhYzYyMzYyOWQwYmU1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50LmNwcApAQCAtNDAyLDggKzQw
Miw4IEBAIHZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6d2lsbFNlbmRYTUxIdHRwUmVx
dWVzdChjb25zdCBTdHJpbmcmIHVybCkKICAgICBlbHNlIHsKICAgICAgICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4geGhyQnJlYWtwb2ludHMgPSBtX3N0YXRlLT5nZXRPYmplY3QoRE9NRGVidWdn
ZXJBZ2VudFN0YXRlOjp4aHJCcmVha3BvaW50cyk7CiAgICAgICAgIGZvciAoSW5zcGVjdG9yT2Jq
ZWN0OjppdGVyYXRvciBpdCA9IHhockJyZWFrcG9pbnRzLT5iZWdpbigpOyBpdCAhPSB4aHJCcmVh
a3BvaW50cy0+ZW5kKCk7ICsraXQpIHsKLSAgICAgICAgICAgIGlmICh1cmwuY29udGFpbnMoaXQt
PmZpcnN0KSkgewotICAgICAgICAgICAgICAgIGJyZWFrcG9pbnRVUkwgPSBpdC0+Zmlyc3Q7Cisg
ICAgICAgICAgICBpZiAodXJsLmNvbnRhaW5zKGl0LT5rZXkpKSB7CisgICAgICAgICAgICAgICAg
YnJlYWtwb2ludFVSTCA9IGl0LT5rZXk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JET01TdG9yYWdlQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5jcHAKaW5kZXggOTBhMGE5ZTYwOTBlMGMyYzM5ZDc4Njlm
NDAyZDQzMmIzYTJiZjZmMC4uYzMyZWEyOTg3NmRkOWVlMTdiYzJlNjFlMGQ3ZTY4NzA2YTEyNTM3
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3Jh
Z2VBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0
b3JhZ2VBZ2VudC5jcHAKQEAgLTc3LDcgKzc3LDcgQEAgdm9pZCBJbnNwZWN0b3JET01TdG9yYWdl
QWdlbnQ6OmNsZWFyRnJvbnRlbmQoKQogewogICAgIERPTVN0b3JhZ2VSZXNvdXJjZXNNYXA6Oml0
ZXJhdG9yIGRvbVN0b3JhZ2VFbmQgPSBtX3Jlc291cmNlcy5lbmQoKTsKICAgICBmb3IgKERPTVN0
b3JhZ2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMuYmVnaW4oKTsgaXQg
IT0gZG9tU3RvcmFnZUVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+dW5iaW5kKCk7Cisg
ICAgICAgIGl0LT52YWx1ZS0+dW5iaW5kKCk7CiAgICAgbV9mcm9udGVuZCA9IDA7CiAgICAgZGlz
YWJsZSgwKTsKIH0KQEAgLTk2LDcgKzk2LDcgQEAgdm9pZCBJbnNwZWN0b3JET01TdG9yYWdlQWdl
bnQ6OmVuYWJsZShFcnJvclN0cmluZyopCiAKICAgICBET01TdG9yYWdlUmVzb3VyY2VzTWFwOjpp
dGVyYXRvciByZXNvdXJjZXNFbmQgPSBtX3Jlc291cmNlcy5lbmQoKTsKICAgICBmb3IgKERPTVN0
b3JhZ2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMuYmVnaW4oKTsgaXQg
IT0gcmVzb3VyY2VzRW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5iaW5kKG1fZnJvbnRl
bmQpOworICAgICAgICBpdC0+dmFsdWUtPmJpbmQobV9mcm9udGVuZCk7CiB9CiAKIHZvaWQgSW5z
cGVjdG9yRE9NU3RvcmFnZUFnZW50OjpkaXNhYmxlKEVycm9yU3RyaW5nKikKQEAgLTE2NSw4ICsx
NjUsOCBAQCBTdHJpbmcgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpzdG9yYWdlSWQoU2VjdXJp
dHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luLCBib29sCiAgICAgQVNTRVJUKHNlY3VyaXR5T3JpZ2lu
KTsKICAgICBET01TdG9yYWdlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBkb21TdG9yYWdlRW5kID0g
bV9yZXNvdXJjZXMuZW5kKCk7CiAgICAgZm9yIChET01TdG9yYWdlUmVzb3VyY2VzTWFwOjppdGVy
YXRvciBpdCA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGRvbVN0b3JhZ2VFbmQ7ICsraXQp
IHsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQtPmlzU2FtZU9yaWdpbkFuZFR5cGUoc2VjdXJpdHlP
cmlnaW4sIGlzTG9jYWxTdG9yYWdlKSkKLSAgICAgICAgICAgIHJldHVybiBpdC0+Zmlyc3Q7Cisg
ICAgICAgIGlmIChpdC0+dmFsdWUtPmlzU2FtZU9yaWdpbkFuZFR5cGUoc2VjdXJpdHlPcmlnaW4s
IGlzTG9jYWxTdG9yYWdlKSkKKyAgICAgICAgICAgIHJldHVybiBpdC0+a2V5OwogICAgIH0KICAg
ICByZXR1cm4gU3RyaW5nKCk7CiB9CkBAIC0xNzYsMTQgKzE3NiwxNCBAQCBJbnNwZWN0b3JET01T
dG9yYWdlUmVzb3VyY2UqIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6Z2V0RE9NU3RvcmFnZVJl
c291cmNlRm9ySQogICAgIERPTVN0b3JhZ2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9y
ZXNvdXJjZXMuZmluZChzdG9yYWdlSWQpOwogICAgIGlmIChpdCA9PSBtX3Jlc291cmNlcy5lbmQo
KSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQuZ2V0KCk7CisgICAg
cmV0dXJuIGl0LT52YWx1ZS5nZXQoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JET01TdG9yYWdlQWdl
bnQ6OmRpZFVzZURPTVN0b3JhZ2UoU3RvcmFnZUFyZWEqIHN0b3JhZ2VBcmVhLCBib29sIGlzTG9j
YWxTdG9yYWdlLCBGcmFtZSogZnJhbWUpCiB7CiAgICAgRE9NU3RvcmFnZVJlc291cmNlc01hcDo6
aXRlcmF0b3IgZG9tU3RvcmFnZUVuZCA9IG1fcmVzb3VyY2VzLmVuZCgpOwogICAgIGZvciAoRE9N
U3RvcmFnZVJlc291cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5iZWdpbigpOyBp
dCAhPSBkb21TdG9yYWdlRW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kLT5pc1Nh
bWVPcmlnaW5BbmRUeXBlKGZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLCBpc0xv
Y2FsU3RvcmFnZSkpCisgICAgICAgIGlmIChpdC0+dmFsdWUtPmlzU2FtZU9yaWdpbkFuZFR5cGUo
ZnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCksIGlzTG9jYWxTdG9yYWdlKSkKICAg
ICAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTIxOCw3ICsyMTgsNyBAQCBzaXplX3QgSW5z
cGVjdG9yRE9NU3RvcmFnZUFnZW50OjptZW1vcnlCeXRlc1VzZWRCeVN0b3JhZ2VDYWNoZSgpIGNv
bnN0CiB7CiAgICAgc2l6ZV90IHNpemUgPSAwOwogICAgIGZvciAoRE9NU3RvcmFnZVJlc291cmNl
c01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSBtX3Jl
c291cmNlcy5lbmQoKTsgKytpdCkKLSAgICAgICAgc2l6ZSArPSBpdC0+c2Vjb25kLT5zdG9yYWdl
QXJlYSgpLT5tZW1vcnlCeXRlc1VzZWRCeUNhY2hlKCk7CisgICAgICAgIHNpemUgKz0gaXQtPnZh
bHVlLT5zdG9yYWdlQXJlYSgpLT5tZW1vcnlCeXRlc1VzZWRCeUNhY2hlKCk7CiAgICAgcmV0dXJu
IHNpemU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JEYXRhYmFzZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JE
YXRhYmFzZUFnZW50LmNwcAppbmRleCAxMDk5YzQwNTljYTNkNzQ1MjFhNmUzZDFjNmYzNTAxMzFi
NGNmYjZjLi4wYzIwYTNjN2NlN2I2ZTcxMzE0NTVhNTk2NzgyYTIzZDFiYmFlNGUzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuY3Bw
CkBAIC0yNDUsNyArMjQ1LDcgQEAgdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjplbmFibGUo
RXJyb3JTdHJpbmcqKQogCiAgICAgRGF0YWJhc2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGRhdGFi
YXNlc0VuZCA9IG1fcmVzb3VyY2VzLmVuZCgpOwogICAgIGZvciAoRGF0YWJhc2VSZXNvdXJjZXNN
YXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZGF0YWJhc2VzRW5k
OyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5iaW5kKG1fZnJvbnRlbmQpOworICAgICAgICBp
dC0+dmFsdWUtPmJpbmQobV9mcm9udGVuZCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VB
Z2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyopCkBAIC0zMDMsOCArMzAzLDggQEAgdm9pZCBJbnNw
ZWN0b3JEYXRhYmFzZUFnZW50OjpleGVjdXRlU1FMKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5n
JiBkYXRhYmFzZUlkLAogU3RyaW5nIEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmRhdGFiYXNlSWQo
RGF0YWJhc2UqIGRhdGFiYXNlKQogewogICAgIGZvciAoRGF0YWJhc2VSZXNvdXJjZXNNYXA6Oml0
ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gbV9yZXNvdXJjZXMuZW5kKCk7
ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQtPmRhdGFiYXNlKCkgPT0gZGF0YWJhc2Up
Ci0gICAgICAgICAgICByZXR1cm4gaXQtPmZpcnN0OworICAgICAgICBpZiAoaXQtPnZhbHVlLT5k
YXRhYmFzZSgpID09IGRhdGFiYXNlKQorICAgICAgICAgICAgcmV0dXJuIGl0LT5rZXk7CiAgICAg
fQogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KQEAgLTMxMiw4ICszMTIsOCBAQCBTdHJpbmcgSW5z
cGVjdG9yRGF0YWJhc2VBZ2VudDo6ZGF0YWJhc2VJZChEYXRhYmFzZSogZGF0YWJhc2UpCiBJbnNw
ZWN0b3JEYXRhYmFzZVJlc291cmNlKiBJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjpmaW5kQnlGaWxl
TmFtZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKQogewogICAgIGZvciAoRGF0YWJhc2VSZXNvdXJj
ZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gbV9yZXNvdXJj
ZXMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQtPmRhdGFiYXNlKCktPmZp
bGVOYW1lKCkgPT0gZmlsZU5hbWUpCi0gICAgICAgICAgICByZXR1cm4gaXQtPnNlY29uZC5nZXQo
KTsKKyAgICAgICAgaWYgKGl0LT52YWx1ZS0+ZGF0YWJhc2UoKS0+ZmlsZU5hbWUoKSA9PSBmaWxl
TmFtZSkKKyAgICAgICAgICAgIHJldHVybiBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgfQogICAgIHJl
dHVybiAwOwogfQpAQCAtMzIzLDcgKzMyMyw3IEBAIERhdGFiYXNlKiBJbnNwZWN0b3JEYXRhYmFz
ZUFnZW50OjpkYXRhYmFzZUZvcklkKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VJZCkKICAgICBEYXRh
YmFzZVJlc291cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5maW5kKGRhdGFiYXNl
SWQpOwogICAgIGlmIChpdCA9PSBtX3Jlc291cmNlcy5lbmQoKSkKICAgICAgICAgcmV0dXJuIDA7
Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQtPmRhdGFiYXNlKCk7CisgICAgcmV0dXJuIGl0LT52YWx1
ZS0+ZGF0YWJhc2UoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IGFh
MDQ3YzkxNDA0N2U0OTI5NWE1MDAyZjA0ZDczZGFkM2FhZjAwNDMuLjJkNDQxMGNkZjU3OWExOTMw
ZjAwODQ3NzdmMzEyMzExN2I4NDQ1NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAKQEAgLTI0OCw5ICsyNDgsOSBAQCB2b2lk
IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnRCeVVybChFcnJvclN0cmluZyog
ZXJyb3JTdHJpbmcsIGludCBsaQogCiAgICAgU2NyaXB0QnJlYWtwb2ludCBicmVha3BvaW50KGxp
bmVOdW1iZXIsIGNvbHVtbk51bWJlciwgY29uZGl0aW9uKTsKICAgICBmb3IgKFNjcmlwdHNNYXA6
Oml0ZXJhdG9yIGl0ID0gbV9zY3JpcHRzLmJlZ2luKCk7IGl0ICE9IG1fc2NyaXB0cy5lbmQoKTsg
KytpdCkgewotICAgICAgICBpZiAoIW1hdGNoZXMoaXQtPnNlY29uZC51cmwsIHVybCwgaXNSZWdl
eCkpCisgICAgICAgIGlmICghbWF0Y2hlcyhpdC0+dmFsdWUudXJsLCB1cmwsIGlzUmVnZXgpKQog
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6RGVidWdn
ZXI6OkxvY2F0aW9uPiBsb2NhdGlvbiA9IHJlc29sdmVCcmVha3BvaW50KGJyZWFrcG9pbnRJZCwg
aXQtPmZpcnN0LCBicmVha3BvaW50KTsKKyAgICAgICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpEZWJ1
Z2dlcjo6TG9jYXRpb24+IGxvY2F0aW9uID0gcmVzb2x2ZUJyZWFrcG9pbnQoYnJlYWtwb2ludElk
LCBpdC0+a2V5LCBicmVha3BvaW50KTsKICAgICAgICAgaWYgKGxvY2F0aW9uKQogICAgICAgICAg
ICAgbG9jYXRpb25zLT5hZGRJdGVtKGxvY2F0aW9uKTsKICAgICB9CkBAIC0zMDIsOCArMzAyLDgg
QEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZW1vdmVCcmVha3BvaW50KEVycm9yU3Ry
aW5nKiwgY29uc3QgU3RyaW5nJiBicmVha3AKICAgICBCcmVha3BvaW50SWRUb0RlYnVnU2VydmVy
QnJlYWtwb2ludElkc01hcDo6aXRlcmF0b3IgZGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzSXRlcmF0
b3IgPSBtX2JyZWFrcG9pbnRJZFRvRGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzLmZpbmQoYnJlYWtw
b2ludElkKTsKICAgICBpZiAoZGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzSXRlcmF0b3IgPT0gbV9i
cmVha3BvaW50SWRUb0RlYnVnU2VydmVyQnJlYWtwb2ludElkcy5lbmQoKSkKICAgICAgICAgcmV0
dXJuOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGVidWdTZXJ2ZXJCcmVha3BvaW50SWRz
SXRlcmF0b3ItPnNlY29uZC5zaXplKCk7ICsraSkKLSAgICAgICAgc2NyaXB0RGVidWdTZXJ2ZXIo
KS5yZW1vdmVCcmVha3BvaW50KGRlYnVnU2VydmVyQnJlYWtwb2ludElkc0l0ZXJhdG9yLT5zZWNv
bmRbaV0pOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGVidWdTZXJ2ZXJCcmVha3BvaW50
SWRzSXRlcmF0b3ItPnZhbHVlLnNpemUoKTsgKytpKQorICAgICAgICBzY3JpcHREZWJ1Z1NlcnZl
cigpLnJlbW92ZUJyZWFrcG9pbnQoZGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzSXRlcmF0b3ItPnZh
bHVlW2ldKTsKICAgICBtX2JyZWFrcG9pbnRJZFRvRGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzLnJl
bW92ZShkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNJdGVyYXRvcik7CiB9CiAKQEAgLTMzMSw3ICsz
MzEsNyBAQCBQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRpb24+IEluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQ6OnJlc29sdmVCcmVhawogICAgIFNjcmlwdHNNYXA6Oml0ZXJhdG9y
IHNjcmlwdEl0ZXJhdG9yID0gbV9zY3JpcHRzLmZpbmQoc2NyaXB0SWQpOwogICAgIGlmIChzY3Jp
cHRJdGVyYXRvciA9PSBtX3NjcmlwdHMuZW5kKCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIFNj
cmlwdCYgc2NyaXB0ID0gc2NyaXB0SXRlcmF0b3ItPnNlY29uZDsKKyAgICBTY3JpcHQmIHNjcmlw
dCA9IHNjcmlwdEl0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoYnJlYWtwb2ludC5saW5lTnVtYmVy
IDwgc2NyaXB0LnN0YXJ0TGluZSB8fCBzY3JpcHQuZW5kTGluZSA8IGJyZWFrcG9pbnQubGluZU51
bWJlcikKICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTM0NCw3ICszNDQsNyBAQCBQYXNzUmVmUHRy
PFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRpb24+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OnJlc29sdmVCcmVhawogICAgIEJyZWFrcG9pbnRJZFRvRGVidWdTZXJ2ZXJCcmVha3BvaW50SWRz
TWFwOjppdGVyYXRvciBkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNJdGVyYXRvciA9IG1fYnJlYWtw
b2ludElkVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHMuZmluZChicmVha3BvaW50SWQpOwogICAg
IGlmIChkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNJdGVyYXRvciA9PSBtX2JyZWFrcG9pbnRJZFRv
RGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzLmVuZCgpKQogICAgICAgICBkZWJ1Z1NlcnZlckJyZWFr
cG9pbnRJZHNJdGVyYXRvciA9IG1fYnJlYWtwb2ludElkVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJ
ZHMuc2V0KGJyZWFrcG9pbnRJZCwgVmVjdG9yPFN0cmluZz4oKSkuaXRlcmF0b3I7Ci0gICAgZGVi
dWdTZXJ2ZXJCcmVha3BvaW50SWRzSXRlcmF0b3ItPnNlY29uZC5hcHBlbmQoZGVidWdTZXJ2ZXJC
cmVha3BvaW50SWQpOworICAgIGRlYnVnU2VydmVyQnJlYWtwb2ludElkc0l0ZXJhdG9yLT52YWx1
ZS5hcHBlbmQoZGVidWdTZXJ2ZXJCcmVha3BvaW50SWQpOwogCiAgICAgUmVmUHRyPFR5cGVCdWls
ZGVyOjpEZWJ1Z2dlcjo6TG9jYXRpb24+IGxvY2F0aW9uID0gVHlwZUJ1aWxkZXI6OkRlYnVnZ2Vy
OjpMb2NhdGlvbjo6Y3JlYXRlKCkKICAgICAgICAgLnNldFNjcmlwdElkKHNjcmlwdElkKQpAQCAt
MzcwLDcgKzM3MCw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2VhcmNoSW5Db250
ZW50KEVycm9yU3RyaW5nKiBlcnJvciwgY29uc3QgU3RyaW5nJiBzCiAKICAgICBTY3JpcHRzTWFw
OjppdGVyYXRvciBpdCA9IG1fc2NyaXB0cy5maW5kKHNjcmlwdElkKTsKICAgICBpZiAoaXQgIT0g
bV9zY3JpcHRzLmVuZCgpKQotICAgICAgICByZXN1bHRzID0gQ29udGVudFNlYXJjaFV0aWxzOjpz
ZWFyY2hJblRleHRCeUxpbmVzKGl0LT5zZWNvbmQuc291cmNlLCBxdWVyeSwgY2FzZVNlbnNpdGl2
ZSwgaXNSZWdleCk7CisgICAgICAgIHJlc3VsdHMgPSBDb250ZW50U2VhcmNoVXRpbHM6OnNlYXJj
aEluVGV4dEJ5TGluZXMoaXQtPnZhbHVlLnNvdXJjZSwgcXVlcnksIGNhc2VTZW5zaXRpdmUsIGlz
UmVnZXgpOwogICAgIGVsc2UKICAgICAgICAgKmVycm9yID0gIk5vIHNjcmlwdCBmb3IgaWQ6ICIg
KyBzY3JpcHRJZDsKIH0KQEAgLTQwMyw3ICs0MDMsNyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OmdldFNjcmlwdFNvdXJjZShFcnJvclN0cmluZyogZXJyb3IsIGNvbnN0IFN0cmluZyYg
cwogewogICAgIFNjcmlwdHNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zY3JpcHRzLmZpbmQoc2NyaXB0
SWQpOwogICAgIGlmIChpdCAhPSBtX3NjcmlwdHMuZW5kKCkpCi0gICAgICAgICpzY3JpcHRTb3Vy
Y2UgPSBpdC0+c2Vjb25kLnNvdXJjZTsKKyAgICAgICAgKnNjcmlwdFNvdXJjZSA9IGl0LT52YWx1
ZS5zb3VyY2U7CiAgICAgZWxzZQogICAgICAgICAqZXJyb3IgPSAiTm8gc2NyaXB0IGZvciBpZDog
IiArIHNjcmlwdElkOwogfQpAQCAtNjM5LDcgKzYzOSw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudDo6ZGlkUGFyc2VTb3VyY2UoY29uc3QgU3RyaW5nJiBzY3JpcHRJZCwgY29uc3QgU2Ny
aXB0CiAKICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBicmVha3BvaW50c0Nvb2tpZSA9IG1f
c3RhdGUtPmdldE9iamVjdChEZWJ1Z2dlckFnZW50U3RhdGU6OmphdmFTY3JpcHRCcmVha3BvaW50
cyk7CiAgICAgZm9yIChJbnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9yIGl0ID0gYnJlYWtwb2ludHND
b29raWUtPmJlZ2luKCk7IGl0ICE9IGJyZWFrcG9pbnRzQ29va2llLT5lbmQoKTsgKytpdCkgewot
ICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBicmVha3BvaW50T2JqZWN0ID0gaXQtPnNl
Y29uZC0+YXNPYmplY3QoKTsKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnJlYWtw
b2ludE9iamVjdCA9IGl0LT52YWx1ZS0+YXNPYmplY3QoKTsKICAgICAgICAgYm9vbCBpc1JlZ2V4
OwogICAgICAgICBicmVha3BvaW50T2JqZWN0LT5nZXRCb29sZWFuKCJpc1JlZ2V4IiwgJmlzUmVn
ZXgpOwogICAgICAgICBTdHJpbmcgdXJsOwpAQCAtNjUwLDkgKzY1MCw5IEBAIHZvaWQgSW5zcGVj
dG9yRGVidWdnZXJBZ2VudDo6ZGlkUGFyc2VTb3VyY2UoY29uc3QgU3RyaW5nJiBzY3JpcHRJZCwg
Y29uc3QgU2NyaXB0CiAgICAgICAgIGJyZWFrcG9pbnRPYmplY3QtPmdldE51bWJlcigibGluZU51
bWJlciIsICZicmVha3BvaW50LmxpbmVOdW1iZXIpOwogICAgICAgICBicmVha3BvaW50T2JqZWN0
LT5nZXROdW1iZXIoImNvbHVtbk51bWJlciIsICZicmVha3BvaW50LmNvbHVtbk51bWJlcik7CiAg
ICAgICAgIGJyZWFrcG9pbnRPYmplY3QtPmdldFN0cmluZygiY29uZGl0aW9uIiwgJmJyZWFrcG9p
bnQuY29uZGl0aW9uKTsKLSAgICAgICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9j
YXRpb24+IGxvY2F0aW9uID0gcmVzb2x2ZUJyZWFrcG9pbnQoaXQtPmZpcnN0LCBzY3JpcHRJZCwg
YnJlYWtwb2ludCk7CisgICAgICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0
aW9uPiBsb2NhdGlvbiA9IHJlc29sdmVCcmVha3BvaW50KGl0LT5rZXksIHNjcmlwdElkLCBicmVh
a3BvaW50KTsKICAgICAgICAgaWYgKGxvY2F0aW9uKQotICAgICAgICAgICAgbV9mcm9udGVuZC0+
YnJlYWtwb2ludFJlc29sdmVkKGl0LT5maXJzdCwgbG9jYXRpb24pOworICAgICAgICAgICAgbV9m
cm9udGVuZC0+YnJlYWtwb2ludFJlc29sdmVkKGl0LT5rZXksIGxvY2F0aW9uKTsKICAgICB9CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVk
REJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERC
QWdlbnQuY3BwCmluZGV4IGYxMmJkMGRhY2Y4ZTMwYWZiOGRmMjU1ODZlNTkxNTVjNmQ4ZDJjNDMu
LjZjNDJlNjY2ZTFmMjI3MTk2M2VhMWNhODZiMGZiMzlmMGNjMWY0ZmIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcApAQCAt
MzA1LDEyICszMDUsMTIgQEAgcHVibGljOgogICAgICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFy
cmF5PFR5cGVCdWlsZGVyOjpJbmRleGVkREI6Ok9iamVjdFN0b3JlPiA+IG9iamVjdFN0b3JlcyA9
IFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6SW5kZXhlZERCOjpPYmplY3RTdG9yZT46
OmNyZWF0ZSgpOwogCiAgICAgICAgIGZvciAoSURCRGF0YWJhc2VNZXRhZGF0YTo6T2JqZWN0U3Rv
cmVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZGF0YWJhc2VNZXRhZGF0YS5vYmplY3RTdG9yZXMu
YmVnaW4oKTsgaXQgIT0gZGF0YWJhc2VNZXRhZGF0YS5vYmplY3RTdG9yZXMuZW5kKCk7ICsraXQp
IHsKLSAgICAgICAgICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3Jl
TWV0YWRhdGEgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgY29uc3QgSURCT2JqZWN0U3RvcmVN
ZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSA9IGl0LT52YWx1ZTsKIAogICAgICAgICAgICAg
UmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6SW5kZXhlZERCOjpPYmplY3RT
dG9yZUluZGV4PiA+IGluZGV4ZXMgPSBUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6Oklu
ZGV4ZWREQjo6T2JqZWN0U3RvcmVJbmRleD46OmNyZWF0ZSgpOwogCiAgICAgICAgICAgICBmb3Ig
KElEQk9iamVjdFN0b3JlTWV0YWRhdGE6OkluZGV4TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG9i
amVjdFN0b3JlTWV0YWRhdGEuaW5kZXhlcy5iZWdpbigpOyBpdCAhPSBvYmplY3RTdG9yZU1ldGFk
YXRhLmluZGV4ZXMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBJREJJbmRl
eE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgICAgICBj
b25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhID0gaXQtPnZhbHVlOwogCiAgICAg
ICAgICAgICAgICAgUmVmUHRyPE9iamVjdFN0b3JlSW5kZXg+IG9iamVjdFN0b3JlSW5kZXggPSBP
YmplY3RTdG9yZUluZGV4OjpjcmVhdGUoKQogICAgICAgICAgICAgICAgICAgICAuc2V0TmFtZShp
bmRleE1ldGFkYXRhLm5hbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yTWVtb3J5QWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3Rvck1lbW9yeUFnZW50LmNwcAppbmRleCAyY2VmOWFkNTZkMWVmYjk4NDgyYWY5YzdkM2MzYjhm
MTZjM2I1NzYxLi4yMzUzMDRjM2ZkMDYyMTYyYmExZWM4YzAzYjg2MWM3ZDM4M2E4MzdhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTWVtb3J5QWdlbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JNZW1vcnlBZ2VudC5jcHAK
QEAgLTE0NCw4ICsxNDQsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBSZWZQdHI8VHlwZUJ1
aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpNZW1vcnk6Ok5vZGVDb3VudD4gPiBjaGlsZHJlblN0
YXRzID0gVHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpNZW1vcnk6Ok5vZGVDb3VudD46
OmNyZWF0ZSgpOwogICAgICAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBpbnQ+OjppdGVyYXRvciBp
dCA9IG1fbm9kZU5hbWVUb0NvdW50LmJlZ2luKCk7IGl0ICE9IG1fbm9kZU5hbWVUb0NvdW50LmVu
ZCgpOyArK2l0KSB7Ci0gICAgICAgICAgICBSZWZQdHI8Tm9kZUNvdW50PiBub2RlQ291bnQgPSBO
b2RlQ291bnQ6OmNyZWF0ZSgpLnNldE5vZGVOYW1lKGl0LT5maXJzdCkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0Q291bnQo
aXQtPnNlY29uZCk7CisgICAgICAgICAgICBSZWZQdHI8Tm9kZUNvdW50PiBub2RlQ291bnQgPSBO
b2RlQ291bnQ6OmNyZWF0ZSgpLnNldE5vZGVOYW1lKGl0LT5rZXkpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldENvdW50KGl0
LT52YWx1ZSk7CiAgICAgICAgICAgICBjaGlsZHJlblN0YXRzLT5hZGRJdGVtKG5vZGVDb3VudCk7
CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGNoaWxkcmVuU3RhdHMucmVsZWFzZSgpOwpAQCAt
MTU1LDggKzE1NSw4IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIFJlZlB0cjxUeXBlQnVpbGRl
cjo6QXJyYXk8VHlwZUJ1aWxkZXI6Ok1lbW9yeTo6TGlzdGVuZXJDb3VudD4gPiBsaXN0ZW5lclN0
YXRzID0gVHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpNZW1vcnk6Okxpc3RlbmVyQ291
bnQ+OjpjcmVhdGUoKTsKICAgICAgICAgZm9yIChIYXNoTWFwPEF0b21pY1N0cmluZywgaW50Pjo6
aXRlcmF0b3IgaXQgPSBtX2V2ZW50VHlwZVRvQ291bnQuYmVnaW4oKTsgaXQgIT0gbV9ldmVudFR5
cGVUb0NvdW50LmVuZCgpOyArK2l0KSB7Ci0gICAgICAgICAgICBSZWZQdHI8TGlzdGVuZXJDb3Vu
dD4gbGlzdGVuZXJDb3VudCA9IExpc3RlbmVyQ291bnQ6OmNyZWF0ZSgpLnNldFR5cGUoaXQtPmZp
cnN0KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC5zZXRDb3VudChpdC0+c2Vjb25kKTsKKyAgICAgICAgICAg
IFJlZlB0cjxMaXN0ZW5lckNvdW50PiBsaXN0ZW5lckNvdW50ID0gTGlzdGVuZXJDb3VudDo6Y3Jl
YXRlKCkuc2V0VHlwZShpdC0+a2V5KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRDb3VudChpdC0+dmFs
dWUpOwogICAgICAgICAgICAgbGlzdGVuZXJTdGF0cy0+YWRkSXRlbShsaXN0ZW5lckNvdW50KTsK
ICAgICAgICAgfQogICAgICAgICByZXR1cm4gbGlzdGVuZXJTdGF0cy5yZWxlYXNlKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCmluZGV4IGZh
MjNhYWFmOWJlZDBmNTQ4NGMxNTcwZWMzNmYyZDNlOTBmY2M4ZGEuLjc5Y2YyNGRiYWM2OGFiMWVm
MzM1YTYxNzRkNDViYThmYjI4OWRlNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCkBAIC00NTksNyArNDU5LDcgQEAgc3RhdGljIFZlY3Rv
cjxDYWNoZWRSZXNvdXJjZSo+IGNhY2hlZFJlc291cmNlc0ZvckZyYW1lKEZyYW1lKiBmcmFtZSkK
ICAgICBjb25zdCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6RG9jdW1lbnRSZXNvdXJjZU1hcCYgYWxs
UmVzb3VyY2VzID0gZnJhbWUtPmRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCktPmFs
bENhY2hlZFJlc291cmNlcygpOwogICAgIENhY2hlZFJlc291cmNlTG9hZGVyOjpEb2N1bWVudFJl
c291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBhbGxSZXNvdXJjZXMuZW5kKCk7CiAgICAg
Zm9yIChDYWNoZWRSZXNvdXJjZUxvYWRlcjo6RG9jdW1lbnRSZXNvdXJjZU1hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBhbGxSZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAg
ICAgIENhY2hlZFJlc291cmNlKiBjYWNoZWRSZXNvdXJjZSA9IGl0LT5zZWNvbmQuZ2V0KCk7Cisg
ICAgICAgIENhY2hlZFJlc291cmNlKiBjYWNoZWRSZXNvdXJjZSA9IGl0LT52YWx1ZS5nZXQoKTsK
IAogICAgICAgICBzd2l0Y2ggKGNhY2hlZFJlc291cmNlLT50eXBlKCkpIHsKICAgICAgICAgY2Fz
ZSBDYWNoZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJjZToKQEAgLTc2Myw3ICs3NjMsNyBAQCB2b2lk
IEluc3BlY3RvclBhZ2VBZ2VudDo6ZGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxkKEZyYW1lKiBm
cmFtZSwgRE9NV3JhcHBlcldvcgogICAgICAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IHNjcmlwdHMtPmVuZCgpOwogICAgICAgICBmb3IgKEluc3BlY3Rvck9iamVjdDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBzY3JpcHRzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
ICAgICAgICAgICAgIFN0cmluZyBzY3JpcHRUZXh0OwotICAgICAgICAgICAgaWYgKGl0LT5zZWNv
bmQtPmFzU3RyaW5nKCZzY3JpcHRUZXh0KSkKKyAgICAgICAgICAgIGlmIChpdC0+dmFsdWUtPmFz
U3RyaW5nKCZzY3JpcHRUZXh0KSkKICAgICAgICAgICAgICAgICBtX2luamVjdGVkU2NyaXB0TWFu
YWdlci0+aW5qZWN0U2NyaXB0KHNjcmlwdFRleHQsIG1haW5Xb3JsZFNjcmlwdFN0YXRlKGZyYW1l
KSk7CiAgICAgICAgIH0KICAgICB9CkBAIC03OTUsOCArNzk1LDggQEAgdm9pZCBJbnNwZWN0b3JQ
YWdlQWdlbnQ6OmZyYW1lRGV0YWNoZWQoRnJhbWUqIGZyYW1lKQogewogICAgIEhhc2hNYXA8RnJh
bWUqLCBTdHJpbmc+OjppdGVyYXRvciBpdGVyYXRvciA9IG1fZnJhbWVUb0lkZW50aWZpZXIuZmlu
ZChmcmFtZSk7CiAgICAgaWYgKGl0ZXJhdG9yICE9IG1fZnJhbWVUb0lkZW50aWZpZXIuZW5kKCkp
IHsKLSAgICAgICAgbV9mcm9udGVuZC0+ZnJhbWVEZXRhY2hlZChpdGVyYXRvci0+c2Vjb25kKTsK
LSAgICAgICAgbV9pZGVudGlmaWVyVG9GcmFtZS5yZW1vdmUoaXRlcmF0b3ItPnNlY29uZCk7Cisg
ICAgICAgIG1fZnJvbnRlbmQtPmZyYW1lRGV0YWNoZWQoaXRlcmF0b3ItPnZhbHVlKTsKKyAgICAg
ICAgbV9pZGVudGlmaWVyVG9GcmFtZS5yZW1vdmUoaXRlcmF0b3ItPnZhbHVlKTsKICAgICAgICAg
bV9mcmFtZVRvSWRlbnRpZmllci5yZW1vdmUoaXRlcmF0b3IpOwogICAgIH0KIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcAppbmRl
eCA0NTQwYWE3Y2Q4MWU0YWNhNjFhZmQ0YTg4OTIxZTU3NmViM2MyY2FhLi5jMzI1MWEzZDEwYzcz
NzRkMTQwODk3NGY5ZDk3MDY3Y2RiOTE1NmU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwCkBAIC0yNDksMTAgKzI0OSwxMCBA
QCB2b2lkIEluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmdldFByb2ZpbGVIZWFkZXJzKEVycm9yU3Ry
aW5nKiwgUmVmUHRyPFR5cGVCdWlsZGVyOgogCiAgICAgUHJvZmlsZXNNYXA6Oml0ZXJhdG9yIHBy
b2ZpbGVzRW5kID0gbV9wcm9maWxlcy5lbmQoKTsKICAgICBmb3IgKFByb2ZpbGVzTWFwOjppdGVy
YXRvciBpdCA9IG1fcHJvZmlsZXMuYmVnaW4oKTsgaXQgIT0gcHJvZmlsZXNFbmQ7ICsraXQpCi0g
ICAgICAgIGhlYWRlcnMtPmFkZEl0ZW0oY3JlYXRlUHJvZmlsZUhlYWRlcigqaXQtPnNlY29uZCkp
OworICAgICAgICBoZWFkZXJzLT5hZGRJdGVtKGNyZWF0ZVByb2ZpbGVIZWFkZXIoKml0LT52YWx1
ZSkpOwogICAgIEhlYXBTbmFwc2hvdHNNYXA6Oml0ZXJhdG9yIHNuYXBzaG90c0VuZCA9IG1fc25h
cHNob3RzLmVuZCgpOwogICAgIGZvciAoSGVhcFNuYXBzaG90c01hcDo6aXRlcmF0b3IgaXQgPSBt
X3NuYXBzaG90cy5iZWdpbigpOyBpdCAhPSBzbmFwc2hvdHNFbmQ7ICsraXQpCi0gICAgICAgIGhl
YWRlcnMtPmFkZEl0ZW0oY3JlYXRlU25hcHNob3RIZWFkZXIoKml0LT5zZWNvbmQpKTsKKyAgICAg
ICAgaGVhZGVycy0+YWRkSXRlbShjcmVhdGVTbmFwc2hvdEhlYWRlcigqaXQtPnZhbHVlKSk7CiB9
CiAKIG5hbWVzcGFjZSB7CkBAIC0yODAsMTYgKzI4MCwxNiBAQCB2b2lkIEluc3BlY3RvclByb2Zp
bGVyQWdlbnQ6OmdldFByb2ZpbGUoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBTdHJp
bmcmCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgcHJvZmlsZU9iamVj
dCA9IFR5cGVCdWlsZGVyOjpQcm9maWxlcjo6UHJvZmlsZTo6Y3JlYXRlKCk7Ci0gICAgICAgIHBy
b2ZpbGVPYmplY3QtPnNldEhlYWQoaXQtPnNlY29uZC0+YnVpbGRJbnNwZWN0b3JPYmplY3RGb3JI
ZWFkKCkpOwotICAgICAgICBpZiAoaXQtPnNlY29uZC0+Ym90dG9tVXBIZWFkKCkpCi0gICAgICAg
ICAgICBwcm9maWxlT2JqZWN0LT5zZXRCb3R0b21VcEhlYWQoaXQtPnNlY29uZC0+YnVpbGRJbnNw
ZWN0b3JPYmplY3RGb3JCb3R0b21VcEhlYWQoKSk7CisgICAgICAgIHByb2ZpbGVPYmplY3QtPnNl
dEhlYWQoaXQtPnZhbHVlLT5idWlsZEluc3BlY3Rvck9iamVjdEZvckhlYWQoKSk7CisgICAgICAg
IGlmIChpdC0+dmFsdWUtPmJvdHRvbVVwSGVhZCgpKQorICAgICAgICAgICAgcHJvZmlsZU9iamVj
dC0+c2V0Qm90dG9tVXBIZWFkKGl0LT52YWx1ZS0+YnVpbGRJbnNwZWN0b3JPYmplY3RGb3JCb3R0
b21VcEhlYWQoKSk7CiAgICAgfSBlbHNlIGlmICh0eXBlID09IEhlYXBQcm9maWxlVHlwZSkgewog
ICAgICAgICBIZWFwU25hcHNob3RzTWFwOjppdGVyYXRvciBpdCA9IG1fc25hcHNob3RzLmZpbmQo
dWlkKTsKICAgICAgICAgaWYgKGl0ID09IG1fc25hcHNob3RzLmVuZCgpKSB7CiAgICAgICAgICAg
ICAqZXJyb3JTdHJpbmcgPSAiUHJvZmlsZSB3YXNuJ3QgZm91bmQiOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9Ci0gICAgICAgIFJlZlB0cjxTY3JpcHRIZWFwU25hcHNob3Q+IHNuYXBz
aG90ID0gaXQtPnNlY29uZDsKKyAgICAgICAgUmVmUHRyPFNjcmlwdEhlYXBTbmFwc2hvdD4gc25h
cHNob3QgPSBpdC0+dmFsdWU7CiAgICAgICAgIHByb2ZpbGVPYmplY3QgPSBUeXBlQnVpbGRlcjo6
UHJvZmlsZXI6OlByb2ZpbGU6OmNyZWF0ZSgpOwogICAgICAgICBpZiAobV9mcm9udGVuZCkgewog
ICAgICAgICAgICAgT3V0cHV0U3RyZWFtIHN0cmVhbShtX2Zyb250ZW5kLCB1aWQpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuY3BwCmlu
ZGV4IDdkZWZiMzU5NWRjYjFhZGE5MjUyYTdlYjYyMDgzNDU2NjU4YWI0YzQuLjhkZTRkY2FiZTMz
YmY2MmVhM2NlMDM1NDMyZjQ5MGE0ZmNhNmRhOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5jcHAKQEAgLTEwNSw3ICsxMDUsNyBA
QCBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9ySGVhZGVy
cyhjb25zdCBIVFRQSGVhZGVyTWFwJiBoZQogICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGhl
YWRlcnNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIEhUVFBIZWFkZXJN
YXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGhlYWRlcnMuZW5kKCk7CiAgICAgZm9yIChIVFRQSGVh
ZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGhlYWRlcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KQotICAgICAgICBoZWFkZXJzT2JqZWN0LT5zZXRTdHJpbmcoaXQtPmZpcnN0LnN0cmluZygp
LCBpdC0+c2Vjb25kKTsKKyAgICAgICAgaGVhZGVyc09iamVjdC0+c2V0U3RyaW5nKGl0LT5rZXku
c3RyaW5nKCksIGl0LT52YWx1ZSk7CiAgICAgcmV0dXJuIGhlYWRlcnNPYmplY3Q7CiB9CiAKQEAg
LTIxNiw4ICsyMTYsOCBAQCB2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OndpbGxTZW5kUmVx
dWVzdCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIERvY3VtZW50TAogICAgICAgICBJbnNwZWN0
b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGhlYWRlcnMtPmVuZCgpOwogICAgICAgICBm
b3IgKEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBoZWFkZXJzLT5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIFN0cmluZyB2YWx1ZTsKLSAgICAgICAg
ICAgIGlmIChpdC0+c2Vjb25kLT5hc1N0cmluZygmdmFsdWUpKQotICAgICAgICAgICAgICAgIHJl
cXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKGl0LT5maXJzdCwgdmFsdWUpOworICAgICAgICAgICAg
aWYgKGl0LT52YWx1ZS0+YXNTdHJpbmcoJnZhbHVlKSkKKyAgICAgICAgICAgICAgICByZXF1ZXN0
LnNldEhUVFBIZWFkZXJGaWVsZChpdC0+a2V5LCB2YWx1ZSk7CiAgICAgICAgIH0KICAgICB9CiAK
QEAgLTM2NSw3ICszNjUsNyBAQCB2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmRvY3VtZW50
VGhyZWFkYWJsZUxvYWRlclN0YXJ0ZWRMb2FkaW5nRm9yQ2xpZW50KHVucwogICAgIGlmIChpdCA9
PSBtX3BlbmRpbmdYSFJSZXBsYXlEYXRhLmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBY
SFJSZXBsYXlEYXRhKiB4aHJSZXBsYXlEYXRhID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICBYSFJS
ZXBsYXlEYXRhKiB4aHJSZXBsYXlEYXRhID0gaXQtPnZhbHVlLmdldCgpOwogICAgIFN0cmluZyBy
ZXF1ZXN0SWQgPSBJZGVudGlmaWVyc0ZhY3Rvcnk6OnJlcXVlc3RJZChpZGVudGlmaWVyKTsKICAg
ICBtX3Jlc291cmNlc0RhdGEtPnNldFhIUlJlcGxheURhdGEocmVxdWVzdElkLCB4aHJSZXBsYXlE
YXRhKTsKIH0KQEAgLTM3NSw3ICszNzUsNyBAQCB2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6
OndpbGxMb2FkWEhSKFRocmVhZGFibGVMb2FkZXJDbGllbnQqIGNsaWVudCwgY29uc3QgUwogICAg
IFJlZlB0cjxYSFJSZXBsYXlEYXRhPiB4aHJSZXBsYXlEYXRhID0gWEhSUmVwbGF5RGF0YTo6Y3Jl
YXRlKG1ldGhvZCwgdXJsLCBhc3luYywgZm9ybURhdGEsIGluY2x1ZGVDcmVkZW50aWFscyk7CiAg
ICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaGVhZGVycy5lbmQoKTsKICAg
ICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaGVhZGVycy5iZWdpbigp
OyBpdCE9IGVuZDsgKytpdCkKLSAgICAgICAgeGhyUmVwbGF5RGF0YS0+YWRkSGVhZGVyKGl0LT5m
aXJzdCwgaXQtPnNlY29uZCk7CisgICAgICAgIHhoclJlcGxheURhdGEtPmFkZEhlYWRlcihpdC0+
a2V5LCBpdC0+dmFsdWUpOwogICAgIG1fcGVuZGluZ1hIUlJlcGxheURhdGEuc2V0KGNsaWVudCwg
eGhyUmVwbGF5RGF0YSk7CiB9CiAKQEAgLTYyNCw3ICs2MjQsNyBAQCB2b2lkIEluc3BlY3RvclJl
c291cmNlQWdlbnQ6OnJlcGxheVhIUihFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgcmVxdWVz
dElkKQogICAgIHhoci0+b3Blbih4aHJSZXBsYXlEYXRhLT5tZXRob2QoKSwgeGhyUmVwbGF5RGF0
YS0+dXJsKCksIHhoclJlcGxheURhdGEtPmFzeW5jKCksIGNvZGUpOwogICAgIEhUVFBIZWFkZXJN
YXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHhoclJlcGxheURhdGEtPmhlYWRlcnMoKS5lbmQoKTsK
ICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0geGhyUmVwbGF5RGF0
YS0+aGVhZGVycygpLmJlZ2luKCk7IGl0IT0gZW5kOyArK2l0KQotICAgICAgICB4aHItPnNldFJl
cXVlc3RIZWFkZXIoaXQtPmZpcnN0LCBpdC0+c2Vjb25kLCBjb2RlKTsKKyAgICAgICAgeGhyLT5z
ZXRSZXF1ZXN0SGVhZGVyKGl0LT5rZXksIGl0LT52YWx1ZSwgY29kZSk7CiAgICAgeGhyLT5zZW5k
RnJvbUluc3BlY3Rvcih4aHJSZXBsYXlEYXRhLT5mb3JtRGF0YSgpLCBjb2RlKTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5jcHAKaW5kZXggNzBhMjQzOTg0
N2M0NTdjMzhhMzkwYTMzMDA0YTNkOWUxYjFkYjQxZC4uYmFmMTBjOTcxZTExOTUzMjU3NmJmNDk0
NTUyMmYzN2IwODMyNWFmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclN0YXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
U3RhdGUuY3BwCkBAIC04MCw3ICs4MCw3IEBAIGJvb2wgSW5zcGVjdG9yU3RhdGU6OmdldEJvb2xl
YW4oY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCiAgICAgSW5zcGVjdG9yT2JqZWN0OjppdGVy
YXRvciBpdCA9IG1fcHJvcGVydGllcy0+ZmluZChwcm9wZXJ0eU5hbWUpOwogICAgIGJvb2wgdmFs
dWUgPSBmYWxzZTsKICAgICBpZiAoaXQgIT0gbV9wcm9wZXJ0aWVzLT5lbmQoKSkKLSAgICAgICAg
aXQtPnNlY29uZC0+YXNCb29sZWFuKCZ2YWx1ZSk7CisgICAgICAgIGl0LT52YWx1ZS0+YXNCb29s
ZWFuKCZ2YWx1ZSk7CiAgICAgcmV0dXJuIHZhbHVlOwogfQogCkBAIC04OSw3ICs4OSw3IEBAIFN0
cmluZyBJbnNwZWN0b3JTdGF0ZTo6Z2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1l
KQogICAgIEluc3BlY3Rvck9iamVjdDo6aXRlcmF0b3IgaXQgPSBtX3Byb3BlcnRpZXMtPmZpbmQo
cHJvcGVydHlOYW1lKTsKICAgICBTdHJpbmcgdmFsdWU7CiAgICAgaWYgKGl0ICE9IG1fcHJvcGVy
dGllcy0+ZW5kKCkpCi0gICAgICAgIGl0LT5zZWNvbmQtPmFzU3RyaW5nKCZ2YWx1ZSk7CisgICAg
ICAgIGl0LT52YWx1ZS0+YXNTdHJpbmcoJnZhbHVlKTsKICAgICByZXR1cm4gdmFsdWU7CiB9CiAK
QEAgLTk4LDcgKzk4LDcgQEAgbG9uZyBJbnNwZWN0b3JTdGF0ZTo6Z2V0TG9uZyhjb25zdCBTdHJp
bmcmIHByb3BlcnR5TmFtZSkKICAgICBJbnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9yIGl0ID0gbV9w
cm9wZXJ0aWVzLT5maW5kKHByb3BlcnR5TmFtZSk7CiAgICAgbG9uZyB2YWx1ZSA9IDA7CiAgICAg
aWYgKGl0ICE9IG1fcHJvcGVydGllcy0+ZW5kKCkpCi0gICAgICAgIGl0LT5zZWNvbmQtPmFzTnVt
YmVyKCZ2YWx1ZSk7CisgICAgICAgIGl0LT52YWx1ZS0+YXNOdW1iZXIoJnZhbHVlKTsKICAgICBy
ZXR1cm4gdmFsdWU7CiB9CiAKQEAgLTEwNyw3ICsxMDcsNyBAQCBkb3VibGUgSW5zcGVjdG9yU3Rh
dGU6OmdldERvdWJsZShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSkKICAgICBJbnNwZWN0b3JP
YmplY3Q6Oml0ZXJhdG9yIGl0ID0gbV9wcm9wZXJ0aWVzLT5maW5kKHByb3BlcnR5TmFtZSk7CiAg
ICAgZG91YmxlIHZhbHVlID0gMDsKICAgICBpZiAoaXQgIT0gbV9wcm9wZXJ0aWVzLT5lbmQoKSkK
LSAgICAgICAgaXQtPnNlY29uZC0+YXNOdW1iZXIoJnZhbHVlKTsKKyAgICAgICAgaXQtPnZhbHVl
LT5hc051bWJlcigmdmFsdWUpOwogICAgIHJldHVybiB2YWx1ZTsKIH0KIApAQCAtMTE4LDcgKzEx
OCw3IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JTdGF0ZTo6Z2V0T2Jq
ZWN0KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lCiAgICAgICAgIG1fcHJvcGVydGllcy0+c2V0
T2JqZWN0KHByb3BlcnR5TmFtZSwgSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgICAg
IGl0ID0gbV9wcm9wZXJ0aWVzLT5maW5kKHByb3BlcnR5TmFtZSk7CiAgICAgfQotICAgIHJldHVy
biBpdC0+c2Vjb25kLT5hc09iamVjdCgpOworICAgIHJldHVybiBpdC0+dmFsdWUtPmFzT2JqZWN0
KCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcAppbmRleCAyZGU4ZDljYmEzOTY3MGEyM2Jj
NTFmNjdkYjAyOGM4YzI2YTFjOTcxLi5jOWVkMDQzM2E3OGZlMWFmNmU5OGQxOWEzYzJkNTNjZGI0
NjJhMTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5
bGVTaGVldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxl
U2hlZXQuY3BwCkBAIC01MzYsNyArNTM2LDcgQEAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NT
OjpDU1NTdHlsZT4gSW5zcGVjdG9yU3R5bGU6OnN0eWxlV2l0aFByb3BlcnRpZXMoKSBjb24KICAg
ICAgICAgICAgICAgICAgICAgICAgIHNob3VsZEluYWN0aXZhdGUgPSB0cnVlOwogICAgICAgICAg
ICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJldmlvdXNQ
YXJzZWRPazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc3VjY2VzcyA9IGFjdGl2ZUl0
LT5zZWNvbmQtPmdldEJvb2xlYW4oVHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUHJvcGVydHk6OlBhcnNl
ZE9rLCAmcHJldmlvdXNQYXJzZWRPayk7CisgICAgICAgICAgICAgICAgICAgICAgICBib29sIHN1
Y2Nlc3MgPSBhY3RpdmVJdC0+dmFsdWUtPmdldEJvb2xlYW4oVHlwZUJ1aWxkZXI6OkNTUzo6Q1NT
UHJvcGVydHk6OlBhcnNlZE9rLCAmcHJldmlvdXNQYXJzZWRPayk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoc3VjY2VzcyAmJiAhcHJldmlvdXNQYXJzZWRPaykKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzaG91bGRJbmFjdGl2YXRlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAg
ICAgfQpAQCAtNTQ0LDcgKzU0NCw3IEBAIFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NT
U3R5bGU+IEluc3BlY3RvclN0eWxlOjpzdHlsZVdpdGhQcm9wZXJ0aWVzKCkgY29uCiAgICAgICAg
ICAgICAgICAgICAgIHByb3BlcnR5TmFtZVRvUHJldmlvdXNBY3RpdmVQcm9wZXJ0eS5zZXQoY2Fu
b25pY2FsUHJvcGVydHlOYW1lLCBwcm9wZXJ0eSk7CiAKICAgICAgICAgICAgICAgICBpZiAoc2hv
dWxkSW5hY3RpdmF0ZSkgewotICAgICAgICAgICAgICAgICAgICBhY3RpdmVJdC0+c2Vjb25kLT5z
ZXRTdGF0dXMoVHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUHJvcGVydHk6OlN0YXR1czo6SW5hY3RpdmUp
OworICAgICAgICAgICAgICAgICAgICBhY3RpdmVJdC0+dmFsdWUtPnNldFN0YXR1cyhUeXBlQnVp
bGRlcjo6Q1NTOjpDU1NQcm9wZXJ0eTo6U3RhdHVzOjpJbmFjdGl2ZSk7CiAgICAgICAgICAgICAg
ICAgICAgIHByb3BlcnR5TmFtZVRvUHJldmlvdXNBY3RpdmVQcm9wZXJ0eS5zZXQoY2Fub25pY2Fs
UHJvcGVydHlOYW1lLCBwcm9wZXJ0eSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fSBlbHNlIHsKQEAgLTEwNDQsNyArMTA0NCw3IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yU3R5bGU+
IEluc3BlY3RvclN0eWxlU2hlZXQ6Omluc3BlY3RvclN0eWxlRm9ySWQoY29uc3QgSW5zcGVjCiAg
ICAgICAgIFJlZlB0cjxJbnNwZWN0b3JTdHlsZT4gaW5zcGVjdG9yU3R5bGUgPSBJbnNwZWN0b3JT
dHlsZTo6Y3JlYXRlKGlkLCBzdHlsZSwgdGhpcyk7CiAgICAgICAgIHJldHVybiBpbnNwZWN0b3JT
dHlsZS5yZWxlYXNlKCk7CiAgICAgfQotICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgIHJldHVy
biBpdC0+dmFsdWU7CiB9CiAKIHZvaWQgSW5zcGVjdG9yU3R5bGVTaGVldDo6cmVtZW1iZXJJbnNw
ZWN0b3JTdHlsZShSZWZQdHI8SW5zcGVjdG9yU3R5bGU+IGluc3BlY3RvclN0eWxlKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcAppbmRleCBlNGVhZDE3ZTUy
ODY2OGQ5ZTUwNWJmZGNiMTAzMGU3YjUwZmI3Nzc3Li5hZGEyNjE3Y2MwYzRiZWEwYTlmMTk5ZjI1
OTc3MTRkMjY5MGIwNmU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yVmFsdWVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
VmFsdWVzLmNwcApAQCAtNzE3LDcgKzcxNyw3IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+
IEluc3BlY3Rvck9iamVjdEJhc2U6OmdldChjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0CiAgICAg
RGljdGlvbmFyeTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2RhdGEuZmluZChuYW1lKTsKICAgICBp
ZiAoaXQgPT0gbV9kYXRhLmVuZCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gaXQt
PnNlY29uZDsKKyAgICByZXR1cm4gaXQtPnZhbHVlOwogfQogCiB2b2lkIEluc3BlY3Rvck9iamVj
dEJhc2U6OnJlbW92ZShjb25zdCBTdHJpbmcmIG5hbWUpCkBAIC03MzksOSArNzM5LDkgQEAgdm9p
ZCBJbnNwZWN0b3JPYmplY3RCYXNlOjp3cml0ZUpTT04oU3RyaW5nQnVpbGRlciogb3V0cHV0KSBj
b25zdAogICAgICAgICBBU1NFUlQoaXQgIT0gbV9kYXRhLmVuZCgpKTsKICAgICAgICAgaWYgKGkp
CiAgICAgICAgICAgICBvdXRwdXQtPmFwcGVuZCgnLCcpOwotICAgICAgICBkb3VibGVRdW90ZVN0
cmluZyhpdC0+Zmlyc3QsIG91dHB1dCk7CisgICAgICAgIGRvdWJsZVF1b3RlU3RyaW5nKGl0LT5r
ZXksIG91dHB1dCk7CiAgICAgICAgIG91dHB1dC0+YXBwZW5kKCc6Jyk7Ci0gICAgICAgIGl0LT5z
ZWNvbmQtPndyaXRlSlNPTihvdXRwdXQpOworICAgICAgICBpdC0+dmFsdWUtPndyaXRlSlNPTihv
dXRwdXQpOwogICAgIH0KICAgICBvdXRwdXQtPmFwcGVuZCgnfScpOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvcldvcmtlckFnZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JXb3JrZXJBZ2VudC5jcHAKaW5kZXggMWI3Y2Vk
YmMzODMyZWNmOTM2N2ZlYTdmNWEwYjZhMDE3YWViOGMxNS4uZTkwZjdjYjRiNDhhNDc5MjY4MjE5
ZTg5ZmViOWRmODFlNTAzMGFkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvcldvcmtlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yV29ya2VyQWdlbnQuY3BwCkBAIC0yMDUsOSArMjA1LDkgQEAgdm9pZCBJbnNwZWN0
b3JXb3JrZXJBZ2VudDo6d29ya2VyQ29udGV4dFRlcm1pbmF0ZWQoV29ya2VyQ29udGV4dFByb3h5
KiBwcm94eSkKIHsKICAgICBtX2RlZGljYXRlZFdvcmtlcnMucmVtb3ZlKHByb3h5KTsKICAgICBm
b3IgKFdvcmtlckNoYW5uZWxzOjppdGVyYXRvciBpdCA9IG1faWRUb0NoYW5uZWwuYmVnaW4oKTsg
aXQgIT0gbV9pZFRvQ2hhbm5lbC5lbmQoKTsgKytpdCkgewotICAgICAgICBpZiAocHJveHkgPT0g
aXQtPnNlY29uZC0+cHJveHkoKSkgewotICAgICAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZC0+
d29ya2VyKCktPndvcmtlclRlcm1pbmF0ZWQoaXQtPmZpcnN0KTsKLSAgICAgICAgICAgIGRlbGV0
ZSBpdC0+c2Vjb25kOworICAgICAgICBpZiAocHJveHkgPT0gaXQtPnZhbHVlLT5wcm94eSgpKSB7
CisgICAgICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kLT53b3JrZXIoKS0+d29ya2VyVGVybWlu
YXRlZChpdC0+a2V5KTsKKyAgICAgICAgICAgIGRlbGV0ZSBpdC0+dmFsdWU7CiAgICAgICAgICAg
ICBtX2lkVG9DaGFubmVsLnJlbW92ZShpdCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KQEAgLTIxNywxNCArMjE3LDE0IEBAIHZvaWQgSW5zcGVjdG9yV29ya2VyQWdlbnQ6Ondvcmtl
ckNvbnRleHRUZXJtaW5hdGVkKFdvcmtlckNvbnRleHRQcm94eSogcHJveHkpCiB2b2lkIEluc3Bl
Y3RvcldvcmtlckFnZW50OjpjcmVhdGVXb3JrZXJGcm9udGVuZENoYW5uZWxzRm9yRXhpc3RpbmdX
b3JrZXJzKCkKIHsKICAgICBmb3IgKERlZGljYXRlZFdvcmtlcnM6Oml0ZXJhdG9yIGl0ID0gbV9k
ZWRpY2F0ZWRXb3JrZXJzLmJlZ2luKCk7IGl0ICE9IG1fZGVkaWNhdGVkV29ya2Vycy5lbmQoKTsg
KytpdCkKLSAgICAgICAgY3JlYXRlV29ya2VyRnJvbnRlbmRDaGFubmVsKGl0LT5maXJzdCwgaXQt
PnNlY29uZCk7CisgICAgICAgIGNyZWF0ZVdvcmtlckZyb250ZW5kQ2hhbm5lbChpdC0+a2V5LCBp
dC0+dmFsdWUpOwogfQogCiB2b2lkIEluc3BlY3RvcldvcmtlckFnZW50OjpkZXN0cm95V29ya2Vy
RnJvbnRlbmRDaGFubmVscygpCiB7CiAgICAgZm9yIChXb3JrZXJDaGFubmVsczo6aXRlcmF0b3Ig
aXQgPSBtX2lkVG9DaGFubmVsLmJlZ2luKCk7IGl0ICE9IG1faWRUb0NoYW5uZWwuZW5kKCk7ICsr
aXQpIHsKLSAgICAgICAgaXQtPnNlY29uZC0+ZGlzY29ubmVjdEZyb21Xb3JrZXJDb250ZXh0KCk7
Ci0gICAgICAgIGRlbGV0ZSBpdC0+c2Vjb25kOworICAgICAgICBpdC0+dmFsdWUtPmRpc2Nvbm5l
Y3RGcm9tV29ya2VyQ29udGV4dCgpOworICAgICAgICBkZWxldGUgaXQtPnZhbHVlOwogICAgIH0K
ICAgICBtX2lkVG9DaGFubmVsLmNsZWFyKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbC5jcHAKaW5kZXggOTQ2ODg4Y2Uy
MGZmODg3MjdkNjE4ZDhjZGZmZDM3NGM0NjIwMDk5Ny4uMjFhOWVmMjkwMGY3MDE4YWQ1M2FlM2Rj
NjAwNTg4YWMyNmYyNTA4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL01l
bW9yeUluc3RydW1lbnRhdGlvbkltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9NZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsLmNwcApAQCAtNTUsNyArNTUsNyBAQCB2b2lkIE1l
bW9yeUluc3RydW1lbnRhdGlvbkltcGw6OmNvdW50T2JqZWN0U2l6ZShNZW1vcnlPYmplY3RUeXBl
IG9iamVjdFR5cGUsIHNpegogICAgIEFTU0VSVChvYmplY3RUeXBlKTsKICAgICBUeXBlVG9TaXpl
TWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV90b3RhbFNpemVzLmFkZChvYmplY3RUeXBlLCBzaXpl
KTsKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXN1bHQuaXRlcmF0b3It
PnNlY29uZCArPSBzaXplOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlICs9IHNpemU7
CiB9CiAKIHZvaWQgTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbDo6ZGVmZXJJbnN0cnVtZW50ZWRQ
b2ludGVyKFBhc3NPd25QdHI8SW5zdHJ1bWVudGVkUG9pbnRlckJhc2U+IHBvaW50ZXIpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1w
bC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL01lbW9yeUluc3RydW1lbnRhdGlvbkltcGwu
aAppbmRleCA4YTJhZWU1ZTA1MWNlODY1MGI0ZDMxMTkxYmQ1MjhhZDA3OTNhZDhjLi4xZWNjOWRk
YmY5YzI5ZWI3MzZlMmY3NWJlYzMzNGRmOGEwMTY4MDRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9NZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsLmgKQEAgLTUyLDE0ICs1
MiwxNCBAQCBwdWJsaWM6CiAgICAgc2l6ZV90IHRvdGFsU2l6ZShNZW1vcnlPYmplY3RUeXBlIG9i
amVjdFR5cGUpIGNvbnN0CiAgICAgewogICAgICAgICBUeXBlVG9TaXplTWFwOjpjb25zdF9pdGVy
YXRvciBpID0gbV90b3RhbFNpemVzLmZpbmQob2JqZWN0VHlwZSk7Ci0gICAgICAgIHJldHVybiBp
ID09IG1fdG90YWxTaXplcy5lbmQoKSA/IDAgOiBpLT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBp
ID09IG1fdG90YWxTaXplcy5lbmQoKSA/IDAgOiBpLT52YWx1ZTsKICAgICB9CiAKICAgICBzaXpl
X3QgcmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSBjb25zdAogICAgIHsKICAgICAgICAgc2l6ZV90
IHNpemUgPSAwOwogICAgICAgICBmb3IgKFR5cGVUb1NpemVNYXA6OmNvbnN0X2l0ZXJhdG9yIGkg
PSBtX3RvdGFsU2l6ZXMuYmVnaW4oKTsgaSAhPSBtX3RvdGFsU2l6ZXMuZW5kKCk7ICsraSkKLSAg
ICAgICAgICAgIHNpemUgKz0gaS0+c2Vjb25kOworICAgICAgICAgICAgc2l6ZSArPSBpLT52YWx1
ZTsKICAgICAgICAgcmV0dXJuIHNpemU7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvTmV0d29ya1Jlc291cmNlc0RhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL05ldHdvcmtSZXNvdXJjZXNEYXRhLmNwcAppbmRleCA0MTk4ZmI1MWQ2OWFiZDA2
ZDFkMDIzYjQ3MjU3MTI5MjYxNWExMGEzLi43ODhlYmVhNTVkMjZiOTI1NWIzZDE5MzFmOGEzZjlm
YmIwY2Y5NjkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvTmV0d29ya1Jl
c291cmNlc0RhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9OZXR3b3JrUmVz
b3VyY2VzRGF0YS5jcHAKQEAgLTI5MSw4ICsyOTEsOCBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZXNE
YXRhOjpzZXRYSFJSZXBsYXlEYXRhKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBYSFJSZXBsYXlE
YQogICAgICAgICBSZXVzZWRSZXF1ZXN0SWRzOjppdGVyYXRvciBpdDsKICAgICAgICAgUmV1c2Vk
UmVxdWVzdElkczo6aXRlcmF0b3IgZW5kID0gbV9yZXVzZWRYSFJSZXBsYXlEYXRhUmVxdWVzdElk
cy5lbmQoKTsKICAgICAgICAgZm9yIChpdCA9IG1fcmV1c2VkWEhSUmVwbGF5RGF0YVJlcXVlc3RJ
ZHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAoaXQtPnNlY29u
ZCA9PSByZXF1ZXN0SWQpCi0gICAgICAgICAgICAgICAgc2V0WEhSUmVwbGF5RGF0YShpdC0+Zmly
c3QsIHhoclJlcGxheURhdGEpOworICAgICAgICAgICAgaWYgKGl0LT52YWx1ZSA9PSByZXF1ZXN0
SWQpCisgICAgICAgICAgICAgICAgc2V0WEhSUmVwbGF5RGF0YShpdC0+a2V5LCB4aHJSZXBsYXlE
YXRhKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzE4LDEwICszMTgs
MTAgQEAgVmVjdG9yPFN0cmluZz4gTmV0d29ya1Jlc291cmNlc0RhdGE6OnJlbW92ZUNhY2hlZFJl
c291cmNlKENhY2hlZFJlc291cmNlKiBjYWNoZWQKICAgICBSZXNvdXJjZURhdGFNYXA6Oml0ZXJh
dG9yIGl0OwogICAgIFJlc291cmNlRGF0YU1hcDo6aXRlcmF0b3IgZW5kID0gbV9yZXF1ZXN0SWRU
b1Jlc291cmNlRGF0YU1hcC5lbmQoKTsKICAgICBmb3IgKGl0ID0gbV9yZXF1ZXN0SWRUb1Jlc291
cmNlRGF0YU1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgUmVzb3VyY2VE
YXRhKiByZXNvdXJjZURhdGEgPSBpdC0+c2Vjb25kOworICAgICAgICBSZXNvdXJjZURhdGEqIHJl
c291cmNlRGF0YSA9IGl0LT52YWx1ZTsKICAgICAgICAgaWYgKHJlc291cmNlRGF0YS0+Y2FjaGVk
UmVzb3VyY2UoKSA9PSBjYWNoZWRSZXNvdXJjZSkgewogICAgICAgICAgICAgcmVzb3VyY2VEYXRh
LT5zZXRDYWNoZWRSZXNvdXJjZSgwKTsKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoaXQtPmZp
cnN0KTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoaXQtPmtleSk7CiAgICAgICAgIH0KICAg
ICB9CiAKQEAgLTMzOCw5ICszMzgsOSBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZXNEYXRhOjpjbGVh
cihjb25zdCBTdHJpbmcmIHByZXNlcnZlZExvYWRlcklkKQogICAgIFJlc291cmNlRGF0YU1hcDo6
aXRlcmF0b3IgaXQ7CiAgICAgUmVzb3VyY2VEYXRhTWFwOjppdGVyYXRvciBlbmQgPSBtX3JlcXVl
c3RJZFRvUmVzb3VyY2VEYXRhTWFwLmVuZCgpOwogICAgIGZvciAoaXQgPSBtX3JlcXVlc3RJZFRv
UmVzb3VyY2VEYXRhTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBSZXNv
dXJjZURhdGEqIHJlc291cmNlRGF0YSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFJlc291cmNlRGF0
YSogcmVzb3VyY2VEYXRhID0gaXQtPnZhbHVlOwogICAgICAgICBpZiAoIXByZXNlcnZlZExvYWRl
cklkLmlzTnVsbCgpICYmIHJlc291cmNlRGF0YS0+bG9hZGVySWQoKSA9PSBwcmVzZXJ2ZWRMb2Fk
ZXJJZCkKLSAgICAgICAgICAgIHByZXNlcnZlZE1hcC5zZXQoaXQtPmZpcnN0LCBpdC0+c2Vjb25k
KTsKKyAgICAgICAgICAgIHByZXNlcnZlZE1hcC5zZXQoaXQtPmtleSwgaXQtPnZhbHVlKTsKICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgZGVsZXRlIHJlc291cmNlRGF0YTsKICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuY3BwCmlu
ZGV4IGFiYTJiYTA2M2U1OTMwOGZhZWM0NGJmYzc4ZGZhZjhkOWI4NDVhMGIuLjliMjZmYzg2Yzkw
NDM5Mzk1MTVmMTBhZTY5ZWJiNjU1MzBjMGI0MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9Dcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9Dcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuY3BwCkBAIC02OCw3ICs2OCw3IEBAIGJv
b2wgaXNTaW1wbGVDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3QoY29uc3QgU3RyaW5nJiBtZXRob2Qs
IGNvbnN0IEhUVFBIZWFkZXJNYXAmCiAKICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRv
ciBlbmQgPSBoZWFkZXJNYXAuZW5kKCk7CiAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IGhlYWRlck1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgaWYgKCFpc09uQWNjZXNzQ29udHJvbFNpbXBsZVJlcXVlc3RIZWFkZXJXaGl0ZWxpc3QoaXQt
PmZpcnN0LCBpdC0+c2Vjb25kKSkKKyAgICAgICAgaWYgKCFpc09uQWNjZXNzQ29udHJvbFNpbXBs
ZVJlcXVlc3RIZWFkZXJXaGl0ZWxpc3QoaXQtPmtleSwgaXQtPnZhbHVlKSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTExNiwxNCArMTE2LDE0IEBAIFJlc291cmNlUmVx
dWVzdCBjcmVhdGVBY2Nlc3NDb250cm9sUHJlZmxpZ2h0UmVxdWVzdChjb25zdCBSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlCiAgICAgaWYgKHJlcXVlc3RIZWFkZXJGaWVsZHMuc2l6ZSgpID4gMCkgewog
ICAgICAgICBTdHJpbmdCdWlsZGVyIGhlYWRlckJ1ZmZlcjsKICAgICAgICAgSFRUUEhlYWRlck1h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSByZXF1ZXN0SGVhZGVyRmllbGRzLmJlZ2luKCk7Ci0gICAg
ICAgIGhlYWRlckJ1ZmZlci5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgaGVhZGVyQnVmZmVy
LmFwcGVuZChpdC0+a2V5KTsKICAgICAgICAgKytpdDsKIAogICAgICAgICBIVFRQSGVhZGVyTWFw
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSByZXF1ZXN0SGVhZGVyRmllbGRzLmVuZCgpOwogICAgICAg
ICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBoZWFkZXJCdWZmZXIuYXBw
ZW5kKCcsJyk7CiAgICAgICAgICAgICBoZWFkZXJCdWZmZXIuYXBwZW5kKCcgJyk7Ci0gICAgICAg
ICAgICBoZWFkZXJCdWZmZXIuYXBwZW5kKGl0LT5maXJzdCk7CisgICAgICAgICAgICBoZWFkZXJC
dWZmZXIuYXBwZW5kKGl0LT5rZXkpOwogICAgICAgICB9CiAKICAgICAgICAgcHJlZmxpZ2h0UmVx
dWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoIkFjY2Vzcy1Db250cm9sLVJlcXVlc3QtSGVhZGVycyIs
IGhlYWRlckJ1ZmZlci50b1N0cmluZygpLmxvd2VyKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUuY3BwIGIvU291cmNl
L1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUuY3BwCmluZGV4
IDA0ZDU4ODE1NWNlNTUzM2JkZGQzZjAyYjNiZDgxNWVkOWVlMzk5ZWIuLjlkNTFjODdmZTZjNGU3
ZDQzOTMzZTQ1ZWVmN2Q1YzE5YmQ1ZTIwODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9Dcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5jcHAKQEAgLTEyNSw4
ICsxMjUsOCBAQCBib29sIENyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGVJdGVtOjphbGxv
d3NDcm9zc09yaWdpbkhlYWRlcnMoY29uc3QgSFRUUEhlYQogewogICAgIEhUVFBIZWFkZXJNYXA6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHJlcXVlc3RIZWFkZXJzLmVuZCgpOwogICAgIGZvciAoSFRU
UEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSByZXF1ZXN0SGVhZGVycy5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKCFtX2hlYWRlcnMuY29udGFpbnMoaXQtPmZp
cnN0KSAmJiAhaXNPbkFjY2Vzc0NvbnRyb2xTaW1wbGVSZXF1ZXN0SGVhZGVyV2hpdGVsaXN0KGl0
LT5maXJzdCwgaXQtPnNlY29uZCkpIHsKLSAgICAgICAgICAgIGVycm9yRGVzY3JpcHRpb24gPSAi
UmVxdWVzdCBoZWFkZXIgZmllbGQgIiArIGl0LT5maXJzdC5zdHJpbmcoKSArICIgaXMgbm90IGFs
bG93ZWQgYnkgQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVycy4iOworICAgICAgICBpZiAoIW1f
aGVhZGVycy5jb250YWlucyhpdC0+a2V5KSAmJiAhaXNPbkFjY2Vzc0NvbnRyb2xTaW1wbGVSZXF1
ZXN0SGVhZGVyV2hpdGVsaXN0KGl0LT5rZXksIGl0LT52YWx1ZSkpIHsKKyAgICAgICAgICAgIGVy
cm9yRGVzY3JpcHRpb24gPSAiUmVxdWVzdCBoZWFkZXIgZmllbGQgIiArIGl0LT5rZXkuc3RyaW5n
KCkgKyAiIGlzIG5vdCBhbGxvd2VkIGJ5IEFjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnMuIjsK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KQEAgLTE2Nyw3ICsx
NjcsNyBAQCBib29sIENyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGU6OmNhblNraXBQcmVm
bGlnaHQoY29uc3QgU3RyaW5nJiBvcmlnaW4sIGNvbgogICAgIGlmIChjYWNoZUl0ID09IG1fcHJl
ZmxpZ2h0SGFzaE1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGNh
Y2hlSXQtPnNlY29uZC0+YWxsb3dzUmVxdWVzdChpbmNsdWRlQ3JlZGVudGlhbHMsIG1ldGhvZCwg
cmVxdWVzdEhlYWRlcnMpKQorICAgIGlmIChjYWNoZUl0LT52YWx1ZS0+YWxsb3dzUmVxdWVzdChp
bmNsdWRlQ3JlZGVudGlhbHMsIG1ldGhvZCwgcmVxdWVzdEhlYWRlcnMpKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKIAogICAgIG1fcHJlZmxpZ2h0SGFzaE1hcC5yZW1vdmUoY2FjaGVJdCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAppbmRleCA4MzY4MDQxY2Y4MGEzZDY0
MTUxYTliMGIwY2E1NjIzNmU0YzQ0ODkyLi4yZDk0NWE4NjBhMWRmNWI4YjYzYmRiYjRkMDgzZjA3
NjE1MWY3MmQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2Fk
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAKQEAg
LTYxNyw3ICs2MTcsNyBAQCB2b2lkIERvY3VtZW50TG9hZGVyOjpnZXRTdWJyZXNvdXJjZXMoVmVj
dG9yPFBhc3NSZWZQdHI8QXJjaGl2ZVJlc291cmNlPiA+JiBzdWJyZQogICAgIGNvbnN0IENhY2hl
ZFJlc291cmNlTG9hZGVyOjpEb2N1bWVudFJlc291cmNlTWFwJiBhbGxSZXNvdXJjZXMgPSBkb2N1
bWVudC0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS0+YWxsQ2FjaGVkUmVzb3VyY2VzKCk7CiAgICAg
Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OkRvY3VtZW50UmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IGFsbFJlc291cmNlcy5lbmQoKTsKICAgICBmb3IgKENhY2hlZFJlc291cmNlTG9hZGVy
OjpEb2N1bWVudFJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGFsbFJlc291cmNlcy5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgUmVmUHRyPEFyY2hpdmVSZXNvdXJj
ZT4gc3VicmVzb3VyY2UgPSB0aGlzLT5zdWJyZXNvdXJjZShLVVJMKFBhcnNlZFVSTFN0cmluZywg
aXQtPnNlY29uZC0+dXJsKCkpKTsKKyAgICAgICAgUmVmUHRyPEFyY2hpdmVSZXNvdXJjZT4gc3Vi
cmVzb3VyY2UgPSB0aGlzLT5zdWJyZXNvdXJjZShLVVJMKFBhcnNlZFVSTFN0cmluZywgaXQtPnZh
bHVlLT51cmwoKSkpOwogICAgICAgICBpZiAoc3VicmVzb3VyY2UpCiAgICAgICAgICAgICBzdWJy
ZXNvdXJjZXMuYXBwZW5kKHN1YnJlc291cmNlLnJlbGVhc2UoKSk7CiAgICAgfQpAQCAtNjQ5LDgg
KzY0OSw4IEBAIHZvaWQgRG9jdW1lbnRMb2FkZXI6OnN1YnN0aXR1dGVSZXNvdXJjZURlbGl2ZXJ5
VGltZXJGaXJlZChUaW1lcjxEb2N1bWVudExvYWRlcj4qCiAKICAgICBTdWJzdGl0dXRlUmVzb3Vy
Y2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGNvcHkuZW5kKCk7CiAgICAgZm9yIChTdWJzdGl0
dXRlUmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY29weS5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKLSAgICAgICAgUmVmUHRyPFJlc291cmNlTG9hZGVyPiBsb2FkZXIgPSBpdC0+
Zmlyc3Q7Ci0gICAgICAgIFN1YnN0aXR1dGVSZXNvdXJjZSogcmVzb3VyY2UgPSBpdC0+c2Vjb25k
LmdldCgpOworICAgICAgICBSZWZQdHI8UmVzb3VyY2VMb2FkZXI+IGxvYWRlciA9IGl0LT5rZXk7
CisgICAgICAgIFN1YnN0aXR1dGVSZXNvdXJjZSogcmVzb3VyY2UgPSBpdC0+dmFsdWUuZ2V0KCk7
CiAgICAgICAgIAogICAgICAgICBpZiAocmVzb3VyY2UpIHsKICAgICAgICAgICAgIFNoYXJlZEJ1
ZmZlciogZGF0YSA9IHJlc291cmNlLT5kYXRhKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvTWFpblJlc291cmNlTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9N
YWluUmVzb3VyY2VMb2FkZXIuY3BwCmluZGV4IGVhNjY3MDM2YzhjMzlmNjYyNDhkOGUyNWQ4Y2Ux
YjE4MWY3NGNlMWMuLjNkNTM5MGNkYjlkMmRlMTc3YmIyNDI3YTU4MjMxY2M4ZDJiNWFjYTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9NYWluUmVzb3VyY2VMb2FkZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9NYWluUmVzb3VyY2VMb2FkZXIuY3BwCkBAIC0zNjgs
NyArMzY4LDcgQEAgdm9pZCBNYWluUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZShj
b25zdCBSZXNvdXJjZVJlc3BvbnNlJiByKQogCiAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSByLmh0dHBIZWFkZXJGaWVsZHMoKS5maW5kKEF0b21pY1N0cmluZygieC1mcmFt
ZS1vcHRpb25zIikpOwogICAgIGlmIChpdCAhPSByLmh0dHBIZWFkZXJGaWVsZHMoKS5lbmQoKSkg
ewotICAgICAgICBTdHJpbmcgY29udGVudCA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFN0cmluZyBj
b250ZW50ID0gaXQtPnZhbHVlOwogICAgICAgICBpZiAobV9mcmFtZS0+bG9hZGVyKCktPnNob3Vs
ZEludGVycnVwdExvYWRGb3JYRnJhbWVPcHRpb25zKGNvbnRlbnQsIHIudXJsKCkpKSB7CiAgICAg
ICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnRpbnVlQWZ0ZXJYRnJhbWVPcHRp
b25zRGVuaWVkKG1fZnJhbWUuZ2V0KCksIGRvY3VtZW50TG9hZGVyKCksIGlkZW50aWZpZXIoKSwg
cik7CiAgICAgICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgY29uc29sZU1lc3Nh
Z2UsIChBU0NJSUxpdGVyYWwoIlJlZnVzZWQgdG8gZGlzcGxheSBkb2N1bWVudCBiZWNhdXNlIGRp
c3BsYXkgZm9yYmlkZGVuIGJ5IFgtRnJhbWUtT3B0aW9ucy5cbiIpKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCmluZGV4IGExYjIzYzk5ZDEx
ODE1NjkzNTU5NTY4Y2I5NzM5OTk4MmFhMTJhNjkuLjdiMWRhZGUzYmMwOWViMWRlYWY1YzkzNGQw
NDlmODdlMjM3ZWU5NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJj
ZUxvYWRTY2hlZHVsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxv
YWRTY2hlZHVsZXIuY3BwCkBAIC0xNzgsNyArMTc4LDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRTY2hl
ZHVsZXI6OnNlcnZlUGVuZGluZ1JlcXVlc3RzKFJlc291cmNlTG9hZFByaW9yaXR5IG1pbmltdW1Q
cmkKICAgICBtX2hvc3RzLmNoZWNrQ29uc2lzdGVuY3koKTsKICAgICBIb3N0TWFwOjppdGVyYXRv
ciBlbmQgPSBtX2hvc3RzLmVuZCgpOwogICAgIGZvciAoSG9zdE1hcDo6aXRlcmF0b3IgaXRlciA9
IG1faG9zdHMuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikKLSAgICAgICAgaG9zdHNUb1Nl
cnZlLmFwcGVuZChpdGVyLT5zZWNvbmQpOworICAgICAgICBob3N0c1RvU2VydmUuYXBwZW5kKGl0
ZXItPnZhbHVlKTsKIAogICAgIGludCBzaXplID0gaG9zdHNUb1NlcnZlLnNpemUoKTsKICAgICBm
b3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUv
bG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGUuY3BwCmluZGV4IGFiYjAwMjMyZmZmNjMy
YTk1ZmY4ZmY5ZWUzNDY2NTBiN2Y5MDVjMzAuLjc5Y2M5ZDhiZGQ1MDk5ODJkYmJkNTlkN2M1OGNm
M2QwYTM5Njk5MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9B
cHBsaWNhdGlvbkNhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUv
QXBwbGljYXRpb25DYWNoZS5jcHAKQEAgLTEwNiwxMSArMTA2LDExIEBAIHVuc2lnbmVkIEFwcGxp
Y2F0aW9uQ2FjaGU6OnJlbW92ZVJlc291cmNlKGNvbnN0IFN0cmluZyYgdXJsKQogICAgICAgICBy
ZXR1cm4gMDsKIAogICAgIC8vIFRoZSByZXNvdXJjZSBleGlzdHMsIGdldCBpdHMgdHlwZSBzbyB3
ZSBjYW4gcmV0dXJuIGl0LgotICAgIHVuc2lnbmVkIHR5cGUgPSBpdC0+c2Vjb25kLT50eXBlKCk7
CisgICAgdW5zaWduZWQgdHlwZSA9IGl0LT52YWx1ZS0+dHlwZSgpOwogCiAgICAgbV9yZXNvdXJj
ZXMucmVtb3ZlKGl0KTsKIAotICAgIG1fZXN0aW1hdGVkU2l6ZUluU3RvcmFnZSAtPSBpdC0+c2Vj
b25kLT5lc3RpbWF0ZWRTaXplSW5TdG9yYWdlKCk7CisgICAgbV9lc3RpbWF0ZWRTaXplSW5TdG9y
YWdlIC09IGl0LT52YWx1ZS0+ZXN0aW1hdGVkU2l6ZUluU3RvcmFnZSgpOwogCiAgICAgcmV0dXJu
IHR5cGU7CiB9ICAgIApAQCAtMTg4LDcgKzE4OCw3IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZTo6
Y2xlYXJTdG9yYWdlSUQoKQogICAgIAogICAgIFJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBl
bmQgPSBtX3Jlc291cmNlcy5lbmQoKTsKICAgICBmb3IgKFJlc291cmNlTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAg
aXQtPnNlY29uZC0+Y2xlYXJTdG9yYWdlSUQoKTsKKyAgICAgICAgaXQtPnZhbHVlLT5jbGVhclN0
b3JhZ2VJRCgpOwogfQogICAgIAogdm9pZCBBcHBsaWNhdGlvbkNhY2hlOjpkZWxldGVDYWNoZUZv
ck9yaWdpbihTZWN1cml0eU9yaWdpbiogb3JpZ2luKQpAQCAtMjI2LDggKzIyNiw4IEBAIHZvaWQg
QXBwbGljYXRpb25DYWNoZTo6ZHVtcCgpCiAgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxBcHBs
aWNhdGlvbkNhY2hlUmVzb3VyY2U+ID46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcmVzb3VyY2Vz
LmVuZCgpOwogICAgIAogICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxBcHBsaWNhdGlv
bkNhY2hlUmVzb3VyY2U+ID46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIHByaW50ZigiJXMgIiwgaXQtPmZpcnN0LmFz
Y2lpKCkuZGF0YSgpKTsKLSAgICAgICAgQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpkdW1wVHlw
ZShpdC0+c2Vjb25kLT50eXBlKCkpOworICAgICAgICBwcmludGYoIiVzICIsIGl0LT5rZXkuYXNj
aWkoKS5kYXRhKCkpOworICAgICAgICBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OmR1bXBUeXBl
KGl0LT52YWx1ZS0+dHlwZSgpKTsKICAgICB9CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuY3BwIGIvU291
cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVHcm91cC5jcHAKaW5k
ZXggOTIwODJjNTZiZTExYzlkYzI1ODUwZjdhOTRiYzI3OTNiNzdmNWY1Zi4uMjczYTYwMTBkODI1
NWZiOTRhYTYwNTFiOTJmNjkyYjQ4ODM3Yzk5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
bG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVHcm91cC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVHcm91cC5jcHAKQEAgLTc3Nyw5
ICs3NzcsOSBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6ZGlkRmluaXNoTG9hZGluZ01h
bmlmZXN0KCkKICAgICBpZiAoaXNVcGdyYWRlQXR0ZW1wdCkgewogICAgICAgICBBcHBsaWNhdGlv
bkNhY2hlOjpSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9uZXdlc3RDYWNoZS0+
ZW5kKCk7CiAgICAgICAgIGZvciAoQXBwbGljYXRpb25DYWNoZTo6UmVzb3VyY2VNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbV9uZXdlc3RDYWNoZS0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7
Ci0gICAgICAgICAgICB1bnNpZ25lZCB0eXBlID0gaXQtPnNlY29uZC0+dHlwZSgpOworICAgICAg
ICAgICAgdW5zaWduZWQgdHlwZSA9IGl0LT52YWx1ZS0+dHlwZSgpOwogICAgICAgICAgICAgaWYg
KHR5cGUgJiBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6Ok1hc3RlcikKLSAgICAgICAgICAgICAg
ICBhZGRFbnRyeShpdC0+Zmlyc3QsIHR5cGUpOworICAgICAgICAgICAgICAgIGFkZEVudHJ5KGl0
LT5rZXksIHR5cGUpOwogICAgICAgICB9CiAgICAgfQogICAgIApAQCAtMTAxOCw3ICsxMDE4LDcg
QEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OnN0YXJ0TG9hZGluZ0VudHJ5KCkKIAogICAg
IEFTU0VSVCghbV9jdXJyZW50SGFuZGxlKTsKICAgICAKLSAgICBtX2N1cnJlbnRIYW5kbGUgPSBj
cmVhdGVSZXNvdXJjZUhhbmRsZShLVVJMKFBhcnNlZFVSTFN0cmluZywgaXQtPmZpcnN0KSwgbV9u
ZXdlc3RDYWNoZSA/IG1fbmV3ZXN0Q2FjaGUtPnJlc291cmNlRm9yVVJMKGl0LT5maXJzdCkgOiAw
KTsKKyAgICBtX2N1cnJlbnRIYW5kbGUgPSBjcmVhdGVSZXNvdXJjZUhhbmRsZShLVVJMKFBhcnNl
ZFVSTFN0cmluZywgaXQtPmtleSksIG1fbmV3ZXN0Q2FjaGUgPyBtX25ld2VzdENhY2hlLT5yZXNv
dXJjZUZvclVSTChpdC0+a2V5KSA6IDApOwogfQogCiB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVHcm91
cDo6ZGVsaXZlckRlbGF5ZWRNYWluUmVzb3VyY2VzKCkKQEAgLTEwNjcsNyArMTA2Nyw3IEBAIHZv
aWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjphZGRFbnRyeShjb25zdCBTdHJpbmcmIHVybCwgdW5z
aWduZWQgdHlwZSkKICAgICBFbnRyeU1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fcGVuZGluZ0Vu
dHJpZXMuYWRkKHVybCwgdHlwZSk7CiAgICAgCiAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkK
LSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgfD0gdHlwZTsKKyAgICAgICAgcmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZSB8PSB0eXBlOwogfQogCiB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVHcm91
cDo6YXNzb2NpYXRlRG9jdW1lbnRMb2FkZXJXaXRoQ2FjaGUoRG9jdW1lbnRMb2FkZXIqIGxvYWRl
ciwgQXBwbGljYXRpb25DYWNoZSogY2FjaGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUhvc3QuY3BwIGIvU291cmNlL1dlYkNvcmUv
bG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVIb3N0LmNwcAppbmRleCA4MDFjMWIzNjcw
MzFhMzM5ZGI0NDcwN2E5MmQxYmM4MGQ0MWQ4Yzc5Li5mZTlmMDEwYTBmZTY1MDNkMGJjNWU1Yjky
NzcwYTNmN2I2NDM0NGZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2Fj
aGUvQXBwbGljYXRpb25DYWNoZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9h
cHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlSG9zdC5jcHAKQEAgLTI4Miw3ICsyODIsNyBAQCB2b2lk
IEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpmaWxsUmVzb3VyY2VMaXN0KFJlc291cmNlSW5mb0xpc3Qq
IHJlc291cmNlcykKICAgICAgCiAgICAgQXBwbGljYXRpb25DYWNoZTo6UmVzb3VyY2VNYXA6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IGNhY2hlLT5lbmQoKTsKICAgICBmb3IgKEFwcGxpY2F0aW9uQ2Fj
aGU6OlJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGNhY2hlLT5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKLSAgICAgICAgUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4g
cmVzb3VyY2UgPSBpdC0+c2Vjb25kOworICAgICAgICBSZWZQdHI8QXBwbGljYXRpb25DYWNoZVJl
c291cmNlPiByZXNvdXJjZSA9IGl0LT52YWx1ZTsKICAgICAgICAgdW5zaWduZWQgdHlwZSA9IHJl
c291cmNlLT50eXBlKCk7CiAgICAgICAgIGJvb2wgaXNNYXN0ZXIgICA9IHR5cGUgJiBBcHBsaWNh
dGlvbkNhY2hlUmVzb3VyY2U6Ok1hc3RlcjsKICAgICAgICAgYm9vbCBpc01hbmlmZXN0ID0gdHlw
ZSAmIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6TWFuaWZlc3Q7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVJlc291cmNlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2Uu
Y3BwCmluZGV4IGQ4MzE3ODRiNDE5NmFkZjM4MmNmMzU1ZTBlZWYwMmQ2YTdhODA3OTAuLjk5NzY2
ZTNhNjZiZDM2ZWI0MmZlZDJhOTI2OWQzNGIwNjYxOTRkN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2Uu
Y3BwCkBAIC01NCw3ICs1NCw3IEBAIGludDY0X3QgQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpl
c3RpbWF0ZWRTaXplSW5TdG9yYWdlKCkKIAogICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IHJlc3BvbnNlKCkuaHR0cEhlYWRlckZpZWxkcygpLmVuZCgpOwogICAgIGZvciAo
SFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSByZXNwb25zZSgpLmh0dHBIZWFkZXJG
aWVsZHMoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIG1fZXN0aW1hdGVkU2l6
ZUluU3RvcmFnZSArPSAoaXQtPmZpcnN0Lmxlbmd0aCgpICsgaXQtPnNlY29uZC5sZW5ndGgoKSAr
IDIpICogc2l6ZW9mKFVDaGFyKTsKKyAgICAgICAgbV9lc3RpbWF0ZWRTaXplSW5TdG9yYWdlICs9
IChpdC0+a2V5Lmxlbmd0aCgpICsgaXQtPnZhbHVlLmxlbmd0aCgpICsgMikgKiBzaXplb2YoVUNo
YXIpOwogCiAgICAgbV9lc3RpbWF0ZWRTaXplSW5TdG9yYWdlICs9IHVybCgpLnN0cmluZygpLmxl
bmd0aCgpICogc2l6ZW9mKFVDaGFyKTsKICAgICBtX2VzdGltYXRlZFNpemVJblN0b3JhZ2UgKz0g
c2l6ZW9mKGludCk7IC8vIHJlc3BvbnNlKCkubV9odHRwU3RhdHVzQ29kZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFn
ZS5jcHAKaW5kZXggNzc4ZTRlMzg4ODkxZDMzNDcyMGNkMjE1MjU2ZDRkYWQzOWIyMmYxZC4uZDFj
OTdlNGIyYWExNjA4ZmM5NDhlYTYzMmMyYmE2ZWQyYTdlNTEzZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2Uu
Y3BwCkBAIC0xMzcsOCArMTM3LDggQEAgQXBwbGljYXRpb25DYWNoZUdyb3VwKiBBcHBsaWNhdGlv
bkNhY2hlU3RvcmFnZTo6ZmluZE9yQ3JlYXRlQ2FjaGVHcm91cChjb25zdCBLVVIKICAgICBDYWNo
ZUdyb3VwTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9jYWNoZXNJbk1lbW9yeS5hZGQobWFuaWZl
c3RVUkwsIDApOwogICAgIAogICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAg
QVNTRVJUKHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5p
dGVyYXRvci0+c2Vjb25kOworICAgICAgICBBU1NFUlQocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7
CisgICAgICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogICAgIH0KIAogICAgIC8v
IExvb2sgdXAgdGhlIGdyb3VwIGluIHRoZSBkYXRhYmFzZQpAQCAtMTUwLDcgKzE1MCw3IEBAIEFw
cGxpY2F0aW9uQ2FjaGVHcm91cCogQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmZpbmRPckNyZWF0
ZUNhY2hlR3JvdXAoY29uc3QgS1VSCiAgICAgICAgIG1fY2FjaGVIb3N0U2V0LmFkZCh1cmxIb3N0
SGFzaChtYW5pZmVzdFVSTCkpOwogICAgIH0KICAgICAKLSAgICByZXN1bHQuaXRlcmF0b3ItPnNl
Y29uZCA9IGdyb3VwOworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBncm91cDsKICAgICAK
ICAgICByZXR1cm4gZ3JvdXA7CiB9CkBAIC0xOTcsNyArMTk3LDcgQEAgQXBwbGljYXRpb25DYWNo
ZUdyb3VwKiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2FjaGVHcm91cEZvclVSTChjb25zdCBL
VVJMJiB1cmwKICAgICAvLyBDaGVjayBpZiBhIGNhY2hlIGFscmVhZHkgZXhpc3RzIGluIG1lbW9y
eS4KICAgICBDYWNoZUdyb3VwTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2NhY2hlc0luTWVt
b3J5LmVuZCgpOwogICAgIGZvciAoQ2FjaGVHcm91cE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
X2NhY2hlc0luTWVtb3J5LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBBcHBs
aWNhdGlvbkNhY2hlR3JvdXAqIGdyb3VwID0gaXQtPnNlY29uZDsKKyAgICAgICAgQXBwbGljYXRp
b25DYWNoZUdyb3VwKiBncm91cCA9IGl0LT52YWx1ZTsKIAogICAgICAgICBBU1NFUlQoIWdyb3Vw
LT5pc09ic29sZXRlKCkpOwogCkBAIC0yNjgsNyArMjY4LDcgQEAgQXBwbGljYXRpb25DYWNoZUdy
b3VwKiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZmFsbGJhY2tDYWNoZUdyb3VwRm9yVVJMKGNv
bnN0IEsKICAgICAvLyBDaGVjayBpZiBhbiBhcHByb3ByaWF0ZSBjYWNoZSBhbHJlYWR5IGV4aXN0
cyBpbiBtZW1vcnkuCiAgICAgQ2FjaGVHcm91cE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9j
YWNoZXNJbk1lbW9yeS5lbmQoKTsKICAgICBmb3IgKENhY2hlR3JvdXBNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV9jYWNoZXNJbk1lbW9yeS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAg
ICAgICAgQXBwbGljYXRpb25DYWNoZUdyb3VwKiBncm91cCA9IGl0LT5zZWNvbmQ7CisgICAgICAg
IEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogZ3JvdXAgPSBpdC0+dmFsdWU7CiAgICAgICAgIAogICAg
ICAgICBBU1NFUlQoIWdyb3VwLT5pc09ic29sZXRlKCkpOwogCkBAIC03MTMsMTMgKzcxMywxMyBA
QCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZShBcHBsaWNhdGlvbkNhY2hlKiBj
YWNoZSwgUmVzb3VyY2VTdG9yYWdlSURKbwogICAgIHsKICAgICAgICAgQXBwbGljYXRpb25DYWNo
ZTo6UmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGNhY2hlLT5lbmQoKTsKICAgICAg
ICAgZm9yIChBcHBsaWNhdGlvbkNhY2hlOjpSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBjYWNoZS0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICB1bnNpZ25l
ZCBvbGRTdG9yYWdlSUQgPSBpdC0+c2Vjb25kLT5zdG9yYWdlSUQoKTsKLSAgICAgICAgICAgIGlm
ICghc3RvcmUoaXQtPnNlY29uZC5nZXQoKSwgY2FjaGVTdG9yYWdlSUQpKQorICAgICAgICAgICAg
dW5zaWduZWQgb2xkU3RvcmFnZUlEID0gaXQtPnZhbHVlLT5zdG9yYWdlSUQoKTsKKyAgICAgICAg
ICAgIGlmICghc3RvcmUoaXQtPnZhbHVlLmdldCgpLCBjYWNoZVN0b3JhZ2VJRCkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICAvLyBTdG9yaW5nIHRoZSByZXNv
dXJjZSBzdWNjZWVkZWQuIExvZyBpdHMgb2xkIHN0b3JhZ2VJRCBpbiBjYXNlCiAgICAgICAgICAg
ICAvLyBpdCBuZWVkcyB0byBiZSByZXN0b3JlZCBsYXRlci4KLSAgICAgICAgICAgIHN0b3JhZ2VJ
REpvdXJuYWwtPmFkZChpdC0+c2Vjb25kLmdldCgpLCBvbGRTdG9yYWdlSUQpOworICAgICAgICAg
ICAgc3RvcmFnZUlESm91cm5hbC0+YWRkKGl0LT52YWx1ZS5nZXQoKSwgb2xkU3RvcmFnZUlEKTsK
ICAgICAgICAgfQogICAgIH0KICAgICAKQEAgLTgzOSw5ICs4MzksOSBAQCBib29sIEFwcGxpY2F0
aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZShBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqIHJlc291cmNl
LCB1bnNpZ25lZAogICAgIAogICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IHJlc291cmNlLT5yZXNwb25zZSgpLmh0dHBIZWFkZXJGaWVsZHMoKS5lbmQoKTsKICAgICBmb3Ig
KEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcmVzb3VyY2UtPnJlc3BvbnNlKCku
aHR0cEhlYWRlckZpZWxkcygpLmJlZ2luKCk7IGl0IT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5maXJzdCk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKGl0LT5rZXkpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgoVUNoYXIpJzonKTsK
LSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPnNlY29uZCk7CisgICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKGl0LT52YWx1ZSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KChVQ2hhciknXG4nKTsKICAgICB9CiAgICAgCkBAIC0xMjQxLDcgKzEyNDEsNyBAQCB2b2lkIEFw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjplbXB0eSgpCiAgICAgLy8gdW50aWwgYSBjYWNoZSB1cGRh
dGUgcHJvY2VzcyBoYXMgYmVlbiBpbml0aWF0ZWQuCiAgICAgQ2FjaGVHcm91cE1hcDo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gbV9jYWNoZXNJbk1lbW9yeS5lbmQoKTsKICAgICBmb3IgKENhY2hlR3Jv
dXBNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9jYWNoZXNJbk1lbW9yeS5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPmNsZWFyU3RvcmFnZUlEKCk7CisgICAg
ICAgIGl0LT52YWx1ZS0+Y2xlYXJTdG9yYWdlSUQoKTsKICAgICAKICAgICBjaGVja0ZvckRlbGV0
ZWRSZXNvdXJjZXMoKTsKIH0KQEAgLTEzMDMsNyArMTMwMyw3IEBAIGJvb2wgQXBwbGljYXRpb25D
YWNoZVN0b3JhZ2U6OnN0b3JlQ29weU9mQ2FjaGUoY29uc3QgU3RyaW5nJiBjYWNoZURpcmVjdG9y
eSwgQXBwCiAgICAgLy8gVHJhdmVyc2UgdGhlIGNhY2hlIGFuZCBhZGQgY29waWVzIG9mIGFsbCBy
ZXNvdXJjZXMuCiAgICAgQXBwbGljYXRpb25DYWNoZTo6UmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IGNhY2hlLT5lbmQoKTsKICAgICBmb3IgKEFwcGxpY2F0aW9uQ2FjaGU6OlJlc291
cmNlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGNhY2hlLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKLSAgICAgICAgQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJjZSA9IGl0LT5z
ZWNvbmQuZ2V0KCk7CisgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2Ug
PSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgIAogICAgICAgICBSZWZQdHI8QXBwbGljYXRpb25D
YWNoZVJlc291cmNlPiByZXNvdXJjZUNvcHkgPSBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OmNy
ZWF0ZShyZXNvdXJjZS0+dXJsKCksIHJlc291cmNlLT5yZXNwb25zZSgpLCByZXNvdXJjZS0+dHlw
ZSgpLCByZXNvdXJjZS0+ZGF0YSgpLCByZXNvdXJjZS0+cGF0aCgpKTsKICAgICAgICAgCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9BcmNoaXZlRmFjdG9yeS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9BcmNoaXZlRmFjdG9yeS5jcHAKaW5kZXgg
YzJiNmRiY2RkZWYzNmVkOGM3NDI5NWM4YjViYzhmMTY3ZTdlYzVjOS4uMDRmYjVlZGI1Njc0Yzcy
NDllY2UwZmMwMTkwMTUxYzljMmE5NzhiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2FyY2hpdmUvQXJjaGl2ZUZhY3RvcnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9hcmNoaXZlL0FyY2hpdmVGYWN0b3J5LmNwcApAQCAtOTUsNyArOTUsNyBAQCB2b2lkIEFyY2hp
dmVGYWN0b3J5OjpyZWdpc3Rlcktub3duQXJjaGl2ZU1JTUVUeXBlcygpCiAgICAgQXJjaGl2ZU1J
TUVUeXBlc01hcDo6aXRlcmF0b3IgZW5kID0gYXJjaGl2ZU1JTUVUeXBlcygpLmVuZCgpOwogCiAg
ICAgZm9yICg7IGkgIT0gZW5kOyArK2kpCi0gICAgICAgIG1pbWVUeXBlcy5hZGQoaS0+Zmlyc3Qp
OworICAgICAgICBtaW1lVHlwZXMuYWRkKGktPmtleSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2UuY3BwCmluZGV4IDcyOTg4OTMy
NDk1YzQ3NzE2YzZjZWM5MGRiNDhmODY5ZmVmY2YxZjkuLjNjYTI0NjJiOWFkNjQxOWJhMGZmZWVh
ZTIxODdiNzIwNjQwNTM1MjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNo
ZS9DYWNoZWRSYXdSZXNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hl
L0NhY2hlZFJhd1Jlc291cmNlLmNwcApAQCAtMTUzLDggKzE1Myw4IEBAIGJvb2wgQ2FjaGVkUmF3
UmVzb3VyY2U6OmNhblJldXNlKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgbmV3UmVxdWVzdCkgY29u
c3QKIAogICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG5ld0hlYWRlcnMu
ZW5kKCk7CiAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpID0gbmV3SGVh
ZGVycy5iZWdpbigpOyBpICE9IGVuZDsgKytpKSB7Ci0gICAgICAgIEF0b21pY1N0cmluZyBoZWFk
ZXJOYW1lID0gaS0+Zmlyc3Q7Ci0gICAgICAgIGlmIChpLT5zZWNvbmQgIT0gb2xkSGVhZGVycy5n
ZXQoaGVhZGVyTmFtZSkpCisgICAgICAgIEF0b21pY1N0cmluZyBoZWFkZXJOYW1lID0gaS0+a2V5
OworICAgICAgICBpZiAoaS0+dmFsdWUgIT0gb2xkSGVhZGVycy5nZXQoaGVhZGVyTmFtZSkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5jcHAKaW5kZXggNDNjM2Qx
NDRmODJmMTU2ODhjZjY2YzA1NGEwNGRhOTYwMTliOWQxMS4uNjRjZDQwOWNhNTQ4YTY3ZjM1MWI1
OTFlN2VjNTBlYzZiNjM3NGM5NSAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2Nh
Y2hlL0NhY2hlZFJlc291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUv
Q2FjaGVkUmVzb3VyY2UuY3BwCkBAIC02MTIsOCArNjEyLDggQEAgdm9pZCBDYWNoZWRSZXNvdXJj
ZTo6c3dpdGNoQ2xpZW50c1RvUmV2YWxpZGF0ZWRSZXNvdXJjZSgpCiAgICAgVmVjdG9yPENhY2hl
ZFJlc291cmNlQ2xpZW50Kj4gY2xpZW50c1RvTW92ZTsKICAgICBIYXNoQ291bnRlZFNldDxDYWNo
ZWRSZXNvdXJjZUNsaWVudCo+OjppdGVyYXRvciBlbmQyID0gbV9jbGllbnRzLmVuZCgpOwogICAg
IGZvciAoSGFzaENvdW50ZWRTZXQ8Q2FjaGVkUmVzb3VyY2VDbGllbnQqPjo6aXRlcmF0b3IgaXQg
PSBtX2NsaWVudHMuYmVnaW4oKTsgaXQgIT0gZW5kMjsgKytpdCkgewotICAgICAgICBDYWNoZWRS
ZXNvdXJjZUNsaWVudCogY2xpZW50ID0gaXQtPmZpcnN0OwotICAgICAgICB1bnNpZ25lZCBjb3Vu
dCA9IGl0LT5zZWNvbmQ7CisgICAgICAgIENhY2hlZFJlc291cmNlQ2xpZW50KiBjbGllbnQgPSBp
dC0+a2V5OworICAgICAgICB1bnNpZ25lZCBjb3VudCA9IGl0LT52YWx1ZTsKICAgICAgICAgd2hp
bGUgKGNvdW50KSB7CiAgICAgICAgICAgICBjbGllbnRzVG9Nb3ZlLmFwcGVuZChjbGllbnQpOwog
ICAgICAgICAgICAgLS1jb3VudDsKQEAgLTY0Nyw5ICs2NDcsOSBAQCB2b2lkIENhY2hlZFJlc291
cmNlOjp1cGRhdGVSZXNwb25zZUFmdGVyUmV2YWxpZGF0aW9uKGNvbnN0IFJlc291cmNlUmVzcG9u
c2UmIHZhbAogICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG5ld0hlYWRl
cnMuZW5kKCk7CiAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG5l
d0hlYWRlcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIC8vIERvbid0IGFs
bG93IDMwNCByZXNwb25zZSB0byB1cGRhdGUgY29udGVudCBoZWFkZXJzLCB0aGVzZSBjYW4ndCBj
aGFuZ2UgYnV0IHNvbWUgc2VydmVycyBzZW5kIHdyb25nIHZhbHVlcy4KLSAgICAgICAgaWYgKGl0
LT5maXJzdC5zdGFydHNXaXRoKGNvbnRlbnRIZWFkZXJQcmVmaXgsIGZhbHNlKSkKKyAgICAgICAg
aWYgKGl0LT5rZXkuc3RhcnRzV2l0aChjb250ZW50SGVhZGVyUHJlZml4LCBmYWxzZSkpCiAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgbV9yZXNwb25zZS5zZXRIVFRQSGVhZGVyRmllbGQo
aXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsKKyAgICAgICAgbV9yZXNwb25zZS5zZXRIVFRQSGVhZGVy
RmllbGQoaXQtPmtleSwgaXQtPnZhbHVlKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlci5oIGIvU291
cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyLmgKaW5k
ZXggOGIzNzgwYjVlNjRiMjE0MzQ2Mjg5NmJkYTJhNmEyNjVhNWE4YTA3NC4uNzkzM2IwYjgxNGM1
MjEyNTZlMDc2MGY4NjFiNDMxMDk3Yjg5YjU5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
bG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyLmgKQEAgLTQyLDcg
KzQyLDcgQEAgcHVibGljOgogICAgICAgICBJdGVyYXRvciBlbmQgPSBzZXQuZW5kKCk7CiAgICAg
ICAgIHNpemVfdCBjbGllbnRJbmRleCA9IDA7CiAgICAgICAgIGZvciAoSXRlcmF0b3IgY3VycmVu
dCA9IHNldC5iZWdpbigpOyBjdXJyZW50ICE9IGVuZDsgKytjdXJyZW50KQotICAgICAgICAgICAg
bV9jbGllbnRWZWN0b3JbY2xpZW50SW5kZXgrK10gPSBjdXJyZW50LT5maXJzdDsKKyAgICAgICAg
ICAgIG1fY2xpZW50VmVjdG9yW2NsaWVudEluZGV4KytdID0gY3VycmVudC0+a2V5OwogICAgIH0K
IAogICAgIFQqIG5leHQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hl
L0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9D
YWNoZWRSZXNvdXJjZUxvYWRlci5jcHAKaW5kZXggMzUzYTYyYWE2NDBkYmRkNWU1MTI3ZDkwYjEw
ODQ1NmQ0YWM3Y2VkYi4uMzZkNjRlNDg0ZTZhMTVhODc5NjM1MTg0ZmY2MmEzMGJiZDBkZWIyMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9h
ZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VM
b2FkZXIuY3BwCkBAIC0xMjYsNyArMTI2LDcgQEAgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6On5DYWNo
ZWRSZXNvdXJjZUxvYWRlcigpCiAgICAgY2xlYXJQcmVsb2FkcygpOwogICAgIERvY3VtZW50UmVz
b3VyY2VNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fZG9jdW1lbnRSZXNvdXJjZXMuZW5kKCk7CiAgICAg
Zm9yIChEb2N1bWVudFJlc291cmNlTWFwOjppdGVyYXRvciBpdCA9IG1fZG9jdW1lbnRSZXNvdXJj
ZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5zZXRPd25p
bmdDYWNoZWRSZXNvdXJjZUxvYWRlcigwKTsKKyAgICAgICAgaXQtPnZhbHVlLT5zZXRPd25pbmdD
YWNoZWRSZXNvdXJjZUxvYWRlcigwKTsKIAogICAgIC8vIE1ha2Ugc3VyZSBubyByZXF1ZXN0cyBz
dGlsbCBwb2ludCB0byB0aGlzIENhY2hlZFJlc291cmNlTG9hZGVyCiAgICAgQVNTRVJUKG1fcmVx
dWVzdENvdW50ID09IDApOwpAQCAtNDE5LDcgKzQxOSw3IEBAIENhY2hlZFJlc291cmNlSGFuZGxl
PENhY2hlZFJlc291cmNlPiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVzdFJlc291cmNlKENh
Y2hlCiAgICAgaWYgKG1lbW9yeUNhY2hlKCktPmRpc2FibGVkKCkpIHsKICAgICAgICAgRG9jdW1l
bnRSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX2RvY3VtZW50UmVzb3VyY2VzLmZpbmQodXJs
LnN0cmluZygpKTsKICAgICAgICAgaWYgKGl0ICE9IG1fZG9jdW1lbnRSZXNvdXJjZXMuZW5kKCkp
IHsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNldE93bmluZ0NhY2hlZFJlc291cmNlTG9hZGVy
KDApOworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRPd25pbmdDYWNoZWRSZXNvdXJjZUxvYWRl
cigwKTsKICAgICAgICAgICAgIG1fZG9jdW1lbnRSZXNvdXJjZXMucmVtb3ZlKGl0KTsKICAgICAg
ICAgfQogICAgIH0KQEAgLTYzMSw3ICs2MzEsNyBAQCB2b2lkIENhY2hlZFJlc291cmNlTG9hZGVy
OjpzZXRBdXRvTG9hZEltYWdlcyhib29sIGVuYWJsZSkKIAogICAgIERvY3VtZW50UmVzb3VyY2VN
YXA6Oml0ZXJhdG9yIGVuZCA9IG1fZG9jdW1lbnRSZXNvdXJjZXMuZW5kKCk7CiAgICAgZm9yIChE
b2N1bWVudFJlc291cmNlTWFwOjppdGVyYXRvciBpdCA9IG1fZG9jdW1lbnRSZXNvdXJjZXMuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIENhY2hlZFJlc291cmNlKiByZXNvdXJj
ZSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIENhY2hlZFJlc291cmNlKiByZXNvdXJjZSA9
IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgaWYgKHJlc291cmNlLT50eXBlKCkgPT0gQ2FjaGVk
UmVzb3VyY2U6OkltYWdlUmVzb3VyY2UpIHsKICAgICAgICAgICAgIENhY2hlZEltYWdlKiBpbWFn
ZSA9IGNvbnN0X2Nhc3Q8Q2FjaGVkSW1hZ2UqPihzdGF0aWNfY2FzdDxjb25zdCBDYWNoZWRJbWFn
ZSo+KHJlc291cmNlKSk7CiAKQEAgLTY1MSw3ICs2NTEsNyBAQCB2b2lkIENhY2hlZFJlc291cmNl
TG9hZGVyOjpyZW1vdmVDYWNoZWRSZXNvdXJjZShDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UpIGNv
bnN0CiAjaWZuZGVmIE5ERUJVRwogICAgIERvY3VtZW50UmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGl0
ID0gbV9kb2N1bWVudFJlc291cmNlcy5maW5kKHJlc291cmNlLT51cmwoKSk7CiAgICAgaWYgKGl0
ICE9IG1fZG9jdW1lbnRSZXNvdXJjZXMuZW5kKCkpCi0gICAgICAgIEFTU0VSVChpdC0+c2Vjb25k
LmdldCgpID09IHJlc291cmNlKTsKKyAgICAgICAgQVNTRVJUKGl0LT52YWx1ZS5nZXQoKSA9PSBy
ZXNvdXJjZSk7CiAjZW5kaWYKICAgICBtX2RvY3VtZW50UmVzb3VyY2VzLnJlbW92ZShyZXNvdXJj
ZS0+dXJsKCkpOwogfQpAQCAtNjg1LDkgKzY4NSw5IEBAIHZvaWQgQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXI6OmdhcmJhZ2VDb2xsZWN0RG9jdW1lbnRSZXNvdXJjZXMoKQogICAgIFN0cmluZ1ZlY3RvciBy
ZXNvdXJjZXNUb0RlbGV0ZTsKIAogICAgIGZvciAoRG9jdW1lbnRSZXNvdXJjZU1hcDo6aXRlcmF0
b3IgaXQgPSBtX2RvY3VtZW50UmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IG1fZG9jdW1lbnRSZXNv
dXJjZXMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQtPmhhc09uZUhhbmRs
ZSgpKSB7Ci0gICAgICAgICAgICByZXNvdXJjZXNUb0RlbGV0ZS5hcHBlbmQoaXQtPmZpcnN0KTsK
LSAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNldE93bmluZ0NhY2hlZFJlc291cmNlTG9hZGVyKDAp
OworICAgICAgICBpZiAoaXQtPnZhbHVlLT5oYXNPbmVIYW5kbGUoKSkgeworICAgICAgICAgICAg
cmVzb3VyY2VzVG9EZWxldGUuYXBwZW5kKGl0LT5rZXkpOworICAgICAgICAgICAgaXQtPnZhbHVl
LT5zZXRPd25pbmdDYWNoZWRSZXNvdXJjZUxvYWRlcigwKTsKICAgICAgICAgfQogICAgIH0KIApA
QCAtODgzLDggKzg4Myw4IEBAIHZvaWQgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcG9ydE1lbW9y
eVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pCiAgICAgTWVtb3J5Q2xh
c3NJbmZvIGluZm8obWVtb3J5T2JqZWN0SW5mbywgdGhpcywgV2ViQ29yZU1lbW9yeVR5cGVzOjpM
b2FkZXIpOwogICAgIGluZm8uYWRkSGFzaE1hcChtX2RvY3VtZW50UmVzb3VyY2VzKTsKICAgICBm
b3IgKERvY3VtZW50UmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGkgPSBtX2RvY3VtZW50UmVz
b3VyY2VzLmJlZ2luKCk7IGkgIT0gbV9kb2N1bWVudFJlc291cmNlcy5lbmQoKTsgKytpKSB7Ci0g
ICAgICAgIGluZm8uYWRkTWVtYmVyKGktPmZpcnN0KTsKLSAgICAgICAgaW5mby5hZGRNZW1iZXIo
aS0+c2Vjb25kKTsKKyAgICAgICAgaW5mby5hZGRNZW1iZXIoaS0+a2V5KTsKKyAgICAgICAgaW5m
by5hZGRNZW1iZXIoaS0+dmFsdWUpOwogICAgIH0KICAgICBpbmZvLmFkZEhhc2hTZXQobV92YWxp
ZGF0ZWRVUkxzKTsKICAgICBpZiAobV9wcmVsb2FkcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
Y2FjaGUvTWVtb3J5Q2FjaGUuY3BwCmluZGV4IDY2ZDMyMDFlYjQ1MDgxYjY5ZjRjNDNlY2M0NjQ0
YWNmYWQ3NGFkODAuLmYzMGFjZjdlMWFlM2VkMDA1MjcyNmJhZjJjNWIzOGE3NTgyZDVhMjIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmNwcApAQCAtNTQwLDcg
KzU0MCw3IEBAIHZvaWQgTWVtb3J5Q2FjaGU6OnJlbW92ZVJlc291cmNlc1dpdGhPcmlnaW4oU2Vj
dXJpdHlPcmlnaW4qIG9yaWdpbikKIAogICAgIENhY2hlZFJlc291cmNlTWFwOjppdGVyYXRvciBl
ID0gbV9yZXNvdXJjZXMuZW5kKCk7CiAgICAgZm9yIChDYWNoZWRSZXNvdXJjZU1hcDo6aXRlcmF0
b3IgaXQgPSBtX3Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSBlOyArK2l0KSB7Ci0gICAgICAgIENh
Y2hlZFJlc291cmNlKiByZXNvdXJjZSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIENhY2hlZFJlc291
cmNlKiByZXNvdXJjZSA9IGl0LT52YWx1ZTsKICAgICAgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2lu
PiByZXNvdXJjZU9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGVGcm9tU3RyaW5nKHJlc291
cmNlLT51cmwoKSk7CiAgICAgICAgIGlmICghcmVzb3VyY2VPcmlnaW4pCiAgICAgICAgICAgICBj
b250aW51ZTsKQEAgLTU1Niw3ICs1NTYsNyBAQCB2b2lkIE1lbW9yeUNhY2hlOjpnZXRPcmlnaW5z
V2l0aENhY2hlKFNlY3VyaXR5T3JpZ2luU2V0JiBvcmlnaW5zKQogewogICAgIENhY2hlZFJlc291
cmNlTWFwOjppdGVyYXRvciBlID0gbV9yZXNvdXJjZXMuZW5kKCk7CiAgICAgZm9yIChDYWNoZWRS
ZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSBlOyAr
K2l0KQotICAgICAgICBvcmlnaW5zLmFkZChTZWN1cml0eU9yaWdpbjo6Y3JlYXRlRnJvbVN0cmlu
ZyhpdC0+c2Vjb25kLT51cmwoKSkpOworICAgICAgICBvcmlnaW5zLmFkZChTZWN1cml0eU9yaWdp
bjo6Y3JlYXRlRnJvbVN0cmluZyhpdC0+dmFsdWUtPnVybCgpKSk7CiB9CiAKIHZvaWQgTWVtb3J5
Q2FjaGU6OnJlbW92ZUZyb21MaXZlRGVjb2RlZFJlc291cmNlc0xpc3QoQ2FjaGVkUmVzb3VyY2Uq
IHJlc291cmNlKQpAQCAtNjg5LDcgKzY4OSw3IEBAIE1lbW9yeUNhY2hlOjpTdGF0aXN0aWNzIE1l
bW9yeUNhY2hlOjpnZXRTdGF0aXN0aWNzKCkKICAgICBTdGF0aXN0aWNzIHN0YXRzOwogICAgIENh
Y2hlZFJlc291cmNlTWFwOjppdGVyYXRvciBlID0gbV9yZXNvdXJjZXMuZW5kKCk7CiAgICAgZm9y
IChDYWNoZWRSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaSA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7IGkg
IT0gZTsgKytpKSB7Ci0gICAgICAgIENhY2hlZFJlc291cmNlKiByZXNvdXJjZSA9IGktPnNlY29u
ZDsKKyAgICAgICAgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlID0gaS0+dmFsdWU7CiAgICAgICAg
IHN3aXRjaCAocmVzb3VyY2UtPnR5cGUoKSkgewogICAgICAgICBjYXNlIENhY2hlZFJlc291cmNl
OjpJbWFnZVJlc291cmNlOgogICAgICAgICAgICAgc3RhdHMuaW1hZ2VzLmFkZFJlc291cmNlKHJl
c291cmNlKTsKQEAgLTcyMSw4ICs3MjEsOCBAQCB2b2lkIE1lbW9yeUNhY2hlOjpyZXBvcnRNZW1v
cnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdAogICAgIGlu
Zm8uYWRkSGFzaE1hcChtX3Jlc291cmNlcyk7CiAgICAgQ2FjaGVkUmVzb3VyY2VNYXA6OmNvbnN0
X2l0ZXJhdG9yIGUgPSBtX3Jlc291cmNlcy5lbmQoKTsKICAgICBmb3IgKENhY2hlZFJlc291cmNl
TWFwOjpjb25zdF9pdGVyYXRvciBpID0gbV9yZXNvdXJjZXMuYmVnaW4oKTsgaSAhPSBlOyArK2kp
IHsKLSAgICAgICAgaW5mby5hZGRNZW1iZXIoaS0+Zmlyc3QpOwotICAgICAgICBpbmZvLmFkZE1l
bWJlcihpLT5zZWNvbmQpOworICAgICAgICBpbmZvLmFkZE1lbWJlcihpLT5rZXkpOworICAgICAg
ICBpbmZvLmFkZE1lbWJlcihpLT52YWx1ZSk7CiAgICAgfQogICAgIGluZm8uYWRkVmVjdG9yKG1f
YWxsUmVzb3VyY2VzKTsKICAgICBpbmZvLmFkZE1lbWJlcihtX2xpdmVEZWNvZGVkUmVzb3VyY2Vz
KTsKQEAgLTczOCw3ICs3MzgsNyBAQCB2b2lkIE1lbW9yeUNhY2hlOjpzZXREaXNhYmxlZChib29s
IGRpc2FibGVkKQogICAgICAgICBDYWNoZWRSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaSA9IG1fcmVz
b3VyY2VzLmJlZ2luKCk7CiAgICAgICAgIGlmIChpID09IG1fcmVzb3VyY2VzLmVuZCgpKQogICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGV2aWN0KGktPnNlY29uZCk7CisgICAgICAgIGV2aWN0
KGktPnZhbHVlKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9pY29uL0ljb25EYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29u
RGF0YWJhc2UuY3BwCmluZGV4IGQ3MGVjYjVhYjhiNjgyN2MxY2E0YjExN2M2NjQ5MmEzNmJjMTk1
ZDIuLjUzZjEyNjBlN2MxOGFmYzhlNzZhNGMxNmNmMjNhYzgwNDE4MjY3MmMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFzZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmNwcApAQCAtMTkzLDcgKzE5Myw3IEBA
IHZvaWQgSWNvbkRhdGFiYXNlOjpyZW1vdmVBbGxJY29ucygpCiAgICAgICAgIEhhc2hNYXA8U3Ry
aW5nLCBQYWdlVVJMUmVjb3JkKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX3BhZ2VVUkxUb1JlY29yZE1h
cC5iZWdpbigpOwogICAgICAgICBIYXNoTWFwPFN0cmluZywgUGFnZVVSTFJlY29yZCo+OjppdGVy
YXRvciBlbmQgPSBtX3BhZ2VVUkxUb1JlY29yZE1hcC5lbmQoKTsKICAgICAgICAgZm9yICg7IGl0
ZXIgIT0gZW5kOyArK2l0ZXIpCi0gICAgICAgICAgICAoKml0ZXIpLnNlY29uZC0+c2V0SWNvblJl
Y29yZCgwKTsKKyAgICAgICAgICAgICgqaXRlcikudmFsdWUtPnNldEljb25SZWNvcmQoMCk7CiAg
ICAgICAgICAgICAKICAgICAgICAgLy8gQ2xlYXIgdGhlIGljb25VUkwgLT4gSWNvblJlY29yZCBt
YXAKICAgICAgICAgbV9pY29uVVJMVG9SZWNvcmRNYXAuY2xlYXIoKTsKQEAgLTc4Niw3ICs3ODYs
NyBAQCBzaXplX3QgSWNvbkRhdGFiYXNlOjppY29uUmVjb3JkQ291bnRXaXRoRGF0YSgpCiAgICAg
SGFzaE1hcDxTdHJpbmcsIEljb25SZWNvcmQqPjo6aXRlcmF0b3IgZW5kID0gbV9pY29uVVJMVG9S
ZWNvcmRNYXAuZW5kKCk7CiAgICAgCiAgICAgZm9yICg7IGkgIT0gZW5kOyArK2kpCi0gICAgICAg
IHJlc3VsdCArPSAoKCppKS5zZWNvbmQtPmltYWdlRGF0YVN0YXR1cygpID09IEltYWdlRGF0YVN0
YXR1c1ByZXNlbnQpOworICAgICAgICByZXN1bHQgKz0gKCgqaSkudmFsdWUtPmltYWdlRGF0YVN0
YXR1cygpID09IEltYWdlRGF0YVN0YXR1c1ByZXNlbnQpOwogICAgICAgICAgICAgCiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KQEAgLTE1NTcsMTMgKzE1NTcsMTMgQEAgdm9pZCBJY29uRGF0YWJhc2U6
OnBlcmZvcm1QZW5kaW5nUmV0YWluQW5kUmVsZWFzZU9wZXJhdGlvbnMoKQogICAgIH0KIAogICAg
IGZvciAoSGFzaENvdW50ZWRTZXQ8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSB0b1JldGFp
bi5iZWdpbigpLCBlbmQgPSB0b1JldGFpbi5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAg
ICAgIEFTU0VSVCghaXQtPmZpcnN0LmltcGwoKSB8fCBpdC0+Zmlyc3QuaW1wbCgpLT5oYXNPbmVS
ZWYoKSk7Ci0gICAgICAgIHBlcmZvcm1SZXRhaW5JY29uRm9yUGFnZVVSTChpdC0+Zmlyc3QsIGl0
LT5zZWNvbmQpOworICAgICAgICBBU1NFUlQoIWl0LT5rZXkuaW1wbCgpIHx8IGl0LT5rZXkuaW1w
bCgpLT5oYXNPbmVSZWYoKSk7CisgICAgICAgIHBlcmZvcm1SZXRhaW5JY29uRm9yUGFnZVVSTChp
dC0+a2V5LCBpdC0+dmFsdWUpOwogICAgIH0KIAogICAgIGZvciAoSGFzaENvdW50ZWRTZXQ8U3Ry
aW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSB0b1JlbGVhc2UuYmVnaW4oKSwgZW5kID0gdG9SZWxl
YXNlLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgQVNTRVJUKCFpdC0+Zmlyc3Qu
aW1wbCgpIHx8IGl0LT5maXJzdC5pbXBsKCktPmhhc09uZVJlZigpKTsKLSAgICAgICAgcGVyZm9y
bVJlbGVhc2VJY29uRm9yUGFnZVVSTChpdC0+Zmlyc3QsIGl0LT5zZWNvbmQpOworICAgICAgICBB
U1NFUlQoIWl0LT5rZXkuaW1wbCgpIHx8IGl0LT5rZXkuaW1wbCgpLT5oYXNPbmVSZWYoKSk7Cisg
ICAgICAgIHBlcmZvcm1SZWxlYXNlSWNvbkZvclBhZ2VVUkwoaXQtPmtleSwgaXQtPnZhbHVlKTsK
ICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAppbmRleCBjNDY1MWQ3NDQ0Y2Y0
NGFlYWQ3OWMwZDJkMGJmODFmZWVhNzVhMjc3Li5lYTIzOGQ1NTcwY2MyZWU5ODgwN2EwYTcxZmZi
ZjdlZTc1YjI5NmE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCkBAIC0yNDgsNyArMjQ4
LDcgQEAgYm9vbCBET01XaW5kb3c6OmRpc3BhdGNoQWxsUGVuZGluZ0JlZm9yZVVubG9hZEV2ZW50
cygpCiAgICAgVmVjdG9yPFJlZlB0cjxET01XaW5kb3c+ID4gd2luZG93czsKICAgICBET01XaW5k
b3dTZXQ6Oml0ZXJhdG9yIGVuZCA9IHNldC5lbmQoKTsKICAgICBmb3IgKERPTVdpbmRvd1NldDo6
aXRlcmF0b3IgaXQgPSBzZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICB3aW5k
b3dzLmFwcGVuZChpdC0+Zmlyc3QpOworICAgICAgICB3aW5kb3dzLmFwcGVuZChpdC0+a2V5KTsK
IAogICAgIHNpemVfdCBzaXplID0gd2luZG93cy5zaXplKCk7CiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBzaXplOyArK2kpIHsKQEAgLTI5MCw3ICsyOTAsNyBAQCB2b2lkIERPTVdpbmRvdzo6
ZGlzcGF0Y2hBbGxQZW5kaW5nVW5sb2FkRXZlbnRzKCkKICAgICBWZWN0b3I8UmVmUHRyPERPTVdp
bmRvdz4gPiB3aW5kb3dzOwogICAgIERPTVdpbmRvd1NldDo6aXRlcmF0b3IgZW5kID0gc2V0LmVu
ZCgpOwogICAgIGZvciAoRE9NV2luZG93U2V0OjppdGVyYXRvciBpdCA9IHNldC5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHdpbmRvd3MuYXBwZW5kKGl0LT5maXJzdCk7CisgICAg
ICAgIHdpbmRvd3MuYXBwZW5kKGl0LT5rZXkpOwogCiAgICAgc2l6ZV90IHNpemUgPSB3aW5kb3dz
LnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4IDMyZDIzOGNlMzg4NmEyYTkxYWQ5ODYxZGQ5
ZDM4NzYwZjI3NjM2OTkuLjEyNjYxYTc1NmJkYjUyMTIwNzFiNjMzYzFjNjE5ZjE1NGM5NGQwMjkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKQEAgLTM2NzYsNyArMzY3Niw3IEBA
IGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hF
dmVudCYgZXZlbnQpCiAgICAgICAgIC8vIHJlbGVhc2VkIG9yIGNhbmNlbGxlZCBpdCB3aWxsIG9u
bHkgYXBwZWFyIGluIHRoZSBjaGFuZ2VkVG91Y2hlcyBsaXN0LgogICAgICAgICBpZiAocG9pbnRT
dGF0ZSAhPSBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoUmVsZWFzZWQgJiYgcG9pbnRTdGF0ZSAh
PSBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoQ2FuY2VsbGVkKSB7CiAgICAgICAgICAgICB0b3Vj
aGVzLT5hcHBlbmQodG91Y2gpOwotICAgICAgICAgICAgdGFyZ2V0VG91Y2hlc0l0ZXJhdG9yLT5z
ZWNvbmQtPmFwcGVuZCh0b3VjaCk7CisgICAgICAgICAgICB0YXJnZXRUb3VjaGVzSXRlcmF0b3It
PnZhbHVlLT5hcHBlbmQodG91Y2gpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gTm93IGJ1aWxk
IHVwIHRoZSBjb3JyZWN0IGxpc3QgZm9yIGNoYW5nZWRUb3VjaGVzLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNw
cAppbmRleCBhN2FhZjk1NGJmNGY3MTIzNzY3MDRlMjcxZmQ0NjNmMWUzNjYyMTNlLi5iMDk2YWRh
MTc4YThkZTE1YWRiODU4NzBiZWFlZjE5YWMyMWY4MGVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0ZyYW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcApA
QCAtNTc5LDcgKzU3OSw3IEBAIHZvaWQgRnJhbWU6OmluamVjdFVzZXJTY3JpcHRzKFVzZXJTY3Jp
cHRJbmplY3Rpb25UaW1lIGluamVjdGlvblRpbWUpCiAgICAgICAgIHJldHVybjsKICAgICBVc2Vy
U2NyaXB0TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSB1c2VyU2NyaXB0cy0+ZW5kKCk7CiAgICAg
Zm9yIChVc2VyU2NyaXB0TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHVzZXJTY3JpcHRzLT5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGluamVjdFVzZXJTY3JpcHRzRm9yV29ybGQo
aXQtPmZpcnN0LmdldCgpLCAqaXQtPnNlY29uZCwgaW5qZWN0aW9uVGltZSk7CisgICAgICAgIGlu
amVjdFVzZXJTY3JpcHRzRm9yV29ybGQoaXQtPmtleS5nZXQoKSwgKml0LT52YWx1ZSwgaW5qZWN0
aW9uVGltZSk7CiB9CiAKIHZvaWQgRnJhbWU6OmluamVjdFVzZXJTY3JpcHRzRm9yV29ybGQoRE9N
V3JhcHBlcldvcmxkKiB3b3JsZCwgY29uc3QgVXNlclNjcmlwdFZlY3RvciYgdXNlclNjcmlwdHMs
IFVzZXJTY3JpcHRJbmplY3Rpb25UaW1lIGluamVjdGlvblRpbWUpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VH
cm91cC5jcHAKaW5kZXggNDVkMjVmNTUyMTRkNzQ0MTk0ZTkzN2ZhMzFlNmU2NDYwZWFjYWY5Mi4u
MDMyN2JiMGI2YzdlZWI4M2MyYzNlOWQwMjYyN2I4MGRjNzE5YzFmMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9QYWdlR3JvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
UGFnZUdyb3VwLmNwcApAQCAtOTMsMTIgKzkzLDEyIEBAIFBhZ2VHcm91cCogUGFnZUdyb3VwOjpw
YWdlR3JvdXAoY29uc3QgU3RyaW5nJiBncm91cE5hbWUpCiAgICAgUGFnZUdyb3VwTWFwOjpBZGRS
ZXN1bHQgcmVzdWx0ID0gcGFnZUdyb3Vwcy0+YWRkKGdyb3VwTmFtZSwgMCk7CiAKICAgICBpZiAo
cmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgQVNTRVJUKCFyZXN1bHQuaXRlcmF0b3ItPnNl
Y29uZCk7Ci0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gbmV3IFBhZ2VHcm91cChn
cm91cE5hbWUpOworICAgICAgICBBU1NFUlQoIXJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOworICAg
ICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gbmV3IFBhZ2VHcm91cChncm91cE5hbWUpOwog
ICAgIH0KIAotICAgIEFTU0VSVChyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7Ci0gICAgcmV0dXJu
IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgIEFTU0VSVChyZXN1bHQuaXRlcmF0b3ItPnZh
bHVlKTsKKyAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIAogdm9pZCBQYWdl
R3JvdXA6OmNsb3NlTG9jYWxTdG9yYWdlKCkKQEAgLTEwOSw4ICsxMDksOCBAQCB2b2lkIFBhZ2VH
cm91cDo6Y2xvc2VMb2NhbFN0b3JhZ2UoKQogICAgIFBhZ2VHcm91cE1hcDo6aXRlcmF0b3IgZW5k
ID0gcGFnZUdyb3Vwcy0+ZW5kKCk7CiAKICAgICBmb3IgKFBhZ2VHcm91cE1hcDo6aXRlcmF0b3Ig
aXQgPSBwYWdlR3JvdXBzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYg
KGl0LT5zZWNvbmQtPmhhc0xvY2FsU3RvcmFnZSgpKQotICAgICAgICAgICAgaXQtPnNlY29uZC0+
bG9jYWxTdG9yYWdlKCktPmNsb3NlKCk7CisgICAgICAgIGlmIChpdC0+dmFsdWUtPmhhc0xvY2Fs
U3RvcmFnZSgpKQorICAgICAgICAgICAgaXQtPnZhbHVlLT5sb2NhbFN0b3JhZ2UoKS0+Y2xvc2Uo
KTsKICAgICB9CiB9CiAKQEAgLTEyMSw4ICsxMjEsOCBAQCB2b2lkIFBhZ2VHcm91cDo6Y2xlYXJM
b2NhbFN0b3JhZ2VGb3JBbGxPcmlnaW5zKCkKIAogICAgIFBhZ2VHcm91cE1hcDo6aXRlcmF0b3Ig
ZW5kID0gcGFnZUdyb3Vwcy0+ZW5kKCk7CiAgICAgZm9yIChQYWdlR3JvdXBNYXA6Oml0ZXJhdG9y
IGl0ID0gcGFnZUdyb3Vwcy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlm
IChpdC0+c2Vjb25kLT5oYXNMb2NhbFN0b3JhZ2UoKSkKLSAgICAgICAgICAgIGl0LT5zZWNvbmQt
PmxvY2FsU3RvcmFnZSgpLT5jbGVhckFsbE9yaWdpbnNGb3JEZWxldGlvbigpOworICAgICAgICBp
ZiAoaXQtPnZhbHVlLT5oYXNMb2NhbFN0b3JhZ2UoKSkKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+
bG9jYWxTdG9yYWdlKCktPmNsZWFyQWxsT3JpZ2luc0ZvckRlbGV0aW9uKCk7CiAgICAgfQogfQog
CkBAIC0xMzMsOCArMTMzLDggQEAgdm9pZCBQYWdlR3JvdXA6OmNsZWFyTG9jYWxTdG9yYWdlRm9y
T3JpZ2luKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCiAKICAgICBQYWdlR3JvdXBNYXA6Oml0ZXJh
dG9yIGVuZCA9IHBhZ2VHcm91cHMtPmVuZCgpOwogICAgIGZvciAoUGFnZUdyb3VwTWFwOjppdGVy
YXRvciBpdCA9IHBhZ2VHcm91cHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAg
ICBpZiAoaXQtPnNlY29uZC0+aGFzTG9jYWxTdG9yYWdlKCkpCi0gICAgICAgICAgICBpdC0+c2Vj
b25kLT5sb2NhbFN0b3JhZ2UoKS0+Y2xlYXJPcmlnaW5Gb3JEZWxldGlvbihvcmlnaW4pOworICAg
ICAgICBpZiAoaXQtPnZhbHVlLT5oYXNMb2NhbFN0b3JhZ2UoKSkKKyAgICAgICAgICAgIGl0LT52
YWx1ZS0+bG9jYWxTdG9yYWdlKCktPmNsZWFyT3JpZ2luRm9yRGVsZXRpb24ob3JpZ2luKTsKICAg
ICB9ICAgIAogfQogICAgIApAQCAtMTQ1LDggKzE0NSw4IEBAIHZvaWQgUGFnZUdyb3VwOjpzeW5j
TG9jYWxTdG9yYWdlKCkKIAogICAgIFBhZ2VHcm91cE1hcDo6aXRlcmF0b3IgZW5kID0gcGFnZUdy
b3Vwcy0+ZW5kKCk7CiAgICAgZm9yIChQYWdlR3JvdXBNYXA6Oml0ZXJhdG9yIGl0ID0gcGFnZUdy
b3Vwcy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25k
LT5oYXNMb2NhbFN0b3JhZ2UoKSkKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPmxvY2FsU3RvcmFn
ZSgpLT5zeW5jKCk7CisgICAgICAgIGlmIChpdC0+dmFsdWUtPmhhc0xvY2FsU3RvcmFnZSgpKQor
ICAgICAgICAgICAgaXQtPnZhbHVlLT5sb2NhbFN0b3JhZ2UoKS0+c3luYygpOwogICAgIH0KIH0K
IApAQCAtMjY5LDcgKzI2OSw3IEBAIHZvaWQgUGFnZUdyb3VwOjphZGRVc2VyU2NyaXB0VG9Xb3Js
ZChET01XcmFwcGVyV29ybGQqIHdvcmxkLCBjb25zdCBTdHJpbmcmIHNvdXJjCiAgICAgT3duUHRy
PFVzZXJTY3JpcHQ+IHVzZXJTY3JpcHQgPSBhZG9wdFB0cihuZXcgVXNlclNjcmlwdChzb3VyY2Us
IHVybCwgd2hpdGVsaXN0LCBibGFja2xpc3QsIGluamVjdGlvblRpbWUsIGluamVjdGVkRnJhbWVz
KSk7CiAgICAgaWYgKCFtX3VzZXJTY3JpcHRzKQogICAgICAgICBtX3VzZXJTY3JpcHRzID0gYWRv
cHRQdHIobmV3IFVzZXJTY3JpcHRNYXApOwotICAgIE93blB0cjxVc2VyU2NyaXB0VmVjdG9yPiYg
c2NyaXB0c0luV29ybGQgPSBtX3VzZXJTY3JpcHRzLT5hZGQod29ybGQsIG51bGxwdHIpLml0ZXJh
dG9yLT5zZWNvbmQ7CisgICAgT3duUHRyPFVzZXJTY3JpcHRWZWN0b3I+JiBzY3JpcHRzSW5Xb3Js
ZCA9IG1fdXNlclNjcmlwdHMtPmFkZCh3b3JsZCwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwog
ICAgIGlmICghc2NyaXB0c0luV29ybGQpCiAgICAgICAgIHNjcmlwdHNJbldvcmxkID0gYWRvcHRQ
dHIobmV3IFVzZXJTY3JpcHRWZWN0b3IpOwogICAgIHNjcmlwdHNJbldvcmxkLT5hcHBlbmQodXNl
clNjcmlwdC5yZWxlYXNlKCkpOwpAQCAtMjg2LDcgKzI4Niw3IEBAIHZvaWQgUGFnZUdyb3VwOjph
ZGRVc2VyU3R5bGVTaGVldFRvV29ybGQoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCwgY29uc3QgU3Ry
aW5nJiBzCiAgICAgT3duUHRyPFVzZXJTdHlsZVNoZWV0PiB1c2VyU3R5bGVTaGVldCA9IGFkb3B0
UHRyKG5ldyBVc2VyU3R5bGVTaGVldChzb3VyY2UsIHVybCwgd2hpdGVsaXN0LCBibGFja2xpc3Qs
IGluamVjdGVkRnJhbWVzLCBsZXZlbCkpOwogICAgIGlmICghbV91c2VyU3R5bGVTaGVldHMpCiAg
ICAgICAgIG1fdXNlclN0eWxlU2hlZXRzID0gYWRvcHRQdHIobmV3IFVzZXJTdHlsZVNoZWV0TWFw
KTsKLSAgICBPd25QdHI8VXNlclN0eWxlU2hlZXRWZWN0b3I+JiBzdHlsZVNoZWV0c0luV29ybGQg
PSBtX3VzZXJTdHlsZVNoZWV0cy0+YWRkKHdvcmxkLCBudWxscHRyKS5pdGVyYXRvci0+c2Vjb25k
OworICAgIE93blB0cjxVc2VyU3R5bGVTaGVldFZlY3Rvcj4mIHN0eWxlU2hlZXRzSW5Xb3JsZCA9
IG1fdXNlclN0eWxlU2hlZXRzLT5hZGQod29ybGQsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsK
ICAgICBpZiAoIXN0eWxlU2hlZXRzSW5Xb3JsZCkKICAgICAgICAgc3R5bGVTaGVldHNJbldvcmxk
ID0gYWRvcHRQdHIobmV3IFVzZXJTdHlsZVNoZWV0VmVjdG9yKTsKICAgICBzdHlsZVNoZWV0c0lu
V29ybGQtPmFwcGVuZCh1c2VyU3R5bGVTaGVldC5yZWxlYXNlKCkpOwpAQCAtMzA2LDcgKzMwNiw3
IEBAIHZvaWQgUGFnZUdyb3VwOjpyZW1vdmVVc2VyU2NyaXB0RnJvbVdvcmxkKERPTVdyYXBwZXJX
b3JsZCogd29ybGQsIGNvbnN0IEtVUkwmIHVyCiAgICAgaWYgKGl0ID09IG1fdXNlclNjcmlwdHMt
PmVuZCgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgVXNlclNjcmlwdFZlY3Rvciogc2Ny
aXB0cyA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgVXNlclNjcmlwdFZlY3Rvciogc2NyaXB0cyA9
IGl0LT52YWx1ZS5nZXQoKTsKICAgICBmb3IgKGludCBpID0gc2NyaXB0cy0+c2l6ZSgpIC0gMTsg
aSA+PSAwOyAtLWkpIHsKICAgICAgICAgaWYgKHNjcmlwdHMtPmF0KGkpLT51cmwoKSA9PSB1cmwp
CiAgICAgICAgICAgICBzY3JpcHRzLT5yZW1vdmUoaSk7CkBAIC0zMjgsNyArMzI4LDcgQEAgdm9p
ZCBQYWdlR3JvdXA6OnJlbW92ZVVzZXJTdHlsZVNoZWV0RnJvbVdvcmxkKERPTVdyYXBwZXJXb3Js
ZCogd29ybGQsIGNvbnN0IEtVUkwKICAgICBpZiAoaXQgPT0gbV91c2VyU3R5bGVTaGVldHMtPmVu
ZCgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgVXNlclN0eWxlU2hlZXRWZWN0b3IqIHN0
eWxlc2hlZXRzID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICBVc2VyU3R5bGVTaGVldFZlY3Rvciog
c3R5bGVzaGVldHMgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgZm9yIChpbnQgaSA9IHN0eWxlc2hl
ZXRzLT5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgewogICAgICAgICBpZiAoc3R5bGVzaGVldHMt
PmF0KGkpLT51cmwoKSA9PSB1cmwpIHsKICAgICAgICAgICAgIHN0eWxlc2hlZXRzLT5yZW1vdmUo
aSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCmluZGV4IGM5MTFkNTRhOTI1
NDZhN2NlMTRmMTg2NmVjYmNlZDhiNTZlNTY2M2IuLmExNjE0OTI1NWM3ZTNlNDI2MDM5YzRhMTMy
ZmIxNjJiYzdhMTdmZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlh
bGl6ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCkBA
IC0zMzksNyArMzM5LDcgQEAgS1VSTCBQYWdlU2VyaWFsaXplcjo6dXJsRm9yQmxhbmtGcmFtZShG
cmFtZSogZnJhbWUpCiB7CiAgICAgSGFzaE1hcDxGcmFtZSosIEtVUkw+OjppdGVyYXRvciBpdGVy
ID0gbV9ibGFua0ZyYW1lVVJMcy5maW5kKGZyYW1lKTsKICAgICBpZiAoaXRlciAhPSBtX2JsYW5r
RnJhbWVVUkxzLmVuZCgpKQotICAgICAgICByZXR1cm4gaXRlci0+c2Vjb25kOworICAgICAgICBy
ZXR1cm4gaXRlci0+dmFsdWU7CiAgICAgU3RyaW5nIHVybCA9ICJ3eWNpd3lnOi8vZnJhbWUvIiAr
IFN0cmluZzo6bnVtYmVyKG1fYmxhbmtGcmFtZUNvdW50ZXIrKyk7CiAgICAgS1VSTCBmYWtlVVJM
KFBhcnNlZFVSTFN0cmluZywgdXJsKTsKICAgICBtX2JsYW5rRnJhbWVVUkxzLmFkZChmcmFtZSwg
ZmFrZVVSTCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5UG9saWN5
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlQb2xpY3kuY3BwCmluZGV4IGMyYTVh
YjExNDM1ZWY2ZGIwNTc2OGM3NmNhMDM1N2I1NjI1ODMzMTIuLjViMzZmNGY3MTZjNDRiZmIwOWYy
MGU2MzJjYzBkMDM4NmYzY2NhM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2Vj
dXJpdHlQb2xpY3kuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlQb2xpY3ku
Y3BwCkBAIC0xMzMsOSArMTMzLDkgQEAgdm9pZCBTZWN1cml0eVBvbGljeTo6YWRkT3JpZ2luQWNj
ZXNzV2hpdGVsaXN0RW50cnkoY29uc3QgU2VjdXJpdHlPcmlnaW4mIHNvdXJjZU8KICAgICBTdHJp
bmcgc291cmNlU3RyaW5nID0gc291cmNlT3JpZ2luLnRvU3RyaW5nKCk7CiAgICAgT3JpZ2luQWNj
ZXNzTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gb3JpZ2luQWNjZXNzTWFwKCkuYWRkKHNvdXJjZVN0
cmluZywgbnVsbHB0cik7CiAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXN1
bHQuaXRlcmF0b3ItPnNlY29uZCA9IGFkb3B0UHRyKG5ldyBPcmlnaW5BY2Nlc3NXaGl0ZUxpc3Qp
OworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gYWRvcHRQdHIobmV3IE9yaWdpbkFj
Y2Vzc1doaXRlTGlzdCk7CiAKLSAgICBPcmlnaW5BY2Nlc3NXaGl0ZUxpc3QqIGxpc3QgPSByZXN1
bHQuaXRlcmF0b3ItPnNlY29uZC5nZXQoKTsKKyAgICBPcmlnaW5BY2Nlc3NXaGl0ZUxpc3QqIGxp
c3QgPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpOwogICAgIGxpc3QtPmFwcGVuZChPcmln
aW5BY2Nlc3NFbnRyeShkZXN0aW5hdGlvblByb3RvY29sLCBkZXN0aW5hdGlvbkRvbWFpbiwgYWxs
b3dEZXN0aW5hdGlvblN1YmRvbWFpbnMgPyBPcmlnaW5BY2Nlc3NFbnRyeTo6QWxsb3dTdWJkb21h
aW5zIDogT3JpZ2luQWNjZXNzRW50cnk6OkRpc2FsbG93U3ViZG9tYWlucykpOwogfQogCkBAIC0x
NTIsNyArMTUyLDcgQEAgdm9pZCBTZWN1cml0eVBvbGljeTo6cmVtb3ZlT3JpZ2luQWNjZXNzV2hp
dGVsaXN0RW50cnkoY29uc3QgU2VjdXJpdHlPcmlnaW4mIHNvdXIKICAgICBpZiAoaXQgPT0gbWFw
LmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBPcmlnaW5BY2Nlc3NXaGl0ZUxpc3QqIGxp
c3QgPSBpdC0+c2Vjb25kLmdldCgpOworICAgIE9yaWdpbkFjY2Vzc1doaXRlTGlzdCogbGlzdCA9
IGl0LT52YWx1ZS5nZXQoKTsKICAgICBzaXplX3QgaW5kZXggPSBsaXN0LT5maW5kKE9yaWdpbkFj
Y2Vzc0VudHJ5KGRlc3RpbmF0aW9uUHJvdG9jb2wsIGRlc3RpbmF0aW9uRG9tYWluLCBhbGxvd0Rl
c3RpbmF0aW9uU3ViZG9tYWlucyA/IE9yaWdpbkFjY2Vzc0VudHJ5OjpBbGxvd1N1YmRvbWFpbnMg
OiBPcmlnaW5BY2Nlc3NFbnRyeTo6RGlzYWxsb3dTdWJkb21haW5zKSk7CiAgICAgaWYgKGluZGV4
ID09IG5vdEZvdW5kKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1NldHRpbmdzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCmlu
ZGV4IGRmNDI1OTY0ZGU2MTFkYjUzOGY5Y2JiY2M3NjdkMjQyZTEzM2VkMTcuLmI2OWZjY2ZiZjQ2
NDNlOGYyYjQ3MzcwYWQxZDRlMzBkYzAzZDVjNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvU2V0dGluZ3MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3Bw
CkBAIC02MCw3ICs2MCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRHZW5lcmljRm9udEZhbWls
eU1hcChTY3JpcHRGb250RmFtaWx5TWFwJiBmb250TWFwLCBjb25zdCBBCiAgICAgICAgIGlmIChp
dCA9PSBmb250TWFwLmVuZCgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBmb250TWFw
LnJlbW92ZShpdCk7Ci0gICAgfSBlbHNlIGlmIChpdCAhPSBmb250TWFwLmVuZCgpICYmIGl0LT5z
ZWNvbmQgPT0gZmFtaWx5KQorICAgIH0gZWxzZSBpZiAoaXQgIT0gZm9udE1hcC5lbmQoKSAmJiBp
dC0+dmFsdWUgPT0gZmFtaWx5KQogICAgICAgICByZXR1cm47CiAgICAgZWxzZQogICAgICAgICBm
b250TWFwLnNldChzdGF0aWNfY2FzdDxpbnQ+KHNjcmlwdCksIGZhbWlseSk7CkBAIC03Myw3ICs3
Myw3IEBAIHN0YXRpYyBpbmxpbmUgY29uc3QgQXRvbWljU3RyaW5nJiBnZXRHZW5lcmljRm9udEZh
bWlseUZvclNjcmlwdChjb25zdCBTY3JpcHRGb250CiB7CiAgICAgU2NyaXB0Rm9udEZhbWlseU1h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBmb250TWFwLmZpbmQoc3RhdGljX2Nhc3Q8aW50PihzY3Jp
cHQpKTsKICAgICBpZiAoaXQgIT0gZm9udE1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5z
ZWNvbmQ7CisgICAgICAgIHJldHVybiBpdC0+dmFsdWU7CiAgICAgaWYgKHNjcmlwdCAhPSBVU0NS
SVBUX0NPTU1PTikKICAgICAgICAgcmV0dXJuIGdldEdlbmVyaWNGb250RmFtaWx5Rm9yU2NyaXB0
KGZvbnRNYXAsIFVTQ1JJUFRfQ09NTU9OKTsKICAgICByZXR1cm4gZW1wdHlBdG9tOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9TcGVlY2hJbnB1dC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1NwZWVjaElucHV0LmNwcAppbmRleCAwMTI4ZWY4YTQwYTQyNDM1NGFiNWY4ZTUwYmE4
ZWNjNjIyNTdiM2M5Li44MzI4YzVkNGRmMzI5OTQyYjU5ZjNlY2MyMjUzNTY4Y2UyYThhMTFkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NwZWVjaElucHV0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1NwZWVjaElucHV0LmNwcApAQCAtNjIsNyArNjIsNyBAQCBpbnQgU3Bl
ZWNoSW5wdXQ6OnJlZ2lzdGVyTGlzdGVuZXIoU3BlZWNoSW5wdXRMaXN0ZW5lciogbGlzdGVuZXIp
CiAjaWYgZGVmaW5lZChERUJVRykKICAgICAvLyBDaGVjayBpZiBhbHJlYWR5IHByZXNlbnQuCiAg
ICAgZm9yIChIYXNoTWFwPGludCwgU3BlZWNoSW5wdXRMaXN0ZW5lcio+OjppdGVyYXRvciBpdCA9
IG1fbGlzdGVuZXJzLmJlZ2luKCk7IGl0ICE9IG1fbGlzdGVuZXJzLmVuZCgpOyArK2l0KQotICAg
ICAgQVNTRVJUKGl0LT5zZWNvbmQgIT0gbGlzdGVuZXIpOworICAgICAgQVNTRVJUKGl0LT52YWx1
ZSAhPSBsaXN0ZW5lcik7CiAjZW5kaWYKIAogICAgIG1fbGlzdGVuZXJzLmFkZChtX25leHRMaXN0
ZW5lcklkLCBsaXN0ZW5lcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RvdWNo
RGlzYW1iaWd1YXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Ub3VjaERpc2FtYmlndWF0
aW9uLmNwcAppbmRleCA1NDMxOWE2YTQzMjdkMDRlNDkyZTY2ZTVlZjVjYjU0ZDRiOTI0MmNmLi5i
NTgyMzM4YzIxNzU3NTA1MDU4NTQ1MzBkY2MwOTc0MjdiMzI1OWE3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1RvdWNoRGlzYW1iaWd1YXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvVG91Y2hEaXNhbWJpZ3VhdGlvbi5jcHAKQEAgLTEwNiw3ICsxMDYsNyBAQCB2b2lk
IGZpbmRHb29kVG91Y2hUYXJnZXRzKGNvbnN0IEludFJlY3QmIHRvdWNoQm94LCBGcmFtZSogbWFp
bkZyYW1lLCBmbG9hdCBwYWdlUwogICAgICAgICAgICAgaWYgKG5vZGUtPmlzRG9jdW1lbnROb2Rl
KCkgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omh0bWxUYWcpIHx8IG5vZGUtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpib2R5VGFnKSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIGlmIChub2RlLT53aWxsUmVzcG9uZFRvTW91c2VDbGlja0V2ZW50cygpKSB7Ci0gICAg
ICAgICAgICAgICAgVG91Y2hUYXJnZXREYXRhJiB0YXJnZXREYXRhID0gdG91Y2hUYXJnZXRzLmFk
ZChub2RlLCBUb3VjaFRhcmdldERhdGEoKSkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgICAg
ICAgICBUb3VjaFRhcmdldERhdGEmIHRhcmdldERhdGEgPSB0b3VjaFRhcmdldHMuYWRkKG5vZGUs
IFRvdWNoVGFyZ2V0RGF0YSgpKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgICAgICAgICAgdGFy
Z2V0RGF0YS53aW5kb3dCb3VuZGluZ0JveCA9IGJvdW5kaW5nQm94Rm9yRXZlbnROb2Rlcyhub2Rl
KTsKICAgICAgICAgICAgICAgICB0YXJnZXREYXRhLnNjb3JlID0gc2NvcmVUb3VjaFRhcmdldCh0
b3VjaFBvaW50LCB0b3VjaFBvaW50UGFkZGluZywgdGFyZ2V0RGF0YS53aW5kb3dCb3VuZGluZ0Jv
eCk7CiAgICAgICAgICAgICAgICAgYmVzdFNjb3JlID0gbWF4KGJlc3RTY29yZSwgdGFyZ2V0RGF0
YS5zY29yZSk7CkBAIC0xMTgsOSArMTE4LDkgQEAgdm9pZCBmaW5kR29vZFRvdWNoVGFyZ2V0cyhj
b25zdCBJbnRSZWN0JiB0b3VjaEJveCwgRnJhbWUqIG1haW5GcmFtZSwgZmxvYXQgcGFnZVMKICAg
ICBmb3IgKEhhc2hNYXA8Tm9kZSosIFRvdWNoVGFyZ2V0RGF0YT46Oml0ZXJhdG9yIGl0ID0gdG91
Y2hUYXJnZXRzLmJlZ2luKCk7IGl0ICE9IHRvdWNoVGFyZ2V0cy5lbmQoKTsgKytpdCkgewogICAg
ICAgICAvLyBDdXJyZW50bHkgdGhlIHNjb3JpbmcgZnVuY3Rpb24gdXNlcyB0aGUgb3ZlcmxhcCBh
cmVhIHdpdGggdGhlIGZhdCBwb2ludCBhcyB0aGUgc2NvcmUuCiAgICAgICAgIC8vIFdlIGlnbm9y
ZSB0aGUgY2FuZGlkYXRlcyB0aGF0IGhhcyBsZXNzIHRoYW4gMS8yIG92ZXJsYXAgKHdlIGNvbnNp
ZGVyIG5vdCByZWFsbHkgYW1iaWd1b3VzIGVub3VnaCkgdGhhbiB0aGUgYmVzdCBjYW5kaWRhdGUg
dG8gYXZvaWQgZXhjZXNzaXZlIHBvcHVwcy4KLSAgICAgICAgaWYgKGl0LT5zZWNvbmQuc2NvcmUg
PCBiZXN0U2NvcmUgKiAwLjUpCisgICAgICAgIGlmIChpdC0+dmFsdWUuc2NvcmUgPCBiZXN0U2Nv
cmUgKiAwLjUpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgZ29vZFRhcmdldHMuYXBw
ZW5kKGl0LT5zZWNvbmQud2luZG93Qm91bmRpbmdCb3gpOworICAgICAgICBnb29kVGFyZ2V0cy5h
cHBlbmQoaXQtPnZhbHVlLndpbmRvd0JvdW5kaW5nQm94KTsKICAgICB9CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvV2luZG93RmVhdHVyZXMuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9XaW5kb3dGZWF0dXJlcy5jcHAKaW5kZXggNmNkZTliNWVmMDYwZWNkZTE1ZGEwMTcy
Nzg3OWNhNGE0MGM1MmY4My4uNzc2OGEwOWNkODU0YWY2YjVmMGZmMmQ0OWY5ZTRiZDFlNWZmZGE0
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9XaW5kb3dGZWF0dXJlcy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9XaW5kb3dGZWF0dXJlcy5jcHAKQEAgLTIxMSw3ICsyMTEs
NyBAQCBib29sIFdpbmRvd0ZlYXR1cmVzOjpib29sRmVhdHVyZShjb25zdCBEaWFsb2dGZWF0dXJl
c01hcCYgZmVhdHVyZXMsIGNvbnN0IGNoYXIqCiAgICAgRGlhbG9nRmVhdHVyZXNNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gZmVhdHVyZXMuZmluZChrZXkpOwogICAgIGlmIChpdCA9PSBmZWF0dXJl
cy5lbmQoKSkKICAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTsKLSAgICBjb25zdCBTdHJpbmcm
IHZhbHVlID0gaXQtPnNlY29uZDsKKyAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0gaXQtPnZhbHVl
OwogICAgIHJldHVybiB2YWx1ZS5pc051bGwoKSB8fCB2YWx1ZSA9PSAiMSIgfHwgdmFsdWUgPT0g
InllcyIgfHwgdmFsdWUgPT0gIm9uIjsKIH0KIApAQCAtMjIzLDcgKzIyMyw3IEBAIGZsb2F0IFdp
bmRvd0ZlYXR1cmVzOjpmbG9hdEZlYXR1cmUoY29uc3QgRGlhbG9nRmVhdHVyZXNNYXAmIGZlYXR1
cmVzLCBjb25zdCBjaGFyCiAgICAgLy8gRklYTUU6IFRoZSB0b0RvdWJsZSBmdW5jdGlvbiBkb2Vz
IG5vdCBvZmZlciBhIHdheSB0byB0ZWxsICIwcSIgZnJvbSBzdHJpbmcgd2l0aCBubyBkaWdpdHMg
aW4gaXQ6IEJvdGgKICAgICAvLyByZXR1cm4gdGhlIG51bWJlciAwIGFuZCBmYWxzZSBmb3Igb2su
IEJ1dCAiMHEiIHNob3VsZCB5aWVsZCB0aGUgbWluaW11bSByYXRoZXIgdGhhbiB0aGUgZGVmYXVs
dC4KICAgICBib29sIG9rOwotICAgIGRvdWJsZSBwYXJzZWROdW1iZXIgPSBpdC0+c2Vjb25kLnRv
RG91YmxlKCZvayk7CisgICAgZG91YmxlIHBhcnNlZE51bWJlciA9IGl0LT52YWx1ZS50b0RvdWJs
ZSgmb2spOwogICAgIGlmICgocGFyc2VkTnVtYmVyID09IDAgJiYgIW9rKSB8fCBpc25hbihwYXJz
ZWROdW1iZXIpKQogICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlOwogICAgIGlmIChwYXJzZWRO
dW1iZXIgPCBtaW4gfHwgbWF4IDw9IG1pbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKaW5kZXggYzQ5MTE5ZTZhMTNjMDE0
YzhmMjU4ZTI5NDYxMzgxMWNkZmEwZDUxYi4uNWUwNzE3ZTBhOWNmYmEzMjg5ODI5NTYyMTc3OTEy
YzA2Zjc4YzhiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5p
bWF0aW9uQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24v
QW5pbWF0aW9uQ29udHJvbGxlci5jcHAKQEAgLTkzLDE0ICs5MywxNCBAQCBkb3VibGUgQW5pbWF0
aW9uQ29udHJvbGxlclByaXZhdGU6OnVwZGF0ZUFuaW1hdGlvbnMoU2V0Q2hhbmdlZCBjYWxsU2V0
Q2hhbmdlZC8qCiAKICAgICBSZW5kZXJPYmplY3RBbmltYXRpb25NYXA6OmNvbnN0X2l0ZXJhdG9y
IGFuaW1hdGlvbnNFbmQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuZW5kKCk7CiAgICAgZm9yIChS
ZW5kZXJPYmplY3RBbmltYXRpb25NYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9jb21wb3NpdGVB
bmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGFuaW1hdGlvbnNFbmQ7ICsraXQpIHsKLSAgICAgICAg
Q29tcG9zaXRlQW5pbWF0aW9uKiBjb21wQW5pbSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAg
IENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcEFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAg
IGlmICghY29tcEFuaW0tPnN1c3BlbmRlZCgpICYmIGNvbXBBbmltLT5oYXNBbmltYXRpb25zKCkp
IHsKICAgICAgICAgICAgIGRvdWJsZSB0ID0gY29tcEFuaW0tPnRpbWVUb05leHRTZXJ2aWNlKCk7
CiAgICAgICAgICAgICBpZiAodCAhPSAtMSAmJiAodCA8IHRpbWVUb05leHRTZXJ2aWNlIHx8IHRp
bWVUb05leHRTZXJ2aWNlID09IC0xKSkKICAgICAgICAgICAgICAgICB0aW1lVG9OZXh0U2Vydmlj
ZSA9IHQ7CiAgICAgICAgICAgICBpZiAoIXRpbWVUb05leHRTZXJ2aWNlKSB7CiAgICAgICAgICAg
ICAgICAgaWYgKGNhbGxTZXRDaGFuZ2VkID09IENhbGxTZXRDaGFuZ2VkKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIE5vZGUqIG5vZGUgPSBpdC0+Zmlyc3QtPm5vZGUoKTsKKyAgICAgICAgICAgICAg
ICAgICAgTm9kZSogbm9kZSA9IGl0LT5rZXktPm5vZGUoKTsKICAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKCFub2RlIHx8IChub2RlLT5kb2N1bWVudCgpICYmICFub2RlLT5kb2N1bWVudCgpLT5p
blBhZ2VDYWNoZSgpKSk7CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE5lZWRzU3R5bGVS
ZWNhbGMoU3ludGhldGljU3R5bGVDaGFuZ2UpOwogICAgICAgICAgICAgICAgICAgICBjYWxsZWRT
ZXRDaGFuZ2VkID0gdHJ1ZTsKQEAgLTI5Miw5ICsyOTIsOSBAQCB2b2lkIEFuaW1hdGlvbkNvbnRy
b2xsZXJQcml2YXRlOjpzdXNwZW5kQW5pbWF0aW9uc0ZvckRvY3VtZW50KERvY3VtZW50KiBkb2N1
bWVudAogICAgIAogICAgIFJlbmRlck9iamVjdEFuaW1hdGlvbk1hcDo6Y29uc3RfaXRlcmF0b3Ig
YW5pbWF0aW9uc0VuZCA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5lbmQoKTsKICAgICBmb3IgKFJl
bmRlck9iamVjdEFuaW1hdGlvbk1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2NvbXBvc2l0ZUFu
aW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gYW5pbWF0aW9uc0VuZDsgKytpdCkgewotICAgICAgICBS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gaXQtPmZpcnN0OworICAgICAgICBSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyID0gaXQtPmtleTsKICAgICAgICAgaWYgKHJlbmRlcmVyLT5kb2N1bWVudCgpID09
IGRvY3VtZW50KSB7Ci0gICAgICAgICAgICBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBBbmltID0g
aXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcEFu
aW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBjb21wQW5pbS0+c3VzcGVuZEFuaW1h
dGlvbnMoKTsKICAgICAgICAgfQogICAgIH0KQEAgLTMwOCw5ICszMDgsOSBAQCB2b2lkIEFuaW1h
dGlvbkNvbnRyb2xsZXJQcml2YXRlOjpyZXN1bWVBbmltYXRpb25zRm9yRG9jdW1lbnQoRG9jdW1l
bnQqIGRvY3VtZW50KQogICAgIAogICAgIFJlbmRlck9iamVjdEFuaW1hdGlvbk1hcDo6Y29uc3Rf
aXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5lbmQoKTsKICAg
ICBmb3IgKFJlbmRlck9iamVjdEFuaW1hdGlvbk1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2Nv
bXBvc2l0ZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gYW5pbWF0aW9uc0VuZDsgKytpdCkgewot
ICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gaXQtPmZpcnN0OworICAgICAgICBSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyID0gaXQtPmtleTsKICAgICAgICAgaWYgKHJlbmRlcmVyLT5kb2N1
bWVudCgpID09IGRvY3VtZW50KSB7Ci0gICAgICAgICAgICBDb21wb3NpdGVBbmltYXRpb24qIGNv
bXBBbmltID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgIENvbXBvc2l0ZUFuaW1hdGlv
biogY29tcEFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBjb21wQW5pbS0+cmVz
dW1lQW5pbWF0aW9ucygpOwogICAgICAgICB9CiAgICAgfQpAQCAtMzk2LDggKzM5Niw4IEBAIHVu
c2lnbmVkIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlv
bnMoRG9jdW1lbnQqIGRvY3VtZW50CiAgICAgCiAgICAgUmVuZGVyT2JqZWN0QW5pbWF0aW9uTWFw
Ojpjb25zdF9pdGVyYXRvciBhbmltYXRpb25zRW5kID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmVu
ZCgpOwogICAgIGZvciAoUmVuZGVyT2JqZWN0QW5pbWF0aW9uTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBhbmltYXRpb25zRW5kOyAr
K2l0KSB7Ci0gICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBpdC0+Zmlyc3Q7Ci0gICAg
ICAgIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcEFuaW0gPSBpdC0+c2Vjb25kLmdldCgpOworICAg
ICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gaXQtPmtleTsKKyAgICAgICAgQ29tcG9zaXRl
QW5pbWF0aW9uKiBjb21wQW5pbSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgaWYgKHJlbmRl
cmVyLT5kb2N1bWVudCgpID09IGRvY3VtZW50KQogICAgICAgICAgICAgY291bnQgKz0gY29tcEFu
aW0tPm51bWJlck9mQWN0aXZlQW5pbWF0aW9ucygpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uY3BwCmluZGV4IGYzNTc3
ODE4OTc0MGVlMzZlOGEzM2E1MGFmNmNhZDU2OTI5MGY5NmIuLjBiMGYzNzlkNTZhYmQ4NWM2M2Jh
ZTE0Y2U1ZWEyYjQ5YWIxM2VlOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5p
bWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9h
bmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmNwcApAQCAtNTgsNyArNTgsNyBAQCB2b2lkIENv
bXBvc2l0ZUFuaW1hdGlvbjo6Y2xlYXJSZW5kZXJlcigpCiAgICAgICAgIC8vIGFuIGFuaW1hdGlv
biBjYWxsYmFjayAoc2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MjA1MikKICAgICAgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3Ig
dHJhbnNpdGlvbnNFbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOwogICAgICAgICBmb3IgKENTU1By
b3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5i
ZWdpbigpOyBpdCAhPSB0cmFuc2l0aW9uc0VuZDsgKytpdCkgewotICAgICAgICAgICAgSW1wbGlj
aXRBbmltYXRpb24qIHRyYW5zaXRpb24gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAg
SW1wbGljaXRBbmltYXRpb24qIHRyYW5zaXRpb24gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAg
ICAgICBhbmltYXRpb25Db250cm9sbGVyKCktPmFuaW1hdGlvbldpbGxCZVJlbW92ZWQodHJhbnNp
dGlvbik7CiAgICAgICAgICAgICB0cmFuc2l0aW9uLT5jbGVhcigpOwogICAgICAgICB9CkBAIC02
Nyw3ICs2Nyw3IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpjbGVhclJlbmRlcmVyKCkKICAg
ICAgICAgbV9rZXlmcmFtZUFuaW1hdGlvbnMuY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgICAgICBB
bmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBhbmltYXRpb25zRW5kID0gbV9rZXlmcmFt
ZUFuaW1hdGlvbnMuZW5kKCk7CiAgICAgICAgIGZvciAoQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBhbmltYXRp
b25zRW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBLZXlmcmFtZUFuaW1hdGlvbiogYW5pbSA9IGl0
LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBLZXlmcmFtZUFuaW1hdGlvbiogYW5pbSA9IGl0
LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+YW5pbWF0
aW9uV2lsbEJlUmVtb3ZlZChhbmltKTsKICAgICAgICAgICAgIGFuaW0tPmNsZWFyKCk7CiAgICAg
ICAgIH0KQEAgLTg0LDcgKzg0LDcgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnVwZGF0ZVRy
YW5zaXRpb25zKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIFJlbmRlclN0eWxlKgogICAgIC8vIGlu
IHRoZSBuZXh0IGxvb3AgYW5kIHRoZW4gdG9zcyB0aGUgb25lcyB0aGF0IGRpZG4ndCBnZXQgbWFy
a2VkLgogICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IG1fdHJhbnNpdGlvbnMuZW5kKCk7CiAgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5zZXRBY3RpdmUoZmFsc2UpOworICAgICAgICBpdC0+
dmFsdWUtPnNldEFjdGl2ZShmYWxzZSk7CiAgICAgICAgIAogICAgIFJlZlB0cjxSZW5kZXJTdHls
ZT4gbW9kaWZpZWRDdXJyZW50U3R5bGU7CiAgICAgCkBAIC0xODEsNyArMTgxLDcgQEAgdm9pZCBD
b21wb3NpdGVBbmltYXRpb246OnVwZGF0ZVRyYW5zaXRpb25zKFJlbmRlck9iamVjdCogcmVuZGVy
ZXIsIFJlbmRlclN0eWxlKgogICAgIFZlY3RvcjxpbnQ+IHRvQmVSZW1vdmVkOwogICAgIGVuZCA9
IG1fdHJhbnNpdGlvbnMuZW5kKCk7CiAgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7Ci0gICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZC5nZXQo
KTsKKyAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAg
ICAgICAgIGlmICghYW5pbS0+YWN0aXZlKCkpIHsKICAgICAgICAgICAgIGFuaW1hdGlvbkNvbnRy
b2xsZXIoKS0+YW5pbWF0aW9uV2lsbEJlUmVtb3ZlZChhbmltKTsKICAgICAgICAgICAgIHRvQmVS
ZW1vdmVkLmFwcGVuZChhbmltLT5hbmltYXRpbmdQcm9wZXJ0eSgpKTsKQEAgLTIwNywxMyArMjA3
LDEzIEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVLZXlmcmFtZUFuaW1hdGlvbnMo
UmVuZGVyT2JqZWN0KiByZW5kZXJlciwgUmVuZGVyCiAgICAgICAgIC8vIFRoZSBjdXJyZW50IGFu
ZCB0YXJnZXQgYW5pbWF0aW9ucyBhcmUgdGhlIHNhbWUgc28gd2UganVzdCBuZWVkIHRvIHRvc3Mg
YW55IAogICAgICAgICAvLyBhbmltYXRpb24gd2hpY2ggaXMgZmluaXNoZWQgKHBvc3RBY3RpdmUp
LgogICAgICAgICBmb3IgKEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9r
ZXlmcmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0ga2ZlbmQ7ICsraXQpIHsKLSAgICAgICAg
ICAgIGlmIChpdC0+c2Vjb25kLT5wb3N0QWN0aXZlKCkpCi0gICAgICAgICAgICAgICAgaXQtPnNl
Y29uZC0+c2V0SW5kZXgoLTEpOworICAgICAgICAgICAgaWYgKGl0LT52YWx1ZS0+cG9zdEFjdGl2
ZSgpKQorICAgICAgICAgICAgICAgIGl0LT52YWx1ZS0+c2V0SW5kZXgoLTEpOwogICAgICAgICB9
CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gTWFyayBhbGwgZXhpc3RpbmcgYW5pbWF0aW9ucyBh
cyBubyBsb25nZXIgYWN0aXZlLgogICAgICAgICBmb3IgKEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0ga2ZlbmQ7
ICsraXQpCi0gICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRJbmRleCgtMSk7CisgICAgICAgICAg
ICBpdC0+dmFsdWUtPnNldEluZGV4KC0xKTsKICAgICAgICAgICAgIAogICAgICAgICAvLyBUb3Nz
IHRoZSBhbmltYXRpb24gb3JkZXIgbWFwLgogICAgICAgICBtX2tleWZyYW1lQW5pbWF0aW9uT3Jk
ZXJNYXAuY2xlYXIoKTsKQEAgLTI2Miw3ICsyNjIsNyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlv
bjo6dXBkYXRlS2V5ZnJhbWVBbmltYXRpb25zKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIFJlbmRl
cgogICAgIFZlY3RvcjxBdG9taWNTdHJpbmdJbXBsKj4gYW5pbXNUb0JlUmVtb3ZlZDsKICAgICBr
ZmVuZCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmVuZCgpOwogICAgIGZvciAoQW5pbWF0aW9uTmFt
ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5iZWdpbigpOyBp
dCAhPSBrZmVuZDsgKytpdCkgewotICAgICAgICBLZXlmcmFtZUFuaW1hdGlvbioga2V5ZnJhbWVB
bmltID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24qIGtleWZy
YW1lQW5pbSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgaWYgKGtleWZyYW1lQW5pbS0+aW5k
ZXgoKSA8IDApIHsKICAgICAgICAgICAgIGFuaW1zVG9CZVJlbW92ZWQuYXBwZW5kKGtleWZyYW1l
QW5pbS0+bmFtZSgpLmltcGwoKSk7CiAgICAgICAgICAgICBhbmltYXRpb25Db250cm9sbGVyKCkt
PmFuaW1hdGlvbldpbGxCZVJlbW92ZWQoa2V5ZnJhbWVBbmltKTsKQEAgLTI5MCw3ICsyOTAsNyBA
QCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBDb21wb3NpdGVBbmltYXRpb246OmFuaW1hdGUoUmVu
ZGVyT2JqZWN0KiByZW5kZXJlciwgUmVuZAogICAgICAgICBpZiAoIW1fdHJhbnNpdGlvbnMuaXNF
bXB0eSgpKSB7CiAgICAgICAgICAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9p
dGVyYXRvciBlbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOwogICAgICAgICAgICAgZm9yIChDU1NQ
cm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKEltcGxpY2l0
QW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZC5nZXQoKSkKKyAgICAgICAgICAgICAgICBpZiAo
SW1wbGljaXRBbmltYXRpb24qIGFuaW0gPSBpdC0+dmFsdWUuZ2V0KCkpCiAgICAgICAgICAgICAg
ICAgICAgIGFuaW0tPmFuaW1hdGUodGhpcywgcmVuZGVyZXIsIGN1cnJlbnRTdHlsZSwgdGFyZ2V0
U3R5bGUsIHJlc3VsdFN0eWxlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMzEyLDcg
KzMxMiw3IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IENvbXBvc2l0ZUFuaW1hdGlvbjo6Z2V0
QW5pbWF0ZWRTdHlsZSgpIGNvbnN0CiAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiByZXN1bHRTdHls
ZTsKICAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBt
X3RyYW5zaXRpb25zLmVuZCgpOwogICAgIGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgewotICAgICAgICBpZiAoSW1wbGljaXRBbmltYXRpb24qIGltcGxpY2l0QW5pbWF0aW9uID0g
aXQtPnNlY29uZC5nZXQoKSkKKyAgICAgICAgaWYgKEltcGxpY2l0QW5pbWF0aW9uKiBpbXBsaWNp
dEFuaW1hdGlvbiA9IGl0LT52YWx1ZS5nZXQoKSkKICAgICAgICAgICAgIGltcGxpY2l0QW5pbWF0
aW9uLT5nZXRBbmltYXRlZFN0eWxlKHJlc3VsdFN0eWxlKTsKICAgICB9CiAKQEAgLTMzMyw3ICsz
MzMsNyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6c2V0QW5pbWF0aW5nKGJvb2wgYW5pbWF0
aW5nKQogICAgIGlmICghbV90cmFuc2l0aW9ucy5pc0VtcHR5KCkpIHsKICAgICAgICAgQ1NTUHJv
cGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgdHJhbnNpdGlvbnNFbmQgPSBtX3Ry
YW5zaXRpb25zLmVuZCgpOwogICAgICAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSB0cmFuc2l0
aW9uc0VuZDsgKytpdCkgewotICAgICAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIHRyYW5zaXRp
b24gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIHRy
YW5zaXRpb24gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICB0cmFuc2l0aW9uLT5zZXRB
bmltYXRpbmcoYW5pbWF0aW5nKTsKICAgICAgICAgfQogICAgIH0KQEAgLTM0MSw3ICszNDEsNyBA
QCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6c2V0QW5pbWF0aW5nKGJvb2wgYW5pbWF0aW5nKQog
ICAgICAgICBtX2tleWZyYW1lQW5pbWF0aW9ucy5jaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgICAg
IEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGFuaW1hdGlvbnNFbmQgPSBtX2tleWZy
YW1lQW5pbWF0aW9ucy5lbmQoKTsKICAgICAgICAgZm9yIChBbmltYXRpb25OYW1lTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGFuaW1h
dGlvbnNFbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIEtleWZyYW1lQW5pbWF0aW9uKiBhbmltID0g
aXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgIEtleWZyYW1lQW5pbWF0aW9uKiBhbmltID0g
aXQtPnZhbHVlLmdldCgpOwogICAgICAgICAgICAgYW5pbS0+c2V0QW5pbWF0aW5nKGFuaW1hdGlu
Zyk7CiAgICAgICAgIH0KICAgICB9CkBAIC0zNTYsNyArMzU2LDcgQEAgZG91YmxlIENvbXBvc2l0
ZUFuaW1hdGlvbjo6dGltZVRvTmV4dFNlcnZpY2UoKSBjb25zdAogICAgIGlmICghbV90cmFuc2l0
aW9ucy5pc0VtcHR5KCkpIHsKICAgICAgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29u
c3RfaXRlcmF0b3IgdHJhbnNpdGlvbnNFbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOwogICAgICAg
ICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90
cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSB0cmFuc2l0aW9uc0VuZDsgKytpdCkgewotICAgICAg
ICAgICAgSW1wbGljaXRBbmltYXRpb24qIHRyYW5zaXRpb24gPSBpdC0+c2Vjb25kLmdldCgpOwor
ICAgICAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIHRyYW5zaXRpb24gPSBpdC0+dmFsdWUuZ2V0
KCk7CiAgICAgICAgICAgICBkb3VibGUgdCA9IHRyYW5zaXRpb24gPyB0cmFuc2l0aW9uLT50aW1l
VG9OZXh0U2VydmljZSgpIDogLTE7CiAgICAgICAgICAgICBpZiAodCA8IG1pblQgfHwgbWluVCA9
PSAtMSkKICAgICAgICAgICAgICAgICBtaW5UID0gdDsKQEAgLTM2OCw3ICszNjgsNyBAQCBkb3Vi
bGUgQ29tcG9zaXRlQW5pbWF0aW9uOjp0aW1lVG9OZXh0U2VydmljZSgpIGNvbnN0CiAgICAgICAg
IG1fa2V5ZnJhbWVBbmltYXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsKICAgICAgICAgQW5pbWF0
aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fa2V5ZnJhbWVBbmlt
YXRpb25zLmVuZCgpOwogICAgICAgICBmb3IgKEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gYW5pbWF0aW9uc0Vu
ZDsgKytpdCkgewotICAgICAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24qIGFuaW1hdGlvbiA9IGl0
LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBLZXlmcmFtZUFuaW1hdGlvbiogYW5pbWF0aW9u
ID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAgICAgZG91YmxlIHQgPSBhbmltYXRpb24gPyBh
bmltYXRpb24tPnRpbWVUb05leHRTZXJ2aWNlKCkgOiAtMTsKICAgICAgICAgICAgIGlmICh0IDwg
bWluVCB8fCBtaW5UID09IC0xKQogICAgICAgICAgICAgICAgIG1pblQgPSB0OwpAQCAtMzkwLDcg
KzM5MCw3IEBAIFBhc3NSZWZQdHI8S2V5ZnJhbWVBbmltYXRpb24+IENvbXBvc2l0ZUFuaW1hdGlv
bjo6Z2V0QW5pbWF0aW9uRm9yUHJvcGVydHkoQ1NTUHJvCiAgICAgICAgIG1fa2V5ZnJhbWVBbmlt
YXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsKICAgICAgICAgQW5pbWF0aW9uTmFtZU1hcDo6Y29u
c3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmVuZCgpOwog
ICAgICAgICBmb3IgKEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlm
cmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gYW5pbWF0aW9uc0VuZDsgKytpdCkgewotICAg
ICAgICAgICAgUmVmUHRyPEtleWZyYW1lQW5pbWF0aW9uPiBhbmltID0gaXQtPnNlY29uZDsKKyAg
ICAgICAgICAgIFJlZlB0cjxLZXlmcmFtZUFuaW1hdGlvbj4gYW5pbSA9IGl0LT52YWx1ZTsKICAg
ICAgICAgICAgIGlmIChhbmltLT5oYXNBbmltYXRpb25Gb3JQcm9wZXJ0eShwcm9wZXJ0eSkpCiAg
ICAgICAgICAgICAgICAgcmV0dmFsID0gYW5pbTsKICAgICAgICAgfQpAQCAtNDEwLDE0ICs0MTAs
MTQgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnN1c3BlbmRBbmltYXRpb25zKCkKICAgICAg
ICAgbV9rZXlmcmFtZUFuaW1hdGlvbnMuY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgICAgICBBbmlt
YXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBhbmltYXRpb25zRW5kID0gbV9rZXlmcmFtZUFu
aW1hdGlvbnMuZW5kKCk7CiAgICAgICAgIGZvciAoQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBhbmltYXRpb25z
RW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAoS2V5ZnJhbWVBbmltYXRpb24qIGFuaW0gPSBp
dC0+c2Vjb25kLmdldCgpKQorICAgICAgICAgICAgaWYgKEtleWZyYW1lQW5pbWF0aW9uKiBhbmlt
ID0gaXQtPnZhbHVlLmdldCgpKQogICAgICAgICAgICAgICAgIGFuaW0tPnVwZGF0ZVBsYXlTdGF0
ZShBbmltUGxheVN0YXRlUGF1c2VkKTsKICAgICAgICAgfQogICAgIH0KICAgICBpZiAoIW1fdHJh
bnNpdGlvbnMuaXNFbXB0eSgpKSB7CiAgICAgICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6
OmNvbnN0X2l0ZXJhdG9yIHRyYW5zaXRpb25zRW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKICAg
ICAgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9
IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gdHJhbnNpdGlvbnNFbmQ7ICsraXQpIHsKLSAg
ICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZC5nZXQoKTsKKyAg
ICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnZhbHVlLmdldCgpOwogICAg
ICAgICAgICAgaWYgKGFuaW0gJiYgYW5pbS0+aGFzU3R5bGUoKSkKICAgICAgICAgICAgICAgICBh
bmltLT51cGRhdGVQbGF5U3RhdGUoQW5pbVBsYXlTdGF0ZVBhdXNlZCk7CiAgICAgICAgIH0KQEAg
LTQzNSw3ICs0MzUsNyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6cmVzdW1lQW5pbWF0aW9u
cygpCiAgICAgICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsKICAg
ICAgICAgQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1f
a2V5ZnJhbWVBbmltYXRpb25zLmVuZCgpOwogICAgICAgICBmb3IgKEFuaW1hdGlvbk5hbWVNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0g
YW5pbWF0aW9uc0VuZDsgKytpdCkgewotICAgICAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24qIGFu
aW0gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24qIGFu
aW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoYW5pbSAmJiBhbmltLT5wbGF5
U3RhdGVQbGF5aW5nKCkpCiAgICAgICAgICAgICAgICAgYW5pbS0+dXBkYXRlUGxheVN0YXRlKEFu
aW1QbGF5U3RhdGVQbGF5aW5nKTsKICAgICAgICAgfQpAQCAtNDQ0LDcgKzQ0NCw3IEBAIHZvaWQg
Q29tcG9zaXRlQW5pbWF0aW9uOjpyZXN1bWVBbmltYXRpb25zKCkKICAgICBpZiAoIW1fdHJhbnNp
dGlvbnMuaXNFbXB0eSgpKSB7CiAgICAgICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNv
bnN0X2l0ZXJhdG9yIHRyYW5zaXRpb25zRW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKICAgICAg
ICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1f
dHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gdHJhbnNpdGlvbnNFbmQ7ICsraXQpIHsKLSAgICAg
ICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAg
ICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAg
ICAgICAgaWYgKGFuaW0gJiYgYW5pbS0+aGFzU3R5bGUoKSkKICAgICAgICAgICAgICAgICBhbmlt
LT51cGRhdGVQbGF5U3RhdGUoQW5pbVBsYXlTdGF0ZVBsYXlpbmcpOwogICAgICAgICB9CkBAIC00
NTYsNyArNDU2LDcgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246Om92ZXJyaWRlSW1wbGljaXRB
bmltYXRpb25zKENTU1Byb3BlcnR5SUQgcHJvcGVydHkpCiAgICAgQ1NTUHJvcGVydHlUcmFuc2l0
aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKICAgICBp
ZiAoIW1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSB7CiAgICAgICAgIGZvciAoQ1NTUHJvcGVydHlU
cmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGFuaW0g
PSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGFuaW0g
PSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoYW5pbSAmJiBhbmltLT5hbmltYXRp
bmdQcm9wZXJ0eSgpID09IHByb3BlcnR5KQogICAgICAgICAgICAgICAgIGFuaW0tPnNldE92ZXJy
aWRkZW4odHJ1ZSk7CiAgICAgICAgIH0KQEAgLTQ2OCw3ICs0NjgsNyBAQCB2b2lkIENvbXBvc2l0
ZUFuaW1hdGlvbjo6cmVzdW1lT3ZlcnJpZGRlbkltcGxpY2l0QW5pbWF0aW9ucyhDU1NQcm9wZXJ0
eUlEIHByb3BlcgogICAgIGlmICghbV90cmFuc2l0aW9ucy5pc0VtcHR5KCkpIHsKICAgICAgICAg
Q1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV90cmFuc2l0
aW9ucy5lbmQoKTsKICAgICAgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7
Ci0gICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT5zZWNvbmQuZ2V0KCk7
CisgICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT52YWx1ZS5nZXQoKTsK
ICAgICAgICAgICAgIGlmIChhbmltICYmIGFuaW0tPmFuaW1hdGluZ1Byb3BlcnR5KCkgPT0gcHJv
cGVydHkpCiAgICAgICAgICAgICAgICAgYW5pbS0+c2V0T3ZlcnJpZGRlbihmYWxzZSk7CiAgICAg
ICAgIH0KQEAgLTQ4MSw3ICs0ODEsNyBAQCBib29sIENvbXBvc2l0ZUFuaW1hdGlvbjo6aXNBbmlt
YXRpbmdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBib29sIGFjY2VsZQogICAgICAg
ICBtX2tleWZyYW1lQW5pbWF0aW9ucy5jaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgICAgIEFuaW1h
dGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGFuaW1hdGlvbnNFbmQgPSBtX2tleWZyYW1lQW5p
bWF0aW9ucy5lbmQoKTsKICAgICAgICAgZm9yIChBbmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGFuaW1hdGlvbnNF
bmQ7ICsraXQpIHsKLSAgICAgICAgICAgIEtleWZyYW1lQW5pbWF0aW9uKiBhbmltID0gaXQtPnNl
Y29uZC5nZXQoKTsKKyAgICAgICAgICAgIEtleWZyYW1lQW5pbWF0aW9uKiBhbmltID0gaXQtPnZh
bHVlLmdldCgpOwogICAgICAgICAgICAgaWYgKGFuaW0gJiYgYW5pbS0+aXNBbmltYXRpbmdQcm9w
ZXJ0eShwcm9wZXJ0eSwgYWNjZWxlcmF0ZWRPbmx5LCBpc1J1bm5pbmdOb3cpKQogICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC00OTAsNyArNDkwLDcgQEAgYm9vbCBD
b21wb3NpdGVBbmltYXRpb246OmlzQW5pbWF0aW5nUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9w
ZXJ0eSwgYm9vbCBhY2NlbGUKICAgICBpZiAoIW1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSB7CiAg
ICAgICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIHRyYW5zaXRp
b25zRW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKICAgICAgICAgZm9yIChDU1NQcm9wZXJ0eVRy
YW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsg
aXQgIT0gdHJhbnNpdGlvbnNFbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0
aW9uKiBhbmltID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0
aW9uKiBhbmltID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAgICAgaWYgKGFuaW0gJiYgYW5p
bS0+aXNBbmltYXRpbmdQcm9wZXJ0eShwcm9wZXJ0eSwgYWNjZWxlcmF0ZWRPbmx5LCBpc1J1bm5p
bmdOb3cpKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC01NTYs
NyArNTU2LDcgQEAgdW5zaWduZWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpudW1iZXJPZkFjdGl2ZUFu
aW1hdGlvbnMoKSBjb25zdAogICAgICAgICBtX2tleWZyYW1lQW5pbWF0aW9ucy5jaGVja0NvbnNp
c3RlbmN5KCk7CiAgICAgICAgIEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGFuaW1h
dGlvbnNFbmQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5lbmQoKTsKICAgICAgICAgZm9yIChBbmlt
YXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmJl
Z2luKCk7IGl0ICE9IGFuaW1hdGlvbnNFbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIEtleWZyYW1l
QW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgIEtleWZyYW1l
QW5pbWF0aW9uKiBhbmltID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAgICAgaWYgKGFuaW0t
PnJ1bm5pbmcoKSkKICAgICAgICAgICAgICAgICArK2NvdW50OwogICAgICAgICB9CkBAIC01NjUs
NyArNTY1LDcgQEAgdW5zaWduZWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpudW1iZXJPZkFjdGl2ZUFu
aW1hdGlvbnMoKSBjb25zdAogICAgIGlmICghbV90cmFuc2l0aW9ucy5pc0VtcHR5KCkpIHsKICAg
ICAgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgdHJhbnNpdGlv
bnNFbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOwogICAgICAgICBmb3IgKENTU1Byb3BlcnR5VHJh
bnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBp
dCAhPSB0cmFuc2l0aW9uc0VuZDsgKytpdCkgewotICAgICAgICAgICAgSW1wbGljaXRBbmltYXRp
b24qIGFuaW0gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgSW1wbGljaXRBbmltYXRp
b24qIGFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoYW5pbS0+cnVubmlu
ZygpKQogICAgICAgICAgICAgICAgICsrY291bnQ7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xhbmd1YWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0xhbmd1YWdlLmNwcAppbmRleCAyYWYyYTIwNmU1NWUxN2E5MzI1NzhlMDhmMjg1NTI0MjRl
OWU0NGZkLi5kYmEzYTg5ZmJiYzEzN2M1OGZjY2FlOTM4YjRhZjFjYTQ4ZTFkNmNkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MYW5ndWFnZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vTGFuZ3VhZ2UuY3BwCkBAIC01Myw3ICs1Myw3IEBAIHZvaWQgbGFuZ3Vh
Z2VEaWRDaGFuZ2UoKQogewogICAgIE9ic2VydmVyTWFwOjppdGVyYXRvciBlbmQgPSBvYnNlcnZl
ck1hcCgpLmVuZCgpOwogICAgIGZvciAoT2JzZXJ2ZXJNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBvYnNl
cnZlck1hcCgpLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCi0gICAgICAgIGl0ZXItPnNl
Y29uZChpdGVyLT5maXJzdCk7CisgICAgICAgIGl0ZXItPnZhbHVlKGl0ZXItPmtleSk7CiB9CiAK
IFN0cmluZyBkZWZhdWx0TGFuZ3VhZ2UoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NSU1F
VHlwZVJlZ2lzdHJ5LmNwcAppbmRleCAwNjI2MTcwZTBjMmExNTBjN2RmN2U0NGFhOGE3ODQ4OGI5
MmUzNjM5Li4zNThhMWNlY2EyYjBjNDI1ZjczYzFhMmQ3MzIyZDk3ODNmMGNkZjU2IDEwMDc1NQot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmNwcApAQCAtNjkzLDcgKzY5
Myw3IEBAIFN0cmluZyBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXROb3JtYWxpemVkTUlNRVR5cGUoY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSkKICAgICBNSU1FVHlwZUFzc29jaWF0aW9uTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IG1pbWVUeXBlQXNzb2NpYXRpb25NYXAoKS5maW5kKG1pbWVUeXBlKTsKIAog
ICAgIGlmIChpdCAhPSBtaW1lVHlwZUFzc29jaWF0aW9uTWFwKCkuZW5kKCkpCi0gICAgICAgIHJl
dHVybiBpdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwogI2VuZGlmCiAgICAg
cmV0dXJuIG1pbWVUeXBlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vSFJURkVsZXZhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9I
UlRGRWxldmF0aW9uLmNwcAppbmRleCAyNWU0NTg5NjI1ZGNjZmQ3ZjRkM2I1NGFmNzUzMmQ4ZTgz
ZjI2Mjc4Li5jZmUxM2VkODUzMDZiNTE3MTJhYTMwNzRiOWM4ZGMzOTJjZDQ2NTJkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9IUlRGRWxldmF0aW9uLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9IUlRGRWxldmF0aW9uLmNwcApAQCAtNzks
NyArNzksNyBAQCBzdGF0aWMgQXVkaW9CdXMqIGdldENvbmNhdGVuYXRlZEltcHVsc2VSZXNwb25z
ZXNGb3JTdWJqZWN0KGNvbnN0IFN0cmluZyYgc3ViamVjdAogICAgICAgICBidXMgPSBjb25jYXRl
bmF0ZWRJbXB1bHNlUmVzcG9uc2VzLmxlYWtQdHIoKTsKICAgICAgICAgYXVkaW9CdXNNYXAuc2V0
KHN1YmplY3ROYW1lLCBidXMpOwogICAgIH0gZWxzZQotICAgICAgICBidXMgPSBpdGVyYXRvci0+
c2Vjb25kOworICAgICAgICBidXMgPSBpdGVyYXRvci0+dmFsdWU7CiAKICAgICBzaXplX3QgcmVz
cG9uc2VMZW5ndGggPSBidXMtPmxlbmd0aCgpOwogICAgIHNpemVfdCBleHBlY3RlZExlbmd0aCA9
IHN0YXRpY19jYXN0PHNpemVfdD4oVG90YWxOdW1iZXJPZlJlc3BvbnNlcyAqIFJlc3BvbnNlRnJh
bWVTaXplKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkv
Q29va2llTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0Nv
b2tpZU1hbmFnZXIuY3BwCmluZGV4IDA5MWQ3NTMxZWRkOWE2NTdhZTcxMjVjYzlkNTZhNDhjZGMz
ZDA3NmQuLmY1OTRlYTY1MjcyZjQ0MDc4ZDg4NDc0MTUxMzVlMWRkNTc3N2U2YTAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvQ29va2llTWFuYWdlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9Db29raWVNYW5hZ2VyLmNw
cApAQCAtMTY4LDcgKzE2OCw3IEBAIFN0cmluZyBDb29raWVNYW5hZ2VyOjpnZW5lcmF0ZUh0bWxG
cmFnbWVudEZvckNvb2tpZXMoKQogCiAgICAgVmVjdG9yPFBhcnNlZENvb2tpZSo+IGNvb2tpZUNh
bmRpZGF0ZXM7CiAgICAgZm9yIChIYXNoTWFwPFN0cmluZywgQ29va2llTWFwKj46Oml0ZXJhdG9y
IGl0ID0gbV9tYW5hZ2VyTWFwLmJlZ2luKCk7IGl0ICE9IG1fbWFuYWdlck1hcC5lbmQoKTsgKytp
dCkKLSAgICAgICAgaXQtPnNlY29uZC0+Z2V0QWxsQ2hpbGRDb29raWVzKCZjb29raWVDYW5kaWRh
dGVzKTsKKyAgICAgICAgaXQtPnZhbHVlLT5nZXRBbGxDaGlsZENvb2tpZXMoJmNvb2tpZUNhbmRp
ZGF0ZXMpOwogCiAgICAgU3RyaW5nIHJlc3VsdDsKICAgICBQYXJzZWRDb29raWUqIGNvb2tpZSA9
IDA7CkBAIC0zMDYsNyArMzA2LDcgQEAgdm9pZCBDb29raWVNYW5hZ2VyOjpyZW1vdmVBbGxDb29r
aWVzKEJhY2tpbmdTdG9yZVJlbW92YWxQb2xpY3kgYmFja2luZ1N0b3JlUmVtb3YKICAgICBIYXNo
TWFwPFN0cmluZywgQ29va2llTWFwKj46Oml0ZXJhdG9yIGZpcnN0ID0gbV9tYW5hZ2VyTWFwLmJl
Z2luKCk7CiAgICAgSGFzaE1hcDxTdHJpbmcsIENvb2tpZU1hcCo+OjppdGVyYXRvciBlbmQgPSBt
X21hbmFnZXJNYXAuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPFN0cmluZywgQ29va2llTWFwKj46
Oml0ZXJhdG9yIGl0ID0gZmlyc3Q7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29u
ZC0+ZGVsZXRlQWxsQ29va2llc0FuZERvbWFpbnMoKTsKKyAgICAgICAgaXQtPnZhbHVlLT5kZWxl
dGVBbGxDb29raWVzQW5kRG9tYWlucygpOwogCiAgICAgaWYgKGJhY2tpbmdTdG9yZVJlbW92YWwg
PT0gUmVtb3ZlRnJvbUJhY2tpbmdTdG9yZSkKICAgICAgICAgbV9jb29raWVCYWNraW5nU3RvcmUt
PnJlbW92ZUFsbCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2ti
ZXJyeS9Db29raWVNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9D
b29raWVNYXAuY3BwCmluZGV4IGJiZTlhN2NlZGY3M2Y3MGQ1MGM0ZGQwNzI0ZjRhNWQ2YTAxNWM3
YTguLmFmNDg1YjU0YzIwZWNjZmNhMGFhNGQ5OTVmYjcyMGE0NTM0ZDc4YTQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvQ29va2llTWFwLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0Nvb2tpZU1hcC5jcHAKQEAgLTE3Miw3
ICsxNzIsNyBAQCBQYXJzZWRDb29raWUqIENvb2tpZU1hcDo6cmVtb3ZlT2xkZXN0Q29va2llKCkK
ICAgICAgICAgQ29va2llTG9nKCJDb29raWVNYXAgLSBsb29raW5nIGludG8gc3ViZG9tYWlucyIp
OwogCiAgICAgICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIENvb2tpZU1hcCo+OjppdGVyYXRvciBp
dCA9IG1fc3ViZG9tYWlucy5iZWdpbigpOyBpdCAhPSBtX3N1YmRvbWFpbnMuZW5kKCk7ICsraXQp
IHsKLSAgICAgICAgICAgIG9sZGVzdENvb2tpZSA9IGl0LT5zZWNvbmQtPnJlbW92ZU9sZGVzdENv
b2tpZSgpOworICAgICAgICAgICAgb2xkZXN0Q29va2llID0gaXQtPnZhbHVlLT5yZW1vdmVPbGRl
c3RDb29raWUoKTsKICAgICAgICAgICAgIGlmIChvbGRlc3RDb29raWUpCiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTIxNCw3ICsyMTQsNyBAQCB2b2lkIENvb2tpZU1hcDo6
Z2V0QWxsQ2hpbGRDb29raWVzKFZlY3RvcjxQYXJzZWRDb29raWUqPiogc3RhY2tPZkNvb2tpZXMp
CiAgICAgQ29va2llTG9nKCJDb29raWVNYXAgLSBnZXRBbGxDaGlsZENvb2tpZXMgaW4gTWFwIC0g
JXMiLCBnZXROYW1lKCkudXRmOCgpLmRhdGEoKSk7CiAgICAgZ2V0QWxsQ29va2llcyhzdGFja09m
Q29va2llcyk7CiAgICAgZm9yIChIYXNoTWFwPFN0cmluZywgQ29va2llTWFwKj46Oml0ZXJhdG9y
IGl0ID0gbV9zdWJkb21haW5zLmJlZ2luKCk7IGl0ICE9IG1fc3ViZG9tYWlucy5lbmQoKTsgKytp
dCkKLSAgICAgICAgaXQtPnNlY29uZC0+Z2V0QWxsQ2hpbGRDb29raWVzKHN0YWNrT2ZDb29raWVz
KTsKKyAgICAgICAgaXQtPnZhbHVlLT5nZXRBbGxDaGlsZENvb2tpZXMoc3RhY2tPZkNvb2tpZXMp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jZi9CaW5hcnlQcm9wZXJ0eUxpc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY2YvQmluYXJ5UHJvcGVydHlMaXN0LmNwcAppbmRleCBiZWMyZWM5NTA2NDRjOTkzYmU4
OWFiMzVlMGI4NjdhOGI2MTI2MDg4Li5iMjdkN2Q3Y2QzYzE0Mzg2MGVjNjU4YmVlYjJkNmU3NzJl
OTQyYzUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9CaW5hcnlQcm9w
ZXJ0eUxpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL0JpbmFyeVByb3Bl
cnR5TGlzdC5jcHAKQEAgLTIyOSw3ICsyMjksNyBAQCB2b2lkIEJpbmFyeVByb3BlcnR5TGlzdFBs
YW46OndyaXRlSW50ZWdlckFycmF5KGNvbnN0IGludCogaW50ZWdlcnMsIHNpemVfdCBzaXplKQog
ICAgICAgICByZXR1cm47CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCiAg
ICAgICAgIHdyaXRlSW50ZWdlcihpbnRlZ2Vyc1tpXSk7Ci0gICAgYWRkUmVzdWx0Lml0ZXJhdG9y
LT5zZWNvbmQgPSBtX2N1cnJlbnRPYmplY3RSZWZlcmVuY2UrKzsKKyAgICBhZGRSZXN1bHQuaXRl
cmF0b3ItPnZhbHVlID0gbV9jdXJyZW50T2JqZWN0UmVmZXJlbmNlKys7CiAgICAgd3JpdGVBcnJh
eU9iamVjdChzaXplKTsKICAgICBtX2N1cnJlbnRBZ2dyZWdhdGVTaXplID0gc2F2ZWRBZ2dyZWdh
dGVTaXplOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0v
c3VwcG9ydC9XZWJIVFRQTG9hZEluZm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vc3VwcG9ydC9XZWJIVFRQTG9hZEluZm8uY3BwCmluZGV4IDMzZWFjZTFkMmRmMjExYjc2
OTUyYjY3NGYwYjk1NzBjOTM0ZTdjYzYuLjVjZDcyNjAxMTBkNjI3ZjdiYTg0NmQzZDQ3NTZhODJi
ZGE2ZWM5MzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1
cHBvcnQvV2ViSFRUUExvYWRJbmZvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
aHJvbWl1bS9zdXBwb3J0L1dlYkhUVFBMb2FkSW5mby5jcHAKQEAgLTEwNiw3ICsxMDYsNyBAQCBz
dGF0aWMgdm9pZCBhZGRIZWFkZXIoSFRUUEhlYWRlck1hcCogbWFwLCBjb25zdCBXZWJTdHJpbmcm
IG5hbWUsIGNvbnN0IFdlYlN0cmluZwogICAgIEhUVFBIZWFkZXJNYXA6OkFkZFJlc3VsdCByZXN1
bHQgPSBtYXAtPmFkZChuYW1lLCB2YWx1ZSk7CiAgICAgLy8gSXQgaXMgaW1wb3J0YW50IHRoYXQg
dmFsdWVzIGFyZSBzZXBhcmF0ZWQgYnkgJ1xuJywgbm90IGNvbW1hLCBvdGhlcndpc2UgU2V0LUNv
b2tpZSBoZWFkZXIgaXMgbm90IHBhcnNlYWJsZS4KICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5
KQotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZC5hcHBlbmQoIlxuIiArIFN0cmluZyh2
YWx1ZSkpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZCgiXG4iICsgU3Ry
aW5nKHZhbHVlKSk7CiB9CiAKIHZvaWQgV2ViSFRUUExvYWRJbmZvOjphZGRSZXF1ZXN0SGVhZGVy
KGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgY29uc3QgV2ViU3RyaW5nJiB2YWx1ZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVVJMUmVxdWVz
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlVSTFJl
cXVlc3QuY3BwCmluZGV4IGY0MzdiNTE2NDNiMjM0YjYwOWY3NzI1ZmI4ZDc2ZDczMWY1NjE3ZWEu
LmUzODUxMDE0ZmNkZDQ1YmZhY2I0OGI5N2JiYTc2ZTMxZDhiNGEwMTUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVVJMUmVxdWVzdC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJVUkxSZXF1
ZXN0LmNwcApAQCAtMTk1LDcgKzE5NSw3IEBAIHZvaWQgV2ViVVJMUmVxdWVzdDo6dmlzaXRIVFRQ
SGVhZGVyRmllbGRzKFdlYkhUVFBIZWFkZXJWaXNpdG9yKiB2aXNpdG9yKSBjb25zdAogewogICAg
IGNvbnN0IEhUVFBIZWFkZXJNYXAmIG1hcCA9IG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlcXVlc3Qt
Pmh0dHBIZWFkZXJGaWVsZHMoKTsKICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbWFwLmJlZ2luKCk7IGl0ICE9IG1hcC5lbmQoKTsgKytpdCkKLSAgICAgICAgdmlz
aXRvci0+dmlzaXRIZWFkZXIoaXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsKKyAgICAgICAgdmlzaXRv
ci0+dmlzaXRIZWFkZXIoaXQtPmtleSwgaXQtPnZhbHVlKTsKIH0KIAogV2ViSFRUUEJvZHkgV2Vi
VVJMUmVxdWVzdDo6aHR0cEJvZHkoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJVUkxSZXNwb25zZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlVSTFJlc3BvbnNlLmNwcAppbmRleCA5
ZGUzYzAxYTBjYTlkNDM4ZGEwYWFhMGM2ODkzM2RlOGYwYjcyOTEyLi4yODc1OTc4YzhkMThlMDQx
MzJkNTVkMmNkMGYwMDkzYTBiNmUwY2EzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlVSTFJlc3BvbnNlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlVSTFJlc3BvbnNlLmNwcApAQCAtMjYx
LDcgKzI2MSw3IEBAIHZvaWQgV2ViVVJMUmVzcG9uc2U6OmFkZEhUVFBIZWFkZXJGaWVsZChjb25z
dCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYlN0cmluZyYKICAgICBIVFRQSGVhZGVyTWFwOjpB
ZGRSZXN1bHQgcmVzdWx0ID0KICAgICAgICAgY29uc3RfY2FzdDxIVFRQSGVhZGVyTWFwKj4oJm1h
cCktPmFkZChuYW1lLCB2YWx1ZVN0cik7CiAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAg
ICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQuYXBwZW5kKCIsICIgKyB2YWx1ZVN0cik7Cisg
ICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKCIsICIgKyB2YWx1ZVN0cik7CiB9
CiAKIHZvaWQgV2ViVVJMUmVzcG9uc2U6OmNsZWFySFRUUEhlYWRlckZpZWxkKGNvbnN0IFdlYlN0
cmluZyYgbmFtZSkKQEAgLTI3NSw3ICsyNzUsNyBAQCB2b2lkIFdlYlVSTFJlc3BvbnNlOjp2aXNp
dEhUVFBIZWFkZXJGaWVsZHMoV2ViSFRUUEhlYWRlclZpc2l0b3IqIHZpc2l0b3IpIGNvbnN0CiB7
CiAgICAgY29uc3QgSFRUUEhlYWRlck1hcCYgbWFwID0gbV9wcml2YXRlLT5tX3Jlc291cmNlUmVz
cG9uc2UtPmh0dHBIZWFkZXJGaWVsZHMoKTsKICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbWFwLmJlZ2luKCk7IGl0ICE9IG1hcC5lbmQoKTsgKytpdCkKLSAgICAg
ICAgdmlzaXRvci0+dmlzaXRIZWFkZXIoaXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsKKyAgICAgICAg
dmlzaXRvci0+dmlzaXRIZWFkZXIoaXQtPmtleSwgaXQtPnZhbHVlKTsKIH0KIAogZG91YmxlIFdl
YlVSTFJlc3BvbnNlOjpsYXN0TW9kaWZpZWREYXRlKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5UmVmcmVzaE1vbml0b3IuY3Bw
CmluZGV4IDMwZDhkM2Q0MWUyMmJkZGExMDc2NGQ4ZjZhMWVmNDAzM2E2MjlkYWEuLmY4OTEwM2Y5
YmUyYjVlZWRkMDdmYTc0MTFmZTI3OTFhNjIxODFlZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9yLmNwcApA
QCAtMTM3LDcgKzEzNyw3IEBAIERpc3BsYXlSZWZyZXNoTW9uaXRvciogRGlzcGxheVJlZnJlc2hN
b25pdG9yTWFuYWdlcjo6ZW5zdXJlTW9uaXRvckZvckNsaWVudChEaXNwCiAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgfQogCi0gICAgcmV0dXJuIGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgcmV0
dXJuIGl0LT52YWx1ZS5nZXQoKTsKIH0KIAogdm9pZCBEaXNwbGF5UmVmcmVzaE1vbml0b3JNYW5h
Z2VyOjpyZWdpc3RlckNsaWVudChEaXNwbGF5UmVmcmVzaE1vbml0b3JDbGllbnQqIGNsaWVudCkK
QEAgLTE1Nyw3ICsxNTcsNyBAQCB2b2lkIERpc3BsYXlSZWZyZXNoTW9uaXRvck1hbmFnZXI6OnVu
cmVnaXN0ZXJDbGllbnQoRGlzcGxheVJlZnJlc2hNb25pdG9yQ2xpZW50KgogICAgIGlmIChpdCA9
PSBtX21vbml0b3JzLmVuZCgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgRGlzcGxheVJl
ZnJlc2hNb25pdG9yKiBtb25pdG9yID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICBEaXNwbGF5UmVm
cmVzaE1vbml0b3IqIG1vbml0b3IgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgaWYgKG1vbml0b3It
PnJlbW92ZUNsaWVudChjbGllbnQpKSB7CiAgICAgICAgIGlmICghbW9uaXRvci0+aGFzQ2xpZW50
cygpKQogICAgICAgICAgICAgbV9tb25pdG9ycy5yZW1vdmUoaXQpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAKaW5kZXggYjQ2MjYzYTk2NjMyMzlk
MmZjZmFkOGJiYmYzMjljZDU3ZDI2YjRlZC4uMjE4ZGUyZjE0N2U5MzFiNTFmMGE2OWJiNjk5MTZl
MWFlNDhkZTY4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udENhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
Q2FjaGUuY3BwCkBAIC0yMTEsNyArMjExLDcgQEAgRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hl
OjpnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm8KICAg
ICAgICAgZ0ZvbnRQbGF0Zm9ybURhdGFDYWNoZS0+c2V0KGtleSwgcmVzdWx0KTsKICAgICAgICAg
Zm91bmRSZXN1bHQgPSByZXN1bHQ7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgcmVzdWx0ID0gaXQt
PnNlY29uZDsKKyAgICAgICAgcmVzdWx0ID0gaXQtPnZhbHVlOwogICAgICAgICBmb3VuZFJlc3Vs
dCA9IHRydWU7CiAgICAgfQogCkBAIC0yNDIsNyArMjQyLDcgQEAgT3BlblR5cGVWZXJ0aWNhbERh
dGEqIEZvbnRDYWNoZTo6Z2V0VmVydGljYWxEYXRhKGNvbnN0IEZvbnRGaWxlS2V5JiBrZXksIGNv
bnN0IEYKICAgICBGb250VmVydGljYWxEYXRhQ2FjaGUmIGZvbnRWZXJ0aWNhbERhdGFDYWNoZSA9
IGZvbnRWZXJ0aWNhbERhdGFDYWNoZUluc3RhbmNlKCk7CiAgICAgRm9udFZlcnRpY2FsRGF0YUNh
Y2hlOjppdGVyYXRvciByZXN1bHQgPSBmb250VmVydGljYWxEYXRhQ2FjaGUuZmluZChrZXkpOwog
ICAgIGlmIChyZXN1bHQgIT0gZm9udFZlcnRpY2FsRGF0YUNhY2hlLmVuZCgpKQotICAgICAgICBy
ZXR1cm4gcmVzdWx0LmdldCgpLT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIHJldHVybiByZXN1bHQu
Z2V0KCktPnZhbHVlLmdldCgpOwogCiAgICAgT3BlblR5cGVWZXJ0aWNhbERhdGEqIHZlcnRpY2Fs
RGF0YSA9IG5ldyBPcGVuVHlwZVZlcnRpY2FsRGF0YShwbGF0Zm9ybURhdGEpOwogICAgIGlmICgh
dmVydGljYWxEYXRhLT5pc09wZW5UeXBlKCkpIHsKQEAgLTMzMiwyMCArMzMyLDIwIEBAIFNpbXBs
ZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldENhY2hlZEZvbnREYXRhKGNvbnN0IEZvbnRQbGF0Zm9y
bURhdGEqIHBsYXRmb3JtRGF0CiAgICAgICAgIHJldHVybiBuZXdWYWx1ZS5maXJzdDsKICAgICB9
CiAKLSAgICBpZiAoIXJlc3VsdC5nZXQoKS0+c2Vjb25kLnNlY29uZCkgewotICAgICAgICBBU1NF
UlQoZ0luYWN0aXZlRm9udERhdGEtPmNvbnRhaW5zKHJlc3VsdC5nZXQoKS0+c2Vjb25kLmZpcnN0
KSk7Ci0gICAgICAgIGdJbmFjdGl2ZUZvbnREYXRhLT5yZW1vdmUocmVzdWx0LmdldCgpLT5zZWNv
bmQuZmlyc3QpOworICAgIGlmICghcmVzdWx0LmdldCgpLT52YWx1ZS5zZWNvbmQpIHsKKyAgICAg
ICAgQVNTRVJUKGdJbmFjdGl2ZUZvbnREYXRhLT5jb250YWlucyhyZXN1bHQuZ2V0KCktPnZhbHVl
LmZpcnN0KSk7CisgICAgICAgIGdJbmFjdGl2ZUZvbnREYXRhLT5yZW1vdmUocmVzdWx0LmdldCgp
LT52YWx1ZS5maXJzdCk7CiAgICAgfQogCiAgICAgaWYgKHNob3VsZFJldGFpbiA9PSBSZXRhaW4p
Ci0gICAgICAgIHJlc3VsdC5nZXQoKS0+c2Vjb25kLnNlY29uZCsrOwotICAgIGVsc2UgaWYgKCFy
ZXN1bHQuZ2V0KCktPnNlY29uZC5zZWNvbmQpIHsKKyAgICAgICAgcmVzdWx0LmdldCgpLT52YWx1
ZS5zZWNvbmQrKzsKKyAgICBlbHNlIGlmICghcmVzdWx0LmdldCgpLT52YWx1ZS5zZWNvbmQpIHsK
ICAgICAgICAgLy8gSWYgc2hvdWxkUmV0YWluIGlzIERvTm90UmV0YWluIGFuZCBjb3VudCBpcyAw
LCB3ZSB3YW50IHRvIHJlbW92ZSB0aGUgZm9udERhdGEgZnJvbSAKICAgICAgICAgLy8gZ0luYWN0
aXZlRm9udERhdGEgKGFib3ZlKSBhbmQgcmUtYWRkIGhlcmUgdG8gdXBkYXRlIExSVSBwb3NpdGlv
bi4KLSAgICAgICAgZ0luYWN0aXZlRm9udERhdGEtPmFkZChyZXN1bHQuZ2V0KCktPnNlY29uZC5m
aXJzdCk7CisgICAgICAgIGdJbmFjdGl2ZUZvbnREYXRhLT5hZGQocmVzdWx0LmdldCgpLT52YWx1
ZS5maXJzdCk7CiAgICAgfQogCi0gICAgcmV0dXJuIHJlc3VsdC5nZXQoKS0+c2Vjb25kLmZpcnN0
OworICAgIHJldHVybiByZXN1bHQuZ2V0KCktPnZhbHVlLmZpcnN0OwogfQogCiBTaW1wbGVGb250
RGF0YSogRm9udENhY2hlOjpnZXROb25SZXRhaW5lZExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29u
c3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pCkBAIC0zNjEsOCArMzYxLDggQEAg
dm9pZCBGb250Q2FjaGU6OnJlbGVhc2VGb250RGF0YShjb25zdCBTaW1wbGVGb250RGF0YSogZm9u
dERhdGEpCiAgICAgRm9udERhdGFDYWNoZTo6aXRlcmF0b3IgaXQgPSBnRm9udERhdGFDYWNoZS0+
ZmluZChmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkpOwogICAgIEFTU0VSVChpdCAhPSBnRm9udERh
dGFDYWNoZS0+ZW5kKCkpOwogCi0gICAgQVNTRVJUKGl0LT5zZWNvbmQuc2Vjb25kKTsKLSAgICBp
ZiAoIS0taXQtPnNlY29uZC5zZWNvbmQpCisgICAgQVNTRVJUKGl0LT52YWx1ZS5zZWNvbmQpOwor
ICAgIGlmICghLS1pdC0+dmFsdWUuc2Vjb25kKQogICAgICAgICBnSW5hY3RpdmVGb250RGF0YS0+
YWRkKGZvbnREYXRhKTsKIH0KIApAQCAtNDEwLDggKzQxMCw4IEBAIHZvaWQgRm9udENhY2hlOjpw
dXJnZUluYWN0aXZlRm9udERhdGEoaW50IGNvdW50KQogICAgICAgICBrZXlzVG9SZW1vdmUucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShnRm9udFBsYXRmb3JtRGF0YUNhY2hlLT5zaXplKCkpOwogICAg
ICAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGU6Oml0ZXJhdG9yIHBsYXRmb3JtRGF0YUVuZCA9IGdG
b250UGxhdGZvcm1EYXRhQ2FjaGUtPmVuZCgpOwogICAgICAgICBmb3IgKEZvbnRQbGF0Zm9ybURh
dGFDYWNoZTo6aXRlcmF0b3IgcGxhdGZvcm1EYXRhID0gZ0ZvbnRQbGF0Zm9ybURhdGFDYWNoZS0+
YmVnaW4oKTsgcGxhdGZvcm1EYXRhICE9IHBsYXRmb3JtRGF0YUVuZDsgKytwbGF0Zm9ybURhdGEp
IHsKLSAgICAgICAgICAgIGlmIChwbGF0Zm9ybURhdGEtPnNlY29uZCAmJiAhZ0ZvbnREYXRhQ2Fj
aGUtPmNvbnRhaW5zKCpwbGF0Zm9ybURhdGEtPnNlY29uZCkpCi0gICAgICAgICAgICAgICAga2V5
c1RvUmVtb3ZlLmFwcGVuZChwbGF0Zm9ybURhdGEtPmZpcnN0KTsKKyAgICAgICAgICAgIGlmIChw
bGF0Zm9ybURhdGEtPnZhbHVlICYmICFnRm9udERhdGFDYWNoZS0+Y29udGFpbnMoKnBsYXRmb3Jt
RGF0YS0+dmFsdWUpKQorICAgICAgICAgICAgICAgIGtleXNUb1JlbW92ZS5hcHBlbmQocGxhdGZv
cm1EYXRhLT5rZXkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBzaXplX3Qga2V5c1Rv
UmVtb3ZlQ291bnQgPSBrZXlzVG9SZW1vdmUuc2l6ZSgpOwpAQCAtNDI1LDIwICs0MjUsMjAgQEAg
dm9pZCBGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YShpbnQgY291bnQpCiAgICAgICAg
IC8vIE1hcmsgJiBzd2VlcCB1bnVzZWQgdmVydGljYWxEYXRhCiAgICAgICAgIEZvbnRWZXJ0aWNh
bERhdGFDYWNoZTo6aXRlcmF0b3IgdmVydGljYWxEYXRhRW5kID0gZm9udFZlcnRpY2FsRGF0YUNh
Y2hlLmVuZCgpOwogICAgICAgICBmb3IgKEZvbnRWZXJ0aWNhbERhdGFDYWNoZTo6aXRlcmF0b3Ig
dmVydGljYWxEYXRhID0gZm9udFZlcnRpY2FsRGF0YUNhY2hlLmJlZ2luKCk7IHZlcnRpY2FsRGF0
YSAhPSB2ZXJ0aWNhbERhdGFFbmQ7ICsrdmVydGljYWxEYXRhKSB7Ci0gICAgICAgICAgICBpZiAo
dmVydGljYWxEYXRhLT5zZWNvbmQpCi0gICAgICAgICAgICAgICAgdmVydGljYWxEYXRhLT5zZWNv
bmQtPm1faW5Gb250Q2FjaGUgPSBmYWxzZTsKKyAgICAgICAgICAgIGlmICh2ZXJ0aWNhbERhdGEt
PnZhbHVlKQorICAgICAgICAgICAgICAgIHZlcnRpY2FsRGF0YS0+dmFsdWUtPm1faW5Gb250Q2Fj
aGUgPSBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBGb250RGF0YUNhY2hlOjppdGVyYXRvciBm
b250RGF0YUVuZCA9IGdGb250RGF0YUNhY2hlLT5lbmQoKTsKICAgICAgICAgZm9yIChGb250RGF0
YUNhY2hlOjppdGVyYXRvciBmb250RGF0YSA9IGdGb250RGF0YUNhY2hlLT5iZWdpbigpOyBmb250
RGF0YSAhPSBmb250RGF0YUVuZDsgKytmb250RGF0YSkgewotICAgICAgICAgICAgT3BlblR5cGVW
ZXJ0aWNhbERhdGEqIHZlcnRpY2FsRGF0YSA9IGNvbnN0X2Nhc3Q8T3BlblR5cGVWZXJ0aWNhbERh
dGEqPihmb250RGF0YS0+c2Vjb25kLmZpcnN0LT52ZXJ0aWNhbERhdGEoKSk7CisgICAgICAgICAg
ICBPcGVuVHlwZVZlcnRpY2FsRGF0YSogdmVydGljYWxEYXRhID0gY29uc3RfY2FzdDxPcGVuVHlw
ZVZlcnRpY2FsRGF0YSo+KGZvbnREYXRhLT52YWx1ZS5maXJzdC0+dmVydGljYWxEYXRhKCkpOwog
ICAgICAgICAgICAgaWYgKHZlcnRpY2FsRGF0YSkKICAgICAgICAgICAgICAgICB2ZXJ0aWNhbERh
dGEtPm1faW5Gb250Q2FjaGUgPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIFZlY3RvcjxGb250
RmlsZUtleT4ga2V5c1RvUmVtb3ZlOwogICAgICAgICBrZXlzVG9SZW1vdmUucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eShmb250VmVydGljYWxEYXRhQ2FjaGUuc2l6ZSgpKTsKICAgICAgICAgZm9yIChG
b250VmVydGljYWxEYXRhQ2FjaGU6Oml0ZXJhdG9yIHZlcnRpY2FsRGF0YSA9IGZvbnRWZXJ0aWNh
bERhdGFDYWNoZS5iZWdpbigpOyB2ZXJ0aWNhbERhdGEgIT0gdmVydGljYWxEYXRhRW5kOyArK3Zl
cnRpY2FsRGF0YSkgewotICAgICAgICAgICAgaWYgKCF2ZXJ0aWNhbERhdGEtPnNlY29uZCB8fCAh
dmVydGljYWxEYXRhLT5zZWNvbmQtPm1faW5Gb250Q2FjaGUpCi0gICAgICAgICAgICAgICAga2V5
c1RvUmVtb3ZlLmFwcGVuZCh2ZXJ0aWNhbERhdGEtPmZpcnN0KTsKKyAgICAgICAgICAgIGlmICgh
dmVydGljYWxEYXRhLT52YWx1ZSB8fCAhdmVydGljYWxEYXRhLT52YWx1ZS0+bV9pbkZvbnRDYWNo
ZSkKKyAgICAgICAgICAgICAgICBrZXlzVG9SZW1vdmUuYXBwZW5kKHZlcnRpY2FsRGF0YS0+a2V5
KTsKICAgICAgICAgfQogICAgICAgICBmb3IgKHNpemVfdCBpID0gMCwgY291bnQgPSBrZXlzVG9S
ZW1vdmUuc2l6ZSgpOyBpIDwgY291bnQ7ICsraSkKICAgICAgICAgICAgIGZvbnRWZXJ0aWNhbERh
dGFDYWNoZS50YWtlKGtleXNUb1JlbW92ZVtpXSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2VUcmVlTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2VUcmVlTm9kZS5jcHAKaW5kZXggNzcwY2UxMjJk
ZDU0NDAxYTcxZjRkMTBiZGFkN2EzZGVkYzA4NGNlOC4uOGUzNTUxYTRiNmVjNTQ1ZTQyYjgyOWFj
ZGU3OWU3OWRkNDNhYzU2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR2x5cGhQYWdlVHJlZU5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dseXBoUGFnZVRyZWVOb2RlLmNwcApAQCAtNzUsNyArNzUsNyBAQCBzaXplX3Qg
R2x5cGhQYWdlVHJlZU5vZGU6OnRyZWVHbHlwaFBhZ2VDb3VudCgpCiAgICAgaWYgKHJvb3RzKSB7
CiAgICAgICAgIEhhc2hNYXA8aW50LCBHbHlwaFBhZ2VUcmVlTm9kZSo+OjppdGVyYXRvciBlbmQg
PSByb290cy0+ZW5kKCk7CiAgICAgICAgIGZvciAoSGFzaE1hcDxpbnQsIEdseXBoUGFnZVRyZWVO
b2RlKj46Oml0ZXJhdG9yIGl0ID0gcm9vdHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAg
ICAgICAgICAgIGNvdW50ICs9IGl0LT5zZWNvbmQtPnBhZ2VDb3VudCgpOworICAgICAgICAgICAg
Y291bnQgKz0gaXQtPnZhbHVlLT5wYWdlQ291bnQoKTsKICAgICB9CiAgICAgCiAgICAgaWYgKHBh
Z2VaZXJvUm9vdCkKQEAgLTg5LDcgKzg5LDcgQEAgc2l6ZV90IEdseXBoUGFnZVRyZWVOb2RlOjpw
YWdlQ291bnQoKSBjb25zdAogICAgIHNpemVfdCBjb3VudCA9IG1fcGFnZSAmJiBtX3BhZ2UtPm93
bmVyKCkgPT0gdGhpcyA/IDEgOiAwOwogICAgIEhhc2hNYXA8Y29uc3QgRm9udERhdGEqLCBHbHlw
aFBhZ2VUcmVlTm9kZSo+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2NoaWxkcmVuLmVuZCgpOwog
ICAgIGZvciAoSGFzaE1hcDxjb25zdCBGb250RGF0YSosIEdseXBoUGFnZVRyZWVOb2RlKj46OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbV9jaGlsZHJlbi5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0g
ICAgICAgIGNvdW50ICs9IGl0LT5zZWNvbmQtPnBhZ2VDb3VudCgpOworICAgICAgICBjb3VudCAr
PSBpdC0+dmFsdWUtPnBhZ2VDb3VudCgpOwogCiAgICAgcmV0dXJuIGNvdW50OwogfQpAQCAtMTAw
LDcgKzEwMCw3IEBAIHZvaWQgR2x5cGhQYWdlVHJlZU5vZGU6OnBydW5lVHJlZUN1c3RvbUZvbnRE
YXRhKGNvbnN0IEZvbnREYXRhKiBmb250RGF0YSkKICAgICBpZiAocm9vdHMpIHsKICAgICAgICAg
SGFzaE1hcDxpbnQsIEdseXBoUGFnZVRyZWVOb2RlKj46Oml0ZXJhdG9yIGVuZCA9IHJvb3RzLT5l
bmQoKTsKICAgICAgICAgZm9yIChIYXNoTWFwPGludCwgR2x5cGhQYWdlVHJlZU5vZGUqPjo6aXRl
cmF0b3IgaXQgPSByb290cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAg
aXQtPnNlY29uZC0+cHJ1bmVDdXN0b21Gb250RGF0YShmb250RGF0YSk7CisgICAgICAgICAgICBp
dC0+dmFsdWUtPnBydW5lQ3VzdG9tRm9udERhdGEoZm9udERhdGEpOwogICAgIH0KICAgICAKICAg
ICBpZiAocGFnZVplcm9Sb290KQpAQCAtMTEyLDcgKzExMiw3IEBAIHZvaWQgR2x5cGhQYWdlVHJl
ZU5vZGU6OnBydW5lVHJlZUZvbnREYXRhKGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSkK
ICAgICBpZiAocm9vdHMpIHsKICAgICAgICAgSGFzaE1hcDxpbnQsIEdseXBoUGFnZVRyZWVOb2Rl
Kj46Oml0ZXJhdG9yIGVuZCA9IHJvb3RzLT5lbmQoKTsKICAgICAgICAgZm9yIChIYXNoTWFwPGlu
dCwgR2x5cGhQYWdlVHJlZU5vZGUqPjo6aXRlcmF0b3IgaXQgPSByb290cy0+YmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KQotICAgICAgICAgICAgaXQtPnNlY29uZC0+cHJ1bmVGb250RGF0YShmb250
RGF0YSk7CisgICAgICAgICAgICBpdC0+dmFsdWUtPnBydW5lRm9udERhdGEoZm9udERhdGEpOwog
ICAgIH0KICAgICAKICAgICBpZiAocGFnZVplcm9Sb290KQpAQCAtMzY4LDcgKzM2OCw3IEBAIHZv
aWQgR2x5cGhQYWdlVHJlZU5vZGU6OnBydW5lQ3VzdG9tRm9udERhdGEoY29uc3QgRm9udERhdGEq
IGZvbnREYXRhKQogICAgICAgICByZXR1cm47CiAgICAgSGFzaE1hcDxjb25zdCBGb250RGF0YSos
IEdseXBoUGFnZVRyZWVOb2RlKj46Oml0ZXJhdG9yIGVuZCA9IG1fY2hpbGRyZW4uZW5kKCk7CiAg
ICAgZm9yIChIYXNoTWFwPGNvbnN0IEZvbnREYXRhKiwgR2x5cGhQYWdlVHJlZU5vZGUqPjo6aXRl
cmF0b3IgaXQgPSBtX2NoaWxkcmVuLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAg
aXQtPnNlY29uZC0+cHJ1bmVDdXN0b21Gb250RGF0YShmb250RGF0YSk7CisgICAgICAgIGl0LT52
YWx1ZS0+cHJ1bmVDdXN0b21Gb250RGF0YShmb250RGF0YSk7CiB9CiAKIHZvaWQgR2x5cGhQYWdl
VHJlZU5vZGU6OnBydW5lRm9udERhdGEoY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhLCB1
bnNpZ25lZCBsZXZlbCkKQEAgLTM4NCw3ICszODQsNyBAQCB2b2lkIEdseXBoUGFnZVRyZWVOb2Rl
OjpwcnVuZUZvbnREYXRhKGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwgdW5zaWduZWQg
bAogICAgIC8vIFBydW5lIGFueSBicmFuY2ggdGhhdCBjb250YWlucyB0aGlzIEZvbnREYXRhLgog
ICAgIEhhc2hNYXA8Y29uc3QgRm9udERhdGEqLCBHbHlwaFBhZ2VUcmVlTm9kZSo+OjppdGVyYXRv
ciBjaGlsZCA9IG1fY2hpbGRyZW4uZmluZChmb250RGF0YSk7CiAgICAgaWYgKGNoaWxkICE9IG1f
Y2hpbGRyZW4uZW5kKCkpIHsKLSAgICAgICAgR2x5cGhQYWdlVHJlZU5vZGUqIG5vZGUgPSBjaGls
ZC0+c2Vjb25kOworICAgICAgICBHbHlwaFBhZ2VUcmVlTm9kZSogbm9kZSA9IGNoaWxkLT52YWx1
ZTsKICAgICAgICAgbV9jaGlsZHJlbi5yZW1vdmUoZm9udERhdGEpOwogICAgICAgICB1bnNpZ25l
ZCBjdXN0b21Gb250Q291bnQgPSBub2RlLT5tX2N1c3RvbUZvbnRDb3VudDsKICAgICAgICAgZGVs
ZXRlIG5vZGU7CkBAIC00MDAsNyArNDAwLDcgQEAgdm9pZCBHbHlwaFBhZ2VUcmVlTm9kZTo6cHJ1
bmVGb250RGF0YShjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEsIHVuc2lnbmVkIGwKIAog
ICAgIEhhc2hNYXA8Y29uc3QgRm9udERhdGEqLCBHbHlwaFBhZ2VUcmVlTm9kZSo+OjppdGVyYXRv
ciBlbmQgPSBtX2NoaWxkcmVuLmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDxjb25zdCBGb250RGF0
YSosIEdseXBoUGFnZVRyZWVOb2RlKj46Oml0ZXJhdG9yIGl0ID0gbV9jaGlsZHJlbi5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPnBydW5lRm9udERhdGEoZm9u
dERhdGEsIGxldmVsKTsKKyAgICAgICAgaXQtPnZhbHVlLT5wcnVuZUZvbnREYXRhKGZvbnREYXRh
LCBsZXZlbCk7CiB9CiAKICNpZm5kZWYgTkRFQlVHCkBAIC00MTIsOCArNDEyLDggQEAgdm9pZCBH
bHlwaFBhZ2VUcmVlTm9kZTo6cHJ1bmVGb250RGF0YShjb25zdCBTaW1wbGVGb250RGF0YSogZm9u
dERhdGEsIHVuc2lnbmVkIGwKIAogICAgICAgICBIYXNoTWFwPGNvbnN0IEZvbnREYXRhKiwgR2x5
cGhQYWdlVHJlZU5vZGUqPjo6aXRlcmF0b3IgZW5kID0gbV9jaGlsZHJlbi5lbmQoKTsKICAgICAg
ICAgZm9yIChIYXNoTWFwPGNvbnN0IEZvbnREYXRhKiwgR2x5cGhQYWdlVHJlZU5vZGUqPjo6aXRl
cmF0b3IgaXQgPSBtX2NoaWxkcmVuLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAg
ICAgICAgcHJpbnRmKCIlc1x0JXAgJXNcbiIsIGluZGVudC5kYXRhKCksIGl0LT5maXJzdCwgaXQt
PmZpcnN0LT5kZXNjcmlwdGlvbigpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICAgICAgaXQtPnNl
Y29uZC0+c2hvd1N1YnRyZWUoKTsKKyAgICAgICAgICAgIHByaW50ZigiJXNcdCVwICVzXG4iLCBp
bmRlbnQuZGF0YSgpLCBpdC0+a2V5LCBpdC0+a2V5LT5kZXNjcmlwdGlvbigpLnV0ZjgoKS5kYXRh
KCkpOworICAgICAgICAgICAgaXQtPnZhbHVlLT5zaG93U3VidHJlZSgpOwogICAgICAgICB9CiAg
ICAgICAgIGlmIChtX3N5c3RlbUZhbGxiYWNrQ2hpbGQpIHsKICAgICAgICAgICAgIHByaW50Zigi
JXNcdCogZmFsbGJhY2tcbiIsIGluZGVudC5kYXRhKCkpOwpAQCAtNDMxLDggKzQzMSw4IEBAIHZv
aWQgc2hvd0dseXBoUGFnZVRyZWVzKCkKICAgICBzaG93R2x5cGhQYWdlVHJlZSgwKTsKICAgICBI
YXNoTWFwPGludCwgV2ViQ29yZTo6R2x5cGhQYWdlVHJlZU5vZGUqPjo6aXRlcmF0b3IgZW5kID0g
V2ViQ29yZTo6R2x5cGhQYWdlVHJlZU5vZGU6OnJvb3RzLT5lbmQoKTsKICAgICBmb3IgKEhhc2hN
YXA8aW50LCBXZWJDb3JlOjpHbHlwaFBhZ2VUcmVlTm9kZSo+OjppdGVyYXRvciBpdCA9IFdlYkNv
cmU6OkdseXBoUGFnZVRyZWVOb2RlOjpyb290cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7
Ci0gICAgICAgIHByaW50ZigiXG5QYWdlICVkOlxuIiwgaXQtPmZpcnN0KTsKLSAgICAgICAgc2hv
d0dseXBoUGFnZVRyZWUoaXQtPmZpcnN0KTsKKyAgICAgICAgcHJpbnRmKCJcblBhZ2UgJWQ6XG4i
LCBpdC0+a2V5KTsKKyAgICAgICAgc2hvd0dseXBoUGFnZVRyZWUoaXQtPmtleSk7CiAgICAgfQog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJh
Y2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJh
Y2tpbmdTdG9yZS5jcHAKaW5kZXggYTE5ZjZhNjE2NzhkZWVmOTc5NTQ2OTIwZDhkZGQwMWI0MWI0
NmNmNS4uZWY0NWZkOWM0ZjYwM2M5ZjcwYTYyNmNmYWNmYTYwZmMwMjlhZDFlYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3Jl
LmNwcApAQCAtMTE2LDkgKzExNiw5IEBAIHZvaWQgVGlsZWRCYWNraW5nU3RvcmU6OnVwZGF0ZVRp
bGVCdWZmZXJzKCkKICAgICBWZWN0b3I8UmVmUHRyPFRpbGU+ID4gZGlydHlUaWxlczsKICAgICBU
aWxlTWFwOjppdGVyYXRvciBlbmQgPSBtX3RpbGVzLmVuZCgpOwogICAgIGZvciAoVGlsZU1hcDo6
aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAg
ICBpZiAoIWl0LT5zZWNvbmQtPmlzRGlydHkoKSkKKyAgICAgICAgaWYgKCFpdC0+dmFsdWUtPmlz
RGlydHkoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBkaXJ0eVRpbGVzLmFwcGVu
ZChpdC0+c2Vjb25kKTsKKyAgICAgICAgZGlydHlUaWxlcy5hcHBlbmQoaXQtPnZhbHVlKTsKICAg
ICB9CiAKICAgICBpZiAoZGlydHlUaWxlcy5pc0VtcHR5KCkpIHsKQEAgLTQwMSwxMyArNDAxLDEz
IEBAIGJvb2wgVGlsZWRCYWNraW5nU3RvcmU6OnJlc2l6ZUVkZ2VUaWxlcygpCiAgICAgVmVjdG9y
PFRpbGU6OkNvb3JkaW5hdGU+IHRpbGVzVG9SZW1vdmU7CiAgICAgVGlsZU1hcDo6aXRlcmF0b3Ig
ZW5kID0gbV90aWxlcy5lbmQoKTsKICAgICBmb3IgKFRpbGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90
aWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgVGlsZTo6Q29vcmRpbmF0
ZSB0aWxlQ29vcmRpbmF0ZSA9IGl0LT5zZWNvbmQtPmNvb3JkaW5hdGUoKTsKLSAgICAgICAgSW50
UmVjdCB0aWxlUmVjdCA9IGl0LT5zZWNvbmQtPnJlY3QoKTsKKyAgICAgICAgVGlsZTo6Q29vcmRp
bmF0ZSB0aWxlQ29vcmRpbmF0ZSA9IGl0LT52YWx1ZS0+Y29vcmRpbmF0ZSgpOworICAgICAgICBJ
bnRSZWN0IHRpbGVSZWN0ID0gaXQtPnZhbHVlLT5yZWN0KCk7CiAgICAgICAgIEludFJlY3QgZXhw
ZWN0ZWRUaWxlUmVjdCA9IHRpbGVSZWN0Rm9yQ29vcmRpbmF0ZSh0aWxlQ29vcmRpbmF0ZSk7CiAg
ICAgICAgIGlmIChleHBlY3RlZFRpbGVSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgICAgIHRpbGVz
VG9SZW1vdmUuYXBwZW5kKHRpbGVDb29yZGluYXRlKTsKICAgICAgICAgZWxzZSBpZiAoZXhwZWN0
ZWRUaWxlUmVjdCAhPSB0aWxlUmVjdCkgewotICAgICAgICAgICAgaXQtPnNlY29uZC0+cmVzaXpl
KGV4cGVjdGVkVGlsZVJlY3Quc2l6ZSgpKTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+cmVzaXpl
KGV4cGVjdGVkVGlsZVJlY3Quc2l6ZSgpKTsKICAgICAgICAgICAgIHdhc1Jlc2l6ZWQgPSB0cnVl
OwogICAgICAgICB9CiAgICAgfQpAQCAtNDI2LDggKzQyNiw4IEBAIHZvaWQgVGlsZWRCYWNraW5n
U3RvcmU6OnNldEtlZXBSZWN0KGNvbnN0IEludFJlY3QmIGtlZXBSZWN0KQogICAgIFZlY3RvcjxU
aWxlOjpDb29yZGluYXRlPiB0b1JlbW92ZTsKICAgICBUaWxlTWFwOjppdGVyYXRvciBlbmQgPSBt
X3RpbGVzLmVuZCgpOwogICAgIGZvciAoVGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBUaWxlOjpDb29yZGluYXRlIGNvb3Jk
aW5hdGUgPSBpdC0+c2Vjb25kLT5jb29yZGluYXRlKCk7Ci0gICAgICAgIEZsb2F0UmVjdCB0aWxl
UmVjdCA9IGl0LT5zZWNvbmQtPnJlY3QoKTsKKyAgICAgICAgVGlsZTo6Q29vcmRpbmF0ZSBjb29y
ZGluYXRlID0gaXQtPnZhbHVlLT5jb29yZGluYXRlKCk7CisgICAgICAgIEZsb2F0UmVjdCB0aWxl
UmVjdCA9IGl0LT52YWx1ZS0+cmVjdCgpOwogICAgICAgICBpZiAoIXRpbGVSZWN0LmludGVyc2Vj
dHMoa2VlcFJlY3RGKSkKICAgICAgICAgICAgIHRvUmVtb3ZlLmFwcGVuZChjb29yZGluYXRlKTsK
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZv
dW5kYXRpb24vY2YvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0YuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL2NmL01lZGlhUGxheWVyUHJp
dmF0ZUFWRm91bmRhdGlvbkNGLmNwcAppbmRleCA4MWQ4NjI5ODE1MjlkY2I1ZTRhYjJkMGMwMDY2
NzJkZTc2YTg4MmYxLi43OGNhYzY3MmU0MThjMTU5MDMzYzBhMWZmODhkZmYyZDZhMTE5NTc3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24v
Y2YvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0YuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9jZi9NZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb25DRi5jcHAKQEAgLTkxNSw3ICs5MTUsNyBAQCBBVkZXcmFwcGVyKiBBVkZXcmFw
cGVyOjphdmZXcmFwcGVyRm9yQ2FsbGJhY2tDb250ZXh0KHZvaWQqIGNvbnRleHQpCiAgICAgaWYg
KGl0ID09IG1hcCgpLmVuZCgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHJldHVybiBpdC0+
c2Vjb25kOworICAgIHJldHVybiBpdC0+dmFsdWU7CiB9CiAKIHZvaWQgQVZGV3JhcHBlcjo6c2No
ZWR1bGVEaXNjb25uZWN0QW5kRGVsZXRlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJUaWxlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyVGlsZXIuY3BwCmluZGV4IDgzZWFj
YWNjMDhlZmI4MGYzZGY5YmZmNTI4ZjhkYzIzNTQ2ZDJkNmUuLmNkMjgwMWUyZDVkNTU2YjBiODUx
ZDQ4YWRjNDRkMGI3YWM1Yjc1MGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJUaWxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclRpbGVyLmNwcApAQCAtMzcwLDggKzM3
MCw4IEBAIHZvaWQgTGF5ZXJUaWxlcjo6bGF5ZXJWaXNpYmlsaXR5Q2hhbmdlZChMYXllckNvbXBv
c2l0aW5nVGhyZWFkKiwgYm9vbCB2aXNpYmxlKQogICAgIH0KIAogICAgIGZvciAoVGlsZU1hcDo6
aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IG1fdGlsZXMuZW5kKCk7ICsraXQp
IHsKLSAgICAgICAgVGlsZUluZGV4IGluZGV4ID0gKCppdCkuZmlyc3Q7Ci0gICAgICAgIExheWVy
VGlsZSogdGlsZSA9ICgqaXQpLnNlY29uZDsKKyAgICAgICAgVGlsZUluZGV4IGluZGV4ID0gKCpp
dCkua2V5OworICAgICAgICBMYXllclRpbGUqIHRpbGUgPSAoKml0KS52YWx1ZTsKICAgICAgICAg
dGlsZS0+c2V0VmlzaWJsZShmYWxzZSk7CiAgICAgfQogfQpAQCAtMzg1LDIxICszODUsMjEgQEAg
dm9pZCBMYXllclRpbGVyOjp1cGxvYWRUZXh0dXJlc0lmTmVlZGVkKExheWVyQ29tcG9zaXRpbmdU
aHJlYWQqKQogCiAgICAgVGlsZUpvYnNNYXA6OmNvbnN0X2l0ZXJhdG9yIHRpbGVKb2JzSXRlckVu
ZCA9IHRpbGVKb2JzTWFwLmVuZCgpOwogICAgIGZvciAoVGlsZUpvYnNNYXA6OmNvbnN0X2l0ZXJh
dG9yIHRpbGVKb2JzSXRlciA9IHRpbGVKb2JzTWFwLmJlZ2luKCk7IHRpbGVKb2JzSXRlciAhPSB0
aWxlSm9ic0l0ZXJFbmQ7ICsrdGlsZUpvYnNJdGVyKSB7Ci0gICAgICAgIEludFBvaW50IG9yaWdp
biA9IG9yaWdpbk9mVGlsZSh0aWxlSm9ic0l0ZXItPmZpcnN0KTsKKyAgICAgICAgSW50UG9pbnQg
b3JpZ2luID0gb3JpZ2luT2ZUaWxlKHRpbGVKb2JzSXRlci0+a2V5KTsKIAotICAgICAgICBMYXll
clRpbGUqIHRpbGUgPSBtX3RpbGVzLmdldCh0aWxlSm9ic0l0ZXItPmZpcnN0KTsKKyAgICAgICAg
TGF5ZXJUaWxlKiB0aWxlID0gbV90aWxlcy5nZXQodGlsZUpvYnNJdGVyLT5rZXkpOwogICAgICAg
ICBpZiAoIXRpbGUpIHsKICAgICAgICAgICAgIGlmIChvcmlnaW4ueCgpID49IG1fcmVxdWlyZWRU
ZXh0dXJlU2l6ZS53aWR0aCgpIHx8IG9yaWdpbi55KCkgPj0gbV9yZXF1aXJlZFRleHR1cmVTaXpl
LmhlaWdodCgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgdGlsZSA9
IG5ldyBMYXllclRpbGUoKTsKLSAgICAgICAgICAgIG1fdGlsZXMuYWRkKHRpbGVKb2JzSXRlci0+
Zmlyc3QsIHRpbGUpOworICAgICAgICAgICAgbV90aWxlcy5hZGQodGlsZUpvYnNJdGVyLT5rZXks
IHRpbGUpOwogICAgICAgICB9CiAKICAgICAgICAgSW50UmVjdCB0aWxlUmVjdChvcmlnaW4sIHRp
bGVTaXplKCkpOwogICAgICAgICB0aWxlUmVjdC5zZXRXaWR0aChtaW4obV9yZXF1aXJlZFRleHR1
cmVTaXplLndpZHRoKCkgLSB0aWxlUmVjdC54KCksIHRpbGVSZWN0LndpZHRoKCkpKTsKICAgICAg
ICAgdGlsZVJlY3Quc2V0SGVpZ2h0KG1pbihtX3JlcXVpcmVkVGV4dHVyZVNpemUuaGVpZ2h0KCkg
LSB0aWxlUmVjdC55KCksIHRpbGVSZWN0LmhlaWdodCgpKSk7CiAKLSAgICAgICAgcGVyZm9ybVRp
bGVKb2IodGlsZSwgKnRpbGVKb2JzSXRlci0+c2Vjb25kLCB0aWxlUmVjdCk7CisgICAgICAgIHBl
cmZvcm1UaWxlSm9iKHRpbGUsICp0aWxlSm9ic0l0ZXItPnZhbHVlLCB0aWxlUmVjdCk7CiAgICAg
fQogCiAgICAgbV90ZXh0dXJlSm9icy5jbGVhcigpOwpAQCAtNDQyLDExICs0NDIsMTEgQEAgdm9p
ZCBMYXllclRpbGVyOjphZGRUaWxlSm9iKGNvbnN0IFRpbGVJbmRleCYgaW5kZXgsIGNvbnN0IFRl
eHR1cmVKb2ImIGpvYiwgVGlsZUoKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gSW4gdGhpcyBj
YXNlIHdlIGxlYXZlIHRoZSBwcmV2aW91cyBqb2IuCi0gICAgaWYgKGpvYi5tX3R5cGUgPT0gVGV4
dHVyZUpvYjo6RGlydHlDb250ZW50cyAmJiByZXN1bHQuaXRlcmF0b3ItPnNlY29uZC0+bV90eXBl
ID09IFRleHR1cmVKb2I6OkRpc2NhcmRDb250ZW50cykKKyAgICBpZiAoam9iLm1fdHlwZSA9PSBU
ZXh0dXJlSm9iOjpEaXJ0eUNvbnRlbnRzICYmIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPm1fdHlw
ZSA9PSBUZXh0dXJlSm9iOjpEaXNjYXJkQ29udGVudHMpCiAgICAgICAgIHJldHVybjsKIAogICAg
IC8vIE92ZXJyaWRlIHRoZSBwcmV2aW91cyBqb2IuCi0gICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNv
bmQgPSAmam9iOworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSAmam9iOwogfQogCiB2b2lk
IExheWVyVGlsZXI6OnBlcmZvcm1UaWxlSm9iKExheWVyVGlsZSogdGlsZSwgY29uc3QgVGV4dHVy
ZUpvYiYgam9iLCBjb25zdCBJbnRSZWN0JiB0aWxlUmVjdCkKQEAgLTYzMSw3ICs2MzEsNyBAQCB2
b2lkIExheWVyVGlsZXI6OmRlbGV0ZVRleHR1cmVzKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqKQog
ICAgIC8vIHRvdWNoaW5nIHNvbWUgV2ViS2l0IHRocmVhZCBzdGF0ZS4KICAgICBpZiAobV90aWxl
cy5zaXplKCkpIHsKICAgICAgICAgZm9yIChUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZXMu
YmVnaW4oKTsgaXQgIT0gbV90aWxlcy5lbmQoKTsgKytpdCkKLSAgICAgICAgICAgICgqaXQpLnNl
Y29uZC0+ZGlzY2FyZENvbnRlbnRzKCk7CisgICAgICAgICAgICAoKml0KS52YWx1ZS0+ZGlzY2Fy
ZENvbnRlbnRzKCk7CiAgICAgICAgIG1fdGlsZXMuY2xlYXIoKTsKIAogICAgICAgICBtX2NvbnRl
bnRzRGlydHkgPSB0cnVlOwpAQCAtNjQ4LDcgKzY0OCw3IEBAIHZvaWQgTGF5ZXJUaWxlcjo6cHJ1
bmVUZXh0dXJlcygpCiAgICAgLy8gUHJ1bmUgdGlsZXMgdGhhdCBhcmUgbm8gbG9uZ2VyIG5lZWRl
ZC4KICAgICBWZWN0b3I8VGlsZUluZGV4PiB0aWxlc1RvRGVsZXRlOwogICAgIGZvciAoVGlsZU1h
cDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IG1fdGlsZXMuZW5kKCk7ICsr
aXQpIHsKLSAgICAgICAgVGlsZUluZGV4IGluZGV4ID0gKCppdCkuZmlyc3Q7CisgICAgICAgIFRp
bGVJbmRleCBpbmRleCA9ICgqaXQpLmtleTsKIAogICAgICAgICBJbnRQb2ludCBvcmlnaW4gPSBv
cmlnaW5PZlRpbGUoaW5kZXgpOwogICAgICAgICBpZiAob3JpZ2luLngoKSA+PSBtX3JlcXVpcmVk
VGV4dHVyZVNpemUud2lkdGgoKSB8fCBvcmlnaW4ueSgpID49IG1fcmVxdWlyZWRUZXh0dXJlU2l6
ZS5oZWlnaHQoKSkKQEAgLTczMCw3ICs3MzAsNyBAQCB2b2lkIExheWVyVGlsZXI6OmJpbmRDb250
ZW50c1RleHR1cmUoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCopCiAgICAgaWYgKG1fdGlsZXMuc2l6
ZSgpICE9IDEpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNvbnN0IExheWVyVGlsZSogdGlsZSA9
IG1fdGlsZXMuYmVnaW4oKS0+c2Vjb25kOworICAgIGNvbnN0IExheWVyVGlsZSogdGlsZSA9IG1f
dGlsZXMuYmVnaW4oKS0+dmFsdWU7CiAKICAgICBBU1NFUlQodGlsZS0+aGFzVGV4dHVyZSgpKTsK
ICAgICBpZiAoIXRpbGUtPmhhc1RleHR1cmUoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvVGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJl
YWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9UZXh0
dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZC5jcHAKaW5kZXggNWI2YmI4NzM2NDlmOWE4OGJjYjc4
ZTIwYjE3YTE4ZWMzNTRjYjc1MS4uZDY1YzRkYWRkYmJiMjU5OGViMGZhMjQxNzFjNGU2YWYxNGRk
NzRjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2ti
ZXJyeS9UZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9UZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1Ro
cmVhZC5jcHAKQEAgLTIwMiwxMCArMjAyLDEwIEBAIHZvaWQgVGV4dHVyZUNhY2hlQ29tcG9zaXRp
bmdUaHJlYWQ6OnNldE1lbW9yeVVzYWdlKHNpemVfdCBtZW1vcnlVc2FnZSkKIFBhc3NSZWZQdHI8
VGV4dHVyZT4gVGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQ6OnRleHR1cmVGb3JUaWxlZENv
bnRlbnRzKGNvbnN0IFNrQml0bWFwJiBjb250ZW50cywgY29uc3QgSW50UmVjdCYgdGlsZVJlY3Qs
IGNvbnN0IFRpbGVJbmRleCYgaW5kZXgsIGJvb2wgaXNPcGFxdWUpCiB7CiAgICAgSGFzaE1hcDxD
b250ZW50c0tleSwgVGV4dHVyZU1hcD46Oml0ZXJhdG9yIGl0ID0gbV9jYWNoZS5hZGQoa2V5KGNv
bnRlbnRzKSwgVGV4dHVyZU1hcCgpKS5pdGVyYXRvcjsKLSAgICBUZXh0dXJlTWFwJiBtYXAgPSAo
Kml0KS5zZWNvbmQ7CisgICAgVGV4dHVyZU1hcCYgbWFwID0gKCppdCkudmFsdWU7CiAKICAgICBU
ZXh0dXJlTWFwOjppdGVyYXRvciBqdCA9IG1hcC5hZGQoaW5kZXgsIFJlZlB0cjxUZXh0dXJlPigp
KS5pdGVyYXRvcjsKLSAgICBSZWZQdHI8VGV4dHVyZT4gdGV4dHVyZSA9ICgqanQpLnNlY29uZDsK
KyAgICBSZWZQdHI8VGV4dHVyZT4gdGV4dHVyZSA9ICgqanQpLnZhbHVlOwogICAgIGlmICghdGV4
dHVyZSkgewogICAgICAgICB0ZXh0dXJlID0gY3JlYXRlVGV4dHVyZSgpOwogI2lmIERFQlVHX1RF
WFRVUkVfTUVNT1JZX1VTQUdFCkBAIC0yNDQsNyArMjQ0LDcgQEAgUGFzc1JlZlB0cjxUZXh0dXJl
PiBUZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZDo6dGV4dHVyZUZvckNvbG9yKGNvbnN0IENv
bG9yJgogI2VuZGlmCiAgICAgICAgIG1fY29sb3JzLnNldChjb2xvciwgdGV4dHVyZSk7CiAgICAg
fSBlbHNlCi0gICAgICAgIHRleHR1cmUgPSAoKml0KS5zZWNvbmQ7CisgICAgICAgIHRleHR1cmUg
PSAoKml0KS52YWx1ZTsKIAogICAgIC8vIENvbG9yIHRleHR1cmVzIGNhbid0IGJlIGV2aWN0ZWQs
IHNvIG5vIG5lZWQgZm9yIFRleHR1cmVQcm90ZWN0b3IuCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCmluZGV4IGRj
ZGI1ODZkMGNiZmIzMjkzNjFkNmVkYjU5ZmNjYWMwZWIzMGIyMjYuLjUwZDMzYTA3OWEyYmZkNWRm
OWI4ZDZmYjY2YmQ5MTFhNzBkMmZkZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcApAQCAtNDc3LDcgKzQ3Nyw3
IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjptb3ZlT3JDb3B5QW5pbWF0aW9ucyhNb3ZlT3JDb3B5
IG9wZXJhdGlvbiwgUGxhdGZvcm1DQUxheWVyCiAgICAgLy8gTG9vayBmb3IgcnVubmluZyBhbmlt
YXRpb25zIGFmZmVjdGluZyB0aGlzIHByb3BlcnR5LgogICAgIEFuaW1hdGlvbnNNYXA6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IG1fcnVubmluZ0FuaW1hdGlvbnMuZW5kKCk7CiAgICAgZm9yIChBbmlt
YXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fcnVubmluZ0FuaW1hdGlvbnMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IFZlY3RvcjxMYXllclByb3BlcnR5
QW5pbWF0aW9uPiYgcHJvcGVydHlBbmltYXRpb25zID0gaXQtPnNlY29uZDsKKyAgICAgICAgY29u
c3QgVmVjdG9yPExheWVyUHJvcGVydHlBbmltYXRpb24+JiBwcm9wZXJ0eUFuaW1hdGlvbnMgPSBp
dC0+dmFsdWU7CiAgICAgICAgIHNpemVfdCBudW1BbmltYXRpb25zID0gcHJvcGVydHlBbmltYXRp
b25zLnNpemUoKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1BbmltYXRpb25z
OyArK2kpIHsKICAgICAgICAgICAgIGNvbnN0IExheWVyUHJvcGVydHlBbmltYXRpb24mIGN1cnJB
bmltYXRpb24gPSBwcm9wZXJ0eUFuaW1hdGlvbnNbaV07CkBAIC03MTksNyArNzE5LDcgQEAgdm9p
ZCBHcmFwaGljc0xheWVyQ0E6OnBhdXNlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9u
TmFtZSwgZG91YmxlIHRpbWVPZmYKIAogICAgIEFuaW1hdGlvbnNUb1Byb2Nlc3NNYXA6Oml0ZXJh
dG9yIGl0ID0gbV9hbmltYXRpb25zVG9Qcm9jZXNzLmZpbmQoYW5pbWF0aW9uTmFtZSk7CiAgICAg
aWYgKGl0ICE9IG1fYW5pbWF0aW9uc1RvUHJvY2Vzcy5lbmQoKSkgewotICAgICAgICBBbmltYXRp
b25Qcm9jZXNzaW5nQWN0aW9uJiBwcm9jZXNzaW5nSW5mbyA9IGl0LT5zZWNvbmQ7CisgICAgICAg
IEFuaW1hdGlvblByb2Nlc3NpbmdBY3Rpb24mIHByb2Nlc3NpbmdJbmZvID0gaXQtPnZhbHVlOwog
ICAgICAgICAvLyBJZiBhbiBhbmltYXRpb24gaXMgc2NoZWR1bGVkIHRvIGJlIHJlbW92ZWQsIGRv
bid0IGNoYW5nZSB0aGUgcmVtb3ZlIHRvIGEgcGF1c2UuCiAgICAgICAgIGlmIChwcm9jZXNzaW5n
SW5mby5hY3Rpb24gIT0gUmVtb3ZlKQogICAgICAgICAgICAgcHJvY2Vzc2luZ0luZm8uYWN0aW9u
ID0gUGF1c2U7CkBAIC04NTQsNyArODU0LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OmxheWVy
RGlkRGlzcGxheShQbGF0Zm9ybUxheWVyKiBsYXllcikKICAgICBpZiAobGF5ZXJDbG9uZU1hcCkg
ewogICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+
ZW5kKCk7CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJD
bG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBQbGF0Zm9y
bUNBTGF5ZXIqIGN1cnJDbG9uZSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBQbGF0
Zm9ybUNBTGF5ZXIqIGN1cnJDbG9uZSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGlm
ICghY3VyckNsb25lKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCkBAIC0xMTk2LDEwICsx
MTk2LDEwIEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVHZW9tZXRyeShmbG9hdCBwYWdl
U2NhbGVGYWN0b3IsIGNvbnN0IEZsb2F0UG9pbnQmIHBvCiAgICAgICAgIGlmIChMYXllck1hcCog
bGF5ZXJDbG9uZU1hcCA9IG1fc3RydWN0dXJhbExheWVyQ2xvbmVzLmdldCgpKSB7CiAgICAgICAg
ICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7
CiAgICAgICAgICAgICBmb3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGxheWVyQ2xv
bmVNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgICAgIFBsYXRm
b3JtQ0FMYXllciogY2xvbmUgPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgICAgIFBs
YXRmb3JtQ0FMYXllciogY2xvbmUgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICAgICAg
RmxvYXRQb2ludCBjbG9uZVBvc2l0aW9uID0gbGF5ZXJQb3NpdGlvbjsKIAotICAgICAgICAgICAg
ICAgIGlmIChtX3JlcGxpY2FMYXllciAmJiBpc1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQtPmZpcnN0
KSkgeworICAgICAgICAgICAgICAgIGlmIChtX3JlcGxpY2FMYXllciAmJiBpc1JlcGxpY2F0ZWRS
b290Q2xvbmUoaXQtPmtleSkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gTWFpbnRhaW4gdGhl
IHNwZWNpYWwtY2FzZSBwb3NpdGlvbiBmb3IgdGhlIHJvb3Qgb2YgYSBjbG9uZSBzdWJ0cmVlLAog
ICAgICAgICAgICAgICAgICAgICAvLyB3aGljaCB3ZSBzZXQgdXAgaW4gcmVwbGljYXRlZExheWVy
Um9vdCgpLgogICAgICAgICAgICAgICAgICAgICBjbG9uZVBvc2l0aW9uID0gcG9zaXRpb25Gb3JD
bG9uZVJvb3RMYXllcigpOwpAQCAtMTIyMywxMCArMTIyMywxMCBAQCB2b2lkIEdyYXBoaWNzTGF5
ZXJDQTo6dXBkYXRlR2VvbWV0cnkoZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBjb25zdCBGbG9hdFBv
aW50JiBwbwogICAgIGlmIChMYXllck1hcCogbGF5ZXJDbG9uZU1hcCA9IG1fbGF5ZXJDbG9uZXMu
Z2V0KCkpIHsKICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxheWVyQ2xv
bmVNYXAtPmVuZCgpOwogICAgICAgICBmb3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9
IGxheWVyQ2xvbmVNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAg
UGxhdGZvcm1DQUxheWVyKiBjbG9uZSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBQ
bGF0Zm9ybUNBTGF5ZXIqIGNsb25lID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAgICAgRmxv
YXRQb2ludCBjbG9uZVBvc2l0aW9uID0gYWRqdXN0ZWRQb3NpdGlvbjsKIAotICAgICAgICAgICAg
aWYgKCFtX3N0cnVjdHVyYWxMYXllciAmJiBtX3JlcGxpY2FMYXllciAmJiBpc1JlcGxpY2F0ZWRS
b290Q2xvbmUoaXQtPmZpcnN0KSkgeworICAgICAgICAgICAgaWYgKCFtX3N0cnVjdHVyYWxMYXll
ciAmJiBtX3JlcGxpY2FMYXllciAmJiBpc1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQtPmtleSkpIHsK
ICAgICAgICAgICAgICAgICAvLyBNYWludGFpbiB0aGUgc3BlY2lhbC1jYXNlIHBvc2l0aW9uIGZv
ciB0aGUgcm9vdCBvZiBhIGNsb25lIHN1YnRyZWUsCiAgICAgICAgICAgICAgICAgLy8gd2hpY2gg
d2Ugc2V0IHVwIGluIHJlcGxpY2F0ZWRMYXllclJvb3QoKS4KICAgICAgICAgICAgICAgICBjbG9u
ZVBvc2l0aW9uID0gcG9zaXRpb25Gb3JDbG9uZVJvb3RMYXllcigpOwpAQCAtMTI0Niw4ICsxMjQ2
LDggQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZVRyYW5zZm9ybSgpCiAgICAgaWYgKExh
eWVyTWFwKiBsYXllckNsb25lTWFwID0gcHJpbWFyeUxheWVyQ2xvbmVzKCkpIHsKICAgICAgICAg
TGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxheWVyQ2xvbmVNYXAtPmVuZCgpOwogICAg
ICAgICBmb3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGxheWVyQ2xvbmVNYXAtPmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgUGxhdGZvcm1DQUxheWVyKiBj
dXJyTGF5ZXIgPSBpdC0+c2Vjb25kLmdldCgpOwotICAgICAgICAgICAgaWYgKG1fcmVwbGljYUxh
eWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9uZShpdC0+Zmlyc3QpKSB7CisgICAgICAgICAgICBQ
bGF0Zm9ybUNBTGF5ZXIqIGN1cnJMYXllciA9IGl0LT52YWx1ZS5nZXQoKTsKKyAgICAgICAgICAg
IGlmIChtX3JlcGxpY2FMYXllciAmJiBpc1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQtPmtleSkpIHsK
ICAgICAgICAgICAgICAgICAvLyBNYWludGFpbiB0aGUgc3BlY2lhbC1jYXNlIHRyYW5zZm9ybSBm
b3IgdGhlIHJvb3Qgb2YgYSBjbG9uZSBzdWJ0cmVlLAogICAgICAgICAgICAgICAgIC8vIHdoaWNo
IHdlIHNldCB1cCBpbiByZXBsaWNhdGVkTGF5ZXJSb290KCkuCiAgICAgICAgICAgICAgICAgY3Vy
ckxheWVyLT5zZXRUcmFuc2Zvcm0oVHJhbnNmb3JtYXRpb25NYXRyaXgoKSk7CkBAIC0xMjY0LDcg
KzEyNjQsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlQ2hpbGRyZW5UcmFuc2Zvcm0o
KQogICAgIGlmIChMYXllck1hcCogbGF5ZXJDbG9uZU1hcCA9IHByaW1hcnlMYXllckNsb25lcygp
KSB7CiAgICAgICAgIExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBsYXllckNsb25lTWFw
LT5lbmQoKTsKICAgICAgICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXll
ckNsb25lTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBpdC0+c2Vj
b25kLT5zZXRTdWJsYXllclRyYW5zZm9ybShtX2NoaWxkcmVuVHJhbnNmb3JtKTsKKyAgICAgICAg
ICAgIGl0LT52YWx1ZS0+c2V0U3VibGF5ZXJUcmFuc2Zvcm0obV9jaGlsZHJlblRyYW5zZm9ybSk7
CiAgICAgfQogfQogCkBAIC0xMjc1LDcgKzEyNzUsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6
dXBkYXRlTWFza3NUb0JvdW5kcygpCiAgICAgaWYgKExheWVyTWFwKiBsYXllckNsb25lTWFwID0g
bV9sYXllckNsb25lcy5nZXQoKSkgewogICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQot
ICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0TWFza3NUb0JvdW5kcyhtX21hc2tzVG9Cb3VuZHMp
OworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRNYXNrc1RvQm91bmRzKG1fbWFza3NUb0JvdW5k
cyk7CiAgICAgfQogCiAgICAgdXBkYXRlRGVidWdJbmRpY2F0b3JzKCk7CkBAIC0xMjkzLDcgKzEy
OTMsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlQ29udGVudHNWaXNpYmlsaXR5KCkK
ICAgICAgICAgaWYgKExheWVyTWFwKiBsYXllckNsb25lTWFwID0gbV9sYXllckNsb25lcy5nZXQo
KSkgewogICAgICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxheWVyQ2xv
bmVNYXAtPmVuZCgpOwogICAgICAgICAgICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBsYXllckNsb25lTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAg
ICAgICAgaXQtPnNlY29uZC0+c2V0Q29udGVudHMoMCk7CisgICAgICAgICAgICAgICAgaXQtPnZh
bHVlLT5zZXRDb250ZW50cygwKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTEzMDUsNyArMTMw
NSw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVDb250ZW50c09wYXF1ZSgpCiAgICAg
aWYgKExheWVyTWFwKiBsYXllckNsb25lTWFwID0gbV9sYXllckNsb25lcy5nZXQoKSkgewogICAg
ICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7
CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1h
cC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0
T3BhcXVlKG1fY29udGVudHNPcGFxdWUpOworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRPcGFx
dWUobV9jb250ZW50c09wYXF1ZSk7CiAgICAgfQogfQogCkBAIC0xMzE3LDcgKzEzMTcsNyBAQCB2
b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlQmFja2ZhY2VWaXNpYmlsaXR5KCkKICAgICAgICAg
aWYgKExheWVyTWFwKiBsYXllckNsb25lTWFwID0gbV9zdHJ1Y3R1cmFsTGF5ZXJDbG9uZXMuZ2V0
KCkpIHsKICAgICAgICAgICAgIExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBsYXllckNs
b25lTWFwLT5lbmQoKTsKICAgICAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAg
ICAgICAgIGl0LT5zZWNvbmQtPnNldERvdWJsZVNpZGVkKG1fYmFja2ZhY2VWaXNpYmlsaXR5KTsK
KyAgICAgICAgICAgICAgICBpdC0+dmFsdWUtPnNldERvdWJsZVNpZGVkKG1fYmFja2ZhY2VWaXNp
YmlsaXR5KTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTMyNiw3ICsxMzI2LDcgQEAgdm9pZCBH
cmFwaGljc0xheWVyQ0E6OnVwZGF0ZUJhY2tmYWNlVmlzaWJpbGl0eSgpCiAgICAgaWYgKExheWVy
TWFwKiBsYXllckNsb25lTWFwID0gbV9sYXllckNsb25lcy5nZXQoKSkgewogICAgICAgICBMYXll
ck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAgICAg
IGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0RG91YmxlU2lk
ZWQobV9iYWNrZmFjZVZpc2liaWxpdHkpOworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXREb3Vi
bGVTaWRlZChtX2JhY2tmYWNlVmlzaWJpbGl0eSk7CiAgICAgfQogfQogCkBAIC0xMzM4LDEwICsx
MzM4LDEwIEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVGaWx0ZXJzKCkKICAgICBpZiAo
TGF5ZXJNYXAqIGxheWVyQ2xvbmVNYXAgPSBwcmltYXJ5TGF5ZXJDbG9uZXMoKSkgewogICAgICAg
ICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAg
ICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAobV9yZXBsaWNhTGF5
ZXIgJiYgaXNSZXBsaWNhdGVkUm9vdENsb25lKGl0LT5maXJzdCkpCisgICAgICAgICAgICBpZiAo
bV9yZXBsaWNhTGF5ZXIgJiYgaXNSZXBsaWNhdGVkUm9vdENsb25lKGl0LT5rZXkpKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRGaWx0ZXJz
KG1fZmlsdGVycyk7CisgICAgICAgICAgICBpdC0+dmFsdWUtPnNldEZpbHRlcnMobV9maWx0ZXJz
KTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTE0MzAsNyArMTQzMCw3IEBAIHZvaWQgR3JhcGhp
Y3NMYXllckNBOjplbnN1cmVTdHJ1Y3R1cmFsTGF5ZXIoU3RydWN0dXJhbExheWVyUHVycG9zZSBw
dXJwb3NlLCBmbG9hCiAgICAgaWYgKG1fbGF5ZXJDbG9uZXMpIHsKICAgICAgICAgTGF5ZXJNYXA6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fbGF5ZXJDbG9uZXMtPmVuZCgpOwogICAgICAgICBmb3Ig
KExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fbGF5ZXJDbG9uZXMtPmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgUGxhdGZvcm1DQUxheWVyKiBjdXJyTGF5ZXIg
PSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgUGxhdGZvcm1DQUxheWVyKiBjdXJyTGF5
ZXIgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBjdXJyTGF5ZXItPnNldFBvc2l0aW9u
KHBvaW50KTsKICAgICAgICAgICAgIGN1cnJMYXllci0+c2V0QW5jaG9yUG9pbnQoYW5jaG9yUG9p
bnQpOwogICAgICAgICAgICAgY3VyckxheWVyLT5zZXRUcmFuc2Zvcm0oVHJhbnNmb3JtYXRpb25N
YXRyaXgoKSk7CkBAIC0xNDc1LDcgKzE0NzUsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBk
YXRlTGF5ZXJEcmF3c0NvbnRlbnQoZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBjb25zdCBGbG9hdAog
ICAgICAgICBpZiAobV9sYXllckNsb25lcykgewogICAgICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IG1fbGF5ZXJDbG9uZXMtPmVuZCgpOwogICAgICAgICAgICAgZm9yIChM
YXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2xheWVyQ2xvbmVzLT5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCi0gICAgICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0Q29udGVudHMoMCk7
CisgICAgICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRDb250ZW50cygwKTsKICAgICAgICAgfQog
ICAgIH0KICAgICB1cGRhdGVEZWJ1Z0luZGljYXRvcnMoKTsKQEAgLTE1MjYsNyArMTUyNiw3IEBA
IHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVDb250ZW50c0ltYWdlKCkKICAgICAgICAgaWYg
KG1fY29udGVudHNMYXllckNsb25lcykgewogICAgICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IG1fY29udGVudHNMYXllckNsb25lcy0+ZW5kKCk7CiAgICAgICAgICAgICBm
b3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fY29udGVudHNMYXllckNsb25lcy0+
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNl
dENvbnRlbnRzKG1fY29udGVudHNMYXllci0+Y29udGVudHMoKSk7CisgICAgICAgICAgICAgICAg
aXQtPnZhbHVlLT5zZXRDb250ZW50cyhtX2NvbnRlbnRzTGF5ZXItPmNvbnRlbnRzKCkpOwogICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICB1cGRhdGVDb250ZW50c1JlY3QoKTsKQEAgLTE1NzAs
OCArMTU3MCw4IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVDb250ZW50c1JlY3QoKQog
ICAgIGlmIChtX2NvbnRlbnRzTGF5ZXJDbG9uZXMpIHsKICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IG1fY29udGVudHNMYXllckNsb25lcy0+ZW5kKCk7CiAgICAgICAgIGZv
ciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9jb250ZW50c0xheWVyQ2xvbmVzLT5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNldFBv
c2l0aW9uKHBvaW50KTsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNldEJvdW5kcyhyZWN0KTsK
KyAgICAgICAgICAgIGl0LT52YWx1ZS0+c2V0UG9zaXRpb24ocG9pbnQpOworICAgICAgICAgICAg
aXQtPnZhbHVlLT5zZXRCb3VuZHMocmVjdCk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0xNTg2
LDggKzE1ODYsOCBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlTWFza0xheWVyKCkKICAg
ICBpZiAoTGF5ZXJNYXAqIGxheWVyQ2xvbmVNYXAgPSBtX2xheWVyQ2xvbmVzLmdldCgpKSB7CiAg
ICAgICAgIExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBsYXllckNsb25lTWFwLT5lbmQo
KTsKICAgICAgICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXllckNsb25l
TWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsgICAgICAgICAgICAKLSAgICAgICAgICAg
IFBsYXRmb3JtQ0FMYXllciogbWFza0Nsb25lID0gbWFza0xheWVyQ2xvbmVNYXAgPyBtYXNrTGF5
ZXJDbG9uZU1hcC0+Z2V0KGl0LT5maXJzdCkuZ2V0KCkgOiAwOwotICAgICAgICAgICAgaXQtPnNl
Y29uZC0+c2V0TWFzayhtYXNrQ2xvbmUpOworICAgICAgICAgICAgUGxhdGZvcm1DQUxheWVyKiBt
YXNrQ2xvbmUgPSBtYXNrTGF5ZXJDbG9uZU1hcCA/IG1hc2tMYXllckNsb25lTWFwLT5nZXQoaXQt
PmtleSkuZ2V0KCkgOiAwOworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRNYXNrKG1hc2tDbG9u
ZSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0xNjUxLDEzICsxNjUxLDEzIEBAIHZvaWQgR3Jh
cGhpY3NMYXllckNBOjp1cGRhdGVMYXllckFuaW1hdGlvbnMoKQogICAgIGlmIChtX2FuaW1hdGlv
bnNUb1Byb2Nlc3Muc2l6ZSgpKSB7CiAgICAgICAgIEFuaW1hdGlvbnNUb1Byb2Nlc3NNYXA6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IG1fYW5pbWF0aW9uc1RvUHJvY2Vzcy5lbmQoKTsKICAgICAgICAg
Zm9yIChBbmltYXRpb25zVG9Qcm9jZXNzTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fYW5pbWF0
aW9uc1RvUHJvY2Vzcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGNv
bnN0IFN0cmluZyYgY3VyckFuaW1hdGlvbk5hbWUgPSBpdC0+Zmlyc3Q7CisgICAgICAgICAgICBj
b25zdCBTdHJpbmcmIGN1cnJBbmltYXRpb25OYW1lID0gaXQtPmtleTsKICAgICAgICAgICAgIEFu
aW1hdGlvbnNNYXA6Oml0ZXJhdG9yIGFuaW1hdGlvbkl0ID0gbV9ydW5uaW5nQW5pbWF0aW9ucy5m
aW5kKGN1cnJBbmltYXRpb25OYW1lKTsKICAgICAgICAgICAgIGlmIChhbmltYXRpb25JdCA9PSBt
X3J1bm5pbmdBbmltYXRpb25zLmVuZCgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0g
ICAgICAgICAgICBjb25zdCBBbmltYXRpb25Qcm9jZXNzaW5nQWN0aW9uJiBwcm9jZXNzaW5nSW5m
byA9IGl0LT5zZWNvbmQ7Ci0gICAgICAgICAgICBjb25zdCBWZWN0b3I8TGF5ZXJQcm9wZXJ0eUFu
aW1hdGlvbj4mIGFuaW1hdGlvbnMgPSBhbmltYXRpb25JdC0+c2Vjb25kOworICAgICAgICAgICAg
Y29uc3QgQW5pbWF0aW9uUHJvY2Vzc2luZ0FjdGlvbiYgcHJvY2Vzc2luZ0luZm8gPSBpdC0+dmFs
dWU7CisgICAgICAgICAgICBjb25zdCBWZWN0b3I8TGF5ZXJQcm9wZXJ0eUFuaW1hdGlvbj4mIGFu
aW1hdGlvbnMgPSBhbmltYXRpb25JdC0+dmFsdWU7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgICAgICBjb25z
dCBMYXllclByb3BlcnR5QW5pbWF0aW9uJiBjdXJyQW5pbWF0aW9uID0gYW5pbWF0aW9uc1tpXTsK
ICAgICAgICAgICAgICAgICBzd2l0Y2ggKHByb2Nlc3NpbmdJbmZvLmFjdGlvbikgewpAQCAtMTY4
OSw3ICsxNjg5LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUxheWVyQW5pbWF0aW9u
cygpCiAgICAgICAgICAgICAgICAgYW5pbWF0aW9ucy5hcHBlbmQocGVuZGluZ0FuaW1hdGlvbik7
CiAgICAgICAgICAgICAgICAgbV9ydW5uaW5nQW5pbWF0aW9ucy5hZGQocGVuZGluZ0FuaW1hdGlv
bi5tX25hbWUsIGFuaW1hdGlvbnMpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICBWZWN0b3I8TGF5ZXJQcm9wZXJ0eUFuaW1hdGlvbj4mIGFuaW1hdGlvbnMgPSBpdC0+c2Vj
b25kOworICAgICAgICAgICAgICAgIFZlY3RvcjxMYXllclByb3BlcnR5QW5pbWF0aW9uPiYgYW5p
bWF0aW9ucyA9IGl0LT52YWx1ZTsKICAgICAgICAgICAgICAgICBhbmltYXRpb25zLmFwcGVuZChw
ZW5kaW5nQW5pbWF0aW9uKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTcxNCwxMSAr
MTcxNCwxMSBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c2V0QW5pbWF0aW9uT25MYXllcihQbGF0
Zm9ybUNBQW5pbWF0aW9uKiBjYUFuaW0sIEFuaW1hdGVkUAogICAgICAgICBMYXllck1hcDo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAoTGF5
ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7CiAgICAgICAgICAgICAvLyBTa2lwIGltbWVkaWF0ZSByZXBsaWNhcywgc2lu
Y2UgdGhleSBtb3ZlIHdpdGggdGhlIG9yaWdpbmFsLgotICAgICAgICAgICAgaWYgKG1fcmVwbGlj
YUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9uZShpdC0+Zmlyc3QpKQorICAgICAgICAgICAg
aWYgKG1fcmVwbGljYUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9uZShpdC0+a2V5KSkKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgaXQtPnNlY29uZC0+cmVtb3Zl
QW5pbWF0aW9uRm9yS2V5KGFuaW1hdGlvbklEKTsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPmFk
ZEFuaW1hdGlvbkZvcktleShhbmltYXRpb25JRCwgY2FBbmltKTsKKyAgICAgICAgICAgIGl0LT52
YWx1ZS0+cmVtb3ZlQW5pbWF0aW9uRm9yS2V5KGFuaW1hdGlvbklEKTsKKyAgICAgICAgICAgIGl0
LT52YWx1ZS0+YWRkQW5pbWF0aW9uRm9yS2V5KGFuaW1hdGlvbklELCBjYUFuaW0pOwogICAgICAg
ICB9CiAgICAgfQogfQpAQCAtMTc1MywxMCArMTc1MywxMCBAQCBib29sIEdyYXBoaWNzTGF5ZXJD
QTo6cmVtb3ZlQ0FBbmltYXRpb25Gcm9tTGF5ZXIoQW5pbWF0ZWRQcm9wZXJ0eUlEIHByb3BlcnR5
LCBjbwogICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1h
cC0+ZW5kKCk7CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5
ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICAvLyBT
a2lwIGltbWVkaWF0ZSByZXBsaWNhcywgc2luY2UgdGhleSBtb3ZlIHdpdGggdGhlIG9yaWdpbmFs
LgotICAgICAgICAgICAgaWYgKG1fcmVwbGljYUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9u
ZShpdC0+Zmlyc3QpKQorICAgICAgICAgICAgaWYgKG1fcmVwbGljYUxheWVyICYmIGlzUmVwbGlj
YXRlZFJvb3RDbG9uZShpdC0+a2V5KSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAg
ICAgICAgICAgaXQtPnNlY29uZCAtPnJlbW92ZUFuaW1hdGlvbkZvcktleShhbmltYXRpb25JRCk7
CisgICAgICAgICAgICBpdC0+dmFsdWUtPnJlbW92ZUFuaW1hdGlvbkZvcktleShhbmltYXRpb25J
RCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIHRydWU7CkBAIC0xNzg1LDkgKzE3ODUs
OSBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6cGF1c2VDQUFuaW1hdGlvbk9uTGF5ZXIoQW5pbWF0
ZWRQcm9wZXJ0eUlEIHByb3BlcnR5LCBjb25zdAogICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7CiAgICAgICAgICAgICAvLyBTa2lwIGltbWVkaWF0ZSByZXBsaWNhcywgc2luY2UgdGhl
eSBtb3ZlIHdpdGggdGhlIG9yaWdpbmFsLgotICAgICAgICAgICAgaWYgKG1fcmVwbGljYUxheWVy
ICYmIGlzUmVwbGljYXRlZFJvb3RDbG9uZShpdC0+Zmlyc3QpKQorICAgICAgICAgICAgaWYgKG1f
cmVwbGljYUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9uZShpdC0+a2V5KSkKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPmFkZEFuaW1hdGlvbkZv
cktleShhbmltYXRpb25JRCwgbmV3QW5pbS5nZXQoKSk7CisgICAgICAgICAgICBpdC0+dmFsdWUt
PmFkZEFuaW1hdGlvbkZvcktleShhbmltYXRpb25JRCwgbmV3QW5pbS5nZXQoKSk7CiAgICAgICAg
IH0KICAgICB9CiB9CkBAIC0yMzExLDggKzIzMTEsOCBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6
c3VzcGVuZEFuaW1hdGlvbnMoZG91YmxlIHRpbWUpCiAgICAgaWYgKExheWVyTWFwKiBsYXllckNs
b25lTWFwID0gcHJpbWFyeUxheWVyQ2xvbmVzKCkpIHsKICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IGxheWVyQ2xvbmVNYXAtPmVuZCgpOwogICAgICAgICBmb3IgKExheWVy
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGxheWVyQ2xvbmVNYXAtPmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewotICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0U3BlZWQoMCk7Ci0gICAgICAg
ICAgICBpdC0+c2Vjb25kLT5zZXRUaW1lT2Zmc2V0KHQpOworICAgICAgICAgICAgaXQtPnZhbHVl
LT5zZXRTcGVlZCgwKTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+c2V0VGltZU9mZnNldCh0KTsK
ICAgICAgICAgfQogICAgIH0KIH0KQEAgLTIzMjYsOCArMjMyNiw4IEBAIHZvaWQgR3JhcGhpY3NM
YXllckNBOjpyZXN1bWVBbmltYXRpb25zKCkKICAgICBpZiAoTGF5ZXJNYXAqIGxheWVyQ2xvbmVN
YXAgPSBwcmltYXJ5TGF5ZXJDbG9uZXMoKSkgewogICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRTcGVlZCgxKTsKLSAgICAgICAgICAg
IGl0LT5zZWNvbmQtPnNldFRpbWVPZmZzZXQoMCk7CisgICAgICAgICAgICBpdC0+dmFsdWUtPnNl
dFNwZWVkKDEpOworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRUaW1lT2Zmc2V0KDApOwogICAg
ICAgICB9CiAgICAgfQogfQpAQCAtMjUzNywxMyArMjUzNywxMyBAQCBQYXNzUmVmUHRyPFBsYXRm
b3JtQ0FMYXllcj4gR3JhcGhpY3NMYXllckNBOjpmaW5kT3JNYWtlQ2xvbmUoQ2xvbmVJRCBjbG9u
ZUlELCBQbAogICAgIExheWVyTWFwOjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gY2xvbmVzLT5hZGQo
Y2xvbmVJRCwgZHVtbXkpOwogICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKICAgICAg
ICAgLy8gVmFsdWUgd2FzIG5vdCBhZGRlZCwgc28gaXQgZXhpc3RzIGFscmVhZHkuCi0gICAgICAg
IHJlc3VsdExheWVyID0gYWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQuZ2V0KCk7CisgICAgICAg
IHJlc3VsdExheWVyID0gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKICAgICB9IGVs
c2UgewogICAgICAgICByZXN1bHRMYXllciA9IGNsb25lTGF5ZXIoc291cmNlTGF5ZXIsIGNsb25l
TGV2ZWwpOwogI2lmbmRlZiBOREVCVUcKICAgICAgICAgcmVzdWx0TGF5ZXItPnNldE5hbWUoU3Ry
aW5nOjpmb3JtYXQoIkNsb25lICVkIG9mIGxheWVyICVwIiwgY2xvbmVJRFswVV0sIHNvdXJjZUxh
eWVyLT5wbGF0Zm9ybUxheWVyKCkpKTsKICNlbmRpZgotICAgICAgICBhZGRSZXN1bHQuaXRlcmF0
b3ItPnNlY29uZCA9IHJlc3VsdExheWVyOworICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZh
bHVlID0gcmVzdWx0TGF5ZXI7CiAgICAgfQogCiAgICAgcmV0dXJuIHJlc3VsdExheWVyOwpAQCAt
MjczNSw5ICsyNzM1LDkgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnNldE9wYWNpdHlJbnRlcm5h
bChmbG9hdCBhY2N1bXVsYXRlZE9wYWNpdHkpCiAgICAgaWYgKGxheWVyQ2xvbmVNYXApIHsKICAg
ICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxheWVyQ2xvbmVNYXAtPmVuZCgp
OwogICAgICAgICBmb3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGxheWVyQ2xvbmVN
YXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgaWYgKG1fcmVwbGlj
YUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9uZShpdC0+Zmlyc3QpKQorICAgICAgICAgICAg
aWYgKG1fcmVwbGljYUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9uZShpdC0+a2V5KSkKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNldE9wYWNp
dHkobV9vcGFjaXR5KTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+c2V0T3BhY2l0eShtX29wYWNp
dHkpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMjc0OSwxMCArMjc0OSwxMCBAQCB2b2lkIEdy
YXBoaWNzTGF5ZXJDQTo6dXBkYXRlT3BhY2l0eU9uTGF5ZXIoKQogICAgIGlmIChMYXllck1hcCog
bGF5ZXJDbG9uZU1hcCA9IHByaW1hcnlMYXllckNsb25lcygpKSB7CiAgICAgICAgIExheWVyTWFw
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBsYXllckNsb25lTWFwLT5lbmQoKTsKICAgICAgICAgZm9y
IChMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXllckNsb25lTWFwLT5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGlmIChtX3JlcGxpY2FMYXllciAmJiBpc1Jl
cGxpY2F0ZWRSb290Q2xvbmUoaXQtPmZpcnN0KSkKKyAgICAgICAgICAgIGlmIChtX3JlcGxpY2FM
YXllciAmJiBpc1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQtPmtleSkpCiAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNldE9wYWNpdHkobV9vcGFjaXR5
KTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+c2V0T3BhY2l0eShtX29wYWNpdHkpOwogICAgICAg
ICB9CiAgICAgICAgIAogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL21hYy9UaWxlQ2FjaGUubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYS9tYWMvVGlsZUNhY2hlLm1tCmluZGV4IDZiYTUyODA4OTI1MWQ0Y2I1ZjZlY2Y4
NWZiZjg0ZDZhZGRkYzk1OTMuLjAzOWI2ODc3MjhkMTIxZDQwYzE4NmJmZDFkMDVmNzAyZDkyYjEy
ZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9U
aWxlQ2FjaGUubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFj
L1RpbGVDYWNoZS5tbQpAQCAtNzYsNyArNzYsNyBAQCBUaWxlQ2FjaGU6On5UaWxlQ2FjaGUoKQog
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKICAgICBmb3IgKFRpbGVNYXA6Oml0ZXJhdG9y
IGl0ID0gbV90aWxlcy5iZWdpbigpLCBlbmQgPSBtX3RpbGVzLmVuZCgpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKLSAgICAgICAgV2ViVGlsZUxheWVyKiB0aWxlTGF5ZXIgPSBpdC0+c2Vjb25kLmdldCgp
OworICAgICAgICBXZWJUaWxlTGF5ZXIqIHRpbGVMYXllciA9IGl0LT52YWx1ZS5nZXQoKTsKICAg
ICAgICAgW3RpbGVMYXllciBzZXRUaWxlQ2FjaGU6MF07CiAgICAgfQogfQpAQCAtOTYsNyArOTYs
NyBAQCB2b2lkIFRpbGVDYWNoZTo6dGlsZUNhY2hlTGF5ZXJCb3VuZHNDaGFuZ2VkKCkKIHZvaWQg
VGlsZUNhY2hlOjpzZXROZWVkc0Rpc3BsYXkoKQogewogICAgIGZvciAoVGlsZU1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCksIGVuZCA9IG1fdGlsZXMuZW5kKCk7IGl0ICE9
IGVuZDsgKytpdCkKLSAgICAgICAgW2l0LT5zZWNvbmQuZ2V0KCkgc2V0TmVlZHNEaXNwbGF5XTsK
KyAgICAgICAgW2l0LT52YWx1ZS5nZXQoKSBzZXROZWVkc0Rpc3BsYXldOwogfQogCiB2b2lkIFRp
bGVDYWNoZTo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCkBAIC0x
NzcsOSArMTc3LDkgQEAgdm9pZCBUaWxlQ2FjaGU6OnNldFNjYWxlKENHRmxvYXQgc2NhbGUpCiAg
ICAgcmV2YWxpZGF0ZVRpbGVzKCk7CiAKICAgICBmb3IgKFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbV90aWxlcy5iZWdpbigpLCBlbmQgPSBtX3RpbGVzLmVuZCgpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKLSAgICAgICAgW2l0LT5zZWNvbmQuZ2V0KCkgc2V0Q29udGVudHNTY2FsZTpkZXZpY2VT
Y2FsZUZhY3Rvcl07CisgICAgICAgIFtpdC0+dmFsdWUuZ2V0KCkgc2V0Q29udGVudHNTY2FsZTpk
ZXZpY2VTY2FsZUZhY3Rvcl07CiAKLSAgICAgICAgSW50UmVjdCB0aWxlUmVjdCA9IHJlY3RGb3JU
aWxlSW5kZXgoaXQtPmZpcnN0KTsKKyAgICAgICAgSW50UmVjdCB0aWxlUmVjdCA9IHJlY3RGb3JU
aWxlSW5kZXgoaXQtPmtleSk7CiAgICAgICAgIEZsb2F0UmVjdCBzY2FsZWRUaWxlUmVjdCA9IHRp
bGVSZWN0OwogCiAgICAgICAgIHNjYWxlZFRpbGVSZWN0LnNjYWxlKDEgLyBtX3NjYWxlKTsKQEAg
LTE5OSw3ICsxOTksNyBAQCB2b2lkIFRpbGVDYWNoZTo6c2V0QWNjZWxlcmF0ZXNEcmF3aW5nKGJv
b2wgYWNjZWxlcmF0ZXNEcmF3aW5nKQogICAgIG1fYWNjZWxlcmF0ZXNEcmF3aW5nID0gYWNjZWxl
cmF0ZXNEcmF3aW5nOwogCiAgICAgZm9yIChUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1f
dGlsZXMuYmVnaW4oKSwgZW5kID0gbV90aWxlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQotICAg
ICAgICBbaXQtPnNlY29uZC5nZXQoKSBzZXRBY2NlbGVyYXRlc0RyYXdpbmc6bV9hY2NlbGVyYXRl
c0RyYXdpbmddOworICAgICAgICBbaXQtPnZhbHVlLmdldCgpIHNldEFjY2VsZXJhdGVzRHJhd2lu
ZzptX2FjY2VsZXJhdGVzRHJhd2luZ107CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShhY2NlbGVy
YXRlc0RyYXdpbmcpOwogI2VuZGlmCkBAIC0yNDksNyArMjQ5LDcgQEAgdm9pZCBUaWxlQ2FjaGU6
OnNldFRpbGVEZWJ1Z0JvcmRlcldpZHRoKGZsb2F0IGJvcmRlcldpZHRoKQogCiAgICAgbV90aWxl
RGVidWdCb3JkZXJXaWR0aCA9IGJvcmRlcldpZHRoOwogICAgIGZvciAoVGlsZU1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCksIGVuZCA9IG1fdGlsZXMuZW5kKCk7IGl0ICE9
IGVuZDsgKytpdCkKLSAgICAgICAgW2l0LT5zZWNvbmQuZ2V0KCkgc2V0Qm9yZGVyV2lkdGg6bV90
aWxlRGVidWdCb3JkZXJXaWR0aF07CisgICAgICAgIFtpdC0+dmFsdWUuZ2V0KCkgc2V0Qm9yZGVy
V2lkdGg6bV90aWxlRGVidWdCb3JkZXJXaWR0aF07CiB9CiAKIHZvaWQgVGlsZUNhY2hlOjpzZXRU
aWxlRGVidWdCb3JkZXJDb2xvcihDR0NvbG9yUmVmIGJvcmRlckNvbG9yKQpAQCAtMjU5LDcgKzI1
OSw3IEBAIHZvaWQgVGlsZUNhY2hlOjpzZXRUaWxlRGVidWdCb3JkZXJDb2xvcihDR0NvbG9yUmVm
IGJvcmRlckNvbG9yKQogCiAgICAgbV90aWxlRGVidWdCb3JkZXJDb2xvciA9IGJvcmRlckNvbG9y
OwogICAgIGZvciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCks
IGVuZCA9IG1fdGlsZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgW2l0LT5zZWNv
bmQuZ2V0KCkgc2V0Qm9yZGVyQ29sb3I6bV90aWxlRGVidWdCb3JkZXJDb2xvci5nZXQoKV07Cisg
ICAgICAgIFtpdC0+dmFsdWUuZ2V0KCkgc2V0Qm9yZGVyQ29sb3I6bV90aWxlRGVidWdCb3JkZXJD
b2xvci5nZXQoKV07CiB9CiAKIEludFJlY3QgVGlsZUNhY2hlOjpib3VuZHMoKSBjb25zdApAQCAt
MzY1LDkgKzM2NSw5IEBAIHZvaWQgVGlsZUNhY2hlOjpyZXZhbGlkYXRlVGlsZXMoKQogICAgIFZl
Y3RvcjxUaWxlSW5kZXg+IHRpbGVzVG9SZW1vdmU7CiAKICAgICBmb3IgKFRpbGVNYXA6Oml0ZXJh
dG9yIGl0ID0gbV90aWxlcy5iZWdpbigpLCBlbmQgPSBtX3RpbGVzLmVuZCgpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKLSAgICAgICAgY29uc3QgVGlsZUluZGV4JiB0aWxlSW5kZXggPSBpdC0+Zmlyc3Q7
CisgICAgICAgIGNvbnN0IFRpbGVJbmRleCYgdGlsZUluZGV4ID0gaXQtPmtleTsKIAotICAgICAg
ICBXZWJUaWxlTGF5ZXIqIHRpbGVMYXllciA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIFdl
YlRpbGVMYXllciogdGlsZUxheWVyID0gaXQtPnZhbHVlLmdldCgpOwogCiAgICAgICAgIGlmICgh
cmVjdEZvclRpbGVJbmRleCh0aWxlSW5kZXgpLmludGVyc2VjdHModGlsZUNvdmVyYWdlUmVjdCkp
IHsKICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGlzIGxheWVyLgpAQCAtMzk1LDcgKzM5NSw3IEBA
IHZvaWQgVGlsZUNhY2hlOjpyZXZhbGlkYXRlVGlsZXMoKQogICAgICAgICAgICAgVGlsZUluZGV4
IHRpbGVJbmRleCh4LCB5KTsKIAogICAgICAgICAgICAgSW50UmVjdCB0aWxlUmVjdCA9IHJlY3RG
b3JUaWxlSW5kZXgodGlsZUluZGV4KTsKLSAgICAgICAgICAgIFJldGFpblB0cjxXZWJUaWxlTGF5
ZXI+JiB0aWxlTGF5ZXIgPSBtX3RpbGVzLmFkZCh0aWxlSW5kZXgsIDApLml0ZXJhdG9yLT5zZWNv
bmQ7CisgICAgICAgICAgICBSZXRhaW5QdHI8V2ViVGlsZUxheWVyPiYgdGlsZUxheWVyID0gbV90
aWxlcy5hZGQodGlsZUluZGV4LCAwKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgICAgICBpZiAo
IXRpbGVMYXllcikgewogICAgICAgICAgICAgICAgIHRpbGVMYXllciA9IGNyZWF0ZVRpbGVMYXll
cih0aWxlUmVjdCk7CiAgICAgICAgICAgICAgICAgW21fdGlsZUNvbnRhaW5lckxheWVyLmdldCgp
IGFkZFN1YmxheWVyOnRpbGVMYXllci5nZXQoKV07CkBAIC00MTUsNyArNDE1LDcgQEAgdm9pZCBU
aWxlQ2FjaGU6OnJldmFsaWRhdGVUaWxlcygpCiAKICAgICBtX3RpbGVDb3ZlcmFnZVJlY3QgPSBJ
bnRSZWN0KCk7CiAgICAgZm9yIChUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4o
KSwgZW5kID0gbV90aWxlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0
IFRpbGVJbmRleCYgdGlsZUluZGV4ID0gaXQtPmZpcnN0OworICAgICAgICBjb25zdCBUaWxlSW5k
ZXgmIHRpbGVJbmRleCA9IGl0LT5rZXk7CiAKICAgICAgICAgbV90aWxlQ292ZXJhZ2VSZWN0LnVu
aXRlKHJlY3RGb3JUaWxlSW5kZXgodGlsZUluZGV4KSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxh
eWVyV2luLmNwcAppbmRleCA0OGIyMGQwYjhiZDI0MmFiNTQ5YjhmZTQ0MmRmNDRhYjM2NzJlYjg1
Li43MDE2OGIyMTA0ZGIzNjlkYTA3NTdhMTE0NDYyMjExMWJjMzA2MWYwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2lu
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZv
cm1DQUxheWVyV2luLmNwcApAQCAtMTY3LDcgKzE2Nyw3IEBAIHZvaWQgUGxhdGZvcm1DQUxheWVy
OjphbmltYXRpb25TdGFydGVkKENGVGltZUludGVydmFsIGJlZ2luVGltZSkKIAogICAgIEhhc2hN
YXA8U3RyaW5nLCBSZWZQdHI8UGxhdGZvcm1DQUFuaW1hdGlvbj4gPjo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gbV9hbmltYXRpb25zLmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIFJlZlB0
cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiA+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fYW5pbWF0aW9u
cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPnNldEFjdHVh
bFN0YXJ0VGltZUlmTmVlZGVkKGNhY2ZCZWdpblRpbWUpOworICAgICAgICBpdC0+dmFsdWUtPnNl
dEFjdHVhbFN0YXJ0VGltZUlmTmVlZGVkKGNhY2ZCZWdpblRpbWUpOwogCiAgICAgaWYgKG1fb3du
ZXIpCiAgICAgICAgIG1fb3duZXItPnBsYXRmb3JtQ0FMYXllckFuaW1hdGlvblN0YXJ0ZWQoYmVn
aW5UaW1lKTsKQEAgLTE3Nyw4ICsxNzcsOCBAQCBzdGF0aWMgdm9pZCByZXN1Ym1pdEFsbEFuaW1h
dGlvbnMoUGxhdGZvcm1DQUxheWVyKiBsYXllcikKIHsKICAgICBIYXNoTWFwPFN0cmluZywgUmVm
UHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+ID46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxheWVyLT5h
bmltYXRpb25zKCkuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPFN0cmluZywgUmVmUHRyPFBsYXRm
b3JtQ0FBbmltYXRpb24+ID46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXItPmFuaW1hdGlvbnMo
KS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgUmV0YWluUHRyPENGU3RyaW5n
UmVmPiBzKEFkb3B0Q0YsIGl0LT5maXJzdC5jcmVhdGVDRlN0cmluZygpKTsKLSAgICAgICAgQ0FD
RkxheWVyQWRkQW5pbWF0aW9uKGxheWVyLT5wbGF0Zm9ybUxheWVyKCksIHMuZ2V0KCksIGl0LT5z
ZWNvbmQtPnBsYXRmb3JtQW5pbWF0aW9uKCkpOworICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdS
ZWY+IHMoQWRvcHRDRiwgaXQtPmtleS5jcmVhdGVDRlN0cmluZygpKTsKKyAgICAgICAgQ0FDRkxh
eWVyQWRkQW5pbWF0aW9uKGxheWVyLT5wbGF0Zm9ybUxheWVyKCksIHMuZ2V0KCksIGl0LT52YWx1
ZS0+cGxhdGZvcm1BbmltYXRpb24oKSk7CiAgICAgfQogfQogCkBAIC0zMjgsNyArMzI4LDcgQEAg
UGFzc1JlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBQbGF0Zm9ybUNBTGF5ZXI6OmFuaW1hdGlv
bkZvcktleShjb25zdCBTdHJpbmcmIGsKICAgICBpZiAoaXQgPT0gbV9hbmltYXRpb25zLmVuZCgp
KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgIHJldHVy
biBpdC0+dmFsdWU7CiB9CiAKIFBsYXRmb3JtQ0FMYXllciogUGxhdGZvcm1DQUxheWVyOjptYXNr
KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0ZvbnRDYWNoZUNocm9taXVtV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUNocm9taXVtV2luLmNwcAppbmRleCA5Zjg5OThj
ZGFmZDgxMmUxODllNjVhMjg1ZmI2YzQ3NTMwYTQ2ZTBjLi4wYzg2NTUwMGRlODhjM2Q4ZGM2MWZi
NWM4MzFkOWVjMzRlNDEwZjcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9Gb250Q2FjaGVDaHJvbWl1bVdpbi5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENhY2hlQ2hyb21pdW1XaW4uY3Bw
CkBAIC0yMjMsMTAgKzIyMywxMCBAQCBzdGF0aWMgYm9vbCBMb29rdXBBbHROYW1lKGNvbnN0IFN0
cmluZyYgbmFtZSwgU3RyaW5nJiBhbHROYW1lKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICBzdGF0aWMgaW50IHN5c3RlbUNwID0gOjpHZXRBQ1AoKTsKLSAgICBpbnQgZm9udENwID0gaXRl
ci0+c2Vjb25kLT5jb2RlUGFnZTsKKyAgICBpbnQgZm9udENwID0gaXRlci0+dmFsdWUtPmNvZGVQ
YWdlOwogCiAgICAgaWYgKChpc0FzY2lpICYmIHN5c3RlbUNwID09IGZvbnRDcCkgfHwgKCFpc0Fz
Y2lpICYmIHN5c3RlbUNwICE9IGZvbnRDcCkpIHsKLSAgICAgICAgYWx0TmFtZSA9IFN0cmluZyhp
dGVyLT5zZWNvbmQtPm5hbWUpOworICAgICAgICBhbHROYW1lID0gU3RyaW5nKGl0ZXItPnZhbHVl
LT5uYW1lKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0yNzcsNyArMjc3LDcg
QEAgc3RhdGljIGJvb2wgZm9udENvbnRhaW5zQ2hhcmFjdGVyKGNvbnN0IEZvbnRQbGF0Zm9ybURh
dGEqIGZvbnREYXRhLAogCiAgICAgSGFzaE1hcDxjb25zdCB3Y2hhcl90KiwgaWN1OjpVbmljb2Rl
U2V0Kj46Oml0ZXJhdG9yIGl0ID0gZm9udENtYXBDYWNoZS0+ZmluZChmYW1pbHkpOwogICAgIGlm
IChpdCAhPSBmb250Q21hcENhY2hlLT5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQt
PmNvbnRhaW5zKGNoYXJhY3Rlcik7CisgICAgICAgIHJldHVybiBpdC0+dmFsdWUtPmNvbnRhaW5z
KGNoYXJhY3Rlcik7CiAKICAgICBIRk9OVCBoZm9udCA9IGZvbnREYXRhLT5oZm9udCgpOwogICAg
IEhXbmREQyBoZGMoMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9Gb250VXRpbHNDaHJvbWl1bVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250VXRpbHNDaHJvbWl1bVdpbi5jcHAKaW5kZXgg
ZGY5NDFjYjkwMzNmZGMwNzYwZjYxZGI5Y2ZhZDFmNGE5MmRkZDlhMy4uMTBmMWZkMDc4NmVhNDg4
M2E5YjM0MzE2YWUwNmMzYWI4MjY5NWI0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFV0aWxzQ2hyb21pdW1XaW4uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRVdGlsc0Nocm9taXVt
V2luLmNwcApAQCAtNDE1LDcgKzQxNSw3IEBAIGJvb2wgZ2V0RGVyaXZlZEZvbnREYXRhKGNvbnN0
IFVDaGFyKiBmYW1pbHksCiAgICAgICAgIC8vIGNoZWNrIGl0IGFnYWluc3Qgd2hhdCB3ZSBhY3R1
YWxseSB3YW50IChhcyBpcyBkb25lIGluCiAgICAgICAgIC8vIEZvbnRDYWNoZVdpbi5jcHApCiAg
ICAgICAgIEZvbnREYXRhQ2FjaGU6OkFkZFJlc3VsdCBlbnRyeSA9IGZvbnREYXRhQ2FjaGUuYWRk
KGZvbnRLZXksIEZvbnREYXRhKCkpOwotICAgICAgICBkZXJpdmVkID0gJmVudHJ5Lml0ZXJhdG9y
LT5zZWNvbmQ7CisgICAgICAgIGRlcml2ZWQgPSAmZW50cnkuaXRlcmF0b3ItPnZhbHVlOwogICAg
ICAgICBkZXJpdmVkLT5oZm9udCA9IENyZWF0ZUZvbnRJbmRpcmVjdChsb2dmb250KTsKICAgICAg
ICAgLy8gR2V0QXNjZW50IG1heSByZXR1cm4ga1VuZGVmaW5lZEFzY2VudCwgYnV0IHdlIHN0aWxs
IHdhbnQgdG8KICAgICAgICAgLy8gY2FjaGUgaXQgc28gdGhhdCB3ZSB3b24ndCBoYXZlIHRvIGNh
bGwgQ3JlYXRlRm9udEluZGlyZWN0IG9uY2UKQEAgLTQyMyw3ICs0MjMsNyBAQCBib29sIGdldERl
cml2ZWRGb250RGF0YShjb25zdCBVQ2hhciogZmFtaWx5LAogICAgICAgICBkZXJpdmVkLT5hc2Nl
bnQgPSBnZXRBc2NlbnQoZGVyaXZlZC0+aGZvbnQpOwogICAgICAgICBkZXJpdmVkLT5zcGFjZUds
eXBoID0gZ2V0U3BhY2VHbHlwaChkZXJpdmVkLT5oZm9udCk7CiAgICAgfSBlbHNlIHsKLSAgICAg
ICAgZGVyaXZlZCA9ICZpdGVyLT5zZWNvbmQ7CisgICAgICAgIGRlcml2ZWQgPSAmaXRlci0+dmFs
dWU7CiAgICAgICAgIC8vIExhc3QgdGltZSwgR2V0QXNjZW50IGZhaWxlZCBzbyB0aGF0IG9ubHkg
SEZPTlQgd2FzCiAgICAgICAgIC8vIGNhY2hlZC4gVHJ5IG9uY2UgbW9yZSBhc3N1bWluZyB0aGF0
IFRyeVByZWxvYWRGb250CiAgICAgICAgIC8vIHdhcyBjYWxsZWQgYnkgYSBjYWxsZXIgYmV0d2Vl
biBjYWxscy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCmluZGV4IDVkYzY1ZWM1YTIw
ODFhYWQ0NDc3ZDMyODI5Mzk0YTM2MmQwMzc0ZWIuLjJjM2QwY2Q0ZWRjMmNhODEzODcyYjNiYjk5
MjMzYWY4MTM2YTA1YWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcApAQCAtMjI1
LDkgKzIyNSw5IEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKEND
TGF5ZXJJbXBsKiBsYXllcikKICAgICBWZWN0b3I8VXBkYXRhYmxlVGlsZSo+IGludmFsaWRUaWxl
czsKIAogICAgIGZvciAoQ0NMYXllclRpbGluZ0RhdGE6OlRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ZXIgPSBtX3RpbGVyLT50aWxlcygpLmJlZ2luKCk7IGl0ZXIgIT0gbV90aWxlci0+dGlsZXMo
KS5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIGludCBpID0gaXRlci0+Zmlyc3QuZmlyc3Q7Ci0g
ICAgICAgIGludCBqID0gaXRlci0+Zmlyc3Quc2Vjb25kOwotICAgICAgICBVcGRhdGFibGVUaWxl
KiB0aWxlID0gc3RhdGljX2Nhc3Q8VXBkYXRhYmxlVGlsZSo+KGl0ZXItPnNlY29uZC5nZXQoKSk7
CisgICAgICAgIGludCBpID0gaXRlci0+a2V5LmZpcnN0OworICAgICAgICBpbnQgaiA9IGl0ZXIt
PmtleS5zZWNvbmQ7CisgICAgICAgIFVwZGF0YWJsZVRpbGUqIHRpbGUgPSBzdGF0aWNfY2FzdDxV
cGRhdGFibGVUaWxlKj4oaXRlci0+dmFsdWUuZ2V0KCkpOwogICAgICAgICAvLyBGSVhNRTogVGhp
cyBzaG91bGQgbm90IGV2ZXIgYmUgbnVsbC4KICAgICAgICAgaWYgKCF0aWxlKQogICAgICAgICAg
ICAgY29udGludWU7CkBAIC0yNTcsNyArMjU3LDcgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06
OnNldExheWVyVHJlZUhvc3QoQ0NMYXllclRyZWVIb3N0KiBob3N0KQogewogICAgIGlmIChob3N0
ICYmIGhvc3QgIT0gbGF5ZXJUcmVlSG9zdCgpKSB7CiAgICAgICAgIGZvciAoQ0NMYXllclRpbGlu
Z0RhdGE6OlRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX3RpbGVyLT50aWxlcygpLmJl
Z2luKCk7IGl0ZXIgIT0gbV90aWxlci0+dGlsZXMoKS5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAg
ICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gc3RhdGljX2Nhc3Q8VXBkYXRhYmxlVGlsZSo+KGl0
ZXItPnNlY29uZC5nZXQoKSk7CisgICAgICAgICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gc3Rh
dGljX2Nhc3Q8VXBkYXRhYmxlVGlsZSo+KGl0ZXItPnZhbHVlLmdldCgpKTsKICAgICAgICAgICAg
IC8vIEZJWE1FOiBUaGlzIHNob3VsZCBub3QgZXZlciBiZSBudWxsLgogICAgICAgICAgICAgaWYg
KCF0aWxlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMzI1LDcgKzMyNSw3IEBAIHZv
aWQgVGlsZWRMYXllckNocm9taXVtOjppbnZhbGlkYXRlQ29udGVudFJlY3QoY29uc3QgSW50UmVj
dCYgY29udGVudFJlY3QpCiAgICAgICAgIHJldHVybjsKIAogICAgIGZvciAoQ0NMYXllclRpbGlu
Z0RhdGE6OlRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX3RpbGVyLT50aWxlcygpLmJl
Z2luKCk7IGl0ZXIgIT0gbV90aWxlci0+dGlsZXMoKS5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAg
IFVwZGF0YWJsZVRpbGUqIHRpbGUgPSBzdGF0aWNfY2FzdDxVcGRhdGFibGVUaWxlKj4oaXRlci0+
c2Vjb25kLmdldCgpKTsKKyAgICAgICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHN0YXRpY19jYXN0
PFVwZGF0YWJsZVRpbGUqPihpdGVyLT52YWx1ZS5nZXQoKSk7CiAgICAgICAgIEFTU0VSVCh0aWxl
KTsKICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIG5vdCBldmVyIGJlIG51bGwuCiAgICAg
ICAgIGlmICghdGlsZSkKQEAgLTY1NSw3ICs2NTUsNyBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1
bTo6c2V0VGV4dHVyZVByaW9yaXRpZXMoY29uc3QgQ0NQcmlvcml0eUNhbGN1bGF0b3ImIHByaW9y
aQogCiAgICAgLy8gTm93IHVwZGF0ZSBwcmlvcml0aWVzIG9uIGFsbCB0aWxlcyB3ZSBoYXZlIGlu
IHRoZSBsYXllciwgbm8gbWF0dGVyIHdoZXJlIHRoZXkgYXJlLgogICAgIGZvciAoQ0NMYXllclRp
bGluZ0RhdGE6OlRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX3RpbGVyLT50aWxlcygp
LmJlZ2luKCk7IGl0ZXIgIT0gbV90aWxlci0+dGlsZXMoKS5lbmQoKTsgKytpdGVyKSB7Ci0gICAg
ICAgIFVwZGF0YWJsZVRpbGUqIHRpbGUgPSBzdGF0aWNfY2FzdDxVcGRhdGFibGVUaWxlKj4oaXRl
ci0+c2Vjb25kLmdldCgpKTsKKyAgICAgICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHN0YXRpY19j
YXN0PFVwZGF0YWJsZVRpbGUqPihpdGVyLT52YWx1ZS5nZXQoKSk7CiAgICAgICAgIC8vIEZJWE1F
OiBUaGlzIHNob3VsZCBub3QgZXZlciBiZSBudWxsLgogICAgICAgICBpZiAoIXRpbGUpCiAgICAg
ICAgICAgICBjb250aW51ZTsKQEAgLTY4MCw3ICs2ODAsNyBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJv
bWl1bTo6cmVzZXRVcGRhdGVTdGF0ZSgpCiAKICAgICBDQ0xheWVyVGlsaW5nRGF0YTo6VGlsZU1h
cDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV90aWxlci0+dGlsZXMoKS5lbmQoKTsKICAgICBmb3Ig
KENDTGF5ZXJUaWxpbmdEYXRhOjpUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbV90aWxl
ci0+dGlsZXMoKS5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0gICAgICAgIFVwZGF0
YWJsZVRpbGUqIHRpbGUgPSBzdGF0aWNfY2FzdDxVcGRhdGFibGVUaWxlKj4oaXRlci0+c2Vjb25k
LmdldCgpKTsKKyAgICAgICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHN0YXRpY19jYXN0PFVwZGF0
YWJsZVRpbGUqPihpdGVyLT52YWx1ZS5nZXQoKSk7CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNo
b3VsZCBub3QgZXZlciBiZSBudWxsLgogICAgICAgICBpZiAoIXRpbGUpCiAgICAgICAgICAgICBj
b250aW51ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDRGFtYWdlVHJhY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RhbWFnZVRyYWNrZXIuY3BwCmluZGV4IDExNDQ5OWJhMTdl
ZDRmZjE1ZGUwOGUwY2Q0MGZhMzM2NzFhNjE0ODYuLjc1YTE1NjQ4MWUzZTIxNzc5ZmY5N2U3ZjY0
ZTdkMDk5MjI0OWQ1M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDRGFtYWdlVHJhY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1hZ2VUcmFja2VyLmNwcApAQCAtMjMz
LDcgKzIzMyw3IEBAIEZsb2F0UmVjdCBDQ0RhbWFnZVRyYWNrZXI6OnRyYWNrRGFtYWdlRnJvbUxl
ZnRvdmVyUmVjdHMoKQogICAgIEZsb2F0UmVjdCBkYW1hZ2VSZWN0ID0gRmxvYXRSZWN0KCk7CiAK
ICAgICBmb3IgKFJlY3RNYXA6Oml0ZXJhdG9yIGl0ID0gbV9jdXJyZW50UmVjdEhpc3RvcnktPmJl
Z2luKCk7IGl0ICE9IG1fY3VycmVudFJlY3RIaXN0b3J5LT5lbmQoKTsgKytpdCkKLSAgICAgICAg
ZGFtYWdlUmVjdC51bml0ZShpdC0+c2Vjb25kKTsKKyAgICAgICAgZGFtYWdlUmVjdC51bml0ZShp
dC0+dmFsdWUpOwogCiAgICAgbV9jdXJyZW50UmVjdEhpc3RvcnktPmNsZWFyKCk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGly
ZWN0UmVuZGVyZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NEaXJlY3RSZW5kZXJlci5jcHAKaW5kZXggNmI1Mzc4OWY1NTNlYjVkNTA3MzZkMjdl
N2Q4OGNlNTEyMjU3Y2E1Yi4uOTY0Yzk0NzQ0NmViZjBkYWQyZGM4YzQzYjMyMDI2NzkzZTVjZWQx
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NEaXJlY3RSZW5kZXJlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NEaXJlY3RSZW5kZXJlci5jcHAKQEAgLTExOSwxNSArMTE5LDE1
IEBAIHZvaWQgQ0NEaXJlY3RSZW5kZXJlcjo6ZGVjaWRlUmVuZGVyUGFzc0FsbG9jYXRpb25zRm9y
RnJhbWUoY29uc3QgQ0NSZW5kZXJQYXNzTGlzCiAgICAgVmVjdG9yPENDUmVuZGVyUGFzczo6SWQ+
IHBhc3Nlc1RvRGVsZXRlOwogICAgIEhhc2hNYXA8Q0NSZW5kZXJQYXNzOjpJZCwgT3duUHRyPENh
Y2hlZFRleHR1cmU+ID46OmNvbnN0X2l0ZXJhdG9yIHBhc3NJdGVyYXRvcjsKICAgICBmb3IgKHBh
c3NJdGVyYXRvciA9IG1fcmVuZGVyUGFzc1RleHR1cmVzLmJlZ2luKCk7IHBhc3NJdGVyYXRvciAh
PSBtX3JlbmRlclBhc3NUZXh0dXJlcy5lbmQoKTsgKytwYXNzSXRlcmF0b3IpIHsKLSAgICAgICAg
Y29uc3QgQ0NSZW5kZXJQYXNzKiByZW5kZXJQYXNzSW5GcmFtZSA9IHJlbmRlclBhc3Nlc0luRnJh
bWUuZ2V0KHBhc3NJdGVyYXRvci0+Zmlyc3QpOworICAgICAgICBjb25zdCBDQ1JlbmRlclBhc3Mq
IHJlbmRlclBhc3NJbkZyYW1lID0gcmVuZGVyUGFzc2VzSW5GcmFtZS5nZXQocGFzc0l0ZXJhdG9y
LT5rZXkpOwogICAgICAgICBpZiAoIXJlbmRlclBhc3NJbkZyYW1lKSB7Ci0gICAgICAgICAgICBw
YXNzZXNUb0RlbGV0ZS5hcHBlbmQocGFzc0l0ZXJhdG9yLT5maXJzdCk7CisgICAgICAgICAgICBw
YXNzZXNUb0RlbGV0ZS5hcHBlbmQocGFzc0l0ZXJhdG9yLT5rZXkpOwogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIH0KIAogICAgICAgICBjb25zdCBJbnRTaXplJiByZXF1aXJlZFNpemUg
PSByZW5kZXJQYXNzVGV4dHVyZVNpemUocmVuZGVyUGFzc0luRnJhbWUpOwogICAgICAgICBHQzNE
ZW51bSByZXF1aXJlZEZvcm1hdCA9IHJlbmRlclBhc3NUZXh0dXJlRm9ybWF0KHJlbmRlclBhc3NJ
bkZyYW1lKTsKLSAgICAgICAgQ2FjaGVkVGV4dHVyZSogdGV4dHVyZSA9IHBhc3NJdGVyYXRvci0+
c2Vjb25kLmdldCgpOworICAgICAgICBDYWNoZWRUZXh0dXJlKiB0ZXh0dXJlID0gcGFzc0l0ZXJh
dG9yLT52YWx1ZS5nZXQoKTsKICAgICAgICAgQVNTRVJUKHRleHR1cmUpOwogCiAgICAgICAgIGlm
ICh0ZXh0dXJlLT5pZCgpICYmICh0ZXh0dXJlLT5zaXplKCkgIT0gcmVxdWlyZWRTaXplIHx8IHRl
eHR1cmUtPmZvcm1hdCgpICE9IHJlcXVpcmVkRm9ybWF0KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUaWxpbmdEYXRhLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
aWxpbmdEYXRhLmNwcAppbmRleCA5YjU1MTU2ZDk1YmEzNDMzZmY2YzE2YzZlYjU1MDlhYjcxMDI5
ZDE5Li5hODFlMDZjMDUwOTJiMTNmOWE2YmYwMDQ2OTI1ZGYzZDU0YTI3ZjNmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVGls
aW5nRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRpbGluZ0RhdGEuY3BwCkBAIC0xNTMsOCArMTUzLDggQEAgdm9pZCBDQ0xh
eWVyVGlsaW5nRGF0YTo6c2V0Qm91bmRzKGNvbnN0IEludFNpemUmIHNpemUpCiAgICAgY29udGVu
dFJlY3RUb1RpbGVJbmRpY2VzKEludFJlY3QoSW50UG9pbnQoKSwgc2l6ZSksIGxlZnQsIHRvcCwg
cmlnaHQsIGJvdHRvbSk7CiAgICAgVmVjdG9yPFRpbGVNYXBLZXk+IGludmFsaWRUaWxlS2V5czsK
ICAgICBmb3IgKFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpOyBp
dCAhPSBtX3RpbGVzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+Zmlyc3QuZmlyc3Qg
PiByaWdodCB8fCBpdC0+Zmlyc3Quc2Vjb25kID4gYm90dG9tKQotICAgICAgICAgICAgaW52YWxp
ZFRpbGVLZXlzLmFwcGVuZChpdC0+Zmlyc3QpOworICAgICAgICBpZiAoaXQtPmtleS5maXJzdCA+
IHJpZ2h0IHx8IGl0LT5rZXkuc2Vjb25kID4gYm90dG9tKQorICAgICAgICAgICAgaW52YWxpZFRp
bGVLZXlzLmFwcGVuZChpdC0+a2V5KTsKICAgICB9CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBpbnZhbGlkVGlsZUtleXMuc2l6ZSgpOyArK2kpCiAgICAgICAgIG1fdGlsZXMucmVtb3ZlKGlu
dmFsaWRUaWxlS2V5c1tpXSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAppbmRleCA5
ZmVkNDc5ZjdkNTk2MTU3MTcyZTQyNWZlMzMzNmE4MWU4OWU2NmY3Li4zNDU0N2UxMzIwODUyMmNl
M2E2MzkzNTdhOTFmNmU1M2QzMjU5Y2ZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5j
cHAKQEAgLTExOSw3ICsxMTksNyBAQCBDQ0xheWVyVHJlZUhvc3Q6On5DQ0xheWVyVHJlZUhvc3Qo
KQogICAgIG51bUxheWVyVHJlZUluc3RhbmNlcy0tOwogICAgIFJhdGVMaW1pdGVyTWFwOjppdGVy
YXRvciBpdCA9IG1fcmF0ZUxpbWl0ZXJzLmJlZ2luKCk7CiAgICAgaWYgKGl0ICE9IG1fcmF0ZUxp
bWl0ZXJzLmVuZCgpKQotICAgICAgICBpdC0+c2Vjb25kLT5zdG9wKCk7CisgICAgICAgIGl0LT52
YWx1ZS0+c3RvcCgpOwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c2V0U3VyZmFjZVJlYWR5
KCkKQEAgLTcyMCw3ICs3MjAsNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c3RhcnRSYXRlTGlt
aXRlcihXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQogICAgIEFTU0VSVChj
b250ZXh0KTsKICAgICBSYXRlTGltaXRlck1hcDo6aXRlcmF0b3IgaXQgPSBtX3JhdGVMaW1pdGVy
cy5maW5kKGNvbnRleHQpOwogICAgIGlmIChpdCAhPSBtX3JhdGVMaW1pdGVycy5lbmQoKSkKLSAg
ICAgICAgaXQtPnNlY29uZC0+c3RhcnQoKTsKKyAgICAgICAgaXQtPnZhbHVlLT5zdGFydCgpOwog
ICAgIGVsc2UgewogICAgICAgICBSZWZQdHI8UmF0ZUxpbWl0ZXI+IHJhdGVMaW1pdGVyID0gUmF0
ZUxpbWl0ZXI6OmNyZWF0ZShjb250ZXh0LCB0aGlzKTsKICAgICAgICAgbV9yYXRlTGltaXRlcnMu
c2V0KGNvbnRleHQsIHJhdGVMaW1pdGVyKTsKQEAgLTczMiw3ICs3MzIsNyBAQCB2b2lkIENDTGF5
ZXJUcmVlSG9zdDo6c3RvcFJhdGVMaW1pdGVyKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0Qq
IGNvbnRleHQpCiB7CiAgICAgUmF0ZUxpbWl0ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yYXRlTGlt
aXRlcnMuZmluZChjb250ZXh0KTsKICAgICBpZiAoaXQgIT0gbV9yYXRlTGltaXRlcnMuZW5kKCkp
IHsKLSAgICAgICAgaXQtPnNlY29uZC0+c3RvcCgpOworICAgICAgICBpdC0+dmFsdWUtPnN0b3Ao
KTsKICAgICAgICAgbV9yYXRlTGltaXRlcnMucmVtb3ZlKGl0KTsKICAgICB9CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3RJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCmluZGV4IGNjOTI4MDRjMjI1MTY5OWE2NTcw
YTY0ZTI2MGUzMTk3MGJmOGY2MzMuLjMyYWMwZDFiMzFiMzkzZGU0ZDY2ZGNmNGI1MmNhZWZlYjNk
ZTA2MWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCkBAIC00MDYs
NyArNDA2LDcgQEAgc3RhdGljIGlubGluZSBDQ1JlbmRlclBhc3MqIGZpbmRSZW5kZXJQYXNzQnlJ
ZChDQ1JlbmRlclBhc3M6OklkIHJlbmRlclBhc3NJZCwgY28KIHsKICAgICBDQ1JlbmRlclBhc3NJ
ZEhhc2hNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZnJhbWUucmVuZGVyUGFzc2VzQnlJZC5maW5k
KHJlbmRlclBhc3NJZCk7CiAgICAgQVNTRVJUKGl0ICE9IGZyYW1lLnJlbmRlclBhc3Nlc0J5SWQu
ZW5kKCkpOwotICAgIHJldHVybiBpdC0+c2Vjb25kLmdldCgpOworICAgIHJldHVybiBpdC0+dmFs
dWUuZ2V0KCk7CiB9CiAKIHN0YXRpYyB2b2lkIHJlbW92ZVJlbmRlclBhc3Nlc1JlY3Vyc2l2ZShD
Q1JlbmRlclBhc3M6OklkIHJlbW92ZVJlbmRlclBhc3NJZCwgQ0NMYXllclRyZWVIb3N0SW1wbDo6
RnJhbWVEYXRhJiBmcmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDUmVzb3VyY2VQcm92aWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Jlc291cmNlUHJvdmlkZXIuY3BwCmlu
ZGV4IGZjM2JmZTdlMTVmMGE3YmIwM2FmNTdkZTU2OGJmYWNkNmE5NDUxODguLjAzMDAwOTlmYmU1
ODc3MTM2NDZmOWIyNmYzMjc0MDE5MjY3Y2FlOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVzb3VyY2VQcm92aWRlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZXNvdXJj
ZVByb3ZpZGVyLmNwcApAQCAtODQsNyArODQsNyBAQCBib29sIENDUmVzb3VyY2VQcm92aWRlcjo6
aW5Vc2VCeUNvbnN1bWVyKFJlc291cmNlSWQgaWQpCiAgICAgQVNTRVJUKENDUHJveHk6OmlzSW1w
bFRocmVhZCgpKTsKICAgICBSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5m
aW5kKGlkKTsKICAgICBBU1NFUlQoaXQgIT0gbV9yZXNvdXJjZXMuZW5kKCkpOwotICAgIHJldHVy
biAhIWl0LT5zZWNvbmQubG9ja0ZvclJlYWRDb3VudCB8fCBpdC0+c2Vjb25kLmV4cG9ydGVkOwor
ICAgIHJldHVybiAhIWl0LT52YWx1ZS5sb2NrRm9yUmVhZENvdW50IHx8IGl0LT52YWx1ZS5leHBv
cnRlZDsKIH0KIAogQ0NSZXNvdXJjZVByb3ZpZGVyOjpSZXNvdXJjZUlkIENDUmVzb3VyY2VQcm92
aWRlcjo6Y3JlYXRlUmVzb3VyY2UoaW50IHBvb2wsIGNvbnN0IEludFNpemUmIHNpemUsIEdDM0Rl
bnVtIGZvcm1hdCwgVGV4dHVyZVVzYWdlSGludCBoaW50KQpAQCAtMTU1LDE2ICsxNTUsMTYgQEAg
dm9pZCBDQ1Jlc291cmNlUHJvdmlkZXI6OmRlbGV0ZVJlc291cmNlKFJlc291cmNlSWQgaWQpCiAg
ICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKICAgICBSZXNvdXJjZU1hcDo6aXRl
cmF0b3IgaXQgPSBtX3Jlc291cmNlcy5maW5kKGlkKTsKICAgICBBU1NFUlQoaXQgIT0gbV9yZXNv
dXJjZXMuZW5kKCkpOwotICAgIEFTU0VSVCghaXQtPnNlY29uZC5sb2NrZWRGb3JXcml0ZSk7Ci0g
ICAgQVNTRVJUKCFpdC0+c2Vjb25kLmxvY2tGb3JSZWFkQ291bnQpOworICAgIEFTU0VSVCghaXQt
PnZhbHVlLmxvY2tlZEZvcldyaXRlKTsKKyAgICBBU1NFUlQoIWl0LT52YWx1ZS5sb2NrRm9yUmVh
ZENvdW50KTsKIAotICAgIGlmIChpdC0+c2Vjb25kLmdsSWQgJiYgIWl0LT5zZWNvbmQuZXh0ZXJu
YWwpIHsKKyAgICBpZiAoaXQtPnZhbHVlLmdsSWQgJiYgIWl0LT52YWx1ZS5leHRlcm5hbCkgewog
ICAgICAgICBXZWJHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNkID0gbV9jb250ZXh0LT5jb250
ZXh0M0QoKTsKICAgICAgICAgQVNTRVJUKGNvbnRleHQzZCk7Ci0gICAgICAgIEdMQyhjb250ZXh0
M2QsIGNvbnRleHQzZC0+ZGVsZXRlVGV4dHVyZShpdC0+c2Vjb25kLmdsSWQpKTsKKyAgICAgICAg
R0xDKGNvbnRleHQzZCwgY29udGV4dDNkLT5kZWxldGVUZXh0dXJlKGl0LT52YWx1ZS5nbElkKSk7
CiAgICAgfQotICAgIGlmIChpdC0+c2Vjb25kLnBpeGVscykKLSAgICAgICAgZGVsZXRlIGl0LT5z
ZWNvbmQucGl4ZWxzOworICAgIGlmIChpdC0+dmFsdWUucGl4ZWxzKQorICAgICAgICBkZWxldGUg
aXQtPnZhbHVlLnBpeGVsczsKIAogICAgIG1fcmVzb3VyY2VzLnJlbW92ZShpdCk7CiB9CkBAIC0x
NzQsOCArMTc0LDggQEAgdm9pZCBDQ1Jlc291cmNlUHJvdmlkZXI6OmRlbGV0ZU93bmVkUmVzb3Vy
Y2VzKGludCBwb29sKQogICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CiAgICAg
UmVzb3VyY2VJZEFycmF5IHRvRGVsZXRlOwogICAgIGZvciAoUmVzb3VyY2VNYXA6Oml0ZXJhdG9y
IGl0ID0gbV9yZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gbV9yZXNvdXJjZXMuZW5kKCk7ICsraXQp
IHsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQucG9vbCA9PSBwb29sICYmICFpdC0+c2Vjb25kLmV4
dGVybmFsKQotICAgICAgICAgICAgdG9EZWxldGUuYXBwZW5kKGl0LT5maXJzdCk7CisgICAgICAg
IGlmIChpdC0+dmFsdWUucG9vbCA9PSBwb29sICYmICFpdC0+dmFsdWUuZXh0ZXJuYWwpCisgICAg
ICAgICAgICB0b0RlbGV0ZS5hcHBlbmQoaXQtPmtleSk7CiAgICAgfQogICAgIGZvciAoUmVzb3Vy
Y2VJZEFycmF5OjppdGVyYXRvciBpdCA9IHRvRGVsZXRlLmJlZ2luKCk7IGl0ICE9IHRvRGVsZXRl
LmVuZCgpOyArK2l0KQogICAgICAgICBkZWxldGVSZXNvdXJjZSgqaXQpOwpAQCAtMTg1LDcgKzE4
NSw3IEBAIENDUmVzb3VyY2VQcm92aWRlcjo6UmVzb3VyY2VUeXBlIENDUmVzb3VyY2VQcm92aWRl
cjo6cmVzb3VyY2VUeXBlKFJlc291cmNlSWQgaWQpCiB7CiAgICAgUmVzb3VyY2VNYXA6Oml0ZXJh
dG9yIGl0ID0gbV9yZXNvdXJjZXMuZmluZChpZCk7CiAgICAgQVNTRVJUKGl0ICE9IG1fcmVzb3Vy
Y2VzLmVuZCgpKTsKLSAgICByZXR1cm4gaXQtPnNlY29uZC50eXBlOworICAgIHJldHVybiBpdC0+
dmFsdWUudHlwZTsKIH0KIAogdm9pZCBDQ1Jlc291cmNlUHJvdmlkZXI6OnVwbG9hZChSZXNvdXJj
ZUlkIGlkLCBjb25zdCB1aW50OF90KiBpbWFnZSwgY29uc3QgSW50UmVjdCYgaW1hZ2VSZWN0LCBj
b25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRTaXplJiBkZXN0T2Zmc2V0KQpAQCAt
MTkzLDE5ICsxOTMsMTkgQEAgdm9pZCBDQ1Jlc291cmNlUHJvdmlkZXI6OnVwbG9hZChSZXNvdXJj
ZUlkIGlkLCBjb25zdCB1aW50OF90KiBpbWFnZSwgY29uc3QgSW50UmUKICAgICBBU1NFUlQoQ0NQ
cm94eTo6aXNJbXBsVGhyZWFkKCkpOwogICAgIFJlc291cmNlTWFwOjppdGVyYXRvciBpdCA9IG1f
cmVzb3VyY2VzLmZpbmQoaWQpOwogICAgIEFTU0VSVChpdCAhPSBtX3Jlc291cmNlcy5lbmQoKSk7
Ci0gICAgQVNTRVJUKCFpdC0+c2Vjb25kLmxvY2tlZEZvcldyaXRlKTsKLSAgICBBU1NFUlQoIWl0
LT5zZWNvbmQubG9ja0ZvclJlYWRDb3VudCk7Ci0gICAgQVNTRVJUKCFpdC0+c2Vjb25kLmV4dGVy
bmFsKTsKKyAgICBBU1NFUlQoIWl0LT52YWx1ZS5sb2NrZWRGb3JXcml0ZSk7CisgICAgQVNTRVJU
KCFpdC0+dmFsdWUubG9ja0ZvclJlYWRDb3VudCk7CisgICAgQVNTRVJUKCFpdC0+dmFsdWUuZXh0
ZXJuYWwpOwogCi0gICAgaWYgKGl0LT5zZWNvbmQuZ2xJZCkgeworICAgIGlmIChpdC0+dmFsdWUu
Z2xJZCkgewogICAgICAgICBXZWJHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNkID0gbV9jb250
ZXh0LT5jb250ZXh0M0QoKTsKICAgICAgICAgQVNTRVJUKGNvbnRleHQzZCk7CiAgICAgICAgIEFT
U0VSVChtX3RleFN1YkltYWdlLmdldCgpKTsKLSAgICAgICAgY29udGV4dDNkLT5iaW5kVGV4dHVy
ZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgaXQtPnNlY29uZC5nbElkKTsKLSAgICAg
ICAgbV90ZXhTdWJJbWFnZS0+dXBsb2FkKGltYWdlLCBpbWFnZVJlY3QsIHNvdXJjZVJlY3QsIGRl
c3RPZmZzZXQsIGl0LT5zZWNvbmQuZm9ybWF0LCBjb250ZXh0M2QpOworICAgICAgICBjb250ZXh0
M2QtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBpdC0+dmFsdWUu
Z2xJZCk7CisgICAgICAgIG1fdGV4U3ViSW1hZ2UtPnVwbG9hZChpbWFnZSwgaW1hZ2VSZWN0LCBz
b3VyY2VSZWN0LCBkZXN0T2Zmc2V0LCBpdC0+dmFsdWUuZm9ybWF0LCBjb250ZXh0M2QpOwogICAg
IH0KIAotICAgIGlmIChpdC0+c2Vjb25kLnBpeGVscykgeworICAgIGlmIChpdC0+dmFsdWUucGl4
ZWxzKSB7CiAgICAgICAgIFNrQml0bWFwIHNyY0Z1bGw7CiAgICAgICAgIHNyY0Z1bGwuc2V0Q29u
ZmlnKFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZywgaW1hZ2VSZWN0LndpZHRoKCksIGltYWdl
UmVjdC5oZWlnaHQoKSk7CiAgICAgICAgIHNyY0Z1bGwuc2V0UGl4ZWxzKGNvbnN0X2Nhc3Q8dWlu
dDhfdCo+KGltYWdlKSk7CkBAIC0yNDQsOSArMjQ0LDkgQEAgY29uc3QgQ0NSZXNvdXJjZVByb3Zp
ZGVyOjpSZXNvdXJjZSogQ0NSZXNvdXJjZVByb3ZpZGVyOjpsb2NrRm9yUmVhZChSZXNvdXJjZUlk
IGkKICAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwogICAgIFJlc291cmNlTWFw
OjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmZpbmQoaWQpOwogICAgIEFTU0VSVChpdCAhPSBt
X3Jlc291cmNlcy5lbmQoKSk7Ci0gICAgQVNTRVJUKCFpdC0+c2Vjb25kLmxvY2tlZEZvcldyaXRl
KTsKLSAgICBpdC0+c2Vjb25kLmxvY2tGb3JSZWFkQ291bnQrKzsKLSAgICByZXR1cm4gJml0LT5z
ZWNvbmQ7CisgICAgQVNTRVJUKCFpdC0+dmFsdWUubG9ja2VkRm9yV3JpdGUpOworICAgIGl0LT52
YWx1ZS5sb2NrRm9yUmVhZENvdW50Kys7CisgICAgcmV0dXJuICZpdC0+dmFsdWU7CiB9CiAKIHZv
aWQgQ0NSZXNvdXJjZVByb3ZpZGVyOjp1bmxvY2tGb3JSZWFkKFJlc291cmNlSWQgaWQpCkBAIC0y
NTQsOCArMjU0LDggQEAgdm9pZCBDQ1Jlc291cmNlUHJvdmlkZXI6OnVubG9ja0ZvclJlYWQoUmVz
b3VyY2VJZCBpZCkKICAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwogICAgIFJl
c291cmNlTWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmZpbmQoaWQpOwogICAgIEFTU0VS
VChpdCAhPSBtX3Jlc291cmNlcy5lbmQoKSk7Ci0gICAgQVNTRVJUKGl0LT5zZWNvbmQubG9ja0Zv
clJlYWRDb3VudCA+IDApOwotICAgIGl0LT5zZWNvbmQubG9ja0ZvclJlYWRDb3VudC0tOworICAg
IEFTU0VSVChpdC0+dmFsdWUubG9ja0ZvclJlYWRDb3VudCA+IDApOworICAgIGl0LT52YWx1ZS5s
b2NrRm9yUmVhZENvdW50LS07CiB9CiAKIGNvbnN0IENDUmVzb3VyY2VQcm92aWRlcjo6UmVzb3Vy
Y2UqIENDUmVzb3VyY2VQcm92aWRlcjo6bG9ja0ZvcldyaXRlKFJlc291cmNlSWQgaWQpCkBAIC0y
NjMsMTEgKzI2MywxMSBAQCBjb25zdCBDQ1Jlc291cmNlUHJvdmlkZXI6OlJlc291cmNlKiBDQ1Jl
c291cmNlUHJvdmlkZXI6OmxvY2tGb3JXcml0ZShSZXNvdXJjZUlkCiAgICAgQVNTRVJUKENDUHJv
eHk6OmlzSW1wbFRocmVhZCgpKTsKICAgICBSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3Jl
c291cmNlcy5maW5kKGlkKTsKICAgICBBU1NFUlQoaXQgIT0gbV9yZXNvdXJjZXMuZW5kKCkpOwot
ICAgIEFTU0VSVCghaXQtPnNlY29uZC5sb2NrZWRGb3JXcml0ZSk7Ci0gICAgQVNTRVJUKCFpdC0+
c2Vjb25kLmxvY2tGb3JSZWFkQ291bnQpOwotICAgIEFTU0VSVCghaXQtPnNlY29uZC5leHRlcm5h
bCk7Ci0gICAgaXQtPnNlY29uZC5sb2NrZWRGb3JXcml0ZSA9IHRydWU7Ci0gICAgcmV0dXJuICZp
dC0+c2Vjb25kOworICAgIEFTU0VSVCghaXQtPnZhbHVlLmxvY2tlZEZvcldyaXRlKTsKKyAgICBB
U1NFUlQoIWl0LT52YWx1ZS5sb2NrRm9yUmVhZENvdW50KTsKKyAgICBBU1NFUlQoIWl0LT52YWx1
ZS5leHRlcm5hbCk7CisgICAgaXQtPnZhbHVlLmxvY2tlZEZvcldyaXRlID0gdHJ1ZTsKKyAgICBy
ZXR1cm4gJml0LT52YWx1ZTsKIH0KIAogdm9pZCBDQ1Jlc291cmNlUHJvdmlkZXI6OnVubG9ja0Zv
cldyaXRlKFJlc291cmNlSWQgaWQpCkBAIC0yNzUsOSArMjc1LDkgQEAgdm9pZCBDQ1Jlc291cmNl
UHJvdmlkZXI6OnVubG9ja0ZvcldyaXRlKFJlc291cmNlSWQgaWQpCiAgICAgQVNTRVJUKENDUHJv
eHk6OmlzSW1wbFRocmVhZCgpKTsKICAgICBSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3Jl
c291cmNlcy5maW5kKGlkKTsKICAgICBBU1NFUlQoaXQgIT0gbV9yZXNvdXJjZXMuZW5kKCkpOwot
ICAgIEFTU0VSVChpdC0+c2Vjb25kLmxvY2tlZEZvcldyaXRlKTsKLSAgICBBU1NFUlQoIWl0LT5z
ZWNvbmQuZXh0ZXJuYWwpOwotICAgIGl0LT5zZWNvbmQubG9ja2VkRm9yV3JpdGUgPSBmYWxzZTsK
KyAgICBBU1NFUlQoaXQtPnZhbHVlLmxvY2tlZEZvcldyaXRlKTsKKyAgICBBU1NFUlQoIWl0LT52
YWx1ZS5leHRlcm5hbCk7CisgICAgaXQtPnZhbHVlLmxvY2tlZEZvcldyaXRlID0gZmFsc2U7CiB9
CiAKIENDUmVzb3VyY2VQcm92aWRlcjo6U2NvcGVkUmVhZExvY2tHTDo6U2NvcGVkUmVhZExvY2tH
TChDQ1Jlc291cmNlUHJvdmlkZXIqIHJlc291cmNlUHJvdmlkZXIsIENDUmVzb3VyY2VQcm92aWRl
cjo6UmVzb3VyY2VJZCByZXNvdXJjZUlkKQpAQCAtNDAwLDcgKzQwMCw3IEBAIHZvaWQgQ0NSZXNv
dXJjZVByb3ZpZGVyOjpkZXN0cm95Q2hpbGQoaW50IGNoaWxkKQogICAgIEFTU0VSVChDQ1Byb3h5
Ojppc0ltcGxUaHJlYWQoKSk7CiAgICAgQ2hpbGRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9jaGlsZHJl
bi5maW5kKGNoaWxkKTsKICAgICBBU1NFUlQoaXQgIT0gbV9jaGlsZHJlbi5lbmQoKSk7Ci0gICAg
ZGVsZXRlT3duZWRSZXNvdXJjZXMoaXQtPnNlY29uZC5wb29sKTsKKyAgICBkZWxldGVPd25lZFJl
c291cmNlcyhpdC0+dmFsdWUucG9vbCk7CiAgICAgbV9jaGlsZHJlbi5yZW1vdmUoaXQpOwogICAg
IHRyaW1NYWlsYm94RGVxdWUoKTsKIH0KQEAgLTQxMCw3ICs0MTAsNyBAQCBjb25zdCBDQ1Jlc291
cmNlUHJvdmlkZXI6OlJlc291cmNlSWRNYXAmIENDUmVzb3VyY2VQcm92aWRlcjo6Z2V0Q2hpbGRU
b1BhcmVudE1hcAogICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CiAgICAgQ2hp
bGRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9jaGlsZHJlbi5maW5kKGNoaWxkKTsKICAgICBB
U1NFUlQoaXQgIT0gbV9jaGlsZHJlbi5lbmQoKSk7Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQuY2hp
bGRUb1BhcmVudE1hcDsKKyAgICByZXR1cm4gaXQtPnZhbHVlLmNoaWxkVG9QYXJlbnRNYXA7CiB9
CiAKIENDUmVzb3VyY2VQcm92aWRlcjo6VHJhbnNmZXJhYmxlUmVzb3VyY2VMaXN0IENDUmVzb3Vy
Y2VQcm92aWRlcjo6cHJlcGFyZVNlbmRUb1BhcmVudChjb25zdCBSZXNvdXJjZUlkQXJyYXkmIHJl
c291cmNlcykKQEAgLTQyNiw3ICs0MjYsNyBAQCBDQ1Jlc291cmNlUHJvdmlkZXI6OlRyYW5zZmVy
YWJsZVJlc291cmNlTGlzdCBDQ1Jlc291cmNlUHJvdmlkZXI6OnByZXBhcmVTZW5kVG9QYQogICAg
IGZvciAoUmVzb3VyY2VJZEFycmF5Ojpjb25zdF9pdGVyYXRvciBpdCA9IHJlc291cmNlcy5iZWdp
bigpOyBpdCAhPSByZXNvdXJjZXMuZW5kKCk7ICsraXQpIHsKICAgICAgICAgVHJhbnNmZXJhYmxl
UmVzb3VyY2UgcmVzb3VyY2U7CiAgICAgICAgIGlmICh0cmFuc2ZlclJlc291cmNlKGNvbnRleHQz
ZCwgKml0LCAmcmVzb3VyY2UpKSB7Ci0gICAgICAgICAgICBtX3Jlc291cmNlcy5maW5kKCppdCkt
PnNlY29uZC5leHBvcnRlZCA9IHRydWU7CisgICAgICAgICAgICBtX3Jlc291cmNlcy5maW5kKCpp
dCktPnZhbHVlLmV4cG9ydGVkID0gdHJ1ZTsKICAgICAgICAgICAgIGxpc3QucmVzb3VyY2VzLmFw
cGVuZChyZXNvdXJjZSk7CiAgICAgICAgIH0KICAgICB9CkBAIC00NDUsNyArNDQ1LDcgQEAgQ0NS
ZXNvdXJjZVByb3ZpZGVyOjpUcmFuc2ZlcmFibGVSZXNvdXJjZUxpc3QgQ0NSZXNvdXJjZVByb3Zp
ZGVyOjpwcmVwYXJlU2VuZFRvQ2gKICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIHBh
dGggZm9yIHNvZnR3YXJlIGNvbXBvc2l0aW5nLgogICAgICAgICByZXR1cm4gbGlzdDsKICAgICB9
Ci0gICAgQ2hpbGQmIGNoaWxkSW5mbyA9IG1fY2hpbGRyZW4uZmluZChjaGlsZCktPnNlY29uZDsK
KyAgICBDaGlsZCYgY2hpbGRJbmZvID0gbV9jaGlsZHJlbi5maW5kKGNoaWxkKS0+dmFsdWU7CiAg
ICAgZm9yIChSZXNvdXJjZUlkQXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcmVzb3VyY2VzLmJl
Z2luKCk7IGl0ICE9IHJlc291cmNlcy5lbmQoKTsgKytpdCkgewogICAgICAgICBUcmFuc2ZlcmFi
bGVSZXNvdXJjZSByZXNvdXJjZTsKICAgICAgICAgaWYgKCF0cmFuc2ZlclJlc291cmNlKGNvbnRl
eHQzZCwgKml0LCAmcmVzb3VyY2UpKQpAQCAtNDc4LDcgKzQ3OCw3IEBAIHZvaWQgQ0NSZXNvdXJj
ZVByb3ZpZGVyOjpyZWNlaXZlRnJvbUNoaWxkKGludCBjaGlsZCwgY29uc3QgVHJhbnNmZXJhYmxl
UmVzb3VyY2VMCiAgICAgICAgIC8vIChhbmQgaXMgc2ltcGxlcikgdG8gd2FpdC4KICAgICAgICAg
R0xDKGNvbnRleHQzZCwgY29udGV4dDNkLT53YWl0U3luY1BvaW50KHJlc291cmNlcy5zeW5jUG9p
bnQpKTsKICAgICB9Ci0gICAgQ2hpbGQmIGNoaWxkSW5mbyA9IG1fY2hpbGRyZW4uZmluZChjaGls
ZCktPnNlY29uZDsKKyAgICBDaGlsZCYgY2hpbGRJbmZvID0gbV9jaGlsZHJlbi5maW5kKGNoaWxk
KS0+dmFsdWU7CiAgICAgZm9yIChWZWN0b3I8VHJhbnNmZXJhYmxlUmVzb3VyY2U+Ojpjb25zdF9p
dGVyYXRvciBpdCA9IHJlc291cmNlcy5yZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gcmVzb3VyY2Vz
LnJlc291cmNlcy5lbmQoKTsgKytpdCkgewogICAgICAgICB1bnNpZ25lZCB0ZXh0dXJlSWQ7CiAg
ICAgICAgIEdMQyhjb250ZXh0M2QsIHRleHR1cmVJZCA9IGNvbnRleHQzZC0+Y3JlYXRlVGV4dHVy
ZSgpKTsKQEAgLTUwNCw3ICs1MDQsNyBAQCB2b2lkIENDUmVzb3VyY2VQcm92aWRlcjo6cmVjZWl2
ZUZyb21QYXJlbnQoY29uc3QgVHJhbnNmZXJhYmxlUmVzb3VyY2VMaXN0JiByZXNvdQogICAgIGlm
IChyZXNvdXJjZXMuc3luY1BvaW50KQogICAgICAgICBHTEMoY29udGV4dDNkLCBjb250ZXh0M2Qt
PndhaXRTeW5jUG9pbnQocmVzb3VyY2VzLnN5bmNQb2ludCkpOwogICAgIGZvciAoVmVjdG9yPFRy
YW5zZmVyYWJsZVJlc291cmNlPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSByZXNvdXJjZXMucmVzb3Vy
Y2VzLmJlZ2luKCk7IGl0ICE9IHJlc291cmNlcy5yZXNvdXJjZXMuZW5kKCk7ICsraXQpIHsKLSAg
ICAgICAgUmVzb3VyY2UmIHJlc291cmNlID0gbV9yZXNvdXJjZXMuZmluZChpdC0+aWQpLT5zZWNv
bmQ7CisgICAgICAgIFJlc291cmNlJiByZXNvdXJjZSA9IG1fcmVzb3VyY2VzLmZpbmQoaXQtPmlk
KS0+dmFsdWU7CiAgICAgICAgIEFTU0VSVChyZXNvdXJjZS5leHBvcnRlZCk7CiAgICAgICAgIHJl
c291cmNlLmV4cG9ydGVkID0gZmFsc2U7CiAgICAgICAgIEdMQyhjb250ZXh0M2QsIGNvbnRleHQz
ZC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHJlc291cmNlLmds
SWQpKTsKQEAgLTUxOCwxOSArNTE4LDE5IEBAIGJvb2wgQ0NSZXNvdXJjZVByb3ZpZGVyOjp0cmFu
c2ZlclJlc291cmNlKFdlYkdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBSZXNvdXJjCiAgICAg
QVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKICAgICBSZXNvdXJjZU1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5maW5kKGlkKTsKICAgICBBU1NFUlQoaXQgIT0gbV9y
ZXNvdXJjZXMuZW5kKCkpOwotICAgIEFTU0VSVCghaXQtPnNlY29uZC5sb2NrZWRGb3JXcml0ZSk7
Ci0gICAgQVNTRVJUKCFpdC0+c2Vjb25kLmxvY2tGb3JSZWFkQ291bnQpOwotICAgIEFTU0VSVCgh
aXQtPnNlY29uZC5leHRlcm5hbCk7Ci0gICAgaWYgKGl0LT5zZWNvbmQuZXhwb3J0ZWQpCisgICAg
QVNTRVJUKCFpdC0+dmFsdWUubG9ja2VkRm9yV3JpdGUpOworICAgIEFTU0VSVCghaXQtPnZhbHVl
LmxvY2tGb3JSZWFkQ291bnQpOworICAgIEFTU0VSVCghaXQtPnZhbHVlLmV4dGVybmFsKTsKKyAg
ICBpZiAoaXQtPnZhbHVlLmV4cG9ydGVkKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmVz
b3VyY2UtPmlkID0gaWQ7Ci0gICAgcmVzb3VyY2UtPmZvcm1hdCA9IGl0LT5zZWNvbmQuZm9ybWF0
OwotICAgIHJlc291cmNlLT5zaXplID0gaXQtPnNlY29uZC5zaXplOworICAgIHJlc291cmNlLT5m
b3JtYXQgPSBpdC0+dmFsdWUuZm9ybWF0OworICAgIHJlc291cmNlLT5zaXplID0gaXQtPnZhbHVl
LnNpemU7CiAgICAgaWYgKCFtX21haWxib3hlcy5pc0VtcHR5KCkpCiAgICAgICAgIHJlc291cmNl
LT5tYWlsYm94ID0gbV9tYWlsYm94ZXMudGFrZUZpcnN0KCk7CiAgICAgZWxzZQogICAgICAgICBH
TEMoY29udGV4dCwgY29udGV4dC0+Z2VuTWFpbGJveENIUk9NSVVNKHJlc291cmNlLT5tYWlsYm94
Lm5hbWUpKTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfMkQsIGl0LT5zZWNvbmQuZ2xJZCkpOworICAgIEdMQyhjb250ZXh0
LCBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgaXQt
PnZhbHVlLmdsSWQpKTsKICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+cHJvZHVjZVRleHR1cmVD
SFJPTUlVTShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgcmVzb3VyY2UtPm1haWxib3gu
bmFtZSkpOwogICAgIHJldHVybiB0cnVlOwogfQpAQCAtNTQ1LDE1ICs1NDUsMTUgQEAgdm9pZCBD
Q1Jlc291cmNlUHJvdmlkZXI6OnRyaW1NYWlsYm94RGVxdWUoKQogICAgIHNpemVfdCBtYXhNYWls
Ym94Q291bnQgPSAwOwogICAgIGlmIChtX2NvbnRleHQtPmNhcGFiaWxpdGllcygpLmhhc1BhcmVu
dENvbXBvc2l0b3IpIHsKICAgICAgICAgZm9yIChSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBt
X3Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSBtX3Jlc291cmNlcy5lbmQoKTsgKytpdCkgewotICAg
ICAgICAgICAgaWYgKCFpdC0+c2Vjb25kLmV4cG9ydGVkICYmICFpdC0+c2Vjb25kLmV4dGVybmFs
KQorICAgICAgICAgICAgaWYgKCFpdC0+dmFsdWUuZXhwb3J0ZWQgJiYgIWl0LT52YWx1ZS5leHRl
cm5hbCkKICAgICAgICAgICAgICAgICArK21heE1haWxib3hDb3VudDsKICAgICAgICAgfQogICAg
IH0gZWxzZSB7CiAgICAgICAgIEhhc2hTZXQ8aW50PiBjaGlsZFBvb2xTZXQ7CiAgICAgICAgIGZv
ciAoQ2hpbGRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9jaGlsZHJlbi5iZWdpbigpOyBpdCAhPSBtX2No
aWxkcmVuLmVuZCgpOyArK2l0KQotICAgICAgICAgICAgY2hpbGRQb29sU2V0LmFkZChpdC0+c2Vj
b25kLnBvb2wpOworICAgICAgICAgICAgY2hpbGRQb29sU2V0LmFkZChpdC0+dmFsdWUucG9vbCk7
CiAgICAgICAgIGZvciAoUmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMuYmVn
aW4oKTsgaXQgIT0gbV9yZXNvdXJjZXMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgICAgIGlmIChj
aGlsZFBvb2xTZXQuY29udGFpbnMoaXQtPnNlY29uZC5wb29sKSkKKyAgICAgICAgICAgIGlmIChj
aGlsZFBvb2xTZXQuY29udGFpbnMoaXQtPnZhbHVlLnBvb2wpKQogICAgICAgICAgICAgICAgICsr
bWF4TWFpbGJveENvdW50OwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmls
dGVyR2xvYmFsQ29udGV4dC5jcHAKaW5kZXggZGE5NzgyYWY4MDM1MjIzNWIwYzBmMGIwN2IxNzJi
OTQ3MzZmZTZiMC4uMDJhOTZiODY0ZDMyYTQ5NmIxMjA2ODIzZjYyODBjODNjOWYxMDkzNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21G
aWx0ZXJHbG9iYWxDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlckdsb2JhbENvbnRleHQuY3BwCkBAIC00NCw3ICs0NCw3
IEBAIEN1c3RvbUZpbHRlckdsb2JhbENvbnRleHQ6OkN1c3RvbUZpbHRlckdsb2JhbENvbnRleHQo
KQogQ3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dDo6fkN1c3RvbUZpbHRlckdsb2JhbENvbnRleHQo
KQogewogICAgIGZvciAoQ3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbXNNYXA6Oml0ZXJhdG9y
IGl0ZXIgPSBtX3Byb2dyYW1zLmJlZ2luKCk7IGl0ZXIgIT0gbV9wcm9ncmFtcy5lbmQoKTsgKytp
dGVyKQotICAgICAgICBpdGVyLT5zZWNvbmQtPmRldGFjaEZyb21HbG9iYWxDb250ZXh0KCk7Cisg
ICAgICAgIGl0ZXItPnZhbHVlLT5kZXRhY2hGcm9tR2xvYmFsQ29udGV4dCgpOwogfQogCiBBTkdM
RVdlYktpdEJyaWRnZSogQ3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dDo6d2ViZ2xTaGFkZXJWYWxp
ZGF0b3IoKQpAQCAtOTEsNyArOTEsNyBAQCBQYXNzUmVmUHRyPEN1c3RvbUZpbHRlclZhbGlkYXRl
ZFByb2dyYW0+IEN1c3RvbUZpbHRlckdsb2JhbENvbnRleHQ6OmdldFZhbGlkYXRlZAogewogICAg
IEN1c3RvbUZpbHRlclZhbGlkYXRlZFByb2dyYW1zTWFwOjppdGVyYXRvciBpdGVyID0gbV9wcm9n
cmFtcy5maW5kKHByb2dyYW1JbmZvKTsKICAgICBpZiAoaXRlciAhPSBtX3Byb2dyYW1zLmVuZCgp
KQotICAgICAgICByZXR1cm4gaXRlci0+c2Vjb25kOworICAgICAgICByZXR1cm4gaXRlci0+dmFs
dWU7CiAKICAgICBSZWZQdHI8Q3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbT4gdmFsaWRhdGVk
UHJvZ3JhbSA9IEN1c3RvbUZpbHRlclZhbGlkYXRlZFByb2dyYW06OmNyZWF0ZSh0aGlzLCBwcm9n
cmFtSW5mbyk7CiAgICAgbV9wcm9ncmFtcy5zZXQocHJvZ3JhbUluZm8sIHZhbGlkYXRlZFByb2dy
YW0uZ2V0KCkpOwpAQCAtMTA3LDcgKzEwNyw3IEBAIHZvaWQgQ3VzdG9tRmlsdGVyR2xvYmFsQ29u
dGV4dDo6cmVtb3ZlVmFsaWRhdGVkUHJvZ3JhbShjb25zdCBDdXN0b21GaWx0ZXJWYWxpZGF0CiAj
aWZuZGVmIE5ERUJVRwogICAgIC8vIENoZWNrIHRoYXQgdGhlcmUncyBubyB3YXkgd2UgY291bGQg
aGF2ZSB0aGUgc2FtZSBwcm9ncmFtIHVuZGVyIGEgZGlmZmVyZW50IGtleS4KICAgICBmb3IgKGl0
ZXIgPSBtX3Byb2dyYW1zLmJlZ2luKCk7IGl0ZXIgIT0gbV9wcm9ncmFtcy5lbmQoKTsgKytpdGVy
KQotICAgICAgICBBU1NFUlQoaXRlci0+c2Vjb25kICE9IHByb2dyYW0pOworICAgICAgICBBU1NF
UlQoaXRlci0+dmFsdWUgIT0gcHJvZ3JhbSk7CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJQcm9ncmFt
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmls
dGVyUHJvZ3JhbS5jcHAKaW5kZXggZDFjZjYxMzRmNzBhZThhYmY1MmZjNjIzYTdkNjk2NTM0ODc5
ZjYxMi4uOTRlODNkZjliODNiMmI1YjU0ZmU3NDdhN2UyYWZjYjQyMjVlOWNmZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJQ
cm9ncmFtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0N1c3RvbUZpbHRlclByb2dyYW0uY3BwCkBAIC03NSw3ICs3NSw3IEBAIHZvaWQgQ3VzdG9tRmls
dGVyUHJvZ3JhbTo6cmVtb3ZlQ2xpZW50KEN1c3RvbUZpbHRlclByb2dyYW1DbGllbnQqIGNsaWVu
dCkKIHZvaWQgQ3VzdG9tRmlsdGVyUHJvZ3JhbTo6bm90aWZ5Q2xpZW50cygpCiB7CiAgICAgZm9y
IChDdXN0b21GaWx0ZXJQcm9ncmFtQ2xpZW50TGlzdDo6aXRlcmF0b3IgaXRlciA9IG1fY2xpZW50
cy5iZWdpbigpLCBlbmQgPSBtX2NsaWVudHMuZW5kKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCi0g
ICAgICAgIGl0ZXItPmZpcnN0LT5ub3RpZnlDdXN0b21GaWx0ZXJQcm9ncmFtTG9hZGVkKHRoaXMp
OworICAgICAgICBpdGVyLT5rZXktPm5vdGlmeUN1c3RvbUZpbHRlclByb2dyYW1Mb2FkZWQodGhp
cyk7CiB9CiAKIEN1c3RvbUZpbHRlclByb2dyYW1JbmZvIEN1c3RvbUZpbHRlclByb2dyYW06OnBy
b2dyYW1JbmZvKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNraWEuY3BwCmluZGV4IGY2OGVhNjE5MjQ1Zjg2
NmU1YmQwZDU3OGQwMTA0ODQ0NTI1ODRjMmIuLjFlODg2N2JiNzU3ZjIyNDJlOGY0OTYyZjg3NWIx
YmRmN2FlOTkxMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2hhcmZidXp6L0hhcmZCdXp6U2tpYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTa2lhLmNwcApAQCAtMjQ0LDE4ICsyNDQsMTggQEAg
c3RhdGljIEhCX0ZhY2VSZWNfKiBnZXRDYWNoZWRIYXJmYnV6ekZhY2UoRm9udFBsYXRmb3JtRGF0
YSogcGxhdGZvcm1EYXRhKQogICAgICAgICBnSGFyZmJ1enpGYWNlQ2FjaGUtPnNldCh1bmlxdWVJ
RCwgZW50cnkpOwogICAgICAgICByZXR1cm4gZW50cnkuZmlyc3Q7CiAgICAgfQotICAgICsrKHJl
c3VsdC5nZXQoKS0+c2Vjb25kLnNlY29uZCk7Ci0gICAgcmV0dXJuIHJlc3VsdC5nZXQoKS0+c2Vj
b25kLmZpcnN0OworICAgICsrKHJlc3VsdC5nZXQoKS0+dmFsdWUuc2Vjb25kKTsKKyAgICByZXR1
cm4gcmVzdWx0LmdldCgpLT52YWx1ZS5maXJzdDsKIH0KIAogc3RhdGljIHZvaWQgcmVsZWFzZUNh
Y2hlZEhhcmZidXp6RmFjZShTa0ZvbnRJRCB1bmlxdWVJRCkKIHsKICAgICBIYXJmYnV6ekZhY2VD
YWNoZTo6aXRlcmF0b3IgcmVzdWx0ID0gZ0hhcmZidXp6RmFjZUNhY2hlLT5maW5kKHVuaXF1ZUlE
KTsKICAgICBBU1NFUlQocmVzdWx0ICE9IGdIYXJmYnV6ekZhY2VDYWNoZS0+ZW5kKCkpOwotICAg
IEFTU0VSVChyZXN1bHQuZ2V0KCktPnNlY29uZC5zZWNvbmQgPiAwKTsKLSAgICAtLShyZXN1bHQu
Z2V0KCktPnNlY29uZC5zZWNvbmQpOwotICAgIGlmICghKHJlc3VsdC5nZXQoKS0+c2Vjb25kLnNl
Y29uZCkpIHsKLSAgICAgICAgSEJfRnJlZUZhY2UocmVzdWx0LmdldCgpLT5zZWNvbmQuZmlyc3Qp
OworICAgIEFTU0VSVChyZXN1bHQuZ2V0KCktPnZhbHVlLnNlY29uZCA+IDApOworICAgIC0tKHJl
c3VsdC5nZXQoKS0+dmFsdWUuc2Vjb25kKTsKKyAgICBpZiAoIShyZXN1bHQuZ2V0KCktPnZhbHVl
LnNlY29uZCkpIHsKKyAgICAgICAgSEJfRnJlZUZhY2UocmVzdWx0LmdldCgpLT52YWx1ZS5maXJz
dCk7CiAgICAgICAgIGdIYXJmYnV6ekZhY2VDYWNoZS0+cmVtb3ZlKHVuaXF1ZUlEKTsKICAgICB9
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6
ei9uZy9IYXJmQnV6ek5HRmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9oYXJmYnV6ei9uZy9IYXJmQnV6ek5HRmFjZS5jcHAKaW5kZXggN2RkMDQ4YjNiNDNmZjU5Mzg4
ZWFmNGU3MjEwZWUyY2NiZDU1NDIyMy4uNjA0NzU5YjhjYmRlZDNjOGI4NDFkYzY2ODc3ZTNkZWEz
NDYxZjc2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFy
ZmJ1enovbmcvSGFyZkJ1enpOR0ZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6TkdGYWNlLmNwcApAQCAtNjAsOCArNjAsOCBA
QCBIYXJmQnV6ek5HRmFjZTo6SGFyZkJ1enpOR0ZhY2UoRm9udFBsYXRmb3JtRGF0YSogcGxhdGZv
cm1EYXRhLCB1aW50NjRfdCB1bmlxdWVJRAogICAgICAgICBBU1NFUlQobV9mYWNlKTsKICAgICAg
ICAgaGFyZmJ1enpGYWNlQ2FjaGUoKS0+c2V0KG1fdW5pcXVlSUQsIEZhY2VDYWNoZUVudHJ5KG1f
ZmFjZSwgMSkpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgICsrKHJlc3VsdC5nZXQoKS0+c2Vjb25k
LnNlY29uZCk7Ci0gICAgICAgIG1fZmFjZSA9IHJlc3VsdC5nZXQoKS0+c2Vjb25kLmZpcnN0Owor
ICAgICAgICArKyhyZXN1bHQuZ2V0KCktPnZhbHVlLnNlY29uZCk7CisgICAgICAgIG1fZmFjZSA9
IHJlc3VsdC5nZXQoKS0+dmFsdWUuZmlyc3Q7CiAgICAgfQogfQogCkBAIC02OSwxMCArNjksMTAg
QEAgSGFyZkJ1enpOR0ZhY2U6On5IYXJmQnV6ek5HRmFjZSgpCiB7CiAgICAgSGFyZkJ1enpOR0Zh
Y2VDYWNoZTo6aXRlcmF0b3IgcmVzdWx0ID0gaGFyZmJ1enpGYWNlQ2FjaGUoKS0+ZmluZChtX3Vu
aXF1ZUlEKTsKICAgICBBU1NFUlQocmVzdWx0ICE9IGhhcmZidXp6RmFjZUNhY2hlKCktPmVuZCgp
KTsKLSAgICBBU1NFUlQocmVzdWx0LmdldCgpLT5zZWNvbmQuc2Vjb25kID4gMCk7Ci0gICAgLS0o
cmVzdWx0LmdldCgpLT5zZWNvbmQuc2Vjb25kKTsKLSAgICBpZiAoIShyZXN1bHQuZ2V0KCktPnNl
Y29uZC5zZWNvbmQpKSB7Ci0gICAgICAgIGhiX2ZhY2VfZGVzdHJveShyZXN1bHQuZ2V0KCktPnNl
Y29uZC5maXJzdCk7CisgICAgQVNTRVJUKHJlc3VsdC5nZXQoKS0+dmFsdWUuc2Vjb25kID4gMCk7
CisgICAgLS0ocmVzdWx0LmdldCgpLT52YWx1ZS5zZWNvbmQpOworICAgIGlmICghKHJlc3VsdC5n
ZXQoKS0+dmFsdWUuc2Vjb25kKSkgeworICAgICAgICBoYl9mYWNlX2Rlc3Ryb3kocmVzdWx0Lmdl
dCgpLT52YWx1ZS5maXJzdCk7CiAgICAgICAgIGhhcmZidXp6RmFjZUNhY2hlKCktPnJlbW92ZSht
X3VuaXF1ZUlEKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFDb3JlVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFDb3JlVGV4dC5jcHAKaW5kZXgg
MDUxOTM3NDJjNTg1MmRiZTljOWNlZDY0YjlhMDdhYWQyYzFlYTQ3Ny4uMGI3MTMzNDdmNjA0NjM1
NTQ5ZTUwZDU2MzY1MjE4YjIzNDQyNmFjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhQ29yZVRleHQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YUNvcmVUZXh0LmNw
cApAQCAtNDMsNyArNDMsNyBAQCBDRkRpY3Rpb25hcnlSZWYgU2ltcGxlRm9udERhdGE6OmdldENG
U3RyaW5nQXR0cmlidXRlcyhUeXBlc2V0dGluZ0ZlYXR1cmVzIHR5cGVzZQogewogICAgIHVuc2ln
bmVkIGtleSA9IHR5cGVzZXR0aW5nRmVhdHVyZXMgKyAxOwogICAgIEhhc2hNYXA8dW5zaWduZWQs
IFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+ID46OkFkZFJlc3VsdCBhZGRSZXN1bHQgPSBtX0NG
U3RyaW5nQXR0cmlidXRlcy5hZGQoa2V5LCBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPigpKTsK
LSAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiYgYXR0cmlidXRlc0RpY3Rpb25hcnkgPSBh
ZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVm
PiYgYXR0cmlidXRlc0RpY3Rpb25hcnkgPSBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogICAg
IGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkpCiAgICAgICAgIHJldHVybiBhdHRyaWJ1dGVzRGlj
dGlvbmFyeS5nZXQoKTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YU1hYy5tbQppbmRleCA2NmZlOTBhNTkzOTBl
NGNkMjJmNjE4MzhmOGM2YTlkYmZiNTJhYzZjLi45N2ViYmY5OWMzZDJlNWU3MWNhNjBkYWNiM2Rl
ODI1YTQxYjY3MTdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhTWFjLm1tCkBAIC00NjEsNyArNDYxLDcgQEAgYm9v
bCBTaW1wbGVGb250RGF0YTo6Y2FuUmVuZGVyQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY29u
c3QgVUNoYXIqIGNoYXJhY3RlcnMKIAogICAgIFdURjo6SGFzaE1hcDxTdHJpbmcsIGJvb2w+OjpB
ZGRSZXN1bHQgYWRkUmVzdWx0ID0gbV9jb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZVN1cHBvcnQt
PmFkZChTdHJpbmcoY2hhcmFjdGVycywgbGVuZ3RoKSwgZmFsc2UpOwogICAgIGlmICghYWRkUmVz
dWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJldHVybiBhZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29u
ZDsKKyAgICAgICAgcmV0dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAKICAgICBSZXRh
aW5QdHI8Q0dGb250UmVmPiBjZ0ZvbnQoQWRvcHRDRiwgQ1RGb250Q29weUdyYXBoaWNzRm9udChw
bGF0Zm9ybURhdGEoKS5jdEZvbnQoKSwgMCkpOwogCkBAIC00ODEsNyArNDgxLDcgQEAgYm9vbCBT
aW1wbGVGb250RGF0YTo6Y2FuUmVuZGVyQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY29uc3Qg
VUNoYXIqIGNoYXJhY3RlcnMKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAg
ICBhZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IHRydWU7CisgICAgYWRkUmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZSA9IHRydWU7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xD
b21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVu
c2lvbnMzRE9wZW5HTENvbW1vbi5jcHAKaW5kZXggYTNjMDU2NTkxMjBmYWQ4MmNkMTJiNGE1NWE4
ZjQ3NGIyM2MyYmVjOS4uOGJlOTM4NjI1YjQwZTUzY2VkNjZkYjU2ZmEwZjk5YTRhMDA0ZTZmOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVu
c2lvbnMzRE9wZW5HTENvbW1vbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAKQEAgLTExNyw3ICsxMTcs
NyBAQCBTdHJpbmcgRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uOjpnZXRUcmFuc2xhdGVkU2hhZGVy
U291cmNlQU5HTEUoUGxhdGZvcm0zRE9iamVjdAogICAgIGlmIChyZXN1bHQgPT0gbV9jb250ZXh0
LT5tX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuICIiOwogCi0gICAgR3Jh
cGhpY3NDb250ZXh0M0Q6OlNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3VsdC0+c2Vjb25k
OworICAgIEdyYXBoaWNzQ29udGV4dDNEOjpTaGFkZXJTb3VyY2VFbnRyeSYgZW50cnkgPSByZXN1
bHQtPnZhbHVlOwogCiAgICAgU3RyaW5nIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2U7CiAgICAgU3Ry
aW5nIHNoYWRlckluZm9Mb2c7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdM
Q29tbW9uLmNwcAppbmRleCBkODFlOWU2YWY0NTQ1Mzc2YjAyZDg3NmY2Y2E5MTU4MmZmNDY4ODll
Li42ZTk4ZTYzODFhODY5Zjc1YzliMTc4NzJmZWVhMGVmYTVhM2VlNTBjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RP
cGVuR0xDb21tb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAKQEAgLTQ3Myw3ICs0NzMsNyBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb21waWxlU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qg
c2hhZGVyKQogCiAgICAgaWYgKGxlbmd0aCkgewogICAgICAgICBIYXNoTWFwPFBsYXRmb3JtM0RP
YmplY3QsIEdyYXBoaWNzQ29udGV4dDNEOjpTaGFkZXJTb3VyY2VFbnRyeT46Oml0ZXJhdG9yIHJl
c3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKLSAgICAgICAgR3JhcGhpY3ND
b250ZXh0M0Q6OlNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3VsdC0+c2Vjb25kOworICAg
ICAgICBHcmFwaGljc0NvbnRleHQzRDo6U2hhZGVyU291cmNlRW50cnkmIGVudHJ5ID0gcmVzdWx0
LT52YWx1ZTsKIAogICAgICAgICBHTHNpemVpIHNpemUgPSAwOwogICAgICAgICBPd25BcnJheVB0
cjxHTGNoYXI+IGluZm8gPSBhZG9wdEFycmF5UHRyKG5ldyBHTGNoYXJbbGVuZ3RoXSk7CkBAIC0x
MTQ1LDcgKzExNDUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJpdihQbGF0
Zm9ybTNET2JqZWN0IHNoYWRlciwgR0MzRGVudW0gcG5hbWUsIEdDMwogICAgICAgICAgICAgKnZh
bHVlID0gc3RhdGljX2Nhc3Q8aW50PihmYWxzZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KLSAgICAgICAgKnZhbHVlID0gc3RhdGljX2Nhc3Q8aW50PihyZXN1bHQtPnNlY29uZC5p
c1ZhbGlkKTsKKyAgICAgICAgKnZhbHVlID0gc3RhdGljX2Nhc3Q8aW50PihyZXN1bHQtPnZhbHVl
LmlzVmFsaWQpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIElORk9fTE9HX0xFTkdUSDoKICAg
ICAgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkgewpAQCAtMTE3Miw3
ICsxMTcyLDcgQEAgU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJJbmZvTG9nKFBs
YXRmb3JtM0RPYmplY3Qgc2hhZGVyKQogICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VN
YXAuZW5kKCkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsgCiAKLSAgICBTaGFkZXJTb3VyY2VF
bnRyeSBlbnRyeSA9IHJlc3VsdC0+c2Vjb25kOworICAgIFNoYWRlclNvdXJjZUVudHJ5IGVudHJ5
ID0gcmVzdWx0LT52YWx1ZTsKICAgICBpZiAoIWVudHJ5LmlzVmFsaWQpCiAgICAgICAgIHJldHVy
biBlbnRyeS5sb2c7CiAKQEAgLTExOTgsNyArMTE5OCw3IEBAIFN0cmluZyBHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0U2hhZGVyU291cmNlKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQogICAgIGlmIChy
ZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybiBTdHJpbmco
KTsgCiAKLSAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQuc291cmNlOworICAgIHJldHVybiByZXN1
bHQtPnZhbHVlLnNvdXJjZTsKIH0KIAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVudmcvRUdMRGlzcGxheU9wZW5WRy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvRUdMRGlzcGxheU9wZW5WRy5jcHAKaW5kZXggZDY4
MWQ3NTgxZmIzZmJmMjlkODhlMTI2ZTUzODM4NzgyMzBiNTIyMC4uMWE2OGFlZmY4Y2M4YzlmNTQ3
NmI0ZjA1MzU2NjIwZmUxOTE0MWM0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbnZnL0VHTERpc3BsYXlPcGVuVkcuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW52Zy9FR0xEaXNwbGF5T3BlblZHLmNwcApAQCAtMTIx
LDcgKzEyMSw3IEBAIEVHTERpc3BsYXlPcGVuVkc6On5FR0xEaXNwbGF5T3BlblZHKCkKIAogICAg
IEhhc2hNYXA8RUdMU3VyZmFjZSwgRUdMaW50Pjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9zdXJm
YWNlQ29uZmlnSWRzLmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDxFR0xTdXJmYWNlLCBFR0xpbnQ+
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fc3VyZmFjZUNvbmZpZ0lkcy5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpCi0gICAgICAgIGRlc3Ryb3lTdXJmYWNlKCgqaXQpLmZpcnN0KTsKKyAgICAgICAg
ZGVzdHJveVN1cmZhY2UoKCppdCkua2V5KTsKIAogICAgIGVnbFRlcm1pbmF0ZShtX2Rpc3BsYXkp
OwogICAgIEFTU0VSVF9FR0xfTk9fRVJST1IoKTsKQEAgLTMzOCw3ICszMzgsNyBAQCB2b2lkIEVH
TERpc3BsYXlPcGVuVkc6OmRlc3Ryb3lTdXJmYWNlKGNvbnN0IEVHTFN1cmZhY2UmIHN1cmZhY2Up
CiAKICAgICAgICAgLy8gLi4uYnV0IG9ubHkgaWYgdGhlcmUncyBubyBvdGhlciBzdXJmYWNlcyBh
c3NvY2lhdGVkIHRvIHRoYXQgY29udGV4dC4KICAgICAgICAgZm9yIChIYXNoTWFwPEVHTFN1cmZh
Y2UsIEVHTGludD46Oml0ZXJhdG9yIGl0ID0gbV9zdXJmYWNlQ29uZmlnSWRzLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgaWYgKCgqaXQpLnNlY29uZCA9PSBzdXJmYWNl
Q29uZmlnSWQpIHsKKyAgICAgICAgICAgIGlmICgoKml0KS52YWx1ZSA9PSBzdXJmYWNlQ29uZmln
SWQpIHsKICAgICAgICAgICAgICAgICBpc0NvbnRleHRSZWZlcmVuY2VkID0gdHJ1ZTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTM1NCw3ICszNTQsNyBAQCB2b2lk
IEVHTERpc3BsYXlPcGVuVkc6OmRlc3Ryb3lTdXJmYWNlKGNvbnN0IEVHTFN1cmZhY2UmIHN1cmZh
Y2UpCiAKICAgICBIYXNoTWFwPEVHTE5hdGl2ZVdpbmRvd1R5cGUsIEVHTFN1cmZhY2U+OjppdGVy
YXRvciBlbmQgPSBtX3dpbmRvd1N1cmZhY2VzLmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDxFR0xO
YXRpdmVXaW5kb3dUeXBlLCBFR0xTdXJmYWNlPjo6aXRlcmF0b3IgaXQgPSBtX3dpbmRvd1N1cmZh
Y2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoKCppdCkuc2Vjb25k
ID09IHN1cmZhY2UpIHsKKyAgICAgICAgaWYgKCgqaXQpLnZhbHVlID09IHN1cmZhY2UpIHsKICAg
ICAgICAgICAgIG1fd2luZG93U3VyZmFjZXMucmVtb3ZlKGl0KTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CkBAIC00MDksNyArNDA5LDcgQEAgRUdMQ29udGV4dCBFR0xEaXNwbGF5T3Bl
blZHOjpjb250ZXh0Rm9yU3VyZmFjZShjb25zdCBFR0xTdXJmYWNlJiBzdXJmYWNlKQogICAgIEhh
c2hNYXA8RUdMaW50LCBFR0xDb250ZXh0Pjo6aXRlcmF0b3IgZW5kID0gbV9jb250ZXh0cy5lbmQo
KTsKIAogICAgIGZvciAoSGFzaE1hcDxFR0xpbnQsIEVHTENvbnRleHQ+OjppdGVyYXRvciBpdCA9
IG1fY29udGV4dHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGVnbE1ha2VD
dXJyZW50KG1fZGlzcGxheSwgc3VyZmFjZSwgc3VyZmFjZSwgKCppdCkuc2Vjb25kKTsKKyAgICAg
ICAgZWdsTWFrZUN1cnJlbnQobV9kaXNwbGF5LCBzdXJmYWNlLCBzdXJmYWNlLCAoKml0KS52YWx1
ZSk7CiAgICAgICAgIGlmIChlZ2xHZXRFcnJvcigpID09IEVHTF9TVUNDRVNTKSB7CiAgICAgICAg
ICAgICAvLyBSZXN0b3JlIHByZXZpb3VzIHN1cmZhY2UvY29udGV4dC4KICAgICAgICAgICAgIGlm
IChjdXJyZW50Q29udGV4dCAhPSBFR0xfTk9fQ09OVEVYVCkgewpAQCAtNDE3LDggKzQxNyw4IEBA
IEVHTENvbnRleHQgRUdMRGlzcGxheU9wZW5WRzo6Y29udGV4dEZvclN1cmZhY2UoY29uc3QgRUdM
U3VyZmFjZSYgc3VyZmFjZSkKICAgICAgICAgICAgICAgICBBU1NFUlRfRUdMX05PX0VSUk9SKCk7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyBDb29sLCBzdXJmYWNlIGlzIGNvbXBhdGli
bGUgdG8gb25lIG9mIG91ciBleGlzdGluZyBjb250ZXh0cy4KLSAgICAgICAgICAgIG1fY29tcGF0
aWJsZUNvbmZpZ0lkcy5zZXQoc3VyZmFjZUNvbmZpZ0lkLCAoKml0KS5maXJzdCk7Ci0gICAgICAg
ICAgICByZXR1cm4gKCppdCkuc2Vjb25kOworICAgICAgICAgICAgbV9jb21wYXRpYmxlQ29uZmln
SWRzLnNldChzdXJmYWNlQ29uZmlnSWQsICgqaXQpLmtleSk7CisgICAgICAgICAgICByZXR1cm4g
KCppdCkudmFsdWU7CiAgICAgICAgIH0KICAgICB9CiAgICAgLy8gUmVzdG9yZSBwcmV2aW91cyBz
dXJmYWNlL2NvbnRleHQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCmluZGV4IDdmMTBlMzFiYjczOGQw
MzYwZTQ0ODIzN2IwOTc5NTBhODVjZjQ4ZGYuLjE3YTU4MWUzNjY5NmVjMDFjNTIzNjg0MTFhYWFi
Y2I2OTg0NzQ3YjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCkBAIC03Miw3ICs3Miw3IEBAIHB1
YmxpYzoKICAgICAgICAgewogICAgICAgICAgICAgR0xDb250ZXh0RGF0YU1hcDo6aXRlcmF0b3Ig
aXQgPSBnbENvbnRleHREYXRhTWFwKCkuZmluZChjb250ZXh0LT5wbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dDNEKCkpOwogICAgICAgICAgICAgaWYgKGl0ICE9IGdsQ29udGV4dERhdGFNYXAoKS5lbmQo
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gaXQtPnZhbHVlOwogCiAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNoYXJl
ZEdMRGF0YShjb250ZXh0KSk7CiAgICAgICAgIH0KQEAgLTkyLDcgKzkyLDcgQEAgcHVibGljOgog
ICAgICAgICAgICAgR0xDb250ZXh0RGF0YU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gZ2xDb250
ZXh0RGF0YU1hcCgpLmVuZCgpOwogICAgICAgICAgICAgR0xDb250ZXh0RGF0YU1hcDo6aXRlcmF0
b3IgaXQ7CiAgICAgICAgICAgICBmb3IgKGl0ID0gZ2xDb250ZXh0RGF0YU1hcCgpLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgICAgIGlmIChpdC0+c2Vjb25kID09IHRo
aXMpCisgICAgICAgICAgICAgICAgaWYgKGl0LT52YWx1ZSA9PSB0aGlzKQogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
U2hhZGVyTWFuYWdlci5jcHAKaW5kZXggNzNkNmZlZmJiMWI4ZjgyY2Q3OGQ1NjdjZDVkNGY2OWY4
MTE5YzkyNS4uNWNhOGM5NmJmZTQ1Mjk1MmI0M2I2NDIzODUxYjFmYzgzNWQ3MzlmYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJTaGFkZXJNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3BwCkBAIC0xOTksNyArMTk5LDcg
QEAgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gVGV4dHVyZU1hcHBlclNo
YWRlck1hbmFnZXI6OmdldFNoYWRlclByb2cKIAogICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtTWFwOjppdGVyYXRvciBpdCA9IG1fdGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1NYXAuZmlu
ZChzaGFkZXJUeXBlKTsKICAgICBpZiAoaXQgIT0gbV90ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bU1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBp
dC0+dmFsdWU7CiAKICAgICBzd2l0Y2ggKHNoYWRlclR5cGUpIHsKICAgICBjYXNlIFNpbXBsZToK
QEAgLTc1OSw3ICs3NTksNyBAQCBQYXNzUmVmUHRyPFN0YW5kYXJkRmlsdGVyUHJvZ3JhbT4gVGV4
dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OmdldFNoYWRlckZvckZpbHRlcgogCiAgICAgICAgIG1f
ZmlsdGVyTWFwLmFkZChrZXksIHByb2dyYW0pOwogICAgIH0gZWxzZQotICAgICAgICBwcm9ncmFt
ID0gaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgcHJvZ3JhbSA9IGl0ZXJhdG9yLT52YWx1ZTsK
IAogICAgIHJldHVybiBwcm9ncmFtOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udFBsYXRmb3JtRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250UGxhdGZvcm1EYXRhLmNwcAppbmRleCAxMjY2
YzVjMWIyMzdhZWM3YmNjMzFkYzJiOTQ5OTYyNzg2YjY0N2VjLi43YzE5YjU0NDQ3ZGVlZTFlYjM1
YTE5OGM3YmQ0MWIyOTFjOGQwOWU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW5jZS9Gb250UGxhdGZvcm1EYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250UGxhdGZvcm1EYXRhLmNwcApAQCAtMjg3LDkg
KzI4Nyw5IEBAIHN0YXRpYyBQYXNzUmVmUHRyPEZpeGVkU2l6ZUZvbnREYXRhPiBjcmVhdGVGaXhl
ZFNpemVGb250RGF0YShjb25zdCBBdG9taWNTdHJpbmcmCiAgICAgRml4ZWRTaXplRm9udERhdGFL
ZXkga2V5KGZhbWlseSwgd2VpZ2h0LCBpdGFsaWMpOwogICAgIEZpeGVkU2l6ZUZvbnRDYWNoZTo6
QWRkUmVzdWx0IHJlc3VsdCA9IGdfZml4ZWRTaXplRm9udENhY2hlLmFkZChrZXksIFJlZlB0cjxG
aXhlZFNpemVGb250RGF0YT4oKSk7CiAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQotICAgICAg
ICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IEZpeGVkU2l6ZUZvbnREYXRhOjpjcmVhdGUoZmFt
aWx5LCB3ZWlnaHQsIGl0YWxpYyk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBG
aXhlZFNpemVGb250RGF0YTo6Y3JlYXRlKGZhbWlseSwgd2VpZ2h0LCBpdGFsaWMpOwogCi0gICAg
cmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgIHJldHVybiByZXN1bHQuaXRlcmF0
b3ItPnZhbHVlOwogfQogCiBzdGF0aWMgTE9ORyB0b0dESUZvbnRXZWlnaHQoRm9udFdlaWdodCBm
b250V2VpZ2h0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RhdGFP
YmplY3RHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RhdGFPYmplY3RHdGsu
Y3BwCmluZGV4IDFhODRmOGJkMzE5NTJiMjhlMjY4MjcxZGQyYTVmNTdmNDRkODI3ZDcuLmFkZmM2
NmUwMTVlNTAyMjY3ODhjMjE0NzY4YTE1YjI5MTM2ODQzYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvRGF0YU9iamVjdEd0ay5jcHAKQEAgLTE3MSw3ICsxNzEsNyBAQCBEYXRh
T2JqZWN0R3RrKiBEYXRhT2JqZWN0R3RrOjpmb3JDbGlwYm9hcmQoR3RrQ2xpcGJvYXJkKiBjbGlw
Ym9hcmQpCiAgICAgfQogCiAgICAgSGFzaE1hcDxHdGtDbGlwYm9hcmQqLCBSZWZQdHI8RGF0YU9i
amVjdEd0az4gPjo6aXRlcmF0b3IgaXQgPSBvYmplY3RNYXAuZmluZChjbGlwYm9hcmQpOwotICAg
IHJldHVybiBpdC0+c2Vjb25kLmdldCgpOworICAgIHJldHVybiBpdC0+dmFsdWUuZ2V0KCk7CiB9
CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtEcmFnQW5k
RHJvcEhlbHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrRHJhZ0FuZERy
b3BIZWxwZXIuY3BwCmluZGV4IDc2M2QxMjBkMDk0MTYyMjcyNjYwYzYwNjMyYTE5Mjk4NmY1NDJl
YTQuLmZjMmY1NmU2MTY2ZWIxYWFjZGJhZGE4ZjUyZmVmM2M2ZGQ4ODY0Y2EgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtEcmFnQW5kRHJvcEhlbHBlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0RyYWdBbmREcm9wSGVscGVyLmNwcApA
QCAtNzAsNyArNzAsNyBAQCB2b2lkIEd0a0RyYWdBbmREcm9wSGVscGVyOjpoYW5kbGVHZXREcmFn
RGF0YShHZGtEcmFnQ29udGV4dCogY29udGV4dCwgR3RrU2VsZWN0aQogICAgIERyYWdnaW5nRGF0
YU9iamVjdHNNYXA6Oml0ZXJhdG9yIGl0ZXJhdG9yID0gbV9kcmFnZ2luZ0RhdGFPYmplY3RzLmZp
bmQoY29udGV4dCk7CiAgICAgaWYgKGl0ZXJhdG9yID09IG1fZHJhZ2dpbmdEYXRhT2JqZWN0cy5l
bmQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0
ZWJvYXJkSGVscGVyKCktPmZpbGxTZWxlY3Rpb25EYXRhKHNlbGVjdGlvbkRhdGEsIGluZm8sIGl0
ZXJhdG9yLT5zZWNvbmQuZ2V0KCkpOworICAgIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0
ZWJvYXJkSGVscGVyKCktPmZpbGxTZWxlY3Rpb25EYXRhKHNlbGVjdGlvbkRhdGEsIGluZm8sIGl0
ZXJhdG9yLT52YWx1ZS5nZXQoKSk7CiB9CiAKIHN0cnVjdCBIYW5kbGVEcmFnTGF0ZXJEYXRhIHsK
QEAgLTExNiw3ICsxMTYsNyBAQCB2b2lkIEd0a0RyYWdBbmREcm9wSGVscGVyOjpoYW5kbGVEcmFn
TGVhdmUoR2RrRHJhZ0NvbnRleHQqIGdka0NvbnRleHQsIERyYWdFeGl0ZQogICAgIC8vIHRoZSBk
cmFnLWRyb3Agc2lnbmFsLiBXZSB3YW50IHRoZSBhY3Rpb25zIGZvciBkcmFnLWxlYXZlIHRvIGhh
cHBlbiBhZnRlcgogICAgIC8vIHRob3NlIGZvciBkcmFnLWRyb3AsIHNvIHNjaGVkdWxlIHRoZW0g
dG8gaGFwcGVuIGFzeW5jaHJvbm91c2x5IGhlcmUuCiAgICAgSGFuZGxlRHJhZ0xhdGVyRGF0YSog
ZGF0YSA9IG5ldyBIYW5kbGVEcmFnTGF0ZXJEYXRhOwotICAgIGRhdGEtPmNvbnRleHQgPSBpdGVy
YXRvci0+c2Vjb25kOworICAgIGRhdGEtPmNvbnRleHQgPSBpdGVyYXRvci0+dmFsdWU7CiAgICAg
ZGF0YS0+Y29udGV4dC0+ZXhpdGVkQ2FsbGJhY2sgPSBleGl0ZWRDYWxsYmFjazsKICAgICBkYXRh
LT5nbHVlID0gdGhpczsKICAgICBnX3RpbWVvdXRfYWRkKDAsIHJlaW50ZXJwcmV0X2Nhc3Q8R1Nv
dXJjZUZ1bmM+KGhhbmRsZURyYWdMZWF2ZUxhdGVyQ2FsbGJhY2spLCBkYXRhKTsKQEAgLTE0MCw3
ICsxNDAsNyBAQCBQYXNzT3duUHRyPERyYWdEYXRhPiBHdGtEcmFnQW5kRHJvcEhlbHBlcjo6aGFu
ZGxlRHJhZ01vdGlvbihHZGtEcmFnQ29udGV4dCogY29udAogICAgICAgICBtX2Ryb3BwaW5nQ29u
dGV4dHMuc2V0KGNvbnRleHQsIGRyb3BwaW5nQ29udGV4dCk7CiAgICAgICAgIHF1ZXJ5TmV3RHJv
cENvbnRleHREYXRhKGRyb3BwaW5nQ29udGV4dCwgbV93aWRnZXQsIHRpbWUpOwogICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGRyb3BwaW5nQ29udGV4dCA9IGl0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAg
IGRyb3BwaW5nQ29udGV4dCA9IGl0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgZHJvcHBpbmdDb250
ZXh0LT5sYXN0TW90aW9uUG9zaXRpb24gPSBwb3NpdGlvbjsKICAgICB9CiAKQEAgLTE2Miw3ICsx
NjIsNyBAQCBQYXNzT3duUHRyPERyYWdEYXRhPiBHdGtEcmFnQW5kRHJvcEhlbHBlcjo6aGFuZGxl
RHJhZ0RhdGFSZWNlaXZlZChHZGtEcmFnQ29udGV4dAogICAgIGlmIChpdGVyYXRvciA9PSBtX2Ry
b3BwaW5nQ29udGV4dHMuZW5kKCkpCiAgICAgICAgIHJldHVybiBhZG9wdFB0cihzdGF0aWNfY2Fz
dDxEcmFnRGF0YSo+KDApKTsKIAotICAgIERyb3BwaW5nQ29udGV4dCogZHJvcHBpbmdDb250ZXh0
ID0gaXRlcmF0b3ItPnNlY29uZDsKKyAgICBEcm9wcGluZ0NvbnRleHQqIGRyb3BwaW5nQ29udGV4
dCA9IGl0ZXJhdG9yLT52YWx1ZTsKICAgICBkcm9wcGluZ0NvbnRleHQtPnBlbmRpbmdEYXRhUmVx
dWVzdHMtLTsKICAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigp
LT5maWxsRGF0YU9iamVjdEZyb21Ecm9wRGF0YShzZWxlY3Rpb25EYXRhLCBpbmZvLCBkcm9wcGlu
Z0NvbnRleHQtPmRhdGFPYmplY3QuZ2V0KCkpOwogCkBAIC0xODUsNyArMTg1LDcgQEAgUGFzc093
blB0cjxEcmFnRGF0YT4gR3RrRHJhZ0FuZERyb3BIZWxwZXI6OmhhbmRsZURyYWdEcm9wKEdka0Ry
YWdDb250ZXh0KiBjb250ZXgKICAgICBpZiAoaXRlcmF0b3IgPT0gbV9kcm9wcGluZ0NvbnRleHRz
LmVuZCgpKQogICAgICAgICByZXR1cm4gYWRvcHRQdHIoc3RhdGljX2Nhc3Q8RHJhZ0RhdGEqPigw
KSk7CiAKLSAgICBEcm9wcGluZ0NvbnRleHQqIGRyb3BwaW5nQ29udGV4dCA9IGl0ZXJhdG9yLT5z
ZWNvbmQ7CisgICAgRHJvcHBpbmdDb250ZXh0KiBkcm9wcGluZ0NvbnRleHQgPSBpdGVyYXRvci0+
dmFsdWU7CiAgICAgZHJvcHBpbmdDb250ZXh0LT5kcm9wSGFwcGVuZWQgPSB0cnVlOwogCiAgICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBEcmFnRGF0YShkcm9wcGluZ0NvbnRleHQtPmRhdGFPYmplY3Qu
Z2V0KCksIHBvc2l0aW9uLCAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9SZW5kZXJUaGVtZUd0azMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRl
clRoZW1lR3RrMy5jcHAKaW5kZXggNzc0OTM5MTUxNzEzZGYwMTEzNGQ2Y2VhNGVkOWQ3MDRiNGRj
ZmMwYi4uMGE4MzgyN2M3ZmViY2JlNDA1NDhmYWQ1NjJiNTQxMTcxZWMxNjlmNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrMy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrMy5jcHAKQEAgLTU2LDcg
KzU2LDcgQEAgc3RhdGljIHZvaWQgZ3RrU3R5bGVDaGFuZ2VkQ2FsbGJhY2soR09iamVjdCosIEdQ
YXJhbVNwZWMqKQogewogICAgIFN0eWxlQ29udGV4dE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
c3R5bGVDb250ZXh0TWFwKCkuZW5kKCk7CiAgICAgZm9yIChTdHlsZUNvbnRleHRNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ZXIgPSBzdHlsZUNvbnRleHRNYXAoKS5iZWdpbigpOyBpdGVyICE9IGVuZDsg
KytpdGVyKQotICAgICAgICBndGtfc3R5bGVfY29udGV4dF9pbnZhbGlkYXRlKGl0ZXItPnNlY29u
ZC5nZXQoKSk7CisgICAgICAgIGd0a19zdHlsZV9jb250ZXh0X2ludmFsaWRhdGUoaXRlci0+dmFs
dWUuZ2V0KCkpOwogCiAgICAgUGFnZTo6c2NoZWR1bGVGb3JjZWRTdHlsZVJlY2FsY0ZvckFsbFBh
Z2VzKCk7CiB9CkBAIC03OSw3ICs3OSw3IEBAIHN0YXRpYyBHdGtTdHlsZUNvbnRleHQqIGdldFN0
eWxlQ29udGV4dChHVHlwZSB3aWRnZXRUeXBlKQogewogICAgIFN0eWxlQ29udGV4dE1hcDo6QWRk
UmVzdWx0IHJlc3VsdCA9IHN0eWxlQ29udGV4dE1hcCgpLmFkZCh3aWRnZXRUeXBlLCAwKTsKICAg
ICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9y
LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdl
dCgpOwogCiAgICAgR3RrV2lkZ2V0UGF0aCogcGF0aCA9IGd0a193aWRnZXRfcGF0aF9uZXcoKTsK
ICAgICBndGtfd2lkZ2V0X3BhdGhfYXBwZW5kX3R5cGUocGF0aCwgd2lkZ2V0VHlwZSk7CkBAIC0x
MTEsNyArMTExLDcgQEAgc3RhdGljIEd0a1N0eWxlQ29udGV4dCogZ2V0U3R5bGVDb250ZXh0KEdU
eXBlIHdpZGdldFR5cGUpCiAgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X3BhdGgoY29udGV4dC5n
ZXQoKSwgcGF0aCk7CiAgICAgZ3RrX3dpZGdldF9wYXRoX2ZyZWUocGF0aCk7CiAKLSAgICByZXN1
bHQuaXRlcmF0b3ItPnNlY29uZCA9IGNvbnRleHQ7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZSA9IGNvbnRleHQ7CiAgICAgcmV0dXJuIGNvbnRleHQuZ2V0KCk7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxiYXJUaGVtZU1hYy5tbSBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxiYXJUaGVtZU1hYy5tbQppbmRleCA5NmFhMTJh
MjY5MTQ3Zjc2OGVlM2Y2NDUxZGZlYjUyNzNmOTRlYzQ5Li5mZDliNzI0YTRkOWM0YjQ3MTE0ZWRm
N2RiYmM4OGZjNTg1MmYxNmQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvU2Nyb2xsYmFyVGhlbWVNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFj
L1Njcm9sbGJhclRoZW1lTWFjLm1tCkBAIC04Niw4ICs4Niw4IEBAIHN0YXRpYyBTY3JvbGxiYXJQ
YWludGVyTWFwKiBzY3JvbGxiYXJNYXAoKQogICAgICAgICByZXR1cm47CiAgICAgU2Nyb2xsYmFy
UGFpbnRlck1hcDo6aXRlcmF0b3IgZW5kID0gc2Nyb2xsYmFyTWFwKCktPmVuZCgpOwogICAgIGZv
ciAoU2Nyb2xsYmFyUGFpbnRlck1hcDo6aXRlcmF0b3IgaXQgPSBzY3JvbGxiYXJNYXAoKS0+YmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGl0LT5maXJzdC0+c3R5bGVDaGFuZ2Vk
KCk7Ci0gICAgICAgIGl0LT5maXJzdC0+aW52YWxpZGF0ZSgpOworICAgICAgICBpdC0+a2V5LT5z
dHlsZUNoYW5nZWQoKTsKKyAgICAgICAgaXQtPmtleS0+aW52YWxpZGF0ZSgpOwogICAgIH0KIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFs
U3RvcmFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWxT
dG9yYWdlLmNwcAppbmRleCBmNjI0ZDRmY2IyOTJjYzQwYzViNjllZWRmM2U1Yzg3NTE1MmYwMWY5
Li44YjVhYzQ3OGIyMTM1MDZjZDljZWFjYTliYTU4NTFiY2QyOTNhNWM5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWxTdG9yYWdlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWxTdG9yYWdlLmNwcApA
QCAtMTQ3LDcgKzE0Nyw3IEBAIGJvb2wgQ3JlZGVudGlhbFN0b3JhZ2U6OnNldChjb25zdCBDcmVk
ZW50aWFsJiBjcmVkZW50aWFsLCBjb25zdCBLVVJMJiB1cmwpCiAgICAgaWYgKGl0ZXIgPT0gcGF0
aFRvRGVmYXVsdFByb3RlY3Rpb25TcGFjZU1hcCgpLmVuZCgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgQVNTRVJUKG9yaWdpbnNXaXRoQ3JlZGVudGlhbHMoKS5jb250YWlucyhvcmlnaW5T
dHJpbmdGcm9tVVJMKHVybCkpKTsKLSAgICBwcm90ZWN0aW9uU3BhY2VUb0NyZWRlbnRpYWxNYXAo
KS5zZXQoaXRlci0+c2Vjb25kLCBjcmVkZW50aWFsKTsKKyAgICBwcm90ZWN0aW9uU3BhY2VUb0Ny
ZWRlbnRpYWxNYXAoKS5zZXQoaXRlci0+dmFsdWUsIGNyZWRlbnRpYWwpOwogICAgIHJldHVybiB0
cnVlOwogfQogCkBAIC0xNTYsNyArMTU2LDcgQEAgQ3JlZGVudGlhbCBDcmVkZW50aWFsU3RvcmFn
ZTo6Z2V0KGNvbnN0IEtVUkwmIHVybCkKICAgICBQYXRoVG9EZWZhdWx0UHJvdGVjdGlvblNwYWNl
TWFwOjppdGVyYXRvciBpdGVyID0gZmluZERlZmF1bHRQcm90ZWN0aW9uU3BhY2VGb3JVUkwodXJs
KTsKICAgICBpZiAoaXRlciA9PSBwYXRoVG9EZWZhdWx0UHJvdGVjdGlvblNwYWNlTWFwKCkuZW5k
KCkpCiAgICAgICAgIHJldHVybiBDcmVkZW50aWFsKCk7Ci0gICAgcmV0dXJuIHByb3RlY3Rpb25T
cGFjZVRvQ3JlZGVudGlhbE1hcCgpLmdldChpdGVyLT5zZWNvbmQpOworICAgIHJldHVybiBwcm90
ZWN0aW9uU3BhY2VUb0NyZWRlbnRpYWxNYXAoKS5nZXQoaXRlci0+dmFsdWUpOwogfQogCiB2b2lk
IENyZWRlbnRpYWxTdG9yYWdlOjpzZXRQcml2YXRlTW9kZShib29sIG1vZGUpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBIZWFkZXJNYXAuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQSGVhZGVyTWFwLmNwcAppbmRleCA1MDA5
MWUxOWQzYWY1NmZmNGE4ZGYxNzViZjg5Nzg3MDA3NjE0MjgwLi5kZWZlMWFlODRiZjBhZGYwNzc5
NDk1NWIxMWE1ZGM3M2VhMDIzZTI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL0hUVFBIZWFkZXJNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvSFRUUEhlYWRlck1hcC5jcHAKQEAgLTUyLDcgKzUyLDcgQEAgUGFzc093blB0cjxD
cm9zc1RocmVhZEhUVFBIZWFkZXJNYXBEYXRhPiBIVFRQSGVhZGVyTWFwOjpjb3B5RGF0YSgpIGNv
bnN0CiAKICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmRfaXQgPSBlbmQoKTsK
ICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYmVnaW4oKTsgaXQg
IT0gZW5kX2l0OyArK2l0KSB7Ci0gICAgICAgIGRhdGEtPmFwcGVuZChtYWtlX3BhaXIoaXQtPmZp
cnN0LnN0cmluZygpLmlzb2xhdGVkQ29weSgpLCBpdC0+c2Vjb25kLmlzb2xhdGVkQ29weSgpKSk7
CisgICAgICAgIGRhdGEtPmFwcGVuZChtYWtlX3BhaXIoaXQtPmtleS5zdHJpbmcoKS5pc29sYXRl
ZENvcHkoKSwgaXQtPnZhbHVlLmlzb2xhdGVkQ29weSgpKSk7CiAgICAgfQogICAgIHJldHVybiBk
YXRhLnJlbGVhc2UoKTsKIH0KQEAgLTEwMCw3ICsxMDAsNyBAQCBTdHJpbmcgSFRUUEhlYWRlck1h
cDo6Z2V0KGNvbnN0IGNoYXIqIG5hbWUpIGNvbnN0CiAgICAgY29uc3RfaXRlcmF0b3IgaSA9IGZp
bmQ8Y29uc3QgY2hhciosIENhc2VGb2xkaW5nQ1N0cmluZ1RyYW5zbGF0b3I+KG5hbWUpOwogICAg
IGlmIChpID09IGVuZCgpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgcmV0dXJuIGkt
PnNlY29uZDsKKyAgICByZXR1cm4gaS0+dmFsdWU7CiB9CiAgICAgCiBib29sIEhUVFBIZWFkZXJN
YXA6OmNvbnRhaW5zKGNvbnN0IGNoYXIqIG5hbWUpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL01JTUVIZWFkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9NSU1FSGVhZGVyLmNwcAppbmRleCA1ZDZiODU4ZjQ2ZTQzODNmY2Iy
ZmVhNjI4NThhZjc1MzJkNDNhNWFmLi5mNGUzZWJmNjc0ZGU2YmQxZDI0YTk1OTBhNDgxOGJlYjZm
ZDhkZTYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL01JTUVI
ZWFkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvTUlNRUhlYWRl
ci5jcHAKQEAgLTg2LDcgKzg2LDcgQEAgUGFzc1JlZlB0cjxNSU1FSGVhZGVyPiBNSU1FSGVhZGVy
OjpwYXJzZUhlYWRlcihTaGFyZWRCdWZmZXJDaHVua1JlYWRlciogYnVmZmVyKQogICAgIEtleVZh
bHVlTWFwOjppdGVyYXRvciBtaW1lUGFyYW1ldGVyc0l0ZXJhdG9yID0ga2V5VmFsdWVQYWlycy5m
aW5kKCJjb250ZW50LXR5cGUiKTsKICAgICBpZiAobWltZVBhcmFtZXRlcnNJdGVyYXRvciAhPSBr
ZXlWYWx1ZVBhaXJzLmVuZCgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBtYWtlIENvbnRlbnRUeXBl
UGFyc2VyIG1vcmUgZmxleGlibGUgc28gd2UgZG9uJ3QgaGF2ZSB0byBzeW50aGVzaXplIHRoZSAi
Q29udGVudC1UeXBlOiIuCi0gICAgICAgIENvbnRlbnRUeXBlUGFyc2VyIGNvbnRlbnRUeXBlUGFy
c2VyKG1ha2VTdHJpbmcoIkNvbnRlbnQtVHlwZToiLCBtaW1lUGFyYW1ldGVyc0l0ZXJhdG9yLT5z
ZWNvbmQpKTsKKyAgICAgICAgQ29udGVudFR5cGVQYXJzZXIgY29udGVudFR5cGVQYXJzZXIobWFr
ZVN0cmluZygiQ29udGVudC1UeXBlOiIsIG1pbWVQYXJhbWV0ZXJzSXRlcmF0b3ItPnZhbHVlKSk7
CiAgICAgICAgIG1pbWVIZWFkZXItPm1fY29udGVudFR5cGUgPSBjb250ZW50VHlwZVBhcnNlci5t
aW1lVHlwZSgpOwogICAgICAgICBpZiAoIW1pbWVIZWFkZXItPmlzTXVsdGlwYXJ0KCkpCiAgICAg
ICAgICAgICBtaW1lSGVhZGVyLT5tX2NoYXJzZXQgPSBjb250ZW50VHlwZVBhcnNlci5jaGFyc2V0
KCkuc3RyaXBXaGl0ZVNwYWNlKCk7CkBAIC0xMDUsMTEgKzEwNSwxMSBAQCBQYXNzUmVmUHRyPE1J
TUVIZWFkZXI+IE1JTUVIZWFkZXI6OnBhcnNlSGVhZGVyKFNoYXJlZEJ1ZmZlckNodW5rUmVhZGVy
KiBidWZmZXIpCiAKICAgICBtaW1lUGFyYW1ldGVyc0l0ZXJhdG9yID0ga2V5VmFsdWVQYWlycy5m
aW5kKCJjb250ZW50LXRyYW5zZmVyLWVuY29kaW5nIik7CiAgICAgaWYgKG1pbWVQYXJhbWV0ZXJz
SXRlcmF0b3IgIT0ga2V5VmFsdWVQYWlycy5lbmQoKSkKLSAgICAgICAgbWltZUhlYWRlci0+bV9j
b250ZW50VHJhbnNmZXJFbmNvZGluZyA9IHBhcnNlQ29udGVudFRyYW5zZmVyRW5jb2RpbmcobWlt
ZVBhcmFtZXRlcnNJdGVyYXRvci0+c2Vjb25kKTsKKyAgICAgICAgbWltZUhlYWRlci0+bV9jb250
ZW50VHJhbnNmZXJFbmNvZGluZyA9IHBhcnNlQ29udGVudFRyYW5zZmVyRW5jb2RpbmcobWltZVBh
cmFtZXRlcnNJdGVyYXRvci0+dmFsdWUpOwogCiAgICAgbWltZVBhcmFtZXRlcnNJdGVyYXRvciA9
IGtleVZhbHVlUGFpcnMuZmluZCgiY29udGVudC1sb2NhdGlvbiIpOwogICAgIGlmIChtaW1lUGFy
YW1ldGVyc0l0ZXJhdG9yICE9IGtleVZhbHVlUGFpcnMuZW5kKCkpCi0gICAgICAgIG1pbWVIZWFk
ZXItPm1fY29udGVudExvY2F0aW9uID0gbWltZVBhcmFtZXRlcnNJdGVyYXRvci0+c2Vjb25kOwor
ICAgICAgICBtaW1lSGVhZGVyLT5tX2NvbnRlbnRMb2NhdGlvbiA9IG1pbWVQYXJhbWV0ZXJzSXRl
cmF0b3ItPnZhbHVlOwogCiAgICAgcmV0dXJuIG1pbWVIZWFkZXIucmVsZWFzZSgpOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNwcApp
bmRleCA3ZGRjNDdlNGVhNzk5YTQ2ZGVlNmYzMmNmZDA3OGVmNzUxNTRmMWVlLi42ZDEyZjlkODli
MDI0Nzc0NmE1N2UxYmJjYWZiMmMyMTdkNTkxMDM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNwcApAQCAtNzEsNyArNzEsNyBAQCBQ
YXNzUmVmUHRyPFJlc291cmNlSGFuZGxlPiBSZXNvdXJjZUhhbmRsZTo6Y3JlYXRlKE5ldHdvcmtp
bmdDb250ZXh0KiBjb250ZXh0LCBjbwogICAgIEJ1aWx0aW5SZXNvdXJjZUhhbmRsZUNvbnN0cnVj
dG9yTWFwOjppdGVyYXRvciBwcm90b2NvbE1hcEl0ZW0gPSBidWlsdGluUmVzb3VyY2VIYW5kbGVD
b25zdHJ1Y3Rvck1hcCgpLmZpbmQocmVxdWVzdC51cmwoKS5wcm90b2NvbCgpKTsKIAogICAgIGlm
IChwcm90b2NvbE1hcEl0ZW0gIT0gYnVpbHRpblJlc291cmNlSGFuZGxlQ29uc3RydWN0b3JNYXAo
KS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHByb3RvY29sTWFwSXRlbS0+c2Vjb25kKHJlcXVlc3Qs
IGNsaWVudCk7CisgICAgICAgIHJldHVybiBwcm90b2NvbE1hcEl0ZW0tPnZhbHVlKHJlcXVlc3Qs
IGNsaWVudCk7CiAKICAgICBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IG5ld0hhbmRsZShhZG9wdFJl
ZihuZXcgUmVzb3VyY2VIYW5kbGUocmVxdWVzdCwgY2xpZW50LCBkZWZlcnNMb2FkaW5nLCBzaG91
bGRDb250ZW50U25pZmYpKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwCmluZGV4IDAwZjU4MzkwNTU5NDcxZWI3
ZTRmNjNkNWFkY2FhZjZlYWFlZDViNmMuLmMyNjUyNzE0NGJmM2ZiZWE4MzQ5YWMxMjJhM2JiNTE1
ZTQ0YWU3YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVz
b3VyY2VSZXF1ZXN0QmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcApAQCAtMzc0LDcgKzM3NCw3IEBAIHZvaWQgUmVzb3Vy
Y2VSZXF1ZXN0QmFzZTo6YWRkSFRUUEhlYWRlckZpZWxkKGNvbnN0IEF0b21pY1N0cmluZyYgbmFt
ZSwgY29uc3QgU3RyCiAgICAgdXBkYXRlUmVzb3VyY2VSZXF1ZXN0KCk7CiAgICAgSFRUUEhlYWRl
ck1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1faHR0cEhlYWRlckZpZWxkcy5hZGQobmFtZSwgdmFs
dWUpOwogICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJlc3VsdC5pdGVyYXRv
ci0+c2Vjb25kID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgKyAnLCcgKyB2YWx1ZTsKKyAgICAg
ICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgKyAnLCcg
KyB2YWx1ZTsKIAogICAgIGlmICh1cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpCiAgICAg
ICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZhbHNlOwpAQCAtMzg0LDcgKzM4NCw3IEBA
IHZvaWQgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6YWRkSFRUUEhlYWRlckZpZWxkcyhjb25zdCBIVFRQ
SGVhZGVyTWFwJiBoZWFkZXJGaWVsZHMpCiB7CiAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gaGVhZGVyRmllbGRzLmVuZCgpOwogICAgIGZvciAoSFRUUEhlYWRlck1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBoZWFkZXJGaWVsZHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KQotICAgICAgICBhZGRIVFRQSGVhZGVyRmllbGQoaXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsKKyAg
ICAgICAgYWRkSFRUUEhlYWRlckZpZWxkKGl0LT5rZXksIGl0LT52YWx1ZSk7CiB9CiAKIGJvb2wg
ZXF1YWxJZ25vcmluZ0hlYWRlckZpZWxkcyhjb25zdCBSZXNvdXJjZVJlcXVlc3RCYXNlJiBhLCBj
b25zdCBSZXNvdXJjZVJlcXVlc3RCYXNlJiBiKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlUmVxdWVzdEJsYWNrQmVycnkuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlUmVx
dWVzdEJsYWNrQmVycnkuY3BwCmluZGV4IGVlZmQ1YTVlNDczNjBjNzE4OThjZmQzZWIwNjE2MmFk
MWJmNTU3NjYuLjc1N2JkM2UyNDMwNGY3NDNjMWUzOWNjYTc4NGQ0OGZmODNlYzAzYzMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJj
ZVJlcXVlc3RCbGFja0JlcnJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2JsYWNrYmVycnkvUmVzb3VyY2VSZXF1ZXN0QmxhY2tCZXJyeS5jcHAKQEAgLTEzOSw3ICsx
MzksNyBAQCBSZXNvdXJjZVJlcXVlc3Q6OlRhcmdldFR5cGUgUmVzb3VyY2VSZXF1ZXN0Ojp0YXJn
ZXRUeXBlRnJvbU1pbWVUeXBlKGNvbnN0IFN0cmluZwogICAgIGlmIChpdGVyID09IG1hcC5lbmQo
KSkKICAgICAgICAgcmV0dXJuIFJlc291cmNlUmVxdWVzdDo6VGFyZ2V0SXNVbnNwZWNpZmllZDsK
IAotICAgIHJldHVybiBpdGVyLT5zZWNvbmQ7CisgICAgcmV0dXJuIGl0ZXItPnZhbHVlOwogfQog
CiB2b2lkIFJlc291cmNlUmVxdWVzdDo6aW5pdGlhbGl6ZVBsYXRmb3JtUmVxdWVzdChOZXR3b3Jr
UmVxdWVzdCYgcGxhdGZvcm1SZXF1ZXN0LCBib29sIGNvb2tpZXNFbmFibGVkLCBib29sIGlzSW5p
dGlhbCwgYm9vbCBpc1JlZGlyZWN0KSBjb25zdApAQCAtMTk3LDggKzE5Nyw4IEBAIHZvaWQgUmVz
b3VyY2VSZXF1ZXN0Ojppbml0aWFsaXplUGxhdGZvcm1SZXF1ZXN0KE5ldHdvcmtSZXF1ZXN0JiBw
bGF0Zm9ybVJlcXVlc3QsCiAgICAgICAgIGJvb2wgY29va2llSGVhZGVyTWF5QmVEaXJ0eSA9IGlz
UmVkaXJlY3QgfHwgY2FjaGVQb2xpY3koKSA9PSBXZWJDb3JlOjpSZWxvYWRJZ25vcmluZ0NhY2hl
RGF0YSB8fCBjYWNoZVBvbGljeSgpID09IFdlYkNvcmU6OlJldHVybkNhY2hlRGF0YUVsc2VMb2Fk
OwogCiAgICAgICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBodHRw
SGVhZGVyRmllbGRzKCkuYmVnaW4oKTsgaXQgIT0gaHR0cEhlYWRlckZpZWxkcygpLmVuZCgpOyAr
K2l0KSB7Ci0gICAgICAgICAgICBTdHJpbmcga2V5ID0gaXQtPmZpcnN0OwotICAgICAgICAgICAg
U3RyaW5nIHZhbHVlID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIFN0cmluZyBrZXkgPSBpdC0+
a2V5OworICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0gaXQtPnZhbHVlOwogICAgICAgICAgICAg
aWYgKCFrZXkuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdD
YXNlKGtleSwgIkNvb2tpZSIpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFdlIHdvbid0IHVz
ZSB0aGUgb2xkIGNvb2tpZXMgb2YgcmVzb3VyY2VSZXF1ZXN0IGZvciBuZXcgbG9jYXRpb24gYmVj
YXVzZSB0aGVzZSBjb29raWVzIG1heSBiZSBjaGFuZ2VkIGJ5IHJlZGlyZWN0aW9uLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNG
TmV0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5k
bGVDRk5ldC5jcHAKaW5kZXggZjZkMWYzODIxMjYyZjE5NTA0MTU1OWEyNTZjMDJiZDZiZDc4Mjll
NS4uMDFlOGI4YWU1YzBkMWM2YTZhOGYwMzMwODVlOTBmMDEwYmMxZjdjNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlSGFuZGxl
Q0ZOZXQuY3BwCkBAIC00MjgsNyArNDI4LDcgQEAgc3RhdGljIENGVVJMUmVxdWVzdFJlZiBtYWtl
RmluYWxSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgYm9vbCBzaG8KICAg
ICAgICAgaWYgKCFzc2xQcm9wcykKICAgICAgICAgICAgIHNzbFByb3BzLmFkb3B0Q0YoQ0ZEaWN0
aW9uYXJ5Q3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwLCAma0NGVHlwZURpY3Rp
b25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CiAj
aWYgUExBVEZPUk0oV0lOKQotICAgICAgICB3a1NldENsaWVudENlcnRpZmljYXRlSW5TU0xQcm9w
ZXJ0aWVzKHNzbFByb3BzLmdldCgpLCAoY2xpZW50Q2VydC0+c2Vjb25kKS5nZXQoKSk7CisgICAg
ICAgIHdrU2V0Q2xpZW50Q2VydGlmaWNhdGVJblNTTFByb3BlcnRpZXMoc3NsUHJvcHMuZ2V0KCks
IChjbGllbnRDZXJ0LT52YWx1ZSkuZ2V0KCkpOwogI2VuZGlmCiAgICAgfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlUmVxdWVzdENGTmV0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0
Q0ZOZXQuY3BwCmluZGV4IDU3YTZmYjJjOGE0YzA4Zjc5ZmJkNGI5YmM1NWI4NWE5MzQyNjdhMzcu
LjhjZmY4N2NhMGQ1OGVhMmU1MjNmMzczMGQ2YjRhNzczMGIwNmJlNGIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0Q0ZOZXQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0
Q0ZOZXQuY3BwCkBAIC0xMjAsOCArMTIwLDggQEAgc3RhdGljIGlubGluZSB2b2lkIHNldEhlYWRl
ckZpZWxkcyhDRk11dGFibGVVUkxSZXF1ZXN0UmVmIHJlcXVlc3QsIGNvbnN0IEhUVFBIZWEKIAog
ICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHJlcXVlc3RIZWFkZXJzLmVu
ZCgpOwogICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSByZXF1ZXN0
SGVhZGVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgQ0ZTdHJpbmdSZWYg
a2V5ID0gaXQtPmZpcnN0LmNyZWF0ZUNGU3RyaW5nKCk7Ci0gICAgICAgIENGU3RyaW5nUmVmIHZh
bHVlID0gaXQtPnNlY29uZC5jcmVhdGVDRlN0cmluZygpOworICAgICAgICBDRlN0cmluZ1JlZiBr
ZXkgPSBpdC0+a2V5LmNyZWF0ZUNGU3RyaW5nKCk7CisgICAgICAgIENGU3RyaW5nUmVmIHZhbHVl
ID0gaXQtPnZhbHVlLmNyZWF0ZUNGU3RyaW5nKCk7CiAgICAgICAgIENGVVJMUmVxdWVzdFNldEhU
VFBIZWFkZXJGaWVsZFZhbHVlKHJlcXVlc3QsIGtleSwgdmFsdWUpOwogICAgICAgICBDRlJlbGVh
c2Uoa2V5KTsKICAgICAgICAgQ0ZSZWxlYXNlKHZhbHVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1hbmFnZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdl
ci5jcHAKaW5kZXggYWYwNzVlZjllMzIxODhlNzcxNDk3ZWJmN2M3NGRjMWFhMTVlMjE3YS4uNjVi
Y2MxMGFkM2QyMDA1ZDY4OWQ3M2U4ZGQ2Nzk4OGI5YzVjYjVkNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxl
TWFuYWdlci5jcHAKQEAgLTcwMyw4ICs3MDMsOCBAQCB2b2lkIFJlc291cmNlSGFuZGxlTWFuYWdl
cjo6aW5pdGlhbGl6ZUhhbmRsZShSZXNvdXJjZUhhbmRsZSogam9iKQogICAgICAgICBIVFRQSGVh
ZGVyTWFwIGN1c3RvbUhlYWRlcnMgPSBqb2ItPmZpcnN0UmVxdWVzdCgpLmh0dHBIZWFkZXJGaWVs
ZHMoKTsKICAgICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY3VzdG9t
SGVhZGVycy5lbmQoKTsKICAgICAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IGN1c3RvbUhlYWRlcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAg
ICAgICBTdHJpbmcga2V5ID0gaXQtPmZpcnN0OwotICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0g
aXQtPnNlY29uZDsKKyAgICAgICAgICAgIFN0cmluZyBrZXkgPSBpdC0+a2V5OworICAgICAgICAg
ICAgU3RyaW5nIHZhbHVlID0gaXQtPnZhbHVlOwogICAgICAgICAgICAgU3RyaW5nIGhlYWRlclN0
cmluZyhrZXkpOwogICAgICAgICAgICAgaGVhZGVyU3RyaW5nLmFwcGVuZCgiOiAiKTsKICAgICAg
ICAgICAgIGhlYWRlclN0cmluZy5hcHBlbmQodmFsdWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VSZXF1ZXN0TWFjLm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VSZXF1ZXN0TWFjLm1tCmluZGV4
IDk2YzQ5N2Q1MDNiNTQ3ZTNiMDFhOWEyNTJhNThmYzJlZWYzZjk0NDQuLjkzMjE2Y2I1NWU4NTc3
MzEzNmYzZThjM2EwN2NlNmZiNTU2ZTA2ZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlUmVxdWVzdE1hYy5tbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZVJlcXVlc3RNYWMubW0KQEAgLTE1NSw3
ICsxNTUsNyBAQCB2b2lkIFJlc291cmNlUmVxdWVzdDo6ZG9VcGRhdGVQbGF0Zm9ybVJlcXVlc3Qo
KQogICAgICAgICBbbnNSZXF1ZXN0IHNldFZhbHVlOm5pbCBmb3JIVFRQSGVhZGVyRmllbGQ6W29s
ZEhlYWRlckZpZWxkTmFtZXMgb2JqZWN0QXRJbmRleDppIC0gMV1dOwogICAgIEhUVFBIZWFkZXJN
YXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGh0dHBIZWFkZXJGaWVsZHMoKS5lbmQoKTsKICAgICBm
b3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaHR0cEhlYWRlckZpZWxkcygp
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgW25zUmVxdWVzdCBzZXRWYWx1ZTpp
dC0+c2Vjb25kIGZvckhUVFBIZWFkZXJGaWVsZDppdC0+Zmlyc3RdOworICAgICAgICBbbnNSZXF1
ZXN0IHNldFZhbHVlOml0LT52YWx1ZSBmb3JIVFRQSGVhZGVyRmllbGQ6aXQtPmtleV07CiAKICAg
ICAvLyBUaGUgYmVsb3cgY2hlY2sgY2FuIGJlIHJlbW92ZWQgb25jZSB3ZSByZXF1aXJlIGEgdmVy
c2lvbiBvZiBGb3VuZGF0aW9uIHdpdGggLVtOU011dGFibGVVUkxSZXF1ZXN0IHNldENvbnRlbnRE
aXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheTpdIG1ldGhvZC4KICAgICBzdGF0aWMgYm9v
bCBzdXBwb3J0c0NvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheSA9IFtOU011
dGFibGVVUkxSZXF1ZXN0IGluc3RhbmNlc1Jlc3BvbmRUb1NlbGVjdG9yOkBzZWxlY3RvcihzZXRD
b250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXk6KV07CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3F0L1Jlc291cmNlUmVxdWVzdFF0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvcXQvUmVzb3VyY2VSZXF1ZXN0UXQuY3Bw
CmluZGV4IGRiYjdiNzRkZDU5YzRmNGQwZjJlY2VjZmRiZTA4MTNkMjhiNzRhM2UuLmU4NGU2Nzdh
NWY3MmM3MWU4OWM2MDBmZDc3NzAwYmI2ODIyMTRjMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvcXQvUmVzb3VyY2VSZXF1ZXN0UXQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvcXQvUmVzb3VyY2VSZXF1ZXN0UXQuY3BwCkBAIC00
OSw4ICs0OSw4IEBAIFFOZXR3b3JrUmVxdWVzdCBSZXNvdXJjZVJlcXVlc3Q6OnRvTmV0d29ya1Jl
cXVlc3QoTmV0d29ya2luZ0NvbnRleHQgKmNvbnRleHQpIGNvCiAgICAgY29uc3QgSFRUUEhlYWRl
ck1hcCAmaGVhZGVycyA9IGh0dHBIZWFkZXJGaWVsZHMoKTsKICAgICBmb3IgKEhUVFBIZWFkZXJN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaGVhZGVycy5iZWdpbigpLCBlbmQgPSBoZWFkZXJzLmVu
ZCgpOwogICAgICAgICAgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFFCeXRlQXJyYXkgbmFt
ZSA9IFFTdHJpbmcoaXQtPmZpcnN0KS50b0xhdGluMSgpOwotICAgICAgICBRQnl0ZUFycmF5IHZh
bHVlID0gUVN0cmluZyhpdC0+c2Vjb25kKS50b0xhdGluMSgpOworICAgICAgICBRQnl0ZUFycmF5
IG5hbWUgPSBRU3RyaW5nKGl0LT5rZXkpLnRvTGF0aW4xKCk7CisgICAgICAgIFFCeXRlQXJyYXkg
dmFsdWUgPSBRU3RyaW5nKGl0LT52YWx1ZSkudG9MYXRpbjEoKTsKICAgICAgICAgLy8gUU5ldHdv
cmtSZXF1ZXN0OjpzZXRSYXdIZWFkZXIoKSB3b3VsZCByZW1vdmUgdGhlIGhlYWRlciBpZiB0aGUg
dmFsdWUgaXMgbnVsbAogICAgICAgICAvLyBNYWtlIHN1cmUgdG8gc2V0IGFuIGVtcHR5IGhlYWRl
ciBpbnN0ZWFkIG9mIG51bGwgaGVhZGVyLgogICAgICAgICBpZiAoIXZhbHVlLmlzTnVsbCgpKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNl
SGFuZGxlU291cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVz
b3VyY2VIYW5kbGVTb3VwLmNwcAppbmRleCA1MWM5MThkZjI1NTg2Njg2ZjQ5MjI5YTdjNTYyMDg4
Mjk2ZDBmMmU3Li41ODViYzAxYjdjMTQ4YWY2YzM3MWFkNGMwNWQ4YjdhZGJhZjMxMGMxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5k
bGVTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVz
b3VyY2VIYW5kbGVTb3VwLmNwcApAQCAtNDQ4LDcgKzQ0OCw3IEBAIHN0YXRpYyB2b2lkIHNlbmRS
ZXF1ZXN0Q2FsbGJhY2soR09iamVjdCosIEdBc3luY1Jlc3VsdCogcmVzLCBncG9pbnRlciBkYXRh
KQogCiAgICAgICAgIGlmIChoYXNVbmlnbm9yZWRUTFNFcnJvcnMoaGFuZGxlLmdldCgpKSkgewog
ICAgICAgICAgICAgQ2VydGlmaWNhdGVzTWFwOjppdGVyYXRvciBpdGVyID0gY2xpZW50Q2VydGlm
aWNhdGVzKCkuZmluZChoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVybCgpLmhvc3QoKS5sb3dlcigp
KTsKLSAgICAgICAgICAgIGlmIChpdGVyID09IGNsaWVudENlcnRpZmljYXRlcygpLmVuZCgpIHx8
ICFpdGVyLT5zZWNvbmQuY29udGFpbnMoZC0+bV9yZXNwb25zZS5zb3VwTWVzc2FnZUNlcnRpZmlj
YXRlKCkpKSB7CisgICAgICAgICAgICBpZiAoaXRlciA9PSBjbGllbnRDZXJ0aWZpY2F0ZXMoKS5l
bmQoKSB8fCAhaXRlci0+dmFsdWUuY29udGFpbnMoZC0+bV9yZXNwb25zZS5zb3VwTWVzc2FnZUNl
cnRpZmljYXRlKCkpKSB7CiAgICAgICAgICAgICAgICAgR093blB0cjxjaGFyPiB1cmkoc291cF91
cmlfdG9fc3RyaW5nKHNvdXBfcmVxdWVzdF9nZXRfdXJpKGQtPm1fc291cFJlcXVlc3QuZ2V0KCkp
LCBGQUxTRSkpOwogICAgICAgICAgICAgICAgIGNsaWVudC0+ZGlkRmFpbChoYW5kbGUuZ2V0KCks
IFJlc291cmNlRXJyb3IoZ19xdWFya190b19zdHJpbmcoU09VUF9IVFRQX0VSUk9SKSwgU09VUF9T
VEFUVVNfU1NMX0ZBSUxFRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVyaS5nZXQoKSwgdW5hY2NlcHRhYmxlVExTQ2VydGlmaWNh
dGUoKSwKQEAgLTgxOSw3ICs4MTksNyBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpzZXRIb3N0QWxs
b3dzQW55SFRUUFNDZXJ0aWZpY2F0ZShjb25zdCBTdHJpbmcmIGhvc3QpCiAKIHZvaWQgUmVzb3Vy
Y2VIYW5kbGU6OnNldENsaWVudENlcnRpZmljYXRlKGNvbnN0IFN0cmluZyYgaG9zdCwgR1Rsc0Nl
cnRpZmljYXRlKiBjZXJ0aWZpY2F0ZSkKIHsKLSAgICBjbGllbnRDZXJ0aWZpY2F0ZXMoKS5hZGQo
aG9zdC5sb3dlcigpLCBIb3N0VExTQ2VydGlmaWNhdGVTZXQoKSkuaXRlcmF0b3ItPnNlY29uZC5h
ZGQoY2VydGlmaWNhdGUpOworICAgIGNsaWVudENlcnRpZmljYXRlcygpLmFkZChob3N0Lmxvd2Vy
KCksIEhvc3RUTFNDZXJ0aWZpY2F0ZVNldCgpKS5pdGVyYXRvci0+dmFsdWUuYWRkKGNlcnRpZmlj
YXRlKTsKIH0KIAogdm9pZCBSZXNvdXJjZUhhbmRsZTo6c2V0SWdub3JlU1NMRXJyb3JzKGJvb2wg
aWdub3JlU1NMRXJyb3JzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9zb3VwL1Jlc291cmNlUmVxdWVzdFNvdXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVzdFNvdXAuY3BwCmluZGV4IGRkZmExYzM4ZGVl
NGIzZTk2Mjk4MzFkNmExYjk0ODdjNjNlMDhiNjkuLjI4YTE5NTk1NzljYjg4NzNmOTNmZTkyYjdm
ODE3ZTFhYWNkZTRkMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvc291cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0U291cC5jcHAKQEAgLTQzLDcgKzQzLDcg
QEAgdm9pZCBSZXNvdXJjZVJlcXVlc3Q6OnVwZGF0ZVNvdXBNZXNzYWdlKFNvdXBNZXNzYWdlKiBz
b3VwTWVzc2FnZSkgY29uc3QKICAgICBpZiAoIWhlYWRlcnMuaXNFbXB0eSgpKSB7CiAgICAgICAg
IEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGhlYWRlcnMuZW5kKCk7CiAgICAg
ICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBoZWFkZXJzLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2Fw
cGVuZChzb3VwSGVhZGVycywgaXQtPmZpcnN0LnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGl0LT5z
ZWNvbmQudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19h
cHBlbmQoc291cEhlYWRlcnMsIGl0LT5rZXkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgaXQtPnZh
bHVlLnV0ZjgoKS5kYXRhKCkpOwogICAgIH0KIAogICAgIFN0cmluZyBmaXJzdFBhcnR5U3RyaW5n
ID0gZmlyc3RQYXJ0eUZvckNvb2tpZXMoKS5zdHJpbmcoKTsKQEAgLTY2LDcgKzY2LDcgQEAgU291
cE1lc3NhZ2UqIFJlc291cmNlUmVxdWVzdDo6dG9Tb3VwTWVzc2FnZSgpIGNvbnN0CiAgICAgaWYg
KCFoZWFkZXJzLmlzRW1wdHkoKSkgewogICAgICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVy
YXRvciBlbmQgPSBoZWFkZXJzLmVuZCgpOwogICAgICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gaGVhZGVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAg
ICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQoc291cEhlYWRlcnMsIGl0LT5maXJz
dC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBpdC0+c2Vjb25kLnV0ZjgoKS5kYXRhKCkpOworICAg
ICAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKHNvdXBIZWFkZXJzLCBpdC0+a2V5
LnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGl0LT52YWx1ZS51dGY4KCkuZGF0YSgpKTsKICAgICB9
CiAKICAgICBTdHJpbmcgZmlyc3RQYXJ0eVN0cmluZyA9IGZpcnN0UGFydHlGb3JDb29raWVzKCku
c3RyaW5nKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvUmVzb3VyY2VSZXNwb25zZVNvdXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9zb3VwL1Jlc291cmNlUmVzcG9uc2VTb3VwLmNwcAppbmRleCBiN2MwNDhmYTFlYzAwZmU3
MDhkN2RjYWU5OWZjNWRiN2VjNzkwODNkLi5jZGVmN2VlOGZjYzFlNWY0YTllYzlkZjNmYWU1ZGMz
ODVlMzk0ZTU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvUmVzb3VyY2VSZXNwb25zZVNvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvc291cC9SZXNvdXJjZVJlc3BvbnNlU291cC5jcHAKQEAgLTQ2LDcgKzQ2LDcgQEAg
U291cE1lc3NhZ2UqIFJlc291cmNlUmVzcG9uc2U6OnRvU291cE1lc3NhZ2UoKSBjb25zdAogICAg
IGlmICghaGVhZGVycy5pc0VtcHR5KCkpIHsKICAgICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gaGVhZGVycy5lbmQoKTsKICAgICAgICAgZm9yIChIVFRQSGVhZGVyTWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IGhlYWRlcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQot
ICAgICAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKHNvdXBIZWFkZXJzLCBpdC0+
Zmlyc3Quc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgaXQtPnNlY29uZC51dGY4KCkuZGF0YSgpKTsK
KyAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChzb3VwSGVhZGVycywgaXQt
PmtleS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBpdC0+dmFsdWUudXRmOCgpLmRhdGEoKSk7CiAg
ICAgfQogCiAgICAgc291cF9tZXNzYWdlX3NldF9mbGFncyhzb3VwTWVzc2FnZSwgbV9zb3VwRmxh
Z3MpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay93aW4vUmVz
b3VyY2VIYW5kbGVXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay93aW4v
UmVzb3VyY2VIYW5kbGVXaW4uY3BwCmluZGV4IDAyMTJkMGNkYTk4YzlmMTM3OTI4ZTYxMmZkZjk1
MDM2NWEwMWQwZDYuLmYyNTA1Mjc3NWIwZGVkZmUyMWM3NTVkM2Y4Mzk5ODUzZTdhMGYzOTcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvd2luL1Jlc291cmNlSGFu
ZGxlV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3dpbi9SZXNv
dXJjZUhhbmRsZVdpbi5jcHAKQEAgLTMyMywxNSArMzIzLDE1IEBAIGJvb2wgUmVzb3VyY2VIYW5k
bGU6OnN0YXJ0KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0KQogICAgIGNvbnN0IEhUVFBIZWFk
ZXJNYXAmIGh0dHBIZWFkZXJGaWVsZHMgPSBmaXJzdFJlcXVlc3QoKS5odHRwSGVhZGVyRmllbGRz
KCk7CiAKICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaHR0cEhl
YWRlckZpZWxkcy5iZWdpbigpOyBpdCAhPSBodHRwSGVhZGVyRmllbGRzLmVuZCgpOyArK2l0KSB7
Ci0gICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShpdC0+Zmlyc3QsICJBY2NlcHQiKSB8fCBl
cXVhbElnbm9yaW5nQ2FzZShpdC0+Zmlyc3QsICJSZWZlcmVyIikgfHwgZXF1YWxJZ25vcmluZ0Nh
c2UoaXQtPmZpcnN0LCAiVXNlci1BZ2VudCIpKQorICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nh
c2UoaXQtPmtleSwgIkFjY2VwdCIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKGl0LT5rZXksICJSZWZl
cmVyIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UoaXQtPmtleSwgIlVzZXItQWdlbnQiKSkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIGlmICghaHR0cEhlYWRlcnMuaXNFbXB0eSgpKQog
ICAgICAgICAgICAgaHR0cEhlYWRlcnMuYXBwZW5kKCdcbicpOwogCi0gICAgICAgIGh0dHBIZWFk
ZXJzLmFwcGVuZChpdC0+Zmlyc3QuY2hhcmFjdGVycygpLCBpdC0+Zmlyc3QubGVuZ3RoKCkpOwor
ICAgICAgICBodHRwSGVhZGVycy5hcHBlbmQoaXQtPmtleS5jaGFyYWN0ZXJzKCksIGl0LT5rZXku
bGVuZ3RoKCkpOwogICAgICAgICBodHRwSGVhZGVycy5hcHBlbmQoJzonKTsKLSAgICAgICAgaHR0
cEhlYWRlcnMuYXBwZW5kKGl0LT5zZWNvbmQuY2hhcmFjdGVycygpLCBpdC0+c2Vjb25kLmxlbmd0
aCgpKTsKKyAgICAgICAgaHR0cEhlYWRlcnMuYXBwZW5kKGl0LT52YWx1ZS5jaGFyYWN0ZXJzKCks
IGl0LT52YWx1ZS5sZW5ndGgoKSk7CiAgICAgfQogCiAgICAgSU5URVJORVRfQlVGRkVSU1cgaW50
ZXJuZXRCdWZmZXJzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUnVu
TG9vcFF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1J1bkxvb3BRdC5jcHAKaW5k
ZXggMmE4N2UyZmM4ZjY2Nzc3NjlmNzMxNDNlNTcxZTA5YzVhNTRjNmViYS4uNTAxYmQ1YzEyM2Iw
ZjAzY2U5YTBjZjkwZTE3MjY5MWY1MDZkOWExYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vcXQvUnVuTG9vcFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9x
dC9SdW5Mb29wUXQuY3BwCkBAIC0xMDksNyArMTA5LDcgQEAgdm9pZCBSdW5Mb29wOjpUaW1lckJh
c2U6OnRpbWVyRmlyZWQoUnVuTG9vcCogcnVuTG9vcCwgaW50IElEKQogewogICAgIFRpbWVyTWFw
OjppdGVyYXRvciBpdCA9IHJ1bkxvb3AtPm1fYWN0aXZlVGltZXJzLmZpbmQoSUQpOwogICAgIEFT
U0VSVChpdCAhPSBydW5Mb29wLT5tX2FjdGl2ZVRpbWVycy5lbmQoKSk7Ci0gICAgVGltZXJCYXNl
KiB0aW1lciA9IGl0LT5zZWNvbmQ7CisgICAgVGltZXJCYXNlKiB0aW1lciA9IGl0LT52YWx1ZTsK
IAogICAgIGlmICghdGltZXItPm1faXNSZXBlYXRpbmcpIHsKICAgICAgICAgLy8gU3RvcCB0aGUg
dGltZXIgKGNhbGxpbmcgc3RvcCB3b3VsZCBuZWVkIGFub3RoZXIgaGFzaCB0YWJsZSBsb29rdXAp
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Mb2NhbGVUb1Njcmlw
dE1hcHBpbmdEZWZhdWx0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9jYWxl
VG9TY3JpcHRNYXBwaW5nRGVmYXVsdC5jcHAKaW5kZXggOTA5NDczODQ5Njk2YjRjMjkyZDZiOWFj
Mjg1YmM3ZDlmNGFjMjg0MS4uNTgyNjQ5MDdkNWU0MGEwMDliNDBmZDY5OTE4MGYzM2VmN2Q1MTdj
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Mb2NhbGVUb1Njcmlw
dE1hcHBpbmdEZWZhdWx0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0xv
Y2FsZVRvU2NyaXB0TWFwcGluZ0RlZmF1bHQuY3BwCkBAIC0xNjYsNyArMTY2LDcgQEAgVVNjcmlw
dENvZGUgc2NyaXB0TmFtZVRvQ29kZShjb25zdCBTdHJpbmcmIHNjcmlwdE5hbWUpCiAKICAgICBI
YXNoTWFwPFN0cmluZywgVVNjcmlwdENvZGU+OjppdGVyYXRvciBpdCA9IHNjcmlwdE5hbWVDb2Rl
TWFwLmZpbmQoc2NyaXB0TmFtZS5sb3dlcigpKTsKICAgICBpZiAoaXQgIT0gc2NyaXB0TmFtZUNv
ZGVNYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgICAgICByZXR1cm4g
aXQtPnZhbHVlOwogICAgIHJldHVybiBVU0NSSVBUX0lOVkFMSURfQ09ERTsKIH0KIApAQCAtMzg5
LDcgKzM4OSw3IEBAIFVTY3JpcHRDb2RlIGxvY2FsZVRvU2NyaXB0Q29kZUZvckZvbnRTZWxlY3Rp
b24oY29uc3QgU3RyaW5nJiBsb2NhbGUpCiAgICAgd2hpbGUgKCFjYW5vbmljYWxMb2NhbGUuaXNF
bXB0eSgpKSB7CiAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBVU2NyaXB0Q29kZT46Oml0ZXJhdG9y
IGl0ID0gbG9jYWxlU2NyaXB0TWFwLmZpbmQoY2Fub25pY2FsTG9jYWxlKTsKICAgICAgICAgaWYg
KGl0ICE9IGxvY2FsZVNjcmlwdE1hcC5lbmQoKSkKLSAgICAgICAgICAgIHJldHVybiBpdC0+c2Vj
b25kOworICAgICAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKICAgICAgICAgc2l6ZV90IHBvcyA9
IGNhbm9uaWNhbExvY2FsZS5yZXZlcnNlRmluZCgnXycpOwogICAgICAgICBpZiAocG9zID09IG5v
dEZvdW5kKQogICAgICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnkuY3BwCmluZGV4IDQxNDBhMzg3MjkyODkw
ZTVkOGRlM2Q0MmU1MWI2NjVkZDE4ZGZjNjkuLjI3OTAyMjdmYWU5MTg1MjU4ZDJlMTYwNTJkMTM4
ODlkNWRiNmFjOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4
dEVuY29kaW5nUmVnaXN0cnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQv
VGV4dEVuY29kaW5nUmVnaXN0cnkuY3BwCkBAIC0xOTYsOCArMTk2LDggQEAgc3RhdGljIHZvaWQg
cHJ1bmVCbGFja2xpc3RlZENvZGVjcygpCiAgICAgICAgIFRleHRFbmNvZGluZ05hbWVNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gdGV4dEVuY29kaW5nTmFtZU1hcC0+YmVnaW4oKTsKICAgICAgICAg
VGV4dEVuY29kaW5nTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gdGV4dEVuY29kaW5nTmFt
ZU1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAg
ICAgIGlmIChpdC0+c2Vjb25kID09IGF0b21pY05hbWUpCi0gICAgICAgICAgICAgICAgbmFtZXMu
YXBwZW5kKGl0LT5maXJzdCk7CisgICAgICAgICAgICBpZiAoaXQtPnZhbHVlID09IGF0b21pY05h
bWUpCisgICAgICAgICAgICAgICAgbmFtZXMuYXBwZW5kKGl0LT5rZXkpOwogICAgICAgICB9CiAK
ICAgICAgICAgc2l6ZV90IGxlbmd0aCA9IG5hbWVzLnNpemUoKTsKQEAgLTM5MSw3ICszOTEsNyBA
QCB2b2lkIGR1bXBUZXh0RW5jb2RpbmdOYW1lTWFwKCkKICAgICBUZXh0RW5jb2RpbmdOYW1lTWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IHRleHRFbmNvZGluZ05hbWVNYXAtPmJlZ2luKCk7CiAgICAg
VGV4dEVuY29kaW5nTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gdGV4dEVuY29kaW5nTmFt
ZU1hcC0+ZW5kKCk7CiAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgZnByaW50
ZihzdGRlcnIsICInJXMnID0+ICclcydcbiIsIGl0LT5maXJzdCwgaXQtPnNlY29uZCk7CisgICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiJyVzJyA9PiAnJXMnXG4iLCBpdC0+a2V5LCBpdC0+dmFsdWUp
OwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQv
dHJhbnNjb2Rlci9Gb250VHJhbnNjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L3RyYW5zY29kZXIvRm9udFRyYW5zY29kZXIuY3BwCmluZGV4IDRlMDdmNTBmYmRiMGM1N2Mz
ZWVjYTZmOGJlNzFmNzUwNWRiNTNiYzAuLjQ4NDIyOGNhYThlNzYwNzFiMzdhOWQyMGE5OTJkNTBh
MWQ0MWY0MGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvdHJhbnNj
b2Rlci9Gb250VHJhbnNjb2Rlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC90cmFuc2NvZGVyL0ZvbnRUcmFuc2NvZGVyLmNwcApAQCAtNjYsNyArNjYsNyBAQCBGb250VHJh
bnNjb2Rlcjo6Q29udmVydGVyVHlwZSBGb250VHJhbnNjb2Rlcjo6Y29udmVydGVyVHlwZShjb25z
dCBGb250RGVzY3JpcHRpbwogICAgIGlmICghZm9udEZhbWlseS5pc051bGwoKSkgewogICAgICAg
ICBIYXNoTWFwPEF0b21pY1N0cmluZywgQ29udmVydGVyVHlwZT46OmNvbnN0X2l0ZXJhdG9yIGZv
dW5kID0gbV9jb252ZXJ0ZXJUeXBlcy5maW5kKGZvbnRGYW1pbHkpOwogICAgICAgICBpZiAoZm91
bmQgIT0gbV9jb252ZXJ0ZXJUeXBlcy5lbmQoKSkKLSAgICAgICAgICAgIHJldHVybiBmb3VuZC0+
c2Vjb25kOworICAgICAgICAgICAgcmV0dXJuIGZvdW5kLT52YWx1ZTsKICAgICB9CiAKICAgICAv
LyBJRSdzIGRlZmF1bHQgZm9udHMgZm9yIEphcGFuZXNlIGVuY29kaW5ncyBjaGFuZ2UgYmFja3Ns
YXNoZXMgaW50byB5ZW4gc2lnbnMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L3dpbi9UZXh0Q29kZWNXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC93aW4vVGV4dENvZGVjV2luLmNwcAppbmRleCBlMTkyMzdkNjhkOTBkZjJmNTAzYWY0MjM5YWEz
NjdiNmYxNGYyNGI1Li44NzlhZjc2OTc3MmZmNTE1ZjM1NGFhOGIxOTcxNjk5YjYyYWJhNjYzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3dpbi9UZXh0Q29kZWNXaW4u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvd2luL1RleHRDb2RlY1dpbi5j
cHAKQEAgLTEwNSwxNyArMTA1LDE3IEBAIExhbmd1YWdlTWFuYWdlcjo6TGFuZ3VhZ2VNYW5hZ2Vy
KCkKICAgICAgICAgICAgIGkgPSBjb2RlUGFnZUNoYXJzZXRzKCkuc2V0KGNwSW5mby51aUNvZGVQ
YWdlLCBuYW1lKS5pdGVyYXRvcjsKICAgICAgICAgfQogICAgICAgICBpZiAoaSAhPSBjb2RlUGFn
ZUNoYXJzZXRzKCkuZW5kKCkpIHsKLSAgICAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBDaGFyc2V0
SW5mbz46Oml0ZXJhdG9yIGogPSBrbm93bkNoYXJzZXRzKCkuZmluZChTdHJpbmcoaS0+c2Vjb25k
LmRhdGEoKSwgaS0+c2Vjb25kLmxlbmd0aCgpKSk7CisgICAgICAgICAgICBIYXNoTWFwPFN0cmlu
ZywgQ2hhcnNldEluZm8+OjppdGVyYXRvciBqID0ga25vd25DaGFyc2V0cygpLmZpbmQoU3RyaW5n
KGktPnZhbHVlLmRhdGEoKSwgaS0+dmFsdWUubGVuZ3RoKCkpKTsKICAgICAgICAgICAgIEFTU0VS
VChqICE9IGtub3duQ2hhcnNldHMoKS5lbmQoKSk7Ci0gICAgICAgICAgICBDaGFyc2V0SW5mbyYg
aW5mbyA9IGotPnNlY29uZDsKLSAgICAgICAgICAgIGluZm8ubV9uYW1lID0gaS0+c2Vjb25kLmRh
dGEoKTsKKyAgICAgICAgICAgIENoYXJzZXRJbmZvJiBpbmZvID0gai0+dmFsdWU7CisgICAgICAg
ICAgICBpbmZvLm1fbmFtZSA9IGktPnZhbHVlLmRhdGEoKTsKICAgICAgICAgICAgIGluZm8ubV9m
cmllbmRseU5hbWUgPSBjcEluZm8ud3N6RGVzY3JpcHRpb247CiAgICAgICAgICAgICBpbmZvLm1f
YWxpYXNlcy5hcHBlbmQobmFtZSk7CiAgICAgICAgICAgICBpbmZvLm1fYWxpYXNlcy5hcHBlbmQo
U3RyaW5nKGNwSW5mby53c3pIZWFkZXJDaGFyc2V0KS5sYXRpbjEoKSk7CiAgICAgICAgICAgICBp
bmZvLm1fYWxpYXNlcy5hcHBlbmQoU3RyaW5nKGNwSW5mby53c3pCb2R5Q2hhcnNldCkubGF0aW4x
KCkpOwogICAgICAgICAgICAgU3RyaW5nIGNwTmFtZSA9ICJjcCIgKyBTdHJpbmc6Om51bWJlcihj
cEluZm8udWlDb2RlUGFnZSk7CiAgICAgICAgICAgICBpbmZvLm1fYWxpYXNlcy5hcHBlbmQoY3BO
YW1lLmxhdGluMSgpKTsKLSAgICAgICAgICAgIHN1cHBvcnRlZENoYXJzZXRzKCkuYWRkKGktPnNl
Y29uZC5kYXRhKCkpOworICAgICAgICAgICAgc3VwcG9ydGVkQ2hhcnNldHMoKS5hZGQoaS0+dmFs
dWUuZGF0YSgpKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTEyNiw3ICsxMjYsNyBAQCBzdGF0
aWMgVUlOVCBnZXRDb2RlUGFnZShjb25zdCBjaGFyKiBuYW1lKQogICAgIC8vIHNheWluZyAiPT0i
IGlzIG5vdCBmb3VuZCBmb3IgY29uc3RfaXRlcmF0b3IgYW5kIGl0ZXJhdG9yCiAgICAgY29uc3Qg
SGFzaE1hcDxTdHJpbmcsIENoYXJzZXRJbmZvPiYgY2hhcnNldHMgPSBrbm93bkNoYXJzZXRzKCk7
CiAgICAgSGFzaE1hcDxTdHJpbmcsIENoYXJzZXRJbmZvPjo6Y29uc3RfaXRlcmF0b3IgaSA9IGNo
YXJzZXRzLmZpbmQobmFtZSk7Ci0gICAgcmV0dXJuIGkgPT0gY2hhcnNldHMuZW5kKCkgPyBDUF9B
Q1AgOiBpLT5zZWNvbmQubV9jb2RlUGFnZTsKKyAgICByZXR1cm4gaSA9PSBjaGFyc2V0cy5lbmQo
KSA/IENQX0FDUCA6IGktPnZhbHVlLm1fY29kZVBhZ2U7CiB9CiAKIHN0YXRpYyBQYXNzT3duUHRy
PFRleHRDb2RlYz4gbmV3VGV4dENvZGVjV2luKGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2Rpbmcs
IGNvbnN0IHZvaWQqKQpAQCAtMTQ5LDkgKzE0OSw5IEBAIHZvaWQgVGV4dENvZGVjV2luOjpyZWdp
c3RlckV4dGVuZGVkRW5jb2RpbmdOYW1lcyhFbmNvZGluZ05hbWVSZWdpc3RyYXIgcmVnaXN0cmFy
CiAgICAgZm9yIChDaGFyc2V0U2V0OjppdGVyYXRvciBpID0gc3VwcG9ydGVkQ2hhcnNldHMoKS5i
ZWdpbigpOyBpICE9IHN1cHBvcnRlZENoYXJzZXRzKCkuZW5kKCk7ICsraSkgewogICAgICAgICBI
YXNoTWFwPFN0cmluZywgQ2hhcnNldEluZm8+OjppdGVyYXRvciBqID0ga25vd25DaGFyc2V0cygp
LmZpbmQoKmkpOwogICAgICAgICBpZiAoaiAhPSBrbm93bkNoYXJzZXRzKCkuZW5kKCkpIHsKLSAg
ICAgICAgICAgIHJlZ2lzdHJhcihqLT5zZWNvbmQubV9uYW1lLmRhdGEoKSwgai0+c2Vjb25kLm1f
bmFtZS5kYXRhKCkpOwotICAgICAgICAgICAgZm9yIChWZWN0b3I8Q1N0cmluZz46OmNvbnN0X2l0
ZXJhdG9yIGFsaWFzID0gai0+c2Vjb25kLm1fYWxpYXNlcy5iZWdpbigpOyBhbGlhcyAhPSBqLT5z
ZWNvbmQubV9hbGlhc2VzLmVuZCgpOyArK2FsaWFzKQotICAgICAgICAgICAgICAgIHJlZ2lzdHJh
cihhbGlhcy0+ZGF0YSgpLCBqLT5zZWNvbmQubV9uYW1lLmRhdGEoKSk7CisgICAgICAgICAgICBy
ZWdpc3RyYXIoai0+dmFsdWUubV9uYW1lLmRhdGEoKSwgai0+dmFsdWUubV9uYW1lLmRhdGEoKSk7
CisgICAgICAgICAgICBmb3IgKFZlY3RvcjxDU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgYWxpYXMg
PSBqLT52YWx1ZS5tX2FsaWFzZXMuYmVnaW4oKTsgYWxpYXMgIT0gai0+dmFsdWUubV9hbGlhc2Vz
LmVuZCgpOyArK2FsaWFzKQorICAgICAgICAgICAgICAgIHJlZ2lzdHJhcihhbGlhcy0+ZGF0YSgp
LCBqLT52YWx1ZS5tX25hbWUuZGF0YSgpKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTE2Miw3
ICsxNjIsNyBAQCB2b2lkIFRleHRDb2RlY1dpbjo6cmVnaXN0ZXJFeHRlbmRlZENvZGVjcyhUZXh0
Q29kZWNSZWdpc3RyYXIgcmVnaXN0cmFyKQogICAgIGZvciAoQ2hhcnNldFNldDo6aXRlcmF0b3Ig
aSA9IHN1cHBvcnRlZENoYXJzZXRzKCkuYmVnaW4oKTsgaSAhPSBzdXBwb3J0ZWRDaGFyc2V0cygp
LmVuZCgpOyArK2kpIHsKICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIENoYXJzZXRJbmZvPjo6aXRl
cmF0b3IgaiA9IGtub3duQ2hhcnNldHMoKS5maW5kKCppKTsKICAgICAgICAgaWYgKGogIT0ga25v
d25DaGFyc2V0cygpLmVuZCgpKQotICAgICAgICAgICAgcmVnaXN0cmFyKGotPnNlY29uZC5tX25h
bWUuZGF0YSgpLCBuZXdUZXh0Q29kZWNXaW4sIDApOworICAgICAgICAgICAgcmVnaXN0cmFyKGot
PnZhbHVlLm1fbmFtZS5kYXRhKCksIG5ld1RleHRDb2RlY1dpbiwgMCk7CiAgICAgfQogfQogCkBA
IC0zMDEsNyArMzAxLDcgQEAgdm9pZCBUZXh0Q29kZWNXaW46OmVudW1lcmF0ZVN1cHBvcnRlZEVu
Y29kaW5ncyhFbmNvZGluZ1JlY2VpdmVyJiByZWNlaXZlcikKICAgICBsYW5ndWFnZU1hbmFnZXIo
KTsKICAgICBmb3IgKENoYXJzZXRTZXQ6Oml0ZXJhdG9yIGkgPSBzdXBwb3J0ZWRDaGFyc2V0cygp
LmJlZ2luKCk7IGkgIT0gc3VwcG9ydGVkQ2hhcnNldHMoKS5lbmQoKTsgKytpKSB7CiAgICAgICAg
IEhhc2hNYXA8U3RyaW5nLCBDaGFyc2V0SW5mbz46Oml0ZXJhdG9yIGogPSBrbm93bkNoYXJzZXRz
KCkuZmluZCgqaSk7Ci0gICAgICAgIGlmIChqICE9IGtub3duQ2hhcnNldHMoKS5lbmQoKSAmJiAh
cmVjZWl2ZXIucmVjZWl2ZShqLT5zZWNvbmQubV9uYW1lLmRhdGEoKSwgai0+c2Vjb25kLm1fZnJp
ZW5kbHlOYW1lLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCksIGotPnNlY29uZC5tX2Nv
ZGVQYWdlKSkKKyAgICAgICAgaWYgKGogIT0ga25vd25DaGFyc2V0cygpLmVuZCgpICYmICFyZWNl
aXZlci5yZWNlaXZlKGotPnZhbHVlLm1fbmFtZS5kYXRhKCksIGotPnZhbHVlLm1fZnJpZW5kbHlO
YW1lLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCksIGotPnZhbHVlLm1fY29kZVBhZ2Up
KQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFV0aWxpdGllc1dpbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS93aW4vQ2xpcGJvYXJkVXRpbGl0aWVzV2luLmNwcAppbmRleCBmMjM3NDQ0Yjcy
Y2YwMzExOTdjM2IwYmVhMTY5N2FjZDM4NTBkYTExLi5mMzM1NTBlOTQwYTI4NjdjZmE5YTJkZDRm
OGUwNTU3M2Y5OTY0ZTFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4v
Q2xpcGJvYXJkVXRpbGl0aWVzV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93
aW4vQ2xpcGJvYXJkVXRpbGl0aWVzV2luLmNwcApAQCAtNzksNyArNzksNyBAQCBzdGF0aWMgYm9v
bCBnZXREYXRhTWFwSXRlbShjb25zdCBEcmFnRGF0YU1hcCogZGF0YU9iamVjdCwgRk9STUFURVRD
KiBmb3JtYXQsIFN0cgogICAgIERyYWdEYXRhTWFwOjpjb25zdF9pdGVyYXRvciBmb3VuZCA9IGRh
dGFPYmplY3QtPmZpbmQoZm9ybWF0LT5jZkZvcm1hdCk7CiAgICAgaWYgKGZvdW5kID09IGRhdGFP
YmplY3QtPmVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaXRlbSA9IGZvdW5kLT5z
ZWNvbmRbMF07CisgICAgaXRlbSA9IGZvdW5kLT52YWx1ZVswXTsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIApAQCAtODI5LDcgKzgyOSw3IEBAIHZvaWQgZ2V0Q2xpcGJvYXJkRGF0YShJRGF0YU9iamVj
dCogZGF0YU9iamVjdCwgRk9STUFURVRDKiBmb3JtYXQsIFZlY3RvcjxTdHJpbmc+CiAgICAgQ2xp
cGJvYXJkRm9ybWF0TWFwOjpjb25zdF9pdGVyYXRvciBmb3VuZCA9IGZvcm1hdE1hcC5maW5kKGZv
cm1hdC0+Y2ZGb3JtYXQpOwogICAgIGlmIChmb3VuZCA9PSBmb3JtYXRNYXAuZW5kKCkpCiAgICAg
ICAgIHJldHVybjsKLSAgICBmb3VuZC0+c2Vjb25kLT5nZXRTdHJpbmcoZGF0YU9iamVjdCwgZm91
bmQtPnNlY29uZC0+Zm9ybWF0LCBkYXRhU3RyaW5ncyk7CisgICAgZm91bmQtPnZhbHVlLT5nZXRT
dHJpbmcoZGF0YU9iamVjdCwgZm91bmQtPnZhbHVlLT5mb3JtYXQsIGRhdGFTdHJpbmdzKTsKIH0K
IAogdm9pZCBzZXRDbGlwYm9hcmREYXRhKElEYXRhT2JqZWN0KiBkYXRhT2JqZWN0LCBVSU5UIGZv
cm1hdCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGRhdGFTdHJpbmdzKQpAQCAtODM4LDcgKzgzOCw3
IEBAIHZvaWQgc2V0Q2xpcGJvYXJkRGF0YShJRGF0YU9iamVjdCogZGF0YU9iamVjdCwgVUlOVCBm
b3JtYXQsIGNvbnN0IFZlY3RvcjxTdHJpbmc+CiAgICAgQ2xpcGJvYXJkRm9ybWF0TWFwOjpjb25z
dF9pdGVyYXRvciBmb3VuZCA9IGZvcm1hdE1hcC5maW5kKGZvcm1hdCk7CiAgICAgaWYgKGZvdW5k
ID09IGZvcm1hdE1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGZvdW5kLT5zZWNvbmQt
PnNldFN0cmluZyhkYXRhT2JqZWN0LCBmb3VuZC0+c2Vjb25kLT5mb3JtYXQsIGRhdGFTdHJpbmdz
KTsKKyAgICBmb3VuZC0+dmFsdWUtPnNldFN0cmluZyhkYXRhT2JqZWN0LCBmb3VuZC0+dmFsdWUt
PmZvcm1hdCwgZGF0YVN0cmluZ3MpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xpcGJvYXJkV2luLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRXaW4uY3BwCmluZGV4IGFmNWUzYTI4
NmQ2YWRjMjQ0YTZlYjZjNWE0YzY1MmJlYjIwYTE2YmQuLmZiMTNkM2M0YmVhMGMwZmExYjkzNzA5
MjcxNWQ3MWE5M2NkNDlmODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dp
bi9DbGlwYm9hcmRXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlw
Ym9hcmRXaW4uY3BwCkBAIC01MjMsNyArNTIzLDcgQEAgSGFzaFNldDxTdHJpbmc+IENsaXBib2Fy
ZFdpbjo6dHlwZXMoKSBjb25zdAogICAgIH0gZWxzZSB7CiAgICAgICAgIGZvciAoRHJhZ0RhdGFN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9kcmFnRGF0YU1hcC5iZWdpbigpOyBpdCAhPSBtX2Ry
YWdEYXRhTWFwLmVuZCgpOyArK2l0KSB7CiAgICAgICAgICAgICBGT1JNQVRFVEMgZGF0YTsKLSAg
ICAgICAgICAgIGRhdGEuY2ZGb3JtYXQgPSAoKml0KS5maXJzdDsKKyAgICAgICAgICAgIGRhdGEu
Y2ZGb3JtYXQgPSAoKml0KS5rZXk7CiAgICAgICAgICAgICBhZGRNaW1lVHlwZXNGb3JGb3JtYXQo
cmVzdWx0cywgZGF0YSk7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5jcHAKaW5kZXggMGFiMGQ3MjgzMmY0ODZiNzRkZGI5ODBl
MWM5YjRkNmVjNjEyZWFhMy4uNTRiNDdlZmRlNTE0ZTQxOGZmYWU1YTQ4OGY1MTJjMzVlMWZjNTRk
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0ZpbGVTeXN0ZW1XaW4u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9GaWxlU3lzdGVtV2luLmNwcApA
QCAtMjM4LDcgKzIzOCw3IEBAIHN0YXRpYyBTdHJpbmcgY2FjaGVkU3RvcmFnZURpcmVjdG9yeShE
V09SRCBwYXRoSWRlbnRpZmllcikKIAogICAgIEhhc2hNYXA8RFdPUkQsIFN0cmluZz46Oml0ZXJh
dG9yIGl0ID0gZGlyZWN0b3JpZXMuZmluZChwYXRoSWRlbnRpZmllcik7CiAgICAgaWYgKGl0ICE9
IGRpcmVjdG9yaWVzLmVuZCgpKQotICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICAgICAg
cmV0dXJuIGl0LT52YWx1ZTsKIAogICAgIFN0cmluZyBkaXJlY3RvcnkgPSBzdG9yYWdlRGlyZWN0
b3J5KHBhdGhJZGVudGlmaWVyKTsKICAgICBkaXJlY3Rvcmllcy5hZGQocGF0aElkZW50aWZpZXIs
IGRpcmVjdG9yeSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUnVu
TG9vcFdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUnVuTG9vcFdpbi5jcHAK
aW5kZXggMTY2M2I2NjEzM2FiYzJjYjNmZDAwNTdkMTk2NzEyMzdkMGU3OTlkYS4uMTdkNjg0NWU5
ZmZkYzM5MjhjMDY3YzdjMTU4ODNhYWI5MGQyOWE2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vd2luL1J1bkxvb3BXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3dpbi9SdW5Mb29wV2luLmNwcApAQCAtMTI2LDcgKzEyNiw3IEBAIHZvaWQgUnVuTG9vcDo6
VGltZXJCYXNlOjp0aW1lckZpcmVkKFJ1bkxvb3AqIHJ1bkxvb3AsIHVpbnQ2NF90IElEKQogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgVGltZXJCYXNlKiB0aW1lciA9IGl0LT5zZWNvbmQ7
CisgICAgVGltZXJCYXNlKiB0aW1lciA9IGl0LT52YWx1ZTsKIAogICAgIGlmICghdGltZXItPm1f
aXNSZXBlYXRpbmcpIHsKICAgICAgICAgcnVuTG9vcC0+bV9hY3RpdmVUaW1lcnMucmVtb3ZlKGl0
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9XQ0RhdGFPYmplY3Qu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1dDRGF0YU9iamVjdC5jcHAKaW5kZXgg
YzVhYWVmYzdjNDBlNDRlNDY1NzdhNjYxODRiMjEyNmFjM2M4YzQ0Zi4uNGVlZTRiOTYxMzgzOTgw
MmY0Mzk3MTk5MTI4MTc5ZjdjNjg1MjQ4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vd2luL1dDRGF0YU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
d2luL1dDRGF0YU9iamVjdC5jcHAKQEAgLTE2OSw3ICsxNjksNyBAQCBIUkVTVUxUIFdDRGF0YU9i
amVjdDo6Y3JlYXRlSW5zdGFuY2UoV0NEYXRhT2JqZWN0KiogcmVzdWx0LCBjb25zdCBEcmFnRGF0
YU1hcCYgZAogICAgICpyZXN1bHQgPSBuZXcgV0NEYXRhT2JqZWN0OwogCiAgICAgZm9yIChEcmFn
RGF0YU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBkYXRhTWFwLmJlZ2luKCk7IGl0ICE9IGRhdGFN
YXAuZW5kKCk7ICsraXQpCi0gICAgICAgIHNldENsaXBib2FyZERhdGEoKnJlc3VsdCwgaXQtPmZp
cnN0LCBpdC0+c2Vjb25kKTsKKyAgICAgICAgc2V0Q2xpcGJvYXJkRGF0YSgqcmVzdWx0LCBpdC0+
a2V5LCBpdC0+dmFsdWUpOwogICAgIHJldHVybiBTX09LOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS93aW5jZS9NSU1FVHlwZVJlZ2lzdHJ5V2luQ0UuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luY2UvTUlNRVR5cGVSZWdpc3RyeVdpbkNFLmNwcAppbmRl
eCA4YTBkM2QyYjYxNjJiNDZkYmI3ZDYyZjIyY2EwMzI2ZGM3ZmNlZGM1Li5lOTZmYjJiYTdkOTk5
Y2UyZDNhY2IwZDBmOWM0YzI0ODc0N2ZlNWVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS93aW5jZS9NSU1FVHlwZVJlZ2lzdHJ5V2luQ0UuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3dpbmNlL01JTUVUeXBlUmVnaXN0cnlXaW5DRS5jcHAKQEAgLTEwMSw4ICsx
MDEsOCBAQCBTdHJpbmcgTUlNRVR5cGVSZWdpc3RyeTo6Z2V0UHJlZmVycmVkRXh0ZW5zaW9uRm9y
TUlNRVR5cGUoY29uc3QgU3RyaW5nJiB0eXBlKQogICAgIGluaXRNSU1FVHlwZUVudGVuc2lvbk1h
cCgpOwogCiAgICAgZm9yIChIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6aXRlcmF0b3IgaSA9IG1p
bWV0eXBlTWFwLmJlZ2luKCk7IGkgIT0gbWltZXR5cGVNYXAuZW5kKCk7ICsraSkgewotICAgICAg
ICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoaS0+c2Vjb25kLCB0eXBlKSkKLSAgICAgICAgICAgIHJl
dHVybiBpLT5maXJzdDsKKyAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGktPnZhbHVlLCB0
eXBlKSkKKyAgICAgICAgICAgIHJldHVybiBpLT5rZXk7CiAgICAgfQogCiAgICAgcmV0dXJuIFN0
cmluZygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvQ29udGV4dE1l
bnVXeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC9Db250ZXh0TWVudVd4LmNwcApp
bmRleCA0MTg5YWE5NTJmZmViNGJjYTIzZGI3MGE5ODA2MWVlZGZmNGYxZGY0Li5kZjJlZTUyN2Q5
NDhlMTYyYWJiODk0MjM4YmIyYjM4NGQ4NjlmNjI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS93eC9Db250ZXh0TWVudVd4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93eC9Db250ZXh0TWVudVd4LmNwcApAQCAtNjcsOCArNjcsOCBAQCB2b2lkIENvbnRleHRN
ZW51OjphcHBlbmRJdGVtKENvbnRleHRNZW51SXRlbSYgaXRlbSkKIAogICAgIEl0ZW1BY3Rpb25N
YXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHNfaXRlbUFjdGlvbnMuZW5kKCk7CiAgICAgZm9yIChJ
dGVtQWN0aW9uTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHNfaXRlbUFjdGlvbnMuYmVnaW4oKTsg
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnNlY29uZCA9PSBpdGVtRGVzY3Jp
cHRpb24uYWN0aW9uKQotICAgICAgICAgICAgaWRXeCA9IGl0LT5maXJzdDsKKyAgICAgICAgaWYg
KGl0LT52YWx1ZSA9PSBpdGVtRGVzY3JpcHRpb24uYWN0aW9uKQorICAgICAgICAgICAgaWRXeCA9
IGl0LT5rZXk7CiAgICAgfQogCiAgICAgaWYgKGl0ZW1EZXNjcmlwdGlvbi5zdWJNZW51KSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3BwCmluZGV4IDk2MWM0NTQ4NWJm
MmQ4Nzc0YWEzMDBjNzg2NTBlYWM5ZGFhMDVmYzguLjQ0NTJhZmUxZTRiNjM4YjVmN2RkYTBlYzdi
MTc5ZDdhZTNkOWQ2ZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2lu
RGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2Uu
Y3BwCkBAIC0xNjYsNyArMTY2LDcgQEAgYm9vbCBQbHVnaW5EYXRhYmFzZTo6cmVmcmVzaCgpCiAg
ICAgICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWFwX2l0ID0gKCpp
dCktPm1pbWVUb0Rlc2NyaXB0aW9ucygpLmJlZ2luKCk7CiAgICAgICAgIE1JTUVUb0Rlc2NyaXB0
aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWFwX2VuZCA9ICgqaXQpLT5taW1lVG9EZXNjcmlwdGlv
bnMoKS5lbmQoKTsKICAgICAgICAgZm9yICg7IG1hcF9pdCAhPSBtYXBfZW5kOyArK21hcF9pdCkK
LSAgICAgICAgICAgIG1fcmVnaXN0ZXJlZE1JTUVUeXBlcy5hZGQobWFwX2l0LT5maXJzdCk7Cisg
ICAgICAgICAgICBtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuYWRkKG1hcF9pdC0+a2V5KTsKICAgICB9
CiAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI0Nyw5ICsyNDcsOSBAQCBTdHJpbmcgUGx1Z2luRGF0
YWJhc2U6Ok1JTUVUeXBlRm9yRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uKSBjb25z
dAogICAgICAgICBNSU1FVG9FeHRlbnNpb25zTWFwOjpjb25zdF9pdGVyYXRvciBtaW1lX2VuZCA9
ICgqaXQpLT5taW1lVG9FeHRlbnNpb25zKCkuZW5kKCk7CiAKICAgICAgICAgZm9yIChNSU1FVG9F
eHRlbnNpb25zTWFwOjpjb25zdF9pdGVyYXRvciBtaW1lX2l0ID0gKCppdCktPm1pbWVUb0V4dGVu
c2lvbnMoKS5iZWdpbigpOyBtaW1lX2l0ICE9IG1pbWVfZW5kOyArK21pbWVfaXQpIHsKLSAgICAg
ICAgICAgIG1pbWVUeXBlID0gbWltZV9pdC0+Zmlyc3Q7CisgICAgICAgICAgICBtaW1lVHlwZSA9
IG1pbWVfaXQtPmtleTsKICAgICAgICAgICAgIFBsdWdpblBhY2thZ2UqIHByZWZlcnJlZFBsdWdp
biA9IG1fcHJlZmVycmVkUGx1Z2lucy5nZXQobWltZVR5cGUpLmdldCgpOwotICAgICAgICAgICAg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIGV4dGVuc2lvbnMgPSBtaW1lX2l0LT5zZWNvbmQ7CisgICAg
ICAgICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZXh0ZW5zaW9ucyA9IG1pbWVfaXQtPnZhbHVl
OwogICAgICAgICAgICAgYm9vbCBmb3VuZE1hcHBpbmcgPSBmYWxzZTsKICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBleHRlbnNpb25zLnNpemUoKTsgaSsrKSB7CiAgICAgICAg
ICAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGV4dGVuc2lvbnNbaV0sIGV4dGVuc2lvbikp
IHsKQEAgLTMzOSw4ICszMzksOCBAQCB2b2lkIFBsdWdpbkRhdGFiYXNlOjpyZW1vdmUoUGx1Z2lu
UGFja2FnZSogcGFja2FnZSkKICAgICBNSU1FVG9FeHRlbnNpb25zTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IHBhY2thZ2UtPm1pbWVUb0V4dGVuc2lvbnMoKS5iZWdpbigpOwogICAgIE1JTUVUb0V4
dGVuc2lvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHBhY2thZ2UtPm1pbWVUb0V4dGVuc2lv
bnMoKS5lbmQoKTsKICAgICBmb3IgKCA7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBQbHVn
aW5QYWNrYWdlQnlOYW1lTWFwOjppdGVyYXRvciBwYWNrYWdlSW5NYXAgPSBtX3ByZWZlcnJlZFBs
dWdpbnMuZmluZChpdC0+Zmlyc3QpOwotICAgICAgICBpZiAocGFja2FnZUluTWFwICE9IG1fcHJl
ZmVycmVkUGx1Z2lucy5lbmQoKSAmJiBwYWNrYWdlSW5NYXAtPnNlY29uZCA9PSBwYWNrYWdlKQor
ICAgICAgICBQbHVnaW5QYWNrYWdlQnlOYW1lTWFwOjppdGVyYXRvciBwYWNrYWdlSW5NYXAgPSBt
X3ByZWZlcnJlZFBsdWdpbnMuZmluZChpdC0+a2V5KTsKKyAgICAgICAgaWYgKHBhY2thZ2VJbk1h
cCAhPSBtX3ByZWZlcnJlZFBsdWdpbnMuZW5kKCkgJiYgcGFja2FnZUluTWFwLT52YWx1ZSA9PSBw
YWNrYWdlKQogICAgICAgICAgICAgbV9wcmVmZXJyZWRQbHVnaW5zLnJlbW92ZShwYWNrYWdlSW5N
YXApOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5N
YWluVGhyZWFkU2NoZWR1bGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luTWFp
blRocmVhZFNjaGVkdWxlci5jcHAKaW5kZXggNzUyODY3NmIxMmFhOGJkYThmMzNiMzJlZjQwY2M4
NzY1NzY2ZDMxYS4uMzlhZTc5NGUyZmIwOTcyMTlhNTIyM2ViZmJlZWRmNjliNmUyODYyYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbk1haW5UaHJlYWRTY2hlZHVs
ZXIuY3BwCkBAIC00OSw3ICs0OSw3IEBAIHZvaWQgUGx1Z2luTWFpblRocmVhZFNjaGVkdWxlcjo6
c2NoZWR1bGVDYWxsKE5QUCBucHAsIE1haW5UaHJlYWRGdW5jdGlvbiBmdW5jdGlvCiAgICAgaWYg
KGl0ID09IG1fY2FsbFF1ZXVlTWFwLmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpdC0+
c2Vjb25kLmFwcGVuZChDYWxsKGZ1bmN0aW9uLCB1c2VyRGF0YSkpOworICAgIGl0LT52YWx1ZS5h
cHBlbmQoQ2FsbChmdW5jdGlvbiwgdXNlckRhdGEpKTsKIAogICAgIGlmICghbV9jYWxsUGVuZGlu
ZykgewogICAgICAgICBjYWxsT25NYWluVGhyZWFkKG1haW5UaHJlYWRDYWxsYmFjaywgdGhpcyk7
CkBAIC05Nyw3ICs5Nyw3IEBAIHZvaWQgUGx1Z2luTWFpblRocmVhZFNjaGVkdWxlcjo6ZGlzcGF0
Y2hDYWxscygpCiAgICAgICAgIC8vIEVtcHR5IGFsbCB0aGUgcXVldWVzIGluIHRoZSBvcmlnaW5h
bCBtYXAKICAgICAgICAgQ2FsbFF1ZXVlTWFwOjppdGVyYXRvciBlbmQgPSBtX2NhbGxRdWV1ZU1h
cC5lbmQoKTsKICAgICAgICAgZm9yIChDYWxsUXVldWVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9jYWxs
UXVldWVNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgaXQtPnNlY29u
ZC5jbGVhcigpOworICAgICAgICAgICAgaXQtPnZhbHVlLmNsZWFyKCk7CiAgICAgfQogCiAgICAg
bV9jYWxsUGVuZGluZyA9IGZhbHNlOwpAQCAtMTA1LDcgKzEwNSw3IEBAIHZvaWQgUGx1Z2luTWFp
blRocmVhZFNjaGVkdWxlcjo6ZGlzcGF0Y2hDYWxscygpCiAKICAgICBDYWxsUXVldWVNYXA6Oml0
ZXJhdG9yIGVuZCA9IGNvcHkuZW5kKCk7CiAgICAgZm9yIChDYWxsUXVldWVNYXA6Oml0ZXJhdG9y
IGl0ID0gY29weS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGRpc3BhdGNoQ2Fs
bHNGb3JQbHVnaW4oaXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsKKyAgICAgICAgZGlzcGF0Y2hDYWxs
c0ZvclBsdWdpbihpdC0+a2V5LCBpdC0+dmFsdWUpOwogfQogCiB2b2lkIFBsdWdpbk1haW5UaHJl
YWRTY2hlZHVsZXI6Om1haW5UaHJlYWRDYWxsYmFjayh2b2lkKiBjb250ZXh0KQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5TdHJlYW0uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGx1Z2lucy9QbHVnaW5TdHJlYW0uY3BwCmluZGV4IDA4NWEzMThiNDIxYTdhZDhmZGZjNjcw
YjYzZDMxYWY4MmUyNjZlNTIuLjUxNjIwYzlkMjQzMTI3MGQ4YzdjYjY2M2NkMjc1Mzg1ZTZlYTMz
NGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luU3RyZWFtLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblN0cmVhbS5jcHAKQEAgLTE0Nyw5ICsx
NDcsOSBAQCB2b2lkIFBsdWdpblN0cmVhbTo6c3RhcnRTdHJlYW0oKQogCiAgICAgICAgIEhUVFBI
ZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcmVzb3VyY2VSZXNwb25zZS5odHRwSGVh
ZGVyRmllbGRzKCkuZW5kKCk7CiAgICAgICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX3Jlc291cmNlUmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkcygpLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQt
PmZpcnN0KTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5rZXkpOwogICAg
ICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoc2VwYXJhdG9yKTsKLSAgICAgICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5zZWNvbmQpOworICAgICAgICAgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQoaXQtPnZhbHVlKTsKICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdc
bicpOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvYmxh
Y2tiZXJyeS9QbHVnaW5EYXRhQmxhY2tCZXJyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5z
L2JsYWNrYmVycnkvUGx1Z2luRGF0YUJsYWNrQmVycnkuY3BwCmluZGV4IGQ5MjBkMWZiZDVhMTEy
NDYwM2E4Y2Q5OGZhMTM0MzU2ZTczMDZiNTkuLjQ3NDY2MTZkZTMzNWZhODNjZWM5NmQ5MzBlMjBk
OGMyOGU5NGMzYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvYmxhY2tiZXJy
eS9QbHVnaW5EYXRhQmxhY2tCZXJyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9i
bGFja2JlcnJ5L1BsdWdpbkRhdGFCbGFja0JlcnJ5LmNwcApAQCAtNDEsOCArNDEsOCBAQCB2b2lk
IFBsdWdpbkRhdGE6OmluaXRQbHVnaW5zKGNvbnN0IFBhZ2UqKQogICAgICAgICBNSU1FVG9EZXNj
cmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5lbmQo
KTsKICAgICAgICAgZm9yIChNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbWltZVRvRGVzY3JpcHRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAg
ICAgICAgTWltZUNsYXNzSW5mbyBtaW1lOwotICAgICAgICAgICAgbWltZS50eXBlID0gaXQtPmZp
cnN0OwotICAgICAgICAgICAgbWltZS5kZXNjID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIG1p
bWUudHlwZSA9IGl0LT5rZXk7CisgICAgICAgICAgICBtaW1lLmRlc2MgPSBpdC0+dmFsdWU7CiAg
ICAgICAgICAgICBtaW1lLmV4dGVuc2lvbnMgPSBwYWNrYWdlLT5taW1lVG9FeHRlbnNpb25zKCku
Z2V0KG1pbWUudHlwZSk7CiAgICAgICAgICAgICBpbmZvLm1pbWVzLmFwcGVuZChtaW1lKTsKICAg
ICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy93eC9QbHVnaW5EYXRh
V3guY3BwIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy93eC9QbHVnaW5EYXRhV3guY3BwCmluZGV4
IDBlYjg5MGZlZjA1YTExNWVhY2U0MjYzNzY4MGEzZDZhMTJmNTc3MjkuLjI3OTUyYzRhZThiZmE0
OWU5OGIxMWFlOTk1OWZjNzU0ZTRkYjIzYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
dWdpbnMvd3gvUGx1Z2luRGF0YVd4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3d4
L1BsdWdpbkRhdGFXeC5jcHAKQEAgLTUxLDggKzUxLDggQEAgdm9pZCBQbHVnaW5EYXRhOjppbml0
UGx1Z2lucyhjb25zdCBQYWdlKikKICAgICAgICAgZm9yIChNSU1FVG9EZXNjcmlwdGlvbnNNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWltZVRvRGVzY3JpcHRpb25zLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewogICAgICAgICAgICAgTWltZUNsYXNzSW5mbyBtaW1lOwogCi0gICAgICAgICAg
ICBtaW1lLnR5cGUgPSBpdC0+Zmlyc3Q7Ci0gICAgICAgICAgICBtaW1lLmRlc2MgPSBpdC0+c2Vj
b25kOworICAgICAgICAgICAgbWltZS50eXBlID0gaXQtPmtleTsKKyAgICAgICAgICAgIG1pbWUu
ZGVzYyA9IGl0LT52YWx1ZTsKICAgICAgICAgICAgIG1pbWUuZXh0ZW5zaW9ucyA9IHBhY2thZ2Ut
Pm1pbWVUb0V4dGVuc2lvbnMoKS5nZXQobWltZS50eXBlKTsKIAogICAgICAgICAgICAgaW5mby5t
aW1lcy5hcHBlbmQobWltZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
Rmxvd1RocmVhZENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0Zsb3dU
aHJlYWRDb250cm9sbGVyLmNwcAppbmRleCBjYjRiZGIxZjJjNDMyYmY4NTU2ZmMyOTA5MTRkMWZi
ZmQyOWNlZjZhLi5lN2NlYzQwYTI1ZTBjMTNmODY1MTEyNTQ3NjkzZjdjNmEwOWRiMDRjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmxvd1RocmVhZENvbnRyb2xsZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GbG93VGhyZWFkQ29udHJvbGxlci5jcHAK
QEAgLTE1Myw5ICsxNTMsOSBAQCB2b2lkIEZsb3dUaHJlYWRDb250cm9sbGVyOjp1bnJlZ2lzdGVy
TmFtZWRGbG93Q29udGVudE5vZGUoTm9kZSogY29udGVudE5vZGUpCiAgICAgQVNTRVJUKGNvbnRl
bnROb2RlICYmIGNvbnRlbnROb2RlLT5pc0VsZW1lbnROb2RlKCkpOwogICAgIEhhc2hNYXA8Tm9k
ZSosIFJlbmRlck5hbWVkRmxvd1RocmVhZCo+OjppdGVyYXRvciBpdCA9IG1fbWFwTmFtZWRGbG93
Q29udGVudE5vZGVzLmZpbmQoY29udGVudE5vZGUpOwogICAgIEFTU0VSVChpdCAhPSBtX21hcE5h
bWVkRmxvd0NvbnRlbnROb2Rlcy5lbmQoKSk7Ci0gICAgQVNTRVJUKGl0LT5zZWNvbmQpOwotICAg
IEFTU0VSVChpdC0+c2Vjb25kLT5oYXNDb250ZW50Tm9kZShjb250ZW50Tm9kZSkpOwotICAgIGl0
LT5zZWNvbmQtPnVucmVnaXN0ZXJOYW1lZEZsb3dDb250ZW50Tm9kZShjb250ZW50Tm9kZSk7Cisg
ICAgQVNTRVJUKGl0LT52YWx1ZSk7CisgICAgQVNTRVJUKGl0LT52YWx1ZS0+aGFzQ29udGVudE5v
ZGUoY29udGVudE5vZGUpKTsKKyAgICBpdC0+dmFsdWUtPnVucmVnaXN0ZXJOYW1lZEZsb3dDb250
ZW50Tm9kZShjb250ZW50Tm9kZSk7CiAgICAgbV9tYXBOYW1lZEZsb3dDb250ZW50Tm9kZXMucmVt
b3ZlKGNvbnRlbnROb2RlKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0lubGluZUZsb3dCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZs
b3dCb3guY3BwCmluZGV4IDlhZDBmY2ZhMTJjODMzYjBhMWQzYzc3NGM5Zjg3NTQzZjc1ZDRjMTgu
LjU5MTJjNjhiMTY0OTFhNTU4NzQ1YmI1ODg0MDE4ZDI2NjI1MjZlOTAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAKQEAgLTQ2MCw3ICs0NjAsNyBAQCBib29s
IElubGluZUZsb3dCb3g6OnJlcXVpcmVzSWRlb2dyYXBoaWNCYXNlbGluZShjb25zdCBHbHlwaE92
ZXJmbG93QW5kRmFsbGJhY2tGbwogICAgICAgICAgICAgY29uc3QgVmVjdG9yPGNvbnN0IFNpbXBs
ZUZvbnREYXRhKj4qIHVzZWRGb250cyA9IDA7CiAgICAgICAgICAgICBpZiAoY3Vyci0+aXNJbmxp
bmVUZXh0Qm94KCkpIHsKICAgICAgICAgICAgICAgICBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tG
b250c01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSB0ZXh0Qm94RGF0YU1hcC5maW5kKHRvSW5saW5l
VGV4dEJveChjdXJyKSk7Ci0gICAgICAgICAgICAgICAgdXNlZEZvbnRzID0gaXQgPT0gdGV4dEJv
eERhdGFNYXAuZW5kKCkgPyAwIDogJml0LT5zZWNvbmQuZmlyc3Q7CisgICAgICAgICAgICAgICAg
dXNlZEZvbnRzID0gaXQgPT0gdGV4dEJveERhdGFNYXAuZW5kKCkgPyAwIDogJml0LT52YWx1ZS5m
aXJzdDsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKHVzZWRGb250cykgewpAQCAt
ODI0LDcgKzgyNCw3IEBAIGlubGluZSB2b2lkIElubGluZUZsb3dCb3g6OmFkZFRleHRCb3hWaXN1
YWxPdmVyZmxvdyhJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94LCBHbHlwCiAgICAgUmVuZGVyU3R5bGUq
IHN0eWxlID0gdGV4dEJveC0+cmVuZGVyZXIoKS0+c3R5bGUoaXNGaXJzdExpbmVTdHlsZSgpKTsK
ICAgICAKICAgICBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcDo6aXRlcmF0b3IgaXQg
PSB0ZXh0Qm94RGF0YU1hcC5maW5kKHRleHRCb3gpOwotICAgIEdseXBoT3ZlcmZsb3cqIGdseXBo
T3ZlcmZsb3cgPSBpdCA9PSB0ZXh0Qm94RGF0YU1hcC5lbmQoKSA/IDAgOiAmaXQtPnNlY29uZC5z
ZWNvbmQ7CisgICAgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdyA9IGl0ID09IHRleHRCb3hE
YXRhTWFwLmVuZCgpID8gMCA6ICZpdC0+dmFsdWUuc2Vjb25kOwogICAgIGJvb2wgaXNGbGlwcGVk
TGluZSA9IHN0eWxlLT5pc0ZsaXBwZWRMaW5lc1dyaXRpbmdNb2RlKCk7CiAKICAgICBpbnQgdG9w
R2x5cGhFZGdlID0gZ2x5cGhPdmVyZmxvdyA/IChpc0ZsaXBwZWRMaW5lID8gZ2x5cGhPdmVyZmxv
dy0+Ym90dG9tIDogZ2x5cGhPdmVyZmxvdy0+dG9wKSA6IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmNwcAppbmRleCBhYmVkNjYyMjA3NWU5ZjJlMGQxZWFhNjFmZDYxYTEx
OWU3ZjlhODU2Li5lZWI5ZDg0ZmExZWQzYzlhMmRjYmY2NTU1NzZlZmU1ODg4NjBkNWQ3IDEwMDc1
NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKQEAgLTQ0MjgsNyArNDQyOCw3
IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNsZWFyRmxvYXRzKCkKIAogICAgICAgICBSZW5kZXJlclRv
RmxvYXRJbmZvTWFwOjppdGVyYXRvciBlbmQgPSBmbG9hdE1hcC5lbmQoKTsKICAgICAgICAgZm9y
IChSZW5kZXJlclRvRmxvYXRJbmZvTWFwOjppdGVyYXRvciBpdCA9IGZsb2F0TWFwLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5n
T2JqZWN0ID0gKCppdCkuc2Vjb25kOworICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGZsb2F0
aW5nT2JqZWN0ID0gKCppdCkudmFsdWU7CiAgICAgICAgICAgICBpZiAoIWZsb2F0aW5nT2JqZWN0
LT5pc0Rlc2NlbmRhbnQoKSkgewogICAgICAgICAgICAgICAgIGNoYW5nZUxvZ2ljYWxUb3AgPSAw
OwogICAgICAgICAgICAgICAgIGNoYW5nZUxvZ2ljYWxCb3R0b20gPSBtYXgoY2hhbmdlTG9naWNh
bEJvdHRvbSwgbG9naWNhbEJvdHRvbUZvckZsb2F0KGZsb2F0aW5nT2JqZWN0KSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCmluZGV4
IGNiY2M5ODhhYTJhYWRiMjRkMjlmZGEzYTg4MTQ5MzU1MDIwMTMyZWQuLjU1MzgyMjBjMjFjYjQw
MmQ3NmJhMjVmNzlkZDE4NmI3MjVkOTA0ZmIgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCkBAIC03MDcsMTQgKzcwNywxNCBAQCBz
dGF0aWMgaW5saW5lIHZvaWQgc2V0TG9naWNhbFdpZHRoRm9yVGV4dFJ1bihSb290SW5saW5lQm94
KiBsaW5lQm94LCBCaWRpUnVuKiBydQogICAgIGlmICghZmFsbGJhY2tGb250cy5pc0VtcHR5KCkp
IHsKICAgICAgICAgQVNTRVJUKHJ1bi0+bV9ib3gtPmlzVGV4dCgpKTsKICAgICAgICAgR2x5cGhP
dmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXA6Oml0ZXJhdG9yIGl0ID0gdGV4dEJveERhdGFNYXAu
YWRkKHRvSW5saW5lVGV4dEJveChydW4tPm1fYm94KSwgbWFrZV9wYWlyKFZlY3Rvcjxjb25zdCBT
aW1wbGVGb250RGF0YSo+KCksIEdseXBoT3ZlcmZsb3coKSkpLml0ZXJhdG9yOwotICAgICAgICBB
U1NFUlQoaXQtPnNlY29uZC5maXJzdC5pc0VtcHR5KCkpOwotICAgICAgICBjb3B5VG9WZWN0b3Io
ZmFsbGJhY2tGb250cywgaXQtPnNlY29uZC5maXJzdCk7CisgICAgICAgIEFTU0VSVChpdC0+dmFs
dWUuZmlyc3QuaXNFbXB0eSgpKTsKKyAgICAgICAgY29weVRvVmVjdG9yKGZhbGxiYWNrRm9udHMs
IGl0LT52YWx1ZS5maXJzdCk7CiAgICAgICAgIHJ1bi0+bV9ib3gtPnBhcmVudCgpLT5jbGVhckRl
c2NlbmRhbnRzSGF2ZVNhbWVMaW5lSGVpZ2h0QW5kQmFzZWxpbmUoKTsKICAgICB9CiAgICAgaWYg
KChnbHlwaE92ZXJmbG93LnRvcCB8fCBnbHlwaE92ZXJmbG93LmJvdHRvbSB8fCBnbHlwaE92ZXJm
bG93LmxlZnQgfHwgZ2x5cGhPdmVyZmxvdy5yaWdodCkpIHsKICAgICAgICAgQVNTRVJUKHJ1bi0+
bV9ib3gtPmlzVGV4dCgpKTsKICAgICAgICAgR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNN
YXA6Oml0ZXJhdG9yIGl0ID0gdGV4dEJveERhdGFNYXAuYWRkKHRvSW5saW5lVGV4dEJveChydW4t
Pm1fYm94KSwgbWFrZV9wYWlyKFZlY3Rvcjxjb25zdCBTaW1wbGVGb250RGF0YSo+KCksIEdseXBo
T3ZlcmZsb3coKSkpLml0ZXJhdG9yOwotICAgICAgICBpdC0+c2Vjb25kLnNlY29uZCA9IGdseXBo
T3ZlcmZsb3c7CisgICAgICAgIGl0LT52YWx1ZS5zZWNvbmQgPSBnbHlwaE92ZXJmbG93OwogICAg
ICAgICBydW4tPm1fYm94LT5jbGVhcktub3duVG9IYXZlTm9PdmVyZmxvdygpOwogICAgIH0KIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVj
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3Bw
CmluZGV4IDhkZWVkZGYzOGI2NDI1MDQyODc3YTBmYzkyN2RiMGFmNThmZTJhZjkuLjFkMmU4YzM3
MTZkYzU3YjIzNjMzZGUzYmM4MWM5YjE2MjNlNjQ2MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcApAQCAtMTM4LDcgKzEzOCw3IEBA
IHZvaWQgSW1hZ2VRdWFsaXR5Q29udHJvbGxlcjo6aGlnaFF1YWxpdHlSZXBhaW50VGltZXJGaXJl
ZChUaW1lcjxJbWFnZVF1YWxpdHlDb250CiAgICAgaWYgKG1fYW5pbWF0ZWRSZXNpemVJc0FjdGl2
ZSkgewogICAgICAgICBtX2FuaW1hdGVkUmVzaXplSXNBY3RpdmUgPSBmYWxzZTsKICAgICAgICAg
Zm9yIChPYmplY3RMYXllclNpemVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9vYmplY3RMYXllclNpemVN
YXAuYmVnaW4oKTsgaXQgIT0gbV9vYmplY3RMYXllclNpemVNYXAuZW5kKCk7ICsraXQpCi0gICAg
ICAgICAgICBpdC0+Zmlyc3QtPnJlcGFpbnQoKTsKKyAgICAgICAgICAgIGl0LT5rZXktPnJlcGFp
bnQoKTsKICAgICB9CiB9CiAKQEAgLTE2MywxNCArMTYzLDE0IEBAIGJvb2wgSW1hZ2VRdWFsaXR5
Q29udHJvbGxlcjo6c2hvdWxkUGFpbnRBdExvd1F1YWxpdHkoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBSCiAKICAgICAvLyBMb29rIG91cnNlbHZlcyB1cCBpbiB0aGUgaGFzaHRhYmxlcy4KICAg
ICBPYmplY3RMYXllclNpemVNYXA6Oml0ZXJhdG9yIGkgPSBtX29iamVjdExheWVyU2l6ZU1hcC5m
aW5kKG9iamVjdCk7Ci0gICAgTGF5ZXJTaXplTWFwKiBpbm5lck1hcCA9IGkgIT0gbV9vYmplY3RM
YXllclNpemVNYXAuZW5kKCkgPyAmaS0+c2Vjb25kIDogMDsKKyAgICBMYXllclNpemVNYXAqIGlu
bmVyTWFwID0gaSAhPSBtX29iamVjdExheWVyU2l6ZU1hcC5lbmQoKSA/ICZpLT52YWx1ZSA6IDA7
CiAgICAgTGF5b3V0U2l6ZSBvbGRTaXplOwogICAgIGJvb2wgaXNGaXJzdFJlc2l6ZSA9IHRydWU7
CiAgICAgaWYgKGlubmVyTWFwKSB7CiAgICAgICAgIExheWVyU2l6ZU1hcDo6aXRlcmF0b3IgaiA9
IGlubmVyTWFwLT5maW5kKGxheWVyKTsKICAgICAgICAgaWYgKGogIT0gaW5uZXJNYXAtPmVuZCgp
KSB7CiAgICAgICAgICAgICBpc0ZpcnN0UmVzaXplID0gZmFsc2U7Ci0gICAgICAgICAgICBvbGRT
aXplID0gai0+c2Vjb25kOworICAgICAgICAgICAgb2xkU2l6ZSA9IGotPnZhbHVlOwogICAgICAg
ICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Q291bnRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ291bnRlci5jcHAK
aW5kZXggZTM0OTZiMTM2NTYyYTFhMWM3YjAyZWUxN2I3YzEwYzQ0YjFhNGMxMy4uMjRjODYzMzA0
MjEyMmE4YzUwZjNiYWQ3MDcxMmM1NDk5MzI5ZTc5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJDb3VudGVyLmNwcApAQCAtNTY4LDEwICs1NjgsMTAgQEAgdm9pZCBSZW5kZXJD
b3VudGVyOjpkZXN0cm95Q291bnRlck5vZGVzKFJlbmRlck9iamVjdCogb3duZXIpCiAgICAgQ291
bnRlck1hcHM6Oml0ZXJhdG9yIG1hcHNJdGVyYXRvciA9IG1hcHMuZmluZChvd25lcik7CiAgICAg
aWYgKG1hcHNJdGVyYXRvciA9PSBtYXBzLmVuZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgQ291
bnRlck1hcCogbWFwID0gbWFwc0l0ZXJhdG9yLT5zZWNvbmQuZ2V0KCk7CisgICAgQ291bnRlck1h
cCogbWFwID0gbWFwc0l0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKICAgICBDb3VudGVyTWFwOjpjb25z
dF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwogICAgIGZvciAoQ291bnRlck1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBk
ZXN0cm95Q291bnRlck5vZGVXaXRob3V0TWFwUmVtb3ZhbChpdC0+Zmlyc3QsIGl0LT5zZWNvbmQu
Z2V0KCkpOworICAgICAgICBkZXN0cm95Q291bnRlck5vZGVXaXRob3V0TWFwUmVtb3ZhbChpdC0+
a2V5LCBpdC0+dmFsdWUuZ2V0KCkpOwogICAgIH0KICAgICBtYXBzLnJlbW92ZShtYXBzSXRlcmF0
b3IpOwogICAgIG93bmVyLT5zZXRIYXNDb3VudGVyTm9kZU1hcChmYWxzZSk7CkBAIC01ODUsNyAr
NTg1LDcgQEAgdm9pZCBSZW5kZXJDb3VudGVyOjpkZXN0cm95Q291bnRlck5vZGUoUmVuZGVyT2Jq
ZWN0KiBvd25lciwgY29uc3QgQXRvbWljU3RyaW5nJgogICAgIENvdW50ZXJNYXA6Oml0ZXJhdG9y
IG1hcEl0ZXJhdG9yID0gbWFwLT5maW5kKGlkZW50aWZpZXIpOwogICAgIGlmIChtYXBJdGVyYXRv
ciA9PSBtYXAtPmVuZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgZGVzdHJveUNvdW50ZXJOb2Rl
V2l0aG91dE1hcFJlbW92YWwoaWRlbnRpZmllciwgbWFwSXRlcmF0b3ItPnNlY29uZC5nZXQoKSk7
CisgICAgZGVzdHJveUNvdW50ZXJOb2RlV2l0aG91dE1hcFJlbW92YWwoaWRlbnRpZmllciwgbWFw
SXRlcmF0b3ItPnZhbHVlLmdldCgpKTsKICAgICBtYXAtPnJlbW92ZShtYXBJdGVyYXRvcik7CiAg
ICAgLy8gV2UgZG8gbm90IGRlbGV0ZSAibWFwIiBoZXJlIGV2ZW4gaWYgZW1wdHkgYmVjYXVzZSB3
ZSBleHBlY3QgdG8gcmV1c2UKICAgICAvLyBpdCBzb29uLiBJbiBvcmRlciBmb3IgYSByZW5kZXJl
ciB0byBsb3NlIGFsbCBpdHMgY291bnRlcnMgcGVybWFuZW50bHksCkBAIC02MjUsMjIgKzYyNSwy
MiBAQCBzdGF0aWMgdm9pZCB1cGRhdGVDb3VudGVycyhSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQog
ICAgIENvdW50ZXJEaXJlY3RpdmVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGRpcmVjdGl2ZU1h
cC0+ZW5kKCk7CiAgICAgaWYgKCFyZW5kZXJlci0+aGFzQ291bnRlck5vZGVNYXAoKSkgewogICAg
ICAgICBmb3IgKENvdW50ZXJEaXJlY3RpdmVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZGlyZWN0
aXZlTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBtYWtlQ291bnRl
ck5vZGUocmVuZGVyZXIsIGl0LT5maXJzdCwgZmFsc2UpOworICAgICAgICAgICAgbWFrZUNvdW50
ZXJOb2RlKHJlbmRlcmVyLCBpdC0+a2V5LCBmYWxzZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgQ291bnRlck1hcCogY291bnRlck1hcCA9IGNvdW50ZXJNYXBzKCkuZ2V0KHJlbmRlcmVy
KTsKICAgICBBU1NFUlQoY291bnRlck1hcCk7CiAgICAgZm9yIChDb3VudGVyRGlyZWN0aXZlTWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IGRpcmVjdGl2ZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7Ci0gICAgICAgIFJlZlB0cjxDb3VudGVyTm9kZT4gbm9kZSA9IGNvdW50ZXJNYXAtPmdl
dChpdC0+Zmlyc3QpOworICAgICAgICBSZWZQdHI8Q291bnRlck5vZGU+IG5vZGUgPSBjb3VudGVy
TWFwLT5nZXQoaXQtPmtleSk7CiAgICAgICAgIGlmICghbm9kZSkgewotICAgICAgICAgICAgbWFr
ZUNvdW50ZXJOb2RlKHJlbmRlcmVyLCBpdC0+Zmlyc3QsIGZhbHNlKTsKKyAgICAgICAgICAgIG1h
a2VDb3VudGVyTm9kZShyZW5kZXJlciwgaXQtPmtleSwgZmFsc2UpOwogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIH0KICAgICAgICAgUmVmUHRyPENvdW50ZXJOb2RlPiBuZXdQYXJlbnQg
PSAwOwogICAgICAgICBSZWZQdHI8Q291bnRlck5vZGU+IG5ld1ByZXZpb3VzU2libGluZyA9IDA7
CiAgICAgICAgIAotICAgICAgICBmaW5kUGxhY2VGb3JDb3VudGVyKHJlbmRlcmVyLCBpdC0+Zmly
c3QsIG5vZGUtPmhhc1Jlc2V0VHlwZSgpLCBuZXdQYXJlbnQsIG5ld1ByZXZpb3VzU2libGluZyk7
Ci0gICAgICAgIGlmIChub2RlICE9IGNvdW50ZXJNYXAtPmdldChpdC0+Zmlyc3QpKQorICAgICAg
ICBmaW5kUGxhY2VGb3JDb3VudGVyKHJlbmRlcmVyLCBpdC0+a2V5LCBub2RlLT5oYXNSZXNldFR5
cGUoKSwgbmV3UGFyZW50LCBuZXdQcmV2aW91c1NpYmxpbmcpOworICAgICAgICBpZiAobm9kZSAh
PSBjb3VudGVyTWFwLT5nZXQoaXQtPmtleSkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgQ291bnRlck5vZGUqIHBhcmVudCA9IG5vZGUtPnBhcmVudCgpOwogICAgICAgICBpZiAobmV3
UGFyZW50ID09IHBhcmVudCAmJiBuZXdQcmV2aW91c1NpYmxpbmcgPT0gbm9kZS0+cHJldmlvdXNT
aWJsaW5nKCkpCkBAIC02NDgsNyArNjQ4LDcgQEAgc3RhdGljIHZvaWQgdXBkYXRlQ291bnRlcnMo
UmVuZGVyT2JqZWN0KiByZW5kZXJlcikKICAgICAgICAgaWYgKHBhcmVudCkKICAgICAgICAgICAg
IHBhcmVudC0+cmVtb3ZlQ2hpbGQobm9kZS5nZXQoKSk7CiAgICAgICAgIGlmIChuZXdQYXJlbnQp
Ci0gICAgICAgICAgICBuZXdQYXJlbnQtPmluc2VydEFmdGVyKG5vZGUuZ2V0KCksIG5ld1ByZXZp
b3VzU2libGluZy5nZXQoKSwgaXQtPmZpcnN0KTsKKyAgICAgICAgICAgIG5ld1BhcmVudC0+aW5z
ZXJ0QWZ0ZXIobm9kZS5nZXQoKSwgbmV3UHJldmlvdXNTaWJsaW5nLmdldCgpLCBpdC0+a2V5KTsK
ICAgICB9CiB9CiAKQEAgLTY4MCwyMSArNjgwLDIxIEBAIHZvaWQgUmVuZGVyQ291bnRlcjo6cmVu
ZGVyZXJTdHlsZUNoYW5nZWQoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5
CiAgICAgICAgICAgICBDb3VudGVyRGlyZWN0aXZlTWFwOjpjb25zdF9pdGVyYXRvciBuZXdNYXBF
bmQgPSBuZXdDb3VudGVyRGlyZWN0aXZlcy0+ZW5kKCk7CiAgICAgICAgICAgICBDb3VudGVyRGly
ZWN0aXZlTWFwOjpjb25zdF9pdGVyYXRvciBvbGRNYXBFbmQgPSBvbGRDb3VudGVyRGlyZWN0aXZl
cy0+ZW5kKCk7CiAgICAgICAgICAgICBmb3IgKENvdW50ZXJEaXJlY3RpdmVNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbmV3Q291bnRlckRpcmVjdGl2ZXMtPmJlZ2luKCk7IGl0ICE9IG5ld01hcEVu
ZDsgKytpdCkgewotICAgICAgICAgICAgICAgIENvdW50ZXJEaXJlY3RpdmVNYXA6OmNvbnN0X2l0
ZXJhdG9yIG9sZE1hcEl0ID0gb2xkQ291bnRlckRpcmVjdGl2ZXMtPmZpbmQoaXQtPmZpcnN0KTsK
KyAgICAgICAgICAgICAgICBDb3VudGVyRGlyZWN0aXZlTWFwOjpjb25zdF9pdGVyYXRvciBvbGRN
YXBJdCA9IG9sZENvdW50ZXJEaXJlY3RpdmVzLT5maW5kKGl0LT5rZXkpOwogICAgICAgICAgICAg
ICAgIGlmIChvbGRNYXBJdCAhPSBvbGRNYXBFbmQpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KG9sZE1hcEl0LT5zZWNvbmQgPT0gaXQtPnNlY29uZCkKKyAgICAgICAgICAgICAgICAgICAgaWYg
KG9sZE1hcEl0LT52YWx1ZSA9PSBpdC0+dmFsdWUpCiAgICAgICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgUmVuZGVyQ291bnRlcjo6ZGVzdHJveUNvdW50
ZXJOb2RlKHJlbmRlcmVyLCBpdC0+Zmlyc3QpOworICAgICAgICAgICAgICAgICAgICBSZW5kZXJD
b3VudGVyOjpkZXN0cm95Q291bnRlck5vZGUocmVuZGVyZXIsIGl0LT5rZXkpOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAvLyBXZSBtdXN0IGNyZWF0ZSB0aGlzIG5vZGUgaGVy
ZSwgYmVjYXVzZSB0aGUgY2hhbmdlZCBub2RlIG1heSBiZSBhIG5vZGUgd2l0aCBubyBkaXNwbGF5
IHN1Y2ggYXMKICAgICAgICAgICAgICAgICAvLyBhcyB0aG9zZSBjcmVhdGVkIGJ5IHRoZSBpbmNy
ZW1lbnQgb3IgcmVzZXQgZGlyZWN0aXZlcyBhbmQgdGhlIHJlLWxheW91dCB0aGF0IHdpbGwgaGFw
cGVuIHdpbGwKICAgICAgICAgICAgICAgICAvLyBub3QgY2F0Y2ggdGhlIGNoYW5nZSBpZiB0aGUg
bm9kZSBoYWQgbm8gY2hpbGRyZW4uCi0gICAgICAgICAgICAgICAgbWFrZUNvdW50ZXJOb2RlKHJl
bmRlcmVyLCBpdC0+Zmlyc3QsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBtYWtlQ291bnRlck5v
ZGUocmVuZGVyZXIsIGl0LT5rZXksIGZhbHNlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IC8vIERlc3Ryb3lpbmcgb2xkIGNvdW50ZXJzIHRoYXQgZG8gbm90IGV4aXN0IGluIHRoZSBuZXcg
Y291bnRlckRpcmVjdGl2ZSBtYXAuCiAgICAgICAgICAgICBmb3IgKENvdW50ZXJEaXJlY3RpdmVN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gb2xkQ291bnRlckRpcmVjdGl2ZXMtPmJlZ2luKCk7IGl0
ICE9b2xkTWFwRW5kOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFuZXdDb3VudGVyRGly
ZWN0aXZlcy0+Y29udGFpbnMoaXQtPmZpcnN0KSkKLSAgICAgICAgICAgICAgICAgICAgUmVuZGVy
Q291bnRlcjo6ZGVzdHJveUNvdW50ZXJOb2RlKHJlbmRlcmVyLCBpdC0+Zmlyc3QpOworICAgICAg
ICAgICAgICAgIGlmICghbmV3Q291bnRlckRpcmVjdGl2ZXMtPmNvbnRhaW5zKGl0LT5rZXkpKQor
ICAgICAgICAgICAgICAgICAgICBSZW5kZXJDb3VudGVyOjpkZXN0cm95Q291bnRlck5vZGUocmVu
ZGVyZXIsIGl0LT5rZXkpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgaWYgKHJlbmRlcmVyLT5oYXNDb3VudGVyTm9kZU1hcCgpKQpAQCAtNzA2LDcgKzcwNiw3
IEBAIHZvaWQgUmVuZGVyQ291bnRlcjo6cmVuZGVyZXJTdHlsZUNoYW5nZWQoUmVuZGVyT2JqZWN0
KiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5CiAgICAgICAgICAgICAvLyBXZSBtdXN0IGNyZWF0
ZSB0aGlzIG5vZGUgaGVyZSwgYmVjYXVzZSB0aGUgYWRkZWQgbm9kZSBtYXkgYmUgYSBub2RlIHdp
dGggbm8gZGlzcGxheSBzdWNoIGFzCiAgICAgICAgICAgICAvLyBhcyB0aG9zZSBjcmVhdGVkIGJ5
IHRoZSBpbmNyZW1lbnQgb3IgcmVzZXQgZGlyZWN0aXZlcyBhbmQgdGhlIHJlLWxheW91dCB0aGF0
IHdpbGwgaGFwcGVuIHdpbGwKICAgICAgICAgICAgIC8vIG5vdCBjYXRjaCB0aGUgY2hhbmdlIGlm
IHRoZSBub2RlIGhhZCBubyBjaGlsZHJlbi4KLSAgICAgICAgICAgIG1ha2VDb3VudGVyTm9kZShy
ZW5kZXJlciwgaXQtPmZpcnN0LCBmYWxzZSk7CisgICAgICAgICAgICBtYWtlQ291bnRlck5vZGUo
cmVuZGVyZXIsIGl0LT5rZXksIGZhbHNlKTsKICAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcAppbmRleCAwNzQxZWE4Yzhh
ZjQ4MmUyNWE5YzVjYzQyYmU0Zjg5ZjNmNDUzMTY0Li5iY2QwMzI3YzdlYzZiNDkxMGVmNDJjNTQ1
MDM1NWVlZmZiMjc4YWJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRmxvd1RocmVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZs
b3dUaHJlYWQuY3BwCkBAIC01OTYsNyArNTk2LDcgQEAgdm9pZCBSZW5kZXJGbG93VGhyZWFkOjpz
ZXRSZWdpb25SYW5nZUZvckJveChjb25zdCBSZW5kZXJCb3gqIGJveCwgTGF5b3V0VW5pdCBvZmYK
ICAgICB9CiAKICAgICAvLyBJZiBub3RoaW5nIGNoYW5nZWQsIGp1c3QgYmFpbC4KLSAgICBSZW5k
ZXJSZWdpb25SYW5nZSYgcmFuZ2UgPSBpdC0+c2Vjb25kOworICAgIFJlbmRlclJlZ2lvblJhbmdl
JiByYW5nZSA9IGl0LT52YWx1ZTsKICAgICBpZiAocmFuZ2Uuc3RhcnRSZWdpb24oKSA9PSBzdGFy
dFJlZ2lvbiAmJiByYW5nZS5lbmRSZWdpb24oKSA9PSBlbmRSZWdpb24pCiAgICAgICAgIHJldHVy
bjsKIApAQCAtNjI2LDcgKzYyNiw3IEBAIHZvaWQgUmVuZGVyRmxvd1RocmVhZDo6Z2V0UmVnaW9u
UmFuZ2VGb3JCb3goY29uc3QgUmVuZGVyQm94KiBib3gsIFJlbmRlclJlZ2lvbiomCiAgICAgaWYg
KGl0ID09IG1fcmVnaW9uUmFuZ2VNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNv
bnN0IFJlbmRlclJlZ2lvblJhbmdlJiByYW5nZSA9IGl0LT5zZWNvbmQ7CisgICAgY29uc3QgUmVu
ZGVyUmVnaW9uUmFuZ2UmIHJhbmdlID0gaXQtPnZhbHVlOwogICAgIHN0YXJ0UmVnaW9uID0gcmFu
Z2Uuc3RhcnRSZWdpb24oKTsKICAgICBlbmRSZWdpb24gPSByYW5nZS5lbmRSZWdpb24oKTsKICAg
ICBBU1NFUlQobV9yZWdpb25MaXN0LmNvbnRhaW5zKHN0YXJ0UmVnaW9uKSAmJiBtX3JlZ2lvbkxp
c3QuY29udGFpbnMoZW5kUmVnaW9uKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyLmNwcAppbmRleCBhNDk1NDRkZjFjZmI2N2FiNWEwNTgzOGU5NGIwYThmMzQ0ZmJiN2JlLi5l
OWE1NGQ5MzY5ZjVhZjZhZGQwNjU3MDM1NGRhMDdjY2MzOWM4N2I2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTI4NzQsNyArMjg3NCw3IEBAIHZvaWQgUmVu
ZGVyTGF5ZXI6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgTGF5b3V0UmVj
dCYgZGFtYWdlUmVjdCwKICAgICBwYWludExheWVyKHRoaXMsIGNvbnRleHQsIGVuY2xvc2luZ0lu
dFJlY3QoZGFtYWdlUmVjdCksIExheW91dFNpemUoKSwgcGFpbnRCZWhhdmlvciwgcGFpbnRpbmdS
b290LCByZWdpb24sICZvdmVybGFwVGVzdFJlcXVlc3RzLCBwYWludEZsYWdzKTsKICAgICBPdmVy
bGFwVGVzdFJlcXVlc3RNYXA6Oml0ZXJhdG9yIGVuZCA9IG92ZXJsYXBUZXN0UmVxdWVzdHMuZW5k
KCk7CiAgICAgZm9yIChPdmVybGFwVGVzdFJlcXVlc3RNYXA6Oml0ZXJhdG9yIGl0ID0gb3Zlcmxh
cFRlc3RSZXF1ZXN0cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5maXJz
dC0+c2V0T3ZlcmxhcFRlc3RSZXN1bHQoZmFsc2UpOworICAgICAgICBpdC0+a2V5LT5zZXRPdmVy
bGFwVGVzdFJlc3VsdChmYWxzZSk7CiB9CiAKIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50T3Zlcmxh
eVNjcm9sbGJhcnMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBk
YW1hZ2VSZWN0LCBQYWludEJlaGF2aW9yIHBhaW50QmVoYXZpb3IsIFJlbmRlck9iamVjdCogcGFp
bnRpbmdSb290KQpAQCAtMjk0MywxMSArMjk0MywxMSBAQCBzdGF0aWMgdm9pZCBwZXJmb3JtT3Zl
cmxhcFRlc3RzKE92ZXJsYXBUZXN0UmVxdWVzdE1hcCYgb3ZlcmxhcFRlc3RSZXF1ZXN0cywgY29u
cwogICAgIE92ZXJsYXBUZXN0UmVxdWVzdE1hcDo6aXRlcmF0b3IgZW5kID0gb3ZlcmxhcFRlc3RS
ZXF1ZXN0cy5lbmQoKTsKICAgICBMYXlvdXRSZWN0IGJvdW5kaW5nQm94ID0gbGF5ZXItPmJvdW5k
aW5nQm94KHJvb3RMYXllcik7CiAgICAgZm9yIChPdmVybGFwVGVzdFJlcXVlc3RNYXA6Oml0ZXJh
dG9yIGl0ID0gb3ZlcmxhcFRlc3RSZXF1ZXN0cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
LSAgICAgICAgaWYgKCFib3VuZGluZ0JveC5pbnRlcnNlY3RzKGl0LT5zZWNvbmQpKQorICAgICAg
ICBpZiAoIWJvdW5kaW5nQm94LmludGVyc2VjdHMoaXQtPnZhbHVlKSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwogCi0gICAgICAgIGl0LT5maXJzdC0+c2V0T3ZlcmxhcFRlc3RSZXN1bHQodHJ1ZSk7
Ci0gICAgICAgIG92ZXJsYXBwZWRSZXF1ZXN0Q2xpZW50cy5hcHBlbmQoaXQtPmZpcnN0KTsKKyAg
ICAgICAgaXQtPmtleS0+c2V0T3ZlcmxhcFRlc3RSZXN1bHQodHJ1ZSk7CisgICAgICAgIG92ZXJs
YXBwZWRSZXF1ZXN0Q2xpZW50cy5hcHBlbmQoaXQtPmtleSk7CiAgICAgfQogICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgb3ZlcmxhcHBlZFJlcXVlc3RDbGllbnRzLnNpemUoKTsgKytpKQogICAg
ICAgICBvdmVybGFwVGVzdFJlcXVlc3RzLnJlbW92ZShvdmVybGFwcGVkUmVxdWVzdENsaWVudHNb
aV0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmls
dGVySW5mby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJJ
bmZvLmNwcAppbmRleCBhY2JmMDdkOWQxYmZkMjAyMWM1NTQxNTI2NmRkNDQzMDUwNTU1YTdkLi5j
YjRjNWQ2NjExMGM5MjQxMmYzNTBlYTg5OTMyNzJjZTYyY2Q3ZTA4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvLmNwcApAQCAtNTYsNyAr
NTYsNyBAQCBSZW5kZXJMYXllckZpbHRlckluZm8qIFJlbmRlckxheWVyRmlsdGVySW5mbzo6Zmls
dGVySW5mb0ZvclJlbmRlckxheWVyKGNvbnN0IFJlbgogICAgIGlmICghc19maWx0ZXJNYXApCiAg
ICAgICAgIHJldHVybiAwOwogICAgIFJlbmRlckxheWVyRmlsdGVySW5mb01hcDo6aXRlcmF0b3Ig
aXRlciA9IHNfZmlsdGVyTWFwLT5maW5kKGxheWVyKTsKLSAgICByZXR1cm4gKGl0ZXIgIT0gc19m
aWx0ZXJNYXAtPmVuZCgpKSA/IGl0ZXItPnNlY29uZCA6IDA7CisgICAgcmV0dXJuIChpdGVyICE9
IHNfZmlsdGVyTWFwLT5lbmQoKSkgPyBpdGVyLT52YWx1ZSA6IDA7CiB9CiAKIFJlbmRlckxheWVy
RmlsdGVySW5mbyogUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvOjpjcmVhdGVGaWx0ZXJJbmZvRm9yUmVu
ZGVyTGF5ZXJJZk5lZWRlZChSZW5kZXJMYXllciogbGF5ZXIpCkBAIC02Nyw3ICs2Nyw3IEBAIFJl
bmRlckxheWVyRmlsdGVySW5mbyogUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvOjpjcmVhdGVGaWx0ZXJJ
bmZvRm9yUmVuZGVyTGF5ZXJJZk5lCiAgICAgUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvTWFwOjppdGVy
YXRvciBpdGVyID0gc19maWx0ZXJNYXAtPmZpbmQobGF5ZXIpOwogICAgIGlmIChpdGVyICE9IHNf
ZmlsdGVyTWFwLT5lbmQoKSkgewogICAgICAgICBBU1NFUlQobGF5ZXItPmhhc0ZpbHRlckluZm8o
KSk7Ci0gICAgICAgIHJldHVybiBpdGVyLT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBpdGVyLT52
YWx1ZTsKICAgICB9CiAgICAgCiAgICAgUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvKiBmaWx0ZXIgPSBu
ZXcgUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvKGxheWVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd1RocmVhZC5jcHAKaW5kZXggMjY0YWViNDk3NzkxOWJi
NTRmZjhjMDRlNzE1OTgxNzhkYzRjY2RkNS4uZjVlNjNmNDA2NDdhOWUxMTNkNTQ1ZjY2Yzk4NTRl
YjNhZjE2NzY2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5h
bWVkRmxvd1RocmVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5h
bWVkRmxvd1RocmVhZC5jcHAKQEAgLTE0Miw3ICsxNDIsNyBAQCBib29sIFJlbmRlck5hbWVkRmxv
d1RocmVhZDo6ZGVwZW5kc09uKFJlbmRlck5hbWVkRmxvd1RocmVhZCogb3RoZXJSZW5kZXJGbG93
VGhyZQogICAgIFJlbmRlck5hbWVkRmxvd1RocmVhZENvdW50ZWRTZXQ6OmNvbnN0X2l0ZXJhdG9y
IGl0ZXJhdG9yID0gbV9sYXlvdXRCZWZvcmVUaHJlYWRzU2V0LmJlZ2luKCk7CiAgICAgUmVuZGVy
TmFtZWRGbG93VGhyZWFkQ291bnRlZFNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9sYXlvdXRC
ZWZvcmVUaHJlYWRzU2V0LmVuZCgpOwogICAgIGZvciAoOyBpdGVyYXRvciAhPSBlbmQ7ICsraXRl
cmF0b3IpIHsKLSAgICAgICAgY29uc3QgUmVuZGVyTmFtZWRGbG93VGhyZWFkKiBiZWZvcmVGbG93
VGhyZWFkID0gKCppdGVyYXRvcikuZmlyc3Q7CisgICAgICAgIGNvbnN0IFJlbmRlck5hbWVkRmxv
d1RocmVhZCogYmVmb3JlRmxvd1RocmVhZCA9ICgqaXRlcmF0b3IpLmtleTsKICAgICAgICAgaWYg
KGJlZm9yZUZsb3dUaHJlYWQtPmRlcGVuZHNPbihvdGhlclJlbmRlckZsb3dUaHJlYWQpKQogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMzA5LDcgKzMwOSw3IEBAIHZvaWQgUmVu
ZGVyTmFtZWRGbG93VGhyZWFkOjpyZW1vdmVEZXBlbmRlbmN5T25GbG93VGhyZWFkKFJlbmRlck5h
bWVkRmxvd1RocmVhZCoKIHZvaWQgUmVuZGVyTmFtZWRGbG93VGhyZWFkOjpwdXNoRGVwZW5kZW5j
aWVzKFJlbmRlck5hbWVkRmxvd1RocmVhZExpc3QmIGxpc3QpCiB7CiAgICAgZm9yIChSZW5kZXJO
YW1lZEZsb3dUaHJlYWRDb3VudGVkU2V0OjppdGVyYXRvciBpdGVyID0gbV9sYXlvdXRCZWZvcmVU
aHJlYWRzU2V0LmJlZ2luKCk7IGl0ZXIgIT0gbV9sYXlvdXRCZWZvcmVUaHJlYWRzU2V0LmVuZCgp
OyArK2l0ZXIpIHsKLSAgICAgICAgUmVuZGVyTmFtZWRGbG93VGhyZWFkKiBmbG93VGhyZWFkID0g
KCppdGVyKS5maXJzdDsKKyAgICAgICAgUmVuZGVyTmFtZWRGbG93VGhyZWFkKiBmbG93VGhyZWFk
ID0gKCppdGVyKS5rZXk7CiAgICAgICAgIGlmIChsaXN0LmNvbnRhaW5zKGZsb3dUaHJlYWQpKQog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGZsb3dUaHJlYWQtPnB1c2hEZXBlbmRlbmNp
ZXMobGlzdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVn
aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZWdpb24uY3BwCmluZGV4
IDhhNzQ4N2Q3Y2RhNjgyMzc3NTE0Y2RmZjcxODY5ZjdiMDViY2IzNDMuLjFjNWRkYmVlYjYxZTJh
ODA2ZTI5Yzk4NDU0YmY0YWU1ZDJlNDhiNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJSZWdpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJSZWdpb24uY3BwCkBAIC0zMzYsNyArMzM2LDcgQEAgUmVuZGVyQm94UmVnaW9uSW5mbyog
UmVuZGVyUmVnaW9uOjpzZXRSZW5kZXJCb3hSZWdpb25JbmZvKGNvbnN0IFJlbmRlckJveCogYm94
LAogICAgIGlmICghbV9pc1ZhbGlkIHx8ICFtX2Zsb3dUaHJlYWQpCiAgICAgICAgIHJldHVybiAw
OwogCi0gICAgT3duUHRyPFJlbmRlckJveFJlZ2lvbkluZm8+JiBib3hJbmZvID0gbV9yZW5kZXJC
b3hSZWdpb25JbmZvLmFkZChib3gsIG51bGxwdHIpLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgT3du
UHRyPFJlbmRlckJveFJlZ2lvbkluZm8+JiBib3hJbmZvID0gbV9yZW5kZXJCb3hSZWdpb25JbmZv
LmFkZChib3gsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoYm94SW5mbykKICAg
ICAgICAgKmJveEluZm8gPSBSZW5kZXJCb3hSZWdpb25JbmZvKGxvZ2ljYWxMZWZ0SW5zZXQsIGxv
Z2ljYWxSaWdodEluc2V0LCBjb250YWluaW5nQmxvY2tDaGFpbklzSW5zZXQpOwogICAgIGVsc2UK
QEAgLTQwMSw4ICs0MDEsOCBAQCB2b2lkIFJlbmRlclJlZ2lvbjo6c2V0UmVnaW9uT2JqZWN0c1Jl
Z2lvblN0eWxlKCkKICAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBvYmplY3RTdHlsZUluUmVn
aW9uOwogICAgICAgICBib29sIG9iamVjdFJlZ2lvblN0eWxlQ2FjaGVkID0gZmFsc2U7CiAgICAg
ICAgIGlmIChpdCAhPSBtX3JlbmRlck9iamVjdFJlZ2lvblN0eWxlLmVuZCgpKSB7Ci0gICAgICAg
ICAgICBvYmplY3RTdHlsZUluUmVnaW9uID0gaXQtPnNlY29uZC5zdHlsZTsKLSAgICAgICAgICAg
IEFTU0VSVChpdC0+c2Vjb25kLmNhY2hlZCk7CisgICAgICAgICAgICBvYmplY3RTdHlsZUluUmVn
aW9uID0gaXQtPnZhbHVlLnN0eWxlOworICAgICAgICAgICAgQVNTRVJUKGl0LT52YWx1ZS5jYWNo
ZWQpOwogICAgICAgICAgICAgb2JqZWN0UmVnaW9uU3R5bGVDYWNoZWQgPSB0cnVlOwogICAgICAg
ICB9IGVsc2UKICAgICAgICAgICAgIG9iamVjdFN0eWxlSW5SZWdpb24gPSBjb21wdXRlU3R5bGVJ
blJlZ2lvbihvYmplY3QpOwpAQCAtNDIwLDEyICs0MjAsMTIgQEAgdm9pZCBSZW5kZXJSZWdpb246
OnJlc3RvcmVSZWdpb25PYmplY3RzT3JpZ2luYWxTdHlsZSgpCiAKICAgICBSZW5kZXJPYmplY3RS
ZWdpb25TdHlsZU1hcCB0ZW1wOwogICAgIGZvciAoUmVuZGVyT2JqZWN0UmVnaW9uU3R5bGVNYXA6
Oml0ZXJhdG9yIGl0ZXIgPSBtX3JlbmRlck9iamVjdFJlZ2lvblN0eWxlLmJlZ2luKCksIGVuZCA9
IG1fcmVuZGVyT2JqZWN0UmVnaW9uU3R5bGUuZW5kKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsK
LSAgICAgICAgUmVuZGVyT2JqZWN0KiBvYmplY3QgPSBjb25zdF9jYXN0PFJlbmRlck9iamVjdCo+
KGl0ZXItPmZpcnN0KTsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBvYmplY3QgPSBjb25zdF9jYXN0
PFJlbmRlck9iamVjdCo+KGl0ZXItPmtleSk7CiAgICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4g
b2JqZWN0UmVnaW9uU3R5bGUgPSBvYmplY3QtPnN0eWxlKCk7Ci0gICAgICAgIFJlZlB0cjxSZW5k
ZXJTdHlsZT4gb2JqZWN0T3JpZ2luYWxTdHlsZSA9IGl0ZXItPnNlY29uZC5zdHlsZTsKKyAgICAg
ICAgUmVmUHRyPFJlbmRlclN0eWxlPiBvYmplY3RPcmlnaW5hbFN0eWxlID0gaXRlci0+dmFsdWUu
c3R5bGU7CiAgICAgICAgIG9iamVjdC0+c2V0U3R5bGVJbnRlcm5hbChvYmplY3RPcmlnaW5hbFN0
eWxlKTsKIAotICAgICAgICBib29sIHNob3VsZENhY2hlUmVnaW9uU3R5bGUgPSBpdGVyLT5zZWNv
bmQuY2FjaGVkOworICAgICAgICBib29sIHNob3VsZENhY2hlUmVnaW9uU3R5bGUgPSBpdGVyLT52
YWx1ZS5jYWNoZWQ7CiAgICAgICAgIGlmICghc2hvdWxkQ2FjaGVSZWdpb25TdHlsZSkgewogICAg
ICAgICAgICAgLy8gQ2hlY2sgd2hldGhlciB3ZSBzaG91bGQgY2FjaGUgdGhlIGNvbXB1dGVkIHN0
eWxlIGluIHJlZ2lvbi4KICAgICAgICAgICAgIHVuc2lnbmVkIGNoYW5nZWRDb250ZXh0U2Vuc2l0
aXZlUHJvcGVydGllcyA9IENvbnRleHRTZW5zaXRpdmVQcm9wZXJ0eU5vbmU7CkBAIC00ODIsNyAr
NDgyLDcgQEAgdm9pZCBSZW5kZXJSZWdpb246OmNvbXB1dGVDaGlsZHJlblN0eWxlSW5SZWdpb24o
Y29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCiAgICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4g
Y2hpbGRTdHlsZUluUmVnaW9uOwogICAgICAgICBib29sIG9iamVjdFJlZ2lvblN0eWxlQ2FjaGVk
ID0gZmFsc2U7CiAgICAgICAgIGlmIChpdCAhPSBtX3JlbmRlck9iamVjdFJlZ2lvblN0eWxlLmVu
ZCgpKSB7Ci0gICAgICAgICAgICBjaGlsZFN0eWxlSW5SZWdpb24gPSBpdC0+c2Vjb25kLnN0eWxl
OworICAgICAgICAgICAgY2hpbGRTdHlsZUluUmVnaW9uID0gaXQtPnZhbHVlLnN0eWxlOwogICAg
ICAgICAgICAgb2JqZWN0UmVnaW9uU3R5bGVDYWNoZWQgPSB0cnVlOwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgaWYgKGNoaWxkLT5pc0Fub255bW91cygpKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAppbmRleCBlYjY5NDg5MjE2OTMy
Zjg4MTJkMzcxNWY5ZWM1MWNmMTU1MTU0YmE4Li5iM2I2ZDM0MDJiNGQzZDg0NzFhMmEyOTZhODIz
MTk5ZTQ1ODRkMjg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGFibGVTZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFi
bGVTZWN0aW9uLmNwcApAQCAtMTQ2NCw3ICsxNDY0LDcgQEAgQ29sbGFwc2VkQm9yZGVyVmFsdWUm
IFJlbmRlclRhYmxlU2VjdGlvbjo6Y2FjaGVkQ29sbGFwc2VkQm9yZGVyKGNvbnN0IFJlbmRlclRh
YmwKICAgICBBU1NFUlQodGFibGUoKS0+Y29sbGFwc2VCb3JkZXJzKCkpOwogICAgIEhhc2hNYXA8
cGFpcjxjb25zdCBSZW5kZXJUYWJsZUNlbGwqLCBpbnQ+LCBDb2xsYXBzZWRCb3JkZXJWYWx1ZT46
Oml0ZXJhdG9yIGl0ID0gbV9jZWxsc0NvbGxhcHNlZEJvcmRlcnMuZmluZChtYWtlX3BhaXIoY2Vs
bCwgc2lkZSkpOwogICAgIEFTU0VSVChpdCAhPSBtX2NlbGxzQ29sbGFwc2VkQm9yZGVycy5lbmQo
KSk7Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgcmV0dXJuIGl0LT52YWx1ZTsKIH0KIAog
UmVuZGVyVGFibGVTZWN0aW9uKiBSZW5kZXJUYWJsZVNlY3Rpb246OmNyZWF0ZUFub255bW91c1dp
dGhQYXJlbnRSZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QqIHBhcmVudCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbSBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQppbmRleCAwYmM5ODA0ZmI3NTliMTFlZDk2
YTQwOTEwNmEwMTE2Nzk4YzIwNGJlLi42NDA0ZDJhZmMxNDZlODE1NTgwNWI5ZWFlODA4NGIyYTQw
YjgxZjM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVN
YWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCkBA
IC0zODAsNyArMzgwLDcgQEAgQ29sb3IgUmVuZGVyVGhlbWVNYWM6OnN5c3RlbUNvbG9yKGludCBj
c3NWYWx1ZUlkKSBjb25zdAogICAgIHsKICAgICAgICAgSGFzaE1hcDxpbnQsIFJHQkEzMj46Oml0
ZXJhdG9yIGl0ID0gbV9zeXN0ZW1Db2xvckNhY2hlLmZpbmQoY3NzVmFsdWVJZCk7CiAgICAgICAg
IGlmIChpdCAhPSBtX3N5c3RlbUNvbG9yQ2FjaGUuZW5kKCkpCi0gICAgICAgICAgICByZXR1cm4g
aXQtPnNlY29uZDsKKyAgICAgICAgICAgIHJldHVybiBpdC0+dmFsdWU7CiAgICAgfQogCiAgICAg
Q29sb3IgY29sb3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Vmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKaW5kZXgg
MjU2MjVlZGFhYzRiZDc5ODEzZWE2NGUyMTk5ZjM3MzY3OWExYTE5OS4uYjNiZDg5YzQ0MWY5MzE5
YzU3MjY5ZTVhMDljOTYxZGQwODBmNDZkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJWaWV3LmNwcApAQCAtNDUzLDcgKzQ1Myw3IEBAIEludFJlY3QgUmVuZGVyVmlldzo6c2VsZWN0
aW9uQm91bmRzKGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRlbnQpIGNvbnN0CiAgICAgICAgICAgICBz
ZWxlY3RlZE9iamVjdHMuc2V0KG9zLCBhZG9wdFB0cihuZXcgUmVuZGVyU2VsZWN0aW9uSW5mbyhv
cywgY2xpcFRvVmlzaWJsZUNvbnRlbnQpKSk7CiAgICAgICAgICAgICBSZW5kZXJCbG9jayogY2Ig
PSBvcy0+Y29udGFpbmluZ0Jsb2NrKCk7CiAgICAgICAgICAgICB3aGlsZSAoY2IgJiYgIWNiLT5p
c1JlbmRlclZpZXcoKSkgewotICAgICAgICAgICAgICAgIE93blB0cjxSZW5kZXJTZWxlY3Rpb25J
bmZvPiYgYmxvY2tJbmZvID0gc2VsZWN0ZWRPYmplY3RzLmFkZChjYiwgbnVsbHB0cikuaXRlcmF0
b3ItPnNlY29uZDsKKyAgICAgICAgICAgICAgICBPd25QdHI8UmVuZGVyU2VsZWN0aW9uSW5mbz4m
IGJsb2NrSW5mbyA9IHNlbGVjdGVkT2JqZWN0cy5hZGQoY2IsIG51bGxwdHIpLml0ZXJhdG9yLT52
YWx1ZTsKICAgICAgICAgICAgICAgICBpZiAoYmxvY2tJbmZvKQogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICBibG9ja0luZm8gPSBhZG9wdFB0cihuZXcgUmVuZGVy
U2VsZWN0aW9uSW5mbyhjYiwgY2xpcFRvVmlzaWJsZUNvbnRlbnQpKTsKQEAgLTQ2OCw3ICs0Njgs
NyBAQCBJbnRSZWN0IFJlbmRlclZpZXc6OnNlbGVjdGlvbkJvdW5kcyhib29sIGNsaXBUb1Zpc2li
bGVDb250ZW50KSBjb25zdAogICAgIExheW91dFJlY3Qgc2VsUmVjdDsKICAgICBTZWxlY3Rpb25N
YXA6Oml0ZXJhdG9yIGVuZCA9IHNlbGVjdGVkT2JqZWN0cy5lbmQoKTsKICAgICBmb3IgKFNlbGVj
dGlvbk1hcDo6aXRlcmF0b3IgaSA9IHNlbGVjdGVkT2JqZWN0cy5iZWdpbigpOyBpICE9IGVuZDsg
KytpKSB7Ci0gICAgICAgIFJlbmRlclNlbGVjdGlvbkluZm8qIGluZm8gPSBpLT5zZWNvbmQuZ2V0
KCk7CisgICAgICAgIFJlbmRlclNlbGVjdGlvbkluZm8qIGluZm8gPSBpLT52YWx1ZS5nZXQoKTsK
ICAgICAgICAgLy8gUmVuZGVyU2VsZWN0aW9uSW5mbzo6cmVjdCgpIGlzIGluIHRoZSBjb29yZGlu
YXRlcyBvZiB0aGUgcmVwYWludENvbnRhaW5lciwgc28gbWFwIHRvIHBhZ2UgY29vcmRpbmF0ZXMu
CiAgICAgICAgIExheW91dFJlY3QgY3VyclJlY3QgPSBpbmZvLT5yZWN0KCk7CiAgICAgICAgIGlm
IChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciA9IGluZm8tPnJlcGFpbnRD
b250YWluZXIoKSkgewpAQCAtNTMzLDcgKzUzMyw3IEBAIHZvaWQgUmVuZGVyVmlldzo6c2V0U2Vs
ZWN0aW9uKFJlbmRlck9iamVjdCogc3RhcnQsIGludCBzdGFydFBvcywgUmVuZGVyT2JqZWN0KiBl
CiAgICAgICAgICAgICBpZiAoYmxvY2tSZXBhaW50TW9kZSA9PSBSZXBhaW50TmV3WE9ST2xkKSB7
CiAgICAgICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGNiID0gb3MtPmNvbnRhaW5pbmdCbG9jaygp
OwogICAgICAgICAgICAgICAgIHdoaWxlIChjYiAmJiAhY2ItPmlzUmVuZGVyVmlldygpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIE93blB0cjxSZW5kZXJCbG9ja1NlbGVjdGlvbkluZm8+JiBibG9j
a0luZm8gPSBvbGRTZWxlY3RlZEJsb2Nrcy5hZGQoY2IsIG51bGxwdHIpLml0ZXJhdG9yLT5zZWNv
bmQ7CisgICAgICAgICAgICAgICAgICAgIE93blB0cjxSZW5kZXJCbG9ja1NlbGVjdGlvbkluZm8+
JiBibG9ja0luZm8gPSBvbGRTZWxlY3RlZEJsb2Nrcy5hZGQoY2IsIG51bGxwdHIpLml0ZXJhdG9y
LT52YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGJsb2NrSW5mbykKICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBibG9ja0luZm8gPSBhZG9w
dFB0cihuZXcgUmVuZGVyQmxvY2tTZWxlY3Rpb25JbmZvKGNiKSk7CkBAIC01NDgsNyArNTQ4LDcg
QEAgdm9pZCBSZW5kZXJWaWV3OjpzZXRTZWxlY3Rpb24oUmVuZGVyT2JqZWN0KiBzdGFydCwgaW50
IHN0YXJ0UG9zLCBSZW5kZXJPYmplY3QqIGUKICAgICAvLyBOb3cgY2xlYXIgdGhlIHNlbGVjdGlv
bi4KICAgICBTZWxlY3RlZE9iamVjdE1hcDo6aXRlcmF0b3Igb2xkT2JqZWN0c0VuZCA9IG9sZFNl
bGVjdGVkT2JqZWN0cy5lbmQoKTsKICAgICBmb3IgKFNlbGVjdGVkT2JqZWN0TWFwOjppdGVyYXRv
ciBpID0gb2xkU2VsZWN0ZWRPYmplY3RzLmJlZ2luKCk7IGkgIT0gb2xkT2JqZWN0c0VuZDsgKytp
KQotICAgICAgICBpLT5maXJzdC0+c2V0U2VsZWN0aW9uU3RhdGVJZk5lZWRlZChTZWxlY3Rpb25O
b25lKTsKKyAgICAgICAgaS0+a2V5LT5zZXRTZWxlY3Rpb25TdGF0ZUlmTmVlZGVkKFNlbGVjdGlv
bk5vbmUpOwogCiAgICAgLy8gc2V0IHNlbGVjdGlvbiBzdGFydCBhbmQgZW5kCiAgICAgbV9zZWxl
Y3Rpb25TdGFydCA9IHN0YXJ0OwpAQCAtNTg2LDcgKzU4Niw3IEBAIHZvaWQgUmVuZGVyVmlldzo6
c2V0U2VsZWN0aW9uKFJlbmRlck9iamVjdCogc3RhcnQsIGludCBzdGFydFBvcywgUmVuZGVyT2Jq
ZWN0KiBlCiAgICAgICAgICAgICBuZXdTZWxlY3RlZE9iamVjdHMuc2V0KG8sIGFkb3B0UHRyKG5l
dyBSZW5kZXJTZWxlY3Rpb25JbmZvKG8sIHRydWUpKSk7CiAgICAgICAgICAgICBSZW5kZXJCbG9j
ayogY2IgPSBvLT5jb250YWluaW5nQmxvY2soKTsKICAgICAgICAgICAgIHdoaWxlIChjYiAmJiAh
Y2ItPmlzUmVuZGVyVmlldygpKSB7Ci0gICAgICAgICAgICAgICAgT3duUHRyPFJlbmRlckJsb2Nr
U2VsZWN0aW9uSW5mbz4mIGJsb2NrSW5mbyA9IG5ld1NlbGVjdGVkQmxvY2tzLmFkZChjYiwgbnVs
bHB0cikuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgICAgICAgICBPd25QdHI8UmVuZGVyQmxv
Y2tTZWxlY3Rpb25JbmZvPiYgYmxvY2tJbmZvID0gbmV3U2VsZWN0ZWRCbG9ja3MuYWRkKGNiLCBu
dWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgICAgICAgICAgaWYgKGJsb2NrSW5mbykK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgYmxvY2tJbmZvID0g
YWRvcHRQdHIobmV3IFJlbmRlckJsb2NrU2VsZWN0aW9uSW5mbyhjYikpOwpAQCAtNjA0LDkgKzYw
NCw5IEBAIHZvaWQgUmVuZGVyVmlldzo6c2V0U2VsZWN0aW9uKFJlbmRlck9iamVjdCogc3RhcnQs
IGludCBzdGFydFBvcywgUmVuZGVyT2JqZWN0KiBlCiAKICAgICAvLyBIYXZlIGFueSBvZiB0aGUg
b2xkIHNlbGVjdGVkIG9iamVjdHMgY2hhbmdlZCBjb21wYXJlZCB0byB0aGUgbmV3IHNlbGVjdGlv
bj8KICAgICBmb3IgKFNlbGVjdGVkT2JqZWN0TWFwOjppdGVyYXRvciBpID0gb2xkU2VsZWN0ZWRP
YmplY3RzLmJlZ2luKCk7IGkgIT0gb2xkT2JqZWN0c0VuZDsgKytpKSB7Ci0gICAgICAgIFJlbmRl
ck9iamVjdCogb2JqID0gaS0+Zmlyc3Q7CisgICAgICAgIFJlbmRlck9iamVjdCogb2JqID0gaS0+
a2V5OwogICAgICAgICBSZW5kZXJTZWxlY3Rpb25JbmZvKiBuZXdJbmZvID0gbmV3U2VsZWN0ZWRP
YmplY3RzLmdldChvYmopOwotICAgICAgICBSZW5kZXJTZWxlY3Rpb25JbmZvKiBvbGRJbmZvID0g
aS0+c2Vjb25kLmdldCgpOworICAgICAgICBSZW5kZXJTZWxlY3Rpb25JbmZvKiBvbGRJbmZvID0g
aS0+dmFsdWUuZ2V0KCk7CiAgICAgICAgIGlmICghbmV3SW5mbyB8fCBvbGRJbmZvLT5yZWN0KCkg
IT0gbmV3SW5mby0+cmVjdCgpIHx8IG9sZEluZm8tPnN0YXRlKCkgIT0gbmV3SW5mby0+c3RhdGUo
KSB8fAogICAgICAgICAgICAgKG1fc2VsZWN0aW9uU3RhcnQgPT0gb2JqICYmIG9sZFN0YXJ0UG9z
ICE9IG1fc2VsZWN0aW9uU3RhcnRQb3MpIHx8CiAgICAgICAgICAgICAobV9zZWxlY3Rpb25FbmQg
PT0gb2JqICYmIG9sZEVuZFBvcyAhPSBtX3NlbGVjdGlvbkVuZFBvcykpIHsKQEAgLTYyMSwxNCAr
NjIxLDE0IEBAIHZvaWQgUmVuZGVyVmlldzo6c2V0U2VsZWN0aW9uKFJlbmRlck9iamVjdCogc3Rh
cnQsIGludCBzdGFydFBvcywgUmVuZGVyT2JqZWN0KiBlCiAgICAgLy8gQW55IG5ldyBvYmplY3Rz
IHRoYXQgcmVtYWluIHdlcmUgbm90IGZvdW5kIGluIHRoZSBvbGQgb2JqZWN0cyBkaWN0LCBhbmQg
c28gdGhleSBuZWVkIHRvIGJlIHVwZGF0ZWQuCiAgICAgU2VsZWN0ZWRPYmplY3RNYXA6Oml0ZXJh
dG9yIG5ld09iamVjdHNFbmQgPSBuZXdTZWxlY3RlZE9iamVjdHMuZW5kKCk7CiAgICAgZm9yIChT
ZWxlY3RlZE9iamVjdE1hcDo6aXRlcmF0b3IgaSA9IG5ld1NlbGVjdGVkT2JqZWN0cy5iZWdpbigp
OyBpICE9IG5ld09iamVjdHNFbmQ7ICsraSkKLSAgICAgICAgaS0+c2Vjb25kLT5yZXBhaW50KCk7
CisgICAgICAgIGktPnZhbHVlLT5yZXBhaW50KCk7CiAKICAgICAvLyBIYXZlIGFueSBvZiB0aGUg
b2xkIGJsb2NrcyBjaGFuZ2VkPwogICAgIFNlbGVjdGVkQmxvY2tNYXA6Oml0ZXJhdG9yIG9sZEJs
b2Nrc0VuZCA9IG9sZFNlbGVjdGVkQmxvY2tzLmVuZCgpOwogICAgIGZvciAoU2VsZWN0ZWRCbG9j
a01hcDo6aXRlcmF0b3IgaSA9IG9sZFNlbGVjdGVkQmxvY2tzLmJlZ2luKCk7IGkgIT0gb2xkQmxv
Y2tzRW5kOyArK2kpIHsKLSAgICAgICAgUmVuZGVyQmxvY2sqIGJsb2NrID0gaS0+Zmlyc3Q7Cisg
ICAgICAgIFJlbmRlckJsb2NrKiBibG9jayA9IGktPmtleTsKICAgICAgICAgUmVuZGVyQmxvY2tT
ZWxlY3Rpb25JbmZvKiBuZXdJbmZvID0gbmV3U2VsZWN0ZWRCbG9ja3MuZ2V0KGJsb2NrKTsKLSAg
ICAgICAgUmVuZGVyQmxvY2tTZWxlY3Rpb25JbmZvKiBvbGRJbmZvID0gaS0+c2Vjb25kLmdldCgp
OworICAgICAgICBSZW5kZXJCbG9ja1NlbGVjdGlvbkluZm8qIG9sZEluZm8gPSBpLT52YWx1ZS5n
ZXQoKTsKICAgICAgICAgaWYgKCFuZXdJbmZvIHx8IG9sZEluZm8tPnJlY3RzKCkgIT0gbmV3SW5m
by0+cmVjdHMoKSB8fCBvbGRJbmZvLT5zdGF0ZSgpICE9IG5ld0luZm8tPnN0YXRlKCkpIHsKICAg
ICAgICAgICAgIG9sZEluZm8tPnJlcGFpbnQoKTsKICAgICAgICAgICAgIGlmIChuZXdJbmZvKSB7
CkBAIC02NDEsNyArNjQxLDcgQEAgdm9pZCBSZW5kZXJWaWV3OjpzZXRTZWxlY3Rpb24oUmVuZGVy
T2JqZWN0KiBzdGFydCwgaW50IHN0YXJ0UG9zLCBSZW5kZXJPYmplY3QqIGUKICAgICAvLyBBbnkg
bmV3IGJsb2NrcyB0aGF0IHJlbWFpbiB3ZXJlIG5vdCBmb3VuZCBpbiB0aGUgb2xkIGJsb2NrcyBk
aWN0LCBhbmQgc28gdGhleSBuZWVkIHRvIGJlIHVwZGF0ZWQuCiAgICAgU2VsZWN0ZWRCbG9ja01h
cDo6aXRlcmF0b3IgbmV3QmxvY2tzRW5kID0gbmV3U2VsZWN0ZWRCbG9ja3MuZW5kKCk7CiAgICAg
Zm9yIChTZWxlY3RlZEJsb2NrTWFwOjppdGVyYXRvciBpID0gbmV3U2VsZWN0ZWRCbG9ja3MuYmVn
aW4oKTsgaSAhPSBuZXdCbG9ja3NFbmQ7ICsraSkKLSAgICAgICAgaS0+c2Vjb25kLT5yZXBhaW50
KCk7CisgICAgICAgIGktPnZhbHVlLT5yZXBhaW50KCk7CiAKICAgICBtX2ZyYW1lVmlldy0+ZW5k
RGVmZXJyZWRSZXBhaW50cygpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlcldpZGdldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lk
Z2V0LmNwcAppbmRleCA5NTM3ZWRmNWQyMDg3ZDg1YjM1ZDZmZWM1ZWFmZDc4NmJiZWYwZTU1Li40
ZWNlY2RjOWJkNDk3NmQyM2E4ODNhZDYzMWNlYTMxYTJkMzA2NDE3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcApAQCAtNzAsOSArNzAsOSBAQCB2b2lkIFJlbmRl
cldpZGdldDo6cmVzdW1lV2lkZ2V0SGllcmFyY2h5VXBkYXRlcygpCiAgICAgICAgIHdpZGdldE5l
d1BhcmVudE1hcCgpLmNsZWFyKCk7CiAgICAgICAgIFdpZGdldFRvUGFyZW50TWFwOjppdGVyYXRv
ciBlbmQgPSBtYXAuZW5kKCk7CiAgICAgICAgIGZvciAoV2lkZ2V0VG9QYXJlbnRNYXA6Oml0ZXJh
dG9yIGl0ID0gbWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgV2lk
Z2V0KiBjaGlsZCA9IGl0LT5maXJzdC5nZXQoKTsKKyAgICAgICAgICAgIFdpZGdldCogY2hpbGQg
PSBpdC0+a2V5LmdldCgpOwogICAgICAgICAgICAgU2Nyb2xsVmlldyogY3VycmVudFBhcmVudCA9
IGNoaWxkLT5wYXJlbnQoKTsKLSAgICAgICAgICAgIEZyYW1lVmlldyogbmV3UGFyZW50ID0gaXQt
PnNlY29uZDsKKyAgICAgICAgICAgIEZyYW1lVmlldyogbmV3UGFyZW50ID0gaXQtPnZhbHVlOwog
ICAgICAgICAgICAgaWYgKG5ld1BhcmVudCAhPSBjdXJyZW50UGFyZW50KSB7CiAgICAgICAgICAg
ICAgICAgaWYgKGN1cnJlbnRQYXJlbnQpCiAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYXJl
bnQtPnJlbW92ZUNoaWxkKGNoaWxkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9Sb290SW5saW5lQm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5s
aW5lQm94LmNwcAppbmRleCA5MjhmZTY2N2U0MzNiMjM3MmZiNWMwN2E0ZTc5NThlN2U1Y2QzMGY4
Li5lMjVlM2ViNDhmMjZjNmI2OGNiZGQ5Nzg5YmQ1N2Q1YjM1MGYwMzIwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCkBAIC03NTUsOCArNzU1LDggQEAgdm9p
ZCBSb290SW5saW5lQm94Ojphc2NlbnRBbmREZXNjZW50Rm9yQm94KElubGluZUJveCogYm94LCBH
bHlwaE92ZXJmbG93QW5kRmFsbGIKICAgICBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93ID0g
MDsKICAgICBpZiAoYm94LT5pc1RleHQoKSkgewogICAgICAgICBHbHlwaE92ZXJmbG93QW5kRmFs
bGJhY2tGb250c01hcDo6aXRlcmF0b3IgaXQgPSB0ZXh0Qm94RGF0YU1hcC5maW5kKHRvSW5saW5l
VGV4dEJveChib3gpKTsKLSAgICAgICAgdXNlZEZvbnRzID0gaXQgPT0gdGV4dEJveERhdGFNYXAu
ZW5kKCkgPyAwIDogJml0LT5zZWNvbmQuZmlyc3Q7Ci0gICAgICAgIGdseXBoT3ZlcmZsb3cgPSBp
dCA9PSB0ZXh0Qm94RGF0YU1hcC5lbmQoKSA/IDAgOiAmaXQtPnNlY29uZC5zZWNvbmQ7CisgICAg
ICAgIHVzZWRGb250cyA9IGl0ID09IHRleHRCb3hEYXRhTWFwLmVuZCgpID8gMCA6ICZpdC0+dmFs
dWUuZmlyc3Q7CisgICAgICAgIGdseXBoT3ZlcmZsb3cgPSBpdCA9PSB0ZXh0Qm94RGF0YU1hcC5l
bmQoKSA/IDAgOiAmaXQtPnZhbHVlLnNlY29uZDsKICAgICB9CiAgICAgICAgIAogICAgIGJvb2wg
aW5jbHVkZUxlYWRpbmcgPSBpbmNsdWRlTGVhZGluZ0ZvckJveChib3gpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1ZlcnRpY2FsUG9zaXRpb25DYWNoZS5oIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1ZlcnRpY2FsUG9zaXRpb25DYWNoZS5oCmluZGV4IGJiMzk4Nzc3
MjFkYTcwNWMzN2JkM2I4ODE5MDI0Y2QyN2UzNmU1Y2UuLmI3Y2Q3ZTA4NWU3ZjliZWRiNTI4ZjYy
ZGVlZjU3YTdiYjhhYTViZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9W
ZXJ0aWNhbFBvc2l0aW9uQ2FjaGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVmVy
dGljYWxQb3NpdGlvbkNhY2hlLmgKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgogICAgICAgICBj
b25zdCBIYXNoTWFwPFJlbmRlck9iamVjdCosIGludD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFw
VG9DaGVjay5maW5kKHJlbmRlcmVyKTsKICAgICAgICAgaWYgKGl0ID09IG1hcFRvQ2hlY2suZW5k
KCkpCiAgICAgICAgICAgICByZXR1cm4gUG9zaXRpb25VbmRlZmluZWQ7Ci0gICAgICAgIHJldHVy
biBpdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwogICAgIH0KICAgICAKICAg
ICB2b2lkIHNldChSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBGb250QmFzZWxpbmUgYmFzZWxpbmVU
eXBlLCBpbnQgcG9zaXRpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
V3JhcFNoYXBlSW5mby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvV3JhcFNoYXBlSW5m
by5jcHAKaW5kZXggMGExNmNjNTFmNDljNzQzMmU2OGRjODkyMzQyYjkxZDE2MTg1YTlkZS4uZWIw
YjE0ZjUxYzYzYWQ0NGQ1YjFiMDEwOGI5ZmI1YTlkZmEwZjI1YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1dyYXBTaGFwZUluZm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9XcmFwU2hhcGVJbmZvLmNwcApAQCAtNjAsNyArNjAsNyBAQCBXcmFwU2hhcGVJ
bmZvOjp+V3JhcFNoYXBlSW5mbygpCiBXcmFwU2hhcGVJbmZvKiBXcmFwU2hhcGVJbmZvOjplbnN1
cmVXcmFwU2hhcGVJbmZvRm9yUmVuZGVyQmxvY2soUmVuZGVyQmxvY2sqIGJsb2NrKQogewogICAg
IFdyYXBTaGFwZUluZm9NYXA6OkFkZFJlc3VsdCByZXN1bHQgPSB3cmFwU2hhcGVJbmZvTWFwKCku
YWRkKGJsb2NrLCBjcmVhdGUoYmxvY2spKTsKLSAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT5z
ZWNvbmQuZ2V0KCk7CisgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7CiB9
CiAKIFdyYXBTaGFwZUluZm8qIFdyYXBTaGFwZUluZm86OndyYXBTaGFwZUluZm9Gb3JSZW5kZXJC
bG9jayhjb25zdCBSZW5kZXJCbG9jayogYmxvY2spCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAppbmRleCA0NTRmN2FhNmQwN2I2
YmQzMTIzMjM2YmVmY2E0OTllY2ZlNWEwN2EwLi4yMzcxZDFhYmY5Yzk2YmE0YTQ2MjhiOTNjYTQ5
NDJhZjdhMDdiOTVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR0lubGluZVRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAKQEAgLTE1OCw3ICsxNTgsNyBAQCBib29sIFJlbmRlclNW
R0lubGluZVRleHQ6OmNoYXJhY3RlclN0YXJ0c05ld1RleHRDaHVuayhpbnQgcG9zaXRpb24pIGNv
bnN0CiAgICAgaWYgKGl0ID09IG1fbGF5b3V0QXR0cmlidXRlcy5jaGFyYWN0ZXJEYXRhTWFwKCku
ZW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBpdC0+c2Vjb25kLngg
IT0gU1ZHVGV4dExheW91dEF0dHJpYnV0ZXM6OmVtcHR5VmFsdWUoKSB8fCBpdC0+c2Vjb25kLnkg
IT0gU1ZHVGV4dExheW91dEF0dHJpYnV0ZXM6OmVtcHR5VmFsdWUoKTsKKyAgICByZXR1cm4gaXQt
PnZhbHVlLnggIT0gU1ZHVGV4dExheW91dEF0dHJpYnV0ZXM6OmVtcHR5VmFsdWUoKSB8fCBpdC0+
dmFsdWUueSAhPSBTVkdUZXh0TGF5b3V0QXR0cmlidXRlczo6ZW1wdHlWYWx1ZSgpOwogfQogCiBW
aXNpYmxlUG9zaXRpb24gUmVuZGVyU1ZHSW5saW5lVGV4dDo6cG9zaXRpb25Gb3JQb2ludChjb25z
dCBMYXlvdXRQb2ludCYgcG9pbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCmluZGV4IGVlNmE0OWRiODhhOWZk
NmM3NzA1ZmExOGI2ZWVjYTg4MTZlMWEyZWIuLjM4MzJiMmIwMWUzMDUwYTVmODQzYzY1ZjFjZGRj
YjBlYzE1M2E5NjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCkBAIC0zMzgsNyArMzM4LDcgQEAgdm9pZCBS
ZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZChSZW5kZXJP
YmplY3QqIG9iamVjdCwgY28KICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0
ZXMqIHByaW1pdHZlID0gc3RhdGljX2Nhc3Q8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRy
aWJ1dGVzKj4ob2JqZWN0LT5ub2RlKCkpOwogCiAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkg
ewotICAgICAgICBGaWx0ZXJEYXRhKiBmaWx0ZXJEYXRhID0gaXQtPnNlY29uZDsKKyAgICAgICAg
RmlsdGVyRGF0YSogZmlsdGVyRGF0YSA9IGl0LT52YWx1ZTsKICAgICAgICAgaWYgKCFmaWx0ZXJE
YXRhLT5idWlsZGVkKQogICAgICAgICAgICAgY29udGludWU7CiAKQEAgLTM1Myw3ICszNTMsNyBA
QCB2b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2Vk
KFJlbmRlck9iamVjdCogb2JqZWN0LCBjbwogICAgICAgICBidWlsZGVyLT5jbGVhclJlc3VsdHNS
ZWN1cnNpdmUoZWZmZWN0KTsKIAogICAgICAgICAvLyBSZXBhaW50IHRoZSBpbWFnZSBvbiB0aGUg
c2NyZWVuLgotICAgICAgICBtYXJrQ2xpZW50Rm9ySW52YWxpZGF0aW9uKGl0LT5maXJzdCwgUmVw
YWludEludmFsaWRhdGlvbik7CisgICAgICAgIG1hcmtDbGllbnRGb3JJbnZhbGlkYXRpb24oaXQt
PmtleSwgUmVwYWludEludmFsaWRhdGlvbik7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNw
cAppbmRleCA1OGUwMDc5YjIyY2IyYzVjMTdkOGYyZDRkNzNjYmJhMjEwYWE5YTVlLi4zMGNlMWI4
Y2I0Zjk3OGMwMGRjYmRhMTdkZmI1NTcyM2NmYzU4MDgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAK
QEAgLTE0MCw3ICsxNDAsNyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQ6OmFwcGx5
UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiBvYmplY3QsIFJlbmRlclN0eWxlKgogICAgIGlmIChncmFk
aWVudFVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5H
Qk9YICYmIG9iamVjdEJvdW5kaW5nQm94LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgT3duUHRyPEdyYWRpZW50RGF0YT4mIGdyYWRpZW50RGF0YSA9IG1fZ3JhZGllbnRN
YXAuYWRkKG9iamVjdCwgbnVsbHB0cikuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBPd25QdHI8R3Jh
ZGllbnREYXRhPiYgZ3JhZGllbnREYXRhID0gbV9ncmFkaWVudE1hcC5hZGQob2JqZWN0LCBudWxs
cHRyKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCFncmFkaWVudERhdGEpCiAgICAgICAgIGdy
YWRpZW50RGF0YSA9IGFkb3B0UHRyKG5ldyBHcmFkaWVudERhdGEpOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5j
cHAKaW5kZXggYjRhZjk5OTE4NTUyYTE1NDg1MmJiMmE0YjQ3YjAzMGVkYTZhNTMxNi4uM2ExODgy
YWNmODIxNzIyODZiMjNiYjU0MmJlNDA2NmEzYmFjY2NjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcApA
QCAtODQsNyArODQsNyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlUGF0dGVybjo6YXBwbHlSZXNv
dXJjZShSZW5kZXJPYmplY3QqIG9iamVjdCwgUmVuZGVyU3R5bGUqCiAgICAgaWYgKG1fYXR0cmli
dXRlcy5wYXR0ZXJuVW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfT0JKRUNU
Qk9VTkRJTkdCT1ggJiYgb2JqZWN0Qm91bmRpbmdCb3guaXNFbXB0eSgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBPd25QdHI8UGF0dGVybkRhdGE+JiBwYXR0ZXJuRGF0YSA9IG1fcGF0
dGVybk1hcC5hZGQob2JqZWN0LCBudWxscHRyKS5pdGVyYXRvci0+c2Vjb25kOworICAgIE93blB0
cjxQYXR0ZXJuRGF0YT4mIHBhdHRlcm5EYXRhID0gbV9wYXR0ZXJuTWFwLmFkZChvYmplY3QsIG51
bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoIXBhdHRlcm5EYXRhKQogICAgICAgICBw
YXR0ZXJuRGF0YSA9IGFkb3B0UHRyKG5ldyBQYXR0ZXJuRGF0YSk7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzQ2FjaGUuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXNDYWNoZS5jcHAKaW5kZXggMjk3YzA3
YjZhZDQwOWEyN2U2MzU4NTYwMDBjOWFkNGI5MDViNDM1NC4uOGI0OGNmNTNlNzk5YTBiN2RlMmI1
NGE0YzcxNTJlMDkyNzUzOWMwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdSZXNvdXJjZXNDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdSZXNvdXJjZXNDYWNoZS5jcHAKQEAgLTE5OCwxMSArMTk4LDExIEBAIHZvaWQgU1ZH
UmVzb3VyY2VzQ2FjaGU6OnJlc291cmNlRGVzdHJveWVkKFJlbmRlclNWR1Jlc291cmNlQ29udGFp
bmVyKiByZXNvdXJjZSkKIAogICAgIEhhc2hNYXA8Y29uc3QgUmVuZGVyT2JqZWN0KiwgU1ZHUmVz
b3VyY2VzKj46Oml0ZXJhdG9yIGVuZCA9IGNhY2hlLT5tX2NhY2hlLmVuZCgpOwogICAgIGZvciAo
SGFzaE1hcDxjb25zdCBSZW5kZXJPYmplY3QqLCBTVkdSZXNvdXJjZXMqPjo6aXRlcmF0b3IgaXQg
PSBjYWNoZS0+bV9jYWNoZS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaXQt
PnNlY29uZC0+cmVzb3VyY2VEZXN0cm95ZWQocmVzb3VyY2UpOworICAgICAgICBpdC0+dmFsdWUt
PnJlc291cmNlRGVzdHJveWVkKHJlc291cmNlKTsKIAogICAgICAgICAvLyBNYXJrIHVzZXJzIG9m
IGRlc3Ryb3llZCByZXNvdXJjZXMgYXMgcGVuZGluZyByZXNvbHV0aW9uIGJhc2VkIG9uIHRoZSBp
ZCBvZiB0aGUgb2xkIHJlc291cmNlLgogICAgICAgICBFbGVtZW50KiByZXNvdXJjZUVsZW1lbnQg
PSB0b0VsZW1lbnQocmVzb3VyY2UtPm5vZGUoKSk7Ci0gICAgICAgIFNWR1N0eWxlZEVsZW1lbnQq
IGNsaWVudEVsZW1lbnQgPSB0b1NWR1N0eWxlZEVsZW1lbnQoaXQtPmZpcnN0LT5ub2RlKCkpOwor
ICAgICAgICBTVkdTdHlsZWRFbGVtZW50KiBjbGllbnRFbGVtZW50ID0gdG9TVkdTdHlsZWRFbGVt
ZW50KGl0LT5rZXktPm5vZGUoKSk7CiAgICAgICAgIFNWR0RvY3VtZW50RXh0ZW5zaW9ucyogZXh0
ZW5zaW9ucyA9IGNsaWVudEVsZW1lbnQtPmRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMo
KTsKIAogICAgICAgICBleHRlbnNpb25zLT5hZGRQZW5kaW5nUmVzb3VyY2UocmVzb3VyY2VFbGVt
ZW50LT5mYXN0R2V0QXR0cmlidXRlKEhUTUxOYW1lczo6aWRBdHRyKSwgY2xpZW50RWxlbWVudCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jvb3RJbmxpbmVC
b3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSb290SW5saW5lQm94LmNw
cAppbmRleCAzNGU5M2EwMmVmNzQzMmUzYzI2ZWYyMzYwZDFjZjNmZDQzN2U0MTZlLi41NDZmZWMy
NmNlNjk4MWFjZDFmY2Q3YWJlMGEwYTk4MzhjNzBiNDNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jvb3RJbmxpbmVCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHUm9vdElubGluZUJveC5jcHAKQEAgLTIyNiwxNyArMjI2LDE3
IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzd2FwSXRlbXNJbkxheW91dEF0dHJpYnV0ZXMoU1ZHVGV4
dExheW91dEF0dHJpYnV0ZXMqIGZpcnN0QXR0CiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChm
aXJzdFByZXNlbnQgJiYgbGFzdFByZXNlbnQpIHsKLSAgICAgICAgc3RkOjpzd2FwKGl0Rmlyc3Qt
PnNlY29uZCwgaXRMYXN0LT5zZWNvbmQpOworICAgICAgICBzdGQ6OnN3YXAoaXRGaXJzdC0+dmFs
dWUsIGl0TGFzdC0+dmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKGZp
cnN0UHJlc2VudCAmJiAhbGFzdFByZXNlbnQpIHsKLSAgICAgICAgbGFzdEF0dHJpYnV0ZXMtPmNo
YXJhY3RlckRhdGFNYXAoKS5zZXQobGFzdFBvc2l0aW9uICsgMSwgaXRGaXJzdC0+c2Vjb25kKTsK
KyAgICAgICAgbGFzdEF0dHJpYnV0ZXMtPmNoYXJhY3RlckRhdGFNYXAoKS5zZXQobGFzdFBvc2l0
aW9uICsgMSwgaXRGaXJzdC0+dmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAg
Ly8gIWZpcnN0UHJlc2VudCAmJiBsYXN0UHJlc2VudAotICAgIGZpcnN0QXR0cmlidXRlcy0+Y2hh
cmFjdGVyRGF0YU1hcCgpLnNldChmaXJzdFBvc2l0aW9uICsgMSwgaXRMYXN0LT5zZWNvbmQpOwor
ICAgIGZpcnN0QXR0cmlidXRlcy0+Y2hhcmFjdGVyRGF0YU1hcCgpLnNldChmaXJzdFBvc2l0aW9u
ICsgMSwgaXRMYXN0LT52YWx1ZSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBmaW5kRmlyc3RB
bmRMYXN0QXR0cmlidXRlc0luVmVjdG9yKFZlY3RvcjxTVkdUZXh0TGF5b3V0QXR0cmlidXRlcyo+
JiBhdHRyaWJ1dGVzLCBSZW5kZXJTVkdJbmxpbmVUZXh0KiBmaXJzdENvbnRleHQsIFJlbmRlclNW
R0lubGluZVRleHQqIGxhc3RDb250ZXh0LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRlcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1dGVzLmNwcAppbmRleCBhOTI1OTZjZWVl
ZGJlMjVhZjc3N2RmNGE0YzgzY2QzZWY5N2I5Y2U4Li42N2ZhMGZhOTgyYWQ2MGJhNzI2NTFhODQ1
NDk1ODFmN2ViNTBjZDBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1NWR1RleHRMYXlvdXRBdHRyaWJ1dGVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1dGVzLmNwcApAQCAtNjIsOCArNjIsOCBAQCB2b2lk
IFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzOjpkdW1wKCkgY29uc3QKICAgICBmcHJpbnRmKHN0ZGVy
ciwgImNvbnRleHQ6ICVwXG4iLCBtX2NvbnRleHQpOwogICAgIGNvbnN0IFNWR0NoYXJhY3RlckRh
dGFNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fY2hhcmFjdGVyRGF0YU1hcC5lbmQoKTsKICAg
ICBmb3IgKFNWR0NoYXJhY3RlckRhdGFNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9jaGFyYWN0
ZXJEYXRhTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBjb25zdCBTVkdD
aGFyYWN0ZXJEYXRhJiBkYXRhID0gaXQtPnNlY29uZDsKLSAgICAgICAgZnByaW50ZihzdGRlcnIs
ICIgLS0tPiBwb3M9JWksIGRhdGE9eyIsIGl0LT5maXJzdCk7CisgICAgICAgIGNvbnN0IFNWR0No
YXJhY3RlckRhdGEmIGRhdGEgPSBpdC0+dmFsdWU7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAi
IC0tLT4gcG9zPSVpLCBkYXRhPXsiLCBpdC0+a2V5KTsKICAgICAgICAgZHVtcFNWR0NoYXJhY3Rl
ckRhdGFNYXBWYWx1ZSgieCIsIGRhdGEueCk7CiAgICAgICAgIGR1bXBTVkdDaGFyYWN0ZXJEYXRh
TWFwVmFsdWUoInkiLCBkYXRhLnkpOwogICAgICAgICBkdW1wU1ZHQ2hhcmFjdGVyRGF0YU1hcFZh
bHVlKCJkeCIsIGRhdGEuZHgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXIuY3BwCmluZGV4IGJl
MmExMmZlOTYwYjc5MjQ4MzEzZGYzNjk5MTQ1MDNmZWU5YTI5MWIuLmI5NjlhNTMxOWU4MGFjNzg3
MmE1ZTQxZDhkZTc3NDMwNDhiZGM0M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlci5jcHAK
QEAgLTE0OSw3ICsxNDksNyBAQCB2b2lkIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlcjo6
YnVpbGRDaGFyYWN0ZXJEYXRhTWFwKFJlbmRlclNWR1RleHQqIHRleHRSbwogICAgICAgICBkYXRh
LnkgPSAwOwogICAgICAgICBtX2NoYXJhY3RlckRhdGFNYXAuc2V0KDEsIGRhdGEpOwogICAgIH0g
ZWxzZSB7Ci0gICAgICAgIFNWR0NoYXJhY3RlckRhdGEmIGRhdGEgPSBpdC0+c2Vjb25kOworICAg
ICAgICBTVkdDaGFyYWN0ZXJEYXRhJiBkYXRhID0gaXQtPnZhbHVlOwogICAgICAgICBpZiAoZGF0
YS54ID09IFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzOjplbXB0eVZhbHVlKCkpCiAgICAgICAgICAg
ICBkYXRhLnggPSAwOwogICAgICAgICBpZiAoZGF0YS55ID09IFNWR1RleHRMYXlvdXRBdHRyaWJ1
dGVzOjplbXB0eVZhbHVlKCkpCkBAIC0yMTMsNyArMjEzLDcgQEAgdm9pZCBTVkdUZXh0TGF5b3V0
QXR0cmlidXRlc0J1aWxkZXI6OmZpbGxDaGFyYWN0ZXJEYXRhTWFwKGNvbnN0IFRleHRQb3NpdGlv
biYgcG8KICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgdXBkYXRl
Q2hhcmFjdGVyRGF0YShpLCBsYXN0Um90YXRpb24sIGl0LT5zZWNvbmQsIGxlbmd0aENvbnRleHQs
IHhMaXN0UHRyLCB5TGlzdFB0ciwgZHhMaXN0UHRyLCBkeUxpc3RQdHIsIHJvdGF0ZUxpc3RQdHIp
OworICAgICAgICB1cGRhdGVDaGFyYWN0ZXJEYXRhKGksIGxhc3RSb3RhdGlvbiwgaXQtPnZhbHVl
LCBsZW5ndGhDb250ZXh0LCB4TGlzdFB0ciwgeUxpc3RQdHIsIGR4TGlzdFB0ciwgZHlMaXN0UHRy
LCByb3RhdGVMaXN0UHRyKTsKICAgICB9CiAKICAgICAvLyBUaGUgbGFzdCByb3RhdGlvbiB2YWx1
ZSBhbHdheXMgc3BhbnMgdGhlIHdob2xlIHNjb3BlLgpAQCAtMjI5LDcgKzIyOSw3IEBAIHZvaWQg
U1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyOjpmaWxsQ2hhcmFjdGVyRGF0YU1hcChjb25z
dCBUZXh0UG9zaXRpb24mIHBvCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0g
ICAgICAgIGl0LT5zZWNvbmQucm90YXRlID0gbGFzdFJvdGF0aW9uOworICAgICAgICBpdC0+dmFs
dWUucm90YXRlID0gbGFzdFJvdGF0aW9uOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZS5jcHAKaW5kZXggNWM1NDli
MjFjODc1MjA4NDcyNDZhZjI1NGZkMDU5ZjJlM2I5YjVlOC4uYmEyYjc2MzlkM2Y5NWI3Mzg5NDc1
ZmEyZGMwMGM5YTZhYTg1YjMxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmUuY3BwCkBAIC00NzUsNyArNDc1LDcgQEAgdm9pZCBT
VkdUZXh0TGF5b3V0RW5naW5lOjpsYXlvdXRUZXh0T25MaW5lT3JQYXRoKFNWR0lubGluZVRleHRC
b3gqIHRleHRCb3gsIFJlbmQKICAgICAgICAgU1ZHQ2hhcmFjdGVyRGF0YSBkYXRhOwogICAgICAg
ICBTVkdDaGFyYWN0ZXJEYXRhTWFwOjppdGVyYXRvciBpdCA9IGNoYXJhY3RlckRhdGFNYXAuZmlu
ZChtX2xvZ2ljYWxDaGFyYWN0ZXJPZmZzZXQgKyAxKTsKICAgICAgICAgaWYgKGl0ICE9IGNoYXJh
Y3RlckRhdGFNYXAuZW5kKCkpCi0gICAgICAgICAgICBkYXRhID0gaXQtPnNlY29uZDsKKyAgICAg
ICAgICAgIGRhdGEgPSBpdC0+dmFsdWU7CiAKICAgICAgICAgZmxvYXQgeCA9IGRhdGEueDsKICAg
ICAgICAgZmxvYXQgeSA9IGRhdGEueTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHVGV4dE1ldHJpY3NCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHVGV4dE1ldHJpY3NCdWlsZGVyLmNwcAppbmRleCBmZjljYTMwNzNmY2ZmODU3
MmUyMjcxZjZkMTk3OGE0NGY4ZWE4ZjViLi5jYTc0ODFmMzk4MDllOTRkOTBjMDE5NDM0MTdmY2Y4
Mzc5YjhmN2QyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Rl
eHRNZXRyaWNzQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdUZXh0TWV0cmljc0J1aWxkZXIuY3BwCkBAIC0xNjEsNyArMTYxLDcgQEAgdm9pZCBTVkdUZXh0
TWV0cmljc0J1aWxkZXI6Om1lYXN1cmVUZXh0UmVuZGVyZXIoUmVuZGVyU1ZHSW5saW5lVGV4dCog
dGV4dCwgTWVhc3UKICAgICAgICAgICAgIGlmIChkYXRhLT5hbGxDaGFyYWN0ZXJzTWFwKSB7CiAg
ICAgICAgICAgICAgICAgY29uc3QgU1ZHQ2hhcmFjdGVyRGF0YU1hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBkYXRhLT5hbGxDaGFyYWN0ZXJzTWFwLT5maW5kKGRhdGEtPnZhbHVlTGlzdFBvc2l0aW9u
ICsgbV90ZXh0UG9zaXRpb24gLSBkYXRhLT5za2lwcGVkQ2hhcmFjdGVycyAtIHN1cnJvZ2F0ZVBh
aXJDaGFyYWN0ZXJzICsgMSk7CiAgICAgICAgICAgICAgICAgaWYgKGl0ICE9IGRhdGEtPmFsbENo
YXJhY3RlcnNNYXAtPmVuZCgpKQotICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLT5jaGFy
YWN0ZXJEYXRhTWFwKCkuc2V0KG1fdGV4dFBvc2l0aW9uICsgMSwgaXQtPnNlY29uZCk7CisgICAg
ICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMtPmNoYXJhY3RlckRhdGFNYXAoKS5zZXQobV90ZXh0
UG9zaXRpb24gKyAxLCBpdC0+dmFsdWUpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgdGV4
dE1ldHJpY3NWYWx1ZXMtPmFwcGVuZChtX2N1cnJlbnRNZXRyaWNzKTsKICAgICAgICAgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwIGIvU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCmluZGV4IDQ0MjA5YzZmNTlk
MGQyYTFkN2YzM2IyZjExMjlhODdlOTA0NWU3Y2QuLmZjYjEyNmExZDU2ZDVhZmNjOWFiZWJhNjIx
ZmIwNzc4ZTMyYjdmZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFn
ZUFyZWFTeW5jLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhU3lu
Yy5jcHAKQEAgLTE4OCw3ICsxODgsNyBAQCB2b2lkIFN0b3JhZ2VBcmVhU3luYzo6c3luY1RpbWVy
RmlyZWQoVGltZXI8U3RvcmFnZUFyZWFTeW5jPiopCiAgICAgICAgICAgICAgICAgcGFydGlhbFN5
bmMgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgbV9pdGVtc1BlbmRpbmdTeW5jLnNldChjaGFuZ2VkX2l0LT5maXJzdC5pc29sYXRlZENv
cHkoKSwgY2hhbmdlZF9pdC0+c2Vjb25kLmlzb2xhdGVkQ29weSgpKTsKKyAgICAgICAgICAgIG1f
aXRlbXNQZW5kaW5nU3luYy5zZXQoY2hhbmdlZF9pdC0+a2V5Lmlzb2xhdGVkQ29weSgpLCBjaGFu
Z2VkX2l0LT52YWx1ZS5pc29sYXRlZENvcHkoKSk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAo
cGFydGlhbFN5bmMpIHsKQEAgLTE5OCw3ICsxOTgsNyBAQCB2b2lkIFN0b3JhZ2VBcmVhU3luYzo6
c3luY1RpbWVyRmlyZWQoVGltZXI8U3RvcmFnZUFyZWFTeW5jPiopCiAgICAgICAgICAgICBIYXNo
TWFwPFN0cmluZywgU3RyaW5nPjo6aXRlcmF0b3IgcGVuZGluZ19pdCA9IG1faXRlbXNQZW5kaW5n
U3luYy5iZWdpbigpOwogICAgICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46Oml0ZXJh
dG9yIHBlbmRpbmdfZW5kID0gbV9pdGVtc1BlbmRpbmdTeW5jLmVuZCgpOwogICAgICAgICAgICAg
Zm9yICg7IHBlbmRpbmdfaXQgIT0gcGVuZGluZ19lbmQ7ICsrcGVuZGluZ19pdCkKLSAgICAgICAg
ICAgICAgICBtX2NoYW5nZWRJdGVtcy5yZW1vdmUocGVuZGluZ19pdC0+Zmlyc3QpOworICAgICAg
ICAgICAgICAgIG1fY2hhbmdlZEl0ZW1zLnJlbW92ZShwZW5kaW5nX2l0LT5rZXkpOwogICAgICAg
ICB9CiAKICAgICAgICAgaWYgKCFtX3N5bmNTY2hlZHVsZWQpIHsKQEAgLTM0NSw3ICszNDUsNyBA
QCB2b2lkIFN0b3JhZ2VBcmVhU3luYzo6cGVyZm9ybUltcG9ydCgpCiAgICAgSGFzaE1hcDxTdHJp
bmcsIFN0cmluZz46Oml0ZXJhdG9yIGVuZCA9IGl0ZW1NYXAuZW5kKCk7CiAKICAgICBmb3IgKDsg
aXQgIT0gZW5kOyArK2l0KQotICAgICAgICBtX3N0b3JhZ2VBcmVhLT5pbXBvcnRJdGVtKGl0LT5m
aXJzdCwgaXQtPnNlY29uZCk7CisgICAgICAgIG1fc3RvcmFnZUFyZWEtPmltcG9ydEl0ZW0oaXQt
PmtleSwgaXQtPnZhbHVlKTsKIAogICAgIG1hcmtJbXBvcnRlZCgpOwogfQpAQCAtNDM5LDEzICs0
MzksMTMgQEAgdm9pZCBTdG9yYWdlQXJlYVN5bmM6OnN5bmMoYm9vbCBjbGVhckl0ZW1zLCBjb25z
dCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgaXRlbXMKICAgICB0cmFuc2FjdGlvbi5iZWdpbigp
OwogICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
aXRlbXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIC8vIEJhc2VkIG9uIHRo
ZSBudWxsLW5lc3Mgb2YgdGhlIHNlY29uZCBhcmd1bWVudCwgZGVjaWRlIHdoZXRoZXIgdGhpcyBp
cyBhbiBpbnNlcnQgb3IgYSBkZWxldGUuCi0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCYgcXVlcnkg
PSBpdC0+c2Vjb25kLmlzTnVsbCgpID8gcmVtb3ZlIDogaW5zZXJ0OworICAgICAgICBTUUxpdGVT
dGF0ZW1lbnQmIHF1ZXJ5ID0gaXQtPnZhbHVlLmlzTnVsbCgpID8gcmVtb3ZlIDogaW5zZXJ0Owog
Ci0gICAgICAgIHF1ZXJ5LmJpbmRUZXh0KDEsIGl0LT5maXJzdCk7CisgICAgICAgIHF1ZXJ5LmJp
bmRUZXh0KDEsIGl0LT5rZXkpOwogCiAgICAgICAgIC8vIElmIHRoZSBzZWNvbmQgYXJndW1lbnQg
aXMgbm9uLW51bGwsIHdlJ3JlIGRvaW5nIGFuIGluc2VydCwgc28gYmluZCBpdCBhcyB0aGUgdmFs
dWUuCi0gICAgICAgIGlmICghaXQtPnNlY29uZC5pc051bGwoKSkKLSAgICAgICAgICAgIHF1ZXJ5
LmJpbmRCbG9iKDIsIGl0LT5zZWNvbmQpOworICAgICAgICBpZiAoIWl0LT52YWx1ZS5pc051bGwo
KSkKKyAgICAgICAgICAgIHF1ZXJ5LmJpbmRCbG9iKDIsIGl0LT52YWx1ZSk7CiAKICAgICAgICAg
aW50IHJlc3VsdCA9IHF1ZXJ5LnN0ZXAoKTsKICAgICAgICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1
bHREb25lKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VNYXAu
Y3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTWFwLmNwcAppbmRleCA4ZTQyZDJm
MTc2ZGQzYjExMTJhMDFhNTFkOGRiNjJmNGIzOGJiYTM1Li40MGUxYTM4ZjFjYTRhNzlmMGNlMjQ3
MDExNTM0N2FkYjkyOWY0OTgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0
b3JhZ2VNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU1hcC5jcHAK
QEAgLTg5LDcgKzg5LDcgQEAgU3RyaW5nIFN0b3JhZ2VNYXA6OmtleSh1bnNpZ25lZCBpbmRleCkK
ICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCiAgICAgc2V0SXRlcmF0b3JUb0luZGV4KGluZGV4
KTsKLSAgICByZXR1cm4gbV9pdGVyYXRvci0+Zmlyc3Q7CisgICAgcmV0dXJuIG1faXRlcmF0b3It
PmtleTsKIH0KIAogU3RyaW5nIFN0b3JhZ2VNYXA6OmdldEl0ZW0oY29uc3QgU3RyaW5nJiBrZXkp
IGNvbnN0CkBAIC0xMzMsNyArMTMzLDcgQEAgUGFzc1JlZlB0cjxTdG9yYWdlTWFwPiBTdG9yYWdl
TWFwOjpzZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHUKIAogICAg
IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+OjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gbV9tYXAuYWRk
KGtleSwgdmFsdWUpOwogICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIGFk
ZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gdmFsdWU7CisgICAgICAgIGFkZFJlc3VsdC5pdGVy
YXRvci0+dmFsdWUgPSB2YWx1ZTsKIAogICAgIGludmFsaWRhdGVJdGVyYXRvcigpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwCmluZGV4IDlk
MWFjNTE3YTBlMmU3YjNmMjZiODIzYjI4OWE1OTM5NThiZGM4YTAuLjQ1MDFiMTFmYmMxNWNmNDIz
OWQwN2ZjMzc0NzY0MTZkYmI3NWVmY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
U3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwCkBAIC01NSw3ICs1NSw3IEBAIFBhc3NSZWZQdHI8U3Rv
cmFnZU5hbWVzcGFjZT4gU3RvcmFnZU5hbWVzcGFjZUltcGw6OmxvY2FsU3RvcmFnZU5hbWVzcGFj
ZShjb25zdCBTCiAgICAgICAgIHJldHVybiBzdG9yYWdlTmFtZXNwYWNlLnJlbGVhc2UoKTsKICAg
ICB9CiAKLSAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICByZXR1cm4gaXQtPnZhbHVlOwogfQog
CiBQYXNzUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpzZXNz
aW9uU3RvcmFnZU5hbWVzcGFjZSh1bnNpZ25lZCBxdW90YSkKQEAgLTk3LDcgKzk3LDcgQEAgUGFz
c1JlZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6Y29weSgpCiAK
ICAgICBTdG9yYWdlQXJlYU1hcDo6aXRlcmF0b3IgZW5kID0gbV9zdG9yYWdlQXJlYU1hcC5lbmQo
KTsKICAgICBmb3IgKFN0b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBpID0gbV9zdG9yYWdlQXJlYU1h
cC5iZWdpbigpOyBpICE9IGVuZDsgKytpKQotICAgICAgICBuZXdOYW1lc3BhY2UtPm1fc3RvcmFn
ZUFyZWFNYXAuc2V0KGktPmZpcnN0LCBpLT5zZWNvbmQtPmNvcHkoKSk7CisgICAgICAgIG5ld05h
bWVzcGFjZS0+bV9zdG9yYWdlQXJlYU1hcC5zZXQoaS0+a2V5LCBpLT52YWx1ZS0+Y29weSgpKTsK
ICAgICByZXR1cm4gbmV3TmFtZXNwYWNlLnJlbGVhc2UoKTsKIH0KIApAQCAtMTMxLDcgKzEzMSw3
IEBAIHZvaWQgU3RvcmFnZU5hbWVzcGFjZUltcGw6OmNsb3NlKCkKIAogICAgIFN0b3JhZ2VBcmVh
TWFwOjppdGVyYXRvciBlbmQgPSBtX3N0b3JhZ2VBcmVhTWFwLmVuZCgpOwogICAgIGZvciAoU3Rv
cmFnZUFyZWFNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zdG9yYWdlQXJlYU1hcC5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPmNsb3NlKCk7CisgICAgICAgIGl0LT52
YWx1ZS0+Y2xvc2UoKTsKIAogICAgIGlmIChtX3N5bmNNYW5hZ2VyKQogICAgICAgICBtX3N5bmNN
YW5hZ2VyLT5jbG9zZSgpOwpAQCAtMTU0LDcgKzE1NCw3IEBAIHZvaWQgU3RvcmFnZU5hbWVzcGFj
ZUltcGw6OmNsZWFyQWxsT3JpZ2luc0ZvckRlbGV0aW9uKCkKIAogICAgIFN0b3JhZ2VBcmVhTWFw
OjppdGVyYXRvciBlbmQgPSBtX3N0b3JhZ2VBcmVhTWFwLmVuZCgpOwogICAgIGZvciAoU3RvcmFn
ZUFyZWFNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zdG9yYWdlQXJlYU1hcC5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPmNsZWFyRm9yT3JpZ2luRGVsZXRpb24oKTsK
KyAgICAgICAgaXQtPnZhbHVlLT5jbGVhckZvck9yaWdpbkRlbGV0aW9uKCk7CiB9CiAgICAgCiB2
b2lkIFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpzeW5jKCkKQEAgLTE2Miw3ICsxNjIsNyBAQCB2b2lk
IFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpzeW5jKCkKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwogICAgIFN0b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBlbmQgPSBtX3N0b3JhZ2VBcmVhTWFwLmVu
ZCgpOwogICAgIGZvciAoU3RvcmFnZUFyZWFNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zdG9yYWdlQXJl
YU1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPnN5bmMo
KTsKKyAgICAgICAgaXQtPnZhbHVlLT5zeW5jKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMu
Y3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5jcHAKaW5kZXgg
Y2FjMWFlYTA3ZTA5MGQ3NGUyNWVhMzQ2MDA5ZjI1YzdkNDY4MGUzOS4uY2NiNjMyM2U0N2RhODQx
YTc2MWNiOTNhMWVjOGVhZDE1NzUwOTZlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Rv
Y3VtZW50RXh0ZW5zaW9ucy5jcHAKQEAgLTE1Niw3ICsxNTYsNyBAQCB2b2lkIFNWR0RvY3VtZW50
RXh0ZW5zaW9uczo6cmVtb3ZlQW5pbWF0aW9uRWxlbWVudEZyb21UYXJnZXQoU1ZHU01JTEVsZW1l
bnQqIGFuaQogICAgIEhhc2hNYXA8U1ZHRWxlbWVudCosIEhhc2hTZXQ8U1ZHU01JTEVsZW1lbnQq
PiogPjo6aXRlcmF0b3IgaXQgPSBtX2FuaW1hdGVkRWxlbWVudHMuZmluZCh0YXJnZXRFbGVtZW50
KTsKICAgICBBU1NFUlQoaXQgIT0gbV9hbmltYXRlZEVsZW1lbnRzLmVuZCgpKTsKICAgICAKLSAg
ICBIYXNoU2V0PFNWR1NNSUxFbGVtZW50Kj4qIGFuaW1hdGlvbkVsZW1lbnRzRm9yVGFyZ2V0ID0g
aXQtPnNlY29uZDsKKyAgICBIYXNoU2V0PFNWR1NNSUxFbGVtZW50Kj4qIGFuaW1hdGlvbkVsZW1l
bnRzRm9yVGFyZ2V0ID0gaXQtPnZhbHVlOwogICAgIEFTU0VSVCghYW5pbWF0aW9uRWxlbWVudHNG
b3JUYXJnZXQtPmlzRW1wdHkoKSk7CiAKICAgICBhbmltYXRpb25FbGVtZW50c0ZvclRhcmdldC0+
cmVtb3ZlKGFuaW1hdGlvbkVsZW1lbnQpOwpAQCAtMTczLDcgKzE3Myw3IEBAIHZvaWQgU1ZHRG9j
dW1lbnRFeHRlbnNpb25zOjpyZW1vdmVBbGxBbmltYXRpb25FbGVtZW50c0Zyb21UYXJnZXQoU1ZH
RWxlbWVudCogdGFyCiAgICAgaWYgKGl0ID09IG1fYW5pbWF0ZWRFbGVtZW50cy5lbmQoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgSGFzaFNldDxTVkdTTUlMRWxlbWVudCo+KiBhbmltYXRpb25F
bGVtZW50c0ZvclRhcmdldCA9IGl0LT5zZWNvbmQ7CisgICAgSGFzaFNldDxTVkdTTUlMRWxlbWVu
dCo+KiBhbmltYXRpb25FbGVtZW50c0ZvclRhcmdldCA9IGl0LT52YWx1ZTsKICAgICBWZWN0b3I8
U1ZHU01JTEVsZW1lbnQqPiB0b0JlUmVzZXQ7CiAKICAgICBIYXNoU2V0PFNWR1NNSUxFbGVtZW50
Kj46Oml0ZXJhdG9yIGVuZCA9IGFuaW1hdGlvbkVsZW1lbnRzRm9yVGFyZ2V0LT5lbmQoKTsKQEAg
LTIxOSw5ICsyMTksOSBAQCB2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6YWRkUGVuZGluZ1Jl
c291cmNlKGNvbnN0IEF0b21pY1N0cmluZyYgaWQsIFNWR1N0eWxlZAogCiAgICAgLy8gVGhlIEhh
c2hNYXAgYWRkIGZ1bmN0aW9uIGxlYXZlcyB0aGUgbWFwIGFsb25lIGFuZCByZXR1cm5zIGEgcG9p
bnRlciB0byB0aGUgZWxlbWVudCBpbiB0aGUKICAgICAvLyBtYXAgaWYgdGhlIGVsZW1lbnQgYWxy
ZWFkeSBleGlzdHMuIFNvIHdlIGFkZCB3aXRoIGEgdmFsdWUgb2YgMCwgYW5kIGl0IGVpdGhlciBm
aW5kcyB0aGUKLSAgICAvLyBleGlzdGluZyBlbGVtZW50IG9yIGFkZHMgYSBuZXcgb25lIGluIGEg
c2luZ2xlIG9wZXJhdGlvbi4gVGhlICIuaXRlcmF0b3ItPnNlY29uZCIgaWRpb20gZ2V0cworICAg
IC8vIGV4aXN0aW5nIGVsZW1lbnQgb3IgYWRkcyBhIG5ldyBvbmUgaW4gYSBzaW5nbGUgb3BlcmF0
aW9uLiBUaGUgIi5pdGVyYXRvci0+dmFsdWUiIGlkaW9tIGdldHMKICAgICAvLyB1cyB0byB0aGUg
aXRlcmF0b3IgZnJvbSBhZGQncyByZXN1bHQsIGFuZCB0aGVuIHRvIHRoZSB2YWx1ZSBpbnNpZGUg
dGhlIGhhc2ggdGFibGUuCi0gICAgU1ZHUGVuZGluZ0VsZW1lbnRzKiYgc2V0ID0gbV9wZW5kaW5n
UmVzb3VyY2VzLmFkZChpZCwgMCkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBTVkdQZW5kaW5nRWxl
bWVudHMqJiBzZXQgPSBtX3BlbmRpbmdSZXNvdXJjZXMuYWRkKGlkLCAwKS5pdGVyYXRvci0+dmFs
dWU7CiAgICAgaWYgKCFzZXQpCiAgICAgICAgIHNldCA9IG5ldyBTVkdQZW5kaW5nRWxlbWVudHM7
CiAgICAgc2V0LT5hZGQoZWxlbWVudCk7CkBAIC0yNDYsNyArMjQ2LDcgQEAgYm9vbCBTVkdEb2N1
bWVudEV4dGVuc2lvbnM6OmlzRWxlbWVudFBlbmRpbmdSZXNvdXJjZXMoU1ZHU3R5bGVkRWxlbWVu
dCogZWxlbWVudCkKIAogICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBTVkdQZW5kaW5nRWxlbWVu
dHMqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wZW5kaW5nUmVzb3VyY2VzLmVuZCgpOwogICAg
IGZvciAoSGFzaE1hcDxBdG9taWNTdHJpbmcsIFNWR1BlbmRpbmdFbGVtZW50cyo+Ojpjb25zdF9p
dGVyYXRvciBpdCA9IG1fcGVuZGluZ1Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKLSAgICAgICAgU1ZHUGVuZGluZ0VsZW1lbnRzKiBlbGVtZW50cyA9IGl0LT5zZWNvbmQ7Cisg
ICAgICAgIFNWR1BlbmRpbmdFbGVtZW50cyogZWxlbWVudHMgPSBpdC0+dmFsdWU7CiAgICAgICAg
IEFTU0VSVChlbGVtZW50cyk7CiAKICAgICAgICAgaWYgKGVsZW1lbnRzLT5jb250YWlucyhlbGVt
ZW50KSkKQEAgLTI3NCwxMyArMjc0LDEzIEBAIHZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpy
ZW1vdmVFbGVtZW50RnJvbVBlbmRpbmdSZXNvdXJjZXMoU1ZHU3R5bGVkRWxlbWVudCoKICAgICAg
ICAgVmVjdG9yPEF0b21pY1N0cmluZz4gdG9CZVJlbW92ZWQ7CiAgICAgICAgIEhhc2hNYXA8QXRv
bWljU3RyaW5nLCBTVkdQZW5kaW5nRWxlbWVudHMqPjo6aXRlcmF0b3IgZW5kID0gbV9wZW5kaW5n
UmVzb3VyY2VzLmVuZCgpOwogICAgICAgICBmb3IgKEhhc2hNYXA8QXRvbWljU3RyaW5nLCBTVkdQ
ZW5kaW5nRWxlbWVudHMqPjo6aXRlcmF0b3IgaXQgPSBtX3BlbmRpbmdSZXNvdXJjZXMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBTVkdQZW5kaW5nRWxlbWVudHMqIGVs
ZW1lbnRzID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIFNWR1BlbmRpbmdFbGVtZW50cyogZWxl
bWVudHMgPSBpdC0+dmFsdWU7CiAgICAgICAgICAgICBBU1NFUlQoZWxlbWVudHMpOwogICAgICAg
ICAgICAgQVNTRVJUKCFlbGVtZW50cy0+aXNFbXB0eSgpKTsKIAogICAgICAgICAgICAgZWxlbWVu
dHMtPnJlbW92ZShlbGVtZW50KTsKICAgICAgICAgICAgIGlmIChlbGVtZW50cy0+aXNFbXB0eSgp
KQotICAgICAgICAgICAgICAgIHRvQmVSZW1vdmVkLmFwcGVuZChpdC0+Zmlyc3QpOworICAgICAg
ICAgICAgICAgIHRvQmVSZW1vdmVkLmFwcGVuZChpdC0+a2V5KTsKICAgICAgICAgfQogCiAgICAg
ICAgIGVsZW1lbnQtPmNsZWFySGFzUGVuZGluZ1Jlc291cmNlc0lmUG9zc2libGUoKTsKQEAgLTI5
NiwxMyArMjk2LDEzIEBAIHZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZW1vdmVFbGVtZW50
RnJvbVBlbmRpbmdSZXNvdXJjZXMoU1ZHU3R5bGVkRWxlbWVudCoKICAgICAgICAgVmVjdG9yPEF0
b21pY1N0cmluZz4gdG9CZVJlbW92ZWQ7CiAgICAgICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBT
VkdQZW5kaW5nRWxlbWVudHMqPjo6aXRlcmF0b3IgZW5kID0gbV9wZW5kaW5nUmVzb3VyY2VzRm9y
UmVtb3ZhbC5lbmQoKTsKICAgICAgICAgZm9yIChIYXNoTWFwPEF0b21pY1N0cmluZywgU1ZHUGVu
ZGluZ0VsZW1lbnRzKj46Oml0ZXJhdG9yIGl0ID0gbV9wZW5kaW5nUmVzb3VyY2VzRm9yUmVtb3Zh
bC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIFNWR1BlbmRpbmdFbGVt
ZW50cyogZWxlbWVudHMgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgU1ZHUGVuZGluZ0VsZW1l
bnRzKiBlbGVtZW50cyA9IGl0LT52YWx1ZTsKICAgICAgICAgICAgIEFTU0VSVChlbGVtZW50cyk7
CiAgICAgICAgICAgICBBU1NFUlQoIWVsZW1lbnRzLT5pc0VtcHR5KCkpOwogCiAgICAgICAgICAg
ICBlbGVtZW50cy0+cmVtb3ZlKGVsZW1lbnQpOwogICAgICAgICAgICAgaWYgKGVsZW1lbnRzLT5p
c0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgdG9CZVJlbW92ZWQuYXBwZW5kKGl0LT5maXJzdCk7
CisgICAgICAgICAgICAgICAgdG9CZVJlbW92ZWQuYXBwZW5kKGl0LT5rZXkpOwogICAgICAgICB9
CiAKICAgICAgICAgLy8gV2UgdXNlIHRoZSByZW1vdmVQZW5kaW5nUmVzb3VyY2VGb3JSZW1vdmFs
IGZ1bmN0aW9uIGhlcmUgYmVjYXVzZSBpdCBkZWFscyB3aXRoIHNldCBsaWZldGltZSBjb3JyZWN0
bHkuCkBAIC0zNjIsNyArMzYyLDcgQEAgSGFzaFNldDxTVkdFbGVtZW50Kj4qIFNWR0RvY3VtZW50
RXh0ZW5zaW9uczo6c2V0T2ZFbGVtZW50c1JlZmVyZW5jaW5nVGFyZ2V0KFNWR0UKICAgICBjb25z
dCBIYXNoTWFwPFNWR0VsZW1lbnQqLCBPd25QdHI8SGFzaFNldDxTVkdFbGVtZW50Kj4gPiA+Ojpj
b25zdF9pdGVyYXRvciBpdCA9IG1fZWxlbWVudERlcGVuZGVuY2llcy5maW5kKHJlZmVyZW5jZWRF
bGVtZW50KTsKICAgICBpZiAoaXQgPT0gbV9lbGVtZW50RGVwZW5kZW5jaWVzLmVuZCgpKQogICAg
ICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gaXQtPnNlY29uZC5nZXQoKTsKKyAgICByZXR1cm4g
aXQtPnZhbHVlLmdldCgpOwogfQogCiB2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6YWRkRWxl
bWVudFJlZmVyZW5jaW5nVGFyZ2V0KFNWR0VsZW1lbnQqIHJlZmVyZW5jaW5nRWxlbWVudCwgU1ZH
RWxlbWVudCogcmVmZXJlbmNlZEVsZW1lbnQpCkBAIC0zODYsOCArMzg2LDggQEAgdm9pZCBTVkdE
b2N1bWVudEV4dGVuc2lvbnM6OnJlbW92ZUFsbFRhcmdldFJlZmVyZW5jZXNGb3JFbGVtZW50KFNW
R0VsZW1lbnQqIHJlZmUKIAogICAgIEhhc2hNYXA8U1ZHRWxlbWVudCosIE93blB0cjxIYXNoU2V0
PFNWR0VsZW1lbnQqPiA+ID46Oml0ZXJhdG9yIGVuZCA9IG1fZWxlbWVudERlcGVuZGVuY2llcy5l
bmQoKTsKICAgICBmb3IgKEhhc2hNYXA8U1ZHRWxlbWVudCosIE93blB0cjxIYXNoU2V0PFNWR0Vs
ZW1lbnQqPiA+ID46Oml0ZXJhdG9yIGl0ID0gbV9lbGVtZW50RGVwZW5kZW5jaWVzLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBTVkdFbGVtZW50KiByZWZlcmVuY2VkRWxlbWVu
dCA9IGl0LT5maXJzdDsKLSAgICAgICAgSGFzaFNldDxTVkdFbGVtZW50Kj4qIHJlZmVyZW5jaW5n
RWxlbWVudHMgPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICBTVkdFbGVtZW50KiByZWZlcmVu
Y2VkRWxlbWVudCA9IGl0LT5rZXk7CisgICAgICAgIEhhc2hTZXQ8U1ZHRWxlbWVudCo+KiByZWZl
cmVuY2luZ0VsZW1lbnRzID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICBIYXNoU2V0PFNWR0Vs
ZW1lbnQqPjo6aXRlcmF0b3Igc2V0SXQgPSByZWZlcmVuY2luZ0VsZW1lbnRzLT5maW5kKHJlZmVy
ZW5jaW5nRWxlbWVudCk7CiAgICAgICAgIGlmIChzZXRJdCA9PSByZWZlcmVuY2luZ0VsZW1lbnRz
LT5lbmQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtNDA4LDEwICs0MDgsMTAgQEAgdm9p
ZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlbW92ZUFsbEVsZW1lbnRSZWZlcmVuY2VzRm9yVGFy
Z2V0KFNWR0VsZW1lbnQqIHJlZmUKICAgICBIYXNoTWFwPFNWR0VsZW1lbnQqLCBPd25QdHI8SGFz
aFNldDxTVkdFbGVtZW50Kj4gPiA+OjppdGVyYXRvciBpdCA9IG1fZWxlbWVudERlcGVuZGVuY2ll
cy5maW5kKHJlZmVyZW5jZWRFbGVtZW50KTsKICAgICBpZiAoaXQgPT0gbV9lbGVtZW50RGVwZW5k
ZW5jaWVzLmVuZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKGl0LT5maXJzdCA9PSBy
ZWZlcmVuY2VkRWxlbWVudCk7CisgICAgQVNTRVJUKGl0LT5rZXkgPT0gcmVmZXJlbmNlZEVsZW1l
bnQpOwogICAgIFZlY3RvcjxTVkdFbGVtZW50Kj4gdG9CZU5vdGlmaWVkOwogCi0gICAgSGFzaFNl
dDxTVkdFbGVtZW50Kj4qIHJlZmVyZW5jaW5nRWxlbWVudHMgPSBpdC0+c2Vjb25kLmdldCgpOwor
ICAgIEhhc2hTZXQ8U1ZHRWxlbWVudCo+KiByZWZlcmVuY2luZ0VsZW1lbnRzID0gaXQtPnZhbHVl
LmdldCgpOwogICAgIEhhc2hTZXQ8U1ZHRWxlbWVudCo+OjppdGVyYXRvciBzZXRFbmQgPSByZWZl
cmVuY2luZ0VsZW1lbnRzLT5lbmQoKTsKICAgICBmb3IgKEhhc2hTZXQ8U1ZHRWxlbWVudCo+Ojpp
dGVyYXRvciBzZXRJdCA9IHJlZmVyZW5jaW5nRWxlbWVudHMtPmJlZ2luKCk7IHNldEl0ICE9IHNl
dEVuZDsgKytzZXRJdCkKICAgICAgICAgdG9CZU5vdGlmaWVkLmFwcGVuZCgqc2V0SXQpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0VsZW1lbnQuY3BwCmluZGV4IDg2ZWE4MTVlZWY2MzEwNzIxNWY0NmIxMGY5ZDhk
NWViZTI1YTlkYjcuLmNmOGU0MzM3ODg1ZDZmMDJmMWMzZWZlMWI3MTE3N2JkZjkyOWY5OGYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAKQEAgLTY4LDcgKzY4LDcgQEAgU1ZHRWxlbWVudDo6
flNWR0VsZW1lbnQoKQogICAgICAgICBTVkdFbGVtZW50UmFyZURhdGE6OlNWR0VsZW1lbnRSYXJl
RGF0YU1hcDo6aXRlcmF0b3IgaXQgPSByYXJlRGF0YU1hcC5maW5kKHRoaXMpOwogICAgICAgICBB
U1NFUlQoaXQgIT0gcmFyZURhdGFNYXAuZW5kKCkpOwogCi0gICAgICAgIFNWR0VsZW1lbnRSYXJl
RGF0YSogcmFyZURhdGEgPSBpdC0+c2Vjb25kOworICAgICAgICBTVkdFbGVtZW50UmFyZURhdGEq
IHJhcmVEYXRhID0gaXQtPnZhbHVlOwogICAgICAgICByYXJlRGF0YS0+ZGVzdHJveUFuaW1hdGVk
U01JTFN0eWxlUHJvcGVydGllcygpOwogICAgICAgICBpZiAoU1ZHQ3Vyc29yRWxlbWVudCogY3Vy
c29yRWxlbWVudCA9IHJhcmVEYXRhLT5jdXJzb3JFbGVtZW50KCkpCiAgICAgICAgICAgICBjdXJz
b3JFbGVtZW50LT5yZW1vdmVDbGllbnQodGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuY3BwCmluZGV4IDFlNDYyN2JjMmFkYWViZmE3
NTFjMzNhNTc0ODk2NTgzMzIxMGUyM2IuLmRmMGVhNGY5MmUzMTBjMDk4N2ExMDViNjcyOWM2MDNm
NTAzNzJiNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRp
bWVDb250YWluZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRp
bWVDb250YWluZXIuY3BwCkBAIC0yNjYsNyArMjY2LDcgQEAgdm9pZCBTTUlMVGltZUNvbnRhaW5l
cjo6dXBkYXRlQW5pbWF0aW9ucyhTTUlMVGltZSBlbGFwc2VkLCBib29sIHNlZWtUb1RpbWUpCiAg
ICAgLy8gQXBwbHkgcmVzdWx0cyB0byB0YXJnZXQgZWxlbWVudHMuCiAgICAgUmVzdWx0RWxlbWVu
dE1hcDo6aXRlcmF0b3IgZW5kID0gcmVzdWx0c0VsZW1lbnRzLmVuZCgpOwogICAgIGZvciAoUmVz
dWx0RWxlbWVudE1hcDo6aXRlcmF0b3IgaXQgPSByZXN1bHRzRWxlbWVudHMuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5hcHBseVJlc3VsdHNUb1RhcmdldCgp
OworICAgICAgICBpdC0+dmFsdWUtPmFwcGx5UmVzdWx0c1RvVGFyZ2V0KCk7CiAKICAgICBzdGFy
dFRpbWVyKGVhcmxpZXJzRmlyZVRpbWUsIGFuaW1hdGlvbkZyYW1lRGVsYXkpOwogICAgIERvY3Vt
ZW50Ojp1cGRhdGVTdHlsZUZvckFsbERvY3VtZW50cygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlQ2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvc3Zn
L2dyYXBoaWNzL1NWR0ltYWdlQ2FjaGUuY3BwCmluZGV4IGE1MTI1MGJmYTQzOTg3NGIyOWZmZDQy
MDA3ZjkxYTVmMjcyMTQ4MGEuLjM1OGYyY2FhODdmZGFkMzgzYWU5ZDcxMTYxY2FhNTIxMDc3NGEy
NWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZUNhY2hl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VDYWNoZS5jcHAK
QEAgLTQ0LDExICs0NCwxMSBAQCBTVkdJbWFnZUNhY2hlOjp+U1ZHSW1hZ2VDYWNoZSgpCiAKICAg
ICBJbWFnZURhdGFNYXA6Oml0ZXJhdG9yIGVuZCA9IG1faW1hZ2VEYXRhTWFwLmVuZCgpOwogICAg
IGZvciAoSW1hZ2VEYXRhTWFwOjppdGVyYXRvciBpdCA9IG1faW1hZ2VEYXRhTWFwLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAvLyBDaGVja3MgaWYgdGhlIGNsaWVudCAoaXQt
PmZpcnN0KSBpcyBzdGlsbCB2YWxpZC4gVGhlIGNsaWVudCBzaG91bGQgcmVtb3ZlIGl0c2VsZiBm
cm9tIHRoaXMKKyAgICAgICAgLy8gQ2hlY2tzIGlmIHRoZSBjbGllbnQgKGl0LT5rZXkpIGlzIHN0
aWxsIHZhbGlkLiBUaGUgY2xpZW50IHNob3VsZCByZW1vdmUgaXRzZWxmIGZyb20gdGhpcwogICAg
ICAgICAvLyBjYWNoZSBiZWZvcmUgaXRzIGVuZCBvZiBsaWZlLCBvdGhlcndpc2UgdGhlIGZvbGxv
d2luZyBBU1NFUlQgd2lsbCBjcmFzaCBvbiBwdXJlIHZpcnR1YWwKICAgICAgICAgLy8gZnVuY3Rp
b24gY2FsbCBvciBhIGdlbmVyYWwgY3Jhc2guCi0gICAgICAgIEFTU0VSVChpdC0+Zmlyc3QtPnJl
c291cmNlQ2xpZW50VHlwZSgpID09IENhY2hlZEltYWdlQ2xpZW50OjpleHBlY3RlZFR5cGUoKSk7
Ci0gICAgICAgIGRlbGV0ZSBpdC0+c2Vjb25kLmJ1ZmZlcjsKKyAgICAgICAgQVNTRVJUKGl0LT5r
ZXktPnJlc291cmNlQ2xpZW50VHlwZSgpID09IENhY2hlZEltYWdlQ2xpZW50OjpleHBlY3RlZFR5
cGUoKSk7CisgICAgICAgIGRlbGV0ZSBpdC0+dmFsdWUuYnVmZmVyOwogICAgIH0KIAogICAgIG1f
aW1hZ2VEYXRhTWFwLmNsZWFyKCk7CkBAIC02Myw3ICs2Myw3IEBAIHZvaWQgU1ZHSW1hZ2VDYWNo
ZTo6cmVtb3ZlQ2xpZW50RnJvbUNhY2hlKGNvbnN0IENhY2hlZEltYWdlQ2xpZW50KiBjbGllbnQp
CiAgICAgaWYgKGl0ID09IG1faW1hZ2VEYXRhTWFwLmVuZCgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBkZWxldGUgaXQtPnNlY29uZC5idWZmZXI7CisgICAgZGVsZXRlIGl0LT52YWx1ZS5idWZm
ZXI7CiAgICAgbV9pbWFnZURhdGFNYXAucmVtb3ZlKGl0KTsKIH0KIApAQCAtODEsMTQgKzgxLDE0
IEBAIFNWR0ltYWdlQ2FjaGU6OlNpemVBbmRTY2FsZXMgU1ZHSW1hZ2VDYWNoZTo6cmVxdWVzdGVk
U2l6ZUFuZFNjYWxlcyhjb25zdCBDYWNoZWRJCiAgICAgU2l6ZUFuZFNjYWxlc01hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX3NpemVBbmRTY2FsZXNNYXAuZmluZChjbGllbnQpOwogICAgIGlmIChp
dCA9PSBtX3NpemVBbmRTY2FsZXNNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybiBTaXplQW5kU2Nh
bGVzKCk7Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgcmV0dXJuIGl0LT52YWx1ZTsKIH0K
IAogdm9pZCBTVkdJbWFnZUNhY2hlOjppbWFnZUNvbnRlbnRDaGFuZ2VkKCkKIHsKICAgICBJbWFn
ZURhdGFNYXA6Oml0ZXJhdG9yIGVuZCA9IG1faW1hZ2VEYXRhTWFwLmVuZCgpOwogICAgIGZvciAo
SW1hZ2VEYXRhTWFwOjppdGVyYXRvciBpdCA9IG1faW1hZ2VEYXRhTWFwLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC5pbWFnZU5lZWRzVXBkYXRlID0gdHJ1ZTsK
KyAgICAgICAgaXQtPnZhbHVlLmltYWdlTmVlZHNVcGRhdGUgPSB0cnVlOwogCiAgICAgLy8gSWYg
d2UncmUgaW4gdGhlIG1pZGRsZSBvZiBsYXlvdXQsIHN0YXJ0IHJlZHJhd2luZyBkaXJ0eQogICAg
IC8vIGltYWdlcyBvbiBhIHRpbWVyOyBvdGhlcndpc2UgaXQncyBzYWZlIHRvIGRyYXcgaW1tZWRp
YXRlbHkuCkBAIC0xMDQsNyArMTA0LDcgQEAgdm9pZCBTVkdJbWFnZUNhY2hlOjpyZWRyYXcoKQog
ewogICAgIEltYWdlRGF0YU1hcDo6aXRlcmF0b3IgZW5kID0gbV9pbWFnZURhdGFNYXAuZW5kKCk7
CiAgICAgZm9yIChJbWFnZURhdGFNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pbWFnZURhdGFNYXAuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIEltYWdlRGF0YSYgZGF0YSA9IGl0LT5z
ZWNvbmQ7CisgICAgICAgIEltYWdlRGF0YSYgZGF0YSA9IGl0LT52YWx1ZTsKICAgICAgICAgaWYg
KCFkYXRhLmltYWdlTmVlZHNVcGRhdGUpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
Ly8gSWYgdGhlIGNvbnRlbnQgY2hhbmdlZCB3ZSByZWRyYXcgdXNpbmcgb3VyIGV4aXN0aW5nIElt
YWdlQnVmZmVyLgpAQCAtMTQyLDkgKzE0Miw5IEBAIEltYWdlKiBTVkdJbWFnZUNhY2hlOjpsb29r
dXBPckNyZWF0ZUJpdG1hcEltYWdlRm9yUmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0KiByCiAg
ICAgaWYgKHNpemVJdCA9PSBtX3NpemVBbmRTY2FsZXNNYXAuZW5kKCkpCiAgICAgICAgIHJldHVy
biBJbWFnZTo6bnVsbEltYWdlKCk7CiAKLSAgICBJbnRTaXplIHNpemUgPSBzaXplSXQtPnNlY29u
ZC5zaXplOwotICAgIGZsb2F0IHpvb20gPSBzaXplSXQtPnNlY29uZC56b29tOwotICAgIGZsb2F0
IHNjYWxlID0gc2l6ZUl0LT5zZWNvbmQuc2NhbGU7CisgICAgSW50U2l6ZSBzaXplID0gc2l6ZUl0
LT52YWx1ZS5zaXplOworICAgIGZsb2F0IHpvb20gPSBzaXplSXQtPnZhbHVlLnpvb207CisgICAg
ZmxvYXQgc2NhbGUgPSBzaXplSXQtPnZhbHVlLnNjYWxlOwogCiAgICAgLy8gRklYTUUgKDg1MzM1
KTogVGhpcyBuZWVkcyB0byB0YWtlIENTUyB0cmFuc2Zvcm0gc2NhbGUgaW50byBhY2NvdW50IGFz
IHdlbGwuCiAgICAgUGFnZSogcGFnZSA9IHJlbmRlcmVyLT5kb2N1bWVudCgpLT5wYWdlKCk7CkBA
IC0xNTYsNyArMTU2LDcgQEAgSW1hZ2UqIFNWR0ltYWdlQ2FjaGU6Omxvb2t1cE9yQ3JlYXRlQml0
bWFwSW1hZ2VGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QqIHIKICAgICAvLyBMb29rdXAg
aW1hZ2UgZm9yIGNsaWVudCBpbiBjYWNoZSBhbmQgZXZlbnR1YWxseSB1cGRhdGUgaXQuCiAgICAg
SW1hZ2VEYXRhTWFwOjppdGVyYXRvciBpdCA9IG1faW1hZ2VEYXRhTWFwLmZpbmQoY2xpZW50KTsK
ICAgICBpZiAoaXQgIT0gbV9pbWFnZURhdGFNYXAuZW5kKCkpIHsKLSAgICAgICAgSW1hZ2VEYXRh
JiBkYXRhID0gaXQtPnNlY29uZDsKKyAgICAgICAgSW1hZ2VEYXRhJiBkYXRhID0gaXQtPnZhbHVl
OwogCiAgICAgICAgIC8vIENvbW1vbiBjYXNlOiBpbWFnZSBzaXplICYgem9vbSByZW1haW5lZCB0
aGUgc2FtZS4KICAgICAgICAgaWYgKGRhdGEuc2l6ZUFuZFNjYWxlcy5zaXplID09IHNpemUgJiYg
ZGF0YS5zaXplQW5kU2NhbGVzLnpvb20gPT0gem9vbSAmJiBkYXRhLnNpemVBbmRTY2FsZXMuc2Nh
bGUgPT0gc2NhbGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGaWx0ZXJCdWlsZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGaWx0ZXJCdWlsZGVyLmgKaW5kZXggMjE3ZmQxZTM4YWI3OTgwN2JlMzJlMDUyOTkz
ZWVkNDA4ZWZlM2QyNS4uZjJlYjQ2MGRmNzk5NGNkZDhiNjBmMGEwODFjNzk3NTFiMDhiOGQwNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVy
QnVpbGRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0Zp
bHRlckJ1aWxkZXIuaApAQCAtNTEsNyArNTEsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICAv
LyBPbmx5IGFsbG93ZWQgZm9yIGVmZmVjdHMgYmVsb25ncyB0byB0aGlzIGJ1aWxkZXIuCiAgICAg
ICAgIEFTU0VSVChtX2VmZmVjdFJlZmVyZW5jZXMuY29udGFpbnMoZWZmZWN0KSk7Ci0gICAgICAg
IHJldHVybiBtX2VmZmVjdFJlZmVyZW5jZXMuZmluZChlZmZlY3QpLT5zZWNvbmQ7CisgICAgICAg
IHJldHVybiBtX2VmZmVjdFJlZmVyZW5jZXMuZmluZChlZmZlY3QpLT52YWx1ZTsKICAgICB9CiAK
ICAgICAvLyBSZXF1aXJlZCB0byBjaGFuZ2UgdGhlIGF0dHJpYnV0ZXMgb2YgYSBmaWx0ZXIgZHVy
aW5nIGFuIHN2Z0F0dHJpYnV0ZUNoYW5nZWQuCkBAIC02Nyw3ICs2Nyw3IEBAIHByaXZhdGU6CiAg
ICAgewogICAgICAgICBIYXNoTWFwPEF0b21pY1N0cmluZywgUmVmUHRyPEZpbHRlckVmZmVjdD4g
Pjo6aXRlcmF0b3IgZW5kID0gbV9idWlsdGluRWZmZWN0cy5lbmQoKTsKICAgICAgICAgZm9yIChI
YXNoTWFwPEF0b21pY1N0cmluZywgUmVmUHRyPEZpbHRlckVmZmVjdD4gPjo6aXRlcmF0b3IgaXRl
cmF0b3IgPSBtX2J1aWx0aW5FZmZlY3RzLmJlZ2luKCk7IGl0ZXJhdG9yICE9IGVuZDsgKytpdGVy
YXRvcikKLSAgICAgICAgICAgICBtX2VmZmVjdFJlZmVyZW5jZXMuYWRkKGl0ZXJhdG9yLT5zZWNv
bmQsIEZpbHRlckVmZmVjdFNldCgpKTsKKyAgICAgICAgICAgICBtX2VmZmVjdFJlZmVyZW5jZXMu
YWRkKGl0ZXJhdG9yLT52YWx1ZSwgRmlsdGVyRWZmZWN0U2V0KCkpOwogICAgIH0KIAogICAgIEhh
c2hNYXA8QXRvbWljU3RyaW5nLCBSZWZQdHI8RmlsdGVyRWZmZWN0PiA+IG1fYnVpbHRpbkVmZmVj
dHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRl
ZFByb3BlcnR5LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFBy
b3BlcnR5LmgKaW5kZXggNmRmZGFjNmRkNTc4YWYzMGY2ZGVhYjdjZDI2NTgzNjA0NDJmM2FkZi4u
NmExZjAwOTdiNjFiYzBiNWRiMDk4MDE1NTA5MDNjMTkwNDQ5NjdiYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHkuaApAQCAtNTgs
OCArNTgsOCBAQCBwdWJsaWM6CiAgICAgICAgIENhY2hlKiBjYWNoZSA9IGFuaW1hdGVkUHJvcGVy
dHlDYWNoZSgpOwogICAgICAgICBjb25zdCBDYWNoZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY2Fj
aGUtPmVuZCgpOwogICAgICAgICBmb3IgKENhY2hlOjpjb25zdF9pdGVyYXRvciBpdCA9IGNhY2hl
LT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGlmIChpdC0+c2Vjb25k
ID09IHRoaXMpIHsKLSAgICAgICAgICAgICAgICBjYWNoZS0+cmVtb3ZlKGl0LT5maXJzdCk7Cisg
ICAgICAgICAgICBpZiAoaXQtPnZhbHVlID09IHRoaXMpIHsKKyAgICAgICAgICAgICAgICBjYWNo
ZS0+cmVtb3ZlKGl0LT5rZXkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9T
VkdBdHRyaWJ1dGVUb1Byb3BlcnR5TWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0
aWVzL1NWR0F0dHJpYnV0ZVRvUHJvcGVydHlNYXAuY3BwCmluZGV4IGJlMzFjYzNjN2RhMmY1MGY1
MWY2OWI1NTQ0MDI2NWRiMTM1YjUyOGMuLmNjNDZjY2ZhMDgxZmZjODgzMDliN2VmMjJkNjNmMGYz
NGVmZDgxN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0F0
dHJpYnV0ZVRvUHJvcGVydHlNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0
aWVzL1NWR0F0dHJpYnV0ZVRvUHJvcGVydHlNYXAuY3BwCkBAIC0zMSw3ICszMSw3IEBAIHZvaWQg
U1ZHQXR0cmlidXRlVG9Qcm9wZXJ0eU1hcDo6YWRkUHJvcGVydGllcyhTVkdBdHRyaWJ1dGVUb1By
b3BlcnR5TWFwJiBtYXApCiB7CiAgICAgQXR0cmlidXRlVG9Qcm9wZXJ0aWVzTWFwOjppdGVyYXRv
ciBlbmQgPSBtYXAubV9tYXAuZW5kKCk7CiAgICAgZm9yIChBdHRyaWJ1dGVUb1Byb3BlcnRpZXNN
YXA6Oml0ZXJhdG9yIGl0ID0gbWFwLm1fbWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewot
ICAgICAgICBQcm9wZXJ0aWVzVmVjdG9yKiB2ZWN0b3IgPSBpdC0+c2Vjb25kOworICAgICAgICBQ
cm9wZXJ0aWVzVmVjdG9yKiB2ZWN0b3IgPSBpdC0+dmFsdWU7CiAgICAgICAgIEFTU0VSVCh2ZWN0
b3IpOwogCiAgICAgICAgIFByb3BlcnRpZXNWZWN0b3I6Oml0ZXJhdG9yIHZlY3RvckVuZCA9IHZl
Y3Rvci0+ZW5kKCk7CkBAIC04MSwxMiArODEsMTIgQEAgdm9pZCBTVkdBdHRyaWJ1dGVUb1Byb3Bl
cnR5TWFwOjpzeW5jaHJvbml6ZVByb3BlcnRpZXMoU1ZHRWxlbWVudCogY29udGV4dEVsZW1lbnQK
ICAgICBBU1NFUlQoY29udGV4dEVsZW1lbnQpOwogICAgIEF0dHJpYnV0ZVRvUHJvcGVydGllc01h
cDo6aXRlcmF0b3IgZW5kID0gbV9tYXAuZW5kKCk7CiAgICAgZm9yIChBdHRyaWJ1dGVUb1Byb3Bl
cnRpZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9tYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7
Ci0gICAgICAgIFByb3BlcnRpZXNWZWN0b3IqIHZlY3RvciA9IGl0LT5zZWNvbmQ7CisgICAgICAg
IFByb3BlcnRpZXNWZWN0b3IqIHZlY3RvciA9IGl0LT52YWx1ZTsKICAgICAgICAgQVNTRVJUKHZl
Y3Rvcik7CiAKICAgICAgICAgUHJvcGVydGllc1ZlY3Rvcjo6aXRlcmF0b3IgdmVjdG9yRW5kID0g
dmVjdG9yLT5lbmQoKTsKICAgICAgICAgZm9yIChQcm9wZXJ0aWVzVmVjdG9yOjppdGVyYXRvciB2
ZWN0b3JJdCA9IHZlY3Rvci0+YmVnaW4oKTsgdmVjdG9ySXQgIT0gdmVjdG9yRW5kOyArK3ZlY3Rv
ckl0KQotICAgICAgICAgICAgc3luY2hyb25pemVQcm9wZXJ0eShjb250ZXh0RWxlbWVudCwgaXQt
PmZpcnN0LCAqdmVjdG9ySXQpOworICAgICAgICAgICAgc3luY2hyb25pemVQcm9wZXJ0eShjb250
ZXh0RWxlbWVudCwgaXQtPmtleSwgKnZlY3Rvckl0KTsKICAgICB9IAogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuY3BwIGIvU291cmNlL1dlYkNv
cmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcAppbmRleCBjMDQwYzM5NjY5NGI2MTY0NTU3MzA4
Y2RlNzEyMmQ2MGYxMzBkNGQ5Li5kNjkzMWNmZWM5MGU4ZDIyYTE3MmViODIxMjdlMDAwYzdjNTcw
OWFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAKQEAgLTE4NCw3
ICsxODQsNyBAQCBib29sIFdvcmtlckNvbnRleHQ6Omhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0
CiAgICAgQWN0aXZlRE9NT2JqZWN0c01hcCYgYWN0aXZlT2JqZWN0cyA9IGFjdGl2ZURPTU9iamVj
dHMoKTsKICAgICBBY3RpdmVET01PYmplY3RzTWFwOjpjb25zdF9pdGVyYXRvciBhY3RpdmVPYmpl
Y3RzRW5kID0gYWN0aXZlT2JqZWN0cy5lbmQoKTsKICAgICBmb3IgKEFjdGl2ZURPTU9iamVjdHNN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBhY3RpdmVPYmplY3RzLmJlZ2luKCk7IGl0ZXIgIT0g
YWN0aXZlT2JqZWN0c0VuZDsgKytpdGVyKSB7Ci0gICAgICAgIGlmIChpdGVyLT5maXJzdC0+aGFz
UGVuZGluZ0FjdGl2aXR5KCkpCisgICAgICAgIGlmIChpdGVyLT5rZXktPmhhc1BlbmRpbmdBY3Rp
dml0eSgpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckV2ZW50UXVldWUuY3BwIGIvU291cmNlL1dlYkNv
cmUvd29ya2Vycy9Xb3JrZXJFdmVudFF1ZXVlLmNwcAppbmRleCA1OWE5MzA3ZWFjMTc4NGI2OTlj
M2ZlZDIwYTQ1NWE3OWYwODkxMDdlLi4yMzU1MjlmMWZlYjk3MTI4YzMxZDk2YTMwZGEwY2RmZmJi
ZTlkMGViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckV2ZW50UXVl
dWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyRXZlbnRRdWV1ZS5jcHAK
QEAgLTEyNyw3ICsxMjcsNyBAQCB2b2lkIFdvcmtlckV2ZW50UXVldWU6OmNsb3NlKCkKIHsKICAg
ICBtX2lzQ2xvc2VkID0gdHJ1ZTsKICAgICBmb3IgKEV2ZW50VGFza01hcDo6aXRlcmF0b3IgaXQg
PSBtX2V2ZW50VGFza01hcC5iZWdpbigpOyBpdCAhPSBtX2V2ZW50VGFza01hcC5lbmQoKTsgKytp
dCkgewotICAgICAgICBFdmVudERpc3BhdGNoZXJUYXNrKiB0YXNrID0gaXQtPnNlY29uZDsKKyAg
ICAgICAgRXZlbnREaXNwYXRjaGVyVGFzayogdGFzayA9IGl0LT52YWx1ZTsKICAgICAgICAgdGFz
ay0+Y2FuY2VsKCk7CiAgICAgfQogICAgIG1fZXZlbnRUYXNrTWFwLmNsZWFyKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwIGIvU291cmNlL1dlYkNv
cmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAppbmRleCAwOTdiYzQ0MjdmMGQwYzRjNjUxMjBhM2I3
OWFhZmJmZGIzNGY0NGM4Li4zNWE1MTkwMjE2MjgzYmE3Y2Q1ZjZjNTBjNTRjNGY2NjBiMDEyNDQ5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKQEAgLTkyOSw3ICs5MjksNyBA
QCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpzZXRSZXF1ZXN0SGVhZGVySW50ZXJuYWwoY29uc3QgQXRv
bWljU3RyaW5nJiBuYW1lLCBjb25zdCBTdAogewogICAgIEhUVFBIZWFkZXJNYXA6OkFkZFJlc3Vs
dCByZXN1bHQgPSBtX3JlcXVlc3RIZWFkZXJzLmFkZChuYW1lLCB2YWx1ZSk7CiAgICAgaWYgKCFy
ZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQuYXBwZW5k
KCIsICIgKyB2YWx1ZSk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKCIs
ICIgKyB2YWx1ZSk7CiB9CiAKIFN0cmluZyBYTUxIdHRwUmVxdWVzdDo6Z2V0UmVxdWVzdEhlYWRl
cihjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpIGNvbnN0CkBAIC05NTYsMTYgKzk1NiwxNiBAQCBT
dHJpbmcgWE1MSHR0cFJlcXVlc3Q6OmdldEFsbFJlc3BvbnNlSGVhZGVycyhFeGNlcHRpb25Db2Rl
JiBlYykgY29uc3QKICAgICAgICAgLy8gICAgIDIpIFRoZXJlJ3Mgbm8ga25vd24gaGFybSBpbiBo
aWRpbmcgU2V0LUNvb2tpZSBoZWFkZXIgZmllbGRzIGVudGlyZWx5OyB3ZSBkb24ndAogICAgICAg
ICAvLyAgICAgICAga25vdyBhbnkgd2lkZWx5IHVzZWQgdGVjaG5pcXVlIHRoYXQgcmVxdWlyZXMg
YWNjZXNzIHRvIHRoZW0uCiAgICAgICAgIC8vICAgICAzKSBGaXJlZm94IGhhcyBpbXBsZW1lbnRl
ZCB0aGlzIHBvbGljeS4KLSAgICAgICAgaWYgKGlzU2V0Q29va2llSGVhZGVyKGl0LT5maXJzdCkg
JiYgIXNlY3VyaXR5T3JpZ2luKCktPmNhbkxvYWRMb2NhbFJlc291cmNlcygpKQorICAgICAgICBp
ZiAoaXNTZXRDb29raWVIZWFkZXIoaXQtPmtleSkgJiYgIXNlY3VyaXR5T3JpZ2luKCktPmNhbkxv
YWRMb2NhbFJlc291cmNlcygpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaWYg
KCFtX3NhbWVPcmlnaW5SZXF1ZXN0ICYmICFpc09uQWNjZXNzQ29udHJvbFJlc3BvbnNlSGVhZGVy
V2hpdGVsaXN0KGl0LT5maXJzdCkgJiYgIWFjY2Vzc0NvbnRyb2xFeHBvc2VIZWFkZXJTZXQuY29u
dGFpbnMoaXQtPmZpcnN0KSkKKyAgICAgICAgaWYgKCFtX3NhbWVPcmlnaW5SZXF1ZXN0ICYmICFp
c09uQWNjZXNzQ29udHJvbFJlc3BvbnNlSGVhZGVyV2hpdGVsaXN0KGl0LT5rZXkpICYmICFhY2Nl
c3NDb250cm9sRXhwb3NlSGVhZGVyU2V0LmNvbnRhaW5zKGl0LT5rZXkpKQogICAgICAgICAgICAg
Y29udGludWU7CiAKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPmZpcnN0KTsKKyAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPmtleSk7CiAgICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKCc6Jyk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCcgJyk7Ci0gICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5zZWNvbmQpOworICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZChpdC0+dmFsdWUpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXHIn
KTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7CiAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoRnVuY3Rpb25zLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3htbC9YUGF0aEZ1bmN0aW9ucy5jcHAKaW5kZXggMzkzNGViYThlYWFlNGExYjU4OTAyYjg4OTNm
NTVjMmU2Y2M0MTNkYy4uOGI3ZWI3Mjk1YWQzMWY1ZDc2NzRhOTE2MTZlNjg4M2U1YTdmYTUyOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoRnVuY3Rpb25zLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS94bWwvWFBhdGhGdW5jdGlvbnMuY3BwCkBAIC03MjAsNyArNzIwLDcgQEAg
RnVuY3Rpb24qIGNyZWF0ZUZ1bmN0aW9uKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgVmVjdG9y
PEV4cHJlc3Npb24qPiYgYXJncykKICAgICBIYXNoTWFwPFN0cmluZywgRnVuY3Rpb25SZWM+Ojpp
dGVyYXRvciBmdW5jdGlvbk1hcEl0ZXIgPSBmdW5jdGlvbk1hcC0+ZmluZChuYW1lKTsKICAgICBG
dW5jdGlvblJlYyogZnVuY3Rpb25SZWMgPSAwOwogCi0gICAgaWYgKGZ1bmN0aW9uTWFwSXRlciA9
PSBmdW5jdGlvbk1hcC0+ZW5kKCkgfHwgIShmdW5jdGlvblJlYyA9ICZmdW5jdGlvbk1hcEl0ZXIt
PnNlY29uZCktPmFyZ3MuY29udGFpbnMoYXJncy5zaXplKCkpKQorICAgIGlmIChmdW5jdGlvbk1h
cEl0ZXIgPT0gZnVuY3Rpb25NYXAtPmVuZCgpIHx8ICEoZnVuY3Rpb25SZWMgPSAmZnVuY3Rpb25N
YXBJdGVyLT52YWx1ZSktPmFyZ3MuY29udGFpbnMoYXJncy5zaXplKCkpKQogICAgICAgICByZXR1
cm4gMDsKIAogICAgIEZ1bmN0aW9uKiBmdW5jdGlvbiA9IGZ1bmN0aW9uUmVjLT5mYWN0b3J5Rm4o
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aFBhcnNlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS94bWwvWFBhdGhQYXJzZXIuY3BwCmluZGV4IGI1ZTZhOTIzNzU5M2I0YWFhMmEy
NDNmMmZmOWQ4NmU1N2Y5MzBhOTcuLjc0OTE4MGRiZTVlZThmOWIxMjJmY2RhMWU2OTgxNjljMDA5
ZjhmODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aFBhcnNlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoUGFyc2VyLmNwcApAQCAtMTAzLDcgKzEwMyw3IEBA
IHN0YXRpYyBib29sIGlzQXhpc05hbWUoY29uc3QgU3RyaW5nJiBuYW1lLCBTdGVwOjpBeGlzJiB0
eXBlKQogICAgIEF4aXNOYW1lc01hcDo6aXRlcmF0b3IgaXQgPSBheGlzTmFtZXMuZmluZChuYW1l
KTsKICAgICBpZiAoaXQgPT0gYXhpc05hbWVzLmVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgdHlwZSA9IGl0LT5zZWNvbmQ7CisgICAgdHlwZSA9IGl0LT52YWx1ZTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNz
b3JMaWJ4c2x0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yTGlieHNsdC5j
cHAKaW5kZXggZTIxYzgyN2MyNWRiYzVlZmQzMWJlNzA1ZjlmMzZmNTJkZTU0ODI0MS4uYTkxMjk4
OGRhNjM4Y2NmODQyZTdiMTdhZjVlNDM0NDZlOGEzMmQyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUveG1sL1hTTFRQcm9jZXNzb3JMaWJ4c2x0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS94
bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwCkBAIC0yMjUsOCArMjI1LDggQEAgc3RhdGljIGNv
bnN0IGNoYXIqKiB4c2x0UGFyYW1BcnJheUZyb21QYXJhbWV0ZXJNYXAoWFNMVFByb2Nlc3Nvcjo6
UGFyYW1ldGVyTWFwJgogICAgIFhTTFRQcm9jZXNzb3I6OlBhcmFtZXRlck1hcDo6aXRlcmF0b3Ig
ZW5kID0gcGFyYW1ldGVycy5lbmQoKTsKICAgICB1bnNpZ25lZCBpbmRleCA9IDA7CiAgICAgZm9y
IChYU0xUUHJvY2Vzc29yOjpQYXJhbWV0ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gcGFyYW1ldGVycy5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgcGFyYW1ldGVyQXJyYXlbaW5kZXgr
K10gPSBmYXN0U3RyRHVwKGl0LT5maXJzdC51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgcGFyYW1l
dGVyQXJyYXlbaW5kZXgrK10gPSBmYXN0U3RyRHVwKGl0LT5zZWNvbmQudXRmOCgpLmRhdGEoKSk7
CisgICAgICAgIHBhcmFtZXRlckFycmF5W2luZGV4KytdID0gZmFzdFN0ckR1cChpdC0+a2V5LnV0
ZjgoKS5kYXRhKCkpOworICAgICAgICBwYXJhbWV0ZXJBcnJheVtpbmRleCsrXSA9IGZhc3RTdHJE
dXAoaXQtPnZhbHVlLnV0ZjgoKS5kYXRhKCkpOwogICAgIH0KICAgICBwYXJhbWV0ZXJBcnJheVtp
bmRleF0gPSAwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nv
clF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yUXQuY3BwCmluZGV4IGE2
N2M1ZmRlNzZmY2M1NjhjZTNjNGM2OGM2MTA2MGQ0MGJiOTMxMGMuLjBjNDE0MGE4ZDc5ZWRlZmE1
MDIzMzVmZTAxODMxMmY0NzVmMTcwZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9Y
U0xUUHJvY2Vzc29yUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29y
UXQuY3BwCkBAIC0xNDIsNyArMTQyLDcgQEAgYm9vbCBYU0xUUHJvY2Vzc29yOjp0cmFuc2Zvcm1U
b1N0cmluZyhOb2RlKiBzb3VyY2VOb2RlLCBTdHJpbmcmLCBTdHJpbmcmIHJlc3VsdFMKIAogICAg
IFhTTFRQcm9jZXNzb3I6OlBhcmFtZXRlck1hcDo6aXRlcmF0b3IgZW5kID0gbV9wYXJhbWV0ZXJz
LmVuZCgpOwogICAgIGZvciAoWFNMVFByb2Nlc3Nvcjo6UGFyYW1ldGVyTWFwOjppdGVyYXRvciBp
dCA9IG1fcGFyYW1ldGVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHF1ZXJ5
LmJpbmRWYXJpYWJsZShRU3RyaW5nKGl0LT5maXJzdCksIFFYbWxJdGVtKFFWYXJpYW50KFFTdHJp
bmcoaXQtPnNlY29uZCkpKSk7CisgICAgICAgIHF1ZXJ5LmJpbmRWYXJpYWJsZShRU3RyaW5nKGl0
LT5rZXkpLCBRWG1sSXRlbShRVmFyaWFudChRU3RyaW5nKGl0LT52YWx1ZSkpKSk7CiAKICAgICBR
U3RyaW5nIHNvdXJjZTsKICAgICBpZiAoc291cmNlSXNEb2N1bWVudCAmJiBvd25lckRvY3VtZW50
LT50cmFuc2Zvcm1Tb3VyY2UoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJy
eS9BcGkvQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvQmFj
a2luZ1N0b3JlLmNwcAppbmRleCA1YWFjZDczZWFkOWNmMjY5NTFiY2ZiN2ZhN2YzMDA2Mzc1ZWY4
ZDY0Li44NGU5MmUwYjlhMWY2MDUxYzRjNWU5NzEwZWYzZTEyZWNlN2EwNWVjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL0JhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9CYWNraW5nU3RvcmUuY3BwCkBAIC03MjksOCArNzI5
LDggQEAgdm9pZCBCYWNraW5nU3RvcmVQcml2YXRlOjpzZXRCYWNraW5nU3RvcmVSZWN0KGNvbnN0
IFBsYXRmb3JtOjpJbnRSZWN0JiBiYWNraW5nU3QKICAgICAvLyBvdXIgbmV3IGJhY2tpbmcgc3Rv
cmUgcmVjdC4KICAgICBUaWxlTWFwOjpjb25zdF9pdGVyYXRvciB0aWxlTWFwRW5kID0gY3VycmVu
dE1hcC5lbmQoKTsKICAgICBmb3IgKFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY3VycmVu
dE1hcC5iZWdpbigpOyBpdCAhPSB0aWxlTWFwRW5kOyArK2l0KSB7Ci0gICAgICAgIFRpbGVJbmRl
eCBvbGRJbmRleCA9IGl0LT5maXJzdDsKLSAgICAgICAgQmFja2luZ1N0b3JlVGlsZSogdGlsZSA9
IGl0LT5zZWNvbmQ7CisgICAgICAgIFRpbGVJbmRleCBvbGRJbmRleCA9IGl0LT5rZXk7CisgICAg
ICAgIEJhY2tpbmdTdG9yZVRpbGUqIHRpbGUgPSBpdC0+dmFsdWU7CiAKICAgICAgICAgLy8gUmVz
ZXQgdGhlIG9sZCBpbmRleC4KICAgICAgICAgcmVzZXRUaWxlKG9sZEluZGV4LCB0aWxlLCBmYWxz
ZSAvKnJlc2V0QmFja2dyb3VuZCovKTsKQEAgLTc4Niw4ICs3ODYsOCBAQCB2b2lkIEJhY2tpbmdT
dG9yZVByaXZhdGU6OnNldEJhY2tpbmdTdG9yZVJlY3QoY29uc3QgUGxhdGZvcm06OkludFJlY3Qm
IGJhY2tpbmdTdAogICAgIHNpemVfdCBpID0gMDsKICAgICBUaWxlTWFwOjpjb25zdF9pdGVyYXRv
ciBsZWZ0T3ZlckVuZCA9IGxlZnRPdmVyVGlsZXMuZW5kKCk7CiAgICAgZm9yIChUaWxlTWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IGxlZnRPdmVyVGlsZXMuYmVnaW4oKTsgaXQgIT0gbGVmdE92ZXJF
bmQ7ICsraXQpIHsKLSAgICAgICAgVGlsZUluZGV4IG9sZEluZGV4ID0gaXQtPmZpcnN0OwotICAg
ICAgICBCYWNraW5nU3RvcmVUaWxlKiB0aWxlID0gaXQtPnNlY29uZDsKKyAgICAgICAgVGlsZUlu
ZGV4IG9sZEluZGV4ID0gaXQtPmtleTsKKyAgICAgICAgQmFja2luZ1N0b3JlVGlsZSogdGlsZSA9
IGl0LT52YWx1ZTsKICAgICAgICAgaWYgKGkgPj0gaW5kZXhlc1RvRmlsbC5zaXplKCkpIHsKICAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0x
NzUxLDcgKzE3NTEsNyBAQCBQbGF0Zm9ybTo6SW50UmVjdCBCYWNraW5nU3RvcmVQcml2YXRlOjp2
aXNpYmxlVGlsZXNSZWN0KCkgY29uc3QKICAgICBUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQg
PSBjdXJyZW50TWFwLmVuZCgpOwogICAgIGZvciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBjdXJyZW50TWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBUaWxlUmVj
dCB0aWxlUmVjdDsKLSAgICAgICAgdGlsZVJlY3QuZmlyc3QgPSBpdC0+Zmlyc3Q7CisgICAgICAg
IHRpbGVSZWN0LmZpcnN0ID0gaXQtPmtleTsKICAgICAgICAgdGlsZVJlY3Quc2Vjb25kID0gdGhp
cy0+dGlsZVJlY3QoKTsKICAgICAgICAgUGxhdGZvcm06OkludFJlY3QgdGlsZSA9IG1hcEZyb21U
aWxlc1RvVHJhbnNmb3JtZWRDb250ZW50cyh0aWxlUmVjdCk7CiAgICAgICAgIGlmICh0aWxlLmlu
dGVyc2VjdHModmlzaWJsZUNvbnRlbnRzUmVjdCgpKSkKQEAgLTE4MTIsNyArMTgxMiw3IEBAIHZv
aWQgQmFja2luZ1N0b3JlUHJpdmF0ZTo6cmVzZXRUaWxlcyhib29sIHJlc2V0QmFja2dyb3VuZCkK
IAogICAgIFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGN1cnJlbnRNYXAuZW5kKCk7CiAg
ICAgZm9yIChUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGN1cnJlbnRNYXAuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KQotICAgICAgICByZXNldFRpbGUoaXQtPmZpcnN0LCBpdC0+c2Vjb25k
LCByZXNldEJhY2tncm91bmQpOworICAgICAgICByZXNldFRpbGUoaXQtPmtleSwgaXQtPnZhbHVl
LCByZXNldEJhY2tncm91bmQpOwogfQogCiB2b2lkIEJhY2tpbmdTdG9yZVByaXZhdGU6OnVwZGF0
ZVRpbGVzKGJvb2wgdXBkYXRlVmlzaWJsZSwgYm9vbCBpbW1lZGlhdGUpCkBAIC0xODI1LDEwICsx
ODI1LDEwIEBAIHZvaWQgQmFja2luZ1N0b3JlUHJpdmF0ZTo6dXBkYXRlVGlsZXMoYm9vbCB1cGRh
dGVWaXNpYmxlLCBib29sIGltbWVkaWF0ZSkKIAogICAgIFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IGN1cnJlbnRNYXAuZW5kKCk7CiAgICAgZm9yIChUaWxlTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IGN1cnJlbnRNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGJv
b2wgaXNWaXNpYmxlID0gaXNUaWxlVmlzaWJsZShpdC0+Zmlyc3QpOworICAgICAgICBib29sIGlz
VmlzaWJsZSA9IGlzVGlsZVZpc2libGUoaXQtPmtleSk7CiAgICAgICAgIGlmICghdXBkYXRlVmlz
aWJsZSAmJiBpc1Zpc2libGUpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgdXBkYXRl
VGlsZShpdC0+Zmlyc3QsIGltbWVkaWF0ZSk7CisgICAgICAgIHVwZGF0ZVRpbGUoaXQtPmtleSwg
aW1tZWRpYXRlKTsKICAgICB9CiB9CiAKQEAgLTE4NDksOCArMTg0OSw4IEBAIHZvaWQgQmFja2lu
Z1N0b3JlUHJpdmF0ZTo6dXBkYXRlVGlsZXNGb3JTY3JvbGxPck5vdFJlbmRlcmVkUmVnaW9uKGJv
b2wgY2hlY2tMb2FkCiAKICAgICBUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBjdXJyZW50
TWFwLmVuZCgpOwogICAgIGZvciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjdXJyZW50
TWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBUaWxlSW5kZXggaW5kZXgg
PSBpdC0+Zmlyc3Q7Ci0gICAgICAgIEJhY2tpbmdTdG9yZVRpbGUqIHRpbGUgPSBpdC0+c2Vjb25k
OworICAgICAgICBUaWxlSW5kZXggaW5kZXggPSBpdC0+a2V5OworICAgICAgICBCYWNraW5nU3Rv
cmVUaWxlKiB0aWxlID0gaXQtPnZhbHVlOwogICAgICAgICBib29sIGlzVmlzaWJsZSA9IGlzVGls
ZVZpc2libGUoaW5kZXgpOwogICAgICAgICAvLyBUaGUgcmVjdCBpbiB0cmFuc2Zvcm1lZCBjb250
ZW50cyBjb29yZGluYXRlcy4KICAgICAgICAgUGxhdGZvcm06OkludFJlY3QgcmVjdChvcmlnaW5P
ZlRpbGUoaW5kZXgpLCB0aWxlU2l6ZSgpKTsKQEAgLTE5OTMsOCArMTk5Myw4IEBAIEJhY2tpbmdT
dG9yZVByaXZhdGU6OlRpbGVSZWN0TGlzdCBCYWNraW5nU3RvcmVQcml2YXRlOjptYXBGcm9tVHJh
bnNmb3JtZWRDb250ZW50CiAgICAgVGlsZVJlY3RMaXN0IHRpbGVSZWN0TGlzdDsKICAgICBUaWxl
TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSB0aWxlTWFwLmVuZCgpOwogICAgIGZvciAoVGlsZU1h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSB0aWxlTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewotICAgICAgICBUaWxlSW5kZXggaW5kZXggPSBpdC0+Zmlyc3Q7Ci0gICAgICAgIEJhY2tpbmdT
dG9yZVRpbGUqIHRpbGUgPSBpdC0+c2Vjb25kOworICAgICAgICBUaWxlSW5kZXggaW5kZXggPSBp
dC0+a2V5OworICAgICAgICBCYWNraW5nU3RvcmVUaWxlKiB0aWxlID0gaXQtPnZhbHVlOwogCiAg
ICAgICAgIC8vIE5lZWQgdG8gbWFwIHRoZSByZWN0IHRvIHRpbGUgY29vcmRpbmF0ZXMuCiAgICAg
ICAgIFBsYXRmb3JtOjpJbnRSZWN0IHIgPSByZWN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlckltcGwuY3Bw
IGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblBy
ZXNlbnRlckltcGwuY3BwCmluZGV4IDZiMjkyMTAyOTQ2Mjc3ZGEyOGU3OThkN2VlZGY4YjkzOWM1
MzE5YzcuLjQ4Y2NmM2FjNTFhYmRlMzY1YWIwMjc1OWQxZGFkYzQxNmZjMDBmNTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25Q
cmVzZW50ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1
cHBvcnQvTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbC5jcHAKQEAgLTgxLDcgKzgxLDcgQEAgdm9p
ZCBOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpjYW5jZWwoTm90aWZpY2F0aW9uKiBub3RpZmlj
YXRpb24pCiAgICAgaWYgKGl0ID09IG1fbm90aWZpY2F0aW9ucy5lbmQoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgbV9wbGF0Zm9ybVByZXNlbnRlci0+Y2FuY2VsKHN0ZDo6c3RyaW5nKGl0LT5z
ZWNvbmQudXRmOCgpLmRhdGEoKSkpOworICAgIG1fcGxhdGZvcm1QcmVzZW50ZXItPmNhbmNlbChz
dGQ6OnN0cmluZyhpdC0+dmFsdWUudXRmOCgpLmRhdGEoKSkpOwogICAgIG1fbm90aWZpY2F0aW9u
cy5yZW1vdmUoaXQpOwogfQogCkBAIC0xMDgsMTIgKzEwOCwxMiBAQCB2b2lkIE5vdGlmaWNhdGlv
blByZXNlbnRlckltcGw6Om9uUGVybWlzc2lvbihjb25zdCBzdGQ6OnN0cmluZyYgZG9tYWluLCBi
b29sIGlzQQogICAgIFN0cmluZyBkb21haW5TdHJpbmcgPSBTdHJpbmc6OmZyb21VVEY4KGRvbWFp
bi5jX3N0cigpKTsKICAgICBQZXJtaXNzaW9uUmVxdWVzdE1hcDo6aXRlcmF0b3IgaXQgPSBtX3Bl
cm1pc3Npb25SZXF1ZXN0cy5iZWdpbigpOwogICAgIGZvciAoOyBpdCAhPSBtX3Blcm1pc3Npb25S
ZXF1ZXN0cy5lbmQoKTsgKytpdCkgewotICAgICAgICBpZiAoaXQtPmZpcnN0LT51cmwoKS5ob3N0
KCkgIT0gZG9tYWluU3RyaW5nKQorICAgICAgICBpZiAoaXQtPmtleS0+dXJsKCkuaG9zdCgpICE9
IGRvbWFpblN0cmluZykKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIGlmIChpc0Fs
bG93ZWQpIHsKICAgICAgICAgICAgIG1fYWxsb3dlZERvbWFpbnMuYWRkKGRvbWFpblN0cmluZyk7
Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLT5oYW5kbGVFdmVudCgpOworICAgICAgICAgICAgaXQt
PnZhbHVlLT5oYW5kbGVFdmVudCgpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIG1fYWxs
b3dlZERvbWFpbnMucmVtb3ZlKGRvbWFpblN0cmluZyk7CiAKQEAgLTE0NCw5ICsxNDQsOSBAQCB2
b2lkIE5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6Om5vdGlmaWNhdGlvbkNsaWNrZWQoY29uc3Qg
c3RkOjpzdHJpbmcmIGlkKQogICAgIFN0cmluZyBpZFN0cmluZyA9IFN0cmluZzo6ZnJvbVVURjgo
aWQuY19zdHIoKSk7CiAgICAgTm90aWZpY2F0aW9uTWFwOjppdGVyYXRvciBpdCA9IG1fbm90aWZp
Y2F0aW9ucy5iZWdpbigpOwogICAgIGZvciAoOyBpdCAhPSBtX25vdGlmaWNhdGlvbnMuZW5kKCk7
ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQgPT0gaWRTdHJpbmcgJiYgaXQtPmZpcnN0
LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxOb3RpZmlj
YXRpb24+IG5vdGlmaWNhdGlvbiA9IGl0LT5maXJzdDsKLSAgICAgICAgICAgIGl0LT5maXJzdC0+
ZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50LCBmYWxz
ZSwgdHJ1ZSkpOworICAgICAgICBpZiAoaXQtPnZhbHVlID09IGlkU3RyaW5nICYmIGl0LT5rZXkt
PnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkgeworICAgICAgICAgICAgUmVmUHRyPE5vdGlmaWNh
dGlvbj4gbm90aWZpY2F0aW9uID0gaXQtPmtleTsKKyAgICAgICAgICAgIGl0LT5rZXktPmRpc3Bh
dGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuY2xpY2tFdmVudCwgZmFsc2UsIHRy
dWUpKTsKICAgICAgICAgICAgIG1fbm90aWZpY2F0aW9ucy5yZW1vdmUobm90aWZpY2F0aW9uKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L1VzZXJNZWRpYUNsaWVudEltcGwuY3BwIGIvU291
cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L1VzZXJNZWRpYUNsaWVudEltcGwu
Y3BwCmluZGV4IDZiMDlmMmE2NDExM2I5ZDVkZDI0NTUyZmI3ODM4MjA4YjQwNjRiYjIuLjFhMmU3
YjJmZmU0M2MyMTAzNDI0NGQzYTI1ODU3ODhhNjRlOTg2MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9Vc2VyTWVkaWFDbGllbnRJbXBsLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvVXNlck1lZGlhQ2xp
ZW50SW1wbC5jcHAKQEAgLTEyOSw3ICsxMjksNyBAQCB2b2lkIFVzZXJNZWRpYUNsaWVudEltcGw6
OmNhbmNlbFVzZXJNZWRpYVJlcXVlc3QoVXNlck1lZGlhUmVxdWVzdCogcmVxdWVzdCkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiA9IHJlcXVlc3QtPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKS0+c2VjdXJpdHlPcmlnaW4oKTsKLSAgICBtX3BhZ2UtPmNsaWVu
dCgpLT5jYW5jZWxVc2VyTWVkaWFSZXF1ZXN0KFdlYlVzZXJNZWRpYVJlcXVlc3QocmVxdWVzdC0+
YXVkaW8oKSwgcmVxdWVzdC0+dmlkZW8oKSwgb3JpZ2luLT50b1N0cmluZygpLnV0ZjgoKS5kYXRh
KCksIGl0LT5zZWNvbmQuZ2V0KCkpKTsKKyAgICBtX3BhZ2UtPmNsaWVudCgpLT5jYW5jZWxVc2Vy
TWVkaWFSZXF1ZXN0KFdlYlVzZXJNZWRpYVJlcXVlc3QocmVxdWVzdC0+YXVkaW8oKSwgcmVxdWVz
dC0+dmlkZW8oKSwgb3JpZ2luLT50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCksIGl0LT52YWx1ZS5n
ZXQoKSkpOwogICAgIHVzZXJNZWRpYVJlcXVlc3RzTWFwKCkucmVtb3ZlKGl0KTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvQWJvdXREYXRh
LmNwcCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0Fib3V0RGF0YS5j
cHAKaW5kZXggNWNjZWYzYzBlOWViNjEwZTRlNDJjN2ViZDdkODk5YTA1MTNiZmNmYi4uNjFiMzYy
Yjg0NDg5YzdlMzIzYTMwNGExNjZlNGZkOTZiMzQyNGM5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvQWJvdXREYXRhLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9BYm91dERhdGEuY3BwCkBAIC0yMDQsNyAr
MjA0LDcgQEAgc3RhdGljIHZvaWQgZHVtcEpTQ1R5cGVDb3VudFNldFRvVGFibGVIVE1MKFN0cmlu
ZyYgdGFibGVIVE1MLCBKU0M6OlR5cGVDb3VudFNldCoKICAgICAgICAgcmV0dXJuOwogCiAgICAg
Zm9yIChKU0M6OlR5cGVDb3VudFNldDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHR5cGVDb3VudFNl
dC0+YmVnaW4oKTsgaXRlciAhPSB0eXBlQ291bnRTZXQtPmVuZCgpOyArK2l0ZXIpCi0gICAgICAg
IHRhYmxlSFRNTCArPSBudW1iZXJUb0hUTUxUcihpdGVyLT5maXJzdCwgaXRlci0+c2Vjb25kKTsK
KyAgICAgICAgdGFibGVIVE1MICs9IG51bWJlclRvSFRNTFRyKGl0ZXItPmtleSwgaXRlci0+dmFs
dWUpOwogfQogCiBzdGF0aWMgU3RyaW5nIG1lbW9yeVBhZ2UoKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvRnJhbWVMYXllcnMuY3BwIGIvU291cmNl
L1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvRnJhbWVMYXllcnMuY3BwCmluZGV4IGE0
OWY1OTRmMmMyMGMyYzMxNzkzMjM5MmQ3MWE1NDU2ODliNWM0NjcuLmM0MDIzZGUzYzlmYjE5ZDE4
NzAxZjBjMTcxYjMyNjAxMTVmZGRkNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxhY2ti
ZXJyeS9XZWJLaXRTdXBwb3J0L0ZyYW1lTGF5ZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Js
YWNrYmVycnkvV2ViS2l0U3VwcG9ydC9GcmFtZUxheWVycy5jcHAKQEAgLTkxLDcgKzkxLDcgQEAg
dm9pZCBGcmFtZUxheWVyczo6cmVtb3ZlTGF5ZXJCeUZyYW1lKEZyYW1lKiBmcmFtZSkKICAgICBB
U1NFUlQoZnJhbWUpOwogICAgIEZyYW1lTGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9mcmFtZUxh
eWVycy5maW5kKGZyYW1lKTsKICAgICBpZiAoaXQgIT0gbV9mcmFtZUxheWVycy5lbmQoKSkgewot
ICAgICAgICBMYXllcldlYktpdFRocmVhZCogbGF5ZXIgPSBpdC0+c2Vjb25kOworICAgICAgICBM
YXllcldlYktpdFRocmVhZCogbGF5ZXIgPSBpdC0+dmFsdWU7CiAgICAgICAgIGlmIChsYXllci0+
c3VwZXJsYXllcigpKQogICAgICAgICAgICAgbGF5ZXItPnJlbW92ZUZyb21TdXBlcmxheWVyKCk7
CiAgICAgICAgIG1fZnJhbWVMYXllcnMucmVtb3ZlKGl0KTsKQEAgLTEwNCwxNSArMTA0LDE1IEBA
IHZvaWQgRnJhbWVMYXllcnM6OmNvbW1pdE9uV2ViS2l0VGhyZWFkKGRvdWJsZSBzY2FsZSkKICAg
ICBBU1NFUlQobV9yb290TGF5ZXIpOwogICAgIGlmICghaXNSb290TGF5ZXJNYWluRnJhbWVMYXll
cigpKSB7CiAgICAgICAgIGZvciAoRnJhbWVMYXllck1hcDo6aXRlcmF0b3IgaXQgPSBtX2ZyYW1l
TGF5ZXJzLmJlZ2luKCk7IGl0ICE9IG1fZnJhbWVMYXllcnMuZW5kKCk7ICsraXQpCi0gICAgICAg
ICAgICBpdC0+c2Vjb25kLT5zZXRBYnNvbHV0ZU9mZnNldChmcmFtZUxheWVyQWJzb2x1dGVPZmZz
ZXQoaXQtPmZpcnN0KSk7CisgICAgICAgICAgICBpdC0+dmFsdWUtPnNldEFic29sdXRlT2Zmc2V0
KGZyYW1lTGF5ZXJBYnNvbHV0ZU9mZnNldChpdC0+a2V5KSk7CiAgICAgfQogICAgIG1fcm9vdExh
eWVyLT5jb21taXRPbldlYktpdFRocmVhZChzY2FsZSk7CiB9CiAKIHZvaWQgRnJhbWVMYXllcnM6
OmNhbGN1bGF0ZVJvb3RMYXllcigpCiB7Ci0gICAgaWYgKG1fZnJhbWVMYXllcnMuc2l6ZSgpID09
IDEgJiYgbV9mcmFtZUxheWVycy5iZWdpbigpLT5maXJzdCA9PSBtX3BhZ2VQcml2YXRlLT5tX21h
aW5GcmFtZSkKLSAgICAgICAgbV9yb290TGF5ZXIgPSBtX2ZyYW1lTGF5ZXJzLmJlZ2luKCktPnNl
Y29uZDsKKyAgICBpZiAobV9mcmFtZUxheWVycy5zaXplKCkgPT0gMSAmJiBtX2ZyYW1lTGF5ZXJz
LmJlZ2luKCktPmtleSA9PSBtX3BhZ2VQcml2YXRlLT5tX21haW5GcmFtZSkKKyAgICAgICAgbV9y
b290TGF5ZXIgPSBtX2ZyYW1lTGF5ZXJzLmJlZ2luKCktPnZhbHVlOwogICAgIGVsc2UgaWYgKG1f
cm9vdEdyYXBoaWNzTGF5ZXIpCiAgICAgICAgIG1fcm9vdExheWVyID0gbV9yb290R3JhcGhpY3NM
YXllci0+cGxhdGZvcm1MYXllcigpOwogICAgIGVsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyLmNw
cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdlb2xvY2F0aW9uUGVybWlzc2lvblJl
cXVlc3RNYW5hZ2VyLmNwcAppbmRleCA0YzBlZDljZDcxN2I2ZjRkNWFhNmFmYWY5NzBiZWI2OTY3
OTY4OWQzLi4xZWVhYzY2N2JkZjY2YjNmMTkzZmIzMzVhMzg3MTI4ZmJjOTEyNjc0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHZW9sb2NhdGlvblBlcm1pc3Npb25S
ZXF1ZXN0TWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViR2Vv
bG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuY3BwCkBAIC02NCw3ICs2NCw3IEBAIGJv
b2wgV2ViR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXI6OnJlbW92ZShjb25zdCBX
ZWJLaXQ6OldlYkdlb2xvY2F0aW9uCiAgICAgR2VvbG9jYXRpb25JZE1hcDo6aXRlcmF0b3IgaXQg
PSBtX3ByaXZhdGUtPm1fZ2VvbG9jYXRpb25JZE1hcC5maW5kKGdlb2xvY2F0aW9uKTsKICAgICBp
ZiAoaXQgPT0gbV9wcml2YXRlLT5tX2dlb2xvY2F0aW9uSWRNYXAuZW5kKCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBpZCA9IGl0LT5zZWNvbmQ7CisgICAgaWQgPSBpdC0+dmFsdWU7CiAg
ICAgbV9wcml2YXRlLT5tX2dlb2xvY2F0aW9uSWRNYXAucmVtb3ZlKGl0KTsKICAgICBtX3ByaXZh
dGUtPm1faWRHZW9sb2NhdGlvbk1hcC5yZW1vdmUoaWQpOwogICAgIHJldHVybiB0cnVlOwpAQCAt
NzUsNyArNzUsNyBAQCBib29sIFdlYkdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2Vy
OjpyZW1vdmUoaW50IGlkLCBXZWJLaXQ6OldlYkdlb2xvY2F0aQogICAgIElkR2VvbG9jYXRpb25N
YXA6Oml0ZXJhdG9yIGl0ID0gbV9wcml2YXRlLT5tX2lkR2VvbG9jYXRpb25NYXAuZmluZChpZCk7
CiAgICAgaWYgKGl0ID09IG1fcHJpdmF0ZS0+bV9pZEdlb2xvY2F0aW9uTWFwLmVuZCgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgR2VvbG9jYXRpb24qIGdlb2xvY2F0aW9uID0gaXQtPnNl
Y29uZDsKKyAgICBHZW9sb2NhdGlvbiogZ2VvbG9jYXRpb24gPSBpdC0+dmFsdWU7CiAgICAgcGVy
bWlzc2lvblJlcXVlc3QgPSBXZWJHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0KGdlb2xvY2F0
aW9uKTsKICAgICBtX3ByaXZhdGUtPm1faWRHZW9sb2NhdGlvbk1hcC5yZW1vdmUoaXQpOwogICAg
IG1fcHJpdmF0ZS0+bV9nZW9sb2NhdGlvbklkTWFwLnJlbW92ZShnZW9sb2NhdGlvbik7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJNZXRhZGF0YS5jcHAgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJNZXRhZGF0YS5jcHAKaW5kZXggMDFkODc4
YTBhOWYyYzFjODkxNDkxOTFiYzhjODcxZDhjZGNmNjUzNy4uZjJmYzI4NTk0NDRjNDhhNzJkZDk0
YWRjMTFkMTg4MTdmNWViNDVkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViSURCTWV0YWRhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YklEQk1ldGFkYXRhLmNwcApAQCAtNDYsNyArNDYsNyBAQCBXZWJJREJNZXRhZGF0YTo6V2ViSURC
TWV0YWRhdGEoY29uc3QgV2ViQ29yZTo6SURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEpCiAK
ICAgICBzaXplX3QgaSA9IDA7CiAgICAgZm9yIChJREJEYXRhYmFzZU1ldGFkYXRhOjpPYmplY3RT
dG9yZU1hcDo6Y29uc3RfaXRlcmF0b3Igc3RvcmVJdGVyYXRvciA9IG1ldGFkYXRhLm9iamVjdFN0
b3Jlcy5iZWdpbigpOyBzdG9yZUl0ZXJhdG9yICE9IG1ldGFkYXRhLm9iamVjdFN0b3Jlcy5lbmQo
KTsgKytzdG9yZUl0ZXJhdG9yKSB7Ci0gICAgICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRh
dGEmIG9iamVjdFN0b3JlID0gc3RvcmVJdGVyYXRvci0+c2Vjb25kOworICAgICAgICBjb25zdCBJ
REJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZSA9IHN0b3JlSXRlcmF0b3ItPnZhbHVl
OwogICAgICAgICBPYmplY3RTdG9yZSB3ZWJPYmplY3RTdG9yZTsKICAgICAgICAgd2ViT2JqZWN0
U3RvcmUubmFtZSA9IG9iamVjdFN0b3JlLm5hbWU7CiAgICAgICAgIHdlYk9iamVjdFN0b3JlLmtl
eVBhdGggPSBvYmplY3RTdG9yZS5rZXlQYXRoOwpAQCAtNTUsNyArNTUsNyBAQCBXZWJJREJNZXRh
ZGF0YTo6V2ViSURCTWV0YWRhdGEoY29uc3QgV2ViQ29yZTo6SURCRGF0YWJhc2VNZXRhZGF0YSYg
bWV0YWRhdGEpCiAKICAgICAgICAgc2l6ZV90IGogPSAwOwogICAgICAgICBmb3IgKElEQk9iamVj
dFN0b3JlTWV0YWRhdGE6OkluZGV4TWFwOjpjb25zdF9pdGVyYXRvciBpbmRleEl0ZXJhdG9yID0g
b2JqZWN0U3RvcmUuaW5kZXhlcy5iZWdpbigpOyBpbmRleEl0ZXJhdG9yICE9IG9iamVjdFN0b3Jl
LmluZGV4ZXMuZW5kKCk7ICsraW5kZXhJdGVyYXRvcikgewotICAgICAgICAgICAgY29uc3QgSURC
SW5kZXhNZXRhZGF0YSYgaW5kZXggPSBpbmRleEl0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgICAg
ICBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleCA9IGluZGV4SXRlcmF0b3ItPnZhbHVlOwog
ICAgICAgICAgICAgSW5kZXggd2ViSW5kZXg7CiAgICAgICAgICAgICB3ZWJJbmRleC5uYW1lID0g
aW5kZXgubmFtZTsKICAgICAgICAgICAgIHdlYkluZGV4LmtleVBhdGggPSBpbmRleC5rZXlQYXRo
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW50ZW50LmNwcCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkludGVudC5jcHAKaW5kZXggNTU3NzVlY2Zj
ZGMxNjIwNGU1ODQwNmExNTc4YWU4ZWI2Njg3ZWQ4Yy4uMDQxYzdmMmU5YzUwMzU3NTliZDhlM2Vi
YjM0M2ZjNGNmZmRiN2QwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViSW50ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJbnRlbnQu
Y3BwCkBAIC0xODgsNyArMTg4LDcgQEAgV2ViU3RyaW5nIFdlYkludGVudDo6ZXh0cmFzVmFsdWUo
Y29uc3QgV2ViU3RyaW5nJiBuYW1lKSBjb25zdAogICAgIFdURjo6SGFzaE1hcDxTdHJpbmcsIFN0
cmluZz46OmNvbnN0X2l0ZXJhdG9yIHZhbCA9IG1fcHJpdmF0ZS0+ZXh0cmFzKCkuZmluZChuYW1l
KTsKICAgICBpZiAodmFsID09IG1fcHJpdmF0ZS0+ZXh0cmFzKCkuZW5kKCkpCiAgICAgICAgIHJl
dHVybiBXZWJTdHJpbmcoKTsKLSAgICByZXR1cm4gdmFsLT5zZWNvbmQ7CisgICAgcmV0dXJuIHZh
bC0+dmFsdWU7CiAjZWxzZQogICAgIHJldHVybiBXZWJTdHJpbmcoKTsKICNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJTb2NrZXRFeHRlbnNpb25EaXNw
YXRjaGVyVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYlNvY2tldEV4
dGVuc2lvbkRpc3BhdGNoZXJUZXN0LmNwcAppbmRleCAzNTg5ODNiODM5OTMxNGNkYTAzN2M4YzAz
MjQ5ZWU5YjY3MmU5NjdiLi4yNDUxNGNkNThmYmZkMDBhYWE4ODcyNDJhMWFjMzYzMzFjYWViNzgw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYlNvY2tldEV4dGVu
c2lvbkRpc3BhdGNoZXJUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L1dlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXJUZXN0LmNwcApAQCAtMTAzLDEwICsxMDMsMTAg
QEAgVEVTVF9GKFdlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXJUZXN0LCBUZXN0UGFyYW1ldGVy
cykKICAgICBFWFBFQ1RfRVEoMiwgbV9wYXJzZWRQYXJhbWV0ZXJzWzBdLnNpemUoKSk7CiAgICAg
SGFzaE1hcDxTdHJpbmcsIFN0cmluZz46Oml0ZXJhdG9yIHBhcmFtZXRlciA9IG1fcGFyc2VkUGFy
YW1ldGVyc1swXS5maW5kKCJtYXgtY2hhbm5lbHMiKTsKICAgICBFWFBFQ1RfVFJVRShwYXJhbWV0
ZXIgIT0gbV9wYXJzZWRQYXJhbWV0ZXJzWzBdLmVuZCgpKTsKLSAgICBFWFBFQ1RfRVEoIjQiLCBw
YXJhbWV0ZXItPnNlY29uZCk7CisgICAgRVhQRUNUX0VRKCI0IiwgcGFyYW1ldGVyLT52YWx1ZSk7
CiAgICAgcGFyYW1ldGVyID0gbV9wYXJzZWRQYXJhbWV0ZXJzWzBdLmZpbmQoImZsb3ctY29udHJv
bCIpOwogICAgIEVYUEVDVF9UUlVFKHBhcmFtZXRlciAhPSBtX3BhcnNlZFBhcmFtZXRlcnNbMF0u
ZW5kKCkpOwotICAgIEVYUEVDVF9UUlVFKHBhcmFtZXRlci0+c2Vjb25kLmlzTnVsbCgpKTsKKyAg
ICBFWFBFQ1RfVFJVRShwYXJhbWV0ZXItPnZhbHVlLmlzTnVsbCgpKTsKIH0KIAogVEVTVF9GKFdl
YlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXJUZXN0LCBUZXN0TXVsdGlwbGUpCkBAIC0xMzEsMTIg
KzEzMSwxMiBAQCBURVNUX0YoV2ViU29ja2V0RXh0ZW5zaW9uRGlzcGF0Y2hlclRlc3QsIFRlc3RN
dWx0aXBsZSkKICAgICAgICAgY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIHBhcnNlZFBh
cmFtZXRlcnMgPSBtX3BhcnNlZFBhcmFtZXRlcnNbaV07CiAgICAgICAgIEVYUEVDVF9FUShleHBl
Y3RlZFtpXS5wYXJhbWV0ZXJzLnNpemUoKSwgbV9wYXJzZWRQYXJhbWV0ZXJzW2ldLnNpemUoKSk7
CiAgICAgICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0
ZXJhdG9yID0gZXhwZWN0ZWRQYXJhbWV0ZXJzLmJlZ2luKCk7IGl0ZXJhdG9yICE9IGV4cGVjdGVk
UGFyYW1ldGVycy5lbmQoKTsgKytpdGVyYXRvcikgewotICAgICAgICAgICAgSGFzaE1hcDxTdHJp
bmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIHBhcnNlZCA9IHBhcnNlZFBhcmFtZXRlcnMuZmlu
ZChpdGVyYXRvci0+Zmlyc3QpOworICAgICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46
OmNvbnN0X2l0ZXJhdG9yIHBhcnNlZCA9IHBhcnNlZFBhcmFtZXRlcnMuZmluZChpdGVyYXRvci0+
a2V5KTsKICAgICAgICAgICAgIEVYUEVDVF9UUlVFKHBhcnNlZCAhPSBwYXJzZWRQYXJhbWV0ZXJz
LmVuZCgpKTsKLSAgICAgICAgICAgIGlmIChpdGVyYXRvci0+c2Vjb25kLmlzTnVsbCgpKQotICAg
ICAgICAgICAgICAgIEVYUEVDVF9UUlVFKHBhcnNlZC0+c2Vjb25kLmlzTnVsbCgpKTsKKyAgICAg
ICAgICAgIGlmIChpdGVyYXRvci0+dmFsdWUuaXNOdWxsKCkpCisgICAgICAgICAgICAgICAgRVhQ
RUNUX1RSVUUocGFyc2VkLT52YWx1ZS5pc051bGwoKSk7CiAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgRVhQRUNUX0VRKGl0ZXJhdG9yLT5zZWNvbmQsIHBhcnNlZC0+c2Vjb25kKTsK
KyAgICAgICAgICAgICAgICBFWFBFQ1RfRVEoaXRlcmF0b3ItPnZhbHVlLCBwYXJzZWQtPnZhbHVl
KTsKICAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL1dl
YkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L2VmbC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmwuY3BwCmluZGV4IDMw
NTk0M2M5MDI4NTRlNmE1YTY1N2UxYWU5YjExNjJjNGZjMzZkOWYuLjU1MGJlYWRhNTMzM2FiN2Vi
MjUyM2UyYWVkNTMzOTRhZWE2YjFlYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL1dl
YkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbC5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsLmNwcApAQCAt
NDg1LDcgKzQ4NSw3IEBAIHZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpldmFsdWF0ZVNj
cmlwdEluSXNvbGF0ZWRXb3JsZChjb25zdCBFdmFzX09iamVjdCoKICAgICBlbHNlIHsKICAgICAg
ICAgV1RGOjpIYXNoTWFwPGludCwgUmVmUHRyPFdlYkNvcmU6OkRPTVdyYXBwZXJXb3JsZCA+ID46
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gd29ybGRNYXAuZmluZCh3b3JsZElEKTsKICAgICAgICAgaWYg
KGl0ICE9IHdvcmxkTWFwLmVuZCgpKQotICAgICAgICAgICAgc2NyaXB0V29ybGQgPSAoKml0KS5z
ZWNvbmQ7CisgICAgICAgICAgICBzY3JpcHRXb3JsZCA9ICgqaXQpLnZhbHVlOwogICAgICAgICBl
bHNlIHsKICAgICAgICAgICAgIHNjcmlwdFdvcmxkID0gV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxl
cjo6Y3JlYXRlV29ybGQoKTsKICAgICAgICAgICAgIHdvcmxkTWFwLnNldCh3b3JsZElELCBzY3Jp
cHRXb3JsZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9Q
bGF0Zm9ybVN0cmF0ZWdpZXNFZmwuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBv
cnQvUGxhdGZvcm1TdHJhdGVnaWVzRWZsLmNwcAppbmRleCBhNzYyMzllYTFlNGRkYjEzN2U5NTky
MzE2N2M2MzAzNTIxMTM4Mzk5Li44OTFhNmNmNTczOTMxYWY5OWRmNjEzZTljMzNhZDRhNGQ0Mzhk
MThhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9y
bVN0cmF0ZWdpZXNFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0
L1BsYXRmb3JtU3RyYXRlZ2llc0VmbC5jcHAKQEAgLTk5LDggKzk5LDggQEAgdm9pZCBQbGF0Zm9y
bVN0cmF0ZWdpZXNFZmw6OmdldFBsdWdpbkluZm8oY29uc3QgUGFnZSogcGFnZSwgVmVjdG9yPFBs
dWdpbkluZm8+JgogICAgICAgICBmb3IgKE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7
CiAgICAgICAgICAgICBNaW1lQ2xhc3NJbmZvIG1pbWU7CiAKLSAgICAgICAgICAgIG1pbWUudHlw
ZSA9IGl0LT5maXJzdDsKLSAgICAgICAgICAgIG1pbWUuZGVzYyA9IGl0LT5zZWNvbmQ7CisgICAg
ICAgICAgICBtaW1lLnR5cGUgPSBpdC0+a2V5OworICAgICAgICAgICAgbWltZS5kZXNjID0gaXQt
PnZhbHVlOwogICAgICAgICAgICAgbWltZS5leHRlbnNpb25zID0gcGFja2FnZS0+bWltZVRvRXh0
ZW5zaW9ucygpLmdldChtaW1lLnR5cGUpOwogICAgICAgICAgICAgcGx1Z2luSW5mby5taW1lcy5h
cHBlbmQobWltZSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3
ay9ld2tfaW50ZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfaW50ZW50LmNwcApp
bmRleCA3NmMyZDY4ZGFhNzIxMjRlYTViNjFiN2UyNGYwMzRjMmMwY2RiODFlLi44M2JjZTg3NjRh
ZjZhZDc5NzQ0MzY5MmY1Mzk2ZTNiYWFiMzU1ODhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2VmbC9ld2svZXdrX2ludGVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19p
bnRlbnQuY3BwCkBAIC0xMjAsNyArMTIwLDcgQEAgY29uc3QgY2hhciogZXdrX2ludGVudF9leHRy
YV9nZXQoY29uc3QgRXdrX0ludGVudCogaW50ZW50LCBjb25zdCBjaGFyKiBrZXkpCiAgICAgV1RG
OjpIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgdmFsID0gY29yZS0+ZXh0
cmFzKCkuZmluZChTdHJpbmc6OmZyb21VVEY4KGtleSkpOwogICAgIGlmICh2YWwgPT0gY29yZS0+
ZXh0cmFzKCkuZW5kKCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBlaW5hX3N0cmlu
Z3NoYXJlX2FkZCh2YWwtPnNlY29uZC51dGY4KCkuZGF0YSgpKTsKKyAgICByZXR1cm4gZWluYV9z
dHJpbmdzaGFyZV9hZGQodmFsLT52YWx1ZS51dGY4KCkuZGF0YSgpKTsKICNlbHNlCiAgICAgcmV0
dXJuIDA7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBw
b3J0L1BsYXRmb3JtU3RyYXRlZ2llc0d0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3Jl
U3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNHdGsuY3BwCmluZGV4IDI5MjE3M2FlMjkyZjUxMjEx
ODdlOGJlNTA1MDM5M2Q3YzMzODRjNWEuLjkxMDNjODQ2MDk0ZDUxZjhmNWI5NDg3NGNkNjdhZjA0
Nzk5MDlhZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L1Bs
YXRmb3JtU3RyYXRlZ2llc0d0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1
cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzR3RrLmNwcApAQCAtODgsOCArODgsOCBAQCB2b2lkIFBs
YXRmb3JtU3RyYXRlZ2llc0d0azo6Z2V0UGx1Z2luSW5mbyhjb25zdCBQYWdlKiBwYWdlLCBWZWN0
b3I8UGx1Z2luSW5mbz4mCiAgICAgICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gbWltZVRvRGVzY3JpcHRpb25zLmVuZCgpOwogICAgICAgICBmb3IgKE1JTUVU
b0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtaW1lVG9EZXNjcmlwdGlvbnMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBNaW1lQ2xhc3NJbmZvIG1p
bWU7Ci0gICAgICAgICAgICBtaW1lLnR5cGUgPSBpdC0+Zmlyc3Q7Ci0gICAgICAgICAgICBtaW1l
LmRlc2MgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgbWltZS50eXBlID0gaXQtPmtleTsKKyAg
ICAgICAgICAgIG1pbWUuZGVzYyA9IGl0LT52YWx1ZTsKICAgICAgICAgICAgIG1pbWUuZXh0ZW5z
aW9ucyA9IHBhY2thZ2UtPm1pbWVUb0V4dGVuc2lvbnMoKS5nZXQobWltZS50eXBlKTsKICAgICAg
ICAgICAgIHBsdWdpbkluZm8ubWltZXMuYXBwZW5kKG1pbWUpOwogICAgICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZmF2aWNvbmRhdGFiYXNlLmNwcCBi
L1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRmYXZpY29uZGF0YWJhc2UuY3BwCmluZGV4
IDZiYWJmZTRkZDkyZTUxNDJjZTBjNGY3MmMzOWE2Y2I2YzNkZGUxZmYuLmIzYTFkNzVjYTEyYjZh
ZTBmNjQ1YmY5MmIxMjhhNTgwMGEyMGVjY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXRmYXZpY29uZGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXRmYXZpY29uZGF0YWJhc2UuY3BwCkBAIC02MTQsMTggKzYxNCwxOCBAQCBz
dGF0aWMgdm9pZCB3ZWJraXRGYXZpY29uRGF0YWJhc2VJbXBvcnRGaW5pc2hlZChXZWJLaXRGYXZp
Y29uRGF0YWJhc2UqIGRhdGFiYXNlKQogICAgIFZlY3RvcjxTdHJpbmc+IHRvRGVsZXRlVVJMczsK
ICAgICBQZW5kaW5nSWNvblJlcXVlc3RNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGRhdGFiYXNl
LT5wcml2LT5wZW5kaW5nSWNvblJlcXVlc3RzLmVuZCgpOwogICAgIGZvciAoUGVuZGluZ0ljb25S
ZXF1ZXN0TWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gZGF0YWJhc2UtPnByaXYtPnBlbmRpbmdJ
Y29uUmVxdWVzdHMuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewotICAgICAgICBTdHJp
bmcgaWNvblVSTCA9IGljb25EYXRhYmFzZSgpLnN5bmNocm9ub3VzSWNvblVSTEZvclBhZ2VVUkwo
aXRlci0+Zmlyc3QpOworICAgICAgICBTdHJpbmcgaWNvblVSTCA9IGljb25EYXRhYmFzZSgpLnN5
bmNocm9ub3VzSWNvblVSTEZvclBhZ2VVUkwoaXRlci0+a2V5KTsKICAgICAgICAgaWYgKCFpY29u
VVJMLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIFBlbmRpbmdJ
Y29uUmVxdWVzdFZlY3RvciogaWNvbnMgPSBpdGVyLT5zZWNvbmQ7CisgICAgICAgIFBlbmRpbmdJ
Y29uUmVxdWVzdFZlY3RvciogaWNvbnMgPSBpdGVyLT52YWx1ZTsKICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBpY29ucy0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIFBlbmRpbmdJ
Y29uUmVxdWVzdCogcmVxdWVzdCA9IGljb25zLT5hdChpKS5nZXQoKTsKICAgICAgICAgICAgIGlm
IChyZXF1ZXN0LT5hc3luY1Jlc3VsdCgpKQogICAgICAgICAgICAgICAgIHJlcXVlc3QtPmFzeW5j
UmVzdWx0Q29tcGxldGUoMCk7CiAgICAgICAgIH0KIAotICAgICAgICB0b0RlbGV0ZVVSTHMuYXBw
ZW5kKGl0ZXItPmZpcnN0KTsKKyAgICAgICAgdG9EZWxldGVVUkxzLmFwcGVuZChpdGVyLT5rZXkp
OwogICAgIH0KIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdG9EZWxldGVVUkxzLnNpemUo
KTsgKytpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnBs
dWdpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2VicGx1Z2luLmNwcApp
bmRleCBlMDNiMWVhNmRhMzNiN2UyZjAwMjI1NWNlODc3Nzg2MjRjZGE3MDhjLi4wMWQwYmI1ZjJi
ZmQ3MDBmNmIzYzlmYzRmOGU0MjBjNTcyNDg2ZWMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0d2VicGx1Z2luLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0d2VicGx1Z2luLmNwcApAQCAtMjM3LDEwICsyMzcsMTAgQEAgR1NMaXN0KiB3
ZWJraXRfd2ViX3BsdWdpbl9nZXRfbWltZXR5cGVzKFdlYktpdFdlYlBsdWdpbiogcGx1Z2luKQog
CiAgICAgZm9yIChNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWlt
ZVRvRGVzY3JpcHRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBXZWJL
aXRXZWJQbHVnaW5NSU1FVHlwZSogbWltZVR5cGUgPSBnX3NsaWNlX25ldzAoV2ViS2l0V2ViUGx1
Z2luTUlNRVR5cGUpOwotICAgICAgICBtaW1lVHlwZS0+bmFtZSA9IGdfc3RyZHVwKGl0LT5maXJz
dC51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgbWltZVR5cGUtPmRlc2NyaXB0aW9uID0gZ19zdHJk
dXAoaXQtPnNlY29uZC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgbWltZVR5cGUtPm5hbWUgPSBn
X3N0cmR1cChpdC0+a2V5LnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBtaW1lVHlwZS0+ZGVzY3Jp
cHRpb24gPSBnX3N0cmR1cChpdC0+dmFsdWUudXRmOCgpLmRhdGEoKSk7CiAKLSAgICAgICAgVmVj
dG9yPFN0cmluZz4gZXh0ZW5zaW9ucyA9IHByaXYtPmNvcmVQbHVnaW4tPm1pbWVUb0V4dGVuc2lv
bnMoKS5nZXQoaXQtPmZpcnN0KTsKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gZXh0ZW5zaW9ucyA9
IHByaXYtPmNvcmVQbHVnaW4tPm1pbWVUb0V4dGVuc2lvbnMoKS5nZXQoaXQtPmtleSk7CiAgICAg
ICAgIG1pbWVUeXBlLT5leHRlbnNpb25zID0gc3RhdGljX2Nhc3Q8Z2NoYXIqKj4oZ19tYWxsb2Mw
KHNpemVvZihjaGFyKikgKiAoZXh0ZW5zaW9ucy5zaXplKCkgKyAxKSkpOwogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZXh0ZW5zaW9ucy5zaXplKCk7IGkrKykKICAgICAgICAgICAg
IG1pbWVUeXBlLT5leHRlbnNpb25zW2ldID0gZ19zdHJkdXAoZXh0ZW5zaW9uc1tpXS51dGY4KCku
ZGF0YSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL0hpc3RvcnkvV2ViSGlzdG9y
eS5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL0hpc3RvcnkvV2ViSGlzdG9yeS5tbQppbmRleCA2OTY0
ZmM5NDliNTEyMTczYTZiZGM1ZTcwYjU2MThkMzFjYjY3N2EzLi5lNzgxZDMyZmQxZGU5NTBkOTE0
YWY0ODM0OTc2NDIwZGY1ODdkYWY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9IaXN0
b3J5L1dlYkhpc3RvcnkubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvSGlzdG9yeS9XZWJIaXN0
b3J5Lm1tCkBAIC0yMzgsNyArMjM4LDcgQEAgc3RhdGljIGlubGluZSBXZWJIaXN0b3J5RGF0ZUtl
eSBkYXRlS2V5KE5TVGltZUludGVydmFsIGRhdGUpCiAgICAgICAgIHJldHVybiBOTzsKIAogICAg
IERhdGVUb0VudHJpZXNNYXA6Oml0ZXJhdG9yIGl0ID0gX2VudHJpZXNCeURhdGUtPmZpbmQoZGF0
ZUtleSk7Ci0gICAgTlNNdXRhYmxlQXJyYXkgKmVudHJpZXNGb3JEYXRlID0gaXQtPnNlY29uZC5n
ZXQoKTsKKyAgICBOU011dGFibGVBcnJheSAqZW50cmllc0ZvckRhdGUgPSBpdC0+dmFsdWUuZ2V0
KCk7CiAgICAgW2VudHJpZXNGb3JEYXRlIHJlbW92ZU9iamVjdElkZW50aWNhbFRvOmVudHJ5XTsK
ICAgICAKICAgICAvLyByZW1vdmUgdGhpcyBkYXRlIGVudGlyZWx5IGlmIHRoZXJlIGFyZSBubyBv
dGhlciBlbnRyaWVzIG9uIGl0CkBAIC00NDAsNyArNDQwLDcgQEAgc3RhdGljIGlubGluZSBXZWJI
aXN0b3J5RGF0ZUtleSBkYXRlS2V5KE5TVGltZUludGVydmFsIGRhdGUpCiAgICAgICAgIGRheXNB
c1RpbWVJbnRlcnZhbHMucmVzZXJ2ZUNhcGFjaXR5KF9lbnRyaWVzQnlEYXRlLT5zaXplKCkpOwog
ICAgICAgICBEYXRlVG9FbnRyaWVzTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBfZW50cmllc0J5
RGF0ZS0+ZW5kKCk7CiAgICAgICAgIGZvciAoRGF0ZVRvRW50cmllc01hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBfZW50cmllc0J5RGF0ZS0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAg
ICAgICAgZGF5c0FzVGltZUludGVydmFscy5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgICAg
IGRheXNBc1RpbWVJbnRlcnZhbHMuYXBwZW5kKGl0LT5rZXkpOwogCiAgICAgICAgIHNvcnQoZGF5
c0FzVGltZUludGVydmFscy5iZWdpbigpLCBkYXlzQXNUaW1lSW50ZXJ2YWxzLmVuZCgpKTsKICAg
ICAgICAgc2l6ZV90IGNvdW50ID0gZGF5c0FzVGltZUludGVydmFscy5zaXplKCk7CkBAIC04OTcs
NyArODk3LDcgQEAgV2ViSGlzdG9yeVdyaXRlcjo6V2ViSGlzdG9yeVdyaXRlcihEYXRlVG9FbnRy
aWVzTWFwKiBlbnRyaWVzQnlEYXRlKQogICAgIG1fZGF0ZUtleXMucmVzZXJ2ZUNhcGFjaXR5KG1f
ZW50cmllc0J5RGF0ZS0+c2l6ZSgpKTsKICAgICBEYXRlVG9FbnRyaWVzTWFwOjpjb25zdF9pdGVy
YXRvciBlbmQgPSBtX2VudHJpZXNCeURhdGUtPmVuZCgpOwogICAgIGZvciAoRGF0ZVRvRW50cmll
c01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2VudHJpZXNCeURhdGUtPmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkKLSAgICAgICAgbV9kYXRlS2V5cy5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAg
ICAgbV9kYXRlS2V5cy5hcHBlbmQoaXQtPmtleSk7CiAgICAgc29ydChtX2RhdGVLZXlzLmJlZ2lu
KCksIG1fZGF0ZUtleXMuZW5kKCkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21h
Yy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tIGIvU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJD
b3JlU3RhdGlzdGljcy5tbQppbmRleCAyOTZkZDZiMjViZDhiZGI3N2EzYzY4MGUxMzI0ZTViMzk3
ZDI2NmMzLi44ZGU2MzEzOWI3NzQzNzZiYmQxZjdjMTEwNmY2ZWVkYmRkM2U1YjI3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW0KQEAgLTg5LDggKzg5LDgg
QEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAgICAgT3duUHRyPFR5cGVDb3VudFNldD4gY291
bnRzKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5wcm90ZWN0ZWRPYmpl
Y3RUeXBlQ291bnRzKCkpOwogICAgIEhhc2hDb3VudGVkU2V0PGNvbnN0IGNoYXIqPjo6aXRlcmF0
b3IgZW5kID0gY291bnRzLT5lbmQoKTsKICAgICBmb3IgKEhhc2hDb3VudGVkU2V0PGNvbnN0IGNo
YXIqPjo6aXRlcmF0b3IgaXQgPSBjb3VudHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0LT5zZWNvbmQ7ICsraSkKLSAgICAgICAg
ICAgIFtyZXN1bHQgYWRkT2JqZWN0OltOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzppdC0+
Zmlyc3RdXTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0LT52YWx1ZTsgKytp
KQorICAgICAgICAgICAgW3Jlc3VsdCBhZGRPYmplY3Q6W05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4
U3RyaW5nOml0LT5rZXldXTsKICAgICAKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMTA0LDgg
KzEwNCw4IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogICAgIE93blB0cjxUeXBlQ291bnRT
ZXQ+IGNvdW50cyhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAub2JqZWN0
VHlwZUNvdW50cygpKTsKICAgICBIYXNoQ291bnRlZFNldDxjb25zdCBjaGFyKj46Oml0ZXJhdG9y
IGVuZCA9IGNvdW50cy0+ZW5kKCk7CiAgICAgZm9yIChIYXNoQ291bnRlZFNldDxjb25zdCBjaGFy
Kj46Oml0ZXJhdG9yIGl0ID0gY291bnRzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdC0+c2Vjb25kOyArK2kpCi0gICAgICAgICAg
ICBbcmVzdWx0IGFkZE9iamVjdDpbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6aXQtPmZp
cnN0XV07CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdC0+dmFsdWU7ICsraSkK
KyAgICAgICAgICAgIFtyZXN1bHQgYWRkT2JqZWN0OltOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0
cmluZzppdC0+a2V5XV07CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdE1hbmFn
ZXIubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkhv
c3RNYW5hZ2VyLm1tCmluZGV4IGU0OWQ1MGY0YmNiZDVjMWNiY2I4MzdjOGYyOTQ2M2Q0ZGMyZjQ5
ZjYuLjNjZTA4OWJlZDI3YTRjMjNhZjIzYzc1MDkyNGE5ZDg5YWMwYzcxMWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdE1hbmFn
ZXIubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVn
aW5Ib3N0TWFuYWdlci5tbQpAQCAtNzMsNyArNzMsNyBAQCBOZXRzY2FwZVBsdWdpbkhvc3RQcm94
eSogTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlcjo6aG9zdEZvclBsdWdpbihjb25zdCBXVEY6OlN0
cgogICAgIAogICAgIC8vIFRoZSBwYWNrYWdlIHdhcyBhbHJlYWR5IGluIHRoZSBtYXAsIGp1c3Qg
cmV0dXJuIGl0LgogICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJldHVybiBy
ZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+
dmFsdWU7CiAgICAgICAgIAogICAgIG1hY2hfcG9ydF90IGNsaWVudFBvcnQ7CiAgICAgaWYgKG1h
Y2hfcG9ydF9hbGxvY2F0ZShtYWNoX3Rhc2tfc2VsZigpLCBNQUNIX1BPUlRfUklHSFRfUkVDRUlW
RSwgJmNsaWVudFBvcnQpICE9IEtFUk5fU1VDQ0VTUykgewpAQCAtOTUsNyArOTUsNyBAQCBOZXRz
Y2FwZVBsdWdpbkhvc3RQcm94eSogTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlcjo6aG9zdEZvclBs
dWdpbihjb25zdCBXVEY6OlN0cgogICAgIAogICAgIE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5KiBo
b3N0UHJveHkgPSBuZXcgTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkoY2xpZW50UG9ydCwgcGx1Z2lu
SG9zdFBvcnQsIHBsdWdpbkhvc3RQU04sIHNob3VsZENhY2hlTWlzc2luZ1Byb3BlcnRpZXNBbmRN
ZXRob2RzKTsKICAgICAKLSAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IGhvc3RQcm94eTsK
KyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gaG9zdFByb3h5OwogICAgIAogICAgIHJldHVy
biBob3N0UHJveHk7CiB9CkBAIC0yMDQsNyArMjA0LDcgQEAgdm9pZCBOZXRzY2FwZVBsdWdpbkhv
c3RNYW5hZ2VyOjpwbHVnaW5Ib3N0RGllZChOZXRzY2FwZVBsdWdpbkhvc3RQcm94eSogcGx1Z2lu
SG8KIAogICAgIC8vIFRoaXMgaGFzIE8obikgY29tcGxleGl0eSBidXQgdGhlIG51bWJlciBvZiBh
Y3RpdmUgcGx1Zy1pbiBob3N0cyBpcyB2ZXJ5IHNtYWxsIHNvIGl0IHNob3VsZG4ndCBtYXR0ZXIu
CiAgICAgZm9yIChQbHVnaW5Ib3N0TWFwOjppdGVyYXRvciBpdCA9IG1fcGx1Z2luSG9zdHMuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kID09IHBsdWdp
bkhvc3QpIHsKKyAgICAgICAgaWYgKGl0LT52YWx1ZSA9PSBwbHVnaW5Ib3N0KSB7CiAgICAgICAg
ICAgICBtX3BsdWdpbkhvc3RzLnJlbW92ZShpdCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KQEAgLTI4Niw3ICsyODYsNyBAQCB2b2lkIE5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXI6
OmRpZENyZWF0ZVdpbmRvdygpCiAgICAgLy8gU2VlIGlmIGFueSBvZiBvdXIgaG9zdHMgYXJlIGlu
IGZ1bGwtc2NyZWVuIG1vZGUuCiAgICAgUGx1Z2luSG9zdE1hcDo6aXRlcmF0b3IgZW5kID0gbV9w
bHVnaW5Ib3N0cy5lbmQoKTsKICAgICBmb3IgKFBsdWdpbkhvc3RNYXA6Oml0ZXJhdG9yIGl0ID0g
bV9wbHVnaW5Ib3N0cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgTmV0c2Nh
cGVQbHVnaW5Ib3N0UHJveHkqIGhvc3RQcm94eSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIE5ldHNj
YXBlUGx1Z2luSG9zdFByb3h5KiBob3N0UHJveHkgPSBpdC0+dmFsdWU7CiAgICAgICAgIAogICAg
ICAgICBpZiAoIWhvc3RQcm94eS0+aXNNZW51QmFyVmlzaWJsZSgpKSB7CiAgICAgICAgICAgICAv
LyBNYWtlIG91cnNlbHZlcyB0aGUgZnJvbnQgcHJvY2Vzcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdFByb3h5Lm1tIGIvU291
cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkubW0K
aW5kZXggMGY5ZjA3ZGRiNDQwNzIzZGJhZjVhNzEyYjhhNDBhMDk4OTQ3NDhiMi4uNzRjODQ1YWRk
ODc1MDk5MWE4ZDI0ODg4YmEwY2I0NDU4OWVhZjdhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkubW0KKysrIGIvU291
cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkubW0K
QEAgLTE0NCw3ICsxNDQsNyBAQCB2b2lkIE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5OjpwbHVnaW5I
b3N0RGllZCgpCiAgIAogICAgIFBsdWdpbkluc3RhbmNlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQg
PSBpbnN0YW5jZXMuZW5kKCk7CiAgICAgZm9yIChQbHVnaW5JbnN0YW5jZU1hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBpbnN0YW5jZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBp
dC0+c2Vjb25kLT5wbHVnaW5Ib3N0RGllZCgpOworICAgICAgICBpdC0+dmFsdWUtPnBsdWdpbkhv
c3REaWVkKCk7CiAgICAgCiAgICAgTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlcjo6c2hhcmVkKCku
cGx1Z2luSG9zdERpZWQodGhpcyk7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21h
Yy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW0gYi9Tb3VyY2Uv
V2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW0K
aW5kZXggOTE2NTZkODQ3MGNiYmVkNGQxNzY3NmI2ZWUzYzU5N2Q0NTcxN2U1MC4uNzdkYjE0ODli
M2M5NDRiYWNmNWE2ODBiMWZmZGM4YmQ4MWJiOGUyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tCisrKyBi
L1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQ
cm94eS5tbQpAQCAtMTQ1LDcgKzE0NSw3IEBAIHVpbnQzMl90IE5ldHNjYXBlUGx1Z2luSW5zdGFu
Y2VQcm94eTo6TG9jYWxPYmplY3RNYXA6OmlkRm9yT2JqZWN0KEpTR2xvYmFsRGF0YSYKICAgICAK
ICAgICBIYXNoTWFwPEpTQzo6SlNPYmplY3QqLCBwYWlyPHVpbnQzMl90LCB1aW50MzJfdD4gPjo6
aXRlcmF0b3IgaXRlciA9IG1fanNPYmplY3RUb0lETWFwLmZpbmQob2JqZWN0KTsKICAgICBpZiAo
aXRlciAhPSBtX2pzT2JqZWN0VG9JRE1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0ZXItPnNl
Y29uZC5maXJzdDsKKyAgICAgICAgcmV0dXJuIGl0ZXItPnZhbHVlLmZpcnN0OwogICAgIAogICAg
IGRvIHsKICAgICAgICAgb2JqZWN0SUQgPSArK21fb2JqZWN0SURDb3VudGVyOwpAQCAtMTYyLDcg
KzE2Miw3IEBAIHZvaWQgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpMb2NhbE9iamVjdE1h
cDo6cmV0YWluKEpTQzo6SlNPYmplY3QqIG9iamVjdCkKICAgICBIYXNoTWFwPEpTQzo6SlNPYmpl
Y3QqLCBwYWlyPHVpbnQzMl90LCB1aW50MzJfdD4gPjo6aXRlcmF0b3IgaXRlciA9IG1fanNPYmpl
Y3RUb0lETWFwLmZpbmQob2JqZWN0KTsKICAgICBBU1NFUlQoaXRlciAhPSBtX2pzT2JqZWN0VG9J
RE1hcC5lbmQoKSk7CiAKLSAgICBpdGVyLT5zZWNvbmQuc2Vjb25kID0gaXRlci0+c2Vjb25kLnNl
Y29uZCArIDE7CisgICAgaXRlci0+dmFsdWUuc2Vjb25kID0gaXRlci0+dmFsdWUuc2Vjb25kICsg
MTsKIH0KIAogdm9pZCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OkxvY2FsT2JqZWN0TWFw
OjpyZWxlYXNlKEpTQzo6SlNPYmplY3QqIG9iamVjdCkKQEAgLTE3MCwxMCArMTcwLDEwIEBAIHZv
aWQgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpMb2NhbE9iamVjdE1hcDo6cmVsZWFzZShK
U0M6OkpTT2JqZWN0KiBvYmplY3QpCiAgICAgSGFzaE1hcDxKU0M6OkpTT2JqZWN0KiwgcGFpcjx1
aW50MzJfdCwgdWludDMyX3Q+ID46Oml0ZXJhdG9yIGl0ZXIgPSBtX2pzT2JqZWN0VG9JRE1hcC5m
aW5kKG9iamVjdCk7CiAgICAgQVNTRVJUKGl0ZXIgIT0gbV9qc09iamVjdFRvSURNYXAuZW5kKCkp
OwogCi0gICAgQVNTRVJUKGl0ZXItPnNlY29uZC5zZWNvbmQgPiAwKTsKLSAgICBpdGVyLT5zZWNv
bmQuc2Vjb25kID0gaXRlci0+c2Vjb25kLnNlY29uZCAtIDE7Ci0gICAgaWYgKCFpdGVyLT5zZWNv
bmQuc2Vjb25kKSB7Ci0gICAgICAgIG1faWRUb0pTT2JqZWN0TWFwLnJlbW92ZShpdGVyLT5zZWNv
bmQuZmlyc3QpOworICAgIEFTU0VSVChpdGVyLT52YWx1ZS5zZWNvbmQgPiAwKTsKKyAgICBpdGVy
LT52YWx1ZS5zZWNvbmQgPSBpdGVyLT52YWx1ZS5zZWNvbmQgLSAxOworICAgIGlmICghaXRlci0+
dmFsdWUuc2Vjb25kKSB7CisgICAgICAgIG1faWRUb0pTT2JqZWN0TWFwLnJlbW92ZShpdGVyLT52
YWx1ZS5maXJzdCk7CiAgICAgICAgIG1fanNPYmplY3RUb0lETWFwLnJlbW92ZShpdGVyKTsKICAg
ICB9CiB9CkBAIC0xOTcsMTAgKzE5NywxMCBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQ
cm94eTo6TG9jYWxPYmplY3RNYXA6OmZvcmdldCh1aW50MzJfdCBvYmplY3RJRCkKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgSGFzaE1hcDxKU0M6OkpTT2JqZWN0KiwgcGFpcjx1
aW50MzJfdCwgdWludDMyX3Q+ID46Oml0ZXJhdG9yIHJJdGVyID0gbV9qc09iamVjdFRvSURNYXAu
ZmluZChpdGVyLT5zZWNvbmQuZ2V0KCkpOworICAgIEhhc2hNYXA8SlNDOjpKU09iamVjdCosIHBh
aXI8dWludDMyX3QsIHVpbnQzMl90PiA+OjppdGVyYXRvciBySXRlciA9IG1fanNPYmplY3RUb0lE
TWFwLmZpbmQoaXRlci0+dmFsdWUuZ2V0KCkpOwogCiAgICAgLy8gSWYgdGhlIG9iamVjdCBpcyBi
ZWluZyBzZW50IHRvIHBsdWctaW4gcmlnaHQgbm93LCB0aGVuIGl0J3Mgbm90IHRoZSB0aW1lIHRv
IGZvcmdldC4KLSAgICBpZiAockl0ZXItPnNlY29uZC5zZWNvbmQgIT0gMSkKKyAgICBpZiAockl0
ZXItPnZhbHVlLnNlY29uZCAhPSAxKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBtX2pz
T2JqZWN0VG9JRE1hcC5yZW1vdmUockl0ZXIpOwpAQCAtMzMwLDcgKzMzMCw3IEBAIHZvaWQgTmV0
c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpkZXN0cm95KCkKICAgICAKICAgICBGcmFtZUxvYWRN
YXA6Oml0ZXJhdG9yIGVuZCA9IG1fcGVuZGluZ0ZyYW1lTG9hZHMuZW5kKCk7CiAgICAgZm9yIChG
cmFtZUxvYWRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wZW5kaW5nRnJhbWVMb2Fkcy5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIFsoaXQtPmZpcnN0KSBfc2V0SW50ZXJuYWxMb2FkRGVs
ZWdhdGU6bmlsXTsKKyAgICAgICAgWyhpdC0+a2V5KSBfc2V0SW50ZXJuYWxMb2FkRGVsZWdhdGU6
bmlsXTsKIAogICAgIF9XS1BIRGVzdHJveVBsdWdpbkluc3RhbmNlKG1fcGx1Z2luSG9zdFByb3h5
LT5wb3J0KCksIG1fcGx1Z2luSUQsIHJlcXVlc3RJRCk7CiAgCkBAIC02NzgsNyArNjc4LDcgQEAg
dm9pZCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OndlYkZyYW1lRGlkRmluaXNoTG9hZFdp
dGhSZWFzb24oV2ViRnJhbWUqIHdlYkYKICAgICBGcmFtZUxvYWRNYXA6Oml0ZXJhdG9yIGl0ID0g
bV9wZW5kaW5nRnJhbWVMb2Fkcy5maW5kKHdlYkZyYW1lKTsKICAgICBBU1NFUlQoaXQgIT0gbV9w
ZW5kaW5nRnJhbWVMb2Fkcy5lbmQoKSk7CiAgICAgICAgIAotICAgIFBsdWdpblJlcXVlc3QqIHBs
dWdpblJlcXVlc3QgPSBpdC0+c2Vjb25kLmdldCgpOworICAgIFBsdWdpblJlcXVlc3QqIHBsdWdp
blJlcXVlc3QgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgX1dLUEhMb2FkVVJMTm90aWZ5KG1fcGx1
Z2luSG9zdFByb3h5LT5wb3J0KCksIG1fcGx1Z2luSUQsIHBsdWdpblJlcXVlc3QtPnJlcXVlc3RJ
RCgpLCByZWFzb24pOwogIAogICAgIG1fcGVuZGluZ0ZyYW1lTG9hZHMucmVtb3ZlKGl0KTsKQEAg
LTE2MjgsNyArMTYyOCw3IEBAIHZvaWQgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpjYW5j
ZWxDaGVja0lmQWxsb3dlZFRvTG9hZFVSTCh1aW50MzJfdCBjaGVja0lECiAgICAgaWYgKGl0ID09
IG1fdXJsQ2hlY2tzLmVuZCgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgV2ViUGx1Z2lu
Q29udGFpbmVyQ2hlY2sgKmNoZWNrID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICBXZWJQbHVnaW5D
b250YWluZXJDaGVjayAqY2hlY2sgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgW2NoZWNrIGNhbmNl
bF07CiAgICAgbV91cmxDaGVja3MucmVtb3ZlKGl0KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL1Byb3h5SW5zdGFuY2UubW0gYi9Tb3VyY2UvV2ViS2l0
L21hYy9QbHVnaW5zL0hvc3RlZC9Qcm94eUluc3RhbmNlLm1tCmluZGV4IDQ5ZTk4ZmU2ZTIxNDdk
MDdlZmUwODA5YjMyM2Y1ZDFiNjJkZjFjNTMuLjE4ZTA0NDYzMDc3OTE5NzkzMjBhMThmODI1ZWQ2
OTViM2Q4MmE1NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVk
L1Byb3h5SW5zdGFuY2UubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQv
UHJveHlJbnN0YW5jZS5tbQpAQCAtMzU5LDggKzM1OSw4IEBAIE1ldGhvZExpc3QgUHJveHlJbnN0
YW5jZTo6bWV0aG9kc05hbWVkKFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiAgICAgTWV0aG9k
TWFwOjppdGVyYXRvciBleGlzdGluZ01hcEVudHJ5ID0gbV9tZXRob2RzLmZpbmQobmFtZS5pbXBs
KCkpOwogICAgIGlmIChleGlzdGluZ01hcEVudHJ5ICE9IG1fbWV0aG9kcy5lbmQoKSkgewogICAg
ICAgICBNZXRob2RMaXN0IG1ldGhvZExpc3Q7Ci0gICAgICAgIGlmIChleGlzdGluZ01hcEVudHJ5
LT5zZWNvbmQpCi0gICAgICAgICAgICBtZXRob2RMaXN0LmFwcGVuZChleGlzdGluZ01hcEVudHJ5
LT5zZWNvbmQpOworICAgICAgICBpZiAoZXhpc3RpbmdNYXBFbnRyeS0+dmFsdWUpCisgICAgICAg
ICAgICBtZXRob2RMaXN0LmFwcGVuZChleGlzdGluZ01hcEVudHJ5LT52YWx1ZSk7CiAgICAgICAg
IHJldHVybiBtZXRob2RMaXN0OwogICAgIH0KICAgICAKQEAgLTM4MiwxMSArMzgyLDExIEBAIE1l
dGhvZExpc3QgUHJveHlJbnN0YW5jZTo6bWV0aG9kc05hbWVkKFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUpCiAgICAgLy8gQWRkIGEgbmV3IGVudHJ5IHRvIHRoZSBtYXAgdW5sZXNzIGFuIGVudHJ5
IHdhcyBhZGRlZCB3aGlsZSB3ZSB3ZXJlIGluIHdhaXRGb3JSZXBseS4KICAgICBNZXRob2RNYXA6
OkFkZFJlc3VsdCBtYXBBZGRSZXN1bHQgPSBtX21ldGhvZHMuYWRkKG5hbWUuaW1wbCgpLCAwKTsK
ICAgICBpZiAobWFwQWRkUmVzdWx0LmlzTmV3RW50cnkgJiYgcmVwbHktPm1fcmVzdWx0KQotICAg
ICAgICBtYXBBZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IG5ldyBQcm94eU1ldGhvZChtZXRo
b2ROYW1lKTsKKyAgICAgICAgbWFwQWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IG5ldyBQcm94
eU1ldGhvZChtZXRob2ROYW1lKTsKIAogICAgIE1ldGhvZExpc3QgbWV0aG9kTGlzdDsKLSAgICBp
ZiAobWFwQWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpCi0gICAgICAgIG1ldGhvZExpc3QuYXBw
ZW5kKG1hcEFkZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKKyAgICBpZiAobWFwQWRkUmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZSkKKyAgICAgICAgbWV0aG9kTGlzdC5hcHBlbmQobWFwQWRkUmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZSk7CiAgICAgcmV0dXJuIG1ldGhvZExpc3Q7CiB9CiAKQEAgLTQwMiw3
ICs0MDIsNyBAQCBGaWVsZCogUHJveHlJbnN0YW5jZTo6ZmllbGROYW1lZChQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lKQogICAgIC8vIElmIHdlIGFscmVhZHkgaGF2ZSBhbiBlbnRyeSBpbiB0aGUg
bWFwLCB1c2UgaXQuCiAgICAgRmllbGRNYXA6Oml0ZXJhdG9yIGV4aXN0aW5nTWFwRW50cnkgPSBt
X2ZpZWxkcy5maW5kKG5hbWUuaW1wbCgpKTsKICAgICBpZiAoZXhpc3RpbmdNYXBFbnRyeSAhPSBt
X2ZpZWxkcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGV4aXN0aW5nTWFwRW50cnktPnNlY29uZDsK
KyAgICAgICAgcmV0dXJuIGV4aXN0aW5nTWFwRW50cnktPnZhbHVlOwogICAgIAogICAgIHVpbnQ2
NF90IGlkZW50aWZpZXIgPSByZWludGVycHJldF9jYXN0PHVpbnQ2NF90PihfTlBOX0dldFN0cmlu
Z0lkZW50aWZpZXIobmFtZS5hc2NpaSgpLmRhdGEoKSkpOwogICAgIHVpbnQzMl90IHJlcXVlc3RJ
RCA9IG1faW5zdGFuY2VQcm94eS0+bmV4dFJlcXVlc3RJRCgpOwpAQCAtNDIyLDggKzQyMiw4IEBA
IEZpZWxkKiBQcm94eUluc3RhbmNlOjpmaWVsZE5hbWVkKFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUpCiAgICAgLy8gQWRkIGEgbmV3IGVudHJ5IHRvIHRoZSBtYXAgdW5sZXNzIGFuIGVudHJ5IHdh
cyBhZGRlZCB3aGlsZSB3ZSB3ZXJlIGluIHdhaXRGb3JSZXBseS4KICAgICBGaWVsZE1hcDo6QWRk
UmVzdWx0IG1hcEFkZFJlc3VsdCA9IG1fZmllbGRzLmFkZChuYW1lLmltcGwoKSwgMCk7CiAgICAg
aWYgKG1hcEFkZFJlc3VsdC5pc05ld0VudHJ5ICYmIHJlcGx5LT5tX3Jlc3VsdCkKLSAgICAgICAg
bWFwQWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBuZXcgUHJveHlGaWVsZChpZGVudGlmaWVy
KTsKLSAgICByZXR1cm4gbWFwQWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgIG1h
cEFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBuZXcgUHJveHlGaWVsZChpZGVudGlmaWVyKTsK
KyAgICByZXR1cm4gbWFwQWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIAogSlNDOjpKU1Zh
bHVlIFByb3h5SW5zdGFuY2U6OmZpZWxkVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBGaWVs
ZCogZmllbGQpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dl
Yk5ldHNjYXBlUGx1Z2luVmlldy5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViTmV0
c2NhcGVQbHVnaW5WaWV3Lm1tCmluZGV4IDRlMWFhZDQ5NTI4Y2Q3ZDA4MWQ0MTM1MjQ1NGI5Yzg1
N2ZiYzI1YjcuLjZhMWViNjQwYTBkYWNmMGNjZTAxZWVkMzgxOTIzNTBiNWRjODUyZjMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5WaWV3Lm1t
CisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5WaWV3Lm1t
CkBAIC03MTAsNyArNzEwLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGdldE5QUmVjdChjb25zdCBO
U1JlY3QmIG5yLCBOUFJlY3QmIG5wcikKIAogICAgIEhhc2hNYXA8dWludDMyX3QsIFBsdWdpblRp
bWVyKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHRpbWVycy0+ZW5kKCk7CiAgICAgZm9yIChIYXNo
TWFwPHVpbnQzMl90LCBQbHVnaW5UaW1lcio+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHRpbWVycy0+
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFBsdWdpblRpbWVyKiB0aW1lciA9
IGl0LT5zZWNvbmQ7CisgICAgICAgIFBsdWdpblRpbWVyKiB0aW1lciA9IGl0LT52YWx1ZTsKICAg
ICAgICAgdGltZXItPnN0b3AoKTsKICAgICB9ICAgIAogfQpAQCAtNzI4LDcgKzcyOCw3IEBAIHN0
YXRpYyBpbmxpbmUgdm9pZCBnZXROUFJlY3QoY29uc3QgTlNSZWN0JiBuciwgTlBSZWN0JiBucHIp
CiAgICAgCiAgICAgSGFzaE1hcDx1aW50MzJfdCwgUGx1Z2luVGltZXIqPjo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gdGltZXJzLT5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8dWludDMyX3QsIFBsdWdp
blRpbWVyKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdGltZXJzLT5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKLSAgICAgICAgUGx1Z2luVGltZXIqIHRpbWVyID0gaXQtPnNlY29uZDsKKyAgICAg
ICAgUGx1Z2luVGltZXIqIHRpbWVyID0gaXQtPnZhbHVlOwogICAgICAgICBBU1NFUlQoIXRpbWVy
LT5pc0FjdGl2ZSgpKTsKICAgICAgICAgdGltZXItPnN0YXJ0KF9pc0NvbXBsZXRlbHlPYnNjdXJl
ZCk7CiAgICAgfSAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBw
b3J0L1dlYk5vdGlmaWNhdGlvbkNsaWVudC5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVT
dXBwb3J0L1dlYk5vdGlmaWNhdGlvbkNsaWVudC5tbQppbmRleCA4NGE5ZDZhY2YwNGZhNzlhZGI0
YzExZTM1MzMwMDI3OTEyMmUyZTlhLi43YTg3MWNiNzJlMzE4NDIxZWM2MDRmM2M4Zjc4NjE5N2Uy
ZGU0MmJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJO
b3RpZmljYXRpb25DbGllbnQubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBv
cnQvV2ViTm90aWZpY2F0aW9uQ2xpZW50Lm1tCkBAIC05MCw3ICs5MCw3IEBAIGJvb2wgV2ViTm90
aWZpY2F0aW9uQ2xpZW50OjpzaG93KE5vdGlmaWNhdGlvbiogbm90aWZpY2F0aW9uKQogICAgIG1f
bm90aWZpY2F0aW9uTWFwLnNldChub3RpZmljYXRpb24sIHdlYk5vdGlmaWNhdGlvbik7CiAKICAg
ICBOb3RpZmljYXRpb25Db250ZXh0TWFwOjppdGVyYXRvciBpdCA9IG1fbm90aWZpY2F0aW9uQ29u
dGV4dE1hcC5hZGQobm90aWZpY2F0aW9uLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIFZlY3Rv
cjxSZXRhaW5QdHI8V2ViTm90aWZpY2F0aW9uPiA+KCkpLml0ZXJhdG9yOwotICAgIGl0LT5zZWNv
bmQuYXBwZW5kKHdlYk5vdGlmaWNhdGlvbik7CisgICAgaXQtPnZhbHVlLmFwcGVuZCh3ZWJOb3Rp
ZmljYXRpb24pOwogCiAgICAgW1ttX3dlYlZpZXcgX25vdGlmaWNhdGlvblByb3ZpZGVyXSBzaG93
Tm90aWZpY2F0aW9uOndlYk5vdGlmaWNhdGlvbi5nZXQoKSBmcm9tV2ViVmlldzptX3dlYlZpZXdd
OwogICAgIHJldHVybiB0cnVlOwpAQCAtMTIwLDcgKzEyMCw3IEBAIHZvaWQgV2ViTm90aWZpY2F0
aW9uQ2xpZW50OjpjbGVhck5vdGlmaWNhdGlvbnMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCkKICAgICBpZiAoaXQgPT0gbV9ub3RpZmljYXRpb25Db250ZXh0TWFwLmVuZCgpKQogICAg
ICAgICByZXR1cm47CiAgICAgCi0gICAgVmVjdG9yPFJldGFpblB0cjxXZWJOb3RpZmljYXRpb24+
ID4mIHdlYk5vdGlmaWNhdGlvbnMgPSBpdC0+c2Vjb25kOworICAgIFZlY3RvcjxSZXRhaW5QdHI8
V2ViTm90aWZpY2F0aW9uPiA+JiB3ZWJOb3RpZmljYXRpb25zID0gaXQtPnZhbHVlOwogICAgIE5T
TXV0YWJsZUFycmF5ICpuc0lEcyA9IFtOU011dGFibGVBcnJheSBhcnJheV07CiAgICAgc2l6ZV90
IGNvdW50ID0gd2ViTm90aWZpY2F0aW9ucy5zaXplKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBjb3VudDsgKytpKSB7CkBAIC0xNDYsMTAgKzE0NiwxMCBAQCB2b2lkIFdlYk5vdGlmaWNh
dGlvbkNsaWVudDo6bm90aWZpY2F0aW9uT2JqZWN0RGVzdHJveWVkKE5vdGlmaWNhdGlvbiogbm90
aWZpY2F0aQogCiAgICAgTm90aWZpY2F0aW9uQ29udGV4dE1hcDo6aXRlcmF0b3IgaXQgPSBtX25v
dGlmaWNhdGlvbkNvbnRleHRNYXAuZmluZChub3RpZmljYXRpb24tPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSk7CiAgICAgQVNTRVJUKGl0ICE9IG1fbm90aWZpY2F0aW9uQ29udGV4dE1hcC5lbmQo
KSk7Ci0gICAgc2l6ZV90IGluZGV4ID0gaXQtPnNlY29uZC5maW5kKHdlYk5vdGlmaWNhdGlvbik7
CisgICAgc2l6ZV90IGluZGV4ID0gaXQtPnZhbHVlLmZpbmQod2ViTm90aWZpY2F0aW9uKTsKICAg
ICBBU1NFUlQoaW5kZXggIT0gbm90Rm91bmQpOwotICAgIGl0LT5zZWNvbmQucmVtb3ZlKGluZGV4
KTsKLSAgICBpZiAoaXQtPnNlY29uZC5pc0VtcHR5KCkpCisgICAgaXQtPnZhbHVlLnJlbW92ZShp
bmRleCk7CisgICAgaWYgKGl0LT52YWx1ZS5pc0VtcHR5KCkpCiAgICAgICAgIG1fbm90aWZpY2F0
aW9uQ29udGV4dE1hcC5yZW1vdmUoaXQpOwogCiAgICAgW1ttX3dlYlZpZXcgX25vdGlmaWNhdGlv
blByb3ZpZGVyXSBub3RpZmljYXRpb25EZXN0cm95ZWQ6d2ViTm90aWZpY2F0aW9uLmdldCgpXTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0gYi9T
b3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCmluZGV4IGJmZWRlOGRiNmY5
ZWZiNjVmZDExNTQxODk4YThjZDEwODRlMmI2M2YuLjM0MGRkYzZkMzI5MGYzMDdlMTRlZWI1YzBk
MmFhMWYyNDAzMmJmMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2Vi
SFRNTFZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5t
bQpAQCAtMjM3OCw3ICsyMzc4LDcgQEAgc3RhdGljIFN0cmluZyBjb21tYW5kTmFtZUZvclNlbGVj
dG9yKFNFTCBzZWxlY3RvcikKICAgICBzdGF0aWMgY29uc3QgU2VsZWN0b3JOYW1lTWFwKiBleGNl
cHRpb25NYXAgPSBjcmVhdGVTZWxlY3RvckV4Y2VwdGlvbk1hcCgpOwogICAgIFNlbGVjdG9yTmFt
ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBleGNlcHRpb25NYXAtPmZpbmQoc2VsZWN0b3IpOwog
ICAgIGlmIChpdCAhPSBleGNlcHRpb25NYXAtPmVuZCgpKQotICAgICAgICByZXR1cm4gaXQtPnNl
Y29uZDsKKyAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKIAogICAgIC8vIFJlbW92ZSB0aGUgdHJh
aWxpbmcgY29sb24uCiAgICAgLy8gTm8gbmVlZCB0byBjYXBpdGFsaXplIHRoZSBjb21tYW5kIG5h
bWUgc2luY2UgRWRpdG9yIGNvbW1hbmQgbmFtZXMgYXJlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L3F0L0FwaS9xd2VicGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5j
cHAKaW5kZXggYTMyN2VhZjJlMWRhNDBjMDYwMWI4NjI1NjM0ZjM0NjBmN2U1ZTExOC4uZjEwOGMw
YTdhY2M1YzhhM2ZlYmMyZTE2YWJlZjNjMzlkODA2N2EyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJw
YWdlLmNwcApAQCAtMjI1Miw3ICsyMjUyLDcgQEAgc3RhdGljIHZvaWQgZXh0cmFjdENvbnRlbnRU
eXBlRnJvbVBsdWdpblZlY3Rvcihjb25zdCBWZWN0b3I8UGx1Z2luUGFja2FnZSo+JiBwbHUKICAg
ICAgICAgTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBtYXBfaXQgPSBwbHVn
aW5zW2ldLT5taW1lVG9EZXNjcmlwdGlvbnMoKS5iZWdpbigpOwogICAgICAgICBNSU1FVG9EZXNj
cmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIG1hcF9lbmQgPSBwbHVnaW5zW2ldLT5taW1lVG9E
ZXNjcmlwdGlvbnMoKS5lbmQoKTsKICAgICAgICAgZm9yICg7IG1hcF9pdCAhPSBtYXBfZW5kOyAr
K21hcF9pdCkKLSAgICAgICAgICAgICpsaXN0IDw8IG1hcF9pdC0+Zmlyc3Q7CisgICAgICAgICAg
ICAqbGlzdCA8PCBtYXBfaXQtPmtleTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvcXQvQXBpL3F3ZWJwbHVnaW5kYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L0Fw
aS9xd2VicGx1Z2luZGF0YWJhc2UuY3BwCmluZGV4IGE3YTNiNWYyYzFlODlmNDc0MzdjMDhhOTdm
Y2IyOTY3ODZiZjhlNTguLmM1MzI4YzhmNjc1ZjJjNjZmN2I5YjQyMGQ2NTEzN2ZkOWY4NmI4OTYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwbHVnaW5kYXRhYmFzZS5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBsdWdpbmRhdGFiYXNlLmNwcApAQCAtMTIy
LDggKzEyMiw4IEBAIFFMaXN0PFFXZWJQbHVnaW5JbmZvOjpNaW1lVHlwZT4gUVdlYlBsdWdpbklu
Zm86Om1pbWVUeXBlcygpIGNvbnN0CiAKICAgICAgICAgZm9yIChNSU1FVG9EZXNjcmlwdGlvbnNN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWltZVRvRGVzY3JpcHRpb25zLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgewogICAgICAgICAgICAgTWltZVR5cGUgbWltZVR5cGU7Ci0gICAgICAgICAg
ICBtaW1lVHlwZS5uYW1lID0gaXQtPmZpcnN0OwotICAgICAgICAgICAgbWltZVR5cGUuZGVzY3Jp
cHRpb24gPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgbWltZVR5cGUubmFtZSA9IGl0LT5rZXk7
CisgICAgICAgICAgICBtaW1lVHlwZS5kZXNjcmlwdGlvbiA9IGl0LT52YWx1ZTsKIAogICAgICAg
ICAgICAgUVN0cmluZ0xpc3QgZmlsZUV4dGVuc2lvbnM7CiAgICAgICAgICAgICBWZWN0b3I8U3Ry
aW5nPiBleHRlbnNpb25zID0gbV9wYWNrYWdlLT5taW1lVG9FeHRlbnNpb25zKCkuZ2V0KG1pbWVU
eXBlLm5hbWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Q
bGF0Zm9ybVN0cmF0ZWdpZXNRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0
L1BsYXRmb3JtU3RyYXRlZ2llc1F0LmNwcAppbmRleCBjZDRhYjBkNzJkODY4MTI1ZGM4NmVlOTg3
YmNjZTZlZjNhYjFhZDg5Li43ZDRiMGI3NWY5ZDJjNGU3Njc5ZGIzZDA3YjU2MTdhNDIxNDA0YzU2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3Ry
YXRlZ2llc1F0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BsYXRm
b3JtU3RyYXRlZ2llc1F0LmNwcApAQCAtMTMzLDggKzEzMyw4IEBAIHZvaWQgUGxhdGZvcm1TdHJh
dGVnaWVzUXQ6OmdldFBsdWdpbkluZm8oY29uc3QgV2ViQ29yZTo6UGFnZSogcGFnZSwgVmVjdG9y
PFdlYkNvCiAgICAgICAgIGZvciAoTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAg
ICAgICAgICAgIE1pbWVDbGFzc0luZm8gbWltZTsKIAotICAgICAgICAgICAgbWltZS50eXBlID0g
aXQtPmZpcnN0OwotICAgICAgICAgICAgbWltZS5kZXNjID0gaXQtPnNlY29uZDsKKyAgICAgICAg
ICAgIG1pbWUudHlwZSA9IGl0LT5rZXk7CisgICAgICAgICAgICBtaW1lLmRlc2MgPSBpdC0+dmFs
dWU7CiAgICAgICAgICAgICBtaW1lLmV4dGVuc2lvbnMgPSBwYWNrYWdlLT5taW1lVG9FeHRlbnNp
b25zKCkuZ2V0KG1pbWUudHlwZSk7CiAKICAgICAgICAgICAgIGluZm8ubWltZXMuYXBwZW5kKG1p
bWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vQ09NUHJvcGVydHlCYWcuaCBiL1Nv
dXJjZS9XZWJLaXQvd2luL0NPTVByb3BlcnR5QmFnLmgKaW5kZXggYzc2ODYzZjE1MDEyZjJlYWRl
MGRjZTE1ZmRkYjczOWJmYmMyNzljMy4uOGU4NGU0NzQwYWEzYTk4NjM1OTRiZWRjZWNlOGUzNzEy
YWQ0YTJmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vQ09NUHJvcGVydHlCYWcuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9DT01Qcm9wZXJ0eUJhZy5oCkBAIC0xNDcsOSArMTQ3LDkg
QEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBDT01Qcm9wZXJ0eUJhZzxWYWx1ZVR5cGUsIEtl
eVR5cGUsIEhhc2hUeXBlPjo6UmVhZChMUEMKIAogICAgIFZBUlRZUEUgcmVxdWVzdGVkVHlwZSA9
IFZfVlQocFZhcik7CiAgICAgVl9WVChwVmFyKSA9IFZUX0VNUFRZOwotICAgIENPTVZhcmlhbnRT
ZXR0ZXI8VmFsdWVUeXBlPjo6c2V0VmFyaWFudChwVmFyLCBpdC0+c2Vjb25kKTsKKyAgICBDT01W
YXJpYW50U2V0dGVyPFZhbHVlVHlwZT46OnNldFZhcmlhbnQocFZhciwgaXQtPnZhbHVlKTsKIAot
ICAgIGlmIChyZXF1ZXN0ZWRUeXBlICE9IENPTVZhcmlhbnRTZXR0ZXI8VmFsdWVUeXBlPjo6dmFy
aWFudFR5cGUoaXQtPnNlY29uZCkgJiYgcmVxdWVzdGVkVHlwZSAhPSBWVF9FTVBUWSkKKyAgICBp
ZiAocmVxdWVzdGVkVHlwZSAhPSBDT01WYXJpYW50U2V0dGVyPFZhbHVlVHlwZT46OnZhcmlhbnRU
eXBlKGl0LT52YWx1ZSkgJiYgcmVxdWVzdGVkVHlwZSAhPSBWVF9FTVBUWSkKICAgICAgICAgcmV0
dXJuIDo6VmFyaWFudENoYW5nZVR5cGUocFZhciwgcFZhciwgVkFSSUFOVF9OT1VTRVJPVkVSUklE
RSB8IFZBUklBTlRfQUxQSEFCT09MLCByZXF1ZXN0ZWRUeXBlKTsKIAogICAgIHJldHVybiBTX09L
OwpAQCAtMjE3LDEyICsyMTcsMTIgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBDT01Qcm9w
ZXJ0eUJhZzxWYWx1ZVR5cGUsIEtleVR5cGUsIEhhc2hUeXBlPjo6R2V0UHJvcGUKICAgICAgICAg
Ly9wUHJvcEJhZ1tqXS5jbHNpZDsgICAgLy8gKENMU0lEKSBDTFNJRCBvZiB0aGUgb2JqZWN0LiBU
aGlzIG1lbWJlciBpcyB2YWxpZCBvbmx5IGlmIGR3VHlwZSBpcyBQUk9QQkFHMl9UWVBFX09CSkVD
VC4KIAogICAgICAgICBwUHJvcEJhZ1tqXS5kd1R5cGUgPSBQUk9QQkFHMl9UWVBFX0RBVEE7Ci0g
ICAgICAgIHBQcm9wQmFnW2pdLnZ0ID0gQ09NVmFyaWFudFNldHRlcjxWYWx1ZVR5cGU+Ojp2YXJp
YW50VHlwZShjdXJyZW50LT5zZWNvbmQpOworICAgICAgICBwUHJvcEJhZ1tqXS52dCA9IENPTVZh
cmlhbnRTZXR0ZXI8VmFsdWVUeXBlPjo6dmFyaWFudFR5cGUoY3VycmVudC0+dmFsdWUpOwogICAg
ICAgICBwUHJvcEJhZ1tqXS5kd0hpbnQgPSBpUHJvcGVydHkgKyBqOwotICAgICAgICBwUHJvcEJh
Z1tqXS5wc3RyTmFtZSA9IChMUE9MRVNUUilDb1Rhc2tNZW1BbGxvYyhzaXplb2Yod2NoYXJfdCkq
KGN1cnJlbnQtPmZpcnN0Lmxlbmd0aCgpKzEpKTsKKyAgICAgICAgcFByb3BCYWdbal0ucHN0ck5h
bWUgPSAoTFBPTEVTVFIpQ29UYXNrTWVtQWxsb2Moc2l6ZW9mKHdjaGFyX3QpKihjdXJyZW50LT5r
ZXkubGVuZ3RoKCkrMSkpOwogICAgICAgICBpZiAoIXBQcm9wQmFnW2pdLnBzdHJOYW1lKQogICAg
ICAgICAgICAgcmV0dXJuIEVfT1VUT0ZNRU1PUlk7Ci0gICAgICAgIHdjc2NweV9zKHBQcm9wQmFn
W2pdLnBzdHJOYW1lLCBjdXJyZW50LT5maXJzdC5sZW5ndGgoKSsxLCBzdGF0aWNfY2FzdDxTdHJp
bmc+KGN1cnJlbnQtPmZpcnN0KS5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpKTsKKyAg
ICAgICAgd2NzY3B5X3MocFByb3BCYWdbal0ucHN0ck5hbWUsIGN1cnJlbnQtPmtleS5sZW5ndGgo
KSsxLCBzdGF0aWNfY2FzdDxTdHJpbmc+KGN1cnJlbnQtPmtleSkuY2hhcmFjdGVyc1dpdGhOdWxs
VGVybWluYXRpb24oKSk7CiAgICAgICAgICsrKnBjUHJvcGVydGllczsKICAgICB9CiAgICAgcmV0
dXJuIFNfT0s7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3RhdGlzdGlj
cy5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3RhdGlzdGljcy5jcHAKaW5kZXggYzFj
YTlmMjE0ZjI0OWMwYTQ5ZjFmY2IxMjJmMDZhZDM0OTNiNGIxOS4uMmYyMmIwM2M2MjI1MDAyYWUy
MTljYTBmNDViYTQ3ZDI5ODBjMzdhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vV2Vi
Q29yZVN0YXRpc3RpY3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdGF0aXN0
aWNzLmNwcApAQCAtMTQ1LDcgKzE0NSw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2Vi
Q29yZVN0YXRpc3RpY3M6OmphdmFTY3JpcHRQcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzCiAgICAg
SXRlcmF0b3IgZW5kID0ganNPYmplY3RUeXBlTmFtZXMtPmVuZCgpOwogICAgIEhhc2hNYXA8U3Ry
aW5nLCBpbnQ+IHR5cGVDb3VudE1hcDsKICAgICBmb3IgKEl0ZXJhdG9yIGN1cnJlbnQgPSBqc09i
amVjdFR5cGVOYW1lcy0+YmVnaW4oKTsgY3VycmVudCAhPSBlbmQ7ICsrY3VycmVudCkKLSAgICAg
ICAgdHlwZUNvdW50TWFwLnNldChjdXJyZW50LT5maXJzdCwgY3VycmVudC0+c2Vjb25kKTsKKyAg
ICAgICAgdHlwZUNvdW50TWFwLnNldChjdXJyZW50LT5rZXksIGN1cnJlbnQtPnZhbHVlKTsKIAog
ICAgIENPTVB0cjxJUHJvcGVydHlCYWcyPiByZXN1bHRzKEFkb3B0Q09NLCBDT01Qcm9wZXJ0eUJh
ZzxpbnQ+OjpjcmVhdGVJbnN0YW5jZSh0eXBlQ291bnRNYXApKTsKICAgICByZXN1bHRzLmNvcHlS
ZWZUbyh0eXBlTmFtZXNBbmRDb3VudHMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4v
V2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcCBiL1NvdXJjZS9XZWJLaXQv
d2luL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAKaW5kZXggMjMwZjMz
MjNmNTQyOTFkMDFlMTQxOTgxNzhmYTIxNmE0OGMwY2Y1Yi4uZjEzMGY3NmJkMmE2NzY5N2FkZTdh
MzY3ODg0NTI0M2E5ZjZhNzFhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vV2ViQ29y
ZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3dp
bi9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCkBAIC05Myw4ICs5Myw4
IEBAIHZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpnZXRQbHVnaW5JbmZvKGNvbnN0IFdlYkNv
cmU6OlBhZ2UqLCBWZWN0b3I8V2ViQ29yZTo6CiAgICAgICAgIGZvciAoTUlNRVRvRGVzY3JpcHRp
b25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIE1pbWVDbGFzc0luZm8gbWltZTsKIAotICAg
ICAgICAgICAgbWltZS50eXBlID0gaXQtPmZpcnN0OwotICAgICAgICAgICAgbWltZS5kZXNjID0g
aXQtPnNlY29uZDsKKyAgICAgICAgICAgIG1pbWUudHlwZSA9IGl0LT5rZXk7CisgICAgICAgICAg
ICBtaW1lLmRlc2MgPSBpdC0+dmFsdWU7CiAgICAgICAgICAgICBtaW1lLmV4dGVuc2lvbnMgPSBw
YWNrYWdlLT5taW1lVG9FeHRlbnNpb25zKCkuZ2V0KG1pbWUudHlwZSk7CiAKICAgICAgICAgICAg
IGluZm8ubWltZXMuYXBwZW5kKG1pbWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4v
V2ViSGlzdG9yeS5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJIaXN0b3J5LmNwcAppbmRleCA5
MWY4ODJmYjgyZWVjODZiMTFlOWI0ZWQwN2RiMjgyNDZjZDQzMDBhLi4xZjdhNTcyYzM0NDVkN2Ni
YzU3NjNhZjlkOTFiOWVkZDc4OTUxMDlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9X
ZWJIaXN0b3J5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJIaXN0b3J5LmNwcApAQCAt
ODMzLDcgKzgzMyw3IEBAIEhSRVNVTFQgV2ViSGlzdG9yeTo6cmVtb3ZlSXRlbUZyb21EYXRlQ2Fj
aGVzKElXZWJIaXN0b3J5SXRlbSogZW50cnkpCiAKICAgICBEYXRlVG9FbnRyaWVzTWFwOjppdGVy
YXRvciBmb3VuZCA9IG1fZW50cmllc0J5RGF0ZS5maW5kKGRhdGVLZXkpOwogICAgIEFTU0VSVChm
b3VuZCAhPSBtX2VudHJpZXNCeURhdGUuZW5kKCkpOwotICAgIENGTXV0YWJsZUFycmF5UmVmIGVu
dHJpZXNGb3JEYXRlID0gZm91bmQtPnNlY29uZC5nZXQoKTsKKyAgICBDRk11dGFibGVBcnJheVJl
ZiBlbnRyaWVzRm9yRGF0ZSA9IGZvdW5kLT52YWx1ZS5nZXQoKTsKIAogICAgIENGSW5kZXggY291
bnQgPSBDRkFycmF5R2V0Q291bnQoZW50cmllc0ZvckRhdGUpOwogICAgIGZvciAoaW50IGkgPSBj
b3VudCAtIDE7IGkgPj0gMDsgLS1pKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9X
ZWJLaXRDT01BUEkuY3BwIGIvU291cmNlL1dlYktpdC93aW4vV2ViS2l0Q09NQVBJLmNwcAppbmRl
eCA5YzljYzAyNmI0N2I0ZmVhOTYwYzYzOTg0NmUwZWJhNTFjNDY1M2MyLi40ZDhmZjA5NWJkYTk2
MDdkMjlhMTQ1Yjg1N2M3OGRkZmY4ZTM1ZTdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dp
bi9XZWJLaXRDT01BUEkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL1dlYktpdENPTUFQSS5j
cHAKQEAgLTUyLDcgKzUyLDcgQEAgc3RhdGljIENPTVB0cjxJQ2xhc3NGYWN0b3J5PiBjbGFzc0Zh
Y3RvcnkoY29uc3QgQ0xTSUQmIGNsc2lkKQogICAgIHN0YXRpYyBGYWN0b3J5TWFwJiBmYWN0b3Jp
ZXMgPSAqbmV3IEZhY3RvcnlNYXA7CiAKICAgICBGYWN0b3J5TWFwOjpBZGRSZXN1bHQgcmVzdWx0
ID0gZmFjdG9yaWVzLmFkZChjbHNpZCwgMCk7Ci0gICAgQ09NUHRyPElDbGFzc0ZhY3Rvcnk+JiBm
YWN0b3J5ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgQ09NUHRyPElDbGFzc0ZhY3Rv
cnk+JiBmYWN0b3J5ID0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAocmVzdWx0Lmlz
TmV3RW50cnkgJiYgRkFJTEVEKERsbEdldENsYXNzT2JqZWN0KGNsc2lkLCBfX3V1aWRvZihmYWN0
b3J5KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZmYWN0b3J5KSkpKQogICAgICAgICBmYWN0
b3J5ID0gMDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vV2ViS2l0U3RhdGlzdGlj
cy5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJLaXRTdGF0aXN0aWNzLmNwcAppbmRleCA5Y2Q5
NWM3YWM5MzU5NTMwMDdlMTU3ZGNhNzRlODA3YzQ1YWVlMDZlLi5jN2I4ZWQxYWM3N2NlNmUxOTI2
YWE1ZGIyMjQyNGYyZWVlMWEzNTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJL
aXRTdGF0aXN0aWNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJLaXRTdGF0aXN0aWNz
LmNwcApAQCAtMTQ0LDkgKzE0NCw5IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViS2l0
U3RhdGlzdGljczo6Y29tQ2xhc3NOYW1lQ291bnRzKAogICAgIEl0ZXJhdG9yIGVuZCA9IGdDbGFz
c05hbWVDb3VudC5lbmQoKTsKICAgICBWZWN0b3I8VUNoYXI+IHZlY3RvcjsKICAgICBmb3IgKEl0
ZXJhdG9yIGN1cnJlbnQgPSBnQ2xhc3NOYW1lQ291bnQuYmVnaW4oKTsgY3VycmVudCAhPSBlbmQ7
ICsrY3VycmVudCkgewotICAgICAgICBhcHBlbmQodmVjdG9yLCBTdHJpbmc6OmZvcm1hdCgiJTR1
IiwgY3VycmVudC0+c2Vjb25kKSk7CisgICAgICAgIGFwcGVuZCh2ZWN0b3IsIFN0cmluZzo6Zm9y
bWF0KCIlNHUiLCBjdXJyZW50LT52YWx1ZSkpOwogICAgICAgICB2ZWN0b3IuYXBwZW5kKCdcdCcp
OwotICAgICAgICBhcHBlbmQodmVjdG9yLCBzdGF0aWNfY2FzdDxTdHJpbmc+KGN1cnJlbnQtPmZp
cnN0KSk7CisgICAgICAgIGFwcGVuZCh2ZWN0b3IsIHN0YXRpY19jYXN0PFN0cmluZz4oY3VycmVu
dC0+a2V5KSk7CiAgICAgICAgIHZlY3Rvci5hcHBlbmQoJ1xuJyk7CiAgICAgfQogICAgICpvdXRw
dXQgPSBCU3RyaW5nKFN0cmluZzo6YWRvcHQodmVjdG9yKSkucmVsZWFzZSgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC93aW4vV2ViTm90aWZpY2F0aW9uQ2VudGVyLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvd2luL1dlYk5vdGlmaWNhdGlvbkNlbnRlci5jcHAKaW5kZXggZTAyYWJkNTkzN2E0OWEz
MTA3NWQ0ZjAxNWUyOTMzYjQ2ZGFlMTMwOS4uOTRjZWQxYzRiNzYxMzg1M2FjOWVlYWQzMzQ0ODU3
MmMxOGVjZTZmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vV2ViTm90aWZpY2F0aW9u
Q2VudGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJOb3RpZmljYXRpb25DZW50ZXIu
Y3BwCkBAIC0xMjEsNyArMTIxLDcgQEAgdm9pZCBXZWJOb3RpZmljYXRpb25DZW50ZXI6OnBvc3RO
b3RpZmljYXRpb25JbnRlcm5hbChJV2ViTm90aWZpY2F0aW9uKiBub3RpZmljYXQKIAogICAgIC8v
IEludGVudGlvbmFsbHkgbWFrZSBhIGNvcHkgb2YgdGhlIGxpc3QgdG8gYXZvaWQgdGhlIHBvc3Np
YmlsaXR5IG9mIGVycm9ycwogICAgIC8vIGZyb20gYSBtdXRhdGlvbiBvZiB0aGUgbGlzdCBpbiB0
aGUgb25Ob3RpZnkgY2FsbGJhY2suCi0gICAgT2JqZWN0T2JzZXJ2ZXJMaXN0IGxpc3QgPSBpdC0+
c2Vjb25kOworICAgIE9iamVjdE9ic2VydmVyTGlzdCBsaXN0ID0gaXQtPnZhbHVlOwogCiAgICAg
T2JzZXJ2ZXJMaXN0SXRlcmF0b3IgZW5kID0gbGlzdC5lbmQoKTsKICAgICBmb3IgKE9ic2VydmVy
TGlzdEl0ZXJhdG9yIGl0MiA9IGxpc3QuYmVnaW4oKTsgaXQyICE9IGVuZDsgKytpdDIpIHsKQEAg
LTE1MCw3ICsxNTAsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYk5vdGlmaWNhdGlv
bkNlbnRlcjo6YWRkT2JzZXJ2ZXIoCiAgICAgU3RyaW5nIG5hbWUobm90aWZpY2F0aW9uTmFtZSwg
U3lzU3RyaW5nTGVuKG5vdGlmaWNhdGlvbk5hbWUpKTsKICAgICBNYXBwZWRPYnNlcnZlcnM6Oml0
ZXJhdG9yIGl0ID0gZC0+bV9tYXBwZWRPYnNlcnZlcnMuZmluZChuYW1lKTsKICAgICBpZiAoaXQg
IT0gZC0+bV9tYXBwZWRPYnNlcnZlcnMuZW5kKCkpCi0gICAgICAgIGl0LT5zZWNvbmQuYXBwZW5k
KE9iamVjdE9ic2VydmVyUGFpcihhbk9iamVjdCwgb2JzZXJ2ZXIpKTsKKyAgICAgICAgaXQtPnZh
bHVlLmFwcGVuZChPYmplY3RPYnNlcnZlclBhaXIoYW5PYmplY3QsIG9ic2VydmVyKSk7CiAgICAg
ZWxzZSB7CiAgICAgICAgIE9iamVjdE9ic2VydmVyTGlzdCBsaXN0OwogICAgICAgICBsaXN0LmFw
cGVuZChPYmplY3RPYnNlcnZlclBhaXIoYW5PYmplY3QsIG9ic2VydmVyKSk7CkBAIC0xOTgsNyAr
MTk4LDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJOb3RpZmljYXRpb25DZW50ZXI6
OnJlbW92ZU9ic2VydmVyKAogICAgIGlmIChpdCA9PSBkLT5tX21hcHBlZE9ic2VydmVycy5lbmQo
KSkKICAgICAgICAgcmV0dXJuIEVfRkFJTDsKIAotICAgIE9iamVjdE9ic2VydmVyTGlzdCYgb2Jz
ZXJ2ZXJMaXN0ID0gaXQtPnNlY29uZDsKKyAgICBPYmplY3RPYnNlcnZlckxpc3QmIG9ic2VydmVy
TGlzdCA9IGl0LT52YWx1ZTsKICAgICBPYnNlcnZlckxpc3RJdGVyYXRvciBlbmQgPSBvYnNlcnZl
ckxpc3QuZW5kKCk7CiAKICAgICBpbnQgaSA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L3dpbmNlL1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuY3Bw
CmluZGV4IDNmOGM5MDdjNzM5ZjA4Y2RiOTkxNmU4MzZmOWIwOGRlNjc4NDUxY2YuLmQ1NTc5NzIz
MTE2MTU5MWQ1ZmRiMTcxNTgwNDQ1OGRiNzgyYzkxZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvd2luY2UvV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzV2lu
Q0UuY3BwCkBAIC05NCw4ICs5NCw4IEBAIHZvaWQgUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6Omdl
dFBsdWdpbkluZm8oY29uc3QgUGFnZSosIFZlY3RvcjxQbHVnaW5JbmZvPiYgb3V0CiAgICAgICAg
IGZvciAoTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1pbWVUb0Rl
c2NyaXB0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIE1pbWVD
bGFzc0luZm8gbWltZTsKIAotICAgICAgICAgICAgbWltZS50eXBlID0gaXQtPmZpcnN0OwotICAg
ICAgICAgICAgbWltZS5kZXNjID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIG1pbWUudHlwZSA9
IGl0LT5rZXk7CisgICAgICAgICAgICBtaW1lLmRlc2MgPSBpdC0+dmFsdWU7CiAgICAgICAgICAg
ICBtaW1lLmV4dGVuc2lvbnMgPSBwYWNrYWdlLT5taW1lVG9FeHRlbnNpb25zKCkuZ2V0KG1pbWUu
dHlwZSk7CiAKICAgICAgICAgICAgIGluZm8ubWltZXMuYXBwZW5kKG1pbWUpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVudENvZGVycy5oIGIvU291
cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVudENvZGVycy5oCmluZGV4IGRkNTRk
ZmVlZjkxYTdkZTMxMTkxNWU5M2Q5YWZiZWIxM2ExY2JlNzcuLmFmMTYzYmU2ZDliNjRjMzA5ZDkx
OWFkMWI3MzY1ODhlYjI2MzFjYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3Jt
L0NvcmVJUEMvQXJndW1lbnRDb2RlcnMuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9D
b3JlSVBDL0FyZ3VtZW50Q29kZXJzLmgKQEAgLTc1LDggKzc1LDggQEAgdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVT4gc3RydWN0IEFyZ3VtZW50Q29kZXI8c3RkOjpwYWlyPFQsIFU+ID4g
ewogdGVtcGxhdGU8dHlwZW5hbWUgS2V5VHlwZSwgdHlwZW5hbWUgVmFsdWVUeXBlPiBzdHJ1Y3Qg
QXJndW1lbnRDb2RlcjxXVEY6OktleVZhbHVlUGFpcjxLZXlUeXBlLCBWYWx1ZVR5cGU+ID4gewog
ICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0IFdU
Rjo6S2V5VmFsdWVQYWlyPEtleVR5cGUsIFZhbHVlVHlwZT4mIHBhaXIpCiAgICAgewotICAgICAg
ICBlbmNvZGVyLT5lbmNvZGUocGFpci5maXJzdCk7Ci0gICAgICAgIGVuY29kZXItPmVuY29kZShw
YWlyLnNlY29uZCk7CisgICAgICAgIGVuY29kZXItPmVuY29kZShwYWlyLmtleSk7CisgICAgICAg
IGVuY29kZXItPmVuY29kZShwYWlyLnZhbHVlKTsKICAgICB9CiAKICAgICBzdGF0aWMgYm9vbCBk
ZWNvZGUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBXVEY6OktleVZhbHVlUGFpcjxLZXlUeXBl
LCBWYWx1ZVR5cGU+JiBwYWlyKQpAQCAtODksOCArODksOCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBL
ZXlUeXBlLCB0eXBlbmFtZSBWYWx1ZVR5cGU+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdURjo6S2V5
VmFsdQogICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZSh2YWx1ZSkpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgcGFpci5maXJzdCA9IGtleTsKLSAgICAgICAgcGFpci5z
ZWNvbmQgPSB2YWx1ZTsKKyAgICAgICAgcGFpci5rZXkgPSBrZXk7CisgICAgICAgIHBhaXIudmFs
dWUgPSB2YWx1ZTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uY3BwCmluZGV4IGQyMmI4YjRjMWI4
YzUyOGNlY2I4YjIxYzcwNTQwZjMwNmNiM2VlMzQuLjM0NDllMzUyZTEwY2VjYjA0N2JlMDlmYWI4
OGUwYWY5MDY5MzJhZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJ
UEMvQ29ubmVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9D
b25uZWN0aW9uLmNwcApAQCAtMTAyLDEyICsxMDIsMTIgQEAgUGFzc1JlZlB0cjxDb25uZWN0aW9u
OjpTeW5jTWVzc2FnZVN0YXRlPiBDb25uZWN0aW9uOjpTeW5jTWVzc2FnZVN0YXRlOjpnZXRPckNy
ZWEKICAgICBTeW5jTWVzc2FnZVN0YXRlTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gc3luY01lc3Nh
Z2VTdGF0ZU1hcCgpLmFkZChydW5Mb29wLCAwKTsKIAogICAgIGlmICghcmVzdWx0LmlzTmV3RW50
cnkpIHsKLSAgICAgICAgQVNTRVJUKHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKLSAgICAgICAg
cmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICBBU1NFUlQocmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZSk7CisgICAgICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwog
ICAgIH0KIAogICAgIFJlZlB0cjxTeW5jTWVzc2FnZVN0YXRlPiBzeW5jTWVzc2FnZVN0YXRlID0g
YWRvcHRSZWYobmV3IFN5bmNNZXNzYWdlU3RhdGUocnVuTG9vcCkpOwotICAgIHJlc3VsdC5pdGVy
YXRvci0+c2Vjb25kID0gc3luY01lc3NhZ2VTdGF0ZS5nZXQoKTsKKyAgICByZXN1bHQuaXRlcmF0
b3ItPnZhbHVlID0gc3luY01lc3NhZ2VTdGF0ZS5nZXQoKTsKIAogICAgIHJldHVybiBzeW5jTWVz
c2FnZVN0YXRlLnJlbGVhc2UoKTsKIH0KQEAgLTM2MiwxMCArMzYyLDEwIEBAIFBhc3NPd25QdHI8
QXJndW1lbnREZWNvZGVyPiBDb25uZWN0aW9uOjp3YWl0Rm9yTWVzc2FnZShNZXNzYWdlSUQgbWVz
c2FnZUlELCB1aW50CiAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3dhaXRGb3JNZXNzYWdl
TXV0ZXgpOwogCiAgICAgICAgIEhhc2hNYXA8c3RkOjpwYWlyPHVuc2lnbmVkLCB1aW50NjRfdD4s
IEFyZ3VtZW50RGVjb2Rlcio+OjppdGVyYXRvciBpdCA9IG1fd2FpdEZvck1lc3NhZ2VNYXAuZmlu
ZChtZXNzYWdlQW5kRGVzdGluYXRpb24pOwotICAgICAgICBpZiAoaXQtPnNlY29uZCkgeworICAg
ICAgICBpZiAoaXQtPnZhbHVlKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogbV93YWl0Rm9yTWVz
c2FnZU1hcCBzaG91bGQgcmVhbGx5IGhvbGQgT3duUHRycyB0bwogICAgICAgICAgICAgLy8gQXJn
dW1lbnREZWNvZGVycywgYnV0IEhhc2hNYXAgZG9lc24ndCBjdXJyZW50bHkgc3VwcG9ydCBPd25Q
dHJzLgotICAgICAgICAgICAgT3duUHRyPEFyZ3VtZW50RGVjb2Rlcj4gYXJndW1lbnRzID0gYWRv
cHRQdHIoaXQtPnNlY29uZCk7CisgICAgICAgICAgICBPd25QdHI8QXJndW1lbnREZWNvZGVyPiBh
cmd1bWVudHMgPSBhZG9wdFB0cihpdC0+dmFsdWUpOwogICAgICAgICAgICAgbV93YWl0Rm9yTWVz
c2FnZU1hcC5yZW1vdmUoaXQpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICByZXR1cm4gYXJn
dW1lbnRzLnJlbGVhc2UoKTsKQEAgLTUzOSw4ICs1MzksOCBAQCB2b2lkIENvbm5lY3Rpb246OnBy
b2Nlc3NJbmNvbWluZ01lc3NhZ2UoTWVzc2FnZUlEIG1lc3NhZ2VJRCwgUGFzc093blB0cjxBcmd1
bWVudAogICAgICAgICAKICAgICAgICAgSGFzaE1hcDxzdGQ6OnBhaXI8dW5zaWduZWQsIHVpbnQ2
NF90PiwgQXJndW1lbnREZWNvZGVyKj46Oml0ZXJhdG9yIGl0ID0gbV93YWl0Rm9yTWVzc2FnZU1h
cC5maW5kKHN0ZDo6bWFrZV9wYWlyKG1lc3NhZ2VJRC50b0ludCgpLCBpbmNvbWluZ01lc3NhZ2Uu
ZGVzdGluYXRpb25JRCgpKSk7CiAgICAgICAgIGlmIChpdCAhPSBtX3dhaXRGb3JNZXNzYWdlTWFw
LmVuZCgpKSB7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kID0gaW5jb21pbmdNZXNzYWdlLnJlbGVh
c2VBcmd1bWVudHMoKS5sZWFrUHRyKCk7Ci0gICAgICAgICAgICBBU1NFUlQoaXQtPnNlY29uZCk7
CisgICAgICAgICAgICBpdC0+dmFsdWUgPSBpbmNvbWluZ01lc3NhZ2UucmVsZWFzZUFyZ3VtZW50
cygpLmxlYWtQdHIoKTsKKyAgICAgICAgICAgIEFTU0VSVChpdC0+dmFsdWUpOwogICAgICAgICAK
ICAgICAgICAgICAgIG1fd2FpdEZvck1lc3NhZ2VDb25kaXRpb24uc2lnbmFsKCk7CiAgICAgICAg
ICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9ndGsvV29y
a1F1ZXVlR3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2d0ay9Xb3JrUXVldWVHdGsu
Y3BwCmluZGV4IDFkZmFiODNjY2ZiMjRjOWYwMGVlNDBkMmRhYTFjOTViMTYzODJhNDMuLjY4ODVk
NDg1YmQxMTZkMzI4ZGVjZDAyYWFmNTRjOTE4NzgyYjJmMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtL2d0ay9Xb3JrUXVldWVHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtL2d0ay9Xb3JrUXVldWVHdGsuY3BwCkBAIC0xNjYsNyArMTY2LDcgQEAgdm9pZCBX
b3JrUXVldWU6OnJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKGludCBmaWxlRGVzY3JpcHRvciwg
aW50IGNvbmRpdGlvbiwgY28KICAgICAgICAgVmVjdG9yPEV2ZW50U291cmNlKj4gc291cmNlczsK
ICAgICAgICAgRXZlbnRTb3VyY2VJdGVyYXRvciBpdCA9IG1fZXZlbnRTb3VyY2VzLmZpbmQoZmls
ZURlc2NyaXB0b3IpOwogICAgICAgICBpZiAoaXQgIT0gbV9ldmVudFNvdXJjZXMuZW5kKCkpIAot
ICAgICAgICAgICAgc291cmNlcyA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICBzb3VyY2VzID0g
aXQtPnZhbHVlOwogCiAgICAgICAgIHNvdXJjZXMuYXBwZW5kKGV2ZW50U291cmNlKTsKICAgICAg
ICAgbV9ldmVudFNvdXJjZXMuc2V0KGZpbGVEZXNjcmlwdG9yLCBzb3VyY2VzKTsKQEAgLTE4Niw3
ICsxODYsNyBAQCB2b2lkIFdvcmtRdWV1ZTo6dW5yZWdpc3RlckV2ZW50U291cmNlSGFuZGxlcihp
bnQgZmlsZURlc2NyaXB0b3IpCiAgICAgQVNTRVJUKG1fZXZlbnRTb3VyY2VzLmNvbnRhaW5zKGZp
bGVEZXNjcmlwdG9yKSk7CiAKICAgICBpZiAoaXQgIT0gbV9ldmVudFNvdXJjZXMuZW5kKCkpIHsK
LSAgICAgICAgVmVjdG9yPEV2ZW50U291cmNlKj4gc291cmNlcyA9IGl0LT5zZWNvbmQ7CisgICAg
ICAgIFZlY3RvcjxFdmVudFNvdXJjZSo+IHNvdXJjZXMgPSBpdC0+dmFsdWU7CiAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBzb3VyY2VzLnNpemUoKTsgaSsrKQogICAgICAgICAgICAg
c291cmNlc1tpXS0+Y2FuY2VsKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRm
b3JtL21hYy9Xb3JrUXVldWVNYWMuY3BwIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vbWFjL1dv
cmtRdWV1ZU1hYy5jcHAKaW5kZXggYWU0NzNlZTVjYzg0ZTU4NDI5YjA0MzljY2Q5MjFhYzJjNDky
ZmZhYS4uNmU1NGNlZTBiNzA5ODQwYTU0Zjc2Y2RhYTQyNGZlZWI0NjI5MDliMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vbWFjL1dvcmtRdWV1ZU1hYy5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvUGxhdGZvcm0vbWFjL1dvcmtRdWV1ZU1hYy5jcHAKQEAgLTE1Myw3ICsxNTMs
NyBAQCB2b2lkIFdvcmtRdWV1ZTo6dW5yZWdpc3Rlck1hY2hQb3J0RXZlbnRIYW5kbGVyKG1hY2hf
cG9ydF90IG1hY2hQb3J0KQogICAgIAogICAgIEFTU0VSVChtX2V2ZW50U291cmNlcy5jb250YWlu
cyhtYWNoUG9ydCkpOwogCi0gICAgRXZlbnRTb3VyY2UqIGV2ZW50U291cmNlID0gaXQtPnNlY29u
ZDsKKyAgICBFdmVudFNvdXJjZSogZXZlbnRTb3VyY2UgPSBpdC0+dmFsdWU7CiAgICAgLy8gQ2Fu
Y2VsIGFuZCByZWxlYXNlIHRoZSBzb3VyY2UuIEl0IHdpbGwgYmUgZGVsZXRlZCBpbiBpdHMgZmlu
YWxpemUgaGFuZGxlci4KICAgICBkaXNwYXRjaF9zb3VyY2VfY2FuY2VsKGV2ZW50U291cmNlLT5k
aXNwYXRjaFNvdXJjZSgpKTsKICAgICBkaXNwYXRjaF9yZWxlYXNlKGV2ZW50U291cmNlLT5kaXNw
YXRjaFNvdXJjZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9QbHVnaW5z
L05QUmVtb3RlT2JqZWN0TWFwLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9QbHVnaW5zL05Q
UmVtb3RlT2JqZWN0TWFwLmNwcAppbmRleCA3NjQxYWY1ZThjODkyZDFkMzdlZTk2ZGE5YjdlNjA1
ODk5NzNlODhhLi5iNWVjMmQ5ZGEzOWYyNmRjYjQzMjBkOTVlMDNmMmZjYWU0ZTdkN2RmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvUGx1Z2lucy9OUFJlbW90ZU9iamVjdE1hcC5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1BsdWdpbnMvTlBSZW1vdGVPYmplY3RNYXAu
Y3BwCkBAIC0yMDAsNyArMjAwLDcgQEAgdm9pZCBOUFJlbW90ZU9iamVjdE1hcDo6cGx1Z2luRGVz
dHJveWVkKFBsdWdpbiogcGx1Z2luKQogCiAgICAgLy8gR2F0aGVyIHRoZSByZWNlaXZlcnMgYXNz
b2NpYXRlZCB3aXRoIHRoaXMgcGx1Zy1pbi4KICAgICBmb3IgKEhhc2hNYXA8dWludDY0X3QsIE5Q
T2JqZWN0TWVzc2FnZVJlY2VpdmVyKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9yZWdpc3RlcmVk
TlBPYmplY3RzLmJlZ2luKCksIGVuZCA9IG1fcmVnaXN0ZXJlZE5QT2JqZWN0cy5lbmQoKTsgaXQg
IT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIE5QT2JqZWN0TWVzc2FnZVJlY2VpdmVyKiBucE9iamVj
dE1lc3NhZ2VSZWNlaXZlciA9IGl0LT5zZWNvbmQ7CisgICAgICAgIE5QT2JqZWN0TWVzc2FnZVJl
Y2VpdmVyKiBucE9iamVjdE1lc3NhZ2VSZWNlaXZlciA9IGl0LT52YWx1ZTsKICAgICAgICAgaWYg
KG5wT2JqZWN0TWVzc2FnZVJlY2VpdmVyLT5wbHVnaW4oKSA9PSBwbHVnaW4pCiAgICAgICAgICAg
ICBtZXNzYWdlUmVjZWl2ZXJzLmFwcGVuZChucE9iamVjdE1lc3NhZ2VSZWNlaXZlcik7CiAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1VzZXJNZXNzYWdlQ29kZXJzLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvVXNlck1lc3NhZ2VDb2RlcnMuaAppbmRleCBlZTRhYjY0
ZmZhNWI2M2I5MmMwOTk5NTU0ODVmMjBlMjE1NTVlNmNmLi4yZWM1YmI0ZDUyYjIwNzUxZmRiNTdl
ZDY2MjgwZWE5MDdiZDM5YjUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvVXNl
ck1lc3NhZ2VDb2RlcnMuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvVXNlck1lc3NhZ2VD
b2RlcnMuaApAQCAtOTMsOCArOTMsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBJbW11dGFibGVE
aWN0aW9uYXJ5OjpNYXBUeXBlOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC5iZWdpbigpOwogICAg
ICAgICAgICAgSW1tdXRhYmxlRGljdGlvbmFyeTo6TWFwVHlwZTo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gbWFwLmVuZCgpOwogICAgICAgICAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgewotICAg
ICAgICAgICAgICAgIGVuY29kZXItPmVuY29kZShpdC0+Zmlyc3QpOwotICAgICAgICAgICAgICAg
IGVuY29kZXItPmVuY29kZShPd25lcihpdC0+c2Vjb25kLmdldCgpKSk7CisgICAgICAgICAgICAg
ICAgZW5jb2Rlci0+ZW5jb2RlKGl0LT5rZXkpOworICAgICAgICAgICAgICAgIGVuY29kZXItPmVu
Y29kZShPd25lcihpdC0+dmFsdWUuZ2V0KCkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJl
ZmVyZW5jZXNTdG9yZS5jcHAKaW5kZXggNzQ2ZGYxMGE0MjM1MWUyZmE1ZDI0YTFiNDIyMDRlOTVh
MGY1MjA4Mi4uNGY0OWJiNzg2OWU3Y2YzNzlmZDJkNTdjMzRiZDE1YmNhOWYyZWI1NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByZWZlcmVuY2VzU3RvcmUuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcmVmZXJlbmNlc1N0b3JlLmNwcApAQCAtMTUxLDcg
KzE1MSw3IEBAIHN0YXRpYyB0eXBlbmFtZSBNYXBUeXBlOjpNYXBwZWRUeXBlIHZhbHVlRm9yS2V5
KGNvbnN0IE1hcFR5cGUmIG1hcCwgY29uc3QgdHlwZW5hCiB7CiAgICAgdHlwZW5hbWUgTWFwVHlw
ZTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAuZmluZChrZXkpOwogICAgIGlmIChpdCAhPSBtYXAu
ZW5kKCkpCi0gICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gaXQtPnZh
bHVlOwogCiAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZUZvcktleTx0eXBlbmFtZSBNYXBUeXBlOjpN
YXBwZWRUeXBlPihrZXkpOwogfQpAQCAtMTg3LDcgKzE4Nyw3IEBAIGJvb2wgV2ViUHJlZmVyZW5j
ZXNTdG9yZTo6Z2V0Qm9vbFZhbHVlRm9yS2V5KGNvbnN0IFN0cmluZyYga2V5KSBjb25zdAogICAg
IC8vIEZJWE1FOiBFeHRlbmQgb3ZlcnJpZGluZyB0byBvdGhlciBrZXkgdHlwZXMgdXNlZCBmcm9t
IFRlc3RSdW5uZXIuCiAgICAgQm9vbE92ZXJyaWRlc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBi
b29sVGVzdFJ1bm5lck92ZXJyaWRlc01hcCgpLmZpbmQoa2V5KTsKICAgICBpZiAoaXQgIT0gYm9v
bFRlc3RSdW5uZXJPdmVycmlkZXNNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNv
bmQ7CisgICAgICAgIHJldHVybiBpdC0+dmFsdWU7CiAgICAgcmV0dXJuIHZhbHVlRm9yS2V5KG1f
Ym9vbFZhbHVlcywga2V5KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVk
L21hYy9XZWJDb3JlQXJndW1lbnRDb2RlcnNNYWMubW0gYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
bWFjL1dlYkNvcmVBcmd1bWVudENvZGVyc01hYy5tbQppbmRleCAxOTZhYjExYzdhNzQzMTA3ZDM4
MDBlMWZmOGZhNWJlMWYyYjNiODE4Li4wZjlkM2Q4YTNiZmI3Mzc0M2IzOTMzNTMzNWRjNWY1OGMx
ZDE0NzgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1dlYkNvcmVBcmd1
bWVudENvZGVyc01hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1dlYkNvcmVB
cmd1bWVudENvZGVyc01hYy5tbQpAQCAtMTgzLDcgKzE4Myw3IEBAIGJvb2wgQXJndW1lbnRDb2Rl
cjxSZXNvdXJjZUVycm9yPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgUmVzb3Vy
Y2VFcnJvCiAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
c3RyaW5nVXNlckluZm9NYXAuYmVnaW4oKTsKICAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gc3RyaW5nVXNlckluZm9NYXAuZW5kKCk7CiAgICAgZm9yICg7
IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgW3VzZXJJbmZvIHNldE9iamVjdDpuc1N0cmluZyhp
dC0+c2Vjb25kKSBmb3JLZXk6bnNTdHJpbmcoaXQtPmZpcnN0KV07CisgICAgICAgIFt1c2VySW5m
byBzZXRPYmplY3Q6bnNTdHJpbmcoaXQtPnZhbHVlKSBmb3JLZXk6bnNTdHJpbmcoaXQtPmtleSld
OwogCiAgICAgaWYgKGNlcnRpZmljYXRlLmNlcnRpZmljYXRlQ2hhaW4oKSkKICAgICAgICAgW3Vz
ZXJJbmZvIHNldE9iamVjdDooTlNBcnJheSAqKWNlcnRpZmljYXRlLmNlcnRpZmljYXRlQ2hhaW4o
KSBmb3JLZXk6QCJOU0Vycm9yUGVlckNlcnRpZmljYXRlQ2hhaW5LZXkiXTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9Bcmd1bWVudENvZGVyc1F0LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9xdC9Bcmd1bWVudENvZGVyc1F0LmNwcAppbmRleCBjODliZjQ0ZjE3MTkw
YjAyYzQxMTJiY2JlZDZlMGM0MWZhM2M2NzVmLi5hNDM5Y2FmZjFlNDg4ZTEwMmM1NTBhZDA0ZjM0
NmQ1OTk2ZGQxODkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvQXJndW1l
bnRDb2RlcnNRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL3F0L0FyZ3VtZW50Q29k
ZXJzUXQuY3BwCkBAIC04Niw4ICs4Niw4IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpE
cmFnRGF0YT46OmRlY29kZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIERyYWdEYXRhCiAgICAg
ICAgIE1JTUVEYXRhSGFzaE1hcDo6aXRlcmF0b3IgaXQgPSBtYXAuYmVnaW4oKTsKICAgICAgICAg
TUlNRURhdGFIYXNoTWFwOjppdGVyYXRvciBlbmQgPSBtYXAuZW5kKCk7CiAgICAgICAgIGZvciAo
OyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIFFCeXRlQXJyYXkgYnl0ZXMoKGNoYXIq
KWl0LT5zZWNvbmQuZGF0YSgpLCBpdC0+c2Vjb25kLnNpemUoKSk7Ci0gICAgICAgICAgICBtaW1l
RGF0YS0+c2V0RGF0YShpdC0+Zmlyc3QsIGJ5dGVzKTsKKyAgICAgICAgICAgIFFCeXRlQXJyYXkg
Ynl0ZXMoKGNoYXIqKWl0LT52YWx1ZS5kYXRhKCksIGl0LT52YWx1ZS5zaXplKCkpOworICAgICAg
ICAgICAgbWltZURhdGEtPnNldERhdGEoaXQtPmtleSwgYnl0ZXMpOwogICAgICAgICB9CiAgICAg
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvc291cC9XZWJDb3JlQXJndW1l
bnRDb2RlcnNTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9zb3VwL1dlYkNvcmVBcmd1
bWVudENvZGVyc1NvdXAuY3BwCmluZGV4IGRiZTJjNTFjZGNmYjc5OGFmYWNkMmZkMWRiZmE0OTJi
MWExZWZiMWIuLjMzZDliZDNmZjIwZTYxOTBjYzNjZTRmZjg1OTkzOGIwMzk0ZWQ2YzEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9zb3VwL1dlYkNvcmVBcmd1bWVudENvZGVyc1Nv
dXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9zb3VwL1dlYkNvcmVBcmd1bWVudENv
ZGVyc1NvdXAuY3BwCkBAIC0xNDQsNyArMTQ0LDcgQEAgYm9vbCBBcmd1bWVudENvZGVyPFJlc291
cmNlUmVzcG9uc2U+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBSZXNvdXJjZVIK
ICAgICBpZiAoIWRlY29kZXItPmRlY29kZShoZWFkZXJzKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBoZWFkZXJzLmJl
Z2luKCksIGVuZCA9IGhlYWRlcnMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgcmVz
cG9uc2Uuc2V0SFRUUEhlYWRlckZpZWxkKGl0LT5maXJzdCwgaXQtPnNlY29uZCk7CisgICAgICAg
IHJlc3BvbnNlLnNldEhUVFBIZWFkZXJGaWVsZChpdC0+a2V5LCBpdC0+dmFsdWUpOwogCiAgICAg
dWludDMyX3Qgc291cE1lc3NhZ2VGbGFnczsKICAgICBpZiAoIWRlY29kZXItPmRlY29kZShzb3Vw
TWVzc2FnZUZsYWdzKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3QuY3BwCmluZGV4IGJlODY2ZmEwYTk2N2FlYTZi
NmU0MDUwN2U5MjRjYTc5NTE0NTJmZjYuLjk0ZDAzMDBjMTU3ZWExNDM3MDU0NDE2YWU2NmM4NzFh
ZTM5NTY2MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3
a19iYWNrX2ZvcndhcmRfbGlzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0LmNwcApAQCAtNTQsNyArNTQsNyBAQCBzdHJ1Y3Qg
X0V3a19CYWNrX0ZvcndhcmRfTGlzdCB7CiAgICAgICAgIEl0ZW1zTWFwOjppdGVyYXRvciBpdCA9
IHdyYXBwZXJDYWNoZS5iZWdpbigpOwogICAgICAgICBJdGVtc01hcDo6aXRlcmF0b3IgZW5kID0g
d3JhcHBlckNhY2hlLmVuZCgpOwogICAgICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KQotICAg
ICAgICAgICAgZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fdW5yZWYoaXQtPnNlY29uZCk7Cisg
ICAgICAgICAgICBld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbV91bnJlZihpdC0+dmFsdWUpOwog
ICAgIH0KIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a19jb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19j
b250ZXh0LmNwcAppbmRleCBiMzRmZjc3ZGY2OTExYzI0YWQzNWExMjMwMDA5NzQ5NjI5YWMzOTZk
Li5lZjBlZWQyMDI3ODk1NzBiNTg1ZjJiNmJhZjY0NzYwMzgzYmJiZDdhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCkBAIC0xMTMsNyAr
MTEzLDcgQEAgc3RydWN0IF9Fd2tfQ29udGV4dCB7CiAgICAgICAgIEhhc2hNYXA8dWludDY0X3Qs
IEV3a19Eb3dubG9hZF9Kb2IqPjo6aXRlcmF0b3IgaXQgPSBkb3dubG9hZEpvYnMuYmVnaW4oKTsK
ICAgICAgICAgSGFzaE1hcDx1aW50NjRfdCwgRXdrX0Rvd25sb2FkX0pvYio+OjppdGVyYXRvciBl
bmQgPSBkb3dubG9hZEpvYnMuZW5kKCk7CiAgICAgICAgIGZvciAoIDsgaXQgIT0gZW5kOyArK2l0
KQotICAgICAgICAgICAgZXdrX2Rvd25sb2FkX2pvYl91bnJlZihpdC0+c2Vjb25kKTsKKyAgICAg
ICAgICAgIGV3a19kb3dubG9hZF9qb2JfdW5yZWYoaXQtPnZhbHVlKTsKICAgICB9CiB9OwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAKaW5kZXggMGVh
YjhiNTQwNmU0ZjQxZGZmYTcxOTI2OTJlZmIxNmNmMjYwMzZmNS4uOGJkZjQxMDE0YzAzOWFhMzVh
YTM0Mjk1YmNhMjA1ZWEzNDQ4Mjg3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL2V3a192aWV3LmNwcApAQCAtMzc5LDcgKzM3OSw3IEBAIHN0YXRpYyB2b2lkIF9ld2tf
dmlld19wcml2X2xvYWRpbmdfcmVzb3VyY2VzX2NsZWFyKExvYWRpbmdSZXNvdXJjZXNNYXAmIGxv
YWRpbmdSCiAgICAgTG9hZGluZ1Jlc291cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBsb2FkaW5nUmVz
b3VyY2VzTWFwLmJlZ2luKCk7CiAgICAgTG9hZGluZ1Jlc291cmNlc01hcDo6aXRlcmF0b3IgZW5k
ID0gbG9hZGluZ1Jlc291cmNlc01hcC5lbmQoKTsKICAgICBmb3IgKCA7IGl0ICE9IGVuZDsgKytp
dCkKLSAgICAgICAgZXdrX3dlYl9yZXNvdXJjZV91bnJlZihpdC0+c2Vjb25kKTsKKyAgICAgICAg
ZXdrX3dlYl9yZXNvdXJjZV91bnJlZihpdC0+dmFsdWUpOwogCiAgICAgbG9hZGluZ1Jlc291cmNl
c01hcC5jbGVhcigpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0V2ViVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJWaWV3LmNwcAppbmRleCAxZTZhYTdmYWM4YzBkODJkYzg4NjhmM2YyY2UyNDMw
MzE3ZDZkOTE3Li5hMmJiZTY4NDM4NDZjMDBiNjdmMWM4ZGZjNTkyNzhhMjkxMmY1MTVjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNw
cApAQCAtMjMxMCw3ICsyMzEwLDcgQEAgR0xpc3QqIHdlYmtpdF93ZWJfdmlld19nZXRfc3VicmVz
b3VyY2VzKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiAgICAgV2ViS2l0V2ViVmlld1ByaXZhdGUq
IHByaXYgPSB3ZWJWaWV3LT5wcml2OwogICAgIFJlc291cmNlc01hcDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gcHJpdi0+c3VicmVzb3VyY2VzTWFwLmVuZCgpOwogICAgIGZvciAoUmVzb3VyY2VzTWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IHByaXYtPnN1YnJlc291cmNlc01hcC5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCi0gICAgICAgIHN1YnJlc291cmNlcyA9IGdfbGlzdF9wcmVwZW5kKHN1YnJl
c291cmNlcywgaXQtPnNlY29uZC5nZXQoKSk7CisgICAgICAgIHN1YnJlc291cmNlcyA9IGdfbGlz
dF9wcmVwZW5kKHN1YnJlc291cmNlcywgaXQtPnZhbHVlLmdldCgpKTsKIAogICAgIHJldHVybiBn
X2xpc3RfcmV2ZXJzZShzdWJyZXNvdXJjZXMpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwCmluZGV4IDIzYjAyZjY0
OWZkMWEzY2VhZWEyNDU5MGUwMzJmMTAyZDgxMTdhZjcuLmQ2Nzk0YjU1MTk3YmI3NjEzNDBiZjY3
MWYxYjIwNTE5N2EwNGFlNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAKQEAgLTIzMSw3ICsyMzEsNyBAQCBzdGF0
aWMgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZUNvbnRhaW5lckZvcmFsbChHdGtDb250YWluZXIqIGNv
bnRhaW5lciwgZ2Jvb2xlYW4gaQogICAgIFdlYktpdFdlYlZpZXdDaGlsZHJlbk1hcCBjaGlsZHJl
biA9IHByaXYtPmNoaWxkcmVuOwogICAgIFdlYktpdFdlYlZpZXdDaGlsZHJlbk1hcDo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gY2hpbGRyZW4uZW5kKCk7CiAgICAgZm9yIChXZWJLaXRXZWJWaWV3Q2hp
bGRyZW5NYXA6OmNvbnN0X2l0ZXJhdG9yIGN1cnJlbnQgPSBjaGlsZHJlbi5iZWdpbigpOyBjdXJy
ZW50ICE9IGVuZDsgKytjdXJyZW50KQotICAgICAgICAoKmNhbGxiYWNrKShjdXJyZW50LT5maXJz
dCwgY2FsbGJhY2tEYXRhKTsKKyAgICAgICAgKCpjYWxsYmFjaykoY3VycmVudC0+a2V5LCBjYWxs
YmFja0RhdGEpOwogCiAgICAgaWYgKGluY2x1ZGVJbnRlcm5hbHMgJiYgcHJpdi0+aW5zcGVjdG9y
VmlldykKICAgICAgICAgKCpjYWxsYmFjaykocHJpdi0+aW5zcGVjdG9yVmlldywgY2FsbGJhY2tE
YXRhKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLUHJp
bnRpbmdWaWV3Lm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tQcmludGlu
Z1ZpZXcubW0KaW5kZXggNjNjNTg4OTVmNzEyOTNiMWI1NDU4ZDllYjY4NDFkMGEwNjQ4MTQ5ZC4u
Y2ExY2FkNTgyNTk5ZmQwYzYwYjI1MjRjNmJjNzcyNzY5ZDJmZDM5YSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tQcmludGluZ1ZpZXcubW0KKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tQcmludGluZ1ZpZXcubW0KQEAgLTE5NCw4
ICsxOTQsOCBAQCBzdGF0aWMgQk9PTCBpc0ZvcmNpbmdQcmV2aWV3VXBkYXRlOwogLSAodWludDY0
X3QpX2V4cGVjdGVkUHJldmlld0NhbGxiYWNrRm9yUmVjdDooY29uc3QgSW50UmVjdCYpcmVjdAog
ewogICAgIGZvciAoSGFzaE1hcDx1aW50NjRfdCwgV2ViQ29yZTo6SW50UmVjdD46Oml0ZXJhdG9y
IGl0ZXIgPSBfZXhwZWN0ZWRQcmV2aWV3Q2FsbGJhY2tzLmJlZ2luKCk7IGl0ZXIgIT0gX2V4cGVj
dGVkUHJldmlld0NhbGxiYWNrcy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIGlmIChpdGVyLT5z
ZWNvbmQgID09IHJlY3QpCi0gICAgICAgICAgICByZXR1cm4gaXRlci0+Zmlyc3Q7CisgICAgICAg
IGlmIChpdGVyLT52YWx1ZSAgPT0gcmVjdCkKKyAgICAgICAgICAgIHJldHVybiBpdGVyLT5rZXk7
CiAgICAgfQogICAgIHJldHVybiAwOwogfQpAQCAtMjI5LDggKzIyOSw4IEBAIHN0YXRpYyB2b2lk
IHBhZ2VEaWREcmF3VG9QREYoV0tEYXRhUmVmIGRhdGFSZWYsIFdLRXJyb3JSZWYsIHZvaWQqIHVu
dHlwZWRDb250ZXh0CiAgICAgICAgICAgICBBU1NFUlQoW3ZpZXcgX2lzUHJpbnRpbmdQcmV2aWV3
XSk7CiAKICAgICAgICAgICAgIGlmIChkYXRhKSB7Ci0gICAgICAgICAgICAgICAgSGFzaE1hcDxX
ZWJDb3JlOjpJbnRSZWN0LCBWZWN0b3I8dWludDhfdD4gPjo6QWRkUmVzdWx0IGVudHJ5ID0gdmll
dy0+X3BhZ2VQcmV2aWV3cy5hZGQoaXRlci0+c2Vjb25kLCBWZWN0b3I8dWludDhfdD4oKSk7Ci0g
ICAgICAgICAgICAgICAgZW50cnkuaXRlcmF0b3ItPnNlY29uZC5hcHBlbmQoZGF0YS0+Ynl0ZXMo
KSwgZGF0YS0+c2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBIYXNoTWFwPFdlYkNvcmU6OkludFJl
Y3QsIFZlY3Rvcjx1aW50OF90PiA+OjpBZGRSZXN1bHQgZW50cnkgPSB2aWV3LT5fcGFnZVByZXZp
ZXdzLmFkZChpdGVyLT52YWx1ZSwgVmVjdG9yPHVpbnQ4X3Q+KCkpOworICAgICAgICAgICAgICAg
IGVudHJ5Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQoZGF0YS0+Ynl0ZXMoKSwgZGF0YS0+c2l6ZSgp
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHZpZXctPl9leHBlY3RlZFByZXZpZXdDYWxs
YmFja3MucmVtb3ZlKGNvbnRleHQtPmNhbGxiYWNrSUQpOwogICAgICAgICAgICAgYm9vbCByZWNl
aXZlZFJlc3BvbnNlVG9MYXRlc3RSZXF1ZXN0ID0gdmlldy0+X2xhdGVzdEV4cGVjdGVkUHJldmll
d0NhbGxiYWNrID09IGNvbnRleHQtPmNhbGxiYWNrSUQ7CkBAIC00OTQsNyArNDk0LDcgQEAgc3Rh
dGljIHZvaWQgcHJlcGFyZURhdGFGb3JQcmludGluZ09uU2Vjb25kYXJ5VGhyZWFkKHZvaWQqIHVu
dHlwZWRDb250ZXh0KQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+JiBwZGZEYXRhQnl0ZXMgPSBwYWdlUHJldmlld0l0ZXJhdG9yLT5zZWNvbmQ7Cisg
ICAgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBwZGZEYXRhQnl0ZXMgPSBwYWdlUHJldmlld0l0ZXJh
dG9yLT52YWx1ZTsKICAgICBSZXRhaW5QdHI8TlNEYXRhPiBwZGZEYXRhKEFkb3B0TlMsIFtbTlNE
YXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOnBkZkRhdGFCeXRlcy5kYXRhKCkgbGVuZ3RoOnBkZkRh
dGFCeXRlcy5zaXplKCldKTsKICAgICBSZXRhaW5QdHI8UERGRG9jdW1lbnQ+IHBkZkRvY3VtZW50
KEFkb3B0TlMsIFtbcGRmRG9jdW1lbnRDbGFzcygpIGFsbG9jXSBpbml0V2l0aERhdGE6cGRmRGF0
YS5nZXQoKV0pOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21h
Yy9XS1ZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0K
aW5kZXggOWQ2OTM5OWQ0ZWE3NDAzOGU3MTkxYzNmYmZkMjlmNThhMDRlYjUxZC4uZDRiMzAxMjk4
MzY5M2YyNDJkNzJiMzU3NzM0NTMyZWMxMzhiMmQ0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvbWFjL1dLVmlldy5tbQpAQCAtNDI4LDcgKzQyOCw3IEBAIHN0YXRpYyBTdHJpbmcg
Y29tbWFuZE5hbWVGb3JTZWxlY3RvcihTRUwgc2VsZWN0b3IpCiAgICAgc3RhdGljIGNvbnN0IFNl
bGVjdG9yTmFtZU1hcCogZXhjZXB0aW9uTWFwID0gY3JlYXRlU2VsZWN0b3JFeGNlcHRpb25NYXAo
KTsKICAgICBTZWxlY3Rvck5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZXhjZXB0aW9uTWFw
LT5maW5kKHNlbGVjdG9yKTsKICAgICBpZiAoaXQgIT0gZXhjZXB0aW9uTWFwLT5lbmQoKSkKLSAg
ICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBpdC0+dmFsdWU7CiAgICAg
CiAgICAgLy8gUmVtb3ZlIHRoZSB0cmFpbGluZyBjb2xvbi4KICAgICAvLyBObyBuZWVkIHRvIGNh
cGl0YWxpemUgdGhlIGNvbW1hbmQgbmFtZSBzaW5jZSBFZGl0b3IgY29tbWFuZCBuYW1lcyBhcmUK
QEAgLTc0Miw3ICs3NDIsNyBAQCBzdGF0aWMgdm9pZCB2YWxpZGF0ZUNvbW1hbmRDYWxsYmFjayhX
S1N0cmluZ1JlZiBjb21tYW5kTmFtZSwgYm9vbCBpc0VuYWJsZWQsIGludAogCiAgICAgLy8gQWRk
IHRoaXMgaXRlbSB0byB0aGUgdmVjdG9yIG9mIGl0ZW1zIGZvciBhIGdpdmVuIGNvbW1hbmQgdGhh
dCBhcmUgYXdhaXRpbmcgdmFsaWRhdGlvbi4KICAgICBWYWxpZGF0aW9uTWFwOjpBZGRSZXN1bHQg
YWRkUmVzdWx0ID0gX2RhdGEtPl92YWxpZGF0aW9uTWFwLmFkZChjb21tYW5kTmFtZSwgVmFsaWRh
dGlvblZlY3RvcigpKTsKLSAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZC5hcHBlbmQoaXRl
bSk7CisgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQoaXRlbSk7CiAgICAgaWYg
KGFkZFJlc3VsdC5pc05ld0VudHJ5KSB7CiAgICAgICAgIC8vIElmIHdlIGFyZSBub3QgYWxyZWFk
eSBhd2FpdGluZyB2YWxpZGF0aW9uIGZvciB0aGlzIGNvbW1hbmQsIHN0YXJ0IHRoZSBhc3luY2hy
b25vdXMgdmFsaWRhdGlvbiBwcm9jZXNzLgogICAgICAgICAvLyBGSVhNRTogVGhlb3JldGljYWxs
eSwgdGhlcmUgaXMgYSByYWNlIGhlcmU7IHdoZW4gd2UgZ2V0IHRoZSBhbnN3ZXIgaXQgbWlnaHQg
YmUgb2xkLCBmcm9tIGEgcHJldmlvdXMgdGltZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0
ZWRCYWNraW5nU3RvcmUuY3BwCmluZGV4IDg0ZjZlYmQyZjE2NThlNjk5NjVlNDcxYmEzNjI1YTky
Mjg5ZmFhNzIuLjc3ZmRjMGEyNmY4OGQ0MzA3YTdiNjAwN2RhYmQ1M2YyOTA2ZDU0N2UgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3Jk
aW5hdGVkQmFja2luZ1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29v
cmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5jcHAKQEAgLTgwLDE1ICs4
MCwxNSBAQCB2b2lkIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjp1cGRhdGVUaWxlKGludCBpZCwg
Y29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29ucwogewogICAgIEhhc2hNYXA8aW50LCBDb29y
ZGluYXRlZEJhY2tpbmdTdG9yZVRpbGU+OjppdGVyYXRvciBpdCA9IG1fdGlsZXMuZmluZChpZCk7
CiAgICAgQVNTRVJUKGl0ICE9IG1fdGlsZXMuZW5kKCkpOwotICAgIGl0LT5zZWNvbmQuaW5jcmVt
ZW50UmVwYWludENvdW50KCk7Ci0gICAgaXQtPnNlY29uZC5zZXRCYWNrQnVmZmVyKHRhcmdldFJl
Y3QsIHNvdXJjZVJlY3QsIGJhY2tCdWZmZXIsIG9mZnNldCk7CisgICAgaXQtPnZhbHVlLmluY3Jl
bWVudFJlcGFpbnRDb3VudCgpOworICAgIGl0LT52YWx1ZS5zZXRCYWNrQnVmZmVyKHRhcmdldFJl
Y3QsIHNvdXJjZVJlY3QsIGJhY2tCdWZmZXIsIG9mZnNldCk7CiB9CiAKIFBhc3NSZWZQdHI8Qml0
bWFwVGV4dHVyZT4gQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OnRleHR1cmUoKSBjb25zdAogewog
ICAgIEhhc2hNYXA8aW50LCBDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGU+Ojpjb25zdF9pdGVy
YXRvciBlbmQgPSBtX3RpbGVzLmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDxpbnQsIENvb3JkaW5h
dGVkQmFja2luZ1N0b3JlVGlsZT46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IHRleHR1
cmUgPSBpdC0+c2Vjb25kLnRleHR1cmUoKTsKKyAgICAgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+
IHRleHR1cmUgPSBpdC0+dmFsdWUudGV4dHVyZSgpOwogICAgICAgICBpZiAodGV4dHVyZSkKICAg
ICAgICAgICAgIHJldHVybiB0ZXh0dXJlOwogICAgIH0KQEAgLTExMiw3ICsxMTIsNyBAQCB2b2lk
IENvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjpwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFw
cGVyKiB0ZXh0dXJlTWFwcGVyLAogICAgIEhhc2hNYXA8aW50LCBDb29yZGluYXRlZEJhY2tpbmdT
dG9yZVRpbGU+OjppdGVyYXRvciBlbmQgPSBtX3RpbGVzLmVuZCgpOwogICAgIEZsb2F0UmVjdCBj
b3ZlcmVkUmVjdDsKICAgICBmb3IgKEhhc2hNYXA8aW50LCBDb29yZGluYXRlZEJhY2tpbmdTdG9y
ZVRpbGU+OjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7
Ci0gICAgICAgIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZSYgdGlsZSA9IGl0LT5zZWNvbmQ7
CisgICAgICAgIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZSYgdGlsZSA9IGl0LT52YWx1ZTsK
ICAgICAgICAgaWYgKCF0aWxlLnRleHR1cmUoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCkBA
IC0xNTYsNyArMTU2LDcgQEAgdm9pZCBDb29yZGluYXRlZEJhY2tpbmdTdG9yZTo6Y29tbWl0VGls
ZU9wZXJhdGlvbnMoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlcikKIAogICAgIEhhc2hNYXA8
aW50LCBDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGU+OjppdGVyYXRvciB0aWxlc0VuZCA9IG1f
dGlsZXMuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPGludCwgQ29vcmRpbmF0ZWRCYWNraW5nU3Rv
cmVUaWxlPjo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IHRpbGVzRW5kOyAr
K2l0KQotICAgICAgICBpdC0+c2Vjb25kLnN3YXBCdWZmZXJzKHRleHR1cmVNYXBwZXIpOworICAg
ICAgICBpdC0+dmFsdWUuc3dhcEJ1ZmZlcnModGV4dHVyZU1hcHBlcik7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclBy
b3h5LmNwcAppbmRleCBlNmY1ODJmMjIwMzQxNjIyMjJjZDRmNGFhODhjMzRjZTM5ZTA3NjEwLi4w
ZDA4ZjMxMThlNzU4ZWE1Nzk2MGQ5MjdkZDk2OWUxNDhkMzY2ODQ4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGlu
YXRvclByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRH
cmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5LmNwcApAQCAtNzMsNyArNzMsNyBAQCB2
b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnVwZGF0ZVRpbGVGb3JMYXllcihpbnQgbGF5
ZXJJRCwgaW50IHRpbGVJRCwgY29ucwogICAgICAgICAgICAgc3VyZmFjZSA9IFNoYXJlYWJsZVN1
cmZhY2U6OmNyZWF0ZSh1cGRhdGVJbmZvLnN1cmZhY2VIYW5kbGUpOwogICAgICAgICAgICAgbV9z
dXJmYWNlcy5hZGQodG9rZW4sIHN1cmZhY2UpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
IHN1cmZhY2UgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgc3VyZmFjZSA9IGl0LT52YWx1ZTsK
ICAgICB9IGVsc2UKICAgICAgICAgc3VyZmFjZSA9IFNoYXJlYWJsZVN1cmZhY2U6OmNyZWF0ZSh1
cGRhdGVJbmZvLnN1cmZhY2VIYW5kbGUpOwogI2Vsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJl
bmRlcmVyLmNwcAppbmRleCBiOTRjNjZiOWQzNjYwMTFiZDg1Y2FkMzIyN2YwNWRmNzdiYzQ5M2Vl
Li45MTgzNGU3ZjViOWY0NWI5ODJiNzZlZjdkOGY2Y2RlZWY2ODI2NDZlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVSZW5k
ZXJlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvTGF5ZXJUcmVlUmVuZGVyZXIuY3BwCkBAIC0xODMsNyArMTgzLDcgQEAgdm9pZCBMYXllclRy
ZWVSZW5kZXJlcjo6YWRqdXN0UG9zaXRpb25Gb3JGaXhlZExheWVycygpCiAKICAgICBMYXllck1h
cDo6aXRlcmF0b3IgZW5kID0gbV9maXhlZExheWVycy5lbmQoKTsKICAgICBmb3IgKExheWVyTWFw
OjppdGVyYXRvciBpdCA9IG1fZml4ZWRMYXllcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQot
ICAgICAgICB0b1RleHR1cmVNYXBwZXJMYXllcihpdC0+c2Vjb25kKS0+c2V0U2Nyb2xsUG9zaXRp
b25EZWx0YUlmTmVlZGVkKGRlbHRhKTsKKyAgICAgICAgdG9UZXh0dXJlTWFwcGVyTGF5ZXIoaXQt
PnZhbHVlKS0+c2V0U2Nyb2xsUG9zaXRpb25EZWx0YUlmTmVlZGVkKGRlbHRhKTsKIH0KIAogdm9p
ZCBMYXllclRyZWVSZW5kZXJlcjo6ZGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24oY29uc3QgSW50UG9p
bnQmIHBvc2l0aW9uKQpAQCAtMjA2LDcgKzIwNiw3IEBAIHZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6
OnN5bmNDYW52YXMoV2ViTGF5ZXJJRCBpZCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgY2FudmFz
CiAgICAgICAgIGNhbnZhc0JhY2tpbmdTdG9yZSA9IFRleHR1cmVNYXBwZXJTdXJmYWNlQmFja2lu
Z1N0b3JlOjpjcmVhdGUoKTsKICAgICAgICAgbV9zdXJmYWNlQmFja2luZ1N0b3Jlcy5zZXQoaWQs
IGNhbnZhc0JhY2tpbmdTdG9yZSk7CiAgICAgfSBlbHNlCi0gICAgICAgIGNhbnZhc0JhY2tpbmdT
dG9yZSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIGNhbnZhc0JhY2tpbmdTdG9yZSA9IGl0LT52YWx1
ZTsKIAogICAgIGNhbnZhc0JhY2tpbmdTdG9yZS0+c2V0R3JhcGhpY3NTdXJmYWNlKGdyYXBoaWNz
U3VyZmFjZVRva2VuLCBjYW52YXNTaXplLCBmcm9udEJ1ZmZlcik7CiAgICAgbGF5ZXItPnNldENv
bnRlbnRzVG9NZWRpYShjYW52YXNCYWNraW5nU3RvcmUuZ2V0KCkpOwpAQCAtMjE3LDcgKzIxNyw3
IEBAIHZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnNldExheWVyQ2hpbGRyZW4oV2ViTGF5ZXJJRCBp
ZCwgY29uc3QgVmVjdG9yPFdlYkxheWVySUQ+CiB7CiAgICAgZW5zdXJlTGF5ZXIoaWQpOwogICAg
IExheWVyTWFwOjppdGVyYXRvciBpdCA9IG1fbGF5ZXJzLmZpbmQoaWQpOwotICAgIEdyYXBoaWNz
TGF5ZXIqIGxheWVyID0gaXQtPnNlY29uZDsKKyAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IGl0
LT52YWx1ZTsKICAgICBWZWN0b3I8R3JhcGhpY3NMYXllcio+IGNoaWxkcmVuOwogCiAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZElEcy5zaXplKCk7ICsraSkgewpAQCAtMjM5LDcgKzIz
OSw3IEBAIHZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnNldExheWVyRmlsdGVycyhXZWJMYXllcklE
IGlkLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmCiAgICAgTGF5ZXJNYXA6Oml0ZXJhdG9yIGl0
ID0gbV9sYXllcnMuZmluZChpZCk7CiAgICAgQVNTRVJUKGl0ICE9IG1fbGF5ZXJzLmVuZCgpKTsK
IAotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gaXQtPnNlY29uZDsKKyAgICBHcmFwaGljc0xh
eWVyKiBsYXllciA9IGl0LT52YWx1ZTsKICAgICBsYXllci0+c2V0RmlsdGVycyhmaWx0ZXJzKTsK
IH0KICNlbmRpZgpAQCAtMjUwLDcgKzI1MCw3IEBAIHZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnNl
dExheWVyU3RhdGUoV2ViTGF5ZXJJRCBpZCwgY29uc3QgV2ViTGF5ZXJJbmZvJiBsYXllckluCiAg
ICAgTGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9sYXllcnMuZmluZChpZCk7CiAgICAgQVNTRVJU
KGl0ICE9IG1fbGF5ZXJzLmVuZCgpKTsKIAotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gaXQt
PnNlY29uZDsKKyAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IGl0LT52YWx1ZTsKIAogICAgIGxh
eWVyLT5zZXRSZXBsaWNhdGVkQnlMYXllcihsYXllckJ5SUQobGF5ZXJJbmZvLnJlcGxpY2EpKTsK
ICAgICBsYXllci0+c2V0TWFza0xheWVyKGxheWVyQnlJRChsYXllckluZm8ubWFzaykpOwpAQCAt
Mzc3LDcgKzM3Nyw3IEBAIHZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmFzc2lnbkltYWdlVG9MYXll
cihHcmFwaGljc0xheWVyKiBsYXllciwgaW50NjRfdCBpbWFnZUlECiAKICAgICBIYXNoTWFwPGlu
dDY0X3QsIFJlZlB0cjxUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlPiA+OjppdGVyYXRvciBpdCA9
IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmZpbmQoaW1hZ2VJRCk7CiAgICAgQVNTRVJUKGl0
ICE9IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmVuZCgpKTsKLSAgICBsYXllci0+c2V0Q29u
dGVudHNUb01lZGlhKGl0LT5zZWNvbmQuZ2V0KCkpOworICAgIGxheWVyLT5zZXRDb250ZW50c1Rv
TWVkaWEoaXQtPnZhbHVlLmdldCgpKTsKIH0KIAogdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6Y29t
bWl0VGlsZU9wZXJhdGlvbnMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuY3BwIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHku
Y3BwCmluZGV4IGViMDZjMjlkODY2YTA3MjM3MjNkNTBjNzdiN2E3NzY5ZTE5MjI0MDEuLmIyNjM5
NTczNjJmN2I5ZjA5Yzg5YzZmODVjY2E1OGE5MjY2MTM0MjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9HZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvR2VvbG9jYXRpb25QZXJtaXNzaW9u
UmVxdWVzdE1hbmFnZXJQcm94eS5jcHAKQEAgLTQyLDcgKzQyLDcgQEAgdm9pZCBHZW9sb2NhdGlv
blBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5OjppbnZhbGlkYXRlUmVxdWVzdHMoKQogICAg
IFBlbmRpbmdSZXF1ZXN0TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGVuZGluZ1JlcXVlc3Rz
LmJlZ2luKCk7CiAgICAgUGVuZGluZ1JlcXVlc3RNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1f
cGVuZGluZ1JlcXVlc3RzLmVuZCgpOwogICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAg
ICAgIGl0LT5zZWNvbmQtPmludmFsaWRhdGUoKTsKKyAgICAgICAgaXQtPnZhbHVlLT5pbnZhbGlk
YXRlKCk7CiAKICAgICBtX3BlbmRpbmdSZXF1ZXN0cy5jbGVhcigpOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9XZWJJbnNwZWN0b3JTZXJ2
ZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9XZWJJbnNw
ZWN0b3JTZXJ2ZXIuY3BwCmluZGV4IDY2ZDY0NDczNDQ3YjlkOTBmNjI5OWI5MjAzY2NkN2M1YWQx
M2U4Y2EuLmJjNTg1ZTk0ZGM4NDM3MWU5NTZlZDBjZjVlNjllYWZiMDI2YjEyNzYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvV2ViSW5zcGVjdG9y
U2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVy
L1dlYkluc3BlY3RvclNlcnZlci5jcHAKQEAgLTY3LDcgKzY3LDcgQEAgV2ViSW5zcGVjdG9yU2Vy
dmVyOjp+V2ViSW5zcGVjdG9yU2VydmVyKCkKICAgICAvLyBDbG9zZSBhbnkgcmVtYWluaW5nIG9w
ZW4gY29ubmVjdGlvbnMuCiAgICAgSGFzaE1hcDx1bnNpZ25lZCwgV2ViU29ja2V0U2VydmVyQ29u
bmVjdGlvbio+OjppdGVyYXRvciBlbmQgPSBtX2Nvbm5lY3Rpb25NYXAuZW5kKCk7CiAgICAgZm9y
IChIYXNoTWFwPHVuc2lnbmVkLCBXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uKj46Oml0ZXJhdG9y
IGl0ID0gbV9jb25uZWN0aW9uTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAg
ICBXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uKiBjb25uZWN0aW9uID0gaXQtPnNlY29uZDsKKyAg
ICAgICAgV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbiogY29ubmVjdGlvbiA9IGl0LT52YWx1ZTsK
ICAgICAgICAgV2ViSW5zcGVjdG9yUHJveHkqIGNsaWVudCA9IG1fY2xpZW50TWFwLmdldChjb25u
ZWN0aW9uLT5pZGVudGlmaWVyKCkpOwogICAgICAgICBjbG9zZUNvbm5lY3Rpb24oY2xpZW50LCBj
b25uZWN0aW9uKTsKICAgICB9CkBAIC03OCw3ICs3OCw3IEBAIGludCBXZWJJbnNwZWN0b3JTZXJ2
ZXI6OnJlZ2lzdGVyUGFnZShXZWJJbnNwZWN0b3JQcm94eSogY2xpZW50KQogI2lmbmRlZiBBU1NF
UlRfRElTQUJMRUQKICAgICBDbGllbnRNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fY2xpZW50TWFwLmVu
ZCgpOwogICAgIGZvciAoQ2xpZW50TWFwOjppdGVyYXRvciBpdCA9IG1fY2xpZW50TWFwLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgQVNTRVJUKGl0LT5zZWNvbmQgIT0gY2xpZW50
KTsKKyAgICAgICAgQVNTRVJUKGl0LT52YWx1ZSAhPSBjbGllbnQpOwogI2VuZGlmCiAKICAgICBp
bnQgcGFnZUlkID0gbV9uZXh0QXZhaWxhYmxlUGFnZUlkKys7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL1dlYlNvY2tldFNlcnZlckNvbm5lY3Rp
b24uY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9XZWJTb2Nr
ZXRTZXJ2ZXJDb25uZWN0aW9uLmNwcAppbmRleCBhYmM4MDVmZDdjYzdmMWZiNTI1YzBkMmZhNjZl
MjFhNDljZGMyYWExLi42MzE3YzYyYzIzOTc1NjZkODlmZjc0NDZlOTQwMjc0NWZkOGQ3ZmRlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL1dlYlNv
Y2tldFNlcnZlckNvbm5lY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9J
bnNwZWN0b3JTZXJ2ZXIvV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbi5jcHAKQEAgLTEwNiw5ICsx
MDYsOSBAQCB2b2lkIFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb246OnNlbmRIVFRQUmVzcG9uc2VI
ZWFkZXIoaW50IHN0YXR1c0NvZGUsIGNvbnN0IFN0cgogICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJh
bCgiXHJcbiIpOwogICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGhlYWRl
ckZpZWxkcy5lbmQoKTsKICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gaGVhZGVyRmllbGRzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBidWls
ZGVyLmFwcGVuZChpdC0+Zmlyc3QpOworICAgICAgICBidWlsZGVyLmFwcGVuZChpdC0+a2V5KTsK
ICAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCI6ICIpOwotICAgICAgICBidWlsZGVyLmFw
cGVuZChpdC0+c2Vjb25kKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoaXQtPnZhbHVlKTsKICAg
ICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJcclxuIik7CiAgICAgfQogICAgIGJ1aWxkZXIu
YXBwZW5kTGl0ZXJhbCgiXHJcbiIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0luc3BlY3RvclNlcnZlci9xdC9XZWJJbnNwZWN0b3JTZXJ2ZXJRdC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL3F0L1dlYkluc3BlY3RvclNlcnZlclF0
LmNwcAppbmRleCAxODgyNTg2YWYzOWMxNzhmMWI2ZTQ3NjEwMDg5ZDM5YzllNWMxZjRmLi4xMWU1
N2NmZDVlYmM3MTAzZTVmNTBmY2FiZThmNzQ1NzhjYzQ3NThkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL3F0L1dlYkluc3BlY3RvclNlcnZlclF0
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL3F0L1dl
Ykluc3BlY3RvclNlcnZlclF0LmNwcApAQCAtODMsMTggKzgzLDE4IEBAIHZvaWQgV2ViSW5zcGVj
dG9yU2VydmVyOjpidWlsZFBhZ2VMaXN0KFZlY3RvcjxjaGFyPiYgZGF0YSwgU3RyaW5nJiBjb250
ZW50VHlwZSkKICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIlsgIik7CiAgICAgQ2xpZW50TWFw
OjppdGVyYXRvciBlbmQgPSBtX2NsaWVudE1hcC5lbmQoKTsKICAgICBmb3IgKENsaWVudE1hcDo6
aXRlcmF0b3IgaXQgPSBtX2NsaWVudE1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAg
ICAgICAgV2ViUGFnZVByb3h5KiB3ZWJQYWdlID0gaXQtPnNlY29uZC0+cGFnZSgpOworICAgICAg
ICBXZWJQYWdlUHJveHkqIHdlYlBhZ2UgPSBpdC0+dmFsdWUtPnBhZ2UoKTsKICAgICAgICAgaWYg
KGl0ICE9IG1fY2xpZW50TWFwLmJlZ2luKCkpCiAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZExp
dGVyYWwoIiwgIik7CiAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgieyBcImlkXCI6ICIp
OwotICAgICAgICBidWlsZGVyLmFwcGVuZE51bWJlcihpdC0+Zmlyc3QpOworICAgICAgICBidWls
ZGVyLmFwcGVuZE51bWJlcihpdC0+a2V5KTsKICAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFs
KCIsIFwidGl0bGVcIjogXCIiKTsKICAgICAgICAgYnVpbGRlci5hcHBlbmQod2ViUGFnZS0+cGFn
ZVRpdGxlKCkpOwogICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIlwiLCBcInVybFwiOiBc
IiIpOwogICAgICAgICBidWlsZGVyLmFwcGVuZCh3ZWJQYWdlLT5hY3RpdmVVUkwoKSk7CiAgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiXCIsIFwiaW5zcGVjdG9yVXJsXCI6IFwiIik7CiAg
ICAgICAgIGJ1aWxkZXIuYXBwZW5kKHJlbW90ZUluc3BlY3RvclBhZ2VQYXRoKCkpOwotICAgICAg
ICBidWlsZGVyLmFwcGVuZE51bWJlcihpdC0+Zmlyc3QpOworICAgICAgICBidWlsZGVyLmFwcGVu
ZE51bWJlcihpdC0+a2V5KTsKICAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJcIiB9Iik7
CiAgICAgfQogICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIF0iKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Ob3RpZmljYXRpb25zL05vdGlmaWNhdGlvblBlcm1pc3Np
b25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Ob3Rp
ZmljYXRpb25zL05vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcApp
bmRleCAwNzkyMjk4NWU0NTY1ZjNjNzNjYWRjM2EwY2Y0NTUyMTdjNjE5OTY5Li40YTBjNDc1Mjkz
N2I4NzJkNWRlMjY5YzkxNjk0ZTIyMThkMzIwZTFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvTm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1h
bmFnZXJQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL05vdGlmaWNhdGlv
bnMvTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuY3BwCkBAIC00Myw3
ICs0Myw3IEBAIHZvaWQgTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHk6
OmludmFsaWRhdGVSZXF1ZXN0cygpCiAgICAgUGVuZGluZ1JlcXVlc3RNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV9wZW5kaW5nUmVxdWVzdHMuYmVnaW4oKTsKICAgICBQZW5kaW5nUmVxdWVzdE1h
cDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wZW5kaW5nUmVxdWVzdHMuZW5kKCk7CiAgICAgZm9y
ICg7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+aW52YWxpZGF0ZSgpOwor
ICAgICAgICBpdC0+dmFsdWUtPmludmFsaWRhdGUoKTsKICAgICAKICAgICBtX3BlbmRpbmdSZXF1
ZXN0cy5jbGVhcigpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1Bs
dWdpbnMvUGx1Z2luUHJvY2Vzc1Byb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Q
bHVnaW5zL1BsdWdpblByb2Nlc3NQcm94eS5jcHAKaW5kZXggY2ZkZmY5ZWZiMjk2OGEzNGY3N2Rj
ZWE5ZTg2NmYxZDU3NTM3YjdmNi4uNjE4MGIxOTc4OGIwYjJjMTVkMTQ0NDI4NmE2ZTYwNzljYTVj
ZTJiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2lu
UHJvY2Vzc1Byb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9Q
bHVnaW5Qcm9jZXNzUHJveHkuY3BwCkBAIC0xNTIsMTAgKzE1MiwxMCBAQCB2b2lkIFBsdWdpblBy
b2Nlc3NQcm94eTo6cGx1Z2luUHJvY2Vzc0NyYXNoZWRPckZhaWxlZFRvTGF1bmNoKCkKICAgICB9
CiAKICAgICB3aGlsZSAoIW1fcGVuZGluZ0dldFNpdGVzUmVwbGllcy5pc0VtcHR5KCkpCi0gICAg
ICAgIGRpZEdldFNpdGVzV2l0aERhdGEoVmVjdG9yPFN0cmluZz4oKSwgbV9wZW5kaW5nR2V0U2l0
ZXNSZXBsaWVzLmJlZ2luKCktPmZpcnN0KTsKKyAgICAgICAgZGlkR2V0U2l0ZXNXaXRoRGF0YShW
ZWN0b3I8U3RyaW5nPigpLCBtX3BlbmRpbmdHZXRTaXRlc1JlcGxpZXMuYmVnaW4oKS0+a2V5KTsK
IAogICAgIHdoaWxlICghbV9wZW5kaW5nQ2xlYXJTaXRlRGF0YVJlcGxpZXMuaXNFbXB0eSgpKQot
ICAgICAgICBkaWRDbGVhclNpdGVEYXRhKG1fcGVuZGluZ0NsZWFyU2l0ZURhdGFSZXBsaWVzLmJl
Z2luKCktPmZpcnN0KTsKKyAgICAgICAgZGlkQ2xlYXJTaXRlRGF0YShtX3BlbmRpbmdDbGVhclNp
dGVEYXRhUmVwbGllcy5iZWdpbigpLT5rZXkpOwogCiAgICAgLy8gVGVsbCB0aGUgcGx1Zy1pbiBw
cm9jZXNzIG1hbmFnZXIgdG8gZm9yZ2V0IGFib3V0IHRoaXMgcGx1Zy1pbiBwcm9jZXNzIHByb3h5
LiBUaGlzIG1heSBjYXVzZSB1cyB0byBiZSBkZWxldGVkLgogICAgIG1fcGx1Z2luUHJvY2Vzc01h
bmFnZXItPnJlbW92ZVBsdWdpblByb2Nlc3NQcm94eSh0aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJDb250ZXh0LmNwcAppbmRleCBmYmRjNmIzZmFiMDA3NGNiYzk2MzI0YzE1ZmNlNDZi
YTMwNzRmMTE1Li4zNjY4ZDIxMDkxOWQwZDRhNjZjN2E3MmM5OTQ1NzBmOTc0MzYwOTYyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHQuY3BwCkBAIC05ODEsNyArOTgxLDcgQEAg
c3RhdGljIFBhc3NSZWZQdHI8TXV0YWJsZURpY3Rpb25hcnk+IGNyZWF0ZURpY3Rpb25hcnlGcm9t
SGFzaE1hcChjb25zdCBIYXNoTWFwPFMKICAgICBSZWZQdHI8TXV0YWJsZURpY3Rpb25hcnk+IHJl
c3VsdCA9IE11dGFibGVEaWN0aW9uYXJ5OjpjcmVhdGUoKTsKICAgICBIYXNoTWFwPFN0cmluZywg
dWludDY0X3Q+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAuZW5kKCk7CiAgICAgZm9yIChIYXNo
TWFwPFN0cmluZywgdWludDY0X3Q+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHJlc3VsdC0+c2V0KGl0LT5maXJzdCwgUmVmUHRyPFdl
YlVJbnQ2ND4oV2ViVUludDY0OjpjcmVhdGUoaXQtPnNlY29uZCkpLmdldCgpKTsKKyAgICAgICAg
cmVzdWx0LT5zZXQoaXQtPmtleSwgUmVmUHRyPFdlYlVJbnQ2ND4oV2ViVUludDY0OjpjcmVhdGUo
aXQtPnZhbHVlKSkuZ2V0KCkpOwogICAgIAogICAgIHJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViSWNvbkRhdGFiYXNlLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJY29uRGF0YWJhc2UuY3BwCmluZGV4IDQxYzI2MTdiZmIz
ODU3ZDU5MjcxNDMxZDZmMDY5ZTczNjlmNzY4MTMuLmNiMWYyMzZmNGJlNDRmZjY5MDBlYzY5ZGJh
ZjljMzM2NGMwOGU0YWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJ
Y29uRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJY29uRGF0
YWJhc2UuY3BwCkBAIC0yNjMsMTQgKzI2MywxNCBAQCB2b2lkIFdlYkljb25EYXRhYmFzZTo6ZGlk
RmluaXNoVVJMSW1wb3J0KCkKICAgICBIYXNoTWFwPHVpbnQ2NF90LCBTdHJpbmc+OjppdGVyYXRv
ciBlbmQgPSBtX3BlbmRpbmdMb2FkRGVjaXNpb25VUkxNYXAuZW5kKCk7CiAgICAgCiAgICAgZm9y
ICg7IGkgIT0gZW5kOyArK2kpIHsKLSAgICAgICAgTE9HKEljb25EYXRhYmFzZSwgIldLMiBVSVBy
b2Nlc3MgcGVyZm9ybWluZyBkZWxheWVkIGNhbGxiYWNrIG9uIGNhbGxiYWNrIElEICVpIGZvciBw
YWdlIHVybCAlcyIsIChpbnQpaS0+Zmlyc3QsIGktPnNlY29uZC5hc2NpaSgpLmRhdGEoKSk7Ci0g
ICAgICAgIEljb25Mb2FkRGVjaXNpb24gZGVjaXNpb24gPSBtX2ljb25EYXRhYmFzZUltcGwtPnN5
bmNocm9ub3VzTG9hZERlY2lzaW9uRm9ySWNvblVSTChpLT5zZWNvbmQsIDApOworICAgICAgICBM
T0coSWNvbkRhdGFiYXNlLCAiV0syIFVJUHJvY2VzcyBwZXJmb3JtaW5nIGRlbGF5ZWQgY2FsbGJh
Y2sgb24gY2FsbGJhY2sgSUQgJWkgZm9yIHBhZ2UgdXJsICVzIiwgKGludClpLT5rZXksIGktPnZh
bHVlLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgSWNvbkxvYWREZWNpc2lvbiBkZWNpc2lvbiA9
IG1faWNvbkRhdGFiYXNlSW1wbC0+c3luY2hyb25vdXNMb2FkRGVjaXNpb25Gb3JJY29uVVJMKGkt
PnZhbHVlLCAwKTsKIAogICAgICAgICAvLyBEZWNpc2lvbnMgc2hvdWxkIG5ldmVyIGJlIHVua25v
d24gYWZ0ZXIgdGhlIGluaXRhbCBpbXBvcnQgaXMgY29tcGxldGUKICAgICAgICAgQVNTRVJUKGRl
Y2lzaW9uICE9IEljb25Mb2FkVW5rbm93bik7CiAKICAgICAgICAgLy8gRklYTUUgKE11bHRpLVdl
YlByb2Nlc3MpOiA8cmRhcjovL3Byb2JsZW0vMTIyNDAyMjM+IFdlIG5lZWQgdG8ga25vdyB3aGlj
aCBjb25uZWN0aW9uIHRvIHNlbmQgdGhpcyBtZXNzYWdlIHRvLgotICAgICAgICBtX3dlYkNvbnRl
eHQtPnNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViSWNvbkRhdGFiYXNlUHJveHk6OlJl
Y2VpdmVkSWNvbkxvYWREZWNpc2lvbihzdGF0aWNfY2FzdDxpbnQ+KGRlY2lzaW9uKSwgaS0+Zmly
c3QpKTsKKyAgICAgICAgbV93ZWJDb250ZXh0LT5zZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6
OldlYkljb25EYXRhYmFzZVByb3h5OjpSZWNlaXZlZEljb25Mb2FkRGVjaXNpb24oc3RhdGljX2Nh
c3Q8aW50PihkZWNpc2lvbiksIGktPmtleSkpOwogICAgIH0KICAgICAKICAgICBtX3BlbmRpbmdM
b2FkRGVjaXNpb25VUkxNYXAuY2xlYXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJJbnRlbnREYXRhLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJ
bnRlbnREYXRhLmNwcAppbmRleCA2MzJhYTNiNzU1NGRiMjQzYmQzNzVkZDc5MjEzOTUzMWU2OWFl
MWZkLi5jNmQ4YzY0YmE4NTk2MjUxZDVkMzZjZmU5MTlhMjk2MzgyNzExOTRjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViSW50ZW50RGF0YS5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYkludGVudERhdGEuY3BwCkBAIC03OCw3ICs3OCw3IEBAIFBh
c3NSZWZQdHI8SW1tdXRhYmxlRGljdGlvbmFyeT4gV2ViSW50ZW50RGF0YTo6ZXh0cmFzKCkgY29u
c3QKICAgICBJbW11dGFibGVEaWN0aW9uYXJ5OjpNYXBUeXBlIHdrRXh0cmFzOwogICAgIEhhc2hN
YXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3N0b3JlLmV4dHJhcy5l
bmQoKTsKICAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBp
dCA9IG1fc3RvcmUuZXh0cmFzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgd2tF
eHRyYXMuc2V0KGl0LT5maXJzdCwgV2ViU3RyaW5nOjpjcmVhdGUoaXQtPnNlY29uZCkpOworICAg
ICAgICB3a0V4dHJhcy5zZXQoaXQtPmtleSwgV2ViU3RyaW5nOjpjcmVhdGUoaXQtPnZhbHVlKSk7
CiAKICAgICByZXR1cm4gSW1tdXRhYmxlRGljdGlvbmFyeTo6YWRvcHQod2tFeHRyYXMpOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAppbmRleCAxM2Nh
NDc0ZjMzNWM3YzMzYWFlYjFiNzJkM2EzYzQwNmUwY2ZlNDY1Li4yNWMzNDBmZTllNjcwODVjY2Zm
YWQzMmQwZWY2NjYwNjNlMzM2NWVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UHJvY2Vzc1Byb3h5LmNwcApAQCAtMjY2LDkgKzI2Niw5IEBAIGJvb2wgV2ViUHJvY2Vzc1Byb3h5
OjpjaGVja1VSTFJlY2VpdmVkRnJvbVdlYlByb2Nlc3MoY29uc3QgS1VSTCYgdXJsKQogICAgIC8v
IEl0ZW1zIGluIGJhY2svZm9yd2FyZCBsaXN0IGhhdmUgYmVlbiBhbHJlYWR5IGNoZWNrZWQuCiAg
ICAgLy8gT25lIGNhc2Ugd2hlcmUgd2UgZG9uJ3QgaGF2ZSBzYW5kYm94IGV4dGVuc2lvbnMgZm9y
IGZpbGUgVVJMcyBpbiBiL2YgbGlzdCBpcyBpZiB0aGUgbGlzdCBoYXMgYmVlbiByZWluc3RhdGVk
IGFmdGVyIGEgY3Jhc2ggb3IgYSBicm93c2VyIHJlc3RhcnQuCiAgICAgZm9yIChXZWJCYWNrRm9y
d2FyZExpc3RJdGVtTWFwOjppdGVyYXRvciBpdGVyID0gbV9iYWNrRm9yd2FyZExpc3RJdGVtTWFw
LmJlZ2luKCksIGVuZCA9IG1fYmFja0ZvcndhcmRMaXN0SXRlbU1hcC5lbmQoKTsgaXRlciAhPSBl
bmQ7ICsraXRlcikgewotICAgICAgICBpZiAoS1VSTChLVVJMKCksIGl0ZXItPnNlY29uZC0+dXJs
KCkpLmZpbGVTeXN0ZW1QYXRoKCkgPT0gcGF0aCkKKyAgICAgICAgaWYgKEtVUkwoS1VSTCgpLCBp
dGVyLT52YWx1ZS0+dXJsKCkpLmZpbGVTeXN0ZW1QYXRoKCkgPT0gcGF0aCkKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICBpZiAoS1VSTChLVVJMKCksIGl0ZXItPnNlY29uZC0+b3Jp
Z2luYWxVUkwoKSkuZmlsZVN5c3RlbVBhdGgoKSA9PSBwYXRoKQorICAgICAgICBpZiAoS1VSTChL
VVJMKCksIGl0ZXItPnZhbHVlLT5vcmlnaW5hbFVSTCgpKS5maWxlU3lzdGVtUGF0aCgpID09IHBh
dGgpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTI5MSwxNSArMjkxLDE1
IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5OjphZGRCYWNrRm9yd2FyZEl0ZW0odWludDY0X3QgaXRl
bUlELCBjb25zdCBTdHJpbmcmIG9yaWdpbmFsCiAKICAgICBXZWJCYWNrRm9yd2FyZExpc3RJdGVt
TWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9iYWNrRm9yd2FyZExpc3RJdGVtTWFwLmFkZChpdGVt
SUQsIDApOwogICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICByZXN1bHQuaXRl
cmF0b3ItPnNlY29uZCA9IFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW06OmNyZWF0ZShvcmlnaW5hbFVS
TCwgdXJsLCB0aXRsZSwgYmFja0ZvcndhcmREYXRhLmRhdGEoKSwgYmFja0ZvcndhcmREYXRhLnNp
emUoKSwgaXRlbUlEKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IFdlYkJhY2tG
b3J3YXJkTGlzdEl0ZW06OmNyZWF0ZShvcmlnaW5hbFVSTCwgdXJsLCB0aXRsZSwgYmFja0Zvcndh
cmREYXRhLmRhdGEoKSwgYmFja0ZvcndhcmREYXRhLnNpemUoKSwgaXRlbUlEKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAogICAgIC8vIFVwZGF0ZSBleGlzdGluZyBpdGVtLgotICAgIHJlc3Vs
dC5pdGVyYXRvci0+c2Vjb25kLT5zZXRPcmlnaW5hbFVSTChvcmlnaW5hbFVSTCk7Ci0gICAgcmVz
dWx0Lml0ZXJhdG9yLT5zZWNvbmQtPnNldFVSTCh1cmwpOwotICAgIHJlc3VsdC5pdGVyYXRvci0+
c2Vjb25kLT5zZXRUaXRsZSh0aXRsZSk7Ci0gICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQtPnNl
dEJhY2tGb3J3YXJkRGF0YShiYWNrRm9yd2FyZERhdGEuZGF0YSgpLCBiYWNrRm9yd2FyZERhdGEu
c2l6ZSgpKTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5zZXRPcmlnaW5hbFVSTChvcmln
aW5hbFVSTCk7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+c2V0VVJMKHVybCk7CisgICAg
cmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+c2V0VGl0bGUodGl0bGUpOworICAgIHJlc3VsdC5pdGVy
YXRvci0+dmFsdWUtPnNldEJhY2tGb3J3YXJkRGF0YShiYWNrRm9yd2FyZERhdGEuZGF0YSgpLCBi
YWNrRm9yd2FyZERhdGEuc2l6ZSgpKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUHJveHk6OnNlbmRE
aWRHZXRQbHVnaW5zKHVpbnQ2NF90IHJlcXVlc3RJRCwgUGFzc093blB0cjxWZWN0b3I8UGx1Z2lu
SW5mbz4gPiBwbHVnaW5JbmZvcykKQEAgLTU3OCw3ICs1NzgsNyBAQCBzaXplX3QgV2ViUHJvY2Vz
c1Byb3h5OjpmcmFtZUNvdW50SW5QYWdlKFdlYlBhZ2VQcm94eSogcGFnZSkgY29uc3QKIHsKICAg
ICBzaXplX3QgcmVzdWx0ID0gMDsKICAgICBmb3IgKEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxX
ZWJGcmFtZVByb3h5PiA+Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gbV9mcmFtZU1hcC5iZWdpbigp
OyBpdGVyICE9IG1fZnJhbWVNYXAuZW5kKCk7ICsraXRlcikgewotICAgICAgICBpZiAoaXRlci0+
c2Vjb25kLT5wYWdlKCkgPT0gcGFnZSkKKyAgICAgICAgaWYgKGl0ZXItPnZhbHVlLT5wYWdlKCkg
PT0gcGFnZSkKICAgICAgICAgICAgICsrcmVzdWx0OwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9HZW9sb2NhdGlvbi9HZW9s
b2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyLmNw
cAppbmRleCBkNmJkYjhlMTUzMTQ1MGIxMmFiYzgyZDg2YjJmYzAxM2YxMzU0M2I3Li5mY2E3MWEx
ZDA5NWZlZWZhYmEwNWE2YTcyNWZkYjQzNjM1ODE0YjY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RN
YW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0dlb2xvY2F0aW9uL0dl
b2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyLmNwcApAQCAtNzQsNyArNzQsNyBAQCB2
b2lkIEdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyOjpjYW5jZWxSZXF1ZXN0Rm9y
R2VvbG9jYXRpb24oR2VvbG9jYXRpbwogICAgICAgICByZXR1cm47CiAKICAgICBtX2dlb2xvY2F0
aW9uVG9JRE1hcC5yZW1vdmUoaXQpOwotICAgIG1faWRUb0dlb2xvY2F0aW9uTWFwLnJlbW92ZShp
dC0+c2Vjb25kKTsKKyAgICBtX2lkVG9HZW9sb2NhdGlvbk1hcC5yZW1vdmUoaXQtPnZhbHVlKTsK
IH0KIAogdm9pZCBHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlcjo6ZGlkUmVjZWl2
ZUdlb2xvY2F0aW9uUGVybWlzc2lvbkRlY2lzaW9uKHVpbnQ2NF90IGdlb2xvY2F0aW9uSUQsIGJv
b2wgYWxsb3dlZCkKQEAgLTgzLDcgKzgzLDcgQEAgdm9pZCBHZW9sb2NhdGlvblBlcm1pc3Npb25S
ZXF1ZXN0TWFuYWdlcjo6ZGlkUmVjZWl2ZUdlb2xvY2F0aW9uUGVybWlzc2lvbkRlY2lzaW8KICAg
ICBpZiAoaXQgPT0gbV9pZFRvR2VvbG9jYXRpb25NYXAuZW5kKCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIEdlb2xvY2F0aW9uKiBnZW9sb2NhdGlvbiA9IGl0LT5zZWNvbmQ7CisgICAgR2VvbG9j
YXRpb24qIGdlb2xvY2F0aW9uID0gaXQtPnZhbHVlOwogICAgIGdlb2xvY2F0aW9uLT5zZXRJc0Fs
bG93ZWQoYWxsb3dlZCk7CiAKICAgICBtX2lkVG9HZW9sb2NhdGlvbk1hcC5yZW1vdmUoaXQpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00v
SW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxlTm9kZUhhbmRsZS5jcHAKaW5kZXggMGM0
Mjk1ZTYxMmNkZDc2ZjAzYTUzMTNkNDVlNmNlYzFmYjFlODU5Ni4uNzdlMDMwOTNkNWZkMGQ5NjQy
NGQzMTU0Zjc3Yzk0ZDQxOTRiMTZlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1
bmRsZU5vZGVIYW5kbGUuY3BwCkBAIC02OSwxMCArNjksMTAgQEAgUGFzc1JlZlB0cjxJbmplY3Rl
ZEJ1bmRsZU5vZGVIYW5kbGU+IEluamVjdGVkQnVuZGxlTm9kZUhhbmRsZTo6Z2V0T3JDcmVhdGUo
Tm9kZSoKIAogICAgIERPTUhhbmRsZUNhY2hlOjpBZGRSZXN1bHQgcmVzdWx0ID0gZG9tSGFuZGxl
Q2FjaGUoKS5hZGQobm9kZSwgMCk7CiAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAg
ICAgcmV0dXJuIFBhc3NSZWZQdHI8SW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlPihyZXN1bHQuaXRl
cmF0b3ItPnNlY29uZCk7CisgICAgICAgIHJldHVybiBQYXNzUmVmUHRyPEluamVjdGVkQnVuZGxl
Tm9kZUhhbmRsZT4ocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CiAKICAgICBSZWZQdHI8SW5qZWN0
ZWRCdW5kbGVOb2RlSGFuZGxlPiBub2RlSGFuZGxlID0gSW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxl
OjpjcmVhdGUobm9kZSk7Ci0gICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBub2RlSGFuZGxl
LmdldCgpOworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBub2RlSGFuZGxlLmdldCgpOwog
ICAgIHJldHVybiBub2RlSGFuZGxlLnJlbGVhc2UoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVSYW5n
ZUhhbmRsZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RP
TS9JbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlLmNwcAppbmRleCAxYjc0ZjAxMjQwMDhkYjNjMDc4
MjhlYTZmNmQyYzA1YWMwNTljMzA2Li5kNjAwMGFiOTEzMzI5Y2Q1N2RhYjNlM2ZkNjQwMTRjNzZl
OTUyZGMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0RPTS9JbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxl
LmNwcApAQCAtNDgsMTAgKzQ4LDEwIEBAIFBhc3NSZWZQdHI8SW5qZWN0ZWRCdW5kbGVSYW5nZUhh
bmRsZT4gSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6Z2V0T3JDcmVhdGUoUmFuCiAKICAgICBE
T01IYW5kbGVDYWNoZTo6QWRkUmVzdWx0IHJlc3VsdCA9IGRvbUhhbmRsZUNhY2hlKCkuYWRkKHJh
bmdlLCAwKTsKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXR1cm4gUGFz
c1JlZlB0cjxJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlPihyZXN1bHQuaXRlcmF0b3ItPnNlY29u
ZCk7CisgICAgICAgIHJldHVybiBQYXNzUmVmUHRyPEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU+
KHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwogCiAgICAgUmVmUHRyPEluamVjdGVkQnVuZGxlUmFu
Z2VIYW5kbGU+IHJhbmdlSGFuZGxlID0gSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6Y3JlYXRl
KHJhbmdlKTsKLSAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IHJhbmdlSGFuZGxlLmdldCgp
OworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSByYW5nZUhhbmRsZS5nZXQoKTsKICAgICBy
ZXR1cm4gcmFuZ2VIYW5kbGUucmVsZWFzZSgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlSW50ZW50LmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVJ
bnRlbnQuY3BwCmluZGV4IDkyZGU2MWM2YzJiZDZlOWU0MmM0NzVkYWEwN2MwMTc3OWIxNzU3Y2Uu
LmQ4YWMzYTI1ZGYzNWI0YTA1ZjAyMmMxMGEzMzg0N2Y2NmZmOTZlOGMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVJbnRl
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5q
ZWN0ZWRCdW5kbGVJbnRlbnQuY3BwCkBAIC03OSw3ICs3OSw3IEBAIFBhc3NSZWZQdHI8SW1tdXRh
YmxlRGljdGlvbmFyeT4gSW5qZWN0ZWRCdW5kbGVJbnRlbnQ6OmV4dHJhcygpIGNvbnN0CiAgICAg
SW1tdXRhYmxlRGljdGlvbmFyeTo6TWFwVHlwZSB3a0V4dHJhczsKICAgICBIYXNoTWFwPFN0cmlu
ZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gZXh0cmFzLmVuZCgpOwogICAgIGZvciAo
SGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZXh0cmFzLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgd2tFeHRyYXMuc2V0KGl0LT5maXJzdCwgV2Vi
U3RyaW5nOjpjcmVhdGUoaXQtPnNlY29uZCkpOworICAgICAgICB3a0V4dHJhcy5zZXQoaXQtPmtl
eSwgV2ViU3RyaW5nOjpjcmVhdGUoaXQtPnZhbHVlKSk7CiAKICAgICByZXR1cm4gSW1tdXRhYmxl
RGljdGlvbmFyeTo6YWRvcHQod2tFeHRyYXMpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9Ob3RpZmljYXRpb25zL1dlYk5vdGlmaWNhdGlvbk1hbmFnZXIuY3BwIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Ob3RpZmljYXRpb25zL1dlYk5vdGlmaWNhdGlvbk1h
bmFnZXIuY3BwCmluZGV4IDVhYzJjZGMzZTQ1ZDFmN2EzODJlZGIwMzc3MDk1ZWY1ODQwNzk3NTUu
LjdiNjg5MTJmZTlhYWJiNDJjMmU3OGNhZjQ4NjQ5ZWE1MDcwNDIzZTAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTm90aWZpY2F0aW9ucy9XZWJOb3RpZmljYXRpb25NYW5h
Z2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05vdGlmaWNhdGlvbnMvV2Vi
Tm90aWZpY2F0aW9uTWFuYWdlci5jcHAKQEAgLTEwNyw3ICsxMDcsNyBAQCBOb3RpZmljYXRpb25D
bGllbnQ6OlBlcm1pc3Npb24gV2ViTm90aWZpY2F0aW9uTWFuYWdlcjo6cG9saWN5Rm9yT3JpZ2lu
KFdlYkNvcmU6OgogICAgIEFTU0VSVCghb3JpZ2luLT5pc1VuaXF1ZSgpKTsKICAgICBIYXNoTWFw
PFN0cmluZywgYm9vbD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wZXJtaXNzaW9uc01hcC5maW5k
KG9yaWdpbi0+dG9SYXdTdHJpbmcoKSk7CiAgICAgaWYgKGl0ICE9IG1fcGVybWlzc2lvbnNNYXAu
ZW5kKCkpCi0gICAgICAgIHJldHVybiBpdC0+c2Vjb25kID8gTm90aWZpY2F0aW9uQ2xpZW50OjpQ
ZXJtaXNzaW9uQWxsb3dlZCA6IE5vdGlmaWNhdGlvbkNsaWVudDo6UGVybWlzc2lvbkRlbmllZDsK
KyAgICAgICAgcmV0dXJuIGl0LT52YWx1ZSA/IE5vdGlmaWNhdGlvbkNsaWVudDo6UGVybWlzc2lv
bkFsbG93ZWQgOiBOb3RpZmljYXRpb25DbGllbnQ6OlBlcm1pc3Npb25EZW5pZWQ7CiAjZWxzZQog
ICAgIFVOVVNFRF9QQVJBTShvcmlnaW4pOwogI2VuZGlmCkBAIC0xNDUsNyArMTQ1LDcgQEAgYm9v
bCBXZWJOb3RpZmljYXRpb25NYW5hZ2VyOjpzaG93KE5vdGlmaWNhdGlvbiogbm90aWZpY2F0aW9u
LCBXZWJQYWdlKiBwYWdlKQogICAgIG1fbm90aWZpY2F0aW9uSURNYXAuc2V0KG5vdGlmaWNhdGlv
bklELCBub3RpZmljYXRpb24pOwogICAgIAogICAgIE5vdGlmaWNhdGlvbkNvbnRleHRNYXA6Oml0
ZXJhdG9yIGl0ID0gbV9ub3RpZmljYXRpb25Db250ZXh0TWFwLmFkZChub3RpZmljYXRpb24tPnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgVmVjdG9yPHVpbnQ2NF90PigpKS5pdGVyYXRvcjsKLSAg
ICBpdC0+c2Vjb25kLmFwcGVuZChub3RpZmljYXRpb25JRCk7CisgICAgaXQtPnZhbHVlLmFwcGVu
ZChub3RpZmljYXRpb25JRCk7CiAKICNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykKICAgICBtX3By
b2Nlc3MtPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTaG93Tm90
aWZpY2F0aW9uKG5vdGlmaWNhdGlvbi0+dGl0bGUoKSwgbm90aWZpY2F0aW9uLT5ib2R5KCksIG5v
dGlmaWNhdGlvbi0+aWNvblVSTCgpLnN0cmluZygpLCBub3RpZmljYXRpb24tPnRhZygpLCBub3Rp
ZmljYXRpb24tPmxhbmcoKSwgbm90aWZpY2F0aW9uLT5kaXIoKSwgbm90aWZpY2F0aW9uLT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCktPnNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCksIG5vdGlm
aWNhdGlvbklEKSwgcGFnZS0+cGFnZUlEKCkpOwpAQCAtMTg0LDcgKzE4NCw3IEBAIHZvaWQgV2Vi
Tm90aWZpY2F0aW9uTWFuYWdlcjo6Y2xlYXJOb3RpZmljYXRpb25zKFdlYkNvcmU6OlNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqCiAgICAgaWYgKGl0ID09IG1fbm90aWZpY2F0aW9uQ29udGV4dE1hcC5l
bmQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIFZlY3Rvcjx1aW50NjRfdD4mIG5vdGlm
aWNhdGlvbklEcyA9IGl0LT5zZWNvbmQ7CisgICAgVmVjdG9yPHVpbnQ2NF90PiYgbm90aWZpY2F0
aW9uSURzID0gaXQtPnZhbHVlOwogICAgIG1fcHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5zZW5kKE1l
c3NhZ2VzOjpXZWJOb3RpZmljYXRpb25NYW5hZ2VyUHJveHk6OkNsZWFyTm90aWZpY2F0aW9ucyhu
b3RpZmljYXRpb25JRHMpLCBwYWdlLT5wYWdlSUQoKSk7CiAgICAgc2l6ZV90IGNvdW50ID0gbm90
aWZpY2F0aW9uSURzLnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyAr
K2kpIHsKQEAgLTI4MSwxMCArMjgxLDEwIEBAIHZvaWQgV2ViTm90aWZpY2F0aW9uTWFuYWdlcjo6
cmVtb3ZlTm90aWZpY2F0aW9uRnJvbUNvbnRleHRNYXAodWludDY0X3Qgbm90aWZpY2F0CiAgICAg
Ly8gVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiBmb3IgbWFuYWdpbmcgdGhlIGhhc2ggbWFwcy4K
ICAgICBOb3RpZmljYXRpb25Db250ZXh0TWFwOjppdGVyYXRvciBpdCA9IG1fbm90aWZpY2F0aW9u
Q29udGV4dE1hcC5maW5kKG5vdGlmaWNhdGlvbi0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsK
ICAgICBBU1NFUlQoaXQgIT0gbV9ub3RpZmljYXRpb25Db250ZXh0TWFwLmVuZCgpKTsKLSAgICBz
aXplX3QgaW5kZXggPSBpdC0+c2Vjb25kLmZpbmQobm90aWZpY2F0aW9uSUQpOworICAgIHNpemVf
dCBpbmRleCA9IGl0LT52YWx1ZS5maW5kKG5vdGlmaWNhdGlvbklEKTsKICAgICBBU1NFUlQoaW5k
ZXggIT0gbm90Rm91bmQpOwotICAgIGl0LT5zZWNvbmQucmVtb3ZlKGluZGV4KTsKLSAgICBpZiAo
aXQtPnNlY29uZC5pc0VtcHR5KCkpCisgICAgaXQtPnZhbHVlLnJlbW92ZShpbmRleCk7CisgICAg
aWYgKGl0LT52YWx1ZS5pc0VtcHR5KCkpCiAgICAgICAgIG1fbm90aWZpY2F0aW9uQ29udGV4dE1h
cC5yZW1vdmUoaXQpOwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0TWFwLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3Bw
CmluZGV4IDlkY2Q5MTY2OTg3MzY3OTcxOWI4ZmZkNDJiYjZlNmY4ZmUxNzk4NzcuLmZjYTg5MDlk
Njk0NTQ0YjM3Yjc3NTllNjZlNjMwMjJjZDFhNjQ1NjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVP
YmplY3RNYXAuY3BwCkBAIC0yMTIsNyArMjEyLDcgQEAgdm9pZCBOUFJ1bnRpbWVPYmplY3RNYXA6
OmludmFsaWRhdGUoKQogICAgIFZlY3RvcjxOUE9iamVjdCo+IG9iamVjdHM7CiAKICAgICBmb3Ig
KEhhc2hNYXA8TlBPYmplY3QqLCBKU0M6OldlYWs8SlNOUE9iamVjdD4gPjo6aXRlcmF0b3IgcHRy
ID0gbV9qc05QT2JqZWN0cy5iZWdpbigpLCBlbmQgPSBtX2pzTlBPYmplY3RzLmVuZCgpOyBwdHIg
IT0gZW5kOyArK3B0cikgewotICAgICAgICBKU05QT2JqZWN0KiBqc05QT2JqZWN0ID0gcHRyLT5z
ZWNvbmQuZ2V0KCk7CisgICAgICAgIEpTTlBPYmplY3QqIGpzTlBPYmplY3QgPSBwdHItPnZhbHVl
LmdldCgpOwogICAgICAgICBpZiAoIWpzTlBPYmplY3QpIC8vIFNraXAgem9tYmllcy4KICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICBvYmplY3RzLmFwcGVuZChqc05QT2JqZWN0LT5sZWFr
TlBPYmplY3QoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdp
bnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW4uY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luLmNwcAppbmRleCBkNjdhYzk1MTE5NTBl
MGNmOTE5ODllZGUwNGYwYjhlMjgzMDQwZGI3Li4wMGY5ZWIyYzJlNjIxYjk4MTAxMzBkMGU3Nzhi
ODBhZGZmM2ExZWNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdp
bnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbi5jcHAKQEAgLTE5OCw4ICsxOTgs
OCBAQCBOUEVycm9yIE5ldHNjYXBlUGx1Z2luOjpkZXN0cm95U3RyZWFtKE5QU3RyZWFtKiBzdHJl
YW0sIE5QUmVhc29uIHJlYXNvbikKICAgICBOZXRzY2FwZVBsdWdpblN0cmVhbSogcGx1Z2luU3Ry
ZWFtID0gMDsKIAogICAgIGZvciAoU3RyZWFtc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3N0
cmVhbXMuYmVnaW4oKSwgZW5kID0gbV9zdHJlYW1zLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
LSAgICAgICAgaWYgKGl0LT5zZWNvbmQtPm5wU3RyZWFtKCkgPT0gc3RyZWFtKSB7Ci0gICAgICAg
ICAgICBwbHVnaW5TdHJlYW0gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICBpZiAoaXQtPnZh
bHVlLT5ucFN0cmVhbSgpID09IHN0cmVhbSkgeworICAgICAgICAgICAgcGx1Z2luU3RyZWFtID0g
aXQtPnZhbHVlLmdldCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CkBA
IC03NjgsOCArNzY4LDggQEAgdm9pZCBOZXRzY2FwZVBsdWdpbjo6ZnJhbWVEaWRGaW5pc2hMb2Fk
aW5nKHVpbnQ2NF90IHJlcXVlc3RJRCkKICAgICBpZiAoaXQgPT0gbV9wZW5kaW5nVVJMTm90aWZp
Y2F0aW9ucy5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU3RyaW5nIHVybCA9IGl0LT5z
ZWNvbmQuZmlyc3Q7Ci0gICAgdm9pZCogbm90aWZpY2F0aW9uRGF0YSA9IGl0LT5zZWNvbmQuc2Vj
b25kOworICAgIFN0cmluZyB1cmwgPSBpdC0+dmFsdWUuZmlyc3Q7CisgICAgdm9pZCogbm90aWZp
Y2F0aW9uRGF0YSA9IGl0LT52YWx1ZS5zZWNvbmQ7CiAKICAgICBtX3BlbmRpbmdVUkxOb3RpZmlj
YXRpb25zLnJlbW92ZShpdCk7CiAgICAgCkBAIC03ODQsOCArNzg0LDggQEAgdm9pZCBOZXRzY2Fw
ZVBsdWdpbjo6ZnJhbWVEaWRGYWlsKHVpbnQ2NF90IHJlcXVlc3RJRCwgYm9vbCB3YXNDYW5jZWxs
ZWQpCiAgICAgaWYgKGl0ID09IG1fcGVuZGluZ1VSTE5vdGlmaWNhdGlvbnMuZW5kKCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIFN0cmluZyB1cmwgPSBpdC0+c2Vjb25kLmZpcnN0OwotICAgIHZv
aWQqIG5vdGlmaWNhdGlvbkRhdGEgPSBpdC0+c2Vjb25kLnNlY29uZDsKKyAgICBTdHJpbmcgdXJs
ID0gaXQtPnZhbHVlLmZpcnN0OworICAgIHZvaWQqIG5vdGlmaWNhdGlvbkRhdGEgPSBpdC0+dmFs
dWUuc2Vjb25kOwogCiAgICAgbV9wZW5kaW5nVVJMTm90aWZpY2F0aW9ucy5yZW1vdmUoaXQpOwog
ICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdp
blZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcu
Y3BwCmluZGV4IDQwYTBkN2EyMTJiYjU2NDdiYzZhZTA4NjUxMjEzMGU3MDI5ZjliYTkuLjlhN2Qx
NDQ4OGI2ZDM2NTdjODc4NWZlZWJjNGNmOTU1ZDYyOWEzYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKQEAgLTE3MCw5ICsxNzAsOSBA
QCBzdGF0aWMgU3RyaW5nIGJ1aWxkSFRUUEhlYWRlcnMoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYg
cmVzcG9uc2UsIGxvbmcgbG9uZyYgZXhwZQogICAgIAogICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMoKS5lbmQoKTsKICAgICBm
b3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcmVzcG9uc2UuaHR0cEhlYWRl
ckZpZWxkcygpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZChpdC0+Zmlyc3QuY2hhcmFjdGVycygpLCBpdC0+Zmlyc3QubGVuZ3RoKCkpOwor
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+a2V5LmNoYXJhY3RlcnMoKSwgaXQtPmtl
eS5sZW5ndGgoKSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHNlcGFyYXRvci5jaGFy
YWN0ZXJzKCksIHNlcGFyYXRvci5sZW5ndGgoKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKGl0LT5zZWNvbmQuY2hhcmFjdGVycygpLCBpdC0+c2Vjb25kLmxlbmd0aCgpKTsKKyAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPnZhbHVlLmNoYXJhY3RlcnMoKSwgaXQtPnZhbHVl
Lmxlbmd0aCgpKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7CiAgICAgfQog
ICAgIApAQCAtMjg0LDcgKzI4NCw3IEBAIFBsdWdpblZpZXc6On5QbHVnaW5WaWV3KCkKIAogICAg
IC8vIENhbmNlbCBhbGwgcGVuZGluZyBmcmFtZSBsb2Fkcy4KICAgICBmb3IgKEZyYW1lTG9hZE1h
cDo6aXRlcmF0b3IgaXQgPSBtX3BlbmRpbmdGcmFtZUxvYWRzLmJlZ2luKCksIGVuZCA9IG1fcGVu
ZGluZ0ZyYW1lTG9hZHMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPmZpcnN0
LT5zZXRMb2FkTGlzdGVuZXIoMCk7CisgICAgICAgIGl0LT5rZXktPnNldExvYWRMaXN0ZW5lcigw
KTsKIAogICAgIGlmIChtX3BsdWdpbikgewogICAgICAgICBtX2lzQmVpbmdEZXN0cm95ZWQgPSB0
cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllci5jcHAKaW5kZXggZjJhZmRiNWZiOGFiMzAwZWFlODgwOGU4MzZlZjM2MDExOTZj
YTM3OS4uZjUxNTlkMGZmZTM4ZGM3Zjk3NzdjZGFhMjY1OTY0NmQzYWMwZjc2MCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIu
Y3BwCkBAIC01Myw3ICs1Myw3IEBAIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyOjpsYXllckJ5SUQoV2ViS2l0OjpXZWJMYXllcklECiAgICAgSGFzaE1h
cDxXZWJMYXllcklELCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqPjo6aXRlcmF0b3IgaXQgPSB0
YWJsZS5maW5kKGlkKTsKICAgICBpZiAoaXQgPT0gdGFibGUuZW5kKCkpCiAgICAgICAgIHJldHVy
biAwOwotICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgIHJldHVybiBpdC0+dmFsdWU7CiB9CiAK
IHN0YXRpYyBXZWJMYXllcklEIHRvV2ViTGF5ZXJJRChHcmFwaGljc0xheWVyKiBsYXllcikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdy
YXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcApp
bmRleCBkOTc5YWQ3MWM5YTBlNWRjODRjNGZmZWQ3ODEwMWI2ZjJmOTA3YzI4Li5iODVlZTI5NTRh
YmNlNDMxODViOGZjMzQ1ODFlOTI5OTYyMzllZThjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGlu
YXRvci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3BwCkBAIC00NTksNyArNDU5LDcgQEAg
aW50NjRfdCBMYXllclRyZWVDb29yZGluYXRvcjo6YWRvcHRJbWFnZUJhY2tpbmdTdG9yZShJbWFn
ZSogaW1hZ2UpCiAgICAgSGFzaE1hcDxpbnQ2NF90LCBpbnQ+OjppdGVyYXRvciBpdCA9IG1fZGly
ZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMuZmluZChrZXkpOwogCiAgICAgaWYgKGl0ICE9
IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMuZW5kKCkpIHsKLSAgICAgICAgKyso
aXQtPnNlY29uZCk7CisgICAgICAgICsrKGl0LT52YWx1ZSk7CiAgICAgICAgIHJldHVybiBrZXk7
CiAgICAgfQogCkBAIC00ODQsOSArNDg0LDkgQEAgdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6
cmVsZWFzZUltYWdlQmFja2luZ1N0b3JlKGludDY0X3Qga2V5KQogICAgIGlmIChpdCA9PSBtX2Rp
cmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLmVuZCgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBpdC0+c2Vjb25kLS07CisgICAgaXQtPnZhbHVlLS07CiAKLSAgICBpZiAoaXQtPnNlY29u
ZCkKKyAgICBpZiAoaXQtPnZhbHVlKQogICAgICAgICByZXR1cm47CiAKICAgICBtX2RpcmVjdGx5
Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLnJlbW92ZShpdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFja0ZvcndhcmRMaXN0UHJveHkuY3BwIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFByb3h5
LmNwcAppbmRleCA0Y2E0ZTVmZGI3MmNmY2VhYzY5NTQ1ZGQxN2Q5ZjdhMmNjODQ2ODM4Li5iZTgy
YTE5N2E3MzZkNjIzMmE1NDM3ZGE5YzI5MDJlYjA1Y2EzYTBiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFja0ZvcndhcmRMaXN0UHJveHkuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9yd2FyZExpc3RQ
cm94eS5jcHAKQEAgLTEzMCw5ICsxMzAsOSBAQCB2b2lkIFdlYkJhY2tGb3J3YXJkTGlzdFByb3h5
OjpyZW1vdmVJdGVtKHVpbnQ2NF90IGl0ZW1JRCkKICAgICBpZiAoaXQgPT0gaWRUb0hpc3RvcnlJ
dGVtTWFwKCkuZW5kKCkpCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgV2ViQ29yZTo6
cGFnZUNhY2hlKCktPnJlbW92ZShpdC0+c2Vjb25kLmdldCgpKTsKKyAgICBXZWJDb3JlOjpwYWdl
Q2FjaGUoKS0+cmVtb3ZlKGl0LT52YWx1ZS5nZXQoKSk7CiAKLSAgICBoaXN0b3J5SXRlbVRvSURN
YXAoKS5yZW1vdmUoaXQtPnNlY29uZCk7CisgICAgaGlzdG9yeUl0ZW1Ub0lETWFwKCkucmVtb3Zl
KGl0LT52YWx1ZSk7CiAgICAgaWRUb0hpc3RvcnlJdGVtTWFwKCkucmVtb3ZlKGl0KTsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdl
TWFjLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFj
Lm1tCmluZGV4IGMyZjAxNjUzNzU5NTNiNTNjYzNjZDFiOWViNDMxZGI1ZWNlYjkzYWQuLjIyMjcz
YzFmNjQ2MjFkOWZmMDI4MGU3NWNlNjEzNWJhNWQyNWFiNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KQEAgLTEyMSw3ICsx
MjEsNyBAQCBzdGF0aWMgU3RyaW5nIGNvbW1hbmROYW1lRm9yU2VsZWN0b3JOYW1lKGNvbnN0IFN0
cmluZyYgc2VsZWN0b3JOYW1lKQogICAgIHN0YXRpYyBjb25zdCBTZWxlY3Rvck5hbWVNYXAqIGV4
Y2VwdGlvbk1hcCA9IGNyZWF0ZVNlbGVjdG9yRXhjZXB0aW9uTWFwKCk7CiAgICAgU2VsZWN0b3JO
YW1lTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGV4Y2VwdGlvbk1hcC0+ZmluZChzZWxlY3Rvck5h
bWUpOwogICAgIGlmIChpdCAhPSBleGNlcHRpb25NYXAtPmVuZCgpKQotICAgICAgICByZXR1cm4g
aXQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKIAogICAgIC8vIFJlbW92ZSB0
aGUgdHJhaWxpbmcgY29sb24uCiAgICAgLy8gTm8gbmVlZCB0byBjYXBpdGFsaXplIHRoZSBjb21t
YW5kIG5hbWUgc2luY2UgRWRpdG9yIGNvbW1hbmQgbmFtZXMgYXJlIG5vdCBjYXNlIHNlbnNpdGl2
ZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCmluZGV4IGRlMTgzMjQ1
OTk3N2U1MTUwMDdhNGNhMGY3MmVkYThkOGFmZjU5OTAuLjAwZmIzZDk5Nzk2MGY5ZWM0MWRhYWE4
N2YwM2JkZGFiY2MyODI3YTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNz
LmNwcApAQCAtMzU0LDcgKzM1NCw3IEBAIHZvaWQgV2ViUHJvY2Vzczo6dmlzaXRlZExpbmtTdGF0
ZUNoYW5nZWQoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkxpbmtIYXNoPiYgbGlua0hhCiAgICAgICAg
IEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxXZWJQYWdlR3JvdXBQcm94eT4gPjo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX3BhZ2VHcm91cE1hcC5iZWdpbigpOwogICAgICAgICBIYXNoTWFwPHVpbnQ2
NF90LCBSZWZQdHI8V2ViUGFnZUdyb3VwUHJveHk+ID46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1f
cGFnZUdyb3VwTWFwLmVuZCgpOwogICAgICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KQotICAg
ICAgICAgICAgUGFnZTo6dmlzaXRlZFN0YXRlQ2hhbmdlZChQYWdlR3JvdXA6OnBhZ2VHcm91cChp
dC0+c2Vjb25kLT5pZGVudGlmaWVyKCkpLCBsaW5rSGFzaGVzW2ldKTsKKyAgICAgICAgICAgIFBh
Z2U6OnZpc2l0ZWRTdGF0ZUNoYW5nZWQoUGFnZUdyb3VwOjpwYWdlR3JvdXAoaXQtPnZhbHVlLT5p
ZGVudGlmaWVyKCkpLCBsaW5rSGFzaGVzW2ldKTsKICAgICB9CiAKICAgICBwYWdlQ2FjaGUoKS0+
bWFya1BhZ2VzRm9yVmlzdGVkTGlua1N0eWxlUmVjYWxjKCk7CkBAIC0zNjYsNyArMzY2LDcgQEAg
dm9pZCBXZWJQcm9jZXNzOjphbGxWaXNpdGVkTGlua1N0YXRlQ2hhbmdlZCgpCiAgICAgSGFzaE1h
cDx1aW50NjRfdCwgUmVmUHRyPFdlYlBhZ2VHcm91cFByb3h5PiA+Ojpjb25zdF9pdGVyYXRvciBp
dCA9IG1fcGFnZUdyb3VwTWFwLmJlZ2luKCk7CiAgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRy
PFdlYlBhZ2VHcm91cFByb3h5PiA+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BhZ2VHcm91cE1h
cC5lbmQoKTsKICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBQYWdlOjphbGxW
aXNpdGVkU3RhdGVDaGFuZ2VkKFBhZ2VHcm91cDo6cGFnZUdyb3VwKGl0LT5zZWNvbmQtPmlkZW50
aWZpZXIoKSkpOworICAgICAgICBQYWdlOjphbGxWaXNpdGVkU3RhdGVDaGFuZ2VkKFBhZ2VHcm91
cDo6cGFnZUdyb3VwKGl0LT52YWx1ZS0+aWRlbnRpZmllcigpKSk7CiAKICAgICBwYWdlQ2FjaGUo
KS0+bWFya1BhZ2VzRm9yVmlzdGVkTGlua1N0eWxlUmVjYWxjKCk7CiB9CkBAIC01NDIsNyArNTQy
LDcgQEAgV2ViUGFnZSogV2ViUHJvY2Vzczo6Zm9jdXNlZFdlYlBhZ2UoKSBjb25zdAogeyAgICAK
ICAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8V2ViUGFnZT4gPjo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gbV9wYWdlTWFwLmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRy
PFdlYlBhZ2U+ID46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wYWdlTWFwLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgewotICAgICAgICBXZWJQYWdlKiBwYWdlID0gKCppdCkuc2Vjb25kLmdldCgp
OworICAgICAgICBXZWJQYWdlKiBwYWdlID0gKCppdCkudmFsdWUuZ2V0KCk7CiAgICAgICAgIGlm
IChwYWdlLT53aW5kb3dBbmRXZWJQYWdlQXJlRm9jdXNlZCgpKQogICAgICAgICAgICAgcmV0dXJu
IHBhZ2U7CiAgICAgfQpAQCAtNTYwLDE0ICs1NjAsMTQgQEAgdm9pZCBXZWJQcm9jZXNzOjpjcmVh
dGVXZWJQYWdlKHVpbnQ2NF90IHBhZ2VJRCwgY29uc3QgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVy
cyYKICAgICAvLyBsaW5rKSB0aGUgV2ViUGFnZSBnZXRzIGNyZWF0ZWQgYm90aCBpbiB0aGUgc3lu
Y2hyb25vdXMgaGFuZGxlciBhbmQgdGhyb3VnaCB0aGUgbm9ybWFsIHdheS4gCiAgICAgSGFzaE1h
cDx1aW50NjRfdCwgUmVmUHRyPFdlYlBhZ2U+ID46OkFkZFJlc3VsdCByZXN1bHQgPSBtX3BhZ2VN
YXAuYWRkKHBhZ2VJRCwgMCk7CiAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAg
IEFTU0VSVCghcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOwotICAgICAgICByZXN1bHQuaXRlcmF0
b3ItPnNlY29uZCA9IFdlYlBhZ2U6OmNyZWF0ZShwYWdlSUQsIHBhcmFtZXRlcnMpOworICAgICAg
ICBBU1NFUlQoIXJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOworICAgICAgICByZXN1bHQuaXRlcmF0
b3ItPnZhbHVlID0gV2ViUGFnZTo6Y3JlYXRlKHBhZ2VJRCwgcGFyYW1ldGVycyk7CiAKICAgICAg
ICAgLy8gQmFsYW5jZWQgYnkgYW4gZW5hYmxlVGVybWluYXRpb24gaW4gcmVtb3ZlV2ViUGFnZS4K
ICAgICAgICAgZGlzYWJsZVRlcm1pbmF0aW9uKCk7CiAgICAgfQogCi0gICAgQVNTRVJUKHJlc3Vs
dC5pdGVyYXRvci0+c2Vjb25kKTsKKyAgICBBU1NFUlQocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7
CiB9CiAKIHZvaWQgV2ViUHJvY2Vzczo6cmVtb3ZlV2ViUGFnZSh1aW50NjRfdCBwYWdlSUQpCkBA
IC04MDQsMTEgKzgwNCwxMSBAQCBXZWJQYWdlR3JvdXBQcm94eSogV2ViUHJvY2Vzczo6d2ViUGFn
ZUdyb3VwKGNvbnN0IFdlYlBhZ2VHcm91cERhdGEmIHBhZ2VHcm91cERhdAogewogICAgIEhhc2hN
YXA8dWludDY0X3QsIFJlZlB0cjxXZWJQYWdlR3JvdXBQcm94eT4gPjo6QWRkUmVzdWx0IHJlc3Vs
dCA9IG1fcGFnZUdyb3VwTWFwLmFkZChwYWdlR3JvdXBEYXRhLnBhZ2VHcm91cElELCAwKTsKICAg
ICBpZiAocmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgQVNTRVJUKCFyZXN1bHQuaXRlcmF0
b3ItPnNlY29uZCk7Ci0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gV2ViUGFnZUdy
b3VwUHJveHk6OmNyZWF0ZShwYWdlR3JvdXBEYXRhKTsKKyAgICAgICAgQVNTRVJUKCFyZXN1bHQu
aXRlcmF0b3ItPnZhbHVlKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IFdlYlBh
Z2VHcm91cFByb3h5OjpjcmVhdGUocGFnZUdyb3VwRGF0YSk7CiAgICAgfQogCi0gICAgcmV0dXJu
IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLmdldCgpOworICAgIHJldHVybiByZXN1bHQuaXRlcmF0
b3ItPnZhbHVlLmdldCgpOwogfQogCiAjaWYgRU5BQkxFKFdFQl9JTlRFTlRTKQpAQCAtOTM0LDcg
KzkzNCw3IEBAIHN0YXRpYyB2b2lkIGZyb21Db3VudGVkU2V0VG9IYXNoTWFwKFR5cGVDb3VudFNl
dCogY291bnRlZFNldCwgSGFzaE1hcDxTdHJpbmcsIHVpCiB7CiAgICAgVHlwZUNvdW50U2V0Ojpj
b25zdF9pdGVyYXRvciBlbmQgPSBjb3VudGVkU2V0LT5lbmQoKTsKICAgICBmb3IgKFR5cGVDb3Vu
dFNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjb3VudGVkU2V0LT5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpCi0gICAgICAgIG1hcC5zZXQoaXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsKKyAgICAgICAg
bWFwLnNldChpdC0+a2V5LCBpdC0+dmFsdWUpOwogfQogCiBzdGF0aWMgdm9pZCBnZXRXZWJDb3Jl
TWVtb3J5Q2FjaGVTdGF0aXN0aWNzKFZlY3RvcjxIYXNoTWFwPFN0cmluZywgdWludDY0X3Q+ID4m
IHJlc3VsdCkKQEAgLTExMDcsNyArMTEwNyw3IEBAIHZvaWQgV2ViUHJvY2Vzczo6c2V0VGV4dENo
ZWNrZXJTdGF0ZShjb25zdCBUZXh0Q2hlY2tlclN0YXRlJiB0ZXh0Q2hlY2tlclN0YXRlKQogCiAg
ICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPFdlYlBhZ2U+ID46Oml0ZXJhdG9yIGVuZCA9IG1f
cGFnZU1hcC5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxXZWJQYWdl
PiA+OjppdGVyYXRvciBpdCA9IG1fcGFnZU1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
LSAgICAgICAgV2ViUGFnZSogcGFnZSA9ICgqaXQpLnNlY29uZC5nZXQoKTsKKyAgICAgICAgV2Vi
UGFnZSogcGFnZSA9ICgqaXQpLnZhbHVlLmdldCgpOwogICAgICAgICBpZiAoY29udGludW91c1Nw
ZWxsQ2hlY2tpbmdUdXJuZWRPZmYpCiAgICAgICAgICAgICBwYWdlLT51bm1hcmtBbGxNaXNzcGVs
bGluZ3MoKTsKICAgICAgICAgaWYgKGdyYW1tYXJDaGVja2luZ1R1cm5lZE9mZikKZGlmZiAtLWdp
dCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBmMzNlNmVkMGM1ZjFm
Y2FkNGY2OWMwNDkxY2VhYmFhMTJkNTZjN2ViLi45NDNiOWM0YjhhNzg5N2MzYzE3NjZkMDVhOGRm
NDZiMWM5MmYwZDY2IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNDUgQEAKKzIwMTItMDktMTQgIENhaW8gTWFyY2VsbyBkZSBPbGl2
ZWlyYSBGaWxobyAgPGNhaW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KKworICAgICAgICBSZW5h
bWUgZmlyc3Qvc2Vjb25kIHRvIGtleS92YWx1ZSBpbiBIYXNoTWFwIGl0ZXJhdG9ycworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI3ODQKKworICAgICAg
ICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2No
cm9taXVtL01vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoTW9ja1dl
YlNwZWVjaElucHV0Q29udHJvbGxlcjo6YWRkTW9ja1JlY29nbml0aW9uUmVzdWx0KToKKyAgICAg
ICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9Ob3RpZmljYXRpb25QcmVzZW50ZXIuY3BwOgor
ICAgICAgICAoTm90aWZpY2F0aW9uUHJlc2VudGVyOjpzaW11bGF0ZUNsaWNrKToKKyAgICAgICAg
KE5vdGlmaWNhdGlvblByZXNlbnRlcjo6c2hvdyk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vVGVzdFJ1bm5lci9DcHBCb3VuZENsYXNzLmNwcDoKKyAgICAgICAgKENwcEJvdW5k
Q2xhc3M6On5DcHBCb3VuZENsYXNzKToKKyAgICAgICAgKENwcEJvdW5kQ2xhc3M6Omludm9rZSk6
CisgICAgICAgIChDcHBCb3VuZENsYXNzOjpnZXRQcm9wZXJ0eSk6CisgICAgICAgIChDcHBCb3Vu
ZENsYXNzOjpzZXRQcm9wZXJ0eSk6CisgICAgICAgIChDcHBCb3VuZENsYXNzOjpiaW5kQ2FsbGJh
Y2spOgorICAgICAgICAoQ3BwQm91bmRDbGFzczo6YmluZFByb3BlcnR5KToKKyAgICAgICAgKiBE
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5jcHA6CisgICAgICAgIChhcHBs
eUZvbnRNYXApOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0
LmNwcDoKKyAgICAgICAgKFdlYlZpZXdIb3N0OjpwcmludFJlc291cmNlRGVzY3JpcHRpb24pOgor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21hYy9UZXN0UnVubmVyTWFjLm1tOgorICAgICAgICAo
d29ybGRJREZvcldvcmxkKToKKyAgICAgICAgKFRlc3RSdW5uZXI6OmV2YWx1YXRlU2NyaXB0SW5J
c29sYXRlZFdvcmxkKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXJXaW4uY3BwOgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6On5B
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlcik6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5Q29udHJvbGxl
cjo6d2luTm90aWZpY2F0aW9uUmVjZWl2ZWQpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dp
bi9SZXNvdXJjZUxvYWREZWxlZ2F0ZS5jcHA6CisgICAgICAgIChSZXNvdXJjZUxvYWREZWxlZ2F0
ZTo6ZGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQpOgorICAgICAgICAqIER1bXBSZW5k
ZXJUcmVlL3dpbi9UZXN0UnVubmVyV2luLmNwcDoKKyAgICAgICAgKHdvcmxkSURGb3JXb3JsZCk6
CisgICAgICAgIChUZXN0UnVubmVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCk6Cisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL0RPTVdpbmRvd0V4dGVuc2lvbkJh
c2ljX0J1bmRsZS5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpET01XaW5kb3dFeHRlbnNp
b25CYXNpYzo6d2lsbERlc3Ryb3lQYWdlKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdDIvRE9NV2luZG93RXh0ZW5zaW9uTm9DYWNoZV9CdW5kbGUuY3BwOgorICAgICAgICAo
VGVzdFdlYktpdEFQSTo6RE9NV2luZG93RXh0ZW5zaW9uTm9DYWNoZTo6d2lsbERlc3Ryb3lQYWdl
KToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIu
Y3BwOgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjp3b3JsZElERm9yV29ybGQpOgorICAgICAg
ICAoV1RSOjpUZXN0UnVubmVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCk6CisKIDIw
MTItMDktMjAgIFN0ZXBoZW4gQ2hlbm5leSAgPHNjaGVubmV5QGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBbQ2hyb21pdW1dIERSVCBkb2VzIG5vdCBzdXBwb3J0IC0tZHVtcC1hbGwtcGl4ZWxzIGZs
YWcKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL01vY2tXZWJTcGVl
Y2hJbnB1dENvbnRyb2xsZXIuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTW9j
a1dlYlNwZWVjaElucHV0Q29udHJvbGxlci5jcHAKaW5kZXggNzE2MjIyZjlhY2NmZThmZmJlMzU5
OTc4NTM4Mzc2NDcwNmM2NGUxZS4uMTNjOGZmMWVjNGMxY2RlNTUwNzY2OThkZmNmZTVlODcxMjZh
ODJlYiAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTW9ja1dlYlNw
ZWVjaElucHV0Q29udHJvbGxlci5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlci5jcHAKQEAgLTUyLDcgKzUyLDcgQEAgdm9p
ZCBNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyOjphZGRNb2NrUmVjb2duaXRpb25SZXN1bHQo
Y29uc3QgV2ViU3RyaW5nJiByZXMKICAgICAgICAgU3RyaW5nIGxhbmdTdHJpbmcgPSBTdHJpbmc6
OmZyb21VVEY4KGxhbmd1YWdlLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICBpZiAoIW1fcmVjb2du
aXRpb25SZXN1bHRzLmNvbnRhaW5zKGxhbmdTdHJpbmcpKQogICAgICAgICAgICAgbV9yZWNvZ25p
dGlvblJlc3VsdHMuc2V0KGxhbmdTdHJpbmcsIFZlY3RvcjxXZWJTcGVlY2hJbnB1dFJlc3VsdD4o
KSk7Ci0gICAgICAgIG1fcmVjb2duaXRpb25SZXN1bHRzLmZpbmQobGFuZ1N0cmluZyktPnNlY29u
ZC5hcHBlbmQocmVzKTsKKyAgICAgICAgbV9yZWNvZ25pdGlvblJlc3VsdHMuZmluZChsYW5nU3Ry
aW5nKS0+dmFsdWUuYXBwZW5kKHJlcyk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Ub29scy9E
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9Ob3RpZmljYXRpb25QcmVzZW50ZXIuY3BwIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTm90aWZpY2F0aW9uUHJlc2VudGVyLmNwcAppbmRleCAw
YzU0MDBmNWU5ZThmNzE3MGVjZjU5OWE4MWJkNDI2ZmJkNzcyOTFkLi5hMjE1ODhmNzQ0ZTVjM2Y1
YWI3MGRiZGIwM2MyNzVjNTA3MDhmMDNhIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9Ob3RpZmljYXRpb25QcmVzZW50ZXIuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL05vdGlmaWNhdGlvblByZXNlbnRlci5jcHAKQEAgLTc1LDcgKzc1LDcg
QEAgYm9vbCBOb3RpZmljYXRpb25QcmVzZW50ZXI6OnNpbXVsYXRlQ2xpY2soY29uc3QgV2ViU3Ry
aW5nJiB0aXRsZSkKICAgICBpZiAobV9hY3RpdmVOb3RpZmljYXRpb25zLmZpbmQoaWQpID09IG1f
YWN0aXZlTm90aWZpY2F0aW9ucy5lbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAot
ICAgIGNvbnN0IFdlYk5vdGlmaWNhdGlvbiYgbm90aWZpY2F0aW9uID0gbV9hY3RpdmVOb3RpZmlj
YXRpb25zLmZpbmQoaWQpLT5zZWNvbmQ7CisgICAgY29uc3QgV2ViTm90aWZpY2F0aW9uJiBub3Rp
ZmljYXRpb24gPSBtX2FjdGl2ZU5vdGlmaWNhdGlvbnMuZmluZChpZCktPnZhbHVlOwogICAgIFdl
Yk5vdGlmaWNhdGlvbiBldmVudFRhcmdldChub3RpZmljYXRpb24pOwogICAgIGV2ZW50VGFyZ2V0
LmRpc3BhdGNoQ2xpY2tFdmVudCgpOwogICAgIHJldHVybiB0cnVlOwpAQCAtODksNyArODksNyBA
QCBib29sIE5vdGlmaWNhdGlvblByZXNlbnRlcjo6c2hvdyhjb25zdCBXZWJOb3RpZmljYXRpb24m
IG5vdGlmaWNhdGlvbikKICAgICAgICAgV1RGOjpTdHJpbmcgcmVwbGFjZUlkKG5vdGlmaWNhdGlv
bi5yZXBsYWNlSWQoKS5kYXRhKCksIG5vdGlmaWNhdGlvbi5yZXBsYWNlSWQoKS5sZW5ndGgoKSk7
CiAgICAgICAgIGlmIChtX3JlcGxhY2VtZW50cy5maW5kKHJlcGxhY2VJZCkgIT0gbV9yZXBsYWNl
bWVudHMuZW5kKCkpCiAgICAgICAgICAgICBwcmludGYoIlJFUExBQ0lORyBOT1RJRklDQVRJT04g
JXNcbiIsCi0gICAgICAgICAgICAgICAgICAgbV9yZXBsYWNlbWVudHMuZmluZChyZXBsYWNlSWQp
LT5zZWNvbmQudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgICAgbV9yZXBsYWNlbWVu
dHMuZmluZChyZXBsYWNlSWQpLT52YWx1ZS51dGY4KCkuZGF0YSgpKTsKIAogICAgICAgICBtX3Jl
cGxhY2VtZW50cy5zZXQocmVwbGFjZUlkLCBXVEY6OlN0cmluZyhpZGVudGlmaWVyLmRhdGEoKSwg
aWRlbnRpZmllci5sZW5ndGgoKSkpOwogICAgIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvQ3BwQm91bmRDbGFzcy5jcHAgYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL0NwcEJvdW5kQ2xhc3MuY3BwCmluZGV4IDli
NGEzYjY0NjQ1ZDA1N2I0MTcyZTFjN2RmYTA3YzdhNjJlNzdjZjguLjFiMjlkMmIwZjU1ZDAxZjcz
ODcxNDU3ODc3ZjlkYmRmMDZmMWI0OTEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1Rlc3RSdW5uZXIvQ3BwQm91bmRDbGFzcy5jcHAKKysrIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9DcHBCb3VuZENsYXNzLmNwcApAQCAtMjAzLDEw
ICsyMDMsMTAgQEAgYm9vbCBDcHBOUE9iamVjdDo6c2V0UHJvcGVydHkoTlBPYmplY3QqIG5wT2Jq
LCBOUElkZW50aWZpZXIgaWRlbnQsIGNvbnN0IE5QVmFyaWEKIENwcEJvdW5kQ2xhc3M6On5DcHBC
b3VuZENsYXNzKCkKIHsKICAgICBmb3IgKE1ldGhvZExpc3Q6Oml0ZXJhdG9yIGkgPSBtX21ldGhv
ZHMuYmVnaW4oKTsgaSAhPSBtX21ldGhvZHMuZW5kKCk7ICsraSkKLSAgICAgICAgZGVsZXRlIGkt
PnNlY29uZDsKKyAgICAgICAgZGVsZXRlIGktPnZhbHVlOwogCiAgICAgZm9yIChQcm9wZXJ0eUxp
c3Q6Oml0ZXJhdG9yIGkgPSBtX3Byb3BlcnRpZXMuYmVnaW4oKTsgaSAhPSBtX3Byb3BlcnRpZXMu
ZW5kKCk7ICsraSkKLSAgICAgICAgZGVsZXRlIGktPnNlY29uZDsKKyAgICAgICAgZGVsZXRlIGkt
PnZhbHVlOwogCiAgICAgLy8gVW5yZWdpc3RlciBvdXJzZWx2ZXMgaWYgd2Ugd2VyZSBib3VuZCB0
byBhIGZyYW1lLgogICAgIGlmIChtX2JvdW5kVG9GcmFtZSkKQEAgLTIzNyw3ICsyMzcsNyBAQCBi
b29sIENwcEJvdW5kQ2xhc3M6Omludm9rZShOUElkZW50aWZpZXIgaWRlbnQsCiAgICAgICAgIH0K
ICAgICAgICAgY2FsbGJhY2sgPSBtX2ZhbGxiYWNrQ2FsbGJhY2suZ2V0KCk7CiAgICAgfSBlbHNl
Ci0gICAgICAgIGNhbGxiYWNrID0gKCptZXRob2QpLnNlY29uZDsKKyAgICAgICAgY2FsbGJhY2sg
PSAoKm1ldGhvZCkudmFsdWU7CiAKICAgICAvLyBCdWlsZCBhIENwcEFyZ3VtZW50TGlzdCBhcmd1
bWVudCB2ZWN0b3IgZnJvbSB0aGUgTlBWYXJpYW50cyBjb21pbmcgaW4uCiAgICAgQ3BwQXJndW1l
bnRMaXN0IGNwcEFyZ3VtZW50cyhhcmd1bWVudENvdW50KTsKQEAgLTI2MCw3ICsyNjAsNyBAQCBi
b29sIENwcEJvdW5kQ2xhc3M6OmdldFByb3BlcnR5KE5QSWRlbnRpZmllciBpZGVudCwgTlBWYXJp
YW50KiByZXN1bHQpIGNvbnN0CiAgICAgfQogCiAgICAgQ3BwVmFyaWFudCBjcHBWYWx1ZTsKLSAg
ICBpZiAoIWNhbGxiYWNrLT5zZWNvbmQtPmdldFZhbHVlKCZjcHBWYWx1ZSkpCisgICAgaWYgKCFj
YWxsYmFjay0+dmFsdWUtPmdldFZhbHVlKCZjcHBWYWx1ZSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBjcHBWYWx1ZS5jb3B5VG9OUFZhcmlhbnQocmVzdWx0KTsKICAgICByZXR1cm4gdHJ1
ZTsKQEAgLTI3NCw3ICsyNzQsNyBAQCBib29sIENwcEJvdW5kQ2xhc3M6OnNldFByb3BlcnR5KE5Q
SWRlbnRpZmllciBpZGVudCwgY29uc3QgTlBWYXJpYW50KiB2YWx1ZSkKIAogICAgIENwcFZhcmlh
bnQgY3BwVmFsdWU7CiAgICAgY3BwVmFsdWUuc2V0KCp2YWx1ZSk7Ci0gICAgcmV0dXJuICgqY2Fs
bGJhY2spLnNlY29uZC0+c2V0VmFsdWUoY3BwVmFsdWUpOworICAgIHJldHVybiAoKmNhbGxiYWNr
KS52YWx1ZS0+c2V0VmFsdWUoY3BwVmFsdWUpOwogfQogCiB2b2lkIENwcEJvdW5kQ2xhc3M6OmJp
bmRDYWxsYmFjayhjb25zdCBzdHJpbmcmIG5hbWUsIENhbGxiYWNrKiBjYWxsYmFjaykKQEAgLTI4
Miw3ICsyODIsNyBAQCB2b2lkIENwcEJvdW5kQ2xhc3M6OmJpbmRDYWxsYmFjayhjb25zdCBzdHJp
bmcmIG5hbWUsIENhbGxiYWNrKiBjYWxsYmFjaykKICAgICBOUElkZW50aWZpZXIgaWRlbnQgPSBX
ZWJCaW5kaW5nczo6Z2V0U3RyaW5nSWRlbnRpZmllcihuYW1lLmNfc3RyKCkpOwogICAgIE1ldGhv
ZExpc3Q6Oml0ZXJhdG9yIG9sZENhbGxiYWNrID0gbV9tZXRob2RzLmZpbmQoaWRlbnQpOwogICAg
IGlmIChvbGRDYWxsYmFjayAhPSBtX21ldGhvZHMuZW5kKCkpIHsKLSAgICAgICAgZGVsZXRlIG9s
ZENhbGxiYWNrLT5zZWNvbmQ7CisgICAgICAgIGRlbGV0ZSBvbGRDYWxsYmFjay0+dmFsdWU7CiAg
ICAgICAgIGlmICghY2FsbGJhY2spIHsKICAgICAgICAgICAgIG1fbWV0aG9kcy5yZW1vdmUob2xk
Q2FsbGJhY2spOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzA5LDcgKzMwOSw3IEBAIHZvaWQg
Q3BwQm91bmRDbGFzczo6YmluZFByb3BlcnR5KGNvbnN0IHN0cmluZyYgbmFtZSwgUHJvcGVydHlD
YWxsYmFjayogY2FsbGJhY2spCiAgICAgTlBJZGVudGlmaWVyIGlkZW50ID0gV2ViQmluZGluZ3M6
OmdldFN0cmluZ0lkZW50aWZpZXIobmFtZS5jX3N0cigpKTsKICAgICBQcm9wZXJ0eUxpc3Q6Oml0
ZXJhdG9yIG9sZENhbGxiYWNrID0gbV9wcm9wZXJ0aWVzLmZpbmQoaWRlbnQpOwogICAgIGlmIChv
bGRDYWxsYmFjayAhPSBtX3Byb3BlcnRpZXMuZW5kKCkpIHsKLSAgICAgICAgZGVsZXRlIG9sZENh
bGxiYWNrLT5zZWNvbmQ7CisgICAgICAgIGRlbGV0ZSBvbGRDYWxsYmFjay0+dmFsdWU7CiAgICAg
ICAgIGlmICghY2FsbGJhY2spIHsKICAgICAgICAgICAgIG1fcHJvcGVydGllcy5yZW1vdmUob2xk
Q2FsbGJhY2spOwogICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vV2ViUHJlZmVyZW5jZXMuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vV2ViUHJlZmVyZW5jZXMuY3BwCmluZGV4IDVlZWJmNTk2ZDk3NjI0ZDE5Yjdm
N2VkYzNlYWNhY2I0NmRiNzc1MTkuLjNiYzJjZGQ5ZjJhZTQxNzBjMzNhZDY0MTA2ZDRhN2YyZDA5
MDIxZjUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZl
cmVuY2VzLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJl
bmNlcy5jcHAKQEAgLTE1Niw5ICsxNTYsOSBAQCB0eXBlZGVmIHZvaWQgKCpTZXRGb250RmFtaWx5
V3JhcHBlcikoV2ViU2V0dGluZ3MqLCBjb25zdCBXZWJTdHJpbmcmLCBVU2NyaXB0Q29kZQogc3Rh
dGljIHZvaWQgYXBwbHlGb250TWFwKFdlYlNldHRpbmdzKiBzZXR0aW5ncywgY29uc3QgV2ViUHJl
ZmVyZW5jZXM6OlNjcmlwdEZvbnRGYW1pbHlNYXAmIG1hcCwgU2V0Rm9udEZhbWlseVdyYXBwZXIg
c2V0dGVyKQogewogICAgIGZvciAoV2ViUHJlZmVyZW5jZXM6OlNjcmlwdEZvbnRGYW1pbHlNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtYXAuYmVnaW4oKTsgaXRlciAhPSBtYXAuZW5kKCk7ICsr
aXRlcikgewotICAgICAgICBjb25zdCBXZWJTdHJpbmcmIGZvbnQgPSBpdGVyLT5zZWNvbmQ7Cisg
ICAgICAgIGNvbnN0IFdlYlN0cmluZyYgZm9udCA9IGl0ZXItPnZhbHVlOwogICAgICAgICBpZiAo
IWZvbnQuaXNOdWxsKCkgJiYgIWZvbnQuaXNFbXB0eSgpKQotICAgICAgICAgICAgKCpzZXR0ZXIp
KHNldHRpbmdzLCBmb250LCBzdGF0aWNfY2FzdDxVU2NyaXB0Q29kZT4oaXRlci0+Zmlyc3QpKTsK
KyAgICAgICAgICAgICgqc2V0dGVyKShzZXR0aW5ncywgZm9udCwgc3RhdGljX2Nhc3Q8VVNjcmlw
dENvZGU+KGl0ZXItPmtleSkpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vV2ViVmlld0hvc3QuY3BwCmluZGV4IDg3ZmFhZjI0ODg1MTVhMmRiY2M1Zjg2ZWQx
MTIwMDc4ZDNlODNkYmYuLjg1ZThhNzNmOTNmNTA5ZTA2YmRlZjFhZTFlOWI0YmNhYjM1MzNkYzMg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmNw
cAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5jcHAKQEAg
LTE3NjksNyArMTc2OSw3IEBAIHZvaWQgV2ViVmlld0hvc3Q6OnByaW50RnJhbWVVc2VyR2VzdHVy
ZVN0YXR1cyhXZWJGcmFtZSogd2ViZnJhbWUsIGNvbnN0IGNoYXIqIG1zCiB2b2lkIFdlYlZpZXdI
b3N0OjpwcmludFJlc291cmNlRGVzY3JpcHRpb24odW5zaWduZWQgaWRlbnRpZmllcikKIHsKICAg
ICBSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlSWRlbnRpZmllck1hcC5maW5k
KGlkZW50aWZpZXIpOwotICAgIHByaW50ZigiJXMiLCBpdCAhPSBtX3Jlc291cmNlSWRlbnRpZmll
ck1hcC5lbmQoKSA/IGl0LT5zZWNvbmQuY19zdHIoKSA6ICI8dW5rbm93bj4iKTsKKyAgICBwcmlu
dGYoIiVzIiwgaXQgIT0gbV9yZXNvdXJjZUlkZW50aWZpZXJNYXAuZW5kKCkgPyBpdC0+dmFsdWUu
Y19zdHIoKSA6ICI8dW5rbm93bj4iKTsKIH0KIAogdm9pZCBXZWJWaWV3SG9zdDo6c2V0UGVuZGlu
Z0V4dHJhRGF0YShQYXNzT3duUHRyPFRlc3RTaGVsbEV4dHJhRGF0YT4gZXh0cmFEYXRhKQpkaWZm
IC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW0gYi9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9tYWMvVGVzdFJ1bm5lck1hYy5tbQppbmRleCBhMjFlZDgwYWMxMWJl
NjM3MTMxZGZjZDQ2ZWZmNjRjNmQ1MjkwM2Y1Li5mYmU2YzQ5MDBjNWIwNDkwNmY1NGU0MmVhZjg1
ZDI3ZTZmZGM0ZmMwIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvVGVzdFJ1
bm5lck1hYy5tbQorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvVGVzdFJ1bm5lck1hYy5t
bQpAQCAtODkzLDggKzg5Myw4IEBAIHVuc2lnbmVkIHdvcmxkSURGb3JXb3JsZChXZWJTY3JpcHRX
b3JsZCAqd29ybGQpCiB7CiAgICAgV29ybGRNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHdvcmxk
TWFwKCkuZW5kKCk7CiAgICAgZm9yIChXb3JsZE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSB3b3Js
ZE1hcCgpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnNlY29u
ZCA9PSB3b3JsZCkKLSAgICAgICAgICAgIHJldHVybiBpdC0+Zmlyc3Q7CisgICAgICAgIGlmIChp
dC0+dmFsdWUgPT0gd29ybGQpCisgICAgICAgICAgICByZXR1cm4gaXQtPmtleTsKICAgICB9CiAK
ICAgICByZXR1cm4gMDsKQEAgLTkxNiw3ICs5MTYsNyBAQCB2b2lkIFRlc3RSdW5uZXI6OmV2YWx1
YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKHVuc2lnbmVkIHdvcmxkSUQsIEpTT2JqZWN0UmVmIGds
bwogICAgIGlmICghd29ybGRJRCkKICAgICAgICAgd29ybGQgPSBbV2ViU2NyaXB0V29ybGQgd29y
bGRdOwogICAgIGVsc2UgewotICAgICAgICBSZXRhaW5QdHI8V2ViU2NyaXB0V29ybGQ+JiB3b3Js
ZFNsb3QgPSB3b3JsZE1hcCgpLmFkZCh3b3JsZElELCAwKS5pdGVyYXRvci0+c2Vjb25kOworICAg
ICAgICBSZXRhaW5QdHI8V2ViU2NyaXB0V29ybGQ+JiB3b3JsZFNsb3QgPSB3b3JsZE1hcCgpLmFk
ZCh3b3JsZElELCAwKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgIGlmICghd29ybGRTbG90KQog
ICAgICAgICAgICAgd29ybGRTbG90LmFkb3B0TlMoW1tXZWJTY3JpcHRXb3JsZCBhbGxvY10gaW5p
dF0pOwogICAgICAgICB3b3JsZCA9IHdvcmxkU2xvdC5nZXQoKTsKZGlmZiAtLWdpdCBhL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL3dpbi9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlcldpbi5jcHAgYi9Ub29s
cy9EdW1wUmVuZGVyVHJlZS93aW4vQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJXaW4uY3BwCmluZGV4
IDdmOWFhNmNjMmVlOTI5YjJiZjhlYTQxNmY1ZDY1YmIwNTZlM2VhZDEuLmViMzhiNTQzNWMxNjlk
MmJkZmIwNTY4YzYzZWEyMDNiNWM2ZmEzZGMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL3dpbi9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlcldpbi5jcHAKKysrIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvd2luL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyV2luLmNwcApAQCAtNTgsNyArNTgs
NyBAQCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6fkFjY2Vzc2liaWxpdHlDb250cm9sbGVyKCkK
ICAgICAgICAgVW5ob29rV2luRXZlbnQobV9ub3RpZmljYXRpb25zRXZlbnRIb29rKTsKIAogICAg
IGZvciAoSGFzaE1hcDxQbGF0Zm9ybVVJRWxlbWVudCwgSlNPYmplY3RSZWY+OjppdGVyYXRvciBp
dCA9IG1fbm90aWZpY2F0aW9uTGlzdGVuZXJzLmJlZ2luKCk7IGl0ICE9IG1fbm90aWZpY2F0aW9u
TGlzdGVuZXJzLmVuZCgpOyArK2l0KQotICAgICAgICBKU1ZhbHVlVW5wcm90ZWN0KGZyYW1lLT5n
bG9iYWxDb250ZXh0KCksIGl0LT5zZWNvbmQpOworICAgICAgICBKU1ZhbHVlVW5wcm90ZWN0KGZy
YW1lLT5nbG9iYWxDb250ZXh0KCksIGl0LT52YWx1ZSk7CiB9CiAKIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmVsZW1lbnRBdFBvaW50KGludCB4LCBpbnQg
eSkKQEAgLTI5Myw3ICsyOTMsNyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpyZW1v
dmVOb3RpZmljYXRpb25MaXN0ZW5lcigpCiB2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjp3
aW5Ob3RpZmljYXRpb25SZWNlaXZlZChQbGF0Zm9ybVVJRWxlbWVudCBlbGVtZW50LCBjb25zdCBz
dHJpbmcmIGV2ZW50TmFtZSkKIHsKICAgICBmb3IgKEhhc2hNYXA8UGxhdGZvcm1VSUVsZW1lbnQs
IEpTT2JqZWN0UmVmPjo6aXRlcmF0b3IgaXQgPSBtX25vdGlmaWNhdGlvbkxpc3RlbmVycy5iZWdp
bigpOyBpdCAhPSBtX25vdGlmaWNhdGlvbkxpc3RlbmVycy5lbmQoKTsgKytpdCkgewotICAgICAg
ICBDT01QdHI8SVNlcnZpY2VQcm92aWRlcj4gdGhpc1NlcnZpY2VQcm92aWRlcihRdWVyeSwgaXQt
PmZpcnN0KTsKKyAgICAgICAgQ09NUHRyPElTZXJ2aWNlUHJvdmlkZXI+IHRoaXNTZXJ2aWNlUHJv
dmlkZXIoUXVlcnksIGl0LT5rZXkpOwogICAgICAgICBpZiAoIXRoaXNTZXJ2aWNlUHJvdmlkZXIp
CiAgICAgICAgICAgICBjb250aW51ZTsKIApAQCAtMzE2LDcgKzMxNiw3IEBAIHZvaWQgQWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXI6Ondpbk5vdGlmaWNhdGlvblJlY2VpdmVkKFBsYXRmb3JtVUlFbGVt
ZW50IGVsZW1lbnQsCiAKICAgICAgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGpzTm90aWZp
Y2F0aW9uKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhldmVudE5hbWUuY19z
dHIoKSkpOwogICAgICAgICBKU1ZhbHVlUmVmIGFyZ3VtZW50ID0gSlNWYWx1ZU1ha2VTdHJpbmco
ZnJhbWUtPmdsb2JhbENvbnRleHQoKSwganNOb3RpZmljYXRpb24uZ2V0KCkpOwotICAgICAgICBK
U09iamVjdENhbGxBc0Z1bmN0aW9uKGZyYW1lLT5nbG9iYWxDb250ZXh0KCksIGl0LT5zZWNvbmQs
IE5VTEwsIDEsICZhcmd1bWVudCwgTlVMTCk7CisgICAgICAgIEpTT2JqZWN0Q2FsbEFzRnVuY3Rp
b24oZnJhbWUtPmdsb2JhbENvbnRleHQoKSwgaXQtPnZhbHVlLCAwLCAxLCAmYXJndW1lbnQsIDAp
OwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1Jlc291
cmNlTG9hZERlbGVnYXRlLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9SZXNvdXJjZUxv
YWREZWxlZ2F0ZS5jcHAKaW5kZXggOTBiOWFlMGZjYzNmNjE3ZjRmZjY3NTU2MmRhMjk2ZWU1ZTJi
YmMzMy4uNjg1OTc4MGYzOTJmMThlMzA2NjFiMDQ5MjdiNGNjY2JmM2M0NzFhMiAxMDA2NDQKLS0t
IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1Jlc291cmNlTG9hZERlbGVnYXRlLmNwcAorKysg
Yi9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vUmVzb3VyY2VMb2FkRGVsZWdhdGUuY3BwCkBAIC02
Niw3ICs2Niw3IEBAIHdzdHJpbmcgUmVzb3VyY2VMb2FkRGVsZWdhdGU6OmRlc2NyaXB0aW9uU3Vp
dGFibGVGb3JUZXN0UmVzdWx0KHVuc2lnbmVkIGxvbmcgaWRlCiAgICAgaWYgKGl0ID09IG1fdXJs
TWFwLmVuZCgpKQogICAgICAgICByZXR1cm4gTCI8dW5rbm93bj4iOwogCi0gICAgcmV0dXJuIHVy
bFN1aXRhYmxlRm9yVGVzdFJlc3VsdChpdC0+c2Vjb25kKTsKKyAgICByZXR1cm4gdXJsU3VpdGFi
bGVGb3JUZXN0UmVzdWx0KGl0LT52YWx1ZSk7CiB9CiAKIHdzdHJpbmcgUmVzb3VyY2VMb2FkRGVs
ZWdhdGU6OmRlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KElXZWJVUkxSZXF1ZXN0KiBy
ZXF1ZXN0KQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1Rlc3RSdW5uZXJX
aW4uY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1Rlc3RSdW5uZXJXaW4uY3BwCmluZGV4
IGQzMzY1MWI3YWY2ZTQ1YzJiOWU1NjFiNGE3MTcxYjQ2YzllNjM3ZjEuLmNlNDQ2MDMzYjQ0OTFi
YTNjZDdlNTQ0NjBlMzQ1NzUwZWM0ZWE2ZDcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL3dpbi9UZXN0UnVubmVyV2luLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4v
VGVzdFJ1bm5lcldpbi5jcHAKQEAgLTEyNDYsOCArMTI0Niw4IEBAIHVuc2lnbmVkIHdvcmxkSURG
b3JXb3JsZChJV2ViU2NyaXB0V29ybGQqIHdvcmxkKQogewogICAgIFdvcmxkTWFwOjpjb25zdF9p
dGVyYXRvciBlbmQgPSB3b3JsZE1hcCgpLmVuZCgpOwogICAgIGZvciAoV29ybGRNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gd29ybGRNYXAoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAg
ICAgICAgaWYgKGl0LT5zZWNvbmQgPT0gd29ybGQpCi0gICAgICAgICAgICByZXR1cm4gaXQtPmZp
cnN0OworICAgICAgICBpZiAoaXQtPnZhbHVlID09IHdvcmxkKQorICAgICAgICAgICAgcmV0dXJu
IGl0LT5rZXk7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CkBAIC0xMjcxLDcgKzEyNzEsNyBAQCB2
b2lkIFRlc3RSdW5uZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKHVuc2lnbmVkIHdv
cmxkSUQsIEpTT2JqZWN0UmVmIGdsbwogICAgICAgICBpZiAoRkFJTEVEKFdlYktpdENyZWF0ZUlu
c3RhbmNlKF9fdXVpZG9mKFdlYlNjcmlwdFdvcmxkKSwgMCwgX191dWlkb2Yod29ybGQpLCByZWlu
dGVycHJldF9jYXN0PHZvaWQqKj4oJndvcmxkKSkpKQogICAgICAgICAgICAgcmV0dXJuOwogICAg
IH0gZWxzZSB7Ci0gICAgICAgIENPTVB0cjxJV2ViU2NyaXB0V29ybGQ+JiB3b3JsZFNsb3QgPSB3
b3JsZE1hcCgpLmFkZCh3b3JsZElELCAwKS5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICBDT01Q
dHI8SVdlYlNjcmlwdFdvcmxkPiYgd29ybGRTbG90ID0gd29ybGRNYXAoKS5hZGQod29ybGRJRCwg
MCkuaXRlcmF0b3ItPnZhbHVlOwogICAgICAgICBpZiAoIXdvcmxkU2xvdCAmJiBGQUlMRUQoV2Vi
S2l0Q3JlYXRlSW5zdGFuY2UoX191dWlkb2YoV2ViU2NyaXB0V29ybGQpLCAwLCBfX3V1aWRvZih3
b3JsZFNsb3QpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJndvcmxkU2xvdCkpKSkKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgd29ybGQgPSB3b3JsZFNsb3Q7CmRpZmYgLS1naXQgYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvRE9NV2luZG93RXh0ZW5zaW9uQmFzaWNf
QnVuZGxlLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9ET01XaW5kb3dF
eHRlbnNpb25CYXNpY19CdW5kbGUuY3BwCmluZGV4IDk4YmZhYjM1YWY0NmNmNDljNjJiY2M5YjBh
ODU5NDU3ZjQ4Y2MxYzEuLjViMTI5NmY0N2QxOWQyOGI5ZGU3ZmNlOGQxMzFhYTQwNTQ3NmJkZDEg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9ET01XaW5kb3dF
eHRlbnNpb25CYXNpY19CdW5kbGUuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Mi9ET01XaW5kb3dFeHRlbnNpb25CYXNpY19CdW5kbGUuY3BwCkBAIC0xNzEsOCArMTcx
LDggQEAgdm9pZCBET01XaW5kb3dFeHRlbnNpb25CYXNpYzo6d2lsbERlc3Ryb3lQYWdlKFdLQnVu
ZGxlUmVmLCBXS0J1bmRsZVBhZ2VSZWYpCiAgICAgSGFzaE1hcDxXS0J1bmRsZURPTVdpbmRvd0V4
dGVuc2lvblJlZiwgaW50Pjo6aXRlcmF0b3IgaXQgPSBtX2V4dGVuc2lvblRvUmVjb3JkTWFwLmJl
Z2luKCk7CiAgICAgSGFzaE1hcDxXS0J1bmRsZURPTVdpbmRvd0V4dGVuc2lvblJlZiwgaW50Pjo6
aXRlcmF0b3IgZW5kID0gbV9leHRlbnNpb25Ub1JlY29yZE1hcC5lbmQoKTsKICAgICBmb3IgKDsg
aXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIHVwZGF0ZUV4dGVuc2lvblN0YXRlUmVjb3JkKGl0
LT5maXJzdCwgUmVtb3ZlZCk7Ci0gICAgICAgIFdLUmVsZWFzZShpdC0+Zmlyc3QpOworICAgICAg
ICB1cGRhdGVFeHRlbnNpb25TdGF0ZVJlY29yZChpdC0+a2V5LCBSZW1vdmVkKTsKKyAgICAgICAg
V0tSZWxlYXNlKGl0LT5rZXkpOwogICAgIH0KIAogICAgIG1fZXh0ZW5zaW9uVG9SZWNvcmRNYXAu
Y2xlYXIoKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9E
T01XaW5kb3dFeHRlbnNpb25Ob0NhY2hlX0J1bmRsZS5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdDIvRE9NV2luZG93RXh0ZW5zaW9uTm9DYWNoZV9CdW5kbGUuY3BwCmluZGV4
IDhmNmNkN2IzNzM1YjVhZTI3OWQwYWRiNzcxODVjNWQyODA3MTFjYWUuLjQxMWUxMTVlYTQ0ZmJl
NDg3MGU3ZjFmMzFkOTA1ZTg1NzdmMDdlMjIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Mi9ET01XaW5kb3dFeHRlbnNpb25Ob0NhY2hlX0J1bmRsZS5jcHAKKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL0RPTVdpbmRvd0V4dGVuc2lvbk5v
Q2FjaGVfQnVuZGxlLmNwcApAQCAtMTc4LDggKzE3OCw4IEBAIHZvaWQgRE9NV2luZG93RXh0ZW5z
aW9uTm9DYWNoZTo6d2lsbERlc3Ryb3lQYWdlKFdLQnVuZGxlUmVmLCBXS0J1bmRsZVBhZ2VSZWYp
CiAgICAgSGFzaE1hcDxXS0J1bmRsZURPTVdpbmRvd0V4dGVuc2lvblJlZiwgaW50Pjo6aXRlcmF0
b3IgaXQgPSBtX2V4dGVuc2lvblRvUmVjb3JkTWFwLmJlZ2luKCk7CiAgICAgSGFzaE1hcDxXS0J1
bmRsZURPTVdpbmRvd0V4dGVuc2lvblJlZiwgaW50Pjo6aXRlcmF0b3IgZW5kID0gbV9leHRlbnNp
b25Ub1JlY29yZE1hcC5lbmQoKTsKICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAg
ICAgIHVwZGF0ZUV4dGVuc2lvblN0YXRlUmVjb3JkKGl0LT5maXJzdCwgUmVtb3ZlZCk7Ci0gICAg
ICAgIFdLUmVsZWFzZShpdC0+Zmlyc3QpOworICAgICAgICB1cGRhdGVFeHRlbnNpb25TdGF0ZVJl
Y29yZChpdC0+a2V5LCBSZW1vdmVkKTsKKyAgICAgICAgV0tSZWxlYXNlKGl0LT5rZXkpOwogICAg
IH0KIAogICAgIG1fZXh0ZW5zaW9uVG9SZWNvcmRNYXAuY2xlYXIoKTsKZGlmZiAtLWdpdCBhL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHAgYi9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwCmluZGV4IDYx
OTdhNzk0ZmQxOWFmMmQ1YjM3NWNhNzM5NDY1OWEwMjM1NDZlMDguLjU3NGE0ZGE0NTExOTdjZTNk
YzEzMjQyMjY5NTY4YzBjYjU4MWI3MGQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcApAQCAtNDkzLDggKzQ5Myw4IEBAIHVu
c2lnbmVkIFRlc3RSdW5uZXI6OndvcmxkSURGb3JXb3JsZChXS0J1bmRsZVNjcmlwdFdvcmxkUmVm
IHdvcmxkKQogewogICAgIFdvcmxkTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSB3b3JsZE1hcCgp
LmVuZCgpOwogICAgIGZvciAoV29ybGRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gd29ybGRNYXAo
KS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQgPT0g
d29ybGQpCi0gICAgICAgICAgICByZXR1cm4gaXQtPmZpcnN0OworICAgICAgICBpZiAoaXQtPnZh
bHVlID09IHdvcmxkKQorICAgICAgICAgICAgcmV0dXJuIGl0LT5rZXk7CiAgICAgfQogCiAgICAg
cmV0dXJuIDA7CkBAIC01MDgsNyArNTA4LDcgQEAgdm9pZCBUZXN0UnVubmVyOjpldmFsdWF0ZVNj
cmlwdEluSXNvbGF0ZWRXb3JsZChKU0NvbnRleHRSZWYgY29udGV4dCwgdW5zaWduZWQgd28KICAg
ICBpZiAoIXdvcmxkSUQpCiAgICAgICAgIHdvcmxkLmFkb3B0KFdLQnVuZGxlU2NyaXB0V29ybGRD
cmVhdGVXb3JsZCgpKTsKICAgICBlbHNlIHsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tCdW5kbGVT
Y3JpcHRXb3JsZFJlZj4mIHdvcmxkU2xvdCA9IHdvcmxkTWFwKCkuYWRkKHdvcmxkSUQsIDApLml0
ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgIFdLUmV0YWluUHRyPFdLQnVuZGxlU2NyaXB0V29ybGRS
ZWY+JiB3b3JsZFNsb3QgPSB3b3JsZE1hcCgpLmFkZCh3b3JsZElELCAwKS5pdGVyYXRvci0+dmFs
dWU7CiAgICAgICAgIGlmICghd29ybGRTbG90KQogICAgICAgICAgICAgd29ybGRTbG90LmFkb3B0
KFdLQnVuZGxlU2NyaXB0V29ybGRDcmVhdGVXb3JsZCgpKTsKICAgICAgICAgd29ybGQgPSB3b3Js
ZFNsb3Q7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167381</attachid>
            <date>2012-10-05 14:37:21 -0700</date>
            <delta_ts>2012-10-07 14:09:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-82784-20121005183629.patch</filename>
            <type>text/plain</type>
            <size>695299</size>
            <attacher name="Caio Marcelo de Oliveira Filho">cmarcelo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMwNTUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
MGViZTM3MDBlZDM3NDBmMDkwZDdiMDNiZTE4YWZiMzQ1NDdkMTEzLi45MWM4MGY1MGRlNDZmNDY5
NjM4NjYxZjdkZmY2YjVhYzMxNGRmZmQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMTggQEAKKzIwMTItMTAtMDUgIENhaW8gTWFyY2VsbyBkZSBPbGl2ZWlyYSBGaWxobyAg
PGNhaW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KKworICAgICAgICBSZW5hbWUgZmlyc3Qvc2Vj
b25kIHRvIGtleS92YWx1ZSBpbiBIYXNoTWFwIGl0ZXJhdG9ycworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI3ODQKKworICAgICAgICBSZXZpZXdlZCBi
eSBFcmljIFNlaWRlbC4KKworICAgICAgICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0Lmg6CisgICAg
ICAgIChKU0M6OkpTQ2FsbGJhY2tPYmplY3REYXRhOjpKU1ByaXZhdGVQcm9wZXJ0eU1hcDo6Z2V0
UHJpdmF0ZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNDYWxsYmFja09iamVjdERhdGE6OkpT
UHJpdmF0ZVByb3BlcnR5TWFwOjpzZXRQcml2YXRlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpK
U0NhbGxiYWNrT2JqZWN0RGF0YTo6SlNQcml2YXRlUHJvcGVydHlNYXA6OnZpc2l0Q2hpbGRyZW4p
OgorICAgICAgICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmg6CisgICAgICAgIChK
U0M6Ojo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBBUEkvSlNDbGFz
c1JlZi5jcHA6CisgICAgICAgIChPcGFxdWVKU0NsYXNzOjp+T3BhcXVlSlNDbGFzcyk6CisgICAg
ICAgIChPcGFxdWVKU0NsYXNzQ29udGV4dERhdGE6Ok9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YSk6
CisgICAgICAgIChPcGFxdWVKU0NsYXNzOjpjb250ZXh0RGF0YSk6CisgICAgICAgICogYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkdW1wKToKKyAgICAg
ICAgKEpTQzo6RXZhbENvZGVDYWNoZTo6dmlzaXRBZ2dyZWdhdGUpOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6Om5hbWVGb3JSZWdpc3Rlcik6CisgICAgICAgICogYnl0ZWNvZGUvSnVtcFRhYmxl
Lmg6CisgICAgICAgIChKU0M6OlN0cmluZ0p1bXBUYWJsZTo6b2Zmc2V0Rm9yVmFsdWUpOgorICAg
ICAgICAoSlNDOjpTdHJpbmdKdW1wVGFibGU6OmN0aUZvclZhbHVlKToKKyAgICAgICAgKiBieXRl
Y29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5jcHA6CisgICAgICAgIChKU0M6OkxhenlPcGVy
YW5kVmFsdWVQcm9maWxlUGFyc2VyOjpnZXRJZlByZXNlbnQpOgorICAgICAgICAqIGJ5dGVjb2Rl
L1NhbXBsaW5nVG9vbC5jcHA6CisgICAgICAgIChKU0M6OlNhbXBsaW5nVG9vbDo6ZHVtcCk6Cisg
ICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpT
Qzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmFkZFZhcik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2Vu
ZXJhdG9yOjphZGRHbG9iYWxWYXIpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6
YWRkQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6YWRkQ29uc3Rh
bnRWYWx1ZSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TG9hZCk6Cisg
ICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjphZGRTdHJpbmdDb25zdGFudCk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TGF6eU5ld0Z1bmN0aW9uKToKKyAgICAg
ICAgKiBieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcDoKKyAgICAgICAgKEpTQzo6UHJvcGVy
dHlMaXN0Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKiBkZWJ1Z2dlci9EZWJ1Z2dlci5j
cHA6CisgICAgICAgICogZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkFyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2U6OnJ1bik6Cisg
ICAgICAgIChKU0M6OkRGRzo6QXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZTo6b2JzZXJ2ZUJh
ZEFyZ3VtZW50c1VzZSk6CisgICAgICAgIChKU0M6OkRGRzo6QXJndW1lbnRzU2ltcGxpZmljYXRp
b25QaGFzZTo6b2JzZXJ2ZVByb3BlckFyZ3VtZW50c1VzZSk6CisgICAgICAgIChKU0M6OkRGRzo6
QXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZTo6aXNPS1RvT3B0aW1pemUpOgorICAgICAgICAo
SlNDOjpERkc6OkFyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2U6OnJlbW92ZUFyZ3VtZW50c1Jl
ZmVyZW5jaW5nUGhhbnRvbUNoaWxkKToKKyAgICAgICAgKiBkZmcvREZHQXNzZW1ibHlIZWxwZXJz
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBc3NlbWJseUhlbHBlcnM6OmRlY29kZWRDb2RlTWFw
Rm9yKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVDYWNoZS5oOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlQ2FjaGU6On5CeXRlQ29kZUNhY2hlKToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZUNhY2hlOjpnZXQpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmNlbGxDb25zdGFudCk6CisgICAg
ICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZVN0
YWNrRW50cnkpOgorICAgICAgICAqIGRmZy9ERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2Uu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZTo6cnVu
KToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2U6Om5vdGlj
ZVN0cnVjdHVyZUNoZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVDaGVja0hvaXN0
aW5nUGhhc2U6Om5vdGljZUNsb2JiZXIpOgorICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAg
ICAgIChKU0M6OkhlYXA6Om1hcmtQcm90ZWN0ZWRPYmplY3RzKToKKyAgICAgICAgKiBoZWFwL0hl
YXAuaDoKKyAgICAgICAgKEpTQzo6SGVhcDo6Zm9yRWFjaFByb3RlY3RlZENlbGwpOgorICAgICAg
ICAqIGhlYXAvSklUU3R1YlJvdXRpbmVTZXQuY3BwOgorICAgICAgICAoSlNDOjpKSVRTdHViUm91
dGluZVNldDo6bWFya1Nsb3cpOgorICAgICAgICAoSlNDOjpKSVRTdHViUm91dGluZVNldDo6ZGVs
ZXRlVW5tYXJrZWRKZXR0aXNvbmVkU3R1YlJvdXRpbmVzKToKKyAgICAgICAgKiBoZWFwL1Nsb3RW
aXNpdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmludGVybmFsQXBwZW5kKToK
KyAgICAgICAgKiBoZWFwL1dlYWsuaDoKKyAgICAgICAgKEpTQzo6d2Vha1JlbW92ZSk6CisgICAg
ICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGUpOgor
ICAgICAgICAqIGppdC9KSVRTdHVicy5jcHA6CisgICAgICAgIChKU0M6OkpJVFRodW5rczo6Y3Rp
U3R1Yik6CisgICAgICAgICogcGFyc2VyL1BhcnNlci5jcHA6CisgICAgICAgIChKU0M6Ojo6cGFy
c2VTdHJpY3RPYmplY3RMaXRlcmFsKToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlLmNwcDoK
KyAgICAgICAgKEpTQzo6ZnVuY3Rpb25OYW1lQ291bnRQYWlyQ29tcGFyYXRvcik6CisgICAgICAg
IChKU0M6OlByb2ZpbGU6OmRlYnVnUHJpbnREYXRhU2FtcGxlU3R5bGUpOgorICAgICAgICAqIHJ1
bnRpbWUvSWRlbnRpZmllci5jcHA6CisgICAgICAgIChKU0M6OklkZW50aWZpZXI6OmFkZCk6Cisg
ICAgICAgICogcnVudGltZS9KU0FjdGl2YXRpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0FjdGl2
YXRpb246OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6OkpTQWN0
aXZhdGlvbjo6c3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRlcyk6CisgICAgICAgICogcnVudGlt
ZS9KU0FycmF5LmNwcDoKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c2V0TGVuZ3RoKToKKyAgICAg
ICAgKiBydW50aW1lL0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93
blByb3BlcnR5U2xvdEJ5SW5kZXgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZW50ZXJEaWN0
aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHMpOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
ZGVmaW5lT3duSW5kZXhlZFByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmF0dGVt
cHRUb0ludGVyY2VwdFB1dEJ5SW5kZXhPbkhvbGVGb3JQcm90b3R5cGUpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2Up
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5n
dGhXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93blByb3Bl
cnR5RGVzY3JpcHRvcik6CisgICAgICAgICogcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNw
cDoKKyAgICAgICAgKEpTQzo6SlNTeW1ib2xUYWJsZU9iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9w
ZXJ0eU5hbWVzKToKKyAgICAgICAgKiBydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaDoKKyAg
ICAgICAgKEpTQzo6c3ltYm9sVGFibGVHZXQpOgorICAgICAgICAoSlNDOjpzeW1ib2xUYWJsZVB1
dCk6CisgICAgICAgIChKU0M6OnN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMpOgorICAgICAg
ICAqIHJ1bnRpbWUvUmVnRXhwQ2FjaGUuY3BwOgorICAgICAgICAoSlNDOjpSZWdFeHBDYWNoZTo6
aW52YWxpZGF0ZUNvZGUpOgorICAgICAgICAqIHJ1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5j
cHA6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OnB1dEVudHJ5KToKKyAgICAg
ICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6cHV0RGlyZWN0KToKKyAgICAgICAgKEpTQzo6
U3BhcnNlQXJyYXlWYWx1ZU1hcDo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogcnVudGltZS9X
ZWFrR0NNYXAuaDoKKyAgICAgICAgKEpTQzo6V2Vha0dDTWFwOjpjbGVhcik6CisgICAgICAgIChK
U0M6OldlYWtHQ01hcDo6c2V0KToKKyAgICAgICAgKiB0b29scy9Qcm9maWxlVHJlZU5vZGUuaDoK
KyAgICAgICAgKEpTQzo6UHJvZmlsZVRyZWVOb2RlOjpzYW1wbGVDaGlsZCk6CisgICAgICAgIChK
U0M6OlByb2ZpbGVUcmVlTm9kZTo6Y2hpbGRDb3VudCk6CisgICAgICAgIChKU0M6OlByb2ZpbGVU
cmVlTm9kZTo6ZHVtcEludGVybmFsKToKKyAgICAgICAgKEpTQzo6UHJvZmlsZVRyZWVOb2RlOjpj
b21wYXJlRW50cmllcyk6CisKIDIwMTItMTAtMDUgIE1hcmsgSGFobmVuYmVyZyAgPG1oYWhuZW5i
ZXJnQGFwcGxlLmNvbT4KIAogICAgICAgICBKU0Mgc2hvdWxkIGhhdmUgYSB3YXkgdG8gZ2F0aGVy
IGFuZCBsb2cgSGVhcCBtZW1vcnkgdXNlIGFuZCBwYXVzZSB0aW1lcwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCBiMDA1ZTMxYjRi
ZDE0ZjMyZjQwODQ1YWRmZjNlNGUyYjk2ZTBmZjczLi4xM2Q3ZDhiNjg2YTdlZDg5YmMxNzAzNjQ5
MDA5YmUwZTU4ZmEyMGFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY5IEBACisyMDEyLTEwLTA1ICBDYWlvIE1h
cmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gIDxjYWlvLm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+CisK
KyAgICAgICAgUmVuYW1lIGZpcnN0L3NlY29uZCB0byBrZXkvdmFsdWUgaW4gSGFzaE1hcCBpdGVy
YXRvcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgy
Nzg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCisKKyAgICAgICAgQ3VycmVu
dGx5IEhhc2hNYXAgaXRlcmF0b3JzIGZvbGxvdyB0aGUgc2FtZSBpbnRlcmZhY2UgaW4gc3RkOjpt
YXA6IGdpdmVuIGFuCisgICAgICAgIGl0ZXJhdG9yIGl0LCB3ZSB1c2UgaXQtPmZpcnN0IHRvIGFj
Y2VzcyB0aGUga2V5IGFuZCBpdC0+c2Vjb25kIHRvIGFjY2VzcyB0aGUKKyAgICAgICAgdmFsdWUu
IFRoaXMgcGF0Y2ggY2hhbmdlcyB0aGVzZSBhY2Nlc3NlcyB0byBpdC0+a2V5IGFuZCBpdC0+dmFs
dWUsIGltcHJvdmluZyB0aGUKKyAgICAgICAgcmVhZGFiaWxpdHkgYXQgY2FsbCBzaXRlcy4KKwor
ICAgICAgICBPbmUgcG90ZW50aWFsIGRvd25zaWRlIG9mIHRoaXMgY2hhbmdlIHdvdWxkIGJlIHRo
ZSBjb25mdXNpb24gYmV0d2VlbiBzdGQ6Om1hcCBhbmQKKyAgICAgICAgSGFzaE1hcCBpbnRlcmZh
Y2VzLiBIb3dldmVyLCB0aGV5IGFyZSBhbHJlYWR5IGRpZmZlcmVudCBpbiBvdGhlciBhc3BlY3Rz
IGFuZCB0aGUKKyAgICAgICAgdXNhZ2Ugb2Ygc3RkOjptYXAgaXMgbW9yZSBhbiBleGNlcHRpb24g
dGhhbiBhIHJ1bGUgaW4gV2ViS2l0IGNvZGUsIHNvIHdlIGNvbnNpZGVyCisgICAgICAgIHRoZSBj
b25mdXNpb24gd2lsbCBiZSBsZXNzIGxpa2VseSB0byBoYXBwZW4uCisKKyAgICAgICAgKiB3dGYv
SGFzaENvdW50ZWRTZXQuaDoKKyAgICAgICAgKFdURjo6OjphZGQpOgorICAgICAgICAoV1RGOjo6
OnJlbW92ZSk6CisgICAgICAgIChXVEY6OmNvcHlUb1ZlY3Rvcik6CisgICAgICAgICogd3RmL0hh
c2hJdGVyYXRvcnMuaDoKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlQ29uc3RLZXlzSXRlcmF0b3I6
OmdldCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZUNvbnN0VmFsdWVzSXRlcmF0b3I6OmdldCk6
CisgICAgICAgIChXVEY6Okhhc2hUYWJsZUtleXNJdGVyYXRvcjo6Z2V0KToKKyAgICAgICAgKFdU
Rjo6SGFzaFRhYmxlVmFsdWVzSXRlcmF0b3I6OmdldCk6CisgICAgICAgICogd3RmL0hhc2hNYXAu
aDoKKyAgICAgICAgKFdURjo6S2V5VmFsdWVQYWlyS2V5RXh0cmFjdG9yOjpleHRyYWN0KToKKyAg
ICAgICAgKFdURjo6SGFzaE1hcFZhbHVlVHJhaXRzOjppc0VtcHR5VmFsdWUpOgorICAgICAgICAo
V1RGOjpIYXNoTWFwVHJhbnNsYXRvcjo6dHJhbnNsYXRlKToKKyAgICAgICAgKFdURjo6SGFzaE1h
cFRyYW5zbGF0b3JBZGFwdGVyOjp0cmFuc2xhdGUpOgorICAgICAgICAoV1RGOjo6OnNldCk6Cisg
ICAgICAgIChXVEY6Ojo6Z2V0KToKKyAgICAgICAgKFdURjo6Ojp0YWtlKToKKyAgICAgICAgKFdU
Rjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXVEY6OmRlbGV0ZUFsbFZhbHVlcyk6CisgICAgICAg
IChXVEY6OmRlbGV0ZUFsbEtleXMpOgorICAgICAgICBSZW1vdmVkIGRlbGV0ZUFsbFBhaXJGaXJz
dHMoKSBhbmQgZGVsZXRlQWxsUGFpclNlY29uZHMoKSBzaW5jZSB0aGV5IGFyZSBub3cgdW51c2Vk
LgorCisgICAgICAgICogd3RmL0hhc2hUYWJsZS5oOgorICAgICAgICAoV1RGOjpoYXNoVGFibGVT
d2FwKToKKyAgICAgICAgKFdURjo6OjpjaGVja1RhYmxlQ29uc2lzdGVuY3lFeGNlcHRTaXplKToK
KyAgICAgICAgKiB3dGYvSGFzaFRyYWl0cy5oOgorICAgICAgICAoV1RGKToKKyAgICAgICAgKFdU
Rjo6S2V5VmFsdWVQYWlyOjpLZXlWYWx1ZVBhaXIpOgorICAgICAgICAoS2V5VmFsdWVQYWlyKToK
KyAgICAgICAgKFdURjo6S2V5VmFsdWVQYWlySGFzaFRyYWl0czo6Y29uc3RydWN0RGVsZXRlZFZh
bHVlKToKKyAgICAgICAgKFdURjo6S2V5VmFsdWVQYWlySGFzaFRyYWl0czo6aXNEZWxldGVkVmFs
dWUpOgorICAgICAgICAqIHd0Zi9NZXRhQWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKFdURjo6TWV0
YUFsbG9jYXRvcjo6YWRkRnJlZVNwYWNlKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6
aW5jcmVtZW50UGFnZU9jY3VwYW5jeSk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmRl
Y3JlbWVudFBhZ2VPY2N1cGFuY3kpOgorICAgICAgICAqIHd0Zi9SZWZDb3VudGVkTGVha0NvdW50
ZXIuY3BwOgorICAgICAgICAoV1RGOjpSZWZDb3VudGVkTGVha0NvdW50ZXI6On5SZWZDb3VudGVk
TGVha0NvdW50ZXIpOgorICAgICAgICAqIHd0Zi9SZWZQdHJIYXNoTWFwLmg6CisgICAgICAgIChX
VEY6Ojo6c2V0KToKKyAgICAgICAgKFdURjo6OjpnZXQpOgorICAgICAgICAoV1RGOjo6OmlubGlu
ZUdldCk6CisgICAgICAgIChXVEY6Ojo6dGFrZSk6CisgICAgICAgICogd3RmL1NwZWN0cnVtLmg6
CisgICAgICAgIChXVEY6OlNwZWN0cnVtOjphZGQpOgorICAgICAgICAoV1RGOjpTcGVjdHJ1bTo6
Z2V0KToKKyAgICAgICAgKFdURjo6U3BlY3RydW06OmJ1aWxkTGlzdCk6CisgICAgICAgICogd3Rm
L1RocmVhZGluZ1B0aHJlYWRzLmNwcDoKKyAgICAgICAgKFdURjo6aWRlbnRpZmllckJ5UHRocmVh
ZEhhbmRsZSk6CisKIDIwMTItMTAtMDUgIFNpbW9uIFBlbmEgIDxzcGVuYUBpZ2FsaWEuY29tPgog
CiAgICAgICAgIFtHVEtdIEFkZCBzdXBwb3J0IGZvciBHQnl0ZXMgaW4gR1JlZlB0cgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CmluZGV4IGE2MTgxMTAxZWNlMDZlY2FmYjRkYmVmZGE0NjdlMzc4Zjg4OWIwMGYuLmVjNjU3Yzg5
NmVhZWZjMzk2ZjJmMzE3ODE4ZjAzMjYzODM0ZWUwMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4
NDAgQEAKKzIwMTItMTAtMDUgIENhaW8gTWFyY2VsbyBkZSBPbGl2ZWlyYSBGaWxobyAgPGNhaW8u
b2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KKworICAgICAgICBSZW5hbWUgZmlyc3Qvc2Vjb25kIHRv
IGtleS92YWx1ZSBpbiBIYXNoTWFwIGl0ZXJhdG9ycworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI3ODQKKworICAgICAgICBSZXZpZXdlZCBieSBFcmlj
IFNlaWRlbC4KKworICAgICAgICAqIE1vZHVsZXMvZ2VvbG9jYXRpb24vR2VvbG9jYXRpb24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb246OldhdGNoZXJzOjpmaW5kKToKKyAgICAg
ICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uOjpXYXRjaGVyczo6cmVtb3ZlKToKKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJE
YXRhYmFzZTo6b2JqZWN0U3RvcmVOYW1lcyk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
SURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsOjptZXRhZGF0YSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURC
RmFjdG9yeUJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkZhY3RvcnlCYWNr
ZW5kSW1wbDo6ZGVsZXRlRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6SURCRmFjdG9yeUJh
Y2tlbmRJbXBsOjpvcGVuQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkZhY3Rv
cnlCYWNrZW5kSW1wbDo6b3Blbik6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2Jq
ZWN0U3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmluZGV4TmFt
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OnB1dCk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6aW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2Jq
ZWN0U3RvcmU6OmRlbGV0ZUluZGV4KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6Om1ldGFkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VJbmRleFdy
aXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVs
ZXRlSW50ZXJuYWwpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9u
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpvYmplY3RTdG9yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6b2JqZWN0U3RvcmVEZWxldGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpvbkFib3J0KToKKyAgICAgICAgKFdlYkNv
cmU6OklEQlRyYW5zYWN0aW9uOjpkaXNwYXRjaEV2ZW50KToKKyAgICAgICAgKiBNb2R1bGVzL21l
ZGlhc3RyZWFtL01lZGlhQ29uc3RyYWludHNJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhQ29uc3RyYWludHNJbXBsOjpnZXRNYW5kYXRvcnlDb25zdHJhaW50cyk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYUNvbnN0cmFpbnRzSW1wbDo6Z2V0TWFuZGF0b3J5Q29uc3RyYWludFZhbHVl
KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0Fic3RyYWN0RGF0YWJhc2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6cGVyZm9ybU9wZW5BbmRWZXJpZnkp
OgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6aW50ZXJydXB0QWxsRGF0YWJhc2VzRm9y
Q29udGV4dCk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9PcmlnaW5Vc2FnZVJlY29y
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpPcmlnaW5Vc2FnZVJlY29yZDo6ZGlza1VzYWdlKToK
KyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3Iu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6YWNxdWly
ZUxvY2spOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6cmVs
ZWFzZUxvY2spOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6
c2h1dGRvd24pOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvY2hyb21pdW0vRGF0YWJh
c2VUcmFja2VyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2Vy
OjppbnRlcnJ1cHRBbGxEYXRhYmFzZXNGb3JDb250ZXh0KToKKyAgICAgICAgKiBNb2R1bGVzL3dl
YmRhdGFiYXNlL2Nocm9taXVtL1F1b3RhVHJhY2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpR
dW90YVRyYWNrZXI6OmdldERhdGFiYXNlU2l6ZUFuZFNwYWNlQXZhaWxhYmxlVG9PcmlnaW4pOgor
ICAgICAgICAoV2ViQ29yZTo6UXVvdGFUcmFja2VyOjp1cGRhdGVEYXRhYmFzZVNpemUpOgorICAg
ICAgICAqIE1vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXREZWZsYXRlRnJhbWVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OldlYlNvY2tldEV4dGVuc2lvbkRlZmxhdGVGcmFtZTo6cHJvY2Vzc1Jl
c3BvbnNlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0RXh0ZW5zaW9u
RGlzcGF0Y2hlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRFeHRlbnNpb25EaXNw
YXRjaGVyOjphcHBlbmRBY2NlcHRlZEV4dGVuc2lvbik6CisgICAgICAgICogYWNjZXNzaWJpbGl0
eS9BWE9iamVjdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6On5B
WE9iamVjdENhY2hlKToKKyAgICAgICAgKiBiaW5kaW5ncy9nb2JqZWN0L0RPTU9iamVjdENhY2hl
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmNsZWFyQnlGcmFtZSk6Cisg
ICAgICAgICogYmluZGluZ3MvanMvRE9NT2JqZWN0SGFzaFRhYmxlTWFwLmg6CisgICAgICAgIChX
ZWJDb3JlOjpET01PYmplY3RIYXNoVGFibGVNYXA6On5ET01PYmplY3RIYXNoVGFibGVNYXApOgor
ICAgICAgICAoV2ViQ29yZTo6RE9NT2JqZWN0SGFzaFRhYmxlTWFwOjpnZXQpOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjYWNoZURP
TVN0cnVjdHVyZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SlNET01HbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4pOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0Lmg6CisgICAgICAgIChXZWJD
b3JlOjpnZXRET01Db25zdHJ1Y3Rvcik6CisgICAgICAgICogYmluZGluZ3MvanMvUGFnZVNjcmlw
dERlYnVnU2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VTY3JpcHREZWJ1Z1NlcnZl
cjo6YWRkTGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZVNjcmlwdERlYnVnU2VydmVy
OjpyZW1vdmVMaXN0ZW5lcik6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0Q2FjaGVkRnJh
bWVEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENhY2hlZEZyYW1lRGF0YTo6U2Ny
aXB0Q2FjaGVkRnJhbWVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENhY2hlZEZyYW1l
RGF0YTo6cmVzdG9yZSk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjp+U2NyaXB0Q29udHJvbGxl
cik6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpjbGVhcldpbmRvd1NoZWxs
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmF0dGFjaERlYnVnZ2VyKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OnVwZGF0ZURvY3VtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmNyZWF0ZVJvb3RPYmplY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6Y29sbGVjdElzb2xhdGVkQ29udGV4dHMp
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6Y2xlYW51cFNjcmlwdE9iamVj
dHNGb3JQbHVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6Y2xlYXJT
Y3JpcHRPYmplY3RzKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmg6
CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjp3aW5kb3dTaGVsbCk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpleGlzdGluZ1dpbmRvd1NoZWxsKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0QnJlYWtwb2ludCk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JpcHREZWJ1Z1NlcnZlcjo6cmVtb3ZlQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JpcHREZWJ1Z1NlcnZlcjo6aGFzQnJlYWtwb2ludCk6CisgICAgICAgICogYmluZGluZ3Mv
anMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lU2Vy
aWFsaXplcjo6Y2hlY2tGb3JEdXBsaWNhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVTZXJp
YWxpemVyOjpkdW1wSWZUZXJtaW5hbCk6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZVNlcmlhbGl6
ZXI6OndyaXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5w
bToKKyAgICAgICAgKEdlbmVyYXRlSW1wbGVtZW50YXRpb24pOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9WOC9WOEZsb2F0NjRBcnJheS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpW
OEZsb2F0NjRBcnJheTo6R2V0UmF3VGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhGbG9h
dDY0QXJyYXk6OkdldFRlbXBsYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VjgvVjhUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdEFj
dGl2ZURPTU9iamVjdDo6R2V0UmF3VGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0
QWN0aXZlRE9NT2JqZWN0OjpHZXRUZW1wbGF0ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Y4L1Y4VGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlY4VGVzdEN1c3RvbU5hbWVkR2V0dGVyOjpHZXRSYXdUZW1wbGF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpWOFRlc3RDdXN0b21OYW1lZEdldHRlcjo6R2V0VGVtcGxhdGUpOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudENvbnN0cnVjdG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlY4VGVzdEV2ZW50Q29uc3RydWN0b3I6OkdldFJhd1RlbXBsYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlY4VGVzdEV2ZW50Q29uc3RydWN0b3I6OkdldFRlbXBsYXRlKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRUYXJnZXQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6VjhUZXN0RXZlbnRUYXJnZXQ6OkdldFJhd1RlbXBsYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlY4VGVzdEV2ZW50VGFyZ2V0OjpHZXRUZW1wbGF0ZSk6CisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV4Y2VwdGlvbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpWOFRlc3RFeGNlcHRpb246OkdldFJhd1RlbXBsYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OlY4VGVzdEV4Y2VwdGlvbjo6R2V0VGVtcGxhdGUpOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RJbnRlcmZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VjhUZXN0SW50ZXJmYWNlOjpHZXRSYXdUZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOFRl
c3RJbnRlcmZhY2U6OkdldFRlbXBsYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVjgvVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpWOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjpHZXRSYXdUZW1wbGF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpWOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjpHZXRUZW1wbGF0ZSk6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5hbWVkQ29uc3RydWN0b3Iu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6R2V0UmF3VGVt
cGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6R2V0VGVt
cGxhdGUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROb2RlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdE5vZGU6OkdldFJhd1RlbXBsYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlY4VGVzdE5vZGU6OkdldFRlbXBsYXRlKToKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVz
dE9iajo6R2V0UmF3VGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0T2JqOjpHZXRU
ZW1wbGF0ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OkdldFJhd1RlbXBsYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlY4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6R2V0VGVtcGxh
dGUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L0RPTVdyYXBwZXJXb3JsZC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpET01XcmFwcGVyV29ybGQ6OmRlYWxsb2NhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6RE9NV3JhcHBlcldvcmxkOjplbnN1cmVJc29sYXRlZFdvcmxkKToKKyAgICAgICAgKiBiaW5k
aW5ncy92OC9OUFY4T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZyZWVWOE5QT2JqZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6Om5wQ3JlYXRlVjhTY3JpcHRPYmplY3QpOgorICAgICAgICAq
IGJpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
aXB0Q29udHJvbGxlcjo6Y2xlYXJTY3JpcHRPYmplY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cmlwdENvbnRyb2xsZXI6OnJlc2V0SXNvbGF0ZWRXb3JsZHMpOgorICAgICAgICAoV2ViQ29yZTo6
U2NyaXB0Q29udHJvbGxlcjo6ZW5zdXJlSXNvbGF0ZWRXb3JsZENvbnRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6ZXhpc3RpbmdXaW5kb3dTaGVsbEludGVybmFsKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5Jc29sYXRlZFdv
cmxkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OnNldElzb2xhdGVkV29y
bGRTZWN1cml0eU9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpj
bGVhbnVwU2NyaXB0T2JqZWN0c0ZvclBsdWdpbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRD
b250cm9sbGVyOjpjb2xsZWN0SXNvbGF0ZWRDb250ZXh0cyk6CisgICAgICAgICogYmluZGluZ3Mv
djgvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOERP
TU1hcC5oOgorICAgICAgICAoV2ViQ29yZTo6V2Vha1JlZmVyZW5jZU1hcDo6cmVtb3ZlSWZQcmVz
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OldlYWtSZWZlcmVuY2VNYXA6OnZpc2l0KToKKyAgICAg
ICAgKiBiaW5kaW5ncy92OC9WOFBlckNvbnRleHREYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlY4UGVyQ29udGV4dERhdGE6OmRpc3Bvc2UpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L25wcnVu
dGltZS5jcHA6CisgICAgICAgICogYnJpZGdlL0lkZW50aWZpZXJSZXAuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SWRlbnRpZmllclJlcDo6Z2V0KToKKyAgICAgICAgKiBicmlkZ2UvTlBfanNvYmpl
Y3QuY3BwOgorICAgICAgICAoT2JqZWN0TWFwOjphZGQpOgorICAgICAgICAoT2JqZWN0TWFwOjpy
ZW1vdmUpOgorICAgICAgICAqIGJyaWRnZS9ydW50aW1lX3Jvb3QuY3BwOgorICAgICAgICAoSlND
OjpCaW5kaW5nczo6Um9vdE9iamVjdDo6aW52YWxpZGF0ZSk6CisgICAgICAgICogY3NzL0NTU0Nh
bnZhc1ZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbnZhc1ZhbHVlOjpjYW52YXND
aGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbnZhc1ZhbHVlOjpjYW52YXNSZXNpemVk
KToKKyAgICAgICAgKiBjc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmNvdW50ZXJUb0NTU1ZhbHVlKToKKyAgICAgICAgKiBjc3MvQ1NTQ3Jvc3Nm
YWRlVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ3Jvc3NmYWRlVmFsdWU6OmNyb3Nz
ZmFkZUNoYW5nZWQpOgorICAgICAgICAqIGNzcy9DU1NGb250RmFjZVNvdXJjZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NGb250RmFjZVNvdXJjZTo6Z2V0Rm9udERhdGEpOgorICAgICAgICAq
IGNzcy9DU1NGb250U2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVj
dG9yOjphZGRGb250RmFjZVJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9y
OjpnZXRGb250RGF0YSk6CisgICAgICAgICogY3NzL0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6YWRkQ2xpZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU0ltYWdlR2VuZXJhdG9yVmFsdWU6OnJlbW92ZUNsaWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjpnZXRJbWFnZSk6Cisg
ICAgICAgICogY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1NlZ21lbnRlZEZvbnRGYWNlOjpnZXRGb250RGF0YSk6CisgICAgICAgICogY3NzL0NTU1Nl
bGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1NlbGVjdG9yOjpwYXJzZVBzZXVkb1R5
cGUpOgorICAgICAgICAqIGNzcy9DU1NWYWx1ZVBvb2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTVmFsdWVQb29sOjpjcmVhdGVDb2xvclZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Zh
bHVlUG9vbDo6Y3JlYXRlRm9udEZhbWlseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Zh
bHVlUG9vbDo6Y3JlYXRlRm9udEZhY2VWYWx1ZSk6CisgICAgICAgICogY3NzL1Byb3BlcnR5U2V0
Q1NTU3R5bGVEZWNsYXJhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0eVNldENT
U1N0eWxlRGVjbGFyYXRpb246OmNsb25lQW5kQ2FjaGVGb3JDU1NPTSk6CisgICAgICAgICogY3Nz
L1J1bGVTZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cmVwb3J0QXRvbVJ1bGVNYXApOgorICAg
ICAgICAoV2ViQ29yZTo6UnVsZVNldDo6YWRkVG9SdWxlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6
OnNocmlua01hcFZlY3RvcnNUb0ZpdCk6CisgICAgICAgICogY3NzL1N0eWxlQnVpbGRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Q291bnRlcjo6YXBwbHlJbmhlcml0VmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUNvdW50ZXI6OmFwcGx5VmFsdWUp
OgorICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6OmNvbGxlY3RGZWF0dXJlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJl
c29sdmVyOjpydWxlU2V0Rm9yU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6YXBwZW5kQXV0aG9yU3R5bGVzaGVldHMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6c3dlZXBNYXRjaGVkUHJvcGVydGllc0NhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdCk6CisgICAgICAgICogY3Nz
L1N0eWxlU2hlZXRDb250ZW50cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0Q29u
dGVudHM6OnBhcnNlckFkZE5hbWVzcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0
Q29udGVudHM6OmRldGVybWluZU5hbWVzcGFjZSk6CisgICAgICAgICogZG9tL0NoZWNrZWRSYWRp
b0J1dHRvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hlY2tlZFJhZGlvQnV0dG9uczo6YWRk
QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNoZWNrZWRSYWRpb0J1dHRvbnM6OnJlbW92ZUJ1
dHRvbik6CisgICAgICAgICogZG9tL0NoaWxkTGlzdE11dGF0aW9uU2NvcGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q2hpbGRMaXN0TXV0YXRpb25BY2N1bXVsYXRvcjo6Z2V0T3JDcmVhdGUpOgor
ICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6
d2luZG93TmFtZWRJdGVtcyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6ZG9jdW1lbnRO
YW1lZEl0ZW1zKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpnZXRDU1NDYW52YXNFbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpjYWNoZWRJbW11dGFibGVBdHRyaWJ1
dGVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpnZXRDYWNoZWRMb2NhbGl6ZXIp
OgorICAgICAgICAqIGRvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjptYXJrZXJDb250YWluaW5nUG9pbnQp
OgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW5kZXJlZFJl
Y3RzRm9yTWFya2Vycyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXI6OnJlbW92ZU1hcmtlcnMpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250
cm9sbGVyOjpyZXBhaW50TWFya2Vycyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtl
ckNvbnRyb2xsZXI6OmludmFsaWRhdGVSZW5kZXJlZFJlY3RzRm9yTWFya2Vyc0luUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnNob3dNYXJrZXJzKToK
KyAgICAgICAgKiBkb20vRG9jdW1lbnRPcmRlcmVkTWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50T3JkZXJlZE1hcDo6cmVtb3ZlKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnRTdHls
ZVNoZWV0Q29sbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFN0eWxlU2hl
ZXRDb2xsZWN0aW9uOjpwYWdlR3JvdXBVc2VyU2hlZXRzKToKKyAgICAgICAgKiBkb20vRWxlbWVu
dEF0dHJpYnV0ZURhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZW5zdXJlQXR0ckxpc3RGb3JF
bGVtZW50KToKKyAgICAgICAgKiBkb20vRXZlbnREaXNwYXRjaGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkV2ZW50UmVsYXRlZFRhcmdldEFkanVzdGVyOjpmaW5kUmVsYXRlZFRhcmdldCk6Cisg
ICAgICAgICogZG9tL0lkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJZFRhcmdldE9ic2VydmVyUmVnaXN0cnk6OmFkZE9ic2VydmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OklkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeTo6cmVtb3ZlT2JzZXJ2ZXIpOgorICAgICAg
ICAqIGRvbS9NdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpNdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cDo6aXNPbGRWYWx1ZVJlcXVlc3RlZCk6
CisgICAgICAgIChXZWJDb3JlOjpNdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cDo6ZW5xdWV1
ZU11dGF0aW9uUmVjb3JkKToKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpOb2RlOjpkdW1wU3RhdGlzdGljcyk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpjbGVh
clJhcmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVMaXN0c05vZGVEYXRhOjppbnZhbGlk
YXRlQ2FjaGVzKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbGxlY3RNYXRjaGluZ09ic2VydmVyc0Zv
ck11dGF0aW9uKToKKyAgICAgICAgKiBkb20vTm9kZVJhcmVEYXRhLmg6CisgICAgICAgIChXZWJD
b3JlOjpOb2RlTGlzdHNOb2RlRGF0YTo6YWRkQ2FjaGVXaXRoQXRvbWljTmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpOb2RlTGlzdHNOb2RlRGF0YTo6YWRkQ2FjaGVXaXRoTmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpOb2RlTGlzdHNOb2RlRGF0YTo6YWRkQ2FjaGVXaXRoUXVhbGlmaWVkTmFtZSk6
CisgICAgICAgIChXZWJDb3JlOjpOb2RlTGlzdHNOb2RlRGF0YTo6YWRvcHRUcmVlU2NvcGUpOgor
ICAgICAgICAqIGRvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UHJvY2Vzc2luZ0luc3RydWN0aW9uOjpjaGVja1N0eWxlU2hlZXQpOgorICAgICAgICAqIGRv
bS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQ6OmNhblN1c3BlbmRBY3RpdmVET01PYmplY3RzKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnN1c3BlbmRBY3RpdmVET01PYmplY3RzKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnJlc3VtZUFjdGl2ZURP
TU9iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6c3Rv
cEFjdGl2ZURPTU9iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29u
dGV4dDo6YWRqdXN0TWluaW11bVRpbWVySW50ZXJ2YWwpOgorICAgICAgICAqIGRvbS9TZWxlY3Rv
clF1ZXJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yUXVlcnlDYWNoZTo6YWRkKToK
KyAgICAgICAgKiBkb20vU3BhY2VTcGxpdFN0cmluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
cGFjZVNwbGl0U3RyaW5nRGF0YTo6Y3JlYXRlKToKKyAgICAgICAgKiBkb20vU3R5bGVkRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRFbGVtZW50Ojp1cGRhdGVBdHRyaWJ1dGVT
dHlsZSk6CisgICAgICAgICogZWRpdGluZy9tYWMvQWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVy
Lm1tOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyOjpBbGVy
bmF0aXZlVGV4dENvbnRleHRDb250cm9sbGVyOjphbHRlcm5hdGl2ZXNGb3JDb250ZXh0KToKKyAg
ICAgICAgKiBodG1sL0Zvcm1Db250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNhdmVk
Rm9ybVN0YXRlOjpzZXJpYWxpemVUbyk6CisgICAgICAgIChXZWJDb3JlOjpTYXZlZEZvcm1TdGF0
ZTo6YXBwZW5kQ29udHJvbFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNhdmVkRm9ybVN0YXRl
Ojp0YWtlQ29udHJvbFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNhdmVkRm9ybVN0YXRlOjpn
ZXRSZWZlcmVuY2VkRmlsZVBhdGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1LZXlHZW5lcmF0
b3I6OmZvcm1LZXkpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUNvbnRyb2xsZXI6OmNyZWF0ZVNh
dmVkRm9ybVN0YXRlTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1Db250cm9sbGVyOjpmb3Jt
RWxlbWVudHNTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtQ29udHJvbGxlcjo6dGFrZVN0
YXRlRm9yRm9ybUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUNvbnRyb2xsZXI6Omdl
dFJlZmVyZW5jZWRGaWxlUGF0aHMpOgorICAgICAgICAqIGh0bWwvSFRNTENvbGxlY3Rpb24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbGxlY3Rpb25DYWNoZUJhc2U6OmFwcGVuZCk6Cisg
ICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTEZyYW1lYnVmZmVyOjpnZXRBdHRhY2htZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMRnJhbWVidWZmZXI6OnJlbW92ZUF0dGFjaG1lbnRGcm9tQm91bmRGcmFtZWJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTEZyYW1lYnVmZmVyOjpjaGVja1N0YXR1cyk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTEZyYW1lYnVmZmVyOjpkZWxldGVPYmplY3RJbXBsKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMRnJhbWVidWZmZXI6OmluaXRpYWxpemVBdHRhY2htZW50cyk6Cisg
ICAgICAgICogaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHk6CisgICAgICAgICog
aW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01QYXRj
aFN1cHBvcnQ6OmRpZmYpOgorICAgICAgICAoV2ViQ29yZTo6RE9NUGF0Y2hTdXBwb3J0Ojppbm5l
clBhdGNoQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6RE9NUGF0Y2hTdXBwb3J0OjpyZW1v
dmVDaGlsZEFuZE1vdmVUb05ldyk6CisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0
TWFuYWdlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmplY3RlZFNjcmlwdE1hbmFnZXI6Omlu
amVjdGVkU2NyaXB0Rm9ySWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5qZWN0ZWRTY3JpcHRNYW5h
Z2VyOjppbmplY3RlZFNjcmlwdElkRm9yKToKKyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2Ny
aXB0TWFuYWdlcjo6ZGlzY2FyZEluamVjdGVkU2NyaXB0c0Zvcik6CisgICAgICAgIChXZWJDb3Jl
OjpJbmplY3RlZFNjcmlwdE1hbmFnZXI6OnJlbGVhc2VPYmplY3RHcm91cCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbmplY3RlZFNjcmlwdE1hbmFnZXI6OmluamVjdGVkU2NyaXB0Rm9yKToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U2VsZWN0b3JQcm9maWxlOjpjb21taXRTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpTZWxl
Y3RvclByb2ZpbGU6OmNvbW1pdFNlbGVjdG9yVGltZSk6CisgICAgICAgIChXZWJDb3JlOjpTZWxl
Y3RvclByb2ZpbGU6OnRvSW5zcGVjdG9yT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlVwZGF0
ZVJlZ2lvbkxheW91dFRhc2s6Om9uVGltZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
Q1NTQWdlbnQ6OmZvcmNlUHNldWRvU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
Q1NTQWdlbnQ6OmFzSW5zcGVjdG9yU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JDU1NBZ2VudDo6YXNzZXJ0U3R5bGVTaGVldEZvcklkKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckNTU0FnZW50OjpkaWRSZW1vdmVET01Ob2RlKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckNTU0FnZW50OjpkaWRNb2RpZnlET01BdHRyKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckNTU0FnZW50OjpyZXNldFBzZXVkb1N0YXRlcyk6CisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3RvckNvbnNvbGVBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JDb25zb2xlQWdlbnQ6OnN0b3BUaW1pbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
Q29uc29sZUFnZW50Ojpjb3VudCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTUFn
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50Ojpub2RlRm9ySWQp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OnBlcmZvcm1TZWFyY2gpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmdldFNlYXJjaFJlc3VsdHMpOgor
ICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OndpbGxTZW5kWE1MSHR0cFJl
cXVlc3QpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpjbGVhckZyb250
ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6ZW5hYmxl
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6c3RvcmFnZUlk
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6Z2V0RE9NU3Rv
cmFnZVJlc291cmNlRm9ySWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NU3RvcmFn
ZUFnZW50OjpkaWRVc2VET01TdG9yYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRP
TVN0b3JhZ2VBZ2VudDo6bWVtb3J5Qnl0ZXNVc2VkQnlTdG9yYWdlQ2FjaGUpOgorICAgICAgICAq
IGluc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmVuYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JEYXRhYmFzZUFnZW50OjpkYXRhYmFzZUlkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckRhdGFiYXNlQWdlbnQ6OmZpbmRCeUZpbGVOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckRhdGFiYXNlQWdlbnQ6OmRhdGFiYXNlRm9ySWQpOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnRCeVVybCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZW1vdmVCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnJlc29sdmVCcmVha3BvaW50KToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNlYXJjaEluQ29udGVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpnZXRTY3JpcHRTb3VyY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkUGFyc2VTb3VyY2Up
OgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yTWVtb3J5QWdlbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclBh
Z2VBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjYWNoZWRSZXNvdXJjZXNGb3JGcmFtZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6OmRpZENsZWFyV2luZG93T2Jq
ZWN0SW5Xb3JsZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6OmZyYW1l
RGV0YWNoZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmdldFByb2ZpbGVI
ZWFkZXJzKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
UHJvZmlsZXJBZ2VudDo6Z2V0UHJvZmlsZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
clJlc291cmNlQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRPYmplY3RGb3JIZWFk
ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlc291cmNlQWdlbnQ6OndpbGxTZW5k
UmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXNvdXJjZUFnZW50Ojpkb2N1
bWVudFRocmVhZGFibGVMb2FkZXJTdGFydGVkTG9hZGluZ0ZvckNsaWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JSZXNvdXJjZUFnZW50Ojp3aWxsTG9hZFhIUik6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpyZXBsYXlYSFIpOgorICAgICAgICAqIGlu
c3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JT
dGF0ZTo6Z2V0Qm9vbGVhbik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdGF0ZTo6Z2V0
U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0YXRlOjpnZXRMb25nKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0YXRlOjpnZXREb3VibGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yU3RhdGU6OmdldE9iamVjdCk6CisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3RvclN0eWxlU2hlZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGU6
OnN0eWxlV2l0aFByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVT
aGVldDo6aW5zcGVjdG9yU3R5bGVGb3JJZCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
clZhbHVlcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPYmplY3RCYXNlOjpnZXQp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT2JqZWN0QmFzZTo6d3JpdGVKU09OKToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yV29ya2VyQWdlbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yV29ya2VyQWdlbnQ6OndvcmtlckNvbnRleHRUZXJtaW5hdGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvcldvcmtlckFnZW50OjpjcmVhdGVXb3JrZXJGcm9udGVu
ZENoYW5uZWxzRm9yRXhpc3RpbmdXb3JrZXJzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
cldvcmtlckFnZW50OjpkZXN0cm95V29ya2VyRnJvbnRlbmRDaGFubmVscyk6CisgICAgICAgICog
aW5zcGVjdG9yL01lbW9yeUluc3RydW1lbnRhdGlvbkltcGwuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TWVtb3J5SW5zdHJ1bWVudGF0aW9uQ2xpZW50SW1wbDo6Y291bnRPYmplY3RTaXplKToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbC5oOgorICAgICAgICAo
V2ViQ29yZTo6TWVtb3J5SW5zdHJ1bWVudGF0aW9uQ2xpZW50SW1wbDo6dG90YWxTaXplKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lbW9yeUluc3RydW1lbnRhdGlvbkNsaWVudEltcGw6OnJlcG9ydGVk
U2l6ZUZvckFsbFR5cGVzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvTmV0d29ya1Jlc291cmNlc0Rh
dGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1Jlc291cmNlc0RhdGE6OnNldFhIUlJl
cGxheURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1Jlc291cmNlc0RhdGE6OnJlbW92
ZUNhY2hlZFJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtSZXNvdXJjZXNEYXRh
OjpjbGVhcik6CisgICAgICAgICogbG9hZGVyL0Nyb3NzT3JpZ2luQWNjZXNzQ29udHJvbC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjppc1NpbXBsZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVzdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpjcmVhdGVBY2Nlc3NDb250cm9sUHJlZmxpZ2h0UmVxdWVzdCk6Cisg
ICAgICAgICogbG9hZGVyL0Nyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZUl0ZW06OmFsbG93
c0Nyb3NzT3JpZ2luSGVhZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpDcm9zc09yaWdpblByZWZs
aWdodFJlc3VsdENhY2hlOjpjYW5Ta2lwUHJlZmxpZ2h0KToKKyAgICAgICAgKiBsb2FkZXIvRG9j
dW1lbnRMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI6OmdldFN1
YnJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6c3Vic3RpdHV0
ZVJlc291cmNlRGVsaXZlcnlUaW1lckZpcmVkKToKKyAgICAgICAgKiBsb2FkZXIvTWFpblJlc291
cmNlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1haW5SZXNvdXJjZUxvYWRlcjo6ZGlk
UmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2VydmVQZW5k
aW5nUmVxdWVzdHMpOgorICAgICAgICAqIGxvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGU6OnJlbW92ZVJlc291cmNl
KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGU6OmNsZWFyU3RvcmFnZUlEKToK
KyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGU6OmR1bXApOgorICAgICAgICAqIGxv
YWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwbGljYXRpb25DYWNoZUdyb3VwOjpkaWRGaW5pc2hMb2FkaW5nTWFuaWZlc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUdyb3VwOjpzdGFydExvYWRpbmdFbnRyeSk6
CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmFkZEVudHJ5KToKKyAg
ICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUhvc3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUhvc3Q6OmZpbGxSZXNvdXJjZUxpc3QpOgorICAg
ICAgICAqIGxvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVJlc291cmNlOjplc3RpbWF0ZWRTaXplSW5T
dG9yYWdlKToKKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3Jh
Z2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmZpbmRP
ckNyZWF0ZUNhY2hlR3JvdXApOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0
b3JhZ2U6OmNhY2hlR3JvdXBGb3JVUkwpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25D
YWNoZVN0b3JhZ2U6OmZhbGxiYWNrQ2FjaGVHcm91cEZvclVSTCk6CisgICAgICAgIChXZWJDb3Jl
OjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6QXBw
bGljYXRpb25DYWNoZVN0b3JhZ2U6OmVtcHR5KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0
aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZUNvcHlPZkNhY2hlKToKKyAgICAgICAgKiBsb2FkZXIvYXJj
aGl2ZS9BcmNoaXZlRmFjdG9yeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcmNoaXZlRmFjdG9y
eTo6cmVnaXN0ZXJLbm93bkFyY2hpdmVNSU1FVHlwZXMpOgorICAgICAgICAqIGxvYWRlci9jYWNo
ZS9DYWNoZWRSYXdSZXNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSYXdSZXNv
dXJjZTo6Y2FuUmV1c2UpOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZTo6c3dpdGNoQ2xpZW50c1RvUmV2
YWxpZGF0ZWRSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZTo6dXBk
YXRlUmVzcG9uc2VBZnRlclJldmFsaWRhdGlvbik6CisgICAgICAgICogbG9hZGVyL2NhY2hlL0Nh
Y2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNv
dXJjZUNsaWVudFdhbGtlcjo6Q2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIpOgorICAgICAgICAq
IGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDYWNoZWRSZXNvdXJjZUxvYWRlcjo6fkNhY2hlZFJlc291cmNlTG9hZGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkNhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0UmVzb3VyY2UpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlbG9hZEltYWdlc0lmTm90RGVmZXJy
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlbW92ZUNhY2hl
ZFJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlTG9hZGVyOjpnYXJi
YWdlQ29sbGVjdERvY3VtZW50UmVzb3VyY2VzKToKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvTWVt
b3J5Q2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVtb3J5Q2FjaGU6OnJlbW92ZVJlc291
cmNlc1dpdGhPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6TWVtb3J5Q2FjaGU6OmdldE9yaWdp
bnNXaXRoQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVtb3J5Q2FjaGU6OmdldFN0YXRpc3Rp
Y3MpOgorICAgICAgICAoV2ViQ29yZTo6TWVtb3J5Q2FjaGU6OnNldERpc2FibGVkKToKKyAgICAg
ICAgKiBsb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SWNv
bkRhdGFiYXNlOjpyZW1vdmVBbGxJY29ucyk6CisgICAgICAgIChXZWJDb3JlOjpJY29uRGF0YWJh
c2U6Omljb25SZWNvcmRDb3VudFdpdGhEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Okljb25EYXRh
YmFzZTo6cGVyZm9ybVBlbmRpbmdSZXRhaW5BbmRSZWxlYXNlT3BlcmF0aW9ucyk6CisgICAgICAg
ICogcGFnZS9ET01XaW5kb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93OjpkaXNw
YXRjaEFsbFBlbmRpbmdCZWZvcmVVbmxvYWRFdmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6RE9N
V2luZG93OjpkaXNwYXRjaEFsbFBlbmRpbmdVbmxvYWRFdmVudHMpOgorICAgICAgICAqIHBhZ2Uv
RXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxl
VG91Y2hFdmVudCk6CisgICAgICAgICogcGFnZS9GcmFtZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZTo6aW5qZWN0VXNlclNjcmlwdHMpOgorICAgICAgICAqIHBhZ2UvUGFnZUdyb3VwLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VHcm91cDo6cGFnZUdyb3VwKToKKyAgICAgICAgKFdl
YkNvcmU6OlBhZ2VHcm91cDo6Y2xvc2VMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
UGFnZUdyb3VwOjpjbGVhckxvY2FsU3RvcmFnZUZvckFsbE9yaWdpbnMpOgorICAgICAgICAoV2Vi
Q29yZTo6UGFnZUdyb3VwOjpjbGVhckxvY2FsU3RvcmFnZUZvck9yaWdpbik6CisgICAgICAgIChX
ZWJDb3JlOjpQYWdlR3JvdXA6OnN5bmNMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
UGFnZUdyb3VwOjphZGRVc2VyU2NyaXB0VG9Xb3JsZCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdl
R3JvdXA6OmFkZFVzZXJTdHlsZVNoZWV0VG9Xb3JsZCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdl
R3JvdXA6OnJlbW92ZVVzZXJTY3JpcHRGcm9tV29ybGQpOgorICAgICAgICAoV2ViQ29yZTo6UGFn
ZUdyb3VwOjpyZW1vdmVVc2VyU3R5bGVTaGVldEZyb21Xb3JsZCk6CisgICAgICAgICogcGFnZS9Q
YWdlU2VyaWFsaXplci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlU2VyaWFsaXplcjo6dXJs
Rm9yQmxhbmtGcmFtZSk6CisgICAgICAgICogcGFnZS9TZWN1cml0eVBvbGljeS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTZWN1cml0eVBvbGljeTo6YWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50
cnkpOgorICAgICAgICAoV2ViQ29yZTo6U2VjdXJpdHlQb2xpY3k6OnJlbW92ZU9yaWdpbkFjY2Vz
c1doaXRlbGlzdEVudHJ5KToKKyAgICAgICAgKiBwYWdlL1NldHRpbmdzLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OnNldEdlbmVyaWNGb250RmFtaWx5TWFwKToKKyAgICAgICAgKFdlYkNvcmU6Omdl
dEdlbmVyaWNGb250RmFtaWx5Rm9yU2NyaXB0KToKKyAgICAgICAgKiBwYWdlL1NwZWVjaElucHV0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNwZWVjaElucHV0OjpyZWdpc3Rlckxpc3RlbmVyKToK
KyAgICAgICAgKiBwYWdlL1RvdWNoRGlzYW1iaWd1YXRpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6ZmluZEdvb2RUb3VjaFRhcmdldHMpOgorICAgICAgICAqIHBhZ2UvV2luZG93RmVhdHVyZXMu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6V2luZG93RmVhdHVyZXM6OmJvb2xGZWF0dXJlKToKKyAg
ICAgICAgKFdlYkNvcmU6OldpbmRvd0ZlYXR1cmVzOjpmbG9hdEZlYXR1cmUpOgorICAgICAgICAq
IHBhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnVwZGF0ZUFuaW1hdGlvbnMpOgorICAgICAg
ICAoV2ViQ29yZTo6QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnN1c3BlbmRBbmltYXRpb25z
Rm9yRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQ29udHJvbGxlclByaXZh
dGU6OnJlc3VtZUFuaW1hdGlvbnNGb3JEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBbmlt
YXRpb25Db250cm9sbGVyUHJpdmF0ZTo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKToKKyAgICAg
ICAgKiBwYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjpjbGVhclJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlVHJhbnNpdGlvbnMpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVLZXlmcmFtZUFuaW1hdGlvbnMpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjphbmltYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlvbjo6Z2V0QW5pbWF0ZWRTdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb246OnNldEFuaW1hdGluZyk6CisgICAgICAgIChXZWJD
b3JlOjpDb21wb3NpdGVBbmltYXRpb246OnRpbWVUb05leHRTZXJ2aWNlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlvbjo6Z2V0QW5pbWF0aW9uRm9yUHJvcGVydHkpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjpzdXNwZW5kQW5pbWF0aW9ucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb246OnJlc3VtZUFuaW1hdGlvbnMpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjpvdmVycmlkZUltcGxpY2l0QW5p
bWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb246OnJlc3VtZU92
ZXJyaWRkZW5JbXBsaWNpdEFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRl
QW5pbWF0aW9uOjppc0FuaW1hdGluZ1Byb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBv
c2l0ZUFuaW1hdGlvbjo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9MYW5ndWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpsYW5ndWFnZURpZENoYW5nZSk6
CisgICAgICAgICogcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpNSU1FVHlwZVJlZ2lzdHJ5OjpnZXROb3JtYWxpemVkTUlNRVR5cGUpOgorICAgICAgICAq
IHBsYXRmb3JtL2F1ZGlvL0hSVEZFbGV2YXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0
Q29uY2F0ZW5hdGVkSW1wdWxzZVJlc3BvbnNlc0ZvclN1YmplY3QpOgorICAgICAgICAqIHBsYXRm
b3JtL2JsYWNrYmVycnkvQ29va2llTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb29r
aWVNYW5hZ2VyOjpnZW5lcmF0ZUh0bWxGcmFnbWVudEZvckNvb2tpZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29va2llTWFuYWdlcjo6cmVtb3ZlQWxsQ29va2llcyk6CisgICAgICAgICogcGxhdGZv
cm0vYmxhY2tiZXJyeS9Db29raWVNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llTWFw
OjpyZW1vdmVPbGRlc3RDb29raWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llTWFwOjpnZXRB
bGxDaGlsZENvb2tpZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2NmL0JpbmFyeVByb3BlcnR5TGlz
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaW5hcnlQcm9wZXJ0eUxpc3RQbGFuOjp3cml0ZUlu
dGVnZXJBcnJheSk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJIVFRQ
TG9hZEluZm8uY3BwOgorICAgICAgICAoV2ViS2l0OjphZGRIZWFkZXIpOgorICAgICAgICAqIHBs
YXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVVJMUmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYlVSTFJlcXVlc3Q6OnZpc2l0SFRUUEhlYWRlckZpZWxkcyk6CisgICAgICAgICogcGxh
dGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJVUkxSZXNwb25zZS5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYlVSTFJlc3BvbnNlOjphZGRIVFRQSGVhZGVyRmllbGQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJVUkxSZXNwb25zZTo6dmlzaXRIVFRQSGVhZGVyRmllbGRzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9EaXNwbGF5UmVmcmVzaE1vbml0b3IuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheVJlZnJlc2hNb25pdG9yTWFuYWdlcjo6ZW5zdXJlTW9uaXRvckZvckNsaWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5UmVmcmVzaE1vbml0b3JNYW5hZ2VyOjp1bnJlZ2lz
dGVyQ2xpZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0VmVydGljYWxEYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9udERhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udENhY2hlOjpyZWxlYXNlRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENh
Y2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0dseXBoUGFnZVRyZWVOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoUGFnZVRyZWVO
b2RlOjp0cmVlR2x5cGhQYWdlQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6R2x5cGhQYWdlVHJl
ZU5vZGU6OnBhZ2VDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaFBhZ2VUcmVlTm9kZTo6
cHJ1bmVUcmVlQ3VzdG9tRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R2x5cGhQYWdlVHJl
ZU5vZGU6OnBydW5lVHJlZUZvbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoUGFnZVRy
ZWVOb2RlOjpwcnVuZUN1c3RvbUZvbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoUGFn
ZVRyZWVOb2RlOjpwcnVuZUZvbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoUGFnZVRy
ZWVOb2RlOjpzaG93U3VidHJlZSk6CisgICAgICAgIChzaG93R2x5cGhQYWdlVHJlZXMpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlRpbGVkQmFja2luZ1N0b3JlOjp1cGRhdGVUaWxlQnVmZmVycyk6CisgICAgICAg
IChXZWJDb3JlOjpUaWxlZEJhY2tpbmdTdG9yZTo6cmVzaXplRWRnZVRpbGVzKToKKyAgICAgICAg
KFdlYkNvcmU6OlRpbGVkQmFja2luZ1N0b3JlOjpzZXRLZWVwUmVjdCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL2NmL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRh
dGlvbkNGLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFWRldyYXBwZXI6OmF2ZldyYXBwZXJGb3JD
YWxsYmFja0NvbnRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkv
TGF5ZXJUaWxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyOjpsYXllclZpc2li
aWxpdHlDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXI6OnVwbG9hZFRleHR1
cmVzSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlcjo6YWRkVGlsZUpvYik6
CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyOjpkZWxldGVUZXh0dXJlcyk6CisgICAgICAg
IChXZWJDb3JlOjpMYXllclRpbGVyOjpwcnVuZVRleHR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyVGlsZXI6OmJpbmRDb250ZW50c1RleHR1cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2JsYWNrYmVycnkvVGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQ6OnRleHR1cmVGb3JU
aWxlZENvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVDYWNoZUNvbXBvc2l0aW5n
VGhyZWFkOjp0ZXh0dXJlRm9yQ29sb3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nh
L0dyYXBoaWNzTGF5ZXJDQS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6
Om1vdmVPckNvcHlBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJD
QTo6cGF1c2VBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjps
YXllckRpZERpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjp1cGRh
dGVHZW9tZXRyeSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZVRy
YW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUNoaWxk
cmVuVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRl
TWFza3NUb0JvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnVwZGF0
ZUNvbnRlbnRzVmlzaWJpbGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6
OnVwZGF0ZUNvbnRlbnRzT3BhcXVlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJD
QTo6dXBkYXRlQmFja2ZhY2VWaXNpYmlsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXJDQTo6dXBkYXRlRmlsdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVy
Q0E6OmVuc3VyZVN0cnVjdHVyYWxMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xh
eWVyQ0E6OnVwZGF0ZUxheWVyRHJhd3NDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXJDQTo6dXBkYXRlQ29udGVudHNJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0xheWVyQ0E6OnVwZGF0ZUNvbnRlbnRzUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0xheWVyQ0E6OnVwZGF0ZU1hc2tMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0xheWVyQ0E6OnVwZGF0ZUxheWVyQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0xheWVyQ0E6OnNldEFuaW1hdGlvbk9uTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllckNBOjpyZW1vdmVDQUFuaW1hdGlvbkZyb21MYXllcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0xheWVyQ0E6OnBhdXNlQ0FBbmltYXRpb25PbkxheWVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6c3VzcGVuZEFuaW1hdGlvbnMpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjpyZXN1bWVBbmltYXRpb25zKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6ZmluZE9yTWFrZUNsb25lKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXJDQTo6c2V0T3BhY2l0eUludGVybmFsKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlT3BhY2l0eU9uTGF5ZXIpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NhL21hYy9UaWxlQ2FjaGUubW06CisgICAgICAgIChXZWJDb3JlOjpU
aWxlQ2FjaGU6On5UaWxlQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZUNhY2hlOjpzZXRO
ZWVkc0Rpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZUNhY2hlOjpzZXRTY2FsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpUaWxlQ2FjaGU6OnNldEFjY2VsZXJhdGVzRHJhd2luZyk6CisgICAg
ICAgIChXZWJDb3JlOjpUaWxlQ2FjaGU6OnNldFRpbGVEZWJ1Z0JvcmRlcldpZHRoKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRpbGVDYWNoZTo6c2V0VGlsZURlYnVnQm9yZGVyQ29sb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6VGlsZUNhY2hlOjpyZXZhbGlkYXRlVGlsZXMpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwOgorICAgICAgICAoUGxh
dGZvcm1DQUxheWVyOjphbmltYXRpb25TdGFydGVkKToKKyAgICAgICAgKHJlc3VibWl0QWxsQW5p
bWF0aW9ucyk6CisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXI6OmFuaW1hdGlvbkZvcktleSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENhY2hlQ2hyb21pdW1XaW4u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TG9va3VwQWx0TmFtZSk6CisgICAgICAgIChXZWJDb3Jl
Ojpmb250Q29udGFpbnNDaGFyYWN0ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0ZvbnRVdGlsc0Nocm9taXVtV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldERl
cml2ZWRGb250RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0
b21GaWx0ZXJHbG9iYWxDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUZpbHRl
ckdsb2JhbENvbnRleHQ6On5DdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkN1c3RvbUZpbHRlckdsb2JhbENvbnRleHQ6OmdldFZhbGlkYXRlZFByb2dyYW0pOgor
ICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dDo6cmVtb3ZlVmFsaWRh
dGVkUHJvZ3JhbSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21G
aWx0ZXJQcm9ncmFtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUZpbHRlclByb2dyYW06
Om5vdGlmeUNsaWVudHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hh
cmZCdXp6U2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRDYWNoZWRIYXJmYnV6ekZhY2Up
OgorICAgICAgICAoV2ViQ29yZTo6cmVsZWFzZUNhY2hlZEhhcmZidXp6RmFjZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpOR0ZhY2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SGFyZkJ1enpOR0ZhY2U6OkhhcmZCdXp6TkdGYWNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkhhcmZCdXp6TkdGYWNlOjp+SGFyZkJ1enpOR0ZhY2UpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YUNvcmVUZXh0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpnZXRDRlN0cmluZ0F0dHJpYnV0ZXMpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YU1hYy5tbToKKyAgICAgICAg
KFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpjYW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1
ZW5jZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9w
ZW5HTENvbW1vbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RPcGVuR0xDb21t
b246OmdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjb21waWxlU2hhZGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjptYXBwZWRTeW1ib2xOYW1lKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJpdik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVySW5mb0xvZyk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVyU291cmNlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9vcGVudmcvRUdMRGlzcGxheU9wZW5WRy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpFR0xEaXNwbGF5T3BlblZHOjp+RUdMRGlzcGxheU9wZW5WRyk6CisgICAgICAgIChXZWJD
b3JlOjpFR0xEaXNwbGF5T3BlblZHOjpkZXN0cm95U3VyZmFjZSk6CisgICAgICAgIChXZWJDb3Jl
OjpFR0xEaXNwbGF5T3BlblZHOjpjb250ZXh0Rm9yU3VyZmFjZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFyZWRHTERhdGE6OmN1cnJlbnRTaGFyZWRHTERhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMRGF0YTo6U2hhcmVkR0xEYXRhOjp+
U2hhcmVkR0xEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlclNoYWRlck1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBl
clNoYWRlck1hbmFnZXI6OmdldFNoYWRlclByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OmdldFNoYWRlckZvckZpbHRlcik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udFBsYXRmb3JtRGF0YS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGaXhlZFNpemVGb250RGF0YTo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
dGsvRGF0YU9iamVjdEd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhT2JqZWN0R3RrOjpm
b3JDbGlwYm9hcmQpOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9HdGtEcmFnQW5kRHJvcEhlbHBl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHdGtEcmFnQW5kRHJvcEhlbHBlcjo6aGFuZGxlR2V0
RHJhZ0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3RrRHJhZ0FuZERyb3BIZWxwZXI6OmhhbmRs
ZURyYWdMZWF2ZSk6CisgICAgICAgIChXZWJDb3JlOjpHdGtEcmFnQW5kRHJvcEhlbHBlcjo6aGFu
ZGxlRHJhZ01vdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHdGtEcmFnQW5kRHJvcEhlbHBlcjo6
aGFuZGxlRHJhZ0RhdGFSZWNlaXZlZCk6CisgICAgICAgIChXZWJDb3JlOjpHdGtEcmFnQW5kRHJv
cEhlbHBlcjo6aGFuZGxlRHJhZ0Ryb3ApOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9SZWRpcmVj
dGVkWENvbXBvc2l0ZVdpbmRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmaWx0ZXJYRGFtYWdl
RXZlbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0azMuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Z3RrU3R5bGVDaGFuZ2VkQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29y
ZTo6Z2V0U3R5bGVDb250ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhl
bWVNYWMubW06CisgICAgICAgICgrW1dlYlNjcm9sbGJhclByZWZzT2JzZXJ2ZXIgYXBwZWFyYW5j
ZVByZWZzQ2hhbmdlZDpdKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWxT
dG9yYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyZWRlbnRpYWxTdG9yYWdlOjpzZXQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q3JlZGVudGlhbFN0b3JhZ2U6OmdldCk6CisgICAgICAgICogcGxh
dGZvcm0vbmV0d29yay9IVFRQSGVhZGVyTWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUVFBI
ZWFkZXJNYXA6OmNvcHlEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkhUVFBIZWFkZXJNYXA6Omdl
dCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9NSU1FSGVhZGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Ok1JTUVIZWFkZXI6OnBhcnNlSGVhZGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9u
ZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFu
ZGxlOjpjcmVhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0
QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjphZGRIVFRQ
SGVhZGVyRmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6YWRk
SFRUUEhlYWRlckZpZWxkcyk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5
L1Jlc291cmNlUmVxdWVzdEJsYWNrQmVycnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0Ojp0YXJnZXRUeXBlRnJvbU1pbWVUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdDo6aW5pdGlhbGl6ZVBsYXRmb3JtUmVxdWVzdCk6CisgICAgICAgICogcGxh
dGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Om1ha2VGaW5hbFJlcXVlc3QpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvUmVz
b3VyY2VSZXF1ZXN0Q0ZOZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2V0SGVhZGVyRmllbGRz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2Vy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlTWFuYWdlcjo6aW5pdGlhbGl6
ZUhhbmRsZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VSZXF1ZXN0
TWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Ojpkb1VwZGF0ZVBsYXRm
b3JtUmVxdWVzdCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9xdC9SZXNvdXJjZVJlcXVl
c3RRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q6OnRvTmV0d29ya1Jl
cXVlc3QpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNv
dXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2VuZFJlcXVlc3RDYWxsYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6c2V0Q2xpZW50Q2VydGlmaWNhdGUpOgorICAgICAg
ICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdDo6dXBkYXRlU291cE1lc3NhZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Ojp0b1NvdXBNZXNzYWdlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXNwb25zZVNvdXAuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZTo6dG9Tb3VwTWVzc2FnZSk6CisgICAgICAgICogcGxh
dGZvcm0vbmV0d29yay93aW4vUmVzb3VyY2VIYW5kbGVXaW4uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVzb3VyY2VIYW5kbGU6OnN0YXJ0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9SdW5Mb29w
UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UnVuTG9vcDo6VGltZXJCYXNlOjp0aW1lckZpcmVk
KToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L0xvY2FsZVRvU2NyaXB0TWFwcGluZ0RlZmF1bHQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6c2NyaXB0TmFtZVRvQ29kZSk6CisgICAgICAgIChXZWJD
b3JlOjpsb2NhbGVUb1NjcmlwdENvZGVGb3JGb250U2VsZWN0aW9uKToKKyAgICAgICAgKiBwbGF0
Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBy
dW5lQmxhY2tsaXN0ZWRDb2RlY3MpOgorICAgICAgICAoV2ViQ29yZTo6ZHVtcFRleHRFbmNvZGlu
Z05hbWVNYXApOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvdHJhbnNjb2Rlci9Gb250VHJhbnNj
b2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250VHJhbnNjb2Rlcjo6Y29udmVydGVyVHlw
ZSk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC93aW4vVGV4dENvZGVjV2luLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Okxhbmd1YWdlTWFuYWdlcjo6TGFuZ3VhZ2VNYW5hZ2VyKToKKyAgICAgICAg
KFdlYkNvcmU6OmdldENvZGVQYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY1dpbjo6
cmVnaXN0ZXJFeHRlbmRlZEVuY29kaW5nTmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENv
ZGVjV2luOjpyZWdpc3RlckV4dGVuZGVkQ29kZWNzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRD
b2RlY1dpbjo6ZW51bWVyYXRlU3VwcG9ydGVkRW5jb2RpbmdzKToKKyAgICAgICAgKiBwbGF0Zm9y
bS93aW4vQ2xpcGJvYXJkVXRpbGl0aWVzV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldERh
dGFNYXBJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OmdldENsaXBib2FyZERhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6c2V0Q2xpcGJvYXJkRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vd2luL0Ns
aXBib2FyZFdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRXaW46OnR5cGVzKToK
KyAgICAgICAgKiBwbGF0Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpjYWNoZWRTdG9yYWdlRGlyZWN0b3J5KToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vUnVu
TG9vcFdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSdW5Mb29wOjpUaW1lckJhc2U6OnRpbWVy
RmlyZWQpOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9XQ0RhdGFPYmplY3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6V0NEYXRhT2JqZWN0OjpjcmVhdGVJbnN0YW5jZSk6CisgICAgICAgICogcGxh
dGZvcm0vd2luY2UvTUlNRVR5cGVSZWdpc3RyeVdpbkNFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Ok1JTUVUeXBlUmVnaXN0cnk6OmdldFByZWZlcnJlZEV4dGVuc2lvbkZvck1JTUVUeXBlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS93eC9Db250ZXh0TWVudVd4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNvbnRleHRNZW51OjphcHBlbmRJdGVtKToKKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpbkRhdGFi
YXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNlOjpyZWZyZXNoKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNlOjpNSU1FVHlwZUZvckV4dGVuc2lvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6cmVtb3ZlKToKKyAgICAgICAgKiBwbHVn
aW5zL1BsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luTWFpblRocmVhZFNjaGVkdWxlcjo6c2NoZWR1bGVDYWxsKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXI6OmRpc3BhdGNoQ2FsbHMpOgorICAgICAgICAqIHBs
dWdpbnMvUGx1Z2luU3RyZWFtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblN0cmVhbTo6
c3RhcnRTdHJlYW0pOgorICAgICAgICAqIHBsdWdpbnMvYmxhY2tiZXJyeS9QbHVnaW5EYXRhQmxh
Y2tCZXJyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhOjppbml0UGx1Z2lucyk6
CisgICAgICAgICogcGx1Z2lucy93eC9QbHVnaW5EYXRhV3guY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luRGF0YTo6aW5pdFBsdWdpbnMpOgorICAgICAgICAqIHJlbmRlcmluZy9FeGNsdXNp
b25TaGFwZUluc2lkZUluZm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXhjbHVzaW9uU2hhcGVJ
bnNpZGVJbmZvOjplbnN1cmVFeGNsdXNpb25TaGFwZUluc2lkZUluZm9Gb3JSZW5kZXJCbG9jayk6
CisgICAgICAgICogcmVuZGVyaW5nL0Zsb3dUaHJlYWRDb250cm9sbGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZsb3dUaHJlYWRDb250cm9sbGVyOjp1bnJlZ2lzdGVyTmFtZWRGbG93Q29udGVu
dE5vZGUpOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OklubGluZUZsb3dCb3g6OnJlcXVpcmVzSWRlb2dyYXBoaWNCYXNlbGluZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbmxpbmVGbG93Qm94OjphZGRUZXh0Qm94VmlzdWFsT3ZlcmZsb3cp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9jazo6Y2xlYXJGbG9hdHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJC
bG9ja0xpbmVMYXlvdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2V0TG9naWNhbFdpZHRoRm9y
VGV4dFJ1bik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlUXVhbGl0eUNvbnRyb2xsZXI6OmhpZ2hRdWFsaXR5UmVw
YWludFRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VRdWFsaXR5Q29udHJvbGxl
cjo6c2hvdWxkUGFpbnRBdExvd1F1YWxpdHkpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJD
b3VudGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckNvdW50ZXI6OmRlc3Ryb3lDb3Vu
dGVyTm9kZXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQ291bnRlcjo6ZGVzdHJveUNvdW50
ZXJOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OnVwZGF0ZUNvdW50ZXJzKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckNvdW50ZXI6OnJlbmRlcmVyU3R5bGVDaGFuZ2VkKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJG
bG93VGhyZWFkOjpzZXRSZWdpb25SYW5nZUZvckJveCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJGbG93VGhyZWFkOjpnZXRSZWdpb25SYW5nZUZvckJveCk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwYWludCk6
CisgICAgICAgIChXZWJDb3JlOjpwZXJmb3JtT3ZlcmxhcFRlc3RzKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyRmlsdGVySW5mbzo6ZmlsdGVySW5mb0ZvclJlbmRlckxheWVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyRmlsdGVySW5mbzo6Y3JlYXRlRmlsdGVySW5mb0ZvclJlbmRlckxh
eWVySWZOZWVkZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTmFtZWRGbG93VGhyZWFkOjpkZXBlbmRzT24p
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTmFtZWRGbG93VGhyZWFkOjpwdXNoRGVwZW5kZW5j
aWVzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclJlZ2lvbjo6c2V0UmVuZGVyQm94UmVnaW9uSW5mbyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJSZWdpb246OnNldFJlZ2lvbk9iamVjdHNSZWdpb25TdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJSZWdpb246OnJlc3RvcmVSZWdpb25PYmplY3RzT3JpZ2luYWxT
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZWdpb246OmNvbXB1dGVDaGlsZHJlblN0
eWxlSW5SZWdpb24pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpjYWNoZWRDb2xsYXBzZWRC
b3JkZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpzeXN0ZW1Db2xvcik6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6c2VsZWN0
aW9uQm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OnNldFNlbGVjdGlvbik6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpXaWRnZXRIaWVyYXJjaHlVcGRhdGVzU3VzcGVuc2lvblNjb3BlOjptb3ZlV2lkZ2V0cyk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Um9vdElubGluZUJveDo6YXNjZW50QW5kRGVzY2VudEZvckJveCk6CisgICAgICAgICogcmVuZGVy
aW5nL1ZlcnRpY2FsUG9zaXRpb25DYWNoZS5oOgorICAgICAgICAoV2ViQ29yZTo6VmVydGljYWxQ
b3NpdGlvbkNhY2hlOjpnZXQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5s
aW5lVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdJbmxpbmVUZXh0OjpjaGFy
YWN0ZXJTdGFydHNOZXdUZXh0Q2h1bmspOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXI6OnByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50OjphcHBseVJlc291cmNlKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46OmFwcGx5UmVzb3VyY2UpOgorICAgICAgICAqIHJl
bmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzQ2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
UmVzb3VyY2VzQ2FjaGU6OnJlc291cmNlRGVzdHJveWVkKToKKyAgICAgICAgKiByZW5kZXJpbmcv
c3ZnL1NWR1Jvb3RJbmxpbmVCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6c3dhcEl0ZW1zSW5M
YXlvdXRBdHRyaWJ1dGVzKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRB
dHRyaWJ1dGVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRMYXlvdXRBdHRyaWJ1dGVz
OjpkdW1wKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1dGVz
QnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1
aWxkZXI6OmJ1aWxkQ2hhcmFjdGVyRGF0YU1hcCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0
TGF5b3V0QXR0cmlidXRlc0J1aWxkZXI6OmZpbGxDaGFyYWN0ZXJEYXRhTWFwKToKKyAgICAgICAg
KiByZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHVGV4dExheW91dEVuZ2luZTo6bGF5b3V0VGV4dE9uTGluZU9yUGF0aCk6CisgICAgICAg
ICogcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljc0J1aWxkZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHVGV4dE1ldHJpY3NCdWlsZGVyOjptZWFzdXJlVGV4dFJlbmRlcmVyKToKKyAgICAg
ICAgKiBzdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdG9y
YWdlQXJlYVN5bmM6OnN5bmNUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VB
cmVhU3luYzo6cGVyZm9ybUltcG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYVN5
bmM6OnN5bmMpOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZU1hcC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTdG9yYWdlTWFwOjprZXkpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU1hcDo6
c2V0SXRlbSk6CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNlSW1wbDo6bG9jYWxTdG9yYWdlTmFtZXNw
YWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpjb3B5KToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpjbG9zZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNlSW1wbDo6Y2xlYXJBbGxPcmlnaW5zRm9yRGVsZXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU5hbWVzcGFjZUltcGw6OnN5bmMpOgorICAgICAg
ICAqIHN2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
RG9jdW1lbnRFeHRlbnNpb25zOjpyZW1vdmVBbmltYXRpb25FbGVtZW50RnJvbVRhcmdldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlbW92ZUFsbEFuaW1hdGlv
bkVsZW1lbnRzRnJvbVRhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdEb2N1bWVudEV4dGVu
c2lvbnM6OmFkZFBlbmRpbmdSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdEb2N1bWVu
dEV4dGVuc2lvbnM6OmlzRWxlbWVudFBlbmRpbmdSZXNvdXJjZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZW1vdmVFbGVtZW50RnJvbVBlbmRpbmdSZXNvdXJj
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpzZXRPZkVsZW1l
bnRzUmVmZXJlbmNpbmdUYXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRG9jdW1lbnRFeHRl
bnNpb25zOjpyZW1vdmVBbGxUYXJnZXRSZWZlcmVuY2VzRm9yRWxlbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlbW92ZUFsbEVsZW1lbnRSZWZlcmVuY2Vz
Rm9yVGFyZ2V0KToKKyAgICAgICAgKiBzdmcvU1ZHRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdFbGVtZW50Ojp+U1ZHRWxlbWVudCk6CisgICAgICAgICogc3ZnL2FuaW1hdGlvbi9T
TUlMVGltZUNvbnRhaW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTTUlMVGltZUNvbnRhaW5l
cjo6c2V0RWxhcHNlZCk6CisgICAgICAgIChXZWJDb3JlOjpTTUlMVGltZUNvbnRhaW5lcjo6dXBk
YXRlQW5pbWF0aW9ucyk6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR0ltYWdlQ2FjaGUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2VDYWNoZTo6flNWR0ltYWdlQ2FjaGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2VDYWNoZTo6cmVtb3ZlQ2xpZW50RnJvbUNhY2hlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlQ2FjaGU6OnJlcXVlc3RlZFNpemVBbmRTY2FsZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2VDYWNoZTo6aW1hZ2VDb250ZW50Q2hhbmdlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZUNhY2hlOjpyZWRyYXcpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHSW1hZ2VDYWNoZTo6bG9va3VwT3JDcmVhdGVCaXRtYXBJbWFnZUZvclJlbmRlcmVyKToK
KyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjplZmZlY3RSZWZlcmVuY2VzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmFkZEJ1aWx0aW5FZmZlY3RzKToKKyAgICAg
ICAgKiBzdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5Lmg6CisgICAgICAgIChXZWJD
b3JlOjpTVkdBbmltYXRlZFByb3BlcnR5Ojp+U1ZHQW5pbWF0ZWRQcm9wZXJ0eSk6CisgICAgICAg
ICogc3ZnL3Byb3BlcnRpZXMvU1ZHQXR0cmlidXRlVG9Qcm9wZXJ0eU1hcC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdBdHRyaWJ1dGVUb1Byb3BlcnR5TWFwOjphZGRQcm9wZXJ0aWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0F0dHJpYnV0ZVRvUHJvcGVydHlNYXA6OnN5bmNocm9uaXplUHJv
cGVydGllcyk6CisgICAgICAgICogd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OldvcmtlckNvbnRleHQ6Omhhc1BlbmRpbmdBY3Rpdml0eSk6CisgICAgICAgICog
d29ya2Vycy9Xb3JrZXJFdmVudFF1ZXVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckV2
ZW50UXVldWU6OmNsb3NlKToKKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OnNldFJlcXVlc3RIZWFkZXJJbnRlcm5hbCk6
CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6Z2V0QWxsUmVzcG9uc2VIZWFkZXJz
KToKKyAgICAgICAgKiB4bWwvWFBhdGhGdW5jdGlvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
WFBhdGg6OmNyZWF0ZUZ1bmN0aW9uKToKKyAgICAgICAgKiB4bWwvWFBhdGhQYXJzZXIuY3BwOgor
ICAgICAgICAoaXNBeGlzTmFtZSk6CisgICAgICAgICogeG1sL1hTTFRQcm9jZXNzb3JMaWJ4c2x0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnhzbHRQYXJhbUFycmF5RnJvbVBhcmFtZXRlck1hcCk6
CisgICAgICAgICogeG1sL1hTTFRQcm9jZXNzb3JRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpY
U0xUUHJvY2Vzc29yOjp0cmFuc2Zvcm1Ub1N0cmluZyk6CisKIDIwMTItMTAtMDUgIE9qYW4gVmFm
YWkgIDxvamFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBEZXByZWNhdGVkIGZsZXhib3hlcyBz
dWJ0cmFjdCBzY3JvbGxiYXIgd2lkdGgvaGVpZ2h0IHR3aWNlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2JsYWNrYmVycnkvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0No
YW5nZUxvZwppbmRleCA3NjEwMTc5NDU5MWY4MWJjZWJmZTBhZTE2ZTBkZTU1NmQ1OGYwMmU5Li43
YTVkNDM2ZWZiMmUwYWM4ZjliMzk3NDY0MmFjMGZiYTFiNTQ1MGI2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2JsYWNrYmVycnkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2ti
ZXJyeS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMCBAQAorMjAxMi0xMC0wNSAgQ2FpbyBNYXJjZWxv
IGRlIE9saXZlaXJhIEZpbGhvICA8Y2Fpby5vbGl2ZWlyYUBvcGVuYm9zc2Eub3JnPgorCisgICAg
ICAgIFJlbmFtZSBmaXJzdC9zZWNvbmQgdG8ga2V5L3ZhbHVlIGluIEhhc2hNYXAgaXRlcmF0b3Jz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Mjc4NAor
CisgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgorCisgICAgICAgICogQXBpL0JhY2tp
bmdTdG9yZS5jcHA6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkJhY2tpbmdTdG9yZVBy
aXZhdGU6OnNldEJhY2tpbmdTdG9yZVJlY3QpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0
OjpCYWNraW5nU3RvcmVQcml2YXRlOjp2aXNpYmxlVGlsZXNSZWN0KToKKyAgICAgICAgKEJsYWNr
QmVycnk6OldlYktpdDo6QmFja2luZ1N0b3JlUHJpdmF0ZTo6cmVzZXRUaWxlcyk6CisgICAgICAg
IChCbGFja0JlcnJ5OjpXZWJLaXQ6OkJhY2tpbmdTdG9yZVByaXZhdGU6OnVwZGF0ZVRpbGVzKToK
KyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6QmFja2luZ1N0b3JlUHJpdmF0ZTo6dXBkYXRl
VGlsZXNGb3JTY3JvbGxPck5vdFJlbmRlcmVkUmVnaW9uKToKKyAgICAgICAgKEJsYWNrQmVycnk6
OldlYktpdDo6QmFja2luZ1N0b3JlUHJpdmF0ZTo6bWFwRnJvbVRyYW5zZm9ybWVkQ29udGVudHNU
b1RpbGVzKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJJ
bXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6OmNh
bmNlbCk6CisgICAgICAgIChXZWJDb3JlOjpOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpvblBl
cm1pc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6
bm90aWZpY2F0aW9uQ2xpY2tlZCk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvVXNlck1lZGlh
Q2xpZW50SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpVc2VyTWVkaWFDbGllbnRJbXBsOjpj
YW5jZWxVc2VyTWVkaWFSZXF1ZXN0KToKKyAgICAgICAgKiBXZWJLaXRTdXBwb3J0L0Fib3V0RGF0
YS5jcHA6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OmR1bXBKU0NUeXBlQ291bnRTZXRU
b1RhYmxlSFRNTCk6CisgICAgICAgICogV2ViS2l0U3VwcG9ydC9GcmFtZUxheWVycy5jcHA6Cisg
ICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkZyYW1lTGF5ZXJzOjpyZW1vdmVMYXllckJ5RnJh
bWUpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpGcmFtZUxheWVyczo6Y29tbWl0T25X
ZWJLaXRUaHJlYWQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpGcmFtZUxheWVyczo6
Y2FsY3VsYXRlUm9vdExheWVyKToKKwogMjAxMi0xMC0wNSAgUm9iIEJ1aXMgIDxyYnVpc0ByaW0u
Y29tPgogCiAgICAgICAgIFtCbGFja0JlcnJ5XSBJbXBsZW1lbnQgVGVzdFJ1bm5lci5zZXRNb2Nr
RGV2aWNlT3JpZW50YXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggMGNkNTYxNzQ4
YWU2ZDkwOGYwZmJjOGEyMWFhMDA1NDJlNTdjNWJkYS4uY2NhYjU0MzllZmQyOGMwNjFmZTUxOTli
YTI5MjQ0MTdmOWNiZGEyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwy
MCBAQAorMjAxMi0xMC0wNSAgQ2FpbyBNYXJjZWxvIGRlIE9saXZlaXJhIEZpbGhvICA8Y2Fpby5v
bGl2ZWlyYUBvcGVuYm9zc2Eub3JnPgorCisgICAgICAgIFJlbmFtZSBmaXJzdC9zZWNvbmQgdG8g
a2V5L3ZhbHVlIGluIEhhc2hNYXAgaXRlcmF0b3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Mjc4NAorCisgICAgICAgIFJldmlld2VkIGJ5IEVyaWMg
U2VpZGVsLgorCisgICAgICAgICogc3JjL1dlYkdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RN
YW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5h
Z2VyOjpyZW1vdmUpOgorICAgICAgICAqIHNyYy9XZWJJREJNZXRhZGF0YS5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYklEQk1ldGFkYXRhOjpXZWJJREJNZXRhZGF0YSk6CisgICAgICAgICogc3Jj
L1dlYkludGVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkludGVudDo6ZXh0cmFzVmFsdWUp
OgorICAgICAgICAqIHRlc3RzL01lbW9yeUluc3RydW1lbnRhdGlvblRlc3QuY3BwOgorICAgICAg
ICAqIHRlc3RzL1dlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXJUZXN0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlRFU1RfRik6CisKIDIwMTItMTAtMDUgIFcuIEphbWVzIE1hY0xlYW4gIDx3am1h
Y2xlYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gRW5oYW5jZSBzdXBwb3J0
IGZvciB0cmFuc2Zvcm1zIGluIExpbmtIaWdobGlnaHQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2VmbC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cKaW5kZXggMjQw
MmZmY2I3YzllNzA0ZGQ0OGQzMzRmOWMzZThiNThhM2Y2ZTJiNi4uODZkMTlmZmNjMzhhMjI5YTMw
ZWQ0OGYzY2Y0ODRjZWNhNDU0ODdjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBA
CisyMDEyLTEwLTA1ICBDYWlvIE1hcmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gIDxjYWlvLm9saXZl
aXJhQG9wZW5ib3NzYS5vcmc+CisKKyAgICAgICAgUmVuYW1lIGZpcnN0L3NlY29uZCB0byBrZXkv
dmFsdWUgaW4gSGFzaE1hcCBpdGVyYXRvcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTgyNzg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlk
ZWwuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmwu
Y3BwOgorICAgICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpldmFsdWF0ZVNjcmlwdElu
SXNvbGF0ZWRXb3JsZCk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVn
aWVzRWZsLmNwcDoKKyAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc0VmbDo6Z2V0UGx1Z2luSW5m
byk6CisgICAgICAgICogZXdrL2V3a19pbnRlbnQuY3BwOgorICAgICAgICAoZXdrX2ludGVudF9l
eHRyYV9nZXQpOgorCiAyMDEyLTEwLTA1ICBDaHJpc3RvcGhlIER1bWV6ICA8Y2hyaXN0b3BoZS5k
dW1lekBpbnRlbC5jb20+CiAKICAgICAgICAgW0VGTF0gRml4IHdpbmRvdyByZXNpemluZyAvIG1v
dmluZyBpbiBXSzEgYW5kIFdLVFIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwppbmRleCAxNmY4OWNmODJmNmU2MGI3
ZWNiNWUyMWY2ZjU3NGRiZTY1MGNmYzNmLi44YWFlMDI3NjRkZmE5YWQxZGNiZmE2ZjU3MDYxMTdl
MzU3ZWQ4MDY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTItMTAtMDUg
IENhaW8gTWFyY2VsbyBkZSBPbGl2ZWlyYSBGaWxobyAgPGNhaW8ub2xpdmVpcmFAb3BlbmJvc3Nh
Lm9yZz4KKworICAgICAgICBSZW5hbWUgZmlyc3Qvc2Vjb25kIHRvIGtleS92YWx1ZSBpbiBIYXNo
TWFwIGl0ZXJhdG9ycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9ODI3ODQKKworICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KKworICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc0d0ay5jcHA6CisgICAgICAgIChQ
bGF0Zm9ybVN0cmF0ZWdpZXNHdGs6OmdldFBsdWdpbkluZm8pOgorICAgICAgICAqIHdlYmtpdC93
ZWJraXRmYXZpY29uZGF0YWJhc2UuY3BwOgorICAgICAgICAod2Via2l0RmF2aWNvbkRhdGFiYXNl
SW1wb3J0RmluaXNoZWQpOgorICAgICAgICAqIHdlYmtpdC93ZWJraXR3ZWJwbHVnaW4uY3BwOgor
ICAgICAgICAod2Via2l0X3dlYl9wbHVnaW5fZ2V0X21pbWV0eXBlcyk6CisKIDIwMTItMTAtMDQg
IFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgRmluYWwg
cGFydCBvZiAic3luYyIgdG8gImZsdXNoIiByZW5hbWluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCmluZGV4IDNi
ZDMyZmYwZDVhNGYyY2ZhODJmN2RlYzMwNGNhYjRkZTNlMWZlYmIuLmEyY2Q2YmIwNDFlMWMyZjVh
MGRhMTQyOWQ3NDg5NzI0OTU2OWQwNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NCBA
QAorMjAxMi0xMC0wNSAgQ2FpbyBNYXJjZWxvIGRlIE9saXZlaXJhIEZpbGhvICA8Y2Fpby5vbGl2
ZWlyYUBvcGVuYm9zc2Eub3JnPgorCisgICAgICAgIFJlbmFtZSBmaXJzdC9zZWNvbmQgdG8ga2V5
L3ZhbHVlIGluIEhhc2hNYXAgaXRlcmF0b3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD04Mjc4NAorCisgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2Vp
ZGVsLgorCisgICAgICAgICogSGlzdG9yeS9XZWJIaXN0b3J5Lm1tOgorICAgICAgICAoLVtXZWJI
aXN0b3J5UHJpdmF0ZSByZW1vdmVJdGVtRnJvbURhdGVDYWNoZXM6XSk6CisgICAgICAgICgtW1dl
Ykhpc3RvcnlQcml2YXRlIG9yZGVyZWRMYXN0VmlzaXRlZERheXNdKToKKyAgICAgICAgKFdlYkhp
c3RvcnlXcml0ZXI6OldlYkhpc3RvcnlXcml0ZXIpOgorICAgICAgICAqIE1pc2MvV2ViQ29yZVN0
YXRpc3RpY3MubW06CisgICAgICAgICgrW1dlYkNvcmVTdGF0aXN0aWNzIGphdmFTY3JpcHRQcm90
ZWN0ZWRPYmplY3RUeXBlQ291bnRzXSk6CisgICAgICAgICgrW1dlYkNvcmVTdGF0aXN0aWNzIGph
dmFTY3JpcHRPYmplY3RUeXBlQ291bnRzXSk6CisgICAgICAgICogUGx1Z2lucy9Ib3N0ZWQvTmV0
c2NhcGVQbHVnaW5Ib3N0TWFuYWdlci5tbToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVn
aW5Ib3N0TWFuYWdlcjo6aG9zdEZvclBsdWdpbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBl
UGx1Z2luSG9zdE1hbmFnZXI6OnBsdWdpbkhvc3REaWVkKToKKyAgICAgICAgKFdlYktpdDo6TmV0
c2NhcGVQbHVnaW5Ib3N0TWFuYWdlcjo6ZGlkQ3JlYXRlV2luZG93KToKKyAgICAgICAgKiBQbHVn
aW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkhvc3RQcm94eS5tbToKKyAgICAgICAgKFdlYktpdDo6
TmV0c2NhcGVQbHVnaW5Ib3N0UHJveHk6OnBsdWdpbkhvc3REaWVkKToKKyAgICAgICAgKiBQbHVn
aW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW06CisgICAgICAgIChXZWJL
aXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6TG9jYWxPYmplY3RNYXA6OmlkRm9yT2Jq
ZWN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpMb2Nh
bE9iamVjdE1hcDo6cmV0YWluKToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5JbnN0
YW5jZVByb3h5OjpMb2NhbE9iamVjdE1hcDo6cmVsZWFzZSk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6TG9jYWxPYmplY3RNYXA6OmZvcmdldCk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6ZGVzdHJveSk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6d2ViRnJhbWVEaWRGaW5p
c2hMb2FkV2l0aFJlYXNvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFu
Y2VQcm94eTo6Y2FuY2VsQ2hlY2tJZkFsbG93ZWRUb0xvYWRVUkwpOgorICAgICAgICAqIFBsdWdp
bnMvSG9zdGVkL1Byb3h5SW5zdGFuY2UubW06CisgICAgICAgIChXZWJLaXQ6OlByb3h5SW5zdGFu
Y2U6Om1ldGhvZE5hbWVkKToKKyAgICAgICAgKFdlYktpdDo6UHJveHlJbnN0YW5jZTo6ZmllbGRO
YW1lZCk6CisgICAgICAgICogUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblZpZXcubW06CisgICAg
ICAgICgtW1dlYk5ldHNjYXBlUGx1Z2luVmlldyBzdG9wVGltZXJzXSk6CisgICAgICAgICgtW1dl
Yk5ldHNjYXBlUGx1Z2luVmlldyBzdGFydFRpbWVyc10pOgorICAgICAgICAqIFdlYkNvcmVTdXBw
b3J0L1dlYk5vdGlmaWNhdGlvbkNsaWVudC5tbToKKyAgICAgICAgKFdlYk5vdGlmaWNhdGlvbkNs
aWVudDo6c2hvdyk6CisgICAgICAgIChXZWJOb3RpZmljYXRpb25DbGllbnQ6OmNsZWFyTm90aWZp
Y2F0aW9ucyk6CisgICAgICAgIChXZWJOb3RpZmljYXRpb25DbGllbnQ6Om5vdGlmaWNhdGlvbk9i
amVjdERlc3Ryb3llZCk6CisgICAgICAgICogV2ViVmlldy9XZWJIVE1MVmlldy5tbToKKyAgICAg
ICAgKGNvbW1hbmROYW1lRm9yU2VsZWN0b3IpOgorCiAyMDEyLTEwLTA0ICBKb24gTGVlICA8am9u
bGVlQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgYSBzZXR0aW5nIHRvIGVuYWJsZSBwbHVnaW4g
c25hcHNob3R0aW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCmluZGV4IDY1YWUyNjQ5OWExOWFjNDM0M2M3YjdlMGRj
NzlmNGVjMDQwNDUyMjMuLjhiNmM3YjFlODYzNTVmY2Q3NzdlYjlmY2FkMzk0NTI4OGRmMTJjZjIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQvcXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTItMTAtMDUgIENhaW8gTWFyY2Vs
byBkZSBPbGl2ZWlyYSBGaWxobyAgPGNhaW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KKworICAg
ICAgICBSZW5hbWUgZmlyc3Qvc2Vjb25kIHRvIGtleS92YWx1ZSBpbiBIYXNoTWFwIGl0ZXJhdG9y
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI3ODQK
KworICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KKworICAgICAgICAqIEFwaS9xd2Vi
cGFnZS5jcHA6CisgICAgICAgIChleHRyYWN0Q29udGVudFR5cGVGcm9tUGx1Z2luVmVjdG9yKToK
KyAgICAgICAgKiBBcGkvcXdlYnBsdWdpbmRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFFXZWJQbHVn
aW5JbmZvOjptaW1lVHlwZXMpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3Ry
YXRlZ2llc1F0LmNwcDoKKyAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc1F0OjpnZXRQbHVnaW5J
bmZvKToKKwogMjAxMi0xMC0wNSAgU2ltb24gSGF1c21hbm4gIDxzaW1vbi5oYXVzbWFubkBkaWdp
YS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEzMDQ5NS4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvd2luL0No
YW5nZUxvZwppbmRleCA2ZDU2NmM3ZDI2NDFkNzYwYWQyYzM0YTU4MjRjZWNlMTYyNjdjNmU4Li44
YTU0OTA2ZDYyMmE3Mzg4OGZmOWM1NGQ2NzU5MmM5OWIwY2FjNmFmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMjggQEAKKzIwMTItMTAtMDUgIENhaW8gTWFyY2VsbyBkZSBPbGl2ZWlyYSBG
aWxobyAgPGNhaW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KKworICAgICAgICBSZW5hbWUgZmly
c3Qvc2Vjb25kIHRvIGtleS92YWx1ZSBpbiBIYXNoTWFwIGl0ZXJhdG9ycworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI3ODQKKworICAgICAgICBSZXZp
ZXdlZCBieSBFcmljIFNlaWRlbC4KKworICAgICAgICAqIENPTVByb3BlcnR5QmFnLmg6CisgICAg
ICAgICg6OlJlYWQpOgorICAgICAgICAoOjpHZXRQcm9wZXJ0eUluZm8pOgorICAgICAgICAqIFdl
YkNvcmVTdGF0aXN0aWNzLmNwcDoKKyAgICAgICAgKFdlYkNvcmVTdGF0aXN0aWNzOjpqYXZhU2Ny
aXB0UHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50cyk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQv
V2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcDoKKyAgICAgICAgKFdlYlBsYXRmb3JtU3RyYXRlZ2ll
czo6Z2V0UGx1Z2luSW5mbyk6CisgICAgICAgICogV2ViSGlzdG9yeS5jcHA6CisgICAgICAgIChX
ZWJIaXN0b3J5OjpyZW1vdmVJdGVtRnJvbURhdGVDYWNoZXMpOgorICAgICAgICAqIFdlYktpdENP
TUFQSS5jcHA6CisgICAgICAgIChjbGFzc0ZhY3RvcnkpOgorICAgICAgICAqIFdlYktpdFN0YXRp
c3RpY3MuY3BwOgorICAgICAgICAoV2ViS2l0U3RhdGlzdGljczo6Y29tQ2xhc3NOYW1lQ291bnRz
KToKKyAgICAgICAgKiBXZWJOb3RpZmljYXRpb25DZW50ZXIuY3BwOgorICAgICAgICAoV2ViTm90
aWZpY2F0aW9uQ2VudGVyOjpwb3N0Tm90aWZpY2F0aW9uSW50ZXJuYWwpOgorICAgICAgICAoV2Vi
Tm90aWZpY2F0aW9uQ2VudGVyOjphZGRPYnNlcnZlcik6CisgICAgICAgIChXZWJOb3RpZmljYXRp
b25DZW50ZXI6OnJlbW92ZU9ic2VydmVyKToKKwogMjAxMi0xMC0wNCAgU2ltb24gRnJhc2VyICA8
c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBGaW5hbCBwYXJ0IG9mICJzeW5jIiB0
byAiZmx1c2giIHJlbmFtaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbmNlL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQvd2luY2UvQ2hhbmdlTG9nCmluZGV4IGU1NzIyZjMzM2U2NTgy
ZmU1MWQyYzgzYWIyOTVkZGY5NzJjYTMwYzMuLmRlYjkwNWFiYzE3MTY3OWJkM2Q3NzlhMDUyZjYy
MWJkNDg1NjJhY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luY2UvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvd2luY2UvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTIt
MTAtMDUgIENhaW8gTWFyY2VsbyBkZSBPbGl2ZWlyYSBGaWxobyAgPGNhaW8ub2xpdmVpcmFAb3Bl
bmJvc3NhLm9yZz4KKworICAgICAgICBSZW5hbWUgZmlyc3Qvc2Vjb25kIHRvIGtleS92YWx1ZSBp
biBIYXNoTWFwIGl0ZXJhdG9ycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9ODI3ODQKKworICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KKwor
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmNwcDoKKyAg
ICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjpnZXRQbHVnaW5JbmZvKToKKwogMjAxMi0x
MC0wNCAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBT
dGFuZGFyZGl6ZSBvbiAiZmx1c2giIHRlcm1pbm9sb2d5IGZvciBjb21wb3NpdGluZyBsYXllciBm
bHVzaGluZy9zeW5jaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNmQwOWM2Mzg3YzJkNTQyYTQwZjkzNDk5ZmYw
YzMxNGQ1ZTVkNzE4Ni4uNzlkMDBmN2VkMzZjYjk0MGQzYzlmMzAwZDM4YWY0N2E0ZDdlN2U2NiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyOCBAQAorMjAxMi0xMC0wNSAgQ2FpbyBNYXJjZWxvIGRl
IE9saXZlaXJhIEZpbGhvICA8Y2Fpby5vbGl2ZWlyYUBvcGVuYm9zc2Eub3JnPgorCisgICAgICAg
IFJlbmFtZSBmaXJzdC9zZWNvbmQgdG8ga2V5L3ZhbHVlIGluIEhhc2hNYXAgaXRlcmF0b3JzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Mjc4NAorCisg
ICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgorCisgICAgICAgICogUGxhdGZvcm0vQ29y
ZUlQQy9Bcmd1bWVudENvZGVycy5oOgorICAgICAgICAqIFBsYXRmb3JtL0NvcmVJUEMvQ29ubmVj
dGlvbi5jcHA6CisgICAgICAgIChDb3JlSVBDOjpDb25uZWN0aW9uOjpTeW5jTWVzc2FnZVN0YXRl
OjpnZXRPckNyZWF0ZSk6CisgICAgICAgIChDb3JlSVBDOjpDb25uZWN0aW9uOjp3YWl0Rm9yTWVz
c2FnZSk6CisgICAgICAgIChDb3JlSVBDOjpDb25uZWN0aW9uOjpwcm9jZXNzSW5jb21pbmdNZXNz
YWdlKToKKyAgICAgICAgKiBQbGF0Zm9ybS9ndGsvV29ya1F1ZXVlR3RrLmNwcDoKKyAgICAgICAg
KFdvcmtRdWV1ZTo6cmVnaXN0ZXJFdmVudFNvdXJjZUhhbmRsZXIpOgorICAgICAgICAoV29ya1F1
ZXVlOjp1bnJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKToKKyAgICAgICAgKiBQbGF0Zm9ybS9t
YWMvV29ya1F1ZXVlTWFjLmNwcDoKKyAgICAgICAgKFdvcmtRdWV1ZTo6dW5yZWdpc3Rlck1hY2hQ
b3J0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKiBTaGFyZWQvUGx1Z2lucy9OUFJlbW90ZU9iamVj
dE1hcC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5QUmVtb3RlT2JqZWN0TWFwOjpwbHVnaW5EZXN0
cm95ZWQpOgorICAgICAgICAqIFNoYXJlZC9Vc2VyTWVzc2FnZUNvZGVycy5oOgorICAgICAgICAo
V2ViS2l0OjpVc2VyTWVzc2FnZUVuY29kZXI6OmJhc2VFbmNvZGUpOgorICAgICAgICAqIFNoYXJl
ZC9XZWJQcmVmZXJlbmNlc1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6dmFsdWVGb3JLZXkp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQcmVmZXJlbmNlc1N0b3JlOjpnZXRCb29sVmFsdWVGb3JL
ZXkpOgorICAgICAgICAqIFNoYXJlZC9tYWMvV2ViQ29yZUFyZ3VtZW50Q29kZXJzTWFjLm1tOgor
ICAgICAgICAoQ29yZUlQQzo6OjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9xdC9Bcmd1bWVu
dENvZGVyc1F0LmNwcDoKKyAgICAgICAgKENvcmVJUEM6Ojo6ZGVjb2RlKToKKyAgICAgICAgKiBT
aGFyZWQvc291cC9XZWJDb3JlQXJndW1lbnRDb2RlcnNTb3VwLmNwcDoKKyAgICAgICAgKENvcmVJ
UEM6Ojo6ZGVjb2RlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3
YXJkX2xpc3QuY3BwOgorICAgICAgICAoX0V3a19CYWNrX0ZvcndhcmRfTGlzdDo6fl9Fd2tfQmFj
a19Gb3J3YXJkX0xpc3QpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0
LmNwcDoKKyAgICAgICAgKF9Fd2tfQ29udGV4dDo6fl9Fd2tfQ29udGV4dCk6CisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwOgorICAgICAgICAoX2V3a192aWV3X3ByaXZf
bG9hZGluZ19yZXNvdXJjZXNfY2xlYXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFdlYlZpZXcuY3BwOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2dldF9zdWJyZXNvdXJj
ZXMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcDoK
KyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlQ29udGFpbmVyRm9yYWxsKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL21hYy9XS1ByaW50aW5nVmlldy5tbToKKyAgICAgICAgKC1bV0tQcmludGlu
Z1ZpZXcgX2V4cGVjdGVkUHJldmlld0NhbGxiYWNrRm9yUmVjdDpdKToKKyAgICAgICAgKHBhZ2VE
aWREcmF3VG9QREYpOgorICAgICAgICAoLVtXS1ByaW50aW5nVmlldyBfZHJhd1ByZXZpZXc6XSk6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tOgorICAgICAgICAoY29tbWFu
ZE5hbWVGb3JTZWxlY3Rvcik6CisgICAgICAgICgtW1dLVmlldyB2YWxpZGF0ZVVzZXJJbnRlcmZh
Y2VJdGVtOl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3Jk
aW5hdGVkQmFja2luZ1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRCYWNr
aW5nU3RvcmU6OnVwZGF0ZVRpbGUpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZEJhY2tp
bmdTdG9yZTo6dGV4dHVyZSk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkQmFja2luZ1N0
b3JlOjpwYWludFRvVGV4dHVyZU1hcHBlcik6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVk
QmFja2luZ1N0b3JlOjpjb21taXRUaWxlT3BlcmF0aW9ucyk6CisgICAgICAgICogVUlQcm9jZXNz
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnVwZGF0ZVRpbGVGb3JMYXll
cik6CisgICAgICAgICogVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVu
ZGVyZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVSZW5kZXJlcjo6YWRqdXN0UG9z
aXRpb25Gb3JGaXhlZExheWVycyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZVJlbmRlcmVy
OjpzeW5jQ2FudmFzKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlUmVuZGVyZXI6OnNldExh
eWVyQ2hpbGRyZW4pOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVSZW5kZXJlcjo6c2V0TGF5
ZXJGaWx0ZXJzKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlUmVuZGVyZXI6OnNldExheWVy
U3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVSZW5kZXJlcjo6YXNzaWduSW1hZ2VU
b0xheWVyKToKKyAgICAgICAgKiBVSVByb2Nlc3MvR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVz
dE1hbmFnZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Okdlb2xvY2F0aW9uUGVybWlzc2lv
blJlcXVlc3RNYW5hZ2VyUHJveHk6OmludmFsaWRhdGVSZXF1ZXN0cyk6CisgICAgICAgICogVUlQ
cm9jZXNzL0luc3BlY3RvclNlcnZlci9XZWJJbnNwZWN0b3JTZXJ2ZXIuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJJbnNwZWN0b3JTZXJ2ZXI6On5XZWJJbnNwZWN0b3JTZXJ2ZXIpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JTZXJ2ZXI6OnJlZ2lzdGVyUGFnZSk6CisgICAgICAgICog
VUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9XZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbjo6c2VuZEhUVFBSZXNw
b25zZUhlYWRlcik6CisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9xdC9XZWJJ
bnNwZWN0b3JTZXJ2ZXJRdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclNlcnZl
cjo6YnVpbGRQYWdlTGlzdCk6CisgICAgICAgICogVUlQcm9jZXNzL05vdGlmaWNhdGlvbnMvTm90
aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eTo6aW52YWxpZGF0
ZVJlcXVlc3RzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzUHJv
eHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5Qcm9jZXNzUHJveHk6OnBsdWdpblByb2Nl
c3NDcmFzaGVkT3JGYWlsZWRUb0xhdW5jaCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkNvbnRl
eHQuY3BwOgorICAgICAgICAoV2ViS2l0OjpjcmVhdGVEaWN0aW9uYXJ5RnJvbUhhc2hNYXApOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9XZWJJY29uRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJJY29uRGF0YWJhc2U6OmRpZEZpbmlzaFVSTEltcG9ydCk6CisgICAgICAgICogVUlQcm9j
ZXNzL1dlYkludGVudERhdGEuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnRlbnREYXRhOjpl
eHRyYXMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OmNoZWNrVVJMUmVjZWl2ZWRGcm9tV2ViUHJvY2Vz
cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6YWRkQmFja0ZvcndhcmRJdGVt
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpmcmFtZUNvdW50SW5QYWdlKToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL0dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uUGVybWlzc2lvblJl
cXVlc3RNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6R2VvbG9jYXRpb25QZXJtaXNzaW9u
UmVxdWVzdE1hbmFnZXI6OmNhbmNlbFJlcXVlc3RGb3JHZW9sb2NhdGlvbik6CisgICAgICAgIChX
ZWJLaXQ6Okdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyOjpkaWRSZWNlaXZlR2Vv
bG9jYXRpb25QZXJtaXNzaW9uRGVjaXNpb24pOgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxlTm9kZUhhbmRsZS5jcHA6CisgICAgICAgIChXZWJL
aXQ6OkluamVjdGVkQnVuZGxlTm9kZUhhbmRsZTo6Z2V0T3JDcmVhdGUpOgorICAgICAgICAqIFdl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGUuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpnZXRPckNyZWF0
ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZUlu
dGVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkluamVjdGVkQnVuZGxlSW50ZW50OjpleHRyYXMp
OgorICAgICAgICAqIFdlYlByb2Nlc3MvTm90aWZpY2F0aW9ucy9XZWJOb3RpZmljYXRpb25NYW5h
Z2VyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViTm90aWZpY2F0aW9uTWFuYWdlcjo6cG9saWN5
Rm9yT3JpZ2luKToKKyAgICAgICAgKFdlYktpdDo6V2ViTm90aWZpY2F0aW9uTWFuYWdlcjo6c2hv
dyk6CisgICAgICAgIChXZWJLaXQ6OldlYk5vdGlmaWNhdGlvbk1hbmFnZXI6OmNsZWFyTm90aWZp
Y2F0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OldlYk5vdGlmaWNhdGlvbk1hbmFnZXI6OnJlbW92
ZU5vdGlmaWNhdGlvbkZyb21Db250ZXh0TWFwKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdp
bnMvTmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0TWFwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TlBS
dW50aW1lT2JqZWN0TWFwOjppbnZhbGlkYXRlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdp
bnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW4uY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2Fw
ZVBsdWdpbjo6ZGVzdHJveVN0cmVhbSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2lu
OjpmcmFtZURpZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdp
bjo6ZnJhbWVEaWRGYWlsKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmll
dy5jcHA6CisgICAgICAgIChXZWJLaXQ6OmJ1aWxkSFRUUEhlYWRlcnMpOgorICAgICAgICAoV2Vi
S2l0OjpQbHVnaW5WaWV3Ojp+UGx1Z2luVmlldyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6bGF5ZXJCeUlEKToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVD
b29yZGluYXRvci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjph
ZG9wdEltYWdlQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRp
bmF0b3I6OnJlbGVhc2VJbWFnZUJhY2tpbmdTdG9yZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
QmFja0ZvcndhcmRMaXN0UHJveHk6OnJlbW92ZUl0ZW0pOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6Y29tbWFuZE5hbWVG
b3JTZWxlY3Rvck5hbWUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OnZpc2l0ZWRMaW5rU3RhdGVDaGFuZ2VkKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6YWxsVmlzaXRlZExpbmtTdGF0ZUNoYW5nZWQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpmb2N1c2VkV2ViUGFnZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3M6OmNyZWF0ZVdlYlBhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzOjp3ZWJQYWdlR3JvdXApOgorICAgICAgICAoV2ViS2l0Ojpmcm9tQ291bnRlZFNldFRv
SGFzaE1hcCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OnNldFRleHRDaGVja2VyU3Rh
dGUpOgorCiAyMDEyLTEwLTA1ICBKb3PDqSBEYXBlbmEgUGF6ICA8amRhcGVuYUBpZ2FsaWEuY29t
PgogCiAgICAgICAgIFtHVEtdIEFkZCBzdXBwb3J0IGZvciBjcmVhdGluZyBFR0wgY29udGV4dHMK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgKaW5kZXggMjdm
OGUwZWFiYmViMzJlZTc0ZDUwOTc4MjE0MWJhNTQ2ZjVjMThlOS4uM2FjZjJlZjEwODAzMzNmZjlj
N2VhNmJkZDA0NDRjZjE3YTUzZWNmMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U0NhbGxiYWNrT2JqZWN0LmgKQEAgLTgzLDEzICs4MywxMyBAQCBzdHJ1Y3QgSlNDYWxsYmFja09i
amVjdERhdGEgOiBXZWFrSGFuZGxlT3duZXIgewogICAgICAgICAgICAgUHJpdmF0ZVByb3BlcnR5
TWFwOjpjb25zdF9pdGVyYXRvciBsb2NhdGlvbiA9IG1fcHJvcGVydHlNYXAuZmluZChwcm9wZXJ0
eU5hbWUuaW1wbCgpKTsKICAgICAgICAgICAgIGlmIChsb2NhdGlvbiA9PSBtX3Byb3BlcnR5TWFw
LmVuZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7Ci0gICAgICAgICAgICBy
ZXR1cm4gbG9jYXRpb24tPnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgIHJldHVybiBsb2NhdGlv
bi0+dmFsdWUuZ2V0KCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHZvaWQgc2V0UHJp
dmF0ZVByb3BlcnR5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlKQogICAgICAgICB7CiAg
ICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gZW1wdHk7Ci0gICAgICAgICAgICBtX3By
b3BlcnR5TWFwLmFkZChwcm9wZXJ0eU5hbWUuaW1wbCgpLCBlbXB0eSkuaXRlcmF0b3ItPnNlY29u
ZC5zZXQoZ2xvYmFsRGF0YSwgb3duZXIsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcHJvcGVydHlN
YXAuYWRkKHByb3BlcnR5TmFtZS5pbXBsKCksIGVtcHR5KS5pdGVyYXRvci0+dmFsdWUuc2V0KGds
b2JhbERhdGEsIG93bmVyLCB2YWx1ZSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHZv
aWQgZGVsZXRlUHJpdmF0ZVByb3BlcnR5KGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkK
QEAgLTEwMCw4ICsxMDAsOCBAQCBzdHJ1Y3QgSlNDYWxsYmFja09iamVjdERhdGEgOiBXZWFrSGFu
ZGxlT3duZXIgewogICAgICAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCiAgICAgICAgIHsKICAgICAgICAgICAgIGZvciAoUHJpdmF0ZVByb3BlcnR5TWFwOjppdGVy
YXRvciBwdHIgPSBtX3Byb3BlcnR5TWFwLmJlZ2luKCk7IHB0ciAhPSBtX3Byb3BlcnR5TWFwLmVu
ZCgpOyArK3B0cikgewotICAgICAgICAgICAgICAgIGlmIChwdHItPnNlY29uZCkKLSAgICAgICAg
ICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJnB0ci0+c2Vjb25kKTsKKyAgICAgICAgICAgICAg
ICBpZiAocHRyLT52YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJnB0
ci0+dmFsdWUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgKaW5kZXggNjg4
ZTdiOGI5OGNkMjIyNGVmMTg3OWUzZTgxMDFhYjNmOWE5OTYyNC4uMWEwNjNlNjIwZDExNWZlN2Q4
YTllMmM3ODUwYmJkN2ZhY2VlYmM1OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgKQEAgLTQ3MSw4ICs0NzEsOCBAQCB2
b2lkIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVz
KEpTT2JqZWN0KiBvYmplY3QsIEV4ZQogICAgICAgICAgICAgdHlwZWRlZiBPcGFxdWVKU0NsYXNz
U3RhdGljVmFsdWVzVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0ZXJhdG9yOwogICAgICAgICAgICAg
aXRlcmF0b3IgZW5kID0gc3RhdGljVmFsdWVzLT5lbmQoKTsKICAgICAgICAgICAgIGZvciAoaXRl
cmF0b3IgaXQgPSBzdGF0aWNWYWx1ZXMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAg
ICAgICAgICAgICAgIFN0cmluZ0ltcGwqIG5hbWUgPSBpdC0+Zmlyc3QuZ2V0KCk7Ci0gICAgICAg
ICAgICAgICAgU3RhdGljVmFsdWVFbnRyeSogZW50cnkgPSBpdC0+c2Vjb25kLmdldCgpOworICAg
ICAgICAgICAgICAgIFN0cmluZ0ltcGwqIG5hbWUgPSBpdC0+a2V5LmdldCgpOworICAgICAgICAg
ICAgICAgIFN0YXRpY1ZhbHVlRW50cnkqIGVudHJ5ID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAg
ICAgICAgICAgIGlmIChlbnRyeS0+Z2V0UHJvcGVydHkgJiYgKCEoZW50cnktPmF0dHJpYnV0ZXMg
JiBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRFbnVtKSB8fCAobW9kZSA9PSBJbmNsdWRlRG9udEVu
dW1Qcm9wZXJ0aWVzKSkpCiAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElk
ZW50aWZpZXIoZXhlYywgbmFtZSkpOwogICAgICAgICAgICAgfQpAQCAtNDgyLDggKzQ4Miw4IEBA
IHZvaWQgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlCiAgICAgICAgICAgICB0eXBlZGVmIE9wYXF1ZUpTQ2xh
c3NTdGF0aWNGdW5jdGlvbnNUYWJsZTo6Y29uc3RfaXRlcmF0b3IgaXRlcmF0b3I7CiAgICAgICAg
ICAgICBpdGVyYXRvciBlbmQgPSBzdGF0aWNGdW5jdGlvbnMtPmVuZCgpOwogICAgICAgICAgICAg
Zm9yIChpdGVyYXRvciBpdCA9IHN0YXRpY0Z1bmN0aW9ucy0+YmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nSW1wbCogbmFtZSA9IGl0LT5maXJzdC5nZXQo
KTsKLSAgICAgICAgICAgICAgICBTdGF0aWNGdW5jdGlvbkVudHJ5KiBlbnRyeSA9IGl0LT5zZWNv
bmQuZ2V0KCk7CisgICAgICAgICAgICAgICAgU3RyaW5nSW1wbCogbmFtZSA9IGl0LT5rZXkuZ2V0
KCk7CisgICAgICAgICAgICAgICAgU3RhdGljRnVuY3Rpb25FbnRyeSogZW50cnkgPSBpdC0+dmFs
dWUuZ2V0KCk7CiAgICAgICAgICAgICAgICAgaWYgKCEoZW50cnktPmF0dHJpYnV0ZXMgJiBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZURvbnRFbnVtKSB8fCAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9w
ZXJ0aWVzKSkKICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmll
cihleGVjLCBuYW1lKSk7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTQ2xhc3NSZWYuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U0NsYXNzUmVmLmNwcAppbmRleCBhZTIxYjExMWJiOTYxNTk5NzFiMjNjZmYyNGEzNTEzYzc5YjYx
Njg0Li45NzYyMDNmMDgxYTY2YzY5MjQ4ZjQ3ZWNhMjRhYTViOGRiODUxNmZjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2xhc3NSZWYuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNDbGFzc1JlZi5jcHAKQEAgLTkzLDEzICs5MywxMyBAQCBPcGFx
dWVKU0NsYXNzOjp+T3BhcXVlSlNDbGFzcygpCiAgICAgaWYgKG1fc3RhdGljVmFsdWVzKSB7CiAg
ICAgICAgIE9wYXF1ZUpTQ2xhc3NTdGF0aWNWYWx1ZXNUYWJsZTo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gbV9zdGF0aWNWYWx1ZXMtPmVuZCgpOwogICAgICAgICBmb3IgKE9wYXF1ZUpTQ2xhc3NTdGF0
aWNWYWx1ZXNUYWJsZTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3N0YXRpY1ZhbHVlcy0+YmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgQVNTRVJUKCFpdC0+Zmlyc3QtPmlzSWRl
bnRpZmllcigpKTsKKyAgICAgICAgICAgIEFTU0VSVCghaXQtPmtleS0+aXNJZGVudGlmaWVyKCkp
OwogICAgIH0KIAogICAgIGlmIChtX3N0YXRpY0Z1bmN0aW9ucykgewogICAgICAgICBPcGFxdWVK
U0NsYXNzU3RhdGljRnVuY3Rpb25zVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fc3RhdGlj
RnVuY3Rpb25zLT5lbmQoKTsKICAgICAgICAgZm9yIChPcGFxdWVKU0NsYXNzU3RhdGljRnVuY3Rp
b25zVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zdGF0aWNGdW5jdGlvbnMtPmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIEFTU0VSVCghaXQtPmZpcnN0LT5pc0lkZW50
aWZpZXIoKSk7CisgICAgICAgICAgICBBU1NFUlQoIWl0LT5rZXktPmlzSWRlbnRpZmllcigpKTsK
ICAgICB9CiAjZW5kaWYKICAgICAKQEAgLTEzMyw4ICsxMzMsOCBAQCBPcGFxdWVKU0NsYXNzQ29u
dGV4dERhdGE6Ok9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YShKU0M6OkpTR2xvYmFsRGF0YSYsIE9w
YXF1ZUpTQwogICAgICAgICBzdGF0aWNWYWx1ZXMgPSBhZG9wdFB0cihuZXcgT3BhcXVlSlNDbGFz
c1N0YXRpY1ZhbHVlc1RhYmxlKTsKICAgICAgICAgT3BhcXVlSlNDbGFzc1N0YXRpY1ZhbHVlc1Rh
YmxlOjpjb25zdF9pdGVyYXRvciBlbmQgPSBqc0NsYXNzLT5tX3N0YXRpY1ZhbHVlcy0+ZW5kKCk7
CiAgICAgICAgIGZvciAoT3BhcXVlSlNDbGFzc1N0YXRpY1ZhbHVlc1RhYmxlOjpjb25zdF9pdGVy
YXRvciBpdCA9IGpzQ2xhc3MtPm1fc3RhdGljVmFsdWVzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKLSAgICAgICAgICAgIEFTU0VSVCghaXQtPmZpcnN0LT5pc0lkZW50aWZpZXIoKSk7Ci0g
ICAgICAgICAgICBzdGF0aWNWYWx1ZXMtPmFkZChTdHJpbmdJbXBsOjpjcmVhdGUoaXQtPmZpcnN0
LT5jaGFyYWN0ZXJzKCksIGl0LT5maXJzdC0+bGVuZ3RoKCkpLCBhZG9wdFB0cihuZXcgU3RhdGlj
VmFsdWVFbnRyeShpdC0+c2Vjb25kLT5nZXRQcm9wZXJ0eSwgaXQtPnNlY29uZC0+c2V0UHJvcGVy
dHksIGl0LT5zZWNvbmQtPmF0dHJpYnV0ZXMpKSk7CisgICAgICAgICAgICBBU1NFUlQoIWl0LT5r
ZXktPmlzSWRlbnRpZmllcigpKTsKKyAgICAgICAgICAgIHN0YXRpY1ZhbHVlcy0+YWRkKFN0cmlu
Z0ltcGw6OmNyZWF0ZShpdC0+a2V5LT5jaGFyYWN0ZXJzKCksIGl0LT5rZXktPmxlbmd0aCgpKSwg
YWRvcHRQdHIobmV3IFN0YXRpY1ZhbHVlRW50cnkoaXQtPnZhbHVlLT5nZXRQcm9wZXJ0eSwgaXQt
PnZhbHVlLT5zZXRQcm9wZXJ0eSwgaXQtPnZhbHVlLT5hdHRyaWJ1dGVzKSkpOwogICAgICAgICB9
CiAgICAgfQogCkBAIC0xNDIsMTUgKzE0MiwxNSBAQCBPcGFxdWVKU0NsYXNzQ29udGV4dERhdGE6
Ok9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YShKU0M6OkpTR2xvYmFsRGF0YSYsIE9wYXF1ZUpTQwog
ICAgICAgICBzdGF0aWNGdW5jdGlvbnMgPSBhZG9wdFB0cihuZXcgT3BhcXVlSlNDbGFzc1N0YXRp
Y0Z1bmN0aW9uc1RhYmxlKTsKICAgICAgICAgT3BhcXVlSlNDbGFzc1N0YXRpY0Z1bmN0aW9uc1Rh
YmxlOjpjb25zdF9pdGVyYXRvciBlbmQgPSBqc0NsYXNzLT5tX3N0YXRpY0Z1bmN0aW9ucy0+ZW5k
KCk7CiAgICAgICAgIGZvciAoT3BhcXVlSlNDbGFzc1N0YXRpY0Z1bmN0aW9uc1RhYmxlOjpjb25z
dF9pdGVyYXRvciBpdCA9IGpzQ2xhc3MtPm1fc3RhdGljRnVuY3Rpb25zLT5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIEFTU0VSVCghaXQtPmZpcnN0LT5pc0lkZW50aWZp
ZXIoKSk7Ci0gICAgICAgICAgICBzdGF0aWNGdW5jdGlvbnMtPmFkZChTdHJpbmdJbXBsOjpjcmVh
dGUoaXQtPmZpcnN0LT5jaGFyYWN0ZXJzKCksIGl0LT5maXJzdC0+bGVuZ3RoKCkpLCBhZG9wdFB0
cihuZXcgU3RhdGljRnVuY3Rpb25FbnRyeShpdC0+c2Vjb25kLT5jYWxsQXNGdW5jdGlvbiwgaXQt
PnNlY29uZC0+YXR0cmlidXRlcykpKTsKKyAgICAgICAgICAgIEFTU0VSVCghaXQtPmtleS0+aXNJ
ZGVudGlmaWVyKCkpOworICAgICAgICAgICAgc3RhdGljRnVuY3Rpb25zLT5hZGQoU3RyaW5nSW1w
bDo6Y3JlYXRlKGl0LT5rZXktPmNoYXJhY3RlcnMoKSwgaXQtPmtleS0+bGVuZ3RoKCkpLCBhZG9w
dFB0cihuZXcgU3RhdGljRnVuY3Rpb25FbnRyeShpdC0+dmFsdWUtPmNhbGxBc0Z1bmN0aW9uLCBp
dC0+dmFsdWUtPmF0dHJpYnV0ZXMpKSk7CiAgICAgICAgIH0KICAgICB9CiB9CiAKIE9wYXF1ZUpT
Q2xhc3NDb250ZXh0RGF0YSYgT3BhcXVlSlNDbGFzczo6Y29udGV4dERhdGEoRXhlY1N0YXRlKiBl
eGVjKQogewotICAgIE93blB0cjxPcGFxdWVKU0NsYXNzQ29udGV4dERhdGE+JiBjb250ZXh0RGF0
YSA9IGV4ZWMtPmdsb2JhbERhdGEoKS5vcGFxdWVKU0NsYXNzRGF0YS5hZGQodGhpcywgbnVsbHB0
cikuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBPd25QdHI8T3BhcXVlSlNDbGFzc0NvbnRleHREYXRh
PiYgY29udGV4dERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCkub3BhcXVlSlNDbGFzc0RhdGEuYWRk
KHRoaXMsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoIWNvbnRleHREYXRhKQog
ICAgICAgICBjb250ZXh0RGF0YSA9IGFkb3B0UHRyKG5ldyBPcGFxdWVKU0NsYXNzQ29udGV4dERh
dGEoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzKSk7CiAgICAgcmV0dXJuICpjb250ZXh0RGF0YTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKaW5kZXggYmQ4
YmZlYzBkNzcyM2NiOTIyZGZlZjgyY2I3N2FiMzQ5OTBkZWM4My4uY2RiZTcwZjFiZmMwNTgxYjkz
N2Q4MGJiZTJiNTQ4ZjkyMmRjZWEyMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAKQEAgLTY0MSw3ICs2NDEsNyBAQCB2b2lkIENvZGVCbG9jazo6ZHVt
cChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgICAgICBkYXRhTG9nKCIgICUxZCA9IHtcbiIsIGkp
OwogICAgICAgICAgICAgU3RyaW5nSnVtcFRhYmxlOjpTdHJpbmdPZmZzZXRUYWJsZTo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gbV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW2ldLm9m
ZnNldFRhYmxlLmVuZCgpOwogICAgICAgICAgICAgZm9yIChTdHJpbmdKdW1wVGFibGU6OlN0cmlu
Z09mZnNldFRhYmxlOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbV9yYXJlRGF0YS0+bV9zdHJpbmdT
d2l0Y2hKdW1wVGFibGVzW2ldLm9mZnNldFRhYmxlLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0
ZXIpCi0gICAgICAgICAgICAgICAgZGF0YUxvZygiXHRcdFwiJXNcIiA9PiAlMDRkXG4iLCBTdHJp
bmcoaXRlci0+Zmlyc3QpLnV0ZjgoKS5kYXRhKCksIGl0ZXItPnNlY29uZC5icmFuY2hPZmZzZXQp
OworICAgICAgICAgICAgICAgIGRhdGFMb2coIlx0XHRcIiVzXCIgPT4gJTA0ZFxuIiwgU3RyaW5n
KGl0ZXItPmtleSkudXRmOCgpLmRhdGEoKSwgaXRlci0+dmFsdWUuYnJhbmNoT2Zmc2V0KTsKICAg
ICAgICAgICAgIGRhdGFMb2coIiAgICAgIH1cbiIpOwogICAgICAgICAgICAgKytpOwogICAgICAg
ICB9IHdoaWxlIChpIDwgbV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLnNpemUo
KSk7CkBAIC0xODk5LDcgKzE4OTksNyBAQCB2b2lkIEV2YWxDb2RlQ2FjaGU6OnZpc2l0QWdncmVn
YXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEV2YWxDYWNoZU1hcDo6aXRlcmF0b3Ig
ZW5kID0gbV9jYWNoZU1hcC5lbmQoKTsKICAgICBmb3IgKEV2YWxDYWNoZU1hcDo6aXRlcmF0b3Ig
cHRyID0gbV9jYWNoZU1hcC5iZWdpbigpOyBwdHIgIT0gZW5kOyArK3B0cikKLSAgICAgICAgdmlz
aXRvci5hcHBlbmQoJnB0ci0+c2Vjb25kKTsKKyAgICAgICAgdmlzaXRvci5hcHBlbmQoJnB0ci0+
dmFsdWUpOwogfQogCiB2b2lkIENvZGVCbG9jazo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCkBAIC0zMDAyLDggKzMwMDIsOCBAQCBTdHJpbmcgQ29kZUJsb2NrOjpuYW1lRm9y
UmVnaXN0ZXIoaW50IHJlZ2lzdGVyTnVtYmVyKQogewogICAgIFN5bWJvbFRhYmxlOjppdGVyYXRv
ciBlbmQgPSBtX3N5bWJvbFRhYmxlLT5lbmQoKTsKICAgICBmb3IgKFN5bWJvbFRhYmxlOjppdGVy
YXRvciBwdHIgPSBtX3N5bWJvbFRhYmxlLT5iZWdpbigpOyBwdHIgIT0gZW5kOyArK3B0cikgewot
ICAgICAgICBpZiAocHRyLT5zZWNvbmQuZ2V0SW5kZXgoKSA9PSByZWdpc3Rlck51bWJlcikKLSAg
ICAgICAgICAgIHJldHVybiBTdHJpbmcocHRyLT5maXJzdCk7CisgICAgICAgIGlmIChwdHItPnZh
bHVlLmdldEluZGV4KCkgPT0gcmVnaXN0ZXJOdW1iZXIpCisgICAgICAgICAgICByZXR1cm4gU3Ry
aW5nKHB0ci0+a2V5KTsKICAgICB9CiAgICAgaWYgKG5lZWRzQWN0aXZhdGlvbigpICYmIHJlZ2lz
dGVyTnVtYmVyID09IGFjdGl2YXRpb25SZWdpc3RlcigpKQogICAgICAgICByZXR1cm4gQVNDSUlM
aXRlcmFsKCJhY3RpdmF0aW9uIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvSnVtcFRhYmxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSnVt
cFRhYmxlLmgKaW5kZXggYTAxZjkwY2IwZWUzOTJhNGJiYjBkOTIwODdlMTEyZDVmYTk1MTc4ZS4u
ZjU0YTM3MThmMDYzYjEyYTU1ZGI3YWQ2MjA5MjEzYjQyZDFhNGZjZSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0p1bXBUYWJsZS5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9KdW1wVGFibGUuaApAQCAtNTcsNyArNTcsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgICAgIFN0cmluZ09mZnNldFRhYmxlOjpjb25zdF9pdGVyYXRvciBs
b2MgPSBvZmZzZXRUYWJsZS5maW5kKHZhbHVlKTsKICAgICAgICAgICAgIGlmIChsb2MgPT0gZW5k
KQogICAgICAgICAgICAgICAgIHJldHVybiBkZWZhdWx0T2Zmc2V0OwotICAgICAgICAgICAgcmV0
dXJuIGxvYy0+c2Vjb25kLmJyYW5jaE9mZnNldDsKKyAgICAgICAgICAgIHJldHVybiBsb2MtPnZh
bHVlLmJyYW5jaE9mZnNldDsKICAgICAgICAgfQogCiAjaWYgRU5BQkxFKEpJVCkKQEAgLTY3LDcg
KzY3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBTdHJpbmdPZmZzZXRUYWJsZTo6
Y29uc3RfaXRlcmF0b3IgbG9jID0gb2Zmc2V0VGFibGUuZmluZCh2YWx1ZSk7CiAgICAgICAgICAg
ICBpZiAobG9jID09IGVuZCkKICAgICAgICAgICAgICAgICByZXR1cm4gY3RpRGVmYXVsdDsKLSAg
ICAgICAgICAgIHJldHVybiBsb2MtPnNlY29uZC5jdGlPZmZzZXQ7CisgICAgICAgICAgICByZXR1
cm4gbG9jLT52YWx1ZS5jdGlPZmZzZXQ7CiAgICAgICAgIH0KICNlbmRpZgogICAgIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVBy
b2ZpbGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xhenlPcGVyYW5kVmFs
dWVQcm9maWxlLmNwcAppbmRleCA1OWYwZDAyMzQzNDE3YTc0MWJjODI1NzM3ZDI2MTEzY2RjN2Ez
Mjk1Li5mOTIzZTRhMjhiYmNiMDAzOWE1MzczZTk2Zjg0NTIzZTc5Y2VlMDg4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVl
UHJvZmlsZS5jcHAKQEAgLTgxLDcgKzgxLDcgQEAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUqIExh
enlPcGVyYW5kVmFsdWVQcm9maWxlUGFyc2VyOjpnZXRJZlByZXNlbnQoCiAgICAgaWYgKGl0ZXIg
PT0gbV9tYXAuZW5kKCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIAotICAgIHJldHVybiBpdGVy
LT5zZWNvbmQ7CisgICAgcmV0dXJuIGl0ZXItPnZhbHVlOwogfQogCiBTcGVjdWxhdGVkVHlwZSBM
YXp5T3BlcmFuZFZhbHVlUHJvZmlsZVBhcnNlcjo6cHJlZGljdGlvbigKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TYW1wbGluZ1Rvb2wuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NhbXBsaW5nVG9vbC5jcHAKaW5kZXggZjA3ZGM3OWZiNzgy
NThkODYxZDRmNDg1MTdmMWI1NWIyOTYzOTUzZC4uZjliODI0NWU1NDc3YThmMzBlZDUyMWMzMTI2
YmYwMTlkNWNiMmU2NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1NhbXBsaW5nVG9vbC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Nh
bXBsaW5nVG9vbC5jcHAKQEAgLTQxMCw3ICs0MTAsNyBAQCB2b2lkIFNhbXBsaW5nVG9vbDo6ZHVt
cChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgVmVjdG9yPFNjcmlwdFNhbXBsZVJlY29yZCo+IGNvZGVC
bG9ja1NhbXBsZXMoc2NvcGVDb3VudCk7CiAgICAgU2NyaXB0U2FtcGxlUmVjb3JkTWFwOjppdGVy
YXRvciBpdGVyID0gbV9zY29wZVNhbXBsZU1hcC0+YmVnaW4oKTsKICAgICBmb3IgKGludCBpID0g
MDsgaSA8IHNjb3BlQ291bnQ7ICsraSwgKytpdGVyKQotICAgICAgICBjb2RlQmxvY2tTYW1wbGVz
W2ldID0gaXRlci0+c2Vjb25kLmdldCgpOworICAgICAgICBjb2RlQmxvY2tTYW1wbGVzW2ldID0g
aXRlci0+dmFsdWUuZ2V0KCk7CiAKICAgICBxc29ydChjb2RlQmxvY2tTYW1wbGVzLmJlZ2luKCks
IHNjb3BlQ291bnQsIHNpemVvZihTY3JpcHRTYW1wbGVSZWNvcmQqKSwgY29tcGFyZVNjcmlwdFNh
bXBsZVJlY29yZHMpOwogCkBAIC00NDYsOCArNDQ2LDggQEAgdm9pZCBTYW1wbGluZ1Rvb2w6OmR1
bXAoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICAgICAgICAgIFZlY3RvcjxMaW5lQ291bnRJbmZv
PiBsaW5lQ291bnRJbmZvKGxpbmVzQ291bnQpOwogICAgICAgICAgICAgICAgIGludCBsaW5lbm8g
PSAwOwogICAgICAgICAgICAgICAgIGZvciAoSGFzaE1hcDx1bnNpZ25lZCx1bnNpZ25lZD46Oml0
ZXJhdG9yIGl0ZXIgPSBsaW5lQ291bnRzLmJlZ2luKCk7IGl0ZXIgIT0gbGluZUNvdW50cy5lbmQo
KTsgKytpdGVyLCArK2xpbmVubykgewotICAgICAgICAgICAgICAgICAgICBsaW5lQ291bnRJbmZv
W2xpbmVub10ubGluZSA9IGl0ZXItPmZpcnN0OwotICAgICAgICAgICAgICAgICAgICBsaW5lQ291
bnRJbmZvW2xpbmVub10uY291bnQgPSBpdGVyLT5zZWNvbmQ7CisgICAgICAgICAgICAgICAgICAg
IGxpbmVDb3VudEluZm9bbGluZW5vXS5saW5lID0gaXRlci0+a2V5OworICAgICAgICAgICAgICAg
ICAgICBsaW5lQ291bnRJbmZvW2xpbmVub10uY291bnQgPSBpdGVyLT52YWx1ZTsKICAgICAgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBxc29ydChsaW5lQ291bnRJbmZvLmJlZ2luKCks
IGxpbmVzQ291bnQsIHNpemVvZihMaW5lQ291bnRJbmZvKSwgY29tcGFyZUxpbmVDb3VudEluZm9T
YW1wbGluZyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCmluZGV4IDA2ZTNiNzk1YmYzYzI4N2VkOTYyNmRhMjJl
ZGUyNmZjYTE2NTFiMWIuLjQ3OTZhOWE1MWVmNzI0YzcwODJkMmM3ZmFlZTViZTIwZTMyNjIyNjgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0
ZWNvZGVHZW5lcmF0b3IuY3BwCkBAIC0yMzAsNyArMjMwLDcgQEAgYm9vbCBCeXRlY29kZUdlbmVy
YXRvcjo6YWRkVmFyKGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBib29sIGlzQ29uc3RhbnQsIFJl
Z2lzdGUKICAgICBTeW1ib2xUYWJsZTo6QWRkUmVzdWx0IHJlc3VsdCA9IHN5bWJvbFRhYmxlKCku
YWRkKGlkZW50LmltcGwoKSwgbmV3RW50cnkpOwogCiAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRy
eSkgewotICAgICAgICByMCA9ICZyZWdpc3RlckZvcihyZXN1bHQuaXRlcmF0b3ItPnNlY29uZC5n
ZXRJbmRleCgpKTsKKyAgICAgICAgcjAgPSAmcmVnaXN0ZXJGb3IocmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZS5nZXRJbmRleCgpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtMjQ4
LDggKzI0OCw4IEBAIGludCBCeXRlY29kZUdlbmVyYXRvcjo6YWRkR2xvYmFsVmFyKAogICAgICAg
ICBuZXdFbnRyeS5hdHRlbXB0VG9XYXRjaCgpOwogICAgIFN5bWJvbFRhYmxlOjpBZGRSZXN1bHQg
cmVzdWx0ID0gc3ltYm9sVGFibGUoKS5hZGQoaWRlbnQuaW1wbCgpLCBuZXdFbnRyeSk7CiAgICAg
aWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29u
ZC5ub3RpZnlXcml0ZSgpOwotICAgICAgICBpbmRleCA9IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25k
LmdldEluZGV4KCk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUubm90aWZ5V3JpdGUo
KTsKKyAgICAgICAgaW5kZXggPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldEluZGV4KCk7CiAg
ICAgfQogICAgIHJldHVybiBpbmRleDsKIH0KQEAgLTExNTIsNyArMTE1Miw3IEBAIHVuc2lnbmVk
IEJ5dGVjb2RlR2VuZXJhdG9yOjphZGRDb25zdGFudChjb25zdCBJZGVudGlmaWVyJiBpZGVudCkK
ICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpCiAgICAgICAgIG1fY29kZUJsb2NrLT5hZGRJZGVu
dGlmaWVyKElkZW50aWZpZXIobV9nbG9iYWxEYXRhLCByZXApKTsKIAotICAgIHJldHVybiByZXN1
bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsK
IH0KIAogLy8gV2UgY2FuJ3QgaGFzaCBKU1ZhbHVlKCksIHNvIHdlIHVzZSBhIGRlZGljYXRlZCBk
YXRhIG1lbWJlciB0byBjYWNoZSBpdC4KQEAgLTExODEsNyArMTE4MSw3IEBAIFJlZ2lzdGVySUQq
IEJ5dGVjb2RlR2VuZXJhdG9yOjphZGRDb25zdGFudFZhbHVlKEpTVmFsdWUgdikKICAgICAgICAg
KyttX25leHRDb25zdGFudE9mZnNldDsKICAgICAgICAgbV9jb2RlQmxvY2stPmFkZENvbnN0YW50
KHYpOwogICAgIH0gZWxzZQotICAgICAgICBpbmRleCA9IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25k
OworICAgICAgICBpbmRleCA9IHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAgICAgcmV0dXJuICZt
X2NvbnN0YW50UG9vbFJlZ2lzdGVyc1tpbmRleF07CiB9CiAKQEAgLTEzMjcsNyArMTMyNyw3IEBA
IFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TG9hZChSZWdpc3RlcklEKiBkc3Qs
IGRvdWJsZSBudW1iZXIpCiAgICAgLy8gd29yayBjb3JyZWN0bHkgd2l0aCBOYU4gYXMgYSBrZXku
CiAgICAgaWYgKGlzbmFuKG51bWJlcikgfHwgbnVtYmVyID09IEhhc2hUcmFpdHM8ZG91YmxlPjo6
ZW1wdHlWYWx1ZSgpIHx8IEhhc2hUcmFpdHM8ZG91YmxlPjo6aXNEZWxldGVkVmFsdWUobnVtYmVy
KSkKICAgICAgICAgcmV0dXJuIGVtaXRMb2FkKGRzdCwganNOdW1iZXIobnVtYmVyKSk7Ci0gICAg
SlNWYWx1ZSYgdmFsdWVJbk1hcCA9IG1fbnVtYmVyTWFwLmFkZChudW1iZXIsIEpTVmFsdWUoKSku
aXRlcmF0b3ItPnNlY29uZDsKKyAgICBKU1ZhbHVlJiB2YWx1ZUluTWFwID0gbV9udW1iZXJNYXAu
YWRkKG51bWJlciwgSlNWYWx1ZSgpKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCF2YWx1ZUlu
TWFwKQogICAgICAgICB2YWx1ZUluTWFwID0ganNOdW1iZXIobnVtYmVyKTsKICAgICByZXR1cm4g
ZW1pdExvYWQoZHN0LCB2YWx1ZUluTWFwKTsKQEAgLTEzMzUsNyArMTMzNSw3IEBAIFJlZ2lzdGVy
SUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TG9hZChSZWdpc3RlcklEKiBkc3QsIGRvdWJsZSBu
dW1iZXIpCiAKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TG9hZChSZWdpc3Rl
cklEKiBkc3QsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIpCiB7Ci0gICAgSlNTdHJpbmcq
JiBzdHJpbmdJbk1hcCA9IG1fc3RyaW5nTWFwLmFkZChpZGVudGlmaWVyLmltcGwoKSwgMCkuaXRl
cmF0b3ItPnNlY29uZDsKKyAgICBKU1N0cmluZyomIHN0cmluZ0luTWFwID0gbV9zdHJpbmdNYXAu
YWRkKGlkZW50aWZpZXIuaW1wbCgpLCAwKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCFzdHJp
bmdJbk1hcCkKICAgICAgICAgc3RyaW5nSW5NYXAgPSBqc093bmVkU3RyaW5nKGdsb2JhbERhdGEo
KSwgaWRlbnRpZmllci5zdHJpbmcoKSk7CiAgICAgcmV0dXJuIGVtaXRMb2FkKGRzdCwgSlNWYWx1
ZShzdHJpbmdJbk1hcCkpOwpAQCAtMTkwNyw3ICsxOTA3LDcgQEAgdW5zaWduZWQgQnl0ZWNvZGVH
ZW5lcmF0b3I6OmFkZENvbnN0YW50QnVmZmVyKHVuc2lnbmVkIGxlbmd0aCkKIAogSlNTdHJpbmcq
IEJ5dGVjb2RlR2VuZXJhdG9yOjphZGRTdHJpbmdDb25zdGFudChjb25zdCBJZGVudGlmaWVyJiBp
ZGVudGlmaWVyKQogewotICAgIEpTU3RyaW5nKiYgc3RyaW5nSW5NYXAgPSBtX3N0cmluZ01hcC5h
ZGQoaWRlbnRpZmllci5pbXBsKCksIDApLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgSlNTdHJpbmcq
JiBzdHJpbmdJbk1hcCA9IG1fc3RyaW5nTWFwLmFkZChpZGVudGlmaWVyLmltcGwoKSwgMCkuaXRl
cmF0b3ItPnZhbHVlOwogICAgIGlmICghc3RyaW5nSW5NYXApIHsKICAgICAgICAgc3RyaW5nSW5N
YXAgPSBqc1N0cmluZyhnbG9iYWxEYXRhKCksIGlkZW50aWZpZXIuc3RyaW5nKCkpOwogICAgICAg
ICBhZGRDb25zdGFudFZhbHVlKHN0cmluZ0luTWFwKTsKQEAgLTE5NzksOCArMTk3OSw4IEBAIFJl
Z2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TGF6eU5ld0Z1bmN0aW9uKFJlZ2lzdGVy
SUQqIGRzdCwgRnVuY3Rpb25Cb2R5CiB7CiAgICAgRnVuY3Rpb25PZmZzZXRNYXA6OkFkZFJlc3Vs
dCBwdHIgPSBtX2Z1bmN0aW9uT2Zmc2V0cy5hZGQoZnVuY3Rpb24sIDApOwogICAgIGlmIChwdHIu
aXNOZXdFbnRyeSkKLSAgICAgICAgcHRyLml0ZXJhdG9yLT5zZWNvbmQgPSBtX2NvZGVCbG9jay0+
YWRkRnVuY3Rpb25EZWNsKEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRlKCptX2dsb2JhbERhdGEs
IGZ1bmN0aW9uKSk7Ci0gICAgcmV0dXJuIGVtaXROZXdGdW5jdGlvbkludGVybmFsKGRzdCwgcHRy
Lml0ZXJhdG9yLT5zZWNvbmQsIHRydWUpOworICAgICAgICBwdHIuaXRlcmF0b3ItPnZhbHVlID0g
bV9jb2RlQmxvY2stPmFkZEZ1bmN0aW9uRGVjbChGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZSgq
bV9nbG9iYWxEYXRhLCBmdW5jdGlvbikpOworICAgIHJldHVybiBlbWl0TmV3RnVuY3Rpb25JbnRl
cm5hbChkc3QsIHB0ci5pdGVyYXRvci0+dmFsdWUsIHRydWUpOwogfQogCiBSZWdpc3RlcklEKiBC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5ld0Z1bmN0aW9uSW50ZXJuYWwoUmVnaXN0ZXJJRCogZHN0
LCB1bnNpZ25lZCBpbmRleCwgYm9vbCBkb051bGxDaGVjaykKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAppbmRleCA4MjNkYWRmMTQ2
Yzk5ZGZlZTk1Y2RjOGZkYjNkMTJmOWJkZDJlODcyLi4wYWM0MTQ5YjY0MTJiOGI5MTNiYzk1MDRl
YmQ2M2Q4OTFlZDJhYzE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCkBAIC0yNjAsNyArMjYwLDcgQEAgUmVnaXN0ZXJJRCog
UHJvcGVydHlMaXN0Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0
b3IsIFJlZ2lzdGUKICAgICAgICAgICAgIEdldHRlclNldHRlclBhaXIgcGFpcihub2RlLCBzdGF0
aWNfY2FzdDxQcm9wZXJ0eU5vZGUqPigwKSk7CiAgICAgICAgICAgICBHZXR0ZXJTZXR0ZXJNYXA6
OkFkZFJlc3VsdCByZXN1bHQgPSBtYXAuYWRkKG5vZGUtPm5hbWUoKS5pbXBsKCksIHBhaXIpOwog
ICAgICAgICAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgICAgICByZXN1
bHQuaXRlcmF0b3ItPnNlY29uZC5zZWNvbmQgPSBub2RlOworICAgICAgICAgICAgICAgIHJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUuc2Vjb25kID0gbm9kZTsKICAgICAgICAgfQogCiAgICAgICAgIC8v
IEl0ZXJhdGUgb3ZlciB0aGUgcmVtYWluaW5nIHByb3BlcnRpZXMgaW4gdGhlIGxpc3QuCkBAIC0y
NzgsNyArMjc4LDcgQEAgUmVnaXN0ZXJJRCogUHJvcGVydHlMaXN0Tm9kZTo6ZW1pdEJ5dGVjb2Rl
KEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGUKICAgICAgICAgICAgIEFTU0VS
VChub2RlLT5tX3R5cGUgPT0gUHJvcGVydHlOb2RlOjpHZXR0ZXIgfHwgbm9kZS0+bV90eXBlID09
IFByb3BlcnR5Tm9kZTo6U2V0dGVyKTsKICAgICAgICAgICAgIEdldHRlclNldHRlck1hcDo6aXRl
cmF0b3IgaXQgPSBtYXAuZmluZChub2RlLT5uYW1lKCkuaW1wbCgpKTsKICAgICAgICAgICAgIEFT
U0VSVChpdCAhPSBtYXAuZW5kKCkpOwotICAgICAgICAgICAgR2V0dGVyU2V0dGVyUGFpciYgcGFp
ciA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICBHZXR0ZXJTZXR0ZXJQYWlyJiBwYWlyID0gaXQt
PnZhbHVlOwogCiAgICAgICAgICAgICAvLyBXYXMgdGhpcyBhbHJlYWR5IGdlbmVyYXRlZCBhcyBh
IHBhcnQgb2YgaXRzIHBhcnRuZXI/CiAgICAgICAgICAgICBpZiAocGFpci5zZWNvbmQgPT0gbm9k
ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3BwCmluZGV4IDhk
MzYwZWZjMjY1ODcwOWUwYTYwM2U1YTA5ZjI3MzVlNDY5MWY2ZjIuLjM3MzFiMDQ3MzAyZGEzOTEy
ZTU3ODhhNjBhZGQxMmNiNjRjOGI0ZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVn
Z2VyL0RlYnVnZ2VyLmNwcApAQCAtNTksNyArNTksNyBAQCBpbmxpbmUgUmVjb21waWxlcjo6flJl
Y29tcGlsZXIoKQogICAgIC8vIEphdmFTY3JpcHQgaW4gdGhlIGluc3BlY3Rvci4KICAgICBTb3Vy
Y2VQcm92aWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9zb3VyY2VQcm92aWRlcnMuZW5k
KCk7CiAgICAgZm9yIChTb3VyY2VQcm92aWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1f
c291cmNlUHJvdmlkZXJzLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCi0gICAgICAgIG1f
ZGVidWdnZXItPnNvdXJjZVBhcnNlZChpdGVyLT5zZWNvbmQsIGl0ZXItPmZpcnN0LCAtMSwgU3Ry
aW5nKCkpOworICAgICAgICBtX2RlYnVnZ2VyLT5zb3VyY2VQYXJzZWQoaXRlci0+dmFsdWUsIGl0
ZXItPmtleSwgLTEsIFN0cmluZygpKTsKIH0KIAogaW5saW5lIHZvaWQgUmVjb21waWxlcjo6b3Bl
cmF0b3IoKShKU0NlbGwqIGNlbGwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAppbmRleCA1MTMz
NTc0MjQxODNkMzM2ZWMwNDZmNjA4NTRhODBmYzMwNDY2NTFkLi5iYjYxYTU5ZTZhODAwYWUxMDVk
NmZjMTdiNjk0NmQ5ZWMzOGEzNjU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKQEAgLTIx
MCw3ICsyMTAsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNYWtlIHN1
cmUgdGhhdCBpZiBpdCdzIGEgdmFyaWFibGUgdGhhdCB3ZSB0aGluayBpcyBhbGlhc2VkIHRvCiAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgYXJndW1lbnRzLCB0aGF0IHdlIGtub3cgdGhh
dCBpdCBtaWdodCBhY3R1YWxseSBub3QgYmUuCiAgICAgICAgICAgICAgICAgICAgICAgICBBcmd1
bWVudHNBbGlhc2luZ0RhdGEmIGRhdGEgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
YXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT5zZWNvbmQ7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9hcmd1bWVudHNBbGlhc2luZy5maW5kKHZhcmlhYmxl
QWNjZXNzRGF0YSktPnZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXJnZU5v
bkFyZ3VtZW50c0Fzc2lnbm1lbnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEubWVy
Z2VDYWxsQ29udGV4dChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjI4LDcgKzIyOCw3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgIEFyZ3VtZW50c0FsaWFzaW5nRGF0YSYgZGF0YSA9Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+
c2Vjb25kOworICAgICAgICAgICAgICAgICAgICAgICAgbV9hcmd1bWVudHNBbGlhc2luZy5maW5k
KHZhcmlhYmxlQWNjZXNzRGF0YSktPnZhbHVlOwogICAgICAgICAgICAgICAgICAgICBkYXRhLm1l
cmdlQXJndW1lbnRzQXNzaWdubWVudCgpOwogICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGVu
c3VyZXMgdGhhdCB0aGUgdmFyaWFibGUncyB1c2VzIGFyZSBpbiB0aGUgc2FtZSBjb250ZXh0IGFz
CiAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBhcmd1bWVudHMgaXQgaXMgYWxpYXNpbmcuCkBA
IC0yNDMsNyArMjQzLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFi
bGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICAgICAgQXJndW1lbnRzQWxpYXNpbmdEYXRhJiBkYXRhID0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIG1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFj
Y2Vzc0RhdGEpLT5zZWNvbmQ7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2FyZ3VtZW50c0Fs
aWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+dmFsdWU7CiAgICAgICAgICAgICAgICAg
ICAgIGRhdGEubWVyZ2VDYWxsQ29udGV4dChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1l
KTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQpAQCAtMjUz
LDcgKzI1Myw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlQWNj
ZXNzRGF0YS0+aXNDYXB0dXJlZCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgICAgIEFyZ3VtZW50c0FsaWFzaW5nRGF0YSYgZGF0YSA9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NE
YXRhKS0+c2Vjb25kOworICAgICAgICAgICAgICAgICAgICAgICAgbV9hcmd1bWVudHNBbGlhc2lu
Zy5maW5kKHZhcmlhYmxlQWNjZXNzRGF0YSktPnZhbHVlOwogICAgICAgICAgICAgICAgICAgICBk
YXRhLm1lcmdlQ2FsbENvbnRleHQobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CiAg
ICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAvLyBJZiBhIHZhcmlhYmxl
IGlzIHVzZWQgaW4gYSBmbHVzaCB0aGVuIGJ5IGRlZmluaXRpb24gaXQgZXNjYXBlcy4KQEAgLTI2
Niw3ICsyNjYsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZUFj
Y2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgICAgICBBcmd1bWVudHNBbGlhc2luZ0RhdGEmIGRhdGEgPQotICAgICAg
ICAgICAgICAgICAgICAgICAgbV9hcmd1bWVudHNBbGlhc2luZy5maW5kKHZhcmlhYmxlQWNjZXNz
RGF0YSktPnNlY29uZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fYXJndW1lbnRzQWxpYXNp
bmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT52YWx1ZTsKICAgICAgICAgICAgICAgICAgICAg
ZGF0YS5tZXJnZU5vbkFyZ3VtZW50c0Fzc2lnbm1lbnQoKTsKICAgICAgICAgICAgICAgICAgICAg
ZGF0YS5tZXJnZUNhbGxDb250ZXh0KG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTM1MCw3ICszNTAsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIEFyZ3Vt
ZW50c0FsaWFzaW5nRGF0YSYgZGF0YSA9Ci0gICAgICAgICAgICAgICAgICAgIG1fYXJndW1lbnRz
QWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT5zZWNvbmQ7CisgICAgICAgICAgICAg
ICAgICAgIG1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT52YWx1
ZTsKICAgICAgICAgICAgICAgICBpZiAoZGF0YS5pc1ZhbGlkKCkpCiAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIApAQCAtMzY5LDcgKzM2OSw3IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICBkYXRhTG9nKCJDYXB0dXJlZCIpOwogICAgICAgICAgICAgZWxz
ZSB7CiAgICAgICAgICAgICAgICAgQXJndW1lbnRzQWxpYXNpbmdEYXRhJiBkYXRhID0KLSAgICAg
ICAgICAgICAgICAgICAgbV9hcmd1bWVudHNBbGlhc2luZy5maW5kKHZhcmlhYmxlQWNjZXNzRGF0
YSktPnNlY29uZDsKKyAgICAgICAgICAgICAgICAgICAgbV9hcmd1bWVudHNBbGlhc2luZy5maW5k
KHZhcmlhYmxlQWNjZXNzRGF0YSktPnZhbHVlOwogICAgICAgICAgICAgICAgIGJvb2wgZmlyc3Qg
PSB0cnVlOwogICAgICAgICAgICAgICAgIGlmIChkYXRhLmNhbGxDb250ZXh0SXNWYWxpZCgpKSB7
CiAgICAgICAgICAgICAgICAgICAgIGlmICghZmlyc3QpCkBAIC00NDEsNyArNDQxLDcgQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgICAgICAvLyB0aGluZ3MuIE5vdGUgYWxzbyB0aGF0IHRoZSBT
ZXRMb2NhbCBzaG91bGQgYmVjb21lIGRlYWQgYXMgc29vbiBhcwogICAgICAgICAgICAgICAgICAg
ICAvLyB3ZSByZXBsYWNlIGFsbCB1c2VzIG9mIHRoaXMgdmFyaWFibGUgd2l0aCBHZXRNeUFyZ3Vt
ZW50c0xlbmd0aCBhbmQKICAgICAgICAgICAgICAgICAgICAgLy8gR2V0TXlBcmd1bWVudEJ5VmFs
LgotICAgICAgICAgICAgICAgICAgICBBU1NFUlQobV9hcmd1bWVudHNBbGlhc2luZy5maW5kKHZh
cmlhYmxlQWNjZXNzRGF0YSktPnNlY29uZC5pc1ZhbGlkKCkpOworICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQobV9hcmd1bWVudHNBbGlhc2luZy5maW5kKHZhcmlhYmxlQWNjZXNzRGF0YSktPnZh
bHVlLmlzVmFsaWQoKSk7CiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gdmFyaWFibGVB
Y2Nlc3NEYXRhLT5tZXJnZUlzQXJndW1lbnRzQWxpYXModHJ1ZSk7CiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KQEAgLTY4NSw3ICs2ODUsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgpKQogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBBcmd1bWVudHNB
bGlhc2luZ0RhdGEmIGRhdGEgPSBtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nl
c3NEYXRhKS0+c2Vjb25kOworICAgICAgICAgICAgQXJndW1lbnRzQWxpYXNpbmdEYXRhJiBkYXRh
ID0gbV9hcmd1bWVudHNBbGlhc2luZy5maW5kKHZhcmlhYmxlQWNjZXNzRGF0YSktPnZhbHVlOwog
ICAgICAgICAgICAgZGF0YS5lc2NhcGVzID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CkBAIC03MzQsNyArNzM0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKHZhcmlhYmxl
QWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAK
LSAgICAgICAgQXJndW1lbnRzQWxpYXNpbmdEYXRhJiBkYXRhID0gbV9hcmd1bWVudHNBbGlhc2lu
Zy5maW5kKHZhcmlhYmxlQWNjZXNzRGF0YSktPnNlY29uZDsKKyAgICAgICAgQXJndW1lbnRzQWxp
YXNpbmdEYXRhJiBkYXRhID0gbV9hcmd1bWVudHNBbGlhc2luZy5maW5kKHZhcmlhYmxlQWNjZXNz
RGF0YSktPnZhbHVlOwogICAgICAgICBkYXRhLm1lcmdlQ2FsbENvbnRleHQobm9kZS5jb2RlT3Jp
Z2luLmlubGluZUNhbGxGcmFtZSk7CiAgICAgfQogICAgIApAQCAtNzU2LDcgKzc1Niw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkp
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBBcmd1bWVudHNBbGlhc2luZ0Rh
dGEmIGRhdGEgPQotICAgICAgICAgICAgICAgIG1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJp
YWJsZUFjY2Vzc0RhdGEpLT5zZWNvbmQ7CisgICAgICAgICAgICAgICAgbV9hcmd1bWVudHNBbGlh
c2luZy5maW5kKHZhcmlhYmxlQWNjZXNzRGF0YSktPnZhbHVlOwogICAgICAgICAgICAgaWYgKCFk
YXRhLmlzVmFsaWQoKSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAKQEAgLTc5Miw3ICs3OTIsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
ICYmICFtX2NyZWF0ZXNBcmd1bWVudHMuY29udGFpbnMoY2hpbGQuY29kZU9yaWdpbi5pbmxpbmVD
YWxsRnJhbWUpOwogICAgICAgICAgICAgYm9vbCBpc0FsaWFzZWRBcmd1bWVudHNSZWdpc3RlciA9
CiAgICAgICAgICAgICAgICAgIXZhcmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgpCi0gICAg
ICAgICAgICAgICAgJiYgbV9hcmd1bWVudHNBbGlhc2luZy5maW5kKHZhcmlhYmxlQWNjZXNzRGF0
YSktPnNlY29uZC5pc1ZhbGlkKCkKKyAgICAgICAgICAgICAgICAmJiBtX2FyZ3VtZW50c0FsaWFz
aW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+dmFsdWUuaXNWYWxpZCgpCiAgICAgICAgICAg
ICAgICAgJiYgIW1fY3JlYXRlc0FyZ3VtZW50cy5jb250YWlucyhjaGlsZC5jb2RlT3JpZ2luLmlu
bGluZUNhbGxGcmFtZSk7CiAgICAgICAgICAgICBpZiAoIWlzRGVhZEFyZ3VtZW50c1JlZ2lzdGVy
ICYmICFpc0FsaWFzZWRBcmd1bWVudHNSZWdpc3RlcikKICAgICAgICAgICAgICAgICBicmVhazsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXNzZW1ibHlIZWxwZXJz
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXNzZW1ibHlIZWxwZXJzLmNwcApp
bmRleCA3Nzk5ZWU1MDU5MzVhZDRlMTNiYzNjZTE4ZDBiNzMyYTNhYTQyOTZlLi5iNWI2Njg0MThh
NjNhN2M5NDRkZjVkYzQ3YTYwNGIxZTUzNTc0MWQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBc3NlbWJseUhlbHBlcnMuY3BwCkBAIC00OSw5ICs0OSw5IEBAIFZlY3Rv
cjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+JiBBc3NlbWJseUhlbHBlcnM6OmRlY29kZWRDb2Rl
TWFwRm9yKENvZGVCbG9jayoKICAgICBIYXNoTWFwPENvZGVCbG9jayosIFZlY3RvcjxCeXRlY29k
ZUFuZE1hY2hpbmVPZmZzZXQ+ID46OkFkZFJlc3VsdCByZXN1bHQgPSBtX2RlY29kZWRDb2RlTWFw
cy5hZGQoY29kZUJsb2NrLCBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PigpKTsKICAg
ICAKICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIGNvZGVCbG9jay0+aml0Q29k
ZU1hcCgpLT5kZWNvZGUocmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOworICAgICAgICBjb2RlQmxv
Y2stPmppdENvZGVNYXAoKS0+ZGVjb2RlKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwogICAgIAot
ICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICByZXR1cm4gcmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZTsKIH0KIAogI2lmIEVOQUJMRShTQU1QTElOR19GTEFHUykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVDYWNoZS5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZUNhY2hlLmgKaW5kZXggYWI4OGU5OWU1Yjdh
MGExYWM1NDUyYzVjOTYzNWZlZWYwMjFlZDAwZi4uNmI5MDU2ZTU0YTE4YzZiZmQwMDEzMDNiOGY0
ZTRlZTY1YWQwNjRjNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
eXRlQ29kZUNhY2hlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29k
ZUNhY2hlLmgKQEAgLTEzMiwxMCArMTMyLDEwIEBAIHB1YmxpYzoKICAgICAgICAgTWFwOjppdGVy
YXRvciBiZWdpbiA9IG1fbWFwLmJlZ2luKCk7CiAgICAgICAgIE1hcDo6aXRlcmF0b3IgZW5kID0g
bV9tYXAuZW5kKCk7CiAgICAgICAgIGZvciAoTWFwOjppdGVyYXRvciBpdGVyID0gYmVnaW47IGl0
ZXIgIT0gZW5kOyArK2l0ZXIpIHsKLSAgICAgICAgICAgIGlmICghaXRlci0+c2Vjb25kLmNvZGVC
bG9jaykKKyAgICAgICAgICAgIGlmICghaXRlci0+dmFsdWUuY29kZUJsb2NrKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKGl0ZXItPnNlY29uZC5vd25lZCkgewot
ICAgICAgICAgICAgICAgIGRlbGV0ZSBpdGVyLT5zZWNvbmQuY29kZUJsb2NrOworICAgICAgICAg
ICAgaWYgKGl0ZXItPnZhbHVlLm93bmVkKSB7CisgICAgICAgICAgICAgICAgZGVsZXRlIGl0ZXIt
PnZhbHVlLmNvZGVCbG9jazsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQpAQCAtMTQ1LDcgKzE0NSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAg
IE1hcDo6aXRlcmF0b3IgaXRlciA9IG1fbWFwLmZpbmQoa2V5KTsKICAgICAgICAgaWYgKGl0ZXIg
IT0gbV9tYXAuZW5kKCkpCi0gICAgICAgICAgICByZXR1cm4gaXRlci0+c2Vjb25kLmNvZGVCbG9j
azsKKyAgICAgICAgICAgIHJldHVybiBpdGVyLT52YWx1ZS5jb2RlQmxvY2s7CiAgICAgICAgIAog
ICAgICAgICBCeXRlQ29kZUNhY2hlVmFsdWUgdmFsdWU7CiAgICAgICAgIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAppbmRleCBjZDI4Mzk4N2Mx
YTJiZDFjZGViOGU2ZDA0YWMyYzA0MTk1NjJmNjE0Li4yN2U2ODQyOGI2N2MxNjY2NTkxMjJjNmIz
ZmMyZTJiZWUwMTY5NjhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5
dGVDb2RlUGFyc2VyLmNwcApAQCAtNjcyLDkgKzY3Miw5IEBAIHByaXZhdGU6CiAgICAgewogICAg
ICAgICBIYXNoTWFwPEpTQ2VsbCosIE5vZGVJbmRleD46OkFkZFJlc3VsdCByZXN1bHQgPSBtX2Nl
bGxDb25zdGFudE5vZGVzLmFkZChjZWxsLCBOb05vZGUpOwogICAgICAgICBpZiAocmVzdWx0Lmlz
TmV3RW50cnkpCi0gICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IGFkZFRvR3Jh
cGgoV2Vha0pTQ29uc3RhbnQsIE9wSW5mbyhjZWxsKSk7CisgICAgICAgICAgICByZXN1bHQuaXRl
cmF0b3ItPnZhbHVlID0gYWRkVG9HcmFwaChXZWFrSlNDb25zdGFudCwgT3BJbmZvKGNlbGwpKTsK
ICAgICAgICAgCi0gICAgICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAgICAgfQogICAgIAogICAgIENvZGVP
cmlnaW4gY3VycmVudENvZGVPcmlnaW4oKQpAQCAtMzI1Myw3ICszMjUzLDcgQEAgQnl0ZUNvZGVQ
YXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZVN0YWNrRW50cnkoCiAgICAgICAgICAgICBJ
ZGVudGlmaWVyTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gYnl0ZUNvZGVQYXJzZXItPm1faWRlbnRp
Zmllck1hcC5hZGQocmVwLCBieXRlQ29kZVBhcnNlci0+bV9jb2RlQmxvY2stPm51bWJlck9mSWRl
bnRpZmllcnMoKSk7CiAgICAgICAgICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpCiAgICAgICAg
ICAgICAgICAgYnl0ZUNvZGVQYXJzZXItPm1fY29kZUJsb2NrLT5hZGRJZGVudGlmaWVyKElkZW50
aWZpZXIoYnl0ZUNvZGVQYXJzZXItPm1fZ2xvYmFsRGF0YSwgcmVwKSk7Ci0gICAgICAgICAgICBt
X2lkZW50aWZpZXJSZW1hcFtpXSA9IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICAg
ICAgbV9pZGVudGlmaWVyUmVtYXBbaV0gPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogICAgICAg
ICB9CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29kZUJsb2NrLT5udW1iZXJPZkNv
bnN0YW50UmVnaXN0ZXJzKCk7ICsraSkgewogICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGNv
ZGVCbG9jay0+Z2V0Q29uc3RhbnQoaSArIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKQEAg
LTMyNzEsNyArMzI3MSw3IEBAIEJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxp
bmVTdGFja0VudHJ5KAogICAgICAgICAgICAgICAgIGJ5dGVDb2RlUGFyc2VyLT5tX2NvZGVCbG9j
ay0+YWRkQ29uc3RhbnQodmFsdWUpOwogICAgICAgICAgICAgICAgIGJ5dGVDb2RlUGFyc2VyLT5t
X2NvbnN0YW50cy5hcHBlbmQoQ29uc3RhbnRSZWNvcmQoKSk7CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBtX2NvbnN0YW50UmVtYXBbaV0gPSByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAg
ICAgICAgICAgIG1fY29uc3RhbnRSZW1hcFtpXSA9IHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAg
ICAgICAgIH0KICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvZGVCbG9jay0+bnVt
YmVyT2ZHbG9iYWxSZXNvbHZlSW5mb3MoKTsgKytpKQogICAgICAgICAgICAgYnl0ZUNvZGVQYXJz
ZXItPm1fY29kZUJsb2NrLT5hZGRHbG9iYWxSZXNvbHZlSW5mbyhzdGQ6Om51bWVyaWNfbGltaXRz
PHVuc2lnbmVkPjo6bWF4KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCmluZGV4IGMyOWQ3ZDIy
ZmMwZmRhMDMwYjhmYmE4ZGU4NDBiMzI4MzA0NzlmMTQuLjE0NTBmMGUwZDgyNjdiYTMyMDYwZDFk
MjI1MWI4YjUzNWQxMTUxNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAKQEAgLTE2OCw3ICsx
NjgsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBkYXRhTG9nKCJaZXJvaW5nIHRoZSBzdHJ1Y3R1
cmUgdG8gaG9pc3QgZm9yICVzIGJlY2F1c2UgdGhlIHJhdGlvIGlzICVsZi5cbiIsCiAgICAgICAg
ICAgICAgICAgICAgIG1fZ3JhcGgubmFtZU9mVmFyaWFibGVBY2Nlc3NEYXRhKHZhcmlhYmxlKSwg
dmFyaWFibGUtPnZvdGVSYXRpbygpKTsKICNlbmRpZgotICAgICAgICAgICAgaXRlci0+c2Vjb25k
Lm1fc3RydWN0dXJlID0gMDsKKyAgICAgICAgICAgIGl0ZXItPnZhbHVlLm1fc3RydWN0dXJlID0g
MDsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gRGlzYWJsZSBzdHJ1Y3R1cmUgY2hl
Y2sgaG9pc3RpbmcgZm9yIHZhcmlhYmxlcyB0aGF0IGNyb3NzIHRoZSBPU1IgZW50cnkgdGhhdApA
QCAtMTkzLDcgKzE5Myw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBIYXNoTWFwPFZhcmlh
YmxlQWNjZXNzRGF0YSosIENoZWNrRGF0YT46Oml0ZXJhdG9yIGl0ZXIgPSBtX21hcC5maW5kKHZh
cmlhYmxlKTsKICAgICAgICAgICAgICAgICBpZiAoaXRlciA9PSBtX21hcC5lbmQoKSkKICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgaWYgKCFpdGVyLT5zZWNv
bmQubV9zdHJ1Y3R1cmUpCisgICAgICAgICAgICAgICAgaWYgKCFpdGVyLT52YWx1ZS5tX3N0cnVj
dHVyZSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgSlNW
YWx1ZSB2YWx1ZSA9IG1fZ3JhcGgubV9tdXN0SGFuZGxlVmFsdWVzW2ldOwogICAgICAgICAgICAg
ICAgIGlmICghdmFsdWUgfHwgIXZhbHVlLmlzQ2VsbCgpKSB7CkBAIC0yMDEsMTUgKzIwMSwxNSBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIlplcm9pbmcgdGhlIHN0cnVj
dHVyZSB0byBob2lzdCBmb3IgJXMgYmVjYXVzZSB0aGUgT1NSIGVudHJ5IHZhbHVlIGlzIG5vdCBh
IGNlbGw6ICVzLlxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm5hbWVP
ZlZhcmlhYmxlQWNjZXNzRGF0YSh2YXJpYWJsZSksIHZhbHVlLmRlc2NyaXB0aW9uKCkpOwogI2Vu
ZGlmCi0gICAgICAgICAgICAgICAgICAgIGl0ZXItPnNlY29uZC5tX3N0cnVjdHVyZSA9IDA7Cisg
ICAgICAgICAgICAgICAgICAgIGl0ZXItPnZhbHVlLm1fc3RydWN0dXJlID0gMDsKICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGlmICh2YWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCkgIT0gaXRlci0+c2Vjb25kLm1fc3RydWN0
dXJlKSB7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKSAh
PSBpdGVyLT52YWx1ZS5tX3N0cnVjdHVyZSkgewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFH
QVRJT05fVkVSQk9TRSkKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiWmVyb2luZyB0aGUg
c3RydWN0dXJlIHRvIGhvaXN0IGZvciAlcyBiZWNhdXNlIHRoZSBPU1IgZW50cnkgdmFsdWUgaGFz
IHN0cnVjdHVyZSAlcCBhbmQgd2Ugd2FudGVkICVwLlxuIiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX2dyYXBoLm5hbWVPZlZhcmlhYmxlQWNjZXNzRGF0YSh2YXJpYWJsZSksIHZhbHVl
LmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKSwgaXRlci0+c2Vjb25kLm1fc3RydWN0dXJlKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm5hbWVPZlZhcmlhYmxlQWNjZXNzRGF0YSh2
YXJpYWJsZSksIHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKSwgaXRlci0+dmFsdWUubV9zdHJ1
Y3R1cmUpOwogI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgIGl0ZXItPnNlY29uZC5tX3N0cnVj
dHVyZSA9IDA7CisgICAgICAgICAgICAgICAgICAgIGl0ZXItPnZhbHVlLm1fc3RydWN0dXJlID0g
MDsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQpAQCAtMzM5LDE1ICszMzksMTUgQEAgcHVibGljOgogI2lmIERGR19FTkFCTEUo
REVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgZm9yIChIYXNoTWFwPFZhcmlhYmxl
QWNjZXNzRGF0YSosIENoZWNrRGF0YT46Oml0ZXJhdG9yIGl0ID0gbV9tYXAuYmVnaW4oKTsKICAg
ICAgICAgICAgICBpdCAhPSBtX21hcC5lbmQoKTsgKytpdCkgewotICAgICAgICAgICAgaWYgKCFp
dC0+c2Vjb25kLm1fc3RydWN0dXJlKSB7Ci0gICAgICAgICAgICAgICAgZGF0YUxvZygiTm90IGhv
aXN0aW5nIGNoZWNrcyBmb3IgJXMgYmVjYXVzZSBvZiBoZXVyaXN0aWNzLlxuIiwgbV9ncmFwaC5u
YW1lT2ZWYXJpYWJsZUFjY2Vzc0RhdGEoaXQtPmZpcnN0KSk7CisgICAgICAgICAgICBpZiAoIWl0
LT52YWx1ZS5tX3N0cnVjdHVyZSkgeworICAgICAgICAgICAgICAgIGRhdGFMb2coIk5vdCBob2lz
dGluZyBjaGVja3MgZm9yICVzIGJlY2F1c2Ugb2YgaGV1cmlzdGljcy5cbiIsIG1fZ3JhcGgubmFt
ZU9mVmFyaWFibGVBY2Nlc3NEYXRhKGl0LT5rZXkpKTsKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpdC0+c2Vjb25kLm1faXNDbG9iYmVy
ZWQgJiYgIWl0LT5zZWNvbmQubV9zdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SXNT
dGlsbFZhbGlkKCkpIHsKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCJOb3QgaG9pc3RpbmcgY2hl
Y2tzIGZvciAlcyBiZWNhdXNlIHRoZSBzdHJ1Y3R1cmUgaXMgY2xvYmJlcmVkIGFuZCBoYXMgYW4g
aW52YWxpZCB3YXRjaHBvaW50IHNldC5cbiIsIG1fZ3JhcGgubmFtZU9mVmFyaWFibGVBY2Nlc3NE
YXRhKGl0LT5maXJzdCkpOworICAgICAgICAgICAgaWYgKGl0LT52YWx1ZS5tX2lzQ2xvYmJlcmVk
ICYmICFpdC0+dmFsdWUubV9zdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SXNTdGls
bFZhbGlkKCkpIHsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJOb3QgaG9pc3RpbmcgY2hlY2tz
IGZvciAlcyBiZWNhdXNlIHRoZSBzdHJ1Y3R1cmUgaXMgY2xvYmJlcmVkIGFuZCBoYXMgYW4gaW52
YWxpZCB3YXRjaHBvaW50IHNldC5cbiIsIG1fZ3JhcGgubmFtZU9mVmFyaWFibGVBY2Nlc3NEYXRh
KGl0LT5rZXkpKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGRhdGFMb2coIkhvaXN0aW5nIGNoZWNrcyBmb3IgJXNcbiIsIG1fZ3JhcGgubmFt
ZU9mVmFyaWFibGVBY2Nlc3NEYXRhKGl0LT5maXJzdCkpOworICAgICAgICAgICAgZGF0YUxvZygi
SG9pc3RpbmcgY2hlY2tzIGZvciAlc1xuIiwgbV9ncmFwaC5uYW1lT2ZWYXJpYWJsZUFjY2Vzc0Rh
dGEoaXQtPmtleSkpOwogICAgICAgICB9CiAjZW5kaWYgLy8gREZHX0VOQUJMRShERUJVR19QUk9Q
QUdBVElPTl9WRVJCT1NFKQogICAgICAgICAKQEAgLTM4Miw5ICszODIsOSBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAgICAgICAgIEhhc2hNYXA8VmFyaWFibGVBY2Nlc3NEYXRhKiwgQ2hlY2tEYXRh
Pjo6aXRlcmF0b3IgaXRlciA9IG1fbWFwLmZpbmQodmFyaWFibGUpOwogICAgICAgICAgICAgICAg
ICAgICBpZiAoaXRlciA9PSBtX21hcC5lbmQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWl0ZXItPnNlY29uZC5tX3N0cnVjdHVyZSkK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCFpdGVyLT52YWx1ZS5tX3N0cnVjdHVyZSkKICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBpZiAoaXRlci0+
c2Vjb25kLm1faXNDbG9iYmVyZWQgJiYgIWl0ZXItPnNlY29uZC5tX3N0cnVjdHVyZS0+dHJhbnNp
dGlvbldhdGNocG9pbnRTZXRJc1N0aWxsVmFsaWQoKSkKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGl0ZXItPnZhbHVlLm1faXNDbG9iYmVyZWQgJiYgIWl0ZXItPnZhbHVlLm1fc3RydWN0dXJlLT50
cmFuc2l0aW9uV2F0Y2hwb2ludFNldElzU3RpbGxWYWxpZCgpKQogICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBu
b2RlLnJlZigpOwpAQCAtMzk4LDcgKzM5OCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAg
ICAgbV9ncmFwaC5hcHBlbmQoZ2V0TG9jYWwpOwogICAgICAgICAgICAgICAgICAgICBpbnNlcnRp
b25TZXQuYXBwZW5kKGluZGV4SW5CbG9jayArIDEsIGdldExvY2FsSW5kZXgpOwogICAgICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgTm9kZSBjaGVja1N0cnVjdHVyZShDaGVj
a1N0cnVjdHVyZSwgY29kZU9yaWdpbiwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KGl0
ZXItPnNlY29uZC5tX3N0cnVjdHVyZSkpLCBnZXRMb2NhbEluZGV4KTsKKyAgICAgICAgICAgICAg
ICAgICAgTm9kZSBjaGVja1N0cnVjdHVyZShDaGVja1N0cnVjdHVyZSwgY29kZU9yaWdpbiwgT3BJ
bmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KGl0ZXItPnZhbHVlLm1fc3RydWN0dXJlKSksIGdl
dExvY2FsSW5kZXgpOwogICAgICAgICAgICAgICAgICAgICBjaGVja1N0cnVjdHVyZS5yZWYoKTsK
ICAgICAgICAgICAgICAgICAgICAgTm9kZUluZGV4IGNoZWNrU3RydWN0dXJlSW5kZXggPSBtX2dy
YXBoLnNpemUoKTsKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5hcHBlbmQoY2hlY2tTdHJ1
Y3R1cmUpOwpAQCAtNDE4LDkgKzQxOCw5IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAg
SGFzaE1hcDxWYXJpYWJsZUFjY2Vzc0RhdGEqLCBDaGVja0RhdGE+OjppdGVyYXRvciBpdGVyID0g
bV9tYXAuZmluZCh2YXJpYWJsZSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVyID09IG1f
bWFwLmVuZCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmICghaXRlci0+c2Vjb25kLm1fc3RydWN0dXJlKQorICAgICAgICAgICAgICAgICAg
ICBpZiAoIWl0ZXItPnZhbHVlLm1fc3RydWN0dXJlKQogICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpdGVyLT5zZWNvbmQubV9pc0Nsb2JiZXJl
ZCAmJiAhaXRlci0+c2Vjb25kLm1fc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldElz
U3RpbGxWYWxpZCgpKQorICAgICAgICAgICAgICAgICAgICBpZiAoaXRlci0+dmFsdWUubV9pc0Ns
b2JiZXJlZCAmJiAhaXRlci0+dmFsdWUubV9zdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50
U2V0SXNTdGlsbFZhbGlkKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAogICAg
ICAgICAgICAgICAgICAgICAvLyBGaXJzdCBpbnNlcnQgYSBkZWFkIFNldExvY2FsIHRvIHRlbGwg
T1NSIHRoYXQgdGhlIGNoaWxkJ3MgdmFsdWUgc2hvdWxkCkBAIC00MzcsNyArNDM3LDcgQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoW2NoaWxkMV0ucmVmKCk7CiAgICAgICAg
ICAgICAgICAgICAgIC8vIFVzZSBhIEZvcndhcmRDaGVja1N0cnVjdHVyZSB0byBpbmRpY2F0ZSB0
aGF0IHdlIHNob3VsZCBleGl0IHRvIHRoZQogICAgICAgICAgICAgICAgICAgICAvLyBuZXh0IGJ5
dGVjb2RlIGluc3RydWN0aW9uIHJhdGhlciB0aGFuIHJlZXhlY3V0aW5nIHRoZSBjdXJyZW50IG9u
ZS4KLSAgICAgICAgICAgICAgICAgICAgTm9kZSBjaGVja1N0cnVjdHVyZShGb3J3YXJkQ2hlY2tT
dHJ1Y3R1cmUsIGNvZGVPcmlnaW4sIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChpdGVy
LT5zZWNvbmQubV9zdHJ1Y3R1cmUpKSwgY2hpbGQxKTsKKyAgICAgICAgICAgICAgICAgICAgTm9k
ZSBjaGVja1N0cnVjdHVyZShGb3J3YXJkQ2hlY2tTdHJ1Y3R1cmUsIGNvZGVPcmlnaW4sIE9wSW5m
byhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChpdGVyLT52YWx1ZS5tX3N0cnVjdHVyZSkpLCBjaGls
ZDEpOwogICAgICAgICAgICAgICAgICAgICBjaGVja1N0cnVjdHVyZS5yZWYoKTsKICAgICAgICAg
ICAgICAgICAgICAgTm9kZUluZGV4IGNoZWNrU3RydWN0dXJlSW5kZXggPSBtX2dyYXBoLnNpemUo
KTsKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5hcHBlbmQoY2hlY2tTdHJ1Y3R1cmUpOwpA
QCAtNDUzLDE2ICs0NTMsMTYgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBIYXNoTWFw
PFZhcmlhYmxlQWNjZXNzRGF0YSosIENoZWNrRGF0YT46Oml0ZXJhdG9yIGl0ZXIgPSBtX21hcC5m
aW5kKGNoaWxkLnZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKICAgICAgICAgICAgICAgICAgICAgaWYg
KGl0ZXIgPT0gbV9tYXAuZW5kKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKCFpdGVyLT5zZWNvbmQubV9zdHJ1Y3R1cmUpCisgICAgICAg
ICAgICAgICAgICAgIGlmICghaXRlci0+dmFsdWUubV9zdHJ1Y3R1cmUpCiAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpdGVyLT5zZWNvbmQu
bV9pc0Nsb2JiZXJlZCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIWl0ZXItPnZhbHVlLm1f
aXNDbG9iYmVyZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0T3BBbmREZWZh
dWx0RmxhZ3MoUGhhbnRvbSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS5y
ZWZDb3VudCgpID09IDEpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpdGVyLT5zZWNvbmQubV9z
dHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SXNTdGlsbFZhbGlkKCkpCisgICAgICAg
ICAgICAgICAgICAgIGlmICghaXRlci0+dmFsdWUubV9zdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRj
aHBvaW50U2V0SXNTdGlsbFZhbGlkKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGl0ZXItPnNlY29uZC5tX3N0cnVjdHVyZSA9PSBu
b2RlLnN0cnVjdHVyZVNldCgpLnNpbmdsZXRvblN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKGl0ZXItPnZhbHVlLm1fc3RydWN0dXJlID09IG5vZGUuc3RydWN0dXJlU2V0
KCkuc2luZ2xldG9uU3RydWN0dXJlKCkpOwogICAgICAgICAgICAgICAgICAgICBub2RlLmNvbnZl
cnRUb1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KCk7CiAgICAgICAgICAgICAgICAgICAg
IGNoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTQ4NSw5ICs0
ODUsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9tYXAuYWRkKHZhcmlhYmxlLCBDaGVja0Rh
dGEoc3RydWN0dXJlLCBmYWxzZSkpOwogICAgICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpCiAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChyZXN1bHQuaXRlcmF0b3ItPnNlY29uZC5t
X3N0cnVjdHVyZSA9PSBzdHJ1Y3R1cmUpCisgICAgICAgIGlmIChyZXN1bHQuaXRlcmF0b3ItPnZh
bHVlLm1fc3RydWN0dXJlID09IHN0cnVjdHVyZSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQubV9zdHJ1Y3R1cmUgPSAwOworICAgICAgICByZXN1
bHQuaXRlcmF0b3ItPnZhbHVlLm1fc3RydWN0dXJlID0gMDsKICAgICB9CiAgICAgCiAgICAgdm9p
ZCBub3RpY2VTdHJ1Y3R1cmVDaGVjayhWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlLCBjb25z
dCBTdHJ1Y3R1cmVTZXQmIHNldCkKQEAgLTUwNSw3ICs1MDUsNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgbV9tYXAuZmluZCh2YXJpYWJsZSk7CiAgICAgICAgIGlmIChpdGVyID09IG1fbWFwLmVu
ZCgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpdGVyLT5zZWNvbmQubV9pc0Nsb2Ji
ZXJlZCA9IHRydWU7CisgICAgICAgIGl0ZXItPnZhbHVlLm1faXNDbG9iYmVyZWQgPSB0cnVlOwog
ICAgIH0KICAgICAKICAgICB2b2lkIGNsb2JiZXIoY29uc3QgT3BlcmFuZHM8VmFyaWFibGVBY2Nl
c3NEYXRhKj4mIGxpdmUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCmluZGV4IGIyZGRj
NmU1MzkzOGYyZWFlMWFhZTA1NTJhMjE2ZTY2MTg1NmRmOGQuLjI2ZTEyMzRlMzEyNzE3ZWMyN2Zj
ZTRlNmQ1OWQ0OWU0YjBlYThmNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCkBA
IC0zNTUsNyArMzU1LDcgQEAgdm9pZCBIZWFwOjptYXJrUHJvdGVjdGVkT2JqZWN0cyhIZWFwUm9v
dFZpc2l0b3ImIGhlYXBSb290VmlzaXRvcikKIHsKICAgICBQcm90ZWN0Q291bnRTZXQ6Oml0ZXJh
dG9yIGVuZCA9IG1fcHJvdGVjdGVkVmFsdWVzLmVuZCgpOwogICAgIGZvciAoUHJvdGVjdENvdW50
U2V0OjppdGVyYXRvciBpdCA9IG1fcHJvdGVjdGVkVmFsdWVzLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkKLSAgICAgICAgaGVhcFJvb3RWaXNpdG9yLnZpc2l0KCZpdC0+Zmlyc3QpOworICAgICAg
ICBoZWFwUm9vdFZpc2l0b3IudmlzaXQoJml0LT5rZXkpOwogfQogCiB2b2lkIEhlYXA6OnB1c2hU
ZW1wU29ydFZlY3RvcihWZWN0b3I8VmFsdWVTdHJpbmdQYWlyPiogdGVtcFZlY3RvcikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuaAppbmRleCBlYjEzYTIxZDJlNjNhZThjMzViZWI3NDM3N2M3MDQz
MDcyN2Y1YmQ0Li5hOTgzMzgzN2Q0NDQxN2FhNzdjZDAyNThlZjlkZWM0MDExYTA5NmZjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCkBAIC0zNTUsNyArMzU1LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgewogICAgICAgICBQcm90ZWN0Q291bnRTZXQ6Oml0ZXJhdG9yIGVuZCA9IG1fcHJv
dGVjdGVkVmFsdWVzLmVuZCgpOwogICAgICAgICBmb3IgKFByb3RlY3RDb3VudFNldDo6aXRlcmF0
b3IgaXQgPSBtX3Byb3RlY3RlZFZhbHVlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAg
ICAgICAgICBmdW5jdG9yKGl0LT5maXJzdCk7CisgICAgICAgICAgICBmdW5jdG9yKGl0LT5rZXkp
OwogICAgICAgICBtX2hhbmRsZVNldC5mb3JFYWNoU3Ryb25nSGFuZGxlKGZ1bmN0b3IsIG1fcHJv
dGVjdGVkVmFsdWVzKTsKIAogICAgICAgICByZXR1cm4gZnVuY3Rvci5yZXR1cm5WYWx1ZSgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSklUU3R1YlJvdXRpbmVTZXQu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSklUU3R1YlJvdXRpbmVTZXQuY3BwCmlu
ZGV4IDVlNGNhMzZlMDM3OGQxYzhjNzA0MTBlNzg3NzViZmQyOWVkN2RlYjQuLmEzN2RjNmY1Y2U0
NGFhNDE1YTU3MTFkYjdhZjM4NGI5MzNlZDYxNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9KSVRTdHViUm91dGluZVNldC5jcHAKQEAgLTgyLDcgKzgyLDcgQEAgdm9pZCBK
SVRTdHViUm91dGluZVNldDo6bWFya1Nsb3codWludHB0cl90IGFkZHJlc3MpCiAgICAgaWYgKGl0
ZXIgPT0gbV9hZGRyZXNzVG9Sb3V0aW5lTWFwLmVuZCgpKQogICAgICAgICByZXR1cm47CiAgICAg
Ci0gICAgaXRlci0+c2Vjb25kLT5tX21heUJlRXhlY3V0aW5nID0gdHJ1ZTsKKyAgICBpdGVyLT52
YWx1ZS0+bV9tYXlCZUV4ZWN1dGluZyA9IHRydWU7CiB9CiAKIHZvaWQgSklUU3R1YlJvdXRpbmVT
ZXQ6OmRlbGV0ZVVubWFya2VkSmV0dGlzb25lZFN0dWJSb3V0aW5lcygpCkBAIC05Nyw3ICs5Nyw3
IEBAIHZvaWQgSklUU3R1YlJvdXRpbmVTZXQ6OmRlbGV0ZVVubWFya2VkSmV0dGlzb25lZFN0dWJS
b3V0aW5lcygpCiAgICAgICAgIHVpbnRwdHJfdCBzdGVwID0gSklUU3R1YlJvdXRpbmU6OmFkZHJl
c3NTdGVwKCk7CiAgICAgICAgIGZvciAodWludHB0cl90IGl0ZXIgPSBzdGFydDsgaXRlciA8IGVu
ZDsgaXRlciArPSBzdGVwKSB7CiAgICAgICAgICAgICBBU1NFUlQobV9hZGRyZXNzVG9Sb3V0aW5l
TWFwLmZpbmQoaXRlcikgIT0gbV9hZGRyZXNzVG9Sb3V0aW5lTWFwLmVuZCgpKTsKLSAgICAgICAg
ICAgIEFTU0VSVChtX2FkZHJlc3NUb1JvdXRpbmVNYXAuZmluZChpdGVyKS0+c2Vjb25kID09IHJv
dXRpbmUpOworICAgICAgICAgICAgQVNTRVJUKG1fYWRkcmVzc1RvUm91dGluZU1hcC5maW5kKGl0
ZXIpLT52YWx1ZSA9PSByb3V0aW5lKTsKICAgICAgICAgICAgIG1fYWRkcmVzc1RvUm91dGluZU1h
cC5yZW1vdmUoaXRlcik7CiAgICAgICAgIH0KICAgICAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9TbG90VmlzaXRvci5jcHAKaW5kZXggODg4ZDFiNGU1YmUwMzY1Mzc3ZjA1NDEwM2Iz
MTFkM2QyYTY5MGMyZS4uOGRjZTA4NjY1NGMxOTgzYWEzYWYwMGU3NTQ4MjlhMzJlYmViOWUzNyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcApAQCAtMzIxLDcg
KzMyMSw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6aW50ZXJuYWxBcHBlbmQo
SlNWYWx1ZSogc2xvdCkKICAgICAgICAgICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKICAg
ICAgICAgICAgICAgICBzdHJpbmctPnNldEhhc2hDb25zdFNpbmdsZXRvbigpOwogICAgICAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSBleGlzdGluZ0pTVmFsdWUgPSBhZGRS
ZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIGV4aXN0aW5n
SlNWYWx1ZSA9IGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgICAgICAgICAgaWYg
KHZhbHVlICE9IGV4aXN0aW5nSlNWYWx1ZSkKICAgICAgICAgICAgICAgICAgICAganNDYXN0PEpT
U3RyaW5nKj4oZXhpc3RpbmdKU1ZhbHVlLmFzQ2VsbCgpKS0+Y2xlYXJIYXNoQ29uc3RTaW5nbGV0
b24oKTsKICAgICAgICAgICAgICAgICAqc2xvdCA9IGV4aXN0aW5nSlNWYWx1ZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWsuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1dlYWsuaAppbmRleCAwNzY5OGZkMDZiMDZjNzUwMTRiYjY1YmYyNWZjMzFjMjhh
OWEwNjg0Li4zYzNkMWQwY2VmZTE4MTI2NTljNWZhNzNjNzRkMTk5NDhjMThmZmViIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvV2Vhay5oCkBAIC0xNjQsOCArMTY0LDggQEAgdGVtcGxhdGU8dHlwZW5h
bWUgTWFwLCB0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlPiBpbmxpbmUgdm9pZCB3ZWFrUmVt
b3ZlKE1hcCYKICAgICB0eXBlbmFtZSBNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLmZpbmQoa2V5KTsK
ICAgICBBU1NFUlRfVU5VU0VEKHZhbHVlLCB2YWx1ZSk7CiAgICAgQVNTRVJUKGl0ICE9IG1hcC5l
bmQoKSk7Ci0gICAgQVNTRVJUKGl0LT5zZWNvbmQud2FzKHZhbHVlKSk7Ci0gICAgQVNTRVJUKCFp
dC0+c2Vjb25kKTsKKyAgICBBU1NFUlQoaXQtPnZhbHVlLndhcyh2YWx1ZSkpOworICAgIEFTU0VS
VCghaXQtPnZhbHVlKTsKICAgICBtYXAucmVtb3ZlKGl0KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuY3BwCmluZGV4IGJmNWFjODhkZDljM2Y0NjYyNzk0OGM1Mzc0ZTRmMTQ0ODNmYzNlNjYu
LjM5ODQ1Mjc3NDg2ODE2MTRmMzI0YmQ5ZDBkZjBhNTY3YmI3YWRkNGMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5jcHAKQEAgLTcxNSw4ICs3MTUsOCBAQCBKSVRDb2RlIEpJVDo6cHJpdmF0ZUNv
bXBpbGUoQ29kZVB0ciogZnVuY3Rpb25FbnRyeUFyaXR5Q2hlY2ssIEpJVENvbXBpbGF0aW9uRWZm
bwogCiAgICAgICAgICAgICBTdHJpbmdKdW1wVGFibGU6OlN0cmluZ09mZnNldFRhYmxlOjppdGVy
YXRvciBlbmQgPSByZWNvcmQuanVtcFRhYmxlLnN0cmluZ0p1bXBUYWJsZS0+b2Zmc2V0VGFibGUu
ZW5kKCk7ICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKFN0cmluZ0p1bXBUYWJsZTo6U3Ry
aW5nT2Zmc2V0VGFibGU6Oml0ZXJhdG9yIGl0ID0gcmVjb3JkLmp1bXBUYWJsZS5zdHJpbmdKdW1w
VGFibGUtPm9mZnNldFRhYmxlLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IGl0LT5zZWNvbmQuYnJhbmNoT2Zmc2V0OwotICAgICAg
ICAgICAgICAgIGl0LT5zZWNvbmQuY3RpT2Zmc2V0ID0gb2Zmc2V0ID8gcGF0Y2hCdWZmZXIubG9j
YXRpb25PZihtX2xhYmVsc1tieXRlY29kZU9mZnNldCArIG9mZnNldF0pIDogcmVjb3JkLmp1bXBU
YWJsZS5zdHJpbmdKdW1wVGFibGUtPmN0aURlZmF1bHQ7CisgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgb2Zmc2V0ID0gaXQtPnZhbHVlLmJyYW5jaE9mZnNldDsKKyAgICAgICAgICAgICAgICBpdC0+
dmFsdWUuY3RpT2Zmc2V0ID0gb2Zmc2V0ID8gcGF0Y2hCdWZmZXIubG9jYXRpb25PZihtX2xhYmVs
c1tieXRlY29kZU9mZnNldCArIG9mZnNldF0pIDogcmVjb3JkLmp1bXBUYWJsZS5zdHJpbmdKdW1w
VGFibGUtPmN0aURlZmF1bHQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCmluZGV4IGRhNTA3ODM4YTY3OGVlMDU1N2M0
ODY3NzVjYTZjYzAzM2FkZjhmNTguLjEwZDM1NzIwZTExODhkMDg4NGY4ZmE1YzU5NGY5MGYzNWU4
Mjk0MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCkBAIC0zNDIzLDgg
KzM0MjMsOCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgSklUVGh1bmtzOjpjdGlTdHViKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSwgVGh1bmtHZW5lcmF0bwogewogICAgIENUSVN0dWJNYXA6OkFk
ZFJlc3VsdCBlbnRyeSA9IG1fY3RpU3R1Yk1hcC5hZGQoZ2VuZXJhdG9yLCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYoKSk7CiAgICAgaWYgKGVudHJ5LmlzTmV3RW50cnkpCi0gICAgICAgIGVudHJ5Lml0
ZXJhdG9yLT5zZWNvbmQgPSBnZW5lcmF0b3IoZ2xvYmFsRGF0YSk7Ci0gICAgcmV0dXJuIGVudHJ5
Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgIGVudHJ5Lml0ZXJhdG9yLT52YWx1ZSA9IGdlbmVy
YXRvcihnbG9iYWxEYXRhKTsKKyAgICByZXR1cm4gZW50cnkuaXRlcmF0b3ItPnZhbHVlOwogfQog
CiBOYXRpdmVFeGVjdXRhYmxlKiBKSVRUaHVua3M6Omhvc3RGdW5jdGlvblN0dWIoSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhLCBOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgTmF0aXZlRnVuY3Rpb24g
Y29uc3RydWN0b3IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1Bh
cnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAKaW5kZXgg
MzU1NWYwN2NkOTJiYTk2YzZiODk2Njc0MWMzNGUzNGIzMzM0M2Q2MC4uMTQxZmFlN2NjZjM5NWEy
NGVmNDZmY2Y3MzYxZmJkYTYwMDlkZjc2MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9QYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
UGFyc2VyLmNwcApAQCAtMTM2NiwxMCArMTM2NiwxMCBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1
aWxkZXI+IFRyZWVFeHByZXNzaW9uIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZVN0cmljdE9iamVj
dAogICAgICAgICBpZiAoIW1fc3ludGF4QWxyZWFkeVZhbGlkYXRlZCkgewogICAgICAgICAgICAg
T2JqZWN0VmFsaWRhdGlvbk1hcDo6QWRkUmVzdWx0IHByb3BlcnR5RW50cnkgPSBvYmplY3RWYWxp
ZGF0b3IuYWRkKGNvbnRleHQuZ2V0TmFtZShwcm9wZXJ0eSkuaW1wbCgpLCBjb250ZXh0LmdldFR5
cGUocHJvcGVydHkpKTsKICAgICAgICAgICAgIGlmICghcHJvcGVydHlFbnRyeS5pc05ld0VudHJ5
KSB7Ci0gICAgICAgICAgICAgICAgZmFpbElmVHJ1ZShwcm9wZXJ0eUVudHJ5Lml0ZXJhdG9yLT5z
ZWNvbmQgPT0gUHJvcGVydHlOb2RlOjpDb25zdGFudCk7CisgICAgICAgICAgICAgICAgZmFpbElm
VHJ1ZShwcm9wZXJ0eUVudHJ5Lml0ZXJhdG9yLT52YWx1ZSA9PSBQcm9wZXJ0eU5vZGU6OkNvbnN0
YW50KTsKICAgICAgICAgICAgICAgICBmYWlsSWZUcnVlKGNvbnRleHQuZ2V0VHlwZShwcm9wZXJ0
eSkgPT0gUHJvcGVydHlOb2RlOjpDb25zdGFudCk7Ci0gICAgICAgICAgICAgICAgZmFpbElmVHJ1
ZShjb250ZXh0LmdldFR5cGUocHJvcGVydHkpICYgcHJvcGVydHlFbnRyeS5pdGVyYXRvci0+c2Vj
b25kKTsKLSAgICAgICAgICAgICAgICBwcm9wZXJ0eUVudHJ5Lml0ZXJhdG9yLT5zZWNvbmQgfD0g
Y29udGV4dC5nZXRUeXBlKHByb3BlcnR5KTsKKyAgICAgICAgICAgICAgICBmYWlsSWZUcnVlKGNv
bnRleHQuZ2V0VHlwZShwcm9wZXJ0eSkgJiBwcm9wZXJ0eUVudHJ5Lml0ZXJhdG9yLT52YWx1ZSk7
CisgICAgICAgICAgICAgICAgcHJvcGVydHlFbnRyeS5pdGVyYXRvci0+dmFsdWUgfD0gY29udGV4
dC5nZXRUeXBlKHByb3BlcnR5KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICB0
YWlsID0gY29udGV4dC5jcmVhdGVQcm9wZXJ0eUxpc3QocHJvcGVydHlMb2NhdGlvbiwgcHJvcGVy
dHksIHRhaWwpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1By
b2ZpbGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGUuY3BwCmlu
ZGV4IDUxZjg3MTg5ODM4YzQ5Yjc0MGUyMWIwNmRkZjFiODc0ZjY0NWYwMzUuLmE2NDE1ODBlYzI0
NjQ1Njg1NTcxNzMwMGFkZWMwMWQ5MWJlMmEyMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wcm9maWxlci9Qcm9maWxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cHJvZmlsZXIvUHJvZmlsZS5jcHAKQEAgLTExMSw3ICsxMTEsNyBAQCB0eXBlZGVmIFdURjo6S2V5
VmFsdWVQYWlyPEZ1bmN0aW9uQ2FsbEhhc2hDb3VudDo6VmFsdWVUeXBlLCB1bnNpZ25lZD4gTmFt
ZUNvdW50UAogCiBzdGF0aWMgaW5saW5lIGJvb2wgZnVuY3Rpb25OYW1lQ291bnRQYWlyQ29tcGFy
YXRvcihjb25zdCBOYW1lQ291bnRQYWlyJiBhLCBjb25zdCBOYW1lQ291bnRQYWlyJiBiKQogewot
ICAgIHJldHVybiBhLnNlY29uZCA+IGIuc2Vjb25kOworICAgIHJldHVybiBhLnZhbHVlID4gYi52
YWx1ZTsKIH0KIAogdm9pZCBQcm9maWxlOjpkZWJ1Z1ByaW50RGF0YVNhbXBsZVN0eWxlKCkgY29u
c3QKQEAgLTEyOCw3ICsxMjgsNyBAQCB2b2lkIFByb2ZpbGU6OmRlYnVnUHJpbnREYXRhU2FtcGxl
U3R5bGUoKSBjb25zdAogCiAgICAgc3RkOjpzb3J0KHNvcnRlZEZ1bmN0aW9ucy5iZWdpbigpLCBz
b3J0ZWRGdW5jdGlvbnMuZW5kKCksIGZ1bmN0aW9uTmFtZUNvdW50UGFpckNvbXBhcmF0b3IpOwog
ICAgIGZvciAoTmFtZUNvdW50UGFpclZlY3Rvcjo6aXRlcmF0b3IgaXQgPSBzb3J0ZWRGdW5jdGlv
bnMuYmVnaW4oKTsgaXQgIT0gc29ydGVkRnVuY3Rpb25zLmVuZCgpOyArK2l0KQotICAgICAgICBk
YXRhTG9nKCIgICAgICAgICUtMTJkJXNcbiIsICgqaXQpLnNlY29uZCwgU3RyaW5nKCgqaXQpLmZp
cnN0KS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgZGF0YUxvZygiICAgICAgICAlLTEyZCVzXG4i
LCAoKml0KS52YWx1ZSwgU3RyaW5nKCgqaXQpLmtleSkudXRmOCgpLmRhdGEoKSk7CiAKICAgICBk
YXRhTG9nKCJcblNvcnQgYnkgdG9wIG9mIHN0YWNrLCBzYW1lIGNvbGxhcHNlZCAod2hlbiA+PSA1
KTpcbiIpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRl
bnRpZmllci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmNw
cAppbmRleCAzMjAwOTU2Njc4NjQ2M2QyNmQzYjlhZGQyOTQxZjNkOTU5ZjI1Y2U3Li40NWRkMGJi
ZGVkYTY2ZjQ1ZTJhNzFiOGFlYTdiOGI5YmEwYTA2OWNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JZGVudGlmaWVyLmNwcApAQCAtOTksNyArOTksNyBAQCBQYXNzUmVmUHRy
PFN0cmluZ0ltcGw+IElkZW50aWZpZXI6OmFkZChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNv
bnN0IGNoYXIqIGMpCiAKICAgICBjb25zdCBMaXRlcmFsSWRlbnRpZmllclRhYmxlOjppdGVyYXRv
ciYgaXRlciA9IGxpdGVyYWxJZGVudGlmaWVyVGFibGUuZmluZChjKTsKICAgICBpZiAoaXRlciAh
PSBsaXRlcmFsSWRlbnRpZmllclRhYmxlLmVuZCgpKQotICAgICAgICByZXR1cm4gaXRlci0+c2Vj
b25kOworICAgICAgICByZXR1cm4gaXRlci0+dmFsdWU7CiAKICAgICBIYXNoU2V0PFN0cmluZ0lt
cGwqPjo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IGlkZW50aWZpZXJUYWJsZS5hZGQ8Y29uc3QgTENo
YXIqLCBJZGVudGlmaWVyQVNDSUlTdHJpbmdUcmFuc2xhdG9yPihyZWludGVycHJldF9jYXN0PGNv
bnN0IExDaGFyKj4oYykpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FjdGl2YXRpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
Y3RpdmF0aW9uLmNwcAppbmRleCBjMzRlMTBiYzg3ZDM4OWVjMDZhYzc2Yzk0NGE3ZmQ0ZDI1ODYw
YjI0Li40OTcyZjRmOGUzZjIwOTk5ZmQwNGI4YTZiOTE4MzFkYTE2MmQ1OGM0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5jcHAKQEAgLTExNiwxMSAr
MTE2LDExIEBAIHZvaWQgSlNBY3RpdmF0aW9uOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMo
SlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjCiAKICAgICBTeW1ib2xUYWJsZTo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS0+ZW5kKCk7CiAgICAg
Zm9yIChTeW1ib2xUYWJsZTo6Y29uc3RfaXRlcmF0b3IgaXQgPSB0aGlzT2JqZWN0LT5zeW1ib2xU
YWJsZSgpLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5zZWNv
bmQuZ2V0QXR0cmlidXRlcygpICYgRG9udEVudW0gJiYgbW9kZSAhPSBJbmNsdWRlRG9udEVudW1Q
cm9wZXJ0aWVzKQorICAgICAgICBpZiAoaXQtPnZhbHVlLmdldEF0dHJpYnV0ZXMoKSAmIERvbnRF
bnVtICYmIG1vZGUgIT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykKICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICBpZiAoIXRoaXNPYmplY3QtPmlzVmFsaWQoaXQtPnNlY29uZCkpCisg
ICAgICAgIGlmICghdGhpc09iamVjdC0+aXNWYWxpZChpdC0+dmFsdWUpKQogICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXIoZXhlYywgaXQt
PmZpcnN0LmdldCgpKSk7CisgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXIoZXhl
YywgaXQtPmtleS5nZXQoKSkpOwogICAgIH0KICAgICAvLyBTa2lwIHRoZSBKU1ZhcmlhYmxlT2Jq
ZWN0IGltcGxlbWVudGF0aW9uIG9mIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcwogICAgIEpT
T2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJv
cGVydHlOYW1lcywgbW9kZSk7CkBAIC0xMzMsNyArMTMzLDcgQEAgaW5saW5lIGJvb2wgSlNBY3Rp
dmF0aW9uOjpzeW1ib2xUYWJsZVB1dFdpdGhBdHRyaWJ1dGVzKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwKICAgICBTeW1ib2xUYWJsZTo6aXRlcmF0b3IgaXRlciA9IHN5bWJvbFRhYmxlKCktPmZp
bmQocHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSk7CiAgICAgaWYgKGl0ZXIgPT0gc3ltYm9sVGFi
bGUoKS0+ZW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBTeW1ib2xUYWJsZUVudHJ5
JiBlbnRyeSA9IGl0ZXItPnNlY29uZDsKKyAgICBTeW1ib2xUYWJsZUVudHJ5JiBlbnRyeSA9IGl0
ZXItPnZhbHVlOwogICAgIEFTU0VSVCghZW50cnkuaXNOdWxsKCkpOwogICAgIGlmICghaXNWYWxp
ZChlbnRyeSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBcnJheS5jcHAKaW5kZXggNzVhZDdmNzJkZWQzY2U1MmIzNjczMDE5Y2UxOWRhMTU0
ZTFmMzdlMy4uYmQ2NWVlZTdiY2E4MjdiYjU2MjNhY2NiMjA5YWY2NzcyMDY1ZDljOCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKQEAgLTM1Niw3ICszNTYsNyBA
QCBib29sIEpTQXJyYXk6OnNldExlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIG5ld0xl
bmd0aCwgYm9vbCB0aHJvd0V4Y2VwdGlvbgogICAgICAgICAgICAga2V5cy5yZXNlcnZlQ2FwYWNp
dHkobWluKG1hcC0+c2l6ZSgpLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGxlbmd0aCAtIG5ld0xlbmd0
aCkpKTsKICAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IG1hcC0+ZW5kKCk7CiAgICAgICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihpdC0+Zmly
c3QpOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KGl0LT5rZXkpOwogICAgICAgICAgICAgICAgIGlmIChpbmRleCA8IGxlbmd0aCAmJiBpbmRl
eCA+PSBuZXdMZW5ndGgpCiAgICAgICAgICAgICAgICAgICAgIGtleXMuYXBwZW5kKGluZGV4KTsK
ICAgICAgICAgICAgIH0KQEAgLTM3MSw3ICszNzEsNyBAQCBib29sIEpTQXJyYXk6OnNldExlbmd0
aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIG5ld0xlbmd0aCwgYm9vbCB0aHJvd0V4Y2VwdGlv
bgogICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGtleXNbLS1pXTsKICAgICAg
ICAgICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAtPmZp
bmQoaW5kZXgpOwogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaXQgIT0gbWFwLT5ub3RGb3Vu
ZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGl0LT5zZWNvbmQuYXR0cmlidXRlcyAmIERv
bnREZWxldGUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGl0LT52YWx1ZS5hdHRyaWJ1dGVz
ICYgRG9udERlbGV0ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZS0+c2V0TGVu
Z3RoKGluZGV4ICsgMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4
ZWMsIHRocm93RXhjZXB0aW9uLCAiVW5hYmxlIHRvIGRlbGV0ZSBwcm9wZXJ0eS4iKTsKICAgICAg
ICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPYmplY3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3Qu
Y3BwCmluZGV4IGU1NTBkOTA1YTg3YTBiNjYxMmI0NjQ4NWY2Y2MxOWY1MDY3OWY3ODAuLmIwY2Fj
ZDI4NDE5YTJhZDcxYzMwOWY3N2NkZGQyZTYyOTlkZWYxNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKQEAgLTI0OCw3ICsyNDgsNyBAQCBib29sIEpTT2Jq
ZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBl
eGVjLCB1bnNpZ25lZAogICAgICAgICB9IGVsc2UgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1h
cCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmdldCgpKSB7CiAgICAgICAgICAgICBTcGFyc2VBcnJh
eVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+ZmluZChpKTsKICAgICAgICAgICAgIGlmIChp
dCAhPSBtYXAtPm5vdEZvdW5kKCkpIHsKLSAgICAgICAgICAgICAgICBpdC0+c2Vjb25kLmdldChz
bG90KTsKKyAgICAgICAgICAgICAgICBpdC0+dmFsdWUuZ2V0KHNsb3QpOwogICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC00MjUsNyArNDI1
LDcgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6ZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2Rl
V2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHMKICAgICAgICAgLy8gVGhpcyB3aWxsIGFsd2F5
cyBiZSBhIG5ldyBlbnRyeSBpbiB0aGUgbWFwLCBzbyBubyBuZWVkIHRvIGNoZWNrIHdlIGNhbiB3
cml0ZSwKICAgICAgICAgLy8gYW5kIGF0dHJpYnV0ZXMgYXJlIGRlZmF1bHQgc28gbm8gbmVlZCB0
byBzZXQgdGhlbS4KICAgICAgICAgaWYgKHZhbHVlKQotICAgICAgICAgICAgbWFwLT5hZGQodGhp
cywgaSkuaXRlcmF0b3ItPnNlY29uZC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAg
ICAgICAgICAgbWFwLT5hZGQodGhpcywgaSkuaXRlcmF0b3ItPnZhbHVlLnNldChnbG9iYWxEYXRh
LCB0aGlzLCB2YWx1ZSk7CiAgICAgfQogCiAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBz
dG9yYWdlLT5idXR0ZXJmbHkoKS0+cmVzaXplQXJyYXkoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCks
IDAsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcigwKSk7CkBAIC03MTYsNyArNzE2LDcgQEAgYm9vbCBK
U09iamVjdDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBl
eGVjLCB1bnNpZ25lZCBpKQogICAgICAgICB9IGVsc2UgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAq
IG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmdldCgpKSB7CiAgICAgICAgICAgICBTcGFyc2VB
cnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+ZmluZChpKTsKICAgICAgICAgICAgIGlm
IChpdCAhPSBtYXAtPm5vdEZvdW5kKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoaXQtPnNlY29u
ZC5hdHRyaWJ1dGVzICYgRG9udERlbGV0ZSkKKyAgICAgICAgICAgICAgICBpZiAoaXQtPnZhbHVl
LmF0dHJpYnV0ZXMgJiBEb250RGVsZXRlKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgICAgICAgICAgbWFwLT5yZW1vdmUoaXQpOwogICAgICAgICAgICAgfQpAQCAt
ODkyLDggKzg5Miw4IEBAIHZvaWQgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hCiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC0+
ZW5kKCk7CiAgICAgICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgICAg
ICBpZiAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzIHx8ICEoaXQtPnNlY29uZC5h
dHRyaWJ1dGVzICYgRG9udEVudW0pKQotICAgICAgICAgICAgICAgICAgICBrZXlzLmFwcGVuZChz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oaXQtPmZpcnN0KSk7CisgICAgICAgICAgICAgICAgaWYgKG1v
ZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcyB8fCAhKGl0LT52YWx1ZS5hdHRyaWJ1dGVz
ICYgRG9udEVudW0pKQorICAgICAgICAgICAgICAgICAgICBrZXlzLmFwcGVuZChzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oaXQtPmtleSkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBzdGQ6OnNvcnQoa2V5cy5iZWdpbigpLCBrZXlzLmVuZCgpKTsKQEAgLTExMjMsNyAr
MTEyMyw3IEBAIGJvb2wgSlNPYmplY3Q6OmRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eShFeGVjU3Rh
dGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4LCBQcm9wZXJ0CiAKICAgICAvLyAxLiBMZXQgY3VycmVu
dCBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbR2V0T3duUHJvcGVydHldXSBpbnRlcm5h
bCBtZXRob2Qgb2YgTyB3aXRoIHByb3BlcnR5IG5hbWUgUC4KICAgICBTcGFyc2VBcnJheVZhbHVl
TWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbWFwLT5hZGQodGhpcywgaW5kZXgpOwotICAgIFNwYXJz
ZUFycmF5RW50cnkqIGVudHJ5SW5NYXAgPSAmcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAg
U3BhcnNlQXJyYXlFbnRyeSogZW50cnlJbk1hcCA9ICZyZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwog
CiAgICAgLy8gMi4gTGV0IGV4dGVuc2libGUgYmUgdGhlIHZhbHVlIG9mIHRoZSBbW0V4dGVuc2li
bGVdXSBpbnRlcm5hbCBwcm9wZXJ0eSBvZiBPLgogICAgIC8vIDMuIElmIGN1cnJlbnQgaXMgdW5k
ZWZpbmVkIGFuZCBleHRlbnNpYmxlIGlzIGZhbHNlLCB0aGVuIFJlamVjdC4KQEAgLTEyNDMsOCAr
MTI0Myw4IEBAIGJvb2wgSlNPYmplY3Q6OmF0dGVtcHRUb0ludGVyY2VwdFB1dEJ5SW5kZXhPbkhv
bGVGb3JQcm90b3R5cGUoRXhlY1N0YXRlKiBleGVjLCBKCiAgICAgICAgIEFycmF5U3RvcmFnZSog
c3RvcmFnZSA9IGN1cnJlbnQtPmFycmF5U3RvcmFnZU9yTnVsbCgpOwogICAgICAgICBpZiAoc3Rv
cmFnZSAmJiBzdG9yYWdlLT5tX3NwYXJzZU1hcCkgewogICAgICAgICAgICAgU3BhcnNlQXJyYXlW
YWx1ZU1hcDo6aXRlcmF0b3IgaXRlciA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwLT5maW5kKGkpOwot
ICAgICAgICAgICAgaWYgKGl0ZXIgIT0gc3RvcmFnZS0+bV9zcGFyc2VNYXAtPm5vdEZvdW5kKCkg
JiYgKGl0ZXItPnNlY29uZC5hdHRyaWJ1dGVzICYgKEFjY2Vzc29yIHwgUmVhZE9ubHkpKSkgewot
ICAgICAgICAgICAgICAgIGl0ZXItPnNlY29uZC5wdXQoZXhlYywgdGhpc1ZhbHVlLCBzdG9yYWdl
LT5tX3NwYXJzZU1hcC5nZXQoKSwgdmFsdWUsIHNob3VsZFRocm93KTsKKyAgICAgICAgICAgIGlm
IChpdGVyICE9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwLT5ub3RGb3VuZCgpICYmIChpdGVyLT52YWx1
ZS5hdHRyaWJ1dGVzICYgKEFjY2Vzc29yIHwgUmVhZE9ubHkpKSkgeworICAgICAgICAgICAgICAg
IGl0ZXItPnZhbHVlLnB1dChleGVjLCB0aGlzVmFsdWUsIHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmdl
dCgpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xMzI4LDcgKzEzMjgsNyBAQCB2b2lkIEpTT2Jq
ZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShFeGVjU3Rh
dGUqIGV4ZWMsIHVucwogICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0gc3RvcmFn
ZS0+bV92ZWN0b3I7CiAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gbWFwLT5lbmQoKTsKICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHZlY3Rvcltp
dC0+Zmlyc3RdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBpdC0+c2Vjb25kLmdldE5vblNwYXJzZU1v
ZGUoKSk7CisgICAgICAgIHZlY3RvcltpdC0+a2V5XS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgaXQt
PnZhbHVlLmdldE5vblNwYXJzZU1vZGUoKSk7CiAgICAgZGVhbGxvY2F0ZVNwYXJzZUluZGV4TWFw
KCk7CiAKICAgICAvLyBTdG9yZSB0aGUgbmV3IHByb3BlcnR5IGludG8gdGhlIHZlY3Rvci4KQEAg
LTE0NDQsNyArMTQ0NCw3IEBAIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEluZGV4QmV5b25kVmVj
dG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsCiAgICAgV3JpdGVCYXJy
aWVyPFVua25vd24+KiB2ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsKICAgICBTcGFyc2VBcnJh
eVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwogICAgIGZvciAoU3Bh
cnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkKLSAgICAgICAgdmVjdG9yW2l0LT5maXJzdF0uc2V0KGdsb2JhbERhdGEsIHRo
aXMsIGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpKTsKKyAgICAgICAgdmVjdG9yW2l0LT5r
ZXldLnNldChnbG9iYWxEYXRhLCB0aGlzLCBpdC0+dmFsdWUuZ2V0Tm9uU3BhcnNlTW9kZSgpKTsK
ICAgICBkZWFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoKTsKIAogICAgIC8vIFN0b3JlIHRoZSBuZXcg
cHJvcGVydHkgaW50byB0aGUgdmVjdG9yLgpAQCAtMTYxNyw3ICsxNjE3LDcgQEAgYm9vbCBKU09i
amVjdDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGUKICAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6Oml0ZXJhdG9y
IGl0ID0gbWFwLT5maW5kKGkpOwogICAgICAgICAgICAgaWYgKGl0ID09IG1hcC0+bm90Rm91bmQo
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpdC0+c2Vjb25k
LmdldChkZXNjcmlwdG9yKTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS5nZXQoZGVzY3JpcHRvcik7
CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFs
c2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRh
YmxlT2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFi
bGVPYmplY3QuY3BwCmluZGV4IDc2NWUxZDNkNDRkNjlhYjgxMzNkNzZjZmNjN2UyMjczNWQ4NjY0
ZmIuLjdkY2RlNDcwMDQ2YzhmMjcyMGYwN2I3NGM1YWQ3Mjc0N2ExNDA0ZDEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3Bw
CkBAIC02MSw4ICs2MSw4IEBAIHZvaWQgSlNTeW1ib2xUYWJsZU9iamVjdDo6Z2V0T3duTm9uSW5k
ZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0CiAgICAgSlNTeW1ib2xU
YWJsZU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1N5bWJvbFRhYmxlT2JqZWN0Kj4ob2Jq
ZWN0KTsKICAgICBTeW1ib2xUYWJsZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gdGhpc09iamVjdC0+
c3ltYm9sVGFibGUoKS0+ZW5kKCk7CiAgICAgZm9yIChTeW1ib2xUYWJsZTo6Y29uc3RfaXRlcmF0
b3IgaXQgPSB0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKLSAgICAgICAgaWYgKCEoaXQtPnNlY29uZC5nZXRBdHRyaWJ1dGVzKCkgJiBEb250RW51
bSkgfHwgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykpCi0gICAgICAgICAgICBw
cm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyKGV4ZWMsIGl0LT5maXJzdC5nZXQoKSkpOworICAg
ICAgICBpZiAoIShpdC0+dmFsdWUuZ2V0QXR0cmlidXRlcygpICYgRG9udEVudW0pIHx8IChtb2Rl
ID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpKQorICAgICAgICAgICAgcHJvcGVydHlOYW1l
cy5hZGQoSWRlbnRpZmllcihleGVjLCBpdC0+a2V5LmdldCgpKSk7CiAgICAgfQogICAgIAogICAg
IEpTT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywg
cHJvcGVydHlOYW1lcywgbW9kZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgKaW5kZXggYjRkMzEzYzE5MTk4MGZkYjg5N2VjZGY0
NDVmYTE0MWRlZTEyZjNmZC4uOTEzNjc5ZjgwYzcyYmNjZDFjODg2MTczY2QxMmY4OTMzZWFkZDcw
YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJs
ZU9iamVjdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFi
bGVPYmplY3QuaApAQCAtNzYsNyArNzYsNyBAQCBpbmxpbmUgYm9vbCBzeW1ib2xUYWJsZUdldCgK
ICAgICBTeW1ib2xUYWJsZTo6aXRlcmF0b3IgaXRlciA9IHN5bWJvbFRhYmxlLmZpbmQocHJvcGVy
dHlOYW1lLnB1YmxpY05hbWUoKSk7CiAgICAgaWYgKGl0ZXIgPT0gc3ltYm9sVGFibGUuZW5kKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBTeW1ib2xUYWJsZUVudHJ5OjpGYXN0IGVudHJ5
ID0gaXRlci0+c2Vjb25kOworICAgIFN5bWJvbFRhYmxlRW50cnk6OkZhc3QgZW50cnkgPSBpdGVy
LT52YWx1ZTsKICAgICBBU1NFUlQoIWVudHJ5LmlzTnVsbCgpKTsKICAgICBzbG90LnNldFZhbHVl
KG9iamVjdC0+cmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKS5nZXQoKSk7CiAgICAgcmV0dXJu
IHRydWU7CkBAIC05MCw3ICs5MCw3IEBAIGlubGluZSBib29sIHN5bWJvbFRhYmxlR2V0KAogICAg
IFN5bWJvbFRhYmxlOjppdGVyYXRvciBpdGVyID0gc3ltYm9sVGFibGUuZmluZChwcm9wZXJ0eU5h
bWUucHVibGljTmFtZSgpKTsKICAgICBpZiAoaXRlciA9PSBzeW1ib2xUYWJsZS5lbmQoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFN5bWJvbFRhYmxlRW50cnk6OkZhc3QgZW50cnkgPSBp
dGVyLT5zZWNvbmQ7CisgICAgU3ltYm9sVGFibGVFbnRyeTo6RmFzdCBlbnRyeSA9IGl0ZXItPnZh
bHVlOwogICAgIEFTU0VSVCghZW50cnkuaXNOdWxsKCkpOwogICAgIGRlc2NyaXB0b3Iuc2V0RGVz
Y3JpcHRvcigKICAgICAgICAgb2JqZWN0LT5yZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpLmdl
dCgpLCBlbnRyeS5nZXRBdHRyaWJ1dGVzKCkgfCBEb250RGVsZXRlKTsKQEAgLTEwNiw3ICsxMDYs
NyBAQCBpbmxpbmUgYm9vbCBzeW1ib2xUYWJsZUdldCgKICAgICBTeW1ib2xUYWJsZTo6aXRlcmF0
b3IgaXRlciA9IHN5bWJvbFRhYmxlLmZpbmQocHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSk7CiAg
ICAgaWYgKGl0ZXIgPT0gc3ltYm9sVGFibGUuZW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBTeW1ib2xUYWJsZUVudHJ5OjpGYXN0IGVudHJ5ID0gaXRlci0+c2Vjb25kOworICAgIFN5
bWJvbFRhYmxlRW50cnk6OkZhc3QgZW50cnkgPSBpdGVyLT52YWx1ZTsKICAgICBBU1NFUlQoIWVu
dHJ5LmlzTnVsbCgpKTsKICAgICBzbG90LnNldFZhbHVlKG9iamVjdC0+cmVnaXN0ZXJBdChlbnRy
eS5nZXRJbmRleCgpKS5nZXQoKSk7CiAgICAgc2xvdElzV3JpdGVhYmxlID0gIWVudHJ5LmlzUmVh
ZE9ubHkoKTsKQEAgLTEyNiw3ICsxMjYsNyBAQCBpbmxpbmUgYm9vbCBzeW1ib2xUYWJsZVB1dCgK
ICAgICBpZiAoaXRlciA9PSBzeW1ib2xUYWJsZS5lbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIGJvb2wgd2FzRmF0OwotICAgIFN5bWJvbFRhYmxlRW50cnk6OkZhc3QgZmFzdEVudHJ5
ID0gaXRlci0+c2Vjb25kLmdldEZhc3Qod2FzRmF0KTsKKyAgICBTeW1ib2xUYWJsZUVudHJ5OjpG
YXN0IGZhc3RFbnRyeSA9IGl0ZXItPnZhbHVlLmdldEZhc3Qod2FzRmF0KTsKICAgICBBU1NFUlQo
IWZhc3RFbnRyeS5pc051bGwoKSk7CiAgICAgaWYgKGZhc3RFbnRyeS5pc1JlYWRPbmx5KCkpIHsK
ICAgICAgICAgaWYgKHNob3VsZFRocm93KQpAQCAtMTM0LDcgKzEzNCw3IEBAIGlubGluZSBib29s
IHN5bWJvbFRhYmxlUHV0KAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgaWYgKFVO
TElLRUxZKHdhc0ZhdCkpCi0gICAgICAgIGl0ZXItPnNlY29uZC5ub3RpZnlXcml0ZSgpOworICAg
ICAgICBpdGVyLT52YWx1ZS5ub3RpZnlXcml0ZSgpOwogICAgIG9iamVjdC0+cmVnaXN0ZXJBdChm
YXN0RW50cnkuZ2V0SW5kZXgoKSkuc2V0KGdsb2JhbERhdGEsIG9iamVjdCwgdmFsdWUpOwogICAg
IHJldHVybiB0cnVlOwogfQpAQCAtMTQ5LDcgKzE0OSw3IEBAIGlubGluZSBib29sIHN5bWJvbFRh
YmxlUHV0V2l0aEF0dHJpYnV0ZXMoCiAgICAgU3ltYm9sVGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSBv
YmplY3QtPnN5bWJvbFRhYmxlKCktPmZpbmQocHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSk7CiAg
ICAgaWYgKGl0ZXIgPT0gb2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5lbmQoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIFN5bWJvbFRhYmxlRW50cnkmIGVudHJ5ID0gaXRlci0+c2Vjb25kOwor
ICAgIFN5bWJvbFRhYmxlRW50cnkmIGVudHJ5ID0gaXRlci0+dmFsdWU7CiAgICAgQVNTRVJUKCFl
bnRyeS5pc051bGwoKSk7CiAgICAgZW50cnkubm90aWZ5V3JpdGUoKTsKICAgICBlbnRyeS5zZXRB
dHRyaWJ1dGVzKGF0dHJpYnV0ZXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUmVnRXhwQ2FjaGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UmVnRXhwQ2FjaGUuY3BwCmluZGV4IGM2N2RhYjhlNjFlZTAyYTE2OTFhZjQ3OTY3YjBkYmQzOGU5
ZTY0NTQuLjhhY2FmYmEyM2E2MDQ0ZGNlODdiOGFmNjYzOTkyYTE3ZWY1N2JmODcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZS5jcHAKQEAgLTgwLDcgKzgw
LDcgQEAgdm9pZCBSZWdFeHBDYWNoZTo6aW52YWxpZGF0ZUNvZGUoKQogCiAgICAgUmVnRXhwQ2Fj
aGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fd2Vha0NhY2hlLmVuZCgpOwogICAgIGZvciAoUmVnRXhw
Q2FjaGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV93ZWFrQ2FjaGUuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7Ci0gICAgICAgIFJlZ0V4cCogcmVnRXhwID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAg
ICAgUmVnRXhwKiByZWdFeHAgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgIGlmICghcmVnRXhw
KSAvLyBTa2lwIHpvbWJpZXMuCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgcmVnRXhw
LT5pbnZhbGlkYXRlQ29kZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmNwcAppbmRleCBiOWJhMjU3MzVhZmY2ZGVlZjBmZTVi
NDMyYmQzYzZhY2RiZDcxZjk5Li43ZjIxZTJjOWZlNTM0ZWFkMzBmMjI3NjcwZTliN2Y1MDUwMTU2
Y2M3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJh
eVZhbHVlTWFwLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VB
cnJheVZhbHVlTWFwLmNwcApAQCAtODgsNyArODgsNyBAQCBTcGFyc2VBcnJheVZhbHVlTWFwOjpB
ZGRSZXN1bHQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6YWRkKEpTT2JqZWN0KiBhcnJheSwgdW5zaWdu
ZQogdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjpwdXRFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiBhcnJheSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJv
dykKIHsKICAgICBBZGRSZXN1bHQgcmVzdWx0ID0gYWRkKGFycmF5LCBpKTsKLSAgICBTcGFyc2VB
cnJheUVudHJ5JiBlbnRyeSA9IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgIFNwYXJzZUFy
cmF5RW50cnkmIGVudHJ5ID0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIAogICAgIC8vIFRvIHNh
dmUgYSBzZXBhcmF0ZSBmaW5kICYgYWRkLCB3ZSBmaXJzdCBhbHdheXMgYWRkIHRvIHRoZSBzcGFy
c2UgbWFwLgogICAgIC8vIEluIHRoZSB1bmNvbW1vbiBjYXNlIHRoYXQgdGhpcyBpcyBhIG5ldyBw
cm9wZXJ0eSwgYW5kIHRoZSBhcnJheSBpcyBub3QKQEAgLTEwNiw3ICsxMDYsNyBAQCB2b2lkIFNw
YXJzZUFycmF5VmFsdWVNYXA6OnB1dEVudHJ5KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGFy
cmF5LCB1bnNpZ25lZCBpLAogYm9vbCBTcGFyc2VBcnJheVZhbHVlTWFwOjpwdXREaXJlY3QoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCogYXJyYXksIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUs
IHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFB1dERpcmVjdEluZGV4TW9kZSBtb2RlKQogewogICAgIEFk
ZFJlc3VsdCByZXN1bHQgPSBhZGQoYXJyYXksIGkpOwotICAgIFNwYXJzZUFycmF5RW50cnkmIGVu
dHJ5ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgU3BhcnNlQXJyYXlFbnRyeSYgZW50
cnkgPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogCiAgICAgLy8gVG8gc2F2ZSBhIHNlcGFyYXRl
IGZpbmQgJiBhZGQsIHdlIGZpcnN0IGFsd2F5cyBhZGQgdG8gdGhlIHNwYXJzZSBtYXAuCiAgICAg
Ly8gSW4gdGhlIHVuY29tbW9uIGNhc2UgdGhhdCB0aGlzIGlzIGEgbmV3IHByb3BlcnR5LCBhbmQg
dGhlIGFycmF5IGlzIG5vdApAQCAtMjA3LDcgKzIwNyw3IEBAIHZvaWQgU3BhcnNlQXJyYXlWYWx1
ZU1hcDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIHRoaXNPYmplY3QsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yCiAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogdGhpc01hcCA9IGpzQ2FzdDxTcGFyc2VBcnJh
eVZhbHVlTWFwKj4odGhpc09iamVjdCk7CiAgICAgaXRlcmF0b3IgZW5kID0gdGhpc01hcC0+bV9t
YXAuZW5kKCk7CiAgICAgZm9yIChpdGVyYXRvciBpdCA9IHRoaXNNYXAtPm1fbWFwLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgdmlzaXRvci5hcHBlbmQoJml0LT5zZWNvbmQpOwor
ICAgICAgICB2aXNpdG9yLmFwcGVuZCgmaXQtPnZhbHVlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrR0NNYXAu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ01hcC5oCmluZGV4IDY5MjYx
NjVhNzg1YTc2N2RhMzc3YWNlYjI1Mzk3MGNlYzNiOWE5NDguLjUyZTVlMjk0NmZkMTAzYjdmZWFm
NjIxZjZmZDJhNTBkMDUzNDlkMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1dlYWtHQ01hcC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dl
YWtHQ01hcC5oCkBAIC02Myw3ICs2Myw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHR5cGVu
YW1lIE1hcFR5cGU6Oml0ZXJhdG9yIGVuZCA9IG1fbWFwLmVuZCgpOwogICAgICAgICBmb3IgKHR5
cGVuYW1lIE1hcFR5cGU6Oml0ZXJhdG9yIHB0ciA9IG1fbWFwLmJlZ2luKCk7IHB0ciAhPSBlbmQ7
ICsrcHRyKQotICAgICAgICAgICAgV2Vha1NldDo6ZGVhbGxvY2F0ZShwdHItPnNlY29uZCk7Cisg
ICAgICAgICAgICBXZWFrU2V0OjpkZWFsbG9jYXRlKHB0ci0+dmFsdWUpOwogICAgICAgICBtX21h
cC5jbGVhcigpOwogICAgIH0KIApAQCAtODAsOCArODAsOCBAQCBwdWJsaWM6CiAgICAgICAgIEFT
U0VSVF9VTlVTRUQoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5hcGlMb2NrKCkuY3VycmVudFRocmVh
ZElzSG9sZGluZ0xvY2soKSk7CiAgICAgICAgIHR5cGVuYW1lIE1hcFR5cGU6OkFkZFJlc3VsdCBy
ZXN1bHQgPSBtX21hcC5hZGQoa2V5LCAwKTsKICAgICAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRy
eSkKLSAgICAgICAgICAgIFdlYWtTZXQ6OmRlYWxsb2NhdGUocmVzdWx0Lml0ZXJhdG9yLT5zZWNv
bmQpOwotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IFdlYWtTZXQ6OmFsbG9jYXRl
KHZhbHVlLCB0aGlzLCBGaW5hbGl6ZXJDYWxsYmFjazo6ZmluYWxpemVyQ29udGV4dEZvcihrZXkp
KTsKKyAgICAgICAgICAgIFdlYWtTZXQ6OmRlYWxsb2NhdGUocmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZSk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBXZWFrU2V0OjphbGxvY2F0ZSh2
YWx1ZSwgdGhpcywgRmluYWxpemVyQ2FsbGJhY2s6OmZpbmFsaXplckNvbnRleHRGb3Ioa2V5KSk7
CiAgICAgfQogCiAgICAgdm9pZCByZW1vdmUoY29uc3QgS2V5VHlwZSYga2V5KQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1Byb2ZpbGVUcmVlTm9kZS5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rvb2xzL1Byb2ZpbGVUcmVlTm9kZS5oCmluZGV4IDdiNTFlZmI4NWRi
MzQ0MWEyMjI2M2I0MjQ5N2EzMTc1MmI1YjUyZmQuLjdiNWE5NWVjNDA0NGI2M2YyMTExMzYxMjJk
OTIzY2E4ODk0NjBhMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Q
cm9maWxlVHJlZU5vZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvUHJvZmls
ZVRyZWVOb2RlLmgKQEAgLTUxLDcgKzUxLDcgQEAgcHVibGljOgogICAgIAogICAgICAgICBQcm9m
aWxlVHJlZU5vZGUgbmV3RW50cnk7CiAgICAgICAgIE1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1f
Y2hpbGRyZW4tPmFkZChTdHJpbmcobmFtZSksIG5ld0VudHJ5KTsKLSAgICAgICAgUHJvZmlsZVRy
ZWVOb2RlKiBjaGlsZEluTWFwID0gJnJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICBQ
cm9maWxlVHJlZU5vZGUqIGNoaWxkSW5NYXAgPSAmcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAg
ICAgICAgKytjaGlsZEluTWFwLT5tX2NvdW50OwogICAgICAgICByZXR1cm4gY2hpbGRJbk1hcDsK
ICAgICB9CkBAIC03Miw3ICs3Miw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiAwOwog
ICAgICAgICB1aW50NjRfdCBjaGlsZENvdW50ID0gMDsKICAgICAgICAgZm9yIChNYXA6Oml0ZXJh
dG9yIGl0ID0gbV9jaGlsZHJlbi0+YmVnaW4oKTsgaXQgIT0gbV9jaGlsZHJlbi0+ZW5kKCk7ICsr
aXQpCi0gICAgICAgICAgICBjaGlsZENvdW50ICs9IGl0LT5zZWNvbmQuY291bnQoKTsKKyAgICAg
ICAgICAgIGNoaWxkQ291bnQgKz0gaXQtPnZhbHVlLmNvdW50KCk7CiAgICAgICAgIHJldHVybiBj
aGlsZENvdW50OwogICAgIH0KICAgICAKQEAgLTk3LDE5ICs5NywxOSBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGluZGVudDsgKytpKQogICAgICAgICAg
ICAgICAgIGRhdGFMb2coIiAgICAiKTsKICAgICAgICAgICAgIGRhdGFMb2coIiUgOGxsZDogJXMg
KCVsbGQgc3RhY2sgdG9wKVxuIiwKLSAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxsb25nIGxv
bmc+KGVudHJ5LT5zZWNvbmQuY291bnQoKSksCi0gICAgICAgICAgICAgICAgZW50cnktPmZpcnN0
LnV0ZjgoKS5kYXRhKCksCi0gICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihl
bnRyeS0+c2Vjb25kLmNvdW50KCkgLSBlbnRyeS0+c2Vjb25kLmNoaWxkQ291bnQoKSkpOworICAg
ICAgICAgICAgICAgIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oZW50cnktPnZhbHVlLmNvdW50KCkp
LAorICAgICAgICAgICAgICAgIGVudHJ5LT5rZXkudXRmOCgpLmRhdGEoKSwKKyAgICAgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KGVudHJ5LT52YWx1ZS5jb3VudCgpIC0gZW50cnkt
PnZhbHVlLmNoaWxkQ291bnQoKSkpOwogCiAgICAgICAgICAgICAvLyBSZWN1cnNpdmVseSBkdW1w
IHRoZSBjaGlsZCBub2Rlcy4KLSAgICAgICAgICAgIGVudHJ5LT5zZWNvbmQuZHVtcEludGVybmFs
KGluZGVudCArIDEpOworICAgICAgICAgICAgZW50cnktPnZhbHVlLmR1bXBJbnRlcm5hbChpbmRl
bnQgKyAxKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIHN0YXRpYyBpbnQgY29tcGFyZUVudHJp
ZXMoY29uc3Qgdm9pZCogYSwgY29uc3Qgdm9pZCogYikKICAgICB7Ci0gICAgICAgIHVpbnQ2NF90
IGRhID0gKCpzdGF0aWNfY2FzdDxNYXBFbnRyeSogY29uc3QgKj4oYSkpLT5zZWNvbmQuY291bnQo
KTsKLSAgICAgICAgdWludDY0X3QgZGIgPSAoKnN0YXRpY19jYXN0PE1hcEVudHJ5KiBjb25zdCAq
PihiKSktPnNlY29uZC5jb3VudCgpOworICAgICAgICB1aW50NjRfdCBkYSA9ICgqc3RhdGljX2Nh
c3Q8TWFwRW50cnkqIGNvbnN0ICo+KGEpKS0+dmFsdWUuY291bnQoKTsKKyAgICAgICAgdWludDY0
X3QgZGIgPSAoKnN0YXRpY19jYXN0PE1hcEVudHJ5KiBjb25zdCAqPihiKSktPnZhbHVlLmNvdW50
KCk7CiAgICAgICAgIHJldHVybiAoZGEgPCBkYikgLSAoZGEgPiBkYik7CiAgICAgfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoQ291bnRlZFNldC5oIGIvU291cmNlL1dURi93dGYv
SGFzaENvdW50ZWRTZXQuaAppbmRleCBlZjg5YmRiYzc1MjYxODVkZTAxNzUzZTAzZTlmNmIwYjc3
ZTNlMDFkLi5lZmY0YTI5M2U5YzczOWIxMmM0M2I2ODkxMjZkMGM4NDUwYmNkMDBhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoQ291bnRlZFNldC5oCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L0hhc2hDb3VudGVkU2V0LmgKQEAgLTE1NCw3ICsxNTQsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAg
ICBpbmxpbmUgdHlwZW5hbWUgSGFzaENvdW50ZWRTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRy
YWl0cz46OkFkZFJlc3VsdCBIYXNoQ291bnRlZFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJh
aXRzPjo6YWRkKGNvbnN0IFZhbHVlVHlwZSAmdmFsdWUpCiAgICAgewogICAgICAgICBBZGRSZXN1
bHQgcmVzdWx0ID0gbV9pbXBsLmFkZCh2YWx1ZSwgMCk7Ci0gICAgICAgICsrcmVzdWx0Lml0ZXJh
dG9yLT5zZWNvbmQ7CisgICAgICAgICsrcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCkBAIC0xNzAsMTEgKzE3MCwxMSBAQCBuYW1lc3Bh
Y2UgV1RGIHsKICAgICAgICAgaWYgKGl0ID09IGVuZCgpKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgICAgIHVuc2lnbmVkIG9sZFZhbCA9IGl0LT5zZWNvbmQ7CisgICAgICAgIHVu
c2lnbmVkIG9sZFZhbCA9IGl0LT52YWx1ZTsKICAgICAgICAgQVNTRVJUKG9sZFZhbCk7CiAgICAg
ICAgIHVuc2lnbmVkIG5ld1ZhbCA9IG9sZFZhbCAtIDE7CiAgICAgICAgIGlmIChuZXdWYWwpIHsK
LSAgICAgICAgICAgIGl0LT5zZWNvbmQgPSBuZXdWYWw7CisgICAgICAgICAgICBpdC0+dmFsdWUg
PSBuZXdWYWw7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIApAQCAtMjI2
LDcgKzIyNiw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBpdGVyYXRvciBpdCA9IGNvbGxl
Y3Rpb24uYmVnaW4oKTsKICAgICAgICAgaXRlcmF0b3IgZW5kID0gY29sbGVjdGlvbi5lbmQoKTsK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaXQgIT0gZW5kOyArK2l0LCArK2kpCi0gICAg
ICAgICAgICB2ZWN0b3JbaV0gPSAoKml0KS5maXJzdDsKKyAgICAgICAgICAgIHZlY3RvcltpXSA9
ICgqaXQpLmtleTsKICAgICB9CiAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvSGFzaEl0
ZXJhdG9ycy5oIGIvU291cmNlL1dURi93dGYvSGFzaEl0ZXJhdG9ycy5oCmluZGV4IDYzOWZmNzI1
MGExZWYwZmIzZjgyNGRjOTE2ODg0OTZiODliNjVlMTcuLjliZTRkZTMyM2M1NjU4YjMzZjk1YjJm
OTc3NmVjNWFlZTUyNzRiMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0hhc2hJdGVyYXRv
cnMuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoSXRlcmF0b3JzLmgKQEAgLTkxLDcgKzkxLDcg
QEAgbmFtZXNwYWNlIFdURiB7CiAgICAgcHVibGljOgogICAgICAgICBIYXNoVGFibGVDb25zdEtl
eXNJdGVyYXRvcihjb25zdCBDb25zdEl0ZXJhdG9yJiBpbXBsKSA6IG1faW1wbChpbXBsKSB7fQog
ICAgICAgICAKLSAgICAgICAgY29uc3QgS2V5VHlwZSogZ2V0KCkgY29uc3QgeyByZXR1cm4gJiht
X2ltcGwuZ2V0KCktPmZpcnN0KTsgfQorICAgICAgICBjb25zdCBLZXlUeXBlKiBnZXQoKSBjb25z
dCB7IHJldHVybiAmKG1faW1wbC5nZXQoKS0+a2V5KTsgfQogICAgICAgICBjb25zdCBLZXlUeXBl
JiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqZ2V0KCk7IH0KICAgICAgICAgY29uc3QgS2V5
VHlwZSogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIGdldCgpOyB9CiAKQEAgLTEwOCw3ICsx
MDgsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICBwdWJsaWM6CiAgICAgICAgIEhhc2hUYWJsZUNv
bnN0VmFsdWVzSXRlcmF0b3IoY29uc3QgQ29uc3RJdGVyYXRvciYgaW1wbCkgOiBtX2ltcGwoaW1w
bCkge30KICAgICAgICAgCi0gICAgICAgIGNvbnN0IE1hcHBlZFR5cGUqIGdldCgpIGNvbnN0IHsg
cmV0dXJuICYobV9pbXBsLmdldCgpLT5zZWNvbmQpOyB9CisgICAgICAgIGNvbnN0IE1hcHBlZFR5
cGUqIGdldCgpIGNvbnN0IHsgcmV0dXJuICYobV9pbXBsLmdldCgpLT52YWx1ZSk7IH0KICAgICAg
ICAgY29uc3QgTWFwcGVkVHlwZSYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKmdldCgpOyB9
CiAgICAgICAgIGNvbnN0IE1hcHBlZFR5cGUqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBn
ZXQoKTsgfQogCkBAIC0xMjYsNyArMTI2LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgcHVibGlj
OgogICAgICAgICBIYXNoVGFibGVLZXlzSXRlcmF0b3IoY29uc3QgSXRlcmF0b3ImIGltcGwpIDog
bV9pbXBsKGltcGwpIHt9CiAgICAgICAgIAotICAgICAgICBLZXlUeXBlKiBnZXQoKSBjb25zdCB7
IHJldHVybiAmKG1faW1wbC5nZXQoKS0+Zmlyc3QpOyB9CisgICAgICAgIEtleVR5cGUqIGdldCgp
IGNvbnN0IHsgcmV0dXJuICYobV9pbXBsLmdldCgpLT5rZXkpOyB9CiAgICAgICAgIEtleVR5cGUm
IG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICpnZXQoKTsgfQogICAgICAgICBLZXlUeXBlKiBv
cGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gZ2V0KCk7IH0KIApAQCAtMTQ5LDcgKzE0OSw3IEBA
IG5hbWVzcGFjZSBXVEYgewogICAgIHB1YmxpYzoKICAgICAgICAgSGFzaFRhYmxlVmFsdWVzSXRl
cmF0b3IoY29uc3QgSXRlcmF0b3ImIGltcGwpIDogbV9pbXBsKGltcGwpIHt9CiAgICAgICAgIAot
ICAgICAgICBNYXBwZWRUeXBlKiBnZXQoKSBjb25zdCB7IHJldHVybiAmKG1faW1wbC5nZXQoKS0+
c2Vjb25kKTsgfQorICAgICAgICBNYXBwZWRUeXBlKiBnZXQoKSBjb25zdCB7IHJldHVybiAmKG1f
aW1wbC5nZXQoKS0+dmFsdWUpOyB9CiAgICAgICAgIE1hcHBlZFR5cGUmIG9wZXJhdG9yKigpIGNv
bnN0IHsgcmV0dXJuICpnZXQoKTsgfQogICAgICAgICBNYXBwZWRUeXBlKiBvcGVyYXRvci0+KCkg
Y29uc3QgeyByZXR1cm4gZ2V0KCk7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvSGFz
aE1hcC5oIGIvU291cmNlL1dURi93dGYvSGFzaE1hcC5oCmluZGV4IDkwMTA0NzRjODI1NTYzZWY4
NDFiOTY4N2ZlZmY0OTRhYTY1NWI0ZTguLjEwZWU0MjVkYTk1OTZiYWFkZjM0ZTU3OGVmNWFiZTU3
MGY5YWUwZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0hhc2hNYXAuaAorKysgYi9Tb3Vy
Y2UvV1RGL3d0Zi9IYXNoTWFwLmgKQEAgLTM1LDcgKzM1LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAg
ICAgfTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBLZXlWYWx1ZVBhaXJLZXlF
eHRyYWN0b3IgewotICAgICAgICBzdGF0aWMgY29uc3QgdHlwZW5hbWUgVDo6S2V5VHlwZSYgZXh0
cmFjdChjb25zdCBUJiBwKSB7IHJldHVybiBwLmZpcnN0OyB9CisgICAgICAgIHN0YXRpYyBjb25z
dCB0eXBlbmFtZSBUOjpLZXlUeXBlJiBleHRyYWN0KGNvbnN0IFQmIHApIHsgcmV0dXJuIHAua2V5
OyB9CiAgICAgfTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFw
cGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnID0gdHlwZW5hbWUgRGVmYXVsdEhhc2g8S2V5QXJnPjo6
SGFzaCwKQEAgLTIxMSw3ICsyMTEsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaGFzSXNFbXB0eVZhbHVlRnVuY3Rpb24gPSB0cnVlOwogICAgICAgICBzdGF0
aWMgYm9vbCBpc0VtcHR5VmFsdWUoY29uc3QgdHlwZW5hbWUgS2V5VmFsdWVQYWlySGFzaFRyYWl0
czxLZXlUcmFpdHMsIE1hcHBlZFRyYWl0cz46OlRyYWl0VHlwZSYgdmFsdWUpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBpc0hhc2hUcmFpdHNFbXB0eVZhbHVlPEtleVRyYWl0cz4odmFs
dWUuZmlyc3QpOworICAgICAgICAgICAgcmV0dXJuIGlzSGFzaFRyYWl0c0VtcHR5VmFsdWU8S2V5
VHJhaXRzPih2YWx1ZS5rZXkpOwogICAgICAgICB9CiAgICAgfTsKIApAQCAtMjIxLDggKzIyMSw4
IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVPiBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBUJiBhLCBjb25zdCBVJiBiKSB7IHJldHVybiBI
YXNoRnVuY3Rpb25zOjplcXVhbChhLCBiKTsgfQogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPiBzdGF0aWMgdm9pZCB0cmFuc2xhdGUoVCYgbG9jYXRp
b24sIGNvbnN0IFUmIGtleSwgY29uc3QgViYgbWFwcGVkKQogICAgICAgICB7Ci0gICAgICAgICAg
ICBsb2NhdGlvbi5maXJzdCA9IGtleTsKLSAgICAgICAgICAgIFZhbHVlVHJhaXRzOjpWYWx1ZVRy
YWl0czo6c3RvcmUobWFwcGVkLCBsb2NhdGlvbi5zZWNvbmQpOworICAgICAgICAgICAgbG9jYXRp
b24ua2V5ID0ga2V5OworICAgICAgICAgICAgVmFsdWVUcmFpdHM6OlZhbHVlVHJhaXRzOjpzdG9y
ZShtYXBwZWQsIGxvY2F0aW9uLnZhbHVlKTsKICAgICAgICAgfQogICAgIH07CiAKQEAgLTIzMiw4
ICsyMzIsOCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVT4gc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgVCYgYSwgY29uc3QgVSYgYikgeyBy
ZXR1cm4gVHJhbnNsYXRvcjo6ZXF1YWwoYSwgYik7IH0KICAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4gc3RhdGljIHZvaWQgdHJhbnNsYXRlKFQmIGxv
Y2F0aW9uLCBjb25zdCBVJiBrZXksIGNvbnN0IFYmIG1hcHBlZCwgdW5zaWduZWQgaGFzaENvZGUp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIFRyYW5zbGF0b3I6OnRyYW5zbGF0ZShsb2NhdGlvbi5m
aXJzdCwga2V5LCBoYXNoQ29kZSk7Ci0gICAgICAgICAgICBWYWx1ZVRyYWl0czo6VmFsdWVUcmFp
dHM6OnN0b3JlKG1hcHBlZCwgbG9jYXRpb24uc2Vjb25kKTsKKyAgICAgICAgICAgIFRyYW5zbGF0
b3I6OnRyYW5zbGF0ZShsb2NhdGlvbi5rZXksIGtleSwgaGFzaENvZGUpOworICAgICAgICAgICAg
VmFsdWVUcmFpdHM6OlZhbHVlVHJhaXRzOjpzdG9yZShtYXBwZWQsIGxvY2F0aW9uLnZhbHVlKTsK
ICAgICAgICAgfQogICAgIH07CiAKQEAgLTM0MSw3ICszNDEsNyBAQCBuYW1lc3BhY2UgV1RGIHsK
ICAgICAgICAgQWRkUmVzdWx0IHJlc3VsdCA9IGlubGluZUFkZChrZXksIG1hcHBlZCk7CiAgICAg
ICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpIHsKICAgICAgICAgICAgIC8vIFRoZSBpbmxpbmVB
ZGQgY2FsbCBhYm92ZSBmb3VuZCBhbiBleGlzdGluZyBoYXNoIHRhYmxlIGVudHJ5OyB3ZSBuZWVk
IHRvIHNldCB0aGUgbWFwcGVkIHZhbHVlLgotICAgICAgICAgICAgTWFwcGVkVHJhaXRzOjpzdG9y
ZShtYXBwZWQsIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKKyAgICAgICAgICAgIE1hcHBlZFRy
YWl0czo6c3RvcmUobWFwcGVkLCByZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKICAgICAgICAgfQog
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTM2OCw3ICszNjgsNyBAQCBuYW1lc3Bh
Y2UgV1RGIHsKICAgICAgICAgVmFsdWVUeXBlKiBlbnRyeSA9IGNvbnN0X2Nhc3Q8SGFzaFRhYmxl
VHlwZSY+KG1faW1wbCkubG9va3VwKGtleSk7CiAgICAgICAgIGlmICghZW50cnkpCiAgICAgICAg
ICAgICByZXR1cm4gTWFwcGVkVHJhaXRzOjpwZWVrKE1hcHBlZFRyYWl0czo6ZW1wdHlWYWx1ZSgp
KTsKLSAgICAgICAgcmV0dXJuIE1hcHBlZFRyYWl0czo6cGVlayhlbnRyeS0+c2Vjb25kKTsKKyAg
ICAgICAgcmV0dXJuIE1hcHBlZFRyYWl0czo6cGVlayhlbnRyeS0+dmFsdWUpOwogICAgIH0KIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1l
IFcsIHR5cGVuYW1lIFg+CkBAIC0zOTksNyArMzk5LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAg
ICAgIGl0ZXJhdG9yIGl0ID0gZmluZChrZXkpOwogICAgICAgICBpZiAoaXQgPT0gZW5kKCkpCiAg
ICAgICAgICAgICByZXR1cm4gTWFwcGVkVHJhaXRzOjpwYXNzT3V0KE1hcHBlZFRyYWl0czo6ZW1w
dHlWYWx1ZSgpKTsKLSAgICAgICAgTWFwcGVkUGFzc091dFR5cGUgcmVzdWx0ID0gTWFwcGVkVHJh
aXRzOjpwYXNzT3V0KGl0LT5zZWNvbmQpOworICAgICAgICBNYXBwZWRQYXNzT3V0VHlwZSByZXN1
bHQgPSBNYXBwZWRUcmFpdHM6OnBhc3NPdXQoaXQtPnZhbHVlKTsKICAgICAgICAgcmVtb3ZlKGl0
KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CkBAIC00MjEsOCArNDIxLDggQEAgbmFt
ZXNwYWNlIFdURiB7CiAgICAgICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCA9IGEuZW5kKCk7CiAgICAg
ICAgIGNvbnN0X2l0ZXJhdG9yIG5vdEZvdW5kID0gYi5lbmQoKTsKICAgICAgICAgZm9yIChjb25z
dF9pdGVyYXRvciBpdCA9IGEuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAg
ICBjb25zdF9pdGVyYXRvciBiUG9zID0gYi5maW5kKGl0LT5maXJzdCk7Ci0gICAgICAgICAgICBp
ZiAoYlBvcyA9PSBub3RGb3VuZCB8fCBpdC0+c2Vjb25kICE9IGJQb3MtPnNlY29uZCkKKyAgICAg
ICAgICAgIGNvbnN0X2l0ZXJhdG9yIGJQb3MgPSBiLmZpbmQoaXQtPmtleSk7CisgICAgICAgICAg
ICBpZiAoYlBvcyA9PSBub3RGb3VuZCB8fCBpdC0+dmFsdWUgIT0gYlBvcy0+dmFsdWUpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKQEAgLTQzNSwzNCArNDM1LDIy
IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICByZXR1cm4gIShhID09IGIpOwogICAgIH0KIAot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZVR5cGU+Ci0gICAgdm9pZCBkZWxldGVBbGxQ
YWlyU2Vjb25kcyhIYXNoVGFibGVUeXBlJiBjb2xsZWN0aW9uKQotICAgIHsKLSAgICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBIYXNoVGFibGVUeXBlOjpjb25zdF9pdGVyYXRvciBpdGVyYXRvcjsKLSAg
ICAgICAgaXRlcmF0b3IgZW5kID0gY29sbGVjdGlvbi5lbmQoKTsKLSAgICAgICAgZm9yIChpdGVy
YXRvciBpdCA9IGNvbGxlY3Rpb24uYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAg
ICAgZGVsZXRlIGl0LT5zZWNvbmQ7Ci0gICAgfQotCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KICAgICBpbmxp
bmUgdm9pZCBkZWxldGVBbGxWYWx1ZXMoY29uc3QgSGFzaE1hcDxULCBVLCBWLCBXLCBYPiYgY29s
bGVjdGlvbikKICAgICB7Ci0gICAgICAgIGRlbGV0ZUFsbFBhaXJTZWNvbmRzKGNvbGxlY3Rpb24p
OwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZVR5cGU+Ci0gICAgdm9p
ZCBkZWxldGVBbGxQYWlyRmlyc3RzKEhhc2hUYWJsZVR5cGUmIGNvbGxlY3Rpb24pCi0gICAgewot
ICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIEhhc2hUYWJsZVR5cGU6OmNvbnN0X2l0ZXJhdG9yIGl0
ZXJhdG9yOworICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIEhhc2hNYXA8VCwgVSwgViwgVywgWD46
OmNvbnN0X2l0ZXJhdG9yIGl0ZXJhdG9yOwogICAgICAgICBpdGVyYXRvciBlbmQgPSBjb2xsZWN0
aW9uLmVuZCgpOwogICAgICAgICBmb3IgKGl0ZXJhdG9yIGl0ID0gY29sbGVjdGlvbi5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBkZWxldGUgaXQtPmZpcnN0OworICAgICAg
ICAgICAgZGVsZXRlIGl0LT52YWx1ZTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgogICAgIGlu
bGluZSB2b2lkIGRlbGV0ZUFsbEtleXMoY29uc3QgSGFzaE1hcDxULCBVLCBWLCBXLCBYPiYgY29s
bGVjdGlvbikKICAgICB7Ci0gICAgICAgIGRlbGV0ZUFsbFBhaXJGaXJzdHMoY29sbGVjdGlvbik7
CisgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6Y29uc3Rf
aXRlcmF0b3IgaXRlcmF0b3I7CisgICAgICAgIGl0ZXJhdG9yIGVuZCA9IGNvbGxlY3Rpb24uZW5k
KCk7CisgICAgICAgIGZvciAoaXRlcmF0b3IgaXQgPSBjb2xsZWN0aW9uLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkKKyAgICAgICAgICAgIGRlbGV0ZSBpdC0+a2V5OwogICAgIH0KICAgICAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBX
LCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvSGFz
aFRhYmxlLmggYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaAppbmRleCAxY2UzYzVjZjY4OGVm
MGE4MWUxMDYxYmM2Y2UyNjIwYmUzZDk4MDBlLi4xNmZkZDllODFkMjgzYjY5ZTYxZDQ2YmE2Zjk1
ZmQxMmUyNDY5YzY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaApAQCAtMjg2LDggKzI4Niw4IEBAIG5hbWVzcGFj
ZSBXVEYgewogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIHZv
aWQgaGFzaFRhYmxlU3dhcChLZXlWYWx1ZVBhaXI8VCwgVT4mIGEsIEtleVZhbHVlUGFpcjxULCBV
PiYgYikKICAgICB7Ci0gICAgICAgIHN3YXAoYS5maXJzdCwgYi5maXJzdCk7Ci0gICAgICAgIHN3
YXAoYS5zZWNvbmQsIGIuc2Vjb25kKTsKKyAgICAgICAgc3dhcChhLmtleSwgYi5rZXkpOworICAg
ICAgICBzd2FwKGEudmFsdWUsIGIudmFsdWUpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIGJvb2wgdXNlU3dhcD4gc3RydWN0IE1vdmVyOwpAQCAtMTI0Niw3ICsxMjQ2LDcgQEAg
bmFtZXNwYWNlIFdURiB7CiAgICAgICAgICAgICBBU1NFUlQoZW50cnkgPT0gaXQubV9wb3NpdGlv
bik7CiAgICAgICAgICAgICArK2NvdW50OwogCi0gICAgICAgICAgICBWYWx1ZUNoZWNrPEtleT46
OmNoZWNrQ29uc2lzdGVuY3koaXQtPmZpcnN0KTsKKyAgICAgICAgICAgIFZhbHVlQ2hlY2s8S2V5
Pjo6Y2hlY2tDb25zaXN0ZW5jeShpdC0+a2V5KTsKICAgICAgICAgfQogCiAgICAgICAgIEFTU0VS
VChjb3VudCA9PSBtX2tleUNvdW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0hhc2hU
cmFpdHMuaCBiL1NvdXJjZS9XVEYvd3RmL0hhc2hUcmFpdHMuaAppbmRleCA0MzA1NDMwYTE3N2E0
NGJjYzQ5ZDhmZjg2NmY4MTc1ODMxOWQ1M2RhLi4xMjc5ODc2NGU4MzRkMDRlMDE3Nzc1YjExZDc4
NDcwNzUwZmI3ZjU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoVHJhaXRzLmgKKysr
IGIvU291cmNlL1dURi93dGYvSGFzaFRyYWl0cy5oCkBAIC0xNjMsNiArMTYzLDkgQEAgbmFtZXNw
YWNlIFdURiB7CiAgICAgICAgIHJldHVybiBIYXNoVHJhaXRzRW1wdHlWYWx1ZUNoZWNrZXI8VHJh
aXRzLCBUcmFpdHM6Omhhc0lzRW1wdHlWYWx1ZUZ1bmN0aW9uPjo6aXNFbXB0eVZhbHVlKHZhbHVl
KTsKICAgICB9CiAKKy8vIFdvcmthcm91bmQgZnJvbSBDaHJvbWl1bS4gU2VlIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Mjc4NC4KKyNkZWZpbmUgV1RGX05FV19IQVNI
TUFQX0lURVJBVE9SU19JTlRFUkZBQ0UgMQorCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRmlyc3RU
cmFpdHNBcmcsIHR5cGVuYW1lIFNlY29uZFRyYWl0c0FyZz4KICAgICBzdHJ1Y3QgUGFpckhhc2hU
cmFpdHMgOiBHZW5lcmljSGFzaFRyYWl0czxzdGQ6OnBhaXI8dHlwZW5hbWUgRmlyc3RUcmFpdHNB
cmc6OlRyYWl0VHlwZSwgdHlwZW5hbWUgU2Vjb25kVHJhaXRzQXJnOjpUcmFpdFR5cGU+ID4gewog
ICAgICAgICB0eXBlZGVmIEZpcnN0VHJhaXRzQXJnIEZpcnN0VHJhaXRzOwpAQCAtMTkzLDIxICsx
OTYsMjAgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIH0KIAogICAgICAgICBLZXlWYWx1ZVBh
aXIoY29uc3QgS2V5VHlwZUFyZyYga2V5LCBjb25zdCBWYWx1ZVR5cGVBcmcmIHZhbHVlKQotICAg
ICAgICAgICAgOiBmaXJzdChrZXkpCi0gICAgICAgICAgICAsIHNlY29uZCh2YWx1ZSkKKyAgICAg
ICAgICAgIDoga2V5KGtleSkKKyAgICAgICAgICAgICwgdmFsdWUodmFsdWUpCiAgICAgICAgIHsK
ICAgICAgICAgfQogCiAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPdGhlcktleVR5cGUsIHR5
cGVuYW1lIE90aGVyVmFsdWVUeXBlPgogICAgICAgICBLZXlWYWx1ZVBhaXIoY29uc3QgS2V5VmFs
dWVQYWlyPE90aGVyS2V5VHlwZSwgT3RoZXJWYWx1ZVR5cGU+JiBvdGhlcikKLSAgICAgICAgICAg
IDogZmlyc3Qob3RoZXIuZmlyc3QpCi0gICAgICAgICAgICAsIHNlY29uZChvdGhlci5zZWNvbmQp
CisgICAgICAgICAgICA6IGtleShvdGhlci5rZXkpCisgICAgICAgICAgICAsIHZhbHVlKG90aGVy
LnZhbHVlKQogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBUT0RPOiBSZW5hbWUg
dGhlc2UgdG8ga2V5IGFuZCB2YWx1ZS4gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD04Mjc4NC4KLSAgICAgICAgS2V5VHlwZUFyZyBmaXJzdDsKLSAgICAgICAgVmFs
dWVUeXBlQXJnIHNlY29uZDsKKyAgICAgICAgS2V5VHlwZUFyZyBrZXk7CisgICAgICAgIFZhbHVl
VHlwZUFyZyB2YWx1ZTsKICAgICB9OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5VHJhaXRz
QXJnLCB0eXBlbmFtZSBWYWx1ZVRyYWl0c0FyZz4KQEAgLTIyNCw4ICsyMjYsOCBAQCBuYW1lc3Bh
Y2UgV1RGIHsKIAogICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbmltdW1UYWJsZVNpemUgPSBL
ZXlUcmFpdHM6Om1pbmltdW1UYWJsZVNpemU7CiAKLSAgICAgICAgc3RhdGljIHZvaWQgY29uc3Ry
dWN0RGVsZXRlZFZhbHVlKFRyYWl0VHlwZSYgc2xvdCkgeyBLZXlUcmFpdHM6OmNvbnN0cnVjdERl
bGV0ZWRWYWx1ZShzbG90LmZpcnN0KTsgfQotICAgICAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRW
YWx1ZShjb25zdCBUcmFpdFR5cGUmIHZhbHVlKSB7IHJldHVybiBLZXlUcmFpdHM6OmlzRGVsZXRl
ZFZhbHVlKHZhbHVlLmZpcnN0KTsgfQorICAgICAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxl
dGVkVmFsdWUoVHJhaXRUeXBlJiBzbG90KSB7IEtleVRyYWl0czo6Y29uc3RydWN0RGVsZXRlZFZh
bHVlKHNsb3Qua2V5KTsgfQorICAgICAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShjb25z
dCBUcmFpdFR5cGUmIHZhbHVlKSB7IHJldHVybiBLZXlUcmFpdHM6OmlzRGVsZXRlZFZhbHVlKHZh
bHVlLmtleSk7IH0KICAgICB9OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFt
ZSBWYWx1ZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3IuY3BwIGIv
U291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvci5jcHAKaW5kZXggOWVmY2ZmMmViMTNmNzJjY2I1
OTc3NTFjODQzYmI0Mjk1MWZjNzRhMy4uNzNiMzZhYTQyMWY4YTk1NTA3YWFkOTZhM2E0YmFmODJh
ZTExZDUzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvci5jcHAKKysr
IGIvU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvci5jcHAKQEAgLTMwOCw5ICszMDgsOSBAQCB2
b2lkIE1ldGFBbGxvY2F0b3I6OmFkZEZyZWVTcGFjZSh2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJ
bkJ5dGVzKQogICAgICAgICAvLyBXZSBoYXZlIHNvbWV0aGluZyB3ZSBjYW4gY29hbGVzY2Ugd2l0
aCBvbiB0aGUgbGVmdC4gUmVtb3ZlIGl0IGZyb20gdGhlIHRyZWUsIGFuZAogICAgICAgICAvLyBy
ZW1vdmUgaXRzIGVuZCBmcm9tIHRoZSBlbmQgYWRkcmVzcyBtYXAuCiAgICAgICAgIAotICAgICAg
ICBBU1NFUlQocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRy
X3Q+KGxlZnROZWlnaGJvci0+c2Vjb25kLT5tX3N0YXJ0KSArIGxlZnROZWlnaGJvci0+c2Vjb25k
LT5tX3NpemVJbkJ5dGVzKSA9PSBsZWZ0TmVpZ2hib3ItPmZpcnN0KTsKKyAgICAgICAgQVNTRVJU
KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihsZWZ0
TmVpZ2hib3ItPnZhbHVlLT5tX3N0YXJ0KSArIGxlZnROZWlnaGJvci0+dmFsdWUtPm1fc2l6ZUlu
Qnl0ZXMpID09IGxlZnROZWlnaGJvci0+a2V5KTsKICAgICAgICAgCi0gICAgICAgIEZyZWVTcGFj
ZU5vZGUqIGxlZnROb2RlID0gbGVmdE5laWdoYm9yLT5zZWNvbmQ7CisgICAgICAgIEZyZWVTcGFj
ZU5vZGUqIGxlZnROb2RlID0gbGVmdE5laWdoYm9yLT52YWx1ZTsKICAgICAgICAgCiAgICAgICAg
IHZvaWQqIGxlZnRTdGFydCA9IGxlZnROb2RlLT5tX3N0YXJ0OwogICAgICAgICBzaXplX3QgbGVm
dFNpemUgPSBsZWZ0Tm9kZS0+bV9zaXplSW5CeXRlczsKQEAgLTMyNiwxMCArMzI2LDEwIEBAIHZv
aWQgTWV0YUFsbG9jYXRvcjo6YWRkRnJlZVNwYWNlKHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUlu
Qnl0ZXMpCiAgICAgICAgICAgICAvLyBGcmVlaW5nIHNvbWV0aGluZyBpbiB0aGUgbWlkZGxlIG9m
IGZyZWUgYmxvY2tzLiBDb2FsZXNjZSBib3RoIGxlZnQgYW5kCiAgICAgICAgICAgICAvLyByaWdo
dCwgd2hpbHN0IHJlbW92aW5nIHRoZSByaWdodCBuZWlnaGJvciBmcm9tIHRoZSBtYXBzLgogICAg
ICAgICAgICAgCi0gICAgICAgICAgICBBU1NFUlQocmlnaHROZWlnaGJvci0+c2Vjb25kLT5tX3N0
YXJ0ID09IHJpZ2h0TmVpZ2hib3ItPmZpcnN0KTsKKyAgICAgICAgICAgIEFTU0VSVChyaWdodE5l
aWdoYm9yLT52YWx1ZS0+bV9zdGFydCA9PSByaWdodE5laWdoYm9yLT5rZXkpOwogICAgICAgICAg
ICAgCi0gICAgICAgICAgICBGcmVlU3BhY2VOb2RlKiByaWdodE5vZGUgPSByaWdodE5laWdoYm9y
LT5zZWNvbmQ7Ci0gICAgICAgICAgICB2b2lkKiByaWdodFN0YXJ0ID0gcmlnaHROZWlnaGJvci0+
Zmlyc3Q7CisgICAgICAgICAgICBGcmVlU3BhY2VOb2RlKiByaWdodE5vZGUgPSByaWdodE5laWdo
Ym9yLT52YWx1ZTsKKyAgICAgICAgICAgIHZvaWQqIHJpZ2h0U3RhcnQgPSByaWdodE5laWdoYm9y
LT5rZXk7CiAgICAgICAgICAgICBzaXplX3QgcmlnaHRTaXplID0gcmlnaHROb2RlLT5tX3NpemVJ
bkJ5dGVzOwogICAgICAgICAgICAgdm9pZCogcmlnaHRFbmQgPSByZWludGVycHJldF9jYXN0PHZv
aWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocmlnaHRTdGFydCkgKyByaWdodFNpemUp
OwogICAgICAgICAgICAgCkBAIC0zNTYsOCArMzU2LDggQEAgdm9pZCBNZXRhQWxsb2NhdG9yOjph
ZGRGcmVlU3BhY2Uodm9pZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRlcykKICAgICAgICAgLy8g
Q2Fubm90IGNvYWxlc2NlIHdpdGggbGVmdDsgdHJ5IHRvIHNlZSBpZiB3ZSBjYW4gY29hbGVzY2Ug
d2l0aCByaWdodC4KICAgICAgICAgCiAgICAgICAgIGlmIChyaWdodE5laWdoYm9yICE9IG1fZnJl
ZVNwYWNlU3RhcnRBZGRyZXNzTWFwLmVuZCgpKSB7Ci0gICAgICAgICAgICBGcmVlU3BhY2VOb2Rl
KiByaWdodE5vZGUgPSByaWdodE5laWdoYm9yLT5zZWNvbmQ7Ci0gICAgICAgICAgICB2b2lkKiBy
aWdodFN0YXJ0ID0gcmlnaHROZWlnaGJvci0+Zmlyc3Q7CisgICAgICAgICAgICBGcmVlU3BhY2VO
b2RlKiByaWdodE5vZGUgPSByaWdodE5laWdoYm9yLT52YWx1ZTsKKyAgICAgICAgICAgIHZvaWQq
IHJpZ2h0U3RhcnQgPSByaWdodE5laWdoYm9yLT5rZXk7CiAgICAgICAgICAgICBzaXplX3Qgcmln
aHRTaXplID0gcmlnaHROb2RlLT5tX3NpemVJbkJ5dGVzOwogICAgICAgICAgICAgdm9pZCogcmln
aHRFbmQgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJf
dD4ocmlnaHRTdGFydCkgKyByaWdodFNpemUpOwogICAgICAgICAgICAgCkBAIC00MDMsNyArNDAz
LDcgQEAgdm9pZCBNZXRhQWxsb2NhdG9yOjppbmNyZW1lbnRQYWdlT2NjdXBhbmN5KHZvaWQqIGFk
ZHJlc3MsIHNpemVfdCBzaXplSW5CeXRlcykKICAgICAgICAgICAgIG1fYnl0ZXNDb21taXR0ZWQg
Kz0gbV9wYWdlU2l6ZTsKICAgICAgICAgICAgIG5vdGlmeU5lZWRQYWdlKHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KHBhZ2UgPDwgbV9sb2dQYWdlU2l6ZSkpOwogICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgIGl0ZXItPnNlY29uZCsrOworICAgICAgICAgICAgaXRlci0+dmFsdWUrKzsKICAgICB9
CiB9CiAKQEAgLTQxNSw3ICs0MTUsNyBAQCB2b2lkIE1ldGFBbGxvY2F0b3I6OmRlY3JlbWVudFBh
Z2VPY2N1cGFuY3kodm9pZCogYWRkcmVzcywgc2l6ZV90IHNpemVJbkJ5dGVzKQogICAgIGZvciAo
dWludHB0cl90IHBhZ2UgPSBmaXJzdFBhZ2U7IHBhZ2UgPD0gbGFzdFBhZ2U7ICsrcGFnZSkgewog
ICAgICAgICBIYXNoTWFwPHVpbnRwdHJfdCwgc2l6ZV90Pjo6aXRlcmF0b3IgaXRlciA9IG1fcGFn
ZU9jY3VwYW5jeU1hcC5maW5kKHBhZ2UpOwogICAgICAgICBBU1NFUlQoaXRlciAhPSBtX3BhZ2VP
Y2N1cGFuY3lNYXAuZW5kKCkpOwotICAgICAgICBpZiAoIS0tKGl0ZXItPnNlY29uZCkpIHsKKyAg
ICAgICAgaWYgKCEtLShpdGVyLT52YWx1ZSkpIHsKICAgICAgICAgICAgIG1fcGFnZU9jY3VwYW5j
eU1hcC5yZW1vdmUoaXRlcik7CiAgICAgICAgICAgICBtX2J5dGVzQ29tbWl0dGVkIC09IG1fcGFn
ZVNpemU7CiAgICAgICAgICAgICBub3RpZnlQYWdlSXNGcmVlKHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KHBhZ2UgPDwgbV9sb2dQYWdlU2l6ZSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
UmVmQ291bnRlZExlYWtDb3VudGVyLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1JlZkNvdW50ZWRMZWFr
Q291bnRlci5jcHAKaW5kZXggNjcwZjJhMGNlYzU5OWM2ZDRmMzE2NDRlYmViNTg3NDE1ZWY0MzIx
YS4uNGEwNDUyODI0ODlmZTk1YTE3ZTIzOTE5NzczZDM3Y2IyNDQxMGJlNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi93dGYvUmVmQ291bnRlZExlYWtDb3VudGVyLmNwcAorKysgYi9Tb3VyY2UvV1RG
L3d0Zi9SZWZDb3VudGVkTGVha0NvdW50ZXIuY3BwCkBAIC03MSw3ICs3MSw3IEBAIFJlZkNvdW50
ZWRMZWFrQ291bnRlcjo6flJlZkNvdW50ZWRMZWFrQ291bnRlcigpCiAgICAgICAgICAgICBMT0co
UmVmQ291bnRlZExlYWtzLCAiTEVBSzogJXUgJXMiLCBtX2NvdW50LCBtX2Rlc2NyaXB0aW9uKTsK
ICAgICAgICAgZWxzZSBpZiAoIWxvZ2dlZFN1cHByZXNzaW9uUmVhc29uKSB7CiAgICAgICAgICAg
ICAvLyBUaGlzIGxvZ3Mgb25seSBvbmUgcmVhc29uLiBMYXRlciB3ZSBjb3VsZCBjaGFuZ2UgaXQg
c28gd2UgbG9nIGFsbCB0aGUgcmVhc29ucy4KLSAgICAgICAgICAgIExPRyhSZWZDb3VudGVkTGVh
a3MsICJObyBsZWFrIGNoZWNraW5nIGRvbmU6ICVzIiwgbGVha01lc3NhZ2VTdXBwcmVzc2lvblJl
YXNvbnMtPmJlZ2luKCktPmZpcnN0KTsKKyAgICAgICAgICAgIExPRyhSZWZDb3VudGVkTGVha3Ms
ICJObyBsZWFrIGNoZWNraW5nIGRvbmU6ICVzIiwgbGVha01lc3NhZ2VTdXBwcmVzc2lvblJlYXNv
bnMtPmJlZ2luKCktPmtleSk7CiAgICAgICAgICAgICBsb2dnZWRTdXBwcmVzc2lvblJlYXNvbiA9
IHRydWU7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9SZWZQ
dHJIYXNoTWFwLmggYi9Tb3VyY2UvV1RGL3d0Zi9SZWZQdHJIYXNoTWFwLmgKaW5kZXggNWZhZTkw
ZThjZDQ3MTEyOWU4OWRjYzhlN2FlNjYzOGFkYTE1NGQzMS4uOTU0MTgzN2UyYTZmMjliOWYwNmMz
Yzk1NjJhMTMzNDZiMDFkNGNlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUmVmUHRySGFz
aE1hcC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1JlZlB0ckhhc2hNYXAuaApAQCAtMjE2LDcgKzIx
Niw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBBZGRSZXN1bHQgcmVzdWx0ID0gaW5saW5l
QWRkKGtleSwgbWFwcGVkKTsKICAgICAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkgewogICAg
ICAgICAgICAgLy8gVGhlIGlubGluZUFkZCBjYWxsIGFib3ZlIGZvdW5kIGFuIGV4aXN0aW5nIGhh
c2ggdGFibGUgZW50cnk7IHdlIG5lZWQgdG8gc2V0IHRoZSBtYXBwZWQgdmFsdWUuCi0gICAgICAg
ICAgICBNYXBwZWRUcmFpdHM6OnN0b3JlKG1hcHBlZCwgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQp
OworICAgICAgICAgICAgTWFwcGVkVHJhaXRzOjpzdG9yZShtYXBwZWQsIHJlc3VsdC5pdGVyYXRv
ci0+dmFsdWUpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpAQCAt
MjI4LDcgKzIyOCw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBBZGRSZXN1bHQgcmVzdWx0
ID0gaW5saW5lQWRkKGtleSwgbWFwcGVkKTsKICAgICAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRy
eSkgewogICAgICAgICAgICAgLy8gVGhlIGlubGluZUFkZCBjYWxsIGFib3ZlIGZvdW5kIGFuIGV4
aXN0aW5nIGhhc2ggdGFibGUgZW50cnk7IHdlIG5lZWQgdG8gc2V0IHRoZSBtYXBwZWQgdmFsdWUu
Ci0gICAgICAgICAgICBNYXBwZWRUcmFpdHM6OnN0b3JlKG1hcHBlZCwgcmVzdWx0Lml0ZXJhdG9y
LT5zZWNvbmQpOworICAgICAgICAgICAgTWFwcGVkVHJhaXRzOjpzdG9yZShtYXBwZWQsIHJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICAgfQpAQCAtMjU0LDcgKzI1NCw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBWYWx1ZVR5
cGUqIGVudHJ5ID0gY29uc3RfY2FzdDxIYXNoVGFibGVUeXBlJj4obV9pbXBsKS5sb29rdXAoa2V5
KTsKICAgICAgICAgaWYgKCFlbnRyeSkKICAgICAgICAgICAgIHJldHVybiBNYXBwZWRUcmFpdHM6
OnBlZWsoTWFwcGVkVHJhaXRzOjplbXB0eVZhbHVlKCkpOwotICAgICAgICByZXR1cm4gTWFwcGVk
VHJhaXRzOjpwZWVrKGVudHJ5LT5zZWNvbmQpOworICAgICAgICByZXR1cm4gTWFwcGVkVHJhaXRz
OjpwZWVrKGVudHJ5LT52YWx1ZSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgTWFwcGVkVHJhaXRz
PgpAQCAtMjY0LDcgKzI2NCw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBWYWx1ZVR5cGUq
IGVudHJ5ID0gY29uc3RfY2FzdDxIYXNoVGFibGVUeXBlJj4obV9pbXBsKS50ZW1wbGF0ZSBsb29r
dXA8VHJhbnNsYXRvcj4oa2V5KTsKICAgICAgICAgaWYgKCFlbnRyeSkKICAgICAgICAgICAgIHJl
dHVybiBNYXBwZWRUcmFpdHM6OnBlZWsoTWFwcGVkVHJhaXRzOjplbXB0eVZhbHVlKCkpOwotICAg
ICAgICByZXR1cm4gTWFwcGVkVHJhaXRzOjpwZWVrKGVudHJ5LT5zZWNvbmQpOworICAgICAgICBy
ZXR1cm4gTWFwcGVkVHJhaXRzOjpwZWVrKGVudHJ5LT52YWx1ZSk7CiAgICAgfQogCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlw
ZW5hbWUgTWFwcGVkVHJhaXRzPgpAQCAtMzA4LDcgKzMwOCw3IEBAIG5hbWVzcGFjZSBXVEYgewog
ICAgICAgICBpdGVyYXRvciBpdCA9IGZpbmQoa2V5KTsKICAgICAgICAgaWYgKGl0ID09IGVuZCgp
KQogICAgICAgICAgICAgcmV0dXJuIE1hcHBlZFRyYWl0czo6cGFzc091dChNYXBwZWRUcmFpdHM6
OmVtcHR5VmFsdWUoKSk7Ci0gICAgICAgIE1hcHBlZFBhc3NPdXRUeXBlIHJlc3VsdCA9IE1hcHBl
ZFRyYWl0czo6cGFzc091dChpdC0+c2Vjb25kKTsKKyAgICAgICAgTWFwcGVkUGFzc091dFR5cGUg
cmVzdWx0ID0gTWFwcGVkVHJhaXRzOjpwYXNzT3V0KGl0LT52YWx1ZSk7CiAgICAgICAgIHJlbW92
ZShpdCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpAQCAtMzIwLDcgKzMyMCw3IEBA
IG5hbWVzcGFjZSBXVEYgewogICAgICAgICBpdGVyYXRvciBpdCA9IGZpbmQoa2V5KTsKICAgICAg
ICAgaWYgKGl0ID09IGVuZCgpKQogICAgICAgICAgICAgcmV0dXJuIE1hcHBlZFRyYWl0czo6cGFz
c091dChNYXBwZWRUcmFpdHM6OmVtcHR5VmFsdWUoKSk7Ci0gICAgICAgIE1hcHBlZFBhc3NPdXRU
eXBlIHJlc3VsdCA9IE1hcHBlZFRyYWl0czo6cGFzc091dChpdC0+c2Vjb25kKTsKKyAgICAgICAg
TWFwcGVkUGFzc091dFR5cGUgcmVzdWx0ID0gTWFwcGVkVHJhaXRzOjpwYXNzT3V0KGl0LT52YWx1
ZSk7CiAgICAgICAgIHJlbW92ZShpdCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvU3BlY3RydW0uaCBiL1NvdXJjZS9XVEYvd3RmL1Nw
ZWN0cnVtLmgKaW5kZXggNWU3YTQ4NGNkODc2NmJjYWYyMmNhNGM5M2RkY2U5NzBkZDJiYTIxMy4u
M2U2ZmE0YTYzM2ZhZDQyZGViNGRjNDgzMzI1OTIzNDFlODRiM2EwMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi93dGYvU3BlY3RydW0uaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9TcGVjdHJ1bS5oCkBA
IC00NCw3ICs0NCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHR5cGVuYW1lIEhhc2hNYXA8
VCwgdW5zaWduZWQgbG9uZz46OkFkZFJlc3VsdCByZXN1bHQgPSBtX21hcC5hZGQoa2V5LCBjb3Vu
dCk7CiAgICAgICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgICAgICByZXN1bHQu
aXRlcmF0b3ItPnNlY29uZCArPSBjb3VudDsKKyAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+
dmFsdWUgKz0gY291bnQ7CiAgICAgfQogICAgIAogICAgIHVuc2lnbmVkIGxvbmcgZ2V0KGNvbnN0
IFQmIGtleSkgY29uc3QKQEAgLTUyLDcgKzUyLDcgQEAgcHVibGljOgogICAgICAgICBjb25zdF9p
dGVyYXRvciBpdGVyID0gbV9tYXAuZmluZChrZXkpOwogICAgICAgICBpZiAoaXRlciA9PSBtX21h
cC5lbmQoKSkKICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4gaXRlci0+c2Vj
b25kOworICAgICAgICByZXR1cm4gaXRlci0+dmFsdWU7CiAgICAgfQogICAgIAogICAgIGl0ZXJh
dG9yIGJlZ2luKCkgeyByZXR1cm4gbV9tYXAuYmVnaW4oKTsgfQpAQCAtODgsNyArODgsNyBAQCBw
dWJsaWM6CiAgICAgewogICAgICAgICBWZWN0b3I8S2V5QW5kQ291bnQ+IGxpc3Q7CiAgICAgICAg
IGZvciAoY29uc3RfaXRlcmF0b3IgaXRlciA9IGJlZ2luKCk7IGl0ZXIgIT0gZW5kKCk7ICsraXRl
cikKLSAgICAgICAgICAgIGxpc3QuYXBwZW5kKEtleUFuZENvdW50KGl0ZXItPmZpcnN0LCBpdGVy
LT5zZWNvbmQpKTsKKyAgICAgICAgICAgIGxpc3QuYXBwZW5kKEtleUFuZENvdW50KGl0ZXItPmtl
eSwgaXRlci0+dmFsdWUpKTsKICAgICAgICAgCiAgICAgICAgIHN0ZDo6c29ydChsaXN0LmJlZ2lu
KCksIGxpc3QuZW5kKCkpOwogICAgICAgICByZXR1cm4gbGlzdDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XVEYvd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGlu
Z1B0aHJlYWRzLmNwcAppbmRleCA4OTkxZTI0OWIyNjU2ZjAxMThhOWM3MDI2NTg4ZjQzYzJmOTAz
MTBiLi5iNzBjY2RkOWEwOGNkMTI2NTYwZjU0NmEwNDJiYWYzNjc5OTBmMTE5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHAKKysrIGIvU291cmNlL1dURi93
dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwCkBAIC0xNjYsOCArMTY2LDggQEAgc3RhdGljIFRocmVh
ZElkZW50aWZpZXIgaWRlbnRpZmllckJ5UHRocmVhZEhhbmRsZShjb25zdCBwdGhyZWFkX3QmIHB0
aHJlYWRIYW5kbGUKIAogICAgIFRocmVhZE1hcDo6aXRlcmF0b3IgaSA9IHRocmVhZE1hcCgpLmJl
Z2luKCk7CiAgICAgZm9yICg7IGkgIT0gdGhyZWFkTWFwKCkuZW5kKCk7ICsraSkgewotICAgICAg
ICBpZiAocHRocmVhZF9lcXVhbChpLT5zZWNvbmQtPnB0aHJlYWRIYW5kbGUoKSwgcHRocmVhZEhh
bmRsZSkgJiYgIWktPnNlY29uZC0+aGFzRXhpdGVkKCkpCi0gICAgICAgICAgICByZXR1cm4gaS0+
Zmlyc3Q7CisgICAgICAgIGlmIChwdGhyZWFkX2VxdWFsKGktPnZhbHVlLT5wdGhyZWFkSGFuZGxl
KCksIHB0aHJlYWRIYW5kbGUpICYmICFpLT52YWx1ZS0+aGFzRXhpdGVkKCkpCisgICAgICAgICAg
ICByZXR1cm4gaS0+a2V5OwogICAgIH0KIAogICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlvbi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uLmNwcAppbmRleCA1N2NhZjMx
NTJhY2M4OWQ2OTdhYThmNjQ1Y2M4ZjAxMzU5YmNiMTUyLi5hM2VmNDAyNmRkMDk5YWFjNzEwNjQ2
NDk0YmRjZDViOTY4NTVkYTNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dl
b2xvY2F0aW9uL0dlb2xvY2F0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dl
b2xvY2F0aW9uL0dlb2xvY2F0aW9uLmNwcApAQCAtMTkyLDcgKzE5Miw3IEBAIEdlb2xvY2F0aW9u
OjpHZW9Ob3RpZmllciogR2VvbG9jYXRpb246OldhdGNoZXJzOjpmaW5kKGludCBpZCkKICAgICBJ
ZFRvTm90aWZpZXJNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2lkVG9Ob3RpZmllck1hcC5maW5kKGlk
KTsKICAgICBpZiAoaXRlciA9PSBtX2lkVG9Ob3RpZmllck1hcC5lbmQoKSkKICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgcmV0dXJuIGl0ZXItPnNlY29uZC5nZXQoKTsKKyAgICByZXR1cm4gaXRlci0+
dmFsdWUuZ2V0KCk7CiB9CiAKIHZvaWQgR2VvbG9jYXRpb246OldhdGNoZXJzOjpyZW1vdmUoaW50
IGlkKQpAQCAtMjAxLDcgKzIwMSw3IEBAIHZvaWQgR2VvbG9jYXRpb246OldhdGNoZXJzOjpyZW1v
dmUoaW50IGlkKQogICAgIElkVG9Ob3RpZmllck1hcDo6aXRlcmF0b3IgaXRlciA9IG1faWRUb05v
dGlmaWVyTWFwLmZpbmQoaWQpOwogICAgIGlmIChpdGVyID09IG1faWRUb05vdGlmaWVyTWFwLmVu
ZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgbV9ub3RpZmllclRvSWRNYXAucmVtb3ZlKGl0ZXIt
PnNlY29uZCk7CisgICAgbV9ub3RpZmllclRvSWRNYXAucmVtb3ZlKGl0ZXItPnZhbHVlKTsKICAg
ICBtX2lkVG9Ob3RpZmllck1hcC5yZW1vdmUoaXRlcik7CiB9CiAKQEAgLTIxMCw3ICsyMTAsNyBA
QCB2b2lkIEdlb2xvY2F0aW9uOjpXYXRjaGVyczo6cmVtb3ZlKEdlb05vdGlmaWVyKiBub3RpZmll
cikKICAgICBOb3RpZmllclRvSWRNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX25vdGlmaWVyVG9JZE1h
cC5maW5kKG5vdGlmaWVyKTsKICAgICBpZiAoaXRlciA9PSBtX25vdGlmaWVyVG9JZE1hcC5lbmQo
KSkKICAgICAgICAgcmV0dXJuOwotICAgIG1faWRUb05vdGlmaWVyTWFwLnJlbW92ZShpdGVyLT5z
ZWNvbmQpOworICAgIG1faWRUb05vdGlmaWVyTWFwLnJlbW92ZShpdGVyLT52YWx1ZSk7CiAgICAg
bV9ub3RpZmllclRvSWRNYXAucmVtb3ZlKGl0ZXIpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAKaW5kZXggZDk3MmMyZGJkMjU2NWMz
NTlhYTA2MDFkMTZmZjMyNDlmNDM0NzNiMi4uMGViODAyZjg0MWE0YTJlYjgyYjAwYWVmMjAxMGY1
MTFjNzY0MjYwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkRhdGFiYXNlLmNwcApAQCAtMTA4LDcgKzEwOCw3IEBAIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlz
dD4gSURCRGF0YWJhc2U6Om9iamVjdFN0b3JlTmFtZXMoKSBjb25zdAogewogICAgIFJlZlB0cjxE
T01TdHJpbmdMaXN0PiBvYmplY3RTdG9yZU5hbWVzID0gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7
CiAgICAgZm9yIChJREJEYXRhYmFzZU1ldGFkYXRhOjpPYmplY3RTdG9yZU1hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5iZWdpbigpOyBpdCAhPSBtX21ldGFk
YXRhLm9iamVjdFN0b3Jlcy5lbmQoKTsgKytpdCkKLSAgICAgICAgb2JqZWN0U3RvcmVOYW1lcy0+
YXBwZW5kKGl0LT5maXJzdCk7CisgICAgICAgIG9iamVjdFN0b3JlTmFtZXMtPmFwcGVuZChpdC0+
a2V5KTsKICAgICBvYmplY3RTdG9yZU5hbWVzLT5zb3J0KCk7CiAgICAgcmV0dXJuIG9iamVjdFN0
b3JlTmFtZXMucmVsZWFzZSgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcAppbmRleCA2YzQxZWQ2
MDhlODRkMDdkM2E4OGMyZGJiYjE2MjE3ZDZmOGEzOWI0Li44MDVmODZkODQyYzhkZmRlYzhkYmQ5
NWNlNGUzZjI4YjdiNWExMmJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcApAQCAtMTcwLDcgKzE3
MCw3IEBAIElEQkRhdGFiYXNlTWV0YWRhdGEgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6bWV0YWRh
dGEoKSBjb25zdAogewogICAgIElEQkRhdGFiYXNlTWV0YWRhdGEgbWV0YWRhdGEobV9uYW1lLCBt
X2lkLCBtX3ZlcnNpb24sIG1faW50VmVyc2lvbiwgbV9tYXhPYmplY3RTdG9yZUlkKTsKICAgICBm
b3IgKE9iamVjdFN0b3JlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fb2JqZWN0U3RvcmVzLmJl
Z2luKCk7IGl0ICE9IG1fb2JqZWN0U3RvcmVzLmVuZCgpOyArK2l0KQotICAgICAgICBtZXRhZGF0
YS5vYmplY3RTdG9yZXMuc2V0KGl0LT5maXJzdCwgaXQtPnNlY29uZC0+bWV0YWRhdGEoKSk7Cisg
ICAgICAgIG1ldGFkYXRhLm9iamVjdFN0b3Jlcy5zZXQoaXQtPmtleSwgaXQtPnZhbHVlLT5tZXRh
ZGF0YSgpKTsKICAgICByZXR1cm4gbWV0YWRhdGE7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwCmlu
ZGV4IDY4ZTdkM2FkMDdjNDFlMTFmMmVkOGNlOWNjM2MyNWU3ZjAxM2E3MmYuLmY1ZTVlMjcyNjgw
NGUxMGJiNzI2YTE3MGU0YWVhZTU2ZmUyZDllOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcApAQCAt
MTA2LDcgKzEwNiw3IEBAIHZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpkZWxldGVEYXRhYmFz
ZShjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsCiAgICAgaWYgKGl0ICE9IG1f
ZGF0YWJhc2VCYWNrZW5kTWFwLmVuZCgpKSB7CiAgICAgICAgIC8vIElmIHRoZXJlIGFyZSBhbnkg
Y29ubmVjdGlvbnMgdG8gdGhlIGRhdGFiYXNlLCBkaXJlY3RseSBkZWxldGUgdGhlCiAgICAgICAg
IC8vIGRhdGFiYXNlLgotICAgICAgICBpdC0+c2Vjb25kLT5kZWxldGVEYXRhYmFzZShjYWxsYmFj
a3MpOworICAgICAgICBpdC0+dmFsdWUtPmRlbGV0ZURhdGFiYXNlKGNhbGxiYWNrcyk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEzMyw3ICsxMzMsNyBAQCBQYXNzUmVmUHRyPElEQkJh
Y2tpbmdTdG9yZT4gSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuQmFja2luZ1N0b3JlKFBhc3NS
ZWZQdHI8UwogICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZTsKICAgICBJ
REJCYWNraW5nU3RvcmVNYXA6Oml0ZXJhdG9yIGl0MiA9IG1fYmFja2luZ1N0b3JlTWFwLmZpbmQo
ZmlsZUlkZW50aWZpZXIpOwogICAgIGlmIChpdDIgIT0gbV9iYWNraW5nU3RvcmVNYXAuZW5kKCkp
Ci0gICAgICAgIGJhY2tpbmdTdG9yZSA9IGl0Mi0+c2Vjb25kOworICAgICAgICBiYWNraW5nU3Rv
cmUgPSBpdDItPnZhbHVlOwogICAgIGVsc2UgewogI2lmIFVTRShMRVZFTERCKQogICAgICAgICBi
YWNraW5nU3RvcmUgPSBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuKHNlY3VyaXR5T3JpZ2lu
LmdldCgpLCBkYXRhRGlyZWN0b3J5LCBmaWxlSWRlbnRpZmllciwgdGhpcyk7CkBAIC0xNzEsNyAr
MTcxLDcgQEAgdm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW4oY29uc3QgU3RyaW5nJiBu
YW1lLCBpbnQ2NF90IHZlcnNpb24sIFBhc3NSZWZQdHIKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogICAgIH0gZWxzZQotICAgICAgICBkYXRhYmFzZUJhY2tlbmQgPSBpdC0+c2Vjb25k
OworICAgICAgICBkYXRhYmFzZUJhY2tlbmQgPSBpdC0+dmFsdWU7CiAKICAgICBpZiAodmVyc2lv
biA9PSBJREJEYXRhYmFzZU1ldGFkYXRhOjpOb0ludFZlcnNpb24pCiAgICAgICAgIGRhdGFiYXNl
QmFja2VuZC0+b3BlbkNvbm5lY3Rpb24oY2FsbGJhY2tzLCBkYXRhYmFzZUNhbGxiYWNrcyk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9y
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5j
cHAKaW5kZXggMjE3N2Y3ZWEwZDdkNGJiNmRjNGQwY2FkMjdlZjNhYmUyOGVjZTY0ZC4uNGJiYmI5
NTAxNTUyZTBkZmM5MGFlZDE1MmRhN2VlZDZmODE0NGJlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcApAQCAtNjYsNyArNjYs
NyBAQCBQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IElEQk9iamVjdFN0b3JlOjppbmRleE5hbWVz
KCkgY29uc3QKICAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlOjppbmRleE5hbWVzIik7CiAg
ICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+IGluZGV4TmFtZXMgPSBET01TdHJpbmdMaXN0OjpjcmVh
dGUoKTsKICAgICBmb3IgKElEQk9iamVjdFN0b3JlTWV0YWRhdGE6OkluZGV4TWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IG1fbWV0YWRhdGEuaW5kZXhlcy5iZWdpbigpOyBpdCAhPSBtX21ldGFkYXRh
LmluZGV4ZXMuZW5kKCk7ICsraXQpCi0gICAgICAgIGluZGV4TmFtZXMtPmFwcGVuZChpdC0+Zmly
c3QpOworICAgICAgICBpbmRleE5hbWVzLT5hcHBlbmQoaXQtPmtleSk7CiAgICAgaW5kZXhOYW1l
cy0+c29ydCgpOwogICAgIHJldHVybiBpbmRleE5hbWVzLnJlbGVhc2UoKTsKIH0KQEAgLTIwOCw4
ICsyMDgsOCBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpwdXQoSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpQdXRNbwogICAgIFZlY3RvcjxJbmRleEtleXM+
IGluZGV4S2V5czsKICAgICBmb3IgKElEQk9iamVjdFN0b3JlTWV0YWRhdGE6OkluZGV4TWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IG1fbWV0YWRhdGEuaW5kZXhlcy5iZWdpbigpOyBpdCAhPSBtX21l
dGFkYXRhLmluZGV4ZXMuZW5kKCk7ICsraXQpIHsKICAgICAgICAgSW5kZXhLZXlzIGtleXM7Ci0g
ICAgICAgIGdlbmVyYXRlSW5kZXhLZXlzRm9yVmFsdWUoaXQtPnNlY29uZCwgdmFsdWUsICZrZXlz
KTsKLSAgICAgICAgaW5kZXhOYW1lcy5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgZ2VuZXJh
dGVJbmRleEtleXNGb3JWYWx1ZShpdC0+dmFsdWUsIHZhbHVlLCAma2V5cyk7CisgICAgICAgIGlu
ZGV4TmFtZXMuYXBwZW5kKGl0LT5rZXkpOwogICAgICAgICBpbmRleEtleXMuYXBwZW5kKGtleXMp
OwogICAgIH0KICAgICBBU1NFUlQoaW5kZXhLZXlzLnNpemUoKSA9PSBpbmRleE5hbWVzLnNpemUo
KSk7CkBAIC00NDQsNyArNDQ0LDcgQEAgUGFzc1JlZlB0cjxJREJJbmRleD4gSURCT2JqZWN0U3Rv
cmU6OmluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMKIAogICAgIElE
QkluZGV4TWFwOjppdGVyYXRvciBpdCA9IG1faW5kZXhNYXAuZmluZChuYW1lKTsKICAgICBpZiAo
aXQgIT0gbV9pbmRleE1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAg
ICAgIHJldHVybiBpdC0+dmFsdWU7CiAKICAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJm
YWNlPiBpbmRleEJhY2tlbmQgPSBtX2JhY2tlbmQtPmluZGV4KG5hbWUsIGVjKTsKICAgICBBU1NF
UlQoIWluZGV4QmFja2VuZCAhPSAhZWMpOyAvLyBJZiB3ZSBkaWRuJ3QgZ2V0IGFuIGluZGV4LCB3
ZSBzaG91bGQgaGF2ZSBnb3R0ZW4gYW4gZXhjZXB0aW9uIGNvZGUuIEFuZCB2aWNlIHZlcnNhLgpA
QCAtNDU0LDcgKzQ1NCw3IEBAIFBhc3NSZWZQdHI8SURCSW5kZXg+IElEQk9iamVjdFN0b3JlOjpp
bmRleChjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjCiAgICAgSURCT2JqZWN0
U3RvcmVNZXRhZGF0YTo6SW5kZXhNYXA6OmNvbnN0X2l0ZXJhdG9yIG1kaXQgPSBtX21ldGFkYXRh
LmluZGV4ZXMuZmluZChuYW1lKTsKICAgICBBU1NFUlQobWRpdCAhPSBtX21ldGFkYXRhLmluZGV4
ZXMuZW5kKCkpOwogCi0gICAgUmVmUHRyPElEQkluZGV4PiBpbmRleCA9IElEQkluZGV4OjpjcmVh
dGUobWRpdC0+c2Vjb25kLCBpbmRleEJhY2tlbmQucmVsZWFzZSgpLCB0aGlzLCBtX3RyYW5zYWN0
aW9uLmdldCgpKTsKKyAgICBSZWZQdHI8SURCSW5kZXg+IGluZGV4ID0gSURCSW5kZXg6OmNyZWF0
ZShtZGl0LT52YWx1ZSwgaW5kZXhCYWNrZW5kLnJlbGVhc2UoKSwgdGhpcywgbV90cmFuc2FjdGlv
bi5nZXQoKSk7CiAgICAgbV9pbmRleE1hcC5zZXQobmFtZSwgaW5kZXgpOwogICAgIHJldHVybiBp
bmRleC5yZWxlYXNlKCk7CiB9CkBAIC00NzgsNyArNDc4LDcgQEAgdm9pZCBJREJPYmplY3RTdG9y
ZTo6ZGVsZXRlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKICAg
ICBpZiAoIWVjKSB7CiAgICAgICAgIElEQkluZGV4TWFwOjppdGVyYXRvciBpdCA9IG1faW5kZXhN
YXAuZmluZChuYW1lKTsKICAgICAgICAgaWYgKGl0ICE9IG1faW5kZXhNYXAuZW5kKCkpIHsKLSAg
ICAgICAgICAgIGl0LT5zZWNvbmQtPm1hcmtEZWxldGVkKCk7CisgICAgICAgICAgICBpdC0+dmFs
dWUtPm1hcmtEZWxldGVkKCk7CiAgICAgICAgICAgICBtX2luZGV4TWFwLnJlbW92ZShuYW1lKTsK
ICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwCmluZGV4IDFjOTRjOGE5NjFm
YzJkYzVhODRjZWMzOWY4MzA5MTY4MTlmNTFjNGIuLjUzNjBkZjFlNTAzMGNhZjdmMTVlMjU5Y2Vl
Yjg1ODVhMDIzMTgxYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwCkBAIC02Nyw3ICs2
Nyw3IEBAIElEQk9iamVjdFN0b3JlTWV0YWRhdGEgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6
bWV0YWRhdGEoKSBjb25zdAogewogICAgIElEQk9iamVjdFN0b3JlTWV0YWRhdGEgbWV0YWRhdGEo
bV9uYW1lLCBtX2lkLCBtX2tleVBhdGgsIG1fYXV0b0luY3JlbWVudCwgbV9tYXhJbmRleElkKTsK
ICAgICBmb3IgKEluZGV4TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1faW5kZXhlcy5iZWdpbigp
OyBpdCAhPSBtX2luZGV4ZXMuZW5kKCk7ICsraXQpCi0gICAgICAgIG1ldGFkYXRhLmluZGV4ZXMu
c2V0KGl0LT5maXJzdCwgaXQtPnNlY29uZC0+bWV0YWRhdGEoKSk7CisgICAgICAgIG1ldGFkYXRh
LmluZGV4ZXMuc2V0KGl0LT5rZXksIGl0LT52YWx1ZS0+bWV0YWRhdGEoKSk7CiAgICAgcmV0dXJu
IG1ldGFkYXRhOwogfQogCkBAIC0yMDksMTEgKzIwOSwxMSBAQCBzdGF0aWMgYm9vbCBtYWtlSW5k
ZXhXcml0ZXJzKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rp
b24sCiAKICAgICBmb3IgKElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OkluZGV4TWFwOjppdGVy
YXRvciBpdCA9IG9iamVjdFN0b3JlLT5pdGVySW5kZXhlc0JlZ2luKCk7IGl0ICE9IG9iamVjdFN0
b3JlLT5pdGVySW5kZXhlc0VuZCgpOyArK2l0KSB7CiAKLSAgICAgICAgY29uc3QgUmVmUHRyPElE
QkluZGV4QmFja2VuZEltcGw+JiBpbmRleCA9IGl0LT5zZWNvbmQ7CisgICAgICAgIGNvbnN0IFJl
ZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiYgaW5kZXggPSBpdC0+dmFsdWU7CiAgICAgICAgIGlm
ICghaW5kZXgtPmhhc1ZhbGlkSWQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBUaGUgaW5k
ZXggb2JqZWN0IGhhcyBiZWVuIGNyZWF0ZWQsIGJ1dCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgZGF0
YWJhc2UgeWV0LgogCi0gICAgICAgIElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6SW5k
ZXhLZXlzIGtleXMgPSBpbmRleEtleU1hcC5nZXQoaXQtPmZpcnN0KTsKKyAgICAgICAgSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleXMga2V5cyA9IGluZGV4S2V5TWFwLmdl
dChpdC0+a2V5KTsKICAgICAgICAgLy8gSWYgdGhlIG9iamVjdFN0b3JlIGlzIHVzaW5nIGF1dG9J
bmNyZW1lbnQsIHRoZW4gYW55IGluZGV4ZXMgd2l0aCBhbiBpZGVudGljYWwga2V5UGF0aCBuZWVk
IHRvIGFsc28gdXNlIHRoZSBwcmltYXJ5IChnZW5lcmF0ZWQpIGtleSBhcyBhIGtleS4KICAgICAg
ICAgaWYgKGtleVdhc0dlbmVyYXRlZCkgewogICAgICAgICAgICAgY29uc3QgSURCS2V5UGF0aCYg
aW5kZXhLZXlQYXRoID0gaW5kZXgtPmtleVBhdGgoKTsKQEAgLTM4OSwxMCArMzg5LDEwIEBAIHZv
aWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW50ZXJuYWwoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIFBhc3NSZWZQCiAgICAgICAgICAgICByZWNvcmRJZGVudGlmaWVyID0gYmFj
a2luZ1N0b3JlQ3Vyc29yLT5vYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIoKTsKIAogICAgICAg
ICAgICAgZm9yIChJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpJbmRleE1hcDo6aXRlcmF0b3Ig
aXQgPSBvYmplY3RTdG9yZS0+bV9pbmRleGVzLmJlZ2luKCk7IGl0ICE9IG9iamVjdFN0b3JlLT5t
X2luZGV4ZXMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgICAgICAgICBpZiAoIWl0LT5zZWNvbmQt
Pmhhc1ZhbGlkSWQoKSkKKyAgICAgICAgICAgICAgICBpZiAoIWl0LT52YWx1ZS0+aGFzVmFsaWRJ
ZCgpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgLy8gVGhlIGluZGV4IG9iamVjdCBo
YXMgYmVlbiBjcmVhdGVkLCBidXQgZG9lcyBub3QgZXhpc3QgaW4gdGhlIGRhdGFiYXNlIHlldC4K
IAotICAgICAgICAgICAgICAgIGJvb2wgc3VjY2VzcyA9IG9iamVjdFN0b3JlLT5iYWNraW5nU3Rv
cmUoKS0+ZGVsZXRlSW5kZXhEYXRhRm9yUmVjb3JkKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVU
cmFuc2FjdGlvbigpLCBvYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+aWQo
KSwgaXQtPnNlY29uZC0+aWQoKSwgcmVjb3JkSWRlbnRpZmllci5nZXQoKSk7CisgICAgICAgICAg
ICAgICAgYm9vbCBzdWNjZXNzID0gb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5kZWxldGVJ
bmRleERhdGFGb3JSZWNvcmQodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCks
IG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0b3JlLT5pZCgpLCBpdC0+dmFsdWUt
PmlkKCksIHJlY29yZElkZW50aWZpZXIuZ2V0KCkpOwogICAgICAgICAgICAgICAgIEFTU0VSVF9V
TlVTRUQoc3VjY2Vzcywgc3VjY2Vzcyk7CiAgICAgICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcAppbmRleCBiNTZk
YzM0ZWU1ODM3YzA2OWM3MTZmODg2ZTI5YTBjMGMzODNjN2RiLi4zMGE4OTgyNDdkMDMwZWY2MjQ1
YzJkOWZlZGJhMmUxNmM3MzAwMDhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwCkBAIC0xNTEsNyArMTUxLDcgQEAgUGFzc1Jl
ZlB0cjxJREJPYmplY3RTdG9yZT4gSURCVHJhbnNhY3Rpb246Om9iamVjdFN0b3JlKGNvbnN0IFN0
cmluZyYgbmFtZSwgRXhjZXAKIAogICAgIElEQk9iamVjdFN0b3JlTWFwOjppdGVyYXRvciBpdCA9
IG1fb2JqZWN0U3RvcmVNYXAuZmluZChuYW1lKTsKICAgICBpZiAoaXQgIT0gbV9vYmplY3RTdG9y
ZU1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBp
dC0+dmFsdWU7CiAKICAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBv
YmplY3RTdG9yZUJhY2tlbmQgPSBtX2JhY2tlbmQtPm9iamVjdFN0b3JlKG5hbWUsIGVjKTsKICAg
ICBBU1NFUlQoIW9iamVjdFN0b3JlQmFja2VuZCAhPSAhZWMpOyAvLyBJZiB3ZSBkaWRuJ3QgZ2V0
IGEgc3RvcmUsIHdlIHNob3VsZCBoYXZlIGdvdHRlbiBhbiBleGNlcHRpb24gY29kZS4gQW5kIHZp
Y2UgdmVyc2EuCkBAIC0xNjIsNyArMTYyLDcgQEAgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4g
SURCVHJhbnNhY3Rpb246Om9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXAKICAg
ICBJREJEYXRhYmFzZU1ldGFkYXRhOjpPYmplY3RTdG9yZU1hcDo6Y29uc3RfaXRlcmF0b3IgbWRp
dCA9IG1ldGFkYXRhLm9iamVjdFN0b3Jlcy5maW5kKG5hbWUpOwogICAgIEFTU0VSVChtZGl0ICE9
IG1ldGFkYXRhLm9iamVjdFN0b3Jlcy5lbmQoKSk7CiAKLSAgICBSZWZQdHI8SURCT2JqZWN0U3Rv
cmU+IG9iamVjdFN0b3JlID0gSURCT2JqZWN0U3RvcmU6OmNyZWF0ZShtZGl0LT5zZWNvbmQsIG9i
amVjdFN0b3JlQmFja2VuZCwgdGhpcyk7CisgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlPiBvYmpl
Y3RTdG9yZSA9IElEQk9iamVjdFN0b3JlOjpjcmVhdGUobWRpdC0+dmFsdWUsIG9iamVjdFN0b3Jl
QmFja2VuZCwgdGhpcyk7CiAgICAgb2JqZWN0U3RvcmVDcmVhdGVkKG5hbWUsIG9iamVjdFN0b3Jl
KTsKICAgICByZXR1cm4gb2JqZWN0U3RvcmUucmVsZWFzZSgpOwogfQpAQCAtMTgyLDcgKzE4Miw3
IEBAIHZvaWQgSURCVHJhbnNhY3Rpb246Om9iamVjdFN0b3JlRGVsZXRlZChjb25zdCBTdHJpbmcm
IG5hbWUpCiAgICAgQVNTRVJUKGlzVmVyc2lvbkNoYW5nZSgpKTsKICAgICBJREJPYmplY3RTdG9y
ZU1hcDo6aXRlcmF0b3IgaXQgPSBtX29iamVjdFN0b3JlTWFwLmZpbmQobmFtZSk7CiAgICAgaWYg
KGl0ICE9IG1fb2JqZWN0U3RvcmVNYXAuZW5kKCkpIHsKLSAgICAgICAgUmVmUHRyPElEQk9iamVj
dFN0b3JlPiBvYmplY3RTdG9yZSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFJlZlB0cjxJREJPYmpl
Y3RTdG9yZT4gb2JqZWN0U3RvcmUgPSBpdC0+dmFsdWU7CiAgICAgICAgIG1fb2JqZWN0U3RvcmVN
YXAucmVtb3ZlKG5hbWUpOwogICAgICAgICBvYmplY3RTdG9yZS0+bWFya0RlbGV0ZWQoKTsKICAg
ICAgICAgbV9vYmplY3RTdG9yZUNsZWFudXBNYXAuc2V0KG9iamVjdFN0b3JlLCBvYmplY3RTdG9y
ZS0+bWV0YWRhdGEoKSk7CkBAIC0zMDEsNyArMzAxLDcgQEAgdm9pZCBJREJUcmFuc2FjdGlvbjo6
b25BYm9ydCgpCiAKICAgICBpZiAoaXNWZXJzaW9uQ2hhbmdlKCkpIHsKICAgICAgICAgZm9yIChJ
REJPYmplY3RTdG9yZU1ldGFkYXRhTWFwOjppdGVyYXRvciBpdCA9IG1fb2JqZWN0U3RvcmVDbGVh
bnVwTWFwLmJlZ2luKCk7IGl0ICE9IG1fb2JqZWN0U3RvcmVDbGVhbnVwTWFwLmVuZCgpOyArK2l0
KQotICAgICAgICAgICAgaXQtPmZpcnN0LT5zZXRNZXRhZGF0YShpdC0+c2Vjb25kKTsKKyAgICAg
ICAgICAgIGl0LT5rZXktPnNldE1ldGFkYXRhKGl0LT52YWx1ZSk7CiAgICAgfQogICAgIG1fb2Jq
ZWN0U3RvcmVDbGVhbnVwTWFwLmNsZWFyKCk7CiAgICAgY2xvc2VPcGVuQ3Vyc29ycygpOwpAQCAt
Mzg1LDcgKzM4NSw3IEBAIGJvb2wgSURCVHJhbnNhY3Rpb246OmRpc3BhdGNoRXZlbnQoUGFzc1Jl
ZlB0cjxFdmVudD4gZXZlbnQpCiAKICAgICAvLyBCcmVhayByZWZlcmVuY2UgY3ljbGVzLgogICAg
IGZvciAoSURCT2JqZWN0U3RvcmVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9vYmplY3RTdG9yZU1hcC5i
ZWdpbigpOyBpdCAhPSBtX29iamVjdFN0b3JlTWFwLmVuZCgpOyArK2l0KQotICAgICAgICBpdC0+
c2Vjb25kLT50cmFuc2FjdGlvbkZpbmlzaGVkKCk7CisgICAgICAgIGl0LT52YWx1ZS0+dHJhbnNh
Y3Rpb25GaW5pc2hlZCgpOwogICAgIG1fb2JqZWN0U3RvcmVNYXAuY2xlYXIoKTsKICAgICBmb3Ig
KElEQk9iamVjdFN0b3JlU2V0OjppdGVyYXRvciBpdCA9IG1fZGVsZXRlZE9iamVjdFN0b3Jlcy5i
ZWdpbigpOyBpdCAhPSBtX2RlbGV0ZWRPYmplY3RTdG9yZXMuZW5kKCk7ICsraXQpCiAgICAgICAg
ICgqaXQpLT50cmFuc2FjdGlvbkZpbmlzaGVkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhQ29uc3RyYWludHNJbXBsLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFDb25zdHJhaW50c0ltcGwuY3BwCmluZGV4
IGI5YmYwNDkxYjVkZDcxNGNjNzlmZDE4NGFlNTY2Y2NiZGQxMDFhOGUuLmVjMmQzNGE5NjhlNzZm
YWYwNWYwYWEzYTgyMDBmYjk1YjVmNjAzOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFDb25zdHJhaW50c0ltcGwuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFDb25zdHJhaW50c0ltcGwuY3BwCkBAIC0x
MTgsNyArMTE4LDcgQEAgdm9pZCBNZWRpYUNvbnN0cmFpbnRzSW1wbDo6Z2V0TWFuZGF0b3J5Q29u
c3RyYWludHMoVmVjdG9yPE1lZGlhQ29uc3RyYWludD4mIGNvbnMKICAgICBjb25zdHJhaW50cy5j
bGVhcigpOwogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpID0g
bV9tYW5kYXRvcnlDb25zdHJhaW50cy5iZWdpbigpOwogICAgIGZvciAoOyBpICE9IG1fbWFuZGF0
b3J5Q29uc3RyYWludHMuZW5kKCk7ICsraSkKLSAgICAgICAgY29uc3RyYWludHMuYXBwZW5kKE1l
ZGlhQ29uc3RyYWludChpLT5maXJzdCwgaS0+c2Vjb25kKSk7CisgICAgICAgIGNvbnN0cmFpbnRz
LmFwcGVuZChNZWRpYUNvbnN0cmFpbnQoaS0+a2V5LCBpLT52YWx1ZSkpOwogfQogCiB2b2lkIE1l
ZGlhQ29uc3RyYWludHNJbXBsOjpnZXRPcHRpb25hbENvbnN0cmFpbnRzKFZlY3RvcjxNZWRpYUNv
bnN0cmFpbnQ+JiBjb25zdHJhaW50cykgY29uc3QKQEAgLTEzMyw3ICsxMzMsNyBAQCBib29sIE1l
ZGlhQ29uc3RyYWludHNJbXBsOjpnZXRNYW5kYXRvcnlDb25zdHJhaW50VmFsdWUoY29uc3QgU3Ry
aW5nJiBuYW1lLCBTdHJpbgogICAgIGlmIChpID09IG1fbWFuZGF0b3J5Q29uc3RyYWludHMuZW5k
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHZhbHVlID0gaS0+c2Vjb25kOworICAg
IHZhbHVlID0gaS0+dmFsdWU7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvQWJzdHJhY3REYXRhYmFzZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Fic3RyYWN0RGF0YWJhc2UuY3BwCmlu
ZGV4IGM3NTM5YzZlMTEyYjllMWU2YmYxZTJjZDNmMDJhZTBjYmEyYmVhMjYuLjYyOTA3ZTNlMWNl
NmIwOTE1YzJiMDM0NzYwOWU1MDdlOGMwMWNlYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZGF0YWJhc2UvQWJzdHJhY3REYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9BYnN0cmFjdERhdGFiYXNlLmNwcApAQCAtMjgyLDcg
KzI4Miw3IEBAIGJvb2wgQWJzdHJhY3REYXRhYmFzZTo6cGVyZm9ybU9wZW5BbmRWZXJpZnkoYm9v
bCBzaG91bGRTZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwKICAgICAgICAgR3VpZFZlcnNpb25NYXA6
Oml0ZXJhdG9yIGVudHJ5ID0gZ3VpZFRvVmVyc2lvbk1hcCgpLmZpbmQobV9ndWlkKTsKICAgICAg
ICAgaWYgKGVudHJ5ICE9IGd1aWRUb1ZlcnNpb25NYXAoKS5lbmQoKSkgewogICAgICAgICAgICAg
Ly8gTWFwIG51bGwgc3RyaW5nIHRvIGVtcHR5IHN0cmluZyAoc2VlIHVwZGF0ZUd1aWRWZXJzaW9u
TWFwKCkpLgotICAgICAgICAgICAgY3VycmVudFZlcnNpb24gPSBlbnRyeS0+c2Vjb25kLmlzTnVs
bCgpID8gZW1wdHlTdHJpbmcoKSA6IGVudHJ5LT5zZWNvbmQuaXNvbGF0ZWRDb3B5KCk7CisgICAg
ICAgICAgICBjdXJyZW50VmVyc2lvbiA9IGVudHJ5LT52YWx1ZS5pc051bGwoKSA/IGVtcHR5U3Ry
aW5nKCkgOiBlbnRyeS0+dmFsdWUuaXNvbGF0ZWRDb3B5KCk7CiAgICAgICAgICAgICBMT0coU3Rv
cmFnZUFQSSwgIkN1cnJlbnQgY2FjaGVkIHZlcnNpb24gZm9yIGd1aWQgJWkgaXMgJXMiLCBtX2d1
aWQsIGN1cnJlbnRWZXJzaW9uLmFzY2lpKCkuZGF0YSgpKTsKIAogI2lmIFBMQVRGT1JNKENIUk9N
SVVNKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRh
YmFzZVRyYWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRh
YmFzZVRyYWNrZXIuY3BwCmluZGV4IDQ2ZDI4MTI5MmQ5YjdlNDM3YjVkZTBmMzI1ZmFmMjQ1Yzgx
NjNhZDQuLjViZDVlN2IzZDJlMWM0MDIxMWIwMWE2MWQwYmY3ODNjYjM1MjYyMjggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tl
ci5jcHAKQEAgLTI1MCw3ICsyNTAsNyBAQCB2b2lkIERhdGFiYXNlVHJhY2tlcjo6aW50ZXJydXB0
QWxsRGF0YWJhc2VzRm9yQ29udGV4dChjb25zdCBTY3JpcHRFeGVjdXRpb25Db250ZQogCiAgICAg
ICAgIERhdGFiYXNlTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgZGJOYW1lTWFwRW5kSXQgPSBuYW1l
TWFwLT5lbmQoKTsKICAgICAgICAgZm9yIChEYXRhYmFzZU5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9y
IGRiTmFtZU1hcEl0ID0gbmFtZU1hcC0+YmVnaW4oKTsgZGJOYW1lTWFwSXQgIT0gZGJOYW1lTWFw
RW5kSXQ7ICsrZGJOYW1lTWFwSXQpIHsKLSAgICAgICAgICAgIERhdGFiYXNlU2V0KiBkYXRhYmFz
ZVNldCA9IGRiTmFtZU1hcEl0LT5zZWNvbmQ7CisgICAgICAgICAgICBEYXRhYmFzZVNldCogZGF0
YWJhc2VTZXQgPSBkYk5hbWVNYXBJdC0+dmFsdWU7CiAgICAgICAgICAgICBEYXRhYmFzZVNldDo6
Y29uc3RfaXRlcmF0b3IgZGJTZXRFbmRJdCA9IGRhdGFiYXNlU2V0LT5lbmQoKTsKICAgICAgICAg
ICAgIGZvciAoRGF0YWJhc2VTZXQ6OmNvbnN0X2l0ZXJhdG9yIGRiU2V0SXQgPSBkYXRhYmFzZVNl
dC0+YmVnaW4oKTsgZGJTZXRJdCAhPSBkYlNldEVuZEl0OyArK2RiU2V0SXQpIHsKICAgICAgICAg
ICAgICAgICBpZiAoKCpkYlNldEl0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpID09IGNvbnRl
eHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL09yaWdp
blVzYWdlUmVjb3JkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvT3Jp
Z2luVXNhZ2VSZWNvcmQuY3BwCmluZGV4IDQ0MzU1MGE1NzMwOWYzMzYzZjBmY2E5OGY1MDhjMDI3
NmQwZDk5ZGIuLjJiZjhhZjRhZTAwOTkyODBhY2ExNzU3NzQ4YmEyMWNmOTBiNzAyZGIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvT3JpZ2luVXNhZ2VSZWNv
cmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvT3JpZ2luVXNh
Z2VSZWNvcmQuY3BwCkBAIC05Myw3ICs5Myw3IEBAIHVuc2lnbmVkIGxvbmcgbG9uZyBPcmlnaW5V
c2FnZVJlY29yZDo6ZGlza1VzYWdlKCkKICAgICBIYXNoTWFwPFN0cmluZywgRGF0YWJhc2VFbnRy
eT46Oml0ZXJhdG9yIGlEYXRhYmFzZSA9IG1fZGF0YWJhc2VNYXAuYmVnaW4oKTsKICAgICBIYXNo
TWFwPFN0cmluZywgRGF0YWJhc2VFbnRyeT46Oml0ZXJhdG9yIGVuZERhdGFiYXNlID0gbV9kYXRh
YmFzZU1hcC5lbmQoKTsKICAgICBmb3IgKDsgaURhdGFiYXNlICE9IGVuZERhdGFiYXNlOyArK2lE
YXRhYmFzZSkKLSAgICAgICAgbV9jYWNoZWREaXNrVXNhZ2UgKz0gaURhdGFiYXNlLT5zZWNvbmQu
c2l6ZTsKKyAgICAgICAgbV9jYWNoZWREaXNrVXNhZ2UgKz0gaURhdGFiYXNlLT52YWx1ZS5zaXpl
OwogCiAgICAgbV9jYWNoZWREaXNrVXNhZ2VJc1ZhbGlkID0gdHJ1ZTsKICAgICByZXR1cm4gbV9j
YWNoZWREaXNrVXNhZ2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRh
dGFiYXNlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcAppbmRleCA4Mzdi
OGZiZDIyMDVhZGM5NzQ4NmRkM2YwZThmMDIwNzM4MGY4ZDliLi5kYTNhN2VlNzViOGMwMTI1OTQ2
NmVjNGE3ZWFkYTk3YmQxYzIzYmY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAK
QEAgLTc4LDcgKzc4LDcgQEAgdm9pZCBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjphY3F1aXJl
TG9jayhTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCiAgICAgICAgIGNvb3JkaW5hdGlvbklu
Zm9JdGVyYXRvciA9IG1fY29vcmRpbmF0aW9uSW5mb01hcC5hZGQoZGJJZGVudGlmaWVyLCBDb29y
ZGluYXRpb25JbmZvKCkpLml0ZXJhdG9yOwogICAgIH0KIAotICAgIENvb3JkaW5hdGlvbkluZm8m
IGluZm8gPSBjb29yZGluYXRpb25JbmZvSXRlcmF0b3ItPnNlY29uZDsKKyAgICBDb29yZGluYXRp
b25JbmZvJiBpbmZvID0gY29vcmRpbmF0aW9uSW5mb0l0ZXJhdG9yLT52YWx1ZTsKICAgICBpbmZv
LnBlbmRpbmdUcmFuc2FjdGlvbnMuYXBwZW5kKHRyYW5zYWN0aW9uKTsKICAgICBwcm9jZXNzUGVu
ZGluZ1RyYW5zYWN0aW9ucyhpbmZvKTsKIH0KQEAgLTkyLDcgKzkyLDcgQEAgdm9pZCBTUUxUcmFu
c2FjdGlvbkNvb3JkaW5hdG9yOjpyZWxlYXNlTG9jayhTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rp
b24pCiAKICAgICBDb29yZGluYXRpb25JbmZvTWFwOjppdGVyYXRvciBjb29yZGluYXRpb25JbmZv
SXRlcmF0b3IgPSBtX2Nvb3JkaW5hdGlvbkluZm9NYXAuZmluZChkYklkZW50aWZpZXIpOwogICAg
IEFTU0VSVChjb29yZGluYXRpb25JbmZvSXRlcmF0b3IgIT0gbV9jb29yZGluYXRpb25JbmZvTWFw
LmVuZCgpKTsKLSAgICBDb29yZGluYXRpb25JbmZvJiBpbmZvID0gY29vcmRpbmF0aW9uSW5mb0l0
ZXJhdG9yLT5zZWNvbmQ7CisgICAgQ29vcmRpbmF0aW9uSW5mbyYgaW5mbyA9IGNvb3JkaW5hdGlv
bkluZm9JdGVyYXRvci0+dmFsdWU7CiAKICAgICBpZiAodHJhbnNhY3Rpb24tPmlzUmVhZE9ubHko
KSkgewogICAgICAgICBBU1NFUlQoaW5mby5hY3RpdmVSZWFkVHJhbnNhY3Rpb25zLmNvbnRhaW5z
KHRyYW5zYWN0aW9uKSk7CkBAIC0xMTAsNyArMTEwLDcgQEAgdm9pZCBTUUxUcmFuc2FjdGlvbkNv
b3JkaW5hdG9yOjpzaHV0ZG93bigpCiAgICAgLy8gTm90aWZ5IGFsbCB0cmFuc2FjdGlvbnMgaW4g
cHJvZ3Jlc3MgdGhhdCB0aGUgZGF0YWJhc2UgdGhyZWFkIGlzIHNodXR0aW5nIGRvd24KICAgICBm
b3IgKENvb3JkaW5hdGlvbkluZm9NYXA6Oml0ZXJhdG9yIGNvb3JkaW5hdGlvbkluZm9JdGVyYXRv
ciA9IG1fY29vcmRpbmF0aW9uSW5mb01hcC5iZWdpbigpOwogICAgICAgICAgY29vcmRpbmF0aW9u
SW5mb0l0ZXJhdG9yICE9IG1fY29vcmRpbmF0aW9uSW5mb01hcC5lbmQoKTsgKytjb29yZGluYXRp
b25JbmZvSXRlcmF0b3IpIHsKLSAgICAgICAgQ29vcmRpbmF0aW9uSW5mbyYgaW5mbyA9IGNvb3Jk
aW5hdGlvbkluZm9JdGVyYXRvci0+c2Vjb25kOworICAgICAgICBDb29yZGluYXRpb25JbmZvJiBp
bmZvID0gY29vcmRpbmF0aW9uSW5mb0l0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgaWYgKGluZm8u
YWN0aXZlV3JpdGVUcmFuc2FjdGlvbikKICAgICAgICAgICAgIGluZm8uYWN0aXZlV3JpdGVUcmFu
c2FjdGlvbi0+bm90aWZ5RGF0YWJhc2VUaHJlYWRJc1NodXR0aW5nRG93bigpOwogICAgICAgICBm
b3IgKEhhc2hTZXQ8UmVmUHRyPFNRTFRyYW5zYWN0aW9uPiA+OjppdGVyYXRvciBhY3RpdmVSZWFk
VHJhbnNhY3Rpb25zSXRlcmF0b3IgPQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJkYXRhYmFzZS9jaHJvbWl1bS9EYXRhYmFzZVRyYWNrZXJDaHJvbWl1bS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL0RhdGFiYXNlVHJhY2tlckNo
cm9taXVtLmNwcAppbmRleCA4OGU5YmRhMWE2YWFjNTlhZGMxYjFkM2Y0ZGM4Njc0Y2ExYTkyYzFl
Li4zMDlkNDZjMGQwODJhZGNlYzQyMmE0ZDJjYmY3YTg3ZThkNjk4OTc4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL0RhdGFiYXNlVHJhY2tl
ckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL2No
cm9taXVtL0RhdGFiYXNlVHJhY2tlckNocm9taXVtLmNwcApAQCAtMTgwLDcgKzE4MCw3IEBAIHZv
aWQgRGF0YWJhc2VUcmFja2VyOjppbnRlcnJ1cHRBbGxEYXRhYmFzZXNGb3JDb250ZXh0KGNvbnN0
IFNjcmlwdEV4ZWN1dGlvbkNvbnRlCiAKICAgICBEYXRhYmFzZU5hbWVNYXA6OmNvbnN0X2l0ZXJh
dG9yIGRiTmFtZU1hcEVuZEl0ID0gbmFtZU1hcC0+ZW5kKCk7CiAgICAgZm9yIChEYXRhYmFzZU5h
bWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGRiTmFtZU1hcEl0ID0gbmFtZU1hcC0+YmVnaW4oKTsgZGJO
YW1lTWFwSXQgIT0gZGJOYW1lTWFwRW5kSXQ7ICsrZGJOYW1lTWFwSXQpIHsKLSAgICAgICAgRGF0
YWJhc2VTZXQqIGRhdGFiYXNlU2V0ID0gZGJOYW1lTWFwSXQtPnNlY29uZDsKKyAgICAgICAgRGF0
YWJhc2VTZXQqIGRhdGFiYXNlU2V0ID0gZGJOYW1lTWFwSXQtPnZhbHVlOwogICAgICAgICBEYXRh
YmFzZVNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gZGF0YWJhc2VTZXQtPmVuZCgpOwogICAgICAg
ICBmb3IgKERhdGFiYXNlU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IGRhdGFiYXNlU2V0LT5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIGlmICgoKml0KS0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpID09IGNvbnRleHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL1F1b3RhVHJhY2tlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL1F1b3RhVHJhY2tlci5jcHAKaW5kZXgg
MDM0NGNhOGY2NTZhNjVkMzdiMzA0YmI3ZTM5ODg5ZmNlMzZmOGY1ZC4uMzgyYTNmYjhiNTc4NjI1
NWNlYmEwZTdmODU5YjE0MmFlYzFkOTUxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJkYXRhYmFzZS9jaHJvbWl1bS9RdW90YVRyYWNrZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvY2hyb21pdW0vUXVvdGFUcmFja2VyLmNwcApAQCAt
NTMsOCArNTMsOCBAQCB2b2lkIFF1b3RhVHJhY2tlcjo6Z2V0RGF0YWJhc2VTaXplQW5kU3BhY2VB
dmFpbGFibGVUb09yaWdpbigKICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGEobV9kYXRhR3Vh
cmQpOwogICAgICAgICBBU1NFUlQobV9kYXRhYmFzZVNpemVzLmNvbnRhaW5zKG9yaWdpbklkZW50
aWZpZXIpKTsKICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFNpemVNYXA+Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fZGF0YWJhc2VTaXplcy5maW5kKG9yaWdpbklkZW50aWZpZXIpOwotICAgICAgICBB
U1NFUlQoaXQtPnNlY29uZC5jb250YWlucyhkYXRhYmFzZU5hbWUpKTsKLSAgICAgICAgKmRhdGFi
YXNlU2l6ZSA9IGl0LT5zZWNvbmQuZ2V0KGRhdGFiYXNlTmFtZSk7CisgICAgICAgIEFTU0VSVChp
dC0+dmFsdWUuY29udGFpbnMoZGF0YWJhc2VOYW1lKSk7CisgICAgICAgICpkYXRhYmFzZVNpemUg
PSBpdC0+dmFsdWUuZ2V0KGRhdGFiYXNlTmFtZSk7CiAKICAgICAgICAgaWYgKG1fc3BhY2VBdmFp
bGFibGVUb09yaWdpbnMuY29udGFpbnMob3JpZ2luSWRlbnRpZmllcikpIHsKICAgICAgICAgICAg
ICpzcGFjZUF2YWlsYWJsZSA9IG1fc3BhY2VBdmFpbGFibGVUb09yaWdpbnMuZ2V0KG9yaWdpbklk
ZW50aWZpZXIpOwpAQCAtNzIsNyArNzIsNyBAQCB2b2lkIFF1b3RhVHJhY2tlcjo6dXBkYXRlRGF0
YWJhc2VTaXplKAogewogICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhKG1fZGF0YUd1YXJkKTsKICAg
ICBIYXNoTWFwPFN0cmluZywgU2l6ZU1hcD46Oml0ZXJhdG9yIGl0ID0gbV9kYXRhYmFzZVNpemVz
LmFkZChvcmlnaW5JZGVudGlmaWVyLCBTaXplTWFwKCkpLml0ZXJhdG9yOwotICAgIGl0LT5zZWNv
bmQuc2V0KGRhdGFiYXNlTmFtZSwgZGF0YWJhc2VTaXplKTsKKyAgICBpdC0+dmFsdWUuc2V0KGRh
dGFiYXNlTmFtZSwgZGF0YWJhc2VTaXplKTsKIH0KIAogdm9pZCBRdW90YVRyYWNrZXI6OnVwZGF0
ZVNwYWNlQXZhaWxhYmxlVG9PcmlnaW4oY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyLCB1
bnNpZ25lZCBsb25nIGxvbmcgc3BhY2VBdmFpbGFibGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0RGVmbGF0ZUZyYW1lci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0RGVmbGF0ZUZyYW1lci5jcHAK
aW5kZXggYmY3YWZkYmFiMWNiNGRmZDYyZmE4MTkzNTQxNjI0MTBmMGI5ZTc0ZC4uNTkwMjQ2ZGMy
MTBhZWEyYTMyYzY4OWY0ZGViMjU2NjliNzJlNzE0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldERlZmxhdGVGcmFtZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXREZWZsYXRlRnJhbWVyLmNw
cApAQCAtODgsNyArODgsNyBAQCBib29sIFdlYlNvY2tldEV4dGVuc2lvbkRlZmxhdGVGcmFtZTo6
cHJvY2Vzc1Jlc3BvbnNlKGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbgogICAgIGludCB3aW5k
b3dCaXRzID0gMTU7CiAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9y
IHBhcmFtZXRlciA9IHNlcnZlclBhcmFtZXRlcnMuZmluZCgibWF4X3dpbmRvd19iaXRzIik7CiAg
ICAgaWYgKHBhcmFtZXRlciAhPSBzZXJ2ZXJQYXJhbWV0ZXJzLmVuZCgpKSB7Ci0gICAgICAgIHdp
bmRvd0JpdHMgPSBwYXJhbWV0ZXItPnNlY29uZC50b0ludCgpOworICAgICAgICB3aW5kb3dCaXRz
ID0gcGFyYW1ldGVyLT52YWx1ZS50b0ludCgpOwogICAgICAgICBpZiAod2luZG93Qml0cyA8IDgg
fHwgd2luZG93Qml0cyA+IDE1KSB7CiAgICAgICAgICAgICBtX2ZhaWx1cmVSZWFzb24gPSAiUmVj
ZWl2ZWQgaW52YWxpZCBtYXhfd2luZG93X2JpdHMgcGFyYW1ldGVyIjsKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKQEAgLTk5LDcgKzk5LDcgQEAgYm9vbCBXZWJTb2NrZXRFeHRlbnNpb25EZWZs
YXRlRnJhbWU6OnByb2Nlc3NSZXNwb25zZShjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW4KICAg
ICBXZWJTb2NrZXREZWZsYXRlcjo6Q29udGV4dFRha2VPdmVyTW9kZSBtb2RlID0gV2ViU29ja2V0
RGVmbGF0ZXI6OlRha2VPdmVyQ29udGV4dDsKICAgICBwYXJhbWV0ZXIgPSBzZXJ2ZXJQYXJhbWV0
ZXJzLmZpbmQoIm5vX2NvbnRleHRfdGFrZW92ZXIiKTsKICAgICBpZiAocGFyYW1ldGVyICE9IHNl
cnZlclBhcmFtZXRlcnMuZW5kKCkpIHsKLSAgICAgICAgaWYgKCFwYXJhbWV0ZXItPnNlY29uZC5p
c051bGwoKSkgeworICAgICAgICBpZiAoIXBhcmFtZXRlci0+dmFsdWUuaXNOdWxsKCkpIHsKICAg
ICAgICAgICAgIG1fZmFpbHVyZVJlYXNvbiA9ICJSZWNlaXZlZCBpbnZhbGlkIG5vX2NvbnRleHRf
dGFrZW92ZXIgcGFyYW1ldGVyIjsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tl
dEV4dGVuc2lvbkRpc3BhdGNoZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2Nr
ZXRzL1dlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXIuY3BwCmluZGV4IGFhYmJmOTM1Y2NmMDk0
NGU0Y2ZkOWRkNGNjMGMwZWIzMzk0ZDJjODcuLjA2YjcxOTQ2NWRjZjkwYzIwNTE5MzBkYWVjODM4
MjFiZWZiNzA0MGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0
cy9XZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0RXh0ZW5zaW9uRGlzcGF0Y2hlci5jcHAKQEAgLTgz
LDEwICs4MywxMCBAQCB2b2lkIFdlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXI6OmFwcGVuZEFj
Y2VwdGVkRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZXh0ZW5zaQogICAgIC8vIEZJWE1FOiBTaG91
bGQgdXNlIExpc3RIYXNoU2V0IHRvIGtlZXAgdGhlIG9yZGVyIG9mIHRoZSBwYXJhbWV0ZXJzLgog
ICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ZXJhdG9y
ID0gZXh0ZW5zaW9uUGFyYW1ldGVycy5iZWdpbigpOyBpdGVyYXRvciAhPSBleHRlbnNpb25QYXJh
bWV0ZXJzLmVuZCgpOyArK2l0ZXJhdG9yKSB7CiAgICAgICAgIG1fYWNjZXB0ZWRFeHRlbnNpb25z
QnVpbGRlci5hcHBlbmQoIjsgIik7Ci0gICAgICAgIG1fYWNjZXB0ZWRFeHRlbnNpb25zQnVpbGRl
ci5hcHBlbmQoaXRlcmF0b3ItPmZpcnN0KTsKLSAgICAgICAgaWYgKCFpdGVyYXRvci0+c2Vjb25k
LmlzTnVsbCgpKSB7CisgICAgICAgIG1fYWNjZXB0ZWRFeHRlbnNpb25zQnVpbGRlci5hcHBlbmQo
aXRlcmF0b3ItPmtleSk7CisgICAgICAgIGlmICghaXRlcmF0b3ItPnZhbHVlLmlzTnVsbCgpKSB7
CiAgICAgICAgICAgICBtX2FjY2VwdGVkRXh0ZW5zaW9uc0J1aWxkZXIuYXBwZW5kKCI9Iik7Ci0g
ICAgICAgICAgICBtX2FjY2VwdGVkRXh0ZW5zaW9uc0J1aWxkZXIuYXBwZW5kKGl0ZXJhdG9yLT5z
ZWNvbmQpOworICAgICAgICAgICAgbV9hY2NlcHRlZEV4dGVuc2lvbnNCdWlsZGVyLmFwcGVuZChp
dGVyYXRvci0+dmFsdWUpOwogICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKaW5kZXggNmMwOGJlMjFmMGUzMTY3MTI3
YWIzZjJiNGI5NTdmOWI0ZWJjZjgyMy4uOGUzMmViNTAxMDEzM2Y5ZWU4NzNlNzk1OGNlNGIzYjZj
N2JlYTBlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVj
dENhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2Fj
aGUuY3BwCkBAIC05NCw3ICs5NCw3IEBAIEFYT2JqZWN0Q2FjaGU6On5BWE9iamVjdENhY2hlKCkK
IHsKICAgICBIYXNoTWFwPEFYSUQsIFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiA+OjppdGVy
YXRvciBlbmQgPSBtX29iamVjdHMuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPEFYSUQsIFJlZlB0
cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiA+OjppdGVyYXRvciBpdCA9IG1fb2JqZWN0cy5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqID0g
KCppdCkuc2Vjb25kLmdldCgpOworICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmogPSAo
Kml0KS52YWx1ZS5nZXQoKTsKICAgICAgICAgZGV0YWNoV3JhcHBlcihvYmopOwogICAgICAgICBv
YmotPmRldGFjaCgpOwogICAgICAgICByZW1vdmVBWElEKG9iaik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0RPTU9iamVjdENhY2hlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvRE9NT2JqZWN0Q2FjaGUuY3BwCmluZGV4IDJlN2YxMDZl
NzllMzFjNzMxNTRhYjljZmFhMTlhNTg5ZTlkZTdkZDUuLmRkN2QwNDk3MThjODEyMmYyNGIzOGRi
ODgzZTViNmI2NGUyZWMwNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dv
YmplY3QvRE9NT2JqZWN0Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dv
YmplY3QvRE9NT2JqZWN0Q2FjaGUuY3BwCkBAIC03NCw3ICs3NCw3IEBAIHZvaWQgRE9NT2JqZWN0
Q2FjaGU6OmNsZWFyQnlGcmFtZShXZWJDb3JlOjpGcmFtZSogZnJhbWUpCiAgICAgLy8gaXRlcmF0
aW5nIHRoZSBjYWNoZSBpdHNlbGYuCiAgICAgRE9NT2JqZWN0TWFwOjppdGVyYXRvciBlbmQgPSBk
b21PYmplY3RzKCkuZW5kKCk7CiAgICAgZm9yIChET01PYmplY3RNYXA6Oml0ZXJhdG9yIGl0ZXIg
PSBkb21PYmplY3RzKCkuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewotICAgICAgICBE
T01PYmplY3RDYWNoZURhdGEqIGRhdGEgPSBpdGVyLT5zZWNvbmQ7CisgICAgICAgIERPTU9iamVj
dENhY2hlRGF0YSogZGF0YSA9IGl0ZXItPnZhbHVlOwogICAgICAgICBBU1NFUlQoZGF0YSk7CiAg
ICAgICAgIGlmICgoIWZyYW1lIHx8IGRhdGEtPmZyYW1lID09IGZyYW1lKSAmJiBkYXRhLT50aW1l
c1JldHVybmVkKQogICAgICAgICAgICAgdG9VbnJlZi5hcHBlbmQoZGF0YSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01PYmplY3RIYXNoVGFibGVNYXAuaCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTU9iamVjdEhhc2hUYWJsZU1hcC5oCmluZGV4IDY0
ODI4ZDY5ODhmN2U0M2IzZTlhNDYzNjkwOGNkMjEyNTQ3YTJmZmMuLjc1M2MwNGQyZmM1NzcyZTA5
NTlkY2VmNWFjNjFiYTMwYzk2ZTE3OGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0RPTU9iamVjdEhhc2hUYWJsZU1hcC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0RPTU9iamVjdEhhc2hUYWJsZU1hcC5oCkBAIC0zOSwxNSArMzksMTUgQEAgcHVibGlj
OgogICAgIH5ET01PYmplY3RIYXNoVGFibGVNYXAoKQogICAgIHsKICAgICAgICAgZm9yIChIYXNo
TWFwPGNvbnN0IEpTQzo6SGFzaFRhYmxlKiwgSlNDOjpIYXNoVGFibGU+OjppdGVyYXRvciBpdGVy
ID0gbV9tYXAuYmVnaW4oKTsgaXRlciAhPSBtX21hcC5lbmQoKTsgKytpdGVyKQotICAgICAgICAg
ICAgaXRlci0+c2Vjb25kLmRlbGV0ZVRhYmxlKCk7CisgICAgICAgICAgICBpdGVyLT52YWx1ZS5k
ZWxldGVUYWJsZSgpOwogICAgIH0KIAogICAgIGNvbnN0IEpTQzo6SGFzaFRhYmxlKiBnZXQoY29u
c3QgSlNDOjpIYXNoVGFibGUqIHN0YXRpY1RhYmxlKQogICAgIHsKICAgICAgICAgSGFzaE1hcDxj
b25zdCBKU0M6Okhhc2hUYWJsZSosIEpTQzo6SGFzaFRhYmxlPjo6aXRlcmF0b3IgaXRlciA9IG1f
bWFwLmZpbmQoc3RhdGljVGFibGUpOwogICAgICAgICBpZiAoaXRlciAhPSBtX21hcC5lbmQoKSkK
LSAgICAgICAgICAgIHJldHVybiAmaXRlci0+c2Vjb25kOwotICAgICAgICByZXR1cm4gJm1fbWFw
LnNldChzdGF0aWNUYWJsZSwgc3RhdGljVGFibGUtPmNvcHkoKSkuaXRlcmF0b3ItPnNlY29uZDsK
KyAgICAgICAgICAgIHJldHVybiAmaXRlci0+dmFsdWU7CisgICAgICAgIHJldHVybiAmbV9tYXAu
c2V0KHN0YXRpY1RhYmxlLCBzdGF0aWNUYWJsZS0+Y29weSgpKS5pdGVyYXRvci0+dmFsdWU7CiAg
ICAgfQogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01CaW5kaW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGlu
Zy5jcHAKaW5kZXggZGQ2Y2RmYWRiOTIyZjk2N2Q4ZDg1M2QyZTgzNjI2YjlhZDgyYjliYi4uNTYw
ZWU4YzY2NmRjNzYxNDE2ZmExMzRmYjVkYzA1ZjM5NWY2NDgxMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCkBAIC0yNTksNyArMjU5LDcgQEAgU3RydWN0
dXJlKiBjYWNoZURPTVN0cnVjdHVyZShKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBT
dHJ1Y3R1cmUqIHN0cnVjdHUKIHsKICAgICBKU0RPTVN0cnVjdHVyZU1hcCYgc3RydWN0dXJlcyA9
IGdsb2JhbE9iamVjdC0+c3RydWN0dXJlcygpOwogICAgIEFTU0VSVCghc3RydWN0dXJlcy5jb250
YWlucyhjbGFzc0luZm8pKTsKLSAgICByZXR1cm4gc3RydWN0dXJlcy5zZXQoY2xhc3NJbmZvLCBX
cml0ZUJhcnJpZXI8U3RydWN0dXJlPihnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgZ2xvYmFs
T2JqZWN0LCBzdHJ1Y3R1cmUpKS5pdGVyYXRvci0+c2Vjb25kLmdldCgpOworICAgIHJldHVybiBz
dHJ1Y3R1cmVzLnNldChjbGFzc0luZm8sIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KGdsb2JhbE9i
amVjdC0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkpLml0ZXJhdG9yLT52
YWx1ZS5nZXQoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwCmluZGV4IGU0ZDE5ZGZlZjJj
YjllN2MzN2UzZDk4MGVjYzc1MWEzMWVmMmYxOWYuLmQ1YTk1YjE5OGNlN2E3YTRhODFiYjIzM2Qw
ODNhMTQwNjkxM2ExMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NR2xvYmFsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TUdsb2JhbE9iamVjdC5jcHAKQEAgLTg4LDExICs4OCwxMSBAQCB2b2lkIEpTRE9NR2xvYmFsT2Jq
ZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAK
ICAgICBKU0RPTVN0cnVjdHVyZU1hcDo6aXRlcmF0b3IgZW5kID0gdGhpc09iamVjdC0+c3RydWN0
dXJlcygpLmVuZCgpOwogICAgIGZvciAoSlNET01TdHJ1Y3R1cmVNYXA6Oml0ZXJhdG9yIGl0ID0g
dGhpc09iamVjdC0+c3RydWN0dXJlcygpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAg
ICAgdmlzaXRvci5hcHBlbmQoJml0LT5zZWNvbmQpOworICAgICAgICB2aXNpdG9yLmFwcGVuZCgm
aXQtPnZhbHVlKTsKIAogICAgIEpTRE9NQ29uc3RydWN0b3JNYXA6Oml0ZXJhdG9yIGVuZDIgPSB0
aGlzT2JqZWN0LT5jb25zdHJ1Y3RvcnMoKS5lbmQoKTsKICAgICBmb3IgKEpTRE9NQ29uc3RydWN0
b3JNYXA6Oml0ZXJhdG9yIGl0MiA9IHRoaXNPYmplY3QtPmNvbnN0cnVjdG9ycygpLmJlZ2luKCk7
IGl0MiAhPSBlbmQyOyArK2l0MikKLSAgICAgICAgdmlzaXRvci5hcHBlbmQoJml0Mi0+c2Vjb25k
KTsKKyAgICAgICAgdmlzaXRvci5hcHBlbmQoJml0Mi0+dmFsdWUpOwogfQogCiB2b2lkIEpTRE9N
R2xvYmFsT2JqZWN0OjpzZXRDdXJyZW50RXZlbnQoRXZlbnQqIGN1cnJlbnRFdmVudCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmggYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oCmluZGV4IDQyMjU4
YjBiMjEyNWE4M2U3YWE4OWQ1Yzc5MzNjMTI4Y2QzMDlhYjguLjkzNDFkZDBhZTY1YTg2ODdiODZm
ZjExNDYzNDYzYzFlZGU0MGM0MmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NR2xvYmFsT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01HbG9iYWxPYmplY3QuaApAQCAtOTIsNyArOTIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIEpTQzo6SlNPYmplY3QqIGNvbnN0cnVjdG9yID0gQ29uc3RydWN0b3JDbGFzczo6
Y3JlYXRlKGV4ZWMsIENvbnN0cnVjdG9yQ2xhc3M6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9i
YWxEYXRhKCksIGNvbnN0X2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpLCBn
bG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSwgY29uc3RfY2FzdDxKU0RPTUdsb2JhbE9i
amVjdCo+KGdsb2JhbE9iamVjdCkpOwogICAgICAgICBBU1NFUlQoIWNvbnN0X2Nhc3Q8SlNET01H
bG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpLT5jb25zdHJ1Y3RvcnMoKS5jb250YWlucygmQ29u
c3RydWN0b3JDbGFzczo6c19pbmZvKSk7CiAgICAgICAgIEpTQzo6V3JpdGVCYXJyaWVyPEpTQzo6
SlNPYmplY3Q+IHRlbXA7Ci0gICAgICAgIGNvbnN0X2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihn
bG9iYWxPYmplY3QpLT5jb25zdHJ1Y3RvcnMoKS5hZGQoJkNvbnN0cnVjdG9yQ2xhc3M6OnNfaW5m
bywgdGVtcCkuaXRlcmF0b3ItPnNlY29uZC5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxP
YmplY3QsIGNvbnN0cnVjdG9yKTsKKyAgICAgICAgY29uc3RfY2FzdDxKU0RPTUdsb2JhbE9iamVj
dCo+KGdsb2JhbE9iamVjdCktPmNvbnN0cnVjdG9ycygpLmFkZCgmQ29uc3RydWN0b3JDbGFzczo6
c19pbmZvLCB0ZW1wKS5pdGVyYXRvci0+dmFsdWUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xv
YmFsT2JqZWN0LCBjb25zdHJ1Y3Rvcik7CiAgICAgICAgIHJldHVybiBjb25zdHJ1Y3RvcjsKICAg
ICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1BhZ2VTY3JpcHRE
ZWJ1Z1NlcnZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9QYWdlU2NyaXB0RGVi
dWdTZXJ2ZXIuY3BwCmluZGV4IGZmMGFlZWZiNTBhNjA4YzkyMTAzM2Q5ODc5MzNjZGM2NWZjZmQy
YzkuLmVkNzQzY2M5ZTllYzUxYzBkNTMxNjEwOTRmMzNkOWM5MmFkYjEwZDYgMTAwNzU1Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUGFnZVNjcmlwdERlYnVnU2VydmVyLmNwcApA
QCAtODIsNyArODIsNyBAQCB2b2lkIFBhZ2VTY3JpcHREZWJ1Z1NlcnZlcjo6YWRkTGlzdGVuZXIo
U2NyaXB0RGVidWdMaXN0ZW5lciogbGlzdGVuZXIsIFBhZ2UqIHBhZwogICAgIEFTU0VSVF9BUkco
bGlzdGVuZXIsIGxpc3RlbmVyKTsKICAgICBBU1NFUlRfQVJHKHBhZ2UsIHBhZ2UpOwogCi0gICAg
T3duUHRyPExpc3RlbmVyU2V0PiYgbGlzdGVuZXJzID0gbV9wYWdlTGlzdGVuZXJzTWFwLmFkZChw
YWdlLCBudWxscHRyKS5pdGVyYXRvci0+c2Vjb25kOworICAgIE93blB0cjxMaXN0ZW5lclNldD4m
IGxpc3RlbmVycyA9IG1fcGFnZUxpc3RlbmVyc01hcC5hZGQocGFnZSwgbnVsbHB0cikuaXRlcmF0
b3ItPnZhbHVlOwogICAgIGlmICghbGlzdGVuZXJzKQogICAgICAgICBsaXN0ZW5lcnMgPSBhZG9w
dFB0cihuZXcgTGlzdGVuZXJTZXQpOwogICAgIGxpc3RlbmVycy0+YWRkKGxpc3RlbmVyKTsKQEAg
LTEwMCw3ICsxMDAsNyBAQCB2b2lkIFBhZ2VTY3JpcHREZWJ1Z1NlcnZlcjo6cmVtb3ZlTGlzdGVu
ZXIoU2NyaXB0RGVidWdMaXN0ZW5lciogbGlzdGVuZXIsIFBhZ2UqCiAgICAgaWYgKGl0ID09IG1f
cGFnZUxpc3RlbmVyc01hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgTGlzdGVuZXJT
ZXQqIGxpc3RlbmVycyA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgTGlzdGVuZXJTZXQqIGxpc3Rl
bmVycyA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICBsaXN0ZW5lcnMtPnJlbW92ZShsaXN0ZW5lcik7
CiAgICAgaWYgKGxpc3RlbmVycy0+aXNFbXB0eSgpKSB7CiAgICAgICAgIG1fcGFnZUxpc3RlbmVy
c01hcC5yZW1vdmUoaXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nj
cmlwdENhY2hlZEZyYW1lRGF0YS5jcHAKaW5kZXggZGVmNzljZjJjMTZiYTc2ZTUxYmQ4ZjAxZmYw
NzAwOWZlZDIwY2M2ZS4uYzYyNDg3ZTgwNWZkY2MxYjcwMWM1YmJmNWQ5Njk0Y2JmYmQ3NDRkYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q2FjaGVkRnJhbWVE
YXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDYWNoZWRGcmFt
ZURhdGEuY3BwCkBAIC01Myw4ICs1Myw4IEBAIFNjcmlwdENhY2hlZEZyYW1lRGF0YTo6U2NyaXB0
Q2FjaGVkRnJhbWVEYXRhKEZyYW1lKiBmcmFtZSkKIAogICAgIFNjcmlwdENvbnRyb2xsZXI6OlNo
ZWxsTWFwOjppdGVyYXRvciB3aW5kb3dTaGVsbHNFbmQgPSB3aW5kb3dTaGVsbHMuZW5kKCk7CiAg
ICAgZm9yIChTY3JpcHRDb250cm9sbGVyOjpTaGVsbE1hcDo6aXRlcmF0b3IgaXRlciA9IHdpbmRv
d1NoZWxscy5iZWdpbigpOyBpdGVyICE9IHdpbmRvd1NoZWxsc0VuZDsgKytpdGVyKSB7Ci0gICAg
ICAgIEpTRE9NV2luZG93KiB3aW5kb3cgPSBpdGVyLT5zZWNvbmQtPndpbmRvdygpOwotICAgICAg
ICBtX3dpbmRvd3MuYWRkKGl0ZXItPmZpcnN0LmdldCgpLCBTdHJvbmc8SlNET01XaW5kb3c+KHdp
bmRvdy0+Z2xvYmFsRGF0YSgpLCB3aW5kb3cpKTsKKyAgICAgICAgSlNET01XaW5kb3cqIHdpbmRv
dyA9IGl0ZXItPnZhbHVlLT53aW5kb3coKTsKKyAgICAgICAgbV93aW5kb3dzLmFkZChpdGVyLT5r
ZXkuZ2V0KCksIFN0cm9uZzxKU0RPTVdpbmRvdz4od2luZG93LT5nbG9iYWxEYXRhKCksIHdpbmRv
dykpOwogICAgIH0KIAogICAgIHNjcmlwdENvbnRyb2xsZXItPmF0dGFjaERlYnVnZ2VyKDApOwpA
QCAtNzQsOCArNzQsOCBAQCB2b2lkIFNjcmlwdENhY2hlZEZyYW1lRGF0YTo6cmVzdG9yZShGcmFt
ZSogZnJhbWUpCiAKICAgICBTY3JpcHRDb250cm9sbGVyOjpTaGVsbE1hcDo6aXRlcmF0b3Igd2lu
ZG93U2hlbGxzRW5kID0gd2luZG93U2hlbGxzLmVuZCgpOwogICAgIGZvciAoU2NyaXB0Q29udHJv
bGxlcjo6U2hlbGxNYXA6Oml0ZXJhdG9yIGl0ZXIgPSB3aW5kb3dTaGVsbHMuYmVnaW4oKTsgaXRl
ciAhPSB3aW5kb3dTaGVsbHNFbmQ7ICsraXRlcikgewotICAgICAgICBET01XcmFwcGVyV29ybGQq
IHdvcmxkID0gaXRlci0+Zmlyc3QuZ2V0KCk7Ci0gICAgICAgIEpTRE9NV2luZG93U2hlbGwqIHdp
bmRvd1NoZWxsID0gaXRlci0+c2Vjb25kLmdldCgpOworICAgICAgICBET01XcmFwcGVyV29ybGQq
IHdvcmxkID0gaXRlci0+a2V5LmdldCgpOworICAgICAgICBKU0RPTVdpbmRvd1NoZWxsKiB3aW5k
b3dTaGVsbCA9IGl0ZXItPnZhbHVlLmdldCgpOwogCiAgICAgICAgIGlmIChKU0RPTVdpbmRvdyog
d2luZG93ID0gbV93aW5kb3dzLmdldCh3b3JsZCkuZ2V0KCkpCiAgICAgICAgICAgICB3aW5kb3dT
aGVsbC0+c2V0V2luZG93KHdpbmRvdy0+Z2xvYmFsRGF0YSgpLCB3aW5kb3cpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAppbmRleCA2ODhjMTIy
ZmMyNWIyMmNmM2QyZDE2MjlmNWQ3YmM2M2Y1Yzg1M2Q4Li45NTlmOGEyZWZlNGUyZTNmZGUwZjdj
ZDI2ZmNiYzQwMzA1MTBhY2UwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TY3JpcHRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
Y3JpcHRDb250cm9sbGVyLmNwcApAQCAtODksNyArODksNyBAQCBTY3JpcHRDb250cm9sbGVyOjp+
U2NyaXB0Q29udHJvbGxlcigpCiAgICAgLy8gSXQncyBsaWtlbHkgdGhhdCBkZXN0cm95aW5nIG1f
d2luZG93U2hlbGxzIHdpbGwgY3JlYXRlIGEgbG90IG9mIGdhcmJhZ2UuCiAgICAgaWYgKCFtX3dp
bmRvd1NoZWxscy5pc0VtcHR5KCkpIHsKICAgICAgICAgd2hpbGUgKCFtX3dpbmRvd1NoZWxscy5p
c0VtcHR5KCkpCi0gICAgICAgICAgICBkZXN0cm95V2luZG93U2hlbGwobV93aW5kb3dTaGVsbHMu
YmVnaW4oKS0+Zmlyc3QuZ2V0KCkpOworICAgICAgICAgICAgZGVzdHJveVdpbmRvd1NoZWxsKG1f
d2luZG93U2hlbGxzLmJlZ2luKCktPmtleS5nZXQoKSk7CiAgICAgICAgIGdjQ29udHJvbGxlcigp
LmdhcmJhZ2VDb2xsZWN0U29vbigpOwogICAgIH0KIH0KQEAgLTE3Niw3ICsxNzYsNyBAQCB2b2lk
IFNjcmlwdENvbnRyb2xsZXI6OmNsZWFyV2luZG93U2hlbGwoRE9NV2luZG93KiBuZXdET01XaW5k
b3csIGJvb2wgZ29pbmdJbnRvUAogICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93QmFz
ZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogCiAgICAgZm9yIChTaGVsbE1hcDo6aXRlcmF0b3Ig
aXRlciA9IG1fd2luZG93U2hlbGxzLmJlZ2luKCk7IGl0ZXIgIT0gbV93aW5kb3dTaGVsbHMuZW5k
KCk7ICsraXRlcikgewotICAgICAgICBKU0RPTVdpbmRvd1NoZWxsKiB3aW5kb3dTaGVsbCA9IGl0
ZXItPnNlY29uZC5nZXQoKTsKKyAgICAgICAgSlNET01XaW5kb3dTaGVsbCogd2luZG93U2hlbGwg
PSBpdGVyLT52YWx1ZS5nZXQoKTsKIAogICAgICAgICBpZiAod2luZG93U2hlbGwtPndpbmRvdygp
LT5pbXBsKCkgPT0gbmV3RE9NV2luZG93KQogICAgICAgICAgICAgY29udGludWU7CkBAIC0yNjks
NyArMjY5LDcgQEAgYm9vbCBTY3JpcHRDb250cm9sbGVyOjpjYW5BY2Nlc3NGcm9tQ3VycmVudE9y
aWdpbihGcmFtZSAqZnJhbWUpCiB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmF0dGFjaERlYnVnZ2Vy
KEpTQzo6RGVidWdnZXIqIGRlYnVnZ2VyKQogewogICAgIGZvciAoU2hlbGxNYXA6Oml0ZXJhdG9y
IGl0ZXIgPSBtX3dpbmRvd1NoZWxscy5iZWdpbigpOyBpdGVyICE9IG1fd2luZG93U2hlbGxzLmVu
ZCgpOyArK2l0ZXIpCi0gICAgICAgIGF0dGFjaERlYnVnZ2VyKGl0ZXItPnNlY29uZC5nZXQoKSwg
ZGVidWdnZXIpOworICAgICAgICBhdHRhY2hEZWJ1Z2dlcihpdGVyLT52YWx1ZS5nZXQoKSwgZGVi
dWdnZXIpOwogfQogCiB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmF0dGFjaERlYnVnZ2VyKEpTRE9N
V2luZG93U2hlbGwqIHNoZWxsLCBKU0M6OkRlYnVnZ2VyKiBkZWJ1Z2dlcikKQEAgLTI4Nyw4ICsy
ODcsOCBAQCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmF0dGFjaERlYnVnZ2VyKEpTRE9NV2luZG93
U2hlbGwqIHNoZWxsLCBKU0M6OkRlYnVnZ2VyKiBkZQogdm9pZCBTY3JpcHRDb250cm9sbGVyOjp1
cGRhdGVEb2N1bWVudCgpCiB7CiAgICAgZm9yIChTaGVsbE1hcDo6aXRlcmF0b3IgaXRlciA9IG1f
d2luZG93U2hlbGxzLmJlZ2luKCk7IGl0ZXIgIT0gbV93aW5kb3dTaGVsbHMuZW5kKCk7ICsraXRl
cikgewotICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhpdGVyLT5maXJzdC0+Z2xvYmFsRGF0YSgp
KTsKLSAgICAgICAgaXRlci0+c2Vjb25kLT53aW5kb3coKS0+dXBkYXRlRG9jdW1lbnQoKTsKKyAg
ICAgICAgSlNMb2NrSG9sZGVyIGxvY2soaXRlci0+a2V5LT5nbG9iYWxEYXRhKCkpOworICAgICAg
ICBpdGVyLT52YWx1ZS0+d2luZG93KCktPnVwZGF0ZURvY3VtZW50KCk7CiAgICAgfQogfQogCkBA
IC0zMjUsNyArMzI1LDcgQEAgUGFzc1JlZlB0cjxCaW5kaW5nczo6Um9vdE9iamVjdD4gU2NyaXB0
Q29udHJvbGxlcjo6Y3JlYXRlUm9vdE9iamVjdCh2b2lkKiBuYXRpdmUKIHsKICAgICBSb290T2Jq
ZWN0TWFwOjppdGVyYXRvciBpdCA9IG1fcm9vdE9iamVjdHMuZmluZChuYXRpdmVIYW5kbGUpOwog
ICAgIGlmIChpdCAhPSBtX3Jvb3RPYmplY3RzLmVuZCgpKQotICAgICAgICByZXR1cm4gaXQtPnNl
Y29uZDsKKyAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKIAogICAgIFJlZlB0cjxCaW5kaW5nczo6
Um9vdE9iamVjdD4gcm9vdE9iamVjdCA9IEJpbmRpbmdzOjpSb290T2JqZWN0OjpjcmVhdGUobmF0
aXZlSGFuZGxlLCBnbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSkpOwogCkBAIC0zNDEsOCArMzQx
LDggQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpzZXRDYXB0dXJlQ2FsbFN0YWNrRm9yVW5jYXVn
aHRFeGNlcHRpb25zKGJvb2wpCiB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmNvbGxlY3RJc29sYXRl
ZENvbnRleHRzKFZlY3RvcjxzdGQ6OnBhaXI8SlNDOjpFeGVjU3RhdGUqLCBTZWN1cml0eU9yaWdp
bio+ID4mIHJlc3VsdCkKIHsKICAgICBmb3IgKFNoZWxsTWFwOjppdGVyYXRvciBpdGVyID0gbV93
aW5kb3dTaGVsbHMuYmVnaW4oKTsgaXRlciAhPSBtX3dpbmRvd1NoZWxscy5lbmQoKTsgKytpdGVy
KSB7Ci0gICAgICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gaXRlci0+c2Vjb25kLT53aW5kb3co
KS0+Z2xvYmFsRXhlYygpOwotICAgICAgICBTZWN1cml0eU9yaWdpbiogb3JpZ2luID0gaXRlci0+
c2Vjb25kLT53aW5kb3coKS0+aW1wbCgpLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpOwor
ICAgICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IGl0ZXItPnZhbHVlLT53aW5kb3coKS0+Z2xv
YmFsRXhlYygpOworICAgICAgICBTZWN1cml0eU9yaWdpbiogb3JpZ2luID0gaXRlci0+dmFsdWUt
PndpbmRvdygpLT5pbXBsKCktPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCk7CiAgICAgICAg
IHJlc3VsdC5hcHBlbmQoc3RkOjpwYWlyPFNjcmlwdFN0YXRlKiwgU2VjdXJpdHlPcmlnaW4qPihl
eGVjLCBvcmlnaW4pKTsKICAgICB9CiB9CkBAIC00MzAsNyArNDMwLDcgQEAgdm9pZCBTY3JpcHRD
b250cm9sbGVyOjpjbGVhbnVwU2NyaXB0T2JqZWN0c0ZvclBsdWdpbih2b2lkKiBuYXRpdmVIYW5k
bGUpCiAgICAgaWYgKGl0ID09IG1fcm9vdE9iamVjdHMuZW5kKCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGl0LT5zZWNvbmQtPmludmFsaWRhdGUoKTsKKyAgICBpdC0+dmFsdWUtPmludmFsaWRh
dGUoKTsKICAgICBtX3Jvb3RPYmplY3RzLnJlbW92ZShpdCk7CiB9CiAKQEAgLTQ0MCw3ICs0NDAs
NyBAQCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmNsZWFyU2NyaXB0T2JqZWN0cygpCiAKICAgICBS
b290T2JqZWN0TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3Jvb3RPYmplY3RzLmVuZCgpOwog
ICAgIGZvciAoUm9vdE9iamVjdE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Jvb3RPYmplY3Rz
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+aW52YWxpZGF0
ZSgpOworICAgICAgICBpdC0+dmFsdWUtPmludmFsaWRhdGUoKTsKIAogICAgIG1fcm9vdE9iamVj
dHMuY2xlYXIoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2Ny
aXB0Q29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJv
bGxlci5oCmluZGV4IGJjZWQzZjgzNThlMmJiMDViZGI2ZDBkNWM1NDcxYTBhNDFjMDY5N2MuLmZh
ZDRkNDQzYTdjMTdlMmVkODBiMzk5NWFlNjY2YTM5ZDIxOTY1OGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmgKQEAgLTc0LDEyICs3NCwxMiBAQCBw
dWJsaWM6CiAgICAgSlNET01XaW5kb3dTaGVsbCogd2luZG93U2hlbGwoRE9NV3JhcHBlcldvcmxk
KiB3b3JsZCkKICAgICB7CiAgICAgICAgIFNoZWxsTWFwOjppdGVyYXRvciBpdGVyID0gbV93aW5k
b3dTaGVsbHMuZmluZCh3b3JsZCk7Ci0gICAgICAgIHJldHVybiAoaXRlciAhPSBtX3dpbmRvd1No
ZWxscy5lbmQoKSkgPyBpdGVyLT5zZWNvbmQuZ2V0KCkgOiBpbml0U2NyaXB0KHdvcmxkKTsKKyAg
ICAgICAgcmV0dXJuIChpdGVyICE9IG1fd2luZG93U2hlbGxzLmVuZCgpKSA/IGl0ZXItPnZhbHVl
LmdldCgpIDogaW5pdFNjcmlwdCh3b3JsZCk7CiAgICAgfQogICAgIEpTRE9NV2luZG93U2hlbGwq
IGV4aXN0aW5nV2luZG93U2hlbGwoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCkgY29uc3QKICAgICB7
CiAgICAgICAgIFNoZWxsTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbV93aW5kb3dTaGVsbHMu
ZmluZCh3b3JsZCk7Ci0gICAgICAgIHJldHVybiAoaXRlciAhPSBtX3dpbmRvd1NoZWxscy5lbmQo
KSkgPyBpdGVyLT5zZWNvbmQuZ2V0KCkgOiAwOworICAgICAgICByZXR1cm4gKGl0ZXIgIT0gbV93
aW5kb3dTaGVsbHMuZW5kKCkpID8gaXRlci0+dmFsdWUuZ2V0KCkgOiAwOwogICAgIH0KICAgICBK
U0RPTVdpbmRvdyogZ2xvYmFsT2JqZWN0KERPTVdyYXBwZXJXb3JsZCogd29ybGQpCiAgICAgewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCmlu
ZGV4IDliMmIwOTM2YjgzZmYyNDBiY2U1NjE2NjViMGRiZDQxZDU5MmRiOWYuLmM4YTI2NjA1ZGUw
M2Q5MDkzODg2YmY2ZDZiMjE4YTYzN2FkNWNiNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHAKQEAgLTc1LDExICs3NSwxMSBAQCBTdHJp
bmcgU2NyaXB0RGVidWdTZXJ2ZXI6OnNldEJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJ
RCwgY29uc3QgU2NyaXB0QnJlYQogICAgIFNvdXJjZUlkVG9CcmVha3BvaW50c01hcDo6aXRlcmF0
b3IgaXQgPSBtX3NvdXJjZUlkVG9CcmVha3BvaW50cy5maW5kKHNvdXJjZUlEVmFsdWUpOwogICAg
IGlmIChpdCA9PSBtX3NvdXJjZUlkVG9CcmVha3BvaW50cy5lbmQoKSkKICAgICAgICAgaXQgPSBt
X3NvdXJjZUlkVG9CcmVha3BvaW50cy5zZXQoc291cmNlSURWYWx1ZSwgTGluZVRvQnJlYWtwb2lu
dE1hcCgpKS5pdGVyYXRvcjsKLSAgICBMaW5lVG9CcmVha3BvaW50TWFwOjppdGVyYXRvciBicmVh
a3NJdCA9IGl0LT5zZWNvbmQuZmluZChzY3JpcHRCcmVha3BvaW50LmxpbmVOdW1iZXIgKyAxKTsK
LSAgICBpZiAoYnJlYWtzSXQgPT0gaXQtPnNlY29uZC5lbmQoKSkKLSAgICAgICAgYnJlYWtzSXQg
PSBpdC0+c2Vjb25kLnNldChzY3JpcHRCcmVha3BvaW50LmxpbmVOdW1iZXIgKyAxLCBCcmVha3Bv
aW50c0luTGluZSgpKS5pdGVyYXRvcjsKKyAgICBMaW5lVG9CcmVha3BvaW50TWFwOjppdGVyYXRv
ciBicmVha3NJdCA9IGl0LT52YWx1ZS5maW5kKHNjcmlwdEJyZWFrcG9pbnQubGluZU51bWJlciAr
IDEpOworICAgIGlmIChicmVha3NJdCA9PSBpdC0+dmFsdWUuZW5kKCkpCisgICAgICAgIGJyZWFr
c0l0ID0gaXQtPnZhbHVlLnNldChzY3JpcHRCcmVha3BvaW50LmxpbmVOdW1iZXIgKyAxLCBCcmVh
a3BvaW50c0luTGluZSgpKS5pdGVyYXRvcjsKIAotICAgIEJyZWFrcG9pbnRzSW5MaW5lJiBicmVh
a3NWZWN0b3IgPSBicmVha3NJdC0+c2Vjb25kOworICAgIEJyZWFrcG9pbnRzSW5MaW5lJiBicmVh
a3NWZWN0b3IgPSBicmVha3NJdC0+dmFsdWU7CiAgICAgdW5zaWduZWQgYnJlYWtzQ291bnQgPSBi
cmVha3NWZWN0b3Iuc2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBicmVha3ND
b3VudDsgaSsrKSB7CiAgICAgICAgIGlmIChicmVha3NWZWN0b3IuYXQoaSkuY29sdW1uTnVtYmVy
ID09IHNjcmlwdEJyZWFrcG9pbnQuY29sdW1uTnVtYmVyKQpAQCAtMTEyLDExICsxMTIsMTEgQEAg
dm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6cmVtb3ZlQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIGJy
ZWFrcG9pbnRJZCkKICAgICBTb3VyY2VJZFRvQnJlYWtwb2ludHNNYXA6Oml0ZXJhdG9yIGl0ID0g
bV9zb3VyY2VJZFRvQnJlYWtwb2ludHMuZmluZChzb3VyY2VJRFZhbHVlKTsKICAgICBpZiAoaXQg
PT0gbV9zb3VyY2VJZFRvQnJlYWtwb2ludHMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBM
aW5lVG9CcmVha3BvaW50TWFwOjppdGVyYXRvciBicmVha3NJdCA9IGl0LT5zZWNvbmQuZmluZChs
aW5lTnVtYmVyICsgMSk7Ci0gICAgaWYgKGJyZWFrc0l0ID09IGl0LT5zZWNvbmQuZW5kKCkpCisg
ICAgTGluZVRvQnJlYWtwb2ludE1hcDo6aXRlcmF0b3IgYnJlYWtzSXQgPSBpdC0+dmFsdWUuZmlu
ZChsaW5lTnVtYmVyICsgMSk7CisgICAgaWYgKGJyZWFrc0l0ID09IGl0LT52YWx1ZS5lbmQoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgQnJlYWtwb2ludHNJbkxpbmUmIGJyZWFrc1ZlY3RvciA9
IGJyZWFrc0l0LT5zZWNvbmQ7CisgICAgQnJlYWtwb2ludHNJbkxpbmUmIGJyZWFrc1ZlY3RvciA9
IGJyZWFrc0l0LT52YWx1ZTsKICAgICB1bnNpZ25lZCBicmVha3NDb3VudCA9IGJyZWFrc1ZlY3Rv
ci5zaXplKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJyZWFrc0NvdW50OyBpKysp
IHsKICAgICAgICAgaWYgKGJyZWFrc1ZlY3Rvci5hdChpKS5jb2x1bW5OdW1iZXIgPT0gc3RhdGlj
X2Nhc3Q8aW50Pihjb2x1bW5OdW1iZXIpKSB7CkBAIC0xNzgsMTIgKzE3OCwxMiBAQCBib29sIFNj
cmlwdERlYnVnU2VydmVyOjpoYXNCcmVha3BvaW50KGludHB0cl90IHNvdXJjZUlELCBjb25zdCBU
ZXh0UG9zaXRpb24mIHBvcwogICAgIGlmIChsaW5lTnVtYmVyIDwgMCB8fCBjb2x1bW5OdW1iZXIg
PCAwKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBMaW5lVG9CcmVha3BvaW50TWFwOjpj
b25zdF9pdGVyYXRvciBicmVha3NJdCA9IGl0LT5zZWNvbmQuZmluZChsaW5lTnVtYmVyICsgMSk7
Ci0gICAgaWYgKGJyZWFrc0l0ID09IGl0LT5zZWNvbmQuZW5kKCkpCisgICAgTGluZVRvQnJlYWtw
b2ludE1hcDo6Y29uc3RfaXRlcmF0b3IgYnJlYWtzSXQgPSBpdC0+dmFsdWUuZmluZChsaW5lTnVt
YmVyICsgMSk7CisgICAgaWYgKGJyZWFrc0l0ID09IGl0LT52YWx1ZS5lbmQoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgYm9vbCBoaXQgPSBmYWxzZTsKLSAgICBjb25zdCBCcmVha3Bv
aW50c0luTGluZSYgYnJlYWtzVmVjdG9yID0gYnJlYWtzSXQtPnNlY29uZDsKKyAgICBjb25zdCBC
cmVha3BvaW50c0luTGluZSYgYnJlYWtzVmVjdG9yID0gYnJlYWtzSXQtPnZhbHVlOwogICAgIHVu
c2lnbmVkIGJyZWFrc0NvdW50ID0gYnJlYWtzVmVjdG9yLnNpemUoKTsKICAgICB1bnNpZ25lZCBp
OwogICAgIGZvciAoaSA9IDA7IGkgPCBicmVha3NDb3VudDsgaSsrKSB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAppbmRleCBl
NjYzYzFhNTNmYWE2NTllMDdmZWZhNzhlYmU5MDliOTFlNjA4NDQ1Li41MjA4MTRlYTMzODNiYjk3
MDNkMGRiMGQzOTZkYzc0ZjcwMmYyZjgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKQEAgLTQyNSw4ICs0MjUsOCBAQCBw
cml2YXRlOgogICAgICAgICAvLyBIYW5kbGUgZHVwbGljYXRlIHJlZmVyZW5jZXMKICAgICAgICAg
aWYgKGZvdW5kICE9IG1fb2JqZWN0UG9vbC5lbmQoKSkgewogICAgICAgICAgICAgd3JpdGUoT2Jq
ZWN0UmVmZXJlbmNlVGFnKTsKLSAgICAgICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQzMl90
Pihmb3VuZC0+c2Vjb25kKSA8IG1fb2JqZWN0UG9vbC5zaXplKCkpOwotICAgICAgICAgICAgd3Jp
dGVPYmplY3RJbmRleChmb3VuZC0+c2Vjb25kKTsKKyAgICAgICAgICAgIEFTU0VSVChzdGF0aWNf
Y2FzdDxpbnQzMl90Pihmb3VuZC0+dmFsdWUpIDwgbV9vYmplY3RQb29sLnNpemUoKSk7CisgICAg
ICAgICAgICB3cml0ZU9iamVjdEluZGV4KGZvdW5kLT52YWx1ZSk7CiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgfQogCkBAIC02NjcsNyArNjY3LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICBPYmplY3RQb29sOjppdGVyYXRvciBpbmRleCA9IG1fdHJhbnNmZXJyZWRNZXNz
YWdlUG9ydHMuZmluZChvYmopOwogICAgICAgICAgICAgICAgIGlmIChpbmRleCAhPSBtX3RyYW5z
ZmVycmVkTWVzc2FnZVBvcnRzLmVuZCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIHdyaXRlKE1l
c3NhZ2VQb3J0UmVmZXJlbmNlVGFnKTsKLSAgICAgICAgICAgICAgICAgICAgd3JpdGUoaW5kZXgt
PnNlY29uZCk7CisgICAgICAgICAgICAgICAgICAgIHdyaXRlKGluZGV4LT52YWx1ZSk7CiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAvLyBNZXNzYWdlUG9ydCBvYmplY3QgY291bGQgbm90IGJlIGZvdW5kIGluIHRyYW5z
ZmVycmVkIG1lc3NhZ2UgcG9ydHMKQEAgLTY4Myw3ICs2ODMsNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgIE9iamVjdFBvb2w6Oml0ZXJhdG9yIGluZGV4ID0gbV90cmFuc2ZlcnJlZEFycmF5
QnVmZmVycy5maW5kKG9iaik7CiAgICAgICAgICAgICAgICAgaWYgKGluZGV4ICE9IG1fdHJhbnNm
ZXJyZWRBcnJheUJ1ZmZlcnMuZW5kKCkpIHsKICAgICAgICAgICAgICAgICAgICAgd3JpdGUoQXJy
YXlCdWZmZXJUcmFuc2ZlclRhZyk7Ci0gICAgICAgICAgICAgICAgICAgIHdyaXRlKGluZGV4LT5z
ZWNvbmQpOworICAgICAgICAgICAgICAgICAgICB3cml0ZShpbmRleC0+dmFsdWUpOwogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgaWYgKCFzdGFydE9iamVjdEludGVybmFsKG9iaikpIC8vIGhhbmRsZSBkdXBsaWNhdGVz
CkBAIC03ODAsNyArNzgwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgU3RyaW5nQ29uc3RhbnRQb29s
OjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gbV9jb25zdGFudFBvb2wuYWRkKHN0ci5pbXBsKCksIG1f
Y29uc3RhbnRQb29sLnNpemUoKSk7CiAgICAgICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkp
IHsKICAgICAgICAgICAgIHdyaXRlKFN0cmluZ1Bvb2xUYWcpOwotICAgICAgICAgICAgd3JpdGVT
dHJpbmdJbmRleChhZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7CisgICAgICAgICAgICB3cml0
ZVN0cmluZ0luZGV4KGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9yVjgucG0KaW5kZXggNTUxMjU4YzFlNmFmODY0NmYzOThmODBiYzEwOTkz
MmI2YzMwMjBmMy4uZWM5MGY4NDBhY2U0NzNmZDBiYzFiNDg2YWVjYzllN2VlMTc3M2ZhNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgu
cG0KKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgu
cG0KQEAgLTI5ODUsNyArMjk4NSw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBs
YXRlPiAke2NsYXNzTmFtZX06OkdldFJhd1RlbXBsYXRlKCkKICAgICBWOFBlcklzb2xhdGVEYXRh
KiBkYXRhID0gVjhQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4UGVySXNvbGF0ZURh
dGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgp
LmZpbmQoJmluZm8pOwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5l
bmQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVz
dWx0LT52YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6
UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPSBjcmVhdGVSYXdUZW1wbGF0
ZSgpOwpAQCAtMjk5OCw3ICsyOTk4LDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVt
cGxhdGU+ICR7Y2xhc3NOYW1lfTo6R2V0VGVtcGxhdGUoKQogICAgIFY4UGVySXNvbGF0ZURhdGEq
IGRhdGEgPSBWOFBlcklzb2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhQZXJJc29sYXRlRGF0
YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZmlu
ZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmVuZCgpKQot
ICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZh
bHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0
ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhGbG9hdDY0QXJyYXkuY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4RmxvYXQ2NEFycmF5LmNwcAppbmRl
eCAxYTI3YTlkYjg4MTJjMWFmNjRhNGEyZDE5OTU1NjZlMTRjOWM2NTNhLi5kY2YzNTkwZDg0YmQ0
MjYyZjhjYTJkY2UyZjA1ZDZjNzJjOTE2OTA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhGbG9hdDY0QXJyYXkuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOEZsb2F0NjRBcnJheS5jcHAKQEAgLTEx
OCw3ICsxMTgsNyBAQCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhGbG9h
dDY0QXJyYXk6OkdldFJhd1RlbXBsYXRlKCkKICAgICBWOFBlcklzb2xhdGVEYXRhKiBkYXRhID0g
VjhQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4UGVySXNvbGF0ZURhdGE6OlRlbXBs
YXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmZpbmQoJmlu
Zm8pOwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1
ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVu
dDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPSBjcmVhdGVSYXdUZW1wbGF0ZSgpOwpAQCAt
MTMxLDcgKzEzMSw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOEZs
b2F0NjRBcnJheTo6R2V0VGVtcGxhdGUoKQogICAgIFY4UGVySXNvbGF0ZURhdGEqIGRhdGEgPSBW
OFBlcklzb2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhQZXJJc29sYXRlRGF0YTo6VGVtcGxh
dGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7
CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICBy
ZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAg
ICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpG
dW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RBY3RpdmVET01PYmplY3QuY3Bw
CmluZGV4IDUwZTAwODJkZGYzNDQ3YzZlMjc5NmExOGRlMTFiZmQxMGQ3NjhhOTMuLjNlMmIxYTk3
NDYzZGEzODg2NmM4NmI1YmI5ZTMzNmZmOTZlNGVhYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RBY3RpdmVET01PYmplY3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RBY3RpdmVE
T01PYmplY3QuY3BwCkBAIC0xNDcsNyArMTQ3LDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0
aW9uVGVtcGxhdGU+IFY4VGVzdEFjdGl2ZURPTU9iamVjdDo6R2V0UmF3VGVtcGxhdGUoKQogICAg
IFY4UGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOFBlcklzb2xhdGVEYXRhOjpjdXJyZW50KCk7CiAg
ICAgVjhQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEt
PnJhd1RlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT5y
YXdUZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7Cisg
ICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRs
ZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9
IGNyZWF0ZVJhd1RlbXBsYXRlKCk7CkBAIC0xNjAsNyArMTYwLDcgQEAgdjg6OlBlcnNpc3RlbnQ8
djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdEFjdGl2ZURPTU9iamVjdDo6R2V0VGVtcGxhdGUo
KQogICAgIFY4UGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOFBlcklzb2xhdGVEYXRhOjpjdXJyZW50
KCk7CiAgICAgVjhQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9
IGRhdGEtPnRlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRh
LT50ZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7Cisg
ICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRs
ZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhU
ZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Y4L1Y4VGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcAppbmRleCA5NzVjZmViMzdjMDZj
ODYyOTllYmVhMzQyYjIzMDY5YjIxY2E0OWNkLi5hYjViNWJiODE0NGUzYWJhNzZlNjQ2OTkyOTNj
ODFhNWE3NTIzOWQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVjgvVjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RDdXN0b21OYW1lZEdldHRlci5jcHAKQEAg
LTgxLDcgKzgxLDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVz
dEN1c3RvbU5hbWVkR2V0dGVyOjpHZXRSYXdUZW1wbGF0ZSgpCiAgICAgVjhQZXJJc29sYXRlRGF0
YSogZGF0YSA9IFY4UGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOFBlcklzb2xhdGVE
YXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+cmF3VGVtcGxhdGVNYXAo
KS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCku
ZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6
OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0gY3JlYXRlUmF3VGVtcGxh
dGUoKTsKQEAgLTk0LDcgKzk0LDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxh
dGU+IFY4VGVzdEN1c3RvbU5hbWVkR2V0dGVyOjpHZXRUZW1wbGF0ZSgpCiAgICAgVjhQZXJJc29s
YXRlRGF0YSogZGF0YSA9IFY4UGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOFBlcklz
b2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+dGVtcGxhdGVN
YXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnRlbXBsYXRlTWFwKCku
ZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6
OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudENvbnN0cnVj
dG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RF
dmVudENvbnN0cnVjdG9yLmNwcAppbmRleCA0MDc0ZTU3MzI0OWJjNWFkNDk5MmYyMjEwNmM5M2Y5
NTU5YTdiYTI5Li4wYjk1YzE3ODk4NDc5MmI5NWM3YmFlOWJlNTgxMDAwOWE2YmEwNWUyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZl
bnRDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Y4L1Y4VGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCkBAIC0xMTgsNyArMTE4LDcgQEAgdjg6
OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdEV2ZW50Q29uc3RydWN0b3I6
OkdldFJhd1RlbXBsYXRlKCkKICAgICBWOFBlcklzb2xhdGVEYXRhKiBkYXRhID0gVjhQZXJJc29s
YXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4UGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjpp
dGVyYXRvciByZXN1bHQgPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwogICAg
IGlmIChyZXN1bHQgIT0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0
dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAogICAg
IHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVu
Y3Rpb25UZW1wbGF0ZT4gdGVtcGwgPSBjcmVhdGVSYXdUZW1wbGF0ZSgpOwpAQCAtMTMxLDcgKzEz
MSw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3RFdmVudENv
bnN0cnVjdG9yOjpHZXRUZW1wbGF0ZSgpCiAgICAgVjhQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4
UGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOFBlcklzb2xhdGVEYXRhOjpUZW1wbGF0
ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+dGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsK
ICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJl
dHVybiByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAg
ICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1
bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudFRhcmdldC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRUYXJnZXQuY3BwCmluZGV4IDhj
YmFhMmYwNjRkYTZiMGU5YzU2OGM3ZDEyZTg2MTg0MzgxNzQxOTQuLjFlMTFmNGQ3NDVjYmFkN2Uy
NDU3ZGE4NDc1OTEzNjM2NzhhYTJlNWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudFRhcmdldC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50VGFyZ2V0LmNwcApAQCAt
MTQyLDcgKzE0Miw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRl
c3RFdmVudFRhcmdldDo6R2V0UmF3VGVtcGxhdGUoKQogICAgIFY4UGVySXNvbGF0ZURhdGEqIGRh
dGEgPSBWOFBlcklzb2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhQZXJJc29sYXRlRGF0YTo6
VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZmlu
ZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmVuZCgp
KQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQt
PnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJz
aXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9IGNyZWF0ZVJhd1RlbXBsYXRlKCk7
CkBAIC0xNTUsNyArMTU1LDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+
IFY4VGVzdEV2ZW50VGFyZ2V0OjpHZXRUZW1wbGF0ZSgpCiAgICAgVjhQZXJJc29sYXRlRGF0YSog
ZGF0YSA9IFY4UGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOFBlcklzb2xhdGVEYXRh
OjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+dGVtcGxhdGVNYXAoKS5maW5k
KCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZW5kKCkpCi0g
ICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFs
dWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3Rl
bnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFeGNlcHRpb24uY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV4Y2VwdGlvbi5jcHAKaW5k
ZXggNDUxYzU4ZDc4YTc2Yzc0NWE2YzdlYjZkZjM1ZWIwNzM2M2NjY2QxNi4uNTU4OTZlOGM4YmMz
NDhjODA5MjUxMTNhMTI0YzZhODE2N2EyMmQzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV4Y2VwdGlvbi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV4Y2VwdGlvbi5jcHAKQEAg
LTcyLDcgKzcyLDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVz
dEV4Y2VwdGlvbjo6R2V0UmF3VGVtcGxhdGUoKQogICAgIFY4UGVySXNvbGF0ZURhdGEqIGRhdGEg
PSBWOFBlcklzb2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhQZXJJc29sYXRlRGF0YTo6VGVt
cGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZmluZCgm
aW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmVuZCgpKQot
ICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZh
bHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0
ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9IGNyZWF0ZVJhd1RlbXBsYXRlKCk7CkBA
IC04NSw3ICs4NSw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRl
c3RFeGNlcHRpb246OkdldFRlbXBsYXRlKCkKICAgICBWOFBlcklzb2xhdGVEYXRhKiBkYXRhID0g
VjhQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4UGVySXNvbGF0ZURhdGE6OlRlbXBs
YXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8p
OwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+dGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAg
cmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAog
ICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6
RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEludGVyZmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0SW50ZXJmYWNlLmNwcAppbmRleCA0YTVl
YTViYzhlNGJjYjMzOThmZDUxMTdmZjMxMzNjNWM3ZDZjZTdlLi4xZjFjNGM5ZDAxZmIxNDY1MzQ5
MWFiZjk3Mjg4MTMwN2NmZDEwYzcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0SW50ZXJmYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0SW50ZXJmYWNlLmNwcApAQCAtMzA3LDcg
KzMwNyw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3RJbnRl
cmZhY2U6OkdldFJhd1RlbXBsYXRlKCkKICAgICBWOFBlcklzb2xhdGVEYXRhKiBkYXRhID0gVjhQ
ZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4UGVySXNvbGF0ZURhdGE6OlRlbXBsYXRl
TWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8p
OwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAg
ICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsK
IAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2
ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPSBjcmVhdGVSYXdUZW1wbGF0ZSgpOwpAQCAtMzIw
LDcgKzMyMCw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3RJ
bnRlcmZhY2U6OkdldFRlbXBsYXRlKCkKICAgICBWOFBlcklzb2xhdGVEYXRhKiBkYXRhID0gVjhQ
ZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4UGVySXNvbGF0ZURhdGE6OlRlbXBsYXRl
TWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwog
ICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+dGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0
dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAogICAg
IHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVu
Y3Rpb25UZW1wbGF0ZT4gdGVtcGwgPQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE1lZGlhUXVlcnlMaXN0
TGlzdGVuZXIuY3BwCmluZGV4IDRiMDlkMGJkMjZhY2UxMDc0YmMxZmUzZjQ2ZDc5YjFlOTI0Nzlj
MmYuLmFmOTYxN2NiZDAwYjQ0ZWZkYTUzMDE1OWJiOTY3ZDQ1MmUzOTA1YmQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RNZWRpYVF1ZXJ5
TGlzdExpc3RlbmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVjgvVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAKQEAgLTgxLDcgKzgxLDcgQEAg
djg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdE1lZGlhUXVlcnlMaXN0
TGlzdGVuZXI6OkdldFJhd1RlbXBsYXQKICAgICBWOFBlcklzb2xhdGVEYXRhKiBkYXRhID0gVjhQ
ZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4UGVySXNvbGF0ZURhdGE6OlRlbXBsYXRl
TWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8p
OwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAg
ICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsK
IAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2
ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPSBjcmVhdGVSYXdUZW1wbGF0ZSgpOwpAQCAtOTQs
NyArOTQsNyBAQCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0TWVk
aWFRdWVyeUxpc3RMaXN0ZW5lcjo6R2V0VGVtcGxhdGUoKQogICAgIFY4UGVySXNvbGF0ZURhdGEq
IGRhdGEgPSBWOFBlcklzb2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhQZXJJc29sYXRlRGF0
YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZmlu
ZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmVuZCgpKQot
ICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZh
bHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0
ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TmFtZWRDb25z
dHJ1Y3Rvci5jcHAKaW5kZXggMGE4ZmU0M2ZjNzM1NGU2YzE5N2RlMTNjYzVmNzlkYjc5YWQzYjg1
MC4uZjU5OGQ1ODg3YzM0ZTE2ZTQ5ZmNjMmU2OGZlYmU2MWM5Y2FlNTlhYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5hbWVkQ29uc3Ry
dWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9W
OFRlc3ROYW1lZENvbnN0cnVjdG9yLmNwcApAQCAtMTE3LDcgKzExNyw3IEBAIHY4OjpQZXJzaXN0
ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3ROYW1lZENvbnN0cnVjdG9yOjpHZXRSYXdU
ZW1wbGF0ZSgpCiAgICAgVjhQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4UGVySXNvbGF0ZURhdGE6
OmN1cnJlbnQoKTsKICAgICBWOFBlcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3Ig
cmVzdWx0ID0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVz
dWx0ICE9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1
bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFu
ZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVt
cGxhdGU+IHRlbXBsID0gY3JlYXRlUmF3VGVtcGxhdGUoKTsKQEAgLTEzMCw3ICsxMzAsNyBAQCB2
ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0TmFtZWRDb25zdHJ1Y3Rv
cjo6R2V0VGVtcGxhdGUoKQogICAgIFY4UGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOFBlcklzb2xh
dGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0
ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYg
KHJlc3VsdCAhPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVz
dWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6Okhh
bmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRl
bXBsYXRlPiB0ZW1wbCA9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVjgvVjhUZXN0Tm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVjgvVjhUZXN0Tm9kZS5jcHAKaW5kZXggZjRhNGI0NTJkNjZlMjVjNjlhY2M1MTNl
NmFjN2Y0YzQ3NWUwNDU5MS4uYWY3NzJkNDBkYWZkMmJjOThmM2M1NTVjMTNiZmNmNGM3MTM5NjY5
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4
VGVzdE5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9W
OC9WOFRlc3ROb2RlLmNwcApAQCAtODAsNyArODAsNyBAQCB2ODo6UGVyc2lzdGVudDx2ODo6RnVu
Y3Rpb25UZW1wbGF0ZT4gVjhUZXN0Tm9kZTo6R2V0UmF3VGVtcGxhdGUoKQogICAgIFY4UGVySXNv
bGF0ZURhdGEqIGRhdGEgPSBWOFBlcklzb2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhQZXJJ
c29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnJhd1RlbXBs
YXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT5yYXdUZW1wbGF0
ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJl
dHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwog
ICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9IGNyZWF0ZVJh
d1RlbXBsYXRlKCk7CkBAIC05Myw3ICs5Myw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlv
blRlbXBsYXRlPiBWOFRlc3ROb2RlOjpHZXRUZW1wbGF0ZSgpCiAgICAgVjhQZXJJc29sYXRlRGF0
YSogZGF0YSA9IFY4UGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOFBlcklzb2xhdGVE
YXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+dGVtcGxhdGVNYXAoKS5m
aW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZW5kKCkp
Ci0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+
dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNp
c3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKaW5kZXggNjczM2Iy
NjI1ODU4Y2ZkY2FmYTRlYTFhOWY1YTA2OWM0YzFiYzFjMi4uNTFkMGMzMTBiOTM2YWY2OGJhMTA0
OGQzZTY5ODkzYzQzMzEzNjY2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKQEAgLTIyODQsNyArMjI4NCw3IEBAIHY4
OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3RPYmo6OkdldFJhd1RlbXBs
YXRlKCkKICAgICBWOFBlcklzb2xhdGVEYXRhKiBkYXRhID0gVjhQZXJJc29sYXRlRGF0YTo6Y3Vy
cmVudCgpOwogICAgIFY4UGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1
bHQgPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwogICAgIGlmIChyZXN1bHQg
IT0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC0+
c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVT
Y29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0
ZT4gdGVtcGwgPSBjcmVhdGVSYXdUZW1wbGF0ZSgpOwpAQCAtMjI5Nyw3ICsyMjk3LDcgQEAgdjg6
OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdE9iajo6R2V0VGVtcGxhdGUo
KQogICAgIFY4UGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOFBlcklzb2xhdGVEYXRhOjpjdXJyZW50
KCk7CiAgICAgVjhQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9
IGRhdGEtPnRlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRh
LT50ZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7Cisg
ICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRs
ZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2UuY3BwCmluZGV4IDM5MzBkNjlmN2QzNTYyNzFjNzEzMzM3NTY5ODY5ZmJjZDI0ODFmODYuLjc3
ODRlNjViNjZkNzA3OTA3NDI2MzRhYTlhYzRiY2NkZGI4ZTQ3MGMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCkBAIC0yNjQs
NyArMjY0LDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6R2V0UmEKICAgICBWOFBlcklzb2xhdGVEYXRh
KiBkYXRhID0gVjhQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4UGVySXNvbGF0ZURh
dGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgp
LmZpbmQoJmluZm8pOwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5l
bmQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVz
dWx0LT52YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6
UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPSBjcmVhdGVSYXdUZW1wbGF0
ZSgpOwpAQCAtMjc3LDcgKzI3Nyw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBs
YXRlPiBWOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OkdldFRlCiAgICAgVjhQ
ZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4UGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBW
OFBlcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+dGVt
cGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnRlbXBsYXRl
TWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAg
ICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTVdyYXBwZXJXb3JsZC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01XcmFwcGVyV29ybGQuY3BwCmluZGV4IDg1OWU4MzZm
MjM0MDRmZDI4YjA0Y2VhNWQzYzdmZDdlNDk1YTFjMTQuLmEwYTYwZGJmMThiOWFjYzNiN2FkYzEz
MjU4YmE3YzgwM2FkYmY3MmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L0RPTVdyYXBwZXJXb3JsZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9N
V3JhcHBlcldvcmxkLmNwcApAQCAtODIsNyArODIsNyBAQCB2b2lkIERPTVdyYXBwZXJXb3JsZDo6
ZGVhbGxvY2F0ZShET01XcmFwcGVyV29ybGQqIHdvcmxkKQogICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBBU1NFUlQoaS0+c2Vjb25kID09
IHdvcmxkKTsKKyAgICBBU1NFUlQoaS0+dmFsdWUgPT0gd29ybGQpOwogCiAgICAgbWFwLnJlbW92
ZShpKTsKICAgICBpc29sYXRlZFdvcmxkQ291bnQtLTsKQEAgLTEwMCw5ICsxMDAsOSBAQCBQYXNz
UmVmUHRyPERPTVdyYXBwZXJXb3JsZD4gRE9NV3JhcHBlcldvcmxkOjplbnN1cmVJc29sYXRlZFdv
cmxkKGludCB3b3JsZElkLCBpbgogICAgIGVsc2UgewogICAgICAgICBXb3JsZE1hcDo6aXRlcmF0
b3IgaSA9IG1hcC5maW5kKHdvcmxkSWQpOwogICAgICAgICBpZiAoaSAhPSBtYXAuZW5kKCkpIHsK
LSAgICAgICAgICAgIEFTU0VSVChpLT5zZWNvbmQtPndvcmxkSWQoKSA9PSB3b3JsZElkKTsKLSAg
ICAgICAgICAgIEFTU0VSVChpLT5zZWNvbmQtPmV4dGVuc2lvbkdyb3VwKCkgPT0gZXh0ZW5zaW9u
R3JvdXApOwotICAgICAgICAgICAgcmV0dXJuIGktPnNlY29uZDsKKyAgICAgICAgICAgIEFTU0VS
VChpLT52YWx1ZS0+d29ybGRJZCgpID09IHdvcmxkSWQpOworICAgICAgICAgICAgQVNTRVJUKGkt
PnZhbHVlLT5leHRlbnNpb25Hcm91cCgpID09IGV4dGVuc2lvbkdyb3VwKTsKKyAgICAgICAgICAg
IHJldHVybiBpLT52YWx1ZTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvTlBWOE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9OUFY4T2JqZWN0LmNwcAppbmRleCAyMjQwMzAwZTkwMDg2ZjZjYTI3YzcwMWY5OWYx
ZmQ0ZmUwNWYxZGI2Li4wNjMxNGYzMzgyN2FkZjJkY2Y4ZjJjM2NiODQ4M2YzYzM4MmY4ZTRkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9OUFY4T2JqZWN0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9OUFY4T2JqZWN0LmNwcApAQCAtODEsNyArODEs
NyBAQCBzdGF0aWMgdm9pZCBmcmVlVjhOUE9iamVjdChOUE9iamVjdCogbnBPYmplY3QpCiAgICAg
ICAgIEFTU0VSVCh2OE9iamVjdEhhc2gpOwogICAgICAgICBWOE5QT2JqZWN0TWFwOjppdGVyYXRv
ciBpdGVyID0gdjhOUE9iamVjdE1hcC0+ZmluZCh2OE9iamVjdEhhc2gpOwogICAgICAgICBBU1NF
UlQoaXRlciAhPSB2OE5QT2JqZWN0TWFwLT5lbmQoKSk7Ci0gICAgICAgIFY4TlBPYmplY3RWZWN0
b3ImIG9iamVjdHMgPSBpdGVyLT5zZWNvbmQ7CisgICAgICAgIFY4TlBPYmplY3RWZWN0b3ImIG9i
amVjdHMgPSBpdGVyLT52YWx1ZTsKICAgICAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRl
eCA8IG9iamVjdHMuc2l6ZSgpOyArK2luZGV4KSB7CiAgICAgICAgICAgICBpZiAob2JqZWN0cy5h
dChpbmRleCkgPT0gdjhOcE9iamVjdCkgewogICAgICAgICAgICAgICAgIG9iamVjdHMucmVtb3Zl
KGluZGV4KTsKQEAgLTE0OCw3ICsxNDgsNyBAQCBOUE9iamVjdCogbnBDcmVhdGVWOFNjcmlwdE9i
amVjdChOUFAgbnBwLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCwgRE9NV2luZAogICAg
IFY4TlBPYmplY3RNYXAqIHY4TlBPYmplY3RNYXAgPSBWOFBlckNvbnRleHREYXRhOjpmcm9tKG9i
amVjdC0+Q3JlYXRpb25Db250ZXh0KCkpLT52OE5QT2JqZWN0TWFwKCk7CiAgICAgVjhOUE9iamVj
dE1hcDo6aXRlcmF0b3IgaXRlciA9IHY4TlBPYmplY3RNYXAtPmZpbmQodjhPYmplY3RIYXNoKTsK
ICAgICBpZiAoaXRlciAhPSB2OE5QT2JqZWN0TWFwLT5lbmQoKSkgewotICAgICAgICBWOE5QT2Jq
ZWN0VmVjdG9yJiBvYmplY3RzID0gaXRlci0+c2Vjb25kOworICAgICAgICBWOE5QT2JqZWN0VmVj
dG9yJiBvYmplY3RzID0gaXRlci0+dmFsdWU7CiAgICAgICAgIGZvciAoc2l6ZV90IGluZGV4ID0g
MDsgaW5kZXggPCBvYmplY3RzLnNpemUoKTsgKytpbmRleCkgewogICAgICAgICAgICAgVjhOUE9i
amVjdCogdjhucE9iamVjdCA9IG9iamVjdHMuYXQoaW5kZXgpOwogICAgICAgICAgICAgaWYgKHY4
bnBPYmplY3QtPnJvb3RPYmplY3QgPT0gcm9vdCkgewpAQCAtMTY1LDcgKzE2NSw3IEBAIE5QT2Jq
ZWN0KiBucENyZWF0ZVY4U2NyaXB0T2JqZWN0KE5QUCBucHAsIHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4gb2JqZWN0LCBET01XaW5kCiAgICAgdjhucE9iamVjdC0+djhPYmplY3QgPSB2ODo6UGVyc2lz
dGVudDx2ODo6T2JqZWN0Pjo6TmV3KG9iamVjdCk7CiAgICAgdjhucE9iamVjdC0+cm9vdE9iamVj
dCA9IHJvb3Q7CiAKLSAgICBpdGVyLT5zZWNvbmQuYXBwZW5kKHY4bnBPYmplY3QpOworICAgIGl0
ZXItPnZhbHVlLmFwcGVuZCh2OG5wT2JqZWN0KTsKIAogICAgIHJldHVybiByZWludGVycHJldF9j
YXN0PE5QT2JqZWN0Kj4odjhucE9iamVjdCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwCmluZGV4IDJmY2FjYTYyYzhhZDQyYTZmMWI0MTJh
OTI2ZDAyOGRiZjdjYjlkNzIuLjliOTY3ZDk2ZmM0MTEwODA2OWI1MTJmNjZkNTMzNTc4ZmJmNzli
NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xs
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIu
Y3BwCkBAIC0xMTcsOCArMTE3LDggQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpjbGVhclNjcmlw
dE9iamVjdHMoKQogewogICAgIFBsdWdpbk9iamVjdE1hcDo6aXRlcmF0b3IgaXQgPSBtX3BsdWdp
bk9iamVjdHMuYmVnaW4oKTsKICAgICBmb3IgKDsgaXQgIT0gbV9wbHVnaW5PYmplY3RzLmVuZCgp
OyArK2l0KSB7Ci0gICAgICAgIF9OUE5fVW5yZWdpc3Rlck9iamVjdChpdC0+c2Vjb25kKTsKLSAg
ICAgICAgX05QTl9SZWxlYXNlT2JqZWN0KGl0LT5zZWNvbmQpOworICAgICAgICBfTlBOX1VucmVn
aXN0ZXJPYmplY3QoaXQtPnZhbHVlKTsKKyAgICAgICAgX05QTl9SZWxlYXNlT2JqZWN0KGl0LT52
YWx1ZSk7CiAgICAgfQogICAgIG1fcGx1Z2luT2JqZWN0cy5jbGVhcigpOwogCkBAIC0xNDYsNyAr
MTQ2LDcgQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpyZXNldElzb2xhdGVkV29ybGRzKCkKIHsK
ICAgICBmb3IgKElzb2xhdGVkV29ybGRNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2lzb2xhdGVkV29y
bGRzLmJlZ2luKCk7CiAgICAgICAgICBpdGVyICE9IG1faXNvbGF0ZWRXb3JsZHMuZW5kKCk7ICsr
aXRlcikgewotICAgICAgICBpdGVyLT5zZWNvbmQtPmRlc3Ryb3lJc29sYXRlZFNoZWxsKCk7Cisg
ICAgICAgIGl0ZXItPnZhbHVlLT5kZXN0cm95SXNvbGF0ZWRTaGVsbCgpOwogICAgIH0KICAgICBt
X2lzb2xhdGVkV29ybGRzLmNsZWFyKCk7CiAgICAgbV9pc29sYXRlZFdvcmxkU2VjdXJpdHlPcmln
aW5zLmNsZWFyKCk7CkBAIC0zMjIsOSArMzIyLDkgQEAgVjhET01XaW5kb3dTaGVsbCogU2NyaXB0
Q29udHJvbGxlcjo6ZW5zdXJlSXNvbGF0ZWRXb3JsZENvbnRleHQoaW50IHdvcmxkSWQsIGludAog
ICAgIGlmICh3b3JsZElkICE9IERPTVdyYXBwZXJXb3JsZDo6dW5pbml0aWFsaXplZFdvcmxkSWQp
IHsKICAgICAgICAgSXNvbGF0ZWRXb3JsZE1hcDo6aXRlcmF0b3IgaXRlciA9IG1faXNvbGF0ZWRX
b3JsZHMuZmluZCh3b3JsZElkKTsKICAgICAgICAgaWYgKGl0ZXIgIT0gbV9pc29sYXRlZFdvcmxk
cy5lbmQoKSkgewotICAgICAgICAgICAgQVNTRVJUKGl0ZXItPnNlY29uZC0+d29ybGQoKS0+d29y
bGRJZCgpID09IHdvcmxkSWQpOwotICAgICAgICAgICAgQVNTRVJUKGl0ZXItPnNlY29uZC0+d29y
bGQoKS0+ZXh0ZW5zaW9uR3JvdXAoKSA9PSBleHRlbnNpb25Hcm91cCk7Ci0gICAgICAgICAgICBy
ZXR1cm4gaXRlci0+c2Vjb25kOworICAgICAgICAgICAgQVNTRVJUKGl0ZXItPnZhbHVlLT53b3Js
ZCgpLT53b3JsZElkKCkgPT0gd29ybGRJZCk7CisgICAgICAgICAgICBBU1NFUlQoaXRlci0+dmFs
dWUtPndvcmxkKCktPmV4dGVuc2lvbkdyb3VwKCkgPT0gZXh0ZW5zaW9uR3JvdXApOworICAgICAg
ICAgICAgcmV0dXJuIGl0ZXItPnZhbHVlOwogICAgICAgICB9CiAgICAgfQogCkBAIC0zNDIsNyAr
MzQyLDcgQEAgVjhET01XaW5kb3dTaGVsbCogU2NyaXB0Q29udHJvbGxlcjo6ZXhpc3RpbmdXaW5k
b3dTaGVsbEludGVybmFsKERPTVdyYXBwZXJXb3JsZCoKICAgICAgICAgcmV0dXJuIG1fd2luZG93
U2hlbGwuZ2V0KCk7CiAKICAgICBJc29sYXRlZFdvcmxkTWFwOjppdGVyYXRvciBpdGVyID0gbV9p
c29sYXRlZFdvcmxkcy5maW5kKHdvcmxkLT53b3JsZElkKCkpOwotICAgIHJldHVybiBpdGVyID09
IG1faXNvbGF0ZWRXb3JsZHMuZW5kKCkgPyAwIDogaXRlci0+c2Vjb25kOworICAgIHJldHVybiBp
dGVyID09IG1faXNvbGF0ZWRXb3JsZHMuZW5kKCkgPyAwIDogaXRlci0+dmFsdWU7CiB9CiAKIFY4
RE9NV2luZG93U2hlbGwqIFNjcmlwdENvbnRyb2xsZXI6OndpbmRvd1NoZWxsKERPTVdyYXBwZXJX
b3JsZCogd29ybGQpCkBAIC0zNzIsNyArMzcyLDcgQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpl
dmFsdWF0ZUluSXNvbGF0ZWRXb3JsZChpbnQgd29ybGRJRCwgY29uc3QgVmVjdG9yPFNjcmlwdFMK
ICAgICAgICAgaWYgKHdvcmxkSUQgIT0gRE9NV3JhcHBlcldvcmxkOjp1bmluaXRpYWxpemVkV29y
bGRJZCkgewogICAgICAgICAgICAgSXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2luTWFwOjppdGVy
YXRvciBzZWN1cml0eU9yaWdpbkl0ZXIgPSBtX2lzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbnMu
ZmluZCh3b3JsZElEKTsKICAgICAgICAgICAgIGlmIChzZWN1cml0eU9yaWdpbkl0ZXIgIT0gbV9p
c29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW5zLmVuZCgpKQotICAgICAgICAgICAgICAgIGlzb2xh
dGVkV29ybGRTaGVsbC0+c2V0SXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2luKHNlY3VyaXR5T3Jp
Z2luSXRlci0+c2Vjb25kKTsKKyAgICAgICAgICAgICAgICBpc29sYXRlZFdvcmxkU2hlbGwtPnNl
dElzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbihzZWN1cml0eU9yaWdpbkl0ZXItPnZhbHVlKTsK
ICAgICAgICAgfQogCiAgICAgICAgIGlzb2xhdGVkV29ybGRTaGVsbC0+aW5pdGlhbGl6ZUlmTmVl
ZGVkKCk7CkBAIC00MTIsNyArNDEyLDcgQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpzZXRJc29s
YXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4oaW50IHdvcmxkSUQsIFBhc3NSZWZQdHI8U2UKICAgICBt
X2lzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbnMuc2V0KHdvcmxkSUQsIHNlY3VyaXR5T3JpZ2lu
KTsKICAgICBJc29sYXRlZFdvcmxkTWFwOjppdGVyYXRvciBpdGVyID0gbV9pc29sYXRlZFdvcmxk
cy5maW5kKHdvcmxkSUQpOwogICAgIGlmIChpdGVyICE9IG1faXNvbGF0ZWRXb3JsZHMuZW5kKCkp
Ci0gICAgICAgIGl0ZXItPnNlY29uZC0+c2V0SXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2luKHNl
Y3VyaXR5T3JpZ2luKTsKKyAgICAgICAgaXRlci0+dmFsdWUtPnNldElzb2xhdGVkV29ybGRTZWN1
cml0eU9yaWdpbihzZWN1cml0eU9yaWdpbik7CiB9CiAKIFRleHRQb3NpdGlvbiBTY3JpcHRDb250
cm9sbGVyOjpldmVudEhhbmRsZXJQb3NpdGlvbigpIGNvbnN0CkBAIC01NDUsOCArNTQ1LDggQEAg
dm9pZCBTY3JpcHRDb250cm9sbGVyOjpjbGVhbnVwU2NyaXB0T2JqZWN0c0ZvclBsdWdpbihXaWRn
ZXQqIG5hdGl2ZUhhbmRsZSkKICAgICBQbHVnaW5PYmplY3RNYXA6Oml0ZXJhdG9yIGl0ID0gbV9w
bHVnaW5PYmplY3RzLmZpbmQobmF0aXZlSGFuZGxlKTsKICAgICBpZiAoaXQgPT0gbV9wbHVnaW5P
YmplY3RzLmVuZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgX05QTl9VbnJlZ2lzdGVyT2JqZWN0
KGl0LT5zZWNvbmQpOwotICAgIF9OUE5fUmVsZWFzZU9iamVjdChpdC0+c2Vjb25kKTsKKyAgICBf
TlBOX1VucmVnaXN0ZXJPYmplY3QoaXQtPnZhbHVlKTsKKyAgICBfTlBOX1JlbGVhc2VPYmplY3Qo
aXQtPnZhbHVlKTsKICAgICBtX3BsdWdpbk9iamVjdHMucmVtb3ZlKGl0KTsKIH0KIApAQCAtNjY1
LDcgKzY2NSw3IEBAIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6Y29sbGVjdElzb2xhdGVkQ29udGV4
dHMoVmVjdG9yPHN0ZDo6cGFpcjxTY3JpcHRTdGF0ZSosIFNlCiB7CiAgICAgdjg6OkhhbmRsZVNj
b3BlIGhhbmRsZVNjb3BlOwogICAgIGZvciAoSXNvbGF0ZWRXb3JsZE1hcDo6aXRlcmF0b3IgaXQg
PSBtX2lzb2xhdGVkV29ybGRzLmJlZ2luKCk7IGl0ICE9IG1faXNvbGF0ZWRXb3JsZHMuZW5kKCk7
ICsraXQpIHsKLSAgICAgICAgVjhET01XaW5kb3dTaGVsbCogaXNvbGF0ZWRXb3JsZFNoZWxsID0g
aXQtPnNlY29uZDsKKyAgICAgICAgVjhET01XaW5kb3dTaGVsbCogaXNvbGF0ZWRXb3JsZFNoZWxs
ID0gaXQtPnZhbHVlOwogICAgICAgICBpZiAoIWlzb2xhdGVkV29ybGRTaGVsbC0+aXNvbGF0ZWRX
b3JsZFNlY3VyaXR5T3JpZ2luKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgdjg6
OkhhbmRsZTx2ODo6Q29udGV4dD4gdjhDb250ZXh0ID0gaXNvbGF0ZWRXb3JsZFNoZWxsLT5jb250
ZXh0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxpemVk
U2NyaXB0VmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2VyaWFsaXplZFNj
cmlwdFZhbHVlLmNwcAppbmRleCA0M2NlZmY0ZWI2NWZiMDQyNjNmNjY3ZTYwZGFlZjllYmU3NjJm
ZmVmLi40MTczMWMxNDJjZDg0ZTQ1NWRjOGI5MmE1NjNlNjgzMjcyNGVkZGI3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAK
QEAgLTEwOCw3ICsxMDgsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICB0eXBlbmFtZSBIYW5k
bGVUb1Q6Oml0ZXJhdG9yIHJlc3VsdCA9IG1fbWFwLmZpbmQoKmhhbmRsZSk7CiAgICAgICAgIGlm
IChyZXN1bHQgIT0gbV9tYXAuZW5kKCkpIHsKLSAgICAgICAgICAgICp2YWx1ZU91dCA9IHJlc3Vs
dC0+c2Vjb25kOworICAgICAgICAgICAgKnZhbHVlT3V0ID0gcmVzdWx0LT52YWx1ZTsKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NTWFwLmggYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTU1hcC5oCmluZGV4IDRlNTkxNzg4YWZkYmU2ZDUyZTMw
M2E4NGFkZTY4Y2M0ZmJkNDVhNDguLmNhNDVkZmRjM2NkMTRjZmY5OTYwMDQ3ZDE3MGY0YmFiMDc0
ZjZlOTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NTWFwLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01NYXAuaApAQCAtMTExLDcgKzEx
MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCByZW1vdmVJZlByZXNlbnQo
S2V5VHlwZSoga2V5LCB2ODo6UGVyc2lzdGVudDxWYWx1ZVR5cGU+IHZhbHVlKQogICAgICAgICB7
CiAgICAgICAgICAgICB0eXBlbmFtZSBIYXNoTWFwPEtleVR5cGUqLCBWYWx1ZVR5cGUqPjo6aXRl
cmF0b3IgaXQgPSBtX21hcC5maW5kKGtleSk7Ci0gICAgICAgICAgICBpZiAoaXQgPT0gbV9tYXAu
ZW5kKCkgfHwgaXQtPnNlY29uZCAhPSAqdmFsdWUpCisgICAgICAgICAgICBpZiAoaXQgPT0gbV9t
YXAuZW5kKCkgfHwgaXQtPnZhbHVlICE9ICp2YWx1ZSkKICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICAgICAgICAgIG1fbWFwLnJlbW92ZShpdCk7CkBAIC0xMzEsNyArMTMxLDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgdmlzaXRvci0+c3RhcnRNYXAoKTsK
ICAgICAgICAgICAgIHR5cGVuYW1lIEhhc2hNYXA8S2V5VHlwZSosIFZhbHVlVHlwZSo+OjppdGVy
YXRvciBpdCA9IG1fbWFwLmJlZ2luKCk7CiAgICAgICAgICAgICBmb3IgKDsgaXQgIT0gbV9tYXAu
ZW5kKCk7ICsraXQpCi0gICAgICAgICAgICAgICAgdmlzaXRvci0+dmlzaXRET01XcmFwcGVyKHN0
b3JlLCBpdC0+Zmlyc3QsIHY4OjpQZXJzaXN0ZW50PFZhbHVlVHlwZT4oaXQtPnNlY29uZCkpOwor
ICAgICAgICAgICAgICAgIHZpc2l0b3ItPnZpc2l0RE9NV3JhcHBlcihzdG9yZSwgaXQtPmtleSwg
djg6OlBlcnNpc3RlbnQ8VmFsdWVUeXBlPihpdC0+dmFsdWUpKTsKICAgICAgICAgICAgIHZpc2l0
b3ItPmVuZE1hcCgpOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1Y4UGVyQ29udGV4dERhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhQZXJDb250ZXh0RGF0YS5jcHAKaW5kZXggM2FlOWZjZjk2MzRhMjI0OTMwNGQ1ZmExM2U0
ZGRkNzVhM2U1NDA1OS4uNjI1NDM5ZGEyM2QwNTIwMjQ1YTRhOWQxZmQzNmYwNjJlMDkzYWNhMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQZXJDb250ZXh0RGF0YS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQZXJDb250ZXh0RGF0YS5jcHAK
QEAgLTUzLDcgKzUzLDcgQEAgdm9pZCBWOFBlckNvbnRleHREYXRhOjpkaXNwb3NlKCkKICAgICB7
CiAgICAgICAgIFdyYXBwZXJCb2lsZXJwbGF0ZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3dyYXBwZXJC
b2lsZXJwbGF0ZXMuYmVnaW4oKTsKICAgICAgICAgZm9yICg7IGl0ICE9IG1fd3JhcHBlckJvaWxl
cnBsYXRlcy5lbmQoKTsgKytpdCkgewotICAgICAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9i
amVjdD4gd3JhcHBlciA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICB2ODo6UGVyc2lzdGVudDx2
ODo6T2JqZWN0PiB3cmFwcGVyID0gaXQtPnZhbHVlOwogICAgICAgICAgICAgd3JhcHBlci5EaXNw
b3NlKCk7CiAgICAgICAgIH0KICAgICAgICAgbV93cmFwcGVyQm9pbGVycGxhdGVzLmNsZWFyKCk7
CkBAIC02Miw3ICs2Miw3IEBAIHZvaWQgVjhQZXJDb250ZXh0RGF0YTo6ZGlzcG9zZSgpCiAgICAg
ewogICAgICAgICBDb25zdHJ1Y3Rvck1hcDo6aXRlcmF0b3IgaXQgPSBtX2NvbnN0cnVjdG9yTWFw
LmJlZ2luKCk7CiAgICAgICAgIGZvciAoOyBpdCAhPSBtX2NvbnN0cnVjdG9yTWFwLmVuZCgpOyAr
K2l0KSB7Ci0gICAgICAgICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb24+IHdyYXBwZXIg
PSBpdC0+c2Vjb25kOworICAgICAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uPiB3
cmFwcGVyID0gaXQtPnZhbHVlOwogICAgICAgICAgICAgd3JhcHBlci5EaXNwb3NlKCk7CiAgICAg
ICAgIH0KICAgICAgICAgbV9jb25zdHJ1Y3Rvck1hcC5jbGVhcigpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvbnBydW50aW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L25wcnVudGltZS5jcHAKaW5kZXggOGQ4MGNmOTMzMTg2ZTg1NDdjMTg1MTgzZDdl
NzQ4NGJjZTFlODRhMy4uMmIwMzY3Y2QxNWYyYTRmYjExM2Q0Y2MwYmY3NjdlYzhjZjFiMGE1ZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvbnBydW50aW1lLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ucHJ1bnRpbWUuY3BwCkBAIC0xNjQsNyArMTY0
LDcgQEAgTlBJZGVudGlmaWVyIF9OUE5fR2V0U3RyaW5nSWRlbnRpZmllcihjb25zdCBOUFVURjgq
IG5hbWUpCiAgICAgICAgIFN0cmluZ0lkZW50aWZpZXJNYXAqIGlkZW50TWFwID0gZ2V0U3RyaW5n
SWRlbnRpZmllck1hcCgpOwogICAgICAgICBTdHJpbmdJZGVudGlmaWVyTWFwOjppdGVyYXRvciBp
dGVyID0gaWRlbnRNYXAtPmZpbmQoa2V5KTsKICAgICAgICAgaWYgKGl0ZXIgIT0gaWRlbnRNYXAt
PmVuZCgpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PE5QSWRlbnRpZmllcj4oaXRl
ci0+c2Vjb25kKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxOUElkZW50aWZpZXI+
KGl0ZXItPnZhbHVlKTsKIAogICAgICAgICBzaXplX3QgbmFtZUxlbiA9IGtleS5tX2xlbmd0aDsK
IApAQCAtMjExLDcgKzIxMSw3IEBAIE5QSWRlbnRpZmllciBfTlBOX0dldEludElkZW50aWZpZXIo
aW50MzJfdCBpbnRJZCkKICAgICBJbnRJZGVudGlmaWVyTWFwKiBpZGVudE1hcCA9IGdldEludElk
ZW50aWZpZXJNYXAoKTsKICAgICBJbnRJZGVudGlmaWVyTWFwOjppdGVyYXRvciBpdGVyID0gaWRl
bnRNYXAtPmZpbmQoaW50SWQpOwogICAgIGlmIChpdGVyICE9IGlkZW50TWFwLT5lbmQoKSkKLSAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PE5QSWRlbnRpZmllcj4oaXRlci0+c2Vjb25kKTsKKyAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PE5QSWRlbnRpZmllcj4oaXRlci0+dmFsdWUpOwogCiAg
ICAgLy8gV2UgbmV2ZXIgcmVsZWFzZSBpZGVudGlmaWVycywgc28gdGhpcyBkaWN0aW9uYXJ5IHdp
bGwgZ3Jvdy4KICAgICBQcml2YXRlSWRlbnRpZmllciogaWRlbnRpZmllciA9IHJlaW50ZXJwcmV0
X2Nhc3Q8UHJpdmF0ZUlkZW50aWZpZXIqPihtYWxsb2Moc2l6ZW9mKFByaXZhdGVJZGVudGlmaWVy
KSkpOwpAQCAtMzg4LDcgKzM4OCw3IEBAIHZvaWQgX05QTl9SZWdpc3Rlck9iamVjdChOUE9iamVj
dCogbnBPYmplY3QsIE5QT2JqZWN0KiBvd25lcikKICAgICAgICAgTlBPYmplY3RNYXA6Oml0ZXJh
dG9yIG93bmVyRW50cnkgPSBsaXZlT2JqZWN0TWFwKCkuZmluZChvd25lcik7CiAgICAgICAgIE5Q
T2JqZWN0KiBwYXJlbnQgPSAwOwogICAgICAgICBpZiAobGl2ZU9iamVjdE1hcCgpLmVuZCgpICE9
IG93bmVyRW50cnkpCi0gICAgICAgICAgICBwYXJlbnQgPSBvd25lckVudHJ5LT5zZWNvbmQ7Cisg
ICAgICAgICAgICBwYXJlbnQgPSBvd25lckVudHJ5LT52YWx1ZTsKIAogICAgICAgICBpZiAocGFy
ZW50KQogICAgICAgICAgICAgb3duZXIgPSBwYXJlbnQ7CkBAIC00MDgsNyArNDA4LDcgQEAgdm9p
ZCBfTlBOX1VucmVnaXN0ZXJPYmplY3QoTlBPYmplY3QqIG5wT2JqZWN0KQogCiAgICAgTlBPYmpl
Y3QqIG93bmVyID0gMDsKICAgICBpZiAobGl2ZU9iamVjdE1hcCgpLmZpbmQobnBPYmplY3QpICE9
IGxpdmVPYmplY3RNYXAoKS5lbmQoKSkKLSAgICAgICAgb3duZXIgPSBsaXZlT2JqZWN0TWFwKCku
ZmluZChucE9iamVjdCktPnNlY29uZDsKKyAgICAgICAgb3duZXIgPSBsaXZlT2JqZWN0TWFwKCku
ZmluZChucE9iamVjdCktPnZhbHVlOwogCiAgICAgaWYgKCFvd25lcikgewogICAgICAgICAvLyBV
bnJlZ2lzdGVyaW5nIGEgb3duZXIgb2JqZWN0OyBhbHNvIHVucmVnaXN0ZXIgaXQncyBkZXNjZW5k
YW50cy4KQEAgLTQ0Myw3ICs0NDMsNyBAQCB2b2lkIF9OUE5fVW5yZWdpc3Rlck9iamVjdChOUE9i
amVjdCogbnBPYmplY3QpCiAgICAgfSBlbHNlIHsKICAgICAgICAgTlBSb290T2JqZWN0TWFwOjpp
dGVyYXRvciBvd25lckVudHJ5ID0gcm9vdE9iamVjdE1hcCgpLmZpbmQob3duZXIpOwogICAgICAg
ICBpZiAob3duZXJFbnRyeSAhPSByb290T2JqZWN0TWFwKCkuZW5kKCkpIHsKLSAgICAgICAgICAg
IE5QT2JqZWN0U2V0KiBsaXN0ID0gb3duZXJFbnRyeS0+c2Vjb25kOworICAgICAgICAgICAgTlBP
YmplY3RTZXQqIGxpc3QgPSBvd25lckVudHJ5LT52YWx1ZTsKICAgICAgICAgICAgIEFTU0VSVChs
aXN0LT5maW5kKG5wT2JqZWN0KSAhPSBsaXN0LT5lbmQoKSk7CiAgICAgICAgICAgICBsaXN0LT5y
ZW1vdmUobnBPYmplY3QpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
cmlkZ2UvSWRlbnRpZmllclJlcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvSWRlbnRpZmll
clJlcC5jcHAKaW5kZXggZWJhNWQ1M2E5MWNlYTkzNmE0M2QzNTAwYjkyOWUyOGFhZjVjMjM0MS4u
NTlhZjU0OWZiOWRkMzQ0MGQyYmQ4NzY2ZDdjMzBhNzc0ZDI4YmY4NCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYnJpZGdlL0lkZW50aWZpZXJSZXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JyaWRnZS9JZGVudGlmaWVyUmVwLmNwcApAQCAtNjgsMTMgKzY4LDEzIEBAIElkZW50aWZpZXJS
ZXAqIElkZW50aWZpZXJSZXA6OmdldChpbnQgaW50SUQpCiAgICAgCiAgICAgSW50SWRlbnRpZmll
ck1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IGludElkZW50aWZpZXJNYXAoKS5hZGQoaW50SUQsIDAp
OwogICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICBBU1NFUlQoIXJlc3VsdC5p
dGVyYXRvci0+c2Vjb25kKTsKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBuZXcg
SWRlbnRpZmllclJlcChpbnRJRCk7CisgICAgICAgIEFTU0VSVCghcmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZSk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBuZXcgSWRlbnRpZmllclJl
cChpbnRJRCk7CiAgICAgICAgIAotICAgICAgICBpZGVudGlmaWVyU2V0KCkuYWRkKHJlc3VsdC5p
dGVyYXRvci0+c2Vjb25kKTsKKyAgICAgICAgaWRlbnRpZmllclNldCgpLmFkZChyZXN1bHQuaXRl
cmF0b3ItPnZhbHVlKTsKICAgICB9CiAgICAgCi0gICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+
c2Vjb25kOworICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogfQogCiB0eXBlZGVm
IEhhc2hNYXA8UmVmUHRyPFN0cmluZ0ltcGw+LCBJZGVudGlmaWVyUmVwKj4gU3RyaW5nSWRlbnRp
Zmllck1hcDsKQEAgLTk0LDEzICs5NCwxMyBAQCBJZGVudGlmaWVyUmVwKiBJZGVudGlmaWVyUmVw
OjpnZXQoY29uc3QgY2hhciogbmFtZSkKICAgICBTdHJpbmcgc3RyaW5nID0gU3RyaW5nOjpmcm9t
VVRGOFdpdGhMYXRpbjFGYWxsYmFjayhuYW1lLCBzdHJsZW4obmFtZSkpOwogICAgIFN0cmluZ0lk
ZW50aWZpZXJNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBzdHJpbmdJZGVudGlmaWVyTWFwKCkuYWRk
KHN0cmluZy5pbXBsKCksIDApOwogICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAg
ICBBU1NFUlQoIXJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKLSAgICAgICAgcmVzdWx0Lml0ZXJh
dG9yLT5zZWNvbmQgPSBuZXcgSWRlbnRpZmllclJlcChuYW1lKTsKKyAgICAgICAgQVNTRVJUKCFy
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9
IG5ldyBJZGVudGlmaWVyUmVwKG5hbWUpOwogICAgICAgICAKLSAgICAgICAgaWRlbnRpZmllclNl
dCgpLmFkZChyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7CisgICAgICAgIGlkZW50aWZpZXJTZXQo
KS5hZGQocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CiAgICAgfQogICAgIAotICAgIHJldHVybiBy
ZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZTsKIH0KIAogYm9vbCBJZGVudGlmaWVyUmVwOjppc1ZhbGlkKElkZW50aWZpZXJSZXAqIGlkZW50
aWZpZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvTlBfanNvYmplY3QuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL05QX2pzb2JqZWN0LmNwcAppbmRleCBjMDJjZWVlNDZi
NzM2ZDgyZDYxZjA3ODAwN2ZhYzJlNGUzODQyY2M2Li4wMmJjYTgzNTZlODUwN2ExZWNhMmEzZDhh
NDkxMjVkYzk0ZWQzNjBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvTlBfanNv
YmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9OUF9qc29iamVjdC5jcHAKQEAg
LTY0LDggKzY0LDggQEAgcHVibGljOgogICAgICAgICAgICAgaXRlciA9IG1fbWFwLmFkZChyb290
T2JqZWN0LCBKU1RvTlBPYmplY3RNYXAoKSkuaXRlcmF0b3I7CiAgICAgICAgIH0KIAotICAgICAg
ICBBU1NFUlQoaXRlci0+c2Vjb25kLmZpbmQoanNPYmplY3QpID09IGl0ZXItPnNlY29uZC5lbmQo
KSk7Ci0gICAgICAgIGl0ZXItPnNlY29uZC5hZGQoanNPYmplY3QsIG5wT2JqZWN0KTsKKyAgICAg
ICAgQVNTRVJUKGl0ZXItPnZhbHVlLmZpbmQoanNPYmplY3QpID09IGl0ZXItPnZhbHVlLmVuZCgp
KTsKKyAgICAgICAgaXRlci0+dmFsdWUuYWRkKGpzT2JqZWN0LCBucE9iamVjdCk7CiAgICAgfQog
CiAgICAgdm9pZCByZW1vdmUoUm9vdE9iamVjdCogcm9vdE9iamVjdCkKQEAgLTc5LDkgKzc5LDkg
QEAgcHVibGljOgogICAgIHsKICAgICAgICAgSGFzaE1hcDxSb290T2JqZWN0KiwgSlNUb05QT2Jq
ZWN0TWFwPjo6aXRlcmF0b3IgaXRlciA9IG1fbWFwLmZpbmQocm9vdE9iamVjdCk7CiAgICAgICAg
IEFTU0VSVChpdGVyICE9IG1fbWFwLmVuZCgpKTsKLSAgICAgICAgQVNTRVJUKGl0ZXItPnNlY29u
ZC5maW5kKGpzT2JqZWN0KSAhPSBpdGVyLT5zZWNvbmQuZW5kKCkpOworICAgICAgICBBU1NFUlQo
aXRlci0+dmFsdWUuZmluZChqc09iamVjdCkgIT0gaXRlci0+dmFsdWUuZW5kKCkpOwogCi0gICAg
ICAgIGl0ZXItPnNlY29uZC5yZW1vdmUoanNPYmplY3QpOworICAgICAgICBpdGVyLT52YWx1ZS5y
ZW1vdmUoanNPYmplY3QpOwogICAgIH0KIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JyaWRnZS9ydW50aW1lX3Jvb3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1
bnRpbWVfcm9vdC5jcHAKaW5kZXggOWI2MjI0YThiNTYwZmM1ZTYwZTE1ODllNTc5ZDE0MjU0OTcy
OTEzNC4uNzRkODMxOTIxZjIxOWI4YjczMzM2NzU5MTVlNDFiZGMxN2RkZmRjZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfcm9vdC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYnJpZGdlL3J1bnRpbWVfcm9vdC5jcHAKQEAgLTEwNSw3ICsxMDUsNyBAQCB2b2lkIFJv
b3RPYmplY3Q6OmludmFsaWRhdGUoKQogICAgIHsKICAgICAgICAgSGFzaE1hcDxSdW50aW1lT2Jq
ZWN0KiwgSlNDOjpXZWFrPFJ1bnRpbWVPYmplY3Q+ID46Oml0ZXJhdG9yIGVuZCA9IG1fcnVudGlt
ZU9iamVjdHMuZW5kKCk7CiAgICAgICAgIGZvciAoSGFzaE1hcDxSdW50aW1lT2JqZWN0KiwgSlND
OjpXZWFrPFJ1bnRpbWVPYmplY3Q+ID46Oml0ZXJhdG9yIGl0ID0gbV9ydW50aW1lT2JqZWN0cy5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIFJ1bnRpbWVPYmplY3QqIHJ1
bnRpbWVPYmplY3QgPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgUnVudGltZU9iamVj
dCogcnVudGltZU9iamVjdCA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGlmICghcnVu
dGltZU9iamVjdCkgLy8gU2tpcCB6b21iaWVzLgogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAgICAgcnVudGltZU9iamVjdC0+aW52YWxpZGF0ZSgpOwpAQCAtMTI5LDcgKzEyOSw3
IEBAIHZvaWQgUm9vdE9iamVjdDo6aW52YWxpZGF0ZSgpCiAKICAgICBQcm90ZWN0Q291bnRTZXQ6
Oml0ZXJhdG9yIGVuZCA9IG1fcHJvdGVjdENvdW50U2V0LmVuZCgpOwogICAgIGZvciAoUHJvdGVj
dENvdW50U2V0OjppdGVyYXRvciBpdCA9IG1fcHJvdGVjdENvdW50U2V0LmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkKLSAgICAgICAgSlNDOjpnY1VucHJvdGVjdChpdC0+Zmlyc3QpOworICAgICAg
ICBKU0M6OmdjVW5wcm90ZWN0KGl0LT5rZXkpOwogICAgIG1fcHJvdGVjdENvdW50U2V0LmNsZWFy
KCk7CiAKICAgICByb290T2JqZWN0U2V0KCktPnJlbW92ZSh0aGlzKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NDYW52YXNWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTQ2FudmFzVmFsdWUuY3BwCmluZGV4IDc4N2ExNzQyY2IyMjM3ZmI2ZWZjN2M1MTliMjcxMWJi
ZjU2OThkMTQuLjNhZWExN2M0NGViNTNjZjhmYWJkYTc2NTM0MDNmMjA5ZjQ5YjBhODAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYW52YXNWYWx1ZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0NhbnZhc1ZhbHVlLmNwcApAQCAtNTMsMTQgKzUzLDE0IEBAIHZvaWQg
Q1NTQ2FudmFzVmFsdWU6OmNhbnZhc0NoYW5nZWQoSFRNTENhbnZhc0VsZW1lbnQqLCBjb25zdCBG
bG9hdFJlY3QmIGNoYW5nZWRSCiAgICAgSW50UmVjdCBpbWFnZUNoYW5nZVJlY3QgPSBlbmNsb3Np
bmdJbnRSZWN0KGNoYW5nZWRSZWN0KTsKICAgICBSZW5kZXJPYmplY3RTaXplQ291bnRNYXA6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IGNsaWVudHMoKS5lbmQoKTsKICAgICBmb3IgKFJlbmRlck9iamVj
dFNpemVDb3VudE1hcDo6Y29uc3RfaXRlcmF0b3IgY3VyciA9IGNsaWVudHMoKS5iZWdpbigpOyBj
dXJyICE9IGVuZDsgKytjdXJyKQotICAgICAgICBjb25zdF9jYXN0PFJlbmRlck9iamVjdCo+KGN1
cnItPmZpcnN0KS0+aW1hZ2VDaGFuZ2VkKHN0YXRpY19jYXN0PFdyYXBwZWRJbWFnZVB0cj4odGhp
cyksICZpbWFnZUNoYW5nZVJlY3QpOworICAgICAgICBjb25zdF9jYXN0PFJlbmRlck9iamVjdCo+
KGN1cnItPmtleSktPmltYWdlQ2hhbmdlZChzdGF0aWNfY2FzdDxXcmFwcGVkSW1hZ2VQdHI+KHRo
aXMpLCAmaW1hZ2VDaGFuZ2VSZWN0KTsKIH0KIAogdm9pZCBDU1NDYW52YXNWYWx1ZTo6Y2FudmFz
UmVzaXplZChIVE1MQ2FudmFzRWxlbWVudCopCiB7CiAgICAgUmVuZGVyT2JqZWN0U2l6ZUNvdW50
TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBjbGllbnRzKCkuZW5kKCk7CiAgICAgZm9yIChSZW5k
ZXJPYmplY3RTaXplQ291bnRNYXA6OmNvbnN0X2l0ZXJhdG9yIGN1cnIgPSBjbGllbnRzKCkuYmVn
aW4oKTsgY3VyciAhPSBlbmQ7ICsrY3VycikKLSAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJPYmpl
Y3QqPihjdXJyLT5maXJzdCktPmltYWdlQ2hhbmdlZChzdGF0aWNfY2FzdDxXcmFwcGVkSW1hZ2VQ
dHI+KHRoaXMpKTsKKyAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJPYmplY3QqPihjdXJyLT5rZXkp
LT5pbWFnZUNoYW5nZWQoc3RhdGljX2Nhc3Q8V3JhcHBlZEltYWdlUHRyPih0aGlzKSk7CiB9CiAK
IHZvaWQgQ1NTQ2FudmFzVmFsdWU6OmNhbnZhc0Rlc3Ryb3llZChIVE1MQ2FudmFzRWxlbWVudCog
ZWxlbWVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxl
RGVjbGFyYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNs
YXJhdGlvbi5jcHAKaW5kZXggMWJhNmM4ODI0MmNhY2RmOTc0YjNkMGQxZmIyZmQwZTE4NWRmNzU2
YS4uNjQzNzZjZGI1MmE1NDNiMGUzNzc5MTA2YWJiM2JiNzM0NGI2ZWEyNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKQEAgLTEz
MDIsOCArMTMwMiw4IEBAIHN0YXRpYyBQYXNzUmVmUHRyPENTU1ZhbHVlPiBjb3VudGVyVG9DU1NW
YWx1ZShjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIENTU1Byb3BlCiAKICAgICBSZWZQdHI8Q1NT
VmFsdWVMaXN0PiBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOwog
ICAgIGZvciAoQ291bnRlckRpcmVjdGl2ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJl
Z2luKCk7IGl0ICE9IG1hcC0+ZW5kKCk7ICsraXQpIHsKLSAgICAgICAgbGlzdC0+YXBwZW5kKGNz
c1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKGl0LT5maXJzdCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19TVFJJTkcpKTsKLSAgICAgICAgc2hvcnQgbnVtYmVyID0gcHJvcGVydHlJRCA9PSBDU1NQcm9w
ZXJ0eUNvdW50ZXJJbmNyZW1lbnQgPyBpdC0+c2Vjb25kLmluY3JlbWVudFZhbHVlKCkgOiBpdC0+
c2Vjb25kLnJlc2V0VmFsdWUoKTsKKyAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgp
LmNyZWF0ZVZhbHVlKGl0LT5rZXksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKSk7Cisg
ICAgICAgIHNob3J0IG51bWJlciA9IHByb3BlcnR5SUQgPT0gQ1NTUHJvcGVydHlDb3VudGVySW5j
cmVtZW50ID8gaXQtPnZhbHVlLmluY3JlbWVudFZhbHVlKCkgOiBpdC0+dmFsdWUucmVzZXRWYWx1
ZSgpOwogICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoKGRv
dWJsZSludW1iZXIsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7CiAgICAgfQogICAg
IHJldHVybiBsaXN0LnJlbGVhc2UoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NDcm9zc2ZhZGVWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Jvc3NmYWRlVmFs
dWUuY3BwCmluZGV4IGEyMjRhMzYxMTljZGI3Njk5YjU4OTFmODM5OWE1NGZkZmM1OWYxMjAuLjEy
NjczNGZmY2JkNjc0OTIxNDlhODBiOTFmNGQ3ZmY3ZDFiZmMwMjIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NDcm9zc2ZhZGVWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0Nyb3NzZmFkZVZhbHVlLmNwcApAQCAtMTc5LDcgKzE3OSw3IEBAIHZvaWQgQ1NTQ3Jv
c3NmYWRlVmFsdWU6OmNyb3NzZmFkZUNoYW5nZWQoY29uc3QgSW50UmVjdCYpCiB7CiAgICAgUmVu
ZGVyT2JqZWN0U2l6ZUNvdW50TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBjbGllbnRzKCkuZW5k
KCk7CiAgICAgZm9yIChSZW5kZXJPYmplY3RTaXplQ291bnRNYXA6OmNvbnN0X2l0ZXJhdG9yIGN1
cnIgPSBjbGllbnRzKCkuYmVnaW4oKTsgY3VyciAhPSBlbmQ7ICsrY3VycikgewotICAgICAgICBS
ZW5kZXJPYmplY3QqIGNsaWVudCA9IGNvbnN0X2Nhc3Q8UmVuZGVyT2JqZWN0Kj4oY3Vyci0+Zmly
c3QpOworICAgICAgICBSZW5kZXJPYmplY3QqIGNsaWVudCA9IGNvbnN0X2Nhc3Q8UmVuZGVyT2Jq
ZWN0Kj4oY3Vyci0+a2V5KTsKICAgICAgICAgY2xpZW50LT5pbWFnZUNoYW5nZWQoc3RhdGljX2Nh
c3Q8V3JhcHBlZEltYWdlUHRyPih0aGlzKSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NGb250RmFjZVNvdXJjZS5jcHAKaW5kZXggODFhMDVhMTUwYjgxNTVlMWRhOWIwNjUxMjI4ZDI0
MTE1ZjU0NmQ4OS4uNWU1Mjg5ZjZkNTIyN2FlOWZkMWNjY2EyNzRiODFjYzEyY2VkOTFkYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU291cmNlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuY3BwCkBAIC0xMTMsNyArMTEzLDcg
QEAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gQ1NTRm9udEZhY2VTb3VyY2U6OmdldEZvbnRE
YXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYKICAgICB1bnNpZ25lZCBoYXNoS2V5ID0gKGZvbnRE
ZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpICsgMSkgPDwgNiB8IGZvbnREZXNjcmlwdGlv
bi53aWR0aFZhcmlhbnQoKSA8PCA0CiAgICAgICAgICAgICAgICAgICAgICAgIHwgKGZvbnREZXNj
cmlwdGlvbi50ZXh0T3JpZW50YXRpb24oKSA9PSBUZXh0T3JpZW50YXRpb25VcHJpZ2h0ID8gOCA6
IDApIHwgKGZvbnREZXNjcmlwdGlvbi5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsID8gNCA6IDAp
IHwgKHN5bnRoZXRpY0JvbGQgPyAyIDogMCkgfCAoc3ludGhldGljSXRhbGljID8gMSA6IDApOwog
Ci0gICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiYgZm9udERhdGEgPSBtX2ZvbnREYXRhVGFibGUu
YWRkKGhhc2hLZXksIDApLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgUmVmUHRyPFNpbXBsZUZvbnRE
YXRhPiYgZm9udERhdGEgPSBtX2ZvbnREYXRhVGFibGUuYWRkKGhhc2hLZXksIDApLml0ZXJhdG9y
LT52YWx1ZTsKICAgICBpZiAoZm9udERhdGEpCiAgICAgICAgIHJldHVybiBmb250RGF0YTsgLy8g
Tm8gcmVsZWFzZSwgYmVjYXVzZSBmb250RGF0YSBpcyBhIHJlZmVyZW5jZSB0byBhIFJlZlB0ciB0
aGF0IGlzIGhlbGQgaW4gdGhlIG1fZm9udERhdGFUYWJsZS4KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
Rm9udFNlbGVjdG9yLmNwcAppbmRleCA4MjViZmEyYmQyNDUwNzE2MmNjZGE1MmFiNGVhODdmZGFh
NTI4ZGUyLi42NGVlMGE4ZDc3MzIwNjFlMTg5OTZjN2JjM2ZlYzFlOTAwM2E3MmY0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmNwcApAQCAtMjg1LDcgKzI4NSw3IEBAIHZvaWQg
Q1NTRm9udFNlbGVjdG9yOjphZGRGb250RmFjZVJ1bGUoY29uc3QgU3R5bGVSdWxlRm9udEZhY2Uq
IGZvbnRGYWNlUnVsZSkKICAgICAgICAgaWYgKGZhbWlseU5hbWUuaXNFbXB0eSgpKQogICAgICAg
ICAgICAgY29udGludWU7CiAKLSAgICAgICAgT3duUHRyPFZlY3RvcjxSZWZQdHI8Q1NTRm9udEZh
Y2U+ID4gPiYgZmFtaWx5Rm9udEZhY2VzID0gbV9mb250RmFjZXMuYWRkKGZhbWlseU5hbWUsIG51
bGxwdHIpLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgIE93blB0cjxWZWN0b3I8UmVmUHRyPENT
U0ZvbnRGYWNlPiA+ID4mIGZhbWlseUZvbnRGYWNlcyA9IG1fZm9udEZhY2VzLmFkZChmYW1pbHlO
YW1lLCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgIGlmICghZmFtaWx5Rm9udEZh
Y2VzKSB7CiAgICAgICAgICAgICBmYW1pbHlGb250RmFjZXMgPSBhZG9wdFB0cihuZXcgVmVjdG9y
PFJlZlB0cjxDU1NGb250RmFjZT4gPik7CiAKQEAgLTQ4NywxMyArNDg3LDEzIEBAIFBhc3NSZWZQ
dHI8Rm9udERhdGE+IENTU0ZvbnRTZWxlY3Rvcjo6Z2V0Rm9udERhdGEoY29uc3QgRm9udERlc2Ny
aXB0aW9uJiBmb250RGVzCiAgICAgICAgIHJldHVybiBmb250RGF0YUZvckdlbmVyaWNGYW1pbHko
bV9kb2N1bWVudCwgZm9udERlc2NyaXB0aW9uLCBmYW1pbHlOYW1lKTsKICAgICB9CiAKLSAgICBP
d25QdHI8SGFzaE1hcDx1bnNpZ25lZCwgUmVmUHRyPENTU1NlZ21lbnRlZEZvbnRGYWNlPiA+ID4m
IHNlZ21lbnRlZEZvbnRGYWNlQ2FjaGUgPSBtX2ZvbnRzLmFkZChmYW1pbHksIG51bGxwdHIpLml0
ZXJhdG9yLT5zZWNvbmQ7CisgICAgT3duUHRyPEhhc2hNYXA8dW5zaWduZWQsIFJlZlB0cjxDU1NT
ZWdtZW50ZWRGb250RmFjZT4gPiA+JiBzZWdtZW50ZWRGb250RmFjZUNhY2hlID0gbV9mb250cy5h
ZGQoZmFtaWx5LCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCFzZWdtZW50ZWRG
b250RmFjZUNhY2hlKQogICAgICAgICBzZWdtZW50ZWRGb250RmFjZUNhY2hlID0gYWRvcHRQdHIo
bmV3IEhhc2hNYXA8dW5zaWduZWQsIFJlZlB0cjxDU1NTZWdtZW50ZWRGb250RmFjZT4gPik7CiAK
ICAgICBGb250VHJhaXRzTWFzayB0cmFpdHNNYXNrID0gZm9udERlc2NyaXB0aW9uLnRyYWl0c01h
c2soKTsKIAotICAgIFJlZlB0cjxDU1NTZWdtZW50ZWRGb250RmFjZT4mIGZhY2UgPSBzZWdtZW50
ZWRGb250RmFjZUNhY2hlLT5hZGQodHJhaXRzTWFzaywgMCkuaXRlcmF0b3ItPnNlY29uZDsKKyAg
ICBSZWZQdHI8Q1NTU2VnbWVudGVkRm9udEZhY2U+JiBmYWNlID0gc2VnbWVudGVkRm9udEZhY2VD
YWNoZS0+YWRkKHRyYWl0c01hc2ssIDApLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoIWZhY2Up
IHsKICAgICAgICAgZmFjZSA9IENTU1NlZ21lbnRlZEZvbnRGYWNlOjpjcmVhdGUodGhpcyk7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZUdlbmVyYXRvclZhbHVlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZUdlbmVyYXRvclZhbHVlLmNwcAppbmRleCAx
ZTQwNDExYWMxMWIxZGM4MTc5YmRmMDMyNmY3YWU2NDE1MTY3ZGUwLi44Y2Y0N2YwNmQyOWFjMGY4
OWZjMTU0ZDQ1OWY1ODU5ODczYjVkOWMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0lt
YWdlR2VuZXJhdG9yVmFsdWUuY3BwCkBAIC01OSw3ICs1OSw3IEBAIHZvaWQgQ1NTSW1hZ2VHZW5l
cmF0b3JWYWx1ZTo6YWRkQ2xpZW50KFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IEludFNp
emUmIHNpCiAgICAgaWYgKGl0ID09IG1fY2xpZW50cy5lbmQoKSkKICAgICAgICAgbV9jbGllbnRz
LmFkZChyZW5kZXJlciwgU2l6ZUFuZENvdW50KHNpemUsIDEpKTsKICAgICBlbHNlIHsKLSAgICAg
ICAgU2l6ZUFuZENvdW50JiBzaXplQ291bnQgPSBpdC0+c2Vjb25kOworICAgICAgICBTaXplQW5k
Q291bnQmIHNpemVDb3VudCA9IGl0LT52YWx1ZTsKICAgICAgICAgKytzaXplQ291bnQuY291bnQ7
CiAgICAgfQogfQpAQCAtNzEsNyArNzEsNyBAQCB2b2lkIENTU0ltYWdlR2VuZXJhdG9yVmFsdWU6
OnJlbW92ZUNsaWVudChSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogICAgIEFTU0VSVChpdCAhPSBt
X2NsaWVudHMuZW5kKCkpOwogCiAgICAgSW50U2l6ZSByZW1vdmVkSW1hZ2VTaXplOwotICAgIFNp
emVBbmRDb3VudCYgc2l6ZUNvdW50ID0gaXQtPnNlY29uZDsKKyAgICBTaXplQW5kQ291bnQmIHNp
emVDb3VudCA9IGl0LT52YWx1ZTsKICAgICBJbnRTaXplIHNpemUgPSBzaXplQ291bnQuc2l6ZTsK
ICAgICBpZiAoIXNpemUuaXNFbXB0eSgpKSB7CiAgICAgICAgIG1fc2l6ZXMucmVtb3ZlKHNpemUp
OwpAQCAtODksNyArODksNyBAQCBJbWFnZSogQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6Z2V0SW1h
Z2UoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgSW50U2l6ZSYgcwogewogICAgIFJlbmRl
ck9iamVjdFNpemVDb3VudE1hcDo6aXRlcmF0b3IgaXQgPSBtX2NsaWVudHMuZmluZChyZW5kZXJl
cik7CiAgICAgaWYgKGl0ICE9IG1fY2xpZW50cy5lbmQoKSkgewotICAgICAgICBTaXplQW5kQ291
bnQmIHNpemVDb3VudCA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFNpemVBbmRDb3VudCYgc2l6ZUNv
dW50ID0gaXQtPnZhbHVlOwogICAgICAgICBJbnRTaXplIG9sZFNpemUgPSBzaXplQ291bnQuc2l6
ZTsKICAgICAgICAgaWYgKG9sZFNpemUgIT0gc2l6ZSkgewogICAgICAgICAgICAgUmVmUHRyPENT
U0ltYWdlR2VuZXJhdG9yVmFsdWU+IHByb3RlY3QodGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1NlZ21lbnRlZEZvbnRGYWNlLmNwcAppbmRleCBkOWJhMTVlMTc1YzY0MDgwOWYwYWJlNjE1
YmQ3Zjc3OGYxZTczMGRiLi5hYThkZmE2ODFjZjgwNzQzN2JhNDdjZjY1YWJmZWYzYzgwYmM3Njdk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5jcHAKQEAgLTEw
Nyw3ICsxMDcsNyBAQCBQYXNzUmVmUHRyPEZvbnREYXRhPiBDU1NTZWdtZW50ZWRGb250RmFjZTo6
Z2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmbwogICAgIEZvbnRUcmFpdHNNYXNr
IGRlc2lyZWRUcmFpdHNNYXNrID0gZm9udERlc2NyaXB0aW9uLnRyYWl0c01hc2soKTsKICAgICB1
bnNpZ25lZCBoYXNoS2V5ID0gKChmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSAr
IDEpIDw8IChGb250VHJhaXRzTWFza1dpZHRoICsgMSkpIHwgKChmb250RGVzY3JpcHRpb24ub3Jp
ZW50YXRpb24oKSA9PSBWZXJ0aWNhbCA/IDEgOiAwKSA8PCBGb250VHJhaXRzTWFza1dpZHRoKSB8
IGRlc2lyZWRUcmFpdHNNYXNrOwogCi0gICAgUmVmUHRyPFNlZ21lbnRlZEZvbnREYXRhPiYgZm9u
dERhdGEgPSBtX2ZvbnREYXRhVGFibGUuYWRkKGhhc2hLZXksIDApLml0ZXJhdG9yLT5zZWNvbmQ7
CisgICAgUmVmUHRyPFNlZ21lbnRlZEZvbnREYXRhPiYgZm9udERhdGEgPSBtX2ZvbnREYXRhVGFi
bGUuYWRkKGhhc2hLZXksIDApLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoZm9udERhdGEgJiYg
Zm9udERhdGEtPm51bVJhbmdlcygpKQogICAgICAgICByZXR1cm4gZm9udERhdGE7IC8vIE5vIHJl
bGVhc2UsIHdlIGhhdmUgYSByZWZlcmVuY2UgdG8gYW4gb2JqZWN0IGluIHRoZSBjYWNoZSB3aGlj
aCBzaG91bGQgcmV0YWluIHRoZSByZWYgY291bnQgaXQgaGFzLgogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTU2VsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Nl
bGVjdG9yLmNwcAppbmRleCA2MTg2YjNiNDE0MWY2MWM4ZDE0ODQ3ZTY5ZWNlMDk1Yzk0ZDg0MDJh
Li5kMmJhNzU2Nzc3MjIzZWNiNWZmY2VlYjFmNjhhNTQxYzMyN2UyZjFmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VsZWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NTZWxlY3Rvci5jcHAKQEAgLTM4Nyw3ICszODcsNyBAQCBDU1NTZWxlY3Rvcjo6UHNldWRv
VHlwZSBDU1NTZWxlY3Rvcjo6cGFyc2VQc2V1ZG9UeXBlKGNvbnN0IEF0b21pY1N0cmluZyYgbmFt
ZSkKICAgICAgICAgcmV0dXJuIFBzZXVkb1Vua25vd247CiAgICAgSGFzaE1hcDxBdG9taWNTdHJp
bmdJbXBsKiwgQ1NTU2VsZWN0b3I6OlBzZXVkb1R5cGU+KiBuYW1lVG9Qc2V1ZG9UeXBlID0gbmFt
ZVRvUHNldWRvVHlwZU1hcCgpOwogICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCosIENTU1Nl
bGVjdG9yOjpQc2V1ZG9UeXBlPjo6aXRlcmF0b3Igc2xvdCA9IG5hbWVUb1BzZXVkb1R5cGUtPmZp
bmQobmFtZS5pbXBsKCkpOwotICAgIHJldHVybiBzbG90ID09IG5hbWVUb1BzZXVkb1R5cGUtPmVu
ZCgpID8gUHNldWRvVW5rbm93biA6IHNsb3QtPnNlY29uZDsKKyAgICByZXR1cm4gc2xvdCA9PSBu
YW1lVG9Qc2V1ZG9UeXBlLT5lbmQoKSA/IFBzZXVkb1Vua25vd24gOiBzbG90LT52YWx1ZTsKIH0K
IAogYm9vbCBDU1NTZWxlY3Rvcjo6aXNVbmtub3duUHNldWRvVHlwZShjb25zdCBBdG9taWNTdHJp
bmcmIG5hbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVQb29sLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZVBvb2wuY3BwCmluZGV4IGNlNzU3YjkzM2Iz
ZjRhMzAyZTg3MTY1NjhkMDNlMDNkYmYxYjA3NmMuLmMxNjg5OTE5ZDE2ZWUxNmYwZWUwNzMxOTE5
OTZlOTdjNWM4ZmM5MGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZVBv
b2wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZVBvb2wuY3BwCkBAIC03OCw4
ICs3OCw4IEBAIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IENTU1ZhbHVlUG9vbDo6Y3Jl
YXRlQ29sb3JWYWx1ZSh1bnNpZ25lZCByZ2JWYWx1ZSkKICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+IGR1bW15VmFsdWU7CiAgICAgQ29sb3JWYWx1ZUNhY2hlOjpBZGRSZXN1bHQgZW50cnkg
PSBtX2NvbG9yVmFsdWVDYWNoZS5hZGQocmdiVmFsdWUsIGR1bW15VmFsdWUpOwogICAgIGlmIChl
bnRyeS5pc05ld0VudHJ5KQotICAgICAgICBlbnRyeS5pdGVyYXRvci0+c2Vjb25kID0gQ1NTUHJp
bWl0aXZlVmFsdWU6OmNyZWF0ZUNvbG9yKHJnYlZhbHVlKTsKLSAgICByZXR1cm4gZW50cnkuaXRl
cmF0b3ItPnNlY29uZDsKKyAgICAgICAgZW50cnkuaXRlcmF0b3ItPnZhbHVlID0gQ1NTUHJpbWl0
aXZlVmFsdWU6OmNyZWF0ZUNvbG9yKHJnYlZhbHVlKTsKKyAgICByZXR1cm4gZW50cnkuaXRlcmF0
b3ItPnZhbHVlOwogfQogCiBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NWYWx1ZVBv
b2w6OmNyZWF0ZVZhbHVlKGRvdWJsZSB2YWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBl
cyB0eXBlKQpAQCAtMTEzLDcgKzExMyw3IEBAIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IENTU1ZhbHVlUG9vbDo6Y3JlYXRlVmFsdWUoZG91YmxlIHZhbHVlLCBDU1NQcmltaXRpCiAKIFBh
c3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IENTU1ZhbHVlUG9vbDo6Y3JlYXRlRm9udEZhbWls
eVZhbHVlKGNvbnN0IFN0cmluZyYgZmFtaWx5TmFtZSkKIHsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+JiB2YWx1ZSA9IG1fZm9udEZhbWlseVZhbHVlQ2FjaGUuYWRkKGZhbWlseU5hbWUs
IDApLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYgdmFs
dWUgPSBtX2ZvbnRGYW1pbHlWYWx1ZUNhY2hlLmFkZChmYW1pbHlOYW1lLCAwKS5pdGVyYXRvci0+
dmFsdWU7CiAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgdmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1
ZTo6Y3JlYXRlKGZhbWlseU5hbWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKTsKICAg
ICByZXR1cm4gdmFsdWU7CkBAIC0xMjYsNyArMTI2LDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZUxp
c3Q+IENTU1ZhbHVlUG9vbDo6Y3JlYXRlRm9udEZhY2VWYWx1ZShjb25zdCBBdG9taWNTdHJpbmcm
IHMKICAgICBpZiAobV9mb250RmFjZVZhbHVlQ2FjaGUuc2l6ZSgpID4gbWF4aW11bUZvbnRGYWNl
Q2FjaGVTaXplKQogICAgICAgICBtX2ZvbnRGYWNlVmFsdWVDYWNoZS5jbGVhcigpOwogCi0gICAg
UmVmUHRyPENTU1ZhbHVlTGlzdD4mIHZhbHVlID0gbV9mb250RmFjZVZhbHVlQ2FjaGUuYWRkKHN0
cmluZywgMCkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiYgdmFs
dWUgPSBtX2ZvbnRGYWNlVmFsdWVDYWNoZS5hZGQoc3RyaW5nLCAwKS5pdGVyYXRvci0+dmFsdWU7
CiAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgdmFsdWUgPSBDU1NQYXJzZXI6OnBhcnNlRm9udEZh
Y2VWYWx1ZShzdHJpbmcpOwogICAgIHJldHVybiB2YWx1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9Qcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24uY3BwIGIvU291cmNlL1dl
YkNvcmUvY3NzL1Byb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAKaW5kZXggNWZhZGYx
NmYwM2U1MDE2NjFiMjYyNTkyNTA1NWY5MGNiODI3ODcxNC4uOTNkNGU0NTM4MDdmMjNmOTY4OGEy
MTU4OTI3NTk1ODA0MWRmMTBiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1Byb3Bl
cnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1By
b3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAKQEAgLTM0Niw3ICszNDYsNyBAQCBDU1NW
YWx1ZSogUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpjbG9uZUFuZENhY2hlRm9yQ1NT
T00oQ1NTVmFsdWUqIGludGVybgogICAgIGlmICghbV9jc3NvbUNTU1ZhbHVlQ2xvbmVzKQogICAg
ICAgICBtX2Nzc29tQ1NTVmFsdWVDbG9uZXMgPSBhZG9wdFB0cihuZXcgSGFzaE1hcDxDU1NWYWx1
ZSosIFJlZlB0cjxDU1NWYWx1ZT4gPik7CiAgICAgCi0gICAgUmVmUHRyPENTU1ZhbHVlPiYgY2xv
bmVkVmFsdWUgPSBtX2Nzc29tQ1NTVmFsdWVDbG9uZXMtPmFkZChpbnRlcm5hbFZhbHVlLCBSZWZQ
dHI8Q1NTVmFsdWU+KCkpLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgUmVmUHRyPENTU1ZhbHVlPiYg
Y2xvbmVkVmFsdWUgPSBtX2Nzc29tQ1NTVmFsdWVDbG9uZXMtPmFkZChpbnRlcm5hbFZhbHVlLCBS
ZWZQdHI8Q1NTVmFsdWU+KCkpLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoIWNsb25lZFZhbHVl
KQogICAgICAgICBjbG9uZWRWYWx1ZSA9IGludGVybmFsVmFsdWUtPmNsb25lRm9yQ1NTT00oKTsK
ICAgICByZXR1cm4gY2xvbmVkVmFsdWUuZ2V0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvUnVsZVNldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvUnVsZVNldC5jcHAKaW5kZXgg
OTU0ZTAwOGM0ZmZkMzEzZWViMjA4YjU3ODQ5OWIwMWNhMTJjMmViZC4uZTJiZTU3NzFlMDI1ZjE0
Y2Y5YTg1ZGU3ZTUxY2Q5YzVhMTMwOTA1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nz
L1J1bGVTZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9SdWxlU2V0LmNwcApAQCAtMTM0
LDcgKzEzNCw3IEBAIHN0YXRpYyB2b2lkIHJlcG9ydEF0b21SdWxlTWFwKE1lbW9yeUNsYXNzSW5m
byogaW5mbywgY29uc3QgUnVsZVNldDo6QXRvbVJ1bGVNYXAmCiB7CiAgICAgaW5mby0+YWRkTWVt
YmVyKGF0b21pY1J1bGVNYXApOwogICAgIGZvciAoUnVsZVNldDo6QXRvbVJ1bGVNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gYXRvbWljUnVsZU1hcC5iZWdpbigpOyBpdCAhPSBhdG9taWNSdWxlTWFw
LmVuZCgpOyArK2l0KQotICAgICAgICBpbmZvLT5hZGRNZW1iZXIoKml0LT5zZWNvbmQpOworICAg
ICAgICBpbmZvLT5hZGRNZW1iZXIoKml0LT52YWx1ZSk7CiB9CiAKIHZvaWQgUnVsZVNldDo6cmVw
b3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29uc3QK
QEAgLTIwMSw3ICsyMDEsNyBAQCB2b2lkIFJ1bGVTZXQ6OmFkZFRvUnVsZVNldChBdG9taWNTdHJp
bmdJbXBsKiBrZXksIEF0b21SdWxlTWFwJiBtYXAsIGNvbnN0IFJ1bGVEYQogewogICAgIGlmICgh
a2V5KQogICAgICAgICByZXR1cm47Ci0gICAgT3duUHRyPFZlY3RvcjxSdWxlRGF0YT4gPiYgcnVs
ZXMgPSBtYXAuYWRkKGtleSwgbnVsbHB0cikuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBPd25QdHI8
VmVjdG9yPFJ1bGVEYXRhPiA+JiBydWxlcyA9IG1hcC5hZGQoa2V5LCBudWxscHRyKS5pdGVyYXRv
ci0+dmFsdWU7CiAgICAgaWYgKCFydWxlcykKICAgICAgICAgcnVsZXMgPSBhZG9wdFB0cihuZXcg
VmVjdG9yPFJ1bGVEYXRhPik7CiAgICAgcnVsZXMtPmFwcGVuZChydWxlRGF0YSk7CkBAIC0zNjIs
NyArMzYyLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNocmlua01hcFZlY3RvcnNUb0ZpdChSdWxl
U2V0OjpBdG9tUnVsZU1hcCYgbWFwKQogewogICAgIFJ1bGVTZXQ6OkF0b21SdWxlTWFwOjppdGVy
YXRvciBlbmQgPSBtYXAuZW5kKCk7CiAgICAgZm9yIChSdWxlU2V0OjpBdG9tUnVsZU1hcDo6aXRl
cmF0b3IgaXQgPSBtYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vj
b25kLT5zaHJpbmtUb0ZpdCgpOworICAgICAgICBpdC0+dmFsdWUtPnNocmlua1RvRml0KCk7CiB9
CiAKIHZvaWQgUnVsZVNldDo6c2hyaW5rVG9GaXQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVy
LmNwcAppbmRleCBiZDA4NTcwMDhhZTA2YzAyM2Q1MDE3NzllMmQ0ODI2MDNjZDk0NWQxLi4yNzFi
MjFiYjYxMjVkMGUyZTEwMWM0NmJkMjZkYzYyNjY0OGI0MzE5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVCdWlsZGVyLmNwcApAQCAtMTAxMiwxMSArMTAxMiwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHR5
cGVkZWYgQ291bnRlckRpcmVjdGl2ZU1hcDo6aXRlcmF0b3IgSXRlcmF0b3I7CiAgICAgICAgIEl0
ZXJhdG9yIGVuZCA9IHBhcmVudE1hcC5lbmQoKTsKICAgICAgICAgZm9yIChJdGVyYXRvciBpdCA9
IHBhcmVudE1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIENvdW50
ZXJEaXJlY3RpdmVzJiBkaXJlY3RpdmVzID0gbWFwLmFkZChpdC0+Zmlyc3QsIENvdW50ZXJEaXJl
Y3RpdmVzKCkpLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgICAgICBDb3VudGVyRGlyZWN0aXZl
cyYgZGlyZWN0aXZlcyA9IG1hcC5hZGQoaXQtPmtleSwgQ291bnRlckRpcmVjdGl2ZXMoKSkuaXRl
cmF0b3ItPnZhbHVlOwogICAgICAgICAgICAgaWYgKGNvdW50ZXJCZWhhdmlvciA9PSBSZXNldCkg
ewotICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXMuaW5oZXJpdFJlc2V0KGl0LT5zZWNvbmQpOwor
ICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXMuaW5oZXJpdFJlc2V0KGl0LT52YWx1ZSk7CiAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXMuaW5oZXJpdEluY3Jl
bWVudChpdC0+c2Vjb25kKTsKKyAgICAgICAgICAgICAgICBkaXJlY3RpdmVzLmluaGVyaXRJbmNy
ZW1lbnQoaXQtPnZhbHVlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTEw
MzMsOSArMTAzMyw5IEBAIHB1YmxpYzoKICAgICAgICAgSXRlcmF0b3IgZW5kID0gbWFwLmVuZCgp
OwogICAgICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gbWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkKICAgICAgICAgICAgIGlmIChjb3VudGVyQmVoYXZpb3IgPT0gUmVzZXQpCi0gICAgICAgICAg
ICAgICAgaXQtPnNlY29uZC5jbGVhclJlc2V0KCk7CisgICAgICAgICAgICAgICAgaXQtPnZhbHVl
LmNsZWFyUmVzZXQoKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBpdC0+c2Vj
b25kLmNsZWFySW5jcmVtZW50KCk7CisgICAgICAgICAgICAgICAgaXQtPnZhbHVlLmNsZWFySW5j
cmVtZW50KCk7CiAKICAgICAgICAgaW50IGxlbmd0aCA9IGxpc3QgPyBsaXN0LT5sZW5ndGgoKSA6
IDA7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKQEAgLTEwNDks
NyArMTA0OSw3IEBAIHB1YmxpYzoKIAogICAgICAgICAgICAgQXRvbWljU3RyaW5nIGlkZW50aWZp
ZXIgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHBhaXItPmZpcnN0KCkpLT5nZXRT
dHJpbmdWYWx1ZSgpOwogICAgICAgICAgICAgaW50IHZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWUqPihwYWlyLT5zZWNvbmQoKSktPmdldEludFZhbHVlKCk7Ci0gICAgICAgICAg
ICBDb3VudGVyRGlyZWN0aXZlcyYgZGlyZWN0aXZlcyA9IG1hcC5hZGQoaWRlbnRpZmllciwgQ291
bnRlckRpcmVjdGl2ZXMoKSkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgICAgIENvdW50ZXJE
aXJlY3RpdmVzJiBkaXJlY3RpdmVzID0gbWFwLmFkZChpZGVudGlmaWVyLCBDb3VudGVyRGlyZWN0
aXZlcygpKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgICAgICBpZiAoY291bnRlckJlaGF2aW9y
ID09IFJlc2V0KSB7CiAgICAgICAgICAgICAgICAgZGlyZWN0aXZlcy5zZXRSZXNldFZhbHVlKHZh
bHVlKTsKICAgICAgICAgICAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvU3R5bGVSZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5j
cHAKaW5kZXggZTRiYTBhOGZlZTEyMjY0MWM2ZDhjNzBjMWQwMDUwZTc3NDU1YWU0MC4uMzZjOGI2
YjVmN2E2MzM0NjhmOWEzZjVmMTgzMDY0YjIyMTg0Y2FjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHls
ZVJlc29sdmVyLmNwcApAQCAtMzk3LDcgKzM5Nyw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6Y29s
bGVjdEZlYXR1cmVzKCkKICAgICBtX2ZlYXR1cmVzLmFkZChtX2F1dGhvclN0eWxlLT5mZWF0dXJl
cygpKTsKICNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQogICAgIGZvciAoU2NvcGVkUnVsZVNldE1h
cDo6aXRlcmF0b3IgaXQgPSBtX3Njb3BlZEF1dGhvclN0eWxlcy5iZWdpbigpOyBpdCAhPSBtX3Nj
b3BlZEF1dGhvclN0eWxlcy5lbmQoKTsgKytpdCkKLSAgICAgICAgbV9mZWF0dXJlcy5hZGQoaXQt
PnNlY29uZC0+ZmVhdHVyZXMoKSk7CisgICAgICAgIG1fZmVhdHVyZXMuYWRkKGl0LT52YWx1ZS0+
ZmVhdHVyZXMoKSk7CiAjZW5kaWYKICAgICBpZiAobV91c2VyU3R5bGUpCiAgICAgICAgIG1fZmVh
dHVyZXMuYWRkKG1fdXNlclN0eWxlLT5mZWF0dXJlcygpKTsKQEAgLTQzNCw3ICs0MzQsNyBAQCBp
bmxpbmUgUnVsZVNldCogU3R5bGVSZXNvbHZlcjo6cnVsZVNldEZvclNjb3BlKGNvbnN0IENvbnRh
aW5lck5vZGUqIHNjb3BlKSBjb25zdAogICAgIGlmICghc2NvcGUtPmhhc1Njb3BlZEhUTUxTdHls
ZUNoaWxkKCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIFNjb3BlZFJ1bGVTZXRNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbV9zY29wZWRBdXRob3JTdHlsZXMuZmluZChzY29wZSk7Ci0gICAgcmV0
dXJuIGl0ICE9IG1fc2NvcGVkQXV0aG9yU3R5bGVzLmVuZCgpID8gaXQtPnNlY29uZC5nZXQoKSA6
IDA7IAorICAgIHJldHVybiBpdCAhPSBtX3Njb3BlZEF1dGhvclN0eWxlcy5lbmQoKSA/IGl0LT52
YWx1ZS5nZXQoKSA6IDA7IAogfQogI2VuZGlmCiAKQEAgLTQ2Myw4ICs0NjMsOCBAQCB2b2lkIFN0
eWxlUmVzb2x2ZXI6OmFwcGVuZEF1dGhvclN0eWxlc2hlZXRzKHVuc2lnbmVkIGZpcnN0TmV3LCBj
b25zdCBWZWN0b3I8UmVmUAogICAgICAgICBpZiAoc2NvcGUpIHsKICAgICAgICAgICAgIFNjb3Bl
ZFJ1bGVTZXRNYXA6OkFkZFJlc3VsdCBhZGRSZXN1bHQgPSBtX3Njb3BlZEF1dGhvclN0eWxlcy5h
ZGQoc2NvcGUsIG51bGxwdHIpOwogICAgICAgICAgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5
KQotICAgICAgICAgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gUnVsZVNldDo6
Y3JlYXRlKCk7Ci0gICAgICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZC0+YWRkUnVs
ZXNGcm9tU2hlZXQoc2hlZXQsICptX21lZGl1bSwgdGhpcywgc2NvcGUpOworICAgICAgICAgICAg
ICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBSdWxlU2V0OjpjcmVhdGUoKTsKKyAgICAg
ICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPmFkZFJ1bGVzRnJvbVNoZWV0KHNoZWV0
LCAqbV9tZWRpdW0sIHRoaXMsIHNjb3BlKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICB9CiAjZW5kaWYKQEAgLTU5NCwxMCArNTk0LDEwIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6c3dl
ZXBNYXRjaGVkUHJvcGVydGllc0NhY2hlKCkKICAgICBNYXRjaGVkUHJvcGVydGllc0NhY2hlOjpp
dGVyYXRvciBpdCA9IG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZS5iZWdpbigpOwogICAgIE1hdGNo
ZWRQcm9wZXJ0aWVzQ2FjaGU6Oml0ZXJhdG9yIGVuZCA9IG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNo
ZS5lbmQoKTsKICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFZlY3RvcjxN
YXRjaGVkUHJvcGVydGllcz4mIG1hdGNoZWRQcm9wZXJ0aWVzID0gaXQtPnNlY29uZC5tYXRjaGVk
UHJvcGVydGllczsKKyAgICAgICAgVmVjdG9yPE1hdGNoZWRQcm9wZXJ0aWVzPiYgbWF0Y2hlZFBy
b3BlcnRpZXMgPSBpdC0+dmFsdWUubWF0Y2hlZFByb3BlcnRpZXM7CiAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAg
ICAgIGlmIChtYXRjaGVkUHJvcGVydGllc1tpXS5wcm9wZXJ0aWVzLT5oYXNPbmVSZWYoKSkgewot
ICAgICAgICAgICAgICAgIHRvUmVtb3ZlLmFwcGVuZChpdC0+Zmlyc3QpOworICAgICAgICAgICAg
ICAgIHRvUmVtb3ZlLmFwcGVuZChpdC0+a2V5KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTcyMyw3ICsxNzIzLDcgQEAgdm9pZCBTdHlsZVJl
c29sdmVyOjprZXlmcmFtZVN0eWxlc0ZvckFuaW1hdGlvbihFbGVtZW50KiBlLCBjb25zdCBSZW5k
ZXJTdHlsZSogZWwKICAgICBpZiAoaXQgPT0gbV9rZXlmcmFtZXNSdWxlTWFwLmVuZCgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBjb25zdCBTdHlsZVJ1bGVLZXlmcmFtZXMqIGtleWZyYW1lc1J1
bGUgPSBpdC0+c2Vjb25kLmdldCgpOworICAgIGNvbnN0IFN0eWxlUnVsZUtleWZyYW1lcyoga2V5
ZnJhbWVzUnVsZSA9IGl0LT52YWx1ZS5nZXQoKTsKIAogICAgIC8vIENvbnN0cnVjdCBhbmQgcG9w
dWxhdGUgdGhlIHN0eWxlIGZvciBlYWNoIGtleWZyYW1lCiAgICAgY29uc3QgVmVjdG9yPFJlZlB0
cjxTdHlsZUtleWZyYW1lPiA+JiBrZXlmcmFtZXMgPSBrZXlmcmFtZXNSdWxlLT5rZXlmcmFtZXMo
KTsKQEAgLTI0NTQsNyArMjQ1NCw3IEBAIGNvbnN0IFN0eWxlUmVzb2x2ZXI6Ok1hdGNoZWRQcm9w
ZXJ0aWVzQ2FjaGVJdGVtKiBTdHlsZVJlc29sdmVyOjpmaW5kRnJvbU1hdGNoZWRQCiAgICAgTWF0
Y2hlZFByb3BlcnRpZXNDYWNoZTo6aXRlcmF0b3IgaXQgPSBtX21hdGNoZWRQcm9wZXJ0aWVzQ2Fj
aGUuZmluZChoYXNoKTsKICAgICBpZiAoaXQgPT0gbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlLmVu
ZCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBNYXRjaGVkUHJvcGVydGllc0NhY2hlSXRlbSYg
Y2FjaGVJdGVtID0gaXQtPnNlY29uZDsKKyAgICBNYXRjaGVkUHJvcGVydGllc0NhY2hlSXRlbSYg
Y2FjaGVJdGVtID0gaXQtPnZhbHVlOwogCiAgICAgc2l6ZV90IHNpemUgPSBtYXRjaFJlc3VsdC5t
YXRjaGVkUHJvcGVydGllcy5zaXplKCk7CiAgICAgaWYgKHNpemUgIT0gY2FjaGVJdGVtLm1hdGNo
ZWRQcm9wZXJ0aWVzLnNpemUoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHls
ZVNoZWV0Q29udGVudHMuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRDb250ZW50
cy5jcHAKaW5kZXggOWIxZjUxNGI5ZDE0MGY3MGJiMzFjMDY5ZDkwNjdjZWU2YTMwZTFlNi4uZTdj
ZTgxZWFhYjQ4NzE4NjI0ZjRlYjU1MjM4ZTVjMWFmMzU2ODViOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
Y3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHAKQEAgLTI1Myw3ICsyNTMsNyBAQCB2b2lkIFN0eWxl
U2hlZXRDb250ZW50czo6cGFyc2VyQWRkTmFtZXNwYWNlKGNvbnN0IEF0b21pY1N0cmluZyYgcHJl
Zml4LCBjb25zdCBBdAogICAgIFByZWZpeE5hbWVzcGFjZVVSSU1hcDo6QWRkUmVzdWx0IHJlc3Vs
dCA9IG1fbmFtZXNwYWNlcy5hZGQocHJlZml4LCB1cmkpOwogICAgIGlmIChyZXN1bHQuaXNOZXdF
bnRyeSkKICAgICAgICAgcmV0dXJuOwotICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gdXJp
OworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSB1cmk7CiB9CiAKIGNvbnN0IEF0b21pY1N0
cmluZyYgU3R5bGVTaGVldENvbnRlbnRzOjpkZXRlcm1pbmVOYW1lc3BhY2UoY29uc3QgQXRvbWlj
U3RyaW5nJiBwcmVmaXgpCkBAIC0yNjUsNyArMjY1LDcgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBT
dHlsZVNoZWV0Q29udGVudHM6OmRldGVybWluZU5hbWVzcGFjZShjb25zdCBBdG9taWNTdHJpbmcm
IHAKICAgICBQcmVmaXhOYW1lc3BhY2VVUklNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9uYW1l
c3BhY2VzLmZpbmQocHJlZml4KTsKICAgICBpZiAoaXQgPT0gbV9uYW1lc3BhY2VzLmVuZCgpKQog
ICAgICAgICByZXR1cm4gbnVsbEF0b207Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgcmV0
dXJuIGl0LT52YWx1ZTsKIH0KIAogdm9pZCBTdHlsZVNoZWV0Q29udGVudHM6OnBhcnNlQXV0aG9y
U3R5bGVTaGVldChjb25zdCBDYWNoZWRDU1NTdHlsZVNoZWV0KiBjYWNoZWRTdHlsZVNoZWV0LCBj
b25zdCBTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4pCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vQ2hlY2tlZFJhZGlvQnV0dG9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
Q2hlY2tlZFJhZGlvQnV0dG9ucy5jcHAKaW5kZXggNjg5ODJjZDFhZDMzMzU1ZWNkNDFiOWYxNGVi
YWJkMGQ2OWY5MzAwMS4uN2RjYWRjZGE5MmY2ODhlN2NlZGZkYjNiOTExYmNjNmNkM2FiODUxZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0NoZWNrZWRSYWRpb0J1dHRvbnMuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGVja2VkUmFkaW9CdXR0b25zLmNwcApAQCAtMTg2LDcg
KzE4Niw3IEBAIHZvaWQgQ2hlY2tlZFJhZGlvQnV0dG9uczo6YWRkQnV0dG9uKEhUTUxJbnB1dEVs
ZW1lbnQqIGVsZW1lbnQpCiAgICAgaWYgKCFtX25hbWVUb0dyb3VwTWFwKQogICAgICAgICBtX25h
bWVUb0dyb3VwTWFwID0gYWRvcHRQdHIobmV3IE5hbWVUb0dyb3VwTWFwKTsKIAotICAgIE93blB0
cjxSYWRpb0J1dHRvbkdyb3VwPiYgZ3JvdXAgPSBtX25hbWVUb0dyb3VwTWFwLT5hZGQoZWxlbWVu
dC0+bmFtZSgpLmltcGwoKSwgUGFzc093blB0cjxSYWRpb0J1dHRvbkdyb3VwPigpKS5pdGVyYXRv
ci0+c2Vjb25kOworICAgIE93blB0cjxSYWRpb0J1dHRvbkdyb3VwPiYgZ3JvdXAgPSBtX25hbWVU
b0dyb3VwTWFwLT5hZGQoZWxlbWVudC0+bmFtZSgpLmltcGwoKSwgUGFzc093blB0cjxSYWRpb0J1
dHRvbkdyb3VwPigpKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCFncm91cCkKICAgICAgICAg
Z3JvdXAgPSBSYWRpb0J1dHRvbkdyb3VwOjpjcmVhdGUoKTsKICAgICBncm91cC0+YWRkKGVsZW1l
bnQpOwpAQCAtMjQ3LDggKzI0Nyw4IEBAIHZvaWQgQ2hlY2tlZFJhZGlvQnV0dG9uczo6cmVtb3Zl
QnV0dG9uKEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgTmFtZVRvR3JvdXBNYXA6Oml0
ZXJhdG9yIGl0ID0gbV9uYW1lVG9Hcm91cE1hcC0+ZmluZChlbGVtZW50LT5uYW1lKCkuaW1wbCgp
KTsKICAgICBpZiAoaXQgPT0gbV9uYW1lVG9Hcm91cE1hcC0+ZW5kKCkpCiAgICAgICAgIHJldHVy
bjsKLSAgICBpdC0+c2Vjb25kLT5yZW1vdmUoZWxlbWVudCk7Ci0gICAgaWYgKGl0LT5zZWNvbmQt
PmlzRW1wdHkoKSkgeworICAgIGl0LT52YWx1ZS0+cmVtb3ZlKGVsZW1lbnQpOworICAgIGlmIChp
dC0+dmFsdWUtPmlzRW1wdHkoKSkgewogICAgICAgICAvLyBGSVhNRTogV2UgbWF5IHNraXAgZGVh
bGxvY2F0aW5nIHRoZSBlbXB0eSBSYWRpb0J1dHRvbkdyb3VwIGZvcgogICAgICAgICAvLyBwZXJm
b3JtYW5jZSBpbXByb3ZlbWVudC4gSWYgd2UgZG8gc28sIHdlIG5lZWQgdG8gY2hhbmdlIHRoZSBr
ZXkgdHlwZQogICAgICAgICAvLyBvZiBtX25hbWVUb0dyb3VwTWFwIGZyb20gQXRvbWljU3RyaW5n
SW1wbCogdG8gUmVmUHRyPEF0b21pY1N0cmluZ0ltcGw+LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL0NoaWxkTGlzdE11dGF0aW9uU2NvcGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9t
L0NoaWxkTGlzdE11dGF0aW9uU2NvcGUuY3BwCmluZGV4IDQ0NzYyYmRhYWEzNjA5MGVmNGI1MTg2
ODc0NDUxYWVlMjY1YTExNDcuLmU3MWRhZDBkMDQ4Y2UwZTYyZTkzNjBlM2U3Y2ZjYzRjZTBjODZm
NjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZExpc3RNdXRhdGlvblNjb3Bl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5jcHAK
QEAgLTcyLDEwICs3MiwxMCBAQCBQYXNzUmVmUHRyPENoaWxkTGlzdE11dGF0aW9uQWNjdW11bGF0
b3I+IENoaWxkTGlzdE11dGF0aW9uQWNjdW11bGF0b3I6OmdldE9yQ3JlYQogICAgIEFjY3VtdWxh
dG9yTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gYWNjdW11bGF0b3JNYXAoKS5hZGQodGFyZ2V0LCAw
KTsKICAgICBSZWZQdHI8Q2hpbGRMaXN0TXV0YXRpb25BY2N1bXVsYXRvcj4gYWNjdW11bGF0b3I7
CiAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgYWNjdW11bGF0b3IgPSByZXN1
bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgYWNjdW11bGF0b3IgPSByZXN1bHQuaXRlcmF0
b3ItPnZhbHVlOwogICAgIGVsc2UgewogICAgICAgICBhY2N1bXVsYXRvciA9IGFkb3B0UmVmKG5l
dyBDaGlsZExpc3RNdXRhdGlvbkFjY3VtdWxhdG9yKHRhcmdldCwgTXV0YXRpb25PYnNlcnZlcklu
dGVyZXN0R3JvdXA6OmNyZWF0ZUZvckNoaWxkTGlzdE11dGF0aW9uKHRhcmdldCkpKTsKLSAgICAg
ICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBhY2N1bXVsYXRvci5nZXQoKTsKKyAgICAgICAg
cmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGFjY3VtdWxhdG9yLmdldCgpOwogICAgIH0KICAgICBy
ZXR1cm4gYWNjdW11bGF0b3IucmVsZWFzZSgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5k
ZXggZjk5ZTYzOTFjY2Y3NmY5NzUyNjk2YzRhZTJmNmE4YmUzMjcyYjlhYS4uMDc5OWIwMzgwNDU3
NTM1M2U2Mzc0MDdkNzMzNDFiZDY4NGFlMDIyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBA
IC00NDMxLDEwICs0NDMxLDEwIEBAIFBhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+IERvY3VtZW50
Ojp3aW5kb3dOYW1lZEl0ZW1zKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkKIHsKICAgICBOYW1l
ZENvbGxlY3Rpb25NYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX3dpbmRvd05hbWVkSXRlbUNvbGxl
Y3Rpb25zLmFkZChuYW1lLCAwKTsKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAg
ICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQu
aXRlcmF0b3ItPnZhbHVlOwogCiAgICAgUmVmUHRyPEhUTUxOYW1lQ29sbGVjdGlvbj4gY29sbGVj
dGlvbiA9IEhUTUxOYW1lQ29sbGVjdGlvbjo6Y3JlYXRlKHRoaXMsIFdpbmRvd05hbWVkSXRlbXMs
IG5hbWUpOwotICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gY29sbGVjdGlvbi5nZXQoKTsK
KyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gY29sbGVjdGlvbi5nZXQoKTsKICAgICByZXR1
cm4gY29sbGVjdGlvbi5yZWxlYXNlKCk7CiB9CiAKQEAgLTQ0NDIsMTAgKzQ0NDIsMTAgQEAgUGFz
c1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gRG9jdW1lbnQ6OmRvY3VtZW50TmFtZWRJdGVtcyhjb25z
dCBBdG9taWNTdHJpbmcmIG5hbWUKIHsKICAgICBOYW1lZENvbGxlY3Rpb25NYXA6OkFkZFJlc3Vs
dCByZXN1bHQgPSBtX2RvY3VtZW50TmFtZWRJdGVtQ29sbGVjdGlvbnMuYWRkKG5hbWUsIDApOwog
ICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJldHVybiByZXN1bHQuaXRlcmF0
b3ItPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAKICAg
ICBSZWZQdHI8SFRNTE5hbWVDb2xsZWN0aW9uPiBjb2xsZWN0aW9uID0gSFRNTE5hbWVDb2xsZWN0
aW9uOjpjcmVhdGUodGhpcywgRG9jdW1lbnROYW1lZEl0ZW1zLCBuYW1lKTsKLSAgICByZXN1bHQu
aXRlcmF0b3ItPnNlY29uZCA9IGNvbGxlY3Rpb24uZ2V0KCk7CisgICAgcmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZSA9IGNvbGxlY3Rpb24uZ2V0KCk7CiAgICAgcmV0dXJuIGNvbGxlY3Rpb24ucmVsZWFz
ZSgpOwogfQogCkBAIC00NzgzLDcgKzQ3ODMsNyBAQCBDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBE
b2N1bWVudDo6Z2V0Q1NTQ2FudmFzQ29udGV4dChjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0CiAK
IEhUTUxDYW52YXNFbGVtZW50KiBEb2N1bWVudDo6Z2V0Q1NTQ2FudmFzRWxlbWVudChjb25zdCBT
dHJpbmcmIG5hbWUpCiB7Ci0gICAgUmVmUHRyPEhUTUxDYW52YXNFbGVtZW50PiYgZWxlbWVudCA9
IG1fY3NzQ2FudmFzRWxlbWVudHMuYWRkKG5hbWUsIDApLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAg
UmVmUHRyPEhUTUxDYW52YXNFbGVtZW50PiYgZWxlbWVudCA9IG1fY3NzQ2FudmFzRWxlbWVudHMu
YWRkKG5hbWUsIDApLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoIWVsZW1lbnQpCiAgICAgICAg
IGVsZW1lbnQgPSBIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlKHRoaXMpOwogICAgIHJldHVybiBl
bGVtZW50LmdldCgpOwpAQCAtNTk0MywxOSArNTk0MywxOSBAQCBQYXNzUmVmUHRyPEVsZW1lbnRB
dHRyaWJ1dGVEYXRhPiBEb2N1bWVudDo6Y2FjaGVkSW1tdXRhYmxlQXR0cmlidXRlRGF0YShjb25z
dCBFbAogICAgIHVuc2lnbmVkIGNhY2hlSGFzaCA9IGNhY2hlS2V5Lmhhc2goKTsKIAogICAgIElt
bXV0YWJsZUF0dHJpYnV0ZURhdGFDYWNoZTo6aXRlcmF0b3IgY2FjaGVJdGVyYXRvciA9IG1faW1t
dXRhYmxlQXR0cmlidXRlRGF0YUNhY2hlLmFkZChjYWNoZUhhc2gsIG51bGxwdHIpLml0ZXJhdG9y
OwotICAgIGlmIChjYWNoZUl0ZXJhdG9yLT5zZWNvbmQgJiYgY2FjaGVJdGVyYXRvci0+c2Vjb25k
LT5rZXkgIT0gY2FjaGVLZXkpCisgICAgaWYgKGNhY2hlSXRlcmF0b3ItPnZhbHVlICYmIGNhY2hl
SXRlcmF0b3ItPnZhbHVlLT5rZXkgIT0gY2FjaGVLZXkpCiAgICAgICAgIGNhY2hlSGFzaCA9IDA7
CiAKICAgICBSZWZQdHI8RWxlbWVudEF0dHJpYnV0ZURhdGE+IGF0dHJpYnV0ZURhdGE7Ci0gICAg
aWYgKGNhY2hlSGFzaCAmJiBjYWNoZUl0ZXJhdG9yLT5zZWNvbmQpCi0gICAgICAgIGF0dHJpYnV0
ZURhdGEgPSBjYWNoZUl0ZXJhdG9yLT5zZWNvbmQtPnZhbHVlOworICAgIGlmIChjYWNoZUhhc2gg
JiYgY2FjaGVJdGVyYXRvci0+dmFsdWUpCisgICAgICAgIGF0dHJpYnV0ZURhdGEgPSBjYWNoZUl0
ZXJhdG9yLT52YWx1ZS0+dmFsdWU7CiAgICAgZWxzZQogICAgICAgICBhdHRyaWJ1dGVEYXRhID0g
RWxlbWVudEF0dHJpYnV0ZURhdGE6OmNyZWF0ZUltbXV0YWJsZShhdHRyaWJ1dGVzKTsKIAotICAg
IGlmICghY2FjaGVIYXNoIHx8IGNhY2hlSXRlcmF0b3ItPnNlY29uZCkKKyAgICBpZiAoIWNhY2hl
SGFzaCB8fCBjYWNoZUl0ZXJhdG9yLT52YWx1ZSkKICAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZURh
dGEucmVsZWFzZSgpOwogCi0gICAgY2FjaGVJdGVyYXRvci0+c2Vjb25kID0gYWRvcHRQdHIobmV3
IEltbXV0YWJsZUF0dHJpYnV0ZURhdGFDYWNoZUVudHJ5KEltbXV0YWJsZUF0dHJpYnV0ZURhdGFD
YWNoZUtleShlbGVtZW50LT50YWdRTmFtZSgpLCBhdHRyaWJ1dGVEYXRhLT5pbW11dGFibGVBdHRy
aWJ1dGVBcnJheSgpLCBhdHRyaWJ1dGVEYXRhLT5sZW5ndGgoKSksIGF0dHJpYnV0ZURhdGEpKTsK
KyAgICBjYWNoZUl0ZXJhdG9yLT52YWx1ZSA9IGFkb3B0UHRyKG5ldyBJbW11dGFibGVBdHRyaWJ1
dGVEYXRhQ2FjaGVFbnRyeShJbW11dGFibGVBdHRyaWJ1dGVEYXRhQ2FjaGVLZXkoZWxlbWVudC0+
dGFnUU5hbWUoKSwgYXR0cmlidXRlRGF0YS0+aW1tdXRhYmxlQXR0cmlidXRlQXJyYXkoKSwgYXR0
cmlidXRlRGF0YS0+bGVuZ3RoKCkpLCBhdHRyaWJ1dGVEYXRhKSk7CiAKICAgICByZXR1cm4gYXR0
cmlidXRlRGF0YS5yZWxlYXNlKCk7CiB9CkBAIC01OTcyLDggKzU5NzIsOCBAQCBMb2NhbGl6ZXIm
IERvY3VtZW50OjpnZXRDYWNoZWRMb2NhbGl6ZXIoY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbGUp
CiAgICAgICAgIGxvY2FsZUtleSA9IGRlZmF1bHRMYW5ndWFnZSgpOwogICAgIExvY2FsZVRvTG9j
YWxpemVyTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9sb2NhbGl6ZXJDYWNoZS5hZGQobG9jYWxl
S2V5LCBudWxscHRyKTsKICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJlc3Vs
dC5pdGVyYXRvci0+c2Vjb25kID0gTG9jYWxpemVyOjpjcmVhdGUobG9jYWxlS2V5KTsKLSAgICBy
ZXR1cm4gKihyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRv
ci0+dmFsdWUgPSBMb2NhbGl6ZXI6OmNyZWF0ZShsb2NhbGVLZXkpOworICAgIHJldHVybiAqKHJl
c3VsdC5pdGVyYXRvci0+dmFsdWUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwCmluZGV4IGEz
ZWJjOTM2OTMyNWE0N2IyZTYyOTI4Njk2MGI0ZDZmZWJjMmYwYWUuLmIyZjAwODk1NGZlN2VhMGU2
NzBkYjcxNWI2MzUzZDI1M2JhMjk1YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwCkBAIC0zMTEsNyArMzExLDcgQEAgRG9jdW1lbnRNYXJr
ZXIqIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6bWFya2VyQ29udGFpbmluZ1BvaW50KGNvbnN0
IExheW91dFBvaW4KICAgICBNYXJrZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fbWFya2Vycy5lbmQo
KTsKICAgICBmb3IgKE1hcmtlck1hcDo6aXRlcmF0b3Igbm9kZUl0ZXJhdG9yID0gbV9tYXJrZXJz
LmJlZ2luKCk7IG5vZGVJdGVyYXRvciAhPSBlbmQ7ICsrbm9kZUl0ZXJhdG9yKSB7CiAgICAgICAg
IC8vIGlubmVyIGxvb3A7IHByb2Nlc3MgZWFjaCBtYXJrZXIgaW4gdGhpcyBub2RlCi0gICAgICAg
IE1hcmtlckxpc3QqIGxpc3QgPSBub2RlSXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgTWFya2Vy
TGlzdCogbGlzdCA9IG5vZGVJdGVyYXRvci0+dmFsdWU7CiAgICAgICAgIHVuc2lnbmVkIG1hcmtl
ckNvdW50ID0gbGlzdC0+c2l6ZSgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIG1hcmtlckluZGV4
ID0gMDsgbWFya2VySW5kZXggPCBtYXJrZXJDb3VudDsgKyttYXJrZXJJbmRleCkgewogICAgICAg
ICAgICAgUmVuZGVyZWREb2N1bWVudE1hcmtlciYgbWFya2VyID0gbGlzdC0+YXQobWFya2VySW5k
ZXgpOwpAQCAtMzk5LDcgKzM5OSw3IEBAIFZlY3RvcjxJbnRSZWN0PiBEb2N1bWVudE1hcmtlckNv
bnRyb2xsZXI6OnJlbmRlcmVkUmVjdHNGb3JNYXJrZXJzKERvY3VtZW50TWFya2VyCiAgICAgTWFy
a2VyTWFwOjppdGVyYXRvciBlbmQgPSBtX21hcmtlcnMuZW5kKCk7CiAgICAgZm9yIChNYXJrZXJN
YXA6Oml0ZXJhdG9yIG5vZGVJdGVyYXRvciA9IG1fbWFya2Vycy5iZWdpbigpOyBub2RlSXRlcmF0
b3IgIT0gZW5kOyArK25vZGVJdGVyYXRvcikgewogICAgICAgICAvLyBpbm5lciBsb29wOyBwcm9j
ZXNzIGVhY2ggbWFya2VyIGluIHRoaXMgbm9kZQotICAgICAgICBNYXJrZXJMaXN0KiBsaXN0ID0g
bm9kZUl0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgIE1hcmtlckxpc3QqIGxpc3QgPSBub2RlSXRl
cmF0b3ItPnZhbHVlOwogICAgICAgICB1bnNpZ25lZCBtYXJrZXJDb3VudCA9IGxpc3QtPnNpemUo
KTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBtYXJrZXJJbmRleCA9IDA7IG1hcmtlckluZGV4IDwg
bWFya2VyQ291bnQ7ICsrbWFya2VySW5kZXgpIHsKICAgICAgICAgICAgIGNvbnN0IFJlbmRlcmVk
RG9jdW1lbnRNYXJrZXImIG1hcmtlciA9IGxpc3QtPmF0KG1hcmtlckluZGV4KTsKQEAgLTQyNiw3
ICs0MjYsNyBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVtb3ZlTWFya2VycyhO
b2RlKiBub2RlLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVAogICAgIAogICAgIE1hcmtlck1hcDo6
aXRlcmF0b3IgaXRlcmF0b3IgPSBtX21hcmtlcnMuZmluZChub2RlKTsKICAgICBpZiAoaXRlcmF0
b3IgIT0gbV9tYXJrZXJzLmVuZCgpKQotICAgICAgICByZW1vdmVNYXJrZXJzRnJvbUxpc3Qobm9k
ZSwgaXRlcmF0b3ItPnNlY29uZCwgbWFya2VyVHlwZXMpOworICAgICAgICByZW1vdmVNYXJrZXJz
RnJvbUxpc3Qobm9kZSwgaXRlcmF0b3ItPnZhbHVlLCBtYXJrZXJUeXBlcyk7CiB9CiAKIHZvaWQg
RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW1vdmVNYXJrZXJzKERvY3VtZW50TWFya2VyOjpN
YXJrZXJUeXBlcyBtYXJrZXJUeXBlcykKQEAgLTQzOSw3ICs0MzksNyBAQCB2b2lkIERvY3VtZW50
TWFya2VyQ29udHJvbGxlcjo6cmVtb3ZlTWFya2VycyhEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlw
ZXMgbWFya2VyVAogICAgIE1hcmtlck1hcCBtYXJrZXJNYXBDb3B5ID0gbV9tYXJrZXJzOwogICAg
IE1hcmtlck1hcDo6aXRlcmF0b3IgZW5kID0gbWFya2VyTWFwQ29weS5lbmQoKTsKICAgICBmb3Ig
KE1hcmtlck1hcDo6aXRlcmF0b3IgaSA9IG1hcmtlck1hcENvcHkuYmVnaW4oKTsgaSAhPSBlbmQ7
ICsraSkKLSAgICAgICAgcmVtb3ZlTWFya2Vyc0Zyb21MaXN0KGktPmZpcnN0LmdldCgpLCBpLT5z
ZWNvbmQsIG1hcmtlclR5cGVzKTsKKyAgICAgICAgcmVtb3ZlTWFya2Vyc0Zyb21MaXN0KGktPmtl
eS5nZXQoKSwgaS0+dmFsdWUsIG1hcmtlclR5cGVzKTsKICAgICBtX3Bvc3NpYmx5RXhpc3RpbmdN
YXJrZXJUeXBlcy5yZW1vdmUobWFya2VyVHlwZXMpOwogfQogCkBAIC00OTUsMTAgKzQ5NSwxMCBA
QCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVwYWludE1hcmtlcnMoRG9jdW1lbnRN
YXJrZXI6Ok1hcmtlclR5cGVzIG1hcmtlcgogICAgIC8vIG91dGVyIGxvb3A6IHByb2Nlc3MgZWFj
aCBtYXJrZXJlZCBub2RlIGluIHRoZSBkb2N1bWVudAogICAgIE1hcmtlck1hcDo6aXRlcmF0b3Ig
ZW5kID0gbV9tYXJrZXJzLmVuZCgpOwogICAgIGZvciAoTWFya2VyTWFwOjppdGVyYXRvciBpID0g
bV9tYXJrZXJzLmJlZ2luKCk7IGkgIT0gZW5kOyArK2kpIHsKLSAgICAgICAgTm9kZSogbm9kZSA9
IGktPmZpcnN0LmdldCgpOworICAgICAgICBOb2RlKiBub2RlID0gaS0+a2V5LmdldCgpOwogCiAg
ICAgICAgIC8vIGlubmVyIGxvb3A6IHByb2Nlc3MgZWFjaCBtYXJrZXIgaW4gdGhlIGN1cnJlbnQg
bm9kZQotICAgICAgICBNYXJrZXJMaXN0KiBsaXN0ID0gaS0+c2Vjb25kOworICAgICAgICBNYXJr
ZXJMaXN0KiBsaXN0ID0gaS0+dmFsdWU7CiAgICAgICAgIGJvb2wgbm9kZU5lZWRzUmVwYWludCA9
IGZhbHNlOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSAhPSBsaXN0LT5zaXplKCk7ICsr
aSkgewogICAgICAgICAgICAgRG9jdW1lbnRNYXJrZXIgbWFya2VyID0gbGlzdC0+YXQoaSk7CkBA
IC01MjYsNyArNTI2LDcgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmludmFsaWRh
dGVSZW5kZXJlZFJlY3RzRm9yTWFya2Vyc0luUmVjdChjb25zdCBMYXkKICAgICBmb3IgKE1hcmtl
ck1hcDo6aXRlcmF0b3IgaSA9IG1fbWFya2Vycy5iZWdpbigpOyBpICE9IGVuZDsgKytpKSB7CiAK
ICAgICAgICAgLy8gaW5uZXIgbG9vcDogcHJvY2VzcyBlYWNoIHJlY3QgaW4gdGhlIGN1cnJlbnQg
bm9kZQotICAgICAgICBNYXJrZXJMaXN0KiBsaXN0ID0gaS0+c2Vjb25kOworICAgICAgICBNYXJr
ZXJMaXN0KiBsaXN0ID0gaS0+dmFsdWU7CiAgICAgICAgIGZvciAoc2l6ZV90IGxpc3RJbmRleCA9
IDA7IGxpc3RJbmRleCA8IGxpc3QtPnNpemUoKTsgKytsaXN0SW5kZXgpCiAgICAgICAgICAgICBs
aXN0LT5hdChsaXN0SW5kZXgpLmludmFsaWRhdGUocik7CiAgICAgfQpAQCAtNjc1LDkgKzY3NSw5
IEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpzaG93TWFya2VycygpIGNvbnN0CiAg
ICAgZnByaW50ZihzdGRlcnIsICIlZCBub2RlcyBoYXZlIG1hcmtlcnM6XG4iLCBtX21hcmtlcnMu
c2l6ZSgpKTsKICAgICBNYXJrZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fbWFya2Vycy5l
bmQoKTsKICAgICBmb3IgKE1hcmtlck1hcDo6Y29uc3RfaXRlcmF0b3Igbm9kZUl0ZXJhdG9yID0g
bV9tYXJrZXJzLmJlZ2luKCk7IG5vZGVJdGVyYXRvciAhPSBlbmQ7ICsrbm9kZUl0ZXJhdG9yKSB7
Ci0gICAgICAgIE5vZGUqIG5vZGUgPSBub2RlSXRlcmF0b3ItPmZpcnN0LmdldCgpOworICAgICAg
ICBOb2RlKiBub2RlID0gbm9kZUl0ZXJhdG9yLT5rZXkuZ2V0KCk7CiAgICAgICAgIGZwcmludGYo
c3RkZXJyLCAiJXAiLCBub2RlKTsKLSAgICAgICAgTWFya2VyTGlzdCogbGlzdCA9IG5vZGVJdGVy
YXRvci0+c2Vjb25kOworICAgICAgICBNYXJrZXJMaXN0KiBsaXN0ID0gbm9kZUl0ZXJhdG9yLT52
YWx1ZTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBtYXJrZXJJbmRleCA9IDA7IG1hcmtlckluZGV4
IDwgbGlzdC0+c2l6ZSgpOyArK21hcmtlckluZGV4KSB7CiAgICAgICAgICAgICBjb25zdCBEb2N1
bWVudE1hcmtlciYgbWFya2VyID0gbGlzdC0+YXQobWFya2VySW5kZXgpOwogICAgICAgICAgICAg
ZnByaW50ZihzdGRlcnIsICIgJWQ6WyVkOiVkXSglZCkiLCBtYXJrZXIudHlwZSgpLCBtYXJrZXIu
c3RhcnRPZmZzZXQoKSwgbWFya2VyLmVuZE9mZnNldCgpLCBtYXJrZXIuYWN0aXZlTWF0Y2goKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRPcmRlcmVkTWFwLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE9yZGVyZWRNYXAuY3BwCmluZGV4IDA4MmFhMDc0
MGE3MWNjZGY1MGUxZDQyZDIzZDMxN2U2M2FmMmY0ZGEuLjEyOTdlNTEwMmZiNGU3OWNlM2RiMTEy
MzU3MDIxZTNkZDA1NTRhNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dE9yZGVyZWRNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE9yZGVyZWRN
YXAuY3BwCkBAIC05OCw3ICs5OCw3IEBAIHZvaWQgRG9jdW1lbnRPcmRlcmVkTWFwOjpyZW1vdmUo
QXRvbWljU3RyaW5nSW1wbCoga2V5LCBFbGVtZW50KiBlbGVtZW50KQogCiAgICAgbV9tYXAuY2hl
Y2tDb25zaXN0ZW5jeSgpOwogICAgIE1hcDo6aXRlcmF0b3IgY2FjaGVkSXRlbSA9IG1fbWFwLmZp
bmQoa2V5KTsKLSAgICBpZiAoY2FjaGVkSXRlbSAhPSBtX21hcC5lbmQoKSAmJiBjYWNoZWRJdGVt
LT5zZWNvbmQgPT0gZWxlbWVudCkKKyAgICBpZiAoY2FjaGVkSXRlbSAhPSBtX21hcC5lbmQoKSAm
JiBjYWNoZWRJdGVtLT52YWx1ZSA9PSBlbGVtZW50KQogICAgICAgICBtX21hcC5yZW1vdmUoY2Fj
aGVkSXRlbSk7CiAgICAgZWxzZQogICAgICAgICBtX2R1cGxpY2F0ZUNvdW50cy5yZW1vdmUoa2V5
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudFN0eWxlU2hlZXRDb2xs
ZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0
aW9uLmNwcAppbmRleCBjNzM3NzkyYmJjMjFiMWNhZDdmM2M4MDM1YzgyNTdiMDc1YWM3OTJkLi44
NGNiOGZjZTk3Y2E2YjYzMWRlNTg3MGViNDA0OTdlOWVlY2VhMzZjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24uY3BwCkBAIC0xNTIs
NyArMTUyLDcgQEAgY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0PiA+KiBEb2N1bWVu
dFN0eWxlU2hlZXRDb2xsZWN0aW9uOjpwYWdlR3JvdXBVc2UKIAogICAgIFVzZXJTdHlsZVNoZWV0
TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBzaGVldHNNYXAtPmVuZCgpOwogICAgIGZvciAoVXNl
clN0eWxlU2hlZXRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gc2hlZXRzTWFwLT5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgY29uc3QgVXNlclN0eWxlU2hlZXRWZWN0b3IqIHNo
ZWV0cyA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIGNvbnN0IFVzZXJTdHlsZVNoZWV0VmVj
dG9yKiBzaGVldHMgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBzaGVldHMtPnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBjb25zdCBVc2VyU3R5
bGVTaGVldCogc2hlZXQgPSBzaGVldHMtPmF0KGkpLmdldCgpOwogICAgICAgICAgICAgaWYgKHNo
ZWV0LT5pbmplY3RlZEZyYW1lcygpID09IEluamVjdEluVG9wRnJhbWVPbmx5ICYmIG1fZG9jdW1l
bnQtPm93bmVyRWxlbWVudCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1l
bnRBdHRyaWJ1dGVEYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50QXR0cmlidXRl
RGF0YS5jcHAKaW5kZXggNWE3ZjM0MTI1NGE4NjVhNTUyMzcwNTVhM2JkYmRmYzlmMjRjZWRkNS4u
ZTA0YjY2MzAxODIzZjBmZDcxMWU3ODMwYTcwY2YxNzJjNmEwNDk1MyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vRWxlbWVudEF0dHJpYnV0ZURhdGEuY3BwCkBAIC0xMTUsNyArMTE1LDcgQEAgc3Rh
dGljIEF0dHJMaXN0KiBlbnN1cmVBdHRyTGlzdEZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCkK
ICAgICBBU1NFUlQoIWF0dHJMaXN0TWFwKCkuY29udGFpbnMoZWxlbWVudCkpOwogICAgIGVsZW1l
bnQtPnNldEhhc0F0dHJMaXN0KCk7CiAgICAgQXR0ckxpc3RNYXA6OkFkZFJlc3VsdCByZXN1bHQg
PSBhdHRyTGlzdE1hcCgpLmFkZChlbGVtZW50LCBhZG9wdFB0cihuZXcgQXR0ckxpc3QpKTsKLSAg
ICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQuZ2V0KCk7CisgICAgcmV0dXJuIHJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7CiB9CiAKIHN0YXRpYyB2b2lkIHJlbW92ZUF0dHJMaXN0
Rm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRj
aGVyLmNwcAppbmRleCAzMjEwYmNlZDY1Nzk4YjNlNWY3OTExMDI2OGZhMTdkMWI2MTViNTZjLi5l
Mjk5OTU2NWRmOTgyNzdjZjAzM2ZhYzdiY2QwNjM2MDM3NmEzNGI2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRXZlbnREaXNwYXRjaGVyLmNwcApAQCAtMTExLDcgKzExMSw3IEBAIEV2ZW50VGFyZ2V0KiBF
dmVudFJlbGF0ZWRUYXJnZXRBZGp1c3Rlcjo6ZmluZFJlbGF0ZWRUYXJnZXQoVHJlZVNjb3BlKiBz
Y29wZSkKICAgICAgICAgcGFyZW50VHJlZVNjb3Blcy5hcHBlbmQoc2NvcGUpOwogICAgICAgICBS
ZWxhdGVkVGFyZ2V0TWFwOjpjb25zdF9pdGVyYXRvciBmb3VuZCA9IG1fcmVsYXRlZFRhcmdldE1h
cC5maW5kKHNjb3BlKTsKICAgICAgICAgaWYgKGZvdW5kICE9IG1fcmVsYXRlZFRhcmdldE1hcC5l
bmQoKSkgewotICAgICAgICAgICAgcmVsYXRlZFRhcmdldCA9IGZvdW5kLT5zZWNvbmQ7CisgICAg
ICAgICAgICByZWxhdGVkVGFyZ2V0ID0gZm91bmQtPnZhbHVlOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgc2NvcGUgPSBzY29wZS0+cGFyZW50VHJlZVNjb3BlKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vSWRUYXJnZXRPYnNlcnZlclJlZ2lzdHJ5LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9JZFRhcmdldE9ic2VydmVyUmVnaXN0cnkuY3BwCmluZGV4
IDVmYzI2YWNmZWUzMzJlYjdkMmQ2MTliYTU5MjBjNzMzZjViYjBmNzAuLmFhZmE4YTJkMWI1MzBi
N2QwZjNlMzY3MDU1OGU4Yzk2Yjk0OGFmYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9JZFRhcmdldE9ic2VydmVyUmVnaXN0cnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9J
ZFRhcmdldE9ic2VydmVyUmVnaXN0cnkuY3BwCkBAIC00Miw5ICs0Miw5IEBAIHZvaWQgSWRUYXJn
ZXRPYnNlcnZlclJlZ2lzdHJ5OjphZGRPYnNlcnZlcihjb25zdCBBdG9taWNTdHJpbmcmIGlkLCBJ
ZFRhcmdldE9ic2VyCiAgICAgCiAgICAgSWRUb09ic2VydmVyU2V0TWFwOjpBZGRSZXN1bHQgcmVz
dWx0ID0gbV9yZWdpc3RyeS5hZGQoaWQuaW1wbCgpLCBudWxscHRyKTsKICAgICBpZiAocmVzdWx0
LmlzTmV3RW50cnkpCi0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gYWRvcHRQdHIo
bmV3IE9ic2VydmVyU2V0KCkpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gYWRv
cHRQdHIobmV3IE9ic2VydmVyU2V0KCkpOwogCi0gICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQt
PmFkZChvYnNlcnZlcik7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+YWRkKG9ic2VydmVy
KTsKIH0KIAogdm9pZCBJZFRhcmdldE9ic2VydmVyUmVnaXN0cnk6OnJlbW92ZU9ic2VydmVyKGNv
bnN0IEF0b21pY1N0cmluZyYgaWQsIElkVGFyZ2V0T2JzZXJ2ZXIqIG9ic2VydmVyKQpAQCAtNTQs
NyArNTQsNyBAQCB2b2lkIElkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeTo6cmVtb3ZlT2JzZXJ2ZXIo
Y29uc3QgQXRvbWljU3RyaW5nJiBpZCwgSWRUYXJnZXRPYgogCiAgICAgSWRUb09ic2VydmVyU2V0
TWFwOjppdGVyYXRvciBpdGVyID0gbV9yZWdpc3RyeS5maW5kKGlkLmltcGwoKSk7CiAKLSAgICBP
YnNlcnZlclNldCogc2V0ID0gaXRlci0+c2Vjb25kLmdldCgpOworICAgIE9ic2VydmVyU2V0KiBz
ZXQgPSBpdGVyLT52YWx1ZS5nZXQoKTsKICAgICBzZXQtPnJlbW92ZShvYnNlcnZlcik7CiAgICAg
aWYgKHNldC0+aXNFbXB0eSgpICYmIHNldCAhPSBtX25vdGlmeWluZ09ic2VydmVyc0luU2V0KQog
ICAgICAgICBtX3JlZ2lzdHJ5LnJlbW92ZShpdGVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9NdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vTXV0YXRpb25PYnNlcnZlckludGVyZXN0R3JvdXAuY3BwCmluZGV4IDI0YzBjYjU4NjUx
N2UwOGJjN2E4YjQwOTNmMjFkMzFlMGRiMmQ2NGUuLjRmYWQyMjA4MTg1M2NkODE1MzRkMzAwZDE2
MWQ4OGIxYWE1ZTk0YzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvbk9i
c2VydmVySW50ZXJlc3RHcm91cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9u
T2JzZXJ2ZXJJbnRlcmVzdEdyb3VwLmNwcApAQCAtNjIsNyArNjIsNyBAQCBNdXRhdGlvbk9ic2Vy
dmVySW50ZXJlc3RHcm91cDo6TXV0YXRpb25PYnNlcnZlckludGVyZXN0R3JvdXAoSGFzaE1hcDxN
dXRhdGlvbk9icwogYm9vbCBNdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cDo6aXNPbGRWYWx1
ZVJlcXVlc3RlZCgpCiB7CiAgICAgZm9yIChIYXNoTWFwPE11dGF0aW9uT2JzZXJ2ZXIqLCBNdXRh
dGlvblJlY29yZERlbGl2ZXJ5T3B0aW9ucz46Oml0ZXJhdG9yIGl0ZXIgPSBtX29ic2VydmVycy5i
ZWdpbigpOyBpdGVyICE9IG1fb2JzZXJ2ZXJzLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgaWYg
KGhhc09sZFZhbHVlKGl0ZXItPnNlY29uZCkpCisgICAgICAgIGlmIChoYXNPbGRWYWx1ZShpdGVy
LT52YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtNzMsOCArNzMsOCBAQCB2b2lkIE11dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3Vw
OjplbnF1ZXVlTXV0YXRpb25SZWNvcmQoUGFzc1JlZlB0cjxNdXRhdGlvblJlYwogICAgIFJlZlB0
cjxNdXRhdGlvblJlY29yZD4gbXV0YXRpb24gPSBwcnBNdXRhdGlvbjsKICAgICBSZWZQdHI8TXV0
YXRpb25SZWNvcmQ+IG11dGF0aW9uV2l0aE51bGxPbGRWYWx1ZTsKICAgICBmb3IgKEhhc2hNYXA8
TXV0YXRpb25PYnNlcnZlciosIE11dGF0aW9uUmVjb3JkRGVsaXZlcnlPcHRpb25zPjo6aXRlcmF0
b3IgaXRlciA9IG1fb2JzZXJ2ZXJzLmJlZ2luKCk7IGl0ZXIgIT0gbV9vYnNlcnZlcnMuZW5kKCk7
ICsraXRlcikgewotICAgICAgICBNdXRhdGlvbk9ic2VydmVyKiBvYnNlcnZlciA9IGl0ZXItPmZp
cnN0OwotICAgICAgICBpZiAoaGFzT2xkVmFsdWUoaXRlci0+c2Vjb25kKSkgeworICAgICAgICBN
dXRhdGlvbk9ic2VydmVyKiBvYnNlcnZlciA9IGl0ZXItPmtleTsKKyAgICAgICAgaWYgKGhhc09s
ZFZhbHVlKGl0ZXItPnZhbHVlKSkgewogICAgICAgICAgICAgb2JzZXJ2ZXItPmVucXVldWVNdXRh
dGlvblJlY29yZChtdXRhdGlvbik7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZG9tL05vZGUuY3BwCmluZGV4IDgzZTE0YjgyNzc1NDg5NGRiY2ZiYjE0MzRjOTcyMmZhZjg3ZDZm
N2MuLjE0MDg2YjMwMWZkNjBjOTdiYjgxNzFmYzlkYjk4MjUzZjM5YjAyYzkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9k
ZS5jcHAKQEAgLTE5MSw3ICsxOTEsNyBAQCB2b2lkIE5vZGU6OmR1bXBTdGF0aXN0aWNzKCkKICAg
ICAgICAgICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5v
ZGUpOwogICAgICAgICAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBzaXplX3Q+OjpBZGRSZXN1bHQg
cmVzdWx0ID0gcGVyVGFnQ291bnQuYWRkKGVsZW1lbnQtPnRhZ05hbWUoKSwgMSk7CiAgICAgICAg
ICAgICAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgICAgICAgICAgcmVz
dWx0Lml0ZXJhdG9yLT5zZWNvbmQrKzsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZSsrOwogCiAgICAgICAgICAgICAgICAgaWYgKEVsZW1lbnRBdHRyaWJ1dGVEYXRh
KiBhdHRyaWJ1dGVEYXRhID0gZWxlbWVudC0+YXR0cmlidXRlRGF0YSgpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIGF0dHJpYnV0ZXMgKz0gYXR0cmlidXRlRGF0YS0+bGVuZ3RoKCk7CkBAIC0yNzks
NyArMjc5LDcgQEAgdm9pZCBOb2RlOjpkdW1wU3RhdGlzdGljcygpCiAKICAgICBwcmludGYoIkVs
ZW1lbnQgdGFnIG5hbWUgZGlzdGlidXRpb246XG4iKTsKICAgICBmb3IgKEhhc2hNYXA8U3RyaW5n
LCBzaXplX3Q+OjppdGVyYXRvciBpdCA9IHBlclRhZ0NvdW50LmJlZ2luKCk7IGl0ICE9IHBlclRh
Z0NvdW50LmVuZCgpOyArK2l0KQotICAgICAgICBwcmludGYoIiAgTnVtYmVyIG9mIDwlcz4gdGFn
czogJXp1XG4iLCBpdC0+Zmlyc3QudXRmOCgpLmRhdGEoKSwgaXQtPnNlY29uZCk7CisgICAgICAg
IHByaW50ZigiICBOdW1iZXIgb2YgPCVzPiB0YWdzOiAlenVcbiIsIGl0LT5rZXkudXRmOCgpLmRh
dGEoKSwgaXQtPnZhbHVlKTsKIAogICAgIHByaW50ZigiQXR0cmlidXRlczpcbiIpOwogICAgIHBy
aW50ZigiICBOdW1iZXIgb2YgQXR0cmlidXRlcyAobm9uLU5vZGUgYW5kIE5vZGUpOiAlenUgWyV6
dV1cbiIsIGF0dHJpYnV0ZXMsIHNpemVvZihBdHRyaWJ1dGUpKTsKQEAgLTUxNSw3ICs1MTUsNyBA
QCB2b2lkIE5vZGU6OmNsZWFyUmFyZURhdGEoKQogICAgICAgICBOb2RlUmFyZURhdGE6Ok5vZGVS
YXJlRGF0YU1hcCYgZGF0YU1hcCA9IE5vZGVSYXJlRGF0YTo6cmFyZURhdGFNYXAoKTsKICAgICAg
ICAgTm9kZVJhcmVEYXRhOjpOb2RlUmFyZURhdGFNYXA6Oml0ZXJhdG9yIGl0ID0gZGF0YU1hcC5m
aW5kKHRoaXMpOwogICAgICAgICBBU1NFUlQoaXQgIT0gZGF0YU1hcC5lbmQoKSk7Ci0gICAgICAg
IGRlbGV0ZSBpdC0+c2Vjb25kOworICAgICAgICBkZWxldGUgaXQtPnZhbHVlOwogICAgICAgICBk
YXRhTWFwLnJlbW92ZShpdCk7CiAgICAgfQogICAgIGNsZWFyRmxhZyhIYXNSYXJlRGF0YUZsYWcp
OwpAQCAtMjI3NiwxOCArMjI3NiwxOCBAQCB2b2lkIE5vZGVMaXN0c05vZGVEYXRhOjppbnZhbGlk
YXRlQ2FjaGVzKGNvbnN0IFF1YWxpZmllZE5hbWUqIGF0dHJOYW1lKQogewogICAgIE5vZGVMaXN0
QXRvbWljTmFtZUNhY2hlTWFwOjpjb25zdF9pdGVyYXRvciBhdG9taWNOYW1lQ2FjaGVFbmQgPSBt
X2F0b21pY05hbWVDYWNoZXMuZW5kKCk7CiAgICAgZm9yIChOb2RlTGlzdEF0b21pY05hbWVDYWNo
ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2F0b21pY05hbWVDYWNoZXMuYmVnaW4oKTsgaXQg
IT0gYXRvbWljTmFtZUNhY2hlRW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5pbnZhbGlk
YXRlQ2FjaGUoYXR0ck5hbWUpOworICAgICAgICBpdC0+dmFsdWUtPmludmFsaWRhdGVDYWNoZShh
dHRyTmFtZSk7CiAKICAgICBOb2RlTGlzdE5hbWVDYWNoZU1hcDo6Y29uc3RfaXRlcmF0b3IgbmFt
ZUNhY2hlRW5kID0gbV9uYW1lQ2FjaGVzLmVuZCgpOwogICAgIGZvciAoTm9kZUxpc3ROYW1lQ2Fj
aGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9uYW1lQ2FjaGVzLmJlZ2luKCk7IGl0ICE9IG5h
bWVDYWNoZUVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+aW52YWxpZGF0ZUNhY2hlKGF0
dHJOYW1lKTsKKyAgICAgICAgaXQtPnZhbHVlLT5pbnZhbGlkYXRlQ2FjaGUoYXR0ck5hbWUpOwog
CiAgICAgaWYgKGF0dHJOYW1lKQogICAgICAgICByZXR1cm47CiAKICAgICBUYWdOb2RlTGlzdENh
Y2hlTlM6Oml0ZXJhdG9yIHRhZ0NhY2hlRW5kID0gbV90YWdOb2RlTGlzdENhY2hlTlMuZW5kKCk7
CiAgICAgZm9yIChUYWdOb2RlTGlzdENhY2hlTlM6Oml0ZXJhdG9yIGl0ID0gbV90YWdOb2RlTGlz
dENhY2hlTlMuYmVnaW4oKTsgaXQgIT0gdGFnQ2FjaGVFbmQ7ICsraXQpCi0gICAgICAgIGl0LT5z
ZWNvbmQtPmludmFsaWRhdGVDYWNoZSgpOworICAgICAgICBpdC0+dmFsdWUtPmludmFsaWRhdGVD
YWNoZSgpOwogfQogCiB2b2lkIE5vZGU6OmdldFN1YnJlc291cmNlVVJMcyhMaXN0SGFzaFNldDxL
VVJMPiYgdXJscykgY29uc3QKQEAgLTI0NjIsNyArMjQ2Miw3IEBAIHN0YXRpYyBpbmxpbmUgdm9p
ZCBjb2xsZWN0TWF0Y2hpbmdPYnNlcnZlcnNGb3JNdXRhdGlvbihIYXNoTWFwPE11dGF0aW9uT2Jz
ZXJ2ZXIqCiAgICAgICAgICAgICBNdXRhdGlvblJlY29yZERlbGl2ZXJ5T3B0aW9ucyBkZWxpdmVy
eU9wdGlvbnMgPSByZWdpc3RyYXRpb24uZGVsaXZlcnlPcHRpb25zKCk7CiAgICAgICAgICAgICBI
YXNoTWFwPE11dGF0aW9uT2JzZXJ2ZXIqLCBNdXRhdGlvblJlY29yZERlbGl2ZXJ5T3B0aW9ucz46
OkFkZFJlc3VsdCByZXN1bHQgPSBvYnNlcnZlcnMuYWRkKHJlZ2lzdHJhdGlvbi5vYnNlcnZlcigp
LCBkZWxpdmVyeU9wdGlvbnMpOwogICAgICAgICAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkK
LSAgICAgICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCB8PSBkZWxpdmVyeU9wdGlv
bnM7CisgICAgICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSB8PSBkZWxpdmVyeU9w
dGlvbnM7CiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vTm9kZVJhcmVEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRhLmgKaW5k
ZXggMjBiOGRiYzdmMzM5MmNiMzg3OWUwZGQ4ZmEzYjljZjIyNmM2MWEwNC4uNWIzYTU4M2IwZDIy
OWU4ZGJlYmVlMjFjZDY0MmRjMmM3NzBmMzQ0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL05vZGVSYXJlRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEu
aApAQCAtNjgsMTAgKzY4LDEwIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIE5vZGVMaXN0QXRv
bWljTmFtZUNhY2hlTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9hdG9taWNOYW1lQ2FjaGVzLmFk
ZChuYW1lZE5vZGVMaXN0S2V5KGxpc3RUeXBlLCBuYW1lKSwgMCk7CiAgICAgICAgIGlmICghcmVz
dWx0LmlzTmV3RW50cnkpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VCo+KHJlc3Vs
dC5pdGVyYXRvci0+c2Vjb25kKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUKj4o
cmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CiAKICAgICAgICAgUmVmUHRyPFQ+IGxpc3QgPSBUOjpj
cmVhdGUobm9kZSwgbmFtZSk7Ci0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gbGlz
dC5nZXQoKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGxpc3QuZ2V0KCk7CiAg
ICAgICAgIHJldHVybiBsaXN0LnJlbGVhc2UoKTsKICAgICB9CiAKQEAgLTgwLDEwICs4MCwxMCBA
QCBwdWJsaWM6CiAgICAgewogICAgICAgICBOb2RlTGlzdE5hbWVDYWNoZU1hcDo6QWRkUmVzdWx0
IHJlc3VsdCA9IG1fbmFtZUNhY2hlcy5hZGQobmFtZWROb2RlTGlzdEtleShsaXN0VHlwZSwgbmFt
ZSksIDApOwogICAgICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PFQqPihyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7CisgICAgICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8VCo+KHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwogCiAgICAg
ICAgIFJlZlB0cjxUPiBsaXN0ID0gVDo6Y3JlYXRlKG5vZGUsIG5hbWUpOwotICAgICAgICByZXN1
bHQuaXRlcmF0b3ItPnNlY29uZCA9IGxpc3QuZ2V0KCk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRv
ci0+dmFsdWUgPSBsaXN0LmdldCgpOwogICAgICAgICByZXR1cm4gbGlzdC5yZWxlYXNlKCk7CiAg
ICAgfQogCkBAIC05MiwxMCArOTIsMTAgQEAgcHVibGljOgogICAgICAgICBRdWFsaWZpZWROYW1l
IG5hbWUobnVsbEF0b20sIGxvY2FsTmFtZSwgbmFtZXNwYWNlVVJJKTsKICAgICAgICAgVGFnTm9k
ZUxpc3RDYWNoZU5TOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV90YWdOb2RlTGlzdENhY2hlTlMuYWRk
KG5hbWUsIDApOwogICAgICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dC5pdGVyYXRvci0+dmFsdWU7CiAKICAgICAgICAgUmVmUHRyPFRhZ05vZGVMaXN0PiBsaXN0ID0g
VGFnTm9kZUxpc3Q6OmNyZWF0ZShub2RlLCBuYW1lc3BhY2VVUkksIGxvY2FsTmFtZSk7Ci0gICAg
ICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gbGlzdC5nZXQoKTsKKyAgICAgICAgcmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZSA9IGxpc3QuZ2V0KCk7CiAgICAgICAgIHJldHVybiBsaXN0LnJlbGVh
c2UoKTsKICAgICB9CiAKQEAgLTEzNiwyMSArMTM2LDIxIEBAIHB1YmxpYzoKICAgICAgICAgaWYg
KG9sZERvY3VtZW50ICE9IG5ld0RvY3VtZW50KSB7CiAgICAgICAgICAgICBOb2RlTGlzdEF0b21p
Y05hbWVDYWNoZU1hcDo6Y29uc3RfaXRlcmF0b3IgYXRvbWljTmFtZUNhY2hlRW5kID0gbV9hdG9t
aWNOYW1lQ2FjaGVzLmVuZCgpOwogICAgICAgICAgICAgZm9yIChOb2RlTGlzdEF0b21pY05hbWVD
YWNoZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2F0b21pY05hbWVDYWNoZXMuYmVnaW4oKTsg
aXQgIT0gYXRvbWljTmFtZUNhY2hlRW5kOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAgRHluYW1p
Y1N1YnRyZWVOb2RlTGlzdCogbGlzdCA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICAgICAgRHlu
YW1pY1N1YnRyZWVOb2RlTGlzdCogbGlzdCA9IGl0LT52YWx1ZTsKICAgICAgICAgICAgICAgICBv
bGREb2N1bWVudC0+dW5yZWdpc3Rlck5vZGVMaXN0Q2FjaGUobGlzdCk7CiAgICAgICAgICAgICAg
ICAgbmV3RG9jdW1lbnQtPnJlZ2lzdGVyTm9kZUxpc3RDYWNoZShsaXN0KTsKICAgICAgICAgICAg
IH0KIAogICAgICAgICAgICAgTm9kZUxpc3ROYW1lQ2FjaGVNYXA6OmNvbnN0X2l0ZXJhdG9yIG5h
bWVDYWNoZUVuZCA9IG1fbmFtZUNhY2hlcy5lbmQoKTsKICAgICAgICAgICAgIGZvciAoTm9kZUxp
c3ROYW1lQ2FjaGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9uYW1lQ2FjaGVzLmJlZ2luKCk7
IGl0ICE9IG5hbWVDYWNoZUVuZDsgKytpdCkgewotICAgICAgICAgICAgICAgIER5bmFtaWNTdWJ0
cmVlTm9kZUxpc3QqIGxpc3QgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgICAgIER5bmFtaWNT
dWJ0cmVlTm9kZUxpc3QqIGxpc3QgPSBpdC0+dmFsdWU7CiAgICAgICAgICAgICAgICAgb2xkRG9j
dW1lbnQtPnVucmVnaXN0ZXJOb2RlTGlzdENhY2hlKGxpc3QpOwogICAgICAgICAgICAgICAgIG5l
d0RvY3VtZW50LT5yZWdpc3Rlck5vZGVMaXN0Q2FjaGUobGlzdCk7CiAgICAgICAgICAgICB9CiAK
ICAgICAgICAgICAgIFRhZ05vZGVMaXN0Q2FjaGVOUzo6Y29uc3RfaXRlcmF0b3IgdGFnRW5kID0g
bV90YWdOb2RlTGlzdENhY2hlTlMuZW5kKCk7CiAgICAgICAgICAgICBmb3IgKFRhZ05vZGVMaXN0
Q2FjaGVOUzo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RhZ05vZGVMaXN0Q2FjaGVOUy5iZWdpbigp
OyBpdCAhPSB0YWdFbmQ7ICsraXQpIHsKLSAgICAgICAgICAgICAgICBEeW5hbWljU3VidHJlZU5v
ZGVMaXN0KiBsaXN0ID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgICAgICBEeW5hbWljU3VidHJl
ZU5vZGVMaXN0KiBsaXN0ID0gaXQtPnZhbHVlOwogICAgICAgICAgICAgICAgIEFTU0VSVCghbGlz
dC0+aXNSb290ZWRBdERvY3VtZW50KCkpOwogICAgICAgICAgICAgICAgIG9sZERvY3VtZW50LT51
bnJlZ2lzdGVyTm9kZUxpc3RDYWNoZShsaXN0KTsKICAgICAgICAgICAgICAgICBuZXdEb2N1bWVu
dC0+cmVnaXN0ZXJOb2RlTGlzdENhY2hlKGxpc3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUHJv
Y2Vzc2luZ0luc3RydWN0aW9uLmNwcAppbmRleCA2NzU5YmVjYmM2YWRhNDI4YWVkNjcyMjNkMDIz
Zjg0Yzk1ZTk1ZTliLi40YmNhMWQxZWI5NWViYWFlYzEwYWQxMzhmY2M2ZDFmZWIzZjZmNmI2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmNwcApAQCAtMTE4
LDcgKzExOCw3IEBAIHZvaWQgUHJvY2Vzc2luZ0luc3RydWN0aW9uOjpjaGVja1N0eWxlU2hlZXQo
KQogICAgICAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaSA9IGF0
dHJzLmZpbmQoInR5cGUiKTsKICAgICAgICAgU3RyaW5nIHR5cGU7CiAgICAgICAgIGlmIChpICE9
IGF0dHJzLmVuZCgpKQotICAgICAgICAgICAgdHlwZSA9IGktPnNlY29uZDsKKyAgICAgICAgICAg
IHR5cGUgPSBpLT52YWx1ZTsKIAogICAgICAgICBtX2lzQ1NTID0gdHlwZS5pc0VtcHR5KCkgfHwg
dHlwZSA9PSAidGV4dC9jc3MiOwogI2lmIEVOQUJMRShYU0xUKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwCmluZGV4IDkyNDQ1Y2E4MGRhZjYzMzIzOWQy
Zjc5Y2VlOThkZDlkZDQ0MWIzMjMuLjUzNWI1NzBiNWQ3ZGU5ZjRhZjkzNTgzZTdjNzFkMTJiMmQ3
NTM1YTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250
ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5j
cHAKQEAgLTE3Myw5ICsxNzMsOSBAQCBib29sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OmNhblN1
c3BlbmRBY3RpdmVET01PYmplY3RzKCkKICAgICBtX2l0ZXJhdGluZ0FjdGl2ZURPTU9iamVjdHMg
PSB0cnVlOwogICAgIEhhc2hNYXA8QWN0aXZlRE9NT2JqZWN0Kiwgdm9pZCo+OjppdGVyYXRvciBh
Y3RpdmVPYmplY3RzRW5kID0gbV9hY3RpdmVET01PYmplY3RzLmVuZCgpOwogICAgIGZvciAoSGFz
aE1hcDxBY3RpdmVET01PYmplY3QqLCB2b2lkKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX2FjdGl2ZURP
TU9iamVjdHMuYmVnaW4oKTsgaXRlciAhPSBhY3RpdmVPYmplY3RzRW5kOyArK2l0ZXIpIHsKLSAg
ICAgICAgQVNTRVJUKGl0ZXItPmZpcnN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgPT0gdGhp
cyk7Ci0gICAgICAgIEFTU0VSVChpdGVyLT5maXJzdC0+c3VzcGVuZElmTmVlZGVkQ2FsbGVkKCkp
OwotICAgICAgICBpZiAoIWl0ZXItPmZpcnN0LT5jYW5TdXNwZW5kKCkpIHsKKyAgICAgICAgQVNT
RVJUKGl0ZXItPmtleS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpID09IHRoaXMpOworICAgICAg
ICBBU1NFUlQoaXRlci0+a2V5LT5zdXNwZW5kSWZOZWVkZWRDYWxsZWQoKSk7CisgICAgICAgIGlm
ICghaXRlci0+a2V5LT5jYW5TdXNwZW5kKCkpIHsKICAgICAgICAgICAgIG1faXRlcmF0aW5nQWN0
aXZlRE9NT2JqZWN0cyA9IGZhbHNlOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICB9CkBAIC0xOTAsOSArMTkwLDkgQEAgdm9pZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpzdXNw
ZW5kQWN0aXZlRE9NT2JqZWN0cyhBY3RpdmVET01PYmplY3Q6OlJlYXNvbkZvclMKICAgICBtX2l0
ZXJhdGluZ0FjdGl2ZURPTU9iamVjdHMgPSB0cnVlOwogICAgIEhhc2hNYXA8QWN0aXZlRE9NT2Jq
ZWN0Kiwgdm9pZCo+OjppdGVyYXRvciBhY3RpdmVPYmplY3RzRW5kID0gbV9hY3RpdmVET01PYmpl
Y3RzLmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDxBY3RpdmVET01PYmplY3QqLCB2b2lkKj46Oml0
ZXJhdG9yIGl0ZXIgPSBtX2FjdGl2ZURPTU9iamVjdHMuYmVnaW4oKTsgaXRlciAhPSBhY3RpdmVP
YmplY3RzRW5kOyArK2l0ZXIpIHsKLSAgICAgICAgQVNTRVJUKGl0ZXItPmZpcnN0LT5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCkgPT0gdGhpcyk7Ci0gICAgICAgIEFTU0VSVChpdGVyLT5maXJzdC0+
c3VzcGVuZElmTmVlZGVkQ2FsbGVkKCkpOwotICAgICAgICBpdGVyLT5maXJzdC0+c3VzcGVuZCh3
aHkpOworICAgICAgICBBU1NFUlQoaXRlci0+a2V5LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkg
PT0gdGhpcyk7CisgICAgICAgIEFTU0VSVChpdGVyLT5rZXktPnN1c3BlbmRJZk5lZWRlZENhbGxl
ZCgpKTsKKyAgICAgICAgaXRlci0+a2V5LT5zdXNwZW5kKHdoeSk7CiAgICAgfQogICAgIG1faXRl
cmF0aW5nQWN0aXZlRE9NT2JqZWN0cyA9IGZhbHNlOwogICAgIG1fYWN0aXZlRE9NT2JqZWN0c0Fy
ZVN1c3BlbmRlZCA9IHRydWU7CkBAIC0yMDYsOSArMjA2LDkgQEAgdm9pZCBTY3JpcHRFeGVjdXRp
b25Db250ZXh0OjpyZXN1bWVBY3RpdmVET01PYmplY3RzKCkKICAgICBtX2l0ZXJhdGluZ0FjdGl2
ZURPTU9iamVjdHMgPSB0cnVlOwogICAgIEhhc2hNYXA8QWN0aXZlRE9NT2JqZWN0Kiwgdm9pZCo+
OjppdGVyYXRvciBhY3RpdmVPYmplY3RzRW5kID0gbV9hY3RpdmVET01PYmplY3RzLmVuZCgpOwog
ICAgIGZvciAoSGFzaE1hcDxBY3RpdmVET01PYmplY3QqLCB2b2lkKj46Oml0ZXJhdG9yIGl0ZXIg
PSBtX2FjdGl2ZURPTU9iamVjdHMuYmVnaW4oKTsgaXRlciAhPSBhY3RpdmVPYmplY3RzRW5kOyAr
K2l0ZXIpIHsKLSAgICAgICAgQVNTRVJUKGl0ZXItPmZpcnN0LT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCkgPT0gdGhpcyk7Ci0gICAgICAgIEFTU0VSVChpdGVyLT5maXJzdC0+c3VzcGVuZElmTmVl
ZGVkQ2FsbGVkKCkpOwotICAgICAgICBpdGVyLT5maXJzdC0+cmVzdW1lKCk7CisgICAgICAgIEFT
U0VSVChpdGVyLT5rZXktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSA9PSB0aGlzKTsKKyAgICAg
ICAgQVNTRVJUKGl0ZXItPmtleS0+c3VzcGVuZElmTmVlZGVkQ2FsbGVkKCkpOworICAgICAgICBp
dGVyLT5rZXktPnJlc3VtZSgpOwogICAgIH0KICAgICBtX2l0ZXJhdGluZ0FjdGl2ZURPTU9iamVj
dHMgPSBmYWxzZTsKIH0KQEAgLTIyMCw5ICsyMjAsOSBAQCB2b2lkIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ6OnN0b3BBY3RpdmVET01PYmplY3RzKCkKICAgICBtX2l0ZXJhdGluZ0FjdGl2ZURPTU9i
amVjdHMgPSB0cnVlOwogICAgIEhhc2hNYXA8QWN0aXZlRE9NT2JqZWN0Kiwgdm9pZCo+OjppdGVy
YXRvciBhY3RpdmVPYmplY3RzRW5kID0gbV9hY3RpdmVET01PYmplY3RzLmVuZCgpOwogICAgIGZv
ciAoSGFzaE1hcDxBY3RpdmVET01PYmplY3QqLCB2b2lkKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX2Fj
dGl2ZURPTU9iamVjdHMuYmVnaW4oKTsgaXRlciAhPSBhY3RpdmVPYmplY3RzRW5kOyArK2l0ZXIp
IHsKLSAgICAgICAgQVNTRVJUKGl0ZXItPmZpcnN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkg
PT0gdGhpcyk7Ci0gICAgICAgIEFTU0VSVChpdGVyLT5maXJzdC0+c3VzcGVuZElmTmVlZGVkQ2Fs
bGVkKCkpOwotICAgICAgICBpdGVyLT5maXJzdC0+c3RvcCgpOworICAgICAgICBBU1NFUlQoaXRl
ci0+a2V5LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgPT0gdGhpcyk7CisgICAgICAgIEFTU0VS
VChpdGVyLT5rZXktPnN1c3BlbmRJZk5lZWRlZENhbGxlZCgpKTsKKyAgICAgICAgaXRlci0+a2V5
LT5zdG9wKCk7CiAgICAgfQogICAgIG1faXRlcmF0aW5nQWN0aXZlRE9NT2JqZWN0cyA9IGZhbHNl
OwogCkBAIC0zODAsNyArMzgwLDcgQEAgdm9pZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjphZGp1
c3RNaW5pbXVtVGltZXJJbnRlcnZhbChkb3VibGUgb2xkTWluaW11bVRpbWVySW4KIHsKICAgICBp
ZiAobWluaW11bVRpbWVySW50ZXJ2YWwoKSAhPSBvbGRNaW5pbXVtVGltZXJJbnRlcnZhbCkgewog
ICAgICAgICBmb3IgKFRpbWVvdXRNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3RpbWVvdXRzLmJlZ2lu
KCk7IGl0ZXIgIT0gbV90aW1lb3V0cy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgICAgICBET01U
aW1lciogdGltZXIgPSBpdGVyLT5zZWNvbmQ7CisgICAgICAgICAgICBET01UaW1lciogdGltZXIg
PSBpdGVyLT52YWx1ZTsKICAgICAgICAgICAgIHRpbWVyLT5hZGp1c3RNaW5pbXVtVGltZXJJbnRl
cnZhbChvbGRNaW5pbXVtVGltZXJJbnRlcnZhbCk7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2VsZWN0b3JRdWVyeS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vU2VsZWN0b3JRdWVyeS5jcHAKaW5kZXggNDU1MzM0OWM1ZmE4NDA3MzZlZDM3MDgwNDRh
Y2I4ODQ2YWJlYmZhZi4uZWZkYjFjNDk1Mjg2NmQwOWRhZDY0YTUyNGQ4ODM0MTc1YzZiMGY2MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NlbGVjdG9yUXVlcnkuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9TZWxlY3RvclF1ZXJ5LmNwcApAQCAtMTc0LDcgKzE3NCw3IEBAIFNl
bGVjdG9yUXVlcnkqIFNlbGVjdG9yUXVlcnlDYWNoZTo6YWRkKGNvbnN0IEF0b21pY1N0cmluZyYg
c2VsZWN0b3JzLCBEb2N1bWVudCoKIHsKICAgICBIYXNoTWFwPEF0b21pY1N0cmluZywgT3duUHRy
PFNlbGVjdG9yUXVlcnk+ID46Oml0ZXJhdG9yIGl0ID0gbV9lbnRyaWVzLmZpbmQoc2VsZWN0b3Jz
KTsKICAgICBpZiAoaXQgIT0gbV9lbnRyaWVzLmVuZCgpKQotICAgICAgICByZXR1cm4gaXQtPnNl
Y29uZC5nZXQoKTsKKyAgICAgICAgcmV0dXJuIGl0LT52YWx1ZS5nZXQoKTsKIAogICAgIENTU1Bh
cnNlciBwYXJzZXIoZG9jdW1lbnQpOwogICAgIENTU1NlbGVjdG9yTGlzdCBzZWxlY3Rvckxpc3Q7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU3BhY2VTcGxpdFN0cmluZy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9kb20vU3BhY2VTcGxpdFN0cmluZy5jcHAKaW5kZXggYzMwMWY2OWVkYjM2
NTBhOTQ3MjY0MWY2YzE4MmRlYTViZmQ4YzE2NS4uOTk1YmRiN2VkMzVhZmE2ZmY0MTc2YmY5NTRk
NzhiMmJiZGU3M2EzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NwYWNlU3BsaXRT
dHJpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TcGFjZVNwbGl0U3RyaW5nLmNwcApA
QCAtMTY5LDcgKzE2OSw3IEBAIFNwYWNlU3BsaXRTdHJpbmdEYXRhOjp+U3BhY2VTcGxpdFN0cmlu
Z0RhdGEoKQogCiBQYXNzUmVmUHRyPFNwYWNlU3BsaXRTdHJpbmdEYXRhPiBTcGFjZVNwbGl0U3Ry
aW5nRGF0YTo6Y3JlYXRlKGNvbnN0IEF0b21pY1N0cmluZyYgc3RyaW5nKQogewotICAgIFNwYWNl
U3BsaXRTdHJpbmdEYXRhKiYgZGF0YSA9IHNoYXJlZERhdGFNYXAoKS5hZGQoc3RyaW5nLCAwKS5p
dGVyYXRvci0+c2Vjb25kOworICAgIFNwYWNlU3BsaXRTdHJpbmdEYXRhKiYgZGF0YSA9IHNoYXJl
ZERhdGFNYXAoKS5hZGQoc3RyaW5nLCAwKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCFkYXRh
KSB7CiAgICAgICAgIGRhdGEgPSBuZXcgU3BhY2VTcGxpdFN0cmluZ0RhdGEoc3RyaW5nKTsKICAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKGRhdGEpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL1N0eWxlZEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQu
Y3BwCmluZGV4IGVmZjlhOWU3MGQ3NjQzZDgxZTE4ZmIxMzdiMWM2OWY0MDEwM2IxMGYuLmQ0YzVl
OTRiOTI5NWJhZDM2MWRkMTU5YTVhYTBhNGI3YzBmNGJiZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU3R5
bGVkRWxlbWVudC5jcHAKQEAgLTI4MCwxNCArMjgwLDE0IEBAIHZvaWQgU3R5bGVkRWxlbWVudDo6
dXBkYXRlQXR0cmlidXRlU3R5bGUoKQogICAgIFByZXNlbnRhdGlvbkF0dHJpYnV0ZUNhY2hlOjpp
dGVyYXRvciBjYWNoZUl0ZXJhdG9yOwogICAgIGlmIChjYWNoZUhhc2gpIHsKICAgICAgICAgY2Fj
aGVJdGVyYXRvciA9IHByZXNlbnRhdGlvbkF0dHJpYnV0ZUNhY2hlKCkuYWRkKGNhY2hlSGFzaCwg
bnVsbHB0cikuaXRlcmF0b3I7Ci0gICAgICAgIGlmIChjYWNoZUl0ZXJhdG9yLT5zZWNvbmQgJiYg
Y2FjaGVJdGVyYXRvci0+c2Vjb25kLT5rZXkgIT0gY2FjaGVLZXkpCisgICAgICAgIGlmIChjYWNo
ZUl0ZXJhdG9yLT52YWx1ZSAmJiBjYWNoZUl0ZXJhdG9yLT52YWx1ZS0+a2V5ICE9IGNhY2hlS2V5
KQogICAgICAgICAgICAgY2FjaGVIYXNoID0gMDsKICAgICB9IGVsc2UKICAgICAgICAgY2FjaGVJ
dGVyYXRvciA9IHByZXNlbnRhdGlvbkF0dHJpYnV0ZUNhY2hlKCkuZW5kKCk7CiAKICAgICBSZWZQ
dHI8U3R5bGVQcm9wZXJ0eVNldD4gc3R5bGU7Ci0gICAgaWYgKGNhY2hlSGFzaCAmJiBjYWNoZUl0
ZXJhdG9yLT5zZWNvbmQpIHsKLSAgICAgICAgc3R5bGUgPSBjYWNoZUl0ZXJhdG9yLT5zZWNvbmQt
PnZhbHVlOworICAgIGlmIChjYWNoZUhhc2ggJiYgY2FjaGVJdGVyYXRvci0+dmFsdWUpIHsKKyAg
ICAgICAgc3R5bGUgPSBjYWNoZUl0ZXJhdG9yLT52YWx1ZS0+dmFsdWU7CiAgICAgICAgIHByZXNl
bnRhdGlvbkF0dHJpYnV0ZUNhY2hlQ2xlYW5lcigpLmRpZEhpdFByZXNlbnRhdGlvbkF0dHJpYnV0
ZUNhY2hlKCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgc3R5bGUgPSBTdHlsZVByb3BlcnR5U2V0
OjpjcmVhdGUoaXNTVkdFbGVtZW50KCkgPyBTVkdBdHRyaWJ1dGVNb2RlIDogQ1NTUXVpcmtzTW9k
ZSk7CkBAIC0zMDEsNyArMzAxLDcgQEAgdm9pZCBTdHlsZWRFbGVtZW50Ojp1cGRhdGVBdHRyaWJ1
dGVTdHlsZSgpCiAKICAgICBhdHRyaWJ1dGVEYXRhKCktPnNldEF0dHJpYnV0ZVN0eWxlKHN0eWxl
LT5pc0VtcHR5KCkgPyAwIDogc3R5bGUpOwogCi0gICAgaWYgKCFjYWNoZUhhc2ggfHwgY2FjaGVJ
dGVyYXRvci0+c2Vjb25kKQorICAgIGlmICghY2FjaGVIYXNoIHx8IGNhY2hlSXRlcmF0b3ItPnZh
bHVlKQogICAgICAgICByZXR1cm47CiAKICAgICBPd25QdHI8UHJlc2VudGF0aW9uQXR0cmlidXRl
Q2FjaGVFbnRyeT4gbmV3RW50cnkgPSBhZG9wdFB0cihuZXcgUHJlc2VudGF0aW9uQXR0cmlidXRl
Q2FjaGVFbnRyeSk7CkBAIC0zMTQsNyArMzE0LDcgQEAgdm9pZCBTdHlsZWRFbGVtZW50Ojp1cGRh
dGVBdHRyaWJ1dGVTdHlsZSgpCiAgICAgICAgIHByZXNlbnRhdGlvbkF0dHJpYnV0ZUNhY2hlKCku
Y2xlYXIoKTsKICAgICAgICAgcHJlc2VudGF0aW9uQXR0cmlidXRlQ2FjaGUoKS5zZXQoY2FjaGVI
YXNoLCBuZXdFbnRyeS5yZWxlYXNlKCkpOwogICAgIH0gZWxzZQotICAgICAgICBjYWNoZUl0ZXJh
dG9yLT5zZWNvbmQgPSBuZXdFbnRyeS5yZWxlYXNlKCk7CisgICAgICAgIGNhY2hlSXRlcmF0b3It
PnZhbHVlID0gbmV3RW50cnkucmVsZWFzZSgpOwogfQogCiB2b2lkIFN0eWxlZEVsZW1lbnQ6OmFk
ZFByb3BlcnR5VG9BdHRyaWJ1dGVTdHlsZShTdHlsZVByb3BlcnR5U2V0KiBzdHlsZSwgQ1NTUHJv
cGVydHlJRCBwcm9wZXJ0eUlELCBpbnQgaWRlbnRpZmllcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvbWFjL0FsdGVybmF0aXZlVGV4dFVJQ29udHJvbGxlci5tbSBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0FsdGVybmF0aXZlVGV4dFVJQ29udHJvbGxlci5tbQppbmRl
eCA5OTkxNmMxZTAwZjQ0OTIyYWE3ZWJjNmNmYjAwZmM0OTc2OGQ0NDNiLi42Y2E1ZDVmMDI5Yzk5
MTY5MzNiODI4OWQxNDVmMGQxMjFjNmQ1NjQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL21hYy9BbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xsZXIubW0KKysrIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9tYWMvQWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyLm1tCkBAIC01MCw3
ICs1MCw3IEBAIE5TVGV4dEFsdGVybmF0aXZlcyogQWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVy
OjpBbGVybmF0aXZlVGV4dENvbnRleHRDb250cm9sbGVyCiAgICAgSGFzaE1hcFR5cGU6OmNvbnN0
X2l0ZXJhdG9yIGl0ciA9IG1fYWx0ZXJuYXRpdmVzT2JqZWN0TWFwLmZpbmQoY29udGV4dCk7CiAg
ICAgaWYgKGl0ciA9PSBtX2FsdGVybmF0aXZlc09iamVjdE1hcC5lbmQoKSkKICAgICAgICAgcmV0
dXJuIE5VTEw7Ci0gICAgcmV0dXJuIGl0ci0+c2Vjb25kLmdldCgpOworICAgIHJldHVybiBpdHIt
PnZhbHVlLmdldCgpOwogfQogCiB2b2lkIEFsdGVybmF0aXZlVGV4dFVJQ29udHJvbGxlcjo6QWxl
cm5hdGl2ZVRleHRDb250ZXh0Q29udHJvbGxlcjo6cmVtb3ZlQWx0ZXJuYXRpdmVzRm9yQ29udGV4
dCh1aW50NjRfdCBjb250ZXh0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9Gb3Jt
Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0Zvcm1Db250cm9sbGVyLmNwcApp
bmRleCBmYmZlN2I3MTQ0ZTMxZmU5ZTY2NzBlYmQxMTZhZWNjYWMzNmUxNmU3Li43Zjg3Yjk3ZmZj
ODdkMzM3NmY5ODNiMzYzOTJmODc1ZTA3Nzk1NmNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0Zvcm1Db250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0Zvcm1D
b250cm9sbGVyLmNwcApAQCAtMjI4LDggKzIyOCw4IEBAIHZvaWQgU2F2ZWRGb3JtU3RhdGU6OnNl
cmlhbGl6ZVRvKFZlY3RvcjxTdHJpbmc+JiBzdGF0ZVZlY3RvcikgY29uc3QKIHsKICAgICBzdGF0
ZVZlY3Rvci5hcHBlbmQoU3RyaW5nOjpudW1iZXIobV9jb250cm9sU3RhdGVDb3VudCkpOwogICAg
IGZvciAoRm9ybUVsZW1lbnRTdGF0ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3N0YXRlRm9y
TmV3Rm9ybUVsZW1lbnRzLmJlZ2luKCk7IGl0ICE9IG1fc3RhdGVGb3JOZXdGb3JtRWxlbWVudHMu
ZW5kKCk7ICsraXQpIHsKLSAgICAgICAgY29uc3QgRm9ybUVsZW1lbnRLZXkmIGtleSA9IGl0LT5m
aXJzdDsKLSAgICAgICAgY29uc3QgRGVxdWU8Rm9ybUNvbnRyb2xTdGF0ZT4mIHF1ZXVlID0gaXQt
PnNlY29uZDsKKyAgICAgICAgY29uc3QgRm9ybUVsZW1lbnRLZXkmIGtleSA9IGl0LT5rZXk7Cisg
ICAgICAgIGNvbnN0IERlcXVlPEZvcm1Db250cm9sU3RhdGU+JiBxdWV1ZSA9IGl0LT52YWx1ZTsK
ICAgICAgICAgZm9yIChEZXF1ZTxGb3JtQ29udHJvbFN0YXRlPjo6Y29uc3RfaXRlcmF0b3IgcXVl
SXRlcmF0b3IgPSBxdWV1ZS5iZWdpbigpOyBxdWVJdGVyYXRvciAhPSBxdWV1ZS5lbmQoKTsgKytx
dWVJdGVyYXRvcikgewogICAgICAgICAgICAgc3RhdGVWZWN0b3IuYXBwZW5kKGtleS5uYW1lKCkp
OwogICAgICAgICAgICAgc3RhdGVWZWN0b3IuYXBwZW5kKGtleS50eXBlKCkpOwpAQCAtMjQzLDcg
KzI0Myw3IEBAIHZvaWQgU2F2ZWRGb3JtU3RhdGU6OmFwcGVuZENvbnRyb2xTdGF0ZShjb25zdCBB
dG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IEF0b21pY1N0CiAgICAgRm9ybUVsZW1lbnRLZXkga2V5
KG5hbWUuaW1wbCgpLCB0eXBlLmltcGwoKSk7CiAgICAgRm9ybUVsZW1lbnRTdGF0ZU1hcDo6aXRl
cmF0b3IgaXQgPSBtX3N0YXRlRm9yTmV3Rm9ybUVsZW1lbnRzLmZpbmQoa2V5KTsKICAgICBpZiAo
aXQgIT0gbV9zdGF0ZUZvck5ld0Zvcm1FbGVtZW50cy5lbmQoKSkKLSAgICAgICAgaXQtPnNlY29u
ZC5hcHBlbmQoc3RhdGUpOworICAgICAgICBpdC0+dmFsdWUuYXBwZW5kKHN0YXRlKTsKICAgICBl
bHNlIHsKICAgICAgICAgRGVxdWU8Rm9ybUNvbnRyb2xTdGF0ZT4gc3RhdGVMaXN0OwogICAgICAg
ICBzdGF0ZUxpc3QuYXBwZW5kKHN0YXRlKTsKQEAgLTI1OSwxMCArMjU5LDEwIEBAIEZvcm1Db250
cm9sU3RhdGUgU2F2ZWRGb3JtU3RhdGU6OnRha2VDb250cm9sU3RhdGUoY29uc3QgQXRvbWljU3Ry
aW5nJiBuYW1lLCBjb25zCiAgICAgRm9ybUVsZW1lbnRTdGF0ZU1hcDo6aXRlcmF0b3IgaXQgPSBt
X3N0YXRlRm9yTmV3Rm9ybUVsZW1lbnRzLmZpbmQoRm9ybUVsZW1lbnRLZXkobmFtZS5pbXBsKCks
IHR5cGUuaW1wbCgpKSk7CiAgICAgaWYgKGl0ID09IG1fc3RhdGVGb3JOZXdGb3JtRWxlbWVudHMu
ZW5kKCkpCiAgICAgICAgIHJldHVybiBGb3JtQ29udHJvbFN0YXRlKCk7Ci0gICAgQVNTRVJUKGl0
LT5zZWNvbmQuc2l6ZSgpKTsKLSAgICBGb3JtQ29udHJvbFN0YXRlIHN0YXRlID0gaXQtPnNlY29u
ZC50YWtlRmlyc3QoKTsKKyAgICBBU1NFUlQoaXQtPnZhbHVlLnNpemUoKSk7CisgICAgRm9ybUNv
bnRyb2xTdGF0ZSBzdGF0ZSA9IGl0LT52YWx1ZS50YWtlRmlyc3QoKTsKICAgICBtX2NvbnRyb2xT
dGF0ZUNvdW50LS07Ci0gICAgaWYgKCFpdC0+c2Vjb25kLnNpemUoKSkKKyAgICBpZiAoIWl0LT52
YWx1ZS5zaXplKCkpCiAgICAgICAgIG1fc3RhdGVGb3JOZXdGb3JtRWxlbWVudHMucmVtb3ZlKGl0
KTsKICAgICByZXR1cm4gc3RhdGU7CiB9CkBAIC0yNzEsMTAgKzI3MSwxMCBAQCBWZWN0b3I8U3Ry
aW5nPiBTYXZlZEZvcm1TdGF0ZTo6Z2V0UmVmZXJlbmNlZEZpbGVQYXRocygpIGNvbnN0CiB7CiAg
ICAgVmVjdG9yPFN0cmluZz4gdG9SZXR1cm47CiAgICAgZm9yIChGb3JtRWxlbWVudFN0YXRlTWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fc3RhdGVGb3JOZXdGb3JtRWxlbWVudHMuYmVnaW4oKTsg
aXQgIT0gbV9zdGF0ZUZvck5ld0Zvcm1FbGVtZW50cy5lbmQoKTsgKytpdCkgewotICAgICAgICBj
b25zdCBGb3JtRWxlbWVudEtleSYga2V5ID0gaXQtPmZpcnN0OworICAgICAgICBjb25zdCBGb3Jt
RWxlbWVudEtleSYga2V5ID0gaXQtPmtleTsKICAgICAgICAgaWYgKEF0b21pY1N0cmluZyhrZXku
dHlwZSgpKSAhPSBBdG9taWNTdHJpbmcoImZpbGUiKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICBjb25zdCBEZXF1ZTxGb3JtQ29udHJvbFN0YXRlPiYgcXVldWUgPSBpdC0+c2Vjb25k
OworICAgICAgICBjb25zdCBEZXF1ZTxGb3JtQ29udHJvbFN0YXRlPiYgcXVldWUgPSBpdC0+dmFs
dWU7CiAgICAgICAgIGZvciAoRGVxdWU8Rm9ybUNvbnRyb2xTdGF0ZT46OmNvbnN0X2l0ZXJhdG9y
IHF1ZUl0ZXJhdG9yID0gcXVldWUuYmVnaW4oKTsgcXVlSXRlcmF0b3IgIT0gcXVldWUuZW5kKCk7
ICsrcXVlSXRlcmF0b3IpIHsKICAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxGaWxlQ2hvb3NlckZp
bGVJbmZvPiYgc2VsZWN0ZWRGaWxlcyA9IEhUTUxJbnB1dEVsZW1lbnQ6OmZpbGVzRnJvbUZpbGVJ
bnB1dEZvcm1Db250cm9sU3RhdGUoKnF1ZUl0ZXJhdG9yKTsKICAgICAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgc2VsZWN0ZWRGaWxlcy5zaXplKCk7ICsraSkKQEAgLTM0OSwxMiArMzQ5
LDEyIEBAIEF0b21pY1N0cmluZyBGb3JtS2V5R2VuZXJhdG9yOjpmb3JtS2V5KGNvbnN0IEhUTUxG
b3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUmIGNvCiAgICAgfQogICAgIEZvcm1Ub0tleU1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2Zvcm1Ub0tleU1hcC5maW5kKGZvcm0pOwogICAgIGlmIChp
dCAhPSBtX2Zvcm1Ub0tleU1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7Cisg
ICAgICAgIHJldHVybiBpdC0+dmFsdWU7CiAKICAgICBTdHJpbmcgc2lnbmF0dXJlID0gZm9ybVNp
Z25hdHVyZSgqZm9ybSk7CiAgICAgQVNTRVJUKCFzaWduYXR1cmUuaXNOdWxsKCkpOwogICAgIEZv
cm1TaWduYXR1cmVUb05leHRJbmRleE1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fZm9ybVNpZ25h
dHVyZVRvTmV4dEluZGV4TWFwLmFkZChzaWduYXR1cmUsIDApOwotICAgIHVuc2lnbmVkIG5leHRJ
bmRleCA9IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKys7CisgICAgdW5zaWduZWQgbmV4dEluZGV4
ID0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSsrOwogCiAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVy
OwogICAgIGJ1aWxkZXIuYXBwZW5kKHNpZ25hdHVyZSk7CkBAIC00MDUsOCArNDA1LDggQEAgUGFz
c093blB0cjxGb3JtQ29udHJvbGxlcjo6U2F2ZWRGb3JtU3RhdGVNYXA+IEZvcm1Db250cm9sbGVy
OjpjcmVhdGVTYXZlZEZvcm1TdGEKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBTYXZl
ZEZvcm1TdGF0ZU1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IHN0YXRlTWFwLT5hZGQoa2V5R2VuZXJh
dG9yLT5mb3JtS2V5KCpjb250cm9sKS5pbXBsKCksIG51bGxwdHIpOwogICAgICAgICBpZiAocmVz
dWx0LmlzTmV3RW50cnkpCi0gICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IFNh
dmVkRm9ybVN0YXRlOjpjcmVhdGUoKTsKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQt
PmFwcGVuZENvbnRyb2xTdGF0ZShjb250cm9sLT5uYW1lKCksIGNvbnRyb2wtPnR5cGUoKSwgY29u
dHJvbC0+c2F2ZUZvcm1Db250cm9sU3RhdGUoKSk7CisgICAgICAgICAgICByZXN1bHQuaXRlcmF0
b3ItPnZhbHVlID0gU2F2ZWRGb3JtU3RhdGU6OmNyZWF0ZSgpOworICAgICAgICByZXN1bHQuaXRl
cmF0b3ItPnZhbHVlLT5hcHBlbmRDb250cm9sU3RhdGUoY29udHJvbC0+bmFtZSgpLCBjb250cm9s
LT50eXBlKCksIGNvbnRyb2wtPnNhdmVGb3JtQ29udHJvbFN0YXRlKCkpOwogICAgIH0KICAgICBy
ZXR1cm4gc3RhdGVNYXAucmVsZWFzZSgpOwogfQpAQCAtNDE4LDggKzQxOCw4IEBAIFZlY3RvcjxT
dHJpbmc+IEZvcm1Db250cm9sbGVyOjpmb3JtRWxlbWVudHNTdGF0ZSgpIGNvbnN0CiAgICAgc3Rh
dGVWZWN0b3IucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX2Zvcm1FbGVtZW50c1dpdGhTdGF0ZS5z
aXplKCkgKiA0KTsKICAgICBzdGF0ZVZlY3Rvci5hcHBlbmQoZm9ybVN0YXRlU2lnbmF0dXJlKCkp
OwogICAgIGZvciAoU2F2ZWRGb3JtU3RhdGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gc3RhdGVN
YXAtPmJlZ2luKCk7IGl0ICE9IHN0YXRlTWFwLT5lbmQoKTsgKytpdCkgewotICAgICAgICBzdGF0
ZVZlY3Rvci5hcHBlbmQoaXQtPmZpcnN0LmdldCgpKTsKLSAgICAgICAgaXQtPnNlY29uZC0+c2Vy
aWFsaXplVG8oc3RhdGVWZWN0b3IpOworICAgICAgICBzdGF0ZVZlY3Rvci5hcHBlbmQoaXQtPmtl
eS5nZXQoKSk7CisgICAgICAgIGl0LT52YWx1ZS0+c2VyaWFsaXplVG8oc3RhdGVWZWN0b3IpOwog
ICAgIH0KICAgICBib29sIGhhc09ubHlTaWduYXR1cmUgPSBzdGF0ZVZlY3Rvci5zaXplKCkgPT0g
MTsKICAgICBpZiAoaGFzT25seVNpZ25hdHVyZSkKQEAgLTQ0MSw4ICs0NDEsOCBAQCBGb3JtQ29u
dHJvbFN0YXRlIEZvcm1Db250cm9sbGVyOjp0YWtlU3RhdGVGb3JGb3JtRWxlbWVudChjb25zdCBI
VE1MRm9ybUNvbnRyb2xFbAogICAgIFNhdmVkRm9ybVN0YXRlTWFwOjppdGVyYXRvciBpdCA9IG1f
c2F2ZWRGb3JtU3RhdGVNYXAuZmluZChtX2Zvcm1LZXlHZW5lcmF0b3ItPmZvcm1LZXkoY29udHJv
bCkuaW1wbCgpKTsKICAgICBpZiAoaXQgPT0gbV9zYXZlZEZvcm1TdGF0ZU1hcC5lbmQoKSkKICAg
ICAgICAgcmV0dXJuIEZvcm1Db250cm9sU3RhdGUoKTsKLSAgICBGb3JtQ29udHJvbFN0YXRlIHN0
YXRlID0gaXQtPnNlY29uZC0+dGFrZUNvbnRyb2xTdGF0ZShjb250cm9sLm5hbWUoKSwgY29udHJv
bC50eXBlKCkpOwotICAgIGlmIChpdC0+c2Vjb25kLT5pc0VtcHR5KCkpCisgICAgRm9ybUNvbnRy
b2xTdGF0ZSBzdGF0ZSA9IGl0LT52YWx1ZS0+dGFrZUNvbnRyb2xTdGF0ZShjb250cm9sLm5hbWUo
KSwgY29udHJvbC50eXBlKCkpOworICAgIGlmIChpdC0+dmFsdWUtPmlzRW1wdHkoKSkKICAgICAg
ICAgbV9zYXZlZEZvcm1TdGF0ZU1hcC5yZW1vdmUoaXQpOwogICAgIHJldHVybiBzdGF0ZTsKIH0K
QEAgLTUxMSw3ICs1MTEsNyBAQCBWZWN0b3I8U3RyaW5nPiBGb3JtQ29udHJvbGxlcjo6Z2V0UmVm
ZXJlbmNlZEZpbGVQYXRocyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgc3RhdAogICAgIFNhdmVkRm9y
bVN0YXRlTWFwIG1hcDsKICAgICBmb3JtU3RhdGVzRnJvbVN0YXRlVmVjdG9yKHN0YXRlVmVjdG9y
LCBtYXApOwogICAgIGZvciAoU2F2ZWRGb3JtU3RhdGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bWFwLmJlZ2luKCk7IGl0ICE9IG1hcC5lbmQoKTsgKytpdCkKLSAgICAgICAgdG9SZXR1cm4uYXBw
ZW5kKGl0LT5zZWNvbmQtPmdldFJlZmVyZW5jZWRGaWxlUGF0aHMoKSk7CisgICAgICAgIHRvUmV0
dXJuLmFwcGVuZChpdC0+dmFsdWUtPmdldFJlZmVyZW5jZWRGaWxlUGF0aHMoKSk7CiAgICAgcmV0
dXJuIHRvUmV0dXJuOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxD
b2xsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENvbGxlY3Rpb24uY3BwCmlu
ZGV4IDkxZTE4YTNmYmRmMmQ4N2E2ZTA3OTRlN2NiMmI3MWI2NGY4YWI5YzUuLjFlY2I2NDRjYTFi
NjMwODA3YWQ2NmE5NzQ0ZTNkZjMzMTRmZWFmNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTENvbGxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENv
bGxlY3Rpb24uY3BwCkBAIC01NTksNyArNTU5LDcgQEAgUGFzc1JlZlB0cjxOb2RlTGlzdD4gSFRN
TENvbGxlY3Rpb246OnRhZ3MoY29uc3QgU3RyaW5nJiBuYW1lKQogCiB2b2lkIEhUTUxDb2xsZWN0
aW9uQ2FjaGVCYXNlOjphcHBlbmQoTm9kZUNhY2hlTWFwJiBtYXAsIGNvbnN0IEF0b21pY1N0cmlu
ZyYga2V5LCBFbGVtZW50KiBlbGVtZW50KQogewotICAgIE93blB0cjxWZWN0b3I8RWxlbWVudCo+
ID4mIHZlY3RvciA9IG1hcC5hZGQoa2V5LmltcGwoKSwgbnVsbHB0cikuaXRlcmF0b3ItPnNlY29u
ZDsKKyAgICBPd25QdHI8VmVjdG9yPEVsZW1lbnQqPiA+JiB2ZWN0b3IgPSBtYXAuYWRkKGtleS5p
bXBsKCksIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoIXZlY3RvcikKICAgICAg
ICAgdmVjdG9yID0gYWRvcHRQdHIobmV3IFZlY3RvcjxFbGVtZW50Kj4pOwogICAgIHZlY3Rvci0+
YXBwZW5kKGVsZW1lbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xGcmFtZWJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZy
YW1lYnVmZmVyLmNwcAppbmRleCBiOTFhZTUwNmVjZjc5ZTNkNjJmZTE3ZTQzNzc5OTNmZDNjMTQ2
YzFkLi5kMDgxZTI0OTA1YTBhZDU5ZTc0ZTVkYzA1Yzc0NTEwODZhNjg0ZjRhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcApAQCAtMzI3LDcg
KzMyNyw3IEBAIFdlYkdMU2hhcmVkT2JqZWN0KiBXZWJHTEZyYW1lYnVmZmVyOjpnZXRBdHRhY2ht
ZW50T2JqZWN0KEdDM0RlbnVtIGF0dGFjaG1lbnQpIGNvCiBXZWJHTEZyYW1lYnVmZmVyOjpXZWJH
TEF0dGFjaG1lbnQqIFdlYkdMRnJhbWVidWZmZXI6OmdldEF0dGFjaG1lbnQoR0MzRGVudW0gYXR0
YWNobWVudCkgY29uc3QKIHsKICAgICBjb25zdCBBdHRhY2htZW50TWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fYXR0YWNobWVudHMuZmluZChhdHRhY2htZW50KTsKLSAgICByZXR1cm4gKGl0ICE9
IG1fYXR0YWNobWVudHMuZW5kKCkpID8gaXQtPnNlY29uZC5nZXQoKSA6IDA7CisgICAgcmV0dXJu
IChpdCAhPSBtX2F0dGFjaG1lbnRzLmVuZCgpKSA/IGl0LT52YWx1ZS5nZXQoKSA6IDA7CiB9CiAK
IHZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6cmVtb3ZlQXR0YWNobWVudEZyb21Cb3VuZEZyYW1lYnVm
ZmVyKEdDM0RlbnVtIGF0dGFjaG1lbnQpCkBAIC0zNjcsOSArMzY3LDkgQEAgdm9pZCBXZWJHTEZy
YW1lYnVmZmVyOjpyZW1vdmVBdHRhY2htZW50RnJvbUJvdW5kRnJhbWVidWZmZXIoV2ViR0xTaGFy
ZWRPYmplY3QqIGEKICAgICB3aGlsZSAoY2hlY2tNb3JlKSB7CiAgICAgICAgIGNoZWNrTW9yZSA9
IGZhbHNlOwogICAgICAgICBmb3IgKEF0dGFjaG1lbnRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9hdHRh
Y2htZW50cy5iZWdpbigpOyBpdCAhPSBtX2F0dGFjaG1lbnRzLmVuZCgpOyArK2l0KSB7Ci0gICAg
ICAgICAgICBXZWJHTEF0dGFjaG1lbnQqIGF0dGFjaG1lbnRPYmplY3QgPSBpdC0+c2Vjb25kLmdl
dCgpOworICAgICAgICAgICAgV2ViR0xBdHRhY2htZW50KiBhdHRhY2htZW50T2JqZWN0ID0gaXQt
PnZhbHVlLmdldCgpOwogICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnRPYmplY3QtPmlzU2hhcmVk
T2JqZWN0KGF0dGFjaG1lbnQpKSB7Ci0gICAgICAgICAgICAgICAgR0MzRGVudW0gYXR0YWNobWVu
dFR5cGUgPSBpdC0+Zmlyc3Q7CisgICAgICAgICAgICAgICAgR0MzRGVudW0gYXR0YWNobWVudFR5
cGUgPSBpdC0+a2V5OwogICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRPYmplY3QtPnVuYXR0YWNo
KGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0M0QoKSwgYXR0YWNobWVudFR5cGUpOwogICAgICAg
ICAgICAgICAgIHJlbW92ZUF0dGFjaG1lbnRGcm9tQm91bmRGcmFtZWJ1ZmZlcihhdHRhY2htZW50
VHlwZSk7CiAgICAgICAgICAgICAgICAgY2hlY2tNb3JlID0gdHJ1ZTsKQEAgLTQxOSw4ICs0MTks
OCBAQCBHQzNEZW51bSBXZWJHTEZyYW1lYnVmZmVyOjpjaGVja1N0YXR1cyhjb25zdCBjaGFyKiog
cmVhc29uKSBjb25zdAogICAgIGJvb2wgaGF2ZVN0ZW5jaWwgPSBmYWxzZTsKICAgICBib29sIGhh
dmVEZXB0aFN0ZW5jaWwgPSBmYWxzZTsKICAgICBmb3IgKEF0dGFjaG1lbnRNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbV9hdHRhY2htZW50cy5iZWdpbigpOyBpdCAhPSBtX2F0dGFjaG1lbnRzLmVu
ZCgpOyArK2l0KSB7Ci0gICAgICAgIFdlYkdMQXR0YWNobWVudCogYXR0YWNobWVudCA9IGl0LT5z
ZWNvbmQuZ2V0KCk7Ci0gICAgICAgIGlmICghaXNBdHRhY2htZW50Q29tcGxldGUoYXR0YWNobWVu
dCwgaXQtPmZpcnN0LCByZWFzb24pKQorICAgICAgICBXZWJHTEF0dGFjaG1lbnQqIGF0dGFjaG1l
bnQgPSBpdC0+dmFsdWUuZ2V0KCk7CisgICAgICAgIGlmICghaXNBdHRhY2htZW50Q29tcGxldGUo
YXR0YWNobWVudCwgaXQtPmtleSwgcmVhc29uKSkKICAgICAgICAgICAgIHJldHVybiBHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOwogICAgICAgICBp
ZiAoIWF0dGFjaG1lbnQtPmlzVmFsaWQoKSkgewogICAgICAgICAgICAgKnJlYXNvbiA9ICJhdHRh
Y2htZW50IGlzIG5vdCB2YWxpZCI7CkBAIC00MzAsNyArNDMwLDcgQEAgR0MzRGVudW0gV2ViR0xG
cmFtZWJ1ZmZlcjo6Y2hlY2tTdGF0dXMoY29uc3QgY2hhcioqIHJlYXNvbikgY29uc3QKICAgICAg
ICAgICAgICpyZWFzb24gPSAiYXR0YWNobWVudCBpcyBhbiB1bnN1cHBvcnRlZCBmb3JtYXQiOwog
ICAgICAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9JTkNPTVBM
RVRFX0FUVEFDSE1FTlQ7CiAgICAgICAgIH0KLSAgICAgICAgc3dpdGNoIChpdC0+Zmlyc3QpIHsK
KyAgICAgICAgc3dpdGNoIChpdC0+a2V5KSB7CiAgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkRFUFRIX0FUVEFDSE1FTlQ6CiAgICAgICAgICAgICBoYXZlRGVwdGggPSB0cnVlOwogICAg
ICAgICAgICAgYnJlYWs7CkBAIC00ODgsNyArNDg4LDcgQEAgYm9vbCBXZWJHTEZyYW1lYnVmZmVy
OjpoYXNTdGVuY2lsQnVmZmVyKCkgY29uc3QKIHZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6ZGVsZXRl
T2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNkLCBQbGF0Zm9ybTNET2JqZWN0
IG9iamVjdCkKIHsKICAgICBmb3IgKEF0dGFjaG1lbnRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9hdHRh
Y2htZW50cy5iZWdpbigpOyBpdCAhPSBtX2F0dGFjaG1lbnRzLmVuZCgpOyArK2l0KQotICAgICAg
ICBpdC0+c2Vjb25kLT5vbkRldGFjaGVkKGNvbnRleHQzZCk7CisgICAgICAgIGl0LT52YWx1ZS0+
b25EZXRhY2hlZChjb250ZXh0M2QpOwogCiAgICAgY29udGV4dDNkLT5kZWxldGVGcmFtZWJ1ZmZl
cihvYmplY3QpOwogfQpAQCAtNDk5LDggKzQ5OSw4IEBAIGJvb2wgV2ViR0xGcmFtZWJ1ZmZlcjo6
aW5pdGlhbGl6ZUF0dGFjaG1lbnRzKEdyYXBoaWNzQ29udGV4dDNEKiBnM2QsIGNvbnN0IGNoYXIq
CiAgICAgR0MzRGJpdGZpZWxkIG1hc2sgPSAwOwogCiAgICAgZm9yIChBdHRhY2htZW50TWFwOjpp
dGVyYXRvciBpdCA9IG1fYXR0YWNobWVudHMuYmVnaW4oKTsgaXQgIT0gbV9hdHRhY2htZW50cy5l
bmQoKTsgKytpdCkgewotICAgICAgICBHQzNEZW51bSBhdHRhY2htZW50VHlwZSA9IGl0LT5maXJz
dDsKLSAgICAgICAgV2ViR0xBdHRhY2htZW50KiBhdHRhY2htZW50ID0gaXQtPnNlY29uZC5nZXQo
KTsKKyAgICAgICAgR0MzRGVudW0gYXR0YWNobWVudFR5cGUgPSBpdC0+a2V5OworICAgICAgICBX
ZWJHTEF0dGFjaG1lbnQqIGF0dGFjaG1lbnQgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgIGlm
ICghYXR0YWNobWVudC0+aXNJbml0aWFsaXplZCgpKQogICAgICAgICAgICBtYXNrIHw9IEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRDbGVhckJpdHNCeUF0dGFjaG1lbnRUeXBlKGF0dGFjaG1lbnRUeXBl
KTsKICAgICB9CkBAIC01NzEsOCArNTcxLDggQEAgYm9vbCBXZWJHTEZyYW1lYnVmZmVyOjppbml0
aWFsaXplQXR0YWNobWVudHMoR3JhcGhpY3NDb250ZXh0M0QqIGczZCwgY29uc3QgY2hhcioKICAg
ICAgICAgZzNkLT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpESVRIRVIpOwogCiAgICAgZm9y
IChBdHRhY2htZW50TWFwOjppdGVyYXRvciBpdCA9IG1fYXR0YWNobWVudHMuYmVnaW4oKTsgaXQg
IT0gbV9hdHRhY2htZW50cy5lbmQoKTsgKytpdCkgewotICAgICAgICBHQzNEZW51bSBhdHRhY2ht
ZW50VHlwZSA9IGl0LT5maXJzdDsKLSAgICAgICAgV2ViR0xBdHRhY2htZW50KiBhdHRhY2htZW50
ID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgR0MzRGVudW0gYXR0YWNobWVudFR5cGUgPSBp
dC0+a2V5OworICAgICAgICBXZWJHTEF0dGFjaG1lbnQqIGF0dGFjaG1lbnQgPSBpdC0+dmFsdWUu
Z2V0KCk7CiAgICAgICAgIEdDM0RiaXRmaWVsZCBiaXRzID0gR3JhcGhpY3NDb250ZXh0M0Q6Omdl
dENsZWFyQml0c0J5QXR0YWNobWVudFR5cGUoYXR0YWNobWVudFR5cGUpOwogICAgICAgICBpZiAo
Yml0cyAmIG1hc2spCiAgICAgICAgICAgICBhdHRhY2htZW50LT5zZXRJbml0aWFsaXplZCgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0
b3IucHkgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5w
eQppbmRleCAzMWUxMWI4ZTVmN2EyOTM2N2FiY2VhYWE0ZDRmYjZhYzlmOTcyNGMwLi44MTcxMWZm
NTQxN2I2OWEwZmU2YTU5ZWU0M2UyOGJhZTY3NjIwZDM2IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQpAQCAtMTMxOSw3ICsxMzE5
LDcgQEAgY2xhc3MgVHlwZUJpbmRpbmdzOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgICAgICBJbnNwZWN0b3JPYmpl
Y3Q6Oml0ZXJhdG9yICVzO1xuIiAlIGl0X25hbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgICAgICVzID0gb2Jq
ZWN0LT5maW5kKFwiJXNcIik7XG4iICUgKGl0X25hbWUsIHByb3BfZGF0YS5wWyJuYW1lIl0pKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIu
bmV3bGluZSgiICAgICAgICBBU1NFUlQoJXMgIT0gb2JqZWN0LT5lbmQoKSk7XG4iICUgaXRfbmFt
ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3Jp
dGVyLm5ld2xpbmUoIiAgICAgICAgJXMoJXMtPnNlY29uZC5nZXQoKSk7XG4iICUgKHByb3BfZGF0
YS5wYXJhbV90eXBlX2JpbmRpbmcuZ2V0X3ZhbGlkYXRvcl9jYWxsX3RleHQoKSwgaXRfbmFtZSkp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRl
ci5uZXdsaW5lKCIgICAgICAgICVzKCVzLT52YWx1ZS5nZXQoKSk7XG4iICUgKHByb3BfZGF0YS5w
YXJhbV90eXBlX2JpbmRpbmcuZ2V0X3ZhbGlkYXRvcl9jYWxsX3RleHQoKSwgaXRfbmFtZSkpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5u
ZXdsaW5lKCIgICAgfVxuIikKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgY2xvc2VkX2ZpZWxkX3NldDoKQEAgLTEzMzEsNyArMTMzMSw3IEBAIGNsYXNzIFR5cGVCaW5k
aW5nczoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jf
d3JpdGVyLm5ld2xpbmUoIiAgICAgICAgSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciAlcztcbiIg
JSBpdF9uYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlk
YXRvcl93cml0ZXIubmV3bGluZSgiICAgICAgICAlcyA9IG9iamVjdC0+ZmluZChcIiVzXCIpO1xu
IiAlIChpdF9uYW1lLCBwcm9wX2RhdGEucFsibmFtZSJdKSkKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgaWYg
KCVzICE9IG9iamVjdC0+ZW5kKCkpIHtcbiIgJSBpdF9uYW1lKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgICAgICAg
ICAgJXMoJXMtPnNlY29uZC5nZXQoKSk7XG4iICUgKHByb3BfZGF0YS5wYXJhbV90eXBlX2JpbmRp
bmcuZ2V0X3ZhbGlkYXRvcl9jYWxsX3RleHQoKSwgaXRfbmFtZSkpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgICAg
ICAgICAlcyglcy0+dmFsdWUuZ2V0KCkpO1xuIiAlIChwcm9wX2RhdGEucGFyYW1fdHlwZV9iaW5k
aW5nLmdldF92YWxpZGF0b3JfY2FsbF90ZXh0KCksIGl0X25hbWUpKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNsb3NlZF9maWVsZF9zZXQ6CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGlu
ZSgiICAgICAgICAgICAgKytmb3VuZFByb3BlcnRpZXNDb3VudDtcbiIpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAg
ICAgIH1cbiIpCkBAIC0yMDQ0LDcgKzIwNDQsNyBAQCAkbWVzc2FnZUhhbmRsZXJzCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICAoKCp0aGlzKS4qaXQtPnNlY29uZCkoY2FsbElkLCBtZXNz
YWdlT2JqZWN0LmdldCgpKTsKKyAgICAoKCp0aGlzKS4qaXQtPnZhbHVlKShjYWxsSWQsIG1lc3Nh
Z2VPYmplY3QuZ2V0KCkpOwogfQogCiB2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1w
bDo6c2VuZFJlc3BvbnNlKGxvbmcgY2FsbElkLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cmVzdWx0LCBjb25zdCBjaGFyKiBjb21tYW5kTmFtZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJh
eT4gcHJvdG9jb2xFcnJvcnMsIEVycm9yU3RyaW5nIGludm9jYXRpb25FcnJvcikKQEAgLTIxMzMs
NyArMjEzMyw3IEBAIFIgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpnZXRQcm9wZXJ0
eVZhbHVlSW1wbChJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwKICAgICAgICAgcmV0dXJuIHZhbHVl
OwogICAgIH0KIAotICAgIGlmICghYXNfbWV0aG9kKHZhbHVlSXRlcmF0b3ItPnNlY29uZC5nZXQo
KSwgJnZhbHVlKSkKKyAgICBpZiAoIWFzX21ldGhvZCh2YWx1ZUl0ZXJhdG9yLT52YWx1ZS5nZXQo
KSwgJnZhbHVlKSkKICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpm
b3JtYXQoIlBhcmFtZXRlciAnJXMnIGhhcyB3cm9uZyB0eXBlLiBJdCBtdXN0IGJlICclcycuIiwg
bmFtZS51dGY4KCkuZGF0YSgpLCB0eXBlX25hbWUpKTsKICAgICBlbHNlCiAgICAgICAgIGlmICh2
YWx1ZUZvdW5kKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNo
U3VwcG9ydC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNw
cAppbmRleCBjMDNkY2U0NzE0ZGYxMmNhNTVkNThlYmFiMmI4OTlhMmRjNzExY2U1Li44ZTZjMTgw
MGQzNTI4MjY0ZTUzMTM0ZWQ4ZGM2MWI4M2VmODhiOTU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcApAQCAtMjM3LDI0ICsyMzcsMjQgQEAgRE9NUGF0
Y2hTdXBwb3J0OjpkaWZmKGNvbnN0IFZlY3RvcjxPd25QdHI8RGlnZXN0PiA+JiBvbGRMaXN0LCBj
b25zdCBWZWN0b3I8T3duUHQKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbmV3TGlzdC5z
aXplKCk7ICsraSkgewogICAgICAgICBEaWZmVGFibGU6Oml0ZXJhdG9yIGl0ID0gbmV3VGFibGUu
YWRkKG5ld0xpc3RbaV0tPm1fc2hhMSwgVmVjdG9yPHNpemVfdD4oKSkuaXRlcmF0b3I7Ci0gICAg
ICAgIGl0LT5zZWNvbmQuYXBwZW5kKGkpOworICAgICAgICBpdC0+dmFsdWUuYXBwZW5kKGkpOwog
ICAgIH0KIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2xkTGlzdC5zaXplKCk7ICsraSkg
ewogICAgICAgICBEaWZmVGFibGU6Oml0ZXJhdG9yIGl0ID0gb2xkVGFibGUuYWRkKG9sZExpc3Rb
aV0tPm1fc2hhMSwgVmVjdG9yPHNpemVfdD4oKSkuaXRlcmF0b3I7Ci0gICAgICAgIGl0LT5zZWNv
bmQuYXBwZW5kKGkpOworICAgICAgICBpdC0+dmFsdWUuYXBwZW5kKGkpOwogICAgIH0KIAogICAg
IGZvciAoRGlmZlRhYmxlOjppdGVyYXRvciBuZXdJdCA9IG5ld1RhYmxlLmJlZ2luKCk7IG5ld0l0
ICE9IG5ld1RhYmxlLmVuZCgpOyArK25ld0l0KSB7Ci0gICAgICAgIGlmIChuZXdJdC0+c2Vjb25k
LnNpemUoKSAhPSAxKQorICAgICAgICBpZiAobmV3SXQtPnZhbHVlLnNpemUoKSAhPSAxKQogICAg
ICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgRGlmZlRhYmxlOjppdGVyYXRvciBvbGRJdCA9
IG9sZFRhYmxlLmZpbmQobmV3SXQtPmZpcnN0KTsKLSAgICAgICAgaWYgKG9sZEl0ID09IG9sZFRh
YmxlLmVuZCgpIHx8IG9sZEl0LT5zZWNvbmQuc2l6ZSgpICE9IDEpCisgICAgICAgIERpZmZUYWJs
ZTo6aXRlcmF0b3Igb2xkSXQgPSBvbGRUYWJsZS5maW5kKG5ld0l0LT5rZXkpOworICAgICAgICBp
ZiAob2xkSXQgPT0gb2xkVGFibGUuZW5kKCkgfHwgb2xkSXQtPnZhbHVlLnNpemUoKSAhPSAxKQog
ICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgbmV3TWFwW25ld0l0LT5zZWNvbmRbMF1d
ID0gbWFrZV9wYWlyKG5ld0xpc3RbbmV3SXQtPnNlY29uZFswXV0uZ2V0KCksIG9sZEl0LT5zZWNv
bmRbMF0pOwotICAgICAgICBvbGRNYXBbb2xkSXQtPnNlY29uZFswXV0gPSBtYWtlX3BhaXIob2xk
TGlzdFtvbGRJdC0+c2Vjb25kWzBdXS5nZXQoKSwgbmV3SXQtPnNlY29uZFswXSk7CisgICAgICAg
IG5ld01hcFtuZXdJdC0+dmFsdWVbMF1dID0gbWFrZV9wYWlyKG5ld0xpc3RbbmV3SXQtPnZhbHVl
WzBdXS5nZXQoKSwgb2xkSXQtPnZhbHVlWzBdKTsKKyAgICAgICAgb2xkTWFwW29sZEl0LT52YWx1
ZVswXV0gPSBtYWtlX3BhaXIob2xkTGlzdFtvbGRJdC0+dmFsdWVbMF1dLmdldCgpLCBuZXdJdC0+
dmFsdWVbMF0pOwogICAgIH0KIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBuZXdMaXN0LnNpemUo
KSA+IDAgJiYgaSA8IG5ld0xpc3Quc2l6ZSgpIC0gMTsgKytpKSB7CkBAIC0zNjQsNyArMzY0LDcg
QEAgYm9vbCBET01QYXRjaFN1cHBvcnQ6OmlubmVyUGF0Y2hDaGlsZHJlbihDb250YWluZXJOb2Rl
KiBwYXJlbnROb2RlLCBjb25zdCBWZWN0b3IKIAogICAgIC8vIDIuIFBhdGNoIG5vZGVzIG1hcmtl
ZCBmb3IgbWVyZ2UuCiAgICAgZm9yIChIYXNoTWFwPERpZ2VzdCosIERpZ2VzdCo+OjppdGVyYXRv
ciBpdCA9IG1lcmdlcy5iZWdpbigpOyBpdCAhPSBtZXJnZXMuZW5kKCk7ICsraXQpIHsKLSAgICAg
ICAgaWYgKCFpbm5lclBhdGNoTm9kZShpdC0+c2Vjb25kLCBpdC0+Zmlyc3QsIGVjKSkKKyAgICAg
ICAgaWYgKCFpbm5lclBhdGNoTm9kZShpdC0+dmFsdWUsIGl0LT5rZXksIGVjKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTQ2Myw3ICs0NjMsNyBAQCBib29sIERPTVBh
dGNoU3VwcG9ydDo6cmVtb3ZlQ2hpbGRBbmRNb3ZlVG9OZXcoRGlnZXN0KiBvbGREaWdlc3QsIEV4
Y2VwdGlvbkNvZGUmCiAgICAgLy8gaGlnaCB0aGF0IGl0IHdpbGwgZ2V0IG1lcmdlZCBiYWNrIGlu
dG8gdGhlIG9yaWdpbmFsIERPTSBkdXJpbmcgdGhlIGZ1cnRoZXIgcGF0Y2hpbmcuCiAgICAgVW51
c2VkTm9kZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbV91bnVzZWROb2Rlc01hcC5maW5kKG9sZERpZ2Vz
dC0+bV9zaGExKTsKICAgICBpZiAoaXQgIT0gbV91bnVzZWROb2Rlc01hcC5lbmQoKSkgewotICAg
ICAgICBEaWdlc3QqIG5ld0RpZ2VzdCA9IGl0LT5zZWNvbmQ7CisgICAgICAgIERpZ2VzdCogbmV3
RGlnZXN0ID0gaXQtPnZhbHVlOwogICAgICAgICBOb2RlKiBuZXdOb2RlID0gbmV3RGlnZXN0LT5t
X25vZGU7CiAgICAgICAgIGlmICghbV9kb21FZGl0b3ItPnJlcGxhY2VDaGlsZChuZXdOb2RlLT5w
YXJlbnROb2RlKCksIG9sZE5vZGUsIG5ld05vZGUsIGVjKSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlw
dE1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0TWFu
YWdlci5jcHAKaW5kZXggNTJlYzc0OTBhMDc3YjVjZmQ0ZjNiMDg1ZDI4NzdiYzg3MGNjMDdjZi4u
MWQ1ZTMxNzU3Y2Q4NmIzYjIyYjhmZWRiMzFhYmNkNWUwMmVmZjQ3NCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0TWFuYWdlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0TWFuYWdlci5jcHAKQEAgLTgyLDEw
ICs4MiwxMCBAQCBJbmplY3RlZFNjcmlwdCBJbmplY3RlZFNjcmlwdE1hbmFnZXI6OmluamVjdGVk
U2NyaXB0Rm9ySWQoaW50IGlkKQogewogICAgIElkVG9JbmplY3RlZFNjcmlwdE1hcDo6aXRlcmF0
b3IgaXQgPSBtX2lkVG9JbmplY3RlZFNjcmlwdC5maW5kKGlkKTsKICAgICBpZiAoaXQgIT0gbV9p
ZFRvSW5qZWN0ZWRTY3JpcHQuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAg
ICAgICByZXR1cm4gaXQtPnZhbHVlOwogICAgIGZvciAoU2NyaXB0U3RhdGVUb0lkOjppdGVyYXRv
ciBpdCA9IG1fc2NyaXB0U3RhdGVUb0lkLmJlZ2luKCk7IGl0ICE9IG1fc2NyaXB0U3RhdGVUb0lk
LmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kID09IGlkKQotICAgICAgICAg
ICAgcmV0dXJuIGluamVjdGVkU2NyaXB0Rm9yKGl0LT5maXJzdCk7CisgICAgICAgIGlmIChpdC0+
dmFsdWUgPT0gaWQpCisgICAgICAgICAgICByZXR1cm4gaW5qZWN0ZWRTY3JpcHRGb3IoaXQtPmtl
eSk7CiAgICAgfQogICAgIHJldHVybiBJbmplY3RlZFNjcmlwdCgpOwogfQpAQCAtOTQsNyArOTQs
NyBAQCBpbnQgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjppbmplY3RlZFNjcmlwdElkRm9yKFNjcmlw
dFN0YXRlKiBzY3JpcHRTdGF0ZSkKIHsKICAgICBTY3JpcHRTdGF0ZVRvSWQ6Oml0ZXJhdG9yIGl0
ID0gbV9zY3JpcHRTdGF0ZVRvSWQuZmluZChzY3JpcHRTdGF0ZSk7CiAgICAgaWYgKGl0ICE9IG1f
c2NyaXB0U3RhdGVUb0lkLmVuZCgpKQotICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICAg
ICAgcmV0dXJuIGl0LT52YWx1ZTsKICAgICBpbnQgaWQgPSBtX25leHRJbmplY3RlZFNjcmlwdElk
Kys7CiAgICAgbV9zY3JpcHRTdGF0ZVRvSWQuc2V0KHNjcmlwdFN0YXRlLCBpZCk7CiAgICAgcmV0
dXJuIGlkOwpAQCAtMTI2LDExICsxMjYsMTEgQEAgdm9pZCBJbmplY3RlZFNjcmlwdE1hbmFnZXI6
OmRpc2NhcmRJbmplY3RlZFNjcmlwdHNGb3IoRE9NV2luZG93KiB3aW5kb3cpCiAgICAgVmVjdG9y
PGxvbmc+IGlkc1RvUmVtb3ZlOwogICAgIElkVG9JbmplY3RlZFNjcmlwdE1hcDo6aXRlcmF0b3Ig
ZW5kID0gbV9pZFRvSW5qZWN0ZWRTY3JpcHQuZW5kKCk7CiAgICAgZm9yIChJZFRvSW5qZWN0ZWRT
Y3JpcHRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pZFRvSW5qZWN0ZWRTY3JpcHQuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSA9IGl0LT5z
ZWNvbmQuc2NyaXB0U3RhdGUoKTsKKyAgICAgICAgU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlID0g
aXQtPnZhbHVlLnNjcmlwdFN0YXRlKCk7CiAgICAgICAgIGlmICh3aW5kb3cgIT0gZG9tV2luZG93
RnJvbVNjcmlwdFN0YXRlKHNjcmlwdFN0YXRlKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICBtX3NjcmlwdFN0YXRlVG9JZC5yZW1vdmUoc2NyaXB0U3RhdGUpOwotICAgICAgICBpZHNU
b1JlbW92ZS5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgaWRzVG9SZW1vdmUuYXBwZW5kKGl0
LT5rZXkpOwogICAgIH0KIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaWRzVG9SZW1vdmUu
c2l6ZSgpOyBpKyspCkBAIC0xMzksNyArMTM5LDcgQEAgdm9pZCBJbmplY3RlZFNjcmlwdE1hbmFn
ZXI6OmRpc2NhcmRJbmplY3RlZFNjcmlwdHNGb3IoRE9NV2luZG93KiB3aW5kb3cpCiAgICAgLy8g
Tm93IHJlbW92ZSBzY3JpcHQgc3RhdGVzIHRoYXQgaGF2ZSBpZCBidXQgbm8gaW5qZWN0ZWQgc2Ny
aXB0LgogICAgIFZlY3RvcjxTY3JpcHRTdGF0ZSo+IHNjcmlwdFN0YXRlc1RvUmVtb3ZlOwogICAg
IGZvciAoU2NyaXB0U3RhdGVUb0lkOjppdGVyYXRvciBpdCA9IG1fc2NyaXB0U3RhdGVUb0lkLmJl
Z2luKCk7IGl0ICE9IG1fc2NyaXB0U3RhdGVUb0lkLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIFNj
cmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSA9IGl0LT5maXJzdDsKKyAgICAgICAgU2NyaXB0U3RhdGUq
IHNjcmlwdFN0YXRlID0gaXQtPmtleTsKICAgICAgICAgaWYgKHdpbmRvdyA9PSBkb21XaW5kb3dG
cm9tU2NyaXB0U3RhdGUoc2NyaXB0U3RhdGUpKQogICAgICAgICAgICAgc2NyaXB0U3RhdGVzVG9S
ZW1vdmUuYXBwZW5kKHNjcmlwdFN0YXRlKTsKICAgICB9CkBAIC0xNTUsNyArMTU1LDcgQEAgYm9v
bCBJbmplY3RlZFNjcmlwdE1hbmFnZXI6OmNhbkFjY2Vzc0luc3BlY3RlZFdvcmtlckNvbnRleHQo
U2NyaXB0U3RhdGUqKQogdm9pZCBJbmplY3RlZFNjcmlwdE1hbmFnZXI6OnJlbGVhc2VPYmplY3RH
cm91cChjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwKQogewogICAgIGZvciAoSWRUb0luamVjdGVk
U2NyaXB0TWFwOjppdGVyYXRvciBpdCA9IG1faWRUb0luamVjdGVkU2NyaXB0LmJlZ2luKCk7IGl0
ICE9IG1faWRUb0luamVjdGVkU2NyaXB0LmVuZCgpOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25k
LnJlbGVhc2VPYmplY3RHcm91cChvYmplY3RHcm91cCk7CisgICAgICAgIGl0LT52YWx1ZS5yZWxl
YXNlT2JqZWN0R3JvdXAob2JqZWN0R3JvdXApOwogfQogCiBTdHJpbmcgSW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyOjppbmplY3RlZFNjcmlwdFNvdXJjZSgpCkBAIC0xNzMsOSArMTczLDkgQEAgSW5qZWN0
ZWRTY3JpcHQgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjppbmplY3RlZFNjcmlwdEZvcihTY3JpcHRT
dGF0ZSogaW5zcGVjdGVkU2MKIHsKICAgICBTY3JpcHRTdGF0ZVRvSWQ6Oml0ZXJhdG9yIGl0ID0g
bV9zY3JpcHRTdGF0ZVRvSWQuZmluZChpbnNwZWN0ZWRTY3JpcHRTdGF0ZSk7CiAgICAgaWYgKGl0
ICE9IG1fc2NyaXB0U3RhdGVUb0lkLmVuZCgpKSB7Ci0gICAgICAgIElkVG9JbmplY3RlZFNjcmlw
dE1hcDo6aXRlcmF0b3IgaXQxID0gbV9pZFRvSW5qZWN0ZWRTY3JpcHQuZmluZChpdC0+c2Vjb25k
KTsKKyAgICAgICAgSWRUb0luamVjdGVkU2NyaXB0TWFwOjppdGVyYXRvciBpdDEgPSBtX2lkVG9J
bmplY3RlZFNjcmlwdC5maW5kKGl0LT52YWx1ZSk7CiAgICAgICAgIGlmIChpdDEgIT0gbV9pZFRv
SW5qZWN0ZWRTY3JpcHQuZW5kKCkpCi0gICAgICAgICAgICByZXR1cm4gaXQxLT5zZWNvbmQ7Cisg
ICAgICAgICAgICByZXR1cm4gaXQxLT52YWx1ZTsKICAgICB9CiAKICAgICBpZiAoIW1faW5zcGVj
dGVkU3RhdGVBY2Nlc3NDaGVjayhpbnNwZWN0ZWRTY3JpcHRTdGF0ZSkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcAppbmRleCBiYmU4OGQyYzBmZTdi
MzliOWYyNjQwMmQ3NzQ3MmE1YWM3ZTYyYThjLi41Y2Q5YzYwYzk2OWE2MTU3ZjE0MjRkOGJmM2Rj
YzM1MTIyZThjMDM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQ1NTQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JD
U1NBZ2VudC5jcHAKQEAgLTE4OCwxMCArMTg4LDEwIEBAIGlubGluZSB2b2lkIFNlbGVjdG9yUHJv
ZmlsZTo6Y29tbWl0U2VsZWN0b3IoYm9vbCBtYXRjaGVkKQogCiAgICAgUnVsZU1hdGNoaW5nU3Rh
dHNNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX3J1bGVNYXRjaGluZ1N0YXRzLmFkZChtYWtlS2V5
KCksIFJ1bGVNYXRjaGluZ1N0YXRzKG1fY3VycmVudE1hdGNoRGF0YSwgbWF0Y2hUaW1lTXMsIDEs
IG1hdGNoZWQgPyAxIDogMCkpOwogICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAg
ICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQudG90YWxUaW1lICs9IG1hdGNoVGltZU1zOwotICAg
ICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZC5oaXRzICs9IDE7CisgICAgICAgIHJlc3VsdC5p
dGVyYXRvci0+dmFsdWUudG90YWxUaW1lICs9IG1hdGNoVGltZU1zOworICAgICAgICByZXN1bHQu
aXRlcmF0b3ItPnZhbHVlLmhpdHMgKz0gMTsKICAgICAgICAgaWYgKG1hdGNoZWQpCi0gICAgICAg
ICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZC5tYXRjaGVzICs9IDE7CisgICAgICAgICAgICBy
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlLm1hdGNoZXMgKz0gMTsKICAgICB9CiB9CiAKQEAgLTIwNCw3
ICsyMDQsNyBAQCBpbmxpbmUgdm9pZCBTZWxlY3RvclByb2ZpbGU6OmNvbW1pdFNlbGVjdG9yVGlt
ZSgpCiAgICAgaWYgKGl0ID09IG1fcnVsZU1hdGNoaW5nU3RhdHMuZW5kKCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGl0LT5zZWNvbmQudG90YWxUaW1lICs9IHByb2Nlc3NpbmdUaW1lTXM7Cisg
ICAgaXQtPnZhbHVlLnRvdGFsVGltZSArPSBwcm9jZXNzaW5nVGltZU1zOwogfQogCiBQYXNzUmVm
UHRyPFR5cGVCdWlsZGVyOjpDU1M6OlNlbGVjdG9yUHJvZmlsZT4gU2VsZWN0b3JQcm9maWxlOjp0
b0luc3BlY3Rvck9iamVjdCgpIGNvbnN0CkBAIC0yMTIsMTIgKzIxMiwxMiBAQCBQYXNzUmVmUHRy
PFR5cGVCdWlsZGVyOjpDU1M6OlNlbGVjdG9yUHJvZmlsZT4gU2VsZWN0b3JQcm9maWxlOjp0b0lu
c3BlY3Rvck9iamVjdAogICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6
OkNTUzo6U2VsZWN0b3JQcm9maWxlRW50cnk+ID4gc2VsZWN0b3JQcm9maWxlRGF0YSA9IFR5cGVC
dWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6Q1NTOjpTZWxlY3RvclByb2ZpbGVFbnRyeT46OmNy
ZWF0ZSgpOwogICAgIGZvciAoUnVsZU1hdGNoaW5nU3RhdHNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV9ydWxlTWF0Y2hpbmdTdGF0cy5iZWdpbigpOyBpdCAhPSBtX3J1bGVNYXRjaGluZ1N0YXRz
LmVuZCgpOyArK2l0KSB7CiAgICAgICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpTZWxlY3Rv
clByb2ZpbGVFbnRyeT4gZW50cnkgPSBUeXBlQnVpbGRlcjo6Q1NTOjpTZWxlY3RvclByb2ZpbGVF
bnRyeTo6Y3JlYXRlKCkKLSAgICAgICAgICAgIC5zZXRTZWxlY3RvcihpdC0+c2Vjb25kLnNlbGVj
dG9yKQotICAgICAgICAgICAgLnNldFVybChpdC0+c2Vjb25kLnVybCkKLSAgICAgICAgICAgIC5z
ZXRMaW5lTnVtYmVyKGl0LT5zZWNvbmQubGluZU51bWJlcikKLSAgICAgICAgICAgIC5zZXRUaW1l
KGl0LT5zZWNvbmQudG90YWxUaW1lKQotICAgICAgICAgICAgLnNldEhpdENvdW50KGl0LT5zZWNv
bmQuaGl0cykKLSAgICAgICAgICAgIC5zZXRNYXRjaENvdW50KGl0LT5zZWNvbmQubWF0Y2hlcyk7
CisgICAgICAgICAgICAuc2V0U2VsZWN0b3IoaXQtPnZhbHVlLnNlbGVjdG9yKQorICAgICAgICAg
ICAgLnNldFVybChpdC0+dmFsdWUudXJsKQorICAgICAgICAgICAgLnNldExpbmVOdW1iZXIoaXQt
PnZhbHVlLmxpbmVOdW1iZXIpCisgICAgICAgICAgICAuc2V0VGltZShpdC0+dmFsdWUudG90YWxU
aW1lKQorICAgICAgICAgICAgLnNldEhpdENvdW50KGl0LT52YWx1ZS5oaXRzKQorICAgICAgICAg
ICAgLnNldE1hdGNoQ291bnQoaXQtPnZhbHVlLm1hdGNoZXMpOwogICAgICAgICBzZWxlY3RvclBy
b2ZpbGVEYXRhLT5hZGRJdGVtKGVudHJ5LnJlbGVhc2UoKSk7CiAgICAgfQogCkBAIC0yNzIsNyAr
MjcyLDcgQEAgdm9pZCBVcGRhdGVSZWdpb25MYXlvdXRUYXNrOjpvblRpbWVyKFRpbWVyPFVwZGF0
ZVJlZ2lvbkxheW91dFRhc2s+KikKICAgICBWZWN0b3I8c3RkOjpwYWlyPFdlYktpdE5hbWVkRmxv
dyosIGludD4gPiBuYW1lZEZsb3dzOwogCiAgICAgZm9yIChIYXNoTWFwPFdlYktpdE5hbWVkRmxv
dyosIGludD46Oml0ZXJhdG9yIGl0ID0gbV9uYW1lZEZsb3dzLmJlZ2luKCksIGVuZCA9IG1fbmFt
ZWRGbG93cy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBuYW1lZEZsb3dzLmFwcGVu
ZChzdGQ6Om1ha2VfcGFpcihpdC0+Zmlyc3QsIGl0LT5zZWNvbmQpKTsKKyAgICAgICAgbmFtZWRG
bG93cy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoaXQtPmtleSwgaXQtPnZhbHVlKSk7CiAKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwLCBzaXplID0gbmFtZWRGbG93cy5zaXplKCk7IGkgPCBzaXplOyAr
K2kpIHsKICAgICAgICAgV2ViS2l0TmFtZWRGbG93KiBuYW1lZEZsb3cgPSBuYW1lZEZsb3dzLmF0
KGkpLmZpcnN0OwpAQCAtNjYzLDcgKzY2Myw3IEBAIGJvb2wgSW5zcGVjdG9yQ1NTQWdlbnQ6OmZv
cmNlUHNldWRvU3RhdGUoRWxlbWVudCogZWxlbWVudCwgQ1NTU2VsZWN0b3I6OlBzZXVkb1R5CiAg
ICAgaWYgKGl0ID09IG1fbm9kZUlkVG9Gb3JjZWRQc2V1ZG9TdGF0ZS5lbmQoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgdW5zaWduZWQgZm9yY2VkUHNldWRvU3RhdGUgPSBpdC0+c2Vj
b25kOworICAgIHVuc2lnbmVkIGZvcmNlZFBzZXVkb1N0YXRlID0gaXQtPnZhbHVlOwogICAgIHN3
aXRjaCAocHNldWRvVHlwZSkgewogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0FjdGl2ZToK
ICAgICAgICAgcmV0dXJuIGZvcmNlZFBzZXVkb1N0YXRlICYgUHNldWRvQWN0aXZlOwpAQCAtOTA0
LDcgKzkwNCw3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmZvcmNlUHNldWRvU3RhdGUoRXJy
b3JTdHJpbmcqIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBjCiAKICAgICB1bnNpZ25lZCBmb3Jj
ZWRQc2V1ZG9TdGF0ZSA9IGNvbXB1dGVQc2V1ZG9DbGFzc01hc2soZm9yY2VkUHNldWRvQ2xhc3Nl
cy5nZXQoKSk7CiAgICAgTm9kZUlkVG9Gb3JjZWRQc2V1ZG9TdGF0ZTo6aXRlcmF0b3IgaXQgPSBt
X25vZGVJZFRvRm9yY2VkUHNldWRvU3RhdGUuZmluZChub2RlSWQpOwotICAgIHVuc2lnbmVkIGN1
cnJlbnRGb3JjZWRQc2V1ZG9TdGF0ZSA9IGl0ID09IG1fbm9kZUlkVG9Gb3JjZWRQc2V1ZG9TdGF0
ZS5lbmQoKSA/IDAgOiBpdC0+c2Vjb25kOworICAgIHVuc2lnbmVkIGN1cnJlbnRGb3JjZWRQc2V1
ZG9TdGF0ZSA9IGl0ID09IG1fbm9kZUlkVG9Gb3JjZWRQc2V1ZG9TdGF0ZS5lbmQoKSA/IDAgOiBp
dC0+dmFsdWU7CiAgICAgYm9vbCBuZWVkU3R5bGVSZWNhbGMgPSBmb3JjZWRQc2V1ZG9TdGF0ZSAh
PSBjdXJyZW50Rm9yY2VkUHNldWRvU3RhdGU7CiAgICAgaWYgKCFuZWVkU3R5bGVSZWNhbGMpCiAg
ICAgICAgIHJldHVybjsKQEAgLTk5NSw3ICs5OTUsNyBAQCBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9y
SW5saW5lU3R5bGUqIEluc3BlY3RvckNTU0FnZW50Ojphc0luc3BlY3RvclN0eWxlU2hlZXQoRWxl
bQogICAgICAgICByZXR1cm4gaW5zcGVjdG9yU3R5bGVTaGVldC5nZXQoKTsKICAgICB9CiAKLSAg
ICByZXR1cm4gaXQtPnNlY29uZC5nZXQoKTsKKyAgICByZXR1cm4gaXQtPnZhbHVlLmdldCgpOwog
fQogCiBFbGVtZW50KiBJbnNwZWN0b3JDU1NBZ2VudDo6ZWxlbWVudEZvcklkKEVycm9yU3RyaW5n
KiBlcnJvclN0cmluZywgaW50IG5vZGVJZCkKQEAgLTEwOTgsNyArMTA5OCw3IEBAIEluc3BlY3Rv
clN0eWxlU2hlZXQqIEluc3BlY3RvckNTU0FnZW50Ojphc3NlcnRTdHlsZVNoZWV0Rm9ySWQoRXJy
b3JTdHJpbmcqIGVycm9yCiAgICAgICAgICplcnJvclN0cmluZyA9ICJObyBzdHlsZSBzaGVldCB3
aXRoIGdpdmVuIGlkIGZvdW5kIjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIHJldHVy
biBpdC0+c2Vjb25kLmdldCgpOworICAgIHJldHVybiBpdC0+dmFsdWUuZ2V0KCk7CiB9CiAKIFR5
cGVCdWlsZGVyOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46OkVudW0gSW5zcGVjdG9yQ1NTQWdlbnQ6
OmRldGVjdE9yaWdpbihDU1NTdHlsZVNoZWV0KiBwYWdlU3R5bGVTaGVldCwgRG9jdW1lbnQqIG93
bmVyRG9jdW1lbnQpCkBAIC0xMjY2LDcgKzEyNjYsNyBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50
OjpkaWRSZW1vdmVET01Ob2RlKE5vZGUqIG5vZGUpCiAgICAgaWYgKGl0ID09IG1fbm9kZVRvSW5z
cGVjdG9yU3R5bGVTaGVldC5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9pZFRvSW5z
cGVjdG9yU3R5bGVTaGVldC5yZW1vdmUoaXQtPnNlY29uZC0+aWQoKSk7CisgICAgbV9pZFRvSW5z
cGVjdG9yU3R5bGVTaGVldC5yZW1vdmUoaXQtPnZhbHVlLT5pZCgpKTsKICAgICBtX25vZGVUb0lu
c3BlY3RvclN0eWxlU2hlZXQucmVtb3ZlKG5vZGUpOwogfQogCkBAIC0xMjc5LDcgKzEyNzksNyBA
QCB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpkaWRNb2RpZnlET01BdHRyKEVsZW1lbnQqIGVsZW1l
bnQpCiAgICAgaWYgKGl0ID09IG1fbm9kZVRvSW5zcGVjdG9yU3R5bGVTaGVldC5lbmQoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgaXQtPnNlY29uZC0+ZGlkTW9kaWZ5RWxlbWVudEF0dHJpYnV0
ZSgpOworICAgIGl0LT52YWx1ZS0+ZGlkTW9kaWZ5RWxlbWVudEF0dHJpYnV0ZSgpOwogfQogCiB2
b2lkIEluc3BlY3RvckNTU0FnZW50OjpzdHlsZVNoZWV0Q2hhbmdlZChJbnNwZWN0b3JTdHlsZVNo
ZWV0KiBzdHlsZVNoZWV0KQpAQCAtMTI5Miw3ICsxMjkyLDcgQEAgdm9pZCBJbnNwZWN0b3JDU1NB
Z2VudDo6cmVzZXRQc2V1ZG9TdGF0ZXMoKQogewogICAgIEhhc2hTZXQ8RG9jdW1lbnQqPiBkb2N1
bWVudHNUb0NoYW5nZTsKICAgICBmb3IgKE5vZGVJZFRvRm9yY2VkUHNldWRvU3RhdGU6Oml0ZXJh
dG9yIGl0ID0gbV9ub2RlSWRUb0ZvcmNlZFBzZXVkb1N0YXRlLmJlZ2luKCksIGVuZCA9IG1fbm9k
ZUlkVG9Gb3JjZWRQc2V1ZG9TdGF0ZS5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAg
IEVsZW1lbnQqIGVsZW1lbnQgPSB0b0VsZW1lbnQobV9kb21BZ2VudC0+bm9kZUZvcklkKGl0LT5m
aXJzdCkpOworICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gdG9FbGVtZW50KG1fZG9tQWdlbnQt
Pm5vZGVGb3JJZChpdC0+a2V5KSk7CiAgICAgICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQtPm93
bmVyRG9jdW1lbnQoKSkKICAgICAgICAgICAgIGRvY3VtZW50c1RvQ2hhbmdlLmFkZChlbGVtZW50
LT5vd25lckRvY3VtZW50KCkpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDb25zb2xlQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNvbnNvbGVBZ2VudC5jcHAKaW5kZXggZjU0NGIxNTg5Zjk2ZWQyZmI1Y2Nj
YTY2ZDNiNTljZWEyZTIzNTI3ZC4uOWU2MjJjMDRjZmRkNjdiODliYzI1ODZkYmE2M2U5MGExMjUx
M2Q5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnNv
bGVBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnNv
bGVBZ2VudC5jcHAKQEAgLTE5NSw3ICsxOTUsNyBAQCB2b2lkIEluc3BlY3RvckNvbnNvbGVBZ2Vu
dDo6c3RvcFRpbWluZyhjb25zdCBTdHJpbmcmIHRpdGxlLCBQYXNzUmVmUHRyPFNjcmlwdENhbAog
ICAgIGlmIChpdCA9PSBtX3RpbWVzLmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBkb3Vi
bGUgc3RhcnRUaW1lID0gaXQtPnNlY29uZDsKKyAgICBkb3VibGUgc3RhcnRUaW1lID0gaXQtPnZh
bHVlOwogICAgIG1fdGltZXMucmVtb3ZlKGl0KTsKIAogICAgIGRvdWJsZSBlbGFwc2VkID0gbW9u
b3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkgLSBzdGFydFRpbWU7CkBAIC0yMTgsNyArMjE4LDcg
QEAgdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmNvdW50KFBhc3NSZWZQdHI8U2NyaXB0QXJn
dW1lbnRzPiBhcmd1bWVudHMsIFBhc3NSZWYKICAgICBpZiAoaXQgPT0gbV9jb3VudHMuZW5kKCkp
CiAgICAgICAgIGNvdW50ID0gMTsKICAgICBlbHNlIHsKLSAgICAgICAgY291bnQgPSBpdC0+c2Vj
b25kICsgMTsKKyAgICAgICAgY291bnQgPSBpdC0+dmFsdWUgKyAxOwogICAgICAgICBtX2NvdW50
cy5yZW1vdmUoaXQpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckRPTUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JET01BZ2VudC5jcHAKaW5kZXggYTUzM2U1MjUzOGNiMzkwNzdlMjk0NWRjYjA2ZDllYTJm
MjE0NmUzMC4uY2U5OTQ5MDYyZGM5ODJlODkzODk3NWZkYTU4ZDNmYzU4N2UzMmIzMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCkBAIC00NzAs
NyArNDcwLDcgQEAgTm9kZSogSW5zcGVjdG9yRE9NQWdlbnQ6Om5vZGVGb3JJZChpbnQgaWQpCiAK
ICAgICBIYXNoTWFwPGludCwgTm9kZSo+OjppdGVyYXRvciBpdCA9IG1faWRUb05vZGUuZmluZChp
ZCk7CiAgICAgaWYgKGl0ICE9IG1faWRUb05vZGUuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdC0+
c2Vjb25kOworICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwogICAgIHJldHVybiAwOwogfQogCkBA
IC05MTYsOSArOTE2LDkgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cGVyZm9ybVNlYXJjaChF
cnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgd2hpdGVzcGFjZVRyaW0KICAgICBTZWFyY2hSZXN1
bHRzOjppdGVyYXRvciByZXN1bHRzSXQgPSBtX3NlYXJjaFJlc3VsdHMuYWRkKCpzZWFyY2hJZCwg
VmVjdG9yPFJlZlB0cjxOb2RlPiA+KCkpLml0ZXJhdG9yOwogCiAgICAgZm9yIChMaXN0SGFzaFNl
dDxOb2RlKj46Oml0ZXJhdG9yIGl0ID0gcmVzdWx0Q29sbGVjdG9yLmJlZ2luKCk7IGl0ICE9IHJl
c3VsdENvbGxlY3Rvci5lbmQoKTsgKytpdCkKLSAgICAgICAgcmVzdWx0c0l0LT5zZWNvbmQuYXBw
ZW5kKCppdCk7CisgICAgICAgIHJlc3VsdHNJdC0+dmFsdWUuYXBwZW5kKCppdCk7CiAKLSAgICAq
cmVzdWx0Q291bnQgPSByZXN1bHRzSXQtPnNlY29uZC5zaXplKCk7CisgICAgKnJlc3VsdENvdW50
ID0gcmVzdWx0c0l0LT52YWx1ZS5zaXplKCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6
OmdldFNlYXJjaFJlc3VsdHMoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcm
IHNlYXJjaElkLCBpbnQgZnJvbUluZGV4LCBpbnQgdG9JbmRleCwgUmVmUHRyPFR5cGVCdWlsZGVy
OjpBcnJheTxpbnQ+ID4mIG5vZGVJZHMpCkBAIC05MjksNyArOTI5LDcgQEAgdm9pZCBJbnNwZWN0
b3JET01BZ2VudDo6Z2V0U2VhcmNoUmVzdWx0cyhFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNv
bnN0IFN0cmluZyYKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGludCBzaXplID0gaXQt
PnNlY29uZC5zaXplKCk7CisgICAgaW50IHNpemUgPSBpdC0+dmFsdWUuc2l6ZSgpOwogICAgIGlm
IChmcm9tSW5kZXggPCAwIHx8IHRvSW5kZXggPiBzaXplIHx8IGZyb21JbmRleCA+PSB0b0luZGV4
KSB7CiAgICAgICAgICplcnJvclN0cmluZyA9ICJJbnZhbGlkIHNlYXJjaCByZXN1bHQgcmFuZ2Ui
OwogICAgICAgICByZXR1cm47CkBAIC05MzcsNyArOTM3LDcgQEAgdm9pZCBJbnNwZWN0b3JET01B
Z2VudDo6Z2V0U2VhcmNoUmVzdWx0cyhFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFN0
cmluZyYKIAogICAgIG5vZGVJZHMgPSBUeXBlQnVpbGRlcjo6QXJyYXk8aW50Pjo6Y3JlYXRlKCk7
CiAgICAgZm9yIChpbnQgaSA9IGZyb21JbmRleDsgaSA8IHRvSW5kZXg7ICsraSkKLSAgICAgICAg
bm9kZUlkcy0+YWRkSXRlbShwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKChpdC0+c2Vjb25kKVtpXS5n
ZXQoKSkpOworICAgICAgICBub2RlSWRzLT5hZGRJdGVtKHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQo
KGl0LT52YWx1ZSlbaV0uZ2V0KCkpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6ZGlz
Y2FyZFNlYXJjaFJlc3VsdHMoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIHNlYXJjaElkKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTURlYnVnZ2Vy
QWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTURlYnVnZ2Vy
QWdlbnQuY3BwCmluZGV4IDgwMzIyOTVkODk1ZTlkMjJhMmY4MGM1OThkOWU0NGQyNzQ3NGEwNTYu
LmM0ZmNiODJiN2I2ZmEwZTJiOWE1M2JkNGZhYWM2MjM2MjlkMGJlNWUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudC5jcHAK
QEAgLTQwMiw4ICs0MDIsOCBAQCB2b2lkIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OndpbGxT
ZW5kWE1MSHR0cFJlcXVlc3QoY29uc3QgU3RyaW5nJiB1cmwpCiAgICAgZWxzZSB7CiAgICAgICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHhockJyZWFrcG9pbnRzID0gbV9zdGF0ZS0+Z2V0T2Jq
ZWN0KERPTURlYnVnZ2VyQWdlbnRTdGF0ZTo6eGhyQnJlYWtwb2ludHMpOwogICAgICAgICBmb3Ig
KEluc3BlY3Rvck9iamVjdDo6aXRlcmF0b3IgaXQgPSB4aHJCcmVha3BvaW50cy0+YmVnaW4oKTsg
aXQgIT0geGhyQnJlYWtwb2ludHMtPmVuZCgpOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAodXJs
LmNvbnRhaW5zKGl0LT5maXJzdCkpIHsKLSAgICAgICAgICAgICAgICBicmVha3BvaW50VVJMID0g
aXQtPmZpcnN0OworICAgICAgICAgICAgaWYgKHVybC5jb250YWlucyhpdC0+a2V5KSkgeworICAg
ICAgICAgICAgICAgIGJyZWFrcG9pbnRVUkwgPSBpdC0+a2V5OwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuY3BwCmluZGV4IDkwYTBhOWU2MDkw
ZTBjMmMzOWQ3ODY5ZjQwMmQ0MzJiM2EyYmY2ZjAuLmMzMmVhMjk4NzZkZDllZTE3YmMyZTYxZTBk
N2U2ODcwNmExMjUzNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JET01TdG9yYWdlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JET01TdG9yYWdlQWdlbnQuY3BwCkBAIC03Nyw3ICs3Nyw3IEBAIHZvaWQgSW5zcGVj
dG9yRE9NU3RvcmFnZUFnZW50OjpjbGVhckZyb250ZW5kKCkKIHsKICAgICBET01TdG9yYWdlUmVz
b3VyY2VzTWFwOjppdGVyYXRvciBkb21TdG9yYWdlRW5kID0gbV9yZXNvdXJjZXMuZW5kKCk7CiAg
ICAgZm9yIChET01TdG9yYWdlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2Vz
LmJlZ2luKCk7IGl0ICE9IGRvbVN0b3JhZ2VFbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQt
PnVuYmluZCgpOworICAgICAgICBpdC0+dmFsdWUtPnVuYmluZCgpOwogICAgIG1fZnJvbnRlbmQg
PSAwOwogICAgIGRpc2FibGUoMCk7CiB9CkBAIC05Niw3ICs5Niw3IEBAIHZvaWQgSW5zcGVjdG9y
RE9NU3RvcmFnZUFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcqKQogCiAgICAgRE9NU3RvcmFnZVJl
c291cmNlc01hcDo6aXRlcmF0b3IgcmVzb3VyY2VzRW5kID0gbV9yZXNvdXJjZXMuZW5kKCk7CiAg
ICAgZm9yIChET01TdG9yYWdlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2Vz
LmJlZ2luKCk7IGl0ICE9IHJlc291cmNlc0VuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+
YmluZChtX2Zyb250ZW5kKTsKKyAgICAgICAgaXQtPnZhbHVlLT5iaW5kKG1fZnJvbnRlbmQpOwog
fQogCiB2b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyop
CkBAIC0xNjUsOCArMTY1LDggQEAgU3RyaW5nIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6c3Rv
cmFnZUlkKFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbiwgYm9vbAogICAgIEFTU0VSVChz
ZWN1cml0eU9yaWdpbik7CiAgICAgRE9NU3RvcmFnZVJlc291cmNlc01hcDo6aXRlcmF0b3IgZG9t
U3RvcmFnZUVuZCA9IG1fcmVzb3VyY2VzLmVuZCgpOwogICAgIGZvciAoRE9NU3RvcmFnZVJlc291
cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSBkb21TdG9y
YWdlRW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kLT5pc1NhbWVPcmlnaW5BbmRU
eXBlKHNlY3VyaXR5T3JpZ2luLCBpc0xvY2FsU3RvcmFnZSkpCi0gICAgICAgICAgICByZXR1cm4g
aXQtPmZpcnN0OworICAgICAgICBpZiAoaXQtPnZhbHVlLT5pc1NhbWVPcmlnaW5BbmRUeXBlKHNl
Y3VyaXR5T3JpZ2luLCBpc0xvY2FsU3RvcmFnZSkpCisgICAgICAgICAgICByZXR1cm4gaXQtPmtl
eTsKICAgICB9CiAgICAgcmV0dXJuIFN0cmluZygpOwogfQpAQCAtMTc2LDE0ICsxNzYsMTQgQEAg
SW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlKiBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6Omdl
dERPTVN0b3JhZ2VSZXNvdXJjZUZvckkKICAgICBET01TdG9yYWdlUmVzb3VyY2VzTWFwOjppdGVy
YXRvciBpdCA9IG1fcmVzb3VyY2VzLmZpbmQoc3RvcmFnZUlkKTsKICAgICBpZiAoaXQgPT0gbV9y
ZXNvdXJjZXMuZW5kKCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBpdC0+c2Vjb25k
LmdldCgpOworICAgIHJldHVybiBpdC0+dmFsdWUuZ2V0KCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9y
RE9NU3RvcmFnZUFnZW50OjpkaWRVc2VET01TdG9yYWdlKFN0b3JhZ2VBcmVhKiBzdG9yYWdlQXJl
YSwgYm9vbCBpc0xvY2FsU3RvcmFnZSwgRnJhbWUqIGZyYW1lKQogewogICAgIERPTVN0b3JhZ2VS
ZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGRvbVN0b3JhZ2VFbmQgPSBtX3Jlc291cmNlcy5lbmQoKTsK
ICAgICBmb3IgKERPTVN0b3JhZ2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNvdXJj
ZXMuYmVnaW4oKTsgaXQgIT0gZG9tU3RvcmFnZUVuZDsgKytpdCkgewotICAgICAgICBpZiAoaXQt
PnNlY29uZC0+aXNTYW1lT3JpZ2luQW5kVHlwZShmcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlP
cmlnaW4oKSwgaXNMb2NhbFN0b3JhZ2UpKQorICAgICAgICBpZiAoaXQtPnZhbHVlLT5pc1NhbWVP
cmlnaW5BbmRUeXBlKGZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLCBpc0xvY2Fs
U3RvcmFnZSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0yMTgsNyArMjE4LDcg
QEAgc2l6ZV90IEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6bWVtb3J5Qnl0ZXNVc2VkQnlTdG9y
YWdlQ2FjaGUoKSBjb25zdAogewogICAgIHNpemVfdCBzaXplID0gMDsKICAgICBmb3IgKERPTVN0
b3JhZ2VSZXNvdXJjZXNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMuYmVnaW4o
KTsgaXQgIT0gbV9yZXNvdXJjZXMuZW5kKCk7ICsraXQpCi0gICAgICAgIHNpemUgKz0gaXQtPnNl
Y29uZC0+c3RvcmFnZUFyZWEoKS0+bWVtb3J5Qnl0ZXNVc2VkQnlDYWNoZSgpOworICAgICAgICBz
aXplICs9IGl0LT52YWx1ZS0+c3RvcmFnZUFyZWEoKS0+bWVtb3J5Qnl0ZXNVc2VkQnlDYWNoZSgp
OwogICAgIHJldHVybiBzaXplOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5jcHAKaW5kZXggMTA5OWM0MDU5Y2EzZDc0NTIxYTZl
M2QxYzZmMzUwMTMxYjRjZmI2Yy4uMGMyMGEzYzdjZTdiNmU3MTMxNDU1YTU5Njc4MmEyM2QxYmJh
ZTRlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFi
YXNlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRh
YmFzZUFnZW50LmNwcApAQCAtMjQ1LDcgKzI0NSw3IEBAIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VB
Z2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nKikKIAogICAgIERhdGFiYXNlUmVzb3VyY2VzTWFwOjpp
dGVyYXRvciBkYXRhYmFzZXNFbmQgPSBtX3Jlc291cmNlcy5lbmQoKTsKICAgICBmb3IgKERhdGFi
YXNlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9
IGRhdGFiYXNlc0VuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+YmluZChtX2Zyb250ZW5k
KTsKKyAgICAgICAgaXQtPnZhbHVlLT5iaW5kKG1fZnJvbnRlbmQpOwogfQogCiB2b2lkIEluc3Bl
Y3RvckRhdGFiYXNlQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcqKQpAQCAtMzAzLDggKzMwMyw4
IEBAIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6ZXhlY3V0ZVNRTChFcnJvclN0cmluZyos
IGNvbnN0IFN0cmluZyYgZGF0YWJhc2VJZCwKIFN0cmluZyBJbnNwZWN0b3JEYXRhYmFzZUFnZW50
OjpkYXRhYmFzZUlkKERhdGFiYXNlKiBkYXRhYmFzZSkKIHsKICAgICBmb3IgKERhdGFiYXNlUmVz
b3VyY2VzTWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IG1fcmVz
b3VyY2VzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kLT5kYXRhYmFzZSgp
ID09IGRhdGFiYXNlKQotICAgICAgICAgICAgcmV0dXJuIGl0LT5maXJzdDsKKyAgICAgICAgaWYg
KGl0LT52YWx1ZS0+ZGF0YWJhc2UoKSA9PSBkYXRhYmFzZSkKKyAgICAgICAgICAgIHJldHVybiBp
dC0+a2V5OwogICAgIH0KICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CkBAIC0zMTIsOCArMzEyLDgg
QEAgU3RyaW5nIEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmRhdGFiYXNlSWQoRGF0YWJhc2UqIGRh
dGFiYXNlKQogSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZSogSW5zcGVjdG9yRGF0YWJhc2VBZ2Vu
dDo6ZmluZEJ5RmlsZU5hbWUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSkKIHsKICAgICBmb3IgKERh
dGFiYXNlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7IGl0
ICE9IG1fcmVzb3VyY2VzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kLT5k
YXRhYmFzZSgpLT5maWxlTmFtZSgpID09IGZpbGVOYW1lKQotICAgICAgICAgICAgcmV0dXJuIGl0
LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIGlmIChpdC0+dmFsdWUtPmRhdGFiYXNlKCktPmZpbGVO
YW1lKCkgPT0gZmlsZU5hbWUpCisgICAgICAgICAgICByZXR1cm4gaXQtPnZhbHVlLmdldCgpOwog
ICAgIH0KICAgICByZXR1cm4gMDsKIH0KQEAgLTMyMyw3ICszMjMsNyBAQCBEYXRhYmFzZSogSW5z
cGVjdG9yRGF0YWJhc2VBZ2VudDo6ZGF0YWJhc2VGb3JJZChjb25zdCBTdHJpbmcmIGRhdGFiYXNl
SWQpCiAgICAgRGF0YWJhc2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMu
ZmluZChkYXRhYmFzZUlkKTsKICAgICBpZiAoaXQgPT0gbV9yZXNvdXJjZXMuZW5kKCkpCiAgICAg
ICAgIHJldHVybiAwOwotICAgIHJldHVybiBpdC0+c2Vjb25kLT5kYXRhYmFzZSgpOworICAgIHJl
dHVybiBpdC0+dmFsdWUtPmRhdGFiYXNlKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50
LmNwcAppbmRleCBjZjMzYzU5MGIzY2RiZGUyNTQ5NWZkNTU3ODdmZjRhNWUwMGIwOWE5Li5hNzdj
MDZmYjVkYzIwNTA5M2Q1Y2FhYWNlZTdkYzgyYTQ5Zjc0ZWY5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCkBAIC0yNDgsOSAr
MjQ4LDkgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRCcmVha3BvaW50QnlVcmwo
RXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBpbnQgbGkKIAogICAgIFNjcmlwdEJyZWFrcG9pbnQg
YnJlYWtwb2ludChsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIGNvbmRpdGlvbik7CiAgICAgZm9y
IChTY3JpcHRzTWFwOjppdGVyYXRvciBpdCA9IG1fc2NyaXB0cy5iZWdpbigpOyBpdCAhPSBtX3Nj
cmlwdHMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgaWYgKCFtYXRjaGVzKGl0LT5zZWNvbmQudXJs
LCB1cmwsIGlzUmVnZXgpKQorICAgICAgICBpZiAoIW1hdGNoZXMoaXQtPnZhbHVlLnVybCwgdXJs
LCBpc1JlZ2V4KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBSZWZQdHI8VHlwZUJ1
aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj4gbG9jYXRpb24gPSByZXNvbHZlQnJlYWtwb2ludChi
cmVha3BvaW50SWQsIGl0LT5maXJzdCwgYnJlYWtwb2ludCk7CisgICAgICAgIFJlZlB0cjxUeXBl
QnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uPiBsb2NhdGlvbiA9IHJlc29sdmVCcmVha3BvaW50
KGJyZWFrcG9pbnRJZCwgaXQtPmtleSwgYnJlYWtwb2ludCk7CiAgICAgICAgIGlmIChsb2NhdGlv
bikKICAgICAgICAgICAgIGxvY2F0aW9ucy0+YWRkSXRlbShsb2NhdGlvbik7CiAgICAgfQpAQCAt
MzAyLDggKzMwMiw4IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6cmVtb3ZlQnJlYWtw
b2ludChFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgYnJlYWtwCiAgICAgQnJlYWtwb2ludElk
VG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNNYXA6Oml0ZXJhdG9yIGRlYnVnU2VydmVyQnJlYWtw
b2ludElkc0l0ZXJhdG9yID0gbV9icmVha3BvaW50SWRUb0RlYnVnU2VydmVyQnJlYWtwb2ludElk
cy5maW5kKGJyZWFrcG9pbnRJZCk7CiAgICAgaWYgKGRlYnVnU2VydmVyQnJlYWtwb2ludElkc0l0
ZXJhdG9yID09IG1fYnJlYWtwb2ludElkVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHMuZW5kKCkp
CiAgICAgICAgIHJldHVybjsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRlYnVnU2VydmVy
QnJlYWtwb2ludElkc0l0ZXJhdG9yLT5zZWNvbmQuc2l6ZSgpOyArK2kpCi0gICAgICAgIHNjcmlw
dERlYnVnU2VydmVyKCkucmVtb3ZlQnJlYWtwb2ludChkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNJ
dGVyYXRvci0+c2Vjb25kW2ldKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRlYnVnU2Vy
dmVyQnJlYWtwb2ludElkc0l0ZXJhdG9yLT52YWx1ZS5zaXplKCk7ICsraSkKKyAgICAgICAgc2Ny
aXB0RGVidWdTZXJ2ZXIoKS5yZW1vdmVCcmVha3BvaW50KGRlYnVnU2VydmVyQnJlYWtwb2ludElk
c0l0ZXJhdG9yLT52YWx1ZVtpXSk7CiAgICAgbV9icmVha3BvaW50SWRUb0RlYnVnU2VydmVyQnJl
YWtwb2ludElkcy5yZW1vdmUoZGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzSXRlcmF0b3IpOwogfQog
CkBAIC0zMzEsNyArMzMxLDcgQEAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6RGVidWdnZXI6Okxv
Y2F0aW9uPiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZXNvbHZlQnJlYWsKICAgICBTY3JpcHRz
TWFwOjppdGVyYXRvciBzY3JpcHRJdGVyYXRvciA9IG1fc2NyaXB0cy5maW5kKHNjcmlwdElkKTsK
ICAgICBpZiAoc2NyaXB0SXRlcmF0b3IgPT0gbV9zY3JpcHRzLmVuZCgpKQogICAgICAgICByZXR1
cm4gMDsKLSAgICBTY3JpcHQmIHNjcmlwdCA9IHNjcmlwdEl0ZXJhdG9yLT5zZWNvbmQ7CisgICAg
U2NyaXB0JiBzY3JpcHQgPSBzY3JpcHRJdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKGJyZWFrcG9p
bnQubGluZU51bWJlciA8IHNjcmlwdC5zdGFydExpbmUgfHwgc2NyaXB0LmVuZExpbmUgPCBicmVh
a3BvaW50LmxpbmVOdW1iZXIpCiAgICAgICAgIHJldHVybiAwOwogCkBAIC0zNDQsNyArMzQ0LDcg
QEAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uPiBJbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50OjpyZXNvbHZlQnJlYWsKICAgICBCcmVha3BvaW50SWRUb0RlYnVnU2VydmVy
QnJlYWtwb2ludElkc01hcDo6aXRlcmF0b3IgZGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzSXRlcmF0
b3IgPSBtX2JyZWFrcG9pbnRJZFRvRGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzLmZpbmQoYnJlYWtw
b2ludElkKTsKICAgICBpZiAoZGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzSXRlcmF0b3IgPT0gbV9i
cmVha3BvaW50SWRUb0RlYnVnU2VydmVyQnJlYWtwb2ludElkcy5lbmQoKSkKICAgICAgICAgZGVi
dWdTZXJ2ZXJCcmVha3BvaW50SWRzSXRlcmF0b3IgPSBtX2JyZWFrcG9pbnRJZFRvRGVidWdTZXJ2
ZXJCcmVha3BvaW50SWRzLnNldChicmVha3BvaW50SWQsIFZlY3RvcjxTdHJpbmc+KCkpLml0ZXJh
dG9yOwotICAgIGRlYnVnU2VydmVyQnJlYWtwb2ludElkc0l0ZXJhdG9yLT5zZWNvbmQuYXBwZW5k
KGRlYnVnU2VydmVyQnJlYWtwb2ludElkKTsKKyAgICBkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNJ
dGVyYXRvci0+dmFsdWUuYXBwZW5kKGRlYnVnU2VydmVyQnJlYWtwb2ludElkKTsKIAogICAgIFJl
ZlB0cjxUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uPiBsb2NhdGlvbiA9IFR5cGVCdWls
ZGVyOjpEZWJ1Z2dlcjo6TG9jYXRpb246OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRTY3JpcHRJZChz
Y3JpcHRJZCkKQEAgLTM3MCw3ICszNzAsNyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OnNlYXJjaEluQ29udGVudChFcnJvclN0cmluZyogZXJyb3IsIGNvbnN0IFN0cmluZyYgcwogCiAg
ICAgU2NyaXB0c01hcDo6aXRlcmF0b3IgaXQgPSBtX3NjcmlwdHMuZmluZChzY3JpcHRJZCk7CiAg
ICAgaWYgKGl0ICE9IG1fc2NyaXB0cy5lbmQoKSkKLSAgICAgICAgcmVzdWx0cyA9IENvbnRlbnRT
ZWFyY2hVdGlsczo6c2VhcmNoSW5UZXh0QnlMaW5lcyhpdC0+c2Vjb25kLnNvdXJjZSwgcXVlcnks
IGNhc2VTZW5zaXRpdmUsIGlzUmVnZXgpOworICAgICAgICByZXN1bHRzID0gQ29udGVudFNlYXJj
aFV0aWxzOjpzZWFyY2hJblRleHRCeUxpbmVzKGl0LT52YWx1ZS5zb3VyY2UsIHF1ZXJ5LCBjYXNl
U2Vuc2l0aXZlLCBpc1JlZ2V4KTsKICAgICBlbHNlCiAgICAgICAgICplcnJvciA9ICJObyBzY3Jp
cHQgZm9yIGlkOiAiICsgc2NyaXB0SWQ7CiB9CkBAIC00MDMsNyArNDAzLDcgQEAgdm9pZCBJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50OjpnZXRTY3JpcHRTb3VyY2UoRXJyb3JTdHJpbmcqIGVycm9yLCBj
b25zdCBTdHJpbmcmIHMKIHsKICAgICBTY3JpcHRzTWFwOjppdGVyYXRvciBpdCA9IG1fc2NyaXB0
cy5maW5kKHNjcmlwdElkKTsKICAgICBpZiAoaXQgIT0gbV9zY3JpcHRzLmVuZCgpKQotICAgICAg
ICAqc2NyaXB0U291cmNlID0gaXQtPnNlY29uZC5zb3VyY2U7CisgICAgICAgICpzY3JpcHRTb3Vy
Y2UgPSBpdC0+dmFsdWUuc291cmNlOwogICAgIGVsc2UKICAgICAgICAgKmVycm9yID0gIk5vIHNj
cmlwdCBmb3IgaWQ6ICIgKyBzY3JpcHRJZDsKIH0KQEAgLTY0NSw3ICs2NDUsNyBAQCB2b2lkIElu
c3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBhcnNlU291cmNlKGNvbnN0IFN0cmluZyYgc2NyaXB0
SWQsIGNvbnN0IFNjcmlwdAogCiAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnJlYWtwb2lu
dHNDb29raWUgPSBtX3N0YXRlLT5nZXRPYmplY3QoRGVidWdnZXJBZ2VudFN0YXRlOjpqYXZhU2Ny
aXB0QnJlYWtwb2ludHMpOwogICAgIGZvciAoSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciBpdCA9
IGJyZWFrcG9pbnRzQ29va2llLT5iZWdpbigpOyBpdCAhPSBicmVha3BvaW50c0Nvb2tpZS0+ZW5k
KCk7ICsraXQpIHsKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnJlYWtwb2ludE9i
amVjdCA9IGl0LT5zZWNvbmQtPmFzT2JqZWN0KCk7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IGJyZWFrcG9pbnRPYmplY3QgPSBpdC0+dmFsdWUtPmFzT2JqZWN0KCk7CiAgICAgICAg
IGJvb2wgaXNSZWdleDsKICAgICAgICAgYnJlYWtwb2ludE9iamVjdC0+Z2V0Qm9vbGVhbigiaXNS
ZWdleCIsICZpc1JlZ2V4KTsKICAgICAgICAgU3RyaW5nIHVybDsKQEAgLTY1Niw5ICs2NTYsOSBA
QCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBhcnNlU291cmNlKGNvbnN0IFN0cmlu
ZyYgc2NyaXB0SWQsIGNvbnN0IFNjcmlwdAogICAgICAgICBicmVha3BvaW50T2JqZWN0LT5nZXRO
dW1iZXIoImxpbmVOdW1iZXIiLCAmYnJlYWtwb2ludC5saW5lTnVtYmVyKTsKICAgICAgICAgYnJl
YWtwb2ludE9iamVjdC0+Z2V0TnVtYmVyKCJjb2x1bW5OdW1iZXIiLCAmYnJlYWtwb2ludC5jb2x1
bW5OdW1iZXIpOwogICAgICAgICBicmVha3BvaW50T2JqZWN0LT5nZXRTdHJpbmcoImNvbmRpdGlv
biIsICZicmVha3BvaW50LmNvbmRpdGlvbik7Ci0gICAgICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6
RGVidWdnZXI6OkxvY2F0aW9uPiBsb2NhdGlvbiA9IHJlc29sdmVCcmVha3BvaW50KGl0LT5maXJz
dCwgc2NyaXB0SWQsIGJyZWFrcG9pbnQpOworICAgICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkRl
YnVnZ2VyOjpMb2NhdGlvbj4gbG9jYXRpb24gPSByZXNvbHZlQnJlYWtwb2ludChpdC0+a2V5LCBz
Y3JpcHRJZCwgYnJlYWtwb2ludCk7CiAgICAgICAgIGlmIChsb2NhdGlvbikKLSAgICAgICAgICAg
IG1fZnJvbnRlbmQtPmJyZWFrcG9pbnRSZXNvbHZlZChpdC0+Zmlyc3QsIGxvY2F0aW9uKTsKKyAg
ICAgICAgICAgIG1fZnJvbnRlbmQtPmJyZWFrcG9pbnRSZXNvbHZlZChpdC0+a2V5LCBsb2NhdGlv
bik7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckluZGV4ZWREQkFnZW50LmNwcAppbmRleCBmMTJiZDBkYWNmOGUzMGFmYjhkZjI1NTg2ZTU5
MTU1YzZkOGQyYzQzLi42YzQyZTY2NmUxZjIyNzE5NjNlYTFjYTg2YjBmYjM5ZjBjYzFmNGZiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdl
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJB
Z2VudC5jcHAKQEAgLTMwNSwxMiArMzA1LDEyIEBAIHB1YmxpYzoKICAgICAgICAgUmVmUHRyPFR5
cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6SW5kZXhlZERCOjpPYmplY3RTdG9yZT4gPiBv
YmplY3RTdG9yZXMgPSBUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkluZGV4ZWREQjo6
T2JqZWN0U3RvcmU+OjpjcmVhdGUoKTsKIAogICAgICAgICBmb3IgKElEQkRhdGFiYXNlTWV0YWRh
dGE6Ok9iamVjdFN0b3JlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGRhdGFiYXNlTWV0YWRhdGEu
b2JqZWN0U3RvcmVzLmJlZ2luKCk7IGl0ICE9IGRhdGFiYXNlTWV0YWRhdGEub2JqZWN0U3RvcmVz
LmVuZCgpOyArK2l0KSB7Ci0gICAgICAgICAgICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRh
JiBvYmplY3RTdG9yZU1ldGFkYXRhID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIGNvbnN0IElE
Qk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlTWV0YWRhdGEgPSBpdC0+dmFsdWU7CiAK
ICAgICAgICAgICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkluZGV4
ZWREQjo6T2JqZWN0U3RvcmVJbmRleD4gPiBpbmRleGVzID0gVHlwZUJ1aWxkZXI6OkFycmF5PFR5
cGVCdWlsZGVyOjpJbmRleGVkREI6Ok9iamVjdFN0b3JlSW5kZXg+OjpjcmVhdGUoKTsKIAogICAg
ICAgICAgICAgZm9yIChJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbmRleE1hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBvYmplY3RTdG9yZU1ldGFkYXRhLmluZGV4ZXMuYmVnaW4oKTsgaXQgIT0gb2Jq
ZWN0U3RvcmVNZXRhZGF0YS5pbmRleGVzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAg
Y29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSA9IGl0LT5zZWNvbmQ7CisgICAg
ICAgICAgICAgICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSA9IGl0LT52
YWx1ZTsKIAogICAgICAgICAgICAgICAgIFJlZlB0cjxPYmplY3RTdG9yZUluZGV4PiBvYmplY3RT
dG9yZUluZGV4ID0gT2JqZWN0U3RvcmVJbmRleDo6Y3JlYXRlKCkKICAgICAgICAgICAgICAgICAg
ICAgLnNldE5hbWUoaW5kZXhNZXRhZGF0YS5uYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3Rvck1lbW9yeUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JNZW1vcnlBZ2VudC5jcHAKaW5kZXggZmIwZTZmMzJlMTlhYzNmOTBh
NzM4MTYxOGE2ZTA5Y2MwNDFlNDE5Ni4uNzJmYjlkODE4NzZkNWYzNjhlM2IyOTgwOGFjMDVjYWNk
OGVmYjJhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck1l
bW9yeUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTWVt
b3J5QWdlbnQuY3BwCkBAIC0yMzQsOCArMjM0LDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAg
UmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6TWVtb3J5OjpOb2RlQ291bnQ+
ID4gY2hpbGRyZW5TdGF0cyA9IFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6TWVtb3J5
OjpOb2RlQ291bnQ+OjpjcmVhdGUoKTsKICAgICAgICAgZm9yIChIYXNoTWFwPFN0cmluZywgaW50
Pjo6aXRlcmF0b3IgaXQgPSBtX25vZGVOYW1lVG9Db3VudC5iZWdpbigpOyBpdCAhPSBtX25vZGVO
YW1lVG9Db3VudC5lbmQoKTsgKytpdCkgewotICAgICAgICAgICAgUmVmUHRyPE5vZGVDb3VudD4g
bm9kZUNvdW50ID0gTm9kZUNvdW50OjpjcmVhdGUoKS5zZXROb2RlTmFtZShpdC0+Zmlyc3QpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLnNldENvdW50KGl0LT5zZWNvbmQpOworICAgICAgICAgICAgUmVmUHRyPE5vZGVDb3VudD4g
bm9kZUNvdW50ID0gTm9kZUNvdW50OjpjcmVhdGUoKS5zZXROb2RlTmFtZShpdC0+a2V5KQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC5zZXRDb3VudChpdC0+dmFsdWUpOwogICAgICAgICAgICAgY2hpbGRyZW5TdGF0cy0+YWRkSXRl
bShub2RlQ291bnQpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBjaGlsZHJlblN0YXRzLnJl
bGVhc2UoKTsKQEAgLTI0NSw4ICsyNDUsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBSZWZQ
dHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpNZW1vcnk6Okxpc3RlbmVyQ291bnQ+
ID4gbGlzdGVuZXJTdGF0cyA9IFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6TWVtb3J5
OjpMaXN0ZW5lckNvdW50Pjo6Y3JlYXRlKCk7CiAgICAgICAgIGZvciAoSGFzaE1hcDxBdG9taWNT
dHJpbmcsIGludD46Oml0ZXJhdG9yIGl0ID0gbV9ldmVudFR5cGVUb0NvdW50LmJlZ2luKCk7IGl0
ICE9IG1fZXZlbnRUeXBlVG9Db3VudC5lbmQoKTsgKytpdCkgewotICAgICAgICAgICAgUmVmUHRy
PExpc3RlbmVyQ291bnQ+IGxpc3RlbmVyQ291bnQgPSBMaXN0ZW5lckNvdW50OjpjcmVhdGUoKS5z
ZXRUeXBlKGl0LT5maXJzdCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0Q291bnQoaXQtPnNlY29uZCk7
CisgICAgICAgICAgICBSZWZQdHI8TGlzdGVuZXJDb3VudD4gbGlzdGVuZXJDb3VudCA9IExpc3Rl
bmVyQ291bnQ6OmNyZWF0ZSgpLnNldFR5cGUoaXQtPmtleSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0
Q291bnQoaXQtPnZhbHVlKTsKICAgICAgICAgICAgIGxpc3RlbmVyU3RhdHMtPmFkZEl0ZW0obGlz
dGVuZXJDb3VudCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGxpc3RlbmVyU3RhdHMucmVs
ZWFzZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBh
Z2VBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50
LmNwcAppbmRleCBlZjM5ZTZmMTM5MzA1Y2ZhYjhkYTgxOGUzYTExZDA5NmYzOGY2YzY0Li4yYjlm
YTNiNTBlOTdmNGMzODc5Nzc0M2I3NTk4OGYwNWFmYTZkMmExIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcApAQCAtNDUyLDcgKzQ1Miw3IEBA
IHN0YXRpYyBWZWN0b3I8Q2FjaGVkUmVzb3VyY2UqPiBjYWNoZWRSZXNvdXJjZXNGb3JGcmFtZShG
cmFtZSogZnJhbWUpCiAgICAgY29uc3QgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OkRvY3VtZW50UmVz
b3VyY2VNYXAmIGFsbFJlc291cmNlcyA9IGZyYW1lLT5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJj
ZUxvYWRlcigpLT5hbGxDYWNoZWRSZXNvdXJjZXMoKTsKICAgICBDYWNoZWRSZXNvdXJjZUxvYWRl
cjo6RG9jdW1lbnRSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gYWxsUmVzb3VyY2Vz
LmVuZCgpOwogICAgIGZvciAoQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OkRvY3VtZW50UmVzb3VyY2VN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYWxsUmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgewotICAgICAgICBDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UgPSBpdC0+c2Vj
b25kLmdldCgpOworICAgICAgICBDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UgPSBpdC0+
dmFsdWUuZ2V0KCk7CiAKICAgICAgICAgc3dpdGNoIChjYWNoZWRSZXNvdXJjZS0+dHlwZSgpKSB7
CiAgICAgICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3VyY2U6CkBAIC03NTYsNyAr
NzU2LDcgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRpZENsZWFyV2luZG93T2JqZWN0SW5X
b3JsZChGcmFtZSogZnJhbWUsIERPTVdyYXBwZXJXb3IKICAgICAgICAgSW5zcGVjdG9yT2JqZWN0
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBzY3JpcHRzLT5lbmQoKTsKICAgICAgICAgZm9yIChJbnNw
ZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gc2NyaXB0cy0+YmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBTdHJpbmcgc2NyaXB0VGV4dDsKLSAgICAgICAgICAg
IGlmIChpdC0+c2Vjb25kLT5hc1N0cmluZygmc2NyaXB0VGV4dCkpCisgICAgICAgICAgICBpZiAo
aXQtPnZhbHVlLT5hc1N0cmluZygmc2NyaXB0VGV4dCkpCiAgICAgICAgICAgICAgICAgbV9pbmpl
Y3RlZFNjcmlwdE1hbmFnZXItPmluamVjdFNjcmlwdChzY3JpcHRUZXh0LCBtYWluV29ybGRTY3Jp
cHRTdGF0ZShmcmFtZSkpOwogICAgICAgICB9CiAgICAgfQpAQCAtNzg4LDggKzc4OCw4IEBAIHZv
aWQgSW5zcGVjdG9yUGFnZUFnZW50OjpmcmFtZURldGFjaGVkKEZyYW1lKiBmcmFtZSkKIHsKICAg
ICBIYXNoTWFwPEZyYW1lKiwgU3RyaW5nPjo6aXRlcmF0b3IgaXRlcmF0b3IgPSBtX2ZyYW1lVG9J
ZGVudGlmaWVyLmZpbmQoZnJhbWUpOwogICAgIGlmIChpdGVyYXRvciAhPSBtX2ZyYW1lVG9JZGVu
dGlmaWVyLmVuZCgpKSB7Ci0gICAgICAgIG1fZnJvbnRlbmQtPmZyYW1lRGV0YWNoZWQoaXRlcmF0
b3ItPnNlY29uZCk7Ci0gICAgICAgIG1faWRlbnRpZmllclRvRnJhbWUucmVtb3ZlKGl0ZXJhdG9y
LT5zZWNvbmQpOworICAgICAgICBtX2Zyb250ZW5kLT5mcmFtZURldGFjaGVkKGl0ZXJhdG9yLT52
YWx1ZSk7CisgICAgICAgIG1faWRlbnRpZmllclRvRnJhbWUucmVtb3ZlKGl0ZXJhdG9yLT52YWx1
ZSk7CiAgICAgICAgIG1fZnJhbWVUb0lkZW50aWZpZXIucmVtb3ZlKGl0ZXJhdG9yKTsKICAgICB9
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmls
ZXJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJB
Z2VudC5jcHAKaW5kZXggOWM4NjRjNWRkYmM0MzUxY2M5NTY1NTUwODUxMTQyOGI0ZGI5YjU3Ni4u
NjRiMzYyZThjYjMwNmQwOGYyNjg5YTI4YjJlMmFiZGMyMGQzOGUwYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcApAQCAtMjU2
LDEwICsyNTYsMTAgQEAgdm9pZCBJbnNwZWN0b3JQcm9maWxlckFnZW50OjpnZXRQcm9maWxlSGVh
ZGVycyhFcnJvclN0cmluZyosIFJlZlB0cjxUeXBlQnVpbGRlcjoKIAogICAgIFByb2ZpbGVzTWFw
OjppdGVyYXRvciBwcm9maWxlc0VuZCA9IG1fcHJvZmlsZXMuZW5kKCk7CiAgICAgZm9yIChQcm9m
aWxlc01hcDo6aXRlcmF0b3IgaXQgPSBtX3Byb2ZpbGVzLmJlZ2luKCk7IGl0ICE9IHByb2ZpbGVz
RW5kOyArK2l0KQotICAgICAgICBoZWFkZXJzLT5hZGRJdGVtKGNyZWF0ZVByb2ZpbGVIZWFkZXIo
Kml0LT5zZWNvbmQpKTsKKyAgICAgICAgaGVhZGVycy0+YWRkSXRlbShjcmVhdGVQcm9maWxlSGVh
ZGVyKCppdC0+dmFsdWUpKTsKICAgICBIZWFwU25hcHNob3RzTWFwOjppdGVyYXRvciBzbmFwc2hv
dHNFbmQgPSBtX3NuYXBzaG90cy5lbmQoKTsKICAgICBmb3IgKEhlYXBTbmFwc2hvdHNNYXA6Oml0
ZXJhdG9yIGl0ID0gbV9zbmFwc2hvdHMuYmVnaW4oKTsgaXQgIT0gc25hcHNob3RzRW5kOyArK2l0
KQotICAgICAgICBoZWFkZXJzLT5hZGRJdGVtKGNyZWF0ZVNuYXBzaG90SGVhZGVyKCppdC0+c2Vj
b25kKSk7CisgICAgICAgIGhlYWRlcnMtPmFkZEl0ZW0oY3JlYXRlU25hcHNob3RIZWFkZXIoKml0
LT52YWx1ZSkpOwogfQogCiBuYW1lc3BhY2UgewpAQCAtMjg3LDE2ICsyODcsMTYgQEAgdm9pZCBJ
bnNwZWN0b3JQcm9maWxlckFnZW50OjpnZXRQcm9maWxlKEVycm9yU3RyaW5nKiBlcnJvclN0cmlu
ZywgY29uc3QgU3RyaW5nJgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAg
IHByb2ZpbGVPYmplY3QgPSBUeXBlQnVpbGRlcjo6UHJvZmlsZXI6OlByb2ZpbGU6OmNyZWF0ZSgp
OwotICAgICAgICBwcm9maWxlT2JqZWN0LT5zZXRIZWFkKGl0LT5zZWNvbmQtPmJ1aWxkSW5zcGVj
dG9yT2JqZWN0Rm9ySGVhZCgpKTsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQtPmJvdHRvbVVwSGVh
ZCgpKQotICAgICAgICAgICAgcHJvZmlsZU9iamVjdC0+c2V0Qm90dG9tVXBIZWFkKGl0LT5zZWNv
bmQtPmJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9yQm90dG9tVXBIZWFkKCkpOworICAgICAgICBwcm9m
aWxlT2JqZWN0LT5zZXRIZWFkKGl0LT52YWx1ZS0+YnVpbGRJbnNwZWN0b3JPYmplY3RGb3JIZWFk
KCkpOworICAgICAgICBpZiAoaXQtPnZhbHVlLT5ib3R0b21VcEhlYWQoKSkKKyAgICAgICAgICAg
IHByb2ZpbGVPYmplY3QtPnNldEJvdHRvbVVwSGVhZChpdC0+dmFsdWUtPmJ1aWxkSW5zcGVjdG9y
T2JqZWN0Rm9yQm90dG9tVXBIZWFkKCkpOwogICAgIH0gZWxzZSBpZiAodHlwZSA9PSBIZWFwUHJv
ZmlsZVR5cGUpIHsKICAgICAgICAgSGVhcFNuYXBzaG90c01hcDo6aXRlcmF0b3IgaXQgPSBtX3Nu
YXBzaG90cy5maW5kKHVpZCk7CiAgICAgICAgIGlmIChpdCA9PSBtX3NuYXBzaG90cy5lbmQoKSkg
ewogICAgICAgICAgICAgKmVycm9yU3RyaW5nID0gIlByb2ZpbGUgd2Fzbid0IGZvdW5kIjsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBSZWZQdHI8U2NyaXB0SGVhcFNu
YXBzaG90PiBzbmFwc2hvdCA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFJlZlB0cjxTY3JpcHRIZWFw
U25hcHNob3Q+IHNuYXBzaG90ID0gaXQtPnZhbHVlOwogICAgICAgICBwcm9maWxlT2JqZWN0ID0g
VHlwZUJ1aWxkZXI6OlByb2ZpbGVyOjpQcm9maWxlOjpjcmVhdGUoKTsKICAgICAgICAgaWYgKG1f
ZnJvbnRlbmQpIHsKICAgICAgICAgICAgIE91dHB1dFN0cmVhbSBzdHJlYW0obV9mcm9udGVuZCwg
dWlkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNv
dXJjZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJj
ZUFnZW50LmNwcAppbmRleCA3ZGVmYjM1OTVkY2IxYWRhOTI1MmE3ZWI2MjA4MzQ1NjY1OGFiNGM0
Li44ZGU0ZGNhYmUzM2JmNjJlYTNjZTAzNTQzMmY0OTBhNGZjYTZkYTk5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuY3BwCkBAIC0x
MDUsNyArMTA1LDcgQEAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9i
amVjdEZvckhlYWRlcnMoY29uc3QgSFRUUEhlYWRlck1hcCYgaGUKICAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBoZWFkZXJzT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAg
ICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBoZWFkZXJzLmVuZCgpOwogICAg
IGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBoZWFkZXJzLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaGVhZGVyc09iamVjdC0+c2V0U3RyaW5nKGl0LT5m
aXJzdC5zdHJpbmcoKSwgaXQtPnNlY29uZCk7CisgICAgICAgIGhlYWRlcnNPYmplY3QtPnNldFN0
cmluZyhpdC0+a2V5LnN0cmluZygpLCBpdC0+dmFsdWUpOwogICAgIHJldHVybiBoZWFkZXJzT2Jq
ZWN0OwogfQogCkBAIC0yMTYsOCArMjE2LDggQEAgdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50
Ojp3aWxsU2VuZFJlcXVlc3QodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBEb2N1bWVudEwKICAg
ICAgICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBoZWFkZXJzLT5lbmQo
KTsKICAgICAgICAgZm9yIChJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaGVh
ZGVycy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBTdHJpbmcgdmFs
dWU7Ci0gICAgICAgICAgICBpZiAoaXQtPnNlY29uZC0+YXNTdHJpbmcoJnZhbHVlKSkKLSAgICAg
ICAgICAgICAgICByZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZChpdC0+Zmlyc3QsIHZhbHVlKTsK
KyAgICAgICAgICAgIGlmIChpdC0+dmFsdWUtPmFzU3RyaW5nKCZ2YWx1ZSkpCisgICAgICAgICAg
ICAgICAgcmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoaXQtPmtleSwgdmFsdWUpOwogICAgICAg
ICB9CiAgICAgfQogCkBAIC0zNjUsNyArMzY1LDcgQEAgdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFn
ZW50Ojpkb2N1bWVudFRocmVhZGFibGVMb2FkZXJTdGFydGVkTG9hZGluZ0ZvckNsaWVudCh1bnMK
ICAgICBpZiAoaXQgPT0gbV9wZW5kaW5nWEhSUmVwbGF5RGF0YS5lbmQoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgWEhSUmVwbGF5RGF0YSogeGhyUmVwbGF5RGF0YSA9IGl0LT5zZWNvbmQuZ2V0
KCk7CisgICAgWEhSUmVwbGF5RGF0YSogeGhyUmVwbGF5RGF0YSA9IGl0LT52YWx1ZS5nZXQoKTsK
ICAgICBTdHJpbmcgcmVxdWVzdElkID0gSWRlbnRpZmllcnNGYWN0b3J5OjpyZXF1ZXN0SWQoaWRl
bnRpZmllcik7CiAgICAgbV9yZXNvdXJjZXNEYXRhLT5zZXRYSFJSZXBsYXlEYXRhKHJlcXVlc3RJ
ZCwgeGhyUmVwbGF5RGF0YSk7CiB9CkBAIC0zNzUsNyArMzc1LDcgQEAgdm9pZCBJbnNwZWN0b3JS
ZXNvdXJjZUFnZW50Ojp3aWxsTG9hZFhIUihUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiBjbGllbnQs
IGNvbnN0IFMKICAgICBSZWZQdHI8WEhSUmVwbGF5RGF0YT4geGhyUmVwbGF5RGF0YSA9IFhIUlJl
cGxheURhdGE6OmNyZWF0ZShtZXRob2QsIHVybCwgYXN5bmMsIGZvcm1EYXRhLCBpbmNsdWRlQ3Jl
ZGVudGlhbHMpOwogICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGhlYWRl
cnMuZW5kKCk7CiAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGhl
YWRlcnMuYmVnaW4oKTsgaXQhPSBlbmQ7ICsraXQpCi0gICAgICAgIHhoclJlcGxheURhdGEtPmFk
ZEhlYWRlcihpdC0+Zmlyc3QsIGl0LT5zZWNvbmQpOworICAgICAgICB4aHJSZXBsYXlEYXRhLT5h
ZGRIZWFkZXIoaXQtPmtleSwgaXQtPnZhbHVlKTsKICAgICBtX3BlbmRpbmdYSFJSZXBsYXlEYXRh
LnNldChjbGllbnQsIHhoclJlcGxheURhdGEpOwogfQogCkBAIC02MjQsNyArNjI0LDcgQEAgdm9p
ZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpyZXBsYXlYSFIoRXJyb3JTdHJpbmcqLCBjb25zdCBT
dHJpbmcmIHJlcXVlc3RJZCkKICAgICB4aHItPm9wZW4oeGhyUmVwbGF5RGF0YS0+bWV0aG9kKCks
IHhoclJlcGxheURhdGEtPnVybCgpLCB4aHJSZXBsYXlEYXRhLT5hc3luYygpLCBjb2RlKTsKICAg
ICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSB4aHJSZXBsYXlEYXRhLT5oZWFk
ZXJzKCkuZW5kKCk7CiAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9
IHhoclJlcGxheURhdGEtPmhlYWRlcnMoKS5iZWdpbigpOyBpdCE9IGVuZDsgKytpdCkKLSAgICAg
ICAgeGhyLT5zZXRSZXF1ZXN0SGVhZGVyKGl0LT5maXJzdCwgaXQtPnNlY29uZCwgY29kZSk7Cisg
ICAgICAgIHhoci0+c2V0UmVxdWVzdEhlYWRlcihpdC0+a2V5LCBpdC0+dmFsdWUsIGNvZGUpOwog
ICAgIHhoci0+c2VuZEZyb21JbnNwZWN0b3IoeGhyUmVwbGF5RGF0YS0+Zm9ybURhdGEoKSwgY29k
ZSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JT
dGF0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUuY3BwCmlu
ZGV4IDcwYTI0Mzk4NDdjNDU3YzM4YTM5MGEzMzAwNGEzZDllMWIxZGI0MWQuLmJhZjEwYzk3MWUx
MTk1MzI1NzZiZjQ5NDU1MjJmMzdiMDgzMjVhZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvclN0YXRlLmNwcApAQCAtODAsNyArODAsNyBAQCBib29sIEluc3BlY3RvclN0
YXRlOjpnZXRCb29sZWFuKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKQogICAgIEluc3BlY3Rv
ck9iamVjdDo6aXRlcmF0b3IgaXQgPSBtX3Byb3BlcnRpZXMtPmZpbmQocHJvcGVydHlOYW1lKTsK
ICAgICBib29sIHZhbHVlID0gZmFsc2U7CiAgICAgaWYgKGl0ICE9IG1fcHJvcGVydGllcy0+ZW5k
KCkpCi0gICAgICAgIGl0LT5zZWNvbmQtPmFzQm9vbGVhbigmdmFsdWUpOworICAgICAgICBpdC0+
dmFsdWUtPmFzQm9vbGVhbigmdmFsdWUpOwogICAgIHJldHVybiB2YWx1ZTsKIH0KIApAQCAtODks
NyArODksNyBAQCBTdHJpbmcgSW5zcGVjdG9yU3RhdGU6OmdldFN0cmluZyhjb25zdCBTdHJpbmcm
IHByb3BlcnR5TmFtZSkKICAgICBJbnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9yIGl0ID0gbV9wcm9w
ZXJ0aWVzLT5maW5kKHByb3BlcnR5TmFtZSk7CiAgICAgU3RyaW5nIHZhbHVlOwogICAgIGlmIChp
dCAhPSBtX3Byb3BlcnRpZXMtPmVuZCgpKQotICAgICAgICBpdC0+c2Vjb25kLT5hc1N0cmluZygm
dmFsdWUpOworICAgICAgICBpdC0+dmFsdWUtPmFzU3RyaW5nKCZ2YWx1ZSk7CiAgICAgcmV0dXJu
IHZhbHVlOwogfQogCkBAIC05OCw3ICs5OCw3IEBAIGxvbmcgSW5zcGVjdG9yU3RhdGU6OmdldExv
bmcoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCiAgICAgSW5zcGVjdG9yT2JqZWN0OjppdGVy
YXRvciBpdCA9IG1fcHJvcGVydGllcy0+ZmluZChwcm9wZXJ0eU5hbWUpOwogICAgIGxvbmcgdmFs
dWUgPSAwOwogICAgIGlmIChpdCAhPSBtX3Byb3BlcnRpZXMtPmVuZCgpKQotICAgICAgICBpdC0+
c2Vjb25kLT5hc051bWJlcigmdmFsdWUpOworICAgICAgICBpdC0+dmFsdWUtPmFzTnVtYmVyKCZ2
YWx1ZSk7CiAgICAgcmV0dXJuIHZhbHVlOwogfQogCkBAIC0xMDcsNyArMTA3LDcgQEAgZG91Ymxl
IEluc3BlY3RvclN0YXRlOjpnZXREb3VibGUoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCiAg
ICAgSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciBpdCA9IG1fcHJvcGVydGllcy0+ZmluZChwcm9w
ZXJ0eU5hbWUpOwogICAgIGRvdWJsZSB2YWx1ZSA9IDA7CiAgICAgaWYgKGl0ICE9IG1fcHJvcGVy
dGllcy0+ZW5kKCkpCi0gICAgICAgIGl0LT5zZWNvbmQtPmFzTnVtYmVyKCZ2YWx1ZSk7CisgICAg
ICAgIGl0LT52YWx1ZS0+YXNOdW1iZXIoJnZhbHVlKTsKICAgICByZXR1cm4gdmFsdWU7CiB9CiAK
QEAgLTExOCw3ICsxMTgsNyBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9y
U3RhdGU6OmdldE9iamVjdChjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZQogICAgICAgICBtX3By
b3BlcnRpZXMtPnNldE9iamVjdChwcm9wZXJ0eU5hbWUsIEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCkpOwogICAgICAgICBpdCA9IG1fcHJvcGVydGllcy0+ZmluZChwcm9wZXJ0eU5hbWUpOwogICAg
IH0KLSAgICByZXR1cm4gaXQtPnNlY29uZC0+YXNPYmplY3QoKTsKKyAgICByZXR1cm4gaXQtPnZh
bHVlLT5hc09iamVjdCgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKaW5kZXggNWI5NGRl
NmMxOTdjODJmMWM3YzgxMzM4MGNiODY2YTM4YTVlOGM4ZC4uMjEzMDUwMTRhZjBiM2M0ZDZlZmJk
M2Q3NThhOTQ3NTEzMjVlYzE4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JTdHlsZVNoZWV0LmNwcApAQCAtNTM2LDcgKzUzNiw3IEBAIFBhc3NSZWZQdHI8VHlw
ZUJ1aWxkZXI6OkNTUzo6Q1NTU3R5bGU+IEluc3BlY3RvclN0eWxlOjpzdHlsZVdpdGhQcm9wZXJ0
aWVzKCkgY29uCiAgICAgICAgICAgICAgICAgICAgICAgICBzaG91bGRJbmFjdGl2YXRlID0gdHJ1
ZTsKICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIHByZXZpb3VzUGFyc2VkT2s7Ci0gICAgICAgICAgICAgICAgICAgICAgICBib29sIHN1Y2Nl
c3MgPSBhY3RpdmVJdC0+c2Vjb25kLT5nZXRCb29sZWFuKFR5cGVCdWlsZGVyOjpDU1M6OkNTU1By
b3BlcnR5OjpQYXJzZWRPaywgJnByZXZpb3VzUGFyc2VkT2spOworICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBzdWNjZXNzID0gYWN0aXZlSXQtPnZhbHVlLT5nZXRCb29sZWFuKFR5cGVCdWls
ZGVyOjpDU1M6OkNTU1Byb3BlcnR5OjpQYXJzZWRPaywgJnByZXZpb3VzUGFyc2VkT2spOwogICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgIXByZXZpb3VzUGFyc2VkT2spCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkSW5hY3RpdmF0ZSA9IHRydWU7CiAgICAg
ICAgICAgICAgICAgICAgIH0KQEAgLTU0NCw3ICs1NDQsNyBAQCBQYXNzUmVmUHRyPFR5cGVCdWls
ZGVyOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JTdHlsZTo6c3R5bGVXaXRoUHJvcGVydGllcygp
IGNvbgogICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVUb1ByZXZpb3VzQWN0aXZlUHJv
cGVydHkuc2V0KGNhbm9uaWNhbFByb3BlcnR5TmFtZSwgcHJvcGVydHkpOwogCiAgICAgICAgICAg
ICAgICAgaWYgKHNob3VsZEluYWN0aXZhdGUpIHsKLSAgICAgICAgICAgICAgICAgICAgYWN0aXZl
SXQtPnNlY29uZC0+c2V0U3RhdHVzKFR5cGVCdWlsZGVyOjpDU1M6OkNTU1Byb3BlcnR5OjpTdGF0
dXM6OkluYWN0aXZlKTsKKyAgICAgICAgICAgICAgICAgICAgYWN0aXZlSXQtPnZhbHVlLT5zZXRT
dGF0dXMoVHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUHJvcGVydHk6OlN0YXR1czo6SW5hY3RpdmUpOwog
ICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVUb1ByZXZpb3VzQWN0aXZlUHJvcGVydHku
c2V0KGNhbm9uaWNhbFByb3BlcnR5TmFtZSwgcHJvcGVydHkpOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0xMDU3LDcgKzEwNTcsNyBAQCBQYXNzUmVmUHRyPElu
c3BlY3RvclN0eWxlPiBJbnNwZWN0b3JTdHlsZVNoZWV0OjppbnNwZWN0b3JTdHlsZUZvcklkKGNv
bnN0IEluc3BlYwogICAgICAgICBSZWZQdHI8SW5zcGVjdG9yU3R5bGU+IGluc3BlY3RvclN0eWxl
ID0gSW5zcGVjdG9yU3R5bGU6OmNyZWF0ZShpZCwgc3R5bGUsIHRoaXMpOwogICAgICAgICByZXR1
cm4gaW5zcGVjdG9yU3R5bGUucmVsZWFzZSgpOwogICAgIH0KLSAgICByZXR1cm4gaXQtPnNlY29u
ZDsKKyAgICByZXR1cm4gaXQtPnZhbHVlOwogfQogCiB2b2lkIEluc3BlY3RvclN0eWxlU2hlZXQ6
OnJlbWVtYmVySW5zcGVjdG9yU3R5bGUoUmVmUHRyPEluc3BlY3RvclN0eWxlPiBpbnNwZWN0b3JT
dHlsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1
ZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAKaW5k
ZXggZTRlYWQxN2U1Mjg2NjhkOWU1MDViZmRjYjEwMzBlN2I1MGZiNzc3Ny4uYWRhMjYxN2NjMGM0
YmVhMGE5ZjE5OWYyNTk3NzE0ZDI2OTBiMDZlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvclZhbHVlcy5jcHAKQEAgLTcxNyw3ICs3MTcsNyBAQCBQYXNzUmVmUHRyPElu
c3BlY3RvclZhbHVlPiBJbnNwZWN0b3JPYmplY3RCYXNlOjpnZXQoY29uc3QgU3RyaW5nJiBuYW1l
KSBjb25zdAogICAgIERpY3Rpb25hcnk6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9kYXRhLmZpbmQo
bmFtZSk7CiAgICAgaWYgKGl0ID09IG1fZGF0YS5lbmQoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgcmV0dXJuIGl0LT52YWx1ZTsKIH0KIAogdm9pZCBJ
bnNwZWN0b3JPYmplY3RCYXNlOjpyZW1vdmUoY29uc3QgU3RyaW5nJiBuYW1lKQpAQCAtNzM5LDkg
KzczOSw5IEBAIHZvaWQgSW5zcGVjdG9yT2JqZWN0QmFzZTo6d3JpdGVKU09OKFN0cmluZ0J1aWxk
ZXIqIG91dHB1dCkgY29uc3QKICAgICAgICAgQVNTRVJUKGl0ICE9IG1fZGF0YS5lbmQoKSk7CiAg
ICAgICAgIGlmIChpKQogICAgICAgICAgICAgb3V0cHV0LT5hcHBlbmQoJywnKTsKLSAgICAgICAg
ZG91YmxlUXVvdGVTdHJpbmcoaXQtPmZpcnN0LCBvdXRwdXQpOworICAgICAgICBkb3VibGVRdW90
ZVN0cmluZyhpdC0+a2V5LCBvdXRwdXQpOwogICAgICAgICBvdXRwdXQtPmFwcGVuZCgnOicpOwot
ICAgICAgICBpdC0+c2Vjb25kLT53cml0ZUpTT04ob3V0cHV0KTsKKyAgICAgICAgaXQtPnZhbHVl
LT53cml0ZUpTT04ob3V0cHV0KTsKICAgICB9CiAgICAgb3V0cHV0LT5hcHBlbmQoJ30nKTsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JXb3JrZXJBZ2Vu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yV29ya2VyQWdlbnQuY3Bw
CmluZGV4IDFiN2NlZGJjMzgzMmVjZjkzNjdmZWE3ZjVhMGI2YTAxN2FlYjhjMTUuLmU5MGY3Y2I0
YjQ4YTQ3OTI2ODIxOWU4OWZlYjlkZjgxZTUwMzBhZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JXb3JrZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvcldvcmtlckFnZW50LmNwcApAQCAtMjA1LDkgKzIwNSw5IEBA
IHZvaWQgSW5zcGVjdG9yV29ya2VyQWdlbnQ6OndvcmtlckNvbnRleHRUZXJtaW5hdGVkKFdvcmtl
ckNvbnRleHRQcm94eSogcHJveHkpCiB7CiAgICAgbV9kZWRpY2F0ZWRXb3JrZXJzLnJlbW92ZShw
cm94eSk7CiAgICAgZm9yIChXb3JrZXJDaGFubmVsczo6aXRlcmF0b3IgaXQgPSBtX2lkVG9DaGFu
bmVsLmJlZ2luKCk7IGl0ICE9IG1faWRUb0NoYW5uZWwuZW5kKCk7ICsraXQpIHsKLSAgICAgICAg
aWYgKHByb3h5ID09IGl0LT5zZWNvbmQtPnByb3h5KCkpIHsKLSAgICAgICAgICAgIG1faW5zcGVj
dG9yRnJvbnRlbmQtPndvcmtlcigpLT53b3JrZXJUZXJtaW5hdGVkKGl0LT5maXJzdCk7Ci0gICAg
ICAgICAgICBkZWxldGUgaXQtPnNlY29uZDsKKyAgICAgICAgaWYgKHByb3h5ID09IGl0LT52YWx1
ZS0+cHJveHkoKSkgeworICAgICAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZC0+d29ya2VyKCkt
PndvcmtlclRlcm1pbmF0ZWQoaXQtPmtleSk7CisgICAgICAgICAgICBkZWxldGUgaXQtPnZhbHVl
OwogICAgICAgICAgICAgbV9pZFRvQ2hhbm5lbC5yZW1vdmUoaXQpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CkBAIC0yMTcsMTQgKzIxNywxNCBAQCB2b2lkIEluc3BlY3Rvcldvcmtl
ckFnZW50Ojp3b3JrZXJDb250ZXh0VGVybWluYXRlZChXb3JrZXJDb250ZXh0UHJveHkqIHByb3h5
KQogdm9pZCBJbnNwZWN0b3JXb3JrZXJBZ2VudDo6Y3JlYXRlV29ya2VyRnJvbnRlbmRDaGFubmVs
c0ZvckV4aXN0aW5nV29ya2VycygpCiB7CiAgICAgZm9yIChEZWRpY2F0ZWRXb3JrZXJzOjppdGVy
YXRvciBpdCA9IG1fZGVkaWNhdGVkV29ya2Vycy5iZWdpbigpOyBpdCAhPSBtX2RlZGljYXRlZFdv
cmtlcnMuZW5kKCk7ICsraXQpCi0gICAgICAgIGNyZWF0ZVdvcmtlckZyb250ZW5kQ2hhbm5lbChp
dC0+Zmlyc3QsIGl0LT5zZWNvbmQpOworICAgICAgICBjcmVhdGVXb3JrZXJGcm9udGVuZENoYW5u
ZWwoaXQtPmtleSwgaXQtPnZhbHVlKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JXb3JrZXJBZ2VudDo6
ZGVzdHJveVdvcmtlckZyb250ZW5kQ2hhbm5lbHMoKQogewogICAgIGZvciAoV29ya2VyQ2hhbm5l
bHM6Oml0ZXJhdG9yIGl0ID0gbV9pZFRvQ2hhbm5lbC5iZWdpbigpOyBpdCAhPSBtX2lkVG9DaGFu
bmVsLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGl0LT5zZWNvbmQtPmRpc2Nvbm5lY3RGcm9tV29y
a2VyQ29udGV4dCgpOwotICAgICAgICBkZWxldGUgaXQtPnNlY29uZDsKKyAgICAgICAgaXQtPnZh
bHVlLT5kaXNjb25uZWN0RnJvbVdvcmtlckNvbnRleHQoKTsKKyAgICAgICAgZGVsZXRlIGl0LT52
YWx1ZTsKICAgICB9CiAgICAgbV9pZFRvQ2hhbm5lbC5jbGVhcigpOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL01lbW9yeUluc3RydW1lbnRhdGlvbkltcGwuY3BwIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL01lbW9yeUluc3RydW1lbnRhdGlvbkltcGwuY3BwCmlu
ZGV4IDg1NWFhNDc1ZTRmNTFhMTljNzEyODBmN2Q2YTllMzBlZTNiNTRlNjUuLjI0OWNiMTYwZDIz
NDdlOGFiYWVjZmM1MWYwNGMwOTVjNzA3MWViNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9NZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbC5jcHAKQEAgLTQyLDcgKzQy
LDcgQEAgdm9pZCBNZW1vcnlJbnN0cnVtZW50YXRpb25DbGllbnRJbXBsOjpjb3VudE9iamVjdFNp
emUoTWVtb3J5T2JqZWN0VHlwZSBvYmplY3RUeXAKICAgICBBU1NFUlQob2JqZWN0VHlwZSk7CiAg
ICAgVHlwZVRvU2l6ZU1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fdG90YWxTaXplcy5hZGQob2Jq
ZWN0VHlwZSwgc2l6ZSk7CiAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgcmVz
dWx0Lml0ZXJhdG9yLT5zZWNvbmQgKz0gc2l6ZTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZSArPSBzaXplOwogICAgICsrbV90b3RhbENvdW50ZWRPYmplY3RzOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbC5o
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL01lbW9yeUluc3RydW1lbnRhdGlvbkltcGwuaApp
bmRleCA2NDY2MTcxZTRjY2NhNzA2M2Q1MzJmNzQ1OGRhMDc3ZWE1OTdjNWFlLi4zYmEyMGNlY2I1
NDQ4YzU0YWUwOTU2OTRmMzJhYmIxZmIxY2NkOTI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9NZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsLmgKQEAgLTU1LDE0ICs1NSwx
NCBAQCBwdWJsaWM6CiAgICAgc2l6ZV90IHRvdGFsU2l6ZShNZW1vcnlPYmplY3RUeXBlIG9iamVj
dFR5cGUpIGNvbnN0CiAgICAgewogICAgICAgICBUeXBlVG9TaXplTWFwOjpjb25zdF9pdGVyYXRv
ciBpID0gbV90b3RhbFNpemVzLmZpbmQob2JqZWN0VHlwZSk7Ci0gICAgICAgIHJldHVybiBpID09
IG1fdG90YWxTaXplcy5lbmQoKSA/IDAgOiBpLT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBpID09
IG1fdG90YWxTaXplcy5lbmQoKSA/IDAgOiBpLT52YWx1ZTsKICAgICB9CiAKICAgICBzaXplX3Qg
cmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSBjb25zdAogICAgIHsKICAgICAgICAgc2l6ZV90IHNp
emUgPSAwOwogICAgICAgICBmb3IgKFR5cGVUb1NpemVNYXA6OmNvbnN0X2l0ZXJhdG9yIGkgPSBt
X3RvdGFsU2l6ZXMuYmVnaW4oKTsgaSAhPSBtX3RvdGFsU2l6ZXMuZW5kKCk7ICsraSkKLSAgICAg
ICAgICAgIHNpemUgKz0gaS0+c2Vjb25kOworICAgICAgICAgICAgc2l6ZSArPSBpLT52YWx1ZTsK
ICAgICAgICAgcmV0dXJuIHNpemU7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvTmV0d29ya1Jlc291cmNlc0RhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL05ldHdvcmtSZXNvdXJjZXNEYXRhLmNwcAppbmRleCA0MTk4ZmI1MWQ2OWFiZDA2ZDFk
MDIzYjQ3MjU3MTI5MjYxNWExMGEzLi43ODhlYmVhNTVkMjZiOTI1NWIzZDE5MzFmOGEzZjlmYmIw
Y2Y5NjkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvTmV0d29ya1Jlc291
cmNlc0RhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9OZXR3b3JrUmVzb3Vy
Y2VzRGF0YS5jcHAKQEAgLTI5MSw4ICsyOTEsOCBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZXNEYXRh
OjpzZXRYSFJSZXBsYXlEYXRhKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBYSFJSZXBsYXlEYQog
ICAgICAgICBSZXVzZWRSZXF1ZXN0SWRzOjppdGVyYXRvciBpdDsKICAgICAgICAgUmV1c2VkUmVx
dWVzdElkczo6aXRlcmF0b3IgZW5kID0gbV9yZXVzZWRYSFJSZXBsYXlEYXRhUmVxdWVzdElkcy5l
bmQoKTsKICAgICAgICAgZm9yIChpdCA9IG1fcmV1c2VkWEhSUmVwbGF5RGF0YVJlcXVlc3RJZHMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAoaXQtPnNlY29uZCA9
PSByZXF1ZXN0SWQpCi0gICAgICAgICAgICAgICAgc2V0WEhSUmVwbGF5RGF0YShpdC0+Zmlyc3Qs
IHhoclJlcGxheURhdGEpOworICAgICAgICAgICAgaWYgKGl0LT52YWx1ZSA9PSByZXF1ZXN0SWQp
CisgICAgICAgICAgICAgICAgc2V0WEhSUmVwbGF5RGF0YShpdC0+a2V5LCB4aHJSZXBsYXlEYXRh
KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzE4LDEwICszMTgsMTAg
QEAgVmVjdG9yPFN0cmluZz4gTmV0d29ya1Jlc291cmNlc0RhdGE6OnJlbW92ZUNhY2hlZFJlc291
cmNlKENhY2hlZFJlc291cmNlKiBjYWNoZWQKICAgICBSZXNvdXJjZURhdGFNYXA6Oml0ZXJhdG9y
IGl0OwogICAgIFJlc291cmNlRGF0YU1hcDo6aXRlcmF0b3IgZW5kID0gbV9yZXF1ZXN0SWRUb1Jl
c291cmNlRGF0YU1hcC5lbmQoKTsKICAgICBmb3IgKGl0ID0gbV9yZXF1ZXN0SWRUb1Jlc291cmNl
RGF0YU1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgUmVzb3VyY2VEYXRh
KiByZXNvdXJjZURhdGEgPSBpdC0+c2Vjb25kOworICAgICAgICBSZXNvdXJjZURhdGEqIHJlc291
cmNlRGF0YSA9IGl0LT52YWx1ZTsKICAgICAgICAgaWYgKHJlc291cmNlRGF0YS0+Y2FjaGVkUmVz
b3VyY2UoKSA9PSBjYWNoZWRSZXNvdXJjZSkgewogICAgICAgICAgICAgcmVzb3VyY2VEYXRhLT5z
ZXRDYWNoZWRSZXNvdXJjZSgwKTsKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoaXQtPmZpcnN0
KTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoaXQtPmtleSk7CiAgICAgICAgIH0KICAgICB9
CiAKQEAgLTMzOCw5ICszMzgsOSBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZXNEYXRhOjpjbGVhcihj
b25zdCBTdHJpbmcmIHByZXNlcnZlZExvYWRlcklkKQogICAgIFJlc291cmNlRGF0YU1hcDo6aXRl
cmF0b3IgaXQ7CiAgICAgUmVzb3VyY2VEYXRhTWFwOjppdGVyYXRvciBlbmQgPSBtX3JlcXVlc3RJ
ZFRvUmVzb3VyY2VEYXRhTWFwLmVuZCgpOwogICAgIGZvciAoaXQgPSBtX3JlcXVlc3RJZFRvUmVz
b3VyY2VEYXRhTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBSZXNvdXJj
ZURhdGEqIHJlc291cmNlRGF0YSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFJlc291cmNlRGF0YSog
cmVzb3VyY2VEYXRhID0gaXQtPnZhbHVlOwogICAgICAgICBpZiAoIXByZXNlcnZlZExvYWRlcklk
LmlzTnVsbCgpICYmIHJlc291cmNlRGF0YS0+bG9hZGVySWQoKSA9PSBwcmVzZXJ2ZWRMb2FkZXJJ
ZCkKLSAgICAgICAgICAgIHByZXNlcnZlZE1hcC5zZXQoaXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsK
KyAgICAgICAgICAgIHByZXNlcnZlZE1hcC5zZXQoaXQtPmtleSwgaXQtPnZhbHVlKTsKICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgZGVsZXRlIHJlc291cmNlRGF0YTsKICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuY3BwCmluZGV4
IGFiYTJiYTA2M2U1OTMwOGZhZWM0NGJmYzc4ZGZhZjhkOWI4NDVhMGIuLjliMjZmYzg2YzkwNDM5
Mzk1MTVmMTBhZTY5ZWJiNjU1MzBjMGI0MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9Dcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9Dcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuY3BwCkBAIC02OCw3ICs2OCw3IEBAIGJvb2wg
aXNTaW1wbGVDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3QoY29uc3QgU3RyaW5nJiBtZXRob2QsIGNv
bnN0IEhUVFBIZWFkZXJNYXAmCiAKICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBl
bmQgPSBoZWFkZXJNYXAuZW5kKCk7CiAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IGhlYWRlck1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAg
aWYgKCFpc09uQWNjZXNzQ29udHJvbFNpbXBsZVJlcXVlc3RIZWFkZXJXaGl0ZWxpc3QoaXQtPmZp
cnN0LCBpdC0+c2Vjb25kKSkKKyAgICAgICAgaWYgKCFpc09uQWNjZXNzQ29udHJvbFNpbXBsZVJl
cXVlc3RIZWFkZXJXaGl0ZWxpc3QoaXQtPmtleSwgaXQtPnZhbHVlKSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTExNiwxNCArMTE2LDE0IEBAIFJlc291cmNlUmVxdWVz
dCBjcmVhdGVBY2Nlc3NDb250cm9sUHJlZmxpZ2h0UmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVl
c3QmIHJlcXVlCiAgICAgaWYgKHJlcXVlc3RIZWFkZXJGaWVsZHMuc2l6ZSgpID4gMCkgewogICAg
ICAgICBTdHJpbmdCdWlsZGVyIGhlYWRlckJ1ZmZlcjsKICAgICAgICAgSFRUUEhlYWRlck1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSByZXF1ZXN0SGVhZGVyRmllbGRzLmJlZ2luKCk7Ci0gICAgICAg
IGhlYWRlckJ1ZmZlci5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgaGVhZGVyQnVmZmVyLmFw
cGVuZChpdC0+a2V5KTsKICAgICAgICAgKytpdDsKIAogICAgICAgICBIVFRQSGVhZGVyTWFwOjpj
b25zdF9pdGVyYXRvciBlbmQgPSByZXF1ZXN0SGVhZGVyRmllbGRzLmVuZCgpOwogICAgICAgICBm
b3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBoZWFkZXJCdWZmZXIuYXBwZW5k
KCcsJyk7CiAgICAgICAgICAgICBoZWFkZXJCdWZmZXIuYXBwZW5kKCcgJyk7Ci0gICAgICAgICAg
ICBoZWFkZXJCdWZmZXIuYXBwZW5kKGl0LT5maXJzdCk7CisgICAgICAgICAgICBoZWFkZXJCdWZm
ZXIuYXBwZW5kKGl0LT5rZXkpOwogICAgICAgICB9CiAKICAgICAgICAgcHJlZmxpZ2h0UmVxdWVz
dC5zZXRIVFRQSGVhZGVyRmllbGQoIkFjY2Vzcy1Db250cm9sLVJlcXVlc3QtSGVhZGVycyIsIGhl
YWRlckJ1ZmZlci50b1N0cmluZygpLmxvd2VyKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvbG9hZGVyL0Nyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUuY3BwIGIvU291cmNlL1dl
YkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUuY3BwCmluZGV4IDA0
ZDU4ODE1NWNlNTUzM2JkZGQzZjAyYjNiZDgxNWVkOWVlMzk5ZWIuLjlkNTFjODdmZTZjNGU3ZDQz
OTMzZTQ1ZWVmN2Q1YzE5YmQ1ZTIwODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9Dcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5jcHAKQEAgLTEyNSw4ICsx
MjUsOCBAQCBib29sIENyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGVJdGVtOjphbGxvd3ND
cm9zc09yaWdpbkhlYWRlcnMoY29uc3QgSFRUUEhlYQogewogICAgIEhUVFBIZWFkZXJNYXA6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IHJlcXVlc3RIZWFkZXJzLmVuZCgpOwogICAgIGZvciAoSFRUUEhl
YWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSByZXF1ZXN0SGVhZGVycy5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKCFtX2hlYWRlcnMuY29udGFpbnMoaXQtPmZpcnN0
KSAmJiAhaXNPbkFjY2Vzc0NvbnRyb2xTaW1wbGVSZXF1ZXN0SGVhZGVyV2hpdGVsaXN0KGl0LT5m
aXJzdCwgaXQtPnNlY29uZCkpIHsKLSAgICAgICAgICAgIGVycm9yRGVzY3JpcHRpb24gPSAiUmVx
dWVzdCBoZWFkZXIgZmllbGQgIiArIGl0LT5maXJzdC5zdHJpbmcoKSArICIgaXMgbm90IGFsbG93
ZWQgYnkgQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVycy4iOworICAgICAgICBpZiAoIW1faGVh
ZGVycy5jb250YWlucyhpdC0+a2V5KSAmJiAhaXNPbkFjY2Vzc0NvbnRyb2xTaW1wbGVSZXF1ZXN0
SGVhZGVyV2hpdGVsaXN0KGl0LT5rZXksIGl0LT52YWx1ZSkpIHsKKyAgICAgICAgICAgIGVycm9y
RGVzY3JpcHRpb24gPSAiUmVxdWVzdCBoZWFkZXIgZmllbGQgIiArIGl0LT5rZXkuc3RyaW5nKCkg
KyAiIGlzIG5vdCBhbGxvd2VkIGJ5IEFjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnMuIjsKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KQEAgLTE2Nyw3ICsxNjcs
NyBAQCBib29sIENyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGU6OmNhblNraXBQcmVmbGln
aHQoY29uc3QgU3RyaW5nJiBvcmlnaW4sIGNvbgogICAgIGlmIChjYWNoZUl0ID09IG1fcHJlZmxp
Z2h0SGFzaE1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGNhY2hl
SXQtPnNlY29uZC0+YWxsb3dzUmVxdWVzdChpbmNsdWRlQ3JlZGVudGlhbHMsIG1ldGhvZCwgcmVx
dWVzdEhlYWRlcnMpKQorICAgIGlmIChjYWNoZUl0LT52YWx1ZS0+YWxsb3dzUmVxdWVzdChpbmNs
dWRlQ3JlZGVudGlhbHMsIG1ldGhvZCwgcmVxdWVzdEhlYWRlcnMpKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKIAogICAgIG1fcHJlZmxpZ2h0SGFzaE1hcC5yZW1vdmUoY2FjaGVJdCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAppbmRleCBiNWFjZjJiNTUzMWRmZjdiMGQ4
ZTZmMmVmZDJmNTliMDJlMGVmNjU3Li4yZmRjZTkxNDYxMDZjZjJhYjhjZGIzMmQwYmExNjEyYTdh
NGFmZGZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAKQEAgLTYy
MCw3ICs2MjAsNyBAQCB2b2lkIERvY3VtZW50TG9hZGVyOjpnZXRTdWJyZXNvdXJjZXMoVmVjdG9y
PFBhc3NSZWZQdHI8QXJjaGl2ZVJlc291cmNlPiA+JiBzdWJyZQogICAgIGNvbnN0IENhY2hlZFJl
c291cmNlTG9hZGVyOjpEb2N1bWVudFJlc291cmNlTWFwJiBhbGxSZXNvdXJjZXMgPSBkb2N1bWVu
dC0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS0+YWxsQ2FjaGVkUmVzb3VyY2VzKCk7CiAgICAgQ2Fj
aGVkUmVzb3VyY2VMb2FkZXI6OkRvY3VtZW50UmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IGFsbFJlc291cmNlcy5lbmQoKTsKICAgICBmb3IgKENhY2hlZFJlc291cmNlTG9hZGVyOjpE
b2N1bWVudFJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGFsbFJlc291cmNlcy5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgUmVmUHRyPEFyY2hpdmVSZXNvdXJjZT4g
c3VicmVzb3VyY2UgPSB0aGlzLT5zdWJyZXNvdXJjZShLVVJMKFBhcnNlZFVSTFN0cmluZywgaXQt
PnNlY29uZC0+dXJsKCkpKTsKKyAgICAgICAgUmVmUHRyPEFyY2hpdmVSZXNvdXJjZT4gc3VicmVz
b3VyY2UgPSB0aGlzLT5zdWJyZXNvdXJjZShLVVJMKFBhcnNlZFVSTFN0cmluZywgaXQtPnZhbHVl
LT51cmwoKSkpOwogICAgICAgICBpZiAoc3VicmVzb3VyY2UpCiAgICAgICAgICAgICBzdWJyZXNv
dXJjZXMuYXBwZW5kKHN1YnJlc291cmNlLnJlbGVhc2UoKSk7CiAgICAgfQpAQCAtNjUyLDggKzY1
Miw4IEBAIHZvaWQgRG9jdW1lbnRMb2FkZXI6OnN1YnN0aXR1dGVSZXNvdXJjZURlbGl2ZXJ5VGlt
ZXJGaXJlZChUaW1lcjxEb2N1bWVudExvYWRlcj4qCiAKICAgICBTdWJzdGl0dXRlUmVzb3VyY2VN
YXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGNvcHkuZW5kKCk7CiAgICAgZm9yIChTdWJzdGl0dXRl
UmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY29weS5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKLSAgICAgICAgUmVmUHRyPFJlc291cmNlTG9hZGVyPiBsb2FkZXIgPSBpdC0+Zmly
c3Q7Ci0gICAgICAgIFN1YnN0aXR1dGVSZXNvdXJjZSogcmVzb3VyY2UgPSBpdC0+c2Vjb25kLmdl
dCgpOworICAgICAgICBSZWZQdHI8UmVzb3VyY2VMb2FkZXI+IGxvYWRlciA9IGl0LT5rZXk7Cisg
ICAgICAgIFN1YnN0aXR1dGVSZXNvdXJjZSogcmVzb3VyY2UgPSBpdC0+dmFsdWUuZ2V0KCk7CiAg
ICAgICAgIAogICAgICAgICBpZiAocmVzb3VyY2UpIHsKICAgICAgICAgICAgIFNoYXJlZEJ1ZmZl
ciogZGF0YSA9IHJlc291cmNlLT5kYXRhKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvTWFpblJlc291cmNlTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9NYWlu
UmVzb3VyY2VMb2FkZXIuY3BwCmluZGV4IGVhNjY3MDM2YzhjMzlmNjYyNDhkOGUyNWQ4Y2UxYjE4
MWY3NGNlMWMuLjNkNTM5MGNkYjlkMmRlMTc3YmIyNDI3YTU4MjMxY2M4ZDJiNWFjYTAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9NYWluUmVzb3VyY2VMb2FkZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9NYWluUmVzb3VyY2VMb2FkZXIuY3BwCkBAIC0zNjgsNyAr
MzY4LDcgQEAgdm9pZCBNYWluUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZShjb25z
dCBSZXNvdXJjZVJlc3BvbnNlJiByKQogCiAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSByLmh0dHBIZWFkZXJGaWVsZHMoKS5maW5kKEF0b21pY1N0cmluZygieC1mcmFtZS1v
cHRpb25zIikpOwogICAgIGlmIChpdCAhPSByLmh0dHBIZWFkZXJGaWVsZHMoKS5lbmQoKSkgewot
ICAgICAgICBTdHJpbmcgY29udGVudCA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFN0cmluZyBjb250
ZW50ID0gaXQtPnZhbHVlOwogICAgICAgICBpZiAobV9mcmFtZS0+bG9hZGVyKCktPnNob3VsZElu
dGVycnVwdExvYWRGb3JYRnJhbWVPcHRpb25zKGNvbnRlbnQsIHIudXJsKCkpKSB7CiAgICAgICAg
ICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnRpbnVlQWZ0ZXJYRnJhbWVPcHRpb25z
RGVuaWVkKG1fZnJhbWUuZ2V0KCksIGRvY3VtZW50TG9hZGVyKCksIGlkZW50aWZpZXIoKSwgcik7
CiAgICAgICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgY29uc29sZU1lc3NhZ2Us
IChBU0NJSUxpdGVyYWwoIlJlZnVzZWQgdG8gZGlzcGxheSBkb2N1bWVudCBiZWNhdXNlIGRpc3Bs
YXkgZm9yYmlkZGVuIGJ5IFgtRnJhbWUtT3B0aW9ucy5cbiIpKSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCmluZGV4IGExYjIzYzk5ZDExODE1
NjkzNTU5NTY4Y2I5NzM5OTk4MmFhMTJhNjkuLjdiMWRhZGUzYmMwOWViMWRlYWY1YzkzNGQwNDlm
ODdlMjM3ZWU5NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxv
YWRTY2hlZHVsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRT
Y2hlZHVsZXIuY3BwCkBAIC0xNzgsNyArMTc4LDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRTY2hlZHVs
ZXI6OnNlcnZlUGVuZGluZ1JlcXVlc3RzKFJlc291cmNlTG9hZFByaW9yaXR5IG1pbmltdW1QcmkK
ICAgICBtX2hvc3RzLmNoZWNrQ29uc2lzdGVuY3koKTsKICAgICBIb3N0TWFwOjppdGVyYXRvciBl
bmQgPSBtX2hvc3RzLmVuZCgpOwogICAgIGZvciAoSG9zdE1hcDo6aXRlcmF0b3IgaXRlciA9IG1f
aG9zdHMuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikKLSAgICAgICAgaG9zdHNUb1NlcnZl
LmFwcGVuZChpdGVyLT5zZWNvbmQpOworICAgICAgICBob3N0c1RvU2VydmUuYXBwZW5kKGl0ZXIt
PnZhbHVlKTsKIAogICAgIGludCBzaXplID0gaG9zdHNUb1NlcnZlLnNpemUoKTsKICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IHNpemU7ICsraSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
bG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGUuY3BwCmluZGV4IGFiYjAwMjMyZmZmNjMyYTk1
ZmY4ZmY5ZWUzNDY2NTBiN2Y5MDVjMzAuLjc5Y2M5ZDhiZGQ1MDk5ODJkYmJkNTlkN2M1OGNmM2Qw
YTM5Njk5MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBs
aWNhdGlvbkNhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBw
bGljYXRpb25DYWNoZS5jcHAKQEAgLTEwNiwxMSArMTA2LDExIEBAIHVuc2lnbmVkIEFwcGxpY2F0
aW9uQ2FjaGU6OnJlbW92ZVJlc291cmNlKGNvbnN0IFN0cmluZyYgdXJsKQogICAgICAgICByZXR1
cm4gMDsKIAogICAgIC8vIFRoZSByZXNvdXJjZSBleGlzdHMsIGdldCBpdHMgdHlwZSBzbyB3ZSBj
YW4gcmV0dXJuIGl0LgotICAgIHVuc2lnbmVkIHR5cGUgPSBpdC0+c2Vjb25kLT50eXBlKCk7Cisg
ICAgdW5zaWduZWQgdHlwZSA9IGl0LT52YWx1ZS0+dHlwZSgpOwogCiAgICAgbV9yZXNvdXJjZXMu
cmVtb3ZlKGl0KTsKIAotICAgIG1fZXN0aW1hdGVkU2l6ZUluU3RvcmFnZSAtPSBpdC0+c2Vjb25k
LT5lc3RpbWF0ZWRTaXplSW5TdG9yYWdlKCk7CisgICAgbV9lc3RpbWF0ZWRTaXplSW5TdG9yYWdl
IC09IGl0LT52YWx1ZS0+ZXN0aW1hdGVkU2l6ZUluU3RvcmFnZSgpOwogCiAgICAgcmV0dXJuIHR5
cGU7CiB9ICAgIApAQCAtMTg4LDcgKzE4OCw3IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZTo6Y2xl
YXJTdG9yYWdlSUQoKQogICAgIAogICAgIFJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQg
PSBtX3Jlc291cmNlcy5lbmQoKTsKICAgICBmb3IgKFJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQt
PnNlY29uZC0+Y2xlYXJTdG9yYWdlSUQoKTsKKyAgICAgICAgaXQtPnZhbHVlLT5jbGVhclN0b3Jh
Z2VJRCgpOwogfQogICAgIAogdm9pZCBBcHBsaWNhdGlvbkNhY2hlOjpkZWxldGVDYWNoZUZvck9y
aWdpbihTZWN1cml0eU9yaWdpbiogb3JpZ2luKQpAQCAtMjI2LDggKzIyNiw4IEBAIHZvaWQgQXBw
bGljYXRpb25DYWNoZTo6ZHVtcCgpCiAgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxBcHBsaWNh
dGlvbkNhY2hlUmVzb3VyY2U+ID46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcmVzb3VyY2VzLmVu
ZCgpOwogICAgIAogICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxBcHBsaWNhdGlvbkNh
Y2hlUmVzb3VyY2U+ID46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIHByaW50ZigiJXMgIiwgaXQtPmZpcnN0LmFzY2lp
KCkuZGF0YSgpKTsKLSAgICAgICAgQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpkdW1wVHlwZShp
dC0+c2Vjb25kLT50eXBlKCkpOworICAgICAgICBwcmludGYoIiVzICIsIGl0LT5rZXkuYXNjaWko
KS5kYXRhKCkpOworICAgICAgICBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OmR1bXBUeXBlKGl0
LT52YWx1ZS0+dHlwZSgpKTsKICAgICB9CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuY3BwIGIvU291cmNl
L1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVHcm91cC5jcHAKaW5kZXgg
OTIwODJjNTZiZTExYzlkYzI1ODUwZjdhOTRiYzI3OTNiNzdmNWY1Zi4uMjczYTYwMTBkODI1NWZi
OTRhYTYwNTFiOTJmNjkyYjQ4ODM3Yzk5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVHcm91cC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVHcm91cC5jcHAKQEAgLTc3Nyw5ICs3
NzcsOSBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6ZGlkRmluaXNoTG9hZGluZ01hbmlm
ZXN0KCkKICAgICBpZiAoaXNVcGdyYWRlQXR0ZW1wdCkgewogICAgICAgICBBcHBsaWNhdGlvbkNh
Y2hlOjpSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9uZXdlc3RDYWNoZS0+ZW5k
KCk7CiAgICAgICAgIGZvciAoQXBwbGljYXRpb25DYWNoZTo6UmVzb3VyY2VNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbV9uZXdlc3RDYWNoZS0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0g
ICAgICAgICAgICB1bnNpZ25lZCB0eXBlID0gaXQtPnNlY29uZC0+dHlwZSgpOworICAgICAgICAg
ICAgdW5zaWduZWQgdHlwZSA9IGl0LT52YWx1ZS0+dHlwZSgpOwogICAgICAgICAgICAgaWYgKHR5
cGUgJiBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6Ok1hc3RlcikKLSAgICAgICAgICAgICAgICBh
ZGRFbnRyeShpdC0+Zmlyc3QsIHR5cGUpOworICAgICAgICAgICAgICAgIGFkZEVudHJ5KGl0LT5r
ZXksIHR5cGUpOwogICAgICAgICB9CiAgICAgfQogICAgIApAQCAtMTAxOCw3ICsxMDE4LDcgQEAg
dm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OnN0YXJ0TG9hZGluZ0VudHJ5KCkKIAogICAgIEFT
U0VSVCghbV9jdXJyZW50SGFuZGxlKTsKICAgICAKLSAgICBtX2N1cnJlbnRIYW5kbGUgPSBjcmVh
dGVSZXNvdXJjZUhhbmRsZShLVVJMKFBhcnNlZFVSTFN0cmluZywgaXQtPmZpcnN0KSwgbV9uZXdl
c3RDYWNoZSA/IG1fbmV3ZXN0Q2FjaGUtPnJlc291cmNlRm9yVVJMKGl0LT5maXJzdCkgOiAwKTsK
KyAgICBtX2N1cnJlbnRIYW5kbGUgPSBjcmVhdGVSZXNvdXJjZUhhbmRsZShLVVJMKFBhcnNlZFVS
TFN0cmluZywgaXQtPmtleSksIG1fbmV3ZXN0Q2FjaGUgPyBtX25ld2VzdENhY2hlLT5yZXNvdXJj
ZUZvclVSTChpdC0+a2V5KSA6IDApOwogfQogCiB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6
ZGVsaXZlckRlbGF5ZWRNYWluUmVzb3VyY2VzKCkKQEAgLTEwNjcsNyArMTA2Nyw3IEBAIHZvaWQg
QXBwbGljYXRpb25DYWNoZUdyb3VwOjphZGRFbnRyeShjb25zdCBTdHJpbmcmIHVybCwgdW5zaWdu
ZWQgdHlwZSkKICAgICBFbnRyeU1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fcGVuZGluZ0VudHJp
ZXMuYWRkKHVybCwgdHlwZSk7CiAgICAgCiAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAg
ICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgfD0gdHlwZTsKKyAgICAgICAgcmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZSB8PSB0eXBlOwogfQogCiB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6
YXNzb2NpYXRlRG9jdW1lbnRMb2FkZXJXaXRoQ2FjaGUoRG9jdW1lbnRMb2FkZXIqIGxvYWRlciwg
QXBwbGljYXRpb25DYWNoZSogY2FjaGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUhvc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVIb3N0LmNwcAppbmRleCA4MDFjMWIzNjcwMzFh
MzM5ZGI0NDcwN2E5MmQxYmM4MGQ0MWQ4Yzc5Li5mZTlmMDEwYTBmZTY1MDNkMGJjNWU1YjkyNzcw
YTNmN2I2NDM0NGZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUv
QXBwbGljYXRpb25DYWNoZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBj
YWNoZS9BcHBsaWNhdGlvbkNhY2hlSG9zdC5jcHAKQEAgLTI4Miw3ICsyODIsNyBAQCB2b2lkIEFw
cGxpY2F0aW9uQ2FjaGVIb3N0OjpmaWxsUmVzb3VyY2VMaXN0KFJlc291cmNlSW5mb0xpc3QqIHJl
c291cmNlcykKICAgICAgCiAgICAgQXBwbGljYXRpb25DYWNoZTo6UmVzb3VyY2VNYXA6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IGNhY2hlLT5lbmQoKTsKICAgICBmb3IgKEFwcGxpY2F0aW9uQ2FjaGU6
OlJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGNhY2hlLT5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKLSAgICAgICAgUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4gcmVz
b3VyY2UgPSBpdC0+c2Vjb25kOworICAgICAgICBSZWZQdHI8QXBwbGljYXRpb25DYWNoZVJlc291
cmNlPiByZXNvdXJjZSA9IGl0LT52YWx1ZTsKICAgICAgICAgdW5zaWduZWQgdHlwZSA9IHJlc291
cmNlLT50eXBlKCk7CiAgICAgICAgIGJvb2wgaXNNYXN0ZXIgICA9IHR5cGUgJiBBcHBsaWNhdGlv
bkNhY2hlUmVzb3VyY2U6Ok1hc3RlcjsKICAgICAgICAgYm9vbCBpc01hbmlmZXN0ID0gdHlwZSAm
IEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6TWFuaWZlc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVJlc291cmNlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuY3Bw
CmluZGV4IGQ4MzE3ODRiNDE5NmFkZjM4MmNmMzU1ZTBlZWYwMmQ2YTdhODA3OTAuLjk5NzY2ZTNh
NjZiZDM2ZWI0MmZlZDJhOTI2OWQzNGIwNjYxOTRkN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuY3Bw
CkBAIC01NCw3ICs1NCw3IEBAIGludDY0X3QgQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjplc3Rp
bWF0ZWRTaXplSW5TdG9yYWdlKCkKIAogICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IHJlc3BvbnNlKCkuaHR0cEhlYWRlckZpZWxkcygpLmVuZCgpOwogICAgIGZvciAoSFRU
UEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSByZXNwb25zZSgpLmh0dHBIZWFkZXJGaWVs
ZHMoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIG1fZXN0aW1hdGVkU2l6ZUlu
U3RvcmFnZSArPSAoaXQtPmZpcnN0Lmxlbmd0aCgpICsgaXQtPnNlY29uZC5sZW5ndGgoKSArIDIp
ICogc2l6ZW9mKFVDaGFyKTsKKyAgICAgICAgbV9lc3RpbWF0ZWRTaXplSW5TdG9yYWdlICs9IChp
dC0+a2V5Lmxlbmd0aCgpICsgaXQtPnZhbHVlLmxlbmd0aCgpICsgMikgKiBzaXplb2YoVUNoYXIp
OwogCiAgICAgbV9lc3RpbWF0ZWRTaXplSW5TdG9yYWdlICs9IHVybCgpLnN0cmluZygpLmxlbmd0
aCgpICogc2l6ZW9mKFVDaGFyKTsKICAgICBtX2VzdGltYXRlZFNpemVJblN0b3JhZ2UgKz0gc2l6
ZW9mKGludCk7IC8vIHJlc3BvbnNlKCkubV9odHRwU3RhdHVzQ29kZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5j
cHAKaW5kZXggNzQwMzI3NzM2YzJkNDhkYjQxNjRjNzdhZDhlYTYwNDdiMTgxYzllOS4uNGE1MTkw
NzBmMWVkY2IyM2U4ODljMzYzZDQ5Mjk4MTMzMjhkYjVjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3Bw
CkBAIC0xNDIsOCArMTQyLDggQEAgQXBwbGljYXRpb25DYWNoZUdyb3VwKiBBcHBsaWNhdGlvbkNh
Y2hlU3RvcmFnZTo6ZmluZE9yQ3JlYXRlQ2FjaGVHcm91cChjb25zdCBLVVIKICAgICBDYWNoZUdy
b3VwTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9jYWNoZXNJbk1lbW9yeS5hZGQobWFuaWZlc3RV
UkwsIDApOwogICAgIAogICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgQVNT
RVJUKHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5pdGVy
YXRvci0+c2Vjb25kOworICAgICAgICBBU1NFUlQocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7Cisg
ICAgICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogICAgIH0KIAogICAgIC8vIExv
b2sgdXAgdGhlIGdyb3VwIGluIHRoZSBkYXRhYmFzZQpAQCAtMTU1LDcgKzE1NSw3IEBAIEFwcGxp
Y2F0aW9uQ2FjaGVHcm91cCogQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmZpbmRPckNyZWF0ZUNh
Y2hlR3JvdXAoY29uc3QgS1VSCiAgICAgICAgIG1fY2FjaGVIb3N0U2V0LmFkZCh1cmxIb3N0SGFz
aChtYW5pZmVzdFVSTCkpOwogICAgIH0KICAgICAKLSAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29u
ZCA9IGdyb3VwOworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBncm91cDsKICAgICAKICAg
ICByZXR1cm4gZ3JvdXA7CiB9CkBAIC0yMDIsNyArMjAyLDcgQEAgQXBwbGljYXRpb25DYWNoZUdy
b3VwKiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2FjaGVHcm91cEZvclVSTChjb25zdCBLVVJM
JiB1cmwKICAgICAvLyBDaGVjayBpZiBhIGNhY2hlIGFscmVhZHkgZXhpc3RzIGluIG1lbW9yeS4K
ICAgICBDYWNoZUdyb3VwTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2NhY2hlc0luTWVtb3J5
LmVuZCgpOwogICAgIGZvciAoQ2FjaGVHcm91cE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2Nh
Y2hlc0luTWVtb3J5LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBBcHBsaWNh
dGlvbkNhY2hlR3JvdXAqIGdyb3VwID0gaXQtPnNlY29uZDsKKyAgICAgICAgQXBwbGljYXRpb25D
YWNoZUdyb3VwKiBncm91cCA9IGl0LT52YWx1ZTsKIAogICAgICAgICBBU1NFUlQoIWdyb3VwLT5p
c09ic29sZXRlKCkpOwogCkBAIC0yNzMsNyArMjczLDcgQEAgQXBwbGljYXRpb25DYWNoZUdyb3Vw
KiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZmFsbGJhY2tDYWNoZUdyb3VwRm9yVVJMKGNvbnN0
IEsKICAgICAvLyBDaGVjayBpZiBhbiBhcHByb3ByaWF0ZSBjYWNoZSBhbHJlYWR5IGV4aXN0cyBp
biBtZW1vcnkuCiAgICAgQ2FjaGVHcm91cE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9jYWNo
ZXNJbk1lbW9yeS5lbmQoKTsKICAgICBmb3IgKENhY2hlR3JvdXBNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbV9jYWNoZXNJbk1lbW9yeS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgQXBwbGljYXRpb25DYWNoZUdyb3VwKiBncm91cCA9IGl0LT5zZWNvbmQ7CisgICAgICAgIEFw
cGxpY2F0aW9uQ2FjaGVHcm91cCogZ3JvdXAgPSBpdC0+dmFsdWU7CiAgICAgICAgIAogICAgICAg
ICBBU1NFUlQoIWdyb3VwLT5pc09ic29sZXRlKCkpOwogCkBAIC03MTgsMTMgKzcxOCwxMyBAQCBi
b29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZShBcHBsaWNhdGlvbkNhY2hlKiBjYWNo
ZSwgUmVzb3VyY2VTdG9yYWdlSURKbwogICAgIHsKICAgICAgICAgQXBwbGljYXRpb25DYWNoZTo6
UmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGNhY2hlLT5lbmQoKTsKICAgICAgICAg
Zm9yIChBcHBsaWNhdGlvbkNhY2hlOjpSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBj
YWNoZS0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBv
bGRTdG9yYWdlSUQgPSBpdC0+c2Vjb25kLT5zdG9yYWdlSUQoKTsKLSAgICAgICAgICAgIGlmICgh
c3RvcmUoaXQtPnNlY29uZC5nZXQoKSwgY2FjaGVTdG9yYWdlSUQpKQorICAgICAgICAgICAgdW5z
aWduZWQgb2xkU3RvcmFnZUlEID0gaXQtPnZhbHVlLT5zdG9yYWdlSUQoKTsKKyAgICAgICAgICAg
IGlmICghc3RvcmUoaXQtPnZhbHVlLmdldCgpLCBjYWNoZVN0b3JhZ2VJRCkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICAvLyBTdG9yaW5nIHRoZSByZXNvdXJj
ZSBzdWNjZWVkZWQuIExvZyBpdHMgb2xkIHN0b3JhZ2VJRCBpbiBjYXNlCiAgICAgICAgICAgICAv
LyBpdCBuZWVkcyB0byBiZSByZXN0b3JlZCBsYXRlci4KLSAgICAgICAgICAgIHN0b3JhZ2VJREpv
dXJuYWwtPmFkZChpdC0+c2Vjb25kLmdldCgpLCBvbGRTdG9yYWdlSUQpOworICAgICAgICAgICAg
c3RvcmFnZUlESm91cm5hbC0+YWRkKGl0LT52YWx1ZS5nZXQoKSwgb2xkU3RvcmFnZUlEKTsKICAg
ICAgICAgfQogICAgIH0KICAgICAKQEAgLTg0NCw5ICs4NDQsOSBAQCBib29sIEFwcGxpY2F0aW9u
Q2FjaGVTdG9yYWdlOjpzdG9yZShBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqIHJlc291cmNlLCB1
bnNpZ25lZAogICAgIAogICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHJl
c291cmNlLT5yZXNwb25zZSgpLmh0dHBIZWFkZXJGaWVsZHMoKS5lbmQoKTsKICAgICBmb3IgKEhU
VFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcmVzb3VyY2UtPnJlc3BvbnNlKCkuaHR0
cEhlYWRlckZpZWxkcygpLmJlZ2luKCk7IGl0IT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKGl0LT5maXJzdCk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KGl0LT5rZXkpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnOicpOwotICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+c2Vjb25kKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQoaXQtPnZhbHVlKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7CiAg
ICAgfQogICAgIApAQCAtMTI1NCw3ICsxMjU0LDcgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlU3Rv
cmFnZTo6ZW1wdHkoKQogICAgIC8vIHVudGlsIGEgY2FjaGUgdXBkYXRlIHByb2Nlc3MgaGFzIGJl
ZW4gaW5pdGlhdGVkLgogICAgIENhY2hlR3JvdXBNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1f
Y2FjaGVzSW5NZW1vcnkuZW5kKCk7CiAgICAgZm9yIChDYWNoZUdyb3VwTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IG1fY2FjaGVzSW5NZW1vcnkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAg
ICAgICBpdC0+c2Vjb25kLT5jbGVhclN0b3JhZ2VJRCgpOworICAgICAgICBpdC0+dmFsdWUtPmNs
ZWFyU3RvcmFnZUlEKCk7CiAgICAgCiAgICAgY2hlY2tGb3JEZWxldGVkUmVzb3VyY2VzKCk7CiB9
CkBAIC0xMzE2LDcgKzEzMTYsNyBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9y
ZUNvcHlPZkNhY2hlKGNvbnN0IFN0cmluZyYgY2FjaGVEaXJlY3RvcnksIEFwcAogICAgIC8vIFRy
YXZlcnNlIHRoZSBjYWNoZSBhbmQgYWRkIGNvcGllcyBvZiBhbGwgcmVzb3VyY2VzLgogICAgIEFw
cGxpY2F0aW9uQ2FjaGU6OlJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBjYWNoZS0+
ZW5kKCk7CiAgICAgZm9yIChBcHBsaWNhdGlvbkNhY2hlOjpSZXNvdXJjZU1hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBjYWNoZS0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIEFw
cGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2UgPSBpdC0+c2Vjb25kLmdldCgpOworICAg
ICAgICBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqIHJlc291cmNlID0gaXQtPnZhbHVlLmdldCgp
OwogICAgICAgICAKICAgICAgICAgUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4gcmVz
b3VyY2VDb3B5ID0gQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpjcmVhdGUocmVzb3VyY2UtPnVy
bCgpLCByZXNvdXJjZS0+cmVzcG9uc2UoKSwgcmVzb3VyY2UtPnR5cGUoKSwgcmVzb3VyY2UtPmRh
dGEoKSwgcmVzb3VyY2UtPnBhdGgoKSk7CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvbG9hZGVyL2FyY2hpdmUvQXJjaGl2ZUZhY3RvcnkuY3BwIGIvU291cmNlL1dlYkNvcmUv
bG9hZGVyL2FyY2hpdmUvQXJjaGl2ZUZhY3RvcnkuY3BwCmluZGV4IGMyYjZkYmNkZGVmMzZlZDhj
NzQyOTVjOGI1YmM4ZjE2N2U3ZWM1YzkuLjA0ZmI1ZWRiNTY3NGM3MjQ5ZWNlMGZjMDE5MDE1MWM5
YzJhOTc4YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL0FyY2hp
dmVGYWN0b3J5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9BcmNoaXZl
RmFjdG9yeS5jcHAKQEAgLTk1LDcgKzk1LDcgQEAgdm9pZCBBcmNoaXZlRmFjdG9yeTo6cmVnaXN0
ZXJLbm93bkFyY2hpdmVNSU1FVHlwZXMoKQogICAgIEFyY2hpdmVNSU1FVHlwZXNNYXA6Oml0ZXJh
dG9yIGVuZCA9IGFyY2hpdmVNSU1FVHlwZXMoKS5lbmQoKTsKIAogICAgIGZvciAoOyBpICE9IGVu
ZDsgKytpKQotICAgICAgICBtaW1lVHlwZXMuYWRkKGktPmZpcnN0KTsKKyAgICAgICAgbWltZVR5
cGVzLmFkZChpLT5rZXkpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2Nh
Y2hlL0NhY2hlZFJhd1Jlc291cmNlLmNwcAppbmRleCA3Mjk4ODkzMjQ5NWM0NzcxNmM2Y2VjOTBk
YjQ4Zjg2OWZlZmNmMWY5Li4zY2EyNDYyYjlhZDY0MTliYTBmZmVlYWUyMTg3YjcyMDY0MDUzNTIy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3Vy
Y2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJj
ZS5jcHAKQEAgLTE1Myw4ICsxNTMsOCBAQCBib29sIENhY2hlZFJhd1Jlc291cmNlOjpjYW5SZXVz
ZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIG5ld1JlcXVlc3QpIGNvbnN0CiAKICAgICBIVFRQSGVh
ZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBuZXdIZWFkZXJzLmVuZCgpOwogICAgIGZvciAo
SFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaSA9IG5ld0hlYWRlcnMuYmVnaW4oKTsgaSAh
PSBlbmQ7ICsraSkgewotICAgICAgICBBdG9taWNTdHJpbmcgaGVhZGVyTmFtZSA9IGktPmZpcnN0
OwotICAgICAgICBpZiAoaS0+c2Vjb25kICE9IG9sZEhlYWRlcnMuZ2V0KGhlYWRlck5hbWUpKQor
ICAgICAgICBBdG9taWNTdHJpbmcgaGVhZGVyTmFtZSA9IGktPmtleTsKKyAgICAgICAgaWYgKGkt
PnZhbHVlICE9IG9sZEhlYWRlcnMuZ2V0KGhlYWRlck5hbWUpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwCmluZGV4IDQyZTE4NjhiNGQwMjI4MGRhZTIxZmVi
MWY2NzIyNmY4NWRhYWNlYjEuLmUxZDVlZTg0N2I4Y2QzOTc2M2Y4NDFkMjI1ZGFhMmRmODkzMThh
MzUgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJj
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNw
cApAQCAtNjEzLDggKzYxMyw4IEBAIHZvaWQgQ2FjaGVkUmVzb3VyY2U6OnN3aXRjaENsaWVudHNU
b1JldmFsaWRhdGVkUmVzb3VyY2UoKQogICAgIFZlY3RvcjxDYWNoZWRSZXNvdXJjZUNsaWVudCo+
IGNsaWVudHNUb01vdmU7CiAgICAgSGFzaENvdW50ZWRTZXQ8Q2FjaGVkUmVzb3VyY2VDbGllbnQq
Pjo6aXRlcmF0b3IgZW5kMiA9IG1fY2xpZW50cy5lbmQoKTsKICAgICBmb3IgKEhhc2hDb3VudGVk
U2V0PENhY2hlZFJlc291cmNlQ2xpZW50Kj46Oml0ZXJhdG9yIGl0ID0gbV9jbGllbnRzLmJlZ2lu
KCk7IGl0ICE9IGVuZDI7ICsraXQpIHsKLSAgICAgICAgQ2FjaGVkUmVzb3VyY2VDbGllbnQqIGNs
aWVudCA9IGl0LT5maXJzdDsKLSAgICAgICAgdW5zaWduZWQgY291bnQgPSBpdC0+c2Vjb25kOwor
ICAgICAgICBDYWNoZWRSZXNvdXJjZUNsaWVudCogY2xpZW50ID0gaXQtPmtleTsKKyAgICAgICAg
dW5zaWduZWQgY291bnQgPSBpdC0+dmFsdWU7CiAgICAgICAgIHdoaWxlIChjb3VudCkgewogICAg
ICAgICAgICAgY2xpZW50c1RvTW92ZS5hcHBlbmQoY2xpZW50KTsKICAgICAgICAgICAgIC0tY291
bnQ7CkBAIC02NDgsOSArNjQ4LDkgQEAgdm9pZCBDYWNoZWRSZXNvdXJjZTo6dXBkYXRlUmVzcG9u
c2VBZnRlclJldmFsaWRhdGlvbihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiB2YWwKICAgICBIVFRQ
SGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBuZXdIZWFkZXJzLmVuZCgpOwogICAgIGZv
ciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBuZXdIZWFkZXJzLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAvLyBEb24ndCBhbGxvdyAzMDQgcmVzcG9uc2Ug
dG8gdXBkYXRlIGNvbnRlbnQgaGVhZGVycywgdGhlc2UgY2FuJ3QgY2hhbmdlIGJ1dCBzb21lIHNl
cnZlcnMgc2VuZCB3cm9uZyB2YWx1ZXMuCi0gICAgICAgIGlmIChpdC0+Zmlyc3Quc3RhcnRzV2l0
aChjb250ZW50SGVhZGVyUHJlZml4LCBmYWxzZSkpCisgICAgICAgIGlmIChpdC0+a2V5LnN0YXJ0
c1dpdGgoY29udGVudEhlYWRlclByZWZpeCwgZmFsc2UpKQogICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIG1fcmVzcG9uc2Uuc2V0SFRUUEhlYWRlckZpZWxkKGl0LT5maXJzdCwgaXQtPnNl
Y29uZCk7CisgICAgICAgIG1fcmVzcG9uc2Uuc2V0SFRUUEhlYWRlckZpZWxkKGl0LT5rZXksIGl0
LT52YWx1ZSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
Y2FjaGUvQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9jYWNoZS9DYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlci5oCmluZGV4IDhiMzc4MGI1ZTY0YjIx
NDM0NjI4OTZiZGEyYTZhMjY1YTVhOGEwNzQuLjc5MzNiMGI4MTRjNTIxMjU2ZTA3NjBmODYxYjQz
MTA5N2I4OWI1OWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZWRSZXNvdXJjZUNsaWVudFdhbGtlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNo
ZS9DYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlci5oCkBAIC00Miw3ICs0Miw3IEBAIHB1YmxpYzoK
ICAgICAgICAgSXRlcmF0b3IgZW5kID0gc2V0LmVuZCgpOwogICAgICAgICBzaXplX3QgY2xpZW50
SW5kZXggPSAwOwogICAgICAgICBmb3IgKEl0ZXJhdG9yIGN1cnJlbnQgPSBzZXQuYmVnaW4oKTsg
Y3VycmVudCAhPSBlbmQ7ICsrY3VycmVudCkKLSAgICAgICAgICAgIG1fY2xpZW50VmVjdG9yW2Ns
aWVudEluZGV4KytdID0gY3VycmVudC0+Zmlyc3Q7CisgICAgICAgICAgICBtX2NsaWVudFZlY3Rv
cltjbGllbnRJbmRleCsrXSA9IGN1cnJlbnQtPmtleTsKICAgICB9CiAKICAgICBUKiBuZXh0KCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxv
YWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXIuY3BwCmluZGV4IGJlMGQ5ZDc4YTdmODJmNmYyZGQzZDliMTJiMGM5Y2RkZTBlYjViNmUuLjQy
ZGIyYmQ2MzNlNmNkMzQzODY5MjIyZjRlNWYxNTIxMjUzMzE4NGUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcApAQCAtMTI5
LDcgKzEyOSw3IEBAIENhY2hlZFJlc291cmNlTG9hZGVyOjp+Q2FjaGVkUmVzb3VyY2VMb2FkZXIo
KQogICAgIGNsZWFyUHJlbG9hZHMoKTsKICAgICBEb2N1bWVudFJlc291cmNlTWFwOjppdGVyYXRv
ciBlbmQgPSBtX2RvY3VtZW50UmVzb3VyY2VzLmVuZCgpOwogICAgIGZvciAoRG9jdW1lbnRSZXNv
dXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX2RvY3VtZW50UmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+c2V0T3duaW5nQ2FjaGVkUmVzb3VyY2VM
b2FkZXIoMCk7CisgICAgICAgIGl0LT52YWx1ZS0+c2V0T3duaW5nQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXIoMCk7CiAKICAgICAvLyBNYWtlIHN1cmUgbm8gcmVxdWVzdHMgc3RpbGwgcG9pbnQgdG8gdGhp
cyBDYWNoZWRSZXNvdXJjZUxvYWRlcgogICAgIEFTU0VSVChtX3JlcXVlc3RDb3VudCA9PSAwKTsK
QEAgLTQxMyw3ICs0MTMsNyBAQCBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSZXNvdXJjZT4g
Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RSZXNvdXJjZShDYWNoZQogICAgIGlmIChtZW1v
cnlDYWNoZSgpLT5kaXNhYmxlZCgpKSB7CiAgICAgICAgIERvY3VtZW50UmVzb3VyY2VNYXA6Oml0
ZXJhdG9yIGl0ID0gbV9kb2N1bWVudFJlc291cmNlcy5maW5kKHVybC5zdHJpbmcoKSk7CiAgICAg
ICAgIGlmIChpdCAhPSBtX2RvY3VtZW50UmVzb3VyY2VzLmVuZCgpKSB7Ci0gICAgICAgICAgICBp
dC0+c2Vjb25kLT5zZXRPd25pbmdDYWNoZWRSZXNvdXJjZUxvYWRlcigwKTsKKyAgICAgICAgICAg
IGl0LT52YWx1ZS0+c2V0T3duaW5nQ2FjaGVkUmVzb3VyY2VMb2FkZXIoMCk7CiAgICAgICAgICAg
ICBtX2RvY3VtZW50UmVzb3VyY2VzLnJlbW92ZShpdCk7CiAgICAgICAgIH0KICAgICB9CkBAIC02
NTEsNyArNjUxLDcgQEAgdm9pZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVsb2FkSW1hZ2VzSWZO
b3REZWZlcnJlZCgpCiB7CiAgICAgRG9jdW1lbnRSZXNvdXJjZU1hcDo6aXRlcmF0b3IgZW5kID0g
bV9kb2N1bWVudFJlc291cmNlcy5lbmQoKTsKICAgICBmb3IgKERvY3VtZW50UmVzb3VyY2VNYXA6
Oml0ZXJhdG9yIGl0ID0gbV9kb2N1bWVudFJlc291cmNlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKLSAgICAgICAgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlID0gaXQtPnNlY29uZC5nZXQo
KTsKKyAgICAgICAgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlID0gaXQtPnZhbHVlLmdldCgpOwog
ICAgICAgICBpZiAocmVzb3VyY2UtPnR5cGUoKSA9PSBDYWNoZWRSZXNvdXJjZTo6SW1hZ2VSZXNv
dXJjZSAmJiByZXNvdXJjZS0+c3RpbGxOZWVkc0xvYWQoKSAmJiAhY2xpZW50RGVmZXJzSW1hZ2Uo
cmVzb3VyY2UtPnVybCgpKSkKICAgICAgICAgICAgIGNvbnN0X2Nhc3Q8Q2FjaGVkUmVzb3VyY2Uq
PihyZXNvdXJjZSktPmxvYWQodGhpcywgZGVmYXVsdENhY2hlZFJlc291cmNlT3B0aW9ucygpKTsK
ICAgICB9CkBAIC02NjcsNyArNjY3LDcgQEAgdm9pZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVt
b3ZlQ2FjaGVkUmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlKSBjb25zdAogI2lmbmRl
ZiBOREVCVUcKICAgICBEb2N1bWVudFJlc291cmNlTWFwOjppdGVyYXRvciBpdCA9IG1fZG9jdW1l
bnRSZXNvdXJjZXMuZmluZChyZXNvdXJjZS0+dXJsKCkpOwogICAgIGlmIChpdCAhPSBtX2RvY3Vt
ZW50UmVzb3VyY2VzLmVuZCgpKQotICAgICAgICBBU1NFUlQoaXQtPnNlY29uZC5nZXQoKSA9PSBy
ZXNvdXJjZSk7CisgICAgICAgIEFTU0VSVChpdC0+dmFsdWUuZ2V0KCkgPT0gcmVzb3VyY2UpOwog
I2VuZGlmCiAgICAgbV9kb2N1bWVudFJlc291cmNlcy5yZW1vdmUocmVzb3VyY2UtPnVybCgpKTsK
IH0KQEAgLTcwMSw5ICs3MDEsOSBAQCB2b2lkIENhY2hlZFJlc291cmNlTG9hZGVyOjpnYXJiYWdl
Q29sbGVjdERvY3VtZW50UmVzb3VyY2VzKCkKICAgICBTdHJpbmdWZWN0b3IgcmVzb3VyY2VzVG9E
ZWxldGU7CiAKICAgICBmb3IgKERvY3VtZW50UmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9k
b2N1bWVudFJlc291cmNlcy5iZWdpbigpOyBpdCAhPSBtX2RvY3VtZW50UmVzb3VyY2VzLmVuZCgp
OyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kLT5oYXNPbmVIYW5kbGUoKSkgewotICAg
ICAgICAgICAgcmVzb3VyY2VzVG9EZWxldGUuYXBwZW5kKGl0LT5maXJzdCk7Ci0gICAgICAgICAg
ICBpdC0+c2Vjb25kLT5zZXRPd25pbmdDYWNoZWRSZXNvdXJjZUxvYWRlcigwKTsKKyAgICAgICAg
aWYgKGl0LT52YWx1ZS0+aGFzT25lSGFuZGxlKCkpIHsKKyAgICAgICAgICAgIHJlc291cmNlc1Rv
RGVsZXRlLmFwcGVuZChpdC0+a2V5KTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+c2V0T3duaW5n
Q2FjaGVkUmVzb3VyY2VMb2FkZXIoMCk7CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuY3BwCmluZGV4IDEwYzllNmJiMTgzNzI0YjBi
NGVjMDM5MGMyNzlhODE2ZjljMGEyYmEuLjg2NDM4YmE3NzM4NjliMmMxNTk3NjM2M2VhZjE5YTEz
MDc0OWM1ZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9NZW1vcnlD
YWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmNw
cApAQCAtNTQyLDcgKzU0Miw3IEBAIHZvaWQgTWVtb3J5Q2FjaGU6OnJlbW92ZVJlc291cmNlc1dp
dGhPcmlnaW4oU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKIAogICAgIENhY2hlZFJlc291cmNlTWFw
OjppdGVyYXRvciBlID0gbV9yZXNvdXJjZXMuZW5kKCk7CiAgICAgZm9yIChDYWNoZWRSZXNvdXJj
ZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSBlOyArK2l0KSB7
Ci0gICAgICAgIENhY2hlZFJlc291cmNlKiByZXNvdXJjZSA9IGl0LT5zZWNvbmQ7CisgICAgICAg
IENhY2hlZFJlc291cmNlKiByZXNvdXJjZSA9IGl0LT52YWx1ZTsKICAgICAgICAgUmVmUHRyPFNl
Y3VyaXR5T3JpZ2luPiByZXNvdXJjZU9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGVGcm9t
U3RyaW5nKHJlc291cmNlLT51cmwoKSk7CiAgICAgICAgIGlmICghcmVzb3VyY2VPcmlnaW4pCiAg
ICAgICAgICAgICBjb250aW51ZTsKQEAgLTU1OCw3ICs1NTgsNyBAQCB2b2lkIE1lbW9yeUNhY2hl
OjpnZXRPcmlnaW5zV2l0aENhY2hlKFNlY3VyaXR5T3JpZ2luU2V0JiBvcmlnaW5zKQogewogICAg
IENhY2hlZFJlc291cmNlTWFwOjppdGVyYXRvciBlID0gbV9yZXNvdXJjZXMuZW5kKCk7CiAgICAg
Zm9yIChDYWNoZWRSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5iZWdpbigp
OyBpdCAhPSBlOyArK2l0KQotICAgICAgICBvcmlnaW5zLmFkZChTZWN1cml0eU9yaWdpbjo6Y3Jl
YXRlRnJvbVN0cmluZyhpdC0+c2Vjb25kLT51cmwoKSkpOworICAgICAgICBvcmlnaW5zLmFkZChT
ZWN1cml0eU9yaWdpbjo6Y3JlYXRlRnJvbVN0cmluZyhpdC0+dmFsdWUtPnVybCgpKSk7CiB9CiAK
IHZvaWQgTWVtb3J5Q2FjaGU6OnJlbW92ZUZyb21MaXZlRGVjb2RlZFJlc291cmNlc0xpc3QoQ2Fj
aGVkUmVzb3VyY2UqIHJlc291cmNlKQpAQCAtNjkxLDcgKzY5MSw3IEBAIE1lbW9yeUNhY2hlOjpT
dGF0aXN0aWNzIE1lbW9yeUNhY2hlOjpnZXRTdGF0aXN0aWNzKCkKICAgICBTdGF0aXN0aWNzIHN0
YXRzOwogICAgIENhY2hlZFJlc291cmNlTWFwOjppdGVyYXRvciBlID0gbV9yZXNvdXJjZXMuZW5k
KCk7CiAgICAgZm9yIChDYWNoZWRSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaSA9IG1fcmVzb3VyY2Vz
LmJlZ2luKCk7IGkgIT0gZTsgKytpKSB7Ci0gICAgICAgIENhY2hlZFJlc291cmNlKiByZXNvdXJj
ZSA9IGktPnNlY29uZDsKKyAgICAgICAgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlID0gaS0+dmFs
dWU7CiAgICAgICAgIHN3aXRjaCAocmVzb3VyY2UtPnR5cGUoKSkgewogICAgICAgICBjYXNlIENh
Y2hlZFJlc291cmNlOjpJbWFnZVJlc291cmNlOgogICAgICAgICAgICAgc3RhdHMuaW1hZ2VzLmFk
ZFJlc291cmNlKHJlc291cmNlKTsKQEAgLTczNSw3ICs3MzUsNyBAQCB2b2lkIE1lbW9yeUNhY2hl
OjpzZXREaXNhYmxlZChib29sIGRpc2FibGVkKQogICAgICAgICBDYWNoZWRSZXNvdXJjZU1hcDo6
aXRlcmF0b3IgaSA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7CiAgICAgICAgIGlmIChpID09IG1fcmVz
b3VyY2VzLmVuZCgpKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGV2aWN0KGktPnNlY29u
ZCk7CisgICAgICAgIGV2aWN0KGktPnZhbHVlKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuY3BwCmluZGV4IDk0YTRiOTAyNDI1NzFhN2M3ODcz
NDk2NTdmYWE2MjNmMWU2ZTFjM2YuLjE2M2Y2YmQ1MzVlYWJkNWFkNTY0Yzg4ZjA1OTA5MjdiYzhl
MTMwMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFz
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmNwcApA
QCAtMTkyLDcgKzE5Miw3IEBAIHZvaWQgSWNvbkRhdGFiYXNlOjpyZW1vdmVBbGxJY29ucygpCiAg
ICAgICAgIEhhc2hNYXA8U3RyaW5nLCBQYWdlVVJMUmVjb3JkKj46Oml0ZXJhdG9yIGl0ZXIgPSBt
X3BhZ2VVUkxUb1JlY29yZE1hcC5iZWdpbigpOwogICAgICAgICBIYXNoTWFwPFN0cmluZywgUGFn
ZVVSTFJlY29yZCo+OjppdGVyYXRvciBlbmQgPSBtX3BhZ2VVUkxUb1JlY29yZE1hcC5lbmQoKTsK
ICAgICAgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCi0gICAgICAgICAgICAoKml0ZXIp
LnNlY29uZC0+c2V0SWNvblJlY29yZCgwKTsKKyAgICAgICAgICAgICgqaXRlcikudmFsdWUtPnNl
dEljb25SZWNvcmQoMCk7CiAgICAgICAgICAgICAKICAgICAgICAgLy8gQ2xlYXIgdGhlIGljb25V
UkwgLT4gSWNvblJlY29yZCBtYXAKICAgICAgICAgbV9pY29uVVJMVG9SZWNvcmRNYXAuY2xlYXIo
KTsKQEAgLTc4NSw3ICs3ODUsNyBAQCBzaXplX3QgSWNvbkRhdGFiYXNlOjppY29uUmVjb3JkQ291
bnRXaXRoRGF0YSgpCiAgICAgSGFzaE1hcDxTdHJpbmcsIEljb25SZWNvcmQqPjo6aXRlcmF0b3Ig
ZW5kID0gbV9pY29uVVJMVG9SZWNvcmRNYXAuZW5kKCk7CiAgICAgCiAgICAgZm9yICg7IGkgIT0g
ZW5kOyArK2kpCi0gICAgICAgIHJlc3VsdCArPSAoKCppKS5zZWNvbmQtPmltYWdlRGF0YVN0YXR1
cygpID09IEltYWdlRGF0YVN0YXR1c1ByZXNlbnQpOworICAgICAgICByZXN1bHQgKz0gKCgqaSku
dmFsdWUtPmltYWdlRGF0YVN0YXR1cygpID09IEltYWdlRGF0YVN0YXR1c1ByZXNlbnQpOwogICAg
ICAgICAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTE1MDcsMTMgKzE1MDcsMTMgQEAg
dm9pZCBJY29uRGF0YWJhc2U6OnBlcmZvcm1QZW5kaW5nUmV0YWluQW5kUmVsZWFzZU9wZXJhdGlv
bnMoKQogICAgIH0KIAogICAgIGZvciAoSGFzaENvdW50ZWRTZXQ8U3RyaW5nPjo6Y29uc3RfaXRl
cmF0b3IgaXQgPSB0b1JldGFpbi5iZWdpbigpLCBlbmQgPSB0b1JldGFpbi5lbmQoKTsgaXQgIT0g
ZW5kOyArK2l0KSB7Ci0gICAgICAgIEFTU0VSVCghaXQtPmZpcnN0LmltcGwoKSB8fCBpdC0+Zmly
c3QuaW1wbCgpLT5oYXNPbmVSZWYoKSk7Ci0gICAgICAgIHBlcmZvcm1SZXRhaW5JY29uRm9yUGFn
ZVVSTChpdC0+Zmlyc3QsIGl0LT5zZWNvbmQpOworICAgICAgICBBU1NFUlQoIWl0LT5rZXkuaW1w
bCgpIHx8IGl0LT5rZXkuaW1wbCgpLT5oYXNPbmVSZWYoKSk7CisgICAgICAgIHBlcmZvcm1SZXRh
aW5JY29uRm9yUGFnZVVSTChpdC0+a2V5LCBpdC0+dmFsdWUpOwogICAgIH0KIAogICAgIGZvciAo
SGFzaENvdW50ZWRTZXQ8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSB0b1JlbGVhc2UuYmVn
aW4oKSwgZW5kID0gdG9SZWxlYXNlLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAg
QVNTRVJUKCFpdC0+Zmlyc3QuaW1wbCgpIHx8IGl0LT5maXJzdC5pbXBsKCktPmhhc09uZVJlZigp
KTsKLSAgICAgICAgcGVyZm9ybVJlbGVhc2VJY29uRm9yUGFnZVVSTChpdC0+Zmlyc3QsIGl0LT5z
ZWNvbmQpOworICAgICAgICBBU1NFUlQoIWl0LT5rZXkuaW1wbCgpIHx8IGl0LT5rZXkuaW1wbCgp
LT5oYXNPbmVSZWYoKSk7CisgICAgICAgIHBlcmZvcm1SZWxlYXNlSWNvbkZvclBhZ2VVUkwoaXQt
PmtleSwgaXQtPnZhbHVlKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRE9NV2luZG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcApp
bmRleCA2ZTk2ZTk3Yjk2NGI1MWIzODgzYjE2ZDJlNTMyMjZlYzk4ZDM0NWZkLi43MWFkZTQxMWMx
ZWI0NzE0NmY4N2Q1YjZmMDk1MzdmZjRkZjVlNTFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0RPTVdpbmRvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cu
Y3BwCkBAIC0yNDgsNyArMjQ4LDcgQEAgYm9vbCBET01XaW5kb3c6OmRpc3BhdGNoQWxsUGVuZGlu
Z0JlZm9yZVVubG9hZEV2ZW50cygpCiAgICAgVmVjdG9yPFJlZlB0cjxET01XaW5kb3c+ID4gd2lu
ZG93czsKICAgICBET01XaW5kb3dTZXQ6Oml0ZXJhdG9yIGVuZCA9IHNldC5lbmQoKTsKICAgICBm
b3IgKERPTVdpbmRvd1NldDo6aXRlcmF0b3IgaXQgPSBzZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KQotICAgICAgICB3aW5kb3dzLmFwcGVuZChpdC0+Zmlyc3QpOworICAgICAgICB3aW5kb3dz
LmFwcGVuZChpdC0+a2V5KTsKIAogICAgIHNpemVfdCBzaXplID0gd2luZG93cy5zaXplKCk7CiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKQEAgLTI5MCw3ICsyOTAsNyBA
QCB2b2lkIERPTVdpbmRvdzo6ZGlzcGF0Y2hBbGxQZW5kaW5nVW5sb2FkRXZlbnRzKCkKICAgICBW
ZWN0b3I8UmVmUHRyPERPTVdpbmRvdz4gPiB3aW5kb3dzOwogICAgIERPTVdpbmRvd1NldDo6aXRl
cmF0b3IgZW5kID0gc2V0LmVuZCgpOwogICAgIGZvciAoRE9NV2luZG93U2V0OjppdGVyYXRvciBp
dCA9IHNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHdpbmRvd3MuYXBwZW5k
KGl0LT5maXJzdCk7CisgICAgICAgIHdpbmRvd3MuYXBwZW5kKGl0LT5rZXkpOwogCiAgICAgc2l6
ZV90IHNpemUgPSB3aW5kb3dzLnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNp
emU7ICsraSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4IDJlNjMwMDQy
OTdjZDM3YTUyYmY5MmUzYTgwOTQwYzRlYmU2MWFjOGMuLjJkY2Q0MmMxZDU3YzFhNTU1MTNlZjI3
ZGUxYTc5MWMxNDQzYTQ1ODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRI
YW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKQEAg
LTM3NDgsNyArMzc0OCw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVUb3VjaEV2ZW50KGNv
bnN0IFBsYXRmb3JtVG91Y2hFdmVudCYgZXZlbnQpCiAgICAgICAgIC8vIHJlbGVhc2VkIG9yIGNh
bmNlbGxlZCBpdCB3aWxsIG9ubHkgYXBwZWFyIGluIHRoZSBjaGFuZ2VkVG91Y2hlcyBsaXN0Lgog
ICAgICAgICBpZiAocG9pbnRTdGF0ZSAhPSBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoUmVsZWFz
ZWQgJiYgcG9pbnRTdGF0ZSAhPSBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoQ2FuY2VsbGVkKSB7
CiAgICAgICAgICAgICB0b3VjaGVzLT5hcHBlbmQodG91Y2gpOwotICAgICAgICAgICAgdGFyZ2V0
VG91Y2hlc0l0ZXJhdG9yLT5zZWNvbmQtPmFwcGVuZCh0b3VjaCk7CisgICAgICAgICAgICB0YXJn
ZXRUb3VjaGVzSXRlcmF0b3ItPnZhbHVlLT5hcHBlbmQodG91Y2gpOwogICAgICAgICB9CiAKICAg
ICAgICAgLy8gTm93IGJ1aWxkIHVwIHRoZSBjb3JyZWN0IGxpc3QgZm9yIGNoYW5nZWRUb3VjaGVz
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0ZyYW1lLmNwcAppbmRleCBhMjI5MjI2NTk2NmI4OGVmNmU5ZWFiYjBmZmE1OTBk
ZTZkMjk1ZWEyLi43ZmFjOTEyZGQxNzZlZGZhOWY0ZGRjMmVmNTVhY2RiNDY4YmI4N2VhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0ZyYW1lLmNwcApAQCAtNTc5LDcgKzU3OSw3IEBAIHZvaWQgRnJhbWU6OmluamVjdFVz
ZXJTY3JpcHRzKFVzZXJTY3JpcHRJbmplY3Rpb25UaW1lIGluamVjdGlvblRpbWUpCiAgICAgICAg
IHJldHVybjsKICAgICBVc2VyU2NyaXB0TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSB1c2VyU2Ny
aXB0cy0+ZW5kKCk7CiAgICAgZm9yIChVc2VyU2NyaXB0TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9
IHVzZXJTY3JpcHRzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGluamVjdFVz
ZXJTY3JpcHRzRm9yV29ybGQoaXQtPmZpcnN0LmdldCgpLCAqaXQtPnNlY29uZCwgaW5qZWN0aW9u
VGltZSk7CisgICAgICAgIGluamVjdFVzZXJTY3JpcHRzRm9yV29ybGQoaXQtPmtleS5nZXQoKSwg
Kml0LT52YWx1ZSwgaW5qZWN0aW9uVGltZSk7CiB9CiAKIHZvaWQgRnJhbWU6OmluamVjdFVzZXJT
Y3JpcHRzRm9yV29ybGQoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCwgY29uc3QgVXNlclNjcmlwdFZl
Y3RvciYgdXNlclNjcmlwdHMsIFVzZXJTY3JpcHRJbmplY3Rpb25UaW1lIGluamVjdGlvblRpbWUp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5jcHAKaW5kZXggMGZlZDQ5MTM4NjQ3ZDcxYWEyNDI1ODBk
MzM3ZjAwYjVmNzliMDVjMS4uNzIwZGVmZjY2ZDA4NWE5ZWZiYTBmNGE3MjRjZWU1NDg0ZjFiY2I3
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlR3JvdXAuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmNwcApAQCAtOTQsMTIgKzk0LDEyIEBAIFBhZ2VH
cm91cCogUGFnZUdyb3VwOjpwYWdlR3JvdXAoY29uc3QgU3RyaW5nJiBncm91cE5hbWUpCiAgICAg
UGFnZUdyb3VwTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gcGFnZUdyb3Vwcy0+YWRkKGdyb3VwTmFt
ZSwgMCk7CiAKICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgQVNTRVJUKCFy
ZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7Ci0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25k
ID0gbmV3IFBhZ2VHcm91cChncm91cE5hbWUpOworICAgICAgICBBU1NFUlQoIXJlc3VsdC5pdGVy
YXRvci0+dmFsdWUpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gbmV3IFBhZ2VH
cm91cChncm91cE5hbWUpOwogICAgIH0KIAotICAgIEFTU0VSVChyZXN1bHQuaXRlcmF0b3ItPnNl
Y29uZCk7Ci0gICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgIEFTU0VSVChy
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKKyAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZTsKIH0KIAogdm9pZCBQYWdlR3JvdXA6OmNsb3NlTG9jYWxTdG9yYWdlKCkKQEAgLTExMCw4ICsx
MTAsOCBAQCB2b2lkIFBhZ2VHcm91cDo6Y2xvc2VMb2NhbFN0b3JhZ2UoKQogICAgIFBhZ2VHcm91
cE1hcDo6aXRlcmF0b3IgZW5kID0gcGFnZUdyb3Vwcy0+ZW5kKCk7CiAKICAgICBmb3IgKFBhZ2VH
cm91cE1hcDo6aXRlcmF0b3IgaXQgPSBwYWdlR3JvdXBzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQtPmhhc0xvY2FsU3RvcmFnZSgpKQotICAgICAg
ICAgICAgaXQtPnNlY29uZC0+bG9jYWxTdG9yYWdlKCktPmNsb3NlKCk7CisgICAgICAgIGlmIChp
dC0+dmFsdWUtPmhhc0xvY2FsU3RvcmFnZSgpKQorICAgICAgICAgICAgaXQtPnZhbHVlLT5sb2Nh
bFN0b3JhZ2UoKS0+Y2xvc2UoKTsKICAgICB9CiB9CiAKQEAgLTEyMiw4ICsxMjIsOCBAQCB2b2lk
IFBhZ2VHcm91cDo6Y2xlYXJMb2NhbFN0b3JhZ2VGb3JBbGxPcmlnaW5zKCkKIAogICAgIFBhZ2VH
cm91cE1hcDo6aXRlcmF0b3IgZW5kID0gcGFnZUdyb3Vwcy0+ZW5kKCk7CiAgICAgZm9yIChQYWdl
R3JvdXBNYXA6Oml0ZXJhdG9yIGl0ID0gcGFnZUdyb3Vwcy0+YmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kLT5oYXNMb2NhbFN0b3JhZ2UoKSkKLSAgICAg
ICAgICAgIGl0LT5zZWNvbmQtPmxvY2FsU3RvcmFnZSgpLT5jbGVhckFsbE9yaWdpbnNGb3JEZWxl
dGlvbigpOworICAgICAgICBpZiAoaXQtPnZhbHVlLT5oYXNMb2NhbFN0b3JhZ2UoKSkKKyAgICAg
ICAgICAgIGl0LT52YWx1ZS0+bG9jYWxTdG9yYWdlKCktPmNsZWFyQWxsT3JpZ2luc0ZvckRlbGV0
aW9uKCk7CiAgICAgfQogfQogCkBAIC0xMzQsOCArMTM0LDggQEAgdm9pZCBQYWdlR3JvdXA6OmNs
ZWFyTG9jYWxTdG9yYWdlRm9yT3JpZ2luKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCiAKICAgICBQ
YWdlR3JvdXBNYXA6Oml0ZXJhdG9yIGVuZCA9IHBhZ2VHcm91cHMtPmVuZCgpOwogICAgIGZvciAo
UGFnZUdyb3VwTWFwOjppdGVyYXRvciBpdCA9IHBhZ2VHcm91cHMtPmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnNlY29uZC0+aGFzTG9jYWxTdG9yYWdlKCkpCi0g
ICAgICAgICAgICBpdC0+c2Vjb25kLT5sb2NhbFN0b3JhZ2UoKS0+Y2xlYXJPcmlnaW5Gb3JEZWxl
dGlvbihvcmlnaW4pOworICAgICAgICBpZiAoaXQtPnZhbHVlLT5oYXNMb2NhbFN0b3JhZ2UoKSkK
KyAgICAgICAgICAgIGl0LT52YWx1ZS0+bG9jYWxTdG9yYWdlKCktPmNsZWFyT3JpZ2luRm9yRGVs
ZXRpb24ob3JpZ2luKTsKICAgICB9ICAgIAogfQogICAgIApAQCAtMTQ2LDggKzE0Niw4IEBAIHZv
aWQgUGFnZUdyb3VwOjpzeW5jTG9jYWxTdG9yYWdlKCkKIAogICAgIFBhZ2VHcm91cE1hcDo6aXRl
cmF0b3IgZW5kID0gcGFnZUdyb3Vwcy0+ZW5kKCk7CiAgICAgZm9yIChQYWdlR3JvdXBNYXA6Oml0
ZXJhdG9yIGl0ID0gcGFnZUdyb3Vwcy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAg
ICAgIGlmIChpdC0+c2Vjb25kLT5oYXNMb2NhbFN0b3JhZ2UoKSkKLSAgICAgICAgICAgIGl0LT5z
ZWNvbmQtPmxvY2FsU3RvcmFnZSgpLT5zeW5jKCk7CisgICAgICAgIGlmIChpdC0+dmFsdWUtPmhh
c0xvY2FsU3RvcmFnZSgpKQorICAgICAgICAgICAgaXQtPnZhbHVlLT5sb2NhbFN0b3JhZ2UoKS0+
c3luYygpOwogICAgIH0KIH0KIApAQCAtMjcwLDcgKzI3MCw3IEBAIHZvaWQgUGFnZUdyb3VwOjph
ZGRVc2VyU2NyaXB0VG9Xb3JsZChET01XcmFwcGVyV29ybGQqIHdvcmxkLCBjb25zdCBTdHJpbmcm
IHNvdXJjCiAgICAgT3duUHRyPFVzZXJTY3JpcHQ+IHVzZXJTY3JpcHQgPSBhZG9wdFB0cihuZXcg
VXNlclNjcmlwdChzb3VyY2UsIHVybCwgd2hpdGVsaXN0LCBibGFja2xpc3QsIGluamVjdGlvblRp
bWUsIGluamVjdGVkRnJhbWVzKSk7CiAgICAgaWYgKCFtX3VzZXJTY3JpcHRzKQogICAgICAgICBt
X3VzZXJTY3JpcHRzID0gYWRvcHRQdHIobmV3IFVzZXJTY3JpcHRNYXApOwotICAgIE93blB0cjxV
c2VyU2NyaXB0VmVjdG9yPiYgc2NyaXB0c0luV29ybGQgPSBtX3VzZXJTY3JpcHRzLT5hZGQod29y
bGQsIG51bGxwdHIpLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgT3duUHRyPFVzZXJTY3JpcHRWZWN0
b3I+JiBzY3JpcHRzSW5Xb3JsZCA9IG1fdXNlclNjcmlwdHMtPmFkZCh3b3JsZCwgbnVsbHB0ciku
aXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghc2NyaXB0c0luV29ybGQpCiAgICAgICAgIHNjcmlw
dHNJbldvcmxkID0gYWRvcHRQdHIobmV3IFVzZXJTY3JpcHRWZWN0b3IpOwogICAgIHNjcmlwdHNJ
bldvcmxkLT5hcHBlbmQodXNlclNjcmlwdC5yZWxlYXNlKCkpOwpAQCAtMjg3LDcgKzI4Nyw3IEBA
IHZvaWQgUGFnZUdyb3VwOjphZGRVc2VyU3R5bGVTaGVldFRvV29ybGQoRE9NV3JhcHBlcldvcmxk
KiB3b3JsZCwgY29uc3QgU3RyaW5nJiBzCiAgICAgT3duUHRyPFVzZXJTdHlsZVNoZWV0PiB1c2Vy
U3R5bGVTaGVldCA9IGFkb3B0UHRyKG5ldyBVc2VyU3R5bGVTaGVldChzb3VyY2UsIHVybCwgd2hp
dGVsaXN0LCBibGFja2xpc3QsIGluamVjdGVkRnJhbWVzLCBsZXZlbCkpOwogICAgIGlmICghbV91
c2VyU3R5bGVTaGVldHMpCiAgICAgICAgIG1fdXNlclN0eWxlU2hlZXRzID0gYWRvcHRQdHIobmV3
IFVzZXJTdHlsZVNoZWV0TWFwKTsKLSAgICBPd25QdHI8VXNlclN0eWxlU2hlZXRWZWN0b3I+JiBz
dHlsZVNoZWV0c0luV29ybGQgPSBtX3VzZXJTdHlsZVNoZWV0cy0+YWRkKHdvcmxkLCBudWxscHRy
KS5pdGVyYXRvci0+c2Vjb25kOworICAgIE93blB0cjxVc2VyU3R5bGVTaGVldFZlY3Rvcj4mIHN0
eWxlU2hlZXRzSW5Xb3JsZCA9IG1fdXNlclN0eWxlU2hlZXRzLT5hZGQod29ybGQsIG51bGxwdHIp
Lml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoIXN0eWxlU2hlZXRzSW5Xb3JsZCkKICAgICAgICAg
c3R5bGVTaGVldHNJbldvcmxkID0gYWRvcHRQdHIobmV3IFVzZXJTdHlsZVNoZWV0VmVjdG9yKTsK
ICAgICBzdHlsZVNoZWV0c0luV29ybGQtPmFwcGVuZCh1c2VyU3R5bGVTaGVldC5yZWxlYXNlKCkp
OwpAQCAtMzA3LDcgKzMwNyw3IEBAIHZvaWQgUGFnZUdyb3VwOjpyZW1vdmVVc2VyU2NyaXB0RnJv
bVdvcmxkKERPTVdyYXBwZXJXb3JsZCogd29ybGQsIGNvbnN0IEtVUkwmIHVyCiAgICAgaWYgKGl0
ID09IG1fdXNlclNjcmlwdHMtPmVuZCgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgVXNl
clNjcmlwdFZlY3Rvciogc2NyaXB0cyA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgVXNlclNjcmlw
dFZlY3Rvciogc2NyaXB0cyA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICBmb3IgKGludCBpID0gc2Ny
aXB0cy0+c2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKICAgICAgICAgaWYgKHNjcmlwdHMtPmF0
KGkpLT51cmwoKSA9PSB1cmwpCiAgICAgICAgICAgICBzY3JpcHRzLT5yZW1vdmUoaSk7CkBAIC0z
MjksNyArMzI5LDcgQEAgdm9pZCBQYWdlR3JvdXA6OnJlbW92ZVVzZXJTdHlsZVNoZWV0RnJvbVdv
cmxkKERPTVdyYXBwZXJXb3JsZCogd29ybGQsIGNvbnN0IEtVUkwKICAgICBpZiAoaXQgPT0gbV91
c2VyU3R5bGVTaGVldHMtPmVuZCgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgVXNlclN0
eWxlU2hlZXRWZWN0b3IqIHN0eWxlc2hlZXRzID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICBVc2Vy
U3R5bGVTaGVldFZlY3Rvciogc3R5bGVzaGVldHMgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgZm9y
IChpbnQgaSA9IHN0eWxlc2hlZXRzLT5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgewogICAgICAg
ICBpZiAoc3R5bGVzaGVldHMtPmF0KGkpLT51cmwoKSA9PSB1cmwpIHsKICAgICAgICAgICAgIHN0
eWxlc2hlZXRzLT5yZW1vdmUoaSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Bh
Z2VTZXJpYWxpemVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3Bw
CmluZGV4IGM5MTFkNTRhOTI1NDZhN2NlMTRmMTg2NmVjYmNlZDhiNTZlNTY2M2IuLmExNjE0OTI1
NWM3ZTNlNDI2MDM5YzRhMTMyZmIxNjJiYzdhMTdmZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFn
ZVNlcmlhbGl6ZXIuY3BwCkBAIC0zMzksNyArMzM5LDcgQEAgS1VSTCBQYWdlU2VyaWFsaXplcjo6
dXJsRm9yQmxhbmtGcmFtZShGcmFtZSogZnJhbWUpCiB7CiAgICAgSGFzaE1hcDxGcmFtZSosIEtV
Ukw+OjppdGVyYXRvciBpdGVyID0gbV9ibGFua0ZyYW1lVVJMcy5maW5kKGZyYW1lKTsKICAgICBp
ZiAoaXRlciAhPSBtX2JsYW5rRnJhbWVVUkxzLmVuZCgpKQotICAgICAgICByZXR1cm4gaXRlci0+
c2Vjb25kOworICAgICAgICByZXR1cm4gaXRlci0+dmFsdWU7CiAgICAgU3RyaW5nIHVybCA9ICJ3
eWNpd3lnOi8vZnJhbWUvIiArIFN0cmluZzo6bnVtYmVyKG1fYmxhbmtGcmFtZUNvdW50ZXIrKyk7
CiAgICAgS1VSTCBmYWtlVVJMKFBhcnNlZFVSTFN0cmluZywgdXJsKTsKICAgICBtX2JsYW5rRnJh
bWVVUkxzLmFkZChmcmFtZSwgZmFrZVVSTCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1NlY3VyaXR5UG9saWN5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlQb2xp
Y3kuY3BwCmluZGV4IGMyYTVhYjExNDM1ZWY2ZGIwNTc2OGM3NmNhMDM1N2I1NjI1ODMzMTIuLjVi
MzZmNGY3MTZjNDRiZmIwOWYyMGU2MzJjYzBkMDM4NmYzY2NhM2MgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlQb2xpY3kuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvU2VjdXJpdHlQb2xpY3kuY3BwCkBAIC0xMzMsOSArMTMzLDkgQEAgdm9pZCBTZWN1cml0eVBv
bGljeTo6YWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoY29uc3QgU2VjdXJpdHlPcmlnaW4m
IHNvdXJjZU8KICAgICBTdHJpbmcgc291cmNlU3RyaW5nID0gc291cmNlT3JpZ2luLnRvU3RyaW5n
KCk7CiAgICAgT3JpZ2luQWNjZXNzTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gb3JpZ2luQWNjZXNz
TWFwKCkuYWRkKHNvdXJjZVN0cmluZywgbnVsbHB0cik7CiAgICAgaWYgKHJlc3VsdC5pc05ld0Vu
dHJ5KQotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IGFkb3B0UHRyKG5ldyBPcmln
aW5BY2Nlc3NXaGl0ZUxpc3QpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gYWRv
cHRQdHIobmV3IE9yaWdpbkFjY2Vzc1doaXRlTGlzdCk7CiAKLSAgICBPcmlnaW5BY2Nlc3NXaGl0
ZUxpc3QqIGxpc3QgPSByZXN1bHQuaXRlcmF0b3ItPnNlY29uZC5nZXQoKTsKKyAgICBPcmlnaW5B
Y2Nlc3NXaGl0ZUxpc3QqIGxpc3QgPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpOwogICAg
IGxpc3QtPmFwcGVuZChPcmlnaW5BY2Nlc3NFbnRyeShkZXN0aW5hdGlvblByb3RvY29sLCBkZXN0
aW5hdGlvbkRvbWFpbiwgYWxsb3dEZXN0aW5hdGlvblN1YmRvbWFpbnMgPyBPcmlnaW5BY2Nlc3NF
bnRyeTo6QWxsb3dTdWJkb21haW5zIDogT3JpZ2luQWNjZXNzRW50cnk6OkRpc2FsbG93U3ViZG9t
YWlucykpOwogfQogCkBAIC0xNTIsNyArMTUyLDcgQEAgdm9pZCBTZWN1cml0eVBvbGljeTo6cmVt
b3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoY29uc3QgU2VjdXJpdHlPcmlnaW4mIHNvdXIK
ICAgICBpZiAoaXQgPT0gbWFwLmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBPcmlnaW5B
Y2Nlc3NXaGl0ZUxpc3QqIGxpc3QgPSBpdC0+c2Vjb25kLmdldCgpOworICAgIE9yaWdpbkFjY2Vz
c1doaXRlTGlzdCogbGlzdCA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICBzaXplX3QgaW5kZXggPSBs
aXN0LT5maW5kKE9yaWdpbkFjY2Vzc0VudHJ5KGRlc3RpbmF0aW9uUHJvdG9jb2wsIGRlc3RpbmF0
aW9uRG9tYWluLCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucyA/IE9yaWdpbkFjY2Vzc0VudHJ5
OjpBbGxvd1N1YmRvbWFpbnMgOiBPcmlnaW5BY2Nlc3NFbnRyeTo6RGlzYWxsb3dTdWJkb21haW5z
KSk7CiAgICAgaWYgKGluZGV4ID09IG5vdEZvdW5kKQogICAgICAgICByZXR1cm47CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvU2V0dGluZ3MuY3BwCmluZGV4IGVhZjQ5ZGNlYzA0NDEwN2MyMTk0Mjk4YzVjMzIxNmUzNTU0
ODQzMDguLjViYWYzODdhMzAwYzg2ODVhZWE1OTMwY2EzZjZkZjZlOTlkOTAwMjUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvU2V0dGluZ3MuY3BwCkBAIC02Miw3ICs2Miw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBz
ZXRHZW5lcmljRm9udEZhbWlseU1hcChTY3JpcHRGb250RmFtaWx5TWFwJiBmb250TWFwLCBjb25z
dCBBCiAgICAgICAgIGlmIChpdCA9PSBmb250TWFwLmVuZCgpKQogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICBmb250TWFwLnJlbW92ZShpdCk7Ci0gICAgfSBlbHNlIGlmIChpdCAhPSBmb250
TWFwLmVuZCgpICYmIGl0LT5zZWNvbmQgPT0gZmFtaWx5KQorICAgIH0gZWxzZSBpZiAoaXQgIT0g
Zm9udE1hcC5lbmQoKSAmJiBpdC0+dmFsdWUgPT0gZmFtaWx5KQogICAgICAgICByZXR1cm47CiAg
ICAgZWxzZQogICAgICAgICBmb250TWFwLnNldChzdGF0aWNfY2FzdDxpbnQ+KHNjcmlwdCksIGZh
bWlseSk7CkBAIC03NSw3ICs3NSw3IEBAIHN0YXRpYyBpbmxpbmUgY29uc3QgQXRvbWljU3RyaW5n
JiBnZXRHZW5lcmljRm9udEZhbWlseUZvclNjcmlwdChjb25zdCBTY3JpcHRGb250CiB7CiAgICAg
U2NyaXB0Rm9udEZhbWlseU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBmb250TWFwLmZpbmQoc3Rh
dGljX2Nhc3Q8aW50PihzY3JpcHQpKTsKICAgICBpZiAoaXQgIT0gZm9udE1hcC5lbmQoKSkKLSAg
ICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBpdC0+dmFsdWU7CiAgICAg
aWYgKHNjcmlwdCAhPSBVU0NSSVBUX0NPTU1PTikKICAgICAgICAgcmV0dXJuIGdldEdlbmVyaWNG
b250RmFtaWx5Rm9yU2NyaXB0KGZvbnRNYXAsIFVTQ1JJUFRfQ09NTU9OKTsKICAgICByZXR1cm4g
ZW1wdHlBdG9tOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9TcGVlY2hJbnB1dC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NwZWVjaElucHV0LmNwcAppbmRleCAwMTI4ZWY4YTQw
YTQyNDM1NGFiNWY4ZTUwYmE4ZWNjNjIyNTdiM2M5Li44MzI4YzVkNGRmMzI5OTQyYjU5ZjNlY2My
MjUzNTY4Y2UyYThhMTFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NwZWVjaElu
cHV0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NwZWVjaElucHV0LmNwcApAQCAtNjIs
NyArNjIsNyBAQCBpbnQgU3BlZWNoSW5wdXQ6OnJlZ2lzdGVyTGlzdGVuZXIoU3BlZWNoSW5wdXRM
aXN0ZW5lciogbGlzdGVuZXIpCiAjaWYgZGVmaW5lZChERUJVRykKICAgICAvLyBDaGVjayBpZiBh
bHJlYWR5IHByZXNlbnQuCiAgICAgZm9yIChIYXNoTWFwPGludCwgU3BlZWNoSW5wdXRMaXN0ZW5l
cio+OjppdGVyYXRvciBpdCA9IG1fbGlzdGVuZXJzLmJlZ2luKCk7IGl0ICE9IG1fbGlzdGVuZXJz
LmVuZCgpOyArK2l0KQotICAgICAgQVNTRVJUKGl0LT5zZWNvbmQgIT0gbGlzdGVuZXIpOworICAg
ICAgQVNTRVJUKGl0LT52YWx1ZSAhPSBsaXN0ZW5lcik7CiAjZW5kaWYKIAogICAgIG1fbGlzdGVu
ZXJzLmFkZChtX25leHRMaXN0ZW5lcklkLCBsaXN0ZW5lcik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1RvdWNoRGlzYW1iaWd1YXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9Ub3VjaERpc2FtYmlndWF0aW9uLmNwcAppbmRleCA1NDMxOWE2YTQzMjdkMDRlNDkyZTY2ZTVl
ZjVjYjU0ZDRiOTI0MmNmLi5iNTgyMzM4YzIxNzU3NTA1MDU4NTQ1MzBkY2MwOTc0MjdiMzI1OWE3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RvdWNoRGlzYW1iaWd1YXRpb24uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVG91Y2hEaXNhbWJpZ3VhdGlvbi5jcHAKQEAgLTEw
Niw3ICsxMDYsNyBAQCB2b2lkIGZpbmRHb29kVG91Y2hUYXJnZXRzKGNvbnN0IEludFJlY3QmIHRv
dWNoQm94LCBGcmFtZSogbWFpbkZyYW1lLCBmbG9hdCBwYWdlUwogICAgICAgICAgICAgaWYgKG5v
ZGUtPmlzRG9jdW1lbnROb2RlKCkgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omh0bWxU
YWcpIHx8IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpib2R5VGFnKSkKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIGlmIChub2RlLT53aWxsUmVzcG9uZFRvTW91c2VDbGlj
a0V2ZW50cygpKSB7Ci0gICAgICAgICAgICAgICAgVG91Y2hUYXJnZXREYXRhJiB0YXJnZXREYXRh
ID0gdG91Y2hUYXJnZXRzLmFkZChub2RlLCBUb3VjaFRhcmdldERhdGEoKSkuaXRlcmF0b3ItPnNl
Y29uZDsKKyAgICAgICAgICAgICAgICBUb3VjaFRhcmdldERhdGEmIHRhcmdldERhdGEgPSB0b3Vj
aFRhcmdldHMuYWRkKG5vZGUsIFRvdWNoVGFyZ2V0RGF0YSgpKS5pdGVyYXRvci0+dmFsdWU7CiAg
ICAgICAgICAgICAgICAgdGFyZ2V0RGF0YS53aW5kb3dCb3VuZGluZ0JveCA9IGJvdW5kaW5nQm94
Rm9yRXZlbnROb2Rlcyhub2RlKTsKICAgICAgICAgICAgICAgICB0YXJnZXREYXRhLnNjb3JlID0g
c2NvcmVUb3VjaFRhcmdldCh0b3VjaFBvaW50LCB0b3VjaFBvaW50UGFkZGluZywgdGFyZ2V0RGF0
YS53aW5kb3dCb3VuZGluZ0JveCk7CiAgICAgICAgICAgICAgICAgYmVzdFNjb3JlID0gbWF4KGJl
c3RTY29yZSwgdGFyZ2V0RGF0YS5zY29yZSk7CkBAIC0xMTgsOSArMTE4LDkgQEAgdm9pZCBmaW5k
R29vZFRvdWNoVGFyZ2V0cyhjb25zdCBJbnRSZWN0JiB0b3VjaEJveCwgRnJhbWUqIG1haW5GcmFt
ZSwgZmxvYXQgcGFnZVMKICAgICBmb3IgKEhhc2hNYXA8Tm9kZSosIFRvdWNoVGFyZ2V0RGF0YT46
Oml0ZXJhdG9yIGl0ID0gdG91Y2hUYXJnZXRzLmJlZ2luKCk7IGl0ICE9IHRvdWNoVGFyZ2V0cy5l
bmQoKTsgKytpdCkgewogICAgICAgICAvLyBDdXJyZW50bHkgdGhlIHNjb3JpbmcgZnVuY3Rpb24g
dXNlcyB0aGUgb3ZlcmxhcCBhcmVhIHdpdGggdGhlIGZhdCBwb2ludCBhcyB0aGUgc2NvcmUuCiAg
ICAgICAgIC8vIFdlIGlnbm9yZSB0aGUgY2FuZGlkYXRlcyB0aGF0IGhhcyBsZXNzIHRoYW4gMS8y
IG92ZXJsYXAgKHdlIGNvbnNpZGVyIG5vdCByZWFsbHkgYW1iaWd1b3VzIGVub3VnaCkgdGhhbiB0
aGUgYmVzdCBjYW5kaWRhdGUgdG8gYXZvaWQgZXhjZXNzaXZlIHBvcHVwcy4KLSAgICAgICAgaWYg
KGl0LT5zZWNvbmQuc2NvcmUgPCBiZXN0U2NvcmUgKiAwLjUpCisgICAgICAgIGlmIChpdC0+dmFs
dWUuc2NvcmUgPCBiZXN0U2NvcmUgKiAwLjUpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgZ29vZFRhcmdldHMuYXBwZW5kKGl0LT5zZWNvbmQud2luZG93Qm91bmRpbmdCb3gpOworICAg
ICAgICBnb29kVGFyZ2V0cy5hcHBlbmQoaXQtPnZhbHVlLndpbmRvd0JvdW5kaW5nQm94KTsKICAg
ICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvV2luZG93RmVhdHVyZXMu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9XaW5kb3dGZWF0dXJlcy5jcHAKaW5kZXggNmNkZTli
NWVmMDYwZWNkZTE1ZGEwMTcyNzg3OWNhNGE0MGM1MmY4My4uNzc2OGEwOWNkODU0YWY2YjVmMGZm
MmQ0OWY5ZTRiZDFlNWZmZGE0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9XaW5k
b3dGZWF0dXJlcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9XaW5kb3dGZWF0dXJlcy5j
cHAKQEAgLTIxMSw3ICsyMTEsNyBAQCBib29sIFdpbmRvd0ZlYXR1cmVzOjpib29sRmVhdHVyZShj
b25zdCBEaWFsb2dGZWF0dXJlc01hcCYgZmVhdHVyZXMsIGNvbnN0IGNoYXIqCiAgICAgRGlhbG9n
RmVhdHVyZXNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZmVhdHVyZXMuZmluZChrZXkpOwogICAg
IGlmIChpdCA9PSBmZWF0dXJlcy5lbmQoKSkKICAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTsK
LSAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0gaXQtPnNlY29uZDsKKyAgICBjb25zdCBTdHJpbmcm
IHZhbHVlID0gaXQtPnZhbHVlOwogICAgIHJldHVybiB2YWx1ZS5pc051bGwoKSB8fCB2YWx1ZSA9
PSAiMSIgfHwgdmFsdWUgPT0gInllcyIgfHwgdmFsdWUgPT0gIm9uIjsKIH0KIApAQCAtMjIzLDcg
KzIyMyw3IEBAIGZsb2F0IFdpbmRvd0ZlYXR1cmVzOjpmbG9hdEZlYXR1cmUoY29uc3QgRGlhbG9n
RmVhdHVyZXNNYXAmIGZlYXR1cmVzLCBjb25zdCBjaGFyCiAgICAgLy8gRklYTUU6IFRoZSB0b0Rv
dWJsZSBmdW5jdGlvbiBkb2VzIG5vdCBvZmZlciBhIHdheSB0byB0ZWxsICIwcSIgZnJvbSBzdHJp
bmcgd2l0aCBubyBkaWdpdHMgaW4gaXQ6IEJvdGgKICAgICAvLyByZXR1cm4gdGhlIG51bWJlciAw
IGFuZCBmYWxzZSBmb3Igb2suIEJ1dCAiMHEiIHNob3VsZCB5aWVsZCB0aGUgbWluaW11bSByYXRo
ZXIgdGhhbiB0aGUgZGVmYXVsdC4KICAgICBib29sIG9rOwotICAgIGRvdWJsZSBwYXJzZWROdW1i
ZXIgPSBpdC0+c2Vjb25kLnRvRG91YmxlKCZvayk7CisgICAgZG91YmxlIHBhcnNlZE51bWJlciA9
IGl0LT52YWx1ZS50b0RvdWJsZSgmb2spOwogICAgIGlmICgocGFyc2VkTnVtYmVyID09IDAgJiYg
IW9rKSB8fCBpc25hbihwYXJzZWROdW1iZXIpKQogICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVl
OwogICAgIGlmIChwYXJzZWROdW1iZXIgPCBtaW4gfHwgbWF4IDw9IG1pbikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKaW5k
ZXggYzQ5MTE5ZTZhMTNjMDE0YzhmMjU4ZTI5NDYxMzgxMWNkZmEwZDUxYi4uNWUwNzE3ZTBhOWNm
YmEzMjg5ODI5NTYyMTc3OTEyYzA2Zjc4YzhiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKQEAgLTkzLDE0ICs5Mywx
NCBAQCBkb3VibGUgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnVwZGF0ZUFuaW1hdGlvbnMo
U2V0Q2hhbmdlZCBjYWxsU2V0Q2hhbmdlZC8qCiAKICAgICBSZW5kZXJPYmplY3RBbmltYXRpb25N
YXA6OmNvbnN0X2l0ZXJhdG9yIGFuaW1hdGlvbnNFbmQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMu
ZW5kKCk7CiAgICAgZm9yIChSZW5kZXJPYmplY3RBbmltYXRpb25NYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGFuaW1hdGlvbnNFbmQ7
ICsraXQpIHsKLSAgICAgICAgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wQW5pbSA9IGl0LT5zZWNv
bmQuZ2V0KCk7CisgICAgICAgIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcEFuaW0gPSBpdC0+dmFs
dWUuZ2V0KCk7CiAgICAgICAgIGlmICghY29tcEFuaW0tPnN1c3BlbmRlZCgpICYmIGNvbXBBbmlt
LT5oYXNBbmltYXRpb25zKCkpIHsKICAgICAgICAgICAgIGRvdWJsZSB0ID0gY29tcEFuaW0tPnRp
bWVUb05leHRTZXJ2aWNlKCk7CiAgICAgICAgICAgICBpZiAodCAhPSAtMSAmJiAodCA8IHRpbWVU
b05leHRTZXJ2aWNlIHx8IHRpbWVUb05leHRTZXJ2aWNlID09IC0xKSkKICAgICAgICAgICAgICAg
ICB0aW1lVG9OZXh0U2VydmljZSA9IHQ7CiAgICAgICAgICAgICBpZiAoIXRpbWVUb05leHRTZXJ2
aWNlKSB7CiAgICAgICAgICAgICAgICAgaWYgKGNhbGxTZXRDaGFuZ2VkID09IENhbGxTZXRDaGFu
Z2VkKSB7Ci0gICAgICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBpdC0+Zmlyc3QtPm5vZGUo
KTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGl0LT5rZXktPm5vZGUoKTsKICAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKCFub2RlIHx8IChub2RlLT5kb2N1bWVudCgpICYmICFu
b2RlLT5kb2N1bWVudCgpLT5pblBhZ2VDYWNoZSgpKSk7CiAgICAgICAgICAgICAgICAgICAgIG5v
ZGUtPnNldE5lZWRzU3R5bGVSZWNhbGMoU3ludGhldGljU3R5bGVDaGFuZ2UpOwogICAgICAgICAg
ICAgICAgICAgICBjYWxsZWRTZXRDaGFuZ2VkID0gdHJ1ZTsKQEAgLTI5Miw5ICsyOTIsOSBAQCB2
b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpzdXNwZW5kQW5pbWF0aW9uc0ZvckRvY3Vt
ZW50KERvY3VtZW50KiBkb2N1bWVudAogICAgIAogICAgIFJlbmRlck9iamVjdEFuaW1hdGlvbk1h
cDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5l
bmQoKTsKICAgICBmb3IgKFJlbmRlck9iamVjdEFuaW1hdGlvbk1hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gYW5pbWF0aW9uc0VuZDsg
KytpdCkgewotICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gaXQtPmZpcnN0OworICAg
ICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gaXQtPmtleTsKICAgICAgICAgaWYgKHJlbmRl
cmVyLT5kb2N1bWVudCgpID09IGRvY3VtZW50KSB7Ci0gICAgICAgICAgICBDb21wb3NpdGVBbmlt
YXRpb24qIGNvbXBBbmltID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgIENvbXBvc2l0
ZUFuaW1hdGlvbiogY29tcEFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBjb21w
QW5pbS0+c3VzcGVuZEFuaW1hdGlvbnMoKTsKICAgICAgICAgfQogICAgIH0KQEAgLTMwOCw5ICsz
MDgsOSBAQCB2b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpyZXN1bWVBbmltYXRpb25z
Rm9yRG9jdW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50KQogICAgIAogICAgIFJlbmRlck9iamVjdEFu
aW1hdGlvbk1hcDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fY29tcG9zaXRlQW5p
bWF0aW9ucy5lbmQoKTsKICAgICBmb3IgKFJlbmRlck9iamVjdEFuaW1hdGlvbk1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gYW5pbWF0
aW9uc0VuZDsgKytpdCkgewotICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gaXQtPmZp
cnN0OworICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gaXQtPmtleTsKICAgICAgICAg
aWYgKHJlbmRlcmVyLT5kb2N1bWVudCgpID09IGRvY3VtZW50KSB7Ci0gICAgICAgICAgICBDb21w
b3NpdGVBbmltYXRpb24qIGNvbXBBbmltID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAg
IENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcEFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAg
ICAgICBjb21wQW5pbS0+cmVzdW1lQW5pbWF0aW9ucygpOwogICAgICAgICB9CiAgICAgfQpAQCAt
Mzk2LDggKzM5Niw4IEBAIHVuc2lnbmVkIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpudW1i
ZXJPZkFjdGl2ZUFuaW1hdGlvbnMoRG9jdW1lbnQqIGRvY3VtZW50CiAgICAgCiAgICAgUmVuZGVy
T2JqZWN0QW5pbWF0aW9uTWFwOjpjb25zdF9pdGVyYXRvciBhbmltYXRpb25zRW5kID0gbV9jb21w
b3NpdGVBbmltYXRpb25zLmVuZCgpOwogICAgIGZvciAoUmVuZGVyT2JqZWN0QW5pbWF0aW9uTWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5iZWdpbigpOyBpdCAh
PSBhbmltYXRpb25zRW5kOyArK2l0KSB7Ci0gICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIg
PSBpdC0+Zmlyc3Q7Ci0gICAgICAgIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcEFuaW0gPSBpdC0+
c2Vjb25kLmdldCgpOworICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gaXQtPmtleTsK
KyAgICAgICAgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wQW5pbSA9IGl0LT52YWx1ZS5nZXQoKTsK
ICAgICAgICAgaWYgKHJlbmRlcmVyLT5kb2N1bWVudCgpID09IGRvY3VtZW50KQogICAgICAgICAg
ICAgY291bnQgKz0gY29tcEFuaW0tPm51bWJlck9mQWN0aXZlQW5pbWF0aW9ucygpOwogICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1h
dGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRp
b24uY3BwCmluZGV4IGYzNTc3ODE4OTc0MGVlMzZlOGEzM2E1MGFmNmNhZDU2OTI5MGY5NmIuLjBi
MGYzNzlkNTZhYmQ4NWM2M2JhZTE0Y2U1ZWEyYjQ5YWIxM2VlOGUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmNwcApAQCAtNTgs
NyArNTgsNyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6Y2xlYXJSZW5kZXJlcigpCiAgICAg
ICAgIC8vIGFuIGFuaW1hdGlvbiBjYWxsYmFjayAoc2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMjA1MikKICAgICAgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01h
cDo6Y29uc3RfaXRlcmF0b3IgdHJhbnNpdGlvbnNFbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOwog
ICAgICAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSB0cmFuc2l0aW9uc0VuZDsgKytpdCkgewot
ICAgICAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIHRyYW5zaXRpb24gPSBpdC0+c2Vjb25kLmdl
dCgpOworICAgICAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIHRyYW5zaXRpb24gPSBpdC0+dmFs
dWUuZ2V0KCk7CiAgICAgICAgICAgICBhbmltYXRpb25Db250cm9sbGVyKCktPmFuaW1hdGlvbldp
bGxCZVJlbW92ZWQodHJhbnNpdGlvbik7CiAgICAgICAgICAgICB0cmFuc2l0aW9uLT5jbGVhcigp
OwogICAgICAgICB9CkBAIC02Nyw3ICs2Nyw3IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpj
bGVhclJlbmRlcmVyKCkKICAgICAgICAgbV9rZXlmcmFtZUFuaW1hdGlvbnMuY2hlY2tDb25zaXN0
ZW5jeSgpOwogICAgICAgICBBbmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBhbmltYXRp
b25zRW5kID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuZW5kKCk7CiAgICAgICAgIGZvciAoQW5pbWF0
aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5iZWdp
bigpOyBpdCAhPSBhbmltYXRpb25zRW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBLZXlmcmFtZUFu
aW1hdGlvbiogYW5pbSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBLZXlmcmFtZUFu
aW1hdGlvbiogYW5pbSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGFuaW1hdGlvbkNv
bnRyb2xsZXIoKS0+YW5pbWF0aW9uV2lsbEJlUmVtb3ZlZChhbmltKTsKICAgICAgICAgICAgIGFu
aW0tPmNsZWFyKCk7CiAgICAgICAgIH0KQEAgLTg0LDcgKzg0LDcgQEAgdm9pZCBDb21wb3NpdGVB
bmltYXRpb246OnVwZGF0ZVRyYW5zaXRpb25zKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIFJlbmRl
clN0eWxlKgogICAgIC8vIGluIHRoZSBuZXh0IGxvb3AgYW5kIHRoZW4gdG9zcyB0aGUgb25lcyB0
aGF0IGRpZG4ndCBnZXQgbWFya2VkLgogICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IG1fdHJhbnNpdGlvbnMuZW5kKCk7CiAgICAgZm9yIChDU1NQcm9w
ZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5zZXRBY3RpdmUoZmFs
c2UpOworICAgICAgICBpdC0+dmFsdWUtPnNldEFjdGl2ZShmYWxzZSk7CiAgICAgICAgIAogICAg
IFJlZlB0cjxSZW5kZXJTdHlsZT4gbW9kaWZpZWRDdXJyZW50U3R5bGU7CiAgICAgCkBAIC0xODEs
NyArMTgxLDcgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnVwZGF0ZVRyYW5zaXRpb25zKFJl
bmRlck9iamVjdCogcmVuZGVyZXIsIFJlbmRlclN0eWxlKgogICAgIFZlY3RvcjxpbnQ+IHRvQmVS
ZW1vdmVkOwogICAgIGVuZCA9IG1fdHJhbnNpdGlvbnMuZW5kKCk7CiAgICAgZm9yIChDU1NQcm9w
ZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmlt
ID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGFuaW0gPSBp
dC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgIGlmICghYW5pbS0+YWN0aXZlKCkpIHsKICAgICAgICAg
ICAgIGFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+YW5pbWF0aW9uV2lsbEJlUmVtb3ZlZChhbmltKTsK
ICAgICAgICAgICAgIHRvQmVSZW1vdmVkLmFwcGVuZChhbmltLT5hbmltYXRpbmdQcm9wZXJ0eSgp
KTsKQEAgLTIwNywxMyArMjA3LDEzIEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVL
ZXlmcmFtZUFuaW1hdGlvbnMoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgUmVuZGVyCiAgICAgICAg
IC8vIFRoZSBjdXJyZW50IGFuZCB0YXJnZXQgYW5pbWF0aW9ucyBhcmUgdGhlIHNhbWUgc28gd2Ug
anVzdCBuZWVkIHRvIHRvc3MgYW55IAogICAgICAgICAvLyBhbmltYXRpb24gd2hpY2ggaXMgZmlu
aXNoZWQgKHBvc3RBY3RpdmUpLgogICAgICAgICBmb3IgKEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0ga2ZlbmQ7
ICsraXQpIHsKLSAgICAgICAgICAgIGlmIChpdC0+c2Vjb25kLT5wb3N0QWN0aXZlKCkpCi0gICAg
ICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0SW5kZXgoLTEpOworICAgICAgICAgICAgaWYgKGl0
LT52YWx1ZS0+cG9zdEFjdGl2ZSgpKQorICAgICAgICAgICAgICAgIGl0LT52YWx1ZS0+c2V0SW5k
ZXgoLTEpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gTWFyayBhbGwgZXhp
c3RpbmcgYW5pbWF0aW9ucyBhcyBubyBsb25nZXIgYWN0aXZlLgogICAgICAgICBmb3IgKEFuaW1h
dGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVn
aW4oKTsgaXQgIT0ga2ZlbmQ7ICsraXQpCi0gICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRJbmRl
eCgtMSk7CisgICAgICAgICAgICBpdC0+dmFsdWUtPnNldEluZGV4KC0xKTsKICAgICAgICAgICAg
IAogICAgICAgICAvLyBUb3NzIHRoZSBhbmltYXRpb24gb3JkZXIgbWFwLgogICAgICAgICBtX2tl
eWZyYW1lQW5pbWF0aW9uT3JkZXJNYXAuY2xlYXIoKTsKQEAgLTI2Miw3ICsyNjIsNyBAQCB2b2lk
IENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlS2V5ZnJhbWVBbmltYXRpb25zKFJlbmRlck9iamVj
dCogcmVuZGVyZXIsIFJlbmRlcgogICAgIFZlY3RvcjxBdG9taWNTdHJpbmdJbXBsKj4gYW5pbXNU
b0JlUmVtb3ZlZDsKICAgICBrZmVuZCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmVuZCgpOwogICAg
IGZvciAoQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lQW5p
bWF0aW9ucy5iZWdpbigpOyBpdCAhPSBrZmVuZDsgKytpdCkgewotICAgICAgICBLZXlmcmFtZUFu
aW1hdGlvbioga2V5ZnJhbWVBbmltID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgS2V5ZnJh
bWVBbmltYXRpb24qIGtleWZyYW1lQW5pbSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgaWYg
KGtleWZyYW1lQW5pbS0+aW5kZXgoKSA8IDApIHsKICAgICAgICAgICAgIGFuaW1zVG9CZVJlbW92
ZWQuYXBwZW5kKGtleWZyYW1lQW5pbS0+bmFtZSgpLmltcGwoKSk7CiAgICAgICAgICAgICBhbmlt
YXRpb25Db250cm9sbGVyKCktPmFuaW1hdGlvbldpbGxCZVJlbW92ZWQoa2V5ZnJhbWVBbmltKTsK
QEAgLTI5MCw3ICsyOTAsNyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBDb21wb3NpdGVBbmlt
YXRpb246OmFuaW1hdGUoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgUmVuZAogICAgICAgICBpZiAo
IW1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBDU1NQcm9wZXJ0eVRyYW5z
aXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOwogICAg
ICAgICAgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZC5nZXQoKSkKKyAg
ICAgICAgICAgICAgICBpZiAoSW1wbGljaXRBbmltYXRpb24qIGFuaW0gPSBpdC0+dmFsdWUuZ2V0
KCkpCiAgICAgICAgICAgICAgICAgICAgIGFuaW0tPmFuaW1hdGUodGhpcywgcmVuZGVyZXIsIGN1
cnJlbnRTdHlsZSwgdGFyZ2V0U3R5bGUsIHJlc3VsdFN0eWxlKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQpAQCAtMzEyLDcgKzMxMiw3IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IENvbXBv
c2l0ZUFuaW1hdGlvbjo6Z2V0QW5pbWF0ZWRTdHlsZSgpIGNvbnN0CiAgICAgUmVmUHRyPFJlbmRl
clN0eWxlPiByZXN1bHRTdHlsZTsKICAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25z
dF9pdGVyYXRvciBlbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOwogICAgIGZvciAoQ1NTUHJvcGVy
dHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoSW1wbGljaXRBbmltYXRpb24qIGlt
cGxpY2l0QW5pbWF0aW9uID0gaXQtPnNlY29uZC5nZXQoKSkKKyAgICAgICAgaWYgKEltcGxpY2l0
QW5pbWF0aW9uKiBpbXBsaWNpdEFuaW1hdGlvbiA9IGl0LT52YWx1ZS5nZXQoKSkKICAgICAgICAg
ICAgIGltcGxpY2l0QW5pbWF0aW9uLT5nZXRBbmltYXRlZFN0eWxlKHJlc3VsdFN0eWxlKTsKICAg
ICB9CiAKQEAgLTMzMyw3ICszMzMsNyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6c2V0QW5p
bWF0aW5nKGJvb2wgYW5pbWF0aW5nKQogICAgIGlmICghbV90cmFuc2l0aW9ucy5pc0VtcHR5KCkp
IHsKICAgICAgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgdHJh
bnNpdGlvbnNFbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOwogICAgICAgICBmb3IgKENTU1Byb3Bl
cnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdp
bigpOyBpdCAhPSB0cmFuc2l0aW9uc0VuZDsgKytpdCkgewotICAgICAgICAgICAgSW1wbGljaXRB
bmltYXRpb24qIHRyYW5zaXRpb24gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgSW1w
bGljaXRBbmltYXRpb24qIHRyYW5zaXRpb24gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAg
ICB0cmFuc2l0aW9uLT5zZXRBbmltYXRpbmcoYW5pbWF0aW5nKTsKICAgICAgICAgfQogICAgIH0K
QEAgLTM0MSw3ICszNDEsNyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6c2V0QW5pbWF0aW5n
KGJvb2wgYW5pbWF0aW5nKQogICAgICAgICBtX2tleWZyYW1lQW5pbWF0aW9ucy5jaGVja0NvbnNp
c3RlbmN5KCk7CiAgICAgICAgIEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGFuaW1h
dGlvbnNFbmQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5lbmQoKTsKICAgICAgICAgZm9yIChBbmlt
YXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmJl
Z2luKCk7IGl0ICE9IGFuaW1hdGlvbnNFbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIEtleWZyYW1l
QW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgIEtleWZyYW1l
QW5pbWF0aW9uKiBhbmltID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAgICAgYW5pbS0+c2V0
QW5pbWF0aW5nKGFuaW1hdGluZyk7CiAgICAgICAgIH0KICAgICB9CkBAIC0zNTYsNyArMzU2LDcg
QEAgZG91YmxlIENvbXBvc2l0ZUFuaW1hdGlvbjo6dGltZVRvTmV4dFNlcnZpY2UoKSBjb25zdAog
ICAgIGlmICghbV90cmFuc2l0aW9ucy5pc0VtcHR5KCkpIHsKICAgICAgICAgQ1NTUHJvcGVydHlU
cmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgdHJhbnNpdGlvbnNFbmQgPSBtX3RyYW5zaXRp
b25zLmVuZCgpOwogICAgICAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSB0cmFuc2l0aW9uc0Vu
ZDsgKytpdCkgewotICAgICAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIHRyYW5zaXRpb24gPSBp
dC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIHRyYW5zaXRp
b24gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBkb3VibGUgdCA9IHRyYW5zaXRpb24g
PyB0cmFuc2l0aW9uLT50aW1lVG9OZXh0U2VydmljZSgpIDogLTE7CiAgICAgICAgICAgICBpZiAo
dCA8IG1pblQgfHwgbWluVCA9PSAtMSkKICAgICAgICAgICAgICAgICBtaW5UID0gdDsKQEAgLTM2
OCw3ICszNjgsNyBAQCBkb3VibGUgQ29tcG9zaXRlQW5pbWF0aW9uOjp0aW1lVG9OZXh0U2Vydmlj
ZSgpIGNvbnN0CiAgICAgICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zLmNoZWNrQ29uc2lzdGVuY3ko
KTsKICAgICAgICAgQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0Vu
ZCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmVuZCgpOwogICAgICAgICBmb3IgKEFuaW1hdGlvbk5h
bWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsg
aXQgIT0gYW5pbWF0aW9uc0VuZDsgKytpdCkgewotICAgICAgICAgICAgS2V5ZnJhbWVBbmltYXRp
b24qIGFuaW1hdGlvbiA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBLZXlmcmFtZUFu
aW1hdGlvbiogYW5pbWF0aW9uID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAgICAgZG91Ymxl
IHQgPSBhbmltYXRpb24gPyBhbmltYXRpb24tPnRpbWVUb05leHRTZXJ2aWNlKCkgOiAtMTsKICAg
ICAgICAgICAgIGlmICh0IDwgbWluVCB8fCBtaW5UID09IC0xKQogICAgICAgICAgICAgICAgIG1p
blQgPSB0OwpAQCAtMzkwLDcgKzM5MCw3IEBAIFBhc3NSZWZQdHI8S2V5ZnJhbWVBbmltYXRpb24+
IENvbXBvc2l0ZUFuaW1hdGlvbjo6Z2V0QW5pbWF0aW9uRm9yUHJvcGVydHkoQ1NTUHJvCiAgICAg
ICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsKICAgICAgICAgQW5p
bWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fa2V5ZnJhbWVB
bmltYXRpb25zLmVuZCgpOwogICAgICAgICBmb3IgKEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gYW5pbWF0aW9u
c0VuZDsgKytpdCkgewotICAgICAgICAgICAgUmVmUHRyPEtleWZyYW1lQW5pbWF0aW9uPiBhbmlt
ID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIFJlZlB0cjxLZXlmcmFtZUFuaW1hdGlvbj4gYW5p
bSA9IGl0LT52YWx1ZTsKICAgICAgICAgICAgIGlmIChhbmltLT5oYXNBbmltYXRpb25Gb3JQcm9w
ZXJ0eShwcm9wZXJ0eSkpCiAgICAgICAgICAgICAgICAgcmV0dmFsID0gYW5pbTsKICAgICAgICAg
fQpAQCAtNDEwLDE0ICs0MTAsMTQgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnN1c3BlbmRB
bmltYXRpb25zKCkKICAgICAgICAgbV9rZXlmcmFtZUFuaW1hdGlvbnMuY2hlY2tDb25zaXN0ZW5j
eSgpOwogICAgICAgICBBbmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBhbmltYXRpb25z
RW5kID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuZW5kKCk7CiAgICAgICAgIGZvciAoQW5pbWF0aW9u
TmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5iZWdpbigp
OyBpdCAhPSBhbmltYXRpb25zRW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAoS2V5ZnJhbWVB
bmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kLmdldCgpKQorICAgICAgICAgICAgaWYgKEtleWZy
YW1lQW5pbWF0aW9uKiBhbmltID0gaXQtPnZhbHVlLmdldCgpKQogICAgICAgICAgICAgICAgIGFu
aW0tPnVwZGF0ZVBsYXlTdGF0ZShBbmltUGxheVN0YXRlUGF1c2VkKTsKICAgICAgICAgfQogICAg
IH0KICAgICBpZiAoIW1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSB7CiAgICAgICAgIENTU1Byb3Bl
cnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIHRyYW5zaXRpb25zRW5kID0gbV90cmFu
c2l0aW9ucy5lbmQoKTsKICAgICAgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gdHJhbnNpdGlv
bnNFbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQt
PnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQt
PnZhbHVlLmdldCgpOwogICAgICAgICAgICAgaWYgKGFuaW0gJiYgYW5pbS0+aGFzU3R5bGUoKSkK
ICAgICAgICAgICAgICAgICBhbmltLT51cGRhdGVQbGF5U3RhdGUoQW5pbVBsYXlTdGF0ZVBhdXNl
ZCk7CiAgICAgICAgIH0KQEAgLTQzNSw3ICs0MzUsNyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlv
bjo6cmVzdW1lQW5pbWF0aW9ucygpCiAgICAgICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zLmNoZWNr
Q29uc2lzdGVuY3koKTsKICAgICAgICAgQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3Ig
YW5pbWF0aW9uc0VuZCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmVuZCgpOwogICAgICAgICBmb3Ig
KEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlv
bnMuYmVnaW4oKTsgaXQgIT0gYW5pbWF0aW9uc0VuZDsgKytpdCkgewotICAgICAgICAgICAgS2V5
ZnJhbWVBbmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgS2V5
ZnJhbWVBbmltYXRpb24qIGFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBpZiAo
YW5pbSAmJiBhbmltLT5wbGF5U3RhdGVQbGF5aW5nKCkpCiAgICAgICAgICAgICAgICAgYW5pbS0+
dXBkYXRlUGxheVN0YXRlKEFuaW1QbGF5U3RhdGVQbGF5aW5nKTsKICAgICAgICAgfQpAQCAtNDQ0
LDcgKzQ0NCw3IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpyZXN1bWVBbmltYXRpb25zKCkK
ICAgICBpZiAoIW1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSB7CiAgICAgICAgIENTU1Byb3BlcnR5
VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIHRyYW5zaXRpb25zRW5kID0gbV90cmFuc2l0
aW9ucy5lbmQoKTsKICAgICAgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gdHJhbnNpdGlvbnNF
bmQ7ICsraXQpIHsKLSAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnNl
Y29uZC5nZXQoKTsKKyAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnZh
bHVlLmdldCgpOwogICAgICAgICAgICAgaWYgKGFuaW0gJiYgYW5pbS0+aGFzU3R5bGUoKSkKICAg
ICAgICAgICAgICAgICBhbmltLT51cGRhdGVQbGF5U3RhdGUoQW5pbVBsYXlTdGF0ZVBsYXlpbmcp
OwogICAgICAgICB9CkBAIC00NTYsNyArNDU2LDcgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246
Om92ZXJyaWRlSW1wbGljaXRBbmltYXRpb25zKENTU1Byb3BlcnR5SUQgcHJvcGVydHkpCiAgICAg
Q1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV90cmFuc2l0
aW9ucy5lbmQoKTsKICAgICBpZiAoIW1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSB7CiAgICAgICAg
IGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Ry
YW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgSW1wbGlj
aXRBbmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgSW1wbGlj
aXRBbmltYXRpb24qIGFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoYW5p
bSAmJiBhbmltLT5hbmltYXRpbmdQcm9wZXJ0eSgpID09IHByb3BlcnR5KQogICAgICAgICAgICAg
ICAgIGFuaW0tPnNldE92ZXJyaWRkZW4odHJ1ZSk7CiAgICAgICAgIH0KQEAgLTQ2OCw3ICs0Njgs
NyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6cmVzdW1lT3ZlcnJpZGRlbkltcGxpY2l0QW5p
bWF0aW9ucyhDU1NQcm9wZXJ0eUlEIHByb3BlcgogICAgIGlmICghbV90cmFuc2l0aW9ucy5pc0Vt
cHR5KCkpIHsKICAgICAgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKICAgICAgICAgZm9yIChDU1NQcm9wZXJ0eVRy
YW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9
IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9
IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGlmIChhbmltICYmIGFuaW0tPmFuaW1hdGlu
Z1Byb3BlcnR5KCkgPT0gcHJvcGVydHkpCiAgICAgICAgICAgICAgICAgYW5pbS0+c2V0T3ZlcnJp
ZGRlbihmYWxzZSk7CiAgICAgICAgIH0KQEAgLTQ4MSw3ICs0ODEsNyBAQCBib29sIENvbXBvc2l0
ZUFuaW1hdGlvbjo6aXNBbmltYXRpbmdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBi
b29sIGFjY2VsZQogICAgICAgICBtX2tleWZyYW1lQW5pbWF0aW9ucy5jaGVja0NvbnNpc3RlbmN5
KCk7CiAgICAgICAgIEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGFuaW1hdGlvbnNF
bmQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5lbmQoKTsKICAgICAgICAgZm9yIChBbmltYXRpb25O
YW1lTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmJlZ2luKCk7
IGl0ICE9IGFuaW1hdGlvbnNFbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIEtleWZyYW1lQW5pbWF0
aW9uKiBhbmltID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgIEtleWZyYW1lQW5pbWF0
aW9uKiBhbmltID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAgICAgaWYgKGFuaW0gJiYgYW5p
bS0+aXNBbmltYXRpbmdQcm9wZXJ0eShwcm9wZXJ0eSwgYWNjZWxlcmF0ZWRPbmx5LCBpc1J1bm5p
bmdOb3cpKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC00OTAs
NyArNDkwLDcgQEAgYm9vbCBDb21wb3NpdGVBbmltYXRpb246OmlzQW5pbWF0aW5nUHJvcGVydHko
Q1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgYm9vbCBhY2NlbGUKICAgICBpZiAoIW1fdHJhbnNpdGlv
bnMuaXNFbXB0eSgpKSB7CiAgICAgICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0
X2l0ZXJhdG9yIHRyYW5zaXRpb25zRW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKICAgICAgICAg
Zm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJh
bnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gdHJhbnNpdGlvbnNFbmQ7ICsraXQpIHsKLSAgICAgICAg
ICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAg
ICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAg
ICAgaWYgKGFuaW0gJiYgYW5pbS0+aXNBbmltYXRpbmdQcm9wZXJ0eShwcm9wZXJ0eSwgYWNjZWxl
cmF0ZWRPbmx5LCBpc1J1bm5pbmdOb3cpKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICB9CkBAIC01NTYsNyArNTU2LDcgQEAgdW5zaWduZWQgQ29tcG9zaXRlQW5pbWF0aW9u
OjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoKSBjb25zdAogICAgICAgICBtX2tleWZyYW1lQW5p
bWF0aW9ucy5jaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgICAgIEFuaW1hdGlvbk5hbWVNYXA6OmNv
bnN0X2l0ZXJhdG9yIGFuaW1hdGlvbnNFbmQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5lbmQoKTsK
ICAgICAgICAgZm9yIChBbmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5
ZnJhbWVBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGFuaW1hdGlvbnNFbmQ7ICsraXQpIHsKLSAg
ICAgICAgICAgIEtleWZyYW1lQW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZC5nZXQoKTsKKyAg
ICAgICAgICAgIEtleWZyYW1lQW5pbWF0aW9uKiBhbmltID0gaXQtPnZhbHVlLmdldCgpOwogICAg
ICAgICAgICAgaWYgKGFuaW0tPnJ1bm5pbmcoKSkKICAgICAgICAgICAgICAgICArK2NvdW50Owog
ICAgICAgICB9CkBAIC01NjUsNyArNTY1LDcgQEAgdW5zaWduZWQgQ29tcG9zaXRlQW5pbWF0aW9u
OjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoKSBjb25zdAogICAgIGlmICghbV90cmFuc2l0aW9u
cy5pc0VtcHR5KCkpIHsKICAgICAgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3Rf
aXRlcmF0b3IgdHJhbnNpdGlvbnNFbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOwogICAgICAgICBm
b3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFu
c2l0aW9ucy5iZWdpbigpOyBpdCAhPSB0cmFuc2l0aW9uc0VuZDsgKytpdCkgewotICAgICAgICAg
ICAgSW1wbGljaXRBbmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAg
ICAgSW1wbGljaXRBbmltYXRpb24qIGFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAg
ICBpZiAoYW5pbS0+cnVubmluZygpKQogICAgICAgICAgICAgICAgICsrY291bnQ7CiAgICAgICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xhbmd1YWdlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xhbmd1YWdlLmNwcAppbmRleCAyYWYyYTIwNmU1NWUxN2E5
MzI1NzhlMDhmMjg1NTI0MjRlOWU0NGZkLi5kYmEzYTg5ZmJiYzEzN2M1OGZjY2FlOTM4YjRhZjFj
YTQ4ZTFkNmNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MYW5ndWFnZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGFuZ3VhZ2UuY3BwCkBAIC01Myw3ICs1
Myw3IEBAIHZvaWQgbGFuZ3VhZ2VEaWRDaGFuZ2UoKQogewogICAgIE9ic2VydmVyTWFwOjppdGVy
YXRvciBlbmQgPSBvYnNlcnZlck1hcCgpLmVuZCgpOwogICAgIGZvciAoT2JzZXJ2ZXJNYXA6Oml0
ZXJhdG9yIGl0ZXIgPSBvYnNlcnZlck1hcCgpLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIp
Ci0gICAgICAgIGl0ZXItPnNlY29uZChpdGVyLT5maXJzdCk7CisgICAgICAgIGl0ZXItPnZhbHVl
KGl0ZXItPmtleSk7CiB9CiAKIFN0cmluZyBkZWZhdWx0TGFuZ3VhZ2UoKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmNwcAppbmRleCBjMTg4Y2Q4YmRmNDA1MDIz
NmY1ZjAzOGFkOTFjZGZmYzZkZmQzY2UxLi40NDBiNDI5OWFiY2JkYTEzNzNjNmU2YjFhZmM1ZGI4
MjMyNzg3YjQ1IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NSU1FVHlwZVJl
Z2lzdHJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5
LmNwcApAQCAtNzA0LDcgKzcwNCw3IEBAIFN0cmluZyBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXROb3Jt
YWxpemVkTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKICAgICBNSU1FVHlwZUFzc29j
aWF0aW9uTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1pbWVUeXBlQXNzb2NpYXRpb25NYXAoKS5m
aW5kKG1pbWVUeXBlKTsKIAogICAgIGlmIChpdCAhPSBtaW1lVHlwZUFzc29jaWF0aW9uTWFwKCku
ZW5kKCkpCi0gICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gaXQtPnZh
bHVlOwogI2VuZGlmCiAgICAgcmV0dXJuIG1pbWVUeXBlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vSFJURkVsZXZhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9IUlRGRWxldmF0aW9uLmNwcAppbmRleCAyNWU0NTg5NjI1ZGNjZmQ3
ZjRkM2I1NGFmNzUzMmQ4ZTgzZjI2Mjc4Li5jZmUxM2VkODUzMDZiNTE3MTJhYTMwNzRiOWM4ZGMz
OTJjZDQ2NTJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9IUlRG
RWxldmF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9IUlRGRWxl
dmF0aW9uLmNwcApAQCAtNzksNyArNzksNyBAQCBzdGF0aWMgQXVkaW9CdXMqIGdldENvbmNhdGVu
YXRlZEltcHVsc2VSZXNwb25zZXNGb3JTdWJqZWN0KGNvbnN0IFN0cmluZyYgc3ViamVjdAogICAg
ICAgICBidXMgPSBjb25jYXRlbmF0ZWRJbXB1bHNlUmVzcG9uc2VzLmxlYWtQdHIoKTsKICAgICAg
ICAgYXVkaW9CdXNNYXAuc2V0KHN1YmplY3ROYW1lLCBidXMpOwogICAgIH0gZWxzZQotICAgICAg
ICBidXMgPSBpdGVyYXRvci0+c2Vjb25kOworICAgICAgICBidXMgPSBpdGVyYXRvci0+dmFsdWU7
CiAKICAgICBzaXplX3QgcmVzcG9uc2VMZW5ndGggPSBidXMtPmxlbmd0aCgpOwogICAgIHNpemVf
dCBleHBlY3RlZExlbmd0aCA9IHN0YXRpY19jYXN0PHNpemVfdD4oVG90YWxOdW1iZXJPZlJlc3Bv
bnNlcyAqIFJlc3BvbnNlRnJhbWVTaXplKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2JsYWNrYmVycnkvQ29va2llTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ibGFja2JlcnJ5L0Nvb2tpZU1hbmFnZXIuY3BwCmluZGV4IGRiMDEyYmZiNDBhZTA5YmEw
YmZhYzQzMGQwNmFjYmM3ZjBlYjVjYzAuLmYyNTU0OTQxYjdlZWU4MzJiYjg4NzI0NTE4MTNhZWMx
OTFlYzI4NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkv
Q29va2llTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJy
eS9Db29raWVNYW5hZ2VyLmNwcApAQCAtMTc5LDcgKzE3OSw3IEBAIFN0cmluZyBDb29raWVNYW5h
Z2VyOjpnZW5lcmF0ZUh0bWxGcmFnbWVudEZvckNvb2tpZXMoKQogCiAgICAgVmVjdG9yPFBhcnNl
ZENvb2tpZSo+IGNvb2tpZUNhbmRpZGF0ZXM7CiAgICAgZm9yIChIYXNoTWFwPFN0cmluZywgQ29v
a2llTWFwKj46Oml0ZXJhdG9yIGl0ID0gbV9tYW5hZ2VyTWFwLmJlZ2luKCk7IGl0ICE9IG1fbWFu
YWdlck1hcC5lbmQoKTsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+Z2V0QWxsQ2hpbGRDb29r
aWVzKCZjb29raWVDYW5kaWRhdGVzKTsKKyAgICAgICAgaXQtPnZhbHVlLT5nZXRBbGxDaGlsZENv
b2tpZXMoJmNvb2tpZUNhbmRpZGF0ZXMpOwogCiAgICAgU3RyaW5nIHJlc3VsdDsKICAgICBQYXJz
ZWRDb29raWUqIGNvb2tpZSA9IDA7CkBAIC0zMTcsNyArMzE3LDcgQEAgdm9pZCBDb29raWVNYW5h
Z2VyOjpyZW1vdmVBbGxDb29raWVzKEJhY2tpbmdTdG9yZVJlbW92YWxQb2xpY3kgYmFja2luZ1N0
b3JlUmVtb3YKICAgICBIYXNoTWFwPFN0cmluZywgQ29va2llTWFwKj46Oml0ZXJhdG9yIGZpcnN0
ID0gbV9tYW5hZ2VyTWFwLmJlZ2luKCk7CiAgICAgSGFzaE1hcDxTdHJpbmcsIENvb2tpZU1hcCo+
OjppdGVyYXRvciBlbmQgPSBtX21hbmFnZXJNYXAuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPFN0
cmluZywgQ29va2llTWFwKj46Oml0ZXJhdG9yIGl0ID0gZmlyc3Q7IGl0ICE9IGVuZDsgKytpdCkK
LSAgICAgICAgaXQtPnNlY29uZC0+ZGVsZXRlQWxsQ29va2llc0FuZERvbWFpbnMoKTsKKyAgICAg
ICAgaXQtPnZhbHVlLT5kZWxldGVBbGxDb29raWVzQW5kRG9tYWlucygpOwogCiAgICAgaWYgKGJh
Y2tpbmdTdG9yZVJlbW92YWwgPT0gUmVtb3ZlRnJvbUJhY2tpbmdTdG9yZSkKICAgICAgICAgbV9j
b29raWVCYWNraW5nU3RvcmUtPnJlbW92ZUFsbCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9Db29raWVNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYmxhY2tiZXJyeS9Db29raWVNYXAuY3BwCmluZGV4IGJiZTlhN2NlZGY3M2Y3MGQ1MGM0
ZGQwNzI0ZjRhNWQ2YTAxNWM3YTguLmFmNDg1YjU0YzIwZWNjZmNhMGFhNGQ5OTVmYjcyMGE0NTM0
ZDc4YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvQ29v
a2llTWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0Nvb2tp
ZU1hcC5jcHAKQEAgLTE3Miw3ICsxNzIsNyBAQCBQYXJzZWRDb29raWUqIENvb2tpZU1hcDo6cmVt
b3ZlT2xkZXN0Q29va2llKCkKICAgICAgICAgQ29va2llTG9nKCJDb29raWVNYXAgLSBsb29raW5n
IGludG8gc3ViZG9tYWlucyIpOwogCiAgICAgICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIENvb2tp
ZU1hcCo+OjppdGVyYXRvciBpdCA9IG1fc3ViZG9tYWlucy5iZWdpbigpOyBpdCAhPSBtX3N1YmRv
bWFpbnMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgICAgIG9sZGVzdENvb2tpZSA9IGl0LT5zZWNv
bmQtPnJlbW92ZU9sZGVzdENvb2tpZSgpOworICAgICAgICAgICAgb2xkZXN0Q29va2llID0gaXQt
PnZhbHVlLT5yZW1vdmVPbGRlc3RDb29raWUoKTsKICAgICAgICAgICAgIGlmIChvbGRlc3RDb29r
aWUpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTIxNCw3ICsyMTQsNyBA
QCB2b2lkIENvb2tpZU1hcDo6Z2V0QWxsQ2hpbGRDb29raWVzKFZlY3RvcjxQYXJzZWRDb29raWUq
Piogc3RhY2tPZkNvb2tpZXMpCiAgICAgQ29va2llTG9nKCJDb29raWVNYXAgLSBnZXRBbGxDaGls
ZENvb2tpZXMgaW4gTWFwIC0gJXMiLCBnZXROYW1lKCkudXRmOCgpLmRhdGEoKSk7CiAgICAgZ2V0
QWxsQ29va2llcyhzdGFja09mQ29va2llcyk7CiAgICAgZm9yIChIYXNoTWFwPFN0cmluZywgQ29v
a2llTWFwKj46Oml0ZXJhdG9yIGl0ID0gbV9zdWJkb21haW5zLmJlZ2luKCk7IGl0ICE9IG1fc3Vi
ZG9tYWlucy5lbmQoKTsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+Z2V0QWxsQ2hpbGRDb29r
aWVzKHN0YWNrT2ZDb29raWVzKTsKKyAgICAgICAgaXQtPnZhbHVlLT5nZXRBbGxDaGlsZENvb2tp
ZXMoc3RhY2tPZkNvb2tpZXMpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9CaW5hcnlQcm9wZXJ0eUxpc3QuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2YvQmluYXJ5UHJvcGVydHlMaXN0LmNwcAppbmRleCBi
ZWMyZWM5NTA2NDRjOTkzYmU4OWFiMzVlMGI4NjdhOGI2MTI2MDg4Li5iMjdkN2Q3Y2QzYzE0Mzg2
MGVjNjU4YmVlYjJkNmU3NzJlOTQyYzUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jZi9CaW5hcnlQcm9wZXJ0eUxpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2NmL0JpbmFyeVByb3BlcnR5TGlzdC5jcHAKQEAgLTIyOSw3ICsyMjksNyBAQCB2b2lkIEJp
bmFyeVByb3BlcnR5TGlzdFBsYW46OndyaXRlSW50ZWdlckFycmF5KGNvbnN0IGludCogaW50ZWdl
cnMsIHNpemVfdCBzaXplKQogICAgICAgICByZXR1cm47CiAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBzaXplOyArK2kpCiAgICAgICAgIHdyaXRlSW50ZWdlcihpbnRlZ2Vyc1tpXSk7Ci0gICAg
YWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBtX2N1cnJlbnRPYmplY3RSZWZlcmVuY2UrKzsK
KyAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gbV9jdXJyZW50T2JqZWN0UmVmZXJlbmNl
Kys7CiAgICAgd3JpdGVBcnJheU9iamVjdChzaXplKTsKICAgICBtX2N1cnJlbnRBZ2dyZWdhdGVT
aXplID0gc2F2ZWRBZ2dyZWdhdGVTaXplOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJIVFRQTG9hZEluZm8uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJIVFRQTG9hZEluZm8uY3BwCmluZGV4
IDMzZWFjZTFkMmRmMjExYjc2OTUyYjY3NGYwYjk1NzBjOTM0ZTdjYzYuLjVjZDcyNjAxMTBkNjI3
ZjdiYTg0NmQzZDQ3NTZhODJiZGE2ZWM5MzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViSFRUUExvYWRJbmZvLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYkhUVFBMb2FkSW5mby5jcHAKQEAg
LTEwNiw3ICsxMDYsNyBAQCBzdGF0aWMgdm9pZCBhZGRIZWFkZXIoSFRUUEhlYWRlck1hcCogbWFw
LCBjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYlN0cmluZwogICAgIEhUVFBIZWFkZXJN
YXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtYXAtPmFkZChuYW1lLCB2YWx1ZSk7CiAgICAgLy8gSXQg
aXMgaW1wb3J0YW50IHRoYXQgdmFsdWVzIGFyZSBzZXBhcmF0ZWQgYnkgJ1xuJywgbm90IGNvbW1h
LCBvdGhlcndpc2UgU2V0LUNvb2tpZSBoZWFkZXIgaXMgbm90IHBhcnNlYWJsZS4KICAgICBpZiAo
IXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZC5hcHBl
bmQoIlxuIiArIFN0cmluZyh2YWx1ZSkpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVl
LmFwcGVuZCgiXG4iICsgU3RyaW5nKHZhbHVlKSk7CiB9CiAKIHZvaWQgV2ViSFRUUExvYWRJbmZv
OjphZGRSZXF1ZXN0SGVhZGVyKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgY29uc3QgV2ViU3RyaW5n
JiB2YWx1ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1
cHBvcnQvV2ViVVJMUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9zdXBwb3J0L1dlYlVSTFJlcXVlc3QuY3BwCmluZGV4IGY0MzdiNTE2NDNiMjM0YjYwOWY3NzI1
ZmI4ZDc2ZDczMWY1NjE3ZWEuLmUzODUxMDE0ZmNkZDQ1YmZhY2I0OGI5N2JiYTc2ZTMxZDhiNGEw
MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQv
V2ViVVJMUmVxdWVzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0v
c3VwcG9ydC9XZWJVUkxSZXF1ZXN0LmNwcApAQCAtMTk1LDcgKzE5NSw3IEBAIHZvaWQgV2ViVVJM
UmVxdWVzdDo6dmlzaXRIVFRQSGVhZGVyRmllbGRzKFdlYkhUVFBIZWFkZXJWaXNpdG9yKiB2aXNp
dG9yKSBjb25zdAogewogICAgIGNvbnN0IEhUVFBIZWFkZXJNYXAmIG1hcCA9IG1fcHJpdmF0ZS0+
bV9yZXNvdXJjZVJlcXVlc3QtPmh0dHBIZWFkZXJGaWVsZHMoKTsKICAgICBmb3IgKEhUVFBIZWFk
ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLmJlZ2luKCk7IGl0ICE9IG1hcC5lbmQoKTsg
KytpdCkKLSAgICAgICAgdmlzaXRvci0+dmlzaXRIZWFkZXIoaXQtPmZpcnN0LCBpdC0+c2Vjb25k
KTsKKyAgICAgICAgdmlzaXRvci0+dmlzaXRIZWFkZXIoaXQtPmtleSwgaXQtPnZhbHVlKTsKIH0K
IAogV2ViSFRUUEJvZHkgV2ViVVJMUmVxdWVzdDo6aHR0cEJvZHkoKSBjb25zdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJVUkxSZXNwb25z
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlVSTFJl
c3BvbnNlLmNwcAppbmRleCA5ZGUzYzAxYTBjYTlkNDM4ZGEwYWFhMGM2ODkzM2RlOGYwYjcyOTEy
Li4yODc1OTc4YzhkMThlMDQxMzJkNTVkMmNkMGYwMDkzYTBiNmUwY2EzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlVSTFJlc3BvbnNlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlVSTFJl
c3BvbnNlLmNwcApAQCAtMjYxLDcgKzI2MSw3IEBAIHZvaWQgV2ViVVJMUmVzcG9uc2U6OmFkZEhU
VFBIZWFkZXJGaWVsZChjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYlN0cmluZyYKICAg
ICBIVFRQSGVhZGVyTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0KICAgICAgICAgY29uc3RfY2FzdDxI
VFRQSGVhZGVyTWFwKj4oJm1hcCktPmFkZChuYW1lLCB2YWx1ZVN0cik7CiAgICAgaWYgKCFyZXN1
bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQuYXBwZW5kKCIs
ICIgKyB2YWx1ZVN0cik7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKCIs
ICIgKyB2YWx1ZVN0cik7CiB9CiAKIHZvaWQgV2ViVVJMUmVzcG9uc2U6OmNsZWFySFRUUEhlYWRl
ckZpZWxkKGNvbnN0IFdlYlN0cmluZyYgbmFtZSkKQEAgLTI3NSw3ICsyNzUsNyBAQCB2b2lkIFdl
YlVSTFJlc3BvbnNlOjp2aXNpdEhUVFBIZWFkZXJGaWVsZHMoV2ViSFRUUEhlYWRlclZpc2l0b3Iq
IHZpc2l0b3IpIGNvbnN0CiB7CiAgICAgY29uc3QgSFRUUEhlYWRlck1hcCYgbWFwID0gbV9wcml2
YXRlLT5tX3Jlc291cmNlUmVzcG9uc2UtPmh0dHBIZWFkZXJGaWVsZHMoKTsKICAgICBmb3IgKEhU
VFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLmJlZ2luKCk7IGl0ICE9IG1hcC5l
bmQoKTsgKytpdCkKLSAgICAgICAgdmlzaXRvci0+dmlzaXRIZWFkZXIoaXQtPmZpcnN0LCBpdC0+
c2Vjb25kKTsKKyAgICAgICAgdmlzaXRvci0+dmlzaXRIZWFkZXIoaXQtPmtleSwgaXQtPnZhbHVl
KTsKIH0KIAogZG91YmxlIFdlYlVSTFJlc3BvbnNlOjpsYXN0TW9kaWZpZWREYXRlKCkgY29uc3QK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZy
ZXNoTW9uaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5
UmVmcmVzaE1vbml0b3IuY3BwCmluZGV4IGM2N2U3YTA0ODBhNzY2YjIwMDllMzA5NTQ5N2VmM2Ex
OTRjNDk2NjMuLmIyYzhiMmRjMDFiNTY0NDI0MzM1YzJiYTNkMzMxNTMzOGQ2ZjBkZDUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9u
aXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJl
ZnJlc2hNb25pdG9yLmNwcApAQCAtMTM2LDggKzEzNiw4IEBAIERpc3BsYXlSZWZyZXNoTW9uaXRv
ciogRGlzcGxheVJlZnJlc2hNb25pdG9yTWFuYWdlcjo6ZW5zdXJlTW9uaXRvckZvckNsaWVudChE
aXNwCiAgICAgICAgIG1fbW9uaXRvcnMuYWRkKGNsaWVudC0+bV9kaXNwbGF5SUQsIG1vbml0b3Iu
cmVsZWFzZSgpKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9Ci0gICAgaXQtPnNlY29u
ZC0+YWRkQ2xpZW50KGNsaWVudCk7Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQuZ2V0KCk7CisgICAg
aXQtPnZhbHVlLT5hZGRDbGllbnQoY2xpZW50KTsKKyAgICByZXR1cm4gaXQtPnZhbHVlLmdldCgp
OwogfQogCiB2b2lkIERpc3BsYXlSZWZyZXNoTW9uaXRvck1hbmFnZXI6OnJlZ2lzdGVyQ2xpZW50
KERpc3BsYXlSZWZyZXNoTW9uaXRvckNsaWVudCogY2xpZW50KQpAQCAtMTU3LDcgKzE1Nyw3IEBA
IHZvaWQgRGlzcGxheVJlZnJlc2hNb25pdG9yTWFuYWdlcjo6dW5yZWdpc3RlckNsaWVudChEaXNw
bGF5UmVmcmVzaE1vbml0b3JDbGllbnQqCiAgICAgaWYgKGl0ID09IG1fbW9uaXRvcnMuZW5kKCkp
CiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBEaXNwbGF5UmVmcmVzaE1vbml0b3IqIG1vbml0
b3IgPSBpdC0+c2Vjb25kLmdldCgpOworICAgIERpc3BsYXlSZWZyZXNoTW9uaXRvciogbW9uaXRv
ciA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICBpZiAobW9uaXRvci0+cmVtb3ZlQ2xpZW50KGNsaWVu
dCkpIHsKICAgICAgICAgaWYgKCFtb25pdG9yLT5oYXNDbGllbnRzKCkpCiAgICAgICAgICAgICBt
X21vbml0b3JzLnJlbW92ZShpdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhY2hlLmNwcAppbmRleCA0ZWM3ZTRhY2MwMThkMWU3ZGJjMjFkNmY3MDEyNzQwNWU5
MmEwOGMyLi5kMDQzNjVhNDIwZGFkODdjMWYxNmIxNDQ1YmM5ODQyODc4OTIyZmM4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAKQEAgLTIxMCw3
ICsyMTAsNyBAQCBGb250UGxhdGZvcm1EYXRhKiBGb250Q2FjaGU6OmdldENhY2hlZEZvbnRQbGF0
Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmbwogICAgICAgICBnRm9udFBsYXRmb3Jt
RGF0YUNhY2hlLT5zZXQoa2V5LCByZXN1bHQpOwogICAgICAgICBmb3VuZFJlc3VsdCA9IHJlc3Vs
dDsKICAgICB9IGVsc2UgewotICAgICAgICByZXN1bHQgPSBpdC0+c2Vjb25kOworICAgICAgICBy
ZXN1bHQgPSBpdC0+dmFsdWU7CiAgICAgICAgIGZvdW5kUmVzdWx0ID0gdHJ1ZTsKICAgICB9CiAK
QEAgLTI0MSw3ICsyNDEsNyBAQCBPcGVuVHlwZVZlcnRpY2FsRGF0YSogRm9udENhY2hlOjpnZXRW
ZXJ0aWNhbERhdGEoY29uc3QgRm9udEZpbGVLZXkmIGtleSwgY29uc3QgRgogICAgIEZvbnRWZXJ0
aWNhbERhdGFDYWNoZSYgZm9udFZlcnRpY2FsRGF0YUNhY2hlID0gZm9udFZlcnRpY2FsRGF0YUNh
Y2hlSW5zdGFuY2UoKTsKICAgICBGb250VmVydGljYWxEYXRhQ2FjaGU6Oml0ZXJhdG9yIHJlc3Vs
dCA9IGZvbnRWZXJ0aWNhbERhdGFDYWNoZS5maW5kKGtleSk7CiAgICAgaWYgKHJlc3VsdCAhPSBm
b250VmVydGljYWxEYXRhQ2FjaGUuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQuZ2V0KCkt
PnNlY29uZC5nZXQoKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5nZXQoKS0+dmFsdWUuZ2V0KCk7
CiAKICAgICBPcGVuVHlwZVZlcnRpY2FsRGF0YSogdmVydGljYWxEYXRhID0gbmV3IE9wZW5UeXBl
VmVydGljYWxEYXRhKHBsYXRmb3JtRGF0YSk7CiAgICAgaWYgKCF2ZXJ0aWNhbERhdGEtPmlzT3Bl
blR5cGUoKSkgewpAQCAtMzMxLDIwICszMzEsMjAgQEAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0
YT4gRm9udENhY2hlOjpnZXRDYWNoZWRGb250RGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhKgog
ICAgICAgICByZXR1cm4gbmV3VmFsdWUuZmlyc3QucmVsZWFzZSgpOwogICAgIH0KIAotICAgIGlm
ICghcmVzdWx0LmdldCgpLT5zZWNvbmQuc2Vjb25kKSB7Ci0gICAgICAgIEFTU0VSVChnSW5hY3Rp
dmVGb250RGF0YS0+Y29udGFpbnMocmVzdWx0LmdldCgpLT5zZWNvbmQuZmlyc3QpKTsKLSAgICAg
ICAgZ0luYWN0aXZlRm9udERhdGEtPnJlbW92ZShyZXN1bHQuZ2V0KCktPnNlY29uZC5maXJzdCk7
CisgICAgaWYgKCFyZXN1bHQuZ2V0KCktPnZhbHVlLnNlY29uZCkgeworICAgICAgICBBU1NFUlQo
Z0luYWN0aXZlRm9udERhdGEtPmNvbnRhaW5zKHJlc3VsdC5nZXQoKS0+dmFsdWUuZmlyc3QpKTsK
KyAgICAgICAgZ0luYWN0aXZlRm9udERhdGEtPnJlbW92ZShyZXN1bHQuZ2V0KCktPnZhbHVlLmZp
cnN0KTsKICAgICB9CiAKICAgICBpZiAoc2hvdWxkUmV0YWluID09IFJldGFpbikKLSAgICAgICAg
cmVzdWx0LmdldCgpLT5zZWNvbmQuc2Vjb25kKys7Ci0gICAgZWxzZSBpZiAoIXJlc3VsdC5nZXQo
KS0+c2Vjb25kLnNlY29uZCkgeworICAgICAgICByZXN1bHQuZ2V0KCktPnZhbHVlLnNlY29uZCsr
OworICAgIGVsc2UgaWYgKCFyZXN1bHQuZ2V0KCktPnZhbHVlLnNlY29uZCkgewogICAgICAgICAv
LyBJZiBzaG91bGRSZXRhaW4gaXMgRG9Ob3RSZXRhaW4gYW5kIGNvdW50IGlzIDAsIHdlIHdhbnQg
dG8gcmVtb3ZlIHRoZSBmb250RGF0YSBmcm9tIAogICAgICAgICAvLyBnSW5hY3RpdmVGb250RGF0
YSAoYWJvdmUpIGFuZCByZS1hZGQgaGVyZSB0byB1cGRhdGUgTFJVIHBvc2l0aW9uLgotICAgICAg
ICBnSW5hY3RpdmVGb250RGF0YS0+YWRkKHJlc3VsdC5nZXQoKS0+c2Vjb25kLmZpcnN0KTsKKyAg
ICAgICAgZ0luYWN0aXZlRm9udERhdGEtPmFkZChyZXN1bHQuZ2V0KCktPnZhbHVlLmZpcnN0KTsK
ICAgICB9CiAKLSAgICByZXR1cm4gcmVzdWx0LmdldCgpLT5zZWNvbmQuZmlyc3Q7CisgICAgcmV0
dXJuIHJlc3VsdC5nZXQoKS0+dmFsdWUuZmlyc3Q7CiB9CiAKIFNpbXBsZUZvbnREYXRhKiBGb250
Q2FjaGU6OmdldE5vblJldGFpbmVkTGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVz
Y3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikKQEAgLTM2MCw5ICszNjAsOSBAQCB2b2lkIEZvbnRD
YWNoZTo6cmVsZWFzZUZvbnREYXRhKGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSkKICAg
ICBGb250RGF0YUNhY2hlOjppdGVyYXRvciBpdCA9IGdGb250RGF0YUNhY2hlLT5maW5kKGZvbnRE
YXRhLT5wbGF0Zm9ybURhdGEoKSk7CiAgICAgQVNTRVJUKGl0ICE9IGdGb250RGF0YUNhY2hlLT5l
bmQoKSk7CiAKLSAgICBBU1NFUlQoaXQtPnNlY29uZC5zZWNvbmQpOwotICAgIGlmICghLS1pdC0+
c2Vjb25kLnNlY29uZCkKLSAgICAgICAgZ0luYWN0aXZlRm9udERhdGEtPmFkZChpdC0+c2Vjb25k
LmZpcnN0KTsKKyAgICBBU1NFUlQoaXQtPnZhbHVlLnNlY29uZCk7CisgICAgaWYgKCEtLWl0LT52
YWx1ZS5zZWNvbmQpCisgICAgICAgIGdJbmFjdGl2ZUZvbnREYXRhLT5hZGQoaXQtPnZhbHVlLmZp
cnN0KTsKIH0KIAogdm9pZCBGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YUlmTmVlZGVk
KCkKQEAgLTQwNyw4ICs0MDcsOCBAQCB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnRE
YXRhKGludCBjb3VudCkKICAgICAgICAga2V5c1RvUmVtb3ZlLnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkoZ0ZvbnRQbGF0Zm9ybURhdGFDYWNoZS0+c2l6ZSgpKTsKICAgICAgICAgRm9udFBsYXRmb3Jt
RGF0YUNhY2hlOjppdGVyYXRvciBwbGF0Zm9ybURhdGFFbmQgPSBnRm9udFBsYXRmb3JtRGF0YUNh
Y2hlLT5lbmQoKTsKICAgICAgICAgZm9yIChGb250UGxhdGZvcm1EYXRhQ2FjaGU6Oml0ZXJhdG9y
IHBsYXRmb3JtRGF0YSA9IGdGb250UGxhdGZvcm1EYXRhQ2FjaGUtPmJlZ2luKCk7IHBsYXRmb3Jt
RGF0YSAhPSBwbGF0Zm9ybURhdGFFbmQ7ICsrcGxhdGZvcm1EYXRhKSB7Ci0gICAgICAgICAgICBp
ZiAocGxhdGZvcm1EYXRhLT5zZWNvbmQgJiYgIWdGb250RGF0YUNhY2hlLT5jb250YWlucygqcGxh
dGZvcm1EYXRhLT5zZWNvbmQpKQotICAgICAgICAgICAgICAgIGtleXNUb1JlbW92ZS5hcHBlbmQo
cGxhdGZvcm1EYXRhLT5maXJzdCk7CisgICAgICAgICAgICBpZiAocGxhdGZvcm1EYXRhLT52YWx1
ZSAmJiAhZ0ZvbnREYXRhQ2FjaGUtPmNvbnRhaW5zKCpwbGF0Zm9ybURhdGEtPnZhbHVlKSkKKyAg
ICAgICAgICAgICAgICBrZXlzVG9SZW1vdmUuYXBwZW5kKHBsYXRmb3JtRGF0YS0+a2V5KTsKICAg
ICAgICAgfQogICAgICAgICAKICAgICAgICAgc2l6ZV90IGtleXNUb1JlbW92ZUNvdW50ID0ga2V5
c1RvUmVtb3ZlLnNpemUoKTsKQEAgLTQyMiwyMCArNDIyLDIwIEBAIHZvaWQgRm9udENhY2hlOjpw
dXJnZUluYWN0aXZlRm9udERhdGEoaW50IGNvdW50KQogICAgICAgICAvLyBNYXJrICYgc3dlZXAg
dW51c2VkIHZlcnRpY2FsRGF0YQogICAgICAgICBGb250VmVydGljYWxEYXRhQ2FjaGU6Oml0ZXJh
dG9yIHZlcnRpY2FsRGF0YUVuZCA9IGZvbnRWZXJ0aWNhbERhdGFDYWNoZS5lbmQoKTsKICAgICAg
ICAgZm9yIChGb250VmVydGljYWxEYXRhQ2FjaGU6Oml0ZXJhdG9yIHZlcnRpY2FsRGF0YSA9IGZv
bnRWZXJ0aWNhbERhdGFDYWNoZS5iZWdpbigpOyB2ZXJ0aWNhbERhdGEgIT0gdmVydGljYWxEYXRh
RW5kOyArK3ZlcnRpY2FsRGF0YSkgewotICAgICAgICAgICAgaWYgKHZlcnRpY2FsRGF0YS0+c2Vj
b25kKQotICAgICAgICAgICAgICAgIHZlcnRpY2FsRGF0YS0+c2Vjb25kLT5tX2luRm9udENhY2hl
ID0gZmFsc2U7CisgICAgICAgICAgICBpZiAodmVydGljYWxEYXRhLT52YWx1ZSkKKyAgICAgICAg
ICAgICAgICB2ZXJ0aWNhbERhdGEtPnZhbHVlLT5tX2luRm9udENhY2hlID0gZmFsc2U7CiAgICAg
ICAgIH0KICAgICAgICAgRm9udERhdGFDYWNoZTo6aXRlcmF0b3IgZm9udERhdGFFbmQgPSBnRm9u
dERhdGFDYWNoZS0+ZW5kKCk7CiAgICAgICAgIGZvciAoRm9udERhdGFDYWNoZTo6aXRlcmF0b3Ig
Zm9udERhdGEgPSBnRm9udERhdGFDYWNoZS0+YmVnaW4oKTsgZm9udERhdGEgIT0gZm9udERhdGFF
bmQ7ICsrZm9udERhdGEpIHsKLSAgICAgICAgICAgIE9wZW5UeXBlVmVydGljYWxEYXRhKiB2ZXJ0
aWNhbERhdGEgPSBjb25zdF9jYXN0PE9wZW5UeXBlVmVydGljYWxEYXRhKj4oZm9udERhdGEtPnNl
Y29uZC5maXJzdC0+dmVydGljYWxEYXRhKCkpOworICAgICAgICAgICAgT3BlblR5cGVWZXJ0aWNh
bERhdGEqIHZlcnRpY2FsRGF0YSA9IGNvbnN0X2Nhc3Q8T3BlblR5cGVWZXJ0aWNhbERhdGEqPihm
b250RGF0YS0+dmFsdWUuZmlyc3QtPnZlcnRpY2FsRGF0YSgpKTsKICAgICAgICAgICAgIGlmICh2
ZXJ0aWNhbERhdGEpCiAgICAgICAgICAgICAgICAgdmVydGljYWxEYXRhLT5tX2luRm9udENhY2hl
ID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBWZWN0b3I8Rm9udEZpbGVLZXk+IGtleXNUb1Jl
bW92ZTsKICAgICAgICAga2V5c1RvUmVtb3ZlLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZm9udFZl
cnRpY2FsRGF0YUNhY2hlLnNpemUoKSk7CiAgICAgICAgIGZvciAoRm9udFZlcnRpY2FsRGF0YUNh
Y2hlOjppdGVyYXRvciB2ZXJ0aWNhbERhdGEgPSBmb250VmVydGljYWxEYXRhQ2FjaGUuYmVnaW4o
KTsgdmVydGljYWxEYXRhICE9IHZlcnRpY2FsRGF0YUVuZDsgKyt2ZXJ0aWNhbERhdGEpIHsKLSAg
ICAgICAgICAgIGlmICghdmVydGljYWxEYXRhLT5zZWNvbmQgfHwgIXZlcnRpY2FsRGF0YS0+c2Vj
b25kLT5tX2luRm9udENhY2hlKQotICAgICAgICAgICAgICAgIGtleXNUb1JlbW92ZS5hcHBlbmQo
dmVydGljYWxEYXRhLT5maXJzdCk7CisgICAgICAgICAgICBpZiAoIXZlcnRpY2FsRGF0YS0+dmFs
dWUgfHwgIXZlcnRpY2FsRGF0YS0+dmFsdWUtPm1faW5Gb250Q2FjaGUpCisgICAgICAgICAgICAg
ICAga2V5c1RvUmVtb3ZlLmFwcGVuZCh2ZXJ0aWNhbERhdGEtPmtleSk7CiAgICAgICAgIH0KICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDAsIGNvdW50ID0ga2V5c1RvUmVtb3ZlLnNpemUoKTsgaSA8
IGNvdW50OyArK2kpCiAgICAgICAgICAgICBmb250VmVydGljYWxEYXRhQ2FjaGUudGFrZShrZXlz
VG9SZW1vdmVbaV0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR2x5cGhQYWdlVHJlZU5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR2x5cGhQYWdlVHJlZU5vZGUuY3BwCmluZGV4IDg0NmI1NDQyYWVlMTQyZjJmZjZhZGU0OGQ1
NDkwMjhhNGYwNDExMDIuLmI4ZjVjM2Q3ZmMzM2NkNThkMDA4NGEyZGUwYTU3ZmNmZDBlZTY3ZTgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZVRy
ZWVOb2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBh
Z2VUcmVlTm9kZS5jcHAKQEAgLTc1LDcgKzc1LDcgQEAgc2l6ZV90IEdseXBoUGFnZVRyZWVOb2Rl
Ojp0cmVlR2x5cGhQYWdlQ291bnQoKQogICAgIGlmIChyb290cykgewogICAgICAgICBIYXNoTWFw
PGludCwgR2x5cGhQYWdlVHJlZU5vZGUqPjo6aXRlcmF0b3IgZW5kID0gcm9vdHMtPmVuZCgpOwog
ICAgICAgICBmb3IgKEhhc2hNYXA8aW50LCBHbHlwaFBhZ2VUcmVlTm9kZSo+OjppdGVyYXRvciBp
dCA9IHJvb3RzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBjb3VudCAr
PSBpdC0+c2Vjb25kLT5wYWdlQ291bnQoKTsKKyAgICAgICAgICAgIGNvdW50ICs9IGl0LT52YWx1
ZS0+cGFnZUNvdW50KCk7CiAgICAgfQogICAgIAogICAgIGlmIChwYWdlWmVyb1Jvb3QpCkBAIC04
OSw3ICs4OSw3IEBAIHNpemVfdCBHbHlwaFBhZ2VUcmVlTm9kZTo6cGFnZUNvdW50KCkgY29uc3QK
ICAgICBzaXplX3QgY291bnQgPSBtX3BhZ2UgJiYgbV9wYWdlLT5vd25lcigpID09IHRoaXMgPyAx
IDogMDsKICAgICBIYXNoTWFwPGNvbnN0IEZvbnREYXRhKiwgR2x5cGhQYWdlVHJlZU5vZGUqPjo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9jaGlsZHJlbi5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8
Y29uc3QgRm9udERhdGEqLCBHbHlwaFBhZ2VUcmVlTm9kZSo+Ojpjb25zdF9pdGVyYXRvciBpdCA9
IG1fY2hpbGRyZW4uYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBjb3VudCArPSBp
dC0+c2Vjb25kLT5wYWdlQ291bnQoKTsKKyAgICAgICAgY291bnQgKz0gaXQtPnZhbHVlLT5wYWdl
Q291bnQoKTsKIAogICAgIHJldHVybiBjb3VudDsKIH0KQEAgLTEwMCw3ICsxMDAsNyBAQCB2b2lk
IEdseXBoUGFnZVRyZWVOb2RlOjpwcnVuZVRyZWVDdXN0b21Gb250RGF0YShjb25zdCBGb250RGF0
YSogZm9udERhdGEpCiAgICAgaWYgKHJvb3RzKSB7CiAgICAgICAgIEhhc2hNYXA8aW50LCBHbHlw
aFBhZ2VUcmVlTm9kZSo+OjppdGVyYXRvciBlbmQgPSByb290cy0+ZW5kKCk7CiAgICAgICAgIGZv
ciAoSGFzaE1hcDxpbnQsIEdseXBoUGFnZVRyZWVOb2RlKj46Oml0ZXJhdG9yIGl0ID0gcm9vdHMt
PmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPnBydW5l
Q3VzdG9tRm9udERhdGEoZm9udERhdGEpOworICAgICAgICAgICAgaXQtPnZhbHVlLT5wcnVuZUN1
c3RvbUZvbnREYXRhKGZvbnREYXRhKTsKICAgICB9CiAgICAgCiAgICAgaWYgKHBhZ2VaZXJvUm9v
dCkKQEAgLTExMiw3ICsxMTIsNyBAQCB2b2lkIEdseXBoUGFnZVRyZWVOb2RlOjpwcnVuZVRyZWVG
b250RGF0YShjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEpCiAgICAgaWYgKHJvb3RzKSB7
CiAgICAgICAgIEhhc2hNYXA8aW50LCBHbHlwaFBhZ2VUcmVlTm9kZSo+OjppdGVyYXRvciBlbmQg
PSByb290cy0+ZW5kKCk7CiAgICAgICAgIGZvciAoSGFzaE1hcDxpbnQsIEdseXBoUGFnZVRyZWVO
b2RlKj46Oml0ZXJhdG9yIGl0ID0gcm9vdHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAg
ICAgICAgICAgIGl0LT5zZWNvbmQtPnBydW5lRm9udERhdGEoZm9udERhdGEpOworICAgICAgICAg
ICAgaXQtPnZhbHVlLT5wcnVuZUZvbnREYXRhKGZvbnREYXRhKTsKICAgICB9CiAgICAgCiAgICAg
aWYgKHBhZ2VaZXJvUm9vdCkKQEAgLTM2OCw3ICszNjgsNyBAQCB2b2lkIEdseXBoUGFnZVRyZWVO
b2RlOjpwcnVuZUN1c3RvbUZvbnREYXRhKGNvbnN0IEZvbnREYXRhKiBmb250RGF0YSkKICAgICAg
ICAgcmV0dXJuOwogICAgIEhhc2hNYXA8Y29uc3QgRm9udERhdGEqLCBHbHlwaFBhZ2VUcmVlTm9k
ZSo+OjppdGVyYXRvciBlbmQgPSBtX2NoaWxkcmVuLmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDxj
b25zdCBGb250RGF0YSosIEdseXBoUGFnZVRyZWVOb2RlKj46Oml0ZXJhdG9yIGl0ID0gbV9jaGls
ZHJlbi5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPnBydW5l
Q3VzdG9tRm9udERhdGEoZm9udERhdGEpOworICAgICAgICBpdC0+dmFsdWUtPnBydW5lQ3VzdG9t
Rm9udERhdGEoZm9udERhdGEpOwogfQogCiB2b2lkIEdseXBoUGFnZVRyZWVOb2RlOjpwcnVuZUZv
bnREYXRhKGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwgdW5zaWduZWQgbGV2ZWwpCkBA
IC0zODIsNyArMzgyLDcgQEAgdm9pZCBHbHlwaFBhZ2VUcmVlTm9kZTo6cHJ1bmVGb250RGF0YShj
b25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEsIHVuc2lnbmVkIGwKICAgICAvLyBQcnVuZSBh
bnkgYnJhbmNoIHRoYXQgY29udGFpbnMgdGhpcyBGb250RGF0YS4KICAgICBIYXNoTWFwPGNvbnN0
IEZvbnREYXRhKiwgR2x5cGhQYWdlVHJlZU5vZGUqPjo6aXRlcmF0b3IgY2hpbGQgPSBtX2NoaWxk
cmVuLmZpbmQoZm9udERhdGEpOwogICAgIGlmIChjaGlsZCAhPSBtX2NoaWxkcmVuLmVuZCgpKSB7
Ci0gICAgICAgIEdseXBoUGFnZVRyZWVOb2RlKiBub2RlID0gY2hpbGQtPnNlY29uZDsKKyAgICAg
ICAgR2x5cGhQYWdlVHJlZU5vZGUqIG5vZGUgPSBjaGlsZC0+dmFsdWU7CiAgICAgICAgIG1fY2hp
bGRyZW4ucmVtb3ZlKGZvbnREYXRhKTsKICAgICAgICAgdW5zaWduZWQgY3VzdG9tRm9udENvdW50
ID0gbm9kZS0+bV9jdXN0b21Gb250Q291bnQ7CiAgICAgICAgIGRlbGV0ZSBub2RlOwpAQCAtMzk4
LDcgKzM5OCw3IEBAIHZvaWQgR2x5cGhQYWdlVHJlZU5vZGU6OnBydW5lRm9udERhdGEoY29uc3Qg
U2ltcGxlRm9udERhdGEqIGZvbnREYXRhLCB1bnNpZ25lZCBsCiAKICAgICBIYXNoTWFwPGNvbnN0
IEZvbnREYXRhKiwgR2x5cGhQYWdlVHJlZU5vZGUqPjo6aXRlcmF0b3IgZW5kID0gbV9jaGlsZHJl
bi5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8Y29uc3QgRm9udERhdGEqLCBHbHlwaFBhZ2VUcmVl
Tm9kZSo+OjppdGVyYXRvciBpdCA9IG1fY2hpbGRyZW4uYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KQotICAgICAgICBpdC0+c2Vjb25kLT5wcnVuZUZvbnREYXRhKGZvbnREYXRhLCBsZXZlbCk7Cisg
ICAgICAgIGl0LT52YWx1ZS0+cHJ1bmVGb250RGF0YShmb250RGF0YSwgbGV2ZWwpOwogfQogCiAj
aWZuZGVmIE5ERUJVRwpAQCAtNDEwLDggKzQxMCw4IEBAIHZvaWQgR2x5cGhQYWdlVHJlZU5vZGU6
OnBydW5lRm9udERhdGEoY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhLCB1bnNpZ25lZCBs
CiAKICAgICAgICAgSGFzaE1hcDxjb25zdCBGb250RGF0YSosIEdseXBoUGFnZVRyZWVOb2RlKj46
Oml0ZXJhdG9yIGVuZCA9IG1fY2hpbGRyZW4uZW5kKCk7CiAgICAgICAgIGZvciAoSGFzaE1hcDxj
b25zdCBGb250RGF0YSosIEdseXBoUGFnZVRyZWVOb2RlKj46Oml0ZXJhdG9yIGl0ID0gbV9jaGls
ZHJlbi5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIHByaW50ZigiJXNc
dCVwICVzXG4iLCBpbmRlbnQuZGF0YSgpLCBpdC0+Zmlyc3QsIGl0LT5maXJzdC0+ZGVzY3JpcHRp
b24oKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNob3dTdWJ0cmVl
KCk7CisgICAgICAgICAgICBwcmludGYoIiVzXHQlcCAlc1xuIiwgaW5kZW50LmRhdGEoKSwgaXQt
PmtleSwgaXQtPmtleS0+ZGVzY3JpcHRpb24oKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAg
IGl0LT52YWx1ZS0+c2hvd1N1YnRyZWUoKTsKICAgICAgICAgfQogICAgICAgICBpZiAobV9zeXN0
ZW1GYWxsYmFja0NoaWxkKSB7CiAgICAgICAgICAgICBwcmludGYoIiVzXHQqIGZhbGxiYWNrXG4i
LCBpbmRlbnQuZGF0YSgpKTsKQEAgLTQyOSw4ICs0MjksOCBAQCB2b2lkIHNob3dHbHlwaFBhZ2VU
cmVlcygpCiAgICAgc2hvd0dseXBoUGFnZVRyZWUoMCk7CiAgICAgSGFzaE1hcDxpbnQsIFdlYkNv
cmU6OkdseXBoUGFnZVRyZWVOb2RlKj46Oml0ZXJhdG9yIGVuZCA9IFdlYkNvcmU6OkdseXBoUGFn
ZVRyZWVOb2RlOjpyb290cy0+ZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPGludCwgV2ViQ29yZTo6
R2x5cGhQYWdlVHJlZU5vZGUqPjo6aXRlcmF0b3IgaXQgPSBXZWJDb3JlOjpHbHlwaFBhZ2VUcmVl
Tm9kZTo6cm9vdHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBwcmludGYo
IlxuUGFnZSAlZDpcbiIsIGl0LT5maXJzdCk7Ci0gICAgICAgIHNob3dHbHlwaFBhZ2VUcmVlKGl0
LT5maXJzdCk7CisgICAgICAgIHByaW50ZigiXG5QYWdlICVkOlxuIiwgaXQtPmtleSk7CisgICAg
ICAgIHNob3dHbHlwaFBhZ2VUcmVlKGl0LT5rZXkpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmUuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmUuY3BwCmlu
ZGV4IGE3OTMwMzAwMDc0Yzk2NDBhMzkyYjllNWJiNTFlMDU5YTYyYmZiNDMuLmM1NjRkYmVkMDZk
OGQ5MjdhNzE1ZDIzNmQ3NzQ4ZGU3YWRlMDJjNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZS5jcHAKQEAgLTExNiw5ICsx
MTYsOSBAQCB2b2lkIFRpbGVkQmFja2luZ1N0b3JlOjp1cGRhdGVUaWxlQnVmZmVycygpCiAgICAg
VmVjdG9yPFJlZlB0cjxUaWxlPiA+IGRpcnR5VGlsZXM7CiAgICAgVGlsZU1hcDo6aXRlcmF0b3Ig
ZW5kID0gbV90aWxlcy5lbmQoKTsKICAgICBmb3IgKFRpbGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90
aWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKCFpdC0+c2Vjb25k
LT5pc0RpcnR5KCkpCisgICAgICAgIGlmICghaXQtPnZhbHVlLT5pc0RpcnR5KCkpCiAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgZGlydHlUaWxlcy5hcHBlbmQoaXQtPnNlY29uZCk7Cisg
ICAgICAgIGRpcnR5VGlsZXMuYXBwZW5kKGl0LT52YWx1ZSk7CiAgICAgfQogCiAgICAgaWYgKGRp
cnR5VGlsZXMuaXNFbXB0eSgpKSB7CkBAIC00MDIsMTMgKzQwMiwxMyBAQCBib29sIFRpbGVkQmFj
a2luZ1N0b3JlOjpyZXNpemVFZGdlVGlsZXMoKQogICAgIFZlY3RvcjxUaWxlOjpDb29yZGluYXRl
PiB0aWxlc1RvUmVtb3ZlOwogICAgIFRpbGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fdGlsZXMuZW5k
KCk7CiAgICAgZm9yIChUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFRpbGU6OkNvb3JkaW5hdGUgdGlsZUNvb3JkaW5hdGUg
PSBpdC0+c2Vjb25kLT5jb29yZGluYXRlKCk7Ci0gICAgICAgIEludFJlY3QgdGlsZVJlY3QgPSBp
dC0+c2Vjb25kLT5yZWN0KCk7CisgICAgICAgIFRpbGU6OkNvb3JkaW5hdGUgdGlsZUNvb3JkaW5h
dGUgPSBpdC0+dmFsdWUtPmNvb3JkaW5hdGUoKTsKKyAgICAgICAgSW50UmVjdCB0aWxlUmVjdCA9
IGl0LT52YWx1ZS0+cmVjdCgpOwogICAgICAgICBJbnRSZWN0IGV4cGVjdGVkVGlsZVJlY3QgPSB0
aWxlUmVjdEZvckNvb3JkaW5hdGUodGlsZUNvb3JkaW5hdGUpOwogICAgICAgICBpZiAoZXhwZWN0
ZWRUaWxlUmVjdC5pc0VtcHR5KCkpCiAgICAgICAgICAgICB0aWxlc1RvUmVtb3ZlLmFwcGVuZCh0
aWxlQ29vcmRpbmF0ZSk7CiAgICAgICAgIGVsc2UgaWYgKGV4cGVjdGVkVGlsZVJlY3QgIT0gdGls
ZVJlY3QpIHsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPnJlc2l6ZShleHBlY3RlZFRpbGVSZWN0
LnNpemUoKSk7CisgICAgICAgICAgICBpdC0+dmFsdWUtPnJlc2l6ZShleHBlY3RlZFRpbGVSZWN0
LnNpemUoKSk7CiAgICAgICAgICAgICB3YXNSZXNpemVkID0gdHJ1ZTsKICAgICAgICAgfQogICAg
IH0KQEAgLTQyNyw4ICs0MjcsOCBAQCB2b2lkIFRpbGVkQmFja2luZ1N0b3JlOjpzZXRLZWVwUmVj
dChjb25zdCBJbnRSZWN0JiBrZWVwUmVjdCkKICAgICBWZWN0b3I8VGlsZTo6Q29vcmRpbmF0ZT4g
dG9SZW1vdmU7CiAgICAgVGlsZU1hcDo6aXRlcmF0b3IgZW5kID0gbV90aWxlcy5lbmQoKTsKICAg
ICBmb3IgKFRpbGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKLSAgICAgICAgVGlsZTo6Q29vcmRpbmF0ZSBjb29yZGluYXRlID0gaXQtPnNlY29u
ZC0+Y29vcmRpbmF0ZSgpOwotICAgICAgICBGbG9hdFJlY3QgdGlsZVJlY3QgPSBpdC0+c2Vjb25k
LT5yZWN0KCk7CisgICAgICAgIFRpbGU6OkNvb3JkaW5hdGUgY29vcmRpbmF0ZSA9IGl0LT52YWx1
ZS0+Y29vcmRpbmF0ZSgpOworICAgICAgICBGbG9hdFJlY3QgdGlsZVJlY3QgPSBpdC0+dmFsdWUt
PnJlY3QoKTsKICAgICAgICAgaWYgKCF0aWxlUmVjdC5pbnRlcnNlY3RzKGtlZXBSZWN0RikpCiAg
ICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQoY29vcmRpbmF0ZSk7CiAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL2NmL01lZGlh
UGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9jZi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25D
Ri5jcHAKaW5kZXggODFkODYyOTgxNTI5ZGNiNWU0YWIyZDBjMDA2NjcyZGU3NmE4ODJmMS4uNzhj
YWM2NzJlNDE4YzE1OTAzM2MwYTFmZjg4ZGZmMmQ2YTExOTU3NyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL2NmL01lZGlhUGxheWVyUHJp
dmF0ZUFWRm91bmRhdGlvbkNGLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9hdmZvdW5kYXRpb24vY2YvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0YuY3Bw
CkBAIC05MTUsNyArOTE1LDcgQEAgQVZGV3JhcHBlciogQVZGV3JhcHBlcjo6YXZmV3JhcHBlckZv
ckNhbGxiYWNrQ29udGV4dCh2b2lkKiBjb250ZXh0KQogICAgIGlmIChpdCA9PSBtYXAoKS5lbmQo
KSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICByZXR1
cm4gaXQtPnZhbHVlOwogfQogCiB2b2lkIEFWRldyYXBwZXI6OnNjaGVkdWxlRGlzY29ubmVjdEFu
ZERlbGV0ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9i
bGFja2JlcnJ5L0xheWVyVGlsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYmxhY2tiZXJyeS9MYXllclRpbGVyLmNwcAppbmRleCA4M2VhY2FjYzA4ZWZiODBmM2RmOWJm
ZjUyOGY4ZGMyMzU0NmQyZDZlLi5jZDI4MDFlMmQ1ZDU1NmIwYjg1MWQ0OGFkYzQ0ZDBiN2FjNWI3
NTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2Jl
cnJ5L0xheWVyVGlsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2JsYWNrYmVycnkvTGF5ZXJUaWxlci5jcHAKQEAgLTM3MCw4ICszNzAsOCBAQCB2b2lkIExheWVy
VGlsZXI6OmxheWVyVmlzaWJpbGl0eUNoYW5nZWQoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCosIGJv
b2wgdmlzaWJsZSkKICAgICB9CiAKICAgICBmb3IgKFRpbGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90
aWxlcy5iZWdpbigpOyBpdCAhPSBtX3RpbGVzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIFRpbGVJ
bmRleCBpbmRleCA9ICgqaXQpLmZpcnN0OwotICAgICAgICBMYXllclRpbGUqIHRpbGUgPSAoKml0
KS5zZWNvbmQ7CisgICAgICAgIFRpbGVJbmRleCBpbmRleCA9ICgqaXQpLmtleTsKKyAgICAgICAg
TGF5ZXJUaWxlKiB0aWxlID0gKCppdCkudmFsdWU7CiAgICAgICAgIHRpbGUtPnNldFZpc2libGUo
ZmFsc2UpOwogICAgIH0KIH0KQEAgLTM4NSwyMSArMzg1LDIxIEBAIHZvaWQgTGF5ZXJUaWxlcjo6
dXBsb2FkVGV4dHVyZXNJZk5lZWRlZChMYXllckNvbXBvc2l0aW5nVGhyZWFkKikKIAogICAgIFRp
bGVKb2JzTWFwOjpjb25zdF9pdGVyYXRvciB0aWxlSm9ic0l0ZXJFbmQgPSB0aWxlSm9ic01hcC5l
bmQoKTsKICAgICBmb3IgKFRpbGVKb2JzTWFwOjpjb25zdF9pdGVyYXRvciB0aWxlSm9ic0l0ZXIg
PSB0aWxlSm9ic01hcC5iZWdpbigpOyB0aWxlSm9ic0l0ZXIgIT0gdGlsZUpvYnNJdGVyRW5kOyAr
K3RpbGVKb2JzSXRlcikgewotICAgICAgICBJbnRQb2ludCBvcmlnaW4gPSBvcmlnaW5PZlRpbGUo
dGlsZUpvYnNJdGVyLT5maXJzdCk7CisgICAgICAgIEludFBvaW50IG9yaWdpbiA9IG9yaWdpbk9m
VGlsZSh0aWxlSm9ic0l0ZXItPmtleSk7CiAKLSAgICAgICAgTGF5ZXJUaWxlKiB0aWxlID0gbV90
aWxlcy5nZXQodGlsZUpvYnNJdGVyLT5maXJzdCk7CisgICAgICAgIExheWVyVGlsZSogdGlsZSA9
IG1fdGlsZXMuZ2V0KHRpbGVKb2JzSXRlci0+a2V5KTsKICAgICAgICAgaWYgKCF0aWxlKSB7CiAg
ICAgICAgICAgICBpZiAob3JpZ2luLngoKSA+PSBtX3JlcXVpcmVkVGV4dHVyZVNpemUud2lkdGgo
KSB8fCBvcmlnaW4ueSgpID49IG1fcmVxdWlyZWRUZXh0dXJlU2l6ZS5oZWlnaHQoKSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIHRpbGUgPSBuZXcgTGF5ZXJUaWxlKCk7
Ci0gICAgICAgICAgICBtX3RpbGVzLmFkZCh0aWxlSm9ic0l0ZXItPmZpcnN0LCB0aWxlKTsKKyAg
ICAgICAgICAgIG1fdGlsZXMuYWRkKHRpbGVKb2JzSXRlci0+a2V5LCB0aWxlKTsKICAgICAgICAg
fQogCiAgICAgICAgIEludFJlY3QgdGlsZVJlY3Qob3JpZ2luLCB0aWxlU2l6ZSgpKTsKICAgICAg
ICAgdGlsZVJlY3Quc2V0V2lkdGgobWluKG1fcmVxdWlyZWRUZXh0dXJlU2l6ZS53aWR0aCgpIC0g
dGlsZVJlY3QueCgpLCB0aWxlUmVjdC53aWR0aCgpKSk7CiAgICAgICAgIHRpbGVSZWN0LnNldEhl
aWdodChtaW4obV9yZXF1aXJlZFRleHR1cmVTaXplLmhlaWdodCgpIC0gdGlsZVJlY3QueSgpLCB0
aWxlUmVjdC5oZWlnaHQoKSkpOwogCi0gICAgICAgIHBlcmZvcm1UaWxlSm9iKHRpbGUsICp0aWxl
Sm9ic0l0ZXItPnNlY29uZCwgdGlsZVJlY3QpOworICAgICAgICBwZXJmb3JtVGlsZUpvYih0aWxl
LCAqdGlsZUpvYnNJdGVyLT52YWx1ZSwgdGlsZVJlY3QpOwogICAgIH0KIAogICAgIG1fdGV4dHVy
ZUpvYnMuY2xlYXIoKTsKQEAgLTQ0MiwxMSArNDQyLDExIEBAIHZvaWQgTGF5ZXJUaWxlcjo6YWRk
VGlsZUpvYihjb25zdCBUaWxlSW5kZXgmIGluZGV4LCBjb25zdCBUZXh0dXJlSm9iJiBqb2IsIFRp
bGVKCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBsZWF2ZSB0aGUg
cHJldmlvdXMgam9iLgotICAgIGlmIChqb2IubV90eXBlID09IFRleHR1cmVKb2I6OkRpcnR5Q29u
dGVudHMgJiYgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQtPm1fdHlwZSA9PSBUZXh0dXJlSm9iOjpE
aXNjYXJkQ29udGVudHMpCisgICAgaWYgKGpvYi5tX3R5cGUgPT0gVGV4dHVyZUpvYjo6RGlydHlD
b250ZW50cyAmJiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5tX3R5cGUgPT0gVGV4dHVyZUpvYjo6
RGlzY2FyZENvbnRlbnRzKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBPdmVycmlkZSB0aGUg
cHJldmlvdXMgam9iLgotICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gJmpvYjsKKyAgICBy
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gJmpvYjsKIH0KIAogdm9pZCBMYXllclRpbGVyOjpwZXJm
b3JtVGlsZUpvYihMYXllclRpbGUqIHRpbGUsIGNvbnN0IFRleHR1cmVKb2ImIGpvYiwgY29uc3Qg
SW50UmVjdCYgdGlsZVJlY3QpCkBAIC02MzEsNyArNjMxLDcgQEAgdm9pZCBMYXllclRpbGVyOjpk
ZWxldGVUZXh0dXJlcyhMYXllckNvbXBvc2l0aW5nVGhyZWFkKikKICAgICAvLyB0b3VjaGluZyBz
b21lIFdlYktpdCB0aHJlYWQgc3RhdGUuCiAgICAgaWYgKG1fdGlsZXMuc2l6ZSgpKSB7CiAgICAg
ICAgIGZvciAoVGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IG1f
dGlsZXMuZW5kKCk7ICsraXQpCi0gICAgICAgICAgICAoKml0KS5zZWNvbmQtPmRpc2NhcmRDb250
ZW50cygpOworICAgICAgICAgICAgKCppdCkudmFsdWUtPmRpc2NhcmRDb250ZW50cygpOwogICAg
ICAgICBtX3RpbGVzLmNsZWFyKCk7CiAKICAgICAgICAgbV9jb250ZW50c0RpcnR5ID0gdHJ1ZTsK
QEAgLTY0OCw3ICs2NDgsNyBAQCB2b2lkIExheWVyVGlsZXI6OnBydW5lVGV4dHVyZXMoKQogICAg
IC8vIFBydW5lIHRpbGVzIHRoYXQgYXJlIG5vIGxvbmdlciBuZWVkZWQuCiAgICAgVmVjdG9yPFRp
bGVJbmRleD4gdGlsZXNUb0RlbGV0ZTsKICAgICBmb3IgKFRpbGVNYXA6Oml0ZXJhdG9yIGl0ID0g
bV90aWxlcy5iZWdpbigpOyBpdCAhPSBtX3RpbGVzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIFRp
bGVJbmRleCBpbmRleCA9ICgqaXQpLmZpcnN0OworICAgICAgICBUaWxlSW5kZXggaW5kZXggPSAo
Kml0KS5rZXk7CiAKICAgICAgICAgSW50UG9pbnQgb3JpZ2luID0gb3JpZ2luT2ZUaWxlKGluZGV4
KTsKICAgICAgICAgaWYgKG9yaWdpbi54KCkgPj0gbV9yZXF1aXJlZFRleHR1cmVTaXplLndpZHRo
KCkgfHwgb3JpZ2luLnkoKSA+PSBtX3JlcXVpcmVkVGV4dHVyZVNpemUuaGVpZ2h0KCkpCkBAIC03
MzAsNyArNzMwLDcgQEAgdm9pZCBMYXllclRpbGVyOjpiaW5kQ29udGVudHNUZXh0dXJlKExheWVy
Q29tcG9zaXRpbmdUaHJlYWQqKQogICAgIGlmIChtX3RpbGVzLnNpemUoKSAhPSAxKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBjb25zdCBMYXllclRpbGUqIHRpbGUgPSBtX3RpbGVzLmJlZ2luKCkt
PnNlY29uZDsKKyAgICBjb25zdCBMYXllclRpbGUqIHRpbGUgPSBtX3RpbGVzLmJlZ2luKCktPnZh
bHVlOwogCiAgICAgQVNTRVJUKHRpbGUtPmhhc1RleHR1cmUoKSk7CiAgICAgaWYgKCF0aWxlLT5o
YXNUZXh0dXJlKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ibGFja2JlcnJ5L1RleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvVGV4dHVyZUNhY2hlQ29tcG9zaXRp
bmdUaHJlYWQuY3BwCmluZGV4IDViNmJiODczNjQ5ZjlhODhiY2I3OGUyMGIxN2ExOGVjMzU0Y2I3
NTEuLmQ2NWM0ZGFkZGJiYjI1OThlYjBmYTI0MTcxYzRlNmFmMTRkZDc0YzggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvVGV4dHVyZUNhY2hl
Q29tcG9zaXRpbmdUaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2JsYWNrYmVycnkvVGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQuY3BwCkBAIC0yMDIs
MTAgKzIwMiwxMCBAQCB2b2lkIFRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkOjpzZXRNZW1v
cnlVc2FnZShzaXplX3QgbWVtb3J5VXNhZ2UpCiBQYXNzUmVmUHRyPFRleHR1cmU+IFRleHR1cmVD
YWNoZUNvbXBvc2l0aW5nVGhyZWFkOjp0ZXh0dXJlRm9yVGlsZWRDb250ZW50cyhjb25zdCBTa0Jp
dG1hcCYgY29udGVudHMsIGNvbnN0IEludFJlY3QmIHRpbGVSZWN0LCBjb25zdCBUaWxlSW5kZXgm
IGluZGV4LCBib29sIGlzT3BhcXVlKQogewogICAgIEhhc2hNYXA8Q29udGVudHNLZXksIFRleHR1
cmVNYXA+OjppdGVyYXRvciBpdCA9IG1fY2FjaGUuYWRkKGtleShjb250ZW50cyksIFRleHR1cmVN
YXAoKSkuaXRlcmF0b3I7Ci0gICAgVGV4dHVyZU1hcCYgbWFwID0gKCppdCkuc2Vjb25kOworICAg
IFRleHR1cmVNYXAmIG1hcCA9ICgqaXQpLnZhbHVlOwogCiAgICAgVGV4dHVyZU1hcDo6aXRlcmF0
b3IganQgPSBtYXAuYWRkKGluZGV4LCBSZWZQdHI8VGV4dHVyZT4oKSkuaXRlcmF0b3I7Ci0gICAg
UmVmUHRyPFRleHR1cmU+IHRleHR1cmUgPSAoKmp0KS5zZWNvbmQ7CisgICAgUmVmUHRyPFRleHR1
cmU+IHRleHR1cmUgPSAoKmp0KS52YWx1ZTsKICAgICBpZiAoIXRleHR1cmUpIHsKICAgICAgICAg
dGV4dHVyZSA9IGNyZWF0ZVRleHR1cmUoKTsKICNpZiBERUJVR19URVhUVVJFX01FTU9SWV9VU0FH
RQpAQCAtMjQ0LDcgKzI0NCw3IEBAIFBhc3NSZWZQdHI8VGV4dHVyZT4gVGV4dHVyZUNhY2hlQ29t
cG9zaXRpbmdUaHJlYWQ6OnRleHR1cmVGb3JDb2xvcihjb25zdCBDb2xvciYKICNlbmRpZgogICAg
ICAgICBtX2NvbG9ycy5zZXQoY29sb3IsIHRleHR1cmUpOwogICAgIH0gZWxzZQotICAgICAgICB0
ZXh0dXJlID0gKCppdCkuc2Vjb25kOworICAgICAgICB0ZXh0dXJlID0gKCppdCkudmFsdWU7CiAK
ICAgICAvLyBDb2xvciB0ZXh0dXJlcyBjYW4ndCBiZSBldmljdGVkLCBzbyBubyBuZWVkIGZvciBU
ZXh0dXJlUHJvdGVjdG9yLgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcAppbmRleCAyNDk1NGE0YjhkZjJmZWM4MDdh
MmU0ZjM2ZmIyZWNiM2JhNmQ1MDdiLi4xYWMxYzQyYzk3ODhjY2JiZjFhZTkzZWI0YTg4MTVmNjUw
N2Y3ZDE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9H
cmFwaGljc0xheWVyQ0EuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAKQEAgLTQ4Niw3ICs0ODYsNyBAQCB2b2lkIEdyYXBoaWNz
TGF5ZXJDQTo6bW92ZU9yQ29weUFuaW1hdGlvbnMoTW92ZU9yQ29weSBvcGVyYXRpb24sIFBsYXRm
b3JtQ0FMYXllcgogICAgIC8vIExvb2sgZm9yIHJ1bm5pbmcgYW5pbWF0aW9ucyBhZmZlY3Rpbmcg
dGhpcyBwcm9wZXJ0eS4KICAgICBBbmltYXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBt
X3J1bm5pbmdBbmltYXRpb25zLmVuZCgpOwogICAgIGZvciAoQW5pbWF0aW9uc01hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX3J1bm5pbmdBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgewotICAgICAgICBjb25zdCBWZWN0b3I8TGF5ZXJQcm9wZXJ0eUFuaW1hdGlvbj4mIHByb3Bl
cnR5QW5pbWF0aW9ucyA9IGl0LT5zZWNvbmQ7CisgICAgICAgIGNvbnN0IFZlY3RvcjxMYXllclBy
b3BlcnR5QW5pbWF0aW9uPiYgcHJvcGVydHlBbmltYXRpb25zID0gaXQtPnZhbHVlOwogICAgICAg
ICBzaXplX3QgbnVtQW5pbWF0aW9ucyA9IHByb3BlcnR5QW5pbWF0aW9ucy5zaXplKCk7CiAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtQW5pbWF0aW9uczsgKytpKSB7CiAgICAgICAg
ICAgICBjb25zdCBMYXllclByb3BlcnR5QW5pbWF0aW9uJiBjdXJyQW5pbWF0aW9uID0gcHJvcGVy
dHlBbmltYXRpb25zW2ldOwpAQCAtNzI4LDcgKzcyOCw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNB
OjpwYXVzZUFuaW1hdGlvbihjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1l
T2ZmCiAKICAgICBBbmltYXRpb25zVG9Qcm9jZXNzTWFwOjppdGVyYXRvciBpdCA9IG1fYW5pbWF0
aW9uc1RvUHJvY2Vzcy5maW5kKGFuaW1hdGlvbk5hbWUpOwogICAgIGlmIChpdCAhPSBtX2FuaW1h
dGlvbnNUb1Byb2Nlc3MuZW5kKCkpIHsKLSAgICAgICAgQW5pbWF0aW9uUHJvY2Vzc2luZ0FjdGlv
biYgcHJvY2Vzc2luZ0luZm8gPSBpdC0+c2Vjb25kOworICAgICAgICBBbmltYXRpb25Qcm9jZXNz
aW5nQWN0aW9uJiBwcm9jZXNzaW5nSW5mbyA9IGl0LT52YWx1ZTsKICAgICAgICAgLy8gSWYgYW4g
YW5pbWF0aW9uIGlzIHNjaGVkdWxlZCB0byBiZSByZW1vdmVkLCBkb24ndCBjaGFuZ2UgdGhlIHJl
bW92ZSB0byBhIHBhdXNlLgogICAgICAgICBpZiAocHJvY2Vzc2luZ0luZm8uYWN0aW9uICE9IFJl
bW92ZSkKICAgICAgICAgICAgIHByb2Nlc3NpbmdJbmZvLmFjdGlvbiA9IFBhdXNlOwpAQCAtODYz
LDcgKzg2Myw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpsYXllckRpZERpc3BsYXkoUGxhdGZv
cm1MYXllciogbGF5ZXIpCiAgICAgaWYgKGxheWVyQ2xvbmVNYXApIHsKICAgICAgICAgTGF5ZXJN
YXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxheWVyQ2xvbmVNYXAtPmVuZCgpOwogICAgICAgICBm
b3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGxheWVyQ2xvbmVNYXAtPmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgUGxhdGZvcm1DQUxheWVyKiBjdXJyQ2xv
bmUgPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgUGxhdGZvcm1DQUxheWVyKiBjdXJy
Q2xvbmUgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoIWN1cnJDbG9uZSkKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKIApAQCAtMTIwNSwxMCArMTIwNSwxMCBAQCB2b2lkIEdy
YXBoaWNzTGF5ZXJDQTo6dXBkYXRlR2VvbWV0cnkoZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBjb25z
dCBGbG9hdFBvaW50JiBwbwogICAgICAgICBpZiAoTGF5ZXJNYXAqIGxheWVyQ2xvbmVNYXAgPSBt
X3N0cnVjdHVyYWxMYXllckNsb25lcy5nZXQoKSkgewogICAgICAgICAgICAgTGF5ZXJNYXA6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IGxheWVyQ2xvbmVNYXAtPmVuZCgpOwogICAgICAgICAgICAgZm9y
IChMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXllckNsb25lTWFwLT5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgICAgICBQbGF0Zm9ybUNBTGF5ZXIqIGNsb25l
ID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgICAgICBQbGF0Zm9ybUNBTGF5ZXIqIGNs
b25lID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQgY2xvbmVQ
b3NpdGlvbiA9IGxheWVyUG9zaXRpb247CiAKLSAgICAgICAgICAgICAgICBpZiAobV9yZXBsaWNh
TGF5ZXIgJiYgaXNSZXBsaWNhdGVkUm9vdENsb25lKGl0LT5maXJzdCkpIHsKKyAgICAgICAgICAg
ICAgICBpZiAobV9yZXBsaWNhTGF5ZXIgJiYgaXNSZXBsaWNhdGVkUm9vdENsb25lKGl0LT5rZXkp
KSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIE1haW50YWluIHRoZSBzcGVjaWFsLWNhc2UgcG9z
aXRpb24gZm9yIHRoZSByb290IG9mIGEgY2xvbmUgc3VidHJlZSwKICAgICAgICAgICAgICAgICAg
ICAgLy8gd2hpY2ggd2Ugc2V0IHVwIGluIHJlcGxpY2F0ZWRMYXllclJvb3QoKS4KICAgICAgICAg
ICAgICAgICAgICAgY2xvbmVQb3NpdGlvbiA9IHBvc2l0aW9uRm9yQ2xvbmVSb290TGF5ZXIoKTsK
QEAgLTEyMzIsMTAgKzEyMzIsMTAgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUdlb21l
dHJ5KGZsb2F0IHBhZ2VTY2FsZUZhY3RvciwgY29uc3QgRmxvYXRQb2ludCYgcG8KICAgICBpZiAo
TGF5ZXJNYXAqIGxheWVyQ2xvbmVNYXAgPSBtX2xheWVyQ2xvbmVzLmdldCgpKSB7CiAgICAgICAg
IExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBsYXllckNsb25lTWFwLT5lbmQoKTsKICAg
ICAgICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXllckNsb25lTWFwLT5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIFBsYXRmb3JtQ0FMYXllciog
Y2xvbmUgPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgUGxhdGZvcm1DQUxheWVyKiBj
bG9uZSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIEZsb2F0UG9pbnQgY2xvbmVQb3Np
dGlvbiA9IGFkanVzdGVkUG9zaXRpb247CiAKLSAgICAgICAgICAgIGlmICghbV9zdHJ1Y3R1cmFs
TGF5ZXIgJiYgbV9yZXBsaWNhTGF5ZXIgJiYgaXNSZXBsaWNhdGVkUm9vdENsb25lKGl0LT5maXJz
dCkpIHsKKyAgICAgICAgICAgIGlmICghbV9zdHJ1Y3R1cmFsTGF5ZXIgJiYgbV9yZXBsaWNhTGF5
ZXIgJiYgaXNSZXBsaWNhdGVkUm9vdENsb25lKGl0LT5rZXkpKSB7CiAgICAgICAgICAgICAgICAg
Ly8gTWFpbnRhaW4gdGhlIHNwZWNpYWwtY2FzZSBwb3NpdGlvbiBmb3IgdGhlIHJvb3Qgb2YgYSBj
bG9uZSBzdWJ0cmVlLAogICAgICAgICAgICAgICAgIC8vIHdoaWNoIHdlIHNldCB1cCBpbiByZXBs
aWNhdGVkTGF5ZXJSb290KCkuCiAgICAgICAgICAgICAgICAgY2xvbmVQb3NpdGlvbiA9IHBvc2l0
aW9uRm9yQ2xvbmVSb290TGF5ZXIoKTsKQEAgLTEyNTUsOCArMTI1NSw4IEBAIHZvaWQgR3JhcGhp
Y3NMYXllckNBOjp1cGRhdGVUcmFuc2Zvcm0oKQogICAgIGlmIChMYXllck1hcCogbGF5ZXJDbG9u
ZU1hcCA9IHByaW1hcnlMYXllckNsb25lcygpKSB7CiAgICAgICAgIExheWVyTWFwOjpjb25zdF9p
dGVyYXRvciBlbmQgPSBsYXllckNsb25lTWFwLT5lbmQoKTsKICAgICAgICAgZm9yIChMYXllck1h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXllckNsb25lTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKLSAgICAgICAgICAgIFBsYXRmb3JtQ0FMYXllciogY3VyckxheWVyID0gaXQtPnNl
Y29uZC5nZXQoKTsKLSAgICAgICAgICAgIGlmIChtX3JlcGxpY2FMYXllciAmJiBpc1JlcGxpY2F0
ZWRSb290Q2xvbmUoaXQtPmZpcnN0KSkgeworICAgICAgICAgICAgUGxhdGZvcm1DQUxheWVyKiBj
dXJyTGF5ZXIgPSBpdC0+dmFsdWUuZ2V0KCk7CisgICAgICAgICAgICBpZiAobV9yZXBsaWNhTGF5
ZXIgJiYgaXNSZXBsaWNhdGVkUm9vdENsb25lKGl0LT5rZXkpKSB7CiAgICAgICAgICAgICAgICAg
Ly8gTWFpbnRhaW4gdGhlIHNwZWNpYWwtY2FzZSB0cmFuc2Zvcm0gZm9yIHRoZSByb290IG9mIGEg
Y2xvbmUgc3VidHJlZSwKICAgICAgICAgICAgICAgICAvLyB3aGljaCB3ZSBzZXQgdXAgaW4gcmVw
bGljYXRlZExheWVyUm9vdCgpLgogICAgICAgICAgICAgICAgIGN1cnJMYXllci0+c2V0VHJhbnNm
b3JtKFRyYW5zZm9ybWF0aW9uTWF0cml4KCkpOwpAQCAtMTI3Myw3ICsxMjczLDcgQEAgdm9pZCBH
cmFwaGljc0xheWVyQ0E6OnVwZGF0ZUNoaWxkcmVuVHJhbnNmb3JtKCkKICAgICBpZiAoTGF5ZXJN
YXAqIGxheWVyQ2xvbmVNYXAgPSBwcmltYXJ5TGF5ZXJDbG9uZXMoKSkgewogICAgICAgICBMYXll
ck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAgICAg
IGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0U3VibGF5ZXJU
cmFuc2Zvcm0obV9jaGlsZHJlblRyYW5zZm9ybSk7CisgICAgICAgICAgICBpdC0+dmFsdWUtPnNl
dFN1YmxheWVyVHJhbnNmb3JtKG1fY2hpbGRyZW5UcmFuc2Zvcm0pOwogICAgIH0KIH0KIApAQCAt
MTI4NCw3ICsxMjg0LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZU1hc2tzVG9Cb3Vu
ZHMoKQogICAgIGlmIChMYXllck1hcCogbGF5ZXJDbG9uZU1hcCA9IG1fbGF5ZXJDbG9uZXMuZ2V0
KCkpIHsKICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxheWVyQ2xvbmVN
YXAtPmVuZCgpOwogICAgICAgICBmb3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGxh
eWVyQ2xvbmVNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIGl0LT5z
ZWNvbmQtPnNldE1hc2tzVG9Cb3VuZHMobV9tYXNrc1RvQm91bmRzKTsKKyAgICAgICAgICAgIGl0
LT52YWx1ZS0+c2V0TWFza3NUb0JvdW5kcyhtX21hc2tzVG9Cb3VuZHMpOwogICAgIH0KIAogICAg
IHVwZGF0ZURlYnVnSW5kaWNhdG9ycygpOwpAQCAtMTMwMiw3ICsxMzAyLDcgQEAgdm9pZCBHcmFw
aGljc0xheWVyQ0E6OnVwZGF0ZUNvbnRlbnRzVmlzaWJpbGl0eSgpCiAgICAgICAgIGlmIChMYXll
ck1hcCogbGF5ZXJDbG9uZU1hcCA9IG1fbGF5ZXJDbG9uZXMuZ2V0KCkpIHsKICAgICAgICAgICAg
IExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBsYXllckNsb25lTWFwLT5lbmQoKTsKICAg
ICAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1h
cC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgICAgIGl0LT5zZWNvbmQt
PnNldENvbnRlbnRzKDApOworICAgICAgICAgICAgICAgIGl0LT52YWx1ZS0+c2V0Q29udGVudHMo
MCk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0xMzE0LDcgKzEzMTQsNyBAQCB2b2lkIEdyYXBo
aWNzTGF5ZXJDQTo6dXBkYXRlQ29udGVudHNPcGFxdWUoKQogICAgIGlmIChMYXllck1hcCogbGF5
ZXJDbG9uZU1hcCA9IG1fbGF5ZXJDbG9uZXMuZ2V0KCkpIHsKICAgICAgICAgTGF5ZXJNYXA6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IGxheWVyQ2xvbmVNYXAtPmVuZCgpOwogICAgICAgICBmb3IgKExh
eWVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGxheWVyQ2xvbmVNYXAtPmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNldE9wYXF1ZShtX2NvbnRlbnRz
T3BhcXVlKTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+c2V0T3BhcXVlKG1fY29udGVudHNPcGFx
dWUpOwogICAgIH0KIH0KIApAQCAtMTMyNiw3ICsxMzI2LDcgQEAgdm9pZCBHcmFwaGljc0xheWVy
Q0E6OnVwZGF0ZUJhY2tmYWNlVmlzaWJpbGl0eSgpCiAgICAgICAgIGlmIChMYXllck1hcCogbGF5
ZXJDbG9uZU1hcCA9IG1fc3RydWN0dXJhbExheWVyQ2xvbmVzLmdldCgpKSB7CiAgICAgICAgICAg
ICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAg
ICAgICAgICAgICBmb3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGxheWVyQ2xvbmVN
YXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgICAgICBpdC0+c2Vjb25k
LT5zZXREb3VibGVTaWRlZChtX2JhY2tmYWNlVmlzaWJpbGl0eSk7CisgICAgICAgICAgICAgICAg
aXQtPnZhbHVlLT5zZXREb3VibGVTaWRlZChtX2JhY2tmYWNlVmlzaWJpbGl0eSk7CiAgICAgICAg
IH0KICAgICB9CiAKQEAgLTEzMzUsNyArMTMzNSw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1
cGRhdGVCYWNrZmFjZVZpc2liaWxpdHkoKQogICAgIGlmIChMYXllck1hcCogbGF5ZXJDbG9uZU1h
cCA9IG1fbGF5ZXJDbG9uZXMuZ2V0KCkpIHsKICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IGxheWVyQ2xvbmVNYXAtPmVuZCgpOwogICAgICAgICBmb3IgKExheWVyTWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IGxheWVyQ2xvbmVNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNldERvdWJsZVNpZGVkKG1fYmFja2ZhY2VWaXNp
YmlsaXR5KTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+c2V0RG91YmxlU2lkZWQobV9iYWNrZmFj
ZVZpc2liaWxpdHkpOwogICAgIH0KIH0KIApAQCAtMTM0NywxMCArMTM0NywxMCBAQCB2b2lkIEdy
YXBoaWNzTGF5ZXJDQTo6dXBkYXRlRmlsdGVycygpCiAgICAgaWYgKExheWVyTWFwKiBsYXllckNs
b25lTWFwID0gcHJpbWFyeUxheWVyQ2xvbmVzKCkpIHsKICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IGxheWVyQ2xvbmVNYXAtPmVuZCgpOwogICAgICAgICBmb3IgKExheWVy
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGxheWVyQ2xvbmVNYXAtPmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewotICAgICAgICAgICAgaWYgKG1fcmVwbGljYUxheWVyICYmIGlzUmVwbGljYXRl
ZFJvb3RDbG9uZShpdC0+Zmlyc3QpKQorICAgICAgICAgICAgaWYgKG1fcmVwbGljYUxheWVyICYm
IGlzUmVwbGljYXRlZFJvb3RDbG9uZShpdC0+a2V5KSkKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKIAotICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0RmlsdGVycyhtX2ZpbHRlcnMpOworICAg
ICAgICAgICAgaXQtPnZhbHVlLT5zZXRGaWx0ZXJzKG1fZmlsdGVycyk7CiAgICAgICAgIH0KICAg
ICB9CiB9CkBAIC0xNDM5LDcgKzE0MzksNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6ZW5zdXJl
U3RydWN0dXJhbExheWVyKFN0cnVjdHVyYWxMYXllclB1cnBvc2UgcHVycG9zZSwgZmxvYQogICAg
IGlmIChtX2xheWVyQ2xvbmVzKSB7CiAgICAgICAgIExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBl
bmQgPSBtX2xheWVyQ2xvbmVzLT5lbmQoKTsKICAgICAgICAgZm9yIChMYXllck1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX2xheWVyQ2xvbmVzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
LSAgICAgICAgICAgIFBsYXRmb3JtQ0FMYXllciogY3VyckxheWVyID0gaXQtPnNlY29uZC5nZXQo
KTsKKyAgICAgICAgICAgIFBsYXRmb3JtQ0FMYXllciogY3VyckxheWVyID0gaXQtPnZhbHVlLmdl
dCgpOwogICAgICAgICAgICAgY3VyckxheWVyLT5zZXRQb3NpdGlvbihwb2ludCk7CiAgICAgICAg
ICAgICBjdXJyTGF5ZXItPnNldEFuY2hvclBvaW50KGFuY2hvclBvaW50KTsKICAgICAgICAgICAg
IGN1cnJMYXllci0+c2V0VHJhbnNmb3JtKFRyYW5zZm9ybWF0aW9uTWF0cml4KCkpOwpAQCAtMTQ4
NCw3ICsxNDg0LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUxheWVyRHJhd3NDb250
ZW50KGZsb2F0IHBhZ2VTY2FsZUZhY3RvciwgY29uc3QgRmxvYXQKICAgICAgICAgaWYgKG1fbGF5
ZXJDbG9uZXMpIHsKICAgICAgICAgICAgIExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBt
X2xheWVyQ2xvbmVzLT5lbmQoKTsKICAgICAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbV9sYXllckNsb25lcy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAg
ICAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNldENvbnRlbnRzKDApOworICAgICAgICAgICAgICAg
IGl0LT52YWx1ZS0+c2V0Q29udGVudHMoMCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgdXBkYXRl
RGVidWdJbmRpY2F0b3JzKCk7CkBAIC0xNTM1LDcgKzE1MzUsNyBAQCB2b2lkIEdyYXBoaWNzTGF5
ZXJDQTo6dXBkYXRlQ29udGVudHNJbWFnZSgpCiAgICAgICAgIGlmIChtX2NvbnRlbnRzTGF5ZXJD
bG9uZXMpIHsKICAgICAgICAgICAgIExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2Nv
bnRlbnRzTGF5ZXJDbG9uZXMtPmVuZCgpOwogICAgICAgICAgICAgZm9yIChMYXllck1hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtX2NvbnRlbnRzTGF5ZXJDbG9uZXMtPmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkKLSAgICAgICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRDb250ZW50cyhtX2NvbnRl
bnRzTGF5ZXItPmNvbnRlbnRzKCkpOworICAgICAgICAgICAgICAgIGl0LT52YWx1ZS0+c2V0Q29u
dGVudHMobV9jb250ZW50c0xheWVyLT5jb250ZW50cygpKTsKICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgdXBkYXRlQ29udGVudHNSZWN0KCk7CkBAIC0xNTc5LDggKzE1NzksOCBAQCB2b2lk
IEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlQ29udGVudHNSZWN0KCkKICAgICBpZiAobV9jb250ZW50
c0xheWVyQ2xvbmVzKSB7CiAgICAgICAgIExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBt
X2NvbnRlbnRzTGF5ZXJDbG9uZXMtPmVuZCgpOwogICAgICAgICBmb3IgKExheWVyTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IG1fY29udGVudHNMYXllckNsb25lcy0+YmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRQb3NpdGlvbihwb2ludCk7Ci0g
ICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRCb3VuZHMocmVjdCk7CisgICAgICAgICAgICBpdC0+
dmFsdWUtPnNldFBvc2l0aW9uKHBvaW50KTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+c2V0Qm91
bmRzKHJlY3QpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMTU5NSw4ICsxNTk1LDggQEAgdm9p
ZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZU1hc2tMYXllcigpCiAgICAgaWYgKExheWVyTWFwKiBs
YXllckNsb25lTWFwID0gbV9sYXllckNsb25lcy5nZXQoKSkgewogICAgICAgICBMYXllck1hcDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAo
TGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7ICAgICAgICAgICAgCi0gICAgICAgICAgICBQbGF0Zm9ybUNBTGF5ZXIq
IG1hc2tDbG9uZSA9IG1hc2tMYXllckNsb25lTWFwID8gbWFza0xheWVyQ2xvbmVNYXAtPmdldChp
dC0+Zmlyc3QpLmdldCgpIDogMDsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNldE1hc2sobWFz
a0Nsb25lKTsKKyAgICAgICAgICAgIFBsYXRmb3JtQ0FMYXllciogbWFza0Nsb25lID0gbWFza0xh
eWVyQ2xvbmVNYXAgPyBtYXNrTGF5ZXJDbG9uZU1hcC0+Z2V0KGl0LT5rZXkpLmdldCgpIDogMDsK
KyAgICAgICAgICAgIGl0LT52YWx1ZS0+c2V0TWFzayhtYXNrQ2xvbmUpOwogICAgICAgICB9CiAg
ICAgfQogfQpAQCAtMTY2MCwxMyArMTY2MCwxMyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBk
YXRlTGF5ZXJBbmltYXRpb25zKCkKICAgICBpZiAobV9hbmltYXRpb25zVG9Qcm9jZXNzLnNpemUo
KSkgewogICAgICAgICBBbmltYXRpb25zVG9Qcm9jZXNzTWFwOjpjb25zdF9pdGVyYXRvciBlbmQg
PSBtX2FuaW1hdGlvbnNUb1Byb2Nlc3MuZW5kKCk7CiAgICAgICAgIGZvciAoQW5pbWF0aW9uc1Rv
UHJvY2Vzc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2FuaW1hdGlvbnNUb1Byb2Nlc3MuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBjb25zdCBTdHJpbmcmIGN1cnJB
bmltYXRpb25OYW1lID0gaXQtPmZpcnN0OworICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBjdXJy
QW5pbWF0aW9uTmFtZSA9IGl0LT5rZXk7CiAgICAgICAgICAgICBBbmltYXRpb25zTWFwOjppdGVy
YXRvciBhbmltYXRpb25JdCA9IG1fcnVubmluZ0FuaW1hdGlvbnMuZmluZChjdXJyQW5pbWF0aW9u
TmFtZSk7CiAgICAgICAgICAgICBpZiAoYW5pbWF0aW9uSXQgPT0gbV9ydW5uaW5nQW5pbWF0aW9u
cy5lbmQoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgY29uc3Qg
QW5pbWF0aW9uUHJvY2Vzc2luZ0FjdGlvbiYgcHJvY2Vzc2luZ0luZm8gPSBpdC0+c2Vjb25kOwot
ICAgICAgICAgICAgY29uc3QgVmVjdG9yPExheWVyUHJvcGVydHlBbmltYXRpb24+JiBhbmltYXRp
b25zID0gYW5pbWF0aW9uSXQtPnNlY29uZDsKKyAgICAgICAgICAgIGNvbnN0IEFuaW1hdGlvblBy
b2Nlc3NpbmdBY3Rpb24mIHByb2Nlc3NpbmdJbmZvID0gaXQtPnZhbHVlOworICAgICAgICAgICAg
Y29uc3QgVmVjdG9yPExheWVyUHJvcGVydHlBbmltYXRpb24+JiBhbmltYXRpb25zID0gYW5pbWF0
aW9uSXQtPnZhbHVlOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhbmltYXRp
b25zLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICAgICAgY29uc3QgTGF5ZXJQcm9wZXJ0eUFu
aW1hdGlvbiYgY3VyckFuaW1hdGlvbiA9IGFuaW1hdGlvbnNbaV07CiAgICAgICAgICAgICAgICAg
c3dpdGNoIChwcm9jZXNzaW5nSW5mby5hY3Rpb24pIHsKQEAgLTE2OTgsNyArMTY5OCw3IEBAIHZv
aWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVMYXllckFuaW1hdGlvbnMoKQogICAgICAgICAgICAg
ICAgIGFuaW1hdGlvbnMuYXBwZW5kKHBlbmRpbmdBbmltYXRpb24pOwogICAgICAgICAgICAgICAg
IG1fcnVubmluZ0FuaW1hdGlvbnMuYWRkKHBlbmRpbmdBbmltYXRpb24ubV9uYW1lLCBhbmltYXRp
b25zKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgVmVjdG9yPExheWVy
UHJvcGVydHlBbmltYXRpb24+JiBhbmltYXRpb25zID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAg
ICAgICBWZWN0b3I8TGF5ZXJQcm9wZXJ0eUFuaW1hdGlvbj4mIGFuaW1hdGlvbnMgPSBpdC0+dmFs
dWU7CiAgICAgICAgICAgICAgICAgYW5pbWF0aW9ucy5hcHBlbmQocGVuZGluZ0FuaW1hdGlvbik7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE3MjMsMTEgKzE3MjMsMTEgQEAgdm9pZCBH
cmFwaGljc0xheWVyQ0E6OnNldEFuaW1hdGlvbk9uTGF5ZXIoUGxhdGZvcm1DQUFuaW1hdGlvbiog
Y2FBbmltLCBBbmltYXRlZFAKICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IGxheWVyQ2xvbmVNYXAtPmVuZCgpOwogICAgICAgICBmb3IgKExheWVyTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IGxheWVyQ2xvbmVNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAg
ICAgICAgICAgLy8gU2tpcCBpbW1lZGlhdGUgcmVwbGljYXMsIHNpbmNlIHRoZXkgbW92ZSB3aXRo
IHRoZSBvcmlnaW5hbC4KLSAgICAgICAgICAgIGlmIChtX3JlcGxpY2FMYXllciAmJiBpc1JlcGxp
Y2F0ZWRSb290Q2xvbmUoaXQtPmZpcnN0KSkKKyAgICAgICAgICAgIGlmIChtX3JlcGxpY2FMYXll
ciAmJiBpc1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQtPmtleSkpCiAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPnJlbW92ZUFuaW1hdGlvbkZvcktleShh
bmltYXRpb25JRCk7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLT5hZGRBbmltYXRpb25Gb3JLZXko
YW5pbWF0aW9uSUQsIGNhQW5pbSk7CisgICAgICAgICAgICBpdC0+dmFsdWUtPnJlbW92ZUFuaW1h
dGlvbkZvcktleShhbmltYXRpb25JRCk7CisgICAgICAgICAgICBpdC0+dmFsdWUtPmFkZEFuaW1h
dGlvbkZvcktleShhbmltYXRpb25JRCwgY2FBbmltKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAg
LTE3NjIsMTAgKzE3NjIsMTAgQEAgYm9vbCBHcmFwaGljc0xheWVyQ0E6OnJlbW92ZUNBQW5pbWF0
aW9uRnJvbUxheWVyKEFuaW1hdGVkUHJvcGVydHlJRCBwcm9wZXJ0eSwgY28KICAgICAgICAgTGF5
ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxheWVyQ2xvbmVNYXAtPmVuZCgpOwogICAgICAg
ICBmb3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGxheWVyQ2xvbmVNYXAtPmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgLy8gU2tpcCBpbW1lZGlhdGUgcmVw
bGljYXMsIHNpbmNlIHRoZXkgbW92ZSB3aXRoIHRoZSBvcmlnaW5hbC4KLSAgICAgICAgICAgIGlm
IChtX3JlcGxpY2FMYXllciAmJiBpc1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQtPmZpcnN0KSkKKyAg
ICAgICAgICAgIGlmIChtX3JlcGxpY2FMYXllciAmJiBpc1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQt
PmtleSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIGl0LT5zZWNv
bmQgLT5yZW1vdmVBbmltYXRpb25Gb3JLZXkoYW5pbWF0aW9uSUQpOworICAgICAgICAgICAgaXQt
PnZhbHVlLT5yZW1vdmVBbmltYXRpb25Gb3JLZXkoYW5pbWF0aW9uSUQpOwogICAgICAgICB9CiAg
ICAgfQogICAgIHJldHVybiB0cnVlOwpAQCAtMTc5NCw5ICsxNzk0LDkgQEAgdm9pZCBHcmFwaGlj
c0xheWVyQ0E6OnBhdXNlQ0FBbmltYXRpb25PbkxheWVyKEFuaW1hdGVkUHJvcGVydHlJRCBwcm9w
ZXJ0eSwgY29uc3QKICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxheWVy
Q2xvbmVNYXAtPmVuZCgpOwogICAgICAgICBmb3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IGxheWVyQ2xvbmVNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAg
ICAgLy8gU2tpcCBpbW1lZGlhdGUgcmVwbGljYXMsIHNpbmNlIHRoZXkgbW92ZSB3aXRoIHRoZSBv
cmlnaW5hbC4KLSAgICAgICAgICAgIGlmIChtX3JlcGxpY2FMYXllciAmJiBpc1JlcGxpY2F0ZWRS
b290Q2xvbmUoaXQtPmZpcnN0KSkKKyAgICAgICAgICAgIGlmIChtX3JlcGxpY2FMYXllciAmJiBp
c1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQtPmtleSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLT5hZGRBbmltYXRpb25Gb3JLZXkoYW5pbWF0aW9uSUQs
IG5ld0FuaW0uZ2V0KCkpOworICAgICAgICAgICAgaXQtPnZhbHVlLT5hZGRBbmltYXRpb25Gb3JL
ZXkoYW5pbWF0aW9uSUQsIG5ld0FuaW0uZ2V0KCkpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAt
MjMyMCw4ICsyMzIwLDggQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnN1c3BlbmRBbmltYXRpb25z
KGRvdWJsZSB0aW1lKQogICAgIGlmIChMYXllck1hcCogbGF5ZXJDbG9uZU1hcCA9IHByaW1hcnlM
YXllckNsb25lcygpKSB7CiAgICAgICAgIExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBs
YXllckNsb25lTWFwLT5lbmQoKTsKICAgICAgICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBsYXllckNsb25lTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgICAgIGl0LT5zZWNvbmQtPnNldFNwZWVkKDApOwotICAgICAgICAgICAgaXQtPnNlY29uZC0+
c2V0VGltZU9mZnNldCh0KTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+c2V0U3BlZWQoMCk7Cisg
ICAgICAgICAgICBpdC0+dmFsdWUtPnNldFRpbWVPZmZzZXQodCk7CiAgICAgICAgIH0KICAgICB9
CiB9CkBAIC0yMzM1LDggKzIzMzUsOCBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6cmVzdW1lQW5p
bWF0aW9ucygpCiAgICAgaWYgKExheWVyTWFwKiBsYXllckNsb25lTWFwID0gcHJpbWFyeUxheWVy
Q2xvbmVzKCkpIHsKICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxheWVy
Q2xvbmVNYXAtPmVuZCgpOwogICAgICAgICBmb3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IGxheWVyQ2xvbmVNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAg
ICAgaXQtPnNlY29uZC0+c2V0U3BlZWQoMSk7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRU
aW1lT2Zmc2V0KDApOworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRTcGVlZCgxKTsKKyAgICAg
ICAgICAgIGl0LT52YWx1ZS0+c2V0VGltZU9mZnNldCgwKTsKICAgICAgICAgfQogICAgIH0KIH0K
QEAgLTI1NDYsMTMgKzI1NDYsMTMgQEAgUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IEdyYXBo
aWNzTGF5ZXJDQTo6ZmluZE9yTWFrZUNsb25lKENsb25lSUQgY2xvbmVJRCwgUGwKICAgICBMYXll
ck1hcDo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IGNsb25lcy0+YWRkKGNsb25lSUQsIGR1bW15KTsK
ICAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5KSB7CiAgICAgICAgIC8vIFZhbHVlIHdhcyBu
b3QgYWRkZWQsIHNvIGl0IGV4aXN0cyBhbHJlYWR5LgotICAgICAgICByZXN1bHRMYXllciA9IGFk
ZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLmdldCgpOworICAgICAgICByZXN1bHRMYXllciA9IGFk
ZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgcmVz
dWx0TGF5ZXIgPSBjbG9uZUxheWVyKHNvdXJjZUxheWVyLCBjbG9uZUxldmVsKTsKICNpZm5kZWYg
TkRFQlVHCiAgICAgICAgIHJlc3VsdExheWVyLT5zZXROYW1lKFN0cmluZzo6Zm9ybWF0KCJDbG9u
ZSAlZCBvZiBsYXllciAlcCIsIGNsb25lSURbMFVdLCBzb3VyY2VMYXllci0+cGxhdGZvcm1MYXll
cigpKSk7CiAjZW5kaWYKLSAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSByZXN1
bHRMYXllcjsKKyAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IHJlc3VsdExheWVy
OwogICAgIH0KIAogICAgIHJldHVybiByZXN1bHRMYXllcjsKQEAgLTI3NDQsOSArMjc0NCw5IEBA
IHZvaWQgR3JhcGhpY3NMYXllckNBOjpzZXRPcGFjaXR5SW50ZXJuYWwoZmxvYXQgYWNjdW11bGF0
ZWRPcGFjaXR5KQogICAgIGlmIChsYXllckNsb25lTWFwKSB7CiAgICAgICAgIExheWVyTWFwOjpj
b25zdF9pdGVyYXRvciBlbmQgPSBsYXllckNsb25lTWFwLT5lbmQoKTsKICAgICAgICAgZm9yIChM
YXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXllckNsb25lTWFwLT5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGlmIChtX3JlcGxpY2FMYXllciAmJiBpc1JlcGxp
Y2F0ZWRSb290Q2xvbmUoaXQtPmZpcnN0KSkKKyAgICAgICAgICAgIGlmIChtX3JlcGxpY2FMYXll
ciAmJiBpc1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQtPmtleSkpCiAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRPcGFjaXR5KG1fb3BhY2l0eSk7Cisg
ICAgICAgICAgICBpdC0+dmFsdWUtPnNldE9wYWNpdHkobV9vcGFjaXR5KTsKICAgICAgICAgfQog
ICAgIH0KIH0KQEAgLTI3NTgsMTAgKzI3NTgsMTAgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnVw
ZGF0ZU9wYWNpdHlPbkxheWVyKCkKICAgICBpZiAoTGF5ZXJNYXAqIGxheWVyQ2xvbmVNYXAgPSBw
cmltYXJ5TGF5ZXJDbG9uZXMoKSkgewogICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7
Ci0gICAgICAgICAgICBpZiAobV9yZXBsaWNhTGF5ZXIgJiYgaXNSZXBsaWNhdGVkUm9vdENsb25l
KGl0LT5maXJzdCkpCisgICAgICAgICAgICBpZiAobV9yZXBsaWNhTGF5ZXIgJiYgaXNSZXBsaWNh
dGVkUm9vdENsb25lKGl0LT5rZXkpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAg
ICAgICAgICBpdC0+c2Vjb25kLT5zZXRPcGFjaXR5KG1fb3BhY2l0eSk7CisgICAgICAgICAgICBp
dC0+dmFsdWUtPnNldE9wYWNpdHkobV9vcGFjaXR5KTsKICAgICAgICAgfQogICAgICAgICAKICAg
ICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMv
VGlsZUNhY2hlLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1Rp
bGVDYWNoZS5tbQppbmRleCAwOTA0MGEzY2Q2MmZiOGYzOTg0OGM5ZjdlOWNjYzJhNzc4YjA0ODI5
Li5lMTU5YjYxZjk5MmYwNDM4ZjdmMWZkZjkyYTljODA5ZmQ1YWUwYzEzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvVGlsZUNhY2hlLm1tCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9UaWxlQ2FjaGUubW0KQEAg
LTc3LDcgKzc3LDcgQEAgVGlsZUNhY2hlOjp+VGlsZUNhY2hlKCkKICAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwogCiAgICAgZm9yIChUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVn
aW4oKSwgZW5kID0gbV90aWxlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFdl
YlRpbGVMYXllciogdGlsZUxheWVyID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgV2ViVGls
ZUxheWVyKiB0aWxlTGF5ZXIgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgIFt0aWxlTGF5ZXIg
c2V0VGlsZUNhY2hlOjBdOwogICAgIH0KIH0KQEAgLTk3LDcgKzk3LDcgQEAgdm9pZCBUaWxlQ2Fj
aGU6OnRpbGVDYWNoZUxheWVyQm91bmRzQ2hhbmdlZCgpCiB2b2lkIFRpbGVDYWNoZTo6c2V0TmVl
ZHNEaXNwbGF5KCkKIHsKICAgICBmb3IgKFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90
aWxlcy5iZWdpbigpLCBlbmQgPSBtX3RpbGVzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAg
ICAgIFtpdC0+c2Vjb25kLmdldCgpIHNldE5lZWRzRGlzcGxheV07CisgICAgICAgIFtpdC0+dmFs
dWUuZ2V0KCkgc2V0TmVlZHNEaXNwbGF5XTsKIH0KIAogdm9pZCBUaWxlQ2FjaGU6OnNldE5lZWRz
RGlzcGxheUluUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQpAQCAtMTc4LDkgKzE3OCw5IEBAIHZv
aWQgVGlsZUNhY2hlOjpzZXRTY2FsZShDR0Zsb2F0IHNjYWxlKQogICAgIHJldmFsaWRhdGVUaWxl
cygpOwogCiAgICAgZm9yIChUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVn
aW4oKSwgZW5kID0gbV90aWxlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFtp
dC0+c2Vjb25kLmdldCgpIHNldENvbnRlbnRzU2NhbGU6ZGV2aWNlU2NhbGVGYWN0b3JdOworICAg
ICAgICBbaXQtPnZhbHVlLmdldCgpIHNldENvbnRlbnRzU2NhbGU6ZGV2aWNlU2NhbGVGYWN0b3Jd
OwogCi0gICAgICAgIEludFJlY3QgdGlsZVJlY3QgPSByZWN0Rm9yVGlsZUluZGV4KGl0LT5maXJz
dCk7CisgICAgICAgIEludFJlY3QgdGlsZVJlY3QgPSByZWN0Rm9yVGlsZUluZGV4KGl0LT5rZXkp
OwogICAgICAgICBGbG9hdFJlY3Qgc2NhbGVkVGlsZVJlY3QgPSB0aWxlUmVjdDsKIAogICAgICAg
ICBzY2FsZWRUaWxlUmVjdC5zY2FsZSgxIC8gbV9zY2FsZSk7CkBAIC0yMDAsNyArMjAwLDcgQEAg
dm9pZCBUaWxlQ2FjaGU6OnNldEFjY2VsZXJhdGVzRHJhd2luZyhib29sIGFjY2VsZXJhdGVzRHJh
d2luZykKICAgICBtX2FjY2VsZXJhdGVzRHJhd2luZyA9IGFjY2VsZXJhdGVzRHJhd2luZzsKIAog
ICAgIGZvciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCksIGVu
ZCA9IG1fdGlsZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgW2l0LT5zZWNvbmQu
Z2V0KCkgc2V0QWNjZWxlcmF0ZXNEcmF3aW5nOm1fYWNjZWxlcmF0ZXNEcmF3aW5nXTsKKyAgICAg
ICAgW2l0LT52YWx1ZS5nZXQoKSBzZXRBY2NlbGVyYXRlc0RyYXdpbmc6bV9hY2NlbGVyYXRlc0Ry
YXdpbmddOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oYWNjZWxlcmF0ZXNEcmF3aW5nKTsKICNl
bmRpZgpAQCAtMjQ5LDcgKzI0OSw3IEBAIHZvaWQgVGlsZUNhY2hlOjpzZXRUaWxlRGVidWdCb3Jk
ZXJXaWR0aChmbG9hdCBib3JkZXJXaWR0aCkKIAogICAgIG1fdGlsZURlYnVnQm9yZGVyV2lkdGgg
PSBib3JkZXJXaWR0aDsKICAgICBmb3IgKFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90
aWxlcy5iZWdpbigpLCBlbmQgPSBtX3RpbGVzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAg
ICAgIFtpdC0+c2Vjb25kLmdldCgpIHNldEJvcmRlcldpZHRoOm1fdGlsZURlYnVnQm9yZGVyV2lk
dGhdOworICAgICAgICBbaXQtPnZhbHVlLmdldCgpIHNldEJvcmRlcldpZHRoOm1fdGlsZURlYnVn
Qm9yZGVyV2lkdGhdOwogfQogCiB2b2lkIFRpbGVDYWNoZTo6c2V0VGlsZURlYnVnQm9yZGVyQ29s
b3IoQ0dDb2xvclJlZiBib3JkZXJDb2xvcikKQEAgLTI1OSw3ICsyNTksNyBAQCB2b2lkIFRpbGVD
YWNoZTo6c2V0VGlsZURlYnVnQm9yZGVyQ29sb3IoQ0dDb2xvclJlZiBib3JkZXJDb2xvcikKIAog
ICAgIG1fdGlsZURlYnVnQm9yZGVyQ29sb3IgPSBib3JkZXJDb2xvcjsKICAgICBmb3IgKFRpbGVN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpLCBlbmQgPSBtX3RpbGVzLmVu
ZCgpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIFtpdC0+c2Vjb25kLmdldCgpIHNldEJvcmRl
ckNvbG9yOm1fdGlsZURlYnVnQm9yZGVyQ29sb3IuZ2V0KCldOworICAgICAgICBbaXQtPnZhbHVl
LmdldCgpIHNldEJvcmRlckNvbG9yOm1fdGlsZURlYnVnQm9yZGVyQ29sb3IuZ2V0KCldOwogfQog
CiBJbnRSZWN0IFRpbGVDYWNoZTo6Ym91bmRzKCkgY29uc3QKQEAgLTM2OCw5ICszNjgsOSBAQCB2
b2lkIFRpbGVDYWNoZTo6cmV2YWxpZGF0ZVRpbGVzKCkKICAgICBWZWN0b3I8VGlsZUluZGV4PiB0
aWxlc1RvUmVtb3ZlOwogCiAgICAgZm9yIChUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZXMu
YmVnaW4oKSwgZW5kID0gbV90aWxlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAg
IGNvbnN0IFRpbGVJbmRleCYgdGlsZUluZGV4ID0gaXQtPmZpcnN0OworICAgICAgICBjb25zdCBU
aWxlSW5kZXgmIHRpbGVJbmRleCA9IGl0LT5rZXk7CiAKLSAgICAgICAgV2ViVGlsZUxheWVyKiB0
aWxlTGF5ZXIgPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICBXZWJUaWxlTGF5ZXIqIHRpbGVM
YXllciA9IGl0LT52YWx1ZS5nZXQoKTsKIAogICAgICAgICBpZiAoIXJlY3RGb3JUaWxlSW5kZXgo
dGlsZUluZGV4KS5pbnRlcnNlY3RzKHRpbGVDb3ZlcmFnZVJlY3QpKSB7CiAgICAgICAgICAgICAv
LyBSZW1vdmUgdGhpcyBsYXllci4KQEAgLTM5OCw3ICszOTgsNyBAQCB2b2lkIFRpbGVDYWNoZTo6
cmV2YWxpZGF0ZVRpbGVzKCkKICAgICAgICAgICAgIFRpbGVJbmRleCB0aWxlSW5kZXgoeCwgeSk7
CiAKICAgICAgICAgICAgIEludFJlY3QgdGlsZVJlY3QgPSByZWN0Rm9yVGlsZUluZGV4KHRpbGVJ
bmRleCk7Ci0gICAgICAgICAgICBSZXRhaW5QdHI8V2ViVGlsZUxheWVyPiYgdGlsZUxheWVyID0g
bV90aWxlcy5hZGQodGlsZUluZGV4LCAwKS5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICAgICAg
UmV0YWluUHRyPFdlYlRpbGVMYXllcj4mIHRpbGVMYXllciA9IG1fdGlsZXMuYWRkKHRpbGVJbmRl
eCwgMCkuaXRlcmF0b3ItPnZhbHVlOwogICAgICAgICAgICAgaWYgKCF0aWxlTGF5ZXIpIHsKICAg
ICAgICAgICAgICAgICB0aWxlTGF5ZXIgPSBjcmVhdGVUaWxlTGF5ZXIodGlsZVJlY3QpOwogICAg
ICAgICAgICAgICAgIFttX3RpbGVDb250YWluZXJMYXllci5nZXQoKSBhZGRTdWJsYXllcjp0aWxl
TGF5ZXIuZ2V0KCldOwpAQCAtNDE4LDcgKzQxOCw3IEBAIHZvaWQgVGlsZUNhY2hlOjpyZXZhbGlk
YXRlVGlsZXMoKQogCiAgICAgbV90aWxlQ292ZXJhZ2VSZWN0ID0gSW50UmVjdCgpOwogICAgIGZv
ciAoVGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCksIGVuZCA9IG1fdGlsZXMu
ZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBjb25zdCBUaWxlSW5kZXgmIHRpbGVJ
bmRleCA9IGl0LT5maXJzdDsKKyAgICAgICAgY29uc3QgVGlsZUluZGV4JiB0aWxlSW5kZXggPSBp
dC0+a2V5OwogCiAgICAgICAgIG1fdGlsZUNvdmVyYWdlUmVjdC51bml0ZShyZWN0Rm9yVGlsZUlu
ZGV4KHRpbGVJbmRleCkpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbi5jcHAKaW5kZXgg
NDhiMjBkMGI4YmQyNDJhYjU0OWI4ZmU0NDJkZjQ0YWIzNjcyZWI4NS4uNzAxNjhiMjEwNGRiMzY5
ZGEwNzU3YTExNDQ2MjIxMTFiYzMwNjFmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbi5jcHAK
QEAgLTE2Nyw3ICsxNjcsNyBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcjo6YW5pbWF0aW9uU3RhcnRl
ZChDRlRpbWVJbnRlcnZhbCBiZWdpblRpbWUpCiAKICAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRy
PFBsYXRmb3JtQ0FBbmltYXRpb24+ID46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fYW5pbWF0aW9u
cy5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8UGxhdGZvcm1DQUFuaW1h
dGlvbj4gPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2FuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5zZXRBY3R1YWxTdGFydFRpbWVJZk5lZWRl
ZChjYWNmQmVnaW5UaW1lKTsKKyAgICAgICAgaXQtPnZhbHVlLT5zZXRBY3R1YWxTdGFydFRpbWVJ
Zk5lZWRlZChjYWNmQmVnaW5UaW1lKTsKIAogICAgIGlmIChtX293bmVyKQogICAgICAgICBtX293
bmVyLT5wbGF0Zm9ybUNBTGF5ZXJBbmltYXRpb25TdGFydGVkKGJlZ2luVGltZSk7CkBAIC0xNzcs
OCArMTc3LDggQEAgc3RhdGljIHZvaWQgcmVzdWJtaXRBbGxBbmltYXRpb25zKFBsYXRmb3JtQ0FM
YXllciogbGF5ZXIpCiB7CiAgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxQbGF0Zm9ybUNBQW5p
bWF0aW9uPiA+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBsYXllci0+YW5pbWF0aW9ucygpLmVuZCgp
OwogICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiA+
Ojpjb25zdF9pdGVyYXRvciBpdCA9IGxheWVyLT5hbmltYXRpb25zKCkuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7Ci0gICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gcyhBZG9wdENGLCBp
dC0+Zmlyc3QuY3JlYXRlQ0ZTdHJpbmcoKSk7Ci0gICAgICAgIENBQ0ZMYXllckFkZEFuaW1hdGlv
bihsYXllci0+cGxhdGZvcm1MYXllcigpLCBzLmdldCgpLCBpdC0+c2Vjb25kLT5wbGF0Zm9ybUFu
aW1hdGlvbigpKTsKKyAgICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBzKEFkb3B0Q0YsIGl0
LT5rZXkuY3JlYXRlQ0ZTdHJpbmcoKSk7CisgICAgICAgIENBQ0ZMYXllckFkZEFuaW1hdGlvbihs
YXllci0+cGxhdGZvcm1MYXllcigpLCBzLmdldCgpLCBpdC0+dmFsdWUtPnBsYXRmb3JtQW5pbWF0
aW9uKCkpOwogICAgIH0KIH0KIApAQCAtMzI4LDcgKzMyOCw3IEBAIFBhc3NSZWZQdHI8UGxhdGZv
cm1DQUFuaW1hdGlvbj4gUGxhdGZvcm1DQUxheWVyOjphbmltYXRpb25Gb3JLZXkoY29uc3QgU3Ry
aW5nJiBrCiAgICAgaWYgKGl0ID09IG1fYW5pbWF0aW9ucy5lbmQoKSkKICAgICAgICAgcmV0dXJu
IDA7CiAKLSAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICByZXR1cm4gaXQtPnZhbHVlOwogfQog
CiBQbGF0Zm9ybUNBTGF5ZXIqIFBsYXRmb3JtQ0FMYXllcjo6bWFzaygpIGNvbnN0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2FjaGVD
aHJvbWl1bVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9Gb250Q2FjaGVDaHJvbWl1bVdpbi5jcHAKaW5kZXggODYwZGQwOTk2MjhkNmRhYTFlMWQ5MjNj
YmViYmJkYzdmNGExMGY5My4uMThlMzA0Mzg4MGM3YTQ5MTRiOWUwODU4YWZlMTEzYzczZDg3NjBh
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Rm9udENhY2hlQ2hyb21pdW1XaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUNocm9taXVtV2luLmNwcApAQCAtMjIzLDEwICsyMjMs
MTAgQEAgc3RhdGljIGJvb2wgTG9va3VwQWx0TmFtZShjb25zdCBTdHJpbmcmIG5hbWUsIFN0cmlu
ZyYgYWx0TmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgc3RhdGljIGludCBzeXN0
ZW1DcCA9IDo6R2V0QUNQKCk7Ci0gICAgaW50IGZvbnRDcCA9IGl0ZXItPnNlY29uZC0+Y29kZVBh
Z2U7CisgICAgaW50IGZvbnRDcCA9IGl0ZXItPnZhbHVlLT5jb2RlUGFnZTsKIAogICAgIGlmICgo
aXNBc2NpaSAmJiBzeXN0ZW1DcCA9PSBmb250Q3ApIHx8ICghaXNBc2NpaSAmJiBzeXN0ZW1DcCAh
PSBmb250Q3ApKSB7Ci0gICAgICAgIGFsdE5hbWUgPSBTdHJpbmcoaXRlci0+c2Vjb25kLT5uYW1l
KTsKKyAgICAgICAgYWx0TmFtZSA9IFN0cmluZyhpdGVyLT52YWx1ZS0+bmFtZSk7CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMjc3LDcgKzI3Nyw3IEBAIHN0YXRpYyBib29sIGZv
bnRDb250YWluc0NoYXJhY3Rlcihjb25zdCBGb250UGxhdGZvcm1EYXRhKiBmb250RGF0YSwKIAog
ICAgIEhhc2hNYXA8Y29uc3Qgd2NoYXJfdCosIGljdTo6VW5pY29kZVNldCo+OjppdGVyYXRvciBp
dCA9IGZvbnRDbWFwQ2FjaGUtPmZpbmQoZmFtaWx5KTsKICAgICBpZiAoaXQgIT0gZm9udENtYXBD
YWNoZS0+ZW5kKCkpCi0gICAgICAgIHJldHVybiBpdC0+c2Vjb25kLT5jb250YWlucyhjaGFyYWN0
ZXIpOworICAgICAgICByZXR1cm4gaXQtPnZhbHVlLT5jb250YWlucyhjaGFyYWN0ZXIpOwogCiAg
ICAgSEZPTlQgaGZvbnQgPSBmb250RGF0YS0+aGZvbnQoKTsKICAgICBIV25kREMgaGRjKDApOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9u
dFV0aWxzQ2hyb21pdW1XaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vRm9udFV0aWxzQ2hyb21pdW1XaW4uY3BwCmluZGV4IGRmOTQxY2I5MDMzZmRjMDc2
MGY2MWRiOWNmYWQxZjRhOTJkZGQ5YTMuLjEwZjFmZDA3ODZlYTQ4ODNhOWIzNDMxNmFlMDZjM2Fi
ODI2OTViNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0ZvbnRVdGlsc0Nocm9taXVtV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250VXRpbHNDaHJvbWl1bVdpbi5jcHAKQEAgLTQxNSw3
ICs0MTUsNyBAQCBib29sIGdldERlcml2ZWRGb250RGF0YShjb25zdCBVQ2hhciogZmFtaWx5LAog
ICAgICAgICAvLyBjaGVjayBpdCBhZ2FpbnN0IHdoYXQgd2UgYWN0dWFsbHkgd2FudCAoYXMgaXMg
ZG9uZSBpbgogICAgICAgICAvLyBGb250Q2FjaGVXaW4uY3BwKQogICAgICAgICBGb250RGF0YUNh
Y2hlOjpBZGRSZXN1bHQgZW50cnkgPSBmb250RGF0YUNhY2hlLmFkZChmb250S2V5LCBGb250RGF0
YSgpKTsKLSAgICAgICAgZGVyaXZlZCA9ICZlbnRyeS5pdGVyYXRvci0+c2Vjb25kOworICAgICAg
ICBkZXJpdmVkID0gJmVudHJ5Lml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgZGVyaXZlZC0+aGZv
bnQgPSBDcmVhdGVGb250SW5kaXJlY3QobG9nZm9udCk7CiAgICAgICAgIC8vIEdldEFzY2VudCBt
YXkgcmV0dXJuIGtVbmRlZmluZWRBc2NlbnQsIGJ1dCB3ZSBzdGlsbCB3YW50IHRvCiAgICAgICAg
IC8vIGNhY2hlIGl0IHNvIHRoYXQgd2Ugd29uJ3QgaGF2ZSB0byBjYWxsIENyZWF0ZUZvbnRJbmRp
cmVjdCBvbmNlCkBAIC00MjMsNyArNDIzLDcgQEAgYm9vbCBnZXREZXJpdmVkRm9udERhdGEoY29u
c3QgVUNoYXIqIGZhbWlseSwKICAgICAgICAgZGVyaXZlZC0+YXNjZW50ID0gZ2V0QXNjZW50KGRl
cml2ZWQtPmhmb250KTsKICAgICAgICAgZGVyaXZlZC0+c3BhY2VHbHlwaCA9IGdldFNwYWNlR2x5
cGgoZGVyaXZlZC0+aGZvbnQpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGRlcml2ZWQgPSAmaXRl
ci0+c2Vjb25kOworICAgICAgICBkZXJpdmVkID0gJml0ZXItPnZhbHVlOwogICAgICAgICAvLyBM
YXN0IHRpbWUsIEdldEFzY2VudCBmYWlsZWQgc28gdGhhdCBvbmx5IEhGT05UIHdhcwogICAgICAg
ICAvLyBjYWNoZWQuIFRyeSBvbmNlIG1vcmUgYXNzdW1pbmcgdGhhdCBUcnlQcmVsb2FkRm9udAog
ICAgICAgICAvLyB3YXMgY2FsbGVkIGJ5IGEgY2FsbGVyIGJldHdlZW4gY2FsbHMuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRl
ckdsb2JhbENvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9DdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0LmNwcAppbmRleCBkYTk3ODJhZjgwMzUyMjM1
YjBjMGYwYjA3YjE3MmI5NDczNmZlNmIwLi4wMmE5NmI4NjRkMzJhNDk2YjEyMDY4MjNmNjI4MGM4
M2M5ZjEwOTM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0N1c3RvbUZpbHRlckdsb2JhbENvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dC5jcHAK
QEAgLTQ0LDcgKzQ0LDcgQEAgQ3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dDo6Q3VzdG9tRmlsdGVy
R2xvYmFsQ29udGV4dCgpCiBDdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0Ojp+Q3VzdG9tRmlsdGVy
R2xvYmFsQ29udGV4dCgpCiB7CiAgICAgZm9yIChDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFt
c01hcDo6aXRlcmF0b3IgaXRlciA9IG1fcHJvZ3JhbXMuYmVnaW4oKTsgaXRlciAhPSBtX3Byb2dy
YW1zLmVuZCgpOyArK2l0ZXIpCi0gICAgICAgIGl0ZXItPnNlY29uZC0+ZGV0YWNoRnJvbUdsb2Jh
bENvbnRleHQoKTsKKyAgICAgICAgaXRlci0+dmFsdWUtPmRldGFjaEZyb21HbG9iYWxDb250ZXh0
KCk7CiB9CiAKIEFOR0xFV2ViS2l0QnJpZGdlKiBDdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0Ojp3
ZWJnbFNoYWRlclZhbGlkYXRvcigpCkBAIC05MSw3ICs5MSw3IEBAIFBhc3NSZWZQdHI8Q3VzdG9t
RmlsdGVyVmFsaWRhdGVkUHJvZ3JhbT4gQ3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dDo6Z2V0VmFs
aWRhdGVkCiB7CiAgICAgQ3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbXNNYXA6Oml0ZXJhdG9y
IGl0ZXIgPSBtX3Byb2dyYW1zLmZpbmQocHJvZ3JhbUluZm8pOwogICAgIGlmIChpdGVyICE9IG1f
cHJvZ3JhbXMuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdGVyLT5zZWNvbmQ7CisgICAgICAgIHJl
dHVybiBpdGVyLT52YWx1ZTsKIAogICAgIFJlZlB0cjxDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9n
cmFtPiB2YWxpZGF0ZWRQcm9ncmFtID0gQ3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbTo6Y3Jl
YXRlKHRoaXMsIHByb2dyYW1JbmZvKTsKICAgICBtX3Byb2dyYW1zLnNldChwcm9ncmFtSW5mbywg
dmFsaWRhdGVkUHJvZ3JhbS5nZXQoKSk7CkBAIC0xMDcsNyArMTA3LDcgQEAgdm9pZCBDdXN0b21G
aWx0ZXJHbG9iYWxDb250ZXh0OjpyZW1vdmVWYWxpZGF0ZWRQcm9ncmFtKGNvbnN0IEN1c3RvbUZp
bHRlclZhbGlkYXQKICNpZm5kZWYgTkRFQlVHCiAgICAgLy8gQ2hlY2sgdGhhdCB0aGVyZSdzIG5v
IHdheSB3ZSBjb3VsZCBoYXZlIHRoZSBzYW1lIHByb2dyYW0gdW5kZXIgYSBkaWZmZXJlbnQga2V5
LgogICAgIGZvciAoaXRlciA9IG1fcHJvZ3JhbXMuYmVnaW4oKTsgaXRlciAhPSBtX3Byb2dyYW1z
LmVuZCgpOyArK2l0ZXIpCi0gICAgICAgIEFTU0VSVChpdGVyLT5zZWNvbmQgIT0gcHJvZ3JhbSk7
CisgICAgICAgIEFTU0VSVChpdGVyLT52YWx1ZSAhPSBwcm9ncmFtKTsKICNlbmRpZgogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3Rv
bUZpbHRlclByb2dyYW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9DdXN0b21GaWx0ZXJQcm9ncmFtLmNwcAppbmRleCBkMWNmNjEzNGY3MGFlOGFiZjUyZmM2
MjNhN2Q2OTY1MzQ4NzlmNjEyLi45NGU4M2RmOWI4M2IyYjViNTRmZTc0N2E3ZTJhZmNiNDIyNWU5
Y2ZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0N1c3RvbUZpbHRlclByb2dyYW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyUHJvZ3JhbS5jcHAKQEAgLTc1LDcgKzc1LDcgQEAg
dm9pZCBDdXN0b21GaWx0ZXJQcm9ncmFtOjpyZW1vdmVDbGllbnQoQ3VzdG9tRmlsdGVyUHJvZ3Jh
bUNsaWVudCogY2xpZW50KQogdm9pZCBDdXN0b21GaWx0ZXJQcm9ncmFtOjpub3RpZnlDbGllbnRz
KCkKIHsKICAgICBmb3IgKEN1c3RvbUZpbHRlclByb2dyYW1DbGllbnRMaXN0OjppdGVyYXRvciBp
dGVyID0gbV9jbGllbnRzLmJlZ2luKCksIGVuZCA9IG1fY2xpZW50cy5lbmQoKTsgaXRlciAhPSBl
bmQ7ICsraXRlcikKLSAgICAgICAgaXRlci0+Zmlyc3QtPm5vdGlmeUN1c3RvbUZpbHRlclByb2dy
YW1Mb2FkZWQodGhpcyk7CisgICAgICAgIGl0ZXItPmtleS0+bm90aWZ5Q3VzdG9tRmlsdGVyUHJv
Z3JhbUxvYWRlZCh0aGlzKTsKIH0KIAogQ3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8gQ3VzdG9tRmls
dGVyUHJvZ3JhbTo6cHJvZ3JhbUluZm8oKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTa2lhLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2tpYS5jcHAKaW5kZXgg
ZjY4ZWE2MTkyNDVmODY2ZTViZDBkNTc4ZDAxMDQ4NDQ1MjU4NGMyYi4uMWU4ODY3YmI3NTdmMjI0
MmU4ZjQ5NjJmODc1YjFiZGY3YWU5OTEyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTa2lhLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNraWEuY3BwCkBAIC0yNDQs
MTggKzI0NCwxOCBAQCBzdGF0aWMgSEJfRmFjZVJlY18qIGdldENhY2hlZEhhcmZidXp6RmFjZShG
b250UGxhdGZvcm1EYXRhKiBwbGF0Zm9ybURhdGEpCiAgICAgICAgIGdIYXJmYnV6ekZhY2VDYWNo
ZS0+c2V0KHVuaXF1ZUlELCBlbnRyeSk7CiAgICAgICAgIHJldHVybiBlbnRyeS5maXJzdDsKICAg
ICB9Ci0gICAgKysocmVzdWx0LmdldCgpLT5zZWNvbmQuc2Vjb25kKTsKLSAgICByZXR1cm4gcmVz
dWx0LmdldCgpLT5zZWNvbmQuZmlyc3Q7CisgICAgKysocmVzdWx0LmdldCgpLT52YWx1ZS5zZWNv
bmQpOworICAgIHJldHVybiByZXN1bHQuZ2V0KCktPnZhbHVlLmZpcnN0OwogfQogCiBzdGF0aWMg
dm9pZCByZWxlYXNlQ2FjaGVkSGFyZmJ1enpGYWNlKFNrRm9udElEIHVuaXF1ZUlEKQogewogICAg
IEhhcmZidXp6RmFjZUNhY2hlOjppdGVyYXRvciByZXN1bHQgPSBnSGFyZmJ1enpGYWNlQ2FjaGUt
PmZpbmQodW5pcXVlSUQpOwogICAgIEFTU0VSVChyZXN1bHQgIT0gZ0hhcmZidXp6RmFjZUNhY2hl
LT5lbmQoKSk7Ci0gICAgQVNTRVJUKHJlc3VsdC5nZXQoKS0+c2Vjb25kLnNlY29uZCA+IDApOwot
ICAgIC0tKHJlc3VsdC5nZXQoKS0+c2Vjb25kLnNlY29uZCk7Ci0gICAgaWYgKCEocmVzdWx0Lmdl
dCgpLT5zZWNvbmQuc2Vjb25kKSkgewotICAgICAgICBIQl9GcmVlRmFjZShyZXN1bHQuZ2V0KCkt
PnNlY29uZC5maXJzdCk7CisgICAgQVNTRVJUKHJlc3VsdC5nZXQoKS0+dmFsdWUuc2Vjb25kID4g
MCk7CisgICAgLS0ocmVzdWx0LmdldCgpLT52YWx1ZS5zZWNvbmQpOworICAgIGlmICghKHJlc3Vs
dC5nZXQoKS0+dmFsdWUuc2Vjb25kKSkgeworICAgICAgICBIQl9GcmVlRmFjZShyZXN1bHQuZ2V0
KCktPnZhbHVlLmZpcnN0KTsKICAgICAgICAgZ0hhcmZidXp6RmFjZUNhY2hlLT5yZW1vdmUodW5p
cXVlSUQpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6TkdGYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6TkdGYWNlLmNwcAppbmRleCAxZTU0
YWUzOGQ4YzgwNDhjMmJmYzY0ZjdmZDk2ZWJiM2FiODBmZWE0Li4yNjQ5MzVjY2NmNDlhNDViNDM0
ZDliNTk3MjVjYzVhMTFiMTRiNjIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ek5HRmFjZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpOR0ZhY2UuY3BwCkBA
IC03OSwxOSArNzksMTkgQEAgSGFyZkJ1enpOR0ZhY2U6OkhhcmZCdXp6TkdGYWNlKEZvbnRQbGF0
Zm9ybURhdGEqIHBsYXRmb3JtRGF0YSwgdWludDY0X3QgdW5pcXVlSUQKIHsKICAgICBIYXJmQnV6
ek5HRmFjZUNhY2hlOjpBZGRSZXN1bHQgcmVzdWx0ID0gaGFyZmJ1enpGYWNlQ2FjaGUoKS0+YWRk
KG1fdW5pcXVlSUQsIDApOwogICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgcmVz
dWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBGYWNlQ2FjaGVFbnRyeTo6Y3JlYXRlKGNyZWF0ZUZhY2Uo
KSk7Ci0gICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQtPnJlZigpOwotICAgIG1fZmFjZSA9IHJl
c3VsdC5pdGVyYXRvci0+c2Vjb25kLT5mYWNlKCk7Ci0gICAgbV9nbHlwaENhY2hlRm9yRmFjZUNh
Y2hlRW50cnkgPSByZXN1bHQuaXRlcmF0b3ItPnNlY29uZC0+Z2x5cGhDYWNoZSgpOworICAgICAg
ICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gRmFjZUNhY2hlRW50cnk6OmNyZWF0ZShjcmVhdGVG
YWNlKCkpOworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPnJlZigpOworICAgIG1fZmFjZSA9
IHJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPmZhY2UoKTsKKyAgICBtX2dseXBoQ2FjaGVGb3JGYWNl
Q2FjaGVFbnRyeSA9IHJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPmdseXBoQ2FjaGUoKTsKIH0KIAog
SGFyZkJ1enpOR0ZhY2U6On5IYXJmQnV6ek5HRmFjZSgpCiB7CiAgICAgSGFyZkJ1enpOR0ZhY2VD
YWNoZTo6aXRlcmF0b3IgcmVzdWx0ID0gaGFyZmJ1enpGYWNlQ2FjaGUoKS0+ZmluZChtX3VuaXF1
ZUlEKTsKICAgICBBU1NFUlQocmVzdWx0ICE9IGhhcmZidXp6RmFjZUNhY2hlKCktPmVuZCgpKTsK
LSAgICBBU1NFUlQocmVzdWx0LmdldCgpLT5zZWNvbmQtPnJlZkNvdW50KCkgPiAxKTsKLSAgICBy
ZXN1bHQuZ2V0KCktPnNlY29uZC0+ZGVyZWYoKTsKLSAgICBpZiAocmVzdWx0LmdldCgpLT5zZWNv
bmQtPnJlZkNvdW50KCkgPT0gMSkKKyAgICBBU1NFUlQocmVzdWx0LmdldCgpLT52YWx1ZS0+cmVm
Q291bnQoKSA+IDEpOworICAgIHJlc3VsdC5nZXQoKS0+dmFsdWUtPmRlcmVmKCk7CisgICAgaWYg
KHJlc3VsdC5nZXQoKS0+dmFsdWUtPnJlZkNvdW50KCkgPT0gMSkKICAgICAgICAgaGFyZmJ1enpG
YWNlQ2FjaGUoKS0+cmVtb3ZlKG1fdW5pcXVlSUQpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFDb3JlVGV4dC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFDb3Jl
VGV4dC5jcHAKaW5kZXggMDUxOTM3NDJjNTg1MmRiZTljOWNlZDY0YjlhMDdhYWQyYzFlYTQ3Ny4u
MGI3MTMzNDdmNjA0NjM1NTQ5ZTUwZDU2MzY1MjE4YjIzNDQyNmFjZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhQ29yZVRleHQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250
RGF0YUNvcmVUZXh0LmNwcApAQCAtNDMsNyArNDMsNyBAQCBDRkRpY3Rpb25hcnlSZWYgU2ltcGxl
Rm9udERhdGE6OmdldENGU3RyaW5nQXR0cmlidXRlcyhUeXBlc2V0dGluZ0ZlYXR1cmVzIHR5cGVz
ZQogewogICAgIHVuc2lnbmVkIGtleSA9IHR5cGVzZXR0aW5nRmVhdHVyZXMgKyAxOwogICAgIEhh
c2hNYXA8dW5zaWduZWQsIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+ID46OkFkZFJlc3VsdCBh
ZGRSZXN1bHQgPSBtX0NGU3RyaW5nQXR0cmlidXRlcy5hZGQoa2V5LCBSZXRhaW5QdHI8Q0ZEaWN0
aW9uYXJ5UmVmPigpKTsKLSAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiYgYXR0cmlidXRl
c0RpY3Rpb25hcnkgPSBhZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBSZXRhaW5QdHI8
Q0ZEaWN0aW9uYXJ5UmVmPiYgYXR0cmlidXRlc0RpY3Rpb25hcnkgPSBhZGRSZXN1bHQuaXRlcmF0
b3ItPnZhbHVlOwogICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkpCiAgICAgICAgIHJldHVy
biBhdHRyaWJ1dGVzRGljdGlvbmFyeS5nZXQoKTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YU1hYy5tbSBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YU1hYy5tbQppbmRl
eCBmN2JhYmVjMDEzNTg1OWIzMjVmZjMwYTMzNGEwZDc5MTk3NTdlMWU0Li5mOGJiNDNiYTcwZDk2
YmZlOWM1ZDdjYzZjMDAxNTAyYjFmYmIwNjUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW0KKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhTWFjLm1tCkBAIC00NjEs
NyArNDYxLDcgQEAgYm9vbCBTaW1wbGVGb250RGF0YTo6Y2FuUmVuZGVyQ29tYmluaW5nQ2hhcmFj
dGVyU2VxdWVuY2UoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMKIAogICAgIFdURjo6SGFzaE1hcDxT
dHJpbmcsIGJvb2w+OjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gbV9jb21iaW5pbmdDaGFyYWN0ZXJT
ZXF1ZW5jZVN1cHBvcnQtPmFkZChTdHJpbmcoY2hhcmFjdGVycywgbGVuZ3RoKSwgZmFsc2UpOwog
ICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJldHVybiBhZGRSZXN1bHQu
aXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFs
dWU7CiAKICAgICBSZXRhaW5QdHI8Q0dGb250UmVmPiBjZ0ZvbnQoQWRvcHRDRiwgQ1RGb250Q29w
eUdyYXBoaWNzRm9udChwbGF0Zm9ybURhdGEoKS5jdEZvbnQoKSwgMCkpOwogCkBAIC00ODEsNyAr
NDgxLDcgQEAgYm9vbCBTaW1wbGVGb250RGF0YTo6Y2FuUmVuZGVyQ29tYmluaW5nQ2hhcmFjdGVy
U2VxdWVuY2UoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAKLSAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IHRydWU7CisgICAg
YWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IHRydWU7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRl
bnNpb25zM0RPcGVuR0xDb21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAKaW5kZXggY2MxNjc2NzhmZWYw
MzcxYWFmMjMwOGYzNjE4Y2M2YWZhZmMzMjg1OC4uYWFmNjhkOGJlNWE1Nzg5YTgwZGYxNWRmMThm
N2Y2ODhlY2M4MmQwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAK
QEAgLTE1Nyw3ICsxNTcsNyBAQCBTdHJpbmcgRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uOjpnZXRU
cmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUoUGxhdGZvcm0zRE9iamVjdAogICAgIGlmIChyZXN1
bHQgPT0gbV9jb250ZXh0LT5tX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJu
ICIiOwogCi0gICAgR3JhcGhpY3NDb250ZXh0M0Q6OlNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9
IHJlc3VsdC0+c2Vjb25kOworICAgIEdyYXBoaWNzQ29udGV4dDNEOjpTaGFkZXJTb3VyY2VFbnRy
eSYgZW50cnkgPSByZXN1bHQtPnZhbHVlOwogCiAgICAgU3RyaW5nIHRyYW5zbGF0ZWRTaGFkZXJT
b3VyY2U7CiAgICAgU3RyaW5nIHNoYWRlckluZm9Mb2c7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21t
b24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNz
Q29udGV4dDNET3BlbkdMQ29tbW9uLmNwcAppbmRleCAxNTE2ZWEyNjA4NGFlY2VjZjhkNWU2MDcz
NzZjZDUxMjI0OTIxYjkwLi4wZTgxY2M1ZjhmNmRmOTYwODA4NzY4MmY2Y2M0YWJhN2M4ZTk4N2U5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3Jh
cGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAKQEAg
LTQ2Niw3ICs0NjYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb21waWxlU2hhZGVyKFBs
YXRmb3JtM0RPYmplY3Qgc2hhZGVyKQogCiAgICAgaWYgKGxlbmd0aCkgewogICAgICAgICBTaGFk
ZXJTb3VyY2VNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hh
ZGVyKTsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OlNoYWRlclNvdXJjZUVudHJ5JiBlbnRy
eSA9IHJlc3VsdC0+c2Vjb25kOworICAgICAgICBHcmFwaGljc0NvbnRleHQzRDo6U2hhZGVyU291
cmNlRW50cnkmIGVudHJ5ID0gcmVzdWx0LT52YWx1ZTsKIAogICAgICAgICBHTHNpemVpIHNpemUg
PSAwOwogICAgICAgICBPd25BcnJheVB0cjxHTGNoYXI+IGluZm8gPSBhZG9wdEFycmF5UHRyKG5l
dyBHTGNoYXJbbGVuZ3RoXSk7CkBAIC02ODIsMTAgKzY4MiwxMCBAQCBTdHJpbmcgR3JhcGhpY3ND
b250ZXh0M0Q6Om1hcHBlZFN5bWJvbE5hbWUoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBBTkdM
RVNoYWRlcgogICAgICAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQog
ICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgY29uc3QgU2hhZGVyU3ltYm9sTWFwJiBz
eW1ib2xNYXAgPSByZXN1bHQtPnNlY29uZC5zeW1ib2xNYXAoc3ltYm9sVHlwZSk7CisgICAgICAg
IGNvbnN0IFNoYWRlclN5bWJvbE1hcCYgc3ltYm9sTWFwID0gcmVzdWx0LT52YWx1ZS5zeW1ib2xN
YXAoc3ltYm9sVHlwZSk7CiAgICAgICAgIFNoYWRlclN5bWJvbE1hcDo6Y29uc3RfaXRlcmF0b3Ig
c3ltYm9sRW50cnkgPSBzeW1ib2xNYXAuZmluZChuYW1lKTsKICAgICAgICAgaWYgKHN5bWJvbEVu
dHJ5ICE9IHN5bWJvbE1hcC5lbmQoKSkKLSAgICAgICAgICAgIHJldHVybiBzeW1ib2xFbnRyeS0+
c2Vjb25kLm1hcHBlZE5hbWU7CisgICAgICAgICAgICByZXR1cm4gc3ltYm9sRW50cnktPnZhbHVl
Lm1hcHBlZE5hbWU7CiAgICAgfQogICAgIHJldHVybiBuYW1lOwogfQpAQCAtMTE2Myw3ICsxMTYz
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVyaXYoUGxhdGZvcm0zRE9iamVj
dCBzaGFkZXIsIEdDM0RlbnVtIHBuYW1lLCBHQzMKICAgICAgICAgICAgICp2YWx1ZSA9IHN0YXRp
Y19jYXN0PGludD4oZmFsc2UpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAg
ICAgICp2YWx1ZSA9IHN0YXRpY19jYXN0PGludD4ocmVzdWx0LT5zZWNvbmQuaXNWYWxpZCk7Cisg
ICAgICAgICp2YWx1ZSA9IHN0YXRpY19jYXN0PGludD4ocmVzdWx0LT52YWx1ZS5pc1ZhbGlkKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJTkZPX0xPR19MRU5HVEg6CiAgICAgICAgIGlmIChy
ZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpIHsKQEAgLTExOTAsNyArMTE5MCw3IEBA
IFN0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVySW5mb0xvZyhQbGF0Zm9ybTNET2Jq
ZWN0IHNoYWRlcikKICAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQog
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7IAogCi0gICAgU2hhZGVyU291cmNlRW50cnkgZW50cnkg
PSByZXN1bHQtPnNlY29uZDsKKyAgICBTaGFkZXJTb3VyY2VFbnRyeSBlbnRyeSA9IHJlc3VsdC0+
dmFsdWU7CiAgICAgaWYgKCFlbnRyeS5pc1ZhbGlkKQogICAgICAgICByZXR1cm4gZW50cnkubG9n
OwogCkBAIC0xMjE2LDcgKzEyMTYsNyBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNo
YWRlclNvdXJjZShQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKICAgICBpZiAocmVzdWx0ID09IG1f
c2hhZGVyU291cmNlTWFwLmVuZCgpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7IAogCi0gICAg
cmV0dXJuIHJlc3VsdC0+c2Vjb25kLnNvdXJjZTsKKyAgICByZXR1cm4gcmVzdWx0LT52YWx1ZS5z
b3VyY2U7CiB9CiAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbnZnL0VHTERpc3BsYXlPcGVuVkcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbnZnL0VHTERpc3BsYXlPcGVuVkcuY3BwCmluZGV4IGQ2ODFkNzU4MWZiM2Zi
ZjI5ZDg4ZTEyNmU1MzgzODc4MjMwYjUyMjAuLjFhNjhhZWZmOGNjOGM5ZjU0NzZiNGYwNTM1NjYy
MGZlMTkxNDFjNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW52Zy9FR0xEaXNwbGF5T3BlblZHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVudmcvRUdMRGlzcGxheU9wZW5WRy5jcHAKQEAgLTEyMSw3ICsxMjEsNyBA
QCBFR0xEaXNwbGF5T3BlblZHOjp+RUdMRGlzcGxheU9wZW5WRygpCiAKICAgICBIYXNoTWFwPEVH
TFN1cmZhY2UsIEVHTGludD46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fc3VyZmFjZUNvbmZpZ0lk
cy5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8RUdMU3VyZmFjZSwgRUdMaW50Pjo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX3N1cmZhY2VDb25maWdJZHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQot
ICAgICAgICBkZXN0cm95U3VyZmFjZSgoKml0KS5maXJzdCk7CisgICAgICAgIGRlc3Ryb3lTdXJm
YWNlKCgqaXQpLmtleSk7CiAKICAgICBlZ2xUZXJtaW5hdGUobV9kaXNwbGF5KTsKICAgICBBU1NF
UlRfRUdMX05PX0VSUk9SKCk7CkBAIC0zMzgsNyArMzM4LDcgQEAgdm9pZCBFR0xEaXNwbGF5T3Bl
blZHOjpkZXN0cm95U3VyZmFjZShjb25zdCBFR0xTdXJmYWNlJiBzdXJmYWNlKQogCiAgICAgICAg
IC8vIC4uLmJ1dCBvbmx5IGlmIHRoZXJlJ3Mgbm8gb3RoZXIgc3VyZmFjZXMgYXNzb2NpYXRlZCB0
byB0aGF0IGNvbnRleHQuCiAgICAgICAgIGZvciAoSGFzaE1hcDxFR0xTdXJmYWNlLCBFR0xpbnQ+
OjppdGVyYXRvciBpdCA9IG1fc3VyZmFjZUNvbmZpZ0lkcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKLSAgICAgICAgICAgIGlmICgoKml0KS5zZWNvbmQgPT0gc3VyZmFjZUNvbmZpZ0lkKSB7
CisgICAgICAgICAgICBpZiAoKCppdCkudmFsdWUgPT0gc3VyZmFjZUNvbmZpZ0lkKSB7CiAgICAg
ICAgICAgICAgICAgaXNDb250ZXh0UmVmZXJlbmNlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0zNTQsNyArMzU0LDcgQEAgdm9pZCBFR0xEaXNwbGF5
T3BlblZHOjpkZXN0cm95U3VyZmFjZShjb25zdCBFR0xTdXJmYWNlJiBzdXJmYWNlKQogCiAgICAg
SGFzaE1hcDxFR0xOYXRpdmVXaW5kb3dUeXBlLCBFR0xTdXJmYWNlPjo6aXRlcmF0b3IgZW5kID0g
bV93aW5kb3dTdXJmYWNlcy5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8RUdMTmF0aXZlV2luZG93
VHlwZSwgRUdMU3VyZmFjZT46Oml0ZXJhdG9yIGl0ID0gbV93aW5kb3dTdXJmYWNlcy5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKCgqaXQpLnNlY29uZCA9PSBzdXJmYWNl
KSB7CisgICAgICAgIGlmICgoKml0KS52YWx1ZSA9PSBzdXJmYWNlKSB7CiAgICAgICAgICAgICBt
X3dpbmRvd1N1cmZhY2VzLnJlbW92ZShpdCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQpAQCAtNDA5LDcgKzQwOSw3IEBAIEVHTENvbnRleHQgRUdMRGlzcGxheU9wZW5WRzo6Y29udGV4
dEZvclN1cmZhY2UoY29uc3QgRUdMU3VyZmFjZSYgc3VyZmFjZSkKICAgICBIYXNoTWFwPEVHTGlu
dCwgRUdMQ29udGV4dD46Oml0ZXJhdG9yIGVuZCA9IG1fY29udGV4dHMuZW5kKCk7CiAKICAgICBm
b3IgKEhhc2hNYXA8RUdMaW50LCBFR0xDb250ZXh0Pjo6aXRlcmF0b3IgaXQgPSBtX2NvbnRleHRz
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBlZ2xNYWtlQ3VycmVudChtX2Rp
c3BsYXksIHN1cmZhY2UsIHN1cmZhY2UsICgqaXQpLnNlY29uZCk7CisgICAgICAgIGVnbE1ha2VD
dXJyZW50KG1fZGlzcGxheSwgc3VyZmFjZSwgc3VyZmFjZSwgKCppdCkudmFsdWUpOwogICAgICAg
ICBpZiAoZWdsR2V0RXJyb3IoKSA9PSBFR0xfU1VDQ0VTUykgewogICAgICAgICAgICAgLy8gUmVz
dG9yZSBwcmV2aW91cyBzdXJmYWNlL2NvbnRleHQuCiAgICAgICAgICAgICBpZiAoY3VycmVudENv
bnRleHQgIT0gRUdMX05PX0NPTlRFWFQpIHsKQEAgLTQxNyw4ICs0MTcsOCBAQCBFR0xDb250ZXh0
IEVHTERpc3BsYXlPcGVuVkc6OmNvbnRleHRGb3JTdXJmYWNlKGNvbnN0IEVHTFN1cmZhY2UmIHN1
cmZhY2UpCiAgICAgICAgICAgICAgICAgQVNTRVJUX0VHTF9OT19FUlJPUigpOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgLy8gQ29vbCwgc3VyZmFjZSBpcyBjb21wYXRpYmxlIHRvIG9uZSBv
ZiBvdXIgZXhpc3RpbmcgY29udGV4dHMuCi0gICAgICAgICAgICBtX2NvbXBhdGlibGVDb25maWdJ
ZHMuc2V0KHN1cmZhY2VDb25maWdJZCwgKCppdCkuZmlyc3QpOwotICAgICAgICAgICAgcmV0dXJu
ICgqaXQpLnNlY29uZDsKKyAgICAgICAgICAgIG1fY29tcGF0aWJsZUNvbmZpZ0lkcy5zZXQoc3Vy
ZmFjZUNvbmZpZ0lkLCAoKml0KS5rZXkpOworICAgICAgICAgICAgcmV0dXJuICgqaXQpLnZhbHVl
OwogICAgICAgICB9CiAgICAgfQogICAgIC8vIFJlc3RvcmUgcHJldmlvdXMgc3VyZmFjZS9jb250
ZXh0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJHTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcAppbmRleCA4ZjBjNjhkOTlkMzJkNWUzODhiYTY4NzQ4
Mzk1ZmVhNTA5ZjEwYmVhLi44NzNmOTA0ODk5OTFkZjE4NjllZjIyNDFhMjQxM2RiOThlNTY2NjQx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlckdMLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcApAQCAtNzIsNyArNzIsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIHsKICAgICAgICAgICAgIEdMQ29udGV4dERhdGFNYXA6Oml0ZXJhdG9yIGl0ID0gZ2xDb250
ZXh0RGF0YU1hcCgpLmZpbmQoY29udGV4dC0+cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpKTsK
ICAgICAgICAgICAgIGlmIChpdCAhPSBnbENvbnRleHREYXRhTWFwKCkuZW5kKCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIGl0LT52
YWx1ZTsKIAogICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTaGFyZWRHTERhdGEoY29u
dGV4dCkpOwogICAgICAgICB9CkBAIC05Miw3ICs5Miw3IEBAIHB1YmxpYzoKICAgICAgICAgICAg
IEdMQ29udGV4dERhdGFNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGdsQ29udGV4dERhdGFNYXAo
KS5lbmQoKTsKICAgICAgICAgICAgIEdMQ29udGV4dERhdGFNYXA6Oml0ZXJhdG9yIGl0OwogICAg
ICAgICAgICAgZm9yIChpdCA9IGdsQ29udGV4dERhdGFNYXAoKS5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKLSAgICAgICAgICAgICAgICBpZiAoaXQtPnNlY29uZCA9PSB0aGlzKQorICAgICAg
ICAgICAgICAgIGlmIChpdC0+dmFsdWUgPT0gdGhpcykKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFn
ZXIuY3BwCmluZGV4IDczZDZmZWZiYjFiOGY4MmNkNzhkNTY3Y2Q1ZDRmNjlmODExOWM5MjUuLjVj
YThjOTZiZmU0NTI5NTJiNDNiNjQyMzg1MWIxZmM4MzVkNzM5ZmIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFu
YWdlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcApAQCAtMTk5LDcgKzE5OSw3IEBAIFBhc3NSZWZQ
dHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2Vy
OjpnZXRTaGFkZXJQcm9nCiAKICAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU1hcDo6aXRl
cmF0b3IgaXQgPSBtX3RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtTWFwLmZpbmQoc2hhZGVyVHlw
ZSk7CiAgICAgaWYgKGl0ICE9IG1fdGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1NYXAuZW5kKCkp
Ci0gICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwog
CiAgICAgc3dpdGNoIChzaGFkZXJUeXBlKSB7CiAgICAgY2FzZSBTaW1wbGU6CkBAIC03NTksNyAr
NzU5LDcgQEAgUGFzc1JlZlB0cjxTdGFuZGFyZEZpbHRlclByb2dyYW0+IFRleHR1cmVNYXBwZXJT
aGFkZXJNYW5hZ2VyOjpnZXRTaGFkZXJGb3JGaWx0ZXIKIAogICAgICAgICBtX2ZpbHRlck1hcC5h
ZGQoa2V5LCBwcm9ncmFtKTsKICAgICB9IGVsc2UKLSAgICAgICAgcHJvZ3JhbSA9IGl0ZXJhdG9y
LT5zZWNvbmQ7CisgICAgICAgIHByb2dyYW0gPSBpdGVyYXRvci0+dmFsdWU7CiAKICAgICByZXR1
cm4gcHJvZ3JhbTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbmNlL0ZvbnRQbGF0Zm9ybURhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luY2UvRm9udFBsYXRmb3JtRGF0YS5jcHAKaW5kZXggMzU2Zjc1M2Q0NDNlNjIy
NTg2MDA4NTkyN2EyYTQ3NzQyMDI4NjBkNC4uNWEyOTViYjQwZmMxNThhZTM5MWZmMzU5NjIwZjFh
OTNhMDM3MjZkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luY2UvRm9udFBsYXRmb3JtRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luY2UvRm9udFBsYXRmb3JtRGF0YS5jcHAKQEAgLTI4Nyw5ICsyODcsOSBAQCBz
dGF0aWMgUGFzc1JlZlB0cjxGaXhlZFNpemVGb250RGF0YT4gY3JlYXRlRml4ZWRTaXplRm9udERh
dGEoY29uc3QgQXRvbWljU3RyaW5nJgogICAgIEZpeGVkU2l6ZUZvbnREYXRhS2V5IGtleShmYW1p
bHksIHdlaWdodCwgaXRhbGljKTsKICAgICBGaXhlZFNpemVGb250Q2FjaGU6OkFkZFJlc3VsdCBy
ZXN1bHQgPSBnX2ZpeGVkU2l6ZUZvbnRDYWNoZS5hZGQoa2V5LCBSZWZQdHI8Rml4ZWRTaXplRm9u
dERhdGE+KCkpOwogICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgcmVzdWx0Lml0
ZXJhdG9yLT5zZWNvbmQgPSBGaXhlZFNpemVGb250RGF0YTo6Y3JlYXRlKGZhbWlseSwgd2VpZ2h0
LCBpdGFsaWMpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gRml4ZWRTaXplRm9u
dERhdGE6OmNyZWF0ZShmYW1pbHksIHdlaWdodCwgaXRhbGljKTsKIAotICAgIHJldHVybiByZXN1
bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsK
IH0KIAogc3RhdGljIExPTkcgdG9HRElGb250V2VpZ2h0KEZvbnRXZWlnaHQgZm9udFdlaWdodCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmNwcAppbmRleCAx
YTg0ZjhiZDMxOTUyYjI4ZTI2ODI3MWRkMmE1ZjU3ZjQ0ZDgyN2Q3Li5hZGZjNjZlMDE1ZTUwMjI2
Nzg4YzIxNDc2OGExNWIyOTEzNjg0M2I4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvRGF0YU9iamVjdEd0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL0RhdGFPYmplY3RHdGsuY3BwCkBAIC0xNzEsNyArMTcxLDcgQEAgRGF0YU9iamVjdEd0ayog
RGF0YU9iamVjdEd0azo6Zm9yQ2xpcGJvYXJkKEd0a0NsaXBib2FyZCogY2xpcGJvYXJkKQogICAg
IH0KIAogICAgIEhhc2hNYXA8R3RrQ2xpcGJvYXJkKiwgUmVmUHRyPERhdGFPYmplY3RHdGs+ID46
Oml0ZXJhdG9yIGl0ID0gb2JqZWN0TWFwLmZpbmQoY2xpcGJvYXJkKTsKLSAgICByZXR1cm4gaXQt
PnNlY29uZC5nZXQoKTsKKyAgICByZXR1cm4gaXQtPnZhbHVlLmdldCgpOwogfQogCiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrRHJhZ0FuZERyb3BIZWxwZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0RyYWdBbmREcm9wSGVscGVyLmNw
cAppbmRleCA3NjNkMTIwZDA5NDE2MjI3MjY2MGM2MDYzMmExOTI5ODZmNTQyZWE0Li5mYzJmNTZl
NjE2NmViMWFhY2RiYWRhOGY1MmZlZjNjNmRkODg2NGNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvR3RrRHJhZ0FuZERyb3BIZWxwZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtEcmFnQW5kRHJvcEhlbHBlci5jcHAKQEAgLTcwLDcgKzcw
LDcgQEAgdm9pZCBHdGtEcmFnQW5kRHJvcEhlbHBlcjo6aGFuZGxlR2V0RHJhZ0RhdGEoR2RrRHJh
Z0NvbnRleHQqIGNvbnRleHQsIEd0a1NlbGVjdGkKICAgICBEcmFnZ2luZ0RhdGFPYmplY3RzTWFw
OjppdGVyYXRvciBpdGVyYXRvciA9IG1fZHJhZ2dpbmdEYXRhT2JqZWN0cy5maW5kKGNvbnRleHQp
OwogICAgIGlmIChpdGVyYXRvciA9PSBtX2RyYWdnaW5nRGF0YU9iamVjdHMuZW5kKCkpCiAgICAg
ICAgIHJldHVybjsKLSAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBl
cigpLT5maWxsU2VsZWN0aW9uRGF0YShzZWxlY3Rpb25EYXRhLCBpbmZvLCBpdGVyYXRvci0+c2Vj
b25kLmdldCgpKTsKKyAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBl
cigpLT5maWxsU2VsZWN0aW9uRGF0YShzZWxlY3Rpb25EYXRhLCBpbmZvLCBpdGVyYXRvci0+dmFs
dWUuZ2V0KCkpOwogfQogCiBzdHJ1Y3QgSGFuZGxlRHJhZ0xhdGVyRGF0YSB7CkBAIC0xMTYsNyAr
MTE2LDcgQEAgdm9pZCBHdGtEcmFnQW5kRHJvcEhlbHBlcjo6aGFuZGxlRHJhZ0xlYXZlKEdka0Ry
YWdDb250ZXh0KiBnZGtDb250ZXh0LCBEcmFnRXhpdGUKICAgICAvLyB0aGUgZHJhZy1kcm9wIHNp
Z25hbC4gV2Ugd2FudCB0aGUgYWN0aW9ucyBmb3IgZHJhZy1sZWF2ZSB0byBoYXBwZW4gYWZ0ZXIK
ICAgICAvLyB0aG9zZSBmb3IgZHJhZy1kcm9wLCBzbyBzY2hlZHVsZSB0aGVtIHRvIGhhcHBlbiBh
c3luY2hyb25vdXNseSBoZXJlLgogICAgIEhhbmRsZURyYWdMYXRlckRhdGEqIGRhdGEgPSBuZXcg
SGFuZGxlRHJhZ0xhdGVyRGF0YTsKLSAgICBkYXRhLT5jb250ZXh0ID0gaXRlcmF0b3ItPnNlY29u
ZDsKKyAgICBkYXRhLT5jb250ZXh0ID0gaXRlcmF0b3ItPnZhbHVlOwogICAgIGRhdGEtPmNvbnRl
eHQtPmV4aXRlZENhbGxiYWNrID0gZXhpdGVkQ2FsbGJhY2s7CiAgICAgZGF0YS0+Z2x1ZSA9IHRo
aXM7CiAgICAgZ190aW1lb3V0X2FkZCgwLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPiho
YW5kbGVEcmFnTGVhdmVMYXRlckNhbGxiYWNrKSwgZGF0YSk7CkBAIC0xNDAsNyArMTQwLDcgQEAg
UGFzc093blB0cjxEcmFnRGF0YT4gR3RrRHJhZ0FuZERyb3BIZWxwZXI6OmhhbmRsZURyYWdNb3Rp
b24oR2RrRHJhZ0NvbnRleHQqIGNvbnQKICAgICAgICAgbV9kcm9wcGluZ0NvbnRleHRzLnNldChj
b250ZXh0LCBkcm9wcGluZ0NvbnRleHQpOwogICAgICAgICBxdWVyeU5ld0Ryb3BDb250ZXh0RGF0
YShkcm9wcGluZ0NvbnRleHQsIG1fd2lkZ2V0LCB0aW1lKTsKICAgICB9IGVsc2UgewotICAgICAg
ICBkcm9wcGluZ0NvbnRleHQgPSBpdGVyYXRvci0+c2Vjb25kOworICAgICAgICBkcm9wcGluZ0Nv
bnRleHQgPSBpdGVyYXRvci0+dmFsdWU7CiAgICAgICAgIGRyb3BwaW5nQ29udGV4dC0+bGFzdE1v
dGlvblBvc2l0aW9uID0gcG9zaXRpb247CiAgICAgfQogCkBAIC0xNjIsNyArMTYyLDcgQEAgUGFz
c093blB0cjxEcmFnRGF0YT4gR3RrRHJhZ0FuZERyb3BIZWxwZXI6OmhhbmRsZURyYWdEYXRhUmVj
ZWl2ZWQoR2RrRHJhZ0NvbnRleHQKICAgICBpZiAoaXRlcmF0b3IgPT0gbV9kcm9wcGluZ0NvbnRl
eHRzLmVuZCgpKQogICAgICAgICByZXR1cm4gYWRvcHRQdHIoc3RhdGljX2Nhc3Q8RHJhZ0RhdGEq
PigwKSk7CiAKLSAgICBEcm9wcGluZ0NvbnRleHQqIGRyb3BwaW5nQ29udGV4dCA9IGl0ZXJhdG9y
LT5zZWNvbmQ7CisgICAgRHJvcHBpbmdDb250ZXh0KiBkcm9wcGluZ0NvbnRleHQgPSBpdGVyYXRv
ci0+dmFsdWU7CiAgICAgZHJvcHBpbmdDb250ZXh0LT5wZW5kaW5nRGF0YVJlcXVlc3RzLS07CiAg
ICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+ZmlsbERhdGFP
YmplY3RGcm9tRHJvcERhdGEoc2VsZWN0aW9uRGF0YSwgaW5mbywgZHJvcHBpbmdDb250ZXh0LT5k
YXRhT2JqZWN0LmdldCgpKTsKIApAQCAtMTg1LDcgKzE4NSw3IEBAIFBhc3NPd25QdHI8RHJhZ0Rh
dGE+IEd0a0RyYWdBbmREcm9wSGVscGVyOjpoYW5kbGVEcmFnRHJvcChHZGtEcmFnQ29udGV4dCog
Y29udGV4CiAgICAgaWYgKGl0ZXJhdG9yID09IG1fZHJvcHBpbmdDb250ZXh0cy5lbmQoKSkKICAg
ICAgICAgcmV0dXJuIGFkb3B0UHRyKHN0YXRpY19jYXN0PERyYWdEYXRhKj4oMCkpOwogCi0gICAg
RHJvcHBpbmdDb250ZXh0KiBkcm9wcGluZ0NvbnRleHQgPSBpdGVyYXRvci0+c2Vjb25kOworICAg
IERyb3BwaW5nQ29udGV4dCogZHJvcHBpbmdDb250ZXh0ID0gaXRlcmF0b3ItPnZhbHVlOwogICAg
IGRyb3BwaW5nQ29udGV4dC0+ZHJvcEhhcHBlbmVkID0gdHJ1ZTsKIAogICAgIHJldHVybiBhZG9w
dFB0cihuZXcgRHJhZ0RhdGEoZHJvcHBpbmdDb250ZXh0LT5kYXRhT2JqZWN0LmdldCgpLCBwb3Np
dGlvbiwgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVkaXJlY3Rl
ZFhDb21wb3NpdGVXaW5kb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlZGly
ZWN0ZWRYQ29tcG9zaXRlV2luZG93LmNwcAppbmRleCA5MjUzOWEyMjBlOTI2MTIyMTk4MmJhYTYz
ZDY3MDMzNDNlOTYzZGQ3Li5jMzRmMjg2MjdlODgxNDdiOWNlZDE2YzY2OGNhZWUzY2M3ODMzOTA0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVkaXJlY3RlZFhDb21w
b3NpdGVXaW5kb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZWRpcmVj
dGVkWENvbXBvc2l0ZVdpbmRvdy5jcHAKQEAgLTU4LDcgKzU4LDcgQEAgc3RhdGljIEdka0ZpbHRl
clJldHVybiBmaWx0ZXJYRGFtYWdlRXZlbnQoR2RrWEV2ZW50KiBnZGtYRXZlbnQsIEdka0V2ZW50
KiBldmVudCwKICAgICBpZiAoaSA9PSB3aW5kb3dIYXNoTWFwLmVuZCgpKQogICAgICAgICByZXR1
cm4gR0RLX0ZJTFRFUl9DT05USU5VRTsKIAotICAgIGktPnNlY29uZC0+Y2FsbERhbWFnZU5vdGlm
eUNhbGxiYWNrKCk7CisgICAgaS0+dmFsdWUtPmNhbGxEYW1hZ2VOb3RpZnlDYWxsYmFjaygpOwog
ICAgIFhEYW1hZ2VTdWJ0cmFjdChHREtfRElTUExBWV9YRElTUExBWShnZGtfZGlzcGxheV9nZXRf
ZGVmYXVsdCgpKSwgZGFtYWdlRXZlbnQtPmRhbWFnZSwgTm9uZSwgTm9uZSk7CiAgICAgcmV0dXJu
IEdES19GSUxURVJfUkVNT1ZFOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL1JlbmRlclRoZW1lR3RrMy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
UmVuZGVyVGhlbWVHdGszLmNwcAppbmRleCA3NzQ5MzkxNTE3MTNkZjAxMTM0ZDZjZWE0ZWQ5ZDcw
NGI0ZGNmYzBiLi4wYTgzODI3YzdmZWJjYmU0MDU0OGZhZDU2MmI1NDExNzFlYzE2OWY2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGszLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGszLmNwcApAQCAt
NTYsNyArNTYsNyBAQCBzdGF0aWMgdm9pZCBndGtTdHlsZUNoYW5nZWRDYWxsYmFjayhHT2JqZWN0
KiwgR1BhcmFtU3BlYyopCiB7CiAgICAgU3R5bGVDb250ZXh0TWFwOjpjb25zdF9pdGVyYXRvciBl
bmQgPSBzdHlsZUNvbnRleHRNYXAoKS5lbmQoKTsKICAgICBmb3IgKFN0eWxlQ29udGV4dE1hcDo6
Y29uc3RfaXRlcmF0b3IgaXRlciA9IHN0eWxlQ29udGV4dE1hcCgpLmJlZ2luKCk7IGl0ZXIgIT0g
ZW5kOyArK2l0ZXIpCi0gICAgICAgIGd0a19zdHlsZV9jb250ZXh0X2ludmFsaWRhdGUoaXRlci0+
c2Vjb25kLmdldCgpKTsKKyAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfaW52YWxpZGF0ZShpdGVy
LT52YWx1ZS5nZXQoKSk7CiAKICAgICBQYWdlOjpzY2hlZHVsZUZvcmNlZFN0eWxlUmVjYWxjRm9y
QWxsUGFnZXMoKTsKIH0KQEAgLTc5LDcgKzc5LDcgQEAgc3RhdGljIEd0a1N0eWxlQ29udGV4dCog
Z2V0U3R5bGVDb250ZXh0KEdUeXBlIHdpZGdldFR5cGUpCiB7CiAgICAgU3R5bGVDb250ZXh0TWFw
OjpBZGRSZXN1bHQgcmVzdWx0ID0gc3R5bGVDb250ZXh0TWFwKCkuYWRkKHdpZGdldFR5cGUsIDAp
OwogICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJldHVybiByZXN1bHQuaXRl
cmF0b3ItPnNlY29uZC5nZXQoKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFs
dWUuZ2V0KCk7CiAKICAgICBHdGtXaWRnZXRQYXRoKiBwYXRoID0gZ3RrX3dpZGdldF9wYXRoX25l
dygpOwogICAgIGd0a193aWRnZXRfcGF0aF9hcHBlbmRfdHlwZShwYXRoLCB3aWRnZXRUeXBlKTsK
QEAgLTExMSw3ICsxMTEsNyBAQCBzdGF0aWMgR3RrU3R5bGVDb250ZXh0KiBnZXRTdHlsZUNvbnRl
eHQoR1R5cGUgd2lkZ2V0VHlwZSkKICAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfcGF0aChjb250
ZXh0LmdldCgpLCBwYXRoKTsKICAgICBndGtfd2lkZ2V0X3BhdGhfZnJlZShwYXRoKTsKIAotICAg
IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gY29udGV4dDsKKyAgICByZXN1bHQuaXRlcmF0b3It
PnZhbHVlID0gY29udGV4dDsKICAgICByZXR1cm4gY29udGV4dC5nZXQoKTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbGJhclRoZW1lTWFjLm1tIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbGJhclRoZW1lTWFjLm1tCmluZGV4IDRi
MzY3YWU2ZDkwMjVmNTAyY2ZhODhhMDAyYmJhOTYxM2Y3MmU1MTguLjg0ZmQwZmViM2Y3ZjFmMWM0
YWE0OWMxMmI2OGJlODQxNDIzZTg3ZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9TY3JvbGxiYXJUaGVtZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMubW0KQEAgLTg2LDggKzg2LDggQEAgc3RhdGljIFNjcm9s
bGJhclBhaW50ZXJNYXAqIHNjcm9sbGJhck1hcCgpCiAgICAgICAgIHJldHVybjsKICAgICBTY3Jv
bGxiYXJQYWludGVyTWFwOjppdGVyYXRvciBlbmQgPSBzY3JvbGxiYXJNYXAoKS0+ZW5kKCk7CiAg
ICAgZm9yIChTY3JvbGxiYXJQYWludGVyTWFwOjppdGVyYXRvciBpdCA9IHNjcm9sbGJhck1hcCgp
LT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaXQtPmZpcnN0LT5zdHlsZUNo
YW5nZWQoKTsKLSAgICAgICAgaXQtPmZpcnN0LT5pbnZhbGlkYXRlKCk7CisgICAgICAgIGl0LT5r
ZXktPnN0eWxlQ2hhbmdlZCgpOworICAgICAgICBpdC0+a2V5LT5pbnZhbGlkYXRlKCk7CiAgICAg
fQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0NyZWRl
bnRpYWxTdG9yYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVu
dGlhbFN0b3JhZ2UuY3BwCmluZGV4IGY2MjRkNGZjYjI5MmNjNDBjNWI2OWVlZGYzZTVjODc1MTUy
ZjAxZjkuLjhiNWFjNDc4YjIxMzUwNmNkOWNlYWNhOWJhNTg1MWJjZDI5M2E1YzkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbFN0b3JhZ2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbFN0b3JhZ2Uu
Y3BwCkBAIC0xNDcsNyArMTQ3LDcgQEAgYm9vbCBDcmVkZW50aWFsU3RvcmFnZTo6c2V0KGNvbnN0
IENyZWRlbnRpYWwmIGNyZWRlbnRpYWwsIGNvbnN0IEtVUkwmIHVybCkKICAgICBpZiAoaXRlciA9
PSBwYXRoVG9EZWZhdWx0UHJvdGVjdGlvblNwYWNlTWFwKCkuZW5kKCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICBBU1NFUlQob3JpZ2luc1dpdGhDcmVkZW50aWFscygpLmNvbnRhaW5zKG9y
aWdpblN0cmluZ0Zyb21VUkwodXJsKSkpOwotICAgIHByb3RlY3Rpb25TcGFjZVRvQ3JlZGVudGlh
bE1hcCgpLnNldChpdGVyLT5zZWNvbmQsIGNyZWRlbnRpYWwpOworICAgIHByb3RlY3Rpb25TcGFj
ZVRvQ3JlZGVudGlhbE1hcCgpLnNldChpdGVyLT52YWx1ZSwgY3JlZGVudGlhbCk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKQEAgLTE1Niw3ICsxNTYsNyBAQCBDcmVkZW50aWFsIENyZWRlbnRpYWxT
dG9yYWdlOjpnZXQoY29uc3QgS1VSTCYgdXJsKQogICAgIFBhdGhUb0RlZmF1bHRQcm90ZWN0aW9u
U3BhY2VNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBmaW5kRGVmYXVsdFByb3RlY3Rpb25TcGFjZUZvclVS
TCh1cmwpOwogICAgIGlmIChpdGVyID09IHBhdGhUb0RlZmF1bHRQcm90ZWN0aW9uU3BhY2VNYXAo
KS5lbmQoKSkKICAgICAgICAgcmV0dXJuIENyZWRlbnRpYWwoKTsKLSAgICByZXR1cm4gcHJvdGVj
dGlvblNwYWNlVG9DcmVkZW50aWFsTWFwKCkuZ2V0KGl0ZXItPnNlY29uZCk7CisgICAgcmV0dXJu
IHByb3RlY3Rpb25TcGFjZVRvQ3JlZGVudGlhbE1hcCgpLmdldChpdGVyLT52YWx1ZSk7CiB9CiAK
IHZvaWQgQ3JlZGVudGlhbFN0b3JhZ2U6OnNldFByaXZhdGVNb2RlKGJvb2wgbW9kZSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUEhlYWRlck1hcC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBIZWFkZXJNYXAuY3BwCmluZGV4
IDUwMDkxZTE5ZDNhZjU2ZmY0YThkZjE3NWJmODk3ODcwMDc2MTQyODAuLmRlZmUxYWU4NGJmMGFk
ZjA3Nzk0OTU1YjExYTVkYzczZWEwMjNlMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvSFRUUEhlYWRlck1hcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9IVFRQSGVhZGVyTWFwLmNwcApAQCAtNTIsNyArNTIsNyBAQCBQYXNzT3du
UHRyPENyb3NzVGhyZWFkSFRUUEhlYWRlck1hcERhdGE+IEhUVFBIZWFkZXJNYXA6OmNvcHlEYXRh
KCkgY29uc3QKIAogICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZF9pdCA9IGVu
ZCgpOwogICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBiZWdpbigp
OyBpdCAhPSBlbmRfaXQ7ICsraXQpIHsKLSAgICAgICAgZGF0YS0+YXBwZW5kKG1ha2VfcGFpcihp
dC0+Zmlyc3Quc3RyaW5nKCkuaXNvbGF0ZWRDb3B5KCksIGl0LT5zZWNvbmQuaXNvbGF0ZWRDb3B5
KCkpKTsKKyAgICAgICAgZGF0YS0+YXBwZW5kKG1ha2VfcGFpcihpdC0+a2V5LnN0cmluZygpLmlz
b2xhdGVkQ29weSgpLCBpdC0+dmFsdWUuaXNvbGF0ZWRDb3B5KCkpKTsKICAgICB9CiAgICAgcmV0
dXJuIGRhdGEucmVsZWFzZSgpOwogfQpAQCAtMTAwLDcgKzEwMCw3IEBAIFN0cmluZyBIVFRQSGVh
ZGVyTWFwOjpnZXQoY29uc3QgY2hhciogbmFtZSkgY29uc3QKICAgICBjb25zdF9pdGVyYXRvciBp
ID0gZmluZDxjb25zdCBjaGFyKiwgQ2FzZUZvbGRpbmdDU3RyaW5nVHJhbnNsYXRvcj4obmFtZSk7
CiAgICAgaWYgKGkgPT0gZW5kKCkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICByZXR1
cm4gaS0+c2Vjb25kOworICAgIHJldHVybiBpLT52YWx1ZTsKIH0KICAgICAKIGJvb2wgSFRUUEhl
YWRlck1hcDo6Y29udGFpbnMoY29uc3QgY2hhciogbmFtZSkgY29uc3QKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvTUlNRUhlYWRlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL01JTUVIZWFkZXIuY3BwCmluZGV4IDVkNmI4NThmNDZlNDM4
M2ZjYjJmZWE2Mjg1OGFmNzUzMmQ0M2E1YWYuLmY0ZTNlYmY2NzRkZTZiZDFkMjRhOTU5MGE0ODE4
YmViNmZkOGRlNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
TUlNRUhlYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9NSU1F
SGVhZGVyLmNwcApAQCAtODYsNyArODYsNyBAQCBQYXNzUmVmUHRyPE1JTUVIZWFkZXI+IE1JTUVI
ZWFkZXI6OnBhcnNlSGVhZGVyKFNoYXJlZEJ1ZmZlckNodW5rUmVhZGVyKiBidWZmZXIpCiAgICAg
S2V5VmFsdWVNYXA6Oml0ZXJhdG9yIG1pbWVQYXJhbWV0ZXJzSXRlcmF0b3IgPSBrZXlWYWx1ZVBh
aXJzLmZpbmQoImNvbnRlbnQtdHlwZSIpOwogICAgIGlmIChtaW1lUGFyYW1ldGVyc0l0ZXJhdG9y
ICE9IGtleVZhbHVlUGFpcnMuZW5kKCkpIHsKICAgICAgICAgLy8gRklYTUU6IG1ha2UgQ29udGVu
dFR5cGVQYXJzZXIgbW9yZSBmbGV4aWJsZSBzbyB3ZSBkb24ndCBoYXZlIHRvIHN5bnRoZXNpemUg
dGhlICJDb250ZW50LVR5cGU6Ii4KLSAgICAgICAgQ29udGVudFR5cGVQYXJzZXIgY29udGVudFR5
cGVQYXJzZXIobWFrZVN0cmluZygiQ29udGVudC1UeXBlOiIsIG1pbWVQYXJhbWV0ZXJzSXRlcmF0
b3ItPnNlY29uZCkpOworICAgICAgICBDb250ZW50VHlwZVBhcnNlciBjb250ZW50VHlwZVBhcnNl
cihtYWtlU3RyaW5nKCJDb250ZW50LVR5cGU6IiwgbWltZVBhcmFtZXRlcnNJdGVyYXRvci0+dmFs
dWUpKTsKICAgICAgICAgbWltZUhlYWRlci0+bV9jb250ZW50VHlwZSA9IGNvbnRlbnRUeXBlUGFy
c2VyLm1pbWVUeXBlKCk7CiAgICAgICAgIGlmICghbWltZUhlYWRlci0+aXNNdWx0aXBhcnQoKSkK
ICAgICAgICAgICAgIG1pbWVIZWFkZXItPm1fY2hhcnNldCA9IGNvbnRlbnRUeXBlUGFyc2VyLmNo
YXJzZXQoKS5zdHJpcFdoaXRlU3BhY2UoKTsKQEAgLTEwNSwxMSArMTA1LDExIEBAIFBhc3NSZWZQ
dHI8TUlNRUhlYWRlcj4gTUlNRUhlYWRlcjo6cGFyc2VIZWFkZXIoU2hhcmVkQnVmZmVyQ2h1bmtS
ZWFkZXIqIGJ1ZmZlcikKIAogICAgIG1pbWVQYXJhbWV0ZXJzSXRlcmF0b3IgPSBrZXlWYWx1ZVBh
aXJzLmZpbmQoImNvbnRlbnQtdHJhbnNmZXItZW5jb2RpbmciKTsKICAgICBpZiAobWltZVBhcmFt
ZXRlcnNJdGVyYXRvciAhPSBrZXlWYWx1ZVBhaXJzLmVuZCgpKQotICAgICAgICBtaW1lSGVhZGVy
LT5tX2NvbnRlbnRUcmFuc2ZlckVuY29kaW5nID0gcGFyc2VDb250ZW50VHJhbnNmZXJFbmNvZGlu
ZyhtaW1lUGFyYW1ldGVyc0l0ZXJhdG9yLT5zZWNvbmQpOworICAgICAgICBtaW1lSGVhZGVyLT5t
X2NvbnRlbnRUcmFuc2ZlckVuY29kaW5nID0gcGFyc2VDb250ZW50VHJhbnNmZXJFbmNvZGluZyht
aW1lUGFyYW1ldGVyc0l0ZXJhdG9yLT52YWx1ZSk7CiAKICAgICBtaW1lUGFyYW1ldGVyc0l0ZXJh
dG9yID0ga2V5VmFsdWVQYWlycy5maW5kKCJjb250ZW50LWxvY2F0aW9uIik7CiAgICAgaWYgKG1p
bWVQYXJhbWV0ZXJzSXRlcmF0b3IgIT0ga2V5VmFsdWVQYWlycy5lbmQoKSkKLSAgICAgICAgbWlt
ZUhlYWRlci0+bV9jb250ZW50TG9jYXRpb24gPSBtaW1lUGFyYW1ldGVyc0l0ZXJhdG9yLT5zZWNv
bmQ7CisgICAgICAgIG1pbWVIZWFkZXItPm1fY29udGVudExvY2F0aW9uID0gbWltZVBhcmFtZXRl
cnNJdGVyYXRvci0+dmFsdWU7CiAKICAgICByZXR1cm4gbWltZUhlYWRlci5yZWxlYXNlKCk7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFu
ZGxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUu
Y3BwCmluZGV4IDdkZGM0N2U0ZWE3OTlhNDZkZWU2ZjMyY2ZkMDc4ZWY3NTE1NGYxZWUuLjZkMTJm
OWQ4OWIwMjQ3NzQ2YTU3ZTFiYmNhZmIyYzIxN2Q1OTEwMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwCkBAIC03MSw3ICs3MSw3
IEBAIFBhc3NSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IFJlc291cmNlSGFuZGxlOjpjcmVhdGUoTmV0
d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvCiAgICAgQnVpbHRpblJlc291cmNlSGFuZGxlQ29u
c3RydWN0b3JNYXA6Oml0ZXJhdG9yIHByb3RvY29sTWFwSXRlbSA9IGJ1aWx0aW5SZXNvdXJjZUhh
bmRsZUNvbnN0cnVjdG9yTWFwKCkuZmluZChyZXF1ZXN0LnVybCgpLnByb3RvY29sKCkpOwogCiAg
ICAgaWYgKHByb3RvY29sTWFwSXRlbSAhPSBidWlsdGluUmVzb3VyY2VIYW5kbGVDb25zdHJ1Y3Rv
ck1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcHJvdG9jb2xNYXBJdGVtLT5zZWNvbmQocmVx
dWVzdCwgY2xpZW50KTsKKyAgICAgICAgcmV0dXJuIHByb3RvY29sTWFwSXRlbS0+dmFsdWUocmVx
dWVzdCwgY2xpZW50KTsKIAogICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4gbmV3SGFuZGxlKGFk
b3B0UmVmKG5ldyBSZXNvdXJjZUhhbmRsZShyZXF1ZXN0LCBjbGllbnQsIGRlZmVyc0xvYWRpbmcs
IHNob3VsZENvbnRlbnRTbmlmZikpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHAKaW5kZXggNDdiZjExYzBiN2Ix
NjVjNzQxODY5N2Y0YmVmZDgwMjA0ZDRlM2FmNi4uYWZjYjI0M2M2NTI4Zjc5MGNiZWVhN2RmNmMx
ODVjNDcyMTg1N2Y4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwCkBAIC0zNzcsNyArMzc3LDcgQEAgdm9pZCBS
ZXNvdXJjZVJlcXVlc3RCYXNlOjphZGRIVFRQSGVhZGVyRmllbGQoY29uc3QgQXRvbWljU3RyaW5n
JiBuYW1lLCBjb25zdCBTdHIKICAgICB1cGRhdGVSZXNvdXJjZVJlcXVlc3QoKTsKICAgICBIVFRQ
SGVhZGVyTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9odHRwSGVhZGVyRmllbGRzLmFkZChuYW1l
LCB2YWx1ZSk7CiAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgcmVzdWx0Lml0
ZXJhdG9yLT5zZWNvbmQgPSByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCArICcsJyArIHZhbHVlOwor
ICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSAr
ICcsJyArIHZhbHVlOwogCiAgICAgaWYgKHVybCgpLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSkK
ICAgICAgICAgbV9wbGF0Zm9ybVJlcXVlc3RVcGRhdGVkID0gZmFsc2U7CkBAIC0zODcsNyArMzg3
LDcgQEAgdm9pZCBSZXNvdXJjZVJlcXVlc3RCYXNlOjphZGRIVFRQSGVhZGVyRmllbGRzKGNvbnN0
IEhUVFBIZWFkZXJNYXAmIGhlYWRlckZpZWxkcykKIHsKICAgICBIVFRQSGVhZGVyTWFwOjpjb25z
dF9pdGVyYXRvciBlbmQgPSBoZWFkZXJGaWVsZHMuZW5kKCk7CiAgICAgZm9yIChIVFRQSGVhZGVy
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGhlYWRlckZpZWxkcy5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpCi0gICAgICAgIGFkZEhUVFBIZWFkZXJGaWVsZChpdC0+Zmlyc3QsIGl0LT5zZWNvbmQp
OworICAgICAgICBhZGRIVFRQSGVhZGVyRmllbGQoaXQtPmtleSwgaXQtPnZhbHVlKTsKIH0KIAog
Ym9vbCBlcXVhbElnbm9yaW5nSGVhZGVyRmllbGRzKGNvbnN0IFJlc291cmNlUmVxdWVzdEJhc2Um
IGEsIGNvbnN0IFJlc291cmNlUmVxdWVzdEJhc2UmIGIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvUmVzb3VyY2VSZXF1ZXN0QmxhY2tCZXJy
eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvUmVzb3Vy
Y2VSZXF1ZXN0QmxhY2tCZXJyeS5jcHAKaW5kZXggZWVmZDVhNWU0NzM2MGM3MTg5OGNmZDNlYjA2
MTYyYWQxYmY1NTc2Ni4uNzU3YmQzZTI0MzA0Zjc0M2MxZTM5Y2NhNzg0ZDQ4ZmY4M2VjMDNjMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jl
c291cmNlUmVxdWVzdEJsYWNrQmVycnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJjZVJlcXVlc3RCbGFja0JlcnJ5LmNwcApAQCAtMTM5
LDcgKzEzOSw3IEBAIFJlc291cmNlUmVxdWVzdDo6VGFyZ2V0VHlwZSBSZXNvdXJjZVJlcXVlc3Q6
OnRhcmdldFR5cGVGcm9tTWltZVR5cGUoY29uc3QgU3RyaW5nCiAgICAgaWYgKGl0ZXIgPT0gbWFw
LmVuZCgpKQogICAgICAgICByZXR1cm4gUmVzb3VyY2VSZXF1ZXN0OjpUYXJnZXRJc1Vuc3BlY2lm
aWVkOwogCi0gICAgcmV0dXJuIGl0ZXItPnNlY29uZDsKKyAgICByZXR1cm4gaXRlci0+dmFsdWU7
CiB9CiAKIHZvaWQgUmVzb3VyY2VSZXF1ZXN0Ojppbml0aWFsaXplUGxhdGZvcm1SZXF1ZXN0KE5l
dHdvcmtSZXF1ZXN0JiBwbGF0Zm9ybVJlcXVlc3QsIGJvb2wgY29va2llc0VuYWJsZWQsIGJvb2wg
aXNJbml0aWFsLCBib29sIGlzUmVkaXJlY3QpIGNvbnN0CkBAIC0xOTcsOCArMTk3LDggQEAgdm9p
ZCBSZXNvdXJjZVJlcXVlc3Q6OmluaXRpYWxpemVQbGF0Zm9ybVJlcXVlc3QoTmV0d29ya1JlcXVl
c3QmIHBsYXRmb3JtUmVxdWVzdCwKICAgICAgICAgYm9vbCBjb29raWVIZWFkZXJNYXlCZURpcnR5
ID0gaXNSZWRpcmVjdCB8fCBjYWNoZVBvbGljeSgpID09IFdlYkNvcmU6OlJlbG9hZElnbm9yaW5n
Q2FjaGVEYXRhIHx8IGNhY2hlUG9saWN5KCkgPT0gV2ViQ29yZTo6UmV0dXJuQ2FjaGVEYXRhRWxz
ZUxvYWQ7CiAKICAgICAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9
IGh0dHBIZWFkZXJGaWVsZHMoKS5iZWdpbigpOyBpdCAhPSBodHRwSGVhZGVyRmllbGRzKCkuZW5k
KCk7ICsraXQpIHsKLSAgICAgICAgICAgIFN0cmluZyBrZXkgPSBpdC0+Zmlyc3Q7Ci0gICAgICAg
ICAgICBTdHJpbmcgdmFsdWUgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgU3RyaW5nIGtleSA9
IGl0LT5rZXk7CisgICAgICAgICAgICBTdHJpbmcgdmFsdWUgPSBpdC0+dmFsdWU7CiAgICAgICAg
ICAgICBpZiAoIWtleS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICBpZiAoZXF1YWxJZ25v
cmluZ0Nhc2Uoa2V5LCAiQ29va2llIikpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gV2Ugd29u
J3QgdXNlIHRoZSBvbGQgY29va2llcyBvZiByZXNvdXJjZVJlcXVlc3QgZm9yIG5ldyBsb2NhdGlv
biBiZWNhdXNlIHRoZXNlIGNvb2tpZXMgbWF5IGJlIGNoYW5nZWQgYnkgcmVkaXJlY3Rpb24uCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlSGFu
ZGxlQ0ZOZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJj
ZUhhbmRsZUNGTmV0LmNwcAppbmRleCBmNmQxZjM4MjEyNjJmMTk1MDQxNTU5YTI1NmMwMmJkNmJk
NzgyOWU1Li4wMWU4YjhhZTVjMGQxYzZhNmE4ZjAzMzA4NWU5MGYwMTBiYzFmN2M2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZO
ZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VI
YW5kbGVDRk5ldC5jcHAKQEAgLTQyOCw3ICs0MjgsNyBAQCBzdGF0aWMgQ0ZVUkxSZXF1ZXN0UmVm
IG1ha2VGaW5hbFJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBib29sIHNo
bwogICAgICAgICBpZiAoIXNzbFByb3BzKQogICAgICAgICAgICAgc3NsUHJvcHMuYWRvcHRDRihD
RkRpY3Rpb25hcnlDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDAsICZrQ0ZUeXBl
RGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3Mp
KTsKICNpZiBQTEFURk9STShXSU4pCi0gICAgICAgIHdrU2V0Q2xpZW50Q2VydGlmaWNhdGVJblNT
TFByb3BlcnRpZXMoc3NsUHJvcHMuZ2V0KCksIChjbGllbnRDZXJ0LT5zZWNvbmQpLmdldCgpKTsK
KyAgICAgICAgd2tTZXRDbGllbnRDZXJ0aWZpY2F0ZUluU1NMUHJvcGVydGllcyhzc2xQcm9wcy5n
ZXQoKSwgKGNsaWVudENlcnQtPnZhbHVlKS5nZXQoKSk7CiAjZW5kaWYKICAgICB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0
Q0ZOZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZVJl
cXVlc3RDRk5ldC5jcHAKaW5kZXggNTdhNmZiMmM4YTRjMDhmNzlmYmQ0YjliYzU1Yjg1YTkzNDI2
N2EzNy4uOGNmZjg3Y2EwZDU4ZWEyZTUyM2YzNzMwZDZiNGE3NzMwYjA2YmU0YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZVJlcXVlc3RDRk5l
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZVJl
cXVlc3RDRk5ldC5jcHAKQEAgLTEyMCw4ICsxMjAsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0
SGVhZGVyRmllbGRzKENGTXV0YWJsZVVSTFJlcXVlc3RSZWYgcmVxdWVzdCwgY29uc3QgSFRUUEhl
YQogCiAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcmVxdWVzdEhlYWRl
cnMuZW5kKCk7CiAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHJl
cXVlc3RIZWFkZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBDRlN0cmlu
Z1JlZiBrZXkgPSBpdC0+Zmlyc3QuY3JlYXRlQ0ZTdHJpbmcoKTsKLSAgICAgICAgQ0ZTdHJpbmdS
ZWYgdmFsdWUgPSBpdC0+c2Vjb25kLmNyZWF0ZUNGU3RyaW5nKCk7CisgICAgICAgIENGU3RyaW5n
UmVmIGtleSA9IGl0LT5rZXkuY3JlYXRlQ0ZTdHJpbmcoKTsKKyAgICAgICAgQ0ZTdHJpbmdSZWYg
dmFsdWUgPSBpdC0+dmFsdWUuY3JlYXRlQ0ZTdHJpbmcoKTsKICAgICAgICAgQ0ZVUkxSZXF1ZXN0
U2V0SFRUUEhlYWRlckZpZWxkVmFsdWUocmVxdWVzdCwga2V5LCB2YWx1ZSk7CiAgICAgICAgIENG
UmVsZWFzZShrZXkpOwogICAgICAgICBDRlJlbGVhc2UodmFsdWUpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVN
YW5hZ2VyLmNwcAppbmRleCBhZjA3NWVmOWUzMjE4OGU3NzE0OTdlYmY3Yzc0ZGMxYWExNWUyMTdh
Li42NWJjYzEwYWQzZDIwMDVkNjg5ZDczZThkZDY3OTg4YjljNWNiNWQ1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2Vy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VI
YW5kbGVNYW5hZ2VyLmNwcApAQCAtNzAzLDggKzcwMyw4IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGVN
YW5hZ2VyOjppbml0aWFsaXplSGFuZGxlKFJlc291cmNlSGFuZGxlKiBqb2IpCiAgICAgICAgIEhU
VFBIZWFkZXJNYXAgY3VzdG9tSGVhZGVycyA9IGpvYi0+Zmlyc3RSZXF1ZXN0KCkuaHR0cEhlYWRl
ckZpZWxkcygpOwogICAgICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBj
dXN0b21IZWFkZXJzLmVuZCgpOwogICAgICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gY3VzdG9tSGVhZGVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAg
ICAgICAgICAgIFN0cmluZyBrZXkgPSBpdC0+Zmlyc3Q7Ci0gICAgICAgICAgICBTdHJpbmcgdmFs
dWUgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgU3RyaW5nIGtleSA9IGl0LT5rZXk7CisgICAg
ICAgICAgICBTdHJpbmcgdmFsdWUgPSBpdC0+dmFsdWU7CiAgICAgICAgICAgICBTdHJpbmcgaGVh
ZGVyU3RyaW5nKGtleSk7CiAgICAgICAgICAgICBoZWFkZXJTdHJpbmcuYXBwZW5kKCI6ICIpOwog
ICAgICAgICAgICAgaGVhZGVyU3RyaW5nLmFwcGVuZCh2YWx1ZSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZVJlcXVlc3RNYWMubW0gYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZVJlcXVlc3RNYWMubW0K
aW5kZXggOTZjNDk3ZDUwM2I1NDdlM2IwMWE5YTI1MmE1OGZjMmVlZjNmOTQ0NC4uOTMyMTZjYjU1
ZTg1NzczMTM2ZjNlOGMzYTA3Y2U2ZmI1NTZlMDZkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VSZXF1ZXN0TWFjLm1tCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlUmVxdWVzdE1hYy5tbQpAQCAt
MTU1LDcgKzE1NSw3IEBAIHZvaWQgUmVzb3VyY2VSZXF1ZXN0Ojpkb1VwZGF0ZVBsYXRmb3JtUmVx
dWVzdCgpCiAgICAgICAgIFtuc1JlcXVlc3Qgc2V0VmFsdWU6bmlsIGZvckhUVFBIZWFkZXJGaWVs
ZDpbb2xkSGVhZGVyRmllbGROYW1lcyBvYmplY3RBdEluZGV4OmkgLSAxXV07CiAgICAgSFRUUEhl
YWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaHR0cEhlYWRlckZpZWxkcygpLmVuZCgpOwog
ICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBodHRwSGVhZGVyRmll
bGRzKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBbbnNSZXF1ZXN0IHNldFZh
bHVlOml0LT5zZWNvbmQgZm9ySFRUUEhlYWRlckZpZWxkOml0LT5maXJzdF07CisgICAgICAgIFtu
c1JlcXVlc3Qgc2V0VmFsdWU6aXQtPnZhbHVlIGZvckhUVFBIZWFkZXJGaWVsZDppdC0+a2V5XTsK
IAogICAgIC8vIFRoZSBiZWxvdyBjaGVjayBjYW4gYmUgcmVtb3ZlZCBvbmNlIHdlIHJlcXVpcmUg
YSB2ZXJzaW9uIG9mIEZvdW5kYXRpb24gd2l0aCAtW05TTXV0YWJsZVVSTFJlcXVlc3Qgc2V0Q29u
dGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5Ol0gbWV0aG9kLgogICAgIHN0YXRp
YyBib29sIHN1cHBvcnRzQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5ID0g
W05TTXV0YWJsZVVSTFJlcXVlc3QgaW5zdGFuY2VzUmVzcG9uZFRvU2VsZWN0b3I6QHNlbGVjdG9y
KHNldENvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheTopXTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvcXQvUmVzb3VyY2VSZXF1ZXN0UXQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9xdC9SZXNvdXJjZVJlcXVlc3RR
dC5jcHAKaW5kZXggZGJiN2I3NGRkNTljNGY0ZDBmMmVjZWNmZGJlMDgxM2QyOGI3NGEzZS4uZTg0
ZTY3N2E1ZjcyYzcxZTg5YzYwMGZkNzc3MDBiYjY4MjIxNGMyYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9xdC9SZXNvdXJjZVJlcXVlc3RRdC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9xdC9SZXNvdXJjZVJlcXVlc3RRdC5jcHAK
QEAgLTQ5LDggKzQ5LDggQEAgUU5ldHdvcmtSZXF1ZXN0IFJlc291cmNlUmVxdWVzdDo6dG9OZXR3
b3JrUmVxdWVzdChOZXR3b3JraW5nQ29udGV4dCAqY29udGV4dCkgY28KICAgICBjb25zdCBIVFRQ
SGVhZGVyTWFwICZoZWFkZXJzID0gaHR0cEhlYWRlckZpZWxkcygpOwogICAgIGZvciAoSFRUUEhl
YWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBoZWFkZXJzLmJlZ2luKCksIGVuZCA9IGhlYWRl
cnMuZW5kKCk7CiAgICAgICAgICBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgUUJ5dGVBcnJh
eSBuYW1lID0gUVN0cmluZyhpdC0+Zmlyc3QpLnRvTGF0aW4xKCk7Ci0gICAgICAgIFFCeXRlQXJy
YXkgdmFsdWUgPSBRU3RyaW5nKGl0LT5zZWNvbmQpLnRvTGF0aW4xKCk7CisgICAgICAgIFFCeXRl
QXJyYXkgbmFtZSA9IFFTdHJpbmcoaXQtPmtleSkudG9MYXRpbjEoKTsKKyAgICAgICAgUUJ5dGVB
cnJheSB2YWx1ZSA9IFFTdHJpbmcoaXQtPnZhbHVlKS50b0xhdGluMSgpOwogICAgICAgICAvLyBR
TmV0d29ya1JlcXVlc3Q6OnNldFJhd0hlYWRlcigpIHdvdWxkIHJlbW92ZSB0aGUgaGVhZGVyIGlm
IHRoZSB2YWx1ZSBpcyBudWxsCiAgICAgICAgIC8vIE1ha2Ugc3VyZSB0byBzZXQgYW4gZW1wdHkg
aGVhZGVyIGluc3RlYWQgb2YgbnVsbCBoZWFkZXIuCiAgICAgICAgIGlmICghdmFsdWUuaXNOdWxs
KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVz
b3VyY2VIYW5kbGVTb3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291
cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwCmluZGV4IDNjMzRlZmI0NThjY2RkZmU1MzYxZjFlZDM2
NTJhODdlZDc1NDgzYzAuLjIxMTE2MjE3MjY2NzdmNDUyNjc2Njg0N2Q2NzJmMzU3YjZmODM4Yzkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJj
ZUhhbmRsZVNvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291
cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwCkBAIC00NjQsNyArNDY0LDcgQEAgc3RhdGljIHZvaWQg
c2VuZFJlcXVlc3RDYWxsYmFjayhHT2JqZWN0KiwgR0FzeW5jUmVzdWx0KiByZXMsIGdwb2ludGVy
IGRhdGEpCiAKICAgICAgICAgaWYgKGhhc1VuaWdub3JlZFRMU0Vycm9ycyhoYW5kbGUuZ2V0KCkp
KSB7CiAgICAgICAgICAgICBDZXJ0aWZpY2F0ZXNNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBjbGllbnRD
ZXJ0aWZpY2F0ZXMoKS5maW5kKGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkuaG9zdCgpLmxv
d2VyKCkpOwotICAgICAgICAgICAgaWYgKGl0ZXIgPT0gY2xpZW50Q2VydGlmaWNhdGVzKCkuZW5k
KCkgfHwgIWl0ZXItPnNlY29uZC5jb250YWlucyhkLT5tX3Jlc3BvbnNlLnNvdXBNZXNzYWdlQ2Vy
dGlmaWNhdGUoKSkpIHsKKyAgICAgICAgICAgIGlmIChpdGVyID09IGNsaWVudENlcnRpZmljYXRl
cygpLmVuZCgpIHx8ICFpdGVyLT52YWx1ZS5jb250YWlucyhkLT5tX3Jlc3BvbnNlLnNvdXBNZXNz
YWdlQ2VydGlmaWNhdGUoKSkpIHsKICAgICAgICAgICAgICAgICBHT3duUHRyPGNoYXI+IHVyaShz
b3VwX3VyaV90b19zdHJpbmcoc291cF9yZXF1ZXN0X2dldF91cmkoZC0+bV9zb3VwUmVxdWVzdC5n
ZXQoKSksIEZBTFNFKSk7CiAgICAgICAgICAgICAgICAgY2xpZW50LT5kaWRGYWlsKGhhbmRsZS5n
ZXQoKSwgUmVzb3VyY2VFcnJvcihnX3F1YXJrX3RvX3N0cmluZyhTT1VQX0hUVFBfRVJST1IpLCBT
T1VQX1NUQVRVU19TU0xfRkFJTEVELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJpLmdldCgpLCB1bmFjY2VwdGFibGVUTFNDZXJ0
aWZpY2F0ZSgpLApAQCAtODUzLDcgKzg1Myw3IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnNldEhv
c3RBbGxvd3NBbnlIVFRQU0NlcnRpZmljYXRlKGNvbnN0IFN0cmluZyYgaG9zdCkKIAogdm9pZCBS
ZXNvdXJjZUhhbmRsZTo6c2V0Q2xpZW50Q2VydGlmaWNhdGUoY29uc3QgU3RyaW5nJiBob3N0LCBH
VGxzQ2VydGlmaWNhdGUqIGNlcnRpZmljYXRlKQogewotICAgIGNsaWVudENlcnRpZmljYXRlcygp
LmFkZChob3N0Lmxvd2VyKCksIEhvc3RUTFNDZXJ0aWZpY2F0ZVNldCgpKS5pdGVyYXRvci0+c2Vj
b25kLmFkZChjZXJ0aWZpY2F0ZSk7CisgICAgY2xpZW50Q2VydGlmaWNhdGVzKCkuYWRkKGhvc3Qu
bG93ZXIoKSwgSG9zdFRMU0NlcnRpZmljYXRlU2V0KCkpLml0ZXJhdG9yLT52YWx1ZS5hZGQoY2Vy
dGlmaWNhdGUpOwogfQogCiB2b2lkIFJlc291cmNlSGFuZGxlOjpzZXRJZ25vcmVTU0xFcnJvcnMo
Ym9vbCBpZ25vcmVTU0xFcnJvcnMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0U291cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0U291cC5jcHAKaW5kZXggZGRmYTFj
MzhkZWU0YjNlOTYyOTgzMWQ2YTFiOTQ4N2M2M2UwOGI2OS4uMjhhMTk1OTU3OWNiODg3M2Y5M2Zl
OTJiN2Y4MTdlMWFhY2RlNGQxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVzdFNvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNwcApAQCAtNDMsNyAr
NDMsNyBAQCB2b2lkIFJlc291cmNlUmVxdWVzdDo6dXBkYXRlU291cE1lc3NhZ2UoU291cE1lc3Nh
Z2UqIHNvdXBNZXNzYWdlKSBjb25zdAogICAgIGlmICghaGVhZGVycy5pc0VtcHR5KCkpIHsKICAg
ICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaGVhZGVycy5lbmQoKTsK
ICAgICAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGhlYWRlcnMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgc291cF9tZXNzYWdlX2hlYWRl
cnNfYXBwZW5kKHNvdXBIZWFkZXJzLCBpdC0+Zmlyc3Quc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwg
aXQtPnNlY29uZC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9oZWFk
ZXJzX2FwcGVuZChzb3VwSGVhZGVycywgaXQtPmtleS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBp
dC0+dmFsdWUudXRmOCgpLmRhdGEoKSk7CiAgICAgfQogCiAgICAgU3RyaW5nIGZpcnN0UGFydHlT
dHJpbmcgPSBmaXJzdFBhcnR5Rm9yQ29va2llcygpLnN0cmluZygpOwpAQCAtNjYsNyArNjYsNyBA
QCBTb3VwTWVzc2FnZSogUmVzb3VyY2VSZXF1ZXN0Ojp0b1NvdXBNZXNzYWdlKCkgY29uc3QKICAg
ICBpZiAoIWhlYWRlcnMuaXNFbXB0eSgpKSB7CiAgICAgICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IGhlYWRlcnMuZW5kKCk7CiAgICAgICAgIGZvciAoSFRUUEhlYWRlck1h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBoZWFkZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkK
LSAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChzb3VwSGVhZGVycywgaXQt
PmZpcnN0LnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGl0LT5zZWNvbmQudXRmOCgpLmRhdGEoKSk7
CisgICAgICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQoc291cEhlYWRlcnMsIGl0
LT5rZXkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgaXQtPnZhbHVlLnV0ZjgoKS5kYXRhKCkpOwog
ICAgIH0KIAogICAgIFN0cmluZyBmaXJzdFBhcnR5U3RyaW5nID0gZmlyc3RQYXJ0eUZvckNvb2tp
ZXMoKS5zdHJpbmcoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvc291cC9SZXNvdXJjZVJlc3BvbnNlU291cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXNwb25zZVNvdXAuY3BwCmluZGV4IGI3YzA0OGZhMWVj
MDBmZTcwOGQ3ZGNhZTk5ZmM1ZGI3ZWM3OTA4M2QuLmNkZWY3ZWU4ZmNjMWU1ZjRhOWVjOWRmM2Zh
ZTVkYzM4NWUzOTRlNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvc291cC9SZXNvdXJjZVJlc3BvbnNlU291cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVzcG9uc2VTb3VwLmNwcApAQCAtNDYsNyArNDYs
NyBAQCBTb3VwTWVzc2FnZSogUmVzb3VyY2VSZXNwb25zZTo6dG9Tb3VwTWVzc2FnZSgpIGNvbnN0
CiAgICAgaWYgKCFoZWFkZXJzLmlzRW1wdHkoKSkgewogICAgICAgICBIVFRQSGVhZGVyTWFwOjpj
b25zdF9pdGVyYXRvciBlbmQgPSBoZWFkZXJzLmVuZCgpOwogICAgICAgICBmb3IgKEhUVFBIZWFk
ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaGVhZGVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpCi0gICAgICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQoc291cEhlYWRlcnMs
IGl0LT5maXJzdC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBpdC0+c2Vjb25kLnV0ZjgoKS5kYXRh
KCkpOworICAgICAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKHNvdXBIZWFkZXJz
LCBpdC0+a2V5LnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGl0LT52YWx1ZS51dGY4KCkuZGF0YSgp
KTsKICAgICB9CiAKICAgICBzb3VwX21lc3NhZ2Vfc2V0X2ZsYWdzKHNvdXBNZXNzYWdlLCBtX3Nv
dXBGbGFncyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3dp
bi9SZXNvdXJjZUhhbmRsZVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L3dpbi9SZXNvdXJjZUhhbmRsZVdpbi5jcHAKaW5kZXggMDIxMmQwY2RhOThjOWYxMzc5MjhlNjEy
ZmRmOTUwMzY1YTAxZDBkNi4uZjI1MDUyNzc1YjBkZWRmZTIxYzc1NWQzZjgzOTk4NTNlN2EwZjM5
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay93aW4vUmVzb3Vy
Y2VIYW5kbGVXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvd2lu
L1Jlc291cmNlSGFuZGxlV2luLmNwcApAQCAtMzIzLDE1ICszMjMsMTUgQEAgYm9vbCBSZXNvdXJj
ZUhhbmRsZTo6c3RhcnQoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQpCiAgICAgY29uc3QgSFRU
UEhlYWRlck1hcCYgaHR0cEhlYWRlckZpZWxkcyA9IGZpcnN0UmVxdWVzdCgpLmh0dHBIZWFkZXJG
aWVsZHMoKTsKIAogICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBo
dHRwSGVhZGVyRmllbGRzLmJlZ2luKCk7IGl0ICE9IGh0dHBIZWFkZXJGaWVsZHMuZW5kKCk7ICsr
aXQpIHsKLSAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGl0LT5maXJzdCwgIkFjY2VwdCIp
IHx8IGVxdWFsSWdub3JpbmdDYXNlKGl0LT5maXJzdCwgIlJlZmVyZXIiKSB8fCBlcXVhbElnbm9y
aW5nQ2FzZShpdC0+Zmlyc3QsICJVc2VyLUFnZW50IikpCisgICAgICAgIGlmIChlcXVhbElnbm9y
aW5nQ2FzZShpdC0+a2V5LCAiQWNjZXB0IikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UoaXQtPmtleSwg
IlJlZmVyZXIiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShpdC0+a2V5LCAiVXNlci1BZ2VudCIpKQog
ICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgaWYgKCFodHRwSGVhZGVycy5pc0VtcHR5
KCkpCiAgICAgICAgICAgICBodHRwSGVhZGVycy5hcHBlbmQoJ1xuJyk7CiAKLSAgICAgICAgaHR0
cEhlYWRlcnMuYXBwZW5kKGl0LT5maXJzdC5jaGFyYWN0ZXJzKCksIGl0LT5maXJzdC5sZW5ndGgo
KSk7CisgICAgICAgIGh0dHBIZWFkZXJzLmFwcGVuZChpdC0+a2V5LmNoYXJhY3RlcnMoKSwgaXQt
PmtleS5sZW5ndGgoKSk7CiAgICAgICAgIGh0dHBIZWFkZXJzLmFwcGVuZCgnOicpOwotICAgICAg
ICBodHRwSGVhZGVycy5hcHBlbmQoaXQtPnNlY29uZC5jaGFyYWN0ZXJzKCksIGl0LT5zZWNvbmQu
bGVuZ3RoKCkpOworICAgICAgICBodHRwSGVhZGVycy5hcHBlbmQoaXQtPnZhbHVlLmNoYXJhY3Rl
cnMoKSwgaXQtPnZhbHVlLmxlbmd0aCgpKTsKICAgICB9CiAKICAgICBJTlRFUk5FVF9CVUZGRVJT
VyBpbnRlcm5ldEJ1ZmZlcnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9x
dC9SdW5Mb29wUXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUnVuTG9vcFF0LmNw
cAppbmRleCAyYTg3ZTJmYzhmNjY3Nzc2OWY3MzE0M2U1NzFlMDljNWE1NGM2ZWJhLi41MDFiZDVj
MTIzYjBmMDNjZTlhMGNmOTBlMTcyNjkxZjUwNmQ5YTFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9xdC9SdW5Mb29wUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3F0L1J1bkxvb3BRdC5jcHAKQEAgLTEwOSw3ICsxMDksNyBAQCB2b2lkIFJ1bkxvb3A6OlRp
bWVyQmFzZTo6dGltZXJGaXJlZChSdW5Mb29wKiBydW5Mb29wLCBpbnQgSUQpCiB7CiAgICAgVGlt
ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gcnVuTG9vcC0+bV9hY3RpdmVUaW1lcnMuZmluZChJRCk7CiAg
ICAgQVNTRVJUKGl0ICE9IHJ1bkxvb3AtPm1fYWN0aXZlVGltZXJzLmVuZCgpKTsKLSAgICBUaW1l
ckJhc2UqIHRpbWVyID0gaXQtPnNlY29uZDsKKyAgICBUaW1lckJhc2UqIHRpbWVyID0gaXQtPnZh
bHVlOwogCiAgICAgaWYgKCF0aW1lci0+bV9pc1JlcGVhdGluZykgewogICAgICAgICAvLyBTdG9w
IHRoZSB0aW1lciAoY2FsbGluZyBzdG9wIHdvdWxkIG5lZWQgYW5vdGhlciBoYXNoIHRhYmxlIGxv
b2t1cCkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0xvY2FsZVRv
U2NyaXB0TWFwcGluZ0RlZmF1bHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9M
b2NhbGVUb1NjcmlwdE1hcHBpbmdEZWZhdWx0LmNwcAppbmRleCA5MDk0NzM4NDk2OTZiNGMyOTJk
NmI5YWMyODViYzdkOWY0YWMyODQxLi41ODI2NDkwN2Q1ZTQwYTAwOWI0MGZkNjk5MTgwZjMzZWY3
ZDUxN2MzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0xvY2FsZVRv
U2NyaXB0TWFwcGluZ0RlZmF1bHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvTG9jYWxlVG9TY3JpcHRNYXBwaW5nRGVmYXVsdC5jcHAKQEAgLTE2Niw3ICsxNjYsNyBAQCBV
U2NyaXB0Q29kZSBzY3JpcHROYW1lVG9Db2RlKGNvbnN0IFN0cmluZyYgc2NyaXB0TmFtZSkKIAog
ICAgIEhhc2hNYXA8U3RyaW5nLCBVU2NyaXB0Q29kZT46Oml0ZXJhdG9yIGl0ID0gc2NyaXB0TmFt
ZUNvZGVNYXAuZmluZChzY3JpcHROYW1lLmxvd2VyKCkpOwogICAgIGlmIChpdCAhPSBzY3JpcHRO
YW1lQ29kZU1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgIHJl
dHVybiBpdC0+dmFsdWU7CiAgICAgcmV0dXJuIFVTQ1JJUFRfSU5WQUxJRF9DT0RFOwogfQogCkBA
IC0zODksNyArMzg5LDcgQEAgVVNjcmlwdENvZGUgbG9jYWxlVG9TY3JpcHRDb2RlRm9yRm9udFNl
bGVjdGlvbihjb25zdCBTdHJpbmcmIGxvY2FsZSkKICAgICB3aGlsZSAoIWNhbm9uaWNhbExvY2Fs
ZS5pc0VtcHR5KCkpIHsKICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFVTY3JpcHRDb2RlPjo6aXRl
cmF0b3IgaXQgPSBsb2NhbGVTY3JpcHRNYXAuZmluZChjYW5vbmljYWxMb2NhbGUpOwogICAgICAg
ICBpZiAoaXQgIT0gbG9jYWxlU2NyaXB0TWFwLmVuZCgpKQotICAgICAgICAgICAgcmV0dXJuIGl0
LT5zZWNvbmQ7CisgICAgICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwogICAgICAgICBzaXplX3Qg
cG9zID0gY2Fub25pY2FsTG9jYWxlLnJldmVyc2VGaW5kKCdfJyk7CiAgICAgICAgIGlmIChwb3Mg
PT0gbm90Rm91bmQpCiAgICAgICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnkuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAKaW5kZXggNDE0MGEzODcy
OTI4OTBlNWQ4ZGUzZDQyZTUxYjY2NWRkMThkZmM2OS4uMjc5MDIyN2ZhZTkxODUyNThkMmUxNjA1
MmQxMzg4OWQ1ZGI2YWM4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAKQEAgLTE5Niw4ICsxOTYsOCBAQCBzdGF0aWMg
dm9pZCBwcnVuZUJsYWNrbGlzdGVkQ29kZWNzKCkKICAgICAgICAgVGV4dEVuY29kaW5nTmFtZU1h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSB0ZXh0RW5jb2RpbmdOYW1lTWFwLT5iZWdpbigpOwogICAg
ICAgICBUZXh0RW5jb2RpbmdOYW1lTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSB0ZXh0RW5jb2Rp
bmdOYW1lTWFwLT5lbmQoKTsKICAgICAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgewotICAg
ICAgICAgICAgaWYgKGl0LT5zZWNvbmQgPT0gYXRvbWljTmFtZSkKLSAgICAgICAgICAgICAgICBu
YW1lcy5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgICAgIGlmIChpdC0+dmFsdWUgPT0gYXRv
bWljTmFtZSkKKyAgICAgICAgICAgICAgICBuYW1lcy5hcHBlbmQoaXQtPmtleSk7CiAgICAgICAg
IH0KIAogICAgICAgICBzaXplX3QgbGVuZ3RoID0gbmFtZXMuc2l6ZSgpOwpAQCAtMzkxLDcgKzM5
MSw3IEBAIHZvaWQgZHVtcFRleHRFbmNvZGluZ05hbWVNYXAoKQogICAgIFRleHRFbmNvZGluZ05h
bWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdGV4dEVuY29kaW5nTmFtZU1hcC0+YmVnaW4oKTsK
ICAgICBUZXh0RW5jb2RpbmdOYW1lTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSB0ZXh0RW5jb2Rp
bmdOYW1lTWFwLT5lbmQoKTsKICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgIiclcycgPT4gJyVzJ1xuIiwgaXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsK
KyAgICAgICAgZnByaW50ZihzdGRlcnIsICInJXMnID0+ICclcydcbiIsIGl0LT5rZXksIGl0LT52
YWx1ZSk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC90cmFuc2NvZGVyL0ZvbnRUcmFuc2NvZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvdHJhbnNjb2Rlci9Gb250VHJhbnNjb2Rlci5jcHAKaW5kZXggNGUwN2Y1MGZiZGIw
YzU3YzNlZWNhNmY4YmU3MWY3NTA1ZGI1M2JjMC4uNDg0MjI4Y2FhOGU3NjA3MWIzN2E5ZDIwYTk5
MmQ1MGExZDQxZjQwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC90
cmFuc2NvZGVyL0ZvbnRUcmFuc2NvZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L3RyYW5zY29kZXIvRm9udFRyYW5zY29kZXIuY3BwCkBAIC02Niw3ICs2Niw3IEBAIEZv
bnRUcmFuc2NvZGVyOjpDb252ZXJ0ZXJUeXBlIEZvbnRUcmFuc2NvZGVyOjpjb252ZXJ0ZXJUeXBl
KGNvbnN0IEZvbnREZXNjcmlwdGlvCiAgICAgaWYgKCFmb250RmFtaWx5LmlzTnVsbCgpKSB7CiAg
ICAgICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBDb252ZXJ0ZXJUeXBlPjo6Y29uc3RfaXRlcmF0
b3IgZm91bmQgPSBtX2NvbnZlcnRlclR5cGVzLmZpbmQoZm9udEZhbWlseSk7CiAgICAgICAgIGlm
IChmb3VuZCAhPSBtX2NvbnZlcnRlclR5cGVzLmVuZCgpKQotICAgICAgICAgICAgcmV0dXJuIGZv
dW5kLT5zZWNvbmQ7CisgICAgICAgICAgICByZXR1cm4gZm91bmQtPnZhbHVlOwogICAgIH0KIAog
ICAgIC8vIElFJ3MgZGVmYXVsdCBmb250cyBmb3IgSmFwYW5lc2UgZW5jb2RpbmdzIGNoYW5nZSBi
YWNrc2xhc2hlcyBpbnRvIHllbiBzaWducy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvd2luL1RleHRDb2RlY1dpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L3dpbi9UZXh0Q29kZWNXaW4uY3BwCmluZGV4IGUxOTIzN2Q2OGQ5MGRmMmY1MDNhZjQy
MzlhYTM2N2I2ZjE0ZjI0YjUuLjg3OWFmNzY5NzcyZmY1MTVmMzU0YWE4YjE5NzE2OTliNjJhYmE2
NjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvd2luL1RleHRDb2Rl
Y1dpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC93aW4vVGV4dENvZGVj
V2luLmNwcApAQCAtMTA1LDE3ICsxMDUsMTcgQEAgTGFuZ3VhZ2VNYW5hZ2VyOjpMYW5ndWFnZU1h
bmFnZXIoKQogICAgICAgICAgICAgaSA9IGNvZGVQYWdlQ2hhcnNldHMoKS5zZXQoY3BJbmZvLnVp
Q29kZVBhZ2UsIG5hbWUpLml0ZXJhdG9yOwogICAgICAgICB9CiAgICAgICAgIGlmIChpICE9IGNv
ZGVQYWdlQ2hhcnNldHMoKS5lbmQoKSkgewotICAgICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIENo
YXJzZXRJbmZvPjo6aXRlcmF0b3IgaiA9IGtub3duQ2hhcnNldHMoKS5maW5kKFN0cmluZyhpLT5z
ZWNvbmQuZGF0YSgpLCBpLT5zZWNvbmQubGVuZ3RoKCkpKTsKKyAgICAgICAgICAgIEhhc2hNYXA8
U3RyaW5nLCBDaGFyc2V0SW5mbz46Oml0ZXJhdG9yIGogPSBrbm93bkNoYXJzZXRzKCkuZmluZChT
dHJpbmcoaS0+dmFsdWUuZGF0YSgpLCBpLT52YWx1ZS5sZW5ndGgoKSkpOwogICAgICAgICAgICAg
QVNTRVJUKGogIT0ga25vd25DaGFyc2V0cygpLmVuZCgpKTsKLSAgICAgICAgICAgIENoYXJzZXRJ
bmZvJiBpbmZvID0gai0+c2Vjb25kOwotICAgICAgICAgICAgaW5mby5tX25hbWUgPSBpLT5zZWNv
bmQuZGF0YSgpOworICAgICAgICAgICAgQ2hhcnNldEluZm8mIGluZm8gPSBqLT52YWx1ZTsKKyAg
ICAgICAgICAgIGluZm8ubV9uYW1lID0gaS0+dmFsdWUuZGF0YSgpOwogICAgICAgICAgICAgaW5m
by5tX2ZyaWVuZGx5TmFtZSA9IGNwSW5mby53c3pEZXNjcmlwdGlvbjsKICAgICAgICAgICAgIGlu
Zm8ubV9hbGlhc2VzLmFwcGVuZChuYW1lKTsKICAgICAgICAgICAgIGluZm8ubV9hbGlhc2VzLmFw
cGVuZChTdHJpbmcoY3BJbmZvLndzekhlYWRlckNoYXJzZXQpLmxhdGluMSgpKTsKICAgICAgICAg
ICAgIGluZm8ubV9hbGlhc2VzLmFwcGVuZChTdHJpbmcoY3BJbmZvLndzekJvZHlDaGFyc2V0KS5s
YXRpbjEoKSk7CiAgICAgICAgICAgICBTdHJpbmcgY3BOYW1lID0gImNwIiArIFN0cmluZzo6bnVt
YmVyKGNwSW5mby51aUNvZGVQYWdlKTsKICAgICAgICAgICAgIGluZm8ubV9hbGlhc2VzLmFwcGVu
ZChjcE5hbWUubGF0aW4xKCkpOwotICAgICAgICAgICAgc3VwcG9ydGVkQ2hhcnNldHMoKS5hZGQo
aS0+c2Vjb25kLmRhdGEoKSk7CisgICAgICAgICAgICBzdXBwb3J0ZWRDaGFyc2V0cygpLmFkZChp
LT52YWx1ZS5kYXRhKCkpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMTI2LDcgKzEyNiw3IEBA
IHN0YXRpYyBVSU5UIGdldENvZGVQYWdlKGNvbnN0IGNoYXIqIG5hbWUpCiAgICAgLy8gc2F5aW5n
ICI9PSIgaXMgbm90IGZvdW5kIGZvciBjb25zdF9pdGVyYXRvciBhbmQgaXRlcmF0b3IKICAgICBj
b25zdCBIYXNoTWFwPFN0cmluZywgQ2hhcnNldEluZm8+JiBjaGFyc2V0cyA9IGtub3duQ2hhcnNl
dHMoKTsKICAgICBIYXNoTWFwPFN0cmluZywgQ2hhcnNldEluZm8+Ojpjb25zdF9pdGVyYXRvciBp
ID0gY2hhcnNldHMuZmluZChuYW1lKTsKLSAgICByZXR1cm4gaSA9PSBjaGFyc2V0cy5lbmQoKSA/
IENQX0FDUCA6IGktPnNlY29uZC5tX2NvZGVQYWdlOworICAgIHJldHVybiBpID09IGNoYXJzZXRz
LmVuZCgpID8gQ1BfQUNQIDogaS0+dmFsdWUubV9jb2RlUGFnZTsKIH0KIAogc3RhdGljIFBhc3NP
d25QdHI8VGV4dENvZGVjPiBuZXdUZXh0Q29kZWNXaW4oY29uc3QgVGV4dEVuY29kaW5nJiBlbmNv
ZGluZywgY29uc3Qgdm9pZCopCkBAIC0xNDksOSArMTQ5LDkgQEAgdm9pZCBUZXh0Q29kZWNXaW46
OnJlZ2lzdGVyRXh0ZW5kZWRFbmNvZGluZ05hbWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJhciByZWdp
c3RyYXIKICAgICBmb3IgKENoYXJzZXRTZXQ6Oml0ZXJhdG9yIGkgPSBzdXBwb3J0ZWRDaGFyc2V0
cygpLmJlZ2luKCk7IGkgIT0gc3VwcG9ydGVkQ2hhcnNldHMoKS5lbmQoKTsgKytpKSB7CiAgICAg
ICAgIEhhc2hNYXA8U3RyaW5nLCBDaGFyc2V0SW5mbz46Oml0ZXJhdG9yIGogPSBrbm93bkNoYXJz
ZXRzKCkuZmluZCgqaSk7CiAgICAgICAgIGlmIChqICE9IGtub3duQ2hhcnNldHMoKS5lbmQoKSkg
ewotICAgICAgICAgICAgcmVnaXN0cmFyKGotPnNlY29uZC5tX25hbWUuZGF0YSgpLCBqLT5zZWNv
bmQubV9uYW1lLmRhdGEoKSk7Ci0gICAgICAgICAgICBmb3IgKFZlY3RvcjxDU3RyaW5nPjo6Y29u
c3RfaXRlcmF0b3IgYWxpYXMgPSBqLT5zZWNvbmQubV9hbGlhc2VzLmJlZ2luKCk7IGFsaWFzICE9
IGotPnNlY29uZC5tX2FsaWFzZXMuZW5kKCk7ICsrYWxpYXMpCi0gICAgICAgICAgICAgICAgcmVn
aXN0cmFyKGFsaWFzLT5kYXRhKCksIGotPnNlY29uZC5tX25hbWUuZGF0YSgpKTsKKyAgICAgICAg
ICAgIHJlZ2lzdHJhcihqLT52YWx1ZS5tX25hbWUuZGF0YSgpLCBqLT52YWx1ZS5tX25hbWUuZGF0
YSgpKTsKKyAgICAgICAgICAgIGZvciAoVmVjdG9yPENTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBh
bGlhcyA9IGotPnZhbHVlLm1fYWxpYXNlcy5iZWdpbigpOyBhbGlhcyAhPSBqLT52YWx1ZS5tX2Fs
aWFzZXMuZW5kKCk7ICsrYWxpYXMpCisgICAgICAgICAgICAgICAgcmVnaXN0cmFyKGFsaWFzLT5k
YXRhKCksIGotPnZhbHVlLm1fbmFtZS5kYXRhKCkpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAt
MTYyLDcgKzE2Miw3IEBAIHZvaWQgVGV4dENvZGVjV2luOjpyZWdpc3RlckV4dGVuZGVkQ29kZWNz
KFRleHRDb2RlY1JlZ2lzdHJhciByZWdpc3RyYXIpCiAgICAgZm9yIChDaGFyc2V0U2V0OjppdGVy
YXRvciBpID0gc3VwcG9ydGVkQ2hhcnNldHMoKS5iZWdpbigpOyBpICE9IHN1cHBvcnRlZENoYXJz
ZXRzKCkuZW5kKCk7ICsraSkgewogICAgICAgICBIYXNoTWFwPFN0cmluZywgQ2hhcnNldEluZm8+
OjppdGVyYXRvciBqID0ga25vd25DaGFyc2V0cygpLmZpbmQoKmkpOwogICAgICAgICBpZiAoaiAh
PSBrbm93bkNoYXJzZXRzKCkuZW5kKCkpCi0gICAgICAgICAgICByZWdpc3RyYXIoai0+c2Vjb25k
Lm1fbmFtZS5kYXRhKCksIG5ld1RleHRDb2RlY1dpbiwgMCk7CisgICAgICAgICAgICByZWdpc3Ry
YXIoai0+dmFsdWUubV9uYW1lLmRhdGEoKSwgbmV3VGV4dENvZGVjV2luLCAwKTsKICAgICB9CiB9
CiAKQEAgLTMwMSw3ICszMDEsNyBAQCB2b2lkIFRleHRDb2RlY1dpbjo6ZW51bWVyYXRlU3VwcG9y
dGVkRW5jb2RpbmdzKEVuY29kaW5nUmVjZWl2ZXImIHJlY2VpdmVyKQogICAgIGxhbmd1YWdlTWFu
YWdlcigpOwogICAgIGZvciAoQ2hhcnNldFNldDo6aXRlcmF0b3IgaSA9IHN1cHBvcnRlZENoYXJz
ZXRzKCkuYmVnaW4oKTsgaSAhPSBzdXBwb3J0ZWRDaGFyc2V0cygpLmVuZCgpOyArK2kpIHsKICAg
ICAgICAgSGFzaE1hcDxTdHJpbmcsIENoYXJzZXRJbmZvPjo6aXRlcmF0b3IgaiA9IGtub3duQ2hh
cnNldHMoKS5maW5kKCppKTsKLSAgICAgICAgaWYgKGogIT0ga25vd25DaGFyc2V0cygpLmVuZCgp
ICYmICFyZWNlaXZlci5yZWNlaXZlKGotPnNlY29uZC5tX25hbWUuZGF0YSgpLCBqLT5zZWNvbmQu
bV9mcmllbmRseU5hbWUuY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgai0+c2Vjb25k
Lm1fY29kZVBhZ2UpKQorICAgICAgICBpZiAoaiAhPSBrbm93bkNoYXJzZXRzKCkuZW5kKCkgJiYg
IXJlY2VpdmVyLnJlY2VpdmUoai0+dmFsdWUubV9uYW1lLmRhdGEoKSwgai0+dmFsdWUubV9mcmll
bmRseU5hbWUuY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgai0+dmFsdWUubV9jb2Rl
UGFnZSkpCiAgICAgICAgICAgICBicmVhazsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xpcGJvYXJkVXRpbGl0aWVzV2luLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRVdGlsaXRpZXNXaW4uY3BwCmluZGV4IGYyMzc0
NDRiNzJjZjAzMTE5N2MzYjBiZWExNjk3YWNkMzg1MGRhMTEuLmYzMzU1MGU5NDBhMjg2N2NmYTlh
MmRkNGY4ZTA1NTczZjk5NjRlMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3dpbi9DbGlwYm9hcmRVdGlsaXRpZXNXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3dpbi9DbGlwYm9hcmRVdGlsaXRpZXNXaW4uY3BwCkBAIC03OSw3ICs3OSw3IEBAIHN0YXRp
YyBib29sIGdldERhdGFNYXBJdGVtKGNvbnN0IERyYWdEYXRhTWFwKiBkYXRhT2JqZWN0LCBGT1JN
QVRFVEMqIGZvcm1hdCwgU3RyCiAgICAgRHJhZ0RhdGFNYXA6OmNvbnN0X2l0ZXJhdG9yIGZvdW5k
ID0gZGF0YU9iamVjdC0+ZmluZChmb3JtYXQtPmNmRm9ybWF0KTsKICAgICBpZiAoZm91bmQgPT0g
ZGF0YU9iamVjdC0+ZW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpdGVtID0gZm91
bmQtPnNlY29uZFswXTsKKyAgICBpdGVtID0gZm91bmQtPnZhbHVlWzBdOwogICAgIHJldHVybiB0
cnVlOwogfQogCkBAIC04MjksNyArODI5LDcgQEAgdm9pZCBnZXRDbGlwYm9hcmREYXRhKElEYXRh
T2JqZWN0KiBkYXRhT2JqZWN0LCBGT1JNQVRFVEMqIGZvcm1hdCwgVmVjdG9yPFN0cmluZz4KICAg
ICBDbGlwYm9hcmRGb3JtYXRNYXA6OmNvbnN0X2l0ZXJhdG9yIGZvdW5kID0gZm9ybWF0TWFwLmZp
bmQoZm9ybWF0LT5jZkZvcm1hdCk7CiAgICAgaWYgKGZvdW5kID09IGZvcm1hdE1hcC5lbmQoKSkK
ICAgICAgICAgcmV0dXJuOwotICAgIGZvdW5kLT5zZWNvbmQtPmdldFN0cmluZyhkYXRhT2JqZWN0
LCBmb3VuZC0+c2Vjb25kLT5mb3JtYXQsIGRhdGFTdHJpbmdzKTsKKyAgICBmb3VuZC0+dmFsdWUt
PmdldFN0cmluZyhkYXRhT2JqZWN0LCBmb3VuZC0+dmFsdWUtPmZvcm1hdCwgZGF0YVN0cmluZ3Mp
OwogfQogCiB2b2lkIHNldENsaXBib2FyZERhdGEoSURhdGFPYmplY3QqIGRhdGFPYmplY3QsIFVJ
TlQgZm9ybWF0LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZGF0YVN0cmluZ3MpCkBAIC04MzgsNyAr
ODM4LDcgQEAgdm9pZCBzZXRDbGlwYm9hcmREYXRhKElEYXRhT2JqZWN0KiBkYXRhT2JqZWN0LCBV
SU5UIGZvcm1hdCwgY29uc3QgVmVjdG9yPFN0cmluZz4KICAgICBDbGlwYm9hcmRGb3JtYXRNYXA6
OmNvbnN0X2l0ZXJhdG9yIGZvdW5kID0gZm9ybWF0TWFwLmZpbmQoZm9ybWF0KTsKICAgICBpZiAo
Zm91bmQgPT0gZm9ybWF0TWFwLmVuZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgZm91bmQtPnNl
Y29uZC0+c2V0U3RyaW5nKGRhdGFPYmplY3QsIGZvdW5kLT5zZWNvbmQtPmZvcm1hdCwgZGF0YVN0
cmluZ3MpOworICAgIGZvdW5kLT52YWx1ZS0+c2V0U3RyaW5nKGRhdGFPYmplY3QsIGZvdW5kLT52
YWx1ZS0+Zm9ybWF0LCBkYXRhU3RyaW5ncyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRXaW4uY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFdpbi5jcHAKaW5kZXggNDQz
NTMzOTZkNzA3MWZhNmVlMTdiYjk1MGM3MGJkZTk0Y2UwNDVlMi4uODU2MzQ5YmQwYzkxNzc0ZmVh
ZTNkOWMxMmM2NGM2M2RmMjQ5YzM0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vd2luL0NsaXBib2FyZFdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2lu
L0NsaXBib2FyZFdpbi5jcHAKQEAgLTUyNSw3ICs1MjUsNyBAQCBIYXNoU2V0PFN0cmluZz4gQ2xp
cGJvYXJkV2luOjp0eXBlcygpIGNvbnN0CiAgICAgfSBlbHNlIHsKICAgICAgICAgZm9yIChEcmFn
RGF0YU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2RyYWdEYXRhTWFwLmJlZ2luKCk7IGl0ICE9
IG1fZHJhZ0RhdGFNYXAuZW5kKCk7ICsraXQpIHsKICAgICAgICAgICAgIEZPUk1BVEVUQyBkYXRh
OwotICAgICAgICAgICAgZGF0YS5jZkZvcm1hdCA9ICgqaXQpLmZpcnN0OworICAgICAgICAgICAg
ZGF0YS5jZkZvcm1hdCA9ICgqaXQpLmtleTsKICAgICAgICAgICAgIGFkZE1pbWVUeXBlc0ZvckZv
cm1hdChyZXN1bHRzLCBkYXRhKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9GaWxlU3lzdGVtV2luLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3dpbi9GaWxlU3lzdGVtV2luLmNwcAppbmRleCAwYWIwZDcyODMyZjQ4NmI3NGRk
Yjk4MGUxYzliNGQ2ZWM2MTJlYWEzLi41NGI0N2VmZGU1MTRlNDE4ZmZhZTVhNDg4ZjUxMmMzNWUx
ZmM1NGQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRmlsZVN5c3Rl
bVdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0ZpbGVTeXN0ZW1XaW4u
Y3BwCkBAIC0yMzgsNyArMjM4LDcgQEAgc3RhdGljIFN0cmluZyBjYWNoZWRTdG9yYWdlRGlyZWN0
b3J5KERXT1JEIHBhdGhJZGVudGlmaWVyKQogCiAgICAgSGFzaE1hcDxEV09SRCwgU3RyaW5nPjo6
aXRlcmF0b3IgaXQgPSBkaXJlY3Rvcmllcy5maW5kKHBhdGhJZGVudGlmaWVyKTsKICAgICBpZiAo
aXQgIT0gZGlyZWN0b3JpZXMuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAg
ICAgICByZXR1cm4gaXQtPnZhbHVlOwogCiAgICAgU3RyaW5nIGRpcmVjdG9yeSA9IHN0b3JhZ2VE
aXJlY3RvcnkocGF0aElkZW50aWZpZXIpOwogICAgIGRpcmVjdG9yaWVzLmFkZChwYXRoSWRlbnRp
ZmllciwgZGlyZWN0b3J5KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dp
bi9SdW5Mb29wV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9SdW5Mb29wV2lu
LmNwcAppbmRleCAxNjYzYjY2MTMzYWJjMmNiM2ZkMDA1N2QxOTY3MTIzN2QwZTc5OWRhLi4xN2Q2
ODQ1ZTlmZmRjMzkyOGMwNjdjN2MxNTg4M2FhYjkwZDI5YTY4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS93aW4vUnVuTG9vcFdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vd2luL1J1bkxvb3BXaW4uY3BwCkBAIC0xMjYsNyArMTI2LDcgQEAgdm9pZCBSdW5M
b29wOjpUaW1lckJhc2U6OnRpbWVyRmlyZWQoUnVuTG9vcCogcnVuTG9vcCwgdWludDY0X3QgSUQp
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBUaW1lckJhc2UqIHRpbWVyID0gaXQtPnNl
Y29uZDsKKyAgICBUaW1lckJhc2UqIHRpbWVyID0gaXQtPnZhbHVlOwogCiAgICAgaWYgKCF0aW1l
ci0+bV9pc1JlcGVhdGluZykgewogICAgICAgICBydW5Mb29wLT5tX2FjdGl2ZVRpbWVycy5yZW1v
dmUoaXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1dDRGF0YU9i
amVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vV0NEYXRhT2JqZWN0LmNwcApp
bmRleCBjNWFhZWZjN2M0MGU0NGU0NjU3N2E2NjE4NGIyMTI2YWMzYzhjNDRmLi40ZWVlNGI5NjEz
ODM5ODAyZjQzOTcxOTkxMjgxNzlmN2M2ODUyNDgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS93aW4vV0NEYXRhT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93aW4vV0NEYXRhT2JqZWN0LmNwcApAQCAtMTY5LDcgKzE2OSw3IEBAIEhSRVNVTFQgV0NE
YXRhT2JqZWN0OjpjcmVhdGVJbnN0YW5jZShXQ0RhdGFPYmplY3QqKiByZXN1bHQsIGNvbnN0IERy
YWdEYXRhTWFwJiBkCiAgICAgKnJlc3VsdCA9IG5ldyBXQ0RhdGFPYmplY3Q7CiAKICAgICBmb3Ig
KERyYWdEYXRhTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGRhdGFNYXAuYmVnaW4oKTsgaXQgIT0g
ZGF0YU1hcC5lbmQoKTsgKytpdCkKLSAgICAgICAgc2V0Q2xpcGJvYXJkRGF0YSgqcmVzdWx0LCBp
dC0+Zmlyc3QsIGl0LT5zZWNvbmQpOworICAgICAgICBzZXRDbGlwYm9hcmREYXRhKCpyZXN1bHQs
IGl0LT5rZXksIGl0LT52YWx1ZSk7CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbmNlL01JTUVUeXBlUmVnaXN0cnlXaW5DRS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW5jZS9NSU1FVHlwZVJlZ2lzdHJ5V2luQ0UuY3Bw
CmluZGV4IDhhMGQzZDJiNjE2MmI0NmRiYjdkNjJmMjJjYTAzMjZkYzdmY2VkYzUuLmU5NmZiMmJh
N2Q5OTljZTJkM2FjYjBkMGY5YzRjMjQ4NzQ3ZmU1ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3dpbmNlL01JTUVUeXBlUmVnaXN0cnlXaW5DRS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vd2luY2UvTUlNRVR5cGVSZWdpc3RyeVdpbkNFLmNwcApAQCAtMTAx
LDggKzEwMSw4IEBAIFN0cmluZyBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRQcmVmZXJyZWRFeHRlbnNp
b25Gb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIHR5cGUpCiAgICAgaW5pdE1JTUVUeXBlRW50ZW5z
aW9uTWFwKCk7CiAKICAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+OjppdGVyYXRvciBp
ID0gbWltZXR5cGVNYXAuYmVnaW4oKTsgaSAhPSBtaW1ldHlwZU1hcC5lbmQoKTsgKytpKSB7Ci0g
ICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShpLT5zZWNvbmQsIHR5cGUpKQotICAgICAgICAg
ICAgcmV0dXJuIGktPmZpcnN0OworICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoaS0+dmFs
dWUsIHR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIGktPmtleTsKICAgICB9CiAKICAgICByZXR1
cm4gU3RyaW5nKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC9Db250
ZXh0TWVudVd4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L0NvbnRleHRNZW51V3gu
Y3BwCmluZGV4IDQxODlhYTk1MmZmZWI0YmNhMjNkYjcwYTk4MDYxZWVkZmY0ZjFkZjQuLmRmMmVl
NTI3ZDk0OGUxNjJhYmI4OTQyMzhiYjJiMzg0ZDg2OWY2MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3d4L0NvbnRleHRNZW51V3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3d4L0NvbnRleHRNZW51V3guY3BwCkBAIC02Nyw4ICs2Nyw4IEBAIHZvaWQgQ29u
dGV4dE1lbnU6OmFwcGVuZEl0ZW0oQ29udGV4dE1lbnVJdGVtJiBpdGVtKQogCiAgICAgSXRlbUFj
dGlvbk1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gc19pdGVtQWN0aW9ucy5lbmQoKTsKICAgICBm
b3IgKEl0ZW1BY3Rpb25NYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gc19pdGVtQWN0aW9ucy5iZWdp
bigpOyAgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kID09IGl0ZW1E
ZXNjcmlwdGlvbi5hY3Rpb24pCi0gICAgICAgICAgICBpZFd4ID0gaXQtPmZpcnN0OworICAgICAg
ICBpZiAoaXQtPnZhbHVlID09IGl0ZW1EZXNjcmlwdGlvbi5hY3Rpb24pCisgICAgICAgICAgICBp
ZFd4ID0gaXQtPmtleTsKICAgICB9CiAKICAgICBpZiAoaXRlbURlc2NyaXB0aW9uLnN1Yk1lbnUp
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAKaW5kZXggOTYxYzQ1
NDg1YmYyZDg3NzRhYTMwMGM3ODY1MGVhYzlkYWEwNWZjOC4uNDQ1MmFmZTFlNGI2MzhiNWY3ZGRh
MGVjN2IxNzlkN2FlM2Q5ZDZlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9Q
bHVnaW5EYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRh
YmFzZS5jcHAKQEAgLTE2Niw3ICsxNjYsNyBAQCBib29sIFBsdWdpbkRhdGFiYXNlOjpyZWZyZXNo
KCkKICAgICAgICAgTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBtYXBfaXQg
PSAoKml0KS0+bWltZVRvRGVzY3JpcHRpb25zKCkuYmVnaW4oKTsKICAgICAgICAgTUlNRVRvRGVz
Y3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBtYXBfZW5kID0gKCppdCktPm1pbWVUb0Rlc2Ny
aXB0aW9ucygpLmVuZCgpOwogICAgICAgICBmb3IgKDsgbWFwX2l0ICE9IG1hcF9lbmQ7ICsrbWFw
X2l0KQotICAgICAgICAgICAgbV9yZWdpc3RlcmVkTUlNRVR5cGVzLmFkZChtYXBfaXQtPmZpcnN0
KTsKKyAgICAgICAgICAgIG1fcmVnaXN0ZXJlZE1JTUVUeXBlcy5hZGQobWFwX2l0LT5rZXkpOwog
ICAgIH0KIAogICAgIHJldHVybiB0cnVlOwpAQCAtMjQ3LDkgKzI0Nyw5IEBAIFN0cmluZyBQbHVn
aW5EYXRhYmFzZTo6TUlNRVR5cGVGb3JFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBleHRlbnNpb24p
IGNvbnN0CiAgICAgICAgIE1JTUVUb0V4dGVuc2lvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIG1pbWVf
ZW5kID0gKCppdCktPm1pbWVUb0V4dGVuc2lvbnMoKS5lbmQoKTsKIAogICAgICAgICBmb3IgKE1J
TUVUb0V4dGVuc2lvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIG1pbWVfaXQgPSAoKml0KS0+bWltZVRv
RXh0ZW5zaW9ucygpLmJlZ2luKCk7IG1pbWVfaXQgIT0gbWltZV9lbmQ7ICsrbWltZV9pdCkgewot
ICAgICAgICAgICAgbWltZVR5cGUgPSBtaW1lX2l0LT5maXJzdDsKKyAgICAgICAgICAgIG1pbWVU
eXBlID0gbWltZV9pdC0+a2V5OwogICAgICAgICAgICAgUGx1Z2luUGFja2FnZSogcHJlZmVycmVk
UGx1Z2luID0gbV9wcmVmZXJyZWRQbHVnaW5zLmdldChtaW1lVHlwZSkuZ2V0KCk7Ci0gICAgICAg
ICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZXh0ZW5zaW9ucyA9IG1pbWVfaXQtPnNlY29uZDsK
KyAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBleHRlbnNpb25zID0gbWltZV9pdC0+
dmFsdWU7CiAgICAgICAgICAgICBib29sIGZvdW5kTWFwcGluZyA9IGZhbHNlOwogICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4dGVuc2lvbnMuc2l6ZSgpOyBpKyspIHsKICAg
ICAgICAgICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZXh0ZW5zaW9uc1tpXSwgZXh0ZW5z
aW9uKSkgewpAQCAtMzM5LDggKzMzOSw4IEBAIHZvaWQgUGx1Z2luRGF0YWJhc2U6OnJlbW92ZShQ
bHVnaW5QYWNrYWdlKiBwYWNrYWdlKQogICAgIE1JTUVUb0V4dGVuc2lvbnNNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gcGFja2FnZS0+bWltZVRvRXh0ZW5zaW9ucygpLmJlZ2luKCk7CiAgICAgTUlN
RVRvRXh0ZW5zaW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcGFja2FnZS0+bWltZVRvRXh0
ZW5zaW9ucygpLmVuZCgpOwogICAgIGZvciAoIDsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAg
IFBsdWdpblBhY2thZ2VCeU5hbWVNYXA6Oml0ZXJhdG9yIHBhY2thZ2VJbk1hcCA9IG1fcHJlZmVy
cmVkUGx1Z2lucy5maW5kKGl0LT5maXJzdCk7Ci0gICAgICAgIGlmIChwYWNrYWdlSW5NYXAgIT0g
bV9wcmVmZXJyZWRQbHVnaW5zLmVuZCgpICYmIHBhY2thZ2VJbk1hcC0+c2Vjb25kID09IHBhY2th
Z2UpCisgICAgICAgIFBsdWdpblBhY2thZ2VCeU5hbWVNYXA6Oml0ZXJhdG9yIHBhY2thZ2VJbk1h
cCA9IG1fcHJlZmVycmVkUGx1Z2lucy5maW5kKGl0LT5rZXkpOworICAgICAgICBpZiAocGFja2Fn
ZUluTWFwICE9IG1fcHJlZmVycmVkUGx1Z2lucy5lbmQoKSAmJiBwYWNrYWdlSW5NYXAtPnZhbHVl
ID09IHBhY2thZ2UpCiAgICAgICAgICAgICBtX3ByZWZlcnJlZFBsdWdpbnMucmVtb3ZlKHBhY2th
Z2VJbk1hcCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1Bs
dWdpbk1haW5UaHJlYWRTY2hlZHVsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVn
aW5NYWluVGhyZWFkU2NoZWR1bGVyLmNwcAppbmRleCA3NTI4Njc2YjEyYWE4YmRhOGYzM2IzMmVm
NDBjYzg3NjU3NjZkMzFhLi4zOWFlNzk0ZTJmYjA5NzIxOWE1MjIzZWJmYmVlZGY2OWI2ZTI4NjJj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbk1haW5UaHJlYWRTY2hl
ZHVsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luTWFpblRocmVhZFNj
aGVkdWxlci5jcHAKQEAgLTQ5LDcgKzQ5LDcgQEAgdm9pZCBQbHVnaW5NYWluVGhyZWFkU2NoZWR1
bGVyOjpzY2hlZHVsZUNhbGwoTlBQIG5wcCwgTWFpblRocmVhZEZ1bmN0aW9uIGZ1bmN0aW8KICAg
ICBpZiAoaXQgPT0gbV9jYWxsUXVldWVNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGl0LT5zZWNvbmQuYXBwZW5kKENhbGwoZnVuY3Rpb24sIHVzZXJEYXRhKSk7CisgICAgaXQtPnZh
bHVlLmFwcGVuZChDYWxsKGZ1bmN0aW9uLCB1c2VyRGF0YSkpOwogCiAgICAgaWYgKCFtX2NhbGxQ
ZW5kaW5nKSB7CiAgICAgICAgIGNhbGxPbk1haW5UaHJlYWQobWFpblRocmVhZENhbGxiYWNrLCB0
aGlzKTsKQEAgLTk3LDcgKzk3LDcgQEAgdm9pZCBQbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyOjpk
aXNwYXRjaENhbGxzKCkKICAgICAgICAgLy8gRW1wdHkgYWxsIHRoZSBxdWV1ZXMgaW4gdGhlIG9y
aWdpbmFsIG1hcAogICAgICAgICBDYWxsUXVldWVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fY2FsbFF1
ZXVlTWFwLmVuZCgpOwogICAgICAgICBmb3IgKENhbGxRdWV1ZU1hcDo6aXRlcmF0b3IgaXQgPSBt
X2NhbGxRdWV1ZU1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBpdC0+
c2Vjb25kLmNsZWFyKCk7CisgICAgICAgICAgICBpdC0+dmFsdWUuY2xlYXIoKTsKICAgICB9CiAK
ICAgICBtX2NhbGxQZW5kaW5nID0gZmFsc2U7CkBAIC0xMDUsNyArMTA1LDcgQEAgdm9pZCBQbHVn
aW5NYWluVGhyZWFkU2NoZWR1bGVyOjpkaXNwYXRjaENhbGxzKCkKIAogICAgIENhbGxRdWV1ZU1h
cDo6aXRlcmF0b3IgZW5kID0gY29weS5lbmQoKTsKICAgICBmb3IgKENhbGxRdWV1ZU1hcDo6aXRl
cmF0b3IgaXQgPSBjb3B5LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgZGlzcGF0
Y2hDYWxsc0ZvclBsdWdpbihpdC0+Zmlyc3QsIGl0LT5zZWNvbmQpOworICAgICAgICBkaXNwYXRj
aENhbGxzRm9yUGx1Z2luKGl0LT5rZXksIGl0LT52YWx1ZSk7CiB9CiAKIHZvaWQgUGx1Z2luTWFp
blRocmVhZFNjaGVkdWxlcjo6bWFpblRocmVhZENhbGxiYWNrKHZvaWQqIGNvbnRleHQpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblN0cmVhbS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbHVnaW5zL1BsdWdpblN0cmVhbS5jcHAKaW5kZXggMDg1YTMxOGI0MjFhN2FkOGZk
ZmM2NzBiNjNkMzFhZjgyZTI2NmU1Mi4uNTE2MjBjOWQyNDMxMjcwZDhjN2NiNjYzY2QyNzUzODVl
NmVhMzM0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5TdHJlYW0u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luU3RyZWFtLmNwcApAQCAtMTQ3
LDkgKzE0Nyw5IEBAIHZvaWQgUGx1Z2luU3RyZWFtOjpzdGFydFN0cmVhbSgpCiAKICAgICAgICAg
SFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9yZXNvdXJjZVJlc3BvbnNlLmh0
dHBIZWFkZXJGaWVsZHMoKS5lbmQoKTsKICAgICAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VSZXNwb25zZS5odHRwSGVhZGVyRmllbGRzKCkuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZChpdC0+Zmlyc3QpOworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPmtleSk7
CiAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChzZXBhcmF0b3IpOwotICAgICAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPnNlY29uZCk7CisgICAgICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZChpdC0+dmFsdWUpOwogICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQoJ1xuJyk7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lu
cy9ibGFja2JlcnJ5L1BsdWdpbkRhdGFCbGFja0JlcnJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
dWdpbnMvYmxhY2tiZXJyeS9QbHVnaW5EYXRhQmxhY2tCZXJyeS5jcHAKaW5kZXggZDkyMGQxZmJk
NWExMTI0NjAzYThjZDk4ZmExMzQzNTZlNzMwNmI1OS4uNDc0NjYxNmRlMzM1ZmE4M2NlYzk2ZDkz
MGUyMGQ4YzI4ZTk0YzNiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ibGFj
a2JlcnJ5L1BsdWdpbkRhdGFCbGFja0JlcnJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbHVn
aW5zL2JsYWNrYmVycnkvUGx1Z2luRGF0YUJsYWNrQmVycnkuY3BwCkBAIC00MSw4ICs0MSw4IEBA
IHZvaWQgUGx1Z2luRGF0YTo6aW5pdFBsdWdpbnMoY29uc3QgUGFnZSopCiAgICAgICAgIE1JTUVU
b0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWltZVRvRGVzY3JpcHRpb25z
LmVuZCgpOwogICAgICAgICBmb3IgKE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAg
ICAgICAgICAgICBNaW1lQ2xhc3NJbmZvIG1pbWU7Ci0gICAgICAgICAgICBtaW1lLnR5cGUgPSBp
dC0+Zmlyc3Q7Ci0gICAgICAgICAgICBtaW1lLmRlc2MgPSBpdC0+c2Vjb25kOworICAgICAgICAg
ICAgbWltZS50eXBlID0gaXQtPmtleTsKKyAgICAgICAgICAgIG1pbWUuZGVzYyA9IGl0LT52YWx1
ZTsKICAgICAgICAgICAgIG1pbWUuZXh0ZW5zaW9ucyA9IHBhY2thZ2UtPm1pbWVUb0V4dGVuc2lv
bnMoKS5nZXQobWltZS50eXBlKTsKICAgICAgICAgICAgIGluZm8ubWltZXMuYXBwZW5kKG1pbWUp
OwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3d4L1BsdWdp
bkRhdGFXeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3d4L1BsdWdpbkRhdGFXeC5jcHAK
aW5kZXggMGViODkwZmVmMDVhMTE1ZWFjZTQyNjM3NjgwYTNkNmExMmY1NzcyOS4uMjc5NTJjNGFl
OGJmYTQ5ZTk4YjExYWU5OTU5ZmM3NTRlNGRiMjNiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGx1Z2lucy93eC9QbHVnaW5EYXRhV3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsdWdp
bnMvd3gvUGx1Z2luRGF0YVd4LmNwcApAQCAtNTEsOCArNTEsOCBAQCB2b2lkIFBsdWdpbkRhdGE6
OmluaXRQbHVnaW5zKGNvbnN0IFBhZ2UqKQogICAgICAgICBmb3IgKE1JTUVUb0Rlc2NyaXB0aW9u
c01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBNaW1lQ2xhc3NJbmZvIG1pbWU7CiAKLSAgICAg
ICAgICAgIG1pbWUudHlwZSA9IGl0LT5maXJzdDsKLSAgICAgICAgICAgIG1pbWUuZGVzYyA9IGl0
LT5zZWNvbmQ7CisgICAgICAgICAgICBtaW1lLnR5cGUgPSBpdC0+a2V5OworICAgICAgICAgICAg
bWltZS5kZXNjID0gaXQtPnZhbHVlOwogICAgICAgICAgICAgbWltZS5leHRlbnNpb25zID0gcGFj
a2FnZS0+bWltZVRvRXh0ZW5zaW9ucygpLmdldChtaW1lLnR5cGUpOwogCiAgICAgICAgICAgICBp
bmZvLm1pbWVzLmFwcGVuZChtaW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9FeGNsdXNpb25TaGFwZUluc2lkZUluZm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5jcHAKaW5kZXggZTBkNmQxOTkzMWU4NGU2YTg0
NjA4NmEzMTVmNTZmZDlmMDZlZWIwMy4uN2I2MGFhOTMxMDNjZGNkYTNjZGMxYjFlZmVlMDJlMWYy
MDU3ODdmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNo
YXBlSW5zaWRlSW5mby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lv
blNoYXBlSW5zaWRlSW5mby5jcHAKQEAgLTYwLDcgKzYwLDcgQEAgRXhjbHVzaW9uU2hhcGVJbnNp
ZGVJbmZvOjp+RXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKCkKIEV4Y2x1c2lvblNoYXBlSW5zaWRl
SW5mbyogRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvOjplbnN1cmVFeGNsdXNpb25TaGFwZUluc2lk
ZUluZm9Gb3JSZW5kZXJCbG9jayhSZW5kZXJCbG9jayogYmxvY2spCiB7CiAgICAgRXhjbHVzaW9u
U2hhcGVJbnNpZGVJbmZvTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gZXhjbHVzaW9uU2hhcGVJbnNp
ZGVJbmZvTWFwKCkuYWRkKGJsb2NrLCBjcmVhdGUoYmxvY2spKTsKLSAgICByZXR1cm4gcmVzdWx0
Lml0ZXJhdG9yLT5zZWNvbmQuZ2V0KCk7CisgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFs
dWUuZ2V0KCk7CiB9CiAKIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyogRXhjbHVzaW9uU2hhcGVJ
bnNpZGVJbmZvOjpleGNsdXNpb25TaGFwZUluc2lkZUluZm9Gb3JSZW5kZXJCbG9jayhjb25zdCBS
ZW5kZXJCbG9jayogYmxvY2spCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
Rmxvd1RocmVhZENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0Zsb3dU
aHJlYWRDb250cm9sbGVyLmNwcAppbmRleCBjYjRiZGIxZjJjNDMyYmY4NTU2ZmMyOTA5MTRkMWZi
ZmQyOWNlZjZhLi5lN2NlYzQwYTI1ZTBjMTNmODY1MTEyNTQ3NjkzZjdjNmEwOWRiMDRjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmxvd1RocmVhZENvbnRyb2xsZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GbG93VGhyZWFkQ29udHJvbGxlci5jcHAK
QEAgLTE1Myw5ICsxNTMsOSBAQCB2b2lkIEZsb3dUaHJlYWRDb250cm9sbGVyOjp1bnJlZ2lzdGVy
TmFtZWRGbG93Q29udGVudE5vZGUoTm9kZSogY29udGVudE5vZGUpCiAgICAgQVNTRVJUKGNvbnRl
bnROb2RlICYmIGNvbnRlbnROb2RlLT5pc0VsZW1lbnROb2RlKCkpOwogICAgIEhhc2hNYXA8Tm9k
ZSosIFJlbmRlck5hbWVkRmxvd1RocmVhZCo+OjppdGVyYXRvciBpdCA9IG1fbWFwTmFtZWRGbG93
Q29udGVudE5vZGVzLmZpbmQoY29udGVudE5vZGUpOwogICAgIEFTU0VSVChpdCAhPSBtX21hcE5h
bWVkRmxvd0NvbnRlbnROb2Rlcy5lbmQoKSk7Ci0gICAgQVNTRVJUKGl0LT5zZWNvbmQpOwotICAg
IEFTU0VSVChpdC0+c2Vjb25kLT5oYXNDb250ZW50Tm9kZShjb250ZW50Tm9kZSkpOwotICAgIGl0
LT5zZWNvbmQtPnVucmVnaXN0ZXJOYW1lZEZsb3dDb250ZW50Tm9kZShjb250ZW50Tm9kZSk7Cisg
ICAgQVNTRVJUKGl0LT52YWx1ZSk7CisgICAgQVNTRVJUKGl0LT52YWx1ZS0+aGFzQ29udGVudE5v
ZGUoY29udGVudE5vZGUpKTsKKyAgICBpdC0+dmFsdWUtPnVucmVnaXN0ZXJOYW1lZEZsb3dDb250
ZW50Tm9kZShjb250ZW50Tm9kZSk7CiAgICAgbV9tYXBOYW1lZEZsb3dDb250ZW50Tm9kZXMucmVt
b3ZlKGNvbnRlbnROb2RlKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0lubGluZUZsb3dCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZs
b3dCb3guY3BwCmluZGV4IDlhZDBmY2ZhMTJjODMzYjBhMWQzYzc3NGM5Zjg3NTQzZjc1ZDRjMTgu
LjU5MTJjNjhiMTY0OTFhNTU4NzQ1YmI1ODg0MDE4ZDI2NjI1MjZlOTAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAKQEAgLTQ2MCw3ICs0NjAsNyBAQCBib29s
IElubGluZUZsb3dCb3g6OnJlcXVpcmVzSWRlb2dyYXBoaWNCYXNlbGluZShjb25zdCBHbHlwaE92
ZXJmbG93QW5kRmFsbGJhY2tGbwogICAgICAgICAgICAgY29uc3QgVmVjdG9yPGNvbnN0IFNpbXBs
ZUZvbnREYXRhKj4qIHVzZWRGb250cyA9IDA7CiAgICAgICAgICAgICBpZiAoY3Vyci0+aXNJbmxp
bmVUZXh0Qm94KCkpIHsKICAgICAgICAgICAgICAgICBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tG
b250c01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSB0ZXh0Qm94RGF0YU1hcC5maW5kKHRvSW5saW5l
VGV4dEJveChjdXJyKSk7Ci0gICAgICAgICAgICAgICAgdXNlZEZvbnRzID0gaXQgPT0gdGV4dEJv
eERhdGFNYXAuZW5kKCkgPyAwIDogJml0LT5zZWNvbmQuZmlyc3Q7CisgICAgICAgICAgICAgICAg
dXNlZEZvbnRzID0gaXQgPT0gdGV4dEJveERhdGFNYXAuZW5kKCkgPyAwIDogJml0LT52YWx1ZS5m
aXJzdDsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKHVzZWRGb250cykgewpAQCAt
ODI0LDcgKzgyNCw3IEBAIGlubGluZSB2b2lkIElubGluZUZsb3dCb3g6OmFkZFRleHRCb3hWaXN1
YWxPdmVyZmxvdyhJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94LCBHbHlwCiAgICAgUmVuZGVyU3R5bGUq
IHN0eWxlID0gdGV4dEJveC0+cmVuZGVyZXIoKS0+c3R5bGUoaXNGaXJzdExpbmVTdHlsZSgpKTsK
ICAgICAKICAgICBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcDo6aXRlcmF0b3IgaXQg
PSB0ZXh0Qm94RGF0YU1hcC5maW5kKHRleHRCb3gpOwotICAgIEdseXBoT3ZlcmZsb3cqIGdseXBo
T3ZlcmZsb3cgPSBpdCA9PSB0ZXh0Qm94RGF0YU1hcC5lbmQoKSA/IDAgOiAmaXQtPnNlY29uZC5z
ZWNvbmQ7CisgICAgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdyA9IGl0ID09IHRleHRCb3hE
YXRhTWFwLmVuZCgpID8gMCA6ICZpdC0+dmFsdWUuc2Vjb25kOwogICAgIGJvb2wgaXNGbGlwcGVk
TGluZSA9IHN0eWxlLT5pc0ZsaXBwZWRMaW5lc1dyaXRpbmdNb2RlKCk7CiAKICAgICBpbnQgdG9w
R2x5cGhFZGdlID0gZ2x5cGhPdmVyZmxvdyA/IChpc0ZsaXBwZWRMaW5lID8gZ2x5cGhPdmVyZmxv
dy0+Ym90dG9tIDogZ2x5cGhPdmVyZmxvdy0+dG9wKSA6IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmNwcAppbmRleCBhODFmMzY5NTJkMzJlMjM3NTJmZWM1YzUxYjIyZmU3
ZjFiYjYyMmJkLi44OWM0YzA0ZWQ2MmEzNGMwZjFjMThhMzE1YmFhYjU4MjBhODEzOTQ2IDEwMDc1
NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKQEAgLTQ0MjksNyArNDQyOSw3
IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNsZWFyRmxvYXRzKCkKIAogICAgICAgICBSZW5kZXJlclRv
RmxvYXRJbmZvTWFwOjppdGVyYXRvciBlbmQgPSBmbG9hdE1hcC5lbmQoKTsKICAgICAgICAgZm9y
IChSZW5kZXJlclRvRmxvYXRJbmZvTWFwOjppdGVyYXRvciBpdCA9IGZsb2F0TWFwLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5n
T2JqZWN0ID0gKCppdCkuc2Vjb25kOworICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGZsb2F0
aW5nT2JqZWN0ID0gKCppdCkudmFsdWU7CiAgICAgICAgICAgICBpZiAoIWZsb2F0aW5nT2JqZWN0
LT5pc0Rlc2NlbmRhbnQoKSkgewogICAgICAgICAgICAgICAgIGNoYW5nZUxvZ2ljYWxUb3AgPSAw
OwogICAgICAgICAgICAgICAgIGNoYW5nZUxvZ2ljYWxCb3R0b20gPSBtYXgoY2hhbmdlTG9naWNh
bEJvdHRvbSwgbG9naWNhbEJvdHRvbUZvckZsb2F0KGZsb2F0aW5nT2JqZWN0KSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCmluZGV4
IDg0NGE4NTg1MjZhOGE2MjgzMTcwZWFhOWM4YzQ3ODkxZjJlMzBjZGQuLmY3YTFjZTdmNDFlY2Vi
NmJmNmNlMDRmY2ExYjU3ZWI4MjM3ZjNlOWEgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCkBAIC03MTEsMTQgKzcxMSwxNCBAQCBz
dGF0aWMgaW5saW5lIHZvaWQgc2V0TG9naWNhbFdpZHRoRm9yVGV4dFJ1bihSb290SW5saW5lQm94
KiBsaW5lQm94LCBCaWRpUnVuKiBydQogICAgIGlmICghZmFsbGJhY2tGb250cy5pc0VtcHR5KCkp
IHsKICAgICAgICAgQVNTRVJUKHJ1bi0+bV9ib3gtPmlzVGV4dCgpKTsKICAgICAgICAgR2x5cGhP
dmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXA6Oml0ZXJhdG9yIGl0ID0gdGV4dEJveERhdGFNYXAu
YWRkKHRvSW5saW5lVGV4dEJveChydW4tPm1fYm94KSwgbWFrZV9wYWlyKFZlY3Rvcjxjb25zdCBT
aW1wbGVGb250RGF0YSo+KCksIEdseXBoT3ZlcmZsb3coKSkpLml0ZXJhdG9yOwotICAgICAgICBB
U1NFUlQoaXQtPnNlY29uZC5maXJzdC5pc0VtcHR5KCkpOwotICAgICAgICBjb3B5VG9WZWN0b3Io
ZmFsbGJhY2tGb250cywgaXQtPnNlY29uZC5maXJzdCk7CisgICAgICAgIEFTU0VSVChpdC0+dmFs
dWUuZmlyc3QuaXNFbXB0eSgpKTsKKyAgICAgICAgY29weVRvVmVjdG9yKGZhbGxiYWNrRm9udHMs
IGl0LT52YWx1ZS5maXJzdCk7CiAgICAgICAgIHJ1bi0+bV9ib3gtPnBhcmVudCgpLT5jbGVhckRl
c2NlbmRhbnRzSGF2ZVNhbWVMaW5lSGVpZ2h0QW5kQmFzZWxpbmUoKTsKICAgICB9CiAgICAgaWYg
KChnbHlwaE92ZXJmbG93LnRvcCB8fCBnbHlwaE92ZXJmbG93LmJvdHRvbSB8fCBnbHlwaE92ZXJm
bG93LmxlZnQgfHwgZ2x5cGhPdmVyZmxvdy5yaWdodCkpIHsKICAgICAgICAgQVNTRVJUKHJ1bi0+
bV9ib3gtPmlzVGV4dCgpKTsKICAgICAgICAgR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNN
YXA6Oml0ZXJhdG9yIGl0ID0gdGV4dEJveERhdGFNYXAuYWRkKHRvSW5saW5lVGV4dEJveChydW4t
Pm1fYm94KSwgbWFrZV9wYWlyKFZlY3Rvcjxjb25zdCBTaW1wbGVGb250RGF0YSo+KCksIEdseXBo
T3ZlcmZsb3coKSkpLml0ZXJhdG9yOwotICAgICAgICBpdC0+c2Vjb25kLnNlY29uZCA9IGdseXBo
T3ZlcmZsb3c7CisgICAgICAgIGl0LT52YWx1ZS5zZWNvbmQgPSBnbHlwaE92ZXJmbG93OwogICAg
ICAgICBydW4tPm1fYm94LT5jbGVhcktub3duVG9IYXZlTm9PdmVyZmxvdygpOwogICAgIH0KIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVj
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3Bw
CmluZGV4IDY0ZDkwYWRiMTU1NjliMTdhY2VmNDczMmI0ODc0N2ZiOWMyZjM2NDguLjM1MDJmNDdh
NGZjZmZjNDNiOWE1MDhkY2U0MjQwYjMxMWNhMmY4MDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcApAQCAtMTMzLDcgKzEzMyw3IEBA
IHZvaWQgSW1hZ2VRdWFsaXR5Q29udHJvbGxlcjo6aGlnaFF1YWxpdHlSZXBhaW50VGltZXJGaXJl
ZChUaW1lcjxJbWFnZVF1YWxpdHlDb250CiAgICAgaWYgKG1fYW5pbWF0ZWRSZXNpemVJc0FjdGl2
ZSkgewogICAgICAgICBtX2FuaW1hdGVkUmVzaXplSXNBY3RpdmUgPSBmYWxzZTsKICAgICAgICAg
Zm9yIChPYmplY3RMYXllclNpemVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9vYmplY3RMYXllclNpemVN
YXAuYmVnaW4oKTsgaXQgIT0gbV9vYmplY3RMYXllclNpemVNYXAuZW5kKCk7ICsraXQpCi0gICAg
ICAgICAgICBpdC0+Zmlyc3QtPnJlcGFpbnQoKTsKKyAgICAgICAgICAgIGl0LT5rZXktPnJlcGFp
bnQoKTsKICAgICB9CiB9CiAKQEAgLTE1OCwxNCArMTU4LDE0IEBAIGJvb2wgSW1hZ2VRdWFsaXR5
Q29udHJvbGxlcjo6c2hvdWxkUGFpbnRBdExvd1F1YWxpdHkoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBSCiAKICAgICAvLyBMb29rIG91cnNlbHZlcyB1cCBpbiB0aGUgaGFzaHRhYmxlcy4KICAg
ICBPYmplY3RMYXllclNpemVNYXA6Oml0ZXJhdG9yIGkgPSBtX29iamVjdExheWVyU2l6ZU1hcC5m
aW5kKG9iamVjdCk7Ci0gICAgTGF5ZXJTaXplTWFwKiBpbm5lck1hcCA9IGkgIT0gbV9vYmplY3RM
YXllclNpemVNYXAuZW5kKCkgPyAmaS0+c2Vjb25kIDogMDsKKyAgICBMYXllclNpemVNYXAqIGlu
bmVyTWFwID0gaSAhPSBtX29iamVjdExheWVyU2l6ZU1hcC5lbmQoKSA/ICZpLT52YWx1ZSA6IDA7
CiAgICAgTGF5b3V0U2l6ZSBvbGRTaXplOwogICAgIGJvb2wgaXNGaXJzdFJlc2l6ZSA9IHRydWU7
CiAgICAgaWYgKGlubmVyTWFwKSB7CiAgICAgICAgIExheWVyU2l6ZU1hcDo6aXRlcmF0b3IgaiA9
IGlubmVyTWFwLT5maW5kKGxheWVyKTsKICAgICAgICAgaWYgKGogIT0gaW5uZXJNYXAtPmVuZCgp
KSB7CiAgICAgICAgICAgICBpc0ZpcnN0UmVzaXplID0gZmFsc2U7Ci0gICAgICAgICAgICBvbGRT
aXplID0gai0+c2Vjb25kOworICAgICAgICAgICAgb2xkU2l6ZSA9IGotPnZhbHVlOwogICAgICAg
ICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Q291bnRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ291bnRlci5jcHAK
aW5kZXggZTM0OTZiMTM2NTYyYTFhMWM3YjAyZWUxN2I3YzEwYzQ0YjFhNGMxMy4uMjRjODYzMzA0
MjEyMmE4YzUwZjNiYWQ3MDcxMmM1NDk5MzI5ZTc5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJDb3VudGVyLmNwcApAQCAtNTY4LDEwICs1NjgsMTAgQEAgdm9pZCBSZW5kZXJD
b3VudGVyOjpkZXN0cm95Q291bnRlck5vZGVzKFJlbmRlck9iamVjdCogb3duZXIpCiAgICAgQ291
bnRlck1hcHM6Oml0ZXJhdG9yIG1hcHNJdGVyYXRvciA9IG1hcHMuZmluZChvd25lcik7CiAgICAg
aWYgKG1hcHNJdGVyYXRvciA9PSBtYXBzLmVuZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgQ291
bnRlck1hcCogbWFwID0gbWFwc0l0ZXJhdG9yLT5zZWNvbmQuZ2V0KCk7CisgICAgQ291bnRlck1h
cCogbWFwID0gbWFwc0l0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKICAgICBDb3VudGVyTWFwOjpjb25z
dF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwogICAgIGZvciAoQ291bnRlck1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBk
ZXN0cm95Q291bnRlck5vZGVXaXRob3V0TWFwUmVtb3ZhbChpdC0+Zmlyc3QsIGl0LT5zZWNvbmQu
Z2V0KCkpOworICAgICAgICBkZXN0cm95Q291bnRlck5vZGVXaXRob3V0TWFwUmVtb3ZhbChpdC0+
a2V5LCBpdC0+dmFsdWUuZ2V0KCkpOwogICAgIH0KICAgICBtYXBzLnJlbW92ZShtYXBzSXRlcmF0
b3IpOwogICAgIG93bmVyLT5zZXRIYXNDb3VudGVyTm9kZU1hcChmYWxzZSk7CkBAIC01ODUsNyAr
NTg1LDcgQEAgdm9pZCBSZW5kZXJDb3VudGVyOjpkZXN0cm95Q291bnRlck5vZGUoUmVuZGVyT2Jq
ZWN0KiBvd25lciwgY29uc3QgQXRvbWljU3RyaW5nJgogICAgIENvdW50ZXJNYXA6Oml0ZXJhdG9y
IG1hcEl0ZXJhdG9yID0gbWFwLT5maW5kKGlkZW50aWZpZXIpOwogICAgIGlmIChtYXBJdGVyYXRv
ciA9PSBtYXAtPmVuZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgZGVzdHJveUNvdW50ZXJOb2Rl
V2l0aG91dE1hcFJlbW92YWwoaWRlbnRpZmllciwgbWFwSXRlcmF0b3ItPnNlY29uZC5nZXQoKSk7
CisgICAgZGVzdHJveUNvdW50ZXJOb2RlV2l0aG91dE1hcFJlbW92YWwoaWRlbnRpZmllciwgbWFw
SXRlcmF0b3ItPnZhbHVlLmdldCgpKTsKICAgICBtYXAtPnJlbW92ZShtYXBJdGVyYXRvcik7CiAg
ICAgLy8gV2UgZG8gbm90IGRlbGV0ZSAibWFwIiBoZXJlIGV2ZW4gaWYgZW1wdHkgYmVjYXVzZSB3
ZSBleHBlY3QgdG8gcmV1c2UKICAgICAvLyBpdCBzb29uLiBJbiBvcmRlciBmb3IgYSByZW5kZXJl
ciB0byBsb3NlIGFsbCBpdHMgY291bnRlcnMgcGVybWFuZW50bHksCkBAIC02MjUsMjIgKzYyNSwy
MiBAQCBzdGF0aWMgdm9pZCB1cGRhdGVDb3VudGVycyhSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQog
ICAgIENvdW50ZXJEaXJlY3RpdmVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGRpcmVjdGl2ZU1h
cC0+ZW5kKCk7CiAgICAgaWYgKCFyZW5kZXJlci0+aGFzQ291bnRlck5vZGVNYXAoKSkgewogICAg
ICAgICBmb3IgKENvdW50ZXJEaXJlY3RpdmVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZGlyZWN0
aXZlTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBtYWtlQ291bnRl
ck5vZGUocmVuZGVyZXIsIGl0LT5maXJzdCwgZmFsc2UpOworICAgICAgICAgICAgbWFrZUNvdW50
ZXJOb2RlKHJlbmRlcmVyLCBpdC0+a2V5LCBmYWxzZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgQ291bnRlck1hcCogY291bnRlck1hcCA9IGNvdW50ZXJNYXBzKCkuZ2V0KHJlbmRlcmVy
KTsKICAgICBBU1NFUlQoY291bnRlck1hcCk7CiAgICAgZm9yIChDb3VudGVyRGlyZWN0aXZlTWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IGRpcmVjdGl2ZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7Ci0gICAgICAgIFJlZlB0cjxDb3VudGVyTm9kZT4gbm9kZSA9IGNvdW50ZXJNYXAtPmdl
dChpdC0+Zmlyc3QpOworICAgICAgICBSZWZQdHI8Q291bnRlck5vZGU+IG5vZGUgPSBjb3VudGVy
TWFwLT5nZXQoaXQtPmtleSk7CiAgICAgICAgIGlmICghbm9kZSkgewotICAgICAgICAgICAgbWFr
ZUNvdW50ZXJOb2RlKHJlbmRlcmVyLCBpdC0+Zmlyc3QsIGZhbHNlKTsKKyAgICAgICAgICAgIG1h
a2VDb3VudGVyTm9kZShyZW5kZXJlciwgaXQtPmtleSwgZmFsc2UpOwogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIH0KICAgICAgICAgUmVmUHRyPENvdW50ZXJOb2RlPiBuZXdQYXJlbnQg
PSAwOwogICAgICAgICBSZWZQdHI8Q291bnRlck5vZGU+IG5ld1ByZXZpb3VzU2libGluZyA9IDA7
CiAgICAgICAgIAotICAgICAgICBmaW5kUGxhY2VGb3JDb3VudGVyKHJlbmRlcmVyLCBpdC0+Zmly
c3QsIG5vZGUtPmhhc1Jlc2V0VHlwZSgpLCBuZXdQYXJlbnQsIG5ld1ByZXZpb3VzU2libGluZyk7
Ci0gICAgICAgIGlmIChub2RlICE9IGNvdW50ZXJNYXAtPmdldChpdC0+Zmlyc3QpKQorICAgICAg
ICBmaW5kUGxhY2VGb3JDb3VudGVyKHJlbmRlcmVyLCBpdC0+a2V5LCBub2RlLT5oYXNSZXNldFR5
cGUoKSwgbmV3UGFyZW50LCBuZXdQcmV2aW91c1NpYmxpbmcpOworICAgICAgICBpZiAobm9kZSAh
PSBjb3VudGVyTWFwLT5nZXQoaXQtPmtleSkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgQ291bnRlck5vZGUqIHBhcmVudCA9IG5vZGUtPnBhcmVudCgpOwogICAgICAgICBpZiAobmV3
UGFyZW50ID09IHBhcmVudCAmJiBuZXdQcmV2aW91c1NpYmxpbmcgPT0gbm9kZS0+cHJldmlvdXNT
aWJsaW5nKCkpCkBAIC02NDgsNyArNjQ4LDcgQEAgc3RhdGljIHZvaWQgdXBkYXRlQ291bnRlcnMo
UmVuZGVyT2JqZWN0KiByZW5kZXJlcikKICAgICAgICAgaWYgKHBhcmVudCkKICAgICAgICAgICAg
IHBhcmVudC0+cmVtb3ZlQ2hpbGQobm9kZS5nZXQoKSk7CiAgICAgICAgIGlmIChuZXdQYXJlbnQp
Ci0gICAgICAgICAgICBuZXdQYXJlbnQtPmluc2VydEFmdGVyKG5vZGUuZ2V0KCksIG5ld1ByZXZp
b3VzU2libGluZy5nZXQoKSwgaXQtPmZpcnN0KTsKKyAgICAgICAgICAgIG5ld1BhcmVudC0+aW5z
ZXJ0QWZ0ZXIobm9kZS5nZXQoKSwgbmV3UHJldmlvdXNTaWJsaW5nLmdldCgpLCBpdC0+a2V5KTsK
ICAgICB9CiB9CiAKQEAgLTY4MCwyMSArNjgwLDIxIEBAIHZvaWQgUmVuZGVyQ291bnRlcjo6cmVu
ZGVyZXJTdHlsZUNoYW5nZWQoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5
CiAgICAgICAgICAgICBDb3VudGVyRGlyZWN0aXZlTWFwOjpjb25zdF9pdGVyYXRvciBuZXdNYXBF
bmQgPSBuZXdDb3VudGVyRGlyZWN0aXZlcy0+ZW5kKCk7CiAgICAgICAgICAgICBDb3VudGVyRGly
ZWN0aXZlTWFwOjpjb25zdF9pdGVyYXRvciBvbGRNYXBFbmQgPSBvbGRDb3VudGVyRGlyZWN0aXZl
cy0+ZW5kKCk7CiAgICAgICAgICAgICBmb3IgKENvdW50ZXJEaXJlY3RpdmVNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbmV3Q291bnRlckRpcmVjdGl2ZXMtPmJlZ2luKCk7IGl0ICE9IG5ld01hcEVu
ZDsgKytpdCkgewotICAgICAgICAgICAgICAgIENvdW50ZXJEaXJlY3RpdmVNYXA6OmNvbnN0X2l0
ZXJhdG9yIG9sZE1hcEl0ID0gb2xkQ291bnRlckRpcmVjdGl2ZXMtPmZpbmQoaXQtPmZpcnN0KTsK
KyAgICAgICAgICAgICAgICBDb3VudGVyRGlyZWN0aXZlTWFwOjpjb25zdF9pdGVyYXRvciBvbGRN
YXBJdCA9IG9sZENvdW50ZXJEaXJlY3RpdmVzLT5maW5kKGl0LT5rZXkpOwogICAgICAgICAgICAg
ICAgIGlmIChvbGRNYXBJdCAhPSBvbGRNYXBFbmQpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KG9sZE1hcEl0LT5zZWNvbmQgPT0gaXQtPnNlY29uZCkKKyAgICAgICAgICAgICAgICAgICAgaWYg
KG9sZE1hcEl0LT52YWx1ZSA9PSBpdC0+dmFsdWUpCiAgICAgICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgUmVuZGVyQ291bnRlcjo6ZGVzdHJveUNvdW50
ZXJOb2RlKHJlbmRlcmVyLCBpdC0+Zmlyc3QpOworICAgICAgICAgICAgICAgICAgICBSZW5kZXJD
b3VudGVyOjpkZXN0cm95Q291bnRlck5vZGUocmVuZGVyZXIsIGl0LT5rZXkpOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAvLyBXZSBtdXN0IGNyZWF0ZSB0aGlzIG5vZGUgaGVy
ZSwgYmVjYXVzZSB0aGUgY2hhbmdlZCBub2RlIG1heSBiZSBhIG5vZGUgd2l0aCBubyBkaXNwbGF5
IHN1Y2ggYXMKICAgICAgICAgICAgICAgICAvLyBhcyB0aG9zZSBjcmVhdGVkIGJ5IHRoZSBpbmNy
ZW1lbnQgb3IgcmVzZXQgZGlyZWN0aXZlcyBhbmQgdGhlIHJlLWxheW91dCB0aGF0IHdpbGwgaGFw
cGVuIHdpbGwKICAgICAgICAgICAgICAgICAvLyBub3QgY2F0Y2ggdGhlIGNoYW5nZSBpZiB0aGUg
bm9kZSBoYWQgbm8gY2hpbGRyZW4uCi0gICAgICAgICAgICAgICAgbWFrZUNvdW50ZXJOb2RlKHJl
bmRlcmVyLCBpdC0+Zmlyc3QsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBtYWtlQ291bnRlck5v
ZGUocmVuZGVyZXIsIGl0LT5rZXksIGZhbHNlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IC8vIERlc3Ryb3lpbmcgb2xkIGNvdW50ZXJzIHRoYXQgZG8gbm90IGV4aXN0IGluIHRoZSBuZXcg
Y291bnRlckRpcmVjdGl2ZSBtYXAuCiAgICAgICAgICAgICBmb3IgKENvdW50ZXJEaXJlY3RpdmVN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gb2xkQ291bnRlckRpcmVjdGl2ZXMtPmJlZ2luKCk7IGl0
ICE9b2xkTWFwRW5kOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFuZXdDb3VudGVyRGly
ZWN0aXZlcy0+Y29udGFpbnMoaXQtPmZpcnN0KSkKLSAgICAgICAgICAgICAgICAgICAgUmVuZGVy
Q291bnRlcjo6ZGVzdHJveUNvdW50ZXJOb2RlKHJlbmRlcmVyLCBpdC0+Zmlyc3QpOworICAgICAg
ICAgICAgICAgIGlmICghbmV3Q291bnRlckRpcmVjdGl2ZXMtPmNvbnRhaW5zKGl0LT5rZXkpKQor
ICAgICAgICAgICAgICAgICAgICBSZW5kZXJDb3VudGVyOjpkZXN0cm95Q291bnRlck5vZGUocmVu
ZGVyZXIsIGl0LT5rZXkpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgaWYgKHJlbmRlcmVyLT5oYXNDb3VudGVyTm9kZU1hcCgpKQpAQCAtNzA2LDcgKzcwNiw3
IEBAIHZvaWQgUmVuZGVyQ291bnRlcjo6cmVuZGVyZXJTdHlsZUNoYW5nZWQoUmVuZGVyT2JqZWN0
KiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5CiAgICAgICAgICAgICAvLyBXZSBtdXN0IGNyZWF0
ZSB0aGlzIG5vZGUgaGVyZSwgYmVjYXVzZSB0aGUgYWRkZWQgbm9kZSBtYXkgYmUgYSBub2RlIHdp
dGggbm8gZGlzcGxheSBzdWNoIGFzCiAgICAgICAgICAgICAvLyBhcyB0aG9zZSBjcmVhdGVkIGJ5
IHRoZSBpbmNyZW1lbnQgb3IgcmVzZXQgZGlyZWN0aXZlcyBhbmQgdGhlIHJlLWxheW91dCB0aGF0
IHdpbGwgaGFwcGVuIHdpbGwKICAgICAgICAgICAgIC8vIG5vdCBjYXRjaCB0aGUgY2hhbmdlIGlm
IHRoZSBub2RlIGhhZCBubyBjaGlsZHJlbi4KLSAgICAgICAgICAgIG1ha2VDb3VudGVyTm9kZShy
ZW5kZXJlciwgaXQtPmZpcnN0LCBmYWxzZSk7CisgICAgICAgICAgICBtYWtlQ291bnRlck5vZGUo
cmVuZGVyZXIsIGl0LT5rZXksIGZhbHNlKTsKICAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcAppbmRleCBlOTQyMjQyYWZj
MzE2M2MyN2JkOTMyNmI2Yjk1ZDIxYjI4MThjNTg5Li41MTIyOGRiY2I4ODgyOWQ0YjZhYTk2YTJj
OTFiOWZiZDU0Mjc4ZTNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRmxvd1RocmVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZs
b3dUaHJlYWQuY3BwCkBAIC01NzksNyArNTc5LDcgQEAgdm9pZCBSZW5kZXJGbG93VGhyZWFkOjpz
ZXRSZWdpb25SYW5nZUZvckJveChjb25zdCBSZW5kZXJCb3gqIGJveCwgTGF5b3V0VW5pdCBvZmYK
ICAgICB9CiAKICAgICAvLyBJZiBub3RoaW5nIGNoYW5nZWQsIGp1c3QgYmFpbC4KLSAgICBSZW5k
ZXJSZWdpb25SYW5nZSYgcmFuZ2UgPSBpdC0+c2Vjb25kOworICAgIFJlbmRlclJlZ2lvblJhbmdl
JiByYW5nZSA9IGl0LT52YWx1ZTsKICAgICBpZiAocmFuZ2Uuc3RhcnRSZWdpb24oKSA9PSBzdGFy
dFJlZ2lvbiAmJiByYW5nZS5lbmRSZWdpb24oKSA9PSBlbmRSZWdpb24pCiAgICAgICAgIHJldHVy
bjsKIApAQCAtNjA5LDcgKzYwOSw3IEBAIHZvaWQgUmVuZGVyRmxvd1RocmVhZDo6Z2V0UmVnaW9u
UmFuZ2VGb3JCb3goY29uc3QgUmVuZGVyQm94KiBib3gsIFJlbmRlclJlZ2lvbiomCiAgICAgaWYg
KGl0ID09IG1fcmVnaW9uUmFuZ2VNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNv
bnN0IFJlbmRlclJlZ2lvblJhbmdlJiByYW5nZSA9IGl0LT5zZWNvbmQ7CisgICAgY29uc3QgUmVu
ZGVyUmVnaW9uUmFuZ2UmIHJhbmdlID0gaXQtPnZhbHVlOwogICAgIHN0YXJ0UmVnaW9uID0gcmFu
Z2Uuc3RhcnRSZWdpb24oKTsKICAgICBlbmRSZWdpb24gPSByYW5nZS5lbmRSZWdpb24oKTsKICAg
ICBBU1NFUlQobV9yZWdpb25MaXN0LmNvbnRhaW5zKHN0YXJ0UmVnaW9uKSAmJiBtX3JlZ2lvbkxp
c3QuY29udGFpbnMoZW5kUmVnaW9uKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyLmNwcAppbmRleCA3NmM0NWQyZTk3MTVhNTQ3ZmIyNDdmZmRiNTQ5OTA5OWNiZDIwOTM0Li44
YTQwNTQ3ZjBiMmE2MDcwMzM1Y2Y3ZTk4ZWQ1NjFkMWFkYzg2YTBkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTI4ODksNyArMjg4OSw3IEBAIHZvaWQgUmVu
ZGVyTGF5ZXI6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgTGF5b3V0UmVj
dCYgZGFtYWdlUmVjdCwKICAgICBwYWludExheWVyKHRoaXMsIGNvbnRleHQsIGVuY2xvc2luZ0lu
dFJlY3QoZGFtYWdlUmVjdCksIExheW91dFNpemUoKSwgcGFpbnRCZWhhdmlvciwgcGFpbnRpbmdS
b290LCByZWdpb24sICZvdmVybGFwVGVzdFJlcXVlc3RzLCBwYWludEZsYWdzKTsKICAgICBPdmVy
bGFwVGVzdFJlcXVlc3RNYXA6Oml0ZXJhdG9yIGVuZCA9IG92ZXJsYXBUZXN0UmVxdWVzdHMuZW5k
KCk7CiAgICAgZm9yIChPdmVybGFwVGVzdFJlcXVlc3RNYXA6Oml0ZXJhdG9yIGl0ID0gb3Zlcmxh
cFRlc3RSZXF1ZXN0cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5maXJz
dC0+c2V0T3ZlcmxhcFRlc3RSZXN1bHQoZmFsc2UpOworICAgICAgICBpdC0+a2V5LT5zZXRPdmVy
bGFwVGVzdFJlc3VsdChmYWxzZSk7CiB9CiAKIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50T3Zlcmxh
eVNjcm9sbGJhcnMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBk
YW1hZ2VSZWN0LCBQYWludEJlaGF2aW9yIHBhaW50QmVoYXZpb3IsIFJlbmRlck9iamVjdCogcGFp
bnRpbmdSb290KQpAQCAtMjk1OCwxMSArMjk1OCwxMSBAQCBzdGF0aWMgdm9pZCBwZXJmb3JtT3Zl
cmxhcFRlc3RzKE92ZXJsYXBUZXN0UmVxdWVzdE1hcCYgb3ZlcmxhcFRlc3RSZXF1ZXN0cywgY29u
cwogICAgIE92ZXJsYXBUZXN0UmVxdWVzdE1hcDo6aXRlcmF0b3IgZW5kID0gb3ZlcmxhcFRlc3RS
ZXF1ZXN0cy5lbmQoKTsKICAgICBMYXlvdXRSZWN0IGJvdW5kaW5nQm94ID0gbGF5ZXItPmJvdW5k
aW5nQm94KHJvb3RMYXllcik7CiAgICAgZm9yIChPdmVybGFwVGVzdFJlcXVlc3RNYXA6Oml0ZXJh
dG9yIGl0ID0gb3ZlcmxhcFRlc3RSZXF1ZXN0cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
LSAgICAgICAgaWYgKCFib3VuZGluZ0JveC5pbnRlcnNlY3RzKGl0LT5zZWNvbmQpKQorICAgICAg
ICBpZiAoIWJvdW5kaW5nQm94LmludGVyc2VjdHMoaXQtPnZhbHVlKSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwogCi0gICAgICAgIGl0LT5maXJzdC0+c2V0T3ZlcmxhcFRlc3RSZXN1bHQodHJ1ZSk7
Ci0gICAgICAgIG92ZXJsYXBwZWRSZXF1ZXN0Q2xpZW50cy5hcHBlbmQoaXQtPmZpcnN0KTsKKyAg
ICAgICAgaXQtPmtleS0+c2V0T3ZlcmxhcFRlc3RSZXN1bHQodHJ1ZSk7CisgICAgICAgIG92ZXJs
YXBwZWRSZXF1ZXN0Q2xpZW50cy5hcHBlbmQoaXQtPmtleSk7CiAgICAgfQogICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgb3ZlcmxhcHBlZFJlcXVlc3RDbGllbnRzLnNpemUoKTsgKytpKQogICAg
ICAgICBvdmVybGFwVGVzdFJlcXVlc3RzLnJlbW92ZShvdmVybGFwcGVkUmVxdWVzdENsaWVudHNb
aV0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmls
dGVySW5mby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJJ
bmZvLmNwcAppbmRleCBhY2JmMDdkOWQxYmZkMjAyMWM1NTQxNTI2NmRkNDQzMDUwNTU1YTdkLi5j
YjRjNWQ2NjExMGM5MjQxMmYzNTBlYTg5OTMyNzJjZTYyY2Q3ZTA4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvLmNwcApAQCAtNTYsNyAr
NTYsNyBAQCBSZW5kZXJMYXllckZpbHRlckluZm8qIFJlbmRlckxheWVyRmlsdGVySW5mbzo6Zmls
dGVySW5mb0ZvclJlbmRlckxheWVyKGNvbnN0IFJlbgogICAgIGlmICghc19maWx0ZXJNYXApCiAg
ICAgICAgIHJldHVybiAwOwogICAgIFJlbmRlckxheWVyRmlsdGVySW5mb01hcDo6aXRlcmF0b3Ig
aXRlciA9IHNfZmlsdGVyTWFwLT5maW5kKGxheWVyKTsKLSAgICByZXR1cm4gKGl0ZXIgIT0gc19m
aWx0ZXJNYXAtPmVuZCgpKSA/IGl0ZXItPnNlY29uZCA6IDA7CisgICAgcmV0dXJuIChpdGVyICE9
IHNfZmlsdGVyTWFwLT5lbmQoKSkgPyBpdGVyLT52YWx1ZSA6IDA7CiB9CiAKIFJlbmRlckxheWVy
RmlsdGVySW5mbyogUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvOjpjcmVhdGVGaWx0ZXJJbmZvRm9yUmVu
ZGVyTGF5ZXJJZk5lZWRlZChSZW5kZXJMYXllciogbGF5ZXIpCkBAIC02Nyw3ICs2Nyw3IEBAIFJl
bmRlckxheWVyRmlsdGVySW5mbyogUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvOjpjcmVhdGVGaWx0ZXJJ
bmZvRm9yUmVuZGVyTGF5ZXJJZk5lCiAgICAgUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvTWFwOjppdGVy
YXRvciBpdGVyID0gc19maWx0ZXJNYXAtPmZpbmQobGF5ZXIpOwogICAgIGlmIChpdGVyICE9IHNf
ZmlsdGVyTWFwLT5lbmQoKSkgewogICAgICAgICBBU1NFUlQobGF5ZXItPmhhc0ZpbHRlckluZm8o
KSk7Ci0gICAgICAgIHJldHVybiBpdGVyLT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBpdGVyLT52
YWx1ZTsKICAgICB9CiAgICAgCiAgICAgUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvKiBmaWx0ZXIgPSBu
ZXcgUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvKGxheWVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd1RocmVhZC5jcHAKaW5kZXggMjY0YWViNDk3NzkxOWJi
NTRmZjhjMDRlNzE1OTgxNzhkYzRjY2RkNS4uZjVlNjNmNDA2NDdhOWUxMTNkNTQ1ZjY2Yzk4NTRl
YjNhZjE2NzY2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5h
bWVkRmxvd1RocmVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5h
bWVkRmxvd1RocmVhZC5jcHAKQEAgLTE0Miw3ICsxNDIsNyBAQCBib29sIFJlbmRlck5hbWVkRmxv
d1RocmVhZDo6ZGVwZW5kc09uKFJlbmRlck5hbWVkRmxvd1RocmVhZCogb3RoZXJSZW5kZXJGbG93
VGhyZQogICAgIFJlbmRlck5hbWVkRmxvd1RocmVhZENvdW50ZWRTZXQ6OmNvbnN0X2l0ZXJhdG9y
IGl0ZXJhdG9yID0gbV9sYXlvdXRCZWZvcmVUaHJlYWRzU2V0LmJlZ2luKCk7CiAgICAgUmVuZGVy
TmFtZWRGbG93VGhyZWFkQ291bnRlZFNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9sYXlvdXRC
ZWZvcmVUaHJlYWRzU2V0LmVuZCgpOwogICAgIGZvciAoOyBpdGVyYXRvciAhPSBlbmQ7ICsraXRl
cmF0b3IpIHsKLSAgICAgICAgY29uc3QgUmVuZGVyTmFtZWRGbG93VGhyZWFkKiBiZWZvcmVGbG93
VGhyZWFkID0gKCppdGVyYXRvcikuZmlyc3Q7CisgICAgICAgIGNvbnN0IFJlbmRlck5hbWVkRmxv
d1RocmVhZCogYmVmb3JlRmxvd1RocmVhZCA9ICgqaXRlcmF0b3IpLmtleTsKICAgICAgICAgaWYg
KGJlZm9yZUZsb3dUaHJlYWQtPmRlcGVuZHNPbihvdGhlclJlbmRlckZsb3dUaHJlYWQpKQogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMzA5LDcgKzMwOSw3IEBAIHZvaWQgUmVu
ZGVyTmFtZWRGbG93VGhyZWFkOjpyZW1vdmVEZXBlbmRlbmN5T25GbG93VGhyZWFkKFJlbmRlck5h
bWVkRmxvd1RocmVhZCoKIHZvaWQgUmVuZGVyTmFtZWRGbG93VGhyZWFkOjpwdXNoRGVwZW5kZW5j
aWVzKFJlbmRlck5hbWVkRmxvd1RocmVhZExpc3QmIGxpc3QpCiB7CiAgICAgZm9yIChSZW5kZXJO
YW1lZEZsb3dUaHJlYWRDb3VudGVkU2V0OjppdGVyYXRvciBpdGVyID0gbV9sYXlvdXRCZWZvcmVU
aHJlYWRzU2V0LmJlZ2luKCk7IGl0ZXIgIT0gbV9sYXlvdXRCZWZvcmVUaHJlYWRzU2V0LmVuZCgp
OyArK2l0ZXIpIHsKLSAgICAgICAgUmVuZGVyTmFtZWRGbG93VGhyZWFkKiBmbG93VGhyZWFkID0g
KCppdGVyKS5maXJzdDsKKyAgICAgICAgUmVuZGVyTmFtZWRGbG93VGhyZWFkKiBmbG93VGhyZWFk
ID0gKCppdGVyKS5rZXk7CiAgICAgICAgIGlmIChsaXN0LmNvbnRhaW5zKGZsb3dUaHJlYWQpKQog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGZsb3dUaHJlYWQtPnB1c2hEZXBlbmRlbmNp
ZXMobGlzdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVn
aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZWdpb24uY3BwCmluZGV4
IDhhNzQ4N2Q3Y2RhNjgyMzc3NTE0Y2RmZjcxODY5ZjdiMDViY2IzNDMuLjFjNWRkYmVlYjYxZTJh
ODA2ZTI5Yzk4NDU0YmY0YWU1ZDJlNDhiNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJSZWdpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJSZWdpb24uY3BwCkBAIC0zMzYsNyArMzM2LDcgQEAgUmVuZGVyQm94UmVnaW9uSW5mbyog
UmVuZGVyUmVnaW9uOjpzZXRSZW5kZXJCb3hSZWdpb25JbmZvKGNvbnN0IFJlbmRlckJveCogYm94
LAogICAgIGlmICghbV9pc1ZhbGlkIHx8ICFtX2Zsb3dUaHJlYWQpCiAgICAgICAgIHJldHVybiAw
OwogCi0gICAgT3duUHRyPFJlbmRlckJveFJlZ2lvbkluZm8+JiBib3hJbmZvID0gbV9yZW5kZXJC
b3hSZWdpb25JbmZvLmFkZChib3gsIG51bGxwdHIpLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgT3du
UHRyPFJlbmRlckJveFJlZ2lvbkluZm8+JiBib3hJbmZvID0gbV9yZW5kZXJCb3hSZWdpb25JbmZv
LmFkZChib3gsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoYm94SW5mbykKICAg
ICAgICAgKmJveEluZm8gPSBSZW5kZXJCb3hSZWdpb25JbmZvKGxvZ2ljYWxMZWZ0SW5zZXQsIGxv
Z2ljYWxSaWdodEluc2V0LCBjb250YWluaW5nQmxvY2tDaGFpbklzSW5zZXQpOwogICAgIGVsc2UK
QEAgLTQwMSw4ICs0MDEsOCBAQCB2b2lkIFJlbmRlclJlZ2lvbjo6c2V0UmVnaW9uT2JqZWN0c1Jl
Z2lvblN0eWxlKCkKICAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBvYmplY3RTdHlsZUluUmVn
aW9uOwogICAgICAgICBib29sIG9iamVjdFJlZ2lvblN0eWxlQ2FjaGVkID0gZmFsc2U7CiAgICAg
ICAgIGlmIChpdCAhPSBtX3JlbmRlck9iamVjdFJlZ2lvblN0eWxlLmVuZCgpKSB7Ci0gICAgICAg
ICAgICBvYmplY3RTdHlsZUluUmVnaW9uID0gaXQtPnNlY29uZC5zdHlsZTsKLSAgICAgICAgICAg
IEFTU0VSVChpdC0+c2Vjb25kLmNhY2hlZCk7CisgICAgICAgICAgICBvYmplY3RTdHlsZUluUmVn
aW9uID0gaXQtPnZhbHVlLnN0eWxlOworICAgICAgICAgICAgQVNTRVJUKGl0LT52YWx1ZS5jYWNo
ZWQpOwogICAgICAgICAgICAgb2JqZWN0UmVnaW9uU3R5bGVDYWNoZWQgPSB0cnVlOwogICAgICAg
ICB9IGVsc2UKICAgICAgICAgICAgIG9iamVjdFN0eWxlSW5SZWdpb24gPSBjb21wdXRlU3R5bGVJ
blJlZ2lvbihvYmplY3QpOwpAQCAtNDIwLDEyICs0MjAsMTIgQEAgdm9pZCBSZW5kZXJSZWdpb246
OnJlc3RvcmVSZWdpb25PYmplY3RzT3JpZ2luYWxTdHlsZSgpCiAKICAgICBSZW5kZXJPYmplY3RS
ZWdpb25TdHlsZU1hcCB0ZW1wOwogICAgIGZvciAoUmVuZGVyT2JqZWN0UmVnaW9uU3R5bGVNYXA6
Oml0ZXJhdG9yIGl0ZXIgPSBtX3JlbmRlck9iamVjdFJlZ2lvblN0eWxlLmJlZ2luKCksIGVuZCA9
IG1fcmVuZGVyT2JqZWN0UmVnaW9uU3R5bGUuZW5kKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsK
LSAgICAgICAgUmVuZGVyT2JqZWN0KiBvYmplY3QgPSBjb25zdF9jYXN0PFJlbmRlck9iamVjdCo+
KGl0ZXItPmZpcnN0KTsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBvYmplY3QgPSBjb25zdF9jYXN0
PFJlbmRlck9iamVjdCo+KGl0ZXItPmtleSk7CiAgICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4g
b2JqZWN0UmVnaW9uU3R5bGUgPSBvYmplY3QtPnN0eWxlKCk7Ci0gICAgICAgIFJlZlB0cjxSZW5k
ZXJTdHlsZT4gb2JqZWN0T3JpZ2luYWxTdHlsZSA9IGl0ZXItPnNlY29uZC5zdHlsZTsKKyAgICAg
ICAgUmVmUHRyPFJlbmRlclN0eWxlPiBvYmplY3RPcmlnaW5hbFN0eWxlID0gaXRlci0+dmFsdWUu
c3R5bGU7CiAgICAgICAgIG9iamVjdC0+c2V0U3R5bGVJbnRlcm5hbChvYmplY3RPcmlnaW5hbFN0
eWxlKTsKIAotICAgICAgICBib29sIHNob3VsZENhY2hlUmVnaW9uU3R5bGUgPSBpdGVyLT5zZWNv
bmQuY2FjaGVkOworICAgICAgICBib29sIHNob3VsZENhY2hlUmVnaW9uU3R5bGUgPSBpdGVyLT52
YWx1ZS5jYWNoZWQ7CiAgICAgICAgIGlmICghc2hvdWxkQ2FjaGVSZWdpb25TdHlsZSkgewogICAg
ICAgICAgICAgLy8gQ2hlY2sgd2hldGhlciB3ZSBzaG91bGQgY2FjaGUgdGhlIGNvbXB1dGVkIHN0
eWxlIGluIHJlZ2lvbi4KICAgICAgICAgICAgIHVuc2lnbmVkIGNoYW5nZWRDb250ZXh0U2Vuc2l0
aXZlUHJvcGVydGllcyA9IENvbnRleHRTZW5zaXRpdmVQcm9wZXJ0eU5vbmU7CkBAIC00ODIsNyAr
NDgyLDcgQEAgdm9pZCBSZW5kZXJSZWdpb246OmNvbXB1dGVDaGlsZHJlblN0eWxlSW5SZWdpb24o
Y29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCiAgICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4g
Y2hpbGRTdHlsZUluUmVnaW9uOwogICAgICAgICBib29sIG9iamVjdFJlZ2lvblN0eWxlQ2FjaGVk
ID0gZmFsc2U7CiAgICAgICAgIGlmIChpdCAhPSBtX3JlbmRlck9iamVjdFJlZ2lvblN0eWxlLmVu
ZCgpKSB7Ci0gICAgICAgICAgICBjaGlsZFN0eWxlSW5SZWdpb24gPSBpdC0+c2Vjb25kLnN0eWxl
OworICAgICAgICAgICAgY2hpbGRTdHlsZUluUmVnaW9uID0gaXQtPnZhbHVlLnN0eWxlOwogICAg
ICAgICAgICAgb2JqZWN0UmVnaW9uU3R5bGVDYWNoZWQgPSB0cnVlOwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgaWYgKGNoaWxkLT5pc0Fub255bW91cygpKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAppbmRleCA2YzllMzM1NGJiMDcz
NmFiMjAwMTIzNmJlZGUzNjg1YWM1OTNhZDM4Li5hOWUxNjY3NWFiYmRjYmFiN2Y1Y2Q4MTQ2ZmI0
NTBhZmUzY2YzOWFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGFibGVTZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFi
bGVTZWN0aW9uLmNwcApAQCAtMTQyOCw3ICsxNDI4LDcgQEAgQ29sbGFwc2VkQm9yZGVyVmFsdWUm
IFJlbmRlclRhYmxlU2VjdGlvbjo6Y2FjaGVkQ29sbGFwc2VkQm9yZGVyKGNvbnN0IFJlbmRlclRh
YmwKICAgICBBU1NFUlQodGFibGUoKS0+Y29sbGFwc2VCb3JkZXJzKCkpOwogICAgIEhhc2hNYXA8
cGFpcjxjb25zdCBSZW5kZXJUYWJsZUNlbGwqLCBpbnQ+LCBDb2xsYXBzZWRCb3JkZXJWYWx1ZT46
Oml0ZXJhdG9yIGl0ID0gbV9jZWxsc0NvbGxhcHNlZEJvcmRlcnMuZmluZChtYWtlX3BhaXIoY2Vs
bCwgc2lkZSkpOwogICAgIEFTU0VSVChpdCAhPSBtX2NlbGxzQ29sbGFwc2VkQm9yZGVycy5lbmQo
KSk7Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgcmV0dXJuIGl0LT52YWx1ZTsKIH0KIAog
UmVuZGVyVGFibGVTZWN0aW9uKiBSZW5kZXJUYWJsZVNlY3Rpb246OmNyZWF0ZUFub255bW91c1dp
dGhQYXJlbnRSZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QqIHBhcmVudCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbSBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQppbmRleCAwYmM5ODA0ZmI3NTliMTFlZDk2
YTQwOTEwNmEwMTE2Nzk4YzIwNGJlLi42NDA0ZDJhZmMxNDZlODE1NTgwNWI5ZWFlODA4NGIyYTQw
YjgxZjM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVN
YWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCkBA
IC0zODAsNyArMzgwLDcgQEAgQ29sb3IgUmVuZGVyVGhlbWVNYWM6OnN5c3RlbUNvbG9yKGludCBj
c3NWYWx1ZUlkKSBjb25zdAogICAgIHsKICAgICAgICAgSGFzaE1hcDxpbnQsIFJHQkEzMj46Oml0
ZXJhdG9yIGl0ID0gbV9zeXN0ZW1Db2xvckNhY2hlLmZpbmQoY3NzVmFsdWVJZCk7CiAgICAgICAg
IGlmIChpdCAhPSBtX3N5c3RlbUNvbG9yQ2FjaGUuZW5kKCkpCi0gICAgICAgICAgICByZXR1cm4g
aXQtPnNlY29uZDsKKyAgICAgICAgICAgIHJldHVybiBpdC0+dmFsdWU7CiAgICAgfQogCiAgICAg
Q29sb3IgY29sb3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Vmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKaW5kZXgg
NjYxYmM5NGU0YWY1N2Q2ODJjODRlMDk4NmI0OThmOGM1ZGU4MDNiZC4uM2E1MGI3MTAzZDQxMGJj
ODNjNWQ4NjA2NmRiMjYwMzM4OTNiYjhlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJWaWV3LmNwcApAQCAtNDUzLDcgKzQ1Myw3IEBAIEludFJlY3QgUmVuZGVyVmlldzo6c2VsZWN0
aW9uQm91bmRzKGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRlbnQpIGNvbnN0CiAgICAgICAgICAgICBz
ZWxlY3RlZE9iamVjdHMuc2V0KG9zLCBhZG9wdFB0cihuZXcgUmVuZGVyU2VsZWN0aW9uSW5mbyhv
cywgY2xpcFRvVmlzaWJsZUNvbnRlbnQpKSk7CiAgICAgICAgICAgICBSZW5kZXJCbG9jayogY2Ig
PSBvcy0+Y29udGFpbmluZ0Jsb2NrKCk7CiAgICAgICAgICAgICB3aGlsZSAoY2IgJiYgIWNiLT5p
c1JlbmRlclZpZXcoKSkgewotICAgICAgICAgICAgICAgIE93blB0cjxSZW5kZXJTZWxlY3Rpb25J
bmZvPiYgYmxvY2tJbmZvID0gc2VsZWN0ZWRPYmplY3RzLmFkZChjYiwgbnVsbHB0cikuaXRlcmF0
b3ItPnNlY29uZDsKKyAgICAgICAgICAgICAgICBPd25QdHI8UmVuZGVyU2VsZWN0aW9uSW5mbz4m
IGJsb2NrSW5mbyA9IHNlbGVjdGVkT2JqZWN0cy5hZGQoY2IsIG51bGxwdHIpLml0ZXJhdG9yLT52
YWx1ZTsKICAgICAgICAgICAgICAgICBpZiAoYmxvY2tJbmZvKQogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICBibG9ja0luZm8gPSBhZG9wdFB0cihuZXcgUmVuZGVy
U2VsZWN0aW9uSW5mbyhjYiwgY2xpcFRvVmlzaWJsZUNvbnRlbnQpKTsKQEAgLTQ2OCw3ICs0Njgs
NyBAQCBJbnRSZWN0IFJlbmRlclZpZXc6OnNlbGVjdGlvbkJvdW5kcyhib29sIGNsaXBUb1Zpc2li
bGVDb250ZW50KSBjb25zdAogICAgIExheW91dFJlY3Qgc2VsUmVjdDsKICAgICBTZWxlY3Rpb25N
YXA6Oml0ZXJhdG9yIGVuZCA9IHNlbGVjdGVkT2JqZWN0cy5lbmQoKTsKICAgICBmb3IgKFNlbGVj
dGlvbk1hcDo6aXRlcmF0b3IgaSA9IHNlbGVjdGVkT2JqZWN0cy5iZWdpbigpOyBpICE9IGVuZDsg
KytpKSB7Ci0gICAgICAgIFJlbmRlclNlbGVjdGlvbkluZm8qIGluZm8gPSBpLT5zZWNvbmQuZ2V0
KCk7CisgICAgICAgIFJlbmRlclNlbGVjdGlvbkluZm8qIGluZm8gPSBpLT52YWx1ZS5nZXQoKTsK
ICAgICAgICAgLy8gUmVuZGVyU2VsZWN0aW9uSW5mbzo6cmVjdCgpIGlzIGluIHRoZSBjb29yZGlu
YXRlcyBvZiB0aGUgcmVwYWludENvbnRhaW5lciwgc28gbWFwIHRvIHBhZ2UgY29vcmRpbmF0ZXMu
CiAgICAgICAgIExheW91dFJlY3QgY3VyclJlY3QgPSBpbmZvLT5yZWN0KCk7CiAgICAgICAgIGlm
IChSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyID0gaW5mby0+cmVwYWlu
dENvbnRhaW5lcigpKSB7CkBAIC01MzMsNyArNTMzLDcgQEAgdm9pZCBSZW5kZXJWaWV3OjpzZXRT
ZWxlY3Rpb24oUmVuZGVyT2JqZWN0KiBzdGFydCwgaW50IHN0YXJ0UG9zLCBSZW5kZXJPYmplY3Qq
IGUKICAgICAgICAgICAgIGlmIChibG9ja1JlcGFpbnRNb2RlID09IFJlcGFpbnROZXdYT1JPbGQp
IHsKICAgICAgICAgICAgICAgICBSZW5kZXJCbG9jayogY2IgPSBvcy0+Y29udGFpbmluZ0Jsb2Nr
KCk7CiAgICAgICAgICAgICAgICAgd2hpbGUgKGNiICYmICFjYi0+aXNSZW5kZXJWaWV3KCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgT3duUHRyPFJlbmRlckJsb2NrU2VsZWN0aW9uSW5mbz4mIGJs
b2NrSW5mbyA9IG9sZFNlbGVjdGVkQmxvY2tzLmFkZChjYiwgbnVsbHB0cikuaXRlcmF0b3ItPnNl
Y29uZDsKKyAgICAgICAgICAgICAgICAgICAgT3duUHRyPFJlbmRlckJsb2NrU2VsZWN0aW9uSW5m
bz4mIGJsb2NrSW5mbyA9IG9sZFNlbGVjdGVkQmxvY2tzLmFkZChjYiwgbnVsbHB0cikuaXRlcmF0
b3ItPnZhbHVlOwogICAgICAgICAgICAgICAgICAgICBpZiAoYmxvY2tJbmZvKQogICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGJsb2NrSW5mbyA9IGFk
b3B0UHRyKG5ldyBSZW5kZXJCbG9ja1NlbGVjdGlvbkluZm8oY2IpKTsKQEAgLTU0OCw3ICs1NDgs
NyBAQCB2b2lkIFJlbmRlclZpZXc6OnNldFNlbGVjdGlvbihSZW5kZXJPYmplY3QqIHN0YXJ0LCBp
bnQgc3RhcnRQb3MsIFJlbmRlck9iamVjdCogZQogICAgIC8vIE5vdyBjbGVhciB0aGUgc2VsZWN0
aW9uLgogICAgIFNlbGVjdGVkT2JqZWN0TWFwOjppdGVyYXRvciBvbGRPYmplY3RzRW5kID0gb2xk
U2VsZWN0ZWRPYmplY3RzLmVuZCgpOwogICAgIGZvciAoU2VsZWN0ZWRPYmplY3RNYXA6Oml0ZXJh
dG9yIGkgPSBvbGRTZWxlY3RlZE9iamVjdHMuYmVnaW4oKTsgaSAhPSBvbGRPYmplY3RzRW5kOyAr
K2kpCi0gICAgICAgIGktPmZpcnN0LT5zZXRTZWxlY3Rpb25TdGF0ZUlmTmVlZGVkKFNlbGVjdGlv
bk5vbmUpOworICAgICAgICBpLT5rZXktPnNldFNlbGVjdGlvblN0YXRlSWZOZWVkZWQoU2VsZWN0
aW9uTm9uZSk7CiAKICAgICAvLyBzZXQgc2VsZWN0aW9uIHN0YXJ0IGFuZCBlbmQKICAgICBtX3Nl
bGVjdGlvblN0YXJ0ID0gc3RhcnQ7CkBAIC01ODYsNyArNTg2LDcgQEAgdm9pZCBSZW5kZXJWaWV3
OjpzZXRTZWxlY3Rpb24oUmVuZGVyT2JqZWN0KiBzdGFydCwgaW50IHN0YXJ0UG9zLCBSZW5kZXJP
YmplY3QqIGUKICAgICAgICAgICAgIG5ld1NlbGVjdGVkT2JqZWN0cy5zZXQobywgYWRvcHRQdHIo
bmV3IFJlbmRlclNlbGVjdGlvbkluZm8obywgdHJ1ZSkpKTsKICAgICAgICAgICAgIFJlbmRlckJs
b2NrKiBjYiA9IG8tPmNvbnRhaW5pbmdCbG9jaygpOwogICAgICAgICAgICAgd2hpbGUgKGNiICYm
ICFjYi0+aXNSZW5kZXJWaWV3KCkpIHsKLSAgICAgICAgICAgICAgICBPd25QdHI8UmVuZGVyQmxv
Y2tTZWxlY3Rpb25JbmZvPiYgYmxvY2tJbmZvID0gbmV3U2VsZWN0ZWRCbG9ja3MuYWRkKGNiLCBu
dWxscHRyKS5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICAgICAgICAgIE93blB0cjxSZW5kZXJC
bG9ja1NlbGVjdGlvbkluZm8+JiBibG9ja0luZm8gPSBuZXdTZWxlY3RlZEJsb2Nrcy5hZGQoY2Is
IG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgICAgICAgICBpZiAoYmxvY2tJbmZv
KQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBibG9ja0luZm8g
PSBhZG9wdFB0cihuZXcgUmVuZGVyQmxvY2tTZWxlY3Rpb25JbmZvKGNiKSk7CkBAIC02MDQsOSAr
NjA0LDkgQEAgdm9pZCBSZW5kZXJWaWV3OjpzZXRTZWxlY3Rpb24oUmVuZGVyT2JqZWN0KiBzdGFy
dCwgaW50IHN0YXJ0UG9zLCBSZW5kZXJPYmplY3QqIGUKIAogICAgIC8vIEhhdmUgYW55IG9mIHRo
ZSBvbGQgc2VsZWN0ZWQgb2JqZWN0cyBjaGFuZ2VkIGNvbXBhcmVkIHRvIHRoZSBuZXcgc2VsZWN0
aW9uPwogICAgIGZvciAoU2VsZWN0ZWRPYmplY3RNYXA6Oml0ZXJhdG9yIGkgPSBvbGRTZWxlY3Rl
ZE9iamVjdHMuYmVnaW4oKTsgaSAhPSBvbGRPYmplY3RzRW5kOyArK2kpIHsKLSAgICAgICAgUmVu
ZGVyT2JqZWN0KiBvYmogPSBpLT5maXJzdDsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBvYmogPSBp
LT5rZXk7CiAgICAgICAgIFJlbmRlclNlbGVjdGlvbkluZm8qIG5ld0luZm8gPSBuZXdTZWxlY3Rl
ZE9iamVjdHMuZ2V0KG9iaik7Ci0gICAgICAgIFJlbmRlclNlbGVjdGlvbkluZm8qIG9sZEluZm8g
PSBpLT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIFJlbmRlclNlbGVjdGlvbkluZm8qIG9sZEluZm8g
PSBpLT52YWx1ZS5nZXQoKTsKICAgICAgICAgaWYgKCFuZXdJbmZvIHx8IG9sZEluZm8tPnJlY3Qo
KSAhPSBuZXdJbmZvLT5yZWN0KCkgfHwgb2xkSW5mby0+c3RhdGUoKSAhPSBuZXdJbmZvLT5zdGF0
ZSgpIHx8CiAgICAgICAgICAgICAobV9zZWxlY3Rpb25TdGFydCA9PSBvYmogJiYgb2xkU3RhcnRQ
b3MgIT0gbV9zZWxlY3Rpb25TdGFydFBvcykgfHwKICAgICAgICAgICAgIChtX3NlbGVjdGlvbkVu
ZCA9PSBvYmogJiYgb2xkRW5kUG9zICE9IG1fc2VsZWN0aW9uRW5kUG9zKSkgewpAQCAtNjIxLDE0
ICs2MjEsMTQgQEAgdm9pZCBSZW5kZXJWaWV3OjpzZXRTZWxlY3Rpb24oUmVuZGVyT2JqZWN0KiBz
dGFydCwgaW50IHN0YXJ0UG9zLCBSZW5kZXJPYmplY3QqIGUKICAgICAvLyBBbnkgbmV3IG9iamVj
dHMgdGhhdCByZW1haW4gd2VyZSBub3QgZm91bmQgaW4gdGhlIG9sZCBvYmplY3RzIGRpY3QsIGFu
ZCBzbyB0aGV5IG5lZWQgdG8gYmUgdXBkYXRlZC4KICAgICBTZWxlY3RlZE9iamVjdE1hcDo6aXRl
cmF0b3IgbmV3T2JqZWN0c0VuZCA9IG5ld1NlbGVjdGVkT2JqZWN0cy5lbmQoKTsKICAgICBmb3Ig
KFNlbGVjdGVkT2JqZWN0TWFwOjppdGVyYXRvciBpID0gbmV3U2VsZWN0ZWRPYmplY3RzLmJlZ2lu
KCk7IGkgIT0gbmV3T2JqZWN0c0VuZDsgKytpKQotICAgICAgICBpLT5zZWNvbmQtPnJlcGFpbnQo
KTsKKyAgICAgICAgaS0+dmFsdWUtPnJlcGFpbnQoKTsKIAogICAgIC8vIEhhdmUgYW55IG9mIHRo
ZSBvbGQgYmxvY2tzIGNoYW5nZWQ/CiAgICAgU2VsZWN0ZWRCbG9ja01hcDo6aXRlcmF0b3Igb2xk
QmxvY2tzRW5kID0gb2xkU2VsZWN0ZWRCbG9ja3MuZW5kKCk7CiAgICAgZm9yIChTZWxlY3RlZEJs
b2NrTWFwOjppdGVyYXRvciBpID0gb2xkU2VsZWN0ZWRCbG9ja3MuYmVnaW4oKTsgaSAhPSBvbGRC
bG9ja3NFbmQ7ICsraSkgewotICAgICAgICBSZW5kZXJCbG9jayogYmxvY2sgPSBpLT5maXJzdDsK
KyAgICAgICAgUmVuZGVyQmxvY2sqIGJsb2NrID0gaS0+a2V5OwogICAgICAgICBSZW5kZXJCbG9j
a1NlbGVjdGlvbkluZm8qIG5ld0luZm8gPSBuZXdTZWxlY3RlZEJsb2Nrcy5nZXQoYmxvY2spOwot
ICAgICAgICBSZW5kZXJCbG9ja1NlbGVjdGlvbkluZm8qIG9sZEluZm8gPSBpLT5zZWNvbmQuZ2V0
KCk7CisgICAgICAgIFJlbmRlckJsb2NrU2VsZWN0aW9uSW5mbyogb2xkSW5mbyA9IGktPnZhbHVl
LmdldCgpOwogICAgICAgICBpZiAoIW5ld0luZm8gfHwgb2xkSW5mby0+cmVjdHMoKSAhPSBuZXdJ
bmZvLT5yZWN0cygpIHx8IG9sZEluZm8tPnN0YXRlKCkgIT0gbmV3SW5mby0+c3RhdGUoKSkgewog
ICAgICAgICAgICAgb2xkSW5mby0+cmVwYWludCgpOwogICAgICAgICAgICAgaWYgKG5ld0luZm8p
IHsKQEAgLTY0MSw3ICs2NDEsNyBAQCB2b2lkIFJlbmRlclZpZXc6OnNldFNlbGVjdGlvbihSZW5k
ZXJPYmplY3QqIHN0YXJ0LCBpbnQgc3RhcnRQb3MsIFJlbmRlck9iamVjdCogZQogICAgIC8vIEFu
eSBuZXcgYmxvY2tzIHRoYXQgcmVtYWluIHdlcmUgbm90IGZvdW5kIGluIHRoZSBvbGQgYmxvY2tz
IGRpY3QsIGFuZCBzbyB0aGV5IG5lZWQgdG8gYmUgdXBkYXRlZC4KICAgICBTZWxlY3RlZEJsb2Nr
TWFwOjppdGVyYXRvciBuZXdCbG9ja3NFbmQgPSBuZXdTZWxlY3RlZEJsb2Nrcy5lbmQoKTsKICAg
ICBmb3IgKFNlbGVjdGVkQmxvY2tNYXA6Oml0ZXJhdG9yIGkgPSBuZXdTZWxlY3RlZEJsb2Nrcy5i
ZWdpbigpOyBpICE9IG5ld0Jsb2Nrc0VuZDsgKytpKQotICAgICAgICBpLT5zZWNvbmQtPnJlcGFp
bnQoKTsKKyAgICAgICAgaS0+dmFsdWUtPnJlcGFpbnQoKTsKIAogICAgIG1fZnJhbWVWaWV3LT5l
bmREZWZlcnJlZFJlcGFpbnRzKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJX
aWRnZXQuY3BwCmluZGV4IDIxZDBjM2FkNmYyMmVlMjE5ZGNkMWM3NDQ3YjEwMTM0ZDM5YjYxMWYu
LjEyNTg3ZTNkYWNiNDk1MTk2ZWU2YmVhNzE1NWZjOGJkMTA2MGRmODYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCkBAIC02MSw5ICs2MSw5IEBAIHZvaWQgV2lk
Z2V0SGllcmFyY2h5VXBkYXRlc1N1c3BlbnNpb25TY29wZTo6bW92ZVdpZGdldHMoKQogICAgIHdp
ZGdldE5ld1BhcmVudE1hcCgpLmNsZWFyKCk7CiAgICAgV2lkZ2V0VG9QYXJlbnRNYXA6Oml0ZXJh
dG9yIGVuZCA9IG1hcC5lbmQoKTsKICAgICBmb3IgKFdpZGdldFRvUGFyZW50TWFwOjppdGVyYXRv
ciBpdCA9IG1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgV2lkZ2V0KiBj
aGlsZCA9IGl0LT5maXJzdC5nZXQoKTsKKyAgICAgICAgV2lkZ2V0KiBjaGlsZCA9IGl0LT5rZXku
Z2V0KCk7CiAgICAgICAgIFNjcm9sbFZpZXcqIGN1cnJlbnRQYXJlbnQgPSBjaGlsZC0+cGFyZW50
KCk7Ci0gICAgICAgIEZyYW1lVmlldyogbmV3UGFyZW50ID0gaXQtPnNlY29uZDsKKyAgICAgICAg
RnJhbWVWaWV3KiBuZXdQYXJlbnQgPSBpdC0+dmFsdWU7CiAgICAgICAgIGlmIChuZXdQYXJlbnQg
IT0gY3VycmVudFBhcmVudCkgewogICAgICAgICAgICAgaWYgKGN1cnJlbnRQYXJlbnQpCiAgICAg
ICAgICAgICAgICAgY3VycmVudFBhcmVudC0+cmVtb3ZlQ2hpbGQoY2hpbGQpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCmluZGV4IDFmNDIwNjcwMGE1ZTBjZjdk
ZWU4NjNjZDNkZWIzYzlhMzM4ODE5NDYuLmY5MzJlNmYyMTE1M2MxYmI0YTVhY2IxM2I1NjY5MjI5
ZDZlMTYwMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5l
Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAK
QEAgLTc1NSw4ICs3NTUsOCBAQCB2b2lkIFJvb3RJbmxpbmVCb3g6OmFzY2VudEFuZERlc2NlbnRG
b3JCb3goSW5saW5lQm94KiBib3gsIEdseXBoT3ZlcmZsb3dBbmRGYWxsYgogICAgIEdseXBoT3Zl
cmZsb3cqIGdseXBoT3ZlcmZsb3cgPSAwOwogICAgIGlmIChib3gtPmlzVGV4dCgpKSB7CiAgICAg
ICAgIEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFwOjppdGVyYXRvciBpdCA9IHRleHRC
b3hEYXRhTWFwLmZpbmQodG9JbmxpbmVUZXh0Qm94KGJveCkpOwotICAgICAgICB1c2VkRm9udHMg
PSBpdCA9PSB0ZXh0Qm94RGF0YU1hcC5lbmQoKSA/IDAgOiAmaXQtPnNlY29uZC5maXJzdDsKLSAg
ICAgICAgZ2x5cGhPdmVyZmxvdyA9IGl0ID09IHRleHRCb3hEYXRhTWFwLmVuZCgpID8gMCA6ICZp
dC0+c2Vjb25kLnNlY29uZDsKKyAgICAgICAgdXNlZEZvbnRzID0gaXQgPT0gdGV4dEJveERhdGFN
YXAuZW5kKCkgPyAwIDogJml0LT52YWx1ZS5maXJzdDsKKyAgICAgICAgZ2x5cGhPdmVyZmxvdyA9
IGl0ID09IHRleHRCb3hEYXRhTWFwLmVuZCgpID8gMCA6ICZpdC0+dmFsdWUuc2Vjb25kOwogICAg
IH0KICAgICAgICAgCiAgICAgYm9vbCBpbmNsdWRlTGVhZGluZyA9IGluY2x1ZGVMZWFkaW5nRm9y
Qm94KGJveCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVmVydGljYWxQ
b3NpdGlvbkNhY2hlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVmVydGljYWxQb3NpdGlv
bkNhY2hlLmgKaW5kZXggYmIzOTg3NzcyMWRhNzA1YzM3YmQzYjg4MTkwMjRjZDI3ZTM2ZTVjZS4u
YjdjZDdlMDg1ZTdmOWJlZGI1MjhmNjJkZWVmNTdhN2JiOGFhNWJlMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1ZlcnRpY2FsUG9zaXRpb25DYWNoZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9WZXJ0aWNhbFBvc2l0aW9uQ2FjaGUuaApAQCAtNDgsNyArNDgs
NyBAQCBwdWJsaWM6CiAgICAgICAgIGNvbnN0IEhhc2hNYXA8UmVuZGVyT2JqZWN0KiwgaW50Pjo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXBUb0NoZWNrLmZpbmQocmVuZGVyZXIpOwogICAgICAgICBp
ZiAoaXQgPT0gbWFwVG9DaGVjay5lbmQoKSkKICAgICAgICAgICAgIHJldHVybiBQb3NpdGlvblVu
ZGVmaW5lZDsKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBpdC0+
dmFsdWU7CiAgICAgfQogICAgIAogICAgIHZvaWQgc2V0KFJlbmRlck9iamVjdCogcmVuZGVyZXIs
IEZvbnRCYXNlbGluZSBiYXNlbGluZVR5cGUsIGludCBwb3NpdGlvbikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwCmluZGV4IDQ1
NGY3YWE2ZDA3YjZiZDMxMjMyMzZiZWZjYTQ5OWVjZmU1YTA3YTAuLjIzNzFkMWFiZjljOTZiYTRh
NDYyOGI5M2NhNDk0MmFmN2EwN2I5NWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcApAQCAtMTU4LDcgKzE1OCw3IEBAIGJv
b2wgUmVuZGVyU1ZHSW5saW5lVGV4dDo6Y2hhcmFjdGVyU3RhcnRzTmV3VGV4dENodW5rKGludCBw
b3NpdGlvbikgY29uc3QKICAgICBpZiAoaXQgPT0gbV9sYXlvdXRBdHRyaWJ1dGVzLmNoYXJhY3Rl
ckRhdGFNYXAoKS5lbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIGl0
LT5zZWNvbmQueCAhPSBTVkdUZXh0TGF5b3V0QXR0cmlidXRlczo6ZW1wdHlWYWx1ZSgpIHx8IGl0
LT5zZWNvbmQueSAhPSBTVkdUZXh0TGF5b3V0QXR0cmlidXRlczo6ZW1wdHlWYWx1ZSgpOworICAg
IHJldHVybiBpdC0+dmFsdWUueCAhPSBTVkdUZXh0TGF5b3V0QXR0cmlidXRlczo6ZW1wdHlWYWx1
ZSgpIHx8IGl0LT52YWx1ZS55ICE9IFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzOjplbXB0eVZhbHVl
KCk7CiB9CiAKIFZpc2libGVQb3NpdGlvbiBSZW5kZXJTVkdJbmxpbmVUZXh0Ojpwb3NpdGlvbkZv
clBvaW50KGNvbnN0IExheW91dFBvaW50JiBwb2ludCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKaW5kZXggZWU2
YTQ5ZGI4OGE5ZmQ2Yzc3MDVmYTE4YjZlZWNhODgxNmUxYTJlYi4uMzgzMmIyYjAxZTMwNTBhNWY4
NDNjNjVmMWNkZGNiMGVjMTUzYTk2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKQEAgLTMzOCw3ICszMzgs
NyBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwcmltaXRpdmVBdHRyaWJ1dGVDaGFu
Z2VkKFJlbmRlck9iamVjdCogb2JqZWN0LCBjbwogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlcyogcHJpbWl0dmUgPSBzdGF0aWNfY2FzdDxTVkdGaWx0ZXJQcmltaXRpdmVT
dGFuZGFyZEF0dHJpYnV0ZXMqPihvYmplY3QtPm5vZGUoKSk7CiAKICAgICBmb3IgKDsgaXQgIT0g
ZW5kOyArK2l0KSB7Ci0gICAgICAgIEZpbHRlckRhdGEqIGZpbHRlckRhdGEgPSBpdC0+c2Vjb25k
OworICAgICAgICBGaWx0ZXJEYXRhKiBmaWx0ZXJEYXRhID0gaXQtPnZhbHVlOwogICAgICAgICBp
ZiAoIWZpbHRlckRhdGEtPmJ1aWxkZWQpCiAgICAgICAgICAgICBjb250aW51ZTsKIApAQCAtMzUz
LDcgKzM1Myw3IEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnByaW1pdGl2ZUF0dHJp
YnV0ZUNoYW5nZWQoUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvCiAgICAgICAgIGJ1aWxkZXItPmNs
ZWFyUmVzdWx0c1JlY3Vyc2l2ZShlZmZlY3QpOwogCiAgICAgICAgIC8vIFJlcGFpbnQgdGhlIGlt
YWdlIG9uIHRoZSBzY3JlZW4uCi0gICAgICAgIG1hcmtDbGllbnRGb3JJbnZhbGlkYXRpb24oaXQt
PmZpcnN0LCBSZXBhaW50SW52YWxpZGF0aW9uKTsKKyAgICAgICAgbWFya0NsaWVudEZvckludmFs
aWRhdGlvbihpdC0+a2V5LCBSZXBhaW50SW52YWxpZGF0aW9uKTsKICAgICB9CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFk
aWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
R3JhZGllbnQuY3BwCmluZGV4IDU4ZTAwNzliMjJjYjJjNWMxN2Q4ZjJkNGQ3M2NiYmEyMTBhYTlh
NWUuLjMwY2UxYjhjYjRmOTc4YzAwZGNiZGExN2RmYjU1NzIzY2ZjNTgwODEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdy
YWRpZW50LmNwcApAQCAtMTQwLDcgKzE0MCw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VHcmFk
aWVudDo6YXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqIG9iamVjdCwgUmVuZGVyU3R5bGUqCiAg
ICAgaWYgKGdyYWRpZW50VW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfT0JK
RUNUQk9VTkRJTkdCT1ggJiYgb2JqZWN0Qm91bmRpbmdCb3guaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBPd25QdHI8R3JhZGllbnREYXRhPiYgZ3JhZGllbnREYXRhID0g
bV9ncmFkaWVudE1hcC5hZGQob2JqZWN0LCBudWxscHRyKS5pdGVyYXRvci0+c2Vjb25kOworICAg
IE93blB0cjxHcmFkaWVudERhdGE+JiBncmFkaWVudERhdGEgPSBtX2dyYWRpZW50TWFwLmFkZChv
YmplY3QsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoIWdyYWRpZW50RGF0YSkK
ICAgICAgICAgZ3JhZGllbnREYXRhID0gYWRvcHRQdHIobmV3IEdyYWRpZW50RGF0YSk7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQ
YXR0ZXJuLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VQYXR0ZXJuLmNwcAppbmRleCBiNGFmOTk5MTg1NTJhMTU0ODUyYmIyYTRiNDdiMDMwZWRhNmE1
MzE2Li4zYTE4ODJhY2Y4MjE3MjI4NmIyM2JiNTQyYmU0MDY2YTNiYWNjY2M3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBh
dHRlcm4uY3BwCkBAIC04NCw3ICs4NCw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJu
OjphcHBseVJlc291cmNlKFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5kZXJTdHlsZSoKICAgICBp
ZiAobV9hdHRyaWJ1dGVzLnBhdHRlcm5Vbml0cygpID09IFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRf
VFlQRV9PQkpFQ1RCT1VORElOR0JPWCAmJiBvYmplY3RCb3VuZGluZ0JveC5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIE93blB0cjxQYXR0ZXJuRGF0YT4mIHBhdHRlcm5E
YXRhID0gbV9wYXR0ZXJuTWFwLmFkZChvYmplY3QsIG51bGxwdHIpLml0ZXJhdG9yLT5zZWNvbmQ7
CisgICAgT3duUHRyPFBhdHRlcm5EYXRhPiYgcGF0dGVybkRhdGEgPSBtX3BhdHRlcm5NYXAuYWRk
KG9iamVjdCwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghcGF0dGVybkRhdGEp
CiAgICAgICAgIHBhdHRlcm5EYXRhID0gYWRvcHRQdHIobmV3IFBhdHRlcm5EYXRhKTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXNDYWNoZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlc0NhY2hlLmNwcApp
bmRleCAyOTdjMDdiNmFkNDA5YTI3ZTYzNTg1NjAwMGM5YWQ0YjkwNWI0MzU0Li44YjQ4Y2Y1M2U3
OTlhMGI3ZGUyYjU0YTRjNzE1MmUwOTI3NTM5YzAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlc0NhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlc0NhY2hlLmNwcApAQCAtMTk4LDExICsxOTgsMTEg
QEAgdm9pZCBTVkdSZXNvdXJjZXNDYWNoZTo6cmVzb3VyY2VEZXN0cm95ZWQoUmVuZGVyU1ZHUmVz
b3VyY2VDb250YWluZXIqIHJlc291cmNlKQogCiAgICAgSGFzaE1hcDxjb25zdCBSZW5kZXJPYmpl
Y3QqLCBTVkdSZXNvdXJjZXMqPjo6aXRlcmF0b3IgZW5kID0gY2FjaGUtPm1fY2FjaGUuZW5kKCk7
CiAgICAgZm9yIChIYXNoTWFwPGNvbnN0IFJlbmRlck9iamVjdCosIFNWR1Jlc291cmNlcyo+Ojpp
dGVyYXRvciBpdCA9IGNhY2hlLT5tX2NhY2hlLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewot
ICAgICAgICBpdC0+c2Vjb25kLT5yZXNvdXJjZURlc3Ryb3llZChyZXNvdXJjZSk7CisgICAgICAg
IGl0LT52YWx1ZS0+cmVzb3VyY2VEZXN0cm95ZWQocmVzb3VyY2UpOwogCiAgICAgICAgIC8vIE1h
cmsgdXNlcnMgb2YgZGVzdHJveWVkIHJlc291cmNlcyBhcyBwZW5kaW5nIHJlc29sdXRpb24gYmFz
ZWQgb24gdGhlIGlkIG9mIHRoZSBvbGQgcmVzb3VyY2UuCiAgICAgICAgIEVsZW1lbnQqIHJlc291
cmNlRWxlbWVudCA9IHRvRWxlbWVudChyZXNvdXJjZS0+bm9kZSgpKTsKLSAgICAgICAgU1ZHU3R5
bGVkRWxlbWVudCogY2xpZW50RWxlbWVudCA9IHRvU1ZHU3R5bGVkRWxlbWVudChpdC0+Zmlyc3Qt
Pm5vZGUoKSk7CisgICAgICAgIFNWR1N0eWxlZEVsZW1lbnQqIGNsaWVudEVsZW1lbnQgPSB0b1NW
R1N0eWxlZEVsZW1lbnQoaXQtPmtleS0+bm9kZSgpKTsKICAgICAgICAgU1ZHRG9jdW1lbnRFeHRl
bnNpb25zKiBleHRlbnNpb25zID0gY2xpZW50RWxlbWVudC0+ZG9jdW1lbnQoKS0+YWNjZXNzU1ZH
RXh0ZW5zaW9ucygpOwogCiAgICAgICAgIGV4dGVuc2lvbnMtPmFkZFBlbmRpbmdSZXNvdXJjZShy
ZXNvdXJjZUVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjppZEF0dHIpLCBjbGll
bnRFbGVtZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
Um9vdElubGluZUJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jvb3RJ
bmxpbmVCb3guY3BwCmluZGV4IDM0ZTkzYTAyZWY3NDMyZTNjMjZlZjIzNjBkMWNmM2ZkNDM3ZTQx
NmUuLjU0NmZlYzI2Y2U2OTgxYWNkMWZjZDdhYmUwYTBhOTgzOGM3MGI0M2MgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUm9vdElubGluZUJveC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSb290SW5saW5lQm94LmNwcApAQCAtMjI2
LDE3ICsyMjYsMTcgQEAgc3RhdGljIGlubGluZSB2b2lkIHN3YXBJdGVtc0luTGF5b3V0QXR0cmli
dXRlcyhTVkdUZXh0TGF5b3V0QXR0cmlidXRlcyogZmlyc3RBdHQKICAgICAgICAgcmV0dXJuOwog
CiAgICAgaWYgKGZpcnN0UHJlc2VudCAmJiBsYXN0UHJlc2VudCkgewotICAgICAgICBzdGQ6OnN3
YXAoaXRGaXJzdC0+c2Vjb25kLCBpdExhc3QtPnNlY29uZCk7CisgICAgICAgIHN0ZDo6c3dhcChp
dEZpcnN0LT52YWx1ZSwgaXRMYXN0LT52YWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
ICAgICBpZiAoZmlyc3RQcmVzZW50ICYmICFsYXN0UHJlc2VudCkgewotICAgICAgICBsYXN0QXR0
cmlidXRlcy0+Y2hhcmFjdGVyRGF0YU1hcCgpLnNldChsYXN0UG9zaXRpb24gKyAxLCBpdEZpcnN0
LT5zZWNvbmQpOworICAgICAgICBsYXN0QXR0cmlidXRlcy0+Y2hhcmFjdGVyRGF0YU1hcCgpLnNl
dChsYXN0UG9zaXRpb24gKyAxLCBpdEZpcnN0LT52YWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKICAgICAvLyAhZmlyc3RQcmVzZW50ICYmIGxhc3RQcmVzZW50Ci0gICAgZmlyc3RBdHRy
aWJ1dGVzLT5jaGFyYWN0ZXJEYXRhTWFwKCkuc2V0KGZpcnN0UG9zaXRpb24gKyAxLCBpdExhc3Qt
PnNlY29uZCk7CisgICAgZmlyc3RBdHRyaWJ1dGVzLT5jaGFyYWN0ZXJEYXRhTWFwKCkuc2V0KGZp
cnN0UG9zaXRpb24gKyAxLCBpdExhc3QtPnZhbHVlKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lk
IGZpbmRGaXJzdEFuZExhc3RBdHRyaWJ1dGVzSW5WZWN0b3IoVmVjdG9yPFNWR1RleHRMYXlvdXRB
dHRyaWJ1dGVzKj4mIGF0dHJpYnV0ZXMsIFJlbmRlclNWR0lubGluZVRleHQqIGZpcnN0Q29udGV4
dCwgUmVuZGVyU1ZHSW5saW5lVGV4dCogbGFzdENvbnRleHQsCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1dGVzLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEF0dHJpYnV0ZXMuY3BwCmluZGV4
IGE5MjU5NmNlZWVkYmUyNWFmNzc3ZGY0YTRjODNjZDNlZjk3YjljZTguLjY3ZmEwZmE5ODJhZDYw
YmE3MjY1MWE4NDU0OTU4MWY3ZWI1MGNkMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEF0dHJpYnV0ZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEF0dHJpYnV0ZXMuY3BwCkBAIC02Miw4ICs2
Miw4IEBAIHZvaWQgU1ZHVGV4dExheW91dEF0dHJpYnV0ZXM6OmR1bXAoKSBjb25zdAogICAgIGZw
cmludGYoc3RkZXJyLCAiY29udGV4dDogJXBcbiIsIG1fY29udGV4dCk7CiAgICAgY29uc3QgU1ZH
Q2hhcmFjdGVyRGF0YU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9jaGFyYWN0ZXJEYXRhTWFw
LmVuZCgpOwogICAgIGZvciAoU1ZHQ2hhcmFjdGVyRGF0YU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtX2NoYXJhY3RlckRhdGFNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAg
IGNvbnN0IFNWR0NoYXJhY3RlckRhdGEmIGRhdGEgPSBpdC0+c2Vjb25kOwotICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIiAtLS0+IHBvcz0laSwgZGF0YT17IiwgaXQtPmZpcnN0KTsKKyAgICAgICAg
Y29uc3QgU1ZHQ2hhcmFjdGVyRGF0YSYgZGF0YSA9IGl0LT52YWx1ZTsKKyAgICAgICAgZnByaW50
ZihzdGRlcnIsICIgLS0tPiBwb3M9JWksIGRhdGE9eyIsIGl0LT5rZXkpOwogICAgICAgICBkdW1w
U1ZHQ2hhcmFjdGVyRGF0YU1hcFZhbHVlKCJ4IiwgZGF0YS54KTsKICAgICAgICAgZHVtcFNWR0No
YXJhY3RlckRhdGFNYXBWYWx1ZSgieSIsIGRhdGEueSk7CiAgICAgICAgIGR1bXBTVkdDaGFyYWN0
ZXJEYXRhTWFwVmFsdWUoImR4IiwgZGF0YS5keCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlci5j
cHAKaW5kZXggYmUyYTEyZmU5NjBiNzkyNDgzMTNkZjM2OTkxNDUwM2ZlZTlhMjkxYi4uYjk2OWE1
MzE5ZTgwYWM3ODcyYTVlNDFkOGRlNzc0MzA0OGJkYzQzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNC
dWlsZGVyLmNwcApAQCAtMTQ5LDcgKzE0OSw3IEBAIHZvaWQgU1ZHVGV4dExheW91dEF0dHJpYnV0
ZXNCdWlsZGVyOjpidWlsZENoYXJhY3RlckRhdGFNYXAoUmVuZGVyU1ZHVGV4dCogdGV4dFJvCiAg
ICAgICAgIGRhdGEueSA9IDA7CiAgICAgICAgIG1fY2hhcmFjdGVyRGF0YU1hcC5zZXQoMSwgZGF0
YSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgU1ZHQ2hhcmFjdGVyRGF0YSYgZGF0YSA9IGl0LT5z
ZWNvbmQ7CisgICAgICAgIFNWR0NoYXJhY3RlckRhdGEmIGRhdGEgPSBpdC0+dmFsdWU7CiAgICAg
ICAgIGlmIChkYXRhLnggPT0gU1ZHVGV4dExheW91dEF0dHJpYnV0ZXM6OmVtcHR5VmFsdWUoKSkK
ICAgICAgICAgICAgIGRhdGEueCA9IDA7CiAgICAgICAgIGlmIChkYXRhLnkgPT0gU1ZHVGV4dExh
eW91dEF0dHJpYnV0ZXM6OmVtcHR5VmFsdWUoKSkKQEAgLTIxMyw3ICsyMTMsNyBAQCB2b2lkIFNW
R1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlcjo6ZmlsbENoYXJhY3RlckRhdGFNYXAoY29uc3Qg
VGV4dFBvc2l0aW9uJiBwbwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAg
ICAgICB1cGRhdGVDaGFyYWN0ZXJEYXRhKGksIGxhc3RSb3RhdGlvbiwgaXQtPnNlY29uZCwgbGVu
Z3RoQ29udGV4dCwgeExpc3RQdHIsIHlMaXN0UHRyLCBkeExpc3RQdHIsIGR5TGlzdFB0ciwgcm90
YXRlTGlzdFB0cik7CisgICAgICAgIHVwZGF0ZUNoYXJhY3RlckRhdGEoaSwgbGFzdFJvdGF0aW9u
LCBpdC0+dmFsdWUsIGxlbmd0aENvbnRleHQsIHhMaXN0UHRyLCB5TGlzdFB0ciwgZHhMaXN0UHRy
LCBkeUxpc3RQdHIsIHJvdGF0ZUxpc3RQdHIpOwogICAgIH0KIAogICAgIC8vIFRoZSBsYXN0IHJv
dGF0aW9uIHZhbHVlIGFsd2F5cyBzcGFucyB0aGUgd2hvbGUgc2NvcGUuCkBAIC0yMjksNyArMjI5
LDcgQEAgdm9pZCBTVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXI6OmZpbGxDaGFyYWN0ZXJE
YXRhTWFwKGNvbnN0IFRleHRQb3NpdGlvbiYgcG8KICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICB9CiAKLSAgICAgICAgaXQtPnNlY29uZC5yb3RhdGUgPSBsYXN0Um90YXRpb247CisgICAg
ICAgIGl0LT52YWx1ZS5yb3RhdGUgPSBsYXN0Um90YXRpb247CiAgICAgfQogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lLmNwcApp
bmRleCA1YzU0OWIyMWM4NzUyMDg0NzI0NmFmMjU0ZmQwNTlmMmUzYjliNWU4Li5iYTJiNzYzOWQz
Zjk1YjczODk0NzVmYTJkYzAwYzlhNmFhODViMzE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZS5jcHAKQEAgLTQ3NSw3ICs0NzUs
NyBAQCB2b2lkIFNWR1RleHRMYXlvdXRFbmdpbmU6OmxheW91dFRleHRPbkxpbmVPclBhdGgoU1ZH
SW5saW5lVGV4dEJveCogdGV4dEJveCwgUmVuZAogICAgICAgICBTVkdDaGFyYWN0ZXJEYXRhIGRh
dGE7CiAgICAgICAgIFNWR0NoYXJhY3RlckRhdGFNYXA6Oml0ZXJhdG9yIGl0ID0gY2hhcmFjdGVy
RGF0YU1hcC5maW5kKG1fbG9naWNhbENoYXJhY3Rlck9mZnNldCArIDEpOwogICAgICAgICBpZiAo
aXQgIT0gY2hhcmFjdGVyRGF0YU1hcC5lbmQoKSkKLSAgICAgICAgICAgIGRhdGEgPSBpdC0+c2Vj
b25kOworICAgICAgICAgICAgZGF0YSA9IGl0LT52YWx1ZTsKIAogICAgICAgICBmbG9hdCB4ID0g
ZGF0YS54OwogICAgICAgICBmbG9hdCB5ID0gZGF0YS55OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljc0J1aWxkZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljc0J1aWxkZXIuY3BwCmluZGV4IGZmOWNh
MzA3M2ZjZmY4NTcyZTIyNzFmNmQxOTc4YTQ0ZjhlYThmNWIuLmNhNzQ4MWYzOTgwOWU5NGQ5MGMw
MTk0MzQxN2ZjZjgzNzliOGY3ZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHVGV4dE1ldHJpY3NCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNzQnVpbGRlci5jcHAKQEAgLTE2MSw3ICsxNjEsNyBAQCB2
b2lkIFNWR1RleHRNZXRyaWNzQnVpbGRlcjo6bWVhc3VyZVRleHRSZW5kZXJlcihSZW5kZXJTVkdJ
bmxpbmVUZXh0KiB0ZXh0LCBNZWFzdQogICAgICAgICAgICAgaWYgKGRhdGEtPmFsbENoYXJhY3Rl
cnNNYXApIHsKICAgICAgICAgICAgICAgICBjb25zdCBTVkdDaGFyYWN0ZXJEYXRhTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IGRhdGEtPmFsbENoYXJhY3RlcnNNYXAtPmZpbmQoZGF0YS0+dmFsdWVM
aXN0UG9zaXRpb24gKyBtX3RleHRQb3NpdGlvbiAtIGRhdGEtPnNraXBwZWRDaGFyYWN0ZXJzIC0g
c3Vycm9nYXRlUGFpckNoYXJhY3RlcnMgKyAxKTsKICAgICAgICAgICAgICAgICBpZiAoaXQgIT0g
ZGF0YS0+YWxsQ2hhcmFjdGVyc01hcC0+ZW5kKCkpCi0gICAgICAgICAgICAgICAgICAgIGF0dHJp
YnV0ZXMtPmNoYXJhY3RlckRhdGFNYXAoKS5zZXQobV90ZXh0UG9zaXRpb24gKyAxLCBpdC0+c2Vj
b25kKTsKKyAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcy0+Y2hhcmFjdGVyRGF0YU1hcCgp
LnNldChtX3RleHRQb3NpdGlvbiArIDEsIGl0LT52YWx1ZSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB0ZXh0TWV0cmljc1ZhbHVlcy0+YXBwZW5kKG1fY3VycmVudE1ldHJpY3MpOwogICAg
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhU3lu
Yy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5jcHAKaW5kZXgg
NDQyMDljNmY1OWQwZDJhMWQ3ZjMzYjJmMTEyOWE4N2U5MDQ1ZTdjZC4uZmNiMTI2YTFkNTZkNWFm
Y2M5YWJlYmE2MjFmYjA3NzhlMzJiN2ZlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3Rv
cmFnZUFyZWFTeW5jLmNwcApAQCAtMTg4LDcgKzE4OCw3IEBAIHZvaWQgU3RvcmFnZUFyZWFTeW5j
OjpzeW5jVGltZXJGaXJlZChUaW1lcjxTdG9yYWdlQXJlYVN5bmM+KikKICAgICAgICAgICAgICAg
ICBwYXJ0aWFsU3luYyA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBtX2l0ZW1zUGVuZGluZ1N5bmMuc2V0KGNoYW5nZWRfaXQtPmZpcnN0
Lmlzb2xhdGVkQ29weSgpLCBjaGFuZ2VkX2l0LT5zZWNvbmQuaXNvbGF0ZWRDb3B5KCkpOworICAg
ICAgICAgICAgbV9pdGVtc1BlbmRpbmdTeW5jLnNldChjaGFuZ2VkX2l0LT5rZXkuaXNvbGF0ZWRD
b3B5KCksIGNoYW5nZWRfaXQtPnZhbHVlLmlzb2xhdGVkQ29weSgpKTsKICAgICAgICAgfQogCiAg
ICAgICAgIGlmIChwYXJ0aWFsU3luYykgewpAQCAtMTk4LDcgKzE5OCw3IEBAIHZvaWQgU3RvcmFn
ZUFyZWFTeW5jOjpzeW5jVGltZXJGaXJlZChUaW1lcjxTdG9yYWdlQXJlYVN5bmM+KikKICAgICAg
ICAgICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+OjppdGVyYXRvciBwZW5kaW5nX2l0ID0gbV9p
dGVtc1BlbmRpbmdTeW5jLmJlZ2luKCk7CiAgICAgICAgICAgICBIYXNoTWFwPFN0cmluZywgU3Ry
aW5nPjo6aXRlcmF0b3IgcGVuZGluZ19lbmQgPSBtX2l0ZW1zUGVuZGluZ1N5bmMuZW5kKCk7CiAg
ICAgICAgICAgICBmb3IgKDsgcGVuZGluZ19pdCAhPSBwZW5kaW5nX2VuZDsgKytwZW5kaW5nX2l0
KQotICAgICAgICAgICAgICAgIG1fY2hhbmdlZEl0ZW1zLnJlbW92ZShwZW5kaW5nX2l0LT5maXJz
dCk7CisgICAgICAgICAgICAgICAgbV9jaGFuZ2VkSXRlbXMucmVtb3ZlKHBlbmRpbmdfaXQtPmtl
eSk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIW1fc3luY1NjaGVkdWxlZCkgewpAQCAtMzQ1
LDcgKzM0NSw3IEBAIHZvaWQgU3RvcmFnZUFyZWFTeW5jOjpwZXJmb3JtSW1wb3J0KCkKICAgICBI
YXNoTWFwPFN0cmluZywgU3RyaW5nPjo6aXRlcmF0b3IgZW5kID0gaXRlbU1hcC5lbmQoKTsKIAog
ICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIG1fc3RvcmFnZUFyZWEtPmltcG9y
dEl0ZW0oaXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsKKyAgICAgICAgbV9zdG9yYWdlQXJlYS0+aW1w
b3J0SXRlbShpdC0+a2V5LCBpdC0+dmFsdWUpOwogCiAgICAgbWFya0ltcG9ydGVkKCk7CiB9CkBA
IC00MzksMTMgKzQzOSwxMyBAQCB2b2lkIFN0b3JhZ2VBcmVhU3luYzo6c3luYyhib29sIGNsZWFy
SXRlbXMsIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBpdGVtcwogICAgIHRyYW5zYWN0
aW9uLmJlZ2luKCk7CiAgICAgZm9yIChIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBpdGVtcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgLy8g
QmFzZWQgb24gdGhlIG51bGwtbmVzcyBvZiB0aGUgc2Vjb25kIGFyZ3VtZW50LCBkZWNpZGUgd2hl
dGhlciB0aGlzIGlzIGFuIGluc2VydCBvciBhIGRlbGV0ZS4KLSAgICAgICAgU1FMaXRlU3RhdGVt
ZW50JiBxdWVyeSA9IGl0LT5zZWNvbmQuaXNOdWxsKCkgPyByZW1vdmUgOiBpbnNlcnQ7CisgICAg
ICAgIFNRTGl0ZVN0YXRlbWVudCYgcXVlcnkgPSBpdC0+dmFsdWUuaXNOdWxsKCkgPyByZW1vdmUg
OiBpbnNlcnQ7CiAKLSAgICAgICAgcXVlcnkuYmluZFRleHQoMSwgaXQtPmZpcnN0KTsKKyAgICAg
ICAgcXVlcnkuYmluZFRleHQoMSwgaXQtPmtleSk7CiAKICAgICAgICAgLy8gSWYgdGhlIHNlY29u
ZCBhcmd1bWVudCBpcyBub24tbnVsbCwgd2UncmUgZG9pbmcgYW4gaW5zZXJ0LCBzbyBiaW5kIGl0
IGFzIHRoZSB2YWx1ZS4KLSAgICAgICAgaWYgKCFpdC0+c2Vjb25kLmlzTnVsbCgpKQotICAgICAg
ICAgICAgcXVlcnkuYmluZEJsb2IoMiwgaXQtPnNlY29uZCk7CisgICAgICAgIGlmICghaXQtPnZh
bHVlLmlzTnVsbCgpKQorICAgICAgICAgICAgcXVlcnkuYmluZEJsb2IoMiwgaXQtPnZhbHVlKTsK
IAogICAgICAgICBpbnQgcmVzdWx0ID0gcXVlcnkuc3RlcCgpOwogICAgICAgICBpZiAocmVzdWx0
ICE9IFNRTFJlc3VsdERvbmUpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
U3RvcmFnZU1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VNYXAuY3BwCmlu
ZGV4IDhlNDJkMmYxNzZkZDNiMTExMmEwMWE1MWQ4ZGI2MmY0YjM4YmJhMzUuLjQwZTFhMzhmMWNh
NGE3OWYwY2UyNDcwMTE1MzQ3YWRiOTI5ZjQ5ODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvU3RvcmFnZU1hcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9y
YWdlTWFwLmNwcApAQCAtODksNyArODksNyBAQCBTdHJpbmcgU3RvcmFnZU1hcDo6a2V5KHVuc2ln
bmVkIGluZGV4KQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKICAgICBzZXRJdGVyYXRvclRv
SW5kZXgoaW5kZXgpOwotICAgIHJldHVybiBtX2l0ZXJhdG9yLT5maXJzdDsKKyAgICByZXR1cm4g
bV9pdGVyYXRvci0+a2V5OwogfQogCiBTdHJpbmcgU3RvcmFnZU1hcDo6Z2V0SXRlbShjb25zdCBT
dHJpbmcmIGtleSkgY29uc3QKQEAgLTEzMyw3ICsxMzMsNyBAQCBQYXNzUmVmUHRyPFN0b3JhZ2VN
YXA+IFN0b3JhZ2VNYXA6OnNldEl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYg
dmFsdQogCiAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OkFkZFJlc3VsdCBhZGRSZXN1bHQg
PSBtX21hcC5hZGQoa2V5LCB2YWx1ZSk7CiAgICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSkK
LSAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSB2YWx1ZTsKKyAgICAgICAgYWRk
UmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IHZhbHVlOwogCiAgICAgaW52YWxpZGF0ZUl0ZXJhdG9y
KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFj
ZUltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5j
cHAKaW5kZXggOWQxYWM1MTdhMGUyZTdiM2YyNmI4MjNiMjg5YTU5Mzk1OGJkYzhhMC4uNDUwMWIx
MWZiYzE1Y2Y0MjM5ZDA3ZmMzNzQ3NjQxNmRiYjc1ZWZjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAKQEAgLTU1LDcgKzU1LDcgQEAgUGFz
c1JlZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6bG9jYWxTdG9y
YWdlTmFtZXNwYWNlKGNvbnN0IFMKICAgICAgICAgcmV0dXJuIHN0b3JhZ2VOYW1lc3BhY2UucmVs
ZWFzZSgpOwogICAgIH0KIAotICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgIHJldHVybiBpdC0+
dmFsdWU7CiB9CiAKIFBhc3NSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gU3RvcmFnZU5hbWVzcGFj
ZUltcGw6OnNlc3Npb25TdG9yYWdlTmFtZXNwYWNlKHVuc2lnbmVkIHF1b3RhKQpAQCAtOTcsNyAr
OTcsNyBAQCBQYXNzUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IFN0b3JhZ2VOYW1lc3BhY2VJbXBs
Ojpjb3B5KCkKIAogICAgIFN0b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBlbmQgPSBtX3N0b3JhZ2VB
cmVhTWFwLmVuZCgpOwogICAgIGZvciAoU3RvcmFnZUFyZWFNYXA6Oml0ZXJhdG9yIGkgPSBtX3N0
b3JhZ2VBcmVhTWFwLmJlZ2luKCk7IGkgIT0gZW5kOyArK2kpCi0gICAgICAgIG5ld05hbWVzcGFj
ZS0+bV9zdG9yYWdlQXJlYU1hcC5zZXQoaS0+Zmlyc3QsIGktPnNlY29uZC0+Y29weSgpKTsKKyAg
ICAgICAgbmV3TmFtZXNwYWNlLT5tX3N0b3JhZ2VBcmVhTWFwLnNldChpLT5rZXksIGktPnZhbHVl
LT5jb3B5KCkpOwogICAgIHJldHVybiBuZXdOYW1lc3BhY2UucmVsZWFzZSgpOwogfQogCkBAIC0x
MzEsNyArMTMxLDcgQEAgdm9pZCBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6Y2xvc2UoKQogCiAgICAg
U3RvcmFnZUFyZWFNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fc3RvcmFnZUFyZWFNYXAuZW5kKCk7CiAg
ICAgZm9yIChTdG9yYWdlQXJlYU1hcDo6aXRlcmF0b3IgaXQgPSBtX3N0b3JhZ2VBcmVhTWFwLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+Y2xvc2UoKTsKKyAg
ICAgICAgaXQtPnZhbHVlLT5jbG9zZSgpOwogCiAgICAgaWYgKG1fc3luY01hbmFnZXIpCiAgICAg
ICAgIG1fc3luY01hbmFnZXItPmNsb3NlKCk7CkBAIC0xNTQsNyArMTU0LDcgQEAgdm9pZCBTdG9y
YWdlTmFtZXNwYWNlSW1wbDo6Y2xlYXJBbGxPcmlnaW5zRm9yRGVsZXRpb24oKQogCiAgICAgU3Rv
cmFnZUFyZWFNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fc3RvcmFnZUFyZWFNYXAuZW5kKCk7CiAgICAg
Zm9yIChTdG9yYWdlQXJlYU1hcDo6aXRlcmF0b3IgaXQgPSBtX3N0b3JhZ2VBcmVhTWFwLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+Y2xlYXJGb3JPcmlnaW5E
ZWxldGlvbigpOworICAgICAgICBpdC0+dmFsdWUtPmNsZWFyRm9yT3JpZ2luRGVsZXRpb24oKTsK
IH0KICAgICAKIHZvaWQgU3RvcmFnZU5hbWVzcGFjZUltcGw6OnN5bmMoKQpAQCAtMTYyLDcgKzE2
Miw3IEBAIHZvaWQgU3RvcmFnZU5hbWVzcGFjZUltcGw6OnN5bmMoKQogICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CiAgICAgU3RvcmFnZUFyZWFNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fc3RvcmFn
ZUFyZWFNYXAuZW5kKCk7CiAgICAgZm9yIChTdG9yYWdlQXJlYU1hcDo6aXRlcmF0b3IgaXQgPSBt
X3N0b3JhZ2VBcmVhTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNl
Y29uZC0+c3luYygpOworICAgICAgICBpdC0+dmFsdWUtPnN5bmMoKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0RvY3VtZW50
RXh0ZW5zaW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25z
LmNwcAppbmRleCBjYWMxYWVhMDdlMDkwZDc0ZTI1ZWEzNDYwMDlmMjVjN2Q0NjgwZTM5Li5jY2I2
MzIzZTQ3ZGE4NDFhNzYxY2I5M2ExZWM4ZWFkMTU3NTA5NmVjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmNwcApAQCAtMTU2LDcgKzE1Niw3IEBAIHZvaWQg
U1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZW1vdmVBbmltYXRpb25FbGVtZW50RnJvbVRhcmdldChT
VkdTTUlMRWxlbWVudCogYW5pCiAgICAgSGFzaE1hcDxTVkdFbGVtZW50KiwgSGFzaFNldDxTVkdT
TUlMRWxlbWVudCo+KiA+OjppdGVyYXRvciBpdCA9IG1fYW5pbWF0ZWRFbGVtZW50cy5maW5kKHRh
cmdldEVsZW1lbnQpOwogICAgIEFTU0VSVChpdCAhPSBtX2FuaW1hdGVkRWxlbWVudHMuZW5kKCkp
OwogICAgIAotICAgIEhhc2hTZXQ8U1ZHU01JTEVsZW1lbnQqPiogYW5pbWF0aW9uRWxlbWVudHNG
b3JUYXJnZXQgPSBpdC0+c2Vjb25kOworICAgIEhhc2hTZXQ8U1ZHU01JTEVsZW1lbnQqPiogYW5p
bWF0aW9uRWxlbWVudHNGb3JUYXJnZXQgPSBpdC0+dmFsdWU7CiAgICAgQVNTRVJUKCFhbmltYXRp
b25FbGVtZW50c0ZvclRhcmdldC0+aXNFbXB0eSgpKTsKIAogICAgIGFuaW1hdGlvbkVsZW1lbnRz
Rm9yVGFyZ2V0LT5yZW1vdmUoYW5pbWF0aW9uRWxlbWVudCk7CkBAIC0xNzMsNyArMTczLDcgQEAg
dm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlbW92ZUFsbEFuaW1hdGlvbkVsZW1lbnRzRnJv
bVRhcmdldChTVkdFbGVtZW50KiB0YXIKICAgICBpZiAoaXQgPT0gbV9hbmltYXRlZEVsZW1lbnRz
LmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBIYXNoU2V0PFNWR1NNSUxFbGVtZW50Kj4q
IGFuaW1hdGlvbkVsZW1lbnRzRm9yVGFyZ2V0ID0gaXQtPnNlY29uZDsKKyAgICBIYXNoU2V0PFNW
R1NNSUxFbGVtZW50Kj4qIGFuaW1hdGlvbkVsZW1lbnRzRm9yVGFyZ2V0ID0gaXQtPnZhbHVlOwog
ICAgIFZlY3RvcjxTVkdTTUlMRWxlbWVudCo+IHRvQmVSZXNldDsKIAogICAgIEhhc2hTZXQ8U1ZH
U01JTEVsZW1lbnQqPjo6aXRlcmF0b3IgZW5kID0gYW5pbWF0aW9uRWxlbWVudHNGb3JUYXJnZXQt
PmVuZCgpOwpAQCAtMjE5LDkgKzIxOSw5IEBAIHZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjph
ZGRQZW5kaW5nUmVzb3VyY2UoY29uc3QgQXRvbWljU3RyaW5nJiBpZCwgU1ZHU3R5bGVkCiAKICAg
ICAvLyBUaGUgSGFzaE1hcCBhZGQgZnVuY3Rpb24gbGVhdmVzIHRoZSBtYXAgYWxvbmUgYW5kIHJl
dHVybnMgYSBwb2ludGVyIHRvIHRoZSBlbGVtZW50IGluIHRoZQogICAgIC8vIG1hcCBpZiB0aGUg
ZWxlbWVudCBhbHJlYWR5IGV4aXN0cy4gU28gd2UgYWRkIHdpdGggYSB2YWx1ZSBvZiAwLCBhbmQg
aXQgZWl0aGVyIGZpbmRzIHRoZQotICAgIC8vIGV4aXN0aW5nIGVsZW1lbnQgb3IgYWRkcyBhIG5l
dyBvbmUgaW4gYSBzaW5nbGUgb3BlcmF0aW9uLiBUaGUgIi5pdGVyYXRvci0+c2Vjb25kIiBpZGlv
bSBnZXRzCisgICAgLy8gZXhpc3RpbmcgZWxlbWVudCBvciBhZGRzIGEgbmV3IG9uZSBpbiBhIHNp
bmdsZSBvcGVyYXRpb24uIFRoZSAiLml0ZXJhdG9yLT52YWx1ZSIgaWRpb20gZ2V0cwogICAgIC8v
IHVzIHRvIHRoZSBpdGVyYXRvciBmcm9tIGFkZCdzIHJlc3VsdCwgYW5kIHRoZW4gdG8gdGhlIHZh
bHVlIGluc2lkZSB0aGUgaGFzaCB0YWJsZS4KLSAgICBTVkdQZW5kaW5nRWxlbWVudHMqJiBzZXQg
PSBtX3BlbmRpbmdSZXNvdXJjZXMuYWRkKGlkLCAwKS5pdGVyYXRvci0+c2Vjb25kOworICAgIFNW
R1BlbmRpbmdFbGVtZW50cyomIHNldCA9IG1fcGVuZGluZ1Jlc291cmNlcy5hZGQoaWQsIDApLml0
ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoIXNldCkKICAgICAgICAgc2V0ID0gbmV3IFNWR1BlbmRp
bmdFbGVtZW50czsKICAgICBzZXQtPmFkZChlbGVtZW50KTsKQEAgLTI0Niw3ICsyNDYsNyBAQCBi
b29sIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6aXNFbGVtZW50UGVuZGluZ1Jlc291cmNlcyhTVkdT
dHlsZWRFbGVtZW50KiBlbGVtZW50KQogCiAgICAgSGFzaE1hcDxBdG9taWNTdHJpbmcsIFNWR1Bl
bmRpbmdFbGVtZW50cyo+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BlbmRpbmdSZXNvdXJjZXMu
ZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPEF0b21pY1N0cmluZywgU1ZHUGVuZGluZ0VsZW1lbnRz
Kj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wZW5kaW5nUmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgewotICAgICAgICBTVkdQZW5kaW5nRWxlbWVudHMqIGVsZW1lbnRzID0gaXQt
PnNlY29uZDsKKyAgICAgICAgU1ZHUGVuZGluZ0VsZW1lbnRzKiBlbGVtZW50cyA9IGl0LT52YWx1
ZTsKICAgICAgICAgQVNTRVJUKGVsZW1lbnRzKTsKIAogICAgICAgICBpZiAoZWxlbWVudHMtPmNv
bnRhaW5zKGVsZW1lbnQpKQpAQCAtMjc0LDEzICsyNzQsMTMgQEAgdm9pZCBTVkdEb2N1bWVudEV4
dGVuc2lvbnM6OnJlbW92ZUVsZW1lbnRGcm9tUGVuZGluZ1Jlc291cmNlcyhTVkdTdHlsZWRFbGVt
ZW50KgogICAgICAgICBWZWN0b3I8QXRvbWljU3RyaW5nPiB0b0JlUmVtb3ZlZDsKICAgICAgICAg
SGFzaE1hcDxBdG9taWNTdHJpbmcsIFNWR1BlbmRpbmdFbGVtZW50cyo+OjppdGVyYXRvciBlbmQg
PSBtX3BlbmRpbmdSZXNvdXJjZXMuZW5kKCk7CiAgICAgICAgIGZvciAoSGFzaE1hcDxBdG9taWNT
dHJpbmcsIFNWR1BlbmRpbmdFbGVtZW50cyo+OjppdGVyYXRvciBpdCA9IG1fcGVuZGluZ1Jlc291
cmNlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIFNWR1BlbmRpbmdF
bGVtZW50cyogZWxlbWVudHMgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgU1ZHUGVuZGluZ0Vs
ZW1lbnRzKiBlbGVtZW50cyA9IGl0LT52YWx1ZTsKICAgICAgICAgICAgIEFTU0VSVChlbGVtZW50
cyk7CiAgICAgICAgICAgICBBU1NFUlQoIWVsZW1lbnRzLT5pc0VtcHR5KCkpOwogCiAgICAgICAg
ICAgICBlbGVtZW50cy0+cmVtb3ZlKGVsZW1lbnQpOwogICAgICAgICAgICAgaWYgKGVsZW1lbnRz
LT5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgdG9CZVJlbW92ZWQuYXBwZW5kKGl0LT5maXJz
dCk7CisgICAgICAgICAgICAgICAgdG9CZVJlbW92ZWQuYXBwZW5kKGl0LT5rZXkpOwogICAgICAg
ICB9CiAKICAgICAgICAgZWxlbWVudC0+Y2xlYXJIYXNQZW5kaW5nUmVzb3VyY2VzSWZQb3NzaWJs
ZSgpOwpAQCAtMjk2LDEzICsyOTYsMTMgQEAgdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJl
bW92ZUVsZW1lbnRGcm9tUGVuZGluZ1Jlc291cmNlcyhTVkdTdHlsZWRFbGVtZW50KgogICAgICAg
ICBWZWN0b3I8QXRvbWljU3RyaW5nPiB0b0JlUmVtb3ZlZDsKICAgICAgICAgSGFzaE1hcDxBdG9t
aWNTdHJpbmcsIFNWR1BlbmRpbmdFbGVtZW50cyo+OjppdGVyYXRvciBlbmQgPSBtX3BlbmRpbmdS
ZXNvdXJjZXNGb3JSZW1vdmFsLmVuZCgpOwogICAgICAgICBmb3IgKEhhc2hNYXA8QXRvbWljU3Ry
aW5nLCBTVkdQZW5kaW5nRWxlbWVudHMqPjo6aXRlcmF0b3IgaXQgPSBtX3BlbmRpbmdSZXNvdXJj
ZXNGb3JSZW1vdmFsLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgU1ZH
UGVuZGluZ0VsZW1lbnRzKiBlbGVtZW50cyA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICBTVkdQ
ZW5kaW5nRWxlbWVudHMqIGVsZW1lbnRzID0gaXQtPnZhbHVlOwogICAgICAgICAgICAgQVNTRVJU
KGVsZW1lbnRzKTsKICAgICAgICAgICAgIEFTU0VSVCghZWxlbWVudHMtPmlzRW1wdHkoKSk7CiAK
ICAgICAgICAgICAgIGVsZW1lbnRzLT5yZW1vdmUoZWxlbWVudCk7CiAgICAgICAgICAgICBpZiAo
ZWxlbWVudHMtPmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICB0b0JlUmVtb3ZlZC5hcHBlbmQo
aXQtPmZpcnN0KTsKKyAgICAgICAgICAgICAgICB0b0JlUmVtb3ZlZC5hcHBlbmQoaXQtPmtleSk7
CiAgICAgICAgIH0KIAogICAgICAgICAvLyBXZSB1c2UgdGhlIHJlbW92ZVBlbmRpbmdSZXNvdXJj
ZUZvclJlbW92YWwgZnVuY3Rpb24gaGVyZSBiZWNhdXNlIGl0IGRlYWxzIHdpdGggc2V0IGxpZmV0
aW1lIGNvcnJlY3RseS4KQEAgLTM2Miw3ICszNjIsNyBAQCBIYXNoU2V0PFNWR0VsZW1lbnQqPiog
U1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpzZXRPZkVsZW1lbnRzUmVmZXJlbmNpbmdUYXJnZXQoU1ZH
RQogICAgIGNvbnN0IEhhc2hNYXA8U1ZHRWxlbWVudCosIE93blB0cjxIYXNoU2V0PFNWR0VsZW1l
bnQqPiA+ID46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9lbGVtZW50RGVwZW5kZW5jaWVzLmZpbmQo
cmVmZXJlbmNlZEVsZW1lbnQpOwogICAgIGlmIChpdCA9PSBtX2VsZW1lbnREZXBlbmRlbmNpZXMu
ZW5kKCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBpdC0+c2Vjb25kLmdldCgpOwor
ICAgIHJldHVybiBpdC0+dmFsdWUuZ2V0KCk7CiB9CiAKIHZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNp
b25zOjphZGRFbGVtZW50UmVmZXJlbmNpbmdUYXJnZXQoU1ZHRWxlbWVudCogcmVmZXJlbmNpbmdF
bGVtZW50LCBTVkdFbGVtZW50KiByZWZlcmVuY2VkRWxlbWVudCkKQEAgLTM4Niw4ICszODYsOCBA
QCB2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlQWxsVGFyZ2V0UmVmZXJlbmNlc0Zv
ckVsZW1lbnQoU1ZHRWxlbWVudCogcmVmZQogCiAgICAgSGFzaE1hcDxTVkdFbGVtZW50KiwgT3du
UHRyPEhhc2hTZXQ8U1ZHRWxlbWVudCo+ID4gPjo6aXRlcmF0b3IgZW5kID0gbV9lbGVtZW50RGVw
ZW5kZW5jaWVzLmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDxTVkdFbGVtZW50KiwgT3duUHRyPEhh
c2hTZXQ8U1ZHRWxlbWVudCo+ID4gPjo6aXRlcmF0b3IgaXQgPSBtX2VsZW1lbnREZXBlbmRlbmNp
ZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFNWR0VsZW1lbnQqIHJlZmVy
ZW5jZWRFbGVtZW50ID0gaXQtPmZpcnN0OwotICAgICAgICBIYXNoU2V0PFNWR0VsZW1lbnQqPiog
cmVmZXJlbmNpbmdFbGVtZW50cyA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIFNWR0VsZW1l
bnQqIHJlZmVyZW5jZWRFbGVtZW50ID0gaXQtPmtleTsKKyAgICAgICAgSGFzaFNldDxTVkdFbGVt
ZW50Kj4qIHJlZmVyZW5jaW5nRWxlbWVudHMgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgIEhh
c2hTZXQ8U1ZHRWxlbWVudCo+OjppdGVyYXRvciBzZXRJdCA9IHJlZmVyZW5jaW5nRWxlbWVudHMt
PmZpbmQocmVmZXJlbmNpbmdFbGVtZW50KTsKICAgICAgICAgaWYgKHNldEl0ID09IHJlZmVyZW5j
aW5nRWxlbWVudHMtPmVuZCgpKQogICAgICAgICAgICAgY29udGludWU7CkBAIC00MDgsMTAgKzQw
OCwxMCBAQCB2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlQWxsRWxlbWVudFJlZmVy
ZW5jZXNGb3JUYXJnZXQoU1ZHRWxlbWVudCogcmVmZQogICAgIEhhc2hNYXA8U1ZHRWxlbWVudCos
IE93blB0cjxIYXNoU2V0PFNWR0VsZW1lbnQqPiA+ID46Oml0ZXJhdG9yIGl0ID0gbV9lbGVtZW50
RGVwZW5kZW5jaWVzLmZpbmQocmVmZXJlbmNlZEVsZW1lbnQpOwogICAgIGlmIChpdCA9PSBtX2Vs
ZW1lbnREZXBlbmRlbmNpZXMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQoaXQt
PmZpcnN0ID09IHJlZmVyZW5jZWRFbGVtZW50KTsKKyAgICBBU1NFUlQoaXQtPmtleSA9PSByZWZl
cmVuY2VkRWxlbWVudCk7CiAgICAgVmVjdG9yPFNWR0VsZW1lbnQqPiB0b0JlTm90aWZpZWQ7CiAK
LSAgICBIYXNoU2V0PFNWR0VsZW1lbnQqPiogcmVmZXJlbmNpbmdFbGVtZW50cyA9IGl0LT5zZWNv
bmQuZ2V0KCk7CisgICAgSGFzaFNldDxTVkdFbGVtZW50Kj4qIHJlZmVyZW5jaW5nRWxlbWVudHMg
PSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgSGFzaFNldDxTVkdFbGVtZW50Kj46Oml0ZXJhdG9yIHNl
dEVuZCA9IHJlZmVyZW5jaW5nRWxlbWVudHMtPmVuZCgpOwogICAgIGZvciAoSGFzaFNldDxTVkdF
bGVtZW50Kj46Oml0ZXJhdG9yIHNldEl0ID0gcmVmZXJlbmNpbmdFbGVtZW50cy0+YmVnaW4oKTsg
c2V0SXQgIT0gc2V0RW5kOyArK3NldEl0KQogICAgICAgICB0b0JlTm90aWZpZWQuYXBwZW5kKCpz
ZXRJdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAKaW5kZXggNjkzZTI4NzcwZTE0ZWQzMmMw
M2RiYTZlMGJiYWM4ZDFkN2ZlYzZiNC4uNGI5ODgzYjc4ZWU1NTY3N2U0OWZhMmMwNGE5MTZkN2Rl
MDA2MjI2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcApAQCAtNjgsNyArNjgsNyBAQCBT
VkdFbGVtZW50Ojp+U1ZHRWxlbWVudCgpCiAgICAgICAgIFNWR0VsZW1lbnRSYXJlRGF0YTo6U1ZH
RWxlbWVudFJhcmVEYXRhTWFwOjppdGVyYXRvciBpdCA9IHJhcmVEYXRhTWFwLmZpbmQodGhpcyk7
CiAgICAgICAgIEFTU0VSVChpdCAhPSByYXJlRGF0YU1hcC5lbmQoKSk7CiAKLSAgICAgICAgU1ZH
RWxlbWVudFJhcmVEYXRhKiByYXJlRGF0YSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFNWR0VsZW1l
bnRSYXJlRGF0YSogcmFyZURhdGEgPSBpdC0+dmFsdWU7CiAgICAgICAgIHJhcmVEYXRhLT5kZXN0
cm95QW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzKCk7CiAgICAgICAgIGlmIChTVkdDdXJzb3JF
bGVtZW50KiBjdXJzb3JFbGVtZW50ID0gcmFyZURhdGEtPmN1cnNvckVsZW1lbnQoKSkKICAgICAg
ICAgICAgIGN1cnNvckVsZW1lbnQtPnJlbW92ZUNsaWVudCh0aGlzKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNvbnRhaW5lci5jcHAKaW5kZXggMjNjNDhj
NjI3MjhmNGYyMGFlMDBjY2MzM2ViZWYyNTdhMDNhMzEzMC4uYTEwYmU4NTQzNjlhMjhiMGY0MWEx
YmVjYzAxNWU0M2ExODczMzUzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1h
dGlvbi9TTUlMVGltZUNvbnRhaW5lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1h
dGlvbi9TTUlMVGltZUNvbnRhaW5lci5jcHAKQEAgLTE5MCw3ICsxOTAsNyBAQCB2b2lkIFNNSUxU
aW1lQ29udGFpbmVyOjpzZXRFbGFwc2VkKFNNSUxUaW1lIHRpbWUpCiAjZW5kaWYKICAgICBHcm91
cGVkQW5pbWF0aW9uc01hcDo6aXRlcmF0b3IgZW5kID0gbV9zY2hlZHVsZWRBbmltYXRpb25zLmVu
ZCgpOwogICAgIGZvciAoR3JvdXBlZEFuaW1hdGlvbnNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zY2hl
ZHVsZWRBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBBbmlt
YXRpb25zVmVjdG9yKiBzY2hlZHVsZWQgPSBpdC0+c2Vjb25kOworICAgICAgICBBbmltYXRpb25z
VmVjdG9yKiBzY2hlZHVsZWQgPSBpdC0+dmFsdWU7CiAgICAgICAgIHVuc2lnbmVkIHNpemUgPSBz
Y2hlZHVsZWQtPnNpemUoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IHNpemU7
IG4rKykKICAgICAgICAgICAgIHNjaGVkdWxlZC0+YXQobiktPnJlc2V0KCk7CkBAIC0yNjgsNyAr
MjY4LDcgQEAgdm9pZCBTTUlMVGltZUNvbnRhaW5lcjo6dXBkYXRlQW5pbWF0aW9ucyhTTUlMVGlt
ZSBlbGFwc2VkLCBib29sIHNlZWtUb1RpbWUpCiAgICAgQW5pbWF0aW9uc1ZlY3RvciBhbmltYXRp
b25zVG9BcHBseTsKICAgICBHcm91cGVkQW5pbWF0aW9uc01hcDo6aXRlcmF0b3IgZW5kID0gbV9z
Y2hlZHVsZWRBbmltYXRpb25zLmVuZCgpOwogICAgIGZvciAoR3JvdXBlZEFuaW1hdGlvbnNNYXA6
Oml0ZXJhdG9yIGl0ID0gbV9zY2hlZHVsZWRBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgewotICAgICAgICBBbmltYXRpb25zVmVjdG9yKiBzY2hlZHVsZWQgPSBpdC0+c2Vjb25k
OworICAgICAgICBBbmltYXRpb25zVmVjdG9yKiBzY2hlZHVsZWQgPSBpdC0+dmFsdWU7CiAKICAg
ICAgICAgLy8gU29ydCBhY2NvcmRpbmcgdG8gcHJpb3JpdHkuIEVsZW1lbnRzIHdpdGggbGF0ZXIg
YmVnaW4gdGltZSBoYXZlIGhpZ2hlciBwcmlvcml0eS4KICAgICAgICAgLy8gSW4gY2FzZSBvZiBh
IHRpZSwgZG9jdW1lbnQgb3JkZXIgZGVjaWRlcy4gCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvU1ZHSW1hZ2VDYWNoZS5jcHAKaW5kZXggYTUxMjUwYmZhNDM5ODc0YjI5ZmZkNDIwMDdm
OTFhNWYyNzIxNDgwYS4uMzU4ZjJjYWE4N2ZkYWQzODNhZTlkNzExNjFjYWE1MjEwNzc0YTI1ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlQ2FjaGUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZUNhY2hlLmNwcApAQCAt
NDQsMTEgKzQ0LDExIEBAIFNWR0ltYWdlQ2FjaGU6On5TVkdJbWFnZUNhY2hlKCkKIAogICAgIElt
YWdlRGF0YU1hcDo6aXRlcmF0b3IgZW5kID0gbV9pbWFnZURhdGFNYXAuZW5kKCk7CiAgICAgZm9y
IChJbWFnZURhdGFNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pbWFnZURhdGFNYXAuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIC8vIENoZWNrcyBpZiB0aGUgY2xpZW50IChpdC0+Zmly
c3QpIGlzIHN0aWxsIHZhbGlkLiBUaGUgY2xpZW50IHNob3VsZCByZW1vdmUgaXRzZWxmIGZyb20g
dGhpcworICAgICAgICAvLyBDaGVja3MgaWYgdGhlIGNsaWVudCAoaXQtPmtleSkgaXMgc3RpbGwg
dmFsaWQuIFRoZSBjbGllbnQgc2hvdWxkIHJlbW92ZSBpdHNlbGYgZnJvbSB0aGlzCiAgICAgICAg
IC8vIGNhY2hlIGJlZm9yZSBpdHMgZW5kIG9mIGxpZmUsIG90aGVyd2lzZSB0aGUgZm9sbG93aW5n
IEFTU0VSVCB3aWxsIGNyYXNoIG9uIHB1cmUgdmlydHVhbAogICAgICAgICAvLyBmdW5jdGlvbiBj
YWxsIG9yIGEgZ2VuZXJhbCBjcmFzaC4KLSAgICAgICAgQVNTRVJUKGl0LT5maXJzdC0+cmVzb3Vy
Y2VDbGllbnRUeXBlKCkgPT0gQ2FjaGVkSW1hZ2VDbGllbnQ6OmV4cGVjdGVkVHlwZSgpKTsKLSAg
ICAgICAgZGVsZXRlIGl0LT5zZWNvbmQuYnVmZmVyOworICAgICAgICBBU1NFUlQoaXQtPmtleS0+
cmVzb3VyY2VDbGllbnRUeXBlKCkgPT0gQ2FjaGVkSW1hZ2VDbGllbnQ6OmV4cGVjdGVkVHlwZSgp
KTsKKyAgICAgICAgZGVsZXRlIGl0LT52YWx1ZS5idWZmZXI7CiAgICAgfQogCiAgICAgbV9pbWFn
ZURhdGFNYXAuY2xlYXIoKTsKQEAgLTYzLDcgKzYzLDcgQEAgdm9pZCBTVkdJbWFnZUNhY2hlOjpy
ZW1vdmVDbGllbnRGcm9tQ2FjaGUoY29uc3QgQ2FjaGVkSW1hZ2VDbGllbnQqIGNsaWVudCkKICAg
ICBpZiAoaXQgPT0gbV9pbWFnZURhdGFNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGRlbGV0ZSBpdC0+c2Vjb25kLmJ1ZmZlcjsKKyAgICBkZWxldGUgaXQtPnZhbHVlLmJ1ZmZlcjsK
ICAgICBtX2ltYWdlRGF0YU1hcC5yZW1vdmUoaXQpOwogfQogCkBAIC04MSwxNCArODEsMTQgQEAg
U1ZHSW1hZ2VDYWNoZTo6U2l6ZUFuZFNjYWxlcyBTVkdJbWFnZUNhY2hlOjpyZXF1ZXN0ZWRTaXpl
QW5kU2NhbGVzKGNvbnN0IENhY2hlZEkKICAgICBTaXplQW5kU2NhbGVzTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IG1fc2l6ZUFuZFNjYWxlc01hcC5maW5kKGNsaWVudCk7CiAgICAgaWYgKGl0ID09
IG1fc2l6ZUFuZFNjYWxlc01hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuIFNpemVBbmRTY2FsZXMo
KTsKLSAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICByZXR1cm4gaXQtPnZhbHVlOwogfQogCiB2
b2lkIFNWR0ltYWdlQ2FjaGU6OmltYWdlQ29udGVudENoYW5nZWQoKQogewogICAgIEltYWdlRGF0
YU1hcDo6aXRlcmF0b3IgZW5kID0gbV9pbWFnZURhdGFNYXAuZW5kKCk7CiAgICAgZm9yIChJbWFn
ZURhdGFNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pbWFnZURhdGFNYXAuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLmltYWdlTmVlZHNVcGRhdGUgPSB0cnVlOworICAg
ICAgICBpdC0+dmFsdWUuaW1hZ2VOZWVkc1VwZGF0ZSA9IHRydWU7CiAKICAgICAvLyBJZiB3ZSdy
ZSBpbiB0aGUgbWlkZGxlIG9mIGxheW91dCwgc3RhcnQgcmVkcmF3aW5nIGRpcnR5CiAgICAgLy8g
aW1hZ2VzIG9uIGEgdGltZXI7IG90aGVyd2lzZSBpdCdzIHNhZmUgdG8gZHJhdyBpbW1lZGlhdGVs
eS4KQEAgLTEwNCw3ICsxMDQsNyBAQCB2b2lkIFNWR0ltYWdlQ2FjaGU6OnJlZHJhdygpCiB7CiAg
ICAgSW1hZ2VEYXRhTWFwOjppdGVyYXRvciBlbmQgPSBtX2ltYWdlRGF0YU1hcC5lbmQoKTsKICAg
ICBmb3IgKEltYWdlRGF0YU1hcDo6aXRlcmF0b3IgaXQgPSBtX2ltYWdlRGF0YU1hcC5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgSW1hZ2VEYXRhJiBkYXRhID0gaXQtPnNlY29u
ZDsKKyAgICAgICAgSW1hZ2VEYXRhJiBkYXRhID0gaXQtPnZhbHVlOwogICAgICAgICBpZiAoIWRh
dGEuaW1hZ2VOZWVkc1VwZGF0ZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAvLyBJ
ZiB0aGUgY29udGVudCBjaGFuZ2VkIHdlIHJlZHJhdyB1c2luZyBvdXIgZXhpc3RpbmcgSW1hZ2VC
dWZmZXIuCkBAIC0xNDIsOSArMTQyLDkgQEAgSW1hZ2UqIFNWR0ltYWdlQ2FjaGU6Omxvb2t1cE9y
Q3JlYXRlQml0bWFwSW1hZ2VGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QqIHIKICAgICBp
ZiAoc2l6ZUl0ID09IG1fc2l6ZUFuZFNjYWxlc01hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuIElt
YWdlOjpudWxsSW1hZ2UoKTsKIAotICAgIEludFNpemUgc2l6ZSA9IHNpemVJdC0+c2Vjb25kLnNp
emU7Ci0gICAgZmxvYXQgem9vbSA9IHNpemVJdC0+c2Vjb25kLnpvb207Ci0gICAgZmxvYXQgc2Nh
bGUgPSBzaXplSXQtPnNlY29uZC5zY2FsZTsKKyAgICBJbnRTaXplIHNpemUgPSBzaXplSXQtPnZh
bHVlLnNpemU7CisgICAgZmxvYXQgem9vbSA9IHNpemVJdC0+dmFsdWUuem9vbTsKKyAgICBmbG9h
dCBzY2FsZSA9IHNpemVJdC0+dmFsdWUuc2NhbGU7CiAKICAgICAvLyBGSVhNRSAoODUzMzUpOiBU
aGlzIG5lZWRzIHRvIHRha2UgQ1NTIHRyYW5zZm9ybSBzY2FsZSBpbnRvIGFjY291bnQgYXMgd2Vs
bC4KICAgICBQYWdlKiBwYWdlID0gcmVuZGVyZXItPmRvY3VtZW50KCktPnBhZ2UoKTsKQEAgLTE1
Niw3ICsxNTYsNyBAQCBJbWFnZSogU1ZHSW1hZ2VDYWNoZTo6bG9va3VwT3JDcmVhdGVCaXRtYXBJ
bWFnZUZvclJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCogcgogICAgIC8vIExvb2t1cCBpbWFn
ZSBmb3IgY2xpZW50IGluIGNhY2hlIGFuZCBldmVudHVhbGx5IHVwZGF0ZSBpdC4KICAgICBJbWFn
ZURhdGFNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pbWFnZURhdGFNYXAuZmluZChjbGllbnQpOwogICAg
IGlmIChpdCAhPSBtX2ltYWdlRGF0YU1hcC5lbmQoKSkgewotICAgICAgICBJbWFnZURhdGEmIGRh
dGEgPSBpdC0+c2Vjb25kOworICAgICAgICBJbWFnZURhdGEmIGRhdGEgPSBpdC0+dmFsdWU7CiAK
ICAgICAgICAgLy8gQ29tbW9uIGNhc2U6IGltYWdlIHNpemUgJiB6b29tIHJlbWFpbmVkIHRoZSBz
YW1lLgogICAgICAgICBpZiAoZGF0YS5zaXplQW5kU2NhbGVzLnNpemUgPT0gc2l6ZSAmJiBkYXRh
LnNpemVBbmRTY2FsZXMuem9vbSA9PSB6b29tICYmIGRhdGEuc2l6ZUFuZFNjYWxlcy5zY2FsZSA9
PSBzY2FsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZpbHRlckJ1aWxkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZpbHRlckJ1aWxkZXIuaAppbmRleCAyMTdmZDFlMzhhYjc5ODA3YmUzMmUwNTI5OTNlZWQ0
MDhlZmUzZDI1Li5mMmViNDYwZGY3OTk0Y2RkOGI2MGYwYTA4MWM3OTc1MWIwOGI4ZDA3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWls
ZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVy
QnVpbGRlci5oCkBAIC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIC8vIE9u
bHkgYWxsb3dlZCBmb3IgZWZmZWN0cyBiZWxvbmdzIHRvIHRoaXMgYnVpbGRlci4KICAgICAgICAg
QVNTRVJUKG1fZWZmZWN0UmVmZXJlbmNlcy5jb250YWlucyhlZmZlY3QpKTsKLSAgICAgICAgcmV0
dXJuIG1fZWZmZWN0UmVmZXJlbmNlcy5maW5kKGVmZmVjdCktPnNlY29uZDsKKyAgICAgICAgcmV0
dXJuIG1fZWZmZWN0UmVmZXJlbmNlcy5maW5kKGVmZmVjdCktPnZhbHVlOwogICAgIH0KIAogICAg
IC8vIFJlcXVpcmVkIHRvIGNoYW5nZSB0aGUgYXR0cmlidXRlcyBvZiBhIGZpbHRlciBkdXJpbmcg
YW4gc3ZnQXR0cmlidXRlQ2hhbmdlZC4KQEAgLTY3LDcgKzY3LDcgQEAgcHJpdmF0ZToKICAgICB7
CiAgICAgICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBSZWZQdHI8RmlsdGVyRWZmZWN0PiA+Ojpp
dGVyYXRvciBlbmQgPSBtX2J1aWx0aW5FZmZlY3RzLmVuZCgpOwogICAgICAgICBmb3IgKEhhc2hN
YXA8QXRvbWljU3RyaW5nLCBSZWZQdHI8RmlsdGVyRWZmZWN0PiA+OjppdGVyYXRvciBpdGVyYXRv
ciA9IG1fYnVpbHRpbkVmZmVjdHMuYmVnaW4oKTsgaXRlcmF0b3IgIT0gZW5kOyArK2l0ZXJhdG9y
KQotICAgICAgICAgICAgIG1fZWZmZWN0UmVmZXJlbmNlcy5hZGQoaXRlcmF0b3ItPnNlY29uZCwg
RmlsdGVyRWZmZWN0U2V0KCkpOworICAgICAgICAgICAgIG1fZWZmZWN0UmVmZXJlbmNlcy5hZGQo
aXRlcmF0b3ItPnZhbHVlLCBGaWx0ZXJFZmZlY3RTZXQoKSk7CiAgICAgfQogCiAgICAgSGFzaE1h
cDxBdG9taWNTdHJpbmcsIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+ID4gbV9idWlsdGluRWZmZWN0czsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJv
cGVydHkuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVy
dHkuaAppbmRleCA2ZGZkYWM2ZGQ1NzhhZjMwZjZkZWFiN2NkMjY1ODM2MDQ0MmYzYWRmLi42YTFm
MDA5N2I2MWJjMGI1ZGIwOTgwMTU1MDkwM2MxOTA0NDk2N2JhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eS5oCkBAIC01OCw4ICs1
OCw4IEBAIHB1YmxpYzoKICAgICAgICAgQ2FjaGUqIGNhY2hlID0gYW5pbWF0ZWRQcm9wZXJ0eUNh
Y2hlKCk7CiAgICAgICAgIGNvbnN0IENhY2hlOjpjb25zdF9pdGVyYXRvciBlbmQgPSBjYWNoZS0+
ZW5kKCk7CiAgICAgICAgIGZvciAoQ2FjaGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY2FjaGUtPmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgaWYgKGl0LT5zZWNvbmQgPT0g
dGhpcykgewotICAgICAgICAgICAgICAgIGNhY2hlLT5yZW1vdmUoaXQtPmZpcnN0KTsKKyAgICAg
ICAgICAgIGlmIChpdC0+dmFsdWUgPT0gdGhpcykgeworICAgICAgICAgICAgICAgIGNhY2hlLT5y
ZW1vdmUoaXQtPmtleSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0F0
dHJpYnV0ZVRvUHJvcGVydHlNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMv
U1ZHQXR0cmlidXRlVG9Qcm9wZXJ0eU1hcC5jcHAKaW5kZXggYmUzMWNjM2M3ZGEyZjUwZjUxZjY5
YjU1NDQwMjY1ZGIxMzViNTI4Yy4uY2M0NmNjZmEwODFmZmM4ODMwOWI3ZWYyMmQ2M2YwZjM0ZWZk
ODE3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQXR0cmli
dXRlVG9Qcm9wZXJ0eU1hcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMv
U1ZHQXR0cmlidXRlVG9Qcm9wZXJ0eU1hcC5jcHAKQEAgLTMxLDcgKzMxLDcgQEAgdm9pZCBTVkdB
dHRyaWJ1dGVUb1Byb3BlcnR5TWFwOjphZGRQcm9wZXJ0aWVzKFNWR0F0dHJpYnV0ZVRvUHJvcGVy
dHlNYXAmIG1hcCkKIHsKICAgICBBdHRyaWJ1dGVUb1Byb3BlcnRpZXNNYXA6Oml0ZXJhdG9yIGVu
ZCA9IG1hcC5tX21hcC5lbmQoKTsKICAgICBmb3IgKEF0dHJpYnV0ZVRvUHJvcGVydGllc01hcDo6
aXRlcmF0b3IgaXQgPSBtYXAubV9tYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAg
ICAgIFByb3BlcnRpZXNWZWN0b3IqIHZlY3RvciA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFByb3Bl
cnRpZXNWZWN0b3IqIHZlY3RvciA9IGl0LT52YWx1ZTsKICAgICAgICAgQVNTRVJUKHZlY3Rvcik7
CiAKICAgICAgICAgUHJvcGVydGllc1ZlY3Rvcjo6aXRlcmF0b3IgdmVjdG9yRW5kID0gdmVjdG9y
LT5lbmQoKTsKQEAgLTgxLDEyICs4MSwxMiBAQCB2b2lkIFNWR0F0dHJpYnV0ZVRvUHJvcGVydHlN
YXA6OnN5bmNocm9uaXplUHJvcGVydGllcyhTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudAogICAg
IEFTU0VSVChjb250ZXh0RWxlbWVudCk7CiAgICAgQXR0cmlidXRlVG9Qcm9wZXJ0aWVzTWFwOjpp
dGVyYXRvciBlbmQgPSBtX21hcC5lbmQoKTsKICAgICBmb3IgKEF0dHJpYnV0ZVRvUHJvcGVydGll
c01hcDo6aXRlcmF0b3IgaXQgPSBtX21hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAg
ICAgICAgUHJvcGVydGllc1ZlY3RvciogdmVjdG9yID0gaXQtPnNlY29uZDsKKyAgICAgICAgUHJv
cGVydGllc1ZlY3RvciogdmVjdG9yID0gaXQtPnZhbHVlOwogICAgICAgICBBU1NFUlQodmVjdG9y
KTsKIAogICAgICAgICBQcm9wZXJ0aWVzVmVjdG9yOjppdGVyYXRvciB2ZWN0b3JFbmQgPSB2ZWN0
b3ItPmVuZCgpOwogICAgICAgICBmb3IgKFByb3BlcnRpZXNWZWN0b3I6Oml0ZXJhdG9yIHZlY3Rv
ckl0ID0gdmVjdG9yLT5iZWdpbigpOyB2ZWN0b3JJdCAhPSB2ZWN0b3JFbmQ7ICsrdmVjdG9ySXQp
Ci0gICAgICAgICAgICBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnRleHRFbGVtZW50LCBpdC0+Zmly
c3QsICp2ZWN0b3JJdCk7CisgICAgICAgICAgICBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnRleHRF
bGVtZW50LCBpdC0+a2V5LCAqdmVjdG9ySXQpOwogICAgIH0gCiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS93
b3JrZXJzL1dvcmtlckNvbnRleHQuY3BwCmluZGV4IGMwNDBjMzk2Njk0YjYxNjQ1NTczMDhjZGU3
MTIyZDYwZjEzMGQ0ZDkuLmQ2OTMxY2ZlYzkwZThkMjJhMTcyZWI4MjEyN2UwMDBjN2M1NzA5YWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcApAQCAtMTg0LDcgKzE4
NCw3IEBAIGJvb2wgV29ya2VyQ29udGV4dDo6aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QKICAg
ICBBY3RpdmVET01PYmplY3RzTWFwJiBhY3RpdmVPYmplY3RzID0gYWN0aXZlRE9NT2JqZWN0cygp
OwogICAgIEFjdGl2ZURPTU9iamVjdHNNYXA6OmNvbnN0X2l0ZXJhdG9yIGFjdGl2ZU9iamVjdHNF
bmQgPSBhY3RpdmVPYmplY3RzLmVuZCgpOwogICAgIGZvciAoQWN0aXZlRE9NT2JqZWN0c01hcDo6
Y29uc3RfaXRlcmF0b3IgaXRlciA9IGFjdGl2ZU9iamVjdHMuYmVnaW4oKTsgaXRlciAhPSBhY3Rp
dmVPYmplY3RzRW5kOyArK2l0ZXIpIHsKLSAgICAgICAgaWYgKGl0ZXItPmZpcnN0LT5oYXNQZW5k
aW5nQWN0aXZpdHkoKSkKKyAgICAgICAgaWYgKGl0ZXItPmtleS0+aGFzUGVuZGluZ0FjdGl2aXR5
KCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyRXZlbnRRdWV1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS93
b3JrZXJzL1dvcmtlckV2ZW50UXVldWUuY3BwCmluZGV4IDU5YTkzMDdlYWMxNzg0YjY5OWMzZmVk
MjBhNDU1YTc5ZjA4OTEwN2UuLjIzNTUyOWYxZmViOTcxMjhjMzFkOTZhMzBkYTBjZGZmYmJlOWQw
ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyRXZlbnRRdWV1ZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJFdmVudFF1ZXVlLmNwcApAQCAt
MTI3LDcgKzEyNyw3IEBAIHZvaWQgV29ya2VyRXZlbnRRdWV1ZTo6Y2xvc2UoKQogewogICAgIG1f
aXNDbG9zZWQgPSB0cnVlOwogICAgIGZvciAoRXZlbnRUYXNrTWFwOjppdGVyYXRvciBpdCA9IG1f
ZXZlbnRUYXNrTWFwLmJlZ2luKCk7IGl0ICE9IG1fZXZlbnRUYXNrTWFwLmVuZCgpOyArK2l0KSB7
Ci0gICAgICAgIEV2ZW50RGlzcGF0Y2hlclRhc2sqIHRhc2sgPSBpdC0+c2Vjb25kOworICAgICAg
ICBFdmVudERpc3BhdGNoZXJUYXNrKiB0YXNrID0gaXQtPnZhbHVlOwogICAgICAgICB0YXNrLT5j
YW5jZWwoKTsKICAgICB9CiAgICAgbV9ldmVudFRhc2tNYXAuY2xlYXIoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94
bWwvWE1MSHR0cFJlcXVlc3QuY3BwCmluZGV4IGVlNmYyOGM5YzQyMmYzN2E0NGQxMjg5MTVlYWFj
MWM4ODkzNmUwNzAuLmY2MTY5MDg1NGVmNzNlMzliYzA0ZmY2OTI5NjY1MWRhYzZhODdiMGUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcApAQCAtOTI5LDcgKzkyOSw3IEBAIHZv
aWQgWE1MSHR0cFJlcXVlc3Q6OnNldFJlcXVlc3RIZWFkZXJJbnRlcm5hbChjb25zdCBBdG9taWNT
dHJpbmcmIG5hbWUsIGNvbnN0IFN0CiB7CiAgICAgSFRUUEhlYWRlck1hcDo6QWRkUmVzdWx0IHJl
c3VsdCA9IG1fcmVxdWVzdEhlYWRlcnMuYWRkKG5hbWUsIHZhbHVlKTsKICAgICBpZiAoIXJlc3Vs
dC5pc05ld0VudHJ5KQotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZC5hcHBlbmQoIiwg
IiArIHZhbHVlKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQoIiwgIiAr
IHZhbHVlKTsKIH0KIAogU3RyaW5nIFhNTEh0dHBSZXF1ZXN0OjpnZXRSZXF1ZXN0SGVhZGVyKGNv
bnN0IEF0b21pY1N0cmluZyYgbmFtZSkgY29uc3QKQEAgLTk1NiwxNiArOTU2LDE2IEBAIFN0cmlu
ZyBYTUxIdHRwUmVxdWVzdDo6Z2V0QWxsUmVzcG9uc2VIZWFkZXJzKEV4Y2VwdGlvbkNvZGUmIGVj
KSBjb25zdAogICAgICAgICAvLyAgICAgMikgVGhlcmUncyBubyBrbm93biBoYXJtIGluIGhpZGlu
ZyBTZXQtQ29va2llIGhlYWRlciBmaWVsZHMgZW50aXJlbHk7IHdlIGRvbid0CiAgICAgICAgIC8v
ICAgICAgICBrbm93IGFueSB3aWRlbHkgdXNlZCB0ZWNobmlxdWUgdGhhdCByZXF1aXJlcyBhY2Nl
c3MgdG8gdGhlbS4KICAgICAgICAgLy8gICAgIDMpIEZpcmVmb3ggaGFzIGltcGxlbWVudGVkIHRo
aXMgcG9saWN5LgotICAgICAgICBpZiAoaXNTZXRDb29raWVIZWFkZXIoaXQtPmZpcnN0KSAmJiAh
c2VjdXJpdHlPcmlnaW4oKS0+Y2FuTG9hZExvY2FsUmVzb3VyY2VzKCkpCisgICAgICAgIGlmIChp
c1NldENvb2tpZUhlYWRlcihpdC0+a2V5KSAmJiAhc2VjdXJpdHlPcmlnaW4oKS0+Y2FuTG9hZExv
Y2FsUmVzb3VyY2VzKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBpZiAoIW1f
c2FtZU9yaWdpblJlcXVlc3QgJiYgIWlzT25BY2Nlc3NDb250cm9sUmVzcG9uc2VIZWFkZXJXaGl0
ZWxpc3QoaXQtPmZpcnN0KSAmJiAhYWNjZXNzQ29udHJvbEV4cG9zZUhlYWRlclNldC5jb250YWlu
cyhpdC0+Zmlyc3QpKQorICAgICAgICBpZiAoIW1fc2FtZU9yaWdpblJlcXVlc3QgJiYgIWlzT25B
Y2Nlc3NDb250cm9sUmVzcG9uc2VIZWFkZXJXaGl0ZWxpc3QoaXQtPmtleSkgJiYgIWFjY2Vzc0Nv
bnRyb2xFeHBvc2VIZWFkZXJTZXQuY29udGFpbnMoaXQtPmtleSkpCiAgICAgICAgICAgICBjb250
aW51ZTsKIAotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+Zmlyc3QpOworICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+a2V5KTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQoJzonKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJyAnKTsKLSAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPnNlY29uZCk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKGl0LT52YWx1ZSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdccicpOwog
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS94bWwvWFBhdGhGdW5jdGlvbnMuY3BwIGIvU291cmNlL1dlYkNvcmUveG1s
L1hQYXRoRnVuY3Rpb25zLmNwcAppbmRleCAzOTM0ZWJhOGVhYWU0YTFiNTg5MDJiODg5M2Y1NWMy
ZTZjYzQxM2RjLi44YjdlYjcyOTVhZDMxZjVkNzY3NGE5MTYxNmU2ODgzZTVhN2ZhNTI5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhGdW5jdGlvbnMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3htbC9YUGF0aEZ1bmN0aW9ucy5jcHAKQEAgLTcyMCw3ICs3MjAsNyBAQCBGdW5j
dGlvbiogY3JlYXRlRnVuY3Rpb24oY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBWZWN0b3I8RXhw
cmVzc2lvbio+JiBhcmdzKQogICAgIEhhc2hNYXA8U3RyaW5nLCBGdW5jdGlvblJlYz46Oml0ZXJh
dG9yIGZ1bmN0aW9uTWFwSXRlciA9IGZ1bmN0aW9uTWFwLT5maW5kKG5hbWUpOwogICAgIEZ1bmN0
aW9uUmVjKiBmdW5jdGlvblJlYyA9IDA7CiAKLSAgICBpZiAoZnVuY3Rpb25NYXBJdGVyID09IGZ1
bmN0aW9uTWFwLT5lbmQoKSB8fCAhKGZ1bmN0aW9uUmVjID0gJmZ1bmN0aW9uTWFwSXRlci0+c2Vj
b25kKS0+YXJncy5jb250YWlucyhhcmdzLnNpemUoKSkpCisgICAgaWYgKGZ1bmN0aW9uTWFwSXRl
ciA9PSBmdW5jdGlvbk1hcC0+ZW5kKCkgfHwgIShmdW5jdGlvblJlYyA9ICZmdW5jdGlvbk1hcEl0
ZXItPnZhbHVlKS0+YXJncy5jb250YWlucyhhcmdzLnNpemUoKSkpCiAgICAgICAgIHJldHVybiAw
OwogCiAgICAgRnVuY3Rpb24qIGZ1bmN0aW9uID0gZnVuY3Rpb25SZWMtPmZhY3RvcnlGbigpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoUGFyc2VyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3htbC9YUGF0aFBhcnNlci5jcHAKaW5kZXggYjVlNmE5MjM3NTkzYjRhYWEyYTI0M2Yy
ZmY5ZDg2ZTU3ZjkzMGE5Ny4uNzQ5MTgwZGJlNWVlOGY5YjEyMmZjZGExZTY5ODE2OWMwMDlmOGY4
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoUGFyc2VyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS94bWwvWFBhdGhQYXJzZXIuY3BwCkBAIC0xMDMsNyArMTAzLDcgQEAgc3Rh
dGljIGJvb2wgaXNBeGlzTmFtZShjb25zdCBTdHJpbmcmIG5hbWUsIFN0ZXA6OkF4aXMmIHR5cGUp
CiAgICAgQXhpc05hbWVzTWFwOjppdGVyYXRvciBpdCA9IGF4aXNOYW1lcy5maW5kKG5hbWUpOwog
ICAgIGlmIChpdCA9PSBheGlzTmFtZXMuZW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB0eXBlID0gaXQtPnNlY29uZDsKKyAgICB0eXBlID0gaXQtPnZhbHVlOwogICAgIHJldHVybiB0
cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nvckxp
YnhzbHQuY3BwIGIvU291cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JMaWJ4c2x0LmNwcApp
bmRleCBlMjFjODI3YzI1ZGJjNWVmZDMxYmU3MDVmOWYzNmY1MmRlNTQ4MjQxLi5hOTEyOTg4ZGE2
MzhjY2Y4NDJlN2IxN2FmNWU0MzQ0NmU4YTMyZDI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS94bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9Y
U0xUUHJvY2Vzc29yTGlieHNsdC5jcHAKQEAgLTIyNSw4ICsyMjUsOCBAQCBzdGF0aWMgY29uc3Qg
Y2hhcioqIHhzbHRQYXJhbUFycmF5RnJvbVBhcmFtZXRlck1hcChYU0xUUHJvY2Vzc29yOjpQYXJh
bWV0ZXJNYXAmCiAgICAgWFNMVFByb2Nlc3Nvcjo6UGFyYW1ldGVyTWFwOjppdGVyYXRvciBlbmQg
PSBwYXJhbWV0ZXJzLmVuZCgpOwogICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKICAgICBmb3IgKFhT
TFRQcm9jZXNzb3I6OlBhcmFtZXRlck1hcDo6aXRlcmF0b3IgaXQgPSBwYXJhbWV0ZXJzLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBwYXJhbWV0ZXJBcnJheVtpbmRleCsrXSA9
IGZhc3RTdHJEdXAoaXQtPmZpcnN0LnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICBwYXJhbWV0ZXJB
cnJheVtpbmRleCsrXSA9IGZhc3RTdHJEdXAoaXQtPnNlY29uZC51dGY4KCkuZGF0YSgpKTsKKyAg
ICAgICAgcGFyYW1ldGVyQXJyYXlbaW5kZXgrK10gPSBmYXN0U3RyRHVwKGl0LT5rZXkudXRmOCgp
LmRhdGEoKSk7CisgICAgICAgIHBhcmFtZXRlckFycmF5W2luZGV4KytdID0gZmFzdFN0ckR1cChp
dC0+dmFsdWUudXRmOCgpLmRhdGEoKSk7CiAgICAgfQogICAgIHBhcmFtZXRlckFycmF5W2luZGV4
XSA9IDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yUXQu
Y3BwIGIvU291cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JRdC5jcHAKaW5kZXggYTY3YzVm
ZGU3NmZjYzU2OGNlM2M0YzY4YzYxMDYwZDQwYmI5MzEwYy4uMGM0MTQwYThkNzllZGVmYTUwMjMz
NWZlMDE4MzEyZjQ3NWYxNzBmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL1hTTFRQ
cm9jZXNzb3JRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JRdC5j
cHAKQEAgLTE0Miw3ICsxNDIsNyBAQCBib29sIFhTTFRQcm9jZXNzb3I6OnRyYW5zZm9ybVRvU3Ry
aW5nKE5vZGUqIHNvdXJjZU5vZGUsIFN0cmluZyYsIFN0cmluZyYgcmVzdWx0UwogCiAgICAgWFNM
VFByb2Nlc3Nvcjo6UGFyYW1ldGVyTWFwOjppdGVyYXRvciBlbmQgPSBtX3BhcmFtZXRlcnMuZW5k
KCk7CiAgICAgZm9yIChYU0xUUHJvY2Vzc29yOjpQYXJhbWV0ZXJNYXA6Oml0ZXJhdG9yIGl0ID0g
bV9wYXJhbWV0ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgcXVlcnkuYmlu
ZFZhcmlhYmxlKFFTdHJpbmcoaXQtPmZpcnN0KSwgUVhtbEl0ZW0oUVZhcmlhbnQoUVN0cmluZyhp
dC0+c2Vjb25kKSkpKTsKKyAgICAgICAgcXVlcnkuYmluZFZhcmlhYmxlKFFTdHJpbmcoaXQtPmtl
eSksIFFYbWxJdGVtKFFWYXJpYW50KFFTdHJpbmcoaXQtPnZhbHVlKSkpKTsKIAogICAgIFFTdHJp
bmcgc291cmNlOwogICAgIGlmIChzb3VyY2VJc0RvY3VtZW50ICYmIG93bmVyRG9jdW1lbnQtPnRy
YW5zZm9ybVNvdXJjZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0Fw
aS9CYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9CYWNraW5n
U3RvcmUuY3BwCmluZGV4IGNhOWZhM2ZlZjQ0NWIwNzk3NTc3OGJhNTQ2MzdhNDhlZTIxMGUyM2Yu
LjAwYjIxMmFjYzRhOGJlODI4YTBhMjAzMjU1YThhYzgzODQ3ZDk5NWMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvQmFja2luZ1N0b3JlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2JsYWNrYmVycnkvQXBpL0JhY2tpbmdTdG9yZS5jcHAKQEAgLTcyMyw4ICs3MjMsOCBA
QCB2b2lkIEJhY2tpbmdTdG9yZVByaXZhdGU6OnNldEJhY2tpbmdTdG9yZVJlY3QoY29uc3QgUGxh
dGZvcm06OkludFJlY3QmIGJhY2tpbmdTdAogICAgIC8vIG91ciBuZXcgYmFja2luZyBzdG9yZSBy
ZWN0LgogICAgIFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIHRpbGVNYXBFbmQgPSBjdXJyZW50TWFw
LmVuZCgpOwogICAgIGZvciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjdXJyZW50TWFw
LmJlZ2luKCk7IGl0ICE9IHRpbGVNYXBFbmQ7ICsraXQpIHsKLSAgICAgICAgVGlsZUluZGV4IG9s
ZEluZGV4ID0gaXQtPmZpcnN0OwotICAgICAgICBCYWNraW5nU3RvcmVUaWxlKiB0aWxlID0gaXQt
PnNlY29uZDsKKyAgICAgICAgVGlsZUluZGV4IG9sZEluZGV4ID0gaXQtPmtleTsKKyAgICAgICAg
QmFja2luZ1N0b3JlVGlsZSogdGlsZSA9IGl0LT52YWx1ZTsKIAogICAgICAgICAvLyBSZXNldCB0
aGUgb2xkIGluZGV4LgogICAgICAgICByZXNldFRpbGUob2xkSW5kZXgsIHRpbGUsIGZhbHNlIC8q
cmVzZXRCYWNrZ3JvdW5kKi8pOwpAQCAtNzgwLDggKzc4MCw4IEBAIHZvaWQgQmFja2luZ1N0b3Jl
UHJpdmF0ZTo6c2V0QmFja2luZ1N0b3JlUmVjdChjb25zdCBQbGF0Zm9ybTo6SW50UmVjdCYgYmFj
a2luZ1N0CiAgICAgc2l6ZV90IGkgPSAwOwogICAgIFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGxl
ZnRPdmVyRW5kID0gbGVmdE92ZXJUaWxlcy5lbmQoKTsKICAgICBmb3IgKFRpbGVNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbGVmdE92ZXJUaWxlcy5iZWdpbigpOyBpdCAhPSBsZWZ0T3ZlckVuZDsg
KytpdCkgewotICAgICAgICBUaWxlSW5kZXggb2xkSW5kZXggPSBpdC0+Zmlyc3Q7Ci0gICAgICAg
IEJhY2tpbmdTdG9yZVRpbGUqIHRpbGUgPSBpdC0+c2Vjb25kOworICAgICAgICBUaWxlSW5kZXgg
b2xkSW5kZXggPSBpdC0+a2V5OworICAgICAgICBCYWNraW5nU3RvcmVUaWxlKiB0aWxlID0gaXQt
PnZhbHVlOwogICAgICAgICBpZiAoaSA+PSBpbmRleGVzVG9GaWxsLnNpemUoKSkgewogICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTE2NjAs
NyArMTY2MCw3IEBAIFBsYXRmb3JtOjpJbnRSZWN0IEJhY2tpbmdTdG9yZVByaXZhdGU6OnZpc2li
bGVUaWxlc1JlY3QoKSBjb25zdAogICAgIFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGN1
cnJlbnRNYXAuZW5kKCk7CiAgICAgZm9yIChUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGN1
cnJlbnRNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIFRpbGVSZWN0IHRp
bGVSZWN0OwotICAgICAgICB0aWxlUmVjdC5maXJzdCA9IGl0LT5maXJzdDsKKyAgICAgICAgdGls
ZVJlY3QuZmlyc3QgPSBpdC0+a2V5OwogICAgICAgICB0aWxlUmVjdC5zZWNvbmQgPSB0aGlzLT50
aWxlUmVjdCgpOwogICAgICAgICBQbGF0Zm9ybTo6SW50UmVjdCB0aWxlID0gbWFwRnJvbVRpbGVz
VG9UcmFuc2Zvcm1lZENvbnRlbnRzKHRpbGVSZWN0KTsKICAgICAgICAgaWYgKHRpbGUuaW50ZXJz
ZWN0cyh2aXNpYmxlQ29udGVudHNSZWN0KCkpKQpAQCAtMTcyMSw3ICsxNzIxLDcgQEAgdm9pZCBC
YWNraW5nU3RvcmVQcml2YXRlOjpyZXNldFRpbGVzKGJvb2wgcmVzZXRCYWNrZ3JvdW5kKQogCiAg
ICAgVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY3VycmVudE1hcC5lbmQoKTsKICAgICBm
b3IgKFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY3VycmVudE1hcC5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCi0gICAgICAgIHJlc2V0VGlsZShpdC0+Zmlyc3QsIGl0LT5zZWNvbmQsIHJl
c2V0QmFja2dyb3VuZCk7CisgICAgICAgIHJlc2V0VGlsZShpdC0+a2V5LCBpdC0+dmFsdWUsIHJl
c2V0QmFja2dyb3VuZCk7CiB9CiAKIHZvaWQgQmFja2luZ1N0b3JlUHJpdmF0ZTo6dXBkYXRlVGls
ZXMoYm9vbCB1cGRhdGVWaXNpYmxlLCBib29sIGltbWVkaWF0ZSkKQEAgLTE3MzQsMTAgKzE3MzQs
MTAgQEAgdm9pZCBCYWNraW5nU3RvcmVQcml2YXRlOjp1cGRhdGVUaWxlcyhib29sIHVwZGF0ZVZp
c2libGUsIGJvb2wgaW1tZWRpYXRlKQogCiAgICAgVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gY3VycmVudE1hcC5lbmQoKTsKICAgICBmb3IgKFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gY3VycmVudE1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgYm9vbCBp
c1Zpc2libGUgPSBpc1RpbGVWaXNpYmxlKGl0LT5maXJzdCk7CisgICAgICAgIGJvb2wgaXNWaXNp
YmxlID0gaXNUaWxlVmlzaWJsZShpdC0+a2V5KTsKICAgICAgICAgaWYgKCF1cGRhdGVWaXNpYmxl
ICYmIGlzVmlzaWJsZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB1cGRhdGVUaWxl
KGl0LT5maXJzdCwgaW1tZWRpYXRlKTsKKyAgICAgICAgdXBkYXRlVGlsZShpdC0+a2V5LCBpbW1l
ZGlhdGUpOwogICAgIH0KIH0KIApAQCAtMTc1OCw4ICsxNzU4LDggQEAgdm9pZCBCYWNraW5nU3Rv
cmVQcml2YXRlOjp1cGRhdGVUaWxlc0ZvclNjcm9sbE9yTm90UmVuZGVyZWRSZWdpb24oYm9vbCBj
aGVja0xvYWQKIAogICAgIFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGN1cnJlbnRNYXAu
ZW5kKCk7CiAgICAgZm9yIChUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGN1cnJlbnRNYXAu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFRpbGVJbmRleCBpbmRleCA9IGl0
LT5maXJzdDsKLSAgICAgICAgQmFja2luZ1N0b3JlVGlsZSogdGlsZSA9IGl0LT5zZWNvbmQ7Cisg
ICAgICAgIFRpbGVJbmRleCBpbmRleCA9IGl0LT5rZXk7CisgICAgICAgIEJhY2tpbmdTdG9yZVRp
bGUqIHRpbGUgPSBpdC0+dmFsdWU7CiAgICAgICAgIGJvb2wgaXNWaXNpYmxlID0gaXNUaWxlVmlz
aWJsZShpbmRleCk7CiAgICAgICAgIC8vIFRoZSByZWN0IGluIHRyYW5zZm9ybWVkIGNvbnRlbnRz
IGNvb3JkaW5hdGVzLgogICAgICAgICBQbGF0Zm9ybTo6SW50UmVjdCByZWN0KG9yaWdpbk9mVGls
ZShpbmRleCksIHRpbGVTaXplKCkpOwpAQCAtMTkwMiw4ICsxOTAyLDggQEAgQmFja2luZ1N0b3Jl
UHJpdmF0ZTo6VGlsZVJlY3RMaXN0IEJhY2tpbmdTdG9yZVByaXZhdGU6Om1hcEZyb21UcmFuc2Zv
cm1lZENvbnRlbnQKICAgICBUaWxlUmVjdExpc3QgdGlsZVJlY3RMaXN0OwogICAgIFRpbGVNYXA6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHRpbGVNYXAuZW5kKCk7CiAgICAgZm9yIChUaWxlTWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IHRpbGVNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0g
ICAgICAgIFRpbGVJbmRleCBpbmRleCA9IGl0LT5maXJzdDsKLSAgICAgICAgQmFja2luZ1N0b3Jl
VGlsZSogdGlsZSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFRpbGVJbmRleCBpbmRleCA9IGl0LT5r
ZXk7CisgICAgICAgIEJhY2tpbmdTdG9yZVRpbGUqIHRpbGUgPSBpdC0+dmFsdWU7CiAKICAgICAg
ICAgLy8gTmVlZCB0byBtYXAgdGhlIHJlY3QgdG8gdGlsZSBjb29yZGluYXRlcy4KICAgICAgICAg
UGxhdGZvcm06OkludFJlY3QgciA9IHJlY3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Js
YWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbC5jcHAgYi9T
b3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uUHJlc2Vu
dGVySW1wbC5jcHAKaW5kZXggNmIyOTIxMDI5NDYyNzdkYTI4ZTc5OGQ3ZWVkZjhiOTM5YzUzMTlj
Ny4uNDhjY2YzYWM1MWFiZGUzNjVhYjAyNzU5ZDFkYWRjNDE2ZmMwMGY1NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNl
bnRlckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9y
dC9Ob3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmNwcApAQCAtODEsNyArODEsNyBAQCB2b2lkIE5v
dGlmaWNhdGlvblByZXNlbnRlckltcGw6OmNhbmNlbChOb3RpZmljYXRpb24qIG5vdGlmaWNhdGlv
bikKICAgICBpZiAoaXQgPT0gbV9ub3RpZmljYXRpb25zLmVuZCgpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBtX3BsYXRmb3JtUHJlc2VudGVyLT5jYW5jZWwoc3RkOjpzdHJpbmcoaXQtPnNlY29u
ZC51dGY4KCkuZGF0YSgpKSk7CisgICAgbV9wbGF0Zm9ybVByZXNlbnRlci0+Y2FuY2VsKHN0ZDo6
c3RyaW5nKGl0LT52YWx1ZS51dGY4KCkuZGF0YSgpKSk7CiAgICAgbV9ub3RpZmljYXRpb25zLnJl
bW92ZShpdCk7CiB9CiAKQEAgLTEwOCwxMiArMTA4LDEyIEBAIHZvaWQgTm90aWZpY2F0aW9uUHJl
c2VudGVySW1wbDo6b25QZXJtaXNzaW9uKGNvbnN0IHN0ZDo6c3RyaW5nJiBkb21haW4sIGJvb2wg
aXNBCiAgICAgU3RyaW5nIGRvbWFpblN0cmluZyA9IFN0cmluZzo6ZnJvbVVURjgoZG9tYWluLmNf
c3RyKCkpOwogICAgIFBlcm1pc3Npb25SZXF1ZXN0TWFwOjppdGVyYXRvciBpdCA9IG1fcGVybWlz
c2lvblJlcXVlc3RzLmJlZ2luKCk7CiAgICAgZm9yICg7IGl0ICE9IG1fcGVybWlzc2lvblJlcXVl
c3RzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+Zmlyc3QtPnVybCgpLmhvc3QoKSAh
PSBkb21haW5TdHJpbmcpCisgICAgICAgIGlmIChpdC0+a2V5LT51cmwoKS5ob3N0KCkgIT0gZG9t
YWluU3RyaW5nKQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgaWYgKGlzQWxsb3dl
ZCkgewogICAgICAgICAgICAgbV9hbGxvd2VkRG9tYWlucy5hZGQoZG9tYWluU3RyaW5nKTsKLSAg
ICAgICAgICAgIGl0LT5zZWNvbmQtPmhhbmRsZUV2ZW50KCk7CisgICAgICAgICAgICBpdC0+dmFs
dWUtPmhhbmRsZUV2ZW50KCk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbV9hbGxvd2Vk
RG9tYWlucy5yZW1vdmUoZG9tYWluU3RyaW5nKTsKIApAQCAtMTQ0LDkgKzE0NCw5IEBAIHZvaWQg
Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6bm90aWZpY2F0aW9uQ2xpY2tlZChjb25zdCBzdGQ6
OnN0cmluZyYgaWQpCiAgICAgU3RyaW5nIGlkU3RyaW5nID0gU3RyaW5nOjpmcm9tVVRGOChpZC5j
X3N0cigpKTsKICAgICBOb3RpZmljYXRpb25NYXA6Oml0ZXJhdG9yIGl0ID0gbV9ub3RpZmljYXRp
b25zLmJlZ2luKCk7CiAgICAgZm9yICg7IGl0ICE9IG1fbm90aWZpY2F0aW9ucy5lbmQoKTsgKytp
dCkgewotICAgICAgICBpZiAoaXQtPnNlY29uZCA9PSBpZFN0cmluZyAmJiBpdC0+Zmlyc3QtPnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkgewotICAgICAgICAgICAgUmVmUHRyPE5vdGlmaWNhdGlv
bj4gbm90aWZpY2F0aW9uID0gaXQtPmZpcnN0OwotICAgICAgICAgICAgaXQtPmZpcnN0LT5kaXNw
YXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmNsaWNrRXZlbnQsIGZhbHNlLCB0
cnVlKSk7CisgICAgICAgIGlmIChpdC0+dmFsdWUgPT0gaWRTdHJpbmcgJiYgaXQtPmtleS0+c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpKSB7CisgICAgICAgICAgICBSZWZQdHI8Tm90aWZpY2F0aW9u
PiBub3RpZmljYXRpb24gPSBpdC0+a2V5OworICAgICAgICAgICAgaXQtPmtleS0+ZGlzcGF0Y2hF
dmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50LCBmYWxzZSwgdHJ1ZSkp
OwogICAgICAgICAgICAgbV9ub3RpZmljYXRpb25zLnJlbW92ZShub3RpZmljYXRpb24pOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Js
YWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvVXNlck1lZGlhQ2xpZW50SW1wbC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvVXNlck1lZGlhQ2xpZW50SW1wbC5jcHAK
aW5kZXggNmIwOWYyYTY0MTEzYjlkNWRkMjQ1NTJmYjc4MzgyMDhiNDA2NGJiMi4uMWEyZTdiMmZm
ZTQzYzIxMDM0MjQ0ZDNhMjU4NTc4OGE2NGU5ODYwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L1VzZXJNZWRpYUNsaWVudEltcGwuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9Vc2VyTWVkaWFDbGllbnRJ
bXBsLmNwcApAQCAtMTI5LDcgKzEyOSw3IEBAIHZvaWQgVXNlck1lZGlhQ2xpZW50SW1wbDo6Y2Fu
Y2VsVXNlck1lZGlhUmVxdWVzdChVc2VyTWVkaWFSZXF1ZXN0KiByZXF1ZXN0KQogICAgICAgICBy
ZXR1cm47CiAKICAgICBTZWN1cml0eU9yaWdpbiogb3JpZ2luID0gcmVxdWVzdC0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpLT5zZWN1cml0eU9yaWdpbigpOwotICAgIG1fcGFnZS0+Y2xpZW50KCkt
PmNhbmNlbFVzZXJNZWRpYVJlcXVlc3QoV2ViVXNlck1lZGlhUmVxdWVzdChyZXF1ZXN0LT5hdWRp
bygpLCByZXF1ZXN0LT52aWRlbygpLCBvcmlnaW4tPnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSwg
aXQtPnNlY29uZC5nZXQoKSkpOworICAgIG1fcGFnZS0+Y2xpZW50KCktPmNhbmNlbFVzZXJNZWRp
YVJlcXVlc3QoV2ViVXNlck1lZGlhUmVxdWVzdChyZXF1ZXN0LT5hdWRpbygpLCByZXF1ZXN0LT52
aWRlbygpLCBvcmlnaW4tPnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgaXQtPnZhbHVlLmdldCgp
KSk7CiAgICAgdXNlck1lZGlhUmVxdWVzdHNNYXAoKS5yZW1vdmUoaXQpOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9BYm91dERhdGEuY3Bw
IGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvQWJvdXREYXRhLmNwcApp
bmRleCA1Y2NlZjNjMGU5ZWI2MTBlNGU0MmM3ZWJkN2Q4OTlhMDUxM2JmY2ZiLi42MWIzNjJiODQ0
ODljN2UzMjNhMzA0YTE2NmU0ZmQ5NmIzNDI0YzkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9BYm91dERhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0Fib3V0RGF0YS5jcHAKQEAgLTIwNCw3ICsyMDQs
NyBAQCBzdGF0aWMgdm9pZCBkdW1wSlNDVHlwZUNvdW50U2V0VG9UYWJsZUhUTUwoU3RyaW5nJiB0
YWJsZUhUTUwsIEpTQzo6VHlwZUNvdW50U2V0KgogICAgICAgICByZXR1cm47CiAKICAgICBmb3Ig
KEpTQzo6VHlwZUNvdW50U2V0Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gdHlwZUNvdW50U2V0LT5i
ZWdpbigpOyBpdGVyICE9IHR5cGVDb3VudFNldC0+ZW5kKCk7ICsraXRlcikKLSAgICAgICAgdGFi
bGVIVE1MICs9IG51bWJlclRvSFRNTFRyKGl0ZXItPmZpcnN0LCBpdGVyLT5zZWNvbmQpOworICAg
ICAgICB0YWJsZUhUTUwgKz0gbnVtYmVyVG9IVE1MVHIoaXRlci0+a2V5LCBpdGVyLT52YWx1ZSk7
CiB9CiAKIHN0YXRpYyBTdHJpbmcgbWVtb3J5UGFnZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9GcmFtZUxheWVycy5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9GcmFtZUxheWVycy5jcHAKaW5kZXggYTQ5ZjU5
NGYyYzIwYzJjMzE3OTMyMzkyZDcxYTU0NTY4OWI1YzQ2Ny4uYzQwMjNkZTNjOWZiMTlkMTg3MDFm
MGMxNzFiMzI2MDExNWZkZGQ1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5
L1dlYktpdFN1cHBvcnQvRnJhbWVMYXllcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2ti
ZXJyeS9XZWJLaXRTdXBwb3J0L0ZyYW1lTGF5ZXJzLmNwcApAQCAtOTEsNyArOTEsNyBAQCB2b2lk
IEZyYW1lTGF5ZXJzOjpyZW1vdmVMYXllckJ5RnJhbWUoRnJhbWUqIGZyYW1lKQogICAgIEFTU0VS
VChmcmFtZSk7CiAgICAgRnJhbWVMYXllck1hcDo6aXRlcmF0b3IgaXQgPSBtX2ZyYW1lTGF5ZXJz
LmZpbmQoZnJhbWUpOwogICAgIGlmIChpdCAhPSBtX2ZyYW1lTGF5ZXJzLmVuZCgpKSB7Ci0gICAg
ICAgIExheWVyV2ViS2l0VGhyZWFkKiBsYXllciA9IGl0LT5zZWNvbmQ7CisgICAgICAgIExheWVy
V2ViS2l0VGhyZWFkKiBsYXllciA9IGl0LT52YWx1ZTsKICAgICAgICAgaWYgKGxheWVyLT5zdXBl
cmxheWVyKCkpCiAgICAgICAgICAgICBsYXllci0+cmVtb3ZlRnJvbVN1cGVybGF5ZXIoKTsKICAg
ICAgICAgbV9mcmFtZUxheWVycy5yZW1vdmUoaXQpOwpAQCAtMTA0LDE1ICsxMDQsMTUgQEAgdm9p
ZCBGcmFtZUxheWVyczo6Y29tbWl0T25XZWJLaXRUaHJlYWQoZG91YmxlIHNjYWxlKQogICAgIEFT
U0VSVChtX3Jvb3RMYXllcik7CiAgICAgaWYgKCFpc1Jvb3RMYXllck1haW5GcmFtZUxheWVyKCkp
IHsKICAgICAgICAgZm9yIChGcmFtZUxheWVyTWFwOjppdGVyYXRvciBpdCA9IG1fZnJhbWVMYXll
cnMuYmVnaW4oKTsgaXQgIT0gbV9mcmFtZUxheWVycy5lbmQoKTsgKytpdCkKLSAgICAgICAgICAg
IGl0LT5zZWNvbmQtPnNldEFic29sdXRlT2Zmc2V0KGZyYW1lTGF5ZXJBYnNvbHV0ZU9mZnNldChp
dC0+Zmlyc3QpKTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+c2V0QWJzb2x1dGVPZmZzZXQoZnJh
bWVMYXllckFic29sdXRlT2Zmc2V0KGl0LT5rZXkpKTsKICAgICB9CiAgICAgbV9yb290TGF5ZXIt
PmNvbW1pdE9uV2ViS2l0VGhyZWFkKHNjYWxlKTsKIH0KIAogdm9pZCBGcmFtZUxheWVyczo6Y2Fs
Y3VsYXRlUm9vdExheWVyKCkKIHsKLSAgICBpZiAobV9mcmFtZUxheWVycy5zaXplKCkgPT0gMSAm
JiBtX2ZyYW1lTGF5ZXJzLmJlZ2luKCktPmZpcnN0ID09IG1fcGFnZVByaXZhdGUtPm1fbWFpbkZy
YW1lKQotICAgICAgICBtX3Jvb3RMYXllciA9IG1fZnJhbWVMYXllcnMuYmVnaW4oKS0+c2Vjb25k
OworICAgIGlmIChtX2ZyYW1lTGF5ZXJzLnNpemUoKSA9PSAxICYmIG1fZnJhbWVMYXllcnMuYmVn
aW4oKS0+a2V5ID09IG1fcGFnZVByaXZhdGUtPm1fbWFpbkZyYW1lKQorICAgICAgICBtX3Jvb3RM
YXllciA9IG1fZnJhbWVMYXllcnMuYmVnaW4oKS0+dmFsdWU7CiAgICAgZWxzZSBpZiAobV9yb290
R3JhcGhpY3NMYXllcikKICAgICAgICAgbV9yb290TGF5ZXIgPSBtX3Jvb3RHcmFwaGljc0xheWVy
LT5wbGF0Zm9ybUxheWVyKCk7CiAgICAgZWxzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuY3BwIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVz
dE1hbmFnZXIuY3BwCmluZGV4IDRjMGVkOWNkNzE3YjZmNGQ1YWE2YWZhZjk3MGJlYjY5Njc5Njg5
ZDMuLjFlZWFjNjY3YmRmNjZiM2YxOTNmYjMzNWEzODcxMjhmYmM5MTI2NzQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVl
c3RNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHZW9sb2Nh
dGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5jcHAKQEAgLTY0LDcgKzY0LDcgQEAgYm9vbCBX
ZWJHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlcjo6cmVtb3ZlKGNvbnN0IFdlYktp
dDo6V2ViR2VvbG9jYXRpb24KICAgICBHZW9sb2NhdGlvbklkTWFwOjppdGVyYXRvciBpdCA9IG1f
cHJpdmF0ZS0+bV9nZW9sb2NhdGlvbklkTWFwLmZpbmQoZ2VvbG9jYXRpb24pOwogICAgIGlmIChp
dCA9PSBtX3ByaXZhdGUtPm1fZ2VvbG9jYXRpb25JZE1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGlkID0gaXQtPnNlY29uZDsKKyAgICBpZCA9IGl0LT52YWx1ZTsKICAgICBt
X3ByaXZhdGUtPm1fZ2VvbG9jYXRpb25JZE1hcC5yZW1vdmUoaXQpOwogICAgIG1fcHJpdmF0ZS0+
bV9pZEdlb2xvY2F0aW9uTWFwLnJlbW92ZShpZCk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC03NSw3
ICs3NSw3IEBAIGJvb2wgV2ViR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXI6OnJl
bW92ZShpbnQgaWQsIFdlYktpdDo6V2ViR2VvbG9jYXRpCiAgICAgSWRHZW9sb2NhdGlvbk1hcDo6
aXRlcmF0b3IgaXQgPSBtX3ByaXZhdGUtPm1faWRHZW9sb2NhdGlvbk1hcC5maW5kKGlkKTsKICAg
ICBpZiAoaXQgPT0gbV9wcml2YXRlLT5tX2lkR2VvbG9jYXRpb25NYXAuZW5kKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBHZW9sb2NhdGlvbiogZ2VvbG9jYXRpb24gPSBpdC0+c2Vjb25k
OworICAgIEdlb2xvY2F0aW9uKiBnZW9sb2NhdGlvbiA9IGl0LT52YWx1ZTsKICAgICBwZXJtaXNz
aW9uUmVxdWVzdCA9IFdlYkdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3QoZ2VvbG9jYXRpb24p
OwogICAgIG1fcHJpdmF0ZS0+bV9pZEdlb2xvY2F0aW9uTWFwLnJlbW92ZShpdCk7CiAgICAgbV9w
cml2YXRlLT5tX2dlb2xvY2F0aW9uSWRNYXAucmVtb3ZlKGdlb2xvY2F0aW9uKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQk1ldGFkYXRhLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQk1ldGFkYXRhLmNwcAppbmRleCBiOGUzZGIzYTQw
MTdmYTc1MzBmOTI2ZDBmZmNkOGQyZTFlODJkNzM0Li5kZDFjMmM4ZTU0MGZmZWJiMzg4YWQyY2Mx
MzZiOGNlYmZmMDlkY2I3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJJREJNZXRhZGF0YS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURC
TWV0YWRhdGEuY3BwCkBAIC00Nyw3ICs0Nyw3IEBAIFdlYklEQk1ldGFkYXRhOjpXZWJJREJNZXRh
ZGF0YShjb25zdCBXZWJDb3JlOjpJREJEYXRhYmFzZU1ldGFkYXRhJiBtZXRhZGF0YSkKIAogICAg
IHNpemVfdCBpID0gMDsKICAgICBmb3IgKElEQkRhdGFiYXNlTWV0YWRhdGE6Ok9iamVjdFN0b3Jl
TWFwOjpjb25zdF9pdGVyYXRvciBzdG9yZUl0ZXJhdG9yID0gbWV0YWRhdGEub2JqZWN0U3RvcmVz
LmJlZ2luKCk7IHN0b3JlSXRlcmF0b3IgIT0gbWV0YWRhdGEub2JqZWN0U3RvcmVzLmVuZCgpOyAr
K3N0b3JlSXRlcmF0b3IpIHsKLSAgICAgICAgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYg
b2JqZWN0U3RvcmUgPSBzdG9yZUl0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgIGNvbnN0IElEQk9i
amVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlID0gc3RvcmVJdGVyYXRvci0+dmFsdWU7CiAg
ICAgICAgIE9iamVjdFN0b3JlIHdlYk9iamVjdFN0b3JlOwogICAgICAgICB3ZWJPYmplY3RTdG9y
ZS5uYW1lID0gb2JqZWN0U3RvcmUubmFtZTsKICAgICAgICAgd2ViT2JqZWN0U3RvcmUua2V5UGF0
aCA9IG9iamVjdFN0b3JlLmtleVBhdGg7CkBAIC01Nyw3ICs1Nyw3IEBAIFdlYklEQk1ldGFkYXRh
OjpXZWJJREJNZXRhZGF0YShjb25zdCBXZWJDb3JlOjpJREJEYXRhYmFzZU1ldGFkYXRhJiBtZXRh
ZGF0YSkKIAogICAgICAgICBzaXplX3QgaiA9IDA7CiAgICAgICAgIGZvciAoSURCT2JqZWN0U3Rv
cmVNZXRhZGF0YTo6SW5kZXhNYXA6OmNvbnN0X2l0ZXJhdG9yIGluZGV4SXRlcmF0b3IgPSBvYmpl
Y3RTdG9yZS5pbmRleGVzLmJlZ2luKCk7IGluZGV4SXRlcmF0b3IgIT0gb2JqZWN0U3RvcmUuaW5k
ZXhlcy5lbmQoKTsgKytpbmRleEl0ZXJhdG9yKSB7Ci0gICAgICAgICAgICBjb25zdCBJREJJbmRl
eE1ldGFkYXRhJiBpbmRleCA9IGluZGV4SXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgICAgIGNv
bnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4ID0gaW5kZXhJdGVyYXRvci0+dmFsdWU7CiAgICAg
ICAgICAgICBJbmRleCB3ZWJJbmRleDsKICAgICAgICAgICAgIHdlYkluZGV4Lm5hbWUgPSBpbmRl
eC5uYW1lOwogICAgICAgICAgICAgd2ViSW5kZXgua2V5UGF0aCA9IGluZGV4LmtleVBhdGg7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJbnRlbnQuY3BwIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW50ZW50LmNwcAppbmRleCA1NTc3NWVjZmNkYzE2
MjA0ZTU4NDA2YTE1NzhhZThlYjY2ODdlZDhjLi4wNDFjN2YyZTljNTAzNTc1OWJkOGUzZWJiMzQz
ZmM0Y2ZmZGI3ZDBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJ
bnRlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkludGVudC5jcHAK
QEAgLTE4OCw3ICsxODgsNyBAQCBXZWJTdHJpbmcgV2ViSW50ZW50OjpleHRyYXNWYWx1ZShjb25z
dCBXZWJTdHJpbmcmIG5hbWUpIGNvbnN0CiAgICAgV1RGOjpIYXNoTWFwPFN0cmluZywgU3RyaW5n
Pjo6Y29uc3RfaXRlcmF0b3IgdmFsID0gbV9wcml2YXRlLT5leHRyYXMoKS5maW5kKG5hbWUpOwog
ICAgIGlmICh2YWwgPT0gbV9wcml2YXRlLT5leHRyYXMoKS5lbmQoKSkKICAgICAgICAgcmV0dXJu
IFdlYlN0cmluZygpOwotICAgIHJldHVybiB2YWwtPnNlY29uZDsKKyAgICByZXR1cm4gdmFsLT52
YWx1ZTsKICNlbHNlCiAgICAgcmV0dXJuIFdlYlN0cmluZygpOwogI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL01lbW9yeUluc3RydW1lbnRhdGlvblRlc3Qu
Y3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9NZW1vcnlJbnN0cnVtZW50YXRpb25U
ZXN0LmNwcAppbmRleCAxMDU5MDc3ZjBjMWU5Zjg4YTRkYjZiZWRiZGM0Y2Y3NzBkMDgzMzRlLi43
MWFhNmRhM2EzZTJiZGRhY2QzY2JiNzQxYjI0OTFhNDQ4MGFiODQxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL01lbW9yeUluc3RydW1lbnRhdGlvblRlc3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTWVtb3J5SW5zdHJ1bWVudGF0aW9uVGVz
dC5jcHAKQEAgLTYzMSw3ICs2MzEsNyBAQCBURVNUKE1lbW9yeUluc3RydW1lbnRhdGlvblRlc3Qs
IGhhc2hNYXBXaXRoVmFsdWVzQ29udmVydGlibGVUb0ludCkKICAgICBmb3IgKGludCBpID0gMDsg
aSA8IGNvdW50OyArK2kpIHsKICAgICAgICAga2V5c1ZlY3Rvci5hcHBlbmQoYWRvcHRQdHIobmV3
IEluc3RydW1lbnRlZENvbnZlcnRpYmxlVG9JbnQoKSkpOwogICAgICAgICB2YWx1ZXNWZWN0b3Iu
YXBwZW5kKGFkb3B0UHRyKG5ldyBOb3RJbnN0cnVtZW50ZWQoKSkpOwotICAgICAgICB2YWx1ZS0+
c2V0KGtleXNWZWN0b3JbaV0uZ2V0KCksIEluc3RydW1lbnRlZENvbnZlcnRpYmxlVG9JbnQoKSku
aXRlcmF0b3ItPnNlY29uZC5tX25vdEluc3RydW1lbnRlZCA9IHZhbHVlc1ZlY3RvcltpXS5nZXQo
KTsKKyAgICAgICAgdmFsdWUtPnNldChrZXlzVmVjdG9yW2ldLmdldCgpLCBJbnN0cnVtZW50ZWRD
b252ZXJ0aWJsZVRvSW50KCkpLml0ZXJhdG9yLT52YWx1ZS5tX25vdEluc3RydW1lbnRlZCA9IHZh
bHVlc1ZlY3RvcltpXS5nZXQoKTsKICAgICB9CiAgICAgSW5zdHJ1bWVudGVkT3duZXI8VGVzdE1h
cCogPiByb290KHZhbHVlLmdldCgpKTsKICAgICBoZWxwZXIuYWRkUm9vdE9iamVjdChyb290KTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViU29ja2V0RXh0ZW5z
aW9uRGlzcGF0Y2hlclRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJT
b2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyVGVzdC5jcHAKaW5kZXggNzBmMjFhZTljMDQ5ZTNlNDdm
OGMzMGE1M2IxOTY5Yzc1ZTg5NmNjOS4uNTI5MDViYWIxZDU2N2Q2ZDBjNDY3NDRiYmYyMDRjYTJm
ZDBmMmNlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJTb2Nr
ZXRFeHRlbnNpb25EaXNwYXRjaGVyVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9XZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyVGVzdC5jcHAKQEAgLTEwNSwxMCAr
MTA1LDEwIEBAIFRFU1RfRihXZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyVGVzdCwgVGVzdFBh
cmFtZXRlcnMpCiAgICAgRVhQRUNUX0VRKDIsIG1fcGFyc2VkUGFyYW1ldGVyc1swXS5zaXplKCkp
OwogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+OjppdGVyYXRvciBwYXJhbWV0ZXIgPSBtX3Bh
cnNlZFBhcmFtZXRlcnNbMF0uZmluZCgibWF4LWNoYW5uZWxzIik7CiAgICAgRVhQRUNUX1RSVUUo
cGFyYW1ldGVyICE9IG1fcGFyc2VkUGFyYW1ldGVyc1swXS5lbmQoKSk7Ci0gICAgRVhQRUNUX0VR
KCI0IiwgcGFyYW1ldGVyLT5zZWNvbmQpOworICAgIEVYUEVDVF9FUSgiNCIsIHBhcmFtZXRlci0+
dmFsdWUpOwogICAgIHBhcmFtZXRlciA9IG1fcGFyc2VkUGFyYW1ldGVyc1swXS5maW5kKCJmbG93
LWNvbnRyb2wiKTsKICAgICBFWFBFQ1RfVFJVRShwYXJhbWV0ZXIgIT0gbV9wYXJzZWRQYXJhbWV0
ZXJzWzBdLmVuZCgpKTsKLSAgICBFWFBFQ1RfVFJVRShwYXJhbWV0ZXItPnNlY29uZC5pc051bGwo
KSk7CisgICAgRVhQRUNUX1RSVUUocGFyYW1ldGVyLT52YWx1ZS5pc051bGwoKSk7CiB9CiAKIFRF
U1RfRihXZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyVGVzdCwgVGVzdE11bHRpcGxlKQpAQCAt
MTMzLDEyICsxMzMsMTIgQEAgVEVTVF9GKFdlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXJUZXN0
LCBUZXN0TXVsdGlwbGUpCiAgICAgICAgIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBw
YXJzZWRQYXJhbWV0ZXJzID0gbV9wYXJzZWRQYXJhbWV0ZXJzW2ldOwogICAgICAgICBFWFBFQ1Rf
RVEoZXhwZWN0ZWRbaV0ucGFyYW1ldGVycy5zaXplKCksIG1fcGFyc2VkUGFyYW1ldGVyc1tpXS5z
aXplKCkpOwogICAgICAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVy
YXRvciBpdGVyYXRvciA9IGV4cGVjdGVkUGFyYW1ldGVycy5iZWdpbigpOyBpdGVyYXRvciAhPSBl
eHBlY3RlZFBhcmFtZXRlcnMuZW5kKCk7ICsraXRlcmF0b3IpIHsKLSAgICAgICAgICAgIEhhc2hN
YXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBwYXJzZWQgPSBwYXJzZWRQYXJhbWV0
ZXJzLmZpbmQoaXRlcmF0b3ItPmZpcnN0KTsKKyAgICAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBT
dHJpbmc+Ojpjb25zdF9pdGVyYXRvciBwYXJzZWQgPSBwYXJzZWRQYXJhbWV0ZXJzLmZpbmQoaXRl
cmF0b3ItPmtleSk7CiAgICAgICAgICAgICBFWFBFQ1RfVFJVRShwYXJzZWQgIT0gcGFyc2VkUGFy
YW1ldGVycy5lbmQoKSk7Ci0gICAgICAgICAgICBpZiAoaXRlcmF0b3ItPnNlY29uZC5pc051bGwo
KSkKLSAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShwYXJzZWQtPnNlY29uZC5pc051bGwoKSk7
CisgICAgICAgICAgICBpZiAoaXRlcmF0b3ItPnZhbHVlLmlzTnVsbCgpKQorICAgICAgICAgICAg
ICAgIEVYUEVDVF9UUlVFKHBhcnNlZC0+dmFsdWUuaXNOdWxsKCkpOwogICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIEVYUEVDVF9FUShpdGVyYXRvci0+c2Vjb25kLCBwYXJzZWQtPnNl
Y29uZCk7CisgICAgICAgICAgICAgICAgRVhQRUNUX0VRKGl0ZXJhdG9yLT52YWx1ZSwgcGFyc2Vk
LT52YWx1ZSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0xODYsNyArMTg2LDcgQEAgVEVTVF9G
KFdlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXJUZXN0LCBUZXN0UGVyTWVzc2FnZUNvbXByZXNz
RXhhbXBsZSkKICAgICBFWFBFQ1RfVFJVRShtX2V4dGVuc2lvbnMucHJvY2Vzc0hlYWRlclZhbHVl
KCJwZXJtZXNzYWdlLWNvbXByZXNzOyBtZXRob2Q9XCJmb287IHg9XFxcIkhlbGxvIFdvcmxkXFxc
IiwgYmFyXCIiKSk7CiAgICAgRVhQRUNUX0VRKDFVLCBtX3BhcnNlZEV4dGVuc2lvblRva2Vucy5z
aXplKCkpOwogICAgIEVYUEVDVF9FUSgicGVybWVzc2FnZS1jb21wcmVzcyIsIG1fcGFyc2VkRXh0
ZW5zaW9uVG9rZW5zWzBdKTsKLSAgICBTdHJpbmcgbWV0aG9kUGFyYW1ldGVyID0gbV9wYXJzZWRQ
YXJhbWV0ZXJzWzBdLmZpbmQoIm1ldGhvZCIpLT5zZWNvbmQ7CisgICAgU3RyaW5nIG1ldGhvZFBh
cmFtZXRlciA9IG1fcGFyc2VkUGFyYW1ldGVyc1swXS5maW5kKCJtZXRob2QiKS0+dmFsdWU7CiAg
ICAgRVhQRUNUX0VRKCJmb287IHg9XCJIZWxsbyBXb3JsZFwiLCBiYXIiLCBtZXRob2RQYXJhbWV0
ZXIpOwogCiAgICAgQ1N0cmluZyBtZXRob2RWYWx1ZSA9IG1ldGhvZFBhcmFtZXRlci5hc2NpaSgp
OwpAQCAtMTk4LDggKzE5OCw4IEBAIFRFU1RfRihXZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVy
VGVzdCwgVGVzdFBlck1lc3NhZ2VDb21wcmVzc0V4YW1wbGUpCiAgICAgRVhQRUNUX0VRKCJmb28i
LCB0b2tlbjEpOwogICAgIEVYUEVDVF9FUSgxLCBwYXJhbWV0ZXJzMS5zaXplKCkpOwogICAgIEhh
c2hNYXA8U3RyaW5nLCBTdHJpbmc+OjppdGVyYXRvciB4cGFyYW1ldGVyID0gcGFyYW1ldGVyczEu
ZmluZCgieCIpOwotICAgIEVYUEVDVF9FUSgieCIsIHhwYXJhbWV0ZXItPmZpcnN0KTsKLSAgICBF
WFBFQ1RfRVEoIkhlbGxvIFdvcmxkIiwgeHBhcmFtZXRlci0+c2Vjb25kKTsKKyAgICBFWFBFQ1Rf
RVEoIngiLCB4cGFyYW1ldGVyLT5rZXkpOworICAgIEVYUEVDVF9FUSgiSGVsbG8gV29ybGQiLCB4
cGFyYW1ldGVyLT52YWx1ZSk7CiAKICAgICBTdHJpbmcgdG9rZW4yOwogICAgIEhhc2hNYXA8U3Ry
aW5nLCBTdHJpbmc+IHBhcmFtZXRlcnMyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwv
V2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsLmNwcCBiL1NvdXJjZS9XZWJL
aXQvZWZsL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbC5jcHAKaW5kZXgg
YzRhNzNmODZkMjA5YWJlYWU0ODY1YTMyNGI2ODFlZDU3MmY3NDUzMy4uNTI4ZDJjN2I0MzE2ZTBk
NzlmODhhM2VhZDNjMTUyMGY0MDdhNzcwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwv
V2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmwuY3BwCkBA
IC00ODUsNyArNDg1LDcgQEAgdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OmV2YWx1YXRl
U2NyaXB0SW5Jc29sYXRlZFdvcmxkKGNvbnN0IEV2YXNfT2JqZWN0KgogICAgIGVsc2UgewogICAg
ICAgICBXVEY6Okhhc2hNYXA8aW50LCBSZWZQdHI8V2ViQ29yZTo6RE9NV3JhcHBlcldvcmxkID4g
Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSB3b3JsZE1hcC5maW5kKHdvcmxkSUQpOwogICAgICAgICBp
ZiAoaXQgIT0gd29ybGRNYXAuZW5kKCkpCi0gICAgICAgICAgICBzY3JpcHRXb3JsZCA9ICgqaXQp
LnNlY29uZDsKKyAgICAgICAgICAgIHNjcmlwdFdvcmxkID0gKCppdCkudmFsdWU7CiAgICAgICAg
IGVsc2UgewogICAgICAgICAgICAgc2NyaXB0V29ybGQgPSBXZWJDb3JlOjpTY3JpcHRDb250cm9s
bGVyOjpjcmVhdGVXb3JsZCgpOwogICAgICAgICAgICAgd29ybGRNYXAuc2V0KHdvcmxkSUQsIHNj
cmlwdFdvcmxkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0
L1BsYXRmb3JtU3RyYXRlZ2llc0VmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3Vw
cG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNFZmwuY3BwCmluZGV4IDc5M2JmMzhmNWMxMmQzZjY5YTVl
YzI0ZDA1YzgxZmYwNjBkNmI0NTMuLmMyNjIwODVjMzQ5MzVjNjZmZWU3ZTBjMzdjYzE1MWE0OGRj
MzhkMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L1BsYXRm
b3JtU3RyYXRlZ2llc0VmbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBv
cnQvUGxhdGZvcm1TdHJhdGVnaWVzRWZsLmNwcApAQCAtOTksOCArOTksOCBAQCB2b2lkIFBsYXRm
b3JtU3RyYXRlZ2llc0VmbDo6Z2V0UGx1Z2luSW5mbyhjb25zdCBQYWdlKiwgVmVjdG9yPFBsdWdp
bkluZm8+JiBvdXRQbAogICAgICAgICBmb3IgKE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7CiAgICAgICAgICAgICBNaW1lQ2xhc3NJbmZvIG1pbWU7CiAKLSAgICAgICAgICAgIG1pbWUu
dHlwZSA9IGl0LT5maXJzdDsKLSAgICAgICAgICAgIG1pbWUuZGVzYyA9IGl0LT5zZWNvbmQ7Cisg
ICAgICAgICAgICBtaW1lLnR5cGUgPSBpdC0+a2V5OworICAgICAgICAgICAgbWltZS5kZXNjID0g
aXQtPnZhbHVlOwogICAgICAgICAgICAgbWltZS5leHRlbnNpb25zID0gcGFja2FnZS0+bWltZVRv
RXh0ZW5zaW9ucygpLmdldChtaW1lLnR5cGUpOwogICAgICAgICAgICAgcGx1Z2luSW5mby5taW1l
cy5hcHBlbmQobWltZSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZs
L2V3ay9ld2tfaW50ZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfaW50ZW50LmNw
cAppbmRleCA3NmMyZDY4ZGFhNzIxMjRlYTViNjFiN2UyNGYwMzRjMmMwY2RiODFlLi44M2JjZTg3
NjRhZjZhZDc5NzQ0MzY5MmY1Mzk2ZTNiYWFiMzU1ODhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2VmbC9ld2svZXdrX2ludGVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3
a19pbnRlbnQuY3BwCkBAIC0xMjAsNyArMTIwLDcgQEAgY29uc3QgY2hhciogZXdrX2ludGVudF9l
eHRyYV9nZXQoY29uc3QgRXdrX0ludGVudCogaW50ZW50LCBjb25zdCBjaGFyKiBrZXkpCiAgICAg
V1RGOjpIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgdmFsID0gY29yZS0+
ZXh0cmFzKCkuZmluZChTdHJpbmc6OmZyb21VVEY4KGtleSkpOwogICAgIGlmICh2YWwgPT0gY29y
ZS0+ZXh0cmFzKCkuZW5kKCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBlaW5hX3N0
cmluZ3NoYXJlX2FkZCh2YWwtPnNlY29uZC51dGY4KCkuZGF0YSgpKTsKKyAgICByZXR1cm4gZWlu
YV9zdHJpbmdzaGFyZV9hZGQodmFsLT52YWx1ZS51dGY4KCkuZGF0YSgpKTsKICNlbHNlCiAgICAg
cmV0dXJuIDA7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVT
dXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc0d0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJD
b3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNHdGsuY3BwCmluZGV4IDI5MjE3M2FlMjkyZjUx
MjExODdlOGJlNTA1MDM5M2Q3YzMzODRjNWEuLjkxMDNjODQ2MDk0ZDUxZjhmNWI5NDg3NGNkNjdh
ZjA0Nzk5MDlhZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0
L1BsYXRmb3JtU3RyYXRlZ2llc0d0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29y
ZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzR3RrLmNwcApAQCAtODgsOCArODgsOCBAQCB2b2lk
IFBsYXRmb3JtU3RyYXRlZ2llc0d0azo6Z2V0UGx1Z2luSW5mbyhjb25zdCBQYWdlKiBwYWdlLCBW
ZWN0b3I8UGx1Z2luSW5mbz4mCiAgICAgICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gbWltZVRvRGVzY3JpcHRpb25zLmVuZCgpOwogICAgICAgICBmb3IgKE1J
TUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtaW1lVG9EZXNjcmlwdGlv
bnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBNaW1lQ2xhc3NJbmZv
IG1pbWU7Ci0gICAgICAgICAgICBtaW1lLnR5cGUgPSBpdC0+Zmlyc3Q7Ci0gICAgICAgICAgICBt
aW1lLmRlc2MgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgbWltZS50eXBlID0gaXQtPmtleTsK
KyAgICAgICAgICAgIG1pbWUuZGVzYyA9IGl0LT52YWx1ZTsKICAgICAgICAgICAgIG1pbWUuZXh0
ZW5zaW9ucyA9IHBhY2thZ2UtPm1pbWVUb0V4dGVuc2lvbnMoKS5nZXQobWltZS50eXBlKTsKICAg
ICAgICAgICAgIHBsdWdpbkluZm8ubWltZXMuYXBwZW5kKG1pbWUpOwogICAgICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZmF2aWNvbmRhdGFiYXNlLmNw
cCBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRmYXZpY29uZGF0YWJhc2UuY3BwCmlu
ZGV4IGM2MmFiMzdmMWJjYTU1ZjhjM2U5YWM2NGQzMDMwMmEzN2NmNTgwMmYuLmQ3NzQxOWFlODIz
MWI0NjlhZGNlNmVhZjRlN2E2ZjJhZjk4NTQ1ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXRmYXZpY29uZGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXRmYXZpY29uZGF0YWJhc2UuY3BwCkBAIC02MTMsMTggKzYxMywxOCBA
QCBzdGF0aWMgdm9pZCB3ZWJraXRGYXZpY29uRGF0YWJhc2VJbXBvcnRGaW5pc2hlZChXZWJLaXRG
YXZpY29uRGF0YWJhc2UqIGRhdGFiYXNlKQogICAgIFZlY3RvcjxTdHJpbmc+IHRvRGVsZXRlVVJM
czsKICAgICBQZW5kaW5nSWNvblJlcXVlc3RNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGRhdGFi
YXNlLT5wcml2LT5wZW5kaW5nSWNvblJlcXVlc3RzLmVuZCgpOwogICAgIGZvciAoUGVuZGluZ0lj
b25SZXF1ZXN0TWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gZGF0YWJhc2UtPnByaXYtPnBlbmRp
bmdJY29uUmVxdWVzdHMuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewotICAgICAgICBT
dHJpbmcgaWNvblVSTCA9IGljb25EYXRhYmFzZSgpLnN5bmNocm9ub3VzSWNvblVSTEZvclBhZ2VV
UkwoaXRlci0+Zmlyc3QpOworICAgICAgICBTdHJpbmcgaWNvblVSTCA9IGljb25EYXRhYmFzZSgp
LnN5bmNocm9ub3VzSWNvblVSTEZvclBhZ2VVUkwoaXRlci0+a2V5KTsKICAgICAgICAgaWYgKCFp
Y29uVVJMLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIFBlbmRp
bmdJY29uUmVxdWVzdFZlY3RvciogaWNvbnMgPSBpdGVyLT5zZWNvbmQ7CisgICAgICAgIFBlbmRp
bmdJY29uUmVxdWVzdFZlY3RvciogaWNvbnMgPSBpdGVyLT52YWx1ZTsKICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBpY29ucy0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIFBlbmRp
bmdJY29uUmVxdWVzdCogcmVxdWVzdCA9IGljb25zLT5hdChpKS5nZXQoKTsKICAgICAgICAgICAg
IGlmIChyZXF1ZXN0LT5hc3luY1Jlc3VsdCgpKQogICAgICAgICAgICAgICAgIHJlcXVlc3QtPmFz
eW5jUmVzdWx0Q29tcGxldGUoMCk7CiAgICAgICAgIH0KIAotICAgICAgICB0b0RlbGV0ZVVSTHMu
YXBwZW5kKGl0ZXItPmZpcnN0KTsKKyAgICAgICAgdG9EZWxldGVVUkxzLmFwcGVuZChpdGVyLT5r
ZXkpOwogICAgIH0KIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdG9EZWxldGVVUkxzLnNp
emUoKTsgKytpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdl
YnBsdWdpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2VicGx1Z2luLmNw
cAppbmRleCBlMDNiMWVhNmRhMzNiN2UyZjAwMjI1NWNlODc3Nzg2MjRjZGE3MDhjLi4wMWQwYmI1
ZjJiZmQ3MDBmNmIzYzlmYzRmOGU0MjBjNTcyNDg2ZWMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0d2VicGx1Z2luLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0d2VicGx1Z2luLmNwcApAQCAtMjM3LDEwICsyMzcsMTAgQEAgR1NMaXN0
KiB3ZWJraXRfd2ViX3BsdWdpbl9nZXRfbWltZXR5cGVzKFdlYktpdFdlYlBsdWdpbiogcGx1Z2lu
KQogCiAgICAgZm9yIChNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bWltZVRvRGVzY3JpcHRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBX
ZWJLaXRXZWJQbHVnaW5NSU1FVHlwZSogbWltZVR5cGUgPSBnX3NsaWNlX25ldzAoV2ViS2l0V2Vi
UGx1Z2luTUlNRVR5cGUpOwotICAgICAgICBtaW1lVHlwZS0+bmFtZSA9IGdfc3RyZHVwKGl0LT5m
aXJzdC51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgbWltZVR5cGUtPmRlc2NyaXB0aW9uID0gZ19z
dHJkdXAoaXQtPnNlY29uZC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgbWltZVR5cGUtPm5hbWUg
PSBnX3N0cmR1cChpdC0+a2V5LnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBtaW1lVHlwZS0+ZGVz
Y3JpcHRpb24gPSBnX3N0cmR1cChpdC0+dmFsdWUudXRmOCgpLmRhdGEoKSk7CiAKLSAgICAgICAg
VmVjdG9yPFN0cmluZz4gZXh0ZW5zaW9ucyA9IHByaXYtPmNvcmVQbHVnaW4tPm1pbWVUb0V4dGVu
c2lvbnMoKS5nZXQoaXQtPmZpcnN0KTsKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gZXh0ZW5zaW9u
cyA9IHByaXYtPmNvcmVQbHVnaW4tPm1pbWVUb0V4dGVuc2lvbnMoKS5nZXQoaXQtPmtleSk7CiAg
ICAgICAgIG1pbWVUeXBlLT5leHRlbnNpb25zID0gc3RhdGljX2Nhc3Q8Z2NoYXIqKj4oZ19tYWxs
b2MwKHNpemVvZihjaGFyKikgKiAoZXh0ZW5zaW9ucy5zaXplKCkgKyAxKSkpOwogICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXh0ZW5zaW9ucy5zaXplKCk7IGkrKykKICAgICAgICAg
ICAgIG1pbWVUeXBlLT5leHRlbnNpb25zW2ldID0gZ19zdHJkdXAoZXh0ZW5zaW9uc1tpXS51dGY4
KCkuZGF0YSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL0hpc3RvcnkvV2ViSGlz
dG9yeS5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL0hpc3RvcnkvV2ViSGlzdG9yeS5tbQppbmRleCA2
OTY0ZmM5NDliNTEyMTczYTZiZGM1ZTcwYjU2MThkMzFjYjY3N2EzLi5lNzgxZDMyZmQxZGU5NTBk
OTE0YWY0ODM0OTc2NDIwZGY1ODdkYWY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9I
aXN0b3J5L1dlYkhpc3RvcnkubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvSGlzdG9yeS9XZWJI
aXN0b3J5Lm1tCkBAIC0yMzgsNyArMjM4LDcgQEAgc3RhdGljIGlubGluZSBXZWJIaXN0b3J5RGF0
ZUtleSBkYXRlS2V5KE5TVGltZUludGVydmFsIGRhdGUpCiAgICAgICAgIHJldHVybiBOTzsKIAog
ICAgIERhdGVUb0VudHJpZXNNYXA6Oml0ZXJhdG9yIGl0ID0gX2VudHJpZXNCeURhdGUtPmZpbmQo
ZGF0ZUtleSk7Ci0gICAgTlNNdXRhYmxlQXJyYXkgKmVudHJpZXNGb3JEYXRlID0gaXQtPnNlY29u
ZC5nZXQoKTsKKyAgICBOU011dGFibGVBcnJheSAqZW50cmllc0ZvckRhdGUgPSBpdC0+dmFsdWUu
Z2V0KCk7CiAgICAgW2VudHJpZXNGb3JEYXRlIHJlbW92ZU9iamVjdElkZW50aWNhbFRvOmVudHJ5
XTsKICAgICAKICAgICAvLyByZW1vdmUgdGhpcyBkYXRlIGVudGlyZWx5IGlmIHRoZXJlIGFyZSBu
byBvdGhlciBlbnRyaWVzIG9uIGl0CkBAIC00NDAsNyArNDQwLDcgQEAgc3RhdGljIGlubGluZSBX
ZWJIaXN0b3J5RGF0ZUtleSBkYXRlS2V5KE5TVGltZUludGVydmFsIGRhdGUpCiAgICAgICAgIGRh
eXNBc1RpbWVJbnRlcnZhbHMucmVzZXJ2ZUNhcGFjaXR5KF9lbnRyaWVzQnlEYXRlLT5zaXplKCkp
OwogICAgICAgICBEYXRlVG9FbnRyaWVzTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBfZW50cmll
c0J5RGF0ZS0+ZW5kKCk7CiAgICAgICAgIGZvciAoRGF0ZVRvRW50cmllc01hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBfZW50cmllc0J5RGF0ZS0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAg
ICAgICAgICAgZGF5c0FzVGltZUludGVydmFscy5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAg
ICAgIGRheXNBc1RpbWVJbnRlcnZhbHMuYXBwZW5kKGl0LT5rZXkpOwogCiAgICAgICAgIHNvcnQo
ZGF5c0FzVGltZUludGVydmFscy5iZWdpbigpLCBkYXlzQXNUaW1lSW50ZXJ2YWxzLmVuZCgpKTsK
ICAgICAgICAgc2l6ZV90IGNvdW50ID0gZGF5c0FzVGltZUludGVydmFscy5zaXplKCk7CkBAIC04
OTcsNyArODk3LDcgQEAgV2ViSGlzdG9yeVdyaXRlcjo6V2ViSGlzdG9yeVdyaXRlcihEYXRlVG9F
bnRyaWVzTWFwKiBlbnRyaWVzQnlEYXRlKQogICAgIG1fZGF0ZUtleXMucmVzZXJ2ZUNhcGFjaXR5
KG1fZW50cmllc0J5RGF0ZS0+c2l6ZSgpKTsKICAgICBEYXRlVG9FbnRyaWVzTWFwOjpjb25zdF9p
dGVyYXRvciBlbmQgPSBtX2VudHJpZXNCeURhdGUtPmVuZCgpOwogICAgIGZvciAoRGF0ZVRvRW50
cmllc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2VudHJpZXNCeURhdGUtPmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkKLSAgICAgICAgbV9kYXRlS2V5cy5hcHBlbmQoaXQtPmZpcnN0KTsKKyAg
ICAgICAgbV9kYXRlS2V5cy5hcHBlbmQoaXQtPmtleSk7CiAgICAgc29ydChtX2RhdGVLZXlzLmJl
Z2luKCksIG1fZGF0ZUtleXMuZW5kKCkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tIGIvU291cmNlL1dlYktpdC9tYWMvTWlzYy9X
ZWJDb3JlU3RhdGlzdGljcy5tbQppbmRleCAyOTZkZDZiMjViZDhiZGI3N2EzYzY4MGUxMzI0ZTVi
Mzk3ZDI2NmMzLi44ZGU2MzEzOWI3NzQzNzZiYmQxZjdjMTEwNmY2ZWVkYmRkM2U1YjI3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tCisrKyBi
L1NvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW0KQEAgLTg5LDggKzg5
LDggQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAgICAgT3duUHRyPFR5cGVDb3VudFNldD4g
Y291bnRzKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5wcm90ZWN0ZWRP
YmplY3RUeXBlQ291bnRzKCkpOwogICAgIEhhc2hDb3VudGVkU2V0PGNvbnN0IGNoYXIqPjo6aXRl
cmF0b3IgZW5kID0gY291bnRzLT5lbmQoKTsKICAgICBmb3IgKEhhc2hDb3VudGVkU2V0PGNvbnN0
IGNoYXIqPjo6aXRlcmF0b3IgaXQgPSBjb3VudHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0LT5zZWNvbmQ7ICsraSkKLSAgICAg
ICAgICAgIFtyZXN1bHQgYWRkT2JqZWN0OltOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzpp
dC0+Zmlyc3RdXTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0LT52YWx1ZTsg
KytpKQorICAgICAgICAgICAgW3Jlc3VsdCBhZGRPYmplY3Q6W05TU3RyaW5nIHN0cmluZ1dpdGhV
VEY4U3RyaW5nOml0LT5rZXldXTsKICAgICAKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMTA0
LDggKzEwNCw4IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogICAgIE93blB0cjxUeXBlQ291
bnRTZXQ+IGNvdW50cyhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAub2Jq
ZWN0VHlwZUNvdW50cygpKTsKICAgICBIYXNoQ291bnRlZFNldDxjb25zdCBjaGFyKj46Oml0ZXJh
dG9yIGVuZCA9IGNvdW50cy0+ZW5kKCk7CiAgICAgZm9yIChIYXNoQ291bnRlZFNldDxjb25zdCBj
aGFyKj46Oml0ZXJhdG9yIGl0ID0gY291bnRzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdC0+c2Vjb25kOyArK2kpCi0gICAgICAg
ICAgICBbcmVzdWx0IGFkZE9iamVjdDpbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6aXQt
PmZpcnN0XV07CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdC0+dmFsdWU7ICsr
aSkKKyAgICAgICAgICAgIFtyZXN1bHQgYWRkT2JqZWN0OltOU1N0cmluZyBzdHJpbmdXaXRoVVRG
OFN0cmluZzppdC0+a2V5XV07CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdE1h
bmFnZXIubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdp
bkhvc3RNYW5hZ2VyLm1tCmluZGV4IGUxNDRhOGM2ZjUxNjljNWUwZWJlOWQwNWQ1ZDdlNzQ5Mzgx
MWExMjAuLjQ3MzJkMjNkOTk4M2QzMWEyMmRjYmZjNjQ3N2Q4ZDRmNDk3MGZiYjUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdE1h
bmFnZXIubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQ
bHVnaW5Ib3N0TWFuYWdlci5tbQpAQCAtNzMsNyArNzMsNyBAQCBOZXRzY2FwZVBsdWdpbkhvc3RQ
cm94eSogTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlcjo6aG9zdEZvclBsdWdpbihjb25zdCBXVEY6
OlN0cgogICAgIAogICAgIC8vIFRoZSBwYWNrYWdlIHdhcyBhbHJlYWR5IGluIHRoZSBtYXAsIGp1
c3QgcmV0dXJuIGl0LgogICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJldHVy
biByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRv
ci0+dmFsdWU7CiAgICAgICAgIAogICAgIG1hY2hfcG9ydF90IGNsaWVudFBvcnQ7CiAgICAgaWYg
KG1hY2hfcG9ydF9hbGxvY2F0ZShtYWNoX3Rhc2tfc2VsZigpLCBNQUNIX1BPUlRfUklHSFRfUkVD
RUlWRSwgJmNsaWVudFBvcnQpICE9IEtFUk5fU1VDQ0VTUykgewpAQCAtOTUsNyArOTUsNyBAQCBO
ZXRzY2FwZVBsdWdpbkhvc3RQcm94eSogTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlcjo6aG9zdEZv
clBsdWdpbihjb25zdCBXVEY6OlN0cgogICAgIAogICAgIE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5
KiBob3N0UHJveHkgPSBuZXcgTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkoY2xpZW50UG9ydCwgcGx1
Z2luSG9zdFBvcnQsIHBsdWdpbkhvc3RQU04sIHNob3VsZENhY2hlTWlzc2luZ1Byb3BlcnRpZXNB
bmRNZXRob2RzKTsKICAgICAKLSAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IGhvc3RQcm94
eTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gaG9zdFByb3h5OwogICAgIAogICAgIHJl
dHVybiBob3N0UHJveHk7CiB9CkBAIC0yMTIsNyArMjEyLDcgQEAgdm9pZCBOZXRzY2FwZVBsdWdp
bkhvc3RNYW5hZ2VyOjpwbHVnaW5Ib3N0RGllZChOZXRzY2FwZVBsdWdpbkhvc3RQcm94eSogcGx1
Z2luSG8KIAogICAgIC8vIFRoaXMgaGFzIE8obikgY29tcGxleGl0eSBidXQgdGhlIG51bWJlciBv
ZiBhY3RpdmUgcGx1Zy1pbiBob3N0cyBpcyB2ZXJ5IHNtYWxsIHNvIGl0IHNob3VsZG4ndCBtYXR0
ZXIuCiAgICAgZm9yIChQbHVnaW5Ib3N0TWFwOjppdGVyYXRvciBpdCA9IG1fcGx1Z2luSG9zdHMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kID09IHBs
dWdpbkhvc3QpIHsKKyAgICAgICAgaWYgKGl0LT52YWx1ZSA9PSBwbHVnaW5Ib3N0KSB7CiAgICAg
ICAgICAgICBtX3BsdWdpbkhvc3RzLnJlbW92ZShpdCk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KQEAgLTI5NCw3ICsyOTQsNyBAQCB2b2lkIE5ldHNjYXBlUGx1Z2luSG9zdE1hbmFn
ZXI6OmRpZENyZWF0ZVdpbmRvdygpCiAgICAgLy8gU2VlIGlmIGFueSBvZiBvdXIgaG9zdHMgYXJl
IGluIGZ1bGwtc2NyZWVuIG1vZGUuCiAgICAgUGx1Z2luSG9zdE1hcDo6aXRlcmF0b3IgZW5kID0g
bV9wbHVnaW5Ib3N0cy5lbmQoKTsKICAgICBmb3IgKFBsdWdpbkhvc3RNYXA6Oml0ZXJhdG9yIGl0
ID0gbV9wbHVnaW5Ib3N0cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgTmV0
c2NhcGVQbHVnaW5Ib3N0UHJveHkqIGhvc3RQcm94eSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIE5l
dHNjYXBlUGx1Z2luSG9zdFByb3h5KiBob3N0UHJveHkgPSBpdC0+dmFsdWU7CiAgICAgICAgIAog
ICAgICAgICBpZiAoIWhvc3RQcm94eS0+aXNNZW51QmFyVmlzaWJsZSgpKSB7CiAgICAgICAgICAg
ICAvLyBNYWtlIG91cnNlbHZlcyB0aGUgZnJvbnQgcHJvY2Vzcy4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdFByb3h5Lm1tIGIv
U291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHku
bW0KaW5kZXggZWEwNDBmZmNjOGIxY2YyZjExMjdlYjczZDcwY2QxYWI0OGU0NDgzZC4uOGM0ZDU0
MGI3Y2YwZjg3Y2EyNWJiZjI5ZGI1ZjU3MzU4ZmU5ZTgzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkubW0KKysrIGIv
U291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHku
bW0KQEAgLTE0NCw3ICsxNDQsNyBAQCB2b2lkIE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5OjpwbHVn
aW5Ib3N0RGllZCgpCiAgIAogICAgIFBsdWdpbkluc3RhbmNlTWFwOjpjb25zdF9pdGVyYXRvciBl
bmQgPSBpbnN0YW5jZXMuZW5kKCk7CiAgICAgZm9yIChQbHVnaW5JbnN0YW5jZU1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBpbnN0YW5jZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAg
ICBpdC0+c2Vjb25kLT5wbHVnaW5Ib3N0RGllZCgpOworICAgICAgICBpdC0+dmFsdWUtPnBsdWdp
bkhvc3REaWVkKCk7CiAgICAgCiAgICAgTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlcjo6c2hhcmVk
KCkucGx1Z2luSG9zdERpZWQodGhpcyk7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW0gYi9Tb3Vy
Y2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHku
bW0KaW5kZXggOTE2NTZkODQ3MGNiYmVkNGQxNzY3NmI2ZWUzYzU5N2Q0NTcxN2U1MC4uNzdkYjE0
ODliM2M5NDRiYWNmNWE2ODBiMWZmZGM4YmQ4MWJiOGUyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFu
Y2VQcm94eS5tbQpAQCAtMTQ1LDcgKzE0NSw3IEBAIHVpbnQzMl90IE5ldHNjYXBlUGx1Z2luSW5z
dGFuY2VQcm94eTo6TG9jYWxPYmplY3RNYXA6OmlkRm9yT2JqZWN0KEpTR2xvYmFsRGF0YSYKICAg
ICAKICAgICBIYXNoTWFwPEpTQzo6SlNPYmplY3QqLCBwYWlyPHVpbnQzMl90LCB1aW50MzJfdD4g
Pjo6aXRlcmF0b3IgaXRlciA9IG1fanNPYmplY3RUb0lETWFwLmZpbmQob2JqZWN0KTsKICAgICBp
ZiAoaXRlciAhPSBtX2pzT2JqZWN0VG9JRE1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0ZXIt
PnNlY29uZC5maXJzdDsKKyAgICAgICAgcmV0dXJuIGl0ZXItPnZhbHVlLmZpcnN0OwogICAgIAog
ICAgIGRvIHsKICAgICAgICAgb2JqZWN0SUQgPSArK21fb2JqZWN0SURDb3VudGVyOwpAQCAtMTYy
LDcgKzE2Miw3IEBAIHZvaWQgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpMb2NhbE9iamVj
dE1hcDo6cmV0YWluKEpTQzo6SlNPYmplY3QqIG9iamVjdCkKICAgICBIYXNoTWFwPEpTQzo6SlNP
YmplY3QqLCBwYWlyPHVpbnQzMl90LCB1aW50MzJfdD4gPjo6aXRlcmF0b3IgaXRlciA9IG1fanNP
YmplY3RUb0lETWFwLmZpbmQob2JqZWN0KTsKICAgICBBU1NFUlQoaXRlciAhPSBtX2pzT2JqZWN0
VG9JRE1hcC5lbmQoKSk7CiAKLSAgICBpdGVyLT5zZWNvbmQuc2Vjb25kID0gaXRlci0+c2Vjb25k
LnNlY29uZCArIDE7CisgICAgaXRlci0+dmFsdWUuc2Vjb25kID0gaXRlci0+dmFsdWUuc2Vjb25k
ICsgMTsKIH0KIAogdm9pZCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OkxvY2FsT2JqZWN0
TWFwOjpyZWxlYXNlKEpTQzo6SlNPYmplY3QqIG9iamVjdCkKQEAgLTE3MCwxMCArMTcwLDEwIEBA
IHZvaWQgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpMb2NhbE9iamVjdE1hcDo6cmVsZWFz
ZShKU0M6OkpTT2JqZWN0KiBvYmplY3QpCiAgICAgSGFzaE1hcDxKU0M6OkpTT2JqZWN0KiwgcGFp
cjx1aW50MzJfdCwgdWludDMyX3Q+ID46Oml0ZXJhdG9yIGl0ZXIgPSBtX2pzT2JqZWN0VG9JRE1h
cC5maW5kKG9iamVjdCk7CiAgICAgQVNTRVJUKGl0ZXIgIT0gbV9qc09iamVjdFRvSURNYXAuZW5k
KCkpOwogCi0gICAgQVNTRVJUKGl0ZXItPnNlY29uZC5zZWNvbmQgPiAwKTsKLSAgICBpdGVyLT5z
ZWNvbmQuc2Vjb25kID0gaXRlci0+c2Vjb25kLnNlY29uZCAtIDE7Ci0gICAgaWYgKCFpdGVyLT5z
ZWNvbmQuc2Vjb25kKSB7Ci0gICAgICAgIG1faWRUb0pTT2JqZWN0TWFwLnJlbW92ZShpdGVyLT5z
ZWNvbmQuZmlyc3QpOworICAgIEFTU0VSVChpdGVyLT52YWx1ZS5zZWNvbmQgPiAwKTsKKyAgICBp
dGVyLT52YWx1ZS5zZWNvbmQgPSBpdGVyLT52YWx1ZS5zZWNvbmQgLSAxOworICAgIGlmICghaXRl
ci0+dmFsdWUuc2Vjb25kKSB7CisgICAgICAgIG1faWRUb0pTT2JqZWN0TWFwLnJlbW92ZShpdGVy
LT52YWx1ZS5maXJzdCk7CiAgICAgICAgIG1fanNPYmplY3RUb0lETWFwLnJlbW92ZShpdGVyKTsK
ICAgICB9CiB9CkBAIC0xOTcsMTAgKzE5NywxMCBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFu
Y2VQcm94eTo6TG9jYWxPYmplY3RNYXA6OmZvcmdldCh1aW50MzJfdCBvYmplY3RJRCkKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgSGFzaE1hcDxKU0M6OkpTT2JqZWN0KiwgcGFp
cjx1aW50MzJfdCwgdWludDMyX3Q+ID46Oml0ZXJhdG9yIHJJdGVyID0gbV9qc09iamVjdFRvSURN
YXAuZmluZChpdGVyLT5zZWNvbmQuZ2V0KCkpOworICAgIEhhc2hNYXA8SlNDOjpKU09iamVjdCos
IHBhaXI8dWludDMyX3QsIHVpbnQzMl90PiA+OjppdGVyYXRvciBySXRlciA9IG1fanNPYmplY3RU
b0lETWFwLmZpbmQoaXRlci0+dmFsdWUuZ2V0KCkpOwogCiAgICAgLy8gSWYgdGhlIG9iamVjdCBp
cyBiZWluZyBzZW50IHRvIHBsdWctaW4gcmlnaHQgbm93LCB0aGVuIGl0J3Mgbm90IHRoZSB0aW1l
IHRvIGZvcmdldC4KLSAgICBpZiAockl0ZXItPnNlY29uZC5zZWNvbmQgIT0gMSkKKyAgICBpZiAo
ckl0ZXItPnZhbHVlLnNlY29uZCAhPSAxKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBt
X2pzT2JqZWN0VG9JRE1hcC5yZW1vdmUockl0ZXIpOwpAQCAtMzMwLDcgKzMzMCw3IEBAIHZvaWQg
TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpkZXN0cm95KCkKICAgICAKICAgICBGcmFtZUxv
YWRNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fcGVuZGluZ0ZyYW1lTG9hZHMuZW5kKCk7CiAgICAgZm9y
IChGcmFtZUxvYWRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wZW5kaW5nRnJhbWVMb2Fkcy5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIFsoaXQtPmZpcnN0KSBfc2V0SW50ZXJuYWxMb2Fk
RGVsZWdhdGU6bmlsXTsKKyAgICAgICAgWyhpdC0+a2V5KSBfc2V0SW50ZXJuYWxMb2FkRGVsZWdh
dGU6bmlsXTsKIAogICAgIF9XS1BIRGVzdHJveVBsdWdpbkluc3RhbmNlKG1fcGx1Z2luSG9zdFBy
b3h5LT5wb3J0KCksIG1fcGx1Z2luSUQsIHJlcXVlc3RJRCk7CiAgCkBAIC02NzgsNyArNjc4LDcg
QEAgdm9pZCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OndlYkZyYW1lRGlkRmluaXNoTG9h
ZFdpdGhSZWFzb24oV2ViRnJhbWUqIHdlYkYKICAgICBGcmFtZUxvYWRNYXA6Oml0ZXJhdG9yIGl0
ID0gbV9wZW5kaW5nRnJhbWVMb2Fkcy5maW5kKHdlYkZyYW1lKTsKICAgICBBU1NFUlQoaXQgIT0g
bV9wZW5kaW5nRnJhbWVMb2Fkcy5lbmQoKSk7CiAgICAgICAgIAotICAgIFBsdWdpblJlcXVlc3Qq
IHBsdWdpblJlcXVlc3QgPSBpdC0+c2Vjb25kLmdldCgpOworICAgIFBsdWdpblJlcXVlc3QqIHBs
dWdpblJlcXVlc3QgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgX1dLUEhMb2FkVVJMTm90aWZ5KG1f
cGx1Z2luSG9zdFByb3h5LT5wb3J0KCksIG1fcGx1Z2luSUQsIHBsdWdpblJlcXVlc3QtPnJlcXVl
c3RJRCgpLCByZWFzb24pOwogIAogICAgIG1fcGVuZGluZ0ZyYW1lTG9hZHMucmVtb3ZlKGl0KTsK
QEAgLTE2MjgsNyArMTYyOCw3IEBAIHZvaWQgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Ojpj
YW5jZWxDaGVja0lmQWxsb3dlZFRvTG9hZFVSTCh1aW50MzJfdCBjaGVja0lECiAgICAgaWYgKGl0
ID09IG1fdXJsQ2hlY2tzLmVuZCgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgV2ViUGx1
Z2luQ29udGFpbmVyQ2hlY2sgKmNoZWNrID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICBXZWJQbHVn
aW5Db250YWluZXJDaGVjayAqY2hlY2sgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgW2NoZWNrIGNh
bmNlbF07CiAgICAgbV91cmxDaGVja3MucmVtb3ZlKGl0KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL1Byb3h5SW5zdGFuY2UubW0gYi9Tb3VyY2UvV2Vi
S2l0L21hYy9QbHVnaW5zL0hvc3RlZC9Qcm94eUluc3RhbmNlLm1tCmluZGV4IDEzMjNmNmUzNjkx
MGM5ZTQ1ZTU5NDlkZjFmODI1M2FmZWUzNmIxOTcuLjFlNWFlNjYwOGFhZGM0MWYyZmU0MDRmOGUy
M2I4MDVmMzFlYWE5MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9z
dGVkL1Byb3h5SW5zdGFuY2UubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0
ZWQvUHJveHlJbnN0YW5jZS5tbQpAQCAtMzU1LDggKzM1NSw4IEBAIE1ldGhvZCogUHJveHlJbnN0
YW5jZTo6bWV0aG9kTmFtZWQoUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKICAgICAvLyBJZiB3
ZSBhbHJlYWR5IGhhdmUgYW4gZW50cnkgaW4gdGhlIG1hcCwgdXNlIGl0LgogICAgIE1ldGhvZE1h
cDo6aXRlcmF0b3IgZXhpc3RpbmdNYXBFbnRyeSA9IG1fbWV0aG9kcy5maW5kKG5hbWUuaW1wbCgp
KTsKICAgICBpZiAoZXhpc3RpbmdNYXBFbnRyeSAhPSBtX21ldGhvZHMuZW5kKCkpIHsKLSAgICAg
ICAgaWYgKGV4aXN0aW5nTWFwRW50cnktPnNlY29uZCkKLSAgICAgICAgICAgIHJldHVybiBleGlz
dGluZ01hcEVudHJ5LT5zZWNvbmQ7CisgICAgICAgIGlmIChleGlzdGluZ01hcEVudHJ5LT52YWx1
ZSkKKyAgICAgICAgICAgIHJldHVybiBleGlzdGluZ01hcEVudHJ5LT52YWx1ZTsKICAgICB9CiAg
ICAgCiAgICAgdWludDY0X3QgbWV0aG9kTmFtZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDY0X3Q+
KF9OUE5fR2V0U3RyaW5nSWRlbnRpZmllcihuYW1lLmFzY2lpKCkuZGF0YSgpKSk7CkBAIC0zNzcs
OSArMzc3LDkgQEAgTWV0aG9kKiBQcm94eUluc3RhbmNlOjptZXRob2ROYW1lZChQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lKQogICAgIC8vIEFkZCBhIG5ldyBlbnRyeSB0byB0aGUgbWFwIHVubGVz
cyBhbiBlbnRyeSB3YXMgYWRkZWQgd2hpbGUgd2Ugd2VyZSBpbiB3YWl0Rm9yUmVwbHkuCiAgICAg
TWV0aG9kTWFwOjpBZGRSZXN1bHQgbWFwQWRkUmVzdWx0ID0gbV9tZXRob2RzLmFkZChuYW1lLmlt
cGwoKSwgMCk7CiAgICAgaWYgKG1hcEFkZFJlc3VsdC5pc05ld0VudHJ5ICYmIHJlcGx5LT5tX3Jl
c3VsdCkKLSAgICAgICAgbWFwQWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBuZXcgUHJveHlN
ZXRob2QobWV0aG9kTmFtZSk7CisgICAgICAgIG1hcEFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUg
PSBuZXcgUHJveHlNZXRob2QobWV0aG9kTmFtZSk7CiAKLSAgICByZXR1cm4gbWFwQWRkUmVzdWx0
Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgcmV0dXJuIG1hcEFkZFJlc3VsdC5pdGVyYXRvci0+dmFs
dWU7CiB9CiAKIEZpZWxkKiBQcm94eUluc3RhbmNlOjpmaWVsZE5hbWVkKFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUpCkBAIC0zOTQsNyArMzk0LDcgQEAgRmllbGQqIFByb3h5SW5zdGFuY2U6OmZp
ZWxkTmFtZWQoUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKICAgICAvLyBJZiB3ZSBhbHJlYWR5
IGhhdmUgYW4gZW50cnkgaW4gdGhlIG1hcCwgdXNlIGl0LgogICAgIEZpZWxkTWFwOjppdGVyYXRv
ciBleGlzdGluZ01hcEVudHJ5ID0gbV9maWVsZHMuZmluZChuYW1lLmltcGwoKSk7CiAgICAgaWYg
KGV4aXN0aW5nTWFwRW50cnkgIT0gbV9maWVsZHMuZW5kKCkpCi0gICAgICAgIHJldHVybiBleGlz
dGluZ01hcEVudHJ5LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBleGlzdGluZ01hcEVudHJ5LT52
YWx1ZTsKICAgICAKICAgICB1aW50NjRfdCBpZGVudGlmaWVyID0gcmVpbnRlcnByZXRfY2FzdDx1
aW50NjRfdD4oX05QTl9HZXRTdHJpbmdJZGVudGlmaWVyKG5hbWUuYXNjaWkoKS5kYXRhKCkpKTsK
ICAgICB1aW50MzJfdCByZXF1ZXN0SUQgPSBtX2luc3RhbmNlUHJveHktPm5leHRSZXF1ZXN0SUQo
KTsKQEAgLTQxNCw4ICs0MTQsOCBAQCBGaWVsZCogUHJveHlJbnN0YW5jZTo6ZmllbGROYW1lZChQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogICAgIC8vIEFkZCBhIG5ldyBlbnRyeSB0byB0aGUg
bWFwIHVubGVzcyBhbiBlbnRyeSB3YXMgYWRkZWQgd2hpbGUgd2Ugd2VyZSBpbiB3YWl0Rm9yUmVw
bHkuCiAgICAgRmllbGRNYXA6OkFkZFJlc3VsdCBtYXBBZGRSZXN1bHQgPSBtX2ZpZWxkcy5hZGQo
bmFtZS5pbXBsKCksIDApOwogICAgIGlmIChtYXBBZGRSZXN1bHQuaXNOZXdFbnRyeSAmJiByZXBs
eS0+bV9yZXN1bHQpCi0gICAgICAgIG1hcEFkZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gbmV3
IFByb3h5RmllbGQoaWRlbnRpZmllcik7Ci0gICAgcmV0dXJuIG1hcEFkZFJlc3VsdC5pdGVyYXRv
ci0+c2Vjb25kOworICAgICAgICBtYXBBZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gbmV3IFBy
b3h5RmllbGQoaWRlbnRpZmllcik7CisgICAgcmV0dXJuIG1hcEFkZFJlc3VsdC5pdGVyYXRvci0+
dmFsdWU7CiB9CiAKIEpTQzo6SlNWYWx1ZSBQcm94eUluc3RhbmNlOjpmaWVsZFZhbHVlKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgRmllbGQqIGZpZWxkKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblZpZXcubW0gYi9Tb3VyY2UvV2Vi
S2l0L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5tbQppbmRleCA0ZTFhYWQ0OTUy
OGNkN2QwODFkNDEzNTI0NTRiOWM4NTdmYmMyNWI3Li42YTFlYjY0MGEwZGFjZjBjY2UwMWVlZDM4
MTkyMzUwYjVkYzg1MmYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dl
Yk5ldHNjYXBlUGx1Z2luVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dl
Yk5ldHNjYXBlUGx1Z2luVmlldy5tbQpAQCAtNzEwLDcgKzcxMCw3IEBAIHN0YXRpYyBpbmxpbmUg
dm9pZCBnZXROUFJlY3QoY29uc3QgTlNSZWN0JiBuciwgTlBSZWN0JiBucHIpCiAKICAgICBIYXNo
TWFwPHVpbnQzMl90LCBQbHVnaW5UaW1lcio+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSB0aW1lcnMt
PmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDx1aW50MzJfdCwgUGx1Z2luVGltZXIqPjo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSB0aW1lcnMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAg
ICBQbHVnaW5UaW1lciogdGltZXIgPSBpdC0+c2Vjb25kOworICAgICAgICBQbHVnaW5UaW1lciog
dGltZXIgPSBpdC0+dmFsdWU7CiAgICAgICAgIHRpbWVyLT5zdG9wKCk7CiAgICAgfSAgICAKIH0K
QEAgLTcyOCw3ICs3MjgsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZ2V0TlBSZWN0KGNvbnN0IE5T
UmVjdCYgbnIsIE5QUmVjdCYgbnByKQogICAgIAogICAgIEhhc2hNYXA8dWludDMyX3QsIFBsdWdp
blRpbWVyKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHRpbWVycy0+ZW5kKCk7CiAgICAgZm9yIChI
YXNoTWFwPHVpbnQzMl90LCBQbHVnaW5UaW1lcio+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHRpbWVy
cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFBsdWdpblRpbWVyKiB0aW1l
ciA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFBsdWdpblRpbWVyKiB0aW1lciA9IGl0LT52YWx1ZTsK
ICAgICAgICAgQVNTRVJUKCF0aW1lci0+aXNBY3RpdmUoKSk7CiAgICAgICAgIHRpbWVyLT5zdGFy
dChfaXNDb21wbGV0ZWx5T2JzY3VyZWQpOwogICAgIH0gICAgCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJOb3RpZmljYXRpb25DbGllbnQubW0gYi9Tb3Vy
Y2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJOb3RpZmljYXRpb25DbGllbnQubW0KaW5k
ZXggODRhOWQ2YWNmMDRmYTc5YWRiNGMxMWUzNTMzMDAyNzkxMjJlMmU5YS4uN2E4NzFjYjcyZTMx
ODQyMWVjNjA0ZjNjOGY3ODYxOTdlMmRlNDJiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9t
YWMvV2ViQ29yZVN1cHBvcnQvV2ViTm90aWZpY2F0aW9uQ2xpZW50Lm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYk5vdGlmaWNhdGlvbkNsaWVudC5tbQpAQCAtOTAs
NyArOTAsNyBAQCBib29sIFdlYk5vdGlmaWNhdGlvbkNsaWVudDo6c2hvdyhOb3RpZmljYXRpb24q
IG5vdGlmaWNhdGlvbikKICAgICBtX25vdGlmaWNhdGlvbk1hcC5zZXQobm90aWZpY2F0aW9uLCB3
ZWJOb3RpZmljYXRpb24pOwogCiAgICAgTm90aWZpY2F0aW9uQ29udGV4dE1hcDo6aXRlcmF0b3Ig
aXQgPSBtX25vdGlmaWNhdGlvbkNvbnRleHRNYXAuYWRkKG5vdGlmaWNhdGlvbi0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpLCBWZWN0b3I8UmV0YWluUHRyPFdlYk5vdGlmaWNhdGlvbj4gPigpKS5p
dGVyYXRvcjsKLSAgICBpdC0+c2Vjb25kLmFwcGVuZCh3ZWJOb3RpZmljYXRpb24pOworICAgIGl0
LT52YWx1ZS5hcHBlbmQod2ViTm90aWZpY2F0aW9uKTsKIAogICAgIFtbbV93ZWJWaWV3IF9ub3Rp
ZmljYXRpb25Qcm92aWRlcl0gc2hvd05vdGlmaWNhdGlvbjp3ZWJOb3RpZmljYXRpb24uZ2V0KCkg
ZnJvbVdlYlZpZXc6bV93ZWJWaWV3XTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEyMCw3ICsxMjAs
NyBAQCB2b2lkIFdlYk5vdGlmaWNhdGlvbkNsaWVudDo6Y2xlYXJOb3RpZmljYXRpb25zKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCiAgICAgaWYgKGl0ID09IG1fbm90aWZpY2F0aW9u
Q29udGV4dE1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIFZlY3RvcjxSZXRh
aW5QdHI8V2ViTm90aWZpY2F0aW9uPiA+JiB3ZWJOb3RpZmljYXRpb25zID0gaXQtPnNlY29uZDsK
KyAgICBWZWN0b3I8UmV0YWluUHRyPFdlYk5vdGlmaWNhdGlvbj4gPiYgd2ViTm90aWZpY2F0aW9u
cyA9IGl0LT52YWx1ZTsKICAgICBOU011dGFibGVBcnJheSAqbnNJRHMgPSBbTlNNdXRhYmxlQXJy
YXkgYXJyYXldOwogICAgIHNpemVfdCBjb3VudCA9IHdlYk5vdGlmaWNhdGlvbnMuc2l6ZSgpOwog
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewpAQCAtMTQ2LDEwICsxNDYs
MTAgQEAgdm9pZCBXZWJOb3RpZmljYXRpb25DbGllbnQ6Om5vdGlmaWNhdGlvbk9iamVjdERlc3Ry
b3llZChOb3RpZmljYXRpb24qIG5vdGlmaWNhdGkKIAogICAgIE5vdGlmaWNhdGlvbkNvbnRleHRN
YXA6Oml0ZXJhdG9yIGl0ID0gbV9ub3RpZmljYXRpb25Db250ZXh0TWFwLmZpbmQobm90aWZpY2F0
aW9uLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwogICAgIEFTU0VSVChpdCAhPSBtX25vdGlm
aWNhdGlvbkNvbnRleHRNYXAuZW5kKCkpOwotICAgIHNpemVfdCBpbmRleCA9IGl0LT5zZWNvbmQu
ZmluZCh3ZWJOb3RpZmljYXRpb24pOworICAgIHNpemVfdCBpbmRleCA9IGl0LT52YWx1ZS5maW5k
KHdlYk5vdGlmaWNhdGlvbik7CiAgICAgQVNTRVJUKGluZGV4ICE9IG5vdEZvdW5kKTsKLSAgICBp
dC0+c2Vjb25kLnJlbW92ZShpbmRleCk7Ci0gICAgaWYgKGl0LT5zZWNvbmQuaXNFbXB0eSgpKQor
ICAgIGl0LT52YWx1ZS5yZW1vdmUoaW5kZXgpOworICAgIGlmIChpdC0+dmFsdWUuaXNFbXB0eSgp
KQogICAgICAgICBtX25vdGlmaWNhdGlvbkNvbnRleHRNYXAucmVtb3ZlKGl0KTsKIAogICAgIFtb
bV93ZWJWaWV3IF9ub3RpZmljYXRpb25Qcm92aWRlcl0gbm90aWZpY2F0aW9uRGVzdHJveWVkOndl
Yk5vdGlmaWNhdGlvbi5nZXQoKV07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJW
aWV3L1dlYkhUTUxWaWV3Lm1tIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmll
dy5tbQppbmRleCA4MjcxNmE2YzkyOWNjNTQxYzk4NjM1ZjFiODRkMTYzNDNjMTFjMWJlLi45YTRj
NGFkNWJlZGNkZjdkM2NmNmJhNWFmYzRkMDA4MjcwYjVhYzQyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFj
L1dlYlZpZXcvV2ViSFRNTFZpZXcubW0KQEAgLTIzNzgsNyArMjM3OCw3IEBAIHN0YXRpYyBTdHJp
bmcgY29tbWFuZE5hbWVGb3JTZWxlY3RvcihTRUwgc2VsZWN0b3IpCiAgICAgc3RhdGljIGNvbnN0
IFNlbGVjdG9yTmFtZU1hcCogZXhjZXB0aW9uTWFwID0gY3JlYXRlU2VsZWN0b3JFeGNlcHRpb25N
YXAoKTsKICAgICBTZWxlY3Rvck5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZXhjZXB0aW9u
TWFwLT5maW5kKHNlbGVjdG9yKTsKICAgICBpZiAoaXQgIT0gZXhjZXB0aW9uTWFwLT5lbmQoKSkK
LSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBpdC0+dmFsdWU7CiAK
ICAgICAvLyBSZW1vdmUgdGhlIHRyYWlsaW5nIGNvbG9uLgogICAgIC8vIE5vIG5lZWQgdG8gY2Fw
aXRhbGl6ZSB0aGUgY29tbWFuZCBuYW1lIHNpbmNlIEVkaXRvciBjb21tYW5kIG5hbWVzIGFyZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwIGIvU291cmNlL1dl
YktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCmluZGV4IDc2OTdmMWE2YmI3NTQ0YjFmYzI1NTQxM2E4
ZGZlOTlhOGY4MTBiNTEuLjkwMTlmNDY4ODU3ZGYxYjZiYmVlNDQ3MWY3NDY2ZWE4NzgwOGE4NGEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAKQEAgLTIyMzcsNyArMjIzNyw3IEBAIHN0YXRp
YyB2b2lkIGV4dHJhY3RDb250ZW50VHlwZUZyb21QbHVnaW5WZWN0b3IoY29uc3QgVmVjdG9yPFBs
dWdpblBhY2thZ2UqPiYgcGx1CiAgICAgICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3Rf
aXRlcmF0b3IgbWFwX2l0ID0gcGx1Z2luc1tpXS0+bWltZVRvRGVzY3JpcHRpb25zKCkuYmVnaW4o
KTsKICAgICAgICAgTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBtYXBfZW5k
ID0gcGx1Z2luc1tpXS0+bWltZVRvRGVzY3JpcHRpb25zKCkuZW5kKCk7CiAgICAgICAgIGZvciAo
OyBtYXBfaXQgIT0gbWFwX2VuZDsgKyttYXBfaXQpCi0gICAgICAgICAgICAqbGlzdCA8PCBtYXBf
aXQtPmZpcnN0OworICAgICAgICAgICAgKmxpc3QgPDwgbWFwX2l0LT5rZXk7CiAgICAgfQogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGx1Z2luZGF0YWJhc2UuY3Bw
IGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBsdWdpbmRhdGFiYXNlLmNwcAppbmRleCBhN2Ez
YjVmMmMxZTg5ZjQ3NDM3YzA4YTk3ZmNiMjk2Nzg2YmY4ZTU4Li5jNTMyOGM4ZjY3NWYyYzY2Zjdi
OWI0MjBkNjUxMzdmZDlmODZiODk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9x
d2VicGx1Z2luZGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwbHVn
aW5kYXRhYmFzZS5jcHAKQEAgLTEyMiw4ICsxMjIsOCBAQCBRTGlzdDxRV2ViUGx1Z2luSW5mbzo6
TWltZVR5cGU+IFFXZWJQbHVnaW5JbmZvOjptaW1lVHlwZXMoKSBjb25zdAogCiAgICAgICAgIGZv
ciAoTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1pbWVUb0Rlc2Ny
aXB0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIE1pbWVUeXBl
IG1pbWVUeXBlOwotICAgICAgICAgICAgbWltZVR5cGUubmFtZSA9IGl0LT5maXJzdDsKLSAgICAg
ICAgICAgIG1pbWVUeXBlLmRlc2NyaXB0aW9uID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIG1p
bWVUeXBlLm5hbWUgPSBpdC0+a2V5OworICAgICAgICAgICAgbWltZVR5cGUuZGVzY3JpcHRpb24g
PSBpdC0+dmFsdWU7CiAKICAgICAgICAgICAgIFFTdHJpbmdMaXN0IGZpbGVFeHRlbnNpb25zOwog
ICAgICAgICAgICAgVmVjdG9yPFN0cmluZz4gZXh0ZW5zaW9ucyA9IG1fcGFja2FnZS0+bWltZVRv
RXh0ZW5zaW9ucygpLmdldChtaW1lVHlwZS5uYW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvcXQvV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzUXQuY3BwIGIvU291cmNlL1dl
YktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNRdC5jcHAKaW5kZXggY2Q0
YWIwZDcyZDg2ODEyNWRjODZlZTk4N2JjY2U2ZWYzYWIxYWQ4OS4uN2Q0YjBiNzVmOWQyYzRlNzY3
OWRiM2QwN2I1NjE3YTQyMTQwNGM1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJD
b3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNRdC5jcHAKQEAgLTEzMyw4ICsxMzMs
OCBAQCB2b2lkIFBsYXRmb3JtU3RyYXRlZ2llc1F0OjpnZXRQbHVnaW5JbmZvKGNvbnN0IFdlYkNv
cmU6OlBhZ2UqIHBhZ2UsIFZlY3RvcjxXZWJDbwogICAgICAgICBmb3IgKE1JTUVUb0Rlc2NyaXB0
aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBNaW1lQ2xhc3NJbmZvIG1pbWU7CiAKLSAg
ICAgICAgICAgIG1pbWUudHlwZSA9IGl0LT5maXJzdDsKLSAgICAgICAgICAgIG1pbWUuZGVzYyA9
IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICBtaW1lLnR5cGUgPSBpdC0+a2V5OworICAgICAgICAg
ICAgbWltZS5kZXNjID0gaXQtPnZhbHVlOwogICAgICAgICAgICAgbWltZS5leHRlbnNpb25zID0g
cGFja2FnZS0+bWltZVRvRXh0ZW5zaW9ucygpLmdldChtaW1lLnR5cGUpOwogCiAgICAgICAgICAg
ICBpbmZvLm1pbWVzLmFwcGVuZChtaW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2lu
L0NPTVByb3BlcnR5QmFnLmggYi9Tb3VyY2UvV2ViS2l0L3dpbi9DT01Qcm9wZXJ0eUJhZy5oCmlu
ZGV4IGM3Njg2M2YxNTAxMmYyZWFkZTBkY2UxNWZkZGI3MzliZmJjMjc5YzMuLjhlODRlNDc0MGFh
M2E5ODYzNTk0YmVkY2VjZThlMzcxMmFkNGEyZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
d2luL0NPTVByb3BlcnR5QmFnLmgKKysrIGIvU291cmNlL1dlYktpdC93aW4vQ09NUHJvcGVydHlC
YWcuaApAQCAtMTQ3LDkgKzE0Nyw5IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgQ09NUHJv
cGVydHlCYWc8VmFsdWVUeXBlLCBLZXlUeXBlLCBIYXNoVHlwZT46OlJlYWQoTFBDCiAKICAgICBW
QVJUWVBFIHJlcXVlc3RlZFR5cGUgPSBWX1ZUKHBWYXIpOwogICAgIFZfVlQocFZhcikgPSBWVF9F
TVBUWTsKLSAgICBDT01WYXJpYW50U2V0dGVyPFZhbHVlVHlwZT46OnNldFZhcmlhbnQocFZhciwg
aXQtPnNlY29uZCk7CisgICAgQ09NVmFyaWFudFNldHRlcjxWYWx1ZVR5cGU+OjpzZXRWYXJpYW50
KHBWYXIsIGl0LT52YWx1ZSk7CiAKLSAgICBpZiAocmVxdWVzdGVkVHlwZSAhPSBDT01WYXJpYW50
U2V0dGVyPFZhbHVlVHlwZT46OnZhcmlhbnRUeXBlKGl0LT5zZWNvbmQpICYmIHJlcXVlc3RlZFR5
cGUgIT0gVlRfRU1QVFkpCisgICAgaWYgKHJlcXVlc3RlZFR5cGUgIT0gQ09NVmFyaWFudFNldHRl
cjxWYWx1ZVR5cGU+Ojp2YXJpYW50VHlwZShpdC0+dmFsdWUpICYmIHJlcXVlc3RlZFR5cGUgIT0g
VlRfRU1QVFkpCiAgICAgICAgIHJldHVybiA6OlZhcmlhbnRDaGFuZ2VUeXBlKHBWYXIsIHBWYXIs
IFZBUklBTlRfTk9VU0VST1ZFUlJJREUgfCBWQVJJQU5UX0FMUEhBQk9PTCwgcmVxdWVzdGVkVHlw
ZSk7CiAKICAgICByZXR1cm4gU19PSzsKQEAgLTIxNywxMiArMjE3LDEyIEBAIEhSRVNVTFQgU1RE
TUVUSE9EQ0FMTFRZUEUgQ09NUHJvcGVydHlCYWc8VmFsdWVUeXBlLCBLZXlUeXBlLCBIYXNoVHlw
ZT46OkdldFByb3BlCiAgICAgICAgIC8vcFByb3BCYWdbal0uY2xzaWQ7ICAgIC8vIChDTFNJRCkg
Q0xTSUQgb2YgdGhlIG9iamVjdC4gVGhpcyBtZW1iZXIgaXMgdmFsaWQgb25seSBpZiBkd1R5cGUg
aXMgUFJPUEJBRzJfVFlQRV9PQkpFQ1QuCiAKICAgICAgICAgcFByb3BCYWdbal0uZHdUeXBlID0g
UFJPUEJBRzJfVFlQRV9EQVRBOwotICAgICAgICBwUHJvcEJhZ1tqXS52dCA9IENPTVZhcmlhbnRT
ZXR0ZXI8VmFsdWVUeXBlPjo6dmFyaWFudFR5cGUoY3VycmVudC0+c2Vjb25kKTsKKyAgICAgICAg
cFByb3BCYWdbal0udnQgPSBDT01WYXJpYW50U2V0dGVyPFZhbHVlVHlwZT46OnZhcmlhbnRUeXBl
KGN1cnJlbnQtPnZhbHVlKTsKICAgICAgICAgcFByb3BCYWdbal0uZHdIaW50ID0gaVByb3BlcnR5
ICsgajsKLSAgICAgICAgcFByb3BCYWdbal0ucHN0ck5hbWUgPSAoTFBPTEVTVFIpQ29UYXNrTWVt
QWxsb2Moc2l6ZW9mKHdjaGFyX3QpKihjdXJyZW50LT5maXJzdC5sZW5ndGgoKSsxKSk7CisgICAg
ICAgIHBQcm9wQmFnW2pdLnBzdHJOYW1lID0gKExQT0xFU1RSKUNvVGFza01lbUFsbG9jKHNpemVv
Zih3Y2hhcl90KSooY3VycmVudC0+a2V5Lmxlbmd0aCgpKzEpKTsKICAgICAgICAgaWYgKCFwUHJv
cEJhZ1tqXS5wc3RyTmFtZSkKICAgICAgICAgICAgIHJldHVybiBFX09VVE9GTUVNT1JZOwotICAg
ICAgICB3Y3NjcHlfcyhwUHJvcEJhZ1tqXS5wc3RyTmFtZSwgY3VycmVudC0+Zmlyc3QubGVuZ3Ro
KCkrMSwgc3RhdGljX2Nhc3Q8U3RyaW5nPihjdXJyZW50LT5maXJzdCkuY2hhcmFjdGVyc1dpdGhO
dWxsVGVybWluYXRpb24oKSk7CisgICAgICAgIHdjc2NweV9zKHBQcm9wQmFnW2pdLnBzdHJOYW1l
LCBjdXJyZW50LT5rZXkubGVuZ3RoKCkrMSwgc3RhdGljX2Nhc3Q8U3RyaW5nPihjdXJyZW50LT5r
ZXkpLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkpOwogICAgICAgICArKypwY1Byb3Bl
cnRpZXM7CiAgICAgfQogICAgIHJldHVybiBTX09LOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC93aW4vV2ViQ29yZVN0YXRpc3RpY3MuY3BwIGIvU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN0
YXRpc3RpY3MuY3BwCmluZGV4IGMxY2E5ZjIxNGYyNDljMGE0OWYxZmNiMTIyZjA2YWQzNDkzYjRi
MTkuLjJmMjJiMDNjNjIyNTAwMmFlMjE5Y2EwZjQ1YmE0N2QyOTgwYzM3YTAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdGF0aXN0aWNzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L3dpbi9XZWJDb3JlU3RhdGlzdGljcy5jcHAKQEAgLTE0NSw3ICsxNDUsNyBAQCBIUkVTVUxU
IFNURE1FVEhPRENBTExUWVBFIFdlYkNvcmVTdGF0aXN0aWNzOjpqYXZhU2NyaXB0UHJvdGVjdGVk
T2JqZWN0VHlwZUNvdW50cwogICAgIEl0ZXJhdG9yIGVuZCA9IGpzT2JqZWN0VHlwZU5hbWVzLT5l
bmQoKTsKICAgICBIYXNoTWFwPFN0cmluZywgaW50PiB0eXBlQ291bnRNYXA7CiAgICAgZm9yIChJ
dGVyYXRvciBjdXJyZW50ID0ganNPYmplY3RUeXBlTmFtZXMtPmJlZ2luKCk7IGN1cnJlbnQgIT0g
ZW5kOyArK2N1cnJlbnQpCi0gICAgICAgIHR5cGVDb3VudE1hcC5zZXQoY3VycmVudC0+Zmlyc3Qs
IGN1cnJlbnQtPnNlY29uZCk7CisgICAgICAgIHR5cGVDb3VudE1hcC5zZXQoY3VycmVudC0+a2V5
LCBjdXJyZW50LT52YWx1ZSk7CiAKICAgICBDT01QdHI8SVByb3BlcnR5QmFnMj4gcmVzdWx0cyhB
ZG9wdENPTSwgQ09NUHJvcGVydHlCYWc8aW50Pjo6Y3JlYXRlSW5zdGFuY2UodHlwZUNvdW50TWFw
KSk7CiAgICAgcmVzdWx0cy5jb3B5UmVmVG8odHlwZU5hbWVzQW5kQ291bnRzKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2ll
cy5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0
ZWdpZXMuY3BwCmluZGV4IDIzMGYzMzIzZjU0MjkxZDAxZTE0MTk4MTc4ZmEyMTZhNDhjMGNmNWIu
LmYxMzBmNzZiZDJhNjc2OTdhZGU3YTM2Nzg4NDUyNDNhOWY2YTcxYTUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAK
KysrIGIvU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVn
aWVzLmNwcApAQCAtOTMsOCArOTMsOCBAQCB2b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Z2V0
UGx1Z2luSW5mbyhjb25zdCBXZWJDb3JlOjpQYWdlKiwgVmVjdG9yPFdlYkNvcmU6OgogICAgICAg
ICBmb3IgKE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtaW1lVG9E
ZXNjcmlwdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBNaW1l
Q2xhc3NJbmZvIG1pbWU7CiAKLSAgICAgICAgICAgIG1pbWUudHlwZSA9IGl0LT5maXJzdDsKLSAg
ICAgICAgICAgIG1pbWUuZGVzYyA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICBtaW1lLnR5cGUg
PSBpdC0+a2V5OworICAgICAgICAgICAgbWltZS5kZXNjID0gaXQtPnZhbHVlOwogICAgICAgICAg
ICAgbWltZS5leHRlbnNpb25zID0gcGFja2FnZS0+bWltZVRvRXh0ZW5zaW9ucygpLmdldChtaW1l
LnR5cGUpOwogCiAgICAgICAgICAgICBpbmZvLm1pbWVzLmFwcGVuZChtaW1lKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYkhpc3RvcnkuY3BwIGIvU291cmNlL1dlYktpdC93aW4v
V2ViSGlzdG9yeS5jcHAKaW5kZXggOTFmODgyZmI4MmVlYzg2YjExZTliNGVkMDdkYjI4MjQ2Y2Q0
MzAwYS4uMWY3YTU3MmMzNDQ1ZDdjYmM1NzYzYWY5ZDkxYjllZGQ3ODk1MTA5ZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC93aW4vV2ViSGlzdG9yeS5jcHAKKysrIGIvU291cmNlL1dlYktpdC93
aW4vV2ViSGlzdG9yeS5jcHAKQEAgLTgzMyw3ICs4MzMsNyBAQCBIUkVTVUxUIFdlYkhpc3Rvcnk6
OnJlbW92ZUl0ZW1Gcm9tRGF0ZUNhY2hlcyhJV2ViSGlzdG9yeUl0ZW0qIGVudHJ5KQogCiAgICAg
RGF0ZVRvRW50cmllc01hcDo6aXRlcmF0b3IgZm91bmQgPSBtX2VudHJpZXNCeURhdGUuZmluZChk
YXRlS2V5KTsKICAgICBBU1NFUlQoZm91bmQgIT0gbV9lbnRyaWVzQnlEYXRlLmVuZCgpKTsKLSAg
ICBDRk11dGFibGVBcnJheVJlZiBlbnRyaWVzRm9yRGF0ZSA9IGZvdW5kLT5zZWNvbmQuZ2V0KCk7
CisgICAgQ0ZNdXRhYmxlQXJyYXlSZWYgZW50cmllc0ZvckRhdGUgPSBmb3VuZC0+dmFsdWUuZ2V0
KCk7CiAKICAgICBDRkluZGV4IGNvdW50ID0gQ0ZBcnJheUdldENvdW50KGVudHJpZXNGb3JEYXRl
KTsKICAgICBmb3IgKGludCBpID0gY291bnQgLSAxOyBpID49IDA7IC0taSkgewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC93aW4vV2ViS2l0Q09NQVBJLmNwcCBiL1NvdXJjZS9XZWJLaXQvd2lu
L1dlYktpdENPTUFQSS5jcHAKaW5kZXggOWM5Y2MwMjZiNDdiNGZlYTk2MGM2Mzk4NDZlMGViYTUx
YzQ2NTNjMi4uNGQ4ZmYwOTViZGE5NjA3ZDI5YTE0NWI4NTdjNzhkZGZmOGUzNWU3YSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC93aW4vV2ViS2l0Q09NQVBJLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L3dpbi9XZWJLaXRDT01BUEkuY3BwCkBAIC01Miw3ICs1Miw3IEBAIHN0YXRpYyBDT01QdHI8
SUNsYXNzRmFjdG9yeT4gY2xhc3NGYWN0b3J5KGNvbnN0IENMU0lEJiBjbHNpZCkKICAgICBzdGF0
aWMgRmFjdG9yeU1hcCYgZmFjdG9yaWVzID0gKm5ldyBGYWN0b3J5TWFwOwogCiAgICAgRmFjdG9y
eU1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IGZhY3Rvcmllcy5hZGQoY2xzaWQsIDApOwotICAgIENP
TVB0cjxJQ2xhc3NGYWN0b3J5PiYgZmFjdG9yeSA9IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOwor
ICAgIENPTVB0cjxJQ2xhc3NGYWN0b3J5PiYgZmFjdG9yeSA9IHJlc3VsdC5pdGVyYXRvci0+dmFs
dWU7CiAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5ICYmIEZBSUxFRChEbGxHZXRDbGFzc09iamVj
dChjbHNpZCwgX191dWlkb2YoZmFjdG9yeSksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmZmFj
dG9yeSkpKSkKICAgICAgICAgZmFjdG9yeSA9IDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvd2luL1dlYktpdFN0YXRpc3RpY3MuY3BwIGIvU291cmNlL1dlYktpdC93aW4vV2ViS2l0U3Rh
dGlzdGljcy5jcHAKaW5kZXggOWNkOTVjN2FjOTM1OTUzMDA3ZTE1N2RjYTc0ZTgwN2M0NWFlZTA2
ZS4uYzdiOGVkMWFjNzdjZTZlMTkyNmFhNWRiMjI0MjRmMmVlZTFhMzUwYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC93aW4vV2ViS2l0U3RhdGlzdGljcy5jcHAKKysrIGIvU291cmNlL1dlYktp
dC93aW4vV2ViS2l0U3RhdGlzdGljcy5jcHAKQEAgLTE0NCw5ICsxNDQsOSBAQCBIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIFdlYktpdFN0YXRpc3RpY3M6OmNvbUNsYXNzTmFtZUNvdW50cygKICAg
ICBJdGVyYXRvciBlbmQgPSBnQ2xhc3NOYW1lQ291bnQuZW5kKCk7CiAgICAgVmVjdG9yPFVDaGFy
PiB2ZWN0b3I7CiAgICAgZm9yIChJdGVyYXRvciBjdXJyZW50ID0gZ0NsYXNzTmFtZUNvdW50LmJl
Z2luKCk7IGN1cnJlbnQgIT0gZW5kOyArK2N1cnJlbnQpIHsKLSAgICAgICAgYXBwZW5kKHZlY3Rv
ciwgU3RyaW5nOjpmb3JtYXQoIiU0dSIsIGN1cnJlbnQtPnNlY29uZCkpOworICAgICAgICBhcHBl
bmQodmVjdG9yLCBTdHJpbmc6OmZvcm1hdCgiJTR1IiwgY3VycmVudC0+dmFsdWUpKTsKICAgICAg
ICAgdmVjdG9yLmFwcGVuZCgnXHQnKTsKLSAgICAgICAgYXBwZW5kKHZlY3Rvciwgc3RhdGljX2Nh
c3Q8U3RyaW5nPihjdXJyZW50LT5maXJzdCkpOworICAgICAgICBhcHBlbmQodmVjdG9yLCBzdGF0
aWNfY2FzdDxTdHJpbmc+KGN1cnJlbnQtPmtleSkpOwogICAgICAgICB2ZWN0b3IuYXBwZW5kKCdc
bicpOwogICAgIH0KICAgICAqb3V0cHV0ID0gQlN0cmluZyhTdHJpbmc6OmFkb3B0KHZlY3Rvcikp
LnJlbGVhc2UoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYk5vdGlmaWNhdGlv
bkNlbnRlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJOb3RpZmljYXRpb25DZW50ZXIuY3Bw
CmluZGV4IGUwMmFiZDU5MzdhNDlhMzEwNzVkNGYwMTVlMjkzM2I0NmRhZTEzMDkuLjk0Y2VkMWM0
Yjc2MTM4NTNhYzllZWFkMzM0NDg1NzJjMThlY2U2ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvd2luL1dlYk5vdGlmaWNhdGlvbkNlbnRlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC93aW4v
V2ViTm90aWZpY2F0aW9uQ2VudGVyLmNwcApAQCAtMTIxLDcgKzEyMSw3IEBAIHZvaWQgV2ViTm90
aWZpY2F0aW9uQ2VudGVyOjpwb3N0Tm90aWZpY2F0aW9uSW50ZXJuYWwoSVdlYk5vdGlmaWNhdGlv
biogbm90aWZpY2F0CiAKICAgICAvLyBJbnRlbnRpb25hbGx5IG1ha2UgYSBjb3B5IG9mIHRoZSBs
aXN0IHRvIGF2b2lkIHRoZSBwb3NzaWJpbGl0eSBvZiBlcnJvcnMKICAgICAvLyBmcm9tIGEgbXV0
YXRpb24gb2YgdGhlIGxpc3QgaW4gdGhlIG9uTm90aWZ5IGNhbGxiYWNrLgotICAgIE9iamVjdE9i
c2VydmVyTGlzdCBsaXN0ID0gaXQtPnNlY29uZDsKKyAgICBPYmplY3RPYnNlcnZlckxpc3QgbGlz
dCA9IGl0LT52YWx1ZTsKIAogICAgIE9ic2VydmVyTGlzdEl0ZXJhdG9yIGVuZCA9IGxpc3QuZW5k
KCk7CiAgICAgZm9yIChPYnNlcnZlckxpc3RJdGVyYXRvciBpdDIgPSBsaXN0LmJlZ2luKCk7IGl0
MiAhPSBlbmQ7ICsraXQyKSB7CkBAIC0xNTAsNyArMTUwLDcgQEAgSFJFU1VMVCBTVERNRVRIT0RD
QUxMVFlQRSBXZWJOb3RpZmljYXRpb25DZW50ZXI6OmFkZE9ic2VydmVyKAogICAgIFN0cmluZyBu
YW1lKG5vdGlmaWNhdGlvbk5hbWUsIFN5c1N0cmluZ0xlbihub3RpZmljYXRpb25OYW1lKSk7CiAg
ICAgTWFwcGVkT2JzZXJ2ZXJzOjppdGVyYXRvciBpdCA9IGQtPm1fbWFwcGVkT2JzZXJ2ZXJzLmZp
bmQobmFtZSk7CiAgICAgaWYgKGl0ICE9IGQtPm1fbWFwcGVkT2JzZXJ2ZXJzLmVuZCgpKQotICAg
ICAgICBpdC0+c2Vjb25kLmFwcGVuZChPYmplY3RPYnNlcnZlclBhaXIoYW5PYmplY3QsIG9ic2Vy
dmVyKSk7CisgICAgICAgIGl0LT52YWx1ZS5hcHBlbmQoT2JqZWN0T2JzZXJ2ZXJQYWlyKGFuT2Jq
ZWN0LCBvYnNlcnZlcikpOwogICAgIGVsc2UgewogICAgICAgICBPYmplY3RPYnNlcnZlckxpc3Qg
bGlzdDsKICAgICAgICAgbGlzdC5hcHBlbmQoT2JqZWN0T2JzZXJ2ZXJQYWlyKGFuT2JqZWN0LCBv
YnNlcnZlcikpOwpAQCAtMTk4LDcgKzE5OCw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUg
V2ViTm90aWZpY2F0aW9uQ2VudGVyOjpyZW1vdmVPYnNlcnZlcigKICAgICBpZiAoaXQgPT0gZC0+
bV9tYXBwZWRPYnNlcnZlcnMuZW5kKCkpCiAgICAgICAgIHJldHVybiBFX0ZBSUw7CiAKLSAgICBP
YmplY3RPYnNlcnZlckxpc3QmIG9ic2VydmVyTGlzdCA9IGl0LT5zZWNvbmQ7CisgICAgT2JqZWN0
T2JzZXJ2ZXJMaXN0JiBvYnNlcnZlckxpc3QgPSBpdC0+dmFsdWU7CiAgICAgT2JzZXJ2ZXJMaXN0
SXRlcmF0b3IgZW5kID0gb2JzZXJ2ZXJMaXN0LmVuZCgpOwogCiAgICAgaW50IGkgPSAwOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW5jZS9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0
ZWdpZXNXaW5DRS5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L1BsYXRm
b3JtU3RyYXRlZ2llc1dpbkNFLmNwcAppbmRleCAzZjhjOTA3YzczOWYwOGNkYjk5MTZlODM2Zjli
MDhkZTY3ODQ1MWNmLi5kNTU3OTcyMzExNjE1OTFkNWZkYjE3MTU4MDQ0NThkYjc4MmM5MWYyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3Ry
YXRlZ2llc1dpbkNFLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0
L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmNwcApAQCAtOTQsOCArOTQsOCBAQCB2b2lkIFBsYXRm
b3JtU3RyYXRlZ2llc1dpbkNFOjpnZXRQbHVnaW5JbmZvKGNvbnN0IFBhZ2UqLCBWZWN0b3I8UGx1
Z2luSW5mbz4mIG91dAogICAgICAgICBmb3IgKE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7CiAgICAgICAgICAgICBNaW1lQ2xhc3NJbmZvIG1pbWU7CiAKLSAgICAgICAgICAgIG1pbWUu
dHlwZSA9IGl0LT5maXJzdDsKLSAgICAgICAgICAgIG1pbWUuZGVzYyA9IGl0LT5zZWNvbmQ7Cisg
ICAgICAgICAgICBtaW1lLnR5cGUgPSBpdC0+a2V5OworICAgICAgICAgICAgbWltZS5kZXNjID0g
aXQtPnZhbHVlOwogICAgICAgICAgICAgbWltZS5leHRlbnNpb25zID0gcGFja2FnZS0+bWltZVRv
RXh0ZW5zaW9ucygpLmdldChtaW1lLnR5cGUpOwogCiAgICAgICAgICAgICBpbmZvLm1pbWVzLmFw
cGVuZChtaW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMv
QXJndW1lbnRDb2RlcnMuaCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQXJndW1l
bnRDb2RlcnMuaAppbmRleCBkZDU0ZGZlZWY5MWE3ZGUzMTE5MTVlOTNkOWFmYmViMTNhMWNiZTc3
Li5hZjE2M2JlNmQ5YjY0YzMwOWQ5MTlhZDFiNzM2NTg4ZWIyNjMxY2JhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50Q29kZXJzLmgKKysrIGIvU291
cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVudENvZGVycy5oCkBAIC03NSw4ICs3
NSw4IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IHN0cnVjdCBBcmd1bWVudENv
ZGVyPHN0ZDo6cGFpcjxULCBVPiA+IHsKIHRlbXBsYXRlPHR5cGVuYW1lIEtleVR5cGUsIHR5cGVu
YW1lIFZhbHVlVHlwZT4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V1RGOjpLZXlWYWx1ZVBhaXI8S2V5
VHlwZSwgVmFsdWVUeXBlPiA+IHsKICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNv
ZGVyKiBlbmNvZGVyLCBjb25zdCBXVEY6OktleVZhbHVlUGFpcjxLZXlUeXBlLCBWYWx1ZVR5cGU+
JiBwYWlyKQogICAgIHsKLSAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKHBhaXIuZmlyc3QpOwotICAg
ICAgICBlbmNvZGVyLT5lbmNvZGUocGFpci5zZWNvbmQpOworICAgICAgICBlbmNvZGVyLT5lbmNv
ZGUocGFpci5rZXkpOworICAgICAgICBlbmNvZGVyLT5lbmNvZGUocGFpci52YWx1ZSk7CiAgICAg
fQogCiAgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgV1RG
OjpLZXlWYWx1ZVBhaXI8S2V5VHlwZSwgVmFsdWVUeXBlPiYgcGFpcikKQEAgLTg5LDggKzg5LDgg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5VHlwZSwgdHlwZW5hbWUgVmFsdWVUeXBlPiBzdHJ1Y3Qg
QXJndW1lbnRDb2RlcjxXVEY6OktleVZhbHUKICAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUo
dmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIHBhaXIuZmlyc3Qg
PSBrZXk7Ci0gICAgICAgIHBhaXIuc2Vjb25kID0gdmFsdWU7CisgICAgICAgIHBhaXIua2V5ID0g
a2V5OworICAgICAgICBwYWlyLnZhbHVlID0gdmFsdWU7CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0Nv
bm5lY3Rpb24uY3BwIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Db25uZWN0aW9u
LmNwcAppbmRleCAxYzYxNWJkN2Y3NDY5OTJiMmMyZDBjM2ViNzJkZjM1MWVhMDA3OWZkLi4wMjYz
NDg3NGNlNmMyZmI2NWY3YWVhNjU5ODE3OGE5MDZkMjIyYTBmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1BsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5jcHAKQEAgLTEwMiwxMiArMTAyLDEyIEBA
IFBhc3NSZWZQdHI8Q29ubmVjdGlvbjo6U3luY01lc3NhZ2VTdGF0ZT4gQ29ubmVjdGlvbjo6U3lu
Y01lc3NhZ2VTdGF0ZTo6Z2V0T3JDcmVhCiAgICAgU3luY01lc3NhZ2VTdGF0ZU1hcDo6QWRkUmVz
dWx0IHJlc3VsdCA9IHN5bmNNZXNzYWdlU3RhdGVNYXAoKS5hZGQocnVuTG9vcCwgMCk7CiAKICAg
ICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIEFTU0VSVChyZXN1bHQuaXRlcmF0
b3ItPnNlY29uZCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAg
ICAgICAgQVNTRVJUKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOworICAgICAgICByZXR1cm4gcmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAgICB9CiAKICAgICBSZWZQdHI8U3luY01lc3NhZ2VTdGF0
ZT4gc3luY01lc3NhZ2VTdGF0ZSA9IGFkb3B0UmVmKG5ldyBTeW5jTWVzc2FnZVN0YXRlKHJ1bkxv
b3ApKTsKLSAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IHN5bmNNZXNzYWdlU3RhdGUuZ2V0
KCk7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IHN5bmNNZXNzYWdlU3RhdGUuZ2V0KCk7
CiAKICAgICByZXR1cm4gc3luY01lc3NhZ2VTdGF0ZS5yZWxlYXNlKCk7CiB9CkBAIC0zNTQsMTAg
KzM1NCwxMCBAQCBQYXNzT3duUHRyPEFyZ3VtZW50RGVjb2Rlcj4gQ29ubmVjdGlvbjo6d2FpdEZv
ck1lc3NhZ2UoTWVzc2FnZUlEIG1lc3NhZ2VJRCwgdWludAogICAgICAgICBNdXRleExvY2tlciBs
b2NrZXIobV93YWl0Rm9yTWVzc2FnZU11dGV4KTsKIAogICAgICAgICBIYXNoTWFwPHN0ZDo6cGFp
cjx1bnNpZ25lZCwgdWludDY0X3Q+LCBBcmd1bWVudERlY29kZXIqPjo6aXRlcmF0b3IgaXQgPSBt
X3dhaXRGb3JNZXNzYWdlTWFwLmZpbmQobWVzc2FnZUFuZERlc3RpbmF0aW9uKTsKLSAgICAgICAg
aWYgKGl0LT5zZWNvbmQpIHsKKyAgICAgICAgaWYgKGl0LT52YWx1ZSkgewogICAgICAgICAgICAg
Ly8gRklYTUU6IG1fd2FpdEZvck1lc3NhZ2VNYXAgc2hvdWxkIHJlYWxseSBob2xkIE93blB0cnMg
dG8KICAgICAgICAgICAgIC8vIEFyZ3VtZW50RGVjb2RlcnMsIGJ1dCBIYXNoTWFwIGRvZXNuJ3Qg
Y3VycmVudGx5IHN1cHBvcnQgT3duUHRycy4KLSAgICAgICAgICAgIE93blB0cjxBcmd1bWVudERl
Y29kZXI+IGFyZ3VtZW50cyA9IGFkb3B0UHRyKGl0LT5zZWNvbmQpOworICAgICAgICAgICAgT3du
UHRyPEFyZ3VtZW50RGVjb2Rlcj4gYXJndW1lbnRzID0gYWRvcHRQdHIoaXQtPnZhbHVlKTsKICAg
ICAgICAgICAgIG1fd2FpdEZvck1lc3NhZ2VNYXAucmVtb3ZlKGl0KTsKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50cy5yZWxlYXNlKCk7CkBAIC01MjQsOCArNTI0LDgg
QEAgdm9pZCBDb25uZWN0aW9uOjpwcm9jZXNzSW5jb21pbmdNZXNzYWdlKE1lc3NhZ2VJRCBtZXNz
YWdlSUQsIFBhc3NPd25QdHI8QXJndW1lbnQKICAgICAgICAgCiAgICAgICAgIEhhc2hNYXA8c3Rk
OjpwYWlyPHVuc2lnbmVkLCB1aW50NjRfdD4sIEFyZ3VtZW50RGVjb2Rlcio+OjppdGVyYXRvciBp
dCA9IG1fd2FpdEZvck1lc3NhZ2VNYXAuZmluZChzdGQ6Om1ha2VfcGFpcihtZXNzYWdlSUQudG9J
bnQoKSwgaW5jb21pbmdNZXNzYWdlLmRlc3RpbmF0aW9uSUQoKSkpOwogICAgICAgICBpZiAoaXQg
IT0gbV93YWl0Rm9yTWVzc2FnZU1hcC5lbmQoKSkgewotICAgICAgICAgICAgaXQtPnNlY29uZCA9
IGluY29taW5nTWVzc2FnZS5yZWxlYXNlQXJndW1lbnRzKCkubGVha1B0cigpOwotICAgICAgICAg
ICAgQVNTRVJUKGl0LT5zZWNvbmQpOworICAgICAgICAgICAgaXQtPnZhbHVlID0gaW5jb21pbmdN
ZXNzYWdlLnJlbGVhc2VBcmd1bWVudHMoKS5sZWFrUHRyKCk7CisgICAgICAgICAgICBBU1NFUlQo
aXQtPnZhbHVlKTsKICAgICAgICAgCiAgICAgICAgICAgICBtX3dhaXRGb3JNZXNzYWdlQ29uZGl0
aW9uLnNpZ25hbCgpOwogICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvUGxhdGZvcm0vZ3RrL1dvcmtRdWV1ZUd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybS9ndGsvV29ya1F1ZXVlR3RrLmNwcAppbmRleCAxZGZhYjgzY2NmYjI0YzlmMDBlZTQwZDJk
YWExYzk1YjE2MzgyYTQzLi42ODg1ZDQ4NWJkMTE2ZDMyOGRlY2QwMmFhZjU0YzkxODc4MmIyZjE2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9ndGsvV29ya1F1ZXVlR3RrLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9ndGsvV29ya1F1ZXVlR3RrLmNwcApAQCAt
MTY2LDcgKzE2Niw3IEBAIHZvaWQgV29ya1F1ZXVlOjpyZWdpc3RlckV2ZW50U291cmNlSGFuZGxl
cihpbnQgZmlsZURlc2NyaXB0b3IsIGludCBjb25kaXRpb24sIGNvCiAgICAgICAgIFZlY3RvcjxF
dmVudFNvdXJjZSo+IHNvdXJjZXM7CiAgICAgICAgIEV2ZW50U291cmNlSXRlcmF0b3IgaXQgPSBt
X2V2ZW50U291cmNlcy5maW5kKGZpbGVEZXNjcmlwdG9yKTsKICAgICAgICAgaWYgKGl0ICE9IG1f
ZXZlbnRTb3VyY2VzLmVuZCgpKSAKLSAgICAgICAgICAgIHNvdXJjZXMgPSBpdC0+c2Vjb25kOwor
ICAgICAgICAgICAgc291cmNlcyA9IGl0LT52YWx1ZTsKIAogICAgICAgICBzb3VyY2VzLmFwcGVu
ZChldmVudFNvdXJjZSk7CiAgICAgICAgIG1fZXZlbnRTb3VyY2VzLnNldChmaWxlRGVzY3JpcHRv
ciwgc291cmNlcyk7CkBAIC0xODYsNyArMTg2LDcgQEAgdm9pZCBXb3JrUXVldWU6OnVucmVnaXN0
ZXJFdmVudFNvdXJjZUhhbmRsZXIoaW50IGZpbGVEZXNjcmlwdG9yKQogICAgIEFTU0VSVChtX2V2
ZW50U291cmNlcy5jb250YWlucyhmaWxlRGVzY3JpcHRvcikpOwogCiAgICAgaWYgKGl0ICE9IG1f
ZXZlbnRTb3VyY2VzLmVuZCgpKSB7Ci0gICAgICAgIFZlY3RvcjxFdmVudFNvdXJjZSo+IHNvdXJj
ZXMgPSBpdC0+c2Vjb25kOworICAgICAgICBWZWN0b3I8RXZlbnRTb3VyY2UqPiBzb3VyY2VzID0g
aXQtPnZhbHVlOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc291cmNlcy5zaXpl
KCk7IGkrKykKICAgICAgICAgICAgIHNvdXJjZXNbaV0tPmNhbmNlbCgpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9tYWMvV29ya1F1ZXVlTWFjLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtL21hYy9Xb3JrUXVldWVNYWMuY3BwCmluZGV4IGE3MjM0OWIzNmM1YTc2
OGU0NjUwYjI2NmEzYTYwYjhhMjBjODEzODQuLmRlZDFkN2FjMzYxOGM5OTdiZDA4ZWQ2OGI1ZjE0
NjBlMWRlNmFiYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL21hYy9Xb3Jr
UXVldWVNYWMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL21hYy9Xb3JrUXVldWVN
YWMuY3BwCkBAIC0xNjQsNyArMTY0LDcgQEAgdm9pZCBXb3JrUXVldWU6OnVucmVnaXN0ZXJNYWNo
UG9ydEV2ZW50SGFuZGxlcihtYWNoX3BvcnRfdCBtYWNoUG9ydCkKICAgICAKICAgICBBU1NFUlQo
bV9ldmVudFNvdXJjZXMuY29udGFpbnMobWFjaFBvcnQpKTsKIAotICAgIEV2ZW50U291cmNlKiBl
dmVudFNvdXJjZSA9IGl0LT5zZWNvbmQ7CisgICAgRXZlbnRTb3VyY2UqIGV2ZW50U291cmNlID0g
aXQtPnZhbHVlOwogICAgIC8vIENhbmNlbCBhbmQgcmVsZWFzZSB0aGUgc291cmNlLiBJdCB3aWxs
IGJlIGRlbGV0ZWQgaW4gaXRzIGZpbmFsaXplIGhhbmRsZXIuCiAgICAgZGlzcGF0Y2hfc291cmNl
X2NhbmNlbChldmVudFNvdXJjZS0+ZGlzcGF0Y2hTb3VyY2UoKSk7CiAgICAgZGlzcGF0Y2hfcmVs
ZWFzZShldmVudFNvdXJjZS0+ZGlzcGF0Y2hTb3VyY2UoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvUGx1Z2lucy9OUFJlbW90ZU9iamVjdE1hcC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvUGx1Z2lucy9OUFJlbW90ZU9iamVjdE1hcC5jcHAKaW5kZXggNzY0MWFmNWU4
Yzg5MmQxZDM3ZWU5NmRhOWI3ZTYwNTg5OTczZTg4YS4uYjVlYzJkOWRhMzlmMjZkY2I0MzIwZDk1
ZTAzZjJmY2FlNGU3ZDdkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1BsdWdp
bnMvTlBSZW1vdGVPYmplY3RNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9QbHVn
aW5zL05QUmVtb3RlT2JqZWN0TWFwLmNwcApAQCAtMjAwLDcgKzIwMCw3IEBAIHZvaWQgTlBSZW1v
dGVPYmplY3RNYXA6OnBsdWdpbkRlc3Ryb3llZChQbHVnaW4qIHBsdWdpbikKIAogICAgIC8vIEdh
dGhlciB0aGUgcmVjZWl2ZXJzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHBsdWctaW4uCiAgICAgZm9y
IChIYXNoTWFwPHVpbnQ2NF90LCBOUE9iamVjdE1lc3NhZ2VSZWNlaXZlcio+Ojpjb25zdF9pdGVy
YXRvciBpdCA9IG1fcmVnaXN0ZXJlZE5QT2JqZWN0cy5iZWdpbigpLCBlbmQgPSBtX3JlZ2lzdGVy
ZWROUE9iamVjdHMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBOUE9iamVjdE1l
c3NhZ2VSZWNlaXZlciogbnBPYmplY3RNZXNzYWdlUmVjZWl2ZXIgPSBpdC0+c2Vjb25kOworICAg
ICAgICBOUE9iamVjdE1lc3NhZ2VSZWNlaXZlciogbnBPYmplY3RNZXNzYWdlUmVjZWl2ZXIgPSBp
dC0+dmFsdWU7CiAgICAgICAgIGlmIChucE9iamVjdE1lc3NhZ2VSZWNlaXZlci0+cGx1Z2luKCkg
PT0gcGx1Z2luKQogICAgICAgICAgICAgbWVzc2FnZVJlY2VpdmVycy5hcHBlbmQobnBPYmplY3RN
ZXNzYWdlUmVjZWl2ZXIpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9Vc2VyTWVzc2FnZUNvZGVycy5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1VzZXJNZXNzYWdl
Q29kZXJzLmgKaW5kZXggZWU0YWI2NGZmYTViNjNiOTJjMDk5OTU1NDg1ZjIwZTIxNTU1ZTZjZi4u
MmVjNWJiNGQ1MmIyMDc1MWZkYjU3ZWQ2NjI4MGVhOTA3YmQzOWI1MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvU2hhcmVkL1VzZXJNZXNzYWdlQ29kZXJzLmgKKysrIGIvU291cmNlL1dlYktp
dDIvU2hhcmVkL1VzZXJNZXNzYWdlQ29kZXJzLmgKQEAgLTkzLDggKzkzLDggQEAgcHVibGljOgog
ICAgICAgICAgICAgSW1tdXRhYmxlRGljdGlvbmFyeTo6TWFwVHlwZTo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtYXAuYmVnaW4oKTsKICAgICAgICAgICAgIEltbXV0YWJsZURpY3Rpb25hcnk6Ok1hcFR5
cGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC5lbmQoKTsKICAgICAgICAgICAgIGZvciAoOyBp
dCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgICAgICBlbmNvZGVyLT5lbmNvZGUoaXQtPmZp
cnN0KTsKLSAgICAgICAgICAgICAgICBlbmNvZGVyLT5lbmNvZGUoT3duZXIoaXQtPnNlY29uZC5n
ZXQoKSkpOworICAgICAgICAgICAgICAgIGVuY29kZXItPmVuY29kZShpdC0+a2V5KTsKKyAgICAg
ICAgICAgICAgICBlbmNvZGVyLT5lbmNvZGUoT3duZXIoaXQtPnZhbHVlLmdldCgpKSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByZWZlcmVuY2VzU3RvcmUuY3BwIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL1dlYlByZWZlcmVuY2VzU3RvcmUuY3BwCmluZGV4IDc0NmRmMTBhNDIz
NTFlMmZhNWQyNGExYjQyMjA0ZTk1YTBmNTIwODIuLjRmNDliYjc4NjllN2NmMzc5ZmQyZDU3YzM0
YmQxNWJjYTlmMmViNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcmVm
ZXJlbmNlc1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJlZmVyZW5j
ZXNTdG9yZS5jcHAKQEAgLTE1MSw3ICsxNTEsNyBAQCBzdGF0aWMgdHlwZW5hbWUgTWFwVHlwZTo6
TWFwcGVkVHlwZSB2YWx1ZUZvcktleShjb25zdCBNYXBUeXBlJiBtYXAsIGNvbnN0IHR5cGVuYQog
ewogICAgIHR5cGVuYW1lIE1hcFR5cGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLmZpbmQoa2V5
KTsKICAgICBpZiAoaXQgIT0gbWFwLmVuZCgpKQotICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsK
KyAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKIAogICAgIHJldHVybiBkZWZhdWx0VmFsdWVGb3JL
ZXk8dHlwZW5hbWUgTWFwVHlwZTo6TWFwcGVkVHlwZT4oa2V5KTsKIH0KQEAgLTE4Nyw3ICsxODcs
NyBAQCBib29sIFdlYlByZWZlcmVuY2VzU3RvcmU6OmdldEJvb2xWYWx1ZUZvcktleShjb25zdCBT
dHJpbmcmIGtleSkgY29uc3QKICAgICAvLyBGSVhNRTogRXh0ZW5kIG92ZXJyaWRpbmcgdG8gb3Ro
ZXIga2V5IHR5cGVzIHVzZWQgZnJvbSBUZXN0UnVubmVyLgogICAgIEJvb2xPdmVycmlkZXNNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYm9vbFRlc3RSdW5uZXJPdmVycmlkZXNNYXAoKS5maW5kKGtl
eSk7CiAgICAgaWYgKGl0ICE9IGJvb2xUZXN0UnVubmVyT3ZlcnJpZGVzTWFwKCkuZW5kKCkpCi0g
ICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwogICAg
IHJldHVybiB2YWx1ZUZvcktleShtX2Jvb2xWYWx1ZXMsIGtleSk7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvV2ViQ29yZUFyZ3VtZW50Q29kZXJzTWFjLm1tIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9XZWJDb3JlQXJndW1lbnRDb2RlcnNNYWMubW0KaW5k
ZXggMTk2YWIxMWM3YTc0MzEwN2QzODAwZTFmZjhmYTViZTFmMmIzYjgxOC4uMGY5ZDNkOGEzYmZi
NzM3NDNiMzkzMzUzMzVkYzVmNThjMWQxNDc4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
U2hhcmVkL21hYy9XZWJDb3JlQXJndW1lbnRDb2RlcnNNYWMubW0KKysrIGIvU291cmNlL1dlYktp
dDIvU2hhcmVkL21hYy9XZWJDb3JlQXJndW1lbnRDb2RlcnNNYWMubW0KQEAgLTE4Myw3ICsxODMs
NyBAQCBib29sIEFyZ3VtZW50Q29kZXI8UmVzb3VyY2VFcnJvcj46OmRlY29kZShBcmd1bWVudERl
Y29kZXIqIGRlY29kZXIsIFJlc291cmNlRXJybwogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+
Ojpjb25zdF9pdGVyYXRvciBpdCA9IHN0cmluZ1VzZXJJbmZvTWFwLmJlZ2luKCk7CiAgICAgSGFz
aE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHN0cmluZ1VzZXJJbmZv
TWFwLmVuZCgpOwogICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIFt1c2VySW5m
byBzZXRPYmplY3Q6bnNTdHJpbmcoaXQtPnNlY29uZCkgZm9yS2V5Om5zU3RyaW5nKGl0LT5maXJz
dCldOworICAgICAgICBbdXNlckluZm8gc2V0T2JqZWN0Om5zU3RyaW5nKGl0LT52YWx1ZSkgZm9y
S2V5Om5zU3RyaW5nKGl0LT5rZXkpXTsKIAogICAgIGlmIChjZXJ0aWZpY2F0ZS5jZXJ0aWZpY2F0
ZUNoYWluKCkpCiAgICAgICAgIFt1c2VySW5mbyBzZXRPYmplY3Q6KE5TQXJyYXkgKiljZXJ0aWZp
Y2F0ZS5jZXJ0aWZpY2F0ZUNoYWluKCkgZm9yS2V5OkAiTlNFcnJvclBlZXJDZXJ0aWZpY2F0ZUNo
YWluS2V5Il07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvQXJndW1lbnRD
b2RlcnNRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvQXJndW1lbnRDb2RlcnNRdC5j
cHAKaW5kZXggYzg5YmY0NGYxNzE5MGIwMmM0MTEyYmNiZWQ2ZTBjNDFmYTNjNjc1Zi4uYTQzOWNh
ZmYxZTQ4OGUxMDJjNTUwYWQwNGYzNDZkNTk5NmRkMTg5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvU2hhcmVkL3F0L0FyZ3VtZW50Q29kZXJzUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9xdC9Bcmd1bWVudENvZGVyc1F0LmNwcApAQCAtODYsOCArODYsOCBAQCBib29sIEFy
Z3VtZW50Q29kZXI8V2ViQ29yZTo6RHJhZ0RhdGE+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBk
ZWNvZGVyLCBEcmFnRGF0YQogICAgICAgICBNSU1FRGF0YUhhc2hNYXA6Oml0ZXJhdG9yIGl0ID0g
bWFwLmJlZ2luKCk7CiAgICAgICAgIE1JTUVEYXRhSGFzaE1hcDo6aXRlcmF0b3IgZW5kID0gbWFw
LmVuZCgpOwogICAgICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBR
Qnl0ZUFycmF5IGJ5dGVzKChjaGFyKilpdC0+c2Vjb25kLmRhdGEoKSwgaXQtPnNlY29uZC5zaXpl
KCkpOwotICAgICAgICAgICAgbWltZURhdGEtPnNldERhdGEoaXQtPmZpcnN0LCBieXRlcyk7Cisg
ICAgICAgICAgICBRQnl0ZUFycmF5IGJ5dGVzKChjaGFyKilpdC0+dmFsdWUuZGF0YSgpLCBpdC0+
dmFsdWUuc2l6ZSgpKTsKKyAgICAgICAgICAgIG1pbWVEYXRhLT5zZXREYXRhKGl0LT5rZXksIGJ5
dGVzKTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hh
cmVkL3NvdXAvV2ViQ29yZUFyZ3VtZW50Q29kZXJzU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvc291cC9XZWJDb3JlQXJndW1lbnRDb2RlcnNTb3VwLmNwcAppbmRleCBkYmUyYzUxY2Rj
ZmI3OThhZmFjZDJmZDFkYmZhNDkyYjFhMWVmYjFiLi4zM2Q5YmQzZmYyMGU2MTkwY2MzY2U0ZmY4
NTk5MzhiMDM5NGVkNmMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvc291cC9X
ZWJDb3JlQXJndW1lbnRDb2RlcnNTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
c291cC9XZWJDb3JlQXJndW1lbnRDb2RlcnNTb3VwLmNwcApAQCAtMTQ0LDcgKzE0NCw3IEBAIGJv
b2wgQXJndW1lbnRDb2RlcjxSZXNvdXJjZVJlc3BvbnNlPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2Rl
ciogZGVjb2RlciwgUmVzb3VyY2VSCiAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoaGVhZGVycykp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gaGVhZGVycy5iZWdpbigpLCBlbmQgPSBoZWFkZXJzLmVuZCgpOyBpdCAhPSBl
bmQ7ICsraXQpCi0gICAgICAgIHJlc3BvbnNlLnNldEhUVFBIZWFkZXJGaWVsZChpdC0+Zmlyc3Qs
IGl0LT5zZWNvbmQpOworICAgICAgICByZXNwb25zZS5zZXRIVFRQSGVhZGVyRmllbGQoaXQtPmtl
eSwgaXQtPnZhbHVlKTsKIAogICAgIHVpbnQzMl90IHNvdXBNZXNzYWdlRmxhZ3M7CiAgICAgaWYg
KCFkZWNvZGVyLT5kZWNvZGUoc291cE1lc3NhZ2VGbGFncykpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3QuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0LmNwcApp
bmRleCBiZTg2NmZhMGE5NjdhZWE2YjZlNDA1MDdlOTI0Y2E3OTUxNDUyZmY2Li45NGQwMzAwYzE1
N2VhMTQzNzA1NDQxNmFlNjZjODcxYWUzOTU2NjIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3QuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdC5jcHAKQEAg
LTU0LDcgKzU0LDcgQEAgc3RydWN0IF9Fd2tfQmFja19Gb3J3YXJkX0xpc3QgewogICAgICAgICBJ
dGVtc01hcDo6aXRlcmF0b3IgaXQgPSB3cmFwcGVyQ2FjaGUuYmVnaW4oKTsKICAgICAgICAgSXRl
bXNNYXA6Oml0ZXJhdG9yIGVuZCA9IHdyYXBwZXJDYWNoZS5lbmQoKTsKICAgICAgICAgZm9yICg7
IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVt
X3VucmVmKGl0LT5zZWNvbmQpOworICAgICAgICAgICAgZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0
ZW1fdW5yZWYoaXQtPnZhbHVlKTsKICAgICB9CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAKaW5kZXggOTQyZTliOWJkMTViYTlhYzgw
NDNjZDlkNWU0NDM0OWEwYzlmZDk0ZS4uNGE5YzNjYTRkZmQ5Mzk3NTQyMDA2Mzc1OGY1ZjdhOTEx
M2I0ZTkwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X2NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19j
b250ZXh0LmNwcApAQCAtMTE5LDcgKzExOSw3IEBAIHN0cnVjdCBfRXdrX0NvbnRleHQgewogICAg
ICAgICBIYXNoTWFwPHVpbnQ2NF90LCBFd2tfRG93bmxvYWRfSm9iKj46Oml0ZXJhdG9yIGl0ID0g
ZG93bmxvYWRKb2JzLmJlZ2luKCk7CiAgICAgICAgIEhhc2hNYXA8dWludDY0X3QsIEV3a19Eb3du
bG9hZF9Kb2IqPjo6aXRlcmF0b3IgZW5kID0gZG93bmxvYWRKb2JzLmVuZCgpOwogICAgICAgICBm
b3IgKCA7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIGV3a19kb3dubG9hZF9qb2JfdW5y
ZWYoaXQtPnNlY29uZCk7CisgICAgICAgICAgICBld2tfZG93bmxvYWRfam9iX3VucmVmKGl0LT52
YWx1ZSk7CiAgICAgfQogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX3ZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX3ZpZXcuY3BwCmluZGV4IDc0ZjVlYjk2ZWJhMTk4OTZjYzAzMjcyZTBhN2ViOGJhMzc4YWQ2
Y2EuLmY0NjAyZjVkOWI2MTdjYzdkMjliOGMzOWZkY2NlNTViNDI4ODQyOGEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAKQEAgLTQyNiw3ICs0MjYs
NyBAQCBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfcHJpdl9sb2FkaW5nX3Jlc291cmNlc19jbGVhcihM
b2FkaW5nUmVzb3VyY2VzTWFwJiBsb2FkaW5nUgogICAgIExvYWRpbmdSZXNvdXJjZXNNYXA6Oml0
ZXJhdG9yIGl0ID0gbG9hZGluZ1Jlc291cmNlc01hcC5iZWdpbigpOwogICAgIExvYWRpbmdSZXNv
dXJjZXNNYXA6Oml0ZXJhdG9yIGVuZCA9IGxvYWRpbmdSZXNvdXJjZXNNYXAuZW5kKCk7CiAgICAg
Zm9yICggOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGV3a19yZXNvdXJjZV91bnJlZihpdC0+
c2Vjb25kKTsKKyAgICAgICAgZXdrX3Jlc291cmNlX3VucmVmKGl0LT52YWx1ZSk7CiAKICAgICBs
b2FkaW5nUmVzb3VyY2VzTWFwLmNsZWFyKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCmluZGV4IDMyNThhMGYwOTRhOGRhMGY2
OGZkMWZhMDc4MjRkNTRkMzdhZDAzNzYuLjg2MmEyYWU3MjI5MDEwNWI5ZjFkNmFmNDk4ZDhlZjZj
N2NkMTNkYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFdlYlZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFdlYlZpZXcuY3BwCkBAIC0yNDYzLDcgKzI0NjMsNyBAQCBHTGlzdCogd2Via2l0X3dlYl92
aWV3X2dldF9zdWJyZXNvdXJjZXMoV2ViS2l0V2ViVmlldyogd2ViVmlldykKICAgICBXZWJLaXRX
ZWJWaWV3UHJpdmF0ZSogcHJpdiA9IHdlYlZpZXctPnByaXY7CiAgICAgUmVzb3VyY2VzTWFwOjpj
b25zdF9pdGVyYXRvciBlbmQgPSBwcml2LT5zdWJyZXNvdXJjZXNNYXAuZW5kKCk7CiAgICAgZm9y
IChSZXNvdXJjZXNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcHJpdi0+c3VicmVzb3VyY2VzTWFw
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgc3VicmVzb3VyY2VzID0gZ19saXN0
X3ByZXBlbmQoc3VicmVzb3VyY2VzLCBpdC0+c2Vjb25kLmdldCgpKTsKKyAgICAgICAgc3VicmVz
b3VyY2VzID0gZ19saXN0X3ByZXBlbmQoc3VicmVzb3VyY2VzLCBpdC0+dmFsdWUuZ2V0KCkpOwog
CiAgICAgcmV0dXJuIGdfbGlzdF9yZXZlcnNlKHN1YnJlc291cmNlcyk7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAK
aW5kZXggYWExM2Q3YTM1NjA2ZTRiNGJhMGExOTNhYWU3YzVhODM0OWIxODM1YS4uZTViYWM2NzFl
NDM1NzZmMjNkNGYzMWM4NWVmYjA3ZTIxMzQ2ZTg4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcApAQCAtMzAzLDcg
KzMwMyw3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlQ29udGFpbmVyRm9yYWxsKEd0
a0NvbnRhaW5lciogY29udGFpbmVyLCBnYm9vbGVhbiBpCiAgICAgV2ViS2l0V2ViVmlld0NoaWxk
cmVuTWFwIGNoaWxkcmVuID0gcHJpdi0+Y2hpbGRyZW47CiAgICAgV2ViS2l0V2ViVmlld0NoaWxk
cmVuTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBjaGlsZHJlbi5lbmQoKTsKICAgICBmb3IgKFdl
YktpdFdlYlZpZXdDaGlsZHJlbk1hcDo6Y29uc3RfaXRlcmF0b3IgY3VycmVudCA9IGNoaWxkcmVu
LmJlZ2luKCk7IGN1cnJlbnQgIT0gZW5kOyArK2N1cnJlbnQpCi0gICAgICAgICgqY2FsbGJhY2sp
KGN1cnJlbnQtPmZpcnN0LCBjYWxsYmFja0RhdGEpOworICAgICAgICAoKmNhbGxiYWNrKShjdXJy
ZW50LT5rZXksIGNhbGxiYWNrRGF0YSk7CiAKICAgICBpZiAoaW5jbHVkZUludGVybmFscyAmJiBw
cml2LT5pbnNwZWN0b3JWaWV3KQogICAgICAgICAoKmNhbGxiYWNrKShwcml2LT5pbnNwZWN0b3JW
aWV3LCBjYWxsYmFja0RhdGEpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9tYWMvV0tQcmludGluZ1ZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L21hYy9XS1ByaW50aW5nVmlldy5tbQppbmRleCA2M2M1ODg5NWY3MTI5M2IxYjU0NThkOWViNjg0
MWQwYTA2NDgxNDlkLi5jYTFjYWQ1ODI1OTlmZDBjNjBiMjUyNGM2YmM3NzI3NjlkMmZkMzlhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ByaW50aW5nVmll
dy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ByaW50aW5nVmll
dy5tbQpAQCAtMTk0LDggKzE5NCw4IEBAIHN0YXRpYyBCT09MIGlzRm9yY2luZ1ByZXZpZXdVcGRh
dGU7CiAtICh1aW50NjRfdClfZXhwZWN0ZWRQcmV2aWV3Q2FsbGJhY2tGb3JSZWN0Oihjb25zdCBJ
bnRSZWN0JilyZWN0CiB7CiAgICAgZm9yIChIYXNoTWFwPHVpbnQ2NF90LCBXZWJDb3JlOjpJbnRS
ZWN0Pjo6aXRlcmF0b3IgaXRlciA9IF9leHBlY3RlZFByZXZpZXdDYWxsYmFja3MuYmVnaW4oKTsg
aXRlciAhPSBfZXhwZWN0ZWRQcmV2aWV3Q2FsbGJhY2tzLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAg
ICAgaWYgKGl0ZXItPnNlY29uZCAgPT0gcmVjdCkKLSAgICAgICAgICAgIHJldHVybiBpdGVyLT5m
aXJzdDsKKyAgICAgICAgaWYgKGl0ZXItPnZhbHVlICA9PSByZWN0KQorICAgICAgICAgICAgcmV0
dXJuIGl0ZXItPmtleTsKICAgICB9CiAgICAgcmV0dXJuIDA7CiB9CkBAIC0yMjksOCArMjI5LDgg
QEAgc3RhdGljIHZvaWQgcGFnZURpZERyYXdUb1BERihXS0RhdGFSZWYgZGF0YVJlZiwgV0tFcnJv
clJlZiwgdm9pZCogdW50eXBlZENvbnRleHQKICAgICAgICAgICAgIEFTU0VSVChbdmlldyBfaXNQ
cmludGluZ1ByZXZpZXddKTsKIAogICAgICAgICAgICAgaWYgKGRhdGEpIHsKLSAgICAgICAgICAg
ICAgICBIYXNoTWFwPFdlYkNvcmU6OkludFJlY3QsIFZlY3Rvcjx1aW50OF90PiA+OjpBZGRSZXN1
bHQgZW50cnkgPSB2aWV3LT5fcGFnZVByZXZpZXdzLmFkZChpdGVyLT5zZWNvbmQsIFZlY3Rvcjx1
aW50OF90PigpKTsKLSAgICAgICAgICAgICAgICBlbnRyeS5pdGVyYXRvci0+c2Vjb25kLmFwcGVu
ZChkYXRhLT5ieXRlcygpLCBkYXRhLT5zaXplKCkpOworICAgICAgICAgICAgICAgIEhhc2hNYXA8
V2ViQ29yZTo6SW50UmVjdCwgVmVjdG9yPHVpbnQ4X3Q+ID46OkFkZFJlc3VsdCBlbnRyeSA9IHZp
ZXctPl9wYWdlUHJldmlld3MuYWRkKGl0ZXItPnZhbHVlLCBWZWN0b3I8dWludDhfdD4oKSk7Cisg
ICAgICAgICAgICAgICAgZW50cnkuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChkYXRhLT5ieXRlcygp
LCBkYXRhLT5zaXplKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgdmlldy0+X2V4cGVj
dGVkUHJldmlld0NhbGxiYWNrcy5yZW1vdmUoY29udGV4dC0+Y2FsbGJhY2tJRCk7CiAgICAgICAg
ICAgICBib29sIHJlY2VpdmVkUmVzcG9uc2VUb0xhdGVzdFJlcXVlc3QgPSB2aWV3LT5fbGF0ZXN0
RXhwZWN0ZWRQcmV2aWV3Q2FsbGJhY2sgPT0gY29udGV4dC0+Y2FsbGJhY2tJRDsKQEAgLTQ5NCw3
ICs0OTQsNyBAQCBzdGF0aWMgdm9pZCBwcmVwYXJlRGF0YUZvclByaW50aW5nT25TZWNvbmRhcnlU
aHJlYWQodm9pZCogdW50eXBlZENvbnRleHQpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBjb25zdCBWZWN0b3I8dWludDhfdD4mIHBkZkRhdGFCeXRlcyA9IHBhZ2VQcmV2aWV3SXRlcmF0
b3ItPnNlY29uZDsKKyAgICBjb25zdCBWZWN0b3I8dWludDhfdD4mIHBkZkRhdGFCeXRlcyA9IHBh
Z2VQcmV2aWV3SXRlcmF0b3ItPnZhbHVlOwogICAgIFJldGFpblB0cjxOU0RhdGE+IHBkZkRhdGEo
QWRvcHROUywgW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6cGRmRGF0YUJ5dGVzLmRhdGEo
KSBsZW5ndGg6cGRmRGF0YUJ5dGVzLnNpemUoKV0pOwogICAgIFJldGFpblB0cjxQREZEb2N1bWVu
dD4gcGRmRG9jdW1lbnQoQWRvcHROUywgW1twZGZEb2N1bWVudENsYXNzKCkgYWxsb2NdIGluaXRX
aXRoRGF0YTpwZGZEYXRhLmdldCgpXSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
bWFjL1dLVmlldy5tbQppbmRleCA5ZDY5Mzk5ZDRlYTc0MDM4ZTcxOTFjM2ZiZmQyOWY1OGEwNGVi
NTFkLi5kNGIzMDEyOTgzNjkzZjI0MmQ3MmIzNTc3MzQ1MzJlYzEzOGIyZDRjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0KKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCkBAIC00MjgsNyArNDI4LDcgQEAg
c3RhdGljIFN0cmluZyBjb21tYW5kTmFtZUZvclNlbGVjdG9yKFNFTCBzZWxlY3RvcikKICAgICBz
dGF0aWMgY29uc3QgU2VsZWN0b3JOYW1lTWFwKiBleGNlcHRpb25NYXAgPSBjcmVhdGVTZWxlY3Rv
ckV4Y2VwdGlvbk1hcCgpOwogICAgIFNlbGVjdG9yTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBleGNlcHRpb25NYXAtPmZpbmQoc2VsZWN0b3IpOwogICAgIGlmIChpdCAhPSBleGNlcHRpb25N
YXAtPmVuZCgpKQotICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGl0
LT52YWx1ZTsKICAgICAKICAgICAvLyBSZW1vdmUgdGhlIHRyYWlsaW5nIGNvbG9uLgogICAgIC8v
IE5vIG5lZWQgdG8gY2FwaXRhbGl6ZSB0aGUgY29tbWFuZCBuYW1lIHNpbmNlIEVkaXRvciBjb21t
YW5kIG5hbWVzIGFyZQpAQCAtNzQyLDcgKzc0Miw3IEBAIHN0YXRpYyB2b2lkIHZhbGlkYXRlQ29t
bWFuZENhbGxiYWNrKFdLU3RyaW5nUmVmIGNvbW1hbmROYW1lLCBib29sIGlzRW5hYmxlZCwgaW50
CiAKICAgICAvLyBBZGQgdGhpcyBpdGVtIHRvIHRoZSB2ZWN0b3Igb2YgaXRlbXMgZm9yIGEgZ2l2
ZW4gY29tbWFuZCB0aGF0IGFyZSBhd2FpdGluZyB2YWxpZGF0aW9uLgogICAgIFZhbGlkYXRpb25N
YXA6OkFkZFJlc3VsdCBhZGRSZXN1bHQgPSBfZGF0YS0+X3ZhbGlkYXRpb25NYXAuYWRkKGNvbW1h
bmROYW1lLCBWYWxpZGF0aW9uVmVjdG9yKCkpOwotICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+c2Vj
b25kLmFwcGVuZChpdGVtKTsKKyAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChp
dGVtKTsKICAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKICAgICAgICAgLy8gSWYgd2Ug
YXJlIG5vdCBhbHJlYWR5IGF3YWl0aW5nIHZhbGlkYXRpb24gZm9yIHRoaXMgY29tbWFuZCwgc3Rh
cnQgdGhlIGFzeW5jaHJvbm91cyB2YWxpZGF0aW9uIHByb2Nlc3MuCiAgICAgICAgIC8vIEZJWE1F
OiBUaGVvcmV0aWNhbGx5LCB0aGVyZSBpcyBhIHJhY2UgaGVyZTsgd2hlbiB3ZSBnZXQgdGhlIGFu
c3dlciBpdCBtaWdodCBiZSBvbGQsIGZyb20gYSBwcmV2aW91cyB0aW1lCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEJh
Y2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFw
aGljcy9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5jcHAKaW5kZXggODRmNmViZDJmMTY1OGU2OTk2
NWU0NzFiYTM2MjVhOTIyODlmYWE3Mi4uNzdmZGMwYTI2Zjg4ZDQzMDdhN2I2MDA3ZGFiZDUzZjI5
MDZkNTQ3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmNw
cApAQCAtODAsMTUgKzgwLDE1IEBAIHZvaWQgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OnVwZGF0
ZVRpbGUoaW50IGlkLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zCiB7CiAgICAgSGFz
aE1hcDxpbnQsIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZT46Oml0ZXJhdG9yIGl0ID0gbV90
aWxlcy5maW5kKGlkKTsKICAgICBBU1NFUlQoaXQgIT0gbV90aWxlcy5lbmQoKSk7Ci0gICAgaXQt
PnNlY29uZC5pbmNyZW1lbnRSZXBhaW50Q291bnQoKTsKLSAgICBpdC0+c2Vjb25kLnNldEJhY2tC
dWZmZXIodGFyZ2V0UmVjdCwgc291cmNlUmVjdCwgYmFja0J1ZmZlciwgb2Zmc2V0KTsKKyAgICBp
dC0+dmFsdWUuaW5jcmVtZW50UmVwYWludENvdW50KCk7CisgICAgaXQtPnZhbHVlLnNldEJhY2tC
dWZmZXIodGFyZ2V0UmVjdCwgc291cmNlUmVjdCwgYmFja0J1ZmZlciwgb2Zmc2V0KTsKIH0KIAog
UGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBDb29yZGluYXRlZEJhY2tpbmdTdG9yZTo6dGV4dHVy
ZSgpIGNvbnN0CiB7CiAgICAgSGFzaE1hcDxpbnQsIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGls
ZT46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fdGlsZXMuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFw
PGludCwgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
X3RpbGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBSZWZQdHI8Qml0bWFw
VGV4dHVyZT4gdGV4dHVyZSA9IGl0LT5zZWNvbmQudGV4dHVyZSgpOworICAgICAgICBSZWZQdHI8
Qml0bWFwVGV4dHVyZT4gdGV4dHVyZSA9IGl0LT52YWx1ZS50ZXh0dXJlKCk7CiAgICAgICAgIGlm
ICh0ZXh0dXJlKQogICAgICAgICAgICAgcmV0dXJuIHRleHR1cmU7CiAgICAgfQpAQCAtMTEyLDcg
KzExMiw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OnBhaW50VG9UZXh0dXJlTWFw
cGVyKFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsCiAgICAgSGFzaE1hcDxpbnQsIENvb3Jk
aW5hdGVkQmFja2luZ1N0b3JlVGlsZT46Oml0ZXJhdG9yIGVuZCA9IG1fdGlsZXMuZW5kKCk7CiAg
ICAgRmxvYXRSZWN0IGNvdmVyZWRSZWN0OwogICAgIGZvciAoSGFzaE1hcDxpbnQsIENvb3JkaW5h
dGVkQmFja2luZ1N0b3JlVGlsZT46Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKLSAgICAgICAgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlJiB0aWxl
ID0gaXQtPnNlY29uZDsKKyAgICAgICAgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlJiB0aWxl
ID0gaXQtPnZhbHVlOwogICAgICAgICBpZiAoIXRpbGUudGV4dHVyZSgpKQogICAgICAgICAgICAg
Y29udGludWU7CiAKQEAgLTE1Niw3ICsxNTYsNyBAQCB2b2lkIENvb3JkaW5hdGVkQmFja2luZ1N0
b3JlOjpjb21taXRUaWxlT3BlcmF0aW9ucyhUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyKQog
CiAgICAgSGFzaE1hcDxpbnQsIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZT46Oml0ZXJhdG9y
IHRpbGVzRW5kID0gbV90aWxlcy5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8aW50LCBDb29yZGlu
YXRlZEJhY2tpbmdTdG9yZVRpbGU+OjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQg
IT0gdGlsZXNFbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQuc3dhcEJ1ZmZlcnModGV4dHVy
ZU1hcHBlcik7CisgICAgICAgIGl0LT52YWx1ZS5zd2FwQnVmZmVycyh0ZXh0dXJlTWFwcGVyKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJl
ZUNvb3JkaW5hdG9yUHJveHkuY3BwCmluZGV4IDYyM2IwYTk5ODI1YTBkNjk5NjkxZTkzNmIyODQz
MTE3MWUwMGI3ZjMuLjAwNWQyMThiZGJkNTM5YTlhOGE0Y2NhNmU4ZjU3ZWY3ZTUxMzczZTIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xh
eWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwCkBAIC03
Myw3ICs3Myw3IEBAIHZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6dXBkYXRlVGlsZUZv
ckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zCiAgICAgICAgICAgICBzdXJmYWNl
ID0gU2hhcmVhYmxlU3VyZmFjZTo6Y3JlYXRlKHVwZGF0ZUluZm8uc3VyZmFjZUhhbmRsZSk7CiAg
ICAgICAgICAgICBtX3N1cmZhY2VzLmFkZCh0b2tlbiwgc3VyZmFjZSk7CiAgICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgc3VyZmFjZSA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICBzdXJmYWNl
ID0gaXQtPnZhbHVlOwogICAgIH0gZWxzZQogICAgICAgICBzdXJmYWNlID0gU2hhcmVhYmxlU3Vy
ZmFjZTo6Y3JlYXRlKHVwZGF0ZUluZm8uc3VyZmFjZUhhbmRsZSk7CiAjZWxzZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVl
UmVuZGVyZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvTGF5ZXJUcmVlUmVuZGVyZXIuY3BwCmluZGV4IDViOTYyZGI0YzRjZjRmYTM5MTNmOGM0MWNh
YTIzYjZkM2ZkMTM4OTkuLjFiZmE2NTc1MmNiOTZmOGZjNzc3MmM0ZDAwYzQ0OTlkZGFiZDQ3MzAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNz
L0xheWVyVHJlZVJlbmRlcmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29v
cmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVSZW5kZXJlci5jcHAKQEAgLTE4Myw3ICsxODMsNyBA
QCB2b2lkIExheWVyVHJlZVJlbmRlcmVyOjphZGp1c3RQb3NpdGlvbkZvckZpeGVkTGF5ZXJzKCkK
IAogICAgIExheWVyTWFwOjppdGVyYXRvciBlbmQgPSBtX2ZpeGVkTGF5ZXJzLmVuZCgpOwogICAg
IGZvciAoTGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9maXhlZExheWVycy5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCi0gICAgICAgIHRvVGV4dHVyZU1hcHBlckxheWVyKGl0LT5zZWNvbmQpLT5z
ZXRTY3JvbGxQb3NpdGlvbkRlbHRhSWZOZWVkZWQoZGVsdGEpOworICAgICAgICB0b1RleHR1cmVN
YXBwZXJMYXllcihpdC0+dmFsdWUpLT5zZXRTY3JvbGxQb3NpdGlvbkRlbHRhSWZOZWVkZWQoZGVs
dGEpOwogfQogCiB2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpkaWRDaGFuZ2VTY3JvbGxQb3NpdGlv
bihjb25zdCBJbnRQb2ludCYgcG9zaXRpb24pCkBAIC0yMDYsNyArMjA2LDcgQEAgdm9pZCBMYXll
clRyZWVSZW5kZXJlcjo6c3luY0NhbnZhcyhXZWJMYXllcklEIGlkLCBjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJiBjYW52YXMKICAgICAgICAgY2FudmFzQmFja2luZ1N0b3JlID0gVGV4dHVyZU1hcHBl
clN1cmZhY2VCYWNraW5nU3RvcmU6OmNyZWF0ZSgpOwogICAgICAgICBtX3N1cmZhY2VCYWNraW5n
U3RvcmVzLnNldChpZCwgY2FudmFzQmFja2luZ1N0b3JlKTsKICAgICB9IGVsc2UKLSAgICAgICAg
Y2FudmFzQmFja2luZ1N0b3JlID0gaXQtPnNlY29uZDsKKyAgICAgICAgY2FudmFzQmFja2luZ1N0
b3JlID0gaXQtPnZhbHVlOwogCiAgICAgY2FudmFzQmFja2luZ1N0b3JlLT5zZXRHcmFwaGljc1N1
cmZhY2UoZ3JhcGhpY3NTdXJmYWNlVG9rZW4sIGNhbnZhc1NpemUsIGZyb250QnVmZmVyKTsKICAg
ICBsYXllci0+c2V0Q29udGVudHNUb01lZGlhKGNhbnZhc0JhY2tpbmdTdG9yZS5nZXQoKSk7CkBA
IC0yMTcsNyArMjE3LDcgQEAgdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6c2V0TGF5ZXJDaGlsZHJl
bihXZWJMYXllcklEIGlkLCBjb25zdCBWZWN0b3I8V2ViTGF5ZXJJRD4KIHsKICAgICBlbnN1cmVM
YXllcihpZCk7CiAgICAgTGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9sYXllcnMuZmluZChpZCk7
Ci0gICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBpdC0+c2Vjb25kOworICAgIEdyYXBoaWNzTGF5
ZXIqIGxheWVyID0gaXQtPnZhbHVlOwogICAgIFZlY3RvcjxHcmFwaGljc0xheWVyKj4gY2hpbGRy
ZW47CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkSURzLnNpemUoKTsgKytpKSB7
CkBAIC0yMzksNyArMjM5LDcgQEAgdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6c2V0TGF5ZXJGaWx0
ZXJzKFdlYkxheWVySUQgaWQsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGYKICAgICBMYXllck1h
cDo6aXRlcmF0b3IgaXQgPSBtX2xheWVycy5maW5kKGlkKTsKICAgICBBU1NFUlQoaXQgIT0gbV9s
YXllcnMuZW5kKCkpOwogCi0gICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBpdC0+c2Vjb25kOwor
ICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gaXQtPnZhbHVlOwogICAgIGxheWVyLT5zZXRGaWx0
ZXJzKGZpbHRlcnMpOwogfQogI2VuZGlmCkBAIC0yNTAsNyArMjUwLDcgQEAgdm9pZCBMYXllclRy
ZWVSZW5kZXJlcjo6c2V0TGF5ZXJTdGF0ZShXZWJMYXllcklEIGlkLCBjb25zdCBXZWJMYXllcklu
Zm8mIGxheWVySW4KICAgICBMYXllck1hcDo6aXRlcmF0b3IgaXQgPSBtX2xheWVycy5maW5kKGlk
KTsKICAgICBBU1NFUlQoaXQgIT0gbV9sYXllcnMuZW5kKCkpOwogCi0gICAgR3JhcGhpY3NMYXll
ciogbGF5ZXIgPSBpdC0+c2Vjb25kOworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gaXQtPnZh
bHVlOwogCiAgICAgbGF5ZXItPnNldFJlcGxpY2F0ZWRCeUxheWVyKGxheWVyQnlJRChsYXllcklu
Zm8ucmVwbGljYSkpOwogICAgIGxheWVyLT5zZXRNYXNrTGF5ZXIobGF5ZXJCeUlEKGxheWVySW5m
by5tYXNrKSk7CkBAIC0zNzcsNyArMzc3LDcgQEAgdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6YXNz
aWduSW1hZ2VUb0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBpbnQ2NF90IGltYWdlSUQKIAog
ICAgIEhhc2hNYXA8aW50NjRfdCwgUmVmUHRyPFRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmU+ID46
Oml0ZXJhdG9yIGl0ID0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuZmluZChpbWFnZUlEKTsK
ICAgICBBU1NFUlQoaXQgIT0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuZW5kKCkpOwotICAg
IGxheWVyLT5zZXRDb250ZW50c1RvTWVkaWEoaXQtPnNlY29uZC5nZXQoKSk7CisgICAgbGF5ZXIt
PnNldENvbnRlbnRzVG9NZWRpYShpdC0+dmFsdWUuZ2V0KCkpOwogfQogCiB2b2lkIExheWVyVHJl
ZVJlbmRlcmVyOjpjb21taXRUaWxlT3BlcmF0aW9ucygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVz
dE1hbmFnZXJQcm94eS5jcHAKaW5kZXggZWIwNmMyOWQ4NjZhMDcyMzcyM2Q1MGM3N2I3YTc3Njll
MTkyMjQwMS4uYjI2Mzk1NzM2MmY3YjlmMDljODljNmY4NWNjYTU4YTkyNjYxMzQyNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVl
c3RNYW5hZ2VyUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9HZW9sb2Nh
dGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcApAQCAtNDIsNyArNDIsNyBAQCB2
b2lkIEdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHk6OmludmFsaWRhdGVS
ZXF1ZXN0cygpCiAgICAgUGVuZGluZ1JlcXVlc3RNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9w
ZW5kaW5nUmVxdWVzdHMuYmVnaW4oKTsKICAgICBQZW5kaW5nUmVxdWVzdE1hcDo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gbV9wZW5kaW5nUmVxdWVzdHMuZW5kKCk7CiAgICAgZm9yICg7IGl0ICE9IGVu
ZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+aW52YWxpZGF0ZSgpOworICAgICAgICBpdC0+
dmFsdWUtPmludmFsaWRhdGUoKTsKIAogICAgIG1fcGVuZGluZ1JlcXVlc3RzLmNsZWFyKCk7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL1dl
Ykluc3BlY3RvclNlcnZlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvSW5zcGVjdG9y
U2VydmVyL1dlYkluc3BlY3RvclNlcnZlci5jcHAKaW5kZXggNjZkNjQ0NzM0NDdiOWQ5MGY2Mjk5
YjkyMDNjY2Q3YzVhZDEzZThjYS4uYmM1ODVlOTRkYzg0MzcxZTk1NmVkMGNmNWU2OWVhZmIwMjZi
MTI3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0luc3BlY3RvclNlcnZl
ci9XZWJJbnNwZWN0b3JTZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9J
bnNwZWN0b3JTZXJ2ZXIvV2ViSW5zcGVjdG9yU2VydmVyLmNwcApAQCAtNjcsNyArNjcsNyBAQCBX
ZWJJbnNwZWN0b3JTZXJ2ZXI6On5XZWJJbnNwZWN0b3JTZXJ2ZXIoKQogICAgIC8vIENsb3NlIGFu
eSByZW1haW5pbmcgb3BlbiBjb25uZWN0aW9ucy4KICAgICBIYXNoTWFwPHVuc2lnbmVkLCBXZWJT
b2NrZXRTZXJ2ZXJDb25uZWN0aW9uKj46Oml0ZXJhdG9yIGVuZCA9IG1fY29ubmVjdGlvbk1hcC5l
bmQoKTsKICAgICBmb3IgKEhhc2hNYXA8dW5zaWduZWQsIFdlYlNvY2tldFNlcnZlckNvbm5lY3Rp
b24qPjo6aXRlcmF0b3IgaXQgPSBtX2Nvbm5lY3Rpb25NYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7Ci0gICAgICAgIFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24qIGNvbm5lY3Rpb24gPSBp
dC0+c2Vjb25kOworICAgICAgICBXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uKiBjb25uZWN0aW9u
ID0gaXQtPnZhbHVlOwogICAgICAgICBXZWJJbnNwZWN0b3JQcm94eSogY2xpZW50ID0gbV9jbGll
bnRNYXAuZ2V0KGNvbm5lY3Rpb24tPmlkZW50aWZpZXIoKSk7CiAgICAgICAgIGNsb3NlQ29ubmVj
dGlvbihjbGllbnQsIGNvbm5lY3Rpb24pOwogICAgIH0KQEAgLTc4LDcgKzc4LDcgQEAgaW50IFdl
Ykluc3BlY3RvclNlcnZlcjo6cmVnaXN0ZXJQYWdlKFdlYkluc3BlY3RvclByb3h5KiBjbGllbnQp
CiAjaWZuZGVmIEFTU0VSVF9ESVNBQkxFRAogICAgIENsaWVudE1hcDo6aXRlcmF0b3IgZW5kID0g
bV9jbGllbnRNYXAuZW5kKCk7CiAgICAgZm9yIChDbGllbnRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9j
bGllbnRNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBBU1NFUlQoaXQtPnNl
Y29uZCAhPSBjbGllbnQpOworICAgICAgICBBU1NFUlQoaXQtPnZhbHVlICE9IGNsaWVudCk7CiAj
ZW5kaWYKIAogICAgIGludCBwYWdlSWQgPSBtX25leHRBdmFpbGFibGVQYWdlSWQrKzsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvV2ViU29ja2V0
U2VydmVyQ29ubmVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvSW5zcGVjdG9y
U2VydmVyL1dlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24uY3BwCmluZGV4IGFiYzgwNWZkN2NjN2Yx
ZmI1MjVjMGQyZmE2NmUyMWE0OWNkYzJhYTEuLjYzMTdjNjJjMjM5NzU2NmQ4OWZmNzQ0NmU5NDAy
NzQ1ZmQ4ZDdmZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0
b3JTZXJ2ZXIvV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9XZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uLmNw
cApAQCAtMTA2LDkgKzEwNiw5IEBAIHZvaWQgV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbjo6c2Vu
ZEhUVFBSZXNwb25zZUhlYWRlcihpbnQgc3RhdHVzQ29kZSwgY29uc3QgU3RyCiAgICAgYnVpbGRl
ci5hcHBlbmRMaXRlcmFsKCJcclxuIik7CiAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gaGVhZGVyRmllbGRzLmVuZCgpOwogICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBoZWFkZXJGaWVsZHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7
Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKGl0LT5maXJzdCk7CisgICAgICAgIGJ1aWxkZXIuYXBw
ZW5kKGl0LT5rZXkpOwogICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIjogIik7Ci0gICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKGl0LT5zZWNvbmQpOworICAgICAgICBidWlsZGVyLmFwcGVuZChp
dC0+dmFsdWUpOwogICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIlxyXG4iKTsKICAgICB9
CiAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJcclxuIik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL3F0L1dlYkluc3BlY3RvclNlcnZlclF0
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvcXQvV2ViSW5z
cGVjdG9yU2VydmVyUXQuY3BwCmluZGV4IDE4ODI1ODZhZjM5YzE3OGYxYjZlNDc2MTAwODlkMzlj
OWU1YzFmNGYuLjExZTU3Y2ZkNWViYzcxMDNlNWY1MGZjYWJlOGY3NDU3OGNjNDc1OGQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvcXQvV2ViSW5z
cGVjdG9yU2VydmVyUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0
b3JTZXJ2ZXIvcXQvV2ViSW5zcGVjdG9yU2VydmVyUXQuY3BwCkBAIC04MywxOCArODMsMTggQEAg
dm9pZCBXZWJJbnNwZWN0b3JTZXJ2ZXI6OmJ1aWxkUGFnZUxpc3QoVmVjdG9yPGNoYXI+JiBkYXRh
LCBTdHJpbmcmIGNvbnRlbnRUeXBlKQogICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiWyAiKTsK
ICAgICBDbGllbnRNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fY2xpZW50TWFwLmVuZCgpOwogICAgIGZv
ciAoQ2xpZW50TWFwOjppdGVyYXRvciBpdCA9IG1fY2xpZW50TWFwLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewotICAgICAgICBXZWJQYWdlUHJveHkqIHdlYlBhZ2UgPSBpdC0+c2Vjb25kLT5w
YWdlKCk7CisgICAgICAgIFdlYlBhZ2VQcm94eSogd2ViUGFnZSA9IGl0LT52YWx1ZS0+cGFnZSgp
OwogICAgICAgICBpZiAoaXQgIT0gbV9jbGllbnRNYXAuYmVnaW4oKSkKICAgICAgICAgICAgIGJ1
aWxkZXIuYXBwZW5kTGl0ZXJhbCgiLCAiKTsKICAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFs
KCJ7IFwiaWRcIjogIik7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVyKGl0LT5maXJzdCk7
CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVyKGl0LT5rZXkpOwogICAgICAgICBidWlsZGVy
LmFwcGVuZExpdGVyYWwoIiwgXCJ0aXRsZVwiOiBcIiIpOwogICAgICAgICBidWlsZGVyLmFwcGVu
ZCh3ZWJQYWdlLT5wYWdlVGl0bGUoKSk7CiAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgi
XCIsIFwidXJsXCI6IFwiIik7CiAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHdlYlBhZ2UtPmFjdGl2
ZVVSTCgpKTsKICAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJcIiwgXCJpbnNwZWN0b3JV
cmxcIjogXCIiKTsKICAgICAgICAgYnVpbGRlci5hcHBlbmQocmVtb3RlSW5zcGVjdG9yUGFnZVBh
dGgoKSk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVyKGl0LT5maXJzdCk7CisgICAgICAg
IGJ1aWxkZXIuYXBwZW5kTnVtYmVyKGl0LT5rZXkpOwogICAgICAgICBidWlsZGVyLmFwcGVuZExp
dGVyYWwoIlwiIH0iKTsKICAgICB9CiAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgXSIpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL05vdGlmaWNhdGlvbnMvTm90aWZp
Y2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL05vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5h
Z2VyUHJveHkuY3BwCmluZGV4IDA3OTIyOTg1ZTQ1NjVmM2M3M2NhZGMzYTBjZjQ1NTIxN2M2MTk5
NjkuLjRhMGM0NzUyOTM3Yjg3MmQ1ZGUyNjljOTE2OTRlMjIxOGQzMjBlMWQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Ob3RpZmljYXRpb25zL05vdGlmaWNhdGlvblBlcm1p
c3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvTm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94
eS5jcHAKQEAgLTQzLDcgKzQzLDcgQEAgdm9pZCBOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVz
dE1hbmFnZXJQcm94eTo6aW52YWxpZGF0ZVJlcXVlc3RzKCkKICAgICBQZW5kaW5nUmVxdWVzdE1h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BlbmRpbmdSZXF1ZXN0cy5iZWdpbigpOwogICAgIFBl
bmRpbmdSZXF1ZXN0TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BlbmRpbmdSZXF1ZXN0cy5l
bmQoKTsKICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5p
bnZhbGlkYXRlKCk7CisgICAgICAgIGl0LT52YWx1ZS0+aW52YWxpZGF0ZSgpOwogICAgIAogICAg
IG1fcGVuZGluZ1JlcXVlc3RzLmNsZWFyKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzUHJveHkuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc1Byb3h5LmNwcAppbmRleCBkMTc5OTY4
OWIyNzBlNzZlZjFjMmMwZWNmNWQ1M2IzNzA2MGVmYjYxLi43Nzk2Y2ZlOTdhNTUyNGVkMGI5OGI3
NTdhYTQzY2VmZDU2NTdkYTI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
UGx1Z2lucy9QbHVnaW5Qcm9jZXNzUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NQcm94eS5jcHAKQEAgLTE1MiwxMCArMTUyLDEwIEBA
IHZvaWQgUGx1Z2luUHJvY2Vzc1Byb3h5OjpwbHVnaW5Qcm9jZXNzQ3Jhc2hlZE9yRmFpbGVkVG9M
YXVuY2goKQogICAgIH0KIAogICAgIHdoaWxlICghbV9wZW5kaW5nR2V0U2l0ZXNSZXBsaWVzLmlz
RW1wdHkoKSkKLSAgICAgICAgZGlkR2V0U2l0ZXNXaXRoRGF0YShWZWN0b3I8U3RyaW5nPigpLCBt
X3BlbmRpbmdHZXRTaXRlc1JlcGxpZXMuYmVnaW4oKS0+Zmlyc3QpOworICAgICAgICBkaWRHZXRT
aXRlc1dpdGhEYXRhKFZlY3RvcjxTdHJpbmc+KCksIG1fcGVuZGluZ0dldFNpdGVzUmVwbGllcy5i
ZWdpbigpLT5rZXkpOwogCiAgICAgd2hpbGUgKCFtX3BlbmRpbmdDbGVhclNpdGVEYXRhUmVwbGll
cy5pc0VtcHR5KCkpCi0gICAgICAgIGRpZENsZWFyU2l0ZURhdGEobV9wZW5kaW5nQ2xlYXJTaXRl
RGF0YVJlcGxpZXMuYmVnaW4oKS0+Zmlyc3QpOworICAgICAgICBkaWRDbGVhclNpdGVEYXRhKG1f
cGVuZGluZ0NsZWFyU2l0ZURhdGFSZXBsaWVzLmJlZ2luKCktPmtleSk7CiAKICAgICAvLyBUZWxs
IHRoZSBwbHVnLWluIHByb2Nlc3MgbWFuYWdlciB0byBmb3JnZXQgYWJvdXQgdGhpcyBwbHVnLWlu
IHByb2Nlc3MgcHJveHkuIFRoaXMgbWF5IGNhdXNlIHVzIHRvIGJlIGRlbGV0ZWQuCiAgICAgbV9w
bHVnaW5Qcm9jZXNzTWFuYWdlci0+cmVtb3ZlUGx1Z2luUHJvY2Vzc1Byb3h5KHRoaXMpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHQuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHQuY3BwCmluZGV4IDBkMmIzNGM1MTcxYmZlZmU2
MjMzODZjMjYwZGE2MjQ5YmM2YTk1YTQuLmZlMDQ0MTEwN2M3NDEwYjdiZTViMzNlNDJlZmM0YjI5
OTU4ZmU3MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5jcHAKQEAgLTk4
OSw3ICs5ODksNyBAQCBzdGF0aWMgUGFzc1JlZlB0cjxNdXRhYmxlRGljdGlvbmFyeT4gY3JlYXRl
RGljdGlvbmFyeUZyb21IYXNoTWFwKGNvbnN0IEhhc2hNYXA8UwogICAgIFJlZlB0cjxNdXRhYmxl
RGljdGlvbmFyeT4gcmVzdWx0ID0gTXV0YWJsZURpY3Rpb25hcnk6OmNyZWF0ZSgpOwogICAgIEhh
c2hNYXA8U3RyaW5nLCB1aW50NjRfdD46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC5lbmQoKTsK
ICAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCB1aW50NjRfdD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgcmVzdWx0LT5zZXQoaXQtPmZp
cnN0LCBSZWZQdHI8V2ViVUludDY0PihXZWJVSW50NjQ6OmNyZWF0ZShpdC0+c2Vjb25kKSkuZ2V0
KCkpOworICAgICAgICByZXN1bHQtPnNldChpdC0+a2V5LCBSZWZQdHI8V2ViVUludDY0PihXZWJV
SW50NjQ6OmNyZWF0ZShpdC0+dmFsdWUpKS5nZXQoKSk7CiAgICAgCiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJY29uRGF0YWJh
c2UuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkljb25EYXRhYmFzZS5jcHAKaW5k
ZXggZWQ0ODBlNzI3OGJlYjA5MTdkYWQwMjU2NzdjYTY3MThkNmQxNzg5Yi4uZTZmMDYyZWIzMWFj
YTBmODc0MGJjZGM1MTY4YzM0YWI4ZWQzYzNiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYkljb25EYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYkljb25EYXRhYmFzZS5jcHAKQEAgLTI2OCwxNCArMjY4LDE0IEBAIHZvaWQgV2ViSWNv
bkRhdGFiYXNlOjpkaWRGaW5pc2hVUkxJbXBvcnQoKQogICAgIEhhc2hNYXA8dWludDY0X3QsIFN0
cmluZz46Oml0ZXJhdG9yIGVuZCA9IG1fcGVuZGluZ0xvYWREZWNpc2lvblVSTE1hcC5lbmQoKTsK
ICAgICAKICAgICBmb3IgKDsgaSAhPSBlbmQ7ICsraSkgewotICAgICAgICBMT0coSWNvbkRhdGFi
YXNlLCAiV0syIFVJUHJvY2VzcyBwZXJmb3JtaW5nIGRlbGF5ZWQgY2FsbGJhY2sgb24gY2FsbGJh
Y2sgSUQgJWkgZm9yIHBhZ2UgdXJsICVzIiwgKGludClpLT5maXJzdCwgaS0+c2Vjb25kLmFzY2lp
KCkuZGF0YSgpKTsKLSAgICAgICAgSWNvbkxvYWREZWNpc2lvbiBkZWNpc2lvbiA9IG1faWNvbkRh
dGFiYXNlSW1wbC0+c3luY2hyb25vdXNMb2FkRGVjaXNpb25Gb3JJY29uVVJMKGktPnNlY29uZCwg
MCk7CisgICAgICAgIExPRyhJY29uRGF0YWJhc2UsICJXSzIgVUlQcm9jZXNzIHBlcmZvcm1pbmcg
ZGVsYXllZCBjYWxsYmFjayBvbiBjYWxsYmFjayBJRCAlaSBmb3IgcGFnZSB1cmwgJXMiLCAoaW50
KWktPmtleSwgaS0+dmFsdWUuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICBJY29uTG9hZERlY2lz
aW9uIGRlY2lzaW9uID0gbV9pY29uRGF0YWJhc2VJbXBsLT5zeW5jaHJvbm91c0xvYWREZWNpc2lv
bkZvckljb25VUkwoaS0+dmFsdWUsIDApOwogCiAgICAgICAgIC8vIERlY2lzaW9ucyBzaG91bGQg
bmV2ZXIgYmUgdW5rbm93biBhZnRlciB0aGUgaW5pdGFsIGltcG9ydCBpcyBjb21wbGV0ZQogICAg
ICAgICBBU1NFUlQoZGVjaXNpb24gIT0gSWNvbkxvYWRVbmtub3duKTsKIAogICAgICAgICAvLyBG
SVhNRSAoTXVsdGktV2ViUHJvY2Vzcyk6IDxyZGFyOi8vcHJvYmxlbS8xMjI0MDIyMz4gV2UgbmVl
ZCB0byBrbm93IHdoaWNoIGNvbm5lY3Rpb24gdG8gc2VuZCB0aGlzIG1lc3NhZ2UgdG8uCi0gICAg
ICAgIG1fd2ViQ29udGV4dC0+c2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJJY29uRGF0
YWJhc2VQcm94eTo6UmVjZWl2ZWRJY29uTG9hZERlY2lzaW9uKHN0YXRpY19jYXN0PGludD4oZGVj
aXNpb24pLCBpLT5maXJzdCkpOworICAgICAgICBtX3dlYkNvbnRleHQtPnNlbmRUb0FsbFByb2Nl
c3NlcyhNZXNzYWdlczo6V2ViSWNvbkRhdGFiYXNlUHJveHk6OlJlY2VpdmVkSWNvbkxvYWREZWNp
c2lvbihzdGF0aWNfY2FzdDxpbnQ+KGRlY2lzaW9uKSwgaS0+a2V5KSk7CiAgICAgfQogICAgIAog
ICAgIG1fcGVuZGluZ0xvYWREZWNpc2lvblVSTE1hcC5jbGVhcigpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkludGVudERhdGEuY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYkludGVudERhdGEuY3BwCmluZGV4IDYzMmFhM2I3NTU0ZGIyNDNiZDM3NWRk
NzkyMTM5NTMxZTY5YWUxZmQuLmM2ZDhjNjRiYTg1OTYyNTFkNWQzNmNmZTkxOWEyOTYzODI3MTE5
NGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJbnRlbnREYXRhLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViSW50ZW50RGF0YS5jcHAKQEAgLTc4
LDcgKzc4LDcgQEAgUGFzc1JlZlB0cjxJbW11dGFibGVEaWN0aW9uYXJ5PiBXZWJJbnRlbnREYXRh
OjpleHRyYXMoKSBjb25zdAogICAgIEltbXV0YWJsZURpY3Rpb25hcnk6Ok1hcFR5cGUgd2tFeHRy
YXM7CiAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1f
c3RvcmUuZXh0cmFzLmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbV9zdG9yZS5leHRyYXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KQotICAgICAgICB3a0V4dHJhcy5zZXQoaXQtPmZpcnN0LCBXZWJTdHJpbmc6OmNyZWF0ZShpdC0+
c2Vjb25kKSk7CisgICAgICAgIHdrRXh0cmFzLnNldChpdC0+a2V5LCBXZWJTdHJpbmc6OmNyZWF0
ZShpdC0+dmFsdWUpKTsKIAogICAgIHJldHVybiBJbW11dGFibGVEaWN0aW9uYXJ5OjphZG9wdCh3
a0V4dHJhcyk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJv
Y2Vzc1Byb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHku
Y3BwCmluZGV4IDgxMjQwOTlhZTY5MTI1Mzg3OTk4ZWQwNDE3NWEwMzQyOTNlNzlhYWMuLjc2Y2I0
MjdlNjMxODNmNjRjM2MyODQzZmI5ODkxYTcyZDFlMjQ2MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCkBAIC0yNjAsOSArMjYwLDkgQEAgYm9vbCBX
ZWJQcm9jZXNzUHJveHk6OmNoZWNrVVJMUmVjZWl2ZWRGcm9tV2ViUHJvY2Vzcyhjb25zdCBLVVJM
JiB1cmwpCiAgICAgLy8gSXRlbXMgaW4gYmFjay9mb3J3YXJkIGxpc3QgaGF2ZSBiZWVuIGFscmVh
ZHkgY2hlY2tlZC4KICAgICAvLyBPbmUgY2FzZSB3aGVyZSB3ZSBkb24ndCBoYXZlIHNhbmRib3gg
ZXh0ZW5zaW9ucyBmb3IgZmlsZSBVUkxzIGluIGIvZiBsaXN0IGlzIGlmIHRoZSBsaXN0IGhhcyBi
ZWVuIHJlaW5zdGF0ZWQgYWZ0ZXIgYSBjcmFzaCBvciBhIGJyb3dzZXIgcmVzdGFydC4KICAgICBm
b3IgKFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW1NYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2JhY2tGb3J3
YXJkTGlzdEl0ZW1NYXAuYmVnaW4oKSwgZW5kID0gbV9iYWNrRm9yd2FyZExpc3RJdGVtTWFwLmVu
ZCgpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0gICAgICAgIGlmIChLVVJMKEtVUkwoKSwgaXRl
ci0+c2Vjb25kLT51cmwoKSkuZmlsZVN5c3RlbVBhdGgoKSA9PSBwYXRoKQorICAgICAgICBpZiAo
S1VSTChLVVJMKCksIGl0ZXItPnZhbHVlLT51cmwoKSkuZmlsZVN5c3RlbVBhdGgoKSA9PSBwYXRo
KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmIChLVVJMKEtVUkwoKSwgaXRl
ci0+c2Vjb25kLT5vcmlnaW5hbFVSTCgpKS5maWxlU3lzdGVtUGF0aCgpID09IHBhdGgpCisgICAg
ICAgIGlmIChLVVJMKEtVUkwoKSwgaXRlci0+dmFsdWUtPm9yaWdpbmFsVVJMKCkpLmZpbGVTeXN0
ZW1QYXRoKCkgPT0gcGF0aCkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAt
Mjg1LDE1ICsyODUsMTUgQEAgdm9pZCBXZWJQcm9jZXNzUHJveHk6OmFkZEJhY2tGb3J3YXJkSXRl
bSh1aW50NjRfdCBpdGVtSUQsIGNvbnN0IFN0cmluZyYgb3JpZ2luYWwKIAogICAgIFdlYkJhY2tG
b3J3YXJkTGlzdEl0ZW1NYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX2JhY2tGb3J3YXJkTGlzdEl0
ZW1NYXAuYWRkKGl0ZW1JRCwgMCk7CiAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAg
ICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gV2ViQmFja0ZvcndhcmRMaXN0SXRlbTo6Y3Jl
YXRlKG9yaWdpbmFsVVJMLCB1cmwsIHRpdGxlLCBiYWNrRm9yd2FyZERhdGEuZGF0YSgpLCBiYWNr
Rm9yd2FyZERhdGEuc2l6ZSgpLCBpdGVtSUQpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZh
bHVlID0gV2ViQmFja0ZvcndhcmRMaXN0SXRlbTo6Y3JlYXRlKG9yaWdpbmFsVVJMLCB1cmwsIHRp
dGxlLCBiYWNrRm9yd2FyZERhdGEuZGF0YSgpLCBiYWNrRm9yd2FyZERhdGEuc2l6ZSgpLCBpdGVt
SUQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgLy8gVXBkYXRlIGV4aXN0aW5nIGl0
ZW0uCi0gICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQtPnNldE9yaWdpbmFsVVJMKG9yaWdpbmFs
VVJMKTsKLSAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZC0+c2V0VVJMKHVybCk7Ci0gICAgcmVz
dWx0Lml0ZXJhdG9yLT5zZWNvbmQtPnNldFRpdGxlKHRpdGxlKTsKLSAgICByZXN1bHQuaXRlcmF0
b3ItPnNlY29uZC0+c2V0QmFja0ZvcndhcmREYXRhKGJhY2tGb3J3YXJkRGF0YS5kYXRhKCksIGJh
Y2tGb3J3YXJkRGF0YS5zaXplKCkpOworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPnNldE9y
aWdpbmFsVVJMKG9yaWdpbmFsVVJMKTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5zZXRV
UkwodXJsKTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5zZXRUaXRsZSh0aXRsZSk7Cisg
ICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+c2V0QmFja0ZvcndhcmREYXRhKGJhY2tGb3J3YXJk
RGF0YS5kYXRhKCksIGJhY2tGb3J3YXJkRGF0YS5zaXplKCkpOwogfQogCiB2b2lkIFdlYlByb2Nl
c3NQcm94eTo6c2VuZERpZEdldFBsdWdpbnModWludDY0X3QgcmVxdWVzdElELCBQYXNzT3duUHRy
PFZlY3RvcjxQbHVnaW5JbmZvPiA+IHBsdWdpbkluZm9zKQpAQCAtNTYzLDcgKzU2Myw3IEBAIHNp
emVfdCBXZWJQcm9jZXNzUHJveHk6OmZyYW1lQ291bnRJblBhZ2UoV2ViUGFnZVByb3h5KiBwYWdl
KSBjb25zdAogewogICAgIHNpemVfdCByZXN1bHQgPSAwOwogICAgIGZvciAoSGFzaE1hcDx1aW50
NjRfdCwgUmVmUHRyPFdlYkZyYW1lUHJveHk+ID46OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX2Zy
YW1lTWFwLmJlZ2luKCk7IGl0ZXIgIT0gbV9mcmFtZU1hcC5lbmQoKTsgKytpdGVyKSB7Ci0gICAg
ICAgIGlmIChpdGVyLT5zZWNvbmQtPnBhZ2UoKSA9PSBwYWdlKQorICAgICAgICBpZiAoaXRlci0+
dmFsdWUtPnBhZ2UoKSA9PSBwYWdlKQogICAgICAgICAgICAgKytyZXN1bHQ7CiAgICAgfQogICAg
IHJldHVybiByZXN1bHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0dl
b2xvY2F0aW9uL0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvR2VvbG9jYXRpb24vR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVx
dWVzdE1hbmFnZXIuY3BwCmluZGV4IDcwMTNmY2RjNmNjNmE1MWU1OGVlYmQ5YjhlYjgwMDIwMjRm
NTRmYjIuLjBkMTEwYzUzYTA2ZGZiYTRmYThmZjkwNTVjODVlOTIwZGRhYTQyYmIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvR2VvbG9jYXRpb24vR2VvbG9jYXRpb25QZXJt
aXNzaW9uUmVxdWVzdE1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
R2VvbG9jYXRpb24vR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuY3BwCkBAIC03
Myw3ICs3Myw3IEBAIHZvaWQgR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXI6OmNh
bmNlbFJlcXVlc3RGb3JHZW9sb2NhdGlvbihHZW9sb2NhdGlvCiAgICAgaWYgKGl0ID09IG1fZ2Vv
bG9jYXRpb25Ub0lETWFwLmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICB1aW50NjRfdCBn
ZW9sb2NhdGlvbklEID0gaXQtPnNlY29uZDsKKyAgICB1aW50NjRfdCBnZW9sb2NhdGlvbklEID0g
aXQtPnZhbHVlOwogICAgIG1fZ2VvbG9jYXRpb25Ub0lETWFwLnJlbW92ZShpdCk7CiAgICAgbV9p
ZFRvR2VvbG9jYXRpb25NYXAucmVtb3ZlKGdlb2xvY2F0aW9uSUQpOwogfQpAQCAtODQsNyArODQs
NyBAQCB2b2lkIEdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyOjpkaWRSZWNlaXZl
R2VvbG9jYXRpb25QZXJtaXNzaW9uRGVjaXNpbwogICAgIGlmIChpdCA9PSBtX2lkVG9HZW9sb2Nh
dGlvbk1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgR2VvbG9jYXRpb24qIGdlb2xv
Y2F0aW9uID0gaXQtPnNlY29uZDsKKyAgICBHZW9sb2NhdGlvbiogZ2VvbG9jYXRpb24gPSBpdC0+
dmFsdWU7CiAgICAgZ2VvbG9jYXRpb24tPnNldElzQWxsb3dlZChhbGxvd2VkKTsKIAogICAgIG1f
aWRUb0dlb2xvY2F0aW9uTWFwLnJlbW92ZShpdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGUu
Y3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0
ZWRCdW5kbGVOb2RlSGFuZGxlLmNwcAppbmRleCAwYzQyOTVlNjEyY2RkNzZmMDNhNTMxM2Q0NWU2
Y2VjMWZiMWU4NTk2Li43N2UwMzA5M2Q1ZmQwZDk2NDI0ZDMxNTRmNzdjOTRkNDE5NGIxNmVhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9J
bmplY3RlZEJ1bmRsZU5vZGVIYW5kbGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxlTm9kZUhhbmRsZS5jcHAKQEAgLTY5
LDEwICs2OSwxMCBAQCBQYXNzUmVmUHRyPEluamVjdGVkQnVuZGxlTm9kZUhhbmRsZT4gSW5qZWN0
ZWRCdW5kbGVOb2RlSGFuZGxlOjpnZXRPckNyZWF0ZShOb2RlKgogCiAgICAgRE9NSGFuZGxlQ2Fj
aGU6OkFkZFJlc3VsdCByZXN1bHQgPSBkb21IYW5kbGVDYWNoZSgpLmFkZChub2RlLCAwKTsKICAg
ICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxJbmpl
Y3RlZEJ1bmRsZU5vZGVIYW5kbGU+KHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKKyAgICAgICAg
cmV0dXJuIFBhc3NSZWZQdHI8SW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlPihyZXN1bHQuaXRlcmF0
b3ItPnZhbHVlKTsKIAogICAgIFJlZlB0cjxJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU+IG5vZGVI
YW5kbGUgPSBJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU6OmNyZWF0ZShub2RlKTsKLSAgICByZXN1
bHQuaXRlcmF0b3ItPnNlY29uZCA9IG5vZGVIYW5kbGUuZ2V0KCk7CisgICAgcmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZSA9IG5vZGVIYW5kbGUuZ2V0KCk7CiAgICAgcmV0dXJuIG5vZGVIYW5kbGUucmVs
ZWFzZSgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxlUmFuZ2VIYW5k
bGUuY3BwCmluZGV4IDFiNzRmMDEyNDAwOGRiM2MwNzgyOGVhNmY2ZDJjMDVhYzA1OWMzMDYuLmQ2
MDAwYWI5MTMzMjljZDU3ZGFiM2UzZmQ2NDAxNGM3NmU5NTJkYzIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxlUmFu
Z2VIYW5kbGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvRE9NL0luamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGUuY3BwCkBAIC00OCwxMCArNDgsMTAgQEAg
UGFzc1JlZlB0cjxJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlPiBJbmplY3RlZEJ1bmRsZVJhbmdl
SGFuZGxlOjpnZXRPckNyZWF0ZShSYW4KIAogICAgIERPTUhhbmRsZUNhY2hlOjpBZGRSZXN1bHQg
cmVzdWx0ID0gZG9tSGFuZGxlQ2FjaGUoKS5hZGQocmFuZ2UsIDApOwogICAgIGlmICghcmVzdWx0
LmlzTmV3RW50cnkpCi0gICAgICAgIHJldHVybiBQYXNzUmVmUHRyPEluamVjdGVkQnVuZGxlUmFu
Z2VIYW5kbGU+KHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKKyAgICAgICAgcmV0dXJuIFBhc3NS
ZWZQdHI8SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZT4ocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7
CiAKICAgICBSZWZQdHI8SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZT4gcmFuZ2VIYW5kbGUgPSBJ
bmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpjcmVhdGUocmFuZ2UpOwotICAgIHJlc3VsdC5pdGVy
YXRvci0+c2Vjb25kID0gcmFuZ2VIYW5kbGUuZ2V0KCk7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZSA9IHJhbmdlSGFuZGxlLmdldCgpOwogICAgIHJldHVybiByYW5nZUhhbmRsZS5yZWxlYXNl
KCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvSW5qZWN0ZWRCdW5kbGVJbnRlbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZUludGVudC5jcHAKaW5kZXggOTJkZTYxYzZj
MmJkNmU5ZTQyYzQ3NWRhYTA3YzAxNzc5YjE3NTdjZS4uZDhhYzNhMjVkZjM1YjRhMDVmMDIyYzEw
YTMzODQ3ZjY2ZmY5NmU4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZUludGVudC5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZUludGVudC5jcHAKQEAg
LTc5LDcgKzc5LDcgQEAgUGFzc1JlZlB0cjxJbW11dGFibGVEaWN0aW9uYXJ5PiBJbmplY3RlZEJ1
bmRsZUludGVudDo6ZXh0cmFzKCkgY29uc3QKICAgICBJbW11dGFibGVEaWN0aW9uYXJ5OjpNYXBU
eXBlIHdrRXh0cmFzOwogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRv
ciBlbmQgPSBleHRyYXMuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBleHRyYXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAg
ICAgICB3a0V4dHJhcy5zZXQoaXQtPmZpcnN0LCBXZWJTdHJpbmc6OmNyZWF0ZShpdC0+c2Vjb25k
KSk7CisgICAgICAgIHdrRXh0cmFzLnNldChpdC0+a2V5LCBXZWJTdHJpbmc6OmNyZWF0ZShpdC0+
dmFsdWUpKTsKIAogICAgIHJldHVybiBJbW11dGFibGVEaWN0aW9uYXJ5OjphZG9wdCh3a0V4dHJh
cyk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05vdGlmaWNhdGlv
bnMvV2ViTm90aWZpY2F0aW9uTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L05vdGlmaWNhdGlvbnMvV2ViTm90aWZpY2F0aW9uTWFuYWdlci5jcHAKaW5kZXggNWFjMmNkYzNl
NDVkMWY3YTM4MmVkYjAzNzcwOTVlZjU4NDA3OTc1NS4uN2I2ODkxMmZlOWFhYmI0MmMyZTc4Y2Fm
NDg2NDllYTUwNzA0MjNlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9O
b3RpZmljYXRpb25zL1dlYk5vdGlmaWNhdGlvbk1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvTm90aWZpY2F0aW9ucy9XZWJOb3RpZmljYXRpb25NYW5hZ2VyLmNwcApA
QCAtMTA3LDcgKzEwNyw3IEBAIE5vdGlmaWNhdGlvbkNsaWVudDo6UGVybWlzc2lvbiBXZWJOb3Rp
ZmljYXRpb25NYW5hZ2VyOjpwb2xpY3lGb3JPcmlnaW4oV2ViQ29yZTo6CiAgICAgQVNTRVJUKCFv
cmlnaW4tPmlzVW5pcXVlKCkpOwogICAgIEhhc2hNYXA8U3RyaW5nLCBib29sPjo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX3Blcm1pc3Npb25zTWFwLmZpbmQob3JpZ2luLT50b1Jhd1N0cmluZygpKTsK
ICAgICBpZiAoaXQgIT0gbV9wZXJtaXNzaW9uc01hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0
LT5zZWNvbmQgPyBOb3RpZmljYXRpb25DbGllbnQ6OlBlcm1pc3Npb25BbGxvd2VkIDogTm90aWZp
Y2F0aW9uQ2xpZW50OjpQZXJtaXNzaW9uRGVuaWVkOworICAgICAgICByZXR1cm4gaXQtPnZhbHVl
ID8gTm90aWZpY2F0aW9uQ2xpZW50OjpQZXJtaXNzaW9uQWxsb3dlZCA6IE5vdGlmaWNhdGlvbkNs
aWVudDo6UGVybWlzc2lvbkRlbmllZDsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKG9yaWdpbik7
CiAjZW5kaWYKQEAgLTE0NSw3ICsxNDUsNyBAQCBib29sIFdlYk5vdGlmaWNhdGlvbk1hbmFnZXI6
OnNob3coTm90aWZpY2F0aW9uKiBub3RpZmljYXRpb24sIFdlYlBhZ2UqIHBhZ2UpCiAgICAgbV9u
b3RpZmljYXRpb25JRE1hcC5zZXQobm90aWZpY2F0aW9uSUQsIG5vdGlmaWNhdGlvbik7CiAgICAg
CiAgICAgTm90aWZpY2F0aW9uQ29udGV4dE1hcDo6aXRlcmF0b3IgaXQgPSBtX25vdGlmaWNhdGlv
bkNvbnRleHRNYXAuYWRkKG5vdGlmaWNhdGlvbi0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBW
ZWN0b3I8dWludDY0X3Q+KCkpLml0ZXJhdG9yOwotICAgIGl0LT5zZWNvbmQuYXBwZW5kKG5vdGlm
aWNhdGlvbklEKTsKKyAgICBpdC0+dmFsdWUuYXBwZW5kKG5vdGlmaWNhdGlvbklEKTsKIAogI2lm
IEVOQUJMRShOT1RJRklDQVRJT05TKQogICAgIG1fcHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5zZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNob3dOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLT50
aXRsZSgpLCBub3RpZmljYXRpb24tPmJvZHkoKSwgbm90aWZpY2F0aW9uLT5pY29uVVJMKCkuc3Ry
aW5nKCksIG5vdGlmaWNhdGlvbi0+dGFnKCksIG5vdGlmaWNhdGlvbi0+bGFuZygpLCBub3RpZmlj
YXRpb24tPmRpcigpLCBub3RpZmljYXRpb24tPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+c2Vj
dXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKSwgbm90aWZpY2F0aW9uSUQpLCBwYWdlLT5wYWdlSUQo
KSk7CkBAIC0xODQsNyArMTg0LDcgQEAgdm9pZCBXZWJOb3RpZmljYXRpb25NYW5hZ2VyOjpjbGVh
ck5vdGlmaWNhdGlvbnMoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCoKICAgICBpZiAo
aXQgPT0gbV9ub3RpZmljYXRpb25Db250ZXh0TWFwLmVuZCgpKQogICAgICAgICByZXR1cm47CiAg
ICAgCi0gICAgVmVjdG9yPHVpbnQ2NF90PiYgbm90aWZpY2F0aW9uSURzID0gaXQtPnNlY29uZDsK
KyAgICBWZWN0b3I8dWludDY0X3Q+JiBub3RpZmljYXRpb25JRHMgPSBpdC0+dmFsdWU7CiAgICAg
bV9wcm9jZXNzLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYk5vdGlmaWNhdGlvbk1h
bmFnZXJQcm94eTo6Q2xlYXJOb3RpZmljYXRpb25zKG5vdGlmaWNhdGlvbklEcyksIHBhZ2UtPnBh
Z2VJRCgpKTsKICAgICBzaXplX3QgY291bnQgPSBub3RpZmljYXRpb25JRHMuc2l6ZSgpOwogICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewpAQCAtMjgxLDEwICsyODEsMTAg
QEAgdm9pZCBXZWJOb3RpZmljYXRpb25NYW5hZ2VyOjpyZW1vdmVOb3RpZmljYXRpb25Gcm9tQ29u
dGV4dE1hcCh1aW50NjRfdCBub3RpZmljYXQKICAgICAvLyBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0
aW9uIGZvciBtYW5hZ2luZyB0aGUgaGFzaCBtYXBzLgogICAgIE5vdGlmaWNhdGlvbkNvbnRleHRN
YXA6Oml0ZXJhdG9yIGl0ID0gbV9ub3RpZmljYXRpb25Db250ZXh0TWFwLmZpbmQobm90aWZpY2F0
aW9uLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwogICAgIEFTU0VSVChpdCAhPSBtX25vdGlm
aWNhdGlvbkNvbnRleHRNYXAuZW5kKCkpOwotICAgIHNpemVfdCBpbmRleCA9IGl0LT5zZWNvbmQu
ZmluZChub3RpZmljYXRpb25JRCk7CisgICAgc2l6ZV90IGluZGV4ID0gaXQtPnZhbHVlLmZpbmQo
bm90aWZpY2F0aW9uSUQpOwogICAgIEFTU0VSVChpbmRleCAhPSBub3RGb3VuZCk7Ci0gICAgaXQt
PnNlY29uZC5yZW1vdmUoaW5kZXgpOwotICAgIGlmIChpdC0+c2Vjb25kLmlzRW1wdHkoKSkKKyAg
ICBpdC0+dmFsdWUucmVtb3ZlKGluZGV4KTsKKyAgICBpZiAoaXQtPnZhbHVlLmlzRW1wdHkoKSkK
ICAgICAgICAgbV9ub3RpZmljYXRpb25Db250ZXh0TWFwLnJlbW92ZShpdCk7CiB9CiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9O
UFJ1bnRpbWVPYmplY3RNYXAuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5z
L05ldHNjYXBlL05QUnVudGltZU9iamVjdE1hcC5jcHAKaW5kZXggOWRjZDkxNjY5ODczNjc5NzE5
YjhmZmQ0MmJiNmU2ZjhmZTE3OTg3Ny4uZmNhODkwOWQ2OTQ1NDRiMzdiNzc1OWU2NmU2MzAyMmNk
MWE2NDU2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05l
dHNjYXBlL05QUnVudGltZU9iamVjdE1hcC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QUnVudGltZU9iamVjdE1hcC5jcHAKQEAgLTIxMiw3ICsy
MTIsNyBAQCB2b2lkIE5QUnVudGltZU9iamVjdE1hcDo6aW52YWxpZGF0ZSgpCiAgICAgVmVjdG9y
PE5QT2JqZWN0Kj4gb2JqZWN0czsKIAogICAgIGZvciAoSGFzaE1hcDxOUE9iamVjdCosIEpTQzo6
V2VhazxKU05QT2JqZWN0PiA+OjppdGVyYXRvciBwdHIgPSBtX2pzTlBPYmplY3RzLmJlZ2luKCks
IGVuZCA9IG1fanNOUE9iamVjdHMuZW5kKCk7IHB0ciAhPSBlbmQ7ICsrcHRyKSB7Ci0gICAgICAg
IEpTTlBPYmplY3QqIGpzTlBPYmplY3QgPSBwdHItPnNlY29uZC5nZXQoKTsKKyAgICAgICAgSlNO
UE9iamVjdCoganNOUE9iamVjdCA9IHB0ci0+dmFsdWUuZ2V0KCk7CiAgICAgICAgIGlmICghanNO
UE9iamVjdCkgLy8gU2tpcCB6b21iaWVzLgogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IG9iamVjdHMuYXBwZW5kKGpzTlBPYmplY3QtPmxlYWtOUE9iamVjdCgpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdp
bi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2Nh
cGVQbHVnaW4uY3BwCmluZGV4IGI0MTYyYTFhOTljMjIwMTE5NTI0NzU5MmQ5MWNkZmRiNDM0MTlm
ODMuLmUyOGM3OGQ4ZmYzOGVkOTM2YTc5OGNjNDBjMGI1ZTVhZWM1Y2JjNTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdp
bi5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05l
dHNjYXBlUGx1Z2luLmNwcApAQCAtMTk4LDggKzE5OCw4IEBAIE5QRXJyb3IgTmV0c2NhcGVQbHVn
aW46OmRlc3Ryb3lTdHJlYW0oTlBTdHJlYW0qIHN0cmVhbSwgTlBSZWFzb24gcmVhc29uKQogICAg
IE5ldHNjYXBlUGx1Z2luU3RyZWFtKiBwbHVnaW5TdHJlYW0gPSAwOwogCiAgICAgZm9yIChTdHJl
YW1zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fc3RyZWFtcy5iZWdpbigpLCBlbmQgPSBtX3N0
cmVhbXMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnNlY29uZC0+
bnBTdHJlYW0oKSA9PSBzdHJlYW0pIHsKLSAgICAgICAgICAgIHBsdWdpblN0cmVhbSA9IGl0LT5z
ZWNvbmQuZ2V0KCk7CisgICAgICAgIGlmIChpdC0+dmFsdWUtPm5wU3RyZWFtKCkgPT0gc3RyZWFt
KSB7CisgICAgICAgICAgICBwbHVnaW5TdHJlYW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KQEAgLTc2OCw4ICs3NjgsOCBAQCB2b2lkIE5l
dHNjYXBlUGx1Z2luOjpmcmFtZURpZEZpbmlzaExvYWRpbmcodWludDY0X3QgcmVxdWVzdElEKQog
ICAgIGlmIChpdCA9PSBtX3BlbmRpbmdVUkxOb3RpZmljYXRpb25zLmVuZCgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBTdHJpbmcgdXJsID0gaXQtPnNlY29uZC5maXJzdDsKLSAgICB2b2lkKiBu
b3RpZmljYXRpb25EYXRhID0gaXQtPnNlY29uZC5zZWNvbmQ7CisgICAgU3RyaW5nIHVybCA9IGl0
LT52YWx1ZS5maXJzdDsKKyAgICB2b2lkKiBub3RpZmljYXRpb25EYXRhID0gaXQtPnZhbHVlLnNl
Y29uZDsKIAogICAgIG1fcGVuZGluZ1VSTE5vdGlmaWNhdGlvbnMucmVtb3ZlKGl0KTsKICAgICAK
QEAgLTc4NCw4ICs3ODQsOCBAQCB2b2lkIE5ldHNjYXBlUGx1Z2luOjpmcmFtZURpZEZhaWwodWlu
dDY0X3QgcmVxdWVzdElELCBib29sIHdhc0NhbmNlbGxlZCkKICAgICBpZiAoaXQgPT0gbV9wZW5k
aW5nVVJMTm90aWZpY2F0aW9ucy5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU3RyaW5n
IHVybCA9IGl0LT5zZWNvbmQuZmlyc3Q7Ci0gICAgdm9pZCogbm90aWZpY2F0aW9uRGF0YSA9IGl0
LT5zZWNvbmQuc2Vjb25kOworICAgIFN0cmluZyB1cmwgPSBpdC0+dmFsdWUuZmlyc3Q7CisgICAg
dm9pZCogbm90aWZpY2F0aW9uRGF0YSA9IGl0LT52YWx1ZS5zZWNvbmQ7CiAKICAgICBtX3BlbmRp
bmdVUkxOb3RpZmljYXRpb25zLnJlbW92ZShpdCk7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKaW5kZXggZTJhNmUxZjA1ZjJiNDMz
YTUxZTk5YWFhMDg1NjNlNjU5YTM4Y2EzYS4uY2FkMzcyNjBlNGJiMTIwODU0OGVhZTI5NDYwNWY4
NDEwYjE5MDViMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5z
L1BsdWdpblZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9Q
bHVnaW5WaWV3LmNwcApAQCAtMTcwLDkgKzE3MCw5IEBAIHN0YXRpYyBTdHJpbmcgYnVpbGRIVFRQ
SGVhZGVycyhjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgbG9uZyBsb25nJiBleHBl
CiAgICAgCiAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcmVzcG9uc2Uu
aHR0cEhlYWRlckZpZWxkcygpLmVuZCgpOwogICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSByZXNwb25zZS5odHRwSGVhZGVyRmllbGRzKCkuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5maXJzdC5jaGFy
YWN0ZXJzKCksIGl0LT5maXJzdC5sZW5ndGgoKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKGl0LT5rZXkuY2hhcmFjdGVycygpLCBpdC0+a2V5Lmxlbmd0aCgpKTsKICAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQoc2VwYXJhdG9yLmNoYXJhY3RlcnMoKSwgc2VwYXJhdG9yLmxlbmd0
aCgpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPnNlY29uZC5jaGFyYWN0ZXJz
KCksIGl0LT5zZWNvbmQubGVuZ3RoKCkpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChp
dC0+dmFsdWUuY2hhcmFjdGVycygpLCBpdC0+dmFsdWUubGVuZ3RoKCkpOwogICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKICAgICB9CiAgICAgCkBAIC0yODQsNyArMjg0LDcgQEAg
UGx1Z2luVmlldzo6flBsdWdpblZpZXcoKQogCiAgICAgLy8gQ2FuY2VsIGFsbCBwZW5kaW5nIGZy
YW1lIGxvYWRzLgogICAgIGZvciAoRnJhbWVMb2FkTWFwOjppdGVyYXRvciBpdCA9IG1fcGVuZGlu
Z0ZyYW1lTG9hZHMuYmVnaW4oKSwgZW5kID0gbV9wZW5kaW5nRnJhbWVMb2Fkcy5lbmQoKTsgaXQg
IT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+Zmlyc3QtPnNldExvYWRMaXN0ZW5lcigwKTsKKyAg
ICAgICAgaXQtPmtleS0+c2V0TG9hZExpc3RlbmVyKDApOwogCiAgICAgaWYgKG1fcGx1Z2luKSB7
CiAgICAgICAgIG1faXNCZWluZ0Rlc3Ryb3llZCA9IHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXIuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcAppbmRleCBjZTU0
OGIwMTYwZTEyZDQxMGUyOTE5ZDk5ZjgzNWFkOTc5YTJiNmY2Li44ZTcwNDMxNWIzMDlkY2Y1M2Nh
ZDU3NzMwYzAxOTc5NGZlODEwMWRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdy
YXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAKQEAgLTUzLDcgKzUzLDcgQEAgQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyKiBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmxheWVyQnlJ
RChXZWJLaXQ6OldlYkxheWVySUQKICAgICBIYXNoTWFwPFdlYkxheWVySUQsIENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcio+OjppdGVyYXRvciBpdCA9IHRhYmxlLmZpbmQoaWQpOwogICAgIGlmIChp
dCA9PSB0YWJsZS5lbmQoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGl0LT5zZWNv
bmQ7CisgICAgcmV0dXJuIGl0LT52YWx1ZTsKIH0KIAogc3RhdGljIFdlYkxheWVySUQgdG9XZWJM
YXllcklEKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0
b3IuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3BwCmluZGV4IDI3MmRmMDljNzg0ZGFhYzZiNDdl
YzlmYmI3MGU3NTJmYmY0YWZlOTQuLmJhNWI0NjkxMWFjOGRlN2NlZjk1MGFhZjA4ZDY1YzFlYTM4
NzBmMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29y
ZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29y
ZGluYXRvci5jcHAKQEAgLTQ3MCw3ICs0NzAsNyBAQCBpbnQ2NF90IExheWVyVHJlZUNvb3JkaW5h
dG9yOjphZG9wdEltYWdlQmFja2luZ1N0b3JlKEltYWdlKiBpbWFnZSkKICAgICBIYXNoTWFwPGlu
dDY0X3QsIGludD46Oml0ZXJhdG9yIGl0ID0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNv
dW50cy5maW5kKGtleSk7CiAKICAgICBpZiAoaXQgIT0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFn
ZVJlZkNvdW50cy5lbmQoKSkgewotICAgICAgICArKyhpdC0+c2Vjb25kKTsKKyAgICAgICAgKyso
aXQtPnZhbHVlKTsKICAgICAgICAgcmV0dXJuIGtleTsKICAgICB9CiAKQEAgLTQ5NSw5ICs0OTUs
OSBAQCB2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpyZWxlYXNlSW1hZ2VCYWNraW5nU3RvcmUo
aW50NjRfdCBrZXkpCiAgICAgaWYgKGl0ID09IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZD
b3VudHMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGl0LT5zZWNvbmQtLTsKKyAgICBp
dC0+dmFsdWUtLTsKIAotICAgIGlmIChpdC0+c2Vjb25kKQorICAgIGlmIChpdC0+dmFsdWUpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMu
cmVtb3ZlKGl0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJCYWNrRm9yd2FyZExpc3RQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViQmFja0ZvcndhcmRMaXN0UHJveHkuY3BwCmluZGV4IDRjYTRlNWZkYjcyY2Zj
ZWFjNjk1NDVkZDE3ZDlmN2EyY2M4NDY4MzguLmJlODJhMTk3YTczNmQ2MjMyYTU0MzdkYTljMjkw
MmViMDVjYTNhMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJCYWNrRm9yd2FyZExpc3RQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFByb3h5LmNwcApAQCAtMTMwLDkgKzEzMCw5
IEBAIHZvaWQgV2ViQmFja0ZvcndhcmRMaXN0UHJveHk6OnJlbW92ZUl0ZW0odWludDY0X3QgaXRl
bUlEKQogICAgIGlmIChpdCA9PSBpZFRvSGlzdG9yeUl0ZW1NYXAoKS5lbmQoKSkKICAgICAgICAg
cmV0dXJuOwogICAgICAgICAKLSAgICBXZWJDb3JlOjpwYWdlQ2FjaGUoKS0+cmVtb3ZlKGl0LT5z
ZWNvbmQuZ2V0KCkpOworICAgIFdlYkNvcmU6OnBhZ2VDYWNoZSgpLT5yZW1vdmUoaXQtPnZhbHVl
LmdldCgpKTsKIAotICAgIGhpc3RvcnlJdGVtVG9JRE1hcCgpLnJlbW92ZShpdC0+c2Vjb25kKTsK
KyAgICBoaXN0b3J5SXRlbVRvSURNYXAoKS5yZW1vdmUoaXQtPnZhbHVlKTsKICAgICBpZFRvSGlz
dG9yeUl0ZW1NYXAoKS5yZW1vdmUoaXQpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0gYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KaW5kZXggYzJmMDE2NTM3NTk1M2I1
M2NjM2NkMWI5ZWI0MzFkYjVlY2ViOTNhZC4uMjIyNzNjMWY2NDYyMWQ5ZmYwMjgwZTc1Y2U2MTM1
YmE1ZDI1YWI3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L21hYy9XZWJQYWdlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9tYWMvV2ViUGFnZU1hYy5tbQpAQCAtMTIxLDcgKzEyMSw3IEBAIHN0YXRpYyBTdHJpbmcgY29t
bWFuZE5hbWVGb3JTZWxlY3Rvck5hbWUoY29uc3QgU3RyaW5nJiBzZWxlY3Rvck5hbWUpCiAgICAg
c3RhdGljIGNvbnN0IFNlbGVjdG9yTmFtZU1hcCogZXhjZXB0aW9uTWFwID0gY3JlYXRlU2VsZWN0
b3JFeGNlcHRpb25NYXAoKTsKICAgICBTZWxlY3Rvck5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gZXhjZXB0aW9uTWFwLT5maW5kKHNlbGVjdG9yTmFtZSk7CiAgICAgaWYgKGl0ICE9IGV4Y2Vw
dGlvbk1hcC0+ZW5kKCkpCi0gICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgICAgICByZXR1
cm4gaXQtPnZhbHVlOwogCiAgICAgLy8gUmVtb3ZlIHRoZSB0cmFpbGluZyBjb2xvbi4KICAgICAv
LyBObyBuZWVkIHRvIGNhcGl0YWxpemUgdGhlIGNvbW1hbmQgbmFtZSBzaW5jZSBFZGl0b3IgY29t
bWFuZCBuYW1lcyBhcmUgbm90IGNhc2Ugc2Vuc2l0aXZlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUHJvY2Vzcy5jcHAKaW5kZXggN2MwMzZkNDIxNjMwODU5ZWE2NjAxMWI4ZmYxNDQ5Nzdi
NTEzNjc5MS4uNTI3N2RkMTRjNDdhNmQ0MDJlNGNjNjI0YTA1MzI0M2Y0OGYzZWQ4OSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCkBAIC0zNDYsNyArMzQ2LDcgQEAg
dm9pZCBXZWJQcm9jZXNzOjp2aXNpdGVkTGlua1N0YXRlQ2hhbmdlZChjb25zdCBWZWN0b3I8V2Vi
Q29yZTo6TGlua0hhc2g+JiBsaW5rSGEKICAgICAgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRy
PFdlYlBhZ2VHcm91cFByb3h5PiA+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGFnZUdyb3VwTWFw
LmJlZ2luKCk7CiAgICAgICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxXZWJQYWdlR3JvdXBQ
cm94eT4gPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wYWdlR3JvdXBNYXAuZW5kKCk7CiAgICAg
ICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBQYWdlOjp2aXNpdGVkU3Rh
dGVDaGFuZ2VkKFBhZ2VHcm91cDo6cGFnZUdyb3VwKGl0LT5zZWNvbmQtPmlkZW50aWZpZXIoKSks
IGxpbmtIYXNoZXNbaV0pOworICAgICAgICAgICAgUGFnZTo6dmlzaXRlZFN0YXRlQ2hhbmdlZChQ
YWdlR3JvdXA6OnBhZ2VHcm91cChpdC0+dmFsdWUtPmlkZW50aWZpZXIoKSksIGxpbmtIYXNoZXNb
aV0pOwogICAgIH0KIAogICAgIHBhZ2VDYWNoZSgpLT5tYXJrUGFnZXNGb3JWaXN0ZWRMaW5rU3R5
bGVSZWNhbGMoKTsKQEAgLTM1OCw3ICszNTgsNyBAQCB2b2lkIFdlYlByb2Nlc3M6OmFsbFZpc2l0
ZWRMaW5rU3RhdGVDaGFuZ2VkKCkKICAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8V2ViUGFn
ZUdyb3VwUHJveHk+ID46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wYWdlR3JvdXBNYXAuYmVnaW4o
KTsKICAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8V2ViUGFnZUdyb3VwUHJveHk+ID46OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGFnZUdyb3VwTWFwLmVuZCgpOwogICAgIGZvciAoOyBpdCAh
PSBlbmQ7ICsraXQpCi0gICAgICAgIFBhZ2U6OmFsbFZpc2l0ZWRTdGF0ZUNoYW5nZWQoUGFnZUdy
b3VwOjpwYWdlR3JvdXAoaXQtPnNlY29uZC0+aWRlbnRpZmllcigpKSk7CisgICAgICAgIFBhZ2U6
OmFsbFZpc2l0ZWRTdGF0ZUNoYW5nZWQoUGFnZUdyb3VwOjpwYWdlR3JvdXAoaXQtPnZhbHVlLT5p
ZGVudGlmaWVyKCkpKTsKIAogICAgIHBhZ2VDYWNoZSgpLT5tYXJrUGFnZXNGb3JWaXN0ZWRMaW5r
U3R5bGVSZWNhbGMoKTsKIH0KQEAgLTUzNCw3ICs1MzQsNyBAQCBXZWJQYWdlKiBXZWJQcm9jZXNz
Ojpmb2N1c2VkV2ViUGFnZSgpIGNvbnN0CiB7ICAgIAogICAgIEhhc2hNYXA8dWludDY0X3QsIFJl
ZlB0cjxXZWJQYWdlPiA+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BhZ2VNYXAuZW5kKCk7CiAg
ICAgZm9yIChIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8V2ViUGFnZT4gPjo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtX3BhZ2VNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFdl
YlBhZ2UqIHBhZ2UgPSAoKml0KS5zZWNvbmQuZ2V0KCk7CisgICAgICAgIFdlYlBhZ2UqIHBhZ2Ug
PSAoKml0KS52YWx1ZS5nZXQoKTsKICAgICAgICAgaWYgKHBhZ2UtPndpbmRvd0FuZFdlYlBhZ2VB
cmVGb2N1c2VkKCkpCiAgICAgICAgICAgICByZXR1cm4gcGFnZTsKICAgICB9CkBAIC01NTIsMTQg
KzU1MiwxNCBAQCB2b2lkIFdlYlByb2Nlc3M6OmNyZWF0ZVdlYlBhZ2UodWludDY0X3QgcGFnZUlE
LCBjb25zdCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzJgogICAgIC8vIGxpbmspIHRoZSBXZWJQ
YWdlIGdldHMgY3JlYXRlZCBib3RoIGluIHRoZSBzeW5jaHJvbm91cyBoYW5kbGVyIGFuZCB0aHJv
dWdoIHRoZSBub3JtYWwgd2F5LiAKICAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8V2ViUGFn
ZT4gPjo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fcGFnZU1hcC5hZGQocGFnZUlELCAwKTsKICAgICBp
ZiAocmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgQVNTRVJUKCFyZXN1bHQuaXRlcmF0b3It
PnNlY29uZCk7Ci0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gV2ViUGFnZTo6Y3Jl
YXRlKHBhZ2VJRCwgcGFyYW1ldGVycyk7CisgICAgICAgIEFTU0VSVCghcmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZSk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBXZWJQYWdlOjpjcmVh
dGUocGFnZUlELCBwYXJhbWV0ZXJzKTsKIAogICAgICAgICAvLyBCYWxhbmNlZCBieSBhbiBlbmFi
bGVUZXJtaW5hdGlvbiBpbiByZW1vdmVXZWJQYWdlLgogICAgICAgICBkaXNhYmxlVGVybWluYXRp
b24oKTsKICAgICB9CiAKLSAgICBBU1NFUlQocmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOworICAg
IEFTU0VSVChyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzOjpy
ZW1vdmVXZWJQYWdlKHVpbnQ2NF90IHBhZ2VJRCkKQEAgLTc5NCwxMSArNzk0LDExIEBAIFdlYlBh
Z2VHcm91cFByb3h5KiBXZWJQcm9jZXNzOjp3ZWJQYWdlR3JvdXAoY29uc3QgV2ViUGFnZUdyb3Vw
RGF0YSYgcGFnZUdyb3VwRGF0CiB7CiAgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPFdlYlBh
Z2VHcm91cFByb3h5PiA+OjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9wYWdlR3JvdXBNYXAuYWRkKHBh
Z2VHcm91cERhdGEucGFnZUdyb3VwSUQsIDApOwogICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkg
ewotICAgICAgICBBU1NFUlQoIXJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKLSAgICAgICAgcmVz
dWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBXZWJQYWdlR3JvdXBQcm94eTo6Y3JlYXRlKHBhZ2VHcm91
cERhdGEpOworICAgICAgICBBU1NFUlQoIXJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOworICAgICAg
ICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gV2ViUGFnZUdyb3VwUHJveHk6OmNyZWF0ZShwYWdl
R3JvdXBEYXRhKTsKICAgICB9CiAKLSAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQu
Z2V0KCk7CisgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7CiB9CiAKICNp
ZiBFTkFCTEUoV0VCX0lOVEVOVFMpCkBAIC05MjQsNyArOTI0LDcgQEAgc3RhdGljIHZvaWQgZnJv
bUNvdW50ZWRTZXRUb0hhc2hNYXAoVHlwZUNvdW50U2V0KiBjb3VudGVkU2V0LCBIYXNoTWFwPFN0
cmluZywgdWkKIHsKICAgICBUeXBlQ291bnRTZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGNvdW50
ZWRTZXQtPmVuZCgpOwogICAgIGZvciAoVHlwZUNvdW50U2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9
IGNvdW50ZWRTZXQtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgbWFwLnNldChp
dC0+Zmlyc3QsIGl0LT5zZWNvbmQpOworICAgICAgICBtYXAuc2V0KGl0LT5rZXksIGl0LT52YWx1
ZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGdldFdlYkNvcmVNZW1vcnlDYWNoZVN0YXRpc3RpY3MoVmVj
dG9yPEhhc2hNYXA8U3RyaW5nLCB1aW50NjRfdD4gPiYgcmVzdWx0KQpAQCAtMTA5Nyw3ICsxMDk3
LDcgQEAgdm9pZCBXZWJQcm9jZXNzOjpzZXRUZXh0Q2hlY2tlclN0YXRlKGNvbnN0IFRleHRDaGVj
a2VyU3RhdGUmIHRleHRDaGVja2VyU3RhdGUpCiAKICAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQ
dHI8V2ViUGFnZT4gPjo6aXRlcmF0b3IgZW5kID0gbV9wYWdlTWFwLmVuZCgpOwogICAgIGZvciAo
SGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPFdlYlBhZ2U+ID46Oml0ZXJhdG9yIGl0ID0gbV9wYWdl
TWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBXZWJQYWdlKiBwYWdlID0g
KCppdCkuc2Vjb25kLmdldCgpOworICAgICAgICBXZWJQYWdlKiBwYWdlID0gKCppdCkudmFsdWUu
Z2V0KCk7CiAgICAgICAgIGlmIChjb250aW51b3VzU3BlbGxDaGVja2luZ1R1cm5lZE9mZikKICAg
ICAgICAgICAgIHBhZ2UtPnVubWFya0FsbE1pc3NwZWxsaW5ncygpOwogICAgICAgICBpZiAoZ3Jh
bW1hckNoZWNraW5nVHVybmVkT2ZmKQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9v
bHMvQ2hhbmdlTG9nCmluZGV4IGU0NzYyOGIyZjk4NWRiYWVjNjEzNDc0NTUxOTYxNDVjZTE3OTcz
MGMuLjk0OTNjMWEwYzYwOTViMDIzMDJhZDRmNGJmNGJlMGU0ZjhiY2U5MGEgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NSBAQAor
MjAxMi0xMC0wNSAgQ2FpbyBNYXJjZWxvIGRlIE9saXZlaXJhIEZpbGhvICA8Y2Fpby5vbGl2ZWly
YUBvcGVuYm9zc2Eub3JnPgorCisgICAgICAgIFJlbmFtZSBmaXJzdC9zZWNvbmQgdG8ga2V5L3Zh
bHVlIGluIEhhc2hNYXAgaXRlcmF0b3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD04Mjc4NAorCisgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVs
LgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTW9ja1dlYlNwZWVjaElucHV0
Q29udHJvbGxlci5jcHA6CisgICAgICAgIChNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyOjph
ZGRNb2NrUmVjb2duaXRpb25SZXN1bHQpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL05vdGlmaWNhdGlvblByZXNlbnRlci5jcHA6CisgICAgICAgIChOb3RpZmljYXRpb25QcmVz
ZW50ZXI6OnNpbXVsYXRlQ2xpY2spOgorICAgICAgICAoTm90aWZpY2F0aW9uUHJlc2VudGVyOjpz
aG93KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL0NwcEJv
dW5kQ2xhc3MuY3BwOgorICAgICAgICAoQ3BwQm91bmRDbGFzczo6fkNwcEJvdW5kQ2xhc3MpOgor
ICAgICAgICAoQ3BwQm91bmRDbGFzczo6aW52b2tlKToKKyAgICAgICAgKENwcEJvdW5kQ2xhc3M6
OmdldFByb3BlcnR5KToKKyAgICAgICAgKENwcEJvdW5kQ2xhc3M6OnNldFByb3BlcnR5KToKKyAg
ICAgICAgKENwcEJvdW5kQ2xhc3M6OmJpbmRDYWxsYmFjayk6CisgICAgICAgIChDcHBCb3VuZENs
YXNzOjpiaW5kUHJvcGVydHkpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dl
YlByZWZlcmVuY2VzLmNwcDoKKyAgICAgICAgKGFwcGx5Rm9udE1hcCk6CisgICAgICAgICogRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuY3BwOgorICAgICAgICAoV2ViVmlld0hv
c3Q6OnByaW50UmVzb3VyY2VEZXNjcmlwdGlvbik6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUv
bWFjL1Rlc3RSdW5uZXJNYWMubW06CisgICAgICAgICh3b3JsZElERm9yV29ybGQpOgorICAgICAg
ICAoVGVzdFJ1bm5lcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQpOgorICAgICAgICAq
IER1bXBSZW5kZXJUcmVlL3dpbi9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlcldpbi5jcHA6CisgICAg
ICAgIChBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6fkFjY2Vzc2liaWxpdHlDb250cm9sbGVyKToK
KyAgICAgICAgKEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjp3aW5Ob3RpZmljYXRpb25SZWNlaXZl
ZCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL1Jlc291cmNlTG9hZERlbGVnYXRlLmNw
cDoKKyAgICAgICAgKFJlc291cmNlTG9hZERlbGVnYXRlOjpkZXNjcmlwdGlvblN1aXRhYmxlRm9y
VGVzdFJlc3VsdCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL1Rlc3RSdW5uZXJXaW4u
Y3BwOgorICAgICAgICAod29ybGRJREZvcldvcmxkKToKKyAgICAgICAgKFRlc3RSdW5uZXI6OmV2
YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdDIvRE9NV2luZG93RXh0ZW5zaW9uQmFzaWNfQnVuZGxlLmNwcDoKKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OkRPTVdpbmRvd0V4dGVuc2lvbkJhc2ljOjp3aWxsRGVzdHJveVBhZ2Up
OgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9ET01XaW5kb3dFeHRlbnNp
b25Ob0NhY2hlX0J1bmRsZS5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpET01XaW5kb3dF
eHRlbnNpb25Ob0NhY2hlOjp3aWxsRGVzdHJveVBhZ2UpOgorICAgICAgICAqIFdlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHA6CisgICAgICAgIChXVFI6OlRlc3RS
dW5uZXI6OndvcmxkSURGb3JXb3JsZCk6CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmV2YWx1
YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKToKKwogMjAxMi0xMC0wNSAgWmFuIERvYmVyc2VrICA8
emFuZG9iZXJzZWtAZ21haWwuY29tPgogCiAgICAgICAgIFtHdGtdIGZhc3QveHNsL3hzbHQtbWlz
c2luZy1uYW1lc3BhY2UtaW4teHNsdC54bWwgaXMgZmFpbGluZyBvbiB0aGUgNjQtYml0IERlYnVn
IGJ1aWxkZXIKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL01vY2tX
ZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlci5jcHAKaW5kZXggNzE2MjIyZjlhY2NmZThm
ZmJlMzU5OTc4NTM4Mzc2NDcwNmM2NGUxZS4uMTNjOGZmMWVjNGMxY2RlNTUwNzY2OThkZmNmZTVl
ODcxMjZhODJlYiAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTW9j
a1dlYlNwZWVjaElucHV0Q29udHJvbGxlci5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlci5jcHAKQEAgLTUyLDcgKzUyLDcg
QEAgdm9pZCBNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyOjphZGRNb2NrUmVjb2duaXRpb25S
ZXN1bHQoY29uc3QgV2ViU3RyaW5nJiByZXMKICAgICAgICAgU3RyaW5nIGxhbmdTdHJpbmcgPSBT
dHJpbmc6OmZyb21VVEY4KGxhbmd1YWdlLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICBpZiAoIW1f
cmVjb2duaXRpb25SZXN1bHRzLmNvbnRhaW5zKGxhbmdTdHJpbmcpKQogICAgICAgICAgICAgbV9y
ZWNvZ25pdGlvblJlc3VsdHMuc2V0KGxhbmdTdHJpbmcsIFZlY3RvcjxXZWJTcGVlY2hJbnB1dFJl
c3VsdD4oKSk7Ci0gICAgICAgIG1fcmVjb2duaXRpb25SZXN1bHRzLmZpbmQobGFuZ1N0cmluZykt
PnNlY29uZC5hcHBlbmQocmVzKTsKKyAgICAgICAgbV9yZWNvZ25pdGlvblJlc3VsdHMuZmluZChs
YW5nU3RyaW5nKS0+dmFsdWUuYXBwZW5kKHJlcyk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9U
b29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9Ob3RpZmljYXRpb25QcmVzZW50ZXIuY3BwIGIv
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTm90aWZpY2F0aW9uUHJlc2VudGVyLmNwcApp
bmRleCAwYzU0MDBmNWU5ZThmNzE3MGVjZjU5OWE4MWJkNDI2ZmJkNzcyOTFkLi5hMjE1ODhmNzQ0
ZTVjM2Y1YWI3MGRiZGIwM2MyNzVjNTA3MDhmMDNhIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9Ob3RpZmljYXRpb25QcmVzZW50ZXIuY3BwCisrKyBiL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL05vdGlmaWNhdGlvblByZXNlbnRlci5jcHAKQEAgLTc1LDcg
Kzc1LDcgQEAgYm9vbCBOb3RpZmljYXRpb25QcmVzZW50ZXI6OnNpbXVsYXRlQ2xpY2soY29uc3Qg
V2ViU3RyaW5nJiB0aXRsZSkKICAgICBpZiAobV9hY3RpdmVOb3RpZmljYXRpb25zLmZpbmQoaWQp
ID09IG1fYWN0aXZlTm90aWZpY2F0aW9ucy5lbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIAotICAgIGNvbnN0IFdlYk5vdGlmaWNhdGlvbiYgbm90aWZpY2F0aW9uID0gbV9hY3RpdmVO
b3RpZmljYXRpb25zLmZpbmQoaWQpLT5zZWNvbmQ7CisgICAgY29uc3QgV2ViTm90aWZpY2F0aW9u
JiBub3RpZmljYXRpb24gPSBtX2FjdGl2ZU5vdGlmaWNhdGlvbnMuZmluZChpZCktPnZhbHVlOwog
ICAgIFdlYk5vdGlmaWNhdGlvbiBldmVudFRhcmdldChub3RpZmljYXRpb24pOwogICAgIGV2ZW50
VGFyZ2V0LmRpc3BhdGNoQ2xpY2tFdmVudCgpOwogICAgIHJldHVybiB0cnVlOwpAQCAtODksNyAr
ODksNyBAQCBib29sIE5vdGlmaWNhdGlvblByZXNlbnRlcjo6c2hvdyhjb25zdCBXZWJOb3RpZmlj
YXRpb24mIG5vdGlmaWNhdGlvbikKICAgICAgICAgV1RGOjpTdHJpbmcgcmVwbGFjZUlkKG5vdGlm
aWNhdGlvbi5yZXBsYWNlSWQoKS5kYXRhKCksIG5vdGlmaWNhdGlvbi5yZXBsYWNlSWQoKS5sZW5n
dGgoKSk7CiAgICAgICAgIGlmIChtX3JlcGxhY2VtZW50cy5maW5kKHJlcGxhY2VJZCkgIT0gbV9y
ZXBsYWNlbWVudHMuZW5kKCkpCiAgICAgICAgICAgICBwcmludGYoIlJFUExBQ0lORyBOT1RJRklD
QVRJT04gJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgbV9yZXBsYWNlbWVudHMuZmluZChyZXBs
YWNlSWQpLT5zZWNvbmQudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgICAgbV9yZXBs
YWNlbWVudHMuZmluZChyZXBsYWNlSWQpLT52YWx1ZS51dGY4KCkuZGF0YSgpKTsKIAogICAgICAg
ICBtX3JlcGxhY2VtZW50cy5zZXQocmVwbGFjZUlkLCBXVEY6OlN0cmluZyhpZGVudGlmaWVyLmRh
dGEoKSwgaWRlbnRpZmllci5sZW5ndGgoKSkpOwogICAgIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvQ3BwQm91bmRDbGFzcy5jcHAgYi9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL0NwcEJvdW5kQ2xhc3MuY3BwCmlu
ZGV4IDliNGEzYjY0NjQ1ZDA1N2I0MTcyZTFjN2RmYTA3YzdhNjJlNzdjZjguLjFiMjlkMmIwZjU1
ZDAxZjczODcxNDU3ODc3ZjlkYmRmMDZmMWI0OTEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvQ3BwQm91bmRDbGFzcy5jcHAKKysrIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9DcHBCb3VuZENsYXNzLmNwcApAQCAt
MjAzLDEwICsyMDMsMTAgQEAgYm9vbCBDcHBOUE9iamVjdDo6c2V0UHJvcGVydHkoTlBPYmplY3Qq
IG5wT2JqLCBOUElkZW50aWZpZXIgaWRlbnQsIGNvbnN0IE5QVmFyaWEKIENwcEJvdW5kQ2xhc3M6
On5DcHBCb3VuZENsYXNzKCkKIHsKICAgICBmb3IgKE1ldGhvZExpc3Q6Oml0ZXJhdG9yIGkgPSBt
X21ldGhvZHMuYmVnaW4oKTsgaSAhPSBtX21ldGhvZHMuZW5kKCk7ICsraSkKLSAgICAgICAgZGVs
ZXRlIGktPnNlY29uZDsKKyAgICAgICAgZGVsZXRlIGktPnZhbHVlOwogCiAgICAgZm9yIChQcm9w
ZXJ0eUxpc3Q6Oml0ZXJhdG9yIGkgPSBtX3Byb3BlcnRpZXMuYmVnaW4oKTsgaSAhPSBtX3Byb3Bl
cnRpZXMuZW5kKCk7ICsraSkKLSAgICAgICAgZGVsZXRlIGktPnNlY29uZDsKKyAgICAgICAgZGVs
ZXRlIGktPnZhbHVlOwogCiAgICAgLy8gVW5yZWdpc3RlciBvdXJzZWx2ZXMgaWYgd2Ugd2VyZSBi
b3VuZCB0byBhIGZyYW1lLgogICAgIGlmIChtX2JvdW5kVG9GcmFtZSkKQEAgLTIzNyw3ICsyMzcs
NyBAQCBib29sIENwcEJvdW5kQ2xhc3M6Omludm9rZShOUElkZW50aWZpZXIgaWRlbnQsCiAgICAg
ICAgIH0KICAgICAgICAgY2FsbGJhY2sgPSBtX2ZhbGxiYWNrQ2FsbGJhY2suZ2V0KCk7CiAgICAg
fSBlbHNlCi0gICAgICAgIGNhbGxiYWNrID0gKCptZXRob2QpLnNlY29uZDsKKyAgICAgICAgY2Fs
bGJhY2sgPSAoKm1ldGhvZCkudmFsdWU7CiAKICAgICAvLyBCdWlsZCBhIENwcEFyZ3VtZW50TGlz
dCBhcmd1bWVudCB2ZWN0b3IgZnJvbSB0aGUgTlBWYXJpYW50cyBjb21pbmcgaW4uCiAgICAgQ3Bw
QXJndW1lbnRMaXN0IGNwcEFyZ3VtZW50cyhhcmd1bWVudENvdW50KTsKQEAgLTI2MCw3ICsyNjAs
NyBAQCBib29sIENwcEJvdW5kQ2xhc3M6OmdldFByb3BlcnR5KE5QSWRlbnRpZmllciBpZGVudCwg
TlBWYXJpYW50KiByZXN1bHQpIGNvbnN0CiAgICAgfQogCiAgICAgQ3BwVmFyaWFudCBjcHBWYWx1
ZTsKLSAgICBpZiAoIWNhbGxiYWNrLT5zZWNvbmQtPmdldFZhbHVlKCZjcHBWYWx1ZSkpCisgICAg
aWYgKCFjYWxsYmFjay0+dmFsdWUtPmdldFZhbHVlKCZjcHBWYWx1ZSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICBjcHBWYWx1ZS5jb3B5VG9OUFZhcmlhbnQocmVzdWx0KTsKICAgICByZXR1
cm4gdHJ1ZTsKQEAgLTI3NCw3ICsyNzQsNyBAQCBib29sIENwcEJvdW5kQ2xhc3M6OnNldFByb3Bl
cnR5KE5QSWRlbnRpZmllciBpZGVudCwgY29uc3QgTlBWYXJpYW50KiB2YWx1ZSkKIAogICAgIENw
cFZhcmlhbnQgY3BwVmFsdWU7CiAgICAgY3BwVmFsdWUuc2V0KCp2YWx1ZSk7Ci0gICAgcmV0dXJu
ICgqY2FsbGJhY2spLnNlY29uZC0+c2V0VmFsdWUoY3BwVmFsdWUpOworICAgIHJldHVybiAoKmNh
bGxiYWNrKS52YWx1ZS0+c2V0VmFsdWUoY3BwVmFsdWUpOwogfQogCiB2b2lkIENwcEJvdW5kQ2xh
c3M6OmJpbmRDYWxsYmFjayhjb25zdCBzdHJpbmcmIG5hbWUsIENhbGxiYWNrKiBjYWxsYmFjaykK
QEAgLTI4Miw3ICsyODIsNyBAQCB2b2lkIENwcEJvdW5kQ2xhc3M6OmJpbmRDYWxsYmFjayhjb25z
dCBzdHJpbmcmIG5hbWUsIENhbGxiYWNrKiBjYWxsYmFjaykKICAgICBOUElkZW50aWZpZXIgaWRl
bnQgPSBXZWJCaW5kaW5nczo6Z2V0U3RyaW5nSWRlbnRpZmllcihuYW1lLmNfc3RyKCkpOwogICAg
IE1ldGhvZExpc3Q6Oml0ZXJhdG9yIG9sZENhbGxiYWNrID0gbV9tZXRob2RzLmZpbmQoaWRlbnQp
OwogICAgIGlmIChvbGRDYWxsYmFjayAhPSBtX21ldGhvZHMuZW5kKCkpIHsKLSAgICAgICAgZGVs
ZXRlIG9sZENhbGxiYWNrLT5zZWNvbmQ7CisgICAgICAgIGRlbGV0ZSBvbGRDYWxsYmFjay0+dmFs
dWU7CiAgICAgICAgIGlmICghY2FsbGJhY2spIHsKICAgICAgICAgICAgIG1fbWV0aG9kcy5yZW1v
dmUob2xkQ2FsbGJhY2spOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzA5LDcgKzMwOSw3IEBA
IHZvaWQgQ3BwQm91bmRDbGFzczo6YmluZFByb3BlcnR5KGNvbnN0IHN0cmluZyYgbmFtZSwgUHJv
cGVydHlDYWxsYmFjayogY2FsbGJhY2spCiAgICAgTlBJZGVudGlmaWVyIGlkZW50ID0gV2ViQmlu
ZGluZ3M6OmdldFN0cmluZ0lkZW50aWZpZXIobmFtZS5jX3N0cigpKTsKICAgICBQcm9wZXJ0eUxp
c3Q6Oml0ZXJhdG9yIG9sZENhbGxiYWNrID0gbV9wcm9wZXJ0aWVzLmZpbmQoaWRlbnQpOwogICAg
IGlmIChvbGRDYWxsYmFjayAhPSBtX3Byb3BlcnRpZXMuZW5kKCkpIHsKLSAgICAgICAgZGVsZXRl
IG9sZENhbGxiYWNrLT5zZWNvbmQ7CisgICAgICAgIGRlbGV0ZSBvbGRDYWxsYmFjay0+dmFsdWU7
CiAgICAgICAgIGlmICghY2FsbGJhY2spIHsKICAgICAgICAgICAgIG1fcHJvcGVydGllcy5yZW1v
dmUob2xkQ2FsbGJhY2spOwogICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViUHJlZmVyZW5jZXMuY3BwIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vV2ViUHJlZmVyZW5jZXMuY3BwCmluZGV4IDVlZWJmNTk2ZDk3NjI0
ZDE5YjdmN2VkYzNlYWNhY2I0NmRiNzc1MTkuLjNiYzJjZGQ5ZjJhZTQxNzBjMzNhZDY0MTA2ZDRh
N2YyZDA5MDIxZjUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dl
YlByZWZlcmVuY2VzLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQ
cmVmZXJlbmNlcy5jcHAKQEAgLTE1Niw5ICsxNTYsOSBAQCB0eXBlZGVmIHZvaWQgKCpTZXRGb250
RmFtaWx5V3JhcHBlcikoV2ViU2V0dGluZ3MqLCBjb25zdCBXZWJTdHJpbmcmLCBVU2NyaXB0Q29k
ZQogc3RhdGljIHZvaWQgYXBwbHlGb250TWFwKFdlYlNldHRpbmdzKiBzZXR0aW5ncywgY29uc3Qg
V2ViUHJlZmVyZW5jZXM6OlNjcmlwdEZvbnRGYW1pbHlNYXAmIG1hcCwgU2V0Rm9udEZhbWlseVdy
YXBwZXIgc2V0dGVyKQogewogICAgIGZvciAoV2ViUHJlZmVyZW5jZXM6OlNjcmlwdEZvbnRGYW1p
bHlNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtYXAuYmVnaW4oKTsgaXRlciAhPSBtYXAuZW5k
KCk7ICsraXRlcikgewotICAgICAgICBjb25zdCBXZWJTdHJpbmcmIGZvbnQgPSBpdGVyLT5zZWNv
bmQ7CisgICAgICAgIGNvbnN0IFdlYlN0cmluZyYgZm9udCA9IGl0ZXItPnZhbHVlOwogICAgICAg
ICBpZiAoIWZvbnQuaXNOdWxsKCkgJiYgIWZvbnQuaXNFbXB0eSgpKQotICAgICAgICAgICAgKCpz
ZXR0ZXIpKHNldHRpbmdzLCBmb250LCBzdGF0aWNfY2FzdDxVU2NyaXB0Q29kZT4oaXRlci0+Zmly
c3QpKTsKKyAgICAgICAgICAgICgqc2V0dGVyKShzZXR0aW5ncywgZm9udCwgc3RhdGljX2Nhc3Q8
VVNjcmlwdENvZGU+KGl0ZXItPmtleSkpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuY3BwIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuY3BwCmluZGV4IGEwYzM5NWM5NmEzMGI4Yzg0MGJk
NTM0OTVmNjk4ZDUwZDMzNmRmMmEuLmM3YWI0NzVlN2ZlNzllZjE4ZDUyODgyZTM1NzI2YTQ1OTY1
NmQ3ZTkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdI
b3N0LmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5j
cHAKQEAgLTE3NzQsNyArMTc3NCw3IEBAIHZvaWQgV2ViVmlld0hvc3Q6OnByaW50RnJhbWVVc2Vy
R2VzdHVyZVN0YXR1cyhXZWJGcmFtZSogd2ViZnJhbWUsIGNvbnN0IGNoYXIqIG1zCiB2b2lkIFdl
YlZpZXdIb3N0OjpwcmludFJlc291cmNlRGVzY3JpcHRpb24odW5zaWduZWQgaWRlbnRpZmllcikK
IHsKICAgICBSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlSWRlbnRpZmllck1h
cC5maW5kKGlkZW50aWZpZXIpOwotICAgIHByaW50ZigiJXMiLCBpdCAhPSBtX3Jlc291cmNlSWRl
bnRpZmllck1hcC5lbmQoKSA/IGl0LT5zZWNvbmQuY19zdHIoKSA6ICI8dW5rbm93bj4iKTsKKyAg
ICBwcmludGYoIiVzIiwgaXQgIT0gbV9yZXNvdXJjZUlkZW50aWZpZXJNYXAuZW5kKCkgPyBpdC0+
dmFsdWUuY19zdHIoKSA6ICI8dW5rbm93bj4iKTsKIH0KIAogdm9pZCBXZWJWaWV3SG9zdDo6c2V0
UGVuZGluZ0V4dHJhRGF0YShQYXNzT3duUHRyPFRlc3RTaGVsbEV4dHJhRGF0YT4gZXh0cmFEYXRh
KQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW0g
Yi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvVGVzdFJ1bm5lck1hYy5tbQppbmRleCA4MWExNjY1
Zjg5OGM0ODg0NGFlY2U4NWYwMjQ5MDg2OTk3ODBmODllLi41OThmZDlmODM4YmY2YTI1N2U1Njk5
ZTY1ZWViNjAxMzM0MGNjMmY2IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMv
VGVzdFJ1bm5lck1hYy5tbQorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvVGVzdFJ1bm5l
ck1hYy5tbQpAQCAtOTA0LDggKzkwNCw4IEBAIHVuc2lnbmVkIHdvcmxkSURGb3JXb3JsZChXZWJT
Y3JpcHRXb3JsZCAqd29ybGQpCiB7CiAgICAgV29ybGRNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IHdvcmxkTWFwKCkuZW5kKCk7CiAgICAgZm9yIChXb3JsZE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSB3b3JsZE1hcCgpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoaXQt
PnNlY29uZCA9PSB3b3JsZCkKLSAgICAgICAgICAgIHJldHVybiBpdC0+Zmlyc3Q7CisgICAgICAg
IGlmIChpdC0+dmFsdWUgPT0gd29ybGQpCisgICAgICAgICAgICByZXR1cm4gaXQtPmtleTsKICAg
ICB9CiAKICAgICByZXR1cm4gMDsKQEAgLTkyNyw3ICs5MjcsNyBAQCB2b2lkIFRlc3RSdW5uZXI6
OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKHVuc2lnbmVkIHdvcmxkSUQsIEpTT2JqZWN0
UmVmIGdsbwogICAgIGlmICghd29ybGRJRCkKICAgICAgICAgd29ybGQgPSBbV2ViU2NyaXB0V29y
bGQgd29ybGRdOwogICAgIGVsc2UgewotICAgICAgICBSZXRhaW5QdHI8V2ViU2NyaXB0V29ybGQ+
JiB3b3JsZFNsb3QgPSB3b3JsZE1hcCgpLmFkZCh3b3JsZElELCAwKS5pdGVyYXRvci0+c2Vjb25k
OworICAgICAgICBSZXRhaW5QdHI8V2ViU2NyaXB0V29ybGQ+JiB3b3JsZFNsb3QgPSB3b3JsZE1h
cCgpLmFkZCh3b3JsZElELCAwKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgIGlmICghd29ybGRT
bG90KQogICAgICAgICAgICAgd29ybGRTbG90LmFkb3B0TlMoW1tXZWJTY3JpcHRXb3JsZCBhbGxv
Y10gaW5pdF0pOwogICAgICAgICB3b3JsZCA9IHdvcmxkU2xvdC5nZXQoKTsKZGlmZiAtLWdpdCBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlcldpbi5jcHAg
Yi9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJXaW4uY3Bw
CmluZGV4IDllNzZjOGRkYTMzMjdhMDdlOGU4N2UzMzZjOGFkNjlhOTQ0NDY4ODkuLjk5NWM1ZjEx
NWMyZWEzZDk4Yzg2NzIyZTRkZGYzOGQwYzNmNTUwYmMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL3dpbi9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlcldpbi5jcHAKKysrIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvd2luL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyV2luLmNwcApAQCAtNTgs
NyArNTgsNyBAQCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6fkFjY2Vzc2liaWxpdHlDb250cm9s
bGVyKCkKICAgICAgICAgVW5ob29rV2luRXZlbnQobV9ub3RpZmljYXRpb25zRXZlbnRIb29rKTsK
IAogICAgIGZvciAoSGFzaE1hcDxQbGF0Zm9ybVVJRWxlbWVudCwgSlNPYmplY3RSZWY+OjppdGVy
YXRvciBpdCA9IG1fbm90aWZpY2F0aW9uTGlzdGVuZXJzLmJlZ2luKCk7IGl0ICE9IG1fbm90aWZp
Y2F0aW9uTGlzdGVuZXJzLmVuZCgpOyArK2l0KQotICAgICAgICBKU1ZhbHVlVW5wcm90ZWN0KGZy
YW1lLT5nbG9iYWxDb250ZXh0KCksIGl0LT5zZWNvbmQpOworICAgICAgICBKU1ZhbHVlVW5wcm90
ZWN0KGZyYW1lLT5nbG9iYWxDb250ZXh0KCksIGl0LT52YWx1ZSk7CiB9CiAKIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmVsZW1lbnRBdFBvaW50KGludCB4
LCBpbnQgeSkKQEAgLTI5OSw3ICsyOTksNyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVy
OjpyZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lcigpCiB2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9s
bGVyOjp3aW5Ob3RpZmljYXRpb25SZWNlaXZlZChQbGF0Zm9ybVVJRWxlbWVudCBlbGVtZW50LCBj
b25zdCBzdHJpbmcmIGV2ZW50TmFtZSkKIHsKICAgICBmb3IgKEhhc2hNYXA8UGxhdGZvcm1VSUVs
ZW1lbnQsIEpTT2JqZWN0UmVmPjo6aXRlcmF0b3IgaXQgPSBtX25vdGlmaWNhdGlvbkxpc3RlbmVy
cy5iZWdpbigpOyBpdCAhPSBtX25vdGlmaWNhdGlvbkxpc3RlbmVycy5lbmQoKTsgKytpdCkgewot
ICAgICAgICBDT01QdHI8SVNlcnZpY2VQcm92aWRlcj4gdGhpc1NlcnZpY2VQcm92aWRlcihRdWVy
eSwgaXQtPmZpcnN0KTsKKyAgICAgICAgQ09NUHRyPElTZXJ2aWNlUHJvdmlkZXI+IHRoaXNTZXJ2
aWNlUHJvdmlkZXIoUXVlcnksIGl0LT5rZXkpOwogICAgICAgICBpZiAoIXRoaXNTZXJ2aWNlUHJv
dmlkZXIpCiAgICAgICAgICAgICBjb250aW51ZTsKIApAQCAtMzIyLDcgKzMyMiw3IEBAIHZvaWQg
QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6Ondpbk5vdGlmaWNhdGlvblJlY2VpdmVkKFBsYXRmb3Jt
VUlFbGVtZW50IGVsZW1lbnQsCiAKICAgICAgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGpz
Tm90aWZpY2F0aW9uKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhldmVudE5h
bWUuY19zdHIoKSkpOwogICAgICAgICBKU1ZhbHVlUmVmIGFyZ3VtZW50ID0gSlNWYWx1ZU1ha2VT
dHJpbmcoZnJhbWUtPmdsb2JhbENvbnRleHQoKSwganNOb3RpZmljYXRpb24uZ2V0KCkpOwotICAg
ICAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9uKGZyYW1lLT5nbG9iYWxDb250ZXh0KCksIGl0LT5z
ZWNvbmQsIE5VTEwsIDEsICZhcmd1bWVudCwgTlVMTCk7CisgICAgICAgIEpTT2JqZWN0Q2FsbEFz
RnVuY3Rpb24oZnJhbWUtPmdsb2JhbENvbnRleHQoKSwgaXQtPnZhbHVlLCAwLCAxLCAmYXJndW1l
bnQsIDApOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2lu
L1Jlc291cmNlTG9hZERlbGVnYXRlLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9SZXNv
dXJjZUxvYWREZWxlZ2F0ZS5jcHAKaW5kZXggOTBiOWFlMGZjYzNmNjE3ZjRmZjY3NTU2MmRhMjk2
ZWU1ZTJiYmMzMy4uNjg1OTc4MGYzOTJmMThlMzA2NjFiMDQ5MjdiNGNjY2JmM2M0NzFhMiAxMDA2
NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1Jlc291cmNlTG9hZERlbGVnYXRlLmNw
cAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vUmVzb3VyY2VMb2FkRGVsZWdhdGUuY3Bw
CkBAIC02Niw3ICs2Niw3IEBAIHdzdHJpbmcgUmVzb3VyY2VMb2FkRGVsZWdhdGU6OmRlc2NyaXB0
aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KHVuc2lnbmVkIGxvbmcgaWRlCiAgICAgaWYgKGl0ID09
IG1fdXJsTWFwLmVuZCgpKQogICAgICAgICByZXR1cm4gTCI8dW5rbm93bj4iOwogCi0gICAgcmV0
dXJuIHVybFN1aXRhYmxlRm9yVGVzdFJlc3VsdChpdC0+c2Vjb25kKTsKKyAgICByZXR1cm4gdXJs
U3VpdGFibGVGb3JUZXN0UmVzdWx0KGl0LT52YWx1ZSk7CiB9CiAKIHdzdHJpbmcgUmVzb3VyY2VM
b2FkRGVsZWdhdGU6OmRlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KElXZWJVUkxSZXF1
ZXN0KiByZXF1ZXN0KQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1Rlc3RS
dW5uZXJXaW4uY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1Rlc3RSdW5uZXJXaW4uY3Bw
CmluZGV4IDkzZTYzN2QwNjMwMzY5YjVlZDAyZDFlZWE3NmUzMDQ5NjRlNzlmOGIuLjVkNTlmMmIy
NzJmMDViOGViMWFhM2MwMzYxNWMxMzFkNThmYzg4MWIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL3dpbi9UZXN0UnVubmVyV2luLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJl
ZS93aW4vVGVzdFJ1bm5lcldpbi5jcHAKQEAgLTEyNDYsOCArMTI0Niw4IEBAIHVuc2lnbmVkIHdv
cmxkSURGb3JXb3JsZChJV2ViU2NyaXB0V29ybGQqIHdvcmxkKQogewogICAgIFdvcmxkTWFwOjpj
b25zdF9pdGVyYXRvciBlbmQgPSB3b3JsZE1hcCgpLmVuZCgpOwogICAgIGZvciAoV29ybGRNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gd29ybGRNYXAoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQgPT0gd29ybGQpCi0gICAgICAgICAgICByZXR1cm4g
aXQtPmZpcnN0OworICAgICAgICBpZiAoaXQtPnZhbHVlID09IHdvcmxkKQorICAgICAgICAgICAg
cmV0dXJuIGl0LT5rZXk7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CkBAIC0xMjcxLDcgKzEyNzEs
NyBAQCB2b2lkIFRlc3RSdW5uZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKHVuc2ln
bmVkIHdvcmxkSUQsIEpTT2JqZWN0UmVmIGdsbwogICAgICAgICBpZiAoRkFJTEVEKFdlYktpdENy
ZWF0ZUluc3RhbmNlKF9fdXVpZG9mKFdlYlNjcmlwdFdvcmxkKSwgMCwgX191dWlkb2Yod29ybGQp
LCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJndvcmxkKSkpKQogICAgICAgICAgICAgcmV0dXJu
OwogICAgIH0gZWxzZSB7Ci0gICAgICAgIENPTVB0cjxJV2ViU2NyaXB0V29ybGQ+JiB3b3JsZFNs
b3QgPSB3b3JsZE1hcCgpLmFkZCh3b3JsZElELCAwKS5pdGVyYXRvci0+c2Vjb25kOworICAgICAg
ICBDT01QdHI8SVdlYlNjcmlwdFdvcmxkPiYgd29ybGRTbG90ID0gd29ybGRNYXAoKS5hZGQod29y
bGRJRCwgMCkuaXRlcmF0b3ItPnZhbHVlOwogICAgICAgICBpZiAoIXdvcmxkU2xvdCAmJiBGQUlM
RUQoV2ViS2l0Q3JlYXRlSW5zdGFuY2UoX191dWlkb2YoV2ViU2NyaXB0V29ybGQpLCAwLCBfX3V1
aWRvZih3b3JsZFNsb3QpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJndvcmxkU2xvdCkpKSkK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgd29ybGQgPSB3b3JsZFNsb3Q7CmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvRE9NV2luZG93RXh0ZW5zaW9u
QmFzaWNfQnVuZGxlLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9ET01X
aW5kb3dFeHRlbnNpb25CYXNpY19CdW5kbGUuY3BwCmluZGV4IDk4YmZhYjM1YWY0NmNmNDljNjJi
Y2M5YjBhODU5NDU3ZjQ4Y2MxYzEuLjViMTI5NmY0N2QxOWQyOGI5ZGU3ZmNlOGQxMzFhYTQwNTQ3
NmJkZDEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9ET01X
aW5kb3dFeHRlbnNpb25CYXNpY19CdW5kbGUuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Mi9ET01XaW5kb3dFeHRlbnNpb25CYXNpY19CdW5kbGUuY3BwCkBAIC0xNzEs
OCArMTcxLDggQEAgdm9pZCBET01XaW5kb3dFeHRlbnNpb25CYXNpYzo6d2lsbERlc3Ryb3lQYWdl
KFdLQnVuZGxlUmVmLCBXS0J1bmRsZVBhZ2VSZWYpCiAgICAgSGFzaE1hcDxXS0J1bmRsZURPTVdp
bmRvd0V4dGVuc2lvblJlZiwgaW50Pjo6aXRlcmF0b3IgaXQgPSBtX2V4dGVuc2lvblRvUmVjb3Jk
TWFwLmJlZ2luKCk7CiAgICAgSGFzaE1hcDxXS0J1bmRsZURPTVdpbmRvd0V4dGVuc2lvblJlZiwg
aW50Pjo6aXRlcmF0b3IgZW5kID0gbV9leHRlbnNpb25Ub1JlY29yZE1hcC5lbmQoKTsKICAgICBm
b3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIHVwZGF0ZUV4dGVuc2lvblN0YXRlUmVj
b3JkKGl0LT5maXJzdCwgUmVtb3ZlZCk7Ci0gICAgICAgIFdLUmVsZWFzZShpdC0+Zmlyc3QpOwor
ICAgICAgICB1cGRhdGVFeHRlbnNpb25TdGF0ZVJlY29yZChpdC0+a2V5LCBSZW1vdmVkKTsKKyAg
ICAgICAgV0tSZWxlYXNlKGl0LT5rZXkpOwogICAgIH0KIAogICAgIG1fZXh0ZW5zaW9uVG9SZWNv
cmRNYXAuY2xlYXIoKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Mi9ET01XaW5kb3dFeHRlbnNpb25Ob0NhY2hlX0J1bmRsZS5jcHAgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdDIvRE9NV2luZG93RXh0ZW5zaW9uTm9DYWNoZV9CdW5kbGUuY3Bw
CmluZGV4IDhmNmNkN2IzNzM1YjVhZTI3OWQwYWRiNzcxODVjNWQyODA3MTFjYWUuLjQxMWUxMTVl
YTQ0ZmJlNDg3MGU3ZjFmMzFkOTA1ZTg1NzdmMDdlMjIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9ET01XaW5kb3dFeHRlbnNpb25Ob0NhY2hlX0J1bmRsZS5j
cHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL0RPTVdpbmRvd0V4dGVu
c2lvbk5vQ2FjaGVfQnVuZGxlLmNwcApAQCAtMTc4LDggKzE3OCw4IEBAIHZvaWQgRE9NV2luZG93
RXh0ZW5zaW9uTm9DYWNoZTo6d2lsbERlc3Ryb3lQYWdlKFdLQnVuZGxlUmVmLCBXS0J1bmRsZVBh
Z2VSZWYpCiAgICAgSGFzaE1hcDxXS0J1bmRsZURPTVdpbmRvd0V4dGVuc2lvblJlZiwgaW50Pjo6
aXRlcmF0b3IgaXQgPSBtX2V4dGVuc2lvblRvUmVjb3JkTWFwLmJlZ2luKCk7CiAgICAgSGFzaE1h
cDxXS0J1bmRsZURPTVdpbmRvd0V4dGVuc2lvblJlZiwgaW50Pjo6aXRlcmF0b3IgZW5kID0gbV9l
eHRlbnNpb25Ub1JlY29yZE1hcC5lbmQoKTsKICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7
Ci0gICAgICAgIHVwZGF0ZUV4dGVuc2lvblN0YXRlUmVjb3JkKGl0LT5maXJzdCwgUmVtb3ZlZCk7
Ci0gICAgICAgIFdLUmVsZWFzZShpdC0+Zmlyc3QpOworICAgICAgICB1cGRhdGVFeHRlbnNpb25T
dGF0ZVJlY29yZChpdC0+a2V5LCBSZW1vdmVkKTsKKyAgICAgICAgV0tSZWxlYXNlKGl0LT5rZXkp
OwogICAgIH0KIAogICAgIG1fZXh0ZW5zaW9uVG9SZWNvcmRNYXAuY2xlYXIoKTsKZGlmZiAtLWdp
dCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHAg
Yi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwCmlu
ZGV4IGRjMmYyZTI3ZDQ4ODg2ZjBmYTJlZGU5MmY3NDc5MDAyOWFiNDQ0ZjkuLjJiMGQ5NzE5MmQ3
ZDE4NTcwMTYwZDI1NzU0MTkxOWVjYzQzM2Q2YTcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHAKKysrIGIvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcApAQCAtNDg5LDggKzQ4OSw4
IEBAIHVuc2lnbmVkIFRlc3RSdW5uZXI6OndvcmxkSURGb3JXb3JsZChXS0J1bmRsZVNjcmlwdFdv
cmxkUmVmIHdvcmxkKQogewogICAgIFdvcmxkTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSB3b3Js
ZE1hcCgpLmVuZCgpOwogICAgIGZvciAoV29ybGRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gd29y
bGRNYXAoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5zZWNv
bmQgPT0gd29ybGQpCi0gICAgICAgICAgICByZXR1cm4gaXQtPmZpcnN0OworICAgICAgICBpZiAo
aXQtPnZhbHVlID09IHdvcmxkKQorICAgICAgICAgICAgcmV0dXJuIGl0LT5rZXk7CiAgICAgfQog
CiAgICAgcmV0dXJuIDA7CkBAIC01MDQsNyArNTA0LDcgQEAgdm9pZCBUZXN0UnVubmVyOjpldmFs
dWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZChKU0NvbnRleHRSZWYgY29udGV4dCwgdW5zaWduZWQg
d28KICAgICBpZiAoIXdvcmxkSUQpCiAgICAgICAgIHdvcmxkLmFkb3B0KFdLQnVuZGxlU2NyaXB0
V29ybGRDcmVhdGVXb3JsZCgpKTsKICAgICBlbHNlIHsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tC
dW5kbGVTY3JpcHRXb3JsZFJlZj4mIHdvcmxkU2xvdCA9IHdvcmxkTWFwKCkuYWRkKHdvcmxkSUQs
IDApLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgIFdLUmV0YWluUHRyPFdLQnVuZGxlU2NyaXB0
V29ybGRSZWY+JiB3b3JsZFNsb3QgPSB3b3JsZE1hcCgpLmFkZCh3b3JsZElELCAwKS5pdGVyYXRv
ci0+dmFsdWU7CiAgICAgICAgIGlmICghd29ybGRTbG90KQogICAgICAgICAgICAgd29ybGRTbG90
LmFkb3B0KFdLQnVuZGxlU2NyaXB0V29ybGRDcmVhdGVXb3JsZCgpKTsKICAgICAgICAgd29ybGQg
PSB3b3JsZFNsb3Q7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167488</attachid>
            <date>2012-10-07 14:09:31 -0700</date>
            <delta_ts>2012-10-07 16:11:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-82784-20121007140835.patch</filename>
            <type>text/plain</type>
            <size>696532</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMwNjA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
MGViZTM3MDBlZDM3NDBmMDkwZDdiMDNiZTE4YWZiMzQ1NDdkMTEzLi4xMGVkNzBjNDM3NTdmMTkx
OWRkNzE3NzZhYWMxMDk2Y2NkNzZjODUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMTggQEAKKzIwMTItMTAtMDcgIENhaW8gTWFyY2VsbyBkZSBPbGl2ZWlyYSBGaWxobyAg
PGNhaW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KKworICAgICAgICBSZW5hbWUgZmlyc3Qvc2Vj
b25kIHRvIGtleS92YWx1ZSBpbiBIYXNoTWFwIGl0ZXJhdG9ycworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI3ODQKKworICAgICAgICBSZXZpZXdlZCBi
eSBFcmljIFNlaWRlbC4KKworICAgICAgICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0Lmg6CisgICAg
ICAgIChKU0M6OkpTQ2FsbGJhY2tPYmplY3REYXRhOjpKU1ByaXZhdGVQcm9wZXJ0eU1hcDo6Z2V0
UHJpdmF0ZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNDYWxsYmFja09iamVjdERhdGE6OkpT
UHJpdmF0ZVByb3BlcnR5TWFwOjpzZXRQcml2YXRlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpK
U0NhbGxiYWNrT2JqZWN0RGF0YTo6SlNQcml2YXRlUHJvcGVydHlNYXA6OnZpc2l0Q2hpbGRyZW4p
OgorICAgICAgICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmg6CisgICAgICAgIChK
U0M6Ojo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBBUEkvSlNDbGFz
c1JlZi5jcHA6CisgICAgICAgIChPcGFxdWVKU0NsYXNzOjp+T3BhcXVlSlNDbGFzcyk6CisgICAg
ICAgIChPcGFxdWVKU0NsYXNzQ29udGV4dERhdGE6Ok9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YSk6
CisgICAgICAgIChPcGFxdWVKU0NsYXNzOjpjb250ZXh0RGF0YSk6CisgICAgICAgICogYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkdW1wKToKKyAgICAg
ICAgKEpTQzo6RXZhbENvZGVDYWNoZTo6dmlzaXRBZ2dyZWdhdGUpOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6Om5hbWVGb3JSZWdpc3Rlcik6CisgICAgICAgICogYnl0ZWNvZGUvSnVtcFRhYmxl
Lmg6CisgICAgICAgIChKU0M6OlN0cmluZ0p1bXBUYWJsZTo6b2Zmc2V0Rm9yVmFsdWUpOgorICAg
ICAgICAoSlNDOjpTdHJpbmdKdW1wVGFibGU6OmN0aUZvclZhbHVlKToKKyAgICAgICAgKiBieXRl
Y29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5jcHA6CisgICAgICAgIChKU0M6OkxhenlPcGVy
YW5kVmFsdWVQcm9maWxlUGFyc2VyOjpnZXRJZlByZXNlbnQpOgorICAgICAgICAqIGJ5dGVjb2Rl
L1NhbXBsaW5nVG9vbC5jcHA6CisgICAgICAgIChKU0M6OlNhbXBsaW5nVG9vbDo6ZHVtcCk6Cisg
ICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpT
Qzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmFkZFZhcik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2Vu
ZXJhdG9yOjphZGRHbG9iYWxWYXIpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6
YWRkQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6YWRkQ29uc3Rh
bnRWYWx1ZSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TG9hZCk6Cisg
ICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjphZGRTdHJpbmdDb25zdGFudCk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TGF6eU5ld0Z1bmN0aW9uKToKKyAgICAg
ICAgKiBieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcDoKKyAgICAgICAgKEpTQzo6UHJvcGVy
dHlMaXN0Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKiBkZWJ1Z2dlci9EZWJ1Z2dlci5j
cHA6CisgICAgICAgICogZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkFyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2U6OnJ1bik6Cisg
ICAgICAgIChKU0M6OkRGRzo6QXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZTo6b2JzZXJ2ZUJh
ZEFyZ3VtZW50c1VzZSk6CisgICAgICAgIChKU0M6OkRGRzo6QXJndW1lbnRzU2ltcGxpZmljYXRp
b25QaGFzZTo6b2JzZXJ2ZVByb3BlckFyZ3VtZW50c1VzZSk6CisgICAgICAgIChKU0M6OkRGRzo6
QXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZTo6aXNPS1RvT3B0aW1pemUpOgorICAgICAgICAo
SlNDOjpERkc6OkFyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2U6OnJlbW92ZUFyZ3VtZW50c1Jl
ZmVyZW5jaW5nUGhhbnRvbUNoaWxkKToKKyAgICAgICAgKiBkZmcvREZHQXNzZW1ibHlIZWxwZXJz
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBc3NlbWJseUhlbHBlcnM6OmRlY29kZWRDb2RlTWFw
Rm9yKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVDYWNoZS5oOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlQ2FjaGU6On5CeXRlQ29kZUNhY2hlKToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZUNhY2hlOjpnZXQpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmNlbGxDb25zdGFudCk6CisgICAg
ICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZVN0
YWNrRW50cnkpOgorICAgICAgICAqIGRmZy9ERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2Uu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZTo6cnVu
KToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2U6Om5vdGlj
ZVN0cnVjdHVyZUNoZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVDaGVja0hvaXN0
aW5nUGhhc2U6Om5vdGljZUNsb2JiZXIpOgorICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAg
ICAgIChKU0M6OkhlYXA6Om1hcmtQcm90ZWN0ZWRPYmplY3RzKToKKyAgICAgICAgKiBoZWFwL0hl
YXAuaDoKKyAgICAgICAgKEpTQzo6SGVhcDo6Zm9yRWFjaFByb3RlY3RlZENlbGwpOgorICAgICAg
ICAqIGhlYXAvSklUU3R1YlJvdXRpbmVTZXQuY3BwOgorICAgICAgICAoSlNDOjpKSVRTdHViUm91
dGluZVNldDo6bWFya1Nsb3cpOgorICAgICAgICAoSlNDOjpKSVRTdHViUm91dGluZVNldDo6ZGVs
ZXRlVW5tYXJrZWRKZXR0aXNvbmVkU3R1YlJvdXRpbmVzKToKKyAgICAgICAgKiBoZWFwL1Nsb3RW
aXNpdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmludGVybmFsQXBwZW5kKToK
KyAgICAgICAgKiBoZWFwL1dlYWsuaDoKKyAgICAgICAgKEpTQzo6d2Vha1JlbW92ZSk6CisgICAg
ICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGUpOgor
ICAgICAgICAqIGppdC9KSVRTdHVicy5jcHA6CisgICAgICAgIChKU0M6OkpJVFRodW5rczo6Y3Rp
U3R1Yik6CisgICAgICAgICogcGFyc2VyL1BhcnNlci5jcHA6CisgICAgICAgIChKU0M6Ojo6cGFy
c2VTdHJpY3RPYmplY3RMaXRlcmFsKToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlLmNwcDoK
KyAgICAgICAgKEpTQzo6ZnVuY3Rpb25OYW1lQ291bnRQYWlyQ29tcGFyYXRvcik6CisgICAgICAg
IChKU0M6OlByb2ZpbGU6OmRlYnVnUHJpbnREYXRhU2FtcGxlU3R5bGUpOgorICAgICAgICAqIHJ1
bnRpbWUvSWRlbnRpZmllci5jcHA6CisgICAgICAgIChKU0M6OklkZW50aWZpZXI6OmFkZCk6Cisg
ICAgICAgICogcnVudGltZS9KU0FjdGl2YXRpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0FjdGl2
YXRpb246OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6OkpTQWN0
aXZhdGlvbjo6c3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRlcyk6CisgICAgICAgICogcnVudGlt
ZS9KU0FycmF5LmNwcDoKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c2V0TGVuZ3RoKToKKyAgICAg
ICAgKiBydW50aW1lL0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93
blByb3BlcnR5U2xvdEJ5SW5kZXgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZW50ZXJEaWN0
aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHMpOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
ZGVmaW5lT3duSW5kZXhlZFByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmF0dGVt
cHRUb0ludGVyY2VwdFB1dEJ5SW5kZXhPbkhvbGVGb3JQcm90b3R5cGUpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2Up
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5n
dGhXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93blByb3Bl
cnR5RGVzY3JpcHRvcik6CisgICAgICAgICogcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNw
cDoKKyAgICAgICAgKEpTQzo6SlNTeW1ib2xUYWJsZU9iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9w
ZXJ0eU5hbWVzKToKKyAgICAgICAgKiBydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaDoKKyAg
ICAgICAgKEpTQzo6c3ltYm9sVGFibGVHZXQpOgorICAgICAgICAoSlNDOjpzeW1ib2xUYWJsZVB1
dCk6CisgICAgICAgIChKU0M6OnN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMpOgorICAgICAg
ICAqIHJ1bnRpbWUvUmVnRXhwQ2FjaGUuY3BwOgorICAgICAgICAoSlNDOjpSZWdFeHBDYWNoZTo6
aW52YWxpZGF0ZUNvZGUpOgorICAgICAgICAqIHJ1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5j
cHA6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OnB1dEVudHJ5KToKKyAgICAg
ICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6cHV0RGlyZWN0KToKKyAgICAgICAgKEpTQzo6
U3BhcnNlQXJyYXlWYWx1ZU1hcDo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogcnVudGltZS9X
ZWFrR0NNYXAuaDoKKyAgICAgICAgKEpTQzo6V2Vha0dDTWFwOjpjbGVhcik6CisgICAgICAgIChK
U0M6OldlYWtHQ01hcDo6c2V0KToKKyAgICAgICAgKiB0b29scy9Qcm9maWxlVHJlZU5vZGUuaDoK
KyAgICAgICAgKEpTQzo6UHJvZmlsZVRyZWVOb2RlOjpzYW1wbGVDaGlsZCk6CisgICAgICAgIChK
U0M6OlByb2ZpbGVUcmVlTm9kZTo6Y2hpbGRDb3VudCk6CisgICAgICAgIChKU0M6OlByb2ZpbGVU
cmVlTm9kZTo6ZHVtcEludGVybmFsKToKKyAgICAgICAgKEpTQzo6UHJvZmlsZVRyZWVOb2RlOjpj
b21wYXJlRW50cmllcyk6CisKIDIwMTItMTAtMDUgIE1hcmsgSGFobmVuYmVyZyAgPG1oYWhuZW5i
ZXJnQGFwcGxlLmNvbT4KIAogICAgICAgICBKU0Mgc2hvdWxkIGhhdmUgYSB3YXkgdG8gZ2F0aGVy
IGFuZCBsb2cgSGVhcCBtZW1vcnkgdXNlIGFuZCBwYXVzZSB0aW1lcwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCA0ODllZDEyN2E4
NzE3MDYzZTIwMzZmZDM0MDkyZWYwNTI0MzVjZDEyLi44NzM5NzMwMzRkZDQwNjdmN2M5NzdjMmMw
MjZhOWFmYzgyZjQ1OTA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY5IEBACisyMDEyLTEwLTA3ICBDYWlvIE1h
cmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gIDxjYWlvLm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+CisK
KyAgICAgICAgUmVuYW1lIGZpcnN0L3NlY29uZCB0byBrZXkvdmFsdWUgaW4gSGFzaE1hcCBpdGVy
YXRvcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgy
Nzg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCisKKyAgICAgICAgQ3VycmVu
dGx5IEhhc2hNYXAgaXRlcmF0b3JzIGZvbGxvdyB0aGUgc2FtZSBpbnRlcmZhY2UgaW4gc3RkOjpt
YXA6IGdpdmVuIGFuCisgICAgICAgIGl0ZXJhdG9yIGl0LCB3ZSB1c2UgaXQtPmZpcnN0IHRvIGFj
Y2VzcyB0aGUga2V5IGFuZCBpdC0+c2Vjb25kIHRvIGFjY2VzcyB0aGUKKyAgICAgICAgdmFsdWUu
IFRoaXMgcGF0Y2ggY2hhbmdlcyB0aGVzZSBhY2Nlc3NlcyB0byBpdC0+a2V5IGFuZCBpdC0+dmFs
dWUsIGltcHJvdmluZyB0aGUKKyAgICAgICAgcmVhZGFiaWxpdHkgYXQgY2FsbCBzaXRlcy4KKwor
ICAgICAgICBPbmUgcG90ZW50aWFsIGRvd25zaWRlIG9mIHRoaXMgY2hhbmdlIHdvdWxkIGJlIHRo
ZSBjb25mdXNpb24gYmV0d2VlbiBzdGQ6Om1hcCBhbmQKKyAgICAgICAgSGFzaE1hcCBpbnRlcmZh
Y2VzLiBIb3dldmVyLCB0aGV5IGFyZSBhbHJlYWR5IGRpZmZlcmVudCBpbiBvdGhlciBhc3BlY3Rz
IGFuZCB0aGUKKyAgICAgICAgdXNhZ2Ugb2Ygc3RkOjptYXAgaXMgbW9yZSBhbiBleGNlcHRpb24g
dGhhbiBhIHJ1bGUgaW4gV2ViS2l0IGNvZGUsIHNvIHdlIGNvbnNpZGVyCisgICAgICAgIHRoZSBj
b25mdXNpb24gd2lsbCBiZSBsZXNzIGxpa2VseSB0byBoYXBwZW4uCisKKyAgICAgICAgKiB3dGYv
SGFzaENvdW50ZWRTZXQuaDoKKyAgICAgICAgKFdURjo6OjphZGQpOgorICAgICAgICAoV1RGOjo6
OnJlbW92ZSk6CisgICAgICAgIChXVEY6OmNvcHlUb1ZlY3Rvcik6CisgICAgICAgICogd3RmL0hh
c2hJdGVyYXRvcnMuaDoKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlQ29uc3RLZXlzSXRlcmF0b3I6
OmdldCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZUNvbnN0VmFsdWVzSXRlcmF0b3I6OmdldCk6
CisgICAgICAgIChXVEY6Okhhc2hUYWJsZUtleXNJdGVyYXRvcjo6Z2V0KToKKyAgICAgICAgKFdU
Rjo6SGFzaFRhYmxlVmFsdWVzSXRlcmF0b3I6OmdldCk6CisgICAgICAgICogd3RmL0hhc2hNYXAu
aDoKKyAgICAgICAgKFdURjo6S2V5VmFsdWVQYWlyS2V5RXh0cmFjdG9yOjpleHRyYWN0KToKKyAg
ICAgICAgKFdURjo6SGFzaE1hcFZhbHVlVHJhaXRzOjppc0VtcHR5VmFsdWUpOgorICAgICAgICAo
V1RGOjpIYXNoTWFwVHJhbnNsYXRvcjo6dHJhbnNsYXRlKToKKyAgICAgICAgKFdURjo6SGFzaE1h
cFRyYW5zbGF0b3JBZGFwdGVyOjp0cmFuc2xhdGUpOgorICAgICAgICAoV1RGOjo6OnNldCk6Cisg
ICAgICAgIChXVEY6Ojo6Z2V0KToKKyAgICAgICAgKFdURjo6Ojp0YWtlKToKKyAgICAgICAgKFdU
Rjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXVEY6OmRlbGV0ZUFsbFZhbHVlcyk6CisgICAgICAg
IChXVEY6OmRlbGV0ZUFsbEtleXMpOgorICAgICAgICBSZW1vdmVkIGRlbGV0ZUFsbFBhaXJGaXJz
dHMoKSBhbmQgZGVsZXRlQWxsUGFpclNlY29uZHMoKSBzaW5jZSB0aGV5IGFyZSBub3cgdW51c2Vk
LgorCisgICAgICAgICogd3RmL0hhc2hUYWJsZS5oOgorICAgICAgICAoV1RGOjpoYXNoVGFibGVT
d2FwKToKKyAgICAgICAgKFdURjo6OjpjaGVja1RhYmxlQ29uc2lzdGVuY3lFeGNlcHRTaXplKToK
KyAgICAgICAgKiB3dGYvSGFzaFRyYWl0cy5oOgorICAgICAgICAoV1RGKToKKyAgICAgICAgKFdU
Rjo6S2V5VmFsdWVQYWlyOjpLZXlWYWx1ZVBhaXIpOgorICAgICAgICAoS2V5VmFsdWVQYWlyKToK
KyAgICAgICAgKFdURjo6S2V5VmFsdWVQYWlySGFzaFRyYWl0czo6Y29uc3RydWN0RGVsZXRlZFZh
bHVlKToKKyAgICAgICAgKFdURjo6S2V5VmFsdWVQYWlySGFzaFRyYWl0czo6aXNEZWxldGVkVmFs
dWUpOgorICAgICAgICAqIHd0Zi9NZXRhQWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKFdURjo6TWV0
YUFsbG9jYXRvcjo6YWRkRnJlZVNwYWNlKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6
aW5jcmVtZW50UGFnZU9jY3VwYW5jeSk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmRl
Y3JlbWVudFBhZ2VPY2N1cGFuY3kpOgorICAgICAgICAqIHd0Zi9SZWZDb3VudGVkTGVha0NvdW50
ZXIuY3BwOgorICAgICAgICAoV1RGOjpSZWZDb3VudGVkTGVha0NvdW50ZXI6On5SZWZDb3VudGVk
TGVha0NvdW50ZXIpOgorICAgICAgICAqIHd0Zi9SZWZQdHJIYXNoTWFwLmg6CisgICAgICAgIChX
VEY6Ojo6c2V0KToKKyAgICAgICAgKFdURjo6OjpnZXQpOgorICAgICAgICAoV1RGOjo6OmlubGlu
ZUdldCk6CisgICAgICAgIChXVEY6Ojo6dGFrZSk6CisgICAgICAgICogd3RmL1NwZWN0cnVtLmg6
CisgICAgICAgIChXVEY6OlNwZWN0cnVtOjphZGQpOgorICAgICAgICAoV1RGOjpTcGVjdHJ1bTo6
Z2V0KToKKyAgICAgICAgKFdURjo6U3BlY3RydW06OmJ1aWxkTGlzdCk6CisgICAgICAgICogd3Rm
L1RocmVhZGluZ1B0aHJlYWRzLmNwcDoKKyAgICAgICAgKFdURjo6aWRlbnRpZmllckJ5UHRocmVh
ZEhhbmRsZSk6CisKIDIwMTItMTAtMDYgIElseWEgVGlraG9ub3Zza3kgIDxsb2lzbG9AY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IE5NSSBmaXggU3RyaW5nIGluc3RydW1l
bnRhdGlvbiB0aGUgd2F5IGl0IHdhcyBkaXNjdXNzZWQgaW4gV0s5Nzk2NApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4
IGY1MTgyOWI3YTY3OTJmNGRhNDViMTY2ZDAwMTRiOWExYmFiYTNiOTMuLjJiZTY3NmM1MzQ3NDdj
NGJhYzdkMDMxZTNkNTg0NDQyODk1ZTk5YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4NDAgQEAK
KzIwMTItMTAtMDcgIENhaW8gTWFyY2VsbyBkZSBPbGl2ZWlyYSBGaWxobyAgPGNhaW8ub2xpdmVp
cmFAb3BlbmJvc3NhLm9yZz4KKworICAgICAgICBSZW5hbWUgZmlyc3Qvc2Vjb25kIHRvIGtleS92
YWx1ZSBpbiBIYXNoTWFwIGl0ZXJhdG9ycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9ODI3ODQKKworICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRl
bC4KKworICAgICAgICAqIE1vZHVsZXMvZ2VvbG9jYXRpb24vR2VvbG9jYXRpb24uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb246OldhdGNoZXJzOjpmaW5kKToKKyAgICAgICAgKFdl
YkNvcmU6Okdlb2xvY2F0aW9uOjpXYXRjaGVyczo6cmVtb3ZlKToKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFz
ZTo6b2JqZWN0U3RvcmVOYW1lcyk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0
YWJhc2VCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tl
bmRJbXBsOjptZXRhZGF0YSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9y
eUJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkZhY3RvcnlCYWNrZW5kSW1w
bDo6ZGVsZXRlRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6SURCRmFjdG9yeUJhY2tlbmRJ
bXBsOjpvcGVuQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkZhY3RvcnlCYWNr
ZW5kSW1wbDo6b3Blbik6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3Rv
cmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmluZGV4TmFtZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OnB1dCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJPYmplY3RTdG9yZTo6aW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3Rv
cmU6OmRlbGV0ZUluZGV4KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6Om1ldGFkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VJbmRleFdyaXRlcnMp
OgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW50
ZXJuYWwpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpvYmplY3RTdG9yZSk6CisgICAgICAg
IChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6b2JqZWN0U3RvcmVEZWxldGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpvbkFib3J0KToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlRyYW5zYWN0aW9uOjpkaXNwYXRjaEV2ZW50KToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3Ry
ZWFtL01lZGlhQ29uc3RyYWludHNJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29u
c3RyYWludHNJbXBsOjpnZXRNYW5kYXRvcnlDb25zdHJhaW50cyk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYUNvbnN0cmFpbnRzSW1wbDo6Z2V0TWFuZGF0b3J5Q29uc3RyYWludFZhbHVlKToKKyAg
ICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0Fic3RyYWN0RGF0YWJhc2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6cGVyZm9ybU9wZW5BbmRWZXJpZnkpOgorICAg
ICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6aW50ZXJydXB0QWxsRGF0YWJhc2VzRm9yQ29udGV4
dCk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9PcmlnaW5Vc2FnZVJlY29yZC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpPcmlnaW5Vc2FnZVJlY29yZDo6ZGlza1VzYWdlKToKKyAgICAg
ICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6YWNxdWlyZUxvY2sp
OgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6cmVsZWFzZUxv
Y2spOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6c2h1dGRv
d24pOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvY2hyb21pdW0vRGF0YWJhc2VUcmFj
a2VyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjppbnRl
cnJ1cHRBbGxEYXRhYmFzZXNGb3JDb250ZXh0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFi
YXNlL2Nocm9taXVtL1F1b3RhVHJhY2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpRdW90YVRy
YWNrZXI6OmdldERhdGFiYXNlU2l6ZUFuZFNwYWNlQXZhaWxhYmxlVG9PcmlnaW4pOgorICAgICAg
ICAoV2ViQ29yZTo6UXVvdGFUcmFja2VyOjp1cGRhdGVEYXRhYmFzZVNpemUpOgorICAgICAgICAq
IE1vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXREZWZsYXRlRnJhbWVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OldlYlNvY2tldEV4dGVuc2lvbkRlZmxhdGVGcmFtZTo6cHJvY2Vzc1Jlc3BvbnNl
KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0RXh0ZW5zaW9uRGlzcGF0
Y2hlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVy
OjphcHBlbmRBY2NlcHRlZEV4dGVuc2lvbik6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BWE9i
amVjdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6On5BWE9iamVj
dENhY2hlKToKKyAgICAgICAgKiBiaW5kaW5ncy9nb2JqZWN0L0RPTU9iamVjdENhY2hlLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmNsZWFyQnlGcmFtZSk6CisgICAgICAg
ICogYmluZGluZ3MvanMvRE9NT2JqZWN0SGFzaFRhYmxlTWFwLmg6CisgICAgICAgIChXZWJDb3Jl
OjpET01PYmplY3RIYXNoVGFibGVNYXA6On5ET01PYmplY3RIYXNoVGFibGVNYXApOgorICAgICAg
ICAoV2ViQ29yZTo6RE9NT2JqZWN0SGFzaFRhYmxlTWFwOjpnZXQpOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTRE9NQmluZGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjYWNoZURPTVN0cnVj
dHVyZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SlNET01HbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpn
ZXRET01Db25zdHJ1Y3Rvcik6CisgICAgICAgICogYmluZGluZ3MvanMvUGFnZVNjcmlwdERlYnVn
U2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VTY3JpcHREZWJ1Z1NlcnZlcjo6YWRk
TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZVNjcmlwdERlYnVnU2VydmVyOjpyZW1v
dmVMaXN0ZW5lcik6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0Q2FjaGVkRnJhbWVEYXRh
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENhY2hlZEZyYW1lRGF0YTo6U2NyaXB0Q2Fj
aGVkRnJhbWVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENhY2hlZEZyYW1lRGF0YTo6
cmVzdG9yZSk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjp+U2NyaXB0Q29udHJvbGxlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpjbGVhcldpbmRvd1NoZWxsKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmF0dGFjaERlYnVnZ2VyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OnVwZGF0ZURvY3VtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmNyZWF0ZVJvb3RPYmplY3QpOgorICAgICAgICAo
V2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6Y29sbGVjdElzb2xhdGVkQ29udGV4dHMpOgorICAg
ICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6Y2xlYW51cFNjcmlwdE9iamVjdHNGb3JQ
bHVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6Y2xlYXJTY3JpcHRP
YmplY3RzKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjp3aW5kb3dTaGVsbCk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpleGlzdGluZ1dpbmRvd1NoZWxsKToKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JpcHREZWJ1Z1NlcnZlcjo6c2V0QnJlYWtwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jp
cHREZWJ1Z1NlcnZlcjo6cmVtb3ZlQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jp
cHREZWJ1Z1NlcnZlcjo6aGFzQnJlYWtwb2ludCk6CisgICAgICAgICogYmluZGluZ3MvanMvU2Vy
aWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lU2VyaWFsaXpl
cjo6Y2hlY2tGb3JEdXBsaWNhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVTZXJpYWxpemVy
OjpkdW1wSWZUZXJtaW5hbCk6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZVNlcmlhbGl6ZXI6Ondy
aXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbToKKyAg
ICAgICAgKEdlbmVyYXRlSW1wbGVtZW50YXRpb24pOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9WOC9WOEZsb2F0NjRBcnJheS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOEZsb2F0
NjRBcnJheTo6R2V0UmF3VGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhGbG9hdDY0QXJy
YXk6OkdldFRlbXBsYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhU
ZXN0QWN0aXZlRE9NT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdEFjdGl2ZURP
TU9iamVjdDo6R2V0UmF3VGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0QWN0aXZl
RE9NT2JqZWN0OjpHZXRUZW1wbGF0ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Y4L1Y4VGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVz
dEN1c3RvbU5hbWVkR2V0dGVyOjpHZXRSYXdUZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpW
OFRlc3RDdXN0b21OYW1lZEdldHRlcjo6R2V0VGVtcGxhdGUpOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlY4VGVzdEV2ZW50Q29uc3RydWN0b3I6OkdldFJhd1RlbXBsYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlY4VGVzdEV2ZW50Q29uc3RydWN0b3I6OkdldFRlbXBsYXRlKToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRUYXJnZXQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6VjhUZXN0RXZlbnRUYXJnZXQ6OkdldFJhd1RlbXBsYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlY4VGVzdEV2ZW50VGFyZ2V0OjpHZXRUZW1wbGF0ZSk6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV4Y2VwdGlvbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpWOFRlc3RFeGNlcHRpb246OkdldFJhd1RlbXBsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OlY4VGVzdEV4Y2VwdGlvbjo6R2V0VGVtcGxhdGUpOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9WOC9WOFRlc3RJbnRlcmZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0
SW50ZXJmYWNlOjpHZXRSYXdUZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RJbnRl
cmZhY2U6OkdldFRlbXBsYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgv
VjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOFRl
c3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjpHZXRSYXdUZW1wbGF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpWOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjpHZXRUZW1wbGF0ZSk6CisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6VjhUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6R2V0UmF3VGVtcGxhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6R2V0VGVtcGxhdGUp
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROb2RlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlY4VGVzdE5vZGU6OkdldFJhd1RlbXBsYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OlY4VGVzdE5vZGU6OkdldFRlbXBsYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdE9iajo6
R2V0UmF3VGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0T2JqOjpHZXRUZW1wbGF0
ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OkdldFJhd1RlbXBsYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlY4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6R2V0VGVtcGxhdGUpOgor
ICAgICAgICAqIGJpbmRpbmdzL3Y4L0RPTVdyYXBwZXJXb3JsZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpET01XcmFwcGVyV29ybGQ6OmRlYWxsb2NhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RE9N
V3JhcHBlcldvcmxkOjplbnN1cmVJc29sYXRlZFdvcmxkKToKKyAgICAgICAgKiBiaW5kaW5ncy92
OC9OUFY4T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZyZWVWOE5QT2JqZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6Om5wQ3JlYXRlVjhTY3JpcHRPYmplY3QpOgorICAgICAgICAqIGJpbmRp
bmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29u
dHJvbGxlcjo6Y2xlYXJTY3JpcHRPYmplY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENv
bnRyb2xsZXI6OnJlc2V0SXNvbGF0ZWRXb3JsZHMpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0
Q29udHJvbGxlcjo6ZW5zdXJlSXNvbGF0ZWRXb3JsZENvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6U2NyaXB0Q29udHJvbGxlcjo6ZXhpc3RpbmdXaW5kb3dTaGVsbEludGVybmFsKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OnNldElzb2xhdGVkV29ybGRTZWN1
cml0eU9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpjbGVhbnVw
U2NyaXB0T2JqZWN0c0ZvclBsdWdpbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9s
bGVyOjpjb2xsZWN0SXNvbGF0ZWRDb250ZXh0cyk6CisgICAgICAgICogYmluZGluZ3MvdjgvU2Vy
aWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOERPTU1hcC5o
OgorICAgICAgICAoV2ViQ29yZTo6V2Vha1JlZmVyZW5jZU1hcDo6cmVtb3ZlSWZQcmVzZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OldlYWtSZWZlcmVuY2VNYXA6OnZpc2l0KToKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9WOFBlckNvbnRleHREYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4UGVy
Q29udGV4dERhdGE6OmRpc3Bvc2UpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L25wcnVudGltZS5j
cHA6CisgICAgICAgICogYnJpZGdlL0lkZW50aWZpZXJSZXAuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SWRlbnRpZmllclJlcDo6Z2V0KToKKyAgICAgICAgKiBicmlkZ2UvTlBfanNvYmplY3QuY3Bw
OgorICAgICAgICAoT2JqZWN0TWFwOjphZGQpOgorICAgICAgICAoT2JqZWN0TWFwOjpyZW1vdmUp
OgorICAgICAgICAqIGJyaWRnZS9ydW50aW1lX3Jvb3QuY3BwOgorICAgICAgICAoSlNDOjpCaW5k
aW5nczo6Um9vdE9iamVjdDo6aW52YWxpZGF0ZSk6CisgICAgICAgICogY3NzL0NTU0NhbnZhc1Zh
bHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbnZhc1ZhbHVlOjpjYW52YXNDaGFuZ2Vk
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbnZhc1ZhbHVlOjpjYW52YXNSZXNpemVkKToKKyAg
ICAgICAgKiBjc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmNvdW50ZXJUb0NTU1ZhbHVlKToKKyAgICAgICAgKiBjc3MvQ1NTQ3Jvc3NmYWRlVmFs
dWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ3Jvc3NmYWRlVmFsdWU6OmNyb3NzZmFkZUNo
YW5nZWQpOgorICAgICAgICAqIGNzcy9DU1NGb250RmFjZVNvdXJjZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NGb250RmFjZVNvdXJjZTo6Z2V0Rm9udERhdGEpOgorICAgICAgICAqIGNzcy9D
U1NGb250U2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9yOjph
ZGRGb250RmFjZVJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9yOjpnZXRG
b250RGF0YSk6CisgICAgICAgICogY3NzL0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6YWRkQ2xpZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0ltYWdlR2VuZXJhdG9yVmFsdWU6OnJlbW92ZUNsaWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjpnZXRJbWFnZSk6CisgICAgICAg
ICogY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Nl
Z21lbnRlZEZvbnRGYWNlOjpnZXRGb250RGF0YSk6CisgICAgICAgICogY3NzL0NTU1NlbGVjdG9y
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1NlbGVjdG9yOjpwYXJzZVBzZXVkb1R5cGUpOgor
ICAgICAgICAqIGNzcy9DU1NWYWx1ZVBvb2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVmFs
dWVQb29sOjpjcmVhdGVDb2xvclZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ZhbHVlUG9v
bDo6Y3JlYXRlRm9udEZhbWlseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ZhbHVlUG9v
bDo6Y3JlYXRlRm9udEZhY2VWYWx1ZSk6CisgICAgICAgICogY3NzL1Byb3BlcnR5U2V0Q1NTU3R5
bGVEZWNsYXJhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0eVNldENTU1N0eWxl
RGVjbGFyYXRpb246OmNsb25lQW5kQ2FjaGVGb3JDU1NPTSk6CisgICAgICAgICogY3NzL1J1bGVT
ZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cmVwb3J0QXRvbVJ1bGVNYXApOgorICAgICAgICAo
V2ViQ29yZTo6UnVsZVNldDo6YWRkVG9SdWxlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6OnNocmlu
a01hcFZlY3RvcnNUb0ZpdCk6CisgICAgICAgICogY3NzL1N0eWxlQnVpbGRlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Q291bnRlcjo6YXBwbHlJbmhlcml0VmFsdWUpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUNvdW50ZXI6OmFwcGx5VmFsdWUpOgorICAg
ICAgICAqIGNzcy9TdHlsZVJlc29sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVz
b2x2ZXI6OmNvbGxlY3RGZWF0dXJlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
OjpydWxlU2V0Rm9yU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBw
ZW5kQXV0aG9yU3R5bGVzaGVldHMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
c3dlZXBNYXRjaGVkUHJvcGVydGllc0NhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVz
b2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdCk6CisgICAgICAgICogY3NzL1N0eWxl
U2hlZXRDb250ZW50cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0Q29udGVudHM6
OnBhcnNlckFkZE5hbWVzcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0Q29udGVu
dHM6OmRldGVybWluZU5hbWVzcGFjZSk6CisgICAgICAgICogZG9tL0NoZWNrZWRSYWRpb0J1dHRv
bnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hlY2tlZFJhZGlvQnV0dG9uczo6YWRkQnV0dG9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkNoZWNrZWRSYWRpb0J1dHRvbnM6OnJlbW92ZUJ1dHRvbik6
CisgICAgICAgICogZG9tL0NoaWxkTGlzdE11dGF0aW9uU2NvcGUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q2hpbGRMaXN0TXV0YXRpb25BY2N1bXVsYXRvcjo6Z2V0T3JDcmVhdGUpOgorICAgICAg
ICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6d2luZG93
TmFtZWRJdGVtcyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6ZG9jdW1lbnROYW1lZEl0
ZW1zKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpnZXRDU1NDYW52YXNFbGVtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpjYWNoZWRJbW11dGFibGVBdHRyaWJ1dGVEYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpnZXRDYWNoZWRMb2NhbGl6ZXIpOgorICAg
ICAgICAqIGRvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjptYXJrZXJDb250YWluaW5nUG9pbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW5kZXJlZFJlY3RzRm9y
TWFya2Vycyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJl
bW92ZU1hcmtlcnMpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
OjpyZXBhaW50TWFya2Vycyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRy
b2xsZXI6OmludmFsaWRhdGVSZW5kZXJlZFJlY3RzRm9yTWFya2Vyc0luUmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnNob3dNYXJrZXJzKToKKyAgICAg
ICAgKiBkb20vRG9jdW1lbnRPcmRlcmVkTWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50T3JkZXJlZE1hcDo6cmVtb3ZlKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnRTdHlsZVNoZWV0
Q29sbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFN0eWxlU2hlZXRDb2xs
ZWN0aW9uOjpwYWdlR3JvdXBVc2VyU2hlZXRzKToKKyAgICAgICAgKiBkb20vRWxlbWVudEF0dHJp
YnV0ZURhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZW5zdXJlQXR0ckxpc3RGb3JFbGVtZW50
KToKKyAgICAgICAgKiBkb20vRXZlbnREaXNwYXRjaGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkV2ZW50UmVsYXRlZFRhcmdldEFkanVzdGVyOjpmaW5kUmVsYXRlZFRhcmdldCk6CisgICAgICAg
ICogZG9tL0lkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
ZFRhcmdldE9ic2VydmVyUmVnaXN0cnk6OmFkZE9ic2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OklkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeTo6cmVtb3ZlT2JzZXJ2ZXIpOgorICAgICAgICAqIGRv
bS9NdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpN
dXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cDo6aXNPbGRWYWx1ZVJlcXVlc3RlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpNdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cDo6ZW5xdWV1ZU11dGF0
aW9uUmVjb3JkKToKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpO
b2RlOjpkdW1wU3RhdGlzdGljcyk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpjbGVhclJhcmVE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVMaXN0c05vZGVEYXRhOjppbnZhbGlkYXRlQ2Fj
aGVzKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbGxlY3RNYXRjaGluZ09ic2VydmVyc0Zvck11dGF0
aW9uKToKKyAgICAgICAgKiBkb20vTm9kZVJhcmVEYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpO
b2RlTGlzdHNOb2RlRGF0YTo6YWRkQ2FjaGVXaXRoQXRvbWljTmFtZSk6CisgICAgICAgIChXZWJD
b3JlOjpOb2RlTGlzdHNOb2RlRGF0YTo6YWRkQ2FjaGVXaXRoTmFtZSk6CisgICAgICAgIChXZWJD
b3JlOjpOb2RlTGlzdHNOb2RlRGF0YTo6YWRkQ2FjaGVXaXRoUXVhbGlmaWVkTmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpOb2RlTGlzdHNOb2RlRGF0YTo6YWRvcHRUcmVlU2NvcGUpOgorICAgICAg
ICAqIGRvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UHJv
Y2Vzc2luZ0luc3RydWN0aW9uOjpjaGVja1N0eWxlU2hlZXQpOgorICAgICAgICAqIGRvbS9TY3Jp
cHRFeGVjdXRpb25Db250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQ6OmNhblN1c3BlbmRBY3RpdmVET01PYmplY3RzKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnN1c3BlbmRBY3RpdmVET01PYmplY3RzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnJlc3VtZUFjdGl2ZURPTU9iamVj
dHMpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6c3RvcEFjdGl2
ZURPTU9iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6
YWRqdXN0TWluaW11bVRpbWVySW50ZXJ2YWwpOgorICAgICAgICAqIGRvbS9TZWxlY3RvclF1ZXJ5
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yUXVlcnlDYWNoZTo6YWRkKToKKyAgICAg
ICAgKiBkb20vU3BhY2VTcGxpdFN0cmluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTcGFjZVNw
bGl0U3RyaW5nRGF0YTo6Y3JlYXRlKToKKyAgICAgICAgKiBkb20vU3R5bGVkRWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRFbGVtZW50Ojp1cGRhdGVBdHRyaWJ1dGVTdHlsZSk6
CisgICAgICAgICogZWRpdGluZy9tYWMvQWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyLm1tOgor
ICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyOjpBbGVybmF0aXZl
VGV4dENvbnRleHRDb250cm9sbGVyOjphbHRlcm5hdGl2ZXNGb3JDb250ZXh0KToKKyAgICAgICAg
KiBodG1sL0Zvcm1Db250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNhdmVkRm9ybVN0
YXRlOjpzZXJpYWxpemVUbyk6CisgICAgICAgIChXZWJDb3JlOjpTYXZlZEZvcm1TdGF0ZTo6YXBw
ZW5kQ29udHJvbFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNhdmVkRm9ybVN0YXRlOjp0YWtl
Q29udHJvbFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNhdmVkRm9ybVN0YXRlOjpnZXRSZWZl
cmVuY2VkRmlsZVBhdGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1LZXlHZW5lcmF0b3I6OmZv
cm1LZXkpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUNvbnRyb2xsZXI6OmNyZWF0ZVNhdmVkRm9y
bVN0YXRlTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1Db250cm9sbGVyOjpmb3JtRWxlbWVu
dHNTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtQ29udHJvbGxlcjo6dGFrZVN0YXRlRm9y
Rm9ybUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUNvbnRyb2xsZXI6OmdldFJlZmVy
ZW5jZWRGaWxlUGF0aHMpOgorICAgICAgICAqIGh0bWwvSFRNTENvbGxlY3Rpb24uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTENvbGxlY3Rpb25DYWNoZUJhc2U6OmFwcGVuZCk6CisgICAgICAg
ICogaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTEZyYW1lYnVmZmVyOjpnZXRBdHRhY2htZW50KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
RnJhbWVidWZmZXI6OnJlbW92ZUF0dGFjaG1lbnRGcm9tQm91bmRGcmFtZWJ1ZmZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTEZyYW1lYnVmZmVyOjpjaGVja1N0YXR1cyk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTEZyYW1lYnVmZmVyOjpkZWxldGVPYmplY3RJbXBsKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMRnJhbWVidWZmZXI6OmluaXRpYWxpemVBdHRhY2htZW50cyk6CisgICAgICAg
ICogaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHk6CisgICAgICAgICogaW5zcGVj
dG9yL0RPTVBhdGNoU3VwcG9ydC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01QYXRjaFN1cHBv
cnQ6OmRpZmYpOgorICAgICAgICAoV2ViQ29yZTo6RE9NUGF0Y2hTdXBwb3J0Ojppbm5lclBhdGNo
Q2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6RE9NUGF0Y2hTdXBwb3J0OjpyZW1vdmVDaGls
ZEFuZE1vdmVUb05ldyk6CisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0TWFuYWdl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmplY3RlZFNjcmlwdE1hbmFnZXI6OmluamVjdGVk
U2NyaXB0Rm9ySWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjpp
bmplY3RlZFNjcmlwdElkRm9yKToKKyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0TWFu
YWdlcjo6ZGlzY2FyZEluamVjdGVkU2NyaXB0c0Zvcik6CisgICAgICAgIChXZWJDb3JlOjpJbmpl
Y3RlZFNjcmlwdE1hbmFnZXI6OnJlbGVhc2VPYmplY3RHcm91cCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbmplY3RlZFNjcmlwdE1hbmFnZXI6OmluamVjdGVkU2NyaXB0Rm9yKToKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0
b3JQcm9maWxlOjpjb21taXRTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvclBy
b2ZpbGU6OmNvbW1pdFNlbGVjdG9yVGltZSk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvclBy
b2ZpbGU6OnRvSW5zcGVjdG9yT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlVwZGF0ZVJlZ2lv
bkxheW91dFRhc2s6Om9uVGltZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdl
bnQ6OmZvcmNlUHNldWRvU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdl
bnQ6OmFzSW5zcGVjdG9yU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JD
U1NBZ2VudDo6YXNzZXJ0U3R5bGVTaGVldEZvcklkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckNTU0FnZW50OjpkaWRSZW1vdmVET01Ob2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckNTU0FnZW50OjpkaWRNb2RpZnlET01BdHRyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckNTU0FnZW50OjpyZXNldFBzZXVkb1N0YXRlcyk6CisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnNvbGVBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb25z
b2xlQWdlbnQ6OnN0b3BUaW1pbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29uc29s
ZUFnZW50Ojpjb3VudCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50Ojpub2RlRm9ySWQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OnBlcmZvcm1TZWFyY2gpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmdldFNlYXJjaFJlc3VsdHMpOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OndpbGxTZW5kWE1MSHR0cFJlcXVlc3Qp
OgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpjbGVhckZyb250ZW5kKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6ZW5hYmxlKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6c3RvcmFnZUlkKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6Z2V0RE9NU3RvcmFnZVJl
c291cmNlRm9ySWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50
OjpkaWRVc2VET01TdG9yYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTVN0b3Jh
Z2VBZ2VudDo6bWVtb3J5Qnl0ZXNVc2VkQnlTdG9yYWdlQ2FjaGUpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckRhdGFiYXNlQWdlbnQ6OmVuYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JE
YXRhYmFzZUFnZW50OjpkYXRhYmFzZUlkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRh
dGFiYXNlQWdlbnQ6OmZpbmRCeUZpbGVOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckRhdGFiYXNlQWdlbnQ6OmRhdGFiYXNlRm9ySWQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVn
Z2VyQWdlbnQ6OnNldEJyZWFrcG9pbnRCeVVybCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpyZW1vdmVCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnJlc29sdmVCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNlYXJjaEluQ29udGVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpnZXRTY3JpcHRTb3VyY2UpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkUGFyc2VTb3VyY2UpOgorICAg
ICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yTWVtb3J5QWdlbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2Vu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjYWNoZWRSZXNvdXJjZXNGb3JGcmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6OmRpZENsZWFyV2luZG93T2JqZWN0SW5X
b3JsZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6OmZyYW1lRGV0YWNo
ZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmdldFByb2ZpbGVIZWFkZXJz
KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUHJvZmls
ZXJBZ2VudDo6Z2V0UHJvZmlsZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclJlc291
cmNlQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRPYmplY3RGb3JIZWFkZXJzKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlc291cmNlQWdlbnQ6OndpbGxTZW5kUmVxdWVz
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXNvdXJjZUFnZW50Ojpkb2N1bWVudFRo
cmVhZGFibGVMb2FkZXJTdGFydGVkTG9hZGluZ0ZvckNsaWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JSZXNvdXJjZUFnZW50Ojp3aWxsTG9hZFhIUik6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpyZXBsYXlYSFIpOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JTdGF0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdGF0ZTo6
Z2V0Qm9vbGVhbik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdGF0ZTo6Z2V0U3RyaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0YXRlOjpnZXRMb25nKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvclN0YXRlOjpnZXREb3VibGUpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yU3RhdGU6OmdldE9iamVjdCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
clN0eWxlU2hlZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGU6OnN0eWxl
V2l0aFByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6
aW5zcGVjdG9yU3R5bGVGb3JJZCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclZhbHVl
cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPYmplY3RCYXNlOjpnZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT2JqZWN0QmFzZTo6d3JpdGVKU09OKToKKyAgICAgICAg
KiBpbnNwZWN0b3IvSW5zcGVjdG9yV29ya2VyQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yV29ya2VyQWdlbnQ6OndvcmtlckNvbnRleHRUZXJtaW5hdGVkKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvcldvcmtlckFnZW50OjpjcmVhdGVXb3JrZXJGcm9udGVuZENoYW5u
ZWxzRm9yRXhpc3RpbmdXb3JrZXJzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvcldvcmtl
ckFnZW50OjpkZXN0cm95V29ya2VyRnJvbnRlbmRDaGFubmVscyk6CisgICAgICAgICogaW5zcGVj
dG9yL01lbW9yeUluc3RydW1lbnRhdGlvbkltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVt
b3J5SW5zdHJ1bWVudGF0aW9uQ2xpZW50SW1wbDo6Y291bnRPYmplY3RTaXplKToKKyAgICAgICAg
KiBpbnNwZWN0b3IvTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbC5oOgorICAgICAgICAoV2ViQ29y
ZTo6TWVtb3J5SW5zdHJ1bWVudGF0aW9uQ2xpZW50SW1wbDo6dG90YWxTaXplKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lbW9yeUluc3RydW1lbnRhdGlvbkNsaWVudEltcGw6OnJlcG9ydGVkU2l6ZUZv
ckFsbFR5cGVzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvTmV0d29ya1Jlc291cmNlc0RhdGEuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1Jlc291cmNlc0RhdGE6OnNldFhIUlJlcGxheURh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1Jlc291cmNlc0RhdGE6OnJlbW92ZUNhY2hl
ZFJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtSZXNvdXJjZXNEYXRhOjpjbGVh
cik6CisgICAgICAgICogbG9hZGVyL0Nyb3NzT3JpZ2luQWNjZXNzQ29udHJvbC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjppc1NpbXBsZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVzdCk6CisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVBY2Nlc3NDb250cm9sUHJlZmxpZ2h0UmVxdWVzdCk6CisgICAgICAg
ICogbG9hZGVyL0Nyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZUl0ZW06OmFsbG93c0Nyb3Nz
T3JpZ2luSGVhZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpDcm9zc09yaWdpblByZWZsaWdodFJl
c3VsdENhY2hlOjpjYW5Ta2lwUHJlZmxpZ2h0KToKKyAgICAgICAgKiBsb2FkZXIvRG9jdW1lbnRM
b2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI6OmdldFN1YnJlc291
cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6c3Vic3RpdHV0ZVJlc291
cmNlRGVsaXZlcnlUaW1lckZpcmVkKToKKyAgICAgICAgKiBsb2FkZXIvTWFpblJlc291cmNlTG9h
ZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1haW5SZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2
ZVJlc3BvbnNlKToKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2VydmVQZW5kaW5nUmVx
dWVzdHMpOgorICAgICAgICAqIGxvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGU6OnJlbW92ZVJlc291cmNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGU6OmNsZWFyU3RvcmFnZUlEKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGU6OmR1bXApOgorICAgICAgICAqIGxvYWRlci9h
cHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBw
bGljYXRpb25DYWNoZUdyb3VwOjpkaWRGaW5pc2hMb2FkaW5nTWFuaWZlc3QpOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUdyb3VwOjpzdGFydExvYWRpbmdFbnRyeSk6CisgICAg
ICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmFkZEVudHJ5KToKKyAgICAgICAg
KiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUhvc3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwbGljYXRpb25DYWNoZUhvc3Q6OmZpbGxSZXNvdXJjZUxpc3QpOgorICAgICAgICAq
IGxvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVJlc291cmNlOjplc3RpbWF0ZWRTaXplSW5TdG9yYWdl
KToKKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmZpbmRPckNyZWF0
ZUNhY2hlR3JvdXApOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6
OmNhY2hlR3JvdXBGb3JVUkwpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0
b3JhZ2U6OmZhbGxiYWNrQ2FjaGVHcm91cEZvclVSTCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBs
aWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRp
b25DYWNoZVN0b3JhZ2U6OmVtcHR5KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2Fj
aGVTdG9yYWdlOjpzdG9yZUNvcHlPZkNhY2hlKToKKyAgICAgICAgKiBsb2FkZXIvYXJjaGl2ZS9B
cmNoaXZlRmFjdG9yeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcmNoaXZlRmFjdG9yeTo6cmVn
aXN0ZXJLbm93bkFyY2hpdmVNSU1FVHlwZXMpOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNo
ZWRSYXdSZXNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSYXdSZXNvdXJjZTo6
Y2FuUmV1c2UpOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZTo6c3dpdGNoQ2xpZW50c1RvUmV2YWxpZGF0
ZWRSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZTo6dXBkYXRlUmVz
cG9uc2VBZnRlclJldmFsaWRhdGlvbik6CisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFJl
c291cmNlQ2xpZW50V2Fsa2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZUNs
aWVudFdhbGtlcjo6Q2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIpOgorICAgICAgICAqIGxvYWRl
ci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNo
ZWRSZXNvdXJjZUxvYWRlcjo6fkNhY2hlZFJlc291cmNlTG9hZGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkNhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0UmVzb3VyY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlbG9hZEltYWdlc0lmTm90RGVmZXJyZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlbW92ZUNhY2hlZFJlc291
cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlTG9hZGVyOjpnYXJiYWdlQ29s
bGVjdERvY3VtZW50UmVzb3VyY2VzKToKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvTWVtb3J5Q2Fj
aGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVtb3J5Q2FjaGU6OnJlbW92ZVJlc291cmNlc1dp
dGhPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6TWVtb3J5Q2FjaGU6OmdldE9yaWdpbnNXaXRo
Q2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVtb3J5Q2FjaGU6OmdldFN0YXRpc3RpY3MpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVtb3J5Q2FjaGU6OnNldERpc2FibGVkKToKKyAgICAgICAgKiBs
b2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SWNvbkRhdGFi
YXNlOjpyZW1vdmVBbGxJY29ucyk6CisgICAgICAgIChXZWJDb3JlOjpJY29uRGF0YWJhc2U6Omlj
b25SZWNvcmRDb3VudFdpdGhEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Okljb25EYXRhYmFzZTo6
cGVyZm9ybVBlbmRpbmdSZXRhaW5BbmRSZWxlYXNlT3BlcmF0aW9ucyk6CisgICAgICAgICogcGFn
ZS9ET01XaW5kb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93OjpkaXNwYXRjaEFs
bFBlbmRpbmdCZWZvcmVVbmxvYWRFdmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93
OjpkaXNwYXRjaEFsbFBlbmRpbmdVbmxvYWRFdmVudHMpOgorICAgICAgICAqIHBhZ2UvRXZlbnRI
YW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlVG91Y2hF
dmVudCk6CisgICAgICAgICogcGFnZS9GcmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZTo6aW5qZWN0VXNlclNjcmlwdHMpOgorICAgICAgICAqIHBhZ2UvUGFnZUdyb3VwLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlBhZ2VHcm91cDo6cGFnZUdyb3VwKToKKyAgICAgICAgKFdlYkNvcmU6
OlBhZ2VHcm91cDo6Y2xvc2VMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUdy
b3VwOjpjbGVhckxvY2FsU3RvcmFnZUZvckFsbE9yaWdpbnMpOgorICAgICAgICAoV2ViQ29yZTo6
UGFnZUdyb3VwOjpjbGVhckxvY2FsU3RvcmFnZUZvck9yaWdpbik6CisgICAgICAgIChXZWJDb3Jl
OjpQYWdlR3JvdXA6OnN5bmNMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUdy
b3VwOjphZGRVc2VyU2NyaXB0VG9Xb3JsZCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlR3JvdXA6
OmFkZFVzZXJTdHlsZVNoZWV0VG9Xb3JsZCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlR3JvdXA6
OnJlbW92ZVVzZXJTY3JpcHRGcm9tV29ybGQpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUdyb3Vw
OjpyZW1vdmVVc2VyU3R5bGVTaGVldEZyb21Xb3JsZCk6CisgICAgICAgICogcGFnZS9QYWdlU2Vy
aWFsaXplci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlU2VyaWFsaXplcjo6dXJsRm9yQmxh
bmtGcmFtZSk6CisgICAgICAgICogcGFnZS9TZWN1cml0eVBvbGljeS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTZWN1cml0eVBvbGljeTo6YWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkpOgor
ICAgICAgICAoV2ViQ29yZTo6U2VjdXJpdHlQb2xpY3k6OnJlbW92ZU9yaWdpbkFjY2Vzc1doaXRl
bGlzdEVudHJ5KToKKyAgICAgICAgKiBwYWdlL1NldHRpbmdzLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OnNldEdlbmVyaWNGb250RmFtaWx5TWFwKToKKyAgICAgICAgKFdlYkNvcmU6OmdldEdlbmVy
aWNGb250RmFtaWx5Rm9yU2NyaXB0KToKKyAgICAgICAgKiBwYWdlL1NwZWVjaElucHV0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNwZWVjaElucHV0OjpyZWdpc3Rlckxpc3RlbmVyKToKKyAgICAg
ICAgKiBwYWdlL1RvdWNoRGlzYW1iaWd1YXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Zmlu
ZEdvb2RUb3VjaFRhcmdldHMpOgorICAgICAgICAqIHBhZ2UvV2luZG93RmVhdHVyZXMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6V2luZG93RmVhdHVyZXM6OmJvb2xGZWF0dXJlKToKKyAgICAgICAg
KFdlYkNvcmU6OldpbmRvd0ZlYXR1cmVzOjpmbG9hdEZlYXR1cmUpOgorICAgICAgICAqIHBhZ2Uv
YW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QW5p
bWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnVwZGF0ZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2Vi
Q29yZTo6QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnN1c3BlbmRBbmltYXRpb25zRm9yRG9j
dW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnJl
c3VtZUFuaW1hdGlvbnNGb3JEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25D
b250cm9sbGVyUHJpdmF0ZTo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKToKKyAgICAgICAgKiBw
YWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q29tcG9zaXRlQW5pbWF0aW9uOjpjbGVhclJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlVHJhbnNpdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6
Q29tcG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVLZXlmcmFtZUFuaW1hdGlvbnMpOgorICAgICAgICAo
V2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjphbmltYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbXBvc2l0ZUFuaW1hdGlvbjo6Z2V0QW5pbWF0ZWRTdHlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDb21wb3NpdGVBbmltYXRpb246OnNldEFuaW1hdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpD
b21wb3NpdGVBbmltYXRpb246OnRpbWVUb05leHRTZXJ2aWNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbXBvc2l0ZUFuaW1hdGlvbjo6Z2V0QW5pbWF0aW9uRm9yUHJvcGVydHkpOgorICAgICAgICAo
V2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjpzdXNwZW5kQW5pbWF0aW9ucyk6CisgICAgICAg
IChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb246OnJlc3VtZUFuaW1hdGlvbnMpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjpvdmVycmlkZUltcGxpY2l0QW5pbWF0aW9u
cyk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb246OnJlc3VtZU92ZXJyaWRk
ZW5JbXBsaWNpdEFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0
aW9uOjppc0FuaW1hdGluZ1Byb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFu
aW1hdGlvbjo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKToKKyAgICAgICAgKiBwbGF0Zm9ybS9M
YW5ndWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpsYW5ndWFnZURpZENoYW5nZSk6CisgICAg
ICAgICogcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpN
SU1FVHlwZVJlZ2lzdHJ5OjpnZXROb3JtYWxpemVkTUlNRVR5cGUpOgorICAgICAgICAqIHBsYXRm
b3JtL2F1ZGlvL0hSVEZFbGV2YXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0Q29uY2F0
ZW5hdGVkSW1wdWxzZVJlc3BvbnNlc0ZvclN1YmplY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2Js
YWNrYmVycnkvQ29va2llTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVNYW5h
Z2VyOjpnZW5lcmF0ZUh0bWxGcmFnbWVudEZvckNvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6
Q29va2llTWFuYWdlcjo6cmVtb3ZlQWxsQ29va2llcyk6CisgICAgICAgICogcGxhdGZvcm0vYmxh
Y2tiZXJyeS9Db29raWVNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llTWFwOjpyZW1v
dmVPbGRlc3RDb29raWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llTWFwOjpnZXRBbGxDaGls
ZENvb2tpZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2NmL0JpbmFyeVByb3BlcnR5TGlzdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpCaW5hcnlQcm9wZXJ0eUxpc3RQbGFuOjp3cml0ZUludGVnZXJB
cnJheSk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJIVFRQTG9hZElu
Zm8uY3BwOgorICAgICAgICAoV2ViS2l0OjphZGRIZWFkZXIpOgorICAgICAgICAqIHBsYXRmb3Jt
L2Nocm9taXVtL3N1cHBvcnQvV2ViVVJMUmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YlVSTFJlcXVlc3Q6OnZpc2l0SFRUUEhlYWRlckZpZWxkcyk6CisgICAgICAgICogcGxhdGZvcm0v
Y2hyb21pdW0vc3VwcG9ydC9XZWJVUkxSZXNwb25zZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YlVSTFJlc3BvbnNlOjphZGRIVFRQSGVhZGVyRmllbGQpOgorICAgICAgICAoV2ViS2l0OjpXZWJV
UkxSZXNwb25zZTo6dmlzaXRIVFRQSGVhZGVyRmllbGRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9EaXNwbGF5UmVmcmVzaE1vbml0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheVJlZnJlc2hNb25pdG9yTWFuYWdlcjo6ZW5zdXJlTW9uaXRvckZvckNsaWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5UmVmcmVzaE1vbml0b3JNYW5hZ2VyOjp1bnJlZ2lzdGVyQ2xp
ZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0VmVydGljYWxEYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dENhY2hlOjpyZWxlYXNlRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpw
dXJnZUluYWN0aXZlRm9udERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dseXBo
UGFnZVRyZWVOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoUGFnZVRyZWVOb2RlOjp0
cmVlR2x5cGhQYWdlQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6R2x5cGhQYWdlVHJlZU5vZGU6
OnBhZ2VDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaFBhZ2VUcmVlTm9kZTo6cHJ1bmVU
cmVlQ3VzdG9tRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R2x5cGhQYWdlVHJlZU5vZGU6
OnBydW5lVHJlZUZvbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoUGFnZVRyZWVOb2Rl
OjpwcnVuZUN1c3RvbUZvbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoUGFnZVRyZWVO
b2RlOjpwcnVuZUZvbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoUGFnZVRyZWVOb2Rl
OjpzaG93U3VidHJlZSk6CisgICAgICAgIChzaG93R2x5cGhQYWdlVHJlZXMpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlRpbGVkQmFja2luZ1N0b3JlOjp1cGRhdGVUaWxlQnVmZmVycyk6CisgICAgICAgIChXZWJD
b3JlOjpUaWxlZEJhY2tpbmdTdG9yZTo6cmVzaXplRWRnZVRpbGVzKToKKyAgICAgICAgKFdlYkNv
cmU6OlRpbGVkQmFja2luZ1N0b3JlOjpzZXRLZWVwUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvYXZmb3VuZGF0aW9uL2NmL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNG
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFWRldyYXBwZXI6OmF2ZldyYXBwZXJGb3JDYWxsYmFj
a0NvbnRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJU
aWxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyOjpsYXllclZpc2liaWxpdHlD
aGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXI6OnVwbG9hZFRleHR1cmVzSWZO
ZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlcjo6YWRkVGlsZUpvYik6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllclRpbGVyOjpkZWxldGVUZXh0dXJlcyk6CisgICAgICAgIChXZWJD
b3JlOjpMYXllclRpbGVyOjpwcnVuZVRleHR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
VGlsZXI6OmJpbmRDb250ZW50c1RleHR1cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2JsYWNrYmVycnkvVGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQ6OnRleHR1cmVGb3JUaWxlZENv
bnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFk
Ojp0ZXh0dXJlRm9yQ29sb3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBo
aWNzTGF5ZXJDQS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6Om1vdmVP
ckNvcHlBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6cGF1
c2VBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjpsYXllckRp
ZERpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjp1cGRhdGVHZW9t
ZXRyeSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZVRyYW5zZm9y
bSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUNoaWxkcmVuVHJh
bnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlTWFza3NU
b0JvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUNvbnRl
bnRzVmlzaWJpbGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnVwZGF0
ZUNvbnRlbnRzT3BhcXVlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6dXBk
YXRlQmFja2ZhY2VWaXNpYmlsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJD
QTo6dXBkYXRlRmlsdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OmVu
c3VyZVN0cnVjdHVyYWxMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6
OnVwZGF0ZUxheWVyRHJhd3NDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXJDQTo6dXBkYXRlQ29udGVudHNJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xh
eWVyQ0E6OnVwZGF0ZUNvbnRlbnRzUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xh
eWVyQ0E6OnVwZGF0ZU1hc2tMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVy
Q0E6OnVwZGF0ZUxheWVyQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xh
eWVyQ0E6OnNldEFuaW1hdGlvbk9uTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NM
YXllckNBOjpyZW1vdmVDQUFuaW1hdGlvbkZyb21MYXllcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0xheWVyQ0E6OnBhdXNlQ0FBbmltYXRpb25PbkxheWVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXJDQTo6c3VzcGVuZEFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NMYXllckNBOjpyZXN1bWVBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJDQTo6ZmluZE9yTWFrZUNsb25lKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXJDQTo6c2V0T3BhY2l0eUludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXJDQTo6dXBkYXRlT3BhY2l0eU9uTGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhL21hYy9UaWxlQ2FjaGUubW06CisgICAgICAgIChXZWJDb3JlOjpUaWxlQ2Fj
aGU6On5UaWxlQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZUNhY2hlOjpzZXROZWVkc0Rp
c3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZUNhY2hlOjpzZXRTY2FsZSk6CisgICAgICAg
IChXZWJDb3JlOjpUaWxlQ2FjaGU6OnNldEFjY2VsZXJhdGVzRHJhd2luZyk6CisgICAgICAgIChX
ZWJDb3JlOjpUaWxlQ2FjaGU6OnNldFRpbGVEZWJ1Z0JvcmRlcldpZHRoKToKKyAgICAgICAgKFdl
YkNvcmU6OlRpbGVDYWNoZTo6c2V0VGlsZURlYnVnQm9yZGVyQ29sb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6VGlsZUNhY2hlOjpyZXZhbGlkYXRlVGlsZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwOgorICAgICAgICAoUGxhdGZvcm1D
QUxheWVyOjphbmltYXRpb25TdGFydGVkKToKKyAgICAgICAgKHJlc3VibWl0QWxsQW5pbWF0aW9u
cyk6CisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXI6OmFuaW1hdGlvbkZvcktleSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENhY2hlQ2hyb21pdW1XaW4uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6TG9va3VwQWx0TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpmb250
Q29udGFpbnNDaGFyYWN0ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ZvbnRVdGlsc0Nocm9taXVtV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldERlcml2ZWRG
b250RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0
ZXJHbG9iYWxDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUZpbHRlckdsb2Jh
bENvbnRleHQ6On5DdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OkN1c3RvbUZpbHRlckdsb2JhbENvbnRleHQ6OmdldFZhbGlkYXRlZFByb2dyYW0pOgorICAgICAg
ICAoV2ViQ29yZTo6Q3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dDo6cmVtb3ZlVmFsaWRhdGVkUHJv
Z3JhbSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJQ
cm9ncmFtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUZpbHRlclByb2dyYW06Om5vdGlm
eUNsaWVudHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6
U2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRDYWNoZWRIYXJmYnV6ekZhY2UpOgorICAg
ICAgICAoV2ViQ29yZTo6cmVsZWFzZUNhY2hlZEhhcmZidXp6RmFjZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpOR0ZhY2UuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SGFyZkJ1enpOR0ZhY2U6OkhhcmZCdXp6TkdGYWNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkhhcmZCdXp6TkdGYWNlOjp+SGFyZkJ1enpOR0ZhY2UpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YUNvcmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNpbXBsZUZvbnREYXRhOjpnZXRDRlN0cmluZ0F0dHJpYnV0ZXMpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YU1hYy5tbToKKyAgICAgICAgKFdlYkNv
cmU6OlNpbXBsZUZvbnREYXRhOjpjYW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENv
bW1vbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RPcGVuR0xDb21tb246Omdl
dFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjb21waWxlU2hhZGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjptYXBwZWRTeW1ib2xOYW1lKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJpdik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVySW5mb0xvZyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVyU291cmNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9vcGVudmcvRUdMRGlzcGxheU9wZW5WRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpF
R0xEaXNwbGF5T3BlblZHOjp+RUdMRGlzcGxheU9wZW5WRyk6CisgICAgICAgIChXZWJDb3JlOjpF
R0xEaXNwbGF5T3BlblZHOjpkZXN0cm95U3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpFR0xE
aXNwbGF5T3BlblZHOjpjb250ZXh0Rm9yU3VyZmFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyR0xEYXRhOjpTaGFyZWRHTERhdGE6OmN1cnJlbnRTaGFyZWRHTERhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMRGF0YTo6U2hhcmVkR0xEYXRhOjp+U2hhcmVk
R0xEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
clNoYWRlck1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXI6OmdldFNoYWRlclByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlclNoYWRlck1hbmFnZXI6OmdldFNoYWRlckZvckZpbHRlcik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luY2UvRm9udFBsYXRmb3JtRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGaXhlZFNpemVGb250RGF0YTo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvRGF0
YU9iamVjdEd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhT2JqZWN0R3RrOjpmb3JDbGlw
Ym9hcmQpOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9HdGtEcmFnQW5kRHJvcEhlbHBlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpHdGtEcmFnQW5kRHJvcEhlbHBlcjo6aGFuZGxlR2V0RHJhZ0Rh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6R3RrRHJhZ0FuZERyb3BIZWxwZXI6OmhhbmRsZURyYWdM
ZWF2ZSk6CisgICAgICAgIChXZWJDb3JlOjpHdGtEcmFnQW5kRHJvcEhlbHBlcjo6aGFuZGxlRHJh
Z01vdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHdGtEcmFnQW5kRHJvcEhlbHBlcjo6aGFuZGxl
RHJhZ0RhdGFSZWNlaXZlZCk6CisgICAgICAgIChXZWJDb3JlOjpHdGtEcmFnQW5kRHJvcEhlbHBl
cjo6aGFuZGxlRHJhZ0Ryb3ApOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9SZWRpcmVjdGVkWENv
bXBvc2l0ZVdpbmRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmaWx0ZXJYRGFtYWdlRXZlbnQp
OgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0azMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Z3RrU3R5bGVDaGFuZ2VkQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6Z2V0
U3R5bGVDb250ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMu
bW06CisgICAgICAgICgrW1dlYlNjcm9sbGJhclByZWZzT2JzZXJ2ZXIgYXBwZWFyYW5jZVByZWZz
Q2hhbmdlZDpdKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWxTdG9yYWdl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyZWRlbnRpYWxTdG9yYWdlOjpzZXQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q3JlZGVudGlhbFN0b3JhZ2U6OmdldCk6CisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9IVFRQSGVhZGVyTWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUVFBIZWFkZXJN
YXA6OmNvcHlEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkhUVFBIZWFkZXJNYXA6OmdldCk6Cisg
ICAgICAgICogcGxhdGZvcm0vbmV0d29yay9NSU1FSGVhZGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Ok1JTUVIZWFkZXI6OnBhcnNlSGVhZGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3Jr
L1Jlc291cmNlSGFuZGxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpj
cmVhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjphZGRIVFRQSGVhZGVy
RmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6YWRkSFRUUEhl
YWRlckZpZWxkcyk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291
cmNlUmVxdWVzdEJsYWNrQmVycnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0Ojp0YXJnZXRUeXBlRnJvbU1pbWVUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdDo6aW5pdGlhbGl6ZVBsYXRmb3JtUmVxdWVzdCk6CisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1h
a2VGaW5hbFJlcXVlc3QpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VS
ZXF1ZXN0Q0ZOZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2V0SGVhZGVyRmllbGRzKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlTWFuYWdlcjo6aW5pdGlhbGl6ZUhhbmRs
ZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VSZXF1ZXN0TWFjLm1t
OgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Ojpkb1VwZGF0ZVBsYXRmb3JtUmVx
dWVzdCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9xdC9SZXNvdXJjZVJlcXVlc3RRdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q6OnRvTmV0d29ya1JlcXVlc3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6c2VuZFJlcXVlc3RDYWxsYmFjayk6CisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZUhhbmRsZTo6c2V0Q2xpZW50Q2VydGlmaWNhdGUpOgorICAgICAgICAqIHBs
YXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdDo6dXBkYXRlU291cE1lc3NhZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0Ojp0b1NvdXBNZXNzYWdlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXNwb25zZVNvdXAuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVzb3VyY2VSZXNwb25zZTo6dG9Tb3VwTWVzc2FnZSk6CisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay93aW4vUmVzb3VyY2VIYW5kbGVXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVz
b3VyY2VIYW5kbGU6OnN0YXJ0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9SdW5Mb29wUXQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UnVuTG9vcDo6VGltZXJCYXNlOjp0aW1lckZpcmVkKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS90ZXh0L0xvY2FsZVRvU2NyaXB0TWFwcGluZ0RlZmF1bHQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6c2NyaXB0TmFtZVRvQ29kZSk6CisgICAgICAgIChXZWJDb3JlOjps
b2NhbGVUb1NjcmlwdENvZGVGb3JGb250U2VsZWN0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS90
ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBydW5lQmxh
Y2tsaXN0ZWRDb2RlY3MpOgorICAgICAgICAoV2ViQ29yZTo6ZHVtcFRleHRFbmNvZGluZ05hbWVN
YXApOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvdHJhbnNjb2Rlci9Gb250VHJhbnNjb2Rlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGb250VHJhbnNjb2Rlcjo6Y29udmVydGVyVHlwZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vdGV4dC93aW4vVGV4dENvZGVjV2luLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Okxhbmd1YWdlTWFuYWdlcjo6TGFuZ3VhZ2VNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNv
cmU6OmdldENvZGVQYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY1dpbjo6cmVnaXN0
ZXJFeHRlbmRlZEVuY29kaW5nTmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjV2lu
OjpyZWdpc3RlckV4dGVuZGVkQ29kZWNzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY1dp
bjo6ZW51bWVyYXRlU3VwcG9ydGVkRW5jb2RpbmdzKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4v
Q2xpcGJvYXJkVXRpbGl0aWVzV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldERhdGFNYXBJ
dGVtKToKKyAgICAgICAgKFdlYkNvcmU6OmdldENsaXBib2FyZERhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6c2V0Q2xpcGJvYXJkRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vd2luL0NsaXBib2Fy
ZFdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRXaW46OnR5cGVzKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpj
YWNoZWRTdG9yYWdlRGlyZWN0b3J5KToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vUnVuTG9vcFdp
bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSdW5Mb29wOjpUaW1lckJhc2U6OnRpbWVyRmlyZWQp
OgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9XQ0RhdGFPYmplY3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6V0NEYXRhT2JqZWN0OjpjcmVhdGVJbnN0YW5jZSk6CisgICAgICAgICogcGxhdGZvcm0v
d2luY2UvTUlNRVR5cGVSZWdpc3RyeVdpbkNFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1JTUVU
eXBlUmVnaXN0cnk6OmdldFByZWZlcnJlZEV4dGVuc2lvbkZvck1JTUVUeXBlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS93eC9Db250ZXh0TWVudVd4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
eHRNZW51OjphcHBlbmRJdGVtKToKKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNlOjpyZWZyZXNoKToKKyAgICAgICAg
KFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNlOjpNSU1FVHlwZUZvckV4dGVuc2lvbik6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6cmVtb3ZlKToKKyAgICAgICAgKiBwbHVnaW5zL1Bs
dWdpbk1haW5UaHJlYWRTY2hlZHVsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luTWFp
blRocmVhZFNjaGVkdWxlcjo6c2NoZWR1bGVDYWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
bk1haW5UaHJlYWRTY2hlZHVsZXI6OmRpc3BhdGNoQ2FsbHMpOgorICAgICAgICAqIHBsdWdpbnMv
UGx1Z2luU3RyZWFtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblN0cmVhbTo6c3RhcnRT
dHJlYW0pOgorICAgICAgICAqIHBsdWdpbnMvYmxhY2tiZXJyeS9QbHVnaW5EYXRhQmxhY2tCZXJy
eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhOjppbml0UGx1Z2lucyk6CisgICAg
ICAgICogcGx1Z2lucy93eC9QbHVnaW5EYXRhV3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luRGF0YTo6aW5pdFBsdWdpbnMpOgorICAgICAgICAqIHJlbmRlcmluZy9FeGNsdXNpb25TaGFw
ZUluc2lkZUluZm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXhjbHVzaW9uU2hhcGVJbnNpZGVJ
bmZvOjplbnN1cmVFeGNsdXNpb25TaGFwZUluc2lkZUluZm9Gb3JSZW5kZXJCbG9jayk6CisgICAg
ICAgICogcmVuZGVyaW5nL0Zsb3dUaHJlYWRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZsb3dUaHJlYWRDb250cm9sbGVyOjp1bnJlZ2lzdGVyTmFtZWRGbG93Q29udGVudE5vZGUp
OgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OklubGluZUZsb3dCb3g6OnJlcXVpcmVzSWRlb2dyYXBoaWNCYXNlbGluZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbmxpbmVGbG93Qm94OjphZGRUZXh0Qm94VmlzdWFsT3ZlcmZsb3cpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCbG9jazo6Y2xlYXJGbG9hdHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9ja0xp
bmVMYXlvdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2V0TG9naWNhbFdpZHRoRm9yVGV4dFJ1
bik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlUXVhbGl0eUNvbnRyb2xsZXI6OmhpZ2hRdWFsaXR5UmVwYWludFRp
bWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VRdWFsaXR5Q29udHJvbGxlcjo6c2hv
dWxkUGFpbnRBdExvd1F1YWxpdHkpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJDb3VudGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckNvdW50ZXI6OmRlc3Ryb3lDb3VudGVyTm9k
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQ291bnRlcjo6ZGVzdHJveUNvdW50ZXJOb2Rl
KToKKyAgICAgICAgKFdlYkNvcmU6OnVwZGF0ZUNvdW50ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckNvdW50ZXI6OnJlbmRlcmVyU3R5bGVDaGFuZ2VkKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyRmxvd1RocmVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhy
ZWFkOjpzZXRSZWdpb25SYW5nZUZvckJveCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93
VGhyZWFkOjpnZXRSZWdpb25SYW5nZUZvckJveCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwYWludCk6CisgICAg
ICAgIChXZWJDb3JlOjpwZXJmb3JtT3ZlcmxhcFRlc3RzKToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyTGF5ZXJGaWx0ZXJJbmZvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
RmlsdGVySW5mbzo6ZmlsdGVySW5mb0ZvclJlbmRlckxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyRmlsdGVySW5mbzo6Y3JlYXRlRmlsdGVySW5mb0ZvclJlbmRlckxheWVySWZO
ZWVkZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTmFtZWRGbG93VGhyZWFkOjpkZXBlbmRzT24pOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTmFtZWRGbG93VGhyZWFkOjpwdXNoRGVwZW5kZW5jaWVzKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclJlZ2lvbjo6c2V0UmVuZGVyQm94UmVnaW9uSW5mbyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJSZWdpb246OnNldFJlZ2lvbk9iamVjdHNSZWdpb25TdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJSZWdpb246OnJlc3RvcmVSZWdpb25PYmplY3RzT3JpZ2luYWxTdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZWdpb246OmNvbXB1dGVDaGlsZHJlblN0eWxlSW5S
ZWdpb24pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpjYWNoZWRDb2xsYXBzZWRCb3JkZXIp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lTWFjOjpzeXN0ZW1Db2xvcik6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlclZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6c2VsZWN0aW9uQm91
bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OnNldFNlbGVjdGlvbik6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXaWRn
ZXRIaWVyYXJjaHlVcGRhdGVzU3VzcGVuc2lvblNjb3BlOjptb3ZlV2lkZ2V0cyk6CisgICAgICAg
ICogcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6Um9vdElu
bGluZUJveDo6YXNjZW50QW5kRGVzY2VudEZvckJveCk6CisgICAgICAgICogcmVuZGVyaW5nL1Zl
cnRpY2FsUG9zaXRpb25DYWNoZS5oOgorICAgICAgICAoV2ViQ29yZTo6VmVydGljYWxQb3NpdGlv
bkNhY2hlOjpnZXQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdJbmxpbmVUZXh0OjpjaGFyYWN0ZXJT
dGFydHNOZXdUZXh0Q2h1bmspOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VGaWx0
ZXI6OnByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdSZXNvdXJjZUdyYWRpZW50OjphcHBseVJlc291cmNlKToKKyAgICAgICAgKiByZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdSZXNvdXJjZVBhdHRlcm46OmFwcGx5UmVzb3VyY2UpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9zdmcvU1ZHUmVzb3VyY2VzQ2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVzb3Vy
Y2VzQ2FjaGU6OnJlc291cmNlRGVzdHJveWVkKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NW
R1Jvb3RJbmxpbmVCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6c3dhcEl0ZW1zSW5MYXlvdXRB
dHRyaWJ1dGVzKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1
dGVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzOjpkdW1w
KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXI6
OmJ1aWxkQ2hhcmFjdGVyRGF0YU1hcCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0TGF5b3V0
QXR0cmlidXRlc0J1aWxkZXI6OmZpbGxDaGFyYWN0ZXJEYXRhTWFwKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
VGV4dExheW91dEVuZ2luZTo6bGF5b3V0VGV4dE9uTGluZU9yUGF0aCk6CisgICAgICAgICogcmVu
ZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljc0J1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHVGV4dE1ldHJpY3NCdWlsZGVyOjptZWFzdXJlVGV4dFJlbmRlcmVyKToKKyAgICAgICAgKiBz
dG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJl
YVN5bmM6OnN5bmNUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhU3lu
Yzo6cGVyZm9ybUltcG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYVN5bmM6OnN5
bmMpOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZU1hcC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTdG9yYWdlTWFwOjprZXkpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU1hcDo6c2V0SXRl
bSk6CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNlSW1wbDo6bG9jYWxTdG9yYWdlTmFtZXNwYWNlKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpjb3B5KToKKyAgICAgICAg
KFdlYkNvcmU6OlN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpjbG9zZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTdG9yYWdlTmFtZXNwYWNlSW1wbDo6Y2xlYXJBbGxPcmlnaW5zRm9yRGVsZXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6U3RvcmFnZU5hbWVzcGFjZUltcGw6OnN5bmMpOgorICAgICAgICAqIHN2
Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRG9jdW1l
bnRFeHRlbnNpb25zOjpyZW1vdmVBbmltYXRpb25FbGVtZW50RnJvbVRhcmdldCk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlbW92ZUFsbEFuaW1hdGlvbkVsZW1l
bnRzRnJvbVRhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdEb2N1bWVudEV4dGVuc2lvbnM6
OmFkZFBlbmRpbmdSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdEb2N1bWVudEV4dGVu
c2lvbnM6OmlzRWxlbWVudFBlbmRpbmdSZXNvdXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
RG9jdW1lbnRFeHRlbnNpb25zOjpyZW1vdmVFbGVtZW50RnJvbVBlbmRpbmdSZXNvdXJjZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpzZXRPZkVsZW1lbnRzUmVm
ZXJlbmNpbmdUYXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRG9jdW1lbnRFeHRlbnNpb25z
OjpyZW1vdmVBbGxUYXJnZXRSZWZlcmVuY2VzRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlbW92ZUFsbEVsZW1lbnRSZWZlcmVuY2VzRm9yVGFy
Z2V0KToKKyAgICAgICAgKiBzdmcvU1ZHRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdFbGVtZW50Ojp+U1ZHRWxlbWVudCk6CisgICAgICAgICogc3ZnL2FuaW1hdGlvbi9TTUlMVGlt
ZUNvbnRhaW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTTUlMVGltZUNvbnRhaW5lcjo6c2V0
RWxhcHNlZCk6CisgICAgICAgIChXZWJDb3JlOjpTTUlMVGltZUNvbnRhaW5lcjo6dXBkYXRlQW5p
bWF0aW9ucyk6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR0ltYWdlQ2FjaGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2VDYWNoZTo6flNWR0ltYWdlQ2FjaGUpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHSW1hZ2VDYWNoZTo6cmVtb3ZlQ2xpZW50RnJvbUNhY2hlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ltYWdlQ2FjaGU6OnJlcXVlc3RlZFNpemVBbmRTY2FsZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHSW1hZ2VDYWNoZTo6aW1hZ2VDb250ZW50Q2hhbmdlZCk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdJbWFnZUNhY2hlOjpyZWRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
SW1hZ2VDYWNoZTo6bG9va3VwT3JDcmVhdGVCaXRtYXBJbWFnZUZvclJlbmRlcmVyKToKKyAgICAg
ICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmg6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjplZmZlY3RSZWZlcmVuY2VzKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmFkZEJ1aWx0aW5FZmZlY3RzKToKKyAgICAgICAgKiBz
dmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5Lmg6CisgICAgICAgIChXZWJDb3JlOjpT
VkdBbmltYXRlZFByb3BlcnR5Ojp+U1ZHQW5pbWF0ZWRQcm9wZXJ0eSk6CisgICAgICAgICogc3Zn
L3Byb3BlcnRpZXMvU1ZHQXR0cmlidXRlVG9Qcm9wZXJ0eU1hcC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdBdHRyaWJ1dGVUb1Byb3BlcnR5TWFwOjphZGRQcm9wZXJ0aWVzKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0F0dHJpYnV0ZVRvUHJvcGVydHlNYXA6OnN5bmNocm9uaXplUHJvcGVydGll
cyk6CisgICAgICAgICogd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OldvcmtlckNvbnRleHQ6Omhhc1BlbmRpbmdBY3Rpdml0eSk6CisgICAgICAgICogd29ya2Vy
cy9Xb3JrZXJFdmVudFF1ZXVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckV2ZW50UXVl
dWU6OmNsb3NlKToKKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OnNldFJlcXVlc3RIZWFkZXJJbnRlcm5hbCk6CisgICAg
ICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6Z2V0QWxsUmVzcG9uc2VIZWFkZXJzKToKKyAg
ICAgICAgKiB4bWwvWFBhdGhGdW5jdGlvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6
OmNyZWF0ZUZ1bmN0aW9uKToKKyAgICAgICAgKiB4bWwvWFBhdGhQYXJzZXIuY3BwOgorICAgICAg
ICAoaXNBeGlzTmFtZSk6CisgICAgICAgICogeG1sL1hTTFRQcm9jZXNzb3JMaWJ4c2x0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OnhzbHRQYXJhbUFycmF5RnJvbVBhcmFtZXRlck1hcCk6CisgICAg
ICAgICogeG1sL1hTTFRQcm9jZXNzb3JRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYU0xUUHJv
Y2Vzc29yOjp0cmFuc2Zvcm1Ub1N0cmluZyk6CisKIDIwMTItMTAtMDUgIERpcmsgU2NodWx6ZSAg
PGtyaXRAd2Via2l0Lm9yZz4KIAogICAgICAgICBTVkcgcmFkaWFsR3JhZGllbnQgc2hvdWxkIHN1
cHBvcnQgJ2ZyJyBmb3IgZm9jYWwgcmFkaXVzIChqdXN0IGxpa2UgQ2FudmFzKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9DaGFuZ2VMb2cKaW5kZXggNzYxMDE3OTQ1OTFmODFiY2ViZmUwYWUxNmUwZGU1NTZk
NThmMDJlOS4uNmFjNzBkYTQ5NTE3MTJmZmNlZmZiOThhOTBhMjc5NDJkNGU5OTExZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0L2JsYWNrYmVycnkvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzAgQEAKKzIwMTItMTAtMDcgIENh
aW8gTWFyY2VsbyBkZSBPbGl2ZWlyYSBGaWxobyAgPGNhaW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9y
Zz4KKworICAgICAgICBSZW5hbWUgZmlyc3Qvc2Vjb25kIHRvIGtleS92YWx1ZSBpbiBIYXNoTWFw
IGl0ZXJhdG9ycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9ODI3ODQKKworICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KKworICAgICAgICAq
IEFwaS9CYWNraW5nU3RvcmUuY3BwOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpCYWNr
aW5nU3RvcmVQcml2YXRlOjpzZXRCYWNraW5nU3RvcmVSZWN0KToKKyAgICAgICAgKEJsYWNrQmVy
cnk6OldlYktpdDo6QmFja2luZ1N0b3JlUHJpdmF0ZTo6dmlzaWJsZVRpbGVzUmVjdCk6CisgICAg
ICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkJhY2tpbmdTdG9yZVByaXZhdGU6OnJlc2V0VGlsZXMp
OgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpCYWNraW5nU3RvcmVQcml2YXRlOjp1cGRh
dGVUaWxlcyk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkJhY2tpbmdTdG9yZVByaXZh
dGU6OnVwZGF0ZVRpbGVzRm9yU2Nyb2xsT3JOb3RSZW5kZXJlZFJlZ2lvbik6CisgICAgICAgIChC
bGFja0JlcnJ5OjpXZWJLaXQ6OkJhY2tpbmdTdG9yZVByaXZhdGU6Om1hcEZyb21UcmFuc2Zvcm1l
ZENvbnRlbnRzVG9UaWxlcyk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9u
UHJlc2VudGVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb3RpZmljYXRpb25QcmVzZW50
ZXJJbXBsOjpjYW5jZWwpOgorICAgICAgICAoV2ViQ29yZTo6Tm90aWZpY2F0aW9uUHJlc2VudGVy
SW1wbDo6b25QZXJtaXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vdGlmaWNhdGlvblByZXNl
bnRlckltcGw6Om5vdGlmaWNhdGlvbkNsaWNrZWQpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0
L1VzZXJNZWRpYUNsaWVudEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VXNlck1lZGlhQ2xp
ZW50SW1wbDo6Y2FuY2VsVXNlck1lZGlhUmVxdWVzdCk6CisgICAgICAgICogV2ViS2l0U3VwcG9y
dC9BYm91dERhdGEuY3BwOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpkdW1wSlNDVHlw
ZUNvdW50U2V0VG9UYWJsZUhUTUwpOgorICAgICAgICAqIFdlYktpdFN1cHBvcnQvRnJhbWVMYXll
cnMuY3BwOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpGcmFtZUxheWVyczo6cmVtb3Zl
TGF5ZXJCeUZyYW1lKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6RnJhbWVMYXllcnM6
OmNvbW1pdE9uV2ViS2l0VGhyZWFkKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6RnJh
bWVMYXllcnM6OmNhbGN1bGF0ZVJvb3RMYXllcik6CisKIDIwMTItMTAtMDUgIFJvYiBCdWlzICA8
cmJ1aXNAcmltLmNvbT4KIAogICAgICAgICBbQmxhY2tCZXJyeV0gSW1wbGVtZW50IFRlc3RSdW5u
ZXIuc2V0TW9ja0RldmljZU9yaWVudGF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IDcwNzkyMGRlYzI2YTYxMDI1YjZmNzJjOTNiZGY3ZjFiZGUzNmI5ZGQuLmQ5NDIwZTk2MjQwYWM1
OWIwNmJlM2RiMzU2MDY4NGRjZTNkNzEzODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjAgQEAKKzIwMTItMTAtMDcgIENhaW8gTWFyY2VsbyBkZSBPbGl2ZWlyYSBGaWxo
byAgPGNhaW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KKworICAgICAgICBSZW5hbWUgZmlyc3Qv
c2Vjb25kIHRvIGtleS92YWx1ZSBpbiBIYXNoTWFwIGl0ZXJhdG9ycworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI3ODQKKworICAgICAgICBSZXZpZXdl
ZCBieSBFcmljIFNlaWRlbC4KKworICAgICAgICAqIHNyYy9XZWJHZW9sb2NhdGlvblBlcm1pc3Np
b25SZXF1ZXN0TWFuYWdlci5jcHA6CisgICAgICAgIChXZWJHZW9sb2NhdGlvblBlcm1pc3Npb25S
ZXF1ZXN0TWFuYWdlcjo6cmVtb3ZlKToKKyAgICAgICAgKiBzcmMvV2ViSURCTWV0YWRhdGEuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJJREJNZXRhZGF0YTo6V2ViSURCTWV0YWRhdGEpOgorICAg
ICAgICAqIHNyYy9XZWJJbnRlbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnRlbnQ6OmV4
dHJhc1ZhbHVlKToKKyAgICAgICAgKiB0ZXN0cy9NZW1vcnlJbnN0cnVtZW50YXRpb25UZXN0LmNw
cDoKKyAgICAgICAgKiB0ZXN0cy9XZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyVGVzdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpURVNUX0YpOgorCiAyMDEyLTEwLTA2ICBJbHlhIFRpa2hvbm92
c2t5ICA8bG9pc2xvQGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBOTUkg
Zml4IFN0cmluZyBpbnN0cnVtZW50YXRpb24gdGhlIHdheSBpdCB3YXMgZGlzY3Vzc2VkIGluIFdL
OTc5NjQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJLaXQvZWZsL0NoYW5nZUxvZwppbmRleCAyNDAyZmZjYjdjOWU3MDRkZDQ4ZDMzNGY5YzNlOGI1
OGEzZjZlMmI2Li41OTBmOTM0MGJhMzZhOTI0NmVjZTFlMWIwZDM0OGM2NzBjZjNjZGExIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9l
ZmwvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTItMTAtMDcgIENhaW8gTWFyY2VsbyBk
ZSBPbGl2ZWlyYSBGaWxobyAgPGNhaW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KKworICAgICAg
ICBSZW5hbWUgZmlyc3Qvc2Vjb25kIHRvIGtleS92YWx1ZSBpbiBIYXNoTWFwIGl0ZXJhdG9ycwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI3ODQKKwor
ICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KKworICAgICAgICAqIFdlYkNvcmVTdXBw
b3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbC5jcHA6CisgICAgICAgIChEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRFZmw6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKToKKyAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNFZmwuY3BwOgorICAgICAgICAoUGxhdGZv
cm1TdHJhdGVnaWVzRWZsOjpnZXRQbHVnaW5JbmZvKToKKyAgICAgICAgKiBld2svZXdrX2ludGVu
dC5jcHA6CisgICAgICAgIChld2tfaW50ZW50X2V4dHJhX2dldCk6CisKIDIwMTItMTAtMDUgIENo
cmlzdG9waGUgRHVtZXogIDxjaHJpc3RvcGhlLmR1bWV6QGludGVsLmNvbT4KIAogICAgICAgICBb
RUZMXSBGaXggd2luZG93IHJlc2l6aW5nIC8gbW92aW5nIGluIFdLMSBhbmQgV0tUUgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9ndGsvQ2hh
bmdlTG9nCmluZGV4IDE2Zjg5Y2Y4MmY2ZTYwYjdlY2I1ZTIxZjZmNTc0ZGJlNjUwY2ZjM2YuLjE3
YzgwODhiMDc3NTVmODQ0MjY5NDQzNjFiYzE5M2NjZDdkNzI5N2IgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxNyBAQAorMjAxMi0xMC0wNyAgQ2FpbyBNYXJjZWxvIGRlIE9saXZlaXJhIEZp
bGhvICA8Y2Fpby5vbGl2ZWlyYUBvcGVuYm9zc2Eub3JnPgorCisgICAgICAgIFJlbmFtZSBmaXJz
dC9zZWNvbmQgdG8ga2V5L3ZhbHVlIGluIEhhc2hNYXAgaXRlcmF0b3JzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Mjc4NAorCisgICAgICAgIFJldmll
d2VkIGJ5IEVyaWMgU2VpZGVsLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1T
dHJhdGVnaWVzR3RrLmNwcDoKKyAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc0d0azo6Z2V0UGx1
Z2luSW5mbyk6CisgICAgICAgICogd2Via2l0L3dlYmtpdGZhdmljb25kYXRhYmFzZS5jcHA6Cisg
ICAgICAgICh3ZWJraXRGYXZpY29uRGF0YWJhc2VJbXBvcnRGaW5pc2hlZCk6CisgICAgICAgICog
d2Via2l0L3dlYmtpdHdlYnBsdWdpbi5jcHA6CisgICAgICAgICh3ZWJraXRfd2ViX3BsdWdpbl9n
ZXRfbWltZXR5cGVzKToKKwogMjAxMi0xMC0wNCAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2Vy
QGFwcGxlLmNvbT4KIAogICAgICAgICBGaW5hbCBwYXJ0IG9mICJzeW5jIiB0byAiZmx1c2giIHJl
bmFtaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0L21hYy9DaGFuZ2VMb2cKaW5kZXggNDE2Y2EyMGNkNWI3ZWU3YjFkNTJjZWQwMWUwYjAz
OWUzMTcyYWY1MS4uZjcwZDEzN2M2Y2I1N2ExNTkzM2ZhMmVlNDRiNDY1NjQzYmU4MmQyZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQv
bWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDEyLTEwLTA3ICBDYWlvIE1hcmNlbG8g
ZGUgT2xpdmVpcmEgRmlsaG8gIDxjYWlvLm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+CisKKyAgICAg
ICAgUmVuYW1lIGZpcnN0L3NlY29uZCB0byBrZXkvdmFsdWUgaW4gSGFzaE1hcCBpdGVyYXRvcnMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyNzg0CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCisKKyAgICAgICAgKiBIaXN0b3J5L1dl
Ykhpc3RvcnkubW06CisgICAgICAgICgtW1dlYkhpc3RvcnlQcml2YXRlIHJlbW92ZUl0ZW1Gcm9t
RGF0ZUNhY2hlczpdKToKKyAgICAgICAgKC1bV2ViSGlzdG9yeVByaXZhdGUgb3JkZXJlZExhc3RW
aXNpdGVkRGF5c10pOgorICAgICAgICAoV2ViSGlzdG9yeVdyaXRlcjo6V2ViSGlzdG9yeVdyaXRl
cik6CisgICAgICAgICogTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbToKKyAgICAgICAgKCtbV2Vi
Q29yZVN0YXRpc3RpY3MgamF2YVNjcmlwdFByb3RlY3RlZE9iamVjdFR5cGVDb3VudHNdKToKKyAg
ICAgICAgKCtbV2ViQ29yZVN0YXRpc3RpY3MgamF2YVNjcmlwdE9iamVjdFR5cGVDb3VudHNdKToK
KyAgICAgICAgKiBQbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyLm1tOgor
ICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyOjpob3N0Rm9yUGx1Z2lu
KToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlcjo6cGx1Z2luSG9z
dERpZWQpOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyOjpkaWRD
cmVhdGVXaW5kb3cpOgorICAgICAgICAqIFBsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9z
dFByb3h5Lm1tOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkhvc3RQcm94eTo6cGx1
Z2luSG9zdERpZWQpOgorICAgICAgICAqIFBsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5z
dGFuY2VQcm94eS5tbToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVBy
b3h5OjpMb2NhbE9iamVjdE1hcDo6aWRGb3JPYmplY3QpOgorICAgICAgICAoV2ViS2l0OjpOZXRz
Y2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OkxvY2FsT2JqZWN0TWFwOjpyZXRhaW4pOgorICAgICAg
ICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OkxvY2FsT2JqZWN0TWFwOjpy
ZWxlYXNlKToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpM
b2NhbE9iamVjdE1hcDo6Zm9yZ2V0KToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5J
bnN0YW5jZVByb3h5OjpkZXN0cm95KToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5J
bnN0YW5jZVByb3h5Ojp3ZWJGcmFtZURpZEZpbmlzaExvYWRXaXRoUmVhc29uKToKKyAgICAgICAg
KFdlYktpdDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpjYW5jZWxDaGVja0lmQWxsb3dl
ZFRvTG9hZFVSTCk6CisgICAgICAgICogUGx1Z2lucy9Ib3N0ZWQvUHJveHlJbnN0YW5jZS5tbToK
KyAgICAgICAgKFdlYktpdDo6UHJveHlJbnN0YW5jZTo6bWV0aG9kTmFtZWQpOgorICAgICAgICAo
V2ViS2l0OjpQcm94eUluc3RhbmNlOjpmaWVsZE5hbWVkKToKKyAgICAgICAgKiBQbHVnaW5zL1dl
Yk5ldHNjYXBlUGx1Z2luVmlldy5tbToKKyAgICAgICAgKC1bV2ViTmV0c2NhcGVQbHVnaW5WaWV3
IHN0b3BUaW1lcnNdKToKKyAgICAgICAgKC1bV2ViTmV0c2NhcGVQbHVnaW5WaWV3IHN0YXJ0VGlt
ZXJzXSk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViTm90aWZpY2F0aW9uQ2xpZW50Lm1t
OgorICAgICAgICAoV2ViTm90aWZpY2F0aW9uQ2xpZW50OjpzaG93KToKKyAgICAgICAgKFdlYk5v
dGlmaWNhdGlvbkNsaWVudDo6Y2xlYXJOb3RpZmljYXRpb25zKToKKyAgICAgICAgKFdlYk5vdGlm
aWNhdGlvbkNsaWVudDo6bm90aWZpY2F0aW9uT2JqZWN0RGVzdHJveWVkKToKKyAgICAgICAgKiBX
ZWJWaWV3L1dlYkhUTUxWaWV3Lm1tOgorICAgICAgICAoY29tbWFuZE5hbWVGb3JTZWxlY3Rvcik6
CisKIDIwMTItMTAtMDYgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAg
ICBXZWJLaXQvbWFjIHBhcnQgb2YgPHJkYXI6Ly9wcm9ibGVtLzEyNDQ2NTA3PiBbbWFjXSBXZWJL
aXQgY2xpZW50cyBjYW5ub3QgY2hhbmdlIHRoZSBiZWhhdmlvciBvZiB0ZXh0LXJlbmRlcmluZzog
YXV0bwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0L3F0L0NoYW5nZUxvZwppbmRleCA2NWFlMjY0OTlhMTlhYzQzNDNjN2I3ZTBkYzc5ZjRlYzA0
MDQ1MjIzLi4yOTU1ZDc4ZDE5ZjNmZjJhMmQxN2ZkMWFkYmQ3MWMxOGQ4NWIzNjk5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L3F0L0No
YW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDEyLTEwLTA3ICBDYWlvIE1hcmNlbG8gZGUgT2xp
dmVpcmEgRmlsaG8gIDxjYWlvLm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+CisKKyAgICAgICAgUmVu
YW1lIGZpcnN0L3NlY29uZCB0byBrZXkvdmFsdWUgaW4gSGFzaE1hcCBpdGVyYXRvcnMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyNzg0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCisKKyAgICAgICAgKiBBcGkvcXdlYnBhZ2UuY3Bw
OgorICAgICAgICAoZXh0cmFjdENvbnRlbnRUeXBlRnJvbVBsdWdpblZlY3Rvcik6CisgICAgICAg
ICogQXBpL3F3ZWJwbHVnaW5kYXRhYmFzZS5jcHA6CisgICAgICAgIChRV2ViUGx1Z2luSW5mbzo6
bWltZVR5cGVzKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNR
dC5jcHA6CisgICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNRdDo6Z2V0UGx1Z2luSW5mbyk6CisK
IDIwMTItMTAtMDUgIFNpbW9uIEhhdXNtYW5uICA8c2ltb24uaGF1c21hbm5AZGlnaWEuY29tPgog
CiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMzA0OTUuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cK
aW5kZXggNmQ1NjZjN2QyNjQxZDc2MGFkMmMzNGE1ODI0Y2VjZTE2MjY3YzZlOC4uNjYzYWRhZmQy
NTU3OGE1ZmJiOTEyM2U0Y2EzMmU0ZjdiOTY1MDJiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC93aW4vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDI4IEBACisyMDEyLTEwLTA3ICBDYWlvIE1hcmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gIDxj
YWlvLm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+CisKKyAgICAgICAgUmVuYW1lIGZpcnN0L3NlY29u
ZCB0byBrZXkvdmFsdWUgaW4gSGFzaE1hcCBpdGVyYXRvcnMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyNzg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
RXJpYyBTZWlkZWwuCisKKyAgICAgICAgKiBDT01Qcm9wZXJ0eUJhZy5oOgorICAgICAgICAoOjpS
ZWFkKToKKyAgICAgICAgKDo6R2V0UHJvcGVydHlJbmZvKToKKyAgICAgICAgKiBXZWJDb3JlU3Rh
dGlzdGljcy5jcHA6CisgICAgICAgIChXZWJDb3JlU3RhdGlzdGljczo6amF2YVNjcmlwdFByb3Rl
Y3RlZE9iamVjdFR5cGVDb3VudHMpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYlBsYXRm
b3JtU3RyYXRlZ2llcy5jcHA6CisgICAgICAgIChXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmdldFBs
dWdpbkluZm8pOgorICAgICAgICAqIFdlYkhpc3RvcnkuY3BwOgorICAgICAgICAoV2ViSGlzdG9y
eTo6cmVtb3ZlSXRlbUZyb21EYXRlQ2FjaGVzKToKKyAgICAgICAgKiBXZWJLaXRDT01BUEkuY3Bw
OgorICAgICAgICAoY2xhc3NGYWN0b3J5KToKKyAgICAgICAgKiBXZWJLaXRTdGF0aXN0aWNzLmNw
cDoKKyAgICAgICAgKFdlYktpdFN0YXRpc3RpY3M6OmNvbUNsYXNzTmFtZUNvdW50cyk6CisgICAg
ICAgICogV2ViTm90aWZpY2F0aW9uQ2VudGVyLmNwcDoKKyAgICAgICAgKFdlYk5vdGlmaWNhdGlv
bkNlbnRlcjo6cG9zdE5vdGlmaWNhdGlvbkludGVybmFsKToKKyAgICAgICAgKFdlYk5vdGlmaWNh
dGlvbkNlbnRlcjo6YWRkT2JzZXJ2ZXIpOgorICAgICAgICAoV2ViTm90aWZpY2F0aW9uQ2VudGVy
OjpyZW1vdmVPYnNlcnZlcik6CisKIDIwMTItMTAtMDQgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZy
YXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgRmluYWwgcGFydCBvZiAic3luYyIgdG8gImZsdXNo
IiByZW5hbWluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW5jZS9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0L3dpbmNlL0NoYW5nZUxvZwppbmRleCBlNTcyMmYzMzNlNjU4MmZlNTFkMmM4
M2FiMjk1ZGRmOTcyY2EzMGMzLi5jOTY5MGVmZGFiZDgzYjhjN2M3NmU4YzBkN2UxYWE3ZWUyN2Yx
MTAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbmNlL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0L3dpbmNlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDEyLTEwLTA3ICBD
YWlvIE1hcmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gIDxjYWlvLm9saXZlaXJhQG9wZW5ib3NzYS5v
cmc+CisKKyAgICAgICAgUmVuYW1lIGZpcnN0L3NlY29uZCB0byBrZXkvdmFsdWUgaW4gSGFzaE1h
cCBpdGVyYXRvcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTgyNzg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCisKKyAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5jcHA6CisgICAgICAgIChQ
bGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6Z2V0UGx1Z2luSW5mbyk6CisKIDIwMTItMTAtMDQgIFNp
bW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgU3RhbmRhcmRp
emUgb24gImZsdXNoIiB0ZXJtaW5vbG9neSBmb3IgY29tcG9zaXRpbmcgbGF5ZXIgZmx1c2hpbmcv
c3luY2luZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCmluZGV4IDA4NjM5NTk0OTU2MDFhMzdmMGJjZjZkN2MzODg1M2UzNDky
MDMzNDIuLjQyZmNiNTM4YjkyMTBiMGMxNzUxZjJjZjQxYjRlYTkzMTU4YzQ4ZmIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxMjggQEAKKzIwMTItMTAtMDcgIENhaW8gTWFyY2VsbyBkZSBPbGl2ZWly
YSBGaWxobyAgPGNhaW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KKworICAgICAgICBSZW5hbWUg
Zmlyc3Qvc2Vjb25kIHRvIGtleS92YWx1ZSBpbiBIYXNoTWFwIGl0ZXJhdG9ycworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI3ODQKKworICAgICAgICBS
ZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KKworICAgICAgICAqIFBsYXRmb3JtL0NvcmVJUEMvQXJn
dW1lbnRDb2RlcnMuaDoKKyAgICAgICAgKiBQbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uY3Bw
OgorICAgICAgICAoQ29yZUlQQzo6Q29ubmVjdGlvbjo6U3luY01lc3NhZ2VTdGF0ZTo6Z2V0T3JD
cmVhdGUpOgorICAgICAgICAoQ29yZUlQQzo6Q29ubmVjdGlvbjo6d2FpdEZvck1lc3NhZ2UpOgor
ICAgICAgICAoQ29yZUlQQzo6Q29ubmVjdGlvbjo6cHJvY2Vzc0luY29taW5nTWVzc2FnZSk6Cisg
ICAgICAgICogUGxhdGZvcm0vZ3RrL1dvcmtRdWV1ZUd0ay5jcHA6CisgICAgICAgIChXb3JrUXVl
dWU6OnJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6dW5y
ZWdpc3RlckV2ZW50U291cmNlSGFuZGxlcik6CisgICAgICAgICogUGxhdGZvcm0vbWFjL1dvcmtR
dWV1ZU1hYy5jcHA6CisgICAgICAgIChXb3JrUXVldWU6OnVucmVnaXN0ZXJNYWNoUG9ydEV2ZW50
SGFuZGxlcik6CisgICAgICAgICogU2hhcmVkL1BsdWdpbnMvTlBSZW1vdGVPYmplY3RNYXAuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpOUFJlbW90ZU9iamVjdE1hcDo6cGx1Z2luRGVzdHJveWVkKToK
KyAgICAgICAgKiBTaGFyZWQvVXNlck1lc3NhZ2VDb2RlcnMuaDoKKyAgICAgICAgKFdlYktpdDo6
VXNlck1lc3NhZ2VFbmNvZGVyOjpiYXNlRW5jb2RlKToKKyAgICAgICAgKiBTaGFyZWQvV2ViUHJl
ZmVyZW5jZXNTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OnZhbHVlRm9yS2V5KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJlZmVyZW5jZXNTdG9yZTo6Z2V0Qm9vbFZhbHVlRm9yS2V5KToKKyAg
ICAgICAgKiBTaGFyZWQvbWFjL1dlYkNvcmVBcmd1bWVudENvZGVyc01hYy5tbToKKyAgICAgICAg
KENvcmVJUEM6Ojo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvcXQvQXJndW1lbnRDb2RlcnNR
dC5jcHA6CisgICAgICAgIChDb3JlSVBDOjo6OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL3Nv
dXAvV2ViQ29yZUFyZ3VtZW50Q29kZXJzU291cC5jcHA6CisgICAgICAgIChDb3JlSVBDOjo6OmRl
Y29kZSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0
LmNwcDoKKyAgICAgICAgKF9Fd2tfQmFja19Gb3J3YXJkX0xpc3Q6On5fRXdrX0JhY2tfRm9yd2Fy
ZF9MaXN0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHA6Cisg
ICAgICAgIChfRXdrX0NvbnRleHQ6On5fRXdrX0NvbnRleHQpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvZWZsL2V3a192aWV3LmNwcDoKKyAgICAgICAgKF9ld2tfdmlld19wcml2X2xvYWRpbmdf
cmVzb3VyY2VzX2NsZWFyKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJW
aWV3LmNwcDoKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19nZXRfc3VicmVzb3VyY2VzKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHA6CisgICAgICAg
ICh3ZWJraXRXZWJWaWV3QmFzZUNvbnRhaW5lckZvcmFsbCk6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9tYWMvV0tQcmludGluZ1ZpZXcubW06CisgICAgICAgICgtW1dLUHJpbnRpbmdWaWV3IF9l
eHBlY3RlZFByZXZpZXdDYWxsYmFja0ZvclJlY3Q6XSk6CisgICAgICAgIChwYWdlRGlkRHJhd1Rv
UERGKToKKyAgICAgICAgKC1bV0tQcmludGluZ1ZpZXcgX2RyYXdQcmV2aWV3Ol0pOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbToKKyAgICAgICAgKGNvbW1hbmROYW1lRm9y
U2VsZWN0b3IpOgorICAgICAgICAoLVtXS1ZpZXcgdmFsaWRhdGVVc2VySW50ZXJmYWNlSXRlbTpd
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEJh
Y2tpbmdTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkQmFja2luZ1N0b3Jl
Ojp1cGRhdGVUaWxlKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6
OnRleHR1cmUpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZEJhY2tpbmdTdG9yZTo6cGFp
bnRUb1RleHR1cmVNYXBwZXIpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZEJhY2tpbmdT
dG9yZTo6Y29tbWl0VGlsZU9wZXJhdGlvbnMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db29yZGlu
YXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpMYXllclRyZWVDb29yZGluYXRvclByb3h5Ojp1cGRhdGVUaWxlRm9yTGF5ZXIpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlUmVuZGVyZXI6OmFkanVzdFBvc2l0aW9uRm9y
Rml4ZWRMYXllcnMpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVSZW5kZXJlcjo6c3luY0Nh
bnZhcyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZVJlbmRlcmVyOjpzZXRMYXllckNoaWxk
cmVuKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlUmVuZGVyZXI6OnNldExheWVyRmlsdGVy
cyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZVJlbmRlcmVyOjpzZXRMYXllclN0YXRlKToK
KyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlUmVuZGVyZXI6OmFzc2lnbkltYWdlVG9MYXllcik6
CisgICAgICAgICogVUlQcm9jZXNzL0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2Vy
UHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0
TWFuYWdlclByb3h5OjppbnZhbGlkYXRlUmVxdWVzdHMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9J
bnNwZWN0b3JTZXJ2ZXIvV2ViSW5zcGVjdG9yU2VydmVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViSW5zcGVjdG9yU2VydmVyOjp+V2ViSW5zcGVjdG9yU2VydmVyKToKKyAgICAgICAgKFdlYktp
dDo6V2ViSW5zcGVjdG9yU2VydmVyOjpyZWdpc3RlclBhZ2UpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9JbnNwZWN0b3JTZXJ2ZXIvV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbi5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYlNvY2tldFNlcnZlckNvbm5lY3Rpb246OnNlbmRIVFRQUmVzcG9uc2VIZWFk
ZXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvcXQvV2ViSW5zcGVjdG9y
U2VydmVyUXQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JTZXJ2ZXI6OmJ1aWxk
UGFnZUxpc3QpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Ob3RpZmljYXRpb25zL05vdGlmaWNhdGlv
blBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6Tm90
aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHk6OmludmFsaWRhdGVSZXF1ZXN0
cyk6CisgICAgICAgICogVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc1Byb3h5LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6UGx1Z2luUHJvY2Vzc1Byb3h5OjpwbHVnaW5Qcm9jZXNzQ3Jhc2hl
ZE9yRmFpbGVkVG9MYXVuY2gpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJDb250ZXh0LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6Y3JlYXRlRGljdGlvbmFyeUZyb21IYXNoTWFwKToKKyAgICAgICAg
KiBVSVByb2Nlc3MvV2ViSWNvbkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViSWNv
bkRhdGFiYXNlOjpkaWRGaW5pc2hVUkxJbXBvcnQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJJ
bnRlbnREYXRhLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViSW50ZW50RGF0YTo6ZXh0cmFzKToK
KyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Byb3h5OjpjaGVja1VSTFJlY2VpdmVkRnJvbVdlYlByb2Nlc3MpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OmFkZEJhY2tGb3J3YXJkSXRlbSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6ZnJhbWVDb3VudEluUGFnZSk6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9HZW9sb2NhdGlvbi9HZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFu
YWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6Okdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RN
YW5hZ2VyOjpjYW5jZWxSZXF1ZXN0Rm9yR2VvbG9jYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpH
ZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlcjo6ZGlkUmVjZWl2ZUdlb2xvY2F0aW9u
UGVybWlzc2lvbkRlY2lzaW9uKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0RPTS9JbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpJbmpl
Y3RlZEJ1bmRsZU5vZGVIYW5kbGU6OmdldE9yQ3JlYXRlKToKKyAgICAgICAgKiBXZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6Z2V0T3JDcmVhdGUpOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVJbnRlbnQuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZUludGVudDo6ZXh0cmFzKToKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL05vdGlmaWNhdGlvbnMvV2ViTm90aWZpY2F0aW9uTWFuYWdlci5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYk5vdGlmaWNhdGlvbk1hbmFnZXI6OnBvbGljeUZvck9yaWdp
bik6CisgICAgICAgIChXZWJLaXQ6OldlYk5vdGlmaWNhdGlvbk1hbmFnZXI6OnNob3cpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJOb3RpZmljYXRpb25NYW5hZ2VyOjpjbGVhck5vdGlmaWNhdGlvbnMp
OgorICAgICAgICAoV2ViS2l0OjpXZWJOb3RpZmljYXRpb25NYW5hZ2VyOjpyZW1vdmVOb3RpZmlj
YXRpb25Gcm9tQ29udGV4dE1hcCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNj
YXBlL05QUnVudGltZU9iamVjdE1hcC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5QUnVudGltZU9i
amVjdE1hcDo6aW52YWxpZGF0ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNj
YXBlL05ldHNjYXBlUGx1Z2luLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW46
OmRlc3Ryb3lTdHJlYW0pOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbjo6ZnJhbWVE
aWRGaW5pc2hMb2FkaW5nKToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW46OmZyYW1l
RGlkRmFpbCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpidWlsZEhUVFBIZWFkZXJzKToKKyAgICAgICAgKFdlYktpdDo6UGx1
Z2luVmlldzo6flBsdWdpblZpZXcpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29y
ZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmxheWVyQnlJRCk6CisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0
b3IuY3BwOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6YWRvcHRJbWFn
ZUJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpy
ZWxlYXNlSW1hZ2VCYWNraW5nU3RvcmUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJCYWNrRm9yd2FyZExpc3RQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkJhY2tGb3J3
YXJkTGlzdFByb3h5OjpyZW1vdmVJdGVtKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
bWFjL1dlYlBhZ2VNYWMubW06CisgICAgICAgIChXZWJLaXQ6OmNvbW1hbmROYW1lRm9yU2VsZWN0
b3JOYW1lKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJQcm9jZXNzOjp2aXNpdGVkTGlua1N0YXRlQ2hhbmdlZCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3M6OmFsbFZpc2l0ZWRMaW5rU3RhdGVDaGFuZ2VkKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzczo6Zm9jdXNlZFdlYlBhZ2UpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzOjpjcmVhdGVXZWJQYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6
d2ViUGFnZUdyb3VwKToKKyAgICAgICAgKFdlYktpdDo6ZnJvbUNvdW50ZWRTZXRUb0hhc2hNYXAp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpzZXRUZXh0Q2hlY2tlclN0YXRlKToKKwog
MjAxMi0xMC0wNyAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFdl
YiBwcm9jZXNzIFhQQyBzZXJ2aWNlcyBkb24ndCBoYXZlIGNvcnJlY3QgdmVyc2lvbiBpbmZvcm1h
dGlvbiBpbiB0aGVpciBJbmZvLnBsaXN0IGZpbGVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNDYWxsYmFja09iamVjdC5oCmluZGV4IDI3ZjhlMGVhYmJlYjMyZWU3NGQ1MDk3ODIxNDFi
YTU0NmY1YzE4ZTkuLjNhY2YyZWYxMDgwMzMzZmY5YzdlYTZiZGQwNDQ0Y2YxN2E1M2VjZjIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCkBAIC04Mywx
MyArODMsMTMgQEAgc3RydWN0IEpTQ2FsbGJhY2tPYmplY3REYXRhIDogV2Vha0hhbmRsZU93bmVy
IHsKICAgICAgICAgICAgIFByaXZhdGVQcm9wZXJ0eU1hcDo6Y29uc3RfaXRlcmF0b3IgbG9jYXRp
b24gPSBtX3Byb3BlcnR5TWFwLmZpbmQocHJvcGVydHlOYW1lLmltcGwoKSk7CiAgICAgICAgICAg
ICBpZiAobG9jYXRpb24gPT0gbV9wcm9wZXJ0eU1hcC5lbmQoKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gSlNWYWx1ZSgpOwotICAgICAgICAgICAgcmV0dXJuIGxvY2F0aW9uLT5zZWNvbmQuZ2V0
KCk7CisgICAgICAgICAgICByZXR1cm4gbG9jYXRpb24tPnZhbHVlLmdldCgpOwogICAgICAgICB9
CiAgICAgICAgIAogICAgICAgICB2b2lkIHNldFByaXZhdGVQcm9wZXJ0eShKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSB2YWx1ZSkKICAgICAgICAgewogICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVu
a25vd24+IGVtcHR5OwotICAgICAgICAgICAgbV9wcm9wZXJ0eU1hcC5hZGQocHJvcGVydHlOYW1l
LmltcGwoKSwgZW1wdHkpLml0ZXJhdG9yLT5zZWNvbmQuc2V0KGdsb2JhbERhdGEsIG93bmVyLCB2
YWx1ZSk7CisgICAgICAgICAgICBtX3Byb3BlcnR5TWFwLmFkZChwcm9wZXJ0eU5hbWUuaW1wbCgp
LCBlbXB0eSkuaXRlcmF0b3ItPnZhbHVlLnNldChnbG9iYWxEYXRhLCBvd25lciwgdmFsdWUpOwog
ICAgICAgICB9CiAgICAgICAgIAogICAgICAgICB2b2lkIGRlbGV0ZVByaXZhdGVQcm9wZXJ0eShj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCkBAIC0xMDAsOCArMTAwLDggQEAgc3RydWN0
IEpTQ2FsbGJhY2tPYmplY3REYXRhIDogV2Vha0hhbmRsZU93bmVyIHsKICAgICAgICAgdm9pZCB2
aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgICAgICB7CiAgICAgICAgICAg
ICBmb3IgKFByaXZhdGVQcm9wZXJ0eU1hcDo6aXRlcmF0b3IgcHRyID0gbV9wcm9wZXJ0eU1hcC5i
ZWdpbigpOyBwdHIgIT0gbV9wcm9wZXJ0eU1hcC5lbmQoKTsgKytwdHIpIHsKLSAgICAgICAgICAg
ICAgICBpZiAocHRyLT5zZWNvbmQpCi0gICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5k
KCZwdHItPnNlY29uZCk7CisgICAgICAgICAgICAgICAgaWYgKHB0ci0+dmFsdWUpCisgICAgICAg
ICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZwdHItPnZhbHVlKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2Fs
bGJhY2tPYmplY3RGdW5jdGlvbnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxs
YmFja09iamVjdEZ1bmN0aW9ucy5oCmluZGV4IDY4OGU3YjhiOThjZDIyMjRlZjE4NzllM2U4MTAx
YWIzZjlhOTk2MjQuLjFhMDYzZTYyMGQxMTVmZTdkOGE5ZTJjNzg1MGJiZDdmYWNlZWJjNTkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0
aW9ucy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1
bmN0aW9ucy5oCkBAIC00NzEsOCArNDcxLDggQEAgdm9pZCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVu
dD46OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGUKICAg
ICAgICAgICAgIHR5cGVkZWYgT3BhcXVlSlNDbGFzc1N0YXRpY1ZhbHVlc1RhYmxlOjpjb25zdF9p
dGVyYXRvciBpdGVyYXRvcjsKICAgICAgICAgICAgIGl0ZXJhdG9yIGVuZCA9IHN0YXRpY1ZhbHVl
cy0+ZW5kKCk7CiAgICAgICAgICAgICBmb3IgKGl0ZXJhdG9yIGl0ID0gc3RhdGljVmFsdWVzLT5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgICAgICBTdHJpbmdJbXBsKiBu
YW1lID0gaXQtPmZpcnN0LmdldCgpOwotICAgICAgICAgICAgICAgIFN0YXRpY1ZhbHVlRW50cnkq
IGVudHJ5ID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgICAgICBTdHJpbmdJbXBsKiBu
YW1lID0gaXQtPmtleS5nZXQoKTsKKyAgICAgICAgICAgICAgICBTdGF0aWNWYWx1ZUVudHJ5KiBl
bnRyeSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgICAgICBpZiAoZW50cnktPmdldFBy
b3BlcnR5ICYmICghKGVudHJ5LT5hdHRyaWJ1dGVzICYga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250
RW51bSkgfHwgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykpKQogICAgICAgICAg
ICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyKGV4ZWMsIG5hbWUpKTsKICAg
ICAgICAgICAgIH0KQEAgLTQ4Miw4ICs0ODIsOCBAQCB2b2lkIEpTQ2FsbGJhY2tPYmplY3Q8UGFy
ZW50Pjo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZQog
ICAgICAgICAgICAgdHlwZWRlZiBPcGFxdWVKU0NsYXNzU3RhdGljRnVuY3Rpb25zVGFibGU6OmNv
bnN0X2l0ZXJhdG9yIGl0ZXJhdG9yOwogICAgICAgICAgICAgaXRlcmF0b3IgZW5kID0gc3RhdGlj
RnVuY3Rpb25zLT5lbmQoKTsKICAgICAgICAgICAgIGZvciAoaXRlcmF0b3IgaXQgPSBzdGF0aWNG
dW5jdGlvbnMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgICAgIFN0
cmluZ0ltcGwqIG5hbWUgPSBpdC0+Zmlyc3QuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgU3RhdGlj
RnVuY3Rpb25FbnRyeSogZW50cnkgPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgICAg
IFN0cmluZ0ltcGwqIG5hbWUgPSBpdC0+a2V5LmdldCgpOworICAgICAgICAgICAgICAgIFN0YXRp
Y0Z1bmN0aW9uRW50cnkqIGVudHJ5ID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAgICAgICAg
IGlmICghKGVudHJ5LT5hdHRyaWJ1dGVzICYga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RW51bSkg
fHwgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykpCiAgICAgICAgICAgICAgICAg
ICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXIoZXhlYywgbmFtZSkpOwogICAgICAgICAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NsYXNzUmVmLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDbGFzc1JlZi5jcHAKaW5kZXggYWUyMWIx
MTFiYjk2MTU5OTcxYjIzY2ZmMjRhMzUxM2M3OWI2MTY4NC4uOTc2MjAzZjA4MWE2NmM2OTI0OGY0
N2VjYTI0YWE1YjhkYjg1MTZmYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU0NsYXNzUmVmLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2xhc3NS
ZWYuY3BwCkBAIC05MywxMyArOTMsMTMgQEAgT3BhcXVlSlNDbGFzczo6fk9wYXF1ZUpTQ2xhc3Mo
KQogICAgIGlmIChtX3N0YXRpY1ZhbHVlcykgewogICAgICAgICBPcGFxdWVKU0NsYXNzU3RhdGlj
VmFsdWVzVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fc3RhdGljVmFsdWVzLT5lbmQoKTsK
ICAgICAgICAgZm9yIChPcGFxdWVKU0NsYXNzU3RhdGljVmFsdWVzVGFibGU6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV9zdGF0aWNWYWx1ZXMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAg
ICAgICAgIEFTU0VSVCghaXQtPmZpcnN0LT5pc0lkZW50aWZpZXIoKSk7CisgICAgICAgICAgICBB
U1NFUlQoIWl0LT5rZXktPmlzSWRlbnRpZmllcigpKTsKICAgICB9CiAKICAgICBpZiAobV9zdGF0
aWNGdW5jdGlvbnMpIHsKICAgICAgICAgT3BhcXVlSlNDbGFzc1N0YXRpY0Z1bmN0aW9uc1RhYmxl
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3N0YXRpY0Z1bmN0aW9ucy0+ZW5kKCk7CiAgICAgICAg
IGZvciAoT3BhcXVlSlNDbGFzc1N0YXRpY0Z1bmN0aW9uc1RhYmxlOjpjb25zdF9pdGVyYXRvciBp
dCA9IG1fc3RhdGljRnVuY3Rpb25zLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAg
ICAgICBBU1NFUlQoIWl0LT5maXJzdC0+aXNJZGVudGlmaWVyKCkpOworICAgICAgICAgICAgQVNT
RVJUKCFpdC0+a2V5LT5pc0lkZW50aWZpZXIoKSk7CiAgICAgfQogI2VuZGlmCiAgICAgCkBAIC0x
MzMsOCArMTMzLDggQEAgT3BhcXVlSlNDbGFzc0NvbnRleHREYXRhOjpPcGFxdWVKU0NsYXNzQ29u
dGV4dERhdGEoSlNDOjpKU0dsb2JhbERhdGEmLCBPcGFxdWVKU0MKICAgICAgICAgc3RhdGljVmFs
dWVzID0gYWRvcHRQdHIobmV3IE9wYXF1ZUpTQ2xhc3NTdGF0aWNWYWx1ZXNUYWJsZSk7CiAgICAg
ICAgIE9wYXF1ZUpTQ2xhc3NTdGF0aWNWYWx1ZXNUYWJsZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
anNDbGFzcy0+bV9zdGF0aWNWYWx1ZXMtPmVuZCgpOwogICAgICAgICBmb3IgKE9wYXF1ZUpTQ2xh
c3NTdGF0aWNWYWx1ZXNUYWJsZTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBqc0NsYXNzLT5tX3N0YXRp
Y1ZhbHVlcy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBBU1NFUlQo
IWl0LT5maXJzdC0+aXNJZGVudGlmaWVyKCkpOwotICAgICAgICAgICAgc3RhdGljVmFsdWVzLT5h
ZGQoU3RyaW5nSW1wbDo6Y3JlYXRlKGl0LT5maXJzdC0+Y2hhcmFjdGVycygpLCBpdC0+Zmlyc3Qt
Pmxlbmd0aCgpKSwgYWRvcHRQdHIobmV3IFN0YXRpY1ZhbHVlRW50cnkoaXQtPnNlY29uZC0+Z2V0
UHJvcGVydHksIGl0LT5zZWNvbmQtPnNldFByb3BlcnR5LCBpdC0+c2Vjb25kLT5hdHRyaWJ1dGVz
KSkpOworICAgICAgICAgICAgQVNTRVJUKCFpdC0+a2V5LT5pc0lkZW50aWZpZXIoKSk7CisgICAg
ICAgICAgICBzdGF0aWNWYWx1ZXMtPmFkZChTdHJpbmdJbXBsOjpjcmVhdGUoaXQtPmtleS0+Y2hh
cmFjdGVycygpLCBpdC0+a2V5LT5sZW5ndGgoKSksIGFkb3B0UHRyKG5ldyBTdGF0aWNWYWx1ZUVu
dHJ5KGl0LT52YWx1ZS0+Z2V0UHJvcGVydHksIGl0LT52YWx1ZS0+c2V0UHJvcGVydHksIGl0LT52
YWx1ZS0+YXR0cmlidXRlcykpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTQyLDE1ICsxNDIs
MTUgQEAgT3BhcXVlSlNDbGFzc0NvbnRleHREYXRhOjpPcGFxdWVKU0NsYXNzQ29udGV4dERhdGEo
SlNDOjpKU0dsb2JhbERhdGEmLCBPcGFxdWVKU0MKICAgICAgICAgc3RhdGljRnVuY3Rpb25zID0g
YWRvcHRQdHIobmV3IE9wYXF1ZUpTQ2xhc3NTdGF0aWNGdW5jdGlvbnNUYWJsZSk7CiAgICAgICAg
IE9wYXF1ZUpTQ2xhc3NTdGF0aWNGdW5jdGlvbnNUYWJsZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
anNDbGFzcy0+bV9zdGF0aWNGdW5jdGlvbnMtPmVuZCgpOwogICAgICAgICBmb3IgKE9wYXF1ZUpT
Q2xhc3NTdGF0aWNGdW5jdGlvbnNUYWJsZTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBqc0NsYXNzLT5t
X3N0YXRpY0Z1bmN0aW9ucy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAg
ICBBU1NFUlQoIWl0LT5maXJzdC0+aXNJZGVudGlmaWVyKCkpOwotICAgICAgICAgICAgc3RhdGlj
RnVuY3Rpb25zLT5hZGQoU3RyaW5nSW1wbDo6Y3JlYXRlKGl0LT5maXJzdC0+Y2hhcmFjdGVycygp
LCBpdC0+Zmlyc3QtPmxlbmd0aCgpKSwgYWRvcHRQdHIobmV3IFN0YXRpY0Z1bmN0aW9uRW50cnko
aXQtPnNlY29uZC0+Y2FsbEFzRnVuY3Rpb24sIGl0LT5zZWNvbmQtPmF0dHJpYnV0ZXMpKSk7Cisg
ICAgICAgICAgICBBU1NFUlQoIWl0LT5rZXktPmlzSWRlbnRpZmllcigpKTsKKyAgICAgICAgICAg
IHN0YXRpY0Z1bmN0aW9ucy0+YWRkKFN0cmluZ0ltcGw6OmNyZWF0ZShpdC0+a2V5LT5jaGFyYWN0
ZXJzKCksIGl0LT5rZXktPmxlbmd0aCgpKSwgYWRvcHRQdHIobmV3IFN0YXRpY0Z1bmN0aW9uRW50
cnkoaXQtPnZhbHVlLT5jYWxsQXNGdW5jdGlvbiwgaXQtPnZhbHVlLT5hdHRyaWJ1dGVzKSkpOwog
ICAgICAgICB9CiAgICAgfQogfQogCiBPcGFxdWVKU0NsYXNzQ29udGV4dERhdGEmIE9wYXF1ZUpT
Q2xhc3M6OmNvbnRleHREYXRhKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBPd25QdHI8T3BhcXVl
SlNDbGFzc0NvbnRleHREYXRhPiYgY29udGV4dERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCkub3Bh
cXVlSlNDbGFzc0RhdGEuYWRkKHRoaXMsIG51bGxwdHIpLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAg
T3duUHRyPE9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YT4mIGNvbnRleHREYXRhID0gZXhlYy0+Z2xv
YmFsRGF0YSgpLm9wYXF1ZUpTQ2xhc3NEYXRhLmFkZCh0aGlzLCBudWxscHRyKS5pdGVyYXRvci0+
dmFsdWU7CiAgICAgaWYgKCFjb250ZXh0RGF0YSkKICAgICAgICAgY29udGV4dERhdGEgPSBhZG9w
dFB0cihuZXcgT3BhcXVlSlNDbGFzc0NvbnRleHREYXRhKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhp
cykpOwogICAgIHJldHVybiAqY29udGV4dERhdGE7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCmluZGV4IGJkOGJmZWMwZDc3MjNjYjkyMmRmZWY4MmNiNzdh
YjM0OTkwZGVjODMuLmNkYmU3MGYxYmZjMDU4MWI5MzdkODBiYmUyYjU0OGY5MjJkY2VhMjAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCkBAIC02NDEs
NyArNjQxLDcgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXAoRXhlY1N0YXRlKiBleGVjKQogICAgICAg
ICAgICAgZGF0YUxvZygiICAlMWQgPSB7XG4iLCBpKTsKICAgICAgICAgICAgIFN0cmluZ0p1bXBU
YWJsZTo6U3RyaW5nT2Zmc2V0VGFibGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcmFyZURhdGEt
Pm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1tpXS5vZmZzZXRUYWJsZS5lbmQoKTsKICAgICAgICAg
ICAgIGZvciAoU3RyaW5nSnVtcFRhYmxlOjpTdHJpbmdPZmZzZXRUYWJsZTo6Y29uc3RfaXRlcmF0
b3IgaXRlciA9IG1fcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1tpXS5vZmZzZXRU
YWJsZS5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQotICAgICAgICAgICAgICAgIGRhdGFM
b2coIlx0XHRcIiVzXCIgPT4gJTA0ZFxuIiwgU3RyaW5nKGl0ZXItPmZpcnN0KS51dGY4KCkuZGF0
YSgpLCBpdGVyLT5zZWNvbmQuYnJhbmNoT2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBkYXRhTG9n
KCJcdFx0XCIlc1wiID0+ICUwNGRcbiIsIFN0cmluZyhpdGVyLT5rZXkpLnV0ZjgoKS5kYXRhKCks
IGl0ZXItPnZhbHVlLmJyYW5jaE9mZnNldCk7CiAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICB9
XG4iKTsKICAgICAgICAgICAgICsraTsKICAgICAgICAgfSB3aGlsZSAoaSA8IG1fcmFyZURhdGEt
Pm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5zaXplKCkpOwpAQCAtMTg5OSw3ICsxODk5LDcgQEAg
dm9pZCBFdmFsQ29kZUNhY2hlOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBFdmFsQ2FjaGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fY2FjaGVNYXAuZW5kKCk7CiAg
ICAgZm9yIChFdmFsQ2FjaGVNYXA6Oml0ZXJhdG9yIHB0ciA9IG1fY2FjaGVNYXAuYmVnaW4oKTsg
cHRyICE9IGVuZDsgKytwdHIpCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kKCZwdHItPnNlY29uZCk7
CisgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZwdHItPnZhbHVlKTsKIH0KIAogdm9pZCBDb2RlQmxv
Y2s6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpAQCAtMzAwMiw4ICszMDAy
LDggQEAgU3RyaW5nIENvZGVCbG9jazo6bmFtZUZvclJlZ2lzdGVyKGludCByZWdpc3Rlck51bWJl
cikKIHsKICAgICBTeW1ib2xUYWJsZTo6aXRlcmF0b3IgZW5kID0gbV9zeW1ib2xUYWJsZS0+ZW5k
KCk7CiAgICAgZm9yIChTeW1ib2xUYWJsZTo6aXRlcmF0b3IgcHRyID0gbV9zeW1ib2xUYWJsZS0+
YmVnaW4oKTsgcHRyICE9IGVuZDsgKytwdHIpIHsKLSAgICAgICAgaWYgKHB0ci0+c2Vjb25kLmdl
dEluZGV4KCkgPT0gcmVnaXN0ZXJOdW1iZXIpCi0gICAgICAgICAgICByZXR1cm4gU3RyaW5nKHB0
ci0+Zmlyc3QpOworICAgICAgICBpZiAocHRyLT52YWx1ZS5nZXRJbmRleCgpID09IHJlZ2lzdGVy
TnVtYmVyKQorICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhwdHItPmtleSk7CiAgICAgfQogICAg
IGlmIChuZWVkc0FjdGl2YXRpb24oKSAmJiByZWdpc3Rlck51bWJlciA9PSBhY3RpdmF0aW9uUmVn
aXN0ZXIoKSkKICAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiYWN0aXZhdGlvbiIpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0p1bXBUYWJsZS5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0p1bXBUYWJsZS5oCmluZGV4IGEwMWY5MGNiMGVl
MzkyYTRiYmIwZDkyMDg3ZTExMmQ1ZmE5NTE3OGUuLmY1NGEzNzE4ZjA2M2IxMmE1NWRiN2FkNjIw
OTIxM2I0MmQxYTRmY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9KdW1wVGFibGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSnVtcFRh
YmxlLmgKQEAgLTU3LDcgKzU3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBTdHJp
bmdPZmZzZXRUYWJsZTo6Y29uc3RfaXRlcmF0b3IgbG9jID0gb2Zmc2V0VGFibGUuZmluZCh2YWx1
ZSk7CiAgICAgICAgICAgICBpZiAobG9jID09IGVuZCkKICAgICAgICAgICAgICAgICByZXR1cm4g
ZGVmYXVsdE9mZnNldDsKLSAgICAgICAgICAgIHJldHVybiBsb2MtPnNlY29uZC5icmFuY2hPZmZz
ZXQ7CisgICAgICAgICAgICByZXR1cm4gbG9jLT52YWx1ZS5icmFuY2hPZmZzZXQ7CiAgICAgICAg
IH0KIAogI2lmIEVOQUJMRShKSVQpCkBAIC02Nyw3ICs2Nyw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICAgICAgU3RyaW5nT2Zmc2V0VGFibGU6OmNvbnN0X2l0ZXJhdG9yIGxvYyA9IG9mZnNl
dFRhYmxlLmZpbmQodmFsdWUpOwogICAgICAgICAgICAgaWYgKGxvYyA9PSBlbmQpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGN0aURlZmF1bHQ7Ci0gICAgICAgICAgICByZXR1cm4gbG9jLT5zZWNv
bmQuY3RpT2Zmc2V0OworICAgICAgICAgICAgcmV0dXJuIGxvYy0+dmFsdWUuY3RpT2Zmc2V0Owog
ICAgICAgICB9CiAjZW5kaWYKICAgICB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0xhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5jcHAKaW5kZXggNTlmMGQw
MjM0MzQxN2E3NDFiYzgyNTczN2QyNjExM2NkYzdhMzI5NS4uZjkyM2U0YTI4YmJjYjAwMzlhNTM3
M2U5NmY4NDUyM2U3OWNlZTA4OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0xhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3BwCkBAIC04MSw3ICs4MSw3
IEBAIExhenlPcGVyYW5kVmFsdWVQcm9maWxlKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZVBhcnNl
cjo6Z2V0SWZQcmVzZW50KAogICAgIGlmIChpdGVyID09IG1fbWFwLmVuZCgpKQogICAgICAgICBy
ZXR1cm4gMDsKICAgICAKLSAgICByZXR1cm4gaXRlci0+c2Vjb25kOworICAgIHJldHVybiBpdGVy
LT52YWx1ZTsKIH0KIAogU3BlY3VsYXRlZFR5cGUgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVQYXJz
ZXI6OnByZWRpY3Rpb24oCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvU2FtcGxpbmdUb29sLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TYW1w
bGluZ1Rvb2wuY3BwCmluZGV4IGYwN2RjNzlmYjc4MjU4ZDg2MWQ0ZjQ4NTE3ZjFiNTViMjk2Mzk1
M2QuLmY5YjgyNDVlNTQ3N2E4ZjMwZWQ1MjFjMzEyNmJmMDE5ZDVjYjJlNjcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TYW1wbGluZ1Rvb2wuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TYW1wbGluZ1Rvb2wuY3BwCkBAIC00MTAsNyAr
NDEwLDcgQEAgdm9pZCBTYW1wbGluZ1Rvb2w6OmR1bXAoRXhlY1N0YXRlKiBleGVjKQogICAgIFZl
Y3RvcjxTY3JpcHRTYW1wbGVSZWNvcmQqPiBjb2RlQmxvY2tTYW1wbGVzKHNjb3BlQ291bnQpOwog
ICAgIFNjcmlwdFNhbXBsZVJlY29yZE1hcDo6aXRlcmF0b3IgaXRlciA9IG1fc2NvcGVTYW1wbGVN
YXAtPmJlZ2luKCk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzY29wZUNvdW50OyArK2ksICsr
aXRlcikKLSAgICAgICAgY29kZUJsb2NrU2FtcGxlc1tpXSA9IGl0ZXItPnNlY29uZC5nZXQoKTsK
KyAgICAgICAgY29kZUJsb2NrU2FtcGxlc1tpXSA9IGl0ZXItPnZhbHVlLmdldCgpOwogCiAgICAg
cXNvcnQoY29kZUJsb2NrU2FtcGxlcy5iZWdpbigpLCBzY29wZUNvdW50LCBzaXplb2YoU2NyaXB0
U2FtcGxlUmVjb3JkKiksIGNvbXBhcmVTY3JpcHRTYW1wbGVSZWNvcmRzKTsKIApAQCAtNDQ2LDgg
KzQ0Niw4IEBAIHZvaWQgU2FtcGxpbmdUb29sOjpkdW1wKEV4ZWNTdGF0ZSogZXhlYykKICAgICAg
ICAgICAgICAgICBWZWN0b3I8TGluZUNvdW50SW5mbz4gbGluZUNvdW50SW5mbyhsaW5lc0NvdW50
KTsKICAgICAgICAgICAgICAgICBpbnQgbGluZW5vID0gMDsKICAgICAgICAgICAgICAgICBmb3Ig
KEhhc2hNYXA8dW5zaWduZWQsdW5zaWduZWQ+OjppdGVyYXRvciBpdGVyID0gbGluZUNvdW50cy5i
ZWdpbigpOyBpdGVyICE9IGxpbmVDb3VudHMuZW5kKCk7ICsraXRlciwgKytsaW5lbm8pIHsKLSAg
ICAgICAgICAgICAgICAgICAgbGluZUNvdW50SW5mb1tsaW5lbm9dLmxpbmUgPSBpdGVyLT5maXJz
dDsKLSAgICAgICAgICAgICAgICAgICAgbGluZUNvdW50SW5mb1tsaW5lbm9dLmNvdW50ID0gaXRl
ci0+c2Vjb25kOworICAgICAgICAgICAgICAgICAgICBsaW5lQ291bnRJbmZvW2xpbmVub10ubGlu
ZSA9IGl0ZXItPmtleTsKKyAgICAgICAgICAgICAgICAgICAgbGluZUNvdW50SW5mb1tsaW5lbm9d
LmNvdW50ID0gaXRlci0+dmFsdWU7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAg
ICAgcXNvcnQobGluZUNvdW50SW5mby5iZWdpbigpLCBsaW5lc0NvdW50LCBzaXplb2YoTGluZUNv
dW50SW5mbyksIGNvbXBhcmVMaW5lQ291bnRJbmZvU2FtcGxpbmcpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcApp
bmRleCAwNmUzYjc5NWJmM2MyODdlZDk2MjZkYTIyZWRlMjZmY2ExNjUxYjFiLi40Nzk2YTlhNTFl
ZjcyNGM3MDgyZDJjN2ZhZWU1YmUyMGUzMjYyMjY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcApAQCAtMjMw
LDcgKzIzMCw3IEBAIGJvb2wgQnl0ZWNvZGVHZW5lcmF0b3I6OmFkZFZhcihjb25zdCBJZGVudGlm
aWVyJiBpZGVudCwgYm9vbCBpc0NvbnN0YW50LCBSZWdpc3RlCiAgICAgU3ltYm9sVGFibGU6OkFk
ZFJlc3VsdCByZXN1bHQgPSBzeW1ib2xUYWJsZSgpLmFkZChpZGVudC5pbXBsKCksIG5ld0VudHJ5
KTsKIAogICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgcjAgPSAmcmVnaXN0
ZXJGb3IocmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQuZ2V0SW5kZXgoKSk7CisgICAgICAgIHIwID0g
JnJlZ2lzdGVyRm9yKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0SW5kZXgoKSk7CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTI0OCw4ICsyNDgsOCBAQCBpbnQgQnl0ZWNvZGVH
ZW5lcmF0b3I6OmFkZEdsb2JhbFZhcigKICAgICAgICAgbmV3RW50cnkuYXR0ZW1wdFRvV2F0Y2go
KTsKICAgICBTeW1ib2xUYWJsZTo6QWRkUmVzdWx0IHJlc3VsdCA9IHN5bWJvbFRhYmxlKCkuYWRk
KGlkZW50LmltcGwoKSwgbmV3RW50cnkpOwogICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpIHsK
LSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQubm90aWZ5V3JpdGUoKTsKLSAgICAgICAg
aW5kZXggPSByZXN1bHQuaXRlcmF0b3ItPnNlY29uZC5nZXRJbmRleCgpOworICAgICAgICByZXN1
bHQuaXRlcmF0b3ItPnZhbHVlLm5vdGlmeVdyaXRlKCk7CisgICAgICAgIGluZGV4ID0gcmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZS5nZXRJbmRleCgpOwogICAgIH0KICAgICByZXR1cm4gaW5kZXg7CiB9
CkBAIC0xMTUyLDcgKzExNTIsNyBAQCB1bnNpZ25lZCBCeXRlY29kZUdlbmVyYXRvcjo6YWRkQ29u
c3RhbnQoY29uc3QgSWRlbnRpZmllciYgaWRlbnQpCiAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5
KQogICAgICAgICBtX2NvZGVCbG9jay0+YWRkSWRlbnRpZmllcihJZGVudGlmaWVyKG1fZ2xvYmFs
RGF0YSwgcmVwKSk7CiAKLSAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAg
cmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiB9CiAKIC8vIFdlIGNhbid0IGhhc2ggSlNW
YWx1ZSgpLCBzbyB3ZSB1c2UgYSBkZWRpY2F0ZWQgZGF0YSBtZW1iZXIgdG8gY2FjaGUgaXQuCkBA
IC0xMTgxLDcgKzExODEsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6YWRkQ29u
c3RhbnRWYWx1ZShKU1ZhbHVlIHYpCiAgICAgICAgICsrbV9uZXh0Q29uc3RhbnRPZmZzZXQ7CiAg
ICAgICAgIG1fY29kZUJsb2NrLT5hZGRDb25zdGFudCh2KTsKICAgICB9IGVsc2UKLSAgICAgICAg
aW5kZXggPSByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgaW5kZXggPSByZXN1bHQu
aXRlcmF0b3ItPnZhbHVlOwogICAgIHJldHVybiAmbV9jb25zdGFudFBvb2xSZWdpc3RlcnNbaW5k
ZXhdOwogfQogCkBAIC0xMzI3LDcgKzEzMjcsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdExvYWQoUmVnaXN0ZXJJRCogZHN0LCBkb3VibGUgbnVtYmVyKQogICAgIC8vIHdv
cmsgY29ycmVjdGx5IHdpdGggTmFOIGFzIGEga2V5LgogICAgIGlmIChpc25hbihudW1iZXIpIHx8
IG51bWJlciA9PSBIYXNoVHJhaXRzPGRvdWJsZT46OmVtcHR5VmFsdWUoKSB8fCBIYXNoVHJhaXRz
PGRvdWJsZT46OmlzRGVsZXRlZFZhbHVlKG51bWJlcikpCiAgICAgICAgIHJldHVybiBlbWl0TG9h
ZChkc3QsIGpzTnVtYmVyKG51bWJlcikpOwotICAgIEpTVmFsdWUmIHZhbHVlSW5NYXAgPSBtX251
bWJlck1hcC5hZGQobnVtYmVyLCBKU1ZhbHVlKCkpLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgSlNW
YWx1ZSYgdmFsdWVJbk1hcCA9IG1fbnVtYmVyTWFwLmFkZChudW1iZXIsIEpTVmFsdWUoKSkuaXRl
cmF0b3ItPnZhbHVlOwogICAgIGlmICghdmFsdWVJbk1hcCkKICAgICAgICAgdmFsdWVJbk1hcCA9
IGpzTnVtYmVyKG51bWJlcik7CiAgICAgcmV0dXJuIGVtaXRMb2FkKGRzdCwgdmFsdWVJbk1hcCk7
CkBAIC0xMzM1LDcgKzEzMzUsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1p
dExvYWQoUmVnaXN0ZXJJRCogZHN0LCBkb3VibGUgbnVtYmVyKQogCiBSZWdpc3RlcklEKiBCeXRl
Y29kZUdlbmVyYXRvcjo6ZW1pdExvYWQoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBJZGVudGlmaWVy
JiBpZGVudGlmaWVyKQogewotICAgIEpTU3RyaW5nKiYgc3RyaW5nSW5NYXAgPSBtX3N0cmluZ01h
cC5hZGQoaWRlbnRpZmllci5pbXBsKCksIDApLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgSlNTdHJp
bmcqJiBzdHJpbmdJbk1hcCA9IG1fc3RyaW5nTWFwLmFkZChpZGVudGlmaWVyLmltcGwoKSwgMCku
aXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghc3RyaW5nSW5NYXApCiAgICAgICAgIHN0cmluZ0lu
TWFwID0ganNPd25lZFN0cmluZyhnbG9iYWxEYXRhKCksIGlkZW50aWZpZXIuc3RyaW5nKCkpOwog
ICAgIHJldHVybiBlbWl0TG9hZChkc3QsIEpTVmFsdWUoc3RyaW5nSW5NYXApKTsKQEAgLTE5MDcs
NyArMTkwNyw3IEBAIHVuc2lnbmVkIEJ5dGVjb2RlR2VuZXJhdG9yOjphZGRDb25zdGFudEJ1ZmZl
cih1bnNpZ25lZCBsZW5ndGgpCiAKIEpTU3RyaW5nKiBCeXRlY29kZUdlbmVyYXRvcjo6YWRkU3Ry
aW5nQ29uc3RhbnQoY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllcikKIHsKLSAgICBKU1N0cmlu
ZyomIHN0cmluZ0luTWFwID0gbV9zdHJpbmdNYXAuYWRkKGlkZW50aWZpZXIuaW1wbCgpLCAwKS5p
dGVyYXRvci0+c2Vjb25kOworICAgIEpTU3RyaW5nKiYgc3RyaW5nSW5NYXAgPSBtX3N0cmluZ01h
cC5hZGQoaWRlbnRpZmllci5pbXBsKCksIDApLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoIXN0
cmluZ0luTWFwKSB7CiAgICAgICAgIHN0cmluZ0luTWFwID0ganNTdHJpbmcoZ2xvYmFsRGF0YSgp
LCBpZGVudGlmaWVyLnN0cmluZygpKTsKICAgICAgICAgYWRkQ29uc3RhbnRWYWx1ZShzdHJpbmdJ
bk1hcCk7CkBAIC0xOTc5LDggKzE5NzksOCBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdExhenlOZXdGdW5jdGlvbihSZWdpc3RlcklEKiBkc3QsIEZ1bmN0aW9uQm9keQogewog
ICAgIEZ1bmN0aW9uT2Zmc2V0TWFwOjpBZGRSZXN1bHQgcHRyID0gbV9mdW5jdGlvbk9mZnNldHMu
YWRkKGZ1bmN0aW9uLCAwKTsKICAgICBpZiAocHRyLmlzTmV3RW50cnkpCi0gICAgICAgIHB0ci5p
dGVyYXRvci0+c2Vjb25kID0gbV9jb2RlQmxvY2stPmFkZEZ1bmN0aW9uRGVjbChGdW5jdGlvbkV4
ZWN1dGFibGU6OmNyZWF0ZSgqbV9nbG9iYWxEYXRhLCBmdW5jdGlvbikpOwotICAgIHJldHVybiBl
bWl0TmV3RnVuY3Rpb25JbnRlcm5hbChkc3QsIHB0ci5pdGVyYXRvci0+c2Vjb25kLCB0cnVlKTsK
KyAgICAgICAgcHRyLml0ZXJhdG9yLT52YWx1ZSA9IG1fY29kZUJsb2NrLT5hZGRGdW5jdGlvbkRl
Y2woRnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUoKm1fZ2xvYmFsRGF0YSwgZnVuY3Rpb24pKTsK
KyAgICByZXR1cm4gZW1pdE5ld0Z1bmN0aW9uSW50ZXJuYWwoZHN0LCBwdHIuaXRlcmF0b3ItPnZh
bHVlLCB0cnVlKTsKIH0KIAogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXROZXdG
dW5jdGlvbkludGVybmFsKFJlZ2lzdGVySUQqIGRzdCwgdW5zaWduZWQgaW5kZXgsIGJvb2wgZG9O
dWxsQ2hlY2spCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L05vZGVzQ29kZWdlbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05v
ZGVzQ29kZWdlbi5jcHAKaW5kZXggODIzZGFkZjE0NmM5OWRmZWU5NWNkYzhmZGIzZDEyZjliZGQy
ZTg3Mi4uMGFjNDE0OWI2NDEyYjhiOTEzYmM5NTA0ZWJkNjNkODkxZWQyYWMxNiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcApA
QCAtMjYwLDcgKzI2MCw3IEBAIFJlZ2lzdGVySUQqIFByb3BlcnR5TGlzdE5vZGU6OmVtaXRCeXRl
Y29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlCiAgICAgICAgICAgICBH
ZXR0ZXJTZXR0ZXJQYWlyIHBhaXIobm9kZSwgc3RhdGljX2Nhc3Q8UHJvcGVydHlOb2RlKj4oMCkp
OwogICAgICAgICAgICAgR2V0dGVyU2V0dGVyTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbWFwLmFk
ZChub2RlLT5uYW1lKCkuaW1wbCgpLCBwYWlyKTsKICAgICAgICAgICAgIGlmICghcmVzdWx0Lmlz
TmV3RW50cnkpCi0gICAgICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQuc2Vjb25k
ID0gbm9kZTsKKyAgICAgICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLnNlY29uZCA9
IG5vZGU7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIHJlbWFpbmlu
ZyBwcm9wZXJ0aWVzIGluIHRoZSBsaXN0LgpAQCAtMjc4LDcgKzI3OCw3IEBAIFJlZ2lzdGVySUQq
IFByb3BlcnR5TGlzdE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJh
dG9yLCBSZWdpc3RlCiAgICAgICAgICAgICBBU1NFUlQobm9kZS0+bV90eXBlID09IFByb3BlcnR5
Tm9kZTo6R2V0dGVyIHx8IG5vZGUtPm1fdHlwZSA9PSBQcm9wZXJ0eU5vZGU6OlNldHRlcik7CiAg
ICAgICAgICAgICBHZXR0ZXJTZXR0ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLmZpbmQobm9kZS0+
bmFtZSgpLmltcGwoKSk7CiAgICAgICAgICAgICBBU1NFUlQoaXQgIT0gbWFwLmVuZCgpKTsKLSAg
ICAgICAgICAgIEdldHRlclNldHRlclBhaXImIHBhaXIgPSBpdC0+c2Vjb25kOworICAgICAgICAg
ICAgR2V0dGVyU2V0dGVyUGFpciYgcGFpciA9IGl0LT52YWx1ZTsKIAogICAgICAgICAgICAgLy8g
V2FzIHRoaXMgYWxyZWFkeSBnZW5lcmF0ZWQgYXMgYSBwYXJ0IG9mIGl0cyBwYXJ0bmVyPwogICAg
ICAgICAgICAgaWYgKHBhaXIuc2Vjb25kID09IG5vZGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcAppbmRleCA4ZDM2MGVmYzI2NTg3MDllMGE2MDNlNWEwOWYy
NzM1ZTQ2OTFmNmYyLi4zNzMxYjA0NzMwMmRhMzkxMmU1Nzg4YTYwYWRkMTJjYjY0YzhiNGU5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAKQEAgLTU5LDcg
KzU5LDcgQEAgaW5saW5lIFJlY29tcGlsZXI6On5SZWNvbXBpbGVyKCkKICAgICAvLyBKYXZhU2Ny
aXB0IGluIHRoZSBpbnNwZWN0b3IuCiAgICAgU291cmNlUHJvdmlkZXJNYXA6OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IG1fc291cmNlUHJvdmlkZXJzLmVuZCgpOwogICAgIGZvciAoU291cmNlUHJvdmlk
ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX3NvdXJjZVByb3ZpZGVycy5iZWdpbigpOyBp
dGVyICE9IGVuZDsgKytpdGVyKQotICAgICAgICBtX2RlYnVnZ2VyLT5zb3VyY2VQYXJzZWQoaXRl
ci0+c2Vjb25kLCBpdGVyLT5maXJzdCwgLTEsIFN0cmluZygpKTsKKyAgICAgICAgbV9kZWJ1Z2dl
ci0+c291cmNlUGFyc2VkKGl0ZXItPnZhbHVlLCBpdGVyLT5rZXksIC0xLCBTdHJpbmcoKSk7CiB9
CiAKIGlubGluZSB2b2lkIFJlY29tcGlsZXI6Om9wZXJhdG9yKCkoSlNDZWxsKiBjZWxsKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNh
dGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2lt
cGxpZmljYXRpb25QaGFzZS5jcHAKaW5kZXggNTEzMzU3NDI0MTgzZDMzNmVjMDQ2ZjYwODU0YTgw
ZmMzMDQ2NjUxZC4uYmI2MWE1OWU2YTgwMGFlMTA1ZDZmYzE3YjY5NDZkOWVjMzhhMzY1OSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNh
dGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50
c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCkBAIC0yMTAsNyArMjEwLDcgQEAgcHVibGljOgogICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgaWYgaXQncyBhIHZhcmlhYmxl
IHRoYXQgd2UgdGhpbmsgaXMgYWxpYXNlZCB0bwogICAgICAgICAgICAgICAgICAgICAgICAgLy8g
dGhlIGFyZ3VtZW50cywgdGhhdCB3ZSBrbm93IHRoYXQgaXQgbWlnaHQgYWN0dWFsbHkgbm90IGJl
LgogICAgICAgICAgICAgICAgICAgICAgICAgQXJndW1lbnRzQWxpYXNpbmdEYXRhJiBkYXRhID0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFy
aWFibGVBY2Nlc3NEYXRhKS0+c2Vjb25kOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
YXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT52YWx1ZTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGRhdGEubWVyZ2VOb25Bcmd1bWVudHNBc3NpZ25tZW50KCk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBkYXRhLm1lcmdlQ2FsbENvbnRleHQobm9kZS5jb2RlT3Jp
Z2luLmlubGluZUNhbGxGcmFtZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAg
LTIyOCw3ICsyMjgsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBBcmd1bWVudHNBbGlh
c2luZ0RhdGEmIGRhdGEgPQotICAgICAgICAgICAgICAgICAgICAgICAgbV9hcmd1bWVudHNBbGlh
c2luZy5maW5kKHZhcmlhYmxlQWNjZXNzRGF0YSktPnNlY29uZDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT52YWx1
ZTsKICAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXJnZUFyZ3VtZW50c0Fzc2lnbm1lbnQoKTsK
ICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIHZhcmlhYmxlJ3Mg
dXNlcyBhcmUgaW4gdGhlIHNhbWUgY29udGV4dCBhcwogICAgICAgICAgICAgICAgICAgICAvLyB0
aGUgYXJndW1lbnRzIGl0IGlzIGFsaWFzaW5nLgpAQCAtMjQzLDcgKzI0Myw3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgp
KQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIEFy
Z3VtZW50c0FsaWFzaW5nRGF0YSYgZGF0YSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2Fy
Z3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+c2Vjb25kOworICAgICAg
ICAgICAgICAgICAgICAgICAgbV9hcmd1bWVudHNBbGlhc2luZy5maW5kKHZhcmlhYmxlQWNjZXNz
RGF0YSktPnZhbHVlOwogICAgICAgICAgICAgICAgICAgICBkYXRhLm1lcmdlQ2FsbENvbnRleHQo
bm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIH0KQEAgLTI1Myw3ICsyNTMsNyBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKSkKICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBBcmd1bWVu
dHNBbGlhc2luZ0RhdGEmIGRhdGEgPQotICAgICAgICAgICAgICAgICAgICAgICAgbV9hcmd1bWVu
dHNBbGlhc2luZy5maW5kKHZhcmlhYmxlQWNjZXNzRGF0YSktPnNlY29uZDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEp
LT52YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXJnZUNhbGxDb250ZXh0KG5vZGUu
Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICAgICAgLy8gSWYgYSB2YXJpYWJsZSBpcyB1c2VkIGluIGEgZmx1c2ggdGhlbiBi
eSBkZWZpbml0aW9uIGl0IGVzY2FwZXMuCkBAIC0yNjYsNyArMjY2LDcgQEAgcHVibGljOgogICAg
ICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkpCiAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgQXJndW1l
bnRzQWxpYXNpbmdEYXRhJiBkYXRhID0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1fYXJndW1l
bnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT5zZWNvbmQ7CisgICAgICAgICAg
ICAgICAgICAgICAgICBtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRh
KS0+dmFsdWU7CiAgICAgICAgICAgICAgICAgICAgIGRhdGEubWVyZ2VOb25Bcmd1bWVudHNBc3Np
Z25tZW50KCk7CiAgICAgICAgICAgICAgICAgICAgIGRhdGEubWVyZ2VDYWxsQ29udGV4dChub2Rl
LmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CkBAIC0zNTAsNyArMzUwLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICBBcmd1bWVudHNBbGlhc2luZ0RhdGEmIGRhdGEgPQot
ICAgICAgICAgICAgICAgICAgICBtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nl
c3NEYXRhKS0+c2Vjb25kOworICAgICAgICAgICAgICAgICAgICBtX2FyZ3VtZW50c0FsaWFzaW5n
LmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+dmFsdWU7CiAgICAgICAgICAgICAgICAgaWYgKGRh
dGEuaXNWYWxpZCgpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAg
ICAgICAKQEAgLTM2OSw3ICszNjksNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgZGF0YUxv
ZygiQ2FwdHVyZWQiKTsKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIEFyZ3Vt
ZW50c0FsaWFzaW5nRGF0YSYgZGF0YSA9Ci0gICAgICAgICAgICAgICAgICAgIG1fYXJndW1lbnRz
QWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT5zZWNvbmQ7CisgICAgICAgICAgICAg
ICAgICAgIG1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT52YWx1
ZTsKICAgICAgICAgICAgICAgICBib29sIGZpcnN0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBp
ZiAoZGF0YS5jYWxsQ29udGV4dElzVmFsaWQoKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAo
IWZpcnN0KQpAQCAtNDQxLDcgKzQ0MSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAg
Ly8gdGhpbmdzLiBOb3RlIGFsc28gdGhhdCB0aGUgU2V0TG9jYWwgc2hvdWxkIGJlY29tZSBkZWFk
IGFzIHNvb24gYXMKICAgICAgICAgICAgICAgICAgICAgLy8gd2UgcmVwbGFjZSBhbGwgdXNlcyBv
ZiB0aGlzIHZhcmlhYmxlIHdpdGggR2V0TXlBcmd1bWVudHNMZW5ndGggYW5kCiAgICAgICAgICAg
ICAgICAgICAgIC8vIEdldE15QXJndW1lbnRCeVZhbC4KLSAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKG1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT5zZWNvbmQu
aXNWYWxpZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1fYXJndW1lbnRzQWxpYXNp
bmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT52YWx1ZS5pc1ZhbGlkKCkpOwogICAgICAgICAg
ICAgICAgICAgICBjaGFuZ2VkIHw9IHZhcmlhYmxlQWNjZXNzRGF0YS0+bWVyZ2VJc0FyZ3VtZW50
c0FsaWFzKHRydWUpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICB9CkBAIC02ODUsNyArNjg1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmICh2YXJpYWJs
ZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIAotICAgICAgICAgICAgQXJndW1lbnRzQWxpYXNpbmdEYXRhJiBkYXRhID0gbV9hcmd1
bWVudHNBbGlhc2luZy5maW5kKHZhcmlhYmxlQWNjZXNzRGF0YSktPnNlY29uZDsKKyAgICAgICAg
ICAgIEFyZ3VtZW50c0FsaWFzaW5nRGF0YSYgZGF0YSA9IG1fYXJndW1lbnRzQWxpYXNpbmcuZmlu
ZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT52YWx1ZTsKICAgICAgICAgICAgIGRhdGEuZXNjYXBlcyA9
IHRydWU7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtNzM0LDcgKzczNCw3IEBA
IHByaXZhdGU6CiAgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKSkK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgICAgIEFyZ3VtZW50c0FsaWFzaW5n
RGF0YSYgZGF0YSA9IG1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEp
LT5zZWNvbmQ7CisgICAgICAgIEFyZ3VtZW50c0FsaWFzaW5nRGF0YSYgZGF0YSA9IG1fYXJndW1l
bnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT52YWx1ZTsKICAgICAgICAgZGF0
YS5tZXJnZUNhbGxDb250ZXh0KG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAg
IH0KICAgICAKQEAgLTc1Niw3ICs3NTYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKHZh
cmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgQXJndW1lbnRzQWxpYXNpbmdEYXRhJiBkYXRhID0KLSAgICAgICAgICAgICAg
ICBtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+c2Vjb25kOwor
ICAgICAgICAgICAgICAgIG1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0Rh
dGEpLT52YWx1ZTsKICAgICAgICAgICAgIGlmICghZGF0YS5pc1ZhbGlkKCkpCiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCkBAIC03OTIsNyArNzky
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAmJiAhbV9jcmVhdGVzQXJndW1lbnRzLmNv
bnRhaW5zKGNoaWxkLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgIGJv
b2wgaXNBbGlhc2VkQXJndW1lbnRzUmVnaXN0ZXIgPQogICAgICAgICAgICAgICAgICF2YXJpYWJs
ZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKQotICAgICAgICAgICAgICAgICYmIG1fYXJndW1lbnRz
QWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT5zZWNvbmQuaXNWYWxpZCgpCisgICAg
ICAgICAgICAgICAgJiYgbV9hcmd1bWVudHNBbGlhc2luZy5maW5kKHZhcmlhYmxlQWNjZXNzRGF0
YSktPnZhbHVlLmlzVmFsaWQoKQogICAgICAgICAgICAgICAgICYmICFtX2NyZWF0ZXNBcmd1bWVu
dHMuY29udGFpbnMoY2hpbGQuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAg
ICAgaWYgKCFpc0RlYWRBcmd1bWVudHNSZWdpc3RlciAmJiAhaXNBbGlhc2VkQXJndW1lbnRzUmVn
aXN0ZXIpCiAgICAgICAgICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5jcHAKaW5kZXggNzc5OWVlNTA1OTM1YWQ0ZTEzYmMz
Y2UxOGQwYjczMmEzYWE0Mjk2ZS4uYjViNjY4NDE4YTYzYTdjOTQ0ZGY1ZGM0N2E2MDRiMWU1MzU3
NDFkNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBc3NlbWJseUhl
bHBlcnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXNzZW1ibHlIZWxw
ZXJzLmNwcApAQCAtNDksOSArNDksOSBAQCBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0
PiYgQXNzZW1ibHlIZWxwZXJzOjpkZWNvZGVkQ29kZU1hcEZvcihDb2RlQmxvY2sqCiAgICAgSGFz
aE1hcDxDb2RlQmxvY2sqLCBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiA+OjpBZGRS
ZXN1bHQgcmVzdWx0ID0gbV9kZWNvZGVkQ29kZU1hcHMuYWRkKGNvZGVCbG9jaywgVmVjdG9yPEJ5
dGVjb2RlQW5kTWFjaGluZU9mZnNldD4oKSk7CiAgICAgCiAgICAgaWYgKHJlc3VsdC5pc05ld0Vu
dHJ5KQotICAgICAgICBjb2RlQmxvY2stPmppdENvZGVNYXAoKS0+ZGVjb2RlKHJlc3VsdC5pdGVy
YXRvci0+c2Vjb25kKTsKKyAgICAgICAgY29kZUJsb2NrLT5qaXRDb2RlTWFwKCktPmRlY29kZShy
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKICAgICAKLSAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9y
LT5zZWNvbmQ7CisgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiB9CiAKICNpZiBF
TkFCTEUoU0FNUExJTkdfRkxBR1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0J5dGVDb2RlQ2FjaGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0
ZUNvZGVDYWNoZS5oCmluZGV4IGFiODhlOTllNWI3YTBhMWFjNTQ1MmM1Yzk2MzVmZWVmMDIxZWQw
MGYuLjZiOTA1NmU1NGExOGM2YmZkMDAxMzAzYjhmNGU0ZWU2NWFkMDY0YzcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVDYWNoZS5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVDYWNoZS5oCkBAIC0xMzIsMTAgKzEzMiwx
MCBAQCBwdWJsaWM6CiAgICAgICAgIE1hcDo6aXRlcmF0b3IgYmVnaW4gPSBtX21hcC5iZWdpbigp
OwogICAgICAgICBNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fbWFwLmVuZCgpOwogICAgICAgICBmb3Ig
KE1hcDo6aXRlcmF0b3IgaXRlciA9IGJlZ2luOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0gICAg
ICAgICAgICBpZiAoIWl0ZXItPnNlY29uZC5jb2RlQmxvY2spCisgICAgICAgICAgICBpZiAoIWl0
ZXItPnZhbHVlLmNvZGVCbG9jaykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgIGlmIChpdGVyLT5zZWNvbmQub3duZWQpIHsKLSAgICAgICAgICAgICAgICBkZWxldGUgaXRl
ci0+c2Vjb25kLmNvZGVCbG9jazsKKyAgICAgICAgICAgIGlmIChpdGVyLT52YWx1ZS5vd25lZCkg
eworICAgICAgICAgICAgICAgIGRlbGV0ZSBpdGVyLT52YWx1ZS5jb2RlQmxvY2s7CiAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE0NSw3ICsx
NDUsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX21h
cC5maW5kKGtleSk7CiAgICAgICAgIGlmIChpdGVyICE9IG1fbWFwLmVuZCgpKQotICAgICAgICAg
ICAgcmV0dXJuIGl0ZXItPnNlY29uZC5jb2RlQmxvY2s7CisgICAgICAgICAgICByZXR1cm4gaXRl
ci0+dmFsdWUuY29kZUJsb2NrOwogICAgICAgICAKICAgICAgICAgQnl0ZUNvZGVDYWNoZVZhbHVl
IHZhbHVlOwogICAgICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRl
Q29kZVBhcnNlci5jcHAKaW5kZXggY2QyODM5ODdjMWEyYmQxY2RlYjhlNmQwNGFjMmMwNDE5NTYy
ZjYxNC4uMjdlNjg0MjhiNjdjMTY2NjU5MTIyYzZiM2ZjMmUyYmVlMDE2OTY4ZSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKQEAgLTY3Miw5
ICs2NzIsOSBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgSGFzaE1hcDxKU0NlbGwqLCBOb2Rl
SW5kZXg+OjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9jZWxsQ29uc3RhbnROb2Rlcy5hZGQoY2VsbCwg
Tm9Ob2RlKTsKICAgICAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICAgICAgcmVz
dWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBhZGRUb0dyYXBoKFdlYWtKU0NvbnN0YW50LCBPcEluZm8o
Y2VsbCkpOworICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGFkZFRvR3JhcGgo
V2Vha0pTQ29uc3RhbnQsIE9wSW5mbyhjZWxsKSk7CiAgICAgICAgIAotICAgICAgICByZXR1cm4g
cmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3It
PnZhbHVlOwogICAgIH0KICAgICAKICAgICBDb2RlT3JpZ2luIGN1cnJlbnRDb2RlT3JpZ2luKCkK
QEAgLTMyNTMsNyArMzI1Myw3IEBAIEJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJ
bmxpbmVTdGFja0VudHJ5KAogICAgICAgICAgICAgSWRlbnRpZmllck1hcDo6QWRkUmVzdWx0IHJl
c3VsdCA9IGJ5dGVDb2RlUGFyc2VyLT5tX2lkZW50aWZpZXJNYXAuYWRkKHJlcCwgYnl0ZUNvZGVQ
YXJzZXItPm1fY29kZUJsb2NrLT5udW1iZXJPZklkZW50aWZpZXJzKCkpOwogICAgICAgICAgICAg
aWYgKHJlc3VsdC5pc05ld0VudHJ5KQogICAgICAgICAgICAgICAgIGJ5dGVDb2RlUGFyc2VyLT5t
X2NvZGVCbG9jay0+YWRkSWRlbnRpZmllcihJZGVudGlmaWVyKGJ5dGVDb2RlUGFyc2VyLT5tX2ds
b2JhbERhdGEsIHJlcCkpOwotICAgICAgICAgICAgbV9pZGVudGlmaWVyUmVtYXBbaV0gPSByZXN1
bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgICAgIG1faWRlbnRpZmllclJlbWFwW2ldID0g
cmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgfQogICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGNvZGVCbG9jay0+bnVtYmVyT2ZDb25zdGFudFJlZ2lzdGVycygpOyArK2kpIHsK
ICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBjb2RlQmxvY2stPmdldENvbnN0YW50KGkgKyBG
aXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7CkBAIC0zMjcxLDcgKzMyNzEsNyBAQCBCeXRlQ29k
ZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lU3RhY2tFbnRyeSgKICAgICAgICAgICAg
ICAgICBieXRlQ29kZVBhcnNlci0+bV9jb2RlQmxvY2stPmFkZENvbnN0YW50KHZhbHVlKTsKICAg
ICAgICAgICAgICAgICBieXRlQ29kZVBhcnNlci0+bV9jb25zdGFudHMuYXBwZW5kKENvbnN0YW50
UmVjb3JkKCkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9jb25zdGFudFJlbWFwW2ld
ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgICAgICBtX2NvbnN0YW50UmVtYXBb
aV0gPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogICAgICAgICB9CiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBjb2RlQmxvY2stPm51bWJlck9mR2xvYmFsUmVzb2x2ZUluZm9zKCk7
ICsraSkKICAgICAgICAgICAgIGJ5dGVDb2RlUGFyc2VyLT5tX2NvZGVCbG9jay0+YWRkR2xvYmFs
UmVzb2x2ZUluZm8oc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQ2hlY2tIb2lzdGlu
Z1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQ2hlY2tI
b2lzdGluZ1BoYXNlLmNwcAppbmRleCBjMjlkN2QyMmZjMGZkYTAzMGI4ZmJhOGRlODQwYjMyODMw
NDc5ZjE0Li4xNDUwZjBlMGQ4MjY3YmEzMjA2MGQxZDIyNTFiOGI1MzVkMTE1MTc5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQ
aGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVDaGVj
a0hvaXN0aW5nUGhhc2UuY3BwCkBAIC0xNjgsNyArMTY4LDcgQEAgcHVibGljOgogICAgICAgICAg
ICAgZGF0YUxvZygiWmVyb2luZyB0aGUgc3RydWN0dXJlIHRvIGhvaXN0IGZvciAlcyBiZWNhdXNl
IHRoZSByYXRpbyBpcyAlbGYuXG4iLAogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm5hbWVP
ZlZhcmlhYmxlQWNjZXNzRGF0YSh2YXJpYWJsZSksIHZhcmlhYmxlLT52b3RlUmF0aW8oKSk7CiAj
ZW5kaWYKLSAgICAgICAgICAgIGl0ZXItPnNlY29uZC5tX3N0cnVjdHVyZSA9IDA7CisgICAgICAg
ICAgICBpdGVyLT52YWx1ZS5tX3N0cnVjdHVyZSA9IDA7CiAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgIC8vIERpc2FibGUgc3RydWN0dXJlIGNoZWNrIGhvaXN0aW5nIGZvciB2YXJpYWJsZXMg
dGhhdCBjcm9zcyB0aGUgT1NSIGVudHJ5IHRoYXQKQEAgLTE5Myw3ICsxOTMsNyBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAgICAgSGFzaE1hcDxWYXJpYWJsZUFjY2Vzc0RhdGEqLCBDaGVja0RhdGE+
OjppdGVyYXRvciBpdGVyID0gbV9tYXAuZmluZCh2YXJpYWJsZSk7CiAgICAgICAgICAgICAgICAg
aWYgKGl0ZXIgPT0gbV9tYXAuZW5kKCkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgICAgIGlmICghaXRlci0+c2Vjb25kLm1fc3RydWN0dXJlKQorICAgICAgICAg
ICAgICAgIGlmICghaXRlci0+dmFsdWUubV9zdHJ1Y3R1cmUpCiAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2dyYXBoLm1fbXVz
dEhhbmRsZVZhbHVlc1tpXTsKICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlIHx8ICF2YWx1ZS5p
c0NlbGwoKSkgewpAQCAtMjAxLDE1ICsyMDEsMTUgQEAgcHVibGljOgogICAgICAgICAgICAgICAg
ICAgICBkYXRhTG9nKCJaZXJvaW5nIHRoZSBzdHJ1Y3R1cmUgdG8gaG9pc3QgZm9yICVzIGJlY2F1
c2UgdGhlIE9TUiBlbnRyeSB2YWx1ZSBpcyBub3QgYSBjZWxsOiAlcy5cbiIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9ncmFwaC5uYW1lT2ZWYXJpYWJsZUFjY2Vzc0RhdGEodmFyaWFi
bGUpLCB2YWx1ZS5kZXNjcmlwdGlvbigpKTsKICNlbmRpZgotICAgICAgICAgICAgICAgICAgICBp
dGVyLT5zZWNvbmQubV9zdHJ1Y3R1cmUgPSAwOworICAgICAgICAgICAgICAgICAgICBpdGVyLT52
YWx1ZS5tX3N0cnVjdHVyZSA9IDA7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAodmFsdWUuYXNDZWxsKCktPnN0cnVj
dHVyZSgpICE9IGl0ZXItPnNlY29uZC5tX3N0cnVjdHVyZSkgeworICAgICAgICAgICAgICAgIGlm
ICh2YWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCkgIT0gaXRlci0+dmFsdWUubV9zdHJ1Y3R1cmUp
IHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2coIlplcm9pbmcgdGhlIHN0cnVjdHVyZSB0byBob2lzdCBmb3IgJXMg
YmVjYXVzZSB0aGUgT1NSIGVudHJ5IHZhbHVlIGhhcyBzdHJ1Y3R1cmUgJXAgYW5kIHdlIHdhbnRl
ZCAlcC5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5uYW1lT2ZWYXJp
YWJsZUFjY2Vzc0RhdGEodmFyaWFibGUpLCB2YWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCksIGl0
ZXItPnNlY29uZC5tX3N0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9n
cmFwaC5uYW1lT2ZWYXJpYWJsZUFjY2Vzc0RhdGEodmFyaWFibGUpLCB2YWx1ZS5hc0NlbGwoKS0+
c3RydWN0dXJlKCksIGl0ZXItPnZhbHVlLm1fc3RydWN0dXJlKTsKICNlbmRpZgotICAgICAgICAg
ICAgICAgICAgICBpdGVyLT5zZWNvbmQubV9zdHJ1Y3R1cmUgPSAwOworICAgICAgICAgICAgICAg
ICAgICBpdGVyLT52YWx1ZS5tX3N0cnVjdHVyZSA9IDA7CiAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTMzOSwxNSArMzM5
LDE1IEBAIHB1YmxpYzoKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0Up
CiAgICAgICAgIGZvciAoSGFzaE1hcDxWYXJpYWJsZUFjY2Vzc0RhdGEqLCBDaGVja0RhdGE+Ojpp
dGVyYXRvciBpdCA9IG1fbWFwLmJlZ2luKCk7CiAgICAgICAgICAgICAgaXQgIT0gbV9tYXAuZW5k
KCk7ICsraXQpIHsKLSAgICAgICAgICAgIGlmICghaXQtPnNlY29uZC5tX3N0cnVjdHVyZSkgewot
ICAgICAgICAgICAgICAgIGRhdGFMb2coIk5vdCBob2lzdGluZyBjaGVja3MgZm9yICVzIGJlY2F1
c2Ugb2YgaGV1cmlzdGljcy5cbiIsIG1fZ3JhcGgubmFtZU9mVmFyaWFibGVBY2Nlc3NEYXRhKGl0
LT5maXJzdCkpOworICAgICAgICAgICAgaWYgKCFpdC0+dmFsdWUubV9zdHJ1Y3R1cmUpIHsKKyAg
ICAgICAgICAgICAgICBkYXRhTG9nKCJOb3QgaG9pc3RpbmcgY2hlY2tzIGZvciAlcyBiZWNhdXNl
IG9mIGhldXJpc3RpY3MuXG4iLCBtX2dyYXBoLm5hbWVPZlZhcmlhYmxlQWNjZXNzRGF0YShpdC0+
a2V5KSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBpZiAoaXQtPnNlY29uZC5tX2lzQ2xvYmJlcmVkICYmICFpdC0+c2Vjb25kLm1fc3RydWN0
dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldElzU3RpbGxWYWxpZCgpKSB7Ci0gICAgICAgICAg
ICAgICAgZGF0YUxvZygiTm90IGhvaXN0aW5nIGNoZWNrcyBmb3IgJXMgYmVjYXVzZSB0aGUgc3Ry
dWN0dXJlIGlzIGNsb2JiZXJlZCBhbmQgaGFzIGFuIGludmFsaWQgd2F0Y2hwb2ludCBzZXQuXG4i
LCBtX2dyYXBoLm5hbWVPZlZhcmlhYmxlQWNjZXNzRGF0YShpdC0+Zmlyc3QpKTsKKyAgICAgICAg
ICAgIGlmIChpdC0+dmFsdWUubV9pc0Nsb2JiZXJlZCAmJiAhaXQtPnZhbHVlLm1fc3RydWN0dXJl
LT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldElzU3RpbGxWYWxpZCgpKSB7CisgICAgICAgICAgICAg
ICAgZGF0YUxvZygiTm90IGhvaXN0aW5nIGNoZWNrcyBmb3IgJXMgYmVjYXVzZSB0aGUgc3RydWN0
dXJlIGlzIGNsb2JiZXJlZCBhbmQgaGFzIGFuIGludmFsaWQgd2F0Y2hwb2ludCBzZXQuXG4iLCBt
X2dyYXBoLm5hbWVPZlZhcmlhYmxlQWNjZXNzRGF0YShpdC0+a2V5KSk7CiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBkYXRhTG9nKCJIb2lzdGlu
ZyBjaGVja3MgZm9yICVzXG4iLCBtX2dyYXBoLm5hbWVPZlZhcmlhYmxlQWNjZXNzRGF0YShpdC0+
Zmlyc3QpKTsKKyAgICAgICAgICAgIGRhdGFMb2coIkhvaXN0aW5nIGNoZWNrcyBmb3IgJXNcbiIs
IG1fZ3JhcGgubmFtZU9mVmFyaWFibGVBY2Nlc3NEYXRhKGl0LT5rZXkpKTsKICAgICAgICAgfQog
I2VuZGlmIC8vIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAg
CkBAIC0zODIsOSArMzgyLDkgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBIYXNoTWFw
PFZhcmlhYmxlQWNjZXNzRGF0YSosIENoZWNrRGF0YT46Oml0ZXJhdG9yIGl0ZXIgPSBtX21hcC5m
aW5kKHZhcmlhYmxlKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZXIgPT0gbV9tYXAuZW5k
KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKCFpdGVyLT5zZWNvbmQubV9zdHJ1Y3R1cmUpCisgICAgICAgICAgICAgICAgICAgIGlmICgh
aXRlci0+dmFsdWUubV9zdHJ1Y3R1cmUpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZXItPnNlY29uZC5tX2lzQ2xvYmJlcmVkICYmICFp
dGVyLT5zZWNvbmQubV9zdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SXNTdGlsbFZh
bGlkKCkpCisgICAgICAgICAgICAgICAgICAgIGlmIChpdGVyLT52YWx1ZS5tX2lzQ2xvYmJlcmVk
ICYmICFpdGVyLT52YWx1ZS5tX3N0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRJc1N0
aWxsVmFsaWQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgbm9kZS5yZWYoKTsKQEAgLTM5OCw3ICszOTgs
NyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguYXBwZW5kKGdldExvY2Fs
KTsKICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0LmFwcGVuZChpbmRleEluQmxvY2sg
KyAxLCBnZXRMb2NhbEluZGV4KTsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgICAgIE5vZGUgY2hlY2tTdHJ1Y3R1cmUoQ2hlY2tTdHJ1Y3R1cmUsIGNvZGVPcmlnaW4sIE9w
SW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChpdGVyLT5zZWNvbmQubV9zdHJ1Y3R1cmUpKSwg
Z2V0TG9jYWxJbmRleCk7CisgICAgICAgICAgICAgICAgICAgIE5vZGUgY2hlY2tTdHJ1Y3R1cmUo
Q2hlY2tTdHJ1Y3R1cmUsIGNvZGVPcmlnaW4sIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNl
dChpdGVyLT52YWx1ZS5tX3N0cnVjdHVyZSkpLCBnZXRMb2NhbEluZGV4KTsKICAgICAgICAgICAg
ICAgICAgICAgY2hlY2tTdHJ1Y3R1cmUucmVmKCk7CiAgICAgICAgICAgICAgICAgICAgIE5vZGVJ
bmRleCBjaGVja1N0cnVjdHVyZUluZGV4ID0gbV9ncmFwaC5zaXplKCk7CiAgICAgICAgICAgICAg
ICAgICAgIG1fZ3JhcGguYXBwZW5kKGNoZWNrU3RydWN0dXJlKTsKQEAgLTQxOCw5ICs0MTgsOSBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIEhhc2hNYXA8VmFyaWFibGVBY2Nlc3NEYXRh
KiwgQ2hlY2tEYXRhPjo6aXRlcmF0b3IgaXRlciA9IG1fbWFwLmZpbmQodmFyaWFibGUpOwogICAg
ICAgICAgICAgICAgICAgICBpZiAoaXRlciA9PSBtX21hcC5lbmQoKSkKICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWl0ZXItPnNlY29uZC5t
X3N0cnVjdHVyZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpdGVyLT52YWx1ZS5tX3N0cnVj
dHVyZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICBpZiAoaXRlci0+c2Vjb25kLm1faXNDbG9iYmVyZWQgJiYgIWl0ZXItPnNlY29uZC5tX3N0cnVj
dHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRJc1N0aWxsVmFsaWQoKSkKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGl0ZXItPnZhbHVlLm1faXNDbG9iYmVyZWQgJiYgIWl0ZXItPnZhbHVlLm1f
c3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldElzU3RpbGxWYWxpZCgpKQogICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgICAgICAgICAgLy8gRmlyc3Qg
aW5zZXJ0IGEgZGVhZCBTZXRMb2NhbCB0byB0ZWxsIE9TUiB0aGF0IHRoZSBjaGlsZCdzIHZhbHVl
IHNob3VsZApAQCAtNDM3LDcgKzQzNyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAg
bV9ncmFwaFtjaGlsZDFdLnJlZigpOwogICAgICAgICAgICAgICAgICAgICAvLyBVc2UgYSBGb3J3
YXJkQ2hlY2tTdHJ1Y3R1cmUgdG8gaW5kaWNhdGUgdGhhdCB3ZSBzaG91bGQgZXhpdCB0byB0aGUK
ICAgICAgICAgICAgICAgICAgICAgLy8gbmV4dCBieXRlY29kZSBpbnN0cnVjdGlvbiByYXRoZXIg
dGhhbiByZWV4ZWN1dGluZyB0aGUgY3VycmVudCBvbmUuCi0gICAgICAgICAgICAgICAgICAgIE5v
ZGUgY2hlY2tTdHJ1Y3R1cmUoRm9yd2FyZENoZWNrU3RydWN0dXJlLCBjb2RlT3JpZ2luLCBPcElu
Zm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoaXRlci0+c2Vjb25kLm1fc3RydWN0dXJlKSksIGNo
aWxkMSk7CisgICAgICAgICAgICAgICAgICAgIE5vZGUgY2hlY2tTdHJ1Y3R1cmUoRm9yd2FyZENo
ZWNrU3RydWN0dXJlLCBjb2RlT3JpZ2luLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQo
aXRlci0+dmFsdWUubV9zdHJ1Y3R1cmUpKSwgY2hpbGQxKTsKICAgICAgICAgICAgICAgICAgICAg
Y2hlY2tTdHJ1Y3R1cmUucmVmKCk7CiAgICAgICAgICAgICAgICAgICAgIE5vZGVJbmRleCBjaGVj
a1N0cnVjdHVyZUluZGV4ID0gbV9ncmFwaC5zaXplKCk7CiAgICAgICAgICAgICAgICAgICAgIG1f
Z3JhcGguYXBwZW5kKGNoZWNrU3RydWN0dXJlKTsKQEAgLTQ1MywxNiArNDUzLDE2IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICAgICAgSGFzaE1hcDxWYXJpYWJsZUFjY2Vzc0RhdGEqLCBDaGVj
a0RhdGE+OjppdGVyYXRvciBpdGVyID0gbV9tYXAuZmluZChjaGlsZC52YXJpYWJsZUFjY2Vzc0Rh
dGEoKSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVyID09IG1fbWFwLmVuZCgpKQogICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaXRl
ci0+c2Vjb25kLm1fc3RydWN0dXJlKQorICAgICAgICAgICAgICAgICAgICBpZiAoIWl0ZXItPnZh
bHVlLm1fc3RydWN0dXJlKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmICghaXRlci0+c2Vjb25kLm1faXNDbG9iYmVyZWQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCFpdGVyLT52YWx1ZS5tX2lzQ2xvYmJlcmVkKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBub2RlLnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b20pOwogICAgICAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUucmVmQ291bnQoKSA9PSAxKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIGlmICghaXRlci0+c2Vjb25kLm1fc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hw
b2ludFNldElzU3RpbGxWYWxpZCgpKQorICAgICAgICAgICAgICAgICAgICBpZiAoIWl0ZXItPnZh
bHVlLm1fc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldElzU3RpbGxWYWxpZCgpKQog
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VS
VChpdGVyLT5zZWNvbmQubV9zdHJ1Y3R1cmUgPT0gbm9kZS5zdHJ1Y3R1cmVTZXQoKS5zaW5nbGV0
b25TdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChpdGVyLT52YWx1ZS5t
X3N0cnVjdHVyZSA9PSBub2RlLnN0cnVjdHVyZVNldCgpLnNpbmdsZXRvblN0cnVjdHVyZSgpKTsK
ICAgICAgICAgICAgICAgICAgICAgbm9kZS5jb252ZXJ0VG9TdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0
Y2hwb2ludCgpOwogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CkBAIC00ODUsOSArNDg1LDkgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIG1fbWFwLmFkZCh2YXJpYWJsZSwgQ2hlY2tEYXRhKHN0cnVjdHVyZSwgZmFsc2UpKTsKICAg
ICAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBpZiAocmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQubV9zdHJ1Y3R1cmUgPT0gc3RydWN0dXJlKQor
ICAgICAgICBpZiAocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5tX3N0cnVjdHVyZSA9PSBzdHJ1Y3R1
cmUpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25k
Lm1fc3RydWN0dXJlID0gMDsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5tX3N0cnVj
dHVyZSA9IDA7CiAgICAgfQogICAgIAogICAgIHZvaWQgbm90aWNlU3RydWN0dXJlQ2hlY2soVmFy
aWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSwgY29uc3QgU3RydWN0dXJlU2V0JiBzZXQpCkBAIC01
MDUsNyArNTA1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fbWFwLmZpbmQodmFyaWFibGUp
OwogICAgICAgICBpZiAoaXRlciA9PSBtX21hcC5lbmQoKSkKICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgaXRlci0+c2Vjb25kLm1faXNDbG9iYmVyZWQgPSB0cnVlOworICAgICAgICBpdGVy
LT52YWx1ZS5tX2lzQ2xvYmJlcmVkID0gdHJ1ZTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjbG9i
YmVyKGNvbnN0IE9wZXJhbmRzPFZhcmlhYmxlQWNjZXNzRGF0YSo+JiBsaXZlKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwLmNwcAppbmRleCBiMmRkYzZlNTM5MzhmMmVhZTFhYWUwNTUyYTIxNmU2
NjE4NTZkZjhkLi4yNmUxMjM0ZTMxMjcxN2VjMjdmY2U0ZTZkNTlkNDllNGIwZWE4ZjcxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcApAQCAtMzU1LDcgKzM1NSw3IEBAIHZvaWQgSGVh
cDo6bWFya1Byb3RlY3RlZE9iamVjdHMoSGVhcFJvb3RWaXNpdG9yJiBoZWFwUm9vdFZpc2l0b3Ip
CiB7CiAgICAgUHJvdGVjdENvdW50U2V0OjppdGVyYXRvciBlbmQgPSBtX3Byb3RlY3RlZFZhbHVl
cy5lbmQoKTsKICAgICBmb3IgKFByb3RlY3RDb3VudFNldDo6aXRlcmF0b3IgaXQgPSBtX3Byb3Rl
Y3RlZFZhbHVlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGhlYXBSb290Vmlz
aXRvci52aXNpdCgmaXQtPmZpcnN0KTsKKyAgICAgICAgaGVhcFJvb3RWaXNpdG9yLnZpc2l0KCZp
dC0+a2V5KTsKIH0KIAogdm9pZCBIZWFwOjpwdXNoVGVtcFNvcnRWZWN0b3IoVmVjdG9yPFZhbHVl
U3RyaW5nUGFpcj4qIHRlbXBWZWN0b3IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKaW5kZXgg
ZWIxM2EyMWQyZTYzYWU4YzM1YmViNzQzNzdjNzA0MzA3MjdmNWJkNC4uYTk4MzM4MzdkNDQ0MTdh
YTc3Y2QwMjU4ZWY5ZGVjNDAxMWEwOTZmYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaApA
QCAtMzU1LDcgKzM1NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHsKICAgICAgICAgUHJvdGVj
dENvdW50U2V0OjppdGVyYXRvciBlbmQgPSBtX3Byb3RlY3RlZFZhbHVlcy5lbmQoKTsKICAgICAg
ICAgZm9yIChQcm90ZWN0Q291bnRTZXQ6Oml0ZXJhdG9yIGl0ID0gbV9wcm90ZWN0ZWRWYWx1ZXMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgZnVuY3RvcihpdC0+Zmlyc3Qp
OworICAgICAgICAgICAgZnVuY3RvcihpdC0+a2V5KTsKICAgICAgICAgbV9oYW5kbGVTZXQuZm9y
RWFjaFN0cm9uZ0hhbmRsZShmdW5jdG9yLCBtX3Byb3RlY3RlZFZhbHVlcyk7CiAKICAgICAgICAg
cmV0dXJuIGZ1bmN0b3IucmV0dXJuVmFsdWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmNwcAppbmRleCA1ZTRjYTM2ZTAzNzhkMWM4YzcwNDEw
ZTc4Nzc1YmZkMjllZDdkZWI0Li5hMzdkYzZmNWNlNDRhYTQxNWE1NzExZGI3YWYzODRiOTMzZWQ2
MTY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KSVRTdHViUm91dGlu
ZVNldC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSklUU3R1YlJvdXRpbmVT
ZXQuY3BwCkBAIC04Miw3ICs4Miw3IEBAIHZvaWQgSklUU3R1YlJvdXRpbmVTZXQ6Om1hcmtTbG93
KHVpbnRwdHJfdCBhZGRyZXNzKQogICAgIGlmIChpdGVyID09IG1fYWRkcmVzc1RvUm91dGluZU1h
cC5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGl0ZXItPnNlY29uZC0+bV9tYXlC
ZUV4ZWN1dGluZyA9IHRydWU7CisgICAgaXRlci0+dmFsdWUtPm1fbWF5QmVFeGVjdXRpbmcgPSB0
cnVlOwogfQogCiB2b2lkIEpJVFN0dWJSb3V0aW5lU2V0OjpkZWxldGVVbm1hcmtlZEpldHRpc29u
ZWRTdHViUm91dGluZXMoKQpAQCAtOTcsNyArOTcsNyBAQCB2b2lkIEpJVFN0dWJSb3V0aW5lU2V0
OjpkZWxldGVVbm1hcmtlZEpldHRpc29uZWRTdHViUm91dGluZXMoKQogICAgICAgICB1aW50cHRy
X3Qgc3RlcCA9IEpJVFN0dWJSb3V0aW5lOjphZGRyZXNzU3RlcCgpOwogICAgICAgICBmb3IgKHVp
bnRwdHJfdCBpdGVyID0gc3RhcnQ7IGl0ZXIgPCBlbmQ7IGl0ZXIgKz0gc3RlcCkgewogICAgICAg
ICAgICAgQVNTRVJUKG1fYWRkcmVzc1RvUm91dGluZU1hcC5maW5kKGl0ZXIpICE9IG1fYWRkcmVz
c1RvUm91dGluZU1hcC5lbmQoKSk7Ci0gICAgICAgICAgICBBU1NFUlQobV9hZGRyZXNzVG9Sb3V0
aW5lTWFwLmZpbmQoaXRlciktPnNlY29uZCA9PSByb3V0aW5lKTsKKyAgICAgICAgICAgIEFTU0VS
VChtX2FkZHJlc3NUb1JvdXRpbmVNYXAuZmluZChpdGVyKS0+dmFsdWUgPT0gcm91dGluZSk7CiAg
ICAgICAgICAgICBtX2FkZHJlc3NUb1JvdXRpbmVNYXAucmVtb3ZlKGl0ZXIpOwogICAgICAgICB9
CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZp
c2l0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCmlu
ZGV4IDg4OGQxYjRlNWJlMDM2NTM3N2YwNTQxMDNiMzExZDNkMmE2OTBjMmUuLjhkY2UwODY2NTRj
MTk4M2FhM2FmMDBlNzU0ODI5YTMyZWJlYjllMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9TbG90VmlzaXRvci5jcHAKQEAgLTMyMSw3ICszMjEsNyBAQCBBTFdBWVNfSU5MSU5FIHZv
aWQgU2xvdFZpc2l0b3I6OmludGVybmFsQXBwZW5kKEpTVmFsdWUqIHNsb3QpCiAgICAgICAgICAg
ICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpCiAgICAgICAgICAgICAgICAgc3RyaW5nLT5zZXRI
YXNoQ29uc3RTaW5nbGV0b24oKTsKICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAg
IEpTVmFsdWUgZXhpc3RpbmdKU1ZhbHVlID0gYWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7Cisg
ICAgICAgICAgICAgICAgSlNWYWx1ZSBleGlzdGluZ0pTVmFsdWUgPSBhZGRSZXN1bHQuaXRlcmF0
b3ItPnZhbHVlOwogICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAhPSBleGlzdGluZ0pTVmFsdWUp
CiAgICAgICAgICAgICAgICAgICAgIGpzQ2FzdDxKU1N0cmluZyo+KGV4aXN0aW5nSlNWYWx1ZS5h
c0NlbGwoKSktPmNsZWFySGFzaENvbnN0U2luZ2xldG9uKCk7CiAgICAgICAgICAgICAgICAgKnNs
b3QgPSBleGlzdGluZ0pTVmFsdWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9XZWFrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrLmgKaW5kZXggMDc2
OThmZDA2YjA2Yzc1MDE0YmI2NWJmMjVmYzMxYzI4YTlhMDY4NC4uM2MzZDFkMGNlZmUxODEyNjU5
YzVmYTczYzc0ZDE5OTQ4YzE4ZmZlYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvV2Vhay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWsuaApAQCAt
MTY0LDggKzE2NCw4IEBAIHRlbXBsYXRlPHR5cGVuYW1lIE1hcCwgdHlwZW5hbWUgS2V5LCB0eXBl
bmFtZSBWYWx1ZT4gaW5saW5lIHZvaWQgd2Vha1JlbW92ZShNYXAmCiAgICAgdHlwZW5hbWUgTWFw
OjppdGVyYXRvciBpdCA9IG1hcC5maW5kKGtleSk7CiAgICAgQVNTRVJUX1VOVVNFRCh2YWx1ZSwg
dmFsdWUpOwogICAgIEFTU0VSVChpdCAhPSBtYXAuZW5kKCkpOwotICAgIEFTU0VSVChpdC0+c2Vj
b25kLndhcyh2YWx1ZSkpOwotICAgIEFTU0VSVCghaXQtPnNlY29uZCk7CisgICAgQVNTRVJUKGl0
LT52YWx1ZS53YXModmFsdWUpKTsKKyAgICBBU1NFUlQoIWl0LT52YWx1ZSk7CiAgICAgbWFwLnJl
bW92ZShpdCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAppbmRleCBiZjVhYzg4ZGQ5
YzNmNDY2Mjc5NDhjNTM3NGU0ZjE0NDgzZmMzZTY2Li4zOTg0NTI3NzQ4NjgxNjE0ZjMyNGJkOWQw
ZGYwYTU2N2JiN2FkZDRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCkBAIC03MTUsOCAr
NzE1LDggQEAgSklUQ29kZSBKSVQ6OnByaXZhdGVDb21waWxlKENvZGVQdHIqIGZ1bmN0aW9uRW50
cnlBcml0eUNoZWNrLCBKSVRDb21waWxhdGlvbkVmZm8KIAogICAgICAgICAgICAgU3RyaW5nSnVt
cFRhYmxlOjpTdHJpbmdPZmZzZXRUYWJsZTo6aXRlcmF0b3IgZW5kID0gcmVjb3JkLmp1bXBUYWJs
ZS5zdHJpbmdKdW1wVGFibGUtPm9mZnNldFRhYmxlLmVuZCgpOyAgICAgICAgICAgIAogICAgICAg
ICAgICAgZm9yIChTdHJpbmdKdW1wVGFibGU6OlN0cmluZ09mZnNldFRhYmxlOjppdGVyYXRvciBp
dCA9IHJlY29yZC5qdW1wVGFibGUuc3RyaW5nSnVtcFRhYmxlLT5vZmZzZXRUYWJsZS5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBp
dC0+c2Vjb25kLmJyYW5jaE9mZnNldDsKLSAgICAgICAgICAgICAgICBpdC0+c2Vjb25kLmN0aU9m
ZnNldCA9IG9mZnNldCA/IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YobV9sYWJlbHNbYnl0ZWNvZGVP
ZmZzZXQgKyBvZmZzZXRdKSA6IHJlY29yZC5qdW1wVGFibGUuc3RyaW5nSnVtcFRhYmxlLT5jdGlE
ZWZhdWx0OworICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IGl0LT52YWx1ZS5icmFu
Y2hPZmZzZXQ7CisgICAgICAgICAgICAgICAgaXQtPnZhbHVlLmN0aU9mZnNldCA9IG9mZnNldCA/
IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YobV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyBvZmZzZXRd
KSA6IHJlY29yZC5qdW1wVGFibGUuc3RyaW5nSnVtcFRhYmxlLT5jdGlEZWZhdWx0OwogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRTdHVicy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJz
LmNwcAppbmRleCBkYTUwNzgzOGE2NzhlZTA1NTdjNDg2Nzc1Y2E2Y2MwMzNhZGY4ZjU4Li4xMGQz
NTcyMGUxMTg4ZDA4ODRmOGZhNWM1OTRmOTBmMzVlODI5NDA3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFN0dWJzLmNwcApAQCAtMzQyMyw4ICszNDIzLDggQEAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIEpJVFRodW5rczo6Y3RpU3R1YihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFRodW5r
R2VuZXJhdG8KIHsKICAgICBDVElTdHViTWFwOjpBZGRSZXN1bHQgZW50cnkgPSBtX2N0aVN0dWJN
YXAuYWRkKGdlbmVyYXRvciwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCkpOwogICAgIGlmIChlbnRy
eS5pc05ld0VudHJ5KQotICAgICAgICBlbnRyeS5pdGVyYXRvci0+c2Vjb25kID0gZ2VuZXJhdG9y
KGdsb2JhbERhdGEpOwotICAgIHJldHVybiBlbnRyeS5pdGVyYXRvci0+c2Vjb25kOworICAgICAg
ICBlbnRyeS5pdGVyYXRvci0+dmFsdWUgPSBnZW5lcmF0b3IoZ2xvYmFsRGF0YSk7CisgICAgcmV0
dXJuIGVudHJ5Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIAogTmF0aXZlRXhlY3V0YWJsZSogSklUVGh1
bmtzOjpob3N0RnVuY3Rpb25TdHViKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgTmF0aXZlRnVu
Y3Rpb24gZnVuY3Rpb24sIE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCmluZGV4IDM1NTVmMDdjZDkyYmE5NmM2Yjg5NjY3NDFj
MzRlMzRiMzMzNDNkNjAuLjE0MWZhZTdjY2YzOTVhMjRlZjQ2ZmNmNzM2MWZiZGE2MDA5ZGY3NjAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAKQEAgLTEzNjYsMTAgKzEz
NjYsMTAgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBQYXJz
ZXI8TGV4ZXJUeXBlPjo6cGFyc2VTdHJpY3RPYmplY3QKICAgICAgICAgaWYgKCFtX3N5bnRheEFs
cmVhZHlWYWxpZGF0ZWQpIHsKICAgICAgICAgICAgIE9iamVjdFZhbGlkYXRpb25NYXA6OkFkZFJl
c3VsdCBwcm9wZXJ0eUVudHJ5ID0gb2JqZWN0VmFsaWRhdG9yLmFkZChjb250ZXh0LmdldE5hbWUo
cHJvcGVydHkpLmltcGwoKSwgY29udGV4dC5nZXRUeXBlKHByb3BlcnR5KSk7CiAgICAgICAgICAg
ICBpZiAoIXByb3BlcnR5RW50cnkuaXNOZXdFbnRyeSkgewotICAgICAgICAgICAgICAgIGZhaWxJ
ZlRydWUocHJvcGVydHlFbnRyeS5pdGVyYXRvci0+c2Vjb25kID09IFByb3BlcnR5Tm9kZTo6Q29u
c3RhbnQpOworICAgICAgICAgICAgICAgIGZhaWxJZlRydWUocHJvcGVydHlFbnRyeS5pdGVyYXRv
ci0+dmFsdWUgPT0gUHJvcGVydHlOb2RlOjpDb25zdGFudCk7CiAgICAgICAgICAgICAgICAgZmFp
bElmVHJ1ZShjb250ZXh0LmdldFR5cGUocHJvcGVydHkpID09IFByb3BlcnR5Tm9kZTo6Q29uc3Rh
bnQpOwotICAgICAgICAgICAgICAgIGZhaWxJZlRydWUoY29udGV4dC5nZXRUeXBlKHByb3BlcnR5
KSAmIHByb3BlcnR5RW50cnkuaXRlcmF0b3ItPnNlY29uZCk7Ci0gICAgICAgICAgICAgICAgcHJv
cGVydHlFbnRyeS5pdGVyYXRvci0+c2Vjb25kIHw9IGNvbnRleHQuZ2V0VHlwZShwcm9wZXJ0eSk7
CisgICAgICAgICAgICAgICAgZmFpbElmVHJ1ZShjb250ZXh0LmdldFR5cGUocHJvcGVydHkpICYg
cHJvcGVydHlFbnRyeS5pdGVyYXRvci0+dmFsdWUpOworICAgICAgICAgICAgICAgIHByb3BlcnR5
RW50cnkuaXRlcmF0b3ItPnZhbHVlIHw9IGNvbnRleHQuZ2V0VHlwZShwcm9wZXJ0eSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgdGFpbCA9IGNvbnRleHQuY3JlYXRlUHJvcGVy
dHlMaXN0KHByb3BlcnR5TG9jYXRpb24sIHByb3BlcnR5LCB0YWlsKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wcm9maWxlci9Qcm9maWxlLmNwcAppbmRleCA1MWY4NzE4OTgzOGM0OWI3NDBlMjFi
MDZkZGYxYjg3NGY2NDVmMDM1Li5hNjQxNTgwZWMyNDY0NTY4NTU3MTczMDBhZGVjMDFkOTFiZTJh
MjM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZS5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGUuY3BwCkBAIC0x
MTEsNyArMTExLDcgQEAgdHlwZWRlZiBXVEY6OktleVZhbHVlUGFpcjxGdW5jdGlvbkNhbGxIYXNo
Q291bnQ6OlZhbHVlVHlwZSwgdW5zaWduZWQ+IE5hbWVDb3VudFAKIAogc3RhdGljIGlubGluZSBi
b29sIGZ1bmN0aW9uTmFtZUNvdW50UGFpckNvbXBhcmF0b3IoY29uc3QgTmFtZUNvdW50UGFpciYg
YSwgY29uc3QgTmFtZUNvdW50UGFpciYgYikKIHsKLSAgICByZXR1cm4gYS5zZWNvbmQgPiBiLnNl
Y29uZDsKKyAgICByZXR1cm4gYS52YWx1ZSA+IGIudmFsdWU7CiB9CiAKIHZvaWQgUHJvZmlsZTo6
ZGVidWdQcmludERhdGFTYW1wbGVTdHlsZSgpIGNvbnN0CkBAIC0xMjgsNyArMTI4LDcgQEAgdm9p
ZCBQcm9maWxlOjpkZWJ1Z1ByaW50RGF0YVNhbXBsZVN0eWxlKCkgY29uc3QKIAogICAgIHN0ZDo6
c29ydChzb3J0ZWRGdW5jdGlvbnMuYmVnaW4oKSwgc29ydGVkRnVuY3Rpb25zLmVuZCgpLCBmdW5j
dGlvbk5hbWVDb3VudFBhaXJDb21wYXJhdG9yKTsKICAgICBmb3IgKE5hbWVDb3VudFBhaXJWZWN0
b3I6Oml0ZXJhdG9yIGl0ID0gc29ydGVkRnVuY3Rpb25zLmJlZ2luKCk7IGl0ICE9IHNvcnRlZEZ1
bmN0aW9ucy5lbmQoKTsgKytpdCkKLSAgICAgICAgZGF0YUxvZygiICAgICAgICAlLTEyZCVzXG4i
LCAoKml0KS5zZWNvbmQsIFN0cmluZygoKml0KS5maXJzdCkudXRmOCgpLmRhdGEoKSk7CisgICAg
ICAgIGRhdGFMb2coIiAgICAgICAgJS0xMmQlc1xuIiwgKCppdCkudmFsdWUsIFN0cmluZygoKml0
KS5rZXkpLnV0ZjgoKS5kYXRhKCkpOwogCiAgICAgZGF0YUxvZygiXG5Tb3J0IGJ5IHRvcCBvZiBz
dGFjaywgc2FtZSBjb2xsYXBzZWQgKHdoZW4gPj0gNSk6XG4iKTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5jcHAKaW5kZXggMzIwMDk1NjY3ODY0NjNkMjZk
M2I5YWRkMjk0MWYzZDk1OWYyNWNlNy4uNDVkZDBiYmRlZGE2NmY0NWUyYTcxYjhhZWE3YjhiOWJh
MGEwNjljZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRp
Zmllci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5j
cHAKQEAgLTk5LDcgKzk5LDcgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBJZGVudGlmaWVyOjph
ZGQoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBjaGFyKiBjKQogCiAgICAgY29uc3Qg
TGl0ZXJhbElkZW50aWZpZXJUYWJsZTo6aXRlcmF0b3ImIGl0ZXIgPSBsaXRlcmFsSWRlbnRpZmll
clRhYmxlLmZpbmQoYyk7CiAgICAgaWYgKGl0ZXIgIT0gbGl0ZXJhbElkZW50aWZpZXJUYWJsZS5l
bmQoKSkKLSAgICAgICAgcmV0dXJuIGl0ZXItPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGl0ZXIt
PnZhbHVlOwogCiAgICAgSGFzaFNldDxTdHJpbmdJbXBsKj46OkFkZFJlc3VsdCBhZGRSZXN1bHQg
PSBpZGVudGlmaWVyVGFibGUuYWRkPGNvbnN0IExDaGFyKiwgSWRlbnRpZmllckFTQ0lJU3RyaW5n
VHJhbnNsYXRvcj4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KGMpKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5jcHAKaW5kZXggYzM0ZTEw
YmM4N2QzODllYzA2YWM3NmM5NDRhN2ZkNGQyNTg2MGIyNC4uNDk3MmY0ZjhlM2YyMDk5OWZkMDRi
OGE2YjkxODMxZGExNjJkNThjNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBY3RpdmF0aW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FjdGl2YXRpb24uY3BwCkBAIC0xMTYsMTEgKzExNiwxMSBAQCB2b2lkIEpTQWN0aXZhdGlv
bjo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0
ZSogZXhlYwogCiAgICAgU3ltYm9sVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHRoaXNPYmpl
Y3QtPnN5bWJvbFRhYmxlKCktPmVuZCgpOwogICAgIGZvciAoU3ltYm9sVGFibGU6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS0+YmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kLmdldEF0dHJpYnV0ZXMoKSAmIERvbnRF
bnVtICYmIG1vZGUgIT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykKKyAgICAgICAgaWYgKGl0
LT52YWx1ZS5nZXRBdHRyaWJ1dGVzKCkgJiBEb250RW51bSAmJiBtb2RlICE9IEluY2x1ZGVEb250
RW51bVByb3BlcnRpZXMpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKCF0aGlz
T2JqZWN0LT5pc1ZhbGlkKGl0LT5zZWNvbmQpKQorICAgICAgICBpZiAoIXRoaXNPYmplY3QtPmlz
VmFsaWQoaXQtPnZhbHVlKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBwcm9wZXJ0
eU5hbWVzLmFkZChJZGVudGlmaWVyKGV4ZWMsIGl0LT5maXJzdC5nZXQoKSkpOworICAgICAgICBw
cm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyKGV4ZWMsIGl0LT5rZXkuZ2V0KCkpKTsKICAgICB9
CiAgICAgLy8gU2tpcCB0aGUgSlNWYXJpYWJsZU9iamVjdCBpbXBsZW1lbnRhdGlvbiBvZiBnZXRP
d25Ob25JbmRleFByb3BlcnR5TmFtZXMKICAgICBKU09iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9w
ZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwpAQCAtMTMz
LDcgKzEzMyw3IEBAIGlubGluZSBib29sIEpTQWN0aXZhdGlvbjo6c3ltYm9sVGFibGVQdXRXaXRo
QXR0cmlidXRlcyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsCiAgICAgU3ltYm9sVGFibGU6Oml0
ZXJhdG9yIGl0ZXIgPSBzeW1ib2xUYWJsZSgpLT5maW5kKHByb3BlcnR5TmFtZS5wdWJsaWNOYW1l
KCkpOwogICAgIGlmIChpdGVyID09IHN5bWJvbFRhYmxlKCktPmVuZCgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgU3ltYm9sVGFibGVFbnRyeSYgZW50cnkgPSBpdGVyLT5zZWNvbmQ7Cisg
ICAgU3ltYm9sVGFibGVFbnRyeSYgZW50cnkgPSBpdGVyLT52YWx1ZTsKICAgICBBU1NFUlQoIWVu
dHJ5LmlzTnVsbCgpKTsKICAgICBpZiAoIWlzVmFsaWQoZW50cnkpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCmluZGV4IDc1
YWQ3ZjcyZGVkM2NlNTJiMzY3MzAxOWNlMTlkYTE1NGUxZjM3ZTMuLmJkNjVlZWU3YmNhODI3YmI1
NjIzYWNjYjIwOWFmNjc3MjA2NWQ5YzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXkuY3BwCkBAIC0zNTYsNyArMzU2LDcgQEAgYm9vbCBKU0FycmF5OjpzZXRMZW5ndGgo
RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBuZXdMZW5ndGgsIGJvb2wgdGhyb3dFeGNlcHRpb24K
ICAgICAgICAgICAgIGtleXMucmVzZXJ2ZUNhcGFjaXR5KG1pbihtYXAtPnNpemUoKSwgc3RhdGlj
X2Nhc3Q8c2l6ZV90PihsZW5ndGggLSBuZXdMZW5ndGgpKSk7CiAgICAgICAgICAgICBTcGFyc2VB
cnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwogICAgICAgICAg
ICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXgg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaXQtPmZpcnN0KTsKKyAgICAgICAgICAgICAgICB1bnNp
Z25lZCBpbmRleCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihpdC0+a2V5KTsKICAgICAgICAgICAg
ICAgICBpZiAoaW5kZXggPCBsZW5ndGggJiYgaW5kZXggPj0gbmV3TGVuZ3RoKQogICAgICAgICAg
ICAgICAgICAgICBrZXlzLmFwcGVuZChpbmRleCk7CiAgICAgICAgICAgICB9CkBAIC0zNzEsNyAr
MzcxLDcgQEAgYm9vbCBKU0FycmF5OjpzZXRMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25l
ZCBuZXdMZW5ndGgsIGJvb2wgdGhyb3dFeGNlcHRpb24KICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgaW5kZXggPSBrZXlzWy0taV07CiAgICAgICAgICAgICAgICAgICAgIFNwYXJzZUFycmF5
VmFsdWVNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLT5maW5kKGluZGV4KTsKICAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKGl0ICE9IG1hcC0+bm90Rm91bmQoKSk7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChpdC0+c2Vjb25kLmF0dHJpYnV0ZXMgJiBEb250RGVsZXRlKSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChpdC0+dmFsdWUuYXR0cmlidXRlcyAmIERvbnREZWxldGUpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChpbmRleCArIDEpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIlVuYWJs
ZSB0byBkZWxldGUgcHJvcGVydHkuIik7CiAgICAgICAgICAgICAgICAgICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAppbmRleCBlNTUwZDkwNWE4N2EwYjY2
MTJiNDY0ODVmNmNjMTlmNTA2NzlmNzgwLi5iMGNhY2QyODQxOWEyYWQ3MWMzMDlmNzdjZGRkMmU2
Mjk5ZGVmMTRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09i
amVjdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3Bw
CkBAIC0yNDgsNyArMjQ4LDcgQEAgYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJ
bmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQKICAgICAgICAgfSBl
bHNlIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1hcC5n
ZXQoKSkgewogICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRlcmF0b3IgaXQgPSBt
YXAtPmZpbmQoaSk7CiAgICAgICAgICAgICBpZiAoaXQgIT0gbWFwLT5ub3RGb3VuZCgpKSB7Ci0g
ICAgICAgICAgICAgICAgaXQtPnNlY29uZC5nZXQoc2xvdCk7CisgICAgICAgICAgICAgICAgaXQt
PnZhbHVlLmdldChzbG90KTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQpAQCAtNDI1LDcgKzQyNSw3IEBAIEFycmF5U3RvcmFnZSogSlNPYmpl
Y3Q6OmVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhp
c3RzCiAgICAgICAgIC8vIFRoaXMgd2lsbCBhbHdheXMgYmUgYSBuZXcgZW50cnkgaW4gdGhlIG1h
cCwgc28gbm8gbmVlZCB0byBjaGVjayB3ZSBjYW4gd3JpdGUsCiAgICAgICAgIC8vIGFuZCBhdHRy
aWJ1dGVzIGFyZSBkZWZhdWx0IHNvIG5vIG5lZWQgdG8gc2V0IHRoZW0uCiAgICAgICAgIGlmICh2
YWx1ZSkKLSAgICAgICAgICAgIG1hcC0+YWRkKHRoaXMsIGkpLml0ZXJhdG9yLT5zZWNvbmQuc2V0
KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgIG1hcC0+YWRkKHRoaXMsIGkp
Lml0ZXJhdG9yLT52YWx1ZS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOwogICAgIH0KIAog
ICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gc3RvcmFnZS0+YnV0dGVyZmx5KCktPnJlc2l6
ZUFycmF5KGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCAwLCBBcnJheVN0b3JhZ2U6OnNpemVGb3Io
MCkpOwpAQCAtNzE2LDcgKzcxNiw3IEBAIGJvb2wgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJ
bmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSkKICAgICAgICAg
fSBlbHNlIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1h
cC5nZXQoKSkgewogICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRlcmF0b3IgaXQg
PSBtYXAtPmZpbmQoaSk7CiAgICAgICAgICAgICBpZiAoaXQgIT0gbWFwLT5ub3RGb3VuZCgpKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKGl0LT5zZWNvbmQuYXR0cmlidXRlcyAmIERvbnREZWxldGUp
CisgICAgICAgICAgICAgICAgaWYgKGl0LT52YWx1ZS5hdHRyaWJ1dGVzICYgRG9udERlbGV0ZSkK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIG1hcC0+
cmVtb3ZlKGl0KTsKICAgICAgICAgICAgIH0KQEAgLTg5Miw4ICs4OTIsOCBAQCB2b2lkIEpTT2Jq
ZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVydHlOYQogICAgICAgICAgICAgCiAgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVl
TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwogICAgICAgICAgICAgZm9yIChT
cGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRF
bnVtUHJvcGVydGllcyB8fCAhKGl0LT5zZWNvbmQuYXR0cmlidXRlcyAmIERvbnRFbnVtKSkKLSAg
ICAgICAgICAgICAgICAgICAga2V5cy5hcHBlbmQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGl0LT5m
aXJzdCkpOworICAgICAgICAgICAgICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3Bl
cnRpZXMgfHwgIShpdC0+dmFsdWUuYXR0cmlidXRlcyAmIERvbnRFbnVtKSkKKyAgICAgICAgICAg
ICAgICAgICAga2V5cy5hcHBlbmQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGl0LT5rZXkpKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgc3RkOjpzb3J0KGtleXMuYmVn
aW4oKSwga2V5cy5lbmQoKSk7CkBAIC0xMTIzLDcgKzExMjMsNyBAQCBib29sIEpTT2JqZWN0Ojpk
ZWZpbmVPd25JbmRleGVkUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwg
UHJvcGVydAogCiAgICAgLy8gMS4gTGV0IGN1cnJlbnQgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5n
IHRoZSBbW0dldE93blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBwcm9wZXJ0
eSBuYW1lIFAuCiAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1h
cC0+YWRkKHRoaXMsIGluZGV4KTsKLSAgICBTcGFyc2VBcnJheUVudHJ5KiBlbnRyeUluTWFwID0g
JnJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgIFNwYXJzZUFycmF5RW50cnkqIGVudHJ5SW5N
YXAgPSAmcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIAogICAgIC8vIDIuIExldCBleHRlbnNpYmxl
IGJlIHRoZSB2YWx1ZSBvZiB0aGUgW1tFeHRlbnNpYmxlXV0gaW50ZXJuYWwgcHJvcGVydHkgb2Yg
Ty4KICAgICAvLyAzLiBJZiBjdXJyZW50IGlzIHVuZGVmaW5lZCBhbmQgZXh0ZW5zaWJsZSBpcyBm
YWxzZSwgdGhlbiBSZWplY3QuCkBAIC0xMjQzLDggKzEyNDMsOCBAQCBib29sIEpTT2JqZWN0Ojph
dHRlbXB0VG9JbnRlcmNlcHRQdXRCeUluZGV4T25Ib2xlRm9yUHJvdG90eXBlKEV4ZWNTdGF0ZSog
ZXhlYywgSgogICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBjdXJyZW50LT5hcnJheVN0
b3JhZ2VPck51bGwoKTsKICAgICAgICAgaWYgKHN0b3JhZ2UgJiYgc3RvcmFnZS0+bV9zcGFyc2VN
YXApIHsKICAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBz
dG9yYWdlLT5tX3NwYXJzZU1hcC0+ZmluZChpKTsKLSAgICAgICAgICAgIGlmIChpdGVyICE9IHN0
b3JhZ2UtPm1fc3BhcnNlTWFwLT5ub3RGb3VuZCgpICYmIChpdGVyLT5zZWNvbmQuYXR0cmlidXRl
cyAmIChBY2Nlc3NvciB8IFJlYWRPbmx5KSkpIHsKLSAgICAgICAgICAgICAgICBpdGVyLT5zZWNv
bmQucHV0KGV4ZWMsIHRoaXNWYWx1ZSwgc3RvcmFnZS0+bV9zcGFyc2VNYXAuZ2V0KCksIHZhbHVl
LCBzaG91bGRUaHJvdyk7CisgICAgICAgICAgICBpZiAoaXRlciAhPSBzdG9yYWdlLT5tX3NwYXJz
ZU1hcC0+bm90Rm91bmQoKSAmJiAoaXRlci0+dmFsdWUuYXR0cmlidXRlcyAmIChBY2Nlc3NvciB8
IFJlYWRPbmx5KSkpIHsKKyAgICAgICAgICAgICAgICBpdGVyLT52YWx1ZS5wdXQoZXhlYywgdGhp
c1ZhbHVlLCBzdG9yYWdlLT5tX3NwYXJzZU1hcC5nZXQoKSwgdmFsdWUsIHNob3VsZFRocm93KTsK
ICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpA
QCAtMTMyOCw3ICsxMzI4LDcgQEAgdm9pZCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3Rv
ckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCB1bnMKICAgICBXcml0ZUJh
cnJpZXI8VW5rbm93bj4qIHZlY3RvciA9IHN0b3JhZ2UtPm1fdmVjdG9yOwogICAgIFNwYXJzZUFy
cmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7CiAgICAgZm9yIChT
cGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KQotICAgICAgICB2ZWN0b3JbaXQtPmZpcnN0XS5zZXQoZ2xvYmFsRGF0YSwg
dGhpcywgaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCkpOworICAgICAgICB2ZWN0b3JbaXQt
PmtleV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIGl0LT52YWx1ZS5nZXROb25TcGFyc2VNb2RlKCkp
OwogICAgIGRlYWxsb2NhdGVTcGFyc2VJbmRleE1hcCgpOwogCiAgICAgLy8gU3RvcmUgdGhlIG5l
dyBwcm9wZXJ0eSBpbnRvIHRoZSB2ZWN0b3IuCkBAIC0xNDQ0LDcgKzE0NDQsNyBAQCBib29sIEpT
T2JqZWN0OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2Uo
RXhlY1N0YXRlKiBleGVjLAogICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0gc3Rv
cmFnZS0+bV92ZWN0b3I7CiAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gbWFwLT5lbmQoKTsKICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHZlY3Rv
cltpdC0+Zmlyc3RdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBpdC0+c2Vjb25kLmdldE5vblNwYXJz
ZU1vZGUoKSk7CisgICAgICAgIHZlY3RvcltpdC0+a2V5XS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywg
aXQtPnZhbHVlLmdldE5vblNwYXJzZU1vZGUoKSk7CiAgICAgZGVhbGxvY2F0ZVNwYXJzZUluZGV4
TWFwKCk7CiAKICAgICAvLyBTdG9yZSB0aGUgbmV3IHByb3BlcnR5IGludG8gdGhlIHZlY3Rvci4K
QEAgLTE2MTcsNyArMTYxNyw3IEBAIGJvb2wgSlNPYmplY3Q6OmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlCiAgICAgICAgICAg
ICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+ZmluZChpKTsKICAgICAg
ICAgICAgIGlmIChpdCA9PSBtYXAtPm5vdEZvdW5kKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgaXQtPnNlY29uZC5nZXQoZGVzY3JpcHRvcik7CisgICAgICAg
ICAgICBpdC0+dmFsdWUuZ2V0KGRlc2NyaXB0b3IpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcAppbmRleCA3NjVlMWQz
ZDQ0ZDY5YWI4MTMzZDc2Y2ZjYzdlMjI3MzVkODY2NGZiLi43ZGNkZTQ3MDA0NmM4ZjI3MjBmMDdi
NzRjNWFkNzI3NDdhMTQwNGQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcApAQCAtNjEsOCArNjEsOCBAQCB2b2lkIEpT
U3ltYm9sVGFibGVPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCog
b2JqZWN0LCBFeGVjU3RhdAogICAgIEpTU3ltYm9sVGFibGVPYmplY3QqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNTeW1ib2xUYWJsZU9iamVjdCo+KG9iamVjdCk7CiAgICAgU3ltYm9sVGFibGU6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCktPmVuZCgpOwogICAg
IGZvciAoU3ltYm9sVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdGhpc09iamVjdC0+c3ltYm9s
VGFibGUoKS0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmICghKGl0LT5z
ZWNvbmQuZ2V0QXR0cmlidXRlcygpICYgRG9udEVudW0pIHx8IChtb2RlID09IEluY2x1ZGVEb250
RW51bVByb3BlcnRpZXMpKQotICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmll
cihleGVjLCBpdC0+Zmlyc3QuZ2V0KCkpKTsKKyAgICAgICAgaWYgKCEoaXQtPnZhbHVlLmdldEF0
dHJpYnV0ZXMoKSAmIERvbnRFbnVtKSB8fCAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0
aWVzKSkKKyAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXIoZXhlYywgaXQt
PmtleS5nZXQoKSkpOwogICAgIH0KICAgICAKICAgICBKU09iamVjdDo6Z2V0T3duTm9uSW5kZXhQ
cm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVj
dC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5o
CmluZGV4IGI0ZDMxM2MxOTE5ODBmZGI4OTdlY2RmNDQ1ZmExNDFkZWUxMmYzZmQuLjkxMzY3OWY4
MGM3MmJjY2QxYzg4NjE3M2NkMTJmODkzM2VhZGQ3MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgKQEAgLTc2LDcgKzc2LDcg
QEAgaW5saW5lIGJvb2wgc3ltYm9sVGFibGVHZXQoCiAgICAgU3ltYm9sVGFibGU6Oml0ZXJhdG9y
IGl0ZXIgPSBzeW1ib2xUYWJsZS5maW5kKHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCkpOwogICAg
IGlmIChpdGVyID09IHN5bWJvbFRhYmxlLmVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgU3ltYm9sVGFibGVFbnRyeTo6RmFzdCBlbnRyeSA9IGl0ZXItPnNlY29uZDsKKyAgICBTeW1i
b2xUYWJsZUVudHJ5OjpGYXN0IGVudHJ5ID0gaXRlci0+dmFsdWU7CiAgICAgQVNTRVJUKCFlbnRy
eS5pc051bGwoKSk7CiAgICAgc2xvdC5zZXRWYWx1ZShvYmplY3QtPnJlZ2lzdGVyQXQoZW50cnku
Z2V0SW5kZXgoKSkuZ2V0KCkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtOTAsNyArOTAsNyBAQCBp
bmxpbmUgYm9vbCBzeW1ib2xUYWJsZUdldCgKICAgICBTeW1ib2xUYWJsZTo6aXRlcmF0b3IgaXRl
ciA9IHN5bWJvbFRhYmxlLmZpbmQocHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSk7CiAgICAgaWYg
KGl0ZXIgPT0gc3ltYm9sVGFibGUuZW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBT
eW1ib2xUYWJsZUVudHJ5OjpGYXN0IGVudHJ5ID0gaXRlci0+c2Vjb25kOworICAgIFN5bWJvbFRh
YmxlRW50cnk6OkZhc3QgZW50cnkgPSBpdGVyLT52YWx1ZTsKICAgICBBU1NFUlQoIWVudHJ5Lmlz
TnVsbCgpKTsKICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoCiAgICAgICAgIG9iamVjdC0+
cmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKS5nZXQoKSwgZW50cnkuZ2V0QXR0cmlidXRlcygp
IHwgRG9udERlbGV0ZSk7CkBAIC0xMDYsNyArMTA2LDcgQEAgaW5saW5lIGJvb2wgc3ltYm9sVGFi
bGVHZXQoCiAgICAgU3ltYm9sVGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSBzeW1ib2xUYWJsZS5maW5k
KHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCkpOwogICAgIGlmIChpdGVyID09IHN5bWJvbFRhYmxl
LmVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgU3ltYm9sVGFibGVFbnRyeTo6RmFz
dCBlbnRyeSA9IGl0ZXItPnNlY29uZDsKKyAgICBTeW1ib2xUYWJsZUVudHJ5OjpGYXN0IGVudHJ5
ID0gaXRlci0+dmFsdWU7CiAgICAgQVNTRVJUKCFlbnRyeS5pc051bGwoKSk7CiAgICAgc2xvdC5z
ZXRWYWx1ZShvYmplY3QtPnJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuZ2V0KCkpOwogICAg
IHNsb3RJc1dyaXRlYWJsZSA9ICFlbnRyeS5pc1JlYWRPbmx5KCk7CkBAIC0xMjYsNyArMTI2LDcg
QEAgaW5saW5lIGJvb2wgc3ltYm9sVGFibGVQdXQoCiAgICAgaWYgKGl0ZXIgPT0gc3ltYm9sVGFi
bGUuZW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBib29sIHdhc0ZhdDsKLSAgICBT
eW1ib2xUYWJsZUVudHJ5OjpGYXN0IGZhc3RFbnRyeSA9IGl0ZXItPnNlY29uZC5nZXRGYXN0KHdh
c0ZhdCk7CisgICAgU3ltYm9sVGFibGVFbnRyeTo6RmFzdCBmYXN0RW50cnkgPSBpdGVyLT52YWx1
ZS5nZXRGYXN0KHdhc0ZhdCk7CiAgICAgQVNTRVJUKCFmYXN0RW50cnkuaXNOdWxsKCkpOwogICAg
IGlmIChmYXN0RW50cnkuaXNSZWFkT25seSgpKSB7CiAgICAgICAgIGlmIChzaG91bGRUaHJvdykK
QEAgLTEzNCw3ICsxMzQsNyBAQCBpbmxpbmUgYm9vbCBzeW1ib2xUYWJsZVB1dCgKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogICAgIGlmIChVTkxJS0VMWSh3YXNGYXQpKQotICAgICAgICBp
dGVyLT5zZWNvbmQubm90aWZ5V3JpdGUoKTsKKyAgICAgICAgaXRlci0+dmFsdWUubm90aWZ5V3Jp
dGUoKTsKICAgICBvYmplY3QtPnJlZ2lzdGVyQXQoZmFzdEVudHJ5LmdldEluZGV4KCkpLnNldChn
bG9iYWxEYXRhLCBvYmplY3QsIHZhbHVlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTE0OSw3
ICsxNDksNyBAQCBpbmxpbmUgYm9vbCBzeW1ib2xUYWJsZVB1dFdpdGhBdHRyaWJ1dGVzKAogICAg
IFN5bWJvbFRhYmxlOjppdGVyYXRvciBpdGVyID0gb2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5maW5k
KHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCkpOwogICAgIGlmIChpdGVyID09IG9iamVjdC0+c3lt
Ym9sVGFibGUoKS0+ZW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBTeW1ib2xUYWJs
ZUVudHJ5JiBlbnRyeSA9IGl0ZXItPnNlY29uZDsKKyAgICBTeW1ib2xUYWJsZUVudHJ5JiBlbnRy
eSA9IGl0ZXItPnZhbHVlOwogICAgIEFTU0VSVCghZW50cnkuaXNOdWxsKCkpOwogICAgIGVudHJ5
Lm5vdGlmeVdyaXRlKCk7CiAgICAgZW50cnkuc2V0QXR0cmlidXRlcyhhdHRyaWJ1dGVzKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlLmNwcAppbmRleCBjNjdk
YWI4ZTYxZWUwMmExNjkxYWY0Nzk2N2IwZGJkMzhlOWU2NDU0Li44YWNhZmJhMjNhNjA0NGRjZTg3
YjhhZjY2Mzk5MmExN2VmNTdiZjg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9SZWdFeHBDYWNoZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVnRXhwQ2FjaGUuY3BwCkBAIC04MCw3ICs4MCw3IEBAIHZvaWQgUmVnRXhwQ2FjaGU6Omlu
dmFsaWRhdGVDb2RlKCkKIAogICAgIFJlZ0V4cENhY2hlTWFwOjppdGVyYXRvciBlbmQgPSBtX3dl
YWtDYWNoZS5lbmQoKTsKICAgICBmb3IgKFJlZ0V4cENhY2hlTWFwOjppdGVyYXRvciBpdCA9IG1f
d2Vha0NhY2hlLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBSZWdFeHAqIHJl
Z0V4cCA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIFJlZ0V4cCogcmVnRXhwID0gaXQtPnZh
bHVlLmdldCgpOwogICAgICAgICBpZiAoIXJlZ0V4cCkgLy8gU2tpcCB6b21iaWVzLgogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIHJlZ0V4cC0+aW52YWxpZGF0ZUNvZGUoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5j
cHAKaW5kZXggYjliYTI1NzM1YWZmNmRlZWYwZmU1YjQzMmJkM2M2YWNkYmQ3MWY5OS4uN2YyMWUy
YzlmZTUzNGVhZDMwZjIyNzY3MGU5YjdmNTA1MDE1NmNjNyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAKQEAgLTg4LDcg
Kzg4LDcgQEAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6QWRkUmVzdWx0IFNwYXJzZUFycmF5VmFsdWVN
YXA6OmFkZChKU09iamVjdCogYXJyYXksIHVuc2lnbmUKIHZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1h
cDo6cHV0RW50cnkoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYXJyYXksIHVuc2lnbmVkIGks
IEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCiB7CiAgICAgQWRkUmVzdWx0IHJlc3Vs
dCA9IGFkZChhcnJheSwgaSk7Ci0gICAgU3BhcnNlQXJyYXlFbnRyeSYgZW50cnkgPSByZXN1bHQu
aXRlcmF0b3ItPnNlY29uZDsKKyAgICBTcGFyc2VBcnJheUVudHJ5JiBlbnRyeSA9IHJlc3VsdC5p
dGVyYXRvci0+dmFsdWU7CiAKICAgICAvLyBUbyBzYXZlIGEgc2VwYXJhdGUgZmluZCAmIGFkZCwg
d2UgZmlyc3QgYWx3YXlzIGFkZCB0byB0aGUgc3BhcnNlIG1hcC4KICAgICAvLyBJbiB0aGUgdW5j
b21tb24gY2FzZSB0aGF0IHRoaXMgaXMgYSBuZXcgcHJvcGVydHksIGFuZCB0aGUgYXJyYXkgaXMg
bm90CkBAIC0xMDYsNyArMTA2LDcgQEAgdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjpwdXRFbnRy
eShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBhcnJheSwgdW5zaWduZWQgaSwKIGJvb2wgU3Bh
cnNlQXJyYXlWYWx1ZU1hcDo6cHV0RGlyZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGFy
cmF5LCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQdXRE
aXJlY3RJbmRleE1vZGUgbW9kZSkKIHsKICAgICBBZGRSZXN1bHQgcmVzdWx0ID0gYWRkKGFycmF5
LCBpKTsKLSAgICBTcGFyc2VBcnJheUVudHJ5JiBlbnRyeSA9IHJlc3VsdC5pdGVyYXRvci0+c2Vj
b25kOworICAgIFNwYXJzZUFycmF5RW50cnkmIGVudHJ5ID0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZTsKIAogICAgIC8vIFRvIHNhdmUgYSBzZXBhcmF0ZSBmaW5kICYgYWRkLCB3ZSBmaXJzdCBhbHdh
eXMgYWRkIHRvIHRoZSBzcGFyc2UgbWFwLgogICAgIC8vIEluIHRoZSB1bmNvbW1vbiBjYXNlIHRo
YXQgdGhpcyBpcyBhIG5ldyBwcm9wZXJ0eSwgYW5kIHRoZSBhcnJheSBpcyBub3QKQEAgLTIwNyw3
ICsyMDcsNyBAQCB2b2lkIFNwYXJzZUFycmF5VmFsdWVNYXA6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiB0aGlzT2JqZWN0LCBTbG90VmlzaXRvciYgdmlzaXRvcgogICAgIFNwYXJzZUFycmF5VmFsdWVN
YXAqIHRoaXNNYXAgPSBqc0Nhc3Q8U3BhcnNlQXJyYXlWYWx1ZU1hcCo+KHRoaXNPYmplY3QpOwog
ICAgIGl0ZXJhdG9yIGVuZCA9IHRoaXNNYXAtPm1fbWFwLmVuZCgpOwogICAgIGZvciAoaXRlcmF0
b3IgaXQgPSB0aGlzTWFwLT5tX21hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAg
IHZpc2l0b3IuYXBwZW5kKCZpdC0+c2Vjb25kKTsKKyAgICAgICAgdmlzaXRvci5hcHBlbmQoJml0
LT52YWx1ZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha0dDTWFwLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9XZWFrR0NNYXAuaAppbmRleCA2OTI2MTY1YTc4NWE3NjdkYTM3N2FjZWIyNTM5NzBj
ZWMzYjlhOTQ4Li41MmU1ZTI5NDZmZDEwM2I3ZmVhZjYyMWY2ZmQyYTUwZDA1MzQ5ZDAzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrR0NNYXAuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrR0NNYXAuaApAQCAtNjMsNyArNjMsNyBA
QCBwdWJsaWM6CiAgICAgewogICAgICAgICB0eXBlbmFtZSBNYXBUeXBlOjppdGVyYXRvciBlbmQg
PSBtX21hcC5lbmQoKTsKICAgICAgICAgZm9yICh0eXBlbmFtZSBNYXBUeXBlOjppdGVyYXRvciBw
dHIgPSBtX21hcC5iZWdpbigpOyBwdHIgIT0gZW5kOyArK3B0cikKLSAgICAgICAgICAgIFdlYWtT
ZXQ6OmRlYWxsb2NhdGUocHRyLT5zZWNvbmQpOworICAgICAgICAgICAgV2Vha1NldDo6ZGVhbGxv
Y2F0ZShwdHItPnZhbHVlKTsKICAgICAgICAgbV9tYXAuY2xlYXIoKTsKICAgICB9CiAKQEAgLTgw
LDggKzgwLDggQEAgcHVibGljOgogICAgICAgICBBU1NFUlRfVU5VU0VEKGdsb2JhbERhdGEsIGds
b2JhbERhdGEuYXBpTG9jaygpLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpOwogICAgICAg
ICB0eXBlbmFtZSBNYXBUeXBlOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9tYXAuYWRkKGtleSwgMCk7
CiAgICAgICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgICAgICBXZWFrU2V0Ojpk
ZWFsbG9jYXRlKHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKLSAgICAgICAgcmVzdWx0Lml0ZXJh
dG9yLT5zZWNvbmQgPSBXZWFrU2V0OjphbGxvY2F0ZSh2YWx1ZSwgdGhpcywgRmluYWxpemVyQ2Fs
bGJhY2s6OmZpbmFsaXplckNvbnRleHRGb3Ioa2V5KSk7CisgICAgICAgICAgICBXZWFrU2V0Ojpk
ZWFsbG9jYXRlKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOworICAgICAgICByZXN1bHQuaXRlcmF0
b3ItPnZhbHVlID0gV2Vha1NldDo6YWxsb2NhdGUodmFsdWUsIHRoaXMsIEZpbmFsaXplckNhbGxi
YWNrOjpmaW5hbGl6ZXJDb250ZXh0Rm9yKGtleSkpOwogICAgIH0KIAogICAgIHZvaWQgcmVtb3Zl
KGNvbnN0IEtleVR5cGUmIGtleSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90
b29scy9Qcm9maWxlVHJlZU5vZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Qcm9m
aWxlVHJlZU5vZGUuaAppbmRleCA3YjUxZWZiODVkYjM0NDFhMjIyNjNiNDI0OTdhMzE3NTJiNWI1
MmZkLi43YjVhOTVlYzQwNDRiNjNmMjExMTM2MTIyZDkyM2NhODg5NDYwYTM2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvUHJvZmlsZVRyZWVOb2RlLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1Byb2ZpbGVUcmVlTm9kZS5oCkBAIC01MSw3ICs1MSw3
IEBAIHB1YmxpYzoKICAgICAKICAgICAgICAgUHJvZmlsZVRyZWVOb2RlIG5ld0VudHJ5OwogICAg
ICAgICBNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX2NoaWxkcmVuLT5hZGQoU3RyaW5nKG5hbWUp
LCBuZXdFbnRyeSk7Ci0gICAgICAgIFByb2ZpbGVUcmVlTm9kZSogY2hpbGRJbk1hcCA9ICZyZXN1
bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgUHJvZmlsZVRyZWVOb2RlKiBjaGlsZEluTWFw
ID0gJnJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgICsrY2hpbGRJbk1hcC0+bV9jb3Vu
dDsKICAgICAgICAgcmV0dXJuIGNoaWxkSW5NYXA7CiAgICAgfQpAQCAtNzIsNyArNzIsNyBAQCBw
dWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgdWludDY0X3QgY2hpbGRDb3Vu
dCA9IDA7CiAgICAgICAgIGZvciAoTWFwOjppdGVyYXRvciBpdCA9IG1fY2hpbGRyZW4tPmJlZ2lu
KCk7IGl0ICE9IG1fY2hpbGRyZW4tPmVuZCgpOyArK2l0KQotICAgICAgICAgICAgY2hpbGRDb3Vu
dCArPSBpdC0+c2Vjb25kLmNvdW50KCk7CisgICAgICAgICAgICBjaGlsZENvdW50ICs9IGl0LT52
YWx1ZS5jb3VudCgpOwogICAgICAgICByZXR1cm4gY2hpbGRDb3VudDsKICAgICB9CiAgICAgCkBA
IC05NywxOSArOTcsMTkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBpbmRlbnQ7ICsraSkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgIik7CiAg
ICAgICAgICAgICBkYXRhTG9nKCIlIDhsbGQ6ICVzICglbGxkIHN0YWNrIHRvcClcbiIsCi0gICAg
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihlbnRyeS0+c2Vjb25kLmNvdW50KCkp
LAotICAgICAgICAgICAgICAgIGVudHJ5LT5maXJzdC51dGY4KCkuZGF0YSgpLAotICAgICAgICAg
ICAgICAgIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oZW50cnktPnNlY29uZC5jb3VudCgpIC0gZW50
cnktPnNlY29uZC5jaGlsZENvdW50KCkpKTsKKyAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxs
b25nIGxvbmc+KGVudHJ5LT52YWx1ZS5jb3VudCgpKSwKKyAgICAgICAgICAgICAgICBlbnRyeS0+
a2V5LnV0ZjgoKS5kYXRhKCksCisgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8bG9uZyBsb25n
PihlbnRyeS0+dmFsdWUuY291bnQoKSAtIGVudHJ5LT52YWx1ZS5jaGlsZENvdW50KCkpKTsKIAog
ICAgICAgICAgICAgLy8gUmVjdXJzaXZlbHkgZHVtcCB0aGUgY2hpbGQgbm9kZXMuCi0gICAgICAg
ICAgICBlbnRyeS0+c2Vjb25kLmR1bXBJbnRlcm5hbChpbmRlbnQgKyAxKTsKKyAgICAgICAgICAg
IGVudHJ5LT52YWx1ZS5kdW1wSW50ZXJuYWwoaW5kZW50ICsgMSk7CiAgICAgICAgIH0KICAgICB9
CiAKICAgICBzdGF0aWMgaW50IGNvbXBhcmVFbnRyaWVzKGNvbnN0IHZvaWQqIGEsIGNvbnN0IHZv
aWQqIGIpCiAgICAgewotICAgICAgICB1aW50NjRfdCBkYSA9ICgqc3RhdGljX2Nhc3Q8TWFwRW50
cnkqIGNvbnN0ICo+KGEpKS0+c2Vjb25kLmNvdW50KCk7Ci0gICAgICAgIHVpbnQ2NF90IGRiID0g
KCpzdGF0aWNfY2FzdDxNYXBFbnRyeSogY29uc3QgKj4oYikpLT5zZWNvbmQuY291bnQoKTsKKyAg
ICAgICAgdWludDY0X3QgZGEgPSAoKnN0YXRpY19jYXN0PE1hcEVudHJ5KiBjb25zdCAqPihhKSkt
PnZhbHVlLmNvdW50KCk7CisgICAgICAgIHVpbnQ2NF90IGRiID0gKCpzdGF0aWNfY2FzdDxNYXBF
bnRyeSogY29uc3QgKj4oYikpLT52YWx1ZS5jb3VudCgpOwogICAgICAgICByZXR1cm4gKGRhIDwg
ZGIpIC0gKGRhID4gZGIpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvSGFz
aENvdW50ZWRTZXQuaCBiL1NvdXJjZS9XVEYvd3RmL0hhc2hDb3VudGVkU2V0LmgKaW5kZXggZWY4
OWJkYmM3NTI2MTg1ZGUwMTc1M2UwM2U5ZjZiMGI3N2UzZTAxZC4uZWZmNGEyOTNlOWM3MzliMTJj
NDNiNjg5MTI2ZDBjODQ1MGJjZDAwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvSGFzaENv
dW50ZWRTZXQuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoQ291bnRlZFNldC5oCkBAIC0xNTQs
NyArMTU0LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgaW5saW5lIHR5cGVuYW1lIEhhc2hDb3Vu
dGVkU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+OjpBZGRSZXN1bHQgSGFzaENvdW50
ZWRTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OmFkZChjb25zdCBWYWx1ZVR5cGUg
JnZhbHVlKQogICAgIHsKICAgICAgICAgQWRkUmVzdWx0IHJlc3VsdCA9IG1faW1wbC5hZGQodmFs
dWUsIDApOwotICAgICAgICArK3Jlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICArK3Jl
c3VsdC5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAg
IApAQCAtMTcwLDExICsxNzAsMTEgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIGlmIChpdCA9
PSBlbmQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICB1bnNpZ25lZCBv
bGRWYWwgPSBpdC0+c2Vjb25kOworICAgICAgICB1bnNpZ25lZCBvbGRWYWwgPSBpdC0+dmFsdWU7
CiAgICAgICAgIEFTU0VSVChvbGRWYWwpOwogICAgICAgICB1bnNpZ25lZCBuZXdWYWwgPSBvbGRW
YWwgLSAxOwogICAgICAgICBpZiAobmV3VmFsKSB7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kID0g
bmV3VmFsOworICAgICAgICAgICAgaXQtPnZhbHVlID0gbmV3VmFsOwogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICB9CiAKQEAgLTIyNiw3ICsyMjYsNyBAQCBuYW1lc3BhY2UgV1RG
IHsKICAgICAgICAgaXRlcmF0b3IgaXQgPSBjb2xsZWN0aW9uLmJlZ2luKCk7CiAgICAgICAgIGl0
ZXJhdG9yIGVuZCA9IGNvbGxlY3Rpb24uZW5kKCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGl0ICE9IGVuZDsgKytpdCwgKytpKQotICAgICAgICAgICAgdmVjdG9yW2ldID0gKCppdCku
Zmlyc3Q7CisgICAgICAgICAgICB2ZWN0b3JbaV0gPSAoKml0KS5rZXk7CiAgICAgfQogCiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0hhc2hJdGVyYXRvcnMuaCBiL1NvdXJjZS9XVEYvd3Rm
L0hhc2hJdGVyYXRvcnMuaAppbmRleCA2MzlmZjcyNTBhMWVmMGZiM2Y4MjRkYzkxNjg4NDk2Yjg5
YjY1ZTE3Li45YmU0ZGUzMjNjNTY1OGIzM2Y5NWIyZjk3NzZlYzVhZWU1Mjc0YjJjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoSXRlcmF0b3JzLmgKKysrIGIvU291cmNlL1dURi93dGYv
SGFzaEl0ZXJhdG9ycy5oCkBAIC05MSw3ICs5MSw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgIHB1
YmxpYzoKICAgICAgICAgSGFzaFRhYmxlQ29uc3RLZXlzSXRlcmF0b3IoY29uc3QgQ29uc3RJdGVy
YXRvciYgaW1wbCkgOiBtX2ltcGwoaW1wbCkge30KICAgICAgICAgCi0gICAgICAgIGNvbnN0IEtl
eVR5cGUqIGdldCgpIGNvbnN0IHsgcmV0dXJuICYobV9pbXBsLmdldCgpLT5maXJzdCk7IH0KKyAg
ICAgICAgY29uc3QgS2V5VHlwZSogZ2V0KCkgY29uc3QgeyByZXR1cm4gJihtX2ltcGwuZ2V0KCkt
PmtleSk7IH0KICAgICAgICAgY29uc3QgS2V5VHlwZSYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1
cm4gKmdldCgpOyB9CiAgICAgICAgIGNvbnN0IEtleVR5cGUqIG9wZXJhdG9yLT4oKSBjb25zdCB7
IHJldHVybiBnZXQoKTsgfQogCkBAIC0xMDgsNyArMTA4LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAg
ICAgcHVibGljOgogICAgICAgICBIYXNoVGFibGVDb25zdFZhbHVlc0l0ZXJhdG9yKGNvbnN0IENv
bnN0SXRlcmF0b3ImIGltcGwpIDogbV9pbXBsKGltcGwpIHt9CiAgICAgICAgIAotICAgICAgICBj
b25zdCBNYXBwZWRUeXBlKiBnZXQoKSBjb25zdCB7IHJldHVybiAmKG1faW1wbC5nZXQoKS0+c2Vj
b25kKTsgfQorICAgICAgICBjb25zdCBNYXBwZWRUeXBlKiBnZXQoKSBjb25zdCB7IHJldHVybiAm
KG1faW1wbC5nZXQoKS0+dmFsdWUpOyB9CiAgICAgICAgIGNvbnN0IE1hcHBlZFR5cGUmIG9wZXJh
dG9yKigpIGNvbnN0IHsgcmV0dXJuICpnZXQoKTsgfQogICAgICAgICBjb25zdCBNYXBwZWRUeXBl
KiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gZ2V0KCk7IH0KIApAQCAtMTI2LDcgKzEyNiw3
IEBAIG5hbWVzcGFjZSBXVEYgewogICAgIHB1YmxpYzoKICAgICAgICAgSGFzaFRhYmxlS2V5c0l0
ZXJhdG9yKGNvbnN0IEl0ZXJhdG9yJiBpbXBsKSA6IG1faW1wbChpbXBsKSB7fQogICAgICAgICAK
LSAgICAgICAgS2V5VHlwZSogZ2V0KCkgY29uc3QgeyByZXR1cm4gJihtX2ltcGwuZ2V0KCktPmZp
cnN0KTsgfQorICAgICAgICBLZXlUeXBlKiBnZXQoKSBjb25zdCB7IHJldHVybiAmKG1faW1wbC5n
ZXQoKS0+a2V5KTsgfQogICAgICAgICBLZXlUeXBlJiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVy
biAqZ2V0KCk7IH0KICAgICAgICAgS2V5VHlwZSogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJu
IGdldCgpOyB9CiAKQEAgLTE0OSw3ICsxNDksNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICBwdWJs
aWM6CiAgICAgICAgIEhhc2hUYWJsZVZhbHVlc0l0ZXJhdG9yKGNvbnN0IEl0ZXJhdG9yJiBpbXBs
KSA6IG1faW1wbChpbXBsKSB7fQogICAgICAgICAKLSAgICAgICAgTWFwcGVkVHlwZSogZ2V0KCkg
Y29uc3QgeyByZXR1cm4gJihtX2ltcGwuZ2V0KCktPnNlY29uZCk7IH0KKyAgICAgICAgTWFwcGVk
VHlwZSogZ2V0KCkgY29uc3QgeyByZXR1cm4gJihtX2ltcGwuZ2V0KCktPnZhbHVlKTsgfQogICAg
ICAgICBNYXBwZWRUeXBlJiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqZ2V0KCk7IH0KICAg
ICAgICAgTWFwcGVkVHlwZSogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIGdldCgpOyB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0hhc2hNYXAuaCBiL1NvdXJjZS9XVEYvd3RmL0hh
c2hNYXAuaAppbmRleCA5MDEwNDc0YzgyNTU2M2VmODQxYjk2ODdmZWZmNDk0YWE2NTViNGU4Li4x
MGVlNDI1ZGE5NTk2YmFhZGYzNGU1NzhlZjVhYmU1NzBmOWFlMGQ2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi9IYXNoTWFwLmgKKysrIGIvU291cmNlL1dURi93dGYvSGFzaE1hcC5oCkBAIC0z
NSw3ICszNSw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgIH07CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdHJ1Y3QgS2V5VmFsdWVQYWlyS2V5RXh0cmFjdG9yIHsKLSAgICAgICAgc3RhdGlj
IGNvbnN0IHR5cGVuYW1lIFQ6OktleVR5cGUmIGV4dHJhY3QoY29uc3QgVCYgcCkgeyByZXR1cm4g
cC5maXJzdDsgfQorICAgICAgICBzdGF0aWMgY29uc3QgdHlwZW5hbWUgVDo6S2V5VHlwZSYgZXh0
cmFjdChjb25zdCBUJiBwKSB7IHJldHVybiBwLmtleTsgfQogICAgIH07CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZyA9
IHR5cGVuYW1lIERlZmF1bHRIYXNoPEtleUFyZz46Okhhc2gsCkBAIC0yMTEsNyArMjExLDcgQEAg
bmFtZXNwYWNlIFdURiB7CiAgICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc0lzRW1wdHlWYWx1
ZUZ1bmN0aW9uID0gdHJ1ZTsKICAgICAgICAgc3RhdGljIGJvb2wgaXNFbXB0eVZhbHVlKGNvbnN0
IHR5cGVuYW1lIEtleVZhbHVlUGFpckhhc2hUcmFpdHM8S2V5VHJhaXRzLCBNYXBwZWRUcmFpdHM+
OjpUcmFpdFR5cGUmIHZhbHVlKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gaXNIYXNo
VHJhaXRzRW1wdHlWYWx1ZTxLZXlUcmFpdHM+KHZhbHVlLmZpcnN0KTsKKyAgICAgICAgICAgIHJl
dHVybiBpc0hhc2hUcmFpdHNFbXB0eVZhbHVlPEtleVRyYWl0cz4odmFsdWUua2V5KTsKICAgICAg
ICAgfQogICAgIH07CiAKQEAgLTIyMSw4ICsyMjEsOCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gc3RhdGljIGJvb2wgZXF1YWwoY29u
c3QgVCYgYSwgY29uc3QgVSYgYikgeyByZXR1cm4gSGFzaEZ1bmN0aW9uczo6ZXF1YWwoYSwgYik7
IH0KICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4g
c3RhdGljIHZvaWQgdHJhbnNsYXRlKFQmIGxvY2F0aW9uLCBjb25zdCBVJiBrZXksIGNvbnN0IFYm
IG1hcHBlZCkKICAgICAgICAgewotICAgICAgICAgICAgbG9jYXRpb24uZmlyc3QgPSBrZXk7Ci0g
ICAgICAgICAgICBWYWx1ZVRyYWl0czo6VmFsdWVUcmFpdHM6OnN0b3JlKG1hcHBlZCwgbG9jYXRp
b24uc2Vjb25kKTsKKyAgICAgICAgICAgIGxvY2F0aW9uLmtleSA9IGtleTsKKyAgICAgICAgICAg
IFZhbHVlVHJhaXRzOjpWYWx1ZVRyYWl0czo6c3RvcmUobWFwcGVkLCBsb2NhdGlvbi52YWx1ZSk7
CiAgICAgICAgIH0KICAgICB9OwogCkBAIC0yMzIsOCArMjMyLDggQEAgbmFtZXNwYWNlIFdURiB7
CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IHN0YXRpYyBib29sIGVx
dWFsKGNvbnN0IFQmIGEsIGNvbnN0IFUmIGIpIHsgcmV0dXJuIFRyYW5zbGF0b3I6OmVxdWFsKGEs
IGIpOyB9CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1l
IFY+IHN0YXRpYyB2b2lkIHRyYW5zbGF0ZShUJiBsb2NhdGlvbiwgY29uc3QgVSYga2V5LCBjb25z
dCBWJiBtYXBwZWQsIHVuc2lnbmVkIGhhc2hDb2RlKQogICAgICAgICB7Ci0gICAgICAgICAgICBU
cmFuc2xhdG9yOjp0cmFuc2xhdGUobG9jYXRpb24uZmlyc3QsIGtleSwgaGFzaENvZGUpOwotICAg
ICAgICAgICAgVmFsdWVUcmFpdHM6OlZhbHVlVHJhaXRzOjpzdG9yZShtYXBwZWQsIGxvY2F0aW9u
LnNlY29uZCk7CisgICAgICAgICAgICBUcmFuc2xhdG9yOjp0cmFuc2xhdGUobG9jYXRpb24ua2V5
LCBrZXksIGhhc2hDb2RlKTsKKyAgICAgICAgICAgIFZhbHVlVHJhaXRzOjpWYWx1ZVRyYWl0czo6
c3RvcmUobWFwcGVkLCBsb2NhdGlvbi52YWx1ZSk7CiAgICAgICAgIH0KICAgICB9OwogCkBAIC0z
NDEsNyArMzQxLDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIEFkZFJlc3VsdCByZXN1bHQg
PSBpbmxpbmVBZGQoa2V5LCBtYXBwZWQpOwogICAgICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5
KSB7CiAgICAgICAgICAgICAvLyBUaGUgaW5saW5lQWRkIGNhbGwgYWJvdmUgZm91bmQgYW4gZXhp
c3RpbmcgaGFzaCB0YWJsZSBlbnRyeTsgd2UgbmVlZCB0byBzZXQgdGhlIG1hcHBlZCB2YWx1ZS4K
LSAgICAgICAgICAgIE1hcHBlZFRyYWl0czo6c3RvcmUobWFwcGVkLCByZXN1bHQuaXRlcmF0b3It
PnNlY29uZCk7CisgICAgICAgICAgICBNYXBwZWRUcmFpdHM6OnN0b3JlKG1hcHBlZCwgcmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg
ICB9CkBAIC0zNjgsNyArMzY4LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIFZhbHVlVHlw
ZSogZW50cnkgPSBjb25zdF9jYXN0PEhhc2hUYWJsZVR5cGUmPihtX2ltcGwpLmxvb2t1cChrZXkp
OwogICAgICAgICBpZiAoIWVudHJ5KQogICAgICAgICAgICAgcmV0dXJuIE1hcHBlZFRyYWl0czo6
cGVlayhNYXBwZWRUcmFpdHM6OmVtcHR5VmFsdWUoKSk7Ci0gICAgICAgIHJldHVybiBNYXBwZWRU
cmFpdHM6OnBlZWsoZW50cnktPnNlY29uZCk7CisgICAgICAgIHJldHVybiBNYXBwZWRUcmFpdHM6
OnBlZWsoZW50cnktPnZhbHVlKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgpAQCAtMzk5LDcg
KzM5OSw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBpdGVyYXRvciBpdCA9IGZpbmQoa2V5
KTsKICAgICAgICAgaWYgKGl0ID09IGVuZCgpKQogICAgICAgICAgICAgcmV0dXJuIE1hcHBlZFRy
YWl0czo6cGFzc091dChNYXBwZWRUcmFpdHM6OmVtcHR5VmFsdWUoKSk7Ci0gICAgICAgIE1hcHBl
ZFBhc3NPdXRUeXBlIHJlc3VsdCA9IE1hcHBlZFRyYWl0czo6cGFzc091dChpdC0+c2Vjb25kKTsK
KyAgICAgICAgTWFwcGVkUGFzc091dFR5cGUgcmVzdWx0ID0gTWFwcGVkVHJhaXRzOjpwYXNzT3V0
KGl0LT52YWx1ZSk7CiAgICAgICAgIHJlbW92ZShpdCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgfQpAQCAtNDIxLDggKzQyMSw4IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBjb25z
dF9pdGVyYXRvciBlbmQgPSBhLmVuZCgpOwogICAgICAgICBjb25zdF9pdGVyYXRvciBub3RGb3Vu
ZCA9IGIuZW5kKCk7CiAgICAgICAgIGZvciAoY29uc3RfaXRlcmF0b3IgaXQgPSBhLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgY29uc3RfaXRlcmF0b3IgYlBvcyA9IGIu
ZmluZChpdC0+Zmlyc3QpOwotICAgICAgICAgICAgaWYgKGJQb3MgPT0gbm90Rm91bmQgfHwgaXQt
PnNlY29uZCAhPSBiUG9zLT5zZWNvbmQpCisgICAgICAgICAgICBjb25zdF9pdGVyYXRvciBiUG9z
ID0gYi5maW5kKGl0LT5rZXkpOworICAgICAgICAgICAgaWYgKGJQb3MgPT0gbm90Rm91bmQgfHwg
aXQtPnZhbHVlICE9IGJQb3MtPnZhbHVlKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgfQogCkBAIC00MzUsMzQgKzQzNSwyMiBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAg
ICAgcmV0dXJuICEoYSA9PSBiKTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNo
VGFibGVUeXBlPgotICAgIHZvaWQgZGVsZXRlQWxsUGFpclNlY29uZHMoSGFzaFRhYmxlVHlwZSYg
Y29sbGVjdGlvbikKLSAgICB7Ci0gICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgSGFzaFRhYmxlVHlw
ZTo6Y29uc3RfaXRlcmF0b3IgaXRlcmF0b3I7Ci0gICAgICAgIGl0ZXJhdG9yIGVuZCA9IGNvbGxl
Y3Rpb24uZW5kKCk7Ci0gICAgICAgIGZvciAoaXRlcmF0b3IgaXQgPSBjb2xsZWN0aW9uLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIGRlbGV0ZSBpdC0+c2Vjb25kOwotICAg
IH0KLQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5
cGVuYW1lIFcsIHR5cGVuYW1lIFg+CiAgICAgaW5saW5lIHZvaWQgZGVsZXRlQWxsVmFsdWVzKGNv
bnN0IEhhc2hNYXA8VCwgVSwgViwgVywgWD4mIGNvbGxlY3Rpb24pCiAgICAgewotICAgICAgICBk
ZWxldGVBbGxQYWlyU2Vjb25kcyhjb2xsZWN0aW9uKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBIYXNoVGFibGVUeXBlPgotICAgIHZvaWQgZGVsZXRlQWxsUGFpckZpcnN0cyhIYXNo
VGFibGVUeXBlJiBjb2xsZWN0aW9uKQotICAgIHsKLSAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBI
YXNoVGFibGVUeXBlOjpjb25zdF9pdGVyYXRvciBpdGVyYXRvcjsKKyAgICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojpjb25zdF9pdGVyYXRvciBpdGVyYXRvcjsK
ICAgICAgICAgaXRlcmF0b3IgZW5kID0gY29sbGVjdGlvbi5lbmQoKTsKICAgICAgICAgZm9yIChp
dGVyYXRvciBpdCA9IGNvbGxlY3Rpb24uYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAg
ICAgICAgZGVsZXRlIGl0LT5maXJzdDsKKyAgICAgICAgICAgIGRlbGV0ZSBpdC0+dmFsdWU7CiAg
ICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwg
dHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KICAgICBpbmxpbmUgdm9pZCBkZWxldGVBbGxLZXlzKGNv
bnN0IEhhc2hNYXA8VCwgVSwgViwgVywgWD4mIGNvbGxlY3Rpb24pCiAgICAgewotICAgICAgICBk
ZWxldGVBbGxQYWlyRmlyc3RzKGNvbGxlY3Rpb24pOworICAgICAgICB0eXBlZGVmIHR5cGVuYW1l
IEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmNvbnN0X2l0ZXJhdG9yIGl0ZXJhdG9yOworICAgICAg
ICBpdGVyYXRvciBlbmQgPSBjb2xsZWN0aW9uLmVuZCgpOworICAgICAgICBmb3IgKGl0ZXJhdG9y
IGl0ID0gY29sbGVjdGlvbi5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICBk
ZWxldGUgaXQtPmtleTsKICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oIGIvU291cmNlL1dURi93dGYv
SGFzaFRhYmxlLmgKaW5kZXggMWNlM2M1Y2Y2ODhlZjBhODFlMTA2MWJjNmNlMjYyMGJlM2Q5ODAw
ZS4uMTZmZGQ5ZTgxZDI4M2I2OWU2MWQ0NmJhNmY5NWZkMTJlMjQ2OWM2NiAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi93dGYvSGFzaFRhYmxlLmgKKysrIGIvU291cmNlL1dURi93dGYvSGFzaFRhYmxl
LmgKQEAgLTI4Niw4ICsyODYsOCBAQCBuYW1lc3BhY2UgV1RGIHsKIAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSB2b2lkIGhhc2hUYWJsZVN3YXAoS2V5VmFsdWVQ
YWlyPFQsIFU+JiBhLCBLZXlWYWx1ZVBhaXI8VCwgVT4mIGIpCiAgICAgewotICAgICAgICBzd2Fw
KGEuZmlyc3QsIGIuZmlyc3QpOwotICAgICAgICBzd2FwKGEuc2Vjb25kLCBiLnNlY29uZCk7Cisg
ICAgICAgIHN3YXAoYS5rZXksIGIua2V5KTsKKyAgICAgICAgc3dhcChhLnZhbHVlLCBiLnZhbHVl
KTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29sIHVzZVN3YXA+IHN0cnVj
dCBNb3ZlcjsKQEAgLTEyNDYsNyArMTI0Niw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICAg
ICAgQVNTRVJUKGVudHJ5ID09IGl0Lm1fcG9zaXRpb24pOwogICAgICAgICAgICAgKytjb3VudDsK
IAotICAgICAgICAgICAgVmFsdWVDaGVjazxLZXk+OjpjaGVja0NvbnNpc3RlbmN5KGl0LT5maXJz
dCk7CisgICAgICAgICAgICBWYWx1ZUNoZWNrPEtleT46OmNoZWNrQ29uc2lzdGVuY3koaXQtPmtl
eSk7CiAgICAgICAgIH0KIAogICAgICAgICBBU1NFUlQoY291bnQgPT0gbV9rZXlDb3VudCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoVHJhaXRzLmggYi9Tb3VyY2UvV1RGL3d0Zi9I
YXNoVHJhaXRzLmgKaW5kZXggNDMwNTQzMGExNzdhNDRiY2M0OWQ4ZmY4NjZmODE3NTgzMTlkNTNk
YS4uMTI3OTg3NjRlODM0ZDA0ZTAxNzc3NWIxMWQ3ODQ3MDc1MGZiN2Y1NCAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi93dGYvSGFzaFRyYWl0cy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0hhc2hUcmFp
dHMuaApAQCAtMTYzLDYgKzE2Myw5IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICByZXR1cm4g
SGFzaFRyYWl0c0VtcHR5VmFsdWVDaGVja2VyPFRyYWl0cywgVHJhaXRzOjpoYXNJc0VtcHR5VmFs
dWVGdW5jdGlvbj46OmlzRW1wdHlWYWx1ZSh2YWx1ZSk7CiAgICAgfQogCisvLyBXb3JrYXJvdW5k
IGZyb20gQ2hyb21pdW0uIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9ODI3ODQuCisjZGVmaW5lIFdURl9ORVdfSEFTSE1BUF9JVEVSQVRPUlNfSU5URVJGQUNFIDEK
KwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZpcnN0VHJhaXRzQXJnLCB0eXBlbmFtZSBTZWNvbmRU
cmFpdHNBcmc+CiAgICAgc3RydWN0IFBhaXJIYXNoVHJhaXRzIDogR2VuZXJpY0hhc2hUcmFpdHM8
c3RkOjpwYWlyPHR5cGVuYW1lIEZpcnN0VHJhaXRzQXJnOjpUcmFpdFR5cGUsIHR5cGVuYW1lIFNl
Y29uZFRyYWl0c0FyZzo6VHJhaXRUeXBlPiA+IHsKICAgICAgICAgdHlwZWRlZiBGaXJzdFRyYWl0
c0FyZyBGaXJzdFRyYWl0czsKQEAgLTE5MywyMSArMTk2LDIwIEBAIG5hbWVzcGFjZSBXVEYgewog
ICAgICAgICB9CiAKICAgICAgICAgS2V5VmFsdWVQYWlyKGNvbnN0IEtleVR5cGVBcmcmIGtleSwg
Y29uc3QgVmFsdWVUeXBlQXJnJiB2YWx1ZSkKLSAgICAgICAgICAgIDogZmlyc3Qoa2V5KQotICAg
ICAgICAgICAgLCBzZWNvbmQodmFsdWUpCisgICAgICAgICAgICA6IGtleShrZXkpCisgICAgICAg
ICAgICAsIHZhbHVlKHZhbHVlKQogICAgICAgICB7CiAgICAgICAgIH0KIAogICAgICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgT3RoZXJLZXlUeXBlLCB0eXBlbmFtZSBPdGhlclZhbHVlVHlwZT4KICAg
ICAgICAgS2V5VmFsdWVQYWlyKGNvbnN0IEtleVZhbHVlUGFpcjxPdGhlcktleVR5cGUsIE90aGVy
VmFsdWVUeXBlPiYgb3RoZXIpCi0gICAgICAgICAgICA6IGZpcnN0KG90aGVyLmZpcnN0KQotICAg
ICAgICAgICAgLCBzZWNvbmQob3RoZXIuc2Vjb25kKQorICAgICAgICAgICAgOiBrZXkob3RoZXIu
a2V5KQorICAgICAgICAgICAgLCB2YWx1ZShvdGhlci52YWx1ZSkKICAgICAgICAgewogICAgICAg
ICB9CiAKLSAgICAgICAgLy8gVE9ETzogUmVuYW1lIHRoZXNlIHRvIGtleSBhbmQgdmFsdWUuIFNl
ZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI3ODQuCi0gICAgICAg
IEtleVR5cGVBcmcgZmlyc3Q7Ci0gICAgICAgIFZhbHVlVHlwZUFyZyBzZWNvbmQ7CisgICAgICAg
IEtleVR5cGVBcmcga2V5OworICAgICAgICBWYWx1ZVR5cGVBcmcgdmFsdWU7CiAgICAgfTsKIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgVmFsdWVUcmFpdHNB
cmc+CkBAIC0yMjQsOCArMjI2LDggQEAgbmFtZXNwYWNlIFdURiB7CiAKICAgICAgICAgc3RhdGlj
IGNvbnN0IGludCBtaW5pbXVtVGFibGVTaXplID0gS2V5VHJhaXRzOjptaW5pbXVtVGFibGVTaXpl
OwogCi0gICAgICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShUcmFpdFR5cGUm
IHNsb3QpIHsgS2V5VHJhaXRzOjpjb25zdHJ1Y3REZWxldGVkVmFsdWUoc2xvdC5maXJzdCk7IH0K
LSAgICAgICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUoY29uc3QgVHJhaXRUeXBlJiB2YWx1
ZSkgeyByZXR1cm4gS2V5VHJhaXRzOjppc0RlbGV0ZWRWYWx1ZSh2YWx1ZS5maXJzdCk7IH0KKyAg
ICAgICAgc3RhdGljIHZvaWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKFRyYWl0VHlwZSYgc2xvdCkg
eyBLZXlUcmFpdHM6OmNvbnN0cnVjdERlbGV0ZWRWYWx1ZShzbG90LmtleSk7IH0KKyAgICAgICAg
c3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUoY29uc3QgVHJhaXRUeXBlJiB2YWx1ZSkgeyByZXR1
cm4gS2V5VHJhaXRzOjppc0RlbGV0ZWRWYWx1ZSh2YWx1ZS5rZXkpOyB9CiAgICAgfTsKIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWU+CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9yLmNwcCBiL1NvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0
b3IuY3BwCmluZGV4IDllZmNmZjJlYjEzZjcyY2NiNTk3NzUxYzg0M2JiNDI5NTFmYzc0YTMuLjcz
YjM2YWE0MjFmOGE5NTUwN2FhZDk2YTNhNGJhZjgyYWUxMWQ1M2YgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvd3RmL01ldGFBbGxvY2F0b3IuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL01ldGFBbGxv
Y2F0b3IuY3BwCkBAIC0zMDgsOSArMzA4LDkgQEAgdm9pZCBNZXRhQWxsb2NhdG9yOjphZGRGcmVl
U3BhY2Uodm9pZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRlcykKICAgICAgICAgLy8gV2UgaGF2
ZSBzb21ldGhpbmcgd2UgY2FuIGNvYWxlc2NlIHdpdGggb24gdGhlIGxlZnQuIFJlbW92ZSBpdCBm
cm9tIHRoZSB0cmVlLCBhbmQKICAgICAgICAgLy8gcmVtb3ZlIGl0cyBlbmQgZnJvbSB0aGUgZW5k
IGFkZHJlc3MgbWFwLgogICAgICAgICAKLSAgICAgICAgQVNTRVJUKHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihsZWZ0TmVpZ2hib3ItPnNlY29uZC0+
bV9zdGFydCkgKyBsZWZ0TmVpZ2hib3ItPnNlY29uZC0+bV9zaXplSW5CeXRlcykgPT0gbGVmdE5l
aWdoYm9yLT5maXJzdCk7CisgICAgICAgIEFTU0VSVChyZWludGVycHJldF9jYXN0PHZvaWQqPihy
ZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obGVmdE5laWdoYm9yLT52YWx1ZS0+bV9zdGFydCkg
KyBsZWZ0TmVpZ2hib3ItPnZhbHVlLT5tX3NpemVJbkJ5dGVzKSA9PSBsZWZ0TmVpZ2hib3ItPmtl
eSk7CiAgICAgICAgIAotICAgICAgICBGcmVlU3BhY2VOb2RlKiBsZWZ0Tm9kZSA9IGxlZnROZWln
aGJvci0+c2Vjb25kOworICAgICAgICBGcmVlU3BhY2VOb2RlKiBsZWZ0Tm9kZSA9IGxlZnROZWln
aGJvci0+dmFsdWU7CiAgICAgICAgIAogICAgICAgICB2b2lkKiBsZWZ0U3RhcnQgPSBsZWZ0Tm9k
ZS0+bV9zdGFydDsKICAgICAgICAgc2l6ZV90IGxlZnRTaXplID0gbGVmdE5vZGUtPm1fc2l6ZUlu
Qnl0ZXM7CkBAIC0zMjYsMTAgKzMyNiwxMCBAQCB2b2lkIE1ldGFBbGxvY2F0b3I6OmFkZEZyZWVT
cGFjZSh2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVzKQogICAgICAgICAgICAgLy8gRnJl
ZWluZyBzb21ldGhpbmcgaW4gdGhlIG1pZGRsZSBvZiBmcmVlIGJsb2Nrcy4gQ29hbGVzY2UgYm90
aCBsZWZ0IGFuZAogICAgICAgICAgICAgLy8gcmlnaHQsIHdoaWxzdCByZW1vdmluZyB0aGUgcmln
aHQgbmVpZ2hib3IgZnJvbSB0aGUgbWFwcy4KICAgICAgICAgICAgIAotICAgICAgICAgICAgQVNT
RVJUKHJpZ2h0TmVpZ2hib3ItPnNlY29uZC0+bV9zdGFydCA9PSByaWdodE5laWdoYm9yLT5maXJz
dCk7CisgICAgICAgICAgICBBU1NFUlQocmlnaHROZWlnaGJvci0+dmFsdWUtPm1fc3RhcnQgPT0g
cmlnaHROZWlnaGJvci0+a2V5KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgRnJlZVNwYWNl
Tm9kZSogcmlnaHROb2RlID0gcmlnaHROZWlnaGJvci0+c2Vjb25kOwotICAgICAgICAgICAgdm9p
ZCogcmlnaHRTdGFydCA9IHJpZ2h0TmVpZ2hib3ItPmZpcnN0OworICAgICAgICAgICAgRnJlZVNw
YWNlTm9kZSogcmlnaHROb2RlID0gcmlnaHROZWlnaGJvci0+dmFsdWU7CisgICAgICAgICAgICB2
b2lkKiByaWdodFN0YXJ0ID0gcmlnaHROZWlnaGJvci0+a2V5OwogICAgICAgICAgICAgc2l6ZV90
IHJpZ2h0U2l6ZSA9IHJpZ2h0Tm9kZS0+bV9zaXplSW5CeXRlczsKICAgICAgICAgICAgIHZvaWQq
IHJpZ2h0RW5kID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50
cHRyX3Q+KHJpZ2h0U3RhcnQpICsgcmlnaHRTaXplKTsKICAgICAgICAgICAgIApAQCAtMzU2LDgg
KzM1Niw4IEBAIHZvaWQgTWV0YUFsbG9jYXRvcjo6YWRkRnJlZVNwYWNlKHZvaWQqIHN0YXJ0LCBz
aXplX3Qgc2l6ZUluQnl0ZXMpCiAgICAgICAgIC8vIENhbm5vdCBjb2FsZXNjZSB3aXRoIGxlZnQ7
IHRyeSB0byBzZWUgaWYgd2UgY2FuIGNvYWxlc2NlIHdpdGggcmlnaHQuCiAgICAgICAgIAogICAg
ICAgICBpZiAocmlnaHROZWlnaGJvciAhPSBtX2ZyZWVTcGFjZVN0YXJ0QWRkcmVzc01hcC5lbmQo
KSkgewotICAgICAgICAgICAgRnJlZVNwYWNlTm9kZSogcmlnaHROb2RlID0gcmlnaHROZWlnaGJv
ci0+c2Vjb25kOwotICAgICAgICAgICAgdm9pZCogcmlnaHRTdGFydCA9IHJpZ2h0TmVpZ2hib3It
PmZpcnN0OworICAgICAgICAgICAgRnJlZVNwYWNlTm9kZSogcmlnaHROb2RlID0gcmlnaHROZWln
aGJvci0+dmFsdWU7CisgICAgICAgICAgICB2b2lkKiByaWdodFN0YXJ0ID0gcmlnaHROZWlnaGJv
ci0+a2V5OwogICAgICAgICAgICAgc2l6ZV90IHJpZ2h0U2l6ZSA9IHJpZ2h0Tm9kZS0+bV9zaXpl
SW5CeXRlczsKICAgICAgICAgICAgIHZvaWQqIHJpZ2h0RW5kID0gcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHJpZ2h0U3RhcnQpICsgcmlnaHRTaXpl
KTsKICAgICAgICAgICAgIApAQCAtNDAzLDcgKzQwMyw3IEBAIHZvaWQgTWV0YUFsbG9jYXRvcjo6
aW5jcmVtZW50UGFnZU9jY3VwYW5jeSh2b2lkKiBhZGRyZXNzLCBzaXplX3Qgc2l6ZUluQnl0ZXMp
CiAgICAgICAgICAgICBtX2J5dGVzQ29tbWl0dGVkICs9IG1fcGFnZVNpemU7CiAgICAgICAgICAg
ICBub3RpZnlOZWVkUGFnZShyZWludGVycHJldF9jYXN0PHZvaWQqPihwYWdlIDw8IG1fbG9nUGFn
ZVNpemUpKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBpdGVyLT5zZWNvbmQrKzsKKyAg
ICAgICAgICAgIGl0ZXItPnZhbHVlKys7CiAgICAgfQogfQogCkBAIC00MTUsNyArNDE1LDcgQEAg
dm9pZCBNZXRhQWxsb2NhdG9yOjpkZWNyZW1lbnRQYWdlT2NjdXBhbmN5KHZvaWQqIGFkZHJlc3Ms
IHNpemVfdCBzaXplSW5CeXRlcykKICAgICBmb3IgKHVpbnRwdHJfdCBwYWdlID0gZmlyc3RQYWdl
OyBwYWdlIDw9IGxhc3RQYWdlOyArK3BhZ2UpIHsKICAgICAgICAgSGFzaE1hcDx1aW50cHRyX3Qs
IHNpemVfdD46Oml0ZXJhdG9yIGl0ZXIgPSBtX3BhZ2VPY2N1cGFuY3lNYXAuZmluZChwYWdlKTsK
ICAgICAgICAgQVNTRVJUKGl0ZXIgIT0gbV9wYWdlT2NjdXBhbmN5TWFwLmVuZCgpKTsKLSAgICAg
ICAgaWYgKCEtLShpdGVyLT5zZWNvbmQpKSB7CisgICAgICAgIGlmICghLS0oaXRlci0+dmFsdWUp
KSB7CiAgICAgICAgICAgICBtX3BhZ2VPY2N1cGFuY3lNYXAucmVtb3ZlKGl0ZXIpOwogICAgICAg
ICAgICAgbV9ieXRlc0NvbW1pdHRlZCAtPSBtX3BhZ2VTaXplOwogICAgICAgICAgICAgbm90aWZ5
UGFnZUlzRnJlZShyZWludGVycHJldF9jYXN0PHZvaWQqPihwYWdlIDw8IG1fbG9nUGFnZVNpemUp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1JlZkNvdW50ZWRMZWFrQ291bnRlci5jcHAg
Yi9Tb3VyY2UvV1RGL3d0Zi9SZWZDb3VudGVkTGVha0NvdW50ZXIuY3BwCmluZGV4IDY3MGYyYTBj
ZWM1OTljNmQ0ZjMxNjQ0ZWJlYjU4NzQxNWVmNDMyMWEuLjRhMDQ1MjgyNDg5ZmU5NWExN2UyMzkx
OTc3M2QzN2NiMjQ0MTBiZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1JlZkNvdW50ZWRM
ZWFrQ291bnRlci5jcHAKKysrIGIvU291cmNlL1dURi93dGYvUmVmQ291bnRlZExlYWtDb3VudGVy
LmNwcApAQCAtNzEsNyArNzEsNyBAQCBSZWZDb3VudGVkTGVha0NvdW50ZXI6On5SZWZDb3VudGVk
TGVha0NvdW50ZXIoKQogICAgICAgICAgICAgTE9HKFJlZkNvdW50ZWRMZWFrcywgIkxFQUs6ICV1
ICVzIiwgbV9jb3VudCwgbV9kZXNjcmlwdGlvbik7CiAgICAgICAgIGVsc2UgaWYgKCFsb2dnZWRT
dXBwcmVzc2lvblJlYXNvbikgewogICAgICAgICAgICAgLy8gVGhpcyBsb2dzIG9ubHkgb25lIHJl
YXNvbi4gTGF0ZXIgd2UgY291bGQgY2hhbmdlIGl0IHNvIHdlIGxvZyBhbGwgdGhlIHJlYXNvbnMu
Ci0gICAgICAgICAgICBMT0coUmVmQ291bnRlZExlYWtzLCAiTm8gbGVhayBjaGVja2luZyBkb25l
OiAlcyIsIGxlYWtNZXNzYWdlU3VwcHJlc3Npb25SZWFzb25zLT5iZWdpbigpLT5maXJzdCk7Cisg
ICAgICAgICAgICBMT0coUmVmQ291bnRlZExlYWtzLCAiTm8gbGVhayBjaGVja2luZyBkb25lOiAl
cyIsIGxlYWtNZXNzYWdlU3VwcHJlc3Npb25SZWFzb25zLT5iZWdpbigpLT5rZXkpOwogICAgICAg
ICAgICAgbG9nZ2VkU3VwcHJlc3Npb25SZWFzb24gPSB0cnVlOwogICAgICAgICB9CiAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUmVmUHRySGFzaE1hcC5oIGIvU291cmNlL1dURi93
dGYvUmVmUHRySGFzaE1hcC5oCmluZGV4IDVmYWU5MGU4Y2Q0NzExMjllODlkY2M4ZTdhZTY2Mzhh
ZGExNTRkMzEuLjk1NDE4MzdlMmE2ZjI5YjlmMDZjM2M5NTYyYTEzMzQ2YjAxZDRjZTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1JlZlB0ckhhc2hNYXAuaAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi9SZWZQdHJIYXNoTWFwLmgKQEAgLTIxNiw3ICsyMTYsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAg
ICAgICAgQWRkUmVzdWx0IHJlc3VsdCA9IGlubGluZUFkZChrZXksIG1hcHBlZCk7CiAgICAgICAg
IGlmICghcmVzdWx0LmlzTmV3RW50cnkpIHsKICAgICAgICAgICAgIC8vIFRoZSBpbmxpbmVBZGQg
Y2FsbCBhYm92ZSBmb3VuZCBhbiBleGlzdGluZyBoYXNoIHRhYmxlIGVudHJ5OyB3ZSBuZWVkIHRv
IHNldCB0aGUgbWFwcGVkIHZhbHVlLgotICAgICAgICAgICAgTWFwcGVkVHJhaXRzOjpzdG9yZSht
YXBwZWQsIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKKyAgICAgICAgICAgIE1hcHBlZFRyYWl0
czo6c3RvcmUobWFwcGVkLCByZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKICAgICAgICAgfQogICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTIyOCw3ICsyMjgsNyBAQCBuYW1lc3BhY2Ug
V1RGIHsKICAgICAgICAgQWRkUmVzdWx0IHJlc3VsdCA9IGlubGluZUFkZChrZXksIG1hcHBlZCk7
CiAgICAgICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpIHsKICAgICAgICAgICAgIC8vIFRoZSBp
bmxpbmVBZGQgY2FsbCBhYm92ZSBmb3VuZCBhbiBleGlzdGluZyBoYXNoIHRhYmxlIGVudHJ5OyB3
ZSBuZWVkIHRvIHNldCB0aGUgbWFwcGVkIHZhbHVlLgotICAgICAgICAgICAgTWFwcGVkVHJhaXRz
OjpzdG9yZShtYXBwZWQsIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKKyAgICAgICAgICAgIE1h
cHBlZFRyYWl0czo6c3RvcmUobWFwcGVkLCByZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKICAgICAg
ICAgfQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTI1NCw3ICsyNTQsNyBAQCBu
YW1lc3BhY2UgV1RGIHsKICAgICAgICAgVmFsdWVUeXBlKiBlbnRyeSA9IGNvbnN0X2Nhc3Q8SGFz
aFRhYmxlVHlwZSY+KG1faW1wbCkubG9va3VwKGtleSk7CiAgICAgICAgIGlmICghZW50cnkpCiAg
ICAgICAgICAgICByZXR1cm4gTWFwcGVkVHJhaXRzOjpwZWVrKE1hcHBlZFRyYWl0czo6ZW1wdHlW
YWx1ZSgpKTsKLSAgICAgICAgcmV0dXJuIE1hcHBlZFRyYWl0czo6cGVlayhlbnRyeS0+c2Vjb25k
KTsKKyAgICAgICAgcmV0dXJuIE1hcHBlZFRyYWl0czo6cGVlayhlbnRyeS0+dmFsdWUpOwogICAg
IH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5
cGVuYW1lIFcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0cz4KQEAgLTI2NCw3ICsyNjQsNyBAQCBuYW1l
c3BhY2UgV1RGIHsKICAgICAgICAgVmFsdWVUeXBlKiBlbnRyeSA9IGNvbnN0X2Nhc3Q8SGFzaFRh
YmxlVHlwZSY+KG1faW1wbCkudGVtcGxhdGUgbG9va3VwPFRyYW5zbGF0b3I+KGtleSk7CiAgICAg
ICAgIGlmICghZW50cnkpCiAgICAgICAgICAgICByZXR1cm4gTWFwcGVkVHJhaXRzOjpwZWVrKE1h
cHBlZFRyYWl0czo6ZW1wdHlWYWx1ZSgpKTsKLSAgICAgICAgcmV0dXJuIE1hcHBlZFRyYWl0czo6
cGVlayhlbnRyeS0+c2Vjb25kKTsKKyAgICAgICAgcmV0dXJuIE1hcHBlZFRyYWl0czo6cGVlayhl
bnRyeS0+dmFsdWUpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0cz4KQEAgLTMw
OCw3ICszMDgsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgaXRlcmF0b3IgaXQgPSBmaW5k
KGtleSk7CiAgICAgICAgIGlmIChpdCA9PSBlbmQoKSkKICAgICAgICAgICAgIHJldHVybiBNYXBw
ZWRUcmFpdHM6OnBhc3NPdXQoTWFwcGVkVHJhaXRzOjplbXB0eVZhbHVlKCkpOwotICAgICAgICBN
YXBwZWRQYXNzT3V0VHlwZSByZXN1bHQgPSBNYXBwZWRUcmFpdHM6OnBhc3NPdXQoaXQtPnNlY29u
ZCk7CisgICAgICAgIE1hcHBlZFBhc3NPdXRUeXBlIHJlc3VsdCA9IE1hcHBlZFRyYWl0czo6cGFz
c091dChpdC0+dmFsdWUpOwogICAgICAgICByZW1vdmUoaXQpOwogICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgIH0KQEAgLTMyMCw3ICszMjAsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAg
aXRlcmF0b3IgaXQgPSBmaW5kKGtleSk7CiAgICAgICAgIGlmIChpdCA9PSBlbmQoKSkKICAgICAg
ICAgICAgIHJldHVybiBNYXBwZWRUcmFpdHM6OnBhc3NPdXQoTWFwcGVkVHJhaXRzOjplbXB0eVZh
bHVlKCkpOwotICAgICAgICBNYXBwZWRQYXNzT3V0VHlwZSByZXN1bHQgPSBNYXBwZWRUcmFpdHM6
OnBhc3NPdXQoaXQtPnNlY29uZCk7CisgICAgICAgIE1hcHBlZFBhc3NPdXRUeXBlIHJlc3VsdCA9
IE1hcHBlZFRyYWl0czo6cGFzc091dChpdC0+dmFsdWUpOwogICAgICAgICByZW1vdmUoaXQpOwog
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L1NwZWN0cnVtLmggYi9Tb3VyY2UvV1RGL3d0Zi9TcGVjdHJ1bS5oCmluZGV4IDVlN2E0ODRjZDg3
NjZiY2FmMjJjYTRjOTNkZGNlOTcwZGQyYmEyMTMuLjNlNmZhNGE2MzNmYWQ0MmRlYjRkYzQ4MzMy
NTkyMzQxZTg0YjNhMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1NwZWN0cnVtLmgKKysr
IGIvU291cmNlL1dURi93dGYvU3BlY3RydW0uaApAQCAtNDQsNyArNDQsNyBAQCBwdWJsaWM6CiAg
ICAgewogICAgICAgICB0eXBlbmFtZSBIYXNoTWFwPFQsIHVuc2lnbmVkIGxvbmc+OjpBZGRSZXN1
bHQgcmVzdWx0ID0gbV9tYXAuYWRkKGtleSwgY291bnQpOwogICAgICAgICBpZiAoIXJlc3VsdC5p
c05ld0VudHJ5KQotICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgKz0gY291bnQ7
CisgICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlICs9IGNvdW50OwogICAgIH0KICAg
ICAKICAgICB1bnNpZ25lZCBsb25nIGdldChjb25zdCBUJiBrZXkpIGNvbnN0CkBAIC01Miw3ICs1
Miw3IEBAIHB1YmxpYzoKICAgICAgICAgY29uc3RfaXRlcmF0b3IgaXRlciA9IG1fbWFwLmZpbmQo
a2V5KTsKICAgICAgICAgaWYgKGl0ZXIgPT0gbV9tYXAuZW5kKCkpCiAgICAgICAgICAgICByZXR1
cm4gMDsKLSAgICAgICAgcmV0dXJuIGl0ZXItPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGl0ZXIt
PnZhbHVlOwogICAgIH0KICAgICAKICAgICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIG1fbWFw
LmJlZ2luKCk7IH0KQEAgLTg4LDcgKzg4LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgVmVj
dG9yPEtleUFuZENvdW50PiBsaXN0OwogICAgICAgICBmb3IgKGNvbnN0X2l0ZXJhdG9yIGl0ZXIg
PSBiZWdpbigpOyBpdGVyICE9IGVuZCgpOyArK2l0ZXIpCi0gICAgICAgICAgICBsaXN0LmFwcGVu
ZChLZXlBbmRDb3VudChpdGVyLT5maXJzdCwgaXRlci0+c2Vjb25kKSk7CisgICAgICAgICAgICBs
aXN0LmFwcGVuZChLZXlBbmRDb3VudChpdGVyLT5rZXksIGl0ZXItPnZhbHVlKSk7CiAgICAgICAg
IAogICAgICAgICBzdGQ6OnNvcnQobGlzdC5iZWdpbigpLCBsaXN0LmVuZCgpKTsKICAgICAgICAg
cmV0dXJuIGxpc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdQdGhyZWFk
cy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHAKaW5kZXggODk5MWUy
NDliMjY1NmYwMTE4YTljNzAyNjU4OGY0M2MyZjkwMzEwYi4uYjcwY2NkZDlhMDhjZDEyNjU2MGY1
NDZhMDQyYmFmMzY3OTkwZjExOSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5n
UHRocmVhZHMuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcApA
QCAtMTY2LDggKzE2Niw4IEBAIHN0YXRpYyBUaHJlYWRJZGVudGlmaWVyIGlkZW50aWZpZXJCeVB0
aHJlYWRIYW5kbGUoY29uc3QgcHRocmVhZF90JiBwdGhyZWFkSGFuZGxlCiAKICAgICBUaHJlYWRN
YXA6Oml0ZXJhdG9yIGkgPSB0aHJlYWRNYXAoKS5iZWdpbigpOwogICAgIGZvciAoOyBpICE9IHRo
cmVhZE1hcCgpLmVuZCgpOyArK2kpIHsKLSAgICAgICAgaWYgKHB0aHJlYWRfZXF1YWwoaS0+c2Vj
b25kLT5wdGhyZWFkSGFuZGxlKCksIHB0aHJlYWRIYW5kbGUpICYmICFpLT5zZWNvbmQtPmhhc0V4
aXRlZCgpKQotICAgICAgICAgICAgcmV0dXJuIGktPmZpcnN0OworICAgICAgICBpZiAocHRocmVh
ZF9lcXVhbChpLT52YWx1ZS0+cHRocmVhZEhhbmRsZSgpLCBwdGhyZWFkSGFuZGxlKSAmJiAhaS0+
dmFsdWUtPmhhc0V4aXRlZCgpKQorICAgICAgICAgICAgcmV0dXJuIGktPmtleTsKICAgICB9CiAK
ICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9j
YXRpb24vR2VvbG9jYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlv
bi9HZW9sb2NhdGlvbi5jcHAKaW5kZXggNTdjYWYzMTUyYWNjODlkNjk3YWE4ZjY0NWNjOGYwMTM1
OWJjYjE1Mi4uYTNlZjQwMjZkZDA5OWFhYzcxMDY0NjQ5NGJkY2Q1Yjk2ODU1ZGEzZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlvbi5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlvbi5jcHAK
QEAgLTE5Miw3ICsxOTIsNyBAQCBHZW9sb2NhdGlvbjo6R2VvTm90aWZpZXIqIEdlb2xvY2F0aW9u
OjpXYXRjaGVyczo6ZmluZChpbnQgaWQpCiAgICAgSWRUb05vdGlmaWVyTWFwOjppdGVyYXRvciBp
dGVyID0gbV9pZFRvTm90aWZpZXJNYXAuZmluZChpZCk7CiAgICAgaWYgKGl0ZXIgPT0gbV9pZFRv
Tm90aWZpZXJNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBpdGVyLT5z
ZWNvbmQuZ2V0KCk7CisgICAgcmV0dXJuIGl0ZXItPnZhbHVlLmdldCgpOwogfQogCiB2b2lkIEdl
b2xvY2F0aW9uOjpXYXRjaGVyczo6cmVtb3ZlKGludCBpZCkKQEAgLTIwMSw3ICsyMDEsNyBAQCB2
b2lkIEdlb2xvY2F0aW9uOjpXYXRjaGVyczo6cmVtb3ZlKGludCBpZCkKICAgICBJZFRvTm90aWZp
ZXJNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2lkVG9Ob3RpZmllck1hcC5maW5kKGlkKTsKICAgICBp
ZiAoaXRlciA9PSBtX2lkVG9Ob3RpZmllck1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuOwotICAg
IG1fbm90aWZpZXJUb0lkTWFwLnJlbW92ZShpdGVyLT5zZWNvbmQpOworICAgIG1fbm90aWZpZXJU
b0lkTWFwLnJlbW92ZShpdGVyLT52YWx1ZSk7CiAgICAgbV9pZFRvTm90aWZpZXJNYXAucmVtb3Zl
KGl0ZXIpOwogfQogCkBAIC0yMTAsNyArMjEwLDcgQEAgdm9pZCBHZW9sb2NhdGlvbjo6V2F0Y2hl
cnM6OnJlbW92ZShHZW9Ob3RpZmllciogbm90aWZpZXIpCiAgICAgTm90aWZpZXJUb0lkTWFwOjpp
dGVyYXRvciBpdGVyID0gbV9ub3RpZmllclRvSWRNYXAuZmluZChub3RpZmllcik7CiAgICAgaWYg
KGl0ZXIgPT0gbV9ub3RpZmllclRvSWRNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBt
X2lkVG9Ob3RpZmllck1hcC5yZW1vdmUoaXRlci0+c2Vjb25kKTsKKyAgICBtX2lkVG9Ob3RpZmll
ck1hcC5yZW1vdmUoaXRlci0+dmFsdWUpOwogICAgIG1fbm90aWZpZXJUb0lkTWFwLnJlbW92ZShp
dGVyKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0
YWJhc2UuY3BwCmluZGV4IGQ5NzJjMmRiZDI1NjVjMzU5YWEwNjAxZDE2ZmYzMjQ5ZjQzNDczYjIu
LjBlYjgwMmY4NDFhNGEyZWI4MmIwMGFlZjIwMTBmNTExYzc2NDI2MDIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAKQEAgLTEwOCw3ICsx
MDgsNyBAQCBQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IElEQkRhdGFiYXNlOjpvYmplY3RTdG9y
ZU5hbWVzKCkgY29uc3QKIHsKICAgICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4gb2JqZWN0U3RvcmVO
YW1lcyA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOwogICAgIGZvciAoSURCRGF0YWJhc2VNZXRh
ZGF0YTo6T2JqZWN0U3RvcmVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9tZXRhZGF0YS5vYmpl
Y3RTdG9yZXMuYmVnaW4oKTsgaXQgIT0gbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuZW5kKCk7ICsr
aXQpCi0gICAgICAgIG9iamVjdFN0b3JlTmFtZXMtPmFwcGVuZChpdC0+Zmlyc3QpOworICAgICAg
ICBvYmplY3RTdG9yZU5hbWVzLT5hcHBlbmQoaXQtPmtleSk7CiAgICAgb2JqZWN0U3RvcmVOYW1l
cy0+c29ydCgpOwogICAgIHJldHVybiBvYmplY3RTdG9yZU5hbWVzLnJlbGVhc2UoKTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFj
a2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJh
c2VCYWNrZW5kSW1wbC5jcHAKaW5kZXggNmM0MWVkNjA4ZTg0ZDA3ZDNhODhjMmRiYmIxNjIxN2Q2
ZjhhMzliNC4uODA1Zjg2ZDg0MmM4ZGZkZWM4ZGJkOTVjZTRlM2YyOGI3YjVhMTJiYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5k
SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJh
c2VCYWNrZW5kSW1wbC5jcHAKQEAgLTE3MCw3ICsxNzAsNyBAQCBJREJEYXRhYmFzZU1ldGFkYXRh
IElEQkRhdGFiYXNlQmFja2VuZEltcGw6Om1ldGFkYXRhKCkgY29uc3QKIHsKICAgICBJREJEYXRh
YmFzZU1ldGFkYXRhIG1ldGFkYXRhKG1fbmFtZSwgbV9pZCwgbV92ZXJzaW9uLCBtX2ludFZlcnNp
b24sIG1fbWF4T2JqZWN0U3RvcmVJZCk7CiAgICAgZm9yIChPYmplY3RTdG9yZU1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX29iamVjdFN0b3Jlcy5iZWdpbigpOyBpdCAhPSBtX29iamVjdFN0b3Jl
cy5lbmQoKTsgKytpdCkKLSAgICAgICAgbWV0YWRhdGEub2JqZWN0U3RvcmVzLnNldChpdC0+Zmly
c3QsIGl0LT5zZWNvbmQtPm1ldGFkYXRhKCkpOworICAgICAgICBtZXRhZGF0YS5vYmplY3RTdG9y
ZXMuc2V0KGl0LT5rZXksIGl0LT52YWx1ZS0+bWV0YWRhdGEoKSk7CiAgICAgcmV0dXJuIG1ldGFk
YXRhOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJGYWN0b3J5QmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcAppbmRleCA2OGU3ZDNhZDA3YzQxZTExZjJlZDhj
ZTljYzNjMjVlN2YwMTNhNzJmLi5mNWU1ZTI3MjY4MDRlMTBiYjcyNmExNzBlNGFlYWU1NmZlMmQ5
ZTkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0
b3J5QmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKQEAgLTEwNiw3ICsxMDYsNyBAQCB2b2lkIElEQkZh
Y3RvcnlCYWNrZW5kSW1wbDo6ZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNz
UmVmUHRyPElEQkNhbAogICAgIGlmIChpdCAhPSBtX2RhdGFiYXNlQmFja2VuZE1hcC5lbmQoKSkg
ewogICAgICAgICAvLyBJZiB0aGVyZSBhcmUgYW55IGNvbm5lY3Rpb25zIHRvIHRoZSBkYXRhYmFz
ZSwgZGlyZWN0bHkgZGVsZXRlIHRoZQogICAgICAgICAvLyBkYXRhYmFzZS4KLSAgICAgICAgaXQt
PnNlY29uZC0+ZGVsZXRlRGF0YWJhc2UoY2FsbGJhY2tzKTsKKyAgICAgICAgaXQtPnZhbHVlLT5k
ZWxldGVEYXRhYmFzZShjYWxsYmFja3MpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0x
MzMsNyArMTMzLDcgQEAgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IElEQkZhY3RvcnlCYWNr
ZW5kSW1wbDo6b3BlbkJhY2tpbmdTdG9yZShQYXNzUmVmUHRyPFMKICAgICBSZWZQdHI8SURCQmFj
a2luZ1N0b3JlPiBiYWNraW5nU3RvcmU7CiAgICAgSURCQmFja2luZ1N0b3JlTWFwOjppdGVyYXRv
ciBpdDIgPSBtX2JhY2tpbmdTdG9yZU1hcC5maW5kKGZpbGVJZGVudGlmaWVyKTsKICAgICBpZiAo
aXQyICE9IG1fYmFja2luZ1N0b3JlTWFwLmVuZCgpKQotICAgICAgICBiYWNraW5nU3RvcmUgPSBp
dDItPnNlY29uZDsKKyAgICAgICAgYmFja2luZ1N0b3JlID0gaXQyLT52YWx1ZTsKICAgICBlbHNl
IHsKICNpZiBVU0UoTEVWRUxEQikKICAgICAgICAgYmFja2luZ1N0b3JlID0gSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZTo6b3BlbihzZWN1cml0eU9yaWdpbi5nZXQoKSwgZGF0YURpcmVjdG9yeSwgZmls
ZUlkZW50aWZpZXIsIHRoaXMpOwpAQCAtMTcxLDcgKzE3MSw3IEBAIHZvaWQgSURCRmFjdG9yeUJh
Y2tlbmRJbXBsOjpvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgaW50NjRfdCB2ZXJzaW9uLCBQYXNz
UmVmUHRyCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9IGVsc2UKLSAgICAg
ICAgZGF0YWJhc2VCYWNrZW5kID0gaXQtPnNlY29uZDsKKyAgICAgICAgZGF0YWJhc2VCYWNrZW5k
ID0gaXQtPnZhbHVlOwogCiAgICAgaWYgKHZlcnNpb24gPT0gSURCRGF0YWJhc2VNZXRhZGF0YTo6
Tm9JbnRWZXJzaW9uKQogICAgICAgICBkYXRhYmFzZUJhY2tlbmQtPm9wZW5Db25uZWN0aW9uKGNh
bGxiYWNrcywgZGF0YWJhc2VDYWxsYmFja3MpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCmluZGV4IDIxNzdmN2VhMGQ3ZDRiYjZk
YzRkMGNhZDI3ZWYzYWJlMjhlY2U2NGQuLjRiYmJiOTUwMTU1MmUwZGZjOTBhZWQxNTJkYTdlZWQ2
ZjgxNDRiZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
Qk9iamVjdFN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJPYmplY3RTdG9yZS5jcHAKQEAgLTY2LDcgKzY2LDcgQEAgUGFzc1JlZlB0cjxET01TdHJpbmdM
aXN0PiBJREJPYmplY3RTdG9yZTo6aW5kZXhOYW1lcygpIGNvbnN0CiAgICAgSURCX1RSQUNFKCJJ
REJPYmplY3RTdG9yZTo6aW5kZXhOYW1lcyIpOwogICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiBp
bmRleE5hbWVzID0gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7CiAgICAgZm9yIChJREJPYmplY3RT
dG9yZU1ldGFkYXRhOjpJbmRleE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX21ldGFkYXRhLmlu
ZGV4ZXMuYmVnaW4oKTsgaXQgIT0gbV9tZXRhZGF0YS5pbmRleGVzLmVuZCgpOyArK2l0KQotICAg
ICAgICBpbmRleE5hbWVzLT5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgaW5kZXhOYW1lcy0+
YXBwZW5kKGl0LT5rZXkpOwogICAgIGluZGV4TmFtZXMtPnNvcnQoKTsKICAgICByZXR1cm4gaW5k
ZXhOYW1lcy5yZWxlYXNlKCk7CiB9CkBAIC0yMDgsOCArMjA4LDggQEAgUGFzc1JlZlB0cjxJREJS
ZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0KElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFj
ZTo6UHV0TW8KICAgICBWZWN0b3I8SW5kZXhLZXlzPiBpbmRleEtleXM7CiAgICAgZm9yIChJREJP
YmplY3RTdG9yZU1ldGFkYXRhOjpJbmRleE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX21ldGFk
YXRhLmluZGV4ZXMuYmVnaW4oKTsgaXQgIT0gbV9tZXRhZGF0YS5pbmRleGVzLmVuZCgpOyArK2l0
KSB7CiAgICAgICAgIEluZGV4S2V5cyBrZXlzOwotICAgICAgICBnZW5lcmF0ZUluZGV4S2V5c0Zv
clZhbHVlKGl0LT5zZWNvbmQsIHZhbHVlLCAma2V5cyk7Ci0gICAgICAgIGluZGV4TmFtZXMuYXBw
ZW5kKGl0LT5maXJzdCk7CisgICAgICAgIGdlbmVyYXRlSW5kZXhLZXlzRm9yVmFsdWUoaXQtPnZh
bHVlLCB2YWx1ZSwgJmtleXMpOworICAgICAgICBpbmRleE5hbWVzLmFwcGVuZChpdC0+a2V5KTsK
ICAgICAgICAgaW5kZXhLZXlzLmFwcGVuZChrZXlzKTsKICAgICB9CiAgICAgQVNTRVJUKGluZGV4
S2V5cy5zaXplKCkgPT0gaW5kZXhOYW1lcy5zaXplKCkpOwpAQCAtNDQ0LDcgKzQ0NCw3IEBAIFBh
c3NSZWZQdHI8SURCSW5kZXg+IElEQk9iamVjdFN0b3JlOjppbmRleChjb25zdCBTdHJpbmcmIG5h
bWUsIEV4Y2VwdGlvbkNvZGUmIGVjCiAKICAgICBJREJJbmRleE1hcDo6aXRlcmF0b3IgaXQgPSBt
X2luZGV4TWFwLmZpbmQobmFtZSk7CiAgICAgaWYgKGl0ICE9IG1faW5kZXhNYXAuZW5kKCkpCi0g
ICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwogCiAg
ICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gaW5kZXhCYWNrZW5kID0gbV9iYWNr
ZW5kLT5pbmRleChuYW1lLCBlYyk7CiAgICAgQVNTRVJUKCFpbmRleEJhY2tlbmQgIT0gIWVjKTsg
Ly8gSWYgd2UgZGlkbid0IGdldCBhbiBpbmRleCwgd2Ugc2hvdWxkIGhhdmUgZ290dGVuIGFuIGV4
Y2VwdGlvbiBjb2RlLiBBbmQgdmljZSB2ZXJzYS4KQEAgLTQ1NCw3ICs0NTQsNyBAQCBQYXNzUmVm
UHRyPElEQkluZGV4PiBJREJPYmplY3RTdG9yZTo6aW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBF
eGNlcHRpb25Db2RlJiBlYwogICAgIElEQk9iamVjdFN0b3JlTWV0YWRhdGE6OkluZGV4TWFwOjpj
b25zdF9pdGVyYXRvciBtZGl0ID0gbV9tZXRhZGF0YS5pbmRleGVzLmZpbmQobmFtZSk7CiAgICAg
QVNTRVJUKG1kaXQgIT0gbV9tZXRhZGF0YS5pbmRleGVzLmVuZCgpKTsKIAotICAgIFJlZlB0cjxJ
REJJbmRleD4gaW5kZXggPSBJREJJbmRleDo6Y3JlYXRlKG1kaXQtPnNlY29uZCwgaW5kZXhCYWNr
ZW5kLnJlbGVhc2UoKSwgdGhpcywgbV90cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgUmVmUHRyPElE
QkluZGV4PiBpbmRleCA9IElEQkluZGV4OjpjcmVhdGUobWRpdC0+dmFsdWUsIGluZGV4QmFja2Vu
ZC5yZWxlYXNlKCksIHRoaXMsIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwogICAgIG1faW5kZXhNYXAu
c2V0KG5hbWUsIGluZGV4KTsKICAgICByZXR1cm4gaW5kZXgucmVsZWFzZSgpOwogfQpAQCAtNDc4
LDcgKzQ3OCw3IEBAIHZvaWQgSURCT2JqZWN0U3RvcmU6OmRlbGV0ZUluZGV4KGNvbnN0IFN0cmlu
ZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgaWYgKCFlYykgewogICAgICAgICBJREJJ
bmRleE1hcDo6aXRlcmF0b3IgaXQgPSBtX2luZGV4TWFwLmZpbmQobmFtZSk7CiAgICAgICAgIGlm
IChpdCAhPSBtX2luZGV4TWFwLmVuZCgpKSB7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLT5tYXJr
RGVsZXRlZCgpOworICAgICAgICAgICAgaXQtPnZhbHVlLT5tYXJrRGVsZXRlZCgpOwogICAgICAg
ICAgICAgbV9pbmRleE1hcC5yZW1vdmUobmFtZSk7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsLmNwcAppbmRleCAxYzk0YzhhOTYxZmMyZGM1YTg0Y2VjMzlmODMwOTE2ODE5ZjUx
YzRiLi41MzYwZGYxZTUwMzBjYWY3ZjE1ZTI1OWNlZWI4NTg1YTAyMzE4MWI3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsLmNwcApAQCAtNjcsNyArNjcsNyBAQCBJREJPYmplY3RTdG9yZU1ldGFk
YXRhIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Om1ldGFkYXRhKCkgY29uc3QKIHsKICAgICBJ
REJPYmplY3RTdG9yZU1ldGFkYXRhIG1ldGFkYXRhKG1fbmFtZSwgbV9pZCwgbV9rZXlQYXRoLCBt
X2F1dG9JbmNyZW1lbnQsIG1fbWF4SW5kZXhJZCk7CiAgICAgZm9yIChJbmRleE1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX2luZGV4ZXMuYmVnaW4oKTsgaXQgIT0gbV9pbmRleGVzLmVuZCgpOyAr
K2l0KQotICAgICAgICBtZXRhZGF0YS5pbmRleGVzLnNldChpdC0+Zmlyc3QsIGl0LT5zZWNvbmQt
Pm1ldGFkYXRhKCkpOworICAgICAgICBtZXRhZGF0YS5pbmRleGVzLnNldChpdC0+a2V5LCBpdC0+
dmFsdWUtPm1ldGFkYXRhKCkpOwogICAgIHJldHVybiBtZXRhZGF0YTsKIH0KIApAQCAtMjA5LDEx
ICsyMDksMTEgQEAgc3RhdGljIGJvb2wgbWFrZUluZGV4V3JpdGVycyhQYXNzUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uLAogCiAgICAgZm9yIChJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpJbmRleE1hcDo6aXRlcmF0b3IgaXQgPSBvYmplY3RTdG9yZS0+aXRl
ckluZGV4ZXNCZWdpbigpOyBpdCAhPSBvYmplY3RTdG9yZS0+aXRlckluZGV4ZXNFbmQoKTsgKytp
dCkgewogCi0gICAgICAgIGNvbnN0IFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiYgaW5kZXgg
PSBpdC0+c2Vjb25kOworICAgICAgICBjb25zdCBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4m
IGluZGV4ID0gaXQtPnZhbHVlOwogICAgICAgICBpZiAoIWluZGV4LT5oYXNWYWxpZElkKCkpCiAg
ICAgICAgICAgICBjb250aW51ZTsgLy8gVGhlIGluZGV4IG9iamVjdCBoYXMgYmVlbiBjcmVhdGVk
LCBidXQgZG9lcyBub3QgZXhpc3QgaW4gdGhlIGRhdGFiYXNlIHlldC4KIAotICAgICAgICBJREJP
YmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OkluZGV4S2V5cyBrZXlzID0gaW5kZXhLZXlNYXAu
Z2V0KGl0LT5maXJzdCk7CisgICAgICAgIElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6
SW5kZXhLZXlzIGtleXMgPSBpbmRleEtleU1hcC5nZXQoaXQtPmtleSk7CiAgICAgICAgIC8vIElm
IHRoZSBvYmplY3RTdG9yZSBpcyB1c2luZyBhdXRvSW5jcmVtZW50LCB0aGVuIGFueSBpbmRleGVz
IHdpdGggYW4gaWRlbnRpY2FsIGtleVBhdGggbmVlZCB0byBhbHNvIHVzZSB0aGUgcHJpbWFyeSAo
Z2VuZXJhdGVkKSBrZXkgYXMgYSBrZXkuCiAgICAgICAgIGlmIChrZXlXYXNHZW5lcmF0ZWQpIHsK
ICAgICAgICAgICAgIGNvbnN0IElEQktleVBhdGgmIGluZGV4S2V5UGF0aCA9IGluZGV4LT5rZXlQ
YXRoKCk7CkBAIC0zODksMTAgKzM4OSwxMCBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6OmRlbGV0ZUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUAogICAg
ICAgICAgICAgcmVjb3JkSWRlbnRpZmllciA9IGJhY2tpbmdTdG9yZUN1cnNvci0+b2JqZWN0U3Rv
cmVSZWNvcmRJZGVudGlmaWVyKCk7CiAKICAgICAgICAgICAgIGZvciAoSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6SW5kZXhNYXA6Oml0ZXJhdG9yIGl0ID0gb2JqZWN0U3RvcmUtPm1faW5kZXhl
cy5iZWdpbigpOyBpdCAhPSBvYmplY3RTdG9yZS0+bV9pbmRleGVzLmVuZCgpOyArK2l0KSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKCFpdC0+c2Vjb25kLT5oYXNWYWxpZElkKCkpCisgICAgICAgICAg
ICAgICAgaWYgKCFpdC0+dmFsdWUtPmhhc1ZhbGlkSWQoKSkKICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7IC8vIFRoZSBpbmRleCBvYmplY3QgaGFzIGJlZW4gY3JlYXRlZCwgYnV0IGRvZXMg
bm90IGV4aXN0IGluIHRoZSBkYXRhYmFzZSB5ZXQuCiAKLSAgICAgICAgICAgICAgICBib29sIHN1
Y2Nlc3MgPSBvYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCktPmRlbGV0ZUluZGV4RGF0YUZvclJl
Y29yZCh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgb2JqZWN0U3RvcmUt
PmRhdGFiYXNlSWQoKSwgb2JqZWN0U3RvcmUtPmlkKCksIGl0LT5zZWNvbmQtPmlkKCksIHJlY29y
ZElkZW50aWZpZXIuZ2V0KCkpOworICAgICAgICAgICAgICAgIGJvb2wgc3VjY2VzcyA9IG9iamVj
dFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+ZGVsZXRlSW5kZXhEYXRhRm9yUmVjb3JkKHRyYW5zYWN0
aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBvYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgp
LCBvYmplY3RTdG9yZS0+aWQoKSwgaXQtPnZhbHVlLT5pZCgpLCByZWNvcmRJZGVudGlmaWVyLmdl
dCgpKTsKICAgICAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOwog
ICAgICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJUcmFuc2FjdGlvbi5jcHAKaW5kZXggYjU2ZGMzNGVlNTgzN2MwNjljNzE2Zjg4NmUyOWEw
YzBjMzgzYzdkYi4uMzBhODk4MjQ3ZDAzMGVmNjI0NWMyZDlmZWRiYTJlMTZjNzMwMDA4ZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9u
LmNwcApAQCAtMTUxLDcgKzE1MSw3IEBAIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IElEQlRy
YW5zYWN0aW9uOjpvYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwCiAKICAgICBJ
REJPYmplY3RTdG9yZU1hcDo6aXRlcmF0b3IgaXQgPSBtX29iamVjdFN0b3JlTWFwLmZpbmQobmFt
ZSk7CiAgICAgaWYgKGl0ICE9IG1fb2JqZWN0U3RvcmVNYXAuZW5kKCkpCi0gICAgICAgIHJldHVy
biBpdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwogCiAgICAgUmVmUHRyPElE
Qk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gb2JqZWN0U3RvcmVCYWNrZW5kID0gbV9iYWNr
ZW5kLT5vYmplY3RTdG9yZShuYW1lLCBlYyk7CiAgICAgQVNTRVJUKCFvYmplY3RTdG9yZUJhY2tl
bmQgIT0gIWVjKTsgLy8gSWYgd2UgZGlkbid0IGdldCBhIHN0b3JlLCB3ZSBzaG91bGQgaGF2ZSBn
b3R0ZW4gYW4gZXhjZXB0aW9uIGNvZGUuIEFuZCB2aWNlIHZlcnNhLgpAQCAtMTYyLDcgKzE2Miw3
IEBAIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IElEQlRyYW5zYWN0aW9uOjpvYmplY3RTdG9y
ZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwCiAgICAgSURCRGF0YWJhc2VNZXRhZGF0YTo6T2Jq
ZWN0U3RvcmVNYXA6OmNvbnN0X2l0ZXJhdG9yIG1kaXQgPSBtZXRhZGF0YS5vYmplY3RTdG9yZXMu
ZmluZChuYW1lKTsKICAgICBBU1NFUlQobWRpdCAhPSBtZXRhZGF0YS5vYmplY3RTdG9yZXMuZW5k
KCkpOwogCi0gICAgUmVmUHRyPElEQk9iamVjdFN0b3JlPiBvYmplY3RTdG9yZSA9IElEQk9iamVj
dFN0b3JlOjpjcmVhdGUobWRpdC0+c2Vjb25kLCBvYmplY3RTdG9yZUJhY2tlbmQsIHRoaXMpOwor
ICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZT4gb2JqZWN0U3RvcmUgPSBJREJPYmplY3RTdG9yZTo6
Y3JlYXRlKG1kaXQtPnZhbHVlLCBvYmplY3RTdG9yZUJhY2tlbmQsIHRoaXMpOwogICAgIG9iamVj
dFN0b3JlQ3JlYXRlZChuYW1lLCBvYmplY3RTdG9yZSk7CiAgICAgcmV0dXJuIG9iamVjdFN0b3Jl
LnJlbGVhc2UoKTsKIH0KQEAgLTE4Miw3ICsxODIsNyBAQCB2b2lkIElEQlRyYW5zYWN0aW9uOjpv
YmplY3RTdG9yZURlbGV0ZWQoY29uc3QgU3RyaW5nJiBuYW1lKQogICAgIEFTU0VSVChpc1ZlcnNp
b25DaGFuZ2UoKSk7CiAgICAgSURCT2JqZWN0U3RvcmVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9vYmpl
Y3RTdG9yZU1hcC5maW5kKG5hbWUpOwogICAgIGlmIChpdCAhPSBtX29iamVjdFN0b3JlTWFwLmVu
ZCgpKSB7Ci0gICAgICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZT4gb2JqZWN0U3RvcmUgPSBpdC0+
c2Vjb25kOworICAgICAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmU+IG9iamVjdFN0b3JlID0gaXQt
PnZhbHVlOwogICAgICAgICBtX29iamVjdFN0b3JlTWFwLnJlbW92ZShuYW1lKTsKICAgICAgICAg
b2JqZWN0U3RvcmUtPm1hcmtEZWxldGVkKCk7CiAgICAgICAgIG1fb2JqZWN0U3RvcmVDbGVhbnVw
TWFwLnNldChvYmplY3RTdG9yZSwgb2JqZWN0U3RvcmUtPm1ldGFkYXRhKCkpOwpAQCAtMzAxLDcg
KzMwMSw3IEBAIHZvaWQgSURCVHJhbnNhY3Rpb246Om9uQWJvcnQoKQogCiAgICAgaWYgKGlzVmVy
c2lvbkNoYW5nZSgpKSB7CiAgICAgICAgIGZvciAoSURCT2JqZWN0U3RvcmVNZXRhZGF0YU1hcDo6
aXRlcmF0b3IgaXQgPSBtX29iamVjdFN0b3JlQ2xlYW51cE1hcC5iZWdpbigpOyBpdCAhPSBtX29i
amVjdFN0b3JlQ2xlYW51cE1hcC5lbmQoKTsgKytpdCkKLSAgICAgICAgICAgIGl0LT5maXJzdC0+
c2V0TWV0YWRhdGEoaXQtPnNlY29uZCk7CisgICAgICAgICAgICBpdC0+a2V5LT5zZXRNZXRhZGF0
YShpdC0+dmFsdWUpOwogICAgIH0KICAgICBtX29iamVjdFN0b3JlQ2xlYW51cE1hcC5jbGVhcigp
OwogICAgIGNsb3NlT3BlbkN1cnNvcnMoKTsKQEAgLTM4NSw3ICszODUsNyBAQCBib29sIElEQlRy
YW5zYWN0aW9uOjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQogCiAgICAg
Ly8gQnJlYWsgcmVmZXJlbmNlIGN5Y2xlcy4KICAgICBmb3IgKElEQk9iamVjdFN0b3JlTWFwOjpp
dGVyYXRvciBpdCA9IG1fb2JqZWN0U3RvcmVNYXAuYmVnaW4oKTsgaXQgIT0gbV9vYmplY3RTdG9y
ZU1hcC5lbmQoKTsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+dHJhbnNhY3Rpb25GaW5pc2hl
ZCgpOworICAgICAgICBpdC0+dmFsdWUtPnRyYW5zYWN0aW9uRmluaXNoZWQoKTsKICAgICBtX29i
amVjdFN0b3JlTWFwLmNsZWFyKCk7CiAgICAgZm9yIChJREJPYmplY3RTdG9yZVNldDo6aXRlcmF0
b3IgaXQgPSBtX2RlbGV0ZWRPYmplY3RTdG9yZXMuYmVnaW4oKTsgaXQgIT0gbV9kZWxldGVkT2Jq
ZWN0U3RvcmVzLmVuZCgpOyArK2l0KQogICAgICAgICAoKml0KS0+dHJhbnNhY3Rpb25GaW5pc2hl
ZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRp
YUNvbnN0cmFpbnRzSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L01lZGlhQ29uc3RyYWludHNJbXBsLmNwcAppbmRleCBiOWJmMDQ5MWI1ZGQ3MTRjYzc5ZmQxODRh
ZTU2NmNjYmRkMTAxYThlLi5lYzJkMzRhOTY4ZTc2ZmFmMDVmMGFhM2E4MjAwZmI5NWI1ZjYwMzk0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhQ29u
c3RyYWludHNJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L01lZGlhQ29uc3RyYWludHNJbXBsLmNwcApAQCAtMTE4LDcgKzExOCw3IEBAIHZvaWQgTWVkaWFD
b25zdHJhaW50c0ltcGw6OmdldE1hbmRhdG9yeUNvbnN0cmFpbnRzKFZlY3RvcjxNZWRpYUNvbnN0
cmFpbnQ+JiBjb25zCiAgICAgY29uc3RyYWludHMuY2xlYXIoKTsKICAgICBIYXNoTWFwPFN0cmlu
ZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaSA9IG1fbWFuZGF0b3J5Q29uc3RyYWludHMuYmVn
aW4oKTsKICAgICBmb3IgKDsgaSAhPSBtX21hbmRhdG9yeUNvbnN0cmFpbnRzLmVuZCgpOyArK2kp
Ci0gICAgICAgIGNvbnN0cmFpbnRzLmFwcGVuZChNZWRpYUNvbnN0cmFpbnQoaS0+Zmlyc3QsIGkt
PnNlY29uZCkpOworICAgICAgICBjb25zdHJhaW50cy5hcHBlbmQoTWVkaWFDb25zdHJhaW50KGkt
PmtleSwgaS0+dmFsdWUpKTsKIH0KIAogdm9pZCBNZWRpYUNvbnN0cmFpbnRzSW1wbDo6Z2V0T3B0
aW9uYWxDb25zdHJhaW50cyhWZWN0b3I8TWVkaWFDb25zdHJhaW50PiYgY29uc3RyYWludHMpIGNv
bnN0CkBAIC0xMzMsNyArMTMzLDcgQEAgYm9vbCBNZWRpYUNvbnN0cmFpbnRzSW1wbDo6Z2V0TWFu
ZGF0b3J5Q29uc3RyYWludFZhbHVlKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW4KICAgICBpZiAo
aSA9PSBtX21hbmRhdG9yeUNvbnN0cmFpbnRzLmVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICB2YWx1ZSA9IGktPnNlY29uZDsKKyAgICB2YWx1ZSA9IGktPnZhbHVlOwogICAgIHJl
dHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRh
dGFiYXNlL0Fic3RyYWN0RGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9BYnN0cmFjdERhdGFiYXNlLmNwcAppbmRleCBjNzUzOWM2ZTExMmI5ZTFlNmJmMWUy
Y2QzZjAyYWUwY2JhMmJlYTI2Li42MjkwN2UzZTFjZTZiMDkxNWMyYjAzNDc2MDllNTA3ZThjMDFj
ZWI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Fic3Ry
YWN0RGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2Uv
QWJzdHJhY3REYXRhYmFzZS5jcHAKQEAgLTI4Miw3ICsyODIsNyBAQCBib29sIEFic3RyYWN0RGF0
YWJhc2U6OnBlcmZvcm1PcGVuQW5kVmVyaWZ5KGJvb2wgc2hvdWxkU2V0VmVyc2lvbkluTmV3RGF0
YWJhc2UsCiAgICAgICAgIEd1aWRWZXJzaW9uTWFwOjppdGVyYXRvciBlbnRyeSA9IGd1aWRUb1Zl
cnNpb25NYXAoKS5maW5kKG1fZ3VpZCk7CiAgICAgICAgIGlmIChlbnRyeSAhPSBndWlkVG9WZXJz
aW9uTWFwKCkuZW5kKCkpIHsKICAgICAgICAgICAgIC8vIE1hcCBudWxsIHN0cmluZyB0byBlbXB0
eSBzdHJpbmcgKHNlZSB1cGRhdGVHdWlkVmVyc2lvbk1hcCgpKS4KLSAgICAgICAgICAgIGN1cnJl
bnRWZXJzaW9uID0gZW50cnktPnNlY29uZC5pc051bGwoKSA/IGVtcHR5U3RyaW5nKCkgOiBlbnRy
eS0+c2Vjb25kLmlzb2xhdGVkQ29weSgpOworICAgICAgICAgICAgY3VycmVudFZlcnNpb24gPSBl
bnRyeS0+dmFsdWUuaXNOdWxsKCkgPyBlbXB0eVN0cmluZygpIDogZW50cnktPnZhbHVlLmlzb2xh
dGVkQ29weSgpOwogICAgICAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJDdXJyZW50IGNhY2hlZCB2
ZXJzaW9uIGZvciBndWlkICVpIGlzICVzIiwgbV9ndWlkLCBjdXJyZW50VmVyc2lvbi5hc2NpaSgp
LmRhdGEoKSk7CiAKICNpZiBQTEFURk9STShDSFJPTUlVTSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNwcAppbmRleCA0NmQy
ODEyOTJkOWI3ZTQzN2I1ZGUwZjMyNWZhZjI0NWM4MTYzYWQ0Li41YmQ1ZTdiM2QyZTFjNDAyMTFi
MDFhNjFkMGJmNzgzY2IzNTI2MjI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3BwCkBAIC0yNTAsNyArMjUwLDcgQEAg
dm9pZCBEYXRhYmFzZVRyYWNrZXI6OmludGVycnVwdEFsbERhdGFiYXNlc0ZvckNvbnRleHQoY29u
c3QgU2NyaXB0RXhlY3V0aW9uQ29udGUKIAogICAgICAgICBEYXRhYmFzZU5hbWVNYXA6OmNvbnN0
X2l0ZXJhdG9yIGRiTmFtZU1hcEVuZEl0ID0gbmFtZU1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAo
RGF0YWJhc2VOYW1lTWFwOjpjb25zdF9pdGVyYXRvciBkYk5hbWVNYXBJdCA9IG5hbWVNYXAtPmJl
Z2luKCk7IGRiTmFtZU1hcEl0ICE9IGRiTmFtZU1hcEVuZEl0OyArK2RiTmFtZU1hcEl0KSB7Ci0g
ICAgICAgICAgICBEYXRhYmFzZVNldCogZGF0YWJhc2VTZXQgPSBkYk5hbWVNYXBJdC0+c2Vjb25k
OworICAgICAgICAgICAgRGF0YWJhc2VTZXQqIGRhdGFiYXNlU2V0ID0gZGJOYW1lTWFwSXQtPnZh
bHVlOwogICAgICAgICAgICAgRGF0YWJhc2VTZXQ6OmNvbnN0X2l0ZXJhdG9yIGRiU2V0RW5kSXQg
PSBkYXRhYmFzZVNldC0+ZW5kKCk7CiAgICAgICAgICAgICBmb3IgKERhdGFiYXNlU2V0Ojpjb25z
dF9pdGVyYXRvciBkYlNldEl0ID0gZGF0YWJhc2VTZXQtPmJlZ2luKCk7IGRiU2V0SXQgIT0gZGJT
ZXRFbmRJdDsgKytkYlNldEl0KSB7CiAgICAgICAgICAgICAgICAgaWYgKCgqZGJTZXRJdCktPnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSA9PSBjb250ZXh0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9PcmlnaW5Vc2FnZVJlY29yZC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL09yaWdpblVzYWdlUmVjb3JkLmNwcAppbmRleCA0
NDM1NTBhNTczMDlmMzM2M2YwZmNhOThmNTA4YzAyNzZkMGQ5OWRiLi4yYmY4YWY0YWUwMDk5Mjgw
YWNhMTc1Nzc0OGJhMjFjZjkwYjcwMmRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmRhdGFiYXNlL09yaWdpblVzYWdlUmVjb3JkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL09yaWdpblVzYWdlUmVjb3JkLmNwcApAQCAtOTMsNyArOTMs
NyBAQCB1bnNpZ25lZCBsb25nIGxvbmcgT3JpZ2luVXNhZ2VSZWNvcmQ6OmRpc2tVc2FnZSgpCiAg
ICAgSGFzaE1hcDxTdHJpbmcsIERhdGFiYXNlRW50cnk+OjppdGVyYXRvciBpRGF0YWJhc2UgPSBt
X2RhdGFiYXNlTWFwLmJlZ2luKCk7CiAgICAgSGFzaE1hcDxTdHJpbmcsIERhdGFiYXNlRW50cnk+
OjppdGVyYXRvciBlbmREYXRhYmFzZSA9IG1fZGF0YWJhc2VNYXAuZW5kKCk7CiAgICAgZm9yICg7
IGlEYXRhYmFzZSAhPSBlbmREYXRhYmFzZTsgKytpRGF0YWJhc2UpCi0gICAgICAgIG1fY2FjaGVk
RGlza1VzYWdlICs9IGlEYXRhYmFzZS0+c2Vjb25kLnNpemU7CisgICAgICAgIG1fY2FjaGVkRGlz
a1VzYWdlICs9IGlEYXRhYmFzZS0+dmFsdWUuc2l6ZTsKIAogICAgIG1fY2FjaGVkRGlza1VzYWdl
SXNWYWxpZCA9IHRydWU7CiAgICAgcmV0dXJuIG1fY2FjaGVkRGlza1VzYWdlOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNvb3Jk
aW5hdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNh
Y3Rpb25Db29yZGluYXRvci5jcHAKaW5kZXggODM3YjhmYmQyMjA1YWRjOTc0ODZkZDNmMGU4ZjAy
MDczODBmOGQ5Yi4uZGEzYTdlZTc1YjhjMDEyNTk0NjZlYzRhN2VhZGE5N2JkMWMyM2JmNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlv
bkNvb3JkaW5hdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNl
L1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwCkBAIC03OCw3ICs3OCw3IEBAIHZvaWQgU1FM
VHJhbnNhY3Rpb25Db29yZGluYXRvcjo6YWNxdWlyZUxvY2soU1FMVHJhbnNhY3Rpb24qIHRyYW5z
YWN0aW9uKQogICAgICAgICBjb29yZGluYXRpb25JbmZvSXRlcmF0b3IgPSBtX2Nvb3JkaW5hdGlv
bkluZm9NYXAuYWRkKGRiSWRlbnRpZmllciwgQ29vcmRpbmF0aW9uSW5mbygpKS5pdGVyYXRvcjsK
ICAgICB9CiAKLSAgICBDb29yZGluYXRpb25JbmZvJiBpbmZvID0gY29vcmRpbmF0aW9uSW5mb0l0
ZXJhdG9yLT5zZWNvbmQ7CisgICAgQ29vcmRpbmF0aW9uSW5mbyYgaW5mbyA9IGNvb3JkaW5hdGlv
bkluZm9JdGVyYXRvci0+dmFsdWU7CiAgICAgaW5mby5wZW5kaW5nVHJhbnNhY3Rpb25zLmFwcGVu
ZCh0cmFuc2FjdGlvbik7CiAgICAgcHJvY2Vzc1BlbmRpbmdUcmFuc2FjdGlvbnMoaW5mbyk7CiB9
CkBAIC05Miw3ICs5Miw3IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6cmVsZWFz
ZUxvY2soU1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQogCiAgICAgQ29vcmRpbmF0aW9uSW5m
b01hcDo6aXRlcmF0b3IgY29vcmRpbmF0aW9uSW5mb0l0ZXJhdG9yID0gbV9jb29yZGluYXRpb25J
bmZvTWFwLmZpbmQoZGJJZGVudGlmaWVyKTsKICAgICBBU1NFUlQoY29vcmRpbmF0aW9uSW5mb0l0
ZXJhdG9yICE9IG1fY29vcmRpbmF0aW9uSW5mb01hcC5lbmQoKSk7Ci0gICAgQ29vcmRpbmF0aW9u
SW5mbyYgaW5mbyA9IGNvb3JkaW5hdGlvbkluZm9JdGVyYXRvci0+c2Vjb25kOworICAgIENvb3Jk
aW5hdGlvbkluZm8mIGluZm8gPSBjb29yZGluYXRpb25JbmZvSXRlcmF0b3ItPnZhbHVlOwogCiAg
ICAgaWYgKHRyYW5zYWN0aW9uLT5pc1JlYWRPbmx5KCkpIHsKICAgICAgICAgQVNTRVJUKGluZm8u
YWN0aXZlUmVhZFRyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbikpOwpAQCAtMTEwLDcg
KzExMCw3IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6c2h1dGRvd24oKQogICAg
IC8vIE5vdGlmeSBhbGwgdHJhbnNhY3Rpb25zIGluIHByb2dyZXNzIHRoYXQgdGhlIGRhdGFiYXNl
IHRocmVhZCBpcyBzaHV0dGluZyBkb3duCiAgICAgZm9yIChDb29yZGluYXRpb25JbmZvTWFwOjpp
dGVyYXRvciBjb29yZGluYXRpb25JbmZvSXRlcmF0b3IgPSBtX2Nvb3JkaW5hdGlvbkluZm9NYXAu
YmVnaW4oKTsKICAgICAgICAgIGNvb3JkaW5hdGlvbkluZm9JdGVyYXRvciAhPSBtX2Nvb3JkaW5h
dGlvbkluZm9NYXAuZW5kKCk7ICsrY29vcmRpbmF0aW9uSW5mb0l0ZXJhdG9yKSB7Ci0gICAgICAg
IENvb3JkaW5hdGlvbkluZm8mIGluZm8gPSBjb29yZGluYXRpb25JbmZvSXRlcmF0b3ItPnNlY29u
ZDsKKyAgICAgICAgQ29vcmRpbmF0aW9uSW5mbyYgaW5mbyA9IGNvb3JkaW5hdGlvbkluZm9JdGVy
YXRvci0+dmFsdWU7CiAgICAgICAgIGlmIChpbmZvLmFjdGl2ZVdyaXRlVHJhbnNhY3Rpb24pCiAg
ICAgICAgICAgICBpbmZvLmFjdGl2ZVdyaXRlVHJhbnNhY3Rpb24tPm5vdGlmeURhdGFiYXNlVGhy
ZWFkSXNTaHV0dGluZ0Rvd24oKTsKICAgICAgICAgZm9yIChIYXNoU2V0PFJlZlB0cjxTUUxUcmFu
c2FjdGlvbj4gPjo6aXRlcmF0b3IgYWN0aXZlUmVhZFRyYW5zYWN0aW9uc0l0ZXJhdG9yID0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvY2hyb21pdW0vRGF0
YWJhc2VUcmFja2VyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRh
YmFzZS9jaHJvbWl1bS9EYXRhYmFzZVRyYWNrZXJDaHJvbWl1bS5jcHAKaW5kZXggODhlOWJkYTFh
NmFhYzU5YWRjMWIxZDNmNGRjODY3NGNhMWE5MmMxZS4uMzA5ZDQ2YzBkMDgyYWRjZWM0MjJhNGQy
Y2JmN2E4N2U4ZDY5ODk3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9jaHJvbWl1bS9EYXRhYmFzZVRyYWNrZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9jaHJvbWl1bS9EYXRhYmFzZVRyYWNrZXJDaHJv
bWl1bS5jcHAKQEAgLTE4MCw3ICsxODAsNyBAQCB2b2lkIERhdGFiYXNlVHJhY2tlcjo6aW50ZXJy
dXB0QWxsRGF0YWJhc2VzRm9yQ29udGV4dChjb25zdCBTY3JpcHRFeGVjdXRpb25Db250ZQogCiAg
ICAgRGF0YWJhc2VOYW1lTWFwOjpjb25zdF9pdGVyYXRvciBkYk5hbWVNYXBFbmRJdCA9IG5hbWVN
YXAtPmVuZCgpOwogICAgIGZvciAoRGF0YWJhc2VOYW1lTWFwOjpjb25zdF9pdGVyYXRvciBkYk5h
bWVNYXBJdCA9IG5hbWVNYXAtPmJlZ2luKCk7IGRiTmFtZU1hcEl0ICE9IGRiTmFtZU1hcEVuZEl0
OyArK2RiTmFtZU1hcEl0KSB7Ci0gICAgICAgIERhdGFiYXNlU2V0KiBkYXRhYmFzZVNldCA9IGRi
TmFtZU1hcEl0LT5zZWNvbmQ7CisgICAgICAgIERhdGFiYXNlU2V0KiBkYXRhYmFzZVNldCA9IGRi
TmFtZU1hcEl0LT52YWx1ZTsKICAgICAgICAgRGF0YWJhc2VTZXQ6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IGRhdGFiYXNlU2V0LT5lbmQoKTsKICAgICAgICAgZm9yIChEYXRhYmFzZVNldDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBkYXRhYmFzZVNldC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAg
ICAgICAgICAgICBpZiAoKCppdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSA9PSBjb250ZXh0
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9jaHJvbWl1
bS9RdW90YVRyYWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9j
aHJvbWl1bS9RdW90YVRyYWNrZXIuY3BwCmluZGV4IDAzNDRjYThmNjU2YTY1ZDM3YjMwNGJiN2Uz
OTg4OWZjZTM2ZjhmNWQuLjM4MmEzZmI4YjU3ODYyNTVjZWJhMGU3Zjg1OWIxNDJhZWMxZDk1MTkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvY2hyb21pdW0v
UXVvdGFUcmFja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNl
L2Nocm9taXVtL1F1b3RhVHJhY2tlci5jcHAKQEAgLTUzLDggKzUzLDggQEAgdm9pZCBRdW90YVRy
YWNrZXI6OmdldERhdGFiYXNlU2l6ZUFuZFNwYWNlQXZhaWxhYmxlVG9PcmlnaW4oCiAgICAgICAg
IE11dGV4TG9ja2VyIGxvY2tEYXRhKG1fZGF0YUd1YXJkKTsKICAgICAgICAgQVNTRVJUKG1fZGF0
YWJhc2VTaXplcy5jb250YWlucyhvcmlnaW5JZGVudGlmaWVyKSk7CiAgICAgICAgIEhhc2hNYXA8
U3RyaW5nLCBTaXplTWFwPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2RhdGFiYXNlU2l6ZXMuZmlu
ZChvcmlnaW5JZGVudGlmaWVyKTsKLSAgICAgICAgQVNTRVJUKGl0LT5zZWNvbmQuY29udGFpbnMo
ZGF0YWJhc2VOYW1lKSk7Ci0gICAgICAgICpkYXRhYmFzZVNpemUgPSBpdC0+c2Vjb25kLmdldChk
YXRhYmFzZU5hbWUpOworICAgICAgICBBU1NFUlQoaXQtPnZhbHVlLmNvbnRhaW5zKGRhdGFiYXNl
TmFtZSkpOworICAgICAgICAqZGF0YWJhc2VTaXplID0gaXQtPnZhbHVlLmdldChkYXRhYmFzZU5h
bWUpOwogCiAgICAgICAgIGlmIChtX3NwYWNlQXZhaWxhYmxlVG9PcmlnaW5zLmNvbnRhaW5zKG9y
aWdpbklkZW50aWZpZXIpKSB7CiAgICAgICAgICAgICAqc3BhY2VBdmFpbGFibGUgPSBtX3NwYWNl
QXZhaWxhYmxlVG9PcmlnaW5zLmdldChvcmlnaW5JZGVudGlmaWVyKTsKQEAgLTcyLDcgKzcyLDcg
QEAgdm9pZCBRdW90YVRyYWNrZXI6OnVwZGF0ZURhdGFiYXNlU2l6ZSgKIHsKICAgICBNdXRleExv
Y2tlciBsb2NrRGF0YShtX2RhdGFHdWFyZCk7CiAgICAgSGFzaE1hcDxTdHJpbmcsIFNpemVNYXA+
OjppdGVyYXRvciBpdCA9IG1fZGF0YWJhc2VTaXplcy5hZGQob3JpZ2luSWRlbnRpZmllciwgU2l6
ZU1hcCgpKS5pdGVyYXRvcjsKLSAgICBpdC0+c2Vjb25kLnNldChkYXRhYmFzZU5hbWUsIGRhdGFi
YXNlU2l6ZSk7CisgICAgaXQtPnZhbHVlLnNldChkYXRhYmFzZU5hbWUsIGRhdGFiYXNlU2l6ZSk7
CiB9CiAKIHZvaWQgUXVvdGFUcmFja2VyOjp1cGRhdGVTcGFjZUF2YWlsYWJsZVRvT3JpZ2luKGNv
bnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllciwgdW5zaWduZWQgbG9uZyBsb25nIHNwYWNlQXZh
aWxhYmxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dl
YlNvY2tldERlZmxhdGVGcmFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2Nr
ZXRzL1dlYlNvY2tldERlZmxhdGVGcmFtZXIuY3BwCmluZGV4IGJmN2FmZGJhYjFjYjRkZmQ2MmZh
ODE5MzU0MTYyNDEwZjBiOWU3NGQuLjU5MDI0NmRjMjEwYWVhMmEzMmM2ODlmNGRlYjI1NjY5Yjcy
ZTcxNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJT
b2NrZXREZWZsYXRlRnJhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNv
Y2tldHMvV2ViU29ja2V0RGVmbGF0ZUZyYW1lci5jcHAKQEAgLTg4LDcgKzg4LDcgQEAgYm9vbCBX
ZWJTb2NrZXRFeHRlbnNpb25EZWZsYXRlRnJhbWU6OnByb2Nlc3NSZXNwb25zZShjb25zdCBIYXNo
TWFwPFN0cmluZywgU3RyaW4KICAgICBpbnQgd2luZG93Qml0cyA9IDE1OwogICAgIEhhc2hNYXA8
U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBwYXJhbWV0ZXIgPSBzZXJ2ZXJQYXJhbWV0
ZXJzLmZpbmQoIm1heF93aW5kb3dfYml0cyIpOwogICAgIGlmIChwYXJhbWV0ZXIgIT0gc2VydmVy
UGFyYW1ldGVycy5lbmQoKSkgewotICAgICAgICB3aW5kb3dCaXRzID0gcGFyYW1ldGVyLT5zZWNv
bmQudG9JbnQoKTsKKyAgICAgICAgd2luZG93Qml0cyA9IHBhcmFtZXRlci0+dmFsdWUudG9JbnQo
KTsKICAgICAgICAgaWYgKHdpbmRvd0JpdHMgPCA4IHx8IHdpbmRvd0JpdHMgPiAxNSkgewogICAg
ICAgICAgICAgbV9mYWlsdXJlUmVhc29uID0gIlJlY2VpdmVkIGludmFsaWQgbWF4X3dpbmRvd19i
aXRzIHBhcmFtZXRlciI7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC05OSw3ICs5OSw3
IEBAIGJvb2wgV2ViU29ja2V0RXh0ZW5zaW9uRGVmbGF0ZUZyYW1lOjpwcm9jZXNzUmVzcG9uc2Uo
Y29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluCiAgICAgV2ViU29ja2V0RGVmbGF0ZXI6OkNvbnRl
eHRUYWtlT3Zlck1vZGUgbW9kZSA9IFdlYlNvY2tldERlZmxhdGVyOjpUYWtlT3ZlckNvbnRleHQ7
CiAgICAgcGFyYW1ldGVyID0gc2VydmVyUGFyYW1ldGVycy5maW5kKCJub19jb250ZXh0X3Rha2Vv
dmVyIik7CiAgICAgaWYgKHBhcmFtZXRlciAhPSBzZXJ2ZXJQYXJhbWV0ZXJzLmVuZCgpKSB7Ci0g
ICAgICAgIGlmICghcGFyYW1ldGVyLT5zZWNvbmQuaXNOdWxsKCkpIHsKKyAgICAgICAgaWYgKCFw
YXJhbWV0ZXItPnZhbHVlLmlzTnVsbCgpKSB7CiAgICAgICAgICAgICBtX2ZhaWx1cmVSZWFzb24g
PSAiUmVjZWl2ZWQgaW52YWxpZCBub19jb250ZXh0X3Rha2VvdmVyIHBhcmFtZXRlciI7CiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRFeHRlbnNpb25EaXNw
YXRjaGVyLmNwcAppbmRleCBhYWJiZjkzNWNjZjA5NDRlNGNmZDlkZDRjYzBjMGViMzM5NGQyYzg3
Li4wNmI3MTk0NjVkY2Y5MGMyMDUxOTMwZGFlYzgzODIxYmVmYjcwNDBjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0RXh0ZW5zaW9uRGlzcGF0
Y2hlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tl
dEV4dGVuc2lvbkRpc3BhdGNoZXIuY3BwCkBAIC04MywxMCArODMsMTAgQEAgdm9pZCBXZWJTb2Nr
ZXRFeHRlbnNpb25EaXNwYXRjaGVyOjphcHBlbmRBY2NlcHRlZEV4dGVuc2lvbihjb25zdCBTdHJp
bmcmIGV4dGVuc2kKICAgICAvLyBGSVhNRTogU2hvdWxkIHVzZSBMaXN0SGFzaFNldCB0byBrZWVw
IHRoZSBvcmRlciBvZiB0aGUgcGFyYW1ldGVycy4KICAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBT
dHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdGVyYXRvciA9IGV4dGVuc2lvblBhcmFtZXRlcnMuYmVn
aW4oKTsgaXRlcmF0b3IgIT0gZXh0ZW5zaW9uUGFyYW1ldGVycy5lbmQoKTsgKytpdGVyYXRvcikg
ewogICAgICAgICBtX2FjY2VwdGVkRXh0ZW5zaW9uc0J1aWxkZXIuYXBwZW5kKCI7ICIpOwotICAg
ICAgICBtX2FjY2VwdGVkRXh0ZW5zaW9uc0J1aWxkZXIuYXBwZW5kKGl0ZXJhdG9yLT5maXJzdCk7
Ci0gICAgICAgIGlmICghaXRlcmF0b3ItPnNlY29uZC5pc051bGwoKSkgeworICAgICAgICBtX2Fj
Y2VwdGVkRXh0ZW5zaW9uc0J1aWxkZXIuYXBwZW5kKGl0ZXJhdG9yLT5rZXkpOworICAgICAgICBp
ZiAoIWl0ZXJhdG9yLT52YWx1ZS5pc051bGwoKSkgewogICAgICAgICAgICAgbV9hY2NlcHRlZEV4
dGVuc2lvbnNCdWlsZGVyLmFwcGVuZCgiPSIpOwotICAgICAgICAgICAgbV9hY2NlcHRlZEV4dGVu
c2lvbnNCdWlsZGVyLmFwcGVuZChpdGVyYXRvci0+c2Vjb25kKTsKKyAgICAgICAgICAgIG1fYWNj
ZXB0ZWRFeHRlbnNpb25zQnVpbGRlci5hcHBlbmQoaXRlcmF0b3ItPnZhbHVlKTsKICAgICAgICAg
fQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhP
YmplY3RDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2Fj
aGUuY3BwCmluZGV4IDZjMDhiZTIxZjBlMzE2NzEyN2FiM2YyYjRiOTU3ZjliNGViY2Y4MjMuLjhl
MzJlYjUwMTAxMzNmOWVlODczZTc5NThjZTRiM2I2YzdiZWEwZWYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcApAQCAtOTQsNyArOTQsNyBAQCBB
WE9iamVjdENhY2hlOjp+QVhPYmplY3RDYWNoZSgpCiB7CiAgICAgSGFzaE1hcDxBWElELCBSZWZQ
dHI8QWNjZXNzaWJpbGl0eU9iamVjdD4gPjo6aXRlcmF0b3IgZW5kID0gbV9vYmplY3RzLmVuZCgp
OwogICAgIGZvciAoSGFzaE1hcDxBWElELCBSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4gPjo6
aXRlcmF0b3IgaXQgPSBtX29iamVjdHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAg
ICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iaiA9ICgqaXQpLnNlY29uZC5nZXQoKTsKKyAgICAg
ICAgQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqID0gKCppdCkudmFsdWUuZ2V0KCk7CiAgICAgICAg
IGRldGFjaFdyYXBwZXIob2JqKTsKICAgICAgICAgb2JqLT5kZXRhY2goKTsKICAgICAgICAgcmVt
b3ZlQVhJRChvYmopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVj
dC9ET01PYmplY3RDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0RP
TU9iamVjdENhY2hlLmNwcAppbmRleCAyZTdmMTA2ZTc5ZTMxYzczMTU0YWI5Y2ZhYTE5YTU4OWU5
ZGU3ZGQ1Li5kZDdkMDQ5NzE4YzgxMjJmMjRiMzhkYjg4M2U1YjZiNjRlMmVjMDY2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0RPTU9iamVjdENhY2hlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0RPTU9iamVjdENhY2hlLmNwcApA
QCAtNzQsNyArNzQsNyBAQCB2b2lkIERPTU9iamVjdENhY2hlOjpjbGVhckJ5RnJhbWUoV2ViQ29y
ZTo6RnJhbWUqIGZyYW1lKQogICAgIC8vIGl0ZXJhdGluZyB0aGUgY2FjaGUgaXRzZWxmLgogICAg
IERPTU9iamVjdE1hcDo6aXRlcmF0b3IgZW5kID0gZG9tT2JqZWN0cygpLmVuZCgpOwogICAgIGZv
ciAoRE9NT2JqZWN0TWFwOjppdGVyYXRvciBpdGVyID0gZG9tT2JqZWN0cygpLmJlZ2luKCk7IGl0
ZXIgIT0gZW5kOyArK2l0ZXIpIHsKLSAgICAgICAgRE9NT2JqZWN0Q2FjaGVEYXRhKiBkYXRhID0g
aXRlci0+c2Vjb25kOworICAgICAgICBET01PYmplY3RDYWNoZURhdGEqIGRhdGEgPSBpdGVyLT52
YWx1ZTsKICAgICAgICAgQVNTRVJUKGRhdGEpOwogICAgICAgICBpZiAoKCFmcmFtZSB8fCBkYXRh
LT5mcmFtZSA9PSBmcmFtZSkgJiYgZGF0YS0+dGltZXNSZXR1cm5lZCkKICAgICAgICAgICAgIHRv
VW5yZWYuYXBwZW5kKGRhdGEpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvRE9NT2JqZWN0SGFzaFRhYmxlTWFwLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9E
T01PYmplY3RIYXNoVGFibGVNYXAuaAppbmRleCA2NDgyOGQ2OTg4ZjdlNDNiM2U5YTQ2MzY5MDhj
ZDIxMjU0N2EyZmZjLi43NTNjMDRkMmZjNTc3MmUwOTU5ZGNlZjVhYzYxYmEzMGM5NmUxNzhmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01PYmplY3RIYXNoVGFibGVN
YXAuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01PYmplY3RIYXNoVGFibGVN
YXAuaApAQCAtMzksMTUgKzM5LDE1IEBAIHB1YmxpYzoKICAgICB+RE9NT2JqZWN0SGFzaFRhYmxl
TWFwKCkKICAgICB7CiAgICAgICAgIGZvciAoSGFzaE1hcDxjb25zdCBKU0M6Okhhc2hUYWJsZSos
IEpTQzo6SGFzaFRhYmxlPjo6aXRlcmF0b3IgaXRlciA9IG1fbWFwLmJlZ2luKCk7IGl0ZXIgIT0g
bV9tYXAuZW5kKCk7ICsraXRlcikKLSAgICAgICAgICAgIGl0ZXItPnNlY29uZC5kZWxldGVUYWJs
ZSgpOworICAgICAgICAgICAgaXRlci0+dmFsdWUuZGVsZXRlVGFibGUoKTsKICAgICB9CiAKICAg
ICBjb25zdCBKU0M6Okhhc2hUYWJsZSogZ2V0KGNvbnN0IEpTQzo6SGFzaFRhYmxlKiBzdGF0aWNU
YWJsZSkKICAgICB7CiAgICAgICAgIEhhc2hNYXA8Y29uc3QgSlNDOjpIYXNoVGFibGUqLCBKU0M6
Okhhc2hUYWJsZT46Oml0ZXJhdG9yIGl0ZXIgPSBtX21hcC5maW5kKHN0YXRpY1RhYmxlKTsKICAg
ICAgICAgaWYgKGl0ZXIgIT0gbV9tYXAuZW5kKCkpCi0gICAgICAgICAgICByZXR1cm4gJml0ZXIt
PnNlY29uZDsKLSAgICAgICAgcmV0dXJuICZtX21hcC5zZXQoc3RhdGljVGFibGUsIHN0YXRpY1Rh
YmxlLT5jb3B5KCkpLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgICAgICByZXR1cm4gJml0ZXIt
PnZhbHVlOworICAgICAgICByZXR1cm4gJm1fbWFwLnNldChzdGF0aWNUYWJsZSwgc3RhdGljVGFi
bGUtPmNvcHkoKSkuaXRlcmF0b3ItPnZhbHVlOwogICAgIH0KIAogcHJpdmF0ZToKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCmluZGV4IGRkNmNkZmFkYjkyMmY5
NjdkOGQ4NTNkMmU4MzYyNmI5YWQ4MmI5YmIuLjU2MGVlOGM2NjZkYzc2MTQxNmZhMTM0ZmI1ZGMw
NWYzOTVmNjQ4MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
QmluZGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5n
LmNwcApAQCAtMjU5LDcgKzI1OSw3IEBAIFN0cnVjdHVyZSogY2FjaGVET01TdHJ1Y3R1cmUoSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1CiB7CiAgICAg
SlNET01TdHJ1Y3R1cmVNYXAmIHN0cnVjdHVyZXMgPSBnbG9iYWxPYmplY3QtPnN0cnVjdHVyZXMo
KTsKICAgICBBU1NFUlQoIXN0cnVjdHVyZXMuY29udGFpbnMoY2xhc3NJbmZvKSk7Ci0gICAgcmV0
dXJuIHN0cnVjdHVyZXMuc2V0KGNsYXNzSW5mbywgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4oZ2xv
YmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKSkuaXRlcmF0
b3ItPnNlY29uZC5nZXQoKTsKKyAgICByZXR1cm4gc3RydWN0dXJlcy5zZXQoY2xhc3NJbmZvLCBX
cml0ZUJhcnJpZXI8U3RydWN0dXJlPihnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgZ2xvYmFs
T2JqZWN0LCBzdHJ1Y3R1cmUpKS5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NR2xvYmFsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xv
YmFsT2JqZWN0LmNwcAppbmRleCBlNGQxOWRmZWYyY2I5ZTdjMzdlM2Q5ODBlY2M3NTFhMzFlZjJm
MTlmLi5kNWE5NWIxOThjZTdhN2E0YTgxYmIyMzNkMDgzYTE0MDY5MTNhMTI2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwCkBAIC04OCwx
MSArODgsMTEgQEAgdm9pZCBKU0RPTUdsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogCiAgICAgSlNET01TdHJ1Y3R1cmVNYXA6Oml0
ZXJhdG9yIGVuZCA9IHRoaXNPYmplY3QtPnN0cnVjdHVyZXMoKS5lbmQoKTsKICAgICBmb3IgKEpT
RE9NU3RydWN0dXJlTWFwOjppdGVyYXRvciBpdCA9IHRoaXNPYmplY3QtPnN0cnVjdHVyZXMoKS5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kKCZpdC0+c2Vj
b25kKTsKKyAgICAgICAgdmlzaXRvci5hcHBlbmQoJml0LT52YWx1ZSk7CiAKICAgICBKU0RPTUNv
bnN0cnVjdG9yTWFwOjppdGVyYXRvciBlbmQyID0gdGhpc09iamVjdC0+Y29uc3RydWN0b3JzKCku
ZW5kKCk7CiAgICAgZm9yIChKU0RPTUNvbnN0cnVjdG9yTWFwOjppdGVyYXRvciBpdDIgPSB0aGlz
T2JqZWN0LT5jb25zdHJ1Y3RvcnMoKS5iZWdpbigpOyBpdDIgIT0gZW5kMjsgKytpdDIpCi0gICAg
ICAgIHZpc2l0b3IuYXBwZW5kKCZpdDItPnNlY29uZCk7CisgICAgICAgIHZpc2l0b3IuYXBwZW5k
KCZpdDItPnZhbHVlKTsKIH0KIAogdm9pZCBKU0RPTUdsb2JhbE9iamVjdDo6c2V0Q3VycmVudEV2
ZW50KEV2ZW50KiBjdXJyZW50RXZlbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01HbG9iYWxPYmplY3QuaAppbmRleCA0MjI1OGIwYjIxMjVhODNlN2FhODlkNWM3OTMzYzEy
OGNkMzA5YWI4Li45MzQxZGQwYWU2NWE4Njg3Yjg2ZmYxMTQ2MzQ2M2MxZWRlNDBjNDJhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmgKQEAgLTky
LDcgKzkyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBKU0M6OkpTT2JqZWN0KiBj
b25zdHJ1Y3RvciA9IENvbnN0cnVjdG9yQ2xhc3M6OmNyZWF0ZShleGVjLCBDb25zdHJ1Y3RvckNs
YXNzOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBjb25zdF9jYXN0PEpTRE9N
R2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5
cGUoKSksIGNvbnN0X2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKICAg
ICAgICAgQVNTRVJUKCFjb25zdF9jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0
KS0+Y29uc3RydWN0b3JzKCkuY29udGFpbnMoJkNvbnN0cnVjdG9yQ2xhc3M6OnNfaW5mbykpOwog
ICAgICAgICBKU0M6OldyaXRlQmFycmllcjxKU0M6OkpTT2JqZWN0PiB0ZW1wOwotICAgICAgICBj
b25zdF9jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KS0+Y29uc3RydWN0b3Jz
KCkuYWRkKCZDb25zdHJ1Y3RvckNsYXNzOjpzX2luZm8sIHRlbXApLml0ZXJhdG9yLT5zZWNvbmQu
c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LCBjb25zdHJ1Y3Rvcik7CisgICAg
ICAgIGNvbnN0X2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpLT5jb25zdHJ1
Y3RvcnMoKS5hZGQoJkNvbnN0cnVjdG9yQ2xhc3M6OnNfaW5mbywgdGVtcCkuaXRlcmF0b3ItPnZh
bHVlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdCwgY29uc3RydWN0b3IpOwog
ICAgICAgICByZXR1cm4gY29uc3RydWN0b3I7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvUGFnZVNjcmlwdERlYnVnU2VydmVyLmNwcAppbmRleCBmZjBhZWVm
YjUwYTYwOGM5MjEwMzNkOTg3OTMzY2RjNjVmY2ZkMmM5Li5lZDc0M2NjOWU5ZWM1MWMwZDUzMTYx
MDk0ZjMzZDljOTJhZGIxMGQ2IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHAKQEAgLTgyLDcgKzgyLDcgQEAgdm9pZCBQYWdl
U2NyaXB0RGVidWdTZXJ2ZXI6OmFkZExpc3RlbmVyKFNjcmlwdERlYnVnTGlzdGVuZXIqIGxpc3Rl
bmVyLCBQYWdlKiBwYWcKICAgICBBU1NFUlRfQVJHKGxpc3RlbmVyLCBsaXN0ZW5lcik7CiAgICAg
QVNTRVJUX0FSRyhwYWdlLCBwYWdlKTsKIAotICAgIE93blB0cjxMaXN0ZW5lclNldD4mIGxpc3Rl
bmVycyA9IG1fcGFnZUxpc3RlbmVyc01hcC5hZGQocGFnZSwgbnVsbHB0cikuaXRlcmF0b3ItPnNl
Y29uZDsKKyAgICBPd25QdHI8TGlzdGVuZXJTZXQ+JiBsaXN0ZW5lcnMgPSBtX3BhZ2VMaXN0ZW5l
cnNNYXAuYWRkKHBhZ2UsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoIWxpc3Rl
bmVycykKICAgICAgICAgbGlzdGVuZXJzID0gYWRvcHRQdHIobmV3IExpc3RlbmVyU2V0KTsKICAg
ICBsaXN0ZW5lcnMtPmFkZChsaXN0ZW5lcik7CkBAIC0xMDAsNyArMTAwLDcgQEAgdm9pZCBQYWdl
U2NyaXB0RGVidWdTZXJ2ZXI6OnJlbW92ZUxpc3RlbmVyKFNjcmlwdERlYnVnTGlzdGVuZXIqIGxp
c3RlbmVyLCBQYWdlKgogICAgIGlmIChpdCA9PSBtX3BhZ2VMaXN0ZW5lcnNNYXAuZW5kKCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIExpc3RlbmVyU2V0KiBsaXN0ZW5lcnMgPSBpdC0+c2Vjb25k
LmdldCgpOworICAgIExpc3RlbmVyU2V0KiBsaXN0ZW5lcnMgPSBpdC0+dmFsdWUuZ2V0KCk7CiAg
ICAgbGlzdGVuZXJzLT5yZW1vdmUobGlzdGVuZXIpOwogICAgIGlmIChsaXN0ZW5lcnMtPmlzRW1w
dHkoKSkgewogICAgICAgICBtX3BhZ2VMaXN0ZW5lcnNNYXAucmVtb3ZlKGl0KTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENhY2hlZEZyYW1lRGF0YS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDYWNoZWRGcmFtZURhdGEuY3BwCmlu
ZGV4IGRlZjc5Y2YyYzE2YmE3NmU1MWJkOGYwMWZmMDcwMDlmZWQyMGNjNmUuLmM2MjQ4N2U4MDVm
ZGNjMWI3MDFjNWJiZjVkOTY5NGNiZmJkNzQ0ZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1NjcmlwdENhY2hlZEZyYW1lRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmNwcApAQCAtNTMsOCArNTMsOCBA
QCBTY3JpcHRDYWNoZWRGcmFtZURhdGE6OlNjcmlwdENhY2hlZEZyYW1lRGF0YShGcmFtZSogZnJh
bWUpCiAKICAgICBTY3JpcHRDb250cm9sbGVyOjpTaGVsbE1hcDo6aXRlcmF0b3Igd2luZG93U2hl
bGxzRW5kID0gd2luZG93U2hlbGxzLmVuZCgpOwogICAgIGZvciAoU2NyaXB0Q29udHJvbGxlcjo6
U2hlbGxNYXA6Oml0ZXJhdG9yIGl0ZXIgPSB3aW5kb3dTaGVsbHMuYmVnaW4oKTsgaXRlciAhPSB3
aW5kb3dTaGVsbHNFbmQ7ICsraXRlcikgewotICAgICAgICBKU0RPTVdpbmRvdyogd2luZG93ID0g
aXRlci0+c2Vjb25kLT53aW5kb3coKTsKLSAgICAgICAgbV93aW5kb3dzLmFkZChpdGVyLT5maXJz
dC5nZXQoKSwgU3Ryb25nPEpTRE9NV2luZG93Pih3aW5kb3ctPmdsb2JhbERhdGEoKSwgd2luZG93
KSk7CisgICAgICAgIEpTRE9NV2luZG93KiB3aW5kb3cgPSBpdGVyLT52YWx1ZS0+d2luZG93KCk7
CisgICAgICAgIG1fd2luZG93cy5hZGQoaXRlci0+a2V5LmdldCgpLCBTdHJvbmc8SlNET01XaW5k
b3c+KHdpbmRvdy0+Z2xvYmFsRGF0YSgpLCB3aW5kb3cpKTsKICAgICB9CiAKICAgICBzY3JpcHRD
b250cm9sbGVyLT5hdHRhY2hEZWJ1Z2dlcigwKTsKQEAgLTc0LDggKzc0LDggQEAgdm9pZCBTY3Jp
cHRDYWNoZWRGcmFtZURhdGE6OnJlc3RvcmUoRnJhbWUqIGZyYW1lKQogCiAgICAgU2NyaXB0Q29u
dHJvbGxlcjo6U2hlbGxNYXA6Oml0ZXJhdG9yIHdpbmRvd1NoZWxsc0VuZCA9IHdpbmRvd1NoZWxs
cy5lbmQoKTsKICAgICBmb3IgKFNjcmlwdENvbnRyb2xsZXI6OlNoZWxsTWFwOjppdGVyYXRvciBp
dGVyID0gd2luZG93U2hlbGxzLmJlZ2luKCk7IGl0ZXIgIT0gd2luZG93U2hlbGxzRW5kOyArK2l0
ZXIpIHsKLSAgICAgICAgRE9NV3JhcHBlcldvcmxkKiB3b3JsZCA9IGl0ZXItPmZpcnN0LmdldCgp
OwotICAgICAgICBKU0RPTVdpbmRvd1NoZWxsKiB3aW5kb3dTaGVsbCA9IGl0ZXItPnNlY29uZC5n
ZXQoKTsKKyAgICAgICAgRE9NV3JhcHBlcldvcmxkKiB3b3JsZCA9IGl0ZXItPmtleS5nZXQoKTsK
KyAgICAgICAgSlNET01XaW5kb3dTaGVsbCogd2luZG93U2hlbGwgPSBpdGVyLT52YWx1ZS5nZXQo
KTsKIAogICAgICAgICBpZiAoSlNET01XaW5kb3cqIHdpbmRvdyA9IG1fd2luZG93cy5nZXQod29y
bGQpLmdldCgpKQogICAgICAgICAgICAgd2luZG93U2hlbGwtPnNldFdpbmRvdyh3aW5kb3ctPmds
b2JhbERhdGEoKSwgd2luZG93KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2Ny
aXB0Q29udHJvbGxlci5jcHAKaW5kZXggNjg4YzEyMmZjMjViMjJjZjNkMmQxNjI5ZjVkN2JjNjNm
NWM4NTNkOC4uOTU5ZjhhMmVmZTRlMmUzZmRlMGY3Y2QyNmZjYmM0MDMwNTEwYWNlMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAKQEAgLTg5
LDcgKzg5LDcgQEAgU2NyaXB0Q29udHJvbGxlcjo6flNjcmlwdENvbnRyb2xsZXIoKQogICAgIC8v
IEl0J3MgbGlrZWx5IHRoYXQgZGVzdHJveWluZyBtX3dpbmRvd1NoZWxscyB3aWxsIGNyZWF0ZSBh
IGxvdCBvZiBnYXJiYWdlLgogICAgIGlmICghbV93aW5kb3dTaGVsbHMuaXNFbXB0eSgpKSB7CiAg
ICAgICAgIHdoaWxlICghbV93aW5kb3dTaGVsbHMuaXNFbXB0eSgpKQotICAgICAgICAgICAgZGVz
dHJveVdpbmRvd1NoZWxsKG1fd2luZG93U2hlbGxzLmJlZ2luKCktPmZpcnN0LmdldCgpKTsKKyAg
ICAgICAgICAgIGRlc3Ryb3lXaW5kb3dTaGVsbChtX3dpbmRvd1NoZWxscy5iZWdpbigpLT5rZXku
Z2V0KCkpOwogICAgICAgICBnY0NvbnRyb2xsZXIoKS5nYXJiYWdlQ29sbGVjdFNvb24oKTsKICAg
ICB9CiB9CkBAIC0xNzYsNyArMTc2LDcgQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpjbGVhcldp
bmRvd1NoZWxsKERPTVdpbmRvdyogbmV3RE9NV2luZG93LCBib29sIGdvaW5nSW50b1AKICAgICBK
U0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsK
IAogICAgIGZvciAoU2hlbGxNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3dpbmRvd1NoZWxscy5iZWdp
bigpOyBpdGVyICE9IG1fd2luZG93U2hlbGxzLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgSlNE
T01XaW5kb3dTaGVsbCogd2luZG93U2hlbGwgPSBpdGVyLT5zZWNvbmQuZ2V0KCk7CisgICAgICAg
IEpTRE9NV2luZG93U2hlbGwqIHdpbmRvd1NoZWxsID0gaXRlci0+dmFsdWUuZ2V0KCk7CiAKICAg
ICAgICAgaWYgKHdpbmRvd1NoZWxsLT53aW5kb3coKS0+aW1wbCgpID09IG5ld0RPTVdpbmRvdykK
ICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMjY5LDcgKzI2OSw3IEBAIGJvb2wgU2NyaXB0Q29u
dHJvbGxlcjo6Y2FuQWNjZXNzRnJvbUN1cnJlbnRPcmlnaW4oRnJhbWUgKmZyYW1lKQogdm9pZCBT
Y3JpcHRDb250cm9sbGVyOjphdHRhY2hEZWJ1Z2dlcihKU0M6OkRlYnVnZ2VyKiBkZWJ1Z2dlcikK
IHsKICAgICBmb3IgKFNoZWxsTWFwOjppdGVyYXRvciBpdGVyID0gbV93aW5kb3dTaGVsbHMuYmVn
aW4oKTsgaXRlciAhPSBtX3dpbmRvd1NoZWxscy5lbmQoKTsgKytpdGVyKQotICAgICAgICBhdHRh
Y2hEZWJ1Z2dlcihpdGVyLT5zZWNvbmQuZ2V0KCksIGRlYnVnZ2VyKTsKKyAgICAgICAgYXR0YWNo
RGVidWdnZXIoaXRlci0+dmFsdWUuZ2V0KCksIGRlYnVnZ2VyKTsKIH0KIAogdm9pZCBTY3JpcHRD
b250cm9sbGVyOjphdHRhY2hEZWJ1Z2dlcihKU0RPTVdpbmRvd1NoZWxsKiBzaGVsbCwgSlNDOjpE
ZWJ1Z2dlciogZGVidWdnZXIpCkBAIC0yODcsOCArMjg3LDggQEAgdm9pZCBTY3JpcHRDb250cm9s
bGVyOjphdHRhY2hEZWJ1Z2dlcihKU0RPTVdpbmRvd1NoZWxsKiBzaGVsbCwgSlNDOjpEZWJ1Z2dl
ciogZGUKIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6dXBkYXRlRG9jdW1lbnQoKQogewogICAgIGZv
ciAoU2hlbGxNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3dpbmRvd1NoZWxscy5iZWdpbigpOyBpdGVy
ICE9IG1fd2luZG93U2hlbGxzLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgSlNMb2NrSG9sZGVy
IGxvY2soaXRlci0+Zmlyc3QtPmdsb2JhbERhdGEoKSk7Ci0gICAgICAgIGl0ZXItPnNlY29uZC0+
d2luZG93KCktPnVwZGF0ZURvY3VtZW50KCk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGl0
ZXItPmtleS0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgaXRlci0+dmFsdWUtPndpbmRvdygpLT51
cGRhdGVEb2N1bWVudCgpOwogICAgIH0KIH0KIApAQCAtMzI1LDcgKzMyNSw3IEBAIFBhc3NSZWZQ
dHI8QmluZGluZ3M6OlJvb3RPYmplY3Q+IFNjcmlwdENvbnRyb2xsZXI6OmNyZWF0ZVJvb3RPYmpl
Y3Qodm9pZCogbmF0aXZlCiB7CiAgICAgUm9vdE9iamVjdE1hcDo6aXRlcmF0b3IgaXQgPSBtX3Jv
b3RPYmplY3RzLmZpbmQobmF0aXZlSGFuZGxlKTsKICAgICBpZiAoaXQgIT0gbV9yb290T2JqZWN0
cy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBpdC0+
dmFsdWU7CiAKICAgICBSZWZQdHI8QmluZGluZ3M6OlJvb3RPYmplY3Q+IHJvb3RPYmplY3QgPSBC
aW5kaW5nczo6Um9vdE9iamVjdDo6Y3JlYXRlKG5hdGl2ZUhhbmRsZSwgZ2xvYmFsT2JqZWN0KHBs
dWdpbldvcmxkKCkpKTsKIApAQCAtMzQxLDggKzM0MSw4IEBAIHZvaWQgU2NyaXB0Q29udHJvbGxl
cjo6c2V0Q2FwdHVyZUNhbGxTdGFja0ZvclVuY2F1Z2h0RXhjZXB0aW9ucyhib29sKQogdm9pZCBT
Y3JpcHRDb250cm9sbGVyOjpjb2xsZWN0SXNvbGF0ZWRDb250ZXh0cyhWZWN0b3I8c3RkOjpwYWly
PEpTQzo6RXhlY1N0YXRlKiwgU2VjdXJpdHlPcmlnaW4qPiA+JiByZXN1bHQpCiB7CiAgICAgZm9y
IChTaGVsbE1hcDo6aXRlcmF0b3IgaXRlciA9IG1fd2luZG93U2hlbGxzLmJlZ2luKCk7IGl0ZXIg
IT0gbV93aW5kb3dTaGVsbHMuZW5kKCk7ICsraXRlcikgewotICAgICAgICBKU0M6OkV4ZWNTdGF0
ZSogZXhlYyA9IGl0ZXItPnNlY29uZC0+d2luZG93KCktPmdsb2JhbEV4ZWMoKTsKLSAgICAgICAg
U2VjdXJpdHlPcmlnaW4qIG9yaWdpbiA9IGl0ZXItPnNlY29uZC0+d2luZG93KCktPmltcGwoKS0+
ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKTsKKyAgICAgICAgSlNDOjpFeGVjU3RhdGUqIGV4
ZWMgPSBpdGVyLT52YWx1ZS0+d2luZG93KCktPmdsb2JhbEV4ZWMoKTsKKyAgICAgICAgU2VjdXJp
dHlPcmlnaW4qIG9yaWdpbiA9IGl0ZXItPnZhbHVlLT53aW5kb3coKS0+aW1wbCgpLT5kb2N1bWVu
dCgpLT5zZWN1cml0eU9yaWdpbigpOwogICAgICAgICByZXN1bHQuYXBwZW5kKHN0ZDo6cGFpcjxT
Y3JpcHRTdGF0ZSosIFNlY3VyaXR5T3JpZ2luKj4oZXhlYywgb3JpZ2luKSk7CiAgICAgfQogfQpA
QCAtNDMwLDcgKzQzMCw3IEBAIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6Y2xlYW51cFNjcmlwdE9i
amVjdHNGb3JQbHVnaW4odm9pZCogbmF0aXZlSGFuZGxlKQogICAgIGlmIChpdCA9PSBtX3Jvb3RP
YmplY3RzLmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpdC0+c2Vjb25kLT5pbnZhbGlk
YXRlKCk7CisgICAgaXQtPnZhbHVlLT5pbnZhbGlkYXRlKCk7CiAgICAgbV9yb290T2JqZWN0cy5y
ZW1vdmUoaXQpOwogfQogCkBAIC00NDAsNyArNDQwLDcgQEAgdm9pZCBTY3JpcHRDb250cm9sbGVy
OjpjbGVhclNjcmlwdE9iamVjdHMoKQogCiAgICAgUm9vdE9iamVjdE1hcDo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gbV9yb290T2JqZWN0cy5lbmQoKTsKICAgICBmb3IgKFJvb3RPYmplY3RNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbV9yb290T2JqZWN0cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
Ci0gICAgICAgIGl0LT5zZWNvbmQtPmludmFsaWRhdGUoKTsKKyAgICAgICAgaXQtPnZhbHVlLT5p
bnZhbGlkYXRlKCk7CiAKICAgICBtX3Jvb3RPYmplY3RzLmNsZWFyKCk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuaAppbmRleCBiY2VkM2Y4MzU4ZTJi
YjA1YmRiNmQwZDVjNTQ3MWEwYTQxYzA2OTdjLi5mYWQ0ZDQ0M2E3YzE3ZTJlZDgwYjM5OTVhZTY2
NmEzOWQyMTk2NThhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3Jp
cHRDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29u
dHJvbGxlci5oCkBAIC03NCwxMiArNzQsMTIgQEAgcHVibGljOgogICAgIEpTRE9NV2luZG93U2hl
bGwqIHdpbmRvd1NoZWxsKERPTVdyYXBwZXJXb3JsZCogd29ybGQpCiAgICAgewogICAgICAgICBT
aGVsbE1hcDo6aXRlcmF0b3IgaXRlciA9IG1fd2luZG93U2hlbGxzLmZpbmQod29ybGQpOwotICAg
ICAgICByZXR1cm4gKGl0ZXIgIT0gbV93aW5kb3dTaGVsbHMuZW5kKCkpID8gaXRlci0+c2Vjb25k
LmdldCgpIDogaW5pdFNjcmlwdCh3b3JsZCk7CisgICAgICAgIHJldHVybiAoaXRlciAhPSBtX3dp
bmRvd1NoZWxscy5lbmQoKSkgPyBpdGVyLT52YWx1ZS5nZXQoKSA6IGluaXRTY3JpcHQod29ybGQp
OwogICAgIH0KICAgICBKU0RPTVdpbmRvd1NoZWxsKiBleGlzdGluZ1dpbmRvd1NoZWxsKERPTVdy
YXBwZXJXb3JsZCogd29ybGQpIGNvbnN0CiAgICAgewogICAgICAgICBTaGVsbE1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXRlciA9IG1fd2luZG93U2hlbGxzLmZpbmQod29ybGQpOwotICAgICAgICByZXR1
cm4gKGl0ZXIgIT0gbV93aW5kb3dTaGVsbHMuZW5kKCkpID8gaXRlci0+c2Vjb25kLmdldCgpIDog
MDsKKyAgICAgICAgcmV0dXJuIChpdGVyICE9IG1fd2luZG93U2hlbGxzLmVuZCgpKSA/IGl0ZXIt
PnZhbHVlLmdldCgpIDogMDsKICAgICB9CiAgICAgSlNET01XaW5kb3cqIGdsb2JhbE9iamVjdChE
T01XcmFwcGVyV29ybGQqIHdvcmxkKQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmNwcAppbmRleCA5YjJiMDkzNmI4M2ZmMjQwYmNlNTYx
NjY1YjBkYmQ0MWQ1OTJkYjlmLi5jOGEyNjYwNWRlMDNkOTA5Mzg4NmJmNmQ2YjIxOGE2MzdhZDVj
YjRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1Nl
cnZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2
ZXIuY3BwCkBAIC03NSwxMSArNzUsMTEgQEAgU3RyaW5nIFNjcmlwdERlYnVnU2VydmVyOjpzZXRC
cmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIGNvbnN0IFNjcmlwdEJyZWEKICAgICBT
b3VyY2VJZFRvQnJlYWtwb2ludHNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zb3VyY2VJZFRvQnJlYWtw
b2ludHMuZmluZChzb3VyY2VJRFZhbHVlKTsKICAgICBpZiAoaXQgPT0gbV9zb3VyY2VJZFRvQnJl
YWtwb2ludHMuZW5kKCkpCiAgICAgICAgIGl0ID0gbV9zb3VyY2VJZFRvQnJlYWtwb2ludHMuc2V0
KHNvdXJjZUlEVmFsdWUsIExpbmVUb0JyZWFrcG9pbnRNYXAoKSkuaXRlcmF0b3I7Ci0gICAgTGlu
ZVRvQnJlYWtwb2ludE1hcDo6aXRlcmF0b3IgYnJlYWtzSXQgPSBpdC0+c2Vjb25kLmZpbmQoc2Ny
aXB0QnJlYWtwb2ludC5saW5lTnVtYmVyICsgMSk7Ci0gICAgaWYgKGJyZWFrc0l0ID09IGl0LT5z
ZWNvbmQuZW5kKCkpCi0gICAgICAgIGJyZWFrc0l0ID0gaXQtPnNlY29uZC5zZXQoc2NyaXB0QnJl
YWtwb2ludC5saW5lTnVtYmVyICsgMSwgQnJlYWtwb2ludHNJbkxpbmUoKSkuaXRlcmF0b3I7Cisg
ICAgTGluZVRvQnJlYWtwb2ludE1hcDo6aXRlcmF0b3IgYnJlYWtzSXQgPSBpdC0+dmFsdWUuZmlu
ZChzY3JpcHRCcmVha3BvaW50LmxpbmVOdW1iZXIgKyAxKTsKKyAgICBpZiAoYnJlYWtzSXQgPT0g
aXQtPnZhbHVlLmVuZCgpKQorICAgICAgICBicmVha3NJdCA9IGl0LT52YWx1ZS5zZXQoc2NyaXB0
QnJlYWtwb2ludC5saW5lTnVtYmVyICsgMSwgQnJlYWtwb2ludHNJbkxpbmUoKSkuaXRlcmF0b3I7
CiAKLSAgICBCcmVha3BvaW50c0luTGluZSYgYnJlYWtzVmVjdG9yID0gYnJlYWtzSXQtPnNlY29u
ZDsKKyAgICBCcmVha3BvaW50c0luTGluZSYgYnJlYWtzVmVjdG9yID0gYnJlYWtzSXQtPnZhbHVl
OwogICAgIHVuc2lnbmVkIGJyZWFrc0NvdW50ID0gYnJlYWtzVmVjdG9yLnNpemUoKTsKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnJlYWtzQ291bnQ7IGkrKykgewogICAgICAgICBpZiAo
YnJlYWtzVmVjdG9yLmF0KGkpLmNvbHVtbk51bWJlciA9PSBzY3JpcHRCcmVha3BvaW50LmNvbHVt
bk51bWJlcikKQEAgLTExMiwxMSArMTEyLDExIEBAIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnJl
bW92ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBicmVha3BvaW50SWQpCiAgICAgU291cmNlSWRU
b0JyZWFrcG9pbnRzTWFwOjppdGVyYXRvciBpdCA9IG1fc291cmNlSWRUb0JyZWFrcG9pbnRzLmZp
bmQoc291cmNlSURWYWx1ZSk7CiAgICAgaWYgKGl0ID09IG1fc291cmNlSWRUb0JyZWFrcG9pbnRz
LmVuZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgTGluZVRvQnJlYWtwb2ludE1hcDo6aXRlcmF0
b3IgYnJlYWtzSXQgPSBpdC0+c2Vjb25kLmZpbmQobGluZU51bWJlciArIDEpOwotICAgIGlmIChi
cmVha3NJdCA9PSBpdC0+c2Vjb25kLmVuZCgpKQorICAgIExpbmVUb0JyZWFrcG9pbnRNYXA6Oml0
ZXJhdG9yIGJyZWFrc0l0ID0gaXQtPnZhbHVlLmZpbmQobGluZU51bWJlciArIDEpOworICAgIGlm
IChicmVha3NJdCA9PSBpdC0+dmFsdWUuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEJy
ZWFrcG9pbnRzSW5MaW5lJiBicmVha3NWZWN0b3IgPSBicmVha3NJdC0+c2Vjb25kOworICAgIEJy
ZWFrcG9pbnRzSW5MaW5lJiBicmVha3NWZWN0b3IgPSBicmVha3NJdC0+dmFsdWU7CiAgICAgdW5z
aWduZWQgYnJlYWtzQ291bnQgPSBicmVha3NWZWN0b3Iuc2l6ZSgpOwogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBicmVha3NDb3VudDsgaSsrKSB7CiAgICAgICAgIGlmIChicmVha3NWZWN0
b3IuYXQoaSkuY29sdW1uTnVtYmVyID09IHN0YXRpY19jYXN0PGludD4oY29sdW1uTnVtYmVyKSkg
ewpAQCAtMTc4LDEyICsxNzgsMTIgQEAgYm9vbCBTY3JpcHREZWJ1Z1NlcnZlcjo6aGFzQnJlYWtw
b2ludChpbnRwdHJfdCBzb3VyY2VJRCwgY29uc3QgVGV4dFBvc2l0aW9uJiBwb3MKICAgICBpZiAo
bGluZU51bWJlciA8IDAgfHwgY29sdW1uTnVtYmVyIDwgMCkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgTGluZVRvQnJlYWtwb2ludE1hcDo6Y29uc3RfaXRlcmF0b3IgYnJlYWtzSXQgPSBp
dC0+c2Vjb25kLmZpbmQobGluZU51bWJlciArIDEpOwotICAgIGlmIChicmVha3NJdCA9PSBpdC0+
c2Vjb25kLmVuZCgpKQorICAgIExpbmVUb0JyZWFrcG9pbnRNYXA6OmNvbnN0X2l0ZXJhdG9yIGJy
ZWFrc0l0ID0gaXQtPnZhbHVlLmZpbmQobGluZU51bWJlciArIDEpOworICAgIGlmIChicmVha3NJ
dCA9PSBpdC0+dmFsdWUuZW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGJvb2wg
aGl0ID0gZmFsc2U7Ci0gICAgY29uc3QgQnJlYWtwb2ludHNJbkxpbmUmIGJyZWFrc1ZlY3RvciA9
IGJyZWFrc0l0LT5zZWNvbmQ7CisgICAgY29uc3QgQnJlYWtwb2ludHNJbkxpbmUmIGJyZWFrc1Zl
Y3RvciA9IGJyZWFrc0l0LT52YWx1ZTsKICAgICB1bnNpZ25lZCBicmVha3NDb3VudCA9IGJyZWFr
c1ZlY3Rvci5zaXplKCk7CiAgICAgdW5zaWduZWQgaTsKICAgICBmb3IgKGkgPSAwOyBpIDwgYnJl
YWtzQ291bnQ7IGkrKykgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nl
cmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKaW5kZXggZTY2M2MxYTUzZmFhNjU5ZTA3ZmVmYTc4ZWJl
OTA5YjkxZTYwODQ0NS4uNTIwODE0ZWEzMzgzYmI5NzAzZDBkYjBkMzk2ZGM3NGY3MDJmMmY4MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZh
bHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0
VmFsdWUuY3BwCkBAIC00MjUsOCArNDI1LDggQEAgcHJpdmF0ZToKICAgICAgICAgLy8gSGFuZGxl
IGR1cGxpY2F0ZSByZWZlcmVuY2VzCiAgICAgICAgIGlmIChmb3VuZCAhPSBtX29iamVjdFBvb2wu
ZW5kKCkpIHsKICAgICAgICAgICAgIHdyaXRlKE9iamVjdFJlZmVyZW5jZVRhZyk7Ci0gICAgICAg
ICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50MzJfdD4oZm91bmQtPnNlY29uZCkgPCBtX29iamVj
dFBvb2wuc2l6ZSgpKTsKLSAgICAgICAgICAgIHdyaXRlT2JqZWN0SW5kZXgoZm91bmQtPnNlY29u
ZCk7CisgICAgICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50MzJfdD4oZm91bmQtPnZhbHVl
KSA8IG1fb2JqZWN0UG9vbC5zaXplKCkpOworICAgICAgICAgICAgd3JpdGVPYmplY3RJbmRleChm
b3VuZC0+dmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KIApAQCAt
NjY3LDcgKzY2Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgT2JqZWN0UG9vbDo6aXRl
cmF0b3IgaW5kZXggPSBtX3RyYW5zZmVycmVkTWVzc2FnZVBvcnRzLmZpbmQob2JqKTsKICAgICAg
ICAgICAgICAgICBpZiAoaW5kZXggIT0gbV90cmFuc2ZlcnJlZE1lc3NhZ2VQb3J0cy5lbmQoKSkg
ewogICAgICAgICAgICAgICAgICAgICB3cml0ZShNZXNzYWdlUG9ydFJlZmVyZW5jZVRhZyk7Ci0g
ICAgICAgICAgICAgICAgICAgIHdyaXRlKGluZGV4LT5zZWNvbmQpOworICAgICAgICAgICAgICAg
ICAgICB3cml0ZShpbmRleC0+dmFsdWUpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgLy8gTWVzc2FnZVBvcnQgb2Jq
ZWN0IGNvdWxkIG5vdCBiZSBmb3VuZCBpbiB0cmFuc2ZlcnJlZCBtZXNzYWdlIHBvcnRzCkBAIC02
ODMsNyArNjgzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBPYmplY3RQb29sOjppdGVy
YXRvciBpbmRleCA9IG1fdHJhbnNmZXJyZWRBcnJheUJ1ZmZlcnMuZmluZChvYmopOwogICAgICAg
ICAgICAgICAgIGlmIChpbmRleCAhPSBtX3RyYW5zZmVycmVkQXJyYXlCdWZmZXJzLmVuZCgpKSB7
CiAgICAgICAgICAgICAgICAgICAgIHdyaXRlKEFycmF5QnVmZmVyVHJhbnNmZXJUYWcpOwotICAg
ICAgICAgICAgICAgICAgICB3cml0ZShpbmRleC0+c2Vjb25kKTsKKyAgICAgICAgICAgICAgICAg
ICAgd3JpdGUoaW5kZXgtPnZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmICghc3RhcnRPYmplY3RJbnRl
cm5hbChvYmopKSAvLyBoYW5kbGUgZHVwbGljYXRlcwpAQCAtNzgwLDcgKzc4MCw3IEBAIHByaXZh
dGU6CiAgICAgICAgIFN0cmluZ0NvbnN0YW50UG9vbDo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IG1f
Y29uc3RhbnRQb29sLmFkZChzdHIuaW1wbCgpLCBtX2NvbnN0YW50UG9vbC5zaXplKCkpOwogICAg
ICAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5KSB7CiAgICAgICAgICAgICB3cml0ZShTdHJp
bmdQb29sVGFnKTsKLSAgICAgICAgICAgIHdyaXRlU3RyaW5nSW5kZXgoYWRkUmVzdWx0Lml0ZXJh
dG9yLT5zZWNvbmQpOworICAgICAgICAgICAgd3JpdGVTdHJpbmdJbmRleChhZGRSZXN1bHQuaXRl
cmF0b3ItPnZhbHVlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbSBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCmluZGV4
IDMwNjY1OTYzYTZkZTBmMzI4MGJlMmNhZjBhMGE1NmQ2OGVjNjFhNzQuLjI2MWE4YjA3MWQ3Zjc2
NTFiOTBlMDFiODYwZDBkYjdkODUwOThkZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCkBAIC0zMDAwLDcgKzMwMDAsNyBAQCB2
ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gJHtjbGFzc05hbWV9OjpHZXRSYXdU
ZW1wbGF0ZSgpCiAgICAgVjhQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4UGVySXNvbGF0ZURhdGE6
OmN1cnJlbnQoKTsKICAgICBWOFBlcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3Ig
cmVzdWx0ID0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVz
dWx0ICE9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1
bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFu
ZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVt
cGxhdGU+IHRlbXBsID0gY3JlYXRlUmF3VGVtcGxhdGUoKTsKQEAgLTMwMTMsNyArMzAxMyw3IEBA
IHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiAke2NsYXNzTmFtZX06OkdldFRl
bXBsYXRlKCkKICAgICBWOFBlcklzb2xhdGVEYXRhKiBkYXRhID0gVjhQZXJJc29sYXRlRGF0YTo6
Y3VycmVudCgpOwogICAgIFY4UGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciBy
ZXN1bHQgPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwogICAgIGlmIChyZXN1bHQg
IT0gZGF0YS0+dGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vj
b25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVTY29w
ZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4g
dGVtcGwgPQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Y4L1Y4RmxvYXQ2NEFycmF5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOEZsb2F0NjRBcnJheS5jcHAKaW5kZXggMWEyN2E5ZGI4ODEyYzFhZjY0YTRhMmQx
OTk1NTY2ZTE0YzljNjUzYS4uZGNmMzU5MGQ4NGJkNDI2MmY4Y2EyZGNlMmYwNWQ2YzcyYzkxNjkw
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4
RmxvYXQ2NEFycmF5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVjgvVjhGbG9hdDY0QXJyYXkuY3BwCkBAIC0xMTgsNyArMTE4LDcgQEAgdjg6OlBlcnNpc3Rl
bnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4RmxvYXQ2NEFycmF5OjpHZXRSYXdUZW1wbGF0ZSgp
CiAgICAgVjhQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4UGVySXNvbGF0ZURhdGE6OmN1cnJlbnQo
KTsKICAgICBWOFBlcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0g
ZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRh
dGEtPnJhd1RlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29u
ZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUg
aGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRl
bXBsID0gY3JlYXRlUmF3VGVtcGxhdGUoKTsKQEAgLTEzMSw3ICsxMzEsNyBAQCB2ODo6UGVyc2lz
dGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhGbG9hdDY0QXJyYXk6OkdldFRlbXBsYXRlKCkK
ICAgICBWOFBlcklzb2xhdGVEYXRhKiBkYXRhID0gVjhQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgp
OwogICAgIFY4UGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBk
YXRhLT50ZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+
dGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAg
ICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVT
Y29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVz
dEFjdGl2ZURPTU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVjgvVjhUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcAppbmRleCA1MGUwMDgyZGRmMzQ0N2M2ZTI3
OTZhMThkZTExYmZkMTBkNzY4YTkzLi4zZTJiMWE5NzQ2M2RhMzg4NjZjODZiNWJiOWUzMzZmZjk2
ZTRlYWIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VjgvVjhUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcApAQCAtMTQ3LDcgKzE0
Nyw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3RBY3RpdmVE
T01PYmplY3Q6OkdldFJhd1RlbXBsYXRlKCkKICAgICBWOFBlcklzb2xhdGVEYXRhKiBkYXRhID0g
VjhQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4UGVySXNvbGF0ZURhdGE6OlRlbXBs
YXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmZpbmQoJmlu
Zm8pOwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1
ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVu
dDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPSBjcmVhdGVSYXdUZW1wbGF0ZSgpOwpAQCAt
MTYwLDcgKzE2MCw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRl
c3RBY3RpdmVET01PYmplY3Q6OkdldFRlbXBsYXRlKCkKICAgICBWOFBlcklzb2xhdGVEYXRhKiBk
YXRhID0gVjhQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4UGVySXNvbGF0ZURhdGE6
OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmZpbmQo
JmluZm8pOwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+dGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1
ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVu
dDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RDdXN0b21OYW1l
ZEdldHRlci5jcHAKaW5kZXggOTc1Y2ZlYjM3YzA2Yzg2Mjk5ZWJlYTM0MmIyMzA2OWIyMWNhNDlj
ZC4uYWI1YjViYjgxNDRlM2FiYTc2ZTY0Njk5MjkzYzgxYTVhNzUyMzlkOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEN1c3RvbU5hbWVk
R2V0dGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgv
VjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwCkBAIC04MSw3ICs4MSw3IEBAIHY4OjpQZXJzaXN0
ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3RDdXN0b21OYW1lZEdldHRlcjo6R2V0UmF3
VGVtcGxhdGUoKQogICAgIFY4UGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOFBlcklzb2xhdGVEYXRh
OjpjdXJyZW50KCk7CiAgICAgVjhQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9y
IHJlc3VsdCA9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJl
c3VsdCAhPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVz
dWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6Okhh
bmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRl
bXBsYXRlPiB0ZW1wbCA9IGNyZWF0ZVJhd1RlbXBsYXRlKCk7CkBAIC05NCw3ICs5NCw3IEBAIHY4
OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3RDdXN0b21OYW1lZEdldHRl
cjo6R2V0VGVtcGxhdGUoKQogICAgIFY4UGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOFBlcklzb2xh
dGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0
ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYg
KHJlc3VsdCAhPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVz
dWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6Okhh
bmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRl
bXBsYXRlPiB0ZW1wbCA9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAKaW5kZXgg
NDA3NGU1NzMyNDliYzVhZDQ5OTJmMjIxMDZjOTNmOTU1OWE3YmEyOS4uMGI5NWMxNzg5ODQ3OTJi
OTVjN2JhZTliZTU4MTAwMDlhNmJhMDVlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudENvbnN0cnVj
dG9yLmNwcApAQCAtMTE4LDcgKzExOCw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRl
bXBsYXRlPiBWOFRlc3RFdmVudENvbnN0cnVjdG9yOjpHZXRSYXdUZW1wbGF0ZSgpCiAgICAgVjhQ
ZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4UGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBW
OFBlcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+cmF3
VGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnJhd1Rl
bXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2Nv
cGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0gY3Jl
YXRlUmF3VGVtcGxhdGUoKTsKQEAgLTEzMSw3ICsxMzEsNyBAQCB2ODo6UGVyc2lzdGVudDx2ODo6
RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6R2V0VGVtcGxhdGUoKQog
ICAgIFY4UGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOFBlcklzb2xhdGVEYXRhOjpjdXJyZW50KCk7
CiAgICAgVjhQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRh
dGEtPnRlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT50
ZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAg
ICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNj
b3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0
RXZlbnRUYXJnZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4
L1Y4VGVzdEV2ZW50VGFyZ2V0LmNwcAppbmRleCA4Y2JhYTJmMDY0ZGE2YjBlOWM1NjhjN2QxMmU4
NjE4NDM4MTc0MTk0Li4xZTExZjRkNzQ1Y2JhZDdlMjQ1N2RhODQ3NTkxMzYzNjc4YWEyZTVmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0
RXZlbnRUYXJnZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9WOC9WOFRlc3RFdmVudFRhcmdldC5jcHAKQEAgLTE0Miw3ICsxNDIsNyBAQCB2ODo6UGVyc2lz
dGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0RXZlbnRUYXJnZXQ6OkdldFJhd1RlbXBs
YXRlKCkKICAgICBWOFBlcklzb2xhdGVEYXRhKiBkYXRhID0gVjhQZXJJc29sYXRlRGF0YTo6Y3Vy
cmVudCgpOwogICAgIFY4UGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1
bHQgPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwogICAgIGlmIChyZXN1bHQg
IT0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC0+
c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVT
Y29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0
ZT4gdGVtcGwgPSBjcmVhdGVSYXdUZW1wbGF0ZSgpOwpAQCAtMTU1LDcgKzE1NSw3IEBAIHY4OjpQ
ZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3RFdmVudFRhcmdldDo6R2V0VGVt
cGxhdGUoKQogICAgIFY4UGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOFBlcklzb2xhdGVEYXRhOjpj
dXJyZW50KCk7CiAgICAgVjhQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJl
c3VsdCA9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAh
PSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNv
bmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3Bl
IGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0
ZW1wbCA9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VjgvVjhUZXN0RXhjZXB0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOFRlc3RFeGNlcHRpb24uY3BwCmluZGV4IDQ1MWM1OGQ3OGE3NmM3NDVhNmM3ZWI2
ZGYzNWViMDczNjNjY2NkMTYuLjU1ODk2ZThjOGJjMzQ4YzgwOTI1MTEzYTEyNGM2YTgxNjdhMjJk
M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9W
OFRlc3RFeGNlcHRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOFRlc3RFeGNlcHRpb24uY3BwCkBAIC03Miw3ICs3Miw3IEBAIHY4OjpQZXJzaXN0
ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3RFeGNlcHRpb246OkdldFJhd1RlbXBsYXRl
KCkKICAgICBWOFBlcklzb2xhdGVEYXRhKiBkYXRhID0gVjhQZXJJc29sYXRlRGF0YTo6Y3VycmVu
dCgpOwogICAgIFY4UGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQg
PSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwogICAgIGlmIChyZXN1bHQgIT0g
ZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vj
b25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVTY29w
ZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4g
dGVtcGwgPSBjcmVhdGVSYXdUZW1wbGF0ZSgpOwpAQCAtODUsNyArODUsNyBAQCB2ODo6UGVyc2lz
dGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0RXhjZXB0aW9uOjpHZXRUZW1wbGF0ZSgp
CiAgICAgVjhQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4UGVySXNvbGF0ZURhdGE6OmN1cnJlbnQo
KTsKICAgICBWOFBlcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0g
ZGF0YS0+dGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEt
PnRlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxl
U2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3RJbnRlcmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4
L1Y4VGVzdEludGVyZmFjZS5jcHAKaW5kZXggNGE1ZWE1YmM4ZTRiY2IzMzk4ZmQ1MTE3ZmYzMTMz
YzVjN2Q2Y2U3ZS4uMWYxYzRjOWQwMWZiMTQ2NTM0OTFhYmY5NzI4ODEzMDdjZmQxMGM3MCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdElu
dGVyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4
L1Y4VGVzdEludGVyZmFjZS5jcHAKQEAgLTMwNyw3ICszMDcsNyBAQCB2ODo6UGVyc2lzdGVudDx2
ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0SW50ZXJmYWNlOjpHZXRSYXdUZW1wbGF0ZSgpCiAg
ICAgVjhQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4UGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsK
ICAgICBWOFBlcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0
YS0+cmF3VGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEt
PnJhd1RlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFu
ZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBs
ID0gY3JlYXRlUmF3VGVtcGxhdGUoKTsKQEAgLTMyMCw3ICszMjAsNyBAQCB2ODo6UGVyc2lzdGVu
dDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0SW50ZXJmYWNlOjpHZXRUZW1wbGF0ZSgpCiAg
ICAgVjhQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4UGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsK
ICAgICBWOFBlcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0
YS0+dGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnRl
bXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2Nv
cGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RN
ZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9WOC9WOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcAppbmRleCA0YjA5ZDBi
ZDI2YWNlMTA3NGJjMWZlM2Y0NmQ3OWIxZTkyNDc5YzJmLi5hZjk2MTdjYmQwMGI0NGVmZGE1MzAx
NTliYjk2N2Q0NTJlMzkwNWJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVjgvVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE1lZGlhUXVlcnlMaXN0
TGlzdGVuZXIuY3BwCkBAIC04MSw3ICs4MSw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlv
blRlbXBsYXRlPiBWOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjpHZXRSYXdUZW1wbGF0CiAg
ICAgVjhQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4UGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsK
ICAgICBWOFBlcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0
YS0+cmF3VGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEt
PnJhd1RlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFu
ZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBs
ID0gY3JlYXRlUmF3VGVtcGxhdGUoKTsKQEAgLTk0LDcgKzk0LDcgQEAgdjg6OlBlcnNpc3RlbnQ8
djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI6OkdldFRl
bXBsYXRlKCkKICAgICBWOFBlcklzb2xhdGVEYXRhKiBkYXRhID0gVjhQZXJJc29sYXRlRGF0YTo6
Y3VycmVudCgpOwogICAgIFY4UGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciBy
ZXN1bHQgPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwogICAgIGlmIChyZXN1bHQg
IT0gZGF0YS0+dGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vj
b25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVTY29w
ZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4g
dGVtcGwgPQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Y4L1Y4VGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwCmluZGV4IDBhOGZlNDNm
YzczNTRlNmMxOTdkZTEzY2M1Zjc5ZGI3OWFkM2I4NTAuLmY1OThkNTg4N2MzNGUxNmU0OWZjYzJl
NjhmZWJlNjFjOWNhZTU5YWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9WOC9WOFRlc3ROYW1lZENvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAK
QEAgLTExNyw3ICsxMTcsNyBAQCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4g
VjhUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6R2V0UmF3VGVtcGxhdGUoKQogICAgIFY4UGVySXNvbGF0
ZURhdGEqIGRhdGEgPSBWOFBlcklzb2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhQZXJJc29s
YXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnJhd1RlbXBsYXRl
TWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT5yYXdUZW1wbGF0ZU1h
cCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVy
biByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAg
IHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9IGNyZWF0ZVJhd1Rl
bXBsYXRlKCk7CkBAIC0xMzAsNyArMTMwLDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9u
VGVtcGxhdGU+IFY4VGVzdE5hbWVkQ29uc3RydWN0b3I6OkdldFRlbXBsYXRlKCkKICAgICBWOFBl
cklzb2xhdGVEYXRhKiBkYXRhID0gVjhQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4
UGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT50ZW1w
bGF0ZU1hcCgpLmZpbmQoJmluZm8pOwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+dGVtcGxhdGVN
YXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1
cm4gcmVzdWx0LT52YWx1ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAg
ICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5vZGUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5vZGUuY3Bw
CmluZGV4IGY0YTRiNDUyZDY2ZTI1YzY5YWNjNTEzZTZhYzdmNGM0NzVlMDQ1OTEuLmFmNzcyZDQw
ZGFmZDJiYzk4ZjNjNTU1YzEzYmZjZjRjNzEzOTY2OTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROb2RlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Tm9kZS5jcHAKQEAgLTgwLDcg
KzgwLDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdE5vZGU6
OkdldFJhd1RlbXBsYXRlKCkKICAgICBWOFBlcklzb2xhdGVEYXRhKiBkYXRhID0gVjhQZXJJc29s
YXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4UGVySXNvbGF0ZURhdGE6OlRlbXBsYXRlTWFwOjpp
dGVyYXRvciByZXN1bHQgPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8pOwogICAg
IGlmIChyZXN1bHQgIT0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0
dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKIAogICAg
IHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVu
Y3Rpb25UZW1wbGF0ZT4gdGVtcGwgPSBjcmVhdGVSYXdUZW1wbGF0ZSgpOwpAQCAtOTMsNyArOTMs
NyBAQCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0Tm9kZTo6R2V0
VGVtcGxhdGUoKQogICAgIFY4UGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOFBlcklzb2xhdGVEYXRh
OjpjdXJyZW50KCk7CiAgICAgVjhQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6Oml0ZXJhdG9y
IHJlc3VsdCA9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAgICAgaWYgKHJlc3Vs
dCAhPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5z
ZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAgdjg6OkhhbmRsZVNj
b3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRl
PiB0ZW1wbCA9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVjgvVjhUZXN0T2JqLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9WOC9WOFRlc3RPYmouY3BwCmluZGV4IDY3MzNiMjYyNTg1OGNmZGNhZmE0ZWExYTlmNWEwNjlj
NGMxYmMxYzIuLjUxZDBjMzEwYjkzNmFmNjhiYTEwNDhkM2U2OTg5M2M0MzMxMzY2NjMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmou
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RP
YmouY3BwCkBAIC0yMjg0LDcgKzIyODQsNyBAQCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25U
ZW1wbGF0ZT4gVjhUZXN0T2JqOjpHZXRSYXdUZW1wbGF0ZSgpCiAgICAgVjhQZXJJc29sYXRlRGF0
YSogZGF0YSA9IFY4UGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBWOFBlcklzb2xhdGVE
YXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+cmF3VGVtcGxhdGVNYXAo
KS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCku
ZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6
OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0gY3JlYXRlUmF3VGVtcGxh
dGUoKTsKQEAgLTIyOTcsNyArMjI5Nyw3IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRl
bXBsYXRlPiBWOFRlc3RPYmo6OkdldFRlbXBsYXRlKCkKICAgICBWOFBlcklzb2xhdGVEYXRhKiBk
YXRhID0gVjhQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIFY4UGVySXNvbGF0ZURhdGE6
OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmZpbmQo
JmluZm8pOwogICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+dGVtcGxhdGVNYXAoKS5lbmQoKSkKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0LT52YWx1
ZTsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6UGVyc2lzdGVu
dDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcAppbmRleCAzOTMwZDY5ZjdkMzU2
MjcxYzcxMzMzNzU2OTg2OWZiY2QyNDgxZjg2Li43Nzg0ZTY1YjY2ZDcwNzkwNzQyNjM0YWE5YWM0
YmNjZGRiOGU0NzBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlLmNwcApAQCAtMjY0LDcgKzI2NCw3IEBAIHY4OjpQZXJzaXN0ZW50
PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2U6OkdldFJhCiAgICAgVjhQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4UGVySXNvbGF0ZURhdGE6
OmN1cnJlbnQoKTsKICAgICBWOFBlcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3Ig
cmVzdWx0ID0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsKICAgICBpZiAocmVz
dWx0ICE9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1
bHQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CiAKICAgICB2ODo6SGFu
ZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVt
cGxhdGU+IHRlbXBsID0gY3JlYXRlUmF3VGVtcGxhdGUoKTsKQEAgLTI3Nyw3ICsyNzcsNyBAQCB2
ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlOjpHZXRUZQogICAgIFY4UGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOFBl
cklzb2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgVjhQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVN
YXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CiAg
ICAgaWYgKHJlc3VsdCAhPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAgICAgICByZXR1
cm4gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiByZXN1bHQtPnZhbHVlOwogCiAgICAg
djg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5j
dGlvblRlbXBsYXRlPiB0ZW1wbCA9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9ET01XcmFwcGVyV29ybGQuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9N
V3JhcHBlcldvcmxkLmNwcAppbmRleCA4NTllODM2ZjIzNDA0ZmQyOGIwNGNlYTVkM2M3ZmQ3ZTQ5
NWExYzE0Li5hMGE2MGRiZjE4YjlhY2MzYjdhZGMxMzI1OGJhN2M4MDNhZGJmNzJhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01XcmFwcGVyV29ybGQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTVdyYXBwZXJXb3JsZC5jcHAKQEAgLTgyLDcg
KzgyLDcgQEAgdm9pZCBET01XcmFwcGVyV29ybGQ6OmRlYWxsb2NhdGUoRE9NV3JhcHBlcldvcmxk
KiB3b3JsZCkKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9Ci0gICAgQVNTRVJUKGktPnNlY29uZCA9PSB3b3JsZCk7CisgICAgQVNTRVJUKGktPnZh
bHVlID09IHdvcmxkKTsKIAogICAgIG1hcC5yZW1vdmUoaSk7CiAgICAgaXNvbGF0ZWRXb3JsZENv
dW50LS07CkBAIC0xMDAsOSArMTAwLDkgQEAgUGFzc1JlZlB0cjxET01XcmFwcGVyV29ybGQ+IERP
TVdyYXBwZXJXb3JsZDo6ZW5zdXJlSXNvbGF0ZWRXb3JsZChpbnQgd29ybGRJZCwgaW4KICAgICBl
bHNlIHsKICAgICAgICAgV29ybGRNYXA6Oml0ZXJhdG9yIGkgPSBtYXAuZmluZCh3b3JsZElkKTsK
ICAgICAgICAgaWYgKGkgIT0gbWFwLmVuZCgpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoaS0+c2Vj
b25kLT53b3JsZElkKCkgPT0gd29ybGRJZCk7Ci0gICAgICAgICAgICBBU1NFUlQoaS0+c2Vjb25k
LT5leHRlbnNpb25Hcm91cCgpID09IGV4dGVuc2lvbkdyb3VwKTsKLSAgICAgICAgICAgIHJldHVy
biBpLT5zZWNvbmQ7CisgICAgICAgICAgICBBU1NFUlQoaS0+dmFsdWUtPndvcmxkSWQoKSA9PSB3
b3JsZElkKTsKKyAgICAgICAgICAgIEFTU0VSVChpLT52YWx1ZS0+ZXh0ZW5zaW9uR3JvdXAoKSA9
PSBleHRlbnNpb25Hcm91cCk7CisgICAgICAgICAgICByZXR1cm4gaS0+dmFsdWU7CiAgICAgICAg
IH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L05QVjhP
YmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvTlBWOE9iamVjdC5jcHAKaW5k
ZXggMjI0MDMwMGU5MDA4NmY2Y2EyN2M3MDFmOTlmMWZkNGZlMDVmMWRiNi4uMDYzMTRmMzM4Mjdh
ZGYyZGNmOGYyYzNjYjg0ODNmM2MzODJmOGU0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvTlBWOE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvTlBWOE9iamVjdC5jcHAKQEAgLTgxLDcgKzgxLDcgQEAgc3RhdGljIHZvaWQgZnJlZVY4TlBP
YmplY3QoTlBPYmplY3QqIG5wT2JqZWN0KQogICAgICAgICBBU1NFUlQodjhPYmplY3RIYXNoKTsK
ICAgICAgICAgVjhOUE9iamVjdE1hcDo6aXRlcmF0b3IgaXRlciA9IHY4TlBPYmplY3RNYXAtPmZp
bmQodjhPYmplY3RIYXNoKTsKICAgICAgICAgQVNTRVJUKGl0ZXIgIT0gdjhOUE9iamVjdE1hcC0+
ZW5kKCkpOwotICAgICAgICBWOE5QT2JqZWN0VmVjdG9yJiBvYmplY3RzID0gaXRlci0+c2Vjb25k
OworICAgICAgICBWOE5QT2JqZWN0VmVjdG9yJiBvYmplY3RzID0gaXRlci0+dmFsdWU7CiAgICAg
ICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBvYmplY3RzLnNpemUoKTsgKytpbmRl
eCkgewogICAgICAgICAgICAgaWYgKG9iamVjdHMuYXQoaW5kZXgpID09IHY4TnBPYmplY3QpIHsK
ICAgICAgICAgICAgICAgICBvYmplY3RzLnJlbW92ZShpbmRleCk7CkBAIC0xNDgsNyArMTQ4LDcg
QEAgTlBPYmplY3QqIG5wQ3JlYXRlVjhTY3JpcHRPYmplY3QoTlBQIG5wcCwgdjg6OkhhbmRsZTx2
ODo6T2JqZWN0PiBvYmplY3QsIERPTVdpbmQKICAgICBWOE5QT2JqZWN0TWFwKiB2OE5QT2JqZWN0
TWFwID0gVjhQZXJDb250ZXh0RGF0YTo6ZnJvbShvYmplY3QtPkNyZWF0aW9uQ29udGV4dCgpKS0+
djhOUE9iamVjdE1hcCgpOwogICAgIFY4TlBPYmplY3RNYXA6Oml0ZXJhdG9yIGl0ZXIgPSB2OE5Q
T2JqZWN0TWFwLT5maW5kKHY4T2JqZWN0SGFzaCk7CiAgICAgaWYgKGl0ZXIgIT0gdjhOUE9iamVj
dE1hcC0+ZW5kKCkpIHsKLSAgICAgICAgVjhOUE9iamVjdFZlY3RvciYgb2JqZWN0cyA9IGl0ZXIt
PnNlY29uZDsKKyAgICAgICAgVjhOUE9iamVjdFZlY3RvciYgb2JqZWN0cyA9IGl0ZXItPnZhbHVl
OwogICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgb2JqZWN0cy5zaXplKCk7
ICsraW5kZXgpIHsKICAgICAgICAgICAgIFY4TlBPYmplY3QqIHY4bnBPYmplY3QgPSBvYmplY3Rz
LmF0KGluZGV4KTsKICAgICAgICAgICAgIGlmICh2OG5wT2JqZWN0LT5yb290T2JqZWN0ID09IHJv
b3QpIHsKQEAgLTE2NSw3ICsxNjUsNyBAQCBOUE9iamVjdCogbnBDcmVhdGVWOFNjcmlwdE9iamVj
dChOUFAgbnBwLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCwgRE9NV2luZAogICAgIHY4
bnBPYmplY3QtPnY4T2JqZWN0ID0gdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5ldyhvYmpl
Y3QpOwogICAgIHY4bnBPYmplY3QtPnJvb3RPYmplY3QgPSByb290OwogCi0gICAgaXRlci0+c2Vj
b25kLmFwcGVuZCh2OG5wT2JqZWN0KTsKKyAgICBpdGVyLT52YWx1ZS5hcHBlbmQodjhucE9iamVj
dCk7CiAKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxOUE9iamVjdCo+KHY4bnBPYmplY3Qp
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJv
bGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNw
cAppbmRleCAyZmNhY2E2MmM4YWQ0MmE2ZjFiNDEyYTkyNmQwMjhkYmY3Y2I5ZDcyLi45Yjk2N2Q5
NmZjNDExMDgwNjliNTEyZjY2ZDUzMzU3OGZiZjc5YjcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcApAQCAtMTE3LDggKzExNyw4IEBAIHZv
aWQgU2NyaXB0Q29udHJvbGxlcjo6Y2xlYXJTY3JpcHRPYmplY3RzKCkKIHsKICAgICBQbHVnaW5P
YmplY3RNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wbHVnaW5PYmplY3RzLmJlZ2luKCk7CiAgICAgZm9y
ICg7IGl0ICE9IG1fcGx1Z2luT2JqZWN0cy5lbmQoKTsgKytpdCkgewotICAgICAgICBfTlBOX1Vu
cmVnaXN0ZXJPYmplY3QoaXQtPnNlY29uZCk7Ci0gICAgICAgIF9OUE5fUmVsZWFzZU9iamVjdChp
dC0+c2Vjb25kKTsKKyAgICAgICAgX05QTl9VbnJlZ2lzdGVyT2JqZWN0KGl0LT52YWx1ZSk7Cisg
ICAgICAgIF9OUE5fUmVsZWFzZU9iamVjdChpdC0+dmFsdWUpOwogICAgIH0KICAgICBtX3BsdWdp
bk9iamVjdHMuY2xlYXIoKTsKIApAQCAtMTQ2LDcgKzE0Niw3IEBAIHZvaWQgU2NyaXB0Q29udHJv
bGxlcjo6cmVzZXRJc29sYXRlZFdvcmxkcygpCiB7CiAgICAgZm9yIChJc29sYXRlZFdvcmxkTWFw
OjppdGVyYXRvciBpdGVyID0gbV9pc29sYXRlZFdvcmxkcy5iZWdpbigpOwogICAgICAgICAgaXRl
ciAhPSBtX2lzb2xhdGVkV29ybGRzLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgaXRlci0+c2Vj
b25kLT5kZXN0cm95SXNvbGF0ZWRTaGVsbCgpOworICAgICAgICBpdGVyLT52YWx1ZS0+ZGVzdHJv
eUlzb2xhdGVkU2hlbGwoKTsKICAgICB9CiAgICAgbV9pc29sYXRlZFdvcmxkcy5jbGVhcigpOwog
ICAgIG1faXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2lucy5jbGVhcigpOwpAQCAtMzIyLDkgKzMy
Miw5IEBAIFY4RE9NV2luZG93U2hlbGwqIFNjcmlwdENvbnRyb2xsZXI6OmVuc3VyZUlzb2xhdGVk
V29ybGRDb250ZXh0KGludCB3b3JsZElkLCBpbnQKICAgICBpZiAod29ybGRJZCAhPSBET01XcmFw
cGVyV29ybGQ6OnVuaW5pdGlhbGl6ZWRXb3JsZElkKSB7CiAgICAgICAgIElzb2xhdGVkV29ybGRN
YXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2lzb2xhdGVkV29ybGRzLmZpbmQod29ybGRJZCk7CiAgICAg
ICAgIGlmIChpdGVyICE9IG1faXNvbGF0ZWRXb3JsZHMuZW5kKCkpIHsKLSAgICAgICAgICAgIEFT
U0VSVChpdGVyLT5zZWNvbmQtPndvcmxkKCktPndvcmxkSWQoKSA9PSB3b3JsZElkKTsKLSAgICAg
ICAgICAgIEFTU0VSVChpdGVyLT5zZWNvbmQtPndvcmxkKCktPmV4dGVuc2lvbkdyb3VwKCkgPT0g
ZXh0ZW5zaW9uR3JvdXApOwotICAgICAgICAgICAgcmV0dXJuIGl0ZXItPnNlY29uZDsKKyAgICAg
ICAgICAgIEFTU0VSVChpdGVyLT52YWx1ZS0+d29ybGQoKS0+d29ybGRJZCgpID09IHdvcmxkSWQp
OworICAgICAgICAgICAgQVNTRVJUKGl0ZXItPnZhbHVlLT53b3JsZCgpLT5leHRlbnNpb25Hcm91
cCgpID09IGV4dGVuc2lvbkdyb3VwKTsKKyAgICAgICAgICAgIHJldHVybiBpdGVyLT52YWx1ZTsK
ICAgICAgICAgfQogICAgIH0KIApAQCAtMzQyLDcgKzM0Miw3IEBAIFY4RE9NV2luZG93U2hlbGwq
IFNjcmlwdENvbnRyb2xsZXI6OmV4aXN0aW5nV2luZG93U2hlbGxJbnRlcm5hbChET01XcmFwcGVy
V29ybGQqCiAgICAgICAgIHJldHVybiBtX3dpbmRvd1NoZWxsLmdldCgpOwogCiAgICAgSXNvbGF0
ZWRXb3JsZE1hcDo6aXRlcmF0b3IgaXRlciA9IG1faXNvbGF0ZWRXb3JsZHMuZmluZCh3b3JsZC0+
d29ybGRJZCgpKTsKLSAgICByZXR1cm4gaXRlciA9PSBtX2lzb2xhdGVkV29ybGRzLmVuZCgpID8g
MCA6IGl0ZXItPnNlY29uZDsKKyAgICByZXR1cm4gaXRlciA9PSBtX2lzb2xhdGVkV29ybGRzLmVu
ZCgpID8gMCA6IGl0ZXItPnZhbHVlOwogfQogCiBWOERPTVdpbmRvd1NoZWxsKiBTY3JpcHRDb250
cm9sbGVyOjp3aW5kb3dTaGVsbChET01XcmFwcGVyV29ybGQqIHdvcmxkKQpAQCAtMzcyLDcgKzM3
Miw3IEBAIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQoaW50
IHdvcmxkSUQsIGNvbnN0IFZlY3RvcjxTY3JpcHRTCiAgICAgICAgIGlmICh3b3JsZElEICE9IERP
TVdyYXBwZXJXb3JsZDo6dW5pbml0aWFsaXplZFdvcmxkSWQpIHsKICAgICAgICAgICAgIElzb2xh
dGVkV29ybGRTZWN1cml0eU9yaWdpbk1hcDo6aXRlcmF0b3Igc2VjdXJpdHlPcmlnaW5JdGVyID0g
bV9pc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW5zLmZpbmQod29ybGRJRCk7CiAgICAgICAgICAg
ICBpZiAoc2VjdXJpdHlPcmlnaW5JdGVyICE9IG1faXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2lu
cy5lbmQoKSkKLSAgICAgICAgICAgICAgICBpc29sYXRlZFdvcmxkU2hlbGwtPnNldElzb2xhdGVk
V29ybGRTZWN1cml0eU9yaWdpbihzZWN1cml0eU9yaWdpbkl0ZXItPnNlY29uZCk7CisgICAgICAg
ICAgICAgICAgaXNvbGF0ZWRXb3JsZFNoZWxsLT5zZXRJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmln
aW4oc2VjdXJpdHlPcmlnaW5JdGVyLT52YWx1ZSk7CiAgICAgICAgIH0KIAogICAgICAgICBpc29s
YXRlZFdvcmxkU2hlbGwtPmluaXRpYWxpemVJZk5lZWRlZCgpOwpAQCAtNDEyLDcgKzQxMiw3IEBA
IHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6c2V0SXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2luKGlu
dCB3b3JsZElELCBQYXNzUmVmUHRyPFNlCiAgICAgbV9pc29sYXRlZFdvcmxkU2VjdXJpdHlPcmln
aW5zLnNldCh3b3JsZElELCBzZWN1cml0eU9yaWdpbik7CiAgICAgSXNvbGF0ZWRXb3JsZE1hcDo6
aXRlcmF0b3IgaXRlciA9IG1faXNvbGF0ZWRXb3JsZHMuZmluZCh3b3JsZElEKTsKICAgICBpZiAo
aXRlciAhPSBtX2lzb2xhdGVkV29ybGRzLmVuZCgpKQotICAgICAgICBpdGVyLT5zZWNvbmQtPnNl
dElzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbihzZWN1cml0eU9yaWdpbik7CisgICAgICAgIGl0
ZXItPnZhbHVlLT5zZXRJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4oc2VjdXJpdHlPcmlnaW4p
OwogfQogCiBUZXh0UG9zaXRpb24gU2NyaXB0Q29udHJvbGxlcjo6ZXZlbnRIYW5kbGVyUG9zaXRp
b24oKSBjb25zdApAQCAtNTQ1LDggKzU0NSw4IEBAIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6Y2xl
YW51cFNjcmlwdE9iamVjdHNGb3JQbHVnaW4oV2lkZ2V0KiBuYXRpdmVIYW5kbGUpCiAgICAgUGx1
Z2luT2JqZWN0TWFwOjppdGVyYXRvciBpdCA9IG1fcGx1Z2luT2JqZWN0cy5maW5kKG5hdGl2ZUhh
bmRsZSk7CiAgICAgaWYgKGl0ID09IG1fcGx1Z2luT2JqZWN0cy5lbmQoKSkKICAgICAgICAgcmV0
dXJuOwotICAgIF9OUE5fVW5yZWdpc3Rlck9iamVjdChpdC0+c2Vjb25kKTsKLSAgICBfTlBOX1Jl
bGVhc2VPYmplY3QoaXQtPnNlY29uZCk7CisgICAgX05QTl9VbnJlZ2lzdGVyT2JqZWN0KGl0LT52
YWx1ZSk7CisgICAgX05QTl9SZWxlYXNlT2JqZWN0KGl0LT52YWx1ZSk7CiAgICAgbV9wbHVnaW5P
YmplY3RzLnJlbW92ZShpdCk7CiB9CiAKQEAgLTY2NSw3ICs2NjUsNyBAQCB2b2lkIFNjcmlwdENv
bnRyb2xsZXI6OmNvbGxlY3RJc29sYXRlZENvbnRleHRzKFZlY3RvcjxzdGQ6OnBhaXI8U2NyaXB0
U3RhdGUqLCBTZQogewogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICBmb3Ig
KElzb2xhdGVkV29ybGRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pc29sYXRlZFdvcmxkcy5iZWdpbigp
OyBpdCAhPSBtX2lzb2xhdGVkV29ybGRzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIFY4RE9NV2lu
ZG93U2hlbGwqIGlzb2xhdGVkV29ybGRTaGVsbCA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFY4RE9N
V2luZG93U2hlbGwqIGlzb2xhdGVkV29ybGRTaGVsbCA9IGl0LT52YWx1ZTsKICAgICAgICAgaWYg
KCFpc29sYXRlZFdvcmxkU2hlbGwtPmlzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbigpKQogICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IHY4Q29u
dGV4dCA9IGlzb2xhdGVkV29ybGRTaGVsbC0+Y29udGV4dCgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKaW5kZXggNDNjZWZm
NGViNjVmYjA0MjYzZjY2N2U2MGRhZWY5ZWJlNzYyZmZlZi4uNDE3MzFjMTQyY2Q4NGU0NTVkYzhi
OTJhNTYzZTY4MzI3MjRlZGRiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCkBAIC0xMDgsNyArMTA4LDcgQEAgcHVibGlj
OgogICAgIHsKICAgICAgICAgdHlwZW5hbWUgSGFuZGxlVG9UOjppdGVyYXRvciByZXN1bHQgPSBt
X21hcC5maW5kKCpoYW5kbGUpOwogICAgICAgICBpZiAocmVzdWx0ICE9IG1fbWFwLmVuZCgpKSB7
Ci0gICAgICAgICAgICAqdmFsdWVPdXQgPSByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgICAgICp2
YWx1ZU91dCA9IHJlc3VsdC0+dmFsdWU7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9WOERPTU1hcC5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01N
YXAuaAppbmRleCA0ZTU5MTc4OGFmZGJlNmQ1MmUzMDNhODRhZGU2OGNjNGZiZDQ1YTQ4Li5jYTQ1
ZGZkYzNjZDE0Y2ZmOTk2MDA0N2QxNzBmNGJhYjA3NGY2ZTk2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTU1hcC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4RE9NTWFwLmgKQEAgLTExMSw3ICsxMTEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIGJvb2wgcmVtb3ZlSWZQcmVzZW50KEtleVR5cGUqIGtleSwgdjg6OlBlcnNpc3Rl
bnQ8VmFsdWVUeXBlPiB2YWx1ZSkKICAgICAgICAgewogICAgICAgICAgICAgdHlwZW5hbWUgSGFz
aE1hcDxLZXlUeXBlKiwgVmFsdWVUeXBlKj46Oml0ZXJhdG9yIGl0ID0gbV9tYXAuZmluZChrZXkp
OwotICAgICAgICAgICAgaWYgKGl0ID09IG1fbWFwLmVuZCgpIHx8IGl0LT5zZWNvbmQgIT0gKnZh
bHVlKQorICAgICAgICAgICAgaWYgKGl0ID09IG1fbWFwLmVuZCgpIHx8IGl0LT52YWx1ZSAhPSAq
dmFsdWUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICBtX21h
cC5yZW1vdmUoaXQpOwpAQCAtMTMxLDcgKzEzMSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgICAgIHZpc2l0b3ItPnN0YXJ0TWFwKCk7CiAgICAgICAgICAgICB0eXBlbmFtZSBIYXNo
TWFwPEtleVR5cGUqLCBWYWx1ZVR5cGUqPjo6aXRlcmF0b3IgaXQgPSBtX21hcC5iZWdpbigpOwog
ICAgICAgICAgICAgZm9yICg7IGl0ICE9IG1fbWFwLmVuZCgpOyArK2l0KQotICAgICAgICAgICAg
ICAgIHZpc2l0b3ItPnZpc2l0RE9NV3JhcHBlcihzdG9yZSwgaXQtPmZpcnN0LCB2ODo6UGVyc2lz
dGVudDxWYWx1ZVR5cGU+KGl0LT5zZWNvbmQpKTsKKyAgICAgICAgICAgICAgICB2aXNpdG9yLT52
aXNpdERPTVdyYXBwZXIoc3RvcmUsIGl0LT5rZXksIHY4OjpQZXJzaXN0ZW50PFZhbHVlVHlwZT4o
aXQtPnZhbHVlKSk7CiAgICAgICAgICAgICB2aXNpdG9yLT5lbmRNYXAoKTsKICAgICAgICAgfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFBlckNvbnRleHREYXRh
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UGVyQ29udGV4dERhdGEuY3BwCmlu
ZGV4IDNhZTlmY2Y5NjM0YTIyNDkzMDRkNWZhMTNlNGRkZDc1YTNlNTQwNTkuLjYyNTQzOWRhMjNk
MDUyMDI0NWE0YTlkMWZkMzZmMDYyZTA5M2FjYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1Y4UGVyQ29udGV4dERhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1Y4UGVyQ29udGV4dERhdGEuY3BwCkBAIC01Myw3ICs1Myw3IEBAIHZvaWQgVjhQ
ZXJDb250ZXh0RGF0YTo6ZGlzcG9zZSgpCiAgICAgewogICAgICAgICBXcmFwcGVyQm9pbGVycGxh
dGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV93cmFwcGVyQm9pbGVycGxhdGVzLmJlZ2luKCk7CiAgICAg
ICAgIGZvciAoOyBpdCAhPSBtX3dyYXBwZXJCb2lsZXJwbGF0ZXMuZW5kKCk7ICsraXQpIHsKLSAg
ICAgICAgICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBpdC0+c2Vjb25k
OworICAgICAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlciA9IGl0LT52
YWx1ZTsKICAgICAgICAgICAgIHdyYXBwZXIuRGlzcG9zZSgpOwogICAgICAgICB9CiAgICAgICAg
IG1fd3JhcHBlckJvaWxlcnBsYXRlcy5jbGVhcigpOwpAQCAtNjIsNyArNjIsNyBAQCB2b2lkIFY4
UGVyQ29udGV4dERhdGE6OmRpc3Bvc2UoKQogICAgIHsKICAgICAgICAgQ29uc3RydWN0b3JNYXA6
Oml0ZXJhdG9yIGl0ID0gbV9jb25zdHJ1Y3Rvck1hcC5iZWdpbigpOwogICAgICAgICBmb3IgKDsg
aXQgIT0gbV9jb25zdHJ1Y3Rvck1hcC5lbmQoKTsgKytpdCkgewotICAgICAgICAgICAgdjg6OlBl
cnNpc3RlbnQ8djg6OkZ1bmN0aW9uPiB3cmFwcGVyID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAg
IHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvbj4gd3JhcHBlciA9IGl0LT52YWx1ZTsKICAgICAg
ICAgICAgIHdyYXBwZXIuRGlzcG9zZSgpOwogICAgICAgICB9CiAgICAgICAgIG1fY29uc3RydWN0
b3JNYXAuY2xlYXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L25w
cnVudGltZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ucHJ1bnRpbWUuY3BwCmlu
ZGV4IDhkODBjZjkzMzE4NmU4NTQ3YzE4NTE4M2Q3ZTc0ODRiY2UxZTg0YTMuLjJiMDM2N2NkMTVm
MmE0ZmIxMTNkNGNjMGJmNzY3ZWM4Y2YxYjBhNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L25wcnVudGltZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvbnBydW50aW1lLmNwcApAQCAtMTY0LDcgKzE2NCw3IEBAIE5QSWRlbnRpZmllciBfTlBOX0dl
dFN0cmluZ0lkZW50aWZpZXIoY29uc3QgTlBVVEY4KiBuYW1lKQogICAgICAgICBTdHJpbmdJZGVu
dGlmaWVyTWFwKiBpZGVudE1hcCA9IGdldFN0cmluZ0lkZW50aWZpZXJNYXAoKTsKICAgICAgICAg
U3RyaW5nSWRlbnRpZmllck1hcDo6aXRlcmF0b3IgaXRlciA9IGlkZW50TWFwLT5maW5kKGtleSk7
CiAgICAgICAgIGlmIChpdGVyICE9IGlkZW50TWFwLT5lbmQoKSkKLSAgICAgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxOUElkZW50aWZpZXI+KGl0ZXItPnNlY29uZCk7CisgICAgICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8TlBJZGVudGlmaWVyPihpdGVyLT52YWx1ZSk7CiAKICAgICAgICAg
c2l6ZV90IG5hbWVMZW4gPSBrZXkubV9sZW5ndGg7CiAKQEAgLTIxMSw3ICsyMTEsNyBAQCBOUElk
ZW50aWZpZXIgX05QTl9HZXRJbnRJZGVudGlmaWVyKGludDMyX3QgaW50SWQpCiAgICAgSW50SWRl
bnRpZmllck1hcCogaWRlbnRNYXAgPSBnZXRJbnRJZGVudGlmaWVyTWFwKCk7CiAgICAgSW50SWRl
bnRpZmllck1hcDo6aXRlcmF0b3IgaXRlciA9IGlkZW50TWFwLT5maW5kKGludElkKTsKICAgICBp
ZiAoaXRlciAhPSBpZGVudE1hcC0+ZW5kKCkpCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxO
UElkZW50aWZpZXI+KGl0ZXItPnNlY29uZCk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxO
UElkZW50aWZpZXI+KGl0ZXItPnZhbHVlKTsKIAogICAgIC8vIFdlIG5ldmVyIHJlbGVhc2UgaWRl
bnRpZmllcnMsIHNvIHRoaXMgZGljdGlvbmFyeSB3aWxsIGdyb3cuCiAgICAgUHJpdmF0ZUlkZW50
aWZpZXIqIGlkZW50aWZpZXIgPSByZWludGVycHJldF9jYXN0PFByaXZhdGVJZGVudGlmaWVyKj4o
bWFsbG9jKHNpemVvZihQcml2YXRlSWRlbnRpZmllcikpKTsKQEAgLTM4OCw3ICszODgsNyBAQCB2
b2lkIF9OUE5fUmVnaXN0ZXJPYmplY3QoTlBPYmplY3QqIG5wT2JqZWN0LCBOUE9iamVjdCogb3du
ZXIpCiAgICAgICAgIE5QT2JqZWN0TWFwOjppdGVyYXRvciBvd25lckVudHJ5ID0gbGl2ZU9iamVj
dE1hcCgpLmZpbmQob3duZXIpOwogICAgICAgICBOUE9iamVjdCogcGFyZW50ID0gMDsKICAgICAg
ICAgaWYgKGxpdmVPYmplY3RNYXAoKS5lbmQoKSAhPSBvd25lckVudHJ5KQotICAgICAgICAgICAg
cGFyZW50ID0gb3duZXJFbnRyeS0+c2Vjb25kOworICAgICAgICAgICAgcGFyZW50ID0gb3duZXJF
bnRyeS0+dmFsdWU7CiAKICAgICAgICAgaWYgKHBhcmVudCkKICAgICAgICAgICAgIG93bmVyID0g
cGFyZW50OwpAQCAtNDA4LDcgKzQwOCw3IEBAIHZvaWQgX05QTl9VbnJlZ2lzdGVyT2JqZWN0KE5Q
T2JqZWN0KiBucE9iamVjdCkKIAogICAgIE5QT2JqZWN0KiBvd25lciA9IDA7CiAgICAgaWYgKGxp
dmVPYmplY3RNYXAoKS5maW5kKG5wT2JqZWN0KSAhPSBsaXZlT2JqZWN0TWFwKCkuZW5kKCkpCi0g
ICAgICAgIG93bmVyID0gbGl2ZU9iamVjdE1hcCgpLmZpbmQobnBPYmplY3QpLT5zZWNvbmQ7Cisg
ICAgICAgIG93bmVyID0gbGl2ZU9iamVjdE1hcCgpLmZpbmQobnBPYmplY3QpLT52YWx1ZTsKIAog
ICAgIGlmICghb3duZXIpIHsKICAgICAgICAgLy8gVW5yZWdpc3RlcmluZyBhIG93bmVyIG9iamVj
dDsgYWxzbyB1bnJlZ2lzdGVyIGl0J3MgZGVzY2VuZGFudHMuCkBAIC00NDMsNyArNDQzLDcgQEAg
dm9pZCBfTlBOX1VucmVnaXN0ZXJPYmplY3QoTlBPYmplY3QqIG5wT2JqZWN0KQogICAgIH0gZWxz
ZSB7CiAgICAgICAgIE5QUm9vdE9iamVjdE1hcDo6aXRlcmF0b3Igb3duZXJFbnRyeSA9IHJvb3RP
YmplY3RNYXAoKS5maW5kKG93bmVyKTsKICAgICAgICAgaWYgKG93bmVyRW50cnkgIT0gcm9vdE9i
amVjdE1hcCgpLmVuZCgpKSB7Ci0gICAgICAgICAgICBOUE9iamVjdFNldCogbGlzdCA9IG93bmVy
RW50cnktPnNlY29uZDsKKyAgICAgICAgICAgIE5QT2JqZWN0U2V0KiBsaXN0ID0gb3duZXJFbnRy
eS0+dmFsdWU7CiAgICAgICAgICAgICBBU1NFUlQobGlzdC0+ZmluZChucE9iamVjdCkgIT0gbGlz
dC0+ZW5kKCkpOwogICAgICAgICAgICAgbGlzdC0+cmVtb3ZlKG5wT2JqZWN0KTsKICAgICAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL0lkZW50aWZpZXJSZXAuY3BwIGIv
U291cmNlL1dlYkNvcmUvYnJpZGdlL0lkZW50aWZpZXJSZXAuY3BwCmluZGV4IGViYTVkNTNhOTFj
ZWE5MzZhNDNkMzUwMGI5MjllMjhhYWY1YzIzNDEuLjU5YWY1NDlmYjlkZDM0NDBkMmJkODc2NmQ3
YzMwYTc3NGQyOGJmODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9JZGVudGlm
aWVyUmVwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvSWRlbnRpZmllclJlcC5jcHAK
QEAgLTY4LDEzICs2OCwxMyBAQCBJZGVudGlmaWVyUmVwKiBJZGVudGlmaWVyUmVwOjpnZXQoaW50
IGludElEKQogICAgIAogICAgIEludElkZW50aWZpZXJNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBp
bnRJZGVudGlmaWVyTWFwKCkuYWRkKGludElELCAwKTsKICAgICBpZiAocmVzdWx0LmlzTmV3RW50
cnkpIHsKLSAgICAgICAgQVNTRVJUKCFyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7Ci0gICAgICAg
IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gbmV3IElkZW50aWZpZXJSZXAoaW50SUQpOworICAg
ICAgICBBU1NFUlQoIXJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOworICAgICAgICByZXN1bHQuaXRl
cmF0b3ItPnZhbHVlID0gbmV3IElkZW50aWZpZXJSZXAoaW50SUQpOwogICAgICAgICAKLSAgICAg
ICAgaWRlbnRpZmllclNldCgpLmFkZChyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7CisgICAgICAg
IGlkZW50aWZpZXJTZXQoKS5hZGQocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CiAgICAgfQogICAg
IAotICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICByZXR1cm4gcmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIAogdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxTdHJpbmdJbXBs
PiwgSWRlbnRpZmllclJlcCo+IFN0cmluZ0lkZW50aWZpZXJNYXA7CkBAIC05NCwxMyArOTQsMTMg
QEAgSWRlbnRpZmllclJlcCogSWRlbnRpZmllclJlcDo6Z2V0KGNvbnN0IGNoYXIqIG5hbWUpCiAg
ICAgU3RyaW5nIHN0cmluZyA9IFN0cmluZzo6ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2sobmFt
ZSwgc3RybGVuKG5hbWUpKTsKICAgICBTdHJpbmdJZGVudGlmaWVyTWFwOjpBZGRSZXN1bHQgcmVz
dWx0ID0gc3RyaW5nSWRlbnRpZmllck1hcCgpLmFkZChzdHJpbmcuaW1wbCgpLCAwKTsKICAgICBp
ZiAocmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgQVNTRVJUKCFyZXN1bHQuaXRlcmF0b3It
PnNlY29uZCk7Ci0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gbmV3IElkZW50aWZp
ZXJSZXAobmFtZSk7CisgICAgICAgIEFTU0VSVCghcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7Cisg
ICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBuZXcgSWRlbnRpZmllclJlcChuYW1lKTsK
ICAgICAgICAgCi0gICAgICAgIGlkZW50aWZpZXJTZXQoKS5hZGQocmVzdWx0Lml0ZXJhdG9yLT5z
ZWNvbmQpOworICAgICAgICBpZGVudGlmaWVyU2V0KCkuYWRkKHJlc3VsdC5pdGVyYXRvci0+dmFs
dWUpOwogICAgIH0KICAgICAKLSAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7Cisg
ICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiB9CiAKIGJvb2wgSWRlbnRpZmllclJl
cDo6aXNWYWxpZChJZGVudGlmaWVyUmVwKiBpZGVudGlmaWVyKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYnJpZGdlL05QX2pzb2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9O
UF9qc29iamVjdC5jcHAKaW5kZXggYzAyY2VlZTQ2YjczNmQ4MmQ2MWYwNzgwMDdmYWMyZTRlMzg0
MmNjNi4uMDJiY2E4MzU2ZTg1MDdhMWVjYTJhM2Q4YTQ5MTI1ZGM5NGVkMzYwZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL05QX2pzb2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9icmlkZ2UvTlBfanNvYmplY3QuY3BwCkBAIC02NCw4ICs2NCw4IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIGl0ZXIgPSBtX21hcC5hZGQocm9vdE9iamVjdCwgSlNUb05QT2JqZWN0TWFwKCkp
Lml0ZXJhdG9yOwogICAgICAgICB9CiAKLSAgICAgICAgQVNTRVJUKGl0ZXItPnNlY29uZC5maW5k
KGpzT2JqZWN0KSA9PSBpdGVyLT5zZWNvbmQuZW5kKCkpOwotICAgICAgICBpdGVyLT5zZWNvbmQu
YWRkKGpzT2JqZWN0LCBucE9iamVjdCk7CisgICAgICAgIEFTU0VSVChpdGVyLT52YWx1ZS5maW5k
KGpzT2JqZWN0KSA9PSBpdGVyLT52YWx1ZS5lbmQoKSk7CisgICAgICAgIGl0ZXItPnZhbHVlLmFk
ZChqc09iamVjdCwgbnBPYmplY3QpOwogICAgIH0KIAogICAgIHZvaWQgcmVtb3ZlKFJvb3RPYmpl
Y3QqIHJvb3RPYmplY3QpCkBAIC03OSw5ICs3OSw5IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAg
IEhhc2hNYXA8Um9vdE9iamVjdCosIEpTVG9OUE9iamVjdE1hcD46Oml0ZXJhdG9yIGl0ZXIgPSBt
X21hcC5maW5kKHJvb3RPYmplY3QpOwogICAgICAgICBBU1NFUlQoaXRlciAhPSBtX21hcC5lbmQo
KSk7Ci0gICAgICAgIEFTU0VSVChpdGVyLT5zZWNvbmQuZmluZChqc09iamVjdCkgIT0gaXRlci0+
c2Vjb25kLmVuZCgpKTsKKyAgICAgICAgQVNTRVJUKGl0ZXItPnZhbHVlLmZpbmQoanNPYmplY3Qp
ICE9IGl0ZXItPnZhbHVlLmVuZCgpKTsKIAotICAgICAgICBpdGVyLT5zZWNvbmQucmVtb3ZlKGpz
T2JqZWN0KTsKKyAgICAgICAgaXRlci0+dmFsdWUucmVtb3ZlKGpzT2JqZWN0KTsKICAgICB9CiAK
IHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9yb290
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX3Jvb3QuY3BwCmluZGV4IDliNjIy
NGE4YjU2MGZjNWU2MGUxNTg5ZTU3OWQxNDI1NDk3MjkxMzQuLjc0ZDgzMTkyMWYyMTliOGI3MzMz
Njc1OTE1ZTQxYmRjMTdkZGZkY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9y
dW50aW1lX3Jvb3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX3Jvb3Qu
Y3BwCkBAIC0xMDUsNyArMTA1LDcgQEAgdm9pZCBSb290T2JqZWN0OjppbnZhbGlkYXRlKCkKICAg
ICB7CiAgICAgICAgIEhhc2hNYXA8UnVudGltZU9iamVjdCosIEpTQzo6V2VhazxSdW50aW1lT2Jq
ZWN0PiA+OjppdGVyYXRvciBlbmQgPSBtX3J1bnRpbWVPYmplY3RzLmVuZCgpOwogICAgICAgICBm
b3IgKEhhc2hNYXA8UnVudGltZU9iamVjdCosIEpTQzo6V2VhazxSdW50aW1lT2JqZWN0PiA+Ojpp
dGVyYXRvciBpdCA9IG1fcnVudGltZU9iamVjdHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7
Ci0gICAgICAgICAgICBSdW50aW1lT2JqZWN0KiBydW50aW1lT2JqZWN0ID0gaXQtPnNlY29uZC5n
ZXQoKTsKKyAgICAgICAgICAgIFJ1bnRpbWVPYmplY3QqIHJ1bnRpbWVPYmplY3QgPSBpdC0+dmFs
dWUuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoIXJ1bnRpbWVPYmplY3QpIC8vIFNraXAgem9tYmll
cy4KICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIHJ1bnRpbWVPYmplY3Qt
PmludmFsaWRhdGUoKTsKQEAgLTEyOSw3ICsxMjksNyBAQCB2b2lkIFJvb3RPYmplY3Q6OmludmFs
aWRhdGUoKQogCiAgICAgUHJvdGVjdENvdW50U2V0OjppdGVyYXRvciBlbmQgPSBtX3Byb3RlY3RD
b3VudFNldC5lbmQoKTsKICAgICBmb3IgKFByb3RlY3RDb3VudFNldDo6aXRlcmF0b3IgaXQgPSBt
X3Byb3RlY3RDb3VudFNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIEpTQzo6
Z2NVbnByb3RlY3QoaXQtPmZpcnN0KTsKKyAgICAgICAgSlNDOjpnY1VucHJvdGVjdChpdC0+a2V5
KTsKICAgICBtX3Byb3RlY3RDb3VudFNldC5jbGVhcigpOwogCiAgICAgcm9vdE9iamVjdFNldCgp
LT5yZW1vdmUodGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FudmFz
VmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbnZhc1ZhbHVlLmNwcAppbmRleCA3
ODdhMTc0MmNiMjIzN2ZiNmVmYzdjNTE5YjI3MTFiYmY1Njk4ZDE0Li4zYWVhMTdjNDRlYjUzY2Y4
ZmFiZGE3NjUzNDAzZjIwOWY0OWIwYTgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTQ2FudmFzVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYW52YXNWYWx1
ZS5jcHAKQEAgLTUzLDE0ICs1MywxNCBAQCB2b2lkIENTU0NhbnZhc1ZhbHVlOjpjYW52YXNDaGFu
Z2VkKEhUTUxDYW52YXNFbGVtZW50KiwgY29uc3QgRmxvYXRSZWN0JiBjaGFuZ2VkUgogICAgIElu
dFJlY3QgaW1hZ2VDaGFuZ2VSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChjaGFuZ2VkUmVjdCk7CiAg
ICAgUmVuZGVyT2JqZWN0U2l6ZUNvdW50TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBjbGllbnRz
KCkuZW5kKCk7CiAgICAgZm9yIChSZW5kZXJPYmplY3RTaXplQ291bnRNYXA6OmNvbnN0X2l0ZXJh
dG9yIGN1cnIgPSBjbGllbnRzKCkuYmVnaW4oKTsgY3VyciAhPSBlbmQ7ICsrY3VycikKLSAgICAg
ICAgY29uc3RfY2FzdDxSZW5kZXJPYmplY3QqPihjdXJyLT5maXJzdCktPmltYWdlQ2hhbmdlZChz
dGF0aWNfY2FzdDxXcmFwcGVkSW1hZ2VQdHI+KHRoaXMpLCAmaW1hZ2VDaGFuZ2VSZWN0KTsKKyAg
ICAgICAgY29uc3RfY2FzdDxSZW5kZXJPYmplY3QqPihjdXJyLT5rZXkpLT5pbWFnZUNoYW5nZWQo
c3RhdGljX2Nhc3Q8V3JhcHBlZEltYWdlUHRyPih0aGlzKSwgJmltYWdlQ2hhbmdlUmVjdCk7CiB9
CiAKIHZvaWQgQ1NTQ2FudmFzVmFsdWU6OmNhbnZhc1Jlc2l6ZWQoSFRNTENhbnZhc0VsZW1lbnQq
KQogewogICAgIFJlbmRlck9iamVjdFNpemVDb3VudE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
Y2xpZW50cygpLmVuZCgpOwogICAgIGZvciAoUmVuZGVyT2JqZWN0U2l6ZUNvdW50TWFwOjpjb25z
dF9pdGVyYXRvciBjdXJyID0gY2xpZW50cygpLmJlZ2luKCk7IGN1cnIgIT0gZW5kOyArK2N1cnIp
Ci0gICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyT2JqZWN0Kj4oY3Vyci0+Zmlyc3QpLT5pbWFnZUNo
YW5nZWQoc3RhdGljX2Nhc3Q8V3JhcHBlZEltYWdlUHRyPih0aGlzKSk7CisgICAgICAgIGNvbnN0
X2Nhc3Q8UmVuZGVyT2JqZWN0Kj4oY3Vyci0+a2V5KS0+aW1hZ2VDaGFuZ2VkKHN0YXRpY19jYXN0
PFdyYXBwZWRJbWFnZVB0cj4odGhpcykpOwogfQogCiB2b2lkIENTU0NhbnZhc1ZhbHVlOjpjYW52
YXNEZXN0cm95ZWQoSFRNTENhbnZhc0VsZW1lbnQqIGVsZW1lbnQpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCmluZGV4IGRhMGQ0MzY5
ZjExOGFiNzU3MzViN2ZjMGQ4ODYxODc2YzRmYmZhNDIuLmViYjQ0ZjFjY2M3YTY3ZGMwNzc0MmJm
Yjg0Zjc1ZDc5ZmYyMTVhYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21w
dXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21w
dXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCkBAIC0xMzAyLDggKzEzMDIsOCBAQCBzdGF0aWMgUGFz
c1JlZlB0cjxDU1NWYWx1ZT4gY291bnRlclRvQ1NTVmFsdWUoY29uc3QgUmVuZGVyU3R5bGUqIHN0
eWxlLCBDU1NQcm9wZQogCiAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdCA9IENTU1ZhbHVl
TGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKICAgICBmb3IgKENvdW50ZXJEaXJlY3RpdmVN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBtYXAtPmVuZCgpOyAr
K2l0KSB7Ci0gICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShp
dC0+Zmlyc3QsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKSk7Ci0gICAgICAgIHNob3J0
IG51bWJlciA9IHByb3BlcnR5SUQgPT0gQ1NTUHJvcGVydHlDb3VudGVySW5jcmVtZW50ID8gaXQt
PnNlY29uZC5pbmNyZW1lbnRWYWx1ZSgpIDogaXQtPnNlY29uZC5yZXNldFZhbHVlKCk7CisgICAg
ICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShpdC0+a2V5LCBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORykpOworICAgICAgICBzaG9ydCBudW1iZXIgPSBwcm9w
ZXJ0eUlEID09IENTU1Byb3BlcnR5Q291bnRlckluY3JlbWVudCA/IGl0LT52YWx1ZS5pbmNyZW1l
bnRWYWx1ZSgpIDogaXQtPnZhbHVlLnJlc2V0VmFsdWUoKTsKICAgICAgICAgbGlzdC0+YXBwZW5k
KGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKChkb3VibGUpbnVtYmVyLCBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX05VTUJFUikpOwogICAgIH0KICAgICByZXR1cm4gbGlzdC5yZWxlYXNlKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Jvc3NmYWRlVmFsdWUuY3BwIGIvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0Nyb3NzZmFkZVZhbHVlLmNwcAppbmRleCBhMjI0YTM2MTE5Y2Ri
NzY5OWI1ODkxZjgzOTlhNTRmZGZjNTlmMTIwLi4xMjY3MzRmZmNiZDY3NDkyMTQ5YTgwYjkxZjRk
N2ZmN2QxYmZjMDIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Jvc3NmYWRl
VmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDcm9zc2ZhZGVWYWx1ZS5jcHAK
QEAgLTE3OSw3ICsxNzksNyBAQCB2b2lkIENTU0Nyb3NzZmFkZVZhbHVlOjpjcm9zc2ZhZGVDaGFu
Z2VkKGNvbnN0IEludFJlY3QmKQogewogICAgIFJlbmRlck9iamVjdFNpemVDb3VudE1hcDo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gY2xpZW50cygpLmVuZCgpOwogICAgIGZvciAoUmVuZGVyT2JqZWN0
U2l6ZUNvdW50TWFwOjpjb25zdF9pdGVyYXRvciBjdXJyID0gY2xpZW50cygpLmJlZ2luKCk7IGN1
cnIgIT0gZW5kOyArK2N1cnIpIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiBjbGllbnQgPSBjb25z
dF9jYXN0PFJlbmRlck9iamVjdCo+KGN1cnItPmZpcnN0KTsKKyAgICAgICAgUmVuZGVyT2JqZWN0
KiBjbGllbnQgPSBjb25zdF9jYXN0PFJlbmRlck9iamVjdCo+KGN1cnItPmtleSk7CiAgICAgICAg
IGNsaWVudC0+aW1hZ2VDaGFuZ2VkKHN0YXRpY19jYXN0PFdyYXBwZWRJbWFnZVB0cj4odGhpcykp
OwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNv
dXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuY3BwCmluZGV4
IDgxYTA1YTE1MGI4MTU1ZTFkYTliMDY1MTIyOGQyNDExNWY1NDZkODkuLjVlNTI4OWY2ZDUyMjdh
ZTlmZDFjY2NhMjc0YjgxY2MxMmNlZDkxZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NGb250RmFjZVNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRG
YWNlU291cmNlLmNwcApAQCAtMTEzLDcgKzExMyw3IEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9udERh
dGE+IENTU0ZvbnRGYWNlU291cmNlOjpnZXRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24m
CiAgICAgdW5zaWduZWQgaGFzaEtleSA9IChmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNp
emUoKSArIDEpIDw8IDYgfCBmb250RGVzY3JpcHRpb24ud2lkdGhWYXJpYW50KCkgPDwgNAogICAg
ICAgICAgICAgICAgICAgICAgICB8IChmb250RGVzY3JpcHRpb24udGV4dE9yaWVudGF0aW9uKCkg
PT0gVGV4dE9yaWVudGF0aW9uVXByaWdodCA/IDggOiAwKSB8IChmb250RGVzY3JpcHRpb24ub3Jp
ZW50YXRpb24oKSA9PSBWZXJ0aWNhbCA/IDQgOiAwKSB8IChzeW50aGV0aWNCb2xkID8gMiA6IDAp
IHwgKHN5bnRoZXRpY0l0YWxpYyA/IDEgOiAwKTsKIAotICAgIFJlZlB0cjxTaW1wbGVGb250RGF0
YT4mIGZvbnREYXRhID0gbV9mb250RGF0YVRhYmxlLmFkZChoYXNoS2V5LCAwKS5pdGVyYXRvci0+
c2Vjb25kOworICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4mIGZvbnREYXRhID0gbV9mb250RGF0
YVRhYmxlLmFkZChoYXNoS2V5LCAwKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKGZvbnREYXRh
KQogICAgICAgICByZXR1cm4gZm9udERhdGE7IC8vIE5vIHJlbGVhc2UsIGJlY2F1c2UgZm9udERh
dGEgaXMgYSByZWZlcmVuY2UgdG8gYSBSZWZQdHIgdGhhdCBpcyBoZWxkIGluIHRoZSBtX2ZvbnRE
YXRhVGFibGUuCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0
b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAKaW5kZXggODI1
YmZhMmJkMjQ1MDcxNjJjY2RhNTJhYjRlYTg3ZmRhYTUyOGRlMi4uNjRlZTBhOGQ3NzMyMDYxZTE4
OTk2YzdiYzNmZWMxZTkwMDNhNzJmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0ZvbnRTZWxlY3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rv
ci5jcHAKQEAgLTI4NSw3ICsyODUsNyBAQCB2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6YWRkRm9udEZh
Y2VSdWxlKGNvbnN0IFN0eWxlUnVsZUZvbnRGYWNlKiBmb250RmFjZVJ1bGUpCiAgICAgICAgIGlm
IChmYW1pbHlOYW1lLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAg
IE93blB0cjxWZWN0b3I8UmVmUHRyPENTU0ZvbnRGYWNlPiA+ID4mIGZhbWlseUZvbnRGYWNlcyA9
IG1fZm9udEZhY2VzLmFkZChmYW1pbHlOYW1lLCBudWxscHRyKS5pdGVyYXRvci0+c2Vjb25kOwor
ICAgICAgICBPd25QdHI8VmVjdG9yPFJlZlB0cjxDU1NGb250RmFjZT4gPiA+JiBmYW1pbHlGb250
RmFjZXMgPSBtX2ZvbnRGYWNlcy5hZGQoZmFtaWx5TmFtZSwgbnVsbHB0cikuaXRlcmF0b3ItPnZh
bHVlOwogICAgICAgICBpZiAoIWZhbWlseUZvbnRGYWNlcykgewogICAgICAgICAgICAgZmFtaWx5
Rm9udEZhY2VzID0gYWRvcHRQdHIobmV3IFZlY3RvcjxSZWZQdHI8Q1NTRm9udEZhY2U+ID4pOwog
CkBAIC00ODcsMTMgKzQ4NywxMyBAQCBQYXNzUmVmUHRyPEZvbnREYXRhPiBDU1NGb250U2VsZWN0
b3I6OmdldEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlcwogICAgICAgICBy
ZXR1cm4gZm9udERhdGFGb3JHZW5lcmljRmFtaWx5KG1fZG9jdW1lbnQsIGZvbnREZXNjcmlwdGlv
biwgZmFtaWx5TmFtZSk7CiAgICAgfQogCi0gICAgT3duUHRyPEhhc2hNYXA8dW5zaWduZWQsIFJl
ZlB0cjxDU1NTZWdtZW50ZWRGb250RmFjZT4gPiA+JiBzZWdtZW50ZWRGb250RmFjZUNhY2hlID0g
bV9mb250cy5hZGQoZmFtaWx5LCBudWxscHRyKS5pdGVyYXRvci0+c2Vjb25kOworICAgIE93blB0
cjxIYXNoTWFwPHVuc2lnbmVkLCBSZWZQdHI8Q1NTU2VnbWVudGVkRm9udEZhY2U+ID4gPiYgc2Vn
bWVudGVkRm9udEZhY2VDYWNoZSA9IG1fZm9udHMuYWRkKGZhbWlseSwgbnVsbHB0cikuaXRlcmF0
b3ItPnZhbHVlOwogICAgIGlmICghc2VnbWVudGVkRm9udEZhY2VDYWNoZSkKICAgICAgICAgc2Vn
bWVudGVkRm9udEZhY2VDYWNoZSA9IGFkb3B0UHRyKG5ldyBIYXNoTWFwPHVuc2lnbmVkLCBSZWZQ
dHI8Q1NTU2VnbWVudGVkRm9udEZhY2U+ID4pOwogCiAgICAgRm9udFRyYWl0c01hc2sgdHJhaXRz
TWFzayA9IGZvbnREZXNjcmlwdGlvbi50cmFpdHNNYXNrKCk7CiAKLSAgICBSZWZQdHI8Q1NTU2Vn
bWVudGVkRm9udEZhY2U+JiBmYWNlID0gc2VnbWVudGVkRm9udEZhY2VDYWNoZS0+YWRkKHRyYWl0
c01hc2ssIDApLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgUmVmUHRyPENTU1NlZ21lbnRlZEZvbnRG
YWNlPiYgZmFjZSA9IHNlZ21lbnRlZEZvbnRGYWNlQ2FjaGUtPmFkZCh0cmFpdHNNYXNrLCAwKS5p
dGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCFmYWNlKSB7CiAgICAgICAgIGZhY2UgPSBDU1NTZWdt
ZW50ZWRGb250RmFjZTo6Y3JlYXRlKHRoaXMpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
SW1hZ2VHZW5lcmF0b3JWYWx1ZS5jcHAKaW5kZXggMWU0MDQxMWFjMTFiMWRjODE3OWJkZjAzMjZm
N2FlNjQxNTE2N2RlMC4uOGNmNDdmMDZkMjlhYzBmODlmYzE1NGQ0NTlmNTg1OTg3M2I1ZDljMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZUdlbmVyYXRvclZhbHVlLmNwcApAQCAt
NTksNyArNTksNyBAQCB2b2lkIENTU0ltYWdlR2VuZXJhdG9yVmFsdWU6OmFkZENsaWVudChSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBJbnRTaXplJiBzaQogICAgIGlmIChpdCA9PSBtX2Ns
aWVudHMuZW5kKCkpCiAgICAgICAgIG1fY2xpZW50cy5hZGQocmVuZGVyZXIsIFNpemVBbmRDb3Vu
dChzaXplLCAxKSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIFNpemVBbmRDb3VudCYgc2l6ZUNvdW50
ID0gaXQtPnNlY29uZDsKKyAgICAgICAgU2l6ZUFuZENvdW50JiBzaXplQ291bnQgPSBpdC0+dmFs
dWU7CiAgICAgICAgICsrc2l6ZUNvdW50LmNvdW50OwogICAgIH0KIH0KQEAgLTcxLDcgKzcxLDcg
QEAgdm9pZCBDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjpyZW1vdmVDbGllbnQoUmVuZGVyT2JqZWN0
KiByZW5kZXJlcikKICAgICBBU1NFUlQoaXQgIT0gbV9jbGllbnRzLmVuZCgpKTsKIAogICAgIElu
dFNpemUgcmVtb3ZlZEltYWdlU2l6ZTsKLSAgICBTaXplQW5kQ291bnQmIHNpemVDb3VudCA9IGl0
LT5zZWNvbmQ7CisgICAgU2l6ZUFuZENvdW50JiBzaXplQ291bnQgPSBpdC0+dmFsdWU7CiAgICAg
SW50U2l6ZSBzaXplID0gc2l6ZUNvdW50LnNpemU7CiAgICAgaWYgKCFzaXplLmlzRW1wdHkoKSkg
ewogICAgICAgICBtX3NpemVzLnJlbW92ZShzaXplKTsKQEAgLTg5LDcgKzg5LDcgQEAgSW1hZ2Uq
IENTU0ltYWdlR2VuZXJhdG9yVmFsdWU6OmdldEltYWdlKFJlbmRlck9iamVjdCogcmVuZGVyZXIs
IGNvbnN0IEludFNpemUmIHMKIHsKICAgICBSZW5kZXJPYmplY3RTaXplQ291bnRNYXA6Oml0ZXJh
dG9yIGl0ID0gbV9jbGllbnRzLmZpbmQocmVuZGVyZXIpOwogICAgIGlmIChpdCAhPSBtX2NsaWVu
dHMuZW5kKCkpIHsKLSAgICAgICAgU2l6ZUFuZENvdW50JiBzaXplQ291bnQgPSBpdC0+c2Vjb25k
OworICAgICAgICBTaXplQW5kQ291bnQmIHNpemVDb3VudCA9IGl0LT52YWx1ZTsKICAgICAgICAg
SW50U2l6ZSBvbGRTaXplID0gc2l6ZUNvdW50LnNpemU7CiAgICAgICAgIGlmIChvbGRTaXplICE9
IHNpemUpIHsKICAgICAgICAgICAgIFJlZlB0cjxDU1NJbWFnZUdlbmVyYXRvclZhbHVlPiBwcm90
ZWN0KHRoaXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlZ21lbnRlZEZv
bnRGYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5jcHAK
aW5kZXggZDliYTE1ZTE3NWM2NDA4MDlmMGFiZTYxNWJkN2Y3NzhmMWU3MzBkYi4uYWE4ZGZhNjgx
Y2Y4MDc0MzdiYTQ3Y2Y2NWFiZmVmM2M4MGJjNzY3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTU2VnbWVudGVkRm9udEZhY2UuY3BwCkBAIC0xMDcsNyArMTA3LDcgQEAgUGFzc1JlZlB0cjxG
b250RGF0YT4gQ1NTU2VnbWVudGVkRm9udEZhY2U6OmdldEZvbnREYXRhKGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZm8KICAgICBGb250VHJhaXRzTWFzayBkZXNpcmVkVHJhaXRzTWFzayA9IGZvbnRE
ZXNjcmlwdGlvbi50cmFpdHNNYXNrKCk7CiAgICAgdW5zaWduZWQgaGFzaEtleSA9ICgoZm9udERl
c2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCkgKyAxKSA8PCAoRm9udFRyYWl0c01hc2tXaWR0
aCArIDEpKSB8ICgoZm9udERlc2NyaXB0aW9uLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwgPyAx
IDogMCkgPDwgRm9udFRyYWl0c01hc2tXaWR0aCkgfCBkZXNpcmVkVHJhaXRzTWFzazsKIAotICAg
IFJlZlB0cjxTZWdtZW50ZWRGb250RGF0YT4mIGZvbnREYXRhID0gbV9mb250RGF0YVRhYmxlLmFk
ZChoYXNoS2V5LCAwKS5pdGVyYXRvci0+c2Vjb25kOworICAgIFJlZlB0cjxTZWdtZW50ZWRGb250
RGF0YT4mIGZvbnREYXRhID0gbV9mb250RGF0YVRhYmxlLmFkZChoYXNoS2V5LCAwKS5pdGVyYXRv
ci0+dmFsdWU7CiAgICAgaWYgKGZvbnREYXRhICYmIGZvbnREYXRhLT5udW1SYW5nZXMoKSkKICAg
ICAgICAgcmV0dXJuIGZvbnREYXRhOyAvLyBObyByZWxlYXNlLCB3ZSBoYXZlIGEgcmVmZXJlbmNl
IHRvIGFuIG9iamVjdCBpbiB0aGUgY2FjaGUgd2hpY2ggc2hvdWxkIHJldGFpbiB0aGUgcmVmIGNv
dW50IGl0IGhhcy4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlbGVjdG9y
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvci5jcHAKaW5kZXggNjE4NmIzYjQx
NDFmNjFjOGQxNDg0N2U2OWVjZTA5NWM5NGQ4NDAyYS4uZDJiYTc1Njc3NzIyM2VjYjVmZmNlZWIx
ZjY4YTU0MWMzMjdlMmYxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlbGVj
dG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VsZWN0b3IuY3BwCkBAIC0zODcs
NyArMzg3LDcgQEAgQ1NTU2VsZWN0b3I6OlBzZXVkb1R5cGUgQ1NTU2VsZWN0b3I6OnBhcnNlUHNl
dWRvVHlwZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpCiAgICAgICAgIHJldHVybiBQc2V1ZG9V
bmtub3duOwogICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCosIENTU1NlbGVjdG9yOjpQc2V1
ZG9UeXBlPiogbmFtZVRvUHNldWRvVHlwZSA9IG5hbWVUb1BzZXVkb1R5cGVNYXAoKTsKICAgICBI
YXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBDU1NTZWxlY3Rvcjo6UHNldWRvVHlwZT46Oml0ZXJh
dG9yIHNsb3QgPSBuYW1lVG9Qc2V1ZG9UeXBlLT5maW5kKG5hbWUuaW1wbCgpKTsKLSAgICByZXR1
cm4gc2xvdCA9PSBuYW1lVG9Qc2V1ZG9UeXBlLT5lbmQoKSA/IFBzZXVkb1Vua25vd24gOiBzbG90
LT5zZWNvbmQ7CisgICAgcmV0dXJuIHNsb3QgPT0gbmFtZVRvUHNldWRvVHlwZS0+ZW5kKCkgPyBQ
c2V1ZG9Vbmtub3duIDogc2xvdC0+dmFsdWU7CiB9CiAKIGJvb2wgQ1NTU2VsZWN0b3I6OmlzVW5r
bm93blBzZXVkb1R5cGUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlUG9vbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
VmFsdWVQb29sLmNwcAppbmRleCBjZTc1N2I5MzNiM2Y0YTMwMmU4NzE2NTY4ZDAzZTAzZGJmMWIw
NzZjLi5jMTY4OTkxOWQxNmVlMTZmMGVlMDczMTkxOTk2ZTk3YzVjOGZjOTBjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVQb29sLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTVmFsdWVQb29sLmNwcApAQCAtNzgsOCArNzgsOCBAQCBQYXNzUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiBDU1NWYWx1ZVBvb2w6OmNyZWF0ZUNvbG9yVmFsdWUodW5zaWduZWQgcmdi
VmFsdWUpCiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBkdW1teVZhbHVlOwogICAgIENv
bG9yVmFsdWVDYWNoZTo6QWRkUmVzdWx0IGVudHJ5ID0gbV9jb2xvclZhbHVlQ2FjaGUuYWRkKHJn
YlZhbHVlLCBkdW1teVZhbHVlKTsKICAgICBpZiAoZW50cnkuaXNOZXdFbnRyeSkKLSAgICAgICAg
ZW50cnkuaXRlcmF0b3ItPnNlY29uZCA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVDb2xvcihy
Z2JWYWx1ZSk7Ci0gICAgcmV0dXJuIGVudHJ5Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgIGVu
dHJ5Lml0ZXJhdG9yLT52YWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVDb2xvcihyZ2JW
YWx1ZSk7CisgICAgcmV0dXJuIGVudHJ5Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIAogUGFzc1JlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NTVmFsdWVQb29sOjpjcmVhdGVWYWx1ZShkb3VibGUgdmFs
dWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMgdHlwZSkKQEAgLTExMyw3ICsxMTMsNyBA
QCBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NWYWx1ZVBvb2w6OmNyZWF0ZVZhbHVl
KGRvdWJsZSB2YWx1ZSwgQ1NTUHJpbWl0aQogCiBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiBDU1NWYWx1ZVBvb2w6OmNyZWF0ZUZvbnRGYW1pbHlWYWx1ZShjb25zdCBTdHJpbmcmIGZhbWls
eU5hbWUpCiB7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYgdmFsdWUgPSBtX2ZvbnRG
YW1pbHlWYWx1ZUNhY2hlLmFkZChmYW1pbHlOYW1lLCAwKS5pdGVyYXRvci0+c2Vjb25kOworICAg
IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mIHZhbHVlID0gbV9mb250RmFtaWx5VmFsdWVDYWNo
ZS5hZGQoZmFtaWx5TmFtZSwgMCkuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghdmFsdWUpCiAg
ICAgICAgIHZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShmYW1pbHlOYW1lLCBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORyk7CiAgICAgcmV0dXJuIHZhbHVlOwpAQCAtMTI2LDcg
KzEyNiw3IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWVMaXN0PiBDU1NWYWx1ZVBvb2w6OmNyZWF0ZUZv
bnRGYWNlVmFsdWUoY29uc3QgQXRvbWljU3RyaW5nJiBzCiAgICAgaWYgKG1fZm9udEZhY2VWYWx1
ZUNhY2hlLnNpemUoKSA+IG1heGltdW1Gb250RmFjZUNhY2hlU2l6ZSkKICAgICAgICAgbV9mb250
RmFjZVZhbHVlQ2FjaGUuY2xlYXIoKTsKIAotICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+JiB2YWx1
ZSA9IG1fZm9udEZhY2VWYWx1ZUNhY2hlLmFkZChzdHJpbmcsIDApLml0ZXJhdG9yLT5zZWNvbmQ7
CisgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4mIHZhbHVlID0gbV9mb250RmFjZVZhbHVlQ2FjaGUu
YWRkKHN0cmluZywgMCkuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghdmFsdWUpCiAgICAgICAg
IHZhbHVlID0gQ1NTUGFyc2VyOjpwYXJzZUZvbnRGYWNlVmFsdWUoc3RyaW5nKTsKICAgICByZXR1
cm4gdmFsdWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvUHJvcGVydHlTZXRDU1NT
dHlsZURlY2xhcmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Qcm9wZXJ0eVNldENTU1N0
eWxlRGVjbGFyYXRpb24uY3BwCmluZGV4IDVmYWRmMTZmMDNlNTAxNjYxYjI2MjU5MjUwNTVmOTBj
YjgyNzg3MTQuLjkzZDRlNDUzODA3ZjIzZjk2ODhhMjE1ODkyNzU5NTgwNDFkZjEwYmUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Qcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Qcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRp
b24uY3BwCkBAIC0zNDYsNyArMzQ2LDcgQEAgQ1NTVmFsdWUqIFByb3BlcnR5U2V0Q1NTU3R5bGVE
ZWNsYXJhdGlvbjo6Y2xvbmVBbmRDYWNoZUZvckNTU09NKENTU1ZhbHVlKiBpbnRlcm4KICAgICBp
ZiAoIW1fY3Nzb21DU1NWYWx1ZUNsb25lcykKICAgICAgICAgbV9jc3NvbUNTU1ZhbHVlQ2xvbmVz
ID0gYWRvcHRQdHIobmV3IEhhc2hNYXA8Q1NTVmFsdWUqLCBSZWZQdHI8Q1NTVmFsdWU+ID4pOwog
ICAgIAotICAgIFJlZlB0cjxDU1NWYWx1ZT4mIGNsb25lZFZhbHVlID0gbV9jc3NvbUNTU1ZhbHVl
Q2xvbmVzLT5hZGQoaW50ZXJuYWxWYWx1ZSwgUmVmUHRyPENTU1ZhbHVlPigpKS5pdGVyYXRvci0+
c2Vjb25kOworICAgIFJlZlB0cjxDU1NWYWx1ZT4mIGNsb25lZFZhbHVlID0gbV9jc3NvbUNTU1Zh
bHVlQ2xvbmVzLT5hZGQoaW50ZXJuYWxWYWx1ZSwgUmVmUHRyPENTU1ZhbHVlPigpKS5pdGVyYXRv
ci0+dmFsdWU7CiAgICAgaWYgKCFjbG9uZWRWYWx1ZSkKICAgICAgICAgY2xvbmVkVmFsdWUgPSBp
bnRlcm5hbFZhbHVlLT5jbG9uZUZvckNTU09NKCk7CiAgICAgcmV0dXJuIGNsb25lZFZhbHVlLmdl
dCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1J1bGVTZXQuY3BwIGIvU291cmNl
L1dlYkNvcmUvY3NzL1J1bGVTZXQuY3BwCmluZGV4IDk1NGUwMDhjNGZmZDMxM2VlYjIwOGI1Nzg0
OTliMDFjYTEyYzJlYmQuLmUyYmU1NzcxZTAyNWYxNGNmOWE4NWRlN2U1MWNkOWM1YTEzMDkwNTkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9SdWxlU2V0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvUnVsZVNldC5jcHAKQEAgLTEzNCw3ICsxMzQsNyBAQCBzdGF0aWMgdm9pZCBy
ZXBvcnRBdG9tUnVsZU1hcChNZW1vcnlDbGFzc0luZm8qIGluZm8sIGNvbnN0IFJ1bGVTZXQ6OkF0
b21SdWxlTWFwJgogewogICAgIGluZm8tPmFkZE1lbWJlcihhdG9taWNSdWxlTWFwKTsKICAgICBm
b3IgKFJ1bGVTZXQ6OkF0b21SdWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGF0b21pY1J1bGVN
YXAuYmVnaW4oKTsgaXQgIT0gYXRvbWljUnVsZU1hcC5lbmQoKTsgKytpdCkKLSAgICAgICAgaW5m
by0+YWRkTWVtYmVyKCppdC0+c2Vjb25kKTsKKyAgICAgICAgaW5mby0+YWRkTWVtYmVyKCppdC0+
dmFsdWUpOwogfQogCiB2b2lkIFJ1bGVTZXQ6OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVj
dEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0CkBAIC0yMDEsNyArMjAxLDcgQEAgdm9pZCBS
dWxlU2V0OjphZGRUb1J1bGVTZXQoQXRvbWljU3RyaW5nSW1wbCoga2V5LCBBdG9tUnVsZU1hcCYg
bWFwLCBjb25zdCBSdWxlRGEKIHsKICAgICBpZiAoIWtleSkKICAgICAgICAgcmV0dXJuOwotICAg
IE93blB0cjxWZWN0b3I8UnVsZURhdGE+ID4mIHJ1bGVzID0gbWFwLmFkZChrZXksIG51bGxwdHIp
Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgT3duUHRyPFZlY3RvcjxSdWxlRGF0YT4gPiYgcnVsZXMg
PSBtYXAuYWRkKGtleSwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghcnVsZXMp
CiAgICAgICAgIHJ1bGVzID0gYWRvcHRQdHIobmV3IFZlY3RvcjxSdWxlRGF0YT4pOwogICAgIHJ1
bGVzLT5hcHBlbmQocnVsZURhdGEpOwpAQCAtMzYyLDcgKzM2Miw3IEBAIHN0YXRpYyBpbmxpbmUg
dm9pZCBzaHJpbmtNYXBWZWN0b3JzVG9GaXQoUnVsZVNldDo6QXRvbVJ1bGVNYXAmIG1hcCkKIHsK
ICAgICBSdWxlU2V0OjpBdG9tUnVsZU1hcDo6aXRlcmF0b3IgZW5kID0gbWFwLmVuZCgpOwogICAg
IGZvciAoUnVsZVNldDo6QXRvbVJ1bGVNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+c2hyaW5rVG9GaXQoKTsKKyAgICAg
ICAgaXQtPnZhbHVlLT5zaHJpbmtUb0ZpdCgpOwogfQogCiB2b2lkIFJ1bGVTZXQ6OnNocmlua1Rv
Rml0KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlci5jcHAKaW5kZXggYTJiOTU1NDU1ODYyMmY2
NzI4OTA5NzY5YjE2YjVkZmVlMzliYzA1Yi4uMzEyOTA1OWMwZDUwM2RlNTQ5YzVmZmUxYmFjYTNk
NGU2Y2M1Y2VhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlci5jcHAKQEAgLTEwMTIsMTEg
KzEwMTIsMTEgQEAgcHVibGljOgogICAgICAgICB0eXBlZGVmIENvdW50ZXJEaXJlY3RpdmVNYXA6
Oml0ZXJhdG9yIEl0ZXJhdG9yOwogICAgICAgICBJdGVyYXRvciBlbmQgPSBwYXJlbnRNYXAuZW5k
KCk7CiAgICAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSBwYXJlbnRNYXAuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBDb3VudGVyRGlyZWN0aXZlcyYgZGlyZWN0aXZlcyA9
IG1hcC5hZGQoaXQtPmZpcnN0LCBDb3VudGVyRGlyZWN0aXZlcygpKS5pdGVyYXRvci0+c2Vjb25k
OworICAgICAgICAgICAgQ291bnRlckRpcmVjdGl2ZXMmIGRpcmVjdGl2ZXMgPSBtYXAuYWRkKGl0
LT5rZXksIENvdW50ZXJEaXJlY3RpdmVzKCkpLml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgICAg
IGlmIChjb3VudGVyQmVoYXZpb3IgPT0gUmVzZXQpIHsKLSAgICAgICAgICAgICAgICBkaXJlY3Rp
dmVzLmluaGVyaXRSZXNldChpdC0+c2Vjb25kKTsKKyAgICAgICAgICAgICAgICBkaXJlY3RpdmVz
LmluaGVyaXRSZXNldChpdC0+dmFsdWUpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBkaXJlY3RpdmVzLmluaGVyaXRJbmNyZW1lbnQoaXQtPnNlY29uZCk7CisgICAgICAg
ICAgICAgICAgZGlyZWN0aXZlcy5pbmhlcml0SW5jcmVtZW50KGl0LT52YWx1ZSk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0xMDMzLDkgKzEwMzMsOSBAQCBwdWJsaWM6CiAg
ICAgICAgIEl0ZXJhdG9yIGVuZCA9IG1hcC5lbmQoKTsKICAgICAgICAgZm9yIChJdGVyYXRvciBp
dCA9IG1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCiAgICAgICAgICAgICBpZiAoY291bnRl
ckJlaGF2aW9yID09IFJlc2V0KQotICAgICAgICAgICAgICAgIGl0LT5zZWNvbmQuY2xlYXJSZXNl
dCgpOworICAgICAgICAgICAgICAgIGl0LT52YWx1ZS5jbGVhclJlc2V0KCk7CiAgICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgaXQtPnNlY29uZC5jbGVhckluY3JlbWVudCgpOworICAg
ICAgICAgICAgICAgIGl0LT52YWx1ZS5jbGVhckluY3JlbWVudCgpOwogCiAgICAgICAgIGludCBs
ZW5ndGggPSBsaXN0ID8gbGlzdC0+bGVuZ3RoKCkgOiAwOwogICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IGxlbmd0aDsgKytpKSB7CkBAIC0xMDQ5LDcgKzEwNDksNyBAQCBwdWJsaWM6CiAKICAg
ICAgICAgICAgIEF0b21pY1N0cmluZyBpZGVudGlmaWVyID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWUqPihwYWlyLT5maXJzdCgpKS0+Z2V0U3RyaW5nVmFsdWUoKTsKICAgICAgICAgICAg
IGludCB2YWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4ocGFpci0+c2Vjb25k
KCkpLT5nZXRJbnRWYWx1ZSgpOwotICAgICAgICAgICAgQ291bnRlckRpcmVjdGl2ZXMmIGRpcmVj
dGl2ZXMgPSBtYXAuYWRkKGlkZW50aWZpZXIsIENvdW50ZXJEaXJlY3RpdmVzKCkpLml0ZXJhdG9y
LT5zZWNvbmQ7CisgICAgICAgICAgICBDb3VudGVyRGlyZWN0aXZlcyYgZGlyZWN0aXZlcyA9IG1h
cC5hZGQoaWRlbnRpZmllciwgQ291bnRlckRpcmVjdGl2ZXMoKSkuaXRlcmF0b3ItPnZhbHVlOwog
ICAgICAgICAgICAgaWYgKGNvdW50ZXJCZWhhdmlvciA9PSBSZXNldCkgewogICAgICAgICAgICAg
ICAgIGRpcmVjdGl2ZXMuc2V0UmVzZXRWYWx1ZSh2YWx1ZSk7CiAgICAgICAgICAgICB9IGVsc2Ug
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCmluZGV4IGU0YmEwYThmZWUxMjI2NDFj
NmQ4YzcwYzFkMDA1MGU3NzQ1NWFlNDAuLjM2YzhiNmI1ZjdhNjMzNDY4ZjlhM2Y1ZjE4MzA2NGIy
MjE4NGNhYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKQEAgLTM5Nyw3ICsz
OTcsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RGZWF0dXJlcygpCiAgICAgbV9mZWF0
dXJlcy5hZGQobV9hdXRob3JTdHlsZS0+ZmVhdHVyZXMoKSk7CiAjaWYgRU5BQkxFKFNUWUxFX1ND
T1BFRCkKICAgICBmb3IgKFNjb3BlZFJ1bGVTZXRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zY29wZWRB
dXRob3JTdHlsZXMuYmVnaW4oKTsgaXQgIT0gbV9zY29wZWRBdXRob3JTdHlsZXMuZW5kKCk7ICsr
aXQpCi0gICAgICAgIG1fZmVhdHVyZXMuYWRkKGl0LT5zZWNvbmQtPmZlYXR1cmVzKCkpOworICAg
ICAgICBtX2ZlYXR1cmVzLmFkZChpdC0+dmFsdWUtPmZlYXR1cmVzKCkpOwogI2VuZGlmCiAgICAg
aWYgKG1fdXNlclN0eWxlKQogICAgICAgICBtX2ZlYXR1cmVzLmFkZChtX3VzZXJTdHlsZS0+ZmVh
dHVyZXMoKSk7CkBAIC00MzQsNyArNDM0LDcgQEAgaW5saW5lIFJ1bGVTZXQqIFN0eWxlUmVzb2x2
ZXI6OnJ1bGVTZXRGb3JTY29wZShjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSkgY29uc3QKICAg
ICBpZiAoIXNjb3BlLT5oYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpKQogICAgICAgICByZXR1cm4g
MDsKICAgICBTY29wZWRSdWxlU2V0TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fc2NvcGVkQXV0
aG9yU3R5bGVzLmZpbmQoc2NvcGUpOwotICAgIHJldHVybiBpdCAhPSBtX3Njb3BlZEF1dGhvclN0
eWxlcy5lbmQoKSA/IGl0LT5zZWNvbmQuZ2V0KCkgOiAwOyAKKyAgICByZXR1cm4gaXQgIT0gbV9z
Y29wZWRBdXRob3JTdHlsZXMuZW5kKCkgPyBpdC0+dmFsdWUuZ2V0KCkgOiAwOyAKIH0KICNlbmRp
ZgogCkBAIC00NjMsOCArNDYzLDggQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBlbmRBdXRob3JT
dHlsZXNoZWV0cyh1bnNpZ25lZCBmaXJzdE5ldywgY29uc3QgVmVjdG9yPFJlZlAKICAgICAgICAg
aWYgKHNjb3BlKSB7CiAgICAgICAgICAgICBTY29wZWRSdWxlU2V0TWFwOjpBZGRSZXN1bHQgYWRk
UmVzdWx0ID0gbV9zY29wZWRBdXRob3JTdHlsZXMuYWRkKHNjb3BlLCBudWxscHRyKTsKICAgICAg
ICAgICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgICAgICBhZGRSZXN1
bHQuaXRlcmF0b3ItPnNlY29uZCA9IFJ1bGVTZXQ6OmNyZWF0ZSgpOwotICAgICAgICAgICAgYWRk
UmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQtPmFkZFJ1bGVzRnJvbVNoZWV0KHNoZWV0LCAqbV9tZWRp
dW0sIHRoaXMsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZh
bHVlID0gUnVsZVNldDo6Y3JlYXRlKCk7CisgICAgICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3It
PnZhbHVlLT5hZGRSdWxlc0Zyb21TaGVldChzaGVldCwgKm1fbWVkaXVtLCB0aGlzLCBzY29wZSk7
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogI2VuZGlmCkBAIC01OTQsMTAgKzU5
NCwxMCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OnN3ZWVwTWF0Y2hlZFByb3BlcnRpZXNDYWNoZSgp
CiAgICAgTWF0Y2hlZFByb3BlcnRpZXNDYWNoZTo6aXRlcmF0b3IgaXQgPSBtX21hdGNoZWRQcm9w
ZXJ0aWVzQ2FjaGUuYmVnaW4oKTsKICAgICBNYXRjaGVkUHJvcGVydGllc0NhY2hlOjppdGVyYXRv
ciBlbmQgPSBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUuZW5kKCk7CiAgICAgZm9yICg7IGl0ICE9
IGVuZDsgKytpdCkgewotICAgICAgICBWZWN0b3I8TWF0Y2hlZFByb3BlcnRpZXM+JiBtYXRjaGVk
UHJvcGVydGllcyA9IGl0LT5zZWNvbmQubWF0Y2hlZFByb3BlcnRpZXM7CisgICAgICAgIFZlY3Rv
cjxNYXRjaGVkUHJvcGVydGllcz4mIG1hdGNoZWRQcm9wZXJ0aWVzID0gaXQtPnZhbHVlLm1hdGNo
ZWRQcm9wZXJ0aWVzOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1hdGNoZWRQcm9w
ZXJ0aWVzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBpZiAobWF0Y2hlZFByb3BlcnRpZXNb
aV0ucHJvcGVydGllcy0+aGFzT25lUmVmKCkpIHsKLSAgICAgICAgICAgICAgICB0b1JlbW92ZS5h
cHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQoaXQtPmtl
eSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAg
LTE3MjMsNyArMTcyMyw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6a2V5ZnJhbWVTdHlsZXNGb3JB
bmltYXRpb24oRWxlbWVudCogZSwgY29uc3QgUmVuZGVyU3R5bGUqIGVsCiAgICAgaWYgKGl0ID09
IG1fa2V5ZnJhbWVzUnVsZU1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY29uc3Qg
U3R5bGVSdWxlS2V5ZnJhbWVzKiBrZXlmcmFtZXNSdWxlID0gaXQtPnNlY29uZC5nZXQoKTsKKyAg
ICBjb25zdCBTdHlsZVJ1bGVLZXlmcmFtZXMqIGtleWZyYW1lc1J1bGUgPSBpdC0+dmFsdWUuZ2V0
KCk7CiAKICAgICAvLyBDb25zdHJ1Y3QgYW5kIHBvcHVsYXRlIHRoZSBzdHlsZSBmb3IgZWFjaCBr
ZXlmcmFtZQogICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVLZXlmcmFtZT4gPiYga2V5ZnJh
bWVzID0ga2V5ZnJhbWVzUnVsZS0+a2V5ZnJhbWVzKCk7CkBAIC0yNDU0LDcgKzI0NTQsNyBAQCBj
b25zdCBTdHlsZVJlc29sdmVyOjpNYXRjaGVkUHJvcGVydGllc0NhY2hlSXRlbSogU3R5bGVSZXNv
bHZlcjo6ZmluZEZyb21NYXRjaGVkUAogICAgIE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGU6Oml0ZXJh
dG9yIGl0ID0gbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlLmZpbmQoaGFzaCk7CiAgICAgaWYgKGl0
ID09IG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZS5lbmQoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgTWF0Y2hlZFByb3BlcnRpZXNDYWNoZUl0ZW0mIGNhY2hlSXRlbSA9IGl0LT5zZWNvbmQ7Cisg
ICAgTWF0Y2hlZFByb3BlcnRpZXNDYWNoZUl0ZW0mIGNhY2hlSXRlbSA9IGl0LT52YWx1ZTsKIAog
ICAgIHNpemVfdCBzaXplID0gbWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpOwog
ICAgIGlmIChzaXplICE9IGNhY2hlSXRlbS5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldENvbnRlbnRzLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0Q29udGVudHMuY3BwCmluZGV4IDliMWY1MTRiOWQxNDBm
NzBiYjMxYzA2OWQ5MDY3Y2VlNmEzMGUxZTYuLmU3Y2U4MWVhYWI0ODcxODYyNGY0ZWI1NTIzOGU1
YzFhZjM1Njg1YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0Q29u
dGVudHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0Q29udGVudHMuY3Bw
CkBAIC0yNTMsNyArMjUzLDcgQEAgdm9pZCBTdHlsZVNoZWV0Q29udGVudHM6OnBhcnNlckFkZE5h
bWVzcGFjZShjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCwgY29uc3QgQXQKICAgICBQcmVmaXhO
YW1lc3BhY2VVUklNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX25hbWVzcGFjZXMuYWRkKHByZWZp
eCwgdXJpKTsKICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpCiAgICAgICAgIHJldHVybjsKLSAg
ICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IHVyaTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZh
bHVlID0gdXJpOwogfQogCiBjb25zdCBBdG9taWNTdHJpbmcmIFN0eWxlU2hlZXRDb250ZW50czo6
ZGV0ZXJtaW5lTmFtZXNwYWNlKGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4KQpAQCAtMjY1LDcg
KzI2NSw3IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgU3R5bGVTaGVldENvbnRlbnRzOjpkZXRlcm1p
bmVOYW1lc3BhY2UoY29uc3QgQXRvbWljU3RyaW5nJiBwCiAgICAgUHJlZml4TmFtZXNwYWNlVVJJ
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fbmFtZXNwYWNlcy5maW5kKHByZWZpeCk7CiAgICAg
aWYgKGl0ID09IG1fbmFtZXNwYWNlcy5lbmQoKSkKICAgICAgICAgcmV0dXJuIG51bGxBdG9tOwot
ICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgIHJldHVybiBpdC0+dmFsdWU7CiB9CiAKIHZvaWQg
U3R5bGVTaGVldENvbnRlbnRzOjpwYXJzZUF1dGhvclN0eWxlU2hlZXQoY29uc3QgQ2FjaGVkQ1NT
U3R5bGVTaGVldCogY2FjaGVkU3R5bGVTaGVldCwgY29uc3QgU2VjdXJpdHlPcmlnaW4qIHNlY3Vy
aXR5T3JpZ2luKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0NoZWNrZWRSYWRpb0J1
dHRvbnMuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0NoZWNrZWRSYWRpb0J1dHRvbnMuY3BwCmlu
ZGV4IDY4OTgyY2QxYWQzMzM1NWVjZDQxYjlmMTRlYmFiZDBkNjlmOTMwMDEuLjdkY2FkY2RhOTJm
Njg4ZTdjZWRmZGIzYjkxMWJjYzZjZDNhYjg1MWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9DaGVja2VkUmFkaW9CdXR0b25zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hl
Y2tlZFJhZGlvQnV0dG9ucy5jcHAKQEAgLTE4Niw3ICsxODYsNyBAQCB2b2lkIENoZWNrZWRSYWRp
b0J1dHRvbnM6OmFkZEJ1dHRvbihIVE1MSW5wdXRFbGVtZW50KiBlbGVtZW50KQogICAgIGlmICgh
bV9uYW1lVG9Hcm91cE1hcCkKICAgICAgICAgbV9uYW1lVG9Hcm91cE1hcCA9IGFkb3B0UHRyKG5l
dyBOYW1lVG9Hcm91cE1hcCk7CiAKLSAgICBPd25QdHI8UmFkaW9CdXR0b25Hcm91cD4mIGdyb3Vw
ID0gbV9uYW1lVG9Hcm91cE1hcC0+YWRkKGVsZW1lbnQtPm5hbWUoKS5pbXBsKCksIFBhc3NPd25Q
dHI8UmFkaW9CdXR0b25Hcm91cD4oKSkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBPd25QdHI8UmFk
aW9CdXR0b25Hcm91cD4mIGdyb3VwID0gbV9uYW1lVG9Hcm91cE1hcC0+YWRkKGVsZW1lbnQtPm5h
bWUoKS5pbXBsKCksIFBhc3NPd25QdHI8UmFkaW9CdXR0b25Hcm91cD4oKSkuaXRlcmF0b3ItPnZh
bHVlOwogICAgIGlmICghZ3JvdXApCiAgICAgICAgIGdyb3VwID0gUmFkaW9CdXR0b25Hcm91cDo6
Y3JlYXRlKCk7CiAgICAgZ3JvdXAtPmFkZChlbGVtZW50KTsKQEAgLTI0Nyw4ICsyNDcsOCBAQCB2
b2lkIENoZWNrZWRSYWRpb0J1dHRvbnM6OnJlbW92ZUJ1dHRvbihIVE1MSW5wdXRFbGVtZW50KiBl
bGVtZW50KQogICAgIE5hbWVUb0dyb3VwTWFwOjppdGVyYXRvciBpdCA9IG1fbmFtZVRvR3JvdXBN
YXAtPmZpbmQoZWxlbWVudC0+bmFtZSgpLmltcGwoKSk7CiAgICAgaWYgKGl0ID09IG1fbmFtZVRv
R3JvdXBNYXAtPmVuZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgaXQtPnNlY29uZC0+cmVtb3Zl
KGVsZW1lbnQpOwotICAgIGlmIChpdC0+c2Vjb25kLT5pc0VtcHR5KCkpIHsKKyAgICBpdC0+dmFs
dWUtPnJlbW92ZShlbGVtZW50KTsKKyAgICBpZiAoaXQtPnZhbHVlLT5pc0VtcHR5KCkpIHsKICAg
ICAgICAgLy8gRklYTUU6IFdlIG1heSBza2lwIGRlYWxsb2NhdGluZyB0aGUgZW1wdHkgUmFkaW9C
dXR0b25Hcm91cCBmb3IKICAgICAgICAgLy8gcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQuIElmIHdl
IGRvIHNvLCB3ZSBuZWVkIHRvIGNoYW5nZSB0aGUga2V5IHR5cGUKICAgICAgICAgLy8gb2YgbV9u
YW1lVG9Hcm91cE1hcCBmcm9tIEF0b21pY1N0cmluZ0ltcGwqIHRvIFJlZlB0cjxBdG9taWNTdHJp
bmdJbXBsPi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZExpc3RNdXRhdGlv
blNjb3BlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZExpc3RNdXRhdGlvblNjb3BlLmNw
cAppbmRleCA0NDc2MmJkYWFhMzYwOTBlZjRiNTE4Njg3NDQ1MWFlZTI2NWExMTQ3Li5lNzFkYWQw
ZDA0OGNlMGU2MmU5MzYwZTNlN2NmY2M0Y2UwYzg2ZjYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0NoaWxkTGlzdE11dGF0aW9uU2NvcGUuY3BwCkBAIC03MiwxMCArNzIsMTAgQEAgUGFzc1Jl
ZlB0cjxDaGlsZExpc3RNdXRhdGlvbkFjY3VtdWxhdG9yPiBDaGlsZExpc3RNdXRhdGlvbkFjY3Vt
dWxhdG9yOjpnZXRPckNyZWEKICAgICBBY2N1bXVsYXRvck1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9
IGFjY3VtdWxhdG9yTWFwKCkuYWRkKHRhcmdldCwgMCk7CiAgICAgUmVmUHRyPENoaWxkTGlzdE11
dGF0aW9uQWNjdW11bGF0b3I+IGFjY3VtdWxhdG9yOwogICAgIGlmICghcmVzdWx0LmlzTmV3RW50
cnkpCi0gICAgICAgIGFjY3VtdWxhdG9yID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAg
ICAgIGFjY3VtdWxhdG9yID0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAgICBlbHNlIHsKICAg
ICAgICAgYWNjdW11bGF0b3IgPSBhZG9wdFJlZihuZXcgQ2hpbGRMaXN0TXV0YXRpb25BY2N1bXVs
YXRvcih0YXJnZXQsIE11dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3VwOjpjcmVhdGVGb3JDaGls
ZExpc3RNdXRhdGlvbih0YXJnZXQpKSk7Ci0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25k
ID0gYWNjdW11bGF0b3IuZ2V0KCk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBh
Y2N1bXVsYXRvci5nZXQoKTsKICAgICB9CiAgICAgcmV0dXJuIGFjY3VtdWxhdG9yLnJlbGVhc2Uo
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IGY5OWU2MzkxY2NmNzZmOTc1MjY5NmM0
YWUyZjZhOGJlMzI3MmI5YWEuLjA3OTliMDM4MDQ1NzUzNTNlNjM3NDA3ZDczMzQxYmQ2ODRhZTAy
MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtNDQzMSwxMCArNDQzMSwxMCBAQCBQYXNz
UmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBEb2N1bWVudDo6d2luZG93TmFtZWRJdGVtcyhjb25zdCBB
dG9taWNTdHJpbmcmIG5hbWUpCiB7CiAgICAgTmFtZWRDb2xsZWN0aW9uTWFwOjpBZGRSZXN1bHQg
cmVzdWx0ID0gbV93aW5kb3dOYW1lZEl0ZW1Db2xsZWN0aW9ucy5hZGQobmFtZSwgMCk7CiAgICAg
aWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+
c2Vjb25kOworICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIAogICAgIFJl
ZlB0cjxIVE1MTmFtZUNvbGxlY3Rpb24+IGNvbGxlY3Rpb24gPSBIVE1MTmFtZUNvbGxlY3Rpb246
OmNyZWF0ZSh0aGlzLCBXaW5kb3dOYW1lZEl0ZW1zLCBuYW1lKTsKLSAgICByZXN1bHQuaXRlcmF0
b3ItPnNlY29uZCA9IGNvbGxlY3Rpb24uZ2V0KCk7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZSA9IGNvbGxlY3Rpb24uZ2V0KCk7CiAgICAgcmV0dXJuIGNvbGxlY3Rpb24ucmVsZWFzZSgpOwog
fQogCkBAIC00NDQyLDEwICs0NDQyLDEwIEBAIFBhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+IERv
Y3VtZW50Ojpkb2N1bWVudE5hbWVkSXRlbXMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lCiB7CiAg
ICAgTmFtZWRDb2xsZWN0aW9uTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9kb2N1bWVudE5hbWVk
SXRlbUNvbGxlY3Rpb25zLmFkZChuYW1lLCAwKTsKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5
KQotICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgIHJldHVy
biByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogCiAgICAgUmVmUHRyPEhUTUxOYW1lQ29sbGVjdGlv
bj4gY29sbGVjdGlvbiA9IEhUTUxOYW1lQ29sbGVjdGlvbjo6Y3JlYXRlKHRoaXMsIERvY3VtZW50
TmFtZWRJdGVtcywgbmFtZSk7Ci0gICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBjb2xsZWN0
aW9uLmdldCgpOworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBjb2xsZWN0aW9uLmdldCgp
OwogICAgIHJldHVybiBjb2xsZWN0aW9uLnJlbGVhc2UoKTsKIH0KIApAQCAtNDc4Myw3ICs0Nzgz
LDcgQEAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogRG9jdW1lbnQ6OmdldENTU0NhbnZhc0NvbnRl
eHQoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdAogCiBIVE1MQ2FudmFzRWxlbWVudCogRG9jdW1l
bnQ6OmdldENTU0NhbnZhc0VsZW1lbnQoY29uc3QgU3RyaW5nJiBuYW1lKQogewotICAgIFJlZlB0
cjxIVE1MQ2FudmFzRWxlbWVudD4mIGVsZW1lbnQgPSBtX2Nzc0NhbnZhc0VsZW1lbnRzLmFkZChu
YW1lLCAwKS5pdGVyYXRvci0+c2Vjb25kOworICAgIFJlZlB0cjxIVE1MQ2FudmFzRWxlbWVudD4m
IGVsZW1lbnQgPSBtX2Nzc0NhbnZhc0VsZW1lbnRzLmFkZChuYW1lLCAwKS5pdGVyYXRvci0+dmFs
dWU7CiAgICAgaWYgKCFlbGVtZW50KQogICAgICAgICBlbGVtZW50ID0gSFRNTENhbnZhc0VsZW1l
bnQ6OmNyZWF0ZSh0aGlzKTsKICAgICByZXR1cm4gZWxlbWVudC5nZXQoKTsKQEAgLTU5NDMsMTkg
KzU5NDMsMTkgQEAgUGFzc1JlZlB0cjxFbGVtZW50QXR0cmlidXRlRGF0YT4gRG9jdW1lbnQ6OmNh
Y2hlZEltbXV0YWJsZUF0dHJpYnV0ZURhdGEoY29uc3QgRWwKICAgICB1bnNpZ25lZCBjYWNoZUhh
c2ggPSBjYWNoZUtleS5oYXNoKCk7CiAKICAgICBJbW11dGFibGVBdHRyaWJ1dGVEYXRhQ2FjaGU6
Oml0ZXJhdG9yIGNhY2hlSXRlcmF0b3IgPSBtX2ltbXV0YWJsZUF0dHJpYnV0ZURhdGFDYWNoZS5h
ZGQoY2FjaGVIYXNoLCBudWxscHRyKS5pdGVyYXRvcjsKLSAgICBpZiAoY2FjaGVJdGVyYXRvci0+
c2Vjb25kICYmIGNhY2hlSXRlcmF0b3ItPnNlY29uZC0+a2V5ICE9IGNhY2hlS2V5KQorICAgIGlm
IChjYWNoZUl0ZXJhdG9yLT52YWx1ZSAmJiBjYWNoZUl0ZXJhdG9yLT52YWx1ZS0+a2V5ICE9IGNh
Y2hlS2V5KQogICAgICAgICBjYWNoZUhhc2ggPSAwOwogCiAgICAgUmVmUHRyPEVsZW1lbnRBdHRy
aWJ1dGVEYXRhPiBhdHRyaWJ1dGVEYXRhOwotICAgIGlmIChjYWNoZUhhc2ggJiYgY2FjaGVJdGVy
YXRvci0+c2Vjb25kKQotICAgICAgICBhdHRyaWJ1dGVEYXRhID0gY2FjaGVJdGVyYXRvci0+c2Vj
b25kLT52YWx1ZTsKKyAgICBpZiAoY2FjaGVIYXNoICYmIGNhY2hlSXRlcmF0b3ItPnZhbHVlKQor
ICAgICAgICBhdHRyaWJ1dGVEYXRhID0gY2FjaGVJdGVyYXRvci0+dmFsdWUtPnZhbHVlOwogICAg
IGVsc2UKICAgICAgICAgYXR0cmlidXRlRGF0YSA9IEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpjcmVh
dGVJbW11dGFibGUoYXR0cmlidXRlcyk7CiAKLSAgICBpZiAoIWNhY2hlSGFzaCB8fCBjYWNoZUl0
ZXJhdG9yLT5zZWNvbmQpCisgICAgaWYgKCFjYWNoZUhhc2ggfHwgY2FjaGVJdGVyYXRvci0+dmFs
dWUpCiAgICAgICAgIHJldHVybiBhdHRyaWJ1dGVEYXRhLnJlbGVhc2UoKTsKIAotICAgIGNhY2hl
SXRlcmF0b3ItPnNlY29uZCA9IGFkb3B0UHRyKG5ldyBJbW11dGFibGVBdHRyaWJ1dGVEYXRhQ2Fj
aGVFbnRyeShJbW11dGFibGVBdHRyaWJ1dGVEYXRhQ2FjaGVLZXkoZWxlbWVudC0+dGFnUU5hbWUo
KSwgYXR0cmlidXRlRGF0YS0+aW1tdXRhYmxlQXR0cmlidXRlQXJyYXkoKSwgYXR0cmlidXRlRGF0
YS0+bGVuZ3RoKCkpLCBhdHRyaWJ1dGVEYXRhKSk7CisgICAgY2FjaGVJdGVyYXRvci0+dmFsdWUg
PSBhZG9wdFB0cihuZXcgSW1tdXRhYmxlQXR0cmlidXRlRGF0YUNhY2hlRW50cnkoSW1tdXRhYmxl
QXR0cmlidXRlRGF0YUNhY2hlS2V5KGVsZW1lbnQtPnRhZ1FOYW1lKCksIGF0dHJpYnV0ZURhdGEt
PmltbXV0YWJsZUF0dHJpYnV0ZUFycmF5KCksIGF0dHJpYnV0ZURhdGEtPmxlbmd0aCgpKSwgYXR0
cmlidXRlRGF0YSkpOwogCiAgICAgcmV0dXJuIGF0dHJpYnV0ZURhdGEucmVsZWFzZSgpOwogfQpA
QCAtNTk3Miw4ICs1OTcyLDggQEAgTG9jYWxpemVyJiBEb2N1bWVudDo6Z2V0Q2FjaGVkTG9jYWxp
emVyKGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlKQogICAgICAgICBsb2NhbGVLZXkgPSBkZWZh
dWx0TGFuZ3VhZ2UoKTsKICAgICBMb2NhbGVUb0xvY2FsaXplck1hcDo6QWRkUmVzdWx0IHJlc3Vs
dCA9IG1fbG9jYWxpemVyQ2FjaGUuYWRkKGxvY2FsZUtleSwgbnVsbHB0cik7CiAgICAgaWYgKHJl
c3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IExvY2Fs
aXplcjo6Y3JlYXRlKGxvY2FsZUtleSk7Ci0gICAgcmV0dXJuICoocmVzdWx0Lml0ZXJhdG9yLT5z
ZWNvbmQpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gTG9jYWxpemVyOjpjcmVh
dGUobG9jYWxlS2V5KTsKKyAgICByZXR1cm4gKihyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyLmNwcAppbmRleCBhM2ViYzkzNjkzMjVhNDdiMmU2MjkyODY5NjBi
NGQ2ZmViYzJmMGFlLi5iMmYwMDg5NTRmZTdlYTBlNjcwZGI3MTViNjM1M2QyNTNiYTI5NWEzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcApA
QCAtMzExLDcgKzMxMSw3IEBAIERvY3VtZW50TWFya2VyKiBEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXI6Om1hcmtlckNvbnRhaW5pbmdQb2ludChjb25zdCBMYXlvdXRQb2luCiAgICAgTWFya2VyTWFw
OjppdGVyYXRvciBlbmQgPSBtX21hcmtlcnMuZW5kKCk7CiAgICAgZm9yIChNYXJrZXJNYXA6Oml0
ZXJhdG9yIG5vZGVJdGVyYXRvciA9IG1fbWFya2Vycy5iZWdpbigpOyBub2RlSXRlcmF0b3IgIT0g
ZW5kOyArK25vZGVJdGVyYXRvcikgewogICAgICAgICAvLyBpbm5lciBsb29wOyBwcm9jZXNzIGVh
Y2ggbWFya2VyIGluIHRoaXMgbm9kZQotICAgICAgICBNYXJrZXJMaXN0KiBsaXN0ID0gbm9kZUl0
ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgIE1hcmtlckxpc3QqIGxpc3QgPSBub2RlSXRlcmF0b3It
PnZhbHVlOwogICAgICAgICB1bnNpZ25lZCBtYXJrZXJDb3VudCA9IGxpc3QtPnNpemUoKTsKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBtYXJrZXJJbmRleCA9IDA7IG1hcmtlckluZGV4IDwgbWFya2Vy
Q291bnQ7ICsrbWFya2VySW5kZXgpIHsKICAgICAgICAgICAgIFJlbmRlcmVkRG9jdW1lbnRNYXJr
ZXImIG1hcmtlciA9IGxpc3QtPmF0KG1hcmtlckluZGV4KTsKQEAgLTM5OSw3ICszOTksNyBAQCBW
ZWN0b3I8SW50UmVjdD4gRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW5kZXJlZFJlY3RzRm9y
TWFya2VycyhEb2N1bWVudE1hcmtlcgogICAgIE1hcmtlck1hcDo6aXRlcmF0b3IgZW5kID0gbV9t
YXJrZXJzLmVuZCgpOwogICAgIGZvciAoTWFya2VyTWFwOjppdGVyYXRvciBub2RlSXRlcmF0b3Ig
PSBtX21hcmtlcnMuYmVnaW4oKTsgbm9kZUl0ZXJhdG9yICE9IGVuZDsgKytub2RlSXRlcmF0b3Ip
IHsKICAgICAgICAgLy8gaW5uZXIgbG9vcDsgcHJvY2VzcyBlYWNoIG1hcmtlciBpbiB0aGlzIG5v
ZGUKLSAgICAgICAgTWFya2VyTGlzdCogbGlzdCA9IG5vZGVJdGVyYXRvci0+c2Vjb25kOworICAg
ICAgICBNYXJrZXJMaXN0KiBsaXN0ID0gbm9kZUl0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgdW5z
aWduZWQgbWFya2VyQ291bnQgPSBsaXN0LT5zaXplKCk7CiAgICAgICAgIGZvciAodW5zaWduZWQg
bWFya2VySW5kZXggPSAwOyBtYXJrZXJJbmRleCA8IG1hcmtlckNvdW50OyArK21hcmtlckluZGV4
KSB7CiAgICAgICAgICAgICBjb25zdCBSZW5kZXJlZERvY3VtZW50TWFya2VyJiBtYXJrZXIgPSBs
aXN0LT5hdChtYXJrZXJJbmRleCk7CkBAIC00MjYsNyArNDI2LDcgQEAgdm9pZCBEb2N1bWVudE1h
cmtlckNvbnRyb2xsZXI6OnJlbW92ZU1hcmtlcnMoTm9kZSogbm9kZSwgRG9jdW1lbnRNYXJrZXI6
Ok1hcmtlclQKICAgICAKICAgICBNYXJrZXJNYXA6Oml0ZXJhdG9yIGl0ZXJhdG9yID0gbV9tYXJr
ZXJzLmZpbmQobm9kZSk7CiAgICAgaWYgKGl0ZXJhdG9yICE9IG1fbWFya2Vycy5lbmQoKSkKLSAg
ICAgICAgcmVtb3ZlTWFya2Vyc0Zyb21MaXN0KG5vZGUsIGl0ZXJhdG9yLT5zZWNvbmQsIG1hcmtl
clR5cGVzKTsKKyAgICAgICAgcmVtb3ZlTWFya2Vyc0Zyb21MaXN0KG5vZGUsIGl0ZXJhdG9yLT52
YWx1ZSwgbWFya2VyVHlwZXMpOwogfQogCiB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6
cmVtb3ZlTWFya2VycyhEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZXMgbWFya2VyVHlwZXMpCkBA
IC00MzksNyArNDM5LDcgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbW92ZU1h
cmtlcnMoRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGVzIG1hcmtlclQKICAgICBNYXJrZXJNYXAg
bWFya2VyTWFwQ29weSA9IG1fbWFya2VyczsKICAgICBNYXJrZXJNYXA6Oml0ZXJhdG9yIGVuZCA9
IG1hcmtlck1hcENvcHkuZW5kKCk7CiAgICAgZm9yIChNYXJrZXJNYXA6Oml0ZXJhdG9yIGkgPSBt
YXJrZXJNYXBDb3B5LmJlZ2luKCk7IGkgIT0gZW5kOyArK2kpCi0gICAgICAgIHJlbW92ZU1hcmtl
cnNGcm9tTGlzdChpLT5maXJzdC5nZXQoKSwgaS0+c2Vjb25kLCBtYXJrZXJUeXBlcyk7CisgICAg
ICAgIHJlbW92ZU1hcmtlcnNGcm9tTGlzdChpLT5rZXkuZ2V0KCksIGktPnZhbHVlLCBtYXJrZXJU
eXBlcyk7CiAgICAgbV9wb3NzaWJseUV4aXN0aW5nTWFya2VyVHlwZXMucmVtb3ZlKG1hcmtlclR5
cGVzKTsKIH0KIApAQCAtNDk1LDEwICs0OTUsMTAgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRy
b2xsZXI6OnJlcGFpbnRNYXJrZXJzKERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlcyBtYXJrZXIK
ICAgICAvLyBvdXRlciBsb29wOiBwcm9jZXNzIGVhY2ggbWFya2VyZWQgbm9kZSBpbiB0aGUgZG9j
dW1lbnQKICAgICBNYXJrZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fbWFya2Vycy5lbmQoKTsKICAg
ICBmb3IgKE1hcmtlck1hcDo6aXRlcmF0b3IgaSA9IG1fbWFya2Vycy5iZWdpbigpOyBpICE9IGVu
ZDsgKytpKSB7Ci0gICAgICAgIE5vZGUqIG5vZGUgPSBpLT5maXJzdC5nZXQoKTsKKyAgICAgICAg
Tm9kZSogbm9kZSA9IGktPmtleS5nZXQoKTsKIAogICAgICAgICAvLyBpbm5lciBsb29wOiBwcm9j
ZXNzIGVhY2ggbWFya2VyIGluIHRoZSBjdXJyZW50IG5vZGUKLSAgICAgICAgTWFya2VyTGlzdCog
bGlzdCA9IGktPnNlY29uZDsKKyAgICAgICAgTWFya2VyTGlzdCogbGlzdCA9IGktPnZhbHVlOwog
ICAgICAgICBib29sIG5vZGVOZWVkc1JlcGFpbnQgPSBmYWxzZTsKICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgIT0gbGlzdC0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIERvY3VtZW50
TWFya2VyIG1hcmtlciA9IGxpc3QtPmF0KGkpOwpAQCAtNTI2LDcgKzUyNiw3IEBAIHZvaWQgRG9j
dW1lbnRNYXJrZXJDb250cm9sbGVyOjppbnZhbGlkYXRlUmVuZGVyZWRSZWN0c0Zvck1hcmtlcnNJ
blJlY3QoY29uc3QgTGF5CiAgICAgZm9yIChNYXJrZXJNYXA6Oml0ZXJhdG9yIGkgPSBtX21hcmtl
cnMuYmVnaW4oKTsgaSAhPSBlbmQ7ICsraSkgewogCiAgICAgICAgIC8vIGlubmVyIGxvb3A6IHBy
b2Nlc3MgZWFjaCByZWN0IGluIHRoZSBjdXJyZW50IG5vZGUKLSAgICAgICAgTWFya2VyTGlzdCog
bGlzdCA9IGktPnNlY29uZDsKKyAgICAgICAgTWFya2VyTGlzdCogbGlzdCA9IGktPnZhbHVlOwog
ICAgICAgICBmb3IgKHNpemVfdCBsaXN0SW5kZXggPSAwOyBsaXN0SW5kZXggPCBsaXN0LT5zaXpl
KCk7ICsrbGlzdEluZGV4KQogICAgICAgICAgICAgbGlzdC0+YXQobGlzdEluZGV4KS5pbnZhbGlk
YXRlKHIpOwogICAgIH0KQEAgLTY3NSw5ICs2NzUsOSBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29u
dHJvbGxlcjo6c2hvd01hcmtlcnMoKSBjb25zdAogICAgIGZwcmludGYoc3RkZXJyLCAiJWQgbm9k
ZXMgaGF2ZSBtYXJrZXJzOlxuIiwgbV9tYXJrZXJzLnNpemUoKSk7CiAgICAgTWFya2VyTWFwOjpj
b25zdF9pdGVyYXRvciBlbmQgPSBtX21hcmtlcnMuZW5kKCk7CiAgICAgZm9yIChNYXJrZXJNYXA6
OmNvbnN0X2l0ZXJhdG9yIG5vZGVJdGVyYXRvciA9IG1fbWFya2Vycy5iZWdpbigpOyBub2RlSXRl
cmF0b3IgIT0gZW5kOyArK25vZGVJdGVyYXRvcikgewotICAgICAgICBOb2RlKiBub2RlID0gbm9k
ZUl0ZXJhdG9yLT5maXJzdC5nZXQoKTsKKyAgICAgICAgTm9kZSogbm9kZSA9IG5vZGVJdGVyYXRv
ci0+a2V5LmdldCgpOwogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVwIiwgbm9kZSk7Ci0gICAg
ICAgIE1hcmtlckxpc3QqIGxpc3QgPSBub2RlSXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgTWFy
a2VyTGlzdCogbGlzdCA9IG5vZGVJdGVyYXRvci0+dmFsdWU7CiAgICAgICAgIGZvciAodW5zaWdu
ZWQgbWFya2VySW5kZXggPSAwOyBtYXJrZXJJbmRleCA8IGxpc3QtPnNpemUoKTsgKyttYXJrZXJJ
bmRleCkgewogICAgICAgICAgICAgY29uc3QgRG9jdW1lbnRNYXJrZXImIG1hcmtlciA9IGxpc3Qt
PmF0KG1hcmtlckluZGV4KTsKICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiICVkOlslZDol
ZF0oJWQpIiwgbWFya2VyLnR5cGUoKSwgbWFya2VyLnN0YXJ0T2Zmc2V0KCksIG1hcmtlci5lbmRP
ZmZzZXQoKSwgbWFya2VyLmFjdGl2ZU1hdGNoKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50T3JkZXJlZE1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnRPcmRlcmVkTWFwLmNwcAppbmRleCAwODJhYTA3NDBhNzFjY2RmNTBlMWQ0MmQyM2QzMTdlNjNh
ZjJmNGRhLi4xMjk3ZTUxMDJmYjRlNzljZTNkYjExMjM1NzAyMWUzZGQwNTU0YTUxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRPcmRlcmVkTWFwLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnRPcmRlcmVkTWFwLmNwcApAQCAtOTgsNyArOTgsNyBAQCB2
b2lkIERvY3VtZW50T3JkZXJlZE1hcDo6cmVtb3ZlKEF0b21pY1N0cmluZ0ltcGwqIGtleSwgRWxl
bWVudCogZWxlbWVudCkKIAogICAgIG1fbWFwLmNoZWNrQ29uc2lzdGVuY3koKTsKICAgICBNYXA6
Oml0ZXJhdG9yIGNhY2hlZEl0ZW0gPSBtX21hcC5maW5kKGtleSk7Ci0gICAgaWYgKGNhY2hlZEl0
ZW0gIT0gbV9tYXAuZW5kKCkgJiYgY2FjaGVkSXRlbS0+c2Vjb25kID09IGVsZW1lbnQpCisgICAg
aWYgKGNhY2hlZEl0ZW0gIT0gbV9tYXAuZW5kKCkgJiYgY2FjaGVkSXRlbS0+dmFsdWUgPT0gZWxl
bWVudCkKICAgICAgICAgbV9tYXAucmVtb3ZlKGNhY2hlZEl0ZW0pOwogICAgIGVsc2UKICAgICAg
ICAgbV9kdXBsaWNhdGVDb3VudHMucmVtb3ZlKGtleSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5jcHAKaW5kZXggYzczNzc5MmJiYzIx
YjFjYWQ3ZjNjODAzNWM4MjU3YjA3NWFjNzkyZC4uODRjYjhmY2U5N2NhNmI2MzFkZTU4NzBlYjQw
NDk3ZTllZWNlYTM2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50U3R5
bGVTaGVldENvbGxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudFN0
eWxlU2hlZXRDb2xsZWN0aW9uLmNwcApAQCAtMTUyLDcgKzE1Miw3IEBAIGNvbnN0IFZlY3RvcjxS
ZWZQdHI8Q1NTU3R5bGVTaGVldD4gPiogRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6cGFn
ZUdyb3VwVXNlCiAKICAgICBVc2VyU3R5bGVTaGVldE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
c2hlZXRzTWFwLT5lbmQoKTsKICAgICBmb3IgKFVzZXJTdHlsZVNoZWV0TWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IHNoZWV0c01hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAg
IGNvbnN0IFVzZXJTdHlsZVNoZWV0VmVjdG9yKiBzaGVldHMgPSBpdC0+c2Vjb25kLmdldCgpOwor
ICAgICAgICBjb25zdCBVc2VyU3R5bGVTaGVldFZlY3Rvciogc2hlZXRzID0gaXQtPnZhbHVlLmdl
dCgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2hlZXRzLT5zaXplKCk7ICsr
aSkgewogICAgICAgICAgICAgY29uc3QgVXNlclN0eWxlU2hlZXQqIHNoZWV0ID0gc2hlZXRzLT5h
dChpKS5nZXQoKTsKICAgICAgICAgICAgIGlmIChzaGVldC0+aW5qZWN0ZWRGcmFtZXMoKSA9PSBJ
bmplY3RJblRvcEZyYW1lT25seSAmJiBtX2RvY3VtZW50LT5vd25lckVsZW1lbnQoKSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50QXR0cmlidXRlRGF0YS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRWxlbWVudEF0dHJpYnV0ZURhdGEuY3BwCmluZGV4IDVhN2YzNDEyNTRh
ODY1YTU1MjM3MDU1YTNiZGJkZmM5ZjI0Y2VkZDUuLmUwNGI2NjMwMTgyM2YwZmQ3MTFlNzgzMGE3
MGNmMTcyYzZhMDQ5NTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50QXR0
cmlidXRlRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRBdHRyaWJ1dGVE
YXRhLmNwcApAQCAtMTE1LDcgKzExNSw3IEBAIHN0YXRpYyBBdHRyTGlzdCogZW5zdXJlQXR0ckxp
c3RGb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgQVNTRVJUKCFhdHRyTGlzdE1hcCgp
LmNvbnRhaW5zKGVsZW1lbnQpKTsKICAgICBlbGVtZW50LT5zZXRIYXNBdHRyTGlzdCgpOwogICAg
IEF0dHJMaXN0TWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gYXR0ckxpc3RNYXAoKS5hZGQoZWxlbWVu
dCwgYWRvcHRQdHIobmV3IEF0dHJMaXN0KSk7Ci0gICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+
c2Vjb25kLmdldCgpOworICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpOwog
fQogCiBzdGF0aWMgdm9pZCByZW1vdmVBdHRyTGlzdEZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVu
dCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAKaW5kZXggMzIxMGJjZWQ2NTc5
OGIzZTVmNzkxMTAyNjhmYTE3ZDFiNjE1YjU2Yy4uZTI5OTk1NjVkZjk4Mjc3Y2YwMzNmYWM3YmNk
MDYzNjAzNzZhMzRiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0
Y2hlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAKQEAg
LTExMSw3ICsxMTEsNyBAQCBFdmVudFRhcmdldCogRXZlbnRSZWxhdGVkVGFyZ2V0QWRqdXN0ZXI6
OmZpbmRSZWxhdGVkVGFyZ2V0KFRyZWVTY29wZSogc2NvcGUpCiAgICAgICAgIHBhcmVudFRyZWVT
Y29wZXMuYXBwZW5kKHNjb3BlKTsKICAgICAgICAgUmVsYXRlZFRhcmdldE1hcDo6Y29uc3RfaXRl
cmF0b3IgZm91bmQgPSBtX3JlbGF0ZWRUYXJnZXRNYXAuZmluZChzY29wZSk7CiAgICAgICAgIGlm
IChmb3VuZCAhPSBtX3JlbGF0ZWRUYXJnZXRNYXAuZW5kKCkpIHsKLSAgICAgICAgICAgIHJlbGF0
ZWRUYXJnZXQgPSBmb3VuZC0+c2Vjb25kOworICAgICAgICAgICAgcmVsYXRlZFRhcmdldCA9IGZv
dW5kLT52YWx1ZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIHNjb3Bl
ID0gc2NvcGUtPnBhcmVudFRyZWVTY29wZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL0lkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vSWRU
YXJnZXRPYnNlcnZlclJlZ2lzdHJ5LmNwcAppbmRleCA1ZmMyNmFjZmVlMzMyZWI3ZDJkNjE5YmE1
OTIwYzczM2Y1YmIwZjcwLi5hYWZhOGEyZDFiNTMwYjdkMGYzZTM2NzA1NThlOGM5NmI5NDhhZmI4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vSWRUYXJnZXRPYnNlcnZlclJlZ2lzdHJ5
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vSWRUYXJnZXRPYnNlcnZlclJlZ2lzdHJ5LmNw
cApAQCAtNDIsOSArNDIsOSBAQCB2b2lkIElkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeTo6YWRkT2Jz
ZXJ2ZXIoY29uc3QgQXRvbWljU3RyaW5nJiBpZCwgSWRUYXJnZXRPYnNlcgogICAgIAogICAgIElk
VG9PYnNlcnZlclNldE1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fcmVnaXN0cnkuYWRkKGlkLmlt
cGwoKSwgbnVsbHB0cik7CiAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXN1
bHQuaXRlcmF0b3ItPnNlY29uZCA9IGFkb3B0UHRyKG5ldyBPYnNlcnZlclNldCgpKTsKKyAgICAg
ICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGFkb3B0UHRyKG5ldyBPYnNlcnZlclNldCgpKTsK
IAotICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLT5hZGQob2JzZXJ2ZXIpOworICAgIHJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUtPmFkZChvYnNlcnZlcik7CiB9CiAKIHZvaWQgSWRUYXJnZXRPYnNl
cnZlclJlZ2lzdHJ5OjpyZW1vdmVPYnNlcnZlcihjb25zdCBBdG9taWNTdHJpbmcmIGlkLCBJZFRh
cmdldE9ic2VydmVyKiBvYnNlcnZlcikKQEAgLTU0LDcgKzU0LDcgQEAgdm9pZCBJZFRhcmdldE9i
c2VydmVyUmVnaXN0cnk6OnJlbW92ZU9ic2VydmVyKGNvbnN0IEF0b21pY1N0cmluZyYgaWQsIElk
VGFyZ2V0T2IKIAogICAgIElkVG9PYnNlcnZlclNldE1hcDo6aXRlcmF0b3IgaXRlciA9IG1fcmVn
aXN0cnkuZmluZChpZC5pbXBsKCkpOwogCi0gICAgT2JzZXJ2ZXJTZXQqIHNldCA9IGl0ZXItPnNl
Y29uZC5nZXQoKTsKKyAgICBPYnNlcnZlclNldCogc2V0ID0gaXRlci0+dmFsdWUuZ2V0KCk7CiAg
ICAgc2V0LT5yZW1vdmUob2JzZXJ2ZXIpOwogICAgIGlmIChzZXQtPmlzRW1wdHkoKSAmJiBzZXQg
IT0gbV9ub3RpZnlpbmdPYnNlcnZlcnNJblNldCkKICAgICAgICAgbV9yZWdpc3RyeS5yZW1vdmUo
aXRlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25PYnNlcnZlcklu
dGVyZXN0R3JvdXAuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uT2JzZXJ2ZXJJbnRl
cmVzdEdyb3VwLmNwcAppbmRleCAyNGMwY2I1ODY1MTdlMDhiYzdhOGI0MDkzZjIxZDMxZTBkYjJk
NjRlLi40ZmFkMjIwODE4NTNjZDgxNTM0ZDMwMGQxNjFkODhiMWFhNWU5NGM4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25PYnNlcnZlckludGVyZXN0R3JvdXAuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cC5jcHAK
QEAgLTYyLDcgKzYyLDcgQEAgTXV0YXRpb25PYnNlcnZlckludGVyZXN0R3JvdXA6Ok11dGF0aW9u
T2JzZXJ2ZXJJbnRlcmVzdEdyb3VwKEhhc2hNYXA8TXV0YXRpb25PYnMKIGJvb2wgTXV0YXRpb25P
YnNlcnZlckludGVyZXN0R3JvdXA6OmlzT2xkVmFsdWVSZXF1ZXN0ZWQoKQogewogICAgIGZvciAo
SGFzaE1hcDxNdXRhdGlvbk9ic2VydmVyKiwgTXV0YXRpb25SZWNvcmREZWxpdmVyeU9wdGlvbnM+
OjppdGVyYXRvciBpdGVyID0gbV9vYnNlcnZlcnMuYmVnaW4oKTsgaXRlciAhPSBtX29ic2VydmVy
cy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIGlmIChoYXNPbGRWYWx1ZShpdGVyLT5zZWNvbmQp
KQorICAgICAgICBpZiAoaGFzT2xkVmFsdWUoaXRlci0+dmFsdWUpKQogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKQEAgLTczLDggKzczLDggQEAgdm9p
ZCBNdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cDo6ZW5xdWV1ZU11dGF0aW9uUmVjb3JkKFBh
c3NSZWZQdHI8TXV0YXRpb25SZWMKICAgICBSZWZQdHI8TXV0YXRpb25SZWNvcmQ+IG11dGF0aW9u
ID0gcHJwTXV0YXRpb247CiAgICAgUmVmUHRyPE11dGF0aW9uUmVjb3JkPiBtdXRhdGlvbldpdGhO
dWxsT2xkVmFsdWU7CiAgICAgZm9yIChIYXNoTWFwPE11dGF0aW9uT2JzZXJ2ZXIqLCBNdXRhdGlv
blJlY29yZERlbGl2ZXJ5T3B0aW9ucz46Oml0ZXJhdG9yIGl0ZXIgPSBtX29ic2VydmVycy5iZWdp
bigpOyBpdGVyICE9IG1fb2JzZXJ2ZXJzLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgTXV0YXRp
b25PYnNlcnZlciogb2JzZXJ2ZXIgPSBpdGVyLT5maXJzdDsKLSAgICAgICAgaWYgKGhhc09sZFZh
bHVlKGl0ZXItPnNlY29uZCkpIHsKKyAgICAgICAgTXV0YXRpb25PYnNlcnZlciogb2JzZXJ2ZXIg
PSBpdGVyLT5rZXk7CisgICAgICAgIGlmIChoYXNPbGRWYWx1ZShpdGVyLT52YWx1ZSkpIHsKICAg
ICAgICAgICAgIG9ic2VydmVyLT5lbnF1ZXVlTXV0YXRpb25SZWNvcmQobXV0YXRpb24pOwogICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAppbmRleCA4M2UxNGI4
Mjc3NTQ4OTRkYmNmYmIxNDM0Yzk3MjJmYWY4N2Q2ZjdjLi4xNDA4NmIzMDFmZDYwYzk3YmI4MTcx
ZmM5ZGI5ODI1M2YzOWIwMmM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCkBAIC0xOTEsNyArMTkxLDcgQEAg
dm9pZCBOb2RlOjpkdW1wU3RhdGlzdGljcygpCiAgICAgICAgICAgICAgICAgRWxlbWVudCogZWxl
bWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKTsKICAgICAgICAgICAgICAgICBIYXNo
TWFwPFN0cmluZywgc2l6ZV90Pjo6QWRkUmVzdWx0IHJlc3VsdCA9IHBlclRhZ0NvdW50LmFkZChl
bGVtZW50LT50YWdOYW1lKCksIDEpOwogICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmlzTmV3
RW50cnkpCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKys7Cisg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUrKzsKIAogICAgICAgICAg
ICAgICAgIGlmIChFbGVtZW50QXR0cmlidXRlRGF0YSogYXR0cmlidXRlRGF0YSA9IGVsZW1lbnQt
PmF0dHJpYnV0ZURhdGEoKSkgewogICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzICs9IGF0
dHJpYnV0ZURhdGEtPmxlbmd0aCgpOwpAQCAtMjc5LDcgKzI3OSw3IEBAIHZvaWQgTm9kZTo6ZHVt
cFN0YXRpc3RpY3MoKQogCiAgICAgcHJpbnRmKCJFbGVtZW50IHRhZyBuYW1lIGRpc3RpYnV0aW9u
OlxuIik7CiAgICAgZm9yIChIYXNoTWFwPFN0cmluZywgc2l6ZV90Pjo6aXRlcmF0b3IgaXQgPSBw
ZXJUYWdDb3VudC5iZWdpbigpOyBpdCAhPSBwZXJUYWdDb3VudC5lbmQoKTsgKytpdCkKLSAgICAg
ICAgcHJpbnRmKCIgIE51bWJlciBvZiA8JXM+IHRhZ3M6ICV6dVxuIiwgaXQtPmZpcnN0LnV0Zjgo
KS5kYXRhKCksIGl0LT5zZWNvbmQpOworICAgICAgICBwcmludGYoIiAgTnVtYmVyIG9mIDwlcz4g
dGFnczogJXp1XG4iLCBpdC0+a2V5LnV0ZjgoKS5kYXRhKCksIGl0LT52YWx1ZSk7CiAKICAgICBw
cmludGYoIkF0dHJpYnV0ZXM6XG4iKTsKICAgICBwcmludGYoIiAgTnVtYmVyIG9mIEF0dHJpYnV0
ZXMgKG5vbi1Ob2RlIGFuZCBOb2RlKTogJXp1IFslenVdXG4iLCBhdHRyaWJ1dGVzLCBzaXplb2Yo
QXR0cmlidXRlKSk7CkBAIC01MTUsNyArNTE1LDcgQEAgdm9pZCBOb2RlOjpjbGVhclJhcmVEYXRh
KCkKICAgICAgICAgTm9kZVJhcmVEYXRhOjpOb2RlUmFyZURhdGFNYXAmIGRhdGFNYXAgPSBOb2Rl
UmFyZURhdGE6OnJhcmVEYXRhTWFwKCk7CiAgICAgICAgIE5vZGVSYXJlRGF0YTo6Tm9kZVJhcmVE
YXRhTWFwOjppdGVyYXRvciBpdCA9IGRhdGFNYXAuZmluZCh0aGlzKTsKICAgICAgICAgQVNTRVJU
KGl0ICE9IGRhdGFNYXAuZW5kKCkpOwotICAgICAgICBkZWxldGUgaXQtPnNlY29uZDsKKyAgICAg
ICAgZGVsZXRlIGl0LT52YWx1ZTsKICAgICAgICAgZGF0YU1hcC5yZW1vdmUoaXQpOwogICAgIH0K
ICAgICBjbGVhckZsYWcoSGFzUmFyZURhdGFGbGFnKTsKQEAgLTIyNzYsMTggKzIyNzYsMTggQEAg
dm9pZCBOb2RlTGlzdHNOb2RlRGF0YTo6aW52YWxpZGF0ZUNhY2hlcyhjb25zdCBRdWFsaWZpZWRO
YW1lKiBhdHRyTmFtZSkKIHsKICAgICBOb2RlTGlzdEF0b21pY05hbWVDYWNoZU1hcDo6Y29uc3Rf
aXRlcmF0b3IgYXRvbWljTmFtZUNhY2hlRW5kID0gbV9hdG9taWNOYW1lQ2FjaGVzLmVuZCgpOwog
ICAgIGZvciAoTm9kZUxpc3RBdG9taWNOYW1lQ2FjaGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bV9hdG9taWNOYW1lQ2FjaGVzLmJlZ2luKCk7IGl0ICE9IGF0b21pY05hbWVDYWNoZUVuZDsgKytp
dCkKLSAgICAgICAgaXQtPnNlY29uZC0+aW52YWxpZGF0ZUNhY2hlKGF0dHJOYW1lKTsKKyAgICAg
ICAgaXQtPnZhbHVlLT5pbnZhbGlkYXRlQ2FjaGUoYXR0ck5hbWUpOwogCiAgICAgTm9kZUxpc3RO
YW1lQ2FjaGVNYXA6OmNvbnN0X2l0ZXJhdG9yIG5hbWVDYWNoZUVuZCA9IG1fbmFtZUNhY2hlcy5l
bmQoKTsKICAgICBmb3IgKE5vZGVMaXN0TmFtZUNhY2hlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9
IG1fbmFtZUNhY2hlcy5iZWdpbigpOyBpdCAhPSBuYW1lQ2FjaGVFbmQ7ICsraXQpCi0gICAgICAg
IGl0LT5zZWNvbmQtPmludmFsaWRhdGVDYWNoZShhdHRyTmFtZSk7CisgICAgICAgIGl0LT52YWx1
ZS0+aW52YWxpZGF0ZUNhY2hlKGF0dHJOYW1lKTsKIAogICAgIGlmIChhdHRyTmFtZSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgVGFnTm9kZUxpc3RDYWNoZU5TOjppdGVyYXRvciB0YWdDYWNoZUVu
ZCA9IG1fdGFnTm9kZUxpc3RDYWNoZU5TLmVuZCgpOwogICAgIGZvciAoVGFnTm9kZUxpc3RDYWNo
ZU5TOjppdGVyYXRvciBpdCA9IG1fdGFnTm9kZUxpc3RDYWNoZU5TLmJlZ2luKCk7IGl0ICE9IHRh
Z0NhY2hlRW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5pbnZhbGlkYXRlQ2FjaGUoKTsK
KyAgICAgICAgaXQtPnZhbHVlLT5pbnZhbGlkYXRlQ2FjaGUoKTsKIH0KIAogdm9pZCBOb2RlOjpn
ZXRTdWJyZXNvdXJjZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mIHVybHMpIGNvbnN0CkBAIC0yNDYy
LDcgKzI0NjIsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgY29sbGVjdE1hdGNoaW5nT2JzZXJ2ZXJz
Rm9yTXV0YXRpb24oSGFzaE1hcDxNdXRhdGlvbk9ic2VydmVyKgogICAgICAgICAgICAgTXV0YXRp
b25SZWNvcmREZWxpdmVyeU9wdGlvbnMgZGVsaXZlcnlPcHRpb25zID0gcmVnaXN0cmF0aW9uLmRl
bGl2ZXJ5T3B0aW9ucygpOwogICAgICAgICAgICAgSGFzaE1hcDxNdXRhdGlvbk9ic2VydmVyKiwg
TXV0YXRpb25SZWNvcmREZWxpdmVyeU9wdGlvbnM+OjpBZGRSZXN1bHQgcmVzdWx0ID0gb2JzZXJ2
ZXJzLmFkZChyZWdpc3RyYXRpb24ub2JzZXJ2ZXIoKSwgZGVsaXZlcnlPcHRpb25zKTsKICAgICAg
ICAgICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgICAgICAgICAgcmVzdWx0Lml0
ZXJhdG9yLT5zZWNvbmQgfD0gZGVsaXZlcnlPcHRpb25zOworICAgICAgICAgICAgICAgIHJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUgfD0gZGVsaXZlcnlPcHRpb25zOwogICAgICAgICB9CiAgICAgfQog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGVSYXJlRGF0YS5oIGIvU291cmNl
L1dlYkNvcmUvZG9tL05vZGVSYXJlRGF0YS5oCmluZGV4IDIwYjhkYmM3ZjMzOTJjYjM4NzllMGRk
OGZhM2I5Y2YyMjZjNjFhMDQuLjViM2E1ODNiMGQyMjllOGRiZWJlZTIxY2Q2NDJkYzJjNzcwZjM0
NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRhLmgKQEAgLTY4LDEwICs2OCwxMCBAQCBwdWJs
aWM6CiAgICAgewogICAgICAgICBOb2RlTGlzdEF0b21pY05hbWVDYWNoZU1hcDo6QWRkUmVzdWx0
IHJlc3VsdCA9IG1fYXRvbWljTmFtZUNhY2hlcy5hZGQobmFtZWROb2RlTGlzdEtleShsaXN0VHlw
ZSwgbmFtZSksIDApOwogICAgICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFQqPihyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7CisgICAg
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VCo+KHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwog
CiAgICAgICAgIFJlZlB0cjxUPiBsaXN0ID0gVDo6Y3JlYXRlKG5vZGUsIG5hbWUpOwotICAgICAg
ICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IGxpc3QuZ2V0KCk7CisgICAgICAgIHJlc3VsdC5p
dGVyYXRvci0+dmFsdWUgPSBsaXN0LmdldCgpOwogICAgICAgICByZXR1cm4gbGlzdC5yZWxlYXNl
KCk7CiAgICAgfQogCkBAIC04MCwxMCArODAsMTAgQEAgcHVibGljOgogICAgIHsKICAgICAgICAg
Tm9kZUxpc3ROYW1lQ2FjaGVNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX25hbWVDYWNoZXMuYWRk
KG5hbWVkTm9kZUxpc3RLZXkobGlzdFR5cGUsIG5hbWUpLCAwKTsKICAgICAgICAgaWYgKCFyZXN1
bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUKj4ocmVzdWx0
Lml0ZXJhdG9yLT5zZWNvbmQpOworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQqPihy
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKIAogICAgICAgICBSZWZQdHI8VD4gbGlzdCA9IFQ6OmNy
ZWF0ZShub2RlLCBuYW1lKTsKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBsaXN0
LmdldCgpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gbGlzdC5nZXQoKTsKICAg
ICAgICAgcmV0dXJuIGxpc3QucmVsZWFzZSgpOwogICAgIH0KIApAQCAtOTIsMTAgKzkyLDEwIEBA
IHB1YmxpYzoKICAgICAgICAgUXVhbGlmaWVkTmFtZSBuYW1lKG51bGxBdG9tLCBsb2NhbE5hbWUs
IG5hbWVzcGFjZVVSSSk7CiAgICAgICAgIFRhZ05vZGVMaXN0Q2FjaGVOUzo6QWRkUmVzdWx0IHJl
c3VsdCA9IG1fdGFnTm9kZUxpc3RDYWNoZU5TLmFkZChuYW1lLCAwKTsKICAgICAgICAgaWYgKCFy
ZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnNl
Y29uZDsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogCiAgICAg
ICAgIFJlZlB0cjxUYWdOb2RlTGlzdD4gbGlzdCA9IFRhZ05vZGVMaXN0OjpjcmVhdGUobm9kZSwg
bmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUpOwotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29u
ZCA9IGxpc3QuZ2V0KCk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBsaXN0Lmdl
dCgpOwogICAgICAgICByZXR1cm4gbGlzdC5yZWxlYXNlKCk7CiAgICAgfQogCkBAIC0xMzYsMjEg
KzEzNiwyMSBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChvbGREb2N1bWVudCAhPSBuZXdEb2N1bWVu
dCkgewogICAgICAgICAgICAgTm9kZUxpc3RBdG9taWNOYW1lQ2FjaGVNYXA6OmNvbnN0X2l0ZXJh
dG9yIGF0b21pY05hbWVDYWNoZUVuZCA9IG1fYXRvbWljTmFtZUNhY2hlcy5lbmQoKTsKICAgICAg
ICAgICAgIGZvciAoTm9kZUxpc3RBdG9taWNOYW1lQ2FjaGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV9hdG9taWNOYW1lQ2FjaGVzLmJlZ2luKCk7IGl0ICE9IGF0b21pY05hbWVDYWNoZUVuZDsg
KytpdCkgewotICAgICAgICAgICAgICAgIER5bmFtaWNTdWJ0cmVlTm9kZUxpc3QqIGxpc3QgPSBp
dC0+c2Vjb25kOworICAgICAgICAgICAgICAgIER5bmFtaWNTdWJ0cmVlTm9kZUxpc3QqIGxpc3Qg
PSBpdC0+dmFsdWU7CiAgICAgICAgICAgICAgICAgb2xkRG9jdW1lbnQtPnVucmVnaXN0ZXJOb2Rl
TGlzdENhY2hlKGxpc3QpOwogICAgICAgICAgICAgICAgIG5ld0RvY3VtZW50LT5yZWdpc3Rlck5v
ZGVMaXN0Q2FjaGUobGlzdCk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIE5vZGVMaXN0
TmFtZUNhY2hlTWFwOjpjb25zdF9pdGVyYXRvciBuYW1lQ2FjaGVFbmQgPSBtX25hbWVDYWNoZXMu
ZW5kKCk7CiAgICAgICAgICAgICBmb3IgKE5vZGVMaXN0TmFtZUNhY2hlTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IG1fbmFtZUNhY2hlcy5iZWdpbigpOyBpdCAhPSBuYW1lQ2FjaGVFbmQ7ICsraXQp
IHsKLSAgICAgICAgICAgICAgICBEeW5hbWljU3VidHJlZU5vZGVMaXN0KiBsaXN0ID0gaXQtPnNl
Y29uZDsKKyAgICAgICAgICAgICAgICBEeW5hbWljU3VidHJlZU5vZGVMaXN0KiBsaXN0ID0gaXQt
PnZhbHVlOwogICAgICAgICAgICAgICAgIG9sZERvY3VtZW50LT51bnJlZ2lzdGVyTm9kZUxpc3RD
YWNoZShsaXN0KTsKICAgICAgICAgICAgICAgICBuZXdEb2N1bWVudC0+cmVnaXN0ZXJOb2RlTGlz
dENhY2hlKGxpc3QpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBUYWdOb2RlTGlzdENh
Y2hlTlM6OmNvbnN0X2l0ZXJhdG9yIHRhZ0VuZCA9IG1fdGFnTm9kZUxpc3RDYWNoZU5TLmVuZCgp
OwogICAgICAgICAgICAgZm9yIChUYWdOb2RlTGlzdENhY2hlTlM6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV90YWdOb2RlTGlzdENhY2hlTlMuYmVnaW4oKTsgaXQgIT0gdGFnRW5kOyArK2l0KSB7Ci0g
ICAgICAgICAgICAgICAgRHluYW1pY1N1YnRyZWVOb2RlTGlzdCogbGlzdCA9IGl0LT5zZWNvbmQ7
CisgICAgICAgICAgICAgICAgRHluYW1pY1N1YnRyZWVOb2RlTGlzdCogbGlzdCA9IGl0LT52YWx1
ZTsKICAgICAgICAgICAgICAgICBBU1NFUlQoIWxpc3QtPmlzUm9vdGVkQXREb2N1bWVudCgpKTsK
ICAgICAgICAgICAgICAgICBvbGREb2N1bWVudC0+dW5yZWdpc3Rlck5vZGVMaXN0Q2FjaGUobGlz
dCk7CiAgICAgICAgICAgICAgICAgbmV3RG9jdW1lbnQtPnJlZ2lzdGVyTm9kZUxpc3RDYWNoZShs
aXN0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rp
b24uY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHAKaW5k
ZXggNjc1OWJlY2JjNmFkYTQyOGFlZDY3MjIzZDAyM2Y4NGM5NWU5NWU5Yi4uNGJjYTFkMWViOTVl
YmFhZWMxMGFkMTM4ZmNjNmQxZmViM2Y2ZjZiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1By
b2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHAKQEAgLTExOCw3ICsxMTgsNyBAQCB2b2lkIFByb2Nlc3Np
bmdJbnN0cnVjdGlvbjo6Y2hlY2tTdHlsZVNoZWV0KCkKICAgICAgICAgSGFzaE1hcDxTdHJpbmcs
IFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGkgPSBhdHRycy5maW5kKCJ0eXBlIik7CiAgICAgICAg
IFN0cmluZyB0eXBlOwogICAgICAgICBpZiAoaSAhPSBhdHRycy5lbmQoKSkKLSAgICAgICAgICAg
IHR5cGUgPSBpLT5zZWNvbmQ7CisgICAgICAgICAgICB0eXBlID0gaS0+dmFsdWU7CiAKICAgICAg
ICAgbV9pc0NTUyA9IHR5cGUuaXNFbXB0eSgpIHx8IHR5cGUgPT0gInRleHQvY3NzIjsKICNpZiBF
TkFCTEUoWFNMVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRp
b25Db250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0
LmNwcAppbmRleCA5MjQ0NWNhODBkYWY2MzMyMzlkMmY3OWNlZTk4ZGQ5ZGQ0NDFiMzIzLi41MzVi
NTcwYjVkN2RlOWY0YWY5MzU4M2U3YzcxZDEyYjJkNzUzNWE4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwCkBAIC0xNzMsOSArMTczLDkgQEAgYm9v
bCBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpjYW5TdXNwZW5kQWN0aXZlRE9NT2JqZWN0cygpCiAg
ICAgbV9pdGVyYXRpbmdBY3RpdmVET01PYmplY3RzID0gdHJ1ZTsKICAgICBIYXNoTWFwPEFjdGl2
ZURPTU9iamVjdCosIHZvaWQqPjo6aXRlcmF0b3IgYWN0aXZlT2JqZWN0c0VuZCA9IG1fYWN0aXZl
RE9NT2JqZWN0cy5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8QWN0aXZlRE9NT2JqZWN0Kiwgdm9p
ZCo+OjppdGVyYXRvciBpdGVyID0gbV9hY3RpdmVET01PYmplY3RzLmJlZ2luKCk7IGl0ZXIgIT0g
YWN0aXZlT2JqZWN0c0VuZDsgKytpdGVyKSB7Ci0gICAgICAgIEFTU0VSVChpdGVyLT5maXJzdC0+
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpID09IHRoaXMpOwotICAgICAgICBBU1NFUlQoaXRlci0+
Zmlyc3QtPnN1c3BlbmRJZk5lZWRlZENhbGxlZCgpKTsKLSAgICAgICAgaWYgKCFpdGVyLT5maXJz
dC0+Y2FuU3VzcGVuZCgpKSB7CisgICAgICAgIEFTU0VSVChpdGVyLT5rZXktPnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKSA9PSB0aGlzKTsKKyAgICAgICAgQVNTRVJUKGl0ZXItPmtleS0+c3VzcGVu
ZElmTmVlZGVkQ2FsbGVkKCkpOworICAgICAgICBpZiAoIWl0ZXItPmtleS0+Y2FuU3VzcGVuZCgp
KSB7CiAgICAgICAgICAgICBtX2l0ZXJhdGluZ0FjdGl2ZURPTU9iamVjdHMgPSBmYWxzZTsKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpAQCAtMTkwLDkgKzE5MCw5IEBAIHZv
aWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6c3VzcGVuZEFjdGl2ZURPTU9iamVjdHMoQWN0aXZl
RE9NT2JqZWN0OjpSZWFzb25Gb3JTCiAgICAgbV9pdGVyYXRpbmdBY3RpdmVET01PYmplY3RzID0g
dHJ1ZTsKICAgICBIYXNoTWFwPEFjdGl2ZURPTU9iamVjdCosIHZvaWQqPjo6aXRlcmF0b3IgYWN0
aXZlT2JqZWN0c0VuZCA9IG1fYWN0aXZlRE9NT2JqZWN0cy5lbmQoKTsKICAgICBmb3IgKEhhc2hN
YXA8QWN0aXZlRE9NT2JqZWN0Kiwgdm9pZCo+OjppdGVyYXRvciBpdGVyID0gbV9hY3RpdmVET01P
YmplY3RzLmJlZ2luKCk7IGl0ZXIgIT0gYWN0aXZlT2JqZWN0c0VuZDsgKytpdGVyKSB7Ci0gICAg
ICAgIEFTU0VSVChpdGVyLT5maXJzdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpID09IHRoaXMp
OwotICAgICAgICBBU1NFUlQoaXRlci0+Zmlyc3QtPnN1c3BlbmRJZk5lZWRlZENhbGxlZCgpKTsK
LSAgICAgICAgaXRlci0+Zmlyc3QtPnN1c3BlbmQod2h5KTsKKyAgICAgICAgQVNTRVJUKGl0ZXIt
PmtleS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpID09IHRoaXMpOworICAgICAgICBBU1NFUlQo
aXRlci0+a2V5LT5zdXNwZW5kSWZOZWVkZWRDYWxsZWQoKSk7CisgICAgICAgIGl0ZXItPmtleS0+
c3VzcGVuZCh3aHkpOwogICAgIH0KICAgICBtX2l0ZXJhdGluZ0FjdGl2ZURPTU9iamVjdHMgPSBm
YWxzZTsKICAgICBtX2FjdGl2ZURPTU9iamVjdHNBcmVTdXNwZW5kZWQgPSB0cnVlOwpAQCAtMjA2
LDkgKzIwNiw5IEBAIHZvaWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6cmVzdW1lQWN0aXZlRE9N
T2JqZWN0cygpCiAgICAgbV9pdGVyYXRpbmdBY3RpdmVET01PYmplY3RzID0gdHJ1ZTsKICAgICBI
YXNoTWFwPEFjdGl2ZURPTU9iamVjdCosIHZvaWQqPjo6aXRlcmF0b3IgYWN0aXZlT2JqZWN0c0Vu
ZCA9IG1fYWN0aXZlRE9NT2JqZWN0cy5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8QWN0aXZlRE9N
T2JqZWN0Kiwgdm9pZCo+OjppdGVyYXRvciBpdGVyID0gbV9hY3RpdmVET01PYmplY3RzLmJlZ2lu
KCk7IGl0ZXIgIT0gYWN0aXZlT2JqZWN0c0VuZDsgKytpdGVyKSB7Ci0gICAgICAgIEFTU0VSVChp
dGVyLT5maXJzdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpID09IHRoaXMpOwotICAgICAgICBB
U1NFUlQoaXRlci0+Zmlyc3QtPnN1c3BlbmRJZk5lZWRlZENhbGxlZCgpKTsKLSAgICAgICAgaXRl
ci0+Zmlyc3QtPnJlc3VtZSgpOworICAgICAgICBBU1NFUlQoaXRlci0+a2V5LT5zY3JpcHRFeGVj
dXRpb25Db250ZXh0KCkgPT0gdGhpcyk7CisgICAgICAgIEFTU0VSVChpdGVyLT5rZXktPnN1c3Bl
bmRJZk5lZWRlZENhbGxlZCgpKTsKKyAgICAgICAgaXRlci0+a2V5LT5yZXN1bWUoKTsKICAgICB9
CiAgICAgbV9pdGVyYXRpbmdBY3RpdmVET01PYmplY3RzID0gZmFsc2U7CiB9CkBAIC0yMjAsOSAr
MjIwLDkgQEAgdm9pZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpzdG9wQWN0aXZlRE9NT2JqZWN0
cygpCiAgICAgbV9pdGVyYXRpbmdBY3RpdmVET01PYmplY3RzID0gdHJ1ZTsKICAgICBIYXNoTWFw
PEFjdGl2ZURPTU9iamVjdCosIHZvaWQqPjo6aXRlcmF0b3IgYWN0aXZlT2JqZWN0c0VuZCA9IG1f
YWN0aXZlRE9NT2JqZWN0cy5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8QWN0aXZlRE9NT2JqZWN0
Kiwgdm9pZCo+OjppdGVyYXRvciBpdGVyID0gbV9hY3RpdmVET01PYmplY3RzLmJlZ2luKCk7IGl0
ZXIgIT0gYWN0aXZlT2JqZWN0c0VuZDsgKytpdGVyKSB7Ci0gICAgICAgIEFTU0VSVChpdGVyLT5m
aXJzdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpID09IHRoaXMpOwotICAgICAgICBBU1NFUlQo
aXRlci0+Zmlyc3QtPnN1c3BlbmRJZk5lZWRlZENhbGxlZCgpKTsKLSAgICAgICAgaXRlci0+Zmly
c3QtPnN0b3AoKTsKKyAgICAgICAgQVNTRVJUKGl0ZXItPmtleS0+c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpID09IHRoaXMpOworICAgICAgICBBU1NFUlQoaXRlci0+a2V5LT5zdXNwZW5kSWZOZWVk
ZWRDYWxsZWQoKSk7CisgICAgICAgIGl0ZXItPmtleS0+c3RvcCgpOwogICAgIH0KICAgICBtX2l0
ZXJhdGluZ0FjdGl2ZURPTU9iamVjdHMgPSBmYWxzZTsKIApAQCAtMzgwLDcgKzM4MCw3IEBAIHZv
aWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6YWRqdXN0TWluaW11bVRpbWVySW50ZXJ2YWwoZG91
YmxlIG9sZE1pbmltdW1UaW1lckluCiB7CiAgICAgaWYgKG1pbmltdW1UaW1lckludGVydmFsKCkg
IT0gb2xkTWluaW11bVRpbWVySW50ZXJ2YWwpIHsKICAgICAgICAgZm9yIChUaW1lb3V0TWFwOjpp
dGVyYXRvciBpdGVyID0gbV90aW1lb3V0cy5iZWdpbigpOyBpdGVyICE9IG1fdGltZW91dHMuZW5k
KCk7ICsraXRlcikgewotICAgICAgICAgICAgRE9NVGltZXIqIHRpbWVyID0gaXRlci0+c2Vjb25k
OworICAgICAgICAgICAgRE9NVGltZXIqIHRpbWVyID0gaXRlci0+dmFsdWU7CiAgICAgICAgICAg
ICB0aW1lci0+YWRqdXN0TWluaW11bVRpbWVySW50ZXJ2YWwob2xkTWluaW11bVRpbWVySW50ZXJ2
YWwpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1Nl
bGVjdG9yUXVlcnkuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1NlbGVjdG9yUXVlcnkuY3BwCmlu
ZGV4IDQ1NTMzNDljNWZhODQwNzM2ZWQzNzA4MDQ0YWNiODg0NmFiZWJmYWYuLmVmZGIxYzQ5NTI4
NjZkMDlkYWQ2NGE1MjRkODgzNDE3NWM2YjBmNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9TZWxlY3RvclF1ZXJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2VsZWN0b3JR
dWVyeS5jcHAKQEAgLTE3NCw3ICsxNzQsNyBAQCBTZWxlY3RvclF1ZXJ5KiBTZWxlY3RvclF1ZXJ5
Q2FjaGU6OmFkZChjb25zdCBBdG9taWNTdHJpbmcmIHNlbGVjdG9ycywgRG9jdW1lbnQqCiB7CiAg
ICAgSGFzaE1hcDxBdG9taWNTdHJpbmcsIE93blB0cjxTZWxlY3RvclF1ZXJ5PiA+OjppdGVyYXRv
ciBpdCA9IG1fZW50cmllcy5maW5kKHNlbGVjdG9ycyk7CiAgICAgaWYgKGl0ICE9IG1fZW50cmll
cy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIHJldHVy
biBpdC0+dmFsdWUuZ2V0KCk7CiAKICAgICBDU1NQYXJzZXIgcGFyc2VyKGRvY3VtZW50KTsKICAg
ICBDU1NTZWxlY3Rvckxpc3Qgc2VsZWN0b3JMaXN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL1NwYWNlU3BsaXRTdHJpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1NwYWNlU3Bs
aXRTdHJpbmcuY3BwCmluZGV4IGMzMDFmNjllZGIzNjUwYTk0NzI2NDFmNmMxODJkZWE1YmZkOGMx
NjUuLjk5NWJkYjdlZDM1YWZhNmZmNDE3NmJmOTU0ZDc4YjJiYmRlNzNhM2MgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9TcGFjZVNwbGl0U3RyaW5nLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vU3BhY2VTcGxpdFN0cmluZy5jcHAKQEAgLTE2OSw3ICsxNjksNyBAQCBTcGFjZVNw
bGl0U3RyaW5nRGF0YTo6flNwYWNlU3BsaXRTdHJpbmdEYXRhKCkKIAogUGFzc1JlZlB0cjxTcGFj
ZVNwbGl0U3RyaW5nRGF0YT4gU3BhY2VTcGxpdFN0cmluZ0RhdGE6OmNyZWF0ZShjb25zdCBBdG9t
aWNTdHJpbmcmIHN0cmluZykKIHsKLSAgICBTcGFjZVNwbGl0U3RyaW5nRGF0YSomIGRhdGEgPSBz
aGFyZWREYXRhTWFwKCkuYWRkKHN0cmluZywgMCkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBTcGFj
ZVNwbGl0U3RyaW5nRGF0YSomIGRhdGEgPSBzaGFyZWREYXRhTWFwKCkuYWRkKHN0cmluZywgMCku
aXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghZGF0YSkgewogICAgICAgICBkYXRhID0gbmV3IFNw
YWNlU3BsaXRTdHJpbmdEYXRhKHN0cmluZyk7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihkYXRh
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcAppbmRleCBlZmY5YTllNzBkNzY0M2Q4
MWUxOGZiMTM3YjFjNjlmNDAxMDNiMTBmLi5kNGM1ZTk0YjkyOTViYWQzNjFkZDE1OWE1YWEwYTRi
N2MwZjRiYmVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwCkBAIC0yODAsMTQg
KzI4MCwxNCBAQCB2b2lkIFN0eWxlZEVsZW1lbnQ6OnVwZGF0ZUF0dHJpYnV0ZVN0eWxlKCkKICAg
ICBQcmVzZW50YXRpb25BdHRyaWJ1dGVDYWNoZTo6aXRlcmF0b3IgY2FjaGVJdGVyYXRvcjsKICAg
ICBpZiAoY2FjaGVIYXNoKSB7CiAgICAgICAgIGNhY2hlSXRlcmF0b3IgPSBwcmVzZW50YXRpb25B
dHRyaWJ1dGVDYWNoZSgpLmFkZChjYWNoZUhhc2gsIG51bGxwdHIpLml0ZXJhdG9yOwotICAgICAg
ICBpZiAoY2FjaGVJdGVyYXRvci0+c2Vjb25kICYmIGNhY2hlSXRlcmF0b3ItPnNlY29uZC0+a2V5
ICE9IGNhY2hlS2V5KQorICAgICAgICBpZiAoY2FjaGVJdGVyYXRvci0+dmFsdWUgJiYgY2FjaGVJ
dGVyYXRvci0+dmFsdWUtPmtleSAhPSBjYWNoZUtleSkKICAgICAgICAgICAgIGNhY2hlSGFzaCA9
IDA7CiAgICAgfSBlbHNlCiAgICAgICAgIGNhY2hlSXRlcmF0b3IgPSBwcmVzZW50YXRpb25BdHRy
aWJ1dGVDYWNoZSgpLmVuZCgpOwogCiAgICAgUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IHN0eWxl
OwotICAgIGlmIChjYWNoZUhhc2ggJiYgY2FjaGVJdGVyYXRvci0+c2Vjb25kKSB7Ci0gICAgICAg
IHN0eWxlID0gY2FjaGVJdGVyYXRvci0+c2Vjb25kLT52YWx1ZTsKKyAgICBpZiAoY2FjaGVIYXNo
ICYmIGNhY2hlSXRlcmF0b3ItPnZhbHVlKSB7CisgICAgICAgIHN0eWxlID0gY2FjaGVJdGVyYXRv
ci0+dmFsdWUtPnZhbHVlOwogICAgICAgICBwcmVzZW50YXRpb25BdHRyaWJ1dGVDYWNoZUNsZWFu
ZXIoKS5kaWRIaXRQcmVzZW50YXRpb25BdHRyaWJ1dGVDYWNoZSgpOwogICAgIH0gZWxzZSB7CiAg
ICAgICAgIHN0eWxlID0gU3R5bGVQcm9wZXJ0eVNldDo6Y3JlYXRlKGlzU1ZHRWxlbWVudCgpID8g
U1ZHQXR0cmlidXRlTW9kZSA6IENTU1F1aXJrc01vZGUpOwpAQCAtMzAxLDcgKzMwMSw3IEBAIHZv
aWQgU3R5bGVkRWxlbWVudDo6dXBkYXRlQXR0cmlidXRlU3R5bGUoKQogCiAgICAgYXR0cmlidXRl
RGF0YSgpLT5zZXRBdHRyaWJ1dGVTdHlsZShzdHlsZS0+aXNFbXB0eSgpID8gMCA6IHN0eWxlKTsK
IAotICAgIGlmICghY2FjaGVIYXNoIHx8IGNhY2hlSXRlcmF0b3ItPnNlY29uZCkKKyAgICBpZiAo
IWNhY2hlSGFzaCB8fCBjYWNoZUl0ZXJhdG9yLT52YWx1ZSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgT3duUHRyPFByZXNlbnRhdGlvbkF0dHJpYnV0ZUNhY2hlRW50cnk+IG5ld0VudHJ5ID0gYWRv
cHRQdHIobmV3IFByZXNlbnRhdGlvbkF0dHJpYnV0ZUNhY2hlRW50cnkpOwpAQCAtMzE0LDcgKzMx
NCw3IEBAIHZvaWQgU3R5bGVkRWxlbWVudDo6dXBkYXRlQXR0cmlidXRlU3R5bGUoKQogICAgICAg
ICBwcmVzZW50YXRpb25BdHRyaWJ1dGVDYWNoZSgpLmNsZWFyKCk7CiAgICAgICAgIHByZXNlbnRh
dGlvbkF0dHJpYnV0ZUNhY2hlKCkuc2V0KGNhY2hlSGFzaCwgbmV3RW50cnkucmVsZWFzZSgpKTsK
ICAgICB9IGVsc2UKLSAgICAgICAgY2FjaGVJdGVyYXRvci0+c2Vjb25kID0gbmV3RW50cnkucmVs
ZWFzZSgpOworICAgICAgICBjYWNoZUl0ZXJhdG9yLT52YWx1ZSA9IG5ld0VudHJ5LnJlbGVhc2Uo
KTsKIH0KIAogdm9pZCBTdHlsZWRFbGVtZW50OjphZGRQcm9wZXJ0eVRvQXR0cmlidXRlU3R5bGUo
U3R5bGVQcm9wZXJ0eVNldCogc3R5bGUsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgaW50IGlk
ZW50aWZpZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9BbHRlcm5h
dGl2ZVRleHRVSUNvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9BbHRl
cm5hdGl2ZVRleHRVSUNvbnRyb2xsZXIubW0KaW5kZXggOTk5MTZjMWUwMGY0NDkyMmFhN2ViYzZj
ZmIwMGZjNDk3NjhkNDQzYi4uNmNhNWQ1ZjAyOWM5OTE2OTMzYjgyODlkMTQ1ZjBkMTIxYzZkNTY0
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvQWx0ZXJuYXRpdmVUZXh0
VUlDb250cm9sbGVyLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0FsdGVybmF0
aXZlVGV4dFVJQ29udHJvbGxlci5tbQpAQCAtNTAsNyArNTAsNyBAQCBOU1RleHRBbHRlcm5hdGl2
ZXMqIEFsdGVybmF0aXZlVGV4dFVJQ29udHJvbGxlcjo6QWxlcm5hdGl2ZVRleHRDb250ZXh0Q29u
dHJvbGxlcgogICAgIEhhc2hNYXBUeXBlOjpjb25zdF9pdGVyYXRvciBpdHIgPSBtX2FsdGVybmF0
aXZlc09iamVjdE1hcC5maW5kKGNvbnRleHQpOwogICAgIGlmIChpdHIgPT0gbV9hbHRlcm5hdGl2
ZXNPYmplY3RNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIHJldHVybiBpdHIt
PnNlY29uZC5nZXQoKTsKKyAgICByZXR1cm4gaXRyLT52YWx1ZS5nZXQoKTsKIH0KIAogdm9pZCBB
bHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xsZXI6OkFsZXJuYXRpdmVUZXh0Q29udGV4dENvbnRyb2xs
ZXI6OnJlbW92ZUFsdGVybmF0aXZlc0ZvckNvbnRleHQodWludDY0X3QgY29udGV4dCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9Gb3JtQ29udHJvbGxlci5jcHAKaW5kZXggZmJmZTdiNzE0NGUzMWZlOWU2Njcw
ZWJkMTE2YWVjY2FjMzZlMTZlNy4uN2Y4N2I5N2ZmYzg3ZDMzNzZmOTgzYjM2MzkyZjg3NWUwNzc5
NTZjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9Gb3JtQ29udHJvbGxlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9Gb3JtQ29udHJvbGxlci5jcHAKQEAgLTIyOCw4ICsy
MjgsOCBAQCB2b2lkIFNhdmVkRm9ybVN0YXRlOjpzZXJpYWxpemVUbyhWZWN0b3I8U3RyaW5nPiYg
c3RhdGVWZWN0b3IpIGNvbnN0CiB7CiAgICAgc3RhdGVWZWN0b3IuYXBwZW5kKFN0cmluZzo6bnVt
YmVyKG1fY29udHJvbFN0YXRlQ291bnQpKTsKICAgICBmb3IgKEZvcm1FbGVtZW50U3RhdGVNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zdGF0ZUZvck5ld0Zvcm1FbGVtZW50cy5iZWdpbigpOyBp
dCAhPSBtX3N0YXRlRm9yTmV3Rm9ybUVsZW1lbnRzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGNv
bnN0IEZvcm1FbGVtZW50S2V5JiBrZXkgPSBpdC0+Zmlyc3Q7Ci0gICAgICAgIGNvbnN0IERlcXVl
PEZvcm1Db250cm9sU3RhdGU+JiBxdWV1ZSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIGNvbnN0IEZv
cm1FbGVtZW50S2V5JiBrZXkgPSBpdC0+a2V5OworICAgICAgICBjb25zdCBEZXF1ZTxGb3JtQ29u
dHJvbFN0YXRlPiYgcXVldWUgPSBpdC0+dmFsdWU7CiAgICAgICAgIGZvciAoRGVxdWU8Rm9ybUNv
bnRyb2xTdGF0ZT46OmNvbnN0X2l0ZXJhdG9yIHF1ZUl0ZXJhdG9yID0gcXVldWUuYmVnaW4oKTsg
cXVlSXRlcmF0b3IgIT0gcXVldWUuZW5kKCk7ICsrcXVlSXRlcmF0b3IpIHsKICAgICAgICAgICAg
IHN0YXRlVmVjdG9yLmFwcGVuZChrZXkubmFtZSgpKTsKICAgICAgICAgICAgIHN0YXRlVmVjdG9y
LmFwcGVuZChrZXkudHlwZSgpKTsKQEAgLTI0Myw3ICsyNDMsNyBAQCB2b2lkIFNhdmVkRm9ybVN0
YXRlOjphcHBlbmRDb250cm9sU3RhdGUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBjb25zdCBB
dG9taWNTdAogICAgIEZvcm1FbGVtZW50S2V5IGtleShuYW1lLmltcGwoKSwgdHlwZS5pbXBsKCkp
OwogICAgIEZvcm1FbGVtZW50U3RhdGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zdGF0ZUZvck5ld0Zv
cm1FbGVtZW50cy5maW5kKGtleSk7CiAgICAgaWYgKGl0ICE9IG1fc3RhdGVGb3JOZXdGb3JtRWxl
bWVudHMuZW5kKCkpCi0gICAgICAgIGl0LT5zZWNvbmQuYXBwZW5kKHN0YXRlKTsKKyAgICAgICAg
aXQtPnZhbHVlLmFwcGVuZChzdGF0ZSk7CiAgICAgZWxzZSB7CiAgICAgICAgIERlcXVlPEZvcm1D
b250cm9sU3RhdGU+IHN0YXRlTGlzdDsKICAgICAgICAgc3RhdGVMaXN0LmFwcGVuZChzdGF0ZSk7
CkBAIC0yNTksMTAgKzI1OSwxMCBAQCBGb3JtQ29udHJvbFN0YXRlIFNhdmVkRm9ybVN0YXRlOjp0
YWtlQ29udHJvbFN0YXRlKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgY29ucwogICAgIEZvcm1F
bGVtZW50U3RhdGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zdGF0ZUZvck5ld0Zvcm1FbGVtZW50cy5m
aW5kKEZvcm1FbGVtZW50S2V5KG5hbWUuaW1wbCgpLCB0eXBlLmltcGwoKSkpOwogICAgIGlmIChp
dCA9PSBtX3N0YXRlRm9yTmV3Rm9ybUVsZW1lbnRzLmVuZCgpKQogICAgICAgICByZXR1cm4gRm9y
bUNvbnRyb2xTdGF0ZSgpOwotICAgIEFTU0VSVChpdC0+c2Vjb25kLnNpemUoKSk7Ci0gICAgRm9y
bUNvbnRyb2xTdGF0ZSBzdGF0ZSA9IGl0LT5zZWNvbmQudGFrZUZpcnN0KCk7CisgICAgQVNTRVJU
KGl0LT52YWx1ZS5zaXplKCkpOworICAgIEZvcm1Db250cm9sU3RhdGUgc3RhdGUgPSBpdC0+dmFs
dWUudGFrZUZpcnN0KCk7CiAgICAgbV9jb250cm9sU3RhdGVDb3VudC0tOwotICAgIGlmICghaXQt
PnNlY29uZC5zaXplKCkpCisgICAgaWYgKCFpdC0+dmFsdWUuc2l6ZSgpKQogICAgICAgICBtX3N0
YXRlRm9yTmV3Rm9ybUVsZW1lbnRzLnJlbW92ZShpdCk7CiAgICAgcmV0dXJuIHN0YXRlOwogfQpA
QCAtMjcxLDEwICsyNzEsMTAgQEAgVmVjdG9yPFN0cmluZz4gU2F2ZWRGb3JtU3RhdGU6OmdldFJl
ZmVyZW5jZWRGaWxlUGF0aHMoKSBjb25zdAogewogICAgIFZlY3RvcjxTdHJpbmc+IHRvUmV0dXJu
OwogICAgIGZvciAoRm9ybUVsZW1lbnRTdGF0ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3N0
YXRlRm9yTmV3Rm9ybUVsZW1lbnRzLmJlZ2luKCk7IGl0ICE9IG1fc3RhdGVGb3JOZXdGb3JtRWxl
bWVudHMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgY29uc3QgRm9ybUVsZW1lbnRLZXkmIGtleSA9
IGl0LT5maXJzdDsKKyAgICAgICAgY29uc3QgRm9ybUVsZW1lbnRLZXkmIGtleSA9IGl0LT5rZXk7
CiAgICAgICAgIGlmIChBdG9taWNTdHJpbmcoa2V5LnR5cGUoKSkgIT0gQXRvbWljU3RyaW5nKCJm
aWxlIikpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgY29uc3QgRGVxdWU8Rm9ybUNv
bnRyb2xTdGF0ZT4mIHF1ZXVlID0gaXQtPnNlY29uZDsKKyAgICAgICAgY29uc3QgRGVxdWU8Rm9y
bUNvbnRyb2xTdGF0ZT4mIHF1ZXVlID0gaXQtPnZhbHVlOwogICAgICAgICBmb3IgKERlcXVlPEZv
cm1Db250cm9sU3RhdGU+Ojpjb25zdF9pdGVyYXRvciBxdWVJdGVyYXRvciA9IHF1ZXVlLmJlZ2lu
KCk7IHF1ZUl0ZXJhdG9yICE9IHF1ZXVlLmVuZCgpOyArK3F1ZUl0ZXJhdG9yKSB7CiAgICAgICAg
ICAgICBjb25zdCBWZWN0b3I8RmlsZUNob29zZXJGaWxlSW5mbz4mIHNlbGVjdGVkRmlsZXMgPSBI
VE1MSW5wdXRFbGVtZW50OjpmaWxlc0Zyb21GaWxlSW5wdXRGb3JtQ29udHJvbFN0YXRlKCpxdWVJ
dGVyYXRvcik7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNlbGVjdGVkRmls
ZXMuc2l6ZSgpOyArK2kpCkBAIC0zNDksMTIgKzM0OSwxMiBAQCBBdG9taWNTdHJpbmcgRm9ybUtl
eUdlbmVyYXRvcjo6Zm9ybUtleShjb25zdCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRl
JiBjbwogICAgIH0KICAgICBGb3JtVG9LZXlNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9mb3Jt
VG9LZXlNYXAuZmluZChmb3JtKTsKICAgICBpZiAoaXQgIT0gbV9mb3JtVG9LZXlNYXAuZW5kKCkp
Ci0gICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwog
CiAgICAgU3RyaW5nIHNpZ25hdHVyZSA9IGZvcm1TaWduYXR1cmUoKmZvcm0pOwogICAgIEFTU0VS
VCghc2lnbmF0dXJlLmlzTnVsbCgpKTsKICAgICBGb3JtU2lnbmF0dXJlVG9OZXh0SW5kZXhNYXA6
OkFkZFJlc3VsdCByZXN1bHQgPSBtX2Zvcm1TaWduYXR1cmVUb05leHRJbmRleE1hcC5hZGQoc2ln
bmF0dXJlLCAwKTsKLSAgICB1bnNpZ25lZCBuZXh0SW5kZXggPSByZXN1bHQuaXRlcmF0b3ItPnNl
Y29uZCsrOworICAgIHVuc2lnbmVkIG5leHRJbmRleCA9IHJlc3VsdC5pdGVyYXRvci0+dmFsdWUr
KzsKIAogICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKICAgICBidWlsZGVyLmFwcGVuZChzaWdu
YXR1cmUpOwpAQCAtNDA1LDggKzQwNSw4IEBAIFBhc3NPd25QdHI8Rm9ybUNvbnRyb2xsZXI6OlNh
dmVkRm9ybVN0YXRlTWFwPiBGb3JtQ29udHJvbGxlcjo6Y3JlYXRlU2F2ZWRGb3JtU3RhCiAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgU2F2ZWRGb3JtU3RhdGVNYXA6OkFkZFJlc3VsdCBy
ZXN1bHQgPSBzdGF0ZU1hcC0+YWRkKGtleUdlbmVyYXRvci0+Zm9ybUtleSgqY29udHJvbCkuaW1w
bCgpLCBudWxscHRyKTsKICAgICAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICAg
ICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBTYXZlZEZvcm1TdGF0ZTo6Y3JlYXRlKCk7Ci0g
ICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLT5hcHBlbmRDb250cm9sU3RhdGUoY29udHJv
bC0+bmFtZSgpLCBjb250cm9sLT50eXBlKCksIGNvbnRyb2wtPnNhdmVGb3JtQ29udHJvbFN0YXRl
KCkpOworICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IFNhdmVkRm9ybVN0YXRl
OjpjcmVhdGUoKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+YXBwZW5kQ29udHJv
bFN0YXRlKGNvbnRyb2wtPm5hbWUoKSwgY29udHJvbC0+dHlwZSgpLCBjb250cm9sLT5zYXZlRm9y
bUNvbnRyb2xTdGF0ZSgpKTsKICAgICB9CiAgICAgcmV0dXJuIHN0YXRlTWFwLnJlbGVhc2UoKTsK
IH0KQEAgLTQxOCw4ICs0MTgsOCBAQCBWZWN0b3I8U3RyaW5nPiBGb3JtQ29udHJvbGxlcjo6Zm9y
bUVsZW1lbnRzU3RhdGUoKSBjb25zdAogICAgIHN0YXRlVmVjdG9yLnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkobV9mb3JtRWxlbWVudHNXaXRoU3RhdGUuc2l6ZSgpICogNCk7CiAgICAgc3RhdGVWZWN0
b3IuYXBwZW5kKGZvcm1TdGF0ZVNpZ25hdHVyZSgpKTsKICAgICBmb3IgKFNhdmVkRm9ybVN0YXRl
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHN0YXRlTWFwLT5iZWdpbigpOyBpdCAhPSBzdGF0ZU1h
cC0+ZW5kKCk7ICsraXQpIHsKLSAgICAgICAgc3RhdGVWZWN0b3IuYXBwZW5kKGl0LT5maXJzdC5n
ZXQoKSk7Ci0gICAgICAgIGl0LT5zZWNvbmQtPnNlcmlhbGl6ZVRvKHN0YXRlVmVjdG9yKTsKKyAg
ICAgICAgc3RhdGVWZWN0b3IuYXBwZW5kKGl0LT5rZXkuZ2V0KCkpOworICAgICAgICBpdC0+dmFs
dWUtPnNlcmlhbGl6ZVRvKHN0YXRlVmVjdG9yKTsKICAgICB9CiAgICAgYm9vbCBoYXNPbmx5U2ln
bmF0dXJlID0gc3RhdGVWZWN0b3Iuc2l6ZSgpID09IDE7CiAgICAgaWYgKGhhc09ubHlTaWduYXR1
cmUpCkBAIC00NDEsOCArNDQxLDggQEAgRm9ybUNvbnRyb2xTdGF0ZSBGb3JtQ29udHJvbGxlcjo6
dGFrZVN0YXRlRm9yRm9ybUVsZW1lbnQoY29uc3QgSFRNTEZvcm1Db250cm9sRWwKICAgICBTYXZl
ZEZvcm1TdGF0ZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3NhdmVkRm9ybVN0YXRlTWFwLmZpbmQobV9m
b3JtS2V5R2VuZXJhdG9yLT5mb3JtS2V5KGNvbnRyb2wpLmltcGwoKSk7CiAgICAgaWYgKGl0ID09
IG1fc2F2ZWRGb3JtU3RhdGVNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybiBGb3JtQ29udHJvbFN0
YXRlKCk7Ci0gICAgRm9ybUNvbnRyb2xTdGF0ZSBzdGF0ZSA9IGl0LT5zZWNvbmQtPnRha2VDb250
cm9sU3RhdGUoY29udHJvbC5uYW1lKCksIGNvbnRyb2wudHlwZSgpKTsKLSAgICBpZiAoaXQtPnNl
Y29uZC0+aXNFbXB0eSgpKQorICAgIEZvcm1Db250cm9sU3RhdGUgc3RhdGUgPSBpdC0+dmFsdWUt
PnRha2VDb250cm9sU3RhdGUoY29udHJvbC5uYW1lKCksIGNvbnRyb2wudHlwZSgpKTsKKyAgICBp
ZiAoaXQtPnZhbHVlLT5pc0VtcHR5KCkpCiAgICAgICAgIG1fc2F2ZWRGb3JtU3RhdGVNYXAucmVt
b3ZlKGl0KTsKICAgICByZXR1cm4gc3RhdGU7CiB9CkBAIC01MTEsNyArNTExLDcgQEAgVmVjdG9y
PFN0cmluZz4gRm9ybUNvbnRyb2xsZXI6OmdldFJlZmVyZW5jZWRGaWxlUGF0aHMoY29uc3QgVmVj
dG9yPFN0cmluZz4mIHN0YXQKICAgICBTYXZlZEZvcm1TdGF0ZU1hcCBtYXA7CiAgICAgZm9ybVN0
YXRlc0Zyb21TdGF0ZVZlY3RvcihzdGF0ZVZlY3RvciwgbWFwKTsKICAgICBmb3IgKFNhdmVkRm9y
bVN0YXRlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC5iZWdpbigpOyBpdCAhPSBtYXAuZW5k
KCk7ICsraXQpCi0gICAgICAgIHRvUmV0dXJuLmFwcGVuZChpdC0+c2Vjb25kLT5nZXRSZWZlcmVu
Y2VkRmlsZVBhdGhzKCkpOworICAgICAgICB0b1JldHVybi5hcHBlbmQoaXQtPnZhbHVlLT5nZXRS
ZWZlcmVuY2VkRmlsZVBhdGhzKCkpOwogICAgIHJldHVybiB0b1JldHVybjsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmNwcAppbmRleCA5MWUxOGEzZmJkZjJkODdhNmUwNzk0
ZTdjYjJiNzFiNjRmOGFiOWM1Li4xZWNiNjQ0Y2ExYjYzMDgwN2FkNjZhOTc0NGUzZGYzMzE0ZmVh
ZjQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmNwcApAQCAtNTU5LDcgKzU1
OSw3IEBAIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IEhUTUxDb2xsZWN0aW9uOjp0YWdzKGNvbnN0IFN0
cmluZyYgbmFtZSkKIAogdm9pZCBIVE1MQ29sbGVjdGlvbkNhY2hlQmFzZTo6YXBwZW5kKE5vZGVD
YWNoZU1hcCYgbWFwLCBjb25zdCBBdG9taWNTdHJpbmcmIGtleSwgRWxlbWVudCogZWxlbWVudCkK
IHsKLSAgICBPd25QdHI8VmVjdG9yPEVsZW1lbnQqPiA+JiB2ZWN0b3IgPSBtYXAuYWRkKGtleS5p
bXBsKCksIG51bGxwdHIpLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgT3duUHRyPFZlY3RvcjxFbGVt
ZW50Kj4gPiYgdmVjdG9yID0gbWFwLmFkZChrZXkuaW1wbCgpLCBudWxscHRyKS5pdGVyYXRvci0+
dmFsdWU7CiAgICAgaWYgKCF2ZWN0b3IpCiAgICAgICAgIHZlY3RvciA9IGFkb3B0UHRyKG5ldyBW
ZWN0b3I8RWxlbWVudCo+KTsKICAgICB2ZWN0b3ItPmFwcGVuZChlbGVtZW50KTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHAKaW5kZXggYjkxYWU1
MDZlY2Y3OWUzZDYyZmUxN2U0Mzc3OTkzZmQzYzE0NmMxZC4uZDA4MWUyNDkwNWEwYWQ1OWU3NGU1
ZGMwNWM3NDUxMDg2YTY4NGY0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xGcmFtZWJ1ZmZlci5jcHAKQEAgLTMyNyw3ICszMjcsNyBAQCBXZWJHTFNoYXJlZE9iamVj
dCogV2ViR0xGcmFtZWJ1ZmZlcjo6Z2V0QXR0YWNobWVudE9iamVjdChHQzNEZW51bSBhdHRhY2ht
ZW50KSBjbwogV2ViR0xGcmFtZWJ1ZmZlcjo6V2ViR0xBdHRhY2htZW50KiBXZWJHTEZyYW1lYnVm
ZmVyOjpnZXRBdHRhY2htZW50KEdDM0RlbnVtIGF0dGFjaG1lbnQpIGNvbnN0CiB7CiAgICAgY29u
c3QgQXR0YWNobWVudE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2F0dGFjaG1lbnRzLmZpbmQo
YXR0YWNobWVudCk7Ci0gICAgcmV0dXJuIChpdCAhPSBtX2F0dGFjaG1lbnRzLmVuZCgpKSA/IGl0
LT5zZWNvbmQuZ2V0KCkgOiAwOworICAgIHJldHVybiAoaXQgIT0gbV9hdHRhY2htZW50cy5lbmQo
KSkgPyBpdC0+dmFsdWUuZ2V0KCkgOiAwOwogfQogCiB2b2lkIFdlYkdMRnJhbWVidWZmZXI6OnJl
bW92ZUF0dGFjaG1lbnRGcm9tQm91bmRGcmFtZWJ1ZmZlcihHQzNEZW51bSBhdHRhY2htZW50KQpA
QCAtMzY3LDkgKzM2Nyw5IEBAIHZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6cmVtb3ZlQXR0YWNobWVu
dEZyb21Cb3VuZEZyYW1lYnVmZmVyKFdlYkdMU2hhcmVkT2JqZWN0KiBhCiAgICAgd2hpbGUgKGNo
ZWNrTW9yZSkgewogICAgICAgICBjaGVja01vcmUgPSBmYWxzZTsKICAgICAgICAgZm9yIChBdHRh
Y2htZW50TWFwOjppdGVyYXRvciBpdCA9IG1fYXR0YWNobWVudHMuYmVnaW4oKTsgaXQgIT0gbV9h
dHRhY2htZW50cy5lbmQoKTsgKytpdCkgewotICAgICAgICAgICAgV2ViR0xBdHRhY2htZW50KiBh
dHRhY2htZW50T2JqZWN0ID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgIFdlYkdMQXR0
YWNobWVudCogYXR0YWNobWVudE9iamVjdCA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAg
IGlmIChhdHRhY2htZW50T2JqZWN0LT5pc1NoYXJlZE9iamVjdChhdHRhY2htZW50KSkgewotICAg
ICAgICAgICAgICAgIEdDM0RlbnVtIGF0dGFjaG1lbnRUeXBlID0gaXQtPmZpcnN0OworICAgICAg
ICAgICAgICAgIEdDM0RlbnVtIGF0dGFjaG1lbnRUeXBlID0gaXQtPmtleTsKICAgICAgICAgICAg
ICAgICBhdHRhY2htZW50T2JqZWN0LT51bmF0dGFjaChjb250ZXh0KCktPmdyYXBoaWNzQ29udGV4
dDNEKCksIGF0dGFjaG1lbnRUeXBlKTsKICAgICAgICAgICAgICAgICByZW1vdmVBdHRhY2htZW50
RnJvbUJvdW5kRnJhbWVidWZmZXIoYXR0YWNobWVudFR5cGUpOwogICAgICAgICAgICAgICAgIGNo
ZWNrTW9yZSA9IHRydWU7CkBAIC00MTksOCArNDE5LDggQEAgR0MzRGVudW0gV2ViR0xGcmFtZWJ1
ZmZlcjo6Y2hlY2tTdGF0dXMoY29uc3QgY2hhcioqIHJlYXNvbikgY29uc3QKICAgICBib29sIGhh
dmVTdGVuY2lsID0gZmFsc2U7CiAgICAgYm9vbCBoYXZlRGVwdGhTdGVuY2lsID0gZmFsc2U7CiAg
ICAgZm9yIChBdHRhY2htZW50TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fYXR0YWNobWVudHMu
YmVnaW4oKTsgaXQgIT0gbV9hdHRhY2htZW50cy5lbmQoKTsgKytpdCkgewotICAgICAgICBXZWJH
TEF0dGFjaG1lbnQqIGF0dGFjaG1lbnQgPSBpdC0+c2Vjb25kLmdldCgpOwotICAgICAgICBpZiAo
IWlzQXR0YWNobWVudENvbXBsZXRlKGF0dGFjaG1lbnQsIGl0LT5maXJzdCwgcmVhc29uKSkKKyAg
ICAgICAgV2ViR0xBdHRhY2htZW50KiBhdHRhY2htZW50ID0gaXQtPnZhbHVlLmdldCgpOworICAg
ICAgICBpZiAoIWlzQXR0YWNobWVudENvbXBsZXRlKGF0dGFjaG1lbnQsIGl0LT5rZXksIHJlYXNv
bikpCiAgICAgICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0lO
Q09NUExFVEVfQVRUQUNITUVOVDsKICAgICAgICAgaWYgKCFhdHRhY2htZW50LT5pc1ZhbGlkKCkp
IHsKICAgICAgICAgICAgICpyZWFzb24gPSAiYXR0YWNobWVudCBpcyBub3QgdmFsaWQiOwpAQCAt
NDMwLDcgKzQzMCw3IEBAIEdDM0RlbnVtIFdlYkdMRnJhbWVidWZmZXI6OmNoZWNrU3RhdHVzKGNv
bnN0IGNoYXIqKiByZWFzb24pIGNvbnN0CiAgICAgICAgICAgICAqcmVhc29uID0gImF0dGFjaG1l
bnQgaXMgYW4gdW5zdXBwb3J0ZWQgZm9ybWF0IjsKICAgICAgICAgICAgIHJldHVybiBHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOwogICAgICAgICB9
Ci0gICAgICAgIHN3aXRjaCAoaXQtPmZpcnN0KSB7CisgICAgICAgIHN3aXRjaCAoaXQtPmtleSkg
ewogICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5UOgogICAg
ICAgICAgICAgaGF2ZURlcHRoID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNDg4LDcg
KzQ4OCw3IEBAIGJvb2wgV2ViR0xGcmFtZWJ1ZmZlcjo6aGFzU3RlbmNpbEJ1ZmZlcigpIGNvbnN0
CiB2b2lkIFdlYkdMRnJhbWVidWZmZXI6OmRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQzZCwgUGxhdGZvcm0zRE9iamVjdCBvYmplY3QpCiB7CiAgICAgZm9yIChBdHRh
Y2htZW50TWFwOjppdGVyYXRvciBpdCA9IG1fYXR0YWNobWVudHMuYmVnaW4oKTsgaXQgIT0gbV9h
dHRhY2htZW50cy5lbmQoKTsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+b25EZXRhY2hlZChj
b250ZXh0M2QpOworICAgICAgICBpdC0+dmFsdWUtPm9uRGV0YWNoZWQoY29udGV4dDNkKTsKIAog
ICAgIGNvbnRleHQzZC0+ZGVsZXRlRnJhbWVidWZmZXIob2JqZWN0KTsKIH0KQEAgLTQ5OSw4ICs0
OTksOCBAQCBib29sIFdlYkdMRnJhbWVidWZmZXI6OmluaXRpYWxpemVBdHRhY2htZW50cyhHcmFw
aGljc0NvbnRleHQzRCogZzNkLCBjb25zdCBjaGFyKgogICAgIEdDM0RiaXRmaWVsZCBtYXNrID0g
MDsKIAogICAgIGZvciAoQXR0YWNobWVudE1hcDo6aXRlcmF0b3IgaXQgPSBtX2F0dGFjaG1lbnRz
LmJlZ2luKCk7IGl0ICE9IG1fYXR0YWNobWVudHMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgR0Mz
RGVudW0gYXR0YWNobWVudFR5cGUgPSBpdC0+Zmlyc3Q7Ci0gICAgICAgIFdlYkdMQXR0YWNobWVu
dCogYXR0YWNobWVudCA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIEdDM0RlbnVtIGF0dGFj
aG1lbnRUeXBlID0gaXQtPmtleTsKKyAgICAgICAgV2ViR0xBdHRhY2htZW50KiBhdHRhY2htZW50
ID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICBpZiAoIWF0dGFjaG1lbnQtPmlzSW5pdGlhbGl6
ZWQoKSkKICAgICAgICAgICAgbWFzayB8PSBHcmFwaGljc0NvbnRleHQzRDo6Z2V0Q2xlYXJCaXRz
QnlBdHRhY2htZW50VHlwZShhdHRhY2htZW50VHlwZSk7CiAgICAgfQpAQCAtNTcxLDggKzU3MSw4
IEBAIGJvb2wgV2ViR0xGcmFtZWJ1ZmZlcjo6aW5pdGlhbGl6ZUF0dGFjaG1lbnRzKEdyYXBoaWNz
Q29udGV4dDNEKiBnM2QsIGNvbnN0IGNoYXIqCiAgICAgICAgIGczZC0+ZGlzYWJsZShHcmFwaGlj
c0NvbnRleHQzRDo6RElUSEVSKTsKIAogICAgIGZvciAoQXR0YWNobWVudE1hcDo6aXRlcmF0b3Ig
aXQgPSBtX2F0dGFjaG1lbnRzLmJlZ2luKCk7IGl0ICE9IG1fYXR0YWNobWVudHMuZW5kKCk7ICsr
aXQpIHsKLSAgICAgICAgR0MzRGVudW0gYXR0YWNobWVudFR5cGUgPSBpdC0+Zmlyc3Q7Ci0gICAg
ICAgIFdlYkdMQXR0YWNobWVudCogYXR0YWNobWVudCA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAg
ICAgIEdDM0RlbnVtIGF0dGFjaG1lbnRUeXBlID0gaXQtPmtleTsKKyAgICAgICAgV2ViR0xBdHRh
Y2htZW50KiBhdHRhY2htZW50ID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICBHQzNEYml0Zmll
bGQgYml0cyA9IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRDbGVhckJpdHNCeUF0dGFjaG1lbnRUeXBl
KGF0dGFjaG1lbnRUeXBlKTsKICAgICAgICAgaWYgKGJpdHMgJiBtYXNrKQogICAgICAgICAgICAg
YXR0YWNobWVudC0+c2V0SW5pdGlhbGl6ZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5IGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKaW5kZXggMzFlMTFiOGU1ZjdhMjkzNjdh
YmNlYWFhNGQ0ZmI2YWM5Zjk3MjRjMC4uODE3MTFmZjU0MTdiNjlhMGZlNmE1OWVlNDNlMjhiYWU2
NzYyMGQzNiAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0
b3JJbnNwZWN0b3IucHkKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0
b3JJbnNwZWN0b3IucHkKQEAgLTEzMTksNyArMTMxOSw3IEBAIGNsYXNzIFR5cGVCaW5kaW5nczoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVy
Lm5ld2xpbmUoIiAgICAgICAgSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciAlcztcbiIgJSBpdF9u
YW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93
cml0ZXIubmV3bGluZSgiICAgICAgICAlcyA9IG9iamVjdC0+ZmluZChcIiVzXCIpO1xuIiAlIChp
dF9uYW1lLCBwcm9wX2RhdGEucFsibmFtZSJdKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgQVNTRVJUKCVz
ICE9IG9iamVjdC0+ZW5kKCkpO1xuIiAlIGl0X25hbWUpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgICAgICVzKCVz
LT5zZWNvbmQuZ2V0KCkpO1xuIiAlIChwcm9wX2RhdGEucGFyYW1fdHlwZV9iaW5kaW5nLmdldF92
YWxpZGF0b3JfY2FsbF90ZXh0KCksIGl0X25hbWUpKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgICAgICAlcyglcy0+
dmFsdWUuZ2V0KCkpO1xuIiAlIChwcm9wX2RhdGEucGFyYW1fdHlwZV9iaW5kaW5nLmdldF92YWxp
ZGF0b3JfY2FsbF90ZXh0KCksIGl0X25hbWUpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgIH1cbiIpCiAKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNsb3NlZF9maWVsZF9zZXQ6CkBAIC0x
MzMxLDcgKzEzMzEsNyBAQCBjbGFzcyBUeXBlQmluZGluZ3M6CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgICAgIElu
c3BlY3Rvck9iamVjdDo6aXRlcmF0b3IgJXM7XG4iICUgaXRfbmFtZSkKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICAg
ICAgJXMgPSBvYmplY3QtPmZpbmQoXCIlc1wiKTtcbiIgJSAoaXRfbmFtZSwgcHJvcF9kYXRhLnBb
Im5hbWUiXSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRh
dG9yX3dyaXRlci5uZXdsaW5lKCIgICAgICAgIGlmICglcyAhPSBvYmplY3QtPmVuZCgpKSB7XG4i
ICUgaXRfbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxp
ZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgICAgICVzKCVzLT5zZWNvbmQuZ2V0KCkpO1xu
IiAlIChwcm9wX2RhdGEucGFyYW1fdHlwZV9iaW5kaW5nLmdldF92YWxpZGF0b3JfY2FsbF90ZXh0
KCksIGl0X25hbWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
bGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgICAgICAgICAgJXMoJXMtPnZhbHVlLmdldCgpKTtc
biIgJSAocHJvcF9kYXRhLnBhcmFtX3R5cGVfYmluZGluZy5nZXRfdmFsaWRhdG9yX2NhbGxfdGV4
dCgpLCBpdF9uYW1lKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiBjbG9zZWRfZmllbGRfc2V0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgICAgICsrZm91bmRQcm9w
ZXJ0aWVzQ291bnQ7XG4iKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgICAgICB9XG4iKQpAQCAtMjA0NCw3ICsyMDQ0
LDcgQEAgJG1lc3NhZ2VIYW5kbGVycwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgKCgq
dGhpcykuKml0LT5zZWNvbmQpKGNhbGxJZCwgbWVzc2FnZU9iamVjdC5nZXQoKSk7CisgICAgKCgq
dGhpcykuKml0LT52YWx1ZSkoY2FsbElkLCBtZXNzYWdlT2JqZWN0LmdldCgpKTsKIH0KIAogdm9p
ZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OnNlbmRSZXNwb25zZShsb25nIGNhbGxJ
ZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCwgY29uc3QgY2hhciogY29tbWFu
ZE5hbWUsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzLCBFcnJvclN0
cmluZyBpbnZvY2F0aW9uRXJyb3IpCkBAIC0yMTMzLDcgKzIxMzMsNyBAQCBSIEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVySW1wbDo6Z2V0UHJvcGVydHlWYWx1ZUltcGwoSW5zcGVjdG9yT2JqZWN0
KiBvYmplY3QsCiAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICB9CiAKLSAgICBpZiAoIWFzX21l
dGhvZCh2YWx1ZUl0ZXJhdG9yLT5zZWNvbmQuZ2V0KCksICZ2YWx1ZSkpCisgICAgaWYgKCFhc19t
ZXRob2QodmFsdWVJdGVyYXRvci0+dmFsdWUuZ2V0KCksICZ2YWx1ZSkpCiAgICAgICAgIHByb3Rv
Y29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJQYXJhbWV0ZXIgJyVzJyBoYXMg
d3JvbmcgdHlwZS4gSXQgbXVzdCBiZSAnJXMnLiIsIG5hbWUudXRmOCgpLmRhdGEoKSwgdHlwZV9u
YW1lKSk7CiAgICAgZWxzZQogICAgICAgICBpZiAodmFsdWVGb3VuZCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01QYXRjaFN1cHBvcnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5jcHAKaW5kZXggYzAzZGNlNDcxNGRmMTJjYTU1
ZDU4ZWJhYjJiODk5YTJkYzcxMWNlNS4uOGU2YzE4MDBkMzUyODI2NGU1MzEzNGVkOGRjNjFiODNl
Zjg4Yjk1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3Vw
cG9ydC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5j
cHAKQEAgLTIzNywyNCArMjM3LDI0IEBAIERPTVBhdGNoU3VwcG9ydDo6ZGlmZihjb25zdCBWZWN0
b3I8T3duUHRyPERpZ2VzdD4gPiYgb2xkTGlzdCwgY29uc3QgVmVjdG9yPE93blB0CiAKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG5ld0xpc3Quc2l6ZSgpOyArK2kpIHsKICAgICAgICAgRGlm
ZlRhYmxlOjppdGVyYXRvciBpdCA9IG5ld1RhYmxlLmFkZChuZXdMaXN0W2ldLT5tX3NoYTEsIFZl
Y3RvcjxzaXplX3Q+KCkpLml0ZXJhdG9yOwotICAgICAgICBpdC0+c2Vjb25kLmFwcGVuZChpKTsK
KyAgICAgICAgaXQtPnZhbHVlLmFwcGVuZChpKTsKICAgICB9CiAKICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG9sZExpc3Quc2l6ZSgpOyArK2kpIHsKICAgICAgICAgRGlmZlRhYmxlOjppdGVy
YXRvciBpdCA9IG9sZFRhYmxlLmFkZChvbGRMaXN0W2ldLT5tX3NoYTEsIFZlY3RvcjxzaXplX3Q+
KCkpLml0ZXJhdG9yOwotICAgICAgICBpdC0+c2Vjb25kLmFwcGVuZChpKTsKKyAgICAgICAgaXQt
PnZhbHVlLmFwcGVuZChpKTsKICAgICB9CiAKICAgICBmb3IgKERpZmZUYWJsZTo6aXRlcmF0b3Ig
bmV3SXQgPSBuZXdUYWJsZS5iZWdpbigpOyBuZXdJdCAhPSBuZXdUYWJsZS5lbmQoKTsgKytuZXdJ
dCkgewotICAgICAgICBpZiAobmV3SXQtPnNlY29uZC5zaXplKCkgIT0gMSkKKyAgICAgICAgaWYg
KG5ld0l0LT52YWx1ZS5zaXplKCkgIT0gMSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAg
ICAgIERpZmZUYWJsZTo6aXRlcmF0b3Igb2xkSXQgPSBvbGRUYWJsZS5maW5kKG5ld0l0LT5maXJz
dCk7Ci0gICAgICAgIGlmIChvbGRJdCA9PSBvbGRUYWJsZS5lbmQoKSB8fCBvbGRJdC0+c2Vjb25k
LnNpemUoKSAhPSAxKQorICAgICAgICBEaWZmVGFibGU6Oml0ZXJhdG9yIG9sZEl0ID0gb2xkVGFi
bGUuZmluZChuZXdJdC0+a2V5KTsKKyAgICAgICAgaWYgKG9sZEl0ID09IG9sZFRhYmxlLmVuZCgp
IHx8IG9sZEl0LT52YWx1ZS5zaXplKCkgIT0gMSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0g
ICAgICAgIG5ld01hcFtuZXdJdC0+c2Vjb25kWzBdXSA9IG1ha2VfcGFpcihuZXdMaXN0W25ld0l0
LT5zZWNvbmRbMF1dLmdldCgpLCBvbGRJdC0+c2Vjb25kWzBdKTsKLSAgICAgICAgb2xkTWFwW29s
ZEl0LT5zZWNvbmRbMF1dID0gbWFrZV9wYWlyKG9sZExpc3Rbb2xkSXQtPnNlY29uZFswXV0uZ2V0
KCksIG5ld0l0LT5zZWNvbmRbMF0pOworICAgICAgICBuZXdNYXBbbmV3SXQtPnZhbHVlWzBdXSA9
IG1ha2VfcGFpcihuZXdMaXN0W25ld0l0LT52YWx1ZVswXV0uZ2V0KCksIG9sZEl0LT52YWx1ZVsw
XSk7CisgICAgICAgIG9sZE1hcFtvbGRJdC0+dmFsdWVbMF1dID0gbWFrZV9wYWlyKG9sZExpc3Rb
b2xkSXQtPnZhbHVlWzBdXS5nZXQoKSwgbmV3SXQtPnZhbHVlWzBdKTsKICAgICB9CiAKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgbmV3TGlzdC5zaXplKCkgPiAwICYmIGkgPCBuZXdMaXN0LnNpemUo
KSAtIDE7ICsraSkgewpAQCAtMzY0LDcgKzM2NCw3IEBAIGJvb2wgRE9NUGF0Y2hTdXBwb3J0Ojpp
bm5lclBhdGNoQ2hpbGRyZW4oQ29udGFpbmVyTm9kZSogcGFyZW50Tm9kZSwgY29uc3QgVmVjdG9y
CiAKICAgICAvLyAyLiBQYXRjaCBub2RlcyBtYXJrZWQgZm9yIG1lcmdlLgogICAgIGZvciAoSGFz
aE1hcDxEaWdlc3QqLCBEaWdlc3QqPjo6aXRlcmF0b3IgaXQgPSBtZXJnZXMuYmVnaW4oKTsgaXQg
IT0gbWVyZ2VzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmICghaW5uZXJQYXRjaE5vZGUoaXQt
PnNlY29uZCwgaXQtPmZpcnN0LCBlYykpCisgICAgICAgIGlmICghaW5uZXJQYXRjaE5vZGUoaXQt
PnZhbHVlLCBpdC0+a2V5LCBlYykpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
CkBAIC00NjMsNyArNDYzLDcgQEAgYm9vbCBET01QYXRjaFN1cHBvcnQ6OnJlbW92ZUNoaWxkQW5k
TW92ZVRvTmV3KERpZ2VzdCogb2xkRGlnZXN0LCBFeGNlcHRpb25Db2RlJgogICAgIC8vIGhpZ2gg
dGhhdCBpdCB3aWxsIGdldCBtZXJnZWQgYmFjayBpbnRvIHRoZSBvcmlnaW5hbCBET00gZHVyaW5n
IHRoZSBmdXJ0aGVyIHBhdGNoaW5nLgogICAgIFVudXNlZE5vZGVzTWFwOjppdGVyYXRvciBpdCA9
IG1fdW51c2VkTm9kZXNNYXAuZmluZChvbGREaWdlc3QtPm1fc2hhMSk7CiAgICAgaWYgKGl0ICE9
IG1fdW51c2VkTm9kZXNNYXAuZW5kKCkpIHsKLSAgICAgICAgRGlnZXN0KiBuZXdEaWdlc3QgPSBp
dC0+c2Vjb25kOworICAgICAgICBEaWdlc3QqIG5ld0RpZ2VzdCA9IGl0LT52YWx1ZTsKICAgICAg
ICAgTm9kZSogbmV3Tm9kZSA9IG5ld0RpZ2VzdC0+bV9ub2RlOwogICAgICAgICBpZiAoIW1fZG9t
RWRpdG9yLT5yZXBsYWNlQ2hpbGQobmV3Tm9kZS0+cGFyZW50Tm9kZSgpLCBvbGROb2RlLCBuZXdO
b2RlLCBlYykpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwCmluZGV4IDUyZWM3NDkwYTA3
N2I1Y2ZkNGYzYjA4NWQyODc3YmM4NzBjYzA3Y2YuLjFkNWUzMTc1N2NkODZiM2IyMmI4ZmVkYjMx
YWJjZDVlMDJlZmY0NzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Jbmpl
Y3RlZFNjcmlwdE1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Jbmpl
Y3RlZFNjcmlwdE1hbmFnZXIuY3BwCkBAIC04MiwxMCArODIsMTAgQEAgSW5qZWN0ZWRTY3JpcHQg
SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjppbmplY3RlZFNjcmlwdEZvcklkKGludCBpZCkKIHsKICAg
ICBJZFRvSW5qZWN0ZWRTY3JpcHRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pZFRvSW5qZWN0ZWRTY3Jp
cHQuZmluZChpZCk7CiAgICAgaWYgKGl0ICE9IG1faWRUb0luamVjdGVkU2NyaXB0LmVuZCgpKQot
ICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKICAg
ICBmb3IgKFNjcmlwdFN0YXRlVG9JZDo6aXRlcmF0b3IgaXQgPSBtX3NjcmlwdFN0YXRlVG9JZC5i
ZWdpbigpOyBpdCAhPSBtX3NjcmlwdFN0YXRlVG9JZC5lbmQoKTsgKytpdCkgewotICAgICAgICBp
ZiAoaXQtPnNlY29uZCA9PSBpZCkKLSAgICAgICAgICAgIHJldHVybiBpbmplY3RlZFNjcmlwdEZv
cihpdC0+Zmlyc3QpOworICAgICAgICBpZiAoaXQtPnZhbHVlID09IGlkKQorICAgICAgICAgICAg
cmV0dXJuIGluamVjdGVkU2NyaXB0Rm9yKGl0LT5rZXkpOwogICAgIH0KICAgICByZXR1cm4gSW5q
ZWN0ZWRTY3JpcHQoKTsKIH0KQEAgLTk0LDcgKzk0LDcgQEAgaW50IEluamVjdGVkU2NyaXB0TWFu
YWdlcjo6aW5qZWN0ZWRTY3JpcHRJZEZvcihTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUpCiB7CiAg
ICAgU2NyaXB0U3RhdGVUb0lkOjppdGVyYXRvciBpdCA9IG1fc2NyaXB0U3RhdGVUb0lkLmZpbmQo
c2NyaXB0U3RhdGUpOwogICAgIGlmIChpdCAhPSBtX3NjcmlwdFN0YXRlVG9JZC5lbmQoKSkKLSAg
ICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBpdC0+dmFsdWU7CiAgICAg
aW50IGlkID0gbV9uZXh0SW5qZWN0ZWRTY3JpcHRJZCsrOwogICAgIG1fc2NyaXB0U3RhdGVUb0lk
LnNldChzY3JpcHRTdGF0ZSwgaWQpOwogICAgIHJldHVybiBpZDsKQEAgLTEyNiwxMSArMTI2LDEx
IEBAIHZvaWQgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjpkaXNjYXJkSW5qZWN0ZWRTY3JpcHRzRm9y
KERPTVdpbmRvdyogd2luZG93KQogICAgIFZlY3Rvcjxsb25nPiBpZHNUb1JlbW92ZTsKICAgICBJ
ZFRvSW5qZWN0ZWRTY3JpcHRNYXA6Oml0ZXJhdG9yIGVuZCA9IG1faWRUb0luamVjdGVkU2NyaXB0
LmVuZCgpOwogICAgIGZvciAoSWRUb0luamVjdGVkU2NyaXB0TWFwOjppdGVyYXRvciBpdCA9IG1f
aWRUb0luamVjdGVkU2NyaXB0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBT
Y3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUgPSBpdC0+c2Vjb25kLnNjcmlwdFN0YXRlKCk7CisgICAg
ICAgIFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSA9IGl0LT52YWx1ZS5zY3JpcHRTdGF0ZSgpOwog
ICAgICAgICBpZiAod2luZG93ICE9IGRvbVdpbmRvd0Zyb21TY3JpcHRTdGF0ZShzY3JpcHRTdGF0
ZSkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgbV9zY3JpcHRTdGF0ZVRvSWQucmVt
b3ZlKHNjcmlwdFN0YXRlKTsKLSAgICAgICAgaWRzVG9SZW1vdmUuYXBwZW5kKGl0LT5maXJzdCk7
CisgICAgICAgIGlkc1RvUmVtb3ZlLmFwcGVuZChpdC0+a2V5KTsKICAgICB9CiAKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGlkc1RvUmVtb3ZlLnNpemUoKTsgaSsrKQpAQCAtMTM5LDcgKzEz
OSw3IEBAIHZvaWQgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjpkaXNjYXJkSW5qZWN0ZWRTY3JpcHRz
Rm9yKERPTVdpbmRvdyogd2luZG93KQogICAgIC8vIE5vdyByZW1vdmUgc2NyaXB0IHN0YXRlcyB0
aGF0IGhhdmUgaWQgYnV0IG5vIGluamVjdGVkIHNjcmlwdC4KICAgICBWZWN0b3I8U2NyaXB0U3Rh
dGUqPiBzY3JpcHRTdGF0ZXNUb1JlbW92ZTsKICAgICBmb3IgKFNjcmlwdFN0YXRlVG9JZDo6aXRl
cmF0b3IgaXQgPSBtX3NjcmlwdFN0YXRlVG9JZC5iZWdpbigpOyBpdCAhPSBtX3NjcmlwdFN0YXRl
VG9JZC5lbmQoKTsgKytpdCkgewotICAgICAgICBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUgPSBp
dC0+Zmlyc3Q7CisgICAgICAgIFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSA9IGl0LT5rZXk7CiAg
ICAgICAgIGlmICh3aW5kb3cgPT0gZG9tV2luZG93RnJvbVNjcmlwdFN0YXRlKHNjcmlwdFN0YXRl
KSkKICAgICAgICAgICAgIHNjcmlwdFN0YXRlc1RvUmVtb3ZlLmFwcGVuZChzY3JpcHRTdGF0ZSk7
CiAgICAgfQpAQCAtMTU1LDcgKzE1NSw3IEBAIGJvb2wgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjpj
YW5BY2Nlc3NJbnNwZWN0ZWRXb3JrZXJDb250ZXh0KFNjcmlwdFN0YXRlKikKIHZvaWQgSW5qZWN0
ZWRTY3JpcHRNYW5hZ2VyOjpyZWxlYXNlT2JqZWN0R3JvdXAoY29uc3QgU3RyaW5nJiBvYmplY3RH
cm91cCkKIHsKICAgICBmb3IgKElkVG9JbmplY3RlZFNjcmlwdE1hcDo6aXRlcmF0b3IgaXQgPSBt
X2lkVG9JbmplY3RlZFNjcmlwdC5iZWdpbigpOyBpdCAhPSBtX2lkVG9JbmplY3RlZFNjcmlwdC5l
bmQoKTsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC5yZWxlYXNlT2JqZWN0R3JvdXAob2JqZWN0
R3JvdXApOworICAgICAgICBpdC0+dmFsdWUucmVsZWFzZU9iamVjdEdyb3VwKG9iamVjdEdyb3Vw
KTsKIH0KIAogU3RyaW5nIEluamVjdGVkU2NyaXB0TWFuYWdlcjo6aW5qZWN0ZWRTY3JpcHRTb3Vy
Y2UoKQpAQCAtMTczLDkgKzE3Myw5IEBAIEluamVjdGVkU2NyaXB0IEluamVjdGVkU2NyaXB0TWFu
YWdlcjo6aW5qZWN0ZWRTY3JpcHRGb3IoU2NyaXB0U3RhdGUqIGluc3BlY3RlZFNjCiB7CiAgICAg
U2NyaXB0U3RhdGVUb0lkOjppdGVyYXRvciBpdCA9IG1fc2NyaXB0U3RhdGVUb0lkLmZpbmQoaW5z
cGVjdGVkU2NyaXB0U3RhdGUpOwogICAgIGlmIChpdCAhPSBtX3NjcmlwdFN0YXRlVG9JZC5lbmQo
KSkgewotICAgICAgICBJZFRvSW5qZWN0ZWRTY3JpcHRNYXA6Oml0ZXJhdG9yIGl0MSA9IG1faWRU
b0luamVjdGVkU2NyaXB0LmZpbmQoaXQtPnNlY29uZCk7CisgICAgICAgIElkVG9JbmplY3RlZFNj
cmlwdE1hcDo6aXRlcmF0b3IgaXQxID0gbV9pZFRvSW5qZWN0ZWRTY3JpcHQuZmluZChpdC0+dmFs
dWUpOwogICAgICAgICBpZiAoaXQxICE9IG1faWRUb0luamVjdGVkU2NyaXB0LmVuZCgpKQotICAg
ICAgICAgICAgcmV0dXJuIGl0MS0+c2Vjb25kOworICAgICAgICAgICAgcmV0dXJuIGl0MS0+dmFs
dWU7CiAgICAgfQogCiAgICAgaWYgKCFtX2luc3BlY3RlZFN0YXRlQWNjZXNzQ2hlY2soaW5zcGVj
dGVkU2NyaXB0U3RhdGUpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNTU0FnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JD
U1NBZ2VudC5jcHAKaW5kZXggYmJlODhkMmMwZmU3YjM5YjlmMjY0MDJkNzc0NzJhNWFjN2U2MmE4
Yy4uNWNkOWM2MGM5NjlhNjE1N2YxNDI0ZDhiZjNkY2MzNTEyMmU4YzAzNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCkBAIC0xODgsMTAgKzE4
OCwxMCBAQCBpbmxpbmUgdm9pZCBTZWxlY3RvclByb2ZpbGU6OmNvbW1pdFNlbGVjdG9yKGJvb2wg
bWF0Y2hlZCkKIAogICAgIFJ1bGVNYXRjaGluZ1N0YXRzTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0g
bV9ydWxlTWF0Y2hpbmdTdGF0cy5hZGQobWFrZUtleSgpLCBSdWxlTWF0Y2hpbmdTdGF0cyhtX2N1
cnJlbnRNYXRjaERhdGEsIG1hdGNoVGltZU1zLCAxLCBtYXRjaGVkID8gMSA6IDApKTsKICAgICBp
ZiAoIXJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25k
LnRvdGFsVGltZSArPSBtYXRjaFRpbWVNczsKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNv
bmQuaGl0cyArPSAxOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLnRvdGFsVGltZSAr
PSBtYXRjaFRpbWVNczsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5oaXRzICs9IDE7
CiAgICAgICAgIGlmIChtYXRjaGVkKQotICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNv
bmQubWF0Y2hlcyArPSAxOworICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5tYXRj
aGVzICs9IDE7CiAgICAgfQogfQogCkBAIC0yMDQsNyArMjA0LDcgQEAgaW5saW5lIHZvaWQgU2Vs
ZWN0b3JQcm9maWxlOjpjb21taXRTZWxlY3RvclRpbWUoKQogICAgIGlmIChpdCA9PSBtX3J1bGVN
YXRjaGluZ1N0YXRzLmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpdC0+c2Vjb25kLnRv
dGFsVGltZSArPSBwcm9jZXNzaW5nVGltZU1zOworICAgIGl0LT52YWx1ZS50b3RhbFRpbWUgKz0g
cHJvY2Vzc2luZ1RpbWVNczsKIH0KIAogUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpTZWxl
Y3RvclByb2ZpbGU+IFNlbGVjdG9yUHJvZmlsZTo6dG9JbnNwZWN0b3JPYmplY3QoKSBjb25zdApA
QCAtMjEyLDEyICsyMTIsMTIgQEAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpTZWxlY3Rv
clByb2ZpbGU+IFNlbGVjdG9yUHJvZmlsZTo6dG9JbnNwZWN0b3JPYmplY3QKICAgICBSZWZQdHI8
VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpDU1M6OlNlbGVjdG9yUHJvZmlsZUVudHJ5
PiA+IHNlbGVjdG9yUHJvZmlsZURhdGEgPSBUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6
OkNTUzo6U2VsZWN0b3JQcm9maWxlRW50cnk+OjpjcmVhdGUoKTsKICAgICBmb3IgKFJ1bGVNYXRj
aGluZ1N0YXRzTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fcnVsZU1hdGNoaW5nU3RhdHMuYmVn
aW4oKTsgaXQgIT0gbV9ydWxlTWF0Y2hpbmdTdGF0cy5lbmQoKTsgKytpdCkgewogICAgICAgICBS
ZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6U2VsZWN0b3JQcm9maWxlRW50cnk+IGVudHJ5ID0gVHlw
ZUJ1aWxkZXI6OkNTUzo6U2VsZWN0b3JQcm9maWxlRW50cnk6OmNyZWF0ZSgpCi0gICAgICAgICAg
ICAuc2V0U2VsZWN0b3IoaXQtPnNlY29uZC5zZWxlY3RvcikKLSAgICAgICAgICAgIC5zZXRVcmwo
aXQtPnNlY29uZC51cmwpCi0gICAgICAgICAgICAuc2V0TGluZU51bWJlcihpdC0+c2Vjb25kLmxp
bmVOdW1iZXIpCi0gICAgICAgICAgICAuc2V0VGltZShpdC0+c2Vjb25kLnRvdGFsVGltZSkKLSAg
ICAgICAgICAgIC5zZXRIaXRDb3VudChpdC0+c2Vjb25kLmhpdHMpCi0gICAgICAgICAgICAuc2V0
TWF0Y2hDb3VudChpdC0+c2Vjb25kLm1hdGNoZXMpOworICAgICAgICAgICAgLnNldFNlbGVjdG9y
KGl0LT52YWx1ZS5zZWxlY3RvcikKKyAgICAgICAgICAgIC5zZXRVcmwoaXQtPnZhbHVlLnVybCkK
KyAgICAgICAgICAgIC5zZXRMaW5lTnVtYmVyKGl0LT52YWx1ZS5saW5lTnVtYmVyKQorICAgICAg
ICAgICAgLnNldFRpbWUoaXQtPnZhbHVlLnRvdGFsVGltZSkKKyAgICAgICAgICAgIC5zZXRIaXRD
b3VudChpdC0+dmFsdWUuaGl0cykKKyAgICAgICAgICAgIC5zZXRNYXRjaENvdW50KGl0LT52YWx1
ZS5tYXRjaGVzKTsKICAgICAgICAgc2VsZWN0b3JQcm9maWxlRGF0YS0+YWRkSXRlbShlbnRyeS5y
ZWxlYXNlKCkpOwogICAgIH0KIApAQCAtMjcyLDcgKzI3Miw3IEBAIHZvaWQgVXBkYXRlUmVnaW9u
TGF5b3V0VGFzazo6b25UaW1lcihUaW1lcjxVcGRhdGVSZWdpb25MYXlvdXRUYXNrPiopCiAgICAg
VmVjdG9yPHN0ZDo6cGFpcjxXZWJLaXROYW1lZEZsb3cqLCBpbnQ+ID4gbmFtZWRGbG93czsKIAog
ICAgIGZvciAoSGFzaE1hcDxXZWJLaXROYW1lZEZsb3cqLCBpbnQ+OjppdGVyYXRvciBpdCA9IG1f
bmFtZWRGbG93cy5iZWdpbigpLCBlbmQgPSBtX25hbWVkRmxvd3MuZW5kKCk7IGl0ICE9IGVuZDsg
KytpdCkKLSAgICAgICAgbmFtZWRGbG93cy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoaXQtPmZpcnN0
LCBpdC0+c2Vjb25kKSk7CisgICAgICAgIG5hbWVkRmxvd3MuYXBwZW5kKHN0ZDo6bWFrZV9wYWly
KGl0LT5rZXksIGl0LT52YWx1ZSkpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMCwgc2l6ZSA9
IG5hbWVkRmxvd3Muc2l6ZSgpOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIFdlYktpdE5hbWVk
RmxvdyogbmFtZWRGbG93ID0gbmFtZWRGbG93cy5hdChpKS5maXJzdDsKQEAgLTY2Myw3ICs2NjMs
NyBAQCBib29sIEluc3BlY3RvckNTU0FnZW50Ojpmb3JjZVBzZXVkb1N0YXRlKEVsZW1lbnQqIGVs
ZW1lbnQsIENTU1NlbGVjdG9yOjpQc2V1ZG9UeQogICAgIGlmIChpdCA9PSBtX25vZGVJZFRvRm9y
Y2VkUHNldWRvU3RhdGUuZW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHVuc2ln
bmVkIGZvcmNlZFBzZXVkb1N0YXRlID0gaXQtPnNlY29uZDsKKyAgICB1bnNpZ25lZCBmb3JjZWRQ
c2V1ZG9TdGF0ZSA9IGl0LT52YWx1ZTsKICAgICBzd2l0Y2ggKHBzZXVkb1R5cGUpIHsKICAgICBj
YXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9BY3RpdmU6CiAgICAgICAgIHJldHVybiBmb3JjZWRQc2V1
ZG9TdGF0ZSAmIFBzZXVkb0FjdGl2ZTsKQEAgLTkwNCw3ICs5MDQsNyBAQCB2b2lkIEluc3BlY3Rv
ckNTU0FnZW50Ojpmb3JjZVBzZXVkb1N0YXRlKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgaW50
IG5vZGVJZCwgYwogCiAgICAgdW5zaWduZWQgZm9yY2VkUHNldWRvU3RhdGUgPSBjb21wdXRlUHNl
dWRvQ2xhc3NNYXNrKGZvcmNlZFBzZXVkb0NsYXNzZXMuZ2V0KCkpOwogICAgIE5vZGVJZFRvRm9y
Y2VkUHNldWRvU3RhdGU6Oml0ZXJhdG9yIGl0ID0gbV9ub2RlSWRUb0ZvcmNlZFBzZXVkb1N0YXRl
LmZpbmQobm9kZUlkKTsKLSAgICB1bnNpZ25lZCBjdXJyZW50Rm9yY2VkUHNldWRvU3RhdGUgPSBp
dCA9PSBtX25vZGVJZFRvRm9yY2VkUHNldWRvU3RhdGUuZW5kKCkgPyAwIDogaXQtPnNlY29uZDsK
KyAgICB1bnNpZ25lZCBjdXJyZW50Rm9yY2VkUHNldWRvU3RhdGUgPSBpdCA9PSBtX25vZGVJZFRv
Rm9yY2VkUHNldWRvU3RhdGUuZW5kKCkgPyAwIDogaXQtPnZhbHVlOwogICAgIGJvb2wgbmVlZFN0
eWxlUmVjYWxjID0gZm9yY2VkUHNldWRvU3RhdGUgIT0gY3VycmVudEZvcmNlZFBzZXVkb1N0YXRl
OwogICAgIGlmICghbmVlZFN0eWxlUmVjYWxjKQogICAgICAgICByZXR1cm47CkBAIC05OTUsNyAr
OTk1LDcgQEAgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlKiBJbnNwZWN0b3JDU1NB
Z2VudDo6YXNJbnNwZWN0b3JTdHlsZVNoZWV0KEVsZW0KICAgICAgICAgcmV0dXJuIGluc3BlY3Rv
clN0eWxlU2hlZXQuZ2V0KCk7CiAgICAgfQogCi0gICAgcmV0dXJuIGl0LT5zZWNvbmQuZ2V0KCk7
CisgICAgcmV0dXJuIGl0LT52YWx1ZS5nZXQoKTsKIH0KIAogRWxlbWVudCogSW5zcGVjdG9yQ1NT
QWdlbnQ6OmVsZW1lbnRGb3JJZChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGludCBub2RlSWQp
CkBAIC0xMDk4LDcgKzEwOTgsNyBAQCBJbnNwZWN0b3JTdHlsZVNoZWV0KiBJbnNwZWN0b3JDU1NB
Z2VudDo6YXNzZXJ0U3R5bGVTaGVldEZvcklkKEVycm9yU3RyaW5nKiBlcnJvcgogICAgICAgICAq
ZXJyb3JTdHJpbmcgPSAiTm8gc3R5bGUgc2hlZXQgd2l0aCBnaXZlbiBpZCBmb3VuZCI7CiAgICAg
ICAgIHJldHVybiAwOwogICAgIH0KLSAgICByZXR1cm4gaXQtPnNlY29uZC5nZXQoKTsKKyAgICBy
ZXR1cm4gaXQtPnZhbHVlLmdldCgpOwogfQogCiBUeXBlQnVpbGRlcjo6Q1NTOjpTdHlsZVNoZWV0
T3JpZ2luOjpFbnVtIEluc3BlY3RvckNTU0FnZW50OjpkZXRlY3RPcmlnaW4oQ1NTU3R5bGVTaGVl
dCogcGFnZVN0eWxlU2hlZXQsIERvY3VtZW50KiBvd25lckRvY3VtZW50KQpAQCAtMTI2Niw3ICsx
MjY2LDcgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6ZGlkUmVtb3ZlRE9NTm9kZShOb2RlKiBu
b2RlKQogICAgIGlmIChpdCA9PSBtX25vZGVUb0luc3BlY3RvclN0eWxlU2hlZXQuZW5kKCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIG1faWRUb0luc3BlY3RvclN0eWxlU2hlZXQucmVtb3ZlKGl0
LT5zZWNvbmQtPmlkKCkpOworICAgIG1faWRUb0luc3BlY3RvclN0eWxlU2hlZXQucmVtb3ZlKGl0
LT52YWx1ZS0+aWQoKSk7CiAgICAgbV9ub2RlVG9JbnNwZWN0b3JTdHlsZVNoZWV0LnJlbW92ZShu
b2RlKTsKIH0KIApAQCAtMTI3OSw3ICsxMjc5LDcgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6
ZGlkTW9kaWZ5RE9NQXR0cihFbGVtZW50KiBlbGVtZW50KQogICAgIGlmIChpdCA9PSBtX25vZGVU
b0luc3BlY3RvclN0eWxlU2hlZXQuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGl0LT5z
ZWNvbmQtPmRpZE1vZGlmeUVsZW1lbnRBdHRyaWJ1dGUoKTsKKyAgICBpdC0+dmFsdWUtPmRpZE1v
ZGlmeUVsZW1lbnRBdHRyaWJ1dGUoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6c3R5
bGVTaGVldENoYW5nZWQoSW5zcGVjdG9yU3R5bGVTaGVldCogc3R5bGVTaGVldCkKQEAgLTEyOTIs
NyArMTI5Miw3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnJlc2V0UHNldWRvU3RhdGVzKCkK
IHsKICAgICBIYXNoU2V0PERvY3VtZW50Kj4gZG9jdW1lbnRzVG9DaGFuZ2U7CiAgICAgZm9yIChO
b2RlSWRUb0ZvcmNlZFBzZXVkb1N0YXRlOjppdGVyYXRvciBpdCA9IG1fbm9kZUlkVG9Gb3JjZWRQ
c2V1ZG9TdGF0ZS5iZWdpbigpLCBlbmQgPSBtX25vZGVJZFRvRm9yY2VkUHNldWRvU3RhdGUuZW5k
KCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gdG9FbGVt
ZW50KG1fZG9tQWdlbnQtPm5vZGVGb3JJZChpdC0+Zmlyc3QpKTsKKyAgICAgICAgRWxlbWVudCog
ZWxlbWVudCA9IHRvRWxlbWVudChtX2RvbUFnZW50LT5ub2RlRm9ySWQoaXQtPmtleSkpOwogICAg
ICAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50LT5vd25lckRvY3VtZW50KCkpCiAgICAgICAgICAg
ICBkb2N1bWVudHNUb0NoYW5nZS5hZGQoZWxlbWVudC0+b3duZXJEb2N1bWVudCgpKTsKICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29uc29sZUFn
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb25zb2xlQWdlbnQu
Y3BwCmluZGV4IGY1NDRiMTU4OWY5NmVkMmZiNWNjY2E2NmQzYjU5Y2VhMmUyMzUyN2QuLjllNjIy
YzA0Y2ZkZDY3Yjg5YmMyNTg2ZGJhNjNlOTBhMTI1MTNkOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb25zb2xlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb25zb2xlQWdlbnQuY3BwCkBAIC0xOTUsNyArMTk1
LDcgQEAgdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OnN0b3BUaW1pbmcoY29uc3QgU3RyaW5n
JiB0aXRsZSwgUGFzc1JlZlB0cjxTY3JpcHRDYWwKICAgICBpZiAoaXQgPT0gbV90aW1lcy5lbmQo
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZG91YmxlIHN0YXJ0VGltZSA9IGl0LT5zZWNvbmQ7
CisgICAgZG91YmxlIHN0YXJ0VGltZSA9IGl0LT52YWx1ZTsKICAgICBtX3RpbWVzLnJlbW92ZShp
dCk7CiAKICAgICBkb3VibGUgZWxhcHNlZCA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgp
IC0gc3RhcnRUaW1lOwpAQCAtMjE4LDcgKzIxOCw3IEBAIHZvaWQgSW5zcGVjdG9yQ29uc29sZUFn
ZW50Ojpjb3VudChQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gYXJndW1lbnRzLCBQYXNzUmVm
CiAgICAgaWYgKGl0ID09IG1fY291bnRzLmVuZCgpKQogICAgICAgICBjb3VudCA9IDE7CiAgICAg
ZWxzZSB7Ci0gICAgICAgIGNvdW50ID0gaXQtPnNlY29uZCArIDE7CisgICAgICAgIGNvdW50ID0g
aXQtPnZhbHVlICsgMTsKICAgICAgICAgbV9jb3VudHMucmVtb3ZlKGl0KTsKICAgICB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCmluZGV4IGE1
MzNlNTI1MzhjYjM5MDc3ZTI5NDVkY2IwNmQ5ZWEyZjIxNDZlMzAuLmNlOTk0OTA2MmRjOTgyZTg5
Mzg5NzVmZGE1OGQzZmM1ODdlMzJiMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckRPTUFnZW50LmNwcApAQCAtNDcwLDcgKzQ3MCw3IEBAIE5vZGUqIEluc3BlY3Rv
ckRPTUFnZW50Ojpub2RlRm9ySWQoaW50IGlkKQogCiAgICAgSGFzaE1hcDxpbnQsIE5vZGUqPjo6
aXRlcmF0b3IgaXQgPSBtX2lkVG9Ob2RlLmZpbmQoaWQpOwogICAgIGlmIChpdCAhPSBtX2lkVG9O
b2RlLmVuZCgpKQotICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGl0
LT52YWx1ZTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtOTE2LDkgKzkxNiw5IEBAIHZvaWQgSW5z
cGVjdG9yRE9NQWdlbnQ6OnBlcmZvcm1TZWFyY2goRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcm
IHdoaXRlc3BhY2VUcmltCiAgICAgU2VhcmNoUmVzdWx0czo6aXRlcmF0b3IgcmVzdWx0c0l0ID0g
bV9zZWFyY2hSZXN1bHRzLmFkZCgqc2VhcmNoSWQsIFZlY3RvcjxSZWZQdHI8Tm9kZT4gPigpKS5p
dGVyYXRvcjsKIAogICAgIGZvciAoTGlzdEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRvciBpdCA9IHJl
c3VsdENvbGxlY3Rvci5iZWdpbigpOyBpdCAhPSByZXN1bHRDb2xsZWN0b3IuZW5kKCk7ICsraXQp
Ci0gICAgICAgIHJlc3VsdHNJdC0+c2Vjb25kLmFwcGVuZCgqaXQpOworICAgICAgICByZXN1bHRz
SXQtPnZhbHVlLmFwcGVuZCgqaXQpOwogCi0gICAgKnJlc3VsdENvdW50ID0gcmVzdWx0c0l0LT5z
ZWNvbmQuc2l6ZSgpOworICAgICpyZXN1bHRDb3VudCA9IHJlc3VsdHNJdC0+dmFsdWUuc2l6ZSgp
OwogfQogCiB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRTZWFyY2hSZXN1bHRzKEVycm9yU3Ry
aW5nKiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBzZWFyY2hJZCwgaW50IGZyb21JbmRleCwg
aW50IHRvSW5kZXgsIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8aW50PiA+JiBub2RlSWRzKQpA
QCAtOTI5LDcgKzkyOSw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldFNlYXJjaFJlc3Vs
dHMoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBpbnQgc2l6ZSA9IGl0LT5zZWNvbmQuc2l6ZSgpOworICAgIGludCBz
aXplID0gaXQtPnZhbHVlLnNpemUoKTsKICAgICBpZiAoZnJvbUluZGV4IDwgMCB8fCB0b0luZGV4
ID4gc2l6ZSB8fCBmcm9tSW5kZXggPj0gdG9JbmRleCkgewogICAgICAgICAqZXJyb3JTdHJpbmcg
PSAiSW52YWxpZCBzZWFyY2ggcmVzdWx0IHJhbmdlIjsKICAgICAgICAgcmV0dXJuOwpAQCAtOTM3
LDcgKzkzNyw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldFNlYXJjaFJlc3VsdHMoRXJy
b3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmCiAKICAgICBub2RlSWRzID0gVHlw
ZUJ1aWxkZXI6OkFycmF5PGludD46OmNyZWF0ZSgpOwogICAgIGZvciAoaW50IGkgPSBmcm9tSW5k
ZXg7IGkgPCB0b0luZGV4OyArK2kpCi0gICAgICAgIG5vZGVJZHMtPmFkZEl0ZW0ocHVzaE5vZGVQ
YXRoVG9Gcm9udGVuZCgoaXQtPnNlY29uZClbaV0uZ2V0KCkpKTsKKyAgICAgICAgbm9kZUlkcy0+
YWRkSXRlbShwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKChpdC0+dmFsdWUpW2ldLmdldCgpKSk7CiB9
CiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpc2NhcmRTZWFyY2hSZXN1bHRzKEVycm9yU3Ry
aW5nKiwgY29uc3QgU3RyaW5nJiBzZWFyY2hJZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50LmNwcAppbmRleCA4MDMyMjk1ZDg5
NWU5ZDIyYTJmODBjNTk4ZDllNDRkMjc0NzRhMDU2Li5jNGZjYjgyYjdiNmZhMGUyYjlhNTNiZDRm
YWFjNjIzNjI5ZDBiZTVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRE9NRGVidWdnZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQuY3BwCkBAIC00MDIsOCArNDAyLDggQEAgdm9pZCBJ
bnNwZWN0b3JET01EZWJ1Z2dlckFnZW50Ojp3aWxsU2VuZFhNTEh0dHBSZXF1ZXN0KGNvbnN0IFN0
cmluZyYgdXJsKQogICAgIGVsc2UgewogICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB4
aHJCcmVha3BvaW50cyA9IG1fc3RhdGUtPmdldE9iamVjdChET01EZWJ1Z2dlckFnZW50U3RhdGU6
OnhockJyZWFrcG9pbnRzKTsKICAgICAgICAgZm9yIChJbnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9y
IGl0ID0geGhyQnJlYWtwb2ludHMtPmJlZ2luKCk7IGl0ICE9IHhockJyZWFrcG9pbnRzLT5lbmQo
KTsgKytpdCkgewotICAgICAgICAgICAgaWYgKHVybC5jb250YWlucyhpdC0+Zmlyc3QpKSB7Ci0g
ICAgICAgICAgICAgICAgYnJlYWtwb2ludFVSTCA9IGl0LT5maXJzdDsKKyAgICAgICAgICAgIGlm
ICh1cmwuY29udGFpbnMoaXQtPmtleSkpIHsKKyAgICAgICAgICAgICAgICBicmVha3BvaW50VVJM
ID0gaXQtPmtleTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0
b3JhZ2VBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3Rv
cmFnZUFnZW50LmNwcAppbmRleCA5MGEwYTllNjA5MGUwYzJjMzlkNzg2OWY0MDJkNDMyYjNhMmJm
NmYwLi5jMzJlYTI5ODc2ZGQ5ZWUxN2JjMmU2MWUwZDdlNjg3MDZhMTI1Mzc3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNw
cApAQCAtNzcsNyArNzcsNyBAQCB2b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6Y2xlYXJG
cm9udGVuZCgpCiB7CiAgICAgRE9NU3RvcmFnZVJlc291cmNlc01hcDo6aXRlcmF0b3IgZG9tU3Rv
cmFnZUVuZCA9IG1fcmVzb3VyY2VzLmVuZCgpOwogICAgIGZvciAoRE9NU3RvcmFnZVJlc291cmNl
c01hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSBkb21TdG9yYWdl
RW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT51bmJpbmQoKTsKKyAgICAgICAgaXQtPnZh
bHVlLT51bmJpbmQoKTsKICAgICBtX2Zyb250ZW5kID0gMDsKICAgICBkaXNhYmxlKDApOwogfQpA
QCAtOTYsNyArOTYsNyBAQCB2b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6ZW5hYmxlKEVy
cm9yU3RyaW5nKikKIAogICAgIERPTVN0b3JhZ2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIHJlc291
cmNlc0VuZCA9IG1fcmVzb3VyY2VzLmVuZCgpOwogICAgIGZvciAoRE9NU3RvcmFnZVJlc291cmNl
c01hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSByZXNvdXJjZXNF
bmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPmJpbmQobV9mcm9udGVuZCk7CisgICAgICAg
IGl0LT52YWx1ZS0+YmluZChtX2Zyb250ZW5kKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JET01TdG9y
YWdlQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcqKQpAQCAtMTY1LDggKzE2NSw4IEBAIFN0cmlu
ZyBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OnN0b3JhZ2VJZChTZWN1cml0eU9yaWdpbiogc2Vj
dXJpdHlPcmlnaW4sIGJvb2wKICAgICBBU1NFUlQoc2VjdXJpdHlPcmlnaW4pOwogICAgIERPTVN0
b3JhZ2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGRvbVN0b3JhZ2VFbmQgPSBtX3Jlc291cmNlcy5l
bmQoKTsKICAgICBmb3IgKERPTVN0b3JhZ2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9y
ZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZG9tU3RvcmFnZUVuZDsgKytpdCkgewotICAgICAgICBp
ZiAoaXQtPnNlY29uZC0+aXNTYW1lT3JpZ2luQW5kVHlwZShzZWN1cml0eU9yaWdpbiwgaXNMb2Nh
bFN0b3JhZ2UpKQotICAgICAgICAgICAgcmV0dXJuIGl0LT5maXJzdDsKKyAgICAgICAgaWYgKGl0
LT52YWx1ZS0+aXNTYW1lT3JpZ2luQW5kVHlwZShzZWN1cml0eU9yaWdpbiwgaXNMb2NhbFN0b3Jh
Z2UpKQorICAgICAgICAgICAgcmV0dXJuIGl0LT5rZXk7CiAgICAgfQogICAgIHJldHVybiBTdHJp
bmcoKTsKIH0KQEAgLTE3NiwxNCArMTc2LDE0IEBAIEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJj
ZSogSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpnZXRET01TdG9yYWdlUmVzb3VyY2VGb3JJCiAg
ICAgRE9NU3RvcmFnZVJlc291cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5maW5k
KHN0b3JhZ2VJZCk7CiAgICAgaWYgKGl0ID09IG1fcmVzb3VyY2VzLmVuZCgpKQogICAgICAgICBy
ZXR1cm4gMDsKLSAgICByZXR1cm4gaXQtPnNlY29uZC5nZXQoKTsKKyAgICByZXR1cm4gaXQtPnZh
bHVlLmdldCgpOwogfQogCiB2b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6ZGlkVXNlRE9N
U3RvcmFnZShTdG9yYWdlQXJlYSogc3RvcmFnZUFyZWEsIGJvb2wgaXNMb2NhbFN0b3JhZ2UsIEZy
YW1lKiBmcmFtZSkKIHsKICAgICBET01TdG9yYWdlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBkb21T
dG9yYWdlRW5kID0gbV9yZXNvdXJjZXMuZW5kKCk7CiAgICAgZm9yIChET01TdG9yYWdlUmVzb3Vy
Y2VzTWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGRvbVN0b3Jh
Z2VFbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQtPmlzU2FtZU9yaWdpbkFuZFR5
cGUoZnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCksIGlzTG9jYWxTdG9yYWdlKSkK
KyAgICAgICAgaWYgKGl0LT52YWx1ZS0+aXNTYW1lT3JpZ2luQW5kVHlwZShmcmFtZS0+ZG9jdW1l
bnQoKS0+c2VjdXJpdHlPcmlnaW4oKSwgaXNMb2NhbFN0b3JhZ2UpKQogICAgICAgICAgICAgcmV0
dXJuOwogICAgIH0KIApAQCAtMjE4LDcgKzIxOCw3IEBAIHNpemVfdCBJbnNwZWN0b3JET01TdG9y
YWdlQWdlbnQ6Om1lbW9yeUJ5dGVzVXNlZEJ5U3RvcmFnZUNhY2hlKCkgY29uc3QKIHsKICAgICBz
aXplX3Qgc2l6ZSA9IDA7CiAgICAgZm9yIChET01TdG9yYWdlUmVzb3VyY2VzTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IG1fcmVzb3VyY2VzLmVuZCgp
OyArK2l0KQotICAgICAgICBzaXplICs9IGl0LT5zZWNvbmQtPnN0b3JhZ2VBcmVhKCktPm1lbW9y
eUJ5dGVzVXNlZEJ5Q2FjaGUoKTsKKyAgICAgICAgc2l6ZSArPSBpdC0+dmFsdWUtPnN0b3JhZ2VB
cmVhKCktPm1lbW9yeUJ5dGVzVXNlZEJ5Q2FjaGUoKTsKICAgICByZXR1cm4gc2l6ZTsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlQWdl
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlQWdlbnQu
Y3BwCmluZGV4IDEwOTljNDA1OWNhM2Q3NDUyMWE2ZTNkMWM2ZjM1MDEzMWI0Y2ZiNmMuLjBjMjBh
M2M3Y2U3YjZlNzEzMTQ1NWE1OTY3ODJhMjNkMWJiYWU0ZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5jcHAKQEAgLTI0NSw3ICsy
NDUsNyBAQCB2b2lkIEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyop
CiAKICAgICBEYXRhYmFzZVJlc291cmNlc01hcDo6aXRlcmF0b3IgZGF0YWJhc2VzRW5kID0gbV9y
ZXNvdXJjZXMuZW5kKCk7CiAgICAgZm9yIChEYXRhYmFzZVJlc291cmNlc01hcDo6aXRlcmF0b3Ig
aXQgPSBtX3Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSBkYXRhYmFzZXNFbmQ7ICsraXQpCi0gICAg
ICAgIGl0LT5zZWNvbmQtPmJpbmQobV9mcm9udGVuZCk7CisgICAgICAgIGl0LT52YWx1ZS0+Ymlu
ZChtX2Zyb250ZW5kKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjpkaXNhYmxl
KEVycm9yU3RyaW5nKikKQEAgLTMwMyw4ICszMDMsOCBAQCB2b2lkIEluc3BlY3RvckRhdGFiYXNl
QWdlbnQ6OmV4ZWN1dGVTUUwoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlSWQs
CiBTdHJpbmcgSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6ZGF0YWJhc2VJZChEYXRhYmFzZSogZGF0
YWJhc2UpCiB7CiAgICAgZm9yIChEYXRhYmFzZVJlc291cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBt
X3Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSBtX3Jlc291cmNlcy5lbmQoKTsgKytpdCkgewotICAg
ICAgICBpZiAoaXQtPnNlY29uZC0+ZGF0YWJhc2UoKSA9PSBkYXRhYmFzZSkKLSAgICAgICAgICAg
IHJldHVybiBpdC0+Zmlyc3Q7CisgICAgICAgIGlmIChpdC0+dmFsdWUtPmRhdGFiYXNlKCkgPT0g
ZGF0YWJhc2UpCisgICAgICAgICAgICByZXR1cm4gaXQtPmtleTsKICAgICB9CiAgICAgcmV0dXJu
IFN0cmluZygpOwogfQpAQCAtMzEyLDggKzMxMiw4IEBAIFN0cmluZyBJbnNwZWN0b3JEYXRhYmFz
ZUFnZW50OjpkYXRhYmFzZUlkKERhdGFiYXNlKiBkYXRhYmFzZSkKIEluc3BlY3RvckRhdGFiYXNl
UmVzb3VyY2UqIEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmZpbmRCeUZpbGVOYW1lKGNvbnN0IFN0
cmluZyYgZmlsZU5hbWUpCiB7CiAgICAgZm9yIChEYXRhYmFzZVJlc291cmNlc01hcDo6aXRlcmF0
b3IgaXQgPSBtX3Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSBtX3Jlc291cmNlcy5lbmQoKTsgKytp
dCkgewotICAgICAgICBpZiAoaXQtPnNlY29uZC0+ZGF0YWJhc2UoKS0+ZmlsZU5hbWUoKSA9PSBm
aWxlTmFtZSkKLSAgICAgICAgICAgIHJldHVybiBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICBp
ZiAoaXQtPnZhbHVlLT5kYXRhYmFzZSgpLT5maWxlTmFtZSgpID09IGZpbGVOYW1lKQorICAgICAg
ICAgICAgcmV0dXJuIGl0LT52YWx1ZS5nZXQoKTsKICAgICB9CiAgICAgcmV0dXJuIDA7CiB9CkBA
IC0zMjMsNyArMzIzLDcgQEAgRGF0YWJhc2UqIEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmRhdGFi
YXNlRm9ySWQoY29uc3QgU3RyaW5nJiBkYXRhYmFzZUlkKQogICAgIERhdGFiYXNlUmVzb3VyY2Vz
TWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmZpbmQoZGF0YWJhc2VJZCk7CiAgICAgaWYg
KGl0ID09IG1fcmVzb3VyY2VzLmVuZCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4g
aXQtPnNlY29uZC0+ZGF0YWJhc2UoKTsKKyAgICByZXR1cm4gaXQtPnZhbHVlLT5kYXRhYmFzZSgp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAKaW5kZXggY2YzM2M1OTBiM2NkYmRl
MjU0OTVmZDU1Nzg3ZmY0YTVlMDBiMDlhOS4uYTc3YzA2ZmI1ZGMyMDUwOTNkNWNhYWFjZWU3ZGM4
MmE0OWY3NGVmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JEZWJ1Z2dlckFnZW50LmNwcApAQCAtMjQ4LDkgKzI0OCw5IEBAIHZvaWQgSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudDo6c2V0QnJlYWtwb2ludEJ5VXJsKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywg
aW50IGxpCiAKICAgICBTY3JpcHRCcmVha3BvaW50IGJyZWFrcG9pbnQobGluZU51bWJlciwgY29s
dW1uTnVtYmVyLCBjb25kaXRpb24pOwogICAgIGZvciAoU2NyaXB0c01hcDo6aXRlcmF0b3IgaXQg
PSBtX3NjcmlwdHMuYmVnaW4oKTsgaXQgIT0gbV9zY3JpcHRzLmVuZCgpOyArK2l0KSB7Ci0gICAg
ICAgIGlmICghbWF0Y2hlcyhpdC0+c2Vjb25kLnVybCwgdXJsLCBpc1JlZ2V4KSkKKyAgICAgICAg
aWYgKCFtYXRjaGVzKGl0LT52YWx1ZS51cmwsIHVybCwgaXNSZWdleCkpCiAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRpb24+
IGxvY2F0aW9uID0gcmVzb2x2ZUJyZWFrcG9pbnQoYnJlYWtwb2ludElkLCBpdC0+Zmlyc3QsIGJy
ZWFrcG9pbnQpOworICAgICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlv
bj4gbG9jYXRpb24gPSByZXNvbHZlQnJlYWtwb2ludChicmVha3BvaW50SWQsIGl0LT5rZXksIGJy
ZWFrcG9pbnQpOwogICAgICAgICBpZiAobG9jYXRpb24pCiAgICAgICAgICAgICBsb2NhdGlvbnMt
PmFkZEl0ZW0obG9jYXRpb24pOwogICAgIH0KQEAgLTMwMiw4ICszMDIsOCBAQCB2b2lkIEluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQ6OnJlbW92ZUJyZWFrcG9pbnQoRXJyb3JTdHJpbmcqLCBjb25zdCBT
dHJpbmcmIGJyZWFrcAogICAgIEJyZWFrcG9pbnRJZFRvRGVidWdTZXJ2ZXJCcmVha3BvaW50SWRz
TWFwOjppdGVyYXRvciBkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNJdGVyYXRvciA9IG1fYnJlYWtw
b2ludElkVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHMuZmluZChicmVha3BvaW50SWQpOwogICAg
IGlmIChkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNJdGVyYXRvciA9PSBtX2JyZWFrcG9pbnRJZFRv
RGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzLmVuZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNJdGVyYXRvci0+c2Vj
b25kLnNpemUoKTsgKytpKQotICAgICAgICBzY3JpcHREZWJ1Z1NlcnZlcigpLnJlbW92ZUJyZWFr
cG9pbnQoZGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzSXRlcmF0b3ItPnNlY29uZFtpXSk7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNJdGVyYXRvci0+
dmFsdWUuc2l6ZSgpOyArK2kpCisgICAgICAgIHNjcmlwdERlYnVnU2VydmVyKCkucmVtb3ZlQnJl
YWtwb2ludChkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNJdGVyYXRvci0+dmFsdWVbaV0pOwogICAg
IG1fYnJlYWtwb2ludElkVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHMucmVtb3ZlKGRlYnVnU2Vy
dmVyQnJlYWtwb2ludElkc0l0ZXJhdG9yKTsKIH0KIApAQCAtMzMxLDcgKzMzMSw3IEBAIFBhc3NS
ZWZQdHI8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj4gSW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6cmVzb2x2ZUJyZWFrCiAgICAgU2NyaXB0c01hcDo6aXRlcmF0b3Igc2NyaXB0SXRlcmF0
b3IgPSBtX3NjcmlwdHMuZmluZChzY3JpcHRJZCk7CiAgICAgaWYgKHNjcmlwdEl0ZXJhdG9yID09
IG1fc2NyaXB0cy5lbmQoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgU2NyaXB0JiBzY3JpcHQg
PSBzY3JpcHRJdGVyYXRvci0+c2Vjb25kOworICAgIFNjcmlwdCYgc2NyaXB0ID0gc2NyaXB0SXRl
cmF0b3ItPnZhbHVlOwogICAgIGlmIChicmVha3BvaW50LmxpbmVOdW1iZXIgPCBzY3JpcHQuc3Rh
cnRMaW5lIHx8IHNjcmlwdC5lbmRMaW5lIDwgYnJlYWtwb2ludC5saW5lTnVtYmVyKQogICAgICAg
ICByZXR1cm4gMDsKIApAQCAtMzQ0LDcgKzM0NCw3IEBAIFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6
OkRlYnVnZ2VyOjpMb2NhdGlvbj4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6cmVzb2x2ZUJyZWFr
CiAgICAgQnJlYWtwb2ludElkVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNNYXA6Oml0ZXJhdG9y
IGRlYnVnU2VydmVyQnJlYWtwb2ludElkc0l0ZXJhdG9yID0gbV9icmVha3BvaW50SWRUb0RlYnVn
U2VydmVyQnJlYWtwb2ludElkcy5maW5kKGJyZWFrcG9pbnRJZCk7CiAgICAgaWYgKGRlYnVnU2Vy
dmVyQnJlYWtwb2ludElkc0l0ZXJhdG9yID09IG1fYnJlYWtwb2ludElkVG9EZWJ1Z1NlcnZlckJy
ZWFrcG9pbnRJZHMuZW5kKCkpCiAgICAgICAgIGRlYnVnU2VydmVyQnJlYWtwb2ludElkc0l0ZXJh
dG9yID0gbV9icmVha3BvaW50SWRUb0RlYnVnU2VydmVyQnJlYWtwb2ludElkcy5zZXQoYnJlYWtw
b2ludElkLCBWZWN0b3I8U3RyaW5nPigpKS5pdGVyYXRvcjsKLSAgICBkZWJ1Z1NlcnZlckJyZWFr
cG9pbnRJZHNJdGVyYXRvci0+c2Vjb25kLmFwcGVuZChkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZCk7
CisgICAgZGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzSXRlcmF0b3ItPnZhbHVlLmFwcGVuZChkZWJ1
Z1NlcnZlckJyZWFrcG9pbnRJZCk7CiAKICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkRlYnVnZ2Vy
OjpMb2NhdGlvbj4gbG9jYXRpb24gPSBUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uOjpj
cmVhdGUoKQogICAgICAgICAuc2V0U2NyaXB0SWQoc2NyaXB0SWQpCkBAIC0zNzAsNyArMzcwLDcg
QEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZWFyY2hJbkNvbnRlbnQoRXJyb3JTdHJp
bmcqIGVycm9yLCBjb25zdCBTdHJpbmcmIHMKIAogICAgIFNjcmlwdHNNYXA6Oml0ZXJhdG9yIGl0
ID0gbV9zY3JpcHRzLmZpbmQoc2NyaXB0SWQpOwogICAgIGlmIChpdCAhPSBtX3NjcmlwdHMuZW5k
KCkpCi0gICAgICAgIHJlc3VsdHMgPSBDb250ZW50U2VhcmNoVXRpbHM6OnNlYXJjaEluVGV4dEJ5
TGluZXMoaXQtPnNlY29uZC5zb3VyY2UsIHF1ZXJ5LCBjYXNlU2Vuc2l0aXZlLCBpc1JlZ2V4KTsK
KyAgICAgICAgcmVzdWx0cyA9IENvbnRlbnRTZWFyY2hVdGlsczo6c2VhcmNoSW5UZXh0QnlMaW5l
cyhpdC0+dmFsdWUuc291cmNlLCBxdWVyeSwgY2FzZVNlbnNpdGl2ZSwgaXNSZWdleCk7CiAgICAg
ZWxzZQogICAgICAgICAqZXJyb3IgPSAiTm8gc2NyaXB0IGZvciBpZDogIiArIHNjcmlwdElkOwog
fQpAQCAtNDAzLDcgKzQwMyw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Z2V0U2Ny
aXB0U291cmNlKEVycm9yU3RyaW5nKiBlcnJvciwgY29uc3QgU3RyaW5nJiBzCiB7CiAgICAgU2Ny
aXB0c01hcDo6aXRlcmF0b3IgaXQgPSBtX3NjcmlwdHMuZmluZChzY3JpcHRJZCk7CiAgICAgaWYg
KGl0ICE9IG1fc2NyaXB0cy5lbmQoKSkKLSAgICAgICAgKnNjcmlwdFNvdXJjZSA9IGl0LT5zZWNv
bmQuc291cmNlOworICAgICAgICAqc2NyaXB0U291cmNlID0gaXQtPnZhbHVlLnNvdXJjZTsKICAg
ICBlbHNlCiAgICAgICAgICplcnJvciA9ICJObyBzY3JpcHQgZm9yIGlkOiAiICsgc2NyaXB0SWQ7
CiB9CkBAIC02NDUsNyArNjQ1LDcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRQ
YXJzZVNvdXJjZShjb25zdCBTdHJpbmcmIHNjcmlwdElkLCBjb25zdCBTY3JpcHQKIAogICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJyZWFrcG9pbnRzQ29va2llID0gbV9zdGF0ZS0+Z2V0T2Jq
ZWN0KERlYnVnZ2VyQWdlbnRTdGF0ZTo6amF2YVNjcmlwdEJyZWFrcG9pbnRzKTsKICAgICBmb3Ig
KEluc3BlY3Rvck9iamVjdDo6aXRlcmF0b3IgaXQgPSBicmVha3BvaW50c0Nvb2tpZS0+YmVnaW4o
KTsgaXQgIT0gYnJlYWtwb2ludHNDb29raWUtPmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGJyZWFrcG9pbnRPYmplY3QgPSBpdC0+c2Vjb25kLT5hc09iamVj
dCgpOworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBicmVha3BvaW50T2JqZWN0ID0g
aXQtPnZhbHVlLT5hc09iamVjdCgpOwogICAgICAgICBib29sIGlzUmVnZXg7CiAgICAgICAgIGJy
ZWFrcG9pbnRPYmplY3QtPmdldEJvb2xlYW4oImlzUmVnZXgiLCAmaXNSZWdleCk7CiAgICAgICAg
IFN0cmluZyB1cmw7CkBAIC02NTYsOSArNjU2LDkgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50OjpkaWRQYXJzZVNvdXJjZShjb25zdCBTdHJpbmcmIHNjcmlwdElkLCBjb25zdCBTY3JpcHQK
ICAgICAgICAgYnJlYWtwb2ludE9iamVjdC0+Z2V0TnVtYmVyKCJsaW5lTnVtYmVyIiwgJmJyZWFr
cG9pbnQubGluZU51bWJlcik7CiAgICAgICAgIGJyZWFrcG9pbnRPYmplY3QtPmdldE51bWJlcigi
Y29sdW1uTnVtYmVyIiwgJmJyZWFrcG9pbnQuY29sdW1uTnVtYmVyKTsKICAgICAgICAgYnJlYWtw
b2ludE9iamVjdC0+Z2V0U3RyaW5nKCJjb25kaXRpb24iLCAmYnJlYWtwb2ludC5jb25kaXRpb24p
OwotICAgICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj4gbG9jYXRp
b24gPSByZXNvbHZlQnJlYWtwb2ludChpdC0+Zmlyc3QsIHNjcmlwdElkLCBicmVha3BvaW50KTsK
KyAgICAgICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRpb24+IGxvY2F0aW9u
ID0gcmVzb2x2ZUJyZWFrcG9pbnQoaXQtPmtleSwgc2NyaXB0SWQsIGJyZWFrcG9pbnQpOwogICAg
ICAgICBpZiAobG9jYXRpb24pCi0gICAgICAgICAgICBtX2Zyb250ZW5kLT5icmVha3BvaW50UmVz
b2x2ZWQoaXQtPmZpcnN0LCBsb2NhdGlvbik7CisgICAgICAgICAgICBtX2Zyb250ZW5kLT5icmVh
a3BvaW50UmVzb2x2ZWQoaXQtPmtleSwgbG9jYXRpb24pOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHAKaW5k
ZXggZjEyYmQwZGFjZjhlMzBhZmI4ZGYyNTU4NmU1OTE1NWM2ZDhkMmM0My4uNmM0MmU2NjZlMWYy
MjcxOTYzZWExY2E4NmIwZmIzOWYwY2MxZjRmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwCkBAIC0zMDUsMTIgKzMwNSwx
MiBAQCBwdWJsaWM6CiAgICAgICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxk
ZXI6OkluZGV4ZWREQjo6T2JqZWN0U3RvcmU+ID4gb2JqZWN0U3RvcmVzID0gVHlwZUJ1aWxkZXI6
OkFycmF5PFR5cGVCdWlsZGVyOjpJbmRleGVkREI6Ok9iamVjdFN0b3JlPjo6Y3JlYXRlKCk7CiAK
ICAgICAgICAgZm9yIChJREJEYXRhYmFzZU1ldGFkYXRhOjpPYmplY3RTdG9yZU1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBkYXRhYmFzZU1ldGFkYXRhLm9iamVjdFN0b3Jlcy5iZWdpbigpOyBpdCAh
PSBkYXRhYmFzZU1ldGFkYXRhLm9iamVjdFN0b3Jlcy5lbmQoKTsgKytpdCkgewotICAgICAgICAg
ICAgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSA9IGl0
LT5zZWNvbmQ7CisgICAgICAgICAgICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmpl
Y3RTdG9yZU1ldGFkYXRhID0gaXQtPnZhbHVlOwogCiAgICAgICAgICAgICBSZWZQdHI8VHlwZUJ1
aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpJbmRleGVkREI6Ok9iamVjdFN0b3JlSW5kZXg+ID4g
aW5kZXhlcyA9IFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6SW5kZXhlZERCOjpPYmpl
Y3RTdG9yZUluZGV4Pjo6Y3JlYXRlKCk7CiAKICAgICAgICAgICAgIGZvciAoSURCT2JqZWN0U3Rv
cmVNZXRhZGF0YTo6SW5kZXhNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gb2JqZWN0U3RvcmVNZXRh
ZGF0YS5pbmRleGVzLmJlZ2luKCk7IGl0ICE9IG9iamVjdFN0b3JlTWV0YWRhdGEuaW5kZXhlcy5l
bmQoKTsgKytpdCkgewotICAgICAgICAgICAgICAgIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGlu
ZGV4TWV0YWRhdGEgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgICAgIGNvbnN0IElEQkluZGV4
TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEgPSBpdC0+dmFsdWU7CiAKICAgICAgICAgICAgICAgICBS
ZWZQdHI8T2JqZWN0U3RvcmVJbmRleD4gb2JqZWN0U3RvcmVJbmRleCA9IE9iamVjdFN0b3JlSW5k
ZXg6OmNyZWF0ZSgpCiAgICAgICAgICAgICAgICAgICAgIC5zZXROYW1lKGluZGV4TWV0YWRhdGEu
bmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JNZW1v
cnlBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTWVtb3J5QWdl
bnQuY3BwCmluZGV4IGZiMGU2ZjMyZTE5YWMzZjkwYTczODE2MThhNmUwOWNjMDQxZTQxOTYuLjcy
ZmI5ZDgxODc2ZDVmMzY4ZTNiMjk4MDhhYzA1Y2FjZDhlZmIyYTkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JNZW1vcnlBZ2VudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck1lbW9yeUFnZW50LmNwcApAQCAtMjM0LDggKzIz
NCw4IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8
VHlwZUJ1aWxkZXI6Ok1lbW9yeTo6Tm9kZUNvdW50PiA+IGNoaWxkcmVuU3RhdHMgPSBUeXBlQnVp
bGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6Ok1lbW9yeTo6Tm9kZUNvdW50Pjo6Y3JlYXRlKCk7CiAg
ICAgICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIGludD46Oml0ZXJhdG9yIGl0ID0gbV9ub2RlTmFt
ZVRvQ291bnQuYmVnaW4oKTsgaXQgIT0gbV9ub2RlTmFtZVRvQ291bnQuZW5kKCk7ICsraXQpIHsK
LSAgICAgICAgICAgIFJlZlB0cjxOb2RlQ291bnQ+IG5vZGVDb3VudCA9IE5vZGVDb3VudDo6Y3Jl
YXRlKCkuc2V0Tm9kZU5hbWUoaXQtPmZpcnN0KQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRDb3VudChpdC0+c2Vjb25kKTsK
KyAgICAgICAgICAgIFJlZlB0cjxOb2RlQ291bnQ+IG5vZGVDb3VudCA9IE5vZGVDb3VudDo6Y3Jl
YXRlKCkuc2V0Tm9kZU5hbWUoaXQtPmtleSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0Q291bnQoaXQtPnZhbHVlKTsKICAg
ICAgICAgICAgIGNoaWxkcmVuU3RhdHMtPmFkZEl0ZW0obm9kZUNvdW50KTsKICAgICAgICAgfQog
ICAgICAgICByZXR1cm4gY2hpbGRyZW5TdGF0cy5yZWxlYXNlKCk7CkBAIC0yNDUsOCArMjQ1LDgg
QEAgcHVibGljOgogICAgIHsKICAgICAgICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBl
QnVpbGRlcjo6TWVtb3J5OjpMaXN0ZW5lckNvdW50PiA+IGxpc3RlbmVyU3RhdHMgPSBUeXBlQnVp
bGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6Ok1lbW9yeTo6TGlzdGVuZXJDb3VudD46OmNyZWF0ZSgp
OwogICAgICAgICBmb3IgKEhhc2hNYXA8QXRvbWljU3RyaW5nLCBpbnQ+OjppdGVyYXRvciBpdCA9
IG1fZXZlbnRUeXBlVG9Db3VudC5iZWdpbigpOyBpdCAhPSBtX2V2ZW50VHlwZVRvQ291bnQuZW5k
KCk7ICsraXQpIHsKLSAgICAgICAgICAgIFJlZlB0cjxMaXN0ZW5lckNvdW50PiBsaXN0ZW5lckNv
dW50ID0gTGlzdGVuZXJDb3VudDo6Y3JlYXRlKCkuc2V0VHlwZShpdC0+Zmlyc3QpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLnNldENvdW50KGl0LT5zZWNvbmQpOworICAgICAgICAgICAgUmVmUHRyPExpc3Rl
bmVyQ291bnQ+IGxpc3RlbmVyQ291bnQgPSBMaXN0ZW5lckNvdW50OjpjcmVhdGUoKS5zZXRUeXBl
KGl0LT5rZXkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldENvdW50KGl0LT52YWx1ZSk7CiAgICAgICAg
ICAgICBsaXN0ZW5lclN0YXRzLT5hZGRJdGVtKGxpc3RlbmVyQ291bnQpOwogICAgICAgICB9CiAg
ICAgICAgIHJldHVybiBsaXN0ZW5lclN0YXRzLnJlbGVhc2UoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKaW5kZXggZWYzOWU2ZjEzOTMwNWNm
YWI4ZGE4MThlM2ExMWQwOTZmMzhmNmM2NC4uMmI5ZmEzYjUwZTk3ZjRjMzg3OTc3NDNiNzU5ODhm
MDVhZmE2ZDJhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
clBhZ2VBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBh
Z2VBZ2VudC5jcHAKQEAgLTQ1Miw3ICs0NTIsNyBAQCBzdGF0aWMgVmVjdG9yPENhY2hlZFJlc291
cmNlKj4gY2FjaGVkUmVzb3VyY2VzRm9yRnJhbWUoRnJhbWUqIGZyYW1lKQogICAgIGNvbnN0IENh
Y2hlZFJlc291cmNlTG9hZGVyOjpEb2N1bWVudFJlc291cmNlTWFwJiBhbGxSZXNvdXJjZXMgPSBm
cmFtZS0+ZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS0+YWxsQ2FjaGVkUmVzb3Vy
Y2VzKCk7CiAgICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OkRvY3VtZW50UmVzb3VyY2VNYXA6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IGFsbFJlc291cmNlcy5lbmQoKTsKICAgICBmb3IgKENhY2hlZFJl
c291cmNlTG9hZGVyOjpEb2N1bWVudFJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGFs
bFJlc291cmNlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgQ2FjaGVkUmVz
b3VyY2UqIGNhY2hlZFJlc291cmNlID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgQ2FjaGVk
UmVzb3VyY2UqIGNhY2hlZFJlc291cmNlID0gaXQtPnZhbHVlLmdldCgpOwogCiAgICAgICAgIHN3
aXRjaCAoY2FjaGVkUmVzb3VyY2UtPnR5cGUoKSkgewogICAgICAgICBjYXNlIENhY2hlZFJlc291
cmNlOjpJbWFnZVJlc291cmNlOgpAQCAtNzU2LDcgKzc1Niw3IEBAIHZvaWQgSW5zcGVjdG9yUGFn
ZUFnZW50OjpkaWRDbGVhcldpbmRvd09iamVjdEluV29ybGQoRnJhbWUqIGZyYW1lLCBET01XcmFw
cGVyV29yCiAgICAgICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gc2Ny
aXB0cy0+ZW5kKCk7CiAgICAgICAgIGZvciAoSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IHNjcmlwdHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAg
U3RyaW5nIHNjcmlwdFRleHQ7Ci0gICAgICAgICAgICBpZiAoaXQtPnNlY29uZC0+YXNTdHJpbmco
JnNjcmlwdFRleHQpKQorICAgICAgICAgICAgaWYgKGl0LT52YWx1ZS0+YXNTdHJpbmcoJnNjcmlw
dFRleHQpKQogICAgICAgICAgICAgICAgIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLT5pbmplY3RT
Y3JpcHQoc2NyaXB0VGV4dCwgbWFpbldvcmxkU2NyaXB0U3RhdGUoZnJhbWUpKTsKICAgICAgICAg
fQogICAgIH0KQEAgLTc4OCw4ICs3ODgsOCBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZnJh
bWVEZXRhY2hlZChGcmFtZSogZnJhbWUpCiB7CiAgICAgSGFzaE1hcDxGcmFtZSosIFN0cmluZz46
Oml0ZXJhdG9yIGl0ZXJhdG9yID0gbV9mcmFtZVRvSWRlbnRpZmllci5maW5kKGZyYW1lKTsKICAg
ICBpZiAoaXRlcmF0b3IgIT0gbV9mcmFtZVRvSWRlbnRpZmllci5lbmQoKSkgewotICAgICAgICBt
X2Zyb250ZW5kLT5mcmFtZURldGFjaGVkKGl0ZXJhdG9yLT5zZWNvbmQpOwotICAgICAgICBtX2lk
ZW50aWZpZXJUb0ZyYW1lLnJlbW92ZShpdGVyYXRvci0+c2Vjb25kKTsKKyAgICAgICAgbV9mcm9u
dGVuZC0+ZnJhbWVEZXRhY2hlZChpdGVyYXRvci0+dmFsdWUpOworICAgICAgICBtX2lkZW50aWZp
ZXJUb0ZyYW1lLnJlbW92ZShpdGVyYXRvci0+dmFsdWUpOwogICAgICAgICBtX2ZyYW1lVG9JZGVu
dGlmaWVyLnJlbW92ZShpdGVyYXRvcik7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwCmluZGV4IDljODY0YzVkZGJj
NDM1MWNjOTU2NTU1MDg1MTE0MjhiNGRiOWI1NzYuLjY0YjM2MmU4Y2IzMDZkMDhmMjY4OWEyOGIy
ZTJhYmRjMjBkMzhlMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JQcm9maWxlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAKQEAgLTI1NiwxMCArMjU2LDEwIEBAIHZvaWQgSW5zcGVj
dG9yUHJvZmlsZXJBZ2VudDo6Z2V0UHJvZmlsZUhlYWRlcnMoRXJyb3JTdHJpbmcqLCBSZWZQdHI8
VHlwZUJ1aWxkZXI6CiAKICAgICBQcm9maWxlc01hcDo6aXRlcmF0b3IgcHJvZmlsZXNFbmQgPSBt
X3Byb2ZpbGVzLmVuZCgpOwogICAgIGZvciAoUHJvZmlsZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9w
cm9maWxlcy5iZWdpbigpOyBpdCAhPSBwcm9maWxlc0VuZDsgKytpdCkKLSAgICAgICAgaGVhZGVy
cy0+YWRkSXRlbShjcmVhdGVQcm9maWxlSGVhZGVyKCppdC0+c2Vjb25kKSk7CisgICAgICAgIGhl
YWRlcnMtPmFkZEl0ZW0oY3JlYXRlUHJvZmlsZUhlYWRlcigqaXQtPnZhbHVlKSk7CiAgICAgSGVh
cFNuYXBzaG90c01hcDo6aXRlcmF0b3Igc25hcHNob3RzRW5kID0gbV9zbmFwc2hvdHMuZW5kKCk7
CiAgICAgZm9yIChIZWFwU25hcHNob3RzTWFwOjppdGVyYXRvciBpdCA9IG1fc25hcHNob3RzLmJl
Z2luKCk7IGl0ICE9IHNuYXBzaG90c0VuZDsgKytpdCkKLSAgICAgICAgaGVhZGVycy0+YWRkSXRl
bShjcmVhdGVTbmFwc2hvdEhlYWRlcigqaXQtPnNlY29uZCkpOworICAgICAgICBoZWFkZXJzLT5h
ZGRJdGVtKGNyZWF0ZVNuYXBzaG90SGVhZGVyKCppdC0+dmFsdWUpKTsKIH0KIAogbmFtZXNwYWNl
IHsKQEAgLTI4NywxNiArMjg3LDE2IEBAIHZvaWQgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6Z2V0
UHJvZmlsZShFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBwcm9maWxlT2JqZWN0ID0gVHlwZUJ1aWxk
ZXI6OlByb2ZpbGVyOjpQcm9maWxlOjpjcmVhdGUoKTsKLSAgICAgICAgcHJvZmlsZU9iamVjdC0+
c2V0SGVhZChpdC0+c2Vjb25kLT5idWlsZEluc3BlY3Rvck9iamVjdEZvckhlYWQoKSk7Ci0gICAg
ICAgIGlmIChpdC0+c2Vjb25kLT5ib3R0b21VcEhlYWQoKSkKLSAgICAgICAgICAgIHByb2ZpbGVP
YmplY3QtPnNldEJvdHRvbVVwSGVhZChpdC0+c2Vjb25kLT5idWlsZEluc3BlY3Rvck9iamVjdEZv
ckJvdHRvbVVwSGVhZCgpKTsKKyAgICAgICAgcHJvZmlsZU9iamVjdC0+c2V0SGVhZChpdC0+dmFs
dWUtPmJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9ySGVhZCgpKTsKKyAgICAgICAgaWYgKGl0LT52YWx1
ZS0+Ym90dG9tVXBIZWFkKCkpCisgICAgICAgICAgICBwcm9maWxlT2JqZWN0LT5zZXRCb3R0b21V
cEhlYWQoaXQtPnZhbHVlLT5idWlsZEluc3BlY3Rvck9iamVjdEZvckJvdHRvbVVwSGVhZCgpKTsK
ICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gSGVhcFByb2ZpbGVUeXBlKSB7CiAgICAgICAgIEhlYXBT
bmFwc2hvdHNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zbmFwc2hvdHMuZmluZCh1aWQpOwogICAgICAg
ICBpZiAoaXQgPT0gbV9zbmFwc2hvdHMuZW5kKCkpIHsKICAgICAgICAgICAgICplcnJvclN0cmlu
ZyA9ICJQcm9maWxlIHdhc24ndCBmb3VuZCI7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KLSAgICAgICAgUmVmUHRyPFNjcmlwdEhlYXBTbmFwc2hvdD4gc25hcHNob3QgPSBpdC0+c2Vj
b25kOworICAgICAgICBSZWZQdHI8U2NyaXB0SGVhcFNuYXBzaG90PiBzbmFwc2hvdCA9IGl0LT52
YWx1ZTsKICAgICAgICAgcHJvZmlsZU9iamVjdCA9IFR5cGVCdWlsZGVyOjpQcm9maWxlcjo6UHJv
ZmlsZTo6Y3JlYXRlKCk7CiAgICAgICAgIGlmIChtX2Zyb250ZW5kKSB7CiAgICAgICAgICAgICBP
dXRwdXRTdHJlYW0gc3RyZWFtKG1fZnJvbnRlbmQsIHVpZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5jcHAKaW5kZXggN2RlZmIzNTk1
ZGNiMWFkYTkyNTJhN2ViNjIwODM0NTY2NThhYjRjNC4uOGRlNGRjYWJlMzNiZjYyZWEzY2UwMzU0
MzJmNDkwYTRmY2E2ZGE5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclJlc291cmNlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JSZXNvdXJjZUFnZW50LmNwcApAQCAtMTA1LDcgKzEwNSw3IEBAIHN0YXRpYyBQYXNz
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JIZWFkZXJzKGNvbnN0IEhUVFBI
ZWFkZXJNYXAmIGhlCiAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaGVhZGVyc09iamVjdCA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gaGVhZGVycy5lbmQoKTsKICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gaGVhZGVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAg
IGhlYWRlcnNPYmplY3QtPnNldFN0cmluZyhpdC0+Zmlyc3Quc3RyaW5nKCksIGl0LT5zZWNvbmQp
OworICAgICAgICBoZWFkZXJzT2JqZWN0LT5zZXRTdHJpbmcoaXQtPmtleS5zdHJpbmcoKSwgaXQt
PnZhbHVlKTsKICAgICByZXR1cm4gaGVhZGVyc09iamVjdDsKIH0KIApAQCAtMjE2LDggKzIxNiw4
IEBAIHZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6d2lsbFNlbmRSZXF1ZXN0KHVuc2lnbmVk
IGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbnRMCiAgICAgICAgIEluc3BlY3Rvck9iamVjdDo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gaGVhZGVycy0+ZW5kKCk7CiAgICAgICAgIGZvciAoSW5zcGVjdG9y
T2JqZWN0Ojpjb25zdF9pdGVyYXRvciBpdCA9IGhlYWRlcnMtPmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgewogICAgICAgICAgICAgU3RyaW5nIHZhbHVlOwotICAgICAgICAgICAgaWYgKGl0LT5z
ZWNvbmQtPmFzU3RyaW5nKCZ2YWx1ZSkpCi0gICAgICAgICAgICAgICAgcmVxdWVzdC5zZXRIVFRQ
SGVhZGVyRmllbGQoaXQtPmZpcnN0LCB2YWx1ZSk7CisgICAgICAgICAgICBpZiAoaXQtPnZhbHVl
LT5hc1N0cmluZygmdmFsdWUpKQorICAgICAgICAgICAgICAgIHJlcXVlc3Quc2V0SFRUUEhlYWRl
ckZpZWxkKGl0LT5rZXksIHZhbHVlKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzY1LDcgKzM2
NSw3IEBAIHZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6ZG9jdW1lbnRUaHJlYWRhYmxlTG9h
ZGVyU3RhcnRlZExvYWRpbmdGb3JDbGllbnQodW5zCiAgICAgaWYgKGl0ID09IG1fcGVuZGluZ1hI
UlJlcGxheURhdGEuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFhIUlJlcGxheURhdGEq
IHhoclJlcGxheURhdGEgPSBpdC0+c2Vjb25kLmdldCgpOworICAgIFhIUlJlcGxheURhdGEqIHho
clJlcGxheURhdGEgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgU3RyaW5nIHJlcXVlc3RJZCA9IElk
ZW50aWZpZXJzRmFjdG9yeTo6cmVxdWVzdElkKGlkZW50aWZpZXIpOwogICAgIG1fcmVzb3VyY2Vz
RGF0YS0+c2V0WEhSUmVwbGF5RGF0YShyZXF1ZXN0SWQsIHhoclJlcGxheURhdGEpOwogfQpAQCAt
Mzc1LDcgKzM3NSw3IEBAIHZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6d2lsbExvYWRYSFIo
VGhyZWFkYWJsZUxvYWRlckNsaWVudCogY2xpZW50LCBjb25zdCBTCiAgICAgUmVmUHRyPFhIUlJl
cGxheURhdGE+IHhoclJlcGxheURhdGEgPSBYSFJSZXBsYXlEYXRhOjpjcmVhdGUobWV0aG9kLCB1
cmwsIGFzeW5jLCBmb3JtRGF0YSwgaW5jbHVkZUNyZWRlbnRpYWxzKTsKICAgICBIVFRQSGVhZGVy
TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBoZWFkZXJzLmVuZCgpOwogICAgIGZvciAoSFRUUEhl
YWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBoZWFkZXJzLmJlZ2luKCk7IGl0IT0gZW5kOyAr
K2l0KQotICAgICAgICB4aHJSZXBsYXlEYXRhLT5hZGRIZWFkZXIoaXQtPmZpcnN0LCBpdC0+c2Vj
b25kKTsKKyAgICAgICAgeGhyUmVwbGF5RGF0YS0+YWRkSGVhZGVyKGl0LT5rZXksIGl0LT52YWx1
ZSk7CiAgICAgbV9wZW5kaW5nWEhSUmVwbGF5RGF0YS5zZXQoY2xpZW50LCB4aHJSZXBsYXlEYXRh
KTsKIH0KIApAQCAtNjI0LDcgKzYyNCw3IEBAIHZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6
cmVwbGF5WEhSKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQpCiAgICAgeGhy
LT5vcGVuKHhoclJlcGxheURhdGEtPm1ldGhvZCgpLCB4aHJSZXBsYXlEYXRhLT51cmwoKSwgeGhy
UmVwbGF5RGF0YS0+YXN5bmMoKSwgY29kZSk7CiAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRl
cmF0b3IgZW5kID0geGhyUmVwbGF5RGF0YS0+aGVhZGVycygpLmVuZCgpOwogICAgIGZvciAoSFRU
UEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSB4aHJSZXBsYXlEYXRhLT5oZWFkZXJzKCku
YmVnaW4oKTsgaXQhPSBlbmQ7ICsraXQpCi0gICAgICAgIHhoci0+c2V0UmVxdWVzdEhlYWRlcihp
dC0+Zmlyc3QsIGl0LT5zZWNvbmQsIGNvZGUpOworICAgICAgICB4aHItPnNldFJlcXVlc3RIZWFk
ZXIoaXQtPmtleSwgaXQtPnZhbHVlLCBjb2RlKTsKICAgICB4aHItPnNlbmRGcm9tSW5zcGVjdG9y
KHhoclJlcGxheURhdGEtPmZvcm1EYXRhKCksIGNvZGUpOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUuY3BwIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmNwcAppbmRleCA3MGEyNDM5ODQ3YzQ1N2MzOGEzOTBh
MzMwMDRhM2Q5ZTFiMWRiNDFkLi5iYWYxMGM5NzFlMTE5NTMyNTc2YmY0OTQ1NTIyZjM3YjA4MzI1
YWZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5jcHAKQEAg
LTgwLDcgKzgwLDcgQEAgYm9vbCBJbnNwZWN0b3JTdGF0ZTo6Z2V0Qm9vbGVhbihjb25zdCBTdHJp
bmcmIHByb3BlcnR5TmFtZSkKICAgICBJbnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9yIGl0ID0gbV9w
cm9wZXJ0aWVzLT5maW5kKHByb3BlcnR5TmFtZSk7CiAgICAgYm9vbCB2YWx1ZSA9IGZhbHNlOwog
ICAgIGlmIChpdCAhPSBtX3Byb3BlcnRpZXMtPmVuZCgpKQotICAgICAgICBpdC0+c2Vjb25kLT5h
c0Jvb2xlYW4oJnZhbHVlKTsKKyAgICAgICAgaXQtPnZhbHVlLT5hc0Jvb2xlYW4oJnZhbHVlKTsK
ICAgICByZXR1cm4gdmFsdWU7CiB9CiAKQEAgLTg5LDcgKzg5LDcgQEAgU3RyaW5nIEluc3BlY3Rv
clN0YXRlOjpnZXRTdHJpbmcoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCiAgICAgSW5zcGVj
dG9yT2JqZWN0OjppdGVyYXRvciBpdCA9IG1fcHJvcGVydGllcy0+ZmluZChwcm9wZXJ0eU5hbWUp
OwogICAgIFN0cmluZyB2YWx1ZTsKICAgICBpZiAoaXQgIT0gbV9wcm9wZXJ0aWVzLT5lbmQoKSkK
LSAgICAgICAgaXQtPnNlY29uZC0+YXNTdHJpbmcoJnZhbHVlKTsKKyAgICAgICAgaXQtPnZhbHVl
LT5hc1N0cmluZygmdmFsdWUpOwogICAgIHJldHVybiB2YWx1ZTsKIH0KIApAQCAtOTgsNyArOTgs
NyBAQCBsb25nIEluc3BlY3RvclN0YXRlOjpnZXRMb25nKGNvbnN0IFN0cmluZyYgcHJvcGVydHlO
YW1lKQogICAgIEluc3BlY3Rvck9iamVjdDo6aXRlcmF0b3IgaXQgPSBtX3Byb3BlcnRpZXMtPmZp
bmQocHJvcGVydHlOYW1lKTsKICAgICBsb25nIHZhbHVlID0gMDsKICAgICBpZiAoaXQgIT0gbV9w
cm9wZXJ0aWVzLT5lbmQoKSkKLSAgICAgICAgaXQtPnNlY29uZC0+YXNOdW1iZXIoJnZhbHVlKTsK
KyAgICAgICAgaXQtPnZhbHVlLT5hc051bWJlcigmdmFsdWUpOwogICAgIHJldHVybiB2YWx1ZTsK
IH0KIApAQCAtMTA3LDcgKzEwNyw3IEBAIGRvdWJsZSBJbnNwZWN0b3JTdGF0ZTo6Z2V0RG91Ymxl
KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKQogICAgIEluc3BlY3Rvck9iamVjdDo6aXRlcmF0
b3IgaXQgPSBtX3Byb3BlcnRpZXMtPmZpbmQocHJvcGVydHlOYW1lKTsKICAgICBkb3VibGUgdmFs
dWUgPSAwOwogICAgIGlmIChpdCAhPSBtX3Byb3BlcnRpZXMtPmVuZCgpKQotICAgICAgICBpdC0+
c2Vjb25kLT5hc051bWJlcigmdmFsdWUpOworICAgICAgICBpdC0+dmFsdWUtPmFzTnVtYmVyKCZ2
YWx1ZSk7CiAgICAgcmV0dXJuIHZhbHVlOwogfQogCkBAIC0xMTgsNyArMTE4LDcgQEAgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvclN0YXRlOjpnZXRPYmplY3QoY29uc3QgU3Ry
aW5nJiBwcm9wZXJ0eU5hbWUKICAgICAgICAgbV9wcm9wZXJ0aWVzLT5zZXRPYmplY3QocHJvcGVy
dHlOYW1lLCBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKICAgICAgICAgaXQgPSBtX3Byb3Bl
cnRpZXMtPmZpbmQocHJvcGVydHlOYW1lKTsKICAgICB9Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQt
PmFzT2JqZWN0KCk7CisgICAgcmV0dXJuIGl0LT52YWx1ZS0+YXNPYmplY3QoKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvclN0eWxlU2hlZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclN0eWxlU2hlZXQuY3BwCmluZGV4IDViOTRkZTZjMTk3YzgyZjFjN2M4MTMzODBjYjg2NmEz
OGE1ZThjOGQuLjIxMzA1MDE0YWYwYjNjNGQ2ZWZiZDNkNzU4YTk0NzUxMzI1ZWMxOGIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKQEAg
LTUzNiw3ICs1MzYsNyBAQCBQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNTU1N0eWxlPiBJ
bnNwZWN0b3JTdHlsZTo6c3R5bGVXaXRoUHJvcGVydGllcygpIGNvbgogICAgICAgICAgICAgICAg
ICAgICAgICAgc2hvdWxkSW5hY3RpdmF0ZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGVs
c2UgewogICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmV2aW91c1BhcnNlZE9rOwotICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gYWN0aXZlSXQtPnNlY29uZC0+Z2V0
Qm9vbGVhbihUeXBlQnVpbGRlcjo6Q1NTOjpDU1NQcm9wZXJ0eTo6UGFyc2VkT2ssICZwcmV2aW91
c1BhcnNlZE9rKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc3VjY2VzcyA9IGFjdGl2
ZUl0LT52YWx1ZS0+Z2V0Qm9vbGVhbihUeXBlQnVpbGRlcjo6Q1NTOjpDU1NQcm9wZXJ0eTo6UGFy
c2VkT2ssICZwcmV2aW91c1BhcnNlZE9rKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChz
dWNjZXNzICYmICFwcmV2aW91c1BhcnNlZE9rKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNob3VsZEluYWN0aXZhdGUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC01NDQs
NyArNTQ0LDcgQEAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVj
dG9yU3R5bGU6OnN0eWxlV2l0aFByb3BlcnRpZXMoKSBjb24KICAgICAgICAgICAgICAgICAgICAg
cHJvcGVydHlOYW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5LnNldChjYW5vbmljYWxQcm9wZXJ0
eU5hbWUsIHByb3BlcnR5KTsKIAogICAgICAgICAgICAgICAgIGlmIChzaG91bGRJbmFjdGl2YXRl
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGFjdGl2ZUl0LT5zZWNvbmQtPnNldFN0YXR1cyhUeXBl
QnVpbGRlcjo6Q1NTOjpDU1NQcm9wZXJ0eTo6U3RhdHVzOjpJbmFjdGl2ZSk7CisgICAgICAgICAg
ICAgICAgICAgIGFjdGl2ZUl0LT52YWx1ZS0+c2V0U3RhdHVzKFR5cGVCdWlsZGVyOjpDU1M6OkNT
U1Byb3BlcnR5OjpTdGF0dXM6OkluYWN0aXZlKTsKICAgICAgICAgICAgICAgICAgICAgcHJvcGVy
dHlOYW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5LnNldChjYW5vbmljYWxQcm9wZXJ0eU5hbWUs
IHByb3BlcnR5KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAt
MTA1Nyw3ICsxMDU3LDcgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3JTdHlsZT4gSW5zcGVjdG9yU3R5
bGVTaGVldDo6aW5zcGVjdG9yU3R5bGVGb3JJZChjb25zdCBJbnNwZWMKICAgICAgICAgUmVmUHRy
PEluc3BlY3RvclN0eWxlPiBpbnNwZWN0b3JTdHlsZSA9IEluc3BlY3RvclN0eWxlOjpjcmVhdGUo
aWQsIHN0eWxlLCB0aGlzKTsKICAgICAgICAgcmV0dXJuIGluc3BlY3RvclN0eWxlLnJlbGVhc2Uo
KTsKICAgICB9Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgcmV0dXJuIGl0LT52YWx1ZTsK
IH0KIAogdm9pZCBJbnNwZWN0b3JTdHlsZVNoZWV0OjpyZW1lbWJlckluc3BlY3RvclN0eWxlKFJl
ZlB0cjxJbnNwZWN0b3JTdHlsZT4gaW5zcGVjdG9yU3R5bGUpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwCmluZGV4IGU0ZWFkMTdlNTI4NjY4ZDllNTA1YmZk
Y2IxMDMwZTdiNTBmYjc3NzcuLmFkYTI2MTdjYzBjNGJlYTBhOWYxOTlmMjU5NzcxNGQyNjkwYjA2
ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwCkBA
IC03MTcsNyArNzE3LDcgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gSW5zcGVjdG9yT2Jq
ZWN0QmFzZTo6Z2V0KGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKICAgICBEaWN0aW9uYXJ5Ojpj
b25zdF9pdGVyYXRvciBpdCA9IG1fZGF0YS5maW5kKG5hbWUpOwogICAgIGlmIChpdCA9PSBtX2Rh
dGEuZW5kKCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBpdC0+c2Vjb25kOworICAg
IHJldHVybiBpdC0+dmFsdWU7CiB9CiAKIHZvaWQgSW5zcGVjdG9yT2JqZWN0QmFzZTo6cmVtb3Zl
KGNvbnN0IFN0cmluZyYgbmFtZSkKQEAgLTczOSw5ICs3MzksOSBAQCB2b2lkIEluc3BlY3Rvck9i
amVjdEJhc2U6OndyaXRlSlNPTihTdHJpbmdCdWlsZGVyKiBvdXRwdXQpIGNvbnN0CiAgICAgICAg
IEFTU0VSVChpdCAhPSBtX2RhdGEuZW5kKCkpOwogICAgICAgICBpZiAoaSkKICAgICAgICAgICAg
IG91dHB1dC0+YXBwZW5kKCcsJyk7Ci0gICAgICAgIGRvdWJsZVF1b3RlU3RyaW5nKGl0LT5maXJz
dCwgb3V0cHV0KTsKKyAgICAgICAgZG91YmxlUXVvdGVTdHJpbmcoaXQtPmtleSwgb3V0cHV0KTsK
ICAgICAgICAgb3V0cHV0LT5hcHBlbmQoJzonKTsKLSAgICAgICAgaXQtPnNlY29uZC0+d3JpdGVK
U09OKG91dHB1dCk7CisgICAgICAgIGl0LT52YWx1ZS0+d3JpdGVKU09OKG91dHB1dCk7CiAgICAg
fQogICAgIG91dHB1dC0+YXBwZW5kKCd9Jyk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yV29ya2VyQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvcldvcmtlckFnZW50LmNwcAppbmRleCAxYjdjZWRiYzM4MzJlY2Y5MzY3
ZmVhN2Y1YTBiNmEwMTdhZWI4YzE1Li5lOTBmN2NiNGI0OGE0NzkyNjgyMTllODlmZWI5ZGY4MWU1
MDMwYWRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yV29y
a2VyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JXb3Jr
ZXJBZ2VudC5jcHAKQEAgLTIwNSw5ICsyMDUsOSBAQCB2b2lkIEluc3BlY3RvcldvcmtlckFnZW50
Ojp3b3JrZXJDb250ZXh0VGVybWluYXRlZChXb3JrZXJDb250ZXh0UHJveHkqIHByb3h5KQogewog
ICAgIG1fZGVkaWNhdGVkV29ya2Vycy5yZW1vdmUocHJveHkpOwogICAgIGZvciAoV29ya2VyQ2hh
bm5lbHM6Oml0ZXJhdG9yIGl0ID0gbV9pZFRvQ2hhbm5lbC5iZWdpbigpOyBpdCAhPSBtX2lkVG9D
aGFubmVsLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmIChwcm94eSA9PSBpdC0+c2Vjb25kLT5w
cm94eSgpKSB7Ci0gICAgICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kLT53b3JrZXIoKS0+d29y
a2VyVGVybWluYXRlZChpdC0+Zmlyc3QpOwotICAgICAgICAgICAgZGVsZXRlIGl0LT5zZWNvbmQ7
CisgICAgICAgIGlmIChwcm94eSA9PSBpdC0+dmFsdWUtPnByb3h5KCkpIHsKKyAgICAgICAgICAg
IG1faW5zcGVjdG9yRnJvbnRlbmQtPndvcmtlcigpLT53b3JrZXJUZXJtaW5hdGVkKGl0LT5rZXkp
OworICAgICAgICAgICAgZGVsZXRlIGl0LT52YWx1ZTsKICAgICAgICAgICAgIG1faWRUb0NoYW5u
ZWwucmVtb3ZlKGl0KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMjE3LDE0
ICsyMTcsMTQgQEAgdm9pZCBJbnNwZWN0b3JXb3JrZXJBZ2VudDo6d29ya2VyQ29udGV4dFRlcm1p
bmF0ZWQoV29ya2VyQ29udGV4dFByb3h5KiBwcm94eSkKIHZvaWQgSW5zcGVjdG9yV29ya2VyQWdl
bnQ6OmNyZWF0ZVdvcmtlckZyb250ZW5kQ2hhbm5lbHNGb3JFeGlzdGluZ1dvcmtlcnMoKQogewog
ICAgIGZvciAoRGVkaWNhdGVkV29ya2Vyczo6aXRlcmF0b3IgaXQgPSBtX2RlZGljYXRlZFdvcmtl
cnMuYmVnaW4oKTsgaXQgIT0gbV9kZWRpY2F0ZWRXb3JrZXJzLmVuZCgpOyArK2l0KQotICAgICAg
ICBjcmVhdGVXb3JrZXJGcm9udGVuZENoYW5uZWwoaXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsKKyAg
ICAgICAgY3JlYXRlV29ya2VyRnJvbnRlbmRDaGFubmVsKGl0LT5rZXksIGl0LT52YWx1ZSk7CiB9
CiAKIHZvaWQgSW5zcGVjdG9yV29ya2VyQWdlbnQ6OmRlc3Ryb3lXb3JrZXJGcm9udGVuZENoYW5u
ZWxzKCkKIHsKICAgICBmb3IgKFdvcmtlckNoYW5uZWxzOjppdGVyYXRvciBpdCA9IG1faWRUb0No
YW5uZWwuYmVnaW4oKTsgaXQgIT0gbV9pZFRvQ2hhbm5lbC5lbmQoKTsgKytpdCkgewotICAgICAg
ICBpdC0+c2Vjb25kLT5kaXNjb25uZWN0RnJvbVdvcmtlckNvbnRleHQoKTsKLSAgICAgICAgZGVs
ZXRlIGl0LT5zZWNvbmQ7CisgICAgICAgIGl0LT52YWx1ZS0+ZGlzY29ubmVjdEZyb21Xb3JrZXJD
b250ZXh0KCk7CisgICAgICAgIGRlbGV0ZSBpdC0+dmFsdWU7CiAgICAgfQogICAgIG1faWRUb0No
YW5uZWwuY2xlYXIoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9N
ZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9N
ZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsLmNwcAppbmRleCA4NTVhYTQ3NWU0ZjUxYTE5YzcxMjgw
ZjdkNmE5ZTMwZWUzYjU0ZTY1Li4yNDljYjE2MGQyMzQ3ZThhYmFlY2ZjNTFmMDRjMDk1YzcwNzFl
YjU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvTWVtb3J5SW5zdHJ1bWVu
dGF0aW9uSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL01lbW9yeUluc3Ry
dW1lbnRhdGlvbkltcGwuY3BwCkBAIC00Miw3ICs0Miw3IEBAIHZvaWQgTWVtb3J5SW5zdHJ1bWVu
dGF0aW9uQ2xpZW50SW1wbDo6Y291bnRPYmplY3RTaXplKE1lbW9yeU9iamVjdFR5cGUgb2JqZWN0
VHlwCiAgICAgQVNTRVJUKG9iamVjdFR5cGUpOwogICAgIFR5cGVUb1NpemVNYXA6OkFkZFJlc3Vs
dCByZXN1bHQgPSBtX3RvdGFsU2l6ZXMuYWRkKG9iamVjdFR5cGUsIHNpemUpOwogICAgIGlmICgh
cmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kICs9IHNp
emU7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgKz0gc2l6ZTsKICAgICArK21fdG90
YWxDb3VudGVkT2JqZWN0czsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL01lbW9yeUluc3RydW1lbnRhdGlvbkltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9NZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsLmgKaW5kZXggNjQ2NjE3MWU0Y2NjYTcwNjNkNTMy
Zjc0NThkYTA3N2VhNTk3YzVhZS4uM2JhMjBjZWNiNTQ0OGM1NGFlMDk1Njk0ZjMyYWJiMWZiMWNj
ZDkyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL01lbW9yeUluc3RydW1l
bnRhdGlvbkltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvTWVtb3J5SW5zdHJ1
bWVudGF0aW9uSW1wbC5oCkBAIC01NSwxNCArNTUsMTQgQEAgcHVibGljOgogICAgIHNpemVfdCB0
b3RhbFNpemUoTWVtb3J5T2JqZWN0VHlwZSBvYmplY3RUeXBlKSBjb25zdAogICAgIHsKICAgICAg
ICAgVHlwZVRvU2l6ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaSA9IG1fdG90YWxTaXplcy5maW5kKG9i
amVjdFR5cGUpOwotICAgICAgICByZXR1cm4gaSA9PSBtX3RvdGFsU2l6ZXMuZW5kKCkgPyAwIDog
aS0+c2Vjb25kOworICAgICAgICByZXR1cm4gaSA9PSBtX3RvdGFsU2l6ZXMuZW5kKCkgPyAwIDog
aS0+dmFsdWU7CiAgICAgfQogCiAgICAgc2l6ZV90IHJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkg
Y29uc3QKICAgICB7CiAgICAgICAgIHNpemVfdCBzaXplID0gMDsKICAgICAgICAgZm9yIChUeXBl
VG9TaXplTWFwOjpjb25zdF9pdGVyYXRvciBpID0gbV90b3RhbFNpemVzLmJlZ2luKCk7IGkgIT0g
bV90b3RhbFNpemVzLmVuZCgpOyArK2kpCi0gICAgICAgICAgICBzaXplICs9IGktPnNlY29uZDsK
KyAgICAgICAgICAgIHNpemUgKz0gaS0+dmFsdWU7CiAgICAgICAgIHJldHVybiBzaXplOwogICAg
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL05ldHdvcmtSZXNvdXJj
ZXNEYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0
YS5jcHAKaW5kZXggNDE5OGZiNTFkNjlhYmQwNmQxZDAyM2I0NzI1NzEyOTI2MTVhMTBhMy4uNzg4
ZWJlYTU1ZDI2YjkyNTViM2QxOTMxZjhhM2Y5ZmJiMGNmOTY5MSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL05ldHdvcmtSZXNvdXJjZXNEYXRhLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvTmV0d29ya1Jlc291cmNlc0RhdGEuY3BwCkBAIC0yOTEsOCArMjkx
LDggQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VzRGF0YTo6c2V0WEhSUmVwbGF5RGF0YShjb25zdCBT
dHJpbmcmIHJlcXVlc3RJZCwgWEhSUmVwbGF5RGEKICAgICAgICAgUmV1c2VkUmVxdWVzdElkczo6
aXRlcmF0b3IgaXQ7CiAgICAgICAgIFJldXNlZFJlcXVlc3RJZHM6Oml0ZXJhdG9yIGVuZCA9IG1f
cmV1c2VkWEhSUmVwbGF5RGF0YVJlcXVlc3RJZHMuZW5kKCk7CiAgICAgICAgIGZvciAoaXQgPSBt
X3JldXNlZFhIUlJlcGxheURhdGFSZXF1ZXN0SWRzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewotICAgICAgICAgICAgaWYgKGl0LT5zZWNvbmQgPT0gcmVxdWVzdElkKQotICAgICAgICAgICAg
ICAgIHNldFhIUlJlcGxheURhdGEoaXQtPmZpcnN0LCB4aHJSZXBsYXlEYXRhKTsKKyAgICAgICAg
ICAgIGlmIChpdC0+dmFsdWUgPT0gcmVxdWVzdElkKQorICAgICAgICAgICAgICAgIHNldFhIUlJl
cGxheURhdGEoaXQtPmtleSwgeGhyUmVwbGF5RGF0YSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0
dXJuOwogICAgIH0KQEAgLTMxOCwxMCArMzE4LDEwIEBAIFZlY3RvcjxTdHJpbmc+IE5ldHdvcmtS
ZXNvdXJjZXNEYXRhOjpyZW1vdmVDYWNoZWRSZXNvdXJjZShDYWNoZWRSZXNvdXJjZSogY2FjaGVk
CiAgICAgUmVzb3VyY2VEYXRhTWFwOjppdGVyYXRvciBpdDsKICAgICBSZXNvdXJjZURhdGFNYXA6
Oml0ZXJhdG9yIGVuZCA9IG1fcmVxdWVzdElkVG9SZXNvdXJjZURhdGFNYXAuZW5kKCk7CiAgICAg
Zm9yIChpdCA9IG1fcmVxdWVzdElkVG9SZXNvdXJjZURhdGFNYXAuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7Ci0gICAgICAgIFJlc291cmNlRGF0YSogcmVzb3VyY2VEYXRhID0gaXQtPnNlY29u
ZDsKKyAgICAgICAgUmVzb3VyY2VEYXRhKiByZXNvdXJjZURhdGEgPSBpdC0+dmFsdWU7CiAgICAg
ICAgIGlmIChyZXNvdXJjZURhdGEtPmNhY2hlZFJlc291cmNlKCkgPT0gY2FjaGVkUmVzb3VyY2Up
IHsKICAgICAgICAgICAgIHJlc291cmNlRGF0YS0+c2V0Q2FjaGVkUmVzb3VyY2UoMCk7Ci0gICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKGl0LT5maXJzdCk7CisgICAgICAgICAgICByZXN1bHQuYXBw
ZW5kKGl0LT5rZXkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0zMzgsOSArMzM4LDkgQEAgdm9p
ZCBOZXR3b3JrUmVzb3VyY2VzRGF0YTo6Y2xlYXIoY29uc3QgU3RyaW5nJiBwcmVzZXJ2ZWRMb2Fk
ZXJJZCkKICAgICBSZXNvdXJjZURhdGFNYXA6Oml0ZXJhdG9yIGl0OwogICAgIFJlc291cmNlRGF0
YU1hcDo6aXRlcmF0b3IgZW5kID0gbV9yZXF1ZXN0SWRUb1Jlc291cmNlRGF0YU1hcC5lbmQoKTsK
ICAgICBmb3IgKGl0ID0gbV9yZXF1ZXN0SWRUb1Jlc291cmNlRGF0YU1hcC5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKLSAgICAgICAgUmVzb3VyY2VEYXRhKiByZXNvdXJjZURhdGEgPSBpdC0+
c2Vjb25kOworICAgICAgICBSZXNvdXJjZURhdGEqIHJlc291cmNlRGF0YSA9IGl0LT52YWx1ZTsK
ICAgICAgICAgaWYgKCFwcmVzZXJ2ZWRMb2FkZXJJZC5pc051bGwoKSAmJiByZXNvdXJjZURhdGEt
PmxvYWRlcklkKCkgPT0gcHJlc2VydmVkTG9hZGVySWQpCi0gICAgICAgICAgICBwcmVzZXJ2ZWRN
YXAuc2V0KGl0LT5maXJzdCwgaXQtPnNlY29uZCk7CisgICAgICAgICAgICBwcmVzZXJ2ZWRNYXAu
c2V0KGl0LT5rZXksIGl0LT52YWx1ZSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGRlbGV0
ZSByZXNvdXJjZURhdGE7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVy
L0Nyb3NzT3JpZ2luQWNjZXNzQ29udHJvbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jv
c3NPcmlnaW5BY2Nlc3NDb250cm9sLmNwcAppbmRleCBhYmEyYmEwNjNlNTkzMDhmYWVjNDRiZmM3
OGRmYWY4ZDliODQ1YTBiLi45YjI2ZmM4NmM5MDQzOTM5NTE1ZjEwYWU2OWViYjY1NTMwYzBiNDMx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5BY2Nlc3NDb250
cm9sLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5BY2Nlc3NDb250
cm9sLmNwcApAQCAtNjgsNyArNjgsNyBAQCBib29sIGlzU2ltcGxlQ3Jvc3NPcmlnaW5BY2Nlc3NS
ZXF1ZXN0KGNvbnN0IFN0cmluZyYgbWV0aG9kLCBjb25zdCBIVFRQSGVhZGVyTWFwJgogCiAgICAg
SFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaGVhZGVyTWFwLmVuZCgpOwogICAg
IGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBoZWFkZXJNYXAuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmICghaXNPbkFjY2Vzc0NvbnRyb2xTaW1w
bGVSZXF1ZXN0SGVhZGVyV2hpdGVsaXN0KGl0LT5maXJzdCwgaXQtPnNlY29uZCkpCisgICAgICAg
IGlmICghaXNPbkFjY2Vzc0NvbnRyb2xTaW1wbGVSZXF1ZXN0SGVhZGVyV2hpdGVsaXN0KGl0LT5r
ZXksIGl0LT52YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0x
MTYsMTQgKzExNiwxNCBAQCBSZXNvdXJjZVJlcXVlc3QgY3JlYXRlQWNjZXNzQ29udHJvbFByZWZs
aWdodFJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZQogICAgIGlmIChyZXF1ZXN0
SGVhZGVyRmllbGRzLnNpemUoKSA+IDApIHsKICAgICAgICAgU3RyaW5nQnVpbGRlciBoZWFkZXJC
dWZmZXI7CiAgICAgICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcmVxdWVz
dEhlYWRlckZpZWxkcy5iZWdpbigpOwotICAgICAgICBoZWFkZXJCdWZmZXIuYXBwZW5kKGl0LT5m
aXJzdCk7CisgICAgICAgIGhlYWRlckJ1ZmZlci5hcHBlbmQoaXQtPmtleSk7CiAgICAgICAgICsr
aXQ7CiAKICAgICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcmVxdWVz
dEhlYWRlckZpZWxkcy5lbmQoKTsKICAgICAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgewog
ICAgICAgICAgICAgaGVhZGVyQnVmZmVyLmFwcGVuZCgnLCcpOwogICAgICAgICAgICAgaGVhZGVy
QnVmZmVyLmFwcGVuZCgnICcpOwotICAgICAgICAgICAgaGVhZGVyQnVmZmVyLmFwcGVuZChpdC0+
Zmlyc3QpOworICAgICAgICAgICAgaGVhZGVyQnVmZmVyLmFwcGVuZChpdC0+a2V5KTsKICAgICAg
ICAgfQogCiAgICAgICAgIHByZWZsaWdodFJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKCJBY2Nl
c3MtQ29udHJvbC1SZXF1ZXN0LUhlYWRlcnMiLCBoZWFkZXJCdWZmZXIudG9TdHJpbmcoKS5sb3dl
cigpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpblByZWZs
aWdodFJlc3VsdENhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpblBy
ZWZsaWdodFJlc3VsdENhY2hlLmNwcAppbmRleCAwNGQ1ODgxNTVjZTU1MzNiZGRkM2YwMmIzYmQ4
MTVlZDllZTM5OWViLi45ZDUxYzg3ZmU2YzRlN2Q0MzkzM2U0NWVlZjdkNWMxOWJkNWUyMDg0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1
bHRDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luUHJlZmxp
Z2h0UmVzdWx0Q2FjaGUuY3BwCkBAIC0xMjUsOCArMTI1LDggQEAgYm9vbCBDcm9zc09yaWdpblBy
ZWZsaWdodFJlc3VsdENhY2hlSXRlbTo6YWxsb3dzQ3Jvc3NPcmlnaW5IZWFkZXJzKGNvbnN0IEhU
VFBIZWEKIHsKICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSByZXF1ZXN0
SGVhZGVycy5lbmQoKTsKICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gcmVxdWVzdEhlYWRlcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlm
ICghbV9oZWFkZXJzLmNvbnRhaW5zKGl0LT5maXJzdCkgJiYgIWlzT25BY2Nlc3NDb250cm9sU2lt
cGxlUmVxdWVzdEhlYWRlcldoaXRlbGlzdChpdC0+Zmlyc3QsIGl0LT5zZWNvbmQpKSB7Ci0gICAg
ICAgICAgICBlcnJvckRlc2NyaXB0aW9uID0gIlJlcXVlc3QgaGVhZGVyIGZpZWxkICIgKyBpdC0+
Zmlyc3Quc3RyaW5nKCkgKyAiIGlzIG5vdCBhbGxvd2VkIGJ5IEFjY2Vzcy1Db250cm9sLUFsbG93
LUhlYWRlcnMuIjsKKyAgICAgICAgaWYgKCFtX2hlYWRlcnMuY29udGFpbnMoaXQtPmtleSkgJiYg
IWlzT25BY2Nlc3NDb250cm9sU2ltcGxlUmVxdWVzdEhlYWRlcldoaXRlbGlzdChpdC0+a2V5LCBp
dC0+dmFsdWUpKSB7CisgICAgICAgICAgICBlcnJvckRlc2NyaXB0aW9uID0gIlJlcXVlc3QgaGVh
ZGVyIGZpZWxkICIgKyBpdC0+a2V5LnN0cmluZygpICsgIiBpcyBub3QgYWxsb3dlZCBieSBBY2Nl
c3MtQ29udHJvbC1BbGxvdy1IZWFkZXJzLiI7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIH0KICAgICB9CkBAIC0xNjcsNyArMTY3LDcgQEAgYm9vbCBDcm9zc09yaWdpblByZWZs
aWdodFJlc3VsdENhY2hlOjpjYW5Ta2lwUHJlZmxpZ2h0KGNvbnN0IFN0cmluZyYgb3JpZ2luLCBj
b24KICAgICBpZiAoY2FjaGVJdCA9PSBtX3ByZWZsaWdodEhhc2hNYXAuZW5kKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIGlmIChjYWNoZUl0LT5zZWNvbmQtPmFsbG93c1JlcXVlc3Qo
aW5jbHVkZUNyZWRlbnRpYWxzLCBtZXRob2QsIHJlcXVlc3RIZWFkZXJzKSkKKyAgICBpZiAoY2Fj
aGVJdC0+dmFsdWUtPmFsbG93c1JlcXVlc3QoaW5jbHVkZUNyZWRlbnRpYWxzLCBtZXRob2QsIHJl
cXVlc3RIZWFkZXJzKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBtX3ByZWZsaWdodEhh
c2hNYXAucmVtb3ZlKGNhY2hlSXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVy
L0RvY3VtZW50TG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRl
ci5jcHAKaW5kZXggYjVhY2YyYjU1MzFkZmY3YjBkOGU2ZjJlZmQyZjU5YjAyZTBlZjY1Ny4uMmZk
Y2U5MTQ2MTA2Y2YyYWI4Y2RiMzJkMGJhMTYxMmE3YTRhZmRmYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCkBAIC02MjAsNyArNjIwLDcgQEAgdm9pZCBEb2N1bWVu
dExvYWRlcjo6Z2V0U3VicmVzb3VyY2VzKFZlY3RvcjxQYXNzUmVmUHRyPEFyY2hpdmVSZXNvdXJj
ZT4gPiYgc3VicmUKICAgICBjb25zdCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6RG9jdW1lbnRSZXNv
dXJjZU1hcCYgYWxsUmVzb3VyY2VzID0gZG9jdW1lbnQtPmNhY2hlZFJlc291cmNlTG9hZGVyKCkt
PmFsbENhY2hlZFJlc291cmNlcygpOwogICAgIENhY2hlZFJlc291cmNlTG9hZGVyOjpEb2N1bWVu
dFJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBhbGxSZXNvdXJjZXMuZW5kKCk7CiAg
ICAgZm9yIChDYWNoZWRSZXNvdXJjZUxvYWRlcjo6RG9jdW1lbnRSZXNvdXJjZU1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBhbGxSZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0g
ICAgICAgIFJlZlB0cjxBcmNoaXZlUmVzb3VyY2U+IHN1YnJlc291cmNlID0gdGhpcy0+c3VicmVz
b3VyY2UoS1VSTChQYXJzZWRVUkxTdHJpbmcsIGl0LT5zZWNvbmQtPnVybCgpKSk7CisgICAgICAg
IFJlZlB0cjxBcmNoaXZlUmVzb3VyY2U+IHN1YnJlc291cmNlID0gdGhpcy0+c3VicmVzb3VyY2Uo
S1VSTChQYXJzZWRVUkxTdHJpbmcsIGl0LT52YWx1ZS0+dXJsKCkpKTsKICAgICAgICAgaWYgKHN1
YnJlc291cmNlKQogICAgICAgICAgICAgc3VicmVzb3VyY2VzLmFwcGVuZChzdWJyZXNvdXJjZS5y
ZWxlYXNlKCkpOwogICAgIH0KQEAgLTY1Miw4ICs2NTIsOCBAQCB2b2lkIERvY3VtZW50TG9hZGVy
OjpzdWJzdGl0dXRlUmVzb3VyY2VEZWxpdmVyeVRpbWVyRmlyZWQoVGltZXI8RG9jdW1lbnRMb2Fk
ZXI+KgogCiAgICAgU3Vic3RpdHV0ZVJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBj
b3B5LmVuZCgpOwogICAgIGZvciAoU3Vic3RpdHV0ZVJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IGNvcHkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFJlZlB0cjxS
ZXNvdXJjZUxvYWRlcj4gbG9hZGVyID0gaXQtPmZpcnN0OwotICAgICAgICBTdWJzdGl0dXRlUmVz
b3VyY2UqIHJlc291cmNlID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgUmVmUHRyPFJlc291
cmNlTG9hZGVyPiBsb2FkZXIgPSBpdC0+a2V5OworICAgICAgICBTdWJzdGl0dXRlUmVzb3VyY2Uq
IHJlc291cmNlID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAKICAgICAgICAgaWYgKHJlc291
cmNlKSB7CiAgICAgICAgICAgICBTaGFyZWRCdWZmZXIqIGRhdGEgPSByZXNvdXJjZS0+ZGF0YSgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL01haW5SZXNvdXJjZUxvYWRlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvTWFpblJlc291cmNlTG9hZGVyLmNwcAppbmRleCBl
YTY2NzAzNmM4YzM5ZjY2MjQ4ZDhlMjVkOGNlMWIxODFmNzRjZTFjLi4zZDUzOTBjZGI5ZDJkZTE3
N2JiMjQyN2E1ODIzMWNjOGQyYjVhY2EwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvTWFpblJlc291cmNlTG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvTWFp
blJlc291cmNlTG9hZGVyLmNwcApAQCAtMzY4LDcgKzM2OCw3IEBAIHZvaWQgTWFpblJlc291cmNl
TG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcikKIAog
ICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gci5odHRwSGVhZGVyRmllbGRz
KCkuZmluZChBdG9taWNTdHJpbmcoIngtZnJhbWUtb3B0aW9ucyIpKTsKICAgICBpZiAoaXQgIT0g
ci5odHRwSGVhZGVyRmllbGRzKCkuZW5kKCkpIHsKLSAgICAgICAgU3RyaW5nIGNvbnRlbnQgPSBp
dC0+c2Vjb25kOworICAgICAgICBTdHJpbmcgY29udGVudCA9IGl0LT52YWx1ZTsKICAgICAgICAg
aWYgKG1fZnJhbWUtPmxvYWRlcigpLT5zaG91bGRJbnRlcnJ1cHRMb2FkRm9yWEZyYW1lT3B0aW9u
cyhjb250ZW50LCByLnVybCgpKSkgewogICAgICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpjb250aW51ZUFmdGVyWEZyYW1lT3B0aW9uc0RlbmllZChtX2ZyYW1lLmdldCgpLCBkb2N1
bWVudExvYWRlcigpLCBpZGVudGlmaWVyKCksIHIpOwogICAgICAgICAgICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChTdHJpbmcsIGNvbnNvbGVNZXNzYWdlLCAoQVNDSUlMaXRlcmFsKCJSZWZ1c2VkIHRv
IGRpc3BsYXkgZG9jdW1lbnQgYmVjYXVzZSBkaXNwbGF5IGZvcmJpZGRlbiBieSBYLUZyYW1lLU9w
dGlvbnMuXG4iKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNl
TG9hZFNjaGVkdWxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU2No
ZWR1bGVyLmNwcAppbmRleCBhMWIyM2M5OWQxMTgxNTY5MzU1OTU2OGNiOTczOTk5ODJhYTEyYTY5
Li43YjFkYWRlM2JjMDllYjFkZWFmNWM5MzRkMDQ5Zjg3ZTIzN2VlOTU4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcApAQCAtMTc4LDcgKzE3
OCw3IEBAIHZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhS
ZXNvdXJjZUxvYWRQcmlvcml0eSBtaW5pbXVtUHJpCiAgICAgbV9ob3N0cy5jaGVja0NvbnNpc3Rl
bmN5KCk7CiAgICAgSG9zdE1hcDo6aXRlcmF0b3IgZW5kID0gbV9ob3N0cy5lbmQoKTsKICAgICBm
b3IgKEhvc3RNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2hvc3RzLmJlZ2luKCk7IGl0ZXIgIT0gZW5k
OyArK2l0ZXIpCi0gICAgICAgIGhvc3RzVG9TZXJ2ZS5hcHBlbmQoaXRlci0+c2Vjb25kKTsKKyAg
ICAgICAgaG9zdHNUb1NlcnZlLmFwcGVuZChpdGVyLT52YWx1ZSk7CiAKICAgICBpbnQgc2l6ZSA9
IGhvc3RzVG9TZXJ2ZS5zaXplKCk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyArK2kp
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlv
bkNhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNh
Y2hlLmNwcAppbmRleCBhYmIwMDIzMmZmZjYzMmE5NWZmOGZmOWVlMzQ2NjUwYjdmOTA1YzMwLi43
OWNjOWQ4YmRkNTA5OTgyZGJiZDU5ZDdjNThjZjNkMGEzOTY5OTM2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGUuY3BwCkBAIC0xMDYs
MTEgKzEwNiwxMSBAQCB1bnNpZ25lZCBBcHBsaWNhdGlvbkNhY2hlOjpyZW1vdmVSZXNvdXJjZShj
b25zdCBTdHJpbmcmIHVybCkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAvLyBUaGUgcmVzb3Vy
Y2UgZXhpc3RzLCBnZXQgaXRzIHR5cGUgc28gd2UgY2FuIHJldHVybiBpdC4KLSAgICB1bnNpZ25l
ZCB0eXBlID0gaXQtPnNlY29uZC0+dHlwZSgpOworICAgIHVuc2lnbmVkIHR5cGUgPSBpdC0+dmFs
dWUtPnR5cGUoKTsKIAogICAgIG1fcmVzb3VyY2VzLnJlbW92ZShpdCk7CiAKLSAgICBtX2VzdGlt
YXRlZFNpemVJblN0b3JhZ2UgLT0gaXQtPnNlY29uZC0+ZXN0aW1hdGVkU2l6ZUluU3RvcmFnZSgp
OworICAgIG1fZXN0aW1hdGVkU2l6ZUluU3RvcmFnZSAtPSBpdC0+dmFsdWUtPmVzdGltYXRlZFNp
emVJblN0b3JhZ2UoKTsKIAogICAgIHJldHVybiB0eXBlOwogfSAgICAKQEAgLTE4OCw3ICsxODgs
NyBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGU6OmNsZWFyU3RvcmFnZUlEKCkKICAgICAKICAgICBS
ZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9yZXNvdXJjZXMuZW5kKCk7CiAgICAg
Zm9yIChSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPmNsZWFyU3RvcmFnZUlEKCk7
CisgICAgICAgIGl0LT52YWx1ZS0+Y2xlYXJTdG9yYWdlSUQoKTsKIH0KICAgICAKIHZvaWQgQXBw
bGljYXRpb25DYWNoZTo6ZGVsZXRlQ2FjaGVGb3JPcmlnaW4oU2VjdXJpdHlPcmlnaW4qIG9yaWdp
bikKQEAgLTIyNiw4ICsyMjYsOCBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGU6OmR1bXAoKQogICAg
IEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8QXBwbGljYXRpb25DYWNoZVJlc291cmNlPiA+Ojpjb25z
dF9pdGVyYXRvciBlbmQgPSBtX3Jlc291cmNlcy5lbmQoKTsKICAgICAKICAgICBmb3IgKEhhc2hN
YXA8U3RyaW5nLCBSZWZQdHI8QXBwbGljYXRpb25DYWNoZVJlc291cmNlPiA+Ojpjb25zdF9pdGVy
YXRvciBpdCA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAg
ICBwcmludGYoIiVzICIsIGl0LT5maXJzdC5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIEFwcGxp
Y2F0aW9uQ2FjaGVSZXNvdXJjZTo6ZHVtcFR5cGUoaXQtPnNlY29uZC0+dHlwZSgpKTsKKyAgICAg
ICAgcHJpbnRmKCIlcyAiLCBpdC0+a2V5LmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgQXBwbGlj
YXRpb25DYWNoZVJlc291cmNlOjpkdW1wVHlwZShpdC0+dmFsdWUtPnR5cGUoKSk7CiAgICAgfQog
fQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBw
bGljYXRpb25DYWNoZUdyb3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9B
cHBsaWNhdGlvbkNhY2hlR3JvdXAuY3BwCmluZGV4IDkyMDgyYzU2YmUxMWM5ZGMyNTg1MGY3YTk0
YmMyNzkzYjc3ZjVmNWYuLjI3M2E2MDEwZDgyNTVmYjk0YWE2MDUxYjkyZjY5MmI0ODgzN2M5OTYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNh
Y2hlR3JvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNh
dGlvbkNhY2hlR3JvdXAuY3BwCkBAIC03NzcsOSArNzc3LDkgQEAgdm9pZCBBcHBsaWNhdGlvbkNh
Y2hlR3JvdXA6OmRpZEZpbmlzaExvYWRpbmdNYW5pZmVzdCgpCiAgICAgaWYgKGlzVXBncmFkZUF0
dGVtcHQpIHsKICAgICAgICAgQXBwbGljYXRpb25DYWNoZTo6UmVzb3VyY2VNYXA6OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IG1fbmV3ZXN0Q2FjaGUtPmVuZCgpOwogICAgICAgICBmb3IgKEFwcGxpY2F0
aW9uQ2FjaGU6OlJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fbmV3ZXN0Q2FjaGUt
PmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgdW5zaWduZWQgdHlwZSA9
IGl0LT5zZWNvbmQtPnR5cGUoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIHR5cGUgPSBpdC0+dmFs
dWUtPnR5cGUoKTsKICAgICAgICAgICAgIGlmICh0eXBlICYgQXBwbGljYXRpb25DYWNoZVJlc291
cmNlOjpNYXN0ZXIpCi0gICAgICAgICAgICAgICAgYWRkRW50cnkoaXQtPmZpcnN0LCB0eXBlKTsK
KyAgICAgICAgICAgICAgICBhZGRFbnRyeShpdC0+a2V5LCB0eXBlKTsKICAgICAgICAgfQogICAg
IH0KICAgICAKQEAgLTEwMTgsNyArMTAxOCw3IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3Vw
OjpzdGFydExvYWRpbmdFbnRyeSgpCiAKICAgICBBU1NFUlQoIW1fY3VycmVudEhhbmRsZSk7CiAg
ICAgCi0gICAgbV9jdXJyZW50SGFuZGxlID0gY3JlYXRlUmVzb3VyY2VIYW5kbGUoS1VSTChQYXJz
ZWRVUkxTdHJpbmcsIGl0LT5maXJzdCksIG1fbmV3ZXN0Q2FjaGUgPyBtX25ld2VzdENhY2hlLT5y
ZXNvdXJjZUZvclVSTChpdC0+Zmlyc3QpIDogMCk7CisgICAgbV9jdXJyZW50SGFuZGxlID0gY3Jl
YXRlUmVzb3VyY2VIYW5kbGUoS1VSTChQYXJzZWRVUkxTdHJpbmcsIGl0LT5rZXkpLCBtX25ld2Vz
dENhY2hlID8gbV9uZXdlc3RDYWNoZS0+cmVzb3VyY2VGb3JVUkwoaXQtPmtleSkgOiAwKTsKIH0K
IAogdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmRlbGl2ZXJEZWxheWVkTWFpblJlc291cmNl
cygpCkBAIC0xMDY3LDcgKzEwNjcsNyBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6YWRk
RW50cnkoY29uc3QgU3RyaW5nJiB1cmwsIHVuc2lnbmVkIHR5cGUpCiAgICAgRW50cnlNYXA6OkFk
ZFJlc3VsdCByZXN1bHQgPSBtX3BlbmRpbmdFbnRyaWVzLmFkZCh1cmwsIHR5cGUpOwogICAgIAog
ICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vj
b25kIHw9IHR5cGU7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgfD0gdHlwZTsKIH0K
IAogdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmFzc29jaWF0ZURvY3VtZW50TG9hZGVyV2l0
aENhY2hlKERvY3VtZW50TG9hZGVyKiBsb2FkZXIsIEFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hlKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2Fj
aGVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNh
Y2hlSG9zdC5jcHAKaW5kZXggODAxYzFiMzY3MDMxYTMzOWRiNDQ3MDdhOTJkMWJjODBkNDFkOGM3
OS4uZmU5ZjAxMGEwZmU2NTAzZDBiYzVlNWI5Mjc3MGEzZjdiNjQzNDRmZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVIb3N0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUhvc3Qu
Y3BwCkBAIC0yODIsNyArMjgyLDcgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6ZmlsbFJl
c291cmNlTGlzdChSZXNvdXJjZUluZm9MaXN0KiByZXNvdXJjZXMpCiAgICAgIAogICAgIEFwcGxp
Y2F0aW9uQ2FjaGU6OlJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBjYWNoZS0+ZW5k
KCk7CiAgICAgZm9yIChBcHBsaWNhdGlvbkNhY2hlOjpSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBjYWNoZS0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFJlZlB0
cjxBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+IHJlc291cmNlID0gaXQtPnNlY29uZDsKKyAgICAg
ICAgUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4gcmVzb3VyY2UgPSBpdC0+dmFsdWU7
CiAgICAgICAgIHVuc2lnbmVkIHR5cGUgPSByZXNvdXJjZS0+dHlwZSgpOwogICAgICAgICBib29s
IGlzTWFzdGVyICAgPSB0eXBlICYgQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpNYXN0ZXI7CiAg
ICAgICAgIGJvb2wgaXNNYW5pZmVzdCA9IHR5cGUgJiBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6
Ok1hbmlmZXN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0Fw
cGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2Fj
aGUvQXBwbGljYXRpb25DYWNoZVJlc291cmNlLmNwcAppbmRleCBkODMxNzg0YjQxOTZhZGYzODJj
ZjM1NWUwZWVmMDJkNmE3YTgwNzkwLi45OTc2NmUzYTY2YmQzNmViNDJmZWQyYTkyNjlkMzRiMDY2
MTk0ZDdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGlj
YXRpb25DYWNoZVJlc291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2Fj
aGUvQXBwbGljYXRpb25DYWNoZVJlc291cmNlLmNwcApAQCAtNTQsNyArNTQsNyBAQCBpbnQ2NF90
IEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6ZXN0aW1hdGVkU2l6ZUluU3RvcmFnZSgpCiAKICAg
ICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSByZXNwb25zZSgpLmh0dHBIZWFk
ZXJGaWVsZHMoKS5lbmQoKTsKICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gcmVzcG9uc2UoKS5odHRwSGVhZGVyRmllbGRzKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KQotICAgICAgICBtX2VzdGltYXRlZFNpemVJblN0b3JhZ2UgKz0gKGl0LT5maXJzdC5sZW5n
dGgoKSArIGl0LT5zZWNvbmQubGVuZ3RoKCkgKyAyKSAqIHNpemVvZihVQ2hhcik7CisgICAgICAg
IG1fZXN0aW1hdGVkU2l6ZUluU3RvcmFnZSArPSAoaXQtPmtleS5sZW5ndGgoKSArIGl0LT52YWx1
ZS5sZW5ndGgoKSArIDIpICogc2l6ZW9mKFVDaGFyKTsKIAogICAgIG1fZXN0aW1hdGVkU2l6ZUlu
U3RvcmFnZSArPSB1cmwoKS5zdHJpbmcoKS5sZW5ndGgoKSAqIHNpemVvZihVQ2hhcik7CiAgICAg
bV9lc3RpbWF0ZWRTaXplSW5TdG9yYWdlICs9IHNpemVvZihpbnQpOyAvLyByZXNwb25zZSgpLm1f
aHR0cFN0YXR1c0NvZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNo
ZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBw
Y2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwCmluZGV4IDc0MDMyNzczNmMyZDQ4ZGI0
MTY0Yzc3YWQ4ZWE2MDQ3YjE4MWM5ZTkuLjRhNTE5MDcwZjFlZGNiMjNlODg5YzM2M2Q0OTI5ODEz
MzI4ZGI1YzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBs
aWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNh
Y2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcApAQCAtMTQyLDggKzE0Miw4IEBAIEFwcGxp
Y2F0aW9uQ2FjaGVHcm91cCogQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmZpbmRPckNyZWF0ZUNh
Y2hlR3JvdXAoY29uc3QgS1VSCiAgICAgQ2FjaGVHcm91cE1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9
IG1fY2FjaGVzSW5NZW1vcnkuYWRkKG1hbmlmZXN0VVJMLCAwKTsKICAgICAKICAgICBpZiAoIXJl
c3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIEFTU0VSVChyZXN1bHQuaXRlcmF0b3ItPnNlY29u
ZCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgQVNT
RVJUKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOworICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZTsKICAgICB9CiAKICAgICAvLyBMb29rIHVwIHRoZSBncm91cCBpbiB0aGUgZGF0
YWJhc2UKQEAgLTE1NSw3ICsxNTUsNyBAQCBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIEFwcGxpY2F0
aW9uQ2FjaGVTdG9yYWdlOjpmaW5kT3JDcmVhdGVDYWNoZUdyb3VwKGNvbnN0IEtVUgogICAgICAg
ICBtX2NhY2hlSG9zdFNldC5hZGQodXJsSG9zdEhhc2gobWFuaWZlc3RVUkwpKTsKICAgICB9CiAg
ICAgCi0gICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBncm91cDsKKyAgICByZXN1bHQuaXRl
cmF0b3ItPnZhbHVlID0gZ3JvdXA7CiAgICAgCiAgICAgcmV0dXJuIGdyb3VwOwogfQpAQCAtMjAy
LDcgKzIwMiw3IEBAIEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogQXBwbGljYXRpb25DYWNoZVN0b3Jh
Z2U6OmNhY2hlR3JvdXBGb3JVUkwoY29uc3QgS1VSTCYgdXJsCiAgICAgLy8gQ2hlY2sgaWYgYSBj
YWNoZSBhbHJlYWR5IGV4aXN0cyBpbiBtZW1vcnkuCiAgICAgQ2FjaGVHcm91cE1hcDo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gbV9jYWNoZXNJbk1lbW9yeS5lbmQoKTsKICAgICBmb3IgKENhY2hlR3Jv
dXBNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9jYWNoZXNJbk1lbW9yeS5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKLSAgICAgICAgQXBwbGljYXRpb25DYWNoZUdyb3VwKiBncm91cCA9IGl0
LT5zZWNvbmQ7CisgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogZ3JvdXAgPSBpdC0+dmFs
dWU7CiAKICAgICAgICAgQVNTRVJUKCFncm91cC0+aXNPYnNvbGV0ZSgpKTsKIApAQCAtMjczLDcg
KzI3Myw3IEBAIEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6
OmZhbGxiYWNrQ2FjaGVHcm91cEZvclVSTChjb25zdCBLCiAgICAgLy8gQ2hlY2sgaWYgYW4gYXBw
cm9wcmlhdGUgY2FjaGUgYWxyZWFkeSBleGlzdHMgaW4gbWVtb3J5LgogICAgIENhY2hlR3JvdXBN
YXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fY2FjaGVzSW5NZW1vcnkuZW5kKCk7CiAgICAgZm9y
IChDYWNoZUdyb3VwTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fY2FjaGVzSW5NZW1vcnkuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVHcm91cCog
Z3JvdXAgPSBpdC0+c2Vjb25kOworICAgICAgICBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIGdyb3Vw
ID0gaXQtPnZhbHVlOwogICAgICAgICAKICAgICAgICAgQVNTRVJUKCFncm91cC0+aXNPYnNvbGV0
ZSgpKTsKIApAQCAtNzE4LDEzICs3MTgsMTMgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFn
ZTo6c3RvcmUoQXBwbGljYXRpb25DYWNoZSogY2FjaGUsIFJlc291cmNlU3RvcmFnZUlESm8KICAg
ICB7CiAgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGU6OlJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRv
ciBlbmQgPSBjYWNoZS0+ZW5kKCk7CiAgICAgICAgIGZvciAoQXBwbGljYXRpb25DYWNoZTo6UmVz
b3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY2FjaGUtPmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgewotICAgICAgICAgICAgdW5zaWduZWQgb2xkU3RvcmFnZUlEID0gaXQtPnNlY29uZC0+
c3RvcmFnZUlEKCk7Ci0gICAgICAgICAgICBpZiAoIXN0b3JlKGl0LT5zZWNvbmQuZ2V0KCksIGNh
Y2hlU3RvcmFnZUlEKSkKKyAgICAgICAgICAgIHVuc2lnbmVkIG9sZFN0b3JhZ2VJRCA9IGl0LT52
YWx1ZS0+c3RvcmFnZUlEKCk7CisgICAgICAgICAgICBpZiAoIXN0b3JlKGl0LT52YWx1ZS5nZXQo
KSwgY2FjaGVTdG9yYWdlSUQpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
ICAgICAgICAgLy8gU3RvcmluZyB0aGUgcmVzb3VyY2Ugc3VjY2VlZGVkLiBMb2cgaXRzIG9sZCBz
dG9yYWdlSUQgaW4gY2FzZQogICAgICAgICAgICAgLy8gaXQgbmVlZHMgdG8gYmUgcmVzdG9yZWQg
bGF0ZXIuCi0gICAgICAgICAgICBzdG9yYWdlSURKb3VybmFsLT5hZGQoaXQtPnNlY29uZC5nZXQo
KSwgb2xkU3RvcmFnZUlEKTsKKyAgICAgICAgICAgIHN0b3JhZ2VJREpvdXJuYWwtPmFkZChpdC0+
dmFsdWUuZ2V0KCksIG9sZFN0b3JhZ2VJRCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC04
NDQsOSArODQ0LDkgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmUoQXBwbGlj
YXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJjZSwgdW5zaWduZWQKICAgICAKICAgICBIVFRQSGVh
ZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSByZXNvdXJjZS0+cmVzcG9uc2UoKS5odHRwSGVh
ZGVyRmllbGRzKCkuZW5kKCk7CiAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IHJlc291cmNlLT5yZXNwb25zZSgpLmh0dHBIZWFkZXJGaWVsZHMoKS5iZWdpbigpOyBp
dCE9IGVuZDsgKytpdCkgewotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+Zmlyc3Qp
OworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+a2V5KTsKICAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQoJzonKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPnNl
Y29uZCk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT52YWx1ZSk7CiAgICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwogICAgIH0KICAgICAKQEAgLTEyNTQsNyArMTI1
NCw3IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmVtcHR5KCkKICAgICAvLyB1bnRp
bCBhIGNhY2hlIHVwZGF0ZSBwcm9jZXNzIGhhcyBiZWVuIGluaXRpYXRlZC4KICAgICBDYWNoZUdy
b3VwTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2NhY2hlc0luTWVtb3J5LmVuZCgpOwogICAg
IGZvciAoQ2FjaGVHcm91cE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2NhY2hlc0luTWVtb3J5
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+Y2xlYXJTdG9y
YWdlSUQoKTsKKyAgICAgICAgaXQtPnZhbHVlLT5jbGVhclN0b3JhZ2VJRCgpOwogICAgIAogICAg
IGNoZWNrRm9yRGVsZXRlZFJlc291cmNlcygpOwogfQpAQCAtMTMxNiw3ICsxMzE2LDcgQEAgYm9v
bCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmVDb3B5T2ZDYWNoZShjb25zdCBTdHJpbmcm
IGNhY2hlRGlyZWN0b3J5LCBBcHAKICAgICAvLyBUcmF2ZXJzZSB0aGUgY2FjaGUgYW5kIGFkZCBj
b3BpZXMgb2YgYWxsIHJlc291cmNlcy4KICAgICBBcHBsaWNhdGlvbkNhY2hlOjpSZXNvdXJjZU1h
cDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY2FjaGUtPmVuZCgpOwogICAgIGZvciAoQXBwbGljYXRp
b25DYWNoZTo6UmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY2FjaGUtPmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqIHJl
c291cmNlID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgQXBwbGljYXRpb25DYWNoZVJlc291
cmNlKiByZXNvdXJjZSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgCiAgICAgICAgIFJlZlB0
cjxBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+IHJlc291cmNlQ29weSA9IEFwcGxpY2F0aW9uQ2Fj
aGVSZXNvdXJjZTo6Y3JlYXRlKHJlc291cmNlLT51cmwoKSwgcmVzb3VyY2UtPnJlc3BvbnNlKCks
IHJlc291cmNlLT50eXBlKCksIHJlc291cmNlLT5kYXRhKCksIHJlc291cmNlLT5wYXRoKCkpOwog
ICAgICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL0FyY2hp
dmVGYWN0b3J5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL0FyY2hpdmVGYWN0
b3J5LmNwcAppbmRleCBjMmI2ZGJjZGRlZjM2ZWQ4Yzc0Mjk1YzhiNWJjOGYxNjdlN2VjNWM5Li4w
NGZiNWVkYjU2NzRjNzI0OWVjZTBmYzAxOTAxNTFjOWMyYTk3OGJhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9BcmNoaXZlRmFjdG9yeS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvQXJjaGl2ZUZhY3RvcnkuY3BwCkBAIC05NSw3ICs5NSw3
IEBAIHZvaWQgQXJjaGl2ZUZhY3Rvcnk6OnJlZ2lzdGVyS25vd25BcmNoaXZlTUlNRVR5cGVzKCkK
ICAgICBBcmNoaXZlTUlNRVR5cGVzTWFwOjppdGVyYXRvciBlbmQgPSBhcmNoaXZlTUlNRVR5cGVz
KCkuZW5kKCk7CiAKICAgICBmb3IgKDsgaSAhPSBlbmQ7ICsraSkKLSAgICAgICAgbWltZVR5cGVz
LmFkZChpLT5maXJzdCk7CisgICAgICAgIG1pbWVUeXBlcy5hZGQoaS0+a2V5KTsKIH0KIAogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5jcHAK
aW5kZXggNzI5ODg5MzI0OTVjNDc3MTZjNmNlYzkwZGI0OGY4NjlmZWZjZjFmOS4uM2NhMjQ2MmI5
YWQ2NDE5YmEwZmZlZWFlMjE4N2I3MjA2NDA1MzUyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2UuY3BwCkBAIC0xNTMsOCArMTUzLDggQEAg
Ym9vbCBDYWNoZWRSYXdSZXNvdXJjZTo6Y2FuUmV1c2UoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBu
ZXdSZXF1ZXN0KSBjb25zdAogCiAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gbmV3SGVhZGVycy5lbmQoKTsKICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJh
dG9yIGkgPSBuZXdIZWFkZXJzLmJlZ2luKCk7IGkgIT0gZW5kOyArK2kpIHsKLSAgICAgICAgQXRv
bWljU3RyaW5nIGhlYWRlck5hbWUgPSBpLT5maXJzdDsKLSAgICAgICAgaWYgKGktPnNlY29uZCAh
PSBvbGRIZWFkZXJzLmdldChoZWFkZXJOYW1lKSkKKyAgICAgICAgQXRvbWljU3RyaW5nIGhlYWRl
ck5hbWUgPSBpLT5rZXk7CisgICAgICAgIGlmIChpLT52YWx1ZSAhPSBvbGRIZWFkZXJzLmdldCho
ZWFkZXJOYW1lKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgcmV0dXJu
IHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVz
b3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNw
cAppbmRleCBlZDdmOWIwNmI4YzFjMWYzNGVkZjMyNDFkYWIyMTkzY2M0ZDQ1MzZkLi5mNmFhOTZj
YmE3MmEyM2I1YmE5MTM5OThiY2Y0NDI3ZjUxYTNjMDVjIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5jcHAKQEAgLTYxMyw4ICs2MTMsOCBAQCB2b2lk
IENhY2hlZFJlc291cmNlOjpzd2l0Y2hDbGllbnRzVG9SZXZhbGlkYXRlZFJlc291cmNlKCkKICAg
ICBWZWN0b3I8Q2FjaGVkUmVzb3VyY2VDbGllbnQqPiBjbGllbnRzVG9Nb3ZlOwogICAgIEhhc2hD
b3VudGVkU2V0PENhY2hlZFJlc291cmNlQ2xpZW50Kj46Oml0ZXJhdG9yIGVuZDIgPSBtX2NsaWVu
dHMuZW5kKCk7CiAgICAgZm9yIChIYXNoQ291bnRlZFNldDxDYWNoZWRSZXNvdXJjZUNsaWVudCo+
OjppdGVyYXRvciBpdCA9IG1fY2xpZW50cy5iZWdpbigpOyBpdCAhPSBlbmQyOyArK2l0KSB7Ci0g
ICAgICAgIENhY2hlZFJlc291cmNlQ2xpZW50KiBjbGllbnQgPSBpdC0+Zmlyc3Q7Ci0gICAgICAg
IHVuc2lnbmVkIGNvdW50ID0gaXQtPnNlY29uZDsKKyAgICAgICAgQ2FjaGVkUmVzb3VyY2VDbGll
bnQqIGNsaWVudCA9IGl0LT5rZXk7CisgICAgICAgIHVuc2lnbmVkIGNvdW50ID0gaXQtPnZhbHVl
OwogICAgICAgICB3aGlsZSAoY291bnQpIHsKICAgICAgICAgICAgIGNsaWVudHNUb01vdmUuYXBw
ZW5kKGNsaWVudCk7CiAgICAgICAgICAgICAtLWNvdW50OwpAQCAtNjQ4LDkgKzY0OCw5IEBAIHZv
aWQgQ2FjaGVkUmVzb3VyY2U6OnVwZGF0ZVJlc3BvbnNlQWZ0ZXJSZXZhbGlkYXRpb24oY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYgdmFsCiAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gbmV3SGVhZGVycy5lbmQoKTsKICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbmV3SGVhZGVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAg
ICAgLy8gRG9uJ3QgYWxsb3cgMzA0IHJlc3BvbnNlIHRvIHVwZGF0ZSBjb250ZW50IGhlYWRlcnMs
IHRoZXNlIGNhbid0IGNoYW5nZSBidXQgc29tZSBzZXJ2ZXJzIHNlbmQgd3JvbmcgdmFsdWVzLgot
ICAgICAgICBpZiAoaXQtPmZpcnN0LnN0YXJ0c1dpdGgoY29udGVudEhlYWRlclByZWZpeCwgZmFs
c2UpKQorICAgICAgICBpZiAoaXQtPmtleS5zdGFydHNXaXRoKGNvbnRlbnRIZWFkZXJQcmVmaXgs
IGZhbHNlKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBtX3Jlc3BvbnNlLnNldEhU
VFBIZWFkZXJGaWVsZChpdC0+Zmlyc3QsIGl0LT5zZWNvbmQpOworICAgICAgICBtX3Jlc3BvbnNl
LnNldEhUVFBIZWFkZXJGaWVsZChpdC0+a2V5LCBpdC0+dmFsdWUpOwogICAgIH0KIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlQ2xpZW50
V2Fsa2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VDbGll
bnRXYWxrZXIuaAppbmRleCA4YjM3ODBiNWU2NGIyMTQzNDYyODk2YmRhMmE2YTI2NWE1YThhMDc0
Li43OTMzYjBiODE0YzUyMTI1NmUwNzYwZjg2MWI0MzEwOTdiODliNTljIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxr
ZXIuaApAQCAtNDIsNyArNDIsNyBAQCBwdWJsaWM6CiAgICAgICAgIEl0ZXJhdG9yIGVuZCA9IHNl
dC5lbmQoKTsKICAgICAgICAgc2l6ZV90IGNsaWVudEluZGV4ID0gMDsKICAgICAgICAgZm9yIChJ
dGVyYXRvciBjdXJyZW50ID0gc2V0LmJlZ2luKCk7IGN1cnJlbnQgIT0gZW5kOyArK2N1cnJlbnQp
Ci0gICAgICAgICAgICBtX2NsaWVudFZlY3RvcltjbGllbnRJbmRleCsrXSA9IGN1cnJlbnQtPmZp
cnN0OworICAgICAgICAgICAgbV9jbGllbnRWZWN0b3JbY2xpZW50SW5kZXgrK10gPSBjdXJyZW50
LT5rZXk7CiAgICAgfQogCiAgICAgVCogbmV4dCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
bG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcAppbmRleCBiZTBkOWQ3OGE3Zjgy
ZjZmMmRkM2Q5YjEyYjBjOWNkZGUwZWI1YjZlLi40MmRiMmJkNjMzZTZjZDM0Mzg2OTIyMmY0ZTVm
MTUyMTI1MzMxODRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2Fj
aGVkUmVzb3VyY2VMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9D
YWNoZWRSZXNvdXJjZUxvYWRlci5jcHAKQEAgLTEyOSw3ICsxMjksNyBAQCBDYWNoZWRSZXNvdXJj
ZUxvYWRlcjo6fkNhY2hlZFJlc291cmNlTG9hZGVyKCkKICAgICBjbGVhclByZWxvYWRzKCk7CiAg
ICAgRG9jdW1lbnRSZXNvdXJjZU1hcDo6aXRlcmF0b3IgZW5kID0gbV9kb2N1bWVudFJlc291cmNl
cy5lbmQoKTsKICAgICBmb3IgKERvY3VtZW50UmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9k
b2N1bWVudFJlc291cmNlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5z
ZWNvbmQtPnNldE93bmluZ0NhY2hlZFJlc291cmNlTG9hZGVyKDApOworICAgICAgICBpdC0+dmFs
dWUtPnNldE93bmluZ0NhY2hlZFJlc291cmNlTG9hZGVyKDApOwogCiAgICAgLy8gTWFrZSBzdXJl
IG5vIHJlcXVlc3RzIHN0aWxsIHBvaW50IHRvIHRoaXMgQ2FjaGVkUmVzb3VyY2VMb2FkZXIKICAg
ICBBU1NFUlQobV9yZXF1ZXN0Q291bnQgPT0gMCk7CkBAIC00MTMsNyArNDEzLDcgQEAgQ2FjaGVk
UmVzb3VyY2VIYW5kbGU8Q2FjaGVkUmVzb3VyY2U+IENhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1
ZXN0UmVzb3VyY2UoQ2FjaGUKICAgICBpZiAobWVtb3J5Q2FjaGUoKS0+ZGlzYWJsZWQoKSkgewog
ICAgICAgICBEb2N1bWVudFJlc291cmNlTWFwOjppdGVyYXRvciBpdCA9IG1fZG9jdW1lbnRSZXNv
dXJjZXMuZmluZCh1cmwuc3RyaW5nKCkpOwogICAgICAgICBpZiAoaXQgIT0gbV9kb2N1bWVudFJl
c291cmNlcy5lbmQoKSkgewotICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0T3duaW5nQ2FjaGVk
UmVzb3VyY2VMb2FkZXIoMCk7CisgICAgICAgICAgICBpdC0+dmFsdWUtPnNldE93bmluZ0NhY2hl
ZFJlc291cmNlTG9hZGVyKDApOwogICAgICAgICAgICAgbV9kb2N1bWVudFJlc291cmNlcy5yZW1v
dmUoaXQpOwogICAgICAgICB9CiAgICAgfQpAQCAtNjUxLDcgKzY1MSw3IEBAIHZvaWQgQ2FjaGVk
UmVzb3VyY2VMb2FkZXI6OnJlbG9hZEltYWdlc0lmTm90RGVmZXJyZWQoKQogewogICAgIERvY3Vt
ZW50UmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fZG9jdW1lbnRSZXNvdXJjZXMuZW5kKCk7
CiAgICAgZm9yIChEb2N1bWVudFJlc291cmNlTWFwOjppdGVyYXRvciBpdCA9IG1fZG9jdW1lbnRS
ZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIENhY2hlZFJlc291
cmNlKiByZXNvdXJjZSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIENhY2hlZFJlc291cmNl
KiByZXNvdXJjZSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgaWYgKHJlc291cmNlLT50eXBl
KCkgPT0gQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3VyY2UgJiYgcmVzb3VyY2UtPnN0aWxsTmVl
ZHNMb2FkKCkgJiYgIWNsaWVudERlZmVyc0ltYWdlKHJlc291cmNlLT51cmwoKSkpCiAgICAgICAg
ICAgICBjb25zdF9jYXN0PENhY2hlZFJlc291cmNlKj4ocmVzb3VyY2UpLT5sb2FkKHRoaXMsIGRl
ZmF1bHRDYWNoZWRSZXNvdXJjZU9wdGlvbnMoKSk7CiAgICAgfQpAQCAtNjY3LDcgKzY2Nyw3IEBA
IHZvaWQgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlbW92ZUNhY2hlZFJlc291cmNlKENhY2hlZFJl
c291cmNlKiByZXNvdXJjZSkgY29uc3QKICNpZm5kZWYgTkRFQlVHCiAgICAgRG9jdW1lbnRSZXNv
dXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX2RvY3VtZW50UmVzb3VyY2VzLmZpbmQocmVzb3VyY2Ut
PnVybCgpKTsKICAgICBpZiAoaXQgIT0gbV9kb2N1bWVudFJlc291cmNlcy5lbmQoKSkKLSAgICAg
ICAgQVNTRVJUKGl0LT5zZWNvbmQuZ2V0KCkgPT0gcmVzb3VyY2UpOworICAgICAgICBBU1NFUlQo
aXQtPnZhbHVlLmdldCgpID09IHJlc291cmNlKTsKICNlbmRpZgogICAgIG1fZG9jdW1lbnRSZXNv
dXJjZXMucmVtb3ZlKHJlc291cmNlLT51cmwoKSk7CiB9CkBAIC03MDEsOSArNzAxLDkgQEAgdm9p
ZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6Z2FyYmFnZUNvbGxlY3REb2N1bWVudFJlc291cmNlcygp
CiAgICAgU3RyaW5nVmVjdG9yIHJlc291cmNlc1RvRGVsZXRlOwogCiAgICAgZm9yIChEb2N1bWVu
dFJlc291cmNlTWFwOjppdGVyYXRvciBpdCA9IG1fZG9jdW1lbnRSZXNvdXJjZXMuYmVnaW4oKTsg
aXQgIT0gbV9kb2N1bWVudFJlc291cmNlcy5lbmQoKTsgKytpdCkgewotICAgICAgICBpZiAoaXQt
PnNlY29uZC0+aGFzT25lSGFuZGxlKCkpIHsKLSAgICAgICAgICAgIHJlc291cmNlc1RvRGVsZXRl
LmFwcGVuZChpdC0+Zmlyc3QpOwotICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0T3duaW5nQ2Fj
aGVkUmVzb3VyY2VMb2FkZXIoMCk7CisgICAgICAgIGlmIChpdC0+dmFsdWUtPmhhc09uZUhhbmRs
ZSgpKSB7CisgICAgICAgICAgICByZXNvdXJjZXNUb0RlbGV0ZS5hcHBlbmQoaXQtPmtleSk7Cisg
ICAgICAgICAgICBpdC0+dmFsdWUtPnNldE93bmluZ0NhY2hlZFJlc291cmNlTG9hZGVyKDApOwog
ICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2Fj
aGUvTWVtb3J5Q2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL01lbW9yeUNh
Y2hlLmNwcAppbmRleCAyYmQ4ZGY5NzhhMGFkY2IxZmI5MWY0ZGNjMDY1NDc1ZGE5Yjc4MGRiLi4x
Y2YyOTVjZTQ1OWEzZDkzZTA2MjM5ODc3OTIzODFlNmI1OWY1MjIzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5jcHAKQEAgLTUzNiw3ICs1MzYsNyBAQCB2b2lk
IE1lbW9yeUNhY2hlOjpyZW1vdmVSZXNvdXJjZXNXaXRoT3JpZ2luKFNlY3VyaXR5T3JpZ2luKiBv
cmlnaW4pCiAKICAgICBDYWNoZWRSZXNvdXJjZU1hcDo6aXRlcmF0b3IgZSA9IG1fcmVzb3VyY2Vz
LmVuZCgpOwogICAgIGZvciAoQ2FjaGVkUmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNv
dXJjZXMuYmVnaW4oKTsgaXQgIT0gZTsgKytpdCkgewotICAgICAgICBDYWNoZWRSZXNvdXJjZSog
cmVzb3VyY2UgPSBpdC0+c2Vjb25kOworICAgICAgICBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2Ug
PSBpdC0+dmFsdWU7CiAgICAgICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gcmVzb3VyY2VPcmln
aW4gPSBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlRnJvbVN0cmluZyhyZXNvdXJjZS0+dXJsKCkpOwog
ICAgICAgICBpZiAoIXJlc291cmNlT3JpZ2luKQogICAgICAgICAgICAgY29udGludWU7CkBAIC01
NTIsNyArNTUyLDcgQEAgdm9pZCBNZW1vcnlDYWNoZTo6Z2V0T3JpZ2luc1dpdGhDYWNoZShTZWN1
cml0eU9yaWdpblNldCYgb3JpZ2lucykKIHsKICAgICBDYWNoZWRSZXNvdXJjZU1hcDo6aXRlcmF0
b3IgZSA9IG1fcmVzb3VyY2VzLmVuZCgpOwogICAgIGZvciAoQ2FjaGVkUmVzb3VyY2VNYXA6Oml0
ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZTsgKytpdCkKLSAgICAgICAg
b3JpZ2lucy5hZGQoU2VjdXJpdHlPcmlnaW46OmNyZWF0ZUZyb21TdHJpbmcoaXQtPnNlY29uZC0+
dXJsKCkpKTsKKyAgICAgICAgb3JpZ2lucy5hZGQoU2VjdXJpdHlPcmlnaW46OmNyZWF0ZUZyb21T
dHJpbmcoaXQtPnZhbHVlLT51cmwoKSkpOwogfQogCiB2b2lkIE1lbW9yeUNhY2hlOjpyZW1vdmVG
cm9tTGl2ZURlY29kZWRSZXNvdXJjZXNMaXN0KENhY2hlZFJlc291cmNlKiByZXNvdXJjZSkKQEAg
LTY4NSw3ICs2ODUsNyBAQCBNZW1vcnlDYWNoZTo6U3RhdGlzdGljcyBNZW1vcnlDYWNoZTo6Z2V0
U3RhdGlzdGljcygpCiAgICAgU3RhdGlzdGljcyBzdGF0czsKICAgICBDYWNoZWRSZXNvdXJjZU1h
cDo6aXRlcmF0b3IgZSA9IG1fcmVzb3VyY2VzLmVuZCgpOwogICAgIGZvciAoQ2FjaGVkUmVzb3Vy
Y2VNYXA6Oml0ZXJhdG9yIGkgPSBtX3Jlc291cmNlcy5iZWdpbigpOyBpICE9IGU7ICsraSkgewot
ICAgICAgICBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UgPSBpLT5zZWNvbmQ7CisgICAgICAgIENh
Y2hlZFJlc291cmNlKiByZXNvdXJjZSA9IGktPnZhbHVlOwogICAgICAgICBzd2l0Y2ggKHJlc291
cmNlLT50eXBlKCkpIHsKICAgICAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJj
ZToKICAgICAgICAgICAgIHN0YXRzLmltYWdlcy5hZGRSZXNvdXJjZShyZXNvdXJjZSk7CkBAIC03
MjksNyArNzI5LDcgQEAgdm9pZCBNZW1vcnlDYWNoZTo6c2V0RGlzYWJsZWQoYm9vbCBkaXNhYmxl
ZCkKICAgICAgICAgQ2FjaGVkUmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGkgPSBtX3Jlc291cmNlcy5i
ZWdpbigpOwogICAgICAgICBpZiAoaSA9PSBtX3Jlc291cmNlcy5lbmQoKSkKICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBldmljdChpLT5zZWNvbmQpOworICAgICAgICBldmljdChpLT52YWx1
ZSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9J
Y29uRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNl
LmNwcAppbmRleCA5NGE0YjkwMjQyNTcxYTdjNzg3MzQ5NjU3ZmFhNjIzZjFlNmUxYzNmLi4xNjNm
NmJkNTM1ZWFiZDVhZDU2NGM4OGYwNTkwOTI3YmM4ZTEzMDM2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9pY29uL0ljb25EYXRhYmFzZS5jcHAKQEAgLTE5Miw3ICsxOTIsNyBAQCB2b2lkIElj
b25EYXRhYmFzZTo6cmVtb3ZlQWxsSWNvbnMoKQogICAgICAgICBIYXNoTWFwPFN0cmluZywgUGFn
ZVVSTFJlY29yZCo+OjppdGVyYXRvciBpdGVyID0gbV9wYWdlVVJMVG9SZWNvcmRNYXAuYmVnaW4o
KTsKICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFBhZ2VVUkxSZWNvcmQqPjo6aXRlcmF0b3IgZW5k
ID0gbV9wYWdlVVJMVG9SZWNvcmRNYXAuZW5kKCk7CiAgICAgICAgIGZvciAoOyBpdGVyICE9IGVu
ZDsgKytpdGVyKQotICAgICAgICAgICAgKCppdGVyKS5zZWNvbmQtPnNldEljb25SZWNvcmQoMCk7
CisgICAgICAgICAgICAoKml0ZXIpLnZhbHVlLT5zZXRJY29uUmVjb3JkKDApOwogICAgICAgICAg
ICAgCiAgICAgICAgIC8vIENsZWFyIHRoZSBpY29uVVJMIC0+IEljb25SZWNvcmQgbWFwCiAgICAg
ICAgIG1faWNvblVSTFRvUmVjb3JkTWFwLmNsZWFyKCk7CkBAIC03ODUsNyArNzg1LDcgQEAgc2l6
ZV90IEljb25EYXRhYmFzZTo6aWNvblJlY29yZENvdW50V2l0aERhdGEoKQogICAgIEhhc2hNYXA8
U3RyaW5nLCBJY29uUmVjb3JkKj46Oml0ZXJhdG9yIGVuZCA9IG1faWNvblVSTFRvUmVjb3JkTWFw
LmVuZCgpOwogICAgIAogICAgIGZvciAoOyBpICE9IGVuZDsgKytpKQotICAgICAgICByZXN1bHQg
Kz0gKCgqaSkuc2Vjb25kLT5pbWFnZURhdGFTdGF0dXMoKSA9PSBJbWFnZURhdGFTdGF0dXNQcmVz
ZW50KTsKKyAgICAgICAgcmVzdWx0ICs9ICgoKmkpLnZhbHVlLT5pbWFnZURhdGFTdGF0dXMoKSA9
PSBJbWFnZURhdGFTdGF0dXNQcmVzZW50KTsKICAgICAgICAgICAgIAogICAgIHJldHVybiByZXN1
bHQ7CiB9CkBAIC0xNTA3LDEzICsxNTA3LDEzIEBAIHZvaWQgSWNvbkRhdGFiYXNlOjpwZXJmb3Jt
UGVuZGluZ1JldGFpbkFuZFJlbGVhc2VPcGVyYXRpb25zKCkKICAgICB9CiAKICAgICBmb3IgKEhh
c2hDb3VudGVkU2V0PFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdG9SZXRhaW4uYmVnaW4o
KSwgZW5kID0gdG9SZXRhaW4uZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBBU1NF
UlQoIWl0LT5maXJzdC5pbXBsKCkgfHwgaXQtPmZpcnN0LmltcGwoKS0+aGFzT25lUmVmKCkpOwot
ICAgICAgICBwZXJmb3JtUmV0YWluSWNvbkZvclBhZ2VVUkwoaXQtPmZpcnN0LCBpdC0+c2Vjb25k
KTsKKyAgICAgICAgQVNTRVJUKCFpdC0+a2V5LmltcGwoKSB8fCBpdC0+a2V5LmltcGwoKS0+aGFz
T25lUmVmKCkpOworICAgICAgICBwZXJmb3JtUmV0YWluSWNvbkZvclBhZ2VVUkwoaXQtPmtleSwg
aXQtPnZhbHVlKTsKICAgICB9CiAKICAgICBmb3IgKEhhc2hDb3VudGVkU2V0PFN0cmluZz46OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gdG9SZWxlYXNlLmJlZ2luKCksIGVuZCA9IHRvUmVsZWFzZS5lbmQo
KTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIEFTU0VSVCghaXQtPmZpcnN0LmltcGwoKSB8
fCBpdC0+Zmlyc3QuaW1wbCgpLT5oYXNPbmVSZWYoKSk7Ci0gICAgICAgIHBlcmZvcm1SZWxlYXNl
SWNvbkZvclBhZ2VVUkwoaXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsKKyAgICAgICAgQVNTRVJUKCFp
dC0+a2V5LmltcGwoKSB8fCBpdC0+a2V5LmltcGwoKS0+aGFzT25lUmVmKCkpOworICAgICAgICBw
ZXJmb3JtUmVsZWFzZUljb25Gb3JQYWdlVVJMKGl0LT5rZXksIGl0LT52YWx1ZSk7CiAgICAgfQog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKaW5kZXggNmU5NmU5N2I5NjRiNTFiMzg4M2Ix
NmQyZTUzMjI2ZWM5OGQzNDVmZC4uNzFhZGU0MTFjMWViNDcxNDZmODdkNWI2ZjA5NTM3ZmY0ZGY1
ZTUxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcApAQCAtMjQ4LDcgKzI0OCw3IEBAIGJv
b2wgRE9NV2luZG93OjpkaXNwYXRjaEFsbFBlbmRpbmdCZWZvcmVVbmxvYWRFdmVudHMoKQogICAg
IFZlY3RvcjxSZWZQdHI8RE9NV2luZG93PiA+IHdpbmRvd3M7CiAgICAgRE9NV2luZG93U2V0Ojpp
dGVyYXRvciBlbmQgPSBzZXQuZW5kKCk7CiAgICAgZm9yIChET01XaW5kb3dTZXQ6Oml0ZXJhdG9y
IGl0ID0gc2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgd2luZG93cy5hcHBl
bmQoaXQtPmZpcnN0KTsKKyAgICAgICAgd2luZG93cy5hcHBlbmQoaXQtPmtleSk7CiAKICAgICBz
aXplX3Qgc2l6ZSA9IHdpbmRvd3Muc2l6ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
c2l6ZTsgKytpKSB7CkBAIC0yOTAsNyArMjkwLDcgQEAgdm9pZCBET01XaW5kb3c6OmRpc3BhdGNo
QWxsUGVuZGluZ1VubG9hZEV2ZW50cygpCiAgICAgVmVjdG9yPFJlZlB0cjxET01XaW5kb3c+ID4g
d2luZG93czsKICAgICBET01XaW5kb3dTZXQ6Oml0ZXJhdG9yIGVuZCA9IHNldC5lbmQoKTsKICAg
ICBmb3IgKERPTVdpbmRvd1NldDo6aXRlcmF0b3IgaXQgPSBzZXQuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KQotICAgICAgICB3aW5kb3dzLmFwcGVuZChpdC0+Zmlyc3QpOworICAgICAgICB3aW5k
b3dzLmFwcGVuZChpdC0+a2V5KTsKIAogICAgIHNpemVfdCBzaXplID0gd2luZG93cy5zaXplKCk7
CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RXZlbnRIYW5kbGVyLmNwcAppbmRleCAyZTYzMDA0Mjk3Y2QzN2E1MmJmOTJlM2E4MDk0MGM0ZWJl
NjFhYzhjLi4yZGNkNDJjMWQ1N2MxYTU1NTEzZWYyN2RlMWE3OTFjMTQ0M2E0NTgzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC0zNzQ4LDcgKzM3NDgsNyBAQCBib29sIEV2
ZW50SGFuZGxlcjo6aGFuZGxlVG91Y2hFdmVudChjb25zdCBQbGF0Zm9ybVRvdWNoRXZlbnQmIGV2
ZW50KQogICAgICAgICAvLyByZWxlYXNlZCBvciBjYW5jZWxsZWQgaXQgd2lsbCBvbmx5IGFwcGVh
ciBpbiB0aGUgY2hhbmdlZFRvdWNoZXMgbGlzdC4KICAgICAgICAgaWYgKHBvaW50U3RhdGUgIT0g
UGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFJlbGVhc2VkICYmIHBvaW50U3RhdGUgIT0gUGxhdGZv
cm1Ub3VjaFBvaW50OjpUb3VjaENhbmNlbGxlZCkgewogICAgICAgICAgICAgdG91Y2hlcy0+YXBw
ZW5kKHRvdWNoKTsKLSAgICAgICAgICAgIHRhcmdldFRvdWNoZXNJdGVyYXRvci0+c2Vjb25kLT5h
cHBlbmQodG91Y2gpOworICAgICAgICAgICAgdGFyZ2V0VG91Y2hlc0l0ZXJhdG9yLT52YWx1ZS0+
YXBwZW5kKHRvdWNoKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIE5vdyBidWlsZCB1cCB0aGUg
Y29ycmVjdCBsaXN0IGZvciBjaGFuZ2VkVG91Y2hlcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRnJhbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKaW5kZXgg
YTIyOTIyNjU5NjZiODhlZjZlOWVhYmIwZmZhNTkwZGU2ZDI5NWVhMi4uN2ZhYzkxMmRkMTc2ZWRm
YTlmNGRkYzJlZjU1YWNkYjQ2OGJiODdlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9GcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKQEAgLTU3OSw3
ICs1NzksNyBAQCB2b2lkIEZyYW1lOjppbmplY3RVc2VyU2NyaXB0cyhVc2VyU2NyaXB0SW5qZWN0
aW9uVGltZSBpbmplY3Rpb25UaW1lKQogICAgICAgICByZXR1cm47CiAgICAgVXNlclNjcmlwdE1h
cDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gdXNlclNjcmlwdHMtPmVuZCgpOwogICAgIGZvciAoVXNl
clNjcmlwdE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSB1c2VyU2NyaXB0cy0+YmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KQotICAgICAgICBpbmplY3RVc2VyU2NyaXB0c0ZvcldvcmxkKGl0LT5maXJz
dC5nZXQoKSwgKml0LT5zZWNvbmQsIGluamVjdGlvblRpbWUpOworICAgICAgICBpbmplY3RVc2Vy
U2NyaXB0c0ZvcldvcmxkKGl0LT5rZXkuZ2V0KCksICppdC0+dmFsdWUsIGluamVjdGlvblRpbWUp
OwogfQogCiB2b2lkIEZyYW1lOjppbmplY3RVc2VyU2NyaXB0c0ZvcldvcmxkKERPTVdyYXBwZXJX
b3JsZCogd29ybGQsIGNvbnN0IFVzZXJTY3JpcHRWZWN0b3ImIHVzZXJTY3JpcHRzLCBVc2VyU2Ny
aXB0SW5qZWN0aW9uVGltZSBpbmplY3Rpb25UaW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9QYWdlR3JvdXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlR3JvdXAuY3Bw
CmluZGV4IDBmZWQ0OTEzODY0N2Q3MWFhMjQyNTgwZDMzN2YwMGI1Zjc5YjA1YzEuLjcyMGRlZmY2
NmQwODVhOWVmYmEwZjRhNzI0Y2VlNTQ4NGYxYmNiNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvUGFnZUdyb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VHcm91
cC5jcHAKQEAgLTk0LDEyICs5NCwxMiBAQCBQYWdlR3JvdXAqIFBhZ2VHcm91cDo6cGFnZUdyb3Vw
KGNvbnN0IFN0cmluZyYgZ3JvdXBOYW1lKQogICAgIFBhZ2VHcm91cE1hcDo6QWRkUmVzdWx0IHJl
c3VsdCA9IHBhZ2VHcm91cHMtPmFkZChncm91cE5hbWUsIDApOwogCiAgICAgaWYgKHJlc3VsdC5p
c05ld0VudHJ5KSB7Ci0gICAgICAgIEFTU0VSVCghcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOwot
ICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IG5ldyBQYWdlR3JvdXAoZ3JvdXBOYW1l
KTsKKyAgICAgICAgQVNTRVJUKCFyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKKyAgICAgICAgcmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZSA9IG5ldyBQYWdlR3JvdXAoZ3JvdXBOYW1lKTsKICAgICB9CiAK
LSAgICBBU1NFUlQocmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOwotICAgIHJldHVybiByZXN1bHQu
aXRlcmF0b3ItPnNlY29uZDsKKyAgICBBU1NFUlQocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7Cisg
ICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiB9CiAKIHZvaWQgUGFnZUdyb3VwOjpj
bG9zZUxvY2FsU3RvcmFnZSgpCkBAIC0xMTAsOCArMTEwLDggQEAgdm9pZCBQYWdlR3JvdXA6OmNs
b3NlTG9jYWxTdG9yYWdlKCkKICAgICBQYWdlR3JvdXBNYXA6Oml0ZXJhdG9yIGVuZCA9IHBhZ2VH
cm91cHMtPmVuZCgpOwogCiAgICAgZm9yIChQYWdlR3JvdXBNYXA6Oml0ZXJhdG9yIGl0ID0gcGFn
ZUdyb3Vwcy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vj
b25kLT5oYXNMb2NhbFN0b3JhZ2UoKSkKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPmxvY2FsU3Rv
cmFnZSgpLT5jbG9zZSgpOworICAgICAgICBpZiAoaXQtPnZhbHVlLT5oYXNMb2NhbFN0b3JhZ2Uo
KSkKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+bG9jYWxTdG9yYWdlKCktPmNsb3NlKCk7CiAgICAg
fQogfQogCkBAIC0xMjIsOCArMTIyLDggQEAgdm9pZCBQYWdlR3JvdXA6OmNsZWFyTG9jYWxTdG9y
YWdlRm9yQWxsT3JpZ2lucygpCiAKICAgICBQYWdlR3JvdXBNYXA6Oml0ZXJhdG9yIGVuZCA9IHBh
Z2VHcm91cHMtPmVuZCgpOwogICAgIGZvciAoUGFnZUdyb3VwTWFwOjppdGVyYXRvciBpdCA9IHBh
Z2VHcm91cHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnNl
Y29uZC0+aGFzTG9jYWxTdG9yYWdlKCkpCi0gICAgICAgICAgICBpdC0+c2Vjb25kLT5sb2NhbFN0
b3JhZ2UoKS0+Y2xlYXJBbGxPcmlnaW5zRm9yRGVsZXRpb24oKTsKKyAgICAgICAgaWYgKGl0LT52
YWx1ZS0+aGFzTG9jYWxTdG9yYWdlKCkpCisgICAgICAgICAgICBpdC0+dmFsdWUtPmxvY2FsU3Rv
cmFnZSgpLT5jbGVhckFsbE9yaWdpbnNGb3JEZWxldGlvbigpOwogICAgIH0KIH0KIApAQCAtMTM0
LDggKzEzNCw4IEBAIHZvaWQgUGFnZUdyb3VwOjpjbGVhckxvY2FsU3RvcmFnZUZvck9yaWdpbihT
ZWN1cml0eU9yaWdpbiogb3JpZ2luKQogCiAgICAgUGFnZUdyb3VwTWFwOjppdGVyYXRvciBlbmQg
PSBwYWdlR3JvdXBzLT5lbmQoKTsKICAgICBmb3IgKFBhZ2VHcm91cE1hcDo6aXRlcmF0b3IgaXQg
PSBwYWdlR3JvdXBzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0
LT5zZWNvbmQtPmhhc0xvY2FsU3RvcmFnZSgpKQotICAgICAgICAgICAgaXQtPnNlY29uZC0+bG9j
YWxTdG9yYWdlKCktPmNsZWFyT3JpZ2luRm9yRGVsZXRpb24ob3JpZ2luKTsKKyAgICAgICAgaWYg
KGl0LT52YWx1ZS0+aGFzTG9jYWxTdG9yYWdlKCkpCisgICAgICAgICAgICBpdC0+dmFsdWUtPmxv
Y2FsU3RvcmFnZSgpLT5jbGVhck9yaWdpbkZvckRlbGV0aW9uKG9yaWdpbik7CiAgICAgfSAgICAK
IH0KICAgICAKQEAgLTE0Niw4ICsxNDYsOCBAQCB2b2lkIFBhZ2VHcm91cDo6c3luY0xvY2FsU3Rv
cmFnZSgpCiAKICAgICBQYWdlR3JvdXBNYXA6Oml0ZXJhdG9yIGVuZCA9IHBhZ2VHcm91cHMtPmVu
ZCgpOwogICAgIGZvciAoUGFnZUdyb3VwTWFwOjppdGVyYXRvciBpdCA9IHBhZ2VHcm91cHMtPmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnNlY29uZC0+aGFzTG9j
YWxTdG9yYWdlKCkpCi0gICAgICAgICAgICBpdC0+c2Vjb25kLT5sb2NhbFN0b3JhZ2UoKS0+c3lu
YygpOworICAgICAgICBpZiAoaXQtPnZhbHVlLT5oYXNMb2NhbFN0b3JhZ2UoKSkKKyAgICAgICAg
ICAgIGl0LT52YWx1ZS0+bG9jYWxTdG9yYWdlKCktPnN5bmMoKTsKICAgICB9CiB9CiAKQEAgLTI3
MCw3ICsyNzAsNyBAQCB2b2lkIFBhZ2VHcm91cDo6YWRkVXNlclNjcmlwdFRvV29ybGQoRE9NV3Jh
cHBlcldvcmxkKiB3b3JsZCwgY29uc3QgU3RyaW5nJiBzb3VyYwogICAgIE93blB0cjxVc2VyU2Ny
aXB0PiB1c2VyU2NyaXB0ID0gYWRvcHRQdHIobmV3IFVzZXJTY3JpcHQoc291cmNlLCB1cmwsIHdo
aXRlbGlzdCwgYmxhY2tsaXN0LCBpbmplY3Rpb25UaW1lLCBpbmplY3RlZEZyYW1lcykpOwogICAg
IGlmICghbV91c2VyU2NyaXB0cykKICAgICAgICAgbV91c2VyU2NyaXB0cyA9IGFkb3B0UHRyKG5l
dyBVc2VyU2NyaXB0TWFwKTsKLSAgICBPd25QdHI8VXNlclNjcmlwdFZlY3Rvcj4mIHNjcmlwdHNJ
bldvcmxkID0gbV91c2VyU2NyaXB0cy0+YWRkKHdvcmxkLCBudWxscHRyKS5pdGVyYXRvci0+c2Vj
b25kOworICAgIE93blB0cjxVc2VyU2NyaXB0VmVjdG9yPiYgc2NyaXB0c0luV29ybGQgPSBtX3Vz
ZXJTY3JpcHRzLT5hZGQod29ybGQsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAo
IXNjcmlwdHNJbldvcmxkKQogICAgICAgICBzY3JpcHRzSW5Xb3JsZCA9IGFkb3B0UHRyKG5ldyBV
c2VyU2NyaXB0VmVjdG9yKTsKICAgICBzY3JpcHRzSW5Xb3JsZC0+YXBwZW5kKHVzZXJTY3JpcHQu
cmVsZWFzZSgpKTsKQEAgLTI4Nyw3ICsyODcsNyBAQCB2b2lkIFBhZ2VHcm91cDo6YWRkVXNlclN0
eWxlU2hlZXRUb1dvcmxkKERPTVdyYXBwZXJXb3JsZCogd29ybGQsIGNvbnN0IFN0cmluZyYgcwog
ICAgIE93blB0cjxVc2VyU3R5bGVTaGVldD4gdXNlclN0eWxlU2hlZXQgPSBhZG9wdFB0cihuZXcg
VXNlclN0eWxlU2hlZXQoc291cmNlLCB1cmwsIHdoaXRlbGlzdCwgYmxhY2tsaXN0LCBpbmplY3Rl
ZEZyYW1lcywgbGV2ZWwpKTsKICAgICBpZiAoIW1fdXNlclN0eWxlU2hlZXRzKQogICAgICAgICBt
X3VzZXJTdHlsZVNoZWV0cyA9IGFkb3B0UHRyKG5ldyBVc2VyU3R5bGVTaGVldE1hcCk7Ci0gICAg
T3duUHRyPFVzZXJTdHlsZVNoZWV0VmVjdG9yPiYgc3R5bGVTaGVldHNJbldvcmxkID0gbV91c2Vy
U3R5bGVTaGVldHMtPmFkZCh3b3JsZCwgbnVsbHB0cikuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBP
d25QdHI8VXNlclN0eWxlU2hlZXRWZWN0b3I+JiBzdHlsZVNoZWV0c0luV29ybGQgPSBtX3VzZXJT
dHlsZVNoZWV0cy0+YWRkKHdvcmxkLCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYg
KCFzdHlsZVNoZWV0c0luV29ybGQpCiAgICAgICAgIHN0eWxlU2hlZXRzSW5Xb3JsZCA9IGFkb3B0
UHRyKG5ldyBVc2VyU3R5bGVTaGVldFZlY3Rvcik7CiAgICAgc3R5bGVTaGVldHNJbldvcmxkLT5h
cHBlbmQodXNlclN0eWxlU2hlZXQucmVsZWFzZSgpKTsKQEAgLTMwNyw3ICszMDcsNyBAQCB2b2lk
IFBhZ2VHcm91cDo6cmVtb3ZlVXNlclNjcmlwdEZyb21Xb3JsZChET01XcmFwcGVyV29ybGQqIHdv
cmxkLCBjb25zdCBLVVJMJiB1cgogICAgIGlmIChpdCA9PSBtX3VzZXJTY3JpcHRzLT5lbmQoKSkK
ICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIFVzZXJTY3JpcHRWZWN0b3IqIHNjcmlwdHMgPSBp
dC0+c2Vjb25kLmdldCgpOworICAgIFVzZXJTY3JpcHRWZWN0b3IqIHNjcmlwdHMgPSBpdC0+dmFs
dWUuZ2V0KCk7CiAgICAgZm9yIChpbnQgaSA9IHNjcmlwdHMtPnNpemUoKSAtIDE7IGkgPj0gMDsg
LS1pKSB7CiAgICAgICAgIGlmIChzY3JpcHRzLT5hdChpKS0+dXJsKCkgPT0gdXJsKQogICAgICAg
ICAgICAgc2NyaXB0cy0+cmVtb3ZlKGkpOwpAQCAtMzI5LDcgKzMyOSw3IEBAIHZvaWQgUGFnZUdy
b3VwOjpyZW1vdmVVc2VyU3R5bGVTaGVldEZyb21Xb3JsZChET01XcmFwcGVyV29ybGQqIHdvcmxk
LCBjb25zdCBLVVJMCiAgICAgaWYgKGl0ID09IG1fdXNlclN0eWxlU2hlZXRzLT5lbmQoKSkKICAg
ICAgICAgcmV0dXJuOwogICAgIAotICAgIFVzZXJTdHlsZVNoZWV0VmVjdG9yKiBzdHlsZXNoZWV0
cyA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgVXNlclN0eWxlU2hlZXRWZWN0b3IqIHN0eWxlc2hl
ZXRzID0gaXQtPnZhbHVlLmdldCgpOwogICAgIGZvciAoaW50IGkgPSBzdHlsZXNoZWV0cy0+c2l6
ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKICAgICAgICAgaWYgKHN0eWxlc2hlZXRzLT5hdChpKS0+
dXJsKCkgPT0gdXJsKSB7CiAgICAgICAgICAgICBzdHlsZXNoZWV0cy0+cmVtb3ZlKGkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcAppbmRleCBjOTExZDU0YTkyNTQ2YTdjZTE0
ZjE4NjZlY2JjZWQ4YjU2ZTU2NjNiLi5hMTYxNDkyNTVjN2UzZTQyNjAzOWM0YTEzMmZiMTYyYmM3
YTE3ZmU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcApAQCAtMzM5LDcg
KzMzOSw3IEBAIEtVUkwgUGFnZVNlcmlhbGl6ZXI6OnVybEZvckJsYW5rRnJhbWUoRnJhbWUqIGZy
YW1lKQogewogICAgIEhhc2hNYXA8RnJhbWUqLCBLVVJMPjo6aXRlcmF0b3IgaXRlciA9IG1fYmxh
bmtGcmFtZVVSTHMuZmluZChmcmFtZSk7CiAgICAgaWYgKGl0ZXIgIT0gbV9ibGFua0ZyYW1lVVJM
cy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0ZXItPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGl0
ZXItPnZhbHVlOwogICAgIFN0cmluZyB1cmwgPSAid3ljaXd5ZzovL2ZyYW1lLyIgKyBTdHJpbmc6
Om51bWJlcihtX2JsYW5rRnJhbWVDb3VudGVyKyspOwogICAgIEtVUkwgZmFrZVVSTChQYXJzZWRV
UkxTdHJpbmcsIHVybCk7CiAgICAgbV9ibGFua0ZyYW1lVVJMcy5hZGQoZnJhbWUsIGZha2VVUkwp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eVBvbGljeS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5UG9saWN5LmNwcAppbmRleCBjMmE1YWIxMTQzNWVm
NmRiMDU3NjhjNzZjYTAzNTdiNTYyNTgzMzEyLi41YjM2ZjRmNzE2YzQ0YmZiMDlmMjBlNjMyY2Mw
ZDAzODZmM2NjYTNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5UG9s
aWN5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5UG9saWN5LmNwcApAQCAt
MTMzLDkgKzEzMyw5IEBAIHZvaWQgU2VjdXJpdHlQb2xpY3k6OmFkZE9yaWdpbkFjY2Vzc1doaXRl
bGlzdEVudHJ5KGNvbnN0IFNlY3VyaXR5T3JpZ2luJiBzb3VyY2VPCiAgICAgU3RyaW5nIHNvdXJj
ZVN0cmluZyA9IHNvdXJjZU9yaWdpbi50b1N0cmluZygpOwogICAgIE9yaWdpbkFjY2Vzc01hcDo6
QWRkUmVzdWx0IHJlc3VsdCA9IG9yaWdpbkFjY2Vzc01hcCgpLmFkZChzb3VyY2VTdHJpbmcsIG51
bGxwdHIpOwogICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgcmVzdWx0Lml0ZXJh
dG9yLT5zZWNvbmQgPSBhZG9wdFB0cihuZXcgT3JpZ2luQWNjZXNzV2hpdGVMaXN0KTsKKyAgICAg
ICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGFkb3B0UHRyKG5ldyBPcmlnaW5BY2Nlc3NXaGl0
ZUxpc3QpOwogCi0gICAgT3JpZ2luQWNjZXNzV2hpdGVMaXN0KiBsaXN0ID0gcmVzdWx0Lml0ZXJh
dG9yLT5zZWNvbmQuZ2V0KCk7CisgICAgT3JpZ2luQWNjZXNzV2hpdGVMaXN0KiBsaXN0ID0gcmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKICAgICBsaXN0LT5hcHBlbmQoT3JpZ2luQWNjZXNz
RW50cnkoZGVzdGluYXRpb25Qcm90b2NvbCwgZGVzdGluYXRpb25Eb21haW4sIGFsbG93RGVzdGlu
YXRpb25TdWJkb21haW5zID8gT3JpZ2luQWNjZXNzRW50cnk6OkFsbG93U3ViZG9tYWlucyA6IE9y
aWdpbkFjY2Vzc0VudHJ5OjpEaXNhbGxvd1N1YmRvbWFpbnMpKTsKIH0KIApAQCAtMTUyLDcgKzE1
Miw3IEBAIHZvaWQgU2VjdXJpdHlQb2xpY3k6OnJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVu
dHJ5KGNvbnN0IFNlY3VyaXR5T3JpZ2luJiBzb3VyCiAgICAgaWYgKGl0ID09IG1hcC5lbmQoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgT3JpZ2luQWNjZXNzV2hpdGVMaXN0KiBsaXN0ID0gaXQt
PnNlY29uZC5nZXQoKTsKKyAgICBPcmlnaW5BY2Nlc3NXaGl0ZUxpc3QqIGxpc3QgPSBpdC0+dmFs
dWUuZ2V0KCk7CiAgICAgc2l6ZV90IGluZGV4ID0gbGlzdC0+ZmluZChPcmlnaW5BY2Nlc3NFbnRy
eShkZXN0aW5hdGlvblByb3RvY29sLCBkZXN0aW5hdGlvbkRvbWFpbiwgYWxsb3dEZXN0aW5hdGlv
blN1YmRvbWFpbnMgPyBPcmlnaW5BY2Nlc3NFbnRyeTo6QWxsb3dTdWJkb21haW5zIDogT3JpZ2lu
QWNjZXNzRW50cnk6OkRpc2FsbG93U3ViZG9tYWlucykpOwogICAgIGlmIChpbmRleCA9PSBub3RG
b3VuZCkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9T
ZXR0aW5ncy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcAppbmRleCBlYWY0
OWRjZWMwNDQxMDdjMjE5NDI5OGM1YzMyMTZlMzU1NDg0MzA4Li41YmFmMzg3YTMwMGM4Njg1YWVh
NTkzMGNhM2Y2ZGY2ZTk5ZDkwMDI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Nl
dHRpbmdzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcApAQCAtNjIs
NyArNjIsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0R2VuZXJpY0ZvbnRGYW1pbHlNYXAoU2Ny
aXB0Rm9udEZhbWlseU1hcCYgZm9udE1hcCwgY29uc3QgQQogICAgICAgICBpZiAoaXQgPT0gZm9u
dE1hcC5lbmQoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgZm9udE1hcC5yZW1vdmUo
aXQpOwotICAgIH0gZWxzZSBpZiAoaXQgIT0gZm9udE1hcC5lbmQoKSAmJiBpdC0+c2Vjb25kID09
IGZhbWlseSkKKyAgICB9IGVsc2UgaWYgKGl0ICE9IGZvbnRNYXAuZW5kKCkgJiYgaXQtPnZhbHVl
ID09IGZhbWlseSkKICAgICAgICAgcmV0dXJuOwogICAgIGVsc2UKICAgICAgICAgZm9udE1hcC5z
ZXQoc3RhdGljX2Nhc3Q8aW50PihzY3JpcHQpLCBmYW1pbHkpOwpAQCAtNzUsNyArNzUsNyBAQCBz
dGF0aWMgaW5saW5lIGNvbnN0IEF0b21pY1N0cmluZyYgZ2V0R2VuZXJpY0ZvbnRGYW1pbHlGb3JT
Y3JpcHQoY29uc3QgU2NyaXB0Rm9udAogewogICAgIFNjcmlwdEZvbnRGYW1pbHlNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gZm9udE1hcC5maW5kKHN0YXRpY19jYXN0PGludD4oc2NyaXB0KSk7CiAg
ICAgaWYgKGl0ICE9IGZvbnRNYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdC0+c2Vjb25kOwor
ICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwogICAgIGlmIChzY3JpcHQgIT0gVVNDUklQVF9DT01N
T04pCiAgICAgICAgIHJldHVybiBnZXRHZW5lcmljRm9udEZhbWlseUZvclNjcmlwdChmb250TWFw
LCBVU0NSSVBUX0NPTU1PTik7CiAgICAgcmV0dXJuIGVtcHR5QXRvbTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvU3BlZWNoSW5wdXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9T
cGVlY2hJbnB1dC5jcHAKaW5kZXggMDEyOGVmOGE0MGE0MjQzNTRhYjVmOGU1MGJhOGVjYzYyMjU3
YjNjOS4uODMyOGM1ZDRkZjMyOTk0MmI1OWYzZWNjMjI1MzU2OGNlMmE4YTExZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9TcGVlY2hJbnB1dC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9TcGVlY2hJbnB1dC5jcHAKQEAgLTYyLDcgKzYyLDcgQEAgaW50IFNwZWVjaElucHV0
OjpyZWdpc3Rlckxpc3RlbmVyKFNwZWVjaElucHV0TGlzdGVuZXIqIGxpc3RlbmVyKQogI2lmIGRl
ZmluZWQoREVCVUcpCiAgICAgLy8gQ2hlY2sgaWYgYWxyZWFkeSBwcmVzZW50LgogICAgIGZvciAo
SGFzaE1hcDxpbnQsIFNwZWVjaElucHV0TGlzdGVuZXIqPjo6aXRlcmF0b3IgaXQgPSBtX2xpc3Rl
bmVycy5iZWdpbigpOyBpdCAhPSBtX2xpc3RlbmVycy5lbmQoKTsgKytpdCkKLSAgICAgIEFTU0VS
VChpdC0+c2Vjb25kICE9IGxpc3RlbmVyKTsKKyAgICAgIEFTU0VSVChpdC0+dmFsdWUgIT0gbGlz
dGVuZXIpOwogI2VuZGlmCiAKICAgICBtX2xpc3RlbmVycy5hZGQobV9uZXh0TGlzdGVuZXJJZCwg
bGlzdGVuZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9Ub3VjaERpc2FtYmln
dWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVG91Y2hEaXNhbWJpZ3VhdGlvbi5jcHAK
aW5kZXggNTQzMTlhNmE0MzI3ZDA0ZTQ5MmU2NmU1ZWY1Y2I1NGQ0YjkyNDJjZi4uYjU4MjMzOGMy
MTc1NzUwNTA1ODU0NTMwZGNjMDk3NDI3YjMyNTlhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9Ub3VjaERpc2FtYmlndWF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L1RvdWNoRGlzYW1iaWd1YXRpb24uY3BwCkBAIC0xMDYsNyArMTA2LDcgQEAgdm9pZCBmaW5kR29v
ZFRvdWNoVGFyZ2V0cyhjb25zdCBJbnRSZWN0JiB0b3VjaEJveCwgRnJhbWUqIG1haW5GcmFtZSwg
ZmxvYXQgcGFnZVMKICAgICAgICAgICAgIGlmIChub2RlLT5pc0RvY3VtZW50Tm9kZSgpIHx8IG5v
ZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpodG1sVGFnKSB8fCBub2RlLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6Ym9keVRhZykpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBp
ZiAobm9kZS0+d2lsbFJlc3BvbmRUb01vdXNlQ2xpY2tFdmVudHMoKSkgewotICAgICAgICAgICAg
ICAgIFRvdWNoVGFyZ2V0RGF0YSYgdGFyZ2V0RGF0YSA9IHRvdWNoVGFyZ2V0cy5hZGQobm9kZSwg
VG91Y2hUYXJnZXREYXRhKCkpLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgICAgICAgICAgVG91
Y2hUYXJnZXREYXRhJiB0YXJnZXREYXRhID0gdG91Y2hUYXJnZXRzLmFkZChub2RlLCBUb3VjaFRh
cmdldERhdGEoKSkuaXRlcmF0b3ItPnZhbHVlOwogICAgICAgICAgICAgICAgIHRhcmdldERhdGEu
d2luZG93Qm91bmRpbmdCb3ggPSBib3VuZGluZ0JveEZvckV2ZW50Tm9kZXMobm9kZSk7CiAgICAg
ICAgICAgICAgICAgdGFyZ2V0RGF0YS5zY29yZSA9IHNjb3JlVG91Y2hUYXJnZXQodG91Y2hQb2lu
dCwgdG91Y2hQb2ludFBhZGRpbmcsIHRhcmdldERhdGEud2luZG93Qm91bmRpbmdCb3gpOwogICAg
ICAgICAgICAgICAgIGJlc3RTY29yZSA9IG1heChiZXN0U2NvcmUsIHRhcmdldERhdGEuc2NvcmUp
OwpAQCAtMTE4LDkgKzExOCw5IEBAIHZvaWQgZmluZEdvb2RUb3VjaFRhcmdldHMoY29uc3QgSW50
UmVjdCYgdG91Y2hCb3gsIEZyYW1lKiBtYWluRnJhbWUsIGZsb2F0IHBhZ2VTCiAgICAgZm9yIChI
YXNoTWFwPE5vZGUqLCBUb3VjaFRhcmdldERhdGE+OjppdGVyYXRvciBpdCA9IHRvdWNoVGFyZ2V0
cy5iZWdpbigpOyBpdCAhPSB0b3VjaFRhcmdldHMuZW5kKCk7ICsraXQpIHsKICAgICAgICAgLy8g
Q3VycmVudGx5IHRoZSBzY29yaW5nIGZ1bmN0aW9uIHVzZXMgdGhlIG92ZXJsYXAgYXJlYSB3aXRo
IHRoZSBmYXQgcG9pbnQgYXMgdGhlIHNjb3JlLgogICAgICAgICAvLyBXZSBpZ25vcmUgdGhlIGNh
bmRpZGF0ZXMgdGhhdCBoYXMgbGVzcyB0aGFuIDEvMiBvdmVybGFwICh3ZSBjb25zaWRlciBub3Qg
cmVhbGx5IGFtYmlndW91cyBlbm91Z2gpIHRoYW4gdGhlIGJlc3QgY2FuZGlkYXRlIHRvIGF2b2lk
IGV4Y2Vzc2l2ZSBwb3B1cHMuCi0gICAgICAgIGlmIChpdC0+c2Vjb25kLnNjb3JlIDwgYmVzdFNj
b3JlICogMC41KQorICAgICAgICBpZiAoaXQtPnZhbHVlLnNjb3JlIDwgYmVzdFNjb3JlICogMC41
KQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGdvb2RUYXJnZXRzLmFwcGVuZChpdC0+
c2Vjb25kLndpbmRvd0JvdW5kaW5nQm94KTsKKyAgICAgICAgZ29vZFRhcmdldHMuYXBwZW5kKGl0
LT52YWx1ZS53aW5kb3dCb3VuZGluZ0JveCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1dpbmRvd0ZlYXR1cmVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
V2luZG93RmVhdHVyZXMuY3BwCmluZGV4IDZjZGU5YjVlZjA2MGVjZGUxNWRhMDE3Mjc4NzljYTRh
NDBjNTJmODMuLjc3NjhhMDljZDg1NGFmNmI1ZjBmZjJkNDlmOWU0YmQxZTVmZmRhNDYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvV2luZG93RmVhdHVyZXMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvV2luZG93RmVhdHVyZXMuY3BwCkBAIC0yMTEsNyArMjExLDcgQEAgYm9v
bCBXaW5kb3dGZWF0dXJlczo6Ym9vbEZlYXR1cmUoY29uc3QgRGlhbG9nRmVhdHVyZXNNYXAmIGZl
YXR1cmVzLCBjb25zdCBjaGFyKgogICAgIERpYWxvZ0ZlYXR1cmVzTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IGZlYXR1cmVzLmZpbmQoa2V5KTsKICAgICBpZiAoaXQgPT0gZmVhdHVyZXMuZW5kKCkp
CiAgICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7Ci0gICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9
IGl0LT5zZWNvbmQ7CisgICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGl0LT52YWx1ZTsKICAgICBy
ZXR1cm4gdmFsdWUuaXNOdWxsKCkgfHwgdmFsdWUgPT0gIjEiIHx8IHZhbHVlID09ICJ5ZXMiIHx8
IHZhbHVlID09ICJvbiI7CiB9CiAKQEAgLTIyMyw3ICsyMjMsNyBAQCBmbG9hdCBXaW5kb3dGZWF0
dXJlczo6ZmxvYXRGZWF0dXJlKGNvbnN0IERpYWxvZ0ZlYXR1cmVzTWFwJiBmZWF0dXJlcywgY29u
c3QgY2hhcgogICAgIC8vIEZJWE1FOiBUaGUgdG9Eb3VibGUgZnVuY3Rpb24gZG9lcyBub3Qgb2Zm
ZXIgYSB3YXkgdG8gdGVsbCAiMHEiIGZyb20gc3RyaW5nIHdpdGggbm8gZGlnaXRzIGluIGl0OiBC
b3RoCiAgICAgLy8gcmV0dXJuIHRoZSBudW1iZXIgMCBhbmQgZmFsc2UgZm9yIG9rLiBCdXQgIjBx
IiBzaG91bGQgeWllbGQgdGhlIG1pbmltdW0gcmF0aGVyIHRoYW4gdGhlIGRlZmF1bHQuCiAgICAg
Ym9vbCBvazsKLSAgICBkb3VibGUgcGFyc2VkTnVtYmVyID0gaXQtPnNlY29uZC50b0RvdWJsZSgm
b2spOworICAgIGRvdWJsZSBwYXJzZWROdW1iZXIgPSBpdC0+dmFsdWUudG9Eb3VibGUoJm9rKTsK
ICAgICBpZiAoKHBhcnNlZE51bWJlciA9PSAwICYmICFvaykgfHwgaXNuYW4ocGFyc2VkTnVtYmVy
KSkKICAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTsKICAgICBpZiAocGFyc2VkTnVtYmVyIDwg
bWluIHx8IG1heCA8PSBtaW4pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1h
dGlvbi9BbmltYXRpb25Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0
aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCmluZGV4IGM0OTExOWU2YTEzYzAxNGM4ZjI1OGUy
OTQ2MTM4MTFjZGZhMGQ1MWIuLjVlMDcxN2UwYTljZmJhMzI4OTgyOTU2MjE3NzkxMmMwNmY3OGM4
YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNv
bnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlv
bkNvbnRyb2xsZXIuY3BwCkBAIC05MywxNCArOTMsMTQgQEAgZG91YmxlIEFuaW1hdGlvbkNvbnRy
b2xsZXJQcml2YXRlOjp1cGRhdGVBbmltYXRpb25zKFNldENoYW5nZWQgY2FsbFNldENoYW5nZWQv
KgogCiAgICAgUmVuZGVyT2JqZWN0QW5pbWF0aW9uTWFwOjpjb25zdF9pdGVyYXRvciBhbmltYXRp
b25zRW5kID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmVuZCgpOwogICAgIGZvciAoUmVuZGVyT2Jq
ZWN0QW5pbWF0aW9uTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fY29tcG9zaXRlQW5pbWF0aW9u
cy5iZWdpbigpOyBpdCAhPSBhbmltYXRpb25zRW5kOyArK2l0KSB7Ci0gICAgICAgIENvbXBvc2l0
ZUFuaW1hdGlvbiogY29tcEFuaW0gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICBDb21wb3Np
dGVBbmltYXRpb24qIGNvbXBBbmltID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICBpZiAoIWNv
bXBBbmltLT5zdXNwZW5kZWQoKSAmJiBjb21wQW5pbS0+aGFzQW5pbWF0aW9ucygpKSB7CiAgICAg
ICAgICAgICBkb3VibGUgdCA9IGNvbXBBbmltLT50aW1lVG9OZXh0U2VydmljZSgpOwogICAgICAg
ICAgICAgaWYgKHQgIT0gLTEgJiYgKHQgPCB0aW1lVG9OZXh0U2VydmljZSB8fCB0aW1lVG9OZXh0
U2VydmljZSA9PSAtMSkpCiAgICAgICAgICAgICAgICAgdGltZVRvTmV4dFNlcnZpY2UgPSB0Owog
ICAgICAgICAgICAgaWYgKCF0aW1lVG9OZXh0U2VydmljZSkgewogICAgICAgICAgICAgICAgIGlm
IChjYWxsU2V0Q2hhbmdlZCA9PSBDYWxsU2V0Q2hhbmdlZCkgewotICAgICAgICAgICAgICAgICAg
ICBOb2RlKiBub2RlID0gaXQtPmZpcnN0LT5ub2RlKCk7CisgICAgICAgICAgICAgICAgICAgIE5v
ZGUqIG5vZGUgPSBpdC0+a2V5LT5ub2RlKCk7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCgh
bm9kZSB8fCAobm9kZS0+ZG9jdW1lbnQoKSAmJiAhbm9kZS0+ZG9jdW1lbnQoKS0+aW5QYWdlQ2Fj
aGUoKSkpOwogICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXROZWVkc1N0eWxlUmVjYWxjKFN5
bnRoZXRpY1N0eWxlQ2hhbmdlKTsKICAgICAgICAgICAgICAgICAgICAgY2FsbGVkU2V0Q2hhbmdl
ZCA9IHRydWU7CkBAIC0yOTIsOSArMjkyLDkgQEAgdm9pZCBBbmltYXRpb25Db250cm9sbGVyUHJp
dmF0ZTo6c3VzcGVuZEFuaW1hdGlvbnNGb3JEb2N1bWVudChEb2N1bWVudCogZG9jdW1lbnQKICAg
ICAKICAgICBSZW5kZXJPYmplY3RBbmltYXRpb25NYXA6OmNvbnN0X2l0ZXJhdG9yIGFuaW1hdGlv
bnNFbmQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuZW5kKCk7CiAgICAgZm9yIChSZW5kZXJPYmpl
Y3RBbmltYXRpb25NYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9jb21wb3NpdGVBbmltYXRpb25z
LmJlZ2luKCk7IGl0ICE9IGFuaW1hdGlvbnNFbmQ7ICsraXQpIHsKLSAgICAgICAgUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlciA9IGl0LT5maXJzdDsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJl
ciA9IGl0LT5rZXk7CiAgICAgICAgIGlmIChyZW5kZXJlci0+ZG9jdW1lbnQoKSA9PSBkb2N1bWVu
dCkgewotICAgICAgICAgICAgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wQW5pbSA9IGl0LT5zZWNv
bmQuZ2V0KCk7CisgICAgICAgICAgICBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBBbmltID0gaXQt
PnZhbHVlLmdldCgpOwogICAgICAgICAgICAgY29tcEFuaW0tPnN1c3BlbmRBbmltYXRpb25zKCk7
CiAgICAgICAgIH0KICAgICB9CkBAIC0zMDgsOSArMzA4LDkgQEAgdm9pZCBBbmltYXRpb25Db250
cm9sbGVyUHJpdmF0ZTo6cmVzdW1lQW5pbWF0aW9uc0ZvckRvY3VtZW50KERvY3VtZW50KiBkb2N1
bWVudCkKICAgICAKICAgICBSZW5kZXJPYmplY3RBbmltYXRpb25NYXA6OmNvbnN0X2l0ZXJhdG9y
IGFuaW1hdGlvbnNFbmQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuZW5kKCk7CiAgICAgZm9yIChS
ZW5kZXJPYmplY3RBbmltYXRpb25NYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9jb21wb3NpdGVB
bmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGFuaW1hdGlvbnNFbmQ7ICsraXQpIHsKLSAgICAgICAg
UmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGl0LT5maXJzdDsKKyAgICAgICAgUmVuZGVyT2JqZWN0
KiByZW5kZXJlciA9IGl0LT5rZXk7CiAgICAgICAgIGlmIChyZW5kZXJlci0+ZG9jdW1lbnQoKSA9
PSBkb2N1bWVudCkgewotICAgICAgICAgICAgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wQW5pbSA9
IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBB
bmltID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAgICAgY29tcEFuaW0tPnJlc3VtZUFuaW1h
dGlvbnMoKTsKICAgICAgICAgfQogICAgIH0KQEAgLTM5Niw4ICszOTYsOCBAQCB1bnNpZ25lZCBB
bmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKERvY3Vt
ZW50KiBkb2N1bWVudAogICAgIAogICAgIFJlbmRlck9iamVjdEFuaW1hdGlvbk1hcDo6Y29uc3Rf
aXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5lbmQoKTsKICAg
ICBmb3IgKFJlbmRlck9iamVjdEFuaW1hdGlvbk1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2Nv
bXBvc2l0ZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gYW5pbWF0aW9uc0VuZDsgKytpdCkgewot
ICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gaXQtPmZpcnN0OwotICAgICAgICBDb21w
b3NpdGVBbmltYXRpb24qIGNvbXBBbmltID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgUmVu
ZGVyT2JqZWN0KiByZW5kZXJlciA9IGl0LT5rZXk7CisgICAgICAgIENvbXBvc2l0ZUFuaW1hdGlv
biogY29tcEFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgIGlmIChyZW5kZXJlci0+ZG9j
dW1lbnQoKSA9PSBkb2N1bWVudCkKICAgICAgICAgICAgIGNvdW50ICs9IGNvbXBBbmltLT5udW1i
ZXJPZkFjdGl2ZUFuaW1hdGlvbnMoKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmNwcAppbmRleCBmMzU3NzgxODk3NDBl
ZTM2ZThhMzNhNTBhZjZjYWQ1NjkyOTBmOTZiLi4wYjBmMzc5ZDU2YWJkODVjNjNiYWUxNGNlNWVh
MmI0OWFiMTNlZThlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9D
b21wb3NpdGVBbmltYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9u
L0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHAKQEAgLTU4LDcgKzU4LDcgQEAgdm9pZCBDb21wb3NpdGVB
bmltYXRpb246OmNsZWFyUmVuZGVyZXIoKQogICAgICAgICAvLyBhbiBhbmltYXRpb24gY2FsbGJh
Y2sgKHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIwNTIpCiAg
ICAgICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIHRyYW5zaXRp
b25zRW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKICAgICAgICAgZm9yIChDU1NQcm9wZXJ0eVRy
YW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsg
aXQgIT0gdHJhbnNpdGlvbnNFbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0
aW9uKiB0cmFuc2l0aW9uID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgIEltcGxpY2l0
QW5pbWF0aW9uKiB0cmFuc2l0aW9uID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAgICAgYW5p
bWF0aW9uQ29udHJvbGxlcigpLT5hbmltYXRpb25XaWxsQmVSZW1vdmVkKHRyYW5zaXRpb24pOwog
ICAgICAgICAgICAgdHJhbnNpdGlvbi0+Y2xlYXIoKTsKICAgICAgICAgfQpAQCAtNjcsNyArNjcs
NyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6Y2xlYXJSZW5kZXJlcigpCiAgICAgICAgIG1f
a2V5ZnJhbWVBbmltYXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsKICAgICAgICAgQW5pbWF0aW9u
TmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fa2V5ZnJhbWVBbmltYXRp
b25zLmVuZCgpOwogICAgICAgICBmb3IgKEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gYW5pbWF0aW9uc0VuZDsg
KytpdCkgewotICAgICAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25k
LmdldCgpOworICAgICAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24qIGFuaW0gPSBpdC0+dmFsdWUu
Z2V0KCk7CiAgICAgICAgICAgICBhbmltYXRpb25Db250cm9sbGVyKCktPmFuaW1hdGlvbldpbGxC
ZVJlbW92ZWQoYW5pbSk7CiAgICAgICAgICAgICBhbmltLT5jbGVhcigpOwogICAgICAgICB9CkBA
IC04NCw3ICs4NCw3IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVUcmFuc2l0aW9u
cyhSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBSZW5kZXJTdHlsZSoKICAgICAvLyBpbiB0aGUgbmV4
dCBsb29wIGFuZCB0aGVuIHRvc3MgdGhlIG9uZXMgdGhhdCBkaWRuJ3QgZ2V0IG1hcmtlZC4KICAg
ICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3RyYW5z
aXRpb25zLmVuZCgpOwogICAgIGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAg
ICAgICAgaXQtPnNlY29uZC0+c2V0QWN0aXZlKGZhbHNlKTsKKyAgICAgICAgaXQtPnZhbHVlLT5z
ZXRBY3RpdmUoZmFsc2UpOwogICAgICAgICAKICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG1vZGlm
aWVkQ3VycmVudFN0eWxlOwogICAgIApAQCAtMTgxLDcgKzE4MSw3IEBAIHZvaWQgQ29tcG9zaXRl
QW5pbWF0aW9uOjp1cGRhdGVUcmFuc2l0aW9ucyhSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBSZW5k
ZXJTdHlsZSoKICAgICBWZWN0b3I8aW50PiB0b0JlUmVtb3ZlZDsKICAgICBlbmQgPSBtX3RyYW5z
aXRpb25zLmVuZCgpOwogICAgIGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewot
ICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAg
ICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICBp
ZiAoIWFuaW0tPmFjdGl2ZSgpKSB7CiAgICAgICAgICAgICBhbmltYXRpb25Db250cm9sbGVyKCkt
PmFuaW1hdGlvbldpbGxCZVJlbW92ZWQoYW5pbSk7CiAgICAgICAgICAgICB0b0JlUmVtb3ZlZC5h
cHBlbmQoYW5pbS0+YW5pbWF0aW5nUHJvcGVydHkoKSk7CkBAIC0yMDcsMTMgKzIwNywxMyBAQCB2
b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlS2V5ZnJhbWVBbmltYXRpb25zKFJlbmRlck9i
amVjdCogcmVuZGVyZXIsIFJlbmRlcgogICAgICAgICAvLyBUaGUgY3VycmVudCBhbmQgdGFyZ2V0
IGFuaW1hdGlvbnMgYXJlIHRoZSBzYW1lIHNvIHdlIGp1c3QgbmVlZCB0byB0b3NzIGFueSAKICAg
ICAgICAgLy8gYW5pbWF0aW9uIHdoaWNoIGlzIGZpbmlzaGVkIChwb3N0QWN0aXZlKS4KICAgICAg
ICAgZm9yIChBbmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVB
bmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGtmZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAo
aXQtPnNlY29uZC0+cG9zdEFjdGl2ZSgpKQotICAgICAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNl
dEluZGV4KC0xKTsKKyAgICAgICAgICAgIGlmIChpdC0+dmFsdWUtPnBvc3RBY3RpdmUoKSkKKyAg
ICAgICAgICAgICAgICBpdC0+dmFsdWUtPnNldEluZGV4KC0xKTsKICAgICAgICAgfQogICAgIH0g
ZWxzZSB7CiAgICAgICAgIC8vIE1hcmsgYWxsIGV4aXN0aW5nIGFuaW1hdGlvbnMgYXMgbm8gbG9u
Z2VyIGFjdGl2ZS4KICAgICAgICAgZm9yIChBbmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGtmZW5kOyArK2l0KQot
ICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0SW5kZXgoLTEpOworICAgICAgICAgICAgaXQtPnZh
bHVlLT5zZXRJbmRleCgtMSk7CiAgICAgICAgICAgICAKICAgICAgICAgLy8gVG9zcyB0aGUgYW5p
bWF0aW9uIG9yZGVyIG1hcC4KICAgICAgICAgbV9rZXlmcmFtZUFuaW1hdGlvbk9yZGVyTWFwLmNs
ZWFyKCk7CkBAIC0yNjIsNyArMjYyLDcgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnVwZGF0
ZUtleWZyYW1lQW5pbWF0aW9ucyhSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBSZW5kZXIKICAgICBW
ZWN0b3I8QXRvbWljU3RyaW5nSW1wbCo+IGFuaW1zVG9CZVJlbW92ZWQ7CiAgICAga2ZlbmQgPSBt
X2tleWZyYW1lQW5pbWF0aW9ucy5lbmQoKTsKICAgICBmb3IgKEFuaW1hdGlvbk5hbWVNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0ga2Zl
bmQ7ICsraXQpIHsKLSAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24qIGtleWZyYW1lQW5pbSA9IGl0
LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIEtleWZyYW1lQW5pbWF0aW9uKiBrZXlmcmFtZUFuaW0g
PSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgIGlmIChrZXlmcmFtZUFuaW0tPmluZGV4KCkgPCAw
KSB7CiAgICAgICAgICAgICBhbmltc1RvQmVSZW1vdmVkLmFwcGVuZChrZXlmcmFtZUFuaW0tPm5h
bWUoKS5pbXBsKCkpOwogICAgICAgICAgICAgYW5pbWF0aW9uQ29udHJvbGxlcigpLT5hbmltYXRp
b25XaWxsQmVSZW1vdmVkKGtleWZyYW1lQW5pbSk7CkBAIC0yOTAsNyArMjkwLDcgQEAgUGFzc1Jl
ZlB0cjxSZW5kZXJTdHlsZT4gQ29tcG9zaXRlQW5pbWF0aW9uOjphbmltYXRlKFJlbmRlck9iamVj
dCogcmVuZGVyZXIsIFJlbmQKICAgICAgICAgaWYgKCFtX3RyYW5zaXRpb25zLmlzRW1wdHkoKSkg
ewogICAgICAgICAgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKICAgICAgICAgICAgIGZvciAoQ1NTUHJvcGVydHlU
cmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgICAgIGlmIChJbXBsaWNpdEFuaW1hdGlv
biogYW5pbSA9IGl0LT5zZWNvbmQuZ2V0KCkpCisgICAgICAgICAgICAgICAgaWYgKEltcGxpY2l0
QW5pbWF0aW9uKiBhbmltID0gaXQtPnZhbHVlLmdldCgpKQogICAgICAgICAgICAgICAgICAgICBh
bmltLT5hbmltYXRlKHRoaXMsIHJlbmRlcmVyLCBjdXJyZW50U3R5bGUsIHRhcmdldFN0eWxlLCBy
ZXN1bHRTdHlsZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTMxMiw3ICszMTIsNyBA
QCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBDb21wb3NpdGVBbmltYXRpb246OmdldEFuaW1hdGVk
U3R5bGUoKSBjb25zdAogICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gcmVzdWx0U3R5bGU7CiAgICAg
Q1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV90cmFuc2l0
aW9ucy5lbmQoKTsKICAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAg
ICAgICAgaWYgKEltcGxpY2l0QW5pbWF0aW9uKiBpbXBsaWNpdEFuaW1hdGlvbiA9IGl0LT5zZWNv
bmQuZ2V0KCkpCisgICAgICAgIGlmIChJbXBsaWNpdEFuaW1hdGlvbiogaW1wbGljaXRBbmltYXRp
b24gPSBpdC0+dmFsdWUuZ2V0KCkpCiAgICAgICAgICAgICBpbXBsaWNpdEFuaW1hdGlvbi0+Z2V0
QW5pbWF0ZWRTdHlsZShyZXN1bHRTdHlsZSk7CiAgICAgfQogCkBAIC0zMzMsNyArMzMzLDcgQEAg
dm9pZCBDb21wb3NpdGVBbmltYXRpb246OnNldEFuaW1hdGluZyhib29sIGFuaW1hdGluZykKICAg
ICBpZiAoIW1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSB7CiAgICAgICAgIENTU1Byb3BlcnR5VHJh
bnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIHRyYW5zaXRpb25zRW5kID0gbV90cmFuc2l0aW9u
cy5lbmQoKTsKICAgICAgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gdHJhbnNpdGlvbnNFbmQ7
ICsraXQpIHsKLSAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiB0cmFuc2l0aW9uID0gaXQt
PnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiB0cmFuc2l0aW9u
ID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAgICAgdHJhbnNpdGlvbi0+c2V0QW5pbWF0aW5n
KGFuaW1hdGluZyk7CiAgICAgICAgIH0KICAgICB9CkBAIC0zNDEsNyArMzQxLDcgQEAgdm9pZCBD
b21wb3NpdGVBbmltYXRpb246OnNldEFuaW1hdGluZyhib29sIGFuaW1hdGluZykKICAgICAgICAg
bV9rZXlmcmFtZUFuaW1hdGlvbnMuY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgICAgICBBbmltYXRp
b25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBhbmltYXRpb25zRW5kID0gbV9rZXlmcmFtZUFuaW1h
dGlvbnMuZW5kKCk7CiAgICAgICAgIGZvciAoQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBhbmltYXRpb25zRW5k
OyArK2l0KSB7Ci0gICAgICAgICAgICBLZXlmcmFtZUFuaW1hdGlvbiogYW5pbSA9IGl0LT5zZWNv
bmQuZ2V0KCk7CisgICAgICAgICAgICBLZXlmcmFtZUFuaW1hdGlvbiogYW5pbSA9IGl0LT52YWx1
ZS5nZXQoKTsKICAgICAgICAgICAgIGFuaW0tPnNldEFuaW1hdGluZyhhbmltYXRpbmcpOwogICAg
ICAgICB9CiAgICAgfQpAQCAtMzU2LDcgKzM1Niw3IEBAIGRvdWJsZSBDb21wb3NpdGVBbmltYXRp
b246OnRpbWVUb05leHRTZXJ2aWNlKCkgY29uc3QKICAgICBpZiAoIW1fdHJhbnNpdGlvbnMuaXNF
bXB0eSgpKSB7CiAgICAgICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJh
dG9yIHRyYW5zaXRpb25zRW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKICAgICAgICAgZm9yIChD
U1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlv
bnMuYmVnaW4oKTsgaXQgIT0gdHJhbnNpdGlvbnNFbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIElt
cGxpY2l0QW5pbWF0aW9uKiB0cmFuc2l0aW9uID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAg
ICAgIEltcGxpY2l0QW5pbWF0aW9uKiB0cmFuc2l0aW9uID0gaXQtPnZhbHVlLmdldCgpOwogICAg
ICAgICAgICAgZG91YmxlIHQgPSB0cmFuc2l0aW9uID8gdHJhbnNpdGlvbi0+dGltZVRvTmV4dFNl
cnZpY2UoKSA6IC0xOwogICAgICAgICAgICAgaWYgKHQgPCBtaW5UIHx8IG1pblQgPT0gLTEpCiAg
ICAgICAgICAgICAgICAgbWluVCA9IHQ7CkBAIC0zNjgsNyArMzY4LDcgQEAgZG91YmxlIENvbXBv
c2l0ZUFuaW1hdGlvbjo6dGltZVRvTmV4dFNlcnZpY2UoKSBjb25zdAogICAgICAgICBtX2tleWZy
YW1lQW5pbWF0aW9ucy5jaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgICAgIEFuaW1hdGlvbk5hbWVN
YXA6OmNvbnN0X2l0ZXJhdG9yIGFuaW1hdGlvbnNFbmQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5l
bmQoKTsKICAgICAgICAgZm9yIChBbmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9
IG1fa2V5ZnJhbWVBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGFuaW1hdGlvbnNFbmQ7ICsraXQp
IHsKLSAgICAgICAgICAgIEtleWZyYW1lQW5pbWF0aW9uKiBhbmltYXRpb24gPSBpdC0+c2Vjb25k
LmdldCgpOworICAgICAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24qIGFuaW1hdGlvbiA9IGl0LT52
YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGRvdWJsZSB0ID0gYW5pbWF0aW9uID8gYW5pbWF0aW9u
LT50aW1lVG9OZXh0U2VydmljZSgpIDogLTE7CiAgICAgICAgICAgICBpZiAodCA8IG1pblQgfHwg
bWluVCA9PSAtMSkKICAgICAgICAgICAgICAgICBtaW5UID0gdDsKQEAgLTM5MCw3ICszOTAsNyBA
QCBQYXNzUmVmUHRyPEtleWZyYW1lQW5pbWF0aW9uPiBDb21wb3NpdGVBbmltYXRpb246OmdldEFu
aW1hdGlvbkZvclByb3BlcnR5KENTU1BybwogICAgICAgICBtX2tleWZyYW1lQW5pbWF0aW9ucy5j
aGVja0NvbnNpc3RlbmN5KCk7CiAgICAgICAgIEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJh
dG9yIGFuaW1hdGlvbnNFbmQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5lbmQoKTsKICAgICAgICAg
Zm9yIChBbmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVBbmlt
YXRpb25zLmJlZ2luKCk7IGl0ICE9IGFuaW1hdGlvbnNFbmQ7ICsraXQpIHsKLSAgICAgICAgICAg
IFJlZlB0cjxLZXlmcmFtZUFuaW1hdGlvbj4gYW5pbSA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAg
ICBSZWZQdHI8S2V5ZnJhbWVBbmltYXRpb24+IGFuaW0gPSBpdC0+dmFsdWU7CiAgICAgICAgICAg
ICBpZiAoYW5pbS0+aGFzQW5pbWF0aW9uRm9yUHJvcGVydHkocHJvcGVydHkpKQogICAgICAgICAg
ICAgICAgIHJldHZhbCA9IGFuaW07CiAgICAgICAgIH0KQEAgLTQxMCwxNCArNDEwLDE0IEBAIHZv
aWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpzdXNwZW5kQW5pbWF0aW9ucygpCiAgICAgICAgIG1fa2V5
ZnJhbWVBbmltYXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsKICAgICAgICAgQW5pbWF0aW9uTmFt
ZU1hcDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fa2V5ZnJhbWVBbmltYXRpb25z
LmVuZCgpOwogICAgICAgICBmb3IgKEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gYW5pbWF0aW9uc0VuZDsgKytp
dCkgewotICAgICAgICAgICAgaWYgKEtleWZyYW1lQW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29u
ZC5nZXQoKSkKKyAgICAgICAgICAgIGlmIChLZXlmcmFtZUFuaW1hdGlvbiogYW5pbSA9IGl0LT52
YWx1ZS5nZXQoKSkKICAgICAgICAgICAgICAgICBhbmltLT51cGRhdGVQbGF5U3RhdGUoQW5pbVBs
YXlTdGF0ZVBhdXNlZCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKCFtX3RyYW5zaXRpb25z
LmlzRW1wdHkoKSkgewogICAgICAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9p
dGVyYXRvciB0cmFuc2l0aW9uc0VuZCA9IG1fdHJhbnNpdGlvbnMuZW5kKCk7CiAgICAgICAgIGZv
ciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5z
aXRpb25zLmJlZ2luKCk7IGl0ICE9IHRyYW5zaXRpb25zRW5kOyArK2l0KSB7Ci0gICAgICAgICAg
ICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAg
ICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAg
IGlmIChhbmltICYmIGFuaW0tPmhhc1N0eWxlKCkpCiAgICAgICAgICAgICAgICAgYW5pbS0+dXBk
YXRlUGxheVN0YXRlKEFuaW1QbGF5U3RhdGVQYXVzZWQpOwogICAgICAgICB9CkBAIC00MzUsNyAr
NDM1LDcgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnJlc3VtZUFuaW1hdGlvbnMoKQogICAg
ICAgICBtX2tleWZyYW1lQW5pbWF0aW9ucy5jaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgICAgIEFu
aW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGFuaW1hdGlvbnNFbmQgPSBtX2tleWZyYW1l
QW5pbWF0aW9ucy5lbmQoKTsKICAgICAgICAgZm9yIChBbmltYXRpb25OYW1lTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGFuaW1hdGlv
bnNFbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIEtleWZyYW1lQW5pbWF0aW9uKiBhbmltID0gaXQt
PnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgIEtleWZyYW1lQW5pbWF0aW9uKiBhbmltID0gaXQt
PnZhbHVlLmdldCgpOwogICAgICAgICAgICAgaWYgKGFuaW0gJiYgYW5pbS0+cGxheVN0YXRlUGxh
eWluZygpKQogICAgICAgICAgICAgICAgIGFuaW0tPnVwZGF0ZVBsYXlTdGF0ZShBbmltUGxheVN0
YXRlUGxheWluZyk7CiAgICAgICAgIH0KQEAgLTQ0NCw3ICs0NDQsNyBAQCB2b2lkIENvbXBvc2l0
ZUFuaW1hdGlvbjo6cmVzdW1lQW5pbWF0aW9ucygpCiAgICAgaWYgKCFtX3RyYW5zaXRpb25zLmlz
RW1wdHkoKSkgewogICAgICAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVy
YXRvciB0cmFuc2l0aW9uc0VuZCA9IG1fdHJhbnNpdGlvbnMuZW5kKCk7CiAgICAgICAgIGZvciAo
Q1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRp
b25zLmJlZ2luKCk7IGl0ICE9IHRyYW5zaXRpb25zRW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBJ
bXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBJ
bXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGlm
IChhbmltICYmIGFuaW0tPmhhc1N0eWxlKCkpCiAgICAgICAgICAgICAgICAgYW5pbS0+dXBkYXRl
UGxheVN0YXRlKEFuaW1QbGF5U3RhdGVQbGF5aW5nKTsKICAgICAgICAgfQpAQCAtNDU2LDcgKzQ1
Niw3IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpvdmVycmlkZUltcGxpY2l0QW5pbWF0aW9u
cyhDU1NQcm9wZXJ0eUlEIHByb3BlcnR5KQogICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fdHJhbnNpdGlvbnMuZW5kKCk7CiAgICAgaWYgKCFtX3Ry
YW5zaXRpb25zLmlzRW1wdHkoKSkgewogICAgICAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlv
bnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKLSAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnNl
Y29uZC5nZXQoKTsKKyAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnZh
bHVlLmdldCgpOwogICAgICAgICAgICAgaWYgKGFuaW0gJiYgYW5pbS0+YW5pbWF0aW5nUHJvcGVy
dHkoKSA9PSBwcm9wZXJ0eSkKICAgICAgICAgICAgICAgICBhbmltLT5zZXRPdmVycmlkZGVuKHRy
dWUpOwogICAgICAgICB9CkBAIC00NjgsNyArNDY4LDcgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRp
b246OnJlc3VtZU92ZXJyaWRkZW5JbXBsaWNpdEFuaW1hdGlvbnMoQ1NTUHJvcGVydHlJRCBwcm9w
ZXIKICAgICBpZiAoIW1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSB7CiAgICAgICAgIENTU1Byb3Bl
cnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fdHJhbnNpdGlvbnMuZW5k
KCk7CiAgICAgICAgIGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAg
ICAgICAgSW1wbGljaXRBbmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAg
ICAgICAgSW1wbGljaXRBbmltYXRpb24qIGFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAg
ICAgICBpZiAoYW5pbSAmJiBhbmltLT5hbmltYXRpbmdQcm9wZXJ0eSgpID09IHByb3BlcnR5KQog
ICAgICAgICAgICAgICAgIGFuaW0tPnNldE92ZXJyaWRkZW4oZmFsc2UpOwogICAgICAgICB9CkBA
IC00ODEsNyArNDgxLDcgQEAgYm9vbCBDb21wb3NpdGVBbmltYXRpb246OmlzQW5pbWF0aW5nUHJv
cGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgYm9vbCBhY2NlbGUKICAgICAgICAgbV9rZXlm
cmFtZUFuaW1hdGlvbnMuY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgICAgICBBbmltYXRpb25OYW1l
TWFwOjpjb25zdF9pdGVyYXRvciBhbmltYXRpb25zRW5kID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMu
ZW5kKCk7CiAgICAgICAgIGZvciAoQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtX2tleWZyYW1lQW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBhbmltYXRpb25zRW5kOyArK2l0
KSB7Ci0gICAgICAgICAgICBLZXlmcmFtZUFuaW1hdGlvbiogYW5pbSA9IGl0LT5zZWNvbmQuZ2V0
KCk7CisgICAgICAgICAgICBLZXlmcmFtZUFuaW1hdGlvbiogYW5pbSA9IGl0LT52YWx1ZS5nZXQo
KTsKICAgICAgICAgICAgIGlmIChhbmltICYmIGFuaW0tPmlzQW5pbWF0aW5nUHJvcGVydHkocHJv
cGVydHksIGFjY2VsZXJhdGVkT25seSwgaXNSdW5uaW5nTm93KSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtNDkwLDcgKzQ5MCw3IEBAIGJvb2wgQ29tcG9zaXRl
QW5pbWF0aW9uOjppc0FuaW1hdGluZ1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHksIGJv
b2wgYWNjZWxlCiAgICAgaWYgKCFtX3RyYW5zaXRpb25zLmlzRW1wdHkoKSkgewogICAgICAgICBD
U1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciB0cmFuc2l0aW9uc0VuZCA9
IG1fdHJhbnNpdGlvbnMuZW5kKCk7CiAgICAgICAgIGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9u
c01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IHRy
YW5zaXRpb25zRW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5p
bSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5p
bSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGlmIChhbmltICYmIGFuaW0tPmlzQW5p
bWF0aW5nUHJvcGVydHkocHJvcGVydHksIGFjY2VsZXJhdGVkT25seSwgaXNSdW5uaW5nTm93KSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtNTU2LDcgKzU1Niw3
IEBAIHVuc2lnbmVkIENvbXBvc2l0ZUFuaW1hdGlvbjo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25z
KCkgY29uc3QKICAgICAgICAgbV9rZXlmcmFtZUFuaW1hdGlvbnMuY2hlY2tDb25zaXN0ZW5jeSgp
OwogICAgICAgICBBbmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBhbmltYXRpb25zRW5k
ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuZW5kKCk7CiAgICAgICAgIGZvciAoQW5pbWF0aW9uTmFt
ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5iZWdpbigpOyBp
dCAhPSBhbmltYXRpb25zRW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBLZXlmcmFtZUFuaW1hdGlv
biogYW5pbSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBLZXlmcmFtZUFuaW1hdGlv
biogYW5pbSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGlmIChhbmltLT5ydW5uaW5n
KCkpCiAgICAgICAgICAgICAgICAgKytjb3VudDsKICAgICAgICAgfQpAQCAtNTY1LDcgKzU2NSw3
IEBAIHVuc2lnbmVkIENvbXBvc2l0ZUFuaW1hdGlvbjo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25z
KCkgY29uc3QKICAgICBpZiAoIW1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSB7CiAgICAgICAgIENT
U1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIHRyYW5zaXRpb25zRW5kID0g
bV90cmFuc2l0aW9ucy5lbmQoKTsKICAgICAgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25z
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gdHJh
bnNpdGlvbnNFbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmlt
ID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmlt
ID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAgICAgaWYgKGFuaW0tPnJ1bm5pbmcoKSkKICAg
ICAgICAgICAgICAgICArK2NvdW50OwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9MYW5ndWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MYW5n
dWFnZS5jcHAKaW5kZXggMmFmMmEyMDZlNTVlMTdhOTMyNTc4ZTA4ZjI4NTUyNDI0ZTllNDRmZC4u
ZGJhM2E4OWZiYmMxMzdjNThmY2NhZTkzOGI0YWYxY2E0OGUxZDZjZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGFuZ3VhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0xhbmd1YWdlLmNwcApAQCAtNTMsNyArNTMsNyBAQCB2b2lkIGxhbmd1YWdlRGlkQ2hh
bmdlKCkKIHsKICAgICBPYnNlcnZlck1hcDo6aXRlcmF0b3IgZW5kID0gb2JzZXJ2ZXJNYXAoKS5l
bmQoKTsKICAgICBmb3IgKE9ic2VydmVyTWFwOjppdGVyYXRvciBpdGVyID0gb2JzZXJ2ZXJNYXAo
KS5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQotICAgICAgICBpdGVyLT5zZWNvbmQoaXRl
ci0+Zmlyc3QpOworICAgICAgICBpdGVyLT52YWx1ZShpdGVyLT5rZXkpOwogfQogCiBTdHJpbmcg
ZGVmYXVsdExhbmd1YWdlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01J
TUVUeXBlUmVnaXN0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTUlNRVR5cGVSZWdp
c3RyeS5jcHAKaW5kZXggYzE4OGNkOGJkZjQwNTAyMzZmNWYwMzhhZDkxY2RmZmM2ZGZkM2NlMS4u
NDQwYjQyOTlhYmNiZGExMzczYzZlNmIxYWZjNWRiODIzMjc4N2I0NSAxMDA3NTUKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5jcHAKQEAgLTcwNCw3ICs3MDQsNyBAQCBT
dHJpbmcgTUlNRVR5cGVSZWdpc3RyeTo6Z2V0Tm9ybWFsaXplZE1JTUVUeXBlKGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUpCiAgICAgTUlNRVR5cGVBc3NvY2lhdGlvbk1hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtaW1lVHlwZUFzc29jaWF0aW9uTWFwKCkuZmluZChtaW1lVHlwZSk7CiAKICAgICBpZiAo
aXQgIT0gbWltZVR5cGVBc3NvY2lhdGlvbk1hcCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gaXQt
PnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKICNlbmRpZgogICAgIHJldHVybiBt
aW1lVHlwZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0hS
VEZFbGV2YXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vSFJURkVsZXZh
dGlvbi5jcHAKaW5kZXggMjVlNDU4OTYyNWRjY2ZkN2Y0ZDNiNTRhZjc1MzJkOGU4M2YyNjI3OC4u
Y2ZlMTNlZDg1MzA2YjUxNzEyYWEzMDc0YjljOGRjMzkyY2Q0NjUyZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vSFJURkVsZXZhdGlvbi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vSFJURkVsZXZhdGlvbi5jcHAKQEAgLTc5LDcgKzc5LDcg
QEAgc3RhdGljIEF1ZGlvQnVzKiBnZXRDb25jYXRlbmF0ZWRJbXB1bHNlUmVzcG9uc2VzRm9yU3Vi
amVjdChjb25zdCBTdHJpbmcmIHN1YmplY3QKICAgICAgICAgYnVzID0gY29uY2F0ZW5hdGVkSW1w
dWxzZVJlc3BvbnNlcy5sZWFrUHRyKCk7CiAgICAgICAgIGF1ZGlvQnVzTWFwLnNldChzdWJqZWN0
TmFtZSwgYnVzKTsKICAgICB9IGVsc2UKLSAgICAgICAgYnVzID0gaXRlcmF0b3ItPnNlY29uZDsK
KyAgICAgICAgYnVzID0gaXRlcmF0b3ItPnZhbHVlOwogCiAgICAgc2l6ZV90IHJlc3BvbnNlTGVu
Z3RoID0gYnVzLT5sZW5ndGgoKTsKICAgICBzaXplX3QgZXhwZWN0ZWRMZW5ndGggPSBzdGF0aWNf
Y2FzdDxzaXplX3Q+KFRvdGFsTnVtYmVyT2ZSZXNwb25zZXMgKiBSZXNwb25zZUZyYW1lU2l6ZSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0Nvb2tpZU1h
bmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9Db29raWVNYW5h
Z2VyLmNwcAppbmRleCBkYjAxMmJmYjQwYWUwOWJhMGJmYWM0MzBkMDZhY2JjN2YwZWI1Y2MwLi5m
MjU1NDk0MWI3ZWVlODMyYmI4ODcyNDUxODEzYWVjMTkxZWMyODQ1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0Nvb2tpZU1hbmFnZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvQ29va2llTWFuYWdlci5jcHAKQEAgLTE3
OSw3ICsxNzksNyBAQCBTdHJpbmcgQ29va2llTWFuYWdlcjo6Z2VuZXJhdGVIdG1sRnJhZ21lbnRG
b3JDb29raWVzKCkKIAogICAgIFZlY3RvcjxQYXJzZWRDb29raWUqPiBjb29raWVDYW5kaWRhdGVz
OwogICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIENvb2tpZU1hcCo+OjppdGVyYXRvciBpdCA9IG1f
bWFuYWdlck1hcC5iZWdpbigpOyBpdCAhPSBtX21hbmFnZXJNYXAuZW5kKCk7ICsraXQpCi0gICAg
ICAgIGl0LT5zZWNvbmQtPmdldEFsbENoaWxkQ29va2llcygmY29va2llQ2FuZGlkYXRlcyk7Cisg
ICAgICAgIGl0LT52YWx1ZS0+Z2V0QWxsQ2hpbGRDb29raWVzKCZjb29raWVDYW5kaWRhdGVzKTsK
IAogICAgIFN0cmluZyByZXN1bHQ7CiAgICAgUGFyc2VkQ29va2llKiBjb29raWUgPSAwOwpAQCAt
MzE3LDcgKzMxNyw3IEBAIHZvaWQgQ29va2llTWFuYWdlcjo6cmVtb3ZlQWxsQ29va2llcyhCYWNr
aW5nU3RvcmVSZW1vdmFsUG9saWN5IGJhY2tpbmdTdG9yZVJlbW92CiAgICAgSGFzaE1hcDxTdHJp
bmcsIENvb2tpZU1hcCo+OjppdGVyYXRvciBmaXJzdCA9IG1fbWFuYWdlck1hcC5iZWdpbigpOwog
ICAgIEhhc2hNYXA8U3RyaW5nLCBDb29raWVNYXAqPjo6aXRlcmF0b3IgZW5kID0gbV9tYW5hZ2Vy
TWFwLmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIENvb2tpZU1hcCo+OjppdGVyYXRv
ciBpdCA9IGZpcnN0OyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPmRlbGV0
ZUFsbENvb2tpZXNBbmREb21haW5zKCk7CisgICAgICAgIGl0LT52YWx1ZS0+ZGVsZXRlQWxsQ29v
a2llc0FuZERvbWFpbnMoKTsKIAogICAgIGlmIChiYWNraW5nU3RvcmVSZW1vdmFsID09IFJlbW92
ZUZyb21CYWNraW5nU3RvcmUpCiAgICAgICAgIG1fY29va2llQmFja2luZ1N0b3JlLT5yZW1vdmVB
bGwoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvQ29v
a2llTWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvQ29va2llTWFw
LmNwcAppbmRleCBiYmU5YTdjZWRmNzNmNzBkNTBjNGRkMDcyNGY0YTVkNmEwMTVjN2E4Li5hZjQ4
NWI1NGMyMGVjY2ZjYTBhYTRkOTk1ZmI3MjBhNDUzNGQ3OGE0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0Nvb2tpZU1hcC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9Db29raWVNYXAuY3BwCkBAIC0xNzIsNyArMTcyLDcg
QEAgUGFyc2VkQ29va2llKiBDb29raWVNYXA6OnJlbW92ZU9sZGVzdENvb2tpZSgpCiAgICAgICAg
IENvb2tpZUxvZygiQ29va2llTWFwIC0gbG9va2luZyBpbnRvIHN1YmRvbWFpbnMiKTsKIAogICAg
ICAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBDb29raWVNYXAqPjo6aXRlcmF0b3IgaXQgPSBtX3N1
YmRvbWFpbnMuYmVnaW4oKTsgaXQgIT0gbV9zdWJkb21haW5zLmVuZCgpOyArK2l0KSB7Ci0gICAg
ICAgICAgICBvbGRlc3RDb29raWUgPSBpdC0+c2Vjb25kLT5yZW1vdmVPbGRlc3RDb29raWUoKTsK
KyAgICAgICAgICAgIG9sZGVzdENvb2tpZSA9IGl0LT52YWx1ZS0+cmVtb3ZlT2xkZXN0Q29va2ll
KCk7CiAgICAgICAgICAgICBpZiAob2xkZXN0Q29va2llKQogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CkBAIC0yMTQsNyArMjE0LDcgQEAgdm9pZCBDb29raWVNYXA6OmdldEFsbENo
aWxkQ29va2llcyhWZWN0b3I8UGFyc2VkQ29va2llKj4qIHN0YWNrT2ZDb29raWVzKQogICAgIENv
b2tpZUxvZygiQ29va2llTWFwIC0gZ2V0QWxsQ2hpbGRDb29raWVzIGluIE1hcCAtICVzIiwgZ2V0
TmFtZSgpLnV0ZjgoKS5kYXRhKCkpOwogICAgIGdldEFsbENvb2tpZXMoc3RhY2tPZkNvb2tpZXMp
OwogICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIENvb2tpZU1hcCo+OjppdGVyYXRvciBpdCA9IG1f
c3ViZG9tYWlucy5iZWdpbigpOyBpdCAhPSBtX3N1YmRvbWFpbnMuZW5kKCk7ICsraXQpCi0gICAg
ICAgIGl0LT5zZWNvbmQtPmdldEFsbENoaWxkQ29va2llcyhzdGFja09mQ29va2llcyk7CisgICAg
ICAgIGl0LT52YWx1ZS0+Z2V0QWxsQ2hpbGRDb29raWVzKHN0YWNrT2ZDb29raWVzKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY2YvQmluYXJ5UHJvcGVydHlMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nm
L0JpbmFyeVByb3BlcnR5TGlzdC5jcHAKaW5kZXggYmVjMmVjOTUwNjQ0Yzk5M2JlODlhYjM1ZTBi
ODY3YThiNjEyNjA4OC4uYjI3ZDdkN2NkM2MxNDM4NjBlYzY1OGJlZWIyZDZlNzcyZTk0MmM1MiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2YvQmluYXJ5UHJvcGVydHlMaXN0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9CaW5hcnlQcm9wZXJ0eUxpc3Qu
Y3BwCkBAIC0yMjksNyArMjI5LDcgQEAgdm9pZCBCaW5hcnlQcm9wZXJ0eUxpc3RQbGFuOjp3cml0
ZUludGVnZXJBcnJheShjb25zdCBpbnQqIGludGVnZXJzLCBzaXplX3Qgc2l6ZSkKICAgICAgICAg
cmV0dXJuOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQogICAgICAgICB3
cml0ZUludGVnZXIoaW50ZWdlcnNbaV0pOwotICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25k
ID0gbV9jdXJyZW50T2JqZWN0UmVmZXJlbmNlKys7CisgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZSA9IG1fY3VycmVudE9iamVjdFJlZmVyZW5jZSsrOwogICAgIHdyaXRlQXJyYXlPYmplY3Qo
c2l6ZSk7CiAgICAgbV9jdXJyZW50QWdncmVnYXRlU2l6ZSA9IHNhdmVkQWdncmVnYXRlU2l6ZTsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQv
V2ViSFRUUExvYWRJbmZvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1
cHBvcnQvV2ViSFRUUExvYWRJbmZvLmNwcAppbmRleCAzM2VhY2UxZDJkZjIxMWI3Njk1MmI2NzRm
MGI5NTcwYzkzNGU3Y2M2Li41Y2Q3MjYwMTEwZDYyN2Y3YmE4NDZkM2Q0NzU2YTgyYmRhNmVjOTMz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dl
YkhUVFBMb2FkSW5mby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0v
c3VwcG9ydC9XZWJIVFRQTG9hZEluZm8uY3BwCkBAIC0xMDYsNyArMTA2LDcgQEAgc3RhdGljIHZv
aWQgYWRkSGVhZGVyKEhUVFBIZWFkZXJNYXAqIG1hcCwgY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBj
b25zdCBXZWJTdHJpbmcKICAgICBIVFRQSGVhZGVyTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbWFw
LT5hZGQobmFtZSwgdmFsdWUpOwogICAgIC8vIEl0IGlzIGltcG9ydGFudCB0aGF0IHZhbHVlcyBh
cmUgc2VwYXJhdGVkIGJ5ICdcbicsIG5vdCBjb21tYSwgb3RoZXJ3aXNlIFNldC1Db29raWUgaGVh
ZGVyIGlzIG5vdCBwYXJzZWFibGUuCiAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAg
ICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQuYXBwZW5kKCJcbiIgKyBTdHJpbmcodmFsdWUpKTsK
KyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQoIlxuIiArIFN0cmluZyh2YWx1
ZSkpOwogfQogCiB2b2lkIFdlYkhUVFBMb2FkSW5mbzo6YWRkUmVxdWVzdEhlYWRlcihjb25zdCBX
ZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYlN0cmluZyYgdmFsdWUpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlVSTFJlcXVlc3QuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJVUkxSZXF1ZXN0LmNw
cAppbmRleCBmNDM3YjUxNjQzYjIzNGI2MDlmNzcyNWZiOGQ3NmQ3MzFmNTYxN2VhLi5lMzg1MTAx
NGZjZGQ0NWJmYWNiNDhiOTdiYmE3NmUzMWQ4YjRhMDE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlVSTFJlcXVlc3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVVJMUmVxdWVzdC5jcHAK
QEAgLTE5NSw3ICsxOTUsNyBAQCB2b2lkIFdlYlVSTFJlcXVlc3Q6OnZpc2l0SFRUUEhlYWRlckZp
ZWxkcyhXZWJIVFRQSGVhZGVyVmlzaXRvciogdmlzaXRvcikgY29uc3QKIHsKICAgICBjb25zdCBI
VFRQSGVhZGVyTWFwJiBtYXAgPSBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXF1ZXN0LT5odHRwSGVh
ZGVyRmllbGRzKCk7CiAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9
IG1hcC5iZWdpbigpOyBpdCAhPSBtYXAuZW5kKCk7ICsraXQpCi0gICAgICAgIHZpc2l0b3ItPnZp
c2l0SGVhZGVyKGl0LT5maXJzdCwgaXQtPnNlY29uZCk7CisgICAgICAgIHZpc2l0b3ItPnZpc2l0
SGVhZGVyKGl0LT5rZXksIGl0LT52YWx1ZSk7CiB9CiAKIFdlYkhUVFBCb2R5IFdlYlVSTFJlcXVl
c3Q6Omh0dHBCb2R5KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2Nocm9taXVtL3N1cHBvcnQvV2ViVVJMUmVzcG9uc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJVUkxSZXNwb25zZS5jcHAKaW5kZXggOWRlM2MwMWEw
Y2E5ZDQzOGRhMGFhYTBjNjg5MzNkZThmMGI3MjkxMi4uMjg3NTk3OGM4ZDE4ZTA0MTMyZDU1ZDJj
ZDBmMDA5M2EwYjZlMGNhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vc3VwcG9ydC9XZWJVUkxSZXNwb25zZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJVUkxSZXNwb25zZS5jcHAKQEAgLTI2MSw3ICsyNjEs
NyBAQCB2b2lkIFdlYlVSTFJlc3BvbnNlOjphZGRIVFRQSGVhZGVyRmllbGQoY29uc3QgV2ViU3Ry
aW5nJiBuYW1lLCBjb25zdCBXZWJTdHJpbmcmCiAgICAgSFRUUEhlYWRlck1hcDo6QWRkUmVzdWx0
IHJlc3VsdCA9CiAgICAgICAgIGNvbnN0X2Nhc3Q8SFRUUEhlYWRlck1hcCo+KCZtYXApLT5hZGQo
bmFtZSwgdmFsdWVTdHIpOwogICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJl
c3VsdC5pdGVyYXRvci0+c2Vjb25kLmFwcGVuZCgiLCAiICsgdmFsdWVTdHIpOworICAgICAgICBy
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZCgiLCAiICsgdmFsdWVTdHIpOwogfQogCiB2b2lk
IFdlYlVSTFJlc3BvbnNlOjpjbGVhckhUVFBIZWFkZXJGaWVsZChjb25zdCBXZWJTdHJpbmcmIG5h
bWUpCkBAIC0yNzUsNyArMjc1LDcgQEAgdm9pZCBXZWJVUkxSZXNwb25zZTo6dmlzaXRIVFRQSGVh
ZGVyRmllbGRzKFdlYkhUVFBIZWFkZXJWaXNpdG9yKiB2aXNpdG9yKSBjb25zdAogewogICAgIGNv
bnN0IEhUVFBIZWFkZXJNYXAmIG1hcCA9IG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlc3BvbnNlLT5o
dHRwSGVhZGVyRmllbGRzKCk7CiAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG1hcC5iZWdpbigpOyBpdCAhPSBtYXAuZW5kKCk7ICsraXQpCi0gICAgICAgIHZpc2l0
b3ItPnZpc2l0SGVhZGVyKGl0LT5maXJzdCwgaXQtPnNlY29uZCk7CisgICAgICAgIHZpc2l0b3It
PnZpc2l0SGVhZGVyKGl0LT5rZXksIGl0LT52YWx1ZSk7CiB9CiAKIGRvdWJsZSBXZWJVUkxSZXNw
b25zZTo6bGFzdE1vZGlmaWVkRGF0ZSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5UmVmcmVzaE1vbml0b3IuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9yLmNwcAppbmRleCBj
NjdlN2EwNDgwYTc2NmIyMDA5ZTMwOTU0OTdlZjNhMTk0YzQ5NjYzLi5iMmM4YjJkYzAxYjU2NDQy
NDMzNWMyYmEzZDMzMTUzMzhkNmYwZGQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9EaXNwbGF5UmVmcmVzaE1vbml0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvci5jcHAKQEAgLTEzNiw4
ICsxMzYsOCBAQCBEaXNwbGF5UmVmcmVzaE1vbml0b3IqIERpc3BsYXlSZWZyZXNoTW9uaXRvck1h
bmFnZXI6OmVuc3VyZU1vbml0b3JGb3JDbGllbnQoRGlzcAogICAgICAgICBtX21vbml0b3JzLmFk
ZChjbGllbnQtPm1fZGlzcGxheUlELCBtb25pdG9yLnJlbGVhc2UoKSk7CiAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgfQotICAgIGl0LT5zZWNvbmQtPmFkZENsaWVudChjbGllbnQpOwotICAg
IHJldHVybiBpdC0+c2Vjb25kLmdldCgpOworICAgIGl0LT52YWx1ZS0+YWRkQ2xpZW50KGNsaWVu
dCk7CisgICAgcmV0dXJuIGl0LT52YWx1ZS5nZXQoKTsKIH0KIAogdm9pZCBEaXNwbGF5UmVmcmVz
aE1vbml0b3JNYW5hZ2VyOjpyZWdpc3RlckNsaWVudChEaXNwbGF5UmVmcmVzaE1vbml0b3JDbGll
bnQqIGNsaWVudCkKQEAgLTE1Nyw3ICsxNTcsNyBAQCB2b2lkIERpc3BsYXlSZWZyZXNoTW9uaXRv
ck1hbmFnZXI6OnVucmVnaXN0ZXJDbGllbnQoRGlzcGxheVJlZnJlc2hNb25pdG9yQ2xpZW50Kgog
ICAgIGlmIChpdCA9PSBtX21vbml0b3JzLmVuZCgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0g
ICAgRGlzcGxheVJlZnJlc2hNb25pdG9yKiBtb25pdG9yID0gaXQtPnNlY29uZC5nZXQoKTsKKyAg
ICBEaXNwbGF5UmVmcmVzaE1vbml0b3IqIG1vbml0b3IgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAg
aWYgKG1vbml0b3ItPnJlbW92ZUNsaWVudChjbGllbnQpKSB7CiAgICAgICAgIGlmICghbW9uaXRv
ci0+aGFzQ2xpZW50cygpKQogICAgICAgICAgICAgbV9tb25pdG9ycy5yZW1vdmUoaXQpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAKaW5kZXggNGVj
N2U0YWNjMDE4ZDFlN2RiYzIxZDZmNzAxMjc0MDVlOTJhMDhjMi4uZDA0MzY1YTQyMGRhZDg3YzFm
MTZiMTQ0NWJjOTg0Mjg3ODkyMmZjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250Q2FjaGUuY3BwCkBAIC0yMTAsNyArMjEwLDcgQEAgRm9udFBsYXRmb3JtRGF0
YSogRm9udENhY2hlOjpnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgZm8KICAgICAgICAgZ0ZvbnRQbGF0Zm9ybURhdGFDYWNoZS0+c2V0KGtleSwgcmVzdWx0
KTsKICAgICAgICAgZm91bmRSZXN1bHQgPSByZXN1bHQ7CiAgICAgfSBlbHNlIHsKLSAgICAgICAg
cmVzdWx0ID0gaXQtPnNlY29uZDsKKyAgICAgICAgcmVzdWx0ID0gaXQtPnZhbHVlOwogICAgICAg
ICBmb3VuZFJlc3VsdCA9IHRydWU7CiAgICAgfQogCkBAIC0yNDEsNyArMjQxLDcgQEAgT3BlblR5
cGVWZXJ0aWNhbERhdGEqIEZvbnRDYWNoZTo6Z2V0VmVydGljYWxEYXRhKGNvbnN0IEZvbnRGaWxl
S2V5JiBrZXksIGNvbnN0IEYKICAgICBGb250VmVydGljYWxEYXRhQ2FjaGUmIGZvbnRWZXJ0aWNh
bERhdGFDYWNoZSA9IGZvbnRWZXJ0aWNhbERhdGFDYWNoZUluc3RhbmNlKCk7CiAgICAgRm9udFZl
cnRpY2FsRGF0YUNhY2hlOjppdGVyYXRvciByZXN1bHQgPSBmb250VmVydGljYWxEYXRhQ2FjaGUu
ZmluZChrZXkpOwogICAgIGlmIChyZXN1bHQgIT0gZm9udFZlcnRpY2FsRGF0YUNhY2hlLmVuZCgp
KQotICAgICAgICByZXR1cm4gcmVzdWx0LmdldCgpLT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIHJl
dHVybiByZXN1bHQuZ2V0KCktPnZhbHVlLmdldCgpOwogCiAgICAgT3BlblR5cGVWZXJ0aWNhbERh
dGEqIHZlcnRpY2FsRGF0YSA9IG5ldyBPcGVuVHlwZVZlcnRpY2FsRGF0YShwbGF0Zm9ybURhdGEp
OwogICAgIGlmICghdmVydGljYWxEYXRhLT5pc09wZW5UeXBlKCkpIHsKQEAgLTMzMSwyMCArMzMx
LDIwIEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9u
dERhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSoKICAgICAgICAgcmV0dXJuIG5ld1ZhbHVlLmZp
cnN0LnJlbGVhc2UoKTsKICAgICB9CiAKLSAgICBpZiAoIXJlc3VsdC5nZXQoKS0+c2Vjb25kLnNl
Y29uZCkgewotICAgICAgICBBU1NFUlQoZ0luYWN0aXZlRm9udERhdGEtPmNvbnRhaW5zKHJlc3Vs
dC5nZXQoKS0+c2Vjb25kLmZpcnN0KSk7Ci0gICAgICAgIGdJbmFjdGl2ZUZvbnREYXRhLT5yZW1v
dmUocmVzdWx0LmdldCgpLT5zZWNvbmQuZmlyc3QpOworICAgIGlmICghcmVzdWx0LmdldCgpLT52
YWx1ZS5zZWNvbmQpIHsKKyAgICAgICAgQVNTRVJUKGdJbmFjdGl2ZUZvbnREYXRhLT5jb250YWlu
cyhyZXN1bHQuZ2V0KCktPnZhbHVlLmZpcnN0KSk7CisgICAgICAgIGdJbmFjdGl2ZUZvbnREYXRh
LT5yZW1vdmUocmVzdWx0LmdldCgpLT52YWx1ZS5maXJzdCk7CiAgICAgfQogCiAgICAgaWYgKHNo
b3VsZFJldGFpbiA9PSBSZXRhaW4pCi0gICAgICAgIHJlc3VsdC5nZXQoKS0+c2Vjb25kLnNlY29u
ZCsrOwotICAgIGVsc2UgaWYgKCFyZXN1bHQuZ2V0KCktPnNlY29uZC5zZWNvbmQpIHsKKyAgICAg
ICAgcmVzdWx0LmdldCgpLT52YWx1ZS5zZWNvbmQrKzsKKyAgICBlbHNlIGlmICghcmVzdWx0Lmdl
dCgpLT52YWx1ZS5zZWNvbmQpIHsKICAgICAgICAgLy8gSWYgc2hvdWxkUmV0YWluIGlzIERvTm90
UmV0YWluIGFuZCBjb3VudCBpcyAwLCB3ZSB3YW50IHRvIHJlbW92ZSB0aGUgZm9udERhdGEgZnJv
bSAKICAgICAgICAgLy8gZ0luYWN0aXZlRm9udERhdGEgKGFib3ZlKSBhbmQgcmUtYWRkIGhlcmUg
dG8gdXBkYXRlIExSVSBwb3NpdGlvbi4KLSAgICAgICAgZ0luYWN0aXZlRm9udERhdGEtPmFkZChy
ZXN1bHQuZ2V0KCktPnNlY29uZC5maXJzdCk7CisgICAgICAgIGdJbmFjdGl2ZUZvbnREYXRhLT5h
ZGQocmVzdWx0LmdldCgpLT52YWx1ZS5maXJzdCk7CiAgICAgfQogCi0gICAgcmV0dXJuIHJlc3Vs
dC5nZXQoKS0+c2Vjb25kLmZpcnN0OworICAgIHJldHVybiByZXN1bHQuZ2V0KCktPnZhbHVlLmZp
cnN0OwogfQogCiBTaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXROb25SZXRhaW5lZExhc3RS
ZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24p
CkBAIC0zNjAsOSArMzYwLDkgQEAgdm9pZCBGb250Q2FjaGU6OnJlbGVhc2VGb250RGF0YShjb25z
dCBTaW1wbGVGb250RGF0YSogZm9udERhdGEpCiAgICAgRm9udERhdGFDYWNoZTo6aXRlcmF0b3Ig
aXQgPSBnRm9udERhdGFDYWNoZS0+ZmluZChmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkpOwogICAg
IEFTU0VSVChpdCAhPSBnRm9udERhdGFDYWNoZS0+ZW5kKCkpOwogCi0gICAgQVNTRVJUKGl0LT5z
ZWNvbmQuc2Vjb25kKTsKLSAgICBpZiAoIS0taXQtPnNlY29uZC5zZWNvbmQpCi0gICAgICAgIGdJ
bmFjdGl2ZUZvbnREYXRhLT5hZGQoaXQtPnNlY29uZC5maXJzdCk7CisgICAgQVNTRVJUKGl0LT52
YWx1ZS5zZWNvbmQpOworICAgIGlmICghLS1pdC0+dmFsdWUuc2Vjb25kKQorICAgICAgICBnSW5h
Y3RpdmVGb250RGF0YS0+YWRkKGl0LT52YWx1ZS5maXJzdCk7CiB9CiAKIHZvaWQgRm9udENhY2hl
OjpwdXJnZUluYWN0aXZlRm9udERhdGFJZk5lZWRlZCgpCkBAIC00MDcsOCArNDA3LDggQEAgdm9p
ZCBGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YShpbnQgY291bnQpCiAgICAgICAgIGtl
eXNUb1JlbW92ZS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGdGb250UGxhdGZvcm1EYXRhQ2FjaGUt
PnNpemUoKSk7CiAgICAgICAgIEZvbnRQbGF0Zm9ybURhdGFDYWNoZTo6aXRlcmF0b3IgcGxhdGZv
cm1EYXRhRW5kID0gZ0ZvbnRQbGF0Zm9ybURhdGFDYWNoZS0+ZW5kKCk7CiAgICAgICAgIGZvciAo
Rm9udFBsYXRmb3JtRGF0YUNhY2hlOjppdGVyYXRvciBwbGF0Zm9ybURhdGEgPSBnRm9udFBsYXRm
b3JtRGF0YUNhY2hlLT5iZWdpbigpOyBwbGF0Zm9ybURhdGEgIT0gcGxhdGZvcm1EYXRhRW5kOyAr
K3BsYXRmb3JtRGF0YSkgewotICAgICAgICAgICAgaWYgKHBsYXRmb3JtRGF0YS0+c2Vjb25kICYm
ICFnRm9udERhdGFDYWNoZS0+Y29udGFpbnMoKnBsYXRmb3JtRGF0YS0+c2Vjb25kKSkKLSAgICAg
ICAgICAgICAgICBrZXlzVG9SZW1vdmUuYXBwZW5kKHBsYXRmb3JtRGF0YS0+Zmlyc3QpOworICAg
ICAgICAgICAgaWYgKHBsYXRmb3JtRGF0YS0+dmFsdWUgJiYgIWdGb250RGF0YUNhY2hlLT5jb250
YWlucygqcGxhdGZvcm1EYXRhLT52YWx1ZSkpCisgICAgICAgICAgICAgICAga2V5c1RvUmVtb3Zl
LmFwcGVuZChwbGF0Zm9ybURhdGEtPmtleSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAg
IHNpemVfdCBrZXlzVG9SZW1vdmVDb3VudCA9IGtleXNUb1JlbW92ZS5zaXplKCk7CkBAIC00MjIs
MjAgKzQyMiwyMCBAQCB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhKGludCBj
b3VudCkKICAgICAgICAgLy8gTWFyayAmIHN3ZWVwIHVudXNlZCB2ZXJ0aWNhbERhdGEKICAgICAg
ICAgRm9udFZlcnRpY2FsRGF0YUNhY2hlOjppdGVyYXRvciB2ZXJ0aWNhbERhdGFFbmQgPSBmb250
VmVydGljYWxEYXRhQ2FjaGUuZW5kKCk7CiAgICAgICAgIGZvciAoRm9udFZlcnRpY2FsRGF0YUNh
Y2hlOjppdGVyYXRvciB2ZXJ0aWNhbERhdGEgPSBmb250VmVydGljYWxEYXRhQ2FjaGUuYmVnaW4o
KTsgdmVydGljYWxEYXRhICE9IHZlcnRpY2FsRGF0YUVuZDsgKyt2ZXJ0aWNhbERhdGEpIHsKLSAg
ICAgICAgICAgIGlmICh2ZXJ0aWNhbERhdGEtPnNlY29uZCkKLSAgICAgICAgICAgICAgICB2ZXJ0
aWNhbERhdGEtPnNlY29uZC0+bV9pbkZvbnRDYWNoZSA9IGZhbHNlOworICAgICAgICAgICAgaWYg
KHZlcnRpY2FsRGF0YS0+dmFsdWUpCisgICAgICAgICAgICAgICAgdmVydGljYWxEYXRhLT52YWx1
ZS0+bV9pbkZvbnRDYWNoZSA9IGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIEZvbnREYXRhQ2Fj
aGU6Oml0ZXJhdG9yIGZvbnREYXRhRW5kID0gZ0ZvbnREYXRhQ2FjaGUtPmVuZCgpOwogICAgICAg
ICBmb3IgKEZvbnREYXRhQ2FjaGU6Oml0ZXJhdG9yIGZvbnREYXRhID0gZ0ZvbnREYXRhQ2FjaGUt
PmJlZ2luKCk7IGZvbnREYXRhICE9IGZvbnREYXRhRW5kOyArK2ZvbnREYXRhKSB7Ci0gICAgICAg
ICAgICBPcGVuVHlwZVZlcnRpY2FsRGF0YSogdmVydGljYWxEYXRhID0gY29uc3RfY2FzdDxPcGVu
VHlwZVZlcnRpY2FsRGF0YSo+KGZvbnREYXRhLT5zZWNvbmQuZmlyc3QtPnZlcnRpY2FsRGF0YSgp
KTsKKyAgICAgICAgICAgIE9wZW5UeXBlVmVydGljYWxEYXRhKiB2ZXJ0aWNhbERhdGEgPSBjb25z
dF9jYXN0PE9wZW5UeXBlVmVydGljYWxEYXRhKj4oZm9udERhdGEtPnZhbHVlLmZpcnN0LT52ZXJ0
aWNhbERhdGEoKSk7CiAgICAgICAgICAgICBpZiAodmVydGljYWxEYXRhKQogICAgICAgICAgICAg
ICAgIHZlcnRpY2FsRGF0YS0+bV9pbkZvbnRDYWNoZSA9IHRydWU7CiAgICAgICAgIH0KICAgICAg
ICAgVmVjdG9yPEZvbnRGaWxlS2V5PiBrZXlzVG9SZW1vdmU7CiAgICAgICAgIGtleXNUb1JlbW92
ZS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGZvbnRWZXJ0aWNhbERhdGFDYWNoZS5zaXplKCkpOwog
ICAgICAgICBmb3IgKEZvbnRWZXJ0aWNhbERhdGFDYWNoZTo6aXRlcmF0b3IgdmVydGljYWxEYXRh
ID0gZm9udFZlcnRpY2FsRGF0YUNhY2hlLmJlZ2luKCk7IHZlcnRpY2FsRGF0YSAhPSB2ZXJ0aWNh
bERhdGFFbmQ7ICsrdmVydGljYWxEYXRhKSB7Ci0gICAgICAgICAgICBpZiAoIXZlcnRpY2FsRGF0
YS0+c2Vjb25kIHx8ICF2ZXJ0aWNhbERhdGEtPnNlY29uZC0+bV9pbkZvbnRDYWNoZSkKLSAgICAg
ICAgICAgICAgICBrZXlzVG9SZW1vdmUuYXBwZW5kKHZlcnRpY2FsRGF0YS0+Zmlyc3QpOworICAg
ICAgICAgICAgaWYgKCF2ZXJ0aWNhbERhdGEtPnZhbHVlIHx8ICF2ZXJ0aWNhbERhdGEtPnZhbHVl
LT5tX2luRm9udENhY2hlKQorICAgICAgICAgICAgICAgIGtleXNUb1JlbW92ZS5hcHBlbmQodmVy
dGljYWxEYXRhLT5rZXkpOwogICAgICAgICB9CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwLCBj
b3VudCA9IGtleXNUb1JlbW92ZS5zaXplKCk7IGkgPCBjb3VudDsgKytpKQogICAgICAgICAgICAg
Zm9udFZlcnRpY2FsRGF0YUNhY2hlLnRha2Uoa2V5c1RvUmVtb3ZlW2ldKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZVRyZWVOb2RlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZVRyZWVOb2RlLmNwcApp
bmRleCA4NDZiNTQ0MmFlZTE0MmYyZmY2YWRlNDhkNTQ5MDI4YTRmMDQxMTAyLi5iOGY1YzNkN2Zj
MzNjZDU4ZDAwODRhMmRlMGE1N2ZjZmQwZWU2N2U4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2VUcmVlTm9kZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlVHJlZU5vZGUuY3BwCkBAIC03NSw3ICs3
NSw3IEBAIHNpemVfdCBHbHlwaFBhZ2VUcmVlTm9kZTo6dHJlZUdseXBoUGFnZUNvdW50KCkKICAg
ICBpZiAocm9vdHMpIHsKICAgICAgICAgSGFzaE1hcDxpbnQsIEdseXBoUGFnZVRyZWVOb2RlKj46
Oml0ZXJhdG9yIGVuZCA9IHJvb3RzLT5lbmQoKTsKICAgICAgICAgZm9yIChIYXNoTWFwPGludCwg
R2x5cGhQYWdlVHJlZU5vZGUqPjo6aXRlcmF0b3IgaXQgPSByb290cy0+YmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KQotICAgICAgICAgICAgY291bnQgKz0gaXQtPnNlY29uZC0+cGFnZUNvdW50KCk7
CisgICAgICAgICAgICBjb3VudCArPSBpdC0+dmFsdWUtPnBhZ2VDb3VudCgpOwogICAgIH0KICAg
ICAKICAgICBpZiAocGFnZVplcm9Sb290KQpAQCAtODksNyArODksNyBAQCBzaXplX3QgR2x5cGhQ
YWdlVHJlZU5vZGU6OnBhZ2VDb3VudCgpIGNvbnN0CiAgICAgc2l6ZV90IGNvdW50ID0gbV9wYWdl
ICYmIG1fcGFnZS0+b3duZXIoKSA9PSB0aGlzID8gMSA6IDA7CiAgICAgSGFzaE1hcDxjb25zdCBG
b250RGF0YSosIEdseXBoUGFnZVRyZWVOb2RlKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fY2hp
bGRyZW4uZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPGNvbnN0IEZvbnREYXRhKiwgR2x5cGhQYWdl
VHJlZU5vZGUqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2NoaWxkcmVuLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkKLSAgICAgICAgY291bnQgKz0gaXQtPnNlY29uZC0+cGFnZUNvdW50KCk7Cisg
ICAgICAgIGNvdW50ICs9IGl0LT52YWx1ZS0+cGFnZUNvdW50KCk7CiAKICAgICByZXR1cm4gY291
bnQ7CiB9CkBAIC0xMDAsNyArMTAwLDcgQEAgdm9pZCBHbHlwaFBhZ2VUcmVlTm9kZTo6cHJ1bmVU
cmVlQ3VzdG9tRm9udERhdGEoY29uc3QgRm9udERhdGEqIGZvbnREYXRhKQogICAgIGlmIChyb290
cykgewogICAgICAgICBIYXNoTWFwPGludCwgR2x5cGhQYWdlVHJlZU5vZGUqPjo6aXRlcmF0b3Ig
ZW5kID0gcm9vdHMtPmVuZCgpOwogICAgICAgICBmb3IgKEhhc2hNYXA8aW50LCBHbHlwaFBhZ2VU
cmVlTm9kZSo+OjppdGVyYXRvciBpdCA9IHJvb3RzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLT5wcnVuZUN1c3RvbUZvbnREYXRhKGZvbnREYXRhKTsK
KyAgICAgICAgICAgIGl0LT52YWx1ZS0+cHJ1bmVDdXN0b21Gb250RGF0YShmb250RGF0YSk7CiAg
ICAgfQogICAgIAogICAgIGlmIChwYWdlWmVyb1Jvb3QpCkBAIC0xMTIsNyArMTEyLDcgQEAgdm9p
ZCBHbHlwaFBhZ2VUcmVlTm9kZTo6cHJ1bmVUcmVlRm9udERhdGEoY29uc3QgU2ltcGxlRm9udERh
dGEqIGZvbnREYXRhKQogICAgIGlmIChyb290cykgewogICAgICAgICBIYXNoTWFwPGludCwgR2x5
cGhQYWdlVHJlZU5vZGUqPjo6aXRlcmF0b3IgZW5kID0gcm9vdHMtPmVuZCgpOwogICAgICAgICBm
b3IgKEhhc2hNYXA8aW50LCBHbHlwaFBhZ2VUcmVlTm9kZSo+OjppdGVyYXRvciBpdCA9IHJvb3Rz
LT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBpdC0+c2Vjb25kLT5wcnVu
ZUZvbnREYXRhKGZvbnREYXRhKTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+cHJ1bmVGb250RGF0
YShmb250RGF0YSk7CiAgICAgfQogICAgIAogICAgIGlmIChwYWdlWmVyb1Jvb3QpCkBAIC0zNjgs
NyArMzY4LDcgQEAgdm9pZCBHbHlwaFBhZ2VUcmVlTm9kZTo6cHJ1bmVDdXN0b21Gb250RGF0YShj
b25zdCBGb250RGF0YSogZm9udERhdGEpCiAgICAgICAgIHJldHVybjsKICAgICBIYXNoTWFwPGNv
bnN0IEZvbnREYXRhKiwgR2x5cGhQYWdlVHJlZU5vZGUqPjo6aXRlcmF0b3IgZW5kID0gbV9jaGls
ZHJlbi5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8Y29uc3QgRm9udERhdGEqLCBHbHlwaFBhZ2VU
cmVlTm9kZSo+OjppdGVyYXRvciBpdCA9IG1fY2hpbGRyZW4uYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5wcnVuZUN1c3RvbUZvbnREYXRhKGZvbnREYXRhKTsK
KyAgICAgICAgaXQtPnZhbHVlLT5wcnVuZUN1c3RvbUZvbnREYXRhKGZvbnREYXRhKTsKIH0KIAog
dm9pZCBHbHlwaFBhZ2VUcmVlTm9kZTo6cHJ1bmVGb250RGF0YShjb25zdCBTaW1wbGVGb250RGF0
YSogZm9udERhdGEsIHVuc2lnbmVkIGxldmVsKQpAQCAtMzgyLDcgKzM4Miw3IEBAIHZvaWQgR2x5
cGhQYWdlVHJlZU5vZGU6OnBydW5lRm9udERhdGEoY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnRE
YXRhLCB1bnNpZ25lZCBsCiAgICAgLy8gUHJ1bmUgYW55IGJyYW5jaCB0aGF0IGNvbnRhaW5zIHRo
aXMgRm9udERhdGEuCiAgICAgSGFzaE1hcDxjb25zdCBGb250RGF0YSosIEdseXBoUGFnZVRyZWVO
b2RlKj46Oml0ZXJhdG9yIGNoaWxkID0gbV9jaGlsZHJlbi5maW5kKGZvbnREYXRhKTsKICAgICBp
ZiAoY2hpbGQgIT0gbV9jaGlsZHJlbi5lbmQoKSkgewotICAgICAgICBHbHlwaFBhZ2VUcmVlTm9k
ZSogbm9kZSA9IGNoaWxkLT5zZWNvbmQ7CisgICAgICAgIEdseXBoUGFnZVRyZWVOb2RlKiBub2Rl
ID0gY2hpbGQtPnZhbHVlOwogICAgICAgICBtX2NoaWxkcmVuLnJlbW92ZShmb250RGF0YSk7CiAg
ICAgICAgIHVuc2lnbmVkIGN1c3RvbUZvbnRDb3VudCA9IG5vZGUtPm1fY3VzdG9tRm9udENvdW50
OwogICAgICAgICBkZWxldGUgbm9kZTsKQEAgLTM5OCw3ICszOTgsNyBAQCB2b2lkIEdseXBoUGFn
ZVRyZWVOb2RlOjpwcnVuZUZvbnREYXRhKGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwg
dW5zaWduZWQgbAogCiAgICAgSGFzaE1hcDxjb25zdCBGb250RGF0YSosIEdseXBoUGFnZVRyZWVO
b2RlKj46Oml0ZXJhdG9yIGVuZCA9IG1fY2hpbGRyZW4uZW5kKCk7CiAgICAgZm9yIChIYXNoTWFw
PGNvbnN0IEZvbnREYXRhKiwgR2x5cGhQYWdlVHJlZU5vZGUqPjo6aXRlcmF0b3IgaXQgPSBtX2No
aWxkcmVuLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+cHJ1
bmVGb250RGF0YShmb250RGF0YSwgbGV2ZWwpOworICAgICAgICBpdC0+dmFsdWUtPnBydW5lRm9u
dERhdGEoZm9udERhdGEsIGxldmVsKTsKIH0KIAogI2lmbmRlZiBOREVCVUcKQEAgLTQxMCw4ICs0
MTAsOCBAQCB2b2lkIEdseXBoUGFnZVRyZWVOb2RlOjpwcnVuZUZvbnREYXRhKGNvbnN0IFNpbXBs
ZUZvbnREYXRhKiBmb250RGF0YSwgdW5zaWduZWQgbAogCiAgICAgICAgIEhhc2hNYXA8Y29uc3Qg
Rm9udERhdGEqLCBHbHlwaFBhZ2VUcmVlTm9kZSo+OjppdGVyYXRvciBlbmQgPSBtX2NoaWxkcmVu
LmVuZCgpOwogICAgICAgICBmb3IgKEhhc2hNYXA8Y29uc3QgRm9udERhdGEqLCBHbHlwaFBhZ2VU
cmVlTm9kZSo+OjppdGVyYXRvciBpdCA9IG1fY2hpbGRyZW4uYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7Ci0gICAgICAgICAgICBwcmludGYoIiVzXHQlcCAlc1xuIiwgaW5kZW50LmRhdGEoKSwg
aXQtPmZpcnN0LCBpdC0+Zmlyc3QtPmRlc2NyaXB0aW9uKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAg
ICAgICAgICBpdC0+c2Vjb25kLT5zaG93U3VidHJlZSgpOworICAgICAgICAgICAgcHJpbnRmKCIl
c1x0JXAgJXNcbiIsIGluZGVudC5kYXRhKCksIGl0LT5rZXksIGl0LT5rZXktPmRlc2NyaXB0aW9u
KCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBpdC0+dmFsdWUtPnNob3dTdWJ0cmVlKCk7
CiAgICAgICAgIH0KICAgICAgICAgaWYgKG1fc3lzdGVtRmFsbGJhY2tDaGlsZCkgewogICAgICAg
ICAgICAgcHJpbnRmKCIlc1x0KiBmYWxsYmFja1xuIiwgaW5kZW50LmRhdGEoKSk7CkBAIC00Mjks
OCArNDI5LDggQEAgdm9pZCBzaG93R2x5cGhQYWdlVHJlZXMoKQogICAgIHNob3dHbHlwaFBhZ2VU
cmVlKDApOwogICAgIEhhc2hNYXA8aW50LCBXZWJDb3JlOjpHbHlwaFBhZ2VUcmVlTm9kZSo+Ojpp
dGVyYXRvciBlbmQgPSBXZWJDb3JlOjpHbHlwaFBhZ2VUcmVlTm9kZTo6cm9vdHMtPmVuZCgpOwog
ICAgIGZvciAoSGFzaE1hcDxpbnQsIFdlYkNvcmU6OkdseXBoUGFnZVRyZWVOb2RlKj46Oml0ZXJh
dG9yIGl0ID0gV2ViQ29yZTo6R2x5cGhQYWdlVHJlZU5vZGU6OnJvb3RzLT5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKLSAgICAgICAgcHJpbnRmKCJcblBhZ2UgJWQ6XG4iLCBpdC0+Zmlyc3Qp
OwotICAgICAgICBzaG93R2x5cGhQYWdlVHJlZShpdC0+Zmlyc3QpOworICAgICAgICBwcmludGYo
IlxuUGFnZSAlZDpcbiIsIGl0LT5rZXkpOworICAgICAgICBzaG93R2x5cGhQYWdlVHJlZShpdC0+
a2V5KTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlLmNwcAppbmRleCBhNzkzMDMwMDA3NGM5NjQwYTM5MmI5
ZTViYjUxZTA1OWE2MmJmYjQzLi5jNTY0ZGJlZDA2ZDhkOTI3YTcxNWQyMzZkNzc0OGRlN2FkZTAy
YzU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJh
Y2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGls
ZWRCYWNraW5nU3RvcmUuY3BwCkBAIC0xMTYsOSArMTE2LDkgQEAgdm9pZCBUaWxlZEJhY2tpbmdT
dG9yZTo6dXBkYXRlVGlsZUJ1ZmZlcnMoKQogICAgIFZlY3RvcjxSZWZQdHI8VGlsZT4gPiBkaXJ0
eVRpbGVzOwogICAgIFRpbGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fdGlsZXMuZW5kKCk7CiAgICAg
Zm9yIChUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7Ci0gICAgICAgIGlmICghaXQtPnNlY29uZC0+aXNEaXJ0eSgpKQorICAgICAgICBpZiAo
IWl0LT52YWx1ZS0+aXNEaXJ0eSgpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGRp
cnR5VGlsZXMuYXBwZW5kKGl0LT5zZWNvbmQpOworICAgICAgICBkaXJ0eVRpbGVzLmFwcGVuZChp
dC0+dmFsdWUpOwogICAgIH0KIAogICAgIGlmIChkaXJ0eVRpbGVzLmlzRW1wdHkoKSkgewpAQCAt
NDAyLDEzICs0MDIsMTMgQEAgYm9vbCBUaWxlZEJhY2tpbmdTdG9yZTo6cmVzaXplRWRnZVRpbGVz
KCkKICAgICBWZWN0b3I8VGlsZTo6Q29vcmRpbmF0ZT4gdGlsZXNUb1JlbW92ZTsKICAgICBUaWxl
TWFwOjppdGVyYXRvciBlbmQgPSBtX3RpbGVzLmVuZCgpOwogICAgIGZvciAoVGlsZU1hcDo6aXRl
cmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBU
aWxlOjpDb29yZGluYXRlIHRpbGVDb29yZGluYXRlID0gaXQtPnNlY29uZC0+Y29vcmRpbmF0ZSgp
OwotICAgICAgICBJbnRSZWN0IHRpbGVSZWN0ID0gaXQtPnNlY29uZC0+cmVjdCgpOworICAgICAg
ICBUaWxlOjpDb29yZGluYXRlIHRpbGVDb29yZGluYXRlID0gaXQtPnZhbHVlLT5jb29yZGluYXRl
KCk7CisgICAgICAgIEludFJlY3QgdGlsZVJlY3QgPSBpdC0+dmFsdWUtPnJlY3QoKTsKICAgICAg
ICAgSW50UmVjdCBleHBlY3RlZFRpbGVSZWN0ID0gdGlsZVJlY3RGb3JDb29yZGluYXRlKHRpbGVD
b29yZGluYXRlKTsKICAgICAgICAgaWYgKGV4cGVjdGVkVGlsZVJlY3QuaXNFbXB0eSgpKQogICAg
ICAgICAgICAgdGlsZXNUb1JlbW92ZS5hcHBlbmQodGlsZUNvb3JkaW5hdGUpOwogICAgICAgICBl
bHNlIGlmIChleHBlY3RlZFRpbGVSZWN0ICE9IHRpbGVSZWN0KSB7Ci0gICAgICAgICAgICBpdC0+
c2Vjb25kLT5yZXNpemUoZXhwZWN0ZWRUaWxlUmVjdC5zaXplKCkpOworICAgICAgICAgICAgaXQt
PnZhbHVlLT5yZXNpemUoZXhwZWN0ZWRUaWxlUmVjdC5zaXplKCkpOwogICAgICAgICAgICAgd2Fz
UmVzaXplZCA9IHRydWU7CiAgICAgICAgIH0KICAgICB9CkBAIC00MjcsOCArNDI3LDggQEAgdm9p
ZCBUaWxlZEJhY2tpbmdTdG9yZTo6c2V0S2VlcFJlY3QoY29uc3QgSW50UmVjdCYga2VlcFJlY3Qp
CiAgICAgVmVjdG9yPFRpbGU6OkNvb3JkaW5hdGU+IHRvUmVtb3ZlOwogICAgIFRpbGVNYXA6Oml0
ZXJhdG9yIGVuZCA9IG1fdGlsZXMuZW5kKCk7CiAgICAgZm9yIChUaWxlTWFwOjppdGVyYXRvciBp
dCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFRpbGU6OkNv
b3JkaW5hdGUgY29vcmRpbmF0ZSA9IGl0LT5zZWNvbmQtPmNvb3JkaW5hdGUoKTsKLSAgICAgICAg
RmxvYXRSZWN0IHRpbGVSZWN0ID0gaXQtPnNlY29uZC0+cmVjdCgpOworICAgICAgICBUaWxlOjpD
b29yZGluYXRlIGNvb3JkaW5hdGUgPSBpdC0+dmFsdWUtPmNvb3JkaW5hdGUoKTsKKyAgICAgICAg
RmxvYXRSZWN0IHRpbGVSZWN0ID0gaXQtPnZhbHVlLT5yZWN0KCk7CiAgICAgICAgIGlmICghdGls
ZVJlY3QuaW50ZXJzZWN0cyhrZWVwUmVjdEYpKQogICAgICAgICAgICAgdG9SZW1vdmUuYXBwZW5k
KGNvb3JkaW5hdGUpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9jZi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25D
Ri5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vY2Yv
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0YuY3BwCmluZGV4IDgxZDg2Mjk4MTUyOWRj
YjVlNGFiMmQwYzAwNjY3MmRlNzZhODgyZjEuLjc4Y2FjNjcyZTQxOGMxNTkwMzNjMGExZmY4OGRm
ZjJkNmExMTk1NzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2F2Zm91bmRhdGlvbi9jZi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25DRi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL2NmL01lZGlh
UGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGLmNwcApAQCAtOTE1LDcgKzkxNSw3IEBAIEFWRldy
YXBwZXIqIEFWRldyYXBwZXI6OmF2ZldyYXBwZXJGb3JDYWxsYmFja0NvbnRleHQodm9pZCogY29u
dGV4dCkKICAgICBpZiAoaXQgPT0gbWFwKCkuZW5kKCkpCiAgICAgICAgIHJldHVybiAwOwogCi0g
ICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgcmV0dXJuIGl0LT52YWx1ZTsKIH0KIAogdm9pZCBB
VkZXcmFwcGVyOjpzY2hlZHVsZURpc2Nvbm5lY3RBbmREZWxldGUoKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclRpbGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJUaWxlci5j
cHAKaW5kZXggODNlYWNhY2MwOGVmYjgwZjNkZjliZmY1MjhmOGRjMjM1NDZkMmQ2ZS4uY2QyODAx
ZTJkNWQ1NTZiMGI4NTFkNDhhZGM0NGQwYjdhYzViNzUwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclRpbGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyVGlsZXIuY3Bw
CkBAIC0zNzAsOCArMzcwLDggQEAgdm9pZCBMYXllclRpbGVyOjpsYXllclZpc2liaWxpdHlDaGFu
Z2VkKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqLCBib29sIHZpc2libGUpCiAgICAgfQogCiAgICAg
Zm9yIChUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0gbV90aWxl
cy5lbmQoKTsgKytpdCkgewotICAgICAgICBUaWxlSW5kZXggaW5kZXggPSAoKml0KS5maXJzdDsK
LSAgICAgICAgTGF5ZXJUaWxlKiB0aWxlID0gKCppdCkuc2Vjb25kOworICAgICAgICBUaWxlSW5k
ZXggaW5kZXggPSAoKml0KS5rZXk7CisgICAgICAgIExheWVyVGlsZSogdGlsZSA9ICgqaXQpLnZh
bHVlOwogICAgICAgICB0aWxlLT5zZXRWaXNpYmxlKGZhbHNlKTsKICAgICB9CiB9CkBAIC0zODUs
MjEgKzM4NSwyMSBAQCB2b2lkIExheWVyVGlsZXI6OnVwbG9hZFRleHR1cmVzSWZOZWVkZWQoTGF5
ZXJDb21wb3NpdGluZ1RocmVhZCopCiAKICAgICBUaWxlSm9ic01hcDo6Y29uc3RfaXRlcmF0b3Ig
dGlsZUpvYnNJdGVyRW5kID0gdGlsZUpvYnNNYXAuZW5kKCk7CiAgICAgZm9yIChUaWxlSm9ic01h
cDo6Y29uc3RfaXRlcmF0b3IgdGlsZUpvYnNJdGVyID0gdGlsZUpvYnNNYXAuYmVnaW4oKTsgdGls
ZUpvYnNJdGVyICE9IHRpbGVKb2JzSXRlckVuZDsgKyt0aWxlSm9ic0l0ZXIpIHsKLSAgICAgICAg
SW50UG9pbnQgb3JpZ2luID0gb3JpZ2luT2ZUaWxlKHRpbGVKb2JzSXRlci0+Zmlyc3QpOworICAg
ICAgICBJbnRQb2ludCBvcmlnaW4gPSBvcmlnaW5PZlRpbGUodGlsZUpvYnNJdGVyLT5rZXkpOwog
Ci0gICAgICAgIExheWVyVGlsZSogdGlsZSA9IG1fdGlsZXMuZ2V0KHRpbGVKb2JzSXRlci0+Zmly
c3QpOworICAgICAgICBMYXllclRpbGUqIHRpbGUgPSBtX3RpbGVzLmdldCh0aWxlSm9ic0l0ZXIt
PmtleSk7CiAgICAgICAgIGlmICghdGlsZSkgewogICAgICAgICAgICAgaWYgKG9yaWdpbi54KCkg
Pj0gbV9yZXF1aXJlZFRleHR1cmVTaXplLndpZHRoKCkgfHwgb3JpZ2luLnkoKSA+PSBtX3JlcXVp
cmVkVGV4dHVyZVNpemUuaGVpZ2h0KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICB0aWxlID0gbmV3IExheWVyVGlsZSgpOwotICAgICAgICAgICAgbV90aWxlcy5hZGQo
dGlsZUpvYnNJdGVyLT5maXJzdCwgdGlsZSk7CisgICAgICAgICAgICBtX3RpbGVzLmFkZCh0aWxl
Sm9ic0l0ZXItPmtleSwgdGlsZSk7CiAgICAgICAgIH0KIAogICAgICAgICBJbnRSZWN0IHRpbGVS
ZWN0KG9yaWdpbiwgdGlsZVNpemUoKSk7CiAgICAgICAgIHRpbGVSZWN0LnNldFdpZHRoKG1pbiht
X3JlcXVpcmVkVGV4dHVyZVNpemUud2lkdGgoKSAtIHRpbGVSZWN0LngoKSwgdGlsZVJlY3Qud2lk
dGgoKSkpOwogICAgICAgICB0aWxlUmVjdC5zZXRIZWlnaHQobWluKG1fcmVxdWlyZWRUZXh0dXJl
U2l6ZS5oZWlnaHQoKSAtIHRpbGVSZWN0LnkoKSwgdGlsZVJlY3QuaGVpZ2h0KCkpKTsKIAotICAg
ICAgICBwZXJmb3JtVGlsZUpvYih0aWxlLCAqdGlsZUpvYnNJdGVyLT5zZWNvbmQsIHRpbGVSZWN0
KTsKKyAgICAgICAgcGVyZm9ybVRpbGVKb2IodGlsZSwgKnRpbGVKb2JzSXRlci0+dmFsdWUsIHRp
bGVSZWN0KTsKICAgICB9CiAKICAgICBtX3RleHR1cmVKb2JzLmNsZWFyKCk7CkBAIC00NDIsMTEg
KzQ0MiwxMSBAQCB2b2lkIExheWVyVGlsZXI6OmFkZFRpbGVKb2IoY29uc3QgVGlsZUluZGV4JiBp
bmRleCwgY29uc3QgVGV4dHVyZUpvYiYgam9iLCBUaWxlSgogICAgICAgICByZXR1cm47CiAKICAg
ICAvLyBJbiB0aGlzIGNhc2Ugd2UgbGVhdmUgdGhlIHByZXZpb3VzIGpvYi4KLSAgICBpZiAoam9i
Lm1fdHlwZSA9PSBUZXh0dXJlSm9iOjpEaXJ0eUNvbnRlbnRzICYmIHJlc3VsdC5pdGVyYXRvci0+
c2Vjb25kLT5tX3R5cGUgPT0gVGV4dHVyZUpvYjo6RGlzY2FyZENvbnRlbnRzKQorICAgIGlmIChq
b2IubV90eXBlID09IFRleHR1cmVKb2I6OkRpcnR5Q29udGVudHMgJiYgcmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZS0+bV90eXBlID09IFRleHR1cmVKb2I6OkRpc2NhcmRDb250ZW50cykKICAgICAgICAg
cmV0dXJuOwogCiAgICAgLy8gT3ZlcnJpZGUgdGhlIHByZXZpb3VzIGpvYi4KLSAgICByZXN1bHQu
aXRlcmF0b3ItPnNlY29uZCA9ICZqb2I7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9ICZq
b2I7CiB9CiAKIHZvaWQgTGF5ZXJUaWxlcjo6cGVyZm9ybVRpbGVKb2IoTGF5ZXJUaWxlKiB0aWxl
LCBjb25zdCBUZXh0dXJlSm9iJiBqb2IsIGNvbnN0IEludFJlY3QmIHRpbGVSZWN0KQpAQCAtNjMx
LDcgKzYzMSw3IEBAIHZvaWQgTGF5ZXJUaWxlcjo6ZGVsZXRlVGV4dHVyZXMoTGF5ZXJDb21wb3Np
dGluZ1RocmVhZCopCiAgICAgLy8gdG91Y2hpbmcgc29tZSBXZWJLaXQgdGhyZWFkIHN0YXRlLgog
ICAgIGlmIChtX3RpbGVzLnNpemUoKSkgewogICAgICAgICBmb3IgKFRpbGVNYXA6Oml0ZXJhdG9y
IGl0ID0gbV90aWxlcy5iZWdpbigpOyBpdCAhPSBtX3RpbGVzLmVuZCgpOyArK2l0KQotICAgICAg
ICAgICAgKCppdCkuc2Vjb25kLT5kaXNjYXJkQ29udGVudHMoKTsKKyAgICAgICAgICAgICgqaXQp
LnZhbHVlLT5kaXNjYXJkQ29udGVudHMoKTsKICAgICAgICAgbV90aWxlcy5jbGVhcigpOwogCiAg
ICAgICAgIG1fY29udGVudHNEaXJ0eSA9IHRydWU7CkBAIC02NDgsNyArNjQ4LDcgQEAgdm9pZCBM
YXllclRpbGVyOjpwcnVuZVRleHR1cmVzKCkKICAgICAvLyBQcnVuZSB0aWxlcyB0aGF0IGFyZSBu
byBsb25nZXIgbmVlZGVkLgogICAgIFZlY3RvcjxUaWxlSW5kZXg+IHRpbGVzVG9EZWxldGU7CiAg
ICAgZm9yIChUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0gbV90
aWxlcy5lbmQoKTsgKytpdCkgewotICAgICAgICBUaWxlSW5kZXggaW5kZXggPSAoKml0KS5maXJz
dDsKKyAgICAgICAgVGlsZUluZGV4IGluZGV4ID0gKCppdCkua2V5OwogCiAgICAgICAgIEludFBv
aW50IG9yaWdpbiA9IG9yaWdpbk9mVGlsZShpbmRleCk7CiAgICAgICAgIGlmIChvcmlnaW4ueCgp
ID49IG1fcmVxdWlyZWRUZXh0dXJlU2l6ZS53aWR0aCgpIHx8IG9yaWdpbi55KCkgPj0gbV9yZXF1
aXJlZFRleHR1cmVTaXplLmhlaWdodCgpKQpAQCAtNzMwLDcgKzczMCw3IEBAIHZvaWQgTGF5ZXJU
aWxlcjo6YmluZENvbnRlbnRzVGV4dHVyZShMYXllckNvbXBvc2l0aW5nVGhyZWFkKikKICAgICBp
ZiAobV90aWxlcy5zaXplKCkgIT0gMSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY29uc3QgTGF5
ZXJUaWxlKiB0aWxlID0gbV90aWxlcy5iZWdpbigpLT5zZWNvbmQ7CisgICAgY29uc3QgTGF5ZXJU
aWxlKiB0aWxlID0gbV90aWxlcy5iZWdpbigpLT52YWx1ZTsKIAogICAgIEFTU0VSVCh0aWxlLT5o
YXNUZXh0dXJlKCkpOwogICAgIGlmICghdGlsZS0+aGFzVGV4dHVyZSgpKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9UZXh0dXJlQ2FjaGVD
b21wb3NpdGluZ1RocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9i
bGFja2JlcnJ5L1RleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkLmNwcAppbmRleCA1YjZiYjg3
MzY0OWY5YTg4YmNiNzhlMjBiMTdhMThlYzM1NGNiNzUxLi5kNjVjNGRhZGRiYmIyNTk4ZWIwZmEy
NDE3MWM0ZTZhZjE0ZGQ3NGM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ibGFja2JlcnJ5L1RleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L1RleHR1cmVDYWNo
ZUNvbXBvc2l0aW5nVGhyZWFkLmNwcApAQCAtMjAyLDEwICsyMDIsMTAgQEAgdm9pZCBUZXh0dXJl
Q2FjaGVDb21wb3NpdGluZ1RocmVhZDo6c2V0TWVtb3J5VXNhZ2Uoc2l6ZV90IG1lbW9yeVVzYWdl
KQogUGFzc1JlZlB0cjxUZXh0dXJlPiBUZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZDo6dGV4
dHVyZUZvclRpbGVkQ29udGVudHMoY29uc3QgU2tCaXRtYXAmIGNvbnRlbnRzLCBjb25zdCBJbnRS
ZWN0JiB0aWxlUmVjdCwgY29uc3QgVGlsZUluZGV4JiBpbmRleCwgYm9vbCBpc09wYXF1ZSkKIHsK
ICAgICBIYXNoTWFwPENvbnRlbnRzS2V5LCBUZXh0dXJlTWFwPjo6aXRlcmF0b3IgaXQgPSBtX2Nh
Y2hlLmFkZChrZXkoY29udGVudHMpLCBUZXh0dXJlTWFwKCkpLml0ZXJhdG9yOwotICAgIFRleHR1
cmVNYXAmIG1hcCA9ICgqaXQpLnNlY29uZDsKKyAgICBUZXh0dXJlTWFwJiBtYXAgPSAoKml0KS52
YWx1ZTsKIAogICAgIFRleHR1cmVNYXA6Oml0ZXJhdG9yIGp0ID0gbWFwLmFkZChpbmRleCwgUmVm
UHRyPFRleHR1cmU+KCkpLml0ZXJhdG9yOwotICAgIFJlZlB0cjxUZXh0dXJlPiB0ZXh0dXJlID0g
KCpqdCkuc2Vjb25kOworICAgIFJlZlB0cjxUZXh0dXJlPiB0ZXh0dXJlID0gKCpqdCkudmFsdWU7
CiAgICAgaWYgKCF0ZXh0dXJlKSB7CiAgICAgICAgIHRleHR1cmUgPSBjcmVhdGVUZXh0dXJlKCk7
CiAjaWYgREVCVUdfVEVYVFVSRV9NRU1PUllfVVNBR0UKQEAgLTI0NCw3ICsyNDQsNyBAQCBQYXNz
UmVmUHRyPFRleHR1cmU+IFRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkOjp0ZXh0dXJlRm9y
Q29sb3IoY29uc3QgQ29sb3ImCiAjZW5kaWYKICAgICAgICAgbV9jb2xvcnMuc2V0KGNvbG9yLCB0
ZXh0dXJlKTsKICAgICB9IGVsc2UKLSAgICAgICAgdGV4dHVyZSA9ICgqaXQpLnNlY29uZDsKKyAg
ICAgICAgdGV4dHVyZSA9ICgqaXQpLnZhbHVlOwogCiAgICAgLy8gQ29sb3IgdGV4dHVyZXMgY2Fu
J3QgYmUgZXZpY3RlZCwgc28gbm8gbmVlZCBmb3IgVGV4dHVyZVByb3RlY3Rvci4KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNB
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJD
QS5jcHAKaW5kZXggMjQ5NTRhNGI4ZGYyZmVjODA3YTJlNGYzNmZiMmVjYjNiYTZkNTA3Yi4uMWFj
MWM0MmM5Nzg4Y2NiYmYxYWU5M2ViNGE4ODE1ZjY1MDdmN2QxOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCkBA
IC00ODYsNyArNDg2LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6Om1vdmVPckNvcHlBbmltYXRp
b25zKE1vdmVPckNvcHkgb3BlcmF0aW9uLCBQbGF0Zm9ybUNBTGF5ZXIKICAgICAvLyBMb29rIGZv
ciBydW5uaW5nIGFuaW1hdGlvbnMgYWZmZWN0aW5nIHRoaXMgcHJvcGVydHkuCiAgICAgQW5pbWF0
aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9ydW5uaW5nQW5pbWF0aW9ucy5lbmQoKTsK
ICAgICBmb3IgKEFuaW1hdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9ydW5uaW5nQW5p
bWF0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgY29uc3QgVmVjdG9y
PExheWVyUHJvcGVydHlBbmltYXRpb24+JiBwcm9wZXJ0eUFuaW1hdGlvbnMgPSBpdC0+c2Vjb25k
OworICAgICAgICBjb25zdCBWZWN0b3I8TGF5ZXJQcm9wZXJ0eUFuaW1hdGlvbj4mIHByb3BlcnR5
QW5pbWF0aW9ucyA9IGl0LT52YWx1ZTsKICAgICAgICAgc2l6ZV90IG51bUFuaW1hdGlvbnMgPSBw
cm9wZXJ0eUFuaW1hdGlvbnMuc2l6ZSgpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG51bUFuaW1hdGlvbnM7ICsraSkgewogICAgICAgICAgICAgY29uc3QgTGF5ZXJQcm9wZXJ0eUFu
aW1hdGlvbiYgY3VyckFuaW1hdGlvbiA9IHByb3BlcnR5QW5pbWF0aW9uc1tpXTsKQEAgLTcyOCw3
ICs3MjgsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6cGF1c2VBbmltYXRpb24oY29uc3QgU3Ry
aW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZU9mZgogCiAgICAgQW5pbWF0aW9uc1RvUHJv
Y2Vzc01hcDo6aXRlcmF0b3IgaXQgPSBtX2FuaW1hdGlvbnNUb1Byb2Nlc3MuZmluZChhbmltYXRp
b25OYW1lKTsKICAgICBpZiAoaXQgIT0gbV9hbmltYXRpb25zVG9Qcm9jZXNzLmVuZCgpKSB7Ci0g
ICAgICAgIEFuaW1hdGlvblByb2Nlc3NpbmdBY3Rpb24mIHByb2Nlc3NpbmdJbmZvID0gaXQtPnNl
Y29uZDsKKyAgICAgICAgQW5pbWF0aW9uUHJvY2Vzc2luZ0FjdGlvbiYgcHJvY2Vzc2luZ0luZm8g
PSBpdC0+dmFsdWU7CiAgICAgICAgIC8vIElmIGFuIGFuaW1hdGlvbiBpcyBzY2hlZHVsZWQgdG8g
YmUgcmVtb3ZlZCwgZG9uJ3QgY2hhbmdlIHRoZSByZW1vdmUgdG8gYSBwYXVzZS4KICAgICAgICAg
aWYgKHByb2Nlc3NpbmdJbmZvLmFjdGlvbiAhPSBSZW1vdmUpCiAgICAgICAgICAgICBwcm9jZXNz
aW5nSW5mby5hY3Rpb24gPSBQYXVzZTsKQEAgLTg2Myw3ICs4NjMsNyBAQCB2b2lkIEdyYXBoaWNz
TGF5ZXJDQTo6bGF5ZXJEaWREaXNwbGF5KFBsYXRmb3JtTGF5ZXIqIGxheWVyKQogICAgIGlmIChs
YXllckNsb25lTWFwKSB7CiAgICAgICAgIExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBs
YXllckNsb25lTWFwLT5lbmQoKTsKICAgICAgICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBsYXllckNsb25lTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgICAgIFBsYXRmb3JtQ0FMYXllciogY3VyckNsb25lID0gaXQtPnNlY29uZC5nZXQoKTsKKyAg
ICAgICAgICAgIFBsYXRmb3JtQ0FMYXllciogY3VyckNsb25lID0gaXQtPnZhbHVlLmdldCgpOwog
ICAgICAgICAgICAgaWYgKCFjdXJyQ2xvbmUpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAK
QEAgLTEyMDUsMTAgKzEyMDUsMTAgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUdlb21l
dHJ5KGZsb2F0IHBhZ2VTY2FsZUZhY3RvciwgY29uc3QgRmxvYXRQb2ludCYgcG8KICAgICAgICAg
aWYgKExheWVyTWFwKiBsYXllckNsb25lTWFwID0gbV9zdHJ1Y3R1cmFsTGF5ZXJDbG9uZXMuZ2V0
KCkpIHsKICAgICAgICAgICAgIExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBsYXllckNs
b25lTWFwLT5lbmQoKTsKICAgICAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAg
ICAgICAgICAgUGxhdGZvcm1DQUxheWVyKiBjbG9uZSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAg
ICAgICAgICAgICAgUGxhdGZvcm1DQUxheWVyKiBjbG9uZSA9IGl0LT52YWx1ZS5nZXQoKTsKICAg
ICAgICAgICAgICAgICBGbG9hdFBvaW50IGNsb25lUG9zaXRpb24gPSBsYXllclBvc2l0aW9uOwog
Ci0gICAgICAgICAgICAgICAgaWYgKG1fcmVwbGljYUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RD
bG9uZShpdC0+Zmlyc3QpKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fcmVwbGljYUxheWVyICYm
IGlzUmVwbGljYXRlZFJvb3RDbG9uZShpdC0+a2V5KSkgewogICAgICAgICAgICAgICAgICAgICAv
LyBNYWludGFpbiB0aGUgc3BlY2lhbC1jYXNlIHBvc2l0aW9uIGZvciB0aGUgcm9vdCBvZiBhIGNs
b25lIHN1YnRyZWUsCiAgICAgICAgICAgICAgICAgICAgIC8vIHdoaWNoIHdlIHNldCB1cCBpbiBy
ZXBsaWNhdGVkTGF5ZXJSb290KCkuCiAgICAgICAgICAgICAgICAgICAgIGNsb25lUG9zaXRpb24g
PSBwb3NpdGlvbkZvckNsb25lUm9vdExheWVyKCk7CkBAIC0xMjMyLDEwICsxMjMyLDEwIEBAIHZv
aWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVHZW9tZXRyeShmbG9hdCBwYWdlU2NhbGVGYWN0b3Is
IGNvbnN0IEZsb2F0UG9pbnQmIHBvCiAgICAgaWYgKExheWVyTWFwKiBsYXllckNsb25lTWFwID0g
bV9sYXllckNsb25lcy5nZXQoKSkgewogICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7
Ci0gICAgICAgICAgICBQbGF0Zm9ybUNBTGF5ZXIqIGNsb25lID0gaXQtPnNlY29uZC5nZXQoKTsK
KyAgICAgICAgICAgIFBsYXRmb3JtQ0FMYXllciogY2xvbmUgPSBpdC0+dmFsdWUuZ2V0KCk7CiAg
ICAgICAgICAgICBGbG9hdFBvaW50IGNsb25lUG9zaXRpb24gPSBhZGp1c3RlZFBvc2l0aW9uOwog
Ci0gICAgICAgICAgICBpZiAoIW1fc3RydWN0dXJhbExheWVyICYmIG1fcmVwbGljYUxheWVyICYm
IGlzUmVwbGljYXRlZFJvb3RDbG9uZShpdC0+Zmlyc3QpKSB7CisgICAgICAgICAgICBpZiAoIW1f
c3RydWN0dXJhbExheWVyICYmIG1fcmVwbGljYUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9u
ZShpdC0+a2V5KSkgewogICAgICAgICAgICAgICAgIC8vIE1haW50YWluIHRoZSBzcGVjaWFsLWNh
c2UgcG9zaXRpb24gZm9yIHRoZSByb290IG9mIGEgY2xvbmUgc3VidHJlZSwKICAgICAgICAgICAg
ICAgICAvLyB3aGljaCB3ZSBzZXQgdXAgaW4gcmVwbGljYXRlZExheWVyUm9vdCgpLgogICAgICAg
ICAgICAgICAgIGNsb25lUG9zaXRpb24gPSBwb3NpdGlvbkZvckNsb25lUm9vdExheWVyKCk7CkBA
IC0xMjU1LDggKzEyNTUsOCBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlVHJhbnNmb3Jt
KCkKICAgICBpZiAoTGF5ZXJNYXAqIGxheWVyQ2xvbmVNYXAgPSBwcmltYXJ5TGF5ZXJDbG9uZXMo
KSkgewogICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1h
cC0+ZW5kKCk7CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5
ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBQbGF0
Zm9ybUNBTGF5ZXIqIGN1cnJMYXllciA9IGl0LT5zZWNvbmQuZ2V0KCk7Ci0gICAgICAgICAgICBp
ZiAobV9yZXBsaWNhTGF5ZXIgJiYgaXNSZXBsaWNhdGVkUm9vdENsb25lKGl0LT5maXJzdCkpIHsK
KyAgICAgICAgICAgIFBsYXRmb3JtQ0FMYXllciogY3VyckxheWVyID0gaXQtPnZhbHVlLmdldCgp
OworICAgICAgICAgICAgaWYgKG1fcmVwbGljYUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9u
ZShpdC0+a2V5KSkgewogICAgICAgICAgICAgICAgIC8vIE1haW50YWluIHRoZSBzcGVjaWFsLWNh
c2UgdHJhbnNmb3JtIGZvciB0aGUgcm9vdCBvZiBhIGNsb25lIHN1YnRyZWUsCiAgICAgICAgICAg
ICAgICAgLy8gd2hpY2ggd2Ugc2V0IHVwIGluIHJlcGxpY2F0ZWRMYXllclJvb3QoKS4KICAgICAg
ICAgICAgICAgICBjdXJyTGF5ZXItPnNldFRyYW5zZm9ybShUcmFuc2Zvcm1hdGlvbk1hdHJpeCgp
KTsKQEAgLTEyNzMsNyArMTI3Myw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVDaGls
ZHJlblRyYW5zZm9ybSgpCiAgICAgaWYgKExheWVyTWFwKiBsYXllckNsb25lTWFwID0gcHJpbWFy
eUxheWVyQ2xvbmVzKCkpIHsKICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IGxheWVyQ2xvbmVNYXAtPmVuZCgpOwogICAgICAgICBmb3IgKExheWVyTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IGxheWVyQ2xvbmVNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAg
ICAgICAgIGl0LT5zZWNvbmQtPnNldFN1YmxheWVyVHJhbnNmb3JtKG1fY2hpbGRyZW5UcmFuc2Zv
cm0pOworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRTdWJsYXllclRyYW5zZm9ybShtX2NoaWxk
cmVuVHJhbnNmb3JtKTsKICAgICB9CiB9CiAKQEAgLTEyODQsNyArMTI4NCw3IEBAIHZvaWQgR3Jh
cGhpY3NMYXllckNBOjp1cGRhdGVNYXNrc1RvQm91bmRzKCkKICAgICBpZiAoTGF5ZXJNYXAqIGxh
eWVyQ2xvbmVNYXAgPSBtX2xheWVyQ2xvbmVzLmdldCgpKSB7CiAgICAgICAgIExheWVyTWFwOjpj
b25zdF9pdGVyYXRvciBlbmQgPSBsYXllckNsb25lTWFwLT5lbmQoKTsKICAgICAgICAgZm9yIChM
YXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXllckNsb25lTWFwLT5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRNYXNrc1RvQm91bmRzKG1f
bWFza3NUb0JvdW5kcyk7CisgICAgICAgICAgICBpdC0+dmFsdWUtPnNldE1hc2tzVG9Cb3VuZHMo
bV9tYXNrc1RvQm91bmRzKTsKICAgICB9CiAKICAgICB1cGRhdGVEZWJ1Z0luZGljYXRvcnMoKTsK
QEAgLTEzMDIsNyArMTMwMiw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVDb250ZW50
c1Zpc2liaWxpdHkoKQogICAgICAgICBpZiAoTGF5ZXJNYXAqIGxheWVyQ2xvbmVNYXAgPSBtX2xh
eWVyQ2xvbmVzLmdldCgpKSB7CiAgICAgICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAgICAgICAgICBmb3IgKExheWVyTWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IGxheWVyQ2xvbmVNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkKLSAgICAgICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRDb250ZW50cygwKTsKKyAgICAgICAg
ICAgICAgICBpdC0+dmFsdWUtPnNldENvbnRlbnRzKDApOwogICAgICAgICB9CiAgICAgfQogfQpA
QCAtMTMxNCw3ICsxMzE0LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUNvbnRlbnRz
T3BhcXVlKCkKICAgICBpZiAoTGF5ZXJNYXAqIGxheWVyQ2xvbmVNYXAgPSBtX2xheWVyQ2xvbmVz
LmdldCgpKSB7CiAgICAgICAgIExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBsYXllckNs
b25lTWFwLT5lbmQoKTsKICAgICAgICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBsYXllckNsb25lTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBp
dC0+c2Vjb25kLT5zZXRPcGFxdWUobV9jb250ZW50c09wYXF1ZSk7CisgICAgICAgICAgICBpdC0+
dmFsdWUtPnNldE9wYXF1ZShtX2NvbnRlbnRzT3BhcXVlKTsKICAgICB9CiB9CiAKQEAgLTEzMjYs
NyArMTMyNiw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVCYWNrZmFjZVZpc2liaWxp
dHkoKQogICAgICAgICBpZiAoTGF5ZXJNYXAqIGxheWVyQ2xvbmVNYXAgPSBtX3N0cnVjdHVyYWxM
YXllckNsb25lcy5nZXQoKSkgewogICAgICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IGxheWVyQ2xvbmVNYXAtPmVuZCgpOwogICAgICAgICAgICAgZm9yIChMYXllck1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXllckNsb25lTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpCi0gICAgICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0RG91YmxlU2lkZWQobV9iYWNrZmFj
ZVZpc2liaWxpdHkpOworICAgICAgICAgICAgICAgIGl0LT52YWx1ZS0+c2V0RG91YmxlU2lkZWQo
bV9iYWNrZmFjZVZpc2liaWxpdHkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xMzM1LDcgKzEz
MzUsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlQmFja2ZhY2VWaXNpYmlsaXR5KCkK
ICAgICBpZiAoTGF5ZXJNYXAqIGxheWVyQ2xvbmVNYXAgPSBtX2xheWVyQ2xvbmVzLmdldCgpKSB7
CiAgICAgICAgIExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBsYXllckNsb25lTWFwLT5l
bmQoKTsKICAgICAgICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXllckNs
b25lTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBpdC0+c2Vjb25k
LT5zZXREb3VibGVTaWRlZChtX2JhY2tmYWNlVmlzaWJpbGl0eSk7CisgICAgICAgICAgICBpdC0+
dmFsdWUtPnNldERvdWJsZVNpZGVkKG1fYmFja2ZhY2VWaXNpYmlsaXR5KTsKICAgICB9CiB9CiAK
QEAgLTEzNDcsMTAgKzEzNDcsMTAgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUZpbHRl
cnMoKQogICAgIGlmIChMYXllck1hcCogbGF5ZXJDbG9uZU1hcCA9IHByaW1hcnlMYXllckNsb25l
cygpKSB7CiAgICAgICAgIExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBsYXllckNsb25l
TWFwLT5lbmQoKTsKICAgICAgICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBs
YXllckNsb25lTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGlm
IChtX3JlcGxpY2FMYXllciAmJiBpc1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQtPmZpcnN0KSkKKyAg
ICAgICAgICAgIGlmIChtX3JlcGxpY2FMYXllciAmJiBpc1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQt
PmtleSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIGl0LT5zZWNv
bmQtPnNldEZpbHRlcnMobV9maWx0ZXJzKTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+c2V0Rmls
dGVycyhtX2ZpbHRlcnMpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMTQzOSw3ICsxNDM5LDcg
QEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OmVuc3VyZVN0cnVjdHVyYWxMYXllcihTdHJ1Y3R1cmFs
TGF5ZXJQdXJwb3NlIHB1cnBvc2UsIGZsb2EKICAgICBpZiAobV9sYXllckNsb25lcykgewogICAg
ICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9sYXllckNsb25lcy0+ZW5kKCk7
CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9sYXllckNsb25l
cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBQbGF0Zm9ybUNBTGF5
ZXIqIGN1cnJMYXllciA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBQbGF0Zm9ybUNB
TGF5ZXIqIGN1cnJMYXllciA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGN1cnJMYXll
ci0+c2V0UG9zaXRpb24ocG9pbnQpOwogICAgICAgICAgICAgY3VyckxheWVyLT5zZXRBbmNob3JQ
b2ludChhbmNob3JQb2ludCk7CiAgICAgICAgICAgICBjdXJyTGF5ZXItPnNldFRyYW5zZm9ybShU
cmFuc2Zvcm1hdGlvbk1hdHJpeCgpKTsKQEAgLTE0ODQsNyArMTQ4NCw3IEBAIHZvaWQgR3JhcGhp
Y3NMYXllckNBOjp1cGRhdGVMYXllckRyYXdzQ29udGVudChmbG9hdCBwYWdlU2NhbGVGYWN0b3Is
IGNvbnN0IEZsb2F0CiAgICAgICAgIGlmIChtX2xheWVyQ2xvbmVzKSB7CiAgICAgICAgICAgICBM
YXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9sYXllckNsb25lcy0+ZW5kKCk7CiAgICAg
ICAgICAgICBmb3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fbGF5ZXJDbG9uZXMt
PmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgICAgICBpdC0+c2Vjb25kLT5z
ZXRDb250ZW50cygwKTsKKyAgICAgICAgICAgICAgICBpdC0+dmFsdWUtPnNldENvbnRlbnRzKDAp
OwogICAgICAgICB9CiAgICAgfQogICAgIHVwZGF0ZURlYnVnSW5kaWNhdG9ycygpOwpAQCAtMTUz
NSw3ICsxNTM1LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUNvbnRlbnRzSW1hZ2Uo
KQogICAgICAgICBpZiAobV9jb250ZW50c0xheWVyQ2xvbmVzKSB7CiAgICAgICAgICAgICBMYXll
ck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9jb250ZW50c0xheWVyQ2xvbmVzLT5lbmQoKTsK
ICAgICAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9jb250ZW50
c0xheWVyQ2xvbmVzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICAgICAg
aXQtPnNlY29uZC0+c2V0Q29udGVudHMobV9jb250ZW50c0xheWVyLT5jb250ZW50cygpKTsKKyAg
ICAgICAgICAgICAgICBpdC0+dmFsdWUtPnNldENvbnRlbnRzKG1fY29udGVudHNMYXllci0+Y29u
dGVudHMoKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHVwZGF0ZUNvbnRlbnRzUmVj
dCgpOwpAQCAtMTU3OSw4ICsxNTc5LDggQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUNv
bnRlbnRzUmVjdCgpCiAgICAgaWYgKG1fY29udGVudHNMYXllckNsb25lcykgewogICAgICAgICBM
YXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9jb250ZW50c0xheWVyQ2xvbmVzLT5lbmQo
KTsKICAgICAgICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2NvbnRlbnRz
TGF5ZXJDbG9uZXMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgaXQt
PnNlY29uZC0+c2V0UG9zaXRpb24ocG9pbnQpOwotICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0
Qm91bmRzKHJlY3QpOworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRQb3NpdGlvbihwb2ludCk7
CisgICAgICAgICAgICBpdC0+dmFsdWUtPnNldEJvdW5kcyhyZWN0KTsKICAgICAgICAgfQogICAg
IH0KIH0KQEAgLTE1OTUsOCArMTU5NSw4IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVN
YXNrTGF5ZXIoKQogICAgIGlmIChMYXllck1hcCogbGF5ZXJDbG9uZU1hcCA9IG1fbGF5ZXJDbG9u
ZXMuZ2V0KCkpIHsKICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxheWVy
Q2xvbmVNYXAtPmVuZCgpOwogICAgICAgICBmb3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IGxheWVyQ2xvbmVNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeyAgICAgICAgICAg
IAotICAgICAgICAgICAgUGxhdGZvcm1DQUxheWVyKiBtYXNrQ2xvbmUgPSBtYXNrTGF5ZXJDbG9u
ZU1hcCA/IG1hc2tMYXllckNsb25lTWFwLT5nZXQoaXQtPmZpcnN0KS5nZXQoKSA6IDA7Ci0gICAg
ICAgICAgICBpdC0+c2Vjb25kLT5zZXRNYXNrKG1hc2tDbG9uZSk7CisgICAgICAgICAgICBQbGF0
Zm9ybUNBTGF5ZXIqIG1hc2tDbG9uZSA9IG1hc2tMYXllckNsb25lTWFwID8gbWFza0xheWVyQ2xv
bmVNYXAtPmdldChpdC0+a2V5KS5nZXQoKSA6IDA7CisgICAgICAgICAgICBpdC0+dmFsdWUtPnNl
dE1hc2sobWFza0Nsb25lKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTE2NjAsMTMgKzE2NjAs
MTMgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUxheWVyQW5pbWF0aW9ucygpCiAgICAg
aWYgKG1fYW5pbWF0aW9uc1RvUHJvY2Vzcy5zaXplKCkpIHsKICAgICAgICAgQW5pbWF0aW9uc1Rv
UHJvY2Vzc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9hbmltYXRpb25zVG9Qcm9jZXNzLmVu
ZCgpOwogICAgICAgICBmb3IgKEFuaW1hdGlvbnNUb1Byb2Nlc3NNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbV9hbmltYXRpb25zVG9Qcm9jZXNzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewot
ICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBjdXJyQW5pbWF0aW9uTmFtZSA9IGl0LT5maXJzdDsK
KyAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgY3VyckFuaW1hdGlvbk5hbWUgPSBpdC0+a2V5Owog
ICAgICAgICAgICAgQW5pbWF0aW9uc01hcDo6aXRlcmF0b3IgYW5pbWF0aW9uSXQgPSBtX3J1bm5p
bmdBbmltYXRpb25zLmZpbmQoY3VyckFuaW1hdGlvbk5hbWUpOwogICAgICAgICAgICAgaWYgKGFu
aW1hdGlvbkl0ID09IG1fcnVubmluZ0FuaW1hdGlvbnMuZW5kKCkpCiAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAKLSAgICAgICAgICAgIGNvbnN0IEFuaW1hdGlvblByb2Nlc3NpbmdBY3Rpb24m
IHByb2Nlc3NpbmdJbmZvID0gaXQtPnNlY29uZDsKLSAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxM
YXllclByb3BlcnR5QW5pbWF0aW9uPiYgYW5pbWF0aW9ucyA9IGFuaW1hdGlvbkl0LT5zZWNvbmQ7
CisgICAgICAgICAgICBjb25zdCBBbmltYXRpb25Qcm9jZXNzaW5nQWN0aW9uJiBwcm9jZXNzaW5n
SW5mbyA9IGl0LT52YWx1ZTsKKyAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxMYXllclByb3BlcnR5
QW5pbWF0aW9uPiYgYW5pbWF0aW9ucyA9IGFuaW1hdGlvbkl0LT52YWx1ZTsKICAgICAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYW5pbWF0aW9ucy5zaXplKCk7ICsraSkgewogICAgICAg
ICAgICAgICAgIGNvbnN0IExheWVyUHJvcGVydHlBbmltYXRpb24mIGN1cnJBbmltYXRpb24gPSBh
bmltYXRpb25zW2ldOwogICAgICAgICAgICAgICAgIHN3aXRjaCAocHJvY2Vzc2luZ0luZm8uYWN0
aW9uKSB7CkBAIC0xNjk4LDcgKzE2OTgsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRl
TGF5ZXJBbmltYXRpb25zKCkKICAgICAgICAgICAgICAgICBhbmltYXRpb25zLmFwcGVuZChwZW5k
aW5nQW5pbWF0aW9uKTsKICAgICAgICAgICAgICAgICBtX3J1bm5pbmdBbmltYXRpb25zLmFkZChw
ZW5kaW5nQW5pbWF0aW9uLm1fbmFtZSwgYW5pbWF0aW9ucyk7CiAgICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgIFZlY3RvcjxMYXllclByb3BlcnR5QW5pbWF0aW9uPiYgYW5pbWF0
aW9ucyA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICAgICAgVmVjdG9yPExheWVyUHJvcGVydHlB
bmltYXRpb24+JiBhbmltYXRpb25zID0gaXQtPnZhbHVlOwogICAgICAgICAgICAgICAgIGFuaW1h
dGlvbnMuYXBwZW5kKHBlbmRpbmdBbmltYXRpb24pOwogICAgICAgICAgICAgfQogICAgICAgICB9
CkBAIC0xNzIzLDExICsxNzIzLDExIEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpzZXRBbmltYXRp
b25PbkxheWVyKFBsYXRmb3JtQ0FBbmltYXRpb24qIGNhQW5pbSwgQW5pbWF0ZWRQCiAgICAgICAg
IExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBsYXllckNsb25lTWFwLT5lbmQoKTsKICAg
ICAgICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXllckNsb25lTWFwLT5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIC8vIFNraXAgaW1tZWRpYXRl
IHJlcGxpY2FzLCBzaW5jZSB0aGV5IG1vdmUgd2l0aCB0aGUgb3JpZ2luYWwuCi0gICAgICAgICAg
ICBpZiAobV9yZXBsaWNhTGF5ZXIgJiYgaXNSZXBsaWNhdGVkUm9vdENsb25lKGl0LT5maXJzdCkp
CisgICAgICAgICAgICBpZiAobV9yZXBsaWNhTGF5ZXIgJiYgaXNSZXBsaWNhdGVkUm9vdENsb25l
KGl0LT5rZXkpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBpdC0+
c2Vjb25kLT5yZW1vdmVBbmltYXRpb25Gb3JLZXkoYW5pbWF0aW9uSUQpOwotICAgICAgICAgICAg
aXQtPnNlY29uZC0+YWRkQW5pbWF0aW9uRm9yS2V5KGFuaW1hdGlvbklELCBjYUFuaW0pOworICAg
ICAgICAgICAgaXQtPnZhbHVlLT5yZW1vdmVBbmltYXRpb25Gb3JLZXkoYW5pbWF0aW9uSUQpOwor
ICAgICAgICAgICAgaXQtPnZhbHVlLT5hZGRBbmltYXRpb25Gb3JLZXkoYW5pbWF0aW9uSUQsIGNh
QW5pbSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0xNzYyLDEwICsxNzYyLDEwIEBAIGJvb2wg
R3JhcGhpY3NMYXllckNBOjpyZW1vdmVDQUFuaW1hdGlvbkZyb21MYXllcihBbmltYXRlZFByb3Bl
cnR5SUQgcHJvcGVydHksIGNvCiAgICAgICAgIExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQg
PSBsYXllckNsb25lTWFwLT5lbmQoKTsKICAgICAgICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBsYXllckNsb25lTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAg
ICAgICAgICAgIC8vIFNraXAgaW1tZWRpYXRlIHJlcGxpY2FzLCBzaW5jZSB0aGV5IG1vdmUgd2l0
aCB0aGUgb3JpZ2luYWwuCi0gICAgICAgICAgICBpZiAobV9yZXBsaWNhTGF5ZXIgJiYgaXNSZXBs
aWNhdGVkUm9vdENsb25lKGl0LT5maXJzdCkpCisgICAgICAgICAgICBpZiAobV9yZXBsaWNhTGF5
ZXIgJiYgaXNSZXBsaWNhdGVkUm9vdENsb25lKGl0LT5rZXkpKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogCi0gICAgICAgICAgICBpdC0+c2Vjb25kIC0+cmVtb3ZlQW5pbWF0aW9uRm9yS2V5
KGFuaW1hdGlvbklEKTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+cmVtb3ZlQW5pbWF0aW9uRm9y
S2V5KGFuaW1hdGlvbklEKTsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTE3OTQsOSArMTc5NCw5IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpwYXVzZUNBQW5pbWF0aW9u
T25MYXllcihBbmltYXRlZFByb3BlcnR5SUQgcHJvcGVydHksIGNvbnN0CiAgICAgICAgIExheWVy
TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBsYXllckNsb25lTWFwLT5lbmQoKTsKICAgICAgICAg
Zm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXllckNsb25lTWFwLT5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIC8vIFNraXAgaW1tZWRpYXRlIHJlcGxp
Y2FzLCBzaW5jZSB0aGV5IG1vdmUgd2l0aCB0aGUgb3JpZ2luYWwuCi0gICAgICAgICAgICBpZiAo
bV9yZXBsaWNhTGF5ZXIgJiYgaXNSZXBsaWNhdGVkUm9vdENsb25lKGl0LT5maXJzdCkpCisgICAg
ICAgICAgICBpZiAobV9yZXBsaWNhTGF5ZXIgJiYgaXNSZXBsaWNhdGVkUm9vdENsb25lKGl0LT5r
ZXkpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaXQtPnNlY29uZC0+
YWRkQW5pbWF0aW9uRm9yS2V5KGFuaW1hdGlvbklELCBuZXdBbmltLmdldCgpKTsKKyAgICAgICAg
ICAgIGl0LT52YWx1ZS0+YWRkQW5pbWF0aW9uRm9yS2V5KGFuaW1hdGlvbklELCBuZXdBbmltLmdl
dCgpKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTIzMjAsOCArMjMyMCw4IEBAIHZvaWQgR3Jh
cGhpY3NMYXllckNBOjpzdXNwZW5kQW5pbWF0aW9ucyhkb3VibGUgdGltZSkKICAgICBpZiAoTGF5
ZXJNYXAqIGxheWVyQ2xvbmVNYXAgPSBwcmltYXJ5TGF5ZXJDbG9uZXMoKSkgewogICAgICAgICBM
YXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAg
ICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRTcGVl
ZCgwKTsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNldFRpbWVPZmZzZXQodCk7CisgICAgICAg
ICAgICBpdC0+dmFsdWUtPnNldFNwZWVkKDApOworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRU
aW1lT2Zmc2V0KHQpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMjMzNSw4ICsyMzM1LDggQEAg
dm9pZCBHcmFwaGljc0xheWVyQ0E6OnJlc3VtZUFuaW1hdGlvbnMoKQogICAgIGlmIChMYXllck1h
cCogbGF5ZXJDbG9uZU1hcCA9IHByaW1hcnlMYXllckNsb25lcygpKSB7CiAgICAgICAgIExheWVy
TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBsYXllckNsb25lTWFwLT5lbmQoKTsKICAgICAgICAg
Zm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXllckNsb25lTWFwLT5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNldFNwZWVkKDEp
OwotICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0VGltZU9mZnNldCgwKTsKKyAgICAgICAgICAg
IGl0LT52YWx1ZS0+c2V0U3BlZWQoMSk7CisgICAgICAgICAgICBpdC0+dmFsdWUtPnNldFRpbWVP
ZmZzZXQoMCk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0yNTQ2LDEzICsyNTQ2LDEzIEBAIFBh
c3NSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBHcmFwaGljc0xheWVyQ0E6OmZpbmRPck1ha2VDbG9u
ZShDbG9uZUlEIGNsb25lSUQsIFBsCiAgICAgTGF5ZXJNYXA6OkFkZFJlc3VsdCBhZGRSZXN1bHQg
PSBjbG9uZXMtPmFkZChjbG9uZUlELCBkdW1teSk7CiAgICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdF
bnRyeSkgewogICAgICAgICAvLyBWYWx1ZSB3YXMgbm90IGFkZGVkLCBzbyBpdCBleGlzdHMgYWxy
ZWFkeS4KLSAgICAgICAgcmVzdWx0TGF5ZXIgPSBhZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZC5n
ZXQoKTsKKyAgICAgICAgcmVzdWx0TGF5ZXIgPSBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdl
dCgpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHJlc3VsdExheWVyID0gY2xvbmVMYXllcihzb3Vy
Y2VMYXllciwgY2xvbmVMZXZlbCk7CiAjaWZuZGVmIE5ERUJVRwogICAgICAgICByZXN1bHRMYXll
ci0+c2V0TmFtZShTdHJpbmc6OmZvcm1hdCgiQ2xvbmUgJWQgb2YgbGF5ZXIgJXAiLCBjbG9uZUlE
WzBVXSwgc291cmNlTGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSkpOwogI2VuZGlmCi0gICAgICAgIGFk
ZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gcmVzdWx0TGF5ZXI7CisgICAgICAgIGFkZFJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUgPSByZXN1bHRMYXllcjsKICAgICB9CiAKICAgICByZXR1cm4gcmVz
dWx0TGF5ZXI7CkBAIC0yNzQ0LDkgKzI3NDQsOSBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c2V0
T3BhY2l0eUludGVybmFsKGZsb2F0IGFjY3VtdWxhdGVkT3BhY2l0eSkKICAgICBpZiAobGF5ZXJD
bG9uZU1hcCkgewogICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJD
bG9uZU1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAg
ICBpZiAobV9yZXBsaWNhTGF5ZXIgJiYgaXNSZXBsaWNhdGVkUm9vdENsb25lKGl0LT5maXJzdCkp
CisgICAgICAgICAgICBpZiAobV9yZXBsaWNhTGF5ZXIgJiYgaXNSZXBsaWNhdGVkUm9vdENsb25l
KGl0LT5rZXkpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaXQtPnNl
Y29uZC0+c2V0T3BhY2l0eShtX29wYWNpdHkpOworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRP
cGFjaXR5KG1fb3BhY2l0eSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0yNzU4LDEwICsyNzU4
LDEwIEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVPcGFjaXR5T25MYXllcigpCiAgICAg
aWYgKExheWVyTWFwKiBsYXllckNsb25lTWFwID0gcHJpbWFyeUxheWVyQ2xvbmVzKCkpIHsKICAg
ICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxheWVyQ2xvbmVNYXAtPmVuZCgp
OwogICAgICAgICBmb3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGxheWVyQ2xvbmVN
YXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgaWYgKG1fcmVwbGlj
YUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9uZShpdC0+Zmlyc3QpKQorICAgICAgICAgICAg
aWYgKG1fcmVwbGljYUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9uZShpdC0+a2V5KSkKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0T3Bh
Y2l0eShtX29wYWNpdHkpOworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRPcGFjaXR5KG1fb3Bh
Y2l0eSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1RpbGVDYWNoZS5tbSBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9UaWxlQ2FjaGUubW0KaW5kZXggMTE2NDFkMTM1
MjM2NzAwZjM0ZWM2NTUxM2IwYzk0MWE5ZjA5Mjc2Mi4uMGMwNGNlZjNlN2U4YzRhNzVhMDM2OGU0
MWExZGViOGYxYTc1ZGE3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2EvbWFjL1RpbGVDYWNoZS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYS9tYWMvVGlsZUNhY2hlLm1tCkBAIC03OCw3ICs3OCw3IEBAIFRpbGVDYWNoZTo6
flRpbGVDYWNoZSgpCiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAogICAgIGZvciAoVGls
ZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCksIGVuZCA9IG1fdGlsZXMuZW5kKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBXZWJUaWxlTGF5ZXIqIHRpbGVMYXllciA9IGl0
LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIFdlYlRpbGVMYXllciogdGlsZUxheWVyID0gaXQtPnZh
bHVlLmdldCgpOwogICAgICAgICBbdGlsZUxheWVyIHNldFRpbGVDYWNoZTowXTsKICAgICB9CiB9
CkBAIC05OCw3ICs5OCw3IEBAIHZvaWQgVGlsZUNhY2hlOjp0aWxlQ2FjaGVMYXllckJvdW5kc0No
YW5nZWQoKQogdm9pZCBUaWxlQ2FjaGU6OnNldE5lZWRzRGlzcGxheSgpCiB7CiAgICAgZm9yIChU
aWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKSwgZW5kID0gbV90aWxl
cy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBbaXQtPnNlY29uZC5nZXQoKSBzZXRO
ZWVkc0Rpc3BsYXldOworICAgICAgICBbaXQtPnZhbHVlLmdldCgpIHNldE5lZWRzRGlzcGxheV07
CiB9CiAKIHZvaWQgVGlsZUNhY2hlOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgSW50UmVj
dCYgcmVjdCkKQEAgLTE3OSw5ICsxNzksOSBAQCB2b2lkIFRpbGVDYWNoZTo6c2V0U2NhbGUoQ0dG
bG9hdCBzY2FsZSkKICAgICByZXZhbGlkYXRlVGlsZXMoKTsKIAogICAgIGZvciAoVGlsZU1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCksIGVuZCA9IG1fdGlsZXMuZW5kKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBbaXQtPnNlY29uZC5nZXQoKSBzZXRDb250ZW50
c1NjYWxlOmRldmljZVNjYWxlRmFjdG9yXTsKKyAgICAgICAgW2l0LT52YWx1ZS5nZXQoKSBzZXRD
b250ZW50c1NjYWxlOmRldmljZVNjYWxlRmFjdG9yXTsKIAotICAgICAgICBJbnRSZWN0IHRpbGVS
ZWN0ID0gcmVjdEZvclRpbGVJbmRleChpdC0+Zmlyc3QpOworICAgICAgICBJbnRSZWN0IHRpbGVS
ZWN0ID0gcmVjdEZvclRpbGVJbmRleChpdC0+a2V5KTsKICAgICAgICAgRmxvYXRSZWN0IHNjYWxl
ZFRpbGVSZWN0ID0gdGlsZVJlY3Q7CiAKICAgICAgICAgc2NhbGVkVGlsZVJlY3Quc2NhbGUoMSAv
IG1fc2NhbGUpOwpAQCAtMjAxLDcgKzIwMSw3IEBAIHZvaWQgVGlsZUNhY2hlOjpzZXRBY2NlbGVy
YXRlc0RyYXdpbmcoYm9vbCBhY2NlbGVyYXRlc0RyYXdpbmcpCiAgICAgbV9hY2NlbGVyYXRlc0Ry
YXdpbmcgPSBhY2NlbGVyYXRlc0RyYXdpbmc7CiAKICAgICBmb3IgKFRpbGVNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpLCBlbmQgPSBtX3RpbGVzLmVuZCgpOyBpdCAhPSBl
bmQ7ICsraXQpCi0gICAgICAgIFtpdC0+c2Vjb25kLmdldCgpIHNldEFjY2VsZXJhdGVzRHJhd2lu
ZzptX2FjY2VsZXJhdGVzRHJhd2luZ107CisgICAgICAgIFtpdC0+dmFsdWUuZ2V0KCkgc2V0QWNj
ZWxlcmF0ZXNEcmF3aW5nOm1fYWNjZWxlcmF0ZXNEcmF3aW5nXTsKICNlbHNlCiAgICAgVU5VU0VE
X1BBUkFNKGFjY2VsZXJhdGVzRHJhd2luZyk7CiAjZW5kaWYKQEAgLTIxNSw3ICsyMTUsNyBAQCB2
b2lkIFRpbGVDYWNoZTo6c2V0VGlsZXNPcGFxdWUoYm9vbCBvcGFxdWUpCiAgICAgbV90aWxlc0Fy
ZU9wYXF1ZSA9IG9wYXF1ZTsKIAogICAgIGZvciAoVGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3Rp
bGVzLmJlZ2luKCksIGVuZCA9IG1fdGlsZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAg
ICAgICBXZWJUaWxlTGF5ZXIqIHRpbGVMYXllciA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAg
IFdlYlRpbGVMYXllciogdGlsZUxheWVyID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICBbdGls
ZUxheWVyIHNldE9wYXF1ZTpvcGFxdWVdOwogICAgIH0KIH0KQEAgLTI2Myw3ICsyNjMsNyBAQCB2
b2lkIFRpbGVDYWNoZTo6c2V0VGlsZURlYnVnQm9yZGVyV2lkdGgoZmxvYXQgYm9yZGVyV2lkdGgp
CiAKICAgICBtX3RpbGVEZWJ1Z0JvcmRlcldpZHRoID0gYm9yZGVyV2lkdGg7CiAgICAgZm9yIChU
aWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKSwgZW5kID0gbV90aWxl
cy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBbaXQtPnNlY29uZC5nZXQoKSBzZXRC
b3JkZXJXaWR0aDptX3RpbGVEZWJ1Z0JvcmRlcldpZHRoXTsKKyAgICAgICAgW2l0LT52YWx1ZS5n
ZXQoKSBzZXRCb3JkZXJXaWR0aDptX3RpbGVEZWJ1Z0JvcmRlcldpZHRoXTsKIH0KIAogdm9pZCBU
aWxlQ2FjaGU6OnNldFRpbGVEZWJ1Z0JvcmRlckNvbG9yKENHQ29sb3JSZWYgYm9yZGVyQ29sb3Ip
CkBAIC0yNzMsNyArMjczLDcgQEAgdm9pZCBUaWxlQ2FjaGU6OnNldFRpbGVEZWJ1Z0JvcmRlckNv
bG9yKENHQ29sb3JSZWYgYm9yZGVyQ29sb3IpCiAKICAgICBtX3RpbGVEZWJ1Z0JvcmRlckNvbG9y
ID0gYm9yZGVyQ29sb3I7CiAgICAgZm9yIChUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1f
dGlsZXMuYmVnaW4oKSwgZW5kID0gbV90aWxlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQotICAg
ICAgICBbaXQtPnNlY29uZC5nZXQoKSBzZXRCb3JkZXJDb2xvcjptX3RpbGVEZWJ1Z0JvcmRlckNv
bG9yLmdldCgpXTsKKyAgICAgICAgW2l0LT52YWx1ZS5nZXQoKSBzZXRCb3JkZXJDb2xvcjptX3Rp
bGVEZWJ1Z0JvcmRlckNvbG9yLmdldCgpXTsKIH0KIAogSW50UmVjdCBUaWxlQ2FjaGU6OmJvdW5k
cygpIGNvbnN0CkBAIC0zODIsOSArMzgyLDkgQEAgdm9pZCBUaWxlQ2FjaGU6OnJldmFsaWRhdGVU
aWxlcygpCiAgICAgVmVjdG9yPFRpbGVJbmRleD4gdGlsZXNUb1JlbW92ZTsKIAogICAgIGZvciAo
VGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCksIGVuZCA9IG1fdGlsZXMuZW5k
KCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBjb25zdCBUaWxlSW5kZXgmIHRpbGVJbmRl
eCA9IGl0LT5maXJzdDsKKyAgICAgICAgY29uc3QgVGlsZUluZGV4JiB0aWxlSW5kZXggPSBpdC0+
a2V5OwogCi0gICAgICAgIFdlYlRpbGVMYXllciogdGlsZUxheWVyID0gaXQtPnNlY29uZC5nZXQo
KTsKKyAgICAgICAgV2ViVGlsZUxheWVyKiB0aWxlTGF5ZXIgPSBpdC0+dmFsdWUuZ2V0KCk7CiAK
ICAgICAgICAgaWYgKCFyZWN0Rm9yVGlsZUluZGV4KHRpbGVJbmRleCkuaW50ZXJzZWN0cyh0aWxl
Q292ZXJhZ2VSZWN0KSkgewogICAgICAgICAgICAgLy8gUmVtb3ZlIHRoaXMgbGF5ZXIuCkBAIC00
MTIsNyArNDEyLDcgQEAgdm9pZCBUaWxlQ2FjaGU6OnJldmFsaWRhdGVUaWxlcygpCiAgICAgICAg
ICAgICBUaWxlSW5kZXggdGlsZUluZGV4KHgsIHkpOwogCiAgICAgICAgICAgICBJbnRSZWN0IHRp
bGVSZWN0ID0gcmVjdEZvclRpbGVJbmRleCh0aWxlSW5kZXgpOwotICAgICAgICAgICAgUmV0YWlu
UHRyPFdlYlRpbGVMYXllcj4mIHRpbGVMYXllciA9IG1fdGlsZXMuYWRkKHRpbGVJbmRleCwgMCku
aXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgICAgIFJldGFpblB0cjxXZWJUaWxlTGF5ZXI+JiB0
aWxlTGF5ZXIgPSBtX3RpbGVzLmFkZCh0aWxlSW5kZXgsIDApLml0ZXJhdG9yLT52YWx1ZTsKICAg
ICAgICAgICAgIGlmICghdGlsZUxheWVyKSB7CiAgICAgICAgICAgICAgICAgdGlsZUxheWVyID0g
Y3JlYXRlVGlsZUxheWVyKHRpbGVSZWN0KTsKICAgICAgICAgICAgICAgICBbbV90aWxlQ29udGFp
bmVyTGF5ZXIuZ2V0KCkgYWRkU3VibGF5ZXI6dGlsZUxheWVyLmdldCgpXTsKQEAgLTQzMiw3ICs0
MzIsNyBAQCB2b2lkIFRpbGVDYWNoZTo6cmV2YWxpZGF0ZVRpbGVzKCkKIAogICAgIG1fdGlsZUNv
dmVyYWdlUmVjdCA9IEludFJlY3QoKTsKICAgICBmb3IgKFRpbGVNYXA6Oml0ZXJhdG9yIGl0ID0g
bV90aWxlcy5iZWdpbigpLCBlbmQgPSBtX3RpbGVzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
LSAgICAgICAgY29uc3QgVGlsZUluZGV4JiB0aWxlSW5kZXggPSBpdC0+Zmlyc3Q7CisgICAgICAg
IGNvbnN0IFRpbGVJbmRleCYgdGlsZUluZGV4ID0gaXQtPmtleTsKIAogICAgICAgICBtX3RpbGVD
b3ZlcmFnZVJlY3QudW5pdGUocmVjdEZvclRpbGVJbmRleCh0aWxlSW5kZXgpKTsKICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZv
cm1DQUxheWVyV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dp
bi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwCmluZGV4IDQ4YjIwZDBiOGJkMjQyYWI1NDliOGZlNDQy
ZGY0NGFiMzY3MmViODUuLjcwMTY4YjIxMDRkYjM2OWRhMDc1N2ExMTQ0NjIyMTExYmMzMDYxZjAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0
Zm9ybUNBTGF5ZXJXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwCkBAIC0xNjcsNyArMTY3LDcgQEAgdm9pZCBQ
bGF0Zm9ybUNBTGF5ZXI6OmFuaW1hdGlvblN0YXJ0ZWQoQ0ZUaW1lSW50ZXJ2YWwgYmVnaW5UaW1l
KQogCiAgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiA+Ojpj
b25zdF9pdGVyYXRvciBlbmQgPSBtX2FuaW1hdGlvbnMuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFw
PFN0cmluZywgUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+ID46OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV9hbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNl
Y29uZC0+c2V0QWN0dWFsU3RhcnRUaW1lSWZOZWVkZWQoY2FjZkJlZ2luVGltZSk7CisgICAgICAg
IGl0LT52YWx1ZS0+c2V0QWN0dWFsU3RhcnRUaW1lSWZOZWVkZWQoY2FjZkJlZ2luVGltZSk7CiAK
ICAgICBpZiAobV9vd25lcikKICAgICAgICAgbV9vd25lci0+cGxhdGZvcm1DQUxheWVyQW5pbWF0
aW9uU3RhcnRlZChiZWdpblRpbWUpOwpAQCAtMTc3LDggKzE3Nyw4IEBAIHN0YXRpYyB2b2lkIHJl
c3VibWl0QWxsQW5pbWF0aW9ucyhQbGF0Zm9ybUNBTGF5ZXIqIGxheWVyKQogewogICAgIEhhc2hN
YXA8U3RyaW5nLCBSZWZQdHI8UGxhdGZvcm1DQUFuaW1hdGlvbj4gPjo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gbGF5ZXItPmFuaW1hdGlvbnMoKS5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8U3RyaW5n
LCBSZWZQdHI8UGxhdGZvcm1DQUFuaW1hdGlvbj4gPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXll
ci0+YW5pbWF0aW9ucygpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBSZXRh
aW5QdHI8Q0ZTdHJpbmdSZWY+IHMoQWRvcHRDRiwgaXQtPmZpcnN0LmNyZWF0ZUNGU3RyaW5nKCkp
OwotICAgICAgICBDQUNGTGF5ZXJBZGRBbmltYXRpb24obGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSwg
cy5nZXQoKSwgaXQtPnNlY29uZC0+cGxhdGZvcm1BbmltYXRpb24oKSk7CisgICAgICAgIFJldGFp
blB0cjxDRlN0cmluZ1JlZj4gcyhBZG9wdENGLCBpdC0+a2V5LmNyZWF0ZUNGU3RyaW5nKCkpOwor
ICAgICAgICBDQUNGTGF5ZXJBZGRBbmltYXRpb24obGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSwgcy5n
ZXQoKSwgaXQtPnZhbHVlLT5wbGF0Zm9ybUFuaW1hdGlvbigpKTsKICAgICB9CiB9CiAKQEAgLTMy
OCw3ICszMjgsNyBAQCBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+IFBsYXRmb3JtQ0FM
YXllcjo6YW5pbWF0aW9uRm9yS2V5KGNvbnN0IFN0cmluZyYgawogICAgIGlmIChpdCA9PSBtX2Fu
aW1hdGlvbnMuZW5kKCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgcmV0dXJuIGl0LT5zZWNv
bmQ7CisgICAgcmV0dXJuIGl0LT52YWx1ZTsKIH0KIAogUGxhdGZvcm1DQUxheWVyKiBQbGF0Zm9y
bUNBTGF5ZXI6Om1hc2soKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENhY2hlQ2hyb21pdW1XaW4uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENhY2hlQ2hyb21pdW1XaW4uY3Bw
CmluZGV4IDg2MGRkMDk5NjI4ZDZkYWExZTFkOTIzY2JlYmJiZGM3ZjRhMTBmOTMuLjE4ZTMwNDM4
ODBjN2E0OTE0YjllMDg1OGFmZTExM2M3M2Q4NzYwYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUNocm9taXVtV2luLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2FjaGVD
aHJvbWl1bVdpbi5jcHAKQEAgLTIyMywxMCArMjIzLDEwIEBAIHN0YXRpYyBib29sIExvb2t1cEFs
dE5hbWUoY29uc3QgU3RyaW5nJiBuYW1lLCBTdHJpbmcmIGFsdE5hbWUpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIHN0YXRpYyBpbnQgc3lzdGVtQ3AgPSA6OkdldEFDUCgpOwotICAgIGlu
dCBmb250Q3AgPSBpdGVyLT5zZWNvbmQtPmNvZGVQYWdlOworICAgIGludCBmb250Q3AgPSBpdGVy
LT52YWx1ZS0+Y29kZVBhZ2U7CiAKICAgICBpZiAoKGlzQXNjaWkgJiYgc3lzdGVtQ3AgPT0gZm9u
dENwKSB8fCAoIWlzQXNjaWkgJiYgc3lzdGVtQ3AgIT0gZm9udENwKSkgewotICAgICAgICBhbHRO
YW1lID0gU3RyaW5nKGl0ZXItPnNlY29uZC0+bmFtZSk7CisgICAgICAgIGFsdE5hbWUgPSBTdHJp
bmcoaXRlci0+dmFsdWUtPm5hbWUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAg
LTI3Nyw3ICsyNzcsNyBAQCBzdGF0aWMgYm9vbCBmb250Q29udGFpbnNDaGFyYWN0ZXIoY29uc3Qg
Rm9udFBsYXRmb3JtRGF0YSogZm9udERhdGEsCiAKICAgICBIYXNoTWFwPGNvbnN0IHdjaGFyX3Qq
LCBpY3U6OlVuaWNvZGVTZXQqPjo6aXRlcmF0b3IgaXQgPSBmb250Q21hcENhY2hlLT5maW5kKGZh
bWlseSk7CiAgICAgaWYgKGl0ICE9IGZvbnRDbWFwQ2FjaGUtPmVuZCgpKQotICAgICAgICByZXR1
cm4gaXQtPnNlY29uZC0+Y29udGFpbnMoY2hhcmFjdGVyKTsKKyAgICAgICAgcmV0dXJuIGl0LT52
YWx1ZS0+Y29udGFpbnMoY2hhcmFjdGVyKTsKIAogICAgIEhGT05UIGhmb250ID0gZm9udERhdGEt
Pmhmb250KCk7CiAgICAgSFduZERDIGhkYygwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRVdGlsc0Nocm9taXVtV2luLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRVdGlsc0Nocm9taXVt
V2luLmNwcAppbmRleCBkZjk0MWNiOTAzM2ZkYzA3NjBmNjFkYjljZmFkMWY0YTkyZGRkOWEzLi4x
MGYxZmQwNzg2ZWE0ODgzYTliMzQzMTZhZTA2YzNhYjgyNjk1YjQ2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250VXRpbHNDaHJvbWl1bVdp
bi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9u
dFV0aWxzQ2hyb21pdW1XaW4uY3BwCkBAIC00MTUsNyArNDE1LDcgQEAgYm9vbCBnZXREZXJpdmVk
Rm9udERhdGEoY29uc3QgVUNoYXIqIGZhbWlseSwKICAgICAgICAgLy8gY2hlY2sgaXQgYWdhaW5z
dCB3aGF0IHdlIGFjdHVhbGx5IHdhbnQgKGFzIGlzIGRvbmUgaW4KICAgICAgICAgLy8gRm9udENh
Y2hlV2luLmNwcCkKICAgICAgICAgRm9udERhdGFDYWNoZTo6QWRkUmVzdWx0IGVudHJ5ID0gZm9u
dERhdGFDYWNoZS5hZGQoZm9udEtleSwgRm9udERhdGEoKSk7Ci0gICAgICAgIGRlcml2ZWQgPSAm
ZW50cnkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgZGVyaXZlZCA9ICZlbnRyeS5pdGVyYXRv
ci0+dmFsdWU7CiAgICAgICAgIGRlcml2ZWQtPmhmb250ID0gQ3JlYXRlRm9udEluZGlyZWN0KGxv
Z2ZvbnQpOwogICAgICAgICAvLyBHZXRBc2NlbnQgbWF5IHJldHVybiBrVW5kZWZpbmVkQXNjZW50
LCBidXQgd2Ugc3RpbGwgd2FudCB0bwogICAgICAgICAvLyBjYWNoZSBpdCBzbyB0aGF0IHdlIHdv
bid0IGhhdmUgdG8gY2FsbCBDcmVhdGVGb250SW5kaXJlY3Qgb25jZQpAQCAtNDIzLDcgKzQyMyw3
IEBAIGJvb2wgZ2V0RGVyaXZlZEZvbnREYXRhKGNvbnN0IFVDaGFyKiBmYW1pbHksCiAgICAgICAg
IGRlcml2ZWQtPmFzY2VudCA9IGdldEFzY2VudChkZXJpdmVkLT5oZm9udCk7CiAgICAgICAgIGRl
cml2ZWQtPnNwYWNlR2x5cGggPSBnZXRTcGFjZUdseXBoKGRlcml2ZWQtPmhmb250KTsKICAgICB9
IGVsc2UgewotICAgICAgICBkZXJpdmVkID0gJml0ZXItPnNlY29uZDsKKyAgICAgICAgZGVyaXZl
ZCA9ICZpdGVyLT52YWx1ZTsKICAgICAgICAgLy8gTGFzdCB0aW1lLCBHZXRBc2NlbnQgZmFpbGVk
IHNvIHRoYXQgb25seSBIRk9OVCB3YXMKICAgICAgICAgLy8gY2FjaGVkLiBUcnkgb25jZSBtb3Jl
IGFzc3VtaW5nIHRoYXQgVHJ5UHJlbG9hZEZvbnQKICAgICAgICAgLy8gd2FzIGNhbGxlZCBieSBh
IGNhbGxlciBiZXR3ZWVuIGNhbGxzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyR2xvYmFsQ29u
dGV4dC5jcHAKaW5kZXggZGE5NzgyYWY4MDM1MjIzNWIwYzBmMGIwN2IxNzJiOTQ3MzZmZTZiMC4u
MDJhOTZiODY0ZDMyYTQ5NmIxMjA2ODIzZjYyODBjODNjOWYxMDkzNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJHbG9iYWxD
b250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0N1c3RvbUZpbHRlckdsb2JhbENvbnRleHQuY3BwCkBAIC00NCw3ICs0NCw3IEBAIEN1c3RvbUZp
bHRlckdsb2JhbENvbnRleHQ6OkN1c3RvbUZpbHRlckdsb2JhbENvbnRleHQoKQogQ3VzdG9tRmls
dGVyR2xvYmFsQ29udGV4dDo6fkN1c3RvbUZpbHRlckdsb2JhbENvbnRleHQoKQogewogICAgIGZv
ciAoQ3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbXNNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3By
b2dyYW1zLmJlZ2luKCk7IGl0ZXIgIT0gbV9wcm9ncmFtcy5lbmQoKTsgKytpdGVyKQotICAgICAg
ICBpdGVyLT5zZWNvbmQtPmRldGFjaEZyb21HbG9iYWxDb250ZXh0KCk7CisgICAgICAgIGl0ZXIt
PnZhbHVlLT5kZXRhY2hGcm9tR2xvYmFsQ29udGV4dCgpOwogfQogCiBBTkdMRVdlYktpdEJyaWRn
ZSogQ3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dDo6d2ViZ2xTaGFkZXJWYWxpZGF0b3IoKQpAQCAt
OTEsNyArOTEsNyBAQCBQYXNzUmVmUHRyPEN1c3RvbUZpbHRlclZhbGlkYXRlZFByb2dyYW0+IEN1
c3RvbUZpbHRlckdsb2JhbENvbnRleHQ6OmdldFZhbGlkYXRlZAogewogICAgIEN1c3RvbUZpbHRl
clZhbGlkYXRlZFByb2dyYW1zTWFwOjppdGVyYXRvciBpdGVyID0gbV9wcm9ncmFtcy5maW5kKHBy
b2dyYW1JbmZvKTsKICAgICBpZiAoaXRlciAhPSBtX3Byb2dyYW1zLmVuZCgpKQotICAgICAgICBy
ZXR1cm4gaXRlci0+c2Vjb25kOworICAgICAgICByZXR1cm4gaXRlci0+dmFsdWU7CiAKICAgICBS
ZWZQdHI8Q3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbT4gdmFsaWRhdGVkUHJvZ3JhbSA9IEN1
c3RvbUZpbHRlclZhbGlkYXRlZFByb2dyYW06OmNyZWF0ZSh0aGlzLCBwcm9ncmFtSW5mbyk7CiAg
ICAgbV9wcm9ncmFtcy5zZXQocHJvZ3JhbUluZm8sIHZhbGlkYXRlZFByb2dyYW0uZ2V0KCkpOwpA
QCAtMTA3LDcgKzEwNyw3IEBAIHZvaWQgQ3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dDo6cmVtb3Zl
VmFsaWRhdGVkUHJvZ3JhbShjb25zdCBDdXN0b21GaWx0ZXJWYWxpZGF0CiAjaWZuZGVmIE5ERUJV
RwogICAgIC8vIENoZWNrIHRoYXQgdGhlcmUncyBubyB3YXkgd2UgY291bGQgaGF2ZSB0aGUgc2Ft
ZSBwcm9ncmFtIHVuZGVyIGEgZGlmZmVyZW50IGtleS4KICAgICBmb3IgKGl0ZXIgPSBtX3Byb2dy
YW1zLmJlZ2luKCk7IGl0ZXIgIT0gbV9wcm9ncmFtcy5lbmQoKTsgKytpdGVyKQotICAgICAgICBB
U1NFUlQoaXRlci0+c2Vjb25kICE9IHByb2dyYW0pOworICAgICAgICBBU1NFUlQoaXRlci0+dmFs
dWUgIT0gcHJvZ3JhbSk7CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJQcm9ncmFtLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyUHJvZ3JhbS5j
cHAKaW5kZXggZDFjZjYxMzRmNzBhZThhYmY1MmZjNjIzYTdkNjk2NTM0ODc5ZjYxMi4uOTRlODNk
ZjliODNiMmI1YjU0ZmU3NDdhN2UyYWZjYjQyMjVlOWNmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJQcm9ncmFtLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRl
clByb2dyYW0uY3BwCkBAIC03NSw3ICs3NSw3IEBAIHZvaWQgQ3VzdG9tRmlsdGVyUHJvZ3JhbTo6
cmVtb3ZlQ2xpZW50KEN1c3RvbUZpbHRlclByb2dyYW1DbGllbnQqIGNsaWVudCkKIHZvaWQgQ3Vz
dG9tRmlsdGVyUHJvZ3JhbTo6bm90aWZ5Q2xpZW50cygpCiB7CiAgICAgZm9yIChDdXN0b21GaWx0
ZXJQcm9ncmFtQ2xpZW50TGlzdDo6aXRlcmF0b3IgaXRlciA9IG1fY2xpZW50cy5iZWdpbigpLCBl
bmQgPSBtX2NsaWVudHMuZW5kKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCi0gICAgICAgIGl0ZXIt
PmZpcnN0LT5ub3RpZnlDdXN0b21GaWx0ZXJQcm9ncmFtTG9hZGVkKHRoaXMpOworICAgICAgICBp
dGVyLT5rZXktPm5vdGlmeUN1c3RvbUZpbHRlclByb2dyYW1Mb2FkZWQodGhpcyk7CiB9CiAKIEN1
c3RvbUZpbHRlclByb2dyYW1JbmZvIEN1c3RvbUZpbHRlclByb2dyYW06OnByb2dyYW1JbmZvKCkg
Y29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZi
dXp6L0hhcmZCdXp6U2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9o
YXJmYnV6ei9IYXJmQnV6elNraWEuY3BwCmluZGV4IGY2OGVhNjE5MjQ1Zjg2NmU1YmQwZDU3OGQw
MTA0ODQ0NTI1ODRjMmIuLjFlODg2N2JiNzU3ZjIyNDJlOGY0OTYyZjg3NWIxYmRmN2FlOTkxMmUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hh
cmZCdXp6U2tpYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFy
ZmJ1enovSGFyZkJ1enpTa2lhLmNwcApAQCAtMjQ0LDE4ICsyNDQsMTggQEAgc3RhdGljIEhCX0Zh
Y2VSZWNfKiBnZXRDYWNoZWRIYXJmYnV6ekZhY2UoRm9udFBsYXRmb3JtRGF0YSogcGxhdGZvcm1E
YXRhKQogICAgICAgICBnSGFyZmJ1enpGYWNlQ2FjaGUtPnNldCh1bmlxdWVJRCwgZW50cnkpOwog
ICAgICAgICByZXR1cm4gZW50cnkuZmlyc3Q7CiAgICAgfQotICAgICsrKHJlc3VsdC5nZXQoKS0+
c2Vjb25kLnNlY29uZCk7Ci0gICAgcmV0dXJuIHJlc3VsdC5nZXQoKS0+c2Vjb25kLmZpcnN0Owor
ICAgICsrKHJlc3VsdC5nZXQoKS0+dmFsdWUuc2Vjb25kKTsKKyAgICByZXR1cm4gcmVzdWx0Lmdl
dCgpLT52YWx1ZS5maXJzdDsKIH0KIAogc3RhdGljIHZvaWQgcmVsZWFzZUNhY2hlZEhhcmZidXp6
RmFjZShTa0ZvbnRJRCB1bmlxdWVJRCkKIHsKICAgICBIYXJmYnV6ekZhY2VDYWNoZTo6aXRlcmF0
b3IgcmVzdWx0ID0gZ0hhcmZidXp6RmFjZUNhY2hlLT5maW5kKHVuaXF1ZUlEKTsKICAgICBBU1NF
UlQocmVzdWx0ICE9IGdIYXJmYnV6ekZhY2VDYWNoZS0+ZW5kKCkpOwotICAgIEFTU0VSVChyZXN1
bHQuZ2V0KCktPnNlY29uZC5zZWNvbmQgPiAwKTsKLSAgICAtLShyZXN1bHQuZ2V0KCktPnNlY29u
ZC5zZWNvbmQpOwotICAgIGlmICghKHJlc3VsdC5nZXQoKS0+c2Vjb25kLnNlY29uZCkpIHsKLSAg
ICAgICAgSEJfRnJlZUZhY2UocmVzdWx0LmdldCgpLT5zZWNvbmQuZmlyc3QpOworICAgIEFTU0VS
VChyZXN1bHQuZ2V0KCktPnZhbHVlLnNlY29uZCA+IDApOworICAgIC0tKHJlc3VsdC5nZXQoKS0+
dmFsdWUuc2Vjb25kKTsKKyAgICBpZiAoIShyZXN1bHQuZ2V0KCktPnZhbHVlLnNlY29uZCkpIHsK
KyAgICAgICAgSEJfRnJlZUZhY2UocmVzdWx0LmdldCgpLT52YWx1ZS5maXJzdCk7CiAgICAgICAg
IGdIYXJmYnV6ekZhY2VDYWNoZS0+cmVtb3ZlKHVuaXF1ZUlEKTsKICAgICB9CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6
ek5HRmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9u
Zy9IYXJmQnV6ek5HRmFjZS5jcHAKaW5kZXggMWU1NGFlMzhkOGM4MDQ4YzJiZmM2NGY3ZmQ5NmVi
YjNhYjgwZmVhNC4uMjY0OTM1Y2NjZjQ5YTQ1YjQzNGQ5YjU5NzI1Y2M1YTExYjE0YjYyMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFy
ZkJ1enpOR0ZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hh
cmZidXp6L25nL0hhcmZCdXp6TkdGYWNlLmNwcApAQCAtNzksMTkgKzc5LDE5IEBAIEhhcmZCdXp6
TkdGYWNlOjpIYXJmQnV6ek5HRmFjZShGb250UGxhdGZvcm1EYXRhKiBwbGF0Zm9ybURhdGEsIHVp
bnQ2NF90IHVuaXF1ZUlECiB7CiAgICAgSGFyZkJ1enpOR0ZhY2VDYWNoZTo6QWRkUmVzdWx0IHJl
c3VsdCA9IGhhcmZidXp6RmFjZUNhY2hlKCktPmFkZChtX3VuaXF1ZUlELCAwKTsKICAgICBpZiAo
cmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gRmFj
ZUNhY2hlRW50cnk6OmNyZWF0ZShjcmVhdGVGYWNlKCkpOwotICAgIHJlc3VsdC5pdGVyYXRvci0+
c2Vjb25kLT5yZWYoKTsKLSAgICBtX2ZhY2UgPSByZXN1bHQuaXRlcmF0b3ItPnNlY29uZC0+ZmFj
ZSgpOwotICAgIG1fZ2x5cGhDYWNoZUZvckZhY2VDYWNoZUVudHJ5ID0gcmVzdWx0Lml0ZXJhdG9y
LT5zZWNvbmQtPmdseXBoQ2FjaGUoKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9
IEZhY2VDYWNoZUVudHJ5OjpjcmVhdGUoY3JlYXRlRmFjZSgpKTsKKyAgICByZXN1bHQuaXRlcmF0
b3ItPnZhbHVlLT5yZWYoKTsKKyAgICBtX2ZhY2UgPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5m
YWNlKCk7CisgICAgbV9nbHlwaENhY2hlRm9yRmFjZUNhY2hlRW50cnkgPSByZXN1bHQuaXRlcmF0
b3ItPnZhbHVlLT5nbHlwaENhY2hlKCk7CiB9CiAKIEhhcmZCdXp6TkdGYWNlOjp+SGFyZkJ1enpO
R0ZhY2UoKQogewogICAgIEhhcmZCdXp6TkdGYWNlQ2FjaGU6Oml0ZXJhdG9yIHJlc3VsdCA9IGhh
cmZidXp6RmFjZUNhY2hlKCktPmZpbmQobV91bmlxdWVJRCk7CiAgICAgQVNTRVJUKHJlc3VsdCAh
PSBoYXJmYnV6ekZhY2VDYWNoZSgpLT5lbmQoKSk7Ci0gICAgQVNTRVJUKHJlc3VsdC5nZXQoKS0+
c2Vjb25kLT5yZWZDb3VudCgpID4gMSk7Ci0gICAgcmVzdWx0LmdldCgpLT5zZWNvbmQtPmRlcmVm
KCk7Ci0gICAgaWYgKHJlc3VsdC5nZXQoKS0+c2Vjb25kLT5yZWZDb3VudCgpID09IDEpCisgICAg
QVNTRVJUKHJlc3VsdC5nZXQoKS0+dmFsdWUtPnJlZkNvdW50KCkgPiAxKTsKKyAgICByZXN1bHQu
Z2V0KCktPnZhbHVlLT5kZXJlZigpOworICAgIGlmIChyZXN1bHQuZ2V0KCktPnZhbHVlLT5yZWZD
b3VudCgpID09IDEpCiAgICAgICAgIGhhcmZidXp6RmFjZUNhY2hlKCktPnJlbW92ZShtX3VuaXF1
ZUlEKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL1NpbXBsZUZvbnREYXRhQ29yZVRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhQ29yZVRleHQuY3BwCmluZGV4IDA1MTkzNzQyYzU4
NTJkYmU5YzljZWQ2NGI5YTA3YWFkMmMxZWE0NzcuLjBiNzEzMzQ3ZjYwNDYzNTU0OWU1MGQ1NjM2
NTIxOGIyMzQ0MjZhY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9TaW1wbGVGb250RGF0YUNvcmVUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFDb3JlVGV4dC5jcHAKQEAgLTQzLDcg
KzQzLDcgQEAgQ0ZEaWN0aW9uYXJ5UmVmIFNpbXBsZUZvbnREYXRhOjpnZXRDRlN0cmluZ0F0dHJp
YnV0ZXMoVHlwZXNldHRpbmdGZWF0dXJlcyB0eXBlc2UKIHsKICAgICB1bnNpZ25lZCBrZXkgPSB0
eXBlc2V0dGluZ0ZlYXR1cmVzICsgMTsKICAgICBIYXNoTWFwPHVuc2lnbmVkLCBSZXRhaW5QdHI8
Q0ZEaWN0aW9uYXJ5UmVmPiA+OjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gbV9DRlN0cmluZ0F0dHJp
YnV0ZXMuYWRkKGtleSwgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4oKSk7Ci0gICAgUmV0YWlu
UHRyPENGRGljdGlvbmFyeVJlZj4mIGF0dHJpYnV0ZXNEaWN0aW9uYXJ5ID0gYWRkUmVzdWx0Lml0
ZXJhdG9yLT5zZWNvbmQ7CisgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4mIGF0dHJpYnV0
ZXNEaWN0aW9uYXJ5ID0gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoIWFkZFJl
c3VsdC5pc05ld0VudHJ5KQogICAgICAgICByZXR1cm4gYXR0cmlidXRlc0RpY3Rpb25hcnkuZ2V0
KCk7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9t
YWMvU2ltcGxlRm9udERhdGFNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW0KaW5kZXggZjdiYWJlYzAxMzU4NTliMzI1ZmYzMGEz
MzRhMGQ3OTE5NzU3ZTFlNC4uZjhiYjQzYmE3MGQ5NmJmZTljNWQ3Y2M2YzAwMTUwMmIxZmJiMDY1
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBs
ZUZvbnREYXRhTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9TaW1wbGVGb250RGF0YU1hYy5tbQpAQCAtNDYxLDcgKzQ2MSw3IEBAIGJvb2wgU2ltcGxlRm9u
dERhdGE6OmNhblJlbmRlckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0IFVDaGFyKiBj
aGFyYWN0ZXJzCiAKICAgICBXVEY6Okhhc2hNYXA8U3RyaW5nLCBib29sPjo6QWRkUmVzdWx0IGFk
ZFJlc3VsdCA9IG1fY29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2VTdXBwb3J0LT5hZGQoU3RyaW5n
KGNoYXJhY3RlcnMsIGxlbmd0aCksIGZhbHNlKTsKICAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0Vu
dHJ5KQotICAgICAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAg
IHJldHVybiBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogCiAgICAgUmV0YWluUHRyPENHRm9u
dFJlZj4gY2dGb250KEFkb3B0Q0YsIENURm9udENvcHlHcmFwaGljc0ZvbnQocGxhdGZvcm1EYXRh
KCkuY3RGb250KCksIDApKTsKIApAQCAtNDgxLDcgKzQ4MSw3IEBAIGJvb2wgU2ltcGxlRm9udERh
dGE6OmNhblJlbmRlckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0IFVDaGFyKiBjaGFy
YWN0ZXJzCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgYWRkUmVzdWx0
Lml0ZXJhdG9yLT5zZWNvbmQgPSB0cnVlOworICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUg
PSB0cnVlOwogICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVu
R0xDb21tb24uY3BwCmluZGV4IGNjMTY3Njc4ZmVmMDM3MWFhZjIzMDhmMzYxOGNjNmFmYWZjMzI4
NTguLmFhZjY4ZDhiZTVhNTc4OWE4MGRmMTVkZjE4ZjdmNjg4ZWNjODJkMDIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVu
R0xDb21tb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3BwCkBAIC0xNTcsNyArMTU3LDcgQEAgU3RyaW5n
IEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbjo6Z2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFOR0xF
KFBsYXRmb3JtM0RPYmplY3QKICAgICBpZiAocmVzdWx0ID09IG1fY29udGV4dC0+bV9zaGFkZXJT
b3VyY2VNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybiAiIjsKIAotICAgIEdyYXBoaWNzQ29udGV4
dDNEOjpTaGFkZXJTb3VyY2VFbnRyeSYgZW50cnkgPSByZXN1bHQtPnNlY29uZDsKKyAgICBHcmFw
aGljc0NvbnRleHQzRDo6U2hhZGVyU291cmNlRW50cnkmIGVudHJ5ID0gcmVzdWx0LT52YWx1ZTsK
IAogICAgIFN0cmluZyB0cmFuc2xhdGVkU2hhZGVyU291cmNlOwogICAgIFN0cmluZyBzaGFkZXJJ
bmZvTG9nOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAK
aW5kZXggMTUxNmVhMjYwODRhZWNlY2Y4ZDVlNjA3Mzc2Y2Q1MTIyNDkyMWI5MC4uMGU4MWNjNWY4
ZjZkZjk2MDgwODc2ODJmNmNjNGFiYTdjOGU5ODdlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9u
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhp
Y3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCkBAIC00NjYsNyArNDY2LDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6Y29tcGlsZVNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKIAog
ICAgIGlmIChsZW5ndGgpIHsKICAgICAgICAgU2hhZGVyU291cmNlTWFwOjppdGVyYXRvciByZXN1
bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7Ci0gICAgICAgIEdyYXBoaWNzQ29u
dGV4dDNEOjpTaGFkZXJTb3VyY2VFbnRyeSYgZW50cnkgPSByZXN1bHQtPnNlY29uZDsKKyAgICAg
ICAgR3JhcGhpY3NDb250ZXh0M0Q6OlNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3VsdC0+
dmFsdWU7CiAKICAgICAgICAgR0xzaXplaSBzaXplID0gMDsKICAgICAgICAgT3duQXJyYXlQdHI8
R0xjaGFyPiBpbmZvID0gYWRvcHRBcnJheVB0cihuZXcgR0xjaGFyW2xlbmd0aF0pOwpAQCAtNjgy
LDEwICs2ODIsMTAgQEAgU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjptYXBwZWRTeW1ib2xOYW1l
KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgQU5HTEVTaGFkZXIKICAgICAgICAgaWYgKHJlc3Vs
dCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0g
ICAgICAgIGNvbnN0IFNoYWRlclN5bWJvbE1hcCYgc3ltYm9sTWFwID0gcmVzdWx0LT5zZWNvbmQu
c3ltYm9sTWFwKHN5bWJvbFR5cGUpOworICAgICAgICBjb25zdCBTaGFkZXJTeW1ib2xNYXAmIHN5
bWJvbE1hcCA9IHJlc3VsdC0+dmFsdWUuc3ltYm9sTWFwKHN5bWJvbFR5cGUpOwogICAgICAgICBT
aGFkZXJTeW1ib2xNYXA6OmNvbnN0X2l0ZXJhdG9yIHN5bWJvbEVudHJ5ID0gc3ltYm9sTWFwLmZp
bmQobmFtZSk7CiAgICAgICAgIGlmIChzeW1ib2xFbnRyeSAhPSBzeW1ib2xNYXAuZW5kKCkpCi0g
ICAgICAgICAgICByZXR1cm4gc3ltYm9sRW50cnktPnNlY29uZC5tYXBwZWROYW1lOworICAgICAg
ICAgICAgcmV0dXJuIHN5bWJvbEVudHJ5LT52YWx1ZS5tYXBwZWROYW1lOwogICAgIH0KICAgICBy
ZXR1cm4gbmFtZTsKIH0KQEAgLTExNjMsNyArMTE2Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmdldFNoYWRlcml2KFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyLCBHQzNEZW51bSBwbmFtZSwg
R0MzCiAgICAgICAgICAgICAqdmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ+KGZhbHNlKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICAqdmFsdWUgPSBzdGF0aWNfY2FzdDxp
bnQ+KHJlc3VsdC0+c2Vjb25kLmlzVmFsaWQpOworICAgICAgICAqdmFsdWUgPSBzdGF0aWNfY2Fz
dDxpbnQ+KHJlc3VsdC0+dmFsdWUuaXNWYWxpZCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
SU5GT19MT0dfTEVOR1RIOgogICAgICAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFw
LmVuZCgpKSB7CkBAIC0xMTkwLDcgKzExOTAsNyBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6
OmdldFNoYWRlckluZm9Mb2coUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCiAgICAgaWYgKHJlc3Vs
dCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOyAK
IAotICAgIFNoYWRlclNvdXJjZUVudHJ5IGVudHJ5ID0gcmVzdWx0LT5zZWNvbmQ7CisgICAgU2hh
ZGVyU291cmNlRW50cnkgZW50cnkgPSByZXN1bHQtPnZhbHVlOwogICAgIGlmICghZW50cnkuaXNW
YWxpZCkKICAgICAgICAgcmV0dXJuIGVudHJ5LmxvZzsKIApAQCAtMTIxNiw3ICsxMjE2LDcgQEAg
U3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm0zRE9iamVj
dCBzaGFkZXIpCiAgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKICAg
ICAgICAgcmV0dXJuIFN0cmluZygpOyAKIAotICAgIHJldHVybiByZXN1bHQtPnNlY29uZC5zb3Vy
Y2U7CisgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWUuc291cmNlOwogfQogCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW52Zy9FR0xEaXNwbGF5T3BlblZH
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW52Zy9FR0xEaXNwbGF5
T3BlblZHLmNwcAppbmRleCBkNjgxZDc1ODFmYjNmYmYyOWQ4OGUxMjZlNTM4Mzg3ODIzMGI1MjIw
Li4xYTY4YWVmZjhjYzhjOWY1NDc2YjRmMDUzNTY2MjBmZTE5MTQxYzRjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvRUdMRGlzcGxheU9wZW5WRy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL0VHTERpc3Bs
YXlPcGVuVkcuY3BwCkBAIC0xMjEsNyArMTIxLDcgQEAgRUdMRGlzcGxheU9wZW5WRzo6fkVHTERp
c3BsYXlPcGVuVkcoKQogCiAgICAgSGFzaE1hcDxFR0xTdXJmYWNlLCBFR0xpbnQ+Ojpjb25zdF9p
dGVyYXRvciBlbmQgPSBtX3N1cmZhY2VDb25maWdJZHMuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFw
PEVHTFN1cmZhY2UsIEVHTGludD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zdXJmYWNlQ29uZmln
SWRzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgZGVzdHJveVN1cmZhY2UoKCpp
dCkuZmlyc3QpOworICAgICAgICBkZXN0cm95U3VyZmFjZSgoKml0KS5rZXkpOwogCiAgICAgZWds
VGVybWluYXRlKG1fZGlzcGxheSk7CiAgICAgQVNTRVJUX0VHTF9OT19FUlJPUigpOwpAQCAtMzM4
LDcgKzMzOCw3IEBAIHZvaWQgRUdMRGlzcGxheU9wZW5WRzo6ZGVzdHJveVN1cmZhY2UoY29uc3Qg
RUdMU3VyZmFjZSYgc3VyZmFjZSkKIAogICAgICAgICAvLyAuLi5idXQgb25seSBpZiB0aGVyZSdz
IG5vIG90aGVyIHN1cmZhY2VzIGFzc29jaWF0ZWQgdG8gdGhhdCBjb250ZXh0LgogICAgICAgICBm
b3IgKEhhc2hNYXA8RUdMU3VyZmFjZSwgRUdMaW50Pjo6aXRlcmF0b3IgaXQgPSBtX3N1cmZhY2VD
b25maWdJZHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAoKCpp
dCkuc2Vjb25kID09IHN1cmZhY2VDb25maWdJZCkgeworICAgICAgICAgICAgaWYgKCgqaXQpLnZh
bHVlID09IHN1cmZhY2VDb25maWdJZCkgewogICAgICAgICAgICAgICAgIGlzQ29udGV4dFJlZmVy
ZW5jZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAt
MzU0LDcgKzM1NCw3IEBAIHZvaWQgRUdMRGlzcGxheU9wZW5WRzo6ZGVzdHJveVN1cmZhY2UoY29u
c3QgRUdMU3VyZmFjZSYgc3VyZmFjZSkKIAogICAgIEhhc2hNYXA8RUdMTmF0aXZlV2luZG93VHlw
ZSwgRUdMU3VyZmFjZT46Oml0ZXJhdG9yIGVuZCA9IG1fd2luZG93U3VyZmFjZXMuZW5kKCk7CiAg
ICAgZm9yIChIYXNoTWFwPEVHTE5hdGl2ZVdpbmRvd1R5cGUsIEVHTFN1cmZhY2U+OjppdGVyYXRv
ciBpdCA9IG1fd2luZG93U3VyZmFjZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAg
ICAgIGlmICgoKml0KS5zZWNvbmQgPT0gc3VyZmFjZSkgeworICAgICAgICBpZiAoKCppdCkudmFs
dWUgPT0gc3VyZmFjZSkgewogICAgICAgICAgICAgbV93aW5kb3dTdXJmYWNlcy5yZW1vdmUoaXQp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTQwOSw3ICs0MDksNyBAQCBFR0xD
b250ZXh0IEVHTERpc3BsYXlPcGVuVkc6OmNvbnRleHRGb3JTdXJmYWNlKGNvbnN0IEVHTFN1cmZh
Y2UmIHN1cmZhY2UpCiAgICAgSGFzaE1hcDxFR0xpbnQsIEVHTENvbnRleHQ+OjppdGVyYXRvciBl
bmQgPSBtX2NvbnRleHRzLmVuZCgpOwogCiAgICAgZm9yIChIYXNoTWFwPEVHTGludCwgRUdMQ29u
dGV4dD46Oml0ZXJhdG9yIGl0ID0gbV9jb250ZXh0cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKLSAgICAgICAgZWdsTWFrZUN1cnJlbnQobV9kaXNwbGF5LCBzdXJmYWNlLCBzdXJmYWNlLCAo
Kml0KS5zZWNvbmQpOworICAgICAgICBlZ2xNYWtlQ3VycmVudChtX2Rpc3BsYXksIHN1cmZhY2Us
IHN1cmZhY2UsICgqaXQpLnZhbHVlKTsKICAgICAgICAgaWYgKGVnbEdldEVycm9yKCkgPT0gRUdM
X1NVQ0NFU1MpIHsKICAgICAgICAgICAgIC8vIFJlc3RvcmUgcHJldmlvdXMgc3VyZmFjZS9jb250
ZXh0LgogICAgICAgICAgICAgaWYgKGN1cnJlbnRDb250ZXh0ICE9IEVHTF9OT19DT05URVhUKSB7
CkBAIC00MTcsOCArNDE3LDggQEAgRUdMQ29udGV4dCBFR0xEaXNwbGF5T3BlblZHOjpjb250ZXh0
Rm9yU3VyZmFjZShjb25zdCBFR0xTdXJmYWNlJiBzdXJmYWNlKQogICAgICAgICAgICAgICAgIEFT
U0VSVF9FR0xfTk9fRVJST1IoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8vIENvb2ws
IHN1cmZhY2UgaXMgY29tcGF0aWJsZSB0byBvbmUgb2Ygb3VyIGV4aXN0aW5nIGNvbnRleHRzLgot
ICAgICAgICAgICAgbV9jb21wYXRpYmxlQ29uZmlnSWRzLnNldChzdXJmYWNlQ29uZmlnSWQsICgq
aXQpLmZpcnN0KTsKLSAgICAgICAgICAgIHJldHVybiAoKml0KS5zZWNvbmQ7CisgICAgICAgICAg
ICBtX2NvbXBhdGlibGVDb25maWdJZHMuc2V0KHN1cmZhY2VDb25maWdJZCwgKCppdCkua2V5KTsK
KyAgICAgICAgICAgIHJldHVybiAoKml0KS52YWx1ZTsKICAgICAgICAgfQogICAgIH0KICAgICAv
LyBSZXN0b3JlIHByZXZpb3VzIHN1cmZhY2UvY29udGV4dC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAK
aW5kZXggOGYwYzY4ZDk5ZDMyZDVlMzg4YmE2ODc0ODM5NWZlYTUwOWYxMGJlYS4uODczZjkwNDg5
OTkxZGYxODY5ZWYyMjQxYTI0MTNkYjk4ZTU2NjY0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAK
QEAgLTcyLDcgKzcyLDcgQEAgcHVibGljOgogICAgICAgICB7CiAgICAgICAgICAgICBHTENvbnRl
eHREYXRhTWFwOjppdGVyYXRvciBpdCA9IGdsQ29udGV4dERhdGFNYXAoKS5maW5kKGNvbnRleHQt
PnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKSk7CiAgICAgICAgICAgICBpZiAoaXQgIT0gZ2xD
b250ZXh0RGF0YU1hcCgpLmVuZCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBpdC0+c2Vjb25k
OworICAgICAgICAgICAgICAgIHJldHVybiBpdC0+dmFsdWU7CiAKICAgICAgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgU2hhcmVkR0xEYXRhKGNvbnRleHQpKTsKICAgICAgICAgfQpAQCAtOTIs
NyArOTIsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBHTENvbnRleHREYXRhTWFwOjpjb25zdF9p
dGVyYXRvciBlbmQgPSBnbENvbnRleHREYXRhTWFwKCkuZW5kKCk7CiAgICAgICAgICAgICBHTENv
bnRleHREYXRhTWFwOjppdGVyYXRvciBpdDsKICAgICAgICAgICAgIGZvciAoaXQgPSBnbENvbnRl
eHREYXRhTWFwKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAg
aWYgKGl0LT5zZWNvbmQgPT0gdGhpcykKKyAgICAgICAgICAgICAgICBpZiAoaXQtPnZhbHVlID09
IHRoaXMpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlclNoYWRlck1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcAppbmRleCA3M2Q2ZmVmYmIxYjhm
ODJjZDc4ZDU2N2NkNWQ0ZjY5ZjgxMTljOTI1Li41Y2E4Yzk2YmZlNDUyOTUyYjQzYjY0MjM4NTFi
MWZjODM1ZDczOWZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5j
cHAKQEAgLTE5OSw3ICsxOTksNyBAQCBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtPiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6Z2V0U2hhZGVyUHJvZwogCiAgICAgVGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW1NYXA6Oml0ZXJhdG9yIGl0ID0gbV90ZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbU1hcC5maW5kKHNoYWRlclR5cGUpOwogICAgIGlmIChpdCAhPSBtX3RleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtTWFwLmVuZCgpKQotICAgICAgICByZXR1cm4gaXQtPnNlY29u
ZDsKKyAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKIAogICAgIHN3aXRjaCAoc2hhZGVyVHlwZSkg
ewogICAgIGNhc2UgU2ltcGxlOgpAQCAtNzU5LDcgKzc1OSw3IEBAIFBhc3NSZWZQdHI8U3RhbmRh
cmRGaWx0ZXJQcm9ncmFtPiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6Z2V0U2hhZGVyRm9y
RmlsdGVyCiAKICAgICAgICAgbV9maWx0ZXJNYXAuYWRkKGtleSwgcHJvZ3JhbSk7CiAgICAgfSBl
bHNlCi0gICAgICAgIHByb2dyYW0gPSBpdGVyYXRvci0+c2Vjb25kOworICAgICAgICBwcm9ncmFt
ID0gaXRlcmF0b3ItPnZhbHVlOwogCiAgICAgcmV0dXJuIHByb2dyYW07CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250UGxhdGZvcm1EYXRh
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRQbGF0Zm9y
bURhdGEuY3BwCmluZGV4IDM1NmY3NTNkNDQzZTYyMjU4NjAwODU5MjdhMmE0Nzc0MjAyODYwZDQu
LjVhMjk1YmI0MGZjMTU4YWUzOTFmZjM1OTYyMGYxYTkzYTAzNzI2ZDcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRQbGF0Zm9ybURhdGEuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRQbGF0Zm9y
bURhdGEuY3BwCkBAIC0yODcsOSArMjg3LDkgQEAgc3RhdGljIFBhc3NSZWZQdHI8Rml4ZWRTaXpl
Rm9udERhdGE+IGNyZWF0ZUZpeGVkU2l6ZUZvbnREYXRhKGNvbnN0IEF0b21pY1N0cmluZyYKICAg
ICBGaXhlZFNpemVGb250RGF0YUtleSBrZXkoZmFtaWx5LCB3ZWlnaHQsIGl0YWxpYyk7CiAgICAg
Rml4ZWRTaXplRm9udENhY2hlOjpBZGRSZXN1bHQgcmVzdWx0ID0gZ19maXhlZFNpemVGb250Q2Fj
aGUuYWRkKGtleSwgUmVmUHRyPEZpeGVkU2l6ZUZvbnREYXRhPigpKTsKICAgICBpZiAocmVzdWx0
LmlzTmV3RW50cnkpCi0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gRml4ZWRTaXpl
Rm9udERhdGE6OmNyZWF0ZShmYW1pbHksIHdlaWdodCwgaXRhbGljKTsKKyAgICAgICAgcmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZSA9IEZpeGVkU2l6ZUZvbnREYXRhOjpjcmVhdGUoZmFtaWx5LCB3ZWln
aHQsIGl0YWxpYyk7CiAKLSAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAg
cmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiB9CiAKIHN0YXRpYyBMT05HIHRvR0RJRm9u
dFdlaWdodChGb250V2VpZ2h0IGZvbnRXZWlnaHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvRGF0YU9iamVjdEd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvRGF0YU9iamVjdEd0ay5jcHAKaW5kZXggMWE4NGY4YmQzMTk1MmIyOGUyNjgyNzFkZDJh
NWY1N2Y0NGQ4MjdkNy4uYWRmYzY2ZTAxNWU1MDIyNjc4OGMyMTQ3NjhhMTViMjkxMzY4NDNiOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RhdGFPYmplY3RHdGsuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmNwcApAQCAt
MTcxLDcgKzE3MSw3IEBAIERhdGFPYmplY3RHdGsqIERhdGFPYmplY3RHdGs6OmZvckNsaXBib2Fy
ZChHdGtDbGlwYm9hcmQqIGNsaXBib2FyZCkKICAgICB9CiAKICAgICBIYXNoTWFwPEd0a0NsaXBi
b2FyZCosIFJlZlB0cjxEYXRhT2JqZWN0R3RrPiA+OjppdGVyYXRvciBpdCA9IG9iamVjdE1hcC5m
aW5kKGNsaXBib2FyZCk7Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgcmV0dXJu
IGl0LT52YWx1ZS5nZXQoKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL0d0a0RyYWdBbmREcm9wSGVscGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9HdGtEcmFnQW5kRHJvcEhlbHBlci5jcHAKaW5kZXggNzYzZDEyMGQwOTQxNjIyNzI2
NjBjNjA2MzJhMTkyOTg2ZjU0MmVhNC4uZmMyZjU2ZTYxNjZlYjFhYWNkYmFkYThmNTJmZWYzYzZk
ZDg4NjRjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0RyYWdB
bmREcm9wSGVscGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrRHJh
Z0FuZERyb3BIZWxwZXIuY3BwCkBAIC03MCw3ICs3MCw3IEBAIHZvaWQgR3RrRHJhZ0FuZERyb3BI
ZWxwZXI6OmhhbmRsZUdldERyYWdEYXRhKEdka0RyYWdDb250ZXh0KiBjb250ZXh0LCBHdGtTZWxl
Y3RpCiAgICAgRHJhZ2dpbmdEYXRhT2JqZWN0c01hcDo6aXRlcmF0b3IgaXRlcmF0b3IgPSBtX2Ry
YWdnaW5nRGF0YU9iamVjdHMuZmluZChjb250ZXh0KTsKICAgICBpZiAoaXRlcmF0b3IgPT0gbV9k
cmFnZ2luZ0RhdGFPYmplY3RzLmVuZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgUGFzdGVib2Fy
ZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+ZmlsbFNlbGVjdGlvbkRhdGEoc2Vs
ZWN0aW9uRGF0YSwgaW5mbywgaXRlcmF0b3ItPnNlY29uZC5nZXQoKSk7CisgICAgUGFzdGVib2Fy
ZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+ZmlsbFNlbGVjdGlvbkRhdGEoc2Vs
ZWN0aW9uRGF0YSwgaW5mbywgaXRlcmF0b3ItPnZhbHVlLmdldCgpKTsKIH0KIAogc3RydWN0IEhh
bmRsZURyYWdMYXRlckRhdGEgewpAQCAtMTE2LDcgKzExNiw3IEBAIHZvaWQgR3RrRHJhZ0FuZERy
b3BIZWxwZXI6OmhhbmRsZURyYWdMZWF2ZShHZGtEcmFnQ29udGV4dCogZ2RrQ29udGV4dCwgRHJh
Z0V4aXRlCiAgICAgLy8gdGhlIGRyYWctZHJvcCBzaWduYWwuIFdlIHdhbnQgdGhlIGFjdGlvbnMg
Zm9yIGRyYWctbGVhdmUgdG8gaGFwcGVuIGFmdGVyCiAgICAgLy8gdGhvc2UgZm9yIGRyYWctZHJv
cCwgc28gc2NoZWR1bGUgdGhlbSB0byBoYXBwZW4gYXN5bmNocm9ub3VzbHkgaGVyZS4KICAgICBI
YW5kbGVEcmFnTGF0ZXJEYXRhKiBkYXRhID0gbmV3IEhhbmRsZURyYWdMYXRlckRhdGE7Ci0gICAg
ZGF0YS0+Y29udGV4dCA9IGl0ZXJhdG9yLT5zZWNvbmQ7CisgICAgZGF0YS0+Y29udGV4dCA9IGl0
ZXJhdG9yLT52YWx1ZTsKICAgICBkYXRhLT5jb250ZXh0LT5leGl0ZWRDYWxsYmFjayA9IGV4aXRl
ZENhbGxiYWNrOwogICAgIGRhdGEtPmdsdWUgPSB0aGlzOwogICAgIGdfdGltZW91dF9hZGQoMCwg
cmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oaGFuZGxlRHJhZ0xlYXZlTGF0ZXJDYWxsYmFj
ayksIGRhdGEpOwpAQCAtMTQwLDcgKzE0MCw3IEBAIFBhc3NPd25QdHI8RHJhZ0RhdGE+IEd0a0Ry
YWdBbmREcm9wSGVscGVyOjpoYW5kbGVEcmFnTW90aW9uKEdka0RyYWdDb250ZXh0KiBjb250CiAg
ICAgICAgIG1fZHJvcHBpbmdDb250ZXh0cy5zZXQoY29udGV4dCwgZHJvcHBpbmdDb250ZXh0KTsK
ICAgICAgICAgcXVlcnlOZXdEcm9wQ29udGV4dERhdGEoZHJvcHBpbmdDb250ZXh0LCBtX3dpZGdl
dCwgdGltZSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZHJvcHBpbmdDb250ZXh0ID0gaXRlcmF0
b3ItPnNlY29uZDsKKyAgICAgICAgZHJvcHBpbmdDb250ZXh0ID0gaXRlcmF0b3ItPnZhbHVlOwog
ICAgICAgICBkcm9wcGluZ0NvbnRleHQtPmxhc3RNb3Rpb25Qb3NpdGlvbiA9IHBvc2l0aW9uOwog
ICAgIH0KIApAQCAtMTYyLDcgKzE2Miw3IEBAIFBhc3NPd25QdHI8RHJhZ0RhdGE+IEd0a0RyYWdB
bmREcm9wSGVscGVyOjpoYW5kbGVEcmFnRGF0YVJlY2VpdmVkKEdka0RyYWdDb250ZXh0CiAgICAg
aWYgKGl0ZXJhdG9yID09IG1fZHJvcHBpbmdDb250ZXh0cy5lbmQoKSkKICAgICAgICAgcmV0dXJu
IGFkb3B0UHRyKHN0YXRpY19jYXN0PERyYWdEYXRhKj4oMCkpOwogCi0gICAgRHJvcHBpbmdDb250
ZXh0KiBkcm9wcGluZ0NvbnRleHQgPSBpdGVyYXRvci0+c2Vjb25kOworICAgIERyb3BwaW5nQ29u
dGV4dCogZHJvcHBpbmdDb250ZXh0ID0gaXRlcmF0b3ItPnZhbHVlOwogICAgIGRyb3BwaW5nQ29u
dGV4dC0+cGVuZGluZ0RhdGFSZXF1ZXN0cy0tOwogICAgIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1
bHRQYXN0ZWJvYXJkSGVscGVyKCktPmZpbGxEYXRhT2JqZWN0RnJvbURyb3BEYXRhKHNlbGVjdGlv
bkRhdGEsIGluZm8sIGRyb3BwaW5nQ29udGV4dC0+ZGF0YU9iamVjdC5nZXQoKSk7CiAKQEAgLTE4
NSw3ICsxODUsNyBAQCBQYXNzT3duUHRyPERyYWdEYXRhPiBHdGtEcmFnQW5kRHJvcEhlbHBlcjo6
aGFuZGxlRHJhZ0Ryb3AoR2RrRHJhZ0NvbnRleHQqIGNvbnRleAogICAgIGlmIChpdGVyYXRvciA9
PSBtX2Ryb3BwaW5nQ29udGV4dHMuZW5kKCkpCiAgICAgICAgIHJldHVybiBhZG9wdFB0cihzdGF0
aWNfY2FzdDxEcmFnRGF0YSo+KDApKTsKIAotICAgIERyb3BwaW5nQ29udGV4dCogZHJvcHBpbmdD
b250ZXh0ID0gaXRlcmF0b3ItPnNlY29uZDsKKyAgICBEcm9wcGluZ0NvbnRleHQqIGRyb3BwaW5n
Q29udGV4dCA9IGl0ZXJhdG9yLT52YWx1ZTsKICAgICBkcm9wcGluZ0NvbnRleHQtPmRyb3BIYXBw
ZW5lZCA9IHRydWU7CiAKICAgICByZXR1cm4gYWRvcHRQdHIobmV3IERyYWdEYXRhKGRyb3BwaW5n
Q29udGV4dC0+ZGF0YU9iamVjdC5nZXQoKSwgcG9zaXRpb24sIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5jcHAK
aW5kZXggOTI1MzlhMjIwZTkyNjEyMjE5ODJiYWE2M2Q2NzAzMzQzZTk2M2RkNy4uYzM0ZjI4NjI3
ZTg4MTQ3YjljZWQxNmM2NjhjYWVlM2NjNzgzMzkwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuY3BwCkBA
IC01OCw3ICs1OCw3IEBAIHN0YXRpYyBHZGtGaWx0ZXJSZXR1cm4gZmlsdGVyWERhbWFnZUV2ZW50
KEdka1hFdmVudCogZ2RrWEV2ZW50LCBHZGtFdmVudCogZXZlbnQsCiAgICAgaWYgKGkgPT0gd2lu
ZG93SGFzaE1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuIEdES19GSUxURVJfQ09OVElOVUU7CiAK
LSAgICBpLT5zZWNvbmQtPmNhbGxEYW1hZ2VOb3RpZnlDYWxsYmFjaygpOworICAgIGktPnZhbHVl
LT5jYWxsRGFtYWdlTm90aWZ5Q2FsbGJhY2soKTsKICAgICBYRGFtYWdlU3VidHJhY3QoR0RLX0RJ
U1BMQVlfWERJU1BMQVkoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSksIGRhbWFnZUV2ZW50LT5k
YW1hZ2UsIE5vbmUsIE5vbmUpOwogICAgIHJldHVybiBHREtfRklMVEVSX1JFTU9WRTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0azMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrMy5jcHAKaW5kZXgg
Nzc0OTM5MTUxNzEzZGYwMTEzNGQ2Y2VhNGVkOWQ3MDRiNGRjZmMwYi4uMGE4MzgyN2M3ZmViY2Jl
NDA1NDhmYWQ1NjJiNTQxMTcxZWMxNjlmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrMy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL1JlbmRlclRoZW1lR3RrMy5jcHAKQEAgLTU2LDcgKzU2LDcgQEAgc3RhdGljIHZvaWQg
Z3RrU3R5bGVDaGFuZ2VkQ2FsbGJhY2soR09iamVjdCosIEdQYXJhbVNwZWMqKQogewogICAgIFN0
eWxlQ29udGV4dE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gc3R5bGVDb250ZXh0TWFwKCkuZW5k
KCk7CiAgICAgZm9yIChTdHlsZUNvbnRleHRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBzdHls
ZUNvbnRleHRNYXAoKS5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQotICAgICAgICBndGtf
c3R5bGVfY29udGV4dF9pbnZhbGlkYXRlKGl0ZXItPnNlY29uZC5nZXQoKSk7CisgICAgICAgIGd0
a19zdHlsZV9jb250ZXh0X2ludmFsaWRhdGUoaXRlci0+dmFsdWUuZ2V0KCkpOwogCiAgICAgUGFn
ZTo6c2NoZWR1bGVGb3JjZWRTdHlsZVJlY2FsY0ZvckFsbFBhZ2VzKCk7CiB9CkBAIC03OSw3ICs3
OSw3IEBAIHN0YXRpYyBHdGtTdHlsZUNvbnRleHQqIGdldFN0eWxlQ29udGV4dChHVHlwZSB3aWRn
ZXRUeXBlKQogewogICAgIFN0eWxlQ29udGV4dE1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IHN0eWxl
Q29udGV4dE1hcCgpLmFkZCh3aWRnZXRUeXBlLCAwKTsKICAgICBpZiAoIXJlc3VsdC5pc05ld0Vu
dHJ5KQotICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQuZ2V0KCk7CisgICAg
ICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpOwogCiAgICAgR3RrV2lkZ2V0
UGF0aCogcGF0aCA9IGd0a193aWRnZXRfcGF0aF9uZXcoKTsKICAgICBndGtfd2lkZ2V0X3BhdGhf
YXBwZW5kX3R5cGUocGF0aCwgd2lkZ2V0VHlwZSk7CkBAIC0xMTEsNyArMTExLDcgQEAgc3RhdGlj
IEd0a1N0eWxlQ29udGV4dCogZ2V0U3R5bGVDb250ZXh0KEdUeXBlIHdpZGdldFR5cGUpCiAgICAg
Z3RrX3N0eWxlX2NvbnRleHRfc2V0X3BhdGgoY29udGV4dC5nZXQoKSwgcGF0aCk7CiAgICAgZ3Rr
X3dpZGdldF9wYXRoX2ZyZWUocGF0aCk7CiAKLSAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9
IGNvbnRleHQ7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGNvbnRleHQ7CiAgICAgcmV0
dXJuIGNvbnRleHQuZ2V0KCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9TY3JvbGxiYXJUaGVtZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21h
Yy9TY3JvbGxiYXJUaGVtZU1hYy5tbQppbmRleCA0YjM2N2FlNmQ5MDI1ZjUwMmNmYTg4YTAwMmJi
YTk2MTNmNzJlNTE4Li44NGZkMGZlYjNmN2YxZjFjNGFhNDljMTJiNjhiZTg0MTQyM2U4N2VmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMu
bW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbGJhclRoZW1lTWFjLm1t
CkBAIC04Niw4ICs4Niw4IEBAIHN0YXRpYyBTY3JvbGxiYXJQYWludGVyTWFwKiBzY3JvbGxiYXJN
YXAoKQogICAgICAgICByZXR1cm47CiAgICAgU2Nyb2xsYmFyUGFpbnRlck1hcDo6aXRlcmF0b3Ig
ZW5kID0gc2Nyb2xsYmFyTWFwKCktPmVuZCgpOwogICAgIGZvciAoU2Nyb2xsYmFyUGFpbnRlck1h
cDo6aXRlcmF0b3IgaXQgPSBzY3JvbGxiYXJNYXAoKS0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7Ci0gICAgICAgIGl0LT5maXJzdC0+c3R5bGVDaGFuZ2VkKCk7Ci0gICAgICAgIGl0LT5maXJz
dC0+aW52YWxpZGF0ZSgpOworICAgICAgICBpdC0+a2V5LT5zdHlsZUNoYW5nZWQoKTsKKyAgICAg
ICAgaXQtPmtleS0+aW52YWxpZGF0ZSgpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFsU3RvcmFnZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWxTdG9yYWdlLmNwcAppbmRleCBmNjI0
ZDRmY2IyOTJjYzQwYzViNjllZWRmM2U1Yzg3NTE1MmYwMWY5Li44YjVhYzQ3OGIyMTM1MDZjZDlj
ZWFjYTliYTU4NTFiY2QyOTNhNWM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL0NyZWRlbnRpYWxTdG9yYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWxTdG9yYWdlLmNwcApAQCAtMTQ3LDcgKzE0Nyw3IEBAIGJv
b2wgQ3JlZGVudGlhbFN0b3JhZ2U6OnNldChjb25zdCBDcmVkZW50aWFsJiBjcmVkZW50aWFsLCBj
b25zdCBLVVJMJiB1cmwpCiAgICAgaWYgKGl0ZXIgPT0gcGF0aFRvRGVmYXVsdFByb3RlY3Rpb25T
cGFjZU1hcCgpLmVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgQVNTRVJUKG9yaWdp
bnNXaXRoQ3JlZGVudGlhbHMoKS5jb250YWlucyhvcmlnaW5TdHJpbmdGcm9tVVJMKHVybCkpKTsK
LSAgICBwcm90ZWN0aW9uU3BhY2VUb0NyZWRlbnRpYWxNYXAoKS5zZXQoaXRlci0+c2Vjb25kLCBj
cmVkZW50aWFsKTsKKyAgICBwcm90ZWN0aW9uU3BhY2VUb0NyZWRlbnRpYWxNYXAoKS5zZXQoaXRl
ci0+dmFsdWUsIGNyZWRlbnRpYWwpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xNTYsNyAr
MTU2LDcgQEAgQ3JlZGVudGlhbCBDcmVkZW50aWFsU3RvcmFnZTo6Z2V0KGNvbnN0IEtVUkwmIHVy
bCkKICAgICBQYXRoVG9EZWZhdWx0UHJvdGVjdGlvblNwYWNlTWFwOjppdGVyYXRvciBpdGVyID0g
ZmluZERlZmF1bHRQcm90ZWN0aW9uU3BhY2VGb3JVUkwodXJsKTsKICAgICBpZiAoaXRlciA9PSBw
YXRoVG9EZWZhdWx0UHJvdGVjdGlvblNwYWNlTWFwKCkuZW5kKCkpCiAgICAgICAgIHJldHVybiBD
cmVkZW50aWFsKCk7Ci0gICAgcmV0dXJuIHByb3RlY3Rpb25TcGFjZVRvQ3JlZGVudGlhbE1hcCgp
LmdldChpdGVyLT5zZWNvbmQpOworICAgIHJldHVybiBwcm90ZWN0aW9uU3BhY2VUb0NyZWRlbnRp
YWxNYXAoKS5nZXQoaXRlci0+dmFsdWUpOwogfQogCiB2b2lkIENyZWRlbnRpYWxTdG9yYWdlOjpz
ZXRQcml2YXRlTW9kZShib29sIG1vZGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL0hUVFBIZWFkZXJNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9IVFRQSGVhZGVyTWFwLmNwcAppbmRleCA1MDA5MWUxOWQzYWY1NmZmNGE4ZGYxNzVi
Zjg5Nzg3MDA3NjE0MjgwLi5kZWZlMWFlODRiZjBhZGYwNzc5NDk1NWIxMWE1ZGM3M2VhMDIzZTI2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBIZWFkZXJN
YXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUEhlYWRlck1h
cC5jcHAKQEAgLTUyLDcgKzUyLDcgQEAgUGFzc093blB0cjxDcm9zc1RocmVhZEhUVFBIZWFkZXJN
YXBEYXRhPiBIVFRQSGVhZGVyTWFwOjpjb3B5RGF0YSgpIGNvbnN0CiAKICAgICBIVFRQSGVhZGVy
TWFwOjpjb25zdF9pdGVyYXRvciBlbmRfaXQgPSBlbmQoKTsKICAgICBmb3IgKEhUVFBIZWFkZXJN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYmVnaW4oKTsgaXQgIT0gZW5kX2l0OyArK2l0KSB7Ci0g
ICAgICAgIGRhdGEtPmFwcGVuZChtYWtlX3BhaXIoaXQtPmZpcnN0LnN0cmluZygpLmlzb2xhdGVk
Q29weSgpLCBpdC0+c2Vjb25kLmlzb2xhdGVkQ29weSgpKSk7CisgICAgICAgIGRhdGEtPmFwcGVu
ZChtYWtlX3BhaXIoaXQtPmtleS5zdHJpbmcoKS5pc29sYXRlZENvcHkoKSwgaXQtPnZhbHVlLmlz
b2xhdGVkQ29weSgpKSk7CiAgICAgfQogICAgIHJldHVybiBkYXRhLnJlbGVhc2UoKTsKIH0KQEAg
LTEwMCw3ICsxMDAsNyBAQCBTdHJpbmcgSFRUUEhlYWRlck1hcDo6Z2V0KGNvbnN0IGNoYXIqIG5h
bWUpIGNvbnN0CiAgICAgY29uc3RfaXRlcmF0b3IgaSA9IGZpbmQ8Y29uc3QgY2hhciosIENhc2VG
b2xkaW5nQ1N0cmluZ1RyYW5zbGF0b3I+KG5hbWUpOwogICAgIGlmIChpID09IGVuZCgpKQogICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgcmV0dXJuIGktPnNlY29uZDsKKyAgICByZXR1cm4g
aS0+dmFsdWU7CiB9CiAgICAgCiBib29sIEhUVFBIZWFkZXJNYXA6OmNvbnRhaW5zKGNvbnN0IGNo
YXIqIG5hbWUpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL01JTUVIZWFkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9NSU1F
SGVhZGVyLmNwcAppbmRleCA1ZDZiODU4ZjQ2ZTQzODNmY2IyZmVhNjI4NThhZjc1MzJkNDNhNWFm
Li5mNGUzZWJmNjc0ZGU2YmQxZDI0YTk1OTBhNDgxOGJlYjZmZDhkZTYzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL01JTUVIZWFkZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvTUlNRUhlYWRlci5jcHAKQEAgLTg2LDcgKzg2LDcg
QEAgUGFzc1JlZlB0cjxNSU1FSGVhZGVyPiBNSU1FSGVhZGVyOjpwYXJzZUhlYWRlcihTaGFyZWRC
dWZmZXJDaHVua1JlYWRlciogYnVmZmVyKQogICAgIEtleVZhbHVlTWFwOjppdGVyYXRvciBtaW1l
UGFyYW1ldGVyc0l0ZXJhdG9yID0ga2V5VmFsdWVQYWlycy5maW5kKCJjb250ZW50LXR5cGUiKTsK
ICAgICBpZiAobWltZVBhcmFtZXRlcnNJdGVyYXRvciAhPSBrZXlWYWx1ZVBhaXJzLmVuZCgpKSB7
CiAgICAgICAgIC8vIEZJWE1FOiBtYWtlIENvbnRlbnRUeXBlUGFyc2VyIG1vcmUgZmxleGlibGUg
c28gd2UgZG9uJ3QgaGF2ZSB0byBzeW50aGVzaXplIHRoZSAiQ29udGVudC1UeXBlOiIuCi0gICAg
ICAgIENvbnRlbnRUeXBlUGFyc2VyIGNvbnRlbnRUeXBlUGFyc2VyKG1ha2VTdHJpbmcoIkNvbnRl
bnQtVHlwZToiLCBtaW1lUGFyYW1ldGVyc0l0ZXJhdG9yLT5zZWNvbmQpKTsKKyAgICAgICAgQ29u
dGVudFR5cGVQYXJzZXIgY29udGVudFR5cGVQYXJzZXIobWFrZVN0cmluZygiQ29udGVudC1UeXBl
OiIsIG1pbWVQYXJhbWV0ZXJzSXRlcmF0b3ItPnZhbHVlKSk7CiAgICAgICAgIG1pbWVIZWFkZXIt
Pm1fY29udGVudFR5cGUgPSBjb250ZW50VHlwZVBhcnNlci5taW1lVHlwZSgpOwogICAgICAgICBp
ZiAoIW1pbWVIZWFkZXItPmlzTXVsdGlwYXJ0KCkpCiAgICAgICAgICAgICBtaW1lSGVhZGVyLT5t
X2NoYXJzZXQgPSBjb250ZW50VHlwZVBhcnNlci5jaGFyc2V0KCkuc3RyaXBXaGl0ZVNwYWNlKCk7
CkBAIC0xMDUsMTEgKzEwNSwxMSBAQCBQYXNzUmVmUHRyPE1JTUVIZWFkZXI+IE1JTUVIZWFkZXI6
OnBhcnNlSGVhZGVyKFNoYXJlZEJ1ZmZlckNodW5rUmVhZGVyKiBidWZmZXIpCiAKICAgICBtaW1l
UGFyYW1ldGVyc0l0ZXJhdG9yID0ga2V5VmFsdWVQYWlycy5maW5kKCJjb250ZW50LXRyYW5zZmVy
LWVuY29kaW5nIik7CiAgICAgaWYgKG1pbWVQYXJhbWV0ZXJzSXRlcmF0b3IgIT0ga2V5VmFsdWVQ
YWlycy5lbmQoKSkKLSAgICAgICAgbWltZUhlYWRlci0+bV9jb250ZW50VHJhbnNmZXJFbmNvZGlu
ZyA9IHBhcnNlQ29udGVudFRyYW5zZmVyRW5jb2RpbmcobWltZVBhcmFtZXRlcnNJdGVyYXRvci0+
c2Vjb25kKTsKKyAgICAgICAgbWltZUhlYWRlci0+bV9jb250ZW50VHJhbnNmZXJFbmNvZGluZyA9
IHBhcnNlQ29udGVudFRyYW5zZmVyRW5jb2RpbmcobWltZVBhcmFtZXRlcnNJdGVyYXRvci0+dmFs
dWUpOwogCiAgICAgbWltZVBhcmFtZXRlcnNJdGVyYXRvciA9IGtleVZhbHVlUGFpcnMuZmluZCgi
Y29udGVudC1sb2NhdGlvbiIpOwogICAgIGlmIChtaW1lUGFyYW1ldGVyc0l0ZXJhdG9yICE9IGtl
eVZhbHVlUGFpcnMuZW5kKCkpCi0gICAgICAgIG1pbWVIZWFkZXItPm1fY29udGVudExvY2F0aW9u
ID0gbWltZVBhcmFtZXRlcnNJdGVyYXRvci0+c2Vjb25kOworICAgICAgICBtaW1lSGVhZGVyLT5t
X2NvbnRlbnRMb2NhdGlvbiA9IG1pbWVQYXJhbWV0ZXJzSXRlcmF0b3ItPnZhbHVlOwogCiAgICAg
cmV0dXJuIG1pbWVIZWFkZXIucmVsZWFzZSgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNwcAppbmRleCA3ZGRjNDdlNGVhNzk5YTQ2
ZGVlNmYzMmNmZDA3OGVmNzUxNTRmMWVlLi42ZDEyZjlkODliMDI0Nzc0NmE1N2UxYmJjYWZiMmMy
MTdkNTkxMDM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jl
c291cmNlSGFuZGxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jl
c291cmNlSGFuZGxlLmNwcApAQCAtNzEsNyArNzEsNyBAQCBQYXNzUmVmUHRyPFJlc291cmNlSGFu
ZGxlPiBSZXNvdXJjZUhhbmRsZTo6Y3JlYXRlKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBj
bwogICAgIEJ1aWx0aW5SZXNvdXJjZUhhbmRsZUNvbnN0cnVjdG9yTWFwOjppdGVyYXRvciBwcm90
b2NvbE1hcEl0ZW0gPSBidWlsdGluUmVzb3VyY2VIYW5kbGVDb25zdHJ1Y3Rvck1hcCgpLmZpbmQo
cmVxdWVzdC51cmwoKS5wcm90b2NvbCgpKTsKIAogICAgIGlmIChwcm90b2NvbE1hcEl0ZW0gIT0g
YnVpbHRpblJlc291cmNlSGFuZGxlQ29uc3RydWN0b3JNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0
dXJuIHByb3RvY29sTWFwSXRlbS0+c2Vjb25kKHJlcXVlc3QsIGNsaWVudCk7CisgICAgICAgIHJl
dHVybiBwcm90b2NvbE1hcEl0ZW0tPnZhbHVlKHJlcXVlc3QsIGNsaWVudCk7CiAKICAgICBSZWZQ
dHI8UmVzb3VyY2VIYW5kbGU+IG5ld0hhbmRsZShhZG9wdFJlZihuZXcgUmVzb3VyY2VIYW5kbGUo
cmVxdWVzdCwgY2xpZW50LCBkZWZlcnNMb2FkaW5nLCBzaG91bGRDb250ZW50U25pZmYpKSk7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1
ZXN0QmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVx
dWVzdEJhc2UuY3BwCmluZGV4IDQ3YmYxMWMwYjdiMTY1Yzc0MTg2OTdmNGJlZmQ4MDIwNGQ0ZTNh
ZjYuLmFmY2IyNDNjNjUyOGY3OTBjYmVlYTdkZjZjMTg1YzQ3MjE4NTdmODkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNl
LmNwcApAQCAtMzc3LDcgKzM3Nyw3IEBAIHZvaWQgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6YWRkSFRU
UEhlYWRlckZpZWxkKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgY29uc3QgU3RyCiAgICAgdXBk
YXRlUmVzb3VyY2VSZXF1ZXN0KCk7CiAgICAgSFRUUEhlYWRlck1hcDo6QWRkUmVzdWx0IHJlc3Vs
dCA9IG1faHR0cEhlYWRlckZpZWxkcy5hZGQobmFtZSwgdmFsdWUpOwogICAgIGlmICghcmVzdWx0
LmlzTmV3RW50cnkpCi0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gcmVzdWx0Lml0
ZXJhdG9yLT5zZWNvbmQgKyAnLCcgKyB2YWx1ZTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZSA9IHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgKyAnLCcgKyB2YWx1ZTsKIAogICAgIGlmICh1
cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpCiAgICAgICAgIG1fcGxhdGZvcm1SZXF1ZXN0
VXBkYXRlZCA9IGZhbHNlOwpAQCAtMzg3LDcgKzM4Nyw3IEBAIHZvaWQgUmVzb3VyY2VSZXF1ZXN0
QmFzZTo6YWRkSFRUUEhlYWRlckZpZWxkcyhjb25zdCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJGaWVs
ZHMpCiB7CiAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaGVhZGVyRmll
bGRzLmVuZCgpOwogICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBo
ZWFkZXJGaWVsZHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBhZGRIVFRQSGVh
ZGVyRmllbGQoaXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsKKyAgICAgICAgYWRkSFRUUEhlYWRlckZp
ZWxkKGl0LT5rZXksIGl0LT52YWx1ZSk7CiB9CiAKIGJvb2wgZXF1YWxJZ25vcmluZ0hlYWRlckZp
ZWxkcyhjb25zdCBSZXNvdXJjZVJlcXVlc3RCYXNlJiBhLCBjb25zdCBSZXNvdXJjZVJlcXVlc3RC
YXNlJiBiKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFj
a2JlcnJ5L1Jlc291cmNlUmVxdWVzdEJsYWNrQmVycnkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlUmVxdWVzdEJsYWNrQmVycnkuY3BwCmlu
ZGV4IGVlZmQ1YTVlNDczNjBjNzE4OThjZmQzZWIwNjE2MmFkMWJmNTU3NjYuLjc1N2JkM2UyNDMw
NGY3NDNjMWUzOWNjYTc4NGQ0OGZmODNlYzAzYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJjZVJlcXVlc3RCbGFja0JlcnJ5LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvUmVzb3Vy
Y2VSZXF1ZXN0QmxhY2tCZXJyeS5jcHAKQEAgLTEzOSw3ICsxMzksNyBAQCBSZXNvdXJjZVJlcXVl
c3Q6OlRhcmdldFR5cGUgUmVzb3VyY2VSZXF1ZXN0Ojp0YXJnZXRUeXBlRnJvbU1pbWVUeXBlKGNv
bnN0IFN0cmluZwogICAgIGlmIChpdGVyID09IG1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuIFJl
c291cmNlUmVxdWVzdDo6VGFyZ2V0SXNVbnNwZWNpZmllZDsKIAotICAgIHJldHVybiBpdGVyLT5z
ZWNvbmQ7CisgICAgcmV0dXJuIGl0ZXItPnZhbHVlOwogfQogCiB2b2lkIFJlc291cmNlUmVxdWVz
dDo6aW5pdGlhbGl6ZVBsYXRmb3JtUmVxdWVzdChOZXR3b3JrUmVxdWVzdCYgcGxhdGZvcm1SZXF1
ZXN0LCBib29sIGNvb2tpZXNFbmFibGVkLCBib29sIGlzSW5pdGlhbCwgYm9vbCBpc1JlZGlyZWN0
KSBjb25zdApAQCAtMTk3LDggKzE5Nyw4IEBAIHZvaWQgUmVzb3VyY2VSZXF1ZXN0Ojppbml0aWFs
aXplUGxhdGZvcm1SZXF1ZXN0KE5ldHdvcmtSZXF1ZXN0JiBwbGF0Zm9ybVJlcXVlc3QsCiAgICAg
ICAgIGJvb2wgY29va2llSGVhZGVyTWF5QmVEaXJ0eSA9IGlzUmVkaXJlY3QgfHwgY2FjaGVQb2xp
Y3koKSA9PSBXZWJDb3JlOjpSZWxvYWRJZ25vcmluZ0NhY2hlRGF0YSB8fCBjYWNoZVBvbGljeSgp
ID09IFdlYkNvcmU6OlJldHVybkNhY2hlRGF0YUVsc2VMb2FkOwogCiAgICAgICAgIGZvciAoSFRU
UEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBodHRwSGVhZGVyRmllbGRzKCkuYmVnaW4o
KTsgaXQgIT0gaHR0cEhlYWRlckZpZWxkcygpLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgICAgICBT
dHJpbmcga2V5ID0gaXQtPmZpcnN0OwotICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0gaXQtPnNl
Y29uZDsKKyAgICAgICAgICAgIFN0cmluZyBrZXkgPSBpdC0+a2V5OworICAgICAgICAgICAgU3Ry
aW5nIHZhbHVlID0gaXQtPnZhbHVlOwogICAgICAgICAgICAgaWYgKCFrZXkuaXNFbXB0eSgpKSB7
CiAgICAgICAgICAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGtleSwgIkNvb2tpZSIpKSB7
CiAgICAgICAgICAgICAgICAgICAgIC8vIFdlIHdvbid0IHVzZSB0aGUgb2xkIGNvb2tpZXMgb2Yg
cmVzb3VyY2VSZXF1ZXN0IGZvciBuZXcgbG9jYXRpb24gYmVjYXVzZSB0aGVzZSBjb29raWVzIG1h
eSBiZSBjaGFuZ2VkIGJ5IHJlZGlyZWN0aW9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRk5ldC5jcHAKaW5kZXggZjZk
MWYzODIxMjYyZjE5NTA0MTU1OWEyNTZjMDJiZDZiZDc4MjllNS4uMDFlOGI4YWU1YzBkMWM2YTZh
OGYwMzMwODVlOTBmMDEwYmMxZjdjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZOZXQuY3BwCkBAIC00MjgsNyAr
NDI4LDcgQEAgc3RhdGljIENGVVJMUmVxdWVzdFJlZiBtYWtlRmluYWxSZXF1ZXN0KGNvbnN0IFJl
c291cmNlUmVxdWVzdCYgcmVxdWVzdCwgYm9vbCBzaG8KICAgICAgICAgaWYgKCFzc2xQcm9wcykK
ICAgICAgICAgICAgIHNzbFByb3BzLmFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlTXV0YWJsZShr
Q0ZBbGxvY2F0b3JEZWZhdWx0LCAwLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZr
Q0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CiAjaWYgUExBVEZPUk0oV0lOKQotICAg
ICAgICB3a1NldENsaWVudENlcnRpZmljYXRlSW5TU0xQcm9wZXJ0aWVzKHNzbFByb3BzLmdldCgp
LCAoY2xpZW50Q2VydC0+c2Vjb25kKS5nZXQoKSk7CisgICAgICAgIHdrU2V0Q2xpZW50Q2VydGlm
aWNhdGVJblNTTFByb3BlcnRpZXMoc3NsUHJvcHMuZ2V0KCksIChjbGllbnRDZXJ0LT52YWx1ZSku
Z2V0KCkpOwogI2VuZGlmCiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlUmVxdWVzdENGTmV0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0Q0ZOZXQuY3BwCmluZGV4IDU3YTZm
YjJjOGE0YzA4Zjc5ZmJkNGI5YmM1NWI4NWE5MzQyNjdhMzcuLjhjZmY4N2NhMGQ1OGVhMmU1MjNm
MzczMGQ2YjRhNzczMGIwNmJlNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0Q0ZOZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0Q0ZOZXQuY3BwCkBAIC0xMjAsOCAr
MTIwLDggQEAgc3RhdGljIGlubGluZSB2b2lkIHNldEhlYWRlckZpZWxkcyhDRk11dGFibGVVUkxS
ZXF1ZXN0UmVmIHJlcXVlc3QsIGNvbnN0IEhUVFBIZWEKIAogICAgIEhUVFBIZWFkZXJNYXA6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IHJlcXVlc3RIZWFkZXJzLmVuZCgpOwogICAgIGZvciAoSFRUUEhl
YWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSByZXF1ZXN0SGVhZGVycy5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKLSAgICAgICAgQ0ZTdHJpbmdSZWYga2V5ID0gaXQtPmZpcnN0LmNyZWF0
ZUNGU3RyaW5nKCk7Ci0gICAgICAgIENGU3RyaW5nUmVmIHZhbHVlID0gaXQtPnNlY29uZC5jcmVh
dGVDRlN0cmluZygpOworICAgICAgICBDRlN0cmluZ1JlZiBrZXkgPSBpdC0+a2V5LmNyZWF0ZUNG
U3RyaW5nKCk7CisgICAgICAgIENGU3RyaW5nUmVmIHZhbHVlID0gaXQtPnZhbHVlLmNyZWF0ZUNG
U3RyaW5nKCk7CiAgICAgICAgIENGVVJMUmVxdWVzdFNldEhUVFBIZWFkZXJGaWVsZFZhbHVlKHJl
cXVlc3QsIGtleSwgdmFsdWUpOwogICAgICAgICBDRlJlbGVhc2Uoa2V5KTsKICAgICAgICAgQ0ZS
ZWxlYXNlKHZhbHVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY3VybC9SZXNvdXJjZUhhbmRsZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHAKaW5kZXggYWYwNzVlZjll
MzIxODhlNzcxNDk3ZWJmN2M3NGRjMWFhMTVlMjE3YS4uNjViY2MxMGFkM2QyMDA1ZDY4OWQ3M2U4
ZGQ2Nzk4OGI5YzVjYjVkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHAKQEAgLTcwMyw4
ICs3MDMsOCBAQCB2b2lkIFJlc291cmNlSGFuZGxlTWFuYWdlcjo6aW5pdGlhbGl6ZUhhbmRsZShS
ZXNvdXJjZUhhbmRsZSogam9iKQogICAgICAgICBIVFRQSGVhZGVyTWFwIGN1c3RvbUhlYWRlcnMg
PSBqb2ItPmZpcnN0UmVxdWVzdCgpLmh0dHBIZWFkZXJGaWVsZHMoKTsKICAgICAgICAgSFRUUEhl
YWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY3VzdG9tSGVhZGVycy5lbmQoKTsKICAgICAg
ICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGN1c3RvbUhlYWRlcnMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBTdHJpbmcga2V5ID0gaXQt
PmZpcnN0OwotICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0gaXQtPnNlY29uZDsKKyAgICAgICAg
ICAgIFN0cmluZyBrZXkgPSBpdC0+a2V5OworICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0gaXQt
PnZhbHVlOwogICAgICAgICAgICAgU3RyaW5nIGhlYWRlclN0cmluZyhrZXkpOwogICAgICAgICAg
ICAgaGVhZGVyU3RyaW5nLmFwcGVuZCgiOiAiKTsKICAgICAgICAgICAgIGhlYWRlclN0cmluZy5h
cHBlbmQodmFsdWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9tYWMvUmVzb3VyY2VSZXF1ZXN0TWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9tYWMvUmVzb3VyY2VSZXF1ZXN0TWFjLm1tCmluZGV4IDk2YzQ5N2Q1MDNiNTQ3ZTNiMDFh
OWEyNTJhNThmYzJlZWYzZjk0NDQuLjkzMjE2Y2I1NWU4NTc3MzEzNmYzZThjM2EwN2NlNmZiNTU2
ZTA2ZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jl
c291cmNlUmVxdWVzdE1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L21hYy9SZXNvdXJjZVJlcXVlc3RNYWMubW0KQEAgLTE1NSw3ICsxNTUsNyBAQCB2b2lkIFJlc291
cmNlUmVxdWVzdDo6ZG9VcGRhdGVQbGF0Zm9ybVJlcXVlc3QoKQogICAgICAgICBbbnNSZXF1ZXN0
IHNldFZhbHVlOm5pbCBmb3JIVFRQSGVhZGVyRmllbGQ6W29sZEhlYWRlckZpZWxkTmFtZXMgb2Jq
ZWN0QXRJbmRleDppIC0gMV1dOwogICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IGh0dHBIZWFkZXJGaWVsZHMoKS5lbmQoKTsKICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gaHR0cEhlYWRlckZpZWxkcygpLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkKLSAgICAgICAgW25zUmVxdWVzdCBzZXRWYWx1ZTppdC0+c2Vjb25kIGZvckhUVFBIZWFk
ZXJGaWVsZDppdC0+Zmlyc3RdOworICAgICAgICBbbnNSZXF1ZXN0IHNldFZhbHVlOml0LT52YWx1
ZSBmb3JIVFRQSGVhZGVyRmllbGQ6aXQtPmtleV07CiAKICAgICAvLyBUaGUgYmVsb3cgY2hlY2sg
Y2FuIGJlIHJlbW92ZWQgb25jZSB3ZSByZXF1aXJlIGEgdmVyc2lvbiBvZiBGb3VuZGF0aW9uIHdp
dGggLVtOU011dGFibGVVUkxSZXF1ZXN0IHNldENvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFs
bGJhY2tBcnJheTpdIG1ldGhvZC4KICAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0NvbnRlbnREaXNw
b3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheSA9IFtOU011dGFibGVVUkxSZXF1ZXN0IGluc3Rh
bmNlc1Jlc3BvbmRUb1NlbGVjdG9yOkBzZWxlY3RvcihzZXRDb250ZW50RGlzcG9zaXRpb25FbmNv
ZGluZ0ZhbGxiYWNrQXJyYXk6KV07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3F0L1Jlc291cmNlUmVxdWVzdFF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvcXQvUmVzb3VyY2VSZXF1ZXN0UXQuY3BwCmluZGV4IGRiYjdiNzRkZDU5YzRm
NGQwZjJlY2VjZmRiZTA4MTNkMjhiNzRhM2UuLmU4NGU2NzdhNWY3MmM3MWU4OWM2MDBmZDc3NzAw
YmI2ODIyMTRjMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
cXQvUmVzb3VyY2VSZXF1ZXN0UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvcXQvUmVzb3VyY2VSZXF1ZXN0UXQuY3BwCkBAIC00OSw4ICs0OSw4IEBAIFFOZXR3b3Jr
UmVxdWVzdCBSZXNvdXJjZVJlcXVlc3Q6OnRvTmV0d29ya1JlcXVlc3QoTmV0d29ya2luZ0NvbnRl
eHQgKmNvbnRleHQpIGNvCiAgICAgY29uc3QgSFRUUEhlYWRlck1hcCAmaGVhZGVycyA9IGh0dHBI
ZWFkZXJGaWVsZHMoKTsKICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gaGVhZGVycy5iZWdpbigpLCBlbmQgPSBoZWFkZXJzLmVuZCgpOwogICAgICAgICAgaXQgIT0g
ZW5kOyArK2l0KSB7Ci0gICAgICAgIFFCeXRlQXJyYXkgbmFtZSA9IFFTdHJpbmcoaXQtPmZpcnN0
KS50b0xhdGluMSgpOwotICAgICAgICBRQnl0ZUFycmF5IHZhbHVlID0gUVN0cmluZyhpdC0+c2Vj
b25kKS50b0xhdGluMSgpOworICAgICAgICBRQnl0ZUFycmF5IG5hbWUgPSBRU3RyaW5nKGl0LT5r
ZXkpLnRvTGF0aW4xKCk7CisgICAgICAgIFFCeXRlQXJyYXkgdmFsdWUgPSBRU3RyaW5nKGl0LT52
YWx1ZSkudG9MYXRpbjEoKTsKICAgICAgICAgLy8gUU5ldHdvcmtSZXF1ZXN0OjpzZXRSYXdIZWFk
ZXIoKSB3b3VsZCByZW1vdmUgdGhlIGhlYWRlciBpZiB0aGUgdmFsdWUgaXMgbnVsbAogICAgICAg
ICAvLyBNYWtlIHN1cmUgdG8gc2V0IGFuIGVtcHR5IGhlYWRlciBpbnN0ZWFkIG9mIG51bGwgaGVh
ZGVyLgogICAgICAgICBpZiAoIXZhbHVlLmlzTnVsbCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcApp
bmRleCAzYzM0ZWZiNDU4Y2NkZGZlNTM2MWYxZWQzNjUyYTg3ZWQ3NTQ4M2MwLi4yMTExNjIxNzI2
Njc3ZjQ1MjY3NjY4NDdkNjcyZjM1N2I2ZjgzOGM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcApA
QCAtNDY0LDcgKzQ2NCw3IEBAIHN0YXRpYyB2b2lkIHNlbmRSZXF1ZXN0Q2FsbGJhY2soR09iamVj
dCosIEdBc3luY1Jlc3VsdCogcmVzLCBncG9pbnRlciBkYXRhKQogCiAgICAgICAgIGlmIChoYXNV
bmlnbm9yZWRUTFNFcnJvcnMoaGFuZGxlLmdldCgpKSkgewogICAgICAgICAgICAgQ2VydGlmaWNh
dGVzTWFwOjppdGVyYXRvciBpdGVyID0gY2xpZW50Q2VydGlmaWNhdGVzKCkuZmluZChoYW5kbGUt
PmZpcnN0UmVxdWVzdCgpLnVybCgpLmhvc3QoKS5sb3dlcigpKTsKLSAgICAgICAgICAgIGlmIChp
dGVyID09IGNsaWVudENlcnRpZmljYXRlcygpLmVuZCgpIHx8ICFpdGVyLT5zZWNvbmQuY29udGFp
bnMoZC0+bV9yZXNwb25zZS5zb3VwTWVzc2FnZUNlcnRpZmljYXRlKCkpKSB7CisgICAgICAgICAg
ICBpZiAoaXRlciA9PSBjbGllbnRDZXJ0aWZpY2F0ZXMoKS5lbmQoKSB8fCAhaXRlci0+dmFsdWUu
Y29udGFpbnMoZC0+bV9yZXNwb25zZS5zb3VwTWVzc2FnZUNlcnRpZmljYXRlKCkpKSB7CiAgICAg
ICAgICAgICAgICAgR093blB0cjxjaGFyPiB1cmkoc291cF91cmlfdG9fc3RyaW5nKHNvdXBfcmVx
dWVzdF9nZXRfdXJpKGQtPm1fc291cFJlcXVlc3QuZ2V0KCkpLCBGQUxTRSkpOwogICAgICAgICAg
ICAgICAgIGNsaWVudC0+ZGlkRmFpbChoYW5kbGUuZ2V0KCksIFJlc291cmNlRXJyb3IoZ19xdWFy
a190b19zdHJpbmcoU09VUF9IVFRQX0VSUk9SKSwgU09VUF9TVEFUVVNfU1NMX0ZBSUxFRCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVyaS5nZXQoKSwgdW5hY2NlcHRhYmxlVExTQ2VydGlmaWNhdGUoKSwKQEAgLTg1Myw3ICs4NTMs
NyBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpzZXRIb3N0QWxsb3dzQW55SFRUUFNDZXJ0aWZpY2F0
ZShjb25zdCBTdHJpbmcmIGhvc3QpCiAKIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnNldENsaWVudENl
cnRpZmljYXRlKGNvbnN0IFN0cmluZyYgaG9zdCwgR1Rsc0NlcnRpZmljYXRlKiBjZXJ0aWZpY2F0
ZSkKIHsKLSAgICBjbGllbnRDZXJ0aWZpY2F0ZXMoKS5hZGQoaG9zdC5sb3dlcigpLCBIb3N0VExT
Q2VydGlmaWNhdGVTZXQoKSkuaXRlcmF0b3ItPnNlY29uZC5hZGQoY2VydGlmaWNhdGUpOworICAg
IGNsaWVudENlcnRpZmljYXRlcygpLmFkZChob3N0Lmxvd2VyKCksIEhvc3RUTFNDZXJ0aWZpY2F0
ZVNldCgpKS5pdGVyYXRvci0+dmFsdWUuYWRkKGNlcnRpZmljYXRlKTsKIH0KIAogdm9pZCBSZXNv
dXJjZUhhbmRsZTo6c2V0SWdub3JlU1NMRXJyb3JzKGJvb2wgaWdub3JlU1NMRXJyb3JzKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVx
dWVzdFNvdXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291
cmNlUmVxdWVzdFNvdXAuY3BwCmluZGV4IGRkZmExYzM4ZGVlNGIzZTk2Mjk4MzFkNmExYjk0ODdj
NjNlMDhiNjkuLjI4YTE5NTk1NzljYjg4NzNmOTNmZTkyYjdmODE3ZTFhYWNkZTRkMWYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVl
c3RTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVz
b3VyY2VSZXF1ZXN0U291cC5jcHAKQEAgLTQzLDcgKzQzLDcgQEAgdm9pZCBSZXNvdXJjZVJlcXVl
c3Q6OnVwZGF0ZVNvdXBNZXNzYWdlKFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSkgY29uc3QKICAg
ICBpZiAoIWhlYWRlcnMuaXNFbXB0eSgpKSB7CiAgICAgICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IGhlYWRlcnMuZW5kKCk7CiAgICAgICAgIGZvciAoSFRUUEhlYWRlck1h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBoZWFkZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkK
LSAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChzb3VwSGVhZGVycywgaXQt
PmZpcnN0LnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGl0LT5zZWNvbmQudXRmOCgpLmRhdGEoKSk7
CisgICAgICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQoc291cEhlYWRlcnMsIGl0
LT5rZXkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgaXQtPnZhbHVlLnV0ZjgoKS5kYXRhKCkpOwog
ICAgIH0KIAogICAgIFN0cmluZyBmaXJzdFBhcnR5U3RyaW5nID0gZmlyc3RQYXJ0eUZvckNvb2tp
ZXMoKS5zdHJpbmcoKTsKQEAgLTY2LDcgKzY2LDcgQEAgU291cE1lc3NhZ2UqIFJlc291cmNlUmVx
dWVzdDo6dG9Tb3VwTWVzc2FnZSgpIGNvbnN0CiAgICAgaWYgKCFoZWFkZXJzLmlzRW1wdHkoKSkg
ewogICAgICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBoZWFkZXJzLmVu
ZCgpOwogICAgICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaGVh
ZGVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBzb3VwX21lc3NhZ2Vf
aGVhZGVyc19hcHBlbmQoc291cEhlYWRlcnMsIGl0LT5maXJzdC5zdHJpbmcoKS51dGY4KCkuZGF0
YSgpLCBpdC0+c2Vjb25kLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgc291cF9tZXNzYWdl
X2hlYWRlcnNfYXBwZW5kKHNvdXBIZWFkZXJzLCBpdC0+a2V5LnN0cmluZygpLnV0ZjgoKS5kYXRh
KCksIGl0LT52YWx1ZS51dGY4KCkuZGF0YSgpKTsKICAgICB9CiAKICAgICBTdHJpbmcgZmlyc3RQ
YXJ0eVN0cmluZyA9IGZpcnN0UGFydHlGb3JDb29raWVzKCkuc3RyaW5nKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXNwb25zZVNv
dXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVz
cG9uc2VTb3VwLmNwcAppbmRleCBiN2MwNDhmYTFlYzAwZmU3MDhkN2RjYWU5OWZjNWRiN2VjNzkw
ODNkLi5jZGVmN2VlOGZjYzFlNWY0YTllYzlkZjNmYWU1ZGMzODVlMzk0ZTU3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXNwb25zZVNv
dXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJj
ZVJlc3BvbnNlU291cC5jcHAKQEAgLTQ2LDcgKzQ2LDcgQEAgU291cE1lc3NhZ2UqIFJlc291cmNl
UmVzcG9uc2U6OnRvU291cE1lc3NhZ2UoKSBjb25zdAogICAgIGlmICghaGVhZGVycy5pc0VtcHR5
KCkpIHsKICAgICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaGVhZGVy
cy5lbmQoKTsKICAgICAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9
IGhlYWRlcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgc291cF9tZXNz
YWdlX2hlYWRlcnNfYXBwZW5kKHNvdXBIZWFkZXJzLCBpdC0+Zmlyc3Quc3RyaW5nKCkudXRmOCgp
LmRhdGEoKSwgaXQtPnNlY29uZC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIHNvdXBfbWVz
c2FnZV9oZWFkZXJzX2FwcGVuZChzb3VwSGVhZGVycywgaXQtPmtleS5zdHJpbmcoKS51dGY4KCku
ZGF0YSgpLCBpdC0+dmFsdWUudXRmOCgpLmRhdGEoKSk7CiAgICAgfQogCiAgICAgc291cF9tZXNz
YWdlX3NldF9mbGFncyhzb3VwTWVzc2FnZSwgbV9zb3VwRmxhZ3MpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay93aW4vUmVzb3VyY2VIYW5kbGVXaW4uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay93aW4vUmVzb3VyY2VIYW5kbGVXaW4uY3Bw
CmluZGV4IDAyMTJkMGNkYTk4YzlmMTM3OTI4ZTYxMmZkZjk1MDM2NWEwMWQwZDYuLmYyNTA1Mjc3
NWIwZGVkZmUyMWM3NTVkM2Y4Mzk5ODUzZTdhMGYzOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvd2luL1Jlc291cmNlSGFuZGxlV2luLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3dpbi9SZXNvdXJjZUhhbmRsZVdpbi5jcHAKQEAg
LTMyMywxNSArMzIzLDE1IEBAIGJvb2wgUmVzb3VyY2VIYW5kbGU6OnN0YXJ0KE5ldHdvcmtpbmdD
b250ZXh0KiBjb250ZXh0KQogICAgIGNvbnN0IEhUVFBIZWFkZXJNYXAmIGh0dHBIZWFkZXJGaWVs
ZHMgPSBmaXJzdFJlcXVlc3QoKS5odHRwSGVhZGVyRmllbGRzKCk7CiAKICAgICBmb3IgKEhUVFBI
ZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaHR0cEhlYWRlckZpZWxkcy5iZWdpbigpOyBp
dCAhPSBodHRwSGVhZGVyRmllbGRzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmIChlcXVhbEln
bm9yaW5nQ2FzZShpdC0+Zmlyc3QsICJBY2NlcHQiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShpdC0+
Zmlyc3QsICJSZWZlcmVyIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UoaXQtPmZpcnN0LCAiVXNlci1B
Z2VudCIpKQorICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoaXQtPmtleSwgIkFjY2VwdCIp
IHx8IGVxdWFsSWdub3JpbmdDYXNlKGl0LT5rZXksICJSZWZlcmVyIikgfHwgZXF1YWxJZ25vcmlu
Z0Nhc2UoaXQtPmtleSwgIlVzZXItQWdlbnQiKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAg
ICAgICAgIGlmICghaHR0cEhlYWRlcnMuaXNFbXB0eSgpKQogICAgICAgICAgICAgaHR0cEhlYWRl
cnMuYXBwZW5kKCdcbicpOwogCi0gICAgICAgIGh0dHBIZWFkZXJzLmFwcGVuZChpdC0+Zmlyc3Qu
Y2hhcmFjdGVycygpLCBpdC0+Zmlyc3QubGVuZ3RoKCkpOworICAgICAgICBodHRwSGVhZGVycy5h
cHBlbmQoaXQtPmtleS5jaGFyYWN0ZXJzKCksIGl0LT5rZXkubGVuZ3RoKCkpOwogICAgICAgICBo
dHRwSGVhZGVycy5hcHBlbmQoJzonKTsKLSAgICAgICAgaHR0cEhlYWRlcnMuYXBwZW5kKGl0LT5z
ZWNvbmQuY2hhcmFjdGVycygpLCBpdC0+c2Vjb25kLmxlbmd0aCgpKTsKKyAgICAgICAgaHR0cEhl
YWRlcnMuYXBwZW5kKGl0LT52YWx1ZS5jaGFyYWN0ZXJzKCksIGl0LT52YWx1ZS5sZW5ndGgoKSk7
CiAgICAgfQogCiAgICAgSU5URVJORVRfQlVGRkVSU1cgaW50ZXJuZXRCdWZmZXJzOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUnVuTG9vcFF0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3F0L1J1bkxvb3BRdC5jcHAKaW5kZXggMmE4N2UyZmM4ZjY2Nzc3Njlm
NzMxNDNlNTcxZTA5YzVhNTRjNmViYS4uNTAxYmQ1YzEyM2IwZjAzY2U5YTBjZjkwZTE3MjY5MWY1
MDZkOWExYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUnVuTG9vcFF0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SdW5Mb29wUXQuY3BwCkBAIC0x
MDksNyArMTA5LDcgQEAgdm9pZCBSdW5Mb29wOjpUaW1lckJhc2U6OnRpbWVyRmlyZWQoUnVuTG9v
cCogcnVuTG9vcCwgaW50IElEKQogewogICAgIFRpbWVyTWFwOjppdGVyYXRvciBpdCA9IHJ1bkxv
b3AtPm1fYWN0aXZlVGltZXJzLmZpbmQoSUQpOwogICAgIEFTU0VSVChpdCAhPSBydW5Mb29wLT5t
X2FjdGl2ZVRpbWVycy5lbmQoKSk7Ci0gICAgVGltZXJCYXNlKiB0aW1lciA9IGl0LT5zZWNvbmQ7
CisgICAgVGltZXJCYXNlKiB0aW1lciA9IGl0LT52YWx1ZTsKIAogICAgIGlmICghdGltZXItPm1f
aXNSZXBlYXRpbmcpIHsKICAgICAgICAgLy8gU3RvcCB0aGUgdGltZXIgKGNhbGxpbmcgc3RvcCB3
b3VsZCBuZWVkIGFub3RoZXIgaGFzaCB0YWJsZSBsb29rdXApLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Mb2NhbGVUb1NjcmlwdE1hcHBpbmdEZWZhdWx0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9jYWxlVG9TY3JpcHRNYXBwaW5nRGVmYXVs
dC5jcHAKaW5kZXggOTA5NDczODQ5Njk2YjRjMjkyZDZiOWFjMjg1YmM3ZDlmNGFjMjg0MS4uNTgy
NjQ5MDdkNWU0MGEwMDliNDBmZDY5OTE4MGYzM2VmN2Q1MTdjMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Mb2NhbGVUb1NjcmlwdE1hcHBpbmdEZWZhdWx0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0xvY2FsZVRvU2NyaXB0TWFwcGluZ0Rl
ZmF1bHQuY3BwCkBAIC0xNjYsNyArMTY2LDcgQEAgVVNjcmlwdENvZGUgc2NyaXB0TmFtZVRvQ29k
ZShjb25zdCBTdHJpbmcmIHNjcmlwdE5hbWUpCiAKICAgICBIYXNoTWFwPFN0cmluZywgVVNjcmlw
dENvZGU+OjppdGVyYXRvciBpdCA9IHNjcmlwdE5hbWVDb2RlTWFwLmZpbmQoc2NyaXB0TmFtZS5s
b3dlcigpKTsKICAgICBpZiAoaXQgIT0gc2NyaXB0TmFtZUNvZGVNYXAuZW5kKCkpCi0gICAgICAg
IHJldHVybiBpdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwogICAgIHJldHVy
biBVU0NSSVBUX0lOVkFMSURfQ09ERTsKIH0KIApAQCAtMzg5LDcgKzM4OSw3IEBAIFVTY3JpcHRD
b2RlIGxvY2FsZVRvU2NyaXB0Q29kZUZvckZvbnRTZWxlY3Rpb24oY29uc3QgU3RyaW5nJiBsb2Nh
bGUpCiAgICAgd2hpbGUgKCFjYW5vbmljYWxMb2NhbGUuaXNFbXB0eSgpKSB7CiAgICAgICAgIEhh
c2hNYXA8U3RyaW5nLCBVU2NyaXB0Q29kZT46Oml0ZXJhdG9yIGl0ID0gbG9jYWxlU2NyaXB0TWFw
LmZpbmQoY2Fub25pY2FsTG9jYWxlKTsKICAgICAgICAgaWYgKGl0ICE9IGxvY2FsZVNjcmlwdE1h
cC5lbmQoKSkKLSAgICAgICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgICAgICAgICAgcmV0
dXJuIGl0LT52YWx1ZTsKICAgICAgICAgc2l6ZV90IHBvcyA9IGNhbm9uaWNhbExvY2FsZS5yZXZl
cnNlRmluZCgnXycpOwogICAgICAgICBpZiAocG9zID09IG5vdEZvdW5kKQogICAgICAgICAgICAg
YnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNv
ZGluZ1JlZ2lzdHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29k
aW5nUmVnaXN0cnkuY3BwCmluZGV4IDQxNDBhMzg3MjkyODkwZTVkOGRlM2Q0MmU1MWI2NjVkZDE4
ZGZjNjkuLjI3OTAyMjdmYWU5MTg1MjU4ZDJlMTYwNTJkMTM4ODlkNWRiNmFjOGEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnkuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnku
Y3BwCkBAIC0xOTYsOCArMTk2LDggQEAgc3RhdGljIHZvaWQgcHJ1bmVCbGFja2xpc3RlZENvZGVj
cygpCiAgICAgICAgIFRleHRFbmNvZGluZ05hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdGV4
dEVuY29kaW5nTmFtZU1hcC0+YmVnaW4oKTsKICAgICAgICAgVGV4dEVuY29kaW5nTmFtZU1hcDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gdGV4dEVuY29kaW5nTmFtZU1hcC0+ZW5kKCk7CiAgICAgICAg
IGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGlmIChpdC0+c2Vjb25kID09
IGF0b21pY05hbWUpCi0gICAgICAgICAgICAgICAgbmFtZXMuYXBwZW5kKGl0LT5maXJzdCk7Cisg
ICAgICAgICAgICBpZiAoaXQtPnZhbHVlID09IGF0b21pY05hbWUpCisgICAgICAgICAgICAgICAg
bmFtZXMuYXBwZW5kKGl0LT5rZXkpOwogICAgICAgICB9CiAKICAgICAgICAgc2l6ZV90IGxlbmd0
aCA9IG5hbWVzLnNpemUoKTsKQEAgLTM5MSw3ICszOTEsNyBAQCB2b2lkIGR1bXBUZXh0RW5jb2Rp
bmdOYW1lTWFwKCkKICAgICBUZXh0RW5jb2RpbmdOYW1lTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9
IHRleHRFbmNvZGluZ05hbWVNYXAtPmJlZ2luKCk7CiAgICAgVGV4dEVuY29kaW5nTmFtZU1hcDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gdGV4dEVuY29kaW5nTmFtZU1hcC0+ZW5kKCk7CiAgICAgZm9y
ICg7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICInJXMnID0+ICcl
cydcbiIsIGl0LT5maXJzdCwgaXQtPnNlY29uZCk7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAi
JyVzJyA9PiAnJXMnXG4iLCBpdC0+a2V5LCBpdC0+dmFsdWUpOwogfQogI2VuZGlmCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvdHJhbnNjb2Rlci9Gb250VHJhbnNj
b2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3RyYW5zY29kZXIvRm9udFRy
YW5zY29kZXIuY3BwCmluZGV4IDRlMDdmNTBmYmRiMGM1N2MzZWVjYTZmOGJlNzFmNzUwNWRiNTNi
YzAuLjQ4NDIyOGNhYThlNzYwNzFiMzdhOWQyMGE5OTJkNTBhMWQ0MWY0MGMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvdHJhbnNjb2Rlci9Gb250VHJhbnNjb2Rlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC90cmFuc2NvZGVyL0ZvbnRUcmFu
c2NvZGVyLmNwcApAQCAtNjYsNyArNjYsNyBAQCBGb250VHJhbnNjb2Rlcjo6Q29udmVydGVyVHlw
ZSBGb250VHJhbnNjb2Rlcjo6Y29udmVydGVyVHlwZShjb25zdCBGb250RGVzY3JpcHRpbwogICAg
IGlmICghZm9udEZhbWlseS5pc051bGwoKSkgewogICAgICAgICBIYXNoTWFwPEF0b21pY1N0cmlu
ZywgQ29udmVydGVyVHlwZT46OmNvbnN0X2l0ZXJhdG9yIGZvdW5kID0gbV9jb252ZXJ0ZXJUeXBl
cy5maW5kKGZvbnRGYW1pbHkpOwogICAgICAgICBpZiAoZm91bmQgIT0gbV9jb252ZXJ0ZXJUeXBl
cy5lbmQoKSkKLSAgICAgICAgICAgIHJldHVybiBmb3VuZC0+c2Vjb25kOworICAgICAgICAgICAg
cmV0dXJuIGZvdW5kLT52YWx1ZTsKICAgICB9CiAKICAgICAvLyBJRSdzIGRlZmF1bHQgZm9udHMg
Zm9yIEphcGFuZXNlIGVuY29kaW5ncyBjaGFuZ2UgYmFja3NsYXNoZXMgaW50byB5ZW4gc2lnbnMu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3dpbi9UZXh0Q29kZWNX
aW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC93aW4vVGV4dENvZGVjV2luLmNw
cAppbmRleCBlMTkyMzdkNjhkOTBkZjJmNTAzYWY0MjM5YWEzNjdiNmYxNGYyNGI1Li44NzlhZjc2
OTc3MmZmNTE1ZjM1NGFhOGIxOTcxNjk5YjYyYWJhNjYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L3dpbi9UZXh0Q29kZWNXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvd2luL1RleHRDb2RlY1dpbi5jcHAKQEAgLTEwNSwxNyArMTA1LDE3
IEBAIExhbmd1YWdlTWFuYWdlcjo6TGFuZ3VhZ2VNYW5hZ2VyKCkKICAgICAgICAgICAgIGkgPSBj
b2RlUGFnZUNoYXJzZXRzKCkuc2V0KGNwSW5mby51aUNvZGVQYWdlLCBuYW1lKS5pdGVyYXRvcjsK
ICAgICAgICAgfQogICAgICAgICBpZiAoaSAhPSBjb2RlUGFnZUNoYXJzZXRzKCkuZW5kKCkpIHsK
LSAgICAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBDaGFyc2V0SW5mbz46Oml0ZXJhdG9yIGogPSBr
bm93bkNoYXJzZXRzKCkuZmluZChTdHJpbmcoaS0+c2Vjb25kLmRhdGEoKSwgaS0+c2Vjb25kLmxl
bmd0aCgpKSk7CisgICAgICAgICAgICBIYXNoTWFwPFN0cmluZywgQ2hhcnNldEluZm8+OjppdGVy
YXRvciBqID0ga25vd25DaGFyc2V0cygpLmZpbmQoU3RyaW5nKGktPnZhbHVlLmRhdGEoKSwgaS0+
dmFsdWUubGVuZ3RoKCkpKTsKICAgICAgICAgICAgIEFTU0VSVChqICE9IGtub3duQ2hhcnNldHMo
KS5lbmQoKSk7Ci0gICAgICAgICAgICBDaGFyc2V0SW5mbyYgaW5mbyA9IGotPnNlY29uZDsKLSAg
ICAgICAgICAgIGluZm8ubV9uYW1lID0gaS0+c2Vjb25kLmRhdGEoKTsKKyAgICAgICAgICAgIENo
YXJzZXRJbmZvJiBpbmZvID0gai0+dmFsdWU7CisgICAgICAgICAgICBpbmZvLm1fbmFtZSA9IGkt
PnZhbHVlLmRhdGEoKTsKICAgICAgICAgICAgIGluZm8ubV9mcmllbmRseU5hbWUgPSBjcEluZm8u
d3N6RGVzY3JpcHRpb247CiAgICAgICAgICAgICBpbmZvLm1fYWxpYXNlcy5hcHBlbmQobmFtZSk7
CiAgICAgICAgICAgICBpbmZvLm1fYWxpYXNlcy5hcHBlbmQoU3RyaW5nKGNwSW5mby53c3pIZWFk
ZXJDaGFyc2V0KS5sYXRpbjEoKSk7CiAgICAgICAgICAgICBpbmZvLm1fYWxpYXNlcy5hcHBlbmQo
U3RyaW5nKGNwSW5mby53c3pCb2R5Q2hhcnNldCkubGF0aW4xKCkpOwogICAgICAgICAgICAgU3Ry
aW5nIGNwTmFtZSA9ICJjcCIgKyBTdHJpbmc6Om51bWJlcihjcEluZm8udWlDb2RlUGFnZSk7CiAg
ICAgICAgICAgICBpbmZvLm1fYWxpYXNlcy5hcHBlbmQoY3BOYW1lLmxhdGluMSgpKTsKLSAgICAg
ICAgICAgIHN1cHBvcnRlZENoYXJzZXRzKCkuYWRkKGktPnNlY29uZC5kYXRhKCkpOworICAgICAg
ICAgICAgc3VwcG9ydGVkQ2hhcnNldHMoKS5hZGQoaS0+dmFsdWUuZGF0YSgpKTsKICAgICAgICAg
fQogICAgIH0KIH0KQEAgLTEyNiw3ICsxMjYsNyBAQCBzdGF0aWMgVUlOVCBnZXRDb2RlUGFnZShj
b25zdCBjaGFyKiBuYW1lKQogICAgIC8vIHNheWluZyAiPT0iIGlzIG5vdCBmb3VuZCBmb3IgY29u
c3RfaXRlcmF0b3IgYW5kIGl0ZXJhdG9yCiAgICAgY29uc3QgSGFzaE1hcDxTdHJpbmcsIENoYXJz
ZXRJbmZvPiYgY2hhcnNldHMgPSBrbm93bkNoYXJzZXRzKCk7CiAgICAgSGFzaE1hcDxTdHJpbmcs
IENoYXJzZXRJbmZvPjo6Y29uc3RfaXRlcmF0b3IgaSA9IGNoYXJzZXRzLmZpbmQobmFtZSk7Ci0g
ICAgcmV0dXJuIGkgPT0gY2hhcnNldHMuZW5kKCkgPyBDUF9BQ1AgOiBpLT5zZWNvbmQubV9jb2Rl
UGFnZTsKKyAgICByZXR1cm4gaSA9PSBjaGFyc2V0cy5lbmQoKSA/IENQX0FDUCA6IGktPnZhbHVl
Lm1fY29kZVBhZ2U7CiB9CiAKIHN0YXRpYyBQYXNzT3duUHRyPFRleHRDb2RlYz4gbmV3VGV4dENv
ZGVjV2luKGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcsIGNvbnN0IHZvaWQqKQpAQCAtMTQ5
LDkgKzE0OSw5IEBAIHZvaWQgVGV4dENvZGVjV2luOjpyZWdpc3RlckV4dGVuZGVkRW5jb2RpbmdO
YW1lcyhFbmNvZGluZ05hbWVSZWdpc3RyYXIgcmVnaXN0cmFyCiAgICAgZm9yIChDaGFyc2V0U2V0
OjppdGVyYXRvciBpID0gc3VwcG9ydGVkQ2hhcnNldHMoKS5iZWdpbigpOyBpICE9IHN1cHBvcnRl
ZENoYXJzZXRzKCkuZW5kKCk7ICsraSkgewogICAgICAgICBIYXNoTWFwPFN0cmluZywgQ2hhcnNl
dEluZm8+OjppdGVyYXRvciBqID0ga25vd25DaGFyc2V0cygpLmZpbmQoKmkpOwogICAgICAgICBp
ZiAoaiAhPSBrbm93bkNoYXJzZXRzKCkuZW5kKCkpIHsKLSAgICAgICAgICAgIHJlZ2lzdHJhcihq
LT5zZWNvbmQubV9uYW1lLmRhdGEoKSwgai0+c2Vjb25kLm1fbmFtZS5kYXRhKCkpOwotICAgICAg
ICAgICAgZm9yIChWZWN0b3I8Q1N0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGFsaWFzID0gai0+c2Vj
b25kLm1fYWxpYXNlcy5iZWdpbigpOyBhbGlhcyAhPSBqLT5zZWNvbmQubV9hbGlhc2VzLmVuZCgp
OyArK2FsaWFzKQotICAgICAgICAgICAgICAgIHJlZ2lzdHJhcihhbGlhcy0+ZGF0YSgpLCBqLT5z
ZWNvbmQubV9uYW1lLmRhdGEoKSk7CisgICAgICAgICAgICByZWdpc3RyYXIoai0+dmFsdWUubV9u
YW1lLmRhdGEoKSwgai0+dmFsdWUubV9uYW1lLmRhdGEoKSk7CisgICAgICAgICAgICBmb3IgKFZl
Y3RvcjxDU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgYWxpYXMgPSBqLT52YWx1ZS5tX2FsaWFzZXMu
YmVnaW4oKTsgYWxpYXMgIT0gai0+dmFsdWUubV9hbGlhc2VzLmVuZCgpOyArK2FsaWFzKQorICAg
ICAgICAgICAgICAgIHJlZ2lzdHJhcihhbGlhcy0+ZGF0YSgpLCBqLT52YWx1ZS5tX25hbWUuZGF0
YSgpKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTE2Miw3ICsxNjIsNyBAQCB2b2lkIFRleHRD
b2RlY1dpbjo6cmVnaXN0ZXJFeHRlbmRlZENvZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIgcmVnaXN0
cmFyKQogICAgIGZvciAoQ2hhcnNldFNldDo6aXRlcmF0b3IgaSA9IHN1cHBvcnRlZENoYXJzZXRz
KCkuYmVnaW4oKTsgaSAhPSBzdXBwb3J0ZWRDaGFyc2V0cygpLmVuZCgpOyArK2kpIHsKICAgICAg
ICAgSGFzaE1hcDxTdHJpbmcsIENoYXJzZXRJbmZvPjo6aXRlcmF0b3IgaiA9IGtub3duQ2hhcnNl
dHMoKS5maW5kKCppKTsKICAgICAgICAgaWYgKGogIT0ga25vd25DaGFyc2V0cygpLmVuZCgpKQot
ICAgICAgICAgICAgcmVnaXN0cmFyKGotPnNlY29uZC5tX25hbWUuZGF0YSgpLCBuZXdUZXh0Q29k
ZWNXaW4sIDApOworICAgICAgICAgICAgcmVnaXN0cmFyKGotPnZhbHVlLm1fbmFtZS5kYXRhKCks
IG5ld1RleHRDb2RlY1dpbiwgMCk7CiAgICAgfQogfQogCkBAIC0zMDEsNyArMzAxLDcgQEAgdm9p
ZCBUZXh0Q29kZWNXaW46OmVudW1lcmF0ZVN1cHBvcnRlZEVuY29kaW5ncyhFbmNvZGluZ1JlY2Vp
dmVyJiByZWNlaXZlcikKICAgICBsYW5ndWFnZU1hbmFnZXIoKTsKICAgICBmb3IgKENoYXJzZXRT
ZXQ6Oml0ZXJhdG9yIGkgPSBzdXBwb3J0ZWRDaGFyc2V0cygpLmJlZ2luKCk7IGkgIT0gc3VwcG9y
dGVkQ2hhcnNldHMoKS5lbmQoKTsgKytpKSB7CiAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBDaGFy
c2V0SW5mbz46Oml0ZXJhdG9yIGogPSBrbm93bkNoYXJzZXRzKCkuZmluZCgqaSk7Ci0gICAgICAg
IGlmIChqICE9IGtub3duQ2hhcnNldHMoKS5lbmQoKSAmJiAhcmVjZWl2ZXIucmVjZWl2ZShqLT5z
ZWNvbmQubV9uYW1lLmRhdGEoKSwgai0+c2Vjb25kLm1fZnJpZW5kbHlOYW1lLmNoYXJhY3RlcnNX
aXRoTnVsbFRlcm1pbmF0aW9uKCksIGotPnNlY29uZC5tX2NvZGVQYWdlKSkKKyAgICAgICAgaWYg
KGogIT0ga25vd25DaGFyc2V0cygpLmVuZCgpICYmICFyZWNlaXZlci5yZWNlaXZlKGotPnZhbHVl
Lm1fbmFtZS5kYXRhKCksIGotPnZhbHVlLm1fZnJpZW5kbHlOYW1lLmNoYXJhY3RlcnNXaXRoTnVs
bFRlcm1pbmF0aW9uKCksIGotPnZhbHVlLm1fY29kZVBhZ2UpKQogICAgICAgICAgICAgYnJlYWs7
CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBi
b2FyZFV0aWxpdGllc1dpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xpcGJv
YXJkVXRpbGl0aWVzV2luLmNwcAppbmRleCBmMjM3NDQ0YjcyY2YwMzExOTdjM2IwYmVhMTY5N2Fj
ZDM4NTBkYTExLi5mMzM1NTBlOTQwYTI4NjdjZmE5YTJkZDRmOGUwNTU3M2Y5OTY0ZTFiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xpcGJvYXJkVXRpbGl0aWVzV2lu
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xpcGJvYXJkVXRpbGl0aWVz
V2luLmNwcApAQCAtNzksNyArNzksNyBAQCBzdGF0aWMgYm9vbCBnZXREYXRhTWFwSXRlbShjb25z
dCBEcmFnRGF0YU1hcCogZGF0YU9iamVjdCwgRk9STUFURVRDKiBmb3JtYXQsIFN0cgogICAgIERy
YWdEYXRhTWFwOjpjb25zdF9pdGVyYXRvciBmb3VuZCA9IGRhdGFPYmplY3QtPmZpbmQoZm9ybWF0
LT5jZkZvcm1hdCk7CiAgICAgaWYgKGZvdW5kID09IGRhdGFPYmplY3QtPmVuZCgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgaXRlbSA9IGZvdW5kLT5zZWNvbmRbMF07CisgICAgaXRlbSA9
IGZvdW5kLT52YWx1ZVswXTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtODI5LDcgKzgyOSw3
IEBAIHZvaWQgZ2V0Q2xpcGJvYXJkRGF0YShJRGF0YU9iamVjdCogZGF0YU9iamVjdCwgRk9STUFU
RVRDKiBmb3JtYXQsIFZlY3RvcjxTdHJpbmc+CiAgICAgQ2xpcGJvYXJkRm9ybWF0TWFwOjpjb25z
dF9pdGVyYXRvciBmb3VuZCA9IGZvcm1hdE1hcC5maW5kKGZvcm1hdC0+Y2ZGb3JtYXQpOwogICAg
IGlmIChmb3VuZCA9PSBmb3JtYXRNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBmb3Vu
ZC0+c2Vjb25kLT5nZXRTdHJpbmcoZGF0YU9iamVjdCwgZm91bmQtPnNlY29uZC0+Zm9ybWF0LCBk
YXRhU3RyaW5ncyk7CisgICAgZm91bmQtPnZhbHVlLT5nZXRTdHJpbmcoZGF0YU9iamVjdCwgZm91
bmQtPnZhbHVlLT5mb3JtYXQsIGRhdGFTdHJpbmdzKTsKIH0KIAogdm9pZCBzZXRDbGlwYm9hcmRE
YXRhKElEYXRhT2JqZWN0KiBkYXRhT2JqZWN0LCBVSU5UIGZvcm1hdCwgY29uc3QgVmVjdG9yPFN0
cmluZz4mIGRhdGFTdHJpbmdzKQpAQCAtODM4LDcgKzgzOCw3IEBAIHZvaWQgc2V0Q2xpcGJvYXJk
RGF0YShJRGF0YU9iamVjdCogZGF0YU9iamVjdCwgVUlOVCBmb3JtYXQsIGNvbnN0IFZlY3RvcjxT
dHJpbmc+CiAgICAgQ2xpcGJvYXJkRm9ybWF0TWFwOjpjb25zdF9pdGVyYXRvciBmb3VuZCA9IGZv
cm1hdE1hcC5maW5kKGZvcm1hdCk7CiAgICAgaWYgKGZvdW5kID09IGZvcm1hdE1hcC5lbmQoKSkK
ICAgICAgICAgcmV0dXJuOwotICAgIGZvdW5kLT5zZWNvbmQtPnNldFN0cmluZyhkYXRhT2JqZWN0
LCBmb3VuZC0+c2Vjb25kLT5mb3JtYXQsIGRhdGFTdHJpbmdzKTsKKyAgICBmb3VuZC0+dmFsdWUt
PnNldFN0cmluZyhkYXRhT2JqZWN0LCBmb3VuZC0+dmFsdWUtPmZvcm1hdCwgZGF0YVN0cmluZ3Mp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS93aW4vQ2xpcGJvYXJkV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3dpbi9DbGlwYm9hcmRXaW4uY3BwCmluZGV4IGZjNTk1ZjkyZDIwNDNiNzZiYjk4YzUwZDE3YWIz
MmRhMDJhMmI2OGIuLmVmNWJiMzA0ZDIzZTk0OTUwMWY5MWI3Zjk4NzI1YzgyZmEwNmIzZGEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRXaW4uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRXaW4uY3BwCkBAIC01MjUs
NyArNTI1LDcgQEAgTGlzdEhhc2hTZXQ8U3RyaW5nPiBDbGlwYm9hcmRXaW46OnR5cGVzKCkgY29u
c3QKICAgICB9IGVsc2UgewogICAgICAgICBmb3IgKERyYWdEYXRhTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fZHJhZ0RhdGFNYXAuYmVnaW4oKTsgaXQgIT0gbV9kcmFnRGF0YU1hcC5lbmQoKTsg
KytpdCkgewogICAgICAgICAgICAgRk9STUFURVRDIGRhdGE7Ci0gICAgICAgICAgICBkYXRhLmNm
Rm9ybWF0ID0gKCppdCkuZmlyc3Q7CisgICAgICAgICAgICBkYXRhLmNmRm9ybWF0ID0gKCppdCku
a2V5OwogICAgICAgICAgICAgYWRkTWltZVR5cGVzRm9yRm9ybWF0KHJlc3VsdHMsIGRhdGEpOwog
ICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2lu
L0ZpbGVTeXN0ZW1XaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0ZpbGVTeXN0
ZW1XaW4uY3BwCmluZGV4IDBhYjBkNzI4MzJmNDg2Yjc0ZGRiOTgwZTFjOWI0ZDZlYzYxMmVhYTMu
LjU0YjQ3ZWZkZTUxNGU0MThmZmFlNWE0ODhmNTEyYzM1ZTFmYzU0ZDQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9GaWxlU3lzdGVtV2luLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5jcHAKQEAgLTIzOCw3ICsyMzgsNyBA
QCBzdGF0aWMgU3RyaW5nIGNhY2hlZFN0b3JhZ2VEaXJlY3RvcnkoRFdPUkQgcGF0aElkZW50aWZp
ZXIpCiAKICAgICBIYXNoTWFwPERXT1JELCBTdHJpbmc+OjppdGVyYXRvciBpdCA9IGRpcmVjdG9y
aWVzLmZpbmQocGF0aElkZW50aWZpZXIpOwogICAgIGlmIChpdCAhPSBkaXJlY3Rvcmllcy5lbmQo
KSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBpdC0+dmFsdWU7
CiAKICAgICBTdHJpbmcgZGlyZWN0b3J5ID0gc3RvcmFnZURpcmVjdG9yeShwYXRoSWRlbnRpZmll
cik7CiAgICAgZGlyZWN0b3JpZXMuYWRkKHBhdGhJZGVudGlmaWVyLCBkaXJlY3RvcnkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1J1bkxvb3BXaW4uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1J1bkxvb3BXaW4uY3BwCmluZGV4IDE2NjNiNjYxMzNh
YmMyY2IzZmQwMDU3ZDE5NjcxMjM3ZDBlNzk5ZGEuLjE3ZDY4NDVlOWZmZGMzOTI4YzA2N2M3YzE1
ODgzYWFiOTBkMjlhNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9S
dW5Mb29wV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUnVuTG9vcFdp
bi5jcHAKQEAgLTEyNiw3ICsxMjYsNyBAQCB2b2lkIFJ1bkxvb3A6OlRpbWVyQmFzZTo6dGltZXJG
aXJlZChSdW5Mb29wKiBydW5Mb29wLCB1aW50NjRfdCBJRCkKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIFRpbWVyQmFzZSogdGltZXIgPSBpdC0+c2Vjb25kOworICAgIFRpbWVyQmFzZSog
dGltZXIgPSBpdC0+dmFsdWU7CiAKICAgICBpZiAoIXRpbWVyLT5tX2lzUmVwZWF0aW5nKSB7CiAg
ICAgICAgIHJ1bkxvb3AtPm1fYWN0aXZlVGltZXJzLnJlbW92ZShpdCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vV0NEYXRhT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3dpbi9XQ0RhdGFPYmplY3QuY3BwCmluZGV4IGM1YWFlZmM3YzQwZTQ0ZTQ2
NTc3YTY2MTg0YjIxMjZhYzNjOGM0NGYuLjRlZWU0Yjk2MTM4Mzk4MDJmNDM5NzE5OTEyODE3OWY3
YzY4NTI0ODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9XQ0RhdGFP
YmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9XQ0RhdGFPYmplY3Qu
Y3BwCkBAIC0xNjksNyArMTY5LDcgQEAgSFJFU1VMVCBXQ0RhdGFPYmplY3Q6OmNyZWF0ZUluc3Rh
bmNlKFdDRGF0YU9iamVjdCoqIHJlc3VsdCwgY29uc3QgRHJhZ0RhdGFNYXAmIGQKICAgICAqcmVz
dWx0ID0gbmV3IFdDRGF0YU9iamVjdDsKIAogICAgIGZvciAoRHJhZ0RhdGFNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gZGF0YU1hcC5iZWdpbigpOyBpdCAhPSBkYXRhTWFwLmVuZCgpOyArK2l0KQot
ICAgICAgICBzZXRDbGlwYm9hcmREYXRhKCpyZXN1bHQsIGl0LT5maXJzdCwgaXQtPnNlY29uZCk7
CisgICAgICAgIHNldENsaXBib2FyZERhdGEoKnJlc3VsdCwgaXQtPmtleSwgaXQtPnZhbHVlKTsK
ICAgICByZXR1cm4gU19PSzsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vd2luY2UvTUlNRVR5cGVSZWdpc3RyeVdpbkNFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3dpbmNlL01JTUVUeXBlUmVnaXN0cnlXaW5DRS5jcHAKaW5kZXggOGEwZDNkMmI2MTYyYjQ2
ZGJiN2Q2MmYyMmNhMDMyNmRjN2ZjZWRjNS4uZTk2ZmIyYmE3ZDk5OWNlMmQzYWNiMGQwZjljNGMy
NDg3NDdmZTVlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luY2UvTUlN
RVR5cGVSZWdpc3RyeVdpbkNFLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW5j
ZS9NSU1FVHlwZVJlZ2lzdHJ5V2luQ0UuY3BwCkBAIC0xMDEsOCArMTAxLDggQEAgU3RyaW5nIE1J
TUVUeXBlUmVnaXN0cnk6OmdldFByZWZlcnJlZEV4dGVuc2lvbkZvck1JTUVUeXBlKGNvbnN0IFN0
cmluZyYgdHlwZSkKICAgICBpbml0TUlNRVR5cGVFbnRlbnNpb25NYXAoKTsKIAogICAgIGZvciAo
SGFzaE1hcDxTdHJpbmcsIFN0cmluZz46Oml0ZXJhdG9yIGkgPSBtaW1ldHlwZU1hcC5iZWdpbigp
OyBpICE9IG1pbWV0eXBlTWFwLmVuZCgpOyArK2kpIHsKLSAgICAgICAgaWYgKGVxdWFsSWdub3Jp
bmdDYXNlKGktPnNlY29uZCwgdHlwZSkpCi0gICAgICAgICAgICByZXR1cm4gaS0+Zmlyc3Q7Cisg
ICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShpLT52YWx1ZSwgdHlwZSkpCisgICAgICAgICAg
ICByZXR1cm4gaS0+a2V5OwogICAgIH0KIAogICAgIHJldHVybiBTdHJpbmcoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L0NvbnRleHRNZW51V3guY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vd3gvQ29udGV4dE1lbnVXeC5jcHAKaW5kZXggNDE4OWFhOTUyZmZl
YjRiY2EyM2RiNzBhOTgwNjFlZWRmZjRmMWRmNC4uZGYyZWU1MjdkOTQ4ZTE2MmFiYjg5NDIzOGJi
MmIzODRkODY5ZjYyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvQ29u
dGV4dE1lbnVXeC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvQ29udGV4dE1l
bnVXeC5jcHAKQEAgLTY3LDggKzY3LDggQEAgdm9pZCBDb250ZXh0TWVudTo6YXBwZW5kSXRlbShD
b250ZXh0TWVudUl0ZW0mIGl0ZW0pCiAKICAgICBJdGVtQWN0aW9uTWFwOjpjb25zdF9pdGVyYXRv
ciBlbmQgPSBzX2l0ZW1BY3Rpb25zLmVuZCgpOwogICAgIGZvciAoSXRlbUFjdGlvbk1hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBzX2l0ZW1BY3Rpb25zLmJlZ2luKCk7ICBpdCAhPSBlbmQ7ICsraXQp
IHsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQgPT0gaXRlbURlc2NyaXB0aW9uLmFjdGlvbikKLSAg
ICAgICAgICAgIGlkV3ggPSBpdC0+Zmlyc3Q7CisgICAgICAgIGlmIChpdC0+dmFsdWUgPT0gaXRl
bURlc2NyaXB0aW9uLmFjdGlvbikKKyAgICAgICAgICAgIGlkV3ggPSBpdC0+a2V5OwogICAgIH0K
IAogICAgIGlmIChpdGVtRGVzY3JpcHRpb24uc3ViTWVudSkgewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbHVn
aW5zL1BsdWdpbkRhdGFiYXNlLmNwcAppbmRleCA5NjFjNDU0ODViZjJkODc3NGFhMzAwYzc4NjUw
ZWFjOWRhYTA1ZmM4Li40NDUyYWZlMWU0YjYzOGI1ZjdkZGEwZWM3YjE3OWQ3YWUzZDlkNmUzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmNwcApAQCAtMTY2LDcgKzE2
Niw3IEBAIGJvb2wgUGx1Z2luRGF0YWJhc2U6OnJlZnJlc2goKQogICAgICAgICBNSU1FVG9EZXNj
cmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIG1hcF9pdCA9ICgqaXQpLT5taW1lVG9EZXNjcmlw
dGlvbnMoKS5iZWdpbigpOwogICAgICAgICBNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0
ZXJhdG9yIG1hcF9lbmQgPSAoKml0KS0+bWltZVRvRGVzY3JpcHRpb25zKCkuZW5kKCk7CiAgICAg
ICAgIGZvciAoOyBtYXBfaXQgIT0gbWFwX2VuZDsgKyttYXBfaXQpCi0gICAgICAgICAgICBtX3Jl
Z2lzdGVyZWRNSU1FVHlwZXMuYWRkKG1hcF9pdC0+Zmlyc3QpOworICAgICAgICAgICAgbV9yZWdp
c3RlcmVkTUlNRVR5cGVzLmFkZChtYXBfaXQtPmtleSk7CiAgICAgfQogCiAgICAgcmV0dXJuIHRy
dWU7CkBAIC0yNDcsOSArMjQ3LDkgQEAgU3RyaW5nIFBsdWdpbkRhdGFiYXNlOjpNSU1FVHlwZUZv
ckV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGV4dGVuc2lvbikgY29uc3QKICAgICAgICAgTUlNRVRv
RXh0ZW5zaW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWltZV9lbmQgPSAoKml0KS0+bWltZVRvRXh0
ZW5zaW9ucygpLmVuZCgpOwogCiAgICAgICAgIGZvciAoTUlNRVRvRXh0ZW5zaW9uc01hcDo6Y29u
c3RfaXRlcmF0b3IgbWltZV9pdCA9ICgqaXQpLT5taW1lVG9FeHRlbnNpb25zKCkuYmVnaW4oKTsg
bWltZV9pdCAhPSBtaW1lX2VuZDsgKyttaW1lX2l0KSB7Ci0gICAgICAgICAgICBtaW1lVHlwZSA9
IG1pbWVfaXQtPmZpcnN0OworICAgICAgICAgICAgbWltZVR5cGUgPSBtaW1lX2l0LT5rZXk7CiAg
ICAgICAgICAgICBQbHVnaW5QYWNrYWdlKiBwcmVmZXJyZWRQbHVnaW4gPSBtX3ByZWZlcnJlZFBs
dWdpbnMuZ2V0KG1pbWVUeXBlKS5nZXQoKTsKLSAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBleHRlbnNpb25zID0gbWltZV9pdC0+c2Vjb25kOworICAgICAgICAgICAgY29uc3QgVmVj
dG9yPFN0cmluZz4mIGV4dGVuc2lvbnMgPSBtaW1lX2l0LT52YWx1ZTsKICAgICAgICAgICAgIGJv
b2wgZm91bmRNYXBwaW5nID0gZmFsc2U7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgZXh0ZW5zaW9ucy5zaXplKCk7IGkrKykgewogICAgICAgICAgICAgICAgIGlmIChlcXVh
bElnbm9yaW5nQ2FzZShleHRlbnNpb25zW2ldLCBleHRlbnNpb24pKSB7CkBAIC0zMzksOCArMzM5
LDggQEAgdm9pZCBQbHVnaW5EYXRhYmFzZTo6cmVtb3ZlKFBsdWdpblBhY2thZ2UqIHBhY2thZ2Up
CiAgICAgTUlNRVRvRXh0ZW5zaW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBwYWNrYWdlLT5t
aW1lVG9FeHRlbnNpb25zKCkuYmVnaW4oKTsKICAgICBNSU1FVG9FeHRlbnNpb25zTWFwOjpjb25z
dF9pdGVyYXRvciBlbmQgPSBwYWNrYWdlLT5taW1lVG9FeHRlbnNpb25zKCkuZW5kKCk7CiAgICAg
Zm9yICggOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgUGx1Z2luUGFja2FnZUJ5TmFtZU1h
cDo6aXRlcmF0b3IgcGFja2FnZUluTWFwID0gbV9wcmVmZXJyZWRQbHVnaW5zLmZpbmQoaXQtPmZp
cnN0KTsKLSAgICAgICAgaWYgKHBhY2thZ2VJbk1hcCAhPSBtX3ByZWZlcnJlZFBsdWdpbnMuZW5k
KCkgJiYgcGFja2FnZUluTWFwLT5zZWNvbmQgPT0gcGFja2FnZSkKKyAgICAgICAgUGx1Z2luUGFj
a2FnZUJ5TmFtZU1hcDo6aXRlcmF0b3IgcGFja2FnZUluTWFwID0gbV9wcmVmZXJyZWRQbHVnaW5z
LmZpbmQoaXQtPmtleSk7CisgICAgICAgIGlmIChwYWNrYWdlSW5NYXAgIT0gbV9wcmVmZXJyZWRQ
bHVnaW5zLmVuZCgpICYmIHBhY2thZ2VJbk1hcC0+dmFsdWUgPT0gcGFja2FnZSkKICAgICAgICAg
ICAgIG1fcHJlZmVycmVkUGx1Z2lucy5yZW1vdmUocGFja2FnZUluTWFwKTsKICAgICB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luTWFpblRocmVhZFNjaGVkdWxl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXIu
Y3BwCmluZGV4IDc1Mjg2NzZiMTJhYThiZGE4ZjMzYjMyZWY0MGNjODc2NTc2NmQzMWEuLjM5YWU3
OTRlMmZiMDk3MjE5YTUyMjNlYmZiZWVkZjY5YjZlMjg2MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsdWdpbnMvUGx1Z2luTWFpblRocmVhZFNjaGVkdWxlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyLmNwcApAQCAtNDksNyAr
NDksNyBAQCB2b2lkIFBsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXI6OnNjaGVkdWxlQ2FsbChOUFAg
bnBwLCBNYWluVGhyZWFkRnVuY3Rpb24gZnVuY3RpbwogICAgIGlmIChpdCA9PSBtX2NhbGxRdWV1
ZU1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaXQtPnNlY29uZC5hcHBlbmQoQ2Fs
bChmdW5jdGlvbiwgdXNlckRhdGEpKTsKKyAgICBpdC0+dmFsdWUuYXBwZW5kKENhbGwoZnVuY3Rp
b24sIHVzZXJEYXRhKSk7CiAKICAgICBpZiAoIW1fY2FsbFBlbmRpbmcpIHsKICAgICAgICAgY2Fs
bE9uTWFpblRocmVhZChtYWluVGhyZWFkQ2FsbGJhY2ssIHRoaXMpOwpAQCAtOTcsNyArOTcsNyBA
QCB2b2lkIFBsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXI6OmRpc3BhdGNoQ2FsbHMoKQogICAgICAg
ICAvLyBFbXB0eSBhbGwgdGhlIHF1ZXVlcyBpbiB0aGUgb3JpZ2luYWwgbWFwCiAgICAgICAgIENh
bGxRdWV1ZU1hcDo6aXRlcmF0b3IgZW5kID0gbV9jYWxsUXVldWVNYXAuZW5kKCk7CiAgICAgICAg
IGZvciAoQ2FsbFF1ZXVlTWFwOjppdGVyYXRvciBpdCA9IG1fY2FsbFF1ZXVlTWFwLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIGl0LT5zZWNvbmQuY2xlYXIoKTsKKyAgICAg
ICAgICAgIGl0LT52YWx1ZS5jbGVhcigpOwogICAgIH0KIAogICAgIG1fY2FsbFBlbmRpbmcgPSBm
YWxzZTsKQEAgLTEwNSw3ICsxMDUsNyBAQCB2b2lkIFBsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXI6
OmRpc3BhdGNoQ2FsbHMoKQogCiAgICAgQ2FsbFF1ZXVlTWFwOjppdGVyYXRvciBlbmQgPSBjb3B5
LmVuZCgpOwogICAgIGZvciAoQ2FsbFF1ZXVlTWFwOjppdGVyYXRvciBpdCA9IGNvcHkuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBkaXNwYXRjaENhbGxzRm9yUGx1Z2luKGl0LT5m
aXJzdCwgaXQtPnNlY29uZCk7CisgICAgICAgIGRpc3BhdGNoQ2FsbHNGb3JQbHVnaW4oaXQtPmtl
eSwgaXQtPnZhbHVlKTsKIH0KIAogdm9pZCBQbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyOjptYWlu
VGhyZWFkQ2FsbGJhY2sodm9pZCogY29udGV4dCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsdWdpbnMvUGx1Z2luU3RyZWFtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2lu
U3RyZWFtLmNwcAppbmRleCA5Mzk1NjI4Y2M3MWUwNTMyZDEyMDdjZGYxYmEwNTMwOWZhODg2N2Ez
Li4xZTcxNzA4ZDA2YmQzZDgxMjQ2N2U5YzgyMzVkMTMwMTYyODI3OWU4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblN0cmVhbS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGx1Z2lucy9QbHVnaW5TdHJlYW0uY3BwCkBAIC0xNDcsOSArMTQ3LDkgQEAgdm9pZCBQbHVn
aW5TdHJlYW06OnN0YXJ0U3RyZWFtKCkKIAogICAgICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9p
dGVyYXRvciBlbmQgPSBtX3Jlc291cmNlUmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkcygpLmVuZCgp
OwogICAgICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9yZXNv
dXJjZVJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5maXJzdCk7CisgICAgICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+a2V5KTsKICAgICAgICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKHNlcGFyYXRvcik7Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZChpdC0+c2Vjb25kKTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT52YWx1
ZSk7CiAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKICAgICAgICAgfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2JsYWNrYmVycnkvUGx1Z2luRGF0
YUJsYWNrQmVycnkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ibGFja2JlcnJ5L1BsdWdp
bkRhdGFCbGFja0JlcnJ5LmNwcAppbmRleCBkOTIwZDFmYmQ1YTExMjQ2MDNhOGNkOThmYTEzNDM1
NmU3MzA2YjU5Li40NzQ2NjE2ZGUzMzVmYTgzY2VjOTZkOTMwZTIwZDhjMjhlOTRjM2I3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2JsYWNrYmVycnkvUGx1Z2luRGF0YUJsYWNr
QmVycnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvYmxhY2tiZXJyeS9QbHVnaW5E
YXRhQmxhY2tCZXJyeS5jcHAKQEAgLTQxLDggKzQxLDggQEAgdm9pZCBQbHVnaW5EYXRhOjppbml0
UGx1Z2lucyhjb25zdCBQYWdlKikKICAgICAgICAgTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25z
dF9pdGVyYXRvciBlbmQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuZW5kKCk7CiAgICAgICAgIGZvciAo
TUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1pbWVUb0Rlc2NyaXB0
aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIE1pbWVDbGFzc0lu
Zm8gbWltZTsKLSAgICAgICAgICAgIG1pbWUudHlwZSA9IGl0LT5maXJzdDsKLSAgICAgICAgICAg
IG1pbWUuZGVzYyA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICBtaW1lLnR5cGUgPSBpdC0+a2V5
OworICAgICAgICAgICAgbWltZS5kZXNjID0gaXQtPnZhbHVlOwogICAgICAgICAgICAgbWltZS5l
eHRlbnNpb25zID0gcGFja2FnZS0+bWltZVRvRXh0ZW5zaW9ucygpLmdldChtaW1lLnR5cGUpOwog
ICAgICAgICAgICAgaW5mby5taW1lcy5hcHBlbmQobWltZSk7CiAgICAgICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd3gvUGx1Z2luRGF0YVd4LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsdWdpbnMvd3gvUGx1Z2luRGF0YVd4LmNwcAppbmRleCAwZWI4OTBmZWYwNWExMTVl
YWNlNDI2Mzc2ODBhM2Q2YTEyZjU3NzI5Li4yNzk1MmM0YWU4YmZhNDllOThiMTFhZTk5NTlmYzc1
NGU0ZGIyM2JlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3d4L1BsdWdpbkRh
dGFXeC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy93eC9QbHVnaW5EYXRhV3guY3Bw
CkBAIC01MSw4ICs1MSw4IEBAIHZvaWQgUGx1Z2luRGF0YTo6aW5pdFBsdWdpbnMoY29uc3QgUGFn
ZSopCiAgICAgICAgIGZvciAoTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAg
ICAgICAgIE1pbWVDbGFzc0luZm8gbWltZTsKIAotICAgICAgICAgICAgbWltZS50eXBlID0gaXQt
PmZpcnN0OwotICAgICAgICAgICAgbWltZS5kZXNjID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAg
IG1pbWUudHlwZSA9IGl0LT5rZXk7CisgICAgICAgICAgICBtaW1lLmRlc2MgPSBpdC0+dmFsdWU7
CiAgICAgICAgICAgICBtaW1lLmV4dGVuc2lvbnMgPSBwYWNrYWdlLT5taW1lVG9FeHRlbnNpb25z
KCkuZ2V0KG1pbWUudHlwZSk7CiAKICAgICAgICAgICAgIGluZm8ubWltZXMuYXBwZW5kKG1pbWUp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5z
aWRlSW5mby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJbnNp
ZGVJbmZvLmNwcAppbmRleCBlMGQ2ZDE5OTMxZTg0ZTZhODQ2MDg2YTMxNWY1NmZkOWYwNmVlYjAz
Li43YjYwYWE5MzEwM2NkY2RhM2NkYzFiMWVmZWUwMmUxZjIwNTc4N2ZkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmNwcApA
QCAtNjAsNyArNjAsNyBAQCBFeGNsdXNpb25TaGFwZUluc2lkZUluZm86On5FeGNsdXNpb25TaGFw
ZUluc2lkZUluZm8oKQogRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKiBFeGNsdXNpb25TaGFwZUlu
c2lkZUluZm86OmVuc3VyZUV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mb0ZvclJlbmRlckJsb2NrKFJl
bmRlckJsb2NrKiBibG9jaykKIHsKICAgICBFeGNsdXNpb25TaGFwZUluc2lkZUluZm9NYXA6OkFk
ZFJlc3VsdCByZXN1bHQgPSBleGNsdXNpb25TaGFwZUluc2lkZUluZm9NYXAoKS5hZGQoYmxvY2ss
IGNyZWF0ZShibG9jaykpOwotICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnNlY29uZC5nZXQo
KTsKKyAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKIH0KIAogRXhjbHVz
aW9uU2hhcGVJbnNpZGVJbmZvKiBFeGNsdXNpb25TaGFwZUluc2lkZUluZm86OmV4Y2x1c2lvblNo
YXBlSW5zaWRlSW5mb0ZvclJlbmRlckJsb2NrKGNvbnN0IFJlbmRlckJsb2NrKiBibG9jaykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GbG93VGhyZWFkQ29udHJvbGxlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmxvd1RocmVhZENvbnRyb2xsZXIuY3BwCmlu
ZGV4IGNiNGJkYjFmMmM0MzJiZjg1NTZmYzI5MDkxNGQxZmJmZDI5Y2VmNmEuLmU3Y2VjNDBhMjVl
MGMxM2Y4NjUxMTI1NDc2OTNmN2M2YTA5ZGIwNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9GbG93VGhyZWFkQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0Zsb3dUaHJlYWRDb250cm9sbGVyLmNwcApAQCAtMTUzLDkgKzE1Myw5IEBAIHZv
aWQgRmxvd1RocmVhZENvbnRyb2xsZXI6OnVucmVnaXN0ZXJOYW1lZEZsb3dDb250ZW50Tm9kZShO
b2RlKiBjb250ZW50Tm9kZSkKICAgICBBU1NFUlQoY29udGVudE5vZGUgJiYgY29udGVudE5vZGUt
PmlzRWxlbWVudE5vZGUoKSk7CiAgICAgSGFzaE1hcDxOb2RlKiwgUmVuZGVyTmFtZWRGbG93VGhy
ZWFkKj46Oml0ZXJhdG9yIGl0ID0gbV9tYXBOYW1lZEZsb3dDb250ZW50Tm9kZXMuZmluZChjb250
ZW50Tm9kZSk7CiAgICAgQVNTRVJUKGl0ICE9IG1fbWFwTmFtZWRGbG93Q29udGVudE5vZGVzLmVu
ZCgpKTsKLSAgICBBU1NFUlQoaXQtPnNlY29uZCk7Ci0gICAgQVNTRVJUKGl0LT5zZWNvbmQtPmhh
c0NvbnRlbnROb2RlKGNvbnRlbnROb2RlKSk7Ci0gICAgaXQtPnNlY29uZC0+dW5yZWdpc3Rlck5h
bWVkRmxvd0NvbnRlbnROb2RlKGNvbnRlbnROb2RlKTsKKyAgICBBU1NFUlQoaXQtPnZhbHVlKTsK
KyAgICBBU1NFUlQoaXQtPnZhbHVlLT5oYXNDb250ZW50Tm9kZShjb250ZW50Tm9kZSkpOworICAg
IGl0LT52YWx1ZS0+dW5yZWdpc3Rlck5hbWVkRmxvd0NvbnRlbnROb2RlKGNvbnRlbnROb2RlKTsK
ICAgICBtX21hcE5hbWVkRmxvd0NvbnRlbnROb2Rlcy5yZW1vdmUoY29udGVudE5vZGUpOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAKaW5kZXggOWFkMGZj
ZmExMmM4MzNiMGExZDNjNzc0YzlmODc1NDNmNzVkNGMxOC4uNTkxMmM2OGIxNjQ5MWE1NTg3NDVi
YjU4ODQwMThkMjY2MjUyNmU5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0lubGluZUZsb3dCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVG
bG93Qm94LmNwcApAQCAtNDYwLDcgKzQ2MCw3IEBAIGJvb2wgSW5saW5lRmxvd0JveDo6cmVxdWly
ZXNJZGVvZ3JhcGhpY0Jhc2VsaW5lKGNvbnN0IEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvCiAg
ICAgICAgICAgICBjb25zdCBWZWN0b3I8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogdXNlZEZvbnRz
ID0gMDsKICAgICAgICAgICAgIGlmIChjdXJyLT5pc0lubGluZVRleHRCb3goKSkgewogICAgICAg
ICAgICAgICAgIEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IHRleHRCb3hEYXRhTWFwLmZpbmQodG9JbmxpbmVUZXh0Qm94KGN1cnIpKTsKLSAgICAg
ICAgICAgICAgICB1c2VkRm9udHMgPSBpdCA9PSB0ZXh0Qm94RGF0YU1hcC5lbmQoKSA/IDAgOiAm
aXQtPnNlY29uZC5maXJzdDsKKyAgICAgICAgICAgICAgICB1c2VkRm9udHMgPSBpdCA9PSB0ZXh0
Qm94RGF0YU1hcC5lbmQoKSA/IDAgOiAmaXQtPnZhbHVlLmZpcnN0OwogICAgICAgICAgICAgfQog
CiAgICAgICAgICAgICBpZiAodXNlZEZvbnRzKSB7CkBAIC04MjQsNyArODI0LDcgQEAgaW5saW5l
IHZvaWQgSW5saW5lRmxvd0JveDo6YWRkVGV4dEJveFZpc3VhbE92ZXJmbG93KElubGluZVRleHRC
b3gqIHRleHRCb3gsIEdseXAKICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSB0ZXh0Qm94LT5yZW5k
ZXJlcigpLT5zdHlsZShpc0ZpcnN0TGluZVN0eWxlKCkpOwogICAgIAogICAgIEdseXBoT3ZlcmZs
b3dBbmRGYWxsYmFja0ZvbnRzTWFwOjppdGVyYXRvciBpdCA9IHRleHRCb3hEYXRhTWFwLmZpbmQo
dGV4dEJveCk7Ci0gICAgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdyA9IGl0ID09IHRleHRC
b3hEYXRhTWFwLmVuZCgpID8gMCA6ICZpdC0+c2Vjb25kLnNlY29uZDsKKyAgICBHbHlwaE92ZXJm
bG93KiBnbHlwaE92ZXJmbG93ID0gaXQgPT0gdGV4dEJveERhdGFNYXAuZW5kKCkgPyAwIDogJml0
LT52YWx1ZS5zZWNvbmQ7CiAgICAgYm9vbCBpc0ZsaXBwZWRMaW5lID0gc3R5bGUtPmlzRmxpcHBl
ZExpbmVzV3JpdGluZ01vZGUoKTsKIAogICAgIGludCB0b3BHbHlwaEVkZ2UgPSBnbHlwaE92ZXJm
bG93ID8gKGlzRmxpcHBlZExpbmUgPyBnbHlwaE92ZXJmbG93LT5ib3R0b20gOiBnbHlwaE92ZXJm
bG93LT50b3ApIDogMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9jay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCmlu
ZGV4IGE4MWYzNjk1MmQzMmUyMzc1MmZlYzVjNTFiMjJmZTdmMWJiNjIyYmQuLjg5YzRjMDRlZDYy
YTM0YzBmMWMxOGEzMTViYWFiNTgyMGE4MTM5NDYgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrLmNwcApAQCAtNDQyOSw3ICs0NDI5LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6
Y2xlYXJGbG9hdHMoKQogCiAgICAgICAgIFJlbmRlcmVyVG9GbG9hdEluZm9NYXA6Oml0ZXJhdG9y
IGVuZCA9IGZsb2F0TWFwLmVuZCgpOwogICAgICAgICBmb3IgKFJlbmRlcmVyVG9GbG9hdEluZm9N
YXA6Oml0ZXJhdG9yIGl0ID0gZmxvYXRNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0g
ICAgICAgICAgICBGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QgPSAoKml0KS5zZWNvbmQ7
CisgICAgICAgICAgICBGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QgPSAoKml0KS52YWx1
ZTsKICAgICAgICAgICAgIGlmICghZmxvYXRpbmdPYmplY3QtPmlzRGVzY2VuZGFudCgpKSB7CiAg
ICAgICAgICAgICAgICAgY2hhbmdlTG9naWNhbFRvcCA9IDA7CiAgICAgICAgICAgICAgICAgY2hh
bmdlTG9naWNhbEJvdHRvbSA9IG1heChjaGFuZ2VMb2dpY2FsQm90dG9tLCBsb2dpY2FsQm90dG9t
Rm9yRmxvYXQoZmxvYXRpbmdPYmplY3QpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAKaW5kZXggODQ0YTg1ODUyNmE4YTYyODMxNzBl
YWE5YzhjNDc4OTFmMmUzMGNkZC4uZjdhMWNlN2Y0MWVjZWI2YmY2Y2UwNGZjYTFiNTdlYjgyMzdm
M2U5YSAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGlu
ZUxheW91dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGlu
ZUxheW91dC5jcHAKQEAgLTcxMSwxNCArNzExLDE0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRM
b2dpY2FsV2lkdGhGb3JUZXh0UnVuKFJvb3RJbmxpbmVCb3gqIGxpbmVCb3gsIEJpZGlSdW4qIHJ1
CiAgICAgaWYgKCFmYWxsYmFja0ZvbnRzLmlzRW1wdHkoKSkgewogICAgICAgICBBU1NFUlQocnVu
LT5tX2JveC0+aXNUZXh0KCkpOwogICAgICAgICBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250
c01hcDo6aXRlcmF0b3IgaXQgPSB0ZXh0Qm94RGF0YU1hcC5hZGQodG9JbmxpbmVUZXh0Qm94KHJ1
bi0+bV9ib3gpLCBtYWtlX3BhaXIoVmVjdG9yPGNvbnN0IFNpbXBsZUZvbnREYXRhKj4oKSwgR2x5
cGhPdmVyZmxvdygpKSkuaXRlcmF0b3I7Ci0gICAgICAgIEFTU0VSVChpdC0+c2Vjb25kLmZpcnN0
LmlzRW1wdHkoKSk7Ci0gICAgICAgIGNvcHlUb1ZlY3RvcihmYWxsYmFja0ZvbnRzLCBpdC0+c2Vj
b25kLmZpcnN0KTsKKyAgICAgICAgQVNTRVJUKGl0LT52YWx1ZS5maXJzdC5pc0VtcHR5KCkpOwor
ICAgICAgICBjb3B5VG9WZWN0b3IoZmFsbGJhY2tGb250cywgaXQtPnZhbHVlLmZpcnN0KTsKICAg
ICAgICAgcnVuLT5tX2JveC0+cGFyZW50KCktPmNsZWFyRGVzY2VuZGFudHNIYXZlU2FtZUxpbmVI
ZWlnaHRBbmRCYXNlbGluZSgpOwogICAgIH0KICAgICBpZiAoKGdseXBoT3ZlcmZsb3cudG9wIHx8
IGdseXBoT3ZlcmZsb3cuYm90dG9tIHx8IGdseXBoT3ZlcmZsb3cubGVmdCB8fCBnbHlwaE92ZXJm
bG93LnJpZ2h0KSkgewogICAgICAgICBBU1NFUlQocnVuLT5tX2JveC0+aXNUZXh0KCkpOwogICAg
ICAgICBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcDo6aXRlcmF0b3IgaXQgPSB0ZXh0
Qm94RGF0YU1hcC5hZGQodG9JbmxpbmVUZXh0Qm94KHJ1bi0+bV9ib3gpLCBtYWtlX3BhaXIoVmVj
dG9yPGNvbnN0IFNpbXBsZUZvbnREYXRhKj4oKSwgR2x5cGhPdmVyZmxvdygpKSkuaXRlcmF0b3I7
Ci0gICAgICAgIGl0LT5zZWNvbmQuc2Vjb25kID0gZ2x5cGhPdmVyZmxvdzsKKyAgICAgICAgaXQt
PnZhbHVlLnNlY29uZCA9IGdseXBoT3ZlcmZsb3c7CiAgICAgICAgIHJ1bi0+bV9ib3gtPmNsZWFy
S25vd25Ub0hhdmVOb092ZXJmbG93KCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKaW5kZXggNjRkOTBhZGIxNTU2OWIx
N2FjZWY0NzMyYjQ4NzQ3ZmI5YzJmMzY0OC4uMzUwMmY0N2E0ZmNmZmM0M2I5YTUwOGRjZTQyNDBi
MzExY2EyZjgwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eE1vZGVsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
TW9kZWxPYmplY3QuY3BwCkBAIC0xMzMsNyArMTMzLDcgQEAgdm9pZCBJbWFnZVF1YWxpdHlDb250
cm9sbGVyOjpoaWdoUXVhbGl0eVJlcGFpbnRUaW1lckZpcmVkKFRpbWVyPEltYWdlUXVhbGl0eUNv
bnQKICAgICBpZiAobV9hbmltYXRlZFJlc2l6ZUlzQWN0aXZlKSB7CiAgICAgICAgIG1fYW5pbWF0
ZWRSZXNpemVJc0FjdGl2ZSA9IGZhbHNlOwogICAgICAgICBmb3IgKE9iamVjdExheWVyU2l6ZU1h
cDo6aXRlcmF0b3IgaXQgPSBtX29iamVjdExheWVyU2l6ZU1hcC5iZWdpbigpOyBpdCAhPSBtX29i
amVjdExheWVyU2l6ZU1hcC5lbmQoKTsgKytpdCkKLSAgICAgICAgICAgIGl0LT5maXJzdC0+cmVw
YWludCgpOworICAgICAgICAgICAgaXQtPmtleS0+cmVwYWludCgpOwogICAgIH0KIH0KIApAQCAt
MTU4LDE0ICsxNTgsMTQgQEAgYm9vbCBJbWFnZVF1YWxpdHlDb250cm9sbGVyOjpzaG91bGRQYWlu
dEF0TG93UXVhbGl0eShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFIKIAogICAgIC8vIExvb2sg
b3Vyc2VsdmVzIHVwIGluIHRoZSBoYXNodGFibGVzLgogICAgIE9iamVjdExheWVyU2l6ZU1hcDo6
aXRlcmF0b3IgaSA9IG1fb2JqZWN0TGF5ZXJTaXplTWFwLmZpbmQob2JqZWN0KTsKLSAgICBMYXll
clNpemVNYXAqIGlubmVyTWFwID0gaSAhPSBtX29iamVjdExheWVyU2l6ZU1hcC5lbmQoKSA/ICZp
LT5zZWNvbmQgOiAwOworICAgIExheWVyU2l6ZU1hcCogaW5uZXJNYXAgPSBpICE9IG1fb2JqZWN0
TGF5ZXJTaXplTWFwLmVuZCgpID8gJmktPnZhbHVlIDogMDsKICAgICBMYXlvdXRTaXplIG9sZFNp
emU7CiAgICAgYm9vbCBpc0ZpcnN0UmVzaXplID0gdHJ1ZTsKICAgICBpZiAoaW5uZXJNYXApIHsK
ICAgICAgICAgTGF5ZXJTaXplTWFwOjppdGVyYXRvciBqID0gaW5uZXJNYXAtPmZpbmQobGF5ZXIp
OwogICAgICAgICBpZiAoaiAhPSBpbm5lck1hcC0+ZW5kKCkpIHsKICAgICAgICAgICAgIGlzRmly
c3RSZXNpemUgPSBmYWxzZTsKLSAgICAgICAgICAgIG9sZFNpemUgPSBqLT5zZWNvbmQ7CisgICAg
ICAgICAgICBvbGRTaXplID0gai0+dmFsdWU7CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb3VudGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb3VudGVyLmNwcAppbmRleCBlMzQ5NmIxMzY1NjJhMWEx
YzdiMDJlZTE3YjdjMTBjNDRiMWE0YzEzLi4yNGM4NjMzMDQyMTIyYThjNTBmM2JhZDcwNzEyYzU0
OTkzMjllNzljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ291
bnRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3Bw
CkBAIC01NjgsMTAgKzU2OCwxMCBAQCB2b2lkIFJlbmRlckNvdW50ZXI6OmRlc3Ryb3lDb3VudGVy
Tm9kZXMoUmVuZGVyT2JqZWN0KiBvd25lcikKICAgICBDb3VudGVyTWFwczo6aXRlcmF0b3IgbWFw
c0l0ZXJhdG9yID0gbWFwcy5maW5kKG93bmVyKTsKICAgICBpZiAobWFwc0l0ZXJhdG9yID09IG1h
cHMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBDb3VudGVyTWFwKiBtYXAgPSBtYXBzSXRl
cmF0b3ItPnNlY29uZC5nZXQoKTsKKyAgICBDb3VudGVyTWFwKiBtYXAgPSBtYXBzSXRlcmF0b3It
PnZhbHVlLmdldCgpOwogICAgIENvdW50ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC0+
ZW5kKCk7CiAgICAgZm9yIChDb3VudGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGRlc3Ryb3lDb3VudGVyTm9kZVdpdGhv
dXRNYXBSZW1vdmFsKGl0LT5maXJzdCwgaXQtPnNlY29uZC5nZXQoKSk7CisgICAgICAgIGRlc3Ry
b3lDb3VudGVyTm9kZVdpdGhvdXRNYXBSZW1vdmFsKGl0LT5rZXksIGl0LT52YWx1ZS5nZXQoKSk7
CiAgICAgfQogICAgIG1hcHMucmVtb3ZlKG1hcHNJdGVyYXRvcik7CiAgICAgb3duZXItPnNldEhh
c0NvdW50ZXJOb2RlTWFwKGZhbHNlKTsKQEAgLTU4NSw3ICs1ODUsNyBAQCB2b2lkIFJlbmRlckNv
dW50ZXI6OmRlc3Ryb3lDb3VudGVyTm9kZShSZW5kZXJPYmplY3QqIG93bmVyLCBjb25zdCBBdG9t
aWNTdHJpbmcmCiAgICAgQ291bnRlck1hcDo6aXRlcmF0b3IgbWFwSXRlcmF0b3IgPSBtYXAtPmZp
bmQoaWRlbnRpZmllcik7CiAgICAgaWYgKG1hcEl0ZXJhdG9yID09IG1hcC0+ZW5kKCkpCiAgICAg
ICAgIHJldHVybjsKLSAgICBkZXN0cm95Q291bnRlck5vZGVXaXRob3V0TWFwUmVtb3ZhbChpZGVu
dGlmaWVyLCBtYXBJdGVyYXRvci0+c2Vjb25kLmdldCgpKTsKKyAgICBkZXN0cm95Q291bnRlck5v
ZGVXaXRob3V0TWFwUmVtb3ZhbChpZGVudGlmaWVyLCBtYXBJdGVyYXRvci0+dmFsdWUuZ2V0KCkp
OwogICAgIG1hcC0+cmVtb3ZlKG1hcEl0ZXJhdG9yKTsKICAgICAvLyBXZSBkbyBub3QgZGVsZXRl
ICJtYXAiIGhlcmUgZXZlbiBpZiBlbXB0eSBiZWNhdXNlIHdlIGV4cGVjdCB0byByZXVzZQogICAg
IC8vIGl0IHNvb24uIEluIG9yZGVyIGZvciBhIHJlbmRlcmVyIHRvIGxvc2UgYWxsIGl0cyBjb3Vu
dGVycyBwZXJtYW5lbnRseSwKQEAgLTYyNSwyMiArNjI1LDIyIEBAIHN0YXRpYyB2b2lkIHVwZGF0
ZUNvdW50ZXJzKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiAgICAgQ291bnRlckRpcmVjdGl2ZU1h
cDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gZGlyZWN0aXZlTWFwLT5lbmQoKTsKICAgICBpZiAoIXJl
bmRlcmVyLT5oYXNDb3VudGVyTm9kZU1hcCgpKSB7CiAgICAgICAgIGZvciAoQ291bnRlckRpcmVj
dGl2ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBkaXJlY3RpdmVNYXAtPmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkKLSAgICAgICAgICAgIG1ha2VDb3VudGVyTm9kZShyZW5kZXJlciwgaXQtPmZp
cnN0LCBmYWxzZSk7CisgICAgICAgICAgICBtYWtlQ291bnRlck5vZGUocmVuZGVyZXIsIGl0LT5r
ZXksIGZhbHNlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBDb3VudGVyTWFwKiBjb3Vu
dGVyTWFwID0gY291bnRlck1hcHMoKS5nZXQocmVuZGVyZXIpOwogICAgIEFTU0VSVChjb3VudGVy
TWFwKTsKICAgICBmb3IgKENvdW50ZXJEaXJlY3RpdmVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
ZGlyZWN0aXZlTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgUmVmUHRy
PENvdW50ZXJOb2RlPiBub2RlID0gY291bnRlck1hcC0+Z2V0KGl0LT5maXJzdCk7CisgICAgICAg
IFJlZlB0cjxDb3VudGVyTm9kZT4gbm9kZSA9IGNvdW50ZXJNYXAtPmdldChpdC0+a2V5KTsKICAg
ICAgICAgaWYgKCFub2RlKSB7Ci0gICAgICAgICAgICBtYWtlQ291bnRlck5vZGUocmVuZGVyZXIs
IGl0LT5maXJzdCwgZmFsc2UpOworICAgICAgICAgICAgbWFrZUNvdW50ZXJOb2RlKHJlbmRlcmVy
LCBpdC0+a2V5LCBmYWxzZSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAg
ICAgICBSZWZQdHI8Q291bnRlck5vZGU+IG5ld1BhcmVudCA9IDA7CiAgICAgICAgIFJlZlB0cjxD
b3VudGVyTm9kZT4gbmV3UHJldmlvdXNTaWJsaW5nID0gMDsKICAgICAgICAgCi0gICAgICAgIGZp
bmRQbGFjZUZvckNvdW50ZXIocmVuZGVyZXIsIGl0LT5maXJzdCwgbm9kZS0+aGFzUmVzZXRUeXBl
KCksIG5ld1BhcmVudCwgbmV3UHJldmlvdXNTaWJsaW5nKTsKLSAgICAgICAgaWYgKG5vZGUgIT0g
Y291bnRlck1hcC0+Z2V0KGl0LT5maXJzdCkpCisgICAgICAgIGZpbmRQbGFjZUZvckNvdW50ZXIo
cmVuZGVyZXIsIGl0LT5rZXksIG5vZGUtPmhhc1Jlc2V0VHlwZSgpLCBuZXdQYXJlbnQsIG5ld1By
ZXZpb3VzU2libGluZyk7CisgICAgICAgIGlmIChub2RlICE9IGNvdW50ZXJNYXAtPmdldChpdC0+
a2V5KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBDb3VudGVyTm9kZSogcGFyZW50
ID0gbm9kZS0+cGFyZW50KCk7CiAgICAgICAgIGlmIChuZXdQYXJlbnQgPT0gcGFyZW50ICYmIG5l
d1ByZXZpb3VzU2libGluZyA9PSBub2RlLT5wcmV2aW91c1NpYmxpbmcoKSkKQEAgLTY0OCw3ICs2
NDgsNyBAQCBzdGF0aWMgdm9pZCB1cGRhdGVDb3VudGVycyhSZW5kZXJPYmplY3QqIHJlbmRlcmVy
KQogICAgICAgICBpZiAocGFyZW50KQogICAgICAgICAgICAgcGFyZW50LT5yZW1vdmVDaGlsZChu
b2RlLmdldCgpKTsKICAgICAgICAgaWYgKG5ld1BhcmVudCkKLSAgICAgICAgICAgIG5ld1BhcmVu
dC0+aW5zZXJ0QWZ0ZXIobm9kZS5nZXQoKSwgbmV3UHJldmlvdXNTaWJsaW5nLmdldCgpLCBpdC0+
Zmlyc3QpOworICAgICAgICAgICAgbmV3UGFyZW50LT5pbnNlcnRBZnRlcihub2RlLmdldCgpLCBu
ZXdQcmV2aW91c1NpYmxpbmcuZ2V0KCksIGl0LT5rZXkpOwogICAgIH0KIH0KIApAQCAtNjgwLDIx
ICs2ODAsMjEgQEAgdm9pZCBSZW5kZXJDb3VudGVyOjpyZW5kZXJlclN0eWxlQ2hhbmdlZChSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHkKICAgICAgICAgICAgIENvdW50ZXJE
aXJlY3RpdmVNYXA6OmNvbnN0X2l0ZXJhdG9yIG5ld01hcEVuZCA9IG5ld0NvdW50ZXJEaXJlY3Rp
dmVzLT5lbmQoKTsKICAgICAgICAgICAgIENvdW50ZXJEaXJlY3RpdmVNYXA6OmNvbnN0X2l0ZXJh
dG9yIG9sZE1hcEVuZCA9IG9sZENvdW50ZXJEaXJlY3RpdmVzLT5lbmQoKTsKICAgICAgICAgICAg
IGZvciAoQ291bnRlckRpcmVjdGl2ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBuZXdDb3VudGVy
RGlyZWN0aXZlcy0+YmVnaW4oKTsgaXQgIT0gbmV3TWFwRW5kOyArK2l0KSB7Ci0gICAgICAgICAg
ICAgICAgQ291bnRlckRpcmVjdGl2ZU1hcDo6Y29uc3RfaXRlcmF0b3Igb2xkTWFwSXQgPSBvbGRD
b3VudGVyRGlyZWN0aXZlcy0+ZmluZChpdC0+Zmlyc3QpOworICAgICAgICAgICAgICAgIENvdW50
ZXJEaXJlY3RpdmVNYXA6OmNvbnN0X2l0ZXJhdG9yIG9sZE1hcEl0ID0gb2xkQ291bnRlckRpcmVj
dGl2ZXMtPmZpbmQoaXQtPmtleSk7CiAgICAgICAgICAgICAgICAgaWYgKG9sZE1hcEl0ICE9IG9s
ZE1hcEVuZCkgewotICAgICAgICAgICAgICAgICAgICBpZiAob2xkTWFwSXQtPnNlY29uZCA9PSBp
dC0+c2Vjb25kKQorICAgICAgICAgICAgICAgICAgICBpZiAob2xkTWFwSXQtPnZhbHVlID09IGl0
LT52YWx1ZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
ICAgICAgICBSZW5kZXJDb3VudGVyOjpkZXN0cm95Q291bnRlck5vZGUocmVuZGVyZXIsIGl0LT5m
aXJzdCk7CisgICAgICAgICAgICAgICAgICAgIFJlbmRlckNvdW50ZXI6OmRlc3Ryb3lDb3VudGVy
Tm9kZShyZW5kZXJlciwgaXQtPmtleSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIC8vIFdlIG11c3QgY3JlYXRlIHRoaXMgbm9kZSBoZXJlLCBiZWNhdXNlIHRoZSBjaGFuZ2Vk
IG5vZGUgbWF5IGJlIGEgbm9kZSB3aXRoIG5vIGRpc3BsYXkgc3VjaCBhcwogICAgICAgICAgICAg
ICAgIC8vIGFzIHRob3NlIGNyZWF0ZWQgYnkgdGhlIGluY3JlbWVudCBvciByZXNldCBkaXJlY3Rp
dmVzIGFuZCB0aGUgcmUtbGF5b3V0IHRoYXQgd2lsbCBoYXBwZW4gd2lsbAogICAgICAgICAgICAg
ICAgIC8vIG5vdCBjYXRjaCB0aGUgY2hhbmdlIGlmIHRoZSBub2RlIGhhZCBubyBjaGlsZHJlbi4K
LSAgICAgICAgICAgICAgICBtYWtlQ291bnRlck5vZGUocmVuZGVyZXIsIGl0LT5maXJzdCwgZmFs
c2UpOworICAgICAgICAgICAgICAgIG1ha2VDb3VudGVyTm9kZShyZW5kZXJlciwgaXQtPmtleSwg
ZmFsc2UpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgLy8gRGVzdHJveWluZyBvbGQgY291
bnRlcnMgdGhhdCBkbyBub3QgZXhpc3QgaW4gdGhlIG5ldyBjb3VudGVyRGlyZWN0aXZlIG1hcC4K
ICAgICAgICAgICAgIGZvciAoQ291bnRlckRpcmVjdGl2ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBvbGRDb3VudGVyRGlyZWN0aXZlcy0+YmVnaW4oKTsgaXQgIT1vbGRNYXBFbmQ7ICsraXQpIHsK
LSAgICAgICAgICAgICAgICBpZiAoIW5ld0NvdW50ZXJEaXJlY3RpdmVzLT5jb250YWlucyhpdC0+
Zmlyc3QpKQotICAgICAgICAgICAgICAgICAgICBSZW5kZXJDb3VudGVyOjpkZXN0cm95Q291bnRl
ck5vZGUocmVuZGVyZXIsIGl0LT5maXJzdCk7CisgICAgICAgICAgICAgICAgaWYgKCFuZXdDb3Vu
dGVyRGlyZWN0aXZlcy0+Y29udGFpbnMoaXQtPmtleSkpCisgICAgICAgICAgICAgICAgICAgIFJl
bmRlckNvdW50ZXI6OmRlc3Ryb3lDb3VudGVyTm9kZShyZW5kZXJlciwgaXQtPmtleSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAocmVuZGVyZXItPmhh
c0NvdW50ZXJOb2RlTWFwKCkpCkBAIC03MDYsNyArNzA2LDcgQEAgdm9pZCBSZW5kZXJDb3VudGVy
OjpyZW5kZXJlclN0eWxlQ2hhbmdlZChSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBSZW5k
ZXJTdHkKICAgICAgICAgICAgIC8vIFdlIG11c3QgY3JlYXRlIHRoaXMgbm9kZSBoZXJlLCBiZWNh
dXNlIHRoZSBhZGRlZCBub2RlIG1heSBiZSBhIG5vZGUgd2l0aCBubyBkaXNwbGF5IHN1Y2ggYXMK
ICAgICAgICAgICAgIC8vIGFzIHRob3NlIGNyZWF0ZWQgYnkgdGhlIGluY3JlbWVudCBvciByZXNl
dCBkaXJlY3RpdmVzIGFuZCB0aGUgcmUtbGF5b3V0IHRoYXQgd2lsbCBoYXBwZW4gd2lsbAogICAg
ICAgICAgICAgLy8gbm90IGNhdGNoIHRoZSBjaGFuZ2UgaWYgdGhlIG5vZGUgaGFkIG5vIGNoaWxk
cmVuLgotICAgICAgICAgICAgbWFrZUNvdW50ZXJOb2RlKHJlbmRlcmVyLCBpdC0+Zmlyc3QsIGZh
bHNlKTsKKyAgICAgICAgICAgIG1ha2VDb3VudGVyTm9kZShyZW5kZXJlciwgaXQtPmtleSwgZmFs
c2UpOwogICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckZsb3dUaHJlYWQuY3BwCmluZGV4IGU5NDIyNDJhZmMzMTYzYzI3YmQ5MzI2YjZiOTVkMjFi
MjgxOGM1ODkuLjUxMjI4ZGJjYjg4ODI5ZDRiNmFhOTZhMmM5MWI5ZmJkNTQyNzhlM2IgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAKQEAgLTU3OSw3
ICs1NzksNyBAQCB2b2lkIFJlbmRlckZsb3dUaHJlYWQ6OnNldFJlZ2lvblJhbmdlRm9yQm94KGNv
bnN0IFJlbmRlckJveCogYm94LCBMYXlvdXRVbml0IG9mZgogICAgIH0KIAogICAgIC8vIElmIG5v
dGhpbmcgY2hhbmdlZCwganVzdCBiYWlsLgotICAgIFJlbmRlclJlZ2lvblJhbmdlJiByYW5nZSA9
IGl0LT5zZWNvbmQ7CisgICAgUmVuZGVyUmVnaW9uUmFuZ2UmIHJhbmdlID0gaXQtPnZhbHVlOwog
ICAgIGlmIChyYW5nZS5zdGFydFJlZ2lvbigpID09IHN0YXJ0UmVnaW9uICYmIHJhbmdlLmVuZFJl
Z2lvbigpID09IGVuZFJlZ2lvbikKICAgICAgICAgcmV0dXJuOwogCkBAIC02MDksNyArNjA5LDcg
QEAgdm9pZCBSZW5kZXJGbG93VGhyZWFkOjpnZXRSZWdpb25SYW5nZUZvckJveChjb25zdCBSZW5k
ZXJCb3gqIGJveCwgUmVuZGVyUmVnaW9uKiYKICAgICBpZiAoaXQgPT0gbV9yZWdpb25SYW5nZU1h
cC5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY29uc3QgUmVuZGVyUmVnaW9uUmFuZ2Um
IHJhbmdlID0gaXQtPnNlY29uZDsKKyAgICBjb25zdCBSZW5kZXJSZWdpb25SYW5nZSYgcmFuZ2Ug
PSBpdC0+dmFsdWU7CiAgICAgc3RhcnRSZWdpb24gPSByYW5nZS5zdGFydFJlZ2lvbigpOwogICAg
IGVuZFJlZ2lvbiA9IHJhbmdlLmVuZFJlZ2lvbigpOwogICAgIEFTU0VSVChtX3JlZ2lvbkxpc3Qu
Y29udGFpbnMoc3RhcnRSZWdpb24pICYmIG1fcmVnaW9uTGlzdC5jb250YWlucyhlbmRSZWdpb24p
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCmluZGV4IDRiMDk2M2Fi
Yzc5OTkwYTJiMzFlMmY3ZmEzYWMyMmVlZmRiMTcxNzUuLmQ5ZTBiZmNkMzI5MzUzNDcxYTg3OWI3
NGVlN2JlMzY0MWUyOWRkMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
LmNwcApAQCAtMjg5MCw3ICsyODkwLDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnQoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LAogICAgIHBh
aW50TGF5ZXIodGhpcywgY29udGV4dCwgZW5jbG9zaW5nSW50UmVjdChkYW1hZ2VSZWN0KSwgTGF5
b3V0U2l6ZSgpLCBwYWludEJlaGF2aW9yLCBwYWludGluZ1Jvb3QsIHJlZ2lvbiwgJm92ZXJsYXBU
ZXN0UmVxdWVzdHMsIHBhaW50RmxhZ3MpOwogICAgIE92ZXJsYXBUZXN0UmVxdWVzdE1hcDo6aXRl
cmF0b3IgZW5kID0gb3ZlcmxhcFRlc3RSZXF1ZXN0cy5lbmQoKTsKICAgICBmb3IgKE92ZXJsYXBU
ZXN0UmVxdWVzdE1hcDo6aXRlcmF0b3IgaXQgPSBvdmVybGFwVGVzdFJlcXVlc3RzLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPmZpcnN0LT5zZXRPdmVybGFwVGVzdFJlc3Vs
dChmYWxzZSk7CisgICAgICAgIGl0LT5rZXktPnNldE92ZXJsYXBUZXN0UmVzdWx0KGZhbHNlKTsK
IH0KIAogdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRPdmVybGF5U2Nyb2xsYmFycyhHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QsIFBhaW50QmVoYXZp
b3IgcGFpbnRCZWhhdmlvciwgUmVuZGVyT2JqZWN0KiBwYWludGluZ1Jvb3QpCkBAIC0yOTU5LDEx
ICsyOTU5LDExIEBAIHN0YXRpYyB2b2lkIHBlcmZvcm1PdmVybGFwVGVzdHMoT3ZlcmxhcFRlc3RS
ZXF1ZXN0TWFwJiBvdmVybGFwVGVzdFJlcXVlc3RzLCBjb25zCiAgICAgT3ZlcmxhcFRlc3RSZXF1
ZXN0TWFwOjppdGVyYXRvciBlbmQgPSBvdmVybGFwVGVzdFJlcXVlc3RzLmVuZCgpOwogICAgIExh
eW91dFJlY3QgYm91bmRpbmdCb3ggPSBsYXllci0+Ym91bmRpbmdCb3gocm9vdExheWVyKTsKICAg
ICBmb3IgKE92ZXJsYXBUZXN0UmVxdWVzdE1hcDo6aXRlcmF0b3IgaXQgPSBvdmVybGFwVGVzdFJl
cXVlc3RzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoIWJvdW5kaW5n
Qm94LmludGVyc2VjdHMoaXQtPnNlY29uZCkpCisgICAgICAgIGlmICghYm91bmRpbmdCb3guaW50
ZXJzZWN0cyhpdC0+dmFsdWUpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaXQt
PmZpcnN0LT5zZXRPdmVybGFwVGVzdFJlc3VsdCh0cnVlKTsKLSAgICAgICAgb3ZlcmxhcHBlZFJl
cXVlc3RDbGllbnRzLmFwcGVuZChpdC0+Zmlyc3QpOworICAgICAgICBpdC0+a2V5LT5zZXRPdmVy
bGFwVGVzdFJlc3VsdCh0cnVlKTsKKyAgICAgICAgb3ZlcmxhcHBlZFJlcXVlc3RDbGllbnRzLmFw
cGVuZChpdC0+a2V5KTsKICAgICB9CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvdmVybGFw
cGVkUmVxdWVzdENsaWVudHMuc2l6ZSgpOyArK2kpCiAgICAgICAgIG92ZXJsYXBUZXN0UmVxdWVz
dHMucmVtb3ZlKG92ZXJsYXBwZWRSZXF1ZXN0Q2xpZW50c1tpXSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlckluZm8uY3BwCmluZGV4IGFjYmYwN2Q5
ZDFiZmQyMDIxYzU1NDE1MjY2ZGQ0NDMwNTA1NTVhN2QuLmNiNGM1ZDY2MTEwYzkyNDEyZjM1MGVh
ODk5MzI3MmNlNjJjZDdlMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllckZpbHRlckluZm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllckZpbHRlckluZm8uY3BwCkBAIC01Niw3ICs1Niw3IEBAIFJlbmRlckxheWVyRmls
dGVySW5mbyogUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvOjpmaWx0ZXJJbmZvRm9yUmVuZGVyTGF5ZXIo
Y29uc3QgUmVuCiAgICAgaWYgKCFzX2ZpbHRlck1hcCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAg
UmVuZGVyTGF5ZXJGaWx0ZXJJbmZvTWFwOjppdGVyYXRvciBpdGVyID0gc19maWx0ZXJNYXAtPmZp
bmQobGF5ZXIpOwotICAgIHJldHVybiAoaXRlciAhPSBzX2ZpbHRlck1hcC0+ZW5kKCkpID8gaXRl
ci0+c2Vjb25kIDogMDsKKyAgICByZXR1cm4gKGl0ZXIgIT0gc19maWx0ZXJNYXAtPmVuZCgpKSA/
IGl0ZXItPnZhbHVlIDogMDsKIH0KIAogUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvKiBSZW5kZXJMYXll
ckZpbHRlckluZm86OmNyZWF0ZUZpbHRlckluZm9Gb3JSZW5kZXJMYXllcklmTmVlZGVkKFJlbmRl
ckxheWVyKiBsYXllcikKQEAgLTY3LDcgKzY3LDcgQEAgUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvKiBS
ZW5kZXJMYXllckZpbHRlckluZm86OmNyZWF0ZUZpbHRlckluZm9Gb3JSZW5kZXJMYXllcklmTmUK
ICAgICBSZW5kZXJMYXllckZpbHRlckluZm9NYXA6Oml0ZXJhdG9yIGl0ZXIgPSBzX2ZpbHRlck1h
cC0+ZmluZChsYXllcik7CiAgICAgaWYgKGl0ZXIgIT0gc19maWx0ZXJNYXAtPmVuZCgpKSB7CiAg
ICAgICAgIEFTU0VSVChsYXllci0+aGFzRmlsdGVySW5mbygpKTsKLSAgICAgICAgcmV0dXJuIGl0
ZXItPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGl0ZXItPnZhbHVlOwogICAgIH0KICAgICAKICAg
ICBSZW5kZXJMYXllckZpbHRlckluZm8qIGZpbHRlciA9IG5ldyBSZW5kZXJMYXllckZpbHRlcklu
Zm8obGF5ZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5h
bWVkRmxvd1RocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRG
bG93VGhyZWFkLmNwcAppbmRleCAyNjRhZWI0OTc3OTE5YmI1NGZmOGMwNGU3MTU5ODE3OGRjNGNj
ZGQ1Li5mNWU2M2Y0MDY0N2E5ZTExM2Q1NDVmNjZjOTg1NGViM2FmMTY3NjYyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93VGhyZWFkLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93VGhyZWFkLmNwcApAQCAt
MTQyLDcgKzE0Miw3IEBAIGJvb2wgUmVuZGVyTmFtZWRGbG93VGhyZWFkOjpkZXBlbmRzT24oUmVu
ZGVyTmFtZWRGbG93VGhyZWFkKiBvdGhlclJlbmRlckZsb3dUaHJlCiAgICAgUmVuZGVyTmFtZWRG
bG93VGhyZWFkQ291bnRlZFNldDo6Y29uc3RfaXRlcmF0b3IgaXRlcmF0b3IgPSBtX2xheW91dEJl
Zm9yZVRocmVhZHNTZXQuYmVnaW4oKTsKICAgICBSZW5kZXJOYW1lZEZsb3dUaHJlYWRDb3VudGVk
U2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2xheW91dEJlZm9yZVRocmVhZHNTZXQuZW5kKCk7
CiAgICAgZm9yICg7IGl0ZXJhdG9yICE9IGVuZDsgKytpdGVyYXRvcikgewotICAgICAgICBjb25z
dCBSZW5kZXJOYW1lZEZsb3dUaHJlYWQqIGJlZm9yZUZsb3dUaHJlYWQgPSAoKml0ZXJhdG9yKS5m
aXJzdDsKKyAgICAgICAgY29uc3QgUmVuZGVyTmFtZWRGbG93VGhyZWFkKiBiZWZvcmVGbG93VGhy
ZWFkID0gKCppdGVyYXRvcikua2V5OwogICAgICAgICBpZiAoYmVmb3JlRmxvd1RocmVhZC0+ZGVw
ZW5kc09uKG90aGVyUmVuZGVyRmxvd1RocmVhZCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CkBAIC0zMDksNyArMzA5LDcgQEAgdm9pZCBSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OnJl
bW92ZURlcGVuZGVuY3lPbkZsb3dUaHJlYWQoUmVuZGVyTmFtZWRGbG93VGhyZWFkKgogdm9pZCBS
ZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OnB1c2hEZXBlbmRlbmNpZXMoUmVuZGVyTmFtZWRGbG93VGhy
ZWFkTGlzdCYgbGlzdCkKIHsKICAgICBmb3IgKFJlbmRlck5hbWVkRmxvd1RocmVhZENvdW50ZWRT
ZXQ6Oml0ZXJhdG9yIGl0ZXIgPSBtX2xheW91dEJlZm9yZVRocmVhZHNTZXQuYmVnaW4oKTsgaXRl
ciAhPSBtX2xheW91dEJlZm9yZVRocmVhZHNTZXQuZW5kKCk7ICsraXRlcikgewotICAgICAgICBS
ZW5kZXJOYW1lZEZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSAoKml0ZXIpLmZpcnN0OworICAgICAg
ICBSZW5kZXJOYW1lZEZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSAoKml0ZXIpLmtleTsKICAgICAg
ICAgaWYgKGxpc3QuY29udGFpbnMoZmxvd1RocmVhZCkpCiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgZmxvd1RocmVhZC0+cHVzaERlcGVuZGVuY2llcyhsaXN0KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZWdpb24uY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5jcHAKaW5kZXggOGE3NDg3ZDdjZGE2ODIzNzc1MTRj
ZGZmNzE4NjlmN2IwNWJjYjM0My4uMWM1ZGRiZWViNjFlMmE4MDZlMjljOTg0NTRiZjRhZTVkMmU0
OGI3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5jcHAKQEAgLTMz
Niw3ICszMzYsNyBAQCBSZW5kZXJCb3hSZWdpb25JbmZvKiBSZW5kZXJSZWdpb246OnNldFJlbmRl
ckJveFJlZ2lvbkluZm8oY29uc3QgUmVuZGVyQm94KiBib3gsCiAgICAgaWYgKCFtX2lzVmFsaWQg
fHwgIW1fZmxvd1RocmVhZCkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBPd25QdHI8UmVuZGVy
Qm94UmVnaW9uSW5mbz4mIGJveEluZm8gPSBtX3JlbmRlckJveFJlZ2lvbkluZm8uYWRkKGJveCwg
bnVsbHB0cikuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBPd25QdHI8UmVuZGVyQm94UmVnaW9uSW5m
bz4mIGJveEluZm8gPSBtX3JlbmRlckJveFJlZ2lvbkluZm8uYWRkKGJveCwgbnVsbHB0cikuaXRl
cmF0b3ItPnZhbHVlOwogICAgIGlmIChib3hJbmZvKQogICAgICAgICAqYm94SW5mbyA9IFJlbmRl
ckJveFJlZ2lvbkluZm8obG9naWNhbExlZnRJbnNldCwgbG9naWNhbFJpZ2h0SW5zZXQsIGNvbnRh
aW5pbmdCbG9ja0NoYWluSXNJbnNldCk7CiAgICAgZWxzZQpAQCAtNDAxLDggKzQwMSw4IEBAIHZv
aWQgUmVuZGVyUmVnaW9uOjpzZXRSZWdpb25PYmplY3RzUmVnaW9uU3R5bGUoKQogICAgICAgICBS
ZWZQdHI8UmVuZGVyU3R5bGU+IG9iamVjdFN0eWxlSW5SZWdpb247CiAgICAgICAgIGJvb2wgb2Jq
ZWN0UmVnaW9uU3R5bGVDYWNoZWQgPSBmYWxzZTsKICAgICAgICAgaWYgKGl0ICE9IG1fcmVuZGVy
T2JqZWN0UmVnaW9uU3R5bGUuZW5kKCkpIHsKLSAgICAgICAgICAgIG9iamVjdFN0eWxlSW5SZWdp
b24gPSBpdC0+c2Vjb25kLnN0eWxlOwotICAgICAgICAgICAgQVNTRVJUKGl0LT5zZWNvbmQuY2Fj
aGVkKTsKKyAgICAgICAgICAgIG9iamVjdFN0eWxlSW5SZWdpb24gPSBpdC0+dmFsdWUuc3R5bGU7
CisgICAgICAgICAgICBBU1NFUlQoaXQtPnZhbHVlLmNhY2hlZCk7CiAgICAgICAgICAgICBvYmpl
Y3RSZWdpb25TdHlsZUNhY2hlZCA9IHRydWU7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAg
b2JqZWN0U3R5bGVJblJlZ2lvbiA9IGNvbXB1dGVTdHlsZUluUmVnaW9uKG9iamVjdCk7CkBAIC00
MjAsMTIgKzQyMCwxMiBAQCB2b2lkIFJlbmRlclJlZ2lvbjo6cmVzdG9yZVJlZ2lvbk9iamVjdHNP
cmlnaW5hbFN0eWxlKCkKIAogICAgIFJlbmRlck9iamVjdFJlZ2lvblN0eWxlTWFwIHRlbXA7CiAg
ICAgZm9yIChSZW5kZXJPYmplY3RSZWdpb25TdHlsZU1hcDo6aXRlcmF0b3IgaXRlciA9IG1fcmVu
ZGVyT2JqZWN0UmVnaW9uU3R5bGUuYmVnaW4oKSwgZW5kID0gbV9yZW5kZXJPYmplY3RSZWdpb25T
dHlsZS5lbmQoKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewotICAgICAgICBSZW5kZXJPYmplY3Qq
IG9iamVjdCA9IGNvbnN0X2Nhc3Q8UmVuZGVyT2JqZWN0Kj4oaXRlci0+Zmlyc3QpOworICAgICAg
ICBSZW5kZXJPYmplY3QqIG9iamVjdCA9IGNvbnN0X2Nhc3Q8UmVuZGVyT2JqZWN0Kj4oaXRlci0+
a2V5KTsKICAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBvYmplY3RSZWdpb25TdHlsZSA9IG9i
amVjdC0+c3R5bGUoKTsKLSAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBvYmplY3RPcmlnaW5h
bFN0eWxlID0gaXRlci0+c2Vjb25kLnN0eWxlOworICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+
IG9iamVjdE9yaWdpbmFsU3R5bGUgPSBpdGVyLT52YWx1ZS5zdHlsZTsKICAgICAgICAgb2JqZWN0
LT5zZXRTdHlsZUludGVybmFsKG9iamVjdE9yaWdpbmFsU3R5bGUpOwogCi0gICAgICAgIGJvb2wg
c2hvdWxkQ2FjaGVSZWdpb25TdHlsZSA9IGl0ZXItPnNlY29uZC5jYWNoZWQ7CisgICAgICAgIGJv
b2wgc2hvdWxkQ2FjaGVSZWdpb25TdHlsZSA9IGl0ZXItPnZhbHVlLmNhY2hlZDsKICAgICAgICAg
aWYgKCFzaG91bGRDYWNoZVJlZ2lvblN0eWxlKSB7CiAgICAgICAgICAgICAvLyBDaGVjayB3aGV0
aGVyIHdlIHNob3VsZCBjYWNoZSB0aGUgY29tcHV0ZWQgc3R5bGUgaW4gcmVnaW9uLgogICAgICAg
ICAgICAgdW5zaWduZWQgY2hhbmdlZENvbnRleHRTZW5zaXRpdmVQcm9wZXJ0aWVzID0gQ29udGV4
dFNlbnNpdGl2ZVByb3BlcnR5Tm9uZTsKQEAgLTQ4Miw3ICs0ODIsNyBAQCB2b2lkIFJlbmRlclJl
Z2lvbjo6Y29tcHV0ZUNoaWxkcmVuU3R5bGVJblJlZ2lvbihjb25zdCBSZW5kZXJPYmplY3QqIG9i
amVjdCkKICAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBjaGlsZFN0eWxlSW5SZWdpb247CiAg
ICAgICAgIGJvb2wgb2JqZWN0UmVnaW9uU3R5bGVDYWNoZWQgPSBmYWxzZTsKICAgICAgICAgaWYg
KGl0ICE9IG1fcmVuZGVyT2JqZWN0UmVnaW9uU3R5bGUuZW5kKCkpIHsKLSAgICAgICAgICAgIGNo
aWxkU3R5bGVJblJlZ2lvbiA9IGl0LT5zZWNvbmQuc3R5bGU7CisgICAgICAgICAgICBjaGlsZFN0
eWxlSW5SZWdpb24gPSBpdC0+dmFsdWUuc3R5bGU7CiAgICAgICAgICAgICBvYmplY3RSZWdpb25T
dHlsZUNhY2hlZCA9IHRydWU7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAoY2hp
bGQtPmlzQW5vbnltb3VzKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGFibGVTZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
YWJsZVNlY3Rpb24uY3BwCmluZGV4IDZjOWUzMzU0YmIwNzM2YWIyMDAxMjM2YmVkZTM2ODVhYzU5
M2FkMzguLmE5ZTE2Njc1YWJiZGNiYWI3ZjVjZDgxNDZmYjQ1MGFmZTNjZjM5YWMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCkBAIC0xNDI4
LDcgKzE0MjgsNyBAQCBDb2xsYXBzZWRCb3JkZXJWYWx1ZSYgUmVuZGVyVGFibGVTZWN0aW9uOjpj
YWNoZWRDb2xsYXBzZWRCb3JkZXIoY29uc3QgUmVuZGVyVGFibAogICAgIEFTU0VSVCh0YWJsZSgp
LT5jb2xsYXBzZUJvcmRlcnMoKSk7CiAgICAgSGFzaE1hcDxwYWlyPGNvbnN0IFJlbmRlclRhYmxl
Q2VsbCosIGludD4sIENvbGxhcHNlZEJvcmRlclZhbHVlPjo6aXRlcmF0b3IgaXQgPSBtX2NlbGxz
Q29sbGFwc2VkQm9yZGVycy5maW5kKG1ha2VfcGFpcihjZWxsLCBzaWRlKSk7CiAgICAgQVNTRVJU
KGl0ICE9IG1fY2VsbHNDb2xsYXBzZWRCb3JkZXJzLmVuZCgpKTsKLSAgICByZXR1cm4gaXQtPnNl
Y29uZDsKKyAgICByZXR1cm4gaXQtPnZhbHVlOwogfQogCiBSZW5kZXJUYWJsZVNlY3Rpb24qIFJl
bmRlclRhYmxlU2VjdGlvbjo6Y3JlYXRlQW5vbnltb3VzV2l0aFBhcmVudFJlbmRlcmVyKGNvbnN0
IFJlbmRlck9iamVjdCogcGFyZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lTWFjLm1tCmluZGV4IDRiZTg3ZGY1OWQzMzYwNGQwNmRhN2I1YjVhNTY3NzFiYzczMWYwNTMu
LmE5MGIzOGVhZTkxN2E3OWUyYjA2ODhhYzBkNDQxNjZjNThkZDNiZmEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KQEAgLTM4MCw3ICszODAsNyBAQCBDb2xv
ciBSZW5kZXJUaGVtZU1hYzo6c3lzdGVtQ29sb3IoaW50IGNzc1ZhbHVlSWQpIGNvbnN0CiAgICAg
ewogICAgICAgICBIYXNoTWFwPGludCwgUkdCQTMyPjo6aXRlcmF0b3IgaXQgPSBtX3N5c3RlbUNv
bG9yQ2FjaGUuZmluZChjc3NWYWx1ZUlkKTsKICAgICAgICAgaWYgKGl0ICE9IG1fc3lzdGVtQ29s
b3JDYWNoZS5lbmQoKSkKLSAgICAgICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgICAgICAg
ICAgcmV0dXJuIGl0LT52YWx1ZTsKICAgICB9CiAKICAgICBDb2xvciBjb2xvcjsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAppbmRleCA2NjFiYzk0ZTRhZjU3ZDY4MmM4NGUw
OTg2YjQ5OGY4YzVkZTgwM2JkLi4zYTUwYjcxMDNkNDEwYmM4M2M1ZDg2MDY2ZGIyNjAzMzg5M2Ji
OGUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCkBAIC00NTMsNyAr
NDUzLDcgQEAgSW50UmVjdCBSZW5kZXJWaWV3OjpzZWxlY3Rpb25Cb3VuZHMoYm9vbCBjbGlwVG9W
aXNpYmxlQ29udGVudCkgY29uc3QKICAgICAgICAgICAgIHNlbGVjdGVkT2JqZWN0cy5zZXQob3Ms
IGFkb3B0UHRyKG5ldyBSZW5kZXJTZWxlY3Rpb25JbmZvKG9zLCBjbGlwVG9WaXNpYmxlQ29udGVu
dCkpKTsKICAgICAgICAgICAgIFJlbmRlckJsb2NrKiBjYiA9IG9zLT5jb250YWluaW5nQmxvY2so
KTsKICAgICAgICAgICAgIHdoaWxlIChjYiAmJiAhY2ItPmlzUmVuZGVyVmlldygpKSB7Ci0gICAg
ICAgICAgICAgICAgT3duUHRyPFJlbmRlclNlbGVjdGlvbkluZm8+JiBibG9ja0luZm8gPSBzZWxl
Y3RlZE9iamVjdHMuYWRkKGNiLCBudWxscHRyKS5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICAg
ICAgICAgIE93blB0cjxSZW5kZXJTZWxlY3Rpb25JbmZvPiYgYmxvY2tJbmZvID0gc2VsZWN0ZWRP
YmplY3RzLmFkZChjYiwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwogICAgICAgICAgICAgICAg
IGlmIChibG9ja0luZm8pCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIGJsb2NrSW5mbyA9IGFkb3B0UHRyKG5ldyBSZW5kZXJTZWxlY3Rpb25JbmZvKGNiLCBjbGlw
VG9WaXNpYmxlQ29udGVudCkpOwpAQCAtNDY4LDcgKzQ2OCw3IEBAIEludFJlY3QgUmVuZGVyVmll
dzo6c2VsZWN0aW9uQm91bmRzKGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRlbnQpIGNvbnN0CiAgICAg
TGF5b3V0UmVjdCBzZWxSZWN0OwogICAgIFNlbGVjdGlvbk1hcDo6aXRlcmF0b3IgZW5kID0gc2Vs
ZWN0ZWRPYmplY3RzLmVuZCgpOwogICAgIGZvciAoU2VsZWN0aW9uTWFwOjppdGVyYXRvciBpID0g
c2VsZWN0ZWRPYmplY3RzLmJlZ2luKCk7IGkgIT0gZW5kOyArK2kpIHsKLSAgICAgICAgUmVuZGVy
U2VsZWN0aW9uSW5mbyogaW5mbyA9IGktPnNlY29uZC5nZXQoKTsKKyAgICAgICAgUmVuZGVyU2Vs
ZWN0aW9uSW5mbyogaW5mbyA9IGktPnZhbHVlLmdldCgpOwogICAgICAgICAvLyBSZW5kZXJTZWxl
Y3Rpb25JbmZvOjpyZWN0KCkgaXMgaW4gdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSByZXBhaW50Q29u
dGFpbmVyLCBzbyBtYXAgdG8gcGFnZSBjb29yZGluYXRlcy4KICAgICAgICAgTGF5b3V0UmVjdCBj
dXJyUmVjdCA9IGluZm8tPnJlY3QoKTsKICAgICAgICAgaWYgKFJlbmRlckxheWVyTW9kZWxPYmpl
Y3QqIHJlcGFpbnRDb250YWluZXIgPSBpbmZvLT5yZXBhaW50Q29udGFpbmVyKCkpIHsKQEAgLTUz
Myw3ICs1MzMsNyBAQCB2b2lkIFJlbmRlclZpZXc6OnNldFNlbGVjdGlvbihSZW5kZXJPYmplY3Qq
IHN0YXJ0LCBpbnQgc3RhcnRQb3MsIFJlbmRlck9iamVjdCogZQogICAgICAgICAgICAgaWYgKGJs
b2NrUmVwYWludE1vZGUgPT0gUmVwYWludE5ld1hPUk9sZCkgewogICAgICAgICAgICAgICAgIFJl
bmRlckJsb2NrKiBjYiA9IG9zLT5jb250YWluaW5nQmxvY2soKTsKICAgICAgICAgICAgICAgICB3
aGlsZSAoY2IgJiYgIWNiLT5pc1JlbmRlclZpZXcoKSkgewotICAgICAgICAgICAgICAgICAgICBP
d25QdHI8UmVuZGVyQmxvY2tTZWxlY3Rpb25JbmZvPiYgYmxvY2tJbmZvID0gb2xkU2VsZWN0ZWRC
bG9ja3MuYWRkKGNiLCBudWxscHRyKS5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICAgICAgICAg
ICAgICBPd25QdHI8UmVuZGVyQmxvY2tTZWxlY3Rpb25JbmZvPiYgYmxvY2tJbmZvID0gb2xkU2Vs
ZWN0ZWRCbG9ja3MuYWRkKGNiLCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChibG9ja0luZm8pCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICAgICAgYmxvY2tJbmZvID0gYWRvcHRQdHIobmV3IFJlbmRlckJsb2Nr
U2VsZWN0aW9uSW5mbyhjYikpOwpAQCAtNTQ4LDcgKzU0OCw3IEBAIHZvaWQgUmVuZGVyVmlldzo6
c2V0U2VsZWN0aW9uKFJlbmRlck9iamVjdCogc3RhcnQsIGludCBzdGFydFBvcywgUmVuZGVyT2Jq
ZWN0KiBlCiAgICAgLy8gTm93IGNsZWFyIHRoZSBzZWxlY3Rpb24uCiAgICAgU2VsZWN0ZWRPYmpl
Y3RNYXA6Oml0ZXJhdG9yIG9sZE9iamVjdHNFbmQgPSBvbGRTZWxlY3RlZE9iamVjdHMuZW5kKCk7
CiAgICAgZm9yIChTZWxlY3RlZE9iamVjdE1hcDo6aXRlcmF0b3IgaSA9IG9sZFNlbGVjdGVkT2Jq
ZWN0cy5iZWdpbigpOyBpICE9IG9sZE9iamVjdHNFbmQ7ICsraSkKLSAgICAgICAgaS0+Zmlyc3Qt
PnNldFNlbGVjdGlvblN0YXRlSWZOZWVkZWQoU2VsZWN0aW9uTm9uZSk7CisgICAgICAgIGktPmtl
eS0+c2V0U2VsZWN0aW9uU3RhdGVJZk5lZWRlZChTZWxlY3Rpb25Ob25lKTsKIAogICAgIC8vIHNl
dCBzZWxlY3Rpb24gc3RhcnQgYW5kIGVuZAogICAgIG1fc2VsZWN0aW9uU3RhcnQgPSBzdGFydDsK
QEAgLTU4Niw3ICs1ODYsNyBAQCB2b2lkIFJlbmRlclZpZXc6OnNldFNlbGVjdGlvbihSZW5kZXJP
YmplY3QqIHN0YXJ0LCBpbnQgc3RhcnRQb3MsIFJlbmRlck9iamVjdCogZQogICAgICAgICAgICAg
bmV3U2VsZWN0ZWRPYmplY3RzLnNldChvLCBhZG9wdFB0cihuZXcgUmVuZGVyU2VsZWN0aW9uSW5m
byhvLCB0cnVlKSkpOwogICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGNiID0gby0+Y29udGFpbmlu
Z0Jsb2NrKCk7CiAgICAgICAgICAgICB3aGlsZSAoY2IgJiYgIWNiLT5pc1JlbmRlclZpZXcoKSkg
ewotICAgICAgICAgICAgICAgIE93blB0cjxSZW5kZXJCbG9ja1NlbGVjdGlvbkluZm8+JiBibG9j
a0luZm8gPSBuZXdTZWxlY3RlZEJsb2Nrcy5hZGQoY2IsIG51bGxwdHIpLml0ZXJhdG9yLT5zZWNv
bmQ7CisgICAgICAgICAgICAgICAgT3duUHRyPFJlbmRlckJsb2NrU2VsZWN0aW9uSW5mbz4mIGJs
b2NrSW5mbyA9IG5ld1NlbGVjdGVkQmxvY2tzLmFkZChjYiwgbnVsbHB0cikuaXRlcmF0b3ItPnZh
bHVlOwogICAgICAgICAgICAgICAgIGlmIChibG9ja0luZm8pCiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIGJsb2NrSW5mbyA9IGFkb3B0UHRyKG5ldyBSZW5kZXJC
bG9ja1NlbGVjdGlvbkluZm8oY2IpKTsKQEAgLTYwNCw5ICs2MDQsOSBAQCB2b2lkIFJlbmRlclZp
ZXc6OnNldFNlbGVjdGlvbihSZW5kZXJPYmplY3QqIHN0YXJ0LCBpbnQgc3RhcnRQb3MsIFJlbmRl
ck9iamVjdCogZQogCiAgICAgLy8gSGF2ZSBhbnkgb2YgdGhlIG9sZCBzZWxlY3RlZCBvYmplY3Rz
IGNoYW5nZWQgY29tcGFyZWQgdG8gdGhlIG5ldyBzZWxlY3Rpb24/CiAgICAgZm9yIChTZWxlY3Rl
ZE9iamVjdE1hcDo6aXRlcmF0b3IgaSA9IG9sZFNlbGVjdGVkT2JqZWN0cy5iZWdpbigpOyBpICE9
IG9sZE9iamVjdHNFbmQ7ICsraSkgewotICAgICAgICBSZW5kZXJPYmplY3QqIG9iaiA9IGktPmZp
cnN0OworICAgICAgICBSZW5kZXJPYmplY3QqIG9iaiA9IGktPmtleTsKICAgICAgICAgUmVuZGVy
U2VsZWN0aW9uSW5mbyogbmV3SW5mbyA9IG5ld1NlbGVjdGVkT2JqZWN0cy5nZXQob2JqKTsKLSAg
ICAgICAgUmVuZGVyU2VsZWN0aW9uSW5mbyogb2xkSW5mbyA9IGktPnNlY29uZC5nZXQoKTsKKyAg
ICAgICAgUmVuZGVyU2VsZWN0aW9uSW5mbyogb2xkSW5mbyA9IGktPnZhbHVlLmdldCgpOwogICAg
ICAgICBpZiAoIW5ld0luZm8gfHwgb2xkSW5mby0+cmVjdCgpICE9IG5ld0luZm8tPnJlY3QoKSB8
fCBvbGRJbmZvLT5zdGF0ZSgpICE9IG5ld0luZm8tPnN0YXRlKCkgfHwKICAgICAgICAgICAgICht
X3NlbGVjdGlvblN0YXJ0ID09IG9iaiAmJiBvbGRTdGFydFBvcyAhPSBtX3NlbGVjdGlvblN0YXJ0
UG9zKSB8fAogICAgICAgICAgICAgKG1fc2VsZWN0aW9uRW5kID09IG9iaiAmJiBvbGRFbmRQb3Mg
IT0gbV9zZWxlY3Rpb25FbmRQb3MpKSB7CkBAIC02MjEsMTQgKzYyMSwxNCBAQCB2b2lkIFJlbmRl
clZpZXc6OnNldFNlbGVjdGlvbihSZW5kZXJPYmplY3QqIHN0YXJ0LCBpbnQgc3RhcnRQb3MsIFJl
bmRlck9iamVjdCogZQogICAgIC8vIEFueSBuZXcgb2JqZWN0cyB0aGF0IHJlbWFpbiB3ZXJlIG5v
dCBmb3VuZCBpbiB0aGUgb2xkIG9iamVjdHMgZGljdCwgYW5kIHNvIHRoZXkgbmVlZCB0byBiZSB1
cGRhdGVkLgogICAgIFNlbGVjdGVkT2JqZWN0TWFwOjppdGVyYXRvciBuZXdPYmplY3RzRW5kID0g
bmV3U2VsZWN0ZWRPYmplY3RzLmVuZCgpOwogICAgIGZvciAoU2VsZWN0ZWRPYmplY3RNYXA6Oml0
ZXJhdG9yIGkgPSBuZXdTZWxlY3RlZE9iamVjdHMuYmVnaW4oKTsgaSAhPSBuZXdPYmplY3RzRW5k
OyArK2kpCi0gICAgICAgIGktPnNlY29uZC0+cmVwYWludCgpOworICAgICAgICBpLT52YWx1ZS0+
cmVwYWludCgpOwogCiAgICAgLy8gSGF2ZSBhbnkgb2YgdGhlIG9sZCBibG9ja3MgY2hhbmdlZD8K
ICAgICBTZWxlY3RlZEJsb2NrTWFwOjppdGVyYXRvciBvbGRCbG9ja3NFbmQgPSBvbGRTZWxlY3Rl
ZEJsb2Nrcy5lbmQoKTsKICAgICBmb3IgKFNlbGVjdGVkQmxvY2tNYXA6Oml0ZXJhdG9yIGkgPSBv
bGRTZWxlY3RlZEJsb2Nrcy5iZWdpbigpOyBpICE9IG9sZEJsb2Nrc0VuZDsgKytpKSB7Ci0gICAg
ICAgIFJlbmRlckJsb2NrKiBibG9jayA9IGktPmZpcnN0OworICAgICAgICBSZW5kZXJCbG9jayog
YmxvY2sgPSBpLT5rZXk7CiAgICAgICAgIFJlbmRlckJsb2NrU2VsZWN0aW9uSW5mbyogbmV3SW5m
byA9IG5ld1NlbGVjdGVkQmxvY2tzLmdldChibG9jayk7Ci0gICAgICAgIFJlbmRlckJsb2NrU2Vs
ZWN0aW9uSW5mbyogb2xkSW5mbyA9IGktPnNlY29uZC5nZXQoKTsKKyAgICAgICAgUmVuZGVyQmxv
Y2tTZWxlY3Rpb25JbmZvKiBvbGRJbmZvID0gaS0+dmFsdWUuZ2V0KCk7CiAgICAgICAgIGlmICgh
bmV3SW5mbyB8fCBvbGRJbmZvLT5yZWN0cygpICE9IG5ld0luZm8tPnJlY3RzKCkgfHwgb2xkSW5m
by0+c3RhdGUoKSAhPSBuZXdJbmZvLT5zdGF0ZSgpKSB7CiAgICAgICAgICAgICBvbGRJbmZvLT5y
ZXBhaW50KCk7CiAgICAgICAgICAgICBpZiAobmV3SW5mbykgewpAQCAtNjQxLDcgKzY0MSw3IEBA
IHZvaWQgUmVuZGVyVmlldzo6c2V0U2VsZWN0aW9uKFJlbmRlck9iamVjdCogc3RhcnQsIGludCBz
dGFydFBvcywgUmVuZGVyT2JqZWN0KiBlCiAgICAgLy8gQW55IG5ldyBibG9ja3MgdGhhdCByZW1h
aW4gd2VyZSBub3QgZm91bmQgaW4gdGhlIG9sZCBibG9ja3MgZGljdCwgYW5kIHNvIHRoZXkgbmVl
ZCB0byBiZSB1cGRhdGVkLgogICAgIFNlbGVjdGVkQmxvY2tNYXA6Oml0ZXJhdG9yIG5ld0Jsb2Nr
c0VuZCA9IG5ld1NlbGVjdGVkQmxvY2tzLmVuZCgpOwogICAgIGZvciAoU2VsZWN0ZWRCbG9ja01h
cDo6aXRlcmF0b3IgaSA9IG5ld1NlbGVjdGVkQmxvY2tzLmJlZ2luKCk7IGkgIT0gbmV3QmxvY2tz
RW5kOyArK2kpCi0gICAgICAgIGktPnNlY29uZC0+cmVwYWludCgpOworICAgICAgICBpLT52YWx1
ZS0+cmVwYWludCgpOwogCiAgICAgbV9mcmFtZVZpZXctPmVuZERlZmVycmVkUmVwYWludHMoKTsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKaW5kZXggMjFkMGMz
YWQ2ZjIyZWUyMTlkY2QxYzc0NDdiMTAxMzRkMzliNjExZi4uMTI1ODdlM2RhY2I0OTUxOTZlZTZi
ZWE3MTU1ZmM4YmQxMDYwZGY4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlcldpZGdldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldp
ZGdldC5jcHAKQEAgLTYxLDkgKzYxLDkgQEAgdm9pZCBXaWRnZXRIaWVyYXJjaHlVcGRhdGVzU3Vz
cGVuc2lvblNjb3BlOjptb3ZlV2lkZ2V0cygpCiAgICAgd2lkZ2V0TmV3UGFyZW50TWFwKCkuY2xl
YXIoKTsKICAgICBXaWRnZXRUb1BhcmVudE1hcDo6aXRlcmF0b3IgZW5kID0gbWFwLmVuZCgpOwog
ICAgIGZvciAoV2lkZ2V0VG9QYXJlbnRNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgewotICAgICAgICBXaWRnZXQqIGNoaWxkID0gaXQtPmZpcnN0LmdldCgp
OworICAgICAgICBXaWRnZXQqIGNoaWxkID0gaXQtPmtleS5nZXQoKTsKICAgICAgICAgU2Nyb2xs
VmlldyogY3VycmVudFBhcmVudCA9IGNoaWxkLT5wYXJlbnQoKTsKLSAgICAgICAgRnJhbWVWaWV3
KiBuZXdQYXJlbnQgPSBpdC0+c2Vjb25kOworICAgICAgICBGcmFtZVZpZXcqIG5ld1BhcmVudCA9
IGl0LT52YWx1ZTsKICAgICAgICAgaWYgKG5ld1BhcmVudCAhPSBjdXJyZW50UGFyZW50KSB7CiAg
ICAgICAgICAgICBpZiAoY3VycmVudFBhcmVudCkKICAgICAgICAgICAgICAgICBjdXJyZW50UGFy
ZW50LT5yZW1vdmVDaGlsZChjaGlsZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUm9vdElubGluZUJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElu
bGluZUJveC5jcHAKaW5kZXggMWY0MjA2NzAwYTVlMGNmN2RlZTg2M2NkM2RlYjNjOWEzMzg4MTk0
Ni4uZjkzMmU2ZjIxMTUzYzFiYjRhNWFjYjEzYjU2NjkyMjlkNmUxNjAxYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcApAQCAtNzU1LDggKzc1NSw4IEBAIHZv
aWQgUm9vdElubGluZUJveDo6YXNjZW50QW5kRGVzY2VudEZvckJveChJbmxpbmVCb3gqIGJveCwg
R2x5cGhPdmVyZmxvd0FuZEZhbGxiCiAgICAgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdyA9
IDA7CiAgICAgaWYgKGJveC0+aXNUZXh0KCkpIHsKICAgICAgICAgR2x5cGhPdmVyZmxvd0FuZEZh
bGxiYWNrRm9udHNNYXA6Oml0ZXJhdG9yIGl0ID0gdGV4dEJveERhdGFNYXAuZmluZCh0b0lubGlu
ZVRleHRCb3goYm94KSk7Ci0gICAgICAgIHVzZWRGb250cyA9IGl0ID09IHRleHRCb3hEYXRhTWFw
LmVuZCgpID8gMCA6ICZpdC0+c2Vjb25kLmZpcnN0OwotICAgICAgICBnbHlwaE92ZXJmbG93ID0g
aXQgPT0gdGV4dEJveERhdGFNYXAuZW5kKCkgPyAwIDogJml0LT5zZWNvbmQuc2Vjb25kOworICAg
ICAgICB1c2VkRm9udHMgPSBpdCA9PSB0ZXh0Qm94RGF0YU1hcC5lbmQoKSA/IDAgOiAmaXQtPnZh
bHVlLmZpcnN0OworICAgICAgICBnbHlwaE92ZXJmbG93ID0gaXQgPT0gdGV4dEJveERhdGFNYXAu
ZW5kKCkgPyAwIDogJml0LT52YWx1ZS5zZWNvbmQ7CiAgICAgfQogICAgICAgICAKICAgICBib29s
IGluY2x1ZGVMZWFkaW5nID0gaW5jbHVkZUxlYWRpbmdGb3JCb3goYm94KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9WZXJ0aWNhbFBvc2l0aW9uQ2FjaGUuaCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9WZXJ0aWNhbFBvc2l0aW9uQ2FjaGUuaAppbmRleCBiYjM5ODc3
NzIxZGE3MDVjMzdiZDNiODgxOTAyNGNkMjdlMzZlNWNlLi5iN2NkN2UwODVlN2Y5YmVkYjUyOGY2
MmRlZWY1N2E3YmI4YWE1YmUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
VmVydGljYWxQb3NpdGlvbkNhY2hlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Zl
cnRpY2FsUG9zaXRpb25DYWNoZS5oCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKICAgICAgICAg
Y29uc3QgSGFzaE1hcDxSZW5kZXJPYmplY3QqLCBpbnQ+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1h
cFRvQ2hlY2suZmluZChyZW5kZXJlcik7CiAgICAgICAgIGlmIChpdCA9PSBtYXBUb0NoZWNrLmVu
ZCgpKQogICAgICAgICAgICAgcmV0dXJuIFBvc2l0aW9uVW5kZWZpbmVkOwotICAgICAgICByZXR1
cm4gaXQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKICAgICB9CiAgICAgCiAg
ICAgdm9pZCBzZXQoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgRm9udEJhc2VsaW5lIGJhc2VsaW5l
VHlwZSwgaW50IHBvc2l0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAKaW5kZXggNDU0ZjdhYTZkMDdiNmJkMzEyMzIzNmJl
ZmNhNDk5ZWNmZTVhMDdhMC4uMjM3MWQxYWJmOWM5NmJhNGE0NjI4YjkzY2E0OTQyYWY3YTA3Yjk1
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxp
bmVUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lu
bGluZVRleHQuY3BwCkBAIC0xNTgsNyArMTU4LDcgQEAgYm9vbCBSZW5kZXJTVkdJbmxpbmVUZXh0
OjpjaGFyYWN0ZXJTdGFydHNOZXdUZXh0Q2h1bmsoaW50IHBvc2l0aW9uKSBjb25zdAogICAgIGlm
IChpdCA9PSBtX2xheW91dEF0dHJpYnV0ZXMuY2hhcmFjdGVyRGF0YU1hcCgpLmVuZCgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gaXQtPnNlY29uZC54ICE9IFNWR1RleHRM
YXlvdXRBdHRyaWJ1dGVzOjplbXB0eVZhbHVlKCkgfHwgaXQtPnNlY29uZC55ICE9IFNWR1RleHRM
YXlvdXRBdHRyaWJ1dGVzOjplbXB0eVZhbHVlKCk7CisgICAgcmV0dXJuIGl0LT52YWx1ZS54ICE9
IFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzOjplbXB0eVZhbHVlKCkgfHwgaXQtPnZhbHVlLnkgIT0g
U1ZHVGV4dExheW91dEF0dHJpYnV0ZXM6OmVtcHR5VmFsdWUoKTsKIH0KIAogVmlzaWJsZVBvc2l0
aW9uIFJlbmRlclNWR0lubGluZVRleHQ6OnBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9p
bnQmIHBvaW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcAppbmRleCBlZTZhNDlkYjg4YTlmZDZjNzcwNWZhMThi
NmVlY2E4ODE2ZTFhMmViLi4zODMyYjJiMDFlMzA1MGE1Zjg0M2M2NWYxY2RkY2IwZWMxNTNhOTY1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlRmlsdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlRmlsdGVyLmNwcApAQCAtMzM4LDcgKzMzOCw3IEBAIHZvaWQgUmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXI6OnByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQoUmVuZGVyT2JqZWN0KiBvYmpl
Y3QsIGNvCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKiBwcmltaXR2
ZSA9IHN0YXRpY19jYXN0PFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyo+KG9i
amVjdC0+bm9kZSgpKTsKIAogICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAg
RmlsdGVyRGF0YSogZmlsdGVyRGF0YSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIEZpbHRlckRhdGEq
IGZpbHRlckRhdGEgPSBpdC0+dmFsdWU7CiAgICAgICAgIGlmICghZmlsdGVyRGF0YS0+YnVpbGRl
ZCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCkBAIC0zNTMsNyArMzUzLDcgQEAgdm9pZCBSZW5k
ZXJTVkdSZXNvdXJjZUZpbHRlcjo6cHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZChSZW5kZXJPYmpl
Y3QqIG9iamVjdCwgY28KICAgICAgICAgYnVpbGRlci0+Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKGVm
ZmVjdCk7CiAKICAgICAgICAgLy8gUmVwYWludCB0aGUgaW1hZ2Ugb24gdGhlIHNjcmVlbi4KLSAg
ICAgICAgbWFya0NsaWVudEZvckludmFsaWRhdGlvbihpdC0+Zmlyc3QsIFJlcGFpbnRJbnZhbGlk
YXRpb24pOworICAgICAgICBtYXJrQ2xpZW50Rm9ySW52YWxpZGF0aW9uKGl0LT5rZXksIFJlcGFp
bnRJbnZhbGlkYXRpb24pOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAKaW5kZXggNThl
MDA3OWIyMmNiMmM1YzE3ZDhmMmQ0ZDczY2JiYTIxMGFhOWE1ZS4uMzBjZTFiOGNiNGY5NzhjMDBk
Y2JkYTE3ZGZiNTU3MjNjZmM1ODA4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwCkBAIC0xNDAsNyAr
MTQwLDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50OjphcHBseVJlc291cmNlKFJl
bmRlck9iamVjdCogb2JqZWN0LCBSZW5kZXJTdHlsZSoKICAgICBpZiAoZ3JhZGllbnRVbml0cygp
ID09IFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCAmJiBvYmpl
Y3RCb3VuZGluZ0JveC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIE93
blB0cjxHcmFkaWVudERhdGE+JiBncmFkaWVudERhdGEgPSBtX2dyYWRpZW50TWFwLmFkZChvYmpl
Y3QsIG51bGxwdHIpLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgT3duUHRyPEdyYWRpZW50RGF0YT4m
IGdyYWRpZW50RGF0YSA9IG1fZ3JhZGllbnRNYXAuYWRkKG9iamVjdCwgbnVsbHB0cikuaXRlcmF0
b3ItPnZhbHVlOwogICAgIGlmICghZ3JhZGllbnREYXRhKQogICAgICAgICBncmFkaWVudERhdGEg
PSBhZG9wdFB0cihuZXcgR3JhZGllbnREYXRhKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwCmluZGV4IGI0
YWY5OTkxODU1MmExNTQ4NTJiYjJhNGI0N2IwMzBlZGE2YTUzMTYuLjNhMTg4MmFjZjgyMTcyMjg2
YjIzYmI1NDJiZTQwNjZhM2JhY2NjYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAKQEAgLTg0LDcgKzg0
LDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46OmFwcGx5UmVzb3VyY2UoUmVuZGVy
T2JqZWN0KiBvYmplY3QsIFJlbmRlclN0eWxlKgogICAgIGlmIChtX2F0dHJpYnV0ZXMucGF0dGVy
blVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9Y
ICYmIG9iamVjdEJvdW5kaW5nQm94LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgT3duUHRyPFBhdHRlcm5EYXRhPiYgcGF0dGVybkRhdGEgPSBtX3BhdHRlcm5NYXAuYWRk
KG9iamVjdCwgbnVsbHB0cikuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBPd25QdHI8UGF0dGVybkRh
dGE+JiBwYXR0ZXJuRGF0YSA9IG1fcGF0dGVybk1hcC5hZGQob2JqZWN0LCBudWxscHRyKS5pdGVy
YXRvci0+dmFsdWU7CiAgICAgaWYgKCFwYXR0ZXJuRGF0YSkKICAgICAgICAgcGF0dGVybkRhdGEg
PSBhZG9wdFB0cihuZXcgUGF0dGVybkRhdGEpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlc0NhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzQ2FjaGUuY3BwCmluZGV4IDI5N2MwN2I2YWQ0MDlhMjdl
NjM1ODU2MDAwYzlhZDRiOTA1YjQzNTQuLjhiNDhjZjUzZTc5OWEwYjdkZTJiNTRhNGM3MTUyZTA5
Mjc1MzljMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVz
b3VyY2VzQ2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVz
b3VyY2VzQ2FjaGUuY3BwCkBAIC0xOTgsMTEgKzE5OCwxMSBAQCB2b2lkIFNWR1Jlc291cmNlc0Nh
Y2hlOjpyZXNvdXJjZURlc3Ryb3llZChSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciogcmVzb3Vy
Y2UpCiAKICAgICBIYXNoTWFwPGNvbnN0IFJlbmRlck9iamVjdCosIFNWR1Jlc291cmNlcyo+Ojpp
dGVyYXRvciBlbmQgPSBjYWNoZS0+bV9jYWNoZS5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8Y29u
c3QgUmVuZGVyT2JqZWN0KiwgU1ZHUmVzb3VyY2VzKj46Oml0ZXJhdG9yIGl0ID0gY2FjaGUtPm1f
Y2FjaGUuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGl0LT5zZWNvbmQtPnJl
c291cmNlRGVzdHJveWVkKHJlc291cmNlKTsKKyAgICAgICAgaXQtPnZhbHVlLT5yZXNvdXJjZURl
c3Ryb3llZChyZXNvdXJjZSk7CiAKICAgICAgICAgLy8gTWFyayB1c2VycyBvZiBkZXN0cm95ZWQg
cmVzb3VyY2VzIGFzIHBlbmRpbmcgcmVzb2x1dGlvbiBiYXNlZCBvbiB0aGUgaWQgb2YgdGhlIG9s
ZCByZXNvdXJjZS4KICAgICAgICAgRWxlbWVudCogcmVzb3VyY2VFbGVtZW50ID0gdG9FbGVtZW50
KHJlc291cmNlLT5ub2RlKCkpOwotICAgICAgICBTVkdTdHlsZWRFbGVtZW50KiBjbGllbnRFbGVt
ZW50ID0gdG9TVkdTdHlsZWRFbGVtZW50KGl0LT5maXJzdC0+bm9kZSgpKTsKKyAgICAgICAgU1ZH
U3R5bGVkRWxlbWVudCogY2xpZW50RWxlbWVudCA9IHRvU1ZHU3R5bGVkRWxlbWVudChpdC0+a2V5
LT5ub2RlKCkpOwogICAgICAgICBTVkdEb2N1bWVudEV4dGVuc2lvbnMqIGV4dGVuc2lvbnMgPSBj
bGllbnRFbGVtZW50LT5kb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCk7CiAKICAgICAg
ICAgZXh0ZW5zaW9ucy0+YWRkUGVuZGluZ1Jlc291cmNlKHJlc291cmNlRWxlbWVudC0+ZmFzdEdl
dEF0dHJpYnV0ZShIVE1MTmFtZXM6OmlkQXR0ciksIGNsaWVudEVsZW1lbnQpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSb290SW5saW5lQm94LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUm9vdElubGluZUJveC5jcHAKaW5kZXggMzRl
OTNhMDJlZjc0MzJlM2MyNmVmMjM2MGQxY2YzZmQ0MzdlNDE2ZS4uNTQ2ZmVjMjZjZTY5ODFhY2Qx
ZmNkN2FiZTBhMGE5ODM4YzcwYjQzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdSb290SW5saW5lQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1Jvb3RJbmxpbmVCb3guY3BwCkBAIC0yMjYsMTcgKzIyNiwxNyBAQCBzdGF0aWMg
aW5saW5lIHZvaWQgc3dhcEl0ZW1zSW5MYXlvdXRBdHRyaWJ1dGVzKFNWR1RleHRMYXlvdXRBdHRy
aWJ1dGVzKiBmaXJzdEF0dAogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoZmlyc3RQcmVzZW50
ICYmIGxhc3RQcmVzZW50KSB7Ci0gICAgICAgIHN0ZDo6c3dhcChpdEZpcnN0LT5zZWNvbmQsIGl0
TGFzdC0+c2Vjb25kKTsKKyAgICAgICAgc3RkOjpzd2FwKGl0Rmlyc3QtPnZhbHVlLCBpdExhc3Qt
PnZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChmaXJzdFByZXNlbnQg
JiYgIWxhc3RQcmVzZW50KSB7Ci0gICAgICAgIGxhc3RBdHRyaWJ1dGVzLT5jaGFyYWN0ZXJEYXRh
TWFwKCkuc2V0KGxhc3RQb3NpdGlvbiArIDEsIGl0Rmlyc3QtPnNlY29uZCk7CisgICAgICAgIGxh
c3RBdHRyaWJ1dGVzLT5jaGFyYWN0ZXJEYXRhTWFwKCkuc2V0KGxhc3RQb3NpdGlvbiArIDEsIGl0
Rmlyc3QtPnZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8vICFmaXJzdFBy
ZXNlbnQgJiYgbGFzdFByZXNlbnQKLSAgICBmaXJzdEF0dHJpYnV0ZXMtPmNoYXJhY3RlckRhdGFN
YXAoKS5zZXQoZmlyc3RQb3NpdGlvbiArIDEsIGl0TGFzdC0+c2Vjb25kKTsKKyAgICBmaXJzdEF0
dHJpYnV0ZXMtPmNoYXJhY3RlckRhdGFNYXAoKS5zZXQoZmlyc3RQb3NpdGlvbiArIDEsIGl0TGFz
dC0+dmFsdWUpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZmluZEZpcnN0QW5kTGFzdEF0dHJp
YnV0ZXNJblZlY3RvcihWZWN0b3I8U1ZHVGV4dExheW91dEF0dHJpYnV0ZXMqPiYgYXR0cmlidXRl
cywgUmVuZGVyU1ZHSW5saW5lVGV4dCogZmlyc3RDb250ZXh0LCBSZW5kZXJTVkdJbmxpbmVUZXh0
KiBsYXN0Q29udGV4dCwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHVGV4dExheW91dEF0dHJpYnV0ZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRlcy5jcHAKaW5kZXggYTkyNTk2Y2VlZWRiZTI1YWY3Nzdk
ZjRhNGM4M2NkM2VmOTdiOWNlOC4uNjdmYTBmYTk4MmFkNjBiYTcyNjUxYTg0NTQ5NTgxZjdlYjUw
Y2QwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5
b3V0QXR0cmlidXRlcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdU
ZXh0TGF5b3V0QXR0cmlidXRlcy5jcHAKQEAgLTYyLDggKzYyLDggQEAgdm9pZCBTVkdUZXh0TGF5
b3V0QXR0cmlidXRlczo6ZHVtcCgpIGNvbnN0CiAgICAgZnByaW50ZihzdGRlcnIsICJjb250ZXh0
OiAlcFxuIiwgbV9jb250ZXh0KTsKICAgICBjb25zdCBTVkdDaGFyYWN0ZXJEYXRhTWFwOjpjb25z
dF9pdGVyYXRvciBlbmQgPSBtX2NoYXJhY3RlckRhdGFNYXAuZW5kKCk7CiAgICAgZm9yIChTVkdD
aGFyYWN0ZXJEYXRhTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fY2hhcmFjdGVyRGF0YU1hcC5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgY29uc3QgU1ZHQ2hhcmFjdGVyRGF0
YSYgZGF0YSA9IGl0LT5zZWNvbmQ7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiIC0tLT4gcG9z
PSVpLCBkYXRhPXsiLCBpdC0+Zmlyc3QpOworICAgICAgICBjb25zdCBTVkdDaGFyYWN0ZXJEYXRh
JiBkYXRhID0gaXQtPnZhbHVlOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAtLS0+IHBvcz0l
aSwgZGF0YT17IiwgaXQtPmtleSk7CiAgICAgICAgIGR1bXBTVkdDaGFyYWN0ZXJEYXRhTWFwVmFs
dWUoIngiLCBkYXRhLngpOwogICAgICAgICBkdW1wU1ZHQ2hhcmFjdGVyRGF0YU1hcFZhbHVlKCJ5
IiwgZGF0YS55KTsKICAgICAgICAgZHVtcFNWR0NoYXJhY3RlckRhdGFNYXBWYWx1ZSgiZHgiLCBk
YXRhLmR4KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4
dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyLmNwcAppbmRleCBiZTJhMTJmZTk2MGI3
OTI0ODMxM2RmMzY5OTE0NTAzZmVlOWEyOTFiLi5iOTY5YTUzMTllODBhYzc4NzJhNWU0MWQ4ZGU3
NzQzMDQ4YmRjNDNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXIuY3BwCkBAIC0xNDksNyAr
MTQ5LDcgQEAgdm9pZCBTVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXI6OmJ1aWxkQ2hhcmFj
dGVyRGF0YU1hcChSZW5kZXJTVkdUZXh0KiB0ZXh0Um8KICAgICAgICAgZGF0YS55ID0gMDsKICAg
ICAgICAgbV9jaGFyYWN0ZXJEYXRhTWFwLnNldCgxLCBkYXRhKTsKICAgICB9IGVsc2UgewotICAg
ICAgICBTVkdDaGFyYWN0ZXJEYXRhJiBkYXRhID0gaXQtPnNlY29uZDsKKyAgICAgICAgU1ZHQ2hh
cmFjdGVyRGF0YSYgZGF0YSA9IGl0LT52YWx1ZTsKICAgICAgICAgaWYgKGRhdGEueCA9PSBTVkdU
ZXh0TGF5b3V0QXR0cmlidXRlczo6ZW1wdHlWYWx1ZSgpKQogICAgICAgICAgICAgZGF0YS54ID0g
MDsKICAgICAgICAgaWYgKGRhdGEueSA9PSBTVkdUZXh0TGF5b3V0QXR0cmlidXRlczo6ZW1wdHlW
YWx1ZSgpKQpAQCAtMjEzLDcgKzIxMyw3IEBAIHZvaWQgU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNC
dWlsZGVyOjpmaWxsQ2hhcmFjdGVyRGF0YU1hcChjb25zdCBUZXh0UG9zaXRpb24mIHBvCiAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIHVwZGF0ZUNoYXJhY3RlckRh
dGEoaSwgbGFzdFJvdGF0aW9uLCBpdC0+c2Vjb25kLCBsZW5ndGhDb250ZXh0LCB4TGlzdFB0ciwg
eUxpc3RQdHIsIGR4TGlzdFB0ciwgZHlMaXN0UHRyLCByb3RhdGVMaXN0UHRyKTsKKyAgICAgICAg
dXBkYXRlQ2hhcmFjdGVyRGF0YShpLCBsYXN0Um90YXRpb24sIGl0LT52YWx1ZSwgbGVuZ3RoQ29u
dGV4dCwgeExpc3RQdHIsIHlMaXN0UHRyLCBkeExpc3RQdHIsIGR5TGlzdFB0ciwgcm90YXRlTGlz
dFB0cik7CiAgICAgfQogCiAgICAgLy8gVGhlIGxhc3Qgcm90YXRpb24gdmFsdWUgYWx3YXlzIHNw
YW5zIHRoZSB3aG9sZSBzY29wZS4KQEAgLTIyOSw3ICsyMjksNyBAQCB2b2lkIFNWR1RleHRMYXlv
dXRBdHRyaWJ1dGVzQnVpbGRlcjo6ZmlsbENoYXJhY3RlckRhdGFNYXAoY29uc3QgVGV4dFBvc2l0
aW9uJiBwbwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBpdC0+
c2Vjb25kLnJvdGF0ZSA9IGxhc3RSb3RhdGlvbjsKKyAgICAgICAgaXQtPnZhbHVlLnJvdGF0ZSA9
IGxhc3RSb3RhdGlvbjsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmUuY3BwCmluZGV4IDVjNTQ5YjIxYzg3NTIwODQ3
MjQ2YWYyNTRmZDA1OWYyZTNiOWI1ZTguLmJhMmI3NjM5ZDNmOTViNzM4OTQ3NWZhMmRjMDBjOWE2
YWE4NWIzMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4
dExheW91dEVuZ2luZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdU
ZXh0TGF5b3V0RW5naW5lLmNwcApAQCAtNDc1LDcgKzQ3NSw3IEBAIHZvaWQgU1ZHVGV4dExheW91
dEVuZ2luZTo6bGF5b3V0VGV4dE9uTGluZU9yUGF0aChTVkdJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94
LCBSZW5kCiAgICAgICAgIFNWR0NoYXJhY3RlckRhdGEgZGF0YTsKICAgICAgICAgU1ZHQ2hhcmFj
dGVyRGF0YU1hcDo6aXRlcmF0b3IgaXQgPSBjaGFyYWN0ZXJEYXRhTWFwLmZpbmQobV9sb2dpY2Fs
Q2hhcmFjdGVyT2Zmc2V0ICsgMSk7CiAgICAgICAgIGlmIChpdCAhPSBjaGFyYWN0ZXJEYXRhTWFw
LmVuZCgpKQotICAgICAgICAgICAgZGF0YSA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICBkYXRh
ID0gaXQtPnZhbHVlOwogCiAgICAgICAgIGZsb2F0IHggPSBkYXRhLng7CiAgICAgICAgIGZsb2F0
IHkgPSBkYXRhLnk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1RleHRNZXRyaWNzQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1RleHRNZXRyaWNzQnVpbGRlci5jcHAKaW5kZXggZmY5Y2EzMDczZmNmZjg1NzJlMjI3MWY2ZDE5
NzhhNDRmOGVhOGY1Yi4uY2E3NDgxZjM5ODA5ZTk0ZDkwYzAxOTQzNDE3ZmNmODM3OWI4ZjdkMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljc0J1
aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJp
Y3NCdWlsZGVyLmNwcApAQCAtMTYxLDcgKzE2MSw3IEBAIHZvaWQgU1ZHVGV4dE1ldHJpY3NCdWls
ZGVyOjptZWFzdXJlVGV4dFJlbmRlcmVyKFJlbmRlclNWR0lubGluZVRleHQqIHRleHQsIE1lYXN1
CiAgICAgICAgICAgICBpZiAoZGF0YS0+YWxsQ2hhcmFjdGVyc01hcCkgewogICAgICAgICAgICAg
ICAgIGNvbnN0IFNWR0NoYXJhY3RlckRhdGFNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZGF0YS0+
YWxsQ2hhcmFjdGVyc01hcC0+ZmluZChkYXRhLT52YWx1ZUxpc3RQb3NpdGlvbiArIG1fdGV4dFBv
c2l0aW9uIC0gZGF0YS0+c2tpcHBlZENoYXJhY3RlcnMgLSBzdXJyb2dhdGVQYWlyQ2hhcmFjdGVy
cyArIDEpOwogICAgICAgICAgICAgICAgIGlmIChpdCAhPSBkYXRhLT5hbGxDaGFyYWN0ZXJzTWFw
LT5lbmQoKSkKLSAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcy0+Y2hhcmFjdGVyRGF0YU1h
cCgpLnNldChtX3RleHRQb3NpdGlvbiArIDEsIGl0LT5zZWNvbmQpOworICAgICAgICAgICAgICAg
ICAgICBhdHRyaWJ1dGVzLT5jaGFyYWN0ZXJEYXRhTWFwKCkuc2V0KG1fdGV4dFBvc2l0aW9uICsg
MSwgaXQtPnZhbHVlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHRleHRNZXRyaWNzVmFs
dWVzLT5hcHBlbmQobV9jdXJyZW50TWV0cmljcyk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmNwcAppbmRleCA0NDIwOWM2ZjU5ZDBkMmExZDdmMzNi
MmYxMTI5YTg3ZTkwNDVlN2NkLi5mY2IxMjZhMWQ1NmQ1YWZjYzlhYmViYTYyMWZiMDc3OGUzMmI3
ZmUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCkBAIC0x
ODgsNyArMTg4LDcgQEAgdm9pZCBTdG9yYWdlQXJlYVN5bmM6OnN5bmNUaW1lckZpcmVkKFRpbWVy
PFN0b3JhZ2VBcmVhU3luYz4qKQogICAgICAgICAgICAgICAgIHBhcnRpYWxTeW5jID0gdHJ1ZTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1faXRl
bXNQZW5kaW5nU3luYy5zZXQoY2hhbmdlZF9pdC0+Zmlyc3QuaXNvbGF0ZWRDb3B5KCksIGNoYW5n
ZWRfaXQtPnNlY29uZC5pc29sYXRlZENvcHkoKSk7CisgICAgICAgICAgICBtX2l0ZW1zUGVuZGlu
Z1N5bmMuc2V0KGNoYW5nZWRfaXQtPmtleS5pc29sYXRlZENvcHkoKSwgY2hhbmdlZF9pdC0+dmFs
dWUuaXNvbGF0ZWRDb3B5KCkpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKHBhcnRpYWxTeW5j
KSB7CkBAIC0xOTgsNyArMTk4LDcgQEAgdm9pZCBTdG9yYWdlQXJlYVN5bmM6OnN5bmNUaW1lckZp
cmVkKFRpbWVyPFN0b3JhZ2VBcmVhU3luYz4qKQogICAgICAgICAgICAgSGFzaE1hcDxTdHJpbmcs
IFN0cmluZz46Oml0ZXJhdG9yIHBlbmRpbmdfaXQgPSBtX2l0ZW1zUGVuZGluZ1N5bmMuYmVnaW4o
KTsKICAgICAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+OjppdGVyYXRvciBwZW5kaW5n
X2VuZCA9IG1faXRlbXNQZW5kaW5nU3luYy5lbmQoKTsKICAgICAgICAgICAgIGZvciAoOyBwZW5k
aW5nX2l0ICE9IHBlbmRpbmdfZW5kOyArK3BlbmRpbmdfaXQpCi0gICAgICAgICAgICAgICAgbV9j
aGFuZ2VkSXRlbXMucmVtb3ZlKHBlbmRpbmdfaXQtPmZpcnN0KTsKKyAgICAgICAgICAgICAgICBt
X2NoYW5nZWRJdGVtcy5yZW1vdmUocGVuZGluZ19pdC0+a2V5KTsKICAgICAgICAgfQogCiAgICAg
ICAgIGlmICghbV9zeW5jU2NoZWR1bGVkKSB7CkBAIC0zNDUsNyArMzQ1LDcgQEAgdm9pZCBTdG9y
YWdlQXJlYVN5bmM6OnBlcmZvcm1JbXBvcnQoKQogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+
OjppdGVyYXRvciBlbmQgPSBpdGVtTWFwLmVuZCgpOwogCiAgICAgZm9yICg7IGl0ICE9IGVuZDsg
KytpdCkKLSAgICAgICAgbV9zdG9yYWdlQXJlYS0+aW1wb3J0SXRlbShpdC0+Zmlyc3QsIGl0LT5z
ZWNvbmQpOworICAgICAgICBtX3N0b3JhZ2VBcmVhLT5pbXBvcnRJdGVtKGl0LT5rZXksIGl0LT52
YWx1ZSk7CiAKICAgICBtYXJrSW1wb3J0ZWQoKTsKIH0KQEAgLTQzOSwxMyArNDM5LDEzIEBAIHZv
aWQgU3RvcmFnZUFyZWFTeW5jOjpzeW5jKGJvb2wgY2xlYXJJdGVtcywgY29uc3QgSGFzaE1hcDxT
dHJpbmcsIFN0cmluZz4mIGl0ZW1zCiAgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKICAgICBmb3Ig
KEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGl0ZW1zLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAvLyBCYXNlZCBvbiB0aGUgbnVsbC1uZXNz
IG9mIHRoZSBzZWNvbmQgYXJndW1lbnQsIGRlY2lkZSB3aGV0aGVyIHRoaXMgaXMgYW4gaW5zZXJ0
IG9yIGEgZGVsZXRlLgotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQmIHF1ZXJ5ID0gaXQtPnNlY29u
ZC5pc051bGwoKSA/IHJlbW92ZSA6IGluc2VydDsKKyAgICAgICAgU1FMaXRlU3RhdGVtZW50JiBx
dWVyeSA9IGl0LT52YWx1ZS5pc051bGwoKSA/IHJlbW92ZSA6IGluc2VydDsKIAotICAgICAgICBx
dWVyeS5iaW5kVGV4dCgxLCBpdC0+Zmlyc3QpOworICAgICAgICBxdWVyeS5iaW5kVGV4dCgxLCBp
dC0+a2V5KTsKIAogICAgICAgICAvLyBJZiB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIG5vbi1udWxs
LCB3ZSdyZSBkb2luZyBhbiBpbnNlcnQsIHNvIGJpbmQgaXQgYXMgdGhlIHZhbHVlLgotICAgICAg
ICBpZiAoIWl0LT5zZWNvbmQuaXNOdWxsKCkpCi0gICAgICAgICAgICBxdWVyeS5iaW5kQmxvYigy
LCBpdC0+c2Vjb25kKTsKKyAgICAgICAgaWYgKCFpdC0+dmFsdWUuaXNOdWxsKCkpCisgICAgICAg
ICAgICBxdWVyeS5iaW5kQmxvYigyLCBpdC0+dmFsdWUpOwogCiAgICAgICAgIGludCByZXN1bHQg
PSBxdWVyeS5zdGVwKCk7CiAgICAgICAgIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0RG9uZSkgewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTWFwLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU1hcC5jcHAKaW5kZXggOGU0MmQyZjE3NmRkM2IxMTEy
YTAxYTUxZDhkYjYyZjRiMzhiYmEzNS4uNDBlMWEzOGYxY2E0YTc5ZjBjZTI0NzAxMTUzNDdhZGI5
MjlmNDk4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTWFwLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VNYXAuY3BwCkBAIC04OSw3ICs4
OSw3IEBAIFN0cmluZyBTdG9yYWdlTWFwOjprZXkodW5zaWduZWQgaW5kZXgpCiAgICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKIAogICAgIHNldEl0ZXJhdG9yVG9JbmRleChpbmRleCk7Ci0gICAgcmV0
dXJuIG1faXRlcmF0b3ItPmZpcnN0OworICAgIHJldHVybiBtX2l0ZXJhdG9yLT5rZXk7CiB9CiAK
IFN0cmluZyBTdG9yYWdlTWFwOjpnZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5KSBjb25zdApAQCAt
MTMzLDcgKzEzMyw3IEBAIFBhc3NSZWZQdHI8U3RvcmFnZU1hcD4gU3RvcmFnZU1hcDo6c2V0SXRl
bShjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1CiAKICAgICBIYXNoTWFwPFN0
cmluZywgU3RyaW5nPjo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IG1fbWFwLmFkZChrZXksIHZhbHVl
KTsKICAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICBhZGRSZXN1bHQuaXRl
cmF0b3ItPnNlY29uZCA9IHZhbHVlOworICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVl
ID0gdmFsdWU7CiAKICAgICBpbnZhbGlkYXRlSXRlcmF0b3IoKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcAppbmRleCA5ZDFhYzUxN2EwZTJl
N2IzZjI2YjgyM2IyODlhNTkzOTU4YmRjOGEwLi40NTAxYjExZmJjMTVjZjQyMzlkMDdmYzM3NDc2
NDE2ZGJiNzVlZmNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VO
YW1lc3BhY2VJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1l
c3BhY2VJbXBsLmNwcApAQCAtNTUsNyArNTUsNyBAQCBQYXNzUmVmUHRyPFN0b3JhZ2VOYW1lc3Bh
Y2U+IFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpsb2NhbFN0b3JhZ2VOYW1lc3BhY2UoY29uc3QgUwog
ICAgICAgICByZXR1cm4gc3RvcmFnZU5hbWVzcGFjZS5yZWxlYXNlKCk7CiAgICAgfQogCi0gICAg
cmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgcmV0dXJuIGl0LT52YWx1ZTsKIH0KIAogUGFzc1JlZlB0
cjxTdG9yYWdlTmFtZXNwYWNlPiBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6c2Vzc2lvblN0b3JhZ2VO
YW1lc3BhY2UodW5zaWduZWQgcXVvdGEpCkBAIC05Nyw3ICs5Nyw3IEBAIFBhc3NSZWZQdHI8U3Rv
cmFnZU5hbWVzcGFjZT4gU3RvcmFnZU5hbWVzcGFjZUltcGw6OmNvcHkoKQogCiAgICAgU3RvcmFn
ZUFyZWFNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fc3RvcmFnZUFyZWFNYXAuZW5kKCk7CiAgICAgZm9y
IChTdG9yYWdlQXJlYU1hcDo6aXRlcmF0b3IgaSA9IG1fc3RvcmFnZUFyZWFNYXAuYmVnaW4oKTsg
aSAhPSBlbmQ7ICsraSkKLSAgICAgICAgbmV3TmFtZXNwYWNlLT5tX3N0b3JhZ2VBcmVhTWFwLnNl
dChpLT5maXJzdCwgaS0+c2Vjb25kLT5jb3B5KCkpOworICAgICAgICBuZXdOYW1lc3BhY2UtPm1f
c3RvcmFnZUFyZWFNYXAuc2V0KGktPmtleSwgaS0+dmFsdWUtPmNvcHkoKSk7CiAgICAgcmV0dXJu
IG5ld05hbWVzcGFjZS5yZWxlYXNlKCk7CiB9CiAKQEAgLTEzMSw3ICsxMzEsNyBAQCB2b2lkIFN0
b3JhZ2VOYW1lc3BhY2VJbXBsOjpjbG9zZSgpCiAKICAgICBTdG9yYWdlQXJlYU1hcDo6aXRlcmF0
b3IgZW5kID0gbV9zdG9yYWdlQXJlYU1hcC5lbmQoKTsKICAgICBmb3IgKFN0b3JhZ2VBcmVhTWFw
OjppdGVyYXRvciBpdCA9IG1fc3RvcmFnZUFyZWFNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KQotICAgICAgICBpdC0+c2Vjb25kLT5jbG9zZSgpOworICAgICAgICBpdC0+dmFsdWUtPmNsb3Nl
KCk7CiAKICAgICBpZiAobV9zeW5jTWFuYWdlcikKICAgICAgICAgbV9zeW5jTWFuYWdlci0+Y2xv
c2UoKTsKQEAgLTE1NCw3ICsxNTQsNyBAQCB2b2lkIFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpjbGVh
ckFsbE9yaWdpbnNGb3JEZWxldGlvbigpCiAKICAgICBTdG9yYWdlQXJlYU1hcDo6aXRlcmF0b3Ig
ZW5kID0gbV9zdG9yYWdlQXJlYU1hcC5lbmQoKTsKICAgICBmb3IgKFN0b3JhZ2VBcmVhTWFwOjpp
dGVyYXRvciBpdCA9IG1fc3RvcmFnZUFyZWFNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQot
ICAgICAgICBpdC0+c2Vjb25kLT5jbGVhckZvck9yaWdpbkRlbGV0aW9uKCk7CisgICAgICAgIGl0
LT52YWx1ZS0+Y2xlYXJGb3JPcmlnaW5EZWxldGlvbigpOwogfQogICAgIAogdm9pZCBTdG9yYWdl
TmFtZXNwYWNlSW1wbDo6c3luYygpCkBAIC0xNjIsNyArMTYyLDcgQEAgdm9pZCBTdG9yYWdlTmFt
ZXNwYWNlSW1wbDo6c3luYygpCiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBTdG9y
YWdlQXJlYU1hcDo6aXRlcmF0b3IgZW5kID0gbV9zdG9yYWdlQXJlYU1hcC5lbmQoKTsKICAgICBm
b3IgKFN0b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBpdCA9IG1fc3RvcmFnZUFyZWFNYXAuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5zeW5jKCk7CisgICAgICAg
IGl0LT52YWx1ZS0+c3luYygpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwCmluZGV4IGNhYzFhZWEwN2Uw
OTBkNzRlMjVlYTM0NjAwOWYyNWM3ZDQ2ODBlMzkuLmNjYjYzMjNlNDdkYTg0MWE3NjFjYjkzYTFl
YzhlYWQxNTc1MDk2ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVu
dEV4dGVuc2lvbnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudEV4dGVu
c2lvbnMuY3BwCkBAIC0xNTYsNyArMTU2LDcgQEAgdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6
OnJlbW92ZUFuaW1hdGlvbkVsZW1lbnRGcm9tVGFyZ2V0KFNWR1NNSUxFbGVtZW50KiBhbmkKICAg
ICBIYXNoTWFwPFNWR0VsZW1lbnQqLCBIYXNoU2V0PFNWR1NNSUxFbGVtZW50Kj4qID46Oml0ZXJh
dG9yIGl0ID0gbV9hbmltYXRlZEVsZW1lbnRzLmZpbmQodGFyZ2V0RWxlbWVudCk7CiAgICAgQVNT
RVJUKGl0ICE9IG1fYW5pbWF0ZWRFbGVtZW50cy5lbmQoKSk7CiAgICAgCi0gICAgSGFzaFNldDxT
VkdTTUlMRWxlbWVudCo+KiBhbmltYXRpb25FbGVtZW50c0ZvclRhcmdldCA9IGl0LT5zZWNvbmQ7
CisgICAgSGFzaFNldDxTVkdTTUlMRWxlbWVudCo+KiBhbmltYXRpb25FbGVtZW50c0ZvclRhcmdl
dCA9IGl0LT52YWx1ZTsKICAgICBBU1NFUlQoIWFuaW1hdGlvbkVsZW1lbnRzRm9yVGFyZ2V0LT5p
c0VtcHR5KCkpOwogCiAgICAgYW5pbWF0aW9uRWxlbWVudHNGb3JUYXJnZXQtPnJlbW92ZShhbmlt
YXRpb25FbGVtZW50KTsKQEAgLTE3Myw3ICsxNzMsNyBAQCB2b2lkIFNWR0RvY3VtZW50RXh0ZW5z
aW9uczo6cmVtb3ZlQWxsQW5pbWF0aW9uRWxlbWVudHNGcm9tVGFyZ2V0KFNWR0VsZW1lbnQqIHRh
cgogICAgIGlmIChpdCA9PSBtX2FuaW1hdGVkRWxlbWVudHMuZW5kKCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIEhhc2hTZXQ8U1ZHU01JTEVsZW1lbnQqPiogYW5pbWF0aW9uRWxlbWVudHNGb3JU
YXJnZXQgPSBpdC0+c2Vjb25kOworICAgIEhhc2hTZXQ8U1ZHU01JTEVsZW1lbnQqPiogYW5pbWF0
aW9uRWxlbWVudHNGb3JUYXJnZXQgPSBpdC0+dmFsdWU7CiAgICAgVmVjdG9yPFNWR1NNSUxFbGVt
ZW50Kj4gdG9CZVJlc2V0OwogCiAgICAgSGFzaFNldDxTVkdTTUlMRWxlbWVudCo+OjppdGVyYXRv
ciBlbmQgPSBhbmltYXRpb25FbGVtZW50c0ZvclRhcmdldC0+ZW5kKCk7CkBAIC0yMTksOSArMjE5
LDkgQEAgdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OmFkZFBlbmRpbmdSZXNvdXJjZShjb25z
dCBBdG9taWNTdHJpbmcmIGlkLCBTVkdTdHlsZWQKIAogICAgIC8vIFRoZSBIYXNoTWFwIGFkZCBm
dW5jdGlvbiBsZWF2ZXMgdGhlIG1hcCBhbG9uZSBhbmQgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhl
IGVsZW1lbnQgaW4gdGhlCiAgICAgLy8gbWFwIGlmIHRoZSBlbGVtZW50IGFscmVhZHkgZXhpc3Rz
LiBTbyB3ZSBhZGQgd2l0aCBhIHZhbHVlIG9mIDAsIGFuZCBpdCBlaXRoZXIgZmluZHMgdGhlCi0g
ICAgLy8gZXhpc3RpbmcgZWxlbWVudCBvciBhZGRzIGEgbmV3IG9uZSBpbiBhIHNpbmdsZSBvcGVy
YXRpb24uIFRoZSAiLml0ZXJhdG9yLT5zZWNvbmQiIGlkaW9tIGdldHMKKyAgICAvLyBleGlzdGlu
ZyBlbGVtZW50IG9yIGFkZHMgYSBuZXcgb25lIGluIGEgc2luZ2xlIG9wZXJhdGlvbi4gVGhlICIu
aXRlcmF0b3ItPnZhbHVlIiBpZGlvbSBnZXRzCiAgICAgLy8gdXMgdG8gdGhlIGl0ZXJhdG9yIGZy
b20gYWRkJ3MgcmVzdWx0LCBhbmQgdGhlbiB0byB0aGUgdmFsdWUgaW5zaWRlIHRoZSBoYXNoIHRh
YmxlLgotICAgIFNWR1BlbmRpbmdFbGVtZW50cyomIHNldCA9IG1fcGVuZGluZ1Jlc291cmNlcy5h
ZGQoaWQsIDApLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgU1ZHUGVuZGluZ0VsZW1lbnRzKiYgc2V0
ID0gbV9wZW5kaW5nUmVzb3VyY2VzLmFkZChpZCwgMCkuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlm
ICghc2V0KQogICAgICAgICBzZXQgPSBuZXcgU1ZHUGVuZGluZ0VsZW1lbnRzOwogICAgIHNldC0+
YWRkKGVsZW1lbnQpOwpAQCAtMjQ2LDcgKzI0Niw3IEBAIGJvb2wgU1ZHRG9jdW1lbnRFeHRlbnNp
b25zOjppc0VsZW1lbnRQZW5kaW5nUmVzb3VyY2VzKFNWR1N0eWxlZEVsZW1lbnQqIGVsZW1lbnQp
CiAKICAgICBIYXNoTWFwPEF0b21pY1N0cmluZywgU1ZHUGVuZGluZ0VsZW1lbnRzKj46OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IG1fcGVuZGluZ1Jlc291cmNlcy5lbmQoKTsKICAgICBmb3IgKEhhc2hN
YXA8QXRvbWljU3RyaW5nLCBTVkdQZW5kaW5nRWxlbWVudHMqPjo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtX3BlbmRpbmdSZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAg
IFNWR1BlbmRpbmdFbGVtZW50cyogZWxlbWVudHMgPSBpdC0+c2Vjb25kOworICAgICAgICBTVkdQ
ZW5kaW5nRWxlbWVudHMqIGVsZW1lbnRzID0gaXQtPnZhbHVlOwogICAgICAgICBBU1NFUlQoZWxl
bWVudHMpOwogCiAgICAgICAgIGlmIChlbGVtZW50cy0+Y29udGFpbnMoZWxlbWVudCkpCkBAIC0y
NzQsMTMgKzI3NCwxMyBAQCB2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlRWxlbWVu
dEZyb21QZW5kaW5nUmVzb3VyY2VzKFNWR1N0eWxlZEVsZW1lbnQqCiAgICAgICAgIFZlY3RvcjxB
dG9taWNTdHJpbmc+IHRvQmVSZW1vdmVkOwogICAgICAgICBIYXNoTWFwPEF0b21pY1N0cmluZywg
U1ZHUGVuZGluZ0VsZW1lbnRzKj46Oml0ZXJhdG9yIGVuZCA9IG1fcGVuZGluZ1Jlc291cmNlcy5l
bmQoKTsKICAgICAgICAgZm9yIChIYXNoTWFwPEF0b21pY1N0cmluZywgU1ZHUGVuZGluZ0VsZW1l
bnRzKj46Oml0ZXJhdG9yIGl0ID0gbV9wZW5kaW5nUmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewotICAgICAgICAgICAgU1ZHUGVuZGluZ0VsZW1lbnRzKiBlbGVtZW50cyA9IGl0
LT5zZWNvbmQ7CisgICAgICAgICAgICBTVkdQZW5kaW5nRWxlbWVudHMqIGVsZW1lbnRzID0gaXQt
PnZhbHVlOwogICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnRzKTsKICAgICAgICAgICAgIEFTU0VS
VCghZWxlbWVudHMtPmlzRW1wdHkoKSk7CiAKICAgICAgICAgICAgIGVsZW1lbnRzLT5yZW1vdmUo
ZWxlbWVudCk7CiAgICAgICAgICAgICBpZiAoZWxlbWVudHMtPmlzRW1wdHkoKSkKLSAgICAgICAg
ICAgICAgICB0b0JlUmVtb3ZlZC5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgICAgICAgICB0
b0JlUmVtb3ZlZC5hcHBlbmQoaXQtPmtleSk7CiAgICAgICAgIH0KIAogICAgICAgICBlbGVtZW50
LT5jbGVhckhhc1BlbmRpbmdSZXNvdXJjZXNJZlBvc3NpYmxlKCk7CkBAIC0yOTYsMTMgKzI5Niwx
MyBAQCB2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlRWxlbWVudEZyb21QZW5kaW5n
UmVzb3VyY2VzKFNWR1N0eWxlZEVsZW1lbnQqCiAgICAgICAgIFZlY3RvcjxBdG9taWNTdHJpbmc+
IHRvQmVSZW1vdmVkOwogICAgICAgICBIYXNoTWFwPEF0b21pY1N0cmluZywgU1ZHUGVuZGluZ0Vs
ZW1lbnRzKj46Oml0ZXJhdG9yIGVuZCA9IG1fcGVuZGluZ1Jlc291cmNlc0ZvclJlbW92YWwuZW5k
KCk7CiAgICAgICAgIGZvciAoSGFzaE1hcDxBdG9taWNTdHJpbmcsIFNWR1BlbmRpbmdFbGVtZW50
cyo+OjppdGVyYXRvciBpdCA9IG1fcGVuZGluZ1Jlc291cmNlc0ZvclJlbW92YWwuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBTVkdQZW5kaW5nRWxlbWVudHMqIGVsZW1l
bnRzID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIFNWR1BlbmRpbmdFbGVtZW50cyogZWxlbWVu
dHMgPSBpdC0+dmFsdWU7CiAgICAgICAgICAgICBBU1NFUlQoZWxlbWVudHMpOwogICAgICAgICAg
ICAgQVNTRVJUKCFlbGVtZW50cy0+aXNFbXB0eSgpKTsKIAogICAgICAgICAgICAgZWxlbWVudHMt
PnJlbW92ZShlbGVtZW50KTsKICAgICAgICAgICAgIGlmIChlbGVtZW50cy0+aXNFbXB0eSgpKQot
ICAgICAgICAgICAgICAgIHRvQmVSZW1vdmVkLmFwcGVuZChpdC0+Zmlyc3QpOworICAgICAgICAg
ICAgICAgIHRvQmVSZW1vdmVkLmFwcGVuZChpdC0+a2V5KTsKICAgICAgICAgfQogCiAgICAgICAg
IC8vIFdlIHVzZSB0aGUgcmVtb3ZlUGVuZGluZ1Jlc291cmNlRm9yUmVtb3ZhbCBmdW5jdGlvbiBo
ZXJlIGJlY2F1c2UgaXQgZGVhbHMgd2l0aCBzZXQgbGlmZXRpbWUgY29ycmVjdGx5LgpAQCAtMzYy
LDcgKzM2Miw3IEBAIEhhc2hTZXQ8U1ZHRWxlbWVudCo+KiBTVkdEb2N1bWVudEV4dGVuc2lvbnM6
OnNldE9mRWxlbWVudHNSZWZlcmVuY2luZ1RhcmdldChTVkdFCiAgICAgY29uc3QgSGFzaE1hcDxT
VkdFbGVtZW50KiwgT3duUHRyPEhhc2hTZXQ8U1ZHRWxlbWVudCo+ID4gPjo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtX2VsZW1lbnREZXBlbmRlbmNpZXMuZmluZChyZWZlcmVuY2VkRWxlbWVudCk7CiAg
ICAgaWYgKGl0ID09IG1fZWxlbWVudERlcGVuZGVuY2llcy5lbmQoKSkKICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgcmV0dXJuIGl0LT52YWx1ZS5n
ZXQoKTsKIH0KIAogdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OmFkZEVsZW1lbnRSZWZlcmVu
Y2luZ1RhcmdldChTVkdFbGVtZW50KiByZWZlcmVuY2luZ0VsZW1lbnQsIFNWR0VsZW1lbnQqIHJl
ZmVyZW5jZWRFbGVtZW50KQpAQCAtMzg2LDggKzM4Niw4IEBAIHZvaWQgU1ZHRG9jdW1lbnRFeHRl
bnNpb25zOjpyZW1vdmVBbGxUYXJnZXRSZWZlcmVuY2VzRm9yRWxlbWVudChTVkdFbGVtZW50KiBy
ZWZlCiAKICAgICBIYXNoTWFwPFNWR0VsZW1lbnQqLCBPd25QdHI8SGFzaFNldDxTVkdFbGVtZW50
Kj4gPiA+OjppdGVyYXRvciBlbmQgPSBtX2VsZW1lbnREZXBlbmRlbmNpZXMuZW5kKCk7CiAgICAg
Zm9yIChIYXNoTWFwPFNWR0VsZW1lbnQqLCBPd25QdHI8SGFzaFNldDxTVkdFbGVtZW50Kj4gPiA+
OjppdGVyYXRvciBpdCA9IG1fZWxlbWVudERlcGVuZGVuY2llcy5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKLSAgICAgICAgU1ZHRWxlbWVudCogcmVmZXJlbmNlZEVsZW1lbnQgPSBpdC0+Zmly
c3Q7Ci0gICAgICAgIEhhc2hTZXQ8U1ZHRWxlbWVudCo+KiByZWZlcmVuY2luZ0VsZW1lbnRzID0g
aXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgU1ZHRWxlbWVudCogcmVmZXJlbmNlZEVsZW1lbnQg
PSBpdC0+a2V5OworICAgICAgICBIYXNoU2V0PFNWR0VsZW1lbnQqPiogcmVmZXJlbmNpbmdFbGVt
ZW50cyA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgSGFzaFNldDxTVkdFbGVtZW50Kj46Oml0
ZXJhdG9yIHNldEl0ID0gcmVmZXJlbmNpbmdFbGVtZW50cy0+ZmluZChyZWZlcmVuY2luZ0VsZW1l
bnQpOwogICAgICAgICBpZiAoc2V0SXQgPT0gcmVmZXJlbmNpbmdFbGVtZW50cy0+ZW5kKCkpCiAg
ICAgICAgICAgICBjb250aW51ZTsKQEAgLTQwOCwxMCArNDA4LDEwIEBAIHZvaWQgU1ZHRG9jdW1l
bnRFeHRlbnNpb25zOjpyZW1vdmVBbGxFbGVtZW50UmVmZXJlbmNlc0ZvclRhcmdldChTVkdFbGVt
ZW50KiByZWZlCiAgICAgSGFzaE1hcDxTVkdFbGVtZW50KiwgT3duUHRyPEhhc2hTZXQ8U1ZHRWxl
bWVudCo+ID4gPjo6aXRlcmF0b3IgaXQgPSBtX2VsZW1lbnREZXBlbmRlbmNpZXMuZmluZChyZWZl
cmVuY2VkRWxlbWVudCk7CiAgICAgaWYgKGl0ID09IG1fZWxlbWVudERlcGVuZGVuY2llcy5lbmQo
KSkKICAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVChpdC0+Zmlyc3QgPT0gcmVmZXJlbmNlZEVs
ZW1lbnQpOworICAgIEFTU0VSVChpdC0+a2V5ID09IHJlZmVyZW5jZWRFbGVtZW50KTsKICAgICBW
ZWN0b3I8U1ZHRWxlbWVudCo+IHRvQmVOb3RpZmllZDsKIAotICAgIEhhc2hTZXQ8U1ZHRWxlbWVu
dCo+KiByZWZlcmVuY2luZ0VsZW1lbnRzID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICBIYXNoU2V0
PFNWR0VsZW1lbnQqPiogcmVmZXJlbmNpbmdFbGVtZW50cyA9IGl0LT52YWx1ZS5nZXQoKTsKICAg
ICBIYXNoU2V0PFNWR0VsZW1lbnQqPjo6aXRlcmF0b3Igc2V0RW5kID0gcmVmZXJlbmNpbmdFbGVt
ZW50cy0+ZW5kKCk7CiAgICAgZm9yIChIYXNoU2V0PFNWR0VsZW1lbnQqPjo6aXRlcmF0b3Igc2V0
SXQgPSByZWZlcmVuY2luZ0VsZW1lbnRzLT5iZWdpbigpOyBzZXRJdCAhPSBzZXRFbmQ7ICsrc2V0
SXQpCiAgICAgICAgIHRvQmVOb3RpZmllZC5hcHBlbmQoKnNldEl0KTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdF
bGVtZW50LmNwcAppbmRleCA2OTNlMjg3NzBlMTRlZDMyYzAzZGJhNmUwYmJhYzhkMWQ3ZmVjNmI0
Li40Yjk4ODNiNzhlZTU1Njc3ZTQ5ZmEyYzA0YTkxNmQ3ZGUwMDYyMjY3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0VsZW1lbnQuY3BwCkBAIC02OCw3ICs2OCw3IEBAIFNWR0VsZW1lbnQ6On5TVkdFbGVtZW50
KCkKICAgICAgICAgU1ZHRWxlbWVudFJhcmVEYXRhOjpTVkdFbGVtZW50UmFyZURhdGFNYXA6Oml0
ZXJhdG9yIGl0ID0gcmFyZURhdGFNYXAuZmluZCh0aGlzKTsKICAgICAgICAgQVNTRVJUKGl0ICE9
IHJhcmVEYXRhTWFwLmVuZCgpKTsKIAotICAgICAgICBTVkdFbGVtZW50UmFyZURhdGEqIHJhcmVE
YXRhID0gaXQtPnNlY29uZDsKKyAgICAgICAgU1ZHRWxlbWVudFJhcmVEYXRhKiByYXJlRGF0YSA9
IGl0LT52YWx1ZTsKICAgICAgICAgcmFyZURhdGEtPmRlc3Ryb3lBbmltYXRlZFNNSUxTdHlsZVBy
b3BlcnRpZXMoKTsKICAgICAgICAgaWYgKFNWR0N1cnNvckVsZW1lbnQqIGN1cnNvckVsZW1lbnQg
PSByYXJlRGF0YS0+Y3Vyc29yRWxlbWVudCgpKQogICAgICAgICAgICAgY3Vyc29yRWxlbWVudC0+
cmVtb3ZlQ2xpZW50KHRoaXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1h
dGlvbi9TTUlMVGltZUNvbnRhaW5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9u
L1NNSUxUaW1lQ29udGFpbmVyLmNwcAppbmRleCAyM2M0OGM2MjcyOGY0ZjIwYWUwMGNjYzMzZWJl
ZjI1N2EwM2EzMTMwLi5hMTBiZTg1NDM2OWEyOGIwZjQxYTFiZWNjMDE1ZTQzYTE4NzMzNTM2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVy
LmNwcApAQCAtMTkwLDcgKzE5MCw3IEBAIHZvaWQgU01JTFRpbWVDb250YWluZXI6OnNldEVsYXBz
ZWQoU01JTFRpbWUgdGltZSkKICNlbmRpZgogICAgIEdyb3VwZWRBbmltYXRpb25zTWFwOjppdGVy
YXRvciBlbmQgPSBtX3NjaGVkdWxlZEFuaW1hdGlvbnMuZW5kKCk7CiAgICAgZm9yIChHcm91cGVk
QW5pbWF0aW9uc01hcDo6aXRlcmF0b3IgaXQgPSBtX3NjaGVkdWxlZEFuaW1hdGlvbnMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIEFuaW1hdGlvbnNWZWN0b3IqIHNjaGVkdWxl
ZCA9IGl0LT5zZWNvbmQ7CisgICAgICAgIEFuaW1hdGlvbnNWZWN0b3IqIHNjaGVkdWxlZCA9IGl0
LT52YWx1ZTsKICAgICAgICAgdW5zaWduZWQgc2l6ZSA9IHNjaGVkdWxlZC0+c2l6ZSgpOwogICAg
ICAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgc2l6ZTsgbisrKQogICAgICAgICAgICAgc2No
ZWR1bGVkLT5hdChuKS0+cmVzZXQoKTsKQEAgLTI2OCw3ICsyNjgsNyBAQCB2b2lkIFNNSUxUaW1l
Q29udGFpbmVyOjp1cGRhdGVBbmltYXRpb25zKFNNSUxUaW1lIGVsYXBzZWQsIGJvb2wgc2Vla1Rv
VGltZSkKICAgICBBbmltYXRpb25zVmVjdG9yIGFuaW1hdGlvbnNUb0FwcGx5OwogICAgIEdyb3Vw
ZWRBbmltYXRpb25zTWFwOjppdGVyYXRvciBlbmQgPSBtX3NjaGVkdWxlZEFuaW1hdGlvbnMuZW5k
KCk7CiAgICAgZm9yIChHcm91cGVkQW5pbWF0aW9uc01hcDo6aXRlcmF0b3IgaXQgPSBtX3NjaGVk
dWxlZEFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIEFuaW1h
dGlvbnNWZWN0b3IqIHNjaGVkdWxlZCA9IGl0LT5zZWNvbmQ7CisgICAgICAgIEFuaW1hdGlvbnNW
ZWN0b3IqIHNjaGVkdWxlZCA9IGl0LT52YWx1ZTsKIAogICAgICAgICAvLyBTb3J0IGFjY29yZGlu
ZyB0byBwcmlvcml0eS4gRWxlbWVudHMgd2l0aCBsYXRlciBiZWdpbiB0aW1lIGhhdmUgaGlnaGVy
IHByaW9yaXR5LgogICAgICAgICAvLyBJbiBjYXNlIG9mIGEgdGllLCBkb2N1bWVudCBvcmRlciBk
ZWNpZGVzLiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFn
ZUNhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZUNhY2hlLmNw
cAppbmRleCBhNTEyNTBiZmE0Mzk4NzRiMjlmZmQ0MjAwN2Y5MWE1ZjI3MjE0ODBhLi4zNThmMmNh
YTg3ZmRhZDM4M2FlOWQ3MTE2MWNhYTUyMTA3NzRhMjVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
c3ZnL2dyYXBoaWNzL1NWR0ltYWdlQ2FjaGUuY3BwCkBAIC00NCwxMSArNDQsMTEgQEAgU1ZHSW1h
Z2VDYWNoZTo6flNWR0ltYWdlQ2FjaGUoKQogCiAgICAgSW1hZ2VEYXRhTWFwOjppdGVyYXRvciBl
bmQgPSBtX2ltYWdlRGF0YU1hcC5lbmQoKTsKICAgICBmb3IgKEltYWdlRGF0YU1hcDo6aXRlcmF0
b3IgaXQgPSBtX2ltYWdlRGF0YU1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgLy8gQ2hlY2tzIGlmIHRoZSBjbGllbnQgKGl0LT5maXJzdCkgaXMgc3RpbGwgdmFsaWQuIFRo
ZSBjbGllbnQgc2hvdWxkIHJlbW92ZSBpdHNlbGYgZnJvbSB0aGlzCisgICAgICAgIC8vIENoZWNr
cyBpZiB0aGUgY2xpZW50IChpdC0+a2V5KSBpcyBzdGlsbCB2YWxpZC4gVGhlIGNsaWVudCBzaG91
bGQgcmVtb3ZlIGl0c2VsZiBmcm9tIHRoaXMKICAgICAgICAgLy8gY2FjaGUgYmVmb3JlIGl0cyBl
bmQgb2YgbGlmZSwgb3RoZXJ3aXNlIHRoZSBmb2xsb3dpbmcgQVNTRVJUIHdpbGwgY3Jhc2ggb24g
cHVyZSB2aXJ0dWFsCiAgICAgICAgIC8vIGZ1bmN0aW9uIGNhbGwgb3IgYSBnZW5lcmFsIGNyYXNo
LgotICAgICAgICBBU1NFUlQoaXQtPmZpcnN0LT5yZXNvdXJjZUNsaWVudFR5cGUoKSA9PSBDYWNo
ZWRJbWFnZUNsaWVudDo6ZXhwZWN0ZWRUeXBlKCkpOwotICAgICAgICBkZWxldGUgaXQtPnNlY29u
ZC5idWZmZXI7CisgICAgICAgIEFTU0VSVChpdC0+a2V5LT5yZXNvdXJjZUNsaWVudFR5cGUoKSA9
PSBDYWNoZWRJbWFnZUNsaWVudDo6ZXhwZWN0ZWRUeXBlKCkpOworICAgICAgICBkZWxldGUgaXQt
PnZhbHVlLmJ1ZmZlcjsKICAgICB9CiAKICAgICBtX2ltYWdlRGF0YU1hcC5jbGVhcigpOwpAQCAt
NjMsNyArNjMsNyBAQCB2b2lkIFNWR0ltYWdlQ2FjaGU6OnJlbW92ZUNsaWVudEZyb21DYWNoZShj
b25zdCBDYWNoZWRJbWFnZUNsaWVudCogY2xpZW50KQogICAgIGlmIChpdCA9PSBtX2ltYWdlRGF0
YU1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZGVsZXRlIGl0LT5zZWNvbmQuYnVm
ZmVyOworICAgIGRlbGV0ZSBpdC0+dmFsdWUuYnVmZmVyOwogICAgIG1faW1hZ2VEYXRhTWFwLnJl
bW92ZShpdCk7CiB9CiAKQEAgLTgxLDE0ICs4MSwxNCBAQCBTVkdJbWFnZUNhY2hlOjpTaXplQW5k
U2NhbGVzIFNWR0ltYWdlQ2FjaGU6OnJlcXVlc3RlZFNpemVBbmRTY2FsZXMoY29uc3QgQ2FjaGVk
SQogICAgIFNpemVBbmRTY2FsZXNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zaXplQW5kU2Nh
bGVzTWFwLmZpbmQoY2xpZW50KTsKICAgICBpZiAoaXQgPT0gbV9zaXplQW5kU2NhbGVzTWFwLmVu
ZCgpKQogICAgICAgICByZXR1cm4gU2l6ZUFuZFNjYWxlcygpOwotICAgIHJldHVybiBpdC0+c2Vj
b25kOworICAgIHJldHVybiBpdC0+dmFsdWU7CiB9CiAKIHZvaWQgU1ZHSW1hZ2VDYWNoZTo6aW1h
Z2VDb250ZW50Q2hhbmdlZCgpCiB7CiAgICAgSW1hZ2VEYXRhTWFwOjppdGVyYXRvciBlbmQgPSBt
X2ltYWdlRGF0YU1hcC5lbmQoKTsKICAgICBmb3IgKEltYWdlRGF0YU1hcDo6aXRlcmF0b3IgaXQg
PSBtX2ltYWdlRGF0YU1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5z
ZWNvbmQuaW1hZ2VOZWVkc1VwZGF0ZSA9IHRydWU7CisgICAgICAgIGl0LT52YWx1ZS5pbWFnZU5l
ZWRzVXBkYXRlID0gdHJ1ZTsKIAogICAgIC8vIElmIHdlJ3JlIGluIHRoZSBtaWRkbGUgb2YgbGF5
b3V0LCBzdGFydCByZWRyYXdpbmcgZGlydHkKICAgICAvLyBpbWFnZXMgb24gYSB0aW1lcjsgb3Ro
ZXJ3aXNlIGl0J3Mgc2FmZSB0byBkcmF3IGltbWVkaWF0ZWx5LgpAQCAtMTA0LDcgKzEwNCw3IEBA
IHZvaWQgU1ZHSW1hZ2VDYWNoZTo6cmVkcmF3KCkKIHsKICAgICBJbWFnZURhdGFNYXA6Oml0ZXJh
dG9yIGVuZCA9IG1faW1hZ2VEYXRhTWFwLmVuZCgpOwogICAgIGZvciAoSW1hZ2VEYXRhTWFwOjpp
dGVyYXRvciBpdCA9IG1faW1hZ2VEYXRhTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewot
ICAgICAgICBJbWFnZURhdGEmIGRhdGEgPSBpdC0+c2Vjb25kOworICAgICAgICBJbWFnZURhdGEm
IGRhdGEgPSBpdC0+dmFsdWU7CiAgICAgICAgIGlmICghZGF0YS5pbWFnZU5lZWRzVXBkYXRlKQog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIC8vIElmIHRoZSBjb250ZW50IGNoYW5nZWQg
d2UgcmVkcmF3IHVzaW5nIG91ciBleGlzdGluZyBJbWFnZUJ1ZmZlci4KQEAgLTE0Miw5ICsxNDIs
OSBAQCBJbWFnZSogU1ZHSW1hZ2VDYWNoZTo6bG9va3VwT3JDcmVhdGVCaXRtYXBJbWFnZUZvclJl
bmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCogcgogICAgIGlmIChzaXplSXQgPT0gbV9zaXplQW5k
U2NhbGVzTWFwLmVuZCgpKQogICAgICAgICByZXR1cm4gSW1hZ2U6Om51bGxJbWFnZSgpOwogCi0g
ICAgSW50U2l6ZSBzaXplID0gc2l6ZUl0LT5zZWNvbmQuc2l6ZTsKLSAgICBmbG9hdCB6b29tID0g
c2l6ZUl0LT5zZWNvbmQuem9vbTsKLSAgICBmbG9hdCBzY2FsZSA9IHNpemVJdC0+c2Vjb25kLnNj
YWxlOworICAgIEludFNpemUgc2l6ZSA9IHNpemVJdC0+dmFsdWUuc2l6ZTsKKyAgICBmbG9hdCB6
b29tID0gc2l6ZUl0LT52YWx1ZS56b29tOworICAgIGZsb2F0IHNjYWxlID0gc2l6ZUl0LT52YWx1
ZS5zY2FsZTsKIAogICAgIC8vIEZJWE1FICg4NTMzNSk6IFRoaXMgbmVlZHMgdG8gdGFrZSBDU1Mg
dHJhbnNmb3JtIHNjYWxlIGludG8gYWNjb3VudCBhcyB3ZWxsLgogICAgIFBhZ2UqIHBhZ2UgPSBy
ZW5kZXJlci0+ZG9jdW1lbnQoKS0+cGFnZSgpOwpAQCAtMTU2LDcgKzE1Niw3IEBAIEltYWdlKiBT
VkdJbWFnZUNhY2hlOjpsb29rdXBPckNyZWF0ZUJpdG1hcEltYWdlRm9yUmVuZGVyZXIoY29uc3Qg
UmVuZGVyT2JqZWN0KiByCiAgICAgLy8gTG9va3VwIGltYWdlIGZvciBjbGllbnQgaW4gY2FjaGUg
YW5kIGV2ZW50dWFsbHkgdXBkYXRlIGl0LgogICAgIEltYWdlRGF0YU1hcDo6aXRlcmF0b3IgaXQg
PSBtX2ltYWdlRGF0YU1hcC5maW5kKGNsaWVudCk7CiAgICAgaWYgKGl0ICE9IG1faW1hZ2VEYXRh
TWFwLmVuZCgpKSB7Ci0gICAgICAgIEltYWdlRGF0YSYgZGF0YSA9IGl0LT5zZWNvbmQ7CisgICAg
ICAgIEltYWdlRGF0YSYgZGF0YSA9IGl0LT52YWx1ZTsKIAogICAgICAgICAvLyBDb21tb24gY2Fz
ZTogaW1hZ2Ugc2l6ZSAmIHpvb20gcmVtYWluZWQgdGhlIHNhbWUuCiAgICAgICAgIGlmIChkYXRh
LnNpemVBbmRTY2FsZXMuc2l6ZSA9PSBzaXplICYmIGRhdGEuc2l6ZUFuZFNjYWxlcy56b29tID09
IHpvb20gJiYgZGF0YS5zaXplQW5kU2NhbGVzLnNjYWxlID09IHNjYWxlKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oIGIv
U291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oCmlu
ZGV4IDIxN2ZkMWUzOGFiNzk4MDdiZTMyZTA1Mjk5M2VlZDQwOGVmZTNkMjUuLmYyZWI0NjBkZjc5
OTRjZGQ4YjYwZjBhMDgxYzc5NzUxYjA4YjhkMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmgKQEAgLTUxLDcgKzUx
LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgLy8gT25seSBhbGxvd2VkIGZvciBlZmZlY3Rz
IGJlbG9uZ3MgdG8gdGhpcyBidWlsZGVyLgogICAgICAgICBBU1NFUlQobV9lZmZlY3RSZWZlcmVu
Y2VzLmNvbnRhaW5zKGVmZmVjdCkpOwotICAgICAgICByZXR1cm4gbV9lZmZlY3RSZWZlcmVuY2Vz
LmZpbmQoZWZmZWN0KS0+c2Vjb25kOworICAgICAgICByZXR1cm4gbV9lZmZlY3RSZWZlcmVuY2Vz
LmZpbmQoZWZmZWN0KS0+dmFsdWU7CiAgICAgfQogCiAgICAgLy8gUmVxdWlyZWQgdG8gY2hhbmdl
IHRoZSBhdHRyaWJ1dGVzIG9mIGEgZmlsdGVyIGR1cmluZyBhbiBzdmdBdHRyaWJ1dGVDaGFuZ2Vk
LgpAQCAtNjcsNyArNjcsNyBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgSGFzaE1hcDxBdG9t
aWNTdHJpbmcsIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+ID46Oml0ZXJhdG9yIGVuZCA9IG1fYnVpbHRp
bkVmZmVjdHMuZW5kKCk7CiAgICAgICAgIGZvciAoSGFzaE1hcDxBdG9taWNTdHJpbmcsIFJlZlB0
cjxGaWx0ZXJFZmZlY3Q+ID46Oml0ZXJhdG9yIGl0ZXJhdG9yID0gbV9idWlsdGluRWZmZWN0cy5i
ZWdpbigpOyBpdGVyYXRvciAhPSBlbmQ7ICsraXRlcmF0b3IpCi0gICAgICAgICAgICAgbV9lZmZl
Y3RSZWZlcmVuY2VzLmFkZChpdGVyYXRvci0+c2Vjb25kLCBGaWx0ZXJFZmZlY3RTZXQoKSk7Cisg
ICAgICAgICAgICAgbV9lZmZlY3RSZWZlcmVuY2VzLmFkZChpdGVyYXRvci0+dmFsdWUsIEZpbHRl
ckVmZmVjdFNldCgpKTsKICAgICB9CiAKICAgICBIYXNoTWFwPEF0b21pY1N0cmluZywgUmVmUHRy
PEZpbHRlckVmZmVjdD4gPiBtX2J1aWx0aW5FZmZlY3RzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eS5oIGIvU291cmNlL1dlYkNv
cmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eS5oCmluZGV4IDZkZmRhYzZkZDU3
OGFmMzBmNmRlYWI3Y2QyNjU4MzYwNDQyZjNhZGYuLjZhMWYwMDk3YjYxYmMwYjVkYjA5ODAxNTUw
OTAzYzE5MDQ0OTY3YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVz
L1NWR0FuaW1hdGVkUHJvcGVydHkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGll
cy9TVkdBbmltYXRlZFByb3BlcnR5LmgKQEAgLTU4LDggKzU4LDggQEAgcHVibGljOgogICAgICAg
ICBDYWNoZSogY2FjaGUgPSBhbmltYXRlZFByb3BlcnR5Q2FjaGUoKTsKICAgICAgICAgY29uc3Qg
Q2FjaGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGNhY2hlLT5lbmQoKTsKICAgICAgICAgZm9yIChD
YWNoZTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjYWNoZS0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7Ci0gICAgICAgICAgICBpZiAoaXQtPnNlY29uZCA9PSB0aGlzKSB7Ci0gICAgICAgICAgICAg
ICAgY2FjaGUtPnJlbW92ZShpdC0+Zmlyc3QpOworICAgICAgICAgICAgaWYgKGl0LT52YWx1ZSA9
PSB0aGlzKSB7CisgICAgICAgICAgICAgICAgY2FjaGUtPnJlbW92ZShpdC0+a2V5KTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQXR0cmlidXRlVG9Qcm9wZXJ0eU1hcC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBdHRyaWJ1dGVUb1Byb3BlcnR5
TWFwLmNwcAppbmRleCBiZTMxY2MzYzdkYTJmNTBmNTFmNjliNTU0NDAyNjVkYjEzNWI1MjhjLi5j
YzQ2Y2NmYTA4MWZmYzg4MzA5YjdlZjIyZDYzZjBmMzRlZmQ4MTdjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBdHRyaWJ1dGVUb1Byb3BlcnR5TWFwLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBdHRyaWJ1dGVUb1Byb3BlcnR5
TWFwLmNwcApAQCAtMzEsNyArMzEsNyBAQCB2b2lkIFNWR0F0dHJpYnV0ZVRvUHJvcGVydHlNYXA6
OmFkZFByb3BlcnRpZXMoU1ZHQXR0cmlidXRlVG9Qcm9wZXJ0eU1hcCYgbWFwKQogewogICAgIEF0
dHJpYnV0ZVRvUHJvcGVydGllc01hcDo6aXRlcmF0b3IgZW5kID0gbWFwLm1fbWFwLmVuZCgpOwog
ICAgIGZvciAoQXR0cmlidXRlVG9Qcm9wZXJ0aWVzTWFwOjppdGVyYXRvciBpdCA9IG1hcC5tX21h
cC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgUHJvcGVydGllc1ZlY3Rvciog
dmVjdG9yID0gaXQtPnNlY29uZDsKKyAgICAgICAgUHJvcGVydGllc1ZlY3RvciogdmVjdG9yID0g
aXQtPnZhbHVlOwogICAgICAgICBBU1NFUlQodmVjdG9yKTsKIAogICAgICAgICBQcm9wZXJ0aWVz
VmVjdG9yOjppdGVyYXRvciB2ZWN0b3JFbmQgPSB2ZWN0b3ItPmVuZCgpOwpAQCAtODEsMTIgKzgx
LDEyIEBAIHZvaWQgU1ZHQXR0cmlidXRlVG9Qcm9wZXJ0eU1hcDo6c3luY2hyb25pemVQcm9wZXJ0
aWVzKFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50CiAgICAgQVNTRVJUKGNvbnRleHRFbGVtZW50
KTsKICAgICBBdHRyaWJ1dGVUb1Byb3BlcnRpZXNNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fbWFwLmVu
ZCgpOwogICAgIGZvciAoQXR0cmlidXRlVG9Qcm9wZXJ0aWVzTWFwOjppdGVyYXRvciBpdCA9IG1f
bWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBQcm9wZXJ0aWVzVmVjdG9y
KiB2ZWN0b3IgPSBpdC0+c2Vjb25kOworICAgICAgICBQcm9wZXJ0aWVzVmVjdG9yKiB2ZWN0b3Ig
PSBpdC0+dmFsdWU7CiAgICAgICAgIEFTU0VSVCh2ZWN0b3IpOwogCiAgICAgICAgIFByb3BlcnRp
ZXNWZWN0b3I6Oml0ZXJhdG9yIHZlY3RvckVuZCA9IHZlY3Rvci0+ZW5kKCk7CiAgICAgICAgIGZv
ciAoUHJvcGVydGllc1ZlY3Rvcjo6aXRlcmF0b3IgdmVjdG9ySXQgPSB2ZWN0b3ItPmJlZ2luKCk7
IHZlY3Rvckl0ICE9IHZlY3RvckVuZDsgKyt2ZWN0b3JJdCkKLSAgICAgICAgICAgIHN5bmNocm9u
aXplUHJvcGVydHkoY29udGV4dEVsZW1lbnQsIGl0LT5maXJzdCwgKnZlY3Rvckl0KTsKKyAgICAg
ICAgICAgIHN5bmNocm9uaXplUHJvcGVydHkoY29udGV4dEVsZW1lbnQsIGl0LT5rZXksICp2ZWN0
b3JJdCk7CiAgICAgfSAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9X
b3JrZXJDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5j
cHAKaW5kZXggYzA0MGMzOTY2OTRiNjE2NDU1NzMwOGNkZTcxMjJkNjBmMTMwZDRkOS4uZDY5MzFj
ZmVjOTBlOGQyMmExNzJlYjgyMTI3ZTAwMGM3YzU3MDlhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS93b3Jr
ZXJzL1dvcmtlckNvbnRleHQuY3BwCkBAIC0xODQsNyArMTg0LDcgQEAgYm9vbCBXb3JrZXJDb250
ZXh0OjpoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdAogICAgIEFjdGl2ZURPTU9iamVjdHNNYXAm
IGFjdGl2ZU9iamVjdHMgPSBhY3RpdmVET01PYmplY3RzKCk7CiAgICAgQWN0aXZlRE9NT2JqZWN0
c01hcDo6Y29uc3RfaXRlcmF0b3IgYWN0aXZlT2JqZWN0c0VuZCA9IGFjdGl2ZU9iamVjdHMuZW5k
KCk7CiAgICAgZm9yIChBY3RpdmVET01PYmplY3RzTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0g
YWN0aXZlT2JqZWN0cy5iZWdpbigpOyBpdGVyICE9IGFjdGl2ZU9iamVjdHNFbmQ7ICsraXRlcikg
ewotICAgICAgICBpZiAoaXRlci0+Zmlyc3QtPmhhc1BlbmRpbmdBY3Rpdml0eSgpKQorICAgICAg
ICBpZiAoaXRlci0+a2V5LT5oYXNQZW5kaW5nQWN0aXZpdHkoKSkKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3Jr
ZXJFdmVudFF1ZXVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyRXZlbnRRdWV1
ZS5jcHAKaW5kZXggNTlhOTMwN2VhYzE3ODRiNjk5YzNmZWQyMGE0NTVhNzlmMDg5MTA3ZS4uMjM1
NTI5ZjFmZWI5NzEyOGMzMWQ5NmEzMGRhMGNkZmZiYmU5ZDBlYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJFdmVudFF1ZXVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS93b3JrZXJzL1dvcmtlckV2ZW50UXVldWUuY3BwCkBAIC0xMjcsNyArMTI3LDcgQEAgdm9pZCBX
b3JrZXJFdmVudFF1ZXVlOjpjbG9zZSgpCiB7CiAgICAgbV9pc0Nsb3NlZCA9IHRydWU7CiAgICAg
Zm9yIChFdmVudFRhc2tNYXA6Oml0ZXJhdG9yIGl0ID0gbV9ldmVudFRhc2tNYXAuYmVnaW4oKTsg
aXQgIT0gbV9ldmVudFRhc2tNYXAuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgRXZlbnREaXNwYXRj
aGVyVGFzayogdGFzayA9IGl0LT5zZWNvbmQ7CisgICAgICAgIEV2ZW50RGlzcGF0Y2hlclRhc2sq
IHRhc2sgPSBpdC0+dmFsdWU7CiAgICAgICAgIHRhc2stPmNhbmNlbCgpOwogICAgIH0KICAgICBt
X2V2ZW50VGFza01hcC5jbGVhcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL1hN
TEh0dHBSZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAK
aW5kZXggZWU2ZjI4YzljNDIyZjM3YTQ0ZDEyODkxNWVhYWMxYzg4OTM2ZTA3MC4uZjYxNjkwODU0
ZWY3M2UzOWJjMDRmZjY5Mjk2NjUxZGFjNmE4N2IwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0
cFJlcXVlc3QuY3BwCkBAIC05MjksNyArOTI5LDcgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6c2V0
UmVxdWVzdEhlYWRlckludGVybmFsKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgY29uc3QgU3QK
IHsKICAgICBIVFRQSGVhZGVyTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9yZXF1ZXN0SGVhZGVy
cy5hZGQobmFtZSwgdmFsdWUpOwogICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAg
IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLmFwcGVuZCgiLCAiICsgdmFsdWUpOworICAgICAgICBy
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZCgiLCAiICsgdmFsdWUpOwogfQogCiBTdHJpbmcg
WE1MSHR0cFJlcXVlc3Q6OmdldFJlcXVlc3RIZWFkZXIoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1l
KSBjb25zdApAQCAtOTU2LDE2ICs5NTYsMTYgQEAgU3RyaW5nIFhNTEh0dHBSZXF1ZXN0OjpnZXRB
bGxSZXNwb25zZUhlYWRlcnMoRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiAgICAgICAgIC8vICAg
ICAyKSBUaGVyZSdzIG5vIGtub3duIGhhcm0gaW4gaGlkaW5nIFNldC1Db29raWUgaGVhZGVyIGZp
ZWxkcyBlbnRpcmVseTsgd2UgZG9uJ3QKICAgICAgICAgLy8gICAgICAgIGtub3cgYW55IHdpZGVs
eSB1c2VkIHRlY2huaXF1ZSB0aGF0IHJlcXVpcmVzIGFjY2VzcyB0byB0aGVtLgogICAgICAgICAv
LyAgICAgMykgRmlyZWZveCBoYXMgaW1wbGVtZW50ZWQgdGhpcyBwb2xpY3kuCi0gICAgICAgIGlm
IChpc1NldENvb2tpZUhlYWRlcihpdC0+Zmlyc3QpICYmICFzZWN1cml0eU9yaWdpbigpLT5jYW5M
b2FkTG9jYWxSZXNvdXJjZXMoKSkKKyAgICAgICAgaWYgKGlzU2V0Q29va2llSGVhZGVyKGl0LT5r
ZXkpICYmICFzZWN1cml0eU9yaWdpbigpLT5jYW5Mb2FkTG9jYWxSZXNvdXJjZXMoKSkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGlmICghbV9zYW1lT3JpZ2luUmVxdWVzdCAmJiAh
aXNPbkFjY2Vzc0NvbnRyb2xSZXNwb25zZUhlYWRlcldoaXRlbGlzdChpdC0+Zmlyc3QpICYmICFh
Y2Nlc3NDb250cm9sRXhwb3NlSGVhZGVyU2V0LmNvbnRhaW5zKGl0LT5maXJzdCkpCisgICAgICAg
IGlmICghbV9zYW1lT3JpZ2luUmVxdWVzdCAmJiAhaXNPbkFjY2Vzc0NvbnRyb2xSZXNwb25zZUhl
YWRlcldoaXRlbGlzdChpdC0+a2V5KSAmJiAhYWNjZXNzQ29udHJvbEV4cG9zZUhlYWRlclNldC5j
b250YWlucyhpdC0+a2V5KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKGl0LT5maXJzdCk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KGl0LT5rZXkpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnOicpOwogICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZCgnICcpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChp
dC0+c2Vjb25kKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPnZhbHVlKTsKICAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xyJyk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKCdcbicpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0
aEZ1bmN0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhGdW5jdGlvbnMuY3BwCmlu
ZGV4IDM5MzRlYmE4ZWFhZTRhMWI1ODkwMmI4ODkzZjU1YzJlNmNjNDEzZGMuLjhiN2ViNzI5NWFk
MzFmNWQ3Njc0YTkxNjE2ZTY4ODNlNWE3ZmE1MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3htbC9YUGF0aEZ1bmN0aW9ucy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoRnVu
Y3Rpb25zLmNwcApAQCAtNzIwLDcgKzcyMCw3IEBAIEZ1bmN0aW9uKiBjcmVhdGVGdW5jdGlvbihj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uKj4mIGFyZ3MpCiAgICAg
SGFzaE1hcDxTdHJpbmcsIEZ1bmN0aW9uUmVjPjo6aXRlcmF0b3IgZnVuY3Rpb25NYXBJdGVyID0g
ZnVuY3Rpb25NYXAtPmZpbmQobmFtZSk7CiAgICAgRnVuY3Rpb25SZWMqIGZ1bmN0aW9uUmVjID0g
MDsKIAotICAgIGlmIChmdW5jdGlvbk1hcEl0ZXIgPT0gZnVuY3Rpb25NYXAtPmVuZCgpIHx8ICEo
ZnVuY3Rpb25SZWMgPSAmZnVuY3Rpb25NYXBJdGVyLT5zZWNvbmQpLT5hcmdzLmNvbnRhaW5zKGFy
Z3Muc2l6ZSgpKSkKKyAgICBpZiAoZnVuY3Rpb25NYXBJdGVyID09IGZ1bmN0aW9uTWFwLT5lbmQo
KSB8fCAhKGZ1bmN0aW9uUmVjID0gJmZ1bmN0aW9uTWFwSXRlci0+dmFsdWUpLT5hcmdzLmNvbnRh
aW5zKGFyZ3Muc2l6ZSgpKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBGdW5jdGlvbiogZnVu
Y3Rpb24gPSBmdW5jdGlvblJlYy0+ZmFjdG9yeUZuKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS94bWwvWFBhdGhQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoUGFyc2Vy
LmNwcAppbmRleCBiNWU2YTkyMzc1OTNiNGFhYTJhMjQzZjJmZjlkODZlNTdmOTMwYTk3Li43NDkx
ODBkYmU1ZWU4ZjliMTIyZmNkYTFlNjk4MTY5YzAwOWY4ZjgwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS94bWwvWFBhdGhQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0
aFBhcnNlci5jcHAKQEAgLTEwMyw3ICsxMDMsNyBAQCBzdGF0aWMgYm9vbCBpc0F4aXNOYW1lKGNv
bnN0IFN0cmluZyYgbmFtZSwgU3RlcDo6QXhpcyYgdHlwZSkKICAgICBBeGlzTmFtZXNNYXA6Oml0
ZXJhdG9yIGl0ID0gYXhpc05hbWVzLmZpbmQobmFtZSk7CiAgICAgaWYgKGl0ID09IGF4aXNOYW1l
cy5lbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHR5cGUgPSBpdC0+c2Vjb25kOwor
ICAgIHR5cGUgPSBpdC0+dmFsdWU7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yTGlieHNsdC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS94bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwCmluZGV4IGUyMWM4MjdjMjVkYmM1ZWZk
MzFiZTcwNWY5ZjM2ZjUyZGU1NDgyNDEuLmE5MTI5ODhkYTYzOGNjZjg0MmU3YjE3YWY1ZTQzNDQ2
ZThhMzJkMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yTGli
eHNsdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JMaWJ4c2x0LmNw
cApAQCAtMjI1LDggKzIyNSw4IEBAIHN0YXRpYyBjb25zdCBjaGFyKiogeHNsdFBhcmFtQXJyYXlG
cm9tUGFyYW1ldGVyTWFwKFhTTFRQcm9jZXNzb3I6OlBhcmFtZXRlck1hcCYKICAgICBYU0xUUHJv
Y2Vzc29yOjpQYXJhbWV0ZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IHBhcmFtZXRlcnMuZW5kKCk7CiAg
ICAgdW5zaWduZWQgaW5kZXggPSAwOwogICAgIGZvciAoWFNMVFByb2Nlc3Nvcjo6UGFyYW1ldGVy
TWFwOjppdGVyYXRvciBpdCA9IHBhcmFtZXRlcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7
Ci0gICAgICAgIHBhcmFtZXRlckFycmF5W2luZGV4KytdID0gZmFzdFN0ckR1cChpdC0+Zmlyc3Qu
dXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIHBhcmFtZXRlckFycmF5W2luZGV4KytdID0gZmFzdFN0
ckR1cChpdC0+c2Vjb25kLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBwYXJhbWV0ZXJBcnJheVtp
bmRleCsrXSA9IGZhc3RTdHJEdXAoaXQtPmtleS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgcGFy
YW1ldGVyQXJyYXlbaW5kZXgrK10gPSBmYXN0U3RyRHVwKGl0LT52YWx1ZS51dGY4KCkuZGF0YSgp
KTsKICAgICB9CiAgICAgcGFyYW1ldGVyQXJyYXlbaW5kZXhdID0gMDsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94
bWwvWFNMVFByb2Nlc3NvclF0LmNwcAppbmRleCBhNjdjNWZkZTc2ZmNjNTY4Y2UzYzRjNjhjNjEw
NjBkNDBiYjkzMTBjLi4wYzQxNDBhOGQ3OWVkZWZhNTAyMzM1ZmUwMTgzMTJmNDc1ZjE3MGY0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvclF0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvclF0LmNwcApAQCAtMTQyLDcgKzE0Miw3IEBA
IGJvb2wgWFNMVFByb2Nlc3Nvcjo6dHJhbnNmb3JtVG9TdHJpbmcoTm9kZSogc291cmNlTm9kZSwg
U3RyaW5nJiwgU3RyaW5nJiByZXN1bHRTCiAKICAgICBYU0xUUHJvY2Vzc29yOjpQYXJhbWV0ZXJN
YXA6Oml0ZXJhdG9yIGVuZCA9IG1fcGFyYW1ldGVycy5lbmQoKTsKICAgICBmb3IgKFhTTFRQcm9j
ZXNzb3I6OlBhcmFtZXRlck1hcDo6aXRlcmF0b3IgaXQgPSBtX3BhcmFtZXRlcnMuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KQotICAgICAgICBxdWVyeS5iaW5kVmFyaWFibGUoUVN0cmluZyhpdC0+
Zmlyc3QpLCBRWG1sSXRlbShRVmFyaWFudChRU3RyaW5nKGl0LT5zZWNvbmQpKSkpOworICAgICAg
ICBxdWVyeS5iaW5kVmFyaWFibGUoUVN0cmluZyhpdC0+a2V5KSwgUVhtbEl0ZW0oUVZhcmlhbnQo
UVN0cmluZyhpdC0+dmFsdWUpKSkpOwogCiAgICAgUVN0cmluZyBzb3VyY2U7CiAgICAgaWYgKHNv
dXJjZUlzRG9jdW1lbnQgJiYgb3duZXJEb2N1bWVudC0+dHJhbnNmb3JtU291cmNlKCkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL0JhY2tpbmdTdG9yZS5jcHAgYi9T
b3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL0JhY2tpbmdTdG9yZS5jcHAKaW5kZXggY2E5ZmEz
ZmVmNDQ1YjA3OTc1Nzc4YmE1NDYzN2E0OGVlMjEwZTIzZi4uMDBiMjEyYWNjNGE4YmU4MjhhMGEy
MDMyNTVhOGFjODM4NDdkOTk1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5
L0FwaS9CYWNraW5nU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkv
QmFja2luZ1N0b3JlLmNwcApAQCAtNzIzLDggKzcyMyw4IEBAIHZvaWQgQmFja2luZ1N0b3JlUHJp
dmF0ZTo6c2V0QmFja2luZ1N0b3JlUmVjdChjb25zdCBQbGF0Zm9ybTo6SW50UmVjdCYgYmFja2lu
Z1N0CiAgICAgLy8gb3VyIG5ldyBiYWNraW5nIHN0b3JlIHJlY3QuCiAgICAgVGlsZU1hcDo6Y29u
c3RfaXRlcmF0b3IgdGlsZU1hcEVuZCA9IGN1cnJlbnRNYXAuZW5kKCk7CiAgICAgZm9yIChUaWxl
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGN1cnJlbnRNYXAuYmVnaW4oKTsgaXQgIT0gdGlsZU1h
cEVuZDsgKytpdCkgewotICAgICAgICBUaWxlSW5kZXggb2xkSW5kZXggPSBpdC0+Zmlyc3Q7Ci0g
ICAgICAgIEJhY2tpbmdTdG9yZVRpbGUqIHRpbGUgPSBpdC0+c2Vjb25kOworICAgICAgICBUaWxl
SW5kZXggb2xkSW5kZXggPSBpdC0+a2V5OworICAgICAgICBCYWNraW5nU3RvcmVUaWxlKiB0aWxl
ID0gaXQtPnZhbHVlOwogCiAgICAgICAgIC8vIFJlc2V0IHRoZSBvbGQgaW5kZXguCiAgICAgICAg
IHJlc2V0VGlsZShvbGRJbmRleCwgdGlsZSwgZmFsc2UgLypyZXNldEJhY2tncm91bmQqLyk7CkBA
IC03ODAsOCArNzgwLDggQEAgdm9pZCBCYWNraW5nU3RvcmVQcml2YXRlOjpzZXRCYWNraW5nU3Rv
cmVSZWN0KGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0JiBiYWNraW5nU3QKICAgICBzaXplX3QgaSA9
IDA7CiAgICAgVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgbGVmdE92ZXJFbmQgPSBsZWZ0T3ZlclRp
bGVzLmVuZCgpOwogICAgIGZvciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsZWZ0T3Zl
clRpbGVzLmJlZ2luKCk7IGl0ICE9IGxlZnRPdmVyRW5kOyArK2l0KSB7Ci0gICAgICAgIFRpbGVJ
bmRleCBvbGRJbmRleCA9IGl0LT5maXJzdDsKLSAgICAgICAgQmFja2luZ1N0b3JlVGlsZSogdGls
ZSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFRpbGVJbmRleCBvbGRJbmRleCA9IGl0LT5rZXk7Cisg
ICAgICAgIEJhY2tpbmdTdG9yZVRpbGUqIHRpbGUgPSBpdC0+dmFsdWU7CiAgICAgICAgIGlmIChp
ID49IGluZGV4ZXNUb0ZpbGwuc2l6ZSgpKSB7CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTY2MCw3ICsxNjYwLDcgQEAgUGxhdGZvcm06
OkludFJlY3QgQmFja2luZ1N0b3JlUHJpdmF0ZTo6dmlzaWJsZVRpbGVzUmVjdCgpIGNvbnN0CiAg
ICAgVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY3VycmVudE1hcC5lbmQoKTsKICAgICBm
b3IgKFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY3VycmVudE1hcC5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKICAgICAgICAgVGlsZVJlY3QgdGlsZVJlY3Q7Ci0gICAgICAgIHRpbGVS
ZWN0LmZpcnN0ID0gaXQtPmZpcnN0OworICAgICAgICB0aWxlUmVjdC5maXJzdCA9IGl0LT5rZXk7
CiAgICAgICAgIHRpbGVSZWN0LnNlY29uZCA9IHRoaXMtPnRpbGVSZWN0KCk7CiAgICAgICAgIFBs
YXRmb3JtOjpJbnRSZWN0IHRpbGUgPSBtYXBGcm9tVGlsZXNUb1RyYW5zZm9ybWVkQ29udGVudHMo
dGlsZVJlY3QpOwogICAgICAgICBpZiAodGlsZS5pbnRlcnNlY3RzKHZpc2libGVDb250ZW50c1Jl
Y3QoKSkpCkBAIC0xNzIxLDcgKzE3MjEsNyBAQCB2b2lkIEJhY2tpbmdTdG9yZVByaXZhdGU6OnJl
c2V0VGlsZXMoYm9vbCByZXNldEJhY2tncm91bmQpCiAKICAgICBUaWxlTWFwOjpjb25zdF9pdGVy
YXRvciBlbmQgPSBjdXJyZW50TWFwLmVuZCgpOwogICAgIGZvciAoVGlsZU1hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBjdXJyZW50TWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAg
cmVzZXRUaWxlKGl0LT5maXJzdCwgaXQtPnNlY29uZCwgcmVzZXRCYWNrZ3JvdW5kKTsKKyAgICAg
ICAgcmVzZXRUaWxlKGl0LT5rZXksIGl0LT52YWx1ZSwgcmVzZXRCYWNrZ3JvdW5kKTsKIH0KIAog
dm9pZCBCYWNraW5nU3RvcmVQcml2YXRlOjp1cGRhdGVUaWxlcyhib29sIHVwZGF0ZVZpc2libGUs
IGJvb2wgaW1tZWRpYXRlKQpAQCAtMTczNCwxMCArMTczNCwxMCBAQCB2b2lkIEJhY2tpbmdTdG9y
ZVByaXZhdGU6OnVwZGF0ZVRpbGVzKGJvb2wgdXBkYXRlVmlzaWJsZSwgYm9vbCBpbW1lZGlhdGUp
CiAKICAgICBUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBjdXJyZW50TWFwLmVuZCgpOwog
ICAgIGZvciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjdXJyZW50TWFwLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBib29sIGlzVmlzaWJsZSA9IGlzVGlsZVZpc2li
bGUoaXQtPmZpcnN0KTsKKyAgICAgICAgYm9vbCBpc1Zpc2libGUgPSBpc1RpbGVWaXNpYmxlKGl0
LT5rZXkpOwogICAgICAgICBpZiAoIXVwZGF0ZVZpc2libGUgJiYgaXNWaXNpYmxlKQogICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIHVwZGF0ZVRpbGUoaXQtPmZpcnN0LCBpbW1lZGlhdGUp
OworICAgICAgICB1cGRhdGVUaWxlKGl0LT5rZXksIGltbWVkaWF0ZSk7CiAgICAgfQogfQogCkBA
IC0xNzU4LDggKzE3NTgsOCBAQCB2b2lkIEJhY2tpbmdTdG9yZVByaXZhdGU6OnVwZGF0ZVRpbGVz
Rm9yU2Nyb2xsT3JOb3RSZW5kZXJlZFJlZ2lvbihib29sIGNoZWNrTG9hZAogCiAgICAgVGlsZU1h
cDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY3VycmVudE1hcC5lbmQoKTsKICAgICBmb3IgKFRpbGVN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY3VycmVudE1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKLSAgICAgICAgVGlsZUluZGV4IGluZGV4ID0gaXQtPmZpcnN0OwotICAgICAgICBCYWNr
aW5nU3RvcmVUaWxlKiB0aWxlID0gaXQtPnNlY29uZDsKKyAgICAgICAgVGlsZUluZGV4IGluZGV4
ID0gaXQtPmtleTsKKyAgICAgICAgQmFja2luZ1N0b3JlVGlsZSogdGlsZSA9IGl0LT52YWx1ZTsK
ICAgICAgICAgYm9vbCBpc1Zpc2libGUgPSBpc1RpbGVWaXNpYmxlKGluZGV4KTsKICAgICAgICAg
Ly8gVGhlIHJlY3QgaW4gdHJhbnNmb3JtZWQgY29udGVudHMgY29vcmRpbmF0ZXMuCiAgICAgICAg
IFBsYXRmb3JtOjpJbnRSZWN0IHJlY3Qob3JpZ2luT2ZUaWxlKGluZGV4KSwgdGlsZVNpemUoKSk7
CkBAIC0xOTAyLDggKzE5MDIsOCBAQCBCYWNraW5nU3RvcmVQcml2YXRlOjpUaWxlUmVjdExpc3Qg
QmFja2luZ1N0b3JlUHJpdmF0ZTo6bWFwRnJvbVRyYW5zZm9ybWVkQ29udGVudAogICAgIFRpbGVS
ZWN0TGlzdCB0aWxlUmVjdExpc3Q7CiAgICAgVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
dGlsZU1hcC5lbmQoKTsKICAgICBmb3IgKFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdGls
ZU1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgVGlsZUluZGV4IGluZGV4
ID0gaXQtPmZpcnN0OwotICAgICAgICBCYWNraW5nU3RvcmVUaWxlKiB0aWxlID0gaXQtPnNlY29u
ZDsKKyAgICAgICAgVGlsZUluZGV4IGluZGV4ID0gaXQtPmtleTsKKyAgICAgICAgQmFja2luZ1N0
b3JlVGlsZSogdGlsZSA9IGl0LT52YWx1ZTsKIAogICAgICAgICAvLyBOZWVkIHRvIG1hcCB0aGUg
cmVjdCB0byB0aWxlIGNvb3JkaW5hdGVzLgogICAgICAgICBQbGF0Zm9ybTo6SW50UmVjdCByID0g
cmVjdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9y
dC9Ob3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJy
eS9XZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmNwcAppbmRleCA2YjI5
MjEwMjk0NjI3N2RhMjhlNzk4ZDdlZWRmOGI5MzljNTMxOWM3Li40OGNjZjNhYzUxYWJkZTM2NWFi
MDI3NTlkMWRhZGM0MTZmYzAwZjU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVy
cnkvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRl
ckltcGwuY3BwCkBAIC04MSw3ICs4MSw3IEBAIHZvaWQgTm90aWZpY2F0aW9uUHJlc2VudGVySW1w
bDo6Y2FuY2VsKE5vdGlmaWNhdGlvbiogbm90aWZpY2F0aW9uKQogICAgIGlmIChpdCA9PSBtX25v
dGlmaWNhdGlvbnMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcGxhdGZvcm1QcmVz
ZW50ZXItPmNhbmNlbChzdGQ6OnN0cmluZyhpdC0+c2Vjb25kLnV0ZjgoKS5kYXRhKCkpKTsKKyAg
ICBtX3BsYXRmb3JtUHJlc2VudGVyLT5jYW5jZWwoc3RkOjpzdHJpbmcoaXQtPnZhbHVlLnV0Zjgo
KS5kYXRhKCkpKTsKICAgICBtX25vdGlmaWNhdGlvbnMucmVtb3ZlKGl0KTsKIH0KIApAQCAtMTA4
LDEyICsxMDgsMTIgQEAgdm9pZCBOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpvblBlcm1pc3Np
b24oY29uc3Qgc3RkOjpzdHJpbmcmIGRvbWFpbiwgYm9vbCBpc0EKICAgICBTdHJpbmcgZG9tYWlu
U3RyaW5nID0gU3RyaW5nOjpmcm9tVVRGOChkb21haW4uY19zdHIoKSk7CiAgICAgUGVybWlzc2lv
blJlcXVlc3RNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wZXJtaXNzaW9uUmVxdWVzdHMuYmVnaW4oKTsK
ICAgICBmb3IgKDsgaXQgIT0gbV9wZXJtaXNzaW9uUmVxdWVzdHMuZW5kKCk7ICsraXQpIHsKLSAg
ICAgICAgaWYgKGl0LT5maXJzdC0+dXJsKCkuaG9zdCgpICE9IGRvbWFpblN0cmluZykKKyAgICAg
ICAgaWYgKGl0LT5rZXktPnVybCgpLmhvc3QoKSAhPSBkb21haW5TdHJpbmcpCiAgICAgICAgICAg
ICBjb250aW51ZTsKIAogICAgICAgICBpZiAoaXNBbGxvd2VkKSB7CiAgICAgICAgICAgICBtX2Fs
bG93ZWREb21haW5zLmFkZChkb21haW5TdHJpbmcpOwotICAgICAgICAgICAgaXQtPnNlY29uZC0+
aGFuZGxlRXZlbnQoKTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+aGFuZGxlRXZlbnQoKTsKICAg
ICAgICAgfSBlbHNlCiAgICAgICAgICAgICBtX2FsbG93ZWREb21haW5zLnJlbW92ZShkb21haW5T
dHJpbmcpOwogCkBAIC0xNDQsOSArMTQ0LDkgQEAgdm9pZCBOb3RpZmljYXRpb25QcmVzZW50ZXJJ
bXBsOjpub3RpZmljYXRpb25DbGlja2VkKGNvbnN0IHN0ZDo6c3RyaW5nJiBpZCkKICAgICBTdHJp
bmcgaWRTdHJpbmcgPSBTdHJpbmc6OmZyb21VVEY4KGlkLmNfc3RyKCkpOwogICAgIE5vdGlmaWNh
dGlvbk1hcDo6aXRlcmF0b3IgaXQgPSBtX25vdGlmaWNhdGlvbnMuYmVnaW4oKTsKICAgICBmb3Ig
KDsgaXQgIT0gbV9ub3RpZmljYXRpb25zLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+
c2Vjb25kID09IGlkU3RyaW5nICYmIGl0LT5maXJzdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
KSB7Ci0gICAgICAgICAgICBSZWZQdHI8Tm90aWZpY2F0aW9uPiBub3RpZmljYXRpb24gPSBpdC0+
Zmlyc3Q7Ci0gICAgICAgICAgICBpdC0+Zmlyc3QtPmRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0
ZShldmVudE5hbWVzKCkuY2xpY2tFdmVudCwgZmFsc2UsIHRydWUpKTsKKyAgICAgICAgaWYgKGl0
LT52YWx1ZSA9PSBpZFN0cmluZyAmJiBpdC0+a2V5LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkp
IHsKKyAgICAgICAgICAgIFJlZlB0cjxOb3RpZmljYXRpb24+IG5vdGlmaWNhdGlvbiA9IGl0LT5r
ZXk7CisgICAgICAgICAgICBpdC0+a2V5LT5kaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZl
bnROYW1lcygpLmNsaWNrRXZlbnQsIGZhbHNlLCB0cnVlKSk7CiAgICAgICAgICAgICBtX25vdGlm
aWNhdGlvbnMucmVtb3ZlKG5vdGlmaWNhdGlvbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9y
dC9Vc2VyTWVkaWFDbGllbnRJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJD
b3JlU3VwcG9ydC9Vc2VyTWVkaWFDbGllbnRJbXBsLmNwcAppbmRleCA2YjA5ZjJhNjQxMTNiOWQ1
ZGQyNDU1MmZiNzgzODIwOGI0MDY0YmIyLi4xYTJlN2IyZmZlNDNjMjEwMzQyNDRkM2EyNTg1Nzg4
YTY0ZTk4NjBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1
cHBvcnQvVXNlck1lZGlhQ2xpZW50SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2Jl
cnJ5L1dlYkNvcmVTdXBwb3J0L1VzZXJNZWRpYUNsaWVudEltcGwuY3BwCkBAIC0xMjksNyArMTI5
LDcgQEAgdm9pZCBVc2VyTWVkaWFDbGllbnRJbXBsOjpjYW5jZWxVc2VyTWVkaWFSZXF1ZXN0KFVz
ZXJNZWRpYVJlcXVlc3QqIHJlcXVlc3QpCiAgICAgICAgIHJldHVybjsKIAogICAgIFNlY3VyaXR5
T3JpZ2luKiBvcmlnaW4gPSByZXF1ZXN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnNlY3Vy
aXR5T3JpZ2luKCk7Ci0gICAgbV9wYWdlLT5jbGllbnQoKS0+Y2FuY2VsVXNlck1lZGlhUmVxdWVz
dChXZWJVc2VyTWVkaWFSZXF1ZXN0KHJlcXVlc3QtPmF1ZGlvKCksIHJlcXVlc3QtPnZpZGVvKCks
IG9yaWdpbi0+dG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBpdC0+c2Vjb25kLmdldCgpKSk7Cisg
ICAgbV9wYWdlLT5jbGllbnQoKS0+Y2FuY2VsVXNlck1lZGlhUmVxdWVzdChXZWJVc2VyTWVkaWFS
ZXF1ZXN0KHJlcXVlc3QtPmF1ZGlvKCksIHJlcXVlc3QtPnZpZGVvKCksIG9yaWdpbi0+dG9TdHJp
bmcoKS51dGY4KCkuZGF0YSgpLCBpdC0+dmFsdWUuZ2V0KCkpKTsKICAgICB1c2VyTWVkaWFSZXF1
ZXN0c01hcCgpLnJlbW92ZShpdCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9XZWJLaXRTdXBwb3J0L0Fib3V0RGF0YS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2JsYWNr
YmVycnkvV2ViS2l0U3VwcG9ydC9BYm91dERhdGEuY3BwCmluZGV4IDVjY2VmM2MwZTllYjYxMGU0
ZTQyYzdlYmQ3ZDg5OWEwNTEzYmZjZmIuLjYxYjM2MmI4NDQ4OWM3ZTMyM2EzMDRhMTY2ZTRmZDk2
YjM0MjRjOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBw
b3J0L0Fib3V0RGF0YS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1
cHBvcnQvQWJvdXREYXRhLmNwcApAQCAtMjA0LDcgKzIwNCw3IEBAIHN0YXRpYyB2b2lkIGR1bXBK
U0NUeXBlQ291bnRTZXRUb1RhYmxlSFRNTChTdHJpbmcmIHRhYmxlSFRNTCwgSlNDOjpUeXBlQ291
bnRTZXQqCiAgICAgICAgIHJldHVybjsKIAogICAgIGZvciAoSlNDOjpUeXBlQ291bnRTZXQ6OmNv
bnN0X2l0ZXJhdG9yIGl0ZXIgPSB0eXBlQ291bnRTZXQtPmJlZ2luKCk7IGl0ZXIgIT0gdHlwZUNv
dW50U2V0LT5lbmQoKTsgKytpdGVyKQotICAgICAgICB0YWJsZUhUTUwgKz0gbnVtYmVyVG9IVE1M
VHIoaXRlci0+Zmlyc3QsIGl0ZXItPnNlY29uZCk7CisgICAgICAgIHRhYmxlSFRNTCArPSBudW1i
ZXJUb0hUTUxUcihpdGVyLT5rZXksIGl0ZXItPnZhbHVlKTsKIH0KIAogc3RhdGljIFN0cmluZyBt
ZW1vcnlQYWdlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRT
dXBwb3J0L0ZyYW1lTGF5ZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRT
dXBwb3J0L0ZyYW1lTGF5ZXJzLmNwcAppbmRleCBhNDlmNTk0ZjJjMjBjMmMzMTc5MzIzOTJkNzFh
NTQ1Njg5YjVjNDY3Li5jNDAyM2RlM2M5ZmIxOWQxODcwMWYwYzE3MWIzMjYwMTE1ZmRkZDUyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9GcmFtZUxh
eWVycy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvRnJh
bWVMYXllcnMuY3BwCkBAIC05MSw3ICs5MSw3IEBAIHZvaWQgRnJhbWVMYXllcnM6OnJlbW92ZUxh
eWVyQnlGcmFtZShGcmFtZSogZnJhbWUpCiAgICAgQVNTRVJUKGZyYW1lKTsKICAgICBGcmFtZUxh
eWVyTWFwOjppdGVyYXRvciBpdCA9IG1fZnJhbWVMYXllcnMuZmluZChmcmFtZSk7CiAgICAgaWYg
KGl0ICE9IG1fZnJhbWVMYXllcnMuZW5kKCkpIHsKLSAgICAgICAgTGF5ZXJXZWJLaXRUaHJlYWQq
IGxheWVyID0gaXQtPnNlY29uZDsKKyAgICAgICAgTGF5ZXJXZWJLaXRUaHJlYWQqIGxheWVyID0g
aXQtPnZhbHVlOwogICAgICAgICBpZiAobGF5ZXItPnN1cGVybGF5ZXIoKSkKICAgICAgICAgICAg
IGxheWVyLT5yZW1vdmVGcm9tU3VwZXJsYXllcigpOwogICAgICAgICBtX2ZyYW1lTGF5ZXJzLnJl
bW92ZShpdCk7CkBAIC0xMDQsMTUgKzEwNCwxNSBAQCB2b2lkIEZyYW1lTGF5ZXJzOjpjb21taXRP
bldlYktpdFRocmVhZChkb3VibGUgc2NhbGUpCiAgICAgQVNTRVJUKG1fcm9vdExheWVyKTsKICAg
ICBpZiAoIWlzUm9vdExheWVyTWFpbkZyYW1lTGF5ZXIoKSkgewogICAgICAgICBmb3IgKEZyYW1l
TGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9mcmFtZUxheWVycy5iZWdpbigpOyBpdCAhPSBtX2Zy
YW1lTGF5ZXJzLmVuZCgpOyArK2l0KQotICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0QWJzb2x1
dGVPZmZzZXQoZnJhbWVMYXllckFic29sdXRlT2Zmc2V0KGl0LT5maXJzdCkpOworICAgICAgICAg
ICAgaXQtPnZhbHVlLT5zZXRBYnNvbHV0ZU9mZnNldChmcmFtZUxheWVyQWJzb2x1dGVPZmZzZXQo
aXQtPmtleSkpOwogICAgIH0KICAgICBtX3Jvb3RMYXllci0+Y29tbWl0T25XZWJLaXRUaHJlYWQo
c2NhbGUpOwogfQogCiB2b2lkIEZyYW1lTGF5ZXJzOjpjYWxjdWxhdGVSb290TGF5ZXIoKQogewot
ICAgIGlmIChtX2ZyYW1lTGF5ZXJzLnNpemUoKSA9PSAxICYmIG1fZnJhbWVMYXllcnMuYmVnaW4o
KS0+Zmlyc3QgPT0gbV9wYWdlUHJpdmF0ZS0+bV9tYWluRnJhbWUpCi0gICAgICAgIG1fcm9vdExh
eWVyID0gbV9mcmFtZUxheWVycy5iZWdpbigpLT5zZWNvbmQ7CisgICAgaWYgKG1fZnJhbWVMYXll
cnMuc2l6ZSgpID09IDEgJiYgbV9mcmFtZUxheWVycy5iZWdpbigpLT5rZXkgPT0gbV9wYWdlUHJp
dmF0ZS0+bV9tYWluRnJhbWUpCisgICAgICAgIG1fcm9vdExheWVyID0gbV9mcmFtZUxheWVycy5i
ZWdpbigpLT52YWx1ZTsKICAgICBlbHNlIGlmIChtX3Jvb3RHcmFwaGljc0xheWVyKQogICAgICAg
ICBtX3Jvb3RMYXllciA9IG1fcm9vdEdyYXBoaWNzTGF5ZXItPnBsYXRmb3JtTGF5ZXIoKTsKICAg
ICBlbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHZW9sb2Nh
dGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5jcHAKaW5kZXggNGMw
ZWQ5Y2Q3MTdiNmY0ZDVhYTZhZmFmOTcwYmViNjk2Nzk2ODlkMy4uMWVlYWM2NjdiZGY2NmIzZjE5
M2ZiMzM1YTM4NzEyOGZiYzkxMjY3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RN
YW5hZ2VyLmNwcApAQCAtNjQsNyArNjQsNyBAQCBib29sIFdlYkdlb2xvY2F0aW9uUGVybWlzc2lv
blJlcXVlc3RNYW5hZ2VyOjpyZW1vdmUoY29uc3QgV2ViS2l0OjpXZWJHZW9sb2NhdGlvbgogICAg
IEdlb2xvY2F0aW9uSWRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wcml2YXRlLT5tX2dlb2xvY2F0aW9u
SWRNYXAuZmluZChnZW9sb2NhdGlvbik7CiAgICAgaWYgKGl0ID09IG1fcHJpdmF0ZS0+bV9nZW9s
b2NhdGlvbklkTWFwLmVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWQgPSBpdC0+
c2Vjb25kOworICAgIGlkID0gaXQtPnZhbHVlOwogICAgIG1fcHJpdmF0ZS0+bV9nZW9sb2NhdGlv
bklkTWFwLnJlbW92ZShpdCk7CiAgICAgbV9wcml2YXRlLT5tX2lkR2VvbG9jYXRpb25NYXAucmVt
b3ZlKGlkKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTc1LDcgKzc1LDcgQEAgYm9vbCBXZWJHZW9s
b2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlcjo6cmVtb3ZlKGludCBpZCwgV2ViS2l0OjpX
ZWJHZW9sb2NhdGkKICAgICBJZEdlb2xvY2F0aW9uTWFwOjppdGVyYXRvciBpdCA9IG1fcHJpdmF0
ZS0+bV9pZEdlb2xvY2F0aW9uTWFwLmZpbmQoaWQpOwogICAgIGlmIChpdCA9PSBtX3ByaXZhdGUt
Pm1faWRHZW9sb2NhdGlvbk1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEdl
b2xvY2F0aW9uKiBnZW9sb2NhdGlvbiA9IGl0LT5zZWNvbmQ7CisgICAgR2VvbG9jYXRpb24qIGdl
b2xvY2F0aW9uID0gaXQtPnZhbHVlOwogICAgIHBlcm1pc3Npb25SZXF1ZXN0ID0gV2ViR2VvbG9j
YXRpb25QZXJtaXNzaW9uUmVxdWVzdChnZW9sb2NhdGlvbik7CiAgICAgbV9wcml2YXRlLT5tX2lk
R2VvbG9jYXRpb25NYXAucmVtb3ZlKGl0KTsKICAgICBtX3ByaXZhdGUtPm1fZ2VvbG9jYXRpb25J
ZE1hcC5yZW1vdmUoZ2VvbG9jYXRpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViSURCTWV0YWRhdGEuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViSURCTWV0YWRhdGEuY3BwCmluZGV4IGI4ZTNkYjNhNDAxN2ZhNzUzMGY5MjZkMGZmY2Q4ZDJl
MWU4MmQ3MzQuLmRkMWMyYzhlNTQwZmZlYmIzODhhZDJjYzEzNmI4Y2ViZmYwOWRjYjcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQk1ldGFkYXRhLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJNZXRhZGF0YS5jcHAKQEAgLTQ3LDcg
KzQ3LDcgQEAgV2ViSURCTWV0YWRhdGE6OldlYklEQk1ldGFkYXRhKGNvbnN0IFdlYkNvcmU6OklE
QkRhdGFiYXNlTWV0YWRhdGEmIG1ldGFkYXRhKQogCiAgICAgc2l6ZV90IGkgPSAwOwogICAgIGZv
ciAoSURCRGF0YWJhc2VNZXRhZGF0YTo6T2JqZWN0U3RvcmVNYXA6OmNvbnN0X2l0ZXJhdG9yIHN0
b3JlSXRlcmF0b3IgPSBtZXRhZGF0YS5vYmplY3RTdG9yZXMuYmVnaW4oKTsgc3RvcmVJdGVyYXRv
ciAhPSBtZXRhZGF0YS5vYmplY3RTdG9yZXMuZW5kKCk7ICsrc3RvcmVJdGVyYXRvcikgewotICAg
ICAgICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZSA9IHN0b3JlSXRl
cmF0b3ItPnNlY29uZDsKKyAgICAgICAgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2Jq
ZWN0U3RvcmUgPSBzdG9yZUl0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgT2JqZWN0U3RvcmUgd2Vi
T2JqZWN0U3RvcmU7CiAgICAgICAgIHdlYk9iamVjdFN0b3JlLm5hbWUgPSBvYmplY3RTdG9yZS5u
YW1lOwogICAgICAgICB3ZWJPYmplY3RTdG9yZS5rZXlQYXRoID0gb2JqZWN0U3RvcmUua2V5UGF0
aDsKQEAgLTU3LDcgKzU3LDcgQEAgV2ViSURCTWV0YWRhdGE6OldlYklEQk1ldGFkYXRhKGNvbnN0
IFdlYkNvcmU6OklEQkRhdGFiYXNlTWV0YWRhdGEmIG1ldGFkYXRhKQogCiAgICAgICAgIHNpemVf
dCBqID0gMDsKICAgICAgICAgZm9yIChJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbmRleE1hcDo6
Y29uc3RfaXRlcmF0b3IgaW5kZXhJdGVyYXRvciA9IG9iamVjdFN0b3JlLmluZGV4ZXMuYmVnaW4o
KTsgaW5kZXhJdGVyYXRvciAhPSBvYmplY3RTdG9yZS5pbmRleGVzLmVuZCgpOyArK2luZGV4SXRl
cmF0b3IpIHsKLSAgICAgICAgICAgIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4ID0gaW5k
ZXhJdGVyYXRvci0+c2Vjb25kOworICAgICAgICAgICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYg
aW5kZXggPSBpbmRleEl0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgICAgIEluZGV4IHdlYkluZGV4
OwogICAgICAgICAgICAgd2ViSW5kZXgubmFtZSA9IGluZGV4Lm5hbWU7CiAgICAgICAgICAgICB3
ZWJJbmRleC5rZXlQYXRoID0gaW5kZXgua2V5UGF0aDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkludGVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJJbnRlbnQuY3BwCmluZGV4IDU1Nzc1ZWNmY2RjMTYyMDRlNTg0MDZhMTU3OGFlOGViNjY4
N2VkOGMuLjA0MWM3ZjJlOWM1MDM1NzU5YmQ4ZTNlYmIzNDNmYzRjZmZkYjdkMGQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkludGVudC5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW50ZW50LmNwcApAQCAtMTg4LDcgKzE4OCw3IEBAIFdl
YlN0cmluZyBXZWJJbnRlbnQ6OmV4dHJhc1ZhbHVlKGNvbnN0IFdlYlN0cmluZyYgbmFtZSkgY29u
c3QKICAgICBXVEY6Okhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciB2YWwg
PSBtX3ByaXZhdGUtPmV4dHJhcygpLmZpbmQobmFtZSk7CiAgICAgaWYgKHZhbCA9PSBtX3ByaXZh
dGUtPmV4dHJhcygpLmVuZCgpKQogICAgICAgICByZXR1cm4gV2ViU3RyaW5nKCk7Ci0gICAgcmV0
dXJuIHZhbC0+c2Vjb25kOworICAgIHJldHVybiB2YWwtPnZhbHVlOwogI2Vsc2UKICAgICByZXR1
cm4gV2ViU3RyaW5nKCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvTWVtb3J5SW5zdHJ1bWVudGF0aW9uVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL01lbW9yeUluc3RydW1lbnRhdGlvblRlc3QuY3BwCmluZGV4IDRjMTc5ZGVh
ZjA0MWQ2ODc0NmIwM2IyOWI5MjVlZjMyNTM2OWQ3NzYuLmNmMTFhYTk0YmMxYjg3MzlmMzkwODEy
MDU0ZTc2MDIyNjVjY2VlNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvTWVtb3J5SW5zdHJ1bWVudGF0aW9uVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9NZW1vcnlJbnN0cnVtZW50YXRpb25UZXN0LmNwcApAQCAtNjQwLDcgKzY0MCw3
IEBAIFRFU1QoTWVtb3J5SW5zdHJ1bWVudGF0aW9uVGVzdCwgaGFzaE1hcFdpdGhWYWx1ZXNDb252
ZXJ0aWJsZVRvSW50KQogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewogICAg
ICAgICBrZXlzVmVjdG9yLmFwcGVuZChhZG9wdFB0cihuZXcgSW5zdHJ1bWVudGVkQ29udmVydGli
bGVUb0ludCgpKSk7CiAgICAgICAgIHZhbHVlc1ZlY3Rvci5hcHBlbmQoYWRvcHRQdHIobmV3IE5v
dEluc3RydW1lbnRlZCgpKSk7Ci0gICAgICAgIHZhbHVlLT5zZXQoa2V5c1ZlY3RvcltpXS5nZXQo
KSwgSW5zdHJ1bWVudGVkQ29udmVydGlibGVUb0ludCgpKS5pdGVyYXRvci0+c2Vjb25kLm1fbm90
SW5zdHJ1bWVudGVkID0gdmFsdWVzVmVjdG9yW2ldLmdldCgpOworICAgICAgICB2YWx1ZS0+c2V0
KGtleXNWZWN0b3JbaV0uZ2V0KCksIEluc3RydW1lbnRlZENvbnZlcnRpYmxlVG9JbnQoKSkuaXRl
cmF0b3ItPnZhbHVlLm1fbm90SW5zdHJ1bWVudGVkID0gdmFsdWVzVmVjdG9yW2ldLmdldCgpOwog
ICAgIH0KICAgICBJbnN0cnVtZW50ZWRPd25lcjxUZXN0TWFwKiA+IHJvb3QodmFsdWUuZ2V0KCkp
OwogICAgIGhlbHBlci5hZGRSb290T2JqZWN0KHJvb3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9XZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyVGVzdC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNo
ZXJUZXN0LmNwcAppbmRleCA3MGYyMWFlOWMwNDllM2U0N2Y4YzMwYTUzYjE5NjljNzVlODk2Y2M5
Li41MjkwNWJhYjFkNTY3ZDZkMGM0Njc0NGJiZjIwNGNhMmZkMGYyY2U1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXJU
ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYlNvY2tldEV4dGVu
c2lvbkRpc3BhdGNoZXJUZXN0LmNwcApAQCAtMTA1LDEwICsxMDUsMTAgQEAgVEVTVF9GKFdlYlNv
Y2tldEV4dGVuc2lvbkRpc3BhdGNoZXJUZXN0LCBUZXN0UGFyYW1ldGVycykKICAgICBFWFBFQ1Rf
RVEoMiwgbV9wYXJzZWRQYXJhbWV0ZXJzWzBdLnNpemUoKSk7CiAgICAgSGFzaE1hcDxTdHJpbmcs
IFN0cmluZz46Oml0ZXJhdG9yIHBhcmFtZXRlciA9IG1fcGFyc2VkUGFyYW1ldGVyc1swXS5maW5k
KCJtYXgtY2hhbm5lbHMiKTsKICAgICBFWFBFQ1RfVFJVRShwYXJhbWV0ZXIgIT0gbV9wYXJzZWRQ
YXJhbWV0ZXJzWzBdLmVuZCgpKTsKLSAgICBFWFBFQ1RfRVEoIjQiLCBwYXJhbWV0ZXItPnNlY29u
ZCk7CisgICAgRVhQRUNUX0VRKCI0IiwgcGFyYW1ldGVyLT52YWx1ZSk7CiAgICAgcGFyYW1ldGVy
ID0gbV9wYXJzZWRQYXJhbWV0ZXJzWzBdLmZpbmQoImZsb3ctY29udHJvbCIpOwogICAgIEVYUEVD
VF9UUlVFKHBhcmFtZXRlciAhPSBtX3BhcnNlZFBhcmFtZXRlcnNbMF0uZW5kKCkpOwotICAgIEVY
UEVDVF9UUlVFKHBhcmFtZXRlci0+c2Vjb25kLmlzTnVsbCgpKTsKKyAgICBFWFBFQ1RfVFJVRShw
YXJhbWV0ZXItPnZhbHVlLmlzTnVsbCgpKTsKIH0KIAogVEVTVF9GKFdlYlNvY2tldEV4dGVuc2lv
bkRpc3BhdGNoZXJUZXN0LCBUZXN0TXVsdGlwbGUpCkBAIC0xMzMsMTIgKzEzMywxMiBAQCBURVNU
X0YoV2ViU29ja2V0RXh0ZW5zaW9uRGlzcGF0Y2hlclRlc3QsIFRlc3RNdWx0aXBsZSkKICAgICAg
ICAgY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIHBhcnNlZFBhcmFtZXRlcnMgPSBtX3Bh
cnNlZFBhcmFtZXRlcnNbaV07CiAgICAgICAgIEVYUEVDVF9FUShleHBlY3RlZFtpXS5wYXJhbWV0
ZXJzLnNpemUoKSwgbV9wYXJzZWRQYXJhbWV0ZXJzW2ldLnNpemUoKSk7CiAgICAgICAgIGZvciAo
SGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ZXJhdG9yID0gZXhwZWN0
ZWRQYXJhbWV0ZXJzLmJlZ2luKCk7IGl0ZXJhdG9yICE9IGV4cGVjdGVkUGFyYW1ldGVycy5lbmQo
KTsgKytpdGVyYXRvcikgewotICAgICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNv
bnN0X2l0ZXJhdG9yIHBhcnNlZCA9IHBhcnNlZFBhcmFtZXRlcnMuZmluZChpdGVyYXRvci0+Zmly
c3QpOworICAgICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9y
IHBhcnNlZCA9IHBhcnNlZFBhcmFtZXRlcnMuZmluZChpdGVyYXRvci0+a2V5KTsKICAgICAgICAg
ICAgIEVYUEVDVF9UUlVFKHBhcnNlZCAhPSBwYXJzZWRQYXJhbWV0ZXJzLmVuZCgpKTsKLSAgICAg
ICAgICAgIGlmIChpdGVyYXRvci0+c2Vjb25kLmlzTnVsbCgpKQotICAgICAgICAgICAgICAgIEVY
UEVDVF9UUlVFKHBhcnNlZC0+c2Vjb25kLmlzTnVsbCgpKTsKKyAgICAgICAgICAgIGlmIChpdGVy
YXRvci0+dmFsdWUuaXNOdWxsKCkpCisgICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUocGFyc2Vk
LT52YWx1ZS5pc051bGwoKSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgRVhQ
RUNUX0VRKGl0ZXJhdG9yLT5zZWNvbmQsIHBhcnNlZC0+c2Vjb25kKTsKKyAgICAgICAgICAgICAg
ICBFWFBFQ1RfRVEoaXRlcmF0b3ItPnZhbHVlLCBwYXJzZWQtPnZhbHVlKTsKICAgICAgICAgfQog
ICAgIH0KIH0KQEAgLTE4Niw3ICsxODYsNyBAQCBURVNUX0YoV2ViU29ja2V0RXh0ZW5zaW9uRGlz
cGF0Y2hlclRlc3QsIFRlc3RQZXJNZXNzYWdlQ29tcHJlc3NFeGFtcGxlKQogICAgIEVYUEVDVF9U
UlVFKG1fZXh0ZW5zaW9ucy5wcm9jZXNzSGVhZGVyVmFsdWUoInBlcm1lc3NhZ2UtY29tcHJlc3M7
IG1ldGhvZD1cImZvbzsgeD1cXFwiSGVsbG8gV29ybGRcXFwiLCBiYXJcIiIpKTsKICAgICBFWFBF
Q1RfRVEoMVUsIG1fcGFyc2VkRXh0ZW5zaW9uVG9rZW5zLnNpemUoKSk7CiAgICAgRVhQRUNUX0VR
KCJwZXJtZXNzYWdlLWNvbXByZXNzIiwgbV9wYXJzZWRFeHRlbnNpb25Ub2tlbnNbMF0pOwotICAg
IFN0cmluZyBtZXRob2RQYXJhbWV0ZXIgPSBtX3BhcnNlZFBhcmFtZXRlcnNbMF0uZmluZCgibWV0
aG9kIiktPnNlY29uZDsKKyAgICBTdHJpbmcgbWV0aG9kUGFyYW1ldGVyID0gbV9wYXJzZWRQYXJh
bWV0ZXJzWzBdLmZpbmQoIm1ldGhvZCIpLT52YWx1ZTsKICAgICBFWFBFQ1RfRVEoImZvbzsgeD1c
IkhlbGxvIFdvcmxkXCIsIGJhciIsIG1ldGhvZFBhcmFtZXRlcik7CiAKICAgICBDU3RyaW5nIG1l
dGhvZFZhbHVlID0gbWV0aG9kUGFyYW1ldGVyLmFzY2lpKCk7CkBAIC0xOTgsOCArMTk4LDggQEAg
VEVTVF9GKFdlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXJUZXN0LCBUZXN0UGVyTWVzc2FnZUNv
bXByZXNzRXhhbXBsZSkKICAgICBFWFBFQ1RfRVEoImZvbyIsIHRva2VuMSk7CiAgICAgRVhQRUNU
X0VRKDEsIHBhcmFtZXRlcnMxLnNpemUoKSk7CiAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46
Oml0ZXJhdG9yIHhwYXJhbWV0ZXIgPSBwYXJhbWV0ZXJzMS5maW5kKCJ4Iik7Ci0gICAgRVhQRUNU
X0VRKCJ4IiwgeHBhcmFtZXRlci0+Zmlyc3QpOwotICAgIEVYUEVDVF9FUSgiSGVsbG8gV29ybGQi
LCB4cGFyYW1ldGVyLT5zZWNvbmQpOworICAgIEVYUEVDVF9FUSgieCIsIHhwYXJhbWV0ZXItPmtl
eSk7CisgICAgRVhQRUNUX0VRKCJIZWxsbyBXb3JsZCIsIHhwYXJhbWV0ZXItPnZhbHVlKTsKIAog
ICAgIFN0cmluZyB0b2tlbjI7CiAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gcGFyYW1ldGVy
czI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVu
ZGVyVHJlZVN1cHBvcnRFZmwuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQv
RHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsLmNwcAppbmRleCBjNGE3M2Y4NmQyMDlhYmVhZTQ4NjVh
MzI0YjY4MWVkNTcyZjc0NTMzLi41MjhkMmM3YjQzMTZlMGQ3OWY4OGEzZWFkM2MxNTIwZjQwN2E3
NzAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVu
ZGVyVHJlZVN1cHBvcnRFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBw
b3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbC5jcHAKQEAgLTQ4NSw3ICs0ODUsNyBAQCB2b2lk
IER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQo
Y29uc3QgRXZhc19PYmplY3QqCiAgICAgZWxzZSB7CiAgICAgICAgIFdURjo6SGFzaE1hcDxpbnQs
IFJlZlB0cjxXZWJDb3JlOjpET01XcmFwcGVyV29ybGQgPiA+Ojpjb25zdF9pdGVyYXRvciBpdCA9
IHdvcmxkTWFwLmZpbmQod29ybGRJRCk7CiAgICAgICAgIGlmIChpdCAhPSB3b3JsZE1hcC5lbmQo
KSkKLSAgICAgICAgICAgIHNjcmlwdFdvcmxkID0gKCppdCkuc2Vjb25kOworICAgICAgICAgICAg
c2NyaXB0V29ybGQgPSAoKml0KS52YWx1ZTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBz
Y3JpcHRXb3JsZCA9IFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmNyZWF0ZVdvcmxkKCk7CiAg
ICAgICAgICAgICB3b3JsZE1hcC5zZXQod29ybGRJRCwgc2NyaXB0V29ybGQpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzRWZs
LmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2ll
c0VmbC5jcHAKaW5kZXggNzkzYmYzOGY1YzEyZDNmNjlhNWVjMjRkMDVjODFmZjA2MGQ2YjQ1My4u
YzI2MjA4NWMzNDkzNWM2NmZlZTdlMGMzN2NjMTUxYTQ4ZGMzOGQxMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzRWZsLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNF
ZmwuY3BwCkBAIC05OSw4ICs5OSw4IEBAIHZvaWQgUGxhdGZvcm1TdHJhdGVnaWVzRWZsOjpnZXRQ
bHVnaW5JbmZvKGNvbnN0IFBhZ2UqLCBWZWN0b3I8UGx1Z2luSW5mbz4mIG91dFBsCiAgICAgICAg
IGZvciAoTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1pbWVUb0Rl
c2NyaXB0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIE1pbWVD
bGFzc0luZm8gbWltZTsKIAotICAgICAgICAgICAgbWltZS50eXBlID0gaXQtPmZpcnN0OwotICAg
ICAgICAgICAgbWltZS5kZXNjID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIG1pbWUudHlwZSA9
IGl0LT5rZXk7CisgICAgICAgICAgICBtaW1lLmRlc2MgPSBpdC0+dmFsdWU7CiAgICAgICAgICAg
ICBtaW1lLmV4dGVuc2lvbnMgPSBwYWNrYWdlLT5taW1lVG9FeHRlbnNpb25zKCkuZ2V0KG1pbWUu
dHlwZSk7CiAgICAgICAgICAgICBwbHVnaW5JbmZvLm1pbWVzLmFwcGVuZChtaW1lKTsKICAgICAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19pbnRlbnQuY3BwIGIv
U291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19pbnRlbnQuY3BwCmluZGV4IDc2YzJkNjhkYWE3MjEy
NGVhNWI2MWI3ZTI0ZjAzNGMyYzBjZGI4MWUuLjgzYmNlODc2NGFmNmFkNzk3NDQzNjkyZjUzOTZl
M2JhYWIzNTU4OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfaW50ZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2ludGVudC5jcHAKQEAgLTEyMCw3
ICsxMjAsNyBAQCBjb25zdCBjaGFyKiBld2tfaW50ZW50X2V4dHJhX2dldChjb25zdCBFd2tfSW50
ZW50KiBpbnRlbnQsIGNvbnN0IGNoYXIqIGtleSkKICAgICBXVEY6Okhhc2hNYXA8U3RyaW5nLCBT
dHJpbmc+Ojpjb25zdF9pdGVyYXRvciB2YWwgPSBjb3JlLT5leHRyYXMoKS5maW5kKFN0cmluZzo6
ZnJvbVVURjgoa2V5KSk7CiAgICAgaWYgKHZhbCA9PSBjb3JlLT5leHRyYXMoKS5lbmQoKSkKICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGVpbmFfc3RyaW5nc2hhcmVfYWRkKHZhbC0+c2Vj
b25kLnV0ZjgoKS5kYXRhKCkpOworICAgIHJldHVybiBlaW5hX3N0cmluZ3NoYXJlX2FkZCh2YWwt
PnZhbHVlLnV0ZjgoKS5kYXRhKCkpOwogI2Vsc2UKICAgICByZXR1cm4gMDsKICNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVn
aWVzR3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3Ry
YXRlZ2llc0d0ay5jcHAKaW5kZXggMjkyMTczYWUyOTJmNTEyMTE4N2U4YmU1MDUwMzkzZDdjMzM4
NGM1YS4uOTEwM2M4NDYwOTRkNTFmOGY1Yjk0ODc0Y2Q2N2FmMDQ3OTkwOWFlMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzR3Rr
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0
ZWdpZXNHdGsuY3BwCkBAIC04OCw4ICs4OCw4IEBAIHZvaWQgUGxhdGZvcm1TdHJhdGVnaWVzR3Rr
OjpnZXRQbHVnaW5JbmZvKGNvbnN0IFBhZ2UqIHBhZ2UsIFZlY3RvcjxQbHVnaW5JbmZvPiYKICAg
ICAgICAgTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtaW1lVG9E
ZXNjcmlwdGlvbnMuZW5kKCk7CiAgICAgICAgIGZvciAoTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKICAgICAgICAgICAgIE1pbWVDbGFzc0luZm8gbWltZTsKLSAgICAgICAgICAgIG1p
bWUudHlwZSA9IGl0LT5maXJzdDsKLSAgICAgICAgICAgIG1pbWUuZGVzYyA9IGl0LT5zZWNvbmQ7
CisgICAgICAgICAgICBtaW1lLnR5cGUgPSBpdC0+a2V5OworICAgICAgICAgICAgbWltZS5kZXNj
ID0gaXQtPnZhbHVlOwogICAgICAgICAgICAgbWltZS5leHRlbnNpb25zID0gcGFja2FnZS0+bWlt
ZVRvRXh0ZW5zaW9ucygpLmdldChtaW1lLnR5cGUpOwogICAgICAgICAgICAgcGx1Z2luSW5mby5t
aW1lcy5hcHBlbmQobWltZSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXRmYXZpY29uZGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdGZhdmljb25kYXRhYmFzZS5jcHAKaW5kZXggYzYyYWIzN2YxYmNhNTVmOGMz
ZTlhYzY0ZDMwMzAyYTM3Y2Y1ODAyZi4uZDc3NDE5YWU4MjMxYjQ2OWFkY2U2ZWFmNGU3YTZmMmFm
OTg1NDVlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGZhdmlj
b25kYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGZhdmlj
b25kYXRhYmFzZS5jcHAKQEAgLTYxMywxOCArNjEzLDE4IEBAIHN0YXRpYyB2b2lkIHdlYmtpdEZh
dmljb25EYXRhYmFzZUltcG9ydEZpbmlzaGVkKFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJh
c2UpCiAgICAgVmVjdG9yPFN0cmluZz4gdG9EZWxldGVVUkxzOwogICAgIFBlbmRpbmdJY29uUmVx
dWVzdE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gZGF0YWJhc2UtPnByaXYtPnBlbmRpbmdJY29u
UmVxdWVzdHMuZW5kKCk7CiAgICAgZm9yIChQZW5kaW5nSWNvblJlcXVlc3RNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ZXIgPSBkYXRhYmFzZS0+cHJpdi0+cGVuZGluZ0ljb25SZXF1ZXN0cy5iZWdpbigp
OyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0gICAgICAgIFN0cmluZyBpY29uVVJMID0gaWNvbkRh
dGFiYXNlKCkuc3luY2hyb25vdXNJY29uVVJMRm9yUGFnZVVSTChpdGVyLT5maXJzdCk7CisgICAg
ICAgIFN0cmluZyBpY29uVVJMID0gaWNvbkRhdGFiYXNlKCkuc3luY2hyb25vdXNJY29uVVJMRm9y
UGFnZVVSTChpdGVyLT5rZXkpOwogICAgICAgICBpZiAoIWljb25VUkwuaXNFbXB0eSgpKQogICAg
ICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgUGVuZGluZ0ljb25SZXF1ZXN0VmVjdG9yKiBp
Y29ucyA9IGl0ZXItPnNlY29uZDsKKyAgICAgICAgUGVuZGluZ0ljb25SZXF1ZXN0VmVjdG9yKiBp
Y29ucyA9IGl0ZXItPnZhbHVlOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGljb25z
LT5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgUGVuZGluZ0ljb25SZXF1ZXN0KiByZXF1ZXN0
ID0gaWNvbnMtPmF0KGkpLmdldCgpOwogICAgICAgICAgICAgaWYgKHJlcXVlc3QtPmFzeW5jUmVz
dWx0KCkpCiAgICAgICAgICAgICAgICAgcmVxdWVzdC0+YXN5bmNSZXN1bHRDb21wbGV0ZSgwKTsK
ICAgICAgICAgfQogCi0gICAgICAgIHRvRGVsZXRlVVJMcy5hcHBlbmQoaXRlci0+Zmlyc3QpOwor
ICAgICAgICB0b0RlbGV0ZVVSTHMuYXBwZW5kKGl0ZXItPmtleSk7CiAgICAgfQogCiAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCB0b0RlbGV0ZVVSTHMuc2l6ZSgpOyArK2kpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2VicGx1Z2luLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJwbHVnaW4uY3BwCmluZGV4IGUwM2IxZWE2ZGEzM2I3
ZTJmMDAyMjU1Y2U4Nzc3ODYyNGNkYTcwOGMuLjAxZDBiYjVmMmJmZDcwMGY2YjNjOWZjNGY4ZTQy
MGM1NzI0ODZlYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3
ZWJwbHVnaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJwbHVn
aW4uY3BwCkBAIC0yMzcsMTAgKzIzNywxMCBAQCBHU0xpc3QqIHdlYmtpdF93ZWJfcGx1Z2luX2dl
dF9taW1ldHlwZXMoV2ViS2l0V2ViUGx1Z2luKiBwbHVnaW4pCiAKICAgICBmb3IgKE1JTUVUb0Rl
c2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIFdlYktpdFdlYlBsdWdpbk1JTUVUeXBl
KiBtaW1lVHlwZSA9IGdfc2xpY2VfbmV3MChXZWJLaXRXZWJQbHVnaW5NSU1FVHlwZSk7Ci0gICAg
ICAgIG1pbWVUeXBlLT5uYW1lID0gZ19zdHJkdXAoaXQtPmZpcnN0LnV0ZjgoKS5kYXRhKCkpOwot
ICAgICAgICBtaW1lVHlwZS0+ZGVzY3JpcHRpb24gPSBnX3N0cmR1cChpdC0+c2Vjb25kLnV0Zjgo
KS5kYXRhKCkpOworICAgICAgICBtaW1lVHlwZS0+bmFtZSA9IGdfc3RyZHVwKGl0LT5rZXkudXRm
OCgpLmRhdGEoKSk7CisgICAgICAgIG1pbWVUeXBlLT5kZXNjcmlwdGlvbiA9IGdfc3RyZHVwKGl0
LT52YWx1ZS51dGY4KCkuZGF0YSgpKTsKIAotICAgICAgICBWZWN0b3I8U3RyaW5nPiBleHRlbnNp
b25zID0gcHJpdi0+Y29yZVBsdWdpbi0+bWltZVRvRXh0ZW5zaW9ucygpLmdldChpdC0+Zmlyc3Qp
OworICAgICAgICBWZWN0b3I8U3RyaW5nPiBleHRlbnNpb25zID0gcHJpdi0+Y29yZVBsdWdpbi0+
bWltZVRvRXh0ZW5zaW9ucygpLmdldChpdC0+a2V5KTsKICAgICAgICAgbWltZVR5cGUtPmV4dGVu
c2lvbnMgPSBzdGF0aWNfY2FzdDxnY2hhcioqPihnX21hbGxvYzAoc2l6ZW9mKGNoYXIqKSAqIChl
eHRlbnNpb25zLnNpemUoKSArIDEpKSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBleHRlbnNpb25zLnNpemUoKTsgaSsrKQogICAgICAgICAgICAgbWltZVR5cGUtPmV4dGVuc2lv
bnNbaV0gPSBnX3N0cmR1cChleHRlbnNpb25zW2ldLnV0ZjgoKS5kYXRhKCkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9tYWMvSGlzdG9yeS9XZWJIaXN0b3J5Lm1tIGIvU291cmNlL1dlYktp
dC9tYWMvSGlzdG9yeS9XZWJIaXN0b3J5Lm1tCmluZGV4IDY5NjRmYzk0OWI1MTIxNzNhNmJkYzVl
NzBiNTYxOGQzMWNiNjc3YTMuLmU3ODFkMzJmZDFkZTk1MGQ5MTRhZjQ4MzQ5NzY0MjBkZjU4N2Rh
ZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL0hpc3RvcnkvV2ViSGlzdG9yeS5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0L21hYy9IaXN0b3J5L1dlYkhpc3RvcnkubW0KQEAgLTIzOCw3ICsy
MzgsNyBAQCBzdGF0aWMgaW5saW5lIFdlYkhpc3RvcnlEYXRlS2V5IGRhdGVLZXkoTlNUaW1lSW50
ZXJ2YWwgZGF0ZSkKICAgICAgICAgcmV0dXJuIE5POwogCiAgICAgRGF0ZVRvRW50cmllc01hcDo6
aXRlcmF0b3IgaXQgPSBfZW50cmllc0J5RGF0ZS0+ZmluZChkYXRlS2V5KTsKLSAgICBOU011dGFi
bGVBcnJheSAqZW50cmllc0ZvckRhdGUgPSBpdC0+c2Vjb25kLmdldCgpOworICAgIE5TTXV0YWJs
ZUFycmF5ICplbnRyaWVzRm9yRGF0ZSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICBbZW50cmllc0Zv
ckRhdGUgcmVtb3ZlT2JqZWN0SWRlbnRpY2FsVG86ZW50cnldOwogICAgIAogICAgIC8vIHJlbW92
ZSB0aGlzIGRhdGUgZW50aXJlbHkgaWYgdGhlcmUgYXJlIG5vIG90aGVyIGVudHJpZXMgb24gaXQK
QEAgLTQ0MCw3ICs0NDAsNyBAQCBzdGF0aWMgaW5saW5lIFdlYkhpc3RvcnlEYXRlS2V5IGRhdGVL
ZXkoTlNUaW1lSW50ZXJ2YWwgZGF0ZSkKICAgICAgICAgZGF5c0FzVGltZUludGVydmFscy5yZXNl
cnZlQ2FwYWNpdHkoX2VudHJpZXNCeURhdGUtPnNpemUoKSk7CiAgICAgICAgIERhdGVUb0VudHJp
ZXNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IF9lbnRyaWVzQnlEYXRlLT5lbmQoKTsKICAgICAg
ICAgZm9yIChEYXRlVG9FbnRyaWVzTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IF9lbnRyaWVzQnlE
YXRlLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBkYXlzQXNUaW1lSW50
ZXJ2YWxzLmFwcGVuZChpdC0+Zmlyc3QpOworICAgICAgICAgICAgZGF5c0FzVGltZUludGVydmFs
cy5hcHBlbmQoaXQtPmtleSk7CiAKICAgICAgICAgc29ydChkYXlzQXNUaW1lSW50ZXJ2YWxzLmJl
Z2luKCksIGRheXNBc1RpbWVJbnRlcnZhbHMuZW5kKCkpOwogICAgICAgICBzaXplX3QgY291bnQg
PSBkYXlzQXNUaW1lSW50ZXJ2YWxzLnNpemUoKTsKQEAgLTg5Nyw3ICs4OTcsNyBAQCBXZWJIaXN0
b3J5V3JpdGVyOjpXZWJIaXN0b3J5V3JpdGVyKERhdGVUb0VudHJpZXNNYXAqIGVudHJpZXNCeURh
dGUpCiAgICAgbV9kYXRlS2V5cy5yZXNlcnZlQ2FwYWNpdHkobV9lbnRyaWVzQnlEYXRlLT5zaXpl
KCkpOwogICAgIERhdGVUb0VudHJpZXNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fZW50cmll
c0J5RGF0ZS0+ZW5kKCk7CiAgICAgZm9yIChEYXRlVG9FbnRyaWVzTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fZW50cmllc0J5RGF0ZS0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAg
ICBtX2RhdGVLZXlzLmFwcGVuZChpdC0+Zmlyc3QpOworICAgICAgICBtX2RhdGVLZXlzLmFwcGVu
ZChpdC0+a2V5KTsKICAgICBzb3J0KG1fZGF0ZUtleXMuYmVnaW4oKSwgbV9kYXRlS2V5cy5lbmQo
KSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViQ29yZVN0YXRp
c3RpY3MubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tCmlu
ZGV4IDI5NmRkNmIyNWJkOGJkYjc3YTNjNjgwZTEzMjRlNWIzOTdkMjY2YzMuLjhkZTYzMTM5Yjc3
NDM3NmJiZDFmN2MxMTA2ZjZlZWRiZGQzZTViMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
bWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvTWlz
Yy9XZWJDb3JlU3RhdGlzdGljcy5tbQpAQCAtODksOCArODksOCBAQCB1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKICAgICBPd25QdHI8VHlwZUNvdW50U2V0PiBjb3VudHMoSlNET01XaW5kb3c6OmNv
bW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLnByb3RlY3RlZE9iamVjdFR5cGVDb3VudHMoKSk7CiAg
ICAgSGFzaENvdW50ZWRTZXQ8Y29uc3QgY2hhcio+OjppdGVyYXRvciBlbmQgPSBjb3VudHMtPmVu
ZCgpOwogICAgIGZvciAoSGFzaENvdW50ZWRTZXQ8Y29uc3QgY2hhcio+OjppdGVyYXRvciBpdCA9
IGNvdW50cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgaXQtPnNlY29uZDsgKytpKQotICAgICAgICAgICAgW3Jlc3VsdCBhZGRPYmpl
Y3Q6W05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOml0LT5maXJzdF1dOworICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXQtPnZhbHVlOyArK2kpCisgICAgICAgICAgICBbcmVz
dWx0IGFkZE9iamVjdDpbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6aXQtPmtleV1dOwog
ICAgIAogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0xMDQsOCArMTA0LDggQEAgdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CiAgICAgT3duUHRyPFR5cGVDb3VudFNldD4gY291bnRzKEpTRE9NV2lu
ZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5vYmplY3RUeXBlQ291bnRzKCkpOwogICAg
IEhhc2hDb3VudGVkU2V0PGNvbnN0IGNoYXIqPjo6aXRlcmF0b3IgZW5kID0gY291bnRzLT5lbmQo
KTsKICAgICBmb3IgKEhhc2hDb3VudGVkU2V0PGNvbnN0IGNoYXIqPjo6aXRlcmF0b3IgaXQgPSBj
b3VudHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGl0LT5zZWNvbmQ7ICsraSkKLSAgICAgICAgICAgIFtyZXN1bHQgYWRkT2JqZWN0
OltOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzppdC0+Zmlyc3RdXTsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0LT52YWx1ZTsgKytpKQorICAgICAgICAgICAgW3Jlc3Vs
dCBhZGRPYmplY3Q6W05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOml0LT5rZXldXTsKICAg
ICAKICAgICByZXR1cm4gcmVzdWx0OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMv
UGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlci5tbSBiL1NvdXJjZS9XZWJL
aXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXIubW0KaW5kZXgg
ZTE0NGE4YzZmNTE2OWM1ZTBlYmU5ZDA1ZDVkN2U3NDkzODExYTEyMC4uNDczMmQyM2Q5OTgzZDMx
YTIyZGNiZmM2NDc3ZDhkNGY0OTcwZmJiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMv
UGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlci5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyLm1tCkBA
IC03Myw3ICs3Myw3IEBAIE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5KiBOZXRzY2FwZVBsdWdpbkhv
c3RNYW5hZ2VyOjpob3N0Rm9yUGx1Z2luKGNvbnN0IFdURjo6U3RyCiAgICAgCiAgICAgLy8gVGhl
IHBhY2thZ2Ugd2FzIGFscmVhZHkgaW4gdGhlIG1hcCwganVzdCByZXR1cm4gaXQuCiAgICAgaWYg
KCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+c2Vj
b25kOworICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgCiAg
ICAgbWFjaF9wb3J0X3QgY2xpZW50UG9ydDsKICAgICBpZiAobWFjaF9wb3J0X2FsbG9jYXRlKG1h
Y2hfdGFza19zZWxmKCksIE1BQ0hfUE9SVF9SSUdIVF9SRUNFSVZFLCAmY2xpZW50UG9ydCkgIT0g
S0VSTl9TVUNDRVNTKSB7CkBAIC05NSw3ICs5NSw3IEBAIE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5
KiBOZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyOjpob3N0Rm9yUGx1Z2luKGNvbnN0IFdURjo6U3Ry
CiAgICAgCiAgICAgTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkqIGhvc3RQcm94eSA9IG5ldyBOZXRz
Y2FwZVBsdWdpbkhvc3RQcm94eShjbGllbnRQb3J0LCBwbHVnaW5Ib3N0UG9ydCwgcGx1Z2luSG9z
dFBTTiwgc2hvdWxkQ2FjaGVNaXNzaW5nUHJvcGVydGllc0FuZE1ldGhvZHMpOwogICAgIAotICAg
IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gaG9zdFByb3h5OworICAgIHJlc3VsdC5pdGVyYXRv
ci0+dmFsdWUgPSBob3N0UHJveHk7CiAgICAgCiAgICAgcmV0dXJuIGhvc3RQcm94eTsKIH0KQEAg
LTIxMiw3ICsyMTIsNyBAQCB2b2lkIE5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXI6OnBsdWdpbkhv
c3REaWVkKE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5KiBwbHVnaW5IbwogCiAgICAgLy8gVGhpcyBo
YXMgTyhuKSBjb21wbGV4aXR5IGJ1dCB0aGUgbnVtYmVyIG9mIGFjdGl2ZSBwbHVnLWluIGhvc3Rz
IGlzIHZlcnkgc21hbGwgc28gaXQgc2hvdWxkbid0IG1hdHRlci4KICAgICBmb3IgKFBsdWdpbkhv
c3RNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wbHVnaW5Ib3N0cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQgPT0gcGx1Z2luSG9zdCkgeworICAgICAgICBp
ZiAoaXQtPnZhbHVlID09IHBsdWdpbkhvc3QpIHsKICAgICAgICAgICAgIG1fcGx1Z2luSG9zdHMu
cmVtb3ZlKGl0KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMjk0LDcgKzI5
NCw3IEBAIHZvaWQgTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlcjo6ZGlkQ3JlYXRlV2luZG93KCkK
ICAgICAvLyBTZWUgaWYgYW55IG9mIG91ciBob3N0cyBhcmUgaW4gZnVsbC1zY3JlZW4gbW9kZS4K
ICAgICBQbHVnaW5Ib3N0TWFwOjppdGVyYXRvciBlbmQgPSBtX3BsdWdpbkhvc3RzLmVuZCgpOwog
ICAgIGZvciAoUGx1Z2luSG9zdE1hcDo6aXRlcmF0b3IgaXQgPSBtX3BsdWdpbkhvc3RzLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBOZXRzY2FwZVBsdWdpbkhvc3RQcm94eSog
aG9zdFByb3h5ID0gaXQtPnNlY29uZDsKKyAgICAgICAgTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkq
IGhvc3RQcm94eSA9IGl0LT52YWx1ZTsKICAgICAgICAgCiAgICAgICAgIGlmICghaG9zdFByb3h5
LT5pc01lbnVCYXJWaXNpYmxlKCkpIHsKICAgICAgICAgICAgIC8vIE1ha2Ugb3Vyc2VsdmVzIHRo
ZSBmcm9udCBwcm9jZXNzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9I
b3N0ZWQvTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9QbHVn
aW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkhvc3RQcm94eS5tbQppbmRleCBlYTA0MGZmY2M4YjFj
ZjJmMTEyN2ViNzNkNzBjZDFhYjQ4ZTQ0ODNkLi44YzRkNTQwYjdjZjBmODdjYTI1YmJmMjlkYjVm
NTczNThmZTllODM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3Rl
ZC9OZXRzY2FwZVBsdWdpbkhvc3RQcm94eS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9QbHVn
aW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkhvc3RQcm94eS5tbQpAQCAtMTQ0LDcgKzE0NCw3IEBA
IHZvaWQgTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHk6OnBsdWdpbkhvc3REaWVkKCkKICAgCiAgICAg
UGx1Z2luSW5zdGFuY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGluc3RhbmNlcy5lbmQoKTsK
ICAgICBmb3IgKFBsdWdpbkluc3RhbmNlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGluc3RhbmNl
cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPnBsdWdpbkhv
c3REaWVkKCk7CisgICAgICAgIGl0LT52YWx1ZS0+cGx1Z2luSG9zdERpZWQoKTsKICAgICAKICAg
ICBOZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyOjpzaGFyZWQoKS5wbHVnaW5Ib3N0RGllZCh0aGlz
KTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05l
dHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMv
SG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5tbQppbmRleCA5MTY1NmQ4NDcwY2Ji
ZWQ0ZDE3Njc2YjZlZTNjNTk3ZDQ1NzE3ZTUwLi43N2RiMTQ4OWIzYzk0NGJhY2Y1YTY4MGIxZmZk
YzhiZDgxYmI4ZTJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3Rl
ZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMv
UGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tCkBAIC0xNDUsNyAr
MTQ1LDcgQEAgdWludDMyX3QgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpMb2NhbE9iamVj
dE1hcDo6aWRGb3JPYmplY3QoSlNHbG9iYWxEYXRhJgogICAgIAogICAgIEhhc2hNYXA8SlNDOjpK
U09iamVjdCosIHBhaXI8dWludDMyX3QsIHVpbnQzMl90PiA+OjppdGVyYXRvciBpdGVyID0gbV9q
c09iamVjdFRvSURNYXAuZmluZChvYmplY3QpOwogICAgIGlmIChpdGVyICE9IG1fanNPYmplY3RU
b0lETWFwLmVuZCgpKQotICAgICAgICByZXR1cm4gaXRlci0+c2Vjb25kLmZpcnN0OworICAgICAg
ICByZXR1cm4gaXRlci0+dmFsdWUuZmlyc3Q7CiAgICAgCiAgICAgZG8gewogICAgICAgICBvYmpl
Y3RJRCA9ICsrbV9vYmplY3RJRENvdW50ZXI7CkBAIC0xNjIsNyArMTYyLDcgQEAgdm9pZCBOZXRz
Y2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OkxvY2FsT2JqZWN0TWFwOjpyZXRhaW4oSlNDOjpKU09i
amVjdCogb2JqZWN0KQogICAgIEhhc2hNYXA8SlNDOjpKU09iamVjdCosIHBhaXI8dWludDMyX3Qs
IHVpbnQzMl90PiA+OjppdGVyYXRvciBpdGVyID0gbV9qc09iamVjdFRvSURNYXAuZmluZChvYmpl
Y3QpOwogICAgIEFTU0VSVChpdGVyICE9IG1fanNPYmplY3RUb0lETWFwLmVuZCgpKTsKIAotICAg
IGl0ZXItPnNlY29uZC5zZWNvbmQgPSBpdGVyLT5zZWNvbmQuc2Vjb25kICsgMTsKKyAgICBpdGVy
LT52YWx1ZS5zZWNvbmQgPSBpdGVyLT52YWx1ZS5zZWNvbmQgKyAxOwogfQogCiB2b2lkIE5ldHNj
YXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6TG9jYWxPYmplY3RNYXA6OnJlbGVhc2UoSlNDOjpKU09i
amVjdCogb2JqZWN0KQpAQCAtMTcwLDEwICsxNzAsMTAgQEAgdm9pZCBOZXRzY2FwZVBsdWdpbklu
c3RhbmNlUHJveHk6OkxvY2FsT2JqZWN0TWFwOjpyZWxlYXNlKEpTQzo6SlNPYmplY3QqIG9iamVj
dCkKICAgICBIYXNoTWFwPEpTQzo6SlNPYmplY3QqLCBwYWlyPHVpbnQzMl90LCB1aW50MzJfdD4g
Pjo6aXRlcmF0b3IgaXRlciA9IG1fanNPYmplY3RUb0lETWFwLmZpbmQob2JqZWN0KTsKICAgICBB
U1NFUlQoaXRlciAhPSBtX2pzT2JqZWN0VG9JRE1hcC5lbmQoKSk7CiAKLSAgICBBU1NFUlQoaXRl
ci0+c2Vjb25kLnNlY29uZCA+IDApOwotICAgIGl0ZXItPnNlY29uZC5zZWNvbmQgPSBpdGVyLT5z
ZWNvbmQuc2Vjb25kIC0gMTsKLSAgICBpZiAoIWl0ZXItPnNlY29uZC5zZWNvbmQpIHsKLSAgICAg
ICAgbV9pZFRvSlNPYmplY3RNYXAucmVtb3ZlKGl0ZXItPnNlY29uZC5maXJzdCk7CisgICAgQVNT
RVJUKGl0ZXItPnZhbHVlLnNlY29uZCA+IDApOworICAgIGl0ZXItPnZhbHVlLnNlY29uZCA9IGl0
ZXItPnZhbHVlLnNlY29uZCAtIDE7CisgICAgaWYgKCFpdGVyLT52YWx1ZS5zZWNvbmQpIHsKKyAg
ICAgICAgbV9pZFRvSlNPYmplY3RNYXAucmVtb3ZlKGl0ZXItPnZhbHVlLmZpcnN0KTsKICAgICAg
ICAgbV9qc09iamVjdFRvSURNYXAucmVtb3ZlKGl0ZXIpOwogICAgIH0KIH0KQEAgLTE5NywxMCAr
MTk3LDEwIEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpMb2NhbE9iamVjdE1h
cDo6Zm9yZ2V0KHVpbnQzMl90IG9iamVjdElEKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAKLSAgICBIYXNoTWFwPEpTQzo6SlNPYmplY3QqLCBwYWlyPHVpbnQzMl90LCB1aW50MzJfdD4g
Pjo6aXRlcmF0b3Igckl0ZXIgPSBtX2pzT2JqZWN0VG9JRE1hcC5maW5kKGl0ZXItPnNlY29uZC5n
ZXQoKSk7CisgICAgSGFzaE1hcDxKU0M6OkpTT2JqZWN0KiwgcGFpcjx1aW50MzJfdCwgdWludDMy
X3Q+ID46Oml0ZXJhdG9yIHJJdGVyID0gbV9qc09iamVjdFRvSURNYXAuZmluZChpdGVyLT52YWx1
ZS5nZXQoKSk7CiAKICAgICAvLyBJZiB0aGUgb2JqZWN0IGlzIGJlaW5nIHNlbnQgdG8gcGx1Zy1p
biByaWdodCBub3csIHRoZW4gaXQncyBub3QgdGhlIHRpbWUgdG8gZm9yZ2V0LgotICAgIGlmIChy
SXRlci0+c2Vjb25kLnNlY29uZCAhPSAxKQorICAgIGlmIChySXRlci0+dmFsdWUuc2Vjb25kICE9
IDEpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIG1fanNPYmplY3RUb0lETWFwLnJlbW92
ZShySXRlcik7CkBAIC0zMzAsNyArMzMwLDcgQEAgdm9pZCBOZXRzY2FwZVBsdWdpbkluc3RhbmNl
UHJveHk6OmRlc3Ryb3koKQogICAgIAogICAgIEZyYW1lTG9hZE1hcDo6aXRlcmF0b3IgZW5kID0g
bV9wZW5kaW5nRnJhbWVMb2Fkcy5lbmQoKTsKICAgICBmb3IgKEZyYW1lTG9hZE1hcDo6aXRlcmF0
b3IgaXQgPSBtX3BlbmRpbmdGcmFtZUxvYWRzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAg
ICAgICAgWyhpdC0+Zmlyc3QpIF9zZXRJbnRlcm5hbExvYWREZWxlZ2F0ZTpuaWxdOworICAgICAg
ICBbKGl0LT5rZXkpIF9zZXRJbnRlcm5hbExvYWREZWxlZ2F0ZTpuaWxdOwogCiAgICAgX1dLUEhE
ZXN0cm95UGx1Z2luSW5zdGFuY2UobV9wbHVnaW5Ib3N0UHJveHktPnBvcnQoKSwgbV9wbHVnaW5J
RCwgcmVxdWVzdElEKTsKICAKQEAgLTY3OCw3ICs2NzgsNyBAQCB2b2lkIE5ldHNjYXBlUGx1Z2lu
SW5zdGFuY2VQcm94eTo6d2ViRnJhbWVEaWRGaW5pc2hMb2FkV2l0aFJlYXNvbihXZWJGcmFtZSog
d2ViRgogICAgIEZyYW1lTG9hZE1hcDo6aXRlcmF0b3IgaXQgPSBtX3BlbmRpbmdGcmFtZUxvYWRz
LmZpbmQod2ViRnJhbWUpOwogICAgIEFTU0VSVChpdCAhPSBtX3BlbmRpbmdGcmFtZUxvYWRzLmVu
ZCgpKTsKICAgICAgICAgCi0gICAgUGx1Z2luUmVxdWVzdCogcGx1Z2luUmVxdWVzdCA9IGl0LT5z
ZWNvbmQuZ2V0KCk7CisgICAgUGx1Z2luUmVxdWVzdCogcGx1Z2luUmVxdWVzdCA9IGl0LT52YWx1
ZS5nZXQoKTsKICAgICBfV0tQSExvYWRVUkxOb3RpZnkobV9wbHVnaW5Ib3N0UHJveHktPnBvcnQo
KSwgbV9wbHVnaW5JRCwgcGx1Z2luUmVxdWVzdC0+cmVxdWVzdElEKCksIHJlYXNvbik7CiAgCiAg
ICAgbV9wZW5kaW5nRnJhbWVMb2Fkcy5yZW1vdmUoaXQpOwpAQCAtMTYyOCw3ICsxNjI4LDcgQEAg
dm9pZCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmNhbmNlbENoZWNrSWZBbGxvd2VkVG9M
b2FkVVJMKHVpbnQzMl90IGNoZWNrSUQKICAgICBpZiAoaXQgPT0gbV91cmxDaGVja3MuZW5kKCkp
CiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBXZWJQbHVnaW5Db250YWluZXJDaGVjayAqY2hl
Y2sgPSBpdC0+c2Vjb25kLmdldCgpOworICAgIFdlYlBsdWdpbkNvbnRhaW5lckNoZWNrICpjaGVj
ayA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICBbY2hlY2sgY2FuY2VsXTsKICAgICBtX3VybENoZWNr
cy5yZW1vdmUoaXQpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9I
b3N0ZWQvUHJveHlJbnN0YW5jZS5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVk
L1Byb3h5SW5zdGFuY2UubW0KaW5kZXggMTMyM2Y2ZTM2OTEwYzllNDVlNTk0OWRmMWY4MjUzYWZl
ZTM2YjE5Ny4uMWU1YWU2NjA4YWFkYzQxZjJmZTQwNGY4ZTIzYjgwNWYzMWVhYTkxMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvUHJveHlJbnN0YW5jZS5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9Qcm94eUluc3RhbmNlLm1tCkBA
IC0zNTUsOCArMzU1LDggQEAgTWV0aG9kKiBQcm94eUluc3RhbmNlOjptZXRob2ROYW1lZChQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogICAgIC8vIElmIHdlIGFscmVhZHkgaGF2ZSBhbiBlbnRy
eSBpbiB0aGUgbWFwLCB1c2UgaXQuCiAgICAgTWV0aG9kTWFwOjppdGVyYXRvciBleGlzdGluZ01h
cEVudHJ5ID0gbV9tZXRob2RzLmZpbmQobmFtZS5pbXBsKCkpOwogICAgIGlmIChleGlzdGluZ01h
cEVudHJ5ICE9IG1fbWV0aG9kcy5lbmQoKSkgewotICAgICAgICBpZiAoZXhpc3RpbmdNYXBFbnRy
eS0+c2Vjb25kKQotICAgICAgICAgICAgcmV0dXJuIGV4aXN0aW5nTWFwRW50cnktPnNlY29uZDsK
KyAgICAgICAgaWYgKGV4aXN0aW5nTWFwRW50cnktPnZhbHVlKQorICAgICAgICAgICAgcmV0dXJu
IGV4aXN0aW5nTWFwRW50cnktPnZhbHVlOwogICAgIH0KICAgICAKICAgICB1aW50NjRfdCBtZXRo
b2ROYW1lID0gcmVpbnRlcnByZXRfY2FzdDx1aW50NjRfdD4oX05QTl9HZXRTdHJpbmdJZGVudGlm
aWVyKG5hbWUuYXNjaWkoKS5kYXRhKCkpKTsKQEAgLTM3Nyw5ICszNzcsOSBAQCBNZXRob2QqIFBy
b3h5SW5zdGFuY2U6Om1ldGhvZE5hbWVkKFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiAgICAg
Ly8gQWRkIGEgbmV3IGVudHJ5IHRvIHRoZSBtYXAgdW5sZXNzIGFuIGVudHJ5IHdhcyBhZGRlZCB3
aGlsZSB3ZSB3ZXJlIGluIHdhaXRGb3JSZXBseS4KICAgICBNZXRob2RNYXA6OkFkZFJlc3VsdCBt
YXBBZGRSZXN1bHQgPSBtX21ldGhvZHMuYWRkKG5hbWUuaW1wbCgpLCAwKTsKICAgICBpZiAobWFw
QWRkUmVzdWx0LmlzTmV3RW50cnkgJiYgcmVwbHktPm1fcmVzdWx0KQotICAgICAgICBtYXBBZGRS
ZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IG5ldyBQcm94eU1ldGhvZChtZXRob2ROYW1lKTsKKyAg
ICAgICAgbWFwQWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IG5ldyBQcm94eU1ldGhvZChtZXRo
b2ROYW1lKTsKIAotICAgIHJldHVybiBtYXBBZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAg
ICByZXR1cm4gbWFwQWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIAogRmllbGQqIFByb3h5
SW5zdGFuY2U6OmZpZWxkTmFtZWQoUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKQEAgLTM5NCw3
ICszOTQsNyBAQCBGaWVsZCogUHJveHlJbnN0YW5jZTo6ZmllbGROYW1lZChQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lKQogICAgIC8vIElmIHdlIGFscmVhZHkgaGF2ZSBhbiBlbnRyeSBpbiB0aGUg
bWFwLCB1c2UgaXQuCiAgICAgRmllbGRNYXA6Oml0ZXJhdG9yIGV4aXN0aW5nTWFwRW50cnkgPSBt
X2ZpZWxkcy5maW5kKG5hbWUuaW1wbCgpKTsKICAgICBpZiAoZXhpc3RpbmdNYXBFbnRyeSAhPSBt
X2ZpZWxkcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGV4aXN0aW5nTWFwRW50cnktPnNlY29uZDsK
KyAgICAgICAgcmV0dXJuIGV4aXN0aW5nTWFwRW50cnktPnZhbHVlOwogICAgIAogICAgIHVpbnQ2
NF90IGlkZW50aWZpZXIgPSByZWludGVycHJldF9jYXN0PHVpbnQ2NF90PihfTlBOX0dldFN0cmlu
Z0lkZW50aWZpZXIobmFtZS5hc2NpaSgpLmRhdGEoKSkpOwogICAgIHVpbnQzMl90IHJlcXVlc3RJ
RCA9IG1faW5zdGFuY2VQcm94eS0+bmV4dFJlcXVlc3RJRCgpOwpAQCAtNDE0LDggKzQxNCw4IEBA
IEZpZWxkKiBQcm94eUluc3RhbmNlOjpmaWVsZE5hbWVkKFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUpCiAgICAgLy8gQWRkIGEgbmV3IGVudHJ5IHRvIHRoZSBtYXAgdW5sZXNzIGFuIGVudHJ5IHdh
cyBhZGRlZCB3aGlsZSB3ZSB3ZXJlIGluIHdhaXRGb3JSZXBseS4KICAgICBGaWVsZE1hcDo6QWRk
UmVzdWx0IG1hcEFkZFJlc3VsdCA9IG1fZmllbGRzLmFkZChuYW1lLmltcGwoKSwgMCk7CiAgICAg
aWYgKG1hcEFkZFJlc3VsdC5pc05ld0VudHJ5ICYmIHJlcGx5LT5tX3Jlc3VsdCkKLSAgICAgICAg
bWFwQWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBuZXcgUHJveHlGaWVsZChpZGVudGlmaWVy
KTsKLSAgICByZXR1cm4gbWFwQWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgIG1h
cEFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBuZXcgUHJveHlGaWVsZChpZGVudGlmaWVyKTsK
KyAgICByZXR1cm4gbWFwQWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIAogSlNDOjpKU1Zh
bHVlIFByb3h5SW5zdGFuY2U6OmZpZWxkVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBGaWVs
ZCogZmllbGQpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dl
Yk5ldHNjYXBlUGx1Z2luVmlldy5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViTmV0
c2NhcGVQbHVnaW5WaWV3Lm1tCmluZGV4IDRlMWFhZDQ5NTI4Y2Q3ZDA4MWQ0MTM1MjQ1NGI5Yzg1
N2ZiYzI1YjcuLjZhMWViNjQwYTBkYWNmMGNjZTAxZWVkMzgxOTIzNTBiNWRjODUyZjMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5WaWV3Lm1t
CisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5WaWV3Lm1t
CkBAIC03MTAsNyArNzEwLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGdldE5QUmVjdChjb25zdCBO
U1JlY3QmIG5yLCBOUFJlY3QmIG5wcikKIAogICAgIEhhc2hNYXA8dWludDMyX3QsIFBsdWdpblRp
bWVyKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHRpbWVycy0+ZW5kKCk7CiAgICAgZm9yIChIYXNo
TWFwPHVpbnQzMl90LCBQbHVnaW5UaW1lcio+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHRpbWVycy0+
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFBsdWdpblRpbWVyKiB0aW1lciA9
IGl0LT5zZWNvbmQ7CisgICAgICAgIFBsdWdpblRpbWVyKiB0aW1lciA9IGl0LT52YWx1ZTsKICAg
ICAgICAgdGltZXItPnN0b3AoKTsKICAgICB9ICAgIAogfQpAQCAtNzI4LDcgKzcyOCw3IEBAIHN0
YXRpYyBpbmxpbmUgdm9pZCBnZXROUFJlY3QoY29uc3QgTlNSZWN0JiBuciwgTlBSZWN0JiBucHIp
CiAgICAgCiAgICAgSGFzaE1hcDx1aW50MzJfdCwgUGx1Z2luVGltZXIqPjo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gdGltZXJzLT5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8dWludDMyX3QsIFBsdWdp
blRpbWVyKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdGltZXJzLT5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKLSAgICAgICAgUGx1Z2luVGltZXIqIHRpbWVyID0gaXQtPnNlY29uZDsKKyAgICAg
ICAgUGx1Z2luVGltZXIqIHRpbWVyID0gaXQtPnZhbHVlOwogICAgICAgICBBU1NFUlQoIXRpbWVy
LT5pc0FjdGl2ZSgpKTsKICAgICAgICAgdGltZXItPnN0YXJ0KF9pc0NvbXBsZXRlbHlPYnNjdXJl
ZCk7CiAgICAgfSAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBw
b3J0L1dlYk5vdGlmaWNhdGlvbkNsaWVudC5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVT
dXBwb3J0L1dlYk5vdGlmaWNhdGlvbkNsaWVudC5tbQppbmRleCA4NGE5ZDZhY2YwNGZhNzlhZGI0
YzExZTM1MzMwMDI3OTEyMmUyZTlhLi43YTg3MWNiNzJlMzE4NDIxZWM2MDRmM2M4Zjc4NjE5N2Uy
ZGU0MmJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJO
b3RpZmljYXRpb25DbGllbnQubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBv
cnQvV2ViTm90aWZpY2F0aW9uQ2xpZW50Lm1tCkBAIC05MCw3ICs5MCw3IEBAIGJvb2wgV2ViTm90
aWZpY2F0aW9uQ2xpZW50OjpzaG93KE5vdGlmaWNhdGlvbiogbm90aWZpY2F0aW9uKQogICAgIG1f
bm90aWZpY2F0aW9uTWFwLnNldChub3RpZmljYXRpb24sIHdlYk5vdGlmaWNhdGlvbik7CiAKICAg
ICBOb3RpZmljYXRpb25Db250ZXh0TWFwOjppdGVyYXRvciBpdCA9IG1fbm90aWZpY2F0aW9uQ29u
dGV4dE1hcC5hZGQobm90aWZpY2F0aW9uLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIFZlY3Rv
cjxSZXRhaW5QdHI8V2ViTm90aWZpY2F0aW9uPiA+KCkpLml0ZXJhdG9yOwotICAgIGl0LT5zZWNv
bmQuYXBwZW5kKHdlYk5vdGlmaWNhdGlvbik7CisgICAgaXQtPnZhbHVlLmFwcGVuZCh3ZWJOb3Rp
ZmljYXRpb24pOwogCiAgICAgW1ttX3dlYlZpZXcgX25vdGlmaWNhdGlvblByb3ZpZGVyXSBzaG93
Tm90aWZpY2F0aW9uOndlYk5vdGlmaWNhdGlvbi5nZXQoKSBmcm9tV2ViVmlldzptX3dlYlZpZXdd
OwogICAgIHJldHVybiB0cnVlOwpAQCAtMTIwLDcgKzEyMCw3IEBAIHZvaWQgV2ViTm90aWZpY2F0
aW9uQ2xpZW50OjpjbGVhck5vdGlmaWNhdGlvbnMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCkKICAgICBpZiAoaXQgPT0gbV9ub3RpZmljYXRpb25Db250ZXh0TWFwLmVuZCgpKQogICAg
ICAgICByZXR1cm47CiAgICAgCi0gICAgVmVjdG9yPFJldGFpblB0cjxXZWJOb3RpZmljYXRpb24+
ID4mIHdlYk5vdGlmaWNhdGlvbnMgPSBpdC0+c2Vjb25kOworICAgIFZlY3RvcjxSZXRhaW5QdHI8
V2ViTm90aWZpY2F0aW9uPiA+JiB3ZWJOb3RpZmljYXRpb25zID0gaXQtPnZhbHVlOwogICAgIE5T
TXV0YWJsZUFycmF5ICpuc0lEcyA9IFtOU011dGFibGVBcnJheSBhcnJheV07CiAgICAgc2l6ZV90
IGNvdW50ID0gd2ViTm90aWZpY2F0aW9ucy5zaXplKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBjb3VudDsgKytpKSB7CkBAIC0xNDYsMTAgKzE0NiwxMCBAQCB2b2lkIFdlYk5vdGlmaWNh
dGlvbkNsaWVudDo6bm90aWZpY2F0aW9uT2JqZWN0RGVzdHJveWVkKE5vdGlmaWNhdGlvbiogbm90
aWZpY2F0aQogCiAgICAgTm90aWZpY2F0aW9uQ29udGV4dE1hcDo6aXRlcmF0b3IgaXQgPSBtX25v
dGlmaWNhdGlvbkNvbnRleHRNYXAuZmluZChub3RpZmljYXRpb24tPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSk7CiAgICAgQVNTRVJUKGl0ICE9IG1fbm90aWZpY2F0aW9uQ29udGV4dE1hcC5lbmQo
KSk7Ci0gICAgc2l6ZV90IGluZGV4ID0gaXQtPnNlY29uZC5maW5kKHdlYk5vdGlmaWNhdGlvbik7
CisgICAgc2l6ZV90IGluZGV4ID0gaXQtPnZhbHVlLmZpbmQod2ViTm90aWZpY2F0aW9uKTsKICAg
ICBBU1NFUlQoaW5kZXggIT0gbm90Rm91bmQpOwotICAgIGl0LT5zZWNvbmQucmVtb3ZlKGluZGV4
KTsKLSAgICBpZiAoaXQtPnNlY29uZC5pc0VtcHR5KCkpCisgICAgaXQtPnZhbHVlLnJlbW92ZShp
bmRleCk7CisgICAgaWYgKGl0LT52YWx1ZS5pc0VtcHR5KCkpCiAgICAgICAgIG1fbm90aWZpY2F0
aW9uQ29udGV4dE1hcC5yZW1vdmUoaXQpOwogCiAgICAgW1ttX3dlYlZpZXcgX25vdGlmaWNhdGlv
blByb3ZpZGVyXSBub3RpZmljYXRpb25EZXN0cm95ZWQ6d2ViTm90aWZpY2F0aW9uLmdldCgpXTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0gYi9T
b3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCmluZGV4IDgyNzE2YTZjOTI5
Y2M1NDFjOTg2MzVmMWI4NGQxNjM0M2MxMWMxYmUuLjlhNGM0YWQ1YmVkY2RmN2QzY2Y2YmE1YWZj
NGQwMDgyNzBiNWFjNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2Vi
SFRNTFZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5t
bQpAQCAtMjM3OCw3ICsyMzc4LDcgQEAgc3RhdGljIFN0cmluZyBjb21tYW5kTmFtZUZvclNlbGVj
dG9yKFNFTCBzZWxlY3RvcikKICAgICBzdGF0aWMgY29uc3QgU2VsZWN0b3JOYW1lTWFwKiBleGNl
cHRpb25NYXAgPSBjcmVhdGVTZWxlY3RvckV4Y2VwdGlvbk1hcCgpOwogICAgIFNlbGVjdG9yTmFt
ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBleGNlcHRpb25NYXAtPmZpbmQoc2VsZWN0b3IpOwog
ICAgIGlmIChpdCAhPSBleGNlcHRpb25NYXAtPmVuZCgpKQotICAgICAgICByZXR1cm4gaXQtPnNl
Y29uZDsKKyAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKIAogICAgIC8vIFJlbW92ZSB0aGUgdHJh
aWxpbmcgY29sb24uCiAgICAgLy8gTm8gbmVlZCB0byBjYXBpdGFsaXplIHRoZSBjb21tYW5kIG5h
bWUgc2luY2UgRWRpdG9yIGNvbW1hbmQgbmFtZXMgYXJlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L3F0L0FwaS9xd2VicGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5j
cHAKaW5kZXggNzY5N2YxYTZiYjc1NDRiMWZjMjU1NDEzYThkZmU5OWE4ZjgxMGI1MS4uOTAxOWY0
Njg4NTdkZjFiNmJiZWU0NDcxZjc0NjZlYTg3ODA4YTg0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJw
YWdlLmNwcApAQCAtMjIzNyw3ICsyMjM3LDcgQEAgc3RhdGljIHZvaWQgZXh0cmFjdENvbnRlbnRU
eXBlRnJvbVBsdWdpblZlY3Rvcihjb25zdCBWZWN0b3I8UGx1Z2luUGFja2FnZSo+JiBwbHUKICAg
ICAgICAgTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBtYXBfaXQgPSBwbHVn
aW5zW2ldLT5taW1lVG9EZXNjcmlwdGlvbnMoKS5iZWdpbigpOwogICAgICAgICBNSU1FVG9EZXNj
cmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIG1hcF9lbmQgPSBwbHVnaW5zW2ldLT5taW1lVG9E
ZXNjcmlwdGlvbnMoKS5lbmQoKTsKICAgICAgICAgZm9yICg7IG1hcF9pdCAhPSBtYXBfZW5kOyAr
K21hcF9pdCkKLSAgICAgICAgICAgICpsaXN0IDw8IG1hcF9pdC0+Zmlyc3Q7CisgICAgICAgICAg
ICAqbGlzdCA8PCBtYXBfaXQtPmtleTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvcXQvQXBpL3F3ZWJwbHVnaW5kYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L0Fw
aS9xd2VicGx1Z2luZGF0YWJhc2UuY3BwCmluZGV4IGE3YTNiNWYyYzFlODlmNDc0MzdjMDhhOTdm
Y2IyOTY3ODZiZjhlNTguLmM1MzI4YzhmNjc1ZjJjNjZmN2I5YjQyMGQ2NTEzN2ZkOWY4NmI4OTYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwbHVnaW5kYXRhYmFzZS5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBsdWdpbmRhdGFiYXNlLmNwcApAQCAtMTIy
LDggKzEyMiw4IEBAIFFMaXN0PFFXZWJQbHVnaW5JbmZvOjpNaW1lVHlwZT4gUVdlYlBsdWdpbklu
Zm86Om1pbWVUeXBlcygpIGNvbnN0CiAKICAgICAgICAgZm9yIChNSU1FVG9EZXNjcmlwdGlvbnNN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWltZVRvRGVzY3JpcHRpb25zLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgewogICAgICAgICAgICAgTWltZVR5cGUgbWltZVR5cGU7Ci0gICAgICAgICAg
ICBtaW1lVHlwZS5uYW1lID0gaXQtPmZpcnN0OwotICAgICAgICAgICAgbWltZVR5cGUuZGVzY3Jp
cHRpb24gPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgbWltZVR5cGUubmFtZSA9IGl0LT5rZXk7
CisgICAgICAgICAgICBtaW1lVHlwZS5kZXNjcmlwdGlvbiA9IGl0LT52YWx1ZTsKIAogICAgICAg
ICAgICAgUVN0cmluZ0xpc3QgZmlsZUV4dGVuc2lvbnM7CiAgICAgICAgICAgICBWZWN0b3I8U3Ry
aW5nPiBleHRlbnNpb25zID0gbV9wYWNrYWdlLT5taW1lVG9FeHRlbnNpb25zKCkuZ2V0KG1pbWVU
eXBlLm5hbWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Q
bGF0Zm9ybVN0cmF0ZWdpZXNRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0
L1BsYXRmb3JtU3RyYXRlZ2llc1F0LmNwcAppbmRleCBjZDRhYjBkNzJkODY4MTI1ZGM4NmVlOTg3
YmNjZTZlZjNhYjFhZDg5Li43ZDRiMGI3NWY5ZDJjNGU3Njc5ZGIzZDA3YjU2MTdhNDIxNDA0YzU2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3Ry
YXRlZ2llc1F0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BsYXRm
b3JtU3RyYXRlZ2llc1F0LmNwcApAQCAtMTMzLDggKzEzMyw4IEBAIHZvaWQgUGxhdGZvcm1TdHJh
dGVnaWVzUXQ6OmdldFBsdWdpbkluZm8oY29uc3QgV2ViQ29yZTo6UGFnZSogcGFnZSwgVmVjdG9y
PFdlYkNvCiAgICAgICAgIGZvciAoTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAg
ICAgICAgICAgIE1pbWVDbGFzc0luZm8gbWltZTsKIAotICAgICAgICAgICAgbWltZS50eXBlID0g
aXQtPmZpcnN0OwotICAgICAgICAgICAgbWltZS5kZXNjID0gaXQtPnNlY29uZDsKKyAgICAgICAg
ICAgIG1pbWUudHlwZSA9IGl0LT5rZXk7CisgICAgICAgICAgICBtaW1lLmRlc2MgPSBpdC0+dmFs
dWU7CiAgICAgICAgICAgICBtaW1lLmV4dGVuc2lvbnMgPSBwYWNrYWdlLT5taW1lVG9FeHRlbnNp
b25zKCkuZ2V0KG1pbWUudHlwZSk7CiAKICAgICAgICAgICAgIGluZm8ubWltZXMuYXBwZW5kKG1p
bWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vQ09NUHJvcGVydHlCYWcuaCBiL1Nv
dXJjZS9XZWJLaXQvd2luL0NPTVByb3BlcnR5QmFnLmgKaW5kZXggYzc2ODYzZjE1MDEyZjJlYWRl
MGRjZTE1ZmRkYjczOWJmYmMyNzljMy4uOGU4NGU0NzQwYWEzYTk4NjM1OTRiZWRjZWNlOGUzNzEy
YWQ0YTJmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vQ09NUHJvcGVydHlCYWcuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9DT01Qcm9wZXJ0eUJhZy5oCkBAIC0xNDcsOSArMTQ3LDkg
QEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBDT01Qcm9wZXJ0eUJhZzxWYWx1ZVR5cGUsIEtl
eVR5cGUsIEhhc2hUeXBlPjo6UmVhZChMUEMKIAogICAgIFZBUlRZUEUgcmVxdWVzdGVkVHlwZSA9
IFZfVlQocFZhcik7CiAgICAgVl9WVChwVmFyKSA9IFZUX0VNUFRZOwotICAgIENPTVZhcmlhbnRT
ZXR0ZXI8VmFsdWVUeXBlPjo6c2V0VmFyaWFudChwVmFyLCBpdC0+c2Vjb25kKTsKKyAgICBDT01W
YXJpYW50U2V0dGVyPFZhbHVlVHlwZT46OnNldFZhcmlhbnQocFZhciwgaXQtPnZhbHVlKTsKIAot
ICAgIGlmIChyZXF1ZXN0ZWRUeXBlICE9IENPTVZhcmlhbnRTZXR0ZXI8VmFsdWVUeXBlPjo6dmFy
aWFudFR5cGUoaXQtPnNlY29uZCkgJiYgcmVxdWVzdGVkVHlwZSAhPSBWVF9FTVBUWSkKKyAgICBp
ZiAocmVxdWVzdGVkVHlwZSAhPSBDT01WYXJpYW50U2V0dGVyPFZhbHVlVHlwZT46OnZhcmlhbnRU
eXBlKGl0LT52YWx1ZSkgJiYgcmVxdWVzdGVkVHlwZSAhPSBWVF9FTVBUWSkKICAgICAgICAgcmV0
dXJuIDo6VmFyaWFudENoYW5nZVR5cGUocFZhciwgcFZhciwgVkFSSUFOVF9OT1VTRVJPVkVSUklE
RSB8IFZBUklBTlRfQUxQSEFCT09MLCByZXF1ZXN0ZWRUeXBlKTsKIAogICAgIHJldHVybiBTX09L
OwpAQCAtMjE3LDEyICsyMTcsMTIgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBDT01Qcm9w
ZXJ0eUJhZzxWYWx1ZVR5cGUsIEtleVR5cGUsIEhhc2hUeXBlPjo6R2V0UHJvcGUKICAgICAgICAg
Ly9wUHJvcEJhZ1tqXS5jbHNpZDsgICAgLy8gKENMU0lEKSBDTFNJRCBvZiB0aGUgb2JqZWN0LiBU
aGlzIG1lbWJlciBpcyB2YWxpZCBvbmx5IGlmIGR3VHlwZSBpcyBQUk9QQkFHMl9UWVBFX09CSkVD
VC4KIAogICAgICAgICBwUHJvcEJhZ1tqXS5kd1R5cGUgPSBQUk9QQkFHMl9UWVBFX0RBVEE7Ci0g
ICAgICAgIHBQcm9wQmFnW2pdLnZ0ID0gQ09NVmFyaWFudFNldHRlcjxWYWx1ZVR5cGU+Ojp2YXJp
YW50VHlwZShjdXJyZW50LT5zZWNvbmQpOworICAgICAgICBwUHJvcEJhZ1tqXS52dCA9IENPTVZh
cmlhbnRTZXR0ZXI8VmFsdWVUeXBlPjo6dmFyaWFudFR5cGUoY3VycmVudC0+dmFsdWUpOwogICAg
ICAgICBwUHJvcEJhZ1tqXS5kd0hpbnQgPSBpUHJvcGVydHkgKyBqOwotICAgICAgICBwUHJvcEJh
Z1tqXS5wc3RyTmFtZSA9IChMUE9MRVNUUilDb1Rhc2tNZW1BbGxvYyhzaXplb2Yod2NoYXJfdCkq
KGN1cnJlbnQtPmZpcnN0Lmxlbmd0aCgpKzEpKTsKKyAgICAgICAgcFByb3BCYWdbal0ucHN0ck5h
bWUgPSAoTFBPTEVTVFIpQ29UYXNrTWVtQWxsb2Moc2l6ZW9mKHdjaGFyX3QpKihjdXJyZW50LT5r
ZXkubGVuZ3RoKCkrMSkpOwogICAgICAgICBpZiAoIXBQcm9wQmFnW2pdLnBzdHJOYW1lKQogICAg
ICAgICAgICAgcmV0dXJuIEVfT1VUT0ZNRU1PUlk7Ci0gICAgICAgIHdjc2NweV9zKHBQcm9wQmFn
W2pdLnBzdHJOYW1lLCBjdXJyZW50LT5maXJzdC5sZW5ndGgoKSsxLCBzdGF0aWNfY2FzdDxTdHJp
bmc+KGN1cnJlbnQtPmZpcnN0KS5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpKTsKKyAg
ICAgICAgd2NzY3B5X3MocFByb3BCYWdbal0ucHN0ck5hbWUsIGN1cnJlbnQtPmtleS5sZW5ndGgo
KSsxLCBzdGF0aWNfY2FzdDxTdHJpbmc+KGN1cnJlbnQtPmtleSkuY2hhcmFjdGVyc1dpdGhOdWxs
VGVybWluYXRpb24oKSk7CiAgICAgICAgICsrKnBjUHJvcGVydGllczsKICAgICB9CiAgICAgcmV0
dXJuIFNfT0s7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3RhdGlzdGlj
cy5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3RhdGlzdGljcy5jcHAKaW5kZXggYzFj
YTlmMjE0ZjI0OWMwYTQ5ZjFmY2IxMjJmMDZhZDM0OTNiNGIxOS4uMmYyMmIwM2M2MjI1MDAyYWUy
MTljYTBmNDViYTQ3ZDI5ODBjMzdhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vV2Vi
Q29yZVN0YXRpc3RpY3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdGF0aXN0
aWNzLmNwcApAQCAtMTQ1LDcgKzE0NSw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2Vi
Q29yZVN0YXRpc3RpY3M6OmphdmFTY3JpcHRQcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzCiAgICAg
SXRlcmF0b3IgZW5kID0ganNPYmplY3RUeXBlTmFtZXMtPmVuZCgpOwogICAgIEhhc2hNYXA8U3Ry
aW5nLCBpbnQ+IHR5cGVDb3VudE1hcDsKICAgICBmb3IgKEl0ZXJhdG9yIGN1cnJlbnQgPSBqc09i
amVjdFR5cGVOYW1lcy0+YmVnaW4oKTsgY3VycmVudCAhPSBlbmQ7ICsrY3VycmVudCkKLSAgICAg
ICAgdHlwZUNvdW50TWFwLnNldChjdXJyZW50LT5maXJzdCwgY3VycmVudC0+c2Vjb25kKTsKKyAg
ICAgICAgdHlwZUNvdW50TWFwLnNldChjdXJyZW50LT5rZXksIGN1cnJlbnQtPnZhbHVlKTsKIAog
ICAgIENPTVB0cjxJUHJvcGVydHlCYWcyPiByZXN1bHRzKEFkb3B0Q09NLCBDT01Qcm9wZXJ0eUJh
ZzxpbnQ+OjpjcmVhdGVJbnN0YW5jZSh0eXBlQ291bnRNYXApKTsKICAgICByZXN1bHRzLmNvcHlS
ZWZUbyh0eXBlTmFtZXNBbmRDb3VudHMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4v
V2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcCBiL1NvdXJjZS9XZWJLaXQv
d2luL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAKaW5kZXggMjMwZjMz
MjNmNTQyOTFkMDFlMTQxOTgxNzhmYTIxNmE0OGMwY2Y1Yi4uZjEzMGY3NmJkMmE2NzY5N2FkZTdh
MzY3ODg0NTI0M2E5ZjZhNzFhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vV2ViQ29y
ZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3dp
bi9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCkBAIC05Myw4ICs5Myw4
IEBAIHZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpnZXRQbHVnaW5JbmZvKGNvbnN0IFdlYkNv
cmU6OlBhZ2UqLCBWZWN0b3I8V2ViQ29yZTo6CiAgICAgICAgIGZvciAoTUlNRVRvRGVzY3JpcHRp
b25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIE1pbWVDbGFzc0luZm8gbWltZTsKIAotICAg
ICAgICAgICAgbWltZS50eXBlID0gaXQtPmZpcnN0OwotICAgICAgICAgICAgbWltZS5kZXNjID0g
aXQtPnNlY29uZDsKKyAgICAgICAgICAgIG1pbWUudHlwZSA9IGl0LT5rZXk7CisgICAgICAgICAg
ICBtaW1lLmRlc2MgPSBpdC0+dmFsdWU7CiAgICAgICAgICAgICBtaW1lLmV4dGVuc2lvbnMgPSBw
YWNrYWdlLT5taW1lVG9FeHRlbnNpb25zKCkuZ2V0KG1pbWUudHlwZSk7CiAKICAgICAgICAgICAg
IGluZm8ubWltZXMuYXBwZW5kKG1pbWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4v
V2ViSGlzdG9yeS5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJIaXN0b3J5LmNwcAppbmRleCA5
MWY4ODJmYjgyZWVjODZiMTFlOWI0ZWQwN2RiMjgyNDZjZDQzMDBhLi4xZjdhNTcyYzM0NDVkN2Ni
YzU3NjNhZjlkOTFiOWVkZDc4OTUxMDlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9X
ZWJIaXN0b3J5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJIaXN0b3J5LmNwcApAQCAt
ODMzLDcgKzgzMyw3IEBAIEhSRVNVTFQgV2ViSGlzdG9yeTo6cmVtb3ZlSXRlbUZyb21EYXRlQ2Fj
aGVzKElXZWJIaXN0b3J5SXRlbSogZW50cnkpCiAKICAgICBEYXRlVG9FbnRyaWVzTWFwOjppdGVy
YXRvciBmb3VuZCA9IG1fZW50cmllc0J5RGF0ZS5maW5kKGRhdGVLZXkpOwogICAgIEFTU0VSVChm
b3VuZCAhPSBtX2VudHJpZXNCeURhdGUuZW5kKCkpOwotICAgIENGTXV0YWJsZUFycmF5UmVmIGVu
dHJpZXNGb3JEYXRlID0gZm91bmQtPnNlY29uZC5nZXQoKTsKKyAgICBDRk11dGFibGVBcnJheVJl
ZiBlbnRyaWVzRm9yRGF0ZSA9IGZvdW5kLT52YWx1ZS5nZXQoKTsKIAogICAgIENGSW5kZXggY291
bnQgPSBDRkFycmF5R2V0Q291bnQoZW50cmllc0ZvckRhdGUpOwogICAgIGZvciAoaW50IGkgPSBj
b3VudCAtIDE7IGkgPj0gMDsgLS1pKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9X
ZWJLaXRDT01BUEkuY3BwIGIvU291cmNlL1dlYktpdC93aW4vV2ViS2l0Q09NQVBJLmNwcAppbmRl
eCA5YzljYzAyNmI0N2I0ZmVhOTYwYzYzOTg0NmUwZWJhNTFjNDY1M2MyLi40ZDhmZjA5NWJkYTk2
MDdkMjlhMTQ1Yjg1N2M3OGRkZmY4ZTM1ZTdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dp
bi9XZWJLaXRDT01BUEkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL1dlYktpdENPTUFQSS5j
cHAKQEAgLTUyLDcgKzUyLDcgQEAgc3RhdGljIENPTVB0cjxJQ2xhc3NGYWN0b3J5PiBjbGFzc0Zh
Y3RvcnkoY29uc3QgQ0xTSUQmIGNsc2lkKQogICAgIHN0YXRpYyBGYWN0b3J5TWFwJiBmYWN0b3Jp
ZXMgPSAqbmV3IEZhY3RvcnlNYXA7CiAKICAgICBGYWN0b3J5TWFwOjpBZGRSZXN1bHQgcmVzdWx0
ID0gZmFjdG9yaWVzLmFkZChjbHNpZCwgMCk7Ci0gICAgQ09NUHRyPElDbGFzc0ZhY3Rvcnk+JiBm
YWN0b3J5ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgQ09NUHRyPElDbGFzc0ZhY3Rv
cnk+JiBmYWN0b3J5ID0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAocmVzdWx0Lmlz
TmV3RW50cnkgJiYgRkFJTEVEKERsbEdldENsYXNzT2JqZWN0KGNsc2lkLCBfX3V1aWRvZihmYWN0
b3J5KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZmYWN0b3J5KSkpKQogICAgICAgICBmYWN0
b3J5ID0gMDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vV2ViS2l0U3RhdGlzdGlj
cy5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJLaXRTdGF0aXN0aWNzLmNwcAppbmRleCA5Y2Q5
NWM3YWM5MzU5NTMwMDdlMTU3ZGNhNzRlODA3YzQ1YWVlMDZlLi5jN2I4ZWQxYWM3N2NlNmUxOTI2
YWE1ZGIyMjQyNGYyZWVlMWEzNTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJL
aXRTdGF0aXN0aWNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJLaXRTdGF0aXN0aWNz
LmNwcApAQCAtMTQ0LDkgKzE0NCw5IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViS2l0
U3RhdGlzdGljczo6Y29tQ2xhc3NOYW1lQ291bnRzKAogICAgIEl0ZXJhdG9yIGVuZCA9IGdDbGFz
c05hbWVDb3VudC5lbmQoKTsKICAgICBWZWN0b3I8VUNoYXI+IHZlY3RvcjsKICAgICBmb3IgKEl0
ZXJhdG9yIGN1cnJlbnQgPSBnQ2xhc3NOYW1lQ291bnQuYmVnaW4oKTsgY3VycmVudCAhPSBlbmQ7
ICsrY3VycmVudCkgewotICAgICAgICBhcHBlbmQodmVjdG9yLCBTdHJpbmc6OmZvcm1hdCgiJTR1
IiwgY3VycmVudC0+c2Vjb25kKSk7CisgICAgICAgIGFwcGVuZCh2ZWN0b3IsIFN0cmluZzo6Zm9y
bWF0KCIlNHUiLCBjdXJyZW50LT52YWx1ZSkpOwogICAgICAgICB2ZWN0b3IuYXBwZW5kKCdcdCcp
OwotICAgICAgICBhcHBlbmQodmVjdG9yLCBzdGF0aWNfY2FzdDxTdHJpbmc+KGN1cnJlbnQtPmZp
cnN0KSk7CisgICAgICAgIGFwcGVuZCh2ZWN0b3IsIHN0YXRpY19jYXN0PFN0cmluZz4oY3VycmVu
dC0+a2V5KSk7CiAgICAgICAgIHZlY3Rvci5hcHBlbmQoJ1xuJyk7CiAgICAgfQogICAgICpvdXRw
dXQgPSBCU3RyaW5nKFN0cmluZzo6YWRvcHQodmVjdG9yKSkucmVsZWFzZSgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC93aW4vV2ViTm90aWZpY2F0aW9uQ2VudGVyLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvd2luL1dlYk5vdGlmaWNhdGlvbkNlbnRlci5jcHAKaW5kZXggZTAyYWJkNTkzN2E0OWEz
MTA3NWQ0ZjAxNWUyOTMzYjQ2ZGFlMTMwOS4uOTRjZWQxYzRiNzYxMzg1M2FjOWVlYWQzMzQ0ODU3
MmMxOGVjZTZmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vV2ViTm90aWZpY2F0aW9u
Q2VudGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJOb3RpZmljYXRpb25DZW50ZXIu
Y3BwCkBAIC0xMjEsNyArMTIxLDcgQEAgdm9pZCBXZWJOb3RpZmljYXRpb25DZW50ZXI6OnBvc3RO
b3RpZmljYXRpb25JbnRlcm5hbChJV2ViTm90aWZpY2F0aW9uKiBub3RpZmljYXQKIAogICAgIC8v
IEludGVudGlvbmFsbHkgbWFrZSBhIGNvcHkgb2YgdGhlIGxpc3QgdG8gYXZvaWQgdGhlIHBvc3Np
YmlsaXR5IG9mIGVycm9ycwogICAgIC8vIGZyb20gYSBtdXRhdGlvbiBvZiB0aGUgbGlzdCBpbiB0
aGUgb25Ob3RpZnkgY2FsbGJhY2suCi0gICAgT2JqZWN0T2JzZXJ2ZXJMaXN0IGxpc3QgPSBpdC0+
c2Vjb25kOworICAgIE9iamVjdE9ic2VydmVyTGlzdCBsaXN0ID0gaXQtPnZhbHVlOwogCiAgICAg
T2JzZXJ2ZXJMaXN0SXRlcmF0b3IgZW5kID0gbGlzdC5lbmQoKTsKICAgICBmb3IgKE9ic2VydmVy
TGlzdEl0ZXJhdG9yIGl0MiA9IGxpc3QuYmVnaW4oKTsgaXQyICE9IGVuZDsgKytpdDIpIHsKQEAg
LTE1MCw3ICsxNTAsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYk5vdGlmaWNhdGlv
bkNlbnRlcjo6YWRkT2JzZXJ2ZXIoCiAgICAgU3RyaW5nIG5hbWUobm90aWZpY2F0aW9uTmFtZSwg
U3lzU3RyaW5nTGVuKG5vdGlmaWNhdGlvbk5hbWUpKTsKICAgICBNYXBwZWRPYnNlcnZlcnM6Oml0
ZXJhdG9yIGl0ID0gZC0+bV9tYXBwZWRPYnNlcnZlcnMuZmluZChuYW1lKTsKICAgICBpZiAoaXQg
IT0gZC0+bV9tYXBwZWRPYnNlcnZlcnMuZW5kKCkpCi0gICAgICAgIGl0LT5zZWNvbmQuYXBwZW5k
KE9iamVjdE9ic2VydmVyUGFpcihhbk9iamVjdCwgb2JzZXJ2ZXIpKTsKKyAgICAgICAgaXQtPnZh
bHVlLmFwcGVuZChPYmplY3RPYnNlcnZlclBhaXIoYW5PYmplY3QsIG9ic2VydmVyKSk7CiAgICAg
ZWxzZSB7CiAgICAgICAgIE9iamVjdE9ic2VydmVyTGlzdCBsaXN0OwogICAgICAgICBsaXN0LmFw
cGVuZChPYmplY3RPYnNlcnZlclBhaXIoYW5PYmplY3QsIG9ic2VydmVyKSk7CkBAIC0xOTgsNyAr
MTk4LDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJOb3RpZmljYXRpb25DZW50ZXI6
OnJlbW92ZU9ic2VydmVyKAogICAgIGlmIChpdCA9PSBkLT5tX21hcHBlZE9ic2VydmVycy5lbmQo
KSkKICAgICAgICAgcmV0dXJuIEVfRkFJTDsKIAotICAgIE9iamVjdE9ic2VydmVyTGlzdCYgb2Jz
ZXJ2ZXJMaXN0ID0gaXQtPnNlY29uZDsKKyAgICBPYmplY3RPYnNlcnZlckxpc3QmIG9ic2VydmVy
TGlzdCA9IGl0LT52YWx1ZTsKICAgICBPYnNlcnZlckxpc3RJdGVyYXRvciBlbmQgPSBvYnNlcnZl
ckxpc3QuZW5kKCk7CiAKICAgICBpbnQgaSA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L3dpbmNlL1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuY3Bw
CmluZGV4IDNmOGM5MDdjNzM5ZjA4Y2RiOTkxNmU4MzZmOWIwOGRlNjc4NDUxY2YuLmQ1NTc5NzIz
MTE2MTU5MWQ1ZmRiMTcxNTgwNDQ1OGRiNzgyYzkxZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvd2luY2UvV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzV2lu
Q0UuY3BwCkBAIC05NCw4ICs5NCw4IEBAIHZvaWQgUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6Omdl
dFBsdWdpbkluZm8oY29uc3QgUGFnZSosIFZlY3RvcjxQbHVnaW5JbmZvPiYgb3V0CiAgICAgICAg
IGZvciAoTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1pbWVUb0Rl
c2NyaXB0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIE1pbWVD
bGFzc0luZm8gbWltZTsKIAotICAgICAgICAgICAgbWltZS50eXBlID0gaXQtPmZpcnN0OwotICAg
ICAgICAgICAgbWltZS5kZXNjID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIG1pbWUudHlwZSA9
IGl0LT5rZXk7CisgICAgICAgICAgICBtaW1lLmRlc2MgPSBpdC0+dmFsdWU7CiAgICAgICAgICAg
ICBtaW1lLmV4dGVuc2lvbnMgPSBwYWNrYWdlLT5taW1lVG9FeHRlbnNpb25zKCkuZ2V0KG1pbWUu
dHlwZSk7CiAKICAgICAgICAgICAgIGluZm8ubWltZXMuYXBwZW5kKG1pbWUpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVudENvZGVycy5oIGIvU291
cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVudENvZGVycy5oCmluZGV4IGRkNTRk
ZmVlZjkxYTdkZTMxMTkxNWU5M2Q5YWZiZWIxM2ExY2JlNzcuLmFmMTYzYmU2ZDliNjRjMzA5ZDkx
OWFkMWI3MzY1ODhlYjI2MzFjYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3Jt
L0NvcmVJUEMvQXJndW1lbnRDb2RlcnMuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9D
b3JlSVBDL0FyZ3VtZW50Q29kZXJzLmgKQEAgLTc1LDggKzc1LDggQEAgdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVT4gc3RydWN0IEFyZ3VtZW50Q29kZXI8c3RkOjpwYWlyPFQsIFU+ID4g
ewogdGVtcGxhdGU8dHlwZW5hbWUgS2V5VHlwZSwgdHlwZW5hbWUgVmFsdWVUeXBlPiBzdHJ1Y3Qg
QXJndW1lbnRDb2RlcjxXVEY6OktleVZhbHVlUGFpcjxLZXlUeXBlLCBWYWx1ZVR5cGU+ID4gewog
ICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0IFdU
Rjo6S2V5VmFsdWVQYWlyPEtleVR5cGUsIFZhbHVlVHlwZT4mIHBhaXIpCiAgICAgewotICAgICAg
ICBlbmNvZGVyLT5lbmNvZGUocGFpci5maXJzdCk7Ci0gICAgICAgIGVuY29kZXItPmVuY29kZShw
YWlyLnNlY29uZCk7CisgICAgICAgIGVuY29kZXItPmVuY29kZShwYWlyLmtleSk7CisgICAgICAg
IGVuY29kZXItPmVuY29kZShwYWlyLnZhbHVlKTsKICAgICB9CiAKICAgICBzdGF0aWMgYm9vbCBk
ZWNvZGUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBXVEY6OktleVZhbHVlUGFpcjxLZXlUeXBl
LCBWYWx1ZVR5cGU+JiBwYWlyKQpAQCAtODksOCArODksOCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBL
ZXlUeXBlLCB0eXBlbmFtZSBWYWx1ZVR5cGU+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdURjo6S2V5
VmFsdQogICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZSh2YWx1ZSkpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgcGFpci5maXJzdCA9IGtleTsKLSAgICAgICAgcGFpci5z
ZWNvbmQgPSB2YWx1ZTsKKyAgICAgICAgcGFpci5rZXkgPSBrZXk7CisgICAgICAgIHBhaXIudmFs
dWUgPSB2YWx1ZTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uY3BwCmluZGV4IDFjNjE1YmQ3Zjc0
Njk5MmIyYzJkMGMzZWI3MmRmMzUxZWEwMDc5ZmQuLjAyNjM0ODc0Y2U2YzJmYjY1ZjdhZWE2NTk4
MTc4YTkwNmQyMjJhMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJ
UEMvQ29ubmVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9D
b25uZWN0aW9uLmNwcApAQCAtMTAyLDEyICsxMDIsMTIgQEAgUGFzc1JlZlB0cjxDb25uZWN0aW9u
OjpTeW5jTWVzc2FnZVN0YXRlPiBDb25uZWN0aW9uOjpTeW5jTWVzc2FnZVN0YXRlOjpnZXRPckNy
ZWEKICAgICBTeW5jTWVzc2FnZVN0YXRlTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gc3luY01lc3Nh
Z2VTdGF0ZU1hcCgpLmFkZChydW5Mb29wLCAwKTsKIAogICAgIGlmICghcmVzdWx0LmlzTmV3RW50
cnkpIHsKLSAgICAgICAgQVNTRVJUKHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKLSAgICAgICAg
cmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICBBU1NFUlQocmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZSk7CisgICAgICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwog
ICAgIH0KIAogICAgIFJlZlB0cjxTeW5jTWVzc2FnZVN0YXRlPiBzeW5jTWVzc2FnZVN0YXRlID0g
YWRvcHRSZWYobmV3IFN5bmNNZXNzYWdlU3RhdGUocnVuTG9vcCkpOwotICAgIHJlc3VsdC5pdGVy
YXRvci0+c2Vjb25kID0gc3luY01lc3NhZ2VTdGF0ZS5nZXQoKTsKKyAgICByZXN1bHQuaXRlcmF0
b3ItPnZhbHVlID0gc3luY01lc3NhZ2VTdGF0ZS5nZXQoKTsKIAogICAgIHJldHVybiBzeW5jTWVz
c2FnZVN0YXRlLnJlbGVhc2UoKTsKIH0KQEAgLTM1NCwxMCArMzU0LDEwIEBAIFBhc3NPd25QdHI8
QXJndW1lbnREZWNvZGVyPiBDb25uZWN0aW9uOjp3YWl0Rm9yTWVzc2FnZShNZXNzYWdlSUQgbWVz
c2FnZUlELCB1aW50CiAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3dhaXRGb3JNZXNzYWdl
TXV0ZXgpOwogCiAgICAgICAgIEhhc2hNYXA8c3RkOjpwYWlyPHVuc2lnbmVkLCB1aW50NjRfdD4s
IEFyZ3VtZW50RGVjb2Rlcio+OjppdGVyYXRvciBpdCA9IG1fd2FpdEZvck1lc3NhZ2VNYXAuZmlu
ZChtZXNzYWdlQW5kRGVzdGluYXRpb24pOwotICAgICAgICBpZiAoaXQtPnNlY29uZCkgeworICAg
ICAgICBpZiAoaXQtPnZhbHVlKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogbV93YWl0Rm9yTWVz
c2FnZU1hcCBzaG91bGQgcmVhbGx5IGhvbGQgT3duUHRycyB0bwogICAgICAgICAgICAgLy8gQXJn
dW1lbnREZWNvZGVycywgYnV0IEhhc2hNYXAgZG9lc24ndCBjdXJyZW50bHkgc3VwcG9ydCBPd25Q
dHJzLgotICAgICAgICAgICAgT3duUHRyPEFyZ3VtZW50RGVjb2Rlcj4gYXJndW1lbnRzID0gYWRv
cHRQdHIoaXQtPnNlY29uZCk7CisgICAgICAgICAgICBPd25QdHI8QXJndW1lbnREZWNvZGVyPiBh
cmd1bWVudHMgPSBhZG9wdFB0cihpdC0+dmFsdWUpOwogICAgICAgICAgICAgbV93YWl0Rm9yTWVz
c2FnZU1hcC5yZW1vdmUoaXQpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICByZXR1cm4gYXJn
dW1lbnRzLnJlbGVhc2UoKTsKQEAgLTUyNCw4ICs1MjQsOCBAQCB2b2lkIENvbm5lY3Rpb246OnBy
b2Nlc3NJbmNvbWluZ01lc3NhZ2UoTWVzc2FnZUlEIG1lc3NhZ2VJRCwgUGFzc093blB0cjxBcmd1
bWVudAogICAgICAgICAKICAgICAgICAgSGFzaE1hcDxzdGQ6OnBhaXI8dW5zaWduZWQsIHVpbnQ2
NF90PiwgQXJndW1lbnREZWNvZGVyKj46Oml0ZXJhdG9yIGl0ID0gbV93YWl0Rm9yTWVzc2FnZU1h
cC5maW5kKHN0ZDo6bWFrZV9wYWlyKG1lc3NhZ2VJRC50b0ludCgpLCBpbmNvbWluZ01lc3NhZ2Uu
ZGVzdGluYXRpb25JRCgpKSk7CiAgICAgICAgIGlmIChpdCAhPSBtX3dhaXRGb3JNZXNzYWdlTWFw
LmVuZCgpKSB7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kID0gaW5jb21pbmdNZXNzYWdlLnJlbGVh
c2VBcmd1bWVudHMoKS5sZWFrUHRyKCk7Ci0gICAgICAgICAgICBBU1NFUlQoaXQtPnNlY29uZCk7
CisgICAgICAgICAgICBpdC0+dmFsdWUgPSBpbmNvbWluZ01lc3NhZ2UucmVsZWFzZUFyZ3VtZW50
cygpLmxlYWtQdHIoKTsKKyAgICAgICAgICAgIEFTU0VSVChpdC0+dmFsdWUpOwogICAgICAgICAK
ICAgICAgICAgICAgIG1fd2FpdEZvck1lc3NhZ2VDb25kaXRpb24uc2lnbmFsKCk7CiAgICAgICAg
ICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9ndGsvV29y
a1F1ZXVlR3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2d0ay9Xb3JrUXVldWVHdGsu
Y3BwCmluZGV4IDFkZmFiODNjY2ZiMjRjOWYwMGVlNDBkMmRhYTFjOTViMTYzODJhNDMuLjY4ODVk
NDg1YmQxMTZkMzI4ZGVjZDAyYWFmNTRjOTE4NzgyYjJmMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtL2d0ay9Xb3JrUXVldWVHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtL2d0ay9Xb3JrUXVldWVHdGsuY3BwCkBAIC0xNjYsNyArMTY2LDcgQEAgdm9pZCBX
b3JrUXVldWU6OnJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKGludCBmaWxlRGVzY3JpcHRvciwg
aW50IGNvbmRpdGlvbiwgY28KICAgICAgICAgVmVjdG9yPEV2ZW50U291cmNlKj4gc291cmNlczsK
ICAgICAgICAgRXZlbnRTb3VyY2VJdGVyYXRvciBpdCA9IG1fZXZlbnRTb3VyY2VzLmZpbmQoZmls
ZURlc2NyaXB0b3IpOwogICAgICAgICBpZiAoaXQgIT0gbV9ldmVudFNvdXJjZXMuZW5kKCkpIAot
ICAgICAgICAgICAgc291cmNlcyA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICBzb3VyY2VzID0g
aXQtPnZhbHVlOwogCiAgICAgICAgIHNvdXJjZXMuYXBwZW5kKGV2ZW50U291cmNlKTsKICAgICAg
ICAgbV9ldmVudFNvdXJjZXMuc2V0KGZpbGVEZXNjcmlwdG9yLCBzb3VyY2VzKTsKQEAgLTE4Niw3
ICsxODYsNyBAQCB2b2lkIFdvcmtRdWV1ZTo6dW5yZWdpc3RlckV2ZW50U291cmNlSGFuZGxlcihp
bnQgZmlsZURlc2NyaXB0b3IpCiAgICAgQVNTRVJUKG1fZXZlbnRTb3VyY2VzLmNvbnRhaW5zKGZp
bGVEZXNjcmlwdG9yKSk7CiAKICAgICBpZiAoaXQgIT0gbV9ldmVudFNvdXJjZXMuZW5kKCkpIHsK
LSAgICAgICAgVmVjdG9yPEV2ZW50U291cmNlKj4gc291cmNlcyA9IGl0LT5zZWNvbmQ7CisgICAg
ICAgIFZlY3RvcjxFdmVudFNvdXJjZSo+IHNvdXJjZXMgPSBpdC0+dmFsdWU7CiAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBzb3VyY2VzLnNpemUoKTsgaSsrKQogICAgICAgICAgICAg
c291cmNlc1tpXS0+Y2FuY2VsKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRm
b3JtL21hYy9Xb3JrUXVldWVNYWMuY3BwIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vbWFjL1dv
cmtRdWV1ZU1hYy5jcHAKaW5kZXggYTcyMzQ5YjM2YzVhNzY4ZTQ2NTBiMjY2YTNhNjBiOGEyMGM4
MTM4NC4uZGVkMWQ3YWMzNjE4Yzk5N2JkMDhlZDY4YjVmMTQ2MGUxZGU2YWJhZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vbWFjL1dvcmtRdWV1ZU1hYy5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvUGxhdGZvcm0vbWFjL1dvcmtRdWV1ZU1hYy5jcHAKQEAgLTE2NCw3ICsxNjQs
NyBAQCB2b2lkIFdvcmtRdWV1ZTo6dW5yZWdpc3Rlck1hY2hQb3J0RXZlbnRIYW5kbGVyKG1hY2hf
cG9ydF90IG1hY2hQb3J0KQogICAgIAogICAgIEFTU0VSVChtX2V2ZW50U291cmNlcy5jb250YWlu
cyhtYWNoUG9ydCkpOwogCi0gICAgRXZlbnRTb3VyY2UqIGV2ZW50U291cmNlID0gaXQtPnNlY29u
ZDsKKyAgICBFdmVudFNvdXJjZSogZXZlbnRTb3VyY2UgPSBpdC0+dmFsdWU7CiAgICAgLy8gQ2Fu
Y2VsIGFuZCByZWxlYXNlIHRoZSBzb3VyY2UuIEl0IHdpbGwgYmUgZGVsZXRlZCBpbiBpdHMgZmlu
YWxpemUgaGFuZGxlci4KICAgICBkaXNwYXRjaF9zb3VyY2VfY2FuY2VsKGV2ZW50U291cmNlLT5k
aXNwYXRjaFNvdXJjZSgpKTsKICAgICBkaXNwYXRjaF9yZWxlYXNlKGV2ZW50U291cmNlLT5kaXNw
YXRjaFNvdXJjZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9QbHVnaW5z
L05QUmVtb3RlT2JqZWN0TWFwLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9QbHVnaW5zL05Q
UmVtb3RlT2JqZWN0TWFwLmNwcAppbmRleCA3NjQxYWY1ZThjODkyZDFkMzdlZTk2ZGE5YjdlNjA1
ODk5NzNlODhhLi5iNWVjMmQ5ZGEzOWYyNmRjYjQzMjBkOTVlMDNmMmZjYWU0ZTdkN2RmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvUGx1Z2lucy9OUFJlbW90ZU9iamVjdE1hcC5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1BsdWdpbnMvTlBSZW1vdGVPYmplY3RNYXAu
Y3BwCkBAIC0yMDAsNyArMjAwLDcgQEAgdm9pZCBOUFJlbW90ZU9iamVjdE1hcDo6cGx1Z2luRGVz
dHJveWVkKFBsdWdpbiogcGx1Z2luKQogCiAgICAgLy8gR2F0aGVyIHRoZSByZWNlaXZlcnMgYXNz
b2NpYXRlZCB3aXRoIHRoaXMgcGx1Zy1pbi4KICAgICBmb3IgKEhhc2hNYXA8dWludDY0X3QsIE5Q
T2JqZWN0TWVzc2FnZVJlY2VpdmVyKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9yZWdpc3RlcmVk
TlBPYmplY3RzLmJlZ2luKCksIGVuZCA9IG1fcmVnaXN0ZXJlZE5QT2JqZWN0cy5lbmQoKTsgaXQg
IT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIE5QT2JqZWN0TWVzc2FnZVJlY2VpdmVyKiBucE9iamVj
dE1lc3NhZ2VSZWNlaXZlciA9IGl0LT5zZWNvbmQ7CisgICAgICAgIE5QT2JqZWN0TWVzc2FnZVJl
Y2VpdmVyKiBucE9iamVjdE1lc3NhZ2VSZWNlaXZlciA9IGl0LT52YWx1ZTsKICAgICAgICAgaWYg
KG5wT2JqZWN0TWVzc2FnZVJlY2VpdmVyLT5wbHVnaW4oKSA9PSBwbHVnaW4pCiAgICAgICAgICAg
ICBtZXNzYWdlUmVjZWl2ZXJzLmFwcGVuZChucE9iamVjdE1lc3NhZ2VSZWNlaXZlcik7CiAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1VzZXJNZXNzYWdlQ29kZXJzLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvVXNlck1lc3NhZ2VDb2RlcnMuaAppbmRleCBlZTRhYjY0
ZmZhNWI2M2I5MmMwOTk5NTU0ODVmMjBlMjE1NTVlNmNmLi4yZWM1YmI0ZDUyYjIwNzUxZmRiNTdl
ZDY2MjgwZWE5MDdiZDM5YjUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvVXNl
ck1lc3NhZ2VDb2RlcnMuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvVXNlck1lc3NhZ2VD
b2RlcnMuaApAQCAtOTMsOCArOTMsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBJbW11dGFibGVE
aWN0aW9uYXJ5OjpNYXBUeXBlOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC5iZWdpbigpOwogICAg
ICAgICAgICAgSW1tdXRhYmxlRGljdGlvbmFyeTo6TWFwVHlwZTo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gbWFwLmVuZCgpOwogICAgICAgICAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgewotICAg
ICAgICAgICAgICAgIGVuY29kZXItPmVuY29kZShpdC0+Zmlyc3QpOwotICAgICAgICAgICAgICAg
IGVuY29kZXItPmVuY29kZShPd25lcihpdC0+c2Vjb25kLmdldCgpKSk7CisgICAgICAgICAgICAg
ICAgZW5jb2Rlci0+ZW5jb2RlKGl0LT5rZXkpOworICAgICAgICAgICAgICAgIGVuY29kZXItPmVu
Y29kZShPd25lcihpdC0+dmFsdWUuZ2V0KCkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJl
ZmVyZW5jZXNTdG9yZS5jcHAKaW5kZXggNzQ2ZGYxMGE0MjM1MWUyZmE1ZDI0YTFiNDIyMDRlOTVh
MGY1MjA4Mi4uNGY0OWJiNzg2OWU3Y2YzNzlmZDJkNTdjMzRiZDE1YmNhOWYyZWI1NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByZWZlcmVuY2VzU3RvcmUuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcmVmZXJlbmNlc1N0b3JlLmNwcApAQCAtMTUxLDcg
KzE1MSw3IEBAIHN0YXRpYyB0eXBlbmFtZSBNYXBUeXBlOjpNYXBwZWRUeXBlIHZhbHVlRm9yS2V5
KGNvbnN0IE1hcFR5cGUmIG1hcCwgY29uc3QgdHlwZW5hCiB7CiAgICAgdHlwZW5hbWUgTWFwVHlw
ZTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAuZmluZChrZXkpOwogICAgIGlmIChpdCAhPSBtYXAu
ZW5kKCkpCi0gICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gaXQtPnZh
bHVlOwogCiAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZUZvcktleTx0eXBlbmFtZSBNYXBUeXBlOjpN
YXBwZWRUeXBlPihrZXkpOwogfQpAQCAtMTg3LDcgKzE4Nyw3IEBAIGJvb2wgV2ViUHJlZmVyZW5j
ZXNTdG9yZTo6Z2V0Qm9vbFZhbHVlRm9yS2V5KGNvbnN0IFN0cmluZyYga2V5KSBjb25zdAogICAg
IC8vIEZJWE1FOiBFeHRlbmQgb3ZlcnJpZGluZyB0byBvdGhlciBrZXkgdHlwZXMgdXNlZCBmcm9t
IFRlc3RSdW5uZXIuCiAgICAgQm9vbE92ZXJyaWRlc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBi
b29sVGVzdFJ1bm5lck92ZXJyaWRlc01hcCgpLmZpbmQoa2V5KTsKICAgICBpZiAoaXQgIT0gYm9v
bFRlc3RSdW5uZXJPdmVycmlkZXNNYXAoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNv
bmQ7CisgICAgICAgIHJldHVybiBpdC0+dmFsdWU7CiAgICAgcmV0dXJuIHZhbHVlRm9yS2V5KG1f
Ym9vbFZhbHVlcywga2V5KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVk
L21hYy9XZWJDb3JlQXJndW1lbnRDb2RlcnNNYWMubW0gYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
bWFjL1dlYkNvcmVBcmd1bWVudENvZGVyc01hYy5tbQppbmRleCAxOTZhYjExYzdhNzQzMTA3ZDM4
MDBlMWZmOGZhNWJlMWYyYjNiODE4Li4wZjlkM2Q4YTNiZmI3Mzc0M2IzOTMzNTMzNWRjNWY1OGMx
ZDE0NzgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1dlYkNvcmVBcmd1
bWVudENvZGVyc01hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1dlYkNvcmVB
cmd1bWVudENvZGVyc01hYy5tbQpAQCAtMTgzLDcgKzE4Myw3IEBAIGJvb2wgQXJndW1lbnRDb2Rl
cjxSZXNvdXJjZUVycm9yPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgUmVzb3Vy
Y2VFcnJvCiAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
c3RyaW5nVXNlckluZm9NYXAuYmVnaW4oKTsKICAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gc3RyaW5nVXNlckluZm9NYXAuZW5kKCk7CiAgICAgZm9yICg7
IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgW3VzZXJJbmZvIHNldE9iamVjdDpuc1N0cmluZyhp
dC0+c2Vjb25kKSBmb3JLZXk6bnNTdHJpbmcoaXQtPmZpcnN0KV07CisgICAgICAgIFt1c2VySW5m
byBzZXRPYmplY3Q6bnNTdHJpbmcoaXQtPnZhbHVlKSBmb3JLZXk6bnNTdHJpbmcoaXQtPmtleSld
OwogCiAgICAgaWYgKGNlcnRpZmljYXRlLmNlcnRpZmljYXRlQ2hhaW4oKSkKICAgICAgICAgW3Vz
ZXJJbmZvIHNldE9iamVjdDooTlNBcnJheSAqKWNlcnRpZmljYXRlLmNlcnRpZmljYXRlQ2hhaW4o
KSBmb3JLZXk6QCJOU0Vycm9yUGVlckNlcnRpZmljYXRlQ2hhaW5LZXkiXTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9Bcmd1bWVudENvZGVyc1F0LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9xdC9Bcmd1bWVudENvZGVyc1F0LmNwcAppbmRleCBjODliZjQ0ZjE3MTkw
YjAyYzQxMTJiY2JlZDZlMGM0MWZhM2M2NzVmLi5hNDM5Y2FmZjFlNDg4ZTEwMmM1NTBhZDA0ZjM0
NmQ1OTk2ZGQxODkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvQXJndW1l
bnRDb2RlcnNRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL3F0L0FyZ3VtZW50Q29k
ZXJzUXQuY3BwCkBAIC04Niw4ICs4Niw4IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpE
cmFnRGF0YT46OmRlY29kZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIERyYWdEYXRhCiAgICAg
ICAgIE1JTUVEYXRhSGFzaE1hcDo6aXRlcmF0b3IgaXQgPSBtYXAuYmVnaW4oKTsKICAgICAgICAg
TUlNRURhdGFIYXNoTWFwOjppdGVyYXRvciBlbmQgPSBtYXAuZW5kKCk7CiAgICAgICAgIGZvciAo
OyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIFFCeXRlQXJyYXkgYnl0ZXMoKGNoYXIq
KWl0LT5zZWNvbmQuZGF0YSgpLCBpdC0+c2Vjb25kLnNpemUoKSk7Ci0gICAgICAgICAgICBtaW1l
RGF0YS0+c2V0RGF0YShpdC0+Zmlyc3QsIGJ5dGVzKTsKKyAgICAgICAgICAgIFFCeXRlQXJyYXkg
Ynl0ZXMoKGNoYXIqKWl0LT52YWx1ZS5kYXRhKCksIGl0LT52YWx1ZS5zaXplKCkpOworICAgICAg
ICAgICAgbWltZURhdGEtPnNldERhdGEoaXQtPmtleSwgYnl0ZXMpOwogICAgICAgICB9CiAgICAg
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvc291cC9XZWJDb3JlQXJndW1l
bnRDb2RlcnNTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9zb3VwL1dlYkNvcmVBcmd1
bWVudENvZGVyc1NvdXAuY3BwCmluZGV4IGRiZTJjNTFjZGNmYjc5OGFmYWNkMmZkMWRiZmE0OTJi
MWExZWZiMWIuLjMzZDliZDNmZjIwZTYxOTBjYzNjZTRmZjg1OTkzOGIwMzk0ZWQ2YzEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9zb3VwL1dlYkNvcmVBcmd1bWVudENvZGVyc1Nv
dXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9zb3VwL1dlYkNvcmVBcmd1bWVudENv
ZGVyc1NvdXAuY3BwCkBAIC0xNDQsNyArMTQ0LDcgQEAgYm9vbCBBcmd1bWVudENvZGVyPFJlc291
cmNlUmVzcG9uc2U+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBSZXNvdXJjZVIK
ICAgICBpZiAoIWRlY29kZXItPmRlY29kZShoZWFkZXJzKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBoZWFkZXJzLmJl
Z2luKCksIGVuZCA9IGhlYWRlcnMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgcmVz
cG9uc2Uuc2V0SFRUUEhlYWRlckZpZWxkKGl0LT5maXJzdCwgaXQtPnNlY29uZCk7CisgICAgICAg
IHJlc3BvbnNlLnNldEhUVFBIZWFkZXJGaWVsZChpdC0+a2V5LCBpdC0+dmFsdWUpOwogCiAgICAg
dWludDMyX3Qgc291cE1lc3NhZ2VGbGFnczsKICAgICBpZiAoIWRlY29kZXItPmRlY29kZShzb3Vw
TWVzc2FnZUZsYWdzKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3QuY3BwCmluZGV4IGJlODY2ZmEwYTk2N2FlYTZi
NmU0MDUwN2U5MjRjYTc5NTE0NTJmZjYuLjk0ZDAzMDBjMTU3ZWExNDM3MDU0NDE2YWU2NmM4NzFh
ZTM5NTY2MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3
a19iYWNrX2ZvcndhcmRfbGlzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0LmNwcApAQCAtNTQsNyArNTQsNyBAQCBzdHJ1Y3Qg
X0V3a19CYWNrX0ZvcndhcmRfTGlzdCB7CiAgICAgICAgIEl0ZW1zTWFwOjppdGVyYXRvciBpdCA9
IHdyYXBwZXJDYWNoZS5iZWdpbigpOwogICAgICAgICBJdGVtc01hcDo6aXRlcmF0b3IgZW5kID0g
d3JhcHBlckNhY2hlLmVuZCgpOwogICAgICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KQotICAg
ICAgICAgICAgZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fdW5yZWYoaXQtPnNlY29uZCk7Cisg
ICAgICAgICAgICBld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbV91bnJlZihpdC0+dmFsdWUpOwog
ICAgIH0KIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a19jb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19j
b250ZXh0LmNwcAppbmRleCA5NDJlOWI5YmQxNWJhOWFjODA0M2NkOWQ1ZTQ0MzQ5YTBjOWZkOTRl
Li40YTljM2NhNGRmZDkzOTc1NDIwMDYzNzU4ZjVmN2E5MTEzYjRlOTAwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCkBAIC0xMTksNyAr
MTE5LDcgQEAgc3RydWN0IF9Fd2tfQ29udGV4dCB7CiAgICAgICAgIEhhc2hNYXA8dWludDY0X3Qs
IEV3a19Eb3dubG9hZF9Kb2IqPjo6aXRlcmF0b3IgaXQgPSBkb3dubG9hZEpvYnMuYmVnaW4oKTsK
ICAgICAgICAgSGFzaE1hcDx1aW50NjRfdCwgRXdrX0Rvd25sb2FkX0pvYio+OjppdGVyYXRvciBl
bmQgPSBkb3dubG9hZEpvYnMuZW5kKCk7CiAgICAgICAgIGZvciAoIDsgaXQgIT0gZW5kOyArK2l0
KQotICAgICAgICAgICAgZXdrX2Rvd25sb2FkX2pvYl91bnJlZihpdC0+c2Vjb25kKTsKKyAgICAg
ICAgICAgIGV3a19kb3dubG9hZF9qb2JfdW5yZWYoaXQtPnZhbHVlKTsKICAgICB9CiB9OwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAKaW5kZXggNzRm
NWViOTZlYmExOTg5NmNjMDMyNzJlMGE3ZWI4YmEzNzhhZDZjYS4uZjQ2MDJmNWQ5YjYxN2NjN2Qy
OWI4YzM5ZmRjY2U1NWI0Mjg4NDI4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL2V3a192aWV3LmNwcApAQCAtNDI2LDcgKzQyNiw3IEBAIHN0YXRpYyB2b2lkIF9ld2tf
dmlld19wcml2X2xvYWRpbmdfcmVzb3VyY2VzX2NsZWFyKExvYWRpbmdSZXNvdXJjZXNNYXAmIGxv
YWRpbmdSCiAgICAgTG9hZGluZ1Jlc291cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBsb2FkaW5nUmVz
b3VyY2VzTWFwLmJlZ2luKCk7CiAgICAgTG9hZGluZ1Jlc291cmNlc01hcDo6aXRlcmF0b3IgZW5k
ID0gbG9hZGluZ1Jlc291cmNlc01hcC5lbmQoKTsKICAgICBmb3IgKCA7IGl0ICE9IGVuZDsgKytp
dCkKLSAgICAgICAgZXdrX3Jlc291cmNlX3VucmVmKGl0LT5zZWNvbmQpOworICAgICAgICBld2tf
cmVzb3VyY2VfdW5yZWYoaXQtPnZhbHVlKTsKIAogICAgIGxvYWRpbmdSZXNvdXJjZXNNYXAuY2xl
YXIoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFdlYlZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
V2ViVmlldy5jcHAKaW5kZXggMzI1OGEwZjA5NGE4ZGEwZjY4ZmQxZmEwNzgyNGQ1NGQzN2FkMDM3
Ni4uODYyYTJhZTcyMjkwMTA1YjlmMWQ2YWY0OThkOGVmNmM3Y2QxM2RhNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKQEAgLTI0
NjMsNyArMjQ2Myw3IEBAIEdMaXN0KiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3N1YnJlc291cmNlcyhX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiBwcml2ID0g
d2ViVmlldy0+cHJpdjsKICAgICBSZXNvdXJjZXNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHBy
aXYtPnN1YnJlc291cmNlc01hcC5lbmQoKTsKICAgICBmb3IgKFJlc291cmNlc01hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBwcml2LT5zdWJyZXNvdXJjZXNNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KQotICAgICAgICBzdWJyZXNvdXJjZXMgPSBnX2xpc3RfcHJlcGVuZChzdWJyZXNvdXJjZXMs
IGl0LT5zZWNvbmQuZ2V0KCkpOworICAgICAgICBzdWJyZXNvdXJjZXMgPSBnX2xpc3RfcHJlcGVu
ZChzdWJyZXNvdXJjZXMsIGl0LT52YWx1ZS5nZXQoKSk7CiAKICAgICByZXR1cm4gZ19saXN0X3Jl
dmVyc2Uoc3VicmVzb3VyY2VzKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcAppbmRleCBhYTEzZDdhMzU2MDZlNGI0
YmEwYTE5M2FhZTdjNWE4MzQ5YjE4MzVhLi5lNWJhYzY3MWU0MzU3NmYyM2Q0ZjMxYzg1ZWZiMDdl
MjEzNDZlODg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRXZWJWaWV3QmFzZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwCkBAIC0zMDMsNyArMzAzLDcgQEAgc3RhdGljIHZvaWQg
d2Via2l0V2ViVmlld0Jhc2VDb250YWluZXJGb3JhbGwoR3RrQ29udGFpbmVyKiBjb250YWluZXIs
IGdib29sZWFuIGkKICAgICBXZWJLaXRXZWJWaWV3Q2hpbGRyZW5NYXAgY2hpbGRyZW4gPSBwcml2
LT5jaGlsZHJlbjsKICAgICBXZWJLaXRXZWJWaWV3Q2hpbGRyZW5NYXA6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IGNoaWxkcmVuLmVuZCgpOwogICAgIGZvciAoV2ViS2l0V2ViVmlld0NoaWxkcmVuTWFw
Ojpjb25zdF9pdGVyYXRvciBjdXJyZW50ID0gY2hpbGRyZW4uYmVnaW4oKTsgY3VycmVudCAhPSBl
bmQ7ICsrY3VycmVudCkKLSAgICAgICAgKCpjYWxsYmFjaykoY3VycmVudC0+Zmlyc3QsIGNhbGxi
YWNrRGF0YSk7CisgICAgICAgICgqY2FsbGJhY2spKGN1cnJlbnQtPmtleSwgY2FsbGJhY2tEYXRh
KTsKIAogICAgIGlmIChpbmNsdWRlSW50ZXJuYWxzICYmIHByaXYtPmluc3BlY3RvclZpZXcpCiAg
ICAgICAgICgqY2FsbGJhY2spKHByaXYtPmluc3BlY3RvclZpZXcsIGNhbGxiYWNrRGF0YSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ByaW50aW5nVmll
dy5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLUHJpbnRpbmdWaWV3Lm1t
CmluZGV4IDYzYzU4ODk1ZjcxMjkzYjFiNTQ1OGQ5ZWI2ODQxZDBhMDY0ODE0OWQuLmNhMWNhZDU4
MjU5OWZkMGM2MGIyNTI0YzZiYzc3Mjc2OWQyZmQzOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLUHJpbnRpbmdWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLUHJpbnRpbmdWaWV3Lm1tCkBAIC0xOTQsOCArMTk0LDgg
QEAgc3RhdGljIEJPT0wgaXNGb3JjaW5nUHJldmlld1VwZGF0ZTsKIC0gKHVpbnQ2NF90KV9leHBl
Y3RlZFByZXZpZXdDYWxsYmFja0ZvclJlY3Q6KGNvbnN0IEludFJlY3QmKXJlY3QKIHsKICAgICBm
b3IgKEhhc2hNYXA8dWludDY0X3QsIFdlYkNvcmU6OkludFJlY3Q+OjppdGVyYXRvciBpdGVyID0g
X2V4cGVjdGVkUHJldmlld0NhbGxiYWNrcy5iZWdpbigpOyBpdGVyICE9IF9leHBlY3RlZFByZXZp
ZXdDYWxsYmFja3MuZW5kKCk7ICsraXRlcikgewotICAgICAgICBpZiAoaXRlci0+c2Vjb25kICA9
PSByZWN0KQotICAgICAgICAgICAgcmV0dXJuIGl0ZXItPmZpcnN0OworICAgICAgICBpZiAoaXRl
ci0+dmFsdWUgID09IHJlY3QpCisgICAgICAgICAgICByZXR1cm4gaXRlci0+a2V5OwogICAgIH0K
ICAgICByZXR1cm4gMDsKIH0KQEAgLTIyOSw4ICsyMjksOCBAQCBzdGF0aWMgdm9pZCBwYWdlRGlk
RHJhd1RvUERGKFdLRGF0YVJlZiBkYXRhUmVmLCBXS0Vycm9yUmVmLCB2b2lkKiB1bnR5cGVkQ29u
dGV4dAogICAgICAgICAgICAgQVNTRVJUKFt2aWV3IF9pc1ByaW50aW5nUHJldmlld10pOwogCiAg
ICAgICAgICAgICBpZiAoZGF0YSkgewotICAgICAgICAgICAgICAgIEhhc2hNYXA8V2ViQ29yZTo6
SW50UmVjdCwgVmVjdG9yPHVpbnQ4X3Q+ID46OkFkZFJlc3VsdCBlbnRyeSA9IHZpZXctPl9wYWdl
UHJldmlld3MuYWRkKGl0ZXItPnNlY29uZCwgVmVjdG9yPHVpbnQ4X3Q+KCkpOwotICAgICAgICAg
ICAgICAgIGVudHJ5Lml0ZXJhdG9yLT5zZWNvbmQuYXBwZW5kKGRhdGEtPmJ5dGVzKCksIGRhdGEt
PnNpemUoKSk7CisgICAgICAgICAgICAgICAgSGFzaE1hcDxXZWJDb3JlOjpJbnRSZWN0LCBWZWN0
b3I8dWludDhfdD4gPjo6QWRkUmVzdWx0IGVudHJ5ID0gdmlldy0+X3BhZ2VQcmV2aWV3cy5hZGQo
aXRlci0+dmFsdWUsIFZlY3Rvcjx1aW50OF90PigpKTsKKyAgICAgICAgICAgICAgICBlbnRyeS5p
dGVyYXRvci0+dmFsdWUuYXBwZW5kKGRhdGEtPmJ5dGVzKCksIGRhdGEtPnNpemUoKSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB2aWV3LT5fZXhwZWN0ZWRQcmV2aWV3Q2FsbGJhY2tzLnJl
bW92ZShjb250ZXh0LT5jYWxsYmFja0lEKTsKICAgICAgICAgICAgIGJvb2wgcmVjZWl2ZWRSZXNw
b25zZVRvTGF0ZXN0UmVxdWVzdCA9IHZpZXctPl9sYXRlc3RFeHBlY3RlZFByZXZpZXdDYWxsYmFj
ayA9PSBjb250ZXh0LT5jYWxsYmFja0lEOwpAQCAtNDk0LDcgKzQ5NCw3IEBAIHN0YXRpYyB2b2lk
IHByZXBhcmVEYXRhRm9yUHJpbnRpbmdPblNlY29uZGFyeVRocmVhZCh2b2lkKiB1bnR5cGVkQ29u
dGV4dCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGNvbnN0IFZlY3Rvcjx1aW50OF90
PiYgcGRmRGF0YUJ5dGVzID0gcGFnZVByZXZpZXdJdGVyYXRvci0+c2Vjb25kOworICAgIGNvbnN0
IFZlY3Rvcjx1aW50OF90PiYgcGRmRGF0YUJ5dGVzID0gcGFnZVByZXZpZXdJdGVyYXRvci0+dmFs
dWU7CiAgICAgUmV0YWluUHRyPE5TRGF0YT4gcGRmRGF0YShBZG9wdE5TLCBbW05TRGF0YSBhbGxv
Y10gaW5pdFdpdGhCeXRlczpwZGZEYXRhQnl0ZXMuZGF0YSgpIGxlbmd0aDpwZGZEYXRhQnl0ZXMu
c2l6ZSgpXSk7CiAgICAgUmV0YWluUHRyPFBERkRvY3VtZW50PiBwZGZEb2N1bWVudChBZG9wdE5T
LCBbW3BkZkRvY3VtZW50Q2xhc3MoKSBhbGxvY10gaW5pdFdpdGhEYXRhOnBkZkRhdGEuZ2V0KCld
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3
Lm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCmluZGV4IDlk
NjkzOTlkNGVhNzQwMzhlNzE5MWMzZmJmZDI5ZjU4YTA0ZWI1MWQuLmQ0YjMwMTI5ODM2OTNmMjQy
ZDcyYjM1NzczNDUzMmVjMTM4YjJkNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvbWFjL1dLVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L21hYy9XS1ZpZXcubW0KQEAgLTQyOCw3ICs0MjgsNyBAQCBzdGF0aWMgU3RyaW5nIGNvbW1hbmRO
YW1lRm9yU2VsZWN0b3IoU0VMIHNlbGVjdG9yKQogICAgIHN0YXRpYyBjb25zdCBTZWxlY3Rvck5h
bWVNYXAqIGV4Y2VwdGlvbk1hcCA9IGNyZWF0ZVNlbGVjdG9yRXhjZXB0aW9uTWFwKCk7CiAgICAg
U2VsZWN0b3JOYW1lTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGV4Y2VwdGlvbk1hcC0+ZmluZChz
ZWxlY3Rvcik7CiAgICAgaWYgKGl0ICE9IGV4Y2VwdGlvbk1hcC0+ZW5kKCkpCi0gICAgICAgIHJl
dHVybiBpdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwogICAgIAogICAgIC8v
IFJlbW92ZSB0aGUgdHJhaWxpbmcgY29sb24uCiAgICAgLy8gTm8gbmVlZCB0byBjYXBpdGFsaXpl
IHRoZSBjb21tYW5kIG5hbWUgc2luY2UgRWRpdG9yIGNvbW1hbmQgbmFtZXMgYXJlCkBAIC03NDIs
NyArNzQyLDcgQEAgc3RhdGljIHZvaWQgdmFsaWRhdGVDb21tYW5kQ2FsbGJhY2soV0tTdHJpbmdS
ZWYgY29tbWFuZE5hbWUsIGJvb2wgaXNFbmFibGVkLCBpbnQKIAogICAgIC8vIEFkZCB0aGlzIGl0
ZW0gdG8gdGhlIHZlY3RvciBvZiBpdGVtcyBmb3IgYSBnaXZlbiBjb21tYW5kIHRoYXQgYXJlIGF3
YWl0aW5nIHZhbGlkYXRpb24uCiAgICAgVmFsaWRhdGlvbk1hcDo6QWRkUmVzdWx0IGFkZFJlc3Vs
dCA9IF9kYXRhLT5fdmFsaWRhdGlvbk1hcC5hZGQoY29tbWFuZE5hbWUsIFZhbGlkYXRpb25WZWN0
b3IoKSk7Ci0gICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQuYXBwZW5kKGl0ZW0pOworICAg
IGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKGl0ZW0pOwogICAgIGlmIChhZGRSZXN1
bHQuaXNOZXdFbnRyeSkgewogICAgICAgICAvLyBJZiB3ZSBhcmUgbm90IGFscmVhZHkgYXdhaXRp
bmcgdmFsaWRhdGlvbiBmb3IgdGhpcyBjb21tYW5kLCBzdGFydCB0aGUgYXN5bmNocm9ub3VzIHZh
bGlkYXRpb24gcHJvY2Vzcy4KICAgICAgICAgLy8gRklYTUU6IFRoZW9yZXRpY2FsbHksIHRoZXJl
IGlzIGEgcmFjZSBoZXJlOyB3aGVuIHdlIGdldCB0aGUgYW5zd2VyIGl0IG1pZ2h0IGJlIG9sZCwg
ZnJvbSBhIHByZXZpb3VzIHRpbWUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQmFja2lu
Z1N0b3JlLmNwcAppbmRleCA4NGY2ZWJkMmYxNjU4ZTY5OTY1ZTQ3MWJhMzYyNWE5MjI4OWZhYTcy
Li43N2ZkYzBhMjZmODhkNDMwN2E3YjYwMDdkYWJkNTNmMjkwNmQ1NDdlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEJh
Y2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuY3BwCkBAIC04MCwxNSArODAsMTUgQEAg
dm9pZCBDb29yZGluYXRlZEJhY2tpbmdTdG9yZTo6dXBkYXRlVGlsZShpbnQgaWQsIGNvbnN0IElu
dFJlY3QmIHNvdXJjZVJlY3QsIGNvbnMKIHsKICAgICBIYXNoTWFwPGludCwgQ29vcmRpbmF0ZWRC
YWNraW5nU3RvcmVUaWxlPjo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmZpbmQoaWQpOwogICAgIEFT
U0VSVChpdCAhPSBtX3RpbGVzLmVuZCgpKTsKLSAgICBpdC0+c2Vjb25kLmluY3JlbWVudFJlcGFp
bnRDb3VudCgpOwotICAgIGl0LT5zZWNvbmQuc2V0QmFja0J1ZmZlcih0YXJnZXRSZWN0LCBzb3Vy
Y2VSZWN0LCBiYWNrQnVmZmVyLCBvZmZzZXQpOworICAgIGl0LT52YWx1ZS5pbmNyZW1lbnRSZXBh
aW50Q291bnQoKTsKKyAgICBpdC0+dmFsdWUuc2V0QmFja0J1ZmZlcih0YXJnZXRSZWN0LCBzb3Vy
Y2VSZWN0LCBiYWNrQnVmZmVyLCBvZmZzZXQpOwogfQogCiBQYXNzUmVmUHRyPEJpdG1hcFRleHR1
cmU+IENvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjp0ZXh0dXJlKCkgY29uc3QKIHsKICAgICBIYXNo
TWFwPGludCwgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlPjo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gbV90aWxlcy5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8aW50LCBDb29yZGluYXRlZEJhY2tp
bmdTdG9yZVRpbGU+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7Ci0gICAgICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiB0ZXh0dXJlID0gaXQt
PnNlY29uZC50ZXh0dXJlKCk7CisgICAgICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiB0ZXh0dXJl
ID0gaXQtPnZhbHVlLnRleHR1cmUoKTsKICAgICAgICAgaWYgKHRleHR1cmUpCiAgICAgICAgICAg
ICByZXR1cm4gdGV4dHVyZTsKICAgICB9CkBAIC0xMTIsNyArMTEyLDcgQEAgdm9pZCBDb29yZGlu
YXRlZEJhY2tpbmdTdG9yZTo6cGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciogdGV4
dHVyZU1hcHBlciwKICAgICBIYXNoTWFwPGludCwgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxl
Pjo6aXRlcmF0b3IgZW5kID0gbV90aWxlcy5lbmQoKTsKICAgICBGbG9hdFJlY3QgY292ZXJlZFJl
Y3Q7CiAgICAgZm9yIChIYXNoTWFwPGludCwgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlPjo6
aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAg
ICBDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGUmIHRpbGUgPSBpdC0+c2Vjb25kOworICAgICAg
ICBDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGUmIHRpbGUgPSBpdC0+dmFsdWU7CiAgICAgICAg
IGlmICghdGlsZS50ZXh0dXJlKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIApAQCAtMTU2LDcg
KzE1Niw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OmNvbW1pdFRpbGVPcGVyYXRp
b25zKFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIpCiAKICAgICBIYXNoTWFwPGludCwgQ29v
cmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlPjo6aXRlcmF0b3IgdGlsZXNFbmQgPSBtX3RpbGVzLmVu
ZCgpOwogICAgIGZvciAoSGFzaE1hcDxpbnQsIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZT46
Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpOyBpdCAhPSB0aWxlc0VuZDsgKytpdCkKLSAg
ICAgICAgaXQtPnNlY29uZC5zd2FwQnVmZmVycyh0ZXh0dXJlTWFwcGVyKTsKKyAgICAgICAgaXQt
PnZhbHVlLnN3YXBCdWZmZXJzKHRleHR1cmVNYXBwZXIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdy
YXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5jcHAK
aW5kZXggNjIzYjBhOTk4MjVhMGQ2OTk2OTFlOTM2YjI4NDMxMTcxZTAwYjdmMy4uMDA1ZDIxOGJk
YmQ1MzlhOWE4YTRjY2E2ZThmNTdlZjdlNTEzNzNlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94
eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5jcHAKQEAgLTczLDcgKzczLDcgQEAgdm9pZCBMYXll
clRyZWVDb29yZGluYXRvclByb3h5Ojp1cGRhdGVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGlu
dCB0aWxlSUQsIGNvbnMKICAgICAgICAgICAgIHN1cmZhY2UgPSBTaGFyZWFibGVTdXJmYWNlOjpj
cmVhdGUodXBkYXRlSW5mby5zdXJmYWNlSGFuZGxlKTsKICAgICAgICAgICAgIG1fc3VyZmFjZXMu
YWRkKHRva2VuLCBzdXJmYWNlKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBzdXJmYWNl
ID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIHN1cmZhY2UgPSBpdC0+dmFsdWU7CiAgICAgfSBl
bHNlCiAgICAgICAgIHN1cmZhY2UgPSBTaGFyZWFibGVTdXJmYWNlOjpjcmVhdGUodXBkYXRlSW5m
by5zdXJmYWNlSGFuZGxlKTsKICNlbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVSZW5kZXJlci5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVSZW5kZXJlci5j
cHAKaW5kZXggNWI5NjJkYjRjNGNmNGZhMzkxM2Y4YzQxY2FhMjNiNmQzZmQxMzg5OS4uMWJmYTY1
NzUyY2I5NmY4ZmM3NzcyYzRkMDBjNDQ5OWRkYWJkNDczMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVy
VHJlZVJlbmRlcmVyLmNwcApAQCAtMTgzLDcgKzE4Myw3IEBAIHZvaWQgTGF5ZXJUcmVlUmVuZGVy
ZXI6OmFkanVzdFBvc2l0aW9uRm9yRml4ZWRMYXllcnMoKQogCiAgICAgTGF5ZXJNYXA6Oml0ZXJh
dG9yIGVuZCA9IG1fZml4ZWRMYXllcnMuZW5kKCk7CiAgICAgZm9yIChMYXllck1hcDo6aXRlcmF0
b3IgaXQgPSBtX2ZpeGVkTGF5ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAg
dG9UZXh0dXJlTWFwcGVyTGF5ZXIoaXQtPnNlY29uZCktPnNldFNjcm9sbFBvc2l0aW9uRGVsdGFJ
Zk5lZWRlZChkZWx0YSk7CisgICAgICAgIHRvVGV4dHVyZU1hcHBlckxheWVyKGl0LT52YWx1ZSkt
PnNldFNjcm9sbFBvc2l0aW9uRGVsdGFJZk5lZWRlZChkZWx0YSk7CiB9CiAKIHZvaWQgTGF5ZXJU
cmVlUmVuZGVyZXI6OmRpZENoYW5nZVNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFBvaW50JiBwb3Np
dGlvbikKQEAgLTIwNiw3ICsyMDYsNyBAQCB2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpzeW5jQ2Fu
dmFzKFdlYkxheWVySUQgaWQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGNhbnZhcwogICAgICAg
ICBjYW52YXNCYWNraW5nU3RvcmUgPSBUZXh0dXJlTWFwcGVyU3VyZmFjZUJhY2tpbmdTdG9yZTo6
Y3JlYXRlKCk7CiAgICAgICAgIG1fc3VyZmFjZUJhY2tpbmdTdG9yZXMuc2V0KGlkLCBjYW52YXNC
YWNraW5nU3RvcmUpOwogICAgIH0gZWxzZQotICAgICAgICBjYW52YXNCYWNraW5nU3RvcmUgPSBp
dC0+c2Vjb25kOworICAgICAgICBjYW52YXNCYWNraW5nU3RvcmUgPSBpdC0+dmFsdWU7CiAKICAg
ICBjYW52YXNCYWNraW5nU3RvcmUtPnNldEdyYXBoaWNzU3VyZmFjZShncmFwaGljc1N1cmZhY2VU
b2tlbiwgY2FudmFzU2l6ZSwgZnJvbnRCdWZmZXIpOwogICAgIGxheWVyLT5zZXRDb250ZW50c1Rv
TWVkaWEoY2FudmFzQmFja2luZ1N0b3JlLmdldCgpKTsKQEAgLTIxNyw3ICsyMTcsNyBAQCB2b2lk
IExheWVyVHJlZVJlbmRlcmVyOjpzZXRMYXllckNoaWxkcmVuKFdlYkxheWVySUQgaWQsIGNvbnN0
IFZlY3RvcjxXZWJMYXllcklEPgogewogICAgIGVuc3VyZUxheWVyKGlkKTsKICAgICBMYXllck1h
cDo6aXRlcmF0b3IgaXQgPSBtX2xheWVycy5maW5kKGlkKTsKLSAgICBHcmFwaGljc0xheWVyKiBs
YXllciA9IGl0LT5zZWNvbmQ7CisgICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBpdC0+dmFsdWU7
CiAgICAgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiBjaGlsZHJlbjsKIAogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgY2hpbGRJRHMuc2l6ZSgpOyArK2kpIHsKQEAgLTIzOSw3ICsyMzksNyBAQCB2
b2lkIExheWVyVHJlZVJlbmRlcmVyOjpzZXRMYXllckZpbHRlcnMoV2ViTGF5ZXJJRCBpZCwgY29u
c3QgRmlsdGVyT3BlcmF0aW9ucyYgZgogICAgIExheWVyTWFwOjppdGVyYXRvciBpdCA9IG1fbGF5
ZXJzLmZpbmQoaWQpOwogICAgIEFTU0VSVChpdCAhPSBtX2xheWVycy5lbmQoKSk7CiAKLSAgICBH
cmFwaGljc0xheWVyKiBsYXllciA9IGl0LT5zZWNvbmQ7CisgICAgR3JhcGhpY3NMYXllciogbGF5
ZXIgPSBpdC0+dmFsdWU7CiAgICAgbGF5ZXItPnNldEZpbHRlcnMoZmlsdGVycyk7CiB9CiAjZW5k
aWYKQEAgLTI1MCw3ICsyNTAsNyBAQCB2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpzZXRMYXllclN0
YXRlKFdlYkxheWVySUQgaWQsIGNvbnN0IFdlYkxheWVySW5mbyYgbGF5ZXJJbgogICAgIExheWVy
TWFwOjppdGVyYXRvciBpdCA9IG1fbGF5ZXJzLmZpbmQoaWQpOwogICAgIEFTU0VSVChpdCAhPSBt
X2xheWVycy5lbmQoKSk7CiAKLSAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IGl0LT5zZWNvbmQ7
CisgICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBpdC0+dmFsdWU7CiAKICAgICBsYXllci0+c2V0
UmVwbGljYXRlZEJ5TGF5ZXIobGF5ZXJCeUlEKGxheWVySW5mby5yZXBsaWNhKSk7CiAgICAgbGF5
ZXItPnNldE1hc2tMYXllcihsYXllckJ5SUQobGF5ZXJJbmZvLm1hc2spKTsKQEAgLTM3Nyw3ICsz
NzcsNyBAQCB2b2lkIExheWVyVHJlZVJlbmRlcmVyOjphc3NpZ25JbWFnZVRvTGF5ZXIoR3JhcGhp
Y3NMYXllciogbGF5ZXIsIGludDY0X3QgaW1hZ2VJRAogCiAgICAgSGFzaE1hcDxpbnQ2NF90LCBS
ZWZQdHI8VGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZT4gPjo6aXRlcmF0b3IgaXQgPSBtX2RpcmVj
dGx5Q29tcG9zaXRlZEltYWdlcy5maW5kKGltYWdlSUQpOwogICAgIEFTU0VSVChpdCAhPSBtX2Rp
cmVjdGx5Q29tcG9zaXRlZEltYWdlcy5lbmQoKSk7Ci0gICAgbGF5ZXItPnNldENvbnRlbnRzVG9N
ZWRpYShpdC0+c2Vjb25kLmdldCgpKTsKKyAgICBsYXllci0+c2V0Q29udGVudHNUb01lZGlhKGl0
LT52YWx1ZS5nZXQoKSk7CiB9CiAKIHZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmNvbW1pdFRpbGVP
cGVyYXRpb25zKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9HZW9sb2Nh
dGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9HZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcAppbmRl
eCBlYjA2YzI5ZDg2NmEwNzIzNzIzZDUwYzc3YjdhNzc2OWUxOTIyNDAxLi5iMjYzOTU3MzYyZjdi
OWYwOWM4OWM2Zjg1Y2NhNThhOTI2NjEzNDI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RN
YW5hZ2VyUHJveHkuY3BwCkBAIC00Miw3ICs0Miw3IEBAIHZvaWQgR2VvbG9jYXRpb25QZXJtaXNz
aW9uUmVxdWVzdE1hbmFnZXJQcm94eTo6aW52YWxpZGF0ZVJlcXVlc3RzKCkKICAgICBQZW5kaW5n
UmVxdWVzdE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BlbmRpbmdSZXF1ZXN0cy5iZWdpbigp
OwogICAgIFBlbmRpbmdSZXF1ZXN0TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BlbmRpbmdS
ZXF1ZXN0cy5lbmQoKTsKICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+
c2Vjb25kLT5pbnZhbGlkYXRlKCk7CisgICAgICAgIGl0LT52YWx1ZS0+aW52YWxpZGF0ZSgpOwog
CiAgICAgbV9wZW5kaW5nUmVxdWVzdHMuY2xlYXIoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvV2ViSW5zcGVjdG9yU2VydmVyLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvV2ViSW5zcGVjdG9yU2Vy
dmVyLmNwcAppbmRleCA2NmQ2NDQ3MzQ0N2I5ZDkwZjYyOTliOTIwM2NjZDdjNWFkMTNlOGNhLi5i
YzU4NWU5NGRjODQzNzFlOTU2ZWQwY2Y1ZTY5ZWFmYjAyNmIxMjc2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL1dlYkluc3BlY3RvclNlcnZlci5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9XZWJJbnNw
ZWN0b3JTZXJ2ZXIuY3BwCkBAIC02Nyw3ICs2Nyw3IEBAIFdlYkluc3BlY3RvclNlcnZlcjo6fldl
Ykluc3BlY3RvclNlcnZlcigpCiAgICAgLy8gQ2xvc2UgYW55IHJlbWFpbmluZyBvcGVuIGNvbm5l
Y3Rpb25zLgogICAgIEhhc2hNYXA8dW5zaWduZWQsIFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24q
Pjo6aXRlcmF0b3IgZW5kID0gbV9jb25uZWN0aW9uTWFwLmVuZCgpOwogICAgIGZvciAoSGFzaE1h
cDx1bnNpZ25lZCwgV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbio+OjppdGVyYXRvciBpdCA9IG1f
Y29ubmVjdGlvbk1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgV2ViU29j
a2V0U2VydmVyQ29ubmVjdGlvbiogY29ubmVjdGlvbiA9IGl0LT5zZWNvbmQ7CisgICAgICAgIFdl
YlNvY2tldFNlcnZlckNvbm5lY3Rpb24qIGNvbm5lY3Rpb24gPSBpdC0+dmFsdWU7CiAgICAgICAg
IFdlYkluc3BlY3RvclByb3h5KiBjbGllbnQgPSBtX2NsaWVudE1hcC5nZXQoY29ubmVjdGlvbi0+
aWRlbnRpZmllcigpKTsKICAgICAgICAgY2xvc2VDb25uZWN0aW9uKGNsaWVudCwgY29ubmVjdGlv
bik7CiAgICAgfQpAQCAtNzgsNyArNzgsNyBAQCBpbnQgV2ViSW5zcGVjdG9yU2VydmVyOjpyZWdp
c3RlclBhZ2UoV2ViSW5zcGVjdG9yUHJveHkqIGNsaWVudCkKICNpZm5kZWYgQVNTRVJUX0RJU0FC
TEVECiAgICAgQ2xpZW50TWFwOjppdGVyYXRvciBlbmQgPSBtX2NsaWVudE1hcC5lbmQoKTsKICAg
ICBmb3IgKENsaWVudE1hcDo6aXRlcmF0b3IgaXQgPSBtX2NsaWVudE1hcC5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCi0gICAgICAgIEFTU0VSVChpdC0+c2Vjb25kICE9IGNsaWVudCk7CisgICAg
ICAgIEFTU0VSVChpdC0+dmFsdWUgIT0gY2xpZW50KTsKICNlbmRpZgogCiAgICAgaW50IHBhZ2VJ
ZCA9IG1fbmV4dEF2YWlsYWJsZVBhZ2VJZCsrOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9XZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvV2ViU29ja2V0U2VydmVy
Q29ubmVjdGlvbi5jcHAKaW5kZXggYWJjODA1ZmQ3Y2M3ZjFmYjUyNWMwZDJmYTY2ZTIxYTQ5Y2Rj
MmFhMS4uNjMxN2M2MmMyMzk3NTY2ZDg5ZmY3NDQ2ZTk0MDI3NDVmZDhkN2ZkZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9XZWJTb2NrZXRTZXJ2
ZXJDb25uZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvSW5zcGVjdG9y
U2VydmVyL1dlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24uY3BwCkBAIC0xMDYsOSArMTA2LDkgQEAg
dm9pZCBXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uOjpzZW5kSFRUUFJlc3BvbnNlSGVhZGVyKGlu
dCBzdGF0dXNDb2RlLCBjb25zdCBTdHIKICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIlxyXG4i
KTsKICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBoZWFkZXJGaWVsZHMu
ZW5kKCk7CiAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGhlYWRl
ckZpZWxkcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgYnVpbGRlci5hcHBl
bmQoaXQtPmZpcnN0KTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoaXQtPmtleSk7CiAgICAgICAg
IGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiOiAiKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoaXQt
PnNlY29uZCk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGl0LT52YWx1ZSk7CiAgICAgICAgIGJ1
aWxkZXIuYXBwZW5kTGl0ZXJhbCgiXHJcbiIpOwogICAgIH0KICAgICBidWlsZGVyLmFwcGVuZExp
dGVyYWwoIlxyXG4iKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNw
ZWN0b3JTZXJ2ZXIvcXQvV2ViSW5zcGVjdG9yU2VydmVyUXQuY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9xdC9XZWJJbnNwZWN0b3JTZXJ2ZXJRdC5jcHAKaW5k
ZXggMTg4MjU4NmFmMzljMTc4ZjFiNmU0NzYxMDA4OWQzOWM5ZTVjMWY0Zi4uMTFlNTdjZmQ1ZWJj
NzEwM2U1ZjUwZmNhYmU4Zjc0NTc4Y2M0NzU4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9xdC9XZWJJbnNwZWN0b3JTZXJ2ZXJRdC5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9xdC9XZWJJbnNwZWN0
b3JTZXJ2ZXJRdC5jcHAKQEAgLTgzLDE4ICs4MywxOCBAQCB2b2lkIFdlYkluc3BlY3RvclNlcnZl
cjo6YnVpbGRQYWdlTGlzdChWZWN0b3I8Y2hhcj4mIGRhdGEsIFN0cmluZyYgY29udGVudFR5cGUp
CiAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJbICIpOwogICAgIENsaWVudE1hcDo6aXRlcmF0
b3IgZW5kID0gbV9jbGllbnRNYXAuZW5kKCk7CiAgICAgZm9yIChDbGllbnRNYXA6Oml0ZXJhdG9y
IGl0ID0gbV9jbGllbnRNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFdl
YlBhZ2VQcm94eSogd2ViUGFnZSA9IGl0LT5zZWNvbmQtPnBhZ2UoKTsKKyAgICAgICAgV2ViUGFn
ZVByb3h5KiB3ZWJQYWdlID0gaXQtPnZhbHVlLT5wYWdlKCk7CiAgICAgICAgIGlmIChpdCAhPSBt
X2NsaWVudE1hcC5iZWdpbigpKQogICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIs
ICIpOwogICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoInsgXCJpZFwiOiAiKTsKLSAgICAg
ICAgYnVpbGRlci5hcHBlbmROdW1iZXIoaXQtPmZpcnN0KTsKKyAgICAgICAgYnVpbGRlci5hcHBl
bmROdW1iZXIoaXQtPmtleSk7CiAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiLCBcInRp
dGxlXCI6IFwiIik7CiAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHdlYlBhZ2UtPnBhZ2VUaXRsZSgp
KTsKICAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJcIiwgXCJ1cmxcIjogXCIiKTsKICAg
ICAgICAgYnVpbGRlci5hcHBlbmQod2ViUGFnZS0+YWN0aXZlVVJMKCkpOwogICAgICAgICBidWls
ZGVyLmFwcGVuZExpdGVyYWwoIlwiLCBcImluc3BlY3RvclVybFwiOiBcIiIpOwogICAgICAgICBi
dWlsZGVyLmFwcGVuZChyZW1vdGVJbnNwZWN0b3JQYWdlUGF0aCgpKTsKLSAgICAgICAgYnVpbGRl
ci5hcHBlbmROdW1iZXIoaXQtPmZpcnN0KTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmROdW1iZXIo
aXQtPmtleSk7CiAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiXCIgfSIpOwogICAgIH0K
ICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiBdIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvTm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVz
dE1hbmFnZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTm90aWZpY2F0aW9u
cy9Ob3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5jcHAKaW5kZXggMDc5
MjI5ODVlNDU2NWYzYzczY2FkYzNhMGNmNDU1MjE3YzYxOTk2OS4uNGEwYzQ3NTI5MzdiODcyZDVk
ZTI2OWM5MTY5NGUyMjE4ZDMyMGUxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL05vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJv
eHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Ob3RpZmljYXRpb25zL05vdGlm
aWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcApAQCAtNDMsNyArNDMsNyBA
QCB2b2lkIE5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5OjppbnZhbGlk
YXRlUmVxdWVzdHMoKQogICAgIFBlbmRpbmdSZXF1ZXN0TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9
IG1fcGVuZGluZ1JlcXVlc3RzLmJlZ2luKCk7CiAgICAgUGVuZGluZ1JlcXVlc3RNYXA6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IG1fcGVuZGluZ1JlcXVlc3RzLmVuZCgpOwogICAgIGZvciAoOyBpdCAh
PSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPmludmFsaWRhdGUoKTsKKyAgICAgICAg
aXQtPnZhbHVlLT5pbnZhbGlkYXRlKCk7CiAgICAgCiAgICAgbV9wZW5kaW5nUmVxdWVzdHMuY2xl
YXIoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL1Bs
dWdpblByb2Nlc3NQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9Q
bHVnaW5Qcm9jZXNzUHJveHkuY3BwCmluZGV4IGQxNzk5Njg5YjI3MGU3NmVmMWMyYzBlY2Y1ZDUz
YjM3MDYwZWZiNjEuLjc3OTZjZmU5N2E1NTI0ZWQwYjk4Yjc1N2FhNDNjZWZkNTY1N2RhMjYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NQ
cm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJv
Y2Vzc1Byb3h5LmNwcApAQCAtMTUyLDEwICsxNTIsMTAgQEAgdm9pZCBQbHVnaW5Qcm9jZXNzUHJv
eHk6OnBsdWdpblByb2Nlc3NDcmFzaGVkT3JGYWlsZWRUb0xhdW5jaCgpCiAgICAgfQogCiAgICAg
d2hpbGUgKCFtX3BlbmRpbmdHZXRTaXRlc1JlcGxpZXMuaXNFbXB0eSgpKQotICAgICAgICBkaWRH
ZXRTaXRlc1dpdGhEYXRhKFZlY3RvcjxTdHJpbmc+KCksIG1fcGVuZGluZ0dldFNpdGVzUmVwbGll
cy5iZWdpbigpLT5maXJzdCk7CisgICAgICAgIGRpZEdldFNpdGVzV2l0aERhdGEoVmVjdG9yPFN0
cmluZz4oKSwgbV9wZW5kaW5nR2V0U2l0ZXNSZXBsaWVzLmJlZ2luKCktPmtleSk7CiAKICAgICB3
aGlsZSAoIW1fcGVuZGluZ0NsZWFyU2l0ZURhdGFSZXBsaWVzLmlzRW1wdHkoKSkKLSAgICAgICAg
ZGlkQ2xlYXJTaXRlRGF0YShtX3BlbmRpbmdDbGVhclNpdGVEYXRhUmVwbGllcy5iZWdpbigpLT5m
aXJzdCk7CisgICAgICAgIGRpZENsZWFyU2l0ZURhdGEobV9wZW5kaW5nQ2xlYXJTaXRlRGF0YVJl
cGxpZXMuYmVnaW4oKS0+a2V5KTsKIAogICAgIC8vIFRlbGwgdGhlIHBsdWctaW4gcHJvY2VzcyBt
YW5hZ2VyIHRvIGZvcmdldCBhYm91dCB0aGlzIHBsdWctaW4gcHJvY2VzcyBwcm94eS4gVGhpcyBt
YXkgY2F1c2UgdXMgdG8gYmUgZGVsZXRlZC4KICAgICBtX3BsdWdpblByb2Nlc3NNYW5hZ2VyLT5y
ZW1vdmVQbHVnaW5Qcm9jZXNzUHJveHkodGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
Q29udGV4dC5jcHAKaW5kZXggMGQyYjM0YzUxNzFiZmVmZTYyMzM4NmMyNjBkYTYyNDliYzZhOTVh
NC4uZmUwNDQxMTA3Yzc0MTBiN2JlNWIzM2U0MmVmYzRiMjk5NThmZTcwMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmNwcApAQCAtOTg5LDcgKzk4OSw3IEBAIHN0YXRpYyBQ
YXNzUmVmUHRyPE11dGFibGVEaWN0aW9uYXJ5PiBjcmVhdGVEaWN0aW9uYXJ5RnJvbUhhc2hNYXAo
Y29uc3QgSGFzaE1hcDxTCiAgICAgUmVmUHRyPE11dGFibGVEaWN0aW9uYXJ5PiByZXN1bHQgPSBN
dXRhYmxlRGljdGlvbmFyeTo6Y3JlYXRlKCk7CiAgICAgSGFzaE1hcDxTdHJpbmcsIHVpbnQ2NF90
Pjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDxTdHJp
bmcsIHVpbnQ2NF90Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KQotICAgICAgICByZXN1bHQtPnNldChpdC0+Zmlyc3QsIFJlZlB0cjxXZWJVSW50NjQ+
KFdlYlVJbnQ2NDo6Y3JlYXRlKGl0LT5zZWNvbmQpKS5nZXQoKSk7CisgICAgICAgIHJlc3VsdC0+
c2V0KGl0LT5rZXksIFJlZlB0cjxXZWJVSW50NjQ+KFdlYlVJbnQ2NDo6Y3JlYXRlKGl0LT52YWx1
ZSkpLmdldCgpKTsKICAgICAKICAgICByZXR1cm4gcmVzdWx0OwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkljb25EYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViSWNvbkRhdGFiYXNlLmNwcAppbmRleCBlZDQ4MGU3Mjc4YmViMDkxN2Rh
ZDAyNTY3N2NhNjcxOGQ2ZDE3ODliLi5lNmYwNjJlYjMxYWNhMGY4NzQwYmNkYzUxNjhjMzRhYjhl
ZDNjM2JiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViSWNvbkRhdGFi
YXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViSWNvbkRhdGFiYXNlLmNw
cApAQCAtMjY4LDE0ICsyNjgsMTQgQEAgdm9pZCBXZWJJY29uRGF0YWJhc2U6OmRpZEZpbmlzaFVS
TEltcG9ydCgpCiAgICAgSGFzaE1hcDx1aW50NjRfdCwgU3RyaW5nPjo6aXRlcmF0b3IgZW5kID0g
bV9wZW5kaW5nTG9hZERlY2lzaW9uVVJMTWFwLmVuZCgpOwogICAgIAogICAgIGZvciAoOyBpICE9
IGVuZDsgKytpKSB7Ci0gICAgICAgIExPRyhJY29uRGF0YWJhc2UsICJXSzIgVUlQcm9jZXNzIHBl
cmZvcm1pbmcgZGVsYXllZCBjYWxsYmFjayBvbiBjYWxsYmFjayBJRCAlaSBmb3IgcGFnZSB1cmwg
JXMiLCAoaW50KWktPmZpcnN0LCBpLT5zZWNvbmQuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICBJ
Y29uTG9hZERlY2lzaW9uIGRlY2lzaW9uID0gbV9pY29uRGF0YWJhc2VJbXBsLT5zeW5jaHJvbm91
c0xvYWREZWNpc2lvbkZvckljb25VUkwoaS0+c2Vjb25kLCAwKTsKKyAgICAgICAgTE9HKEljb25E
YXRhYmFzZSwgIldLMiBVSVByb2Nlc3MgcGVyZm9ybWluZyBkZWxheWVkIGNhbGxiYWNrIG9uIGNh
bGxiYWNrIElEICVpIGZvciBwYWdlIHVybCAlcyIsIChpbnQpaS0+a2V5LCBpLT52YWx1ZS5hc2Np
aSgpLmRhdGEoKSk7CisgICAgICAgIEljb25Mb2FkRGVjaXNpb24gZGVjaXNpb24gPSBtX2ljb25E
YXRhYmFzZUltcGwtPnN5bmNocm9ub3VzTG9hZERlY2lzaW9uRm9ySWNvblVSTChpLT52YWx1ZSwg
MCk7CiAKICAgICAgICAgLy8gRGVjaXNpb25zIHNob3VsZCBuZXZlciBiZSB1bmtub3duIGFmdGVy
IHRoZSBpbml0YWwgaW1wb3J0IGlzIGNvbXBsZXRlCiAgICAgICAgIEFTU0VSVChkZWNpc2lvbiAh
PSBJY29uTG9hZFVua25vd24pOwogCiAgICAgICAgIC8vIEZJWE1FIChNdWx0aS1XZWJQcm9jZXNz
KTogPHJkYXI6Ly9wcm9ibGVtLzEyMjQwMjIzPiBXZSBuZWVkIHRvIGtub3cgd2hpY2ggY29ubmVj
dGlvbiB0byBzZW5kIHRoaXMgbWVzc2FnZSB0by4KLSAgICAgICAgbV93ZWJDb250ZXh0LT5zZW5k
VG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYkljb25EYXRhYmFzZVByb3h5OjpSZWNlaXZlZElj
b25Mb2FkRGVjaXNpb24oc3RhdGljX2Nhc3Q8aW50PihkZWNpc2lvbiksIGktPmZpcnN0KSk7Cisg
ICAgICAgIG1fd2ViQ29udGV4dC0+c2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJJY29u
RGF0YWJhc2VQcm94eTo6UmVjZWl2ZWRJY29uTG9hZERlY2lzaW9uKHN0YXRpY19jYXN0PGludD4o
ZGVjaXNpb24pLCBpLT5rZXkpKTsKICAgICB9CiAgICAgCiAgICAgbV9wZW5kaW5nTG9hZERlY2lz
aW9uVVJMTWFwLmNsZWFyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViSW50ZW50RGF0YS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViSW50ZW50RGF0
YS5jcHAKaW5kZXggNjMyYWEzYjc1NTRkYjI0M2JkMzc1ZGQ3OTIxMzk1MzFlNjlhZTFmZC4uYzZk
OGM2NGJhODU5NjI1MWQ1ZDM2Y2ZlOTE5YTI5NjM4MjcxMTk0YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYkludGVudERhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJJbnRlbnREYXRhLmNwcApAQCAtNzgsNyArNzgsNyBAQCBQYXNzUmVmUHRy
PEltbXV0YWJsZURpY3Rpb25hcnk+IFdlYkludGVudERhdGE6OmV4dHJhcygpIGNvbnN0CiAgICAg
SW1tdXRhYmxlRGljdGlvbmFyeTo6TWFwVHlwZSB3a0V4dHJhczsKICAgICBIYXNoTWFwPFN0cmlu
ZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9zdG9yZS5leHRyYXMuZW5kKCk7CiAg
ICAgZm9yIChIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3N0
b3JlLmV4dHJhcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHdrRXh0cmFzLnNl
dChpdC0+Zmlyc3QsIFdlYlN0cmluZzo6Y3JlYXRlKGl0LT5zZWNvbmQpKTsKKyAgICAgICAgd2tF
eHRyYXMuc2V0KGl0LT5rZXksIFdlYlN0cmluZzo6Y3JlYXRlKGl0LT52YWx1ZSkpOwogCiAgICAg
cmV0dXJuIEltbXV0YWJsZURpY3Rpb25hcnk6OmFkb3B0KHdrRXh0cmFzKTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAKaW5kZXggODEyNDA5OWFlNjkx
MjUzODc5OThlZDA0MTc1YTAzNDI5M2U3OWFhYy4uNzZjYjQyN2U2MzE4M2Y2NGMzYzI4NDNmYjk4
OTFhNzJkMWUyNDYxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBy
b2Nlc3NQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQ
cm94eS5jcHAKQEAgLTI2MCw5ICsyNjAsOSBAQCBib29sIFdlYlByb2Nlc3NQcm94eTo6Y2hlY2tV
UkxSZWNlaXZlZEZyb21XZWJQcm9jZXNzKGNvbnN0IEtVUkwmIHVybCkKICAgICAvLyBJdGVtcyBp
biBiYWNrL2ZvcndhcmQgbGlzdCBoYXZlIGJlZW4gYWxyZWFkeSBjaGVja2VkLgogICAgIC8vIE9u
ZSBjYXNlIHdoZXJlIHdlIGRvbid0IGhhdmUgc2FuZGJveCBleHRlbnNpb25zIGZvciBmaWxlIFVS
THMgaW4gYi9mIGxpc3QgaXMgaWYgdGhlIGxpc3QgaGFzIGJlZW4gcmVpbnN0YXRlZCBhZnRlciBh
IGNyYXNoIG9yIGEgYnJvd3NlciByZXN0YXJ0LgogICAgIGZvciAoV2ViQmFja0ZvcndhcmRMaXN0
SXRlbU1hcDo6aXRlcmF0b3IgaXRlciA9IG1fYmFja0ZvcndhcmRMaXN0SXRlbU1hcC5iZWdpbigp
LCBlbmQgPSBtX2JhY2tGb3J3YXJkTGlzdEl0ZW1NYXAuZW5kKCk7IGl0ZXIgIT0gZW5kOyArK2l0
ZXIpIHsKLSAgICAgICAgaWYgKEtVUkwoS1VSTCgpLCBpdGVyLT5zZWNvbmQtPnVybCgpKS5maWxl
U3lzdGVtUGF0aCgpID09IHBhdGgpCisgICAgICAgIGlmIChLVVJMKEtVUkwoKSwgaXRlci0+dmFs
dWUtPnVybCgpKS5maWxlU3lzdGVtUGF0aCgpID09IHBhdGgpCiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgaWYgKEtVUkwoS1VSTCgpLCBpdGVyLT5zZWNvbmQtPm9yaWdpbmFsVVJM
KCkpLmZpbGVTeXN0ZW1QYXRoKCkgPT0gcGF0aCkKKyAgICAgICAgaWYgKEtVUkwoS1VSTCgpLCBp
dGVyLT52YWx1ZS0+b3JpZ2luYWxVUkwoKSkuZmlsZVN5c3RlbVBhdGgoKSA9PSBwYXRoKQogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0yODUsMTUgKzI4NSwxNSBAQCB2b2lk
IFdlYlByb2Nlc3NQcm94eTo6YWRkQmFja0ZvcndhcmRJdGVtKHVpbnQ2NF90IGl0ZW1JRCwgY29u
c3QgU3RyaW5nJiBvcmlnaW5hbAogCiAgICAgV2ViQmFja0ZvcndhcmRMaXN0SXRlbU1hcDo6QWRk
UmVzdWx0IHJlc3VsdCA9IG1fYmFja0ZvcndhcmRMaXN0SXRlbU1hcC5hZGQoaXRlbUlELCAwKTsK
ICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5z
ZWNvbmQgPSBXZWJCYWNrRm9yd2FyZExpc3RJdGVtOjpjcmVhdGUob3JpZ2luYWxVUkwsIHVybCwg
dGl0bGUsIGJhY2tGb3J3YXJkRGF0YS5kYXRhKCksIGJhY2tGb3J3YXJkRGF0YS5zaXplKCksIGl0
ZW1JRCk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBXZWJCYWNrRm9yd2FyZExp
c3RJdGVtOjpjcmVhdGUob3JpZ2luYWxVUkwsIHVybCwgdGl0bGUsIGJhY2tGb3J3YXJkRGF0YS5k
YXRhKCksIGJhY2tGb3J3YXJkRGF0YS5zaXplKCksIGl0ZW1JRCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKICAgICAvLyBVcGRhdGUgZXhpc3RpbmcgaXRlbS4KLSAgICByZXN1bHQuaXRlcmF0
b3ItPnNlY29uZC0+c2V0T3JpZ2luYWxVUkwob3JpZ2luYWxVUkwpOwotICAgIHJlc3VsdC5pdGVy
YXRvci0+c2Vjb25kLT5zZXRVUkwodXJsKTsKLSAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZC0+
c2V0VGl0bGUodGl0bGUpOwotICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLT5zZXRCYWNrRm9y
d2FyZERhdGEoYmFja0ZvcndhcmREYXRhLmRhdGEoKSwgYmFja0ZvcndhcmREYXRhLnNpemUoKSk7
CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+c2V0T3JpZ2luYWxVUkwob3JpZ2luYWxVUkwp
OworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPnNldFVSTCh1cmwpOworICAgIHJlc3VsdC5p
dGVyYXRvci0+dmFsdWUtPnNldFRpdGxlKHRpdGxlKTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZh
bHVlLT5zZXRCYWNrRm9yd2FyZERhdGEoYmFja0ZvcndhcmREYXRhLmRhdGEoKSwgYmFja0Zvcndh
cmREYXRhLnNpemUoKSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpzZW5kRGlkR2V0UGx1
Z2lucyh1aW50NjRfdCByZXF1ZXN0SUQsIFBhc3NPd25QdHI8VmVjdG9yPFBsdWdpbkluZm8+ID4g
cGx1Z2luSW5mb3MpCkBAIC01NjMsNyArNTYzLDcgQEAgc2l6ZV90IFdlYlByb2Nlc3NQcm94eTo6
ZnJhbWVDb3VudEluUGFnZShXZWJQYWdlUHJveHkqIHBhZ2UpIGNvbnN0CiB7CiAgICAgc2l6ZV90
IHJlc3VsdCA9IDA7CiAgICAgZm9yIChIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8V2ViRnJhbWVQ
cm94eT4gPjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1fZnJhbWVNYXAuYmVnaW4oKTsgaXRlciAh
PSBtX2ZyYW1lTWFwLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgaWYgKGl0ZXItPnNlY29uZC0+
cGFnZSgpID09IHBhZ2UpCisgICAgICAgIGlmIChpdGVyLT52YWx1ZS0+cGFnZSgpID09IHBhZ2Up
CiAgICAgICAgICAgICArK3Jlc3VsdDsKICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvR2VvbG9jYXRpb24vR2VvbG9jYXRpb25Q
ZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9H
ZW9sb2NhdGlvbi9HZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5jcHAKaW5kZXgg
NzAxM2ZjZGM2Y2M2YTUxZTU4ZWViZDliOGViODAwMjAyNGY1NGZiMi4uMGQxMTBjNTNhMDZkZmJh
NGZhOGZmOTA1NWM4NWU5MjBkZGFhNDJiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9HZW9sb2NhdGlvbi9HZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9HZW9sb2NhdGlvbi9HZW9sb2NhdGlv
blBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5jcHAKQEAgLTczLDcgKzczLDcgQEAgdm9pZCBHZW9s
b2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlcjo6Y2FuY2VsUmVxdWVzdEZvckdlb2xvY2F0
aW9uKEdlb2xvY2F0aW8KICAgICBpZiAoaXQgPT0gbV9nZW9sb2NhdGlvblRvSURNYXAuZW5kKCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIHVpbnQ2NF90IGdlb2xvY2F0aW9uSUQgPSBpdC0+c2Vj
b25kOworICAgIHVpbnQ2NF90IGdlb2xvY2F0aW9uSUQgPSBpdC0+dmFsdWU7CiAgICAgbV9nZW9s
b2NhdGlvblRvSURNYXAucmVtb3ZlKGl0KTsKICAgICBtX2lkVG9HZW9sb2NhdGlvbk1hcC5yZW1v
dmUoZ2VvbG9jYXRpb25JRCk7CiB9CkBAIC04NCw3ICs4NCw3IEBAIHZvaWQgR2VvbG9jYXRpb25Q
ZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXI6OmRpZFJlY2VpdmVHZW9sb2NhdGlvblBlcm1pc3Npb25E
ZWNpc2lvCiAgICAgaWYgKGl0ID09IG1faWRUb0dlb2xvY2F0aW9uTWFwLmVuZCgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBHZW9sb2NhdGlvbiogZ2VvbG9jYXRpb24gPSBpdC0+c2Vjb25kOwor
ICAgIEdlb2xvY2F0aW9uKiBnZW9sb2NhdGlvbiA9IGl0LT52YWx1ZTsKICAgICBnZW9sb2NhdGlv
bi0+c2V0SXNBbGxvd2VkKGFsbG93ZWQpOwogCiAgICAgbV9pZFRvR2VvbG9jYXRpb25NYXAucmVt
b3ZlKGl0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvRE9NL0luamVjdGVkQnVuZGxlTm9kZUhhbmRsZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGUuY3Bw
CmluZGV4IDBjNDI5NWU2MTJjZGQ3NmYwM2E1MzEzZDQ1ZTZjZWMxZmIxZTg1OTYuLjc3ZTAzMDkz
ZDVmZDBkOTY0MjRkMzE1NGY3N2M5NGQ0MTk0YjE2ZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxlTm9kZUhhbmRs
ZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00v
SW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlLmNwcApAQCAtNjksMTAgKzY5LDEwIEBAIFBhc3NSZWZQ
dHI8SW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlPiBJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU6Omdl
dE9yQ3JlYXRlKE5vZGUqCiAKICAgICBET01IYW5kbGVDYWNoZTo6QWRkUmVzdWx0IHJlc3VsdCA9
IGRvbUhhbmRsZUNhY2hlKCkuYWRkKG5vZGUsIDApOwogICAgIGlmICghcmVzdWx0LmlzTmV3RW50
cnkpCi0gICAgICAgIHJldHVybiBQYXNzUmVmUHRyPEluamVjdGVkQnVuZGxlTm9kZUhhbmRsZT4o
cmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOworICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxJbmpl
Y3RlZEJ1bmRsZU5vZGVIYW5kbGU+KHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwogCiAgICAgUmVm
UHRyPEluamVjdGVkQnVuZGxlTm9kZUhhbmRsZT4gbm9kZUhhbmRsZSA9IEluamVjdGVkQnVuZGxl
Tm9kZUhhbmRsZTo6Y3JlYXRlKG5vZGUpOwotICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0g
bm9kZUhhbmRsZS5nZXQoKTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gbm9kZUhhbmRs
ZS5nZXQoKTsKICAgICByZXR1cm4gbm9kZUhhbmRsZS5yZWxlYXNlKCk7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVk
QnVuZGxlUmFuZ2VIYW5kbGUuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5jcHAKaW5kZXggMWI3NGYwMTI0
MDA4ZGIzYzA3ODI4ZWE2ZjZkMmMwNWFjMDU5YzMwNi4uZDYwMDBhYjkxMzMyOWNkNTdkYWIzZTNm
ZDY0MDE0Yzc2ZTk1MmRjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVS
YW5nZUhhbmRsZS5jcHAKQEAgLTQ4LDEwICs0OCwxMCBAQCBQYXNzUmVmUHRyPEluamVjdGVkQnVu
ZGxlUmFuZ2VIYW5kbGU+IEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OmdldE9yQ3JlYXRlKFJh
bgogCiAgICAgRE9NSGFuZGxlQ2FjaGU6OkFkZFJlc3VsdCByZXN1bHQgPSBkb21IYW5kbGVDYWNo
ZSgpLmFkZChyYW5nZSwgMCk7CiAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAg
cmV0dXJuIFBhc3NSZWZQdHI8SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZT4ocmVzdWx0Lml0ZXJh
dG9yLT5zZWNvbmQpOworICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxJbmplY3RlZEJ1bmRsZVJh
bmdlSGFuZGxlPihyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKIAogICAgIFJlZlB0cjxJbmplY3Rl
ZEJ1bmRsZVJhbmdlSGFuZGxlPiByYW5nZUhhbmRsZSA9IEluamVjdGVkQnVuZGxlUmFuZ2VIYW5k
bGU6OmNyZWF0ZShyYW5nZSk7Ci0gICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSByYW5nZUhh
bmRsZS5nZXQoKTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gcmFuZ2VIYW5kbGUuZ2V0
KCk7CiAgICAgcmV0dXJuIHJhbmdlSGFuZGxlLnJlbGVhc2UoKTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZUlu
dGVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVj
dGVkQnVuZGxlSW50ZW50LmNwcAppbmRleCA5MmRlNjFjNmMyYmQ2ZTllNDJjNDc1ZGFhMDdjMDE3
NzliMTc1N2NlLi5kOGFjM2EyNWRmMzViNGEwNWYwMjJjMTBhMzM4NDdmNjZmZjk2ZThjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVk
QnVuZGxlSW50ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0luamVjdGVkQnVuZGxlSW50ZW50LmNwcApAQCAtNzksNyArNzksNyBAQCBQYXNzUmVm
UHRyPEltbXV0YWJsZURpY3Rpb25hcnk+IEluamVjdGVkQnVuZGxlSW50ZW50OjpleHRyYXMoKSBj
b25zdAogICAgIEltbXV0YWJsZURpY3Rpb25hcnk6Ok1hcFR5cGUgd2tFeHRyYXM7CiAgICAgSGFz
aE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGV4dHJhcy5lbmQoKTsK
ICAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGV4
dHJhcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHdrRXh0cmFzLnNldChpdC0+
Zmlyc3QsIFdlYlN0cmluZzo6Y3JlYXRlKGl0LT5zZWNvbmQpKTsKKyAgICAgICAgd2tFeHRyYXMu
c2V0KGl0LT5rZXksIFdlYlN0cmluZzo6Y3JlYXRlKGl0LT52YWx1ZSkpOwogCiAgICAgcmV0dXJu
IEltbXV0YWJsZURpY3Rpb25hcnk6OmFkb3B0KHdrRXh0cmFzKTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTm90aWZpY2F0aW9ucy9XZWJOb3RpZmljYXRpb25NYW5h
Z2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTm90aWZpY2F0aW9ucy9XZWJOb3Rp
ZmljYXRpb25NYW5hZ2VyLmNwcAppbmRleCA1YWMyY2RjM2U0NWQxZjdhMzgyZWRiMDM3NzA5NWVm
NTg0MDc5NzU1Li43YjY4OTEyZmU5YWFiYjQyYzJlNzhjYWY0ODY0OWVhNTA3MDQyM2UwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05vdGlmaWNhdGlvbnMvV2ViTm90aWZp
Y2F0aW9uTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Ob3RpZmlj
YXRpb25zL1dlYk5vdGlmaWNhdGlvbk1hbmFnZXIuY3BwCkBAIC0xMDcsNyArMTA3LDcgQEAgTm90
aWZpY2F0aW9uQ2xpZW50OjpQZXJtaXNzaW9uIFdlYk5vdGlmaWNhdGlvbk1hbmFnZXI6OnBvbGlj
eUZvck9yaWdpbihXZWJDb3JlOjoKICAgICBBU1NFUlQoIW9yaWdpbi0+aXNVbmlxdWUoKSk7CiAg
ICAgSGFzaE1hcDxTdHJpbmcsIGJvb2w+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGVybWlzc2lv
bnNNYXAuZmluZChvcmlnaW4tPnRvUmF3U3RyaW5nKCkpOwogICAgIGlmIChpdCAhPSBtX3Blcm1p
c3Npb25zTWFwLmVuZCgpKQotICAgICAgICByZXR1cm4gaXQtPnNlY29uZCA/IE5vdGlmaWNhdGlv
bkNsaWVudDo6UGVybWlzc2lvbkFsbG93ZWQgOiBOb3RpZmljYXRpb25DbGllbnQ6OlBlcm1pc3Np
b25EZW5pZWQ7CisgICAgICAgIHJldHVybiBpdC0+dmFsdWUgPyBOb3RpZmljYXRpb25DbGllbnQ6
OlBlcm1pc3Npb25BbGxvd2VkIDogTm90aWZpY2F0aW9uQ2xpZW50OjpQZXJtaXNzaW9uRGVuaWVk
OwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0ob3JpZ2luKTsKICNlbmRpZgpAQCAtMTQ1LDcgKzE0
NSw3IEBAIGJvb2wgV2ViTm90aWZpY2F0aW9uTWFuYWdlcjo6c2hvdyhOb3RpZmljYXRpb24qIG5v
dGlmaWNhdGlvbiwgV2ViUGFnZSogcGFnZSkKICAgICBtX25vdGlmaWNhdGlvbklETWFwLnNldChu
b3RpZmljYXRpb25JRCwgbm90aWZpY2F0aW9uKTsKICAgICAKICAgICBOb3RpZmljYXRpb25Db250
ZXh0TWFwOjppdGVyYXRvciBpdCA9IG1fbm90aWZpY2F0aW9uQ29udGV4dE1hcC5hZGQobm90aWZp
Y2F0aW9uLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIFZlY3Rvcjx1aW50NjRfdD4oKSkuaXRl
cmF0b3I7Ci0gICAgaXQtPnNlY29uZC5hcHBlbmQobm90aWZpY2F0aW9uSUQpOworICAgIGl0LT52
YWx1ZS5hcHBlbmQobm90aWZpY2F0aW9uSUQpOwogCiAjaWYgRU5BQkxFKE5PVElGSUNBVElPTlMp
CiAgICAgbV9wcm9jZXNzLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94
eTo6U2hvd05vdGlmaWNhdGlvbihub3RpZmljYXRpb24tPnRpdGxlKCksIG5vdGlmaWNhdGlvbi0+
Ym9keSgpLCBub3RpZmljYXRpb24tPmljb25VUkwoKS5zdHJpbmcoKSwgbm90aWZpY2F0aW9uLT50
YWcoKSwgbm90aWZpY2F0aW9uLT5sYW5nKCksIG5vdGlmaWNhdGlvbi0+ZGlyKCksIG5vdGlmaWNh
dGlvbi0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmlu
ZygpLCBub3RpZmljYXRpb25JRCksIHBhZ2UtPnBhZ2VJRCgpKTsKQEAgLTE4NCw3ICsxODQsNyBA
QCB2b2lkIFdlYk5vdGlmaWNhdGlvbk1hbmFnZXI6OmNsZWFyTm90aWZpY2F0aW9ucyhXZWJDb3Jl
OjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KgogICAgIGlmIChpdCA9PSBtX25vdGlmaWNhdGlvbkNv
bnRleHRNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBWZWN0b3I8dWludDY0
X3Q+JiBub3RpZmljYXRpb25JRHMgPSBpdC0+c2Vjb25kOworICAgIFZlY3Rvcjx1aW50NjRfdD4m
IG5vdGlmaWNhdGlvbklEcyA9IGl0LT52YWx1ZTsKICAgICBtX3Byb2Nlc3MtPmNvbm5lY3Rpb24o
KS0+c2VuZChNZXNzYWdlczo6V2ViTm90aWZpY2F0aW9uTWFuYWdlclByb3h5OjpDbGVhck5vdGlm
aWNhdGlvbnMobm90aWZpY2F0aW9uSURzKSwgcGFnZS0+cGFnZUlEKCkpOwogICAgIHNpemVfdCBj
b3VudCA9IG5vdGlmaWNhdGlvbklEcy5zaXplKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBjb3VudDsgKytpKSB7CkBAIC0yODEsMTAgKzI4MSwxMCBAQCB2b2lkIFdlYk5vdGlmaWNhdGlv
bk1hbmFnZXI6OnJlbW92ZU5vdGlmaWNhdGlvbkZyb21Db250ZXh0TWFwKHVpbnQ2NF90IG5vdGlm
aWNhdAogICAgIC8vIFRoaXMgaXMgYSBoZWxwZXIgZnVuY3Rpb24gZm9yIG1hbmFnaW5nIHRoZSBo
YXNoIG1hcHMuCiAgICAgTm90aWZpY2F0aW9uQ29udGV4dE1hcDo6aXRlcmF0b3IgaXQgPSBtX25v
dGlmaWNhdGlvbkNvbnRleHRNYXAuZmluZChub3RpZmljYXRpb24tPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSk7CiAgICAgQVNTRVJUKGl0ICE9IG1fbm90aWZpY2F0aW9uQ29udGV4dE1hcC5lbmQo
KSk7Ci0gICAgc2l6ZV90IGluZGV4ID0gaXQtPnNlY29uZC5maW5kKG5vdGlmaWNhdGlvbklEKTsK
KyAgICBzaXplX3QgaW5kZXggPSBpdC0+dmFsdWUuZmluZChub3RpZmljYXRpb25JRCk7CiAgICAg
QVNTRVJUKGluZGV4ICE9IG5vdEZvdW5kKTsKLSAgICBpdC0+c2Vjb25kLnJlbW92ZShpbmRleCk7
Ci0gICAgaWYgKGl0LT5zZWNvbmQuaXNFbXB0eSgpKQorICAgIGl0LT52YWx1ZS5yZW1vdmUoaW5k
ZXgpOworICAgIGlmIChpdC0+dmFsdWUuaXNFbXB0eSgpKQogICAgICAgICBtX25vdGlmaWNhdGlv
bkNvbnRleHRNYXAucmVtb3ZlKGl0KTsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QUnVudGltZU9iamVjdE1hcC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lT2Jq
ZWN0TWFwLmNwcAppbmRleCA5ZGNkOTE2Njk4NzM2Nzk3MTliOGZmZDQyYmI2ZTZmOGZlMTc5ODc3
Li5mY2E4OTA5ZDY5NDU0NGIzN2I3NzU5ZTY2ZTYzMDIyY2QxYTY0NTY2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0
TWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUv
TlBSdW50aW1lT2JqZWN0TWFwLmNwcApAQCAtMjEyLDcgKzIxMiw3IEBAIHZvaWQgTlBSdW50aW1l
T2JqZWN0TWFwOjppbnZhbGlkYXRlKCkKICAgICBWZWN0b3I8TlBPYmplY3QqPiBvYmplY3RzOwog
CiAgICAgZm9yIChIYXNoTWFwPE5QT2JqZWN0KiwgSlNDOjpXZWFrPEpTTlBPYmplY3Q+ID46Oml0
ZXJhdG9yIHB0ciA9IG1fanNOUE9iamVjdHMuYmVnaW4oKSwgZW5kID0gbV9qc05QT2JqZWN0cy5l
bmQoKTsgcHRyICE9IGVuZDsgKytwdHIpIHsKLSAgICAgICAgSlNOUE9iamVjdCoganNOUE9iamVj
dCA9IHB0ci0+c2Vjb25kLmdldCgpOworICAgICAgICBKU05QT2JqZWN0KiBqc05QT2JqZWN0ID0g
cHRyLT52YWx1ZS5nZXQoKTsKICAgICAgICAgaWYgKCFqc05QT2JqZWN0KSAvLyBTa2lwIHpvbWJp
ZXMuCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgb2JqZWN0cy5hcHBlbmQoanNOUE9i
amVjdC0+bGVha05QT2JqZWN0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbi5jcHAKaW5kZXggYjQx
NjJhMWE5OWMyMjAxMTk1MjQ3NTkyZDkxY2RmZGI0MzQxOWY4My4uZTI4Yzc4ZDhmZjM4ZWQ5MzZh
Nzk4Y2M0MGMwYjVlNWFlYzVjYmM1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW4uY3BwCkBAIC0x
OTgsOCArMTk4LDggQEAgTlBFcnJvciBOZXRzY2FwZVBsdWdpbjo6ZGVzdHJveVN0cmVhbShOUFN0
cmVhbSogc3RyZWFtLCBOUFJlYXNvbiByZWFzb24pCiAgICAgTmV0c2NhcGVQbHVnaW5TdHJlYW0q
IHBsdWdpblN0cmVhbSA9IDA7CiAKICAgICBmb3IgKFN0cmVhbXNNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbV9zdHJlYW1zLmJlZ2luKCksIGVuZCA9IG1fc3RyZWFtcy5lbmQoKTsgaXQgIT0gZW5k
OyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kLT5ucFN0cmVhbSgpID09IHN0cmVhbSkg
ewotICAgICAgICAgICAgcGx1Z2luU3RyZWFtID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAg
aWYgKGl0LT52YWx1ZS0+bnBTdHJlYW0oKSA9PSBzdHJlYW0pIHsKKyAgICAgICAgICAgIHBsdWdp
blN0cmVhbSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgfQpAQCAtNzY4LDggKzc2OCw4IEBAIHZvaWQgTmV0c2NhcGVQbHVnaW46OmZyYW1lRGlk
RmluaXNoTG9hZGluZyh1aW50NjRfdCByZXF1ZXN0SUQpCiAgICAgaWYgKGl0ID09IG1fcGVuZGlu
Z1VSTE5vdGlmaWNhdGlvbnMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFN0cmluZyB1
cmwgPSBpdC0+c2Vjb25kLmZpcnN0OwotICAgIHZvaWQqIG5vdGlmaWNhdGlvbkRhdGEgPSBpdC0+
c2Vjb25kLnNlY29uZDsKKyAgICBTdHJpbmcgdXJsID0gaXQtPnZhbHVlLmZpcnN0OworICAgIHZv
aWQqIG5vdGlmaWNhdGlvbkRhdGEgPSBpdC0+dmFsdWUuc2Vjb25kOwogCiAgICAgbV9wZW5kaW5n
VVJMTm90aWZpY2F0aW9ucy5yZW1vdmUoaXQpOwogICAgIApAQCAtNzg0LDggKzc4NCw4IEBAIHZv
aWQgTmV0c2NhcGVQbHVnaW46OmZyYW1lRGlkRmFpbCh1aW50NjRfdCByZXF1ZXN0SUQsIGJvb2wg
d2FzQ2FuY2VsbGVkKQogICAgIGlmIChpdCA9PSBtX3BlbmRpbmdVUkxOb3RpZmljYXRpb25zLmVu
ZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBTdHJpbmcgdXJsID0gaXQtPnNlY29uZC5maXJz
dDsKLSAgICB2b2lkKiBub3RpZmljYXRpb25EYXRhID0gaXQtPnNlY29uZC5zZWNvbmQ7CisgICAg
U3RyaW5nIHVybCA9IGl0LT52YWx1ZS5maXJzdDsKKyAgICB2b2lkKiBub3RpZmljYXRpb25EYXRh
ID0gaXQtPnZhbHVlLnNlY29uZDsKIAogICAgIG1fcGVuZGluZ1VSTE5vdGlmaWNhdGlvbnMucmVt
b3ZlKGl0KTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1
Z2lucy9QbHVnaW5WaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9Q
bHVnaW5WaWV3LmNwcAppbmRleCBlMmE2ZTFmMDVmMmI0MzNhNTFlOTlhYWEwODU2M2U2NTlhMzhj
YTNhLi5jYWQzNzI2MGU0YmIxMjA4NTQ4ZWFlMjk0NjA1Zjg0MTBiMTkwNWIwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCkBAIC0xNzAs
OSArMTcwLDkgQEAgc3RhdGljIFN0cmluZyBidWlsZEhUVFBIZWFkZXJzKGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmIHJlc3BvbnNlLCBsb25nIGxvbmcmIGV4cGUKICAgICAKICAgICBIVFRQSGVhZGVy
TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSByZXNwb25zZS5odHRwSGVhZGVyRmllbGRzKCkuZW5k
KCk7CiAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHJlc3BvbnNl
Lmh0dHBIZWFkZXJGaWVsZHMoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPmZpcnN0LmNoYXJhY3RlcnMoKSwgaXQtPmZpcnN0Lmxl
bmd0aCgpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPmtleS5jaGFyYWN0ZXJz
KCksIGl0LT5rZXkubGVuZ3RoKCkpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChzZXBh
cmF0b3IuY2hhcmFjdGVycygpLCBzZXBhcmF0b3IubGVuZ3RoKCkpOwotICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZChpdC0+c2Vjb25kLmNoYXJhY3RlcnMoKSwgaXQtPnNlY29uZC5sZW5ndGgo
KSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT52YWx1ZS5jaGFyYWN0ZXJzKCks
IGl0LT52YWx1ZS5sZW5ndGgoKSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicp
OwogICAgIH0KICAgICAKQEAgLTI4NCw3ICsyODQsNyBAQCBQbHVnaW5WaWV3Ojp+UGx1Z2luVmll
dygpCiAKICAgICAvLyBDYW5jZWwgYWxsIHBlbmRpbmcgZnJhbWUgbG9hZHMuCiAgICAgZm9yIChG
cmFtZUxvYWRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wZW5kaW5nRnJhbWVMb2Fkcy5iZWdpbigpLCBl
bmQgPSBtX3BlbmRpbmdGcmFtZUxvYWRzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAg
IGl0LT5maXJzdC0+c2V0TG9hZExpc3RlbmVyKDApOworICAgICAgICBpdC0+a2V5LT5zZXRMb2Fk
TGlzdGVuZXIoMCk7CiAKICAgICBpZiAobV9wbHVnaW4pIHsKICAgICAgICAgbV9pc0JlaW5nRGVz
dHJveWVkID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCmluZGV4IGNlNTQ4YjAxNjBlMTJkNDEwZTI5MTlkOTlm
ODM1YWQ5NzlhMmI2ZjYuLjhlNzA0MzE1YjMwOWRjZjUzY2FkNTc3MzBjMDE5Nzk0ZmU4MTAxZGMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRl
ZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyLmNwcApAQCAtNTMsNyArNTMsNyBAQCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIq
IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6bGF5ZXJCeUlEKFdlYktpdDo6V2ViTGF5ZXJJRAog
ICAgIEhhc2hNYXA8V2ViTGF5ZXJJRCwgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKj46Oml0ZXJh
dG9yIGl0ID0gdGFibGUuZmluZChpZCk7CiAgICAgaWYgKGl0ID09IHRhYmxlLmVuZCgpKQogICAg
ICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICByZXR1cm4gaXQtPnZh
bHVlOwogfQogCiBzdGF0aWMgV2ViTGF5ZXJJRCB0b1dlYkxheWVySUQoR3JhcGhpY3NMYXllciog
bGF5ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29v
cmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGlu
YXRvci5jcHAKaW5kZXggMjcyZGYwOWM3ODRkYWFjNmI0N2VjOWZiYjcwZTc1MmZiZjRhZmU5NC4u
YmE1YjQ2OTExYWM4ZGU3Y2VmOTUwYWFmMDhkNjVjMWVhMzg3MGYxYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJU
cmVlQ29vcmRpbmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcApAQCAtNDcwLDcg
KzQ3MCw3IEBAIGludDY0X3QgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmFkb3B0SW1hZ2VCYWNraW5n
U3RvcmUoSW1hZ2UqIGltYWdlKQogICAgIEhhc2hNYXA8aW50NjRfdCwgaW50Pjo6aXRlcmF0b3Ig
aXQgPSBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLmZpbmQoa2V5KTsKIAogICAg
IGlmIChpdCAhPSBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLmVuZCgpKSB7Ci0g
ICAgICAgICsrKGl0LT5zZWNvbmQpOworICAgICAgICArKyhpdC0+dmFsdWUpOwogICAgICAgICBy
ZXR1cm4ga2V5OwogICAgIH0KIApAQCAtNDk1LDkgKzQ5NSw5IEBAIHZvaWQgTGF5ZXJUcmVlQ29v
cmRpbmF0b3I6OnJlbGVhc2VJbWFnZUJhY2tpbmdTdG9yZShpbnQ2NF90IGtleSkKICAgICBpZiAo
aXQgPT0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5lbmQoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgaXQtPnNlY29uZC0tOworICAgIGl0LT52YWx1ZS0tOwogCi0gICAgaWYg
KGl0LT5zZWNvbmQpCisgICAgaWYgKGl0LT52YWx1ZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
bV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5yZW1vdmUoaXQpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFBy
b3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9yd2Fy
ZExpc3RQcm94eS5jcHAKaW5kZXggNGNhNGU1ZmRiNzJjZmNlYWM2OTU0NWRkMTdkOWY3YTJjYzg0
NjgzOC4uYmU4MmExOTdhNzM2ZDYyMzJhNTQzN2RhOWMyOTAyZWIwNWNhM2EwYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFBy
b3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFja0Zv
cndhcmRMaXN0UHJveHkuY3BwCkBAIC0xMzAsOSArMTMwLDkgQEAgdm9pZCBXZWJCYWNrRm9yd2Fy
ZExpc3RQcm94eTo6cmVtb3ZlSXRlbSh1aW50NjRfdCBpdGVtSUQpCiAgICAgaWYgKGl0ID09IGlk
VG9IaXN0b3J5SXRlbU1hcCgpLmVuZCgpKQogICAgICAgICByZXR1cm47CiAgICAgICAgIAotICAg
IFdlYkNvcmU6OnBhZ2VDYWNoZSgpLT5yZW1vdmUoaXQtPnNlY29uZC5nZXQoKSk7CisgICAgV2Vi
Q29yZTo6cGFnZUNhY2hlKCktPnJlbW92ZShpdC0+dmFsdWUuZ2V0KCkpOwogCi0gICAgaGlzdG9y
eUl0ZW1Ub0lETWFwKCkucmVtb3ZlKGl0LT5zZWNvbmQpOworICAgIGhpc3RvcnlJdGVtVG9JRE1h
cCgpLnJlbW92ZShpdC0+dmFsdWUpOwogICAgIGlkVG9IaXN0b3J5SXRlbU1hcCgpLnJlbW92ZShp
dCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9t
YWMvV2ViUGFnZU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMv
V2ViUGFnZU1hYy5tbQppbmRleCBjMmYwMTY1Mzc1OTUzYjUzY2MzY2QxYjllYjQzMWRiNWVjZWI5
M2FkLi4yMjI3M2MxZjY0NjIxZDlmZjAyODBlNzVjZTYxMzViYTVkMjVhYjczIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCkBA
IC0xMjEsNyArMTIxLDcgQEAgc3RhdGljIFN0cmluZyBjb21tYW5kTmFtZUZvclNlbGVjdG9yTmFt
ZShjb25zdCBTdHJpbmcmIHNlbGVjdG9yTmFtZSkKICAgICBzdGF0aWMgY29uc3QgU2VsZWN0b3JO
YW1lTWFwKiBleGNlcHRpb25NYXAgPSBjcmVhdGVTZWxlY3RvckV4Y2VwdGlvbk1hcCgpOwogICAg
IFNlbGVjdG9yTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBleGNlcHRpb25NYXAtPmZpbmQo
c2VsZWN0b3JOYW1lKTsKICAgICBpZiAoaXQgIT0gZXhjZXB0aW9uTWFwLT5lbmQoKSkKLSAgICAg
ICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBpdC0+dmFsdWU7CiAKICAgICAv
LyBSZW1vdmUgdGhlIHRyYWlsaW5nIGNvbG9uLgogICAgIC8vIE5vIG5lZWQgdG8gY2FwaXRhbGl6
ZSB0aGUgY29tbWFuZCBuYW1lIHNpbmNlIEVkaXRvciBjb21tYW5kIG5hbWVzIGFyZSBub3QgY2Fz
ZSBzZW5zaXRpdmUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBy
b2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAppbmRl
eCA3YzAzNmQ0MjE2MzA4NTllYTY2MDExYjhmZjE0NDk3N2I1MTM2NzkxLi41Mjc3ZGQxNGM0N2E2
ZDQwMmU0Y2M2MjRhMDUzMjQzZjQ4ZjNlZDg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUHJvY2Vzcy5jcHAKQEAgLTM0Niw3ICszNDYsNyBAQCB2b2lkIFdlYlByb2Nlc3M6OnZpc2l0
ZWRMaW5rU3RhdGVDaGFuZ2VkKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpMaW5rSGFzaD4mIGxpbmtI
YQogICAgICAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8V2ViUGFnZUdyb3VwUHJveHk+ID46
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wYWdlR3JvdXBNYXAuYmVnaW4oKTsKICAgICAgICAgSGFz
aE1hcDx1aW50NjRfdCwgUmVmUHRyPFdlYlBhZ2VHcm91cFByb3h5PiA+Ojpjb25zdF9pdGVyYXRv
ciBlbmQgPSBtX3BhZ2VHcm91cE1hcC5lbmQoKTsKICAgICAgICAgZm9yICg7IGl0ICE9IGVuZDsg
KytpdCkKLSAgICAgICAgICAgIFBhZ2U6OnZpc2l0ZWRTdGF0ZUNoYW5nZWQoUGFnZUdyb3VwOjpw
YWdlR3JvdXAoaXQtPnNlY29uZC0+aWRlbnRpZmllcigpKSwgbGlua0hhc2hlc1tpXSk7CisgICAg
ICAgICAgICBQYWdlOjp2aXNpdGVkU3RhdGVDaGFuZ2VkKFBhZ2VHcm91cDo6cGFnZUdyb3VwKGl0
LT52YWx1ZS0+aWRlbnRpZmllcigpKSwgbGlua0hhc2hlc1tpXSk7CiAgICAgfQogCiAgICAgcGFn
ZUNhY2hlKCktPm1hcmtQYWdlc0ZvclZpc3RlZExpbmtTdHlsZVJlY2FsYygpOwpAQCAtMzU4LDcg
KzM1OCw3IEBAIHZvaWQgV2ViUHJvY2Vzczo6YWxsVmlzaXRlZExpbmtTdGF0ZUNoYW5nZWQoKQog
ICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxXZWJQYWdlR3JvdXBQcm94eT4gPjo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX3BhZ2VHcm91cE1hcC5iZWdpbigpOwogICAgIEhhc2hNYXA8dWludDY0
X3QsIFJlZlB0cjxXZWJQYWdlR3JvdXBQcm94eT4gPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9w
YWdlR3JvdXBNYXAuZW5kKCk7CiAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAg
UGFnZTo6YWxsVmlzaXRlZFN0YXRlQ2hhbmdlZChQYWdlR3JvdXA6OnBhZ2VHcm91cChpdC0+c2Vj
b25kLT5pZGVudGlmaWVyKCkpKTsKKyAgICAgICAgUGFnZTo6YWxsVmlzaXRlZFN0YXRlQ2hhbmdl
ZChQYWdlR3JvdXA6OnBhZ2VHcm91cChpdC0+dmFsdWUtPmlkZW50aWZpZXIoKSkpOwogCiAgICAg
cGFnZUNhY2hlKCktPm1hcmtQYWdlc0ZvclZpc3RlZExpbmtTdHlsZVJlY2FsYygpOwogfQpAQCAt
NTM0LDcgKzUzNCw3IEBAIFdlYlBhZ2UqIFdlYlByb2Nlc3M6OmZvY3VzZWRXZWJQYWdlKCkgY29u
c3QKIHsgICAgCiAgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPFdlYlBhZ2U+ID46OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IG1fcGFnZU1hcC5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8dWludDY0
X3QsIFJlZlB0cjxXZWJQYWdlPiA+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGFnZU1hcC5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgV2ViUGFnZSogcGFnZSA9ICgqaXQpLnNl
Y29uZC5nZXQoKTsKKyAgICAgICAgV2ViUGFnZSogcGFnZSA9ICgqaXQpLnZhbHVlLmdldCgpOwog
ICAgICAgICBpZiAocGFnZS0+d2luZG93QW5kV2ViUGFnZUFyZUZvY3VzZWQoKSkKICAgICAgICAg
ICAgIHJldHVybiBwYWdlOwogICAgIH0KQEAgLTU1MiwxNCArNTUyLDE0IEBAIHZvaWQgV2ViUHJv
Y2Vzczo6Y3JlYXRlV2ViUGFnZSh1aW50NjRfdCBwYWdlSUQsIGNvbnN0IFdlYlBhZ2VDcmVhdGlv
blBhcmFtZXRlcnMmCiAgICAgLy8gbGluaykgdGhlIFdlYlBhZ2UgZ2V0cyBjcmVhdGVkIGJvdGgg
aW4gdGhlIHN5bmNocm9ub3VzIGhhbmRsZXIgYW5kIHRocm91Z2ggdGhlIG5vcm1hbCB3YXkuIAog
ICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxXZWJQYWdlPiA+OjpBZGRSZXN1bHQgcmVzdWx0
ID0gbV9wYWdlTWFwLmFkZChwYWdlSUQsIDApOwogICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkg
ewotICAgICAgICBBU1NFUlQoIXJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKLSAgICAgICAgcmVz
dWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBXZWJQYWdlOjpjcmVhdGUocGFnZUlELCBwYXJhbWV0ZXJz
KTsKKyAgICAgICAgQVNTRVJUKCFyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKKyAgICAgICAgcmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZSA9IFdlYlBhZ2U6OmNyZWF0ZShwYWdlSUQsIHBhcmFtZXRlcnMp
OwogCiAgICAgICAgIC8vIEJhbGFuY2VkIGJ5IGFuIGVuYWJsZVRlcm1pbmF0aW9uIGluIHJlbW92
ZVdlYlBhZ2UuCiAgICAgICAgIGRpc2FibGVUZXJtaW5hdGlvbigpOwogICAgIH0KIAotICAgIEFT
U0VSVChyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7CisgICAgQVNTRVJUKHJlc3VsdC5pdGVyYXRv
ci0+dmFsdWUpOwogfQogCiB2b2lkIFdlYlByb2Nlc3M6OnJlbW92ZVdlYlBhZ2UodWludDY0X3Qg
cGFnZUlEKQpAQCAtNzk0LDExICs3OTQsMTEgQEAgV2ViUGFnZUdyb3VwUHJveHkqIFdlYlByb2Nl
c3M6OndlYlBhZ2VHcm91cChjb25zdCBXZWJQYWdlR3JvdXBEYXRhJiBwYWdlR3JvdXBEYXQKIHsK
ICAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8V2ViUGFnZUdyb3VwUHJveHk+ID46OkFkZFJl
c3VsdCByZXN1bHQgPSBtX3BhZ2VHcm91cE1hcC5hZGQocGFnZUdyb3VwRGF0YS5wYWdlR3JvdXBJ
RCwgMCk7CiAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIEFTU0VSVCghcmVz
dWx0Lml0ZXJhdG9yLT5zZWNvbmQpOwotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9
IFdlYlBhZ2VHcm91cFByb3h5OjpjcmVhdGUocGFnZUdyb3VwRGF0YSk7CisgICAgICAgIEFTU0VS
VCghcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFs
dWUgPSBXZWJQYWdlR3JvdXBQcm94eTo6Y3JlYXRlKHBhZ2VHcm91cERhdGEpOwogICAgIH0KIAot
ICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnNlY29uZC5nZXQoKTsKKyAgICByZXR1cm4gcmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKIH0KIAogI2lmIEVOQUJMRShXRUJfSU5URU5UUykK
QEAgLTkyNCw3ICs5MjQsNyBAQCBzdGF0aWMgdm9pZCBmcm9tQ291bnRlZFNldFRvSGFzaE1hcChU
eXBlQ291bnRTZXQqIGNvdW50ZWRTZXQsIEhhc2hNYXA8U3RyaW5nLCB1aQogewogICAgIFR5cGVD
b3VudFNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY291bnRlZFNldC0+ZW5kKCk7CiAgICAgZm9y
IChUeXBlQ291bnRTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY291bnRlZFNldC0+YmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KQotICAgICAgICBtYXAuc2V0KGl0LT5maXJzdCwgaXQtPnNlY29uZCk7
CisgICAgICAgIG1hcC5zZXQoaXQtPmtleSwgaXQtPnZhbHVlKTsKIH0KIAogc3RhdGljIHZvaWQg
Z2V0V2ViQ29yZU1lbW9yeUNhY2hlU3RhdGlzdGljcyhWZWN0b3I8SGFzaE1hcDxTdHJpbmcsIHVp
bnQ2NF90PiA+JiByZXN1bHQpCkBAIC0xMDk3LDcgKzEwOTcsNyBAQCB2b2lkIFdlYlByb2Nlc3M6
OnNldFRleHRDaGVja2VyU3RhdGUoY29uc3QgVGV4dENoZWNrZXJTdGF0ZSYgdGV4dENoZWNrZXJT
dGF0ZSkKIAogICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxXZWJQYWdlPiA+OjppdGVyYXRv
ciBlbmQgPSBtX3BhZ2VNYXAuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPHVpbnQ2NF90LCBSZWZQ
dHI8V2ViUGFnZT4gPjo6aXRlcmF0b3IgaXQgPSBtX3BhZ2VNYXAuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7Ci0gICAgICAgIFdlYlBhZ2UqIHBhZ2UgPSAoKml0KS5zZWNvbmQuZ2V0KCk7Cisg
ICAgICAgIFdlYlBhZ2UqIHBhZ2UgPSAoKml0KS52YWx1ZS5nZXQoKTsKICAgICAgICAgaWYgKGNv
bnRpbnVvdXNTcGVsbENoZWNraW5nVHVybmVkT2ZmKQogICAgICAgICAgICAgcGFnZS0+dW5tYXJr
QWxsTWlzc3BlbGxpbmdzKCk7CiAgICAgICAgIGlmIChncmFtbWFyQ2hlY2tpbmdUdXJuZWRPZmYp
CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMWQ3
MmY5Yjk3NDVmNmM3NTFmNDAxY2NmYmU2Nzg4MWVhZGEzMDY4OC4uYWE3ZGJlNjJjOTYxZGE5OThh
ZTdkOTVhNWEyYTg4OGI2ZmJjMDU3ZSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBi
L1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDEyLTEwLTA3ICBDYWlvIE1hcmNl
bG8gZGUgT2xpdmVpcmEgRmlsaG8gIDxjYWlvLm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+CisKKyAg
ICAgICAgUmVuYW1lIGZpcnN0L3NlY29uZCB0byBrZXkvdmFsdWUgaW4gSGFzaE1hcCBpdGVyYXRv
cnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyNzg0
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCisKKyAgICAgICAgKiBEdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9Nb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyLmNwcDoKKyAgICAg
ICAgKE1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXI6OmFkZE1vY2tSZWNvZ25pdGlvblJlc3Vs
dCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTm90aWZpY2F0aW9uUHJlc2Vu
dGVyLmNwcDoKKyAgICAgICAgKE5vdGlmaWNhdGlvblByZXNlbnRlcjo6c2ltdWxhdGVDbGljayk6
CisgICAgICAgIChOb3RpZmljYXRpb25QcmVzZW50ZXI6OnNob3cpOgorICAgICAgICAqIER1bXBS
ZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvQ3BwQm91bmRDbGFzcy5jcHA6CisgICAgICAg
IChDcHBCb3VuZENsYXNzOjp+Q3BwQm91bmRDbGFzcyk6CisgICAgICAgIChDcHBCb3VuZENsYXNz
OjppbnZva2UpOgorICAgICAgICAoQ3BwQm91bmRDbGFzczo6Z2V0UHJvcGVydHkpOgorICAgICAg
ICAoQ3BwQm91bmRDbGFzczo6c2V0UHJvcGVydHkpOgorICAgICAgICAoQ3BwQm91bmRDbGFzczo6
YmluZENhbGxiYWNrKToKKyAgICAgICAgKENwcEJvdW5kQ2xhc3M6OmJpbmRQcm9wZXJ0eSk6Cisg
ICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViUHJlZmVyZW5jZXMuY3BwOgorICAg
ICAgICAoYXBwbHlGb250TWFwKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9X
ZWJWaWV3SG9zdC5jcHA6CisgICAgICAgIChXZWJWaWV3SG9zdDo6cHJpbnRSZXNvdXJjZURlc2Ny
aXB0aW9uKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMvVGVzdFJ1bm5lck1hYy5tbToK
KyAgICAgICAgKHdvcmxkSURGb3JXb3JsZCk6CisgICAgICAgIChUZXN0UnVubmVyOjpldmFsdWF0
ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL0Fj
Y2Vzc2liaWxpdHlDb250cm9sbGVyV2luLmNwcDoKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlDb250
cm9sbGVyOjp+QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIpOgorICAgICAgICAoQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXI6Ondpbk5vdGlmaWNhdGlvblJlY2VpdmVkKToKKyAgICAgICAgKiBEdW1wUmVu
ZGVyVHJlZS93aW4vUmVzb3VyY2VMb2FkRGVsZWdhdGUuY3BwOgorICAgICAgICAoUmVzb3VyY2VM
b2FkRGVsZWdhdGU6OmRlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KToKKyAgICAgICAg
KiBEdW1wUmVuZGVyVHJlZS93aW4vVGVzdFJ1bm5lcldpbi5jcHA6CisgICAgICAgICh3b3JsZElE
Rm9yV29ybGQpOgorICAgICAgICAoVGVzdFJ1bm5lcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVk
V29ybGQpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9ET01XaW5kb3dF
eHRlbnNpb25CYXNpY19CdW5kbGUuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6RE9NV2lu
ZG93RXh0ZW5zaW9uQmFzaWM6OndpbGxEZXN0cm95UGFnZSk6CisgICAgICAgICogVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXQyL0RPTVdpbmRvd0V4dGVuc2lvbk5vQ2FjaGVfQnVuZGxlLmNwcDoK
KyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkRPTVdpbmRvd0V4dGVuc2lvbk5vQ2FjaGU6OndpbGxE
ZXN0cm95UGFnZSk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9U
ZXN0UnVubmVyLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6d29ybGRJREZvcldvcmxk
KToKKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29y
bGQpOgorCiAyMDEyLTEwLTA3ICBSYXBoYWVsIEt1Ym8gZGEgQ29zdGEgIDxyYXBoYWVsLmt1Ym8u
ZGEuY29zdGFAaW50ZWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIx
MzA1OTYuCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9Nb2NrV2Vi
U3BlZWNoSW5wdXRDb250cm9sbGVyLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L01vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIuY3BwCmluZGV4IDcxNjIyMmY5YWNjZmU4ZmZi
ZTM1OTk3ODUzODM3NjQ3MDZjNjRlMWUuLjEzYzhmZjFlYzRjMWNkZTU1MDc2Njk4ZGZjZmU1ZTg3
MTI2YTgyZWIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL01vY2tX
ZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL01vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIuY3BwCkBAIC01Miw3ICs1Miw3IEBA
IHZvaWQgTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcjo6YWRkTW9ja1JlY29nbml0aW9uUmVz
dWx0KGNvbnN0IFdlYlN0cmluZyYgcmVzCiAgICAgICAgIFN0cmluZyBsYW5nU3RyaW5nID0gU3Ry
aW5nOjpmcm9tVVRGOChsYW5ndWFnZS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgaWYgKCFtX3Jl
Y29nbml0aW9uUmVzdWx0cy5jb250YWlucyhsYW5nU3RyaW5nKSkKICAgICAgICAgICAgIG1fcmVj
b2duaXRpb25SZXN1bHRzLnNldChsYW5nU3RyaW5nLCBWZWN0b3I8V2ViU3BlZWNoSW5wdXRSZXN1
bHQ+KCkpOwotICAgICAgICBtX3JlY29nbml0aW9uUmVzdWx0cy5maW5kKGxhbmdTdHJpbmcpLT5z
ZWNvbmQuYXBwZW5kKHJlcyk7CisgICAgICAgIG1fcmVjb2duaXRpb25SZXN1bHRzLmZpbmQobGFu
Z1N0cmluZyktPnZhbHVlLmFwcGVuZChyZXMpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvVG9v
bHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTm90aWZpY2F0aW9uUHJlc2VudGVyLmNwcCBiL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL05vdGlmaWNhdGlvblByZXNlbnRlci5jcHAKaW5k
ZXggMGM1NDAwZjVlOWU4ZjcxNzBlY2Y1OTlhODFiZDQyNmZiZDc3MjkxZC4uYTIxNTg4Zjc0NGU1
YzNmNWFiNzBkYmRiMDNjMjc1YzUwNzA4ZjAzYSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vTm90aWZpY2F0aW9uUHJlc2VudGVyLmNwcAorKysgYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9Ob3RpZmljYXRpb25QcmVzZW50ZXIuY3BwCkBAIC03NSw3ICs3
NSw3IEBAIGJvb2wgTm90aWZpY2F0aW9uUHJlc2VudGVyOjpzaW11bGF0ZUNsaWNrKGNvbnN0IFdl
YlN0cmluZyYgdGl0bGUpCiAgICAgaWYgKG1fYWN0aXZlTm90aWZpY2F0aW9ucy5maW5kKGlkKSA9
PSBtX2FjdGl2ZU5vdGlmaWNhdGlvbnMuZW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAKLSAgICBjb25zdCBXZWJOb3RpZmljYXRpb24mIG5vdGlmaWNhdGlvbiA9IG1fYWN0aXZlTm90
aWZpY2F0aW9ucy5maW5kKGlkKS0+c2Vjb25kOworICAgIGNvbnN0IFdlYk5vdGlmaWNhdGlvbiYg
bm90aWZpY2F0aW9uID0gbV9hY3RpdmVOb3RpZmljYXRpb25zLmZpbmQoaWQpLT52YWx1ZTsKICAg
ICBXZWJOb3RpZmljYXRpb24gZXZlbnRUYXJnZXQobm90aWZpY2F0aW9uKTsKICAgICBldmVudFRh
cmdldC5kaXNwYXRjaENsaWNrRXZlbnQoKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTg5LDcgKzg5
LDcgQEAgYm9vbCBOb3RpZmljYXRpb25QcmVzZW50ZXI6OnNob3coY29uc3QgV2ViTm90aWZpY2F0
aW9uJiBub3RpZmljYXRpb24pCiAgICAgICAgIFdURjo6U3RyaW5nIHJlcGxhY2VJZChub3RpZmlj
YXRpb24ucmVwbGFjZUlkKCkuZGF0YSgpLCBub3RpZmljYXRpb24ucmVwbGFjZUlkKCkubGVuZ3Ro
KCkpOwogICAgICAgICBpZiAobV9yZXBsYWNlbWVudHMuZmluZChyZXBsYWNlSWQpICE9IG1fcmVw
bGFjZW1lbnRzLmVuZCgpKQogICAgICAgICAgICAgcHJpbnRmKCJSRVBMQUNJTkcgTk9USUZJQ0FU
SU9OICVzXG4iLAotICAgICAgICAgICAgICAgICAgIG1fcmVwbGFjZW1lbnRzLmZpbmQocmVwbGFj
ZUlkKS0+c2Vjb25kLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgICAgICAgIG1fcmVwbGFj
ZW1lbnRzLmZpbmQocmVwbGFjZUlkKS0+dmFsdWUudXRmOCgpLmRhdGEoKSk7CiAKICAgICAgICAg
bV9yZXBsYWNlbWVudHMuc2V0KHJlcGxhY2VJZCwgV1RGOjpTdHJpbmcoaWRlbnRpZmllci5kYXRh
KCksIGlkZW50aWZpZXIubGVuZ3RoKCkpKTsKICAgICB9CmRpZmYgLS1naXQgYS9Ub29scy9EdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL0NwcEJvdW5kQ2xhc3MuY3BwIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9DcHBCb3VuZENsYXNzLmNwcAppbmRl
eCA5YjRhM2I2NDY0NWQwNTdiNDE3MmUxYzdkZmEwN2M3YTYyZTc3Y2Y4Li4xYjI5ZDJiMGY1NWQw
MWY3Mzg3MTQ1Nzg3N2Y5ZGJkZjA2ZjFiNDkxIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL0NwcEJvdW5kQ2xhc3MuY3BwCisrKyBiL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvQ3BwQm91bmRDbGFzcy5jcHAKQEAgLTIw
MywxMCArMjAzLDEwIEBAIGJvb2wgQ3BwTlBPYmplY3Q6OnNldFByb3BlcnR5KE5QT2JqZWN0KiBu
cE9iaiwgTlBJZGVudGlmaWVyIGlkZW50LCBjb25zdCBOUFZhcmlhCiBDcHBCb3VuZENsYXNzOjp+
Q3BwQm91bmRDbGFzcygpCiB7CiAgICAgZm9yIChNZXRob2RMaXN0OjppdGVyYXRvciBpID0gbV9t
ZXRob2RzLmJlZ2luKCk7IGkgIT0gbV9tZXRob2RzLmVuZCgpOyArK2kpCi0gICAgICAgIGRlbGV0
ZSBpLT5zZWNvbmQ7CisgICAgICAgIGRlbGV0ZSBpLT52YWx1ZTsKIAogICAgIGZvciAoUHJvcGVy
dHlMaXN0OjppdGVyYXRvciBpID0gbV9wcm9wZXJ0aWVzLmJlZ2luKCk7IGkgIT0gbV9wcm9wZXJ0
aWVzLmVuZCgpOyArK2kpCi0gICAgICAgIGRlbGV0ZSBpLT5zZWNvbmQ7CisgICAgICAgIGRlbGV0
ZSBpLT52YWx1ZTsKIAogICAgIC8vIFVucmVnaXN0ZXIgb3Vyc2VsdmVzIGlmIHdlIHdlcmUgYm91
bmQgdG8gYSBmcmFtZS4KICAgICBpZiAobV9ib3VuZFRvRnJhbWUpCkBAIC0yMzcsNyArMjM3LDcg
QEAgYm9vbCBDcHBCb3VuZENsYXNzOjppbnZva2UoTlBJZGVudGlmaWVyIGlkZW50LAogICAgICAg
ICB9CiAgICAgICAgIGNhbGxiYWNrID0gbV9mYWxsYmFja0NhbGxiYWNrLmdldCgpOwogICAgIH0g
ZWxzZQotICAgICAgICBjYWxsYmFjayA9ICgqbWV0aG9kKS5zZWNvbmQ7CisgICAgICAgIGNhbGxi
YWNrID0gKCptZXRob2QpLnZhbHVlOwogCiAgICAgLy8gQnVpbGQgYSBDcHBBcmd1bWVudExpc3Qg
YXJndW1lbnQgdmVjdG9yIGZyb20gdGhlIE5QVmFyaWFudHMgY29taW5nIGluLgogICAgIENwcEFy
Z3VtZW50TGlzdCBjcHBBcmd1bWVudHMoYXJndW1lbnRDb3VudCk7CkBAIC0yNjAsNyArMjYwLDcg
QEAgYm9vbCBDcHBCb3VuZENsYXNzOjpnZXRQcm9wZXJ0eShOUElkZW50aWZpZXIgaWRlbnQsIE5Q
VmFyaWFudCogcmVzdWx0KSBjb25zdAogICAgIH0KIAogICAgIENwcFZhcmlhbnQgY3BwVmFsdWU7
Ci0gICAgaWYgKCFjYWxsYmFjay0+c2Vjb25kLT5nZXRWYWx1ZSgmY3BwVmFsdWUpKQorICAgIGlm
ICghY2FsbGJhY2stPnZhbHVlLT5nZXRWYWx1ZSgmY3BwVmFsdWUpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgY3BwVmFsdWUuY29weVRvTlBWYXJpYW50KHJlc3VsdCk7CiAgICAgcmV0dXJu
IHRydWU7CkBAIC0yNzQsNyArMjc0LDcgQEAgYm9vbCBDcHBCb3VuZENsYXNzOjpzZXRQcm9wZXJ0
eShOUElkZW50aWZpZXIgaWRlbnQsIGNvbnN0IE5QVmFyaWFudCogdmFsdWUpCiAKICAgICBDcHBW
YXJpYW50IGNwcFZhbHVlOwogICAgIGNwcFZhbHVlLnNldCgqdmFsdWUpOwotICAgIHJldHVybiAo
KmNhbGxiYWNrKS5zZWNvbmQtPnNldFZhbHVlKGNwcFZhbHVlKTsKKyAgICByZXR1cm4gKCpjYWxs
YmFjaykudmFsdWUtPnNldFZhbHVlKGNwcFZhbHVlKTsKIH0KIAogdm9pZCBDcHBCb3VuZENsYXNz
OjpiaW5kQ2FsbGJhY2soY29uc3Qgc3RyaW5nJiBuYW1lLCBDYWxsYmFjayogY2FsbGJhY2spCkBA
IC0yODIsNyArMjgyLDcgQEAgdm9pZCBDcHBCb3VuZENsYXNzOjpiaW5kQ2FsbGJhY2soY29uc3Qg
c3RyaW5nJiBuYW1lLCBDYWxsYmFjayogY2FsbGJhY2spCiAgICAgTlBJZGVudGlmaWVyIGlkZW50
ID0gV2ViQmluZGluZ3M6OmdldFN0cmluZ0lkZW50aWZpZXIobmFtZS5jX3N0cigpKTsKICAgICBN
ZXRob2RMaXN0OjppdGVyYXRvciBvbGRDYWxsYmFjayA9IG1fbWV0aG9kcy5maW5kKGlkZW50KTsK
ICAgICBpZiAob2xkQ2FsbGJhY2sgIT0gbV9tZXRob2RzLmVuZCgpKSB7Ci0gICAgICAgIGRlbGV0
ZSBvbGRDYWxsYmFjay0+c2Vjb25kOworICAgICAgICBkZWxldGUgb2xkQ2FsbGJhY2stPnZhbHVl
OwogICAgICAgICBpZiAoIWNhbGxiYWNrKSB7CiAgICAgICAgICAgICBtX21ldGhvZHMucmVtb3Zl
KG9sZENhbGxiYWNrKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTMwOSw3ICszMDksNyBAQCB2
b2lkIENwcEJvdW5kQ2xhc3M6OmJpbmRQcm9wZXJ0eShjb25zdCBzdHJpbmcmIG5hbWUsIFByb3Bl
cnR5Q2FsbGJhY2sqIGNhbGxiYWNrKQogICAgIE5QSWRlbnRpZmllciBpZGVudCA9IFdlYkJpbmRp
bmdzOjpnZXRTdHJpbmdJZGVudGlmaWVyKG5hbWUuY19zdHIoKSk7CiAgICAgUHJvcGVydHlMaXN0
OjppdGVyYXRvciBvbGRDYWxsYmFjayA9IG1fcHJvcGVydGllcy5maW5kKGlkZW50KTsKICAgICBp
ZiAob2xkQ2FsbGJhY2sgIT0gbV9wcm9wZXJ0aWVzLmVuZCgpKSB7Ci0gICAgICAgIGRlbGV0ZSBv
bGRDYWxsYmFjay0+c2Vjb25kOworICAgICAgICBkZWxldGUgb2xkQ2FsbGJhY2stPnZhbHVlOwog
ICAgICAgICBpZiAoIWNhbGxiYWNrKSB7CiAgICAgICAgICAgICBtX3Byb3BlcnRpZXMucmVtb3Zl
KG9sZENhbGxiYWNrKTsKICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZlcmVuY2VzLmNwcCBiL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL1dlYlByZWZlcmVuY2VzLmNwcAppbmRleCA1ZWViZjU5NmQ5NzYyNGQx
OWI3ZjdlZGMzZWFjYWNiNDZkYjc3NTE5Li4zYmMyY2RkOWYyYWU0MTcwYzMzYWQ2NDEwNmQ0YTdm
MmQwOTAyMWY1IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQ
cmVmZXJlbmNlcy5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViUHJl
ZmVyZW5jZXMuY3BwCkBAIC0xNTYsOSArMTU2LDkgQEAgdHlwZWRlZiB2b2lkICgqU2V0Rm9udEZh
bWlseVdyYXBwZXIpKFdlYlNldHRpbmdzKiwgY29uc3QgV2ViU3RyaW5nJiwgVVNjcmlwdENvZGUK
IHN0YXRpYyB2b2lkIGFwcGx5Rm9udE1hcChXZWJTZXR0aW5ncyogc2V0dGluZ3MsIGNvbnN0IFdl
YlByZWZlcmVuY2VzOjpTY3JpcHRGb250RmFtaWx5TWFwJiBtYXAsIFNldEZvbnRGYW1pbHlXcmFw
cGVyIHNldHRlcikKIHsKICAgICBmb3IgKFdlYlByZWZlcmVuY2VzOjpTY3JpcHRGb250RmFtaWx5
TWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbWFwLmJlZ2luKCk7IGl0ZXIgIT0gbWFwLmVuZCgp
OyArK2l0ZXIpIHsKLSAgICAgICAgY29uc3QgV2ViU3RyaW5nJiBmb250ID0gaXRlci0+c2Vjb25k
OworICAgICAgICBjb25zdCBXZWJTdHJpbmcmIGZvbnQgPSBpdGVyLT52YWx1ZTsKICAgICAgICAg
aWYgKCFmb250LmlzTnVsbCgpICYmICFmb250LmlzRW1wdHkoKSkKLSAgICAgICAgICAgICgqc2V0
dGVyKShzZXR0aW5ncywgZm9udCwgc3RhdGljX2Nhc3Q8VVNjcmlwdENvZGU+KGl0ZXItPmZpcnN0
KSk7CisgICAgICAgICAgICAoKnNldHRlcikoc2V0dGluZ3MsIGZvbnQsIHN0YXRpY19jYXN0PFVT
Y3JpcHRDb2RlPihpdGVyLT5rZXkpKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcAppbmRleCBhMGMzOTVjOTZhMzBiOGM4NDBiZDUz
NDk1ZjY5OGQ1MGQzMzZkZjJhLi5jN2FiNDc1ZTdmZTc5ZWYxOGQ1Mjg4MmUzNTcyNmE0NTk2NTZk
N2U5IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9z
dC5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuY3Bw
CkBAIC0xNzc0LDcgKzE3NzQsNyBAQCB2b2lkIFdlYlZpZXdIb3N0OjpwcmludEZyYW1lVXNlckdl
c3R1cmVTdGF0dXMoV2ViRnJhbWUqIHdlYmZyYW1lLCBjb25zdCBjaGFyKiBtcwogdm9pZCBXZWJW
aWV3SG9zdDo6cHJpbnRSZXNvdXJjZURlc2NyaXB0aW9uKHVuc2lnbmVkIGlkZW50aWZpZXIpCiB7
CiAgICAgUmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZUlkZW50aWZpZXJNYXAu
ZmluZChpZGVudGlmaWVyKTsKLSAgICBwcmludGYoIiVzIiwgaXQgIT0gbV9yZXNvdXJjZUlkZW50
aWZpZXJNYXAuZW5kKCkgPyBpdC0+c2Vjb25kLmNfc3RyKCkgOiAiPHVua25vd24+Iik7CisgICAg
cHJpbnRmKCIlcyIsIGl0ICE9IG1fcmVzb3VyY2VJZGVudGlmaWVyTWFwLmVuZCgpID8gaXQtPnZh
bHVlLmNfc3RyKCkgOiAiPHVua25vd24+Iik7CiB9CiAKIHZvaWQgV2ViVmlld0hvc3Q6OnNldFBl
bmRpbmdFeHRyYURhdGEoUGFzc093blB0cjxUZXN0U2hlbGxFeHRyYURhdGE+IGV4dHJhRGF0YSkK
ZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9Nb2NrV2ViTm90aWZpY2F0aW9u
UHJvdmlkZXIubW0gYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvTW9ja1dlYk5vdGlmaWNhdGlv
blByb3ZpZGVyLm1tCmluZGV4IDJiNjkzZmRhMmViOWIxNzg2MzgzNjg5NjJiNzBjNDJiYTg3Nzli
OGIuLjQyNjQ0NjAwYTk2NGVmNzE2NDNkZGI2MzgyODFhZWQwZGIxYWExYjYgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9Nb2NrV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIubW0K
KysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL01vY2tXZWJOb3RpZmljYXRpb25Qcm92aWRl
ci5tbQpAQCAtMTA3LDcgKzEwNyw3IEBACiAgICAgICAgIHVpbnQ2NF90IGlkID0gW25vdGlmaWNh
dGlvbklEIHVuc2lnbmVkTG9uZ0xvbmdWYWx1ZV07CiAgICAgICAgIE5vdGlmaWNhdGlvbklETWFw
OjppdGVyYXRvciBpdCA9IF9ub3RpZmljYXRpb25zLmZpbmQoaWQpOwogICAgICAgICBBU1NFUlQo
aXQgIT0gX25vdGlmaWNhdGlvbnMuZW5kKCkpOwotICAgICAgICBbaXQtPnNlY29uZC5nZXQoKSBk
aXNwYXRjaENsb3NlRXZlbnRdOworICAgICAgICBbaXQtPnZhbHVlLmdldCgpIGRpc3BhdGNoQ2xv
c2VFdmVudF07CiAgICAgICAgIF9ub3RpZmljYXRpb25zLnJlbW92ZShpdCk7CiAgICAgICAgIF9u
b3RpZmljYXRpb25WaWV3TWFwLnJlbW92ZShpZCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvVG9vbHMv
RHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW0gYi9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9tYWMvVGVzdFJ1bm5lck1hYy5tbQppbmRleCA4MWExNjY1Zjg5OGM0ODg0NGFlY2U4NWYwMjQ5
MDg2OTk3ODBmODllLi41OThmZDlmODM4YmY2YTI1N2U1Njk5ZTY1ZWViNjAxMzM0MGNjMmY2IDEw
MDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvVGVzdFJ1bm5lck1hYy5tbQorKysg
Yi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvVGVzdFJ1bm5lck1hYy5tbQpAQCAtOTA0LDggKzkw
NCw4IEBAIHVuc2lnbmVkIHdvcmxkSURGb3JXb3JsZChXZWJTY3JpcHRXb3JsZCAqd29ybGQpCiB7
CiAgICAgV29ybGRNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHdvcmxkTWFwKCkuZW5kKCk7CiAg
ICAgZm9yIChXb3JsZE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSB3b3JsZE1hcCgpLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnNlY29uZCA9PSB3b3JsZCkKLSAg
ICAgICAgICAgIHJldHVybiBpdC0+Zmlyc3Q7CisgICAgICAgIGlmIChpdC0+dmFsdWUgPT0gd29y
bGQpCisgICAgICAgICAgICByZXR1cm4gaXQtPmtleTsKICAgICB9CiAKICAgICByZXR1cm4gMDsK
QEAgLTkyNyw3ICs5MjcsNyBAQCB2b2lkIFRlc3RSdW5uZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29s
YXRlZFdvcmxkKHVuc2lnbmVkIHdvcmxkSUQsIEpTT2JqZWN0UmVmIGdsbwogICAgIGlmICghd29y
bGRJRCkKICAgICAgICAgd29ybGQgPSBbV2ViU2NyaXB0V29ybGQgd29ybGRdOwogICAgIGVsc2Ug
ewotICAgICAgICBSZXRhaW5QdHI8V2ViU2NyaXB0V29ybGQ+JiB3b3JsZFNsb3QgPSB3b3JsZE1h
cCgpLmFkZCh3b3JsZElELCAwKS5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICBSZXRhaW5QdHI8
V2ViU2NyaXB0V29ybGQ+JiB3b3JsZFNsb3QgPSB3b3JsZE1hcCgpLmFkZCh3b3JsZElELCAwKS5p
dGVyYXRvci0+dmFsdWU7CiAgICAgICAgIGlmICghd29ybGRTbG90KQogICAgICAgICAgICAgd29y
bGRTbG90LmFkb3B0TlMoW1tXZWJTY3JpcHRXb3JsZCBhbGxvY10gaW5pdF0pOwogICAgICAgICB3
b3JsZCA9IHdvcmxkU2xvdC5nZXQoKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L3dpbi9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlcldpbi5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJl
ZS93aW4vQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJXaW4uY3BwCmluZGV4IDllNzZjOGRkYTMzMjdh
MDdlOGU4N2UzMzZjOGFkNjlhOTQ0NDY4ODkuLjk5NWM1ZjExNWMyZWEzZDk4Yzg2NzIyZTRkZGYz
OGQwYzNmNTUwYmMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9BY2Nlc3Np
YmlsaXR5Q29udHJvbGxlcldpbi5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0Fj
Y2Vzc2liaWxpdHlDb250cm9sbGVyV2luLmNwcApAQCAtNTgsNyArNTgsNyBAQCBBY2Nlc3NpYmls
aXR5Q29udHJvbGxlcjo6fkFjY2Vzc2liaWxpdHlDb250cm9sbGVyKCkKICAgICAgICAgVW5ob29r
V2luRXZlbnQobV9ub3RpZmljYXRpb25zRXZlbnRIb29rKTsKIAogICAgIGZvciAoSGFzaE1hcDxQ
bGF0Zm9ybVVJRWxlbWVudCwgSlNPYmplY3RSZWY+OjppdGVyYXRvciBpdCA9IG1fbm90aWZpY2F0
aW9uTGlzdGVuZXJzLmJlZ2luKCk7IGl0ICE9IG1fbm90aWZpY2F0aW9uTGlzdGVuZXJzLmVuZCgp
OyArK2l0KQotICAgICAgICBKU1ZhbHVlVW5wcm90ZWN0KGZyYW1lLT5nbG9iYWxDb250ZXh0KCks
IGl0LT5zZWNvbmQpOworICAgICAgICBKU1ZhbHVlVW5wcm90ZWN0KGZyYW1lLT5nbG9iYWxDb250
ZXh0KCksIGl0LT52YWx1ZSk7CiB9CiAKIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXI6OmVsZW1lbnRBdFBvaW50KGludCB4LCBpbnQgeSkKQEAgLTI5OSw3ICsy
OTksNyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpyZW1vdmVOb3RpZmljYXRpb25M
aXN0ZW5lcigpCiB2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjp3aW5Ob3RpZmljYXRpb25S
ZWNlaXZlZChQbGF0Zm9ybVVJRWxlbWVudCBlbGVtZW50LCBjb25zdCBzdHJpbmcmIGV2ZW50TmFt
ZSkKIHsKICAgICBmb3IgKEhhc2hNYXA8UGxhdGZvcm1VSUVsZW1lbnQsIEpTT2JqZWN0UmVmPjo6
aXRlcmF0b3IgaXQgPSBtX25vdGlmaWNhdGlvbkxpc3RlbmVycy5iZWdpbigpOyBpdCAhPSBtX25v
dGlmaWNhdGlvbkxpc3RlbmVycy5lbmQoKTsgKytpdCkgewotICAgICAgICBDT01QdHI8SVNlcnZp
Y2VQcm92aWRlcj4gdGhpc1NlcnZpY2VQcm92aWRlcihRdWVyeSwgaXQtPmZpcnN0KTsKKyAgICAg
ICAgQ09NUHRyPElTZXJ2aWNlUHJvdmlkZXI+IHRoaXNTZXJ2aWNlUHJvdmlkZXIoUXVlcnksIGl0
LT5rZXkpOwogICAgICAgICBpZiAoIXRoaXNTZXJ2aWNlUHJvdmlkZXIpCiAgICAgICAgICAgICBj
b250aW51ZTsKIApAQCAtMzIyLDcgKzMyMiw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXI6Ondpbk5vdGlmaWNhdGlvblJlY2VpdmVkKFBsYXRmb3JtVUlFbGVtZW50IGVsZW1lbnQsCiAK
ICAgICAgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGpzTm90aWZpY2F0aW9uKEFkb3B0LCBK
U1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhldmVudE5hbWUuY19zdHIoKSkpOwogICAgICAg
ICBKU1ZhbHVlUmVmIGFyZ3VtZW50ID0gSlNWYWx1ZU1ha2VTdHJpbmcoZnJhbWUtPmdsb2JhbENv
bnRleHQoKSwganNOb3RpZmljYXRpb24uZ2V0KCkpOwotICAgICAgICBKU09iamVjdENhbGxBc0Z1
bmN0aW9uKGZyYW1lLT5nbG9iYWxDb250ZXh0KCksIGl0LT5zZWNvbmQsIE5VTEwsIDEsICZhcmd1
bWVudCwgTlVMTCk7CisgICAgICAgIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24oZnJhbWUtPmdsb2Jh
bENvbnRleHQoKSwgaXQtPnZhbHVlLCAwLCAxLCAmYXJndW1lbnQsIDApOwogICAgIH0KIH0KIApk
aWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1Jlc291cmNlTG9hZERlbGVnYXRl
LmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9SZXNvdXJjZUxvYWREZWxlZ2F0ZS5jcHAK
aW5kZXggOTBiOWFlMGZjYzNmNjE3ZjRmZjY3NTU2MmRhMjk2ZWU1ZTJiYmMzMy4uNjg1OTc4MGYz
OTJmMThlMzA2NjFiMDQ5MjdiNGNjY2JmM2M0NzFhMiAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJl
bmRlclRyZWUvd2luL1Jlc291cmNlTG9hZERlbGVnYXRlLmNwcAorKysgYi9Ub29scy9EdW1wUmVu
ZGVyVHJlZS93aW4vUmVzb3VyY2VMb2FkRGVsZWdhdGUuY3BwCkBAIC02Niw3ICs2Niw3IEBAIHdz
dHJpbmcgUmVzb3VyY2VMb2FkRGVsZWdhdGU6OmRlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVz
dWx0KHVuc2lnbmVkIGxvbmcgaWRlCiAgICAgaWYgKGl0ID09IG1fdXJsTWFwLmVuZCgpKQogICAg
ICAgICByZXR1cm4gTCI8dW5rbm93bj4iOwogCi0gICAgcmV0dXJuIHVybFN1aXRhYmxlRm9yVGVz
dFJlc3VsdChpdC0+c2Vjb25kKTsKKyAgICByZXR1cm4gdXJsU3VpdGFibGVGb3JUZXN0UmVzdWx0
KGl0LT52YWx1ZSk7CiB9CiAKIHdzdHJpbmcgUmVzb3VyY2VMb2FkRGVsZWdhdGU6OmRlc2NyaXB0
aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KElXZWJVUkxSZXF1ZXN0KiByZXF1ZXN0KQpkaWZmIC0t
Z2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1Rlc3RSdW5uZXJXaW4uY3BwIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvd2luL1Rlc3RSdW5uZXJXaW4uY3BwCmluZGV4IDkzZTYzN2QwNjMwMzY5
YjVlZDAyZDFlZWE3NmUzMDQ5NjRlNzlmOGIuLjVkNTlmMmIyNzJmMDViOGViMWFhM2MwMzYxNWMx
MzFkNThmYzg4MWIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9UZXN0UnVu
bmVyV2luLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vVGVzdFJ1bm5lcldpbi5j
cHAKQEAgLTEyNDYsOCArMTI0Niw4IEBAIHVuc2lnbmVkIHdvcmxkSURGb3JXb3JsZChJV2ViU2Ny
aXB0V29ybGQqIHdvcmxkKQogewogICAgIFdvcmxkTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSB3
b3JsZE1hcCgpLmVuZCgpOwogICAgIGZvciAoV29ybGRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
d29ybGRNYXAoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5z
ZWNvbmQgPT0gd29ybGQpCi0gICAgICAgICAgICByZXR1cm4gaXQtPmZpcnN0OworICAgICAgICBp
ZiAoaXQtPnZhbHVlID09IHdvcmxkKQorICAgICAgICAgICAgcmV0dXJuIGl0LT5rZXk7CiAgICAg
fQogCiAgICAgcmV0dXJuIDA7CkBAIC0xMjcxLDcgKzEyNzEsNyBAQCB2b2lkIFRlc3RSdW5uZXI6
OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKHVuc2lnbmVkIHdvcmxkSUQsIEpTT2JqZWN0
UmVmIGdsbwogICAgICAgICBpZiAoRkFJTEVEKFdlYktpdENyZWF0ZUluc3RhbmNlKF9fdXVpZG9m
KFdlYlNjcmlwdFdvcmxkKSwgMCwgX191dWlkb2Yod29ybGQpLCByZWludGVycHJldF9jYXN0PHZv
aWQqKj4oJndvcmxkKSkpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0gZWxzZSB7Ci0gICAg
ICAgIENPTVB0cjxJV2ViU2NyaXB0V29ybGQ+JiB3b3JsZFNsb3QgPSB3b3JsZE1hcCgpLmFkZCh3
b3JsZElELCAwKS5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICBDT01QdHI8SVdlYlNjcmlwdFdv
cmxkPiYgd29ybGRTbG90ID0gd29ybGRNYXAoKS5hZGQod29ybGRJRCwgMCkuaXRlcmF0b3ItPnZh
bHVlOwogICAgICAgICBpZiAoIXdvcmxkU2xvdCAmJiBGQUlMRUQoV2ViS2l0Q3JlYXRlSW5zdGFu
Y2UoX191dWlkb2YoV2ViU2NyaXB0V29ybGQpLCAwLCBfX3V1aWRvZih3b3JsZFNsb3QpLCByZWlu
dGVycHJldF9jYXN0PHZvaWQqKj4oJndvcmxkU2xvdCkpKSkKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgd29ybGQgPSB3b3JsZFNsb3Q7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdDIvRE9NV2luZG93RXh0ZW5zaW9uQmFzaWNfQnVuZGxlLmNwcCBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9ET01XaW5kb3dFeHRlbnNpb25CYXNpY19C
dW5kbGUuY3BwCmluZGV4IDk4YmZhYjM1YWY0NmNmNDljNjJiY2M5YjBhODU5NDU3ZjQ4Y2MxYzEu
LjViMTI5NmY0N2QxOWQyOGI5ZGU3ZmNlOGQxMzFhYTQwNTQ3NmJkZDEgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9ET01XaW5kb3dFeHRlbnNpb25CYXNpY19C
dW5kbGUuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9ET01XaW5k
b3dFeHRlbnNpb25CYXNpY19CdW5kbGUuY3BwCkBAIC0xNzEsOCArMTcxLDggQEAgdm9pZCBET01X
aW5kb3dFeHRlbnNpb25CYXNpYzo6d2lsbERlc3Ryb3lQYWdlKFdLQnVuZGxlUmVmLCBXS0J1bmRs
ZVBhZ2VSZWYpCiAgICAgSGFzaE1hcDxXS0J1bmRsZURPTVdpbmRvd0V4dGVuc2lvblJlZiwgaW50
Pjo6aXRlcmF0b3IgaXQgPSBtX2V4dGVuc2lvblRvUmVjb3JkTWFwLmJlZ2luKCk7CiAgICAgSGFz
aE1hcDxXS0J1bmRsZURPTVdpbmRvd0V4dGVuc2lvblJlZiwgaW50Pjo6aXRlcmF0b3IgZW5kID0g
bV9leHRlbnNpb25Ub1JlY29yZE1hcC5lbmQoKTsKICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0
KSB7Ci0gICAgICAgIHVwZGF0ZUV4dGVuc2lvblN0YXRlUmVjb3JkKGl0LT5maXJzdCwgUmVtb3Zl
ZCk7Ci0gICAgICAgIFdLUmVsZWFzZShpdC0+Zmlyc3QpOworICAgICAgICB1cGRhdGVFeHRlbnNp
b25TdGF0ZVJlY29yZChpdC0+a2V5LCBSZW1vdmVkKTsKKyAgICAgICAgV0tSZWxlYXNlKGl0LT5r
ZXkpOwogICAgIH0KIAogICAgIG1fZXh0ZW5zaW9uVG9SZWNvcmRNYXAuY2xlYXIoKTsKZGlmZiAt
LWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9ET01XaW5kb3dFeHRlbnNp
b25Ob0NhY2hlX0J1bmRsZS5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIv
RE9NV2luZG93RXh0ZW5zaW9uTm9DYWNoZV9CdW5kbGUuY3BwCmluZGV4IDhmNmNkN2IzNzM1YjVh
ZTI3OWQwYWRiNzcxODVjNWQyODA3MTFjYWUuLjQxMWUxMTVlYTQ0ZmJlNDg3MGU3ZjFmMzFkOTA1
ZTg1NzdmMDdlMjIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Mi9ET01XaW5kb3dFeHRlbnNpb25Ob0NhY2hlX0J1bmRsZS5jcHAKKysrIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXQyL0RPTVdpbmRvd0V4dGVuc2lvbk5vQ2FjaGVfQnVuZGxlLmNw
cApAQCAtMTc4LDggKzE3OCw4IEBAIHZvaWQgRE9NV2luZG93RXh0ZW5zaW9uTm9DYWNoZTo6d2ls
bERlc3Ryb3lQYWdlKFdLQnVuZGxlUmVmLCBXS0J1bmRsZVBhZ2VSZWYpCiAgICAgSGFzaE1hcDxX
S0J1bmRsZURPTVdpbmRvd0V4dGVuc2lvblJlZiwgaW50Pjo6aXRlcmF0b3IgaXQgPSBtX2V4dGVu
c2lvblRvUmVjb3JkTWFwLmJlZ2luKCk7CiAgICAgSGFzaE1hcDxXS0J1bmRsZURPTVdpbmRvd0V4
dGVuc2lvblJlZiwgaW50Pjo6aXRlcmF0b3IgZW5kID0gbV9leHRlbnNpb25Ub1JlY29yZE1hcC5l
bmQoKTsKICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIHVwZGF0ZUV4dGVu
c2lvblN0YXRlUmVjb3JkKGl0LT5maXJzdCwgUmVtb3ZlZCk7Ci0gICAgICAgIFdLUmVsZWFzZShp
dC0+Zmlyc3QpOworICAgICAgICB1cGRhdGVFeHRlbnNpb25TdGF0ZVJlY29yZChpdC0+a2V5LCBS
ZW1vdmVkKTsKKyAgICAgICAgV0tSZWxlYXNlKGl0LT5rZXkpOwogICAgIH0KIAogICAgIG1fZXh0
ZW5zaW9uVG9SZWNvcmRNYXAuY2xlYXIoKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwCmluZGV4IDYyNmJhYjQ0YzRlZWJjNGNl
ZWJmYjQzZTI1MDQ1MTMyNzAyOGI1NDkuLmRjYTE2ZjI4M2JmYWI0YzVhNWE0YWU0MWM1ODRmOTI3
OGE5Yzg4ODAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvVGVzdFJ1bm5lci5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9UZXN0UnVubmVyLmNwcApAQCAtNDg5LDggKzQ4OSw4IEBAIHVuc2lnbmVkIFRlc3RSdW5u
ZXI6OndvcmxkSURGb3JXb3JsZChXS0J1bmRsZVNjcmlwdFdvcmxkUmVmIHdvcmxkKQogewogICAg
IFdvcmxkTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSB3b3JsZE1hcCgpLmVuZCgpOwogICAgIGZv
ciAoV29ybGRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gd29ybGRNYXAoKS5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQgPT0gd29ybGQpCi0gICAgICAg
ICAgICByZXR1cm4gaXQtPmZpcnN0OworICAgICAgICBpZiAoaXQtPnZhbHVlID09IHdvcmxkKQor
ICAgICAgICAgICAgcmV0dXJuIGl0LT5rZXk7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CkBAIC01
MDQsNyArNTA0LDcgQEAgdm9pZCBUZXN0UnVubmVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRX
b3JsZChKU0NvbnRleHRSZWYgY29udGV4dCwgdW5zaWduZWQgd28KICAgICBpZiAoIXdvcmxkSUQp
CiAgICAgICAgIHdvcmxkLmFkb3B0KFdLQnVuZGxlU2NyaXB0V29ybGRDcmVhdGVXb3JsZCgpKTsK
ICAgICBlbHNlIHsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tCdW5kbGVTY3JpcHRXb3JsZFJlZj4m
IHdvcmxkU2xvdCA9IHdvcmxkTWFwKCkuYWRkKHdvcmxkSUQsIDApLml0ZXJhdG9yLT5zZWNvbmQ7
CisgICAgICAgIFdLUmV0YWluUHRyPFdLQnVuZGxlU2NyaXB0V29ybGRSZWY+JiB3b3JsZFNsb3Qg
PSB3b3JsZE1hcCgpLmFkZCh3b3JsZElELCAwKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgIGlm
ICghd29ybGRTbG90KQogICAgICAgICAgICAgd29ybGRTbG90LmFkb3B0KFdLQnVuZGxlU2NyaXB0
V29ybGRDcmVhdGVXb3JsZCgpKTsKICAgICAgICAgd29ybGQgPSB3b3JsZFNsb3Q7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>